Upgrade TypeScript to 4.4.2

DISABLE_THIRD_PARTY_CHECK=Upgrade requires some compatability changes
R=tvanderlippe@chromium.org

Fixed: 1247593
Change-Id: I78ffad8d969e043952555cac813ac803f2561bb5
Reviewed-on: https://chromium-review.googlesource.com/c/devtools/devtools-frontend/+/3147890
Commit-Queue: Simon Zünd <szuend@chromium.org>
Reviewed-by: Tim van der Lippe <tvanderlippe@chromium.org>
diff --git a/config/typescript/tsconfig.base.json b/config/typescript/tsconfig.base.json
index 29970d2..0b723a6 100644
--- a/config/typescript/tsconfig.base.json
+++ b/config/typescript/tsconfig.base.json
@@ -11,6 +11,7 @@
     "forceConsistentCasingInFileNames": true,
     "noImplicitReturns": true,
     "noFallthroughCasesInSwitch": true,
+    "useUnknownInCatchVariables": false,
 
     "composite": true,
     "declaration": true,
diff --git a/front_end/core/sdk/TracingModel.ts b/front_end/core/sdk/TracingModel.ts
index ad41584..b09dc60 100644
--- a/front_end/core/sdk/TracingModel.ts
+++ b/front_end/core/sdk/TracingModel.ts
@@ -814,7 +814,7 @@
     this.asyncEventsInternal.sort(Event.compareStartTime);
     this.eventsInternal.sort(Event.compareStartTime);
     const phases = Phase;
-    const stack = [];
+    const stack: Event[] = [];
     const toDelete = new Set<number>();
     for (let i = 0; i < this.eventsInternal.length; ++i) {
       const e = this.eventsInternal[i];
diff --git a/front_end/legacy/legacy-defs.d.ts b/front_end/legacy/legacy-defs.d.ts
index 042cd01..7f37f73 100644
--- a/front_end/legacy/legacy-defs.d.ts
+++ b/front_end/legacy/legacy-defs.d.ts
@@ -139,3 +139,18 @@
   diff_main(text1: string, text2: string): Array<{0: number, 1: string}>;
   diff_cleanupSemantic(diff: Array<{0: number, 1: string}>): void;
 }
+
+// The following types exist in Chrome but were removed for various reasons
+// from the TypeScript DOM library.
+//
+// TODO(crbug.com/1247609): Replace use sites with appropriate web platform types.
+
+interface DOMError {
+  readonly name: string;
+  readonly message: string;
+}
+
+interface ShadowRoot {
+  elementFromPoint(x: number, y: number): Element | null;
+  getSelection(): Selection | null;
+}
diff --git a/front_end/panels/issues/IssueAggregator.ts b/front_end/panels/issues/IssueAggregator.ts
index e0546f8..0059cdc 100644
--- a/front_end/panels/issues/IssueAggregator.ts
+++ b/front_end/panels/issues/IssueAggregator.ts
@@ -271,7 +271,7 @@
 
   private aggregateIssueByStatus(
       aggregatedIssuesMap: Map<AggregationKey, AggregatedIssue>, issue: IssuesManager.Issue.Issue): AggregatedIssue {
-    const key = issue.code() as AggregationKey;
+    const key = issue.code() as unknown as AggregationKey;
     let aggregatedIssue = aggregatedIssuesMap.get(key);
     if (!aggregatedIssue) {
       aggregatedIssue = new AggregatedIssue(issue.code(), key);
@@ -310,7 +310,7 @@
   }
 
   keyForIssue(issue: IssuesManager.Issue.Issue<string>): AggregationKey {
-    return issue.code() as AggregationKey;
+    return issue.code() as unknown as AggregationKey;
   }
 }
 
diff --git a/front_end/panels/sources/SourcesPanel.ts b/front_end/panels/sources/SourcesPanel.ts
index 34abe01..e96a6f0 100644
--- a/front_end/panels/sources/SourcesPanel.ts
+++ b/front_end/panels/sources/SourcesPanel.ts
@@ -1111,10 +1111,9 @@
       return;
     }
     const entry = items[0].webkitGetAsEntry();
-    if (!entry.isDirectory) {
-      return;
+    if (entry && entry.isDirectory) {
+      Host.InspectorFrontendHost.InspectorFrontendHostInstance.upgradeDraggedFileSystemPermissions(entry.filesystem);
     }
-    Host.InspectorFrontendHost.InspectorFrontendHostInstance.upgradeDraggedFileSystemPermissions(entry.filesystem);
   }
 }
 
diff --git a/front_end/ui/legacy/Fragment.ts b/front_end/ui/legacy/Fragment.ts
index b81f030..d89a75d 100644
--- a/front_end/ui/legacy/Fragment.ts
+++ b/front_end/ui/legacy/Fragment.ts
@@ -67,7 +67,7 @@
     const template = document.createElement('template');
     template.innerHTML = html;
     const walker = template.ownerDocument.createTreeWalker(
-        template.content, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_TEXT, null, false);
+        template.content, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_TEXT, null);
     let valueIndex = 0;
     const emptyTextNodes = [];
     const binds: Bind[] = [];
diff --git a/front_end/ui/legacy/UIUtils.ts b/front_end/ui/legacy/UIUtils.ts
index 5792c14e..246b14d 100644
--- a/front_end/ui/legacy/UIUtils.ts
+++ b/front_end/ui/legacy/UIUtils.ts
@@ -219,7 +219,7 @@
     DragHandler.rootForMouseOut = event.target instanceof Node && event.target.getRootNode() || null;
     this.dragEventsTargetDocument = targetDocument;
     try {
-      if (targetDocument.defaultView) {
+      if (targetDocument.defaultView && targetDocument.defaultView.top) {
         this.dragEventsTargetDocumentTop = targetDocument.defaultView.top.document;
       }
     } catch (e) {
diff --git a/front_end/ui/legacy/utils/focus-changed.ts b/front_end/ui/legacy/utils/focus-changed.ts
index de2581f..27f9099 100644
--- a/front_end/ui/legacy/utils/focus-changed.ts
+++ b/front_end/ui/legacy/utils/focus-changed.ts
@@ -35,7 +35,7 @@
   const XWidgetCtor = customElements.get('x-widget');
   let widget = null;
   while (node) {
-    if (node instanceof XWidgetCtor) {
+    if (XWidgetCtor && node instanceof XWidgetCtor) {
       if (widget) {
         // TODO(crbug.com/1172300) Ignored during the jsdoc to ts migration
         // eslint-disable-next-line @typescript-eslint/no-explicit-any
diff --git a/node_modules/.package-lock.json b/node_modules/.package-lock.json
index f47c000..e29e914 100644
--- a/node_modules/.package-lock.json
+++ b/node_modules/.package-lock.json
@@ -271,9 +271,9 @@
       }
     },
     "node_modules/@eslint/eslintrc/node_modules/globals": {
-      "version": "13.10.0",
-      "resolved": "https://registry.npmjs.org/globals/-/globals-13.10.0.tgz",
-      "integrity": "sha512-piHC3blgLGFjvOuMmWZX60f+na1lXFDhQXBf1UYp2fXPXqvEUbOhNwi6BsQ0bQishwedgnjkwv1d9zKf+MWw3g==",
+      "version": "13.11.0",
+      "resolved": "https://registry.npmjs.org/globals/-/globals-13.11.0.tgz",
+      "integrity": "sha512-08/xrJ7wQjK9kkkRoI3OFUBbLx4f+6x3SGwcPvQ0QH6goFDrOU2oyAWrmh3dJezu65buo+HBMzAMQy6rovVC3g==",
       "dev": true,
       "dependencies": {
         "type-fest": "^0.20.2"
@@ -1198,9 +1198,9 @@
       }
     },
     "node_modules/ast-types/node_modules/tslib": {
-      "version": "2.3.0",
-      "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.0.tgz",
-      "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==",
+      "version": "2.3.1",
+      "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz",
+      "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==",
       "dev": true
     },
     "node_modules/astral-regex": {
@@ -1844,9 +1844,9 @@
       ]
     },
     "node_modules/css-select/node_modules/domhandler": {
-      "version": "4.2.0",
-      "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.0.tgz",
-      "integrity": "sha512-zk7sgt970kzPks2Bf+dwT/PLzghLnsivb9CcxkvR8Mzr66Olr0Ofd8neSbglHJHaHa2MadfoSdNlKYAaafmWfA==",
+      "version": "4.2.2",
+      "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.2.tgz",
+      "integrity": "sha512-PzE9aBMsdZO8TK4BnuJwH0QT41wgMbRzuZrHUcpYncEjmQazq8QEaBWgLG7ZyC/DAZKEgglpIA6j4Qn/HmxS3w==",
       "dev": true,
       "dependencies": {
         "domelementtype": "^2.2.0"
@@ -1859,9 +1859,9 @@
       }
     },
     "node_modules/css-select/node_modules/domutils": {
-      "version": "2.7.0",
-      "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.7.0.tgz",
-      "integrity": "sha512-8eaHa17IwJUPAiB+SoTYBo5mCdeMgdcAoXJ59m6DT1vw+5iLS3gNoqYaRowaBKtGVrOF1Jz4yDTgYKLK2kvfJg==",
+      "version": "2.8.0",
+      "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz",
+      "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==",
       "dev": true,
       "dependencies": {
         "dom-serializer": "^1.0.1",
@@ -2800,9 +2800,9 @@
       }
     },
     "node_modules/eslint/node_modules/chalk": {
-      "version": "4.1.1",
-      "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz",
-      "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==",
+      "version": "4.1.2",
+      "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+      "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
       "dev": true,
       "dependencies": {
         "ansi-styles": "^4.1.0",
@@ -2855,9 +2855,9 @@
       }
     },
     "node_modules/eslint/node_modules/globals": {
-      "version": "13.10.0",
-      "resolved": "https://registry.npmjs.org/globals/-/globals-13.10.0.tgz",
-      "integrity": "sha512-piHC3blgLGFjvOuMmWZX60f+na1lXFDhQXBf1UYp2fXPXqvEUbOhNwi6BsQ0bQishwedgnjkwv1d9zKf+MWw3g==",
+      "version": "13.11.0",
+      "resolved": "https://registry.npmjs.org/globals/-/globals-13.11.0.tgz",
+      "integrity": "sha512-08/xrJ7wQjK9kkkRoI3OFUBbLx4f+6x3SGwcPvQ0QH6goFDrOU2oyAWrmh3dJezu65buo+HBMzAMQy6rovVC3g==",
       "dev": true,
       "dependencies": {
         "type-fest": "^0.20.2"
@@ -3333,19 +3333,6 @@
       "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
       "dev": true
     },
-    "node_modules/fsevents": {
-      "version": "2.3.2",
-      "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
-      "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
-      "dev": true,
-      "optional": true,
-      "os": [
-        "darwin"
-      ],
-      "engines": {
-        "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
-      }
-    },
     "node_modules/function-bind": {
       "version": "1.1.1",
       "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
@@ -4598,9 +4585,9 @@
       }
     },
     "node_modules/log-symbols/node_modules/chalk": {
-      "version": "4.1.1",
-      "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz",
-      "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==",
+      "version": "4.1.2",
+      "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+      "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
       "dev": true,
       "dependencies": {
         "ansi-styles": "^4.1.0",
@@ -4824,13 +4811,13 @@
       }
     },
     "node_modules/meow/node_modules/normalize-package-data": {
-      "version": "3.0.2",
-      "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.2.tgz",
-      "integrity": "sha512-6CdZocmfGaKnIHPVFhJJZ3GuR8SsLKvDANFp47Jmy51aKIr8akjAWTSxtpI+MBgBFdSMRyo4hMpDlT6dTffgZg==",
+      "version": "3.0.3",
+      "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz",
+      "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==",
       "dev": true,
       "dependencies": {
         "hosted-git-info": "^4.0.1",
-        "resolve": "^1.20.0",
+        "is-core-module": "^2.5.0",
         "semver": "^7.3.4",
         "validate-npm-package-license": "^3.0.1"
       },
@@ -6240,9 +6227,9 @@
       }
     },
     "node_modules/recast/node_modules/tslib": {
-      "version": "2.3.0",
-      "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.0.tgz",
-      "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==",
+      "version": "2.3.1",
+      "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz",
+      "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==",
       "dev": true
     },
     "node_modules/redent": {
@@ -6669,9 +6656,9 @@
       }
     },
     "node_modules/socket.io/node_modules/@types/node": {
-      "version": "14.17.6",
-      "resolved": "https://registry.npmjs.org/@types/node/-/node-14.17.6.tgz",
-      "integrity": "sha512-iBxsxU7eswQDGhlr3AiamBxOssaYxbM+NKXVil8jg9yFXvrfEFbDumLD/2dMTB+zYyg7w+Xjt8yuxfdbUHAtcQ==",
+      "version": "14.17.15",
+      "resolved": "https://registry.npmjs.org/@types/node/-/node-14.17.15.tgz",
+      "integrity": "sha512-D1sdW0EcSCmNdLKBGMYb38YsHUS6JcM7yQ6sLQ9KuZ35ck7LYCKE7kYFHOO59ayFOY3zobWVZxf4KXhYHcHYFA==",
       "dev": true
     },
     "node_modules/source-map": {
@@ -7023,9 +7010,9 @@
       "dev": true
     },
     "node_modules/stylelint/node_modules/chalk": {
-      "version": "4.1.1",
-      "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz",
-      "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==",
+      "version": "4.1.2",
+      "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+      "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
       "dev": true,
       "dependencies": {
         "ansi-styles": "^4.1.0",
@@ -7194,9 +7181,9 @@
       }
     },
     "node_modules/svgo/node_modules/chalk": {
-      "version": "4.1.1",
-      "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz",
-      "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==",
+      "version": "4.1.2",
+      "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+      "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
       "dev": true,
       "dependencies": {
         "ansi-styles": "^4.1.0",
@@ -7570,9 +7557,9 @@
       }
     },
     "node_modules/typescript": {
-      "version": "4.3.5",
-      "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.3.5.tgz",
-      "integrity": "sha512-DqQgihaQ9cUrskJo9kIyW/+g0Vxsk8cDtZ52a3NGh0YNTfpUSArXSohyUGnvbPazEPLu398C0UxmKSOrPumUzA==",
+      "version": "4.4.2",
+      "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.4.2.tgz",
+      "integrity": "sha512-gzP+t5W4hdy4c+68bfcv0t400HVJMMd2+H9B7gae1nQlBzCqvrXX+6GL/b3GAgyTH966pzrZ70/fRjwAtZksSQ==",
       "dev": true,
       "bin": {
         "tsc": "bin/tsc",
diff --git a/node_modules/@eslint/eslintrc/node_modules/globals/globals.json b/node_modules/@eslint/eslintrc/node_modules/globals/globals.json
index 334ff3e..cbff038 100644
--- a/node_modules/@eslint/eslintrc/node_modules/globals/globals.json
+++ b/node_modules/@eslint/eslintrc/node_modules/globals/globals.json
@@ -1687,6 +1687,7 @@
 		"createObjectIn": false,
 		"exportFunction": false,
 		"GM": false,
+		"GM_addElement": false,
 		"GM_addStyle": false,
 		"GM_addValueChangeListener": false,
 		"GM_deleteValue": false,
diff --git a/node_modules/@eslint/eslintrc/node_modules/globals/package.json b/node_modules/@eslint/eslintrc/node_modules/globals/package.json
index 596fa6f..7890c18 100644
--- a/node_modules/@eslint/eslintrc/node_modules/globals/package.json
+++ b/node_modules/@eslint/eslintrc/node_modules/globals/package.json
@@ -1,6 +1,6 @@
 {
   "name": "globals",
-  "version": "13.10.0",
+  "version": "13.11.0",
   "description": "Global identifiers from different JavaScript environments",
   "license": "MIT",
   "repository": "sindresorhus/globals",
diff --git a/node_modules/ast-types/node_modules/tslib/package.json b/node_modules/ast-types/node_modules/tslib/package.json
index d8ccf7f..31df7d5 100644
--- a/node_modules/ast-types/node_modules/tslib/package.json
+++ b/node_modules/ast-types/node_modules/tslib/package.json
@@ -2,7 +2,7 @@
   "name": "tslib",
   "author": "Microsoft Corp.",
   "homepage": "https://www.typescriptlang.org/",
-  "version": "2.3.0",
+  "version": "2.3.1",
   "license": "0BSD",
   "description": "Runtime library for TypeScript helper functions",
   "keywords": [
diff --git a/node_modules/ast-types/node_modules/tslib/tslib.es6.js b/node_modules/ast-types/node_modules/tslib/tslib.es6.js
index b93adb8..4cec286 100644
--- a/node_modules/ast-types/node_modules/tslib/tslib.es6.js
+++ b/node_modules/ast-types/node_modules/tslib/tslib.es6.js
@@ -169,7 +169,7 @@
             ar[i] = from[i];
         }
     }
-    return to.concat(ar || from);
+    return to.concat(ar || Array.prototype.slice.call(from));
 }
 
 export function __await(v) {
diff --git a/node_modules/ast-types/node_modules/tslib/tslib.js b/node_modules/ast-types/node_modules/tslib/tslib.js
index 6805172..fab4f65 100644
--- a/node_modules/ast-types/node_modules/tslib/tslib.js
+++ b/node_modules/ast-types/node_modules/tslib/tslib.js
@@ -210,7 +210,7 @@
                 ar[i] = from[i];
             }
         }
-        return to.concat(ar || from);
+        return to.concat(ar || Array.prototype.slice.call(from));
     };
 
     __await = function (v) {
diff --git a/node_modules/css-select/node_modules/domhandler/lib/index.d.ts.map b/node_modules/css-select/node_modules/domhandler/lib/index.d.ts.map
index 1e1cd56..c5fe113 100644
--- a/node_modules/css-select/node_modules/domhandler/lib/index.d.ts.map
+++ b/node_modules/css-select/node_modules/domhandler/lib/index.d.ts.map
@@ -1 +1 @@
-{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EACH,IAAI,EACJ,OAAO,EACP,QAAQ,EAGR,gBAAgB,EAChB,QAAQ,EAEX,MAAM,QAAQ,CAAC;AAEhB,cAAc,QAAQ,CAAC;AAIvB,MAAM,WAAW,iBAAiB;IAC9B;;;;;;OAMG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAE3B;;;;;;OAMG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IAEzB;;;;;;;OAOG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAE9B;;;;OAIG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;CACrB;AASD,UAAU,eAAe;IACrB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAED,aAAK,QAAQ,GAAG,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,IAAI,CAAC;AAC3D,aAAK,eAAe,GAAG,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;AAElD,qBAAa,UAAU;IACnB,8BAA8B;IACvB,GAAG,EAAE,IAAI,EAAE,CAAM;IAExB,mCAAmC;IAC5B,IAAI,WAA0B;IAErC,yCAAyC;IACzC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAkB;IAE3C,gCAAgC;IAChC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAoB;IAE5C,yCAAyC;IACzC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAyB;IAEnD,oDAAoD;IACpD,OAAO,CAAC,IAAI,CAAS;IAErB,0BAA0B;IAC1B,SAAS,CAAC,QAAQ,EAAE,gBAAgB,EAAE,CAAe;IAErD,kDAAkD;IAClD,SAAS,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAAQ;IAE3C,uEAAuE;IACvE,OAAO,CAAC,MAAM,CAAgC;IAE9C;;;;OAIG;gBAEC,QAAQ,CAAC,EAAE,QAAQ,GAAG,IAAI,EAC1B,OAAO,CAAC,EAAE,iBAAiB,GAAG,IAAI,EAClC,SAAS,CAAC,EAAE,eAAe;IAiBxB,YAAY,CAAC,MAAM,EAAE,eAAe,GAAG,IAAI;IAK3C,OAAO,IAAI,IAAI;IAUf,KAAK,IAAI,IAAI;IAOb,OAAO,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IAI3B,UAAU,IAAI,IAAI;IAYlB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,GAAG,IAAI;IAOjE,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAwB1B,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAW7B,YAAY,IAAI,IAAI;IAIpB,YAAY,IAAI,IAAI;IAUpB,UAAU,IAAI,IAAI;IAIlB,uBAAuB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAKhE,SAAS,CAAC,cAAc,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,GAAG,IAAI;IAQnD,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI;CAwBtC;AAED,eAAe,UAAU,CAAC"}
\ No newline at end of file
+{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EACH,IAAI,EACJ,OAAO,EACP,QAAQ,EAGR,gBAAgB,EAChB,QAAQ,EAEX,MAAM,QAAQ,CAAC;AAEhB,cAAc,QAAQ,CAAC;AAIvB,MAAM,WAAW,iBAAiB;IAC9B;;;;;;OAMG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAE3B;;;;;;OAMG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IAEzB;;;;;;;OAOG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAE9B;;;;OAIG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;CACrB;AAUD,UAAU,eAAe;IACrB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAED,aAAK,QAAQ,GAAG,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,IAAI,CAAC;AAC3D,aAAK,eAAe,GAAG,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;AAElD,qBAAa,UAAU;IACnB,8BAA8B;IACvB,GAAG,EAAE,IAAI,EAAE,CAAM;IAExB,mCAAmC;IAC5B,IAAI,WAA0B;IAErC,yCAAyC;IACzC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAkB;IAE3C,gCAAgC;IAChC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAoB;IAE5C,yCAAyC;IACzC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAyB;IAEnD,oDAAoD;IACpD,OAAO,CAAC,IAAI,CAAS;IAErB,0BAA0B;IAC1B,SAAS,CAAC,QAAQ,EAAE,gBAAgB,EAAE,CAAe;IAErD,kDAAkD;IAClD,SAAS,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAAQ;IAE3C,uEAAuE;IACvE,OAAO,CAAC,MAAM,CAAgC;IAE9C;;;;OAIG;gBAEC,QAAQ,CAAC,EAAE,QAAQ,GAAG,IAAI,EAC1B,OAAO,CAAC,EAAE,iBAAiB,GAAG,IAAI,EAClC,SAAS,CAAC,EAAE,eAAe;IAiBxB,YAAY,CAAC,MAAM,EAAE,eAAe,GAAG,IAAI;IAK3C,OAAO,IAAI,IAAI;IAUf,KAAK,IAAI,IAAI;IAOb,OAAO,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IAI3B,UAAU,IAAI,IAAI;IAYlB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,GAAG,IAAI;IAOjE,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IA2B1B,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAW7B,YAAY,IAAI,IAAI;IAIpB,YAAY,IAAI,IAAI;IAUpB,UAAU,IAAI,IAAI;IAIlB,uBAAuB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAKhE,SAAS,CAAC,cAAc,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,GAAG,IAAI;IAQnD,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI;CAwBtC;AAED,eAAe,UAAU,CAAC"}
\ No newline at end of file
diff --git a/node_modules/css-select/node_modules/domhandler/lib/index.js b/node_modules/css-select/node_modules/domhandler/lib/index.js
index 73b34e4..5f5bb03 100644
--- a/node_modules/css-select/node_modules/domhandler/lib/index.js
+++ b/node_modules/css-select/node_modules/domhandler/lib/index.js
@@ -20,6 +20,7 @@
     normalizeWhitespace: false,
     withStartIndices: false,
     withEndIndices: false,
+    xmlMode: false,
 };
 var DomHandler = /** @class */ (function () {
     /**
@@ -58,13 +59,12 @@
     };
     // Resets the handler back to starting state
     DomHandler.prototype.onreset = function () {
-        var _a;
         this.dom = [];
         this.root = new node_1.Document(this.dom);
         this.done = false;
         this.tagStack = [this.root];
         this.lastNode = null;
-        this.parser = (_a = this.parser) !== null && _a !== void 0 ? _a : null;
+        this.parser = null;
     };
     // Signals the handler that parsing is done
     DomHandler.prototype.onend = function () {
@@ -102,6 +102,9 @@
             else {
                 lastNode.data += data;
             }
+            if (this.options.withEndIndices) {
+                lastNode.endIndex = this.parser.endIndex;
+            }
         }
         else {
             if (normalizeWhitespace) {
diff --git a/node_modules/css-select/node_modules/domhandler/lib/node.d.ts b/node_modules/css-select/node_modules/domhandler/lib/node.d.ts
index f9b7f0e..1f4b7bb 100644
--- a/node_modules/css-select/node_modules/domhandler/lib/node.d.ts
+++ b/node_modules/css-select/node_modules/domhandler/lib/node.d.ts
@@ -35,6 +35,9 @@
      */
     cloneNode<T extends Node>(this: T, recursive?: boolean): T;
 }
+/**
+ * A node that contains some data.
+ */
 export declare class DataNode extends Node {
     data: string;
     /**
@@ -45,12 +48,21 @@
     get nodeValue(): string;
     set nodeValue(data: string);
 }
+/**
+ * Text within the document.
+ */
 export declare class Text extends DataNode {
     constructor(data: string);
 }
+/**
+ * Comments within the document.
+ */
 export declare class Comment extends DataNode {
     constructor(data: string);
 }
+/**
+ * Processing instructions, including doc types.
+ */
 export declare class ProcessingInstruction extends DataNode {
     name: string;
     constructor(name: string, data: string);
@@ -73,16 +85,25 @@
     get childNodes(): Node[];
     set childNodes(children: Node[]);
 }
+/**
+ * The root node of the document.
+ */
 export declare class Document extends NodeWithChildren {
     constructor(children: Node[]);
     "x-mode"?: "no-quirks" | "quirks" | "limited-quirks";
 }
+/**
+ * The description of an individual attribute.
+ */
 interface Attribute {
     name: string;
     value: string;
     namespace?: string;
     prefix?: string;
 }
+/**
+ * An element within the DOM.
+ */
 export declare class Element extends NodeWithChildren {
     name: string;
     attribs: {
@@ -116,7 +137,7 @@
  * @param node Node to check.
  * @returns `true` if the node has the type `Text`, `false` otherwise.
  */
-export declare function isText(node: Node): node is DataNode;
+export declare function isText(node: Node): node is Text;
 /**
  * @param node Node to check.
  * @returns `true` if the node has the type `Comment`, `false` otherwise.
diff --git a/node_modules/css-select/node_modules/domhandler/lib/node.d.ts.map b/node_modules/css-select/node_modules/domhandler/lib/node.d.ts.map
index 59f54f8..593d718 100644
--- a/node_modules/css-select/node_modules/domhandler/lib/node.d.ts.map
+++ b/node_modules/css-select/node_modules/domhandler/lib/node.d.ts.map
@@ -1 +1 @@
-{"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../src/node.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAqB,MAAM,gBAAgB,CAAC;AAahE;;;GAGG;AACH,qBAAa,IAAI;IAoBM,IAAI,EAAE,WAAW;IAnBpC,yBAAyB;IACzB,MAAM,EAAE,gBAAgB,GAAG,IAAI,CAAQ;IAEvC,uBAAuB;IACvB,IAAI,EAAE,IAAI,GAAG,IAAI,CAAQ;IAEzB,mBAAmB;IACnB,IAAI,EAAE,IAAI,GAAG,IAAI,CAAQ;IAEzB,2FAA2F;IAC3F,UAAU,EAAE,MAAM,GAAG,IAAI,CAAQ;IAEjC,uFAAuF;IACvF,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAQ;IAE/B;;;OAGG;gBACgB,IAAI,EAAE,WAAW;IAGpC,IAAI,QAAQ,IAAI,MAAM,CAErB;IAGD,IAAI,UAAU,IAAI,gBAAgB,GAAG,IAAI,CAExC;IAED,IAAI,UAAU,CAAC,MAAM,EAAE,gBAAgB,GAAG,IAAI,EAE7C;IAED,IAAI,eAAe,IAAI,IAAI,GAAG,IAAI,CAEjC;IAED,IAAI,eAAe,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,EAEpC;IAED,IAAI,WAAW,IAAI,IAAI,GAAG,IAAI,CAE7B;IAED,IAAI,WAAW,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,EAEhC;IAED;;;;;OAKG;IACH,SAAS,CAAC,CAAC,SAAS,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,SAAS,UAAQ,GAAG,CAAC;CAG3D;AAED,qBAAa,QAAS,SAAQ,IAAI;IAOnB,IAAI,EAAE,MAAM;IANvB;;;OAGG;gBAEC,IAAI,EAAE,WAAW,CAAC,OAAO,GAAG,WAAW,CAAC,IAAI,GAAG,WAAW,CAAC,SAAS,EAC7D,IAAI,EAAE,MAAM;IAKvB,IAAI,SAAS,IAAI,MAAM,CAEtB;IAED,IAAI,SAAS,CAAC,IAAI,EAAE,MAAM,EAEzB;CACJ;AAED,qBAAa,IAAK,SAAQ,QAAQ;gBAClB,IAAI,EAAE,MAAM;CAG3B;AAED,qBAAa,OAAQ,SAAQ,QAAQ;gBACrB,IAAI,EAAE,MAAM;CAG3B;AAED,qBAAa,qBAAsB,SAAQ,QAAQ;IAC5B,IAAI,EAAE,MAAM;gBAAZ,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;IAI7C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;GAEG;AACH,qBAAa,gBAAiB,SAAQ,IAAI;IAY3B,QAAQ,EAAE,IAAI,EAAE;IAX3B;;;OAGG;gBAEC,IAAI,EACE,WAAW,CAAC,IAAI,GAChB,WAAW,CAAC,KAAK,GACjB,WAAW,CAAC,MAAM,GAClB,WAAW,CAAC,KAAK,GACjB,WAAW,CAAC,GAAG,EACd,QAAQ,EAAE,IAAI,EAAE;IAM3B,IAAI,UAAU,IAAI,IAAI,GAAG,IAAI,CAE5B;IAED,IAAI,SAAS,IAAI,IAAI,GAAG,IAAI,CAI3B;IAED,IAAI,UAAU,IAAI,IAAI,EAAE,CAEvB;IAED,IAAI,UAAU,CAAC,QAAQ,EAAE,IAAI,EAAE,EAE9B;CACJ;AAED,qBAAa,QAAS,SAAQ,gBAAgB;gBAC9B,QAAQ,EAAE,IAAI,EAAE;IAI5B,QAAQ,CAAC,EAAE,WAAW,GAAG,QAAQ,GAAG,gBAAgB,CAAC;CACxD;AAED,UAAU,SAAS;IACf,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;CACnB;AACD,qBAAa,OAAQ,SAAQ,gBAAgB;IAO9B,IAAI,EAAE,MAAM;IACZ,OAAO,EAAE;QAAE,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE;IAP9C;;;;OAIG;gBAEQ,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE;QAAE,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,EAC1C,QAAQ,GAAE,IAAI,EAAO,EACrB,IAAI,GACE,WAAW,CAAC,GAAG,GACf,WAAW,CAAC,MAAM,GAClB,WAAW,CAAC,KAIG;IAMzB,IAAI,OAAO,IAAI,MAAM,CAEpB;IAED,IAAI,OAAO,CAAC,IAAI,EAAE,MAAM,EAEvB;IAED,IAAI,UAAU,IAAI,SAAS,EAAE,CAO5B;IAED,oBAAoB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9C,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC9C;AAED;;;GAGG;AACH,wBAAgB,KAAK,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,IAAI,OAAO,CAEjD;AAED;;;GAGG;AACH,wBAAgB,OAAO,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,IAAI,gBAAgB,CAE5D;AAED;;;GAGG;AACH,wBAAgB,MAAM,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,IAAI,QAAQ,CAEnD;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,IAAI,QAAQ,CAEtD;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,IAAI,qBAAqB,CAErE;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,IAAI,QAAQ,CAEvD;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,IAAI,gBAAgB,CAEhE;AAED;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,CAAC,SAAS,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,SAAS,UAAQ,GAAG,CAAC,CAoDvE"}
\ No newline at end of file
+{"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../src/node.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAqB,MAAM,gBAAgB,CAAC;AAahE;;;GAGG;AACH,qBAAa,IAAI;IAoBM,IAAI,EAAE,WAAW;IAnBpC,yBAAyB;IACzB,MAAM,EAAE,gBAAgB,GAAG,IAAI,CAAQ;IAEvC,uBAAuB;IACvB,IAAI,EAAE,IAAI,GAAG,IAAI,CAAQ;IAEzB,mBAAmB;IACnB,IAAI,EAAE,IAAI,GAAG,IAAI,CAAQ;IAEzB,2FAA2F;IAC3F,UAAU,EAAE,MAAM,GAAG,IAAI,CAAQ;IAEjC,uFAAuF;IACvF,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAQ;IAE/B;;;OAGG;gBACgB,IAAI,EAAE,WAAW;IAGpC,IAAI,QAAQ,IAAI,MAAM,CAErB;IAGD,IAAI,UAAU,IAAI,gBAAgB,GAAG,IAAI,CAExC;IAED,IAAI,UAAU,CAAC,MAAM,EAAE,gBAAgB,GAAG,IAAI,EAE7C;IAED,IAAI,eAAe,IAAI,IAAI,GAAG,IAAI,CAEjC;IAED,IAAI,eAAe,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,EAEpC;IAED,IAAI,WAAW,IAAI,IAAI,GAAG,IAAI,CAE7B;IAED,IAAI,WAAW,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,EAEhC;IAED;;;;;OAKG;IACH,SAAS,CAAC,CAAC,SAAS,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,SAAS,UAAQ,GAAG,CAAC;CAG3D;AAED;;GAEG;AACH,qBAAa,QAAS,SAAQ,IAAI;IAOnB,IAAI,EAAE,MAAM;IANvB;;;OAGG;gBAEC,IAAI,EAAE,WAAW,CAAC,OAAO,GAAG,WAAW,CAAC,IAAI,GAAG,WAAW,CAAC,SAAS,EAC7D,IAAI,EAAE,MAAM;IAKvB,IAAI,SAAS,IAAI,MAAM,CAEtB;IAED,IAAI,SAAS,CAAC,IAAI,EAAE,MAAM,EAEzB;CACJ;AAED;;GAEG;AACH,qBAAa,IAAK,SAAQ,QAAQ;gBAClB,IAAI,EAAE,MAAM;CAG3B;AAED;;GAEG;AACH,qBAAa,OAAQ,SAAQ,QAAQ;gBACrB,IAAI,EAAE,MAAM;CAG3B;AAED;;GAEG;AACH,qBAAa,qBAAsB,SAAQ,QAAQ;IAC5B,IAAI,EAAE,MAAM;gBAAZ,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;IAI7C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;GAEG;AACH,qBAAa,gBAAiB,SAAQ,IAAI;IAY3B,QAAQ,EAAE,IAAI,EAAE;IAX3B;;;OAGG;gBAEC,IAAI,EACE,WAAW,CAAC,IAAI,GAChB,WAAW,CAAC,KAAK,GACjB,WAAW,CAAC,MAAM,GAClB,WAAW,CAAC,KAAK,GACjB,WAAW,CAAC,GAAG,EACd,QAAQ,EAAE,IAAI,EAAE;IAM3B,IAAI,UAAU,IAAI,IAAI,GAAG,IAAI,CAE5B;IAED,IAAI,SAAS,IAAI,IAAI,GAAG,IAAI,CAI3B;IAED,IAAI,UAAU,IAAI,IAAI,EAAE,CAEvB;IAED,IAAI,UAAU,CAAC,QAAQ,EAAE,IAAI,EAAE,EAE9B;CACJ;AAED;;GAEG;AACH,qBAAa,QAAS,SAAQ,gBAAgB;gBAC9B,QAAQ,EAAE,IAAI,EAAE;IAI5B,QAAQ,CAAC,EAAE,WAAW,GAAG,QAAQ,GAAG,gBAAgB,CAAC;CACxD;AAED;;GAEG;AACH,UAAU,SAAS;IACf,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,qBAAa,OAAQ,SAAQ,gBAAgB;IAO9B,IAAI,EAAE,MAAM;IACZ,OAAO,EAAE;QAAE,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE;IAP9C;;;;OAIG;gBAEQ,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE;QAAE,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,EAC1C,QAAQ,GAAE,IAAI,EAAO,EACrB,IAAI,GACE,WAAW,CAAC,GAAG,GACf,WAAW,CAAC,MAAM,GAClB,WAAW,CAAC,KAIG;IAMzB,IAAI,OAAO,IAAI,MAAM,CAEpB;IAED,IAAI,OAAO,CAAC,IAAI,EAAE,MAAM,EAEvB;IAED,IAAI,UAAU,IAAI,SAAS,EAAE,CAO5B;IAED,oBAAoB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9C,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC9C;AAED;;;GAGG;AACH,wBAAgB,KAAK,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,IAAI,OAAO,CAEjD;AAED;;;GAGG;AACH,wBAAgB,OAAO,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,IAAI,gBAAgB,CAE5D;AAED;;;GAGG;AACH,wBAAgB,MAAM,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,IAAI,IAAI,CAE/C;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,IAAI,QAAQ,CAEtD;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,IAAI,qBAAqB,CAErE;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,IAAI,QAAQ,CAEvD;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,IAAI,gBAAgB,CAEhE;AAED;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,CAAC,SAAS,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,SAAS,UAAQ,GAAG,CAAC,CAoDvE"}
\ No newline at end of file
diff --git a/node_modules/css-select/node_modules/domhandler/lib/node.js b/node_modules/css-select/node_modules/domhandler/lib/node.js
index 000e87f..bc21d11 100644
--- a/node_modules/css-select/node_modules/domhandler/lib/node.js
+++ b/node_modules/css-select/node_modules/domhandler/lib/node.js
@@ -113,6 +113,9 @@
     return Node;
 }());
 exports.Node = Node;
+/**
+ * A node that contains some data.
+ */
 var DataNode = /** @class */ (function (_super) {
     __extends(DataNode, _super);
     /**
@@ -137,6 +140,9 @@
     return DataNode;
 }(Node));
 exports.DataNode = DataNode;
+/**
+ * Text within the document.
+ */
 var Text = /** @class */ (function (_super) {
     __extends(Text, _super);
     function Text(data) {
@@ -145,6 +151,9 @@
     return Text;
 }(DataNode));
 exports.Text = Text;
+/**
+ * Comments within the document.
+ */
 var Comment = /** @class */ (function (_super) {
     __extends(Comment, _super);
     function Comment(data) {
@@ -153,6 +162,9 @@
     return Comment;
 }(DataNode));
 exports.Comment = Comment;
+/**
+ * Processing instructions, including doc types.
+ */
 var ProcessingInstruction = /** @class */ (function (_super) {
     __extends(ProcessingInstruction, _super);
     function ProcessingInstruction(name, data) {
@@ -208,6 +220,9 @@
     return NodeWithChildren;
 }(Node));
 exports.NodeWithChildren = NodeWithChildren;
+/**
+ * The root node of the document.
+ */
 var Document = /** @class */ (function (_super) {
     __extends(Document, _super);
     function Document(children) {
@@ -216,6 +231,9 @@
     return Document;
 }(NodeWithChildren));
 exports.Document = Document;
+/**
+ * An element within the DOM.
+ */
 var Element = /** @class */ (function (_super) {
     __extends(Element, _super);
     /**
@@ -270,7 +288,7 @@
  * @returns `true` if the node is a `Element`, `false` otherwise.
  */
 function isTag(node) {
-    return domelementtype_1.isTag(node);
+    return (0, domelementtype_1.isTag)(node);
 }
 exports.isTag = isTag;
 /**
diff --git a/node_modules/css-select/node_modules/domhandler/package.json b/node_modules/css-select/node_modules/domhandler/package.json
index a2ec002..b2824b1 100644
--- a/node_modules/css-select/node_modules/domhandler/package.json
+++ b/node_modules/css-select/node_modules/domhandler/package.json
@@ -1,6 +1,6 @@
 {
   "name": "domhandler",
-  "version": "4.2.0",
+  "version": "4.2.2",
   "description": "Handler for htmlparser2 that turns pages into a dom",
   "author": "Felix Boehm <me@feedic.com>",
   "funding": {
@@ -14,8 +14,8 @@
     "lib"
   ],
   "scripts": {
-    "test": "jest --coverage && npm run lint",
-    "coverage": "cat coverage/lcov.info | coveralls",
+    "test": "npm run test:jest && npm run lint",
+    "test:jest": "jest",
     "lint": "eslint src",
     "format": "prettier --write '**/*.{ts,md,json}'",
     "build": "tsc",
@@ -36,18 +36,17 @@
     "domelementtype": "^2.2.0"
   },
   "devDependencies": {
-    "@types/jest": "^26.0.0",
-    "@types/node": "^14.0.9",
-    "@typescript-eslint/eslint-plugin": "^4.1.0",
-    "@typescript-eslint/parser": "^4.1.0",
-    "coveralls": "^3.0.5",
-    "eslint": "^7.9.0",
+    "@types/jest": "^27.0.1",
+    "@types/node": "^16.7.2",
+    "@typescript-eslint/eslint-plugin": "^4.29.3",
+    "@typescript-eslint/parser": "^4.29.3",
+    "eslint": "^7.32.0",
     "eslint-config-prettier": "^8.1.0",
-    "htmlparser2": "^6.0.0",
-    "jest": "^26.0.1",
+    "htmlparser2": "^7.1.1",
+    "jest": "^27.1.0",
     "prettier": "^2.0.5",
-    "ts-jest": "^26.1.0",
-    "typescript": "^4.0.2"
+    "ts-jest": "^27.0.5",
+    "typescript": "^4.4.2"
   },
   "jest": {
     "preset": "ts-jest",
diff --git a/node_modules/css-select/node_modules/domutils/lib/feeds.d.ts b/node_modules/css-select/node_modules/domutils/lib/feeds.d.ts
new file mode 100644
index 0000000..bc71c10
--- /dev/null
+++ b/node_modules/css-select/node_modules/domutils/lib/feeds.d.ts
@@ -0,0 +1,45 @@
+import type { Node } from "domhandler";
+export declare type FeedItemMediaMedium = "image" | "audio" | "video" | "document" | "executable";
+export declare type FeedItemMediaExpression = "sample" | "full" | "nonstop";
+export interface FeedItemMedia {
+    medium: FeedItemMediaMedium | undefined;
+    isDefault: boolean;
+    url?: string;
+    fileSize?: number;
+    type?: string;
+    expression?: FeedItemMediaExpression;
+    bitrate?: number;
+    framerate?: number;
+    samplingrate?: number;
+    channels?: number;
+    duration?: number;
+    height?: number;
+    width?: number;
+    lang?: string;
+}
+export interface FeedItem {
+    id?: string;
+    title?: string;
+    link?: string;
+    description?: string;
+    pubDate?: Date;
+    media: FeedItemMedia[];
+}
+export interface Feed {
+    type: string;
+    id?: string;
+    title?: string;
+    link?: string;
+    description?: string;
+    updated?: Date;
+    author?: string;
+    items: FeedItem[];
+}
+/**
+ * Get the feed object from the root of a DOM tree.
+ *
+ * @param doc - The DOM to to extract the feed from.
+ * @returns The feed.
+ */
+export declare function getFeed(doc: Node[]): Feed | null;
+//# sourceMappingURL=feeds.d.ts.map
\ No newline at end of file
diff --git a/node_modules/css-select/node_modules/domutils/lib/feeds.d.ts.map b/node_modules/css-select/node_modules/domutils/lib/feeds.d.ts.map
new file mode 100644
index 0000000..a3e1d1f
--- /dev/null
+++ b/node_modules/css-select/node_modules/domutils/lib/feeds.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"feeds.d.ts","sourceRoot":"","sources":["../src/feeds.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAW,MAAM,YAAY,CAAC;AAIhD,oBAAY,mBAAmB,GACzB,OAAO,GACP,OAAO,GACP,OAAO,GACP,UAAU,GACV,YAAY,CAAC;AAEnB,oBAAY,uBAAuB,GAAG,QAAQ,GAAG,MAAM,GAAG,SAAS,CAAC;AAEpE,MAAM,WAAW,aAAa;IAC1B,MAAM,EAAE,mBAAmB,GAAG,SAAS,CAAC;IACxC,SAAS,EAAE,OAAO,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,uBAAuB,CAAC;IACrC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,QAAQ;IACrB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,IAAI,CAAC;IACf,KAAK,EAAE,aAAa,EAAE,CAAC;CAC1B;AAED,MAAM,WAAW,IAAI;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,IAAI,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,QAAQ,EAAE,CAAC;CACrB;AAED;;;;;GAKG;AACH,wBAAgB,OAAO,CAAC,GAAG,EAAE,IAAI,EAAE,GAAG,IAAI,GAAG,IAAI,CAQhD"}
\ No newline at end of file
diff --git a/node_modules/css-select/node_modules/domutils/lib/feeds.js b/node_modules/css-select/node_modules/domutils/lib/feeds.js
new file mode 100644
index 0000000..7e5775a
--- /dev/null
+++ b/node_modules/css-select/node_modules/domutils/lib/feeds.js
@@ -0,0 +1,190 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.getFeed = void 0;
+var stringify_1 = require("./stringify");
+var legacy_1 = require("./legacy");
+/**
+ * Get the feed object from the root of a DOM tree.
+ *
+ * @param doc - The DOM to to extract the feed from.
+ * @returns The feed.
+ */
+function getFeed(doc) {
+    var feedRoot = getOneElement(isValidFeed, doc);
+    return !feedRoot
+        ? null
+        : feedRoot.name === "feed"
+            ? getAtomFeed(feedRoot)
+            : getRssFeed(feedRoot);
+}
+exports.getFeed = getFeed;
+/**
+ * Parse an Atom feed.
+ *
+ * @param feedRoot The root of the feed.
+ * @returns The parsed feed.
+ */
+function getAtomFeed(feedRoot) {
+    var _a;
+    var childs = feedRoot.children;
+    var feed = {
+        type: "atom",
+        items: (0, legacy_1.getElementsByTagName)("entry", childs).map(function (item) {
+            var _a;
+            var children = item.children;
+            var entry = { media: getMediaElements(children) };
+            addConditionally(entry, "id", "id", children);
+            addConditionally(entry, "title", "title", children);
+            var href = (_a = getOneElement("link", children)) === null || _a === void 0 ? void 0 : _a.attribs.href;
+            if (href) {
+                entry.link = href;
+            }
+            var description = fetch("summary", children) || fetch("content", children);
+            if (description) {
+                entry.description = description;
+            }
+            var pubDate = fetch("updated", children);
+            if (pubDate) {
+                entry.pubDate = new Date(pubDate);
+            }
+            return entry;
+        }),
+    };
+    addConditionally(feed, "id", "id", childs);
+    addConditionally(feed, "title", "title", childs);
+    var href = (_a = getOneElement("link", childs)) === null || _a === void 0 ? void 0 : _a.attribs.href;
+    if (href) {
+        feed.link = href;
+    }
+    addConditionally(feed, "description", "subtitle", childs);
+    var updated = fetch("updated", childs);
+    if (updated) {
+        feed.updated = new Date(updated);
+    }
+    addConditionally(feed, "author", "email", childs, true);
+    return feed;
+}
+/**
+ * Parse a RSS feed.
+ *
+ * @param feedRoot The root of the feed.
+ * @returns The parsed feed.
+ */
+function getRssFeed(feedRoot) {
+    var _a, _b;
+    var childs = (_b = (_a = getOneElement("channel", feedRoot.children)) === null || _a === void 0 ? void 0 : _a.children) !== null && _b !== void 0 ? _b : [];
+    var feed = {
+        type: feedRoot.name.substr(0, 3),
+        id: "",
+        items: (0, legacy_1.getElementsByTagName)("item", feedRoot.children).map(function (item) {
+            var children = item.children;
+            var entry = { media: getMediaElements(children) };
+            addConditionally(entry, "id", "guid", children);
+            addConditionally(entry, "title", "title", children);
+            addConditionally(entry, "link", "link", children);
+            addConditionally(entry, "description", "description", children);
+            var pubDate = fetch("pubDate", children);
+            if (pubDate)
+                entry.pubDate = new Date(pubDate);
+            return entry;
+        }),
+    };
+    addConditionally(feed, "title", "title", childs);
+    addConditionally(feed, "link", "link", childs);
+    addConditionally(feed, "description", "description", childs);
+    var updated = fetch("lastBuildDate", childs);
+    if (updated) {
+        feed.updated = new Date(updated);
+    }
+    addConditionally(feed, "author", "managingEditor", childs, true);
+    return feed;
+}
+var MEDIA_KEYS_STRING = ["url", "type", "lang"];
+var MEDIA_KEYS_INT = [
+    "fileSize",
+    "bitrate",
+    "framerate",
+    "samplingrate",
+    "channels",
+    "duration",
+    "height",
+    "width",
+];
+/**
+ * Get all media elements of a feed item.
+ *
+ * @param where Nodes to search in.
+ * @returns Media elements.
+ */
+function getMediaElements(where) {
+    return (0, legacy_1.getElementsByTagName)("media:content", where).map(function (elem) {
+        var attribs = elem.attribs;
+        var media = {
+            medium: attribs.medium,
+            isDefault: !!attribs.isDefault,
+        };
+        for (var _i = 0, MEDIA_KEYS_STRING_1 = MEDIA_KEYS_STRING; _i < MEDIA_KEYS_STRING_1.length; _i++) {
+            var attrib = MEDIA_KEYS_STRING_1[_i];
+            if (attribs[attrib]) {
+                media[attrib] = attribs[attrib];
+            }
+        }
+        for (var _a = 0, MEDIA_KEYS_INT_1 = MEDIA_KEYS_INT; _a < MEDIA_KEYS_INT_1.length; _a++) {
+            var attrib = MEDIA_KEYS_INT_1[_a];
+            if (attribs[attrib]) {
+                media[attrib] = parseInt(attribs[attrib], 10);
+            }
+        }
+        if (attribs.expression) {
+            media.expression =
+                attribs.expression;
+        }
+        return media;
+    });
+}
+/**
+ * Get one element by tag name.
+ *
+ * @param tagName Tag name to look for
+ * @param node Node to search in
+ * @returns The element or null
+ */
+function getOneElement(tagName, node) {
+    return (0, legacy_1.getElementsByTagName)(tagName, node, true, 1)[0];
+}
+/**
+ * Get the text content of an element with a certain tag name.
+ *
+ * @param tagName Tag name to look for.
+ * @param where  Node to search in.
+ * @param recurse Whether to recurse into child nodes.
+ * @returns The text content of the element.
+ */
+function fetch(tagName, where, recurse) {
+    if (recurse === void 0) { recurse = false; }
+    return (0, stringify_1.textContent)((0, legacy_1.getElementsByTagName)(tagName, where, recurse, 1)).trim();
+}
+/**
+ * Adds a property to an object if it has a value.
+ *
+ * @param obj Object to be extended
+ * @param prop Property name
+ * @param tagName Tag name that contains the conditionally added property
+ * @param where Element to search for the property
+ * @param recurse Whether to recurse into child nodes.
+ */
+function addConditionally(obj, prop, tagName, where, recurse) {
+    if (recurse === void 0) { recurse = false; }
+    var val = fetch(tagName, where, recurse);
+    if (val)
+        obj[prop] = val;
+}
+/**
+ * Checks if an element is a feed root node.
+ *
+ * @param value The name of the element to check.
+ * @returns Whether an element is a feed root node.
+ */
+function isValidFeed(value) {
+    return value === "rss" || value === "feed" || value === "rdf:RDF";
+}
diff --git a/node_modules/css-select/node_modules/domutils/lib/helpers.js b/node_modules/css-select/node_modules/domutils/lib/helpers.js
index a522766..e823a92 100644
--- a/node_modules/css-select/node_modules/domutils/lib/helpers.js
+++ b/node_modules/css-select/node_modules/domutils/lib/helpers.js
@@ -66,12 +66,12 @@
     if (nodeA === nodeB) {
         return 0;
     }
-    var current = domhandler_1.hasChildren(nodeA) ? nodeA : nodeA.parent;
+    var current = (0, domhandler_1.hasChildren)(nodeA) ? nodeA : nodeA.parent;
     while (current) {
         aParents.unshift(current);
         current = current.parent;
     }
-    current = domhandler_1.hasChildren(nodeB) ? nodeB : nodeB.parent;
+    current = (0, domhandler_1.hasChildren)(nodeB) ? nodeB : nodeB.parent;
     while (current) {
         bParents.unshift(current);
         current = current.parent;
diff --git a/node_modules/css-select/node_modules/domutils/lib/index.d.ts b/node_modules/css-select/node_modules/domutils/lib/index.d.ts
index 0423a58..33b282d 100644
--- a/node_modules/css-select/node_modules/domutils/lib/index.d.ts
+++ b/node_modules/css-select/node_modules/domutils/lib/index.d.ts
@@ -4,5 +4,7 @@
 export * from "./querying";
 export * from "./legacy";
 export * from "./helpers";
+export * from "./feeds";
+/** @deprecated Use these methods from `domhandler` directly. */
 export { isTag, isCDATA, isText, isComment, isDocument, hasChildren, } from "domhandler";
 //# sourceMappingURL=index.d.ts.map
\ No newline at end of file
diff --git a/node_modules/css-select/node_modules/domutils/lib/index.d.ts.map b/node_modules/css-select/node_modules/domutils/lib/index.d.ts.map
index 8f4f83f..4c113d1 100644
--- a/node_modules/css-select/node_modules/domutils/lib/index.d.ts.map
+++ b/node_modules/css-select/node_modules/domutils/lib/index.d.ts.map
@@ -1 +1 @@
-{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,OAAO,EACH,KAAK,EACL,OAAO,EACP,MAAM,EACN,SAAS,EACT,UAAU,EACV,WAAW,GACd,MAAM,YAAY,CAAC"}
\ No newline at end of file
+{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,SAAS,CAAC;AACxB,gEAAgE;AAChE,OAAO,EACH,KAAK,EACL,OAAO,EACP,MAAM,EACN,SAAS,EACT,UAAU,EACV,WAAW,GACd,MAAM,YAAY,CAAC"}
\ No newline at end of file
diff --git a/node_modules/css-select/node_modules/domutils/lib/index.js b/node_modules/css-select/node_modules/domutils/lib/index.js
index 883af21..029aa09 100644
--- a/node_modules/css-select/node_modules/domutils/lib/index.js
+++ b/node_modules/css-select/node_modules/domutils/lib/index.js
@@ -17,6 +17,8 @@
 __exportStar(require("./querying"), exports);
 __exportStar(require("./legacy"), exports);
 __exportStar(require("./helpers"), exports);
+__exportStar(require("./feeds"), exports);
+/** @deprecated Use these methods from `domhandler` directly. */
 var domhandler_1 = require("domhandler");
 Object.defineProperty(exports, "isTag", { enumerable: true, get: function () { return domhandler_1.isTag; } });
 Object.defineProperty(exports, "isCDATA", { enumerable: true, get: function () { return domhandler_1.isCDATA; } });
diff --git a/node_modules/css-select/node_modules/domutils/lib/legacy.d.ts.map b/node_modules/css-select/node_modules/domutils/lib/legacy.d.ts.map
index 9f0d3ce..f6f7217 100644
--- a/node_modules/css-select/node_modules/domutils/lib/legacy.d.ts.map
+++ b/node_modules/css-select/node_modules/domutils/lib/legacy.d.ts.map
@@ -1 +1 @@
-{"version":3,"file":"legacy.d.ts","sourceRoot":"","sources":["../src/legacy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,IAAI,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAK7C,UAAU,eAAe;IACrB,QAAQ,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,CAAC;IAChD,QAAQ,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,CAAC;IAChD,YAAY,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,CAAC;IACrD,CAAC,aAAa,EAAE,MAAM,GAChB,SAAS,GACT,MAAM,GACN,CAAC,CAAC,cAAc,EAAE,MAAM,KAAK,OAAO,CAAC,CAAC;CAC/C;AAsED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,eAAe,EAAE,IAAI,EAAE,IAAI,GAAG,OAAO,CAGzE;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CACvB,OAAO,EAAE,eAAe,EACxB,KAAK,EAAE,IAAI,GAAG,IAAI,EAAE,EACpB,OAAO,EAAE,OAAO,EAChB,KAAK,SAAW,GACjB,IAAI,EAAE,CAGR;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAC1B,EAAE,EAAE,MAAM,GAAG,CAAC,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,EACtC,KAAK,EAAE,IAAI,GAAG,IAAI,EAAE,EACpB,OAAO,UAAO,GACf,OAAO,GAAG,IAAI,CAGhB;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAChC,OAAO,EAAE,MAAM,GAAG,CAAC,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,EAC7C,KAAK,EAAE,IAAI,GAAG,IAAI,EAAE,EACpB,OAAO,UAAO,EACd,KAAK,SAAW,GACjB,OAAO,EAAE,CAEX;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAChC,IAAI,EAAE,WAAW,GAAG,CAAC,CAAC,IAAI,EAAE,WAAW,KAAK,OAAO,CAAC,EACpD,KAAK,EAAE,IAAI,GAAG,IAAI,EAAE,EACpB,OAAO,UAAO,EACd,KAAK,SAAW,GACjB,IAAI,EAAE,CAER"}
\ No newline at end of file
+{"version":3,"file":"legacy.d.ts","sourceRoot":"","sources":["../src/legacy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,IAAI,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAK7C,UAAU,eAAe;IACrB,QAAQ,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,CAAC;IAChD,QAAQ,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,CAAC;IAChD,YAAY,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,CAAC;IACrD,CAAC,aAAa,EAAE,MAAM,GAChB,SAAS,GACT,MAAM,GACN,CAAC,CAAC,cAAc,EAAE,MAAM,KAAK,OAAO,CAAC,CAAC;CAC/C;AAqED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,eAAe,EAAE,IAAI,EAAE,IAAI,GAAG,OAAO,CAGzE;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CACvB,OAAO,EAAE,eAAe,EACxB,KAAK,EAAE,IAAI,GAAG,IAAI,EAAE,EACpB,OAAO,EAAE,OAAO,EAChB,KAAK,SAAW,GACjB,IAAI,EAAE,CAGR;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAC1B,EAAE,EAAE,MAAM,GAAG,CAAC,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,EACtC,KAAK,EAAE,IAAI,GAAG,IAAI,EAAE,EACpB,OAAO,UAAO,GACf,OAAO,GAAG,IAAI,CAGhB;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAChC,OAAO,EAAE,MAAM,GAAG,CAAC,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,EAC7C,KAAK,EAAE,IAAI,GAAG,IAAI,EAAE,EACpB,OAAO,UAAO,EACd,KAAK,SAAW,GACjB,OAAO,EAAE,CAEX;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAChC,IAAI,EAAE,WAAW,GAAG,CAAC,CAAC,IAAI,EAAE,WAAW,KAAK,OAAO,CAAC,EACpD,KAAK,EAAE,IAAI,GAAG,IAAI,EAAE,EACpB,OAAO,UAAO,EACd,KAAK,SAAW,GACjB,IAAI,EAAE,CAER"}
\ No newline at end of file
diff --git a/node_modules/css-select/node_modules/domutils/lib/legacy.js b/node_modules/css-select/node_modules/domutils/lib/legacy.js
index 10d62ab..478564c 100644
--- a/node_modules/css-select/node_modules/domutils/lib/legacy.js
+++ b/node_modules/css-select/node_modules/domutils/lib/legacy.js
@@ -6,12 +6,12 @@
 var Checks = {
     tag_name: function (name) {
         if (typeof name === "function") {
-            return function (elem) { return domhandler_1.isTag(elem) && name(elem.name); };
+            return function (elem) { return (0, domhandler_1.isTag)(elem) && name(elem.name); };
         }
         else if (name === "*") {
             return domhandler_1.isTag;
         }
-        return function (elem) { return domhandler_1.isTag(elem) && elem.name === name; };
+        return function (elem) { return (0, domhandler_1.isTag)(elem) && elem.name === name; };
     },
     tag_type: function (type) {
         if (typeof type === "function") {
@@ -21,9 +21,9 @@
     },
     tag_contains: function (data) {
         if (typeof data === "function") {
-            return function (elem) { return domhandler_1.isText(elem) && data(elem.data); };
+            return function (elem) { return (0, domhandler_1.isText)(elem) && data(elem.data); };
         }
-        return function (elem) { return domhandler_1.isText(elem) && elem.data === data; };
+        return function (elem) { return (0, domhandler_1.isText)(elem) && elem.data === data; };
     },
 };
 /**
@@ -33,9 +33,9 @@
  */
 function getAttribCheck(attrib, value) {
     if (typeof value === "function") {
-        return function (elem) { return domhandler_1.isTag(elem) && value(elem.attribs[attrib]); };
+        return function (elem) { return (0, domhandler_1.isTag)(elem) && value(elem.attribs[attrib]); };
     }
-    return function (elem) { return domhandler_1.isTag(elem) && elem.attribs[attrib] === value; };
+    return function (elem) { return (0, domhandler_1.isTag)(elem) && elem.attribs[attrib] === value; };
 }
 /**
  * @param a First function to combine.
@@ -54,7 +54,7 @@
 function compileTest(options) {
     var funcs = Object.keys(options).map(function (key) {
         var value = options[key];
-        return key in Checks
+        return Object.prototype.hasOwnProperty.call(Checks, key)
             ? Checks[key](value)
             : getAttribCheck(key, value);
     });
@@ -80,7 +80,7 @@
 function getElements(options, nodes, recurse, limit) {
     if (limit === void 0) { limit = Infinity; }
     var test = compileTest(options);
-    return test ? querying_1.filter(test, nodes, recurse, limit) : [];
+    return test ? (0, querying_1.filter)(test, nodes, recurse, limit) : [];
 }
 exports.getElements = getElements;
 /**
@@ -93,7 +93,7 @@
     if (recurse === void 0) { recurse = true; }
     if (!Array.isArray(nodes))
         nodes = [nodes];
-    return querying_1.findOne(getAttribCheck("id", id), nodes, recurse);
+    return (0, querying_1.findOne)(getAttribCheck("id", id), nodes, recurse);
 }
 exports.getElementById = getElementById;
 /**
@@ -106,7 +106,7 @@
 function getElementsByTagName(tagName, nodes, recurse, limit) {
     if (recurse === void 0) { recurse = true; }
     if (limit === void 0) { limit = Infinity; }
-    return querying_1.filter(Checks.tag_name(tagName), nodes, recurse, limit);
+    return (0, querying_1.filter)(Checks.tag_name(tagName), nodes, recurse, limit);
 }
 exports.getElementsByTagName = getElementsByTagName;
 /**
@@ -119,6 +119,6 @@
 function getElementsByTagType(type, nodes, recurse, limit) {
     if (recurse === void 0) { recurse = true; }
     if (limit === void 0) { limit = Infinity; }
-    return querying_1.filter(Checks.tag_type(type), nodes, recurse, limit);
+    return (0, querying_1.filter)(Checks.tag_type(type), nodes, recurse, limit);
 }
 exports.getElementsByTagType = getElementsByTagType;
diff --git a/node_modules/css-select/node_modules/domutils/lib/querying.js b/node_modules/css-select/node_modules/domutils/lib/querying.js
index 8a193e8..1eb20e9 100644
--- a/node_modules/css-select/node_modules/domutils/lib/querying.js
+++ b/node_modules/css-select/node_modules/domutils/lib/querying.js
@@ -37,7 +37,7 @@
             if (--limit <= 0)
                 break;
         }
-        if (recurse && domhandler_1.hasChildren(elem) && elem.children.length > 0) {
+        if (recurse && (0, domhandler_1.hasChildren)(elem) && elem.children.length > 0) {
             var children = find(test, elem.children, recurse, limit);
             result.push.apply(result, children);
             limit -= children.length;
@@ -72,7 +72,7 @@
     var elem = null;
     for (var i = 0; i < nodes.length && !elem; i++) {
         var checked = nodes[i];
-        if (!domhandler_1.isTag(checked)) {
+        if (!(0, domhandler_1.isTag)(checked)) {
             continue;
         }
         else if (test(checked)) {
@@ -92,7 +92,7 @@
  */
 function existsOne(test, nodes) {
     return nodes.some(function (checked) {
-        return domhandler_1.isTag(checked) &&
+        return (0, domhandler_1.isTag)(checked) &&
             (test(checked) ||
                 (checked.children.length > 0 &&
                     existsOne(test, checked.children)));
diff --git a/node_modules/css-select/node_modules/domutils/lib/stringify.d.ts.map b/node_modules/css-select/node_modules/domutils/lib/stringify.d.ts.map
index 38c7782..777fec6 100644
--- a/node_modules/css-select/node_modules/domutils/lib/stringify.d.ts.map
+++ b/node_modules/css-select/node_modules/domutils/lib/stringify.d.ts.map
@@ -1 +1 @@
-{"version":3,"file":"stringify.d.ts","sourceRoot":"","sources":["../src/stringify.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuC,IAAI,EAAE,MAAM,YAAY,CAAC;AACvE,OAAmB,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAGlE;;;;;GAKG;AACH,wBAAgB,YAAY,CACxB,IAAI,EAAE,IAAI,GAAG,IAAI,EAAE,EACnB,OAAO,CAAC,EAAE,oBAAoB,GAC/B,MAAM,CAER;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CACxB,IAAI,EAAE,IAAI,EACV,OAAO,CAAC,EAAE,oBAAoB,GAC/B,MAAM,CAIR;AAED;;;;;;GAMG;AACH,wBAAgB,OAAO,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,EAAE,GAAG,MAAM,CAMnD;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,EAAE,GAAG,MAAM,CAMvD;AAED;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,EAAE,GAAG,MAAM,CAQrD"}
\ No newline at end of file
+{"version":3,"file":"stringify.d.ts","sourceRoot":"","sources":["../src/stringify.ts"],"names":[],"mappings":"AAAA,OAAO,EAKH,IAAI,EAEP,MAAM,YAAY,CAAC;AACpB,OAAmB,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAGlE;;;;;GAKG;AACH,wBAAgB,YAAY,CACxB,IAAI,EAAE,IAAI,GAAG,IAAI,EAAE,EACnB,OAAO,CAAC,EAAE,oBAAoB,GAC/B,MAAM,CAER;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CACxB,IAAI,EAAE,IAAI,EACV,OAAO,CAAC,EAAE,oBAAoB,GAC/B,MAAM,CAIR;AAED;;;;;;GAMG;AACH,wBAAgB,OAAO,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,EAAE,GAAG,MAAM,CAMnD;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,EAAE,GAAG,MAAM,CAOvD;AAED;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,EAAE,GAAG,MAAM,CAOrD"}
\ No newline at end of file
diff --git a/node_modules/css-select/node_modules/domutils/lib/stringify.js b/node_modules/css-select/node_modules/domutils/lib/stringify.js
index a8a56d0..db74747 100644
--- a/node_modules/css-select/node_modules/domutils/lib/stringify.js
+++ b/node_modules/css-select/node_modules/domutils/lib/stringify.js
@@ -14,7 +14,7 @@
  * @returns `node`'s outer HTML.
  */
 function getOuterHTML(node, options) {
-    return dom_serializer_1.default(node, options);
+    return (0, dom_serializer_1.default)(node, options);
 }
 exports.getOuterHTML = getOuterHTML;
 /**
@@ -24,7 +24,7 @@
  * @returns `node`'s inner HTML.
  */
 function getInnerHTML(node, options) {
-    return domhandler_1.hasChildren(node)
+    return (0, domhandler_1.hasChildren)(node)
         ? node.children.map(function (node) { return getOuterHTML(node, options); }).join("")
         : "";
 }
@@ -39,11 +39,11 @@
 function getText(node) {
     if (Array.isArray(node))
         return node.map(getText).join("");
-    if (domhandler_1.isTag(node))
+    if ((0, domhandler_1.isTag)(node))
         return node.name === "br" ? "\n" : getText(node.children);
-    if (domhandler_1.isCDATA(node))
+    if ((0, domhandler_1.isCDATA)(node))
         return getText(node.children);
-    if (domhandler_1.isText(node))
+    if ((0, domhandler_1.isText)(node))
         return node.data;
     return "";
 }
@@ -58,11 +58,10 @@
 function textContent(node) {
     if (Array.isArray(node))
         return node.map(textContent).join("");
-    if (domhandler_1.isTag(node))
+    if ((0, domhandler_1.hasChildren)(node) && !(0, domhandler_1.isComment)(node)) {
         return textContent(node.children);
-    if (domhandler_1.isCDATA(node))
-        return textContent(node.children);
-    if (domhandler_1.isText(node))
+    }
+    if ((0, domhandler_1.isText)(node))
         return node.data;
     return "";
 }
@@ -77,12 +76,10 @@
 function innerText(node) {
     if (Array.isArray(node))
         return node.map(innerText).join("");
-    if (domhandler_1.hasChildren(node) && node.type === domelementtype_1.ElementType.Tag) {
+    if ((0, domhandler_1.hasChildren)(node) && (node.type === domelementtype_1.ElementType.Tag || (0, domhandler_1.isCDATA)(node))) {
         return innerText(node.children);
     }
-    if (domhandler_1.isCDATA(node))
-        return innerText(node.children);
-    if (domhandler_1.isText(node))
+    if ((0, domhandler_1.isText)(node))
         return node.data;
     return "";
 }
diff --git a/node_modules/css-select/node_modules/domutils/lib/traversal.js b/node_modules/css-select/node_modules/domutils/lib/traversal.js
index 5975ee8..3a7ff72 100644
--- a/node_modules/css-select/node_modules/domutils/lib/traversal.js
+++ b/node_modules/css-select/node_modules/domutils/lib/traversal.js
@@ -96,7 +96,7 @@
 function nextElementSibling(elem) {
     var _a;
     var next = elem.next;
-    while (next !== null && !domhandler_1.isTag(next))
+    while (next !== null && !(0, domhandler_1.isTag)(next))
         (_a = next, next = _a.next);
     return next;
 }
@@ -110,7 +110,7 @@
 function prevElementSibling(elem) {
     var _a;
     var prev = elem.prev;
-    while (prev !== null && !domhandler_1.isTag(prev))
+    while (prev !== null && !(0, domhandler_1.isTag)(prev))
         (_a = prev, prev = _a.prev);
     return prev;
 }
diff --git a/node_modules/css-select/node_modules/domutils/package.json b/node_modules/css-select/node_modules/domutils/package.json
index 4a7d23e..4a49c0c 100644
--- a/node_modules/css-select/node_modules/domutils/package.json
+++ b/node_modules/css-select/node_modules/domutils/package.json
@@ -1,6 +1,6 @@
 {
   "name": "domutils",
-  "version": "2.7.0",
+  "version": "2.8.0",
   "description": "Utilities for working with htmlparser2's dom",
   "author": "Felix Boehm <me@feedic.com>",
   "funding": {
@@ -14,8 +14,8 @@
     "lib/**/*"
   ],
   "scripts": {
-    "test": "jest --coverage && npm run lint",
-    "coverage": "cat coverage/lcov.info | coveralls",
+    "test": "npm run test:jest && npm run lint",
+    "test:jest": "jest",
     "lint": "npm run lint:es && npm run lint:prettier",
     "lint:es": "eslint --ignore-path .gitignore .",
     "lint:prettier": "npm run prettier -- --check",
@@ -41,20 +41,19 @@
     "domhandler": "^4.2.0"
   },
   "devDependencies": {
-    "@types/jest": "^26.0.0",
-    "@types/node": "^15.0.1",
-    "@typescript-eslint/eslint-plugin": "^4.1.0",
-    "@typescript-eslint/parser": "^4.1.0",
-    "coveralls": "^3.0.5",
-    "eslint": "^7.0.0",
+    "@types/jest": "^27.0.1",
+    "@types/node": "^16.7.2",
+    "@typescript-eslint/eslint-plugin": "^4.29.3",
+    "@typescript-eslint/parser": "^4.29.3",
+    "eslint": "^7.32.0",
     "eslint-config-prettier": "^8.1.0",
-    "eslint-plugin-jsdoc": "^35.1.0",
-    "htmlparser2": "~6.1.0",
-    "jest": "^27.0.1",
+    "eslint-plugin-jsdoc": "^36.0.8",
+    "htmlparser2": "~7.0.0",
+    "jest": "^27.1.0",
     "prettier": "^2.0.5",
-    "ts-jest": "^27.0.1",
-    "typedoc": "^0.20.5",
-    "typescript": "^4.0.2"
+    "ts-jest": "^27.0.5",
+    "typedoc": "^0.21.6",
+    "typescript": "^4.4.2"
   },
   "jest": {
     "preset": "ts-jest",
diff --git a/node_modules/eslint/node_modules/chalk/package.json b/node_modules/eslint/node_modules/chalk/package.json
index ea99b08..5e60306 100644
--- a/node_modules/eslint/node_modules/chalk/package.json
+++ b/node_modules/eslint/node_modules/chalk/package.json
@@ -1,6 +1,6 @@
 {
   "name": "chalk",
-  "version": "4.1.1",
+  "version": "4.1.2",
   "description": "Terminal string styling done right",
   "license": "MIT",
   "repository": "chalk/chalk",
diff --git a/node_modules/eslint/node_modules/chalk/readme.md b/node_modules/eslint/node_modules/chalk/readme.md
index 8512592..a055d21 100644
--- a/node_modules/eslint/node_modules/chalk/readme.md
+++ b/node_modules/eslint/node_modules/chalk/readme.md
@@ -33,7 +33,7 @@
 		<br>
 		<br>
 		<a href="https://retool.com/?utm_campaign=sindresorhus">
-			<img src="https://sindresorhus.com/assets/thanks/retool-logo.svg" width="210"/>
+			<img src="https://sindresorhus.com/assets/thanks/retool-logo.svg" width="230"/>
 		</a>
 		<br>
 		<br>
@@ -48,6 +48,12 @@
 				<span>and avoiding access controls. Keep your team and servers in sync with Doppler.</span>
 			</div>
 		</a>
+		<br>
+		<a href="https://uibakery.io/?utm_source=chalk&utm_medium=sponsor&utm_campaign=github">
+			<div>
+				<img src="https://sindresorhus.com/assets/thanks/uibakery-logo.jpg" width="270" alt="UI Bakery">
+			</div>
+		</a>
 	</p>
 </div>
 
diff --git a/node_modules/eslint/node_modules/globals/globals.json b/node_modules/eslint/node_modules/globals/globals.json
index 334ff3e..cbff038 100644
--- a/node_modules/eslint/node_modules/globals/globals.json
+++ b/node_modules/eslint/node_modules/globals/globals.json
@@ -1687,6 +1687,7 @@
 		"createObjectIn": false,
 		"exportFunction": false,
 		"GM": false,
+		"GM_addElement": false,
 		"GM_addStyle": false,
 		"GM_addValueChangeListener": false,
 		"GM_deleteValue": false,
diff --git a/node_modules/eslint/node_modules/globals/package.json b/node_modules/eslint/node_modules/globals/package.json
index 596fa6f..7890c18 100644
--- a/node_modules/eslint/node_modules/globals/package.json
+++ b/node_modules/eslint/node_modules/globals/package.json
@@ -1,6 +1,6 @@
 {
   "name": "globals",
-  "version": "13.10.0",
+  "version": "13.11.0",
   "description": "Global identifiers from different JavaScript environments",
   "license": "MIT",
   "repository": "sindresorhus/globals",
diff --git a/node_modules/fsevents/LICENSE b/node_modules/fsevents/LICENSE
deleted file mode 100644
index 5d70441..0000000
--- a/node_modules/fsevents/LICENSE
+++ /dev/null
@@ -1,22 +0,0 @@
-MIT License
------------
-
-Copyright (C) 2010-2020 by Philipp Dunkel, Ben Noordhuis, Elan Shankar, Paul Miller
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
diff --git a/node_modules/fsevents/README.md b/node_modules/fsevents/README.md
deleted file mode 100644
index 025c9a1..0000000
--- a/node_modules/fsevents/README.md
+++ /dev/null
@@ -1,83 +0,0 @@
-# fsevents [![NPM](https://nodei.co/npm/fsevents.png)](https://nodei.co/npm/fsevents/)
-
-Native access to MacOS FSEvents in [Node.js](https://nodejs.org/)
-
-The FSEvents API in MacOS allows applications to register for notifications of
-changes to a given directory tree. It is a very fast and lightweight alternative
-to kqueue.
-
-This is a low-level library. For a cross-platform file watching module that
-uses fsevents, check out [Chokidar](https://github.com/paulmillr/chokidar).
-
-## Installation
-
-Supports only **Node.js v8.16 and higher**.
-
-```sh
-npm install fsevents
-```
-
-## Usage
-
-```js
-const fsevents = require('fsevents');
-const stop = fsevents.watch(__dirname, (path, flags, id) => {
-  const info = fsevents.getInfo(path, flags, id);
-}); // To start observation
-stop(); // To end observation
-```
-
-The callback passed as the second parameter to `.watch` get's called whenever the operating system detects a
-a change in the file system. It takes three arguments:
-
-###### `fsevents.watch(dirname: string, (path: string, flags: number, id: string) => void): () => Promise<undefined>`
-
- * `path: string` - the item in the filesystem that have been changed
- * `flags: number` - a numeric value describing what the change was
- * `id: string` - an unique-id identifying this specific event
-
- Returns closer callback which when called returns a Promise resolving when the watcher process has been shut down.
-
-###### `fsevents.getInfo(path: string, flags: number, id: string): FsEventInfo`
-
-The `getInfo` function takes the `path`, `flags` and `id` arguments and converts those parameters into a structure
-that is easier to digest to determine what the change was.
-
-The `FsEventsInfo` has the following shape:
-
-```js
-/**
- * @typedef {'created'|'modified'|'deleted'|'moved'|'root-changed'|'cloned'|'unknown'} FsEventsEvent
- * @typedef {'file'|'directory'|'symlink'} FsEventsType
- */
-{
-  "event": "created", // {FsEventsEvent}
-  "path": "file.txt",
-  "type": "file",    // {FsEventsType}
-  "changes": {
-    "inode": true,   // Had iNode Meta-Information changed
-    "finder": false, // Had Finder Meta-Data changed
-    "access": false, // Had access permissions changed
-    "xattrs": false  // Had xAttributes changed
-  },
-  "flags": 0x100000000
-}
-```
-
-## Changelog
-
-- v2.3 supports Apple Silicon ARM CPUs
-- v2 supports node 8.16+ and reduces package size massively
-- v1.2.8 supports node 6+
-- v1.2.7 supports node 4+
-
-## Troubleshooting
-
-- I'm getting `EBADPLATFORM` `Unsupported platform for fsevents` error.
-- It's fine, nothing is broken. fsevents is macos-only. Other platforms are skipped. If you want to hide this warning, report a bug to NPM bugtracker asking them to hide ebadplatform warnings by default.
-
-## License
-
-The MIT License Copyright (C) 2010-2020 by Philipp Dunkel, Ben Noordhuis, Elan Shankar, Paul Miller — see LICENSE file.
-
-Visit our [GitHub page](https://github.com/fsevents/fsevents) and [NPM Page](https://npmjs.org/package/fsevents)
diff --git a/node_modules/fsevents/fsevents.d.ts b/node_modules/fsevents/fsevents.d.ts
deleted file mode 100644
index 2723c04..0000000
--- a/node_modules/fsevents/fsevents.d.ts
+++ /dev/null
@@ -1,46 +0,0 @@
-declare type Event = "created" | "cloned" | "modified" | "deleted" | "moved" | "root-changed" | "unknown";
-declare type Type = "file" | "directory" | "symlink";
-declare type FileChanges = {
-  inode: boolean;
-  finder: boolean;
-  access: boolean;
-  xattrs: boolean;
-};
-declare type Info = {
-  event: Event;
-  path: string;
-  type: Type;
-  changes: FileChanges;
-  flags: number;
-};
-declare type WatchHandler = (path: string, flags: number, id: string) => void;
-export declare function watch(path: string, handler: WatchHandler): () => Promise<void>;
-export declare function watch(path: string, since: number, handler: WatchHandler): () => Promise<void>;
-export declare function getInfo(path: string, flags: number): Info;
-export declare const constants: {
-  None: 0x00000000;
-  MustScanSubDirs: 0x00000001;
-  UserDropped: 0x00000002;
-  KernelDropped: 0x00000004;
-  EventIdsWrapped: 0x00000008;
-  HistoryDone: 0x00000010;
-  RootChanged: 0x00000020;
-  Mount: 0x00000040;
-  Unmount: 0x00000080;
-  ItemCreated: 0x00000100;
-  ItemRemoved: 0x00000200;
-  ItemInodeMetaMod: 0x00000400;
-  ItemRenamed: 0x00000800;
-  ItemModified: 0x00001000;
-  ItemFinderInfoMod: 0x00002000;
-  ItemChangeOwner: 0x00004000;
-  ItemXattrMod: 0x00008000;
-  ItemIsFile: 0x00010000;
-  ItemIsDir: 0x00020000;
-  ItemIsSymlink: 0x00040000;
-  ItemIsHardlink: 0x00100000;
-  ItemIsLastHardlink: 0x00200000;
-  OwnEvent: 0x00080000;
-  ItemCloned: 0x00400000;
-};
-export {};
diff --git a/node_modules/fsevents/fsevents.js b/node_modules/fsevents/fsevents.js
deleted file mode 100644
index f1b31c9..0000000
--- a/node_modules/fsevents/fsevents.js
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- ** © 2020 by Philipp Dunkel, Ben Noordhuis, Elan Shankar, Paul Miller
- ** Licensed under MIT License.
- */
-
-/* jshint node:true */
-"use strict";
-
-if (process.platform !== "darwin") {
-  throw new Error(`Module 'fsevents' is not compatible with platform '${process.platform}'`);
-}
-
-const Native = require("./fsevents.node");
-const events = Native.constants;
-
-function watch(path, since, handler) {
-  if (typeof path !== "string") {
-    throw new TypeError(`fsevents argument 1 must be a string and not a ${typeof path}`);
-  }
-  if ("function" === typeof since && "undefined" === typeof handler) {
-    handler = since;
-    since = Native.flags.SinceNow;
-  }
-  if (typeof since !== "number") {
-    throw new TypeError(`fsevents argument 2 must be a number and not a ${typeof since}`);
-  }
-  if (typeof handler !== "function") {
-    throw new TypeError(`fsevents argument 3 must be a function and not a ${typeof handler}`);
-  }
-
-  let instance = Native.start(Native.global, path, since, handler);
-  if (!instance) throw new Error(`could not watch: ${path}`);
-  return () => {
-    const result = instance ? Promise.resolve(instance).then(Native.stop) : Promise.resolve(undefined);
-    instance = undefined;
-    return result;
-  };
-}
-
-function getInfo(path, flags) {
-  return {
-    path,
-    flags,
-    event: getEventType(flags),
-    type: getFileType(flags),
-    changes: getFileChanges(flags),
-  };
-}
-
-function getFileType(flags) {
-  if (events.ItemIsFile & flags) return "file";
-  if (events.ItemIsDir & flags) return "directory";
-  if (events.ItemIsSymlink & flags) return "symlink";
-}
-function anyIsTrue(obj) {
-  for (let key in obj) {
-    if (obj[key]) return true;
-  }
-  return false;
-}
-function getEventType(flags) {
-  if (events.ItemRemoved & flags) return "deleted";
-  if (events.ItemRenamed & flags) return "moved";
-  if (events.ItemCreated & flags) return "created";
-  if (events.ItemModified & flags) return "modified";
-  if (events.RootChanged & flags) return "root-changed";
-  if (events.ItemCloned & flags) return "cloned";
-  if (anyIsTrue(flags)) return "modified";
-  return "unknown";
-}
-function getFileChanges(flags) {
-  return {
-    inode: !!(events.ItemInodeMetaMod & flags),
-    finder: !!(events.ItemFinderInfoMod & flags),
-    access: !!(events.ItemChangeOwner & flags),
-    xattrs: !!(events.ItemXattrMod & flags),
-  };
-}
-
-exports.watch = watch;
-exports.getInfo = getInfo;
-exports.constants = events;
diff --git a/node_modules/fsevents/fsevents.node b/node_modules/fsevents/fsevents.node
deleted file mode 100755
index 00fac7e..0000000
--- a/node_modules/fsevents/fsevents.node
+++ /dev/null
Binary files differ
diff --git a/node_modules/fsevents/package.json b/node_modules/fsevents/package.json
deleted file mode 100644
index 0cadf57..0000000
--- a/node_modules/fsevents/package.json
+++ /dev/null
@@ -1,62 +0,0 @@
-{
-  "name": "fsevents",
-  "version": "2.3.2",
-  "description": "Native Access to MacOS FSEvents",
-  "main": "fsevents.js",
-  "types": "fsevents.d.ts",
-  "os": [
-    "darwin"
-  ],
-  "files": [
-    "fsevents.d.ts",
-    "fsevents.js",
-    "fsevents.node"
-  ],
-  "engines": {
-    "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
-  },
-  "scripts": {
-    "clean": "node-gyp clean && rm -f fsevents.node",
-    "build": "node-gyp clean && rm -f fsevents.node && node-gyp rebuild && node-gyp clean",
-    "test": "/bin/bash ./test.sh 2>/dev/null",
-    "prepublishOnly": "npm run build"
-  },
-  "repository": {
-    "type": "git",
-    "url": "https://github.com/fsevents/fsevents.git"
-  },
-  "keywords": [
-    "fsevents",
-    "mac"
-  ],
-  "contributors": [
-    {
-      "name": "Philipp Dunkel",
-      "email": "pip@pipobscure.com"
-    },
-    {
-      "name": "Ben Noordhuis",
-      "email": "info@bnoordhuis.nl"
-    },
-    {
-      "name": "Elan Shankar",
-      "email": "elan.shanker@gmail.com"
-    },
-    {
-      "name": "Miroslav Bajto\u0161",
-      "email": "mbajtoss@gmail.com"
-    },
-    {
-      "name": "Paul Miller",
-      "url": "https://paulmillr.com"
-    }
-  ],
-  "license": "MIT",
-  "bugs": {
-    "url": "https://github.com/fsevents/fsevents/issues"
-  },
-  "homepage": "https://github.com/fsevents/fsevents",
-  "devDependencies": {
-    "node-gyp": "^6.1.0"
-  }
-}
diff --git a/node_modules/log-symbols/node_modules/chalk/package.json b/node_modules/log-symbols/node_modules/chalk/package.json
index ea99b08..5e60306 100644
--- a/node_modules/log-symbols/node_modules/chalk/package.json
+++ b/node_modules/log-symbols/node_modules/chalk/package.json
@@ -1,6 +1,6 @@
 {
   "name": "chalk",
-  "version": "4.1.1",
+  "version": "4.1.2",
   "description": "Terminal string styling done right",
   "license": "MIT",
   "repository": "chalk/chalk",
diff --git a/node_modules/log-symbols/node_modules/chalk/readme.md b/node_modules/log-symbols/node_modules/chalk/readme.md
index 8512592..a055d21 100644
--- a/node_modules/log-symbols/node_modules/chalk/readme.md
+++ b/node_modules/log-symbols/node_modules/chalk/readme.md
@@ -33,7 +33,7 @@
 		<br>
 		<br>
 		<a href="https://retool.com/?utm_campaign=sindresorhus">
-			<img src="https://sindresorhus.com/assets/thanks/retool-logo.svg" width="210"/>
+			<img src="https://sindresorhus.com/assets/thanks/retool-logo.svg" width="230"/>
 		</a>
 		<br>
 		<br>
@@ -48,6 +48,12 @@
 				<span>and avoiding access controls. Keep your team and servers in sync with Doppler.</span>
 			</div>
 		</a>
+		<br>
+		<a href="https://uibakery.io/?utm_source=chalk&utm_medium=sponsor&utm_campaign=github">
+			<div>
+				<img src="https://sindresorhus.com/assets/thanks/uibakery-logo.jpg" width="270" alt="UI Bakery">
+			</div>
+		</a>
 	</p>
 </div>
 
diff --git a/node_modules/meow/node_modules/normalize-package-data/LICENSE b/node_modules/meow/node_modules/normalize-package-data/LICENSE
index 6ed662c..19d1364 100644
--- a/node_modules/meow/node_modules/normalize-package-data/LICENSE
+++ b/node_modules/meow/node_modules/normalize-package-data/LICENSE
@@ -6,25 +6,10 @@
 
 The BSD License
 
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions
-are met:
+Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
 
-1. Redistributions of source code must retain the above copyright
-   notice, this list of conditions and the following disclaimer.
+1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
 
-2. Redistributions in binary form must reproduce the above copyright
-   notice, this list of conditions and the following disclaimer in the
-   documentation and/or other materials provided with the distribution.
+2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
 
-THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
-ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS
-BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
-BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
-OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
-IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/node_modules/meow/node_modules/normalize-package-data/README.md b/node_modules/meow/node_modules/normalize-package-data/README.md
index 84da5e8..72e85f0 100644
--- a/node_modules/meow/node_modules/normalize-package-data/README.md
+++ b/node_modules/meow/node_modules/normalize-package-data/README.md
@@ -96,7 +96,7 @@
 
 ### Rules for license field
 
-The `license` field should be a valid *SPDX license expression* or one of the special values allowed by [validate-npm-package-license](https://npmjs.com/package/validate-npm-package-license). See [documentation for the license field in package.json](https://docs.npmjs.com/files/package.json#license).
+The `license`/`licence` field should be a valid *SPDX license expression* or one of the special values allowed by [validate-npm-package-license](https://npmjs.com/package/validate-npm-package-license). See [documentation for the license field in package.json](https://docs.npmjs.com/files/package.json#license).
 
 ## Credits
 
@@ -104,5 +104,5 @@
 
 ## License
 
-normalize-package-data is released under the [BSD 2-Clause License](http://opensource.org/licenses/MIT).  
-Copyright (c) 2013 Meryn Stol  
+normalize-package-data is released under the [BSD 2-Clause License](https://opensource.org/licenses/BSD-2-Clause).
+Copyright (c) 2013 Meryn Stol
diff --git a/node_modules/meow/node_modules/normalize-package-data/lib/extract_description.js b/node_modules/meow/node_modules/normalize-package-data/lib/extract_description.js
index 83f10aa..bf98968 100644
--- a/node_modules/meow/node_modules/normalize-package-data/lib/extract_description.js
+++ b/node_modules/meow/node_modules/normalize-package-data/lib/extract_description.js
@@ -2,13 +2,21 @@
 
 // Extracts description from contents of a readme file in markdown format
 function extractDescription (d) {
-  if (!d) return;
-  if (d === "ERROR: No README data found!") return;
+  if (!d) {
+    return
+  }
+  if (d === 'ERROR: No README data found!') {
+    return
+  }
   // the first block of text before the first heading
   // that isn't the first line heading
   d = d.trim().split('\n')
-  for (var s = 0; d[s] && d[s].trim().match(/^(#|$)/); s ++);
+  for (var s = 0; d[s] && d[s].trim().match(/^(#|$)/); s++) {
+    ;
+  }
   var l = d.length
-  for (var e = s + 1; e < l && d[e].trim(); e ++);
+  for (var e = s + 1; e < l && d[e].trim(); e++) {
+    ;
+  }
   return d.slice(s, e).join(' ').trim()
 }
diff --git a/node_modules/meow/node_modules/normalize-package-data/lib/fixer.js b/node_modules/meow/node_modules/normalize-package-data/lib/fixer.js
index 27682e9..97c26b2 100644
--- a/node_modules/meow/node_modules/normalize-package-data/lib/fixer.js
+++ b/node_modules/meow/node_modules/normalize-package-data/lib/fixer.js
@@ -1,87 +1,94 @@
-var semver = require("semver")
-var validateLicense = require('validate-npm-package-license');
-var hostedGitInfo = require("hosted-git-info")
-var isBuiltinModule = require("resolve").isCore
-var depTypes = ["dependencies","devDependencies","optionalDependencies"]
-var extractDescription = require("./extract_description")
-var url = require("url")
-var typos = require("./typos.json")
+var isValidSemver = require('semver/functions/valid')
+var cleanSemver = require('semver/functions/clean')
+var validateLicense = require('validate-npm-package-license')
+var hostedGitInfo = require('hosted-git-info')
+var isBuiltinModule = require('is-core-module')
+var depTypes = ['dependencies', 'devDependencies', 'optionalDependencies']
+var extractDescription = require('./extract_description')
+var url = require('url')
+var typos = require('./typos.json')
 
-var fixer = module.exports = {
+module.exports = {
   // default warning function
-  warn: function() {},
+  warn: function () {},
 
-  fixRepositoryField: function(data) {
+  fixRepositoryField: function (data) {
     if (data.repositories) {
-      this.warn("repositories");
+      this.warn('repositories')
       data.repository = data.repositories[0]
     }
-    if (!data.repository) return this.warn("missingRepository")
-    if (typeof data.repository === "string") {
+    if (!data.repository) {
+      return this.warn('missingRepository')
+    }
+    if (typeof data.repository === 'string') {
       data.repository = {
-        type: "git",
-        url: data.repository
+        type: 'git',
+        url: data.repository,
       }
     }
-    var r = data.repository.url || ""
+    var r = data.repository.url || ''
     if (r) {
       var hosted = hostedGitInfo.fromUrl(r)
       if (hosted) {
         r = data.repository.url
-          = hosted.getDefaultRepresentation() == "shortcut" ? hosted.https() : hosted.toString()
+          = hosted.getDefaultRepresentation() === 'shortcut' ? hosted.https() : hosted.toString()
       }
     }
 
-    if (r.match(/github.com\/[^\/]+\/[^\/]+\.git\.git$/)) {
-      this.warn("brokenGitUrl", r)
+    if (r.match(/github.com\/[^/]+\/[^/]+\.git\.git$/)) {
+      this.warn('brokenGitUrl', r)
     }
-  }
+  },
 
-, fixTypos: function(data) {
+  fixTypos: function (data) {
     Object.keys(typos.topLevel).forEach(function (d) {
-      if (data.hasOwnProperty(d)) {
-        this.warn("typo", d, typos.topLevel[d])
+      if (Object.prototype.hasOwnProperty.call(data, d)) {
+        this.warn('typo', d, typos.topLevel[d])
       }
     }, this)
-  }
+  },
 
-, fixScriptsField: function(data) {
-    if (!data.scripts) return
-    if (typeof data.scripts !== "object") {
-      this.warn("nonObjectScripts")
+  fixScriptsField: function (data) {
+    if (!data.scripts) {
+      return
+    }
+    if (typeof data.scripts !== 'object') {
+      this.warn('nonObjectScripts')
       delete data.scripts
       return
     }
     Object.keys(data.scripts).forEach(function (k) {
-      if (typeof data.scripts[k] !== "string") {
-        this.warn("nonStringScript")
+      if (typeof data.scripts[k] !== 'string') {
+        this.warn('nonStringScript')
         delete data.scripts[k]
       } else if (typos.script[k] && !data.scripts[typos.script[k]]) {
-        this.warn("typo", k, typos.script[k], "scripts")
+        this.warn('typo', k, typos.script[k], 'scripts')
       }
     }, this)
-  }
+  },
 
-, fixFilesField: function(data) {
+  fixFilesField: function (data) {
     var files = data.files
     if (files && !Array.isArray(files)) {
-      this.warn("nonArrayFiles")
+      this.warn('nonArrayFiles')
       delete data.files
     } else if (data.files) {
-      data.files = data.files.filter(function(file) {
-        if (!file || typeof file !== "string") {
-          this.warn("invalidFilename", file)
+      data.files = data.files.filter(function (file) {
+        if (!file || typeof file !== 'string') {
+          this.warn('invalidFilename', file)
           return false
         } else {
           return true
         }
       }, this)
     }
-  }
+  },
 
-, fixBinField: function(data) {
-    if (!data.bin) return;
-    if (typeof data.bin === "string") {
+  fixBinField: function (data) {
+    if (!data.bin) {
+      return
+    }
+    if (typeof data.bin === 'string') {
       var b = {}
       var match
       if (match = data.name.match(/^@[^/]+[/](.*)$/)) {
@@ -91,286 +98,327 @@
       }
       data.bin = b
     }
-  }
+  },
 
-, fixManField: function(data) {
-    if (!data.man) return;
-    if (typeof data.man === "string") {
-      data.man = [ data.man ]
+  fixManField: function (data) {
+    if (!data.man) {
+      return
     }
-  }
-, fixBundleDependenciesField: function(data) {
-    var bdd = "bundledDependencies"
-    var bd = "bundleDependencies"
+    if (typeof data.man === 'string') {
+      data.man = [data.man]
+    }
+  },
+  fixBundleDependenciesField: function (data) {
+    var bdd = 'bundledDependencies'
+    var bd = 'bundleDependencies'
     if (data[bdd] && !data[bd]) {
       data[bd] = data[bdd]
       delete data[bdd]
     }
     if (data[bd] && !Array.isArray(data[bd])) {
-      this.warn("nonArrayBundleDependencies")
+      this.warn('nonArrayBundleDependencies')
       delete data[bd]
     } else if (data[bd]) {
-      data[bd] = data[bd].filter(function(bd) {
+      data[bd] = data[bd].filter(function (bd) {
         if (!bd || typeof bd !== 'string') {
-          this.warn("nonStringBundleDependency", bd)
+          this.warn('nonStringBundleDependency', bd)
           return false
         } else {
           if (!data.dependencies) {
             data.dependencies = {}
           }
-          if (!data.dependencies.hasOwnProperty(bd)) {
-            this.warn("nonDependencyBundleDependency", bd)
-            data.dependencies[bd] = "*"
+          if (Object.prototype.hasOwnProperty.call(data.dependencies, bd)) {
+            this.warn('nonDependencyBundleDependency', bd)
+            data.dependencies[bd] = '*'
           }
           return true
         }
       }, this)
     }
-  }
+  },
 
-, fixDependencies: function(data, strict) {
-    var loose = !strict
+  fixDependencies: function (data, strict) {
     objectifyDeps(data, this.warn)
     addOptionalDepsToDeps(data, this.warn)
     this.fixBundleDependenciesField(data)
 
-    ;['dependencies','devDependencies'].forEach(function(deps) {
-      if (!(deps in data)) return
-      if (!data[deps] || typeof data[deps] !== "object") {
-        this.warn("nonObjectDependencies", deps)
+    ;['dependencies', 'devDependencies'].forEach(function (deps) {
+      if (!(deps in data)) {
+        return
+      }
+      if (!data[deps] || typeof data[deps] !== 'object') {
+        this.warn('nonObjectDependencies', deps)
         delete data[deps]
         return
       }
       Object.keys(data[deps]).forEach(function (d) {
         var r = data[deps][d]
         if (typeof r !== 'string') {
-          this.warn("nonStringDependency", d, JSON.stringify(r))
+          this.warn('nonStringDependency', d, JSON.stringify(r))
           delete data[deps][d]
         }
         var hosted = hostedGitInfo.fromUrl(data[deps][d])
-        if (hosted) data[deps][d] = hosted.toString()
+        if (hosted) {
+          data[deps][d] = hosted.toString()
+        }
       }, this)
     }, this)
-  }
+  },
 
-, fixModulesField: function (data) {
+  fixModulesField: function (data) {
     if (data.modules) {
-      this.warn("deprecatedModules")
+      this.warn('deprecatedModules')
       delete data.modules
     }
-  }
+  },
 
-, fixKeywordsField: function (data) {
-    if (typeof data.keywords === "string") {
+  fixKeywordsField: function (data) {
+    if (typeof data.keywords === 'string') {
       data.keywords = data.keywords.split(/,\s+/)
     }
     if (data.keywords && !Array.isArray(data.keywords)) {
       delete data.keywords
-      this.warn("nonArrayKeywords")
+      this.warn('nonArrayKeywords')
     } else if (data.keywords) {
-      data.keywords = data.keywords.filter(function(kw) {
-        if (typeof kw !== "string" || !kw) {
-          this.warn("nonStringKeyword");
+      data.keywords = data.keywords.filter(function (kw) {
+        if (typeof kw !== 'string' || !kw) {
+          this.warn('nonStringKeyword')
           return false
         } else {
           return true
         }
       }, this)
     }
-  }
+  },
 
-, fixVersionField: function(data, strict) {
+  fixVersionField: function (data, strict) {
     // allow "loose" semver 1.0 versions in non-strict mode
     // enforce strict semver 2.0 compliance in strict mode
     var loose = !strict
     if (!data.version) {
-      data.version = ""
+      data.version = ''
       return true
     }
-    if (!semver.valid(data.version, loose)) {
-      throw new Error('Invalid version: "'+ data.version + '"')
+    if (!isValidSemver(data.version, loose)) {
+      throw new Error('Invalid version: "' + data.version + '"')
     }
-    data.version = semver.clean(data.version, loose)
+    data.version = cleanSemver(data.version, loose)
     return true
-  }
+  },
 
-, fixPeople: function(data) {
+  fixPeople: function (data) {
     modifyPeople(data, unParsePerson)
     modifyPeople(data, parsePerson)
-  }
+  },
 
-, fixNameField: function(data, options) {
-    if (typeof options === "boolean") options = {strict: options}
-    else if (typeof options === "undefined") options = {}
+  fixNameField: function (data, options) {
+    if (typeof options === 'boolean') {
+      options = {strict: options}
+    } else if (typeof options === 'undefined') {
+      options = {}
+    }
     var strict = options.strict
     if (!data.name && !strict) {
-      data.name = ""
+      data.name = ''
       return
     }
-    if (typeof data.name !== "string") {
-      throw new Error("name field must be a string.")
+    if (typeof data.name !== 'string') {
+      throw new Error('name field must be a string.')
     }
-    if (!strict)
+    if (!strict) {
       data.name = data.name.trim()
+    }
     ensureValidName(data.name, strict, options.allowLegacyCase)
-    if (isBuiltinModule(data.name))
-      this.warn("conflictingName", data.name)
-  }
+    if (isBuiltinModule(data.name)) {
+      this.warn('conflictingName', data.name)
+    }
+  },
 
-
-, fixDescriptionField: function (data) {
+  fixDescriptionField: function (data) {
     if (data.description && typeof data.description !== 'string') {
-      this.warn("nonStringDescription")
+      this.warn('nonStringDescription')
       delete data.description
     }
-    if (data.readme && !data.description)
+    if (data.readme && !data.description) {
       data.description = extractDescription(data.readme)
-      if(data.description === undefined) delete data.description;
-    if (!data.description) this.warn("missingDescription")
-  }
-
-, fixReadmeField: function (data) {
-    if (!data.readme) {
-      this.warn("missingReadme")
-      data.readme = "ERROR: No README data found!"
     }
-  }
+    if (data.description === undefined) {
+      delete data.description
+    }
+    if (!data.description) {
+      this.warn('missingDescription')
+    }
+  },
 
-, fixBugsField: function(data) {
+  fixReadmeField: function (data) {
+    if (!data.readme) {
+      this.warn('missingReadme')
+      data.readme = 'ERROR: No README data found!'
+    }
+  },
+
+  fixBugsField: function (data) {
     if (!data.bugs && data.repository && data.repository.url) {
       var hosted = hostedGitInfo.fromUrl(data.repository.url)
-      if(hosted && hosted.bugs()) {
+      if (hosted && hosted.bugs()) {
         data.bugs = {url: hosted.bugs()}
       }
-    }
-    else if(data.bugs) {
+    } else if (data.bugs) {
       var emailRe = /^.+@.*\..+$/
-      if(typeof data.bugs == "string") {
-        if(emailRe.test(data.bugs))
-          data.bugs = {email:data.bugs}
-        else if(url.parse(data.bugs).protocol)
+      if (typeof data.bugs === 'string') {
+        if (emailRe.test(data.bugs)) {
+          data.bugs = {email: data.bugs}
+        /* eslint-disable-next-line node/no-deprecated-api */
+        } else if (url.parse(data.bugs).protocol) {
           data.bugs = {url: data.bugs}
-        else
-          this.warn("nonEmailUrlBugsString")
-      }
-      else {
+        } else {
+          this.warn('nonEmailUrlBugsString')
+        }
+      } else {
         bugsTypos(data.bugs, this.warn)
         var oldBugs = data.bugs
         data.bugs = {}
-        if(oldBugs.url) {
-          if(typeof(oldBugs.url) == "string" && url.parse(oldBugs.url).protocol)
+        if (oldBugs.url) {
+          /* eslint-disable-next-line node/no-deprecated-api */
+          if (typeof (oldBugs.url) === 'string' && url.parse(oldBugs.url).protocol) {
             data.bugs.url = oldBugs.url
-          else
-            this.warn("nonUrlBugsUrlField")
+          } else {
+            this.warn('nonUrlBugsUrlField')
+          }
         }
-        if(oldBugs.email) {
-          if(typeof(oldBugs.email) == "string" && emailRe.test(oldBugs.email))
+        if (oldBugs.email) {
+          if (typeof (oldBugs.email) === 'string' && emailRe.test(oldBugs.email)) {
             data.bugs.email = oldBugs.email
-          else
-            this.warn("nonEmailBugsEmailField")
+          } else {
+            this.warn('nonEmailBugsEmailField')
+          }
         }
       }
-      if(!data.bugs.email && !data.bugs.url) {
+      if (!data.bugs.email && !data.bugs.url) {
         delete data.bugs
-        this.warn("emptyNormalizedBugs")
+        this.warn('emptyNormalizedBugs')
       }
     }
-  }
+  },
 
-, fixHomepageField: function(data) {
+  fixHomepageField: function (data) {
     if (!data.homepage && data.repository && data.repository.url) {
       var hosted = hostedGitInfo.fromUrl(data.repository.url)
-      if (hosted && hosted.docs()) data.homepage = hosted.docs()
-    }
-    if (!data.homepage) return
-
-    if(typeof data.homepage !== "string") {
-      this.warn("nonUrlHomepage")
-      return delete data.homepage
-    }
-    if(!url.parse(data.homepage).protocol) {
-      data.homepage = "http://" + data.homepage
-    }
-  }
-
-, fixLicenseField: function(data) {
-    if (!data.license) {
-      return this.warn("missingLicense")
-    } else{
-      if (
-        typeof(data.license) !== 'string' ||
-        data.license.length < 1 ||
-        data.license.trim() === ''
-      ) {
-        this.warn("invalidLicense")
-      } else {
-        if (!validateLicense(data.license).validForNewPackages)
-          this.warn("invalidLicense")
+      if (hosted && hosted.docs()) {
+        data.homepage = hosted.docs()
       }
     }
-  }
+    if (!data.homepage) {
+      return
+    }
+
+    if (typeof data.homepage !== 'string') {
+      this.warn('nonUrlHomepage')
+      return delete data.homepage
+    }
+    /* eslint-disable-next-line node/no-deprecated-api */
+    if (!url.parse(data.homepage).protocol) {
+      data.homepage = 'http://' + data.homepage
+    }
+  },
+
+  fixLicenseField: function (data) {
+    const license = data.license || data.licence
+    if (!license) {
+      return this.warn('missingLicense')
+    }
+    if (
+      typeof (license) !== 'string' ||
+      license.length < 1 ||
+      license.trim() === ''
+    ) {
+      return this.warn('invalidLicense')
+    }
+    if (!validateLicense(license).validForNewPackages) {
+      return this.warn('invalidLicense')
+    }
+  },
 }
 
-function isValidScopedPackageName(spec) {
-  if (spec.charAt(0) !== '@') return false
+function isValidScopedPackageName (spec) {
+  if (spec.charAt(0) !== '@') {
+    return false
+  }
 
   var rest = spec.slice(1).split('/')
-  if (rest.length !== 2) return false
+  if (rest.length !== 2) {
+    return false
+  }
 
   return rest[0] && rest[1] &&
     rest[0] === encodeURIComponent(rest[0]) &&
     rest[1] === encodeURIComponent(rest[1])
 }
 
-function isCorrectlyEncodedName(spec) {
-  return !spec.match(/[\/@\s\+%:]/) &&
+function isCorrectlyEncodedName (spec) {
+  return !spec.match(/[/@\s+%:]/) &&
     spec === encodeURIComponent(spec)
 }
 
 function ensureValidName (name, strict, allowLegacyCase) {
-  if (name.charAt(0) === "." ||
+  if (name.charAt(0) === '.' ||
       !(isValidScopedPackageName(name) || isCorrectlyEncodedName(name)) ||
       (strict && (!allowLegacyCase) && name !== name.toLowerCase()) ||
-      name.toLowerCase() === "node_modules" ||
-      name.toLowerCase() === "favicon.ico") {
-        throw new Error("Invalid name: " + JSON.stringify(name))
+      name.toLowerCase() === 'node_modules' ||
+      name.toLowerCase() === 'favicon.ico') {
+    throw new Error('Invalid name: ' + JSON.stringify(name))
   }
 }
 
 function modifyPeople (data, fn) {
-  if (data.author) data.author = fn(data.author)
-  ;["maintainers", "contributors"].forEach(function (set) {
-    if (!Array.isArray(data[set])) return;
+  if (data.author) {
+    data.author = fn(data.author)
+  }['maintainers', 'contributors'].forEach(function (set) {
+    if (!Array.isArray(data[set])) {
+      return
+    }
     data[set] = data[set].map(fn)
   })
   return data
 }
 
 function unParsePerson (person) {
-  if (typeof person === "string") return person
-  var name = person.name || ""
+  if (typeof person === 'string') {
+    return person
+  }
+  var name = person.name || ''
   var u = person.url || person.web
-  var url = u ? (" ("+u+")") : ""
+  var url = u ? (' (' + u + ')') : ''
   var e = person.email || person.mail
-  var email = e ? (" <"+e+">") : ""
-  return name+email+url
+  var email = e ? (' <' + e + '>') : ''
+  return name + email + url
 }
 
 function parsePerson (person) {
-  if (typeof person !== "string") return person
-  var name = person.match(/^([^\(<]+)/)
-  var url = person.match(/\(([^\)]+)\)/)
+  if (typeof person !== 'string') {
+    return person
+  }
+  var name = person.match(/^([^(<]+)/)
+  var url = person.match(/\(([^)]+)\)/)
   var email = person.match(/<([^>]+)>/)
   var obj = {}
-  if (name && name[0].trim()) obj.name = name[0].trim()
-  if (email) obj.email = email[1];
-  if (url) obj.url = url[1];
+  if (name && name[0].trim()) {
+    obj.name = name[0].trim()
+  }
+  if (email) {
+    obj.email = email[1]
+  }
+  if (url) {
+    obj.url = url[1]
+  }
   return obj
 }
 
 function addOptionalDepsToDeps (data, warn) {
   var o = data.optionalDependencies
-  if (!o) return;
+  if (!o) {
+    return
+  }
   var d = data.dependencies || {}
   Object.keys(o).forEach(function (k) {
     d[k] = o[k]
@@ -379,21 +427,25 @@
 }
 
 function depObjectify (deps, type, warn) {
-  if (!deps) return {}
-  if (typeof deps === "string") {
+  if (!deps) {
+    return {}
+  }
+  if (typeof deps === 'string') {
     deps = deps.trim().split(/[\n\r\s\t ,]+/)
   }
-  if (!Array.isArray(deps)) return deps
-  warn("deprecatedArrayDependencies", type)
+  if (!Array.isArray(deps)) {
+    return deps
+  }
+  warn('deprecatedArrayDependencies', type)
   var o = {}
   deps.filter(function (d) {
-    return typeof d === "string"
-  }).forEach(function(d) {
+    return typeof d === 'string'
+  }).forEach(function (d) {
     d = d.trim().split(/(:?[@\s><=])/)
     var dn = d.shift()
-    var dv = d.join("")
+    var dv = d.join('')
     dv = dv.trim()
-    dv = dv.replace(/^@/, "")
+    dv = dv.replace(/^@/, '')
     o[dn] = dv
   })
   return o
@@ -401,16 +453,20 @@
 
 function objectifyDeps (data, warn) {
   depTypes.forEach(function (type) {
-    if (!data[type]) return;
+    if (!data[type]) {
+      return
+    }
     data[type] = depObjectify(data[type], type, warn)
   })
 }
 
-function bugsTypos(bugs, warn) {
-  if (!bugs) return
+function bugsTypos (bugs, warn) {
+  if (!bugs) {
+    return
+  }
   Object.keys(bugs).forEach(function (k) {
     if (typos.bugs[k]) {
-      warn("typo", k, typos.bugs[k], "bugs")
+      warn('typo', k, typos.bugs[k], 'bugs')
       bugs[typos.bugs[k]] = bugs[k]
       delete bugs[k]
     }
diff --git a/node_modules/meow/node_modules/normalize-package-data/lib/make_warning.js b/node_modules/meow/node_modules/normalize-package-data/lib/make_warning.js
index 4ac74ad..3be9c86 100644
--- a/node_modules/meow/node_modules/normalize-package-data/lib/make_warning.js
+++ b/node_modules/meow/node_modules/normalize-package-data/lib/make_warning.js
@@ -1,13 +1,12 @@
-var util = require("util")
-var messages = require("./warning_messages.json")
+var util = require('util')
+var messages = require('./warning_messages.json')
 
-module.exports = function() {
+module.exports = function () {
   var args = Array.prototype.slice.call(arguments, 0)
   var warningName = args.shift()
-  if (warningName == "typo") {
-    return makeTypoWarning.apply(null,args)
-  }
-  else {
+  if (warningName === 'typo') {
+    return makeTypoWarning.apply(null, args)
+  } else {
     var msgTemplate = messages[warningName] ? messages[warningName] : warningName + ": '%s'"
     args.unshift(msgTemplate)
     return util.format.apply(null, args)
diff --git a/node_modules/meow/node_modules/normalize-package-data/lib/normalize.js b/node_modules/meow/node_modules/normalize-package-data/lib/normalize.js
index bd1bfef..bf71d2c 100644
--- a/node_modules/meow/node_modules/normalize-package-data/lib/normalize.js
+++ b/node_modules/meow/node_modules/normalize-package-data/lib/normalize.js
@@ -1,16 +1,16 @@
 module.exports = normalize
 
-var fixer = require("./fixer")
+var fixer = require('./fixer')
 normalize.fixer = fixer
 
-var makeWarning = require("./make_warning")
+var makeWarning = require('./make_warning')
 
-var fieldsToFix = ['name','version','description','repository','modules','scripts'
-                  ,'files','bin','man','bugs','keywords','readme','homepage','license']
-var otherThingsToFix = ['dependencies','people', 'typos']
+var fieldsToFix = ['name', 'version', 'description', 'repository', 'modules', 'scripts',
+  'files', 'bin', 'man', 'bugs', 'keywords', 'readme', 'homepage', 'license']
+var otherThingsToFix = ['dependencies', 'people', 'typos']
 
-var thingsToFix = fieldsToFix.map(function(fieldName) {
-  return ucFirst(fieldName) + "Field"
+var thingsToFix = fieldsToFix.map(function (fieldName) {
+  return ucFirst(fieldName) + 'Field'
 })
 // two ways to do this in CoffeeScript on only one line, sub-70 chars:
 // thingsToFix = fieldsToFix.map (name) -> ucFirst(name) + "Field"
@@ -18,22 +18,31 @@
 thingsToFix = thingsToFix.concat(otherThingsToFix)
 
 function normalize (data, warn, strict) {
-  if(warn === true) warn = null, strict = true
-  if(!strict) strict = false
-  if(!warn || data.private) warn = function(msg) { /* noop */ }
+  if (warn === true) {
+    warn = null
+    strict = true
+  }
+  if (!strict) {
+    strict = false
+  }
+  if (!warn || data.private) {
+    warn = function (msg) { /* noop */ }
+  }
 
   if (data.scripts &&
-      data.scripts.install === "node-gyp rebuild" &&
+      data.scripts.install === 'node-gyp rebuild' &&
       !data.scripts.preinstall) {
     data.gypfile = true
   }
-  fixer.warn = function() { warn(makeWarning.apply(null, arguments)) }
-  thingsToFix.forEach(function(thingName) {
-    fixer["fix" + ucFirst(thingName)](data, strict)
+  fixer.warn = function () {
+    warn(makeWarning.apply(null, arguments))
+  }
+  thingsToFix.forEach(function (thingName) {
+    fixer['fix' + ucFirst(thingName)](data, strict)
   })
-  data._id = data.name + "@" + data.version
+  data._id = data.name + '@' + data.version
 }
 
 function ucFirst (string) {
-  return string.charAt(0).toUpperCase() + string.slice(1);
+  return string.charAt(0).toUpperCase() + string.slice(1)
 }
diff --git a/node_modules/meow/node_modules/normalize-package-data/lib/safe_format.js b/node_modules/meow/node_modules/normalize-package-data/lib/safe_format.js
index b07f100..5fc888e 100644
--- a/node_modules/meow/node_modules/normalize-package-data/lib/safe_format.js
+++ b/node_modules/meow/node_modules/normalize-package-data/lib/safe_format.js
@@ -1,9 +1,11 @@
 var util = require('util')
 
-module.exports = function() {
+module.exports = function () {
   var args = Array.prototype.slice.call(arguments, 0)
-  args.forEach(function(arg) {
-    if (!arg) throw new TypeError('Bad arguments.')
+  args.forEach(function (arg) {
+    if (!arg) {
+      throw new TypeError('Bad arguments.')
+    }
   })
   return util.format.apply(null, arguments)
 }
diff --git a/node_modules/meow/node_modules/normalize-package-data/package.json b/node_modules/meow/node_modules/normalize-package-data/package.json
index 09b184c..17f167e 100644
--- a/node_modules/meow/node_modules/normalize-package-data/package.json
+++ b/node_modules/meow/node_modules/normalize-package-data/package.json
@@ -1,6 +1,6 @@
 {
   "name": "normalize-package-data",
-  "version": "3.0.2",
+  "version": "3.0.3",
   "author": "Meryn Stol <merynstol@gmail.com>",
   "description": "Normalizes data that can be found in package.json files.",
   "license": "BSD-2-Clause",
@@ -13,16 +13,22 @@
     "postversion": "npm publish",
     "prepublishOnly": "git push origin --follow-tags",
     "preversion": "npm test",
-    "test": "tap test/*.js"
+    "test": "tap test/*.js --branches 85 --functions 90 --lines 85 --statements 85",
+    "npmclilint": "npmcli-lint",
+    "lint": "npm run npmclilint -- \"lib/**/*.*js\" \"test/**/*.*js\"",
+    "lintfix": "npm run lint -- --fix",
+    "posttest": "npm run lint --",
+    "postsnap": "npm run lintfix --"
   },
   "dependencies": {
     "hosted-git-info": "^4.0.1",
-    "resolve": "^1.20.0",
+    "is-core-module": "^2.5.0",
     "semver": "^7.3.4",
     "validate-npm-package-license": "^3.0.1"
   },
   "devDependencies": {
-    "tap": "^14.11.0"
+    "@npmcli/lint": "^1.0.2",
+    "tap": "^15.0.9"
   },
   "files": [
     "lib/*.js",
diff --git a/node_modules/recast/node_modules/tslib/package.json b/node_modules/recast/node_modules/tslib/package.json
index d8ccf7f..31df7d5 100644
--- a/node_modules/recast/node_modules/tslib/package.json
+++ b/node_modules/recast/node_modules/tslib/package.json
@@ -2,7 +2,7 @@
   "name": "tslib",
   "author": "Microsoft Corp.",
   "homepage": "https://www.typescriptlang.org/",
-  "version": "2.3.0",
+  "version": "2.3.1",
   "license": "0BSD",
   "description": "Runtime library for TypeScript helper functions",
   "keywords": [
diff --git a/node_modules/recast/node_modules/tslib/tslib.es6.js b/node_modules/recast/node_modules/tslib/tslib.es6.js
index b93adb8..4cec286 100644
--- a/node_modules/recast/node_modules/tslib/tslib.es6.js
+++ b/node_modules/recast/node_modules/tslib/tslib.es6.js
@@ -169,7 +169,7 @@
             ar[i] = from[i];
         }
     }
-    return to.concat(ar || from);
+    return to.concat(ar || Array.prototype.slice.call(from));
 }
 
 export function __await(v) {
diff --git a/node_modules/recast/node_modules/tslib/tslib.js b/node_modules/recast/node_modules/tslib/tslib.js
index 6805172..fab4f65 100644
--- a/node_modules/recast/node_modules/tslib/tslib.js
+++ b/node_modules/recast/node_modules/tslib/tslib.js
@@ -210,7 +210,7 @@
                 ar[i] = from[i];
             }
         }
-        return to.concat(ar || from);
+        return to.concat(ar || Array.prototype.slice.call(from));
     };
 
     __await = function (v) {
diff --git a/node_modules/socket.io/node_modules/@types/node/README.md b/node_modules/socket.io/node_modules/@types/node/README.md
index b4c9da0..2c5c250 100755
--- a/node_modules/socket.io/node_modules/@types/node/README.md
+++ b/node_modules/socket.io/node_modules/@types/node/README.md
@@ -2,13 +2,13 @@
 > `npm install --save @types/node`
 
 # Summary
-This package contains type definitions for Node.js (http://nodejs.org/).
+This package contains type definitions for Node.js (https://nodejs.org/).
 
 # Details
 Files were exported from https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/node/v14.
 
 ### Additional Details
- * Last updated: Sat, 24 Jul 2021 17:31:17 GMT
+ * Last updated: Tue, 07 Sep 2021 07:31:43 GMT
  * Dependencies: none
  * Global values: `Buffer`, `__dirname`, `__filename`, `clearImmediate`, `clearInterval`, `clearTimeout`, `console`, `exports`, `global`, `module`, `process`, `queueMicrotask`, `require`, `setImmediate`, `setInterval`, `setTimeout`
 
diff --git a/node_modules/socket.io/node_modules/@types/node/base.d.ts b/node_modules/socket.io/node_modules/@types/node/base.d.ts
deleted file mode 100755
index fa67179..0000000
--- a/node_modules/socket.io/node_modules/@types/node/base.d.ts
+++ /dev/null
@@ -1,19 +0,0 @@
-// NOTE: These definitions support NodeJS and TypeScript 3.7.
-
-// NOTE: TypeScript version-specific augmentations can be found in the following paths:
-//          - ~/base.d.ts         - Shared definitions common to all TypeScript versions
-//          - ~/index.d.ts        - Definitions specific to TypeScript 2.1
-//          - ~/ts3.7/base.d.ts   - Definitions specific to TypeScript 3.7
-//          - ~/ts3.7/index.d.ts  - Definitions specific to TypeScript 3.7 with assert pulled in
-
-// Reference required types from the default lib:
-/// <reference lib="es2018" />
-/// <reference lib="esnext.asynciterable" />
-/// <reference lib="esnext.intl" />
-/// <reference lib="esnext.bigint" />
-
-// Base definitions for all NodeJS modules that are not specific to any version of TypeScript:
-/// <reference path="ts3.6/base.d.ts" />
-
-// TypeScript 3.7-specific augmentations:
-/// <reference path="assert.d.ts" />
diff --git a/node_modules/socket.io/node_modules/@types/node/child_process.d.ts b/node_modules/socket.io/node_modules/@types/node/child_process.d.ts
index eb5bd7c..e7ad2ba 100755
--- a/node_modules/socket.io/node_modules/@types/node/child_process.d.ts
+++ b/node_modules/socket.io/node_modules/@types/node/child_process.d.ts
@@ -452,7 +452,7 @@
     }
     interface SpawnSyncReturns<T> {
         pid: number;
-        output: string[];
+        output: Array<T | null>;
         stdout: T;
         stderr: T;
         status: number | null;
diff --git a/node_modules/socket.io/node_modules/@types/node/fs.d.ts b/node_modules/socket.io/node_modules/@types/node/fs.d.ts
index 1734f48..b83ab98 100755
--- a/node_modules/socket.io/node_modules/@types/node/fs.d.ts
+++ b/node_modules/socket.io/node_modules/@types/node/fs.d.ts
@@ -1578,7 +1578,7 @@
      */
     export function readFile(
         path: PathLike | number,
-        options: { encoding: BufferEncoding; flag?: string | undefined; } | string,
+        options: { encoding: BufferEncoding; flag?: string | undefined; } | BufferEncoding,
         callback: (err: NodeJS.ErrnoException | null, data: string) => void
     ): void;
 
@@ -1592,7 +1592,7 @@
      */
     export function readFile(
         path: PathLike | number,
-        options: BaseEncodingOptions & { flag?: string | undefined; } | string | undefined | null,
+        options: BaseEncodingOptions & { flag?: string | undefined; } | BufferEncoding | undefined | null,
         callback: (err: NodeJS.ErrnoException | null, data: string | Buffer) => void,
     ): void;
 
@@ -1622,7 +1622,7 @@
          * @param options Either the encoding for the result, or an object that contains the encoding and an optional flag.
          * If a flag is not provided, it defaults to `'r'`.
          */
-        function __promisify__(path: PathLike | number, options: { encoding: BufferEncoding; flag?: string | undefined; } | string): Promise<string>;
+        function __promisify__(path: PathLike | number, options: { encoding: BufferEncoding; flag?: string | undefined; } | BufferEncoding): Promise<string>;
 
         /**
          * Asynchronously reads the entire contents of a file.
@@ -1632,7 +1632,7 @@
          * @param options Either the encoding for the result, or an object that contains the encoding and an optional flag.
          * If a flag is not provided, it defaults to `'r'`.
          */
-        function __promisify__(path: PathLike | number, options?: BaseEncodingOptions & { flag?: string | undefined; } | string | null): Promise<string | Buffer>;
+        function __promisify__(path: PathLike | number, options?: BaseEncodingOptions & { flag?: string | undefined; } | BufferEncoding | null): Promise<string | Buffer>;
     }
 
     /**
@@ -1664,7 +1664,7 @@
      */
     export function readFileSync(path: PathLike | number, options?: BaseEncodingOptions & { flag?: string | undefined; } | BufferEncoding | null): string | Buffer;
 
-    export type WriteFileOptions = BaseEncodingOptions & { mode?: Mode | undefined; flag?: string | undefined; } | string | null;
+    export type WriteFileOptions = BaseEncodingOptions & { mode?: Mode | undefined; flag?: string | undefined; } | BufferEncoding | null;
 
     /**
      * Asynchronously writes data to a file, replacing the file if it already exists.
@@ -2068,7 +2068,7 @@
      * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
      * URL support is _experimental_.
      */
-    export function createReadStream(path: PathLike, options?: string | {
+    export function createReadStream(path: PathLike, options?: BufferEncoding | {
         flags?: string | undefined;
         encoding?: BufferEncoding | undefined;
         fd?: number | undefined;
@@ -2088,7 +2088,7 @@
      * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
      * URL support is _experimental_.
      */
-    export function createWriteStream(path: PathLike, options?: string | {
+    export function createWriteStream(path: PathLike, options?: BufferEncoding | {
         flags?: string | undefined;
         encoding?: BufferEncoding | undefined;
         fd?: number | undefined;
diff --git a/node_modules/socket.io/node_modules/@types/node/http.d.ts b/node_modules/socket.io/node_modules/@types/node/http.d.ts
index 7491b6e..05ffc73 100755
--- a/node_modules/socket.io/node_modules/@types/node/http.d.ts
+++ b/node_modules/socket.io/node_modules/@types/node/http.d.ts
@@ -122,7 +122,9 @@
 
     type RequestListener = (req: IncomingMessage, res: ServerResponse) => void;
 
-    interface HttpBase {
+    class Server extends NetServer {
+        constructor(requestListener?: RequestListener);
+        constructor(options: ServerOptions, requestListener?: RequestListener);
         setTimeout(msecs?: number, callback?: () => void): this;
         setTimeout(callback: () => void): this;
         /**
@@ -145,12 +147,72 @@
          * {@link https://nodejs.org/api/http.html#http_server_requesttimeout}
          */
         requestTimeout: number;
-    }
-
-    interface Server extends HttpBase {}
-    class Server extends NetServer {
-        constructor(requestListener?: RequestListener);
-        constructor(options: ServerOptions, requestListener?: RequestListener);
+        addListener(event: string, listener: (...args: any[]) => void): this;
+        addListener(event: 'close', listener: () => void): this;
+        addListener(event: 'connection', listener: (socket: Socket) => void): this;
+        addListener(event: 'error', listener: (err: Error) => void): this;
+        addListener(event: 'listening', listener: () => void): this;
+        addListener(event: 'checkContinue', listener: RequestListener): this;
+        addListener(event: 'checkExpectation', listener: RequestListener): this;
+        addListener(event: 'clientError', listener: (err: Error, socket: stream.Duplex) => void): this;
+        addListener(event: 'connect', listener: (req: IncomingMessage, socket: stream.Duplex, head: Buffer) => void): this;
+        addListener(event: 'request', listener: RequestListener): this;
+        addListener(event: 'upgrade', listener: (req: IncomingMessage, socket: stream.Duplex, head: Buffer) => void): this;
+        emit(event: string, ...args: any[]): boolean;
+        emit(event: 'close'): boolean;
+        emit(event: 'connection', socket: Socket): boolean;
+        emit(event: 'error', err: Error): boolean;
+        emit(event: 'listening'): boolean;
+        emit(event: 'checkContinue', req: IncomingMessage, res: ServerResponse): boolean;
+        emit(event: 'checkExpectation', req: IncomingMessage, res: ServerResponse): boolean;
+        emit(event: 'clientError', err: Error, socket: stream.Duplex): boolean;
+        emit(event: 'connect', req: IncomingMessage, socket: stream.Duplex, head: Buffer): boolean;
+        emit(event: 'request', req: IncomingMessage, res: ServerResponse): boolean;
+        emit(event: 'upgrade', req: IncomingMessage, socket: stream.Duplex, head: Buffer): boolean;
+        on(event: string, listener: (...args: any[]) => void): this;
+        on(event: 'close', listener: () => void): this;
+        on(event: 'connection', listener: (socket: Socket) => void): this;
+        on(event: 'error', listener: (err: Error) => void): this;
+        on(event: 'listening', listener: () => void): this;
+        on(event: 'checkContinue', listener: RequestListener): this;
+        on(event: 'checkExpectation', listener: RequestListener): this;
+        on(event: 'clientError', listener: (err: Error, socket: stream.Duplex) => void): this;
+        on(event: 'connect', listener: (req: IncomingMessage, socket: stream.Duplex, head: Buffer) => void): this;
+        on(event: 'request', listener: RequestListener): this;
+        on(event: 'upgrade', listener: (req: IncomingMessage, socket: stream.Duplex, head: Buffer) => void): this;
+        once(event: string, listener: (...args: any[]) => void): this;
+        once(event: 'close', listener: () => void): this;
+        once(event: 'connection', listener: (socket: Socket) => void): this;
+        once(event: 'error', listener: (err: Error) => void): this;
+        once(event: 'listening', listener: () => void): this;
+        once(event: 'checkContinue', listener: RequestListener): this;
+        once(event: 'checkExpectation', listener: RequestListener): this;
+        once(event: 'clientError', listener: (err: Error, socket: stream.Duplex) => void): this;
+        once(event: 'connect', listener: (req: IncomingMessage, socket: stream.Duplex, head: Buffer) => void): this;
+        once(event: 'request', listener: RequestListener): this;
+        once(event: 'upgrade', listener: (req: IncomingMessage, socket: stream.Duplex, head: Buffer) => void): this;
+        prependListener(event: string, listener: (...args: any[]) => void): this;
+        prependListener(event: 'close', listener: () => void): this;
+        prependListener(event: 'connection', listener: (socket: Socket) => void): this;
+        prependListener(event: 'error', listener: (err: Error) => void): this;
+        prependListener(event: 'listening', listener: () => void): this;
+        prependListener(event: 'checkContinue', listener: RequestListener): this;
+        prependListener(event: 'checkExpectation', listener: RequestListener): this;
+        prependListener(event: 'clientError', listener: (err: Error, socket: stream.Duplex) => void): this;
+        prependListener(event: 'connect', listener: (req: IncomingMessage, socket: stream.Duplex, head: Buffer) => void): this;
+        prependListener(event: 'request', listener: RequestListener): this;
+        prependListener(event: 'upgrade', listener: (req: IncomingMessage, socket: stream.Duplex, head: Buffer) => void): this;
+        prependOnceListener(event: string, listener: (...args: any[]) => void): this;
+        prependOnceListener(event: 'close', listener: () => void): this;
+        prependOnceListener(event: 'connection', listener: (socket: Socket) => void): this;
+        prependOnceListener(event: 'error', listener: (err: Error) => void): this;
+        prependOnceListener(event: 'listening', listener: () => void): this;
+        prependOnceListener(event: 'checkContinue', listener: RequestListener): this;
+        prependOnceListener(event: 'checkExpectation', listener: RequestListener): this;
+        prependOnceListener(event: 'clientError', listener: (err: Error, socket: stream.Duplex) => void): this;
+        prependOnceListener(event: 'connect', listener: (req: IncomingMessage, socket: stream.Duplex, head: Buffer) => void): this;
+        prependOnceListener(event: 'request', listener: RequestListener): this;
+        prependOnceListener(event: 'upgrade', listener: (req: IncomingMessage, socket: stream.Duplex, head: Buffer) => void): this;
     }
 
     // https://github.com/nodejs/node/blob/master/lib/_http_outgoing.js
diff --git a/node_modules/socket.io/node_modules/@types/node/https.d.ts b/node_modules/socket.io/node_modules/@types/node/https.d.ts
index cf02a5e..0d516a8 100755
--- a/node_modules/socket.io/node_modules/@types/node/https.d.ts
+++ b/node_modules/socket.io/node_modules/@types/node/https.d.ts
@@ -1,4 +1,5 @@
 declare module 'https' {
+    import { Duplex } from 'stream';
     import * as tls from 'tls';
     import * as http from 'http';
     import { URL } from 'url';
@@ -20,10 +21,112 @@
         options: AgentOptions;
     }
 
-    interface Server extends http.HttpBase {}
+    interface Server extends http.Server {}
     class Server extends tls.Server {
         constructor(requestListener?: http.RequestListener);
         constructor(options: ServerOptions, requestListener?: http.RequestListener);
+        addListener(event: string, listener: (...args: any[]) => void): this;
+        addListener(event: 'keylog', listener: (line: Buffer, tlsSocket: tls.TLSSocket) => void): this;
+        addListener(event: 'newSession', listener: (sessionId: Buffer, sessionData: Buffer, callback: (err: Error, resp: Buffer) => void) => void): this;
+        addListener(event: 'OCSPRequest', listener: (certificate: Buffer, issuer: Buffer, callback: (err: Error | null, resp: Buffer) => void) => void): this;
+        addListener(event: 'resumeSession', listener: (sessionId: Buffer, callback: (err: Error, sessionData: Buffer) => void) => void): this;
+        addListener(event: 'secureConnection', listener: (tlsSocket: tls.TLSSocket) => void): this;
+        addListener(event: 'tlsClientError', listener: (err: Error, tlsSocket: tls.TLSSocket) => void): this;
+        addListener(event: 'close', listener: () => void): this;
+        addListener(event: 'connection', listener: (socket: Duplex) => void): this;
+        addListener(event: 'error', listener: (err: Error) => void): this;
+        addListener(event: 'listening', listener: () => void): this;
+        addListener(event: 'checkContinue', listener: http.RequestListener): this;
+        addListener(event: 'checkExpectation', listener: http.RequestListener): this;
+        addListener(event: 'clientError', listener: (err: Error, socket: Duplex) => void): this;
+        addListener(event: 'connect', listener: (req: http.IncomingMessage, socket: Duplex, head: Buffer) => void): this;
+        addListener(event: 'request', listener: http.RequestListener): this;
+        addListener(event: 'upgrade', listener: (req: http.IncomingMessage, socket: Duplex, head: Buffer) => void): this;
+        emit(event: string, ...args: any[]): boolean;
+        emit(event: 'keylog', line: Buffer, tlsSocket: tls.TLSSocket): boolean;
+        emit(event: 'newSession', sessionId: Buffer, sessionData: Buffer, callback: (err: Error, resp: Buffer) => void): boolean;
+        emit(event: 'OCSPRequest', certificate: Buffer, issuer: Buffer, callback: (err: Error | null, resp: Buffer) => void): boolean;
+        emit(event: 'resumeSession', sessionId: Buffer, callback: (err: Error, sessionData: Buffer) => void): boolean;
+        emit(event: 'secureConnection', tlsSocket: tls.TLSSocket): boolean;
+        emit(event: 'tlsClientError', err: Error, tlsSocket: tls.TLSSocket): boolean;
+        emit(event: 'close'): boolean;
+        emit(event: 'connection', socket: Duplex): boolean;
+        emit(event: 'error', err: Error): boolean;
+        emit(event: 'listening'): boolean;
+        emit(event: 'checkContinue', req: http.IncomingMessage, res: http.ServerResponse): boolean;
+        emit(event: 'checkExpectation', req: http.IncomingMessage, res: http.ServerResponse): boolean;
+        emit(event: 'clientError', err: Error, socket: Duplex): boolean;
+        emit(event: 'connect', req: http.IncomingMessage, socket: Duplex, head: Buffer): boolean;
+        emit(event: 'request', req: http.IncomingMessage, res: http.ServerResponse): boolean;
+        emit(event: 'upgrade', req: http.IncomingMessage, socket: Duplex, head: Buffer): boolean;
+        on(event: string, listener: (...args: any[]) => void): this;
+        on(event: 'keylog', listener: (line: Buffer, tlsSocket: tls.TLSSocket) => void): this;
+        on(event: 'newSession', listener: (sessionId: Buffer, sessionData: Buffer, callback: (err: Error, resp: Buffer) => void) => void): this;
+        on(event: 'OCSPRequest', listener: (certificate: Buffer, issuer: Buffer, callback: (err: Error | null, resp: Buffer) => void) => void): this;
+        on(event: 'resumeSession', listener: (sessionId: Buffer, callback: (err: Error, sessionData: Buffer) => void) => void): this;
+        on(event: 'secureConnection', listener: (tlsSocket: tls.TLSSocket) => void): this;
+        on(event: 'tlsClientError', listener: (err: Error, tlsSocket: tls.TLSSocket) => void): this;
+        on(event: 'close', listener: () => void): this;
+        on(event: 'connection', listener: (socket: Duplex) => void): this;
+        on(event: 'error', listener: (err: Error) => void): this;
+        on(event: 'listening', listener: () => void): this;
+        on(event: 'checkContinue', listener: http.RequestListener): this;
+        on(event: 'checkExpectation', listener: http.RequestListener): this;
+        on(event: 'clientError', listener: (err: Error, socket: Duplex) => void): this;
+        on(event: 'connect', listener: (req: http.IncomingMessage, socket: Duplex, head: Buffer) => void): this;
+        on(event: 'request', listener: http.RequestListener): this;
+        on(event: 'upgrade', listener: (req: http.IncomingMessage, socket: Duplex, head: Buffer) => void): this;
+        once(event: string, listener: (...args: any[]) => void): this;
+        once(event: 'keylog', listener: (line: Buffer, tlsSocket: tls.TLSSocket) => void): this;
+        once(event: 'newSession', listener: (sessionId: Buffer, sessionData: Buffer, callback: (err: Error, resp: Buffer) => void) => void): this;
+        once(event: 'OCSPRequest', listener: (certificate: Buffer, issuer: Buffer, callback: (err: Error | null, resp: Buffer) => void) => void): this;
+        once(event: 'resumeSession', listener: (sessionId: Buffer, callback: (err: Error, sessionData: Buffer) => void) => void): this;
+        once(event: 'secureConnection', listener: (tlsSocket: tls.TLSSocket) => void): this;
+        once(event: 'tlsClientError', listener: (err: Error, tlsSocket: tls.TLSSocket) => void): this;
+        once(event: 'close', listener: () => void): this;
+        once(event: 'connection', listener: (socket: Duplex) => void): this;
+        once(event: 'error', listener: (err: Error) => void): this;
+        once(event: 'listening', listener: () => void): this;
+        once(event: 'checkContinue', listener: http.RequestListener): this;
+        once(event: 'checkExpectation', listener: http.RequestListener): this;
+        once(event: 'clientError', listener: (err: Error, socket: Duplex) => void): this;
+        once(event: 'connect', listener: (req: http.IncomingMessage, socket: Duplex, head: Buffer) => void): this;
+        once(event: 'request', listener: http.RequestListener): this;
+        once(event: 'upgrade', listener: (req: http.IncomingMessage, socket: Duplex, head: Buffer) => void): this;
+        prependListener(event: string, listener: (...args: any[]) => void): this;
+        prependListener(event: 'keylog', listener: (line: Buffer, tlsSocket: tls.TLSSocket) => void): this;
+        prependListener(event: 'newSession', listener: (sessionId: Buffer, sessionData: Buffer, callback: (err: Error, resp: Buffer) => void) => void): this;
+        prependListener(event: 'OCSPRequest', listener: (certificate: Buffer, issuer: Buffer, callback: (err: Error | null, resp: Buffer) => void) => void): this;
+        prependListener(event: 'resumeSession', listener: (sessionId: Buffer, callback: (err: Error, sessionData: Buffer) => void) => void): this;
+        prependListener(event: 'secureConnection', listener: (tlsSocket: tls.TLSSocket) => void): this;
+        prependListener(event: 'tlsClientError', listener: (err: Error, tlsSocket: tls.TLSSocket) => void): this;
+        prependListener(event: 'close', listener: () => void): this;
+        prependListener(event: 'connection', listener: (socket: Duplex) => void): this;
+        prependListener(event: 'error', listener: (err: Error) => void): this;
+        prependListener(event: 'listening', listener: () => void): this;
+        prependListener(event: 'checkContinue', listener: http.RequestListener): this;
+        prependListener(event: 'checkExpectation', listener: http.RequestListener): this;
+        prependListener(event: 'clientError', listener: (err: Error, socket: Duplex) => void): this;
+        prependListener(event: 'connect', listener: (req: http.IncomingMessage, socket: Duplex, head: Buffer) => void): this;
+        prependListener(event: 'request', listener: http.RequestListener): this;
+        prependListener(event: 'upgrade', listener: (req: http.IncomingMessage, socket: Duplex, head: Buffer) => void): this;
+        prependOnceListener(event: string, listener: (...args: any[]) => void): this;
+        prependOnceListener(event: 'keylog', listener: (line: Buffer, tlsSocket: tls.TLSSocket) => void): this;
+        prependOnceListener(event: 'newSession', listener: (sessionId: Buffer, sessionData: Buffer, callback: (err: Error, resp: Buffer) => void) => void): this;
+        prependOnceListener(event: 'OCSPRequest', listener: (certificate: Buffer, issuer: Buffer, callback: (err: Error | null, resp: Buffer) => void) => void): this;
+        prependOnceListener(event: 'resumeSession', listener: (sessionId: Buffer, callback: (err: Error, sessionData: Buffer) => void) => void): this;
+        prependOnceListener(event: 'secureConnection', listener: (tlsSocket: tls.TLSSocket) => void): this;
+        prependOnceListener(event: 'tlsClientError', listener: (err: Error, tlsSocket: tls.TLSSocket) => void): this;
+        prependOnceListener(event: 'close', listener: () => void): this;
+        prependOnceListener(event: 'connection', listener: (socket: Duplex) => void): this;
+        prependOnceListener(event: 'error', listener: (err: Error) => void): this;
+        prependOnceListener(event: 'listening', listener: () => void): this;
+        prependOnceListener(event: 'checkContinue', listener: http.RequestListener): this;
+        prependOnceListener(event: 'checkExpectation', listener: http.RequestListener): this;
+        prependOnceListener(event: 'clientError', listener: (err: Error, socket: Duplex) => void): this;
+        prependOnceListener(event: 'connect', listener: (req: http.IncomingMessage, socket: Duplex, head: Buffer) => void): this;
+        prependOnceListener(event: 'request', listener: http.RequestListener): this;
+        prependOnceListener(event: 'upgrade', listener: (req: http.IncomingMessage, socket: Duplex, head: Buffer) => void): this;
     }
 
     function createServer(requestListener?: http.RequestListener): Server;
diff --git a/node_modules/socket.io/node_modules/@types/node/index.d.ts b/node_modules/socket.io/node_modules/@types/node/index.d.ts
index d9b2a19..9e9e124 100755
--- a/node_modules/socket.io/node_modules/@types/node/index.d.ts
+++ b/node_modules/socket.io/node_modules/@types/node/index.d.ts
@@ -1,5 +1,5 @@
 // Type definitions for non-npm package Node.js 14.17
-// Project: http://nodejs.org/
+// Project: https://nodejs.org/
 // Definitions by: Microsoft TypeScript <https://github.com/Microsoft>
 //                 DefinitelyTyped <https://github.com/DefinitelyTyped>
 //                 Alberto Schiabel <https://github.com/jkomyno>
@@ -44,16 +44,56 @@
 //                 Bond <https://github.com/bondz>
 // Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
 
-// NOTE: These definitions support NodeJS and TypeScript 3.7.
-// Typically type modifications should be made in base.d.ts instead of here
+// NOTE: These definitions support NodeJS and TypeScript 3.7+
 
-/// <reference path="base.d.ts" />
+// Reference required types from the default lib:
+/// <reference lib="es2018" />
+/// <reference lib="esnext.asynciterable" />
+/// <reference lib="esnext.intl" />
+/// <reference lib="esnext.bigint" />
 
-// NOTE: TypeScript version-specific augmentations can be found in the following paths:
-//          - ~/base.d.ts         - Shared definitions common to all TypeScript versions
-//          - ~/index.d.ts        - Definitions specific to TypeScript 2.8
-//          - ~/ts3.5/index.d.ts  - Definitions specific to TypeScript 3.5
+// Base definitions for all NodeJS modules that are not specific to any version of TypeScript:
+/// <reference path="assert.d.ts" />
+/// <reference path="globals.d.ts" />
+/// <reference path="async_hooks.d.ts" />
+/// <reference path="buffer.d.ts" />
+/// <reference path="child_process.d.ts" />
+/// <reference path="cluster.d.ts" />
+/// <reference path="console.d.ts" />
+/// <reference path="constants.d.ts" />
+/// <reference path="crypto.d.ts" />
+/// <reference path="dgram.d.ts" />
+/// <reference path="dns.d.ts" />
+/// <reference path="domain.d.ts" />
+/// <reference path="events.d.ts" />
+/// <reference path="fs.d.ts" />
+/// <reference path="fs/promises.d.ts" />
+/// <reference path="http.d.ts" />
+/// <reference path="http2.d.ts" />
+/// <reference path="https.d.ts" />
+/// <reference path="inspector.d.ts" />
+/// <reference path="module.d.ts" />
+/// <reference path="net.d.ts" />
+/// <reference path="os.d.ts" />
+/// <reference path="path.d.ts" />
+/// <reference path="perf_hooks.d.ts" />
+/// <reference path="process.d.ts" />
+/// <reference path="punycode.d.ts" />
+/// <reference path="querystring.d.ts" />
+/// <reference path="readline.d.ts" />
+/// <reference path="repl.d.ts" />
+/// <reference path="stream.d.ts" />
+/// <reference path="string_decoder.d.ts" />
+/// <reference path="timers.d.ts" />
+/// <reference path="tls.d.ts" />
+/// <reference path="trace_events.d.ts" />
+/// <reference path="tty.d.ts" />
+/// <reference path="url.d.ts" />
+/// <reference path="util.d.ts" />
+/// <reference path="v8.d.ts" />
+/// <reference path="vm.d.ts" />
+/// <reference path="wasi.d.ts" />
+/// <reference path="worker_threads.d.ts" />
+/// <reference path="zlib.d.ts" />
 
-// NOTE: Augmentations for TypeScript 3.5 and later should use individual files for overrides
-//       within the respective ~/ts3.5 (or later) folder. However, this is disallowed for versions
-//       prior to TypeScript 3.5, so the older definitions will be found here.
+/// <reference path="globals.global.d.ts" />
diff --git a/node_modules/socket.io/node_modules/@types/node/net.d.ts b/node_modules/socket.io/node_modules/@types/node/net.d.ts
index a515bc6..ed6a6e1 100755
--- a/node_modules/socket.io/node_modules/@types/node/net.d.ts
+++ b/node_modules/socket.io/node_modules/@types/node/net.d.ts
@@ -115,6 +115,7 @@
         addListener(event: "end", listener: () => void): this;
         addListener(event: "error", listener: (err: Error) => void): this;
         addListener(event: "lookup", listener: (err: Error, address: string, family: string | number, host: string) => void): this;
+        addListener(event: "ready", listener: () => void): this;
         addListener(event: "timeout", listener: () => void): this;
 
         emit(event: string | symbol, ...args: any[]): boolean;
@@ -125,6 +126,7 @@
         emit(event: "end"): boolean;
         emit(event: "error", err: Error): boolean;
         emit(event: "lookup", err: Error, address: string, family: string | number, host: string): boolean;
+        emit(event: "ready"): boolean;
         emit(event: "timeout"): boolean;
 
         on(event: string, listener: (...args: any[]) => void): this;
@@ -135,6 +137,7 @@
         on(event: "end", listener: () => void): this;
         on(event: "error", listener: (err: Error) => void): this;
         on(event: "lookup", listener: (err: Error, address: string, family: string | number, host: string) => void): this;
+        on(event: "ready", listener: () => void): this;
         on(event: "timeout", listener: () => void): this;
 
         once(event: string, listener: (...args: any[]) => void): this;
@@ -145,6 +148,7 @@
         once(event: "end", listener: () => void): this;
         once(event: "error", listener: (err: Error) => void): this;
         once(event: "lookup", listener: (err: Error, address: string, family: string | number, host: string) => void): this;
+        once(event: "ready", listener: () => void): this;
         once(event: "timeout", listener: () => void): this;
 
         prependListener(event: string, listener: (...args: any[]) => void): this;
@@ -155,6 +159,7 @@
         prependListener(event: "end", listener: () => void): this;
         prependListener(event: "error", listener: (err: Error) => void): this;
         prependListener(event: "lookup", listener: (err: Error, address: string, family: string | number, host: string) => void): this;
+        prependListener(event: "ready", listener: () => void): this;
         prependListener(event: "timeout", listener: () => void): this;
 
         prependOnceListener(event: string, listener: (...args: any[]) => void): this;
@@ -165,6 +170,7 @@
         prependOnceListener(event: "end", listener: () => void): this;
         prependOnceListener(event: "error", listener: (err: Error) => void): this;
         prependOnceListener(event: "lookup", listener: (err: Error, address: string, family: string | number, host: string) => void): this;
+        prependOnceListener(event: "ready", listener: () => void): this;
         prependOnceListener(event: "timeout", listener: () => void): this;
     }
 
diff --git a/node_modules/socket.io/node_modules/@types/node/package.json b/node_modules/socket.io/node_modules/@types/node/package.json
index 0f4ba20..4430acd 100755
--- a/node_modules/socket.io/node_modules/@types/node/package.json
+++ b/node_modules/socket.io/node_modules/@types/node/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@types/node",
-  "version": "14.17.6",
+  "version": "14.17.15",
   "description": "TypeScript definitions for Node.js",
   "homepage": "https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/node",
   "license": "MIT",
@@ -218,13 +218,6 @@
   ],
   "main": "",
   "types": "index.d.ts",
-  "typesVersions": {
-    "<=3.6": {
-      "*": [
-        "ts3.6/*"
-      ]
-    }
-  },
   "repository": {
     "type": "git",
     "url": "https://github.com/DefinitelyTyped/DefinitelyTyped.git",
@@ -232,6 +225,6 @@
   },
   "scripts": {},
   "dependencies": {},
-  "typesPublisherContentHash": "b15faea838f36d71d94beffebbfdb5e348698036a62d69d39fbbd53a822be6c9",
-  "typeScriptVersion": "3.6"
+  "typesPublisherContentHash": "cc6eb5a4ee285b4918af508cea3ca63abdb77c14ad6f8cfebcfabc5dc714aa00",
+  "typeScriptVersion": "3.7"
 }
diff --git a/node_modules/socket.io/node_modules/@types/node/process.d.ts b/node_modules/socket.io/node_modules/@types/node/process.d.ts
index b729bb5..ef201b4 100755
--- a/node_modules/socket.io/node_modules/@types/node/process.d.ts
+++ b/node_modules/socket.io/node_modules/@types/node/process.d.ts
@@ -60,13 +60,14 @@
                 "SIGSTOP" | "SIGSYS" | "SIGTERM" | "SIGTRAP" | "SIGTSTP" | "SIGTTIN" | "SIGTTOU" | "SIGUNUSED" | "SIGURG" |
                 "SIGUSR1" | "SIGUSR2" | "SIGVTALRM" | "SIGWINCH" | "SIGXCPU" | "SIGXFSZ" | "SIGBREAK" | "SIGLOST" | "SIGINFO";
 
+            type UncaughtExceptionOrigin = 'uncaughtException' | 'unhandledRejection';
             type MultipleResolveType = 'resolve' | 'reject';
 
             type BeforeExitListener = (code: number) => void;
             type DisconnectListener = () => void;
             type ExitListener = (code: number) => void;
             type RejectionHandledListener = (promise: Promise<any>) => void;
-            type UncaughtExceptionListener = (error: Error) => void;
+            type UncaughtExceptionListener = (error: Error, origin: UncaughtExceptionOrigin) => void;
             type UnhandledRejectionListener = (reason: {} | null | undefined, promise: Promise<any>) => void;
             type WarningListener = (warning: Error) => void;
             type MessageListener = (message: any, sendHandle: any) => void;
diff --git a/node_modules/socket.io/node_modules/@types/node/stream.d.ts b/node_modules/socket.io/node_modules/@types/node/stream.d.ts
index cc5c31d..083bc2f 100755
--- a/node_modules/socket.io/node_modules/@types/node/stream.d.ts
+++ b/node_modules/socket.io/node_modules/@types/node/stream.d.ts
@@ -251,6 +251,7 @@
             readonly writableLength: number;
             readonly writableObjectMode: boolean;
             readonly writableCorked: number;
+            allowHalfOpen: boolean;
             constructor(opts?: DuplexOptions);
             _write(chunk: any, encoding: BufferEncoding, callback: (error?: Error | null) => void): void;
             _writev?(chunks: Array<{ chunk: any, encoding: BufferEncoding }>, callback: (error?: Error | null) => void): void;
diff --git a/node_modules/socket.io/node_modules/@types/node/tls.d.ts b/node_modules/socket.io/node_modules/@types/node/tls.d.ts
index e7aadba..8e29da3 100755
--- a/node_modules/socket.io/node_modules/@types/node/tls.d.ts
+++ b/node_modules/socket.io/node_modules/@types/node/tls.d.ts
@@ -150,9 +150,10 @@
 
         /**
          * String containing the selected ALPN protocol.
-         * When ALPN has no selected protocol, tlsSocket.alpnProtocol equals false.
+         * Before a handshake has completed, this value is always null.
+         * When a handshake is completed but not ALPN protocol was selected, tlsSocket.alpnProtocol equals false.
          */
-        alpnProtocol?: string | undefined;
+        alpnProtocol: string | false | null;
 
         /**
          * Returns an object representing the local certificate. The returned
diff --git a/node_modules/socket.io/node_modules/@types/node/ts3.6/assert.d.ts b/node_modules/socket.io/node_modules/@types/node/ts3.6/assert.d.ts
deleted file mode 100755
index 37e24f5..0000000
--- a/node_modules/socket.io/node_modules/@types/node/ts3.6/assert.d.ts
+++ /dev/null
@@ -1,98 +0,0 @@
-declare module 'assert' {
-    /** An alias of `assert.ok()`. */
-    function assert(value: any, message?: string | Error): void;
-    namespace assert {
-        class AssertionError extends Error {
-            actual: any;
-            expected: any;
-            operator: string;
-            generatedMessage: boolean;
-            code: 'ERR_ASSERTION';
-
-            constructor(options?: {
-                /** If provided, the error message is set to this value. */
-                message?: string;
-                /** The `actual` property on the error instance. */
-                actual?: any;
-                /** The `expected` property on the error instance. */
-                expected?: any;
-                /** The `operator` property on the error instance. */
-                operator?: string;
-                /** If provided, the generated stack trace omits frames before this function. */
-                // tslint:disable-next-line:ban-types
-                stackStartFn?: Function;
-            });
-        }
-
-        class CallTracker {
-            calls(exact?: number): () => void;
-            calls<Func extends (...args: any[]) => any>(fn?: Func, exact?: number): Func;
-            report(): CallTrackerReportInformation[];
-            verify(): void;
-        }
-        interface CallTrackerReportInformation {
-            message: string;
-            /** The actual number of times the function was called. */
-            actual: number;
-            /** The number of times the function was expected to be called. */
-            expected: number;
-            /** The name of the function that is wrapped. */
-            operator: string;
-            /** A stack trace of the function. */
-            stack: object;
-        }
-
-        type AssertPredicate = RegExp | (new () => object) | ((thrown: any) => boolean) | object | Error;
-
-        function fail(message?: string | Error): never;
-        /** @deprecated since v10.0.0 - use fail([message]) or other assert functions instead. */
-        function fail(
-            actual: any,
-            expected: any,
-            message?: string | Error,
-            operator?: string,
-            // tslint:disable-next-line:ban-types
-            stackStartFn?: Function,
-        ): never;
-        function ok(value: any, message?: string | Error): void;
-        /** @deprecated since v9.9.0 - use strictEqual() instead. */
-        function equal(actual: any, expected: any, message?: string | Error): void;
-        /** @deprecated since v9.9.0 - use notStrictEqual() instead. */
-        function notEqual(actual: any, expected: any, message?: string | Error): void;
-        /** @deprecated since v9.9.0 - use deepStrictEqual() instead. */
-        function deepEqual(actual: any, expected: any, message?: string | Error): void;
-        /** @deprecated since v9.9.0 - use notDeepStrictEqual() instead. */
-        function notDeepEqual(actual: any, expected: any, message?: string | Error): void;
-        function strictEqual(actual: any, expected: any, message?: string | Error): void;
-        function notStrictEqual(actual: any, expected: any, message?: string | Error): void;
-        function deepStrictEqual(actual: any, expected: any, message?: string | Error): void;
-        function notDeepStrictEqual(actual: any, expected: any, message?: string | Error): void;
-
-        function throws(block: () => any, message?: string | Error): void;
-        function throws(block: () => any, error: AssertPredicate, message?: string | Error): void;
-        function doesNotThrow(block: () => any, message?: string | Error): void;
-        function doesNotThrow(block: () => any, error: AssertPredicate, message?: string | Error): void;
-
-        function ifError(value: any): void;
-
-        function rejects(block: (() => Promise<any>) | Promise<any>, message?: string | Error): Promise<void>;
-        function rejects(
-            block: (() => Promise<any>) | Promise<any>,
-            error: AssertPredicate,
-            message?: string | Error,
-        ): Promise<void>;
-        function doesNotReject(block: (() => Promise<any>) | Promise<any>, message?: string | Error): Promise<void>;
-        function doesNotReject(
-            block: (() => Promise<any>) | Promise<any>,
-            error: AssertPredicate,
-            message?: string | Error,
-        ): Promise<void>;
-
-        function match(value: string, regExp: RegExp, message?: string | Error): void;
-        function doesNotMatch(value: string, regExp: RegExp, message?: string | Error): void;
-
-        const strict: typeof assert;
-    }
-
-    export = assert;
-}
diff --git a/node_modules/socket.io/node_modules/@types/node/ts3.6/base.d.ts b/node_modules/socket.io/node_modules/@types/node/ts3.6/base.d.ts
deleted file mode 100755
index b94e69e..0000000
--- a/node_modules/socket.io/node_modules/@types/node/ts3.6/base.d.ts
+++ /dev/null
@@ -1,61 +0,0 @@
-// NOTE: These definitions support NodeJS and TypeScript 3.6 and earlier.
-
-// NOTE: TypeScript version-specific augmentations can be found in the following paths:
-//          - ~/base.d.ts         - Shared definitions common to all TypeScript versions
-//          - ~/index.d.ts        - Definitions specific to TypeScript 3.7 and above
-//          - ~/ts3.5/base.d.ts   - Definitions specific to TypeScript 3.6 and earlier
-//          - ~/ts3.5/index.d.ts  - Definitions specific to TypeScript 3.6 and earlier with assert pulled in
-
-// Reference required types from the default lib:
-/// <reference lib="es2018" />
-/// <reference lib="esnext.asynciterable" />
-/// <reference lib="esnext.intl" />
-/// <reference lib="esnext.bigint" />
-
-// Base definitions for all NodeJS modules that are not specific to any version of TypeScript:
-/// <reference path="../globals.d.ts" />
-/// <reference path="../async_hooks.d.ts" />
-/// <reference path="../buffer.d.ts" />
-/// <reference path="../child_process.d.ts" />
-/// <reference path="../cluster.d.ts" />
-/// <reference path="../console.d.ts" />
-/// <reference path="../constants.d.ts" />
-/// <reference path="../crypto.d.ts" />
-/// <reference path="../dgram.d.ts" />
-/// <reference path="../dns.d.ts" />
-/// <reference path="../domain.d.ts" />
-/// <reference path="../events.d.ts" />
-/// <reference path="../fs.d.ts" />
-/// <reference path="../fs/promises.d.ts" />
-/// <reference path="../http.d.ts" />
-/// <reference path="../http2.d.ts" />
-/// <reference path="../https.d.ts" />
-/// <reference path="../inspector.d.ts" />
-/// <reference path="../module.d.ts" />
-/// <reference path="../net.d.ts" />
-/// <reference path="../os.d.ts" />
-/// <reference path="../path.d.ts" />
-/// <reference path="../perf_hooks.d.ts" />
-/// <reference path="../process.d.ts" />
-/// <reference path="../punycode.d.ts" />
-/// <reference path="../querystring.d.ts" />
-/// <reference path="../readline.d.ts" />
-/// <reference path="../repl.d.ts" />
-/// <reference path="../stream.d.ts" />
-/// <reference path="../string_decoder.d.ts" />
-/// <reference path="../timers.d.ts" />
-/// <reference path="../tls.d.ts" />
-/// <reference path="../trace_events.d.ts" />
-/// <reference path="../tty.d.ts" />
-/// <reference path="../url.d.ts" />
-/// <reference path="../util.d.ts" />
-/// <reference path="../v8.d.ts" />
-/// <reference path="../vm.d.ts" />
-/// <reference path="../worker_threads.d.ts" />
-/// <reference path="../zlib.d.ts" />
-
-// TypeScript 3.5-specific augmentations:
-/// <reference path="../globals.global.d.ts" />
-
-// TypeScript 3.5-specific augmentations:
-/// <reference path="../wasi.d.ts" />
diff --git a/node_modules/socket.io/node_modules/@types/node/ts3.6/index.d.ts b/node_modules/socket.io/node_modules/@types/node/ts3.6/index.d.ts
deleted file mode 100755
index e34d7e5..0000000
--- a/node_modules/socket.io/node_modules/@types/node/ts3.6/index.d.ts
+++ /dev/null
@@ -1,7 +0,0 @@
-// NOTE: These definitions support NodeJS and TypeScript 3.5 - 3.6.
-// This is required to enable typing assert in ts3.7 without causing errors
-// Typically type modifications should be made in base.d.ts instead of here
-
-/// <reference path="base.d.ts" />
-
-/// <reference path="assert.d.ts" />
diff --git a/node_modules/stylelint/node_modules/chalk/package.json b/node_modules/stylelint/node_modules/chalk/package.json
index ea99b08..5e60306 100644
--- a/node_modules/stylelint/node_modules/chalk/package.json
+++ b/node_modules/stylelint/node_modules/chalk/package.json
@@ -1,6 +1,6 @@
 {
   "name": "chalk",
-  "version": "4.1.1",
+  "version": "4.1.2",
   "description": "Terminal string styling done right",
   "license": "MIT",
   "repository": "chalk/chalk",
diff --git a/node_modules/stylelint/node_modules/chalk/readme.md b/node_modules/stylelint/node_modules/chalk/readme.md
index 8512592..a055d21 100644
--- a/node_modules/stylelint/node_modules/chalk/readme.md
+++ b/node_modules/stylelint/node_modules/chalk/readme.md
@@ -33,7 +33,7 @@
 		<br>
 		<br>
 		<a href="https://retool.com/?utm_campaign=sindresorhus">
-			<img src="https://sindresorhus.com/assets/thanks/retool-logo.svg" width="210"/>
+			<img src="https://sindresorhus.com/assets/thanks/retool-logo.svg" width="230"/>
 		</a>
 		<br>
 		<br>
@@ -48,6 +48,12 @@
 				<span>and avoiding access controls. Keep your team and servers in sync with Doppler.</span>
 			</div>
 		</a>
+		<br>
+		<a href="https://uibakery.io/?utm_source=chalk&utm_medium=sponsor&utm_campaign=github">
+			<div>
+				<img src="https://sindresorhus.com/assets/thanks/uibakery-logo.jpg" width="270" alt="UI Bakery">
+			</div>
+		</a>
 	</p>
 </div>
 
diff --git a/node_modules/svgo/node_modules/chalk/package.json b/node_modules/svgo/node_modules/chalk/package.json
index ea99b08..5e60306 100644
--- a/node_modules/svgo/node_modules/chalk/package.json
+++ b/node_modules/svgo/node_modules/chalk/package.json
@@ -1,6 +1,6 @@
 {
   "name": "chalk",
-  "version": "4.1.1",
+  "version": "4.1.2",
   "description": "Terminal string styling done right",
   "license": "MIT",
   "repository": "chalk/chalk",
diff --git a/node_modules/svgo/node_modules/chalk/readme.md b/node_modules/svgo/node_modules/chalk/readme.md
index 8512592..a055d21 100644
--- a/node_modules/svgo/node_modules/chalk/readme.md
+++ b/node_modules/svgo/node_modules/chalk/readme.md
@@ -33,7 +33,7 @@
 		<br>
 		<br>
 		<a href="https://retool.com/?utm_campaign=sindresorhus">
-			<img src="https://sindresorhus.com/assets/thanks/retool-logo.svg" width="210"/>
+			<img src="https://sindresorhus.com/assets/thanks/retool-logo.svg" width="230"/>
 		</a>
 		<br>
 		<br>
@@ -48,6 +48,12 @@
 				<span>and avoiding access controls. Keep your team and servers in sync with Doppler.</span>
 			</div>
 		</a>
+		<br>
+		<a href="https://uibakery.io/?utm_source=chalk&utm_medium=sponsor&utm_campaign=github">
+			<div>
+				<img src="https://sindresorhus.com/assets/thanks/uibakery-logo.jpg" width="270" alt="UI Bakery">
+			</div>
+		</a>
 	</p>
 </div>
 
diff --git a/node_modules/typescript/README.md b/node_modules/typescript/README.md
index f21b708..4908b03 100644
--- a/node_modules/typescript/README.md
+++ b/node_modules/typescript/README.md
@@ -26,15 +26,15 @@
 

 ## Contribute

 

-There are many ways to [contribute](https://github.com/microsoft/TypeScript/blob/master/CONTRIBUTING.md) to TypeScript.

+There are many ways to [contribute](https://github.com/microsoft/TypeScript/blob/main/CONTRIBUTING.md) to TypeScript.

 * [Submit bugs](https://github.com/microsoft/TypeScript/issues) and help us verify fixes as they are checked in.

 * Review the [source code changes](https://github.com/microsoft/TypeScript/pulls).

 * Engage with other TypeScript users and developers on [StackOverflow](https://stackoverflow.com/questions/tagged/typescript).

 * Help each other in the [TypeScript Community Discord](https://discord.gg/typescript).

 * Join the [#typescript](https://twitter.com/search?q=%23TypeScript) discussion on Twitter.

-* [Contribute bug fixes](https://github.com/microsoft/TypeScript/blob/master/CONTRIBUTING.md).

-* Read the archived language specification ([docx](https://github.com/microsoft/TypeScript/blob/master/doc/TypeScript%20Language%20Specification%20-%20ARCHIVED.docx?raw=true),

- [pdf](https://github.com/microsoft/TypeScript/blob/master/doc/TypeScript%20Language%20Specification%20-%20ARCHIVED.pdf?raw=true), [md](https://github.com/microsoft/TypeScript/blob/master/doc/spec-ARCHIVED.md)).

+* [Contribute bug fixes](https://github.com/microsoft/TypeScript/blob/main/CONTRIBUTING.md).

+* Read the archived language specification ([docx](https://github.com/microsoft/TypeScript/blob/main/doc/TypeScript%20Language%20Specification%20-%20ARCHIVED.docx?raw=true),

+ [pdf](https://github.com/microsoft/TypeScript/blob/main/doc/TypeScript%20Language%20Specification%20-%20ARCHIVED.pdf?raw=true), [md](https://github.com/microsoft/TypeScript/blob/main/doc/spec-ARCHIVED.md)).

 

 This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/). For more information see

 the [Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) or contact [opencode@microsoft.com](mailto:opencode@microsoft.com)

diff --git a/node_modules/typescript/lib/cs/diagnosticMessages.generated.json b/node_modules/typescript/lib/cs/diagnosticMessages.generated.json
index b30f628..473322e 100644
--- a/node_modules/typescript/lib/cs/diagnosticMessages.generated.json
+++ b/node_modules/typescript/lib/cs/diagnosticMessages.generated.json
@@ -1,4 +1,5 @@
 {
+  "ALL_COMPILER_OPTIONS_6917": "VŠECHNY MOŽNOSTI KOMPILÁTORU",
   "A_0_modifier_cannot_be_used_with_an_import_declaration_1079": "Modifikátor {0} nejde použít s deklarací import.",
   "A_0_modifier_cannot_be_used_with_an_interface_declaration_1045": "Modifikátor {0} nejde použít s deklarací interface.",
   "A_0_parameter_must_be_the_first_parameter_2680": "Parametr {0} musí být prvním parametrem.",
@@ -15,7 +16,7 @@
   "A_class_member_cannot_have_the_0_keyword_1248": "Člen třídy nemůže mít klíčové slovo {0}.",
   "A_comma_expression_is_not_allowed_in_a_computed_property_name_1171": "Výraz s čárkou není v názvu počítané vlastnosti povolený.",
   "A_computed_property_name_cannot_reference_a_type_parameter_from_its_containing_type_2467": "Název počítané vlastnosti nemůže odkazovat na parametr typu z jeho nadřazeného typu.",
-  "A_computed_property_name_in_a_class_property_declaration_must_refer_to_an_expression_whose_type_is_a_1166": "Název počítané vlastnosti v deklaraci vlastnosti třídy musí přímo odkazovat na výraz, jehož typ je literál nebo unique symbol.",
+  "A_computed_property_name_in_a_class_property_declaration_must_have_a_simple_literal_type_or_a_unique_1166": "Název počítané vlastnosti v deklaraci vlastnosti třídy musí mít jednoduchý typ literálu nebo typ unique symbol.",
   "A_computed_property_name_in_a_method_overload_must_refer_to_an_expression_whose_type_is_a_literal_ty_1168": "Název počítané vlastnosti v přetížené metodě musí odkazovat na výraz, jehož typ je literál nebo unique symbol.",
   "A_computed_property_name_in_a_type_literal_must_refer_to_an_expression_whose_type_is_a_literal_type__1170": "Název počítané vlastnosti v literálu typu musí odkazovat na výraz, jehož typ je literál nebo unique symbol.",
   "A_computed_property_name_in_an_ambient_context_must_refer_to_an_expression_whose_type_is_a_literal_t_1165": "Název počítané vlastnosti v ambientním kontextu musí odkazovat na výraz, jehož typ je literál nebo unique symbol.",
@@ -33,24 +34,25 @@
   "A_decorator_can_only_decorate_a_method_implementation_not_an_overload_1249": "Dekorátor může dekorovat jenom implementaci metody, ne přetížení.",
   "A_default_clause_cannot_appear_more_than_once_in_a_switch_statement_1113": "Klauzule default nemůže být v příkazu switch víc než jednou.",
   "A_default_export_can_only_be_used_in_an_ECMAScript_style_module_1319": "V modulu ve stylu ECMAScriptu se dá použít jenom výchozí export.",
+  "A_default_export_must_be_at_the_top_level_of_a_file_or_module_declaration_1258": "Výchozí export musí být na nejvyšší úrovni deklarace souboru nebo modulu.",
   "A_definite_assignment_assertion_is_not_permitted_in_this_context_1255": "Určitý kontrolní výraz přiřazení '!' není v tomto kontextu povolený.",
   "A_destructuring_declaration_must_have_an_initializer_1182": "Destrukturační deklarace musí obsahovat inicializátor.",
-  "A_dynamic_import_call_in_ES5_SlashES3_requires_the_Promise_constructor_Make_sure_you_have_a_declarat_2712": "Volání dynamického importu v ES5/ES3 vyžaduje konstruktor Promise. Ujistěte se, že máte deklaraci konstruktoru Promise, nebo do možnosti --lib přidejte ES2015.",
-  "A_dynamic_import_call_returns_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_include_ES20_2711": "Volání dynamického importu vrací Promise. Ujistěte se, že pro ni máte deklaraci, nebo do možnosti --lib přidejte ES2015.",
+  "A_dynamic_import_call_in_ES5_SlashES3_requires_the_Promise_constructor_Make_sure_you_have_a_declarat_2712": "Volání dynamického importu v ES5/ES3 vyžaduje konstruktor ‚Promise‘. Ujistěte se, že máte deklaraci konstruktoru ‚Promise‘, nebo do možnosti ‚--lib‘ přidejte ‚ES2015‘.",
+  "A_dynamic_import_call_returns_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_include_ES20_2711": "Volání dynamického importu vrací hodnotu ‚Promise‘. Ujistěte se, že pro ni máte deklaraci, nebo do možnosti ‚--lib‘ přidejte ‚ES2015‘.",
   "A_file_cannot_have_a_reference_to_itself_1006": "Soubor nemůže odkazovat sám na sebe.",
-  "A_for_await_of_statement_is_only_allowed_within_an_async_function_or_async_generator_1103": "Příkaz for-await-of se povoluje jenom v asynchronní funkci nebo asynchronním generátoru.",
   "A_function_returning_never_cannot_have_a_reachable_end_point_2534": "Funkce, která vrací hodnotu never, nemůže mít dosažitelný koncový bod.",
   "A_function_that_is_called_with_the_new_keyword_cannot_have_a_this_type_that_is_void_2679": "Funkce volaná klíčovým slovem new nemůže mít typ this, který je void.",
   "A_function_whose_declared_type_is_neither_void_nor_any_must_return_a_value_2355": "Funkce, jejíž deklarovaný typ není void ani any, musí vracet hodnotu.",
   "A_generator_cannot_have_a_void_type_annotation_2505": "Generátor nemůže mít anotaci typu void.",
   "A_get_accessor_cannot_have_parameters_1054": "Přístupový objekt get nemůže obsahovat parametry.",
+  "A_get_accessor_must_be_at_least_as_accessible_as_the_setter_2808": "Přístupový objekt get musí být alespoň tak přístupný jako metoda setter.",
   "A_get_accessor_must_return_a_value_2378": "Přístupový objekt get musí vracet hodnotu.",
   "A_label_is_not_allowed_here_1344": "Popisek se tady nepovoluje.",
   "A_labeled_tuple_element_is_declared_as_optional_with_a_question_mark_after_the_name_and_before_the_c_5086": "Element popsané řazené kolekce členů se deklaroval jako nepovinný pomocí otazníku za názvem a před dvojtečkou, nikoli za typem.",
   "A_labeled_tuple_element_is_declared_as_rest_with_a_before_the_name_rather_than_before_the_type_5087": "Element popsané řazené kolekce členů se deklaroval jako zbytek s třemi tečkami (...) před názvem, nikoli před typem.",
   "A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_memb_2651": "Inicializátor členu v deklaraci výčtu nemůže odkazovat na členy deklarované až po výčtu, a to ani členy definované v jiných výčtech.",
-  "A_method_cannot_be_named_with_a_private_identifier_18022": "Metodu není možné pojmenovat privátním identifikátorem.",
   "A_mixin_class_must_have_a_constructor_with_a_single_rest_parameter_of_type_any_2545": "Třída mixin musí mít konstruktor s jediným parametrem rest typu any[].",
+  "A_mixin_class_that_extends_from_a_type_variable_containing_an_abstract_construct_signature_must_also_2797": "Třída mixin, která rozšiřuje proměnnou typu obsahující signaturu abstraktního konstruktu, musí být také deklarovaná jako abstract.",
   "A_module_cannot_have_multiple_default_exports_2528": "Modul nemůže mít víc výchozích exportů.",
   "A_namespace_declaration_cannot_be_in_a_different_file_from_a_class_or_function_with_which_it_is_merg_2433": "Deklarace oboru názvů nemůže být v jiném souboru než třída nebo funkce, se kterou se slučuje.",
   "A_namespace_declaration_cannot_be_located_prior_to_a_class_or_function_with_which_it_is_merged_2434": "Deklarace oboru názvů nemůže být umístěná před třídou nebo funkcí, se kterou se slučuje.",
@@ -71,10 +73,10 @@
   "A_required_element_cannot_follow_an_optional_element_1257": "Povinný element nemůže následovat po nepovinném elementu.",
   "A_required_parameter_cannot_follow_an_optional_parameter_1016": "Povinný parametr nemůže následovat po nepovinném parametru.",
   "A_rest_element_cannot_contain_a_binding_pattern_2501": "Element rest nemůže obsahovat vzor vazby.",
+  "A_rest_element_cannot_follow_another_rest_element_1265": "Element rest nemůže následovat za jiným elementem rest.",
   "A_rest_element_cannot_have_a_property_name_2566": "Element rest nemůže mít název vlastnosti.",
   "A_rest_element_cannot_have_an_initializer_1186": "Element rest nemůže obsahovat inicializátor.",
   "A_rest_element_must_be_last_in_a_destructuring_pattern_2462": "Element rest musí být ve vzoru destrukturalizace poslední.",
-  "A_rest_element_must_be_last_in_a_tuple_type_1256": "Element rest musí být poslední v typu řazené kolekce členů.",
   "A_rest_element_type_must_be_an_array_type_2574": "Typ elementu rest musí být typu pole.",
   "A_rest_parameter_cannot_be_optional_1047": "Parametr rest nemůže být nepovinný.",
   "A_rest_parameter_cannot_have_an_initializer_1048": "Parametr rest nemůže obsahovat inicializátor.",
@@ -82,6 +84,7 @@
   "A_rest_parameter_must_be_of_an_array_type_2370": "Parametr rest musí být typu pole.",
   "A_rest_parameter_or_binding_pattern_may_not_have_a_trailing_comma_1013": "Parametr rest nebo vzor vazby nesmí mít na konci čárku.",
   "A_return_statement_can_only_be_used_within_a_function_body_1108": "Příkaz return se dá použít jenom v těle funkce.",
+  "A_return_statement_cannot_be_used_inside_a_class_static_block_18041": "Příkaz return nejde použít uvnitř statického bloku třídy.",
   "A_series_of_entries_which_re_map_imports_to_lookup_locations_relative_to_the_baseUrl_6167": "Řada záznamů, které mění mapování importů do umístění vyhledávání relativních vůči baseUrl.",
   "A_set_accessor_cannot_have_a_return_type_annotation_1095": "Přístupový objekt set nemůže obsahovat anotaci návratového typu.",
   "A_set_accessor_cannot_have_an_optional_parameter_1051": "Přístupový objekt set nemůže obsahovat nepovinný parametr.",
@@ -89,6 +92,7 @@
   "A_set_accessor_must_have_exactly_one_parameter_1049": "Přístupový objekt set musí obsahovat přesně jeden parametr.",
   "A_set_accessor_parameter_cannot_have_an_initializer_1052": "Parametr přístupového objektu set nemůže obsahovat inicializátor.",
   "A_signature_with_an_implementation_cannot_use_a_string_literal_type_2381": "Podpis s implementací nemůže používat typ řetězcového literálu.",
+  "A_spread_argument_must_either_have_a_tuple_type_or_be_passed_to_a_rest_parameter_2556": "Argument rozprostření musí mít buď typ řazené kolekce členů, nebo musí být předán do parametru rest.",
   "A_super_call_must_be_the_first_statement_in_the_constructor_when_a_class_contains_initialized_proper_2376": "Pokud třída obsahuje inicializované vlastnosti, vlastnosti parametru nebo privátní identifikátory, musí být první příkaz v konstruktoru volání super.",
   "A_this_based_type_guard_is_not_compatible_with_a_parameter_based_type_guard_2518": "Ochrana typu this není kompatibilní s ochranou typu založeného na parametru.",
   "A_this_type_is_available_only_in_a_non_static_member_of_a_class_or_interface_2526": "Typ this je k dispozici jenom v nestatických členech třídy nebo rozhraní.",
@@ -114,8 +118,11 @@
   "Add_a_return_statement_95111": "Přidat příkaz return",
   "Add_all_missing_async_modifiers_95041": "Přidat všechny chybějící modifikátory async",
   "Add_all_missing_call_parentheses_95068": "Přidat všechny chybějící závorky volání",
+  "Add_all_missing_function_declarations_95157": "Přidat všechny chybějící deklarace funkcí",
   "Add_all_missing_imports_95064": "Přidat všechny chybějící importy",
   "Add_all_missing_members_95022": "Přidat všechny chybějící členy",
+  "Add_all_missing_override_modifiers_95162": "Přidat všechny chybějící modifikátory override",
+  "Add_all_missing_properties_95166": "Přidat všechny chybějící importy",
   "Add_all_missing_return_statement_95114": "Přidat všechny chybějící příkazy return",
   "Add_all_missing_super_calls_95039": "Přidat všechna chybějící volání pomocí super",
   "Add_async_modifier_to_containing_function_90029": "Přidat modifikátor async do obsahující funkce",
@@ -135,18 +142,22 @@
   "Add_initializers_to_all_uninitialized_properties_95027": "Přidat inicializátory do všech neinicializovaných vlastností",
   "Add_missing_call_parentheses_95067": "Přidat chybějící závorky volání",
   "Add_missing_enum_member_0_95063": "Přidat chybějící člen výčtu {0}",
+  "Add_missing_function_declaration_0_95156": "Přidat chybějící deklaraci funkce {0}",
   "Add_missing_new_operator_to_all_calls_95072": "Přidat chybějící operátor new ke všem voláním",
   "Add_missing_new_operator_to_call_95071": "Přidat chybějící operátor new k volání",
+  "Add_missing_properties_95165": "Přidat chybějící vlastnosti",
   "Add_missing_super_call_90001": "Přidat chybějící volání metody super()",
   "Add_missing_typeof_95052": "Přidat chybějící typeof",
   "Add_names_to_all_parameters_without_names_95073": "Přidat názvy do všech parametrů bez názvů",
   "Add_or_remove_braces_in_an_arrow_function_95058": "Přidat nebo odebrat složené závorky ve funkci šipky",
+  "Add_override_modifier_95160": "Přidat modifikátor override",
   "Add_parameter_name_90034": "Přidat název parametru",
   "Add_qualifier_to_all_unresolved_variables_matching_a_member_name_95037": "Přidat kvalifikátor do všech nerozpoznaných proměnných odpovídajících názvu členu",
   "Add_this_parameter_95104": "Přidat parametr this",
   "Add_this_tag_95103": "Přidat značku @this",
   "Add_to_all_uncalled_decorators_95044": "Přidat () do všech nevolaných dekorátorů",
   "Add_ts_ignore_to_all_error_messages_95042": "Přidat @ts-ignore do všech chybových zpráv",
+  "Add_undefined_to_a_type_when_accessed_using_an_index_6674": "Pokud k přístupu používáte index, přidejte k typu „undefined“.",
   "Add_undefined_type_to_all_uninitialized_properties_95029": "Přidat nedefinovaný typ do všech neinicializovaných vlastností",
   "Add_undefined_type_to_property_0_95018": "Přidat typ undefined k vlastnosti {0}",
   "Add_unknown_conversion_for_non_overlapping_types_95069": "Přidat převod unknown pro typy, které se nepřekrývají",
@@ -154,8 +165,6 @@
   "Add_void_to_Promise_resolved_without_a_value_95143": "Přidat void k objektu Promise vyřešenému bez hodnoty",
   "Add_void_to_all_Promises_resolved_without_a_value_95144": "Přidat void ke všem objektům Promise vyřešeným bez hodnoty",
   "Adding_a_tsconfig_json_file_will_help_organize_projects_that_contain_both_TypeScript_and_JavaScript__5068": "Přidání souboru tsconfig.json vám pomůže uspořádat projekty, které obsahují jak soubory TypeScript, tak soubory JavaScript. Další informace najdete na adrese https://aka.ms/tsconfig.",
-  "Additional_Checks_6176": "Další kontroly",
-  "Advanced_Options_6178": "Upřesnit možnosti",
   "All_declarations_of_0_must_have_identical_modifiers_2687": "Všechny deklarace {0} musí mít stejné modifikátory.",
   "All_declarations_of_0_must_have_identical_type_parameters_2428": "Všechny deklarace {0} musí mít stejné parametry typu.",
   "All_declarations_of_an_abstract_method_must_be_consecutive_2516": "Všechny deklarace abstraktní metody musí jít po sobě.",
@@ -163,34 +172,38 @@
   "All_imports_in_import_declaration_are_unused_6192": "Žádné importy z deklarace importu se nepoužívají.",
   "All_type_parameters_are_unused_6205": "Všechny parametry typů jsou nevyužité.",
   "All_variables_are_unused_6199": "Žádná z proměnných se nepoužívá.",
-  "Allow_accessing_UMD_globals_from_modules_95076": "Povolit přístup ke globálním proměnným UMD z modulů",
+  "Allow_JavaScript_files_to_be_a_part_of_your_program_Use_the_checkJS_option_to_get_errors_from_these__6600": "Povolit, aby soubory JavaScriptu byly součástí vašeho programu. K získání informací o chybách v těchto souborech použijte možnost „checkJS“.",
+  "Allow_accessing_UMD_globals_from_modules_6602": "Povolit přístup ke globálním proměnným UMD z modulů",
   "Allow_default_imports_from_modules_with_no_default_export_This_does_not_affect_code_emit_just_typech_6011": "Povolte výchozí importy z modulů bez výchozího exportu. Nebude to mít vliv na generování kódu, jenom na kontrolu typů.",
+  "Allow_import_x_from_y_when_a_module_doesn_t_have_a_default_export_6601": "Pokud modul nemá výchozí export, povolte import X z Y.",
+  "Allow_importing_helper_functions_from_tslib_once_per_project_instead_of_including_them_per_file_6639": "Povolte import pomocných funkcí z knihovny tslib jednou za celý projekt místo jejich zahrnutí do každého souboru.",
   "Allow_javascript_files_to_be_compiled_6102": "Povolí kompilaci souborů javascript.",
+  "Allow_multiple_folders_to_be_treated_as_one_when_resolving_modules_6691": "Při řešení modulů povolit, aby se s více složkami zacházelo jako s jednou.",
   "Already_included_file_name_0_differs_from_file_name_1_only_in_casing_1261": "Název souboru {0}, který se už zahrnul, se od názvu souboru {1} liší jen ve velkých a malých písmenech.",
   "Ambient_module_declaration_cannot_specify_relative_module_name_2436": "Deklarace ambientního modulu nemůže uvádět relativní název modulu.",
   "Ambient_modules_cannot_be_nested_in_other_modules_or_namespaces_2435": "Ambientní moduly se nedají zanořovat do jiných modulů nebo oborů názvů.",
   "An_AMD_module_cannot_have_multiple_name_assignments_2458": "Modul AMD nemůže obsahovat víc přiřazení názvů.",
   "An_abstract_accessor_cannot_have_an_implementation_1318": "Abstraktní přístupový objekt nemůže mít implementaci.",
   "An_accessibility_modifier_cannot_be_used_with_a_private_identifier_18010": "Modifikátor přístupnosti se nedá použít spolu s privátním identifikátorem.",
-  "An_accessor_cannot_be_named_with_a_private_identifier_18023": "Přístupový objekt není možné pojmenovat privátním identifikátorem.",
   "An_accessor_cannot_have_type_parameters_1094": "Přístupový objekt nemůže obsahovat parametry typu.",
   "An_ambient_module_declaration_is_only_allowed_at_the_top_level_in_a_file_1234": "Deklarace ambientního modulu je povolená jenom na nejvyšší úrovni v souboru.",
   "An_argument_for_0_was_not_provided_6210": "Neposkytl se argument pro {0}.",
   "An_argument_matching_this_binding_pattern_was_not_provided_6211": "Neposkytl se argument, který by odpovídal tomuto vzoru vazby.",
   "An_arithmetic_operand_must_be_of_type_any_number_bigint_or_an_enum_type_2356": "Aritmetický operand musí být typu any, number, bigint nebo typu výčtu.",
   "An_arrow_function_cannot_have_a_this_parameter_2730": "Funkce šipky nemůže mít parametr this.",
-  "An_async_function_or_method_in_ES5_SlashES3_requires_the_Promise_constructor_Make_sure_you_have_a_de_2705": "Asynchronní funkce nebo metoda v ES5/ES3 vyžaduje konstruktor Promise. Ujistěte se, že máte deklaraci konstruktoru Promise, nebo do možnosti --lib přidejte ES2015.",
+  "An_async_function_or_method_in_ES5_SlashES3_requires_the_Promise_constructor_Make_sure_you_have_a_de_2705": "Asynchronní funkce nebo metoda v ES5/ES3 vyžaduje konstruktor ‚Promise‘. Ujistěte se, že máte deklaraci konstruktoru ‚Promise‘, nebo do možnosti ‚--lib‘ přidejte ‚ES2015‘.",
   "An_async_function_or_method_must_have_a_valid_awaitable_return_type_1057": "Funkce nebo metoda async musí mít platný návratový typ pro await.",
-  "An_async_function_or_method_must_return_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_in_2697": "Asynchronní funkce nebo metoda musí vracet hodnotu příslibu. Přesvědčte se, že pro ni máte deklaraci, nebo zahrňte ES2015 do možnosti --lib.",
+  "An_async_function_or_method_must_return_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_in_2697": "Asynchronní funkce nebo metoda musí vracet hodnotu ‚Promise‘. Přesvědčte se, že pro ni máte deklaraci, nebo zahrňte ‚ES2015‘ do možnosti ‚--lib‘.",
   "An_async_iterator_must_have_a_next_method_2519": "Asynchronní iterátor musí mít metodu next().",
   "An_element_access_expression_should_take_an_argument_1011": "Výraz přístupu k elementu by měl přijímat argument.",
   "An_enum_member_cannot_be_named_with_a_private_identifier_18024": "Člen výčtu není možné pojmenovat privátním identifikátorem.",
   "An_enum_member_cannot_have_a_numeric_name_2452": "Člen výčtu nemůže mít číselný název.",
   "An_enum_member_name_must_be_followed_by_a_or_1357": "Za názvem členu výčtu musí následovat znak čárky (,), rovnítka (=) nebo pravé složené závorky (}).",
-  "An_export_assignment_can_only_be_used_in_a_module_1231": "Přiřazení exportu jde použít jenom v modulu.",
+  "An_expanded_version_of_this_information_showing_all_possible_compiler_options_6928": "Rozšířená verze těchto informací, zobrazující všechny možné možnosti kompilátoru",
   "An_export_assignment_cannot_be_used_in_a_module_with_other_exported_elements_2309": "Přiřazení exportu se nedá použít v modulu s jinými exportovanými elementy.",
   "An_export_assignment_cannot_be_used_in_a_namespace_1063": "Přiřazení exportu se nedá používat v oboru názvů.",
   "An_export_assignment_cannot_have_modifiers_1120": "Přiřazení exportu nemůže mít modifikátory.",
+  "An_export_assignment_must_be_at_the_top_level_of_a_file_or_module_declaration_1231": "Přiřazení exportu musí být na nejvyšší úrovni deklarace souboru nebo modulu.",
   "An_export_declaration_can_only_be_used_in_a_module_1233": "Deklarace exportu jde použít jenom v modulu.",
   "An_export_declaration_cannot_have_modifiers_1193": "Deklarace exportu nemůže mít modifikátory.",
   "An_expression_of_type_void_cannot_be_tested_for_truthiness_1345": "Není možné testovat pravdivost výrazu typu void.",
@@ -212,9 +225,8 @@
   "An_index_signature_parameter_cannot_have_an_accessibility_modifier_1018": "V parametru signatury indexu nemůže být modifikátor přístupnosti.",
   "An_index_signature_parameter_cannot_have_an_initializer_1020": "V parametru signatury indexu nemůže být inicializátor.",
   "An_index_signature_parameter_must_have_a_type_annotation_1022": "V parametru signatury indexu nemůže být anotace typu.",
-  "An_index_signature_parameter_type_cannot_be_a_type_alias_Consider_writing_0_Colon_1_Colon_2_instead_1336": "Typ parametru signatury indexu nemůže být alias typu. Místo toho zvažte toto zadání: [{0}: {1}]: {2}.",
-  "An_index_signature_parameter_type_cannot_be_a_union_type_Consider_using_a_mapped_object_type_instead_1337": "Typ parametru signatury indexu nemůže být typ sjednocení. Místo toho zvažte použití namapovaného typu objektu.",
-  "An_index_signature_parameter_type_must_be_either_string_or_number_1023": "Parametr signatury indexu musí být buď typu string, nebo number.",
+  "An_index_signature_parameter_type_cannot_be_a_literal_type_or_generic_type_Consider_using_a_mapped_o_1337": "Typ parametru signatury indexu nemůže být typ literálu nebo obecný typ. Místo toho zvažte použití namapovaného typu objektu.",
+  "An_index_signature_parameter_type_must_be_string_number_symbol_or_a_template_literal_type_1268": "Typ parametru signatury indexu musí být řetězec, číslo, symbol nebo typ literálu šablony.",
   "An_interface_can_only_extend_an_identifier_Slashqualified_name_with_optional_type_arguments_2499": "Rozhraní může rozšířit jenom identifikátor nebo kvalifikovaný název s volitelnými argumenty typu.",
   "An_interface_can_only_extend_an_object_type_or_intersection_of_object_types_with_statically_known_me_2312": "Rozhraní může rozšiřovat jen typ objektu nebo průsečík typů objektů se staticky známými členy.",
   "An_interface_property_cannot_have_an_initializer_1246": "Vlastnost rozhraní nemůže mít inicializátor.",
@@ -225,6 +237,7 @@
   "An_object_literal_cannot_have_property_and_accessor_with_the_same_name_1119": "Literál objektu nemůže obsahovat vlastnost a přístupový objekt se stejným názvem.",
   "An_object_member_cannot_be_declared_optional_1162": "Člen objektu nemůže být deklarovaný jako nepovinný.",
   "An_optional_chain_cannot_contain_private_identifiers_18030": "Nepovinný řetěz nemůže obsahovat privátní identifikátory.",
+  "An_optional_element_cannot_follow_a_rest_element_1266": "Element optional nemůže následovat za elementem rest.",
   "An_outer_value_of_this_is_shadowed_by_this_container_2738": "Tento kontejner zakrývá vnější hodnotu this.",
   "An_overload_signature_cannot_be_declared_as_a_generator_1222": "Signatura přetížení nemůže být deklarovaný jako generátor.",
   "An_unary_expression_with_the_0_operator_is_not_allowed_in_the_left_hand_side_of_an_exponentiation_ex_17006": "Unární výraz s operátorem {0} se na levé straně výrazu umocnění nepovoluje. Zvažte možnost uzavření výrazu do závorek.",
@@ -244,33 +257,47 @@
   "Augmentations_for_the_global_scope_can_only_be_directly_nested_in_external_modules_or_ambient_module_2669": "Rozšíření pro globální rozsah může být jenom přímo vnořené v externích modulech nebo deklaracích ambientního modulu.",
   "Augmentations_for_the_global_scope_should_have_declare_modifier_unless_they_appear_in_already_ambien_2670": "Rozšíření pro globální rozsah by měla mít modifikátor declare, pokud se neobjeví v kontextu, který je už ambientní.",
   "Auto_discovery_for_typings_is_enabled_in_project_0_Running_extra_resolution_pass_for_module_1_using__6140": "Automatické zjišťování pro psaní je povolené v projektu {0}. Spouští se speciální průchod řešení pro modul {1} prostřednictvím umístění mezipaměti {2}.",
+  "Await_expression_cannot_be_used_inside_a_class_static_block_18037": "Výraz Await nejde použít uvnitř statického bloku třídy.",
+  "BUILD_OPTIONS_6919": "MOŽNOSTI SESTAVENÍ",
+  "Backwards_Compatibility_6253": "Zpětná kompatibilita",
   "Base_class_expressions_cannot_reference_class_type_parameters_2562": "Výrazy základní třídy nemůžou odkazovat na parametry typu třídy.",
   "Base_constructor_return_type_0_is_not_an_object_type_or_intersection_of_object_types_with_statically_2509": "Návratový typ základního konstruktoru {0} není typ objektu ani průsečík typů objektů se staticky známými členy.",
   "Base_constructors_must_all_have_the_same_return_type_2510": "Všechny základní konstruktory musí mít stejný návratový typ.",
   "Base_directory_to_resolve_non_absolute_module_names_6083": "Základní adresář pro překlad neabsolutních názvů modulů.",
-  "Basic_Options_6172": "Základní možnosti",
   "BigInt_literals_are_not_available_when_targeting_lower_than_ES2020_2737": "Když je cíl nastavený níže než ES2020, literály typu BigInt nejsou k dispozici.",
   "Binary_digit_expected_1177": "Očekává se binární číslice.",
   "Binding_element_0_implicitly_has_an_1_type_7031": "Element vazby {0} má implicitně typ {1}.",
   "Block_scoped_variable_0_used_before_its_declaration_2448": "Proměnná bloku {0} se používá před vlastní deklarací.",
-  "Build_all_projects_including_those_that_appear_to_be_up_to_date_6368": "Sestavit všechny projekty včetně těch, které se zdají aktuální",
+  "Build_a_composite_project_in_the_working_directory_6925": "Sestavte složený projekt v pracovním adresáři.",
+  "Build_all_projects_including_those_that_appear_to_be_up_to_date_6636": "Sestavit všechny projekty včetně těch, které se zdají aktuální",
   "Build_one_or_more_projects_and_their_dependencies_if_out_of_date_6364": "Sestavit jeden nebo více projektů a jejich závislosti, pokud jsou zastaralé",
   "Build_option_0_requires_a_value_of_type_1_5073": "Možnost buildu {0} vyžaduje hodnotu typu {1}.",
   "Building_project_0_6358": "Sestavuje se projekt {0}...",
+  "COMMAND_LINE_FLAGS_6921": "PŘÍZNAKY PŘÍKAZOVÉHO ŘÁDKU",
+  "COMMON_COMMANDS_6916": "BĚŽNÉ PŘÍKAZY",
+  "COMMON_COMPILER_OPTIONS_6920": "BĚŽNÉ PARAMETRY KOMPILÁTORU",
   "Call_decorator_expression_90028": "Zavolat výraz dekorátoru",
   "Call_signature_return_types_0_and_1_are_incompatible_2202": "Návratové typy signatury volání {0} a {1} nejsou kompatibilní.",
   "Call_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type_7020": "Signatura volání s chybějící anotací návratového typu má implicitně návratový typ any.",
   "Call_signatures_with_no_arguments_have_incompatible_return_types_0_and_1_2204": "Signatury volání bez argumentů mají nekompatibilní návratové typy {0} a {1}.",
   "Call_target_does_not_contain_any_signatures_2346": "Cíl volání neobsahuje žádné signatury.",
   "Can_only_convert_logical_AND_access_chains_95142": "Převést se dají jen logické řetězy přístupu AND.",
+  "Can_only_convert_named_export_95164": "Lze převést pouze pojmenovaný export ",
   "Can_only_convert_property_with_modifier_95137": "Převést se dá jenom vlastnost s modifikátorem.",
+  "Can_only_convert_string_concatenation_95154": "Lze převést pouze zřetězení řetězců.",
   "Cannot_access_0_1_because_0_is_a_type_but_not_a_namespace_Did_you_mean_to_retrieve_the_type_of_the_p_2713": "K {0}.{1} nelze získat přístup, protože {0} je typ, nikoli názvový prostor. Chtěli jste načíst typ vlastnosti {1} v {0} pomocí {0}[{1}]?",
   "Cannot_access_ambient_const_enums_when_the_isolatedModules_flag_is_provided_2748": "Když se zadá příznak --isolatedModules, nedá se získat přístup k ambientnímu konstantnímu výčtu.",
   "Cannot_assign_a_0_constructor_type_to_a_1_constructor_type_2672": "Typ konstruktoru {0} se nedá přiřadit k typu konstruktoru {1}.",
   "Cannot_assign_an_abstract_constructor_type_to_a_non_abstract_constructor_type_2517": "Abstraktní typ konstruktoru nejde přiřadit neabstraktnímu typu konstruktoru.",
+  "Cannot_assign_to_0_because_it_is_a_class_2629": "Do {0} se nedá přiřazovat, protože je to třída.",
   "Cannot_assign_to_0_because_it_is_a_constant_2588": "Nejde přiřadit k vlastnosti {0}, protože je konstantní.",
+  "Cannot_assign_to_0_because_it_is_a_function_2630": "Do {0} se nedá přiřazovat, protože je to funkce.",
+  "Cannot_assign_to_0_because_it_is_a_namespace_2631": "Do {0} se nedá přiřazovat, protože je to obor názvů.",
   "Cannot_assign_to_0_because_it_is_a_read_only_property_2540": "Nejde přiřadit k vlastnosti {0}, protože je jen pro čtení.",
+  "Cannot_assign_to_0_because_it_is_an_enum_2628": "Do {0} se nedá přiřazovat, protože je to výčet.",
+  "Cannot_assign_to_0_because_it_is_an_import_2632": "Do {0} se nedá přiřazovat, protože je to import.",
   "Cannot_assign_to_0_because_it_is_not_a_variable_2539": "Nejde přiřadit k položce {0}, to není proměnná.",
+  "Cannot_assign_to_private_method_0_Private_methods_are_not_writable_2803": "Není možné přiřazovat hodnoty do privátní metody {0}. Do privátních metod se nedá zapisovat.",
   "Cannot_augment_module_0_because_it_resolves_to_a_non_module_entity_2671": "Modul {0} se nedá rozšířit, protože se překládá do entity, která není modul.",
   "Cannot_augment_module_0_with_value_exports_because_it_resolves_to_a_non_module_entity_2649": "Modul {0} se nedá rozšířit, protože se překládá na entitu, která není modul.",
   "Cannot_compile_modules_using_option_0_unless_the_module_flag_is_amd_or_system_6131": "Moduly nejde kompilovat pomocí možnosti {0}, pokud příznak --module nemá hodnotu amd nebo system.",
@@ -292,14 +319,14 @@
   "Cannot_find_name_0_Did_you_mean_1_2552": "Nepovedlo se najít název {0}. Měli jste na mysli {1}?",
   "Cannot_find_name_0_Did_you_mean_the_instance_member_this_0_2663": "Název {0} se nedá najít. Měli jste na mysli člena instance this.{0}?",
   "Cannot_find_name_0_Did_you_mean_the_static_member_1_0_2662": "Název {0} se nedá najít. Měli jste na mysli statický člen {1}.{0}?",
-  "Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_2583": "Nepovedlo se najít název {0}. Potřebujete změnit cílovou knihovnu? Zkuste změnit možnost kompilátoru lib na {1} nebo novější.",
-  "Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_2584": "Nepovedlo se najít název {0}. Potřebujete změnit cílovou knihovnu? Zkuste změnit možnost kompilátoru lib tak, aby obsahovala dom.",
+  "Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_2583": "Nepovedlo se najít název ‚{0}‘. Potřebujete změnit cílovou knihovnu? Zkuste změnit možnost kompilátoru ‚lib‘ na ‚{1}‘ nebo novější.",
+  "Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_2584": "Nepovedlo se najít název ‚{0}‘. Potřebujete změnit cílovou knihovnu? Zkuste změnit možnost kompilátoru ‚lib‘ tak, aby obsahovala ‚dom‘.",
   "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_a_test_runner_Try_npm_i_save_dev_type_2582": "Nepovedlo se najít název {0}. Potřebujete nainstalovat definice typů pro spouštěč testů? Zkuste npm i --save-dev @types/jest nebo npm i --save-dev @types/mocha.",
-  "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_a_test_runner_Try_npm_i_save_dev_type_2593": "Nepovedlo se najít název {0}. Potřebujete nainstalovat definice typů pro spouštěč testů? Zkuste npm i --save-dev @types/jest nebo npm i --save-dev @types/mocha a pak do polí typů v tsconfig přidejte jest nebo mocha.",
+  "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_a_test_runner_Try_npm_i_save_dev_type_2593": "Nepovedlo se najít název ‚{0}‘. Potřebujete nainstalovat definice typů pro spouštěč testů? Zkuste ‚npm i --save-dev@ types/jest‘ nebo ‚npm i --save-dev @types/mocha‘ a pak do polí typů v tsconfig přidejte ‚jest‘ nebo ‚mocha‘.",
   "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_jQuery_Try_npm_i_save_dev_types_Slash_2581": "Nepovedlo se najít název {0}. Potřebujete nainstalovat definice typů pro jQuery? Zkuste npm i --save-dev @types/jquery.",
-  "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_jQuery_Try_npm_i_save_dev_types_Slash_2592": "Nepovedlo se najít název {0}. Potřebujete nainstalovat definice typů pro jQuery? Zkuste npm i --save-dev @types/jquery a pak pro pole typů v tsconfig přidejte jquery.",
+  "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_jQuery_Try_npm_i_save_dev_types_Slash_2592": "Nepovedlo se najít název ‚{0}‘. Potřebujete nainstalovat definice typů pro jQuery? Zkuste ‚npm i --save-dev @types/jquery` a pak pro pole typů v tsconfig přidejte ‚jquery‘.",
   "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_node_Try_npm_i_save_dev_types_Slashno_2580": "Nepovedlo se najít název {0}. Potřebujete nainstalovat definice typů pro Node? Zkuste npm i --save-dev @types/node.",
-  "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_node_Try_npm_i_save_dev_types_Slashno_2591": "Nepovedlo se najít název {0}. Potřebujete nainstalovat definice typů pro Node? Zkuste npm i --save-dev @types/node a pak do pole typů v tsconfig přidejte node.",
+  "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_node_Try_npm_i_save_dev_types_Slashno_2591": "Nepovedlo se najít název ‚{0}‘. Potřebujete nainstalovat definice typů pro uzel? Zkuste ‚npm i --save-dev @types/node‘ a pak do pole typů v tsconfig přidejte ‚node‘.",
   "Cannot_find_namespace_0_2503": "Nenašel se obor názvů {0}.",
   "Cannot_find_parameter_0_1225": "Nenašel se parametr {0}.",
   "Cannot_find_the_common_subdirectory_path_for_the_input_files_5009": "Nenašla se společná cesta podadresářů pro vstupní soubory.",
@@ -318,11 +345,13 @@
   "Cannot_redeclare_block_scoped_variable_0_2451": "Nejde předeklarovat proměnnou bloku {0}.",
   "Cannot_redeclare_exported_variable_0_2323": "Exportovanou proměnnou {0} není možné znovu deklarovat.",
   "Cannot_redeclare_identifier_0_in_catch_clause_2492": "Nejde předeklarovat identifikátor {0} v klauzuli catch.",
+  "Cannot_start_a_function_call_in_a_type_annotation_1441": "Nejde spustit volání funkce v poznámce typu.",
   "Cannot_update_output_of_project_0_because_there_was_error_reading_file_1_6376": "Výstup projektu {0} se nedá aktualizovat, protože při čtení souboru {1} došlo k chybě.",
   "Cannot_use_JSX_unless_the_jsx_flag_is_provided_17004": "Pokud se nezadá příznak -jsx, nepůjde JSX použít.",
   "Cannot_use_imports_exports_or_module_augmentations_when_module_is_none_1148": "Nejde používat importy, exporty nebo rozšíření modulu, pokud má příznak --module hodnotu none.",
   "Cannot_use_namespace_0_as_a_type_2709": "Obor názvů {0} nejde použít jako typ.",
   "Cannot_use_namespace_0_as_a_value_2708": "Obor názvů {0} nejde použít jako hodnotu.",
+  "Cannot_use_this_in_a_static_property_initializer_of_a_decorated_class_2816": "Klíčové slovo „this“ nejde použít v inicializátoru statické vlastnosti dekorované třídy.",
   "Cannot_write_file_0_because_it_will_overwrite_tsbuildinfo_file_generated_by_referenced_project_1_6377": "Soubor {0} se nedá zapsat, protože přepíše soubor .tsbuildinfo vygenerovaný odkazovaným projektem {1}.",
   "Cannot_write_file_0_because_it_would_be_overwritten_by_multiple_input_files_5056": "Do souboru {0} se nedá zapisovat, protože by se přepsal více vstupními soubory.",
   "Cannot_write_file_0_because_it_would_overwrite_input_file_5055": "Do souboru {0} se nedá zapisovat, protože by přepsal vstupní soubor.",
@@ -334,6 +363,8 @@
   "Change_all_jsdoc_style_types_to_TypeScript_and_add_undefined_to_nullable_types_95031": "Změnit všechny typy jsdoc-style na TypeScript (a přidat | undefined do typů s možnou hodnotou null)",
   "Change_extends_to_implements_90003": "Změnit extends na implements",
   "Change_spelling_to_0_90022": "Změnit pravopis na {0}",
+  "Check_for_class_properties_that_are_declared_but_not_set_in_the_constructor_6700": "Zkontrolujte vlastnosti třídy, které sice jsou deklarované, ale nejsou nastavené v konstruktoru.",
+  "Check_that_the_arguments_for_bind_call_and_apply_methods_match_the_original_function_6697": "Zkontrolovat, jestli argumenty metod „bind“, „call“ a „apply“ odpovídají původní funkci.",
   "Checking_if_0_is_the_longest_matching_prefix_for_1_2_6104": "Kontroluje se, jestli je {0} nejdelší odpovídající předpona pro {1}–{2}.",
   "Circular_definition_of_import_alias_0_2303": "Cyklická definice aliasu importu {0}",
   "Circularity_detected_while_resolving_configuration_Colon_0_18000": "Při překladu konfigurace se zjistila cykličnost: {0}.",
@@ -345,7 +376,9 @@
   "Class_0_incorrectly_implements_class_1_Did_you_mean_to_extend_1_and_inherit_its_members_as_a_subclas_2720": "Třída {0} nesprávně implementuje třídu {1}. Nechtěli jste rozšířit třídu {1} a dědit její členy jako podtřídu?",
   "Class_0_incorrectly_implements_interface_1_2420": "Třída {0} nesprávně implementuje rozhraní {1}.",
   "Class_0_used_before_its_declaration_2449": "Třída {0} se používá dříve, než se deklaruje.",
-  "Class_declarations_cannot_have_more_than_one_augments_or_extends_tag_8025": "Deklarace tříd nemůžou mít více než jednu značku @augments nebo @extends.",
+  "Class_declaration_cannot_implement_overload_list_for_0_2813": "Deklarace třídy nemůže implementovat seznam přetížení pro {0}.",
+  "Class_declarations_cannot_have_more_than_one_augments_or_extends_tag_8025": "Deklarace tříd nemůžou mít více než jednu značku ‚@augments‘ nebo ‚@extends‘.",
+  "Class_decorators_can_t_be_used_with_static_private_identifier_Consider_removing_the_experimental_dec_18036": "Dekorátory tříd se nedají použít se statickým privátním identifikátorem. Zvažte možnost odebrat experimentální dekorátor.",
   "Class_name_cannot_be_0_2414": "Třída nemůže mít název {0}.",
   "Class_name_cannot_be_Object_when_targeting_ES5_with_module_0_2725": "Když se cílí na ES5 s modulem {0}, název třídy nemůže být Object.",
   "Class_static_side_0_incorrectly_extends_base_class_static_side_1_2417": "Statická strana třídy {0} nesprávně rozšiřuje statickou stranu základní třídy {1}.",
@@ -354,16 +387,25 @@
   "Classes_may_not_have_a_field_named_constructor_18006": "Třídy nemůžou mít pole s názvem constructor.",
   "Command_line_Options_6171": "Možnosti příkazového řádku",
   "Compile_the_project_given_the_path_to_its_configuration_file_or_to_a_folder_with_a_tsconfig_json_6020": "Zkompilujte projekt podle cesty k jeho konfiguračnímu souboru nebo do složky se souborem tsconfig.json.",
+  "Compiler_Diagnostics_6251": "Diagnostika kompilátoru",
   "Compiler_option_0_expects_an_argument_6044": "Parametr kompilátoru {0} očekává argument.",
+  "Compiler_option_0_may_not_be_used_with_build_5094": "Možnost kompilátoru „--{0}“ se nesmí používat s „--build“.",
+  "Compiler_option_0_may_only_be_used_with_build_5093": "Možnost kompilátoru „--{0}“ se smí používat jenom s „--build“.",
   "Compiler_option_0_requires_a_value_of_type_1_5024": "Parametr kompilátoru {0} vyžaduje hodnotu typu {1}.",
   "Compiler_reserves_name_0_when_emitting_private_identifier_downlevel_18027": "Kompilátor si rezervuje název {0} při generování privátního identifikátoru pro nižší úroveň.",
+  "Compiles_the_TypeScript_project_located_at_the_specified_path_6927": "Zkompiluje projekt TypeScriptu umístěný v zadané cestě.",
+  "Compiles_the_current_project_tsconfig_json_in_the_working_directory_6923": "Zkompiluje aktuální projekt (tsconfig.json v pracovním adresáři).",
+  "Compiles_the_current_project_with_additional_settings_6929": "Zkompiluje aktuální projekt s dalšími nastaveními.",
+  "Completeness_6257": "Úplnost",
   "Composite_projects_may_not_disable_declaration_emit_6304": "Složené projekty nemůžou zakázat generování deklarací.",
   "Composite_projects_may_not_disable_incremental_compilation_6379": "Složené projekty nemůžou zakázat přírůstkovou kompilaci.",
+  "Computed_from_the_list_of_input_files_6911": "Vypočítáno ze seznamu vstupních souborů",
   "Computed_property_names_are_not_allowed_in_enums_1164": "Názvy počítaných vlastností se ve výčtech nepovolují.",
   "Computed_values_are_not_permitted_in_an_enum_with_string_valued_members_2553": "Ve výčtu, jehož členy mají hodnoty typu string, se nepovolují vypočítané hodnoty.",
   "Concatenate_and_emit_output_to_single_file_6001": "Zřetězit a generovat výstup do jednoho souboru",
   "Conflicting_definitions_for_0_found_at_1_and_2_Consider_installing_a_specific_version_of_this_librar_4090": "Našly se konfliktní definice pro: {0} v {1} a {2}. Zvažte možnost nainstalovat specifickou verzi této knihovny, aby se konflikt vyřešil.",
   "Conflicts_are_in_this_file_6201": "V tomto souboru se nacházejí konflikty.",
+  "Consider_adding_a_declare_modifier_to_this_class_6506": "Zvažte přidání modifikátoru „declare“ do této třídy.",
   "Construct_signature_return_types_0_and_1_are_incompatible_2203": "Návratové typy signatury konstruktu {0} a {1} nejsou kompatibilní.",
   "Construct_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type_7013": "Podpis konstruktoru s chybějící anotací návratového typu má implicitně návratový typ any.",
   "Construct_signatures_with_no_arguments_have_incompatible_return_types_0_and_1_2205": "Signatury konstruktů bez argumentů mají nekompatibilní návratové typy {0} a {1}.",
@@ -413,16 +455,24 @@
   "Convert_to_type_only_export_1364": "Převést na export, při kterém se exportují jen typy",
   "Convert_to_type_only_import_1373": "Převést na import, při kterém se importují jen typy",
   "Corrupted_locale_file_0_6051": "Soubor národního prostředí {0} je poškozený.",
+  "Could_not_convert_to_anonymous_function_95153": "Nepovedlo se převést na anonymní funkci.",
+  "Could_not_convert_to_arrow_function_95151": "Nepovedlo se převést na funkci šipky.",
+  "Could_not_convert_to_named_function_95152": "Nepovedlo se převést na pojmenovanou funkci.",
+  "Could_not_determine_function_return_type_95150": "Nepovedlo se určit návratový typ funkce.",
   "Could_not_find_a_containing_arrow_function_95127": "Nepovedlo se najít obsahující funkci šipky.",
   "Could_not_find_a_declaration_file_for_module_0_1_implicitly_has_an_any_type_7016": "Nenašel se soubor deklarací pro modul {0}. {1} má implicitně typ any.",
   "Could_not_find_convertible_access_expression_95140": "Nepovedlo se najít převoditelný výraz přístupu.",
   "Could_not_find_export_statement_95129": "Nešlo najít příkaz export.",
   "Could_not_find_import_clause_95131": "Nešlo najít klauzuli import.",
   "Could_not_find_matching_access_expressions_95141": "Nepovedlo se najít odpovídající výrazy přístupu.",
+  "Could_not_find_name_0_Did_you_mean_1_2570": "Nepodařilo se najít název {0}. Měli jste na mysli {1}?",
   "Could_not_find_namespace_import_or_named_imports_95132": "Nepovedlo se najít import oboru názvů nebo pojmenované importy.",
   "Could_not_find_property_for_which_to_generate_accessor_95135": "Nepovedlo se najít vlastnost, pro kterou se má vygenerovat přístupový objekt.",
   "Could_not_resolve_the_path_0_with_the_extensions_Colon_1_6231": "Nepovedlo se přeložit cestu {0} s příponami {1}.",
   "Could_not_write_file_0_Colon_1_5033": "Nedá se zapisovat do souboru {0}: {1}",
+  "Create_source_map_files_for_emitted_JavaScript_files_6694": "Vytvořte pro generované soubory JavaScriptu soubory sourcemap.",
+  "Create_sourcemaps_for_d_ts_files_6614": "Pro soubory d.ts vytvořte soubory sourcemap.",
+  "Creates_a_tsconfig_json_with_the_recommended_settings_in_the_working_directory_6926": "Vytvoří tsconfig.json doporučenými nastaveními v pracovním adresáři.",
   "DIRECTORY_6038": "ADRESÁŘ",
   "Declaration_augments_declaration_in_another_file_This_cannot_be_serialized_6232": "Deklarace rozšiřuje deklaraci v jiném souboru. Toto není možné serializovat.",
   "Declaration_emit_for_this_file_requires_using_private_name_0_An_explicit_type_annotation_may_unblock_9005": "Generování deklarací pro tento soubor vyžaduje, aby se použil privátní název {0}. Explicitní anotace typu může generování deklarací odblokovat.",
@@ -430,6 +480,7 @@
   "Declaration_expected_1146": "Očekává se deklarace.",
   "Declaration_name_conflicts_with_built_in_global_identifier_0_2397": "Název deklarace je v konfliktu s integrovaným globálním identifikátorem {0}.",
   "Declaration_or_statement_expected_1128": "Očekává se deklarace nebo příkaz.",
+  "Declaration_or_statement_expected_This_follows_a_block_of_statements_so_if_you_intended_to_write_a_d_2809": "Očekávala se deklarace nebo příkaz. Tento znak = následuje blok příkazů, takže pokud jste chtěli napsat destrukturující přiřazení, možná bude nutné uzavřít celé přiřazení do závorek.",
   "Declarations_with_definite_assignment_assertions_must_also_have_type_annotations_1264": "Deklarace s kontrolními výrazy jednoznačného přiřazení musí mít také anotace typu.",
   "Declarations_with_initializers_cannot_also_have_definite_assignment_assertions_1263": "Deklarace s inicializátory nemůžou mít také kontrolní výrazy jednoznačného přiřazení.",
   "Declare_a_private_field_named_0_90053": "Deklarovat privátní pole s názvem {0}",
@@ -441,7 +492,11 @@
   "Declare_static_property_0_90027": "Deklarovat statickou vlastnost {0}",
   "Decorators_are_not_valid_here_1206": "Dekorátory tady nejsou platné.",
   "Decorators_cannot_be_applied_to_multiple_get_Slashset_accessors_of_the_same_name_1207": "Dekorátory nejde použít na víc přístupových objektů get/set se stejným názvem.",
+  "Decorators_may_not_be_applied_to_this_parameters_1433": "Pro „tyto“ parametry asi nejdou použít dekoratéry.",
+  "Decorators_must_precede_the_name_and_all_keywords_of_property_declarations_1436": "Dekoratéry musí předcházet název a všechna klíčová slova deklarace vlastností.",
   "Default_export_of_the_module_has_or_is_using_private_name_0_4082": "Výchozí export modulu má nebo používá privátní název {0}.",
+  "Default_library_1424": "Výchozí knihovna",
+  "Default_library_for_target_0_1425": "Výchozí knihovna pro cíl {0}",
   "Definitions_of_the_following_identifiers_conflict_with_those_in_another_file_Colon_0_6200": "Definice následujících identifikátorů je v konfliktu s definicemi v jiném souboru: {0}",
   "Delete_all_unused_declarations_95024": "Odstranit všechny nepoužívané deklarace",
   "Delete_all_unused_imports_95147": "Odstranit všechny nepoužívané importy",
@@ -449,6 +504,7 @@
   "Deprecated_Use_jsxFactory_instead_Specify_the_object_invoked_for_createElement_when_targeting_react__6084": "[Zastaralé] Použijte místo toho --jsxFactory. Určí objekt vyvolaný pro createElement při cílení na generování JSX react.",
   "Deprecated_Use_outFile_instead_Concatenate_and_emit_output_to_single_file_6170": "[Zastaralé] Použijte místo toho --outFile. Zřetězí a vygeneruje výstup do jednoho souboru.",
   "Deprecated_Use_skipLibCheck_instead_Skip_type_checking_of_default_library_declaration_files_6160": "[Zastaralé] Použijte místo toho --skipLibCheck. Přeskočí kontrolu typů výchozích souborů deklarací knihovny.",
+  "Deprecated_setting_Use_outFile_instead_6677": "Nastavení je zastaralé. Místo něj použijte „outFile“.",
   "Did_you_forget_to_use_await_2773": "Nezapomněli jste použít await?",
   "Did_you_mean_0_1369": "Měli jste na mysli {0}?",
   "Did_you_mean_for_0_to_be_constrained_to_type_new_args_Colon_any_1_2735": "Měli jste na mysli omezení {0} na typ new (...args: any[]) => {1}?",
@@ -459,12 +515,30 @@
   "Did_you_mean_to_use_new_with_this_expression_6213": "Nechtěli jste u tohoto výrazu použít new?",
   "Digit_expected_1124": "Očekává se číslice.",
   "Directory_0_does_not_exist_skipping_all_lookups_in_it_6148": "Adresář {0} neexistuje. Všechna vyhledávání v něm se přeskočí.",
+  "Disable_adding_use_strict_directives_in_emitted_JavaScript_files_6669": "V generovaných souborech JavaScriptu zakažte přidávání direktiv „use strict“.",
   "Disable_checking_for_this_file_90018": "Zakázat kontrolu tohoto souboru",
+  "Disable_emitting_comments_6688": "Zakázat generování komentářů.",
+  "Disable_emitting_declarations_that_have_internal_in_their_JSDoc_comments_6701": "Zakažte generování deklarací, které mají v komentářích JSDoc značku @internal.",
+  "Disable_emitting_file_from_a_compilation_6660": "Zakažte generování souboru z kompilace.",
+  "Disable_emitting_files_if_any_type_checking_errors_are_reported_6662": "Zakažte generování souborů, pokud jsou při kontrole typů nahlášeny jakékoli chyby.",
+  "Disable_erasing_const_enum_declarations_in_generated_code_6682": "Zakázat v generovaném kódu mazání deklarací „const enum“.",
+  "Disable_error_reporting_for_unreachable_code_6603": "Zakažte hlášení chyb, pokud je kód nedosažitelný.",
+  "Disable_error_reporting_for_unused_labels_6604": "Zakažte hlášení chyb u nepoužitých popisků.",
+  "Disable_generating_custom_helper_functions_like_extends_in_compiled_output_6661": "Zakázat v kompilovaném výstupu generování vlastních pomocných funkcí, jako je „__extends“.",
+  "Disable_including_any_library_files_including_the_default_lib_d_ts_6670": "Zakažte zahrnutí všech souborů knihoven, včetně výchozí lib.d.ts.",
   "Disable_loading_referenced_projects_6235": "Zakažte načítání odkazovaných projektů.",
+  "Disable_preferring_source_files_instead_of_declaration_files_when_referencing_composite_projects_6620": "Zakázat v odkazech na složené projekty upřednostňování zdrojových souborů místo deklaračních souborů",
+  "Disable_reporting_of_excess_property_errors_during_the_creation_of_object_literals_6702": "Zakažte při vytváření literálů objektů hlášení zbytečně velkého počtu chyb vlastností.",
+  "Disable_resolving_symlinks_to_their_realpath_This_correlates_to_the_same_flag_in_node_6683": "Zakažte překlad odkazů symlink na jejich skutečnou cestu (realpath). Toto nastavení koreluje se stejným příznakem uzlu.",
   "Disable_size_limitations_on_JavaScript_projects_6162": "Zakázat omezení velikosti v projektech JavaScriptu",
   "Disable_solution_searching_for_this_project_6224": "Zakažte vyhledávání řešení pro tento projekt.",
-  "Disable_strict_checking_of_generic_signatures_in_function_types_6185": "Zakáže striktní kontroly generických signatur v typech funkcí.",
+  "Disable_strict_checking_of_generic_signatures_in_function_types_6673": "Zakáže striktní kontroly generických signatur v typech funkcí.",
+  "Disable_the_type_acquisition_for_JavaScript_projects_6625": "Zakázat v javascriptových projektech získávání typů",
+  "Disable_truncating_types_in_error_messages_6663": "Zakázat v chybových zprávách zkracování typů.",
   "Disable_use_of_source_files_instead_of_declaration_files_from_referenced_projects_6221": "Zakažte možnost používat zdrojové soubory místo souborů deklarací z odkazovaných projektů.",
+  "Disable_wiping_the_console_in_watch_mode_6684": "V režimu sledování zakázat vymazání konzole",
+  "Disables_inference_for_type_acquisition_by_looking_at_filenames_in_a_project_6616": "Při získávání typů se zakáže odvozování. Názvy souborů se vyhledají v projektu.",
+  "Disallow_import_s_require_s_or_reference_s_from_expanding_the_number_of_files_TypeScript_should_add__6672": "Zakažte importům, požadavkům a odkazům, aby rozšiřovaly počet souborů přidaných TypeScriptem do projektu.",
   "Disallow_inconsistently_cased_references_to_the_same_file_6078": "Zakažte odkazy na stejný soubor s nekonzistentně použitými malými a velkými písmeny.",
   "Do_not_add_triple_slash_references_or_imported_modules_to_the_list_of_compiled_files_6159": "Nepřidávat odkazy se třemi lomítky nebo importované moduly do seznamu kompilovaných souborů",
   "Do_not_emit_comments_to_output_6009": "Negenerovat komentáře pro výstup",
@@ -483,31 +557,48 @@
   "Duplicate_identifier_0_2300": "Duplicitní identifikátor {0}",
   "Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module_2441": "Duplicitní identifikátor {0}. Kompilátor si vyhrazuje název {1} v oboru nejvyšší úrovně pro daný modul.",
   "Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module_containing_async_func_2529": "Duplicitní identifikátor {0}. Kompilátor rezervuje název {1} v oboru nejvyšší úrovně modulu, který obsahuje asynchronní funkce.",
+  "Duplicate_identifier_0_Compiler_reserves_name_1_when_emitting_super_references_in_static_initializer_2818": "Duplicitní identifikátor {0}. Kompilátor rezervuje název {1}, když se generují odkazy super ve statických inicializátorech.",
   "Duplicate_identifier_0_Compiler_uses_declaration_1_to_support_async_functions_2520": "Duplicitní identifikátor {0}. Kompilátor používá deklaraci {1} pro podporu asynchronních funkcí.",
+  "Duplicate_identifier_0_Static_and_instance_elements_cannot_share_the_same_private_name_2804": "Duplicitní identifikátor {0}. Statické elementy a elementy instancí nemůžou sdílet stejný privátní název.",
   "Duplicate_identifier_arguments_Compiler_uses_arguments_to_initialize_rest_parameters_2396": "Duplicitní identifikátor arguments. Kompilátor pomocí identifikátoru arguments inicializuje parametry rest.",
   "Duplicate_identifier_newTarget_Compiler_uses_variable_declaration_newTarget_to_capture_new_target_me_2543": "Duplicitní identifikátor _newTarget. Kompilátor používá deklaraci proměnné _newTarget k zachycení odkazu na metavlastnost new.target.",
   "Duplicate_identifier_super_Compiler_uses_super_to_capture_base_class_reference_2401": "Duplicitní identifikátor _super. Kompilátor pomocí identifikátoru _super zaznamenává odkaz na základní třídu.",
   "Duplicate_identifier_this_Compiler_uses_variable_declaration_this_to_capture_this_reference_2399": "Duplicitní identifikátor _this. Kompilátor pomocí deklarace proměnné _this zaznamenává odkaz na příkaz this.",
+  "Duplicate_index_signature_for_type_0_2374": "Duplicitní signatura indexu pro typ {0}.",
   "Duplicate_label_0_1114": "Duplicitní popisek {0}",
-  "Duplicate_number_index_signature_2375": "Duplicitní podpis číselného indexu",
   "Duplicate_property_0_2718": "Duplicitní vlastnost {0}.",
-  "Duplicate_string_index_signature_2374": "Duplicitní signatury řetězcového indexu",
   "Dynamic_import_cannot_have_type_arguments_1326": "Dynamický import nemůže mít argumenty typu.",
   "Dynamic_import_must_have_one_specifier_as_an_argument_1324": "Dynamický import musí mít jako argument jeden specifikátor.",
   "Dynamic_import_s_specifier_must_be_of_type_string_but_here_has_type_0_7036": "Specifikátor dynamického importu musí být typu string, ale tady má typ {0}.",
   "Dynamic_imports_are_only_supported_when_the_module_flag_is_set_to_es2020_esnext_commonjs_amd_system__1323": "Dynamické importy se podporují jen v případě, že příznak --module je nastavený na es2020, esnext, commonjs, amd, system nebo umd.",
   "Each_member_of_the_union_type_0_has_construct_signatures_but_none_of_those_signatures_are_compatible_2762": "Každý člen typu sjednocení {0} má signatury konstruktu, ale žádná z těchto signatur není kompatibilní s jinou signaturou.",
   "Each_member_of_the_union_type_0_has_signatures_but_none_of_those_signatures_are_compatible_with_each_2758": "Každý člen typu sjednocení {0} má signatury, ale žádná z těchto signatur není kompatibilní s jinou signaturou.",
-  "Element_at_index_0_is_variadic_in_one_type_but_not_in_the_other_2622": "Element na indexu {0} je variadický v jednom typu, ale ne v tom druhém.",
+  "Editor_Support_6249": "Podpora editoru",
   "Element_implicitly_has_an_any_type_because_expression_of_type_0_can_t_be_used_to_index_type_1_7053": "Element má implicitně typ any, protože pomocí výrazu typu {0} není možné indexovat typ {1}.",
   "Element_implicitly_has_an_any_type_because_index_expression_is_not_of_type_number_7015": "Element má implicitně typ any, protože indexový výraz není typu number.",
   "Element_implicitly_has_an_any_type_because_type_0_has_no_index_signature_7017": "Element má implicitně typ any, protože typ {0} nemá žádnou signaturu indexu.",
   "Element_implicitly_has_an_any_type_because_type_0_has_no_index_signature_Did_you_mean_to_call_1_7052": "Element má implicitně typ any, protože typ {0} nemá žádnou signaturu indexu. Nechtěli jste zavolat {1}?",
-  "Emit_a_UTF_8_Byte_Order_Mark_BOM_in_the_beginning_of_output_files_6164": "Vygeneruje na začátku výstupních souborů značku pořadí bajtů ve formátu UTF-8.",
+  "Emit_6246": "Generovat",
+  "Emit_ECMAScript_standard_compliant_class_fields_6712": "Generovat pole třídy ECMAScript-standard-compliant.",
+  "Emit_a_UTF_8_Byte_Order_Mark_BOM_in_the_beginning_of_output_files_6622": "Vygeneruje na začátku výstupních souborů značku pořadí bajtů ve formátu UTF-8.",
   "Emit_a_single_file_with_source_maps_instead_of_having_a_separate_file_6151": "Vygeneruje jediný soubor se zdrojovými mapováními namísto samostatného souboru.",
+  "Emit_a_v8_CPU_profile_of_the_compiler_run_for_debugging_6638": "Vygenerujte profil procesoru v8 spuštěného kompilátoru pro ladění.",
+  "Emit_additional_JavaScript_to_ease_support_for_importing_CommonJS_modules_This_enables_allowSyntheti_6626": "Vygenerujte další JavaScript, abyste usnadnili podporu importu modulů CommonJS. Tím povolíte příznak allowSyntheticDefaultImports kompatibility typů.",
   "Emit_class_fields_with_Define_instead_of_Set_6222": "Vygenerujte pole třídy pomocí Define namísto Set.",
+  "Emit_design_type_metadata_for_decorated_declarations_in_source_files_6624": "Vygenerujte metadata o typu návrhu pro dekorované deklarace ve zdrojových souborech.",
+  "Emit_more_compliant_but_verbose_and_less_performant_JavaScript_for_iteration_6621": "Generovat kompatibilnější kód, ale při iteraci použít režim s komentářem (verbose) a méně výkonný JavaScript.",
   "Emit_the_source_alongside_the_sourcemaps_within_a_single_file_requires_inlineSourceMap_or_sourceMap__6152": "Vygeneruje zdroj spolu se zdrojovými mapováními v jednom souboru. Vyžaduje, aby byla nastavená možnost --inlineSourceMap nebo --sourceMap.",
   "Enable_all_strict_type_checking_options_6180": "Povolí všechny možnosti striktní kontroly typů.",
+  "Enable_color_and_formatting_in_output_to_make_compiler_errors_easier_to_read_6685": "Povolte ve výstupu barvu a formátování, aby byly chyby kompilátoru čitelnější.",
+  "Enable_constraints_that_allow_a_TypeScript_project_to_be_used_with_project_references_6611": "Povolte omezení, která v projektu TypeScriptu umožní používat odkazy na projekt.",
+  "Enable_error_reporting_for_codepaths_that_do_not_explicitly_return_in_a_function_6667": "Povolte hlášení chyb u cest kódu, které funkce výslovně nevrátí.",
+  "Enable_error_reporting_for_expressions_and_declarations_with_an_implied_any_type_6665": "Povolit hlášení chyb u výrazů a deklarací s implicitním typem „any“.",
+  "Enable_error_reporting_for_fallthrough_cases_in_switch_statements_6664": "Povolit hlášení chyb v příkazech switch v případě fallthrough.",
+  "Enable_error_reporting_in_type_checked_JavaScript_files_6609": "Povolit hlášení chyb v javascriptových souborech se zkontrolovanými typy.",
+  "Enable_error_reporting_when_a_local_variables_aren_t_read_6675": "Povolte hlášení chyb, pokud místní proměnné nejdou přečíst.",
+  "Enable_error_reporting_when_this_is_given_the_type_any_6668": "Povolte hlášení chyb, pokud má „this“ určený typ „any“.",
+  "Enable_experimental_support_for_TC39_stage_2_draft_decorators_6630": "Povolte zkušební podporu pracovních verzí dekoratérů TC39 fáze 2.",
+  "Enable_importing_json_files_6689": "Povolit import souborů .json",
   "Enable_incremental_compilation_6378": "Povolit přírůstkovou kompilaci",
   "Enable_project_compilation_6302": "Povolit kompilování projektu",
   "Enable_strict_bind_call_and_apply_methods_on_functions_6214": "Povolte ve funkcích metody bind, call a apply.",
@@ -517,11 +608,20 @@
   "Enable_the_experimentalDecorators_option_in_your_configuration_file_95074": "Povolte v konfiguračním souboru možnost experimentalDecorators.",
   "Enable_the_jsx_flag_in_your_configuration_file_95088": "Povolte v konfiguračním souboru příznak --jsx.",
   "Enable_tracing_of_the_name_resolution_process_6085": "Povolte trasování procesu překladu IP adres.",
-  "Enable_verbose_logging_6366": "Povolit podrobné protokolování",
+  "Enable_verbose_logging_6713": "Povolit podrobné protokolování",
   "Enables_emit_interoperability_between_CommonJS_and_ES_Modules_via_creation_of_namespace_objects_for__7037": "Povolí interoperabilitu generování mezi moduly CommonJS a ES prostřednictvím vytváření objektů oboru názvů pro všechny importy. Implikuje allowSyntheticDefaultImports.",
   "Enables_experimental_support_for_ES7_async_functions_6068": "Zapíná experimentální podporu asynchronních funkcí ES7.",
   "Enables_experimental_support_for_ES7_decorators_6065": "Povolí experimentální podporu pro dekorátory ES7.",
   "Enables_experimental_support_for_emitting_type_metadata_for_decorators_6066": "Povolí experimentální podporu pro generování metadat typu pro dekorátory.",
+  "Enforces_using_indexed_accessors_for_keys_declared_using_an_indexed_type_6671": "Pro klíče deklarované pomocí indexovaného typu vynutí použití indexovaných přístupových objektů",
+  "Ensure_overriding_members_in_derived_classes_are_marked_with_an_override_modifier_6666": "Zajistěte označení přepisovaných členů v odvozených třídách modifikátorem override.",
+  "Ensure_that_casing_is_correct_in_imports_6637": "Při importu ověřovat správnost používání malých a velkých písmen.",
+  "Ensure_that_each_file_can_be_safely_transpiled_without_relying_on_other_imports_6645": "Zajistit bezpečnou transpilaci všech souborů bez spoléhání na jiné importy.",
+  "Ensure_use_strict_is_always_emitted_6605": "Vždy zajistěte generování direktivy „use strict“.",
+  "Entry_point_for_implicit_type_library_0_1420": "Vstupní bod pro knihovnu implicitních typů {0}",
+  "Entry_point_for_implicit_type_library_0_with_packageId_1_1421": "Vstupní bod pro knihovnu implicitních typů {0} s packageId {1}",
+  "Entry_point_of_type_library_0_specified_in_compilerOptions_1417": "Vstupní bod pro knihovnu typů {0} zadanou v compilerOptions",
+  "Entry_point_of_type_library_0_specified_in_compilerOptions_with_packageId_1_1418": "Vstupní bod pro knihovnu typů {0} zadanou v compilerOptions s packageId {1}",
   "Enum_0_used_before_its_declaration_2450": "Výčet {0} se používá dříve, než se deklaruje.",
   "Enum_declarations_can_only_merge_with_namespace_or_other_enum_declarations_2567": "Deklarace výčtu jdou sloučit jenom s oborem názvů nebo jinými deklaracemi výčtu.",
   "Enum_declarations_must_all_be_const_or_non_const_2473": "Všechny deklarace výčtu musí být konstantní nebo nekonstantní.",
@@ -535,15 +635,13 @@
   "Expected_0_1_type_arguments_provide_these_with_an_extends_tag_8027": "Očekávané argumenty typu {0}–{1}; zadejte je se značkou @extends.",
   "Expected_0_arguments_but_got_1_2554": "Očekával se tento počet argumentů: {0}. Počet předaných argumentů: {1}",
   "Expected_0_arguments_but_got_1_Did_you_forget_to_include_void_in_your_type_argument_to_Promise_2794": "Očekával se tento počet argumentů: {0}, ale byl přijat tento počet: {1}. Nezapomněli jste zahrnout void do argumentu typu pro objekt Promise?",
-  "Expected_0_arguments_but_got_1_or_more_2556": "Očekával se tento počet argumentů: {0}. Počet předaných argumentů: {1} nebo více.",
   "Expected_0_type_arguments_but_got_1_2558": "Očekávaly se argumenty typu {0}, ale předaly se argumenty typu {1}.",
   "Expected_0_type_arguments_provide_these_with_an_extends_tag_8026": "Očekávané argumenty typu {0}; zadejte je se značkou @extends.",
   "Expected_at_least_0_arguments_but_got_1_2555": "Očekával se aspoň tento počet argumentů: {0}. Počet předaných argumentů: {1}",
-  "Expected_at_least_0_arguments_but_got_1_or_more_2557": "Očekával se aspoň tento počet argumentů: {0}. Počet předaných argumentů: {1} nebo více.",
   "Expected_corresponding_JSX_closing_tag_for_0_17002": "Očekávala se odpovídající ukončující značka JSX pro {0}.",
   "Expected_corresponding_closing_tag_for_JSX_fragment_17015": "Pro fragment JSX se očekávala odpovídající uzavírací značka.",
+  "Expected_for_property_initializer_1442": "Pro inicializátor vlastnosti se očekával znak =.",
   "Expected_type_of_0_field_in_package_json_to_be_1_got_2_6105": "Očekávaný typ pole {0} v souboru package.json byl {1}, získal se typ {2}.",
-  "Experimental_Options_6177": "Experimentální možnosti",
   "Experimental_support_for_decorators_is_a_feature_that_is_subject_to_change_in_a_future_release_Set_t_1219": "Experimentální podpora dekorátorů je funkce, která se v budoucí verzi může změnit. Toto upozornění odstraníte nastavením možnosti experimentalDecorators v tsconfig nebo jsconfig.",
   "Explicitly_specified_module_resolution_kind_Colon_0_6087": "Explicitně zadaný druh překladu modulu: {0}.",
   "Exponentiation_cannot_be_performed_on_bigint_values_unless_the_target_option_is_set_to_es2016_or_lat_2791": "Pokud není možnost target nastavená na es2016 nebo novější, nedají se hodnoty bigint umocnit.",
@@ -554,12 +652,14 @@
   "Exported_external_package_typings_file_0_is_not_a_module_Please_contact_the_package_author_to_update_2656": "Soubor exportovaného úseku kódu externího balíčku {0} není modul. Kontaktuje prosím autora balíčku, aby aktualizoval jeho definici.",
   "Exported_external_package_typings_file_cannot_contain_tripleslash_references_Please_contact_the_pack_2654": "Soubor exportovaného úseku kódu externího balíčku nemůže obsahovat odkazy se třemi lomítky. Kontaktuje prosím autora balíčku, aby aktualizoval jeho definici.",
   "Exported_type_alias_0_has_or_is_using_private_name_1_4081": "Alias exportovaného typu {0} má nebo používá privátní název {1}.",
+  "Exported_type_alias_0_has_or_is_using_private_name_1_from_module_2_4084": "Alias exportovaného typu {0} má nebo používá privátní název {1} z modulu {2}.",
   "Exported_variable_0_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4023": "Exportovaná proměnná {0} má nebo používá název {1} z externího modulu {2}, ale nedá se pojmenovat.",
   "Exported_variable_0_has_or_is_using_name_1_from_private_module_2_4024": "Exportovaná proměnná {0} má nebo používá název {1} z privátního modulu {2}.",
   "Exported_variable_0_has_or_is_using_private_name_1_4025": "Exportovaná proměnná {0} má nebo používá privátní název {1}.",
   "Exports_and_export_assignments_are_not_permitted_in_module_augmentations_2666": "Exporty a přiřazení exportů nejsou povolené v rozšířeních modulů.",
   "Expression_expected_1109": "Očekával se výraz.",
   "Expression_or_comma_expected_1137": "Očekával se výraz nebo čárka.",
+  "Expression_produces_a_tuple_type_that_is_too_large_to_represent_2800": "Výraz vytvoří typ řazené kolekce členů, který se nedá reprezentovat, protože je příliš velký.",
   "Expression_produces_a_union_type_that_is_too_complex_to_represent_2590": "Výraz vytvoří typ sjednocení, který se nedá reprezentovat, protože je příliš složitý.",
   "Expression_resolves_to_super_that_compiler_uses_to_capture_base_class_reference_2402": "Výraz se přeloží na identifikátor _super, pomocí kterého kompilátor zaznamenává odkaz na základní třídu.",
   "Expression_resolves_to_variable_declaration_0_that_compiler_uses_to_support_async_functions_2521": "Výraz se přeloží na deklaraci proměnné {0}, kterou kompilátor používá pro podporu asynchronních funkcí.",
@@ -579,7 +679,9 @@
   "Failed_to_parse_file_0_Colon_1_5014": "Nepovedlo se parsovat soubor {0}: {1}.",
   "Fallthrough_case_in_switch_7029": "Případ Fallthrough v příkazu switch",
   "File_0_does_not_exist_6096": "Soubor {0} neexistuje.",
+  "File_0_does_not_exist_according_to_earlier_cached_lookups_6240": "Podle dřívějších vyhledávání v mezipaměti soubor {0} neexistuje.",
   "File_0_exist_use_it_as_a_name_resolution_result_6097": "Soubor {0} existuje – použijte ho jako výsledek překladu IP adres.",
+  "File_0_exists_according_to_earlier_cached_lookups_6239": "Podle dřívějších vyhledávání v mezipaměti soubor {0} existuje.",
   "File_0_has_an_unsupported_extension_The_only_supported_extensions_are_1_6054": "Soubor {0} má nepodporovanou příponu. Jediné podporované přípony jsou {1}.",
   "File_0_has_an_unsupported_extension_so_skipping_it_6081": "Soubor {0} má nepodporovanou příponu, a proto se přeskočí.",
   "File_0_is_a_JavaScript_file_Did_you_mean_to_enable_the_allowJs_option_6504": "Soubor {0} je javascriptový soubor. Nechtěli jste povolit možnost allowJs?",
@@ -587,16 +689,32 @@
   "File_0_is_not_listed_within_the_file_list_of_project_1_Projects_must_list_all_files_or_use_an_includ_6307": "Soubor {0} není uvedený na seznamu souborů projektu {1}. Projekty musí uvádět všechny soubory nebo používat vzor include.",
   "File_0_is_not_under_rootDir_1_rootDir_is_expected_to_contain_all_source_files_6059": "Soubor {0} není pod kořenovým adresářem rootDir {1}. Očekává se, že rootDir bude obsahovat všechny zdrojové soubory.",
   "File_0_not_found_6053": "Soubor {0} se nenašel.",
+  "File_Management_6245": "Správa souborů",
   "File_change_detected_Starting_incremental_compilation_6032": "Zjistila se změna souboru. Spouští se přírůstková kompilace...",
   "File_is_a_CommonJS_module_it_may_be_converted_to_an_ES6_module_80001": "Soubor je modul CommonJS; může se převést na modul ES6.",
+  "File_is_default_library_for_target_specified_here_1426": "Soubor je výchozí knihovna pro cíl, který se zadal na tomto místě.",
+  "File_is_entry_point_of_type_library_specified_here_1419": "Soubor je vstupní bod knihovny typů, která se zadala na tomto místě.",
+  "File_is_included_via_import_here_1399": "Soubor se zahrnuje pomocí importu na tomto místě.",
+  "File_is_included_via_library_reference_here_1406": "Soubor se zahrnuje pomocí odkazu na knihovnu na tomto místě.",
+  "File_is_included_via_reference_here_1401": "Soubor se zahrnuje pomocí odkazu na tomto místě.",
+  "File_is_included_via_type_library_reference_here_1404": "Soubor se zahrnuje pomocí odkazu na knihovnu typů na tomto místě.",
+  "File_is_library_specified_here_1423": "Soubor je knihovna zadaná na tomto místě.",
+  "File_is_matched_by_files_list_specified_here_1410": "Soubor se srovnává se seznamem files zadaným na tomto místě.",
+  "File_is_matched_by_include_pattern_specified_here_1408": "Soubor se srovnává podle vzoru zahrnutí zadaného na tomto místě.",
+  "File_is_output_from_referenced_project_specified_here_1413": "Soubor je výstup z odkazovaného projektu zadaného na tomto místě.",
+  "File_is_output_of_project_reference_source_0_1428": "Soubor je výstup zdroje odkazů na projekt {0}.",
+  "File_is_source_from_referenced_project_specified_here_1416": "Soubor je zdroj z odkazovaného projektu zadaného na tomto místě.",
   "File_name_0_differs_from_already_included_file_name_1_only_in_casing_1149": "Název souboru {0} se od už zahrnutého názvu souboru {1} liší jenom velikostí písmen.",
   "File_name_0_has_a_1_extension_stripping_it_6132": "Název souboru {0} má příponu {1} – odstraňuje se",
+  "File_redirects_to_file_0_1429": "Soubor se přesměrovává na soubor {0}.",
   "File_specification_cannot_contain_a_parent_directory_that_appears_after_a_recursive_directory_wildca_5065": "Specifikace souboru nemůže obsahovat nadřazený adresář (..), který se vyskytuje za rekurzivním zástupným znakem adresáře (**): {0}.",
   "File_specification_cannot_end_in_a_recursive_directory_wildcard_Asterisk_Asterisk_Colon_0_5010": "Specifikace souboru nemůže končit rekurzivním zástupným znakem adresáře (**): {0}.",
+  "Filters_results_from_the_include_option_6627": "Filtrovat výsledky možnosti „zahrnout“.",
   "Fix_all_detected_spelling_errors_95026": "Opravit všechny zjištěné pravopisné chyby",
   "Fix_all_expressions_possibly_missing_await_95085": "Opravit všechny výrazy, kde je možné, že chybí await",
   "Fix_all_implicit_this_errors_95107": "Opravit všechny chyby implicit-'this'",
   "Fix_all_incorrect_return_type_of_an_async_functions_90037": "Opravit všechny nesprávné návratové typy asynchronních funkcí",
+  "For_await_loops_cannot_be_used_inside_a_class_static_block_18038": "Smyčky „For await“ nejde použít uvnitř statického bloku třídy.",
   "Found_0_errors_6217": "Našel se tento počet chyb: {0}.",
   "Found_0_errors_Watching_for_file_changes_6194": "Byl nalezen tento počet chyb: {0}. Sledují se změny souborů.",
   "Found_1_error_6216": "Našla se 1 chyba.",
@@ -610,11 +728,14 @@
   "Function_implementation_name_must_be_0_2389": "Název implementace funkce musí být {0}.",
   "Function_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_ref_7024": "Funkce implicitně obsahuje návratový typ any, protože neobsahuje anotaci návratového typu a odkazuje se na ni přímo nebo nepřímo v jednom z jejích návratových výrazů.",
   "Function_lacks_ending_return_statement_and_return_type_does_not_include_undefined_2366": "Ve funkci chybí koncový příkaz return a návratový typ neobsahuje undefined.",
+  "Function_not_implemented_95159": "Funkce není implementovaná.",
   "Function_overload_must_be_static_2387": "Přetížení funkce musí být statické.",
   "Function_overload_must_not_be_static_2388": "Přetížení funkce nesmí být statické.",
   "Function_type_notation_must_be_parenthesized_when_used_in_a_union_type_1385": "Když se notace typu funkce používá v typu sjednocení, musí být uzavřená do závorky.",
   "Function_type_notation_must_be_parenthesized_when_used_in_an_intersection_type_1387": "Když se notace typu funkce používá v typu průniku, musí být uzavřená do závorky.",
   "Function_type_which_lacks_return_type_annotation_implicitly_has_an_0_return_type_7014": "Typ funkce s chybějící anotací návratového typu má implicitně návratový typ {0}.",
+  "Function_with_bodies_can_only_merge_with_classes_that_are_ambient_2814": "Funkce s těly se dá sloučit jenom s třídami, které jsou ambientní.",
+  "Generate_d_ts_files_from_TypeScript_and_JavaScript_files_in_your_project_6612": "Vygenerujte ze souborů TypeScriptu a JavaScriptu projektu soubory d.ts.",
   "Generate_get_and_set_accessors_95046": "Generovat přístupové objekty get a set",
   "Generate_get_and_set_accessors_for_all_overriding_properties_95119": "Generovat přístupové objekty get a set pro všechny přepisující vlastnosti",
   "Generates_a_CPU_profile_6223": "Vygeneruje profil procesoru.",
@@ -627,13 +748,13 @@
   "Generators_are_only_available_when_targeting_ECMAScript_2015_or_higher_1220": "Generátory jsou dostupné jenom při cílení na ECMAScript 2015 nebo novější.",
   "Generic_type_0_requires_1_type_argument_s_2314": "Obecný typ {0} vyžaduje argumenty typu {1}.",
   "Generic_type_0_requires_between_1_and_2_type_arguments_2707": "Obecný typ {0} vyžaduje konkrétní počet argumentů ({1} až {2}).",
-  "Getter_and_setter_accessors_do_not_agree_in_visibility_2379": "Viditelnost přístupových objektů getter a setter vzájemně nesouhlasí.",
   "Global_module_exports_may_only_appear_at_top_level_1316": "Exporty globálního modulu se můžou objevit jenom na nejvyšší úrovni.",
   "Global_module_exports_may_only_appear_in_declaration_files_1315": "Exporty globálního modulu se můžou objevit jenom v souborech deklarací.",
   "Global_module_exports_may_only_appear_in_module_files_1314": "Exporty globálního modulu se můžou objevit jenom v souborech modulů.",
   "Global_type_0_must_be_a_class_or_interface_type_2316": "Globální typ {0} musí být typu třída nebo rozhraní.",
   "Global_type_0_must_have_1_type_parameter_s_2317": "Globální typ {0} musí mít parametry typu {1}.",
   "Have_recompiles_in_incremental_and_watch_assume_that_changes_within_a_file_will_only_affect_files_di_6384": "Opakované kompilace --incremental a --watch předpokládají, že změny v souboru budou mít vliv jen na soubory, které na něm přímo závisejí.",
+  "Have_recompiles_in_projects_that_use_incremental_and_watch_mode_assume_that_changes_within_a_file_wi_6606": "Opakované kompilace projektů, které používají režim „incremental“ nebo „watch“ budou předpokládat, že změny souboru ovlivní jenom ty soubory, které na něm přímo závisejí.",
   "Hexadecimal_digit_expected_1125": "Očekávala se šestnáctková číslice.",
   "Identifier_expected_0_is_a_reserved_word_at_the_top_level_of_a_module_1262": "Očekával se identifikátor. {0} je vyhrazené slovo na nejvyšší úrovni modulu.",
   "Identifier_expected_0_is_a_reserved_word_in_strict_mode_1212": "Očekával se identifikátor. Ve striktním režimu je {0} rezervované slovo.",
@@ -642,8 +763,9 @@
   "Identifier_expected_0_is_a_reserved_word_that_cannot_be_used_here_1359": "Očekává se identifikátor. {0} je rezervované slovo, které se tady nedá použít.",
   "Identifier_expected_1003": "Očekával se identifikátor.",
   "Identifier_expected_esModule_is_reserved_as_an_exported_marker_when_transforming_ECMAScript_modules_1216": "Očekává se identifikátor. __esModule je při transformaci modulů ECMAScript rezervované jako označení exportu.",
-  "If_the_0_package_actually_exposes_this_module_consider_sending_a_pull_request_to_amend_https_Colon_S_7040": "Pokud balíček {0} ve skutečnosti zveřejňuje tento modul, zvažte možnost poslat žádost o přijetí změn, aby se připojila adresa https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/{1}.",
+  "If_the_0_package_actually_exposes_this_module_consider_sending_a_pull_request_to_amend_https_Colon_S_7040": "Pokud balíček ‚{0}‘ ve skutečnosti zveřejňuje tento modul, zvažte možnost poslat žádost o přijetí změn, aby se připojila adresa ‚https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/{1}‘",
   "Ignore_this_error_message_90019": "Ignorovat tuto chybovou zprávu",
+  "Ignoring_tsconfig_json_compiles_the_specified_files_with_default_compiler_options_6924": "Ignoruje se tsconfig.js, zkompiluje zadané soubory s výchozími možnostmi kompilátoru.",
   "Implement_all_inherited_abstract_classes_95040": "Implementovat všechny zděděné abstraktní třídy",
   "Implement_all_unimplemented_interfaces_95032": "Implementovat všechna neimplementovaná rozhraní",
   "Implement_inherited_abstract_class_90007": "Implementovat zděděnou abstraktní třídu",
@@ -660,14 +782,23 @@
   "Import_may_be_converted_to_a_default_import_80003": "Import se může převést na výchozí import.",
   "Import_name_cannot_be_0_2438": "Název importu nemůže být {0}.",
   "Import_or_export_declaration_in_an_ambient_module_declaration_cannot_reference_module_through_relati_2439": "Deklarace importu nebo exportu v deklaraci ambientního modulu nemůže odkazovat na modul pomocí jeho relativního názvu.",
+  "Imported_via_0_from_file_1_1393": "Importováno přes {0} ze souboru {1}",
+  "Imported_via_0_from_file_1_to_import_importHelpers_as_specified_in_compilerOptions_1395": "Importováno přes {0} ze souboru {1}, aby se provedl import importHelpers tak, jak je to zadáno v compilerOptions",
+  "Imported_via_0_from_file_1_to_import_jsx_and_jsxs_factory_functions_1397": "Importováno přes {0} ze souboru {1}, aby se provedl import výrobních funkcí jsx a jsxs",
+  "Imported_via_0_from_file_1_with_packageId_2_1394": "Importováno přes {0} ze souboru {1} s packageId {2}",
+  "Imported_via_0_from_file_1_with_packageId_2_to_import_importHelpers_as_specified_in_compilerOptions_1396": "Importováno přes {0} ze souboru {1} s packageId {2}, aby se provedl import importHelpers tak, jak je to zadáno v compilerOptions",
+  "Imported_via_0_from_file_1_with_packageId_2_to_import_jsx_and_jsxs_factory_functions_1398": "Importováno přes {0} ze souboru {1} s packageId {2}, aby se provedl import výrobních funkcí jsx a jsxs",
   "Imports_are_not_permitted_in_module_augmentations_Consider_moving_them_to_the_enclosing_external_mod_2667": "Importy nejsou povolené v rozšířeních modulů. Zvažte jejich přesunutí do uzavírajícího externího modulu.",
   "In_ambient_enum_declarations_member_initializer_must_be_constant_expression_1066": "Inicializátor členu v deklaracích ambientního výčtu musí být konstantní výraz.",
   "In_an_enum_with_multiple_declarations_only_one_declaration_can_omit_an_initializer_for_its_first_enu_2432": "Ve výčtu s víc deklaracemi může být jenom u jedné deklarace vynechaný inicializátor u prvního elementu výčtu.",
+  "Include_a_list_of_files_This_does_not_support_glob_patterns_as_opposed_to_include_6635": "Zahrnout seznam souborů. Tato možnost, na rozdíl od možnosti „include“, nepodporuje vzory glob.",
   "Include_modules_imported_with_json_extension_6197": "Zahrnout moduly importované s příponou .json",
-  "Include_undefined_in_index_signature_results_6800": "Zahrnout položku undefined do výsledků signatury indexu",
+  "Include_source_code_in_the_sourcemaps_inside_the_emitted_JavaScript_6644": "Do souborů sourcemap v generovaném JavaScriptu zahrňte zdrojový kód.",
+  "Include_sourcemap_files_inside_the_emitted_JavaScript_6643": "Zahrňte do generovaného JavaScriptu soubory sourcemap.",
+  "Include_undefined_in_index_signature_results_6716": "Zahrnout položku undefined do výsledků signatury indexu",
+  "Including_watch_w_will_start_watching_the_current_project_for_the_file_changes_Once_set_you_can_conf_6914": "Včetně --watch, -w začne sledovat aktuální projekt ohledně změn souboru. Po nastavení můžete konfigurovat režim sledování pomocí:",
+  "Index_signature_for_type_0_is_missing_in_type_1_2329": "Signatura indexu pro typ {0} chybí v typu {1}.",
   "Index_signature_in_type_0_only_permits_reading_2542": "Signatura indexu v typu {0} povoluje jen čtení.",
-  "Index_signature_is_missing_in_type_0_2329": "V typu {0} chybí signatura indexu.",
-  "Index_signatures_are_incompatible_2330": "Signatury indexu jsou nekompatibilní.",
   "Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local_2395": "Jednotlivé deklarace ve sloučené deklaraci {0} musí být všechny exportované nebo všechny místní.",
   "Infer_all_types_from_usage_95023": "Odvodit všechny typy z použití",
   "Infer_function_return_type_95148": "Odvodit návratový typ funkce",
@@ -676,6 +807,7 @@
   "Infer_type_of_0_from_usage_95011": "Odvodit typ {0} z využití",
   "Initialize_property_0_in_the_constructor_90020": "Inicializovat vlastnost {0} v konstruktoru",
   "Initialize_static_property_0_90021": "Inicializovat statickou vlastnost {0}",
+  "Initializer_for_property_0_2811": "Inicializátor vlastnosti „{0}“",
   "Initializer_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor_2301": "Inicializátor instance členské proměnné {0} nemůže odkazovat na identifikátor {1} deklarovaný v konstruktoru.",
   "Initializer_provides_no_value_for_this_binding_element_and_the_binding_element_has_no_default_value_2525": "Inicializátor tomuto elementu vazby neposkytuje žádnou hodnotu. Element vazby nemá žádnou výchozí hodnotu.",
   "Initializers_are_not_allowed_in_ambient_contexts_1039": "Inicializátory nejsou povolené v ambientních kontextech.",
@@ -686,12 +818,16 @@
   "Interface_0_cannot_simultaneously_extend_types_1_and_2_2320": "Rozhraní {0} nemůže současně rozšiřovat typ {1} i {2}.",
   "Interface_0_incorrectly_extends_interface_1_2430": "Rozhraní {0} nesprávně rozšiřuje rozhraní {1}.",
   "Interface_declaration_cannot_have_implements_clause_1176": "Deklarace rozhraní nemůže obsahovat klauzuli implements.",
+  "Interface_must_be_given_a_name_1438": "Rozhraní musí mít název.",
   "Interface_name_cannot_be_0_2427": "Název rozhraní nemůže být {0}.",
+  "Interop_Constraints_6252": "Omezení spolupráce",
+  "Interpret_optional_property_types_as_written_rather_than_adding_undefined_6243": "Interpretujte volitelné typy vlastností jako zapsané, místo přidání „undefined“.",
   "Invalid_character_1127": "Neplatný znak",
   "Invalid_module_name_in_augmentation_Module_0_resolves_to_an_untyped_module_at_1_which_cannot_be_augm_2665": "Neplatný název modulu v rozšíření. Modul {0} se převede na netypový modul v {1}, který se nedá rozšířit.",
   "Invalid_module_name_in_augmentation_module_0_cannot_be_found_2664": "V rozšíření je neplatný název modulu, modul {0} se nedá najít.",
   "Invalid_reference_directive_syntax_1084": "Neplatná syntaxe direktivy reference",
   "Invalid_use_of_0_Class_definitions_are_automatically_in_strict_mode_1210": "Neplatné použití {0}. Definice tříd jsou automaticky ve striktním režimu.",
+  "Invalid_use_of_0_It_cannot_be_used_inside_a_class_static_block_18039": "Neplatné použití „{0}“. Nelze jej použít uvnitř statického bloku třídy.",
   "Invalid_use_of_0_Modules_are_automatically_in_strict_mode_1215": "Neplatné použití {0}. Moduly jsou automaticky ve striktním režimu.",
   "Invalid_use_of_0_in_strict_mode_1100": "Neplatné použití {0} ve striktním režimu",
   "Invalid_value_for_jsxFactory_0_is_not_a_valid_identifier_or_qualified_name_5067": "Neplatná hodnota pro jsxFactory. {0} není platný identifikátor nebo kvalifikovaný název.",
@@ -723,13 +859,18 @@
   "JSX_expressions_may_not_use_the_comma_operator_Did_you_mean_to_write_an_array_18007": "Výrazy JSX nemůžou používat operátor čárky. Nechtěli jste napsat pole?",
   "JSX_expressions_must_have_one_parent_element_2657": "Výrazy JSX musí mít jeden nadřazený element.",
   "JSX_fragment_has_no_corresponding_closing_tag_17014": "Fragment JSX nemá odpovídající uzavírací značku.",
+  "JSX_property_access_expressions_cannot_include_JSX_namespace_names_2633": "Výrazy přístupu k vlastnosti JSX nemůžou obsahovat názvy oborů názvů JSX.",
   "JSX_spread_child_must_be_an_array_type_2609": "Podřízený objekt JSX spread musí být typu pole.",
+  "JavaScript_Support_6247": "Podpora JavaScriptu",
   "Jump_target_cannot_cross_function_boundary_1107": "Cíl odkazu nemůže překročit hranici funkce.",
   "KIND_6034": "DRUH",
   "Keywords_cannot_contain_escape_characters_1260": "Klíčová slova nemůžou obsahovat řídicí znaky.",
   "LOCATION_6037": "UMÍSTĚNÍ",
+  "Language_and_Environment_6254": "Jazyk a prostředí",
   "Language_service_is_disabled_9004": "Služba jazyka je zakázaná.",
   "Left_side_of_comma_operator_is_unused_and_has_no_side_effects_2695": "Levá strana operátoru čárky se nepoužívá a nemá žádné vedlejší účinky.",
+  "Library_0_specified_in_compilerOptions_1422": "Knihovna {0} zadaná v compilerOptions",
+  "Library_referenced_via_0_from_file_1_1405": "Knihovna odkazovaná přes {0} ze souboru {1}",
   "Line_break_not_permitted_here_1142": "Na tomto místě se konec řádku nepovoluje.",
   "Line_terminator_not_permitted_before_arrow_1200": "Konec řádku před šipkou se nepovoluje.",
   "List_of_folders_to_include_type_definitions_from_6161": "Seznam složek, ze kterých se zahrnou definice typů",
@@ -739,11 +880,14 @@
   "Loading_module_0_from_node_modules_folder_target_file_type_1_6098": "Načítá se modul {0} ze složky node_modules. Cílový typ souboru je {1}.",
   "Loading_module_as_file_Slash_folder_candidate_module_location_0_target_file_type_1_6095": "Načítá se modul jako soubor/složka, umístění kandidátského modulu: {0}, cílový typ souboru: {1}.",
   "Locale_must_be_of_the_form_language_or_language_territory_For_example_0_or_1_6048": "Národní prostředí musí mít tvar <jazyk> nebo <jazyk>–<oblast>. Třeba {0} nebo {1}.",
+  "Log_paths_used_during_the_moduleResolution_process_6706": "Cesty k protokolům používané v procesu moduleResolution.",
   "Longest_matching_prefix_for_0_is_1_6108": "Nejdelší odpovídající předpona pro {0} je {1}.",
   "Looking_up_in_node_modules_folder_initial_location_0_6125": "Hledání ve složce node_modules, počáteční umístění {0}",
   "Make_all_super_calls_the_first_statement_in_their_constructor_95036": "Nastavit všechna volání metody super() prvním příkazem v jejich konstruktoru",
+  "Make_keyof_only_return_strings_instead_of_string_numbers_or_symbols_Legacy_option_6650": "Vytvořte klíč jenom ze zpětných řetězců místo z řetězců, čísel nebo symbolů (možnost ze starší verze).",
   "Make_super_call_the_first_statement_in_the_constructor_90002": "Nastavit volání metody super() jako první příkaz v konstruktoru",
   "Mapped_object_type_implicitly_has_an_any_template_type_7039": "Typu mapovaného objektu má implicitně typ šablony any.",
+  "Matched_by_include_pattern_0_in_1_1407": "Porovnáváno podle vzoru zahrnutí {0} v {1}",
   "Member_0_implicitly_has_an_1_type_7008": "Člen {0} má implicitně typ {1}.",
   "Member_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage_7045": "Člen {0} má implicitně typ {1}, ale je možné, že lepší typ by se vyvodil z použití.",
   "Merge_conflict_marker_encountered_1185": "Zjistila se značka konfliktu sloučení.",
@@ -752,6 +896,7 @@
   "Method_0_cannot_have_an_implementation_because_it_is_marked_abstract_1245": "Metoda {0} nemůže mít implementaci, protože je označená jako abstraktní.",
   "Method_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2_4101": "Metoda {0} z exportovaného rozhraní má nebo používá název {1} z privátního modulu {2}.",
   "Method_0_of_exported_interface_has_or_is_using_private_name_1_4102": "Metoda {0} z exportovaného rozhraní má nebo používá privátní název {1}.",
+  "Method_not_implemented_95158": "Metoda není implementovaná.",
   "Modifiers_cannot_appear_here_1184": "Tady nejde použít modifikátory.",
   "Module_0_can_only_be_default_imported_using_the_1_flag_1259": "Modul {0} se dá importovat podle výchozího nastavení jen pomocí příznaku {1}.",
   "Module_0_declares_1_locally_but_it_is_exported_as_2_2460": "Modul {0} deklaruje {1} místně, ale exportuje se jako {2}.",
@@ -769,13 +914,14 @@
   "Module_0_was_resolved_as_locally_declared_ambient_module_in_file_1_6144": "Modul {0} se převedl jako lokálně deklarovaný ambientní modul v souboru {1}.",
   "Module_0_was_resolved_to_1_but_jsx_is_not_set_6142": "Modul {0} se přeložil na {1}, není ale nastavená možnost --jsx.",
   "Module_0_was_resolved_to_1_but_resolveJsonModule_is_not_used_7042": "Modul {0} se přeložil na {1}, ale nepoužívá se --resolveJsonModule.",
-  "Module_Resolution_Options_6174": "Možnosti překladu modulů",
+  "Module_declaration_names_may_only_use_or_quoted_strings_1443": "Názvy deklarací modulů můžou používat jenom řetězce v jednoduchých nebo dvojitých uvozovkách.",
   "Module_name_0_matched_pattern_1_6092": "Název modulu {0}, odpovídající vzor {1}",
   "Module_name_0_was_not_resolved_6090": "======== Název modulu {0} nebyl přeložen. ========",
   "Module_name_0_was_successfully_resolved_to_1_6089": "======== Název modulu {0} byl úspěšně přeložen na {1}. ========",
   "Module_name_0_was_successfully_resolved_to_1_with_Package_ID_2_6218": "======== Název modulu {0} se úspěšně přeložil na {1} s ID balíčku {2}. ========",
   "Module_resolution_kind_is_not_specified_using_0_6088": "Druh překladu modulu nebyl určen, použije se {0}.",
   "Module_resolution_using_rootDirs_has_failed_6111": "Překlad modulu pomocí rootDirs se nepovedl.",
+  "Modules_6244": "Moduly",
   "Move_labeled_tuple_element_modifiers_to_labels_95117": "Přesunout modifikátory elementu popsané řazené kolekce členů na popisky",
   "Move_to_a_new_file_95049": "Přesunout do nového souboru",
   "Multiple_consecutive_numeric_separators_are_not_permitted_6189": "Více po sobě jdoucích číselných oddělovačů se nepovoluje.",
@@ -784,11 +930,14 @@
   "Name_is_not_valid_95136": "Název není platný.",
   "Named_property_0_of_types_1_and_2_are_not_identical_2319": "Pojmenovaná vlastnost {0} není u typu {1} stejná jako u typu {2}.",
   "Namespace_0_has_no_exported_member_1_2694": "Obor názvů {0} nemá žádný exportovaný člen {1}.",
+  "Namespace_must_be_given_a_name_1437": "Obor názvů musí mít název.",
+  "Namespace_name_cannot_be_0_2819": "Název oboru názvů nemůže být „{0}“.",
   "No_base_constructor_has_the_specified_number_of_type_arguments_2508": "Žádný základní konstruktor nemá zadaný počet argumentů typu.",
   "No_constituent_of_type_0_is_callable_2755": "Žádný konstituent typu {0} se nedá zavolat.",
   "No_constituent_of_type_0_is_constructable_2759": "Žádný konstituent typu {0} se nedá vytvořit.",
   "No_index_signature_with_a_parameter_of_type_0_was_found_on_type_1_7054": "V typu {1} se nenašla žádná signatura indexu s typem parametru {0}.",
   "No_inputs_were_found_in_config_file_0_Specified_include_paths_were_1_and_exclude_paths_were_2_18003": "V konfiguračním souboru {0} se nenašly žádné vstupy. Pro zahrnutí jsou zadané tyto cesty: {1} a pro vyloučení tyto cesty: {2}.",
+  "No_longer_supported_In_early_versions_manually_set_the_text_encoding_for_reading_files_6608": "Funkce už není podporovaná. Ve starších verzích sloužila k ručnímu nastavení kódování textu při čtení souborů.",
   "No_overload_expects_0_arguments_but_overloads_do_exist_that_expect_either_1_or_2_arguments_2575": "Žádné přetížení neočekává tento počet argumentů: {0}. Existují ale přetížení, která očekávají buď {1}, nebo tento počet argumentů: {2}",
   "No_overload_expects_0_type_arguments_but_overloads_do_exist_that_expect_either_1_or_2_type_arguments_2743": "Žádné přetížení neočekává tento počet argumentů typů: {0}. Existují ale přetížení, která očekávají buď {1}, nebo tento počet argumentů typů: {2}",
   "No_overload_matches_this_call_2769": "Žádné přetížení neodpovídá tomuto volání.",
@@ -802,7 +951,6 @@
   "Not_all_code_paths_return_a_value_7030": "Ne všechny cesty kódu vracejí hodnotu.",
   "Not_all_constituents_of_type_0_are_callable_2756": "Ne všichni konstituenti typu {0} se dají zavolat.",
   "Not_all_constituents_of_type_0_are_constructable_2760": "Ne všichni konstituenti typu {0} se dají vytvořit.",
-  "Numeric_index_type_0_is_not_assignable_to_string_index_type_1_2413": "Typ číselného indexu {0} se nedá přiřadit k typu indexu řetězce {1}.",
   "Numeric_literals_with_absolute_values_equal_to_2_53_or_greater_are_too_large_to_be_represented_accur_80008": "Číselné literály s absolutními hodnotami, které se rovnají hodnotě 2^53 nebo větší, se nedají reprezentovat přesně jako celá čísla, protože jsou příliš velké.",
   "Numeric_separators_are_not_allowed_here_6188": "Číselné oddělovače tady nejsou povolené.",
   "Object_is_of_type_unknown_2571": "Objekt je typu Neznámý.",
@@ -826,9 +974,11 @@
   "Only_identifiers_Slashqualified_names_with_optional_type_arguments_are_currently_supported_in_a_clas_9002": "V klauzuli třídy extends se aktuálně podporují jenom identifikátory nebo kvalifikované názvy s volitelnými argumenty typu.",
   "Only_named_exports_may_use_export_type_1383": "Jen pojmenované exporty můžou používat export type.",
   "Only_numeric_enums_can_have_computed_members_but_this_expression_has_type_0_If_you_do_not_need_exhau_18033": "Počítané členy můžou obsahovat jen číselné výčty, ale tento výraz je typu {0}. Pokud nepotřebujete kontroly úplnosti, zvažte místo něho použít objekt literálu.",
+  "Only_output_d_ts_files_and_not_JavaScript_files_6623": "Zahrňte do výstupu jenom soubory d.ts, nikoli soubory JavaScriptu.",
   "Only_public_and_protected_methods_of_the_base_class_are_accessible_via_the_super_keyword_2340": "Prostřednictvím klíčového slova super jsou přístupné jenom veřejné a chráněné metody základní třídy.",
   "Operator_0_cannot_be_applied_to_type_1_2736": "Operátor {0} se nedá použít na typ {1}.",
   "Operator_0_cannot_be_applied_to_types_1_and_2_2365": "Operátor {0} nejde použít u typů {1} a {2}.",
+  "Opt_a_project_out_of_multi_project_reference_checking_when_editing_6619": "Při úpravách vyloučit projekt z kontroly odkazů ve více projektech.",
   "Option_0_can_only_be_specified_in_tsconfig_json_file_or_set_to_false_or_null_on_command_line_6230": "Možnost {0} jde zadat jenom v souboru tsconfig.json nebo nastavit na příkazovém řádku na hodnotu false nebo null.",
   "Option_0_can_only_be_specified_in_tsconfig_json_file_or_set_to_null_on_command_line_6064": "Možnost {0} jde zadat jenom v souboru tsconfig.json nebo nastavit na příkazovém řádku na hodnotu null.",
   "Option_0_can_only_be_used_when_either_option_inlineSourceMap_or_option_sourceMap_is_provided_5051": "Možnost {0} jde použít jenom při zadání možnosti --inlineSourceMap nebo možnosti --sourceMap.",
@@ -839,16 +989,22 @@
   "Option_0_cannot_be_specified_without_specifying_option_1_or_option_2_5069": "Možnost {0} nejde zadat bez možnosti {1} nebo {2}.",
   "Option_0_should_have_array_of_strings_as_a_value_6103": "Hodnota možnosti {0} by měla být pole řetězců.",
   "Option_build_must_be_the_first_command_line_argument_6369": "Možnost --build musí být prvním argumentem příkazového řádku.",
-  "Option_incremental_can_only_be_specified_using_tsconfig_emitting_to_single_file_or_when_option_tsBui_5074": "Možnost --incremental se dá zadat jen pomocí tsconfig, při generování do jednoho souboru nebo když se zadá možnost --tsBuildInfoFile.",
+  "Option_incremental_can_only_be_specified_using_tsconfig_emitting_to_single_file_or_when_option_tsBui_5074": "Možnost ‚--incremental‘ se dá zadat jen pomocí tsconfig, při generování do jednoho souboru nebo když se zadá možnost ‚--tsBuildInfoFile‘.",
   "Option_isolatedModules_can_only_be_used_when_either_option_module_is_provided_or_option_target_is_ES_5047": "Možnost isolatedModules jde použít jenom v případě, že je poskytnutá možnost --module nebo že možnost target je ES2015 nebo vyšší verze.",
+  "Option_preserveConstEnums_cannot_be_disabled_when_isolatedModules_is_enabled_5091": "Když je povolená možnost isolatedModules, možnost preserveConstEnums se nedá zakázat.",
   "Option_project_cannot_be_mixed_with_source_files_on_a_command_line_5042": "Možnost project se na příkazovém řádku nedá kombinovat se zdrojovým souborem.",
   "Option_resolveJsonModule_can_only_be_specified_when_module_code_generation_is_commonjs_amd_es2015_or_5071": "Možnost --resolveJsonModule se dá zadat jen v případě, že generování kódu modulu je commonjs, amd, es2015 nebo esNext.",
   "Option_resolveJsonModule_cannot_be_specified_without_node_module_resolution_strategy_5070": "Možnost --resolveJsonModule se nedá zadat bez strategie překladu modulu node.",
   "Options_0_and_1_cannot_be_combined_6370": "Možnosti {0} a {1} nejde kombinovat.",
   "Options_Colon_6027": "Možnosti:",
+  "Output_Formatting_6256": "Formátování výstupu",
+  "Output_compiler_performance_information_after_building_6615": "Po sestavení generovat informace o výkonu kompilátoru.",
   "Output_directory_for_generated_declaration_files_6166": "Výstupní adresář pro vygenerované soubory deklarace",
   "Output_file_0_from_project_1_does_not_exist_6309": "Výstupní soubor {0} z projektu {1} neexistuje.",
   "Output_file_0_has_not_been_built_from_source_file_1_6305": "Výstupní soubor {0} se nesestavil ze zdrojového souboru {1}.",
+  "Output_from_referenced_project_0_included_because_1_specified_1411": "Výstup z odkazovaného projektu {0}, který se zahrnul, protože je zadané {1}",
+  "Output_from_referenced_project_0_included_because_module_is_specified_as_none_1412": "Výstup z odkazovaného projektu {0}, který se zahrnul, protože možnost --module se nastavila na none",
+  "Output_more_detailed_compiler_performance_information_after_building_6632": "Do výstupu po sestavení zahrňte podrobnější informace o výkonu kompilátoru.",
   "Overload_0_of_1_2_gave_the_following_error_2772": "Přetížení {0} z {1}, {2}, vrátilo následující chybu.",
   "Overload_signatures_must_all_be_abstract_or_non_abstract_2512": "Signatury přetížení musí být všechny abstraktní nebo neabstraktní.",
   "Overload_signatures_must_all_be_ambient_or_non_ambient_2384": "Signatury přetížení musí být všechny ambientní nebo neambientní.",
@@ -892,18 +1048,25 @@
   "Parameter_type_of_public_static_setter_0_from_exported_class_has_or_is_using_name_1_from_private_mod_4034": "Typ parametru veřejné statické metody setter {0} z exportované třídy má nebo používá název {1} z privátního modulu {2}.",
   "Parameter_type_of_public_static_setter_0_from_exported_class_has_or_is_using_private_name_1_4035": "Typ parametru veřejné statické metody setter {0} z exportované třídy má nebo používá privátní název {1}.",
   "Parse_in_strict_mode_and_emit_use_strict_for_each_source_file_6141": "Parsovat ve striktním režimu a generovat striktní používání pro každý zdrojový soubor",
+  "Part_of_files_list_in_tsconfig_json_1409": "Součást seznamu files v souboru tsconfig.json",
   "Pattern_0_can_have_at_most_one_Asterisk_character_5061": "Vzor {0} může obsahovat nanejvýš jeden znak * (hvězdička).",
   "Performance_timings_for_diagnostics_or_extendedDiagnostics_are_not_available_in_this_session_A_nativ_6386": "Časování výkonu pro --diagnostics nebo --extendedDiagnostics nejsou v této relaci k dispozici. Nepovedlo se najít nativní implementace rozhraní Web Performance API.",
+  "Platform_specific_6912": "Specifická pro platformu",
   "Prefix_0_with_an_underscore_90025": "Předpona {0} s podtržítkem",
   "Prefix_all_incorrect_property_declarations_with_declare_95095": "Před všechny nesprávné deklarace vlastností přidejte declare.",
   "Prefix_all_unused_declarations_with_where_possible_95025": "Přidat příponu _ ke všem nepoužívaným deklaracím tam, kde je to možné",
   "Prefix_with_declare_95094": "Přidat předponu declare",
+  "Print_all_of_the_files_read_during_the_compilation_6653": "Vytiskněte si všechny soubory přečtené při kompilaci.",
+  "Print_files_read_during_the_compilation_including_why_it_was_included_6631": "Vytiskněte si soubory přečtené při kompilaci, včetně důvodu jejich zahrnutí.",
+  "Print_names_of_files_and_the_reason_they_are_part_of_the_compilation_6505": "Umožňuje vypsat názvy souborů a důvod, proč jsou součástí kompilace.",
   "Print_names_of_files_part_of_the_compilation_6155": "Část kompilace, při které se vypisují názvy souborů",
   "Print_names_of_files_that_are_part_of_the_compilation_and_then_stop_processing_6503": "Vypsat názvy souborů, které jsou součástí kompilace, a pak ukončit zpracovávání",
   "Print_names_of_generated_files_part_of_the_compilation_6154": "Část kompilace, při které se vypisují názvy generovaných souborů",
   "Print_the_compiler_s_version_6019": "Vytisknout verzi kompilátoru",
   "Print_the_final_configuration_instead_of_building_1350": "Místo sestavení vypsat konečnou konfiguraci",
+  "Print_the_names_of_emitted_files_after_a_compilation_6652": "Po kompilaci vytiskněte názvy generovaných souborů.",
   "Print_this_message_6017": "Vytisknout tuto zprávu",
+  "Private_accessor_was_defined_without_a_getter_2806": "Privátní přístupový objekt se definoval bez metody getter.",
   "Private_identifiers_are_not_allowed_in_variable_declarations_18029": "Privátní identifikátory se v deklaracích proměnných nepovolují.",
   "Private_identifiers_are_not_allowed_outside_class_bodies_18016": "Privátní identifikátory se mimo těla tříd nepovolují.",
   "Private_identifiers_are_only_available_when_targeting_ECMAScript_2015_and_higher_18028": "Privátní identifikátory jsou dostupné jen při cílení na ECMAScript 2015 a novější.",
@@ -911,6 +1074,7 @@
   "Private_or_protected_member_0_cannot_be_accessed_on_a_type_parameter_4105": "K privátnímu nebo chráněnému členu {0} se nedá přistupovat v parametru typu.",
   "Project_0_can_t_be_built_because_its_dependency_1_has_errors_6363": "Projekt {0} nejde sestavit, protože jeho závislost {1} obsahuje chyby.",
   "Project_0_can_t_be_built_because_its_dependency_1_was_not_built_6383": "Projekt {0} nejde sestavit, protože se nesestavila jeho závislost {1}.",
+  "Project_0_is_being_forcibly_rebuilt_6388": "Projekt {0} se nuceně vytváří znovu.",
   "Project_0_is_out_of_date_because_its_dependency_1_is_out_of_date_6353": "Projekt {0} je zastaralý, protože jeho závislost {1} je zastaralá.",
   "Project_0_is_out_of_date_because_oldest_output_1_is_older_than_newest_input_2_6350": "Projekt {0} je zastaralý, protože nejstarší výstup {1} je starší než nejnovější vstup {2}.",
   "Project_0_is_out_of_date_because_output_file_1_does_not_exist_6352": "Projekt {0} je zastaralý, protože výstupní soubor {1} neexistuje.",
@@ -920,14 +1084,18 @@
   "Project_0_is_up_to_date_because_newest_input_1_is_older_than_oldest_output_2_6351": "Projekt {0} je aktuální, protože nejnovější vstup {1} je starší než nejstarší výstup {2}.",
   "Project_0_is_up_to_date_with_d_ts_files_from_its_dependencies_6354": "Projekt {0} je aktualizovaný soubory .d.ts z jeho závislostí.",
   "Project_references_may_not_form_a_circular_graph_Cycle_detected_Colon_0_6202": "Odkazy projektu nemůžou tvořit cyklický graf. Zjistil se cyklus: {0}",
+  "Projects_6255": "Projekty",
   "Projects_in_this_build_Colon_0_6355": "Projekty v tomto sestavení: {0}",
   "Projects_to_reference_6300": "Projekty, které se mají odkazovat",
+  "Property_0_cannot_have_an_initializer_because_it_is_marked_abstract_1267": "Vlastnost {0} nemůže mít inicializátor, protože je označená jako abstraktní.",
   "Property_0_comes_from_an_index_signature_so_it_must_be_accessed_with_0_4111": "Vlastnost {0} pochází ze signatury indexu, proto je zapotřebí k ní přistupovat pomocí ['{0}'].",
   "Property_0_does_not_exist_on_const_enum_1_2479": "Vlastnost {0} ve výčtu const {1} neexistuje.",
   "Property_0_does_not_exist_on_type_1_2339": "Vlastnost {0} v typu {1} neexistuje.",
   "Property_0_does_not_exist_on_type_1_Did_you_mean_2_2551": "Vlastnost {0} v typu {1} neexistuje. Měli jste na mysli {2}?",
   "Property_0_does_not_exist_on_type_1_Did_you_mean_to_access_the_static_member_2_instead_2576": "Vlastnost {0} v typu {1} neexistuje. Chtěli jste místo toho přistoupit ke statickému členu {2}?",
-  "Property_0_does_not_exist_on_type_1_Do_you_need_to_change_your_target_library_Try_changing_the_lib_c_2550": "Vlastnost {0} neexistuje u typu {1}. Potřebujete změnit cílovou knihovnu? Zkuste změnit možnost kompilátoru lib na {2} nebo novější.",
+  "Property_0_does_not_exist_on_type_1_Do_you_need_to_change_your_target_library_Try_changing_the_lib_c_2550": "Vlastnost ‚{0}‘ neexistuje u typu ‚{1}‘. Potřebujete změnit cílovou knihovnu? Zkuste změnit možnost kompilátoru ‚lib‘ na ‚{2}‘ nebo novější.",
+  "Property_0_does_not_exist_on_type_1_Try_changing_the_lib_compiler_option_to_include_dom_2812": "Vlastnost „{0}“ pro typ „{1}“ neexistuje. Zkuste změnit možnost kompilátoru „lib“, aby zahrnovala „dom“.",
+  "Property_0_has_no_initializer_and_is_not_definitely_assigned_in_a_class_static_block_2817": "Vlastnost „{0}“ nemá žádný inicializátor a není jednoznačně přiřazena ve statickém bloku třídy.",
   "Property_0_has_no_initializer_and_is_not_definitely_assigned_in_the_constructor_2564": "Vlastnost {0} nemá žádný inicializátor a není jednoznačně přiřazena v konstruktoru.",
   "Property_0_implicitly_has_type_any_because_its_get_accessor_lacks_a_return_type_annotation_7033": "Vlastnost {0} má implicitně typ any, protože její přistupující objekt get nemá anotaci návratového typu.",
   "Property_0_implicitly_has_type_any_because_its_set_accessor_lacks_a_parameter_type_annotation_7032": "Vlastnost {0} má implicitně typ any, protože její přistupující objekt set nemá anotaci parametrového typu.",
@@ -945,18 +1113,19 @@
   "Property_0_is_optional_in_type_1_but_required_in_type_2_2327": "Vlastnost {0} je v typu {1} nepovinná, ale vyžaduje se v typu {2}.",
   "Property_0_is_private_and_only_accessible_within_class_1_2341": "Vlastnost {0} je privátní a dostupná jenom ve třídě {1}.",
   "Property_0_is_private_in_type_1_but_not_in_type_2_2325": "Vlastnost {0} je v typu {1} privátní, ale v typu {2} ne.",
-  "Property_0_is_protected_and_only_accessible_through_an_instance_of_class_1_2446": "Vlastnost {0} je chráněná a je dostupná jenom přes instanci třídy {1}.",
+  "Property_0_is_protected_and_only_accessible_through_an_instance_of_class_1_This_is_an_instance_of_cl_2446": "Vlastnost {0} je chráněná a dá se k ní přistupovat jen přes instanci třídy {1}. Toto je instance třídy {2}.",
   "Property_0_is_protected_and_only_accessible_within_class_1_and_its_subclasses_2445": "Vlastnost {0} je chráněná a je dostupná jenom ve třídě {1} a jejích podtřídách.",
   "Property_0_is_protected_but_type_1_is_not_a_class_derived_from_2_2443": "Vlastnost {0} je chráněná, ale typ {1} není třída odvozená od {2}.",
   "Property_0_is_protected_in_type_1_but_public_in_type_2_2444": "Vlastnost {0} je v typu {1} chráněná, ale v typu {2} veřejná.",
   "Property_0_is_used_before_being_assigned_2565": "Vlastnost {0} je použitá před přiřazením.",
   "Property_0_is_used_before_its_initialization_2729": "Vlastnost {0} se používá dříve, než se inicializuje.",
+  "Property_0_may_not_be_used_in_a_static_property_s_initializer_in_the_same_class_when_target_is_esnex_2810": "Vlastnost „{0}“ se nedá použít v inicializátoru statické vlastnosti stejné třídy, když „cíl“ je „esnext“ a „useDefineForClassFields“ je „nepravda“.",
+  "Property_0_may_not_exist_on_type_1_Did_you_mean_2_2568": "Zdá se, že vlastnost {0} v typu {1} neexistuje. Měli jste na mysli {2}?",
   "Property_0_of_JSX_spread_attribute_is_not_assignable_to_target_property_2606": "Vlastnost {0} rozšířeného atributu JSX nejde přiřadit cílové vlastnosti.",
   "Property_0_of_exported_class_expression_may_not_be_private_or_protected_4094": "Vlastnost {0} exportovaného výrazu třídy nesmí být privátní nebo chráněná.",
   "Property_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2_4032": "Vlastnost {0} exportovaného rozhraní má nebo používá název {1} z privátního modulu {2}.",
   "Property_0_of_exported_interface_has_or_is_using_private_name_1_4033": "Vlastnost {0} exportovaného rozhraní má nebo používá privátní název {1}.",
-  "Property_0_of_type_1_is_not_assignable_to_numeric_index_type_2_2412": "Vlastnost {0} typu {1} se nedá přiřadit k typu číselného indexu {2}.",
-  "Property_0_of_type_1_is_not_assignable_to_string_index_type_2_2411": "Vlastnost {0} typu {1} se nedá přiřadit k typu indexu řetězce {2}.",
+  "Property_0_of_type_1_is_not_assignable_to_2_index_type_3_2411": "Vlastnost {0} typu {1} se nedá přiřadit k {2} typu indexu {3}.",
   "Property_0_was_also_declared_here_2733": "Vlastnost {0} se deklarovala i tady.",
   "Property_0_will_overwrite_the_base_property_in_1_If_this_is_intentional_add_an_initializer_Otherwise_2612": "Vlastnost {0} přepíše základní vlastnost v {1}. Pokud je to záměr, přidejte inicializátor. Jinak přidejte modifikátor declare nebo odeberte redundantní deklaraci.",
   "Property_assignment_expected_1136": "Očekává se přiřazení vlastnosti.",
@@ -978,12 +1147,18 @@
   "Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4027": "Veřejná statická vlastnost {0} exportované třídy má nebo používá název {1} z privátního modulu {2}.",
   "Public_static_property_0_of_exported_class_has_or_is_using_private_name_1_4028": "Veřejná statická vlastnost {0} exportované třídy má nebo používá privátní název {1}.",
   "Qualified_name_0_is_not_allowed_without_a_leading_param_object_1_8032": "Kvalifikovaný název {0} se nepovoluje bez @param {object} {1} na začátku.",
+  "Raise_an_error_when_a_function_parameter_isn_t_read_6676": "Oznámit chybu, pokud se parametr funkce nepodaří přečíst",
   "Raise_error_on_expressions_and_declarations_with_an_implied_any_type_6052": "Vyvolat chybu u výrazů a deklarací s implikovaným typem any",
   "Raise_error_on_this_expressions_with_an_implied_any_type_6115": "Vyvolá chybu u výrazů this s implikovaným typem any.",
   "Re_exporting_a_type_when_the_isolatedModules_flag_is_provided_requires_using_export_type_1205": "Opětovný export typu ve chvíli, kdy se poskytl příznak --isolatedModules, vyžaduje, aby se použilo export type.",
   "Redirect_output_structure_to_the_directory_6006": "Přesměrování výstupní struktury do adresáře",
+  "Reduce_the_number_of_projects_loaded_automatically_by_TypeScript_6617": "Snižte počet projektů, které TypeScript načítá automaticky.",
   "Referenced_project_0_may_not_disable_emit_6310": "Odkazovaný projekt {0} nemůže zakazovat generování.",
   "Referenced_project_0_must_have_setting_composite_Colon_true_6306": "Odkazovaný projekt {0} musí mít nastavení \"composite\": true.",
+  "Referenced_via_0_from_file_1_1400": "Odkazováno přes {0} ze souboru {1}",
+  "Remove_a_list_of_directories_from_the_watch_process_6628": "Odeberte z procesu sledování seznam adresářů.",
+  "Remove_a_list_of_files_from_the_watch_mode_s_processing_6629": "Ze zpracování režimu sledování odeberte seznam souborů.",
+  "Remove_all_unnecessary_override_modifiers_95163": "Odebrat všechny nepotřebné modifikátory override",
   "Remove_all_unnecessary_uses_of_await_95087": "Odebrat všechna nepotřebná použití výrazu await",
   "Remove_all_unreachable_code_95051": "Odebrat veškerý nedosažitelný kód",
   "Remove_all_unused_labels_95054": "Odebrat všechny nepoužívané popisky",
@@ -991,8 +1166,10 @@
   "Remove_braces_from_arrow_function_95060": "Odebrat složené závorky z funkce šipky",
   "Remove_braces_from_arrow_function_body_95112": "Odebrat složené závorky z těla funkce šipky",
   "Remove_import_from_0_90005": "Odebrat import z {0}",
+  "Remove_override_modifier_95161": "Odebrat modifikátor override",
   "Remove_parentheses_95126": "Odebrat závorky",
   "Remove_template_tag_90011": "Odebrat značku šablonu",
+  "Remove_the_20mb_cap_on_total_source_code_size_for_JavaScript_files_in_the_TypeScript_language_server_6618": "Odeberte limit 20 MB pro celkovou velikost zdrojového kódu souborů JavaScriptu na jazykovém serveru TypeScriptu.",
   "Remove_type_parameters_90012": "Odebrat parametry typů",
   "Remove_unnecessary_await_95086": "Odebrat nepotřebné výrazy await",
   "Remove_unreachable_code_95050": "Odebrat nedosažitelný kód",
@@ -1010,14 +1187,16 @@
   "Report_errors_in_js_files_8019": "Ohlásit chyby v souborech .js",
   "Report_errors_on_unused_locals_6134": "Umožňuje nahlásit chyby u nevyužitých místních hodnot.",
   "Report_errors_on_unused_parameters_6135": "Umožňuje nahlásit chyby u nevyužitých parametrů.",
-  "Require_undeclared_properties_from_index_signatures_to_use_element_accesses_6803": "Vyžadovat, aby nedeklarované vlastnosti ze signatur indexů používaly přístupy k elementům",
+  "Require_undeclared_properties_from_index_signatures_to_use_element_accesses_6717": "Vyžadovat, aby nedeklarované vlastnosti ze signatur indexů používaly přístupy k elementům",
   "Required_type_parameters_may_not_follow_optional_type_parameters_2706": "Požadované parametry typu nemůžou být až za volitelnými parametry typu.",
   "Resolution_for_module_0_was_found_in_cache_from_location_1_6147": "Překlad pro modul {0} se našel v mezipaměti umístění {1}.",
+  "Resolution_for_type_reference_directive_0_was_found_in_cache_from_location_1_6241": "Překlad pro direktivu odkazu na typ {0} se našel v mezipaměti umístění {1}.",
   "Resolve_keyof_to_string_valued_property_names_only_no_numbers_or_symbols_6195": "keyof překládejte jen na názvy vlastností s hodnotami typu string (ne čísla ani symboly).",
   "Resolving_from_node_modules_folder_6118": "Překládá se ze složky node_modules...",
   "Resolving_module_0_from_1_6086": "======== Překládá se modul {0} z {1}. ========",
   "Resolving_module_name_0_relative_to_base_url_1_2_6094": "Překládá se název modulu {0} relativní k základní adrese URL {1}–{2}.",
   "Resolving_real_path_for_0_result_1_6130": "Překládá se skutečná cesta pro {0}, výsledek {1}.",
+  "Resolving_type_reference_directive_0_containing_file_1_6242": "======== Překládá se direktiva odkazu na typ {0} obsahující soubor {1}. ========",
   "Resolving_type_reference_directive_0_containing_file_1_root_directory_2_6116": "======== Překládá se direktiva reference typu {0}, obsažený soubor {1}, kořenový adresář {2}. ========",
   "Resolving_type_reference_directive_0_containing_file_1_root_directory_not_set_6123": "======== Překládá se direktiva reference typu {0}, obsažený soubor {1}, kořenový adresář není nastavený. ========",
   "Resolving_type_reference_directive_0_containing_file_not_set_root_directory_1_6127": "======== Překládá se direktiva reference typu {0}, obsažený soubor není nastavený, kořenový adresář {1}. ========",
@@ -1029,6 +1208,7 @@
   "Rest_signatures_are_incompatible_2572": "Signatury rest jsou nekompatibilní.",
   "Rest_types_may_only_be_created_from_object_types_2700": "Typy rest se dají vytvářet jenom z typů object.",
   "Return_type_annotation_circularly_references_itself_2577": "Anotace návratového typu se cyklicky odkazuje sama na sebe.",
+  "Return_type_must_be_inferred_from_a_function_95149": "Návratový typ musí být odvozen z funkce.",
   "Return_type_of_call_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1_4046": "Návratový typ signatury volání z exportovaného rozhraní má nebo používá název {0} z privátního modulu {1}.",
   "Return_type_of_call_signature_from_exported_interface_has_or_is_using_private_name_0_4047": "Návratový typ signatury volání z exportovaného rozhraní má nebo používá privátní název {0}.",
   "Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_name_0_from_private_mod_4044": "Návratový typ signatury konstruktoru z exportovaného rozhraní má nebo používá název {0} z privátního modulu {1}.",
@@ -1053,15 +1233,31 @@
   "Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_external_module__4050": "Návratový typ veřejné statické metody z exportované třídy má nebo používá název {0} z externího modulu {1}, ale nedá se pojmenovat.",
   "Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_private_module_1_4051": "Návratový typ veřejné statické metody z exportované třídy má nebo používá název {0} z privátního modulu {1}.",
   "Return_type_of_public_static_method_from_exported_class_has_or_is_using_private_name_0_4052": "Návratový typ veřejné statické metody z exportované třídy má nebo používá privátní název {0}.",
-  "Reusing_module_resolutions_originating_in_0_since_resolutions_are_unchanged_from_old_program_6184": "Znovu se používají vyhodnocení modulu z {0}, protože vyhodnocení se oproti původnímu programu nezměnila.",
-  "Reusing_resolution_of_module_0_to_file_1_from_old_program_6183": "Znovu se používá vyhodnocení modulu {0} do souboru {1} z původního programu.",
+  "Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_not_resolved_6395": "Opětovné použití překladu modulu {0} z {1} nalezeného v mezipaměti z umístění {2} se nevyřešilo.",
+  "Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_6393": "Opětovné použití překladu modulu {0} z {1} nalezeného v mezipaměti z umístění {2} bylo úspěšně vyřešeno na {3}.",
+  "Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_6394": "Opětovné použití překladu modulu {0} z {1} nalezeného v mezipaměti z umístění {2} bylo úspěšně vyřešeno na {3} s ID balíčku {4}.",
+  "Reusing_resolution_of_module_0_from_1_of_old_program_it_was_not_resolved_6389": "Opětovné použití překladu modulu {0} z {1} starého programu se nevyřešilo.",
+  "Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2_6183": "Opětovné použití překladu modulu {0} z {1} starého programu bylo úspěšně vyřešeno na {2}.",
+  "Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2_with_Package__6184": "Opětovné použití překladu modulu {0} z {1} starého programu bylo úspěšně vyřešeno na {2} s ID balíčku {3}.",
+  "Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_not_re_6398": "Opětovné použití překladu direktivy typu reference {0} z {1} nalezeného v mezipaměti z umístění {2} se nevyřešilo.",
+  "Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_succes_6396": "Opětovné použití překladu direktivy typu reference {0} z {1} nalezeného v mezipaměti z umístění {2} bylo úspěšně vyřešeno na {3}.",
+  "Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_succes_6397": "Opětovné použití překladu direktivy typu reference {0} z {1} nalezeného v mezipaměti z umístění {2} bylo úspěšně vyřešeno na {3} s ID balíčku {4}.",
+  "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_not_resolved_6392": "Opětovné použití překladu direktivy typu reference {0} z {1} starého programu se nevyřešilo.",
+  "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved__6390": "Opětovné použití překladu direktivy typu reference {0} z {1} starého programu bylo úspěšně vyřešeno na {2}.",
+  "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved__6391": "Opětovné použití překladu direktivy typu reference {0} z {1} starého programu bylo úspěšně vyřešeno na {2} s ID balíčku {3}.",
   "Rewrite_all_as_indexed_access_types_95034": "Přepsat vše jako indexované typy přístupu",
   "Rewrite_as_the_indexed_access_type_0_90026": "Přepsat jako indexovaný typ přístupu {0}",
   "Root_directory_cannot_be_determined_skipping_primary_search_paths_6122": "Nedá se určit kořenový adresář, přeskakují se primární cesty hledání.",
+  "Root_file_specified_for_compilation_1427": "Kořenový soubor, který se zadal pro kompilaci",
   "STRATEGY_6039": "STRATEGIE",
+  "Save_tsbuildinfo_files_to_allow_for_incremental_compilation_of_projects_6642": "Uložte soubory .tsbuildinfo, aby byla možná přírůstková kompilace projektů.",
   "Scoped_package_detected_looking_in_0_6182": "Zjištěn balíček v oboru, hledání v: {0}",
+  "Selection_is_not_a_valid_statement_or_statements_95155": "Výběr nepředstavuje platný příkaz (platné příkazy).",
   "Selection_is_not_a_valid_type_node_95133": "Výběr není platným uzlem typů.",
+  "Set_the_JavaScript_language_version_for_emitted_JavaScript_and_include_compatible_library_declaratio_6705": "Nastavte verzi jazyka JavaScript pro generovaný JavaScript a zahrňte deklarace kompatibilních knihoven.",
+  "Set_the_language_of_the_messaging_from_TypeScript_This_does_not_affect_emit_6654": "Nastavte jazyk posílání zpráv z TypeScriptu. Toto nastavení neovlivní generování.",
   "Set_the_module_option_in_your_configuration_file_to_0_95099": "Nastavte možnost module v konfiguračním souboru na {0}.",
+  "Set_the_newline_character_for_emitting_files_6659": "Nastavte pro generované soubory znak nového řádku.",
   "Set_the_target_option_in_your_configuration_file_to_0_95098": "Nastavte možnost target v konfiguračním souboru na {0}.",
   "Setters_cannot_return_a_value_2408": "Metody setter nemůžou vracet hodnotu.",
   "Show_all_compiler_options_6169": "Zobrazí všechny možnosti kompilátoru.",
@@ -1069,31 +1265,63 @@
   "Show_verbose_diagnostic_information_6150": "Zobrazí podrobné diagnostické informace.",
   "Show_what_would_be_built_or_deleted_if_specified_with_clean_6367": "Zobrazit, co by se sestavilo (nebo odstranilo, pokud je zadaná možnost --clean)",
   "Signature_0_must_be_a_type_predicate_1224": "Signatura {0} musí být predikát typu.",
+  "Skip_type_checking_all_d_ts_files_6693": "Přeskočte kontrolu typů ve všech souborech .d.ts.",
+  "Skip_type_checking_d_ts_files_that_are_included_with_TypeScript_6692": "Při kontrole typů vynechte soubory .d.ts zahrnuté do TypeScriptu.",
   "Skip_type_checking_of_declaration_files_6012": "Přeskočit kontrolu typu souborů deklarace",
   "Skipping_build_of_project_0_because_its_dependency_1_has_errors_6362": "Sestavení projektu {0} se přeskakuje, protože jeho závislost {1} obsahuje chyby.",
   "Skipping_build_of_project_0_because_its_dependency_1_was_not_built_6382": "Sestavení projektu {0} se přeskakuje, protože se nesestavila jeho závislost {1}.",
-  "Source_Map_Options_6175": "Možnosti zdrojového mapování",
+  "Source_from_referenced_project_0_included_because_1_specified_1414": "Zdroj z odkazovaného projektu {0}, který se zahrnul, protože je zadané {1}.",
+  "Source_from_referenced_project_0_included_because_module_is_specified_as_none_1415": "Zdroj z odkazovaného projektu {0}, který se zahrnul, protože možnost --module se nastavila na none.",
   "Source_has_0_element_s_but_target_allows_only_1_2619": "Zdroj má následující počet elementů, ale cíl jich povoluje jen {1}: {0}",
   "Source_has_0_element_s_but_target_requires_1_2618": "Zdroj má následující počet elementů, ale cíl jich vyžaduje {1}: {0}",
+  "Source_provides_no_match_for_required_element_at_position_0_in_target_2623": "Zdroj nenabízí v cíli pro element required na pozici {0} žádnou shodu.",
+  "Source_provides_no_match_for_variadic_element_at_position_0_in_target_2624": "Zdroj nenabízí v cíli pro element variadic na pozici {0} žádnou shodu.",
   "Specialized_overload_signature_is_not_assignable_to_any_non_specialized_signature_2382": "Specializovaná signatura přetížení nejde přiřadit žádnému nespecializovanému podpisu.",
   "Specifier_of_dynamic_import_cannot_be_spread_element_1325": "Specifikátor dynamického importu nemůže být elementem Spread.",
-  "Specify_ECMAScript_target_version_Colon_ES3_default_ES5_ES2015_ES2016_ES2017_ES2018_ES2019_ES2020_or_6015": "Zadejte cílovou verzi ECMAScript: ES3 (výchozí), ES5, ES2015, ES2016, ES2017, ES2018, ES2019, ES2020 nebo ESNEXT",
-  "Specify_JSX_code_generation_Colon_preserve_react_native_or_react_6080": "Zadejte generování kódu JSX: preserve, react-native, nebo react.",
-  "Specify_emit_Slashchecking_behavior_for_imports_that_are_only_used_for_types_1368": "Zadejte chování generování nebo kontroly pro importy, které se používají jen pro typy.",
+  "Specify_ECMAScript_target_version_6015": "Zadejte cílovou verzi ECMAScriptu.",
+  "Specify_JSX_code_generation_6080": "Zadejte generování kódu JSX.",
+  "Specify_a_file_that_bundles_all_outputs_into_one_JavaScript_file_If_declaration_is_true_also_designa_6679": "Zadejte soubor, který sloučí všechny výstupy do jediného souboru JavaScriptu. Pokud má „declaration“ hodnotu true, označte také soubor, do kterého se sloučí všechny výstupy .d.ts.",
+  "Specify_a_list_of_glob_patterns_that_match_files_to_be_included_in_compilation_6641": "Zadejte seznam vzorů glob, které odpovídají souborům zahrnutým do kompilace.",
+  "Specify_a_list_of_language_service_plugins_to_include_6681": "Zadejte seznam zahrnutých pluginů jazykových služeb.",
+  "Specify_a_set_of_bundled_library_declaration_files_that_describe_the_target_runtime_environment_6651": "Zadejte sadu souborů spojených deklaračních knihoven, které popisují cílové běhové prostředí.",
+  "Specify_a_set_of_entries_that_re_map_imports_to_additional_lookup_locations_6680": "Zadejte sadu položek, které se při importu znovu namapují na další nalezená místa.",
+  "Specify_an_array_of_objects_that_specify_paths_for_projects_Used_in_project_references_6687": "Zadejte pole objektů, které určují cesty pro projekty. Používá se v odkazech na projekt.",
+  "Specify_an_output_folder_for_all_emitted_files_6678": "Zadejte výstupní složku pro všechny generované soubory.",
+  "Specify_emit_Slashchecking_behavior_for_imports_that_are_only_used_for_types_6718": "Zadejte chování generování nebo kontroly pro importy, které se používají jen pro typy.",
   "Specify_file_to_store_incremental_compilation_information_6380": "Zadejte soubor, do kterého se uloží informace o přírůstkové kompilaci.",
+  "Specify_how_TypeScript_looks_up_a_file_from_a_given_module_specifier_6658": "Zadejte, jak TypeScript v daném specifikátoru modulu najde soubor.",
+  "Specify_how_directories_are_watched_on_systems_that_lack_recursive_file_watching_functionality_6714": "Zadejte, jak sledovat adresáře v systémech, které nemají funkci rekurzivního sledování souborů.",
+  "Specify_how_the_TypeScript_watch_mode_works_6715": "Zadejte, jak má fungovat režim sledování TypeScriptu.",
   "Specify_library_files_to_be_included_in_the_compilation_6079": "Zadejte soubory knihovny, které se mají zahrnout do kompilace.",
-  "Specify_module_code_generation_Colon_none_commonjs_amd_system_umd_es2015_es2020_or_ESNext_6016": "Zadejte generování kódu modulu: none, commonjs, amd, system, umd, es2015, es2020 nebo ESNext",
+  "Specify_module_code_generation_6016": "Určete generování kódu modulu.",
   "Specify_module_resolution_strategy_Colon_node_Node_js_or_classic_TypeScript_pre_1_6_6069": "Zadejte strategii překladu modulu: node (Node.js) nebo classic (TypeScript verze nižší než 1.6).",
-  "Specify_strategy_for_creating_a_polling_watch_when_it_fails_to_create_using_file_system_events_Colon_6227": "Zadejte strategii pro vytvoření sledování načítání, když se ho nepovede vytvořit pomocí událostí souborového systému: FixedInterval (výchozí), PriorityInterval, DynamicPriority",
-  "Specify_strategy_for_watching_directory_on_platforms_that_don_t_support_recursive_watching_natively__6226": "Zadejte strategii pro sledování adresáře na platformách, které nepodporují nativně rekurzivní sledování: UseFsEvents (výchozí), FixedPollingInterval, DynamicPriorityPolling",
-  "Specify_strategy_for_watching_file_Colon_FixedPollingInterval_default_PriorityPollingInterval_Dynami_6225": "Zadejte strategii pro sledování souboru: FixedPollingInterval (výchozí), PriorityPollingInterval, DynamicPriorityPolling, UseFsEvents, UseFsEventsOnParentDirectory",
+  "Specify_module_specifier_used_to_import_the_JSX_factory_functions_when_using_jsx_Colon_react_jsx_Ast_6649": "Zadejte specifikátor modulu, který se použije k importu továrních funkcí JSX při použití příkazu jsx: react-jsx.",
+  "Specify_multiple_folders_that_act_like_Slashnode_modules_Slash_types_6710": "Zadejte více složek, které fungují jako ./node_modules/@types.",
+  "Specify_one_or_more_path_or_node_module_references_to_base_configuration_files_from_which_settings_a_6633": "Zadejte jednu nebo více cest nebo jeden či více odkazů na moduly uzlů se základními konfiguračními soubory, ze kterých se dědí nastavení.",
+  "Specify_options_for_automatic_acquisition_of_declaration_files_6709": "Zadejte možnosti automatického získávání deklaračních souborů.",
+  "Specify_strategy_for_creating_a_polling_watch_when_it_fails_to_create_using_file_system_events_Colon_6227": "Zadejte strategii pro vytvoření sledování načítání, když se ho nepovede vytvořit pomocí událostí souborového systému: FixedInterval (výchozí), PriorityInterval, DynamicPriority, FixedChunkSize",
+  "Specify_strategy_for_watching_directory_on_platforms_that_don_t_support_recursive_watching_natively__6226": "Zadejte strategii pro sledování adresáře na platformách, které nepodporují nativně rekurzivní sledování: UseFsEvents (výchozí), FixedPollingInterval, DynamicPriorityPolling, FixedChunkSizePolling",
+  "Specify_strategy_for_watching_file_Colon_FixedPollingInterval_default_PriorityPollingInterval_Dynami_6225": "Zadejte strategii pro sledování souboru: FixedPollingInterval (výchozí), PriorityPollingInterval, DynamicPriorityPolling, FixedChunkSizePolling, UseFsEvents, UseFsEventsOnParentDirectory",
+  "Specify_the_JSX_Fragment_reference_used_for_fragments_when_targeting_React_JSX_emit_e_g_React_Fragme_6648": "Zadejte odkaz na fragment JSX, který se použije pro fragmenty při cíleném generování React JSX, např. „React.Fragment“ nebo „Fragment“.",
   "Specify_the_JSX_factory_function_to_use_when_targeting_react_JSX_emit_e_g_React_createElement_or_h_6146": "Zadejte funkci objektu pro vytváření JSX, která se použije při zaměření na generování JSX react, např. React.createElement nebo h.",
+  "Specify_the_JSX_factory_function_used_when_targeting_React_JSX_emit_e_g_React_createElement_or_h_6647": "Zadejte tovární funkci JSX, která se použije při cíleném generování kódu JSX pro React, např.„React.createElement“ nebo „h“.",
   "Specify_the_JSX_fragment_factory_function_to_use_when_targeting_react_JSX_emit_with_jsxFactory_compi_18034": "Zadejte funkci objektu pro vytváření fragmentů JSX, která se použije při cílení na generování JSX react se zadanou možností kompilátoru jsxFactory, například Fragment.",
+  "Specify_the_base_directory_to_resolve_non_relative_module_names_6607": "Zadejte základní adresář, který se použije k řešení názvů modulů, které nejsou relativní.",
   "Specify_the_end_of_line_sequence_to_be_used_when_emitting_files_Colon_CRLF_dos_or_LF_unix_6060": "Zdejte sekvenci konce řádku, která se má použít při generování souborů: CRLF (dos) nebo LF (unix).",
+  "Specify_the_folder_for_tsbuildinfo_incremental_compilation_files_6707": "Zadejte složku pro soubory přírůstkové kompilace .tsbuildinfo.",
   "Specify_the_location_where_debugger_should_locate_TypeScript_files_instead_of_source_locations_6004": "Zadejte umístění, ve kterém by měl ladicí program najít soubory TypeScript namísto umístění zdroje.",
-  "Specify_the_location_where_debugger_should_locate_map_files_instead_of_generated_locations_6003": "Zadejte umístění, ve kterém by měl ladicí program najít soubory mapy namísto generovaných umístění.",
-  "Specify_the_module_specifier_to_be_used_to_import_the_jsx_and_jsxs_factory_functions_from_eg_react_6238": "Zadejte specifikátor modulu, který se má použít k importu továrních funkcí jsx a jsxs např. z funkce react.",
+  "Specify_the_location_where_debugger_should_locate_map_files_instead_of_generated_locations_6655": "Zadejte umístění, ve kterém by měl ladicí program najít soubory mapy namísto generovaných umístění.",
+  "Specify_the_maximum_folder_depth_used_for_checking_JavaScript_files_from_node_modules_Only_applicabl_6656": "Zadejte maximální hloubku složky, která se použije pro kontrolu souborů JavaScriptu z „node_modules“. Platí pouze s možností „allowJs“.",
+  "Specify_the_module_specifier_to_be_used_to_import_the_jsx_and_jsxs_factory_functions_from_eg_react_6238": "Zadejte specifikátor modulu, který se má použít k importu továrních funkcí ‚jsx‘ a ‚jsxs‘ např. z funkce react.",
+  "Specify_the_object_invoked_for_createElement_This_only_applies_when_targeting_react_JSX_emit_6686": "Zadejte objekt vyvolaný pro „createElement“. To platí jenom při cíleném generování kódu JSX pro React.",
+  "Specify_the_output_directory_for_generated_declaration_files_6613": "Zadejte výstupní adresář pro generované deklarační soubory.",
   "Specify_the_root_directory_of_input_files_Use_to_control_the_output_directory_structure_with_outDir_6058": "Zadejte kořenový adresář vstupních souborů. Slouží ke kontrole struktury výstupního adresáře pomocí --outDir.",
+  "Specify_the_root_folder_within_your_source_files_6690": "Zadejte kořenovou složku se zdrojovými soubory.",
+  "Specify_the_root_path_for_debuggers_to_find_the_reference_source_code_6695": "Zadejte pro ladicí programy kořenovou cestu, kde najdou referenční zdrojový kód.",
+  "Specify_type_package_names_to_be_included_without_being_referenced_in_a_source_file_6711": "Zadejte názvy typů balíčků, které se zahrnou, i když na ně neodkazuje zdrojový soubor.",
+  "Specify_what_JSX_code_is_generated_6646": "Zadejte, jaký kód JSX se vygeneruje.",
+  "Specify_what_approach_the_watcher_should_use_if_the_system_runs_out_of_native_file_watchers_6634": "Zadejte, jak má sledovací proces postupovat, když systému dojdou nativní sledovací procesy souborů.",
+  "Specify_what_module_code_is_generated_6657": "Určete, pro jaký modul se kód generuje.",
   "Split_all_invalid_type_only_imports_1367": "Rozdělit všechny neplatné importy, při kterých se importují jen typy",
   "Split_into_two_separate_import_declarations_1366": "Rozdělit na dvě samostatné deklarace importu",
   "Spread_operator_in_new_expressions_is_only_available_when_targeting_ECMAScript_5_and_higher_2472": "Operátor rozšíření ve výrazech new je dostupný jenom při cílení na verzi ECMAScript 5 a vyšší.",
@@ -1101,9 +1329,9 @@
   "Starting_compilation_in_watch_mode_6031": "Spouští se kompilace v režimu sledování...",
   "Statement_expected_1129": "Očekává se příkaz.",
   "Statements_are_not_allowed_in_ambient_contexts_1036": "Příkazy se nepovolují v ambientních kontextech.",
+  "Static_fields_with_private_names_can_t_have_initializers_when_the_useDefineForClassFields_flag_is_no_2805": "Statická pole s privátními názvy nemůžou mít inicializátory, pokud se nezadá příznak --useDefineForClassFields s parametrem --target o hodnotě esnext. Zvažte možnost přidat příznak --useDefineForClassFields.",
   "Static_members_cannot_reference_class_type_parameters_2302": "Statické členy nemůžou odkazovat na parametry typu třídy.",
   "Static_property_0_conflicts_with_built_in_property_Function_0_of_constructor_function_1_2699": "Statická vlastnost {0} je v konfliktu s předdefinovanou vlastností Function.{0} funkce konstruktoru {1}.",
-  "Strict_Type_Checking_Options_6173": "Možnosti striktní kontroly typů",
   "String_literal_expected_1141": "Očekává se řetězcový literál.",
   "String_literal_with_double_quotes_expected_1327": "Očekával se řetězcový literál s dvojitými uvozovkami.",
   "Stylize_errors_and_messages_using_color_and_context_experimental_6073": "Stylizujte chyby a zprávy pomocí barev a kontextu (experimentální).",
@@ -1117,9 +1345,10 @@
   "Super_calls_are_not_permitted_outside_constructors_or_in_nested_functions_inside_constructors_2337": "Volání pomocí super se nepovolují mimo konstruktory a ve funkcích vnořených v konstruktorech.",
   "Suppress_excess_property_checks_for_object_literals_6072": "Potlačit nadměrné kontroly vlastností pro literály objektů",
   "Suppress_noImplicitAny_errors_for_indexing_objects_lacking_index_signatures_6055": "Potlačit chyby noImplicitAny u objektů indexování bez signatur indexu",
+  "Suppress_noImplicitAny_errors_when_indexing_objects_that_lack_index_signatures_6703": "Při indexování objektů bez signatur indexu potlačte chyby „noImplicitAny“.",
   "Switch_each_misused_0_to_1_95138": "Přepnout každé chybně použité {0} na {1}",
   "Symbol_reference_does_not_refer_to_the_global_Symbol_constructor_object_2470": "Odkaz Symbol neodkazuje na globální objekt konstruktoru Symbol.",
-  "Synchronously_call_callbacks_and_update_the_state_of_directory_watchers_on_platforms_that_don_t_supp_6228": "Synchronně volat zpětná volání a aktualizovat stav sledování adresářů na platformách, které nepodporují nativně rekurzivní sledování",
+  "Synchronously_call_callbacks_and_update_the_state_of_directory_watchers_on_platforms_that_don_t_supp_6704": "Synchronně volejte zpětná volání a aktualizujte stav sledování adresářů i u platforem, které nativně nepodporují rekurzivní sledování.",
   "Syntax_Colon_0_6023": "Syntaxe: {0}",
   "Tag_0_expects_at_least_1_arguments_but_the_JSX_factory_2_provides_at_most_3_6229": "Značka {0} očekává určitý minimální počet argumentů ({1}), ale objekt pro vytváření JSX {2} jich poskytuje maximálně {3}.",
   "Tagged_template_expressions_are_not_permitted_in_an_optional_chain_1358": "Označené výrazy šablony se v nepovinném řetězu nepovolují.",
@@ -1134,17 +1363,19 @@
   "The_arguments_object_cannot_be_referenced_in_an_arrow_function_in_ES3_and_ES5_Consider_using_a_stand_2496": "Funkce šipky v ES3 a ES5 nemůže odkazovat na objekt arguments. Zvažte použití standardního výrazu funkce.",
   "The_arguments_object_cannot_be_referenced_in_an_async_function_or_method_in_ES3_and_ES5_Consider_usi_2522": "V ES3 a ES5 se na objekt arguments nedá odkazovat v asynchronní funkci nebo metodě. Zvažte možnost použít standardní funkci nebo metodu.",
   "The_body_of_an_if_statement_cannot_be_the_empty_statement_1313": "Tělo příkazu if nemůže být prázdný příkaz.",
-  "The_bundledPackageName_option_must_be_provided_when_using_outFile_and_node_module_resolution_with_de_1391": "Při použití řešení modulu outFile a node s deklarací musí být zadána možnost bundledPackageName.",
+  "The_bundledPackageName_option_must_be_provided_when_using_outFile_and_node_module_resolution_with_de_1391": "Při použití outFile a rozlišení modulu uzlu s vydáním deklarace je nutné zadat možnost 'bundledPackageName'.",
   "The_call_would_have_succeeded_against_this_implementation_but_implementation_signatures_of_overloads_2793": "Volání by pro tuto implementaci proběhlo úspěšně, ale signatury implementace pro přetížení nejsou externě k dispozici.",
   "The_character_set_of_the_input_files_6163": "Znaková sada vstupních souborů",
   "The_containing_arrow_function_captures_the_global_value_of_this_7041": "Obsahující funkce šipky zachytává globální hodnotu pro this.",
   "The_containing_function_or_module_body_is_too_large_for_control_flow_analysis_2563": "Text obsahující funkce nebo modulu je pro analýzu toku řízení příliš dlouhý.",
   "The_current_host_does_not_support_the_0_option_5001": "Aktuální hostitel nepodporuje možnost {0}.",
   "The_declaration_of_0_that_you_probably_intended_to_use_is_defined_here_18018": "Deklarace {0}, kterou jste pravděpodobně chtěli použít, je definovaná tady.",
+  "The_declaration_was_marked_as_deprecated_here_2798": "Deklarace se tady označila jako zastaralá.",
   "The_expected_type_comes_from_property_0_which_is_declared_here_on_type_1_6500": "Očekávaný typ pochází z vlastnosti {0}, která je deklarovaná tady v typu {1}.",
   "The_expected_type_comes_from_the_return_type_of_this_signature_6502": "Očekávaný typ pochází z návratového typu této signatury.",
   "The_expected_type_comes_from_this_index_signature_6501": "Očekávaný typ pochází z této signatury indexu.",
   "The_expression_of_an_export_assignment_must_be_an_identifier_or_qualified_name_in_an_ambient_context_2714": "Výraz přiřazení exportu musí být identifikátor nebo kvalifikovaný název v ambientním kontextu.",
+  "The_file_is_in_the_program_because_Colon_1430": "Soubor se nachází v programu, protože:",
   "The_files_list_in_config_file_0_is_empty_18002": "Seznam files v konfiguračním souboru {0} je prázdný.",
   "The_first_export_default_is_here_2752": "První výchozí nastavení exportu je tady.",
   "The_first_parameter_of_the_then_method_of_a_promise_must_be_a_callback_1060": "První parametr metody then příslibu musí být zpětné volání.",
@@ -1168,6 +1399,7 @@
   "The_left_hand_side_of_a_for_in_statement_must_be_of_type_string_or_any_2405": "Levá strana příkazu for...in musí být typu string nebo any.",
   "The_left_hand_side_of_a_for_of_statement_cannot_use_a_type_annotation_2483": "Levá strana příkazu for...of nemůže používat anotaci typu.",
   "The_left_hand_side_of_a_for_of_statement_may_not_be_an_optional_property_access_2781": "Levá strana příkazu for...of nemůže představovat přístup k nepovinné vlastnosti.",
+  "The_left_hand_side_of_a_for_of_statement_may_not_be_async_1106": "Levá strana příkazu for...of nemůže být async.",
   "The_left_hand_side_of_a_for_of_statement_must_be_a_variable_or_a_property_access_2487": "Levá strana příkazu for...of musí být proměnná nebo přístup k vlastnosti.",
   "The_left_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type_2362": "Levá strana aritmetické operace musí mít typ any, number, bigint nebo být typu výčtu.",
   "The_left_hand_side_of_an_assignment_expression_may_not_be_an_optional_property_access_2779": "Levá strana výrazu přiřazení nemůže představovat přístup k nepovinné vlastnosti.",
@@ -1185,15 +1417,18 @@
   "The_parser_expected_to_find_a_to_match_the_token_here_1007": "Parser očekával, že najde token }, který by odpovídal zdejšímu tokenu {.",
   "The_property_0_cannot_be_accessed_on_type_1_within_this_class_because_it_is_shadowed_by_another_priv_18014": "K vlastnosti {0} se nedá přistupovat v typu {1} v této třídě, protože ho překrývá jiný privátní identifikátor se stejným zápisem.",
   "The_return_type_of_a_JSX_element_constructor_must_return_an_object_type_2601": "Návratový typ konstruktoru elementu JSX musí vracet objektový typ.",
+  "The_return_type_of_a_get_accessor_must_be_assignable_to_its_set_accessor_type_2380": "Návratový typ přístupového objektu get musí být přiřaditelný k jeho typu přístupového objektu set.",
   "The_return_type_of_a_parameter_decorator_function_must_be_either_void_or_any_1237": "Návratový typ funkce dekorátoru parametru funkce musí být void nebo any.",
   "The_return_type_of_a_property_decorator_function_must_be_either_void_or_any_1236": "Návratový typ funkce dekorátoru vlastnosti musí být void nebo any.",
   "The_return_type_of_an_async_function_must_either_be_a_valid_promise_or_must_not_contain_a_callable_t_1058": "Návratový typ asynchronní funkce musí být buď platný příslib, nebo nesmí obsahovat člen then, který se dá volat.",
   "The_return_type_of_an_async_function_or_method_must_be_the_global_Promise_T_type_Did_you_mean_to_wri_1064": "Návratový typ asynchronní funkce nebo metody musí být globální typ Promise<T>. Zamýšleli jste napsat Promise<{0}>?",
   "The_right_hand_side_of_a_for_in_statement_must_be_of_type_any_an_object_type_or_a_type_parameter_but_2407": "Pravá strana příkazu for...in musí být typu any, typem objektu nebo parametrem typu, ale tady má typ {0}.",
   "The_right_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type_2363": "Pravá strana aritmetické operace musí mít typ any, number, bigint nebo být typu výčtu.",
-  "The_right_hand_side_of_an_in_expression_must_be_of_type_any_an_object_type_or_a_type_parameter_2361": "Pravá strana výrazu in musí být typu any, objektového typu nebo parametrem typu.",
+  "The_right_hand_side_of_an_in_expression_must_not_be_a_primitive_2361": "Pravá strana výrazu in nesmí být primitivní typ.",
   "The_right_hand_side_of_an_instanceof_expression_must_be_of_type_any_or_of_a_type_assignable_to_the_F_2359": "Pravá strana výrazu instanceof musí mít typ any nebo typ, který se dá přiřadit k typu rozhraní Function.",
+  "The_root_value_of_a_0_file_must_be_an_object_5092": "Kořenová hodnota souboru {0} musí být objekt.",
   "The_shadowing_declaration_of_0_is_defined_here_18017": "Překrývající deklarace {0} je definovaná tady.",
+  "The_signature_0_of_1_is_deprecated_6387": "Signatura {0} pro {1} je zastaralá.",
   "The_specified_path_does_not_exist_Colon_0_5058": "Zadaná cesta neexistuje: {0}",
   "The_tag_was_first_specified_here_8034": "Značka se poprvé zadala tady.",
   "The_target_of_an_assignment_must_be_a_variable_or_a_property_access_2541": "Cíl přiřazení musí být proměnná nebo přístup k vlastnosti.",
@@ -1204,6 +1439,7 @@
   "The_type_0_is_readonly_and_cannot_be_assigned_to_the_mutable_type_1_4104": "Typ {0} je readonly a nedá se přiřadit k neměnnému typu {1}.",
   "The_type_argument_for_type_parameter_0_cannot_be_inferred_from_the_usage_Consider_specifying_the_typ_2453": "Argument typu pro parametr typu {0} se nemůže odvozovat z využití. Argumenty typu ale můžete zadat explicitně.",
   "The_type_of_a_function_declaration_must_match_the_function_s_signature_8030": "Typ deklarace funkce musí odpovídat její signatuře.",
+  "The_type_of_this_node_cannot_be_serialized_because_its_property_0_cannot_be_serialized_4118": "Uzel tohoto typu nejde serializovat, protože nejde serializovat jeho vlastnost {0}.",
   "The_type_returned_by_the_0_method_of_an_async_iterator_must_be_a_promise_for_a_type_with_a_value_pro_2547": "Typ vrácený metodou {0}() asynchronního iterátoru musí být příslib pro typ s vlastností value.",
   "The_type_returned_by_the_0_method_of_an_iterator_must_have_a_value_property_2490": "Typ vrácený metodou {0}() iterátoru musí obsahovat vlastnost value.",
   "The_types_of_0_are_incompatible_between_these_types_2200": "Typy {0} nejsou mezi těmito typy kompatibilní.",
@@ -1214,7 +1450,8 @@
   "This_JSX_tag_s_0_prop_expects_a_single_child_of_type_1_but_multiple_children_were_provided_2746": "Vlastnost {0} této značky JSX očekává jeden podřízený objekt typu {1}, ale poskytlo se jich více.",
   "This_JSX_tag_s_0_prop_expects_type_1_which_requires_multiple_children_but_only_a_single_child_was_pr_2745": "Vlastnost {0} této značky JSX očekává typ {1}, který vyžaduje více podřízených objektů, ale zadal se jen jeden.",
   "This_condition_will_always_return_0_since_the_types_1_and_2_have_no_overlap_2367": "Tato podmínka vždy vrátí {0}, protože typy {1} a {2} se nijak nepřekrývají.",
-  "This_condition_will_always_return_true_since_the_function_is_always_defined_Did_you_mean_to_call_it__2774": "Tato podmínka vždy vrátí true, protože funkce je vždy definovaná. Nechtěli jste ji spíše zavolat?",
+  "This_condition_will_always_return_true_since_this_0_is_always_defined_2801": "Tato podmínka vždy vrátí hodnotu True, protože tato {0} je vždy definovaná.",
+  "This_condition_will_always_return_true_since_this_function_is_always_defined_Did_you_mean_to_call_it_2774": "Tato podmínka vždy vrátí hodnotu True, protože tato funkce je vždy definována. Chtěli jste ji místo toho nazvat?",
   "This_constructor_function_may_be_converted_to_a_class_declaration_80002": "Tato funkce konstruktoru se může převést na deklaraci třídy.",
   "This_expression_is_not_callable_2349": "Tento výraz se nedá zavolat.",
   "This_expression_is_not_callable_because_it_is_a_get_accessor_Did_you_mean_to_use_it_without_6234": "Tento výraz se nedá volat, protože je to přístupový objekt get. Nechtěli jste ho použít bez ()?",
@@ -1223,15 +1460,23 @@
   "This_import_is_never_used_as_a_value_and_must_use_import_type_because_importsNotUsedAsValues_is_set__1371": "Tento import se nikdy nepoužívá jako hodnota a musí používat import type, protože importsNotUsedAsValues je nastavené na error.",
   "This_is_the_declaration_being_augmented_Consider_moving_the_augmenting_declaration_into_the_same_fil_6233": "Toto je deklarace, která se rozšiřuje. Zvažte možnost přesunout rozšiřující deklaraci do stejného souboru.",
   "This_may_be_converted_to_an_async_function_80006": "Toto je možné převést na asynchronní funkci.",
+  "This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0_4113": "Tento člen nemůže mít modifikátor override, protože není deklarovaný v základní třídě {0}.",
+  "This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0_Did_you__4117": "Tento člen nemůže mít modifikátor override, protože není deklarovaný v základní třídě {0}. Měli jste na mysli {1}?",
+  "This_member_cannot_have_an_override_modifier_because_its_containing_class_0_does_not_extend_another__4112": "Tento člen nemůže mít modifikátor override, protože třída {0}, která ho obsahuje, nerozšiřuje jinou třídu.",
+  "This_member_must_have_an_override_modifier_because_it_overrides_a_member_in_the_base_class_0_4114": "Tento člen musí mít modifikátor override, protože přepisuje člen v základní třídě {0}.",
+  "This_member_must_have_an_override_modifier_because_it_overrides_an_abstract_method_that_is_declared__4116": "Tento člen musí mít modifikátor override, protože přepisuje abstraktní metodu, která je deklarovaná v základní třídě {0}.",
   "This_module_can_only_be_referenced_with_ECMAScript_imports_Slashexports_by_turning_on_the_0_flag_and_2497": "Na tento modul je možné se pomocí importů nebo exportů ECMAScript odkazovat jen tak, že se zapne příznak {0} a odkáže se na výchozí export.",
   "This_module_is_declared_with_using_export_and_can_only_be_used_with_a_default_import_when_using_the__2594": "Tento modul se deklaroval pomocí export =, a když se používá příznak {0}, dá se použít jen s výchozím importem.",
   "This_overload_signature_is_not_compatible_with_its_implementation_signature_2394": "Tato signatura přetížení není kompatibilní se signaturou implementace.",
   "This_parameter_is_not_allowed_with_use_strict_directive_1346": "Tento parametr se nepodporuje s direktivou use strict.",
+  "This_parameter_property_must_have_an_override_modifier_because_it_overrides_a_member_in_base_class_0_4115": "Tato vlastnost parametru musí mít modifikátor override, protože přepisuje člen v základní třídě {0}.",
   "This_spread_always_overwrites_this_property_2785": "Tento rozsah vždy přepíše tuto vlastnost.",
   "This_syntax_requires_an_imported_helper_but_module_0_cannot_be_found_2354": "Tato syntaxe vyžaduje importovanou podpůrnou aplikaci, ale modul {0} se nenašel.",
   "This_syntax_requires_an_imported_helper_named_1_which_does_not_exist_in_0_Consider_upgrading_your_ve_2343": "Tato syntaxe vyžaduje importovanou pomocnou rutinu s názvem {1}, která v {0} neexistuje. Zvažte možnost upgradovat verzi {0}.",
+  "This_syntax_requires_an_imported_helper_named_1_with_2_parameters_which_is_not_compatible_with_the_o_2807": "Tato syntaxe vyžaduje importovanou pomocnou rutinu s názvem {1} a parametry {2}, která není kompatibilní s tou v {0}. Zvažte upgrade verze {0}.",
   "Top_level_await_expressions_are_only_allowed_when_the_module_option_is_set_to_esnext_or_system_and_t_1378": "Výrazy await nejvyšší úrovně se povolují jen v případě, že možnost module je nastavená na esnext nebo system a možnost target je nastavená na es2017 nebo vyšší.",
   "Top_level_declarations_in_d_ts_files_must_start_with_either_a_declare_or_export_modifier_1046": "Deklarace nejvyšší úrovně v souborech .d.ts musí začínat modifikátorem declare, nebo export.",
+  "Top_level_for_await_loops_are_only_allowed_when_the_module_option_is_set_to_esnext_or_system_and_the_1432": "Smyčky for await nejvyšší úrovně se povolují jen v případě, že možnost module je nastavená na esnext nebo system a možnost target je nastavená na es2017 nebo vyšší.",
   "Trailing_comma_not_allowed_1009": "Čárka na konci není povolená.",
   "Transpile_each_file_as_a_separate_module_similar_to_ts_transpileModule_6153": "Transpiluje každý soubor jako samostatný modul (podobné jako ts.transpileModule).",
   "Try_npm_i_save_dev_types_Slash_1_if_it_exists_or_add_a_new_declaration_d_ts_file_containing_declare__7035": "Vyzkoušejte deklaraci npm i --save-dev @types/{1}, pokud existuje, nebo přidejte nový soubor deklarací (.d.ts) s deklarací declare module '{0}';.",
@@ -1240,6 +1485,7 @@
   "Tuple_members_must_all_have_names_or_all_not_have_names_5084": "Název musí mít buď všechny členy řazené kolekce členů, nebo ho nesmí mít žádný člen.",
   "Tuple_type_0_of_length_1_has_no_element_at_index_2_2493": "Typ řazené kolekce členů {0} délky {1} nemá na indexu {2} žádný prvek.",
   "Tuple_type_arguments_circularly_reference_themselves_4110": "Argumenty typů řazené kolekce členů cyklicky odkazují samy na sebe.",
+  "Type_0_can_only_be_iterated_through_when_using_the_downlevelIteration_flag_or_with_a_target_of_es201_2802": "Typem {0} se dá iterovat, pouze když se použije příznak --downlevelIteration nebo s možností --target nastavenou na es2015 nebo vyšší.",
   "Type_0_cannot_be_used_as_an_index_type_2538": "Typ {0} se nedá použít jako typ indexu.",
   "Type_0_cannot_be_used_to_index_type_1_2536": "Typ {0} nejde použít k indexování typu {1}.",
   "Type_0_does_not_satisfy_the_constraint_1_2344": "Typ {0} nevyhovuje omezení {1}.",
@@ -1264,7 +1510,9 @@
   "Type_0_must_have_a_Symbol_iterator_method_that_returns_an_iterator_2488": "Typ {0} musí mít metodu [Symbol.iterator](), která vrací iterátor.",
   "Type_0_provides_no_match_for_the_signature_1_2658": "Typ {0} neposkytuje žádnou shodu pro podpis {1}.",
   "Type_0_recursively_references_itself_as_a_base_type_2310": "Typ {0} odkazuje rekurzivně sám na sebe jako na základní typ.",
+  "Type_Checking_6248": "Kontrola typů",
   "Type_alias_0_circularly_references_itself_2456": "Alias typu {0} odkazuje cyklicky sám na sebe.",
+  "Type_alias_must_be_given_a_name_1439": "Alias typu musí mít název.",
   "Type_alias_name_cannot_be_0_2457": "Název aliasu typu nemůže být {0}.",
   "Type_aliases_can_only_be_used_in_TypeScript_files_8008": "Aliasy typů se dají používat jen v typescriptových souborech.",
   "Type_annotation_cannot_appear_on_a_constructor_declaration_1093": "V deklaraci konstruktoru se nemůže objevit anotace typu.",
@@ -1276,10 +1524,15 @@
   "Type_arguments_cannot_be_used_here_1342": "Argumenty typu tady nejde použít.",
   "Type_arguments_for_0_circularly_reference_themselves_4109": "Argumenty typů pro {0} se cyklicky odkazují samy na sebe.",
   "Type_assertion_expressions_can_only_be_used_in_TypeScript_files_8016": "Kontrolní výrazy typů se dají používat jen v typescriptových souborech.",
+  "Type_at_position_0_in_source_is_not_compatible_with_type_at_position_1_in_target_2626": "Typ na pozici {0} ve zdroji není kompatibilní s typem na pozici {1} v cíli.",
+  "Type_at_positions_0_through_1_in_source_is_not_compatible_with_type_at_position_2_in_target_2627": "Typ na pozicích {0} až {1} ve zdroji není kompatibilní s typem na pozici {2} v cíli.",
+  "Type_catch_clause_variables_as_unknown_instead_of_any_6803": "Proměnné klauzule catch zapište jako „unknown“ namísto „any“.",
   "Type_declaration_files_to_be_included_in_compilation_6124": "Soubory deklarace typu, které se mají zahrnout do kompilace",
   "Type_expected_1110": "Očekával se typ.",
   "Type_instantiation_is_excessively_deep_and_possibly_infinite_2589": "Vytvoření instance typu je příliš hluboké a může být nekonečné.",
   "Type_is_referenced_directly_or_indirectly_in_the_fulfillment_callback_of_its_own_then_method_1062": "Typ se přímo nebo nepřímo odkazuje ve zpětném volání jeho vlastní metody then při splnění.",
+  "Type_library_referenced_via_0_from_file_1_1402": "Knihovna typů, na kterou se odkazuje přes {0} ze souboru {1}",
+  "Type_library_referenced_via_0_from_file_1_with_packageId_2_1403": "Knihovna typů, na kterou se odkazuje přes {0} ze souboru {1} s packageId {2}",
   "Type_of_await_operand_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member_1320": "Typ operandu await musí být buď platný příslib, nebo nesmí obsahovat člen then, který se dá volat.",
   "Type_of_computed_property_s_value_is_0_which_is_not_assignable_to_type_1_2418": "Typ hodnoty počítané vlastnosti je {0} a nedá se přiřadit do typu {1}.",
   "Type_of_iterated_elements_of_a_yield_Asterisk_operand_must_either_be_a_valid_promise_or_must_not_con_1322": "Typ iterovaných elementů yield* musí být buď platný příslib, nebo nesmí obsahovat člen then, který se dá volat.",
@@ -1305,6 +1558,7 @@
   "Type_parameter_name_cannot_be_0_2368": "Název parametru typu nemůže být {0}.",
   "Type_parameters_cannot_appear_on_a_constructor_declaration_1092": "Parametry typu se nemůžou vyskytovat v deklaraci konstruktoru.",
   "Type_predicate_0_is_not_assignable_to_1_1226": "Predikát typu {0} nejde přiřadit {1}.",
+  "Type_produces_a_tuple_type_that_is_too_large_to_represent_2799": "Typ tvoří typ řazené kolekce členů, který se nedá reprezentovat, protože je příliš velký.",
   "Type_reference_directive_0_was_not_resolved_6120": "======== Direktiva odkazu na typ {0} se nepřeložila. ========",
   "Type_reference_directive_0_was_successfully_resolved_to_1_primary_Colon_2_6119": "======== Direktiva odkazu na typ {0} se úspěšně přeložila na {1}, primární: {2}. ========",
   "Type_reference_directive_0_was_successfully_resolved_to_1_with_Package_ID_2_primary_Colon_3_6219": "======== Direktiva odkazu na typ {0} se úspěšně přeložila na {1} s ID balíčku {2}, primární: {3}. ========",
@@ -1318,6 +1572,7 @@
   "Unable_to_resolve_signature_of_parameter_decorator_when_called_as_an_expression_1239": "Když se podpis dekorátoru parametru volá jako výraz, nejde přeložit.",
   "Unable_to_resolve_signature_of_property_decorator_when_called_as_an_expression_1240": "Když se podpis dekorátoru vlastnosti volá jako výraz, nejde přeložit.",
   "Unexpected_end_of_text_1126": "Neočekávaný konec textu",
+  "Unexpected_keyword_or_identifier_1434": "Neočekávané klíčové slovo nebo identifikátor.",
   "Unexpected_token_1012": "Neočekávaný token",
   "Unexpected_token_A_constructor_method_accessor_or_property_was_expected_1068": "Neočekávaný token. Očekával se konstruktor, metoda, přístupový objekt nebo vlastnost.",
   "Unexpected_token_A_type_parameter_name_was_expected_without_curly_braces_1069": "Neočekávaný token. Očekával se název parametru typu bez složených závorek.",
@@ -1328,6 +1583,7 @@
   "Unknown_build_option_0_Did_you_mean_1_5077": "Neznámá možnost sestavení {0}. Měli jste na mysli {1}?",
   "Unknown_compiler_option_0_5023": "Neznámá možnost kompilátoru {0}",
   "Unknown_compiler_option_0_Did_you_mean_1_5025": "Neznámá možnost kompilátoru {0}. Měli jste na mysli {1}?",
+  "Unknown_keyword_or_identifier_Did_you_mean_0_1435": "Neznámé klíčové slovo nebo identifikátor. Neměli jste na mysli „{0}“?",
   "Unknown_option_excludes_Did_you_mean_exclude_6114": "Neznámá možnost excludes. Měli jste na mysli exclude?",
   "Unknown_type_acquisition_option_0_17010": "Neznámá možnost získání typu {0}",
   "Unknown_type_acquisition_option_0_Did_you_mean_1_17018": "Neznámá možnost získání typu {0}. Měli jste na mysli {1}?",
@@ -1350,6 +1606,7 @@
   "Use_element_access_for_all_undeclared_properties_95146": "Použít přístup k elementům pro všechny nedeklarované vlastnosti",
   "Use_synthetic_default_member_95016": "Použije syntetického výchozího člena.",
   "Using_a_string_in_a_for_of_statement_is_only_supported_in_ECMAScript_5_and_higher_2494": "Použití řetězce v příkazu for...of se podporuje jenom v ECMAScript 5 nebo vyšší verzi.",
+  "Using_build_b_will_make_tsc_behave_more_like_a_build_orchestrator_than_a_compiler_This_is_used_to_tr_6915": "Použití --build, -b způsobí, že se tsc bude chovat spíše jako orchestrátor sestavení než kompilátor. Pomocí této možnosti můžete aktivovat vytváření složených projektů, o kterých se můžete dozvědět více {0}",
   "Using_compiler_options_of_project_reference_redirect_0_6215": "Using compiler options of project reference redirect '{0}'.",
   "VERSION_6036": "VERZE",
   "Value_of_type_0_has_no_properties_in_common_with_type_1_Did_you_mean_to_call_it_2560": "Hodnota typu {0} nemá žádné vlastnosti společné s typem {1}. Chtěli jste ji volat?",
@@ -1361,10 +1618,16 @@
   "Variable_0_is_used_before_being_assigned_2454": "Proměnná {0} je použitá před přiřazením.",
   "Variable_declaration_expected_1134": "Očekává se deklarace proměnné.",
   "Variable_declaration_list_cannot_be_empty_1123": "Seznam deklarací proměnných nemůže být prázdný.",
+  "Variable_declaration_not_allowed_at_this_location_1440": "Deklarace proměnné není v tomto umístění povolená.",
+  "Variadic_element_at_position_0_in_source_does_not_match_element_at_position_1_in_target_2625": "Element variadic na pozici {0} ve zdroji neodpovídá elementu na pozici {1} v cíli.",
   "Version_0_6029": "Verze {0}",
   "Visit_https_Colon_Slash_Slashaka_ms_Slashtsconfig_json_to_read_more_about_this_file_95110": "Další informace o tomto souboru najdete tady: https://aka.ms/tsconfig.json",
+  "WATCH_OPTIONS_6918": "MOŽNOSTI SLEDOVÁNÍ",
+  "Watch_and_Build_Modes_6250": "Režimy sledování a sestavování",
   "Watch_input_files_6005": "Sledovat vstupní soubory",
   "Watch_option_0_requires_a_value_of_type_1_5080": "Možnost sledování {0} vyžaduje hodnotu typu {1}.",
+  "When_assigning_functions_check_to_ensure_parameters_and_the_return_values_are_subtype_compatible_6698": "Při přiřazování funkcí zkontrolujte a zajistěte, aby parametry a vrácené hodnoty měly kompatibilní podtypy.",
+  "When_type_checking_take_into_account_null_and_undefined_6699": "Při kontrole typů zahrňte také hodnoty „null“ a „undefined“.",
   "Whether_to_keep_outdated_console_output_in_watch_mode_instead_of_clearing_the_screen_6191": "Určuje, jestli se místo vymazání obrazovky má zachovat zastaralý výstup konzoly v režimu sledování.",
   "Wrap_all_invalid_characters_in_an_expression_container_95109": "Zabalit všechny neplatné znaky do kontejneru výrazu",
   "Wrap_all_object_literal_with_parentheses_95116": "Uzavřít všechny literály objektů do závorek",
@@ -1372,10 +1635,12 @@
   "Wrap_in_JSX_fragment_95120": "Zabalit ve fragmentu JSX",
   "Wrap_invalid_character_in_an_expression_container_95108": "Zabalit neplatný znak do kontejneru výrazu",
   "Wrap_the_following_body_with_parentheses_which_should_be_an_object_literal_95113": "Uzavřít následující kód, který by měl být literál objektu, do závorek",
+  "You_can_learn_about_all_of_the_compiler_options_at_0_6913": "Informace o všech možnostech kompilátoru najdete na {0}",
   "You_cannot_rename_a_module_via_a_global_import_8031": "Přes globální import se modul nedá přejmenovat.",
   "You_cannot_rename_elements_that_are_defined_in_the_standard_TypeScript_library_8001": "Nejde přejmenovat elementy definované ve standardní knihovně TypeScriptu.",
   "You_cannot_rename_this_element_8000": "Tento element nejde přejmenovat.",
   "_0_accepts_too_few_arguments_to_be_used_as_a_decorator_here_Did_you_mean_to_call_it_first_and_write__1329": "Objekt {0} přijímá málo argumentů k tomu, aby se dal použít jako dekoratér. Nechtěli jste ho nejprve volat a napsat @{0}()?",
+  "_0_and_1_index_signatures_are_incompatible_2330": "Signatury indexu {0} a {1} jsou nekompatibilní.",
   "_0_and_1_operations_cannot_be_mixed_without_parentheses_5076": "Operace {0} a {1} se nedají kombinovat bez závorek.",
   "_0_are_specified_twice_The_attribute_named_0_will_be_overwritten_2710": "Položka {0} je zadána dvakrát. Atribut s názvem {0} se přepíše.",
   "_0_can_only_be_imported_by_turning_on_the_esModuleInterop_flag_and_using_a_default_import_2596": "{0} se dá importovat jen zapnutím příznaku esModuleInterop a pomocí výchozího importu.",
@@ -1396,6 +1661,8 @@
   "_0_implicitly_has_an_1_return_type_but_a_better_type_may_be_inferred_from_usage_7050": "{0} má implicitně návratový typ {1}, ale je možné, že lepší typ by se vyvodil z využití.",
   "_0_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_reference_7023": "{0} obsahuje implicitně návratový typ any, protože neobsahuje anotaci návratového typu a přímo nebo nepřímo se odkazuje v jednom ze svých návratových výrazů.",
   "_0_implicitly_has_type_any_because_it_does_not_have_a_type_annotation_and_is_referenced_directly_or__7022": "{0} má implicitně typ any, protože nemá anotaci typu a odkazuje se přímo nebo nepřímo v jeho vlastním inicializátoru.",
+  "_0_index_signatures_are_incompatible_2634": "Signatury indexu {0} jsou nekompatibilní.",
+  "_0_index_type_1_is_not_assignable_to_2_index_type_3_2413": "{0} Typ indexu {1} se nedá přiřadit k {2} typu indexu {3}.",
   "_0_is_a_primitive_but_1_is_a_wrapper_object_Prefer_using_0_when_possible_2692": "{0} je primitivum, ale {1} je obálkový objekt. Pokud je to možné, použijte raději {0}.",
   "_0_is_assignable_to_the_constraint_of_type_1_but_1_could_be_instantiated_with_a_different_subtype_of_5075": "{0} se dá přiřadit k omezení typu {1}, ale pro {1} se dala vytvořit instance s jiným podtypem omezení {2}.",
   "_0_is_declared_but_its_value_is_never_read_6133": "Deklaruje se {0}, ale jeho hodnota se vůbec nečte.",
@@ -1403,7 +1670,7 @@
   "_0_is_declared_here_2728": "{0} je deklarované tady.",
   "_0_is_defined_as_a_property_in_class_1_but_is_overridden_here_in_2_as_an_accessor_2611": "{0} je definované jako vlastnost ve třídě {1}, ale v {2} se tady přepisuje jako přístupový objekt.",
   "_0_is_defined_as_an_accessor_in_class_1_but_is_overridden_here_in_2_as_an_instance_property_2610": "{0} je definované jako přístupový objekt ve třídě {1}, ale v {2} se tady přepisuje jako vlastnost instance.",
-  "_0_is_deprecated_6385": "{0} je zastaralé",
+  "_0_is_deprecated_6385": "{0} je zastaralé.",
   "_0_is_not_a_valid_meta_property_for_keyword_1_Did_you_mean_2_17012": "{0} není platnou metavlastností pro klíčové slovo {1}. Měli jste na mysli {2}?",
   "_0_is_not_allowed_as_a_variable_declaration_name_1389": "{0} se nepovoluje jako název deklarace proměnné.",
   "_0_is_referenced_directly_or_indirectly_in_its_own_base_expression_2506": "Na {0} se přímo nebo nepřímo odkazuje ve vlastním základním výrazu.",
@@ -1428,7 +1695,7 @@
   "_0_only_refers_to_a_type_but_is_being_used_as_a_namespace_here_2702": "{0} jenom odkazuje na typ, ale tady se používá jako obor názvů.",
   "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_2693": "{0} odkazuje jenom na typ, ale používá se tady jako hodnota.",
   "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_Did_you_mean_to_use_1_in_0_2690": "{0} odkazuje jenom na typ, ale tady se používá jako hodnota. Nechtěli jste použít {1} v {0}?",
-  "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_Do_you_need_to_change_your_target_library_2585": "{0} se odkazuje jen na typ, ale používá se tady jako hodnota. Potřebujete změnit svou cílovou knihovnu? Zkuste změnit možnost kompilátoru lib na es2015 nebo novější.",
+  "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_Do_you_need_to_change_your_target_library_2585": "‚{0}‘ odkazuje jen na typ, ale tady se používá jako hodnota. Potřebujete změnit cílovou knihovnu? Zkuste změnit možnost kompilátoru ‚lib‘ na es2015 nebo novější.",
   "_0_refers_to_a_UMD_global_but_the_current_file_is_a_module_Consider_adding_an_import_instead_2686": "{0} odkazuje na globální UMD, ale aktuální soubor je modul. Zvažte raději přidání importu.",
   "_0_refers_to_a_value_but_is_being_used_as_a_type_here_Did_you_mean_typeof_0_2749": "{0} odkazuje na hodnotu, ale tady se používá jako typ. Měli jste na mysli typeof {0}?",
   "_0_tag_already_specified_1223": "Značka {0} se už specifikovala.",
@@ -1440,6 +1707,7 @@
   "_0_which_lacks_return_type_annotation_implicitly_has_an_1_yield_type_7055": "{0} s chybějící anotací návratového typu má implicitně typ yield {1}.",
   "abstract_modifier_can_only_appear_on_a_class_method_or_property_declaration_1242": "Modifikátor abstract se může objevit jenom v deklaraci třídy, metody nebo vlastnosti.",
   "and_here_6204": "a tady.",
+  "arguments_cannot_be_referenced_in_property_initializers_2815": "Na argumenty nejde odkazovat v inicializátorech vlastností.",
   "await_expressions_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_fi_1375": "Výrazy await se tady povolují jen na nejvyšší úrovni souboru, když je daný soubor modul, ale tento soubor nemá žádné importy ani exporty. Zvažte možnost přidat export {}, aby se tento soubor převedl na modul.",
   "await_expressions_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_1308": "Výrazy await se povolují jen v asynchronních funkcích na nejvyšší úrovni modulů.",
   "await_expressions_cannot_be_used_in_a_parameter_initializer_2524": "Výrazy await nejdou použít v inicializátoru parametru.",
@@ -1456,6 +1724,7 @@
   "const_enums_can_only_be_used_in_property_or_index_access_expressions_or_the_right_hand_side_of_an_im_2475": "Výčty const se dají použít jenom ve výrazech přístupu k vlastnosti nebo indexu nebo na pravé straně deklarace importu, přiřazení exportu nebo dotazu na typ.",
   "constructor_cannot_be_used_as_a_parameter_property_name_2398": "constructor se nedá použít jako název vlastnosti parametru.",
   "constructor_is_a_reserved_word_18012": "#constructor je rezervované slovo.",
+  "default_Colon_6903": "výchozí:",
   "delete_cannot_be_called_on_an_identifier_in_strict_mode_1102": "Příkaz delete nejde volat u identifikátoru ve striktním režimu.",
   "delete_this_Project_0_is_up_to_date_because_it_was_previously_built_6360": "odstranit toto – projekt {0} je aktuální, protože byl sestaven dříve",
   "export_Asterisk_does_not_re_export_a_default_1195": "export * neprovádí opakovaný export výchozí hodnoty.",
@@ -1466,17 +1735,26 @@
   "extends_clause_of_exported_class_0_has_or_is_using_private_name_1_4020": "Klauzule extends exportované třídy {0} má nebo používá privátní název {1}.",
   "extends_clause_of_exported_class_has_or_is_using_private_name_0_4021": "Klauzule extends exportované třídy má nebo používá privátní název {0}.",
   "extends_clause_of_exported_interface_0_has_or_is_using_private_name_1_4022": "Klauzule extends exportovaného rozhraní {0} má nebo používá privátní název {1}.",
+  "false_unless_composite_is_set_6906": "„false“, pokud není nastavené „composite“.",
+  "false_unless_strict_is_set_6905": "„false“, pokud není nastavená hodnota „strict“.",
   "file_6025": "soubor",
+  "for_await_loops_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_file_1431": "Smyčky for await se tady povolují jen na nejvyšší úrovni souboru, když je daný soubor modul, ale tento soubor nemá žádné importy ani exporty. Zvažte možnost přidat export {}, aby se tento soubor převedl na modul.",
+  "for_await_loops_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_1103": "Smyčky for await se povolují jen v asynchronních funkcích na nejvyšší úrovni modulů.",
   "get_and_set_accessor_must_have_the_same_this_type_2682": "Přístupové objekty get a set musí mít stejný typ this.",
-  "get_and_set_accessor_must_have_the_same_type_2380": "Přístupový objekt get a set musí obsahovat stejný typ.",
   "get_and_set_accessors_cannot_declare_this_parameters_2784": "Přístupové objekty get a set nemůžou deklarovat parametry this.",
+  "if_files_is_specified_otherwise_Asterisk_Asterisk_Slash_Asterisk_6908": "[], pokud je zadáno „soubory“, jinak [\"**/*\"]5D;",
   "implements_clause_already_seen_1175": "Klauzule implements se už jednou vyskytla.",
   "implements_clauses_can_only_be_used_in_TypeScript_files_8005": "Klauzule implements se dají používat jen v typescriptových souborech.",
   "import_can_only_be_used_in_TypeScript_files_8002": "import = se dá používat jen v typescriptových souborech.",
   "infer_declarations_are_only_permitted_in_the_extends_clause_of_a_conditional_type_1338": "Deklarace infer jsou povolené jenom v klauzuli extends podmíněného typu.",
   "let_declarations_can_only_be_declared_inside_a_block_1157": "Deklarace let je možné deklarovat jenom uvnitř bloku.",
   "let_is_not_allowed_to_be_used_as_a_name_in_let_or_const_declarations_2480": "Nepovoluje se používat let jako název v deklaracích let nebo const.",
+  "module_AMD_or_UMD_or_System_or_ES6_then_Classic_Otherwise_Node_69010": "module === `AMD` or `UMD` or `System` or `ES6`, then `Classic`, Otherwise `Node`",
+  "module_system_or_esModuleInterop_6904": "module === \"system\" or esModuleInterop",
   "new_expression_whose_target_lacks_a_construct_signature_implicitly_has_an_any_type_7009": "Výraz new s chybějící signaturou konstruktoru v cíli má implicitně typ any.",
+  "node_modules_bower_components_jspm_packages_plus_the_value_of_outDir_if_one_is_specified_6907": "[\"node_modules\", \"bower_components\", \"jspm_packages\"] a hodnotu „outDir“, pokud je zadána.",
+  "one_of_Colon_6900": "jeden z:",
+  "one_or_more_Colon_6901": "1 nebo více:",
   "options_6024": "možnosti",
   "or_expected_1144": "Očekává se znak { nebo ;.",
   "package_json_does_not_have_a_0_field_6100": "Soubor package.json neobsahuje pole {0}.",
@@ -1507,6 +1785,9 @@
   "this_cannot_be_referenced_in_constructor_arguments_2333": "Na vlastnost this se nedá odkazovat v argumentech konstruktoru.",
   "this_cannot_be_referenced_in_current_location_2332": "Na vlastnost this se nedá odkazovat v aktuálním umístění.",
   "this_implicitly_has_type_any_because_it_does_not_have_a_type_annotation_2683": "Možnost this má implicitně typ any, protože nemá anotaci typu.",
+  "true_if_composite_false_otherwise_6909": "„true“, pokud „composite“, „false“ jinak",
+  "tsc_Colon_The_TypeScript_Compiler_6922": "TSC: kompilátor TypeScriptu",
+  "type_Colon_6902": "typ:",
   "unique_symbol_types_are_not_allowed_here_1335": "Typy unique symbol tady nejsou povolené.",
   "unique_symbol_types_are_only_allowed_on_variables_in_a_variable_statement_1334": "Typy unique symbol jsou povolené jen u proměnných v příkazu proměnné.",
   "unique_symbol_types_may_not_be_used_on_a_variable_declaration_with_a_binding_name_1333": "Typy unique symbol nejde použít v deklaraci proměnné s názvem vazby.",
@@ -1514,5 +1795,6 @@
   "use_strict_directive_used_here_1349": "Direktiva use strict se použila tady.",
   "with_statements_are_not_allowed_in_an_async_function_block_1300": "Příkazy with se ve funkčním bloku async nepovolují.",
   "with_statements_are_not_allowed_in_strict_mode_1101": "Příkazy with se ve striktním režimu nepovolují.",
+  "yield_expression_implicitly_results_in_an_any_type_because_its_containing_generator_lacks_a_return_t_7057": "Implicitním výsledkem výrazu yield je typ any, protože v jeho obsahujícím generátoru chybí anotace návratového typu.",
   "yield_expressions_cannot_be_used_in_a_parameter_initializer_2523": "Výrazy yield nejde použít v inicializátoru parametru."
 }
\ No newline at end of file
diff --git a/node_modules/typescript/lib/de/diagnosticMessages.generated.json b/node_modules/typescript/lib/de/diagnosticMessages.generated.json
index fd5b94c..874a29d 100644
--- a/node_modules/typescript/lib/de/diagnosticMessages.generated.json
+++ b/node_modules/typescript/lib/de/diagnosticMessages.generated.json
@@ -1,4 +1,5 @@
 {
+  "ALL_COMPILER_OPTIONS_6917": "ALLE COMPILEROPTIONEN",
   "A_0_modifier_cannot_be_used_with_an_import_declaration_1079": "Ein Modifizierer \"{0}\" darf nicht mit einer Importdeklaration verwendet werden.",
   "A_0_modifier_cannot_be_used_with_an_interface_declaration_1045": "Ein Modifizierer \"{0}\" darf nicht mit einer Schnittstellendeklaration verwendet werden.",
   "A_0_parameter_must_be_the_first_parameter_2680": "Ein \"{0}\"-Parameter muss der erste Parameter sein.",
@@ -15,7 +16,7 @@
   "A_class_member_cannot_have_the_0_keyword_1248": "Ein Klassenmember darf nicht das Schlüsselwort \"{0}\" aufweisen.",
   "A_comma_expression_is_not_allowed_in_a_computed_property_name_1171": "Ein Kommaausdruck ist in einem berechneten Eigenschaftennamen unzulässig.",
   "A_computed_property_name_cannot_reference_a_type_parameter_from_its_containing_type_2467": "Ein berechneter Eigenschaftenname kann nicht aus seinem enthaltenden Typ auf einen Typparameter verweisen.",
-  "A_computed_property_name_in_a_class_property_declaration_must_refer_to_an_expression_whose_type_is_a_1166": "Ein berechneter Eigenschaftenname in einer Deklaration einer Klasseneigenschaft muss auf einen Ausdruck verweisen, dessen Typ ein Literal oder ein \"unique symbol\"-Typ ist.",
+  "A_computed_property_name_in_a_class_property_declaration_must_have_a_simple_literal_type_or_a_unique_1166": "Ein berechneter Eigenschaftenname in einer Klasseneigenschaftsdeklaration muss einen einfachen Literaltyp oder den Typ \"unique symbol\" aufweisen.",
   "A_computed_property_name_in_a_method_overload_must_refer_to_an_expression_whose_type_is_a_literal_ty_1168": "Ein berechneter Eigenschaftenname in einer Methodenüberladung muss auf einen Ausdruck verweisen, dessen Typ ein Literal oder ein \"unique symbol\"-Typ ist.",
   "A_computed_property_name_in_a_type_literal_must_refer_to_an_expression_whose_type_is_a_literal_type__1170": "Ein berechneter Eigenschaftenname in einem Typliteral muss auf einen Ausdruck verweisen, dessen Typ ein Literal oder ein \"unique symbol\"-Typ ist.",
   "A_computed_property_name_in_an_ambient_context_must_refer_to_an_expression_whose_type_is_a_literal_t_1165": "Ein berechneter Eigenschaftenname in einem Umgebungskontext muss auf einen Ausdruck verweisen, dessen Typ ein Literal oder ein \"unique symbol\"-Typ ist.",
@@ -33,24 +34,25 @@
   "A_decorator_can_only_decorate_a_method_implementation_not_an_overload_1249": "Ein Decorator-Element kann nur für eine Methodenimplementierung und nicht für eine Überladung verwendet werden.",
   "A_default_clause_cannot_appear_more_than_once_in_a_switch_statement_1113": "Eine default-Klausel darf nicht mehrmals in einer switch-Anweisung auftreten.",
   "A_default_export_can_only_be_used_in_an_ECMAScript_style_module_1319": "Ein Standardexport kann nur in einem Modul des Typs ECMAScript verwendet werden.",
+  "A_default_export_must_be_at_the_top_level_of_a_file_or_module_declaration_1258": "Ein Standardexport muss sich auf der obersten Ebene einer Datei- oder Moduldeklaration befinden.",
   "A_definite_assignment_assertion_is_not_permitted_in_this_context_1255": "Eine definitive Zuweisungsassertion \"!\" ist in diesem Kontext nicht zulässig.",
   "A_destructuring_declaration_must_have_an_initializer_1182": "Eine destrukturierende Deklaration muss einen Initialisierer besitzen.",
   "A_dynamic_import_call_in_ES5_SlashES3_requires_the_Promise_constructor_Make_sure_you_have_a_declarat_2712": "Ein dynamischer Importaufruf in ES5/ES3 erfordert den Konstruktor \"Promise\".  Stellen Sie sicher, dass Sie über eine Deklaration für den Konstruktor \"Promise\" verfügen, oder schließen Sie \"ES2015\" in Ihre Option \"--lib\" ein.",
   "A_dynamic_import_call_returns_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_include_ES20_2711": "Ein dynamischer Importaufruf gibt \"Promise\" zurück. Stellen Sie sicher, dass Sie über eine Deklaration für \"Promise\" verfügen, oder schließen Sie ES2015 in Ihre Option \"--lib\" ein.",
   "A_file_cannot_have_a_reference_to_itself_1006": "Eine Datei darf keinen Verweis auf sich selbst enthalten.",
-  "A_for_await_of_statement_is_only_allowed_within_an_async_function_or_async_generator_1103": "Eine \"for-await-of\"-Aussage ist nur innerhalb einer Async-Funktion oder eines Async-Generators zulässig.",
   "A_function_returning_never_cannot_have_a_reachable_end_point_2534": "Eine Funktion, die \"never\" zurückgibt, kann keinen erreichbaren Endpunkt besitzen.",
   "A_function_that_is_called_with_the_new_keyword_cannot_have_a_this_type_that_is_void_2679": "Eine Funktion, die mit dem Schlüsselwort \"new\" aufgerufen wird, darf keinen \"this\"-Typ aufweisen, der \"void\" ist.",
   "A_function_whose_declared_type_is_neither_void_nor_any_must_return_a_value_2355": "Eine Funktion, deren Typ weder als \"void\" noch als \"any\" deklariert ist, muss einen Wert zurückgeben.",
   "A_generator_cannot_have_a_void_type_annotation_2505": "Ein Generator darf keine void-Typanmerkung aufweisen.",
   "A_get_accessor_cannot_have_parameters_1054": "Eine get-Zugriffsmethode darf keine Parameter haben.",
+  "A_get_accessor_must_be_at_least_as_accessible_as_the_setter_2808": "Eine Get-Zugriffsmethode muss mindestens so zugänglich sein wie der Setter.",
   "A_get_accessor_must_return_a_value_2378": "Eine get-Zugriffsmethode muss einen Wert zurückgeben.",
   "A_label_is_not_allowed_here_1344": "Eine Bezeichnung ist hier nicht zulässig.",
   "A_labeled_tuple_element_is_declared_as_optional_with_a_question_mark_after_the_name_and_before_the_c_5086": "Ein bezeichnetes Tupelelement wird optional mit einem Fragezeichen nach dem Namen und vor dem Doppelpunkt deklariert, nicht nach dem Typ.",
   "A_labeled_tuple_element_is_declared_as_rest_with_a_before_the_name_rather_than_before_the_type_5087": "Ein bezeichnetes Tupelelement wird mit \"...\" vor dem Namen und nicht vor dem Typ als \"rest\" deklariert.",
   "A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_memb_2651": "Ein Memberinitialisierer in einer Enumerationsdeklaration darf nicht auf Member verweisen, die anschließend deklariert werden (einschließlich Member, die in anderen Enumerationen definiert sind).",
-  "A_method_cannot_be_named_with_a_private_identifier_18022": "Eine Methode kann nicht mit einem privaten Bezeichner benannt werden.",
   "A_mixin_class_must_have_a_constructor_with_a_single_rest_parameter_of_type_any_2545": "Eine Mixin-Klasse benötigt einen Konstruktor mit einem einzelnen REST-Parameter des Typs \"any[]\".",
+  "A_mixin_class_that_extends_from_a_type_variable_containing_an_abstract_construct_signature_must_also_2797": "Eine Mixin-Klasse, die aus einer Typvariable mit einer abstrakten Konstruktsignatur erweitert wird, muss auch als \"abstract\" deklariert werden.",
   "A_module_cannot_have_multiple_default_exports_2528": "Ein Modul darf nicht mehrere Standardexporte aufweisen.",
   "A_namespace_declaration_cannot_be_in_a_different_file_from_a_class_or_function_with_which_it_is_merg_2433": "Eine Namespacedeklaration darf sich nicht in einer anderen Datei als die Klasse oder Funktion befinden, mit der sie zusammengeführt wird.",
   "A_namespace_declaration_cannot_be_located_prior_to_a_class_or_function_with_which_it_is_merged_2434": "Eine Namespacedeklaration darf nicht vor der Klasse oder Funktion positioniert werden, mit der sie zusammengeführt wird.",
@@ -71,10 +73,10 @@
   "A_required_element_cannot_follow_an_optional_element_1257": "Ein erforderliches Element kann nicht auf ein optionales Element folgen.",
   "A_required_parameter_cannot_follow_an_optional_parameter_1016": "Ein erforderlicher Parameter darf nicht auf einen optionalen Parameter folgen.",
   "A_rest_element_cannot_contain_a_binding_pattern_2501": "Ein rest-Element darf kein Bindungsmuster enthalten.",
+  "A_rest_element_cannot_follow_another_rest_element_1265": "Ein rest-Element darf nicht auf ein anderes rest-Element folgen.",
   "A_rest_element_cannot_have_a_property_name_2566": "Ein rest-Element darf keinen Eigenschaftennamen aufweisen.",
   "A_rest_element_cannot_have_an_initializer_1186": "Ein rest-Element darf keinen Initialisierer aufweisen.",
   "A_rest_element_must_be_last_in_a_destructuring_pattern_2462": "Ein rest-Element muss das letzte Element in einem Destrukturierungsmuster sein.",
-  "A_rest_element_must_be_last_in_a_tuple_type_1256": "Ein rest-Element muss das letzte Element in einem Tupeltyp sein.",
   "A_rest_element_type_must_be_an_array_type_2574": "Ein rest-Elementtyp muss ein Arraytyp sein.",
   "A_rest_parameter_cannot_be_optional_1047": "Ein rest-Parameter darf nicht optional sein.",
   "A_rest_parameter_cannot_have_an_initializer_1048": "Ein rest-Parameter darf keinen Initialisierer aufweisen.",
@@ -82,6 +84,7 @@
   "A_rest_parameter_must_be_of_an_array_type_2370": "Ein rest-Parameter muss ein Arraytyp sein.",
   "A_rest_parameter_or_binding_pattern_may_not_have_a_trailing_comma_1013": "Ein rest-Parameter oder ein Bindungsmuster dürfen kein nachgestelltes Komma aufweisen.",
   "A_return_statement_can_only_be_used_within_a_function_body_1108": "Eine return-Anweisung kann nur in einem Funktionstext verwendet werden.",
+  "A_return_statement_cannot_be_used_inside_a_class_static_block_18041": "Eine \"return\"-Anweisung kann nicht innerhalb eines statischen Klassenblocks verwendet werden.",
   "A_series_of_entries_which_re_map_imports_to_lookup_locations_relative_to_the_baseUrl_6167": "Eine Reihe von Einträgen, die Importe zum Nachschlagen von Speicherorten in Bezug auf die \"baseUrl\" neu zuordnen.",
   "A_set_accessor_cannot_have_a_return_type_annotation_1095": "Eine set-Zugriffsmethode darf keine Rückgabetypanmerkung aufweisen.",
   "A_set_accessor_cannot_have_an_optional_parameter_1051": "Eine set-Zugriffsmethode darf keinen optionalen Parameter aufweisen.",
@@ -89,6 +92,7 @@
   "A_set_accessor_must_have_exactly_one_parameter_1049": "Eine set-Zugriffsmethode muss genau einen Parameter aufweisen.",
   "A_set_accessor_parameter_cannot_have_an_initializer_1052": "Ein set-Zugriffsmethodenparameter darf keinen Initialisierer aufweisen.",
   "A_signature_with_an_implementation_cannot_use_a_string_literal_type_2381": "Eine Signatur mit einer Implementierung darf keinen Zeichenfolgen-Literaltyp verwenden.",
+  "A_spread_argument_must_either_have_a_tuple_type_or_be_passed_to_a_rest_parameter_2556": "Ein Überfüllungsargument muss entweder einen Tupeltyp aufweisen oder an einen Restparameter übergeben werden.",
   "A_super_call_must_be_the_first_statement_in_the_constructor_when_a_class_contains_initialized_proper_2376": "Ein super-Aufruf muss die erste Anweisung im Konstruktor sein, wenn eine Klasse initialisierte Eigenschaften, Parametereigenschaften oder private Bezeichner enthält.",
   "A_this_based_type_guard_is_not_compatible_with_a_parameter_based_type_guard_2518": "Ein auf \"this\" basierender Typwächter ist nicht mit einem parameterbasierten Typwächter kompatibel.",
   "A_this_type_is_available_only_in_a_non_static_member_of_a_class_or_interface_2526": "Ein this-Typ ist nur in einem nicht statischen Member einer Klasse oder Schnittstelle verfügbar.",
@@ -114,8 +118,11 @@
   "Add_a_return_statement_95111": "return-Anweisung hinzufügen",
   "Add_all_missing_async_modifiers_95041": "Alle fehlenden async-Modifizierer hinzufügen",
   "Add_all_missing_call_parentheses_95068": "Alle fehlenden Klammern in Aufrufen hinzufügen",
+  "Add_all_missing_function_declarations_95157": "Alle fehlenden Funktionsdeklarationen hinzufügen",
   "Add_all_missing_imports_95064": "Alle fehlenden Importe hinzufügen",
   "Add_all_missing_members_95022": "Alle fehlenden Member hinzufügen",
+  "Add_all_missing_override_modifiers_95162": "Alle fehlenden override-Modifizierer hinzufügen",
+  "Add_all_missing_properties_95166": "Alle fehlenden Eigenschaften hinzufügen",
   "Add_all_missing_return_statement_95114": "Alle fehlenden return-Anweisungen hinzufügen",
   "Add_all_missing_super_calls_95039": "Alle fehlenden super-Aufrufe hinzufügen",
   "Add_async_modifier_to_containing_function_90029": "Async-Modifizierer zur enthaltenden Funktion hinzufügen",
@@ -135,18 +142,22 @@
   "Add_initializers_to_all_uninitialized_properties_95027": "Allen nicht initialisierten Eigenschaften Initialisierer hinzufügen",
   "Add_missing_call_parentheses_95067": "Fehlende Klammern in Aufrufen hinzufügen",
   "Add_missing_enum_member_0_95063": "Fehlenden Enumerationsmember \"{0}\" hinzufügen",
+  "Add_missing_function_declaration_0_95156": "Fehlende Funktionsdeklaration \"{0}\" hinzufügen",
   "Add_missing_new_operator_to_all_calls_95072": "Fehlenden new-Operator zu allen Aufrufen hinzufügen",
   "Add_missing_new_operator_to_call_95071": "Fehlender new-Operator zum Aufruf hinzufügen",
+  "Add_missing_properties_95165": "Fehlende Eigenschaften hinzufügen",
   "Add_missing_super_call_90001": "Fehlenden super()-Aufruf hinzufügen",
   "Add_missing_typeof_95052": "Fehlenden \"typeof\" hinzufügen",
   "Add_names_to_all_parameters_without_names_95073": "Namen zu allen Parametern ohne Namen hinzufügen",
   "Add_or_remove_braces_in_an_arrow_function_95058": "Geschweifte Klammern zu einer Pfeilfunktion hinzufügen oder daraus entfernen",
+  "Add_override_modifier_95160": "override-Modifizierer hinzufügen",
   "Add_parameter_name_90034": "Parameternamen hinzufügen",
   "Add_qualifier_to_all_unresolved_variables_matching_a_member_name_95037": "Allen nicht aufgelösten Variablen, die einem Membernamen entsprechen, Qualifizierer hinzufügen",
   "Add_this_parameter_95104": "this-Parameter hinzufügen",
   "Add_this_tag_95103": "@this-Tag hinzufügen",
   "Add_to_all_uncalled_decorators_95044": "Allen nicht aufgerufenen Decorators \"()\" hinzufügen",
   "Add_ts_ignore_to_all_error_messages_95042": "Allen Fehlermeldungen \"@ts-ignore\" hinzufügen",
+  "Add_undefined_to_a_type_when_accessed_using_an_index_6674": "Fügen Sie einem Typ \"undefined\" hinzu, wenn über einen Index darauf zugegriffen wird.",
   "Add_undefined_type_to_all_uninitialized_properties_95029": "Allen nicht initialisierten Eigenschaften einen nicht definierten Typ hinzufügen",
   "Add_undefined_type_to_property_0_95018": "undefined-Typ zu Eigenschaft \"{0}\" hinzufügen",
   "Add_unknown_conversion_for_non_overlapping_types_95069": "Konvertierung \"unknown\" für Typen ohne Überschneidung hinzufügen",
@@ -154,8 +165,6 @@
   "Add_void_to_Promise_resolved_without_a_value_95143": "\"Void\" zu ohne Wert aufgelöstem Promise hinzufügen",
   "Add_void_to_all_Promises_resolved_without_a_value_95144": "\"Void\" allen ohne Wert aufgelösten Promises hinzufügen",
   "Adding_a_tsconfig_json_file_will_help_organize_projects_that_contain_both_TypeScript_and_JavaScript__5068": "Das Hinzufügen einer \"tsconfig.json\"-Datei erleichtert die Organisation von Projekten, die sowohl TypeScript- als auch JavaScript-Dateien enthalten. Weitere Informationen finden Sie unter https://aka.ms/tsconfig.",
-  "Additional_Checks_6176": "Zusätzliche Überprüfungen",
-  "Advanced_Options_6178": "Erweiterte Optionen",
   "All_declarations_of_0_must_have_identical_modifiers_2687": "Alle Deklarationen von \"{0}\" müssen identische Modifizierer aufweisen.",
   "All_declarations_of_0_must_have_identical_type_parameters_2428": "Alle Deklarationen von \"{0}\" müssen identische Typparameter aufweisen.",
   "All_declarations_of_an_abstract_method_must_be_consecutive_2516": "Alle Deklarationen einer abstrakten Methode müssen aufeinanderfolgend sein.",
@@ -163,16 +172,19 @@
   "All_imports_in_import_declaration_are_unused_6192": "Keiner der Importe in der Importdeklaration wird verwendet.",
   "All_type_parameters_are_unused_6205": "Sämtliche Typparameter werden nicht verwendet.",
   "All_variables_are_unused_6199": "Alle Variablen werden nicht verwendet.",
-  "Allow_accessing_UMD_globals_from_modules_95076": "Zugriff auf globale UMD-Bibliotheken aus Modulen zulassen",
+  "Allow_JavaScript_files_to_be_a_part_of_your_program_Use_the_checkJS_option_to_get_errors_from_these__6600": "Lassen Sie JavaScript-Dateien Teil Ihres Programms werden. Verwenden Sie die Option \"checkJS\", um Fehler aus diesen Dateien abzurufen.",
+  "Allow_accessing_UMD_globals_from_modules_6602": "Zugriff auf globale UMD-Bibliotheken aus Modulen zulassen",
   "Allow_default_imports_from_modules_with_no_default_export_This_does_not_affect_code_emit_just_typech_6011": "Standardimporte von Modulen ohne Standardexport zulassen. Dies wirkt sich nicht auf die Codeausgabe aus, lediglich auf die Typprüfung.",
+  "Allow_import_x_from_y_when_a_module_doesn_t_have_a_default_export_6601": "\"Import x from y\" zulassen, wenn ein Modul keinen Standardexport hat.",
+  "Allow_importing_helper_functions_from_tslib_once_per_project_instead_of_including_them_per_file_6639": "Das Importieren von Hilfsfunktionen aus tslib einmal pro Projekt zulassen, anstatt sie pro Datei einzubeziehen.",
   "Allow_javascript_files_to_be_compiled_6102": "Kompilierung von JavaScript-Dateien zulassen.",
+  "Allow_multiple_folders_to_be_treated_as_one_when_resolving_modules_6691": "Lassen Sie zu, dass mehrere Ordner beim Auflösen von Modulen als ein Ordner behandelt werden.",
   "Already_included_file_name_0_differs_from_file_name_1_only_in_casing_1261": "Der bereits enthaltene Dateiname \"{0}\" unterscheidet sich vom Dateinamen \"{1}\" nur hinsichtlich der Groß-/Kleinschreibung.",
   "Ambient_module_declaration_cannot_specify_relative_module_name_2436": "Die Umgebungsmoduldeklaration darf keinen relativen Modulnamen angeben.",
   "Ambient_modules_cannot_be_nested_in_other_modules_or_namespaces_2435": "Umgebungsmodule dürfen nicht in andere Module oder Namespaces geschachtelt werden.",
   "An_AMD_module_cannot_have_multiple_name_assignments_2458": "Ein AMD-Modul darf nicht mehrere Namenzuweisungen aufweisen.",
   "An_abstract_accessor_cannot_have_an_implementation_1318": "Ein abstrakter Accessor kann keine Implementierung aufweisen.",
   "An_accessibility_modifier_cannot_be_used_with_a_private_identifier_18010": "Ein Zugriffsmodifizierer kann nicht mit einem privaten Bezeichner verwendet werden.",
-  "An_accessor_cannot_be_named_with_a_private_identifier_18023": "Ein Accessor kann nicht mit einem privaten Bezeichner benannt werden.",
   "An_accessor_cannot_have_type_parameters_1094": "Eine Zugriffsmethode darf keine Typparameter aufweisen.",
   "An_ambient_module_declaration_is_only_allowed_at_the_top_level_in_a_file_1234": "Eine Umgebungsmoduldeklaration ist nur auf der obersten Ebene in einer Datei zulässig.",
   "An_argument_for_0_was_not_provided_6210": "Für \"{0}\" wurde ein Argument nicht angegeben.",
@@ -187,10 +199,11 @@
   "An_enum_member_cannot_be_named_with_a_private_identifier_18024": "Ein Enumerationsmember kann nicht mit einem privaten Bezeichner benannt werden.",
   "An_enum_member_cannot_have_a_numeric_name_2452": "Ein Enumerationsmember darf keinen numerischen Namen besitzen.",
   "An_enum_member_name_must_be_followed_by_a_or_1357": "Auf einen Namen eines Enumerationsmembers muss ein \",\", \"=\" oder \"}\" folgen.",
-  "An_export_assignment_can_only_be_used_in_a_module_1231": "Eine Exportzuweisung kann nur in einem Modul verwendet werden.",
+  "An_expanded_version_of_this_information_showing_all_possible_compiler_options_6928": "Eine erweiterte Version dieser Informationen mit allen möglichen Compileroptionen",
   "An_export_assignment_cannot_be_used_in_a_module_with_other_exported_elements_2309": "Eine Exportzuweisung darf nicht in einem Modul mit anderen exportierten Elementen verwendet werden.",
   "An_export_assignment_cannot_be_used_in_a_namespace_1063": "Eine Exportzuweisung darf nicht in einem Namespace verwendet werden.",
   "An_export_assignment_cannot_have_modifiers_1120": "Eine Exportzuweisung darf keine Modifizierer besitzen.",
+  "An_export_assignment_must_be_at_the_top_level_of_a_file_or_module_declaration_1231": "Eine Exportzuweisung muss sich auf der obersten Ebene einer Datei- oder Moduldeklaration befinden.",
   "An_export_declaration_can_only_be_used_in_a_module_1233": "Eine Exportdeklaration kann nur in einem Modul verwendet werden.",
   "An_export_declaration_cannot_have_modifiers_1193": "Eine Exportdeklaration darf keine Modifizierer besitzen.",
   "An_expression_of_type_void_cannot_be_tested_for_truthiness_1345": "Für einen Ausdruck vom Typ \"void\" kann nicht getestet werden, ob er wahr oder falsch ist.",
@@ -212,9 +225,8 @@
   "An_index_signature_parameter_cannot_have_an_accessibility_modifier_1018": "Ein Indexsignaturparameter darf keinen Zugriffsmodifizierer besitzen.",
   "An_index_signature_parameter_cannot_have_an_initializer_1020": "Ein Indexsignaturparameter darf keinen Initialisierer besitzen.",
   "An_index_signature_parameter_must_have_a_type_annotation_1022": "Ein Indexsignaturparameter muss eine Typanmerkung besitzen.",
-  "An_index_signature_parameter_type_cannot_be_a_type_alias_Consider_writing_0_Colon_1_Colon_2_instead_1336": "Ein Indexsignaturparametertyp darf kein Typalias sein. Erwägen Sie stattdessen die Schreibung \"[{0}: {1}]: {2}\".",
-  "An_index_signature_parameter_type_cannot_be_a_union_type_Consider_using_a_mapped_object_type_instead_1337": "Ein Indexsignaturparametertyp darf kein Union-Typ sein. Erwägen Sie stattdessen die Verwendung eines zugeordneten Objekttyps.",
-  "An_index_signature_parameter_type_must_be_either_string_or_number_1023": "Der Typ eines Indexsignaturparameters muss \"string\" oder \"number\" lauten.",
+  "An_index_signature_parameter_type_cannot_be_a_literal_type_or_generic_type_Consider_using_a_mapped_o_1337": "Ein Indexsignaturparametertyp darf kein Literaltyp oder generischer Typ sein. Erwägen Sie stattdessen die Verwendung eines zugeordneten Objekttyps.",
+  "An_index_signature_parameter_type_must_be_string_number_symbol_or_a_template_literal_type_1268": "Ein Parametertyp für die Indexsignatur muss \"string\", \"number\", \"symbol\" oder ein Vorlagenliteraltyp sein.",
   "An_interface_can_only_extend_an_identifier_Slashqualified_name_with_optional_type_arguments_2499": "Eine Schnittstelle kann nur einen Bezeichner/\"qualified-name\" mit optionalen Typargumenten erweitern.",
   "An_interface_can_only_extend_an_object_type_or_intersection_of_object_types_with_statically_known_me_2312": "Eine Schnittstelle kann nur einen Objekttyp oder eine Schnittmenge von Objekttypen mit statisch bekannten Membern erweitern.",
   "An_interface_property_cannot_have_an_initializer_1246": "Schnittstelleneigenschaften können keinen Initialisierer aufweisen.",
@@ -225,6 +237,7 @@
   "An_object_literal_cannot_have_property_and_accessor_with_the_same_name_1119": "Ein Objektliteral darf nicht eine Eigenschaft und eine Zugriffsmethode mit demselben Namen besitzen.",
   "An_object_member_cannot_be_declared_optional_1162": "Ein Objektmember darf nicht als optional deklariert werden.",
   "An_optional_chain_cannot_contain_private_identifiers_18030": "Eine optionale Kette kann keine privaten Bezeichner enthalten.",
+  "An_optional_element_cannot_follow_a_rest_element_1266": "Ein optionales Element darf nicht auf ein rest-Element folgen.",
   "An_outer_value_of_this_is_shadowed_by_this_container_2738": "Ein äußerer Wert von \"this\" wird durch diesen Container verborgen.",
   "An_overload_signature_cannot_be_declared_as_a_generator_1222": "Eine Überladungssignatur darf nicht als ein Generator deklariert werden.",
   "An_unary_expression_with_the_0_operator_is_not_allowed_in_the_left_hand_side_of_an_exponentiation_ex_17006": "Unäre Ausdrücke mit dem Operator \"{0}\" sind auf der linken Seite von Potenzierungsausdrücken nicht zulässig. Erwägen Sie, den Ausdruck in Klammern zu setzen.",
@@ -244,33 +257,47 @@
   "Augmentations_for_the_global_scope_can_only_be_directly_nested_in_external_modules_or_ambient_module_2669": "Erweiterungen für den globalen Bereich können nur in externen Modulen oder Umgebungsmoduldeklarationen direkt geschachtelt werden.",
   "Augmentations_for_the_global_scope_should_have_declare_modifier_unless_they_appear_in_already_ambien_2670": "Erweiterungen für den globalen Bereich sollten den Modifizierer \"declare\" aufweisen, wenn sie nicht bereits in einem Umgebungskontext auftreten.",
   "Auto_discovery_for_typings_is_enabled_in_project_0_Running_extra_resolution_pass_for_module_1_using__6140": "In Projekt \"{0}\" ist die automatische Erkennung von Eingaben aktiviert. Es wird ein zusätzlicher Auflösungsdurchlauf für das Modul \"{1}\" unter Verwendung von Cachespeicherort \"{2}\" ausgeführt.",
+  "Await_expression_cannot_be_used_inside_a_class_static_block_18037": "Der \"Await\"-Ausdruck kann nicht innerhalb eines statischen Klassenblocks verwendet werden.",
+  "BUILD_OPTIONS_6919": "BUILDOPTIONEN",
+  "Backwards_Compatibility_6253": "Abwärtskompatibilität",
   "Base_class_expressions_cannot_reference_class_type_parameters_2562": "Basisklassenausdrücke können nicht auf Klassentypparameter verweisen.",
   "Base_constructor_return_type_0_is_not_an_object_type_or_intersection_of_object_types_with_statically_2509": "Der Rückgabetyp \"{0}\" des Basiskonstruktors ist kein Objekttyp oder eine Schnittmenge von Objekttypen mit statisch bekannten Membern.",
   "Base_constructors_must_all_have_the_same_return_type_2510": "Basiskonstruktoren müssen alle den gleichen Rückgabetyp aufweisen.",
   "Base_directory_to_resolve_non_absolute_module_names_6083": "Das Basisverzeichnis zum Auflösen nicht absoluter Modulnamen.",
-  "Basic_Options_6172": "Standardoptionen",
   "BigInt_literals_are_not_available_when_targeting_lower_than_ES2020_2737": "bigint-Literale sind nicht verfügbar, wenn die Zielversion niedriger ist als ES2020.",
   "Binary_digit_expected_1177": "Es wurde eine Binärzahl erwartet.",
   "Binding_element_0_implicitly_has_an_1_type_7031": "Das Bindungselement \"{0}\" weist implizit einen Typ \"{1}\" auf.",
   "Block_scoped_variable_0_used_before_its_declaration_2448": "Die blockbezogene Variable \"{0}\" wurde vor ihrer Deklaration verwendet.",
-  "Build_all_projects_including_those_that_appear_to_be_up_to_date_6368": "Alle Projekte erstellen, einschließlich solcher, die anscheinend auf dem neuesten Stand sind",
+  "Build_a_composite_project_in_the_working_directory_6925": "Erstellen Sie ein zusammengesetztes Projekt im Arbeitsverzeichnis.",
+  "Build_all_projects_including_those_that_appear_to_be_up_to_date_6636": "Alle Projekte erstellen, einschließlich solcher, die anscheinend auf dem neuesten Stand sind",
   "Build_one_or_more_projects_and_their_dependencies_if_out_of_date_6364": "Mindestens ein Projekt und die zugehörigen Abhängigkeiten erstellen, wenn veraltet",
   "Build_option_0_requires_a_value_of_type_1_5073": "Die Buildoption \"{0}\" erfordert einen Wert vom Typ \"{1}\".",
   "Building_project_0_6358": "Projekt \"{0}\" wird erstellt...",
+  "COMMAND_LINE_FLAGS_6921": "BEFEHLSZEILENFLAGS",
+  "COMMON_COMMANDS_6916": "ALLGEMEINE BEFEHLE",
+  "COMMON_COMPILER_OPTIONS_6920": "ALLGEMEINE COMPILEROPTIONEN",
   "Call_decorator_expression_90028": "Decorator-Ausdruck aufrufen",
   "Call_signature_return_types_0_and_1_are_incompatible_2202": "Die Rückgabetypen \"{0}\" und \"{1}\" der Aufrufsignatur sind nicht kompatibel.",
   "Call_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type_7020": "Eine Aufrufsignatur ohne Rückgabetypanmerkung weist implizit einen any-Rückgabetyp auf.",
   "Call_signatures_with_no_arguments_have_incompatible_return_types_0_and_1_2204": "Aufrufsignaturen ohne Argumente weisen inkompatible Rückgabetypen \"{0}\" und \"{1}\" auf.",
   "Call_target_does_not_contain_any_signatures_2346": "Das Aufrufziel enthält keine Signaturen.",
   "Can_only_convert_logical_AND_access_chains_95142": "Es können nur Zugriffsketten mit logischem \"Und\" konvertiert werden.",
+  "Can_only_convert_named_export_95164": "Nur ein benannter Export kann konvertiert werden.",
   "Can_only_convert_property_with_modifier_95137": "Die Eigenschaft kann nur mit einem Modifizierer konvertiert werden.",
+  "Can_only_convert_string_concatenation_95154": "Es ist nur die Konvertierung einer Zeichenfolgenverkettung möglich.",
   "Cannot_access_0_1_because_0_is_a_type_but_not_a_namespace_Did_you_mean_to_retrieve_the_type_of_the_p_2713": "Der Zugriff auf \"{0}.{1}\" ist nicht möglich, da \"{0}\" ein Typ ist, aber kein Namespace. Wollten Sie den Typ der Eigenschaft \"{1}\" in \"{0}\" mit \"{0}[\"{1}\"]\" abrufen?",
   "Cannot_access_ambient_const_enums_when_the_isolatedModules_flag_is_provided_2748": "Auf umgebende const-Enumerationen kann nicht zugegriffen werden, wenn das Flag \"--isolatedModules\" angegeben wird.",
   "Cannot_assign_a_0_constructor_type_to_a_1_constructor_type_2672": "Ein Konstruktortyp \"{0}\" kann nicht einem Konstruktortyp \"{1}\" zugewiesen werden.",
   "Cannot_assign_an_abstract_constructor_type_to_a_non_abstract_constructor_type_2517": "Ein abstrakter Konstruktortyp kann nicht einem nicht abstrakten Konstruktortyp zugewiesen werden.",
+  "Cannot_assign_to_0_because_it_is_a_class_2629": "Eine Zuweisung zu \"{0}\" ist nicht möglich, weil es sich um eine Klasse handelt.",
   "Cannot_assign_to_0_because_it_is_a_constant_2588": "Eine Zuweisung zu \"{0}\" ist nicht möglich, weil es sich um eine Konstante handelt.",
+  "Cannot_assign_to_0_because_it_is_a_function_2630": "Eine Zuweisung zu \"{0}\" ist nicht möglich, weil es sich um eine Funktion handelt.",
+  "Cannot_assign_to_0_because_it_is_a_namespace_2631": "Eine Zuweisung zu \"{0}\" ist nicht möglich, weil es sich um einen Namespace handelt.",
   "Cannot_assign_to_0_because_it_is_a_read_only_property_2540": "Eine Zuweisung zu \"{0}\" ist nicht möglich, weil es sich um eine schreibgeschützte Eigenschaft handelt.",
+  "Cannot_assign_to_0_because_it_is_an_enum_2628": "Eine Zuweisung zu \"{0}\" ist nicht möglich, weil es sich um eine Enumeration handelt.",
+  "Cannot_assign_to_0_because_it_is_an_import_2632": "Eine Zuweisung zu \"{0}\" ist nicht möglich, weil es sich um einen Import handelt.",
   "Cannot_assign_to_0_because_it_is_not_a_variable_2539": "Eine Zuweisung zu \"{0}\" ist nicht möglich, weil es sich nicht um eine Variable handelt.",
+  "Cannot_assign_to_private_method_0_Private_methods_are_not_writable_2803": "Eine Zuweisung zur private Methode \"{0}\" ist nicht möglich. In private Methoden kann nicht geschrieben werden.",
   "Cannot_augment_module_0_because_it_resolves_to_a_non_module_entity_2671": "Das Modul \"{0}\" kann nicht erweitert werden, weil es in eine Nicht-Modulentität aufgelöst wird.",
   "Cannot_augment_module_0_with_value_exports_because_it_resolves_to_a_non_module_entity_2649": "Das Modul \"{0}\" kann nicht mit Wertexporten vergrößert werden, da es zu einer Entität aufgelöst wird, die kein Modul darstellt.",
   "Cannot_compile_modules_using_option_0_unless_the_module_flag_is_amd_or_system_6131": "Module können nur mithilfe der Option \"{0}\" kompiliert werden, wenn die Kennzeichnung \"-module\" den Wert \"amd\" oder \"system\" aufweist.",
@@ -318,11 +345,13 @@
   "Cannot_redeclare_block_scoped_variable_0_2451": "Die blockbezogene Variable \"{0}\" Blockbereich kann nicht erneut deklariert werden.",
   "Cannot_redeclare_exported_variable_0_2323": "Die exportierte Variable \"{0}\" kann nicht erneut deklariert werden.",
   "Cannot_redeclare_identifier_0_in_catch_clause_2492": "Der Bezeichner \"{0}\" in der Catch-Klausel kann nicht erneut deklariert werden.",
+  "Cannot_start_a_function_call_in_a_type_annotation_1441": "Kann in einer Typanmerkung keinen Funktionsaufruf starten.",
   "Cannot_update_output_of_project_0_because_there_was_error_reading_file_1_6376": "Die Ausgabe des Projekts \"{0}\" kann nicht aktualisiert werden, weil es beim Lesen der Datei \"{1}\" zu einem Fehler gekommen ist.",
   "Cannot_use_JSX_unless_the_jsx_flag_is_provided_17004": "JSX kann nur verwendet werden, wenn das Flag \"-jsx\" angegeben wird.",
   "Cannot_use_imports_exports_or_module_augmentations_when_module_is_none_1148": "Es können keine imports-, exports- oder module-Erweiterungen verwendet werden, wenn \"-module\" den Wert \"none\" aufweist.",
   "Cannot_use_namespace_0_as_a_type_2709": "Der Namespace \"{0}\" kann nicht als Typ verwendet werden.",
   "Cannot_use_namespace_0_as_a_value_2708": "Der Namespace \"{0}\" kann nicht als Wert verwendet werden.",
+  "Cannot_use_this_in_a_static_property_initializer_of_a_decorated_class_2816": "\"This\" kann nicht in einem statischen Eigenschafteninitialisierer einer ergänzten Klasse verwendet werden.",
   "Cannot_write_file_0_because_it_will_overwrite_tsbuildinfo_file_generated_by_referenced_project_1_6377": "Die Datei \"{0}\" kann nicht geschrieben werden, weil hierdurch die TSBUILDINFO-Datei überschrieben wird, die durch das referenzierte Projekt \"{1}\" generiert wird.",
   "Cannot_write_file_0_because_it_would_be_overwritten_by_multiple_input_files_5056": "Die Datei \"{0}\" kann nicht geschrieben werden, da sie durch mehrere Eingabedateien überschrieben würde.",
   "Cannot_write_file_0_because_it_would_overwrite_input_file_5055": "Die Datei \"{0}\" kann nicht geschrieben werden, da sie eine Eingabedatei überschreiben würde.",
@@ -334,6 +363,8 @@
   "Change_all_jsdoc_style_types_to_TypeScript_and_add_undefined_to_nullable_types_95031": "Alle jsdoc-style-Typen in TypeScript ändern (und Nullable-Typen \"| undefined\" hinzufügen)",
   "Change_extends_to_implements_90003": "\"extends\" in \"implements\" ändern",
   "Change_spelling_to_0_90022": "Schreibweise in \"{0}\" ändern",
+  "Check_for_class_properties_that_are_declared_but_not_set_in_the_constructor_6700": "Suchen Sie nach Klasseneigenschaften, die im Konstruktor deklariert, aber nicht festgelegt sind.",
+  "Check_that_the_arguments_for_bind_call_and_apply_methods_match_the_original_function_6697": "Überprüfen Sie, ob die Argumente für die Methoden \"bind\", \"call\" und \"apply\" mit der ursprünglichen Funktion übereinstimmen.",
   "Checking_if_0_is_the_longest_matching_prefix_for_1_2_6104": "Es wird überprüft, ob \"{0}\" das längste übereinstimmende Präfix für \"{1}\"–\"{2}\" ist.",
   "Circular_definition_of_import_alias_0_2303": "Zirkuläre Definition des Importalias \"{0}\".",
   "Circularity_detected_while_resolving_configuration_Colon_0_18000": "Eine Zirkularität wurde beim Auflösen der Konfiguration erkannt: {0}",
@@ -345,7 +376,9 @@
   "Class_0_incorrectly_implements_class_1_Did_you_mean_to_extend_1_and_inherit_its_members_as_a_subclas_2720": "Die Klasse \"{0}\" implementiert fälschlicherweise die Klasse \"{1}\". Wollten Sie \"{1}\" erweitern und ihre Member als Unterklasse vererben?",
   "Class_0_incorrectly_implements_interface_1_2420": "Die Klasse \"{0}\" implementiert fälschlicherweise die Schnittstelle \"{1}\".",
   "Class_0_used_before_its_declaration_2449": "Klasse \"{0}\", die vor der Deklaration verwendet wurde.",
+  "Class_declaration_cannot_implement_overload_list_for_0_2813": "Die Klassendeklaration kann die Überladungsliste für \"{0}\" nicht implementieren.",
   "Class_declarations_cannot_have_more_than_one_augments_or_extends_tag_8025": "Klassendeklarationen dürfen maximal ein \"@augments\"- oder \"@extends\"-Tag aufweisen.",
+  "Class_decorators_can_t_be_used_with_static_private_identifier_Consider_removing_the_experimental_dec_18036": "Decorator-Elemente von Klassen können nicht mit einem statischen privaten Bezeichner verwendet werden. Erwägen Sie, das experimentelle Decorator-Element zu entfernen.",
   "Class_name_cannot_be_0_2414": "Der Klassenname darf nicht \"{0}\" sein.",
   "Class_name_cannot_be_Object_when_targeting_ES5_with_module_0_2725": "Der Klassenname darf nicht \"Object\" lauten, wenn ES5 mit Modul \"{0}\" als Ziel verwendet wird.",
   "Class_static_side_0_incorrectly_extends_base_class_static_side_1_2417": "Die statische Seite der Klasse \"{0}\" erweitert fälschlicherweise die statische Seite der Basisklasse \"{1}\".",
@@ -354,16 +387,25 @@
   "Classes_may_not_have_a_field_named_constructor_18006": "Klassen dürfen kein Feld mit dem Namen \"constructor\" aufweisen.",
   "Command_line_Options_6171": "Befehlszeilenoptionen",
   "Compile_the_project_given_the_path_to_its_configuration_file_or_to_a_folder_with_a_tsconfig_json_6020": "Kompilieren Sie das dem Pfad zugewiesene Projekt zu dessen Konfigurationsdatei oder zu einem Ordner mit der Datei \"tsconfig.json\".",
+  "Compiler_Diagnostics_6251": "Compilerdiagnose",
   "Compiler_option_0_expects_an_argument_6044": "Die Compileroption \"{0}\" erwartet ein Argument.",
+  "Compiler_option_0_may_not_be_used_with_build_5094": "Die Compileroption \"--{0}\" darf nicht mit \"--build\" verwendet werden.",
+  "Compiler_option_0_may_only_be_used_with_build_5093": "Die Compileroption \"--{0}\" darf nur mit \"--build\" verwendet werden.",
   "Compiler_option_0_requires_a_value_of_type_1_5024": "Die Compileroption \"{0}\" erfordert einen Wert vom Typ \"{1}\".",
   "Compiler_reserves_name_0_when_emitting_private_identifier_downlevel_18027": "Der Compiler reserviert den Namen \"{0}\", wenn er einen privaten Bezeichner für Vorgängerversionen ausgibt.",
+  "Compiles_the_TypeScript_project_located_at_the_specified_path_6927": "Kompiliert das am angegebenen Pfad befindliche TypeScript-Projekt",
+  "Compiles_the_current_project_tsconfig_json_in_the_working_directory_6923": "Kompiliert das aktuelle Projekt (tsconfig.json im Arbeitsverzeichnis.)",
+  "Compiles_the_current_project_with_additional_settings_6929": "Kompiliert das aktuelle Projekt mit zusätzlichen Einstellungen",
+  "Completeness_6257": "Vollständigkeit",
   "Composite_projects_may_not_disable_declaration_emit_6304": "In zusammengesetzten Projekten kann die Deklarationsausgabe nicht deaktiviert werden.",
   "Composite_projects_may_not_disable_incremental_compilation_6379": "Zusammengesetzte Projekte dürfen die inkrementelle Kompilierung nicht deaktivieren.",
+  "Computed_from_the_list_of_input_files_6911": "Aus der Liste der Eingabedateien berechnet",
   "Computed_property_names_are_not_allowed_in_enums_1164": "Berechnete Eigenschaftennamen sind in Enumerationen unzulässig.",
   "Computed_values_are_not_permitted_in_an_enum_with_string_valued_members_2553": "Berechnete Werte sind in einer Enumeration mit Membern mit Zeichenfolgenwerten nicht zulässig.",
   "Concatenate_and_emit_output_to_single_file_6001": "Verketten und Ausgabe in einer Datei speichern.",
   "Conflicting_definitions_for_0_found_at_1_and_2_Consider_installing_a_specific_version_of_this_librar_4090": "In Konflikt stehende Definitionen für \"{0}\" wurden unter \"{1}\" und \"{2}\" gefunden. Installieren Sie ggf. eine bestimmte Version dieser Bibliothek, um den Konflikt aufzulösen.",
   "Conflicts_are_in_this_file_6201": "In dieser Datei liegen Konflikte vor.",
+  "Consider_adding_a_declare_modifier_to_this_class_6506": "Erwägen Sie, dieser Klasse einen declare-Modifizierer hinzuzufügen.",
   "Construct_signature_return_types_0_and_1_are_incompatible_2203": "Die Rückgabetypen \"{0}\" und \"{1}\" der Konstruktsignatur sind nicht kompatibel.",
   "Construct_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type_7013": "Eine Konstruktsignatur ohne Rückgabetypanmerkung weist implizit einen any-Rückgabetyp auf.",
   "Construct_signatures_with_no_arguments_have_incompatible_return_types_0_and_1_2205": "Konstruktsignaturen ohne Argumente weisen inkompatible Rückgabetypen \"{0}\" und \"{1}\" auf.",
@@ -413,16 +455,24 @@
   "Convert_to_type_only_export_1364": "In reinen Typenexport konvertieren",
   "Convert_to_type_only_import_1373": "In reinen Typenimport konvertieren",
   "Corrupted_locale_file_0_6051": "Die Gebietsschemadatei \"{0}\" ist beschädigt.",
+  "Could_not_convert_to_anonymous_function_95153": "Die Konvertierung in eine anonyme Funktion ist nicht möglich.",
+  "Could_not_convert_to_arrow_function_95151": "Die Konvertierung in eine Pfeilfunktion ist nicht möglich.",
+  "Could_not_convert_to_named_function_95152": "Die Konvertierung in eine benannte Funktion ist nicht möglich.",
+  "Could_not_determine_function_return_type_95150": "Der Rückgabetyp der Funktion konnte nicht bestimmt werden.",
   "Could_not_find_a_containing_arrow_function_95127": "Es wurde keine enthaltende Pfeilfunktion gefunden.",
   "Could_not_find_a_declaration_file_for_module_0_1_implicitly_has_an_any_type_7016": "Es wurde keine Deklarationsdatei für das Modul \"{0}\" gefunden. \"{1}\" weist implizit den Typ \"any\" auf.",
   "Could_not_find_convertible_access_expression_95140": "Kein konvertierbarer Zugriffsausdruck gefunden",
   "Could_not_find_export_statement_95129": "Die Exportanweisung wurde nicht gefunden.",
   "Could_not_find_import_clause_95131": "Die Importklausel wurde nicht gefunden.",
   "Could_not_find_matching_access_expressions_95141": "Keine übereinstimmenden Zugriffsausdrücke gefunden",
+  "Could_not_find_name_0_Did_you_mean_1_2570": "Der Name \"{0}\" wurde nicht gefunden. Meinten Sie \"{1}\"?",
   "Could_not_find_namespace_import_or_named_imports_95132": "Der Namespaceimport oder benannte Importe wurden nicht gefunden.",
   "Could_not_find_property_for_which_to_generate_accessor_95135": "Die Eigenschaft, für die die Zugriffsmethode generiert werden soll, wurde nicht gefunden.",
   "Could_not_resolve_the_path_0_with_the_extensions_Colon_1_6231": "Der Pfad \"{0}\" mit den Erweiterungen konnte nicht aufgelöst werden: {1}.",
   "Could_not_write_file_0_Colon_1_5033": "Die Datei \"{0}\" konnte nicht geschrieben werden. {1}.",
+  "Create_source_map_files_for_emitted_JavaScript_files_6694": "Erstellen Sie Quellzuordnungsdateien für ausgegebene JavaScript-Dateien.",
+  "Create_sourcemaps_for_d_ts_files_6614": "Erstellen Sie Quellzuordnungen für d.ts-Dateien.",
+  "Creates_a_tsconfig_json_with_the_recommended_settings_in_the_working_directory_6926": "Erstellt eine tsconfig.json mit den empfohlenen Einstellungen im Arbeitsverzeichnis.",
   "DIRECTORY_6038": "VERZEICHNIS",
   "Declaration_augments_declaration_in_another_file_This_cannot_be_serialized_6232": "Die Deklaration erweitert die Deklaration in einer anderen Datei. Dieser Vorgang kann nicht serialisiert werden.",
   "Declaration_emit_for_this_file_requires_using_private_name_0_An_explicit_type_annotation_may_unblock_9005": "Zur Deklarationsausgabe für diese Datei muss der private Name \"{0}\" verwendet werden. Eine explizite Typanmerkung kann die Deklarationsausgabe freigeben.",
@@ -430,6 +480,7 @@
   "Declaration_expected_1146": "Es wurde eine Deklaration erwartet.",
   "Declaration_name_conflicts_with_built_in_global_identifier_0_2397": "Der Deklarationsname steht in Konflikt mit dem integrierten globalen Bezeichner \"{0}\".",
   "Declaration_or_statement_expected_1128": "Es wurde eine Deklaration oder Anweisung erwartet.",
+  "Declaration_or_statement_expected_This_follows_a_block_of_statements_so_if_you_intended_to_write_a_d_2809": "Deklaration oder Anweisung erwartet. Dieses Gleichheitszeichen (=) folgt auf einen Anweisungsblock. Wenn Sie daher eine Destrukturierungszuweisung schreiben möchten, müssen Sie möglicherweise die gesamte Zuweisung in runde Klammern einschließen.",
   "Declarations_with_definite_assignment_assertions_must_also_have_type_annotations_1264": "Deklarationen mit definitiven Zuweisungsassertionen müssen auch Typanmerkungen aufweisen.",
   "Declarations_with_initializers_cannot_also_have_definite_assignment_assertions_1263": "Deklarationen mit Initialisierern dürfen keine definitiven Zuweisungsassertionen aufweisen.",
   "Declare_a_private_field_named_0_90053": "Deklarieren Sie ein privates Feld mit dem Namen \"{0}\".",
@@ -441,7 +492,11 @@
   "Declare_static_property_0_90027": "Statische Eigenschaft \"{0}\" deklarieren",
   "Decorators_are_not_valid_here_1206": "Decorators sind hier ungültig.",
   "Decorators_cannot_be_applied_to_multiple_get_Slashset_accessors_of_the_same_name_1207": "Decorators dürfen nicht auf mehrere get-/set-Zugriffsmethoden mit dem gleichen Namen angewendet werden.",
+  "Decorators_may_not_be_applied_to_this_parameters_1433": "Decorators dürfen nicht auf this-Parameter angewendet werden.",
+  "Decorators_must_precede_the_name_and_all_keywords_of_property_declarations_1436": "Vor dem Namen und allen Schlüsselwörtern von Eigenschaftendeklarationen müssen Decorator-Elemente stehen.",
   "Default_export_of_the_module_has_or_is_using_private_name_0_4082": "Der Standardexport des Moduls besitzt oder verwendet den privaten Namen \"{0}\".",
+  "Default_library_1424": "Standardbibliothek",
+  "Default_library_for_target_0_1425": "Standardbibliothek für Ziel \"{0}\"",
   "Definitions_of_the_following_identifiers_conflict_with_those_in_another_file_Colon_0_6200": "Definitionen der folgenden Bezeichner stehen in Konflikt mit denen in einer anderen Datei: {0}",
   "Delete_all_unused_declarations_95024": "Alle nicht verwendeten Deklarationen löschen",
   "Delete_all_unused_imports_95147": "Alle nicht verwendeten Importe löschen",
@@ -449,6 +504,7 @@
   "Deprecated_Use_jsxFactory_instead_Specify_the_object_invoked_for_createElement_when_targeting_react__6084": "[Veraltet] Verwenden Sie stattdessen \"--jsxFactory\". Geben Sie das Objekt an, das für \"createElement\" aufgerufen wurde, wenn das Ziel die JSX-Ausgabe \"react\" ist.",
   "Deprecated_Use_outFile_instead_Concatenate_and_emit_output_to_single_file_6170": "[Veraltet] Verwenden Sie stattdessen \"--outFile\". Verketten und Ausgeben in eine einzige Datei",
   "Deprecated_Use_skipLibCheck_instead_Skip_type_checking_of_default_library_declaration_files_6160": "[Veraltet] Verwenden Sie stattdessen \"--skipLibCheck\". Überspringen Sie die Typüberprüfung der Standardbibliothek-Deklarationsdateien.",
+  "Deprecated_setting_Use_outFile_instead_6677": "Veraltete Einstellung. Verwenden Sie stattdessen \"outFile\".",
   "Did_you_forget_to_use_await_2773": "Haben Sie vergessen, \"await\" zu verwenden?",
   "Did_you_mean_0_1369": "Meinten Sie \"{0}\"?",
   "Did_you_mean_for_0_to_be_constrained_to_type_new_args_Colon_any_1_2735": "Wollten Sie \"{0}\" auf den Typ \"new (...args: any[]) => {1}\" einschränken?",
@@ -459,12 +515,30 @@
   "Did_you_mean_to_use_new_with_this_expression_6213": "Wollten Sie \"new\" mit diesem Ausdruck verwenden?",
   "Digit_expected_1124": "Eine Ziffer wurde erwartet.",
   "Directory_0_does_not_exist_skipping_all_lookups_in_it_6148": "Das Verzeichnis \"{0}\" ist nicht vorhanden, Suchvorgänge darin werden übersprungen.",
+  "Disable_adding_use_strict_directives_in_emitted_JavaScript_files_6669": "Deaktivieren Sie das Hinzufügen von \"Use Strict\"-Direktiven in ausgesendeten JavaScript-Dateien.",
   "Disable_checking_for_this_file_90018": "Überprüfung für diese Datei deaktivieren",
+  "Disable_emitting_comments_6688": "Deaktivieren Sie das Ausgeben von Kommentaren.",
+  "Disable_emitting_declarations_that_have_internal_in_their_JSDoc_comments_6701": "Deaktivieren Sie das Ausgeben von Deklarationen mit \"@internal\" in ihren JSDoc-Kommentaren.",
+  "Disable_emitting_file_from_a_compilation_6660": "Deaktivieren Sie das Ausgeben einer Datei aus einer Kompilierung.",
+  "Disable_emitting_files_if_any_type_checking_errors_are_reported_6662": "Deaktivieren Sie das Ausgeben von Dateien, wenn Typüberprüfungsfehler gemeldet werden.",
+  "Disable_erasing_const_enum_declarations_in_generated_code_6682": "Deaktivieren Sie das Löschen von \"const enum\"-Deklarationen in generiertem Code.",
+  "Disable_error_reporting_for_unreachable_code_6603": "Deaktivieren Sie die Fehlerberichterstattung für nicht erreichbaren Code.",
+  "Disable_error_reporting_for_unused_labels_6604": "Deaktivieren Sie die Fehlerberichterstattung für nicht verwendete Bezeichnungen.",
+  "Disable_generating_custom_helper_functions_like_extends_in_compiled_output_6661": "Deaktivieren Sie das Generieren von benutzerdefinierten Hilfsfunktionen wie \"__extends\" in der kompilierten Ausgabe.",
+  "Disable_including_any_library_files_including_the_default_lib_d_ts_6670": "Deaktivieren Sie das Einschließen von Bibliotheksdateien, einschließlich der Standarddatei \"lib.d.ts\".",
   "Disable_loading_referenced_projects_6235": "Deaktivieren Sie das Laden referenzierter Projekte.",
+  "Disable_preferring_source_files_instead_of_declaration_files_when_referencing_composite_projects_6620": "Deaktivieren bevorzugter Quelldateien anstelle von Deklarationsdateien beim Verweisen auf zusammengesetzte Projekte",
+  "Disable_reporting_of_excess_property_errors_during_the_creation_of_object_literals_6702": "Deaktivieren Sie die Meldung übermäßiger Eigenschaftsfehler während der Erstellung von Objektliteralen.",
+  "Disable_resolving_symlinks_to_their_realpath_This_correlates_to_the_same_flag_in_node_6683": "Deaktivieren Sie das Auflösen von symlinks in ihren Realpfad. Dies korreliert mit derselben Kennzeichnung im Knoten.",
   "Disable_size_limitations_on_JavaScript_projects_6162": "Größenbeschränkungen für JavaScript-Projekte deaktivieren.",
   "Disable_solution_searching_for_this_project_6224": "Deaktivieren Sie die Projektmappensuche für dieses Projekt.",
-  "Disable_strict_checking_of_generic_signatures_in_function_types_6185": "Deaktivieren Sie die strenge Überprüfung generischer Signaturen in Funktionstypen.",
+  "Disable_strict_checking_of_generic_signatures_in_function_types_6673": "Deaktivieren Sie die strenge Überprüfung generischer Signaturen in Funktionstypen.",
+  "Disable_the_type_acquisition_for_JavaScript_projects_6625": "Typ-Akquisition für JavaScript-Projekte deaktivieren",
+  "Disable_truncating_types_in_error_messages_6663": "Deaktivieren Sie das Abschneiden von Typen in Fehlermeldungen.",
   "Disable_use_of_source_files_instead_of_declaration_files_from_referenced_projects_6221": "Deaktivieren Sie die Verwendung von Quelldateien anstelle von Deklarationsdateien aus referenzierten Projekten.",
+  "Disable_wiping_the_console_in_watch_mode_6684": "Deaktivieren Sie das Zurücksetzen der Konsole im Überwachungsmodus.",
+  "Disables_inference_for_type_acquisition_by_looking_at_filenames_in_a_project_6616": "Deaktiviert den Rückschluss für den Typabruf, indem Dateinamen in einem Projekt betrachtet werden.",
+  "Disallow_import_s_require_s_or_reference_s_from_expanding_the_number_of_files_TypeScript_should_add__6672": "Hiermit wird verhindert, dass \"import\", \"require\" oder \"<Reference>\" die Anzahl der Dateien erweitern, die TypeScript einem Projekt hinzufügen soll.",
   "Disallow_inconsistently_cased_references_to_the_same_file_6078": "Verweise mit uneinheitlicher Groß-/Kleinschreibung auf die gleiche Datei nicht zulassen.",
   "Do_not_add_triple_slash_references_or_imported_modules_to_the_list_of_compiled_files_6159": "Fügen Sie keine Verweise mit dreifachen Schrägstrichen oder importierte Module zur Liste kompilierter Dateien hinzu.",
   "Do_not_emit_comments_to_output_6009": "Kommentare nicht an die Ausgabe ausgeben.",
@@ -483,31 +557,48 @@
   "Duplicate_identifier_0_2300": "Doppelter Bezeichner \"{0}\".",
   "Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module_2441": "Doppelter Bezeichner \"{0}\". Der Compiler reserviert den Namen \"{1}\" im Bereich der obersten Ebene eines Moduls.",
   "Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module_containing_async_func_2529": "Doppelter Bezeichner \"{0}\". Der Compiler reserviert den Namen \"{1}\" im Bereich der obersten Ebene eines Moduls, das asynchrone Funktionen enthält.",
+  "Duplicate_identifier_0_Compiler_reserves_name_1_when_emitting_super_references_in_static_initializer_2818": "Doppelter Bezeichner „{0}“. Der Compiler reserviert den Namen „{1}“ beim Ausgeben von „Super“-Verweisen in statischen Initialisierern.",
   "Duplicate_identifier_0_Compiler_uses_declaration_1_to_support_async_functions_2520": "Doppelter Bezeichner \"{0}\". Der Compiler verwendet die Deklaration \"{1}\", um asynchrone Funktionen zu unterstützen.",
+  "Duplicate_identifier_0_Static_and_instance_elements_cannot_share_the_same_private_name_2804": "Doppelter Bezeichner \"{0}\". Statische Elemente und Instanzelemente dürfen nicht denselben privaten Namen aufweisen.",
   "Duplicate_identifier_arguments_Compiler_uses_arguments_to_initialize_rest_parameters_2396": "Doppelter Bezeichner \"arguments\". Der Compiler verwendet \"arguments\" zum Initialisieren der rest-Parameter.",
   "Duplicate_identifier_newTarget_Compiler_uses_variable_declaration_newTarget_to_capture_new_target_me_2543": "Doppelter Bezeichner \"_newTarget\". Der Compiler verwendet die Variablendeklaration \"_newTarget\" zum Erfassen der Metaeigenschaftenreferenz \"new.target\".",
   "Duplicate_identifier_super_Compiler_uses_super_to_capture_base_class_reference_2401": "Doppelter Bezeichner \"_super\". Der Compiler verwendet \"_super\" zum Erfassen des Basisklassenverweises.",
   "Duplicate_identifier_this_Compiler_uses_variable_declaration_this_to_capture_this_reference_2399": "Doppelter Bezeichner \"_this\". Der Compiler verwendet die Variablendeklaration \"_this\" zum Erfassen des this-Verweises.",
+  "Duplicate_index_signature_for_type_0_2374": "Doppelte Indexsignatur für Typ \"{0}\".",
   "Duplicate_label_0_1114": "Doppelte Bezeichnung \"{0}\".",
-  "Duplicate_number_index_signature_2375": "Doppelte Zahlenindexsignatur.",
   "Duplicate_property_0_2718": "Doppelte Eigenschaft: {0}",
-  "Duplicate_string_index_signature_2374": "Doppelte Zeichenfolgen-Indexsignatur.",
   "Dynamic_import_cannot_have_type_arguments_1326": "Der dynamische Import kann keine Typargumente aufweisen.",
   "Dynamic_import_must_have_one_specifier_as_an_argument_1324": "Der dynamische Import benötigt einen Spezifizierer als Argument.",
   "Dynamic_import_s_specifier_must_be_of_type_string_but_here_has_type_0_7036": "Der Spezifizierer des dynamischen Imports muss den Typ \"string\" aufweisen, hier ist er jedoch vom Typ \"{0}\".",
   "Dynamic_imports_are_only_supported_when_the_module_flag_is_set_to_es2020_esnext_commonjs_amd_system__1323": "Dynamische Importe werden nur unterstützt, wenn das Flag \"--module\" auf \"es2020\", \"esnext\", \"commonjs\", \"amd\", \"system\" oder \"umd\" festgelegt ist.",
   "Each_member_of_the_union_type_0_has_construct_signatures_but_none_of_those_signatures_are_compatible_2762": "Jeder Member des union-Typs \"{0}\" weist Konstruktsignaturen auf, aber keine dieser Signaturen ist miteinander kompatibel.",
   "Each_member_of_the_union_type_0_has_signatures_but_none_of_those_signatures_are_compatible_with_each_2758": "Jeder Member des union-Typs \"{0}\" weist Signaturen auf, aber keine dieser Signaturen ist miteinander kompatibel.",
-  "Element_at_index_0_is_variadic_in_one_type_but_not_in_the_other_2622": "Das Element bei Index {0} ist in einem Typ variadisch, aber nicht im anderen.",
+  "Editor_Support_6249": "Editor-Unterstützung",
   "Element_implicitly_has_an_any_type_because_expression_of_type_0_can_t_be_used_to_index_type_1_7053": "Das Element weist implizit einen Typ \"any\" auf, weil der Ausdruck vom Typ \"{0}\" nicht für den Indextyp \"{1}\" verwendet werden kann.",
   "Element_implicitly_has_an_any_type_because_index_expression_is_not_of_type_number_7015": "Das Element weist implizit einen Typ \"any\" auf, weil der Indexausdruck nicht vom Typ \"number\" ist.",
   "Element_implicitly_has_an_any_type_because_type_0_has_no_index_signature_7017": "Das Element weist implizit einen Typ \"any\" auf, weil der Typ \"{0}\" keine Indexsignatur umfasst.",
   "Element_implicitly_has_an_any_type_because_type_0_has_no_index_signature_Did_you_mean_to_call_1_7052": "Das Element weist implizit einen Typ \"any\" auf, weil der Typ \"{0}\" keine Indexsignatur umfasst. Wollten Sie \"{1}\" aufrufen?",
-  "Emit_a_UTF_8_Byte_Order_Mark_BOM_in_the_beginning_of_output_files_6164": "Geben Sie zu Beginn der Ausgabedateien eine UTF-8-Bytereihenfolge-Marke (BOM) aus.",
+  "Emit_6246": "Ausgeben",
+  "Emit_ECMAScript_standard_compliant_class_fields_6712": "Geben Sie ECMAScript-standardkonforme Klassenfelder aus.",
+  "Emit_a_UTF_8_Byte_Order_Mark_BOM_in_the_beginning_of_output_files_6622": "Geben Sie zu Beginn der Ausgabedateien eine UTF-8-Bytereihenfolge-Marke (BOM) aus.",
   "Emit_a_single_file_with_source_maps_instead_of_having_a_separate_file_6151": "Geben Sie eine einzelne Datei mit Quellzuordnungen anstelle einer separaten Datei aus.",
+  "Emit_a_v8_CPU_profile_of_the_compiler_run_for_debugging_6638": "Geben Sie ein v8-CPU-Profil der Compilerausführung zum Debuggen aus.",
+  "Emit_additional_JavaScript_to_ease_support_for_importing_CommonJS_modules_This_enables_allowSyntheti_6626": "Geben Sie ein zusätzliches JavaScript aus, um die Unterstützung beim Importieren von CommonJS-Modulen zu vereinfachen. Hiermit wird \"allowSyntheticDefaultImports\" für die Typkompatibilität aktiviert.",
   "Emit_class_fields_with_Define_instead_of_Set_6222": "Geben Sie Klassenfelder mit \"Define\" anstelle von \"Set\" aus.",
+  "Emit_design_type_metadata_for_decorated_declarations_in_source_files_6624": "Geben Sie Entwurfstypmetadaten für ergänzte Deklarationen in Quelldateien aus.",
+  "Emit_more_compliant_but_verbose_and_less_performant_JavaScript_for_iteration_6621": "Geben Sie mehr kompatibles, aber ausführliches und weniger leistungsfähiges JavaScript für die Iteration aus.",
   "Emit_the_source_alongside_the_sourcemaps_within_a_single_file_requires_inlineSourceMap_or_sourceMap__6152": "Geben Sie die Quelle zusammen mit den Quellzuordnungen innerhalb einer einzelnen Datei aus; hierfür muss \"--inlineSourceMap\" oder \"--sourceMap\" festgelegt sein.",
   "Enable_all_strict_type_checking_options_6180": "Aktivieren Sie alle strengen Typüberprüfungsoptionen.",
+  "Enable_color_and_formatting_in_output_to_make_compiler_errors_easier_to_read_6685": "Farb-und Formatierungsvorgänge in der Ausgabe aktivieren, um Compilerfehler leichter lesbar zu machen",
+  "Enable_constraints_that_allow_a_TypeScript_project_to_be_used_with_project_references_6611": "Aktivieren Sie Einschränkungen, die die Verwendung eines TypeScript-Projekts mit Projektverweisen ermöglichen.",
+  "Enable_error_reporting_for_codepaths_that_do_not_explicitly_return_in_a_function_6667": "Aktivieren Sie die Fehlerberichterstattung für Codepfade, die nicht explizit in einer Funktion zurückgegeben werden.",
+  "Enable_error_reporting_for_expressions_and_declarations_with_an_implied_any_type_6665": "Aktivieren Sie die Fehlerberichterstattung für Ausdrücke und Deklarationen mit einem impliziten \"any\"-Typ.",
+  "Enable_error_reporting_for_fallthrough_cases_in_switch_statements_6664": "Aktivieren Sie die Fehlerberichterstellung für Fallthroughfälle in Switch-Anweisungen.",
+  "Enable_error_reporting_in_type_checked_JavaScript_files_6609": "Aktivieren Sie die Fehlerberichterstattung in typgeprüften JavaScript-Dateien.",
+  "Enable_error_reporting_when_a_local_variables_aren_t_read_6675": "Aktivieren Sie die Fehlerberichterstattung, wenn lokale Variablen nicht gelesen werden.",
+  "Enable_error_reporting_when_this_is_given_the_type_any_6668": "Aktivieren Sie die Fehlerberichterstattung, wenn \"this\" den Typ \"any\" erhält.",
+  "Enable_experimental_support_for_TC39_stage_2_draft_decorators_6630": "Aktivieren Sie experimentelle Unterstützung für Entwurf-Decorator der TC39-Phase 2.",
+  "Enable_importing_json_files_6689": "Importieren von JSON-Dateien aktivieren",
   "Enable_incremental_compilation_6378": "Inkrementelle Kompilierung aktivieren",
   "Enable_project_compilation_6302": "Projektkompilierung aktivieren",
   "Enable_strict_bind_call_and_apply_methods_on_functions_6214": "Aktivieren Sie die strict-Methoden \"bind\", \"call\" und \"apply\" für Funktionen.",
@@ -517,11 +608,20 @@
   "Enable_the_experimentalDecorators_option_in_your_configuration_file_95074": "Aktivieren Sie die Option \"experimentalDecorators\" in Ihrer Konfigurationsdatei.",
   "Enable_the_jsx_flag_in_your_configuration_file_95088": "Aktivieren Sie das Flag \"--jsx\" in Ihrer Konfigurationsdatei.",
   "Enable_tracing_of_the_name_resolution_process_6085": "Ablaufverfolgung des Namensauflösungsvorgangs aktivieren.",
-  "Enable_verbose_logging_6366": "Ausführliche Protokollierung aktivieren",
+  "Enable_verbose_logging_6713": "Ausführliche Protokollierung aktivieren",
   "Enables_emit_interoperability_between_CommonJS_and_ES_Modules_via_creation_of_namespace_objects_for__7037": "Ermöglicht Ausgabeinteroperabilität zwischen CommonJS- und ES-Modulen durch die Erstellung von Namespaceobjekten für alle Importe. Impliziert \"AllowSyntheticDefaultImports\".",
   "Enables_experimental_support_for_ES7_async_functions_6068": "Ermöglicht experimentelle Unterstützung für asynchrone ES7-Funktionen.",
   "Enables_experimental_support_for_ES7_decorators_6065": "Ermöglicht experimentelle Unterstützung für asynchrone ES7-Decorators.",
   "Enables_experimental_support_for_emitting_type_metadata_for_decorators_6066": "Ermöglicht experimentelle Unterstützung zum Ausgeben von Typmetadaten für Decorators.",
+  "Enforces_using_indexed_accessors_for_keys_declared_using_an_indexed_type_6671": "Erzwingt die Verwendung indizierter Accessoren für Schlüssel, die mithilfe eines indizierten Typs deklariert werden.",
+  "Ensure_overriding_members_in_derived_classes_are_marked_with_an_override_modifier_6666": "Stellen Sie sicher, dass überschreibende Member in abgeleiteten Klassen mit einem Überschreibungsmodifizierer markiert sind.",
+  "Ensure_that_casing_is_correct_in_imports_6637": "Stellen Sie sicher, dass die Groß-/Kleinschreibung beim Import korrekt ist.",
+  "Ensure_that_each_file_can_be_safely_transpiled_without_relying_on_other_imports_6645": "Stellen Sie sicher, dass jede Datei sicher transpiliert werden kann, ohne dass andere Importe erforderlich sind.",
+  "Ensure_use_strict_is_always_emitted_6605": "Stellen Sie sicher, dass \"Use Strict\" immer ausgegeben wird.",
+  "Entry_point_for_implicit_type_library_0_1420": "Einstiegspunkt für implizite Typbibliothek \"{0}\"",
+  "Entry_point_for_implicit_type_library_0_with_packageId_1_1421": "Einstiegspunkt für die implizite Typbibliothek \"{0}\" mit packageId \"{1}\"",
+  "Entry_point_of_type_library_0_specified_in_compilerOptions_1417": "Der in \"compilerOptions\" angegebene Einstiegspunkt der Typbibliothek \"{0}\"",
+  "Entry_point_of_type_library_0_specified_in_compilerOptions_with_packageId_1_1418": "Der in \"compilerOptions\" angegebene Einstiegspunkt der Typbibliothek \"{0}\" mit packageId \"{1}\"",
   "Enum_0_used_before_its_declaration_2450": "Enumeration \"{0}\", die vor der Deklaration wurde.",
   "Enum_declarations_can_only_merge_with_namespace_or_other_enum_declarations_2567": "Enumerationsdeklarationen können nur mit Namespace- oder anderen Enumerationsdeklarationen zusammengeführt werden.",
   "Enum_declarations_must_all_be_const_or_non_const_2473": "Enumerationsdeklarationen müssen alle konstant oder nicht konstant sein.",
@@ -535,15 +635,13 @@
   "Expected_0_1_type_arguments_provide_these_with_an_extends_tag_8027": "{0}-{1} Typargumente erwartet; geben Sie diese mit einem @extends-Tag an.",
   "Expected_0_arguments_but_got_1_2554": "{0} Argumente wurden erwartet, empfangen wurden aber {1}.",
   "Expected_0_arguments_but_got_1_Did_you_forget_to_include_void_in_your_type_argument_to_Promise_2794": "Es wurden {0} Argumente erwartet, aber {1} erhalten. Sollte \"void\" in Ihr Typargument in \"Promise\" eingeschlossen werden?",
-  "Expected_0_arguments_but_got_1_or_more_2556": "{0} Argumente wurden erwartet, empfangen wurden aber mindestens {1}.",
   "Expected_0_type_arguments_but_got_1_2558": "{0} Typenargumente wurden erwartet, empfangen wurden aber {1}.",
   "Expected_0_type_arguments_provide_these_with_an_extends_tag_8026": "{0} Typargumente erwartet; geben Sie diese mit einem @extends-Tag an.",
   "Expected_at_least_0_arguments_but_got_1_2555": "Mindestens {0} Argumente wurden erwartet, empfangen wurden aber {1}.",
-  "Expected_at_least_0_arguments_but_got_1_or_more_2557": "Mindestens {0} Argumente wurden erwartet, empfangen wurden aber mindestens {1}.",
   "Expected_corresponding_JSX_closing_tag_for_0_17002": "Das entsprechende schließende JSX-Tag wurde für \"{0}\" erwartet.",
   "Expected_corresponding_closing_tag_for_JSX_fragment_17015": "Für das JSX-Fragment wurde das entsprechende schließende Tag erwartet.",
+  "Expected_for_property_initializer_1442": "Für den Eigenschafteninitialisierer wurde \"=\" erwartet.",
   "Expected_type_of_0_field_in_package_json_to_be_1_got_2_6105": "Der erwartete Typ des Felds \"{0}\" in der Datei \"package.json\" lautet \"{1}\", empfangen wurde \"{2}\".",
-  "Experimental_Options_6177": "Experimentelle Optionen",
   "Experimental_support_for_decorators_is_a_feature_that_is_subject_to_change_in_a_future_release_Set_t_1219": "Die experimentelle Unterstützung für decorator-Elemente ist ein Feature, das in zukünftigen Versionen Änderungen unterliegt. Legen Sie die Option \"-experimentalDecorators\" in Ihrer \"tsconfig\" oder \"jsconfig\" fest, um diese Warnung zu entfernen.",
   "Explicitly_specified_module_resolution_kind_Colon_0_6087": "Explizit angegebene Art der Modulauflösung: \"{0}\".",
   "Exponentiation_cannot_be_performed_on_bigint_values_unless_the_target_option_is_set_to_es2016_or_lat_2791": "Die Potenzierung kann für bigint-Werte nur durchgeführt werden, wenn die Option \"target\" auf \"es2016\" oder höher festgelegt ist.",
@@ -554,12 +652,14 @@
   "Exported_external_package_typings_file_0_is_not_a_module_Please_contact_the_package_author_to_update_2656": "Die exportierte externe Pakettypisierungsdatei \"{0}\" ist kein Modul. Bitte wenden Sie sich an den Paketautor, um die Paketdefinition zu aktualisieren.",
   "Exported_external_package_typings_file_cannot_contain_tripleslash_references_Please_contact_the_pack_2654": "Exportierte externe Pakettypisierungen dürfen keine Verweise mit drei Schrägstrichen enthalten. Bitte wenden Sie sich an den Paketautor, um die Paketdefinition zu aktualisieren.",
   "Exported_type_alias_0_has_or_is_using_private_name_1_4081": "Der exportierte Typalias \"{0}\" besitzt oder verwendet den privaten Namen \"{1}\".",
+  "Exported_type_alias_0_has_or_is_using_private_name_1_from_module_2_4084": "Der exportierte Typalias \"{0}\" besitzt oder verwendet den privaten Namen \"{1}\" aus dem Modul \"{2}\".",
   "Exported_variable_0_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4023": "Die exportierte Variable \"{0}\" besitzt oder verwendet den Namen \"{1}\" aus dem externen Modul \"{2}\", kann aber nicht benannt werden.",
   "Exported_variable_0_has_or_is_using_name_1_from_private_module_2_4024": "Die exportierte Variable \"{0}\" besitzt oder verwendet den Namen \"{1}\" aus dem privaten Modul \"{2}\".",
   "Exported_variable_0_has_or_is_using_private_name_1_4025": "Die exportierte Variable \"{0}\" besitzt oder verwendet den privaten Namen \"{1}\".",
   "Exports_and_export_assignments_are_not_permitted_in_module_augmentations_2666": "Exporte und Exportzuweisungen sind in Modulerweiterungen unzulässig.",
   "Expression_expected_1109": "Es wurde ein Ausdruck erwartet.",
   "Expression_or_comma_expected_1137": "Es wurde ein Ausdruck oder Komma erwartet.",
+  "Expression_produces_a_tuple_type_that_is_too_large_to_represent_2800": "Der Ausdruck erzeugt einen Tupeltyp, der für die Darstellung zu groß ist.",
   "Expression_produces_a_union_type_that_is_too_complex_to_represent_2590": "Der Ausdruck erzeugt einen union-Typ, der für die Darstellung zu komplex ist.",
   "Expression_resolves_to_super_that_compiler_uses_to_capture_base_class_reference_2402": "Der Ausdruck wird in \"_super\" aufgelöst. Damit erfasst der Compiler den Basisklassenverweis.",
   "Expression_resolves_to_variable_declaration_0_that_compiler_uses_to_support_async_functions_2521": "Der Ausdruck wird in die Variablendeklaration \"{0}\" aufgelöst, die der Compiler verwendet, um asynchrone Funktionen zu unterstützen.",
@@ -579,7 +679,9 @@
   "Failed_to_parse_file_0_Colon_1_5014": "Fehler beim Analysieren der Datei \"{0}\": {1}.",
   "Fallthrough_case_in_switch_7029": "FallThrough-Fall in switch-Anweisung.",
   "File_0_does_not_exist_6096": "Die Datei \"{0}\" ist nicht vorhanden.",
+  "File_0_does_not_exist_according_to_earlier_cached_lookups_6240": "Die Datei \"{0}\" ist gemäß früheren zwischengespeicherten Lookups nicht vorhanden.",
   "File_0_exist_use_it_as_a_name_resolution_result_6097": "Die Datei \"{0}\" ist vorhanden – sie wird als Ergebnis der Namensauflösung verwendet.",
+  "File_0_exists_according_to_earlier_cached_lookups_6239": "Die Datei \"{0}\" ist gemäß früheren zwischengespeicherten Lookups vorhanden.",
   "File_0_has_an_unsupported_extension_The_only_supported_extensions_are_1_6054": "Die Datei \"{0}\" weist eine nicht unterstützte Erweiterung auf. Es werden nur die folgenden Erweiterungen unterstützt: {1}.",
   "File_0_has_an_unsupported_extension_so_skipping_it_6081": "Die Datei \"{0}\" hat eine nicht unterstützte Erweiterung und wird übersprungen.",
   "File_0_is_a_JavaScript_file_Did_you_mean_to_enable_the_allowJs_option_6504": "Die Datei \"{0}\" ist eine JavaScript-Datei. Wollten Sie die Option \"allowJs\" aktivieren?",
@@ -587,16 +689,32 @@
   "File_0_is_not_listed_within_the_file_list_of_project_1_Projects_must_list_all_files_or_use_an_includ_6307": "Die Datei \"{0}\" befindet sich nicht in der Dateiliste von Projekt \"{1}\". Projekte müssen alle Dateien auflisten oder ein include-Muster verwenden.",
   "File_0_is_not_under_rootDir_1_rootDir_is_expected_to_contain_all_source_files_6059": "Datei \"{0}\" befindet sich nicht unter \"rootDir\" \"{1}\". \"rootDir\" muss alle Quelldateien enthalten.",
   "File_0_not_found_6053": "Die Datei \"{0}\" wurde nicht gefunden.",
+  "File_Management_6245": "Dateiverwaltung",
   "File_change_detected_Starting_incremental_compilation_6032": "Es wurde eine Dateiänderung erkannt. Die inkrementelle Kompilierung wird gestartet...",
   "File_is_a_CommonJS_module_it_may_be_converted_to_an_ES6_module_80001": "Die Datei ist ein CommonJS-Modul, sie kann in ein ES6-Modul konvertiert werden.",
+  "File_is_default_library_for_target_specified_here_1426": "Die Datei ist die Standardbibliothek für das hier angegebene Ziel.",
+  "File_is_entry_point_of_type_library_specified_here_1419": "Die Datei ist ein Einstiegspunkt der hier angegebenen Typbibliothek.",
+  "File_is_included_via_import_here_1399": "Die Datei wird hier per Import eingeschlossen.",
+  "File_is_included_via_library_reference_here_1406": "Die Datei wird hier per Bibliotheksverweis eingeschlossen.",
+  "File_is_included_via_reference_here_1401": "Die Datei wird hier per Verweis eingeschlossen.",
+  "File_is_included_via_type_library_reference_here_1404": "Die Datei wird hier per Typbibliotheksverweis eingeschlossen.",
+  "File_is_library_specified_here_1423": "Die Datei ist die hier angegebene Bibliothek.",
+  "File_is_matched_by_files_list_specified_here_1410": "Die Datei wird mit der hier angegebenen Liste \"files\" abgeglichen.",
+  "File_is_matched_by_include_pattern_specified_here_1408": "Die Datei wird mit dem hier angegebenen include-Muster abgeglichen.",
+  "File_is_output_from_referenced_project_specified_here_1413": "Die Datei ist die Ausgabe des hier angegebenen referenzierten Projekts.",
+  "File_is_output_of_project_reference_source_0_1428": "Die Datei ist die Ausgabe der Projektverweisquelle \"{0}\".",
+  "File_is_source_from_referenced_project_specified_here_1416": "Die Datei ist die Quelle des hier angegebenen referenzierten Projekts.",
   "File_name_0_differs_from_already_included_file_name_1_only_in_casing_1149": "Der Dateiname \"{0}\" unterscheidet sich vom bereits enthaltenen Dateinamen \"{1}\" nur hinsichtlich der Groß-/Kleinschreibung.",
   "File_name_0_has_a_1_extension_stripping_it_6132": "Der Dateiname \"{0}\" weist eine Erweiterung \"{1}\" auf. Diese wird entfernt.",
+  "File_redirects_to_file_0_1429": "Die Datei leitet an die Datei \"{0}\" um.",
   "File_specification_cannot_contain_a_parent_directory_that_appears_after_a_recursive_directory_wildca_5065": "Die Dateispezifikation darf kein übergeordnetes Verzeichnis (\"..\") enthalten, das nach einem rekursiven Verzeichnisplatzhalter (\"**\") angegeben wird: \"{0}\".",
   "File_specification_cannot_end_in_a_recursive_directory_wildcard_Asterisk_Asterisk_Colon_0_5010": "Die Dateispezifikation darf nicht mit einem rekursiven Verzeichnisplatzhalter (\"**\") enden: \"{0}\".",
+  "Filters_results_from_the_include_option_6627": "Filtert Ergebnisse aus der Option \"include\".",
   "Fix_all_detected_spelling_errors_95026": "Alle erkannten Rechtschreibfehler korrigieren",
   "Fix_all_expressions_possibly_missing_await_95085": "Korrigieren Sie alle Ausdrücke, in denen \"await\" möglicherweise fehlt.",
   "Fix_all_implicit_this_errors_95107": "Alle impliziten this-Fehler beheben",
   "Fix_all_incorrect_return_type_of_an_async_functions_90037": "Alle falschen Rückgabetypen einer asynchronen Funktionen korrigieren",
+  "For_await_loops_cannot_be_used_inside_a_class_static_block_18038": "\"For await\"-Schleifen können nicht innerhalb eines statischen Klassenblocks verwendet werden.",
   "Found_0_errors_6217": "{0} Fehler gefunden.",
   "Found_0_errors_Watching_for_file_changes_6194": "{0} Fehler gefunden. Es wird auf Dateiänderungen überwacht.",
   "Found_1_error_6216": "1 Fehler gefunden.",
@@ -610,11 +728,14 @@
   "Function_implementation_name_must_be_0_2389": "Der Name der Funktionsimplementierung muss \"{0}\" lauten.",
   "Function_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_ref_7024": "Die Funktion weist implizit den Typ \"any\" auf, weil keine Rückgabetypanmerkung vorhanden ist und darauf direkt oder indirekt in einem ihrer Rückgabeausdrücke verwiesen wird.",
   "Function_lacks_ending_return_statement_and_return_type_does_not_include_undefined_2366": "Der Funktion fehlt die abschließende return-Anweisung, und der Rückgabetyp enthält nicht \"undefined\".",
+  "Function_not_implemented_95159": "Die Funktion ist nicht implementiert.",
   "Function_overload_must_be_static_2387": "Die Funktionsüberladung muss statisch sein.",
   "Function_overload_must_not_be_static_2388": "Die Funktionsüberladung darf nicht statisch sein.",
   "Function_type_notation_must_be_parenthesized_when_used_in_a_union_type_1385": "Die Notation des Funktionstyps muss in Klammern gesetzt werden, wenn sie in einem Union-Typ verwendet wird.",
   "Function_type_notation_must_be_parenthesized_when_used_in_an_intersection_type_1387": "Die Notation des Funktionstyps muss in Klammern gesetzt werden, wenn sie in einem Intersection-Typ verwendet wird.",
   "Function_type_which_lacks_return_type_annotation_implicitly_has_an_0_return_type_7014": "Ein Funktionstyp ohne Rückgabetypanmerkung weist implizit einen Rückgabetyp \"{0}\" auf.",
+  "Function_with_bodies_can_only_merge_with_classes_that_are_ambient_2814": "Eine Funktion mit Textkörpern kann nur mit Umgebungsklassen zusammengeführt werden.",
+  "Generate_d_ts_files_from_TypeScript_and_JavaScript_files_in_your_project_6612": "Generieren Sie .d.ts-Dateien aus TypeScript- und JavaScript-Dateien in Ihrem Projekt.",
   "Generate_get_and_set_accessors_95046": "GET- und SET-Accessoren generieren",
   "Generate_get_and_set_accessors_for_all_overriding_properties_95119": "get- und set-Zugriffsmethoden für alle überschreibenden Eigenschaften generieren",
   "Generates_a_CPU_profile_6223": "Generiert ein CPU-Profil.",
@@ -627,13 +748,13 @@
   "Generators_are_only_available_when_targeting_ECMAScript_2015_or_higher_1220": "Generatoren sind nur verfügbar, wenn das Ziel ECMAScript 2015 oder höher ist.",
   "Generic_type_0_requires_1_type_argument_s_2314": "Der generische Typ \"{0}\" erfordert {1} Typargument(e).",
   "Generic_type_0_requires_between_1_and_2_type_arguments_2707": "Der generische Typ \"{0}\" benötigt zwischen {1} und {2} Typargumente.",
-  "Getter_and_setter_accessors_do_not_agree_in_visibility_2379": "Die Sichtbarkeit der Getter- und Setter-Zugriffsmethoden stimmt nicht überein.",
   "Global_module_exports_may_only_appear_at_top_level_1316": "Globale Modulexporte dürfen nur auf der obersten Ebene auftreten.",
   "Global_module_exports_may_only_appear_in_declaration_files_1315": "Globale Modulexporte dürfen nur in Deklarationsdateien auftreten.",
   "Global_module_exports_may_only_appear_in_module_files_1314": "Globale Modulexporte dürfen nur in Moduldateien auftreten.",
   "Global_type_0_must_be_a_class_or_interface_type_2316": "Der globale Typ \"{0}\" muss eine Klassen- oder Schnittstellentyp sein.",
   "Global_type_0_must_have_1_type_parameter_s_2317": "Der globale Typ \"{0}\" muss {1} Typparameter aufweisen.",
   "Have_recompiles_in_incremental_and_watch_assume_that_changes_within_a_file_will_only_affect_files_di_6384": "Legen Sie für Neukompilierungen in \"--incremental\" und \"--watch\" fest, dass sich Änderungen innerhalb einer Datei nur auf die direkt davon abhängigen Dateien auswirken.",
+  "Have_recompiles_in_projects_that_use_incremental_and_watch_mode_assume_that_changes_within_a_file_wi_6606": "Bei Neukompilierungen in Projekten, die den Modus \"incremental\" und \"watch\" verwenden, wird davon ausgegangen, dass Änderungen innerhalb einer Datei sich nur auf die direkt davon abhängigen Dateien auswirken.",
   "Hexadecimal_digit_expected_1125": "Es wurde eine hexadezimale Zahl erwartet.",
   "Identifier_expected_0_is_a_reserved_word_at_the_top_level_of_a_module_1262": "Bezeichner erwartet. \"{0}\" ist ein reserviertes Wort auf der obersten Ebene eines Moduls.",
   "Identifier_expected_0_is_a_reserved_word_in_strict_mode_1212": "Ein Bezeichner wird erwartet. \"{0}\" ist ein reserviertes Wort im Strict-Modus.",
@@ -644,6 +765,7 @@
   "Identifier_expected_esModule_is_reserved_as_an_exported_marker_when_transforming_ECMAScript_modules_1216": "Bezeichner erwartet. \"__esModule\" ist als exportierter Marker für die Umwandlung von ECMAScript-Modulen reserviert.",
   "If_the_0_package_actually_exposes_this_module_consider_sending_a_pull_request_to_amend_https_Colon_S_7040": "Wenn das Paket \"{0}\" dieses Modul tatsächlich verfügbar macht, erwägen Sie, einen Pull Request zum Ändern von https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/{1} zu senden.",
   "Ignore_this_error_message_90019": "Diese Fehlermeldung ignorieren",
+  "Ignoring_tsconfig_json_compiles_the_specified_files_with_default_compiler_options_6924": "Ignoriert tsconfig.json und kompiliert die angegebenen Dateien mit den Standard-Compileroptionen",
   "Implement_all_inherited_abstract_classes_95040": "Alle geerbten abstrakten Klassen implementieren",
   "Implement_all_unimplemented_interfaces_95032": "Alle nicht implementierten Schnittstellen implementieren",
   "Implement_inherited_abstract_class_90007": "Geerbte abstrakte Klasse implementieren",
@@ -660,14 +782,23 @@
   "Import_may_be_converted_to_a_default_import_80003": "Der Import kann in einen Standardimport konvertiert werden.",
   "Import_name_cannot_be_0_2438": "Der Importname darf nicht \"{0}\" sein.",
   "Import_or_export_declaration_in_an_ambient_module_declaration_cannot_reference_module_through_relati_2439": "Import- oder Exportdeklaration in einer Umgebungsmoduldeklaration dürfen nicht über den relativen Modulnamen auf ein Modul verweisen.",
+  "Imported_via_0_from_file_1_1393": "Importiert über \"{0}\" aus der Datei \"{1}\"",
+  "Imported_via_0_from_file_1_to_import_importHelpers_as_specified_in_compilerOptions_1395": "Importiert über \"{0}\" aus der Datei \"{1}\" zum Importieren von \"importHelpers\", wie in \"compilerOptions\" angegeben",
+  "Imported_via_0_from_file_1_to_import_jsx_and_jsxs_factory_functions_1397": "Importiert über \"{0}\" aus der Datei \"{1}\" zum Importieren der Factoryfunktionen \"jsx\" und \"jsxs\"",
+  "Imported_via_0_from_file_1_with_packageId_2_1394": "Importiert über \"{0}\" aus der Datei \"{1}\" mit packageId \"{2}\"",
+  "Imported_via_0_from_file_1_with_packageId_2_to_import_importHelpers_as_specified_in_compilerOptions_1396": "Importiert über \"{0}\" aus der Datei \"{1}\" mit packageId \"{2}\" zum Importieren von \"importHelpers\", wie in \"compilerOptions\" angegeben",
+  "Imported_via_0_from_file_1_with_packageId_2_to_import_jsx_and_jsxs_factory_functions_1398": "Importiert über \"{0}\" aus der Datei \"{1}\" mit packageId \"{2}\" zum Importieren der Factoryfunktionen \"jsx\" und \"jsxs\"",
   "Imports_are_not_permitted_in_module_augmentations_Consider_moving_them_to_the_enclosing_external_mod_2667": "Importe sind in Modulerweiterungen unzulässig. Verschieben Sie diese ggf. in das einschließende externe Modul.",
   "In_ambient_enum_declarations_member_initializer_must_be_constant_expression_1066": "In Umgebungsenumerationsdeklarationen muss der Memberinitialisierer ein konstanter Ausdruck sein.",
   "In_an_enum_with_multiple_declarations_only_one_declaration_can_omit_an_initializer_for_its_first_enu_2432": "In einer Enumeration mit mehreren Deklarationen kann nur eine Deklaration einen Initialisierer für das erste Enumerationselement ausgeben.",
+  "Include_a_list_of_files_This_does_not_support_glob_patterns_as_opposed_to_include_6635": "Schließen Sie eine Liste von Dateien ein. Dies unterstützt keine Globmuster im Gegensatz zu \"include\".",
   "Include_modules_imported_with_json_extension_6197": "Importierte Module mit der Erweiterung \"JSON\" einschließen",
-  "Include_undefined_in_index_signature_results_6800": "\"Nicht definiert\" in Indexsignaturergebnisse einbeziehen",
+  "Include_source_code_in_the_sourcemaps_inside_the_emitted_JavaScript_6644": "Fügen Sie den Quellcode in die Quellzuordnungen innerhalb des ausgesendeten JavaScript-Codes ein.",
+  "Include_sourcemap_files_inside_the_emitted_JavaScript_6643": "Schließen Sie Quellzuordnungsdateien in das ausgegebene JavaScript ein.",
+  "Include_undefined_in_index_signature_results_6716": "\"Nicht definiert\" in Indexsignaturergebnisse einbeziehen",
+  "Including_watch_w_will_start_watching_the_current_project_for_the_file_changes_Once_set_you_can_conf_6914": "Bei Einschließung von --watch beginnt -w, das aktuelle Projekt auf Dateiänderungen zu überwachen. Einmal eingestellt, können Sie den Überwachungsmodus konfigurieren, und zwar mit:",
+  "Index_signature_for_type_0_is_missing_in_type_1_2329": "Die Indexsignatur für den Typ \"{0}\" fehlt im Typ \"{1}\".",
   "Index_signature_in_type_0_only_permits_reading_2542": "Die Indexsignatur in Typ \"{0}\" lässt nur Lesevorgänge zu.",
-  "Index_signature_is_missing_in_type_0_2329": "Die Indexsignatur fehlt im Typ \"{0}\".",
-  "Index_signatures_are_incompatible_2330": "Die Indexsignaturen sind nicht kompatibel.",
   "Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local_2395": "Einzelne Deklarationen in der gemergten Deklaration \"{0}\" müssen alle exportiert oder alle lokal sein.",
   "Infer_all_types_from_usage_95023": "Alle Typen aus der Syntax ableiten",
   "Infer_function_return_type_95148": "Funktionsrückgabetyp ableiten",
@@ -676,6 +807,7 @@
   "Infer_type_of_0_from_usage_95011": "Typ von \"{0}\" aus der Nutzung ableiten",
   "Initialize_property_0_in_the_constructor_90020": "Eigenschaft \"{0}\" im Konstruktor initialisieren",
   "Initialize_static_property_0_90021": "Statische Eigenschaft \"{0}\" initialisieren",
+  "Initializer_for_property_0_2811": "Initialisierer für Eigenschaft \"{0}\"",
   "Initializer_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor_2301": "Der Initialisierer der Instanzmembervariablen \"{0}\" darf nicht auf den im Konstruktor deklarierten Bezeichner \"{1}\" verweisen.",
   "Initializer_provides_no_value_for_this_binding_element_and_the_binding_element_has_no_default_value_2525": "Der Initialisierer stellt keinen Wert für dieses Bindungselement bereit, und das Bindungselement besitzt keinen Standardwert.",
   "Initializers_are_not_allowed_in_ambient_contexts_1039": "Initialisierer sind in Umgebungskontexten unzulässig.",
@@ -686,12 +818,16 @@
   "Interface_0_cannot_simultaneously_extend_types_1_and_2_2320": "Die Schnittstelle \"{0}\" kann die Typen \"{1}\" und \"{2}\" nicht gleichzeitig erweitern.",
   "Interface_0_incorrectly_extends_interface_1_2430": "Die Schnittstelle \"{0}\" erweitert fälschlicherweise die Schnittstelle \"{1}\".",
   "Interface_declaration_cannot_have_implements_clause_1176": "Die Schnittstellendeklarationen darf keine implements-Klausel aufweisen.",
+  "Interface_must_be_given_a_name_1438": "Schnittstelle muss einen Namen erhalten.",
   "Interface_name_cannot_be_0_2427": "Der Schnittstellenname darf nicht \"{0}\" sein.",
+  "Interop_Constraints_6252": "Interop-Einschränkungen",
+  "Interpret_optional_property_types_as_written_rather_than_adding_undefined_6243": "Interpretieren Sie optionale Eigenschaftstypen als geschrieben, statt 'nicht definiert' hinzuzufügen.",
   "Invalid_character_1127": "Ungültiges Zeichen.",
   "Invalid_module_name_in_augmentation_Module_0_resolves_to_an_untyped_module_at_1_which_cannot_be_augm_2665": "Ungültiger Modulname in Augmentation. Das Modul \"{0}\" wird in ein nicht typisiertes Modul in \"{1}\" aufgelöst, das nicht augmentiert werden kann.",
   "Invalid_module_name_in_augmentation_module_0_cannot_be_found_2664": "Ungültiger Modulname in der Erweiterung. Das Modul \"{0}\" wurde nicht gefunden.",
   "Invalid_reference_directive_syntax_1084": "Ungültige Syntax der reference-Direktive.",
   "Invalid_use_of_0_Class_definitions_are_automatically_in_strict_mode_1210": "Ungültige Verwendung von \"{0}\". Klassendefinitionen befinden sich automatisch im Strict-Modus.",
+  "Invalid_use_of_0_It_cannot_be_used_inside_a_class_static_block_18039": "Ungültige Verwendung von \"{0}\". Es kann nicht innerhalb eines statischen Klassenblocks verwendet werden.",
   "Invalid_use_of_0_Modules_are_automatically_in_strict_mode_1215": "Ungültige Verwendung von \"{0}\". Module befinden sich automatisch im Strict-Modus.",
   "Invalid_use_of_0_in_strict_mode_1100": "Ungültige Verwendung von \"{0}\" im Strict-Modus.",
   "Invalid_value_for_jsxFactory_0_is_not_a_valid_identifier_or_qualified_name_5067": "Ungültiger Wert für \"jsxFactory\". \"{0}\" ist kein gültiger Bezeichner oder qualifizierter Name.",
@@ -723,13 +859,18 @@
   "JSX_expressions_may_not_use_the_comma_operator_Did_you_mean_to_write_an_array_18007": "JSX-Ausdrücke dürfen keinen Komma-Operator verwenden. Wollten Sie ein Array schreiben?",
   "JSX_expressions_must_have_one_parent_element_2657": "JSX-Ausdrücke müssen ein übergeordnetes Element aufweisen.",
   "JSX_fragment_has_no_corresponding_closing_tag_17014": "Das JSX-Fragment weist kein entsprechendes schließendes Tag auf.",
+  "JSX_property_access_expressions_cannot_include_JSX_namespace_names_2633": "Ausdrücke für den Zugriff auf JSX-Eigenschaften dürfen keine JSX-Namespacenamen enthalten.",
   "JSX_spread_child_must_be_an_array_type_2609": "Die untergeordnete JSX-Verteilung muss ein Arraytyp sein.",
+  "JavaScript_Support_6247": "JavaScript-Unterstützung",
   "Jump_target_cannot_cross_function_boundary_1107": "Das Sprungziel darf die Funktionsgrenze nicht überschreiten.",
   "KIND_6034": "ART",
   "Keywords_cannot_contain_escape_characters_1260": "Schlüsselwörter können keine Escapezeichen enthalten.",
   "LOCATION_6037": "SPEICHERORT",
+  "Language_and_Environment_6254": "Sprache und Umgebung",
   "Language_service_is_disabled_9004": "Der Sprachdienst ist deaktiviert.",
   "Left_side_of_comma_operator_is_unused_and_has_no_side_effects_2695": "Die linke Seite des Kommaoperators wird nicht verwendet besitzt keine Nebenwirkungen.",
+  "Library_0_specified_in_compilerOptions_1422": "In \"compilerOptions\" angegebene Bibliothek \"{0}\"",
+  "Library_referenced_via_0_from_file_1_1405": "Bibliothek, die über \"{0}\" aus der Datei \"{1}\" referenziert wird",
   "Line_break_not_permitted_here_1142": "Ein Zeilenumbruch ist hier unzulässig.",
   "Line_terminator_not_permitted_before_arrow_1200": "Das Zeilenabschlusszeichen ist vor dem Pfeil unzulässig.",
   "List_of_folders_to_include_type_definitions_from_6161": "Liste der Ordner, aus denen Typendefinitionen einbezogen werden sollen.",
@@ -739,11 +880,14 @@
   "Loading_module_0_from_node_modules_folder_target_file_type_1_6098": "Modul \"{0}\" wird aus dem Ordner \"node_modules\" geladen, die Zieldatei ist vom Typ \"{1}\".",
   "Loading_module_as_file_Slash_folder_candidate_module_location_0_target_file_type_1_6095": "Modul wird als Datei/Ordner geladen, der Speicherort des Kandidatenmoduls ist \"{0}\", die Zieldatei ist vom Typ \"{1}\".",
   "Locale_must_be_of_the_form_language_or_language_territory_For_example_0_or_1_6048": "Für das Gebietsschema ist das Format <Sprache> oder <Sprache>-<Gebiet> erforderlich, z. B. \"{0}\" oder \"{1}\".",
+  "Log_paths_used_during_the_moduleResolution_process_6706": "Protokollpfade, die während des \"moduleResolution\"-Prozesses verwendet werden.",
   "Longest_matching_prefix_for_0_is_1_6108": "Das längste übereinstimmende Präfix für \"{0}\" ist \"{1}\".",
   "Looking_up_in_node_modules_folder_initial_location_0_6125": "Die Suche erfolgt im Ordner \"node_modules\". Anfangsspeicherort \"{0}\".",
   "Make_all_super_calls_the_first_statement_in_their_constructor_95036": "Alle \"super()\"-Aufrufe als erste Anweisung im entsprechenden Konstruktor festlegen",
+  "Make_keyof_only_return_strings_instead_of_string_numbers_or_symbols_Legacy_option_6650": "Stellen Sie ein, dass keyof nur Zeichenfolgen, anstelle von Zeichenfolgen, Zahlen oder Symbolen zurückgibt. Legacy-Option.",
   "Make_super_call_the_first_statement_in_the_constructor_90002": "super()-Aufruf als erste Anweisung im Konstruktor festlegen",
   "Mapped_object_type_implicitly_has_an_any_template_type_7039": "Der zugeordnete Objekttyp weist implizit einen any-Vorlagentyp auf.",
+  "Matched_by_include_pattern_0_in_1_1407": "Abgeglichen mit dem include-Muster \"{0}\" in \"{1}\"",
   "Member_0_implicitly_has_an_1_type_7008": "Der Member \"{0}\" weist implizit den Typ \"{1}\" auf.",
   "Member_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage_7045": "Member \"{0}\" weist implizit einen Typ \"{1}\" auf, möglicherweise kann jedoch ein besserer Typ aus der Syntax abgeleitet werden.",
   "Merge_conflict_marker_encountered_1185": "Mergekonfliktmarkierung",
@@ -752,6 +896,7 @@
   "Method_0_cannot_have_an_implementation_because_it_is_marked_abstract_1245": "Die Methode \"{0}\" darf keine Implementierung besitzen, weil sie als abstrakt markiert ist.",
   "Method_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2_4101": "Die Methode \"{0}\" der exportierten Schnittstelle besitzt oder verwendet den Namen \"{1}\" aus dem privaten Modul \"{2}\".",
   "Method_0_of_exported_interface_has_or_is_using_private_name_1_4102": "Die Methode \"{0}\" der exportierten Schnittstelle besitzt oder verwendet den privaten Namen \"{1}\".",
+  "Method_not_implemented_95158": "Die Methode ist nicht implementiert.",
   "Modifiers_cannot_appear_here_1184": "Modifizierer dürfen hier nicht enthalten sein.",
   "Module_0_can_only_be_default_imported_using_the_1_flag_1259": "Das Modul \"{0}\" kann nur mit dem Flag \"{1}\" als Standard importiert werden.",
   "Module_0_declares_1_locally_but_it_is_exported_as_2_2460": "Das Modul \"{0}\" deklariert \"{1}\" lokal, der Export erfolgt jedoch als \"{2}\".",
@@ -769,13 +914,14 @@
   "Module_0_was_resolved_as_locally_declared_ambient_module_in_file_1_6144": "Das Modul \"{0}\" wurde als lokal deklariertes Umgebungsmodul in der Datei \"{1}\" aufgelöst.",
   "Module_0_was_resolved_to_1_but_jsx_is_not_set_6142": "Das Modul \"{0}\" wurde zu \"{1}\" aufgelöst, aber \"--jsx\" wurde nicht festgelegt.",
   "Module_0_was_resolved_to_1_but_resolveJsonModule_is_not_used_7042": "Das Modul \"{0}\" wurde in \"{1}\" aufgelöst, aber \"--resolveJsonModule\" wird nicht verwendet.",
-  "Module_Resolution_Options_6174": "Modulauflösungsoptionen",
+  "Module_declaration_names_may_only_use_or_quoted_strings_1443": "Namen der Moduldeklaration dürfen nur Zeichenfolgen enthalten, die von ' oder \" eingeschlossen werden.",
   "Module_name_0_matched_pattern_1_6092": "Modulname \"{0}\", übereinstimmendes Muster \"{1}\".",
   "Module_name_0_was_not_resolved_6090": "======== Der Modulname \"{0}\" wurde nicht aufgelöst. ========",
   "Module_name_0_was_successfully_resolved_to_1_6089": "======== Der Modulname \"{0}\" wurde erfolgreich in \"{1}\" aufgelöst. ========",
   "Module_name_0_was_successfully_resolved_to_1_with_Package_ID_2_6218": "======== Der Modulname \"{0}\" wurde erfolgreich in \"{1}\" mit Paket-ID \"{2}\" aufgelöst. ========",
   "Module_resolution_kind_is_not_specified_using_0_6088": "Die Art der Modulauflösung wird nicht angegeben. \"{0}\" wird verwendet.",
   "Module_resolution_using_rootDirs_has_failed_6111": "Fehler bei der Modulauflösung mithilfe von \"rootDirs\".",
+  "Modules_6244": "Module",
   "Move_labeled_tuple_element_modifiers_to_labels_95117": "Modifizierer für bezeichnete Tupelelemente in Bezeichnungen verschieben",
   "Move_to_a_new_file_95049": "In neue Datei verschieben",
   "Multiple_consecutive_numeric_separators_are_not_permitted_6189": "Mehrere aufeinander folgende numerische Trennzeichen sind nicht zulässig.",
@@ -784,11 +930,14 @@
   "Name_is_not_valid_95136": "Der Name ist ungültig.",
   "Named_property_0_of_types_1_and_2_are_not_identical_2319": "Die benannte Eigenschaft \"{0}\" der Typen \"{1}\" und \"{2}\" ist nicht identisch.",
   "Namespace_0_has_no_exported_member_1_2694": "Der Namespace \"{0}\" besitzt keinen exportierten Member \"{1}\".",
+  "Namespace_must_be_given_a_name_1437": "Namespace muss einen Namen erhalten.",
+  "Namespace_name_cannot_be_0_2819": "Namespacename darf nicht \"{0}\" sein.",
   "No_base_constructor_has_the_specified_number_of_type_arguments_2508": "Kein Basiskonstruktor weist die angegebene Anzahl von Typargumenten auf.",
   "No_constituent_of_type_0_is_callable_2755": "Es ist kein Bestandteil vom Typ \"{0}\" aufrufbar.",
   "No_constituent_of_type_0_is_constructable_2759": "Es kann kein Bestandteil vom Typ \"{0}\" erstellt werden.",
   "No_index_signature_with_a_parameter_of_type_0_was_found_on_type_1_7054": "Für den Typ \"{1}\" wurde keine Indexsignatur mit einem Parameter vom Typ \"{0}\" gefunden.",
   "No_inputs_were_found_in_config_file_0_Specified_include_paths_were_1_and_exclude_paths_were_2_18003": "In der Konfigurationsdatei \"{0}\" wurden keine Eingaben gefunden. Als include-Pfade wurden \"{1}\", als exclude-Pfade wurden \"{2}\" angegeben.",
+  "No_longer_supported_In_early_versions_manually_set_the_text_encoding_for_reading_files_6608": "Wird nicht mehr unterstützt. Legen Sie die Textcodierung für das Lesen von Dateien in früheren Versionen manuell fest.",
   "No_overload_expects_0_arguments_but_overloads_do_exist_that_expect_either_1_or_2_arguments_2575": "Keine Überladung erwartet {0} Argumente, aber es sind Überladungen vorhanden, die entweder {1} oder {2} Argumente erwarten.",
   "No_overload_expects_0_type_arguments_but_overloads_do_exist_that_expect_either_1_or_2_type_arguments_2743": "Keine Überladung erwartet {0} Typargumente, aber es sind Überladungen vorhanden, die entweder {1} oder {2} Typargumente erwarten.",
   "No_overload_matches_this_call_2769": "Keine Überladung stimmt mit diesem Aufruf überein.",
@@ -802,7 +951,6 @@
   "Not_all_code_paths_return_a_value_7030": "Nicht alle Codepfade geben einen Wert zurück.",
   "Not_all_constituents_of_type_0_are_callable_2756": "Nicht alle Bestandteile vom Typ \"{0}\" können aufgerufen werden.",
   "Not_all_constituents_of_type_0_are_constructable_2760": "Nicht alle Bestandteile vom Typ \"{0}\" können erstellt werden.",
-  "Numeric_index_type_0_is_not_assignable_to_string_index_type_1_2413": "Der numerische Indextyp \"{0}\" kann dem Zeichenfolgen-Indextyp \"{1}\" nicht zugewiesen werden.",
   "Numeric_literals_with_absolute_values_equal_to_2_53_or_greater_are_too_large_to_be_represented_accur_80008": "Numerische Literale mit absoluten Werten von 2^53 oder höher sind zu groß, um als ganze Zahlen genau dargestellt werden zu können.",
   "Numeric_separators_are_not_allowed_here_6188": "Numerische Trennzeichen sind hier nicht zulässig.",
   "Object_is_of_type_unknown_2571": "Das Objekt ist vom Typ \"Unbekannt\".",
@@ -826,9 +974,11 @@
   "Only_identifiers_Slashqualified_names_with_optional_type_arguments_are_currently_supported_in_a_clas_9002": "Derzeit werden nur Bezeichner/qualifizierte Namen mit optionalen Typargumenten in den \"extends\"-Klauseln einer Klasse unterstützt.",
   "Only_named_exports_may_use_export_type_1383": "\"export type\" kann nur von benannten Exporten verwendet werden.",
   "Only_numeric_enums_can_have_computed_members_but_this_expression_has_type_0_If_you_do_not_need_exhau_18033": "Nur numerische Enumerationen können berechnete Member umfassen, aber dieser Ausdruck weist den Typ \"{0}\" auf. Wenn Sie keine Vollständigkeitsprüfung benötigen, erwägen Sie stattdessen die Verwendung eines Objektliterals.",
+  "Only_output_d_ts_files_and_not_JavaScript_files_6623": "Nur d.ts-Dateien und keine JavaScript-Dateien ausgeben.",
   "Only_public_and_protected_methods_of_the_base_class_are_accessible_via_the_super_keyword_2340": "Nur auf öffentliche und geschützte Methoden der Basisklasse kann über das Schlüsselwort \"super\" zugegriffen werden.",
   "Operator_0_cannot_be_applied_to_type_1_2736": "Der Operator \"{0}\" kann nicht auf den Typ \"{1}\" angewendet werden.",
   "Operator_0_cannot_be_applied_to_types_1_and_2_2365": "Der Operator \"{0}\" darf nicht auf die Typen \"{1}\" und \"{2}\" angewendet werden.",
+  "Opt_a_project_out_of_multi_project_reference_checking_when_editing_6619": "Deaktivieren Sie bei der Bearbeitung ein Projekt von der Überprüfung mehrerer Projektverweise.",
   "Option_0_can_only_be_specified_in_tsconfig_json_file_or_set_to_false_or_null_on_command_line_6230": "Die Option \"{0}\" kann nur in der Datei \"tsconfig.json\" angegeben oder in der Befehlszeile auf FALSE oder NULL festgelegt werden.",
   "Option_0_can_only_be_specified_in_tsconfig_json_file_or_set_to_null_on_command_line_6064": "Die Option \"{0}\" kann nur in der Datei \"tsconfig.json\" angegeben oder in der Befehlszeile auf NULL festgelegt werden.",
   "Option_0_can_only_be_used_when_either_option_inlineSourceMap_or_option_sourceMap_is_provided_5051": "Die Option \"{0}\" kann nur verwendet werden, wenn die Option \"-inlineSourceMap\" oder \"-sourceMap\" angegeben wird.",
@@ -841,14 +991,20 @@
   "Option_build_must_be_the_first_command_line_argument_6369": "Die Option \"--build\" muss das erste Befehlszeilenargument sein.",
   "Option_incremental_can_only_be_specified_using_tsconfig_emitting_to_single_file_or_when_option_tsBui_5074": "Die Option \"--incremental\" kann nur mit \"tsconfig\" und bei Ausgabe in eine einzelne Datei oder bei Festlegung der Option \"--tsBuildInfoFile\" angegeben werden.",
   "Option_isolatedModules_can_only_be_used_when_either_option_module_is_provided_or_option_target_is_ES_5047": "Die Option \"isolatedModules\" kann nur verwendet werden, wenn entweder die Option \"--module\" angegeben ist oder die Option \"target\" den Wert \"ES2015\" oder höher aufweist.",
+  "Option_preserveConstEnums_cannot_be_disabled_when_isolatedModules_is_enabled_5091": "Die Option \"preserveConstEnums\" kann nicht deaktiviert werden, wenn \"isolatedModules\" aktiviert ist.",
   "Option_project_cannot_be_mixed_with_source_files_on_a_command_line_5042": "Die Option \"project\" darf nicht mit Quelldateien in einer Befehlszeile kombiniert werden.",
   "Option_resolveJsonModule_can_only_be_specified_when_module_code_generation_is_commonjs_amd_es2015_or_5071": "Die Option \"--resolveJsonModule\" kann nur angegeben werden, wenn die Modulcodegenerierung \"commonjs\", \"amd\", \"es2015\" oder \"esNext\" lautet.",
   "Option_resolveJsonModule_cannot_be_specified_without_node_module_resolution_strategy_5070": "Die Option \"--resolveJsonModule\" kann nicht ohne die Modulauflösungsstrategie \"node\" angegeben werden.",
   "Options_0_and_1_cannot_be_combined_6370": "Die Optionen \"{0}\" und \"{1}\" können nicht kombiniert werden.",
   "Options_Colon_6027": "Optionen:",
+  "Output_Formatting_6256": "Ausgabeformatierung",
+  "Output_compiler_performance_information_after_building_6615": "Ausgabe Compiler-Leistungsinformationen nach dem Erstellen.",
   "Output_directory_for_generated_declaration_files_6166": "Ausgabeverzeichnis für erstellte Deklarationsdateien.",
   "Output_file_0_from_project_1_does_not_exist_6309": "Die Ausgabedatei \"{0}\" aus dem Projekt \"{1}\" ist nicht vorhanden.",
   "Output_file_0_has_not_been_built_from_source_file_1_6305": "Die Ausgabedatei \"{0}\" wurde nicht aus der Quelldatei \"{1}\" erstellt.",
+  "Output_from_referenced_project_0_included_because_1_specified_1411": "Ausgabe aus referenziertem Projekt \"{0}\" eingeschlossen, da \"{1}\" angegeben wurde",
+  "Output_from_referenced_project_0_included_because_module_is_specified_as_none_1412": "Ausgabe aus referenziertem Projekt \"{0}\" eingeschlossen, da \"--module\" als \"none\" angegeben wurde",
+  "Output_more_detailed_compiler_performance_information_after_building_6632": "Geben Sie ausführlichere Compilerleistungsinformationen nach der Erstellung aus.",
   "Overload_0_of_1_2_gave_the_following_error_2772": "Die Überladung {0} von {1} ({2}) hat den folgenden Fehler verursacht.",
   "Overload_signatures_must_all_be_abstract_or_non_abstract_2512": "Überladungssignaturen müssen alle abstrakt oder nicht abstrakt sein.",
   "Overload_signatures_must_all_be_ambient_or_non_ambient_2384": "Überladungssignaturen müssen alle umgebend oder nicht umgebend sein.",
@@ -892,18 +1048,25 @@
   "Parameter_type_of_public_static_setter_0_from_exported_class_has_or_is_using_name_1_from_private_mod_4034": "Der Parametertyp des öffentlichen statischen Setters \"{0}\" aus der exportierten Klasse besitzt oder verwendet den Namen \"{1}\" aus dem privaten Modul \"{2}\".",
   "Parameter_type_of_public_static_setter_0_from_exported_class_has_or_is_using_private_name_1_4035": "Der Parametertyp des öffentlichen statischen Setters \"{0}\" aus der exportierten Klasse besitzt oder verwendet den privaten Namen \"{1}\".",
   "Parse_in_strict_mode_and_emit_use_strict_for_each_source_file_6141": "Im Strict-Modus analysieren und \"use strict\" für jede Quelldatei ausgeben.",
+  "Part_of_files_list_in_tsconfig_json_1409": "Teil der Liste \"files\" in tsconfig.json",
   "Pattern_0_can_have_at_most_one_Asterisk_character_5061": "Das Muster \"{0}\" darf höchstens ein Zeichen \"*\" aufweisen.",
   "Performance_timings_for_diagnostics_or_extendedDiagnostics_are_not_available_in_this_session_A_nativ_6386": "Leistungsdaten zum zeitlichen Ablauf sind für \"--diagnostics\" oder \"--extendedDiagnostics\" in dieser Sitzung nicht verfügbar. Eine native Implementierung der Webleistungs-API wurde nicht gefunden.",
+  "Platform_specific_6912": "Plattformspezifisch",
   "Prefix_0_with_an_underscore_90025": "\"{0}\" einen Unterstrich voranstellen",
   "Prefix_all_incorrect_property_declarations_with_declare_95095": "Verwenden Sie für alle falschen Eigenschaftendeklarationen das Präfix \"declare\".",
   "Prefix_all_unused_declarations_with_where_possible_95025": "Alle nicht verwendeten Deklarationen nach Möglichkeit mit dem Präfix \"_\" versehen",
   "Prefix_with_declare_95094": "Präfix \"declare\" voranstellen",
+  "Print_all_of_the_files_read_during_the_compilation_6653": "Drucken Sie alle Dateien, die während der Kompilierung gelesen wurden.",
+  "Print_files_read_during_the_compilation_including_why_it_was_included_6631": "Während der Kompilierung gelesene Dateien drucken, einschließlich der Gründe für ihre Aufnahme.",
+  "Print_names_of_files_and_the_reason_they_are_part_of_the_compilation_6505": "Hiermit werden die Namen der Dateien und der Grund dafür ausgegeben, dass die Dateien in der Kompilierung enthalten sind.",
   "Print_names_of_files_part_of_the_compilation_6155": "Drucknamen des Dateiteils der Kompilierung.",
   "Print_names_of_files_that_are_part_of_the_compilation_and_then_stop_processing_6503": "Hiermit werden Namen der Dateien ausgegeben, die Teil der Kompilierung sind. Anschließend wird die Verarbeitung beendet.",
   "Print_names_of_generated_files_part_of_the_compilation_6154": "Drucknamen des generierten Dateiteils der Kompilierung.",
   "Print_the_compiler_s_version_6019": "Die Version des Compilers ausgeben.",
   "Print_the_final_configuration_instead_of_building_1350": "Hiermit wird anstelle eines Builds die endgültige Konfiguration ausgegeben.",
+  "Print_the_names_of_emitted_files_after_a_compilation_6652": "Drucken Sie die Namen der ausgegebenen Dateien nach einer Kompilierung.",
   "Print_this_message_6017": "Diese Nachricht ausgeben.",
+  "Private_accessor_was_defined_without_a_getter_2806": "Die private Zugriffsmethode wurde ohne Getter definiert.",
   "Private_identifiers_are_not_allowed_in_variable_declarations_18029": "Private Bezeichner sind in Variablendeklarationen nicht zulässig.",
   "Private_identifiers_are_not_allowed_outside_class_bodies_18016": "Private Bezeichner sind außerhalb des Textes von Klassen nicht zulässig.",
   "Private_identifiers_are_only_available_when_targeting_ECMAScript_2015_and_higher_18028": "Private Bezeichner sind nur verfügbar, wenn als Ziel ECMAScript 2015 oder höher verwendet wird.",
@@ -911,6 +1074,7 @@
   "Private_or_protected_member_0_cannot_be_accessed_on_a_type_parameter_4105": "Für einen Typparameter kann nicht auf den privaten oder geschützten Member \"{0}\" zugegriffen werden.",
   "Project_0_can_t_be_built_because_its_dependency_1_has_errors_6363": "Projekt \"{0}\" kann nicht erstellt werden, weil die Abhängigkeit \"{1}\" Fehler enthält.",
   "Project_0_can_t_be_built_because_its_dependency_1_was_not_built_6383": "Das Projekt \"{0}\" kann nicht erstellt werden, weil die zugehörige Abhängigkeit \"{1}\" nicht erstellt wurde.",
+  "Project_0_is_being_forcibly_rebuilt_6388": "Die Neuerstellung des Projekts \"{0}\" wird erzwungen.",
   "Project_0_is_out_of_date_because_its_dependency_1_is_out_of_date_6353": "Projekt \"{0}\" ist veraltet, weil die Abhängigkeit \"{1}\" veraltet ist.",
   "Project_0_is_out_of_date_because_oldest_output_1_is_older_than_newest_input_2_6350": "Projekt \"{0}\" ist veraltet, weil die älteste Ausgabe \"{1}\" älter ist als die neueste Eingabe \"{2}\".",
   "Project_0_is_out_of_date_because_output_file_1_does_not_exist_6352": "Projekt \"{0}\" ist veraltet, weil die Ausgabedatei \"{1}\" nicht vorhanden ist.",
@@ -920,14 +1084,18 @@
   "Project_0_is_up_to_date_because_newest_input_1_is_older_than_oldest_output_2_6351": "Projekt \"{0}\" ist auf dem neuesten Stand, weil die neueste Eingabe \"{1}\" älter ist als die älteste Ausgabe \"{2}\".",
   "Project_0_is_up_to_date_with_d_ts_files_from_its_dependencies_6354": "Projekt \"{0}\" ist mit .d.ts-Dateien aus den zugehörigen Abhängigkeiten auf dem neuesten Stand.",
   "Project_references_may_not_form_a_circular_graph_Cycle_detected_Colon_0_6202": "Projektverweise dürfen keinen kreisförmigen Graphen bilden. Zyklus erkannt: {0}",
+  "Projects_6255": "Projekte",
   "Projects_in_this_build_Colon_0_6355": "Projekte in diesem Build: {0}",
   "Projects_to_reference_6300": "Zu referenzierende Projekte",
+  "Property_0_cannot_have_an_initializer_because_it_is_marked_abstract_1267": "Die Eigenschaft \"{0}\" darf keinen Initialisierer aufweisen, weil sie als abstrakt markiert ist.",
   "Property_0_comes_from_an_index_signature_so_it_must_be_accessed_with_0_4111": "Die Eigenschaft \"{0}\" stammt aus einer Indexsignatur. Der Zugriff muss daher mit [\"{0}\"] erfolgen.",
   "Property_0_does_not_exist_on_const_enum_1_2479": "Die Eigenschaft \"{0}\" ist für die const-Enumeration \"{1}\" nicht vorhanden.",
   "Property_0_does_not_exist_on_type_1_2339": "Die Eigenschaft \"{0}\" ist für den Typ \"{1}\" nicht vorhanden.",
   "Property_0_does_not_exist_on_type_1_Did_you_mean_2_2551": "Die Eigenschaft \"{0}\" existiert nicht für Typ \"{1}\". Meinten Sie \"{2}\"?",
   "Property_0_does_not_exist_on_type_1_Did_you_mean_to_access_the_static_member_2_instead_2576": "Die Eigenschaft \"{0}\" ist für den Typ \"{1}\" nicht vorhanden. Möchten Sie stattdessen auf den statischen Member \"{2}\" zugreifen?",
   "Property_0_does_not_exist_on_type_1_Do_you_need_to_change_your_target_library_Try_changing_the_lib_c_2550": "Die Eigenschaft \"{0}\" ist für den Typ \"{1}\" nicht vorhanden. Müssen Sie Ihre Zielbibliothek ändern? Ändern Sie die Compileroption \"lib\" in \"{2}\" oder höher.",
+  "Property_0_does_not_exist_on_type_1_Try_changing_the_lib_compiler_option_to_include_dom_2812": "Die Eigenschaft \"{0}\" ist für den Typ \"{1}\" nicht vorhanden. Ändern Sie die Compileroption \"lib\" so, dass sie \"dom\" enthält.",
+  "Property_0_has_no_initializer_and_is_not_definitely_assigned_in_a_class_static_block_2817": "Die Eigenschaft \"{0}\" weist keinen Initialisierer auf und ist in einem statischen Klassenblock nicht definitiv zugewiesen.",
   "Property_0_has_no_initializer_and_is_not_definitely_assigned_in_the_constructor_2564": "Die Eigenschaft \"{0}\" weist keinen Initialisierer auf und ist im Konstruktor nicht definitiv zugewiesen.",
   "Property_0_implicitly_has_type_any_because_its_get_accessor_lacks_a_return_type_annotation_7033": "Die Eigenschaft \"{0}\" weist implizit den Typ \"any\" auf, weil ihrem get-Accessor eine Parametertypanmerkung fehlt.",
   "Property_0_implicitly_has_type_any_because_its_set_accessor_lacks_a_parameter_type_annotation_7032": "Die Eigenschaft \"{0}\" weist implizit den Typ \"any\" auf, weil ihrem set-Accessor eine Parametertypanmerkung fehlt.",
@@ -945,18 +1113,19 @@
   "Property_0_is_optional_in_type_1_but_required_in_type_2_2327": "Die Eigenschaft \"{0}\" ist im Typ \"{1}\" optional, im Typ \"{2}\" aber erforderlich.",
   "Property_0_is_private_and_only_accessible_within_class_1_2341": "Die Eigenschaft \"{0}\" ist privat. Auf sie kann nur innerhalb der Klasse \"{1}\" zugegriffen werden.",
   "Property_0_is_private_in_type_1_but_not_in_type_2_2325": "Die Eigenschaft \"{0}\" ist im Typ \"{1}\" privat, im Typ \"{2}\" hingegen nicht.",
-  "Property_0_is_protected_and_only_accessible_through_an_instance_of_class_1_2446": "Die Eigenschaft \"{0}\" ist geschützt. Auf sie kann nur über eine Instanz der Klasse \"{1}\" zugegriffen werden.",
+  "Property_0_is_protected_and_only_accessible_through_an_instance_of_class_1_This_is_an_instance_of_cl_2446": "Die Eigenschaft \"{0}\" ist geschützt und nur über eine Instanz der Klasse \"{1}\" zugänglich. Dies ist eine Instanz der Klasse \"{2}\".",
   "Property_0_is_protected_and_only_accessible_within_class_1_and_its_subclasses_2445": "Die Eigenschaft \"{0}\" ist geschützt. Auf sie kann nur innerhalb der Klasse \"{1}\" und ihrer Unterklassen zugegriffen werden.",
   "Property_0_is_protected_but_type_1_is_not_a_class_derived_from_2_2443": "Die Eigenschaft \"{0}\" ist geschützt, Typ \"{1}\" ist aber keine von \"{2}\" abgeleitete Klasse.",
   "Property_0_is_protected_in_type_1_but_public_in_type_2_2444": "Die Eigenschaft \"{0}\" ist im Typ \"{1}\" geschützt, im Typ \"{2}\" aber öffentlich.",
   "Property_0_is_used_before_being_assigned_2565": "Die Eigenschaft \"{0}\" wird vor ihrer Zuweisung verwendet.",
   "Property_0_is_used_before_its_initialization_2729": "Die Eigenschaft \"{0}\" wird vor ihrer Initialisierung verwendet.",
+  "Property_0_may_not_be_used_in_a_static_property_s_initializer_in_the_same_class_when_target_is_esnex_2810": "Die Eigenschaft \"{0}\" darf nicht im Initialisierer einer statischen Eigenschaft in derselben Klasse verwendet werden, wenn \"target\" auf \"esnext\" und \"useDefineForClassFields\" auf FALSE festgelegt ist.",
+  "Property_0_may_not_exist_on_type_1_Did_you_mean_2_2568": "Die Eigenschaft \"{0}\" ist für den Typ \"{1}\" möglicherweise nicht vorhanden. Meinten Sie \"{2}\"?",
   "Property_0_of_JSX_spread_attribute_is_not_assignable_to_target_property_2606": "Die Eigenschaft \"{0}\" des JSX-Verteilungsattributs kann nicht der Zieleigenschaft zugewiesen werden.",
   "Property_0_of_exported_class_expression_may_not_be_private_or_protected_4094": "Die Eigenschaft \"{0}\" des exportierten Klassenausdrucks ist unter Umständen nicht privat oder geschützt.",
   "Property_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2_4032": "Die Eigenschaft \"{0}\" der exportierten Schnittstelle besitzt oder verwendet den Namen \"{1}\" aus dem privaten Modul \"{2}\".",
   "Property_0_of_exported_interface_has_or_is_using_private_name_1_4033": "Die Eigenschaft \"{0}\" der exportierten Schnittstelle besitzt oder verwendet den privaten Namen \"{1}\".",
-  "Property_0_of_type_1_is_not_assignable_to_numeric_index_type_2_2412": "Die Eigenschaft \"{0}\" vom Typ \"{1}\" kann dem numerischen Indextyp \"{2}\" nicht zugewiesen werden.",
-  "Property_0_of_type_1_is_not_assignable_to_string_index_type_2_2411": "Die Eigenschaft \"{0}\" vom Typ \"{1}\" kann dem Zeichenfolgen-Indextyp \"{2}\" nicht zugewiesen werden.",
+  "Property_0_of_type_1_is_not_assignable_to_2_index_type_3_2411": "Die Eigenschaft \"{0}\" von Typ \"{1}\" kann nicht \"{2}\" Indextyp \"{3}\" zugewiesen werden.",
   "Property_0_was_also_declared_here_2733": "Die Eigenschaft \"{0}\" wurde hier ebenfalls deklariert.",
   "Property_0_will_overwrite_the_base_property_in_1_If_this_is_intentional_add_an_initializer_Otherwise_2612": "Die Eigenschaft \"{0}\" überschreibt die Basiseigenschaft in \"{1}\". Wenn dies beabsichtigt ist, fügen Sie einen Initialisierer hinzu. Andernfalls fügen Sie einen declare-Modifizierer hinzu, oder entfernen Sie die redundante Deklaration.",
   "Property_assignment_expected_1136": "Die Zuweisung einer Eigenschaft wurde erwartet.",
@@ -978,12 +1147,18 @@
   "Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4027": "Die öffentliche statische Eigenschaft \"{0}\" der exportierten Klasse besitzt oder verwendet den Namen \"{1}\" aus dem privaten Modul \"{2}\".",
   "Public_static_property_0_of_exported_class_has_or_is_using_private_name_1_4028": "Die öffentliche statische Eigenschaft \"{0}\" der exportierten Klasse besitzt oder verwendet den privaten Namen \"{1}\".",
   "Qualified_name_0_is_not_allowed_without_a_leading_param_object_1_8032": "Der qualifizierte Name \"{0}\" ist ohne Voranstellung von \"@param {object} {1}\" nicht zulässig.",
+  "Raise_an_error_when_a_function_parameter_isn_t_read_6676": "Auslösen eines Fehlers, wenn ein Funktionsparameter nicht gelesen wird",
   "Raise_error_on_expressions_and_declarations_with_an_implied_any_type_6052": "Fehler für Ausdrücke und Deklarationen mit einem impliziten any-Typ auslösen.",
   "Raise_error_on_this_expressions_with_an_implied_any_type_6115": "Fehler für \"this\"-Ausdrücke mit einem impliziten any-Typ auslösen.",
   "Re_exporting_a_type_when_the_isolatedModules_flag_is_provided_requires_using_export_type_1205": "Das erneute Exportieren eines Typs erfordert bei Festlegung des Flags \"--isolatedModules\" die Verwendung von \"export type\".",
   "Redirect_output_structure_to_the_directory_6006": "Die Ausgabestruktur in das Verzeichnis umleiten.",
+  "Reduce_the_number_of_projects_loaded_automatically_by_TypeScript_6617": "Verringern Sie die Anzahl der Projekte, die von TypeScript automatisch geladen werden.",
   "Referenced_project_0_may_not_disable_emit_6310": "Beim referenzierten Projekt \"{0}\" darf nicht die Ausgabe deaktiviert werden.",
   "Referenced_project_0_must_have_setting_composite_Colon_true_6306": "Das referenzierte Projekt \"{0}\" muss für die Einstellung \"composite\" den Wert TRUE aufweisen.",
+  "Referenced_via_0_from_file_1_1400": "Referenziert über \"{0}\" aus der Datei \"{1}\"",
+  "Remove_a_list_of_directories_from_the_watch_process_6628": "Entfernen Sie eine Liste von Verzeichnissen aus dem Überwachungsvorgang.",
+  "Remove_a_list_of_files_from_the_watch_mode_s_processing_6629": "Entfernen Sie eine Liste von Dateien aus der Verarbeitung des Überwachungsmodus.",
+  "Remove_all_unnecessary_override_modifiers_95163": "Alle nicht benötigten override-Modifizierer entfernen",
   "Remove_all_unnecessary_uses_of_await_95087": "Alle nicht benötigten Verwendungen von \"await\" entfernen",
   "Remove_all_unreachable_code_95051": "Gesamten nicht erreichbaren Code entfernen",
   "Remove_all_unused_labels_95054": "Alle nicht verwendeten Bezeichnungen entfernen",
@@ -991,8 +1166,10 @@
   "Remove_braces_from_arrow_function_95060": "Geschweifte Klammern aus Pfeilfunktion entfernen",
   "Remove_braces_from_arrow_function_body_95112": "Geschweifte Klammern aus Pfeilfunktionstext entfernen",
   "Remove_import_from_0_90005": "Import aus \"{0}\" entfernen",
+  "Remove_override_modifier_95161": "override-Modifizierer entfernen",
   "Remove_parentheses_95126": "Klammern entfernen",
   "Remove_template_tag_90011": "Vorlagentag entfernen",
+  "Remove_the_20mb_cap_on_total_source_code_size_for_JavaScript_files_in_the_TypeScript_language_server_6618": "Entfernen Sie die Obergrenze von 20 MB für die Gesamtgröße des Quellcodes für JavaScript-Dateien auf dem TypeScript-Sprachserver.",
   "Remove_type_parameters_90012": "Typparameter entfernen",
   "Remove_unnecessary_await_95086": "Unnötige Vorkommen von \"await\" entfernen",
   "Remove_unreachable_code_95050": "Nicht erreichbaren Code entfernen",
@@ -1010,14 +1187,16 @@
   "Report_errors_in_js_files_8019": "Fehler in .js-Dateien melden.",
   "Report_errors_on_unused_locals_6134": "Fehler für nicht verwendete lokale Variablen melden.",
   "Report_errors_on_unused_parameters_6135": "Fehler für nicht verwendete Parameter melden.",
-  "Require_undeclared_properties_from_index_signatures_to_use_element_accesses_6803": "Nicht deklarierte Eigenschaften aus Indexsignaturen müssen Elementzugriffe verwenden.",
+  "Require_undeclared_properties_from_index_signatures_to_use_element_accesses_6717": "Nicht deklarierte Eigenschaften aus Indexsignaturen müssen Elementzugriffe verwenden.",
   "Required_type_parameters_may_not_follow_optional_type_parameters_2706": "Erforderliche Typparameter dürfen nicht auf optionale Typparameter folgen.",
   "Resolution_for_module_0_was_found_in_cache_from_location_1_6147": "Die Auflösung für das Modul \"{0}\" wurde im Cache des Standorts \"{1}\" gefunden.",
+  "Resolution_for_type_reference_directive_0_was_found_in_cache_from_location_1_6241": "Die Auflösung für die Typreferenzanweisung \"{0}\" wurde im Cache des Standorts \"{1}\" gefunden.",
   "Resolve_keyof_to_string_valued_property_names_only_no_numbers_or_symbols_6195": "\"keyof\" darf nur in Eigenschaftennamen mit Zeichenfolgenwert aufgelöst werden (keine Ziffern oder Symbole).",
   "Resolving_from_node_modules_folder_6118": "Auflösen aus dem Ordner \"node_modules\"...",
   "Resolving_module_0_from_1_6086": "======== Das Modul \"{0}\" aus \"{1}\" wird aufgelöst. ========",
   "Resolving_module_name_0_relative_to_base_url_1_2_6094": "Der Modulname \"{0}\" relativ zur Basis-URL \"{1}\"–\"{2}\" wird aufgelöst.",
   "Resolving_real_path_for_0_result_1_6130": "Der tatsächliche Pfad für \"{0}\" wird aufgelöst, Ergebnis \"{1}\".",
+  "Resolving_type_reference_directive_0_containing_file_1_6242": "======== Die Typverweisdirektive \"{0}\" wird aufgelöst, die die Datei \"{1}\" enthält. ========",
   "Resolving_type_reference_directive_0_containing_file_1_root_directory_2_6116": "======== Die Typverweisdirektive \"{0}\" wird aufgelöst, die die Datei \"{1}\" enthält. Das Stammverzeichnis ist \"{2}\". ========",
   "Resolving_type_reference_directive_0_containing_file_1_root_directory_not_set_6123": "======== Die Typverweisdirektive \"{0}\" wird aufgelöst, die die Datei \"{1}\" enthält. Das Stammverzeichnis ist nicht festgelegt. ========",
   "Resolving_type_reference_directive_0_containing_file_not_set_root_directory_1_6127": "======== Die Typverweisdirektive \"{0}\" wird aufgelöst, die die nicht festgelegte Datei enthält. Das Stammverzeichnis ist \"{1}\". ========",
@@ -1029,6 +1208,7 @@
   "Rest_signatures_are_incompatible_2572": "Die rest-Signaturen sind nicht kompatibel.",
   "Rest_types_may_only_be_created_from_object_types_2700": "Rest-Typen dürfen nur aus object-Typen erstellt werden.",
   "Return_type_annotation_circularly_references_itself_2577": "Die Rückgabetypanmerkung verweist zirkulär auf sich selbst.",
+  "Return_type_must_be_inferred_from_a_function_95149": "Der Rückgabetyp muss aus einer Funktion abgeleitet werden.",
   "Return_type_of_call_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1_4046": "Der Rückgabetyp der Aufrufsignatur aus der exportierten Schnittstelle besitzt oder verwendet den Namen \"{0}\" aus dem privaten Modul \"{1}\".",
   "Return_type_of_call_signature_from_exported_interface_has_or_is_using_private_name_0_4047": "Der Rückgabetyp der Aufrufsignatur aus der exportierten Schnittstelle besitzt oder verwendet den privaten Namen \"{0}\".",
   "Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_name_0_from_private_mod_4044": "Der Rückgabetyp der Konstruktorsignatur aus der exportierten Schnittstelle besitzt oder verwendet den Namen \"{0}\" aus dem privaten Modul \"{1}\".",
@@ -1053,15 +1233,31 @@
   "Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_external_module__4050": "Der Rückgabetyp der öffentlichen statischen Methode aus der exportierten Klasse besitzt oder verwendet den Namen \"{0}\" aus dem externen Modul \"{1}\", kann aber nicht benannt werden.",
   "Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_private_module_1_4051": "Der Rückgabetyp der öffentlichen statischen Methode aus der exportierten Klasse besitzt oder verwendet den Namen \"{0}\" aus dem privaten Modul \"{1}\".",
   "Return_type_of_public_static_method_from_exported_class_has_or_is_using_private_name_0_4052": "Der Rückgabetyp der öffentlichen statischen Methode aus der exportierten Klasse besitzt oder verwendet den privaten Namen \"{0}\".",
-  "Reusing_module_resolutions_originating_in_0_since_resolutions_are_unchanged_from_old_program_6184": "Modulauflösungen aus \"{0}\" werden wiederverwendet, da Auflösungen aus dem alten Programm nicht geändert wurden.",
-  "Reusing_resolution_of_module_0_to_file_1_from_old_program_6183": "Die Auflösung des Moduls \"{0}\" in die Datei \"{1}\" aus dem alten Programm wird wiederverwendet.",
+  "Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_not_resolved_6395": "Die Auflösung des Moduls „{0}“ aus „{1}“ im Cache vom Speicherort „{2}“ wird wiederverwendet, sie wurde nicht aufgelöst.",
+  "Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_6393": "Die Auflösung des Moduls „{0}“ aus „{1}\" im Cache vom Speicherort „{2}“ wird wiederverwendet, sie wurde erfolgreich in „{3}“ aufgelöst.",
+  "Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_6394": "Die Auflösung des Moduls „{0}“ aus „{1}“ im Cache vom Speicherort „{2}“ wird wiederverwendet, sie wurde erfolgreich in „{3}“ mit der Paket-ID „{4}“ aufgelöst.",
+  "Reusing_resolution_of_module_0_from_1_of_old_program_it_was_not_resolved_6389": "Die Auflösung des Moduls „{0}“ aus „{1}“ des alten Programms wird wiederverwendet, sie wurde nicht aufgelöst.",
+  "Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2_6183": "Die Auflösung des Moduls „{0}“ aus „{1}“ des alten Programms wird wiederverwendet, sie wurde erfolgreich in „{2}“ aufgelöst.",
+  "Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2_with_Package__6184": "Die Auflösung des Moduls „{0}“ aus „{1}“ des alten Programms wird wiederverwendet, sie wurde erfolgreich in „{2}“ mit der Paket-ID „{3}“ aufgelöst.",
+  "Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_not_re_6398": "Die Auflösung der Typverweisdirektive „{0}“ aus „{1}“ im Cache vom Speicherort „{2}“ wird wiederverwendet, sie wurde nicht aufgelöst.",
+  "Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_succes_6396": "Die Auflösung der Typverweisdirektive „{0}“ aus „{1}“ im Cache vom Speicherort „{2}“ wird wiederverwendet, sie wurde erfolgreich in „{3}“ aufgelöst.",
+  "Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_succes_6397": "Die Auflösung der Typverweisdirektive „{0}“ aus „{1}“ im Cache vom Speicherort „{2}“ wird wiederverwendet, sie wurde erfolgreich in „{3}“ mit der Paket-ID „{4}“ aufgelöst.",
+  "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_not_resolved_6392": "Die Auflösung der Typverweisdirektive „{0}“ aus „{1}“ des alten Programms wird wiederverwendet, sie wurde nicht aufgelöst.",
+  "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved__6390": "Die Auflösung der Typverweisdirektive „{0}“ aus „{1}“ des alten Programms wird wiederverwendet, sie wurde erfolgreich in „{2}“ aufgelöst.",
+  "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved__6391": "Die Auflösung der Typverweisdirektive „{0}“ aus „{1}“ des alten Programms wird wiederverwendet, sie wurde erfolgreich in „{2}“ mit der Paket-ID „{3}“ aufgelöst.",
   "Rewrite_all_as_indexed_access_types_95034": "Alle als indizierte Zugriffstypen neu schreiben",
   "Rewrite_as_the_indexed_access_type_0_90026": "Als indizierten Zugriffstyp \"{0}\" neu schreiben",
   "Root_directory_cannot_be_determined_skipping_primary_search_paths_6122": "Das Stammverzeichnis kann nicht ermittelt werden. Die primären Suchpfade werden übersprungen.",
+  "Root_file_specified_for_compilation_1427": "Für die Kompilierung angegebene Stammdatei",
   "STRATEGY_6039": "STRATEGIE",
+  "Save_tsbuildinfo_files_to_allow_for_incremental_compilation_of_projects_6642": "Speichern Sie die .tsbuildinfo-Dateien, um eine inkrementelle Kompilierung von Projekten zuzulassen.",
   "Scoped_package_detected_looking_in_0_6182": "Bereichsbezogenes Paket erkannt. In \"{0}\" wird gesucht",
+  "Selection_is_not_a_valid_statement_or_statements_95155": "Die Auswahl umfasst keine gültigen Anweisungen.",
   "Selection_is_not_a_valid_type_node_95133": "Die Auswahl ist kein gültiger Typknoten.",
+  "Set_the_JavaScript_language_version_for_emitted_JavaScript_and_include_compatible_library_declaratio_6705": "Legen Sie die JavaScript-Sprachversion für das ausgegebene JavaScript fest, und schließen Sie kompatible Bibliotheksdeklarationen ein.",
+  "Set_the_language_of_the_messaging_from_TypeScript_This_does_not_affect_emit_6654": "Legen Sie die Sprache des Messagings von TypeScript fest. Dies wirkt sich nicht auf die Ausgabe aus.",
   "Set_the_module_option_in_your_configuration_file_to_0_95099": "Legen Sie die Option \"module\" in Ihrer Konfigurationsdatei auf \"{0}\" fest.",
+  "Set_the_newline_character_for_emitting_files_6659": "Legen Sie das Zeilenumbruchzeichen für Ausgabedateien fest.",
   "Set_the_target_option_in_your_configuration_file_to_0_95098": "Legen Sie die Option \"target\" in Ihrer Konfigurationsdatei auf \"{0}\" fest.",
   "Setters_cannot_return_a_value_2408": "Setter können keinen Wert zurückgeben.",
   "Show_all_compiler_options_6169": "Alle Compileroptionen anzeigen.",
@@ -1069,31 +1265,63 @@
   "Show_verbose_diagnostic_information_6150": "Ausführliche Diagnoseinformationen anzeigen.",
   "Show_what_would_be_built_or_deleted_if_specified_with_clean_6367": "Anzeigen, was erstellt würde (oder gelöscht würde, wenn mit \"--clean\" angegeben)",
   "Signature_0_must_be_a_type_predicate_1224": "Die Signatur \"{0}\" muss ein Typprädikat sein.",
+  "Skip_type_checking_all_d_ts_files_6693": "Überspringen Sie die Typüberprüfung aller .d.ts-Dateien.",
+  "Skip_type_checking_d_ts_files_that_are_included_with_TypeScript_6692": "Überspringen Sie die Typüberprüfung von .d.ts-Dateien, die in TypeScript enthalten sind.",
   "Skip_type_checking_of_declaration_files_6012": "Überspringen Sie die Typüberprüfung von Deklarationsdateien.",
   "Skipping_build_of_project_0_because_its_dependency_1_has_errors_6362": "Das Erstellen von Projekt \"{0}\" wird übersprungen, weil die Abhängigkeit \"{1}\" einen Fehler aufweist.",
   "Skipping_build_of_project_0_because_its_dependency_1_was_not_built_6382": "Das Kompilieren von Projekt \"{0}\" wird übersprungen, weil die Abhängigkeit \"{1}\" nicht erstellt wurde.",
-  "Source_Map_Options_6175": "Quellzuordnungsoptionen",
+  "Source_from_referenced_project_0_included_because_1_specified_1414": "Quelle aus referenziertem Projekt \"{0}\", da \"{1}\" angegeben wurde",
+  "Source_from_referenced_project_0_included_because_module_is_specified_as_none_1415": "Quelle aus referenziertem Projekt \"{0}\", da \"--module\" als \"none\" angegeben wurde",
   "Source_has_0_element_s_but_target_allows_only_1_2619": "Die Quelle weist {0} Element(e) auf, aber das Ziel lässt nur {1} zu.",
   "Source_has_0_element_s_but_target_requires_1_2618": "Die Quelle weist {0} Element(e) auf, aber das Ziel erfordert {1}.",
+  "Source_provides_no_match_for_required_element_at_position_0_in_target_2623": "Die Quelle weist keine Übereinstimmung für das erforderliche Element an Position {0} im Ziel auf.",
+  "Source_provides_no_match_for_variadic_element_at_position_0_in_target_2624": "Die Quelle weist keine Übereinstimmung für das variadic-Element an Position {0} im Ziel auf.",
   "Specialized_overload_signature_is_not_assignable_to_any_non_specialized_signature_2382": "Eine spezialisierte Überladungssignatur kann keiner nicht spezialisierten Signatur zugewiesen werden.",
   "Specifier_of_dynamic_import_cannot_be_spread_element_1325": "Der Spezifizierer des dynamischen Imports darf kein Spread-Element sein.",
-  "Specify_ECMAScript_target_version_Colon_ES3_default_ES5_ES2015_ES2016_ES2017_ES2018_ES2019_ES2020_or_6015": "Geben Sie die ECMAScript-Zielversion an: \"ES3\" (Standardwert), \"ES5\", \"ES2015\", \"ES2016\", \"ES2017\", \"ES2018\", \"ES2019\", \"ES2020\" oder \"ESNEXT\".",
-  "Specify_JSX_code_generation_Colon_preserve_react_native_or_react_6080": "JSX-Codegenerierung angeben: \"preserve\", \"react-native\" oder \"react\".",
-  "Specify_emit_Slashchecking_behavior_for_imports_that_are_only_used_for_types_1368": "Geben Sie das Ausgabe-/Überprüfungsverhalten für Importe an, die nur für Typen verwendet werden.",
+  "Specify_ECMAScript_target_version_6015": "Geben Sie die ECMAScript-Zielversion an.",
+  "Specify_JSX_code_generation_6080": "Geben Sie die JSX-Codegenerierung an.",
+  "Specify_a_file_that_bundles_all_outputs_into_one_JavaScript_file_If_declaration_is_true_also_designa_6679": "Geben Sie eine Datei an, die alle Ausgaben in einer JavaScript-Datei bündelt. Wenn \"declaration\" TRUE ist, wird auch eine Datei festgelegt, die alle .d.ts-Ausgaben bündelt.",
+  "Specify_a_list_of_glob_patterns_that_match_files_to_be_included_in_compilation_6641": "Geben Sie eine Liste von Globmustern an, die mit Dateien übereinstimmen, die in die Kompilierung einbezogen werden sollen.",
+  "Specify_a_list_of_language_service_plugins_to_include_6681": "Geben Sie eine Liste der einzuschließenden Sprachdienst-Plug-Ins an.",
+  "Specify_a_set_of_bundled_library_declaration_files_that_describe_the_target_runtime_environment_6651": "Geben Sie einen Satz gebündelter Bibliotheksdeklarationsdateien an, die die Ziellaufzeitumgebung beschreiben.",
+  "Specify_a_set_of_entries_that_re_map_imports_to_additional_lookup_locations_6680": "Geben Sie einen Satz von Einträgen an, die Importe an zusätzliche Lookup-Speicherorte neu zuordnen.",
+  "Specify_an_array_of_objects_that_specify_paths_for_projects_Used_in_project_references_6687": "Geben Sie ein Objektarray an, das Pfade für Projekte angibt. Wird in Projekt verweisen verwendet.",
+  "Specify_an_output_folder_for_all_emitted_files_6678": "Geben Sie einen Ausgabeordner für alle ausgegebenen Dateien an.",
+  "Specify_emit_Slashchecking_behavior_for_imports_that_are_only_used_for_types_6718": "Geben Sie das Ausgabe-/Überprüfungsverhalten für Importe an, die nur für Typen verwendet werden.",
   "Specify_file_to_store_incremental_compilation_information_6380": "Datei zum Speichern inkrementeller Kompilierungsinformationen angeben",
+  "Specify_how_TypeScript_looks_up_a_file_from_a_given_module_specifier_6658": "Geben Sie an, wie TypeScript eine Datei aus einem angegebenen Modulspezifizierer sucht.",
+  "Specify_how_directories_are_watched_on_systems_that_lack_recursive_file_watching_functionality_6714": "Geben Sie an, wie Verzeichnisse auf Systemen überwacht werden, für die eine rekursive Dateiüberwachungsfunktion fehlt.",
+  "Specify_how_the_TypeScript_watch_mode_works_6715": "Geben Sie an, wie der TypeScript-Überwachungsmodus funktioniert.",
   "Specify_library_files_to_be_included_in_the_compilation_6079": "Geben Sie Bibliotheksdateien an, die in die Kompilierung eingeschlossen werden sollen.",
-  "Specify_module_code_generation_Colon_none_commonjs_amd_system_umd_es2015_es2020_or_ESNext_6016": "Geben Sie die Modulcodegenerierung an: \"none\", \"commonjs\", \"amd\", \"system\", \"umd\", \"es2015\", \"es2020\" oder \"ESNext\".",
+  "Specify_module_code_generation_6016": "Geben Sie die Modulcodegenerierung an.",
   "Specify_module_resolution_strategy_Colon_node_Node_js_or_classic_TypeScript_pre_1_6_6069": "Geben Sie die Modulauflösungsstrategie an: \"node\" (Node.js) oder \"classic\" (TypeScript vor Version 1.6).",
-  "Specify_strategy_for_creating_a_polling_watch_when_it_fails_to_create_using_file_system_events_Colon_6227": "Geben Sie die Strategie zum Erstellen einer Abrufüberwachung an, wenn eine Erstellung mit Dateisystemereignissen nicht erfolgreich ist: \"FixedInterval\" (Standardwert), \"PriorityInterval\", \"DynamicPriority\".",
-  "Specify_strategy_for_watching_directory_on_platforms_that_don_t_support_recursive_watching_natively__6226": "Geben Sie die Strategie zur Verzeichnisüberwachung auf Plattformen an, die die rekursive Überwachung nativ nicht unterstützen: \"UseFsEvents\" (Standardwert), \"FixedPollingInterval\", \"DynamicPriorityPolling\".",
-  "Specify_strategy_for_watching_file_Colon_FixedPollingInterval_default_PriorityPollingInterval_Dynami_6225": "Geben Sie die Strategie für die Dateiüberwachung an: \"FixedPollingInterval\" (Standardwert), \"PriorityPollingInterval\", \"DynamicPriorityPolling\", \"UseFsEvents\", \"UseFsEventsOnParentDirectory\".",
+  "Specify_module_specifier_used_to_import_the_JSX_factory_functions_when_using_jsx_Colon_react_jsx_Ast_6649": "Geben Sie den Modulspezifizierer an, der zum Importieren der JSX-Factoryfunktionen verwendet wird, wenn \"jsx: react-jsx*\" verwendet wird.",
+  "Specify_multiple_folders_that_act_like_Slashnode_modules_Slash_types_6710": "Geben Sie mehrere Ordner an, die als \"./node_modules/@types\" fungieren.",
+  "Specify_one_or_more_path_or_node_module_references_to_base_configuration_files_from_which_settings_a_6633": "Geben Sie einen oder mehrere Pfad- oder Knotenmodulverweise auf Basiskonfigurationsdateien an, von denen Einstellungen geerbt werden.",
+  "Specify_options_for_automatic_acquisition_of_declaration_files_6709": "Geben Sie Optionen für den automatischen Erwerb von Deklarationsdateien an.",
+  "Specify_strategy_for_creating_a_polling_watch_when_it_fails_to_create_using_file_system_events_Colon_6227": "Geben Sie die Strategie zum Erstellen einer Abrufüberwachung an, wenn eine Erstellung mit Dateisystemereignissen nicht erfolgreich ist: \"FixedInterval\" (Standardwert), \"PriorityInterval\", \"DynamicPriority\", \"FixedChunkSize\".",
+  "Specify_strategy_for_watching_directory_on_platforms_that_don_t_support_recursive_watching_natively__6226": "Geben Sie die Strategie für die Verzeichnisüberwachung auf Plattformen an, die eine rekursive Überwachung nativ nicht unterstützen: \"UseFsEvents\" (Standardwert), \"FixedPollingInterval\", \"DynamicPriorityPolling\", \"FixedChunkSizePolling\".",
+  "Specify_strategy_for_watching_file_Colon_FixedPollingInterval_default_PriorityPollingInterval_Dynami_6225": "Geben Sie die Strategie für die Dateiüberwachung an: \"FixedPollingInterval\" (Standardwert), \"PriorityPollingInterval\", \"DynamicPriorityPolling\", \"FixedChunkSizePolling\", \"UseFsEvents\", \"UseFsEventsOnParentDirectory\".",
+  "Specify_the_JSX_Fragment_reference_used_for_fragments_when_targeting_React_JSX_emit_e_g_React_Fragme_6648": "Geben Sie den JSX-Fragmentverweis an, der für Fragmente verwendet wird, wenn die React JSX-Ausgabe als Ziel verwendet wird, z. B. \"React.Fragment\" oder \"Fragment\".",
   "Specify_the_JSX_factory_function_to_use_when_targeting_react_JSX_emit_e_g_React_createElement_or_h_6146": "Geben Sie die JSX-Factoryfunktion an, die für eine react-JSX-Ausgabe verwendet werden soll, z. B. \"React.createElement\" oder \"h\".",
+  "Specify_the_JSX_factory_function_used_when_targeting_React_JSX_emit_e_g_React_createElement_or_h_6647": "Geben Sie die JSX-Factoryfunktion an, die für eine react-JSX-Ausgabe verwendet werden soll, z. B. \"React.createElement\" oder \"h\".",
   "Specify_the_JSX_fragment_factory_function_to_use_when_targeting_react_JSX_emit_with_jsxFactory_compi_18034": "Geben Sie die jsxFragmentFactory-Funktion an, die bei Verwendung des JSX-Ausgabeziels \"react\" mit der Compileroption \"jsxFactory\" verwendet werden soll, z. B. \"Fragment\".",
+  "Specify_the_base_directory_to_resolve_non_relative_module_names_6607": "Geben Sie das Basisverzeichnis zum Auflösen nicht relativer Modulnamen an.",
   "Specify_the_end_of_line_sequence_to_be_used_when_emitting_files_Colon_CRLF_dos_or_LF_unix_6060": "Geben Sie die Zeilenendesequenz an, die beim Ausgeben von Dateien verwendet werden soll: \"CRLF\" (DOS) oder \"LF\" (Unix).",
+  "Specify_the_folder_for_tsbuildinfo_incremental_compilation_files_6707": "Geben Sie den Ordner für .tsbuildinfo inkrementelle Kompilierungsdateien an.",
   "Specify_the_location_where_debugger_should_locate_TypeScript_files_instead_of_source_locations_6004": "Geben Sie den Speicherort an, an dem der Debugger TypeScript-Dateien ermitteln soll, anstatt Quellspeicherorte zu verwenden.",
-  "Specify_the_location_where_debugger_should_locate_map_files_instead_of_generated_locations_6003": "Geben Sie den Speicherort an, an dem der Debugger Zuordnungsdateien ermitteln soll, anstatt generierte Speicherorte zu verwenden.",
+  "Specify_the_location_where_debugger_should_locate_map_files_instead_of_generated_locations_6655": "Geben Sie den Speicherort an, an dem der Debugger Zuordnungsdateien ermitteln soll, anstatt generierte Speicherorte zu verwenden.",
+  "Specify_the_maximum_folder_depth_used_for_checking_JavaScript_files_from_node_modules_Only_applicabl_6656": "Geben Sie die maximale Ordnertiefe für die Überprüfung von JavaScript-Dateien von \"node_modules\" an. Nur gültig für \"allowJs\".",
   "Specify_the_module_specifier_to_be_used_to_import_the_jsx_and_jsxs_factory_functions_from_eg_react_6238": "Geben Sie den Modulspezifizierer an, aus dem die Factoryfunktionen \"jsx\" und \"jsxs\" importiert werden sollen, z. B. \"react\".",
+  "Specify_the_object_invoked_for_createElement_This_only_applies_when_targeting_react_JSX_emit_6686": "Geben Sie das Objekt an, das für \"createElement\" aufgerufen wird. Dies gilt nur, wenn die JSX-Ausgabe \"react\" als Ziel verwendet wird.",
+  "Specify_the_output_directory_for_generated_declaration_files_6613": "Geben Sie das Ausgabeverzeichnis für generierte Deklarationsdateien an.",
   "Specify_the_root_directory_of_input_files_Use_to_control_the_output_directory_structure_with_outDir_6058": "Geben Sie das Stammverzeichnis der Eingabedateien an. Verwenden Sie diese Angabe, um die Ausgabeverzeichnisstruktur mithilfe von \"-outDir\" zu steuern.",
+  "Specify_the_root_folder_within_your_source_files_6690": "Geben Sie den Stammordner in den Quelldateien an.",
+  "Specify_the_root_path_for_debuggers_to_find_the_reference_source_code_6695": "Geben Sie den Stammpfad für Debugger an, um den Verweisquellcode zu suchen.",
+  "Specify_type_package_names_to_be_included_without_being_referenced_in_a_source_file_6711": "Geben Sie Typpaketnamen an, die eingeschlossen werden sollen, ohne in einer Quelldatei referenziert zu werden.",
+  "Specify_what_JSX_code_is_generated_6646": "Geben Sie an, welcher JSX-Code generiert wird.",
+  "Specify_what_approach_the_watcher_should_use_if_the_system_runs_out_of_native_file_watchers_6634": "Geben Sie an, welchen Ansatz der Watcher verwenden soll, wenn auf dem System keine nativen Dateiüberwachungen mehr vorhanden sind.",
+  "Specify_what_module_code_is_generated_6657": "Geben Sie an, welcher Modulcode generiert wird.",
   "Split_all_invalid_type_only_imports_1367": "Alle ungültigen reinen Typenimporte teilen",
   "Split_into_two_separate_import_declarations_1366": "In zwei separate Importdeklarationen teilen",
   "Spread_operator_in_new_expressions_is_only_available_when_targeting_ECMAScript_5_and_higher_2472": "Der Verteilungsoperator in new-Ausdrücken ist nur verfügbar, wenn das Ziel ECMAScript 5 oder höher ist.",
@@ -1101,9 +1329,9 @@
   "Starting_compilation_in_watch_mode_6031": "Kompilierung im Überwachungsmodus wird gestartet...",
   "Statement_expected_1129": "Eine Anweisung wurde erwartet.",
   "Statements_are_not_allowed_in_ambient_contexts_1036": "Anweisungen sind in Umgebungskontexten unzulässig.",
+  "Static_fields_with_private_names_can_t_have_initializers_when_the_useDefineForClassFields_flag_is_no_2805": "Statische Felder mit privaten Namen dürfen keine Initialisierer enthalten, wenn das Flag \"--useDefineForClassFields\" nicht mit dem Wert \"esnext\" für \"--target\" angegeben wird. Erwägen Sie, das Flag \"--useDefineForClassFields\" hinzuzufügen.",
   "Static_members_cannot_reference_class_type_parameters_2302": "Statische Member dürfen nicht auf Klassentypparameter verweisen.",
   "Static_property_0_conflicts_with_built_in_property_Function_0_of_constructor_function_1_2699": "Die statische Eigenschaft \"{0}\" steht in Konflikt mit der integrierten Eigenschaft \"Function.{0}\" der Konstruktorfunktion \"{1}\".",
-  "Strict_Type_Checking_Options_6173": "Strenge Typüberprüfungsoptionen",
   "String_literal_expected_1141": "Ein Zeichenfolgenliteral wurde erwartet.",
   "String_literal_with_double_quotes_expected_1327": "Ein Zeichenfolgenliteral mit doppelten Anführungszeichen wird erwartet.",
   "Stylize_errors_and_messages_using_color_and_context_experimental_6073": "Fehler und Nachrichten farbig und mit Kontext formatieren (experimentell).",
@@ -1117,9 +1345,10 @@
   "Super_calls_are_not_permitted_outside_constructors_or_in_nested_functions_inside_constructors_2337": "Aufrufe von \"super\" sind außerhalb von Konstruktoren oder in geschachtelten Funktionen innerhalb von Konstruktoren unzulässig.",
   "Suppress_excess_property_checks_for_object_literals_6072": "Übermäßige Eigenschaftenüberprüfungen für Objektliterale unterdrücken.",
   "Suppress_noImplicitAny_errors_for_indexing_objects_lacking_index_signatures_6055": "noImplicitAny-Fehler für die Indizierung von Objekten unterdrücken, denen Indexsignaturen fehlen.",
+  "Suppress_noImplicitAny_errors_when_indexing_objects_that_lack_index_signatures_6703": "Unterdrücken Sie \"noImplicitAny\"-Fehler beim Indizieren von Objekten ohne Indexsignaturen.",
   "Switch_each_misused_0_to_1_95138": "Jedes falsch verwendete {0}-Element in \"{1}\" ändern",
   "Symbol_reference_does_not_refer_to_the_global_Symbol_constructor_object_2470": "Der Symbol-Verweis verweist nicht auf das globale Symbolkonstruktorobjekt.",
-  "Synchronously_call_callbacks_and_update_the_state_of_directory_watchers_on_platforms_that_don_t_supp_6228": "Rufen Sie Rückrufe synchron auf, und aktualisieren Sie den Status von Verzeichnisüberwachungen auf Plattformen, die nativ keine rekursive Überwachung unterstützen.",
+  "Synchronously_call_callbacks_and_update_the_state_of_directory_watchers_on_platforms_that_don_t_supp_6704": "Rufen Sie Rückrufe synchron auf, und aktualisieren Sie den Status von Verzeichnisüberwachungen auf Plattformen, die rekursive Überwachung nicht nativ unterstützen.",
   "Syntax_Colon_0_6023": "Syntax: {0}",
   "Tag_0_expects_at_least_1_arguments_but_the_JSX_factory_2_provides_at_most_3_6229": "Das Tag \"{0}\" erwartet mindestens {1} Argumente, von der JSX-Factory \"{2}\" werden aber höchstens {3} bereitgestellt.",
   "Tagged_template_expressions_are_not_permitted_in_an_optional_chain_1358": "Mit Tags versehene Vorlagenausdrücke sind in einer optionalen Kette nicht zulässig.",
@@ -1141,10 +1370,12 @@
   "The_containing_function_or_module_body_is_too_large_for_control_flow_analysis_2563": "Der beinhaltende Funktions- oder Modulkörper ist zu groß für eine Ablaufsteuerungsanalyse.",
   "The_current_host_does_not_support_the_0_option_5001": "Der aktuelle Host unterstützt die Option \"{0}\" nicht.",
   "The_declaration_of_0_that_you_probably_intended_to_use_is_defined_here_18018": "Die Deklaration von \"{0}\", die Sie wahrscheinlich verwenden wollten, ist hier definiert.",
+  "The_declaration_was_marked_as_deprecated_here_2798": "Die Deklaration wurde hier als veraltet markiert.",
   "The_expected_type_comes_from_property_0_which_is_declared_here_on_type_1_6500": "Der erwartete Typ stammt aus der Eigenschaft \"{0}\", die hier für den Typ \"{1}\" deklariert wird.",
   "The_expected_type_comes_from_the_return_type_of_this_signature_6502": "Der erwartete Typ stammt aus dem Rückgabetyp dieser Signatur.",
   "The_expected_type_comes_from_this_index_signature_6501": "Der erwartete Typ stammt aus dieser Indexsignatur.",
   "The_expression_of_an_export_assignment_must_be_an_identifier_or_qualified_name_in_an_ambient_context_2714": "Der Ausdruck einer Exportzuweisung muss ein Bezeichner oder ein qualifizierter Name in einem Umgebungskontext sein.",
+  "The_file_is_in_the_program_because_Colon_1430": "Die Datei befindet sich aus folgenden Gründen im Programm:",
   "The_files_list_in_config_file_0_is_empty_18002": "Die Liste \"files\" in der Konfigurationsdatei \"{0}\" ist leer.",
   "The_first_export_default_is_here_2752": "Der erste Exportstandard befindet sich hier.",
   "The_first_parameter_of_the_then_method_of_a_promise_must_be_a_callback_1060": "Der erste Parameter der \"then\"-Methode einer Zusage muss ein Rückruf sein.",
@@ -1168,6 +1399,7 @@
   "The_left_hand_side_of_a_for_in_statement_must_be_of_type_string_or_any_2405": "Die linke Seite einer for...in-Anweisung muss vom Typ \"string\" oder \"any\" sein.",
   "The_left_hand_side_of_a_for_of_statement_cannot_use_a_type_annotation_2483": "Die linke Seite einer for...of-Anweisung darf keine Typanmerkung verwenden.",
   "The_left_hand_side_of_a_for_of_statement_may_not_be_an_optional_property_access_2781": "Die linke Seite einer for...of-Anweisung darf kein optionaler Eigenschaftenzugriff sein.",
+  "The_left_hand_side_of_a_for_of_statement_may_not_be_async_1106": "Die linke Seite einer „for...of“-Anweisung darf nicht „asynchron“ lauten.",
   "The_left_hand_side_of_a_for_of_statement_must_be_a_variable_or_a_property_access_2487": "Die linke Seite einer for...of-Anweisung muss eine Variable oder ein Eigenschaftenzugriff sein.",
   "The_left_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type_2362": "Die linke Seite einer arithmetischen Operation muss den Typ \"any\", \"number\" oder \"bigint\" aufweisen oder ein Enumerationstyp sein.",
   "The_left_hand_side_of_an_assignment_expression_may_not_be_an_optional_property_access_2779": "Die linke Seite eines Zuweisungsausdrucks darf kein optionaler Eigenschaftenzugriff sein.",
@@ -1185,15 +1417,18 @@
   "The_parser_expected_to_find_a_to_match_the_token_here_1007": "Der Parser hat eine entsprechende Klammer \"}\" zu dem hier vorhandenen Token \"{\" erwartet.",
   "The_property_0_cannot_be_accessed_on_type_1_within_this_class_because_it_is_shadowed_by_another_priv_18014": "Auf die Eigenschaft \"{0}\" kann für den Typ \"{1}\" nicht innerhalb dieser Klasse zugegriffen werden, weil sie von einem anderen privaten Bezeichner mit der gleichen Schreibweise verborgen wird.",
   "The_return_type_of_a_JSX_element_constructor_must_return_an_object_type_2601": "Der Rückgabetyp eines JSX-Elementkonstruktors muss einen Objekttyp zurückgeben.",
+  "The_return_type_of_a_get_accessor_must_be_assignable_to_its_set_accessor_type_2380": "Der Rückgabetyp einer get-Zugriffsmethode muss dem zugehörigen set-Accessortyp zugewiesen werden können.",
   "The_return_type_of_a_parameter_decorator_function_must_be_either_void_or_any_1237": "Der Rückgabetyp einer Parameter-Decorator-Funktion muss \"void\" oder \"any\" sein.",
   "The_return_type_of_a_property_decorator_function_must_be_either_void_or_any_1236": "Der Rückgabetyp einer Eigenschaften-Decorator-Funktion muss \"void\" oder \"any\" sein.",
   "The_return_type_of_an_async_function_must_either_be_a_valid_promise_or_must_not_contain_a_callable_t_1058": "Der Rückgabetyp einer asynchronen Funktion muss entweder eine gültige Zusage sein oder darf keinen aufrufbaren \"then\"-Member enthalten.",
   "The_return_type_of_an_async_function_or_method_must_be_the_global_Promise_T_type_Did_you_mean_to_wri_1064": "Der Rückgabetyp einer asynchronen Funktion oder Methode muss der globale Typ \"Promise<T>\" sein. Wollten Sie eigentlich \"Promise<{0}>\" verwenden?",
   "The_right_hand_side_of_a_for_in_statement_must_be_of_type_any_an_object_type_or_a_type_parameter_but_2407": "Die rechte Seite einer for...in-Anweisung muss den Typ \"any\" aufweisen oder ein Objekttyp bzw. ein Typparameter sein. Sie weist hier jedoch den Typ \"{0}\" auf.",
   "The_right_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type_2363": "Die rechte Seite einer arithmetischen Operation muss den Typ \"any\", \"number\" oder \"bigint\" aufweisen oder ein Enumerationstyp sein.",
-  "The_right_hand_side_of_an_in_expression_must_be_of_type_any_an_object_type_or_a_type_parameter_2361": "Die rechte Seite eines in-Ausdrucks muss den Typ \"any\" aufweisen oder ein Objekttyp bzw. ein Typparameter sein.",
+  "The_right_hand_side_of_an_in_expression_must_not_be_a_primitive_2361": "Die rechte Seite eines in-Ausdrucks darf kein primitiver Typ sein.",
   "The_right_hand_side_of_an_instanceof_expression_must_be_of_type_any_or_of_a_type_assignable_to_the_F_2359": "Die rechte Seite eines instanceof-Ausdrucks muss den Typ \"any\" oder einen Typ aufweisen, der dem Schnittstellentyp \"Function\" zugewiesen werden kann.",
+  "The_root_value_of_a_0_file_must_be_an_object_5092": "Der Stammwert einer {0}-Datei muss ein Objekt sein.",
   "The_shadowing_declaration_of_0_is_defined_here_18017": "Die verbergende Deklaration von \"{0}\" ist hier definiert.",
+  "The_signature_0_of_1_is_deprecated_6387": "Die Signatur \"{0}\" von \"{1}\" ist veraltet.",
   "The_specified_path_does_not_exist_Colon_0_5058": "Der angegebene Pfad \"{0}\" ist nicht vorhanden.",
   "The_tag_was_first_specified_here_8034": "Das Tag wurde zuerst hier angegeben.",
   "The_target_of_an_assignment_must_be_a_variable_or_a_property_access_2541": "Das Ziel einer Zuweisung muss eine Variable oder ein Eigenschaftenzugriff sein.",
@@ -1204,6 +1439,7 @@
   "The_type_0_is_readonly_and_cannot_be_assigned_to_the_mutable_type_1_4104": "Der Typ \"{0}\" ist als \"readonly\" festgelegt und kann nicht dem änderbaren Typ \"{1}\" zugewiesen werden.",
   "The_type_argument_for_type_parameter_0_cannot_be_inferred_from_the_usage_Consider_specifying_the_typ_2453": "Das Typargument für den Typparameter \"{0}\" kann nicht aus der Syntax abgeleitet werden. Geben Sie die Typargumente ggf. explizit an.",
   "The_type_of_a_function_declaration_must_match_the_function_s_signature_8030": "Der Typ einer Funktionsdeklaration muss mit der Signatur der Funktion übereinstimmen.",
+  "The_type_of_this_node_cannot_be_serialized_because_its_property_0_cannot_be_serialized_4118": "Der Typ dieses Knotens kann nicht serialisiert werden, da seine Eigenschaft \"{0}\" nicht serialisiert werden kann.",
   "The_type_returned_by_the_0_method_of_an_async_iterator_must_be_a_promise_for_a_type_with_a_value_pro_2547": "Der von der {0}()-Methode eines Async-Iterators zurückgegebene Typ muss eine Zusage für einen Typ mit einer value-Eigenschaft sein.",
   "The_type_returned_by_the_0_method_of_an_iterator_must_have_a_value_property_2490": "Der von der {0}()-Methode eines Iterators zurückgegebene Typ muss eine value-Eigenschaft aufweisen.",
   "The_types_of_0_are_incompatible_between_these_types_2200": "Die Typen von \"{0}\" sind zwischen diesen Typen nicht kompatibel.",
@@ -1214,7 +1450,8 @@
   "This_JSX_tag_s_0_prop_expects_a_single_child_of_type_1_but_multiple_children_were_provided_2746": "Die Eigenschaft \"{0}\" für dieses JSX-Tag erwartet ein einzelnes untergeordnetes Element vom Typ \"{1}\", aber es wurden mehrere untergeordnete Elemente angegeben.",
   "This_JSX_tag_s_0_prop_expects_type_1_which_requires_multiple_children_but_only_a_single_child_was_pr_2745": "Die Eigenschaft \"{0}\" für dieses JSX-Tag erwartet den Typ \"{1}\", der mehrere untergeordnete Elemente erfordert, aber es wurde nur ein untergeordnetes Elemente angegeben.",
   "This_condition_will_always_return_0_since_the_types_1_and_2_have_no_overlap_2367": "Diese Bedingung gibt immer \"{0}\" zurück, weil die Typen \"{1}\" und \"{2}\" keine Überschneidung aufweisen.",
-  "This_condition_will_always_return_true_since_the_function_is_always_defined_Did_you_mean_to_call_it__2774": "Diese Bedingung gibt immer TRUE zurück, weil die Funktion immer definiert ist. Möchten Sie sie stattdessen aufrufen?",
+  "This_condition_will_always_return_true_since_this_0_is_always_defined_2801": "Diese Bedingung gibt immer TRUE zurück, weil diese '{0}' immer definiert ist.",
+  "This_condition_will_always_return_true_since_this_function_is_always_defined_Did_you_mean_to_call_it_2774": "Diese Bedingung gibt immer TRUE zurück, weil diese Funktion immer definiert ist. Möchten Sie sie stattdessen aufrufen?",
   "This_constructor_function_may_be_converted_to_a_class_declaration_80002": "Diese Konstruktorfunktion kann in eine Klassendeklaration konvertiert werden.",
   "This_expression_is_not_callable_2349": "Dieser Ausdruck kann nicht aufgerufen werden.",
   "This_expression_is_not_callable_because_it_is_a_get_accessor_Did_you_mean_to_use_it_without_6234": "Dieser Ausdruck kann nicht aufgerufen werden, weil es sich um eine get-Zugriffsmethode handelt. Möchten Sie den Wert ohne \"()\" verwenden?",
@@ -1223,15 +1460,23 @@
   "This_import_is_never_used_as_a_value_and_must_use_import_type_because_importsNotUsedAsValues_is_set__1371": "Dieser Import wird nie als Wert verwendet und muss \"import type\" verwenden, weil \"importsNotUsedAsValues\" auf \"error\" festgelegt ist.",
   "This_is_the_declaration_being_augmented_Consider_moving_the_augmenting_declaration_into_the_same_fil_6233": "Dies ist die erweiterte Deklaration. Die erweiternde Deklaration sollte in dieselbe Datei verschoben werden.",
   "This_may_be_converted_to_an_async_function_80006": "Es kann eine Konvertierung in ein asynchrone Funktion durchgeführt werden.",
+  "This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0_4113": "Dieser Member kann keinen override-Modifizierer aufweisen, weil er nicht in der Basisklasse \"{0}\" deklariert ist.",
+  "This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0_Did_you__4117": "Dieser Member kann keinen override-Modifizierer aufweisen, weil er nicht in der Basisklasse \"{0}\" deklariert ist. Meinten Sie \"{1}\"?",
+  "This_member_cannot_have_an_override_modifier_because_its_containing_class_0_does_not_extend_another__4112": "Dieser Member kann keinen override-Modifizierer aufweisen, weil die Klasse \"{0}\", die diesen Member enthält, keine andere Klasse erweitert.",
+  "This_member_must_have_an_override_modifier_because_it_overrides_a_member_in_the_base_class_0_4114": "Dieser Member muss einen override-Modifizierer aufweisen, weil er einen Member in der Basisklasse \"{0}\" überschreibt.",
+  "This_member_must_have_an_override_modifier_because_it_overrides_an_abstract_method_that_is_declared__4116": "Dieser Member muss einen override-Modifizierer aufweisen, weil er eine abstrakte Methode überschreibt, die in der Basisklasse \"{0}\" deklariert ist.",
   "This_module_can_only_be_referenced_with_ECMAScript_imports_Slashexports_by_turning_on_the_0_flag_and_2497": "Auf dieses Modul kann nur mit ECMAScript-Importen/-Exporten verwiesen werden, indem das Flag \"{0}\" aktiviert und auf den Standardexport verwiesen wird.",
   "This_module_is_declared_with_using_export_and_can_only_be_used_with_a_default_import_when_using_the__2594": "Dieses Modul wird mit \"export =\" deklariert und kann nur bei Verwendung des Flags \"{0}\" mit einem Standardimport verwendet werden.",
   "This_overload_signature_is_not_compatible_with_its_implementation_signature_2394": "Diese Überladungssignatur ist nicht mit der zugehörigen Implementierungssignatur kompatibel.",
   "This_parameter_is_not_allowed_with_use_strict_directive_1346": "Dieser Parameter ist mit der Direktive \"use strict\" nicht zugelassen.",
+  "This_parameter_property_must_have_an_override_modifier_because_it_overrides_a_member_in_base_class_0_4115": "Diese Parametereigenschaft muss einen „override“-Modifizierer aufweisen, weil er einen Member in der Basisklasse \"{0}\" überschreibt.",
   "This_spread_always_overwrites_this_property_2785": "Diese Eigenschaft wird immer durch diesen Spread-Operator überschrieben.",
   "This_syntax_requires_an_imported_helper_but_module_0_cannot_be_found_2354": "Diese Syntax erfordert ein importiertes Hilfsprogramm, aber das Modul \"{0}\" wurde nicht gefunden.",
   "This_syntax_requires_an_imported_helper_named_1_which_does_not_exist_in_0_Consider_upgrading_your_ve_2343": "Diese Syntax erfordert ein importiertes Hilfsprogramm namens \"{1}\", das in \"{0}\" nicht vorhanden ist. Erwägen Sie ein Upgrade Ihrer Version von \"{0}\".",
+  "This_syntax_requires_an_imported_helper_named_1_with_2_parameters_which_is_not_compatible_with_the_o_2807": "Diese Syntax erfordert ein importiertes Hilfsprogramm mit dem Namen \"{1}\" mit {2} Parametern, die nicht mit der in \"{0}\" kompatibel ist. Erwägen Sie ein Upgrade Ihrer Version von \"{0}\".",
   "Top_level_await_expressions_are_only_allowed_when_the_module_option_is_set_to_esnext_or_system_and_t_1378": "await-Ausdrücke der obersten Ebene sind nur zulässig, wenn die Option \"module\" auf \"esnext\" oder \"system\" festgelegt ist und die Option \"target\" den Wert \"es2017\" oder höher aufweist.",
   "Top_level_declarations_in_d_ts_files_must_start_with_either_a_declare_or_export_modifier_1046": "Deklarationen der obersten Ebene in .d.ts-Dateien müssen entweder mit einem declare- oder einem export-Modifizierer beginnen.",
+  "Top_level_for_await_loops_are_only_allowed_when_the_module_option_is_set_to_esnext_or_system_and_the_1432": "\"for await\"-Schleifen der obersten Ebene sind nur zulässig, wenn die Option \"module\" auf \"esnext\" oder \"system\" festgelegt ist und die Option \"target\" den Wert \"es2017\" oder höher aufweist.",
   "Trailing_comma_not_allowed_1009": "Ein nachgestelltes Komma ist unzulässig.",
   "Transpile_each_file_as_a_separate_module_similar_to_ts_transpileModule_6153": "Jede Datei als separates Modul transpilieren (ähnlich wie bei \"ts.transpileModule\").",
   "Try_npm_i_save_dev_types_Slash_1_if_it_exists_or_add_a_new_declaration_d_ts_file_containing_declare__7035": "Versuchen Sie es mit \"npm i --save-dev @types/{1}\", sofern vorhanden, oder fügen Sie eine neue Deklarationsdatei (.d.ts) hinzu, die \"declare module '{0}';\" enthält.",
@@ -1240,6 +1485,7 @@
   "Tuple_members_must_all_have_names_or_all_not_have_names_5084": "Von den Tupelelementen müssen entweder alle oder keines einen Namen aufweisen.",
   "Tuple_type_0_of_length_1_has_no_element_at_index_2_2493": "Der Tupeltyp \"{0}\" der Länge {1} weist am Index \"{2}\" kein Element auf.",
   "Tuple_type_arguments_circularly_reference_themselves_4110": "Tupeltypargumente verweisen zirkulär auf sich selbst.",
+  "Type_0_can_only_be_iterated_through_when_using_the_downlevelIteration_flag_or_with_a_target_of_es201_2802": "Der Typ \"{0}\" kann nur durchlaufen werden, wenn das Flag \"--downlevelIteration\" verwendet wird oder \"--target\" den Wert \"es2015\" oder höher aufweist.",
   "Type_0_cannot_be_used_as_an_index_type_2538": "Der Typ \"{0}\" kann nicht als Indextyp verwendet werden.",
   "Type_0_cannot_be_used_to_index_type_1_2536": "Der Typ \"{0}\" kann nicht zum Indizieren von Typ \"{1}\" verwendet werden.",
   "Type_0_does_not_satisfy_the_constraint_1_2344": "Der Typ \"{0}\" erfüllt die Einschränkung \"{1}\" nicht.",
@@ -1264,7 +1510,9 @@
   "Type_0_must_have_a_Symbol_iterator_method_that_returns_an_iterator_2488": "Der Typ \"{0}\" muss eine Methode \"[Symbol.iterator]()\" aufweisen, die einen Iterator zurückgibt.",
   "Type_0_provides_no_match_for_the_signature_1_2658": "Der Typ \"{0}\" enthält keine Entsprechung für die Signatur \"{1}\".",
   "Type_0_recursively_references_itself_as_a_base_type_2310": "Der Typ \"{0}\" verweist rekursiv auf sich selbst als ein Basistyp.",
+  "Type_Checking_6248": "Typprüfung",
   "Type_alias_0_circularly_references_itself_2456": "Der Typalias \"{0}\" verweist zirkulär auf sich selbst.",
+  "Type_alias_must_be_given_a_name_1439": "Typalias muss einen Namen erhalten.",
   "Type_alias_name_cannot_be_0_2457": "Der Typaliasname darf nicht \"{0}\" sein.",
   "Type_aliases_can_only_be_used_in_TypeScript_files_8008": "Typaliase können nur in TypeScript-Dateien verwendet werden.",
   "Type_annotation_cannot_appear_on_a_constructor_declaration_1093": "Die Typanmerkung darf nicht für eine Konstruktordeklaration verwendet werden.",
@@ -1276,10 +1524,15 @@
   "Type_arguments_cannot_be_used_here_1342": "Typargumente können an dieser Stelle nicht verwendet werden.",
   "Type_arguments_for_0_circularly_reference_themselves_4109": "Typargumente für \"{0}\" verweisen zirkulär auf sich selbst.",
   "Type_assertion_expressions_can_only_be_used_in_TypeScript_files_8016": "Typassertionsausdrücke können nur in TypeScript-Dateien verwendet werden.",
+  "Type_at_position_0_in_source_is_not_compatible_with_type_at_position_1_in_target_2626": "Der Typ an Position {0} in der Quelle ist nicht mit dem Typ an Position {1} im Ziel kompatibel.",
+  "Type_at_positions_0_through_1_in_source_is_not_compatible_with_type_at_position_2_in_target_2627": "Der Typ an den Positionen {0} bis {1} in der Quelle ist nicht mit dem Typ an Position {2} im Ziel kompatibel.",
+  "Type_catch_clause_variables_as_unknown_instead_of_any_6803": "Geben Sie Variablen der catch-Klauseln als \"unknown\" anstelle von \"any\" ein.",
   "Type_declaration_files_to_be_included_in_compilation_6124": "Typdeklarationsdateien, die in die Kompilierung eingeschlossen werden sollen.",
   "Type_expected_1110": "Es wurde ein Typ erwartet.",
   "Type_instantiation_is_excessively_deep_and_possibly_infinite_2589": "Die Typinstanziierung ist übermäßig tief und möglicherweise unendlich.",
   "Type_is_referenced_directly_or_indirectly_in_the_fulfillment_callback_of_its_own_then_method_1062": "Auf den Typ wird direkt oder indirekt im Erfüllungsrückruf der eigenen \"then\"-Methode verwiesen.",
+  "Type_library_referenced_via_0_from_file_1_1402": "Typbibliothek, die über \"{0}\" aus der Datei \"{1}\" referenziert wird",
+  "Type_library_referenced_via_0_from_file_1_with_packageId_2_1403": "Typbibliothek, die über \"{0}\" aus der Datei \"{1}\" mit packageId \"{2}\" referenziert wird",
   "Type_of_await_operand_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member_1320": "Der Typ des \"await\"-Operanden muss entweder eine gültige Zusage sein oder darf keinen aufrufbaren \"then\"-Member enthalten.",
   "Type_of_computed_property_s_value_is_0_which_is_not_assignable_to_type_1_2418": "Der Typ des Werts der berechneten Eigenschaft lautet \"{0}\" und kann dem Typ \"{1}\" nicht zugewiesen werden.",
   "Type_of_iterated_elements_of_a_yield_Asterisk_operand_must_either_be_a_valid_promise_or_must_not_con_1322": "Der Typ iterierter Elemente eines \"yield*\"-Operanden muss entweder eine gültige Zusage sein oder darf keinen aufrufbaren \"then\"-Member enthalten.",
@@ -1305,6 +1558,7 @@
   "Type_parameter_name_cannot_be_0_2368": "Der Name des Typparameters darf nicht \"{0}\" sein.",
   "Type_parameters_cannot_appear_on_a_constructor_declaration_1092": "Typparameter dürfen nicht für eine Konstruktordeklaration verwendet werden.",
   "Type_predicate_0_is_not_assignable_to_1_1226": "Das Typprädikat \"{0}\" kann \"{1}\" nicht zugewiesen werden.",
+  "Type_produces_a_tuple_type_that_is_too_large_to_represent_2799": "Der Typ erzeugt einen Tupeltyp, der für die Darstellung zu groß ist.",
   "Type_reference_directive_0_was_not_resolved_6120": "======== Die Typverweisdirektive \"{0}\" wurde nicht aufgelöst. ========",
   "Type_reference_directive_0_was_successfully_resolved_to_1_primary_Colon_2_6119": "======== Die Typverweisdirektive \"{0}\" wurde erfolgreich in \"{1}\" aufgelöst. Primär: {2}. ========",
   "Type_reference_directive_0_was_successfully_resolved_to_1_with_Package_ID_2_primary_Colon_3_6219": "======== Die Typverweisdirektive \"{0}\" wurde erfolgreich in \"{1}\" mit Paket-ID \"{2}\" aufgelöst. Primär: {3}. ========",
@@ -1318,6 +1572,7 @@
   "Unable_to_resolve_signature_of_parameter_decorator_when_called_as_an_expression_1239": "Die Signatur des Parameter-Decorator-Elements kann nicht aufgelöst werden, wenn der Aufruf als Ausdruck erfolgt.",
   "Unable_to_resolve_signature_of_property_decorator_when_called_as_an_expression_1240": "Die Signatur des Eigenschaften-Decorator-Elements kann nicht aufgelöst werden, wenn der Aufruf als Ausdruck erfolgt.",
   "Unexpected_end_of_text_1126": "Unerwartetes Textende.",
+  "Unexpected_keyword_or_identifier_1434": "Unerwartetes Schlüsselwort oder Bezeichner.",
   "Unexpected_token_1012": "Unerwartetes Token.",
   "Unexpected_token_A_constructor_method_accessor_or_property_was_expected_1068": "Unerwartetes Token. Ein Konstruktor, eine Methode, eine Zugriffsmethode oder eine Eigenschaft wurde erwartet.",
   "Unexpected_token_A_type_parameter_name_was_expected_without_curly_braces_1069": "Unerwartetes Token. Es wurde ein Typparametername ohne geschweifte Klammern erwartet.",
@@ -1328,6 +1583,7 @@
   "Unknown_build_option_0_Did_you_mean_1_5077": "Unbekannte Buildoption \"{0}\". Meinten Sie \"{1}\"?",
   "Unknown_compiler_option_0_5023": "Unbekannte Compileroption \"{0}\".",
   "Unknown_compiler_option_0_Did_you_mean_1_5025": "Unbekannte Compileroption \"{0}\". Meinten Sie \"{1}\"?",
+  "Unknown_keyword_or_identifier_Did_you_mean_0_1435": "Unbekanntes Schlüsselwort oder Bezeichner. Meinten Sie \"{0}\"?",
   "Unknown_option_excludes_Did_you_mean_exclude_6114": "Unbekannte Option \"exclude\". Meinten Sie \"exclude\"?",
   "Unknown_type_acquisition_option_0_17010": "Unbekannte Option zur Typerfassung: {0}.",
   "Unknown_type_acquisition_option_0_Did_you_mean_1_17018": "Unbekannte Typerfassungsoption \"{0}\". Meinten Sie \"{1}\"?",
@@ -1350,6 +1606,7 @@
   "Use_element_access_for_all_undeclared_properties_95146": "Elementzugriff für alle nicht deklarierten Eigenschaften verwenden",
   "Use_synthetic_default_member_95016": "Verwenden Sie den synthetischen Member \"default\".",
   "Using_a_string_in_a_for_of_statement_is_only_supported_in_ECMAScript_5_and_higher_2494": "Das Verwenden einer Zeichenfolge in einer for...of-Anweisung wird nur in ECMAScript 5 oder höher unterstützt.",
+  "Using_build_b_will_make_tsc_behave_more_like_a_build_orchestrator_than_a_compiler_This_is_used_to_tr_6915": "Bei Verwendung von --build wird tsc durch -b dazu veranlasst, sich eher wie ein Build-Orchestrator als ein Compiler zu verhalten. Damit wird der Aufbau von zusammengesetzten Projekten ausgelöst. Weitere Informationen dazu finden Sie unter {0}",
   "Using_compiler_options_of_project_reference_redirect_0_6215": "Compileroptionen der Projektverweisumleitung \"{0}\" werden verwendet.",
   "VERSION_6036": "VERSION",
   "Value_of_type_0_has_no_properties_in_common_with_type_1_Did_you_mean_to_call_it_2560": "Der Wert des Typs \"{0}\" verfügt über keine gemeinsamen Eigenschaften mit dem Typ \"{1}\". Wollten Sie ihn aufrufen?",
@@ -1361,10 +1618,16 @@
   "Variable_0_is_used_before_being_assigned_2454": "Die Variable \"{0}\" wird vor ihrer Zuweisung verwendet.",
   "Variable_declaration_expected_1134": "Eine Variablendeklaration wurde erwartet.",
   "Variable_declaration_list_cannot_be_empty_1123": "Die Variablendeklarationsliste darf nicht leer sein.",
+  "Variable_declaration_not_allowed_at_this_location_1440": "Variablendeklaration ist an dieser Stelle nicht zulässig.",
+  "Variadic_element_at_position_0_in_source_does_not_match_element_at_position_1_in_target_2625": "Das variadic-Element an Position {0} in der Quelle stimmt nicht mit dem Element an Position {1} im Ziel überein.",
   "Version_0_6029": "Version {0}",
   "Visit_https_Colon_Slash_Slashaka_ms_Slashtsconfig_json_to_read_more_about_this_file_95110": "Besuchen Sie https://aka.ms/tsconfig.json, um mehr über diese Datei zu erfahren.",
+  "WATCH_OPTIONS_6918": "ÜBERWACHUNGSOPTIONEN",
+  "Watch_and_Build_Modes_6250": "Überwachungs- und Buildmodi",
   "Watch_input_files_6005": "Eingabedateien überwachen.",
   "Watch_option_0_requires_a_value_of_type_1_5080": "Die Überwachungsoption \"{0}\" erfordert einen Wert vom Typ \"{1}\".",
+  "When_assigning_functions_check_to_ensure_parameters_and_the_return_values_are_subtype_compatible_6698": "Überprüfen Sie beim Zuweisen von Funktionen, ob Parameter und Rückgabewerte untertypkompatibel sind.",
+  "When_type_checking_take_into_account_null_and_undefined_6699": "Berücksichtigen Sie bei der Typüberprüfung \"null\" und \"undefined\".",
   "Whether_to_keep_outdated_console_output_in_watch_mode_instead_of_clearing_the_screen_6191": "Gibt an, ob eine veraltete Konsolenausgabe im Überwachungsmodus beibehalten wird, statt den Bildschirm zu löschen.",
   "Wrap_all_invalid_characters_in_an_expression_container_95109": "Alle ungültigen Zeichen mit einem Ausdruckscontainer umschließen",
   "Wrap_all_object_literal_with_parentheses_95116": "Gesamtes Objektliteral in Klammern einschließen",
@@ -1372,10 +1635,12 @@
   "Wrap_in_JSX_fragment_95120": "Mit JSX-Fragment umschließen",
   "Wrap_invalid_character_in_an_expression_container_95108": "Ungültiges Zeichen mit Ausdruckscontainer umschließen",
   "Wrap_the_following_body_with_parentheses_which_should_be_an_object_literal_95113": "Schließen Sie den folgenden Text, der ein Objektliteral darstellt, in Klammern ein.",
+  "You_can_learn_about_all_of_the_compiler_options_at_0_6913": "Informationen zu allen Compileroptionen finden Sie unter {0}",
   "You_cannot_rename_a_module_via_a_global_import_8031": "Ein Modul kann nicht über einen globalen Import umbenannt werden.",
   "You_cannot_rename_elements_that_are_defined_in_the_standard_TypeScript_library_8001": "Sie können keine Elemente umbenennen, die in der TypeScript-Standardbibliothek definiert sind.",
   "You_cannot_rename_this_element_8000": "Sie können dieses Element nicht umbenennen.",
   "_0_accepts_too_few_arguments_to_be_used_as_a_decorator_here_Did_you_mean_to_call_it_first_and_write__1329": "\"{0}\" akzeptiert zu wenige Argumente, um hier als Decorator verwendet zu werden. Wollten Sie es zuerst aufrufen und \"@{0}()\" schreiben?",
+  "_0_and_1_index_signatures_are_incompatible_2330": "Indexsignaturen \"{0}\" und \"{1}\" sind nicht kompatibel.",
   "_0_and_1_operations_cannot_be_mixed_without_parentheses_5076": "Die Vorgänge \"{0}\" und \"{1}\" dürfen nicht ohne Klammern kombiniert werden.",
   "_0_are_specified_twice_The_attribute_named_0_will_be_overwritten_2710": "\"{0}\" ist zweimal angegeben. Das Attribut mit dem Namen \"{0}\" wird überschrieben.",
   "_0_can_only_be_imported_by_turning_on_the_esModuleInterop_flag_and_using_a_default_import_2596": "\"{0}\" kann nur importiert werden, indem das Flag \"esModuleInterop\" aktiviert und ein Standardimport verwendet wird.",
@@ -1396,6 +1661,8 @@
   "_0_implicitly_has_an_1_return_type_but_a_better_type_may_be_inferred_from_usage_7050": "\"{0}\" weist implizit einen Rückgabetyp \"{1}\" auf, möglicherweise kann jedoch ein besserer Typ aus der Syntax abgeleitet werden.",
   "_0_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_reference_7023": "\"{0}\" weist implizit den Typ \"any\" auf, weil keine Rückgabetypanmerkung vorhanden ist und darauf direkt oder indirekt in einem der Rückgabeausdrücke des Objekts verwiesen wird.",
   "_0_implicitly_has_type_any_because_it_does_not_have_a_type_annotation_and_is_referenced_directly_or__7022": "\"{0}\" weist implizit den Typ \"any\" auf, weil keine Typanmerkung vorhanden ist und darauf direkt oder indirekt im eigenen Initialisierer verwiesen wird.",
+  "_0_index_signatures_are_incompatible_2634": "\"{0}\" Indexsignaturen sind inkompatibel.",
+  "_0_index_type_1_is_not_assignable_to_2_index_type_3_2413": "\"{0}\" Indextyp \"{1}\" kann nicht \"{2}\" Indextyp \"{3}\" zugewiesen werden.",
   "_0_is_a_primitive_but_1_is_a_wrapper_object_Prefer_using_0_when_possible_2692": "\"{0}\" ist ein primitiver Typ, aber \"{1}\" ist ein Wrapperobjekt. Verwenden Sie vorzugsweise \"{0}\", wenn möglich.",
   "_0_is_assignable_to_the_constraint_of_type_1_but_1_could_be_instantiated_with_a_different_subtype_of_5075": "\"{0}\" kann der Einschränkung vom Typ \"{1}\" zugewiesen werden, aber \"{1}\" könnte mit einem anderen Untertyp der Einschränkung \"{2}\" instanziiert werden.",
   "_0_is_declared_but_its_value_is_never_read_6133": "\"{0}\" ist deklariert, aber der zugehörige Wert wird nie gelesen.",
@@ -1440,6 +1707,7 @@
   "_0_which_lacks_return_type_annotation_implicitly_has_an_1_yield_type_7055": "\"{0}\" ohne Rückgabetypanmerkung weist implizit einen yield-Typ \"{1}\" auf.",
   "abstract_modifier_can_only_appear_on_a_class_method_or_property_declaration_1242": "Der Modifizierer \"abstract\" darf nur für eine Klassen-, Methoden- oder Eigenschaftendeklaration verwendet werden.",
   "and_here_6204": "und hier.",
+  "arguments_cannot_be_referenced_in_property_initializers_2815": "Auf \"arguments\" kann in Eigenschaftsinitialisierern nicht verwiesen werden.",
   "await_expressions_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_fi_1375": "await-Ausdrücke sind nur auf der obersten Ebene einer Datei zulässig, wenn diese Datei ein Modul ist. Diese Datei enthält jedoch keinerlei Importe oder Exporte. Erwägen Sie das Hinzufügen eines leeren \"export {}\", um diese Datei als Modul zu definieren.",
   "await_expressions_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_1308": "await-Ausdrücke sind nur innerhalb von asynchronen Funktionen und auf den obersten Modulebenen zulässig.",
   "await_expressions_cannot_be_used_in_a_parameter_initializer_2524": "await-Ausdrücke dürfen nicht in einem Parameterinitialisierer verwendet werden.",
@@ -1456,6 +1724,7 @@
   "const_enums_can_only_be_used_in_property_or_index_access_expressions_or_the_right_hand_side_of_an_im_2475": "const-Enumerationen können nur in Eigenschaften- bzw. Indexzugriffsausdrücken oder auf der rechten Seite einer Importdeklaration oder Exportzuweisung verwendet werden.",
   "constructor_cannot_be_used_as_a_parameter_property_name_2398": "\"constructor\" kann nicht als Parametereigenschaftsname verwendet werden.",
   "constructor_is_a_reserved_word_18012": "\"#constructor\" ist ein reserviertes Wort.",
+  "default_Colon_6903": "Standard:",
   "delete_cannot_be_called_on_an_identifier_in_strict_mode_1102": "\"delete\" kann für einen Bezeichner im Strict-Modus nicht aufgerufen werden.",
   "delete_this_Project_0_is_up_to_date_because_it_was_previously_built_6360": "Dies löschen – Projekt \"{0}\" ist auf dem neuesten Stand, da es bereits zuvor erstellt wurde",
   "export_Asterisk_does_not_re_export_a_default_1195": "Mit \"export *\" wird ein Standardwert nicht erneut exportiert.",
@@ -1466,17 +1735,26 @@
   "extends_clause_of_exported_class_0_has_or_is_using_private_name_1_4020": "Die \"extends\"-Klausel der exportierten Klasse \"{0}\" besitzt oder verwendet den privaten Namen \"{1}\".",
   "extends_clause_of_exported_class_has_or_is_using_private_name_0_4021": "Die extends-Klausel der exportierten Klasse besitzt oder verwendet den privaten Namen \"{0}\".",
   "extends_clause_of_exported_interface_0_has_or_is_using_private_name_1_4022": "Die \"extends\"-Klausel der exportierten Schnittstelle \"{0}\" besitzt oder verwendet den privaten Namen \"{1}\".",
+  "false_unless_composite_is_set_6906": "'false', es sei denn 'composite' ist festgelegt",
+  "false_unless_strict_is_set_6905": "'false', es sei denn, 'strict' ist festgelegt",
   "file_6025": "Datei",
+  "for_await_loops_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_file_1431": "\"for await\"-Schleifen sind nur auf der obersten Ebene einer Datei zulässig, wenn diese Datei ein Modul ist. Diese Datei enthält jedoch keinerlei Importe oder Exporte. Erwägen Sie das Hinzufügen eines leeren \"export {}\", um diese Datei als Modul zu definieren.",
+  "for_await_loops_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_1103": "\"for await\"-Schleifen sind nur innerhalb von asynchronen Funktionen und auf den obersten Modulebenen zulässig.",
   "get_and_set_accessor_must_have_the_same_this_type_2682": "Die get- und set-Accessoren müssen den gleichen this-Typ aufweisen.",
-  "get_and_set_accessor_must_have_the_same_type_2380": "Die get- und set-Zugriffsmethoden müssen den gleichen Typ aufweisen.",
   "get_and_set_accessors_cannot_declare_this_parameters_2784": "get- und set-Zugriffsmethoden können keine this-Parameter deklarieren.",
+  "if_files_is_specified_otherwise_Asterisk_Asterisk_Slash_Asterisk_6908": "'[]', wenn 'files' angegeben ist, andernfalls '[\"**/*\"]5D;'",
   "implements_clause_already_seen_1175": "Die implements-Klausel ist bereits vorhanden.",
   "implements_clauses_can_only_be_used_in_TypeScript_files_8005": "implements-Klauseln können nur in TypeScript-Dateien verwendet werden.",
   "import_can_only_be_used_in_TypeScript_files_8002": "\"import... =\" kann nur in TypeScript-Dateien verwendet werden.",
   "infer_declarations_are_only_permitted_in_the_extends_clause_of_a_conditional_type_1338": "infer-Deklarationen sind nur in der extends-Klausel eines bedingten Typs zulässig.",
   "let_declarations_can_only_be_declared_inside_a_block_1157": "let-Deklarationen können nur innerhalb eines Blocks deklariert werden.",
   "let_is_not_allowed_to_be_used_as_a_name_in_let_or_const_declarations_2480": "\"let\" darf nicht als Name in let- oder const-Deklarationen verwendet werden.",
+  "module_AMD_or_UMD_or_System_or_ES6_then_Classic_Otherwise_Node_69010": "Modul === 'AMD' oder 'UMD' oder 'System' oder 'ES6', dann 'Klassisch', andernfalls 'Knoten'",
+  "module_system_or_esModuleInterop_6904": "Modul === \"System\" oder esModuleInterop",
   "new_expression_whose_target_lacks_a_construct_signature_implicitly_has_an_any_type_7009": "Der new-Ausdruck, in dessen Ziel eine Konstruktsignatur fehlt, weist implizit einen Typ \"any\" auf.",
+  "node_modules_bower_components_jspm_packages_plus_the_value_of_outDir_if_one_is_specified_6907": "'[\"node_modules\",\"bower_components\",\"jspm_packages\"]', plus der Wert von 'outDir', wenn ein Wert angegeben ist.",
+  "one_of_Colon_6900": "eines von:",
+  "one_or_more_Colon_6901": "eins oder mehr:",
   "options_6024": "Optionen",
   "or_expected_1144": "\"{\" oder \";\" wurde erwartet.",
   "package_json_does_not_have_a_0_field_6100": "\"package.json\" besitzt kein \"{0}\"-Feld.",
@@ -1507,6 +1785,9 @@
   "this_cannot_be_referenced_in_constructor_arguments_2333": "Auf \"this\" kann nicht in Konstruktorargumenten verwiesen werden.",
   "this_cannot_be_referenced_in_current_location_2332": "Auf \"this\" kann am aktuellen Speicherort nicht verwiesen werden.",
   "this_implicitly_has_type_any_because_it_does_not_have_a_type_annotation_2683": "\"this\" weist implizit den Typ \"any\" auf, weil keine Typanmerkung vorhanden ist.",
+  "true_if_composite_false_otherwise_6909": "'true', wenn 'composite', andernfalls 'false'",
+  "tsc_Colon_The_TypeScript_Compiler_6922": "tsc: Der TypeScript-Compiler",
+  "type_Colon_6902": "Typ:",
   "unique_symbol_types_are_not_allowed_here_1335": "\"unique symbol\"-Typen sind hier nicht zulässig.",
   "unique_symbol_types_are_only_allowed_on_variables_in_a_variable_statement_1334": "\"unique symbol\"-Typen sind nur für Variablen in einer Variablenanweisung zulässig.",
   "unique_symbol_types_may_not_be_used_on_a_variable_declaration_with_a_binding_name_1333": "\"unique symbol\"-Typen dürfen für eine Variablendeklaration mit einem Bindungsnamen nicht verwendet werden.",
@@ -1514,5 +1795,6 @@
   "use_strict_directive_used_here_1349": "Die Direktive \"use strict\" wird hier verwendet.",
   "with_statements_are_not_allowed_in_an_async_function_block_1300": "with-Anweisungen sind in einem asynchronen Funktionsblock unzulässig.",
   "with_statements_are_not_allowed_in_strict_mode_1101": "this-Anweisungen sind im Strict-Modus unzulässig.",
+  "yield_expression_implicitly_results_in_an_any_type_because_its_containing_generator_lacks_a_return_t_7057": "Der Ausdruck \"yield\" führt implizit zu einem Typ \"any\", weil der enthaltende Generator keine Anmerkung vom Rückgabetyp umfasst.",
   "yield_expressions_cannot_be_used_in_a_parameter_initializer_2523": "yield-Ausdrücke dürfen nicht in einem Parameterinitialisierer verwendet werden."
 }
\ No newline at end of file
diff --git a/node_modules/typescript/lib/es/diagnosticMessages.generated.json b/node_modules/typescript/lib/es/diagnosticMessages.generated.json
index 3915265..155c78d 100644
--- a/node_modules/typescript/lib/es/diagnosticMessages.generated.json
+++ b/node_modules/typescript/lib/es/diagnosticMessages.generated.json
@@ -1,4 +1,5 @@
 {
+  "ALL_COMPILER_OPTIONS_6917": "TODAS LAS OPCIONES DEL COMPILADOR",
   "A_0_modifier_cannot_be_used_with_an_import_declaration_1079": "Un modificador '{0}' no se puede usar con una declaración de importación.",
   "A_0_modifier_cannot_be_used_with_an_interface_declaration_1045": "Un modificador '{0}' no se puede usar con una declaración de interfaz.",
   "A_0_parameter_must_be_the_first_parameter_2680": "El parámetro \"{0}\" debe ser el primer parámetro.",
@@ -15,7 +16,7 @@
   "A_class_member_cannot_have_the_0_keyword_1248": "Un miembro de clase no puede tener la palabra clave '{0}'.",
   "A_comma_expression_is_not_allowed_in_a_computed_property_name_1171": "No se admite una expresión de coma en un nombre de propiedad calculada.",
   "A_computed_property_name_cannot_reference_a_type_parameter_from_its_containing_type_2467": "Un nombre de propiedad calculada no puede hacer referencia a un parámetro de tipo desde su tipo contenedor.",
-  "A_computed_property_name_in_a_class_property_declaration_must_refer_to_an_expression_whose_type_is_a_1166": "Un nombre de propiedad calculada en una declaración de propiedad de clase debe hacer referencia a una expresión que sea de tipo literal o \"unique symbol\".",
+  "A_computed_property_name_in_a_class_property_declaration_must_have_a_simple_literal_type_or_a_unique_1166": "Un nombre de propiedad calculada de una declaración de propiedad de clase debe tener un tipo de literal simple o un tipo \"unique symbol\".",
   "A_computed_property_name_in_a_method_overload_must_refer_to_an_expression_whose_type_is_a_literal_ty_1168": "Un nombre de propiedad calculada en una sobrecarga de método debe hacer referencia a una expresión que sea de tipo literal o \"unique symbol\".",
   "A_computed_property_name_in_a_type_literal_must_refer_to_an_expression_whose_type_is_a_literal_type__1170": "Un nombre de propiedad calculada en un literal de tipo debe hacer referencia a una expresión que sea de tipo literal o \"unique symbol\".",
   "A_computed_property_name_in_an_ambient_context_must_refer_to_an_expression_whose_type_is_a_literal_t_1165": "Un nombre de propiedad calculada en un contexto de ambiente debe hacer referencia a una expresión que sea de tipo literal o \"unique symbol\".",
@@ -33,24 +34,25 @@
   "A_decorator_can_only_decorate_a_method_implementation_not_an_overload_1249": "Un decorador solo puede modificar la implementación de un método, no una sobrecarga.",
   "A_default_clause_cannot_appear_more_than_once_in_a_switch_statement_1113": "Una cláusula \"default\" no puede aparecer más de una vez en una instrucción \"switch\".",
   "A_default_export_can_only_be_used_in_an_ECMAScript_style_module_1319": "Solo se puede usar una exportación predeterminada en un módulo de estilo ECMAScript.",
+  "A_default_export_must_be_at_the_top_level_of_a_file_or_module_declaration_1258": "Una exportación predeterminada debe estar en el nivel superior de una declaración de módulo o archivo.",
   "A_definite_assignment_assertion_is_not_permitted_in_this_context_1255": "En este contexto no se permite una aserción de asignación definitiva \"!\".",
   "A_destructuring_declaration_must_have_an_initializer_1182": "Una declaración de desestructuración debe tener un inicializador.",
-  "A_dynamic_import_call_in_ES5_SlashES3_requires_the_Promise_constructor_Make_sure_you_have_a_declarat_2712": "Una llamada de importación dinámica en ES5/ES3 requiere el constructor \"Promise\". Asegúrese de que tiene una declaración para el constructor \"Promise\" o incluya \"ES2015\" en su opción \"--lib\".",
-  "A_dynamic_import_call_returns_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_include_ES20_2711": "Una llamada de importación dinámica devuelven un valor \"Promise\". Asegúrese de que hay una declaración para \"Promise\" o incluya \"ES2015\" en la opción \"--lib\".",
+  "A_dynamic_import_call_in_ES5_SlashES3_requires_the_Promise_constructor_Make_sure_you_have_a_declarat_2712": "Una llamada de importación dinámica en ES5/ES3 requiere el constructor \"Promise\".  Asegúrese de que tiene una declaración para el constructor \"Promise\" o incluya \"ES2015\" en su opción \"--lib\".",
+  "A_dynamic_import_call_returns_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_include_ES20_2711": "Una llamada de importación dinámica devuelve un valor \"Promise\". Asegúrese de que tiene una declaración para \"Promise\" o incluya \"ES2015\" en la opción \"--lib\".",
   "A_file_cannot_have_a_reference_to_itself_1006": "Un archivo no puede tener una referencia a sí mismo.",
-  "A_for_await_of_statement_is_only_allowed_within_an_async_function_or_async_generator_1103": "Solo se permite una instrucción \"for-await-of\" en una función o un generador de asincronía.",
   "A_function_returning_never_cannot_have_a_reachable_end_point_2534": "Una función que devuelve 'never' no puede tener un punto de conexión alcanzable.",
   "A_function_that_is_called_with_the_new_keyword_cannot_have_a_this_type_that_is_void_2679": "Una función a la que se llama con la palabra clave 'new' no puede tener un tipo 'this' que sea 'void'.",
   "A_function_whose_declared_type_is_neither_void_nor_any_must_return_a_value_2355": "Una función cuyo tipo declarado no es \"void\" o \"any\" debe devolver un valor.",
   "A_generator_cannot_have_a_void_type_annotation_2505": "Un generador no puede tener una anotación de tipo \"void\".",
   "A_get_accessor_cannot_have_parameters_1054": "Un descriptor de acceso \"get\" no puede tener parámetros.",
+  "A_get_accessor_must_be_at_least_as_accessible_as_the_setter_2808": "Un descriptor de acceso get debe ser al menos tan accesible como el establecedor",
   "A_get_accessor_must_return_a_value_2378": "Un descriptor de acceso \"get\" debe devolver un valor.",
   "A_label_is_not_allowed_here_1344": "No se permite una etiqueta aquí.",
   "A_labeled_tuple_element_is_declared_as_optional_with_a_question_mark_after_the_name_and_before_the_c_5086": "Un elemento de tupla etiquetado se declara como opcional con un signo de interrogación después del nombre y antes de los dos puntos, en lugar de después del tipo.",
-  "A_labeled_tuple_element_is_declared_as_rest_with_a_before_the_name_rather_than_before_the_type_5087": "Un elemento de tupla etiquetado se declara como REST con \"...\" delante del nombre, en lugar de delante del tipo.",
+  "A_labeled_tuple_element_is_declared_as_rest_with_a_before_the_name_rather_than_before_the_type_5087": "Un elemento de tupla etiquetado se declara como rest con \"...\" delante del nombre, en lugar de delante del tipo.",
   "A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_memb_2651": "Un inicializador de miembro de una declaración de enumeración no puede hacer referencia a los miembros que se declaran después de este, incluidos aquellos definidos en otras enumeraciones.",
-  "A_method_cannot_be_named_with_a_private_identifier_18022": "No se puede denominar un método con un identificador privado.",
   "A_mixin_class_must_have_a_constructor_with_a_single_rest_parameter_of_type_any_2545": "Una clase mixin debe tener un constructor con un solo parámetro rest de tipo \"any[]\"",
+  "A_mixin_class_that_extends_from_a_type_variable_containing_an_abstract_construct_signature_must_also_2797": "Una clase mixin que se extiende desde una variable de tipo que contiene una signatura de construcción abstracta debe declararse también como \"abstract\".",
   "A_module_cannot_have_multiple_default_exports_2528": "Un módulo no puede tener varias exportaciones predeterminadas.",
   "A_namespace_declaration_cannot_be_in_a_different_file_from_a_class_or_function_with_which_it_is_merg_2433": "Una declaración de espacio de nombres no puede estar en un archivo distinto de una clase o función con la que se combina.",
   "A_namespace_declaration_cannot_be_located_prior_to_a_class_or_function_with_which_it_is_merged_2434": "Una declaración de espacio de nombres no se puede situar antes que una clase o función con la que se combina.",
@@ -71,10 +73,10 @@
   "A_required_element_cannot_follow_an_optional_element_1257": "Un elemento obligatorio no puede seguir a un elemento opcional.",
   "A_required_parameter_cannot_follow_an_optional_parameter_1016": "Un parámetro obligatorio no puede seguir a un parámetro opcional.",
   "A_rest_element_cannot_contain_a_binding_pattern_2501": "Un elemento rest no puede contener un patrón de enlace.",
+  "A_rest_element_cannot_follow_another_rest_element_1265": "Un elemento rest no puede seguir a otro elemento rest.",
   "A_rest_element_cannot_have_a_property_name_2566": "Un elemento rest no puede tener un nombre de propiedad.",
   "A_rest_element_cannot_have_an_initializer_1186": "Un elemento rest no puede tener un inicializador.",
   "A_rest_element_must_be_last_in_a_destructuring_pattern_2462": "Un elemento rest debe ser el último en un patrón de desestructuración.",
-  "A_rest_element_must_be_last_in_a_tuple_type_1256": "Un elemento rest debe ser el último en un tipo de tupla.",
   "A_rest_element_type_must_be_an_array_type_2574": "Un tipo de elemento rest debe ser un tipo de matriz.",
   "A_rest_parameter_cannot_be_optional_1047": "Un parámetro rest no puede ser opcional.",
   "A_rest_parameter_cannot_have_an_initializer_1048": "Un parámetro rest no puede tener un inicializador.",
@@ -82,6 +84,7 @@
   "A_rest_parameter_must_be_of_an_array_type_2370": "Un parámetro rest debe ser de un tipo de matriz.",
   "A_rest_parameter_or_binding_pattern_may_not_have_a_trailing_comma_1013": "Un parámetro rest o un patrón de enlace no pueden finalizar con una coma.",
   "A_return_statement_can_only_be_used_within_a_function_body_1108": "Una instrucción \"return\" solo se puede usar en el cuerpo de una función.",
+  "A_return_statement_cannot_be_used_inside_a_class_static_block_18041": "Una instrucción 'return' no se puede usar dentro de un bloque estático de clase.",
   "A_series_of_entries_which_re_map_imports_to_lookup_locations_relative_to_the_baseUrl_6167": "Serie de entradas que reasigna las importaciones a ubicaciones de búsqueda relativas a \"baseUrl\".",
   "A_set_accessor_cannot_have_a_return_type_annotation_1095": "Un descriptor de acceso \"set\" no puede tener una anotación de tipo de valor devuelto.",
   "A_set_accessor_cannot_have_an_optional_parameter_1051": "Un descriptor de acceso \"set\" no puede tener un parámetro opcional.",
@@ -89,6 +92,7 @@
   "A_set_accessor_must_have_exactly_one_parameter_1049": "Un descriptor de acceso \"set\" debe tener exactamente un parámetro.",
   "A_set_accessor_parameter_cannot_have_an_initializer_1052": "Un parámetro de descriptor de acceso \"set\" no puede tener un inicializador.",
   "A_signature_with_an_implementation_cannot_use_a_string_literal_type_2381": "Una signatura con una implementación no puede usar un tipo de literal de cadena.",
+  "A_spread_argument_must_either_have_a_tuple_type_or_be_passed_to_a_rest_parameter_2556": "Un argumento de difusión debe tener un tipo de tupla o se puede pasar a un parámetro \"rest\".",
   "A_super_call_must_be_the_first_statement_in_the_constructor_when_a_class_contains_initialized_proper_2376": "Una llamada a \"super\" debe ser la primera instrucción del constructor cuando una clase contiene propiedades inicializadas, propiedades de parámetro o identificadores privados.",
   "A_this_based_type_guard_is_not_compatible_with_a_parameter_based_type_guard_2518": "Una restricción de tipo basada en 'this' no es compatible con una restricción de tipo basada en un parámetro.",
   "A_this_type_is_available_only_in_a_non_static_member_of_a_class_or_interface_2526": "El tipo \"this\" solo está disponible en un miembro no estático de una clase o interfaz.",
@@ -114,8 +118,11 @@
   "Add_a_return_statement_95111": "Agregar una instrucción \"return\"",
   "Add_all_missing_async_modifiers_95041": "Agregar todos los modificadores \"async\" que faltan",
   "Add_all_missing_call_parentheses_95068": "Agregar todos los paréntesis de llamada que faltan",
+  "Add_all_missing_function_declarations_95157": "Agregar todas las declaraciones de función que faltan",
   "Add_all_missing_imports_95064": "Agregar todas las importaciones que faltan",
   "Add_all_missing_members_95022": "Agregar todos los miembros que faltan",
+  "Add_all_missing_override_modifiers_95162": "Agregar todos los modificadores \"override\" que faltan",
+  "Add_all_missing_properties_95166": "Agregar todas las propiedades que faltan",
   "Add_all_missing_return_statement_95114": "Agregar todas las instrucciones \"return\" que faltan",
   "Add_all_missing_super_calls_95039": "Agregar todas las llamadas a super que faltan",
   "Add_async_modifier_to_containing_function_90029": "Agregar el modificador async a la función contenedora",
@@ -135,18 +142,22 @@
   "Add_initializers_to_all_uninitialized_properties_95027": "Agregar inicializadores a todas las propiedades sin inicializar",
   "Add_missing_call_parentheses_95067": "Agregar los paréntesis de llamada que faltan",
   "Add_missing_enum_member_0_95063": "Agregar el miembro de enumeración \"{0}\" que falta",
+  "Add_missing_function_declaration_0_95156": "Agregar la declaración de función \"{0}\" que falta",
   "Add_missing_new_operator_to_all_calls_95072": "Agregar el operador \"new\" que falta a todas las llamadas",
   "Add_missing_new_operator_to_call_95071": "Agregar el operador \"new\" que falta a la llamada",
+  "Add_missing_properties_95165": "Agregar propiedades que faltan",
   "Add_missing_super_call_90001": "Agregar la llamada a \"super()\" que falta",
   "Add_missing_typeof_95052": "Agregar el elemento \"typeof\" que falta",
   "Add_names_to_all_parameters_without_names_95073": "Agregar nombres a todos los parámetros sin nombres",
   "Add_or_remove_braces_in_an_arrow_function_95058": "Agregar o quitar llaves en una función de flecha",
+  "Add_override_modifier_95160": "Agregar el modificador \"override\"",
   "Add_parameter_name_90034": "Agregar un nombre de parámetro",
   "Add_qualifier_to_all_unresolved_variables_matching_a_member_name_95037": "Agregar un calificador a todas las variables no resueltas que coincidan con un nombre de miembro",
   "Add_this_parameter_95104": "Agregue el parámetro \"this\".",
   "Add_this_tag_95103": "Agregar la etiqueta \"@this\"",
   "Add_to_all_uncalled_decorators_95044": "Agregar \"()\" a todos los elementos Decorator a los que no se llama",
   "Add_ts_ignore_to_all_error_messages_95042": "Agregar \"@ts-ignore\" a todos los mensajes de error",
+  "Add_undefined_to_a_type_when_accessed_using_an_index_6674": "Agregue \"undefined\" a un tipo cuando se accede por un índice.",
   "Add_undefined_type_to_all_uninitialized_properties_95029": "Agregar un tipo no definido a todas las propiedades sin inicializar",
   "Add_undefined_type_to_property_0_95018": "Agregar un tipo \"undefined\" a la propiedad \"{0}\"",
   "Add_unknown_conversion_for_non_overlapping_types_95069": "Agregar una conversión \"unknown\" para los tipos que no se superponen",
@@ -154,8 +165,6 @@
   "Add_void_to_Promise_resolved_without_a_value_95143": "Agregar \"void\" a la instancia de Promise resuelta sin un valor",
   "Add_void_to_all_Promises_resolved_without_a_value_95144": "Agregar \"void\" a todas las instancias de Promise resueltas sin un valor",
   "Adding_a_tsconfig_json_file_will_help_organize_projects_that_contain_both_TypeScript_and_JavaScript__5068": "Agregar un archivo tsconfig.json ayuda a organizar los proyectos que contienen archivos TypeScript y JavaScript. Más información en https://aka.ms/tsconfig.",
-  "Additional_Checks_6176": "Comprobaciones adicionales",
-  "Advanced_Options_6178": "Opciones avanzadas",
   "All_declarations_of_0_must_have_identical_modifiers_2687": "Todas las declaraciones de '{0}' deben tener modificadores idénticos.",
   "All_declarations_of_0_must_have_identical_type_parameters_2428": "Todas las declaraciones de '{0}' deben tener parámetros de tipo idénticos.",
   "All_declarations_of_an_abstract_method_must_be_consecutive_2516": "Todas las declaraciones de un método abstracto deben ser consecutivas.",
@@ -163,34 +172,38 @@
   "All_imports_in_import_declaration_are_unused_6192": "Todas las importaciones de la declaración de importación están sin utilizar.",
   "All_type_parameters_are_unused_6205": "Ninguno de los parámetros de tipo se usa.",
   "All_variables_are_unused_6199": "Todas las variables son no utilizadas.",
-  "Allow_accessing_UMD_globals_from_modules_95076": "Permite el acceso a las bibliotecas globales de UMD desde los módulos.",
+  "Allow_JavaScript_files_to_be_a_part_of_your_program_Use_the_checkJS_option_to_get_errors_from_these__6600": "Permita que los archivos JavaScript formen parte del programa. Use la opción \"checkJS\" para obtener errores de estos archivos.",
+  "Allow_accessing_UMD_globals_from_modules_6602": "Permite el acceso a las bibliotecas globales de UMD desde los módulos.",
   "Allow_default_imports_from_modules_with_no_default_export_This_does_not_affect_code_emit_just_typech_6011": "Permitir las importaciones predeterminadas de los módulos sin exportación predeterminada. Esto no afecta a la emisión de código, solo a la comprobación de tipos.",
+  "Allow_import_x_from_y_when_a_module_doesn_t_have_a_default_export_6601": "Permita \"importar x desde y\" cuando un módulo no tiene una exportación predeterminada.",
+  "Allow_importing_helper_functions_from_tslib_once_per_project_instead_of_including_them_per_file_6639": "Permita la importación de funciones de ayuda desde tslib una vez por proyecto, en lugar de incluirlas por archivo.",
   "Allow_javascript_files_to_be_compiled_6102": "Permitir que se compilen los archivos de JavaScript.",
+  "Allow_multiple_folders_to_be_treated_as_one_when_resolving_modules_6691": "Permita que varias carpetas se consideren como una al resolver módulos.",
   "Already_included_file_name_0_differs_from_file_name_1_only_in_casing_1261": "El nombre de archivo \"{0}\" ya incluido es diferente del nombre de archivo \"{1}\" solo en el uso de mayúsculas y minúsculas.",
   "Ambient_module_declaration_cannot_specify_relative_module_name_2436": "La declaración de módulo de ambiente no puede especificar un nombre de módulo relativo.",
   "Ambient_modules_cannot_be_nested_in_other_modules_or_namespaces_2435": "Los módulos de ambiente no se pueden anidar en otros módulos o espacios de nombres.",
   "An_AMD_module_cannot_have_multiple_name_assignments_2458": "Un módulo AMD no puede tener varias asignaciones de nombre.",
   "An_abstract_accessor_cannot_have_an_implementation_1318": "Un descriptor de acceso abstracto no puede tener una implementación.",
   "An_accessibility_modifier_cannot_be_used_with_a_private_identifier_18010": "No se puede usar un modificador de accesibilidad con un identificador privado.",
-  "An_accessor_cannot_be_named_with_a_private_identifier_18023": "No se puede denominar un descriptor de acceso con un identificador privado.",
   "An_accessor_cannot_have_type_parameters_1094": "Un descriptor de acceso no puede tener parámetros de tipo.",
   "An_ambient_module_declaration_is_only_allowed_at_the_top_level_in_a_file_1234": "Una declaración de módulo de ambiente solo se permite en el nivel superior de un archivo.",
   "An_argument_for_0_was_not_provided_6210": "No se proporcionó ningún argumento para \"{0}\".",
   "An_argument_matching_this_binding_pattern_was_not_provided_6211": "No se proporcionó ningún argumento que coincida con este patrón de enlace.",
   "An_arithmetic_operand_must_be_of_type_any_number_bigint_or_an_enum_type_2356": "Un operando aritmético debe ser de tipo \"any\", \"number\", \"bigint\" o un tipo de enumeración.",
   "An_arrow_function_cannot_have_a_this_parameter_2730": "Una función de flecha no puede tener un parámetro \"this\".",
-  "An_async_function_or_method_in_ES5_SlashES3_requires_the_Promise_constructor_Make_sure_you_have_a_de_2705": "Una función o un método de asincronía en ES5/ES3 requiere el constructor \"Promise\". Asegúrese de que tiene una declaración para el constructor \"Promise\" o incluya \"ES2015\" en su opción \"--lib\".",
+  "An_async_function_or_method_in_ES5_SlashES3_requires_the_Promise_constructor_Make_sure_you_have_a_de_2705": "Una función o un método de asincronía en ES5/ES3 requiere el constructor \"Promise\".  Asegúrese de que tiene una declaración para el constructor \"Promise\" o incluya \"ES2015\" en su opción \"--lib\".",
   "An_async_function_or_method_must_have_a_valid_awaitable_return_type_1057": "Una función o un método asincrónico deben tener un tipo de valor devuelto válido que admita await.",
-  "An_async_function_or_method_must_return_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_in_2697": "Una función o un método asincrónicos deben devolver una \"promesa\". Asegúrese de que hay una declaración de \"promesa\" o incluya \"ES2015\" en la opción \"--lib\".",
+  "An_async_function_or_method_must_return_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_in_2697": "Una función o un método asincrónico debe devolver un \"Promise\". Asegúrese de que tiene una declaración \"Promise\" o incluya \"ES2015\" en la opción \"--lib\".",
   "An_async_iterator_must_have_a_next_method_2519": "Un iterador de asincronía debe tener un método \"next()\".",
   "An_element_access_expression_should_take_an_argument_1011": "Una expresión de acceso de elemento debe admitir un argumento.",
   "An_enum_member_cannot_be_named_with_a_private_identifier_18024": "No se puede denominar un miembro de enumeración con un identificador privado.",
   "An_enum_member_cannot_have_a_numeric_name_2452": "Un miembro de enumeración no puede tener un nombre numérico.",
   "An_enum_member_name_must_be_followed_by_a_or_1357": "El nombre de un miembro de enumeración debe ir seguido de \",\", \"=\" o \"}\".",
-  "An_export_assignment_can_only_be_used_in_a_module_1231": "Una asignación de exportación solo se puede usar en un módulo.",
+  "An_expanded_version_of_this_information_showing_all_possible_compiler_options_6928": "Una versión expandida de esta información, que muestra todas las opciones posibles del compilador",
   "An_export_assignment_cannot_be_used_in_a_module_with_other_exported_elements_2309": "Una asignación de exportación no se puede usar en un módulo con otros elementos exportados.",
   "An_export_assignment_cannot_be_used_in_a_namespace_1063": "Una asignación de exportación no se puede usar en espacios de nombres.",
   "An_export_assignment_cannot_have_modifiers_1120": "Una asignación de exportación no puede tener modificadores.",
+  "An_export_assignment_must_be_at_the_top_level_of_a_file_or_module_declaration_1231": "Una asignación de exportación debe estar en el nivel superior de una declaración de módulo o archivo.",
   "An_export_declaration_can_only_be_used_in_a_module_1233": "Una declaración de exportación solo se puede usar en un módulo.",
   "An_export_declaration_cannot_have_modifiers_1193": "Una declaración de exportación no puede tener modificadores.",
   "An_expression_of_type_void_cannot_be_tested_for_truthiness_1345": "No se puede probar la veracidad de una expresión de tipo \"void\".",
@@ -212,9 +225,8 @@
   "An_index_signature_parameter_cannot_have_an_accessibility_modifier_1018": "Un parámetro de signatura de índice no puede tener un modificador de accesibilidad.",
   "An_index_signature_parameter_cannot_have_an_initializer_1020": "Un parámetro de signatura de índice no puede tener un inicializador.",
   "An_index_signature_parameter_must_have_a_type_annotation_1022": "Un parámetro de signatura de índice debe tener una anotación de tipo.",
-  "An_index_signature_parameter_type_cannot_be_a_type_alias_Consider_writing_0_Colon_1_Colon_2_instead_1336": "Un tipo de parámetro de firma de índice no puede ser un alias de tipo. Considere la posibilidad de escribir en su lugar \"[{0}: {1}]: {2}\".",
-  "An_index_signature_parameter_type_cannot_be_a_union_type_Consider_using_a_mapped_object_type_instead_1337": "Un tipo de parámetro de firma de índice no puede ser un tipo de unión. Considere la posibilidad de usar en su lugar un tipo de objeto asignado.",
-  "An_index_signature_parameter_type_must_be_either_string_or_number_1023": "El tipo de un parámetro de signatura de índice debe ser \"string\" o \"number\".",
+  "An_index_signature_parameter_type_cannot_be_a_literal_type_or_generic_type_Consider_using_a_mapped_o_1337": "Un tipo de parámetro de signatura de índice no puede ser un tipo literal o un tipo genérico. Considere la posibilidad de usar, en su lugar, uno de los tipos de objeto asignados.",
+  "An_index_signature_parameter_type_must_be_string_number_symbol_or_a_template_literal_type_1268": "El tipo de parámetro de la signatura de índice debe ser \"string\", \"number\", \"symbol\" o un tipo literal de plantilla.",
   "An_interface_can_only_extend_an_identifier_Slashqualified_name_with_optional_type_arguments_2499": "Una interfaz solo puede extender un identificador o nombre completo con argumentos de tipo opcional.",
   "An_interface_can_only_extend_an_object_type_or_intersection_of_object_types_with_statically_known_me_2312": "Una interfaz solo puede extender un tipo de objeto o una intersección de tipos de objeto con miembros conocidos estáticamente.",
   "An_interface_property_cannot_have_an_initializer_1246": "Una propiedad de interfaz no puede tener un inicializador.",
@@ -225,6 +237,7 @@
   "An_object_literal_cannot_have_property_and_accessor_with_the_same_name_1119": "Un literal de objeto no puede tener una propiedad y un descriptor de acceso con el mismo nombre.",
   "An_object_member_cannot_be_declared_optional_1162": "Un miembro de objeto no se puede declarar como opcional.",
   "An_optional_chain_cannot_contain_private_identifiers_18030": "Una cadena opcional no puede contener identificadores privados.",
+  "An_optional_element_cannot_follow_a_rest_element_1266": "Un elemento opcional no puede seguir a un elemento rest.",
   "An_outer_value_of_this_is_shadowed_by_this_container_2738": "Este contenedor reemplaza un valor externo de \"this\".",
   "An_overload_signature_cannot_be_declared_as_a_generator_1222": "Una signatura de sobrecarga no se puede declarar como generador.",
   "An_unary_expression_with_the_0_operator_is_not_allowed_in_the_left_hand_side_of_an_exponentiation_ex_17006": "No se admite una expresión unaria con el operador '{0}' en el lado izquierdo de una expresión de exponenciación. Considere la posibilidad de incluir la expresión entre paréntesis.",
@@ -244,33 +257,47 @@
   "Augmentations_for_the_global_scope_can_only_be_directly_nested_in_external_modules_or_ambient_module_2669": "Los aumentos del ámbito global solo pueden anidarse directamente en módulos externos o en declaraciones de módulos de ambiente.",
   "Augmentations_for_the_global_scope_should_have_declare_modifier_unless_they_appear_in_already_ambien_2670": "Los aumentos del ámbito global deben tener el modificador 'declare', a menos que aparezcan en un contexto de ambiente.",
   "Auto_discovery_for_typings_is_enabled_in_project_0_Running_extra_resolution_pass_for_module_1_using__6140": "La detección automática de escritura está habilitada en el proyecto '{0}'. Se va a ejecutar un paso de resolución extra para el módulo '{1}' usando la ubicación de caché '{2}'.",
+  "Await_expression_cannot_be_used_inside_a_class_static_block_18037": "La expresión Await no se puede usar dentro de un bloque estático de clase.",
+  "BUILD_OPTIONS_6919": "OPCIONES DE COMPILACIÓN",
+  "Backwards_Compatibility_6253": "Compatibilidad con versiones anteriores",
   "Base_class_expressions_cannot_reference_class_type_parameters_2562": "Las expresiones de clase base no pueden hacer referencia a parámetros de tipo de clase.",
   "Base_constructor_return_type_0_is_not_an_object_type_or_intersection_of_object_types_with_statically_2509": "El tipo de valor devuelto del constructor base \"{0}\" no es un tipo de objeto ni una intersección de tipos de objeto con miembros conocidos estáticamente.",
   "Base_constructors_must_all_have_the_same_return_type_2510": "Todos los constructores base deben tener el mismo tipo de valor devuelto.",
   "Base_directory_to_resolve_non_absolute_module_names_6083": "Directorio base para resolver nombres de módulos no absolutos.",
-  "Basic_Options_6172": "Opciones básicas",
   "BigInt_literals_are_not_available_when_targeting_lower_than_ES2020_2737": "Los literales BigInt no están disponibles cuando el destino es anterior a ES2020.",
   "Binary_digit_expected_1177": "Se esperaba un dígito binario.",
   "Binding_element_0_implicitly_has_an_1_type_7031": "El elemento de enlace '{0}' tiene un tipo '{1}' implícito.",
   "Block_scoped_variable_0_used_before_its_declaration_2448": "Variable con ámbito de bloque '{0}' usada antes de su declaración.",
-  "Build_all_projects_including_those_that_appear_to_be_up_to_date_6368": "Compilar todos los proyectos, incluidos los que aparecen actualizados",
+  "Build_a_composite_project_in_the_working_directory_6925": "Compile un proyecto compuesto en el directorio de trabajo.",
+  "Build_all_projects_including_those_that_appear_to_be_up_to_date_6636": "Compilar todos los proyectos, incluidos los que aparecen actualizados",
   "Build_one_or_more_projects_and_their_dependencies_if_out_of_date_6364": "Generar uno o varios proyectos y sus dependencias, si no están actualizados",
   "Build_option_0_requires_a_value_of_type_1_5073": "La opción de compilación \"{0}\" requiere un valor de tipo {1}.",
   "Building_project_0_6358": "Compilando el proyecto \"{0}\"...",
+  "COMMAND_LINE_FLAGS_6921": "MARCAS DE LÍNEA DE COMANDOS",
+  "COMMON_COMMANDS_6916": "COMANDOS COMUNES",
+  "COMMON_COMPILER_OPTIONS_6920": "OPCIONES COMUNES DEL COMPILADOR",
   "Call_decorator_expression_90028": "Llamar a la expresión decorador",
   "Call_signature_return_types_0_and_1_are_incompatible_2202": "Los tipos de valor devuelto de la signatura de llamada \"{0}\" y \"{1}\" son incompatibles.",
   "Call_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type_7020": "La signatura de llamada, que carece de una anotación de tipo de valor devuelto, tiene implícitamente un tipo de valor devuelto \"any\".",
   "Call_signatures_with_no_arguments_have_incompatible_return_types_0_and_1_2204": "Las signaturas de llamada sin argumentos tienen los tipos de valor devuelto \"{0}\" y \"{1}\" no compatibles.",
   "Call_target_does_not_contain_any_signatures_2346": "El destino de llamada no contiene signaturas.",
   "Can_only_convert_logical_AND_access_chains_95142": "Solo pueden convertirse las cadenas lógicas Y de acceso",
+  "Can_only_convert_named_export_95164": "Solo se pueden convertir exportaciones con nombre.",
   "Can_only_convert_property_with_modifier_95137": "Solo se puede convertir la propiedad con el modificador",
+  "Can_only_convert_string_concatenation_95154": "Solo puede convertirse la concatenación de cadenas",
   "Cannot_access_0_1_because_0_is_a_type_but_not_a_namespace_Did_you_mean_to_retrieve_the_type_of_the_p_2713": "No se puede acceder a \"{0}.{1}\" porque \"{0}\" es un tipo, no un espacio de nombres. ¿Su intención era recuperar el tipo de la propiedad \"{1}\" en \"{0}\" con \"{0}[\"{1}\"]\"?",
   "Cannot_access_ambient_const_enums_when_the_isolatedModules_flag_is_provided_2748": "No se puede acceder a las enumeraciones const de ambiente cuando se proporciona la marca \"--isolatedModules\".",
   "Cannot_assign_a_0_constructor_type_to_a_1_constructor_type_2672": "No se puede asignar un tipo de constructor '{0}' a un tipo de constructor '{1}'.",
   "Cannot_assign_an_abstract_constructor_type_to_a_non_abstract_constructor_type_2517": "No se puede asignar un tipo de constructor abstracto a uno no abstracto.",
+  "Cannot_assign_to_0_because_it_is_a_class_2629": "No se puede asignar a \"{0}\" porque es una clase.",
   "Cannot_assign_to_0_because_it_is_a_constant_2588": "No se puede asignar a \"{0}\" porque es una constante.",
+  "Cannot_assign_to_0_because_it_is_a_function_2630": "No se puede asignar a \"{0}\" porque es una función.",
+  "Cannot_assign_to_0_because_it_is_a_namespace_2631": "No se puede asignar a \"{0}\" porque es un espacio de nombres.",
   "Cannot_assign_to_0_because_it_is_a_read_only_property_2540": "No se puede asignar a \"{0}\" porque es una propiedad de solo lectura.",
+  "Cannot_assign_to_0_because_it_is_an_enum_2628": "No se puede asignar a '{0}' porque es una enumeración.",
+  "Cannot_assign_to_0_because_it_is_an_import_2632": "No se puede asignar a '{0}' porque es una importación.",
   "Cannot_assign_to_0_because_it_is_not_a_variable_2539": "No se puede asignar a '{0}' porque no es una variable.",
+  "Cannot_assign_to_private_method_0_Private_methods_are_not_writable_2803": "No se puede asignar al método privado \"{0}\". No se puede escribir en los métodos privados.",
   "Cannot_augment_module_0_because_it_resolves_to_a_non_module_entity_2671": "No se puede aumentar el módulo '{0}' porque se resuelve como una entidad que no es un módulo.",
   "Cannot_augment_module_0_with_value_exports_because_it_resolves_to_a_non_module_entity_2649": "No se puede aumentar el módulo \"{0}\" con exportaciones de valores porque se resuelve como una entidad que no es un módulo.",
   "Cannot_compile_modules_using_option_0_unless_the_module_flag_is_amd_or_system_6131": "No se pueden compilar los módulos con la opción '{0}' a no ser que la marca \"--module\" sea \"amd\" o \"system\".",
@@ -295,7 +322,7 @@
   "Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_2583": "No se encuentra el nombre \"{0}\". ¿Necesita cambiar la biblioteca de destino? Pruebe a cambiar la opción del compilador \"lib\" a \"{1}\" o posterior.",
   "Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_2584": "No se encuentra el nombre \"{0}\". ¿Necesita cambiar la biblioteca de destino? Pruebe a cambiar la opción del compilador \"lib\" para incluir \"dom\".",
   "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_a_test_runner_Try_npm_i_save_dev_type_2582": "No se encuentra el nombre \"{0}\". ¿Necesita instalar definiciones de tipo para un ejecutor de pruebas? Pruebe \"npm i --save-dev @types/jest\" o \"npm i --save-dev @types/mocha\".",
-  "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_a_test_runner_Try_npm_i_save_dev_type_2593": "No se encuentra el nombre \"{0}\". ¿Necesita instalar definiciones de tipo para un ejecutor de pruebas? Pruebe \"npm i --save-dev @types/jest\" o \"npm i --save-dev @types/mocha\" y, a continuación, agregue \"jest\" o \"mocha\" al campo de tipos del archivo tsconfig.",
+  "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_a_test_runner_Try_npm_i_save_dev_type_2593": "No se encuentra el nombre \"{0}\". ¿Necesita instalar definiciones de tipo para un test runner? Pruebe \"npm i --save-dev @types/jest\" o \"npm i --save-dev @types/mocha\" y, a continuación, agregue \"jest\" o \"mocha\" al campo de tipos del archivo tsconfig.",
   "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_jQuery_Try_npm_i_save_dev_types_Slash_2581": "No se encuentra el nombre \"{0}\". ¿Necesita instalar definiciones de tipo para jQuery? Pruebe \"npm i --save-dev @types/jquery\".",
   "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_jQuery_Try_npm_i_save_dev_types_Slash_2592": "No se encuentra el nombre \"{0}\". ¿Necesita instalar definiciones de tipo para jQuery? Pruebe \"npm i --save-dev @types/jquery\" y, a continuación, agregue \"jquery\" al campo de tipos del archivo tsconfig.",
   "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_node_Try_npm_i_save_dev_types_Slashno_2580": "No se encuentra el nombre \"{0}\". ¿Necesita instalar definiciones de tipo para el nodo? Pruebe \"npm i --save-dev @types/node\".",
@@ -318,11 +345,13 @@
   "Cannot_redeclare_block_scoped_variable_0_2451": "No se puede volver a declarar la variable con ámbito de bloque '{0}'.",
   "Cannot_redeclare_exported_variable_0_2323": "No se puede volver a declarar la variable '{0}' exportada.",
   "Cannot_redeclare_identifier_0_in_catch_clause_2492": "No se puede volver a declarar el identificador \"{0}\" en la cláusula catch.",
+  "Cannot_start_a_function_call_in_a_type_annotation_1441": "No se puede iniciar una llamada de función en una anotación de tipo.",
   "Cannot_update_output_of_project_0_because_there_was_error_reading_file_1_6376": "No se puede actualizar la salida del proyecto \"{0}\" porque se produjo un error al leer el archivo \"{1}\".",
   "Cannot_use_JSX_unless_the_jsx_flag_is_provided_17004": "JSX no se puede usar si no se proporciona la marca \"--jsx\".",
   "Cannot_use_imports_exports_or_module_augmentations_when_module_is_none_1148": "No se pueden usar importaciones, exportaciones o aumentos de módulos si el valor de \"--module\" es \"none\".",
   "Cannot_use_namespace_0_as_a_type_2709": "No se puede utilizar el espacio de nombres '{0}' como un tipo.",
   "Cannot_use_namespace_0_as_a_value_2708": "No se puede utilizar el espacio de nombres '{0}' como un valor.",
+  "Cannot_use_this_in_a_static_property_initializer_of_a_decorated_class_2816": "No se puede usar 'this' en un inicializador de propiedad estática de una clase decorada.",
   "Cannot_write_file_0_because_it_will_overwrite_tsbuildinfo_file_generated_by_referenced_project_1_6377": "No se puede escribir en el archivo \"{0}\" porque este sobrescribirá el archivo \".tsbuildinfo\" que el proyecto \"{1}\" al que se hace referencia ha generado.",
   "Cannot_write_file_0_because_it_would_be_overwritten_by_multiple_input_files_5056": "No se puede escribir en el archivo '{0}' porque se sobrescribiría con varios archivos de entrada.",
   "Cannot_write_file_0_because_it_would_overwrite_input_file_5055": "No se puede escribir en el archivo '{0}' porque sobrescribiría el archivo de entrada.",
@@ -334,6 +363,8 @@
   "Change_all_jsdoc_style_types_to_TypeScript_and_add_undefined_to_nullable_types_95031": "Cambiar todos los tipos de jsdoc-style a TypeScript (y agregar \"| undefined\" a los tipos que aceptan valores NULL)",
   "Change_extends_to_implements_90003": "Cambiar \"extends\" a \"implements\"",
   "Change_spelling_to_0_90022": "Cambiar la ortografía a \"{0}\"",
+  "Check_for_class_properties_that_are_declared_but_not_set_in_the_constructor_6700": "Compruebe las propiedades de clase declaradas pero no establecidas en el constructor.",
+  "Check_that_the_arguments_for_bind_call_and_apply_methods_match_the_original_function_6697": "Compruebe que los argumentos para los métodos \"bind\", \"call\" y \"apply\" coinciden con la función original.",
   "Checking_if_0_is_the_longest_matching_prefix_for_1_2_6104": "Comprobando si '{0}' es el prefijo coincidente más largo para '{1}' - '{2}'.",
   "Circular_definition_of_import_alias_0_2303": "Definición circular del alias de importación '{0}'.",
   "Circularity_detected_while_resolving_configuration_Colon_0_18000": "Se detectó circularidad al resolver la configuración: {0}",
@@ -345,7 +376,9 @@
   "Class_0_incorrectly_implements_class_1_Did_you_mean_to_extend_1_and_inherit_its_members_as_a_subclas_2720": "La clase \"{0}\" no implementa correctamente la clase \"{1}\". ¿Pretendía extender \"{1}\" y heredar sus miembros como una subclase?",
   "Class_0_incorrectly_implements_interface_1_2420": "La clase '{0}' implementa la interfaz '{1}' de forma incorrecta.",
   "Class_0_used_before_its_declaration_2449": "Se ha usado la clase \"{0}\" antes de declararla.",
+  "Class_declaration_cannot_implement_overload_list_for_0_2813": "La declaración de clase no puede implementar la lista de sobrecarga para '{0}'.",
   "Class_declarations_cannot_have_more_than_one_augments_or_extends_tag_8025": "Las declaraciones de clase no pueden tener más de una etiqueta \"@augments\" o \"@extends\".",
+  "Class_decorators_can_t_be_used_with_static_private_identifier_Consider_removing_the_experimental_dec_18036": "Los elementos Decorator de una clase no se pueden usar con un identificador privado estático. Pruebe a quitar el elemento Decorator experimental.",
   "Class_name_cannot_be_0_2414": "El nombre de la clase no puede ser \"{0}\".",
   "Class_name_cannot_be_Object_when_targeting_ES5_with_module_0_2725": "El nombre de clase no puede ser \"Object\" cuando el destino es ES5 con un módulo {0}.",
   "Class_static_side_0_incorrectly_extends_base_class_static_side_1_2417": "El lado estático de la clase '{0}' extiende el lado estático de la clase base '{1}' de forma incorrecta.",
@@ -354,16 +387,25 @@
   "Classes_may_not_have_a_field_named_constructor_18006": "Las clases no pueden tener un campo denominado \"constructor\".",
   "Command_line_Options_6171": "Opciones de la línea de comandos",
   "Compile_the_project_given_the_path_to_its_configuration_file_or_to_a_folder_with_a_tsconfig_json_6020": "Compila el proyecto teniendo en cuenta la ruta de acceso a su archivo de configuración o a una carpeta con un archivo \"tsconfig.json\".",
+  "Compiler_Diagnostics_6251": "Diagnóstico del compilador",
   "Compiler_option_0_expects_an_argument_6044": "La opción '{0}' del compilador espera un argumento.",
+  "Compiler_option_0_may_not_be_used_with_build_5094": "La opción \"--{0}\" del compilador no se puede usar con \"--build\".",
+  "Compiler_option_0_may_only_be_used_with_build_5093": "La opción \"--{0}\" del compilador solo se puede usar con \"--build\".",
   "Compiler_option_0_requires_a_value_of_type_1_5024": "La opción '{0}' del compilador requiere un valor de tipo {1}.",
   "Compiler_reserves_name_0_when_emitting_private_identifier_downlevel_18027": "El compilador reserva el nombre \"{0}\" al emitir un identificador privado válido para versiones anteriores.",
+  "Compiles_the_TypeScript_project_located_at_the_specified_path_6927": "Compila el proyecto TypeScript ubicado en la ruta de acceso especificada.",
+  "Compiles_the_current_project_tsconfig_json_in_the_working_directory_6923": "Compila el proyecto actual (tsconfig.json en el directorio de trabajo).",
+  "Compiles_the_current_project_with_additional_settings_6929": "Compila el proyecto actual con opciones de configuración adicionales",
+  "Completeness_6257": "Integridad",
   "Composite_projects_may_not_disable_declaration_emit_6304": "Los proyectos compuestos no pueden deshabilitar la emisión de declaración.",
   "Composite_projects_may_not_disable_incremental_compilation_6379": "Los proyectos compuestos no pueden deshabilitar la compilación incremental.",
+  "Computed_from_the_list_of_input_files_6911": "Calculado a partir de la lista de archivos de entrada",
   "Computed_property_names_are_not_allowed_in_enums_1164": "No se permiten nombres de propiedad calculada en las enumeraciones.",
   "Computed_values_are_not_permitted_in_an_enum_with_string_valued_members_2553": "No se permiten valores calculados en una enumeración que tiene miembros con valores de cadena.",
   "Concatenate_and_emit_output_to_single_file_6001": "Concatenar y emitir la salida en un único archivo.",
   "Conflicting_definitions_for_0_found_at_1_and_2_Consider_installing_a_specific_version_of_this_librar_4090": "Se encontraron definiciones de '{0}' en conflicto en '{1}' y '{2}'. Puede instalar una versión específica de esta biblioteca para resolver el conflicto.",
   "Conflicts_are_in_this_file_6201": "Hay conflictos en este archivo.",
+  "Consider_adding_a_declare_modifier_to_this_class_6506": "Considere agregar un modificador 'declare' a esta clase.",
   "Construct_signature_return_types_0_and_1_are_incompatible_2203": "Los tipos de valor devuelto de la signatura de construcción \"{0}\" y \"{1}\" son incompatibles.",
   "Construct_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type_7013": "La signatura de construcción, que carece de una anotación de tipo de valor devuelto, tiene implícitamente un tipo de valor devuelto \"any\".",
   "Construct_signatures_with_no_arguments_have_incompatible_return_types_0_and_1_2205": "Las signaturas de construcción sin argumentos tienen los tipos de valor devuelto \"{0}\" y \"{1}\" no compatibles.",
@@ -413,16 +455,24 @@
   "Convert_to_type_only_export_1364": "Convertir en exportación solo de tipo",
   "Convert_to_type_only_import_1373": "Convertir en importación solo de tipo",
   "Corrupted_locale_file_0_6051": "Archivo de configuración regional {0} dañado.",
+  "Could_not_convert_to_anonymous_function_95153": "No se puede convertir a una función anónima",
+  "Could_not_convert_to_arrow_function_95151": "No se puede convertir a una función de flecha",
+  "Could_not_convert_to_named_function_95152": "No se puede convertir a una función con nombre",
+  "Could_not_determine_function_return_type_95150": "No se puede determinar el tipo de valor devuelto de la función",
   "Could_not_find_a_containing_arrow_function_95127": "No se pudo encontrar una función de flecha contenedora",
   "Could_not_find_a_declaration_file_for_module_0_1_implicitly_has_an_any_type_7016": "No se encontró ningún archivo de declaración para el módulo '{0}'. '{1}' tiene un tipo \"any\" de forma implícita.",
   "Could_not_find_convertible_access_expression_95140": "No se encontró la expresión de acceso convertible.",
   "Could_not_find_export_statement_95129": "No se pudo encontrar la instrucción export",
   "Could_not_find_import_clause_95131": "No se pudo encontrar la cláusula import",
   "Could_not_find_matching_access_expressions_95141": "No se encontraron expresiones de acceso coincidentes.",
+  "Could_not_find_name_0_Did_you_mean_1_2570": "No se ha encontrado el nombre \"{0}\". ¿Quiso decir \"{1}\"?",
   "Could_not_find_namespace_import_or_named_imports_95132": "No se pudo encontrar la importación del espacio de nombres ni las importaciones con nombre",
   "Could_not_find_property_for_which_to_generate_accessor_95135": "No se pudo encontrar la propiedad para la que se debe generar el descriptor de acceso",
   "Could_not_resolve_the_path_0_with_the_extensions_Colon_1_6231": "No se pudo resolver la ruta de acceso \"{0}\" con las extensiones: {1}.",
   "Could_not_write_file_0_Colon_1_5033": "No se puede escribir en el archivo \"{0}\": \"{1}\".",
+  "Create_source_map_files_for_emitted_JavaScript_files_6694": "Cree archivos de mapa de origen para los archivos JavaScript emitidos.",
+  "Create_sourcemaps_for_d_ts_files_6614": "Cree mapas de origen para archivos d.ts.",
+  "Creates_a_tsconfig_json_with_the_recommended_settings_in_the_working_directory_6926": "Crea un archivo tsconfig.json con la configuración recomendada en el directorio de trabajo.",
   "DIRECTORY_6038": "DIRECTORIO",
   "Declaration_augments_declaration_in_another_file_This_cannot_be_serialized_6232": "La declaración aumenta una declaración en otro archivo. Esta operación no se puede serializar.",
   "Declaration_emit_for_this_file_requires_using_private_name_0_An_explicit_type_annotation_may_unblock_9005": "La emisión de declaración para este archivo requiere el uso del nombre privado \"{0}\". Una anotación de tipo explícito puede desbloquear la emisión de declaración.",
@@ -430,6 +480,7 @@
   "Declaration_expected_1146": "Se esperaba una declaración.",
   "Declaration_name_conflicts_with_built_in_global_identifier_0_2397": "Conflictos entre nombres de declaración con el identificador global '{0}' integrado.",
   "Declaration_or_statement_expected_1128": "Se esperaba una declaración o una instrucción.",
+  "Declaration_or_statement_expected_This_follows_a_block_of_statements_so_if_you_intended_to_write_a_d_2809": "Se esperaba una declaración o una instrucción. El elemento \"=\" sigue a un bloque de instrucciones por lo que, si pretendía escribir una asignación de desestructuración, puede que sea necesario incluir toda la asignación entre paréntesis.",
   "Declarations_with_definite_assignment_assertions_must_also_have_type_annotations_1264": "Las declaraciones con aserciones de asignación definitiva deben tener también anotaciones de tipo.",
   "Declarations_with_initializers_cannot_also_have_definite_assignment_assertions_1263": "Las declaraciones con inicializadores no pueden tener también aserciones de asignación definitiva.",
   "Declare_a_private_field_named_0_90053": "Declare un campo privado denominado \"{0}\".",
@@ -441,7 +492,11 @@
   "Declare_static_property_0_90027": "Declarar la propiedad estática \"{0}\"",
   "Decorators_are_not_valid_here_1206": "Los elementos Decorator no son válidos aquí.",
   "Decorators_cannot_be_applied_to_multiple_get_Slashset_accessors_of_the_same_name_1207": "No se pueden aplicar elementos Decorator a varios descriptores de acceso get o set con el mismo nombre.",
+  "Decorators_may_not_be_applied_to_this_parameters_1433": "Los elementos Decorator no se pueden aplicar a los parámetros \"this\".",
+  "Decorators_must_precede_the_name_and_all_keywords_of_property_declarations_1436": "Los decoradores deben preceder al nombre y a todas las palabras clave de las declaraciones de propiedad.",
   "Default_export_of_the_module_has_or_is_using_private_name_0_4082": "La exportación predeterminada del módulo tiene o usa el nombre privado '{0}'.",
+  "Default_library_1424": "Biblioteca predeterminada",
+  "Default_library_for_target_0_1425": "Biblioteca predeterminada para el destino \"{0}\"",
   "Definitions_of_the_following_identifiers_conflict_with_those_in_another_file_Colon_0_6200": "Las definiciones de los identificadores siguientes entran en conflicto con las de otro archivo: {0}",
   "Delete_all_unused_declarations_95024": "Eliminar todas las declaraciones sin usar",
   "Delete_all_unused_imports_95147": "Eliminar todas las importaciones sin usar",
@@ -449,6 +504,7 @@
   "Deprecated_Use_jsxFactory_instead_Specify_the_object_invoked_for_createElement_when_targeting_react__6084": "[En desuso] Use \"--jsxFactory\" en su lugar. Especifique el objeto invocado para createElement cuando el destino sea la emisión de JSX \"react\"",
   "Deprecated_Use_outFile_instead_Concatenate_and_emit_output_to_single_file_6170": "[En desuso] Use \"--outFile\" en su lugar. Concatena y emite la salida en un solo archivo.",
   "Deprecated_Use_skipLibCheck_instead_Skip_type_checking_of_default_library_declaration_files_6160": "[En desuso] Use \"--skipLibCheck\" en su lugar. Omite la comprobación de tipos de los archivos de declaración de biblioteca predeterminados.",
+  "Deprecated_setting_Use_outFile_instead_6677": "Valor en desuso. Use \"outFile\" en su lugar.",
   "Did_you_forget_to_use_await_2773": "¿Olvidó usar \"await\"?",
   "Did_you_mean_0_1369": "¿Quiso decir \"{0}\"?",
   "Did_you_mean_for_0_to_be_constrained_to_type_new_args_Colon_any_1_2735": "¿Quiso decir que \"{0}\" se restrinja al tipo \"new (...args: any[]) => {1}\"?",
@@ -459,12 +515,30 @@
   "Did_you_mean_to_use_new_with_this_expression_6213": "¿Pretendía usar \"new\" con esta expresión?",
   "Digit_expected_1124": "Se esperaba un dígito.",
   "Directory_0_does_not_exist_skipping_all_lookups_in_it_6148": "El directorio \"{0}\" no existe, se omitirán todas las búsquedas en él.",
+  "Disable_adding_use_strict_directives_in_emitted_JavaScript_files_6669": "Deshabilite la adición de directivas \"use strict\" en archivos JavaScript emitidos.",
   "Disable_checking_for_this_file_90018": "Deshabilitar la comprobación para este archivo",
+  "Disable_emitting_comments_6688": "Deshabilite el poder escribir comentarios.",
+  "Disable_emitting_declarations_that_have_internal_in_their_JSDoc_comments_6701": "Deshabilite la emisión de declaraciones que tienen \"@internal\" en los comentarios de JSDoc.",
+  "Disable_emitting_file_from_a_compilation_6660": "Deshabilite la emisión de archivos de una compilación.",
+  "Disable_emitting_files_if_any_type_checking_errors_are_reported_6662": "Deshabilite la emisión de archivos si se informa algún error de comprobación de tipos.",
+  "Disable_erasing_const_enum_declarations_in_generated_code_6682": "Deshabilite el borrado de las declaraciones \"const enum\" en el código generado.",
+  "Disable_error_reporting_for_unreachable_code_6603": "Deshabilite los informes de errores para los códigos inaccesibles.",
+  "Disable_error_reporting_for_unused_labels_6604": "Deshabilite los informes de errores para etiquetas sin usar.",
+  "Disable_generating_custom_helper_functions_like_extends_in_compiled_output_6661": "Deshabilite la generación de funciones auxiliares personalizadas, como \"__extends\" en el resultado compilado.",
+  "Disable_including_any_library_files_including_the_default_lib_d_ts_6670": "Deshabilite la inclusión de cualquier archivo de biblioteca, incluido el archivo predeterminado lib.d.ts.",
   "Disable_loading_referenced_projects_6235": "Deshabilite la carga de proyectos a los que se hace referencia.",
+  "Disable_preferring_source_files_instead_of_declaration_files_when_referencing_composite_projects_6620": "Deshabilite la preferencia de archivos de código fuente en lugar de archivos de declaración cuando haga referencia a proyectos compuestos.",
+  "Disable_reporting_of_excess_property_errors_during_the_creation_of_object_literals_6702": "Deshabilite la creación de informes de errores de exceso de propiedad durante la creación de literales de objetos.",
+  "Disable_resolving_symlinks_to_their_realpath_This_correlates_to_the_same_flag_in_node_6683": "Deshabilite la resolución de symlink a su realpath. Se corresponde con la misma marca en el nodo.",
   "Disable_size_limitations_on_JavaScript_projects_6162": "Deshabilitar los límites de tamaño de proyectos de JavaScript.",
   "Disable_solution_searching_for_this_project_6224": "Deshabilite la búsqueda de la solución para este proyecto.",
-  "Disable_strict_checking_of_generic_signatures_in_function_types_6185": "Deshabilite la comprobación estricta de firmas genéricas en tipos de función.",
+  "Disable_strict_checking_of_generic_signatures_in_function_types_6673": "Deshabilite la comprobación estricta de firmas genéricas en tipos de función.",
+  "Disable_the_type_acquisition_for_JavaScript_projects_6625": "Deshabilitar el tipo de adquisición para proyectos de JavaScript",
+  "Disable_truncating_types_in_error_messages_6663": "Deshabilite los tipos truncados en los mensajes de error.",
   "Disable_use_of_source_files_instead_of_declaration_files_from_referenced_projects_6221": "Deshabilite el uso de los archivos de código fuente en lugar de los archivos de declaración de los proyectos a los que se hace referencia.",
+  "Disable_wiping_the_console_in_watch_mode_6684": "Deshabilitar la eliminación de datos de la consola en modo inspección",
+  "Disables_inference_for_type_acquisition_by_looking_at_filenames_in_a_project_6616": "Deshabilite la inferencia para la adquisición de tipos consultando los nombres de los archivos de un proyecto.",
+  "Disallow_import_s_require_s_or_reference_s_from_expanding_the_number_of_files_TypeScript_should_add__6672": "No permita que ningún \"import\", \"require\" o \"<reference>\" amplíe el número de archivos que TypeScript debe agregar a un proyecto.",
   "Disallow_inconsistently_cased_references_to_the_same_file_6078": "No permitir referencias al mismo archivo con un uso incoherente de mayúsculas y minúsculas.",
   "Do_not_add_triple_slash_references_or_imported_modules_to_the_list_of_compiled_files_6159": "No agregar módulos importados ni referencias con triple barra diagonal a la lista de archivos compilados.",
   "Do_not_emit_comments_to_output_6009": "No emitir comentarios en la salida.",
@@ -483,31 +557,48 @@
   "Duplicate_identifier_0_2300": "Identificador '{0}' duplicado.",
   "Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module_2441": "Identificador '{0}' duplicado. El compilador se reserva el nombre '{1}' en el ámbito de nivel superior de un módulo.",
   "Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module_containing_async_func_2529": "Identificador '{0}' duplicado. El compilador reserva el nombre '{1}' en el ámbito de nivel superior de un módulo que contiene funciones asincrónicas.",
+  "Duplicate_identifier_0_Compiler_reserves_name_1_when_emitting_super_references_in_static_initializer_2818": "Duplicar identificador \"{0}\". El compilador reserva el nombre \"{1}\" al emitir referencias \"super\" en inicializadores estáticos.",
   "Duplicate_identifier_0_Compiler_uses_declaration_1_to_support_async_functions_2520": "Identificador '{0}' duplicado. El compilador usa la declaración '{1}' para admitir funciones asincrónicas.",
+  "Duplicate_identifier_0_Static_and_instance_elements_cannot_share_the_same_private_name_2804": "El identificador \"{0}\" está duplicado. Los elementos estáticos y de instancia no pueden compartir el mismo nombre privado.",
   "Duplicate_identifier_arguments_Compiler_uses_arguments_to_initialize_rest_parameters_2396": "Identificador \"arguments\" duplicado. El compilador usa \"arguments\" para inicializar parámetros rest.",
   "Duplicate_identifier_newTarget_Compiler_uses_variable_declaration_newTarget_to_capture_new_target_me_2543": "Identificador duplicado \"_newTarget\". El compilador usa la declaración de variable \"_newTarget\" para capturar la referencia de la propiedad Meta \"new.target\".",
   "Duplicate_identifier_super_Compiler_uses_super_to_capture_base_class_reference_2401": "Identificador \"_super\" duplicado. El compilador usa \"_super\" para capturar una referencia de clase base.",
   "Duplicate_identifier_this_Compiler_uses_variable_declaration_this_to_capture_this_reference_2399": "Identificador \"_this\" duplicado. El compilador usa la declaración de variable \"_this\" para capturar una referencia \"this\".",
+  "Duplicate_index_signature_for_type_0_2374": "Signatura de índice duplicada para el tipo \"{0}\".",
   "Duplicate_label_0_1114": "Etiqueta \"{0}\" duplicada.",
-  "Duplicate_number_index_signature_2375": "Signatura de índice de número duplicada.",
   "Duplicate_property_0_2718": "Propiedad \"{0}\" duplicada.",
-  "Duplicate_string_index_signature_2374": "Signatura de índice de cadena duplicada.",
   "Dynamic_import_cannot_have_type_arguments_1326": "La importación dinámica no puede tener argumentos de tipo.",
   "Dynamic_import_must_have_one_specifier_as_an_argument_1324": "La importación dinámica debe tener un especificador como argumento.",
   "Dynamic_import_s_specifier_must_be_of_type_string_but_here_has_type_0_7036": "El especificador de la importación dinámica debe ser de tipo \"string\", pero aquí tiene el tipo \"{0}\".",
   "Dynamic_imports_are_only_supported_when_the_module_flag_is_set_to_es2020_esnext_commonjs_amd_system__1323": "Las importaciones dinámicas solo se admiten cuando la marca \"--module\" se establece en \"es2020\", \"esnext\", \"commonjs\", \"amd\", \"system\" o \"umd\".",
   "Each_member_of_the_union_type_0_has_construct_signatures_but_none_of_those_signatures_are_compatible_2762": "Cada miembro del tipo de unión \"{0}\" tiene signaturas de construcción, pero ninguna de ellas es compatible entre sí.",
   "Each_member_of_the_union_type_0_has_signatures_but_none_of_those_signatures_are_compatible_with_each_2758": "Cada miembro del tipo de unión \"{0}\" tiene signaturas, pero ninguna de ellas es compatible entre sí.",
-  "Element_at_index_0_is_variadic_in_one_type_but_not_in_the_other_2622": "El elemento en el índice {0} es variádico en un tipo, pero no en el otro.",
+  "Editor_Support_6249": "Compatibilidad con el editor",
   "Element_implicitly_has_an_any_type_because_expression_of_type_0_can_t_be_used_to_index_type_1_7053": "El elemento tiene un tipo \"any\" de forma implícita porque la expresión de tipo \"{0}\" no se puede usar para indexar el tipo \"{1}\".",
   "Element_implicitly_has_an_any_type_because_index_expression_is_not_of_type_number_7015": "El elemento tiene un tipo 'any' implícito porque la expresión de índice no es de tipo 'number'.",
   "Element_implicitly_has_an_any_type_because_type_0_has_no_index_signature_7017": "El elemento tiene un tipo \"any\" implícito porque el tipo '{0}' no tiene signatura de índice.",
   "Element_implicitly_has_an_any_type_because_type_0_has_no_index_signature_Did_you_mean_to_call_1_7052": "El elemento tiene un tipo \"any\" implícito porque el tipo \"{0}\" no tiene ninguna signatura de índice. ¿Pretendía llamar a \"{1}\"?",
-  "Emit_a_UTF_8_Byte_Order_Mark_BOM_in_the_beginning_of_output_files_6164": "Emitir una marca BOM UTF-8 al principio de los archivos de salida.",
+  "Emit_6246": "Emitir",
+  "Emit_ECMAScript_standard_compliant_class_fields_6712": "Emita campos de clases compatibles con el estándar de ECMAScript.",
+  "Emit_a_UTF_8_Byte_Order_Mark_BOM_in_the_beginning_of_output_files_6622": "Emitir una marca BOM UTF-8 al principio de los archivos de salida.",
   "Emit_a_single_file_with_source_maps_instead_of_having_a_separate_file_6151": "Emitir un solo archivo con mapas de origen en lugar de tener un archivo aparte.",
+  "Emit_a_v8_CPU_profile_of_the_compiler_run_for_debugging_6638": "Emita un perfil de CPU v8 de la ejecución del compilador para la depuración.",
+  "Emit_additional_JavaScript_to_ease_support_for_importing_CommonJS_modules_This_enables_allowSyntheti_6626": "Emita un JavaScript adicional para facilitar la importación de módulos CommonJS. Esto habilita \"allowSyntheticDefaultImports\" para la compatibilidad de tipos.",
   "Emit_class_fields_with_Define_instead_of_Set_6222": "Emita campos de clase con Define en lugar de Set.",
+  "Emit_design_type_metadata_for_decorated_declarations_in_source_files_6624": "Emita metadatos de tipo de diseño para las declaraciones decoradas en los archivos de origen.",
+  "Emit_more_compliant_but_verbose_and_less_performant_JavaScript_for_iteration_6621": "Emita un JavaScript más compatible, pero más detallado y de menor rendimiento para la iteración.",
   "Emit_the_source_alongside_the_sourcemaps_within_a_single_file_requires_inlineSourceMap_or_sourceMap__6152": "Emitir el origen junto a los mapas de origen en un solo archivo; requiere que se establezca \"--inlineSourceMap\" o \"--sourceMap\".",
   "Enable_all_strict_type_checking_options_6180": "Habilitar todas las opciones de comprobación de tipos estricta.",
+  "Enable_color_and_formatting_in_output_to_make_compiler_errors_easier_to_read_6685": "Habilitar el color y el formato en la salida para que los errores del compilador sean más fáciles de leer",
+  "Enable_constraints_that_allow_a_TypeScript_project_to_be_used_with_project_references_6611": "Habilite restricciones que permitan usar un proyecto TypeScript con referencias del proyecto.",
+  "Enable_error_reporting_for_codepaths_that_do_not_explicitly_return_in_a_function_6667": "Habilite el informe de errores para rutas de código que no devuelvan explícitamente una función.",
+  "Enable_error_reporting_for_expressions_and_declarations_with_an_implied_any_type_6665": "Habilite la generación de informes de error para las expresiones y las declaraciones con un tipo \"any\" implícito.",
+  "Enable_error_reporting_for_fallthrough_cases_in_switch_statements_6664": "Habilite los informes de errores para los casos de fallthrough en instrucciones switch.",
+  "Enable_error_reporting_in_type_checked_JavaScript_files_6609": "Habilite el informe de errores en los archivos JavaScript de comprobación de tipos.",
+  "Enable_error_reporting_when_a_local_variables_aren_t_read_6675": "Habilite el informe de errores cuando una variable local no se lea.",
+  "Enable_error_reporting_when_this_is_given_the_type_any_6668": "Habilite el informe de errores cuando el elemento \"this\" coincide con el tipo \"any\".",
+  "Enable_experimental_support_for_TC39_stage_2_draft_decorators_6630": "Habilite un soporte experimental para los elementos Decorator borradores de la fase 2 de TC39.",
+  "Enable_importing_json_files_6689": "Habilitar la importación de archivos .json",
   "Enable_incremental_compilation_6378": "Habilitar compilación incremental",
   "Enable_project_compilation_6302": "Habilitar la compilación de proyecto",
   "Enable_strict_bind_call_and_apply_methods_on_functions_6214": "Habilite los métodos estrictos \"bind\", \"call\" y \"apply\" en las funciones.",
@@ -517,11 +608,20 @@
   "Enable_the_experimentalDecorators_option_in_your_configuration_file_95074": "Habilite la opción \"experimentalDecorators\" en el archivo de configuración.",
   "Enable_the_jsx_flag_in_your_configuration_file_95088": "Habilite la marca \"--jsx\" en el archivo de configuración.",
   "Enable_tracing_of_the_name_resolution_process_6085": "Habilitar seguimiento del proceso de resolución de nombres.",
-  "Enable_verbose_logging_6366": "Habilitar el registro detallado",
+  "Enable_verbose_logging_6713": "Habilitar el registro detallado",
   "Enables_emit_interoperability_between_CommonJS_and_ES_Modules_via_creation_of_namespace_objects_for__7037": "Permite emitir interoperabilidad entre módulos CommonJS y ES mediante la creación de objetos de espacio de nombres para todas las importaciones. Implica \"allowSyntheticDefaultImports\".",
   "Enables_experimental_support_for_ES7_async_functions_6068": "Habilita la compatibilidad experimental con las funciones asincrónicas de ES7.",
   "Enables_experimental_support_for_ES7_decorators_6065": "Habilita la compatibilidad experimental con los elementos Decorator de ES7.",
   "Enables_experimental_support_for_emitting_type_metadata_for_decorators_6066": "Habilita la compatibilidad experimental para emitir metadatos de tipo para los elementos Decorator.",
+  "Enforces_using_indexed_accessors_for_keys_declared_using_an_indexed_type_6671": "Exige el uso de descriptores de acceso indexados para las claves declaradas con un tipo indexado.",
+  "Ensure_overriding_members_in_derived_classes_are_marked_with_an_override_modifier_6666": "Asegúrese de que al invalidar miembros en clases derivadas, estos están marcados con un modificador de invalidación.",
+  "Ensure_that_casing_is_correct_in_imports_6637": "Verifique el uso correcto de mayúsculas y minúsculas en las importaciones.",
+  "Ensure_that_each_file_can_be_safely_transpiled_without_relying_on_other_imports_6645": "Asegúrese de que cada archivo pueda transpilarse con seguridad sin depender de otras importaciones.",
+  "Ensure_use_strict_is_always_emitted_6605": "Asegúrese de que siempre se emite \"use strict\".",
+  "Entry_point_for_implicit_type_library_0_1420": "Punto de entrada para la biblioteca de tipos implícitos \"{0}\"",
+  "Entry_point_for_implicit_type_library_0_with_packageId_1_1421": "Punto de entrada para la biblioteca de tipos implícitos \"{0}\" con el valor packageId \"{1}\"",
+  "Entry_point_of_type_library_0_specified_in_compilerOptions_1417": "Punto de entrada de la biblioteca de tipos \"{0}\" que se especifica en compilerOptions",
+  "Entry_point_of_type_library_0_specified_in_compilerOptions_with_packageId_1_1418": "Punto de entrada de la biblioteca de tipos \"{0}\" que se especifica en compilerOptions con el valor packageId \"{1}\"",
   "Enum_0_used_before_its_declaration_2450": "Se ha usado la enumeración \"{0}\" antes de declararla.",
   "Enum_declarations_can_only_merge_with_namespace_or_other_enum_declarations_2567": "Las declaraciones de enumeración solo se pueden combinar con otras declaraciones de enumeración o de espacio de nombres.",
   "Enum_declarations_must_all_be_const_or_non_const_2473": "Todas las declaraciones de enumeración deben ser de tipo const o no const.",
@@ -535,15 +635,13 @@
   "Expected_0_1_type_arguments_provide_these_with_an_extends_tag_8027": "Se esperaban argumentos de tipo {0}-{1}; proporciónelos con una etiqueta \"@extends\".",
   "Expected_0_arguments_but_got_1_2554": "Se esperaban {0} argumentos, pero se obtuvieron {1}.",
   "Expected_0_arguments_but_got_1_Did_you_forget_to_include_void_in_your_type_argument_to_Promise_2794": "Se esperaban {0} argumentos, pero se obtuvo un total de {1}. ¿Olvidó incluir \"void\" en el argumento de tipo para \"Promise\"?",
-  "Expected_0_arguments_but_got_1_or_more_2556": "Se esperaban {0} argumentos, pero se obtuvieron {1} o más.",
   "Expected_0_type_arguments_but_got_1_2558": "Se esperaban {0} argumentos de tipo, pero se obtuvieron {1}.",
   "Expected_0_type_arguments_provide_these_with_an_extends_tag_8026": "Se esperaban argumentos de tipo {0}; proporciónelos con una etiqueta \"@extends\".",
   "Expected_at_least_0_arguments_but_got_1_2555": "Se esperaban al menos {0} argumentos, pero se obtuvieron {1}.",
-  "Expected_at_least_0_arguments_but_got_1_or_more_2557": "Se esperaban al menos {0} argumentos, pero se obtuvieron {1} o más.",
   "Expected_corresponding_JSX_closing_tag_for_0_17002": "Se esperaba la etiqueta de cierre JSX correspondiente de '{0}'.",
   "Expected_corresponding_closing_tag_for_JSX_fragment_17015": "Se esperaba la etiqueta de cierre correspondiente para el fragmento de JSX.",
+  "Expected_for_property_initializer_1442": "Se esperaba '=' para el inicializador de propiedades.",
   "Expected_type_of_0_field_in_package_json_to_be_1_got_2_6105": "Se esperaba que el tipo del campo \"{0}\" en \"package.json\" fuese \"{1}\", pero se obtuvo \"{2}\".",
-  "Experimental_Options_6177": "Opciones experimentales",
   "Experimental_support_for_decorators_is_a_feature_that_is_subject_to_change_in_a_future_release_Set_t_1219": "La compatibilidad experimental con los decoradores es una característica que está sujeta a cambios en una próxima versión. Establezca la opción \"experimentalDecorators\" en \"tsconfig\" o \"jsconfig\" para quitar esta advertencia.",
   "Explicitly_specified_module_resolution_kind_Colon_0_6087": "Tipo de resolución de módulo especificado de forma explícita: '{0}'.",
   "Exponentiation_cannot_be_performed_on_bigint_values_unless_the_target_option_is_set_to_es2016_or_lat_2791": "No se puede realizar la exponenciación en los valores \"bigint\", a menos que la opción \"target\" esté establecida en \"es2016\" o posterior.",
@@ -554,12 +652,14 @@
   "Exported_external_package_typings_file_0_is_not_a_module_Please_contact_the_package_author_to_update_2656": "El archivo '{0}' de escritura del paquete externo exportado no es un módulo. Póngase en contacto con el autor del paquete para actualizar la definición de este.",
   "Exported_external_package_typings_file_cannot_contain_tripleslash_references_Please_contact_the_pack_2654": "El archivo de escritura del paquete externo exportado no puede contener referencias con tres barras diagonales. Póngase en contacto con el autor del paquete para actualizar la definición de este.",
   "Exported_type_alias_0_has_or_is_using_private_name_1_4081": "El alias de tipo exportado '{0}' tiene o usa el nombre privado '{1}'.",
+  "Exported_type_alias_0_has_or_is_using_private_name_1_from_module_2_4084": "El alias de tipo exportado \"{0}\" tiene o usa el nombre privado \"{1}\" del módulo {2}.",
   "Exported_variable_0_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4023": "La variable exportada '{0}' tiene o usa el nombre '{1}' del módulo {2} externo, pero no se puede nombrar.",
   "Exported_variable_0_has_or_is_using_name_1_from_private_module_2_4024": "La variable exportada '{0}' tiene o usa el nombre '{1}' del módulo '{2}' privado.",
   "Exported_variable_0_has_or_is_using_private_name_1_4025": "La variable exportada '{0}' tiene o usa el nombre privado '{1}'.",
   "Exports_and_export_assignments_are_not_permitted_in_module_augmentations_2666": "En aumentos de módulos, no se admiten exportaciones ni asignaciones de exportación.",
   "Expression_expected_1109": "Se esperaba una expresión.",
   "Expression_or_comma_expected_1137": "Se esperaba una expresión o una coma.",
+  "Expression_produces_a_tuple_type_that_is_too_large_to_represent_2800": "La expresión genera un tipo de tupla demasiado grande para representarlo.",
   "Expression_produces_a_union_type_that_is_too_complex_to_represent_2590": "La expresión genera un tipo de unión demasiado complejo para representarlo.",
   "Expression_resolves_to_super_that_compiler_uses_to_capture_base_class_reference_2402": "La expresión se resuelve en el valor \"_super\" que el compilador usa para capturar una referencia a la clase base.",
   "Expression_resolves_to_variable_declaration_0_that_compiler_uses_to_support_async_functions_2521": "La expresión se resuelve en la declaración de variable '{0}' que el compilador usa para admitir funciones asincrónicas.",
@@ -579,7 +679,9 @@
   "Failed_to_parse_file_0_Colon_1_5014": "Error al analizar el archivo '{0}': {1}.",
   "Fallthrough_case_in_switch_7029": "Caso de Fallthrough en instrucción switch.",
   "File_0_does_not_exist_6096": "El archivo '{0}' no existe.",
+  "File_0_does_not_exist_according_to_earlier_cached_lookups_6240": "El archivo \"{0}\" no existe de acuerdo con las búsquedas en caché anteriores.",
   "File_0_exist_use_it_as_a_name_resolution_result_6097": "El archivo '{0}' existe. Utilícelo como resultado de resolución de nombres.",
+  "File_0_exists_according_to_earlier_cached_lookups_6239": "El archivo \"{0}\" existe de acuerdo con las búsquedas en caché anteriores.",
   "File_0_has_an_unsupported_extension_The_only_supported_extensions_are_1_6054": "El archivo \"{0}\" tiene una extensión no compatible. Las únicas extensiones compatibles son {1}.",
   "File_0_has_an_unsupported_extension_so_skipping_it_6081": "El archivo \"{0}\" tiene una extensión no admitida, así que se omitirá.",
   "File_0_is_a_JavaScript_file_Did_you_mean_to_enable_the_allowJs_option_6504": "\"{0}\" es un archivo JavaScript. ¿Pretendía habilitar la opción \"allowJs\"?",
@@ -587,16 +689,32 @@
   "File_0_is_not_listed_within_the_file_list_of_project_1_Projects_must_list_all_files_or_use_an_includ_6307": "El archivo \"{0}\" no está en la lista de archivos del proyecto \"{1}\". Los proyectos deben enumerar todos los archivos o usar un patrón \"include\".",
   "File_0_is_not_under_rootDir_1_rootDir_is_expected_to_contain_all_source_files_6059": "El archivo '{0}' no está en \"rootDir\" '{1}'. Se espera que \"rootDir\" contenga todos los archivos de origen.",
   "File_0_not_found_6053": "Archivo '{0}' no encontrado.",
+  "File_Management_6245": "Administración de archivos",
   "File_change_detected_Starting_incremental_compilation_6032": "Se detectó un cambio de archivo. Iniciando la compilación incremental...",
   "File_is_a_CommonJS_module_it_may_be_converted_to_an_ES6_module_80001": "El archivo es un módulo CommonJS; se puede convertir a un módulo ES6.",
+  "File_is_default_library_for_target_specified_here_1426": "El archivo es la biblioteca predeterminada para el destino que se especifica aquí.",
+  "File_is_entry_point_of_type_library_specified_here_1419": "El archivo es el punto de entrada de la biblioteca de tipos que se especifica aquí.",
+  "File_is_included_via_import_here_1399": "El archivo se incluye aquí a través de la importación.",
+  "File_is_included_via_library_reference_here_1406": "El archivo se incluye aquí a través de la referencia de la biblioteca.",
+  "File_is_included_via_reference_here_1401": "El archivo se incluye aquí a través de la referencia.",
+  "File_is_included_via_type_library_reference_here_1404": "El archivo se incluye aquí a través de la referencia de la biblioteca de tipos.",
+  "File_is_library_specified_here_1423": "El archivo es la biblioteca que se especifica aquí.",
+  "File_is_matched_by_files_list_specified_here_1410": "El archivo coincide con la lista de \"archivos\" que se especifica aquí.",
+  "File_is_matched_by_include_pattern_specified_here_1408": "El archivo coincide con el patrón de inclusión que se especifica aquí.",
+  "File_is_output_from_referenced_project_specified_here_1413": "El archivo es la salida del proyecto al que se hace referencia especificado aquí.",
+  "File_is_output_of_project_reference_source_0_1428": "El archivo es la salida del origen de referencia del proyecto \"{0}\".",
+  "File_is_source_from_referenced_project_specified_here_1416": "El archivo es el origen del proyecto al que se hace referencia especificado aquí.",
   "File_name_0_differs_from_already_included_file_name_1_only_in_casing_1149": "El nombre de archivo \"{0}\" es diferente del nombre de archivo \"{1}\" ya incluido solo en el uso de mayúsculas y minúsculas.",
   "File_name_0_has_a_1_extension_stripping_it_6132": "El nombre de archivo \"{0}\" tiene una extensión \"{1}\" y se va a quitar.",
+  "File_redirects_to_file_0_1429": "El archivo redirecciona al archivo \"{0}\".",
   "File_specification_cannot_contain_a_parent_directory_that_appears_after_a_recursive_directory_wildca_5065": "La especificación del archivo no puede contener un directorio primario ('..') que aparezca después de un comodín de directorios recursivo ('**'): '{0}'.",
   "File_specification_cannot_end_in_a_recursive_directory_wildcard_Asterisk_Asterisk_Colon_0_5010": "La especificación de archivo no puede finalizar en un comodín de directorio recursivo ('**'): '{0}'.",
+  "Filters_results_from_the_include_option_6627": "Filtre resultados de la opción \"include\".",
   "Fix_all_detected_spelling_errors_95026": "Corregir todos los errores ortográficos detectados",
   "Fix_all_expressions_possibly_missing_await_95085": "Corregir todas las expresiones en las que posiblemente falte \"await\"",
   "Fix_all_implicit_this_errors_95107": "Corregir todos los errores de \"this\" implícitos",
   "Fix_all_incorrect_return_type_of_an_async_functions_90037": "Corregir todos los tipos de valor devuelto incorrectos de las funciones asincrónicas",
+  "For_await_loops_cannot_be_used_inside_a_class_static_block_18038": "Los bucles 'For await' no se pueden usar dentro de un bloque estático de clase.",
   "Found_0_errors_6217": "Se encontró {0} errores.",
   "Found_0_errors_Watching_for_file_changes_6194": "Se encontraron {0} errores. Supervisando los cambios del archivo.",
   "Found_1_error_6216": "Se encontró 1 error.",
@@ -610,11 +728,14 @@
   "Function_implementation_name_must_be_0_2389": "El nombre de la implementación de función debe ser '{0}'.",
   "Function_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_ref_7024": "La función tiene el tipo de valor devuelto \"any\" implícitamente porque no tiene una anotación de tipo de valor devuelto y se hace referencia a ella directa o indirectamente en una de sus expresiones return.",
   "Function_lacks_ending_return_statement_and_return_type_does_not_include_undefined_2366": "Falta la instrucción \"return\" final en la función y el tipo de valor devuelto no incluye 'undefined'.",
+  "Function_not_implemented_95159": "La función no está implementada.",
   "Function_overload_must_be_static_2387": "La sobrecarga de función debe ser estática.",
   "Function_overload_must_not_be_static_2388": "La sobrecarga de función no debe ser estática.",
   "Function_type_notation_must_be_parenthesized_when_used_in_a_union_type_1385": "La notación de tipo de función debe incluirse entre paréntesis cuando se use en un tipo de unión.",
   "Function_type_notation_must_be_parenthesized_when_used_in_an_intersection_type_1387": "La notación de tipo de función debe incluirse entre paréntesis cuando se use en un tipo de intersección.",
   "Function_type_which_lacks_return_type_annotation_implicitly_has_an_0_return_type_7014": "El tipo de función, que carece de una anotación de tipo de valor devuelto, tiene implícitamente un tipo de valor devuelto \"{0}\".",
+  "Function_with_bodies_can_only_merge_with_classes_that_are_ambient_2814": "La función con cuerpos solo se puede combinar con clases que son ambientes.",
+  "Generate_d_ts_files_from_TypeScript_and_JavaScript_files_in_your_project_6612": "Genere archivos .d.ts desde los archivos TypeScript y JavaScript del proyecto.",
   "Generate_get_and_set_accessors_95046": "Generar los descriptores de acceso \"get\" y \"set\"",
   "Generate_get_and_set_accessors_for_all_overriding_properties_95119": "Generar los descriptores de acceso \"get\" y \"set\" para todas las propiedades de reemplazo",
   "Generates_a_CPU_profile_6223": "Genera un perfil de CPU.",
@@ -627,13 +748,13 @@
   "Generators_are_only_available_when_targeting_ECMAScript_2015_or_higher_1220": "Los generadores solo están disponibles cuando el destino es ECMAScript 2015 o una versión posterior.",
   "Generic_type_0_requires_1_type_argument_s_2314": "El tipo genérico '{0}' requiere los siguientes argumentos de tipo: {1}.",
   "Generic_type_0_requires_between_1_and_2_type_arguments_2707": "El tipo genérico \"{0}\" requiere entre {1} y {2} argumentos de tipo.",
-  "Getter_and_setter_accessors_do_not_agree_in_visibility_2379": "Los descriptores de acceso de captador y establecedor no se corresponden respecto a la visibilidad.",
   "Global_module_exports_may_only_appear_at_top_level_1316": "Las exportaciones de módulos globales solo pueden aparecer en el nivel superior.",
   "Global_module_exports_may_only_appear_in_declaration_files_1315": "Las exportaciones de módulos globales solo pueden aparecer en archivos de declaración.",
   "Global_module_exports_may_only_appear_in_module_files_1314": "Las exportaciones de módulos globales solo pueden aparecer en archivos de módulo.",
   "Global_type_0_must_be_a_class_or_interface_type_2316": "El tipo global '{0}' debe ser un tipo de clase o de interfaz.",
   "Global_type_0_must_have_1_type_parameter_s_2317": "El tipo global '{0}' debe tener los siguientes parámetros de tipo: {1}.",
   "Have_recompiles_in_incremental_and_watch_assume_that_changes_within_a_file_will_only_affect_files_di_6384": "Al volver a compilar en \"--incremental\" y \"--watch\" se asume que los cambios en un archivo solo afectarán a los archivos que dependan de este directamente.",
+  "Have_recompiles_in_projects_that_use_incremental_and_watch_mode_assume_that_changes_within_a_file_wi_6606": "Tener recompilaciones en proyectos que usan los modos \"incremental\" y \"watch\" suponen que los cambios dentro de un archivo solo afectarán a los archivos directamente en función de él.",
   "Hexadecimal_digit_expected_1125": "Se esperaba un dígito hexadecimal.",
   "Identifier_expected_0_is_a_reserved_word_at_the_top_level_of_a_module_1262": "Se esperaba un identificador. \"{0}\" es una palabra reservada en el nivel superior de un módulo.",
   "Identifier_expected_0_is_a_reserved_word_in_strict_mode_1212": "Se esperaba un identificador. \"{0}\" es una palabra reservada en modo strict.",
@@ -644,6 +765,7 @@
   "Identifier_expected_esModule_is_reserved_as_an_exported_marker_when_transforming_ECMAScript_modules_1216": "Identificador esperado. \"__esModule\" está reservado como marcador exportado al transformar módulos ECMAScript.",
   "If_the_0_package_actually_exposes_this_module_consider_sending_a_pull_request_to_amend_https_Colon_S_7040": "Si el paquete \"{0}\" expone realmente este módulo, considere la posibilidad de enviar una solicitud de incorporación de cambios para corregir \"https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/{1}\".",
   "Ignore_this_error_message_90019": "Ignorar este mensaje de error",
+  "Ignoring_tsconfig_json_compiles_the_specified_files_with_default_compiler_options_6924": "Si se ignora tsconfig.json, se compilan los archivos especificados con las opciones predeterminadas del compilador.",
   "Implement_all_inherited_abstract_classes_95040": "Implementar todas las clases abstractas heredadas",
   "Implement_all_unimplemented_interfaces_95032": "Implementar todas las interfaces no implementadas",
   "Implement_inherited_abstract_class_90007": "Implementar clase abstracta heredada",
@@ -660,14 +782,23 @@
   "Import_may_be_converted_to_a_default_import_80003": "La importación puede convertirse a una importación predeterminada.",
   "Import_name_cannot_be_0_2438": "El nombre de importación no puede ser \"{0}\".",
   "Import_or_export_declaration_in_an_ambient_module_declaration_cannot_reference_module_through_relati_2439": "La declaración de importación o exportación de una declaración de módulo de ambiente no puede hacer referencia al módulo a través de su nombre relativo.",
+  "Imported_via_0_from_file_1_1393": "Se importó mediante {0} desde el archivo \"{1}\".",
+  "Imported_via_0_from_file_1_to_import_importHelpers_as_specified_in_compilerOptions_1395": "Se importó mediante {0} desde el archivo \"{1}\" para importar \"importHelpers\" tal y como se especifica en compilerOptions.",
+  "Imported_via_0_from_file_1_to_import_jsx_and_jsxs_factory_functions_1397": "Se importó mediante {0} desde el archivo \"{1}\" para importar las funciones de fábrica \"jsx\" y \"jsxs\".",
+  "Imported_via_0_from_file_1_with_packageId_2_1394": "Se importó mediante {0} desde el archivo \"{1}\" con el valor packageId \"{2}\".",
+  "Imported_via_0_from_file_1_with_packageId_2_to_import_importHelpers_as_specified_in_compilerOptions_1396": "Se importó mediante {0} desde el archivo \"{1}\" con el valor packageId \"{2}\" para importar \"importHelpers\" tal y como se especifica en compilerOptions.",
+  "Imported_via_0_from_file_1_with_packageId_2_to_import_jsx_and_jsxs_factory_functions_1398": "Se importó mediante {0} desde el archivo \"{1}\" con el valor packageId \"{2}\" para importar las funciones de fábrica \"jsx\" y \"jsxs\".",
   "Imports_are_not_permitted_in_module_augmentations_Consider_moving_them_to_the_enclosing_external_mod_2667": "No se permiten importaciones en aumentos de módulos. Considere la posibilidad de moverlas al módulo externo envolvente.",
   "In_ambient_enum_declarations_member_initializer_must_be_constant_expression_1066": "En las declaraciones de enumeración de ambiente, el inicializador de miembro debe ser una expresión constante.",
   "In_an_enum_with_multiple_declarations_only_one_declaration_can_omit_an_initializer_for_its_first_enu_2432": "En una enumeración con varias declaraciones, solo una declaración puede omitir un inicializador para el primer elemento de la enumeración.",
+  "Include_a_list_of_files_This_does_not_support_glob_patterns_as_opposed_to_include_6635": "Incluya una lista de archivos. Esto no admite patrones globales, contrario a \"include\".",
   "Include_modules_imported_with_json_extension_6197": "Incluir módulos importados con la extensión \".json\"",
-  "Include_undefined_in_index_signature_results_6800": "Incluir \"undefined\" en los resultados de la signatura de índice",
+  "Include_source_code_in_the_sourcemaps_inside_the_emitted_JavaScript_6644": "Incluya el código fuente en los mapas de origen dentro del JavaScript emitido.",
+  "Include_sourcemap_files_inside_the_emitted_JavaScript_6643": "Incluir archivos de mapas de origen dentro del JavaScript emitido.",
+  "Include_undefined_in_index_signature_results_6716": "Incluir \"undefined\" en los resultados de la signatura de índice",
+  "Including_watch_w_will_start_watching_the_current_project_for_the_file_changes_Once_set_you_can_conf_6914": "Al incluir --watch, -w empezará a ver el proyecto actual por los cambios de archivo. Una vez establecido, puede configurar el modo de inspección con:",
+  "Index_signature_for_type_0_is_missing_in_type_1_2329": "Falta la signatura de índice para el tipo \"{0}\" en el tipo \"{1}\".",
   "Index_signature_in_type_0_only_permits_reading_2542": "La signatura de índice del tipo '{0}' solo permite lectura.",
-  "Index_signature_is_missing_in_type_0_2329": "Falta la signatura de índice en el tipo '{0}'.",
-  "Index_signatures_are_incompatible_2330": "Las signaturas de índice no son compatibles.",
   "Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local_2395": "Las declaraciones individuales de la declaración '{0}' combinada deben ser todas exportadas o todas locales.",
   "Infer_all_types_from_usage_95023": "Deducir todos los tipos del uso",
   "Infer_function_return_type_95148": "Deducir el tipo de valor devuelto de función",
@@ -676,6 +807,7 @@
   "Infer_type_of_0_from_usage_95011": "Deducir el tipo de \"{0}\" del uso",
   "Initialize_property_0_in_the_constructor_90020": "Inicializar la propiedad \"{0}\" en el constructor",
   "Initialize_static_property_0_90021": "Inicializar la propiedad estática \"{0}\"",
+  "Initializer_for_property_0_2811": "Inicializador para la propiedad \"{0}\"",
   "Initializer_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor_2301": "El inicializador de la variable miembro de instancia '{0}' no puede hacer referencia al identificador '{1}' declarado en el constructor.",
   "Initializer_provides_no_value_for_this_binding_element_and_the_binding_element_has_no_default_value_2525": "El inicializador no proporciona ningún valor para este elemento de enlace que, a su vez, no tiene un valor predeterminado.",
   "Initializers_are_not_allowed_in_ambient_contexts_1039": "No se permiten inicializadores en los contextos de ambiente.",
@@ -686,12 +818,16 @@
   "Interface_0_cannot_simultaneously_extend_types_1_and_2_2320": "La interfaz '{0}' no puede extender los tipos '{1}' y '{2}' simultáneamente.",
   "Interface_0_incorrectly_extends_interface_1_2430": "La interfaz '{0}' extiende la interfaz '{1}' de forma incorrecta.",
   "Interface_declaration_cannot_have_implements_clause_1176": "La declaración de interfaz no puede tener una cláusula \"implements\".",
+  "Interface_must_be_given_a_name_1438": "Se debe asignar un nombre a la interfaz.",
   "Interface_name_cannot_be_0_2427": "El nombre de la interfaz no puede ser \"{0}\".",
+  "Interop_Constraints_6252": "Restricciones de interoperabilidad",
+  "Interpret_optional_property_types_as_written_rather_than_adding_undefined_6243": "Interprete los tipos de propiedad opcionales como escritos en lugar de agregar \"undefined\".",
   "Invalid_character_1127": "Carácter no válido.",
   "Invalid_module_name_in_augmentation_Module_0_resolves_to_an_untyped_module_at_1_which_cannot_be_augm_2665": "Nombre de módulo no válido en el aumento. El módulo '{0}' se resuelve como un módulo sin tipo en '{1}', que no se puede aumentar.",
   "Invalid_module_name_in_augmentation_module_0_cannot_be_found_2664": "Nombre de módulo no válido en un aumento, no se encuentra el módulo '{0}'.",
   "Invalid_reference_directive_syntax_1084": "Sintaxis de la directiva \"reference\" no válida.",
   "Invalid_use_of_0_Class_definitions_are_automatically_in_strict_mode_1210": "Uso no válido de '{0}'. Las definiciones de clase están en modo strict automáticamente.",
+  "Invalid_use_of_0_It_cannot_be_used_inside_a_class_static_block_18039": "Uso no válido de '{0}'. No se puede usar dentro de un bloque estático de clase.",
   "Invalid_use_of_0_Modules_are_automatically_in_strict_mode_1215": "Uso de '{0}' no válido. Los módulos están en modo strict automáticamente.",
   "Invalid_use_of_0_in_strict_mode_1100": "Uso no válido de '{0}' en modo strict.",
   "Invalid_value_for_jsxFactory_0_is_not_a_valid_identifier_or_qualified_name_5067": "Valor no válido para \"jsxFactory\". \"{0}\" no es un nombre calificado o un identificador válido.",
@@ -723,13 +859,18 @@
   "JSX_expressions_may_not_use_the_comma_operator_Did_you_mean_to_write_an_array_18007": "Las expresiones JSX no pueden usar el operador de coma. ¿Pretendía escribir una matriz?",
   "JSX_expressions_must_have_one_parent_element_2657": "Las expresiones JSX deben tener un elemento primario.",
   "JSX_fragment_has_no_corresponding_closing_tag_17014": "El fragmento de JSX no tiene la etiqueta de cierre correspondiente.",
+  "JSX_property_access_expressions_cannot_include_JSX_namespace_names_2633": "Las expresiones de acceso a la propiedad JSX no pueden incluir nombres de espacios de nombres JSX",
   "JSX_spread_child_must_be_an_array_type_2609": "El elemento secundario de propagación JSX debe ser de tipo matriz.",
+  "JavaScript_Support_6247": "Compatibilidad con JavaScript",
   "Jump_target_cannot_cross_function_boundary_1107": "Un destino de salto no puede atravesar el límite de función.",
   "KIND_6034": "TIPO",
   "Keywords_cannot_contain_escape_characters_1260": "Las palabras clave no pueden contener caracteres de escape.",
   "LOCATION_6037": "UBICACIÓN",
+  "Language_and_Environment_6254": "Lenguaje y ambiente",
   "Language_service_is_disabled_9004": "El servicio de idioma está deshabilitado.",
   "Left_side_of_comma_operator_is_unused_and_has_no_side_effects_2695": "La parte izquierda del operador de coma no se usa y no tiene efectos secundarios.",
+  "Library_0_specified_in_compilerOptions_1422": "La biblioteca \"{0}\" se especifica en compilerOptions",
+  "Library_referenced_via_0_from_file_1_1405": "Biblioteca a la que se hace referencia mediante \"{0}\" desde el archivo \"{1}\"",
   "Line_break_not_permitted_here_1142": "No se permite el salto de línea aquí.",
   "Line_terminator_not_permitted_before_arrow_1200": "No se permite usar un terminador de línea antes de una flecha.",
   "List_of_folders_to_include_type_definitions_from_6161": "Lista de carpetas de donde se deben incluir las definiciones de tipos.",
@@ -739,11 +880,14 @@
   "Loading_module_0_from_node_modules_folder_target_file_type_1_6098": "Se cargará el módulo \"{0}\" de la carpeta \"node_modules\", tipo de archivo de destino \"{1}\".",
   "Loading_module_as_file_Slash_folder_candidate_module_location_0_target_file_type_1_6095": "Se cargará el módulo como archivo/carpeta, ubicación del módulo candidato \"{0}\", tipo de archivo de destino \"{1}\".",
   "Locale_must_be_of_the_form_language_or_language_territory_For_example_0_or_1_6048": "La configuración regional debe tener el formato <idioma> o <idioma>-<territorio>. Por ejemplo, '{0}' o '{1}'.",
+  "Log_paths_used_during_the_moduleResolution_process_6706": "Rutas de acceso de registro usadas durante el proceso \"moduleResolution\".",
   "Longest_matching_prefix_for_0_is_1_6108": "El prefijo coincidente más largo para \"{0}\" es \"{1}\".",
   "Looking_up_in_node_modules_folder_initial_location_0_6125": "Buscando en la carpeta \"node_modules\", ubicación inicial: \"{0}\".",
   "Make_all_super_calls_the_first_statement_in_their_constructor_95036": "Convertir todas las llamadas a \"super()\" en la primera instrucción de su constructor",
+  "Make_keyof_only_return_strings_instead_of_string_numbers_or_symbols_Legacy_option_6650": "Haga que keyof solo devuelva cadenas en lugar de cadenas, números o símbolos. Opción heredada.",
   "Make_super_call_the_first_statement_in_the_constructor_90002": "Hacer que la llamada a \"super()\" sea la primera instrucción del constructor",
   "Mapped_object_type_implicitly_has_an_any_template_type_7039": "El tipo de objeto asignado tiene implícitamente un tipo de plantilla \"any\".",
+  "Matched_by_include_pattern_0_in_1_1407": "Coincidencia con el patrón de inclusión \"{0}\" en \"{1}\"",
   "Member_0_implicitly_has_an_1_type_7008": "El miembro '{0}' tiene un tipo '{1}' implícitamente.",
   "Member_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage_7045": "El miembro \"{0}\" tiene un tipo \"{1}\" de forma implícita, pero se puede inferir un tipo más adecuado a partir del uso.",
   "Merge_conflict_marker_encountered_1185": "Se encontró un marcador de conflicto de combinación.",
@@ -752,6 +896,7 @@
   "Method_0_cannot_have_an_implementation_because_it_is_marked_abstract_1245": "El método '{0}' no puede tener ninguna implementación porque está marcado como abstracto.",
   "Method_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2_4101": "El método \"{0}\" de la interfaz exportada tiene o usa el nombre \"{1}\" del módulo privado \"{2}\".",
   "Method_0_of_exported_interface_has_or_is_using_private_name_1_4102": "El método \"{0}\" de la interfaz exportada tiene o usa el nombre privado \"{1}\".",
+  "Method_not_implemented_95158": "El método no está implementado.",
   "Modifiers_cannot_appear_here_1184": "Los modificadores no pueden aparecer aquí.",
   "Module_0_can_only_be_default_imported_using_the_1_flag_1259": "El módulo \"{0}\" solo puede importarse de forma predeterminada con la marca \"{1}\".",
   "Module_0_declares_1_locally_but_it_is_exported_as_2_2460": "El módulo \"{0}\" declara \"{1}\" localmente, pero se exporta como \"{2}\".",
@@ -769,13 +914,14 @@
   "Module_0_was_resolved_as_locally_declared_ambient_module_in_file_1_6144": "El módulo '{0}' se resolvió como un módulo de ambiente declarado localmente en el archivo '{1}'.",
   "Module_0_was_resolved_to_1_but_jsx_is_not_set_6142": "El módulo '{0}' se resolvió en '{1}', pero \"--jsx\" no está establecido.",
   "Module_0_was_resolved_to_1_but_resolveJsonModule_is_not_used_7042": "El módulo \"{0}\" se resolvió en \"{1}\", pero no se usa \"--resolveJsonModule\".",
-  "Module_Resolution_Options_6174": "Opciones de resolución de módulo",
+  "Module_declaration_names_may_only_use_or_quoted_strings_1443": "Los nombres de declaración de módulo solo pueden usar cadenas con las comillas \" o '.",
   "Module_name_0_matched_pattern_1_6092": "Nombre del módulo: '{0}', patrón coincidente: '{1}'.",
   "Module_name_0_was_not_resolved_6090": "======== No se resolvió el nombre de módulo '{0}'. ========",
   "Module_name_0_was_successfully_resolved_to_1_6089": "======== El nombre del módulo '{0}' se resolvió correctamente como '{1}'. ========",
   "Module_name_0_was_successfully_resolved_to_1_with_Package_ID_2_6218": "======== El nombre del módulo '{0}' se resolvió correctamente como \"{1}\" con el identificador de paquete \"{2}\". ========",
   "Module_resolution_kind_is_not_specified_using_0_6088": "No se ha especificado el tipo de resolución del módulo, se usará '{0}'.",
   "Module_resolution_using_rootDirs_has_failed_6111": "No se pudo resolver el módulo con \"rootDirs\".",
+  "Modules_6244": "Módulos",
   "Move_labeled_tuple_element_modifiers_to_labels_95117": "Mover modificadores de elemento de tupla etiquetados a etiquetas",
   "Move_to_a_new_file_95049": "Mover a un nuevo archivo",
   "Multiple_consecutive_numeric_separators_are_not_permitted_6189": "No se permiten varios separadores numéricos consecutivos.",
@@ -784,11 +930,14 @@
   "Name_is_not_valid_95136": "El nombre no es válido",
   "Named_property_0_of_types_1_and_2_are_not_identical_2319": "La propiedad '{0}' con nombre de los tipos '{1}' y '{2}' no es idéntica en ambos.",
   "Namespace_0_has_no_exported_member_1_2694": "El espacio de nombres '{0}' no tiene ningún miembro '{1}' exportado.",
+  "Namespace_must_be_given_a_name_1437": "Se debe asignar un nombre al espacio de nombres.",
+  "Namespace_name_cannot_be_0_2819": "El nombre de espacio no puede ser \"{0}\".",
   "No_base_constructor_has_the_specified_number_of_type_arguments_2508": "No hay ningún constructor base con el número especificado de argumentos de tipo.",
   "No_constituent_of_type_0_is_callable_2755": "No se puede llamar a ningún constituyente del tipo \"{0}\".",
   "No_constituent_of_type_0_is_constructable_2759": "No se puede construir ningún constituyente del tipo \"{0}\".",
   "No_index_signature_with_a_parameter_of_type_0_was_found_on_type_1_7054": "No se encontró ninguna signatura de índice con un parámetro de tipo \"{0}\" en el tipo \"{1}\".",
   "No_inputs_were_found_in_config_file_0_Specified_include_paths_were_1_and_exclude_paths_were_2_18003": "No se encontraron entradas en el archivo de configuración '{0}'. Las rutas 'include' especificadas fueron '{1}' y las rutas 'exclude' fueron '{2}'.",
+  "No_longer_supported_In_early_versions_manually_set_the_text_encoding_for_reading_files_6608": "Ya no se admite. En versiones anteriores, establezca manualmente la codificación de texto para leer archivos.",
   "No_overload_expects_0_arguments_but_overloads_do_exist_that_expect_either_1_or_2_arguments_2575": "Ninguna sobrecarga espera argumentos {0}, pero existen sobrecargas que esperan argumentos {1} o {2}.",
   "No_overload_expects_0_type_arguments_but_overloads_do_exist_that_expect_either_1_or_2_type_arguments_2743": "Ninguna sobrecarga espera argumentos de tipo {0}, pero existen sobrecargas que esperan argumentos de tipo {1} o {2}.",
   "No_overload_matches_this_call_2769": "Ninguna sobrecarga coincide con esta llamada.",
@@ -802,7 +951,6 @@
   "Not_all_code_paths_return_a_value_7030": "No todas las rutas de acceso de código devuelven un valor.",
   "Not_all_constituents_of_type_0_are_callable_2756": "No se puede llamar a todos los constituyentes del tipo \"{0}\".",
   "Not_all_constituents_of_type_0_are_constructable_2760": "No se pueden construir todos los constituyentes del tipo \"{0}\".",
-  "Numeric_index_type_0_is_not_assignable_to_string_index_type_1_2413": "El tipo de índice numérico '{0}' no se puede asignar a un tipo de índice de cadena '{1}'.",
   "Numeric_literals_with_absolute_values_equal_to_2_53_or_greater_are_too_large_to_be_represented_accur_80008": "Los literales numéricos con valores absolutos iguales a 2^53 o superiores son demasiado grandes para representarlos de forma precisa como enteros.",
   "Numeric_separators_are_not_allowed_here_6188": "Aquí no se permiten separadores numéricos.",
   "Object_is_of_type_unknown_2571": "El objeto es de tipo \"desconocido\".",
@@ -826,9 +974,11 @@
   "Only_identifiers_Slashqualified_names_with_optional_type_arguments_are_currently_supported_in_a_clas_9002": "Actualmente, solo se admiten identificadores o nombres completos con argumentos de tipo opcional en la cláusula \"extends\" de una clase.",
   "Only_named_exports_may_use_export_type_1383": "Solo las exportaciones con nombre pueden usar \"export type\".",
   "Only_numeric_enums_can_have_computed_members_but_this_expression_has_type_0_If_you_do_not_need_exhau_18033": "Solo las enumeraciones numéricas pueden tener miembros calculados, pero esta expresión tiene el tipo \"{0}\". Si no requiere comprobaciones de exhaustividad, considere la posibilidad de usar un literal de objeto en su lugar.",
+  "Only_output_d_ts_files_and_not_JavaScript_files_6623": "Genere solo archivos d.ts y no archivos JavaScript.",
   "Only_public_and_protected_methods_of_the_base_class_are_accessible_via_the_super_keyword_2340": "Solo es posible tener acceso a los métodos públicos y protegidos de la clase base mediante la palabra clave \"super\".",
   "Operator_0_cannot_be_applied_to_type_1_2736": "El operador \"{0}\" no se puede aplicar al tipo \"{1}\".",
   "Operator_0_cannot_be_applied_to_types_1_and_2_2365": "El operador '{0}' no se puede aplicar a los tipos '{1}' y '{2}'.",
+  "Opt_a_project_out_of_multi_project_reference_checking_when_editing_6619": "Opte por excluir un proyecto de la comprobación de referencias de varios proyectos al editar.",
   "Option_0_can_only_be_specified_in_tsconfig_json_file_or_set_to_false_or_null_on_command_line_6230": "La opción \"{0}\" solo puede especificarse en el archivo \"tsconfig.json\" o establecerse en \"false\" o \"null\" en la línea de comandos.",
   "Option_0_can_only_be_specified_in_tsconfig_json_file_or_set_to_null_on_command_line_6064": "La opción \"{0}\" solo puede especificarse en el archivo \"tsconfig.json\" o establecerse en \"null\" en la línea de comandos.",
   "Option_0_can_only_be_used_when_either_option_inlineSourceMap_or_option_sourceMap_is_provided_5051": "La opción '{0}' solo se puede usar cuando se proporciona '--inlineSourceMap' o '--sourceMap'.",
@@ -841,14 +991,20 @@
   "Option_build_must_be_the_first_command_line_argument_6369": "La opción \"--build\" debe ser el primer argumento de la línea de comandos.",
   "Option_incremental_can_only_be_specified_using_tsconfig_emitting_to_single_file_or_when_option_tsBui_5074": "La opción \"--incremental\" solo puede especificarse si se usa tsconfig, se emite en un solo archivo o se especifica la opción \"--tsBuildInfoFile\".",
   "Option_isolatedModules_can_only_be_used_when_either_option_module_is_provided_or_option_target_is_ES_5047": "La opción \"isolatedModules\" solo se puede usar cuando se proporciona la opción \"--module\" o si la opción \"target\" es \"ES2015\" o una versión posterior.",
+  "Option_preserveConstEnums_cannot_be_disabled_when_isolatedModules_is_enabled_5091": "La opción \"preserveConstEnums\" no se puede deshabilitar cuando \"isolatedModules\" está habilitado.",
   "Option_project_cannot_be_mixed_with_source_files_on_a_command_line_5042": "La opción \"project\" no se puede combinar con archivos de origen en una línea de comandos.",
   "Option_resolveJsonModule_can_only_be_specified_when_module_code_generation_is_commonjs_amd_es2015_or_5071": "La opción \"--resolveJsonModule\" solo puede especificarse cuando la generación de código del módulo es \"commonjs\", \"amd\", \"es2015\" o \"esNext\".",
   "Option_resolveJsonModule_cannot_be_specified_without_node_module_resolution_strategy_5070": "No se puede especificar la opción \"--resolveJsonModule\" sin la estrategia de resolución de módulos \"node\".",
   "Options_0_and_1_cannot_be_combined_6370": "\"{0}\" y \"{1}\" no se pueden combinar.",
   "Options_Colon_6027": "Opciones:",
+  "Output_Formatting_6256": "Formato de salida",
+  "Output_compiler_performance_information_after_building_6615": "Información de rendimiento resultante del compilador después de la compilación.",
   "Output_directory_for_generated_declaration_files_6166": "Directorio de salida para los archivos de declaración generados.",
   "Output_file_0_from_project_1_does_not_exist_6309": "El archivo de salida \"{0}\" del proyecto \"{1}\" no existe.",
   "Output_file_0_has_not_been_built_from_source_file_1_6305": "El archivo de salida \"{0}\" no se compiló desde el archivo de origen \"{1}\".",
+  "Output_from_referenced_project_0_included_because_1_specified_1411": "La salida del proyecto \"{0}\" al que se hace referencia se ha incluido porque se ha especificado \"{1}\".",
+  "Output_from_referenced_project_0_included_because_module_is_specified_as_none_1412": "La salida del proyecto \"{0}\" al que se hace referencia se ha incluido porque \"--module\" se ha especificado como \"none\".",
+  "Output_more_detailed_compiler_performance_information_after_building_6632": "Produzca información más detallada del rendimiento resultante del compilador después de la compilación.",
   "Overload_0_of_1_2_gave_the_following_error_2772": "La sobrecarga {0} de {1}, \"{2}\", dio el error siguiente.",
   "Overload_signatures_must_all_be_abstract_or_non_abstract_2512": "Las signaturas de sobrecarga deben ser todas abstractas o no abstractas.",
   "Overload_signatures_must_all_be_ambient_or_non_ambient_2384": "Las signaturas de sobrecarga deben ser todas de ambiente o de no ambiente.",
@@ -892,18 +1048,25 @@
   "Parameter_type_of_public_static_setter_0_from_exported_class_has_or_is_using_name_1_from_private_mod_4034": "El tipo de parámetro del establecedor estático público \"{0}\" de la clase exportada tiene o usa el nombre \"{1}\" del módulo \"{2}\" privado.",
   "Parameter_type_of_public_static_setter_0_from_exported_class_has_or_is_using_private_name_1_4035": "El tipo de parámetro del establecedor estático público \"{0}\" de la clase exportada tiene o usa el nombre privado \"{1}\".",
   "Parse_in_strict_mode_and_emit_use_strict_for_each_source_file_6141": "Analiza en modo strict y emite \"use strict\" para cada archivo de código fuente.",
+  "Part_of_files_list_in_tsconfig_json_1409": "Parte de la lista de \"archivos\" de tsconfig.json",
   "Pattern_0_can_have_at_most_one_Asterisk_character_5061": "El patrón \"{0}\" puede tener un carácter '*' como máximo.",
   "Performance_timings_for_diagnostics_or_extendedDiagnostics_are_not_available_in_this_session_A_nativ_6386": "Los intervalos de rendimiento de \"--diagnostics\" o \"--extendedDiagnostics\" no están disponibles en esta sesión. No se encontró ninguna implementación nativa de la API de rendimiento web.",
+  "Platform_specific_6912": "Específico de plataforma",
   "Prefix_0_with_an_underscore_90025": "Prefijo \"{0}\" con guion bajo",
   "Prefix_all_incorrect_property_declarations_with_declare_95095": "Agregar el prefijo \"declare\" a todas las declaraciones de propiedad incorrectas",
   "Prefix_all_unused_declarations_with_where_possible_95025": "Agregar \"_\" como prefijo a todas las declaraciones sin usar, cuando sea posible",
   "Prefix_with_declare_95094": "Agregar el prefijo \"declare\"",
+  "Print_all_of_the_files_read_during_the_compilation_6653": "Imprima todos los archivos leídos durante la compilación.",
+  "Print_files_read_during_the_compilation_including_why_it_was_included_6631": "Imprima los archivos leídos durante la compilación, incluyendo la razón por la que se incluyó.",
+  "Print_names_of_files_and_the_reason_they_are_part_of_the_compilation_6505": "Imprima los nombres de los archivos y el motivo por el que forman parte de la compilación.",
   "Print_names_of_files_part_of_the_compilation_6155": "Imprimir los nombres de los archivos que forman parte de la compilación.",
   "Print_names_of_files_that_are_part_of_the_compilation_and_then_stop_processing_6503": "Imprima los nombres de los archivos que forman parte de la compilación y, a continuación, detenga el procesamiento.",
   "Print_names_of_generated_files_part_of_the_compilation_6154": "Imprimir los nombres de los archivos generados que forman parte de la compilación.",
   "Print_the_compiler_s_version_6019": "Imprima la versión del compilador.",
   "Print_the_final_configuration_instead_of_building_1350": "Imprima la configuración final en lugar de compilar.",
+  "Print_the_names_of_emitted_files_after_a_compilation_6652": "Imprima los nombres de los archivos emitidos después de una compilación.",
   "Print_this_message_6017": "Imprima este mensaje.",
+  "Private_accessor_was_defined_without_a_getter_2806": "El descriptor de acceso privado se ha definido sin un captador.",
   "Private_identifiers_are_not_allowed_in_variable_declarations_18029": "No se permiten identificadores privados en las declaraciones de variables.",
   "Private_identifiers_are_not_allowed_outside_class_bodies_18016": "No se permiten identificadores privados fuera de los cuerpos de clase.",
   "Private_identifiers_are_only_available_when_targeting_ECMAScript_2015_and_higher_18028": "Los identificadores privados solo están disponibles cuando el destino es ECMAScript 2015 y versiones posteriores.",
@@ -911,6 +1074,7 @@
   "Private_or_protected_member_0_cannot_be_accessed_on_a_type_parameter_4105": "No se puede acceder al miembro \"{0}\" privado o protegido en un parámetro de tipo.",
   "Project_0_can_t_be_built_because_its_dependency_1_has_errors_6363": "El proyecto \"{0}\" no puede generarse porque su dependencia \"{1}\" tiene errores",
   "Project_0_can_t_be_built_because_its_dependency_1_was_not_built_6383": "El proyecto \"{0}\" no puede compilarse porque su dependencia \"{1}\" no se ha compilado.",
+  "Project_0_is_being_forcibly_rebuilt_6388": "El proyecto \"{0}\" se está recompilando de manera forzada.",
   "Project_0_is_out_of_date_because_its_dependency_1_is_out_of_date_6353": "El proyecto \"{0}\" está obsoleto porque su dependencia \"{1}\" no está actualizada",
   "Project_0_is_out_of_date_because_oldest_output_1_is_older_than_newest_input_2_6350": "El proyecto \"{0}\" está obsoleto porque la salida más antigua \"{1}\" es anterior a la entrada más reciente \"{2}\"",
   "Project_0_is_out_of_date_because_output_file_1_does_not_exist_6352": "El proyecto \"{0}\" está obsoleto porque el archivo de salida \"{1}\" no existe",
@@ -920,14 +1084,18 @@
   "Project_0_is_up_to_date_because_newest_input_1_is_older_than_oldest_output_2_6351": "El proyecto \"{0}\" está actualizado porque la entrada más reciente \"{1}\" es anterior a la salida más antigua \"{2}\"",
   "Project_0_is_up_to_date_with_d_ts_files_from_its_dependencies_6354": "El proyecto \"{0}\" está actualizado con archivos .d.ts de sus dependencias",
   "Project_references_may_not_form_a_circular_graph_Cycle_detected_Colon_0_6202": "Las referencias del proyecto no pueden formar un gráfico circular. Ciclo detectado: {0}",
+  "Projects_6255": "Proyectos",
   "Projects_in_this_build_Colon_0_6355": "Proyectos de esta compilación: {0}",
   "Projects_to_reference_6300": "Proyectos a los que se hará referencia",
+  "Property_0_cannot_have_an_initializer_because_it_is_marked_abstract_1267": "La propiedad '{0}' no puede tener un mediador porque se marca como abstracto.",
   "Property_0_comes_from_an_index_signature_so_it_must_be_accessed_with_0_4111": "La propiedad \"{0}\" procede de una signatura de índice, por lo que debe accederse a ella con [\"{0}\"].",
   "Property_0_does_not_exist_on_const_enum_1_2479": "La propiedad '{0}' no existe en la enumeración 'const' '{1}'.",
   "Property_0_does_not_exist_on_type_1_2339": "La propiedad '{0}' no existe en el tipo '{1}'.",
   "Property_0_does_not_exist_on_type_1_Did_you_mean_2_2551": "La propiedad \"{0}\" no existe en el tipo \"{1}\". ¿Quería decir \"{2}\"?",
   "Property_0_does_not_exist_on_type_1_Did_you_mean_to_access_the_static_member_2_instead_2576": "La propiedad \"{0}\" no existe en el tipo \"{1}\". ¿Pretendía acceder al miembro estático \"{2}\"?",
   "Property_0_does_not_exist_on_type_1_Do_you_need_to_change_your_target_library_Try_changing_the_lib_c_2550": "No existe la propiedad \"{0}\" en el tipo \"{1}\". ¿Necesita cambiar la biblioteca de destino? Pruebe a cambiar la opción del compilador \"lib\" a \"{2}\" o posterior.",
+  "Property_0_does_not_exist_on_type_1_Try_changing_the_lib_compiler_option_to_include_dom_2812": "La propiedad \"{0}\" no existe en el tipo \"{1}\". Intente cambiar la opción del compilador \"lib\" para incluir \"dom\".",
+  "Property_0_has_no_initializer_and_is_not_definitely_assigned_in_a_class_static_block_2817": "La propiedad '{0}' no tiene inicializador y no está asignada de forma definitiva en el bloque estático de clase.",
   "Property_0_has_no_initializer_and_is_not_definitely_assigned_in_the_constructor_2564": "La propiedad \"{0}\" no tiene inicializador y no está asignada de forma definitiva en el constructor.",
   "Property_0_implicitly_has_type_any_because_its_get_accessor_lacks_a_return_type_annotation_7033": "La propiedad '{0}' tiene el tipo 'any' de forma implícita, porque a su descriptor de acceso get le falta una anotación de tipo de valor devuelto.",
   "Property_0_implicitly_has_type_any_because_its_set_accessor_lacks_a_parameter_type_annotation_7032": "La propiedad '{0}' tiene el tipo 'any' de forma implícita, porque a su descriptor de acceso set le falta una anotación de tipo de parámetro.",
@@ -945,18 +1113,19 @@
   "Property_0_is_optional_in_type_1_but_required_in_type_2_2327": "La propiedad '{0}' es opcional en el tipo '{1}', pero obligatoria en el tipo '{2}'.",
   "Property_0_is_private_and_only_accessible_within_class_1_2341": "La propiedad '{0}' es privada y solo se puede acceder a ella en la clase '{1}'.",
   "Property_0_is_private_in_type_1_but_not_in_type_2_2325": "La propiedad '{0}' es privada en el tipo '{1}', pero no en el tipo '{2}'.",
-  "Property_0_is_protected_and_only_accessible_through_an_instance_of_class_1_2446": "La propiedad '{0}' está protegida y solo se puede acceder a ella a través de una instancia de la clase '{1}'.",
+  "Property_0_is_protected_and_only_accessible_through_an_instance_of_class_1_This_is_an_instance_of_cl_2446": "La propiedad \"{0}\" está protegida y solo puede accederse a ella a través de una instancia de la clase \"{1}\". Esta es una instancia de la clase \"{2}\".",
   "Property_0_is_protected_and_only_accessible_within_class_1_and_its_subclasses_2445": "La propiedad '{0}' está protegida y solo se puede acceder a ella en la clase '{1}' y las subclases de esta.",
   "Property_0_is_protected_but_type_1_is_not_a_class_derived_from_2_2443": "La propiedad '{0}' está protegida, pero el tipo '{1}' no es una clase derivada de '{2}'.",
   "Property_0_is_protected_in_type_1_but_public_in_type_2_2444": "La propiedad '{0}' está protegida en el tipo '{1}', pero es pública en el tipo '{2}'.",
   "Property_0_is_used_before_being_assigned_2565": "La propiedad \"{0}\" se usa antes de asignarla.",
   "Property_0_is_used_before_its_initialization_2729": "La propiedad \"{0}\" se usa antes de su inicialización.",
+  "Property_0_may_not_be_used_in_a_static_property_s_initializer_in_the_same_class_when_target_is_esnex_2810": "La propiedad \"{0}\" no se puede usar en un inicializador de propiedad estática en la misma clase cuando \"target\" es \"esnext\" y \"useDefineForClassFields\" es \"false\".",
+  "Property_0_may_not_exist_on_type_1_Did_you_mean_2_2568": "La propiedad \"{0}\" no existe en el tipo \"{1}\". ¿Quería decir \"{2}\"?",
   "Property_0_of_JSX_spread_attribute_is_not_assignable_to_target_property_2606": "La propiedad '{0}' del atributo spread de JSX no se puede asignar a la propiedad de destino.",
   "Property_0_of_exported_class_expression_may_not_be_private_or_protected_4094": "La propiedad \"{0}\" de la expresión de clase exportada no puede ser privada ni estar protegida.",
   "Property_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2_4032": "La propiedad '{0}' de la interfaz exportada tiene o usa el nombre '{1}' del módulo '{2}' privado.",
   "Property_0_of_exported_interface_has_or_is_using_private_name_1_4033": "La propiedad '{0}' de la interfaz exportada tiene o usa el nombre privado '{1}'.",
-  "Property_0_of_type_1_is_not_assignable_to_numeric_index_type_2_2412": "La propiedad '{0}' de tipo '{1}' no se puede asignar al tipo de índice numérico '{2}'.",
-  "Property_0_of_type_1_is_not_assignable_to_string_index_type_2_2411": "La propiedad '{0}' de tipo '{1}' no se puede asignar al tipo de índice de cadena '{2}'.",
+  "Property_0_of_type_1_is_not_assignable_to_2_index_type_3_2411": "La propiedad \"{0}\" de tipo \"{1}\" no se puede asignar al tipo de índice \"{2}\" \"{3}\".",
   "Property_0_was_also_declared_here_2733": "La propiedad \"{0}\" también se ha declarado aquí.",
   "Property_0_will_overwrite_the_base_property_in_1_If_this_is_intentional_add_an_initializer_Otherwise_2612": "La propiedad \"{0}\" sobrescribirá la propiedad base en \"{1}\" Si esto es intencionado, agregue un inicializador. De lo contrario, agregue un modificador \"declare\" o quite la declaración redundante.",
   "Property_assignment_expected_1136": "Se esperaba una asignación de propiedad.",
@@ -978,12 +1147,18 @@
   "Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4027": "La propiedad estática pública '{0}' de la clase exportada tiene o usa el nombre '{1}' del módulo {2} privado.",
   "Public_static_property_0_of_exported_class_has_or_is_using_private_name_1_4028": "La propiedad estática pública '{0}' de la clase exportada tiene o usa el nombre privado '{1}'.",
   "Qualified_name_0_is_not_allowed_without_a_leading_param_object_1_8032": "No se permite el nombre calificado \"{0}\" sin un elemento \"@param {object} {1}\" inicial.",
+  "Raise_an_error_when_a_function_parameter_isn_t_read_6676": "Genere un error cuando no se lea un parámetro de una función.",
   "Raise_error_on_expressions_and_declarations_with_an_implied_any_type_6052": "Generar un error en las expresiones y las declaraciones con un tipo \"any\" implícito.",
   "Raise_error_on_this_expressions_with_an_implied_any_type_6115": "Generar un error en expresiones 'this' con un tipo 'any' implícito.",
   "Re_exporting_a_type_when_the_isolatedModules_flag_is_provided_requires_using_export_type_1205": "Para volver a exportar un tipo cuando se proporciona la marca \"--isolatedModules\", se requiere el uso de \"export type\".",
   "Redirect_output_structure_to_the_directory_6006": "Redirija la estructura de salida al directorio.",
+  "Reduce_the_number_of_projects_loaded_automatically_by_TypeScript_6617": "Reduzca el número de proyectos cargados automáticamente por TypeScript.",
   "Referenced_project_0_may_not_disable_emit_6310": "El proyecto \"{0}\" al que se hace referencia no puede deshabilitar la emisión.",
   "Referenced_project_0_must_have_setting_composite_Colon_true_6306": "El proyecto \"{0}\" al que se hace referencia debe tener el valor \"composite\": true.",
+  "Referenced_via_0_from_file_1_1400": "Se hace referencia mediante \"{0}\" desde el archivo \"{1}\".",
+  "Remove_a_list_of_directories_from_the_watch_process_6628": "Quite una lista de directorios del proceso de inspección.",
+  "Remove_a_list_of_files_from_the_watch_mode_s_processing_6629": "Quite una lista de archivos del procesamiento del modo de inspección.",
+  "Remove_all_unnecessary_override_modifiers_95163": "Quitar todos los modificadores \"override\" innecesarios",
   "Remove_all_unnecessary_uses_of_await_95087": "Quitar todos los usos innecesarios de \"await\"",
   "Remove_all_unreachable_code_95051": "Quitar todo el código inaccesible",
   "Remove_all_unused_labels_95054": "Quitar todas las etiquetas no utilizadas",
@@ -991,8 +1166,10 @@
   "Remove_braces_from_arrow_function_95060": "Quitar las llaves de la función de flecha",
   "Remove_braces_from_arrow_function_body_95112": "Quitar las llaves del cuerpo de función de flecha",
   "Remove_import_from_0_90005": "Quitar importación de \"{0}\"",
+  "Remove_override_modifier_95161": "Quitar el modificador \"override\"",
   "Remove_parentheses_95126": "Quitar los paréntesis",
   "Remove_template_tag_90011": "Quitar la etiqueta de plantilla",
+  "Remove_the_20mb_cap_on_total_source_code_size_for_JavaScript_files_in_the_TypeScript_language_server_6618": "Elimine el límite de 20 MB del tamaño total del código fuente para los archivos JavaScript en el servidor de lenguaje TypeScript.",
   "Remove_type_parameters_90012": "Quitar los parámetros de tipo",
   "Remove_unnecessary_await_95086": "Quitar elementos \"await\" innecesarios",
   "Remove_unreachable_code_95050": "Quitar el código inaccesible",
@@ -1010,14 +1187,16 @@
   "Report_errors_in_js_files_8019": "Notifique los errores de los archivos .js.",
   "Report_errors_on_unused_locals_6134": "Informe de errores sobre variables locales no usadas.",
   "Report_errors_on_unused_parameters_6135": "Informe de errores sobre parámetros no usados.",
-  "Require_undeclared_properties_from_index_signatures_to_use_element_accesses_6803": "Se requieren propiedades no declaradas de las signaturas de índice para usar los accesos de elemento.",
+  "Require_undeclared_properties_from_index_signatures_to_use_element_accesses_6717": "Se requieren propiedades no declaradas de las signaturas de índice para usar los accesos de elemento.",
   "Required_type_parameters_may_not_follow_optional_type_parameters_2706": "Los parámetros de tipo requeridos pueden no seguir parámetros de tipo opcionales.",
   "Resolution_for_module_0_was_found_in_cache_from_location_1_6147": "La resolución del módulo \"{0}\" se encontró en la memoria caché de la ubicación \"{1}\".",
+  "Resolution_for_type_reference_directive_0_was_found_in_cache_from_location_1_6241": "La resolución de la directiva de referencia de tipo \"{0}\" se encontró en la memoria caché de la ubicación \"{1}\".",
   "Resolve_keyof_to_string_valued_property_names_only_no_numbers_or_symbols_6195": "Resolver \"keyof\" exclusivamente como nombres de propiedad con valores de cadena (sin números ni símbolos).",
   "Resolving_from_node_modules_folder_6118": "Resolviendo desde la carpeta node_modules...",
   "Resolving_module_0_from_1_6086": "======== Resolviendo el módulo '{0}' de '{1}'. ========",
   "Resolving_module_name_0_relative_to_base_url_1_2_6094": "Resolviendo el nombre de módulo '{0}' relativo a la dirección URL base '{1}' - '{2}'.",
   "Resolving_real_path_for_0_result_1_6130": "Resolviendo la ruta de acceso real de \"{0}\", resultado: \"{1}\".",
+  "Resolving_type_reference_directive_0_containing_file_1_6242": "======== Resolviendo la directiva de referencia de tipo \"{0}\", archivo contenedor \"{1}\". ========",
   "Resolving_type_reference_directive_0_containing_file_1_root_directory_2_6116": "======== Resolviendo la directiva de referencia de tipo '{0}', archivo contenedor: '{1}', directorio raíz: '{2}'. ========",
   "Resolving_type_reference_directive_0_containing_file_1_root_directory_not_set_6123": "======== Resolviendo la directiva de referencia de tipo '{0}', archivo contenedor: '{1}', directorio raíz no establecido. ========",
   "Resolving_type_reference_directive_0_containing_file_not_set_root_directory_1_6127": "======== Resolviendo la directiva de referencia de tipo '{0}', archivo contenedor no establecido, directorio raíz: '{1}'. ========",
@@ -1029,6 +1208,7 @@
   "Rest_signatures_are_incompatible_2572": "Las signaturas rest son incompatibles.",
   "Rest_types_may_only_be_created_from_object_types_2700": "Los tipos rest solo se pueden crear a partir de tipos de objeto.",
   "Return_type_annotation_circularly_references_itself_2577": "La anotación de tipo de valor devuelto se hace referencia a sí misma de forma circular.",
+  "Return_type_must_be_inferred_from_a_function_95149": "El tipo de valor devuelto debe inferirse de una función",
   "Return_type_of_call_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1_4046": "El tipo de valor devuelto de la signatura de llamada de la interfaz exportada tiene o usa el nombre '{0}' del módulo '{1}' privado.",
   "Return_type_of_call_signature_from_exported_interface_has_or_is_using_private_name_0_4047": "El tipo de valor devuelto de la signatura de llamada de la interfaz exportada tiene o usa el nombre privado '{0}'.",
   "Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_name_0_from_private_mod_4044": "El tipo de valor devuelto de la signatura de constructor de la interfaz exportada tiene o usa el nombre '{0}' del módulo '{1}' privado.",
@@ -1053,15 +1233,31 @@
   "Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_external_module__4050": "El tipo de valor devuelto del método estático público de la clase exportada tiene o usa el nombre '{0}' del módulo {1} externo, pero no se puede nombrar.",
   "Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_private_module_1_4051": "El tipo de valor devuelto del método estático público de la clase exportada tiene o usa el nombre '{0}' del módulo {1} privado.",
   "Return_type_of_public_static_method_from_exported_class_has_or_is_using_private_name_0_4052": "El tipo de valor devuelto del método estático público de la clase exportada tiene o usa el nombre privado '{0}'.",
-  "Reusing_module_resolutions_originating_in_0_since_resolutions_are_unchanged_from_old_program_6184": "Las resoluciones de módulo cuyo origen es \"{0}\" se reutilizan, ya que las resoluciones no varían respecto al programa anterior.",
-  "Reusing_resolution_of_module_0_to_file_1_from_old_program_6183": "Reutilizando la resolución del módulo \"{0}\" en el archivo \"{1}\" del programa anterior.",
+  "Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_not_resolved_6395": "La reutilización de la resolución del módulo \"{0}\" de \"{1}\" que se encuentra en la memoria caché desde la ubicación \"{2}\" no se resolvió.",
+  "Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_6393": "La reutilización de la resolución del módulo \"{0}\" de \"{1}\" que se encuentra en la memoria caché desde la ubicación \"{2}\" se resolvió correctamente en \"{3}\".",
+  "Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_6394": "La reutilización de la resolución del módulo \"{0}\" de \"{1}\" que se encuentra en la memoria caché desde la ubicación \"{2}\" se resolvió correctamente en \"{3}\" con el identificador de paquete \"{4}\".",
+  "Reusing_resolution_of_module_0_from_1_of_old_program_it_was_not_resolved_6389": "La reutilización de la resolución del módulo \"{0}\" del programa anterior \"{1}\" no se resolvió.",
+  "Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2_6183": "La reutilización de la resolución del módulo \"{0}\" del programa anterior \"{1}\" se resolvió correctamente en \"{2}\".",
+  "Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2_with_Package__6184": "La reutilización de la resolución del módulo \"{0}\" del programa anterior \"{1}\" se resolvió correctamente en \"{2}\" con el identificador del paquete \"{3}\".",
+  "Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_not_re_6398": "La reutilización de la resolución de la directiva de referencia de tipo \"{0}\" de \"{1}\" que se encuentra en la memoria caché desde la ubicación \"{2}\" no se resolvió.",
+  "Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_succes_6396": "La reutilización de la resolución de la directiva de referencia de tipo \"{0}\" de \"{1}\" que se encuentra en la memoria caché desde la ubicación \"{2}\" se resolvió correctamente en \"{3}\".",
+  "Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_succes_6397": "La reutilización de la resolución de la directiva de referencia de tipo \"{0}\" de \"{1}\" que se encuentra en la memoria caché desde la ubicación \"{2}\" se resolvió correctamente en \"{3}\" con el identificador del paquete \"{4}\".",
+  "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_not_resolved_6392": "La reutilización de la resolución de la directiva de referencia de tipo \"{0}\" de \"{1}\" del programa anterior no se resolvió.",
+  "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved__6390": "La reutilización de la resolución de la directiva de referencia de tipo \"{0}\" de \"{1}\" del programa anterior se resolvió correctamente en \"{2}\".",
+  "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved__6391": "La reutilización de la resolución de la directiva de referencia de tipo \"{0}\" de \"{1}\" del programa anterior se resolvió correctamente en \"{2}\" con el identificador de paquete \"{3}\".",
   "Rewrite_all_as_indexed_access_types_95034": "Reescribir todo como tipos de acceso indexados",
   "Rewrite_as_the_indexed_access_type_0_90026": "Reescribir como tipo de acceso indexado \"{0}\"",
   "Root_directory_cannot_be_determined_skipping_primary_search_paths_6122": "No se puede determinar el directorio raíz, se omitirán las rutas de búsqueda principales.",
+  "Root_file_specified_for_compilation_1427": "Archivo raíz especificado para la compilación",
   "STRATEGY_6039": "ESTRATEGIA",
+  "Save_tsbuildinfo_files_to_allow_for_incremental_compilation_of_projects_6642": "Guarde archivos .tsbuildinfo para permitir la compilación incremental de proyectos.",
   "Scoped_package_detected_looking_in_0_6182": "Se detectó un paquete con ámbito al buscar en \"{0}\"",
+  "Selection_is_not_a_valid_statement_or_statements_95155": "La selección no es una instrucción ni instrucciones válidas",
   "Selection_is_not_a_valid_type_node_95133": "La selección no es un nodo de tipo válido",
+  "Set_the_JavaScript_language_version_for_emitted_JavaScript_and_include_compatible_library_declaratio_6705": "Establezca la versión del lenguaje de JavaScript para las JavaScript emitidas e incluya las declaraciones de bibliotecas compatibles.",
+  "Set_the_language_of_the_messaging_from_TypeScript_This_does_not_affect_emit_6654": "Establezca el lenguaje de la mensajería de TypeScript. No afecta a la emisión.",
   "Set_the_module_option_in_your_configuration_file_to_0_95099": "Establecer la opción \"module\" del archivo de configuración en \"{0}\"",
+  "Set_the_newline_character_for_emitting_files_6659": "Establezca el carácter de nueva línea para emitir archivos.",
   "Set_the_target_option_in_your_configuration_file_to_0_95098": "Establecer la opción \"target\" del archivo de configuración en \"{0}\"",
   "Setters_cannot_return_a_value_2408": "Los establecedores no pueden devolver un valor.",
   "Show_all_compiler_options_6169": "Mostrar todas las opciones de compilador.",
@@ -1069,31 +1265,63 @@
   "Show_verbose_diagnostic_information_6150": "Mostrar información de diagnóstico detallada.",
   "Show_what_would_be_built_or_deleted_if_specified_with_clean_6367": "Mostrar lo que podría compilarse (o eliminarse, si se especifica con \"--clean\")",
   "Signature_0_must_be_a_type_predicate_1224": "La signatura '{0}' debe tener un predicado de tipo.",
+  "Skip_type_checking_all_d_ts_files_6693": "Omita la comprobación de tipos de todos los archivos .d.ts.",
+  "Skip_type_checking_d_ts_files_that_are_included_with_TypeScript_6692": "Omita la comprobación de tipos de archivo .d.ts que se incluyen con TypeScript.",
   "Skip_type_checking_of_declaration_files_6012": "Omita la comprobación de tipos de los archivos de declaración.",
   "Skipping_build_of_project_0_because_its_dependency_1_has_errors_6362": "Omitiendo la compilación del proyecto \"{0}\" porque su dependencia \"{1}\" tiene errores",
   "Skipping_build_of_project_0_because_its_dependency_1_was_not_built_6382": "Omitiendo la compilación del proyecto \"{0}\" porque su dependencia \"{1}\" no se ha compilado",
-  "Source_Map_Options_6175": "Opciones de mapa de origen",
+  "Source_from_referenced_project_0_included_because_1_specified_1414": "El origen del proyecto \"{0}\" al que se hace referencia se ha incluido porque se ha especificado \"{1}\".",
+  "Source_from_referenced_project_0_included_because_module_is_specified_as_none_1415": "El origen del proyecto \"{0}\" al que se hace referencia se ha incluido porque \"--module\" se ha especificado como \"none\".",
   "Source_has_0_element_s_but_target_allows_only_1_2619": "El origen tiene {0} elemento(s), pero el destino solo permite {1}.",
   "Source_has_0_element_s_but_target_requires_1_2618": "El origen tiene {0} elemento(s), pero el destino requiere {1}.",
+  "Source_provides_no_match_for_required_element_at_position_0_in_target_2623": "El origen no proporciona ninguna coincidencia para el elemento requerido en la posición {0} del destino.",
+  "Source_provides_no_match_for_variadic_element_at_position_0_in_target_2624": "El origen no proporciona ninguna coincidencia para el elemento variádico en la posición {0} del destino.",
   "Specialized_overload_signature_is_not_assignable_to_any_non_specialized_signature_2382": "La signatura de sobrecarga especializada no se puede asignar a ninguna signatura no especializada.",
   "Specifier_of_dynamic_import_cannot_be_spread_element_1325": "El especificador de importación dinámica no puede ser un elemento de propagación.",
-  "Specify_ECMAScript_target_version_Colon_ES3_default_ES5_ES2015_ES2016_ES2017_ES2018_ES2019_ES2020_or_6015": "Especifique la versión de destino de ECMAScript: \"ES3\" (predeterminada), \"ES5\", \"ES2015\", \"ES2016\", \"ES2017\", \"ES2018\", \"ES2019\", \"ES2020\" o \"ESNEXT\".",
-  "Specify_JSX_code_generation_Colon_preserve_react_native_or_react_6080": "Especifique la generación de código JSX: \"preserve\", \"react-native\" o \"react\".",
-  "Specify_emit_Slashchecking_behavior_for_imports_that_are_only_used_for_types_1368": "Especificar el comportamiento de emisión o comprobación para las importaciones que solo se usan para los tipos",
+  "Specify_ECMAScript_target_version_6015": "Especifique la versión de destino de ECMAScript.",
+  "Specify_JSX_code_generation_6080": "Especifique la generación de código JSX.",
+  "Specify_a_file_that_bundles_all_outputs_into_one_JavaScript_file_If_declaration_is_true_also_designa_6679": "Especifique un archivo que agrupe todos los resultados en un único archivo JavaScript. Si \"declaration\" se cumple, designe también un archivo que agrupe todos los resultados .d.ts.",
+  "Specify_a_list_of_glob_patterns_that_match_files_to_be_included_in_compilation_6641": "Especifique una lista de patrones globales que coincidan con los archivos que se incluirán en la compilación.",
+  "Specify_a_list_of_language_service_plugins_to_include_6681": "Especifique una lista de complementos de servicio de lenguaje para incluirlos.",
+  "Specify_a_set_of_bundled_library_declaration_files_that_describe_the_target_runtime_environment_6651": "Especifique un conjunto de archivos de declaración de biblioteca agrupados que describan el entorno de tiempo de ejecución de destino.",
+  "Specify_a_set_of_entries_that_re_map_imports_to_additional_lookup_locations_6680": "Especifique un conjunto de entradas que reasignan las importaciones a ubicaciones de búsqueda adicionales.",
+  "Specify_an_array_of_objects_that_specify_paths_for_projects_Used_in_project_references_6687": "Especifique una matriz de objetos que especifique las rutas de acceso a los proyectos. Usada en las referencias del proyecto.",
+  "Specify_an_output_folder_for_all_emitted_files_6678": "Especifique una carpeta de salida para todos los archivos emitidos.",
+  "Specify_emit_Slashchecking_behavior_for_imports_that_are_only_used_for_types_6718": "Especificar el comportamiento de emisión o comprobación para las importaciones que solo se usan para los tipos",
   "Specify_file_to_store_incremental_compilation_information_6380": "Especificar un archivo para almacenar la información de compilación incremental",
+  "Specify_how_TypeScript_looks_up_a_file_from_a_given_module_specifier_6658": "Especifique cómo busca TypeScript un archivo a partir del especificador de módulo que se le indique.",
+  "Specify_how_directories_are_watched_on_systems_that_lack_recursive_file_watching_functionality_6714": "Especifique cómo se vigilan los directorios en los sistemas que carecen de la funcionalidad de vigilancia recursiva de archivos.",
+  "Specify_how_the_TypeScript_watch_mode_works_6715": "Especifique cómo funciona el modo de inspección de TypeScript.",
   "Specify_library_files_to_be_included_in_the_compilation_6079": "Especifique los archivos de biblioteca que se van a incluir en la compilación.",
-  "Specify_module_code_generation_Colon_none_commonjs_amd_system_umd_es2015_es2020_or_ESNext_6016": "Especifique la generación de código del módulo: \"none\", \"commonjs\", \"amd\", \"system\", \"umd\", \"es2015\", \"es2020\" o \"ESNext\".",
+  "Specify_module_code_generation_6016": "Especifique la generación de código del módulo.",
   "Specify_module_resolution_strategy_Colon_node_Node_js_or_classic_TypeScript_pre_1_6_6069": "Especifique la estrategia de resolución de módulos: 'node' (Node.js) o 'classic' (TypeScript pre-1.6).",
-  "Specify_strategy_for_creating_a_polling_watch_when_it_fails_to_create_using_file_system_events_Colon_6227": "Especifique la estrategia para crear una inspección de sondeo cuando no se pueda crear con eventos del sistema de archivos: \"FixedInterval\" (valor predeterminado), \"PriorityInterval\", \"DynamicPriority\".",
-  "Specify_strategy_for_watching_directory_on_platforms_that_don_t_support_recursive_watching_natively__6226": "Especifique la estrategia para inspeccionar el directorio en las plataformas que no admiten las inspecciones recursivas de forma nativa: \"UseFsEvents\" (valor predeterminado), \"FixedPollingInterval\", \"DynamicPriorityPolling\".",
-  "Specify_strategy_for_watching_file_Colon_FixedPollingInterval_default_PriorityPollingInterval_Dynami_6225": "Especifique la estrategia para inspeccionar el archivo: \"FixedPollingInterval\" (valor predeterminado), \"PriorityPollingInterval\", \"DynamicPriorityPolling\", \"UseFsEvents\", \"UseFsEventsOnParentDirectory\".",
+  "Specify_module_specifier_used_to_import_the_JSX_factory_functions_when_using_jsx_Colon_react_jsx_Ast_6649": "Especifique el especificador de módulo utilizado para importar las funciones de fábrica de JSX cuando se usa \"jsx: react-jsx *\".",
+  "Specify_multiple_folders_that_act_like_Slashnode_modules_Slash_types_6710": "Especifique varias carpetas que actúen como \"./node_modules/@types\".",
+  "Specify_one_or_more_path_or_node_module_references_to_base_configuration_files_from_which_settings_a_6633": "Especifique una o varias referencias de ruta o de módulo de nodo a los archivos de configuración base desde los que se herede la configuración.",
+  "Specify_options_for_automatic_acquisition_of_declaration_files_6709": "Especifique las opciones para la adquisición automática de los archivos de declaración.",
+  "Specify_strategy_for_creating_a_polling_watch_when_it_fails_to_create_using_file_system_events_Colon_6227": "Especifique la estrategia para crear una inspección de sondeo cuando no se pueda crear con eventos del sistema de archivos: \"FixedInterval\" (valor predeterminado), \"PriorityInterval\", \"DynamicPriority\", \"FixedChunkSize\".",
+  "Specify_strategy_for_watching_directory_on_platforms_that_don_t_support_recursive_watching_natively__6226": "Especifique la estrategia para inspeccionar el directorio en las plataformas que no admiten las inspecciones recursivas de forma nativa: \"UseFsEvents\" (valor predeterminado), \"FixedPollingInterval\", \"DynamicPriorityPolling\", \"FixedChunkSizePolling\".",
+  "Specify_strategy_for_watching_file_Colon_FixedPollingInterval_default_PriorityPollingInterval_Dynami_6225": "Especifique la estrategia para inspeccionar el archivo: \"FixedPollingInterval\" (valor predeterminado), \"PriorityPollingInterval\", \"DynamicPriorityPolling\", \"FixedChunkSizePolling\", \"UseFsEvents\", \"UseFsEventsOnParentDirectory\".",
+  "Specify_the_JSX_Fragment_reference_used_for_fragments_when_targeting_React_JSX_emit_e_g_React_Fragme_6648": "Especifique la referencia de fragmento de JSX utilizada para los fragmentos cuando se dirige a la emisión de JSX de React, por ejemplo, \"React.Fragment\" o \"Fragment\".",
   "Specify_the_JSX_factory_function_to_use_when_targeting_react_JSX_emit_e_g_React_createElement_or_h_6146": "Especifique la función de generador JSX que se usará cuando el destino sea la emisión de JSX \"react\"; por ejemplo, \"React.createElement\" o \"h\".",
+  "Specify_the_JSX_factory_function_used_when_targeting_React_JSX_emit_e_g_React_createElement_or_h_6647": "Especifique la función de fábrica de JSX utilizada cuando se dirige a la emisión de JSX de React, por ejemplo, \"React.createElement\" o \"h\"",
   "Specify_the_JSX_fragment_factory_function_to_use_when_targeting_react_JSX_emit_with_jsxFactory_compi_18034": "Especifique la función de la fábrica de fragmentos de JSX que se va a usar cuando se especifique como destino la emisión de JSX \"react\" con la opción del compilador \"jsxFactory\", por ejemplo, \"fragmento\".",
+  "Specify_the_base_directory_to_resolve_non_relative_module_names_6607": "Especifique el directorio base para resolver nombres de módulos no relativos.",
   "Specify_the_end_of_line_sequence_to_be_used_when_emitting_files_Colon_CRLF_dos_or_LF_unix_6060": "Especifique la secuencia de final de línea que debe usarse para emitir archivos: 'CRLF' (Dos) o 'LF' (Unix).",
+  "Specify_the_folder_for_tsbuildinfo_incremental_compilation_files_6707": "Especifique la carpeta para los archivos de compilación incremental .tsbuildinfo.",
   "Specify_the_location_where_debugger_should_locate_TypeScript_files_instead_of_source_locations_6004": "Especifique la ubicación donde el depurador debe colocar los archivos de TypeScript en lugar de sus ubicaciones de origen.",
-  "Specify_the_location_where_debugger_should_locate_map_files_instead_of_generated_locations_6003": "Especifique la ubicación donde el depurador debe colocar los archivos de asignaciones en lugar de las ubicaciones generadas.",
-  "Specify_the_module_specifier_to_be_used_to_import_the_jsx_and_jsxs_factory_functions_from_eg_react_6238": "Especifique el especificador de módulo que se va a usar como origen de importación de las funciones de fábrica \"jsx\" y \"jsxs\"; por ejemplo, react",
+  "Specify_the_location_where_debugger_should_locate_map_files_instead_of_generated_locations_6655": "Especifique la ubicación donde el depurador debe colocar los archivos de asignaciones en lugar de las ubicaciones generadas.",
+  "Specify_the_maximum_folder_depth_used_for_checking_JavaScript_files_from_node_modules_Only_applicabl_6656": "Especifique la profundidad máxima de carpeta usada para comprobar archivos JavaScript de \"node_modules\". Solo es compatible con \"allowJs\".",
+  "Specify_the_module_specifier_to_be_used_to_import_the_jsx_and_jsxs_factory_functions_from_eg_react_6238": "Especifique el especificador de módulo que se va a usar para importar las funciones de fábrica \"jsx\" y \"jsxs\"; por ejemplo, react",
+  "Specify_the_object_invoked_for_createElement_This_only_applies_when_targeting_react_JSX_emit_6686": "Especifique el objeto que se invoca para \"createElement\". Esto solo se aplica cuando el objetivo es emitir el JSX \"react\".",
+  "Specify_the_output_directory_for_generated_declaration_files_6613": "Especifique el directorio de salida para los archivos de declaración generados.",
   "Specify_the_root_directory_of_input_files_Use_to_control_the_output_directory_structure_with_outDir_6058": "Especifique el directorio raíz de los archivos de entrada. Úselo para controlar la estructura del directorio de salida con --outDir.",
+  "Specify_the_root_folder_within_your_source_files_6690": "Especifique la carpeta raíz en los archivos de código fuente.",
+  "Specify_the_root_path_for_debuggers_to_find_the_reference_source_code_6695": "Especifique la ruta raíz para que los depuradores encuentren el código de origen de referencia.",
+  "Specify_type_package_names_to_be_included_without_being_referenced_in_a_source_file_6711": "Especifique los nombres de los paquetes de tipo que se incluyen sin ser referenciados en un archivo fuente.",
+  "Specify_what_JSX_code_is_generated_6646": "Especifique qué código de JSX se generará.",
+  "Specify_what_approach_the_watcher_should_use_if_the_system_runs_out_of_native_file_watchers_6634": "Especifique el enfoque que debe usar el monitor si el sistema agota los monitores de archivos nativos.",
+  "Specify_what_module_code_is_generated_6657": "Especifique qué código de módulo se generará.",
   "Split_all_invalid_type_only_imports_1367": "Dividir todas las importaciones solo de tipo no válidas",
   "Split_into_two_separate_import_declarations_1366": "Dividir en dos declaraciones de importación independientes",
   "Spread_operator_in_new_expressions_is_only_available_when_targeting_ECMAScript_5_and_higher_2472": "El operador spread de las expresiones \"new\" solo está disponible si el destino es ECMAScript 5 y versiones posteriores.",
@@ -1101,9 +1329,9 @@
   "Starting_compilation_in_watch_mode_6031": "Iniciando la compilación en modo de inspección...",
   "Statement_expected_1129": "Se esperaba una instrucción.",
   "Statements_are_not_allowed_in_ambient_contexts_1036": "No se permiten instrucciones en los contextos de ambiente.",
+  "Static_fields_with_private_names_can_t_have_initializers_when_the_useDefineForClassFields_flag_is_no_2805": "Los campos estáticos con nombres privados no pueden tener inicializadores si la marca \"--useDefineForClassFields\" no se especifica con un valor \"--target\" de \"esnext\". Pruebe a agregar la marca \"--useDefineForClassFields\".",
   "Static_members_cannot_reference_class_type_parameters_2302": "Los miembros estáticos no pueden hacer referencia a parámetros de tipo de clase.",
   "Static_property_0_conflicts_with_built_in_property_Function_0_of_constructor_function_1_2699": "La propiedad estática \"{0}\" está en conflicto con la propiedad integrada \"Function.{0}\" de la función de constructor \"{1}\".",
-  "Strict_Type_Checking_Options_6173": "Opciones de comprobación de tipos estricta",
   "String_literal_expected_1141": "Se esperaba un literal de cadena.",
   "String_literal_with_double_quotes_expected_1327": "Se esperaba un literal de cadena entre comillas dobles.",
   "Stylize_errors_and_messages_using_color_and_context_experimental_6073": "Use color y contexto para estilizar los errores y los mensajes (experimental).",
@@ -1117,9 +1345,10 @@
   "Super_calls_are_not_permitted_outside_constructors_or_in_nested_functions_inside_constructors_2337": "No se permiten llamadas a \"super\" fuera de los constructores o en funciones anidadas dentro de estos.",
   "Suppress_excess_property_checks_for_object_literals_6072": "Suprima las comprobaciones de propiedades en exceso de los literales de objeto.",
   "Suppress_noImplicitAny_errors_for_indexing_objects_lacking_index_signatures_6055": "Eliminar errores de noImplicitAny para los objetos de indexación a los que les falten firmas de índice.",
+  "Suppress_noImplicitAny_errors_when_indexing_objects_that_lack_index_signatures_6703": "Suprima los errores de \"noImplicitAny\" cuando indexe objetos que no tengan ninguna signatura de índice.",
   "Switch_each_misused_0_to_1_95138": "Cambie cada elemento \"{0}\" usado incorrectamente a \"{1}\"",
   "Symbol_reference_does_not_refer_to_the_global_Symbol_constructor_object_2470": "La referencia \"Symbol\" no hace referencia al objeto de constructor Symbol global.",
-  "Synchronously_call_callbacks_and_update_the_state_of_directory_watchers_on_platforms_that_don_t_supp_6228": "Llame a las devoluciones de llamada de forma sincrónica y actualice el estado de los monitores de directorio en las plataformas que no admitan la supervisión recursiva de forma nativa.",
+  "Synchronously_call_callbacks_and_update_the_state_of_directory_watchers_on_platforms_that_don_t_supp_6704": "Llame a las devoluciones de llamada de forma sincrónica y actualice el estado de los monitores de directorio en las plataformas que no admitan la supervisión recursiva de forma nativa.",
   "Syntax_Colon_0_6023": "Sintaxis: {0}",
   "Tag_0_expects_at_least_1_arguments_but_the_JSX_factory_2_provides_at_most_3_6229": "La etiqueta \"{0}\" espera al menos \"{1}\" argumentos, pero el generador de JSX \"{2}\" proporciona como máximo \"{3}\".",
   "Tagged_template_expressions_are_not_permitted_in_an_optional_chain_1358": "No se permiten expresiones de plantilla con etiquetas en una cadena opcional.",
@@ -1141,10 +1370,12 @@
   "The_containing_function_or_module_body_is_too_large_for_control_flow_analysis_2563": "El cuerpo de la función o del módulo contenedor es demasiado grande para realizar un análisis de flujo de control.",
   "The_current_host_does_not_support_the_0_option_5001": "El host actual no admite la opción '{0}'.",
   "The_declaration_of_0_that_you_probably_intended_to_use_is_defined_here_18018": "La declaración de \"{0}\" que probablemente pretendía usar se define aquí",
+  "The_declaration_was_marked_as_deprecated_here_2798": "La declaración se ha marcado aquí como en desuso.",
   "The_expected_type_comes_from_property_0_which_is_declared_here_on_type_1_6500": "El tipo esperado procede de la propiedad \"{0}\", que se declara aquí en el tipo \"{1}\"",
   "The_expected_type_comes_from_the_return_type_of_this_signature_6502": "El tipo esperado procede del tipo de valor devuelto de esta signatura.",
   "The_expected_type_comes_from_this_index_signature_6501": "El tipo esperado procede de esta signatura de índice.",
   "The_expression_of_an_export_assignment_must_be_an_identifier_or_qualified_name_in_an_ambient_context_2714": "La expresión de una asignación de exportación debe ser un identificador o un nombre completo en un contexto de ambiente.",
+  "The_file_is_in_the_program_because_Colon_1430": "El archivo está en el programa porque:",
   "The_files_list_in_config_file_0_is_empty_18002": "La lista de archivos del archivo de configuración '{0}' está vacía.",
   "The_first_export_default_is_here_2752": "El primer elemento export default está aquí.",
   "The_first_parameter_of_the_then_method_of_a_promise_must_be_a_callback_1060": "El primer parámetro del método \"then\" de una promesa debe ser una devolución de llamada.",
@@ -1168,6 +1399,7 @@
   "The_left_hand_side_of_a_for_in_statement_must_be_of_type_string_or_any_2405": "La parte izquierda de una instrucción \"for...in\" debe ser de tipo \"string\" o \"any\".",
   "The_left_hand_side_of_a_for_of_statement_cannot_use_a_type_annotation_2483": "La parte izquierda de una instrucción \"for...of\" no puede usar una anotación de tipo.",
   "The_left_hand_side_of_a_for_of_statement_may_not_be_an_optional_property_access_2781": "La parte izquierda de una instrucción \"for...of\" no puede ser un acceso de propiedad opcional.",
+  "The_left_hand_side_of_a_for_of_statement_may_not_be_async_1106": "El lado izquierdo de una instrucción de \"para... de\" puede no ser \"async\".",
   "The_left_hand_side_of_a_for_of_statement_must_be_a_variable_or_a_property_access_2487": "La parte izquierda de una instrucción 'for...of' debe ser una variable o el acceso a una propiedad.",
   "The_left_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type_2362": "La parte izquierda de una operación aritmética debe ser de tipo \"any\", \"number\", \"bigint\" o un tipo de enumeración.",
   "The_left_hand_side_of_an_assignment_expression_may_not_be_an_optional_property_access_2779": "La parte izquierda de una expresión de asignación no puede ser un acceso de propiedad opcional.",
@@ -1185,15 +1417,18 @@
   "The_parser_expected_to_find_a_to_match_the_token_here_1007": "El analizador esperaba encontrar un elemento \"}\" que coincidiera con el del token \"{\" aquí.",
   "The_property_0_cannot_be_accessed_on_type_1_within_this_class_because_it_is_shadowed_by_another_priv_18014": "No se puede acceder a la propiedad \"{0}\" en el tipo \"{1}\" de esta clase porque se ha reemplazado por otro identificador privado con la misma ortografía.",
   "The_return_type_of_a_JSX_element_constructor_must_return_an_object_type_2601": "El tipo de valor devuelto de un constructor de elemento JSX debe devolver un tipo de objeto.",
+  "The_return_type_of_a_get_accessor_must_be_assignable_to_its_set_accessor_type_2380": "El tipo de valor devuelto de un descriptor de acceso \"get\" debe poder asignarse a su tipo de descriptor de acceso \"set\".",
   "The_return_type_of_a_parameter_decorator_function_must_be_either_void_or_any_1237": "El tipo de valor devuelto de una función Decorator de parámetro debe ser \"void\" o \"any\".",
   "The_return_type_of_a_property_decorator_function_must_be_either_void_or_any_1236": "El tipo de valor devuelto de una función Decorator de propiedad debe ser \"void\" o \"any\".",
   "The_return_type_of_an_async_function_must_either_be_a_valid_promise_or_must_not_contain_a_callable_t_1058": "El tipo de valor devuelto de una función asincrónica debe ser una promesa válida o no debe contener un miembro \"then\" invocable.",
   "The_return_type_of_an_async_function_or_method_must_be_the_global_Promise_T_type_Did_you_mean_to_wri_1064": "El tipo de valor devuelto de una función o un método asincrónicos debe ser el tipo Promise<T> global. ¿Pretendía escribir \"Promise<{0}>\"?",
   "The_right_hand_side_of_a_for_in_statement_must_be_of_type_any_an_object_type_or_a_type_parameter_but_2407": "La parte derecha de una instrucción \"for...in\" debe ser de tipo \"any\", un tipo de objeto o un parámetro de tipo, pero aquí tiene el tipo \"{0}\".",
   "The_right_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type_2363": "La parte derecha de una operación aritmética debe ser de tipo \"any\", \"number\", \"bigint\" o un tipo de enumeración.",
-  "The_right_hand_side_of_an_in_expression_must_be_of_type_any_an_object_type_or_a_type_parameter_2361": "La parte derecha de una expresión \"in\" debe ser de tipo \"any\", un tipo de objeto o un parámetro de tipo.",
+  "The_right_hand_side_of_an_in_expression_must_not_be_a_primitive_2361": "La parte derecha de una expresión \"in\" no debe ser un elemento primitivo.",
   "The_right_hand_side_of_an_instanceof_expression_must_be_of_type_any_or_of_a_type_assignable_to_the_F_2359": "La parte derecha de una expresión \"instanceof\" debe ser de tipo \"any\" o un tipo que pueda asignarse al tipo de interfaz \"Function\".",
+  "The_root_value_of_a_0_file_must_be_an_object_5092": "El valor raíz de un archivo \"{0}\" debe ser un objeto.",
   "The_shadowing_declaration_of_0_is_defined_here_18017": "La declaración que ensombrece a \"{0}\" se define aquí.",
+  "The_signature_0_of_1_is_deprecated_6387": "La signatura \"{0}\" de \"{1}\" está en desuso.",
   "The_specified_path_does_not_exist_Colon_0_5058": "La ruta de acceso especificada no existe: \"{0}\".",
   "The_tag_was_first_specified_here_8034": "La etiqueta se especificó aquí primero.",
   "The_target_of_an_assignment_must_be_a_variable_or_a_property_access_2541": "El destino de la asignación debe ser una variable o el acceso a una propiedad.",
@@ -1204,6 +1439,7 @@
   "The_type_0_is_readonly_and_cannot_be_assigned_to_the_mutable_type_1_4104": "El tipo \"{0}\" es \"readonly\" y no se puede asignar al tipo mutable \"{1}\".",
   "The_type_argument_for_type_parameter_0_cannot_be_inferred_from_the_usage_Consider_specifying_the_typ_2453": "El argumento de tipo del parámetro de tipo '{0}' no se puede inferir del uso. Puede especificar los argumentos de tipo explícitamente.",
   "The_type_of_a_function_declaration_must_match_the_function_s_signature_8030": "El tipo de una declaración de función debe coincidir con la signatura de la función.",
+  "The_type_of_this_node_cannot_be_serialized_because_its_property_0_cannot_be_serialized_4118": "No se ha podido serializar el tipo de este nodo porque su propiedad '{0}' no se puede serializar.",
   "The_type_returned_by_the_0_method_of_an_async_iterator_must_be_a_promise_for_a_type_with_a_value_pro_2547": "El tipo devuelto por el método \"{0}()\" de un iterador de asincronía debe ser una promesa para un tipo con una propiedad \"value\".",
   "The_type_returned_by_the_0_method_of_an_iterator_must_have_a_value_property_2490": "El tipo devuelto por el método \"{0}()\" de un iterador debe tener una propiedad \"value\".",
   "The_types_of_0_are_incompatible_between_these_types_2200": "Los tipos de \"{0}\" son incompatibles entre estos tipos.",
@@ -1214,7 +1450,8 @@
   "This_JSX_tag_s_0_prop_expects_a_single_child_of_type_1_but_multiple_children_were_provided_2746": "La propiedad \"{0}\" de esta etiqueta de JSX espera un solo elemento secundario de tipo \"{1}\", pero se han proporcionado varios elementos secundarios.",
   "This_JSX_tag_s_0_prop_expects_type_1_which_requires_multiple_children_but_only_a_single_child_was_pr_2745": "La propiedad \"{0}\" de esta etiqueta de JSX espera el tipo \"{1}\", que requiere varios elementos secundarios, pero solo se ha proporcionado un elemento secundario.",
   "This_condition_will_always_return_0_since_the_types_1_and_2_have_no_overlap_2367": "Esta condición siempre devolverá \"{0}\", porque los tipos \"{1}\" y \"{2}\" no se superponen.",
-  "This_condition_will_always_return_true_since_the_function_is_always_defined_Did_you_mean_to_call_it__2774": "Esta condición siempre devolverá true, porque la función se define siempre. ¿Pretendía llamarla en su lugar?",
+  "This_condition_will_always_return_true_since_this_0_is_always_defined_2801": "Esta condición devolverá siempre true porque siempre se define '{0}'.",
+  "This_condition_will_always_return_true_since_this_function_is_always_defined_Did_you_mean_to_call_it_2774": "Esta condición siempre devolverá true, porque esta función se define siempre. ¿Pretendía llamarla en su lugar?",
   "This_constructor_function_may_be_converted_to_a_class_declaration_80002": "Esta función de constructor puede convertirse en una declaración de clase.",
   "This_expression_is_not_callable_2349": "No se puede llamar a esta expresión.",
   "This_expression_is_not_callable_because_it_is_a_get_accessor_Did_you_mean_to_use_it_without_6234": "No se puede llamar a esta expresión porque es un descriptor de acceso \"get\". ¿Pretendía usarlo sin \"()\"?",
@@ -1223,15 +1460,23 @@
   "This_import_is_never_used_as_a_value_and_must_use_import_type_because_importsNotUsedAsValues_is_set__1371": "Esta importación nunca se usa como valor y debe utilizar \"import type\" porque \"importsNotUsedAsValues\" está establecido en \"error\".",
   "This_is_the_declaration_being_augmented_Consider_moving_the_augmenting_declaration_into_the_same_fil_6233": "Esta es la declaración que se está aumentando. Considere la posibilidad de mover la declaración en aumento al mismo archivo.",
   "This_may_be_converted_to_an_async_function_80006": "Puede convertirse en una función asincrónica.",
+  "This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0_4113": "Este miembro no puede tener un modificador \"override\" porque no está declarado en la clase base \"{0}\".",
+  "This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0_Did_you__4117": "Este miembro no puede tener un modificador \"override\" porque no está declarado en la clase base \"{0}\". ¿Quizá quiso decir \"{1}\"?",
+  "This_member_cannot_have_an_override_modifier_because_its_containing_class_0_does_not_extend_another__4112": "Este miembro no puede tener un modificador \"override\" porque su clase contenedora \"{0}\" no extiende otra clase.",
+  "This_member_must_have_an_override_modifier_because_it_overrides_a_member_in_the_base_class_0_4114": "Este miembro debe tener un modificador \"override\" porque reemplaza a un miembro en la clase base \"{0}\".",
+  "This_member_must_have_an_override_modifier_because_it_overrides_an_abstract_method_that_is_declared__4116": "Este miembro debe tener un modificador \"override\" porque reemplaza a un método abstracto que se declara en la clase base \"{0}\".",
   "This_module_can_only_be_referenced_with_ECMAScript_imports_Slashexports_by_turning_on_the_0_flag_and_2497": "Solo se puede hacer referencia a este módulo con las importaciones o exportaciones de ECMAScript mediante la activación de la marca \"{0}\" y la referencia a su exportación predeterminada.",
   "This_module_is_declared_with_using_export_and_can_only_be_used_with_a_default_import_when_using_the__2594": "Este módulo se declara con \"export =\" y solo se puede usar con una importación predeterminada cuando se usa la marca \"{0}\".",
   "This_overload_signature_is_not_compatible_with_its_implementation_signature_2394": "Esta signatura de sobrecarga no es compatible con su signatura de implementación.",
   "This_parameter_is_not_allowed_with_use_strict_directive_1346": "Este parámetro no se permite con la directiva \"use strict\".",
+  "This_parameter_property_must_have_an_override_modifier_because_it_overrides_a_member_in_base_class_0_4115": "Esta propiedad de parámetro debe tener un modificador \"override\" porque reemplaza a un miembro en la clase base \"{0}\".",
   "This_spread_always_overwrites_this_property_2785": "Este elemento de propagación siempre sobrescribe esta propiedad.",
   "This_syntax_requires_an_imported_helper_but_module_0_cannot_be_found_2354": "Esta sintaxis requiere un asistente importado, pero no se puede encontrar el módulo \"{0}\".",
   "This_syntax_requires_an_imported_helper_named_1_which_does_not_exist_in_0_Consider_upgrading_your_ve_2343": "Esta sintaxis requiere una aplicación auxiliar importada denominada \"{1}\", que no existe en \"{0}\". Considere la posibilidad de actualizar la versión de \"{0}\".",
+  "This_syntax_requires_an_imported_helper_named_1_with_2_parameters_which_is_not_compatible_with_the_o_2807": "Esta sintaxis requiere un asistente importado denominado \"{1}\" con parámetros de {2}, que no es compatible con el de \"{0}\". Pruebe a actualizar la versión de \"{0}\".",
   "Top_level_await_expressions_are_only_allowed_when_the_module_option_is_set_to_esnext_or_system_and_t_1378": "Las expresiones \"await\" de nivel superior solo se permiten cuando la opción \"module\" se establece en \"esnext\" o \"system\" y la opción \"target\" se establece en \"es2017\" o posterior.",
   "Top_level_declarations_in_d_ts_files_must_start_with_either_a_declare_or_export_modifier_1046": "Las declaraciones de nivel superior de los archivos .d.ts deben comenzar con un modificador \"declare\" o \"export\".",
+  "Top_level_for_await_loops_are_only_allowed_when_the_module_option_is_set_to_esnext_or_system_and_the_1432": "Los bucles \"for await\" de nivel superior solo se permiten cuando la opción \"module\" se establece en \"esnext\" o \"system\" y la opción \"target\" se establece en \"es2017\" o posterior.",
   "Trailing_comma_not_allowed_1009": "No se permite la coma final.",
   "Transpile_each_file_as_a_separate_module_similar_to_ts_transpileModule_6153": "Transpilar cada archivo como un módulo aparte (parecido a \"ts.transpileModule\").",
   "Try_npm_i_save_dev_types_Slash_1_if_it_exists_or_add_a_new_declaration_d_ts_file_containing_declare__7035": "Pruebe \"npm i --save-dev @types/{1}\" si existe o agregue un nuevo archivo de declaración (.d.ts) que incluya \"declare module '{0}';\".",
@@ -1240,6 +1485,7 @@
   "Tuple_members_must_all_have_names_or_all_not_have_names_5084": "Todos los miembros de tupla deben tener nombres o no debe tenerlo ninguno de ellos.",
   "Tuple_type_0_of_length_1_has_no_element_at_index_2_2493": "El tipo de tupla \"{0}\" de longitud \"{1}\" no tiene ningún elemento en el índice \"{2}\".",
   "Tuple_type_arguments_circularly_reference_themselves_4110": "Los argumentos de tipo de tupla se hacen referencia a sí mismos de forma circular.",
+  "Type_0_can_only_be_iterated_through_when_using_the_downlevelIteration_flag_or_with_a_target_of_es201_2802": "El tipo \"{0}\" solo puede iterarse cuando se usa la marca \"--downlevelIteration\" o con un valor \"--target\" de \"es2015\" o superior.",
   "Type_0_cannot_be_used_as_an_index_type_2538": "El tipo '{0}' no se puede usar como tipo de índice.",
   "Type_0_cannot_be_used_to_index_type_1_2536": "El tipo '{0}' no se puede usar para indexar el tipo '{1}'.",
   "Type_0_does_not_satisfy_the_constraint_1_2344": "El tipo '{0}' no cumple la restricción '{1}'.",
@@ -1264,7 +1510,9 @@
   "Type_0_must_have_a_Symbol_iterator_method_that_returns_an_iterator_2488": "El tipo \"{0}\" debe tener un método \"[Symbol.iterator]()\" que devuelve un iterador.",
   "Type_0_provides_no_match_for_the_signature_1_2658": "El tipo \"{0}\" no proporciona ninguna coincidencia para la signatura \"{1}\".",
   "Type_0_recursively_references_itself_as_a_base_type_2310": "El tipo '{0}' se hace referencia a sí mismo de forma recursiva como tipo base.",
+  "Type_Checking_6248": "Comprobación de tipos",
   "Type_alias_0_circularly_references_itself_2456": "El alias de tipo '{0}' se hace referencia a sí mismo de forma circular.",
+  "Type_alias_must_be_given_a_name_1439": "Se debe asignar un nombre al alias de tipo.",
   "Type_alias_name_cannot_be_0_2457": "El nombre del alias de tipo no puede ser \"{0}\".",
   "Type_aliases_can_only_be_used_in_TypeScript_files_8008": "Los alias de tipo solo se pueden usar en los archivos TypeScript.",
   "Type_annotation_cannot_appear_on_a_constructor_declaration_1093": "Una anotación de tipo no puede aparecer en una declaración de constructor.",
@@ -1276,10 +1524,15 @@
   "Type_arguments_cannot_be_used_here_1342": "No se pueden usar argumentos de tipo aquí.",
   "Type_arguments_for_0_circularly_reference_themselves_4109": "Los argumentos de tipo de \"{0}\" se hacen referencia a sí mismos de forma circular.",
   "Type_assertion_expressions_can_only_be_used_in_TypeScript_files_8016": "Las expresiones de aserción de tipo solo se pueden usar en los archivos TypeScript.",
+  "Type_at_position_0_in_source_is_not_compatible_with_type_at_position_1_in_target_2626": "El tipo en la posición {0} del origen no es compatible con el tipo en la posición {1} del destino.",
+  "Type_at_positions_0_through_1_in_source_is_not_compatible_with_type_at_position_2_in_target_2627": "El tipo en las posiciones {0} a {1} del origen no es compatible con el tipo en la posición {2} del destino.",
+  "Type_catch_clause_variables_as_unknown_instead_of_any_6803": "Escriba las variables de la cláusula catch como 'unknown' en lugar de 'any'.",
   "Type_declaration_files_to_be_included_in_compilation_6124": "Archivos de declaración de tipos que se incluirán en la compilación.",
   "Type_expected_1110": "Se esperaba un tipo.",
   "Type_instantiation_is_excessively_deep_and_possibly_infinite_2589": "La creación de una instancia de tipo es excesivamente profunda y posiblemente infinita.",
   "Type_is_referenced_directly_or_indirectly_in_the_fulfillment_callback_of_its_own_then_method_1062": "Se hace referencia al tipo directa o indirectamente en la devolución de llamada de entrega de su propio método \"then\".",
+  "Type_library_referenced_via_0_from_file_1_1402": "Biblioteca de tipos a la que se hace referencia mediante \"{0}\" desde el archivo \"{1}\"",
+  "Type_library_referenced_via_0_from_file_1_with_packageId_2_1403": "Biblioteca de tipos a la que se hace referencia mediante \"{0}\" desde el archivo \"{1}\" con el valor packageId \"{2}\"",
   "Type_of_await_operand_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member_1320": "El tipo de operando \"await\" debe ser una promesa válida o no debe contener un miembro \"then\" invocable.",
   "Type_of_computed_property_s_value_is_0_which_is_not_assignable_to_type_1_2418": "El tipo de valor de la propiedad calculada es \"{0}\", que no se puede asignar al tipo \"{1}\".",
   "Type_of_iterated_elements_of_a_yield_Asterisk_operand_must_either_be_a_valid_promise_or_must_not_con_1322": "El tipo de elementos iterados de un operando \"yield*\" debe ser una promesa válida o no debe contener un miembro \"then\" invocable.",
@@ -1305,6 +1558,7 @@
   "Type_parameter_name_cannot_be_0_2368": "El nombre del parámetro de tipo no puede ser \"{0}\".",
   "Type_parameters_cannot_appear_on_a_constructor_declaration_1092": "Los parámetros de tipo no pueden aparecer en una declaración de constructor.",
   "Type_predicate_0_is_not_assignable_to_1_1226": "El predicado de tipo '{0}' no se puede asignar a '{1}'.",
+  "Type_produces_a_tuple_type_that_is_too_large_to_represent_2799": "El tipo genera un tipo de tupla demasiado grande para representarlo.",
   "Type_reference_directive_0_was_not_resolved_6120": "======== No se resolvió la directiva de referencia de tipo '{0}'. ========",
   "Type_reference_directive_0_was_successfully_resolved_to_1_primary_Colon_2_6119": "======== La directiva de referencia de tipo '{0}' se resolvió correctamente como '{1}', principal: {2}. ========",
   "Type_reference_directive_0_was_successfully_resolved_to_1_with_Package_ID_2_primary_Colon_3_6219": "======== La directiva de referencia de tipo \"{0}\" se resolvió correctamente como \"{1}\" con el identificador de paquete \"{2}\", principal: {3}. ========",
@@ -1318,6 +1572,7 @@
   "Unable_to_resolve_signature_of_parameter_decorator_when_called_as_an_expression_1239": "No se puede resolver la signatura de elemento Decorator de un parámetro cuando se llama como expresión.",
   "Unable_to_resolve_signature_of_property_decorator_when_called_as_an_expression_1240": "No se puede resolver la signatura de elemento Decorator de una propiedad cuando se llama como expresión.",
   "Unexpected_end_of_text_1126": "Final de texto inesperado.",
+  "Unexpected_keyword_or_identifier_1434": "Identificador o palabra clave inesperados.",
   "Unexpected_token_1012": "Token inesperado.",
   "Unexpected_token_A_constructor_method_accessor_or_property_was_expected_1068": "Token inesperado. Se esperaba un constructor, un método, un descriptor de acceso o una propiedad.",
   "Unexpected_token_A_type_parameter_name_was_expected_without_curly_braces_1069": "Token inesperado. Se esperaba un nombre de parámetro de tipo sin llaves.",
@@ -1328,6 +1583,7 @@
   "Unknown_build_option_0_Did_you_mean_1_5077": "Opción de compilación \"{0}\" desconocida. ¿Pretendía usar \"{1}\"?",
   "Unknown_compiler_option_0_5023": "Opción '{0}' del compilador desconocida.",
   "Unknown_compiler_option_0_Did_you_mean_1_5025": "Opción del compilador \"{0}\" desconocida. ¿Pretendía usar \"{1}\"?",
+  "Unknown_keyword_or_identifier_Did_you_mean_0_1435": "Identificador o palabra clave desconocidos. ¿Quiso decir \"{0}\"?",
   "Unknown_option_excludes_Did_you_mean_exclude_6114": "Opción 'excludes' desconocida. ¿Quería decir 'exclude'?",
   "Unknown_type_acquisition_option_0_17010": "Opción '{0}' de adquisición de tipos desconocida.",
   "Unknown_type_acquisition_option_0_Did_you_mean_1_17018": "Opción de adquisición de tipos \"{0}\" desconocida. ¿Pretendía usar \"{1}\"?",
@@ -1350,6 +1606,7 @@
   "Use_element_access_for_all_undeclared_properties_95146": "Use el acceso de elemento para todas las propiedades no declaradas.",
   "Use_synthetic_default_member_95016": "Use el miembro sintético \"default\".",
   "Using_a_string_in_a_for_of_statement_is_only_supported_in_ECMAScript_5_and_higher_2494": "El uso de una cadena en una instrucción \"for...of\" solo se admite en ECMAScript 5 y versiones posteriores.",
+  "Using_build_b_will_make_tsc_behave_more_like_a_build_orchestrator_than_a_compiler_This_is_used_to_tr_6915": "Con --build, -b hará que tsc se comporte más como un orquestador de compilación que como un compilador. Se usa para desencadenar la compilación de proyectos compuestos, sobre los que puede obtener más información en {0}",
   "Using_compiler_options_of_project_reference_redirect_0_6215": "Uso de las opciones del compilador de redireccionamiento de la referencia del proyecto \"{0}\".",
   "VERSION_6036": "VERSIÓN",
   "Value_of_type_0_has_no_properties_in_common_with_type_1_Did_you_mean_to_call_it_2560": "El valor de tipo \"{0}\" no tiene propiedades en común con el tipo \"{1}\". ¿Realmente quiere llamarlo?",
@@ -1361,10 +1618,16 @@
   "Variable_0_is_used_before_being_assigned_2454": "La variable '{0}' se usa antes de asignarla.",
   "Variable_declaration_expected_1134": "Se esperaba una declaración de variable.",
   "Variable_declaration_list_cannot_be_empty_1123": "La lista de declaraciones de variable no puede estar vacía.",
+  "Variable_declaration_not_allowed_at_this_location_1440": "No se permite una declaración de variable en esta ubicación.",
+  "Variadic_element_at_position_0_in_source_does_not_match_element_at_position_1_in_target_2625": "El elemento variádico en la posición {0} del origen no coincide con el elemento en la posición {1} del destino.",
   "Version_0_6029": "Versión {0}",
   "Visit_https_Colon_Slash_Slashaka_ms_Slashtsconfig_json_to_read_more_about_this_file_95110": "Visite https://aka.ms/tsconfig.json para leer más información sobre este archivo",
+  "WATCH_OPTIONS_6918": "OPCIONES DE INSPECCIÓN",
+  "Watch_and_Build_Modes_6250": "Modos de compilación e inspección",
   "Watch_input_files_6005": "Inspeccionar archivos de entrada.",
   "Watch_option_0_requires_a_value_of_type_1_5080": "La opción \"{0}\" de inspección requiere un valor de tipo {1}.",
+  "When_assigning_functions_check_to_ensure_parameters_and_the_return_values_are_subtype_compatible_6698": "Al asignar funciones, compruebe que efectivamente los parámetros y los valores devueltos son compatibles con el subtipo.",
+  "When_type_checking_take_into_account_null_and_undefined_6699": "En la comprobación de tipos, tenga en cuenta \"null\" y el \"undefined\".",
   "Whether_to_keep_outdated_console_output_in_watch_mode_instead_of_clearing_the_screen_6191": "Si se debe mantener la salida de la consola no actualizada en el modo de inspección en lugar de borrar la pantalla.",
   "Wrap_all_invalid_characters_in_an_expression_container_95109": "Encapsular todos los caracteres no válidos en un contenedor de expresiones",
   "Wrap_all_object_literal_with_parentheses_95116": "Encapsular todos los literales de objeto entre paréntesis",
@@ -1372,10 +1635,12 @@
   "Wrap_in_JSX_fragment_95120": "Ajustar en fragmento de JSX",
   "Wrap_invalid_character_in_an_expression_container_95108": "Encapsular el carácter no válido en un contenedor de expresiones",
   "Wrap_the_following_body_with_parentheses_which_should_be_an_object_literal_95113": "Encapsular el cuerpo siguiente entre paréntesis, lo cual debe ser un literal de objeto",
+  "You_can_learn_about_all_of_the_compiler_options_at_0_6913": "Puede obtener información sobre todas las opciones del compilador en {0}",
   "You_cannot_rename_a_module_via_a_global_import_8031": "No se puede cambiar el nombre de un módulo mediante una importación global.",
   "You_cannot_rename_elements_that_are_defined_in_the_standard_TypeScript_library_8001": "No se puede cambiar el nombre de elementos definidos en la biblioteca TypeScript estándar.",
   "You_cannot_rename_this_element_8000": "No se puede cambiar el nombre a este elemento.",
   "_0_accepts_too_few_arguments_to_be_used_as_a_decorator_here_Did_you_mean_to_call_it_first_and_write__1329": "\"{0}\" no acepta suficientes argumentos para utilizarse como decorador aquí. ¿Pretendía llamar primero y escribir \"@{0}()\"?",
+  "_0_and_1_index_signatures_are_incompatible_2330": "Las signaturas de índice \"{0}\" y \"{1}\" no son compatibles.",
   "_0_and_1_operations_cannot_be_mixed_without_parentheses_5076": "Las operaciones \"{0}\" y \"{1}\" no se pueden mezclar sin paréntesis.",
   "_0_are_specified_twice_The_attribute_named_0_will_be_overwritten_2710": "\"{0}\" se especifica dos veces. El atributo denominado \"{0}\" se sobrescribirá.",
   "_0_can_only_be_imported_by_turning_on_the_esModuleInterop_flag_and_using_a_default_import_2596": "\"{0}\" solo se puede importar si se activa la marca \"esModuleInterop\" y se usa una importación predeterminada.",
@@ -1396,6 +1661,8 @@
   "_0_implicitly_has_an_1_return_type_but_a_better_type_may_be_inferred_from_usage_7050": "\"{0}\" tiene un tipo de valor devuelto \"{1}\" de forma implícita, pero se puede inferir un tipo más adecuado a partir del uso.",
   "_0_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_reference_7023": "'{0}' tiene el tipo de valor devuelto \"any\" implícitamente porque no tiene una anotación de tipo de valor devuelto y se hace referencia a este directa o indirectamente en una de sus expresiones return.",
   "_0_implicitly_has_type_any_because_it_does_not_have_a_type_annotation_and_is_referenced_directly_or__7022": "'{0}' tiene el tipo de valor devuelto \"any\" implícitamente porque no tiene una anotación de tipo y se hace referencia a este directa o indirectamente en su propio inicializador.",
+  "_0_index_signatures_are_incompatible_2634": "Las signaturas de índice \"{0}\" no son compatibles.",
+  "_0_index_type_1_is_not_assignable_to_2_index_type_3_2413": "El tipo de índice \"{0}\"' \"{1}\" no se puede asignar al tipo de índice \"{2}\" \"{3}\".",
   "_0_is_a_primitive_but_1_is_a_wrapper_object_Prefer_using_0_when_possible_2692": "'{0}' es un elemento primitivo, pero '{1}' es un objeto contenedor. Use '{0}' preferentemente cuando sea posible.",
   "_0_is_assignable_to_the_constraint_of_type_1_but_1_could_be_instantiated_with_a_different_subtype_of_5075": "\"{0}\" puede asignarse a la restricción de tipo \"{1}\", pero no se pudo crear una instancia de \"{1}\" con un subtipo distinto de la restricción \"{2}\".",
   "_0_is_declared_but_its_value_is_never_read_6133": "Se declara \"{0}\", pero su valor no se lee nunca.",
@@ -1403,7 +1670,7 @@
   "_0_is_declared_here_2728": "\"{0}\" se declara aquí.",
   "_0_is_defined_as_a_property_in_class_1_but_is_overridden_here_in_2_as_an_accessor_2611": "\"{0}\" se define como propiedad en la clase \"{1}\", pero se reemplaza aquí en \"{2}\" como descriptor de acceso.",
   "_0_is_defined_as_an_accessor_in_class_1_but_is_overridden_here_in_2_as_an_instance_property_2610": "\"{0}\" se define como descriptor de acceso en la clase \"{1}\", pero se reemplaza aquí en \"{2}\" como propiedad de instancia.",
-  "_0_is_deprecated_6385": "\"{0}\" está en desuso",
+  "_0_is_deprecated_6385": "\"{0}\" está en desuso.",
   "_0_is_not_a_valid_meta_property_for_keyword_1_Did_you_mean_2_17012": "\"{0}\" no es una propiedad Meta válida para la palabra clave \"{1}\". ¿Pretendía usar \"{2}\"?",
   "_0_is_not_allowed_as_a_variable_declaration_name_1389": "No se permite \"{0}\" como nombre de declaración de variable.",
   "_0_is_referenced_directly_or_indirectly_in_its_own_base_expression_2506": "Se hace referencia a '{0}' directa o indirectamente en su propia expresión base.",
@@ -1440,6 +1707,7 @@
   "_0_which_lacks_return_type_annotation_implicitly_has_an_1_yield_type_7055": "\"{0}\" carece de una anotación de tipo de valor devuelto, pero tiene un tipo yield \"{1}\" de forma implícita.",
   "abstract_modifier_can_only_appear_on_a_class_method_or_property_declaration_1242": "El modificador 'abstract' solo puede aparecer en una declaración de propiedad, clase o método.",
   "and_here_6204": "y aquí.",
+  "arguments_cannot_be_referenced_in_property_initializers_2815": "no se puede hacer referencia a «arguments» en los inicializadores de propiedad.",
   "await_expressions_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_fi_1375": "Las expresiones \"await\" solo se permiten en el nivel superior de un archivo cuando el archivo es un módulo, pero este archivo no tiene importaciones ni exportaciones. Considere la posibilidad de agregar un elemento \"export {}\" vacío para convertir este archivo en módulo.",
   "await_expressions_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_1308": "Las expresiones \"await\" solo se permiten en las funciones asincrónicas y en los niveles superiores de los módulos.",
   "await_expressions_cannot_be_used_in_a_parameter_initializer_2524": "Las expresiones \"await\" no se pueden usar en un inicializador de parámetros.",
@@ -1456,6 +1724,7 @@
   "const_enums_can_only_be_used_in_property_or_index_access_expressions_or_the_right_hand_side_of_an_im_2475": "Las enumeraciones \"const\" solo se pueden usar en expresiones de acceso de propiedad o índice, o en la parte derecha de una declaración de importación, una asignación de exportación o una consulta de tipo.",
   "constructor_cannot_be_used_as_a_parameter_property_name_2398": "El elemento \"constructor\" no se puede usar como nombre de propiedad de parámetro.",
   "constructor_is_a_reserved_word_18012": "\"#constructor\" es una palabra reservada.",
+  "default_Colon_6903": "predeterminadas:",
   "delete_cannot_be_called_on_an_identifier_in_strict_mode_1102": "No se puede llamar a \"delete\" en un identificador en modo strict.",
   "delete_this_Project_0_is_up_to_date_because_it_was_previously_built_6360": "eliminar esto - El proyecto \"{0}\" está actualizado porque se compiló previamente",
   "export_Asterisk_does_not_re_export_a_default_1195": "\"export *\" no vuelve a exportar una exportación predeterminada.",
@@ -1466,17 +1735,26 @@
   "extends_clause_of_exported_class_0_has_or_is_using_private_name_1_4020": "La cláusula \"extends\" de la clase \"{0}\" exportada tiene o usa el nombre privado \"{1}\".",
   "extends_clause_of_exported_class_has_or_is_using_private_name_0_4021": "La cláusula \"extends\" de la clase exportada tiene o usa el nombre privado \"{0}\".",
   "extends_clause_of_exported_interface_0_has_or_is_using_private_name_1_4022": "La cláusula \"extends\" de la interfaz \"{0}\" exportada tiene o usa el nombre privado \"{1}\".",
+  "false_unless_composite_is_set_6906": "\"false\", a menos que se establezca \"composite\"",
+  "false_unless_strict_is_set_6905": "\"false\", a menos que se establezca como \"strict\"",
   "file_6025": "archivo",
+  "for_await_loops_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_file_1431": "Los bucles \"for await\" solo se permiten en el nivel superior de un archivo cuando el archivo es un módulo, pero este archivo no tiene importaciones ni exportaciones. Considere la posibilidad de agregar un elemento \"export {}\" vacío para convertir este archivo en módulo.",
+  "for_await_loops_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_1103": "Los bucles \"for await\" solo se permiten en las funciones asincrónicas y en los niveles superiores de los módulos.",
   "get_and_set_accessor_must_have_the_same_this_type_2682": "Los descriptores de acceso 'get' y 'set' deben tener el mismo tipo 'this'.",
-  "get_and_set_accessor_must_have_the_same_type_2380": "Los descriptores de acceso \"get\" y \"set\" deben tener el mismo tipo.",
   "get_and_set_accessors_cannot_declare_this_parameters_2784": "Los descriptores de acceso \"get\" y \"set\" no pueden declarar parámetros \"this\".",
+  "if_files_is_specified_otherwise_Asterisk_Asterisk_Slash_Asterisk_6908": "\"[]\", si se especifica \"archivos\"; de lo contrario, \"[\"**/*\"]5D;\"",
   "implements_clause_already_seen_1175": "La cláusula \"implements\" ya se ha visto.",
   "implements_clauses_can_only_be_used_in_TypeScript_files_8005": "Las cláusulas \"implements\" solo se pueden usar en los archivos TypeScript.",
   "import_can_only_be_used_in_TypeScript_files_8002": "\"import ... =\" solo se puede usar en los archivos TypeScript.",
   "infer_declarations_are_only_permitted_in_the_extends_clause_of_a_conditional_type_1338": "Las declaraciones \"infer\" solo se permiten en la cláusula \"extends\" de un tipo condicional.",
   "let_declarations_can_only_be_declared_inside_a_block_1157": "Las declaraciones \"let\" solo se pueden declarar dentro de un bloque.",
   "let_is_not_allowed_to_be_used_as_a_name_in_let_or_const_declarations_2480": "No se permite usar \"let\" como nombre en las declaraciones \"let\" o \"const\".",
+  "module_AMD_or_UMD_or_System_or_ES6_then_Classic_Otherwise_Node_69010": "módulo === \"AMD\" o \"UMD\" o \"System\" o \"ES6\", después, \"Classic\", de lo contrario \"Node\"",
+  "module_system_or_esModuleInterop_6904": "módulo === \"system\" o esModuleInterop",
   "new_expression_whose_target_lacks_a_construct_signature_implicitly_has_an_any_type_7009": "La expresión \"new\", a cuyo destino le falta una signatura de construcción, tiene implícitamente un tipo \"any\".",
+  "node_modules_bower_components_jspm_packages_plus_the_value_of_outDir_if_one_is_specified_6907": "\"[\"node_modules\", \"bower_components\", \"jspm_packages\"]\", más el valor de \"outDir\", si se especifica uno.",
+  "one_of_Colon_6900": "uno de:",
+  "one_or_more_Colon_6901": "uno o más:",
   "options_6024": "Opciones",
   "or_expected_1144": "Se esperaba \"{\" o \";\".",
   "package_json_does_not_have_a_0_field_6100": "\"package.json\" no tiene un campo \"{0}\".",
@@ -1507,6 +1785,9 @@
   "this_cannot_be_referenced_in_constructor_arguments_2333": "No se puede hacer referencia a \"this\" en argumentos de constructor.",
   "this_cannot_be_referenced_in_current_location_2332": "No se puede hacer referencia a \"this\" en la ubicación actual.",
   "this_implicitly_has_type_any_because_it_does_not_have_a_type_annotation_2683": "'this' tiene el tipo implícito 'any' porque no tiene una anotación de tipo.",
+  "true_if_composite_false_otherwise_6909": "\"true\", si \"composite\"; \"false\", en caso contrario",
+  "tsc_Colon_The_TypeScript_Compiler_6922": "tsc: el compilador de TypeScript",
+  "type_Colon_6902": "tipo:",
   "unique_symbol_types_are_not_allowed_here_1335": "Aquí no se permiten tipos \"unique symbol\".",
   "unique_symbol_types_are_only_allowed_on_variables_in_a_variable_statement_1334": "Los tipos \"unique symbol\" se permiten solo en variables en una instrucción de variable.",
   "unique_symbol_types_may_not_be_used_on_a_variable_declaration_with_a_binding_name_1333": "Los tipos \"unique symbol\" no se pueden utilizar en una declaración de variable con un nombre de enlace.",
@@ -1514,5 +1795,6 @@
   "use_strict_directive_used_here_1349": "La directiva \"use strict\" se ha usado aquí.",
   "with_statements_are_not_allowed_in_an_async_function_block_1300": "No se permiten instrucciones \"with\" en un bloque de funciones asincrónicas.",
   "with_statements_are_not_allowed_in_strict_mode_1101": "No se permiten instrucciones \"with\" en modo strict.",
+  "yield_expression_implicitly_results_in_an_any_type_because_its_containing_generator_lacks_a_return_t_7057": "La expresión \"yield\" da como resultado un tipo \"any\" de forma implícita porque el generador que la contiene no tiene una anotación de tipo de valor devuelto.",
   "yield_expressions_cannot_be_used_in_a_parameter_initializer_2523": "Las expresiones \"yield\" no se pueden usar en un inicializador de parámetros."
 }
\ No newline at end of file
diff --git a/node_modules/typescript/lib/fr/diagnosticMessages.generated.json b/node_modules/typescript/lib/fr/diagnosticMessages.generated.json
index 6536e5a..5f18966 100644
--- a/node_modules/typescript/lib/fr/diagnosticMessages.generated.json
+++ b/node_modules/typescript/lib/fr/diagnosticMessages.generated.json
@@ -1,4 +1,5 @@
 {
+  "ALL_COMPILER_OPTIONS_6917": "TOUTES LES OPTIONS DU COMPILATEUR",
   "A_0_modifier_cannot_be_used_with_an_import_declaration_1079": "Impossible d'utiliser un modificateur '{0}' avec une déclaration d'importation.",
   "A_0_modifier_cannot_be_used_with_an_interface_declaration_1045": "Impossible d'utiliser un modificateur '{0}' avec une déclaration d'interface.",
   "A_0_parameter_must_be_the_first_parameter_2680": "Un paramètre '{0}' doit être le premier paramètre.",
@@ -15,7 +16,7 @@
   "A_class_member_cannot_have_the_0_keyword_1248": "Un membre de classe ne peut pas avoir le mot clé '{0}'.",
   "A_comma_expression_is_not_allowed_in_a_computed_property_name_1171": "Une expression avec virgule n'est pas autorisée dans un nom de propriété calculée.",
   "A_computed_property_name_cannot_reference_a_type_parameter_from_its_containing_type_2467": "Un nom de propriété calculée ne peut pas référencer un paramètre de type à partir de son type conteneur.",
-  "A_computed_property_name_in_a_class_property_declaration_must_refer_to_an_expression_whose_type_is_a_1166": "Un nom de propriété calculée dans une déclaration de propriété de classe doit faire référence à une expression dont le type est un type littéral ou un type 'unique symbol'.",
+  "A_computed_property_name_in_a_class_property_declaration_must_have_a_simple_literal_type_or_a_unique_1166": "Un nom de propriété calculée dans une déclaration de propriété de classe doit avoir un type littéral simple ou un type 'unique symbol'.",
   "A_computed_property_name_in_a_method_overload_must_refer_to_an_expression_whose_type_is_a_literal_ty_1168": "Un nom de propriété calculée dans une surcharge de méthode doit faire référence à une expression dont le type est un type littéral ou un type 'unique symbol'.",
   "A_computed_property_name_in_a_type_literal_must_refer_to_an_expression_whose_type_is_a_literal_type__1170": "Un nom de propriété calculée dans un littéral de type doit faire référence à une expression dont le type est un type littéral ou un type 'unique symbol'.",
   "A_computed_property_name_in_an_ambient_context_must_refer_to_an_expression_whose_type_is_a_literal_t_1165": "Un nom de propriété calculée dans un contexte ambiant doit faire référence à une expression dont le type est un type littéral ou un type 'unique symbol'.",
@@ -33,24 +34,25 @@
   "A_decorator_can_only_decorate_a_method_implementation_not_an_overload_1249": "Un élément décoratif peut uniquement décorer une implémentation de méthode, pas une surcharge.",
   "A_default_clause_cannot_appear_more_than_once_in_a_switch_statement_1113": "Une clause 'default' ne peut pas figurer plusieurs fois dans une instruction 'switch'.",
   "A_default_export_can_only_be_used_in_an_ECMAScript_style_module_1319": "Une exportation par défaut ne peut être utilisée que dans un module ECMAScript.",
+  "A_default_export_must_be_at_the_top_level_of_a_file_or_module_declaration_1258": "Une exportation par défaut doit se trouver au niveau supérieur d’une déclaration de fichier ou de module.",
   "A_definite_assignment_assertion_is_not_permitted_in_this_context_1255": "Une assertion d'affectation définie ' !' n'est pas autorisée dans ce contexte.",
   "A_destructuring_declaration_must_have_an_initializer_1182": "Une déclaration de déstructuration doit avoir un initialiseur.",
   "A_dynamic_import_call_in_ES5_SlashES3_requires_the_Promise_constructor_Make_sure_you_have_a_declarat_2712": "Un appel d'importation dynamique en ES5/ES3 nécessite le constructeur 'Promise'. Vérifiez que vous avez une déclaration pour le constructeur 'Promise', ou incluez 'ES2015' dans votre option '--lib'.",
   "A_dynamic_import_call_returns_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_include_ES20_2711": "Un appel d'importation dynamique retourne 'Promise'. Vérifiez que vous avez une déclaration pour 'Promise', ou incluez 'ES2015' dans votre option '--lib'.",
   "A_file_cannot_have_a_reference_to_itself_1006": "Un fichier ne peut pas contenir une référence à lui-même.",
-  "A_for_await_of_statement_is_only_allowed_within_an_async_function_or_async_generator_1103": "Une instruction 'for-await-of' est uniquement autorisée dans une fonction asynchrone ou un générateur asynchrone.",
   "A_function_returning_never_cannot_have_a_reachable_end_point_2534": "Une fonction qui retourne 'never' ne peut pas avoir de point de terminaison accessible.",
   "A_function_that_is_called_with_the_new_keyword_cannot_have_a_this_type_that_is_void_2679": "Une fonction appelée avec le mot clé 'new' ne peut pas avoir un type 'this' dont la valeur est 'void'.",
   "A_function_whose_declared_type_is_neither_void_nor_any_must_return_a_value_2355": "Une fonction dont le type déclaré n'est ni 'void', ni 'any', doit retourner une valeur.",
   "A_generator_cannot_have_a_void_type_annotation_2505": "Un générateur ne peut pas avoir d'annotation de type 'void'.",
   "A_get_accessor_cannot_have_parameters_1054": "Un accesseur 'get' ne peut pas avoir de paramètres.",
+  "A_get_accessor_must_be_at_least_as_accessible_as_the_setter_2808": "Un accesseur get doit être au moins aussi accessible que la méthode setter",
   "A_get_accessor_must_return_a_value_2378": "Un accesseur 'get' doit retourner une valeur.",
   "A_label_is_not_allowed_here_1344": "Étiquette non autorisée ici.",
   "A_labeled_tuple_element_is_declared_as_optional_with_a_question_mark_after_the_name_and_before_the_c_5086": "Un élément de tuple étiqueté est déclaré facultatif avec un point d'interrogation après le nom et avant les deux points, plutôt qu'après le type.",
   "A_labeled_tuple_element_is_declared_as_rest_with_a_before_the_name_rather_than_before_the_type_5087": "Un élément de tuple étiqueté est déclaré en tant que rest avec '...' avant le nom, plutôt qu'avant le type.",
   "A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_memb_2651": "Un initialiseur de membre dans une déclaration d'enum ne peut pas référencer des membres déclarés après lui, notamment des membres définis dans d'autres enums.",
-  "A_method_cannot_be_named_with_a_private_identifier_18022": "Une méthode ne peut pas être nommée avec un identificateur privé.",
   "A_mixin_class_must_have_a_constructor_with_a_single_rest_parameter_of_type_any_2545": "Une classe mixin doit avoir un constructeur avec un paramètre rest unique de type 'any[]'.",
+  "A_mixin_class_that_extends_from_a_type_variable_containing_an_abstract_construct_signature_must_also_2797": "Une classe mixin qui s'étend à partir d'une variable de type contenant une signature de construction abstraite doit également être déclarée 'abstract'.",
   "A_module_cannot_have_multiple_default_exports_2528": "Un module ne peut pas avoir plusieurs exportations par défaut.",
   "A_namespace_declaration_cannot_be_in_a_different_file_from_a_class_or_function_with_which_it_is_merg_2433": "Une déclaration d'espace de noms ne peut pas se trouver dans un autre fichier que celui d'une classe ou d'une fonction avec laquelle elle est fusionnée.",
   "A_namespace_declaration_cannot_be_located_prior_to_a_class_or_function_with_which_it_is_merged_2434": "Une déclaration d'espace de noms ne peut pas se trouver avant une classe ou une fonction avec laquelle elle est fusionnée.",
@@ -71,10 +73,10 @@
   "A_required_element_cannot_follow_an_optional_element_1257": "Un élément required ne peut pas suivre un élément optional.",
   "A_required_parameter_cannot_follow_an_optional_parameter_1016": "Un paramètre obligatoire ne peut pas suivre un paramètre optionnel.",
   "A_rest_element_cannot_contain_a_binding_pattern_2501": "Un élément rest ne peut pas contenir de modèle de liaison.",
+  "A_rest_element_cannot_follow_another_rest_element_1265": "Un élément rest ne peut pas suivre un autre élément rest.",
   "A_rest_element_cannot_have_a_property_name_2566": "Un élément rest ne peut pas avoir de nom de propriété.",
   "A_rest_element_cannot_have_an_initializer_1186": "Un élément rest ne peut pas avoir d'initialiseur.",
   "A_rest_element_must_be_last_in_a_destructuring_pattern_2462": "Un élément rest doit être le dernier dans un modèle de déstructuration.",
-  "A_rest_element_must_be_last_in_a_tuple_type_1256": "Un élément rest doit être le dernier dans un type tuple.",
   "A_rest_element_type_must_be_an_array_type_2574": "Un type d'élément rest doit être un type tableau.",
   "A_rest_parameter_cannot_be_optional_1047": "Un paramètre rest ne peut pas être facultatif.",
   "A_rest_parameter_cannot_have_an_initializer_1048": "Un paramètre rest ne peut pas avoir d'initialiseur.",
@@ -82,6 +84,7 @@
   "A_rest_parameter_must_be_of_an_array_type_2370": "Un paramètre rest doit être de type tableau.",
   "A_rest_parameter_or_binding_pattern_may_not_have_a_trailing_comma_1013": "Les modèles de liaison ou les paramètres rest ne doivent pas avoir de virgule de fin.",
   "A_return_statement_can_only_be_used_within_a_function_body_1108": "Une instruction 'return' peut être utilisée uniquement dans un corps de fonction.",
+  "A_return_statement_cannot_be_used_inside_a_class_static_block_18041": "Une instruction « return » ne peut pas être utilisée à l’intérieur d’un bloc statique de classe.",
   "A_series_of_entries_which_re_map_imports_to_lookup_locations_relative_to_the_baseUrl_6167": "Série d'entrées qui remappent les importations aux emplacements de recherche en fonction de 'baseUrl'.",
   "A_set_accessor_cannot_have_a_return_type_annotation_1095": "Un accesseur 'set' ne peut pas avoir d'annotation de type de retour.",
   "A_set_accessor_cannot_have_an_optional_parameter_1051": "Un accesseur 'set' ne peut pas avoir de paramètre optionnel.",
@@ -89,6 +92,7 @@
   "A_set_accessor_must_have_exactly_one_parameter_1049": "Un accesseur 'set' doit avoir un seul paramètre.",
   "A_set_accessor_parameter_cannot_have_an_initializer_1052": "Un paramètre d'accesseur 'set' ne peut pas avoir d'initialiseur.",
   "A_signature_with_an_implementation_cannot_use_a_string_literal_type_2381": "Une signature avec une implémentation ne peut pas utiliser de type de littéral de chaîne.",
+  "A_spread_argument_must_either_have_a_tuple_type_or_be_passed_to_a_rest_parameter_2556": "Un argument d’engraissement doit soit avoir un type de tuple, soit être passé à un paramètre REST.",
   "A_super_call_must_be_the_first_statement_in_the_constructor_when_a_class_contains_initialized_proper_2376": "Un appel de 'super' doit être la première instruction du constructeur quand une classe contient des propriétés initialisées, des propriétés de paramètre ou des identificateurs privés.",
   "A_this_based_type_guard_is_not_compatible_with_a_parameter_based_type_guard_2518": "Une protection de type basée sur 'this' n'est pas compatible avec une protection de type basée sur des paramètres.",
   "A_this_type_is_available_only_in_a_non_static_member_of_a_class_or_interface_2526": "Un type 'this' est disponible uniquement dans un membre non statique d'une classe ou d'une interface.",
@@ -114,8 +118,11 @@
   "Add_a_return_statement_95111": "Ajouter une instruction return",
   "Add_all_missing_async_modifiers_95041": "Ajouter tous les modificateurs 'async' manquants",
   "Add_all_missing_call_parentheses_95068": "Ajouter toutes les parenthèses d'appel manquantes",
+  "Add_all_missing_function_declarations_95157": "Ajouter toutes les déclarations de fonction manquantes",
   "Add_all_missing_imports_95064": "Ajouter toutes les importations manquantes",
   "Add_all_missing_members_95022": "Ajouter tous les membres manquants",
+  "Add_all_missing_override_modifiers_95162": "Ajouter tous les modificateurs 'override' manquants",
+  "Add_all_missing_properties_95166": "Ajouter toutes les propriétés manquantes",
   "Add_all_missing_return_statement_95114": "Ajouter toutes les instructions return manquantes",
   "Add_all_missing_super_calls_95039": "Ajouter tous les appels super manquants",
   "Add_async_modifier_to_containing_function_90029": "Ajouter le modificateur async dans la fonction conteneur",
@@ -135,18 +142,22 @@
   "Add_initializers_to_all_uninitialized_properties_95027": "Ajouter des initialiseurs à toutes les propriétés non initialisées",
   "Add_missing_call_parentheses_95067": "Ajouter les parenthèses d'appel manquantes",
   "Add_missing_enum_member_0_95063": "Ajouter le membre enum manquant '{0}'",
+  "Add_missing_function_declaration_0_95156": "Ajouter la déclaration de fonction manquante '{0}'",
   "Add_missing_new_operator_to_all_calls_95072": "Ajouter l'opérateur 'new' manquant à tous les appels",
   "Add_missing_new_operator_to_call_95071": "Ajouter l'opérateur 'new' manquant à l'appel",
+  "Add_missing_properties_95165": "Ajouter des propriétés manquantes",
   "Add_missing_super_call_90001": "Ajouter l'appel manquant à 'super()'",
   "Add_missing_typeof_95052": "Ajouter un 'typeof' manquant",
   "Add_names_to_all_parameters_without_names_95073": "Ajouter des noms à tous les paramètres sans noms",
   "Add_or_remove_braces_in_an_arrow_function_95058": "Ajouter ou supprimer les accolades dans une fonction arrow",
+  "Add_override_modifier_95160": "Ajouter un modificateur 'override'",
   "Add_parameter_name_90034": "Ajouter un nom de paramètre",
   "Add_qualifier_to_all_unresolved_variables_matching_a_member_name_95037": "Ajouter un qualificateur à toutes les variables non résolues correspondant à un nom de membre",
   "Add_this_parameter_95104": "Ajoutez le paramètre 'this'.",
   "Add_this_tag_95103": "Ajouter l'étiquette '@this'",
   "Add_to_all_uncalled_decorators_95044": "Ajouter '()' à tous les décorateurs non appelés",
   "Add_ts_ignore_to_all_error_messages_95042": "Ajouter '@ts-ignore' à tous les messages d'erreur",
+  "Add_undefined_to_a_type_when_accessed_using_an_index_6674": "Ajoutez « undefined » à un type lorsque vous y accédez à l’aide d’un index.",
   "Add_undefined_type_to_all_uninitialized_properties_95029": "Ajouter un type non défini à toutes les propriétés non initialisées",
   "Add_undefined_type_to_property_0_95018": "Ajouter un type 'undefined' à la propriété '{0}'",
   "Add_unknown_conversion_for_non_overlapping_types_95069": "Ajouter une conversion 'unknown' pour les types qui ne se chevauchent pas",
@@ -154,8 +165,6 @@
   "Add_void_to_Promise_resolved_without_a_value_95143": "Ajouter 'void' à un Promise résolu sans valeur",
   "Add_void_to_all_Promises_resolved_without_a_value_95144": "Ajouter 'void' à toutes les promesses résolues sans valeur",
   "Adding_a_tsconfig_json_file_will_help_organize_projects_that_contain_both_TypeScript_and_JavaScript__5068": "L'ajout d'un fichier tsconfig.json permet d'organiser les projets qui contiennent des fichiers TypeScript et JavaScript. En savoir plus sur https://aka.ms/tsconfig.",
-  "Additional_Checks_6176": "Vérifications supplémentaires",
-  "Advanced_Options_6178": "Options avancées",
   "All_declarations_of_0_must_have_identical_modifiers_2687": "Toutes les déclarations de '{0}' doivent avoir des modificateurs identiques.",
   "All_declarations_of_0_must_have_identical_type_parameters_2428": "Toutes les déclarations de '{0}' doivent avoir des paramètres de type identiques.",
   "All_declarations_of_an_abstract_method_must_be_consecutive_2516": "Toutes les déclarations d'une méthode abstraite doivent être consécutives.",
@@ -163,16 +172,19 @@
   "All_imports_in_import_declaration_are_unused_6192": "Les importations de la déclaration d'importation ne sont pas toutes utilisées.",
   "All_type_parameters_are_unused_6205": "Tous les paramètres de type sont inutilisés.",
   "All_variables_are_unused_6199": "Toutes les variables sont inutilisées.",
-  "Allow_accessing_UMD_globals_from_modules_95076": "Autorisez l'accès aux variables globales UMD à partir des modules.",
+  "Allow_JavaScript_files_to_be_a_part_of_your_program_Use_the_checkJS_option_to_get_errors_from_these__6600": "Autorisez les fichiers JavaScript à faire partie de votre programme. Utilisez l’option « checkJS » pour obtenir des erreurs à partir de ces fichiers.",
+  "Allow_accessing_UMD_globals_from_modules_6602": "Autorisez l'accès aux variables globales UMD à partir des modules.",
   "Allow_default_imports_from_modules_with_no_default_export_This_does_not_affect_code_emit_just_typech_6011": "Autorisez les importations par défaut à partir des modules sans exportation par défaut. Cela n'affecte pas l'émission du code, juste le contrôle de type.",
+  "Allow_import_x_from_y_when_a_module_doesn_t_have_a_default_export_6601": "Autoriser « importation de x à partir de y » quand un module n’a pas d’exportation par défaut.",
+  "Allow_importing_helper_functions_from_tslib_once_per_project_instead_of_including_them_per_file_6639": "Autorisez l’importation de fonctions d’assistance à partir de tslib une fois par projet, au lieu de les inclure par fichier.",
   "Allow_javascript_files_to_be_compiled_6102": "Autorisez la compilation des fichiers JavaScript.",
+  "Allow_multiple_folders_to_be_treated_as_one_when_resolving_modules_6691": "Autorisez plusieurs dossiers à être considérés comme un seul lors de la résolution des modules.",
   "Already_included_file_name_0_differs_from_file_name_1_only_in_casing_1261": "Le nom de fichier déjà inclus '{0}' diffère du nom de fichier '{1}' uniquement par la casse.",
   "Ambient_module_declaration_cannot_specify_relative_module_name_2436": "Une déclaration de module ambiant ne peut pas spécifier un nom de module relatif.",
   "Ambient_modules_cannot_be_nested_in_other_modules_or_namespaces_2435": "Impossible d'imbriquer des modules ambiants dans d'autres modules ou espaces de noms.",
   "An_AMD_module_cannot_have_multiple_name_assignments_2458": "Un module AMD ne peut pas avoir plusieurs affectations de nom.",
   "An_abstract_accessor_cannot_have_an_implementation_1318": "Un accesseur abstrait ne peut pas avoir d'implémentation.",
   "An_accessibility_modifier_cannot_be_used_with_a_private_identifier_18010": "Un modificateur d'accessibilité ne peut pas être utilisé avec un identificateur privé.",
-  "An_accessor_cannot_be_named_with_a_private_identifier_18023": "Un accesseur ne peut pas être nommé avec un identificateur privé.",
   "An_accessor_cannot_have_type_parameters_1094": "Un accesseur ne peut pas avoir de paramètres de type.",
   "An_ambient_module_declaration_is_only_allowed_at_the_top_level_in_a_file_1234": "Une déclaration de module ambiant est uniquement autorisée au niveau supérieur dans un fichier.",
   "An_argument_for_0_was_not_provided_6210": "Aucun argument pour '{0}' n'a été fourni.",
@@ -187,10 +199,11 @@
   "An_enum_member_cannot_be_named_with_a_private_identifier_18024": "Un membre enum ne peut pas être nommé avec un identificateur privé.",
   "An_enum_member_cannot_have_a_numeric_name_2452": "Un membre enum ne peut pas avoir un nom numérique.",
   "An_enum_member_name_must_be_followed_by_a_or_1357": "Un nom de membre enum doit être suivi de ',', de '=' ou de '}'.",
-  "An_export_assignment_can_only_be_used_in_a_module_1231": "Une affectation d'exportation peut uniquement être utilisée dans un module.",
+  "An_expanded_version_of_this_information_showing_all_possible_compiler_options_6928": "Version développée de ces informations, affichant toutes les options possibles du compilateur",
   "An_export_assignment_cannot_be_used_in_a_module_with_other_exported_elements_2309": "Impossible d'utiliser une assignation d'exportation dans un module comportant d'autres éléments exportés.",
   "An_export_assignment_cannot_be_used_in_a_namespace_1063": "Une affectation d'exportation ne peut pas être utilisée dans un espace de noms.",
   "An_export_assignment_cannot_have_modifiers_1120": "Une assignation d'exportation ne peut pas avoir de modificateurs.",
+  "An_export_assignment_must_be_at_the_top_level_of_a_file_or_module_declaration_1231": "Une affectation d’exportation doit se trouver au niveau supérieur d’une déclaration de fichier ou de module.",
   "An_export_declaration_can_only_be_used_in_a_module_1233": "Une déclaration d'exportation peut uniquement être utilisée dans un module.",
   "An_export_declaration_cannot_have_modifiers_1193": "Une déclaration d'exportation ne peut pas avoir de modificateurs.",
   "An_expression_of_type_void_cannot_be_tested_for_truthiness_1345": "Impossible de tester une expression de type 'void' pour déterminer si elle a la valeur true.",
@@ -212,9 +225,8 @@
   "An_index_signature_parameter_cannot_have_an_accessibility_modifier_1018": "Un paramètre de signature d'index ne peut pas avoir de modificateur d'accessibilité.",
   "An_index_signature_parameter_cannot_have_an_initializer_1020": "Un paramètre de signature d'index ne peut pas avoir d'initialiseur.",
   "An_index_signature_parameter_must_have_a_type_annotation_1022": "Un paramètre de signature d'index doit avoir une annotation de type.",
-  "An_index_signature_parameter_type_cannot_be_a_type_alias_Consider_writing_0_Colon_1_Colon_2_instead_1336": "Un type de paramètre de signature d'index ne peut pas être un alias de type. Écrivez '[{0}: {1}]: {2}' à la place.",
-  "An_index_signature_parameter_type_cannot_be_a_union_type_Consider_using_a_mapped_object_type_instead_1337": "Un type de paramètre de signature d'index ne peut pas être un type union. Utilisez un type d'objet mappé à la place.",
-  "An_index_signature_parameter_type_must_be_either_string_or_number_1023": "Le type d'un paramètre de signature d'index doit être 'string' ou 'number'.",
+  "An_index_signature_parameter_type_cannot_be_a_literal_type_or_generic_type_Consider_using_a_mapped_o_1337": "Un type de paramètre de signature d’index ne peut pas être un type littéral ni générique. Envisagez plutôt d’utiliser un type d’objet mappé.",
+  "An_index_signature_parameter_type_must_be_string_number_symbol_or_a_template_literal_type_1268": "Un type de paramètre de signature d’index doit être « string », « number », « symbol » ou un type littéral de modèle.",
   "An_interface_can_only_extend_an_identifier_Slashqualified_name_with_optional_type_arguments_2499": "Une interface peut uniquement étendre un identificateur/nom qualifié avec des arguments de type facultatifs.",
   "An_interface_can_only_extend_an_object_type_or_intersection_of_object_types_with_statically_known_me_2312": "Une interface peut étendre uniquement un type d'objet ou une intersection de types d'objet avec des membres connus de manière statique.",
   "An_interface_property_cannot_have_an_initializer_1246": "Une propriété d'interface ne peut pas avoir d'initialiseur.",
@@ -225,6 +237,7 @@
   "An_object_literal_cannot_have_property_and_accessor_with_the_same_name_1119": "Un littéral d'objet ne peut pas avoir une propriété et un accesseur portant le même nom.",
   "An_object_member_cannot_be_declared_optional_1162": "Impossible de déclarer un membre d'objet comme étant facultatif.",
   "An_optional_chain_cannot_contain_private_identifiers_18030": "Une chaîne facultative ne peut pas contenir d'identificateurs privés.",
+  "An_optional_element_cannot_follow_a_rest_element_1266": "Un élément optional ne peut pas suivre un élément rest.",
   "An_outer_value_of_this_is_shadowed_by_this_container_2738": "Une valeur externe de 'this' est mise en mémoire fantôme par ce conteneur.",
   "An_overload_signature_cannot_be_declared_as_a_generator_1222": "Une signature de surcharge ne peut pas être déclarée en tant que générateur.",
   "An_unary_expression_with_the_0_operator_is_not_allowed_in_the_left_hand_side_of_an_exponentiation_ex_17006": "Une expression unaire avec l'opérateur '{0}' n'est pas autorisée dans la partie gauche d'une expression d'élévation à une puissance. Mettez l'expression entre parenthèses.",
@@ -244,33 +257,47 @@
   "Augmentations_for_the_global_scope_can_only_be_directly_nested_in_external_modules_or_ambient_module_2669": "Les augmentations de la portée globale ne peuvent être directement imbriquées que dans les modules externes ou les déclarations de modules ambiants.",
   "Augmentations_for_the_global_scope_should_have_declare_modifier_unless_they_appear_in_already_ambien_2670": "Les augmentations de la portée globale doivent comporter un modificateur 'declare', sauf si elles apparaissent déjà dans un contexte ambiant.",
   "Auto_discovery_for_typings_is_enabled_in_project_0_Running_extra_resolution_pass_for_module_1_using__6140": "La détection automatique des typages est activée dans le projet '{0}'. Exécution de la passe de résolution supplémentaire pour le module '{1}' à l'aide de l'emplacement du cache '{2}'.",
+  "Await_expression_cannot_be_used_inside_a_class_static_block_18037": "Impossible d’utiliser l’expression Await à l’intérieur d’un bloc statique de classe.",
+  "BUILD_OPTIONS_6919": "OPTIONS DE BUILD",
+  "Backwards_Compatibility_6253": "Rétrocompatibilité",
   "Base_class_expressions_cannot_reference_class_type_parameters_2562": "Les expressions de classe de base ne peuvent pas référencer les paramètres de type de classe.",
   "Base_constructor_return_type_0_is_not_an_object_type_or_intersection_of_object_types_with_statically_2509": "Le type de retour '{0}' du constructeur de base n'est pas un type d'objet ou une intersection de types d'objet avec des membres connus de manière statique.",
   "Base_constructors_must_all_have_the_same_return_type_2510": "Les constructeurs de base doivent tous avoir le même type de retour.",
   "Base_directory_to_resolve_non_absolute_module_names_6083": "Répertoire de base pour la résolution des noms de modules non absolus.",
-  "Basic_Options_6172": "Options de base",
   "BigInt_literals_are_not_available_when_targeting_lower_than_ES2020_2737": "Les littéraux BigInt ne sont pas disponibles quand la version ciblée est antérieure à ES2020.",
   "Binary_digit_expected_1177": "Chiffre binaire attendu.",
   "Binding_element_0_implicitly_has_an_1_type_7031": "L'élément de liaison '{0}' possède implicitement un type '{1}'.",
   "Block_scoped_variable_0_used_before_its_declaration_2448": "Variable de portée de bloc '{0}' utilisée avant sa déclaration.",
-  "Build_all_projects_including_those_that_appear_to_be_up_to_date_6368": "Générer tous les projets, même ceux qui semblent être à jour",
+  "Build_a_composite_project_in_the_working_directory_6925": "Générer un projet composite dans le répertoire de travail.",
+  "Build_all_projects_including_those_that_appear_to_be_up_to_date_6636": "Générer tous les projets, même ceux qui semblent être à jour",
   "Build_one_or_more_projects_and_their_dependencies_if_out_of_date_6364": "Générer un ou plusieurs projets et leurs dépendances (s'ils sont obsolètes)",
   "Build_option_0_requires_a_value_of_type_1_5073": "L'option de build '{0}' nécessite une valeur de type {1}.",
   "Building_project_0_6358": "Génération du projet '{0}'...",
+  "COMMAND_LINE_FLAGS_6921": "INDICATEURS DE LIGNE DE COMMANDE",
+  "COMMON_COMMANDS_6916": "COMMANDES COURANTES",
+  "COMMON_COMPILER_OPTIONS_6920": "OPTIONS COURANTES DU COMPILATEUR",
   "Call_decorator_expression_90028": "Appeler l'expression de l'élément décoratif",
   "Call_signature_return_types_0_and_1_are_incompatible_2202": "Les types de retour de signature d'appel '{0}' et '{1}' sont incompatibles.",
   "Call_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type_7020": "La signature d'appel, qui ne dispose pas d'annotation de type de retour, possède implicitement un type de retour 'any'.",
   "Call_signatures_with_no_arguments_have_incompatible_return_types_0_and_1_2204": "Les signatures d'appel sans arguments ont des types de retour incompatibles : '{0}' et '{1}'.",
   "Call_target_does_not_contain_any_signatures_2346": "La cible de l'appel ne contient aucune signature.",
   "Can_only_convert_logical_AND_access_chains_95142": "Conversion uniquement de chaînes logiques ET de chaînes d'accès",
+  "Can_only_convert_named_export_95164": "Peut uniquement convertir l’exportation nommée",
   "Can_only_convert_property_with_modifier_95137": "La propriété peut uniquement être convertie avec un modificateur",
+  "Can_only_convert_string_concatenation_95154": "Peut uniquement convertir une concaténation de chaîne",
   "Cannot_access_0_1_because_0_is_a_type_but_not_a_namespace_Did_you_mean_to_retrieve_the_type_of_the_p_2713": "Impossible d'accéder à '{0}.{1}', car '{0}' est un type, mais pas un espace de noms. Voulez-vous plutôt récupérer le type de la propriété '{1}' dans '{0}' avec '{0}[\"{1}\"]' ?",
   "Cannot_access_ambient_const_enums_when_the_isolatedModules_flag_is_provided_2748": "Impossible d'accéder aux enums const ambiants quand l'indicateur '--isolatedModules' est fourni.",
   "Cannot_assign_a_0_constructor_type_to_a_1_constructor_type_2672": "Impossible d'assigner un type de constructeur '{0}' à un type de constructeur '{1}'.",
   "Cannot_assign_an_abstract_constructor_type_to_a_non_abstract_constructor_type_2517": "Impossible d'attribuer un type de constructeur abstrait à un type de constructeur non abstrait.",
+  "Cannot_assign_to_0_because_it_is_a_class_2629": "Impossible d'effectuer l'assignation à '{0}', car il s'agit d'une classe.",
   "Cannot_assign_to_0_because_it_is_a_constant_2588": "Impossible d'effectuer une assignation à '{0}', car il s'agit d'une constante.",
+  "Cannot_assign_to_0_because_it_is_a_function_2630": "Impossible d'effectuer l'assignation à '{0}', car il s'agit d'une fonction.",
+  "Cannot_assign_to_0_because_it_is_a_namespace_2631": "Impossible d'effectuer l'assignation à '{0}', car il s'agit d'un espace de noms.",
   "Cannot_assign_to_0_because_it_is_a_read_only_property_2540": "Impossible d'effectuer une assignation à '{0}', car il s'agit d'une propriété en lecture seule.",
+  "Cannot_assign_to_0_because_it_is_an_enum_2628": "Impossible d'effectuer l'assignation à '{0}', car il s'agit d'un enum.",
+  "Cannot_assign_to_0_because_it_is_an_import_2632": "Impossible d'effectuer l'assignation à '{0}', car il s'agit d'une importation.",
   "Cannot_assign_to_0_because_it_is_not_a_variable_2539": "Impossible d'effectuer une assignation à '{0}', car il ne s'agit pas d'une variable.",
+  "Cannot_assign_to_private_method_0_Private_methods_are_not_writable_2803": "Impossible d'effectuer une assignation à la méthode privée '{0}'. Les méthodes privées ne sont pas accessibles en écriture.",
   "Cannot_augment_module_0_because_it_resolves_to_a_non_module_entity_2671": "Impossible d'augmenter le module '{0}', car il se résout en une entité non-module.",
   "Cannot_augment_module_0_with_value_exports_because_it_resolves_to_a_non_module_entity_2649": "Impossible d'augmenter le module '{0}' avec des exportations de valeurs, car il se résout en une entité non-module.",
   "Cannot_compile_modules_using_option_0_unless_the_module_flag_is_amd_or_system_6131": "Impossible de compiler des modules à l'aide de l'option '{0}' tant que l'indicateur '--module' n'a pas la valeur 'amd' ou 'system'.",
@@ -318,11 +345,13 @@
   "Cannot_redeclare_block_scoped_variable_0_2451": "Impossible de redéclarer la variable de portée de bloc '{0}'.",
   "Cannot_redeclare_exported_variable_0_2323": "Impossible de redéclarer la variable exportée '{0}'.",
   "Cannot_redeclare_identifier_0_in_catch_clause_2492": "Impossible de redéclarer l'identificateur '{0}' dans la clause catch.",
+  "Cannot_start_a_function_call_in_a_type_annotation_1441": "Impossible de démarrer un appel de fonction dans une annotation de type.",
   "Cannot_update_output_of_project_0_because_there_was_error_reading_file_1_6376": "Impossible de mettre à jour la sortie du projet '{0}', car une erreur s'est produite durant la lecture du fichier '{1}'",
   "Cannot_use_JSX_unless_the_jsx_flag_is_provided_17004": "Impossible d'utiliser JSX, sauf si l'indicateur '--jsx' est fourni.",
   "Cannot_use_imports_exports_or_module_augmentations_when_module_is_none_1148": "Impossible d'utiliser des importations, des exportations ou des augmentations de module quand '--module' a la valeur 'none'.",
   "Cannot_use_namespace_0_as_a_type_2709": "Impossible d'utiliser l'espace de noms '{0}' en tant que type.",
   "Cannot_use_namespace_0_as_a_value_2708": "Impossible d'utiliser l'espace de noms '{0}' en tant que valeur.",
+  "Cannot_use_this_in_a_static_property_initializer_of_a_decorated_class_2816": "Impossible d'utiliser « this » dans un initialiseur de propriété statique d'une classe décorée.",
   "Cannot_write_file_0_because_it_will_overwrite_tsbuildinfo_file_generated_by_referenced_project_1_6377": "Impossible d'écrire le fichier '{0}', car il va remplacer le fichier '.tsbuildinfo' généré par le projet référencé '{1}'",
   "Cannot_write_file_0_because_it_would_be_overwritten_by_multiple_input_files_5056": "Impossible d'écrire le fichier '{0}', car il serait remplacé par plusieurs fichiers d'entrée.",
   "Cannot_write_file_0_because_it_would_overwrite_input_file_5055": "Impossible d'écrire le fichier '{0}', car cela entraînerait le remplacement du fichier d'entrée.",
@@ -334,6 +363,8 @@
   "Change_all_jsdoc_style_types_to_TypeScript_and_add_undefined_to_nullable_types_95031": "Remplacer tous les types jsdoc-type par TypeScript (et ajouter '| undefined' aux types nullable)",
   "Change_extends_to_implements_90003": "Changer 'extends' en 'implements'",
   "Change_spelling_to_0_90022": "Changer l'orthographe en '{0}'",
+  "Check_for_class_properties_that_are_declared_but_not_set_in_the_constructor_6700": "Recherchez les propriétés de classe déclarées mais non définies dans le constructeur.",
+  "Check_that_the_arguments_for_bind_call_and_apply_methods_match_the_original_function_6697": "Vérifiez que les arguments des méthodes « bind », « call » et « apply » correspondent à la fonction d’origine.",
   "Checking_if_0_is_the_longest_matching_prefix_for_1_2_6104": "Vérification en cours pour déterminer si '{0}' est le préfixe correspondant le plus long pour '{1}' - '{2}'.",
   "Circular_definition_of_import_alias_0_2303": "Définition circulaire de l'alias d'importation '{0}'.",
   "Circularity_detected_while_resolving_configuration_Colon_0_18000": "Circularité détectée durant la résolution de la configuration : {0}",
@@ -345,7 +376,9 @@
   "Class_0_incorrectly_implements_class_1_Did_you_mean_to_extend_1_and_inherit_its_members_as_a_subclas_2720": "La classe '{0}' implémente de manière incorrecte la classe '{1}'. Voulez-vous vraiment étendre '{1}' et hériter de ses membres en tant que sous-classe ?",
   "Class_0_incorrectly_implements_interface_1_2420": "La classe '{0}' implémente de manière incorrecte l'interface '{1}'.",
   "Class_0_used_before_its_declaration_2449": "Classe '{0}' utilisée avant sa déclaration.",
+  "Class_declaration_cannot_implement_overload_list_for_0_2813": "La déclaration de classe ne peut pas implémenter la liste de surcharge pour «{0}».",
   "Class_declarations_cannot_have_more_than_one_augments_or_extends_tag_8025": "Les déclarations de classes ne peuvent pas avoir plusieurs balises '@augments' ou '@extends'.",
+  "Class_decorators_can_t_be_used_with_static_private_identifier_Consider_removing_the_experimental_dec_18036": "Impossible d'utiliser des éléments décoratifs de classe avec un identificateur privé static. Supprimez l'élément décoratif expérimental.",
   "Class_name_cannot_be_0_2414": "Le nom de la classe ne peut pas être '{0}'.",
   "Class_name_cannot_be_Object_when_targeting_ES5_with_module_0_2725": "Le nom de la classe ne peut pas être 'Object' quand ES5 est ciblé avec le module {0}.",
   "Class_static_side_0_incorrectly_extends_base_class_static_side_1_2417": "Le côté statique de la classe '{0}' étend de manière incorrecte le côté statique de la classe de base '{1}'.",
@@ -354,16 +387,25 @@
   "Classes_may_not_have_a_field_named_constructor_18006": "Les classes n'ont peut-être pas de champ nommé 'constructor'.",
   "Command_line_Options_6171": "Options de ligne de commande",
   "Compile_the_project_given_the_path_to_its_configuration_file_or_to_a_folder_with_a_tsconfig_json_6020": "Compilez le projet en fonction du chemin de son fichier config ou d'un dossier contenant 'tsconfig.json'.",
+  "Compiler_Diagnostics_6251": "Diagnostics du compilateur",
   "Compiler_option_0_expects_an_argument_6044": "L'option de compilateur '{0}' attend an argument.",
+  "Compiler_option_0_may_not_be_used_with_build_5094": "L’option '--{0}' du compilateur ne peut pas être utilisée avec '--build'.",
+  "Compiler_option_0_may_only_be_used_with_build_5093": "Option du compilateur '--{0}' ne peut être utilisée qu’avec '--build'.",
   "Compiler_option_0_requires_a_value_of_type_1_5024": "L'option de compilateur '{0}' exige une valeur de type {1}.",
   "Compiler_reserves_name_0_when_emitting_private_identifier_downlevel_18027": "Le compilateur réserve le nom '{0}' quand il émet un identificateur privé pour une version antérieure.",
+  "Compiles_the_TypeScript_project_located_at_the_specified_path_6927": "Compile le projet TypeScript situé au chemin d’accès spécifié",
+  "Compiles_the_current_project_tsconfig_json_in_the_working_directory_6923": "Compile le projet actif (tsconfig.json sur le répertoire de travail.)",
+  "Compiles_the_current_project_with_additional_settings_6929": "Compile le projet actif, avec des paramètres supplémentaires",
+  "Completeness_6257": "Exhaustivité",
   "Composite_projects_may_not_disable_declaration_emit_6304": "Les projets composites ne doivent pas désactiver l'émission de déclaration.",
   "Composite_projects_may_not_disable_incremental_compilation_6379": "Les projets composites ne doivent pas désactiver la compilation incrémentielle.",
+  "Computed_from_the_list_of_input_files_6911": "Calculé à partir de la liste des fichiers d’entrée",
   "Computed_property_names_are_not_allowed_in_enums_1164": "Les noms de propriétés calculées ne sont pas autorisés dans les enums.",
   "Computed_values_are_not_permitted_in_an_enum_with_string_valued_members_2553": "Les valeurs calculées ne sont pas autorisées dans un enum avec des membres ayant une valeur de chaîne.",
   "Concatenate_and_emit_output_to_single_file_6001": "Concaténer la sortie et l'émettre vers un seul fichier.",
   "Conflicting_definitions_for_0_found_at_1_and_2_Consider_installing_a_specific_version_of_this_librar_4090": "Définitions en conflit pour '{0}' sur '{1}' et '{2}'. Installez une version spécifique de cette bibliothèque pour résoudre le conflit.",
   "Conflicts_are_in_this_file_6201": "Il existe des conflits dans ce fichier.",
+  "Consider_adding_a_declare_modifier_to_this_class_6506": "Envisagez d’ajouter un modificateur « declare » à cette classe.",
   "Construct_signature_return_types_0_and_1_are_incompatible_2203": "Les types de retour de signature de construction '{0}' et '{1}' sont incompatibles.",
   "Construct_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type_7013": "La signature de construction, qui ne dispose pas d'annotation de type de retour, possède implicitement un type de retour 'any'.",
   "Construct_signatures_with_no_arguments_have_incompatible_return_types_0_and_1_2205": "Les signatures de construction sans arguments ont des types de retour incompatibles : '{0}' et '{1}'.",
@@ -413,16 +455,24 @@
   "Convert_to_type_only_export_1364": "Convertir en exportation de type uniquement",
   "Convert_to_type_only_import_1373": "Convertir en importation de type uniquement",
   "Corrupted_locale_file_0_6051": "Fichier de paramètres régionaux endommagé : {0}.",
+  "Could_not_convert_to_anonymous_function_95153": "Impossible de convertir en fonction anonyme",
+  "Could_not_convert_to_arrow_function_95151": "Impossible de convertir en fonction arrow",
+  "Could_not_convert_to_named_function_95152": "Impossible de convertir en fonction nommée",
+  "Could_not_determine_function_return_type_95150": "Impossible de déterminer le type de retour de la fonction",
   "Could_not_find_a_containing_arrow_function_95127": "Fonction arrow conteneur introuvable",
   "Could_not_find_a_declaration_file_for_module_0_1_implicitly_has_an_any_type_7016": "Le fichier de déclaration du module '{0}' est introuvable. '{1}' a implicitement un type 'any'.",
   "Could_not_find_convertible_access_expression_95140": "L'expression d'accès convertible est introuvable",
   "Could_not_find_export_statement_95129": "Instruction export introuvable",
   "Could_not_find_import_clause_95131": "Clause import introuvable",
   "Could_not_find_matching_access_expressions_95141": "L'expression d'accès correspondante est introuvable",
+  "Could_not_find_name_0_Did_you_mean_1_2570": "Le nom «{0}» est introuvable. Voulez-vous dire «{1}» ?",
   "Could_not_find_namespace_import_or_named_imports_95132": "Impossible de localiser l'importation d'espace de noms ou les importations nommées",
   "Could_not_find_property_for_which_to_generate_accessor_95135": "Impossible de localiser la propriété dont l'accesseur doit être généré",
   "Could_not_resolve_the_path_0_with_the_extensions_Colon_1_6231": "Impossible de résoudre le chemin '{0}' avec les extensions {1}.",
   "Could_not_write_file_0_Colon_1_5033": "Impossible d'écrire le fichier '{0}' : {1}.",
+  "Create_source_map_files_for_emitted_JavaScript_files_6694": "Créez des fichiers de mappage source pour les fichiers JavaScript émis.",
+  "Create_sourcemaps_for_d_ts_files_6614": "Créez des mappage de source pour les fichiers d.ts.",
+  "Creates_a_tsconfig_json_with_the_recommended_settings_in_the_working_directory_6926": "Crée un tsconfig.json avec les paramètres recommandés dans le répertoire de travail.",
   "DIRECTORY_6038": "RÉPERTOIRE",
   "Declaration_augments_declaration_in_another_file_This_cannot_be_serialized_6232": "Cette déclaration augmente la déclaration dans un autre fichier. Cette opération ne peut pas être sérialisée.",
   "Declaration_emit_for_this_file_requires_using_private_name_0_An_explicit_type_annotation_may_unblock_9005": "L'émission de déclaration pour ce fichier nécessite l'utilisation du nom privé '{0}'. Une annotation de type explicite peut débloquer l'émission de déclaration.",
@@ -430,6 +480,7 @@
   "Declaration_expected_1146": "Déclaration attendue.",
   "Declaration_name_conflicts_with_built_in_global_identifier_0_2397": "Le nom de la déclaration est en conflit avec l'identificateur global intégré '{0}'.",
   "Declaration_or_statement_expected_1128": "Déclaration ou instruction attendue.",
+  "Declaration_or_statement_expected_This_follows_a_block_of_statements_so_if_you_intended_to_write_a_d_2809": "Déclaration ou instruction attendue. Ce '=' suit un bloc d'instructions, donc si vous avez l'intention d'écrire une affectation de déstructuration, vous devrez peut-être mettre l'ensemble de l'affectation entre parenthèses.",
   "Declarations_with_definite_assignment_assertions_must_also_have_type_annotations_1264": "Les déclarations avec des assertions d'affectation définies doivent également avoir des annotations de type.",
   "Declarations_with_initializers_cannot_also_have_definite_assignment_assertions_1263": "Les déclarations avec des initialiseurs ne peuvent pas avoir également des assertions d'affectation définies.",
   "Declare_a_private_field_named_0_90053": "Déclarez un champ privé nommé '{0}'.",
@@ -441,7 +492,11 @@
   "Declare_static_property_0_90027": "Déclarer la propriété statique '{0}'",
   "Decorators_are_not_valid_here_1206": "Les éléments décoratifs ne sont pas valides ici.",
   "Decorators_cannot_be_applied_to_multiple_get_Slashset_accessors_of_the_same_name_1207": "Impossible d'appliquer des éléments décoratifs à plusieurs accesseurs get/set du même nom.",
+  "Decorators_may_not_be_applied_to_this_parameters_1433": "Il est possible que les éléments décoratifs ne soient pas appliqués aux paramètres 'this'.",
+  "Decorators_must_precede_the_name_and_all_keywords_of_property_declarations_1436": "Les éléments décoratifs doivent précéder le nom et tous les mots clés des déclarations de propriété.",
   "Default_export_of_the_module_has_or_is_using_private_name_0_4082": "L'exportation par défaut du module a utilisé ou utilise le nom privé '{0}'.",
+  "Default_library_1424": "Bibliothèque par défaut",
+  "Default_library_for_target_0_1425": "Bibliothèque par défaut pour la cible '{0}'",
   "Definitions_of_the_following_identifiers_conflict_with_those_in_another_file_Colon_0_6200": "Les définitions des identificateurs suivants sont en conflit avec celles d'un autre fichier : {0}",
   "Delete_all_unused_declarations_95024": "Supprimer toutes les déclarations inutilisées",
   "Delete_all_unused_imports_95147": "Supprimer toutes les importations inutilisées",
@@ -449,6 +504,7 @@
   "Deprecated_Use_jsxFactory_instead_Specify_the_object_invoked_for_createElement_when_targeting_react__6084": "[Déconseillé] Utilisez '--jsxFactory' à la place. Permet de spécifier l'objet appelé pour createElement durant le ciblage de 'react' pour l'émission JSX",
   "Deprecated_Use_outFile_instead_Concatenate_and_emit_output_to_single_file_6170": "[Déconseillé] Utilisez '--outFile' à la place. Permet de concaténer et d'émettre la sortie vers un seul fichier",
   "Deprecated_Use_skipLibCheck_instead_Skip_type_checking_of_default_library_declaration_files_6160": "[Déconseillé] Utilisez '--skipLibCheck' à la place. Permet d'ignorer le contrôle de type des fichiers de déclaration de la bibliothèque par défaut.",
+  "Deprecated_setting_Use_outFile_instead_6677": "Paramètre déconseillé. Utilisez « outFile » à la place.",
   "Did_you_forget_to_use_await_2773": "Avez-vous oublié d'utiliser 'await' ?",
   "Did_you_mean_0_1369": "Est-ce que vous avez voulu utiliser '{0}' ?",
   "Did_you_mean_for_0_to_be_constrained_to_type_new_args_Colon_any_1_2735": "Est-ce que vous avez voulu que '{0}' soit contraint en tant que type 'new (...args: any[]) => {1}' ?",
@@ -459,12 +515,30 @@
   "Did_you_mean_to_use_new_with_this_expression_6213": "Est-ce que vous avez voulu utiliser 'new' avec cette expression ?",
   "Digit_expected_1124": "Chiffre attendu",
   "Directory_0_does_not_exist_skipping_all_lookups_in_it_6148": "Le répertoire '{0}' n'existe pas. Toutes les recherches associées sont ignorées.",
+  "Disable_adding_use_strict_directives_in_emitted_JavaScript_files_6669": "Désactivez l’ajout de directives « use strict » dans les fichiers JavaScript émis.",
   "Disable_checking_for_this_file_90018": "Désactiver la vérification de ce fichier",
+  "Disable_emitting_comments_6688": "Désactivez les commentaires émettant.",
+  "Disable_emitting_declarations_that_have_internal_in_their_JSDoc_comments_6701": "Désactivez l’émission de déclarations qui ont « @internal » dans leurs commentaires JSDoc.",
+  "Disable_emitting_file_from_a_compilation_6660": "Désactivez l’émission d’un fichier à partir d’une compilation.",
+  "Disable_emitting_files_if_any_type_checking_errors_are_reported_6662": "Désactivez l’émission de fichiers si des erreurs de vérification de type sont signalées.",
+  "Disable_erasing_const_enum_declarations_in_generated_code_6682": "Désactivez l’effacement des déclarations « const enum » dans le code généré.",
+  "Disable_error_reporting_for_unreachable_code_6603": "Désactivez le rapport d’erreurs pour le code inaccessible.",
+  "Disable_error_reporting_for_unused_labels_6604": "Désactivez le rapport d’erreurs pour les étiquettes inutilisées.",
+  "Disable_generating_custom_helper_functions_like_extends_in_compiled_output_6661": "Désactiver la création de fonctions d'assistance personnalisées comme '__extends' dans la sortie compilée.",
+  "Disable_including_any_library_files_including_the_default_lib_d_ts_6670": "Désactivez l’inclusion des fichiers de bibliothèque, y compris la valeur par défaut de lib.d.ts.",
   "Disable_loading_referenced_projects_6235": "Désactivez le chargement des projets référencés.",
+  "Disable_preferring_source_files_instead_of_declaration_files_when_referencing_composite_projects_6620": "Désactiver la préférence des fichiers sources à la place des fichiers de déclaration lors du référencement des projets composites",
+  "Disable_reporting_of_excess_property_errors_during_the_creation_of_object_literals_6702": "Désactivez le signalement d’erreurs de propriétés excessives lors de la création de littéraux d’objet.",
+  "Disable_resolving_symlinks_to_their_realpath_This_correlates_to_the_same_flag_in_node_6683": "Désactivez la résolution des liens symboliques vers leur chemin d’accès réel. Cela correspond au même indicateur dans le nœud.",
   "Disable_size_limitations_on_JavaScript_projects_6162": "Désactivez les limitations de taille sur les projets JavaScript.",
   "Disable_solution_searching_for_this_project_6224": "Désactivez la recherche de solutions pour ce projet.",
-  "Disable_strict_checking_of_generic_signatures_in_function_types_6185": "Désactivez la vérification stricte des signatures génériques dans les types de fonction.",
+  "Disable_strict_checking_of_generic_signatures_in_function_types_6673": "Désactivez la vérification stricte des signatures génériques dans les types de fonction.",
+  "Disable_the_type_acquisition_for_JavaScript_projects_6625": "Désactiver l’acquisition de type pour les projets JavaScript",
+  "Disable_truncating_types_in_error_messages_6663": "Désactivez les types tronqués dans les messages d’erreur.",
   "Disable_use_of_source_files_instead_of_declaration_files_from_referenced_projects_6221": "Désactivez l'utilisation des fichiers sources à la place des fichiers de déclaration dans les projets référencés.",
+  "Disable_wiping_the_console_in_watch_mode_6684": "Désactiver la réinitialisation de la console en mode espion",
+  "Disables_inference_for_type_acquisition_by_looking_at_filenames_in_a_project_6616": "Désactive l’inférence pour l’acquisition de type en examinant des noms de fichiers dans un projet.",
+  "Disallow_import_s_require_s_or_reference_s_from_expanding_the_number_of_files_TypeScript_should_add__6672": "Interdire à « import », « require » ou « <reference> » d’étendre le nombre de fichiers que TypeScript doit ajouter à un projet.",
   "Disallow_inconsistently_cased_references_to_the_same_file_6078": "Interdisez les références dont la casse est incohérente dans le même fichier.",
   "Do_not_add_triple_slash_references_or_imported_modules_to_the_list_of_compiled_files_6159": "N'ajoutez pas de références avec trois barres obliques, ni de modules importés à la liste des fichiers compilés.",
   "Do_not_emit_comments_to_output_6009": "Ne pas émettre de commentaires dans la sortie.",
@@ -483,31 +557,48 @@
   "Duplicate_identifier_0_2300": "Identificateur '{0}' en double.",
   "Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module_2441": "Identificateur '{0}' en double. Le compilateur réserve le nom '{1}' dans l'étendue de plus haut niveau d'un module.",
   "Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module_containing_async_func_2529": "Identificateur '{0}' en double. Le compilateur réserve le nom '{1}' dans la portée de plus haut niveau d'un module contenant des fonctions async.",
+  "Duplicate_identifier_0_Compiler_reserves_name_1_when_emitting_super_references_in_static_initializer_2818": "Identificateur en double «{0}». Le compilateur réserve le nom «{1}» lors de l’émission de références « super » dans les initialiseurs statiques.",
   "Duplicate_identifier_0_Compiler_uses_declaration_1_to_support_async_functions_2520": "Identificateur '{0}' en double. Le compilateur utilise la déclaration '{1}' pour prendre en charge les fonctions async.",
+  "Duplicate_identifier_0_Static_and_instance_elements_cannot_share_the_same_private_name_2804": "Identificateur '{0}' dupliqué. Les éléments statiques et les éléments d'instance ne peuvent pas partager le même nom privé.",
   "Duplicate_identifier_arguments_Compiler_uses_arguments_to_initialize_rest_parameters_2396": "Identificateur dupliqué 'arguments'. Le compilateur utilise 'arguments' pour initialiser les paramètres rest.",
   "Duplicate_identifier_newTarget_Compiler_uses_variable_declaration_newTarget_to_capture_new_target_me_2543": "Dupliquez l'identificateur '_newTarget'. Le compilateur utilise la déclaration de variable '_newTarget' pour capturer la référence de méta-propriété 'new.target'.",
   "Duplicate_identifier_super_Compiler_uses_super_to_capture_base_class_reference_2401": "Identificateur dupliqué '_super'. Le compilateur utilise '_super' pour capturer la référence de classe de base.",
   "Duplicate_identifier_this_Compiler_uses_variable_declaration_this_to_capture_this_reference_2399": "Identificateur dupliqué '_this'. Le compilateur utilise la déclaration de variable '_this' pour capturer la référence 'this'.",
+  "Duplicate_index_signature_for_type_0_2374": "Doublon de signature d’index pour le type « {0} ».",
   "Duplicate_label_0_1114": "Étiquette '{0}' en double.",
-  "Duplicate_number_index_signature_2375": "Signature d'index de nombre dupliquée.",
   "Duplicate_property_0_2718": "Propriété dupliquée '{0}'.",
-  "Duplicate_string_index_signature_2374": "Signature d'index de chaîne dupliquée.",
   "Dynamic_import_cannot_have_type_arguments_1326": "L'importation dynamique ne peut pas avoir d'arguments de type.",
   "Dynamic_import_must_have_one_specifier_as_an_argument_1324": "L'importation dynamique doit avoir un seul spécificateur comme argument.",
   "Dynamic_import_s_specifier_must_be_of_type_string_but_here_has_type_0_7036": "Le spécificateur de l'importation dynamique doit être de type 'string', mais ici il est de type '{0}'.",
   "Dynamic_imports_are_only_supported_when_the_module_flag_is_set_to_es2020_esnext_commonjs_amd_system__1323": "Les importations dynamiques sont prises en charge uniquement quand l'indicateur '--module' a la valeur 'es2020', 'esnext', 'commonjs', 'amd', 'system' ou 'umd'.",
   "Each_member_of_the_union_type_0_has_construct_signatures_but_none_of_those_signatures_are_compatible_2762": "Chaque membre du type union '{0}' a des signatures de construction, mais aucune de ces signatures n'est compatible avec les autres.",
   "Each_member_of_the_union_type_0_has_signatures_but_none_of_those_signatures_are_compatible_with_each_2758": "Chaque membre du type union '{0}' a des signatures, mais aucune de ces signatures n'est compatible avec les autres.",
-  "Element_at_index_0_is_variadic_in_one_type_but_not_in_the_other_2622": "L'élément à l'index {0} est variadique dans un type mais pas dans l'autre.",
+  "Editor_Support_6249": "Prise en charge de l’Éditeur",
   "Element_implicitly_has_an_any_type_because_expression_of_type_0_can_t_be_used_to_index_type_1_7053": "L'élément a implicitement un type 'any', car l'expression de type '{0}' ne peut pas être utilisée pour indexer le type '{1}'.",
   "Element_implicitly_has_an_any_type_because_index_expression_is_not_of_type_number_7015": "L'élément possède implicitement un type 'any', car l'expression d'index n'est pas de type 'number'.",
   "Element_implicitly_has_an_any_type_because_type_0_has_no_index_signature_7017": "L'élément a implicitement un type 'any', car le type '{0}' n'a aucune signature d'index.",
   "Element_implicitly_has_an_any_type_because_type_0_has_no_index_signature_Did_you_mean_to_call_1_7052": "L'élément a implicitement un type 'any', car le type '{0}' n'a aucune signature d'index. Est-ce que vous avez voulu appeler '{1}' ?",
-  "Emit_a_UTF_8_Byte_Order_Mark_BOM_in_the_beginning_of_output_files_6164": "Émettez une marque d'ordre d'octet (BOM) UTF-8 au début des fichiers de sortie.",
+  "Emit_6246": "Émet",
+  "Emit_ECMAScript_standard_compliant_class_fields_6712": "Émettez des champs de classe conformes à la norme ECMAScript.",
+  "Emit_a_UTF_8_Byte_Order_Mark_BOM_in_the_beginning_of_output_files_6622": "Émettez une marque d'ordre d'octet (BOM) UTF-8 au début des fichiers de sortie.",
   "Emit_a_single_file_with_source_maps_instead_of_having_a_separate_file_6151": "Émettez un seul fichier avec des mappages de sources au lieu d'avoir un fichier distinct.",
+  "Emit_a_v8_CPU_profile_of_the_compiler_run_for_debugging_6638": "Émettez un profil processeur V8 de l’exécution du compilateur pour le débogage.",
+  "Emit_additional_JavaScript_to_ease_support_for_importing_CommonJS_modules_This_enables_allowSyntheti_6626": "Émettez un code JavaScript supplémentaire pour simplifier la prise en charge de l’importation des modules CommonJS. Cela permet à « allowSyntheticDefaultImports » d’être compatible avec le type.",
   "Emit_class_fields_with_Define_instead_of_Set_6222": "Émettez des champs de classe avec Define à la place de Set.",
+  "Emit_design_type_metadata_for_decorated_declarations_in_source_files_6624": "Émettez des métadonnées de type conception pour les déclarations décorées dans les fichiers sources.",
+  "Emit_more_compliant_but_verbose_and_less_performant_JavaScript_for_iteration_6621": "Émettez des JavaScript plus conformes, mais plus détaillés et moins performants pour l’itération.",
   "Emit_the_source_alongside_the_sourcemaps_within_a_single_file_requires_inlineSourceMap_or_sourceMap__6152": "Émettez la source aux côtés des mappages de sources dans un fichier unique. Nécessite la définition de '--inlineSourceMap' ou '--sourceMap'.",
   "Enable_all_strict_type_checking_options_6180": "Activez toutes les options de contrôle de type strict.",
+  "Enable_color_and_formatting_in_output_to_make_compiler_errors_easier_to_read_6685": "Activer la couleur et la mise en forme dans la sortie pour faciliter la lecture des erreurs du compilateur",
+  "Enable_constraints_that_allow_a_TypeScript_project_to_be_used_with_project_references_6611": "Activez les contraintes qui autorisent l’utilisation d’un projet TypeScript avec des références de projet.",
+  "Enable_error_reporting_for_codepaths_that_do_not_explicitly_return_in_a_function_6667": "Activez le rapport d’erreurs pour les chemins de code qui ne sont pas explicitement renvoyés dans une fonction.",
+  "Enable_error_reporting_for_expressions_and_declarations_with_an_implied_any_type_6665": "Activez le rapport d’erreurs pour les expressions et les déclarations avec un type « any » implicite.",
+  "Enable_error_reporting_for_fallthrough_cases_in_switch_statements_6664": "Activez le rapport d’erreurs pour les cas échoués dans les instructions switch.",
+  "Enable_error_reporting_in_type_checked_JavaScript_files_6609": "Activez le rapport d’erreurs dans les fichiers JavaScript vérifiés par type.",
+  "Enable_error_reporting_when_a_local_variables_aren_t_read_6675": "Activez le rapport d’erreurs lorsqu’une variable locale n’est pas lue.",
+  "Enable_error_reporting_when_this_is_given_the_type_any_6668": "Activez le rapport d’erreurs lorsque « this » reçoit le type « any ».",
+  "Enable_experimental_support_for_TC39_stage_2_draft_decorators_6630": "Activez la prise en charge expérimentale des éléments décoratifs de l’étape 2 de TC39.",
+  "Enable_importing_json_files_6689": "Activer l’importation des fichiers .json",
   "Enable_incremental_compilation_6378": "Activer la compilation incrémentielle",
   "Enable_project_compilation_6302": "Activer la compilation du projet",
   "Enable_strict_bind_call_and_apply_methods_on_functions_6214": "Activez des méthodes 'bind', 'call' et 'apply' strictes sur les fonctions.",
@@ -517,11 +608,20 @@
   "Enable_the_experimentalDecorators_option_in_your_configuration_file_95074": "Activer l'option 'experimentalDecorators' dans votre fichier config",
   "Enable_the_jsx_flag_in_your_configuration_file_95088": "Activer l'indicateur '--jsx' dans votre fichier config",
   "Enable_tracing_of_the_name_resolution_process_6085": "Activez le traçage du processus de résolution de noms.",
-  "Enable_verbose_logging_6366": "Activer la journalisation détaillée",
+  "Enable_verbose_logging_6713": "Activer la journalisation détaillée",
   "Enables_emit_interoperability_between_CommonJS_and_ES_Modules_via_creation_of_namespace_objects_for__7037": "Active l'interopérabilité entre les modules CommonJS et ES via la création d'objets d'espace de noms pour toutes les importations. Implique 'allowSyntheticDefaultImports'.",
   "Enables_experimental_support_for_ES7_async_functions_6068": "Active la prise en charge expérimentale des fonctions async ES7.",
   "Enables_experimental_support_for_ES7_decorators_6065": "Active la prise en charge expérimentale des éléments décoratifs ES7.",
   "Enables_experimental_support_for_emitting_type_metadata_for_decorators_6066": "Active la prise en charge expérimentale pour l'émission des métadonnées de type pour les éléments décoratifs.",
+  "Enforces_using_indexed_accessors_for_keys_declared_using_an_indexed_type_6671": "Applique l’utilisation d’accesseurs indexés pour les clés déclarées à l’aide d’un type indexé",
+  "Ensure_overriding_members_in_derived_classes_are_marked_with_an_override_modifier_6666": "Vérifiez que les membres de substitution dans les classes dérivées sont marqués avec un modificateur de remplacement.",
+  "Ensure_that_casing_is_correct_in_imports_6637": "Assurez-vous que la casse est correcte dans les importations.",
+  "Ensure_that_each_file_can_be_safely_transpiled_without_relying_on_other_imports_6645": "Assurez-vous que chaque fichier peut être recompilé en toute sécurité sans s’appuyer sur d’autres importations.",
+  "Ensure_use_strict_is_always_emitted_6605": "Assurez-vous que « use strict » est toujours émis.",
+  "Entry_point_for_implicit_type_library_0_1420": "Point d'entrée pour la bibliothèque de types implicites '{0}'",
+  "Entry_point_for_implicit_type_library_0_with_packageId_1_1421": "Point d'entrée pour la bibliothèque de types implicites '{0}' ayant le packageId '{1}'",
+  "Entry_point_of_type_library_0_specified_in_compilerOptions_1417": "Point d'entrée de la bibliothèque de types '{0}' spécifiée dans compilerOptions",
+  "Entry_point_of_type_library_0_specified_in_compilerOptions_with_packageId_1_1418": "Point d'entrée de la bibliothèque de types '{0}' spécifiée dans compilerOptions et ayant le packageId '{1}'",
   "Enum_0_used_before_its_declaration_2450": "Enum '{0}' utilisé avant sa déclaration.",
   "Enum_declarations_can_only_merge_with_namespace_or_other_enum_declarations_2567": "Les déclarations enum ne peuvent fusionner qu'avec des espaces de noms ou d'autres déclarations enum.",
   "Enum_declarations_must_all_be_const_or_non_const_2473": "Les déclarations d'enum doivent toutes être const ou non const.",
@@ -535,15 +635,13 @@
   "Expected_0_1_type_arguments_provide_these_with_an_extends_tag_8027": "Arguments de type {0}-{1} attendus ; indiquez-les avec la balise '@extends'.",
   "Expected_0_arguments_but_got_1_2554": "{0} arguments attendus, mais {1} reçus.",
   "Expected_0_arguments_but_got_1_Did_you_forget_to_include_void_in_your_type_argument_to_Promise_2794": "{0} arguments attendus, mais {1} reçus. Avez-vous oublié d'inclure 'void' dans votre argument de type pour 'Promise' ?",
-  "Expected_0_arguments_but_got_1_or_more_2556": "{0} arguments attendus, mais {1} ou plus reçus.",
   "Expected_0_type_arguments_but_got_1_2558": "{0} arguments de type attendus, mais {1} reçus.",
   "Expected_0_type_arguments_provide_these_with_an_extends_tag_8026": "Arguments de type {0} attendus ; indiquez-les avec la balise '@extends'.",
   "Expected_at_least_0_arguments_but_got_1_2555": "Au moins {0} arguments attendus, mais {1} reçus.",
-  "Expected_at_least_0_arguments_but_got_1_or_more_2557": "Au moins {0} arguments attendus, mais {1} ou plus reçus.",
   "Expected_corresponding_JSX_closing_tag_for_0_17002": "Balise de fermeture JSX correspondante attendue pour '{0}'.",
   "Expected_corresponding_closing_tag_for_JSX_fragment_17015": "Balise de fermeture correspondante attendue pour le fragment JSX.",
+  "Expected_for_property_initializer_1442": "« = » attendu pour l’initialiseur de propriété.",
   "Expected_type_of_0_field_in_package_json_to_be_1_got_2_6105": "Le type attendu du champ '{0}' dans 'package.json' est censé être '{1}'. Obtention de '{2}'.",
-  "Experimental_Options_6177": "Options expérimentales",
   "Experimental_support_for_decorators_is_a_feature_that_is_subject_to_change_in_a_future_release_Set_t_1219": "La prise en charge expérimentale des éléments décoratifs est une fonctionnalité susceptible de changer dans une prochaine version. Définissez l'option 'experimentalDecorators' dans votre fichier 'tsconfig' ou 'jsconfig' pour supprimer cet avertissement.",
   "Explicitly_specified_module_resolution_kind_Colon_0_6087": "Spécification explicite du genre de résolution de module : '{0}'.",
   "Exponentiation_cannot_be_performed_on_bigint_values_unless_the_target_option_is_set_to_es2016_or_lat_2791": "Impossible d'effectuer l'élévation à une puissance sur des valeurs 'bigint' sauf si l'option 'target' a la valeur 'es2016' ou une valeur qui correspond à une version ultérieure.",
@@ -554,12 +652,14 @@
   "Exported_external_package_typings_file_0_is_not_a_module_Please_contact_the_package_author_to_update_2656": "Le fichier de typages du package externe exporté '{0}' n'est pas un module. Contactez l'auteur du package pour mettre à jour la définition du package.",
   "Exported_external_package_typings_file_cannot_contain_tripleslash_references_Please_contact_the_pack_2654": "Le fichier de typages du package externe exporté ne peut pas contenir de références avec trois barres obliques. Contactez l'auteur du package pour mettre à jour la définition du package.",
   "Exported_type_alias_0_has_or_is_using_private_name_1_4081": "L'alias de type exporté '{0}' possède ou utilise le nom privé '{1}'.",
+  "Exported_type_alias_0_has_or_is_using_private_name_1_from_module_2_4084": "L'alias de type exporté '{0}' a ou utilise le nom privé '{1}' du module {2}.",
   "Exported_variable_0_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4023": "La variable exportée '{0}' possède ou utilise le nom '{1}' du module externe {2}, mais elle ne peut pas être nommée.",
   "Exported_variable_0_has_or_is_using_name_1_from_private_module_2_4024": "La variable exportée '{0}' possède ou utilise le nom '{1}' du module privé '{2}'.",
   "Exported_variable_0_has_or_is_using_private_name_1_4025": "La variable exportée '{0}' possède ou utilise le nom privé '{1}'.",
   "Exports_and_export_assignments_are_not_permitted_in_module_augmentations_2666": "Les exportations et les assignations d'exportation ne sont pas autorisées dans les augmentations de module.",
   "Expression_expected_1109": "Expression attendue.",
   "Expression_or_comma_expected_1137": "Expression ou virgule attendue.",
+  "Expression_produces_a_tuple_type_that_is_too_large_to_represent_2800": "L'expression produit un type de tuple trop grand pour être représenté.",
   "Expression_produces_a_union_type_that_is_too_complex_to_represent_2590": "L'expression produit un type union trop complexe à représenter.",
   "Expression_resolves_to_super_that_compiler_uses_to_capture_base_class_reference_2402": "Expression résolue en '_super' et utilisée par le compilateur pour capturer la référence de classe de base.",
   "Expression_resolves_to_variable_declaration_0_that_compiler_uses_to_support_async_functions_2521": "L'expression correspond à la déclaration de variable '{0}' que le compilateur utilise pour prendre en charge les fonctions async.",
@@ -579,7 +679,9 @@
   "Failed_to_parse_file_0_Colon_1_5014": "Échec de l'analyse du fichier '{0}' : {1}.",
   "Fallthrough_case_in_switch_7029": "Case avec fallthrough dans une instruction switch.",
   "File_0_does_not_exist_6096": "Le fichier '{0}' n'existe pas.",
+  "File_0_does_not_exist_according_to_earlier_cached_lookups_6240": "Selon des recherches mises en cache antérieures, le fichier '{0}' n’existe pas.",
   "File_0_exist_use_it_as_a_name_resolution_result_6097": "Le fichier '{0}' existe. Utilisez-le comme résultat pour la résolution de noms.",
+  "File_0_exists_according_to_earlier_cached_lookups_6239": "Selon des recherches mises en cache antérieures, le fichier '{0}' existe.",
   "File_0_has_an_unsupported_extension_The_only_supported_extensions_are_1_6054": "Le fichier '{0}' a une extension non prise en charge. Les seules extensions prises en charge sont {1}.",
   "File_0_has_an_unsupported_extension_so_skipping_it_6081": "Le fichier '{0}' a une extension non prise en charge. Il est ignoré.",
   "File_0_is_a_JavaScript_file_Did_you_mean_to_enable_the_allowJs_option_6504": "Le fichier '{0}' est un fichier JavaScript. Est-ce que vous avez voulu activer l'option 'allowJs' ?",
@@ -587,16 +689,32 @@
   "File_0_is_not_listed_within_the_file_list_of_project_1_Projects_must_list_all_files_or_use_an_includ_6307": "Le fichier '{0}' ne figure pas dans la liste de fichiers du projet '{1}'. Les projets doivent lister tous les fichiers ou utiliser un modèle 'include'.",
   "File_0_is_not_under_rootDir_1_rootDir_is_expected_to_contain_all_source_files_6059": "Le fichier '{0}' ne se trouve pas sous 'rootDir' '{1}'. 'rootDir' est supposé contenir tous les fichiers sources.",
   "File_0_not_found_6053": "Fichier '{0}' introuvable.",
+  "File_Management_6245": "Gestion de fichiers",
   "File_change_detected_Starting_incremental_compilation_6032": "Modification de fichier détectée. Démarrage de la compilation incrémentielle...",
   "File_is_a_CommonJS_module_it_may_be_converted_to_an_ES6_module_80001": "Le fichier est un module CommonJS ; il peut être converti en module ES6.",
+  "File_is_default_library_for_target_specified_here_1426": "Le fichier représente la bibliothèque par défaut de la cible spécifiée ici.",
+  "File_is_entry_point_of_type_library_specified_here_1419": "Le fichier représente le point d'entrée de la bibliothèque de types spécifiée ici.",
+  "File_is_included_via_import_here_1399": "Le fichier est inclus via une importation ici.",
+  "File_is_included_via_library_reference_here_1406": "Le fichier est inclus via une référence à la bibliothèque ici.",
+  "File_is_included_via_reference_here_1401": "Le fichier est inclus via une référence ici.",
+  "File_is_included_via_type_library_reference_here_1404": "Le fichier est inclus via une référence à la bibliothèque de types ici.",
+  "File_is_library_specified_here_1423": "Le fichier représente la bibliothèque spécifiée ici.",
+  "File_is_matched_by_files_list_specified_here_1410": "Le fichier correspond à la liste 'files' spécifiée ici.",
+  "File_is_matched_by_include_pattern_specified_here_1408": "Le fichier correspond au modèle include spécifié ici.",
+  "File_is_output_from_referenced_project_specified_here_1413": "Le fichier représente la sortie du projet référencé spécifié ici.",
+  "File_is_output_of_project_reference_source_0_1428": "Le fichier représente la sortie de la source de référence de projet '{0}'",
+  "File_is_source_from_referenced_project_specified_here_1416": "Le fichier représente la source du projet référencé spécifié ici.",
   "File_name_0_differs_from_already_included_file_name_1_only_in_casing_1149": "Le nom de fichier '{0}' diffère du nom de fichier '{1}' déjà inclus uniquement par la casse.",
   "File_name_0_has_a_1_extension_stripping_it_6132": "Le nom de fichier '{0}' a une extension '{1}'. Suppression de l'extension.",
+  "File_redirects_to_file_0_1429": "Le fichier est redirigé vers le fichier '{0}'",
   "File_specification_cannot_contain_a_parent_directory_that_appears_after_a_recursive_directory_wildca_5065": "La spécification de fichier ne peut pas contenir un répertoire parent ('..') après un caractère générique de répertoire récursif ('**') : '{0}'.",
   "File_specification_cannot_end_in_a_recursive_directory_wildcard_Asterisk_Asterisk_Colon_0_5010": "Une spécification de fichier ne peut pas se terminer par un caractère générique de répertoire récursif ('**') : '{0}'.",
+  "Filters_results_from_the_include_option_6627": "Filtre les résultats de l’option « inclure ».",
   "Fix_all_detected_spelling_errors_95026": "Corriger toutes les fautes d'orthographe détectées",
   "Fix_all_expressions_possibly_missing_await_95085": "Corriger toutes les expressions où il manque éventuellement 'await'",
   "Fix_all_implicit_this_errors_95107": "Corriger toutes les erreurs implicites liées à 'this'",
   "Fix_all_incorrect_return_type_of_an_async_functions_90037": "Corriger tous les types de retour incorrects des fonctions asynchrone",
+  "For_await_loops_cannot_be_used_inside_a_class_static_block_18038": "Les boucles « for await » ne peuvent pas être utilisées à l’intérieur d’un bloc statique de classe.",
   "Found_0_errors_6217": "{0} erreurs trouvées.",
   "Found_0_errors_Watching_for_file_changes_6194": "{0} erreurs trouvées. Changements de fichier sous surveillance.",
   "Found_1_error_6216": "1 erreur trouvée.",
@@ -610,11 +728,14 @@
   "Function_implementation_name_must_be_0_2389": "Le nom de l'implémentation de fonction doit être '{0}'.",
   "Function_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_ref_7024": "La fonction possède implicitement le type de retour 'any', car elle n'a pas d'annotation de type de retour, et est référencée directement ou indirectement dans l'une de ses expressions de retour.",
   "Function_lacks_ending_return_statement_and_return_type_does_not_include_undefined_2366": "La fonction n'a pas d'instruction return de fin, et le type de retour n'inclut pas 'undefined'.",
+  "Function_not_implemented_95159": "Fonction non implémentée.",
   "Function_overload_must_be_static_2387": "La surcharge de fonction doit être statique.",
   "Function_overload_must_not_be_static_2388": "La surcharge de fonction ne doit pas être statique.",
   "Function_type_notation_must_be_parenthesized_when_used_in_a_union_type_1385": "La notation de type d'une fonction doit être placée entre parenthèses quand elle est utilisée dans un type union.",
   "Function_type_notation_must_be_parenthesized_when_used_in_an_intersection_type_1387": "La notation de type d'une fonction doit être placée entre parenthèses quand elle est utilisée dans un type intersection.",
   "Function_type_which_lacks_return_type_annotation_implicitly_has_an_0_return_type_7014": "Le type de fonction, qui n'a pas d'annotation de type de retour, a implicitement le type de retour '{0}'.",
+  "Function_with_bodies_can_only_merge_with_classes_that_are_ambient_2814": "La fonction avec des corps ne peut fusionner qu’avec des classes qui sont ambiantes.",
+  "Generate_d_ts_files_from_TypeScript_and_JavaScript_files_in_your_project_6612": "Générez des fichiers .d.ts à partir de fichiers TypeScript et JavaScript dans votre projet.",
   "Generate_get_and_set_accessors_95046": "Générer les accesseurs 'get' et 'set'",
   "Generate_get_and_set_accessors_for_all_overriding_properties_95119": "Générer des accesseurs 'get' et 'set' pour toutes les propriétés de remplacement",
   "Generates_a_CPU_profile_6223": "Génère un profil de processeur.",
@@ -627,13 +748,13 @@
   "Generators_are_only_available_when_targeting_ECMAScript_2015_or_higher_1220": "Les générateurs sont disponibles uniquement quand ECMAScript 2015 ou version supérieure est ciblé.",
   "Generic_type_0_requires_1_type_argument_s_2314": "Le type générique '{0}' exige {1} argument(s) de type.",
   "Generic_type_0_requires_between_1_and_2_type_arguments_2707": "Le type générique '{0}' nécessite entre {1} et {2} arguments de type.",
-  "Getter_and_setter_accessors_do_not_agree_in_visibility_2379": "Les accesseurs getter et setter ne sont pas en accord sur la visibilité.",
   "Global_module_exports_may_only_appear_at_top_level_1316": "Les exportations de modules globaux ne peuvent apparaître qu'au niveau supérieur.",
   "Global_module_exports_may_only_appear_in_declaration_files_1315": "Les exportations de modules globaux ne peuvent apparaître que dans les fichiers de déclaration.",
   "Global_module_exports_may_only_appear_in_module_files_1314": "Les exportations de modules globaux ne peuvent apparaître que dans les fichiers de module.",
   "Global_type_0_must_be_a_class_or_interface_type_2316": "Le type global '{0}' doit être un type de classe ou d'interface.",
   "Global_type_0_must_have_1_type_parameter_s_2317": "Le type global '{0}' doit avoir {1} paramètre(s) de type.",
   "Have_recompiles_in_incremental_and_watch_assume_that_changes_within_a_file_will_only_affect_files_di_6384": "Les recompilations dans '--incremental' et '--watch' supposent que les changements apportés à un fichier affectent uniquement les fichiers qui dépendent directement de ce fichier.",
+  "Have_recompiles_in_projects_that_use_incremental_and_watch_mode_assume_that_changes_within_a_file_wi_6606": "Les recompilations dans les projets qui utilisent le mode « incrémentiel » et « espion » supposent que les modifications au sein d’un fichier affectent uniquement les fichiers directement en fonction de celui-ci.",
   "Hexadecimal_digit_expected_1125": "Chiffre hexadécimal attendu.",
   "Identifier_expected_0_is_a_reserved_word_at_the_top_level_of_a_module_1262": "Identificateur attendu. '{0}' est un mot réservé au niveau supérieur d'un module.",
   "Identifier_expected_0_is_a_reserved_word_in_strict_mode_1212": "Identificateur attendu. '{0}' est un mot réservé en mode strict.",
@@ -644,6 +765,7 @@
   "Identifier_expected_esModule_is_reserved_as_an_exported_marker_when_transforming_ECMAScript_modules_1216": "Identificateur attendu. '__esModule' est réservé en tant que marqueur exporté durant la transformation des modules ECMAScript.",
   "If_the_0_package_actually_exposes_this_module_consider_sending_a_pull_request_to_amend_https_Colon_S_7040": "Si le package '{0}' expose réellement ce module, envoyez une demande de tirage (pull request) pour modifier 'https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/{1}'",
   "Ignore_this_error_message_90019": "Ignorer ce message d'erreur",
+  "Ignoring_tsconfig_json_compiles_the_specified_files_with_default_compiler_options_6924": "Ignore tsconfig.json, compile les fichiers spécifiés avec les options du compilateur par défaut",
   "Implement_all_inherited_abstract_classes_95040": "Implémenter toutes les classes abstraites héritées",
   "Implement_all_unimplemented_interfaces_95032": "Implémenter toutes les interfaces non implémentées",
   "Implement_inherited_abstract_class_90007": "Implémenter la classe abstraite héritée",
@@ -660,14 +782,23 @@
   "Import_may_be_converted_to_a_default_import_80003": "L'importation peut être convertie en importation par défaut.",
   "Import_name_cannot_be_0_2438": "Le nom d'importation ne peut pas être '{0}'.",
   "Import_or_export_declaration_in_an_ambient_module_declaration_cannot_reference_module_through_relati_2439": "Une déclaration d'importation ou d'exportation dans une déclaration de module ambiant ne peut référencer un module au moyen d'un nom de module relatif.",
+  "Imported_via_0_from_file_1_1393": "Importé(e) via {0} à partir du fichier '{1}'",
+  "Imported_via_0_from_file_1_to_import_importHelpers_as_specified_in_compilerOptions_1395": "Importé(e) via {0} à partir du fichier '{1}' pour importer 'importHelpers' comme indiqué dans compilerOptions",
+  "Imported_via_0_from_file_1_to_import_jsx_and_jsxs_factory_functions_1397": "Importé(e) via {0} à partir du fichier '{1}' pour importer les fonctions de fabrique 'jsx' et 'jsxs'",
+  "Imported_via_0_from_file_1_with_packageId_2_1394": "Importé(e) via {0} à partir du fichier '{1}' ayant le packageId '{2}'",
+  "Imported_via_0_from_file_1_with_packageId_2_to_import_importHelpers_as_specified_in_compilerOptions_1396": "Importé(e) via {0} à partir du fichier '{1}' ayant le packageId '{2}' pour importer 'importHelpers' comme indiqué dans compilerOptions",
+  "Imported_via_0_from_file_1_with_packageId_2_to_import_jsx_and_jsxs_factory_functions_1398": "Importé(e) via {0} à partir du fichier '{1}' ayant le packageId '{2}' pour importer les fonctions de fabrique 'jsx' et 'jsxs'",
   "Imports_are_not_permitted_in_module_augmentations_Consider_moving_them_to_the_enclosing_external_mod_2667": "Les importations ne sont pas autorisées dans les augmentations de module. Déplacez-les vers le module externe englobant.",
   "In_ambient_enum_declarations_member_initializer_must_be_constant_expression_1066": "Dans les déclarations d'enums ambiants, l'initialiseur de membre doit être une expression constante.",
   "In_an_enum_with_multiple_declarations_only_one_declaration_can_omit_an_initializer_for_its_first_enu_2432": "Dans un enum avec plusieurs déclarations, seule une déclaration peut omettre un initialiseur pour son premier élément d'enum.",
+  "Include_a_list_of_files_This_does_not_support_glob_patterns_as_opposed_to_include_6635": "Incluez une liste de fichiers. Cela ne prend pas en charge les modèles Glob, par opposition à « inclure ».",
   "Include_modules_imported_with_json_extension_6197": "Inclure les modules importés avec l'extension '.json'",
-  "Include_undefined_in_index_signature_results_6800": "Inclure 'undefined' dans les résultats de la signature d'index",
+  "Include_source_code_in_the_sourcemaps_inside_the_emitted_JavaScript_6644": "Incluez le code source dans les images sources à l’intérieur du Code JavaScript émis.",
+  "Include_sourcemap_files_inside_the_emitted_JavaScript_6643": "Incluez les fichiers sourcemap à l’intérieur du Code JavaScript émis.",
+  "Include_undefined_in_index_signature_results_6716": "Inclure 'undefined' dans les résultats de la signature d'index",
+  "Including_watch_w_will_start_watching_the_current_project_for_the_file_changes_Once_set_you_can_conf_6914": "En incluant --watch, -w commence à regarder le projet actuel pour les modifications apportées au fichier. Une fois défini, vous pouvez configurer le mode espion avec :",
+  "Index_signature_for_type_0_is_missing_in_type_1_2329": "La signature d’index pour le type « {0} » est manquante dans le type « {1} ».",
   "Index_signature_in_type_0_only_permits_reading_2542": "La signature d'index du type '{0}' autorise uniquement la lecture.",
-  "Index_signature_is_missing_in_type_0_2329": "Signature d'index manquante dans le type '{0}'.",
-  "Index_signatures_are_incompatible_2330": "Les signatures d'index sont incompatibles.",
   "Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local_2395": "Les déclarations individuelles de la déclaration fusionnée '{0}' doivent toutes être exportées ou locales.",
   "Infer_all_types_from_usage_95023": "Déduire tous les types de l'utilisation",
   "Infer_function_return_type_95148": "Déduire le type de retour de la fonction",
@@ -676,6 +807,7 @@
   "Infer_type_of_0_from_usage_95011": "Déduire le type de '{0}' à partir de l'utilisation",
   "Initialize_property_0_in_the_constructor_90020": "Initialiser la propriété '{0}' dans le constructeur",
   "Initialize_static_property_0_90021": "Initialiser la propriété statique '{0}'",
+  "Initializer_for_property_0_2811": "Initialiseur de la propriété '{0}'",
   "Initializer_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor_2301": "L'initialiseur de la variable membre d'instance '{0}' ne peut pas référencer l'identificateur '{1}' déclaré dans le constructeur.",
   "Initializer_provides_no_value_for_this_binding_element_and_the_binding_element_has_no_default_value_2525": "L'initialiseur ne fournit aucune valeur pour cet élément de liaison, et ce dernier n'a pas de valeur par défaut.",
   "Initializers_are_not_allowed_in_ambient_contexts_1039": "Les initialiseurs ne sont pas autorisés dans les contextes ambiants.",
@@ -686,12 +818,16 @@
   "Interface_0_cannot_simultaneously_extend_types_1_and_2_2320": "L'interface '{0}' ne peut pas étendre simultanément les types '{1}' et '{2}'.",
   "Interface_0_incorrectly_extends_interface_1_2430": "L'interface '{0}' étend de manière incorrecte l'interface '{1}'.",
   "Interface_declaration_cannot_have_implements_clause_1176": "Une déclaration d'interface ne peut pas avoir de clause 'implements'.",
+  "Interface_must_be_given_a_name_1438": "Un nom doit être attribué à l’interface.",
   "Interface_name_cannot_be_0_2427": "Le nom de l'interface ne peut pas être '{0}'.",
+  "Interop_Constraints_6252": "Contraintes d’interopérabilité",
+  "Interpret_optional_property_types_as_written_rather_than_adding_undefined_6243": "Interpréter les types de propriétés facultatifs comme écrits, plutôt que d’ajouter « undefined ».",
   "Invalid_character_1127": "Caractère non valide.",
   "Invalid_module_name_in_augmentation_Module_0_resolves_to_an_untyped_module_at_1_which_cannot_be_augm_2665": "Nom de module non valide dans l'augmentation. Le module '{0}' est résolu en module non typé à l'emplacement '{1}', ce qui empêche toute augmentation.",
   "Invalid_module_name_in_augmentation_module_0_cannot_be_found_2664": "Nom de module non valide dans l'augmentation. Le module '{0}' est introuvable.",
   "Invalid_reference_directive_syntax_1084": "Syntaxe de directive 'reference' non valide.",
   "Invalid_use_of_0_Class_definitions_are_automatically_in_strict_mode_1210": "Utilisation non valide de '{0}'. Les définitions de classe sont automatiquement en mode strict.",
+  "Invalid_use_of_0_It_cannot_be_used_inside_a_class_static_block_18039": "Utilisation non valide de « {0} ». Il ne peut pas être utilisé à l’intérieur d’un bloc statique de classe.",
   "Invalid_use_of_0_Modules_are_automatically_in_strict_mode_1215": "Utilisation non valide de '{0}'. Les modules sont automatiquement en mode strict.",
   "Invalid_use_of_0_in_strict_mode_1100": "Utilisation non valide de '{0}' en mode strict.",
   "Invalid_value_for_jsxFactory_0_is_not_a_valid_identifier_or_qualified_name_5067": "Valeur non valide pour 'jsxFactory'. '{0}' n'est pas un identificateur valide ou un nom qualifié.",
@@ -723,13 +859,18 @@
   "JSX_expressions_may_not_use_the_comma_operator_Did_you_mean_to_write_an_array_18007": "Les expressions JSX ne peuvent pas utiliser l'opérateur virgule. Est-ce que vous avez voulu écrire un tableau ?",
   "JSX_expressions_must_have_one_parent_element_2657": "Les expressions JSX doivent avoir un élément parent.",
   "JSX_fragment_has_no_corresponding_closing_tag_17014": "Le fragment JSX n'a pas de balise de fermeture correspondante.",
+  "JSX_property_access_expressions_cannot_include_JSX_namespace_names_2633": "Les expressions d'accès aux propriétés JSX ne peuvent pas inclure de noms d'espaces de noms JSX",
   "JSX_spread_child_must_be_an_array_type_2609": "L'enfant spread JSX doit être un type de tableau.",
+  "JavaScript_Support_6247": "Prise en charge de JavaScript",
   "Jump_target_cannot_cross_function_boundary_1107": "La cible du saut ne peut pas traverser une limite de fonction.",
   "KIND_6034": "GENRE",
   "Keywords_cannot_contain_escape_characters_1260": "Les mots clés ne peuvent pas contenir de caractères d'échappement.",
   "LOCATION_6037": "EMPLACEMENT",
+  "Language_and_Environment_6254": "Langage et Environnement",
   "Language_service_is_disabled_9004": "Le service de langage est désactivé.",
   "Left_side_of_comma_operator_is_unused_and_has_no_side_effects_2695": "Le côté gauche de l'opérateur virgule n'est pas utilisé, et n'a aucun effet secondaire.",
+  "Library_0_specified_in_compilerOptions_1422": "Bibliothèque '{0}' spécifiée dans compilerOptions",
+  "Library_referenced_via_0_from_file_1_1405": "Bibliothèque référencée via '{0}' à partir du fichier '{1}'",
   "Line_break_not_permitted_here_1142": "Saut de ligne non autorisé ici.",
   "Line_terminator_not_permitted_before_arrow_1200": "Marque de fin de ligne non autorisée devant une flèche.",
   "List_of_folders_to_include_type_definitions_from_6161": "Liste des dossiers à partir desquels inclure les définitions de type.",
@@ -739,11 +880,14 @@
   "Loading_module_0_from_node_modules_folder_target_file_type_1_6098": "Chargement du module '{0}' à partir du dossier 'node_modules'. Type du fichier cible '{1}'.",
   "Loading_module_as_file_Slash_folder_candidate_module_location_0_target_file_type_1_6095": "Chargement du module en tant que fichier/dossier. Emplacement du module candidat '{0}'. Type de fichier cible '{1}'.",
   "Locale_must_be_of_the_form_language_or_language_territory_For_example_0_or_1_6048": "Les paramètres régionaux doivent être sous la forme <langue> ou <langue>-<territoire>. Par exemple, '{0}' ou '{1}'.",
+  "Log_paths_used_during_the_moduleResolution_process_6706": "Chemins d’accès de journal utilisés pendant le processus « moduleResolution ».",
   "Longest_matching_prefix_for_0_is_1_6108": "Le préfixe correspondant le plus long pour '{0}' est '{1}'.",
   "Looking_up_in_node_modules_folder_initial_location_0_6125": "Recherche dans le dossier 'node_modules', emplacement initial '{0}'.",
   "Make_all_super_calls_the_first_statement_in_their_constructor_95036": "Faire de tous les appels 'super()' la première instruction dans leur constructeur",
+  "Make_keyof_only_return_strings_instead_of_string_numbers_or_symbols_Legacy_option_6650": "Faites en sorte que keyof retourne uniquement des chaînes au lieu de chaînes, de nombres ou de symboles. Option héritée.",
   "Make_super_call_the_first_statement_in_the_constructor_90002": "Faire de l'appel à 'super()' la première instruction du constructeur",
   "Mapped_object_type_implicitly_has_an_any_template_type_7039": "Le type d'objet mappé a implicitement un type de modèle 'any'.",
+  "Matched_by_include_pattern_0_in_1_1407": "Correspond au modèle include '{0}' dans '{1}'",
   "Member_0_implicitly_has_an_1_type_7008": "Le membre '{0}' possède implicitement un type '{1}'.",
   "Member_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage_7045": "Le membre '{0}' a implicitement un type '{1}', mais il est possible de déduire un meilleur type à partir de l'utilisation.",
   "Merge_conflict_marker_encountered_1185": "Marqueur de conflit de fusion rencontré.",
@@ -752,6 +896,7 @@
   "Method_0_cannot_have_an_implementation_because_it_is_marked_abstract_1245": "La méthode '{0}' ne peut pas avoir d'implémentation, car elle est marquée comme étant abstraite.",
   "Method_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2_4101": "La méthode '{0}' de l'interface exportée comporte ou utilise le nom '{1}' du module privé '{2}'.",
   "Method_0_of_exported_interface_has_or_is_using_private_name_1_4102": "La méthode '{0}' de l'interface exportée comporte ou utilise le nom privé '{1}'.",
+  "Method_not_implemented_95158": "Méthode non implémentée.",
   "Modifiers_cannot_appear_here_1184": "Les modificateurs ne peuvent pas apparaître ici.",
   "Module_0_can_only_be_default_imported_using_the_1_flag_1259": "Le module '{0}' peut uniquement être importé par défaut à l'aide de l'indicateur '{1}'",
   "Module_0_declares_1_locally_but_it_is_exported_as_2_2460": "Le module '{0}' déclare '{1}' localement, mais il est exporté en tant que '{2}'.",
@@ -769,13 +914,14 @@
   "Module_0_was_resolved_as_locally_declared_ambient_module_in_file_1_6144": "Le module '{0}' a été résolu en tant que module ambiant déclaré localement dans le fichier '{1}'.",
   "Module_0_was_resolved_to_1_but_jsx_is_not_set_6142": "Le module '{0}' a été résolu en '{1}' mais '--jsx' n'est pas défini.",
   "Module_0_was_resolved_to_1_but_resolveJsonModule_is_not_used_7042": "Le module '{0}' a été résolu en '{1}' mais '--resolveJsonModule' n'est pas utilisé.",
-  "Module_Resolution_Options_6174": "Options de résolution du module",
+  "Module_declaration_names_may_only_use_or_quoted_strings_1443": "Les noms de déclaration de module ne peuvent utiliser que des chaînes entre guillemets.",
   "Module_name_0_matched_pattern_1_6092": "Nom de module '{0}', modèle correspondant '{1}'.",
   "Module_name_0_was_not_resolved_6090": "======== Le nom de module '{0}' n'a pas été résolu. ========",
   "Module_name_0_was_successfully_resolved_to_1_6089": "======== Le nom de module '{0}' a été correctement résolu en '{1}'. ========",
   "Module_name_0_was_successfully_resolved_to_1_with_Package_ID_2_6218": "======== Le nom de module '{0}' a été correctement résolu en '{1}' avec l'ID de package '{2}'. ========",
   "Module_resolution_kind_is_not_specified_using_0_6088": "Le genre de résolution de module n'est pas spécifié. Utilisation de '{0}'.",
   "Module_resolution_using_rootDirs_has_failed_6111": "Échec de la résolution de module à l'aide de 'rootDirs'.",
+  "Modules_6244": "Modules",
   "Move_labeled_tuple_element_modifiers_to_labels_95117": "Déplacer les modificateurs d'élément de tuple étiqueté vers les étiquettes",
   "Move_to_a_new_file_95049": "Déplacer vers un nouveau fichier",
   "Multiple_consecutive_numeric_separators_are_not_permitted_6189": "Les séparateurs numériques consécutifs multiples ne sont pas autorisés.",
@@ -784,11 +930,14 @@
   "Name_is_not_valid_95136": "Le nom n'est pas valide",
   "Named_property_0_of_types_1_and_2_are_not_identical_2319": "La propriété nommée '{0}' des types '{1}' et '{2}' n'est pas identique.",
   "Namespace_0_has_no_exported_member_1_2694": "L'espace de noms '{0}' n'a aucun membre exporté '{1}'.",
+  "Namespace_must_be_given_a_name_1437": "Un nom doit être attribué à l’espace de noms.",
+  "Namespace_name_cannot_be_0_2819": "L’espace de noms ne peut pas être «{0}».",
   "No_base_constructor_has_the_specified_number_of_type_arguments_2508": "Aucun constructeur de base n'a le nombre spécifié d'arguments de type.",
   "No_constituent_of_type_0_is_callable_2755": "Aucun constituant de type '{0}' ne peut être appelé.",
   "No_constituent_of_type_0_is_constructable_2759": "Aucun constituant de type '{0}' ne peut être construit.",
   "No_index_signature_with_a_parameter_of_type_0_was_found_on_type_1_7054": "Aucune signature d'index avec un paramètre de type '{0}' n'a été localisée sur le type '{1}'.",
   "No_inputs_were_found_in_config_file_0_Specified_include_paths_were_1_and_exclude_paths_were_2_18003": "Aucune entrée dans le fichier config '{0}'. Les chemins 'include' spécifiés étaient '{1}' et les chemins 'exclude' étaient '{2}'.",
+  "No_longer_supported_In_early_versions_manually_set_the_text_encoding_for_reading_files_6608": "Plus prise en charge. Dans les premières versions, définissez manuellement l’encodage de texte pour la lecture des fichiers.",
   "No_overload_expects_0_arguments_but_overloads_do_exist_that_expect_either_1_or_2_arguments_2575": "Aucune surcharge n'attend {0} arguments, mais il existe des surcharges qui attendent {1} ou {2} arguments.",
   "No_overload_expects_0_type_arguments_but_overloads_do_exist_that_expect_either_1_or_2_type_arguments_2743": "Aucune surcharge n'attend {0} arguments de type, mais il existe des surcharges qui attendent {1} ou {2} arguments de type.",
   "No_overload_matches_this_call_2769": "Aucune surcharge ne correspond à cet appel.",
@@ -802,7 +951,6 @@
   "Not_all_code_paths_return_a_value_7030": "Les chemins du code ne retournent pas tous une valeur.",
   "Not_all_constituents_of_type_0_are_callable_2756": "Tous les constituants de type '{0}' ne peuvent pas être appelés.",
   "Not_all_constituents_of_type_0_are_constructable_2760": "Tous les constituants de type '{0}' ne peuvent pas être construits.",
-  "Numeric_index_type_0_is_not_assignable_to_string_index_type_1_2413": "Impossible d'assigner le type d'index numérique '{0}' au type d'index de chaîne '{1}'.",
   "Numeric_literals_with_absolute_values_equal_to_2_53_or_greater_are_too_large_to_be_represented_accur_80008": "Les littéraux numériques ayant des valeurs absolues égales ou supérieures à 2^53 sont trop grands pour être représentés avec précision sous forme d'entiers.",
   "Numeric_separators_are_not_allowed_here_6188": "Les séparateurs numériques ne sont pas autorisés ici.",
   "Object_is_of_type_unknown_2571": "L'objet est de type 'unknown'.",
@@ -826,9 +974,11 @@
   "Only_identifiers_Slashqualified_names_with_optional_type_arguments_are_currently_supported_in_a_clas_9002": "Seuls les identificateurs/noms qualifiés avec des arguments de type facultatifs sont pris en charge dans une clause 'extends' de classe.",
   "Only_named_exports_may_use_export_type_1383": "Seules les exportations nommées peuvent utiliser 'export type'.",
   "Only_numeric_enums_can_have_computed_members_but_this_expression_has_type_0_If_you_do_not_need_exhau_18033": "Seules les enums numériques peuvent avoir des membres calculés, mais cette expression a le type '{0}'. Si vous n'avez pas besoin de contrôles d'exhaustivité, utilisez un littéral d'objet à la place.",
+  "Only_output_d_ts_files_and_not_JavaScript_files_6623": "Sortie uniquement des fichiers d.ts et non des fichiers JavaScript.",
   "Only_public_and_protected_methods_of_the_base_class_are_accessible_via_the_super_keyword_2340": "Seules les méthodes publiques et protégées de la classe de base sont accessibles par le biais du mot clé 'super'.",
   "Operator_0_cannot_be_applied_to_type_1_2736": "Impossible d'appliquer l'opérateur '{0}' au type '{1}'.",
   "Operator_0_cannot_be_applied_to_types_1_and_2_2365": "Impossible d'appliquer l'opérateur '{0}' aux types '{1}' et '{2}'.",
+  "Opt_a_project_out_of_multi_project_reference_checking_when_editing_6619": "Choisir un projet en dehors de la vérification des références multiprojets lors de l’édition.",
   "Option_0_can_only_be_specified_in_tsconfig_json_file_or_set_to_false_or_null_on_command_line_6230": "Vous pouvez spécifier l'option '{0}' uniquement dans le fichier 'tsconfig.json', ou lui affecter la valeur 'false' ou 'null' sur la ligne de commande.",
   "Option_0_can_only_be_specified_in_tsconfig_json_file_or_set_to_null_on_command_line_6064": "Vous pouvez spécifier l'option '{0}' uniquement dans le fichier 'tsconfig.json', ou lui affecter la valeur 'null' sur la ligne de commande.",
   "Option_0_can_only_be_used_when_either_option_inlineSourceMap_or_option_sourceMap_is_provided_5051": "L'option '{0}' peut être utilisée uniquement quand l'option '--inlineSourceMap' ou l'option '--sourceMap' est spécifiée.",
@@ -841,14 +991,20 @@
   "Option_build_must_be_the_first_command_line_argument_6369": "L'option '--build' doit être le premier argument de ligne de commande.",
   "Option_incremental_can_only_be_specified_using_tsconfig_emitting_to_single_file_or_when_option_tsBui_5074": "L'option '--incremental' peut uniquement être spécifiée à l'aide de tsconfig, en cas d'émission vers un seul fichier ou quand l'option '--tsBuildInfoFile' est spécifiée.",
   "Option_isolatedModules_can_only_be_used_when_either_option_module_is_provided_or_option_target_is_ES_5047": "L'option 'isolatedModules' peut être utilisée seulement quand l'option '--module' est spécifiée, ou quand l'option 'target' a la valeur 'ES2015' ou une version supérieure.",
+  "Option_preserveConstEnums_cannot_be_disabled_when_isolatedModules_is_enabled_5091": "L'option 'preserveConstEnums' ne peut pas être désactivée quand 'isolatedModules' est activé.",
   "Option_project_cannot_be_mixed_with_source_files_on_a_command_line_5042": "Impossible d'associer l'option 'project' à des fichiers sources sur une ligne de commande.",
   "Option_resolveJsonModule_can_only_be_specified_when_module_code_generation_is_commonjs_amd_es2015_or_5071": "L'option '--resolveJsonModule' peut uniquement être spécifiée quand la génération du code de module est 'commonjs', 'amd', 'es2015' ou 'esNext'.",
   "Option_resolveJsonModule_cannot_be_specified_without_node_module_resolution_strategy_5070": "Impossible de spécifier l'option '--resolveJsonModule' sans la stratégie de résolution de module 'node'.",
   "Options_0_and_1_cannot_be_combined_6370": "Impossible de combiner les options '{0}' et '{1}'.",
   "Options_Colon_6027": "Options :",
+  "Output_Formatting_6256": "Mise en forme de sortie",
+  "Output_compiler_performance_information_after_building_6615": "Informations de performances du compilateur de sortie après la génération.",
   "Output_directory_for_generated_declaration_files_6166": "Répertoire de sortie pour les fichiers de déclaration générés.",
   "Output_file_0_from_project_1_does_not_exist_6309": "Le fichier de sortie '{0}' du projet '{1}' n'existe pas",
   "Output_file_0_has_not_been_built_from_source_file_1_6305": "Le fichier de sortie '{0}' n'a pas été créé à partir du fichier source '{1}'.",
+  "Output_from_referenced_project_0_included_because_1_specified_1411": "Sortie du projet référencé '{0}' incluse, car '{1}' est spécifié",
+  "Output_from_referenced_project_0_included_because_module_is_specified_as_none_1412": "Sortie du projet référencé '{0}' incluse, car '--module' est spécifié en tant que 'none'",
+  "Output_more_detailed_compiler_performance_information_after_building_6632": "Affichez des informations plus détaillées sur les performances du compilateur après la génération.",
   "Overload_0_of_1_2_gave_the_following_error_2772": "La surcharge {0} sur {1}, '{2}', a généré l'erreur suivante.",
   "Overload_signatures_must_all_be_abstract_or_non_abstract_2512": "Les signatures de surcharge doivent toutes être abstraites ou non abstraites.",
   "Overload_signatures_must_all_be_ambient_or_non_ambient_2384": "Les signatures de surcharge doivent toutes être ambiantes ou non ambiantes.",
@@ -892,18 +1048,25 @@
   "Parameter_type_of_public_static_setter_0_from_exported_class_has_or_is_using_name_1_from_private_mod_4034": "Le type de paramètre du setter public '{0}' de la classe exportée porte ou utilise le nom '{1}' du module privé '{2}'.",
   "Parameter_type_of_public_static_setter_0_from_exported_class_has_or_is_using_private_name_1_4035": "Le type de paramètre du setter public '{0}' de la classe exportée porte ou utilise le nom privé '{1}'.",
   "Parse_in_strict_mode_and_emit_use_strict_for_each_source_file_6141": "Analyser en mode strict et émettre \"use strict\" pour chaque fichier source.",
+  "Part_of_files_list_in_tsconfig_json_1409": "Partie de la liste 'files' dans tsconfig.json",
   "Pattern_0_can_have_at_most_one_Asterisk_character_5061": "Le modèle '{0}' ne peut avoir qu'un seul caractère '*' au maximum.",
   "Performance_timings_for_diagnostics_or_extendedDiagnostics_are_not_available_in_this_session_A_nativ_6386": "Les minutages de performances pour '--diagnostics' ou '--extendedDiagnostics' ne sont pas disponibles dans cette session. Une implémentation native de l'API de performances web est introuvable.",
+  "Platform_specific_6912": "Spécifique à la plateforme",
   "Prefix_0_with_an_underscore_90025": "Faire précéder '{0}' d'un trait de soulignement",
   "Prefix_all_incorrect_property_declarations_with_declare_95095": "Faire commencer toutes les déclarations de propriété incorrectes par 'declare'",
   "Prefix_all_unused_declarations_with_where_possible_95025": "Préfixer toutes les déclarations inutilisées avec '_' si possible",
   "Prefix_with_declare_95094": "Faire commencer par 'declare'",
+  "Print_all_of_the_files_read_during_the_compilation_6653": "Imprimez tous les fichiers lus pendant la compilation.",
+  "Print_files_read_during_the_compilation_including_why_it_was_included_6631": "Fichiers d’impression lus pendant la compilation, notamment la raison de l’inclusion.",
+  "Print_names_of_files_and_the_reason_they_are_part_of_the_compilation_6505": "Affiche les noms des fichiers et la raison pour laquelle ils font partie de la compilation.",
   "Print_names_of_files_part_of_the_compilation_6155": "Imprimez les noms des fichiers faisant partie de la compilation.",
   "Print_names_of_files_that_are_part_of_the_compilation_and_then_stop_processing_6503": "Affichez les noms des fichiers qui font partie de la compilation, puis arrêtez le traitement.",
   "Print_names_of_generated_files_part_of_the_compilation_6154": "Imprimez les noms des fichiers générés faisant partie de la compilation.",
   "Print_the_compiler_s_version_6019": "Affichez la version du compilateur.",
   "Print_the_final_configuration_instead_of_building_1350": "Affichez la configuration finale au lieu d'effectuer la génération.",
+  "Print_the_names_of_emitted_files_after_a_compilation_6652": "Imprimez les noms des fichiers émis après une compilation.",
   "Print_this_message_6017": "Imprimez ce message.",
+  "Private_accessor_was_defined_without_a_getter_2806": "L'accesseur privé a été défini sans getter.",
   "Private_identifiers_are_not_allowed_in_variable_declarations_18029": "Les identificateurs privés ne sont pas autorisés dans les déclarations de variable.",
   "Private_identifiers_are_not_allowed_outside_class_bodies_18016": "Les identificateurs privés ne sont pas autorisés en dehors des corps de classe.",
   "Private_identifiers_are_only_available_when_targeting_ECMAScript_2015_and_higher_18028": "Les identificateurs privés sont disponibles uniquement durant le ciblage d'ECMAScript 2015 et version ultérieure.",
@@ -911,6 +1074,7 @@
   "Private_or_protected_member_0_cannot_be_accessed_on_a_type_parameter_4105": "Le membre privé ou protégé '{0}' n'est pas accessible sur un paramètre de type.",
   "Project_0_can_t_be_built_because_its_dependency_1_has_errors_6363": "Impossible de générer le projet '{0}' car sa dépendance '{1}' comporte des erreurs",
   "Project_0_can_t_be_built_because_its_dependency_1_was_not_built_6383": "Impossible de générer le projet '{0}', car sa dépendance '{1}' n'a pas été générée",
+  "Project_0_is_being_forcibly_rebuilt_6388": "Le projet « {0} » est en cours de régénération forcée",
   "Project_0_is_out_of_date_because_its_dependency_1_is_out_of_date_6353": "Le projet '{0}' est obsolète car sa dépendance '{1}' est obsolète",
   "Project_0_is_out_of_date_because_oldest_output_1_is_older_than_newest_input_2_6350": "Le projet '{0}' est obsolète car la sortie la plus ancienne ('{1}') est antérieure à l'entrée la plus récente '{2}'",
   "Project_0_is_out_of_date_because_output_file_1_does_not_exist_6352": "Le projet '{0}' est obsolète car le fichier de sortie '{1}' n'existe pas",
@@ -920,14 +1084,18 @@
   "Project_0_is_up_to_date_because_newest_input_1_is_older_than_oldest_output_2_6351": "Le projet '{0}' est à jour car l'entrée la plus récente ('{1}') est antérieure à la sortie la plus ancienne ('{2}')",
   "Project_0_is_up_to_date_with_d_ts_files_from_its_dependencies_6354": "Le projet '{0}' est à jour avec les fichiers .d.ts de ses dépendances",
   "Project_references_may_not_form_a_circular_graph_Cycle_detected_Colon_0_6202": "Les références de projet ne peuvent pas former un graphe circulaire. Cycle détecté : {0}",
+  "Projects_6255": "Projets",
   "Projects_in_this_build_Colon_0_6355": "Projets dans cette build : {0}",
   "Projects_to_reference_6300": "Projets à référencer",
+  "Property_0_cannot_have_an_initializer_because_it_is_marked_abstract_1267": "La propriété « {0} » ne peut pas avoir d’initialiseur, car elle est marquée comme abstraite.",
   "Property_0_comes_from_an_index_signature_so_it_must_be_accessed_with_0_4111": "La propriété '{0}' est issue d'une signature d'index, elle doit donc faire l'objet d'un accès avec ['{0}'].",
   "Property_0_does_not_exist_on_const_enum_1_2479": "La propriété '{0}' n'existe pas sur l'enum 'const' '{1}'.",
   "Property_0_does_not_exist_on_type_1_2339": "La propriété '{0}' n'existe pas sur le type '{1}'.",
   "Property_0_does_not_exist_on_type_1_Did_you_mean_2_2551": "La propriété '{0}' n'existe pas sur le type '{1}'. Est-ce qu'il ne s'agit pas plutôt de '{2}' ?",
   "Property_0_does_not_exist_on_type_1_Did_you_mean_to_access_the_static_member_2_instead_2576": "La propriété '{0}' n'existe pas sur le type '{1}'. Ne vouliez-vous pas plutôt accéder au membre statique '{2}' ?",
   "Property_0_does_not_exist_on_type_1_Do_you_need_to_change_your_target_library_Try_changing_the_lib_c_2550": "La propriété '{0}' n'existe pas sur le type '{1}'. Devez-vous changer votre bibliothèque cible ? Essayez de changer l'option de compilateur 'lib' en '{2}' ou une version ultérieure.",
+  "Property_0_does_not_exist_on_type_1_Try_changing_the_lib_compiler_option_to_include_dom_2812": "La propriété '{0}' n’existe pas sur le type '{1}'. Essayez de modifier l’option de compileur 'lib' pour inclure 'dom'.",
+  "Property_0_has_no_initializer_and_is_not_definitely_assigned_in_a_class_static_block_2817": "La propriété « {0} » n'a aucun initialiseur et n'est pas définitivement assignée dans un bloc statique de classe.",
   "Property_0_has_no_initializer_and_is_not_definitely_assigned_in_the_constructor_2564": "La propriété '{0}' n'a aucun initialiseur et n'est pas définitivement assignée dans le constructeur.",
   "Property_0_implicitly_has_type_any_because_its_get_accessor_lacks_a_return_type_annotation_7033": "La propriété '{0}' a implicitement le type 'any', car son accesseur get ne dispose pas d'une annotation de type de retour.",
   "Property_0_implicitly_has_type_any_because_its_set_accessor_lacks_a_parameter_type_annotation_7032": "La propriété '{0}' a implicitement le type 'any', car son accesseur set ne dispose pas d'une annotation de type de paramètre.",
@@ -945,18 +1113,19 @@
   "Property_0_is_optional_in_type_1_but_required_in_type_2_2327": "La propriété '{0}' est facultative dans le type '{1}', mais obligatoire dans le type '{2}'.",
   "Property_0_is_private_and_only_accessible_within_class_1_2341": "La propriété '{0}' est privée et uniquement accessible dans la classe '{1}'.",
   "Property_0_is_private_in_type_1_but_not_in_type_2_2325": "La propriété '{0}' est privée dans le type '{1}', mais pas dans le type '{2}'.",
-  "Property_0_is_protected_and_only_accessible_through_an_instance_of_class_1_2446": "La propriété '{0}' est protégée et uniquement accessible par le biais d'une instance de la classe '{1}'.",
+  "Property_0_is_protected_and_only_accessible_through_an_instance_of_class_1_This_is_an_instance_of_cl_2446": "La propriété '{0}' est protégée et uniquement accessible via une instance de la classe '{1}'. Ceci est une instance de la classe '{2}'.",
   "Property_0_is_protected_and_only_accessible_within_class_1_and_its_subclasses_2445": "La propriété '{0}' est protégée et uniquement accessible dans la classe '{1}' et ses sous-classes.",
   "Property_0_is_protected_but_type_1_is_not_a_class_derived_from_2_2443": "La propriété '{0}' est protégée, mais le type '{1}' n'est pas une classe dérivée de '{2}'.",
   "Property_0_is_protected_in_type_1_but_public_in_type_2_2444": "La propriété '{0}' est protégée dans le type '{1}', mais publique dans le type '{2}'.",
   "Property_0_is_used_before_being_assigned_2565": "La propriété '{0}' est utilisée avant d'être assignée.",
   "Property_0_is_used_before_its_initialization_2729": "La propriété '{0}' est utilisée avant son initialisation.",
+  "Property_0_may_not_be_used_in_a_static_property_s_initializer_in_the_same_class_when_target_is_esnex_2810": "La propriété '{0}' ne peut pas être utilisée dans la version initiale d’une propriété statique dans la même classe lorsque 'target' est 'esnext' et 'useDefineForClassFields' est 'false'.",
+  "Property_0_may_not_exist_on_type_1_Did_you_mean_2_2568": "La propriété «{0}» n'existe pas sur le type «{1}». Est-ce qu'il ne s'agit pas plutôt de «{2}»?",
   "Property_0_of_JSX_spread_attribute_is_not_assignable_to_target_property_2606": "Impossible d'assigner la propriété '{0}' de l'attribut spread JSX à la propriété cible.",
   "Property_0_of_exported_class_expression_may_not_be_private_or_protected_4094": "La propriété '{0}' de l'expression de classe exportée ne peut pas être privée ou protégée.",
   "Property_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2_4032": "La propriété '{0}' de l'interface exportée possède ou utilise le nom '{1}' du module privé '{2}'.",
   "Property_0_of_exported_interface_has_or_is_using_private_name_1_4033": "La propriété '{0}' de l'interface exportée possède ou utilise le nom privé '{1}'.",
-  "Property_0_of_type_1_is_not_assignable_to_numeric_index_type_2_2412": "Impossible d'assigner la propriété '{0}' de type '{1}' au type d'index numérique '{2}'.",
-  "Property_0_of_type_1_is_not_assignable_to_string_index_type_2_2411": "Impossible d'assigner la propriété '{0}' de type '{1}' au type d'index de chaîne '{2}'.",
+  "Property_0_of_type_1_is_not_assignable_to_2_index_type_3_2411": "La propriété « {0} » de type « {1} » ne peut pas être attribuée au type d’index « {2} », « {3} ».",
   "Property_0_was_also_declared_here_2733": "La propriété '{0}' a également été déclarée ici.",
   "Property_0_will_overwrite_the_base_property_in_1_If_this_is_intentional_add_an_initializer_Otherwise_2612": "La propriété '{0}' va remplacer la propriété de base dans '{1}'. Si cela est intentionnel, ajoutez un initialiseur. Sinon, ajoutez un modificateur 'declare', ou supprimez la déclaration redondante.",
   "Property_assignment_expected_1136": "Assignation de propriété attendue.",
@@ -978,12 +1147,18 @@
   "Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4027": "La propriété statique publique '{0}' de la classe exportée possède ou utilise le nom '{1}' du module privé '{2}'.",
   "Public_static_property_0_of_exported_class_has_or_is_using_private_name_1_4028": "La propriété statique publique '{0}' de la classe exportée possède ou utilise le type privé '{1}'.",
   "Qualified_name_0_is_not_allowed_without_a_leading_param_object_1_8032": "Le nom qualifié '{0}' n'est pas autorisé si '@param {object} {1}' n'est pas placé au début.",
+  "Raise_an_error_when_a_function_parameter_isn_t_read_6676": "Déclencher une erreur quand un paramètre de fonction n’est pas lu",
   "Raise_error_on_expressions_and_declarations_with_an_implied_any_type_6052": "Lever une erreur sur les expressions et les déclarations ayant un type 'any' implicite.",
   "Raise_error_on_this_expressions_with_an_implied_any_type_6115": "Déclenche une erreur sur les expressions 'this' avec un type 'any' implicite.",
   "Re_exporting_a_type_when_the_isolatedModules_flag_is_provided_requires_using_export_type_1205": "La réexportation d'un type quand l'indicateur '--isolatedModules' est spécifié nécessite l'utilisation de 'export type'.",
   "Redirect_output_structure_to_the_directory_6006": "Rediriger la structure de sortie vers le répertoire.",
+  "Reduce_the_number_of_projects_loaded_automatically_by_TypeScript_6617": "Réduisez le nombre de projets chargés automatiquement par TypeScript.",
   "Referenced_project_0_may_not_disable_emit_6310": "Le projet référencé '{0}' ne doit pas désactiver l'émission.",
   "Referenced_project_0_must_have_setting_composite_Colon_true_6306": "Le projet référencé '{0}' doit avoir le paramètre \"composite\" avec la valeur true.",
+  "Referenced_via_0_from_file_1_1400": "Référencé(e) via '{0}' à partir du fichier '{1}'",
+  "Remove_a_list_of_directories_from_the_watch_process_6628": "Supprimez une liste de répertoires du processus d’observation.",
+  "Remove_a_list_of_files_from_the_watch_mode_s_processing_6629": "Supprimez une liste de fichiers du traitement du mode espion.",
+  "Remove_all_unnecessary_override_modifiers_95163": "Supprimer tous les modificateurs 'override' inutiles",
   "Remove_all_unnecessary_uses_of_await_95087": "Supprimer toutes les utilisations non nécessaires de 'await'",
   "Remove_all_unreachable_code_95051": "Supprimer tout le code inaccessible",
   "Remove_all_unused_labels_95054": "Supprimer toutes les étiquettes inutilisées",
@@ -991,8 +1166,10 @@
   "Remove_braces_from_arrow_function_95060": "Supprimer les accolades de la fonction arrow",
   "Remove_braces_from_arrow_function_body_95112": "Supprimer les accolades du corps de fonction arrow",
   "Remove_import_from_0_90005": "Supprimer l'importation de '{0}'",
+  "Remove_override_modifier_95161": "Supprimer un modificateur 'override'",
   "Remove_parentheses_95126": "Supprimer les parenthèses",
   "Remove_template_tag_90011": "Supprimer la balise template",
+  "Remove_the_20mb_cap_on_total_source_code_size_for_JavaScript_files_in_the_TypeScript_language_server_6618": "Supprimez la limite de 20 Mo sur la taille totale du code source pour les fichiers JavaScript dans le serveur de langage TypeScript.",
   "Remove_type_parameters_90012": "Supprimer les paramètres de type",
   "Remove_unnecessary_await_95086": "Supprimer toute utilisation non nécessaire de 'await'",
   "Remove_unreachable_code_95050": "Supprimer le code inaccessible",
@@ -1010,14 +1187,16 @@
   "Report_errors_in_js_files_8019": "Signalez les erreurs dans les fichiers .js.",
   "Report_errors_on_unused_locals_6134": "Signaler les erreurs sur les variables locales inutilisées.",
   "Report_errors_on_unused_parameters_6135": "Signaler les erreurs sur les paramètres inutilisés.",
-  "Require_undeclared_properties_from_index_signatures_to_use_element_accesses_6803": "Les propriétés non déclarées sont imposées à partir des signatures d'index pour permettre l'utilisation des accès aux éléments.",
+  "Require_undeclared_properties_from_index_signatures_to_use_element_accesses_6717": "Les propriétés non déclarées sont imposées à partir des signatures d'index pour permettre l'utilisation des accès aux éléments.",
   "Required_type_parameters_may_not_follow_optional_type_parameters_2706": "Les paramètres de type obligatoires ne peuvent pas être placés à la suite des paramètres de type optionnels.",
   "Resolution_for_module_0_was_found_in_cache_from_location_1_6147": "La résolution du module '{0}' a été trouvée dans le cache à l'emplacement '{1}'.",
+  "Resolution_for_type_reference_directive_0_was_found_in_cache_from_location_1_6241": "La résolution de la directive de référence de type '{0}' a été trouvée dans le cache à l'emplacement '{1}'.",
   "Resolve_keyof_to_string_valued_property_names_only_no_numbers_or_symbols_6195": "Résoudre 'keyof' en noms de propriétés de valeur chaîne uniquement (aucun nombre ou symbole).",
   "Resolving_from_node_modules_folder_6118": "Résolution à partir du dossier node_modules...",
   "Resolving_module_0_from_1_6086": "======== Résolution du module '{0}' à partir de '{1}'. ========",
   "Resolving_module_name_0_relative_to_base_url_1_2_6094": "Résolution du nom de module '{0}' par rapport à l'URL de base '{1}' - '{2}'.",
   "Resolving_real_path_for_0_result_1_6130": "Résolution du chemin réel pour '{0}', résultat '{1}'.",
+  "Resolving_type_reference_directive_0_containing_file_1_6242": "======== Résolution de la directive de référence de type '{0}', fichier conteneur '{1}'. ========",
   "Resolving_type_reference_directive_0_containing_file_1_root_directory_2_6116": "======== Résolution de la directive de référence de type '{0}', fichier conteneur '{1}', répertoire racine '{2}'. ========",
   "Resolving_type_reference_directive_0_containing_file_1_root_directory_not_set_6123": "======== Résolution de la directive de référence de type '{0}', fichier conteneur '{1}', répertoire racine non défini. ========",
   "Resolving_type_reference_directive_0_containing_file_not_set_root_directory_1_6127": "======== Résolution de la directive de référence de type '{0}', fichier conteneur non défini, répertoire racine '{1}'. ========",
@@ -1029,6 +1208,7 @@
   "Rest_signatures_are_incompatible_2572": "Les signatures Rest sont incompatibles.",
   "Rest_types_may_only_be_created_from_object_types_2700": "Vous ne pouvez créer des types Rest qu'à partir de types d'objet.",
   "Return_type_annotation_circularly_references_itself_2577": "L'annotation de type de retour se référence de manière circulaire.",
+  "Return_type_must_be_inferred_from_a_function_95149": "Le type de retour doit être déduit d'une fonction",
   "Return_type_of_call_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1_4046": "Le type de retour de la signature d'appel de l'interface exportée possède ou utilise le nom '{0}' du module privé '{1}'.",
   "Return_type_of_call_signature_from_exported_interface_has_or_is_using_private_name_0_4047": "Le type de retour de la signature d'appel de l'interface exportée possède ou utilise le nom privé '{0}'.",
   "Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_name_0_from_private_mod_4044": "Le type de retour de la signature de constructeur de l'interface exportée possède ou utilise le nom '{0}' du module privé '{1}'.",
@@ -1053,15 +1233,31 @@
   "Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_external_module__4050": "Le type de retour de la méthode statique publique de la classe exportée possède ou utilise le nom '{0}' du module externe {1}, mais il ne peut pas être nommé.",
   "Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_private_module_1_4051": "Le type de retour de la méthode statique publique de la classe exportée possède ou utilise le nom '{0}' du module privé '{1}'.",
   "Return_type_of_public_static_method_from_exported_class_has_or_is_using_private_name_0_4052": "Le type de retour de la méthode statique publique de la classe exportée possède ou utilise le nom privé '{0}'.",
-  "Reusing_module_resolutions_originating_in_0_since_resolutions_are_unchanged_from_old_program_6184": "Réutilisation des résolutions de module provenant de '{0}', car les résolutions sont inchangées par rapport à l'ancien programme.",
-  "Reusing_resolution_of_module_0_to_file_1_from_old_program_6183": "Réutilisation de la résolution du module '{0}' dans le fichier '{1}' à partir de l'ancien programme.",
+  "Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_not_resolved_6395": "En réutilisant la résolution du module « {0} » à partir de « {1} » trouvée dans le cache de l’emplacement « {2} », l’erreur n’a pas été résolue.",
+  "Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_6393": "En réutilisant la résolution du module « {0} » à partir de « {1} » trouvée dans le cache de l’emplacement « {2} », l’erreur a été résolue dans « {3} ».",
+  "Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_6394": "En réutilisant la résolution du module « {0} » à partir de « {1} » trouvée dans le cache de l’emplacement « {2} », l’erreur a été résolue dans « {3} » avec l’ID de package « {4} ».",
+  "Reusing_resolution_of_module_0_from_1_of_old_program_it_was_not_resolved_6389": "En réutilisant la résolution du module « {0} » à partir de « {1} » de l’ancien programme, l’erreur n’a pas été résolue.",
+  "Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2_6183": "En réutilisant la résolution du module « {0} » à partir de « {1} » de l’ancien programme, l’erreur a été résolue dans « {2} ».",
+  "Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2_with_Package__6184": "En réutilisant la résolution du module « {0} » à partir de « {1} » de l’ancien programme, l’erreur a été résolue dans « {2} avec l’ID de package « {3} ».",
+  "Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_not_re_6398": "En réutilisant la résolution de la directive de référence de type « {0} » à partir de « {1} » trouvée dans le cache de l’emplacement « {2} », l’erreur n’a pas été résolue.",
+  "Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_succes_6396": "En réutilisant la résolution de la directive de référence de type « {0} » à partir de « {1} » trouvée dans le cache de l’emplacement « {2} », l’erreur a été résolue dans « {3} ».",
+  "Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_succes_6397": "En réutilisant la résolution de la directive de référence de type « {0} » à partir de « {1} » trouvée dans le cache de l’emplacement « {2} », l’erreur a été résolue dans « {3} » avec l’ID de package « {4} ».",
+  "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_not_resolved_6392": "En réutilisant la résolution de la directive de référence de type « {0} » à partir de « {1} » de l’ancien programme, l’erreur n’a pas été résolue.",
+  "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved__6390": "En réutilisant la résolution de la directive de référence de type « {0} » à partir de « {1} » de l’ancien programme, l’erreur a été résolue dans « {2} ».",
+  "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved__6391": "En réutilisant la résolution de la directive de référence de type « {0} » à partir de « {1} » de l’ancien programme, l’erreur a été résolue dans « {2} » avec l’ID de package « {3} ».",
   "Rewrite_all_as_indexed_access_types_95034": "Réécrire tout comme types d'accès indexés",
   "Rewrite_as_the_indexed_access_type_0_90026": "Réécrire en tant que type d'accès indexé '{0}'",
   "Root_directory_cannot_be_determined_skipping_primary_search_paths_6122": "Impossible de déterminer le répertoire racine, chemins de recherche primaires ignorés.",
+  "Root_file_specified_for_compilation_1427": "Fichier racine spécifié pour la compilation",
   "STRATEGY_6039": "STRATÉGIE",
+  "Save_tsbuildinfo_files_to_allow_for_incremental_compilation_of_projects_6642": "Enregistrez les fichiers .tsbuildinfo pour permettre la compilation incrémentielle des projets.",
   "Scoped_package_detected_looking_in_0_6182": "Package de portée détecté. Recherche dans '{0}'",
+  "Selection_is_not_a_valid_statement_or_statements_95155": "La sélection ne correspond pas à une ou des instructions valides",
   "Selection_is_not_a_valid_type_node_95133": "La sélection n'est pas un nœud de type valide",
+  "Set_the_JavaScript_language_version_for_emitted_JavaScript_and_include_compatible_library_declaratio_6705": "Définissez la version du langage JavaScript pour JavaScript émis et incluez des déclarations de bibliothèque compatibles.",
+  "Set_the_language_of_the_messaging_from_TypeScript_This_does_not_affect_emit_6654": "Définissez la langue de la messagerie à partir de TypeScript. Cela n’affecte pas l’émission.",
   "Set_the_module_option_in_your_configuration_file_to_0_95099": "Affecter à l'option 'module' de votre fichier config la valeur '{0}'",
+  "Set_the_newline_character_for_emitting_files_6659": "Définissez le caractère de nouvelle ligne pour l’émission de fichiers.",
   "Set_the_target_option_in_your_configuration_file_to_0_95098": "Affecter à l'option 'target' de votre fichier config la valeur '{0}'",
   "Setters_cannot_return_a_value_2408": "Les méthodes setter ne peuvent pas retourner de valeur.",
   "Show_all_compiler_options_6169": "Affichez toutes les options du compilateur.",
@@ -1069,31 +1265,63 @@
   "Show_verbose_diagnostic_information_6150": "Affichez les informations de diagnostic détaillées.",
   "Show_what_would_be_built_or_deleted_if_specified_with_clean_6367": "Montrer ce qui serait généré (ou supprimé si '--clean' est spécifié)",
   "Signature_0_must_be_a_type_predicate_1224": "La signature '{0}' doit être un prédicat de type.",
+  "Skip_type_checking_all_d_ts_files_6693": "Ignorer la vérification de type dans tous les fichiers .d.ts.",
+  "Skip_type_checking_d_ts_files_that_are_included_with_TypeScript_6692": "Ignorer la vérification de type des fichiers .d.ts inclus dans TypeScript.",
   "Skip_type_checking_of_declaration_files_6012": "Ignorer le contrôle de type des fichiers de déclaration.",
   "Skipping_build_of_project_0_because_its_dependency_1_has_errors_6362": "Ignorer la génération du projet '{0}' car sa dépendance '{1}' comporte des erreurs",
   "Skipping_build_of_project_0_because_its_dependency_1_was_not_built_6382": "Ignorer la build du projet '{0}', car sa dépendance '{1}' n'a pas été générée",
-  "Source_Map_Options_6175": "Options de mappage de source",
+  "Source_from_referenced_project_0_included_because_1_specified_1414": "Source du projet référencé '{0}' incluse, car '{1}' est spécifié",
+  "Source_from_referenced_project_0_included_because_module_is_specified_as_none_1415": "Source du projet référencé '{0}' incluse, car '--module' est spécifié en tant que 'none'",
   "Source_has_0_element_s_but_target_allows_only_1_2619": "La source a {0} élément(s) mais la cible n'en autorise que {1}.",
   "Source_has_0_element_s_but_target_requires_1_2618": "La source a {0} élément(s) mais la cible en nécessite {1}.",
+  "Source_provides_no_match_for_required_element_at_position_0_in_target_2623": "La source ne fournit aucune correspondance pour l'élément obligatoire situé à la position {0} dans la cible.",
+  "Source_provides_no_match_for_variadic_element_at_position_0_in_target_2624": "La source ne fournit aucune correspondance pour l'élément variadique situé à la position {0} dans la cible.",
   "Specialized_overload_signature_is_not_assignable_to_any_non_specialized_signature_2382": "La signature de surcharge spécialisée n'est assignable à aucune signature non spécialisée.",
   "Specifier_of_dynamic_import_cannot_be_spread_element_1325": "Le spécificateur de l'importation dynamique ne peut pas être un élément spread.",
-  "Specify_ECMAScript_target_version_Colon_ES3_default_ES5_ES2015_ES2016_ES2017_ES2018_ES2019_ES2020_or_6015": "Spécifiez la version cible d'ECMAScript : 'ES3' (par défaut), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019', 'ES2020' ou 'ESNEXT'.",
-  "Specify_JSX_code_generation_Colon_preserve_react_native_or_react_6080": "Spécifiez la génération de code JSX : 'preserve', 'react-native' ou 'react'.",
-  "Specify_emit_Slashchecking_behavior_for_imports_that_are_only_used_for_types_1368": "Spécifier le comportement d'émission/de vérification des importations utilisées uniquement pour les types",
+  "Specify_ECMAScript_target_version_6015": "Spécifiez la version cible ECMAScript.",
+  "Specify_JSX_code_generation_6080": "Spécifiez la génération de code JSX.",
+  "Specify_a_file_that_bundles_all_outputs_into_one_JavaScript_file_If_declaration_is_true_also_designa_6679": "Spécifiez un fichier qui regroupe toutes les sorties dans un fichier JavaScript. Si « declaration » a la valeur true, désigne également un fichier qui regroupe toutes les sorties .d.ts.",
+  "Specify_a_list_of_glob_patterns_that_match_files_to_be_included_in_compilation_6641": "Spécifiez une liste de modèles glob qui correspondent aux fichiers à inclure dans la compilation.",
+  "Specify_a_list_of_language_service_plugins_to_include_6681": "Spécifiez une liste de plug-ins de service de langage à ajouter.",
+  "Specify_a_set_of_bundled_library_declaration_files_that_describe_the_target_runtime_environment_6651": "Spécifiez un ensemble de fichiers de déclaration de bibliothèque groupée qui décrivent l’environnement d’exécution cible.",
+  "Specify_a_set_of_entries_that_re_map_imports_to_additional_lookup_locations_6680": "Spécifiez un ensemble d’entrées qui re-mappent les importations à d’autres emplacements de recherche.",
+  "Specify_an_array_of_objects_that_specify_paths_for_projects_Used_in_project_references_6687": "Spécifiez un tableau d’objets qui spécifient les chemins d’accès pour les projets. Utilisé dans les références de projet.",
+  "Specify_an_output_folder_for_all_emitted_files_6678": "Spécifiez un dossier de sortie pour tous les fichiers émis.",
+  "Specify_emit_Slashchecking_behavior_for_imports_that_are_only_used_for_types_6718": "Spécifier le comportement d'émission/de vérification des importations utilisées uniquement pour les types",
   "Specify_file_to_store_incremental_compilation_information_6380": "Spécifier le fichier de stockage des informations de compilation incrémentielle",
+  "Specify_how_TypeScript_looks_up_a_file_from_a_given_module_specifier_6658": "Spécifiez comment TypeScript recherche un fichier à partir d’un spécificateur de module donné.",
+  "Specify_how_directories_are_watched_on_systems_that_lack_recursive_file_watching_functionality_6714": "Spécifiez la façon dont les répertoires sont surveillés sur les systèmes qui ne disposent pas de fonctionnalités récursives de surveillance des fichiers.",
+  "Specify_how_the_TypeScript_watch_mode_works_6715": "Spécifiez le fonctionnement du mode espion TypeScript.",
   "Specify_library_files_to_be_included_in_the_compilation_6079": "Spécifiez les fichiers bibliothèques à inclure dans la compilation.",
-  "Specify_module_code_generation_Colon_none_commonjs_amd_system_umd_es2015_es2020_or_ESNext_6016": "Spécifiez la génération de code du module : 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', 'es2020' ou 'ESNext'.",
+  "Specify_module_code_generation_6016": "Spécifier la génération de code de module.",
   "Specify_module_resolution_strategy_Colon_node_Node_js_or_classic_TypeScript_pre_1_6_6069": "Spécifiez la stratégie de résolution de module : 'node' (Node.js) ou 'classic' (version de TypeScript antérieure à 1.6).",
-  "Specify_strategy_for_creating_a_polling_watch_when_it_fails_to_create_using_file_system_events_Colon_6227": "Spécifiez la stratégie de création d'une surveillance de l'interrogation en cas d'échec de cette création à l'aide des événements liés au système de fichiers : 'FixedInterval' (par défaut), 'PriorityInterval', 'DynamicPriority'.",
-  "Specify_strategy_for_watching_directory_on_platforms_that_don_t_support_recursive_watching_natively__6226": "Spécifiez la stratégie de surveillance de répertoire sur les plateformes qui ne prennent pas en charge la surveillance récursive en mode natif : 'UseFsEvents' (par défaut), 'FixedPollingInterval', 'DynamicPriorityPolling'.",
-  "Specify_strategy_for_watching_file_Colon_FixedPollingInterval_default_PriorityPollingInterval_Dynami_6225": "Spécifiez la stratégie de surveillance de fichier : 'FixedPollingInterval' (valeur par défaut), 'PriorityPollingInterval', 'DynamicPriorityPolling', 'UseFsEvents', 'UseFsEventsOnParentDirectory'.",
+  "Specify_module_specifier_used_to_import_the_JSX_factory_functions_when_using_jsx_Colon_react_jsx_Ast_6649": "Spécifiez le spécificateur de module utilisé pour importer les fonctions de fabrique JSX lors de l’utilisation de « jsx: react-jsx* ».",
+  "Specify_multiple_folders_that_act_like_Slashnode_modules_Slash_types_6710": "Spécifiez plusieurs dossiers qui agissent comme « ./node_modules/@types ».",
+  "Specify_one_or_more_path_or_node_module_references_to_base_configuration_files_from_which_settings_a_6633": "Spécifiez une ou plusieurs références de module de chemin d’accès ou de nœud aux fichiers de configuration de base dont les paramètres sont hérités.",
+  "Specify_options_for_automatic_acquisition_of_declaration_files_6709": "Spécifiez les options d’acquisition automatique des fichiers de déclaration.",
+  "Specify_strategy_for_creating_a_polling_watch_when_it_fails_to_create_using_file_system_events_Colon_6227": "Spécifiez la stratégie en cas d'échec de la création d'une surveillance de l'interrogation à l'aide des événements liés au système de fichiers : 'FixedInterval' (par défaut), 'PriorityInterval', 'DynamicPriority', 'FixedChunkSize'.",
+  "Specify_strategy_for_watching_directory_on_platforms_that_don_t_support_recursive_watching_natively__6226": "Spécifiez la stratégie de surveillance des répertoires sur les plateformes qui ne prennent pas en charge la surveillance récursive en mode natif : 'UseFsEvents' (par défaut), 'FixedPollingInterval', 'DynamicPriorityPolling', 'FixedChunkSizePolling'.",
+  "Specify_strategy_for_watching_file_Colon_FixedPollingInterval_default_PriorityPollingInterval_Dynami_6225": "Spécifiez la stratégie de surveillance des fichiers : 'FixedPollingInterval' (par défaut), 'PriorityPollingInterval', 'DynamicPriorityPolling', 'FixedChunkSizePolling', 'UseFsEvents', 'UseFsEventsOnParentDirectory'.",
+  "Specify_the_JSX_Fragment_reference_used_for_fragments_when_targeting_React_JSX_emit_e_g_React_Fragme_6648": "Spécifiez la référence de fragment JSX utilisée pour les fragments lors du ciblage de l’émission de réaction JSX par exemple « React.Fragment » ou « Fragment ».",
   "Specify_the_JSX_factory_function_to_use_when_targeting_react_JSX_emit_e_g_React_createElement_or_h_6146": "Spécifiez la fonction de fabrique JSX à utiliser pour le ciblage d'une émission JSX 'react', par exemple 'React.createElement' ou 'h'.",
+  "Specify_the_JSX_factory_function_used_when_targeting_React_JSX_emit_e_g_React_createElement_or_h_6647": "Spécifiez la fonction de fabrique JSX à utiliser pour le ciblage d'une émission JSX « react », par exemple « React.createElement » ou « h ».",
   "Specify_the_JSX_fragment_factory_function_to_use_when_targeting_react_JSX_emit_with_jsxFactory_compi_18034": "Spécifiez la fonction de fabrique de fragments JSX à utiliser durant le ciblage de l'émission JSX 'react' avec l'option de compilateur 'jsxFactory', par exemple 'Fragment'.",
+  "Specify_the_base_directory_to_resolve_non_relative_module_names_6607": "Spécifiez le répertoire de base pour résoudre les noms de modules non relatifs.",
   "Specify_the_end_of_line_sequence_to_be_used_when_emitting_files_Colon_CRLF_dos_or_LF_unix_6060": "Spécifiez la séquence de fin de ligne à utiliser durant l'émission des fichiers : 'CRLF' (Dos) ou 'LF' (Unix).",
+  "Specify_the_folder_for_tsbuildinfo_incremental_compilation_files_6707": "Spécifiez le dossier pour les fichiers de compilation incrémentielle .tsbuildinfo.",
   "Specify_the_location_where_debugger_should_locate_TypeScript_files_instead_of_source_locations_6004": "Spécifiez l'emplacement dans lequel le débogueur doit localiser les fichiers TypeScript au lieu des emplacements sources.",
-  "Specify_the_location_where_debugger_should_locate_map_files_instead_of_generated_locations_6003": "Spécifiez l'emplacement dans lequel le débogueur doit localiser les fichiers de mappage au lieu des emplacements générés.",
+  "Specify_the_location_where_debugger_should_locate_map_files_instead_of_generated_locations_6655": "Spécifiez l'emplacement dans lequel le débogueur doit localiser les fichiers de mappage au lieu des emplacements générés.",
+  "Specify_the_maximum_folder_depth_used_for_checking_JavaScript_files_from_node_modules_Only_applicabl_6656": "Spécifiez la profondeur maximale de dossier utilisée pour la vérification des fichiers JavaScript à partir de « node_modules ». Applicable uniquement à l’aide de « allowJs ».",
   "Specify_the_module_specifier_to_be_used_to_import_the_jsx_and_jsxs_factory_functions_from_eg_react_6238": "Spécifiez le spécificateur de module à utiliser pour importer les fonctions de fabrique 'jsx' et 'jsxs' à partir de react, par exemple",
+  "Specify_the_object_invoked_for_createElement_This_only_applies_when_targeting_react_JSX_emit_6686": "Spécifiez l’objet appelé pour « createElement ». Ceci s’applique uniquement quand le ciblage de l’émission de JSX « react » est actif.",
+  "Specify_the_output_directory_for_generated_declaration_files_6613": "Spécifiez le répertoire de sortie pour les fichiers de déclaration générés.",
   "Specify_the_root_directory_of_input_files_Use_to_control_the_output_directory_structure_with_outDir_6058": "Spécifiez le répertoire racine des fichiers d'entrée. Contrôlez la structure des répertoires de sortie avec --outDir.",
+  "Specify_the_root_folder_within_your_source_files_6690": "Spécifiez le dossier racine dans vos fichiers sources.",
+  "Specify_the_root_path_for_debuggers_to_find_the_reference_source_code_6695": "Spécifiez le chemin d’accès racine des débogueurs pour trouver le code source de référence.",
+  "Specify_type_package_names_to_be_included_without_being_referenced_in_a_source_file_6711": "Spécifiez les noms de packages de types à inclure sans être référencés dans un fichier source.",
+  "Specify_what_JSX_code_is_generated_6646": "Spécifiez le code JSX généré.",
+  "Specify_what_approach_the_watcher_should_use_if_the_system_runs_out_of_native_file_watchers_6634": "Spécifiez l’approche que l’observateur doit utiliser si le système manque d’observateurs de fichiers natifs.",
+  "Specify_what_module_code_is_generated_6657": "Spécifiez le code de module généré.",
   "Split_all_invalid_type_only_imports_1367": "Diviser toutes les importations de type uniquement non valides",
   "Split_into_two_separate_import_declarations_1366": "Diviser en deux déclarations import distinctes",
   "Spread_operator_in_new_expressions_is_only_available_when_targeting_ECMAScript_5_and_higher_2472": "L'opérateur spread dans les expressions 'new' est disponible uniquement quand ECMAScript 5 ou version supérieure est ciblé.",
@@ -1101,9 +1329,9 @@
   "Starting_compilation_in_watch_mode_6031": "Démarrage de la compilation en mode espion...",
   "Statement_expected_1129": "Instruction attendue.",
   "Statements_are_not_allowed_in_ambient_contexts_1036": "Les instructions ne sont pas autorisées dans les contextes ambiants.",
+  "Static_fields_with_private_names_can_t_have_initializers_when_the_useDefineForClassFields_flag_is_no_2805": "Les champs static avec des noms privés ne peuvent pas avoir d'initialiseurs quand l'indicateur '--useDefineForClassFields' n'est pas spécifié avec le '--target' 'esnext'. Ajoutez l'indicateur '--useDefineForClassFields'.",
   "Static_members_cannot_reference_class_type_parameters_2302": "Les membres statiques ne peuvent pas référencer des paramètres de type de classe.",
   "Static_property_0_conflicts_with_built_in_property_Function_0_of_constructor_function_1_2699": "La propriété statique '{0}' est en conflit avec la propriété intégrée 'Function.{0}' de la fonction constructeur '{1}'.",
-  "Strict_Type_Checking_Options_6173": "Options de contrôle de type strict",
   "String_literal_expected_1141": "Littéral de chaîne attendu.",
   "String_literal_with_double_quotes_expected_1327": "Littéral de chaîne avec guillemets doubles attendu.",
   "Stylize_errors_and_messages_using_color_and_context_experimental_6073": "Stylisez les erreurs et les messages avec de la couleur et du contexte (expérimental).",
@@ -1117,9 +1345,10 @@
   "Super_calls_are_not_permitted_outside_constructors_or_in_nested_functions_inside_constructors_2337": "Les appels de 'super' ne sont pas autorisés hors des constructeurs ou dans des fonctions imbriquées dans des constructeurs.",
   "Suppress_excess_property_checks_for_object_literals_6072": "Supprimez les vérifications des propriétés en trop pour les littéraux d'objet.",
   "Suppress_noImplicitAny_errors_for_indexing_objects_lacking_index_signatures_6055": "Supprimer les erreurs noImplicitAny pour les objets d'indexation auxquels il manque des signatures d'index.",
+  "Suppress_noImplicitAny_errors_when_indexing_objects_that_lack_index_signatures_6703": "Supprimez les erreurs « noImplicitAny » lors de l’indexation d’objets qui n’ont pas de signatures d’index.",
   "Switch_each_misused_0_to_1_95138": "Remplacer chaque utilisation incorrecte de '{0}' par '{1}'",
   "Symbol_reference_does_not_refer_to_the_global_Symbol_constructor_object_2470": "La référence 'Symbol' ne fait pas référence à l'objet constructeur Symbol global.",
-  "Synchronously_call_callbacks_and_update_the_state_of_directory_watchers_on_platforms_that_don_t_supp_6228": "Appelez les rappels de façon synchrone, et mettez à jour l'état des observateurs de répertoire sur les plateformes qui ne prennent pas en charge la surveillance récursive en mode natif.",
+  "Synchronously_call_callbacks_and_update_the_state_of_directory_watchers_on_platforms_that_don_t_supp_6704": "Appelez les rappels de façon synchrone, et mettez à jour l'état des observateurs de répertoire sur les plateformes qui ne prennent pas en charge la surveillance récursive en mode natif.",
   "Syntax_Colon_0_6023": "Syntaxe : {0}",
   "Tag_0_expects_at_least_1_arguments_but_the_JSX_factory_2_provides_at_most_3_6229": "La balise '{0}' attend au moins '{1}' arguments, mais la fabrique JSX '{2}' en fournit au maximum '{3}'.",
   "Tagged_template_expressions_are_not_permitted_in_an_optional_chain_1358": "Les expressions de modèle étiquetées ne sont pas autorisées dans une chaîne facultative.",
@@ -1141,10 +1370,12 @@
   "The_containing_function_or_module_body_is_too_large_for_control_flow_analysis_2563": "Le corps de la fonction ou du module conteneur est trop grand pour l'analyse du flux de contrôle.",
   "The_current_host_does_not_support_the_0_option_5001": "L'hôte actuel ne prend pas en charge l'option '{0}'.",
   "The_declaration_of_0_that_you_probably_intended_to_use_is_defined_here_18018": "La déclaration de '{0}' que vous aviez probablement l'intention d'utiliser est définie ici",
+  "The_declaration_was_marked_as_deprecated_here_2798": "La déclaration a été marquée ici comme étant dépréciée.",
   "The_expected_type_comes_from_property_0_which_is_declared_here_on_type_1_6500": "Le type attendu provient de la propriété '{0}', qui est déclarée ici sur le type '{1}'",
   "The_expected_type_comes_from_the_return_type_of_this_signature_6502": "Le type attendu provient du type de retour de cette signature.",
   "The_expected_type_comes_from_this_index_signature_6501": "Le type attendu provient de cette signature d'index.",
   "The_expression_of_an_export_assignment_must_be_an_identifier_or_qualified_name_in_an_ambient_context_2714": "L'expression d'une assignation d'exportation doit être un identificateur ou un nom qualifié dans un contexte ambiant.",
+  "The_file_is_in_the_program_because_Colon_1430": "Le fichier est dans le programme pour la ou les raisons suivantes :",
   "The_files_list_in_config_file_0_is_empty_18002": "La liste 'files' du fichier config '{0}' est vide.",
   "The_first_export_default_is_here_2752": "La première valeur par défaut d'exportation se trouve ici.",
   "The_first_parameter_of_the_then_method_of_a_promise_must_be_a_callback_1060": "Le premier paramètre de la méthode 'then' d'une promesse doit être un rappel.",
@@ -1168,6 +1399,7 @@
   "The_left_hand_side_of_a_for_in_statement_must_be_of_type_string_or_any_2405": "La partie gauche d'une instruction 'for...in' doit être de type 'string' ou 'any'.",
   "The_left_hand_side_of_a_for_of_statement_cannot_use_a_type_annotation_2483": "La partie gauche d'une instruction 'for...of' ne peut pas utiliser d'annotation de type.",
   "The_left_hand_side_of_a_for_of_statement_may_not_be_an_optional_property_access_2781": "La partie gauche d'une instruction 'for...of' ne doit pas être un accès à une propriété facultative.",
+  "The_left_hand_side_of_a_for_of_statement_may_not_be_async_1106": "Il est possible que le côté gauche d’une instruction « for...of » ne soit pas « async ».",
   "The_left_hand_side_of_a_for_of_statement_must_be_a_variable_or_a_property_access_2487": "La partie gauche d'une instruction 'for...of' doit être un accès à une variable ou une propriété.",
   "The_left_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type_2362": "La partie gauche d'une opération arithmétique doit être de type 'any', 'number', 'bigint' ou un type enum.",
   "The_left_hand_side_of_an_assignment_expression_may_not_be_an_optional_property_access_2779": "La partie gauche d'une expression d'assignation ne doit pas être un accès à une propriété facultative.",
@@ -1185,15 +1417,18 @@
   "The_parser_expected_to_find_a_to_match_the_token_here_1007": "L'analyseur s'attendait à trouver '}' pour correspondre au jeton '{' ici.",
   "The_property_0_cannot_be_accessed_on_type_1_within_this_class_because_it_is_shadowed_by_another_priv_18014": "La propriété '{0}' n'est pas accessible sur le type '{1}' dans cette classe, car elle est mise en mémoire fantôme par un autre identificateur privé ayant la même orthographe.",
   "The_return_type_of_a_JSX_element_constructor_must_return_an_object_type_2601": "Le type de retour d'un constructeur d'éléments JSX doit retourner un type d'objet.",
+  "The_return_type_of_a_get_accessor_must_be_assignable_to_its_set_accessor_type_2380": "Le type de retour d'un accesseur 'get' doit être assignable à son type d'accesseur 'set'",
   "The_return_type_of_a_parameter_decorator_function_must_be_either_void_or_any_1237": "Le type de retour d'une fonction d'élément décoratif de paramètre doit être 'void' ou 'any'.",
   "The_return_type_of_a_property_decorator_function_must_be_either_void_or_any_1236": "Le type de retour d'une fonction d'élément décoratif de propriété doit être 'void' ou 'any'.",
   "The_return_type_of_an_async_function_must_either_be_a_valid_promise_or_must_not_contain_a_callable_t_1058": "Le type de retour d'une fonction asynchrone doit être une promesse valide ou ne doit contenir aucun membre 'then' pouvant être appelé.",
   "The_return_type_of_an_async_function_or_method_must_be_the_global_Promise_T_type_Did_you_mean_to_wri_1064": "Le type de retour d'une fonction ou d'une méthode asynchrone doit être le type global Promise<T>. Vouliez-vous vraiment écrire 'Promise<{0}>' ?",
   "The_right_hand_side_of_a_for_in_statement_must_be_of_type_any_an_object_type_or_a_type_parameter_but_2407": "La partie droite d'une instruction 'for...in' doit être de type 'any', un type d'objet ou un paramètre de type, mais elle a le type '{0}' ici.",
   "The_right_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type_2363": "La partie droite d'une opération arithmétique doit être de type 'any', 'number', 'bigint' ou un type enum.",
-  "The_right_hand_side_of_an_in_expression_must_be_of_type_any_an_object_type_or_a_type_parameter_2361": "La partie droite d'une expression 'in' doit être de type 'any', un type d'objet ou un paramètre de type.",
+  "The_right_hand_side_of_an_in_expression_must_not_be_a_primitive_2361": "La partie droite d'une expression 'in' ne doit pas être une primitive.",
   "The_right_hand_side_of_an_instanceof_expression_must_be_of_type_any_or_of_a_type_assignable_to_the_F_2359": "La partie droite d'une expression 'instanceof' doit être de type 'any' ou d'un type pouvant être assigné au type d'interface 'Function'.",
+  "The_root_value_of_a_0_file_must_be_an_object_5092": "La valeur racine d'un fichier '{0}' doit être un objet.",
   "The_shadowing_declaration_of_0_is_defined_here_18017": "La déclaration avec mise en mémoire fantôme de '{0}' est définie ici",
+  "The_signature_0_of_1_is_deprecated_6387": "La signature '{0}' de '{1}' est dépréciée.",
   "The_specified_path_does_not_exist_Colon_0_5058": "Le chemin spécifié n'existe pas : '{0}'.",
   "The_tag_was_first_specified_here_8034": "La balise a d'abord été spécifiée ici.",
   "The_target_of_an_assignment_must_be_a_variable_or_a_property_access_2541": "La cible d'une assignation doit être un accès à une variable ou une propriété.",
@@ -1204,6 +1439,7 @@
   "The_type_0_is_readonly_and_cannot_be_assigned_to_the_mutable_type_1_4104": "Le type '{0}' est 'readonly' et ne peut pas être assigné au type modifiable '{1}'.",
   "The_type_argument_for_type_parameter_0_cannot_be_inferred_from_the_usage_Consider_specifying_the_typ_2453": "L'argument de type pour le paramètre de type '{0}' ne peut pas être déduit à partir de l'utilisation. Spécifiez plutôt les arguments de type de manière explicite.",
   "The_type_of_a_function_declaration_must_match_the_function_s_signature_8030": "Le type d'une déclaration de fonction doit correspondre à la signature de la fonction.",
+  "The_type_of_this_node_cannot_be_serialized_because_its_property_0_cannot_be_serialized_4118": "Impossible de sérialiser le type de ce nœud, car sa propriété «{0}» ne peut pas être sérialisée.",
   "The_type_returned_by_the_0_method_of_an_async_iterator_must_be_a_promise_for_a_type_with_a_value_pro_2547": "Le type retourné par la méthode '{0}()' d'un itérateur asynchrone doit être une promesse pour un type ayant une propriété 'value'.",
   "The_type_returned_by_the_0_method_of_an_iterator_must_have_a_value_property_2490": "Le type retourné par la méthode '{0}()' d'un itérateur doit avoir une propriété 'value'.",
   "The_types_of_0_are_incompatible_between_these_types_2200": "Les types de '{0}' sont incompatibles entre eux.",
@@ -1214,7 +1450,8 @@
   "This_JSX_tag_s_0_prop_expects_a_single_child_of_type_1_but_multiple_children_were_provided_2746": "La propriété '{0}' de cette balise JSX attend un seul enfant de type '{1}', mais plusieurs enfants ont été fournis.",
   "This_JSX_tag_s_0_prop_expects_type_1_which_requires_multiple_children_but_only_a_single_child_was_pr_2745": "La propriété '{0}' de cette balise JSX attend le type '{1}', qui nécessite plusieurs enfants, mais un seul enfant a été fourni.",
   "This_condition_will_always_return_0_since_the_types_1_and_2_have_no_overlap_2367": "Cette condition retourne toujours '{0}', car les types '{1}' et '{2}' n'ont pas de chevauchement.",
-  "This_condition_will_always_return_true_since_the_function_is_always_defined_Did_you_mean_to_call_it__2774": "Cette condition retourne toujours true, car la fonction est toujours définie. Est-ce que vous avez voulu l'appeler à la place ?",
+  "This_condition_will_always_return_true_since_this_0_is_always_defined_2801": "Cette condition retourne toujours true, car cette « {0} » est toujours définie.",
+  "This_condition_will_always_return_true_since_this_function_is_always_defined_Did_you_mean_to_call_it_2774": "Cette condition retourne toujours true, car cette fonction est toujours définie. Est-ce que vous avez voulu l'appeler à la place ?",
   "This_constructor_function_may_be_converted_to_a_class_declaration_80002": "Cette fonction constructeur peut être convertie en déclaration de classe.",
   "This_expression_is_not_callable_2349": "Impossible d'appeler cette expression.",
   "This_expression_is_not_callable_because_it_is_a_get_accessor_Did_you_mean_to_use_it_without_6234": "Impossible d'appeler cette expression, car il s'agit d'un accesseur 'get'. Voulez-vous vraiment l'utiliser sans '()' ?",
@@ -1223,15 +1460,23 @@
   "This_import_is_never_used_as_a_value_and_must_use_import_type_because_importsNotUsedAsValues_is_set__1371": "Cette importation n'est jamais utilisée en tant que valeur. Elle doit utiliser 'import type', car 'importsNotUsedAsValues' a la valeur 'error'.",
   "This_is_the_declaration_being_augmented_Consider_moving_the_augmenting_declaration_into_the_same_fil_6233": "Ceci est la déclaration augmentée. Pensez à déplacer la déclaration d'augmentation dans le même fichier.",
   "This_may_be_converted_to_an_async_function_80006": "Ceci peut être converti en fonction asynchrone.",
+  "This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0_4113": "Ce membre ne peut pas avoir de modificateur 'override', car il n'est pas déclaré dans la classe de base '{0}'.",
+  "This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0_Did_you__4117": "Ce membre ne peut pas avoir de modificateur 'override', car il n'est pas déclaré dans la classe de base '{0}'. Vouliez-vous dire '{1}'?",
+  "This_member_cannot_have_an_override_modifier_because_its_containing_class_0_does_not_extend_another__4112": "Ce membre ne peut pas avoir de modificateur 'override', car sa classe conteneur '{0}' n'étend pas une autre classe.",
+  "This_member_must_have_an_override_modifier_because_it_overrides_a_member_in_the_base_class_0_4114": "Ce membre doit avoir un modificateur 'override', car il se substitue à un membre de la classe de base '{0}'.",
+  "This_member_must_have_an_override_modifier_because_it_overrides_an_abstract_method_that_is_declared__4116": "Ce membre doit avoir un modificateur 'override', car il se substitue à une méthode abstraite déclarée dans la classe de base '{0}'.",
   "This_module_can_only_be_referenced_with_ECMAScript_imports_Slashexports_by_turning_on_the_0_flag_and_2497": "Vous pouvez référencer ce module uniquement avec les importations/exportations ECMAScript en activant l'indicateur '{0}' et en référençant son exportation par défaut.",
   "This_module_is_declared_with_using_export_and_can_only_be_used_with_a_default_import_when_using_the__2594": "Ce module est déclaré à l'aide de 'export =' et peut être utilisé uniquement avec une importation par défaut quand l'indicateur '{0}' est employé.",
   "This_overload_signature_is_not_compatible_with_its_implementation_signature_2394": "Cette signature de surcharge n'est pas compatible avec sa signature d'implémentation.",
   "This_parameter_is_not_allowed_with_use_strict_directive_1346": "Ce paramètre n'est pas autorisé avec la directive 'use strict'.",
+  "This_parameter_property_must_have_an_override_modifier_because_it_overrides_a_member_in_base_class_0_4115": "Cette propriété de paramètre doit avoir un modificateur 'override', car il se substitue à un membre de la classe de base '{0}'.",
   "This_spread_always_overwrites_this_property_2785": "Cette diffusion écrase toujours cette propriété.",
   "This_syntax_requires_an_imported_helper_but_module_0_cannot_be_found_2354": "Cette syntaxe nécessite une application d'assistance importée, mais le module '{0}' est introuvable.",
   "This_syntax_requires_an_imported_helper_named_1_which_does_not_exist_in_0_Consider_upgrading_your_ve_2343": "Cette syntaxe nécessite une assistance importée nommée '{1}' mais qui n'existe pas dans '{0}'. Effectuez une mise à niveau de votre version de '{0}'.",
+  "This_syntax_requires_an_imported_helper_named_1_with_2_parameters_which_is_not_compatible_with_the_o_2807": "Cette syntaxe nécessite un composant d'assistance importé nommé '{1}' avec {2} paramètres, ce qui n'est pas compatible avec celui qui se trouve dans '{0}'. Effectuez une mise à niveau de votre version de '{0}'.",
   "Top_level_await_expressions_are_only_allowed_when_the_module_option_is_set_to_esnext_or_system_and_t_1378": "Les expressions 'await' de niveau supérieur sont autorisées uniquement quand l'option 'module' a la valeur 'esnext' ou 'system', et que l'option 'target' a la valeur 'es2017' ou celle d'une version supérieure.",
   "Top_level_declarations_in_d_ts_files_must_start_with_either_a_declare_or_export_modifier_1046": "Les déclarations de niveau supérieur dans les fichiers .d.ts doivent commencer par un modificateur 'declare' ou 'export'.",
+  "Top_level_for_await_loops_are_only_allowed_when_the_module_option_is_set_to_esnext_or_system_and_the_1432": "Les boucles 'for await' de niveau supérieur sont autorisées uniquement quand l'option 'module' a la valeur 'esnext' ou 'system', et que l'option 'target' a la valeur 'es2017' ou une valeur correspondant à une version supérieure.",
   "Trailing_comma_not_allowed_1009": "Virgule de fin non autorisée.",
   "Transpile_each_file_as_a_separate_module_similar_to_ts_transpileModule_6153": "Transpilez chaque fichier sous forme de module distinct (semblable à 'ts.transpileModule').",
   "Try_npm_i_save_dev_types_Slash_1_if_it_exists_or_add_a_new_declaration_d_ts_file_containing_declare__7035": "Essayez 'npm i --save-dev @types/{1}' s'il existe, ou ajoutez un nouveau fichier de déclaration (.d.ts) contenant 'declare module '{0}';'",
@@ -1240,6 +1485,7 @@
   "Tuple_members_must_all_have_names_or_all_not_have_names_5084": "Les membres de tuples doivent tous avoir des noms ou ne pas en avoir.",
   "Tuple_type_0_of_length_1_has_no_element_at_index_2_2493": "Le type tuple '{0}' de longueur '{1}' n'a aucun élément à l'index '{2}'.",
   "Tuple_type_arguments_circularly_reference_themselves_4110": "Les arguments de type tuple se référencent de manière circulaire.",
+  "Type_0_can_only_be_iterated_through_when_using_the_downlevelIteration_flag_or_with_a_target_of_es201_2802": "Le type '{0}' peut être itéré uniquement à l'aide de l'indicateur '--downlevelIteration' ou avec un '--target' dont la valeur est 'es2015' ou une version ultérieure.",
   "Type_0_cannot_be_used_as_an_index_type_2538": "Impossible d'utiliser le type '{0}' comme type d'index.",
   "Type_0_cannot_be_used_to_index_type_1_2536": "Le type '{0}' ne peut pas être utilisé pour indexer le type '{1}'.",
   "Type_0_does_not_satisfy_the_constraint_1_2344": "Le type '{0}' ne satisfait pas la contrainte '{1}'.",
@@ -1264,7 +1510,9 @@
   "Type_0_must_have_a_Symbol_iterator_method_that_returns_an_iterator_2488": "Le type '{0}' doit avoir une méthode '[Symbol.iterator]()' qui retourne un itérateur.",
   "Type_0_provides_no_match_for_the_signature_1_2658": "Le type '{0}' ne fournit aucune correspondance pour la signature '{1}'.",
   "Type_0_recursively_references_itself_as_a_base_type_2310": "Le type '{0}' fait référence à lui-même de manière récursive en tant que type de base.",
+  "Type_Checking_6248": "Vérification du type",
   "Type_alias_0_circularly_references_itself_2456": "L'alias de type '{0}' fait référence à lui-même de manière circulaire.",
+  "Type_alias_must_be_given_a_name_1439": "Un nom doit être attribué à l’alias de type.",
   "Type_alias_name_cannot_be_0_2457": "Le nom de l'alias de type ne peut pas être '{0}'.",
   "Type_aliases_can_only_be_used_in_TypeScript_files_8008": "Les alias de type peuvent uniquement être utilisés dans les fichiers TypeScript.",
   "Type_annotation_cannot_appear_on_a_constructor_declaration_1093": "Une annotation de type ne peut pas apparaître sur une déclaration de constructeur.",
@@ -1276,10 +1524,15 @@
   "Type_arguments_cannot_be_used_here_1342": "Impossible d'utiliser des arguments de type ici.",
   "Type_arguments_for_0_circularly_reference_themselves_4109": "Les arguments de type pour '{0}' se référencent de manière circulaire.",
   "Type_assertion_expressions_can_only_be_used_in_TypeScript_files_8016": "Les expressions d'assertion de type peuvent uniquement être utilisées dans les fichiers TypeScript.",
+  "Type_at_position_0_in_source_is_not_compatible_with_type_at_position_1_in_target_2626": "Le type situé à la position {0} dans la source n'est pas compatible avec le type situé à la position {1} dans la cible.",
+  "Type_at_positions_0_through_1_in_source_is_not_compatible_with_type_at_position_2_in_target_2627": "Le type situé aux positions allant de {0} à {1} dans la source n'est pas compatible avec le type situé à la position {2} dans la cible.",
+  "Type_catch_clause_variables_as_unknown_instead_of_any_6803": "Tapez les variables de clause catch comme « inconnu » au lieu de « tout ».",
   "Type_declaration_files_to_be_included_in_compilation_6124": "Fichiers de déclaration de type à inclure dans la compilation.",
   "Type_expected_1110": "Type attendu.",
   "Type_instantiation_is_excessively_deep_and_possibly_infinite_2589": "L'instanciation de type est trop profonde et éventuellement infinie.",
   "Type_is_referenced_directly_or_indirectly_in_the_fulfillment_callback_of_its_own_then_method_1062": "Le type est directement ou indirectement référencé dans le rappel d'exécution de sa propre méthode 'then'.",
+  "Type_library_referenced_via_0_from_file_1_1402": "Bibliothèque de types référencée via '{0}' à partir du fichier '{1}'",
+  "Type_library_referenced_via_0_from_file_1_with_packageId_2_1403": "Bibliothèque de types référencée via '{0}' à partir du fichier '{1}' ayant le packageId '{2}'",
   "Type_of_await_operand_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member_1320": "Le type d'un opérande 'await' doit être une promesse valide ou ne doit contenir aucun membre 'then' pouvant être appelé.",
   "Type_of_computed_property_s_value_is_0_which_is_not_assignable_to_type_1_2418": "Le type de la valeur de la propriété calculée est '{0}'. Il ne peut pas être assigné au type '{1}'.",
   "Type_of_iterated_elements_of_a_yield_Asterisk_operand_must_either_be_a_valid_promise_or_must_not_con_1322": "Le type des éléments itérés d'un opérande 'yield*' doit être une promesse valide ou ne doit contenir aucun membre 'then' pouvant être appelé.",
@@ -1305,6 +1558,7 @@
   "Type_parameter_name_cannot_be_0_2368": "Le nom du paramètre de type ne peut pas être '{0}'.",
   "Type_parameters_cannot_appear_on_a_constructor_declaration_1092": "Les paramètres de type ne peuvent pas apparaître sur une déclaration de constructeur.",
   "Type_predicate_0_is_not_assignable_to_1_1226": "Impossible d'assigner le prédicat de type '{0}' à '{1}'.",
+  "Type_produces_a_tuple_type_that_is_too_large_to_represent_2799": "Le type produit un type de tuple trop grand pour être représenté.",
   "Type_reference_directive_0_was_not_resolved_6120": "======== La directive de référence de type '{0}' n'a pas été résolue. ========",
   "Type_reference_directive_0_was_successfully_resolved_to_1_primary_Colon_2_6119": "======== La directive de référence de type '{0}' a été correctement résolue en '{1}', primaire : {2}. ========",
   "Type_reference_directive_0_was_successfully_resolved_to_1_with_Package_ID_2_primary_Colon_3_6219": "======== La directive de référence de type '{0}' a été correctement résolue en '{1}' avec l'ID de package '{2}', primaire : {3}. ========",
@@ -1318,6 +1572,7 @@
   "Unable_to_resolve_signature_of_parameter_decorator_when_called_as_an_expression_1239": "Impossible de résoudre la signature d'un élément décoratif de paramètre quand il est appelé en tant qu'expression.",
   "Unable_to_resolve_signature_of_property_decorator_when_called_as_an_expression_1240": "Impossible de résoudre la signature d'un élément décoratif de propriété quand il est appelé en tant qu'expression.",
   "Unexpected_end_of_text_1126": "Fin de texte inattendue.",
+  "Unexpected_keyword_or_identifier_1434": "Mot clé ou identificateur inattendu.",
   "Unexpected_token_1012": "Jeton inattendu.",
   "Unexpected_token_A_constructor_method_accessor_or_property_was_expected_1068": "Jeton inattendu. Un constructeur, une méthode, un accesseur ou une propriété est attendu.",
   "Unexpected_token_A_type_parameter_name_was_expected_without_curly_braces_1069": "Jeton inattendu. Un nom de paramètre de type est attendu sans accolades.",
@@ -1328,6 +1583,7 @@
   "Unknown_build_option_0_Did_you_mean_1_5077": "Option de build inconnue : '{0}'. Est-ce que vous avez voulu utiliser '{1}' ?",
   "Unknown_compiler_option_0_5023": "Option de compilateur '{0}' inconnue.",
   "Unknown_compiler_option_0_Did_you_mean_1_5025": "Option de compilateur inconnue : '{0}'. Est-ce que vous avez voulu utiliser '{1}' ?",
+  "Unknown_keyword_or_identifier_Did_you_mean_0_1435": "Mot clé ou identificateur inconnu. Souhaitiez-vous utiliser «{0}» ?",
   "Unknown_option_excludes_Did_you_mean_exclude_6114": "Option 'excludes' inconnue. Voulez-vous utiliser 'exclude' ?",
   "Unknown_type_acquisition_option_0_17010": "Option d'acquisition de type inconnue '{0}'.",
   "Unknown_type_acquisition_option_0_Did_you_mean_1_17018": "Option d'acquisition de type inconnue : '{0}'. Est-ce que vous avez voulu utiliser '{1}' ?",
@@ -1350,6 +1606,7 @@
   "Use_element_access_for_all_undeclared_properties_95146": "L'accès à l'élément est utilisé pour toutes les propriétés non déclarées.",
   "Use_synthetic_default_member_95016": "Utilisez un membre 'default' synthétique.",
   "Using_a_string_in_a_for_of_statement_is_only_supported_in_ECMAScript_5_and_higher_2494": "L'utilisation d'une chaîne dans une instruction 'for...of' est prise en charge uniquement dans ECMAScript 5 et version supérieure.",
+  "Using_build_b_will_make_tsc_behave_more_like_a_build_orchestrator_than_a_compiler_This_is_used_to_tr_6915": "L’utilisation de--build,-b fera en sorte que tsc se comporte plus comme une build orchestrateur qu’un compilateur. Utilisé pour déclencher la génération de projets composites sur lesquels vous pouvez obtenir des informations supplémentaires sur {0}",
   "Using_compiler_options_of_project_reference_redirect_0_6215": "Utilisation des options de compilateur de la redirection de référence de projet : '{0}'.",
   "VERSION_6036": "VERSION",
   "Value_of_type_0_has_no_properties_in_common_with_type_1_Did_you_mean_to_call_it_2560": "La valeur de type '{0}' n'a aucune propriété en commun avec le type '{1}'. Voulez-vous vraiment l'appeler ?",
@@ -1361,10 +1618,16 @@
   "Variable_0_is_used_before_being_assigned_2454": "La variable '{0}' est utilisée avant d'être assignée.",
   "Variable_declaration_expected_1134": "Déclaration de variable attendue.",
   "Variable_declaration_list_cannot_be_empty_1123": "La liste des déclarations de variable ne peut pas être vide.",
+  "Variable_declaration_not_allowed_at_this_location_1440": "Déclaration de variable non autorisée à cet emplacement.",
+  "Variadic_element_at_position_0_in_source_does_not_match_element_at_position_1_in_target_2625": "L'élément variadique situé à la position {0} dans la source ne correspond pas à l'élément situé à la position {1} dans la cible.",
   "Version_0_6029": "Version {0}",
   "Visit_https_Colon_Slash_Slashaka_ms_Slashtsconfig_json_to_read_more_about_this_file_95110": "Visitez https://aka.ms/tsconfig.json pour en savoir plus sur ce fichier",
+  "WATCH_OPTIONS_6918": "OPTIONS D’OBSERVATION",
+  "Watch_and_Build_Modes_6250": "Modes d’Observation et de Génération",
   "Watch_input_files_6005": "Fichiers d'entrée d'espion.",
   "Watch_option_0_requires_a_value_of_type_1_5080": "L'option de surveillance '{0}' nécessite une valeur de type {1}.",
+  "When_assigning_functions_check_to_ensure_parameters_and_the_return_values_are_subtype_compatible_6698": "Lors de l’attribution de fonctions, vérifiez que les paramètres et les valeurs de retour sont compatibles avec le sous-type.",
+  "When_type_checking_take_into_account_null_and_undefined_6699": "Lors de la vérification de type, prenez en compte « null » et « undefined ».",
   "Whether_to_keep_outdated_console_output_in_watch_mode_instead_of_clearing_the_screen_6191": "Garder la sortie de console obsolète en mode espion au lieu d'effacer l'écran.",
   "Wrap_all_invalid_characters_in_an_expression_container_95109": "Inclure dans un wrapper tous les caractères non valides au sein d'un conteneur d'expressions",
   "Wrap_all_object_literal_with_parentheses_95116": "Placer tous les littéraux d'objet entre parenthèses",
@@ -1372,10 +1635,12 @@
   "Wrap_in_JSX_fragment_95120": "Inclure dans un wrapper au sein d'un fragment JSX",
   "Wrap_invalid_character_in_an_expression_container_95108": "Inclure dans un wrapper un caractère non valide au sein d'un conteneur d'expressions",
   "Wrap_the_following_body_with_parentheses_which_should_be_an_object_literal_95113": "Placer le corps suivant entre parenthèses pour indiquer qu'il s'agit d'un littéral d'objet",
+  "You_can_learn_about_all_of_the_compiler_options_at_0_6913": "Vous pouvez en savoir plus sur toutes les options du compilateur sur {0}",
   "You_cannot_rename_a_module_via_a_global_import_8031": "Vous ne pouvez pas renommer un module via une importation globale.",
   "You_cannot_rename_elements_that_are_defined_in_the_standard_TypeScript_library_8001": "Vous ne pouvez pas renommer des éléments définis dans la bibliothèque TypeScript standard.",
   "You_cannot_rename_this_element_8000": "Vous ne pouvez pas renommer cet élément.",
   "_0_accepts_too_few_arguments_to_be_used_as_a_decorator_here_Did_you_mean_to_call_it_first_and_write__1329": "'{0}' accepte trop peu d'arguments pour pouvoir être utilisé ici en tant qu'élément décoratif. Voulez-vous vraiment l'appeler d'abord et écrire '@{0}()' ?",
+  "_0_and_1_index_signatures_are_incompatible_2330": "Les signatures d'index « {0} » et « {1} » sont incompatibles.",
   "_0_and_1_operations_cannot_be_mixed_without_parentheses_5076": "Les opérations '{0}' et '{1}' ne peuvent pas être mélangées sans parenthèses.",
   "_0_are_specified_twice_The_attribute_named_0_will_be_overwritten_2710": "'{0}' spécifié deux fois. L'attribut nommé '{0}' va être remplacé.",
   "_0_can_only_be_imported_by_turning_on_the_esModuleInterop_flag_and_using_a_default_import_2596": "'{0}' peut uniquement être importé via l'activation de l'indicateur 'esModuleInterop' et l'utilisation d'une importation par défaut.",
@@ -1396,6 +1661,8 @@
   "_0_implicitly_has_an_1_return_type_but_a_better_type_may_be_inferred_from_usage_7050": "'{0}' a implicitement un type de retour '{1}', mais il est possible de déduire un meilleur type à partir de l'utilisation.",
   "_0_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_reference_7023": "'{0}' possède implicitement le type de retour 'any', car il n'a pas d'annotation de type de retour, et est référencé directement ou indirectement dans l'une de ses expressions de retour.",
   "_0_implicitly_has_type_any_because_it_does_not_have_a_type_annotation_and_is_referenced_directly_or__7022": "'{0}' a implicitement le type 'any', car il n'a pas d'annotation de type et est référencé directement ou indirectement dans son propre initialiseur.",
+  "_0_index_signatures_are_incompatible_2634": "Les signatures d'index « {0} » sont incompatibles.",
+  "_0_index_type_1_is_not_assignable_to_2_index_type_3_2413": "Le type d’index « {0} », « {1} », ne peut pas être attribué au type d’index « {2} », « {3} ».",
   "_0_is_a_primitive_but_1_is_a_wrapper_object_Prefer_using_0_when_possible_2692": "'{0}' est une primitive, mais '{1}' est un objet wrapper. Si possible, utilisez '{0}' de préférence.",
   "_0_is_assignable_to_the_constraint_of_type_1_but_1_could_be_instantiated_with_a_different_subtype_of_5075": "'{0}' peut être assigné à la contrainte de type '{1}', mais '{1}' a pu être instancié avec un autre sous-type de contrainte '{2}'.",
   "_0_is_declared_but_its_value_is_never_read_6133": "'{0}' est déclaré mais sa valeur n'est jamais lue.",
@@ -1403,7 +1670,7 @@
   "_0_is_declared_here_2728": "'{0}' est déclaré ici.",
   "_0_is_defined_as_a_property_in_class_1_but_is_overridden_here_in_2_as_an_accessor_2611": "'{0}' est défini en tant que propriété dans la classe '{1}', mais il est remplacé ici dans '{2}' en tant qu'accesseur.",
   "_0_is_defined_as_an_accessor_in_class_1_but_is_overridden_here_in_2_as_an_instance_property_2610": "'{0}' est défini en tant qu'accesseur dans la classe '{1}', mais il est remplacé ici dans '{2}' en tant que propriété d'instance.",
-  "_0_is_deprecated_6385": "'{0}' est déprécié",
+  "_0_is_deprecated_6385": "'{0}' est déprécié.",
   "_0_is_not_a_valid_meta_property_for_keyword_1_Did_you_mean_2_17012": "'{0}' n'est pas une métapropriété valide pour le mot clé '{1}'. Est-ce qu'il ne s'agit pas plutôt de '{2}' ?",
   "_0_is_not_allowed_as_a_variable_declaration_name_1389": "'{0}' n'est pas autorisé en tant que nom de déclaration de variable.",
   "_0_is_referenced_directly_or_indirectly_in_its_own_base_expression_2506": "'{0}' est référencé directement ou indirectement dans sa propre expression de base.",
@@ -1440,6 +1707,7 @@
   "_0_which_lacks_return_type_annotation_implicitly_has_an_1_yield_type_7055": "'{0}', qui n'a pas d'annotation de type de retour, a implicitement le type de retour '{1}'.",
   "abstract_modifier_can_only_appear_on_a_class_method_or_property_declaration_1242": "Le modificateur 'abstract' peut apparaître uniquement dans une déclaration de classe, de méthode ou de propriété.",
   "and_here_6204": "et ici.",
+  "arguments_cannot_be_referenced_in_property_initializers_2815": "Les « arguments » ne peuvent pas être référencés dans les initialiseurs de propriété.",
   "await_expressions_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_fi_1375": "Les expressions 'await' sont uniquement autorisées au niveau supérieur d'un fichier quand celui-ci est un module, mais le fichier actuel n'a pas d'importations ou d'exportations. Ajoutez un 'export {}' vide pour faire de ce fichier un module.",
   "await_expressions_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_1308": "Les expressions 'await' sont autorisées uniquement dans les fonctions asynchrones et aux niveaux supérieurs des modules.",
   "await_expressions_cannot_be_used_in_a_parameter_initializer_2524": "Impossible d'utiliser des expressions 'await' dans un initialiseur de paramètre.",
@@ -1456,6 +1724,7 @@
   "const_enums_can_only_be_used_in_property_or_index_access_expressions_or_the_right_hand_side_of_an_im_2475": "Les enums 'const' ne peuvent être utilisés que dans les expressions d'accès à une propriété ou un index, ou dans la partie droite d'une déclaration d'importation, d'une assignation d'exportation ou d'une requête de type.",
   "constructor_cannot_be_used_as_a_parameter_property_name_2398": "'constructor' ne peut pas être utilisé en tant que nom de propriété de paramètre.",
   "constructor_is_a_reserved_word_18012": "'#constructor' est un mot réservé.",
+  "default_Colon_6903": "Par défaut :",
   "delete_cannot_be_called_on_an_identifier_in_strict_mode_1102": "'delete' ne peut pas être appelé dans un identificateur en mode strict.",
   "delete_this_Project_0_is_up_to_date_because_it_was_previously_built_6360": "supprimer ceci - Le projet '{0}' est à jour car il a déjà été généré",
   "export_Asterisk_does_not_re_export_a_default_1195": "'export *' ne réexporte pas d'exportations par défaut.",
@@ -1466,17 +1735,26 @@
   "extends_clause_of_exported_class_0_has_or_is_using_private_name_1_4020": "La clause 'extends' de la classe exportée '{0}' comporte ou utilise le nom privé '{1}'.",
   "extends_clause_of_exported_class_has_or_is_using_private_name_0_4021": "La clause 'extends' de la classe exportée comporte ou utilise le nom privé '{0}'.",
   "extends_clause_of_exported_interface_0_has_or_is_using_private_name_1_4022": "La clause 'extends' de l'interface exportée '{0}' comporte ou utilise le nom privé '{1}'.",
+  "false_unless_composite_is_set_6906": "« false », sauf si « composite » est défini",
+  "false_unless_strict_is_set_6905": "« false », sauf si « strict » est défini",
   "file_6025": "fichier",
+  "for_await_loops_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_file_1431": "Les boucles 'for await' sont uniquement autorisées au niveau supérieur d'un fichier quand celui-ci est un module, mais le fichier actuel n'a aucune importation ou exportation. Ajoutez un 'export {}' vide pour faire de ce fichier un module.",
+  "for_await_loops_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_1103": "Les boucles 'for await' sont autorisées uniquement dans les fonctions asynchrones et aux niveaux supérieurs des modules.",
   "get_and_set_accessor_must_have_the_same_this_type_2682": "Les accesseurs 'get' et 'set' doivent avoir le même type 'this'.",
-  "get_and_set_accessor_must_have_the_same_type_2380": "Les accesseurs 'get' et 'set' doivent avoir le même type.",
   "get_and_set_accessors_cannot_declare_this_parameters_2784": "Les accesseurs 'get' et 'set' ne peuvent pas déclarer les paramètres 'this'.",
+  "if_files_is_specified_otherwise_Asterisk_Asterisk_Slash_Asterisk_6908": "«[]» si « files » est spécifié, sinon « [\"**/*\"]5D; »",
   "implements_clause_already_seen_1175": "Clause 'implements' déjà rencontrée.",
   "implements_clauses_can_only_be_used_in_TypeScript_files_8005": "Les clauses 'implements' peuvent uniquement être utilisées dans les fichiers TypeScript.",
   "import_can_only_be_used_in_TypeScript_files_8002": "'import ... =' peut uniquement être utilisé dans les fichiers TypeScript.",
   "infer_declarations_are_only_permitted_in_the_extends_clause_of_a_conditional_type_1338": "Les déclarations 'infer' sont uniquement autorisées dans la clause 'extends' d’un type conditionnel.",
   "let_declarations_can_only_be_declared_inside_a_block_1157": "Les déclarations 'let' ne peuvent être déclarées que dans un bloc.",
   "let_is_not_allowed_to_be_used_as_a_name_in_let_or_const_declarations_2480": "'let' ne peut pas être utilisé comme nom dans les déclarations 'let' ou 'const'.",
+  "module_AMD_or_UMD_or_System_or_ES6_then_Classic_Otherwise_Node_69010": "module === « AMD » ou « UMD » ou « System » ou « ES6 », puis « Classic », sinon « Node »",
+  "module_system_or_esModuleInterop_6904": "module === « system » ou esModuleInterop",
   "new_expression_whose_target_lacks_a_construct_signature_implicitly_has_an_any_type_7009": "L'expression 'new', dont la cible ne dispose pas d'une signature de construction, possède implicitement un type 'any'.",
+  "node_modules_bower_components_jspm_packages_plus_the_value_of_outDir_if_one_is_specified_6907": "« [ « node_modules », « bower_components », « jspm_packages »] », plus la valeur de « outDir » si elle est spécifiée.",
+  "one_of_Colon_6900": "L'un de :",
+  "one_or_more_Colon_6901": "un ou plusieurs :",
   "options_6024": "options",
   "or_expected_1144": "'{' ou ';' attendu.",
   "package_json_does_not_have_a_0_field_6100": "'package.json' n'a aucun champ '{0}'.",
@@ -1507,6 +1785,9 @@
   "this_cannot_be_referenced_in_constructor_arguments_2333": "Impossible de référencer 'this' dans des arguments de constructeur.",
   "this_cannot_be_referenced_in_current_location_2332": "Impossible de référencer 'this' dans l'emplacement actuel.",
   "this_implicitly_has_type_any_because_it_does_not_have_a_type_annotation_2683": "'this' possède implicitement le type 'any', car il n'a pas d'annotation de type.",
+  "true_if_composite_false_otherwise_6909": "« true » si « composite », « false » sinon",
+  "tsc_Colon_The_TypeScript_Compiler_6922": "tsc : compilateur TypeScript",
+  "type_Colon_6902": "type :",
   "unique_symbol_types_are_not_allowed_here_1335": "Les types 'unique symbol' ne sont pas autorisés ici.",
   "unique_symbol_types_are_only_allowed_on_variables_in_a_variable_statement_1334": "Les types 'unique symbol' sont uniquement autorisés sur les variables d'une déclaration de variable.",
   "unique_symbol_types_may_not_be_used_on_a_variable_declaration_with_a_binding_name_1333": "Les types 'unique symbol' ne peuvent pas être utilisés dans une déclaration de variable avec un nom de liaison.",
@@ -1514,5 +1795,6 @@
   "use_strict_directive_used_here_1349": "directive 'use strict' utilisée ici.",
   "with_statements_are_not_allowed_in_an_async_function_block_1300": "Les instructions 'with' ne sont pas autorisées dans un bloc de fonctions async.",
   "with_statements_are_not_allowed_in_strict_mode_1101": "Les instructions 'with' ne sont pas autorisées en mode strict.",
+  "yield_expression_implicitly_results_in_an_any_type_because_its_containing_generator_lacks_a_return_t_7057": "L'expression 'yield' génère implicitement un type 'any', car le générateur qui la contient n'a pas d'annotation de type de retour.",
   "yield_expressions_cannot_be_used_in_a_parameter_initializer_2523": "Impossible d'utiliser des expressions 'yield' dans un initialiseur de paramètre."
 }
\ No newline at end of file
diff --git a/node_modules/typescript/lib/it/diagnosticMessages.generated.json b/node_modules/typescript/lib/it/diagnosticMessages.generated.json
index 89f9664..d6c70bd 100644
--- a/node_modules/typescript/lib/it/diagnosticMessages.generated.json
+++ b/node_modules/typescript/lib/it/diagnosticMessages.generated.json
@@ -1,4 +1,5 @@
 {
+  "ALL_COMPILER_OPTIONS_6917": "TUTTE LE OPZIONI DEL COMPILATORE",
   "A_0_modifier_cannot_be_used_with_an_import_declaration_1079": "Non è possibile usare un modificatore '{0}' con una dichiarazione di importazione.",
   "A_0_modifier_cannot_be_used_with_an_interface_declaration_1045": "Non è possibile usare un modificatore '{0}' con una dichiarazione di interfaccia.",
   "A_0_parameter_must_be_the_first_parameter_2680": "Il primo parametro deve essere '{0}'.",
@@ -15,7 +16,7 @@
   "A_class_member_cannot_have_the_0_keyword_1248": "Un membro di classe non può contenere la parola chiave '{0}'.",
   "A_comma_expression_is_not_allowed_in_a_computed_property_name_1171": "Non sono consentite espressioni con virgole in un nome di proprietà calcolato.",
   "A_computed_property_name_cannot_reference_a_type_parameter_from_its_containing_type_2467": "Un nome di proprietà calcolato non può fare riferimento a un parametro di tipo dal tipo che lo contiene.",
-  "A_computed_property_name_in_a_class_property_declaration_must_refer_to_an_expression_whose_type_is_a_1166": "Un nome di proprietà calcolato in una dichiarazione di proprietà di classe deve fare riferimento a un'espressione il cui tipo è un tipo di valore letterale o un tipo 'unique symbol'.",
+  "A_computed_property_name_in_a_class_property_declaration_must_have_a_simple_literal_type_or_a_unique_1166": "Un nome di proprietà calcolato in una dichiarazione di proprietà di classe deve avere un tipo di valore letterale semplice o un tipo 'unique symbol'.",
   "A_computed_property_name_in_a_method_overload_must_refer_to_an_expression_whose_type_is_a_literal_ty_1168": "Un nome di proprietà calcolato in un overload di metodo deve fare riferimento a un'espressione il cui tipo è un tipo di valore letterale o un tipo 'unique symbol'.",
   "A_computed_property_name_in_a_type_literal_must_refer_to_an_expression_whose_type_is_a_literal_type__1170": "Un nome di proprietà calcolato in un valore letterale di tipo deve fare riferimento a un'espressione il cui tipo è un tipo di valore letterale o un tipo 'unique symbol'.",
   "A_computed_property_name_in_an_ambient_context_must_refer_to_an_expression_whose_type_is_a_literal_t_1165": "Un nome di proprietà calcolato in un contesto di ambiente deve fare riferimento a un'espressione il cui tipo è un tipo di valore letterale o un tipo 'unique symbol'.",
@@ -33,24 +34,25 @@
   "A_decorator_can_only_decorate_a_method_implementation_not_an_overload_1249": "Un elemento Decorator può solo decorare un'implementazione del metodo e non un overload.",
   "A_default_clause_cannot_appear_more_than_once_in_a_switch_statement_1113": "Una clausola 'default' non può essere specificata più volte in un'istruzione 'switch'.",
   "A_default_export_can_only_be_used_in_an_ECMAScript_style_module_1319": "È possibile usare un'esportazione predefinita solo in un modulo di tipo ECMAScript.",
+  "A_default_export_must_be_at_the_top_level_of_a_file_or_module_declaration_1258": "Un'esportazione predefinita deve essere al livello principale di una dichiarazione di file o di modulo.",
   "A_definite_assignment_assertion_is_not_permitted_in_this_context_1255": "In questo contesto non sono consentite asserzioni di assegnazione definite '!'.",
   "A_destructuring_declaration_must_have_an_initializer_1182": "Una dichiarazione di destrutturazione deve includere un inizializzatore.",
-  "A_dynamic_import_call_in_ES5_SlashES3_requires_the_Promise_constructor_Make_sure_you_have_a_declarat_2712": "Con una chiamata di importazione dinamica in ES5/ES3 è necessario il costruttore 'Promise'. Assicurarsi che sia presente una dichiarazione per il costruttore 'Promise' oppure includere 'ES2015' nell'opzione `--lib`.",
-  "A_dynamic_import_call_returns_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_include_ES20_2711": "Una chiamata di importazione dinamica restituisce un elemento 'Promise'. Assicurarsi che sia presente una dichiarazione per 'Promise' oppure includere 'ES2015' nell'opzione `--lib`.",
+  "A_dynamic_import_call_in_ES5_SlashES3_requires_the_Promise_constructor_Make_sure_you_have_a_declarat_2712": "Con una chiamata di importazione dinamica in ES5/ES3 è necessario il costruttore 'Promise'. Assicurarsi che sia presente una dichiarazione per il costruttore 'Promise' oppure includere 'ES2015' nell'opzione '--lib'.",
+  "A_dynamic_import_call_returns_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_include_ES20_2711": "Una chiamata di importazione dinamica restituisce un costruttore 'Promise'. Assicurarsi che sia presente una dichiarazione per 'Promise' oppure includere 'ES2015' nell'opzione '--lib'.",
   "A_file_cannot_have_a_reference_to_itself_1006": "Un file non può contenere un riferimento a se stesso.",
-  "A_for_await_of_statement_is_only_allowed_within_an_async_function_or_async_generator_1103": "Un'istruzione 'for-await-of' è consentita solo in una funzione asincrona o un generatore asincrono.",
   "A_function_returning_never_cannot_have_a_reachable_end_point_2534": "Una funzione che restituisce 'never' non può includere un punto finale raggiungibile.",
   "A_function_that_is_called_with_the_new_keyword_cannot_have_a_this_type_that_is_void_2679": "Una funzione chiamata con la parola chiave 'new' non può contenere un tipo 'this' con valore 'void'.",
   "A_function_whose_declared_type_is_neither_void_nor_any_must_return_a_value_2355": "Una funzione il cui tipo dichiarato non è 'void' né 'any' deve restituire un valore.",
   "A_generator_cannot_have_a_void_type_annotation_2505": "Un generatore non può contenere un'annotazione di tipo 'void'.",
   "A_get_accessor_cannot_have_parameters_1054": "Una funzione di accesso 'get' non può contenere parametri.",
+  "A_get_accessor_must_be_at_least_as_accessible_as_the_setter_2808": "Una funzione di accesso get deve essere accessibile almeno come setter",
   "A_get_accessor_must_return_a_value_2378": "Una funzione di accesso 'get' deve restituire un valore.",
   "A_label_is_not_allowed_here_1344": "In questo punto non sono consentite etichette.",
   "A_labeled_tuple_element_is_declared_as_optional_with_a_question_mark_after_the_name_and_before_the_c_5086": "Un elemento tupla con etichetta è dichiarato come facoltativo con un punto interrogativo dopo il nome e prima dei due punti, anziché dopo il tipo.",
-  "A_labeled_tuple_element_is_declared_as_rest_with_a_before_the_name_rather_than_before_the_type_5087": "Un elemento tupla con etichetta è dichiarato come inattivo con `...` prima del nome, anziché prima del tipo.",
+  "A_labeled_tuple_element_is_declared_as_rest_with_a_before_the_name_rather_than_before_the_type_5087": "Un elemento tupla con etichetta è dichiarato come inattivo con '...' prima del nome, anziché prima del tipo.",
   "A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_memb_2651": "Un inizializzatore di membro in una dichiarazione di enumerazione non può fare riferimento a membri dichiarati successivamente, inclusi quelli definiti in altre enumerazioni.",
-  "A_method_cannot_be_named_with_a_private_identifier_18022": "Non è possibile assegnare un nome con un identificatore privato a un metodo.",
   "A_mixin_class_must_have_a_constructor_with_a_single_rest_parameter_of_type_any_2545": "Una classe mixin deve includere un costruttore con un unico parametro REST di tipo 'any[]'.",
+  "A_mixin_class_that_extends_from_a_type_variable_containing_an_abstract_construct_signature_must_also_2797": "Una classe mixin estesa da una variabile di tipo contenente una firma del costrutto astratta deve essere dichiarata anche come 'abstract'.",
   "A_module_cannot_have_multiple_default_exports_2528": "Un modulo non può includere più esportazioni predefinite.",
   "A_namespace_declaration_cannot_be_in_a_different_file_from_a_class_or_function_with_which_it_is_merg_2433": "Una dichiarazione di spazio dei nomi non può essere presente in un file diverso rispetto a una classe o funzione con cui è stato eseguito il merge.",
   "A_namespace_declaration_cannot_be_located_prior_to_a_class_or_function_with_which_it_is_merged_2434": "Una dichiarazione di spazio dei nomi non può essere specificata prima di una classe o funzione con cui è stato eseguito il merge.",
@@ -71,10 +73,10 @@
   "A_required_element_cannot_follow_an_optional_element_1257": "Non è possibile specificare un elemento obbligatorio dopo un elemento facoltativo.",
   "A_required_parameter_cannot_follow_an_optional_parameter_1016": "Un parametro obbligatorio non può seguire un parametro facoltativo.",
   "A_rest_element_cannot_contain_a_binding_pattern_2501": "Un elemento rest non può contenere un criterio di binding.",
+  "A_rest_element_cannot_follow_another_rest_element_1265": "Non è possibile specificare un elemento REST dopo un altro elemento REST.",
   "A_rest_element_cannot_have_a_property_name_2566": "Un elemento rest non può contenere un nome proprietà.",
   "A_rest_element_cannot_have_an_initializer_1186": "Un elemento rest non può includere un inizializzatore.",
   "A_rest_element_must_be_last_in_a_destructuring_pattern_2462": "Un elemento rest deve essere l'ultimo di un criterio di destrutturazione.",
-  "A_rest_element_must_be_last_in_a_tuple_type_1256": "Un elemento rest deve essere l'ultimo in un tipo di tupla.",
   "A_rest_element_type_must_be_an_array_type_2574": "Un tipo di elemento rest deve essere un tipo di matrice.",
   "A_rest_parameter_cannot_be_optional_1047": "Un parametro rest non può essere facoltativo.",
   "A_rest_parameter_cannot_have_an_initializer_1048": "Un parametro rest non può contenere un inizializzatore.",
@@ -82,6 +84,7 @@
   "A_rest_parameter_must_be_of_an_array_type_2370": "Un parametro rest deve essere di un tipo di matrice.",
   "A_rest_parameter_or_binding_pattern_may_not_have_a_trailing_comma_1013": "Un modello di associazione o un parametro REST non può contenere una virgola finale.",
   "A_return_statement_can_only_be_used_within_a_function_body_1108": "Un'istruzione 'return' può essere usata solo all'interno di un corpo di funzione.",
+  "A_return_statement_cannot_be_used_inside_a_class_static_block_18041": "Non è possibile usare un'istruzione 'return' all'interno di un blocco statico di classe.",
   "A_series_of_entries_which_re_map_imports_to_lookup_locations_relative_to_the_baseUrl_6167": "Serie di voci che ripetono il mapping delle importazioni a percorsi di ricerca relativi al valore di 'baseUrl'.",
   "A_set_accessor_cannot_have_a_return_type_annotation_1095": "Una funzione di accesso 'set' non può contenere un'annotazione di tipo restituito.",
   "A_set_accessor_cannot_have_an_optional_parameter_1051": "Una funzione di accesso 'set' non può contenere un parametro facoltativo.",
@@ -89,6 +92,7 @@
   "A_set_accessor_must_have_exactly_one_parameter_1049": "Una funzione di accesso 'set' deve contenere un solo parametro.",
   "A_set_accessor_parameter_cannot_have_an_initializer_1052": "Un parametro della funzione di accesso 'set' non può contenere un inizializzatore.",
   "A_signature_with_an_implementation_cannot_use_a_string_literal_type_2381": "Una firma con un'implementazione non può usare un tipo di valore letterale stringa.",
+  "A_spread_argument_must_either_have_a_tuple_type_or_be_passed_to_a_rest_parameter_2556": "Un argomento spread deve avere un tipo di tupla o essere passato a un parametro rest.",
   "A_super_call_must_be_the_first_statement_in_the_constructor_when_a_class_contains_initialized_proper_2376": "Una chiamata 'super' deve essere la prima istruzione del costruttore quando una classe contiene proprietà inizializzate, proprietà di parametri o identificatori privati.",
   "A_this_based_type_guard_is_not_compatible_with_a_parameter_based_type_guard_2518": "Un guard di tipo basato su 'this' non è compatibile con uno basato su parametri.",
   "A_this_type_is_available_only_in_a_non_static_member_of_a_class_or_interface_2526": "Un tipo 'this' è disponibile solo in un membro non statico di una classe o di interfaccia.",
@@ -114,8 +118,11 @@
   "Add_a_return_statement_95111": "Aggiungere un'istruzione return",
   "Add_all_missing_async_modifiers_95041": "Aggiungere tutti i modificatori 'async' mancanti",
   "Add_all_missing_call_parentheses_95068": "Aggiungere tutte le parentesi mancanti nelle chiamate",
+  "Add_all_missing_function_declarations_95157": "Aggiungere tutte le dichiarazioni di funzione mancanti",
   "Add_all_missing_imports_95064": "Aggiungere tutte le importazioni mancanti",
   "Add_all_missing_members_95022": "Aggiungere tutti i membri mancanti",
+  "Add_all_missing_override_modifiers_95162": "Aggiungere tutti i modificatori 'override' mancanti",
+  "Add_all_missing_properties_95166": "Aggiunge tutte le proprietà mancanti",
   "Add_all_missing_return_statement_95114": "Aggiungere tutte le istruzioni return mancanti",
   "Add_all_missing_super_calls_95039": "Aggiungere tutte le chiamate a super mancanti",
   "Add_async_modifier_to_containing_function_90029": "Aggiungere il modificatore async alla funzione contenitore",
@@ -135,18 +142,22 @@
   "Add_initializers_to_all_uninitialized_properties_95027": "Aggiungere gli inizializzatori a tutte le proprietà non inizializzate",
   "Add_missing_call_parentheses_95067": "Aggiungere le parentesi mancanti nelle chiamate",
   "Add_missing_enum_member_0_95063": "Aggiungere il membro di enumerazione mancante '{0}'",
+  "Add_missing_function_declaration_0_95156": "Aggiungere la dichiarazione di funzione mancante '{0}'",
   "Add_missing_new_operator_to_all_calls_95072": "Aggiungere l'operatore mancante 'new' a tutte le chiamate",
   "Add_missing_new_operator_to_call_95071": "Aggiungere l'operatore mancante 'new' alla chiamata",
+  "Add_missing_properties_95165": "Aggiunge le proprietà mancanti",
   "Add_missing_super_call_90001": "Aggiungere la chiamata mancante a 'super()'",
   "Add_missing_typeof_95052": "Aggiungere l'elemento 'typeof' mancante",
   "Add_names_to_all_parameters_without_names_95073": "Aggiungere i nomi a tutti i parametri senza nomi",
   "Add_or_remove_braces_in_an_arrow_function_95058": "Aggiungere o rimuovere le parentesi graffe in una funzione arrow",
+  "Add_override_modifier_95160": "Aggiungere il modificatore 'override'",
   "Add_parameter_name_90034": "Aggiungere il nome del parametro",
   "Add_qualifier_to_all_unresolved_variables_matching_a_member_name_95037": "Aggiungere il qualificatore a tutte le variabili non risolte corrispondenti a un nome di membro",
   "Add_this_parameter_95104": "Aggiungere il parametro 'this'.",
   "Add_this_tag_95103": "Aggiungere il tag '@this'",
   "Add_to_all_uncalled_decorators_95044": "Aggiungere '()' a tutti gli elementi Decorator non chiamati",
   "Add_ts_ignore_to_all_error_messages_95042": "Aggiungere '@ts-ignore' a tutti i messaggi di errore",
+  "Add_undefined_to_a_type_when_accessed_using_an_index_6674": "Aggiunge `undefined` a un tipo quando l'accesso viene eseguito tramite un indice.",
   "Add_undefined_type_to_all_uninitialized_properties_95029": "Aggiungere il tipo non definito a tutte le proprietà non inizializzate",
   "Add_undefined_type_to_property_0_95018": "Aggiungere il tipo 'undefined' alla proprietà '{0}'",
   "Add_unknown_conversion_for_non_overlapping_types_95069": "Aggiungere la conversione 'unknown' per i tipi non sovrapposti",
@@ -154,8 +165,6 @@
   "Add_void_to_Promise_resolved_without_a_value_95143": "Aggiungere 'void' all'elemento Promise risolto senza un valore",
   "Add_void_to_all_Promises_resolved_without_a_value_95144": "Aggiungere 'void' a tutti gli elementi Promise risolti senza un valore",
   "Adding_a_tsconfig_json_file_will_help_organize_projects_that_contain_both_TypeScript_and_JavaScript__5068": "Aggiungere un file tsconfig.json per organizzare più facilmente progetti che contengono sia file TypeScript che JavaScript. Per altre informazioni, vedere https://aka.ms/tsconfig.",
-  "Additional_Checks_6176": "Controlli aggiuntivi",
-  "Advanced_Options_6178": "Opzioni avanzate",
   "All_declarations_of_0_must_have_identical_modifiers_2687": "Tutte le dichiarazioni di '{0}' devono contenere modificatori identici.",
   "All_declarations_of_0_must_have_identical_type_parameters_2428": "Tutte le dichiarazioni di '{0}' devono contenere parametri di tipo identici.",
   "All_declarations_of_an_abstract_method_must_be_consecutive_2516": "Tutte le dichiarazioni di un metodo astratto devono essere consecutive.",
@@ -163,34 +172,38 @@
   "All_imports_in_import_declaration_are_unused_6192": "Tutte le importazioni nella dichiarazione di importazione sono inutilizzate.",
   "All_type_parameters_are_unused_6205": "Tutti i parametri di tipo sono inutilizzati.",
   "All_variables_are_unused_6199": "Tutte le variabili sono inutilizzate.",
-  "Allow_accessing_UMD_globals_from_modules_95076": "Consentire l'accesso alle istruzioni globali UMD dai moduli.",
+  "Allow_JavaScript_files_to_be_a_part_of_your_program_Use_the_checkJS_option_to_get_errors_from_these__6600": "Consente l'uso di file JavaScript nel programma. Usare l'opzione `checkJS` per ottenere gli errori da questi file.",
+  "Allow_accessing_UMD_globals_from_modules_6602": "Consentire l'accesso alle istruzioni globali UMD dai moduli.",
   "Allow_default_imports_from_modules_with_no_default_export_This_does_not_affect_code_emit_just_typech_6011": "Consente di eseguire importazioni predefinite da moduli senza esportazione predefinita. Non influisce sulla creazione del codice ma solo sul controllo dei tipi.",
+  "Allow_import_x_from_y_when_a_module_doesn_t_have_a_default_export_6601": "Consente 'import x from y' quando un modulo non contiene un'esportazione predefinita.",
+  "Allow_importing_helper_functions_from_tslib_once_per_project_instead_of_including_them_per_file_6639": "Consente di eseguire una volta per progetto l'importazione di funzioni helper da tslib, invece di includerle per ogni file.",
   "Allow_javascript_files_to_be_compiled_6102": "Consente la compilazione di file JavaScript.",
+  "Allow_multiple_folders_to_be_treated_as_one_when_resolving_modules_6691": "Consente che più cartelle vengano considerate come una sola durante la risoluzione dei moduli.",
   "Already_included_file_name_0_differs_from_file_name_1_only_in_casing_1261": "Il nome file già incluso '{0}' differisce da quello '{1}' solo per l'uso di maiuscole/minuscole.",
   "Ambient_module_declaration_cannot_specify_relative_module_name_2436": "Non è possibile specificare il nome di modulo relativo nella dichiarazione di modulo di ambiente.",
   "Ambient_modules_cannot_be_nested_in_other_modules_or_namespaces_2435": "I moduli di ambiente non possono essere annidati in altri moduli o spazi dei nomi.",
   "An_AMD_module_cannot_have_multiple_name_assignments_2458": "Un modulo AMD non può includere più assegnazioni di nome.",
   "An_abstract_accessor_cannot_have_an_implementation_1318": "Una funzione di accesso astratta non può contenere un'implementazione.",
   "An_accessibility_modifier_cannot_be_used_with_a_private_identifier_18010": "Non è possibile usare un modificatore di accessibilità con un identificatore privato.",
-  "An_accessor_cannot_be_named_with_a_private_identifier_18023": "Non è possibile assegnare un nome con un identificatore privato a una funzione di accesso.",
   "An_accessor_cannot_have_type_parameters_1094": "Una funzione di accesso non può contenere parametri di tipo.",
   "An_ambient_module_declaration_is_only_allowed_at_the_top_level_in_a_file_1234": "Una dichiarazione di modulo di ambiente è consentita solo al primo livello in un file.",
   "An_argument_for_0_was_not_provided_6210": "Non è stato specificato alcun argomento per '{0}'.",
   "An_argument_matching_this_binding_pattern_was_not_provided_6211": "Non è stato specificato alcun argomento corrispondente a questo modello di associazione.",
   "An_arithmetic_operand_must_be_of_type_any_number_bigint_or_an_enum_type_2356": "Un operando aritmetico deve essere di tipo 'any', 'number', 'bigint' o un tipo enumerazione.",
   "An_arrow_function_cannot_have_a_this_parameter_2730": "Una funzione arrow non può contenere un parametro 'this'.",
-  "An_async_function_or_method_in_ES5_SlashES3_requires_the_Promise_constructor_Make_sure_you_have_a_de_2705": "Con una funzione o un metodo asincrono in ES5/ES3 è necessario il costruttore 'Promise'.  Assicurarsi che sia presente una dichiarazione per il costruttore 'Promise' oppure includere 'ES2015' nell'opzione `--lib`.",
+  "An_async_function_or_method_in_ES5_SlashES3_requires_the_Promise_constructor_Make_sure_you_have_a_de_2705": "Con una funzione o un metodo asincrono in ES5/ES3 è necessario il costruttore 'Promise'.  Assicurarsi che sia presente una dichiarazione per il costruttore 'Promise' oppure includere 'ES2015' nell'opzione '--lib'.",
   "An_async_function_or_method_must_have_a_valid_awaitable_return_type_1057": "Una funzione o un metodo asincrono deve includere un tipo restituito awaitable valido.",
-  "An_async_function_or_method_must_return_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_in_2697": "Un metodo o una funzione asincrona deve restituire un elemento 'Promise'. Assicurarsi che sia presente una dichiarazione per 'Promise' oppure includere 'ES2015' nell'opzione `--lib`.",
+  "An_async_function_or_method_must_return_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_in_2697": "Un metodo o una funzione asincrona deve restituire un costruttore 'Promise'. Assicurarsi che sia presente una dichiarazione per 'Promise' oppure includere 'ES2015' nell'opzione '--lib'.",
   "An_async_iterator_must_have_a_next_method_2519": "Un iteratore asincrono deve contenere un metodo 'next()'.",
   "An_element_access_expression_should_take_an_argument_1011": "Un'espressione di accesso a elementi deve accettare un argomento.",
   "An_enum_member_cannot_be_named_with_a_private_identifier_18024": "Non è possibile assegnare un nome con un identificatore privato a un membro di enumerazione.",
   "An_enum_member_cannot_have_a_numeric_name_2452": "Il nome di un membro di enumerazione non può essere numerico.",
   "An_enum_member_name_must_be_followed_by_a_or_1357": "Il nome di un membro di enumerazione deve essere seguito da ',', '=' o '}'.",
-  "An_export_assignment_can_only_be_used_in_a_module_1231": "È possibile usare un'assegnazione di esportazione solo in un modulo.",
+  "An_expanded_version_of_this_information_showing_all_possible_compiler_options_6928": "Versione espansa di queste informazioni, che mostra tutte le opzioni possibili del compilatore",
   "An_export_assignment_cannot_be_used_in_a_module_with_other_exported_elements_2309": "Non è possibile usare un'assegnazione di esportazione in un modulo con altri elementi esportati.",
   "An_export_assignment_cannot_be_used_in_a_namespace_1063": "Non è possibile usare un'assegnazione di esportazione in uno spazio dei nomi.",
   "An_export_assignment_cannot_have_modifiers_1120": "Un'assegnazione di esportazione non può contenere modificatori.",
+  "An_export_assignment_must_be_at_the_top_level_of_a_file_or_module_declaration_1231": "Un'assegnazione di esportazione deve essere al primo livello di una dichiarazione di file o di modulo.",
   "An_export_declaration_can_only_be_used_in_a_module_1233": "È possibile usare una dichiarazione di esportazione solo in un modulo.",
   "An_export_declaration_cannot_have_modifiers_1193": "Una dichiarazione di esportazione non può contenere modificatori.",
   "An_expression_of_type_void_cannot_be_tested_for_truthiness_1345": "Non è possibile testare la veridicità di un'espressione di tipo 'void'.",
@@ -212,9 +225,8 @@
   "An_index_signature_parameter_cannot_have_an_accessibility_modifier_1018": "Un parametro della firma dell'indice non può contenere un modificatore di accessibilità.",
   "An_index_signature_parameter_cannot_have_an_initializer_1020": "Un parametro della firma dell'indice non può contenere un inizializzatore.",
   "An_index_signature_parameter_must_have_a_type_annotation_1022": "Un parametro della firma dell'indice deve contenere un'annotazione di tipo.",
-  "An_index_signature_parameter_type_cannot_be_a_type_alias_Consider_writing_0_Colon_1_Colon_2_instead_1336": "Un tipo di parametro della firma dell'indice non può essere un alias di tipo. Provare a scrivere '[{0}: {1}]: {2}'.",
-  "An_index_signature_parameter_type_cannot_be_a_union_type_Consider_using_a_mapped_object_type_instead_1337": "Un tipo di parametro della firma dell'indice non può essere un tipo di unione. Provare a usare un tipo di oggetto con mapping.",
-  "An_index_signature_parameter_type_must_be_either_string_or_number_1023": "Il tipo di un parametro della firma dell'indice deve essere 'string' o 'number'.",
+  "An_index_signature_parameter_type_cannot_be_a_literal_type_or_generic_type_Consider_using_a_mapped_o_1337": "Un tipo di parametro della firma dell'indice non può essere un tipo di valore letterale o un tipo generico. Considerare l'utilizzo di un tipo di oggetto con mapping.",
+  "An_index_signature_parameter_type_must_be_string_number_symbol_or_a_template_literal_type_1268": "Un tipo di parametro della firma dell'indice deve essere 'stringa', 'numero', 'simbolo' o un tipo di valore letterale del modello.",
   "An_interface_can_only_extend_an_identifier_Slashqualified_name_with_optional_type_arguments_2499": "Un'interfaccia può estendere solo un identificatore/nome qualificato con argomenti tipo facoltativi.",
   "An_interface_can_only_extend_an_object_type_or_intersection_of_object_types_with_statically_known_me_2312": "Un'interfaccia può estendere solo un tipo di oggetto o un'intersezione di tipi di oggetto con membri noti in modo statico.",
   "An_interface_property_cannot_have_an_initializer_1246": "Una proprietà di interfaccia non può contenere un inizializzatore.",
@@ -225,6 +237,7 @@
   "An_object_literal_cannot_have_property_and_accessor_with_the_same_name_1119": "Un valore letterale di oggetto non può contenere proprietà e funzioni di accesso con lo stesso nome.",
   "An_object_member_cannot_be_declared_optional_1162": "Un membro di oggetto non può essere dichiarato come facoltativo.",
   "An_optional_chain_cannot_contain_private_identifiers_18030": "Una catena facoltativa non può contenere identificatori privati.",
+  "An_optional_element_cannot_follow_a_rest_element_1266": "Non è possibile specificare un elemento facoltativo dopo un elemento REST.",
   "An_outer_value_of_this_is_shadowed_by_this_container_2738": "Un valore esterno di 'this' è nascosto da questo contenitore.",
   "An_overload_signature_cannot_be_declared_as_a_generator_1222": "Non è possibile dichiarare come generatore una firma di overload.",
   "An_unary_expression_with_the_0_operator_is_not_allowed_in_the_left_hand_side_of_an_exponentiation_ex_17006": "Nella parte sinistra di un'espressione di elevamento a potenza non è consentita un'espressione unaria con l'operatore '{0}'. Provare a racchiudere l'espressione tra parentesi.",
@@ -244,33 +257,47 @@
   "Augmentations_for_the_global_scope_can_only_be_directly_nested_in_external_modules_or_ambient_module_2669": "Gli aumenti per l'ambito globale possono solo essere direttamente annidati in dichiarazioni di modulo di ambiente o moduli esterni.",
   "Augmentations_for_the_global_scope_should_have_declare_modifier_unless_they_appear_in_already_ambien_2670": "Gli aumenti per l'ambito globale devono contenere il modificatore 'declare', a meno che non siano già presenti in un contesto di ambiente.",
   "Auto_discovery_for_typings_is_enabled_in_project_0_Running_extra_resolution_pass_for_module_1_using__6140": "Il rilevamento automatico per le defizioni di tipi è abilitato nel progetto '{0}'. Verrà eseguito il passaggio di risoluzione aggiuntivo per il modulo '{1}' usando il percorso della cache '{2}'.",
+  "Await_expression_cannot_be_used_inside_a_class_static_block_18037": "Non è possibile usare l'espressione await all'interno di un blocco statico di classe.",
+  "BUILD_OPTIONS_6919": "OPZIONI DI COMPILAZIONE",
+  "Backwards_Compatibility_6253": "Compatibilità con le versioni precedenti",
   "Base_class_expressions_cannot_reference_class_type_parameters_2562": "Le espressioni di classi di base non possono fare riferimento a parametri di tipo classe.",
   "Base_constructor_return_type_0_is_not_an_object_type_or_intersection_of_object_types_with_statically_2509": "Il tipo restituito '{0}' del costruttore di base non è un tipo di oggetto o un'intersezione di tipi di oggetto con membri noti in modo statico.",
   "Base_constructors_must_all_have_the_same_return_type_2510": "Il tipo restituito deve essere identico per tutti i costruttori di base.",
   "Base_directory_to_resolve_non_absolute_module_names_6083": "Directory di base per risolvere i nomi di modulo non assoluti.",
-  "Basic_Options_6172": "Opzioni di base",
   "BigInt_literals_are_not_available_when_targeting_lower_than_ES2020_2737": "I valori letterali bigint non sono disponibili quando la destinazione è precedente a ES2020.",
   "Binary_digit_expected_1177": "È prevista una cifra binaria.",
   "Binding_element_0_implicitly_has_an_1_type_7031": "L'elemento di binding '{0}' contiene implicitamente un tipo '{1}'.",
   "Block_scoped_variable_0_used_before_its_declaration_2448": "La variabile con ambito blocco '{0}' è stata usata prima di essere stata dichiarata.",
-  "Build_all_projects_including_those_that_appear_to_be_up_to_date_6368": "Compilare tutti i progetti, anche quelli che sembrano aggiornati",
+  "Build_a_composite_project_in_the_working_directory_6925": "Compila un progetto composito nella directory di lavoro.",
+  "Build_all_projects_including_those_that_appear_to_be_up_to_date_6636": "Compilare tutti i progetti, anche quelli che sembrano aggiornati",
   "Build_one_or_more_projects_and_their_dependencies_if_out_of_date_6364": "Compilare uno o più progetti e le relative dipendenze, se non aggiornate",
   "Build_option_0_requires_a_value_of_type_1_5073": "Con l'opzione di compilazione '{0}' è richiesto un valore di tipo {1}.",
   "Building_project_0_6358": "Compilazione del progetto '{0}'...",
+  "COMMAND_LINE_FLAGS_6921": "FLAG DELLA RIGA DI COMANDO",
+  "COMMON_COMMANDS_6916": "COMANDI COMUNI",
+  "COMMON_COMPILER_OPTIONS_6920": "OPZIONI COMUNI DEL COMPILATORE",
   "Call_decorator_expression_90028": "Chiamare l'espressione Decorator",
   "Call_signature_return_types_0_and_1_are_incompatible_2202": "I tipi restituiti delle firme di chiamata '{0}' e '{1}' sono incompatibili.",
   "Call_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type_7020": "La firma di chiamata, in cui manca l'annotazione di tipo restituito, contiene implicitamente un tipo restituito 'any'.",
   "Call_signatures_with_no_arguments_have_incompatible_return_types_0_and_1_2204": "Le firme di chiamata senza argomenti contengono i tipi restituiti incompatibili '{0}' e '{1}'.",
   "Call_target_does_not_contain_any_signatures_2346": "La destinazione della chiamata non contiene alcuna firma.",
   "Can_only_convert_logical_AND_access_chains_95142": "È possibile convertire solo catene di accesso AND logiche",
+  "Can_only_convert_named_export_95164": "È possibile solo convertire l'esportazione denominata",
   "Can_only_convert_property_with_modifier_95137": "È possibile convertire solo la proprietà con il modificatore",
+  "Can_only_convert_string_concatenation_95154": "È possibile convertire solo la concatenazione di stringhe",
   "Cannot_access_0_1_because_0_is_a_type_but_not_a_namespace_Did_you_mean_to_retrieve_the_type_of_the_p_2713": "Non è possibile accedere a '{0}.{1}' perché '{0}' è un tipo ma non uno spazio dei nomi. Si intendeva recuperare il tipo della proprietà '{1}' in '{0}' con '{0}[\"{1}\"]'?",
   "Cannot_access_ambient_const_enums_when_the_isolatedModules_flag_is_provided_2748": "Quando si specifica il flag '--isolatedModules', non è possibile accedere a enumerazioni const di ambiente.",
   "Cannot_assign_a_0_constructor_type_to_a_1_constructor_type_2672": "Non è possibile assegnare un tipo di costruttore '{0}' a un tipo di costruttore '{1}'.",
   "Cannot_assign_an_abstract_constructor_type_to_a_non_abstract_constructor_type_2517": "Non è possibile assegnare un tipo di costruttore astratto a un tipo di costruttore non astratto.",
+  "Cannot_assign_to_0_because_it_is_a_class_2629": "Non è possibile assegnare a '{0}' perché è una classe.",
   "Cannot_assign_to_0_because_it_is_a_constant_2588": "Non è possibile assegnare a '{0}' perché è una costante.",
+  "Cannot_assign_to_0_because_it_is_a_function_2630": "Non è possibile assegnare a '{0}' perché è una funzione.",
+  "Cannot_assign_to_0_because_it_is_a_namespace_2631": "Non è possibile assegnare a '{0}' perché è uno spazio dei nomi.",
   "Cannot_assign_to_0_because_it_is_a_read_only_property_2540": "Non è possibile assegnare a '{0}' perché è una proprietà di sola lettura.",
+  "Cannot_assign_to_0_because_it_is_an_enum_2628": "Non è possibile assegnare a '{0}' perché è un'enumerazione.",
+  "Cannot_assign_to_0_because_it_is_an_import_2632": "Non è possibile assegnare a '{0}' perché è una direttiva import.",
   "Cannot_assign_to_0_because_it_is_not_a_variable_2539": "Non è possibile assegnare a '{0}' perché non è una variabile.",
+  "Cannot_assign_to_private_method_0_Private_methods_are_not_writable_2803": "Non è possibile assegnare al metodo privato '{0}'. I metodi privati non sono scrivibili.",
   "Cannot_augment_module_0_because_it_resolves_to_a_non_module_entity_2671": "Non è possibile aumentare il modulo '{0}' perché viene risolto in un'entità non modulo.",
   "Cannot_augment_module_0_with_value_exports_because_it_resolves_to_a_non_module_entity_2649": "Non è possibile aumentare il modulo '{0}' con le esportazioni dei valori perché viene risolto in un'entità non modulo.",
   "Cannot_compile_modules_using_option_0_unless_the_module_flag_is_amd_or_system_6131": "Non è possibile compilare moduli con l'opzione '{0}' a meno che il flag '--module' non sia impostato su 'amd' o 'system'.",
@@ -292,14 +319,14 @@
   "Cannot_find_name_0_Did_you_mean_1_2552": "Il nome '{0}' non è stato trovato. Si intendeva '{1}'?",
   "Cannot_find_name_0_Did_you_mean_the_instance_member_this_0_2663": "Il nome '{0}' non è stato trovato. Si intendeva il membro di istanza 'this.{0}'?",
   "Cannot_find_name_0_Did_you_mean_the_static_member_1_0_2662": "Il nome '{0}' non è stato trovato. Si intendeva il membro statico '{1}.{0}'?",
-  "Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_2583": "Non è possibile trovare il nome '{0}'. È necessario modificare la libreria di destinazione? Provare a impostare l'opzione `lib` del compilatore su '{1}' o versioni successive.",
-  "Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_2584": "Non è possibile trovare il nome '{0}'. È necessario modificare la libreria di destinazione? Provare a modificare l'opzione `lib` del compilatore in modo che includa 'dom'.",
+  "Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_2583": "Non è possibile trovare il nome '{0}'. È necessario modificare la libreria di destinazione? Provare a impostare l'opzione 'lib' del compilatore su '{1}' o versioni successive.",
+  "Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_2584": "Non è possibile trovare il nome '{0}'. È necessario modificare la libreria di destinazione? Provare a modificare l'opzione 'lib' del compilatore in modo che includa 'dom'.",
   "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_a_test_runner_Try_npm_i_save_dev_type_2582": "Non è possibile trovare il nome '{0}'. È necessario installare le definizioni di tipo per un test runner? Provare con `npm i --save-dev @types/jest` o `npm i --save-dev @types/mocha`.",
-  "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_a_test_runner_Try_npm_i_save_dev_type_2593": "Non è possibile trovare il nome '{0}'. È necessario installare le definizioni di tipo per un test runner? Provare con `npm i --save-dev @types/jest` o `npm i --save-dev @types/mocha` e quindi aggiungere `jest` o `mocha` al campo types in tsconfig.",
+  "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_a_test_runner_Try_npm_i_save_dev_type_2593": "Non è possibile trovare il nome '{0}'. È necessario installare le definizioni di tipo per un test runner? Provare con `npm i --save-dev @types/jest` o `npm i --save-dev @types/mocha` e quindi aggiungere 'jest' o 'mocha' al campo types in tsconfig.",
   "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_jQuery_Try_npm_i_save_dev_types_Slash_2581": "Non è possibile trovare il nome '{0}'. È necessario installare le definizioni di tipo per jQuery? Provare con `npm i --save-dev @types/jquery`.",
-  "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_jQuery_Try_npm_i_save_dev_types_Slash_2592": "Non è possibile trovare il nome '{0}'. È necessario installare le definizioni di tipo per jQuery? Provare con `npm i --save-dev @types/jquery` e quindi aggiungere `jquery` al campo types in tsconfig.",
+  "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_jQuery_Try_npm_i_save_dev_types_Slash_2592": "Non è possibile trovare il nome '{0}'. È necessario installare le definizioni di tipo per jQuery? Provare con `npm i --save-dev @types/jquery` e quindi aggiungere 'jquery' al campo types in tsconfig.",
   "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_node_Try_npm_i_save_dev_types_Slashno_2580": "Non è possibile trovare il nome '{0}'. È necessario installare le definizioni di tipo per il nodo? Provare con `npm i --save-dev @types/node`.",
-  "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_node_Try_npm_i_save_dev_types_Slashno_2591": "Non è possibile trovare il nome '{0}'. È necessario installare le definizioni di tipo per il nodo? Provare con `npm i --save-dev @types/node` e quindi aggiungere `node` al campo types in tsconfig.",
+  "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_node_Try_npm_i_save_dev_types_Slashno_2591": "Non è possibile trovare il nome '{0}'. È necessario installare le definizioni di tipo per il nodo? Provare con `npm i --save-dev @types/node` e quindi aggiungere 'node' al campo types in tsconfig.",
   "Cannot_find_namespace_0_2503": "Lo spazio dei nomi '{0}' non è stato trovato.",
   "Cannot_find_parameter_0_1225": "Il parametro '{0}' non è stato trovato.",
   "Cannot_find_the_common_subdirectory_path_for_the_input_files_5009": "Il percorso della sottodirectory comune per i file di input non è stato trovato.",
@@ -318,11 +345,13 @@
   "Cannot_redeclare_block_scoped_variable_0_2451": "Non è possibile dichiarare di nuovo la variabile con ambito blocco '{0}'.",
   "Cannot_redeclare_exported_variable_0_2323": "Non è possibile dichiarare di nuovo la variabile esportata '{0}'.",
   "Cannot_redeclare_identifier_0_in_catch_clause_2492": "Non è possibile dichiarare di nuovo l'identificatore '{0}' nella clausola catch.",
+  "Cannot_start_a_function_call_in_a_type_annotation_1441": "Non è possibile avviare una chiamata di funzione in un'annotazione di tipo.",
   "Cannot_update_output_of_project_0_because_there_was_error_reading_file_1_6376": "Non è possibile aggiornare l'output del progetto '{0}' perché si è verificato un errore durante la lettura del file '{1}'",
   "Cannot_use_JSX_unless_the_jsx_flag_is_provided_17004": "Non è possibile usare JSX a meno che non sia specificato il flag '--jsx'.",
   "Cannot_use_imports_exports_or_module_augmentations_when_module_is_none_1148": "Non è possibile usare importazioni, esportazioni o aumenti del modulo quando il valore di '--module' è 'none'.",
   "Cannot_use_namespace_0_as_a_type_2709": "Non è possibile usare lo spazio dei nomi '{0}' come tipo.",
   "Cannot_use_namespace_0_as_a_value_2708": "Non è possibile usare lo spazio dei nomi '{0}' come valore.",
+  "Cannot_use_this_in_a_static_property_initializer_of_a_decorated_class_2816": "Non è possibile usare 'this' in un inizializzatore di proprietà statica di una classe decorata.",
   "Cannot_write_file_0_because_it_will_overwrite_tsbuildinfo_file_generated_by_referenced_project_1_6377": "Non è possibile scrivere il file '{0}' perché sovrascriverà il file '.tsbuildinfo' generato dal progetto di riferimento '{1}'",
   "Cannot_write_file_0_because_it_would_be_overwritten_by_multiple_input_files_5056": "Non è possibile scrivere il file '{0}' perché verrebbe sovrascritto da più file di input.",
   "Cannot_write_file_0_because_it_would_overwrite_input_file_5055": "Non è possibile scrivere il file '{0}' perché sovrascriverebbe il file di input.",
@@ -334,6 +363,8 @@
   "Change_all_jsdoc_style_types_to_TypeScript_and_add_undefined_to_nullable_types_95031": "Cambiare tutti i tipi in stile jsdoc in TypeScript (e aggiungere '| undefined' ai tipi nullable)",
   "Change_extends_to_implements_90003": "Cambiare 'extends' in 'implements'",
   "Change_spelling_to_0_90022": "Modificare l'ortografia in '{0}'",
+  "Check_for_class_properties_that_are_declared_but_not_set_in_the_constructor_6700": "Verifica la presenza di proprietà di classe dichiarate ma non impostate nel costruttore.",
+  "Check_that_the_arguments_for_bind_call_and_apply_methods_match_the_original_function_6697": "Verifica che gli argomenti per i metodi `bind`, `call` e `apply` corrispondano alla funzione originale.",
   "Checking_if_0_is_the_longest_matching_prefix_for_1_2_6104": "Verrà verificato se '{0}' è il prefisso di corrispondenza più lungo per '{1}' - '{2}'.",
   "Circular_definition_of_import_alias_0_2303": "Definizione circolare dell'alias di importazione '{0}'.",
   "Circularity_detected_while_resolving_configuration_Colon_0_18000": "È stata rilevata una circolarità durante la risoluzione della configurazione: {0}",
@@ -345,7 +376,9 @@
   "Class_0_incorrectly_implements_class_1_Did_you_mean_to_extend_1_and_inherit_its_members_as_a_subclas_2720": "La classe '{0}' implementa in modo errato la classe '{1}'. Si intendeva estendere '{1}' ed ereditarne i membri come sottoclasse?",
   "Class_0_incorrectly_implements_interface_1_2420": "La classe '{0}' implementa in modo errato l'interfaccia '{1}'.",
   "Class_0_used_before_its_declaration_2449": "La classe '{0}' è stata usata prima di essere stata dichiarata.",
-  "Class_declarations_cannot_have_more_than_one_augments_or_extends_tag_8025": "Le dichiarazioni di classe non possono contenere più di un tag `@augments` o `@extends`.",
+  "Class_declaration_cannot_implement_overload_list_for_0_2813": "La dichiarazione classe non può implementare l'elenco di overload per '{0}'.",
+  "Class_declarations_cannot_have_more_than_one_augments_or_extends_tag_8025": "Le dichiarazioni di classe non possono contenere più di un tag '@augments' o '@extends'.",
+  "Class_decorators_can_t_be_used_with_static_private_identifier_Consider_removing_the_experimental_dec_18036": "Non è possibile elementi Decorator di classe con l'identificatore privato statico. Provare a rimuovere l'elemento Decorator sperimentale.",
   "Class_name_cannot_be_0_2414": "Il nome della classe non può essere '{0}'.",
   "Class_name_cannot_be_Object_when_targeting_ES5_with_module_0_2725": "Il nome della classe non può essere 'Object' quando la destinazione è ES5 con il modulo {0}.",
   "Class_static_side_0_incorrectly_extends_base_class_static_side_1_2417": "Il lato statico '{0}' della classe estende in modo errato il lato statico '{1}' della classe di base.",
@@ -354,16 +387,25 @@
   "Classes_may_not_have_a_field_named_constructor_18006": "Le classi non possono includere un campo denominato 'constructor'.",
   "Command_line_Options_6171": "Opzioni della riga di comando",
   "Compile_the_project_given_the_path_to_its_configuration_file_or_to_a_folder_with_a_tsconfig_json_6020": "Compila il progetto in base al percorso del file di configurazione o della cartella contenente un file 'tsconfig.json'.",
+  "Compiler_Diagnostics_6251": "Diagnostica compilatore",
   "Compiler_option_0_expects_an_argument_6044": "Con l'opzione '{0}' del compilatore è previsto un argomento.",
+  "Compiler_option_0_may_not_be_used_with_build_5094": "L'opzione del compilatore '--{0}' potrebbe non essere usata con '--build'.",
+  "Compiler_option_0_may_only_be_used_with_build_5093": "L'opzione del compilatore '--{0}' potrebbe essere usata solo con '--build'.",
   "Compiler_option_0_requires_a_value_of_type_1_5024": "Con l'opzione '{0}' del compilatore è richiesto un valore di tipo {1}.",
   "Compiler_reserves_name_0_when_emitting_private_identifier_downlevel_18027": "Il compilatore riserva il nome '{0}' quando si crea l'identificatore privato per browser meno recenti.",
+  "Compiles_the_TypeScript_project_located_at_the_specified_path_6927": "Compila il progetto TypeScript presente nel percorso specificato",
+  "Compiles_the_current_project_tsconfig_json_in_the_working_directory_6923": "Compila il progetto corrente (tsconfig.json nella directory di lavoro).",
+  "Compiles_the_current_project_with_additional_settings_6929": "Compila il progetto corrente con impostazioni aggiuntive",
+  "Completeness_6257": "Completezza",
   "Composite_projects_may_not_disable_declaration_emit_6304": "I progetti compositi non possono disabilitare la creazione di dichiarazioni.",
   "Composite_projects_may_not_disable_incremental_compilation_6379": "I progetti compositi non possono disabilitare la compilazione incrementale.",
+  "Computed_from_the_list_of_input_files_6911": "Calcolato dall'elenco dei file di input",
   "Computed_property_names_are_not_allowed_in_enums_1164": "I nomi di proprietà calcolati non sono consentiti nelle enumerazioni.",
   "Computed_values_are_not_permitted_in_an_enum_with_string_valued_members_2553": "In un'enumerazione con membri con valore stringa non sono consentiti valori calcolati.",
   "Concatenate_and_emit_output_to_single_file_6001": "Concatena e crea l'output in un singolo file.",
   "Conflicting_definitions_for_0_found_at_1_and_2_Consider_installing_a_specific_version_of_this_librar_4090": "In '{1}' e '{2}' sono state trovate definizioni in conflitto per '{0}'. Per risolvere il conflitto, provare a installare una versione specifica di questa libreria.",
   "Conflicts_are_in_this_file_6201": "I conflitti si trovano in questo file.",
+  "Consider_adding_a_declare_modifier_to_this_class_6506": "Provare ad aggiungere un modificatore \"declare\" a questa classe.",
   "Construct_signature_return_types_0_and_1_are_incompatible_2203": "I tipi restituiti delle firme del costrutto '{0}' e '{1}' sono incompatibili.",
   "Construct_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type_7013": "La firma del costrutto, in cui manca l'annotazione di tipo restituito, contiene implicitamente un tipo restituito 'any'.",
   "Construct_signatures_with_no_arguments_have_incompatible_return_types_0_and_1_2205": "Le firme di costrutto senza argomenti contengono i tipi restituiti incompatibili '{0}' e '{1}'.",
@@ -413,16 +455,24 @@
   "Convert_to_type_only_export_1364": "Convertire nell'esportazione solo di tipi",
   "Convert_to_type_only_import_1373": "Convertire nell'importazione solo di tipi",
   "Corrupted_locale_file_0_6051": "Il file delle impostazioni locali {0} è danneggiato.",
+  "Could_not_convert_to_anonymous_function_95153": "Non è stato possibile convertire nella funzione anonima",
+  "Could_not_convert_to_arrow_function_95151": "Non è stato possibile convertire nella funzione arrow",
+  "Could_not_convert_to_named_function_95152": "Non è stato possibile convertire nella funzione denominata",
+  "Could_not_determine_function_return_type_95150": "Non è stato possibile determinare il tipo restituito dalla funzione",
   "Could_not_find_a_containing_arrow_function_95127": "Non è stato possibile trovare una funzione arrow contenitore",
   "Could_not_find_a_declaration_file_for_module_0_1_implicitly_has_an_any_type_7016": "Non è stato trovato alcun file di dichiarazione per il modulo '{0}'. A '{1}' è assegnato implicitamente un tipo 'any'.",
   "Could_not_find_convertible_access_expression_95140": "Non è stato possibile trovare l'espressione di accesso convertibile",
   "Could_not_find_export_statement_95129": "Non è stato possibile trovare l'istruzione di esportazione",
   "Could_not_find_import_clause_95131": "Non è stato possibile trovare la clausola di importazione",
   "Could_not_find_matching_access_expressions_95141": "Non è stato possibile trovare espressioni di accesso corrispondenti",
+  "Could_not_find_name_0_Did_you_mean_1_2570": "Non è stato possibile trovare il nome '{0}'. Si intendeva '{1}'?",
   "Could_not_find_namespace_import_or_named_imports_95132": "Non è stato possibile trovare l'importazione spazi dei nomi o importazioni denominate",
   "Could_not_find_property_for_which_to_generate_accessor_95135": "Non è stato possibile trovare la proprietà per cui generare la funzione di accesso",
   "Could_not_resolve_the_path_0_with_the_extensions_Colon_1_6231": "Non è stato possibile risolvere il percorso '{0}' con le estensioni: {1}.",
   "Could_not_write_file_0_Colon_1_5033": "Non è stato possibile scrivere il file '{0}': {1}.",
+  "Create_source_map_files_for_emitted_JavaScript_files_6694": "Crea file di mapping di origine per i file JavaScript creati.",
+  "Create_sourcemaps_for_d_ts_files_6614": "Crea mapping di origine per i file d.ts.",
+  "Creates_a_tsconfig_json_with_the_recommended_settings_in_the_working_directory_6926": "Crea un file tsconfig.jscon le impostazioni consigliate nella directory di lavoro.",
   "DIRECTORY_6038": "DIRECTORY",
   "Declaration_augments_declaration_in_another_file_This_cannot_be_serialized_6232": "La dichiarazione causa un aumento di una dichiarazione in un altro file. Questa operazione non è serializzabile.",
   "Declaration_emit_for_this_file_requires_using_private_name_0_An_explicit_type_annotation_may_unblock_9005": "Per la creazione della dichiarazione per questo file è necessario usare il nome privato '{0}'. Un'annotazione di tipo esplicita può sbloccare la creazione della dichiarazione.",
@@ -430,6 +480,7 @@
   "Declaration_expected_1146": "È prevista la dichiarazione.",
   "Declaration_name_conflicts_with_built_in_global_identifier_0_2397": "Il nome della dichiarazione è in conflitto con l'identificatore globale predefinito '{0}'.",
   "Declaration_or_statement_expected_1128": "È prevista la dichiarazione o l'istruzione.",
+  "Declaration_or_statement_expected_This_follows_a_block_of_statements_so_if_you_intended_to_write_a_d_2809": "Dichiarazione o istruzione prevista. Questo carattere '=' segue un blocco di istruzioni, di conseguenza se si intende scrivere un'assegnazione di destrutturazione, potrebbe essere necessario racchiudere l'intera assegnazione tra parentesi.",
   "Declarations_with_definite_assignment_assertions_must_also_have_type_annotations_1264": "Le dichiarazioni con asserzioni di assegnazione definite devono includere anche annotazioni di tipo.",
   "Declarations_with_initializers_cannot_also_have_definite_assignment_assertions_1263": "Le dichiarazioni con inizializzatori non possono includere anche asserzioni di assegnazione definite.",
   "Declare_a_private_field_named_0_90053": "Dichiarare un campo privato denominato '{0}'.",
@@ -441,7 +492,11 @@
   "Declare_static_property_0_90027": "Dichiarare la proprietà statica '{0}'",
   "Decorators_are_not_valid_here_1206": "In questo punto le espressioni Decorator non sono valide.",
   "Decorators_cannot_be_applied_to_multiple_get_Slashset_accessors_of_the_same_name_1207": "Non è possibile applicare le espressioni Decorator a più funzioni di accesso get/set con lo stesso nome.",
+  "Decorators_may_not_be_applied_to_this_parameters_1433": "Gli elementi Decorator potrebbero non essere applicati ai parametri 'this'.",
+  "Decorators_must_precede_the_name_and_all_keywords_of_property_declarations_1436": "Gli elementi Decorator devono precedere il nome e tutte le parole chiave delle dichiarazioni di proprietà.",
   "Default_export_of_the_module_has_or_is_using_private_name_0_4082": "L'esportazione predefinita del modulo contiene o usa il nome privato '{0}'.",
+  "Default_library_1424": "Libreria predefinita",
+  "Default_library_for_target_0_1425": "Libreria predefinita per la destinazione '{0}'",
   "Definitions_of_the_following_identifiers_conflict_with_those_in_another_file_Colon_0_6200": "Le definizioni degli identificatori seguenti sono in conflitto con quelle di un altro file: {0}",
   "Delete_all_unused_declarations_95024": "Eliminare tutte le dichiarazioni non usate",
   "Delete_all_unused_imports_95147": "Eliminare tutte le direttive import non usate",
@@ -449,6 +504,7 @@
   "Deprecated_Use_jsxFactory_instead_Specify_the_object_invoked_for_createElement_when_targeting_react__6084": "[Deprecata] In alternativa, usare '--jsxFactory'. Specifica l'oggetto richiamato per createElement quando la destinazione è la creazione JSX 'react'",
   "Deprecated_Use_outFile_instead_Concatenate_and_emit_output_to_single_file_6170": "[Deprecata] In alternativa, usare '--outFile'. Concatena e crea l'output in un singolo file",
   "Deprecated_Use_skipLibCheck_instead_Skip_type_checking_of_default_library_declaration_files_6160": "[Deprecata] In alternativa, usare '--skipLibCheck'. Ignora il controllo del tipo dei file di dichiarazione delle librerie predefinite.",
+  "Deprecated_setting_Use_outFile_instead_6677": "Impostazione deprecata. In alternativa, usare `outFile`.",
   "Did_you_forget_to_use_await_2773": "Si è omesso di usare 'await'?",
   "Did_you_mean_0_1369": "Si intendeva '{0}'?",
   "Did_you_mean_for_0_to_be_constrained_to_type_new_args_Colon_any_1_2735": "Si intendeva che '{0}' fosse vincolato al tipo 'new (...args: any[]) => {1}'?",
@@ -459,12 +515,30 @@
   "Did_you_mean_to_use_new_with_this_expression_6213": "Si intende usare 'new' con questa espressione?",
   "Digit_expected_1124": "È prevista la cifra.",
   "Directory_0_does_not_exist_skipping_all_lookups_in_it_6148": "La directory '{0}' non esiste. Tutte le ricerche che la interessano verranno ignorate.",
+  "Disable_adding_use_strict_directives_in_emitted_JavaScript_files_6669": "Disabilita l'aggiunta di direttive `use strict` nei file JavaScript generati.",
   "Disable_checking_for_this_file_90018": "Disabilitare la verifica per questo file",
+  "Disable_emitting_comments_6688": "Disabilita la creazione di commenti.",
+  "Disable_emitting_declarations_that_have_internal_in_their_JSDoc_comments_6701": "Disabilita la creazione di dichiarazioni che contengono `@internal` nei commenti JSDoc.",
+  "Disable_emitting_file_from_a_compilation_6660": "Disabilita la creazione di file da una compilazione.",
+  "Disable_emitting_files_if_any_type_checking_errors_are_reported_6662": "Disabilita la creazione di file se vengono restituiti errori di controllo del tipo.",
+  "Disable_erasing_const_enum_declarations_in_generated_code_6682": "Disabilita la cancellazione delle dichiarazioni `const enum` nel codice generato.",
+  "Disable_error_reporting_for_unreachable_code_6603": "Disabilita la segnalazione errori per il codice non raggiungibile.",
+  "Disable_error_reporting_for_unused_labels_6604": "Disabilita la segnalazione errori per le etichette non usate.",
+  "Disable_generating_custom_helper_functions_like_extends_in_compiled_output_6661": "Disabilita la generazione di funzioni helper personalizzate come `__extends` nell'output compilato.",
+  "Disable_including_any_library_files_including_the_default_lib_d_ts_6670": "Disabilita l'inclusione di tutti i file di libreria, incluso il file lib.d.ts predefinito.",
   "Disable_loading_referenced_projects_6235": "Disabilitare il caricamento dei progetti cui viene fatto riferimento.",
+  "Disable_preferring_source_files_instead_of_declaration_files_when_referencing_composite_projects_6620": "Disabilita la preferenza per i file di origine invece dei file di dichiarazione quando si fa riferimento a progetti compositi",
+  "Disable_reporting_of_excess_property_errors_during_the_creation_of_object_literals_6702": "Disabilita la segnalazione errori di proprietà in eccesso durante la creazione di valori letterali dell'oggetto.",
+  "Disable_resolving_symlinks_to_their_realpath_This_correlates_to_the_same_flag_in_node_6683": "Disabilita la risoluzione dei collegamenti simbolici nei relativi realpath. È correlato allo stesso flag presente nel nodo.",
   "Disable_size_limitations_on_JavaScript_projects_6162": "Disabilita le dimensioni relative alle dimensioni per i progetti JavaScript.",
   "Disable_solution_searching_for_this_project_6224": "Disabilitare la ricerca della soluzione per questo progetto.",
-  "Disable_strict_checking_of_generic_signatures_in_function_types_6185": "Disabilitare il controllo tassativo delle firme generiche nei tipi funzione.",
+  "Disable_strict_checking_of_generic_signatures_in_function_types_6673": "Disabilitare il controllo tassativo delle firme generiche nei tipi funzione.",
+  "Disable_the_type_acquisition_for_JavaScript_projects_6625": "Disabilita l'acquisizione del tipo per i progetti JavaScript",
+  "Disable_truncating_types_in_error_messages_6663": "Disabilita il troncamento dei tipi nei messaggi di errore.",
   "Disable_use_of_source_files_instead_of_declaration_files_from_referenced_projects_6221": "Disabilitare l'uso di file di origine invece dei file di dichiarazione dai progetti a cui si fa riferimento.",
+  "Disable_wiping_the_console_in_watch_mode_6684": "Disabilita la cancellazione della console in modalità espressione di controllo",
+  "Disables_inference_for_type_acquisition_by_looking_at_filenames_in_a_project_6616": "Disabilita l'inferenza per l'acquisizione del tipo esaminando i nomi di file in un progetto.",
+  "Disallow_import_s_require_s_or_reference_s_from_expanding_the_number_of_files_TypeScript_should_add__6672": "Non consente a direttive `import`, `require` o `<reference>` di espandere il numero di file che TypeScript deve aggiungere a un progetto.",
   "Disallow_inconsistently_cased_references_to_the_same_file_6078": "Non consente riferimenti allo stesso file in cui le maiuscole/minuscole vengono usate in modo incoerente.",
   "Do_not_add_triple_slash_references_or_imported_modules_to_the_list_of_compiled_files_6159": "Non aggiunge riferimenti con tripla barra (////) o moduli importati all'elenco di file compilati.",
   "Do_not_emit_comments_to_output_6009": "Non crea commenti nell'output.",
@@ -483,31 +557,48 @@
   "Duplicate_identifier_0_2300": "Identificatore '{0}' duplicato.",
   "Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module_2441": "Identificatore '{0}' duplicato. Il compilatore riserva il nome '{1}' nell'ambito di primo livello di un modulo.",
   "Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module_containing_async_func_2529": "L'identificatore '{0}' è duplicato. Il compilatore riserva il nome '{1}' nell'ambito di primo livello di un modulo che contiene funzioni asincrone.",
+  "Duplicate_identifier_0_Compiler_reserves_name_1_when_emitting_super_references_in_static_initializer_2818": "L'identificatore '{0}' è duplicato. Il compilatore riserva il nome '{1}' durante la creazione dei riferimenti 'super' negli inizializzatori statici.",
   "Duplicate_identifier_0_Compiler_uses_declaration_1_to_support_async_functions_2520": "Identificatore '{0}' duplicato. Il compilatore usa la dichiarazione '{1}' per supportare le funzioni asincrone.",
+  "Duplicate_identifier_0_Static_and_instance_elements_cannot_share_the_same_private_name_2804": "L'identificatore '{0}' è duplicato. Gli elementi statici e di istanza non possono condividere lo stesso nome privato.",
   "Duplicate_identifier_arguments_Compiler_uses_arguments_to_initialize_rest_parameters_2396": "Identificatore 'arguments' duplicato. Il compilatore usa 'arguments' per inizializzare i parametri rest.",
   "Duplicate_identifier_newTarget_Compiler_uses_variable_declaration_newTarget_to_capture_new_target_me_2543": "Identificatore '_newTarget' duplicato. Il compilatore usa la dichiarazione di variabile '_newTarget' per acquisire il riferimento alla metaproprietà 'new.target'.",
   "Duplicate_identifier_super_Compiler_uses_super_to_capture_base_class_reference_2401": "Identificatore '_super' duplicato. Il compilatore usa '_super' per acquisire il riferimento della classe di base.",
   "Duplicate_identifier_this_Compiler_uses_variable_declaration_this_to_capture_this_reference_2399": "Identificatore '_this' duplicato. Il compilatore usa la dichiarazione di variabile '_this' per acquisire il riferimento 'this'.",
+  "Duplicate_index_signature_for_type_0_2374": "Firma dell'indice duplicata per il tipo '{0}'.",
   "Duplicate_label_0_1114": "Etichetta '{0}' duplicata.",
-  "Duplicate_number_index_signature_2375": "La firma dell'indice di tipo number è duplicata.",
   "Duplicate_property_0_2718": "La proprietà '{0}' è duplicata.",
-  "Duplicate_string_index_signature_2374": "La firma dell'indice di tipo string è duplicata.",
   "Dynamic_import_cannot_have_type_arguments_1326": "Nell'importazione dinamica non possono essere presenti argomenti tipo.",
   "Dynamic_import_must_have_one_specifier_as_an_argument_1324": "Come argomento dell'importazione dinamica si può indicare un solo identificatore.",
   "Dynamic_import_s_specifier_must_be_of_type_string_but_here_has_type_0_7036": "L'identificatore dell'importazione dinamica deve essere di tipo 'string', ma il tipo specificato qui è '{0}'.",
   "Dynamic_imports_are_only_supported_when_the_module_flag_is_set_to_es2020_esnext_commonjs_amd_system__1323": "Le importazioni dinamiche sono supportate solo quando il flag '--module' è impostato su 'es2020', 'esnext', 'commonjs', 'amd', 'system' o 'umd'.",
   "Each_member_of_the_union_type_0_has_construct_signatures_but_none_of_those_signatures_are_compatible_2762": "Ogni membro del tipo di unione '{0}' contiene firme di costrutto, ma nessuna di tali firme è compatibile con le altre.",
   "Each_member_of_the_union_type_0_has_signatures_but_none_of_those_signatures_are_compatible_with_each_2758": "Ogni membro del tipo di unione '{0}' contiene firme, ma nessuna di tali firme è compatibile con le altre.",
-  "Element_at_index_0_is_variadic_in_one_type_but_not_in_the_other_2622": "L'elemento alla posizione di indice {0} è variadic in un tipo ma non nell'altro.",
+  "Editor_Support_6249": "Supporto Editor",
   "Element_implicitly_has_an_any_type_because_expression_of_type_0_can_t_be_used_to_index_type_1_7053": "L'elemento contiene implicitamente un tipo 'any' perché non è possibile usare l'espressione di tipo '{0}' per indicizzare il tipo '{1}'.",
   "Element_implicitly_has_an_any_type_because_index_expression_is_not_of_type_number_7015": "L'elemento contiene implicitamente un tipo 'any' perché l'espressione di indice non è di tipo 'number'.",
   "Element_implicitly_has_an_any_type_because_type_0_has_no_index_signature_7017": "L'elemento contiene implicitamente un tipo 'any' perché al tipo '{0}' non è assegnata alcuna firma dell'indice.",
   "Element_implicitly_has_an_any_type_because_type_0_has_no_index_signature_Did_you_mean_to_call_1_7052": "L'elemento contiene implicitamente un tipo 'any' perché al tipo '{0}' non è assegnata alcuna firma dell'indice. Si intendeva chiamare '{1}'?",
-  "Emit_a_UTF_8_Byte_Order_Mark_BOM_in_the_beginning_of_output_files_6164": "Crea un BOM (Byte Order Mark) UTF-8 all'inizio dei file di output.",
+  "Emit_6246": "Crea",
+  "Emit_ECMAScript_standard_compliant_class_fields_6712": "Crea campi di classe conformi allo standard ECMAScript.",
+  "Emit_a_UTF_8_Byte_Order_Mark_BOM_in_the_beginning_of_output_files_6622": "Crea un BOM (Byte Order Mark) UTF-8 all'inizio dei file di output.",
   "Emit_a_single_file_with_source_maps_instead_of_having_a_separate_file_6151": "Crea un unico file con i mapping di origine invece di file separati.",
+  "Emit_a_v8_CPU_profile_of_the_compiler_run_for_debugging_6638": "Crea un profilo CPU v8 dell'esecuzione del compilatore per il debug.",
+  "Emit_additional_JavaScript_to_ease_support_for_importing_CommonJS_modules_This_enables_allowSyntheti_6626": "Crea codice JavaScript aggiuntivo per semplificare il supporto per l'importazione di moduli CommonJS. Abilita `allowSyntheticDefaultImports` per la compatibilità dei tipi.",
   "Emit_class_fields_with_Define_instead_of_Set_6222": "Creare i campi della classe con Define invece di Set.",
+  "Emit_design_type_metadata_for_decorated_declarations_in_source_files_6624": "Crea metadati di tipo progettazione per le dichiarazioni decorate nei file di origine.",
+  "Emit_more_compliant_but_verbose_and_less_performant_JavaScript_for_iteration_6621": "Crea codice JavaScript più conforme, ma dettagliato e meno efficiente per l'iterazione.",
   "Emit_the_source_alongside_the_sourcemaps_within_a_single_file_requires_inlineSourceMap_or_sourceMap__6152": "Crea l'origine unitamente ai mapping di origine all'interno di un unico file. Richiede l'impostazione di '--inlineSourceMap' o '--sourceMap'.",
   "Enable_all_strict_type_checking_options_6180": "Abilita tutte le opzioni per i controlli del tipo strict.",
+  "Enable_color_and_formatting_in_output_to_make_compiler_errors_easier_to_read_6685": "Abilita il colore e la formattazione nell'output per agevolare la lettura degli errori del compilatore",
+  "Enable_constraints_that_allow_a_TypeScript_project_to_be_used_with_project_references_6611": "Abilita i vincoli che consentono l'uso di un progetto TypeScript con riferimenti al progetto.",
+  "Enable_error_reporting_for_codepaths_that_do_not_explicitly_return_in_a_function_6667": "Abilita la segnalazione errori per i percorsi di codice che non vengono restituiti in modo esplicito in una funzione.",
+  "Enable_error_reporting_for_expressions_and_declarations_with_an_implied_any_type_6665": "Abilita la segnalazione errori per espressioni e dichiarazioni con un tipo implicito `any`.",
+  "Enable_error_reporting_for_fallthrough_cases_in_switch_statements_6664": "Abilita la segnalazione errori per i casi di fallthrough nelle istruzioni switch.",
+  "Enable_error_reporting_in_type_checked_JavaScript_files_6609": "Abilita la segnalazione errori nei file JavaScript con controllo del tipo.",
+  "Enable_error_reporting_when_a_local_variables_aren_t_read_6675": "Abilita la segnalazione errori quando le variabili locali non vengono lette.",
+  "Enable_error_reporting_when_this_is_given_the_type_any_6668": "Abilita la segnalazione errori quando a `this` viene assegnato il tipo `any`.",
+  "Enable_experimental_support_for_TC39_stage_2_draft_decorators_6630": "Abilita il supporto sperimentale per gli elementi Decorator della bozza fase 2 di TC39.",
+  "Enable_importing_json_files_6689": "Abilita l'importazione di file .json",
   "Enable_incremental_compilation_6378": "Abilita la compilazione incrementale",
   "Enable_project_compilation_6302": "Abilitare la compilazione dei progetti",
   "Enable_strict_bind_call_and_apply_methods_on_functions_6214": "Abilitare i metodi strict 'bind', 'call' e 'apply' nelle funzioni.",
@@ -517,11 +608,20 @@
   "Enable_the_experimentalDecorators_option_in_your_configuration_file_95074": "Abilitare l'opzione 'experimentalDecorators' nel file di configurazione",
   "Enable_the_jsx_flag_in_your_configuration_file_95088": "Abilitare il flag '--jsx' nel file di configurazione",
   "Enable_tracing_of_the_name_resolution_process_6085": "Abilita la traccia del processo di risoluzione dei nomi.",
-  "Enable_verbose_logging_6366": "Abilitare la registrazione dettagliata",
+  "Enable_verbose_logging_6713": "Abilitare la registrazione dettagliata",
   "Enables_emit_interoperability_between_CommonJS_and_ES_Modules_via_creation_of_namespace_objects_for__7037": "Abilita l'interoperabilità di creazione tra moduli ES e CommonJS tramite la creazione di oggetti spazio dei nomi per tutte le importazioni. Implica 'allowSyntheticDefaultImports'.",
   "Enables_experimental_support_for_ES7_async_functions_6068": "Abilita il supporto sperimentale per le funzioni asincrone di ES7.",
   "Enables_experimental_support_for_ES7_decorators_6065": "Abilita il supporto sperimentale per le espressioni Decorator di ES7.",
   "Enables_experimental_support_for_emitting_type_metadata_for_decorators_6066": "Abilita il supporto sperimentale per la creazione dei metadati dei tipi per le espressioni Decorator.",
+  "Enforces_using_indexed_accessors_for_keys_declared_using_an_indexed_type_6671": "Impone l'uso di funzioni di accesso indicizzate per le chiavi dichiarate con un tipo indicizzato",
+  "Ensure_overriding_members_in_derived_classes_are_marked_with_an_override_modifier_6666": "Si assicura che i membri di override nelle classi derivate siano contrassegnati con un modificatore override.",
+  "Ensure_that_casing_is_correct_in_imports_6637": "Si assicura che l'uso di maiuscole e minuscole sia corretto nelle direttive import.",
+  "Ensure_that_each_file_can_be_safely_transpiled_without_relying_on_other_imports_6645": "Si assicura che sia possibile eseguire il transpile di ogni file in modo sicuro senza basarsi su altre direttive import.",
+  "Ensure_use_strict_is_always_emitted_6605": "Si assicura che la direttiva 'use strict' venga sempre creata.",
+  "Entry_point_for_implicit_type_library_0_1420": "Punto di ingresso per la libreria dei tipi impliciti '{0}'",
+  "Entry_point_for_implicit_type_library_0_with_packageId_1_1421": "Punto di ingresso per la libreria dei tipi impliciti '{0}' con packageId '{1}'",
+  "Entry_point_of_type_library_0_specified_in_compilerOptions_1417": "Punto di ingresso della libreria dei tipi '{0}' specificata in compilerOptions",
+  "Entry_point_of_type_library_0_specified_in_compilerOptions_with_packageId_1_1418": "Punto di ingresso della libreria dei tipi '{0}' specificata in compilerOptions con packageId '{1}'",
   "Enum_0_used_before_its_declaration_2450": "L'enumerazione '{0}' è stata usata prima di essere stata dichiarata.",
   "Enum_declarations_can_only_merge_with_namespace_or_other_enum_declarations_2567": "È possibile unire dichiarazioni di enumerazione solo con lo spazio dei nomi o altre dichiarazioni di enumerazione.",
   "Enum_declarations_must_all_be_const_or_non_const_2473": "Le dichiarazioni di enumerazione devono essere tutte const o tutte non const.",
@@ -535,15 +635,13 @@
   "Expected_0_1_type_arguments_provide_these_with_an_extends_tag_8027": "Sono previsti argomento tipo {0}-{1}. Per specificarli, usare un tag '@extends'.",
   "Expected_0_arguments_but_got_1_2554": "Sono previsti {0} argomenti, ma ne sono stati ottenuti {1}.",
   "Expected_0_arguments_but_got_1_Did_you_forget_to_include_void_in_your_type_argument_to_Promise_2794": "Sono previsti {0} argomenti, ma ne sono stati ottenuti {1}. Si è dimenticato di includere 'void' nell'argomento di tipo per 'Promise'?",
-  "Expected_0_arguments_but_got_1_or_more_2556": "Sono previsti {0} argomenti, ma ne sono stati ottenuti più di {1}.",
   "Expected_0_type_arguments_but_got_1_2558": "Sono previsti {0} argomenti tipo, ma ne sono stati ottenuti {1}.",
   "Expected_0_type_arguments_provide_these_with_an_extends_tag_8026": "Sono previsti {0} argomenti tipo. Per specificarli, usare un tag '@extends'.",
   "Expected_at_least_0_arguments_but_got_1_2555": "Sono previsti almeno {0} argomenti, ma ne sono stati ottenuti {1}.",
-  "Expected_at_least_0_arguments_but_got_1_or_more_2557": "Sono previsti almeno {0} argomenti, ma ne sono stati ottenuti {1} o più.",
   "Expected_corresponding_JSX_closing_tag_for_0_17002": "È previsto il tag di chiusura JSX corrispondente per '{0}'.",
   "Expected_corresponding_closing_tag_for_JSX_fragment_17015": "È previsto il tag di chiusura corrispondente per il frammento JSX.",
+  "Expected_for_property_initializer_1442": "È previsto '=' per l'inizializzatore di proprietà.",
   "Expected_type_of_0_field_in_package_json_to_be_1_got_2_6105": "Il tipo previsto del campo '{0}' in 'package.json' è '{1}', ma è stato ottenuto '{2}'.",
-  "Experimental_Options_6177": "Opzioni sperimentali",
   "Experimental_support_for_decorators_is_a_feature_that_is_subject_to_change_in_a_future_release_Set_t_1219": "Il supporto sperimentale per gli elementi Decorator è una funzionalità soggetta a modifica nelle prossime versioni. Per rimuovere questo avviso, impostare l'opzione 'experimentalDecorators' nel file 'tsconfig' o 'jsconfig'.",
   "Explicitly_specified_module_resolution_kind_Colon_0_6087": "Il tipo di risoluzione del modulo '{0}' è stato specificato in modo esplicito.",
   "Exponentiation_cannot_be_performed_on_bigint_values_unless_the_target_option_is_set_to_es2016_or_lat_2791": "Non è possibile usare l'elevamento a potenza su valori 'bigint' a meno che l'opzione 'target' non sia impostata su 'es2016' o versioni successive.",
@@ -554,12 +652,14 @@
   "Exported_external_package_typings_file_0_is_not_a_module_Please_contact_the_package_author_to_update_2656": "Il file delle definizioni di tipi di pacchetto esterno esportate '{0}' non è un modulo. Contattare l'autore del pacchetto per aggiornare la definizione del pacchetto.",
   "Exported_external_package_typings_file_cannot_contain_tripleslash_references_Please_contact_the_pack_2654": "Il file delle definizioni di tipi di pacchetto esterno esportate non può contenere riferimenti con ///. Contattare l'autore del pacchetto per aggiornare la definizione del pacchetto.",
   "Exported_type_alias_0_has_or_is_using_private_name_1_4081": "L'alias di tipo esportato '{0}' contiene o usa il nome privato '{1}'.",
+  "Exported_type_alias_0_has_or_is_using_private_name_1_from_module_2_4084": "L'alias di tipo esportato '{0}' contiene o usa il nome privato '{1}' del modulo {2}.",
   "Exported_variable_0_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4023": "La variabile esportata '{0}' contiene o usa il nome '{1}' del modulo esterno {2} ma non può essere rinominata.",
   "Exported_variable_0_has_or_is_using_name_1_from_private_module_2_4024": "La variabile esportata '{0}' contiene o usa il nome '{1}' del modulo privato '{2}'.",
   "Exported_variable_0_has_or_is_using_private_name_1_4025": "La variabile esportata '{0}' contiene o usa il nome privato '{1}'.",
   "Exports_and_export_assignments_are_not_permitted_in_module_augmentations_2666": "Le esportazioni e le assegnazioni di esportazioni non sono consentite negli aumenti del modulo.",
   "Expression_expected_1109": "È prevista l'espressione.",
   "Expression_or_comma_expected_1137": "È prevista l'espressione o la virgola.",
+  "Expression_produces_a_tuple_type_that_is_too_large_to_represent_2800": "L'espressione produce un tipo di tupla troppo grande da rappresentare.",
   "Expression_produces_a_union_type_that_is_too_complex_to_represent_2590": "L'espressione produce un tipo di unione troppo complesso da rappresentare.",
   "Expression_resolves_to_super_that_compiler_uses_to_capture_base_class_reference_2402": "L'espressione viene risolta in '_super', che è usato dal compilatore per acquisire il riferimento della classe di base.",
   "Expression_resolves_to_variable_declaration_0_that_compiler_uses_to_support_async_functions_2521": "L'espressione viene risolta nella dichiarazione di variabile '{0}', che è usata dal compilatore per supportare le funzioni asincrone.",
@@ -579,7 +679,9 @@
   "Failed_to_parse_file_0_Colon_1_5014": "Non è stato possibile analizzare il file '{0}': {1}.",
   "Fallthrough_case_in_switch_7029": "Caso di fallthrough in switch.",
   "File_0_does_not_exist_6096": "Il file '{0}' non esiste.",
+  "File_0_does_not_exist_according_to_earlier_cached_lookups_6240": "Il file '{0}' non esiste in base alle ricerche precedenti memorizzate nella cache.",
   "File_0_exist_use_it_as_a_name_resolution_result_6097": "Il file '{0}' esiste. Usarlo come risultato per la risoluzione dei nomi.",
+  "File_0_exists_according_to_earlier_cached_lookups_6239": "Il file '{0}' esiste già in base alle ricerche precedenti memorizzate nella cache.",
   "File_0_has_an_unsupported_extension_The_only_supported_extensions_are_1_6054": "L'estensione del file '{0}' non è supportata. Le uniche estensioni supportate sono {1}.",
   "File_0_has_an_unsupported_extension_so_skipping_it_6081": "L'estensione del file '{0}' non è supportata. Il file verrà ignorato.",
   "File_0_is_a_JavaScript_file_Did_you_mean_to_enable_the_allowJs_option_6504": "Il file '{0}' è un file JavaScript. Si intendeva abilitare l'opzione 'allowJs'?",
@@ -587,16 +689,32 @@
   "File_0_is_not_listed_within_the_file_list_of_project_1_Projects_must_list_all_files_or_use_an_includ_6307": "Il file '{0}' non è incluso nell'elenco file del progetto '{1}'. I progetti devono elencare tutti i file o usare un criterio 'include'.",
   "File_0_is_not_under_rootDir_1_rootDir_is_expected_to_contain_all_source_files_6059": "Il file '{0}' non si trova in 'rootDir' '{1}'. 'rootDir' deve contenere tutti i file di origine.",
   "File_0_not_found_6053": "Il file '{0}' non è stato trovato.",
+  "File_Management_6245": "Gestione dei file",
   "File_change_detected_Starting_incremental_compilation_6032": "È stata rilevata una modifica ai file. Verrà avviata la compilazione incrementale...",
   "File_is_a_CommonJS_module_it_may_be_converted_to_an_ES6_module_80001": "Il file è un modulo CommonJS; può essere convertito in un modulo ES6.",
+  "File_is_default_library_for_target_specified_here_1426": "Il file è la libreria predefinita per la destinazione specificata in questo punto.",
+  "File_is_entry_point_of_type_library_specified_here_1419": "Il file è il punto di ingresso della libreria dei tipi specificata in questo punto.",
+  "File_is_included_via_import_here_1399": "Il file viene incluso tramite importazione in questo punto.",
+  "File_is_included_via_library_reference_here_1406": "Il file viene incluso tramite il riferimento alla libreria in questo punto.",
+  "File_is_included_via_reference_here_1401": "Il file viene incluso tramite riferimento in questo punto.",
+  "File_is_included_via_type_library_reference_here_1404": "Il file viene incluso tramite il riferimento alla libreria dei tipi in questo punto.",
+  "File_is_library_specified_here_1423": "Il file è la libreria specificata in questo punto.",
+  "File_is_matched_by_files_list_specified_here_1410": "Per la corrispondenza del file viene usato l'elenco 'files' specificato in questo punto.",
+  "File_is_matched_by_include_pattern_specified_here_1408": "Per la corrispondenza del file viene usato il criterio di inclusione specificato in questo punto.",
+  "File_is_output_from_referenced_project_specified_here_1413": "Il file corrisponde all'output del progetto di riferimento specificato in questo punto.",
+  "File_is_output_of_project_reference_source_0_1428": "Il file corrisponde all'origine '{0}' del riferimento al progetto",
+  "File_is_source_from_referenced_project_specified_here_1416": "Il file è l'origine del progetto di riferimento specificato in questo punto.",
   "File_name_0_differs_from_already_included_file_name_1_only_in_casing_1149": "Il nome file '{0}' differisce da quello già incluso '{1}' solo per l'uso di maiuscole/minuscole.",
   "File_name_0_has_a_1_extension_stripping_it_6132": "L'estensione del nome file '{0}' è '{1}' e verrà rimossa.",
+  "File_redirects_to_file_0_1429": "Il file viene reindirizzato al file '{0}'",
   "File_specification_cannot_contain_a_parent_directory_that_appears_after_a_recursive_directory_wildca_5065": "La specifica del file non può contenere una directory padre ('..') inserita dopo un carattere jolly ('**') di directory ricorsiva: '{0}'.",
   "File_specification_cannot_end_in_a_recursive_directory_wildcard_Asterisk_Asterisk_Colon_0_5010": "La specifica del file non può terminare con caratteri jolly ('**') di directory ricorsiva: '{0}'.",
+  "Filters_results_from_the_include_option_6627": "Filtra i risultati dall'opzione `include`.",
   "Fix_all_detected_spelling_errors_95026": "Correggere tutti gli errori di ortografia rilevati",
   "Fix_all_expressions_possibly_missing_await_95085": "Correggere tutte le espressioni in cui potrebbe mancare 'await'",
   "Fix_all_implicit_this_errors_95107": "Correggere tutti gli errori relativi a 'this' implicito",
   "Fix_all_incorrect_return_type_of_an_async_functions_90037": "Correggere tutti i tipi restituiti non corretti di una funzione asincrona",
+  "For_await_loops_cannot_be_used_inside_a_class_static_block_18038": "Non è possibile usare i cicli 'for await' all'interno di un blocco statico di classe.",
   "Found_0_errors_6217": "Sono stati trovati {0} errori.",
   "Found_0_errors_Watching_for_file_changes_6194": "Sono stati trovati {0} errori. Verranno individuate le modifiche ai file.",
   "Found_1_error_6216": "È stato trovato 1 errore.",
@@ -610,11 +728,14 @@
   "Function_implementation_name_must_be_0_2389": "Il nome dell'implementazione di funzione deve essere '{0}'.",
   "Function_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_ref_7024": "La funzione contiene implicitamente il tipo restituito 'any', perché non contiene un'annotazione di tipo restituito e viene usata come riferimento diretto o indiretto in una delle relative espressioni restituite.",
   "Function_lacks_ending_return_statement_and_return_type_does_not_include_undefined_2366": "Nella funzione manca l'istruzione return finale e il tipo restituito non include 'undefined'.",
+  "Function_not_implemented_95159": "Funzione non implementata.",
   "Function_overload_must_be_static_2387": "L'overload della funzione deve essere statico.",
   "Function_overload_must_not_be_static_2388": "L'overload della funzione non deve essere statico.",
   "Function_type_notation_must_be_parenthesized_when_used_in_a_union_type_1385": "La notazione del tipo di funzione deve essere racchiusa tra parentesi quando viene usata in un tipo di unione.",
   "Function_type_notation_must_be_parenthesized_when_used_in_an_intersection_type_1387": "La notazione del tipo di funzione deve essere racchiusa tra parentesi quando viene usata in un tipo di intersezione.",
   "Function_type_which_lacks_return_type_annotation_implicitly_has_an_0_return_type_7014": "Il tipo di funzione, in cui manca l'annotazione di tipo restituito, contiene implicitamente un tipo restituito '{0}'.",
+  "Function_with_bodies_can_only_merge_with_classes_that_are_ambient_2814": "La funzione con corpi può essere unita solo a classi di tipo ambient.",
+  "Generate_d_ts_files_from_TypeScript_and_JavaScript_files_in_your_project_6612": "Genera file .d.ts da file TypeScript e JavaScript nel progetto.",
   "Generate_get_and_set_accessors_95046": "Generare le funzioni di accesso 'get' e 'set'",
   "Generate_get_and_set_accessors_for_all_overriding_properties_95119": "Generare le funzioni di accesso 'get' e 'set' per tutte le proprietà di sostituzione",
   "Generates_a_CPU_profile_6223": "Genera un profilo CPU.",
@@ -627,13 +748,13 @@
   "Generators_are_only_available_when_targeting_ECMAScript_2015_or_higher_1220": "I generatori sono disponibili solo se destinati a ECMAScript 2015 o versioni successive.",
   "Generic_type_0_requires_1_type_argument_s_2314": "Il tipo generico '{0}' richiede {1} argomento/i di tipo.",
   "Generic_type_0_requires_between_1_and_2_type_arguments_2707": "Il tipo generico '{0}' richiede tra {1} e {2} argomenti tipo.",
-  "Getter_and_setter_accessors_do_not_agree_in_visibility_2379": "Le funzioni di accesso getter e setter non concordano nella visibilità.",
   "Global_module_exports_may_only_appear_at_top_level_1316": "Le esportazioni di moduli globali possono essere usate solo al primo livello.",
   "Global_module_exports_may_only_appear_in_declaration_files_1315": "Le esportazioni di moduli globali possono essere usate solo in file di dichiarazione.",
   "Global_module_exports_may_only_appear_in_module_files_1314": "Le esportazioni di moduli globali possono essere usate solo in file di modulo.",
   "Global_type_0_must_be_a_class_or_interface_type_2316": "Il tipo globale '{0}' deve un tipo di classe o di interfaccia.",
   "Global_type_0_must_have_1_type_parameter_s_2317": "Il tipo globale '{0}' deve contenere {1} parametro/i di tipo.",
   "Have_recompiles_in_incremental_and_watch_assume_that_changes_within_a_file_will_only_affect_files_di_6384": "Impostare le ricompilazioni in '--incremental' e '--watch' in modo che le modifiche all'interno di un file interessino solo i file che dipendono direttamente da esso.",
+  "Have_recompiles_in_projects_that_use_incremental_and_watch_mode_assume_that_changes_within_a_file_wi_6606": "Imposta le ricompilazioni in progetti che usano la modalità `incremental` e `watch` in modo che le modifiche all'interno di un file interessino solo i file che dipendono direttamente da esso.",
   "Hexadecimal_digit_expected_1125": "È prevista la cifra esadecimale.",
   "Identifier_expected_0_is_a_reserved_word_at_the_top_level_of_a_module_1262": "È previsto un identificatore. '{0}' è una parola riservata al livello principale di un modulo.",
   "Identifier_expected_0_is_a_reserved_word_in_strict_mode_1212": "È previsto un identificatore. '{0}' è una parola riservata in modalità strict.",
@@ -642,8 +763,9 @@
   "Identifier_expected_0_is_a_reserved_word_that_cannot_be_used_here_1359": "È previsto un identificatore. '{0}' è una parola riservata che non può essere usata in questo punto.",
   "Identifier_expected_1003": "È previsto l'identificatore.",
   "Identifier_expected_esModule_is_reserved_as_an_exported_marker_when_transforming_ECMAScript_modules_1216": "È previsto un identificatore. '__esModule' è riservato come marcatore esportato durante la trasformazione di moduli ECMAScript.",
-  "If_the_0_package_actually_exposes_this_module_consider_sending_a_pull_request_to_amend_https_Colon_S_7040": "Se il pacchetto '{0}' espone effettivamente questo modulo, provare a inviare una richiesta pull per modificare 'https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/{1}`",
+  "If_the_0_package_actually_exposes_this_module_consider_sending_a_pull_request_to_amend_https_Colon_S_7040": "Se il pacchetto '{0}' espone effettivamente questo modulo, provare a inviare una richiesta pull per modificare 'https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/{1}'",
   "Ignore_this_error_message_90019": "Ignorare questo messaggio di errore",
+  "Ignoring_tsconfig_json_compiles_the_specified_files_with_default_compiler_options_6924": "Il file tsconfig.json verrà ignorato. I file specificati verranno compilati con le opzioni predefinite del compilatore",
   "Implement_all_inherited_abstract_classes_95040": "Implementare tutte le classi astratte ereditate",
   "Implement_all_unimplemented_interfaces_95032": "Implementare tutte le interfacce non implementate",
   "Implement_inherited_abstract_class_90007": "Implementare la classe astratta ereditata",
@@ -660,14 +782,23 @@
   "Import_may_be_converted_to_a_default_import_80003": "L'importazione può essere convertita in un'importazione predefinita.",
   "Import_name_cannot_be_0_2438": "Il nome dell'importazione non può essere '{0}'.",
   "Import_or_export_declaration_in_an_ambient_module_declaration_cannot_reference_module_through_relati_2439": "La dichiarazione di importazione o esportazione in una dichiarazione di modulo di ambiente non può fare riferimento al modulo tramite il nome di modulo relativo.",
+  "Imported_via_0_from_file_1_1393": "Importato tramite {0} dal file '{1}'",
+  "Imported_via_0_from_file_1_to_import_importHelpers_as_specified_in_compilerOptions_1395": "Importato tramite {0} dal file '{1}' per importare 'importHelpers' come specificato in compilerOptions",
+  "Imported_via_0_from_file_1_to_import_jsx_and_jsxs_factory_functions_1397": "Importato tramite {0} dal file '{1}' per importare le funzioni di factory 'jsx' e 'jsxs'",
+  "Imported_via_0_from_file_1_with_packageId_2_1394": "Importato tramite {0} dal file '{1}' con packageId '{2}'",
+  "Imported_via_0_from_file_1_with_packageId_2_to_import_importHelpers_as_specified_in_compilerOptions_1396": "Importato tramite {0} dal file '{1}' con packageId '{2}' per importare 'importHelpers' come specificato in compilerOptions",
+  "Imported_via_0_from_file_1_with_packageId_2_to_import_jsx_and_jsxs_factory_functions_1398": "Importato tramite {0} dal file '{1}' con packageId '{2}' per importare le funzioni di factory 'jsx' e 'jsxs'",
   "Imports_are_not_permitted_in_module_augmentations_Consider_moving_them_to_the_enclosing_external_mod_2667": "Le importazioni non sono consentite negli aumenti di modulo. Provare a spostarle nel modulo esterno di inclusione.",
   "In_ambient_enum_declarations_member_initializer_must_be_constant_expression_1066": "Nelle dichiarazioni di enumerazione dell'ambiente l'inizializzatore di membro deve essere un'espressione costante.",
   "In_an_enum_with_multiple_declarations_only_one_declaration_can_omit_an_initializer_for_its_first_enu_2432": "In un'enumerazione con più dichiarazioni solo una di queste può omettere un inizializzatore per il primo elemento dell'enumerazione.",
+  "Include_a_list_of_files_This_does_not_support_glob_patterns_as_opposed_to_include_6635": "Include un elenco di file. A differenza di `include`, i criteri GLOB non sono supportati.",
   "Include_modules_imported_with_json_extension_6197": "Includere i moduli importati con estensione '.json'",
-  "Include_undefined_in_index_signature_results_6800": "Includere 'undefined' nei risultati della firma dell'indice",
+  "Include_source_code_in_the_sourcemaps_inside_the_emitted_JavaScript_6644": "Include il codice sorgente nei mapping di origine all'interno del codice JavaScript creato.",
+  "Include_sourcemap_files_inside_the_emitted_JavaScript_6643": "Include i file dei mapping di origine all'interno del codice JavaScript creato.",
+  "Include_undefined_in_index_signature_results_6716": "Includere 'undefined' nei risultati della firma dell'indice",
+  "Including_watch_w_will_start_watching_the_current_project_for_the_file_changes_Once_set_you_can_conf_6914": "Se si include --watch, l'opzione -w consentirà di iniziare a controllare il progetto corrente per individuare modifiche ai file. Dopo l'impostazione, è possibile configurare la modalità espressione di controllo con:",
+  "Index_signature_for_type_0_is_missing_in_type_1_2329": "La firma dell'indice per il tipo '{0}' manca nel tipo '{1}'.",
   "Index_signature_in_type_0_only_permits_reading_2542": "La firma dell'indice nel tipo '{0}' consente solo la lettura.",
-  "Index_signature_is_missing_in_type_0_2329": "Nel tipo '{0}' manca la firma dell'indice.",
-  "Index_signatures_are_incompatible_2330": "Le firme dell'indice sono incompatibili.",
   "Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local_2395": "Le singole dichiarazioni della dichiarazione sottoposta a merge '{0}' devono essere tutte esportate o tutte locali.",
   "Infer_all_types_from_usage_95023": "Derivare tutti i tipi dall'utilizzo",
   "Infer_function_return_type_95148": "Dedurre il tipo restituito della funzione",
@@ -676,6 +807,7 @@
   "Infer_type_of_0_from_usage_95011": "Derivare il tipo di '{0}' dall'utilizzo",
   "Initialize_property_0_in_the_constructor_90020": "Inizializzare la proprietà '{0}' nel costruttore",
   "Initialize_static_property_0_90021": "Inizializzare la proprietà statica '{0}'",
+  "Initializer_for_property_0_2811": "Inizializzatore per la proprietà '{0}'",
   "Initializer_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor_2301": "L'inizializzatore della variabile del membro di istanza '{0}' non può fare riferimento all'identificatore '{1}' dichiarato nel costruttore.",
   "Initializer_provides_no_value_for_this_binding_element_and_the_binding_element_has_no_default_value_2525": "L'inizializzatore non fornisce alcun valore per questo elemento di binding e per quest'ultimo non è disponibile un valore predefinito.",
   "Initializers_are_not_allowed_in_ambient_contexts_1039": "Gli inizializzatori non sono consentiti in contesti di ambiente.",
@@ -686,12 +818,16 @@
   "Interface_0_cannot_simultaneously_extend_types_1_and_2_2320": "L'interfaccia '{0}' non può estendere simultaneamente i tipi '{1}' e '{2}'.",
   "Interface_0_incorrectly_extends_interface_1_2430": "L'interfaccia '{0}' estende in modo errato l'interfaccia '{1}'.",
   "Interface_declaration_cannot_have_implements_clause_1176": "La dichiarazione di interfaccia non può avere una clausola 'implements'.",
+  "Interface_must_be_given_a_name_1438": "È necessario assegnare un nome all'interfaccia.",
   "Interface_name_cannot_be_0_2427": "Il nome dell'interfaccia non può essere '{0}'.",
+  "Interop_Constraints_6252": "Vincoli interoperabilità",
+  "Interpret_optional_property_types_as_written_rather_than_adding_undefined_6243": "Interpreta i tipi di proprietà facoltativi scritti, invece di aggiungere 'undefined'.",
   "Invalid_character_1127": "Carattere non valido.",
   "Invalid_module_name_in_augmentation_Module_0_resolves_to_an_untyped_module_at_1_which_cannot_be_augm_2665": "Il nome di modulo nell'aumento non è valido. Il modulo '{0}' viene risolto in un modulo non tipizzato in '{1}', che non può essere aumentato.",
   "Invalid_module_name_in_augmentation_module_0_cannot_be_found_2664": "Il nome di modulo nell'aumento non è valido. Il modulo '{0}' non è stato trovato.",
   "Invalid_reference_directive_syntax_1084": "La sintassi della direttiva 'reference' non è valida.",
   "Invalid_use_of_0_Class_definitions_are_automatically_in_strict_mode_1210": "Uso non valido di '{0}'. Le definizioni di classe sono automaticamente impostate sulla modalità strict.",
+  "Invalid_use_of_0_It_cannot_be_used_inside_a_class_static_block_18039": "Uso non valido di '{0}'. Non può essere usato all'interno di un blocco statico di classe.",
   "Invalid_use_of_0_Modules_are_automatically_in_strict_mode_1215": "Uso non valido di '{0}'. I moduli vengono impostati automaticamente in modalità strict.",
   "Invalid_use_of_0_in_strict_mode_1100": "Uso non valido di '{0}' in modalità strict.",
   "Invalid_value_for_jsxFactory_0_is_not_a_valid_identifier_or_qualified_name_5067": "Il valore non è valido per 'jsxFactory'. '{0}' non è un identificatore o un nome qualificato valido.",
@@ -723,13 +859,18 @@
   "JSX_expressions_may_not_use_the_comma_operator_Did_you_mean_to_write_an_array_18007": "Nelle espressioni JSX non si può usare l'operatore virgola. Si intendeva scrivere una matrice?",
   "JSX_expressions_must_have_one_parent_element_2657": "Le espressioni JSX devono contenere un solo elemento padre.",
   "JSX_fragment_has_no_corresponding_closing_tag_17014": "Per il frammento JSX non esiste alcun tag di chiusura corrispondente.",
+  "JSX_property_access_expressions_cannot_include_JSX_namespace_names_2633": "Le espressioni di accesso alla proprietà JSX non possono includere nomi dello spazio dei nomi JSX",
   "JSX_spread_child_must_be_an_array_type_2609": "L'elemento figlio dell'attributo spread JSX deve essere un tipo di matrice.",
+  "JavaScript_Support_6247": "Supporto JavaScript",
   "Jump_target_cannot_cross_function_boundary_1107": "La destinazione di collegamento non può oltrepassare il limite della funzione.",
   "KIND_6034": "TIPOLOGIA",
   "Keywords_cannot_contain_escape_characters_1260": "Le parole chiave non possono contenere caratteri di escape.",
   "LOCATION_6037": "PERCORSO",
+  "Language_and_Environment_6254": "Linguaggio e ambiente",
   "Language_service_is_disabled_9004": "Il servizio di linguaggio è disabilitato.",
   "Left_side_of_comma_operator_is_unused_and_has_no_side_effects_2695": "Il lato sinistro dell'operatore virgola non è usato e non ha effetti collaterali.",
+  "Library_0_specified_in_compilerOptions_1422": "Libreria '{0}' specificata in compilerOptions",
+  "Library_referenced_via_0_from_file_1_1405": "Libreria a cui viene fatto riferimento tramite '{0}' dal file '{1}'",
   "Line_break_not_permitted_here_1142": "L'interruzione di riga non è consentita in questo punto.",
   "Line_terminator_not_permitted_before_arrow_1200": "Il terminatore di riga non è consentito prima di arrow.",
   "List_of_folders_to_include_type_definitions_from_6161": "Elenco di cartelle da cui includere le definizioni di tipo.",
@@ -739,11 +880,14 @@
   "Loading_module_0_from_node_modules_folder_target_file_type_1_6098": "Verrà eseguito il caricamento del modulo '{0}' dalla cartella 'node_modules'. Tipo di file di destinazione: '{1}'.",
   "Loading_module_as_file_Slash_folder_candidate_module_location_0_target_file_type_1_6095": "Verrà eseguito il caricamento del modulo come file/cartella. Percorso candidato del modulo: '{0}'. Tipo di file di destinazione: '{1}'.",
   "Locale_must_be_of_the_form_language_or_language_territory_For_example_0_or_1_6048": "Le impostazioni locali devono essere nel formato <lingua> o <lingua>-<territorio>, ad esempio, '{0}' o '{1}'.",
+  "Log_paths_used_during_the_moduleResolution_process_6706": "Registra i percorsi usati durante il processo `moduleResolution`.",
   "Longest_matching_prefix_for_0_is_1_6108": "Il prefisso di corrispondenza più lungo per '{0}' è '{1}'.",
   "Looking_up_in_node_modules_folder_initial_location_0_6125": "Verrà eseguita la ricerca nella cartella 'node_modules'. Percorso iniziale: '{0}'.",
   "Make_all_super_calls_the_first_statement_in_their_constructor_95036": "Impostare tutte le chiamate a 'super()' come prima istruzione nel costruttore",
+  "Make_keyof_only_return_strings_instead_of_string_numbers_or_symbols_Legacy_option_6650": "Imposta keyof in modo che restituisca solo stringhe invece di stringhe, numeri o simboli. Opzione legacy.",
   "Make_super_call_the_first_statement_in_the_constructor_90002": "Impostare la chiamata a 'super()' come prima istruzione nel costruttore",
   "Mapped_object_type_implicitly_has_an_any_template_type_7039": "Il tipo di oggetto con mapping contiene implicitamente un tipo di modello 'any'.",
+  "Matched_by_include_pattern_0_in_1_1407": "Corrispondenza tramite criterio di inclusione '{0}' in '{1}'",
   "Member_0_implicitly_has_an_1_type_7008": "Il membro '{0}' contiene implicitamente un tipo '{1}'.",
   "Member_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage_7045": "Il membro '{0}' include implicitamente un tipo '{1}', ma è possibile dedurre un tipo migliore dall'utilizzo.",
   "Merge_conflict_marker_encountered_1185": "È stato rilevato un indicatore di conflitti di merge.",
@@ -752,6 +896,7 @@
   "Method_0_cannot_have_an_implementation_because_it_is_marked_abstract_1245": "Il metodo '{0}' non può includere un'implementazione perché è contrassegnato come astratto.",
   "Method_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2_4101": "Il metodo '{0}' dell'interfaccia esportata ha o usa il nome '{1}' del modulo privato '{2}'.",
   "Method_0_of_exported_interface_has_or_is_using_private_name_1_4102": "Il metodo '{0}' dell'interfaccia esportata ha o usa il nome privato '{1}'.",
+  "Method_not_implemented_95158": "Metodo non implementato.",
   "Modifiers_cannot_appear_here_1184": "In questo punto non è possibile usare modificatori.",
   "Module_0_can_only_be_default_imported_using_the_1_flag_1259": "Il modulo '{0}' può essere importato come predefinito solo con il flag '{1}'",
   "Module_0_declares_1_locally_but_it_is_exported_as_2_2460": "Il modulo '{0}' dichiara '{1}' in locale, ma viene esportato come '{2}'.",
@@ -769,13 +914,14 @@
   "Module_0_was_resolved_as_locally_declared_ambient_module_in_file_1_6144": "Il modulo '{0}' è stato risolto come modulo di ambiente dichiarato in locale nel file '{1}'.",
   "Module_0_was_resolved_to_1_but_jsx_is_not_set_6142": "Il modulo '{0}' è stato risolto in '{1}', ma '--jsx' non è impostato.",
   "Module_0_was_resolved_to_1_but_resolveJsonModule_is_not_used_7042": "Il modulo '{0}' è stato risolto in '{1}', ma '--resolveJsonModule' non viene usato.",
-  "Module_Resolution_Options_6174": "Opzioni di risoluzione moduli",
+  "Module_declaration_names_may_only_use_or_quoted_strings_1443": "I nomi delle dichiarazioni di modulo possono usare solo stringhe racchiuse tra virgolette.",
   "Module_name_0_matched_pattern_1_6092": "Nome del modulo: '{0}'. Criterio corrispondente: '{1}'.",
   "Module_name_0_was_not_resolved_6090": "======== Il nome del modulo '{0}' non è stato risolto. ========",
   "Module_name_0_was_successfully_resolved_to_1_6089": "======== Il nome del modulo '{0}' è stato risolto in '{1}'. ========",
   "Module_name_0_was_successfully_resolved_to_1_with_Package_ID_2_6218": "======== Il nome del modulo '{0}' è stato risolto in '{1}' con ID pacchetto '{2}'. ========",
   "Module_resolution_kind_is_not_specified_using_0_6088": "Il tipo di risoluzione del modulo non è specificato. Verrà usato '{0}'.",
   "Module_resolution_using_rootDirs_has_failed_6111": "La risoluzione del modulo con 'rootDirs' non è riuscita.",
+  "Modules_6244": "Moduli",
   "Move_labeled_tuple_element_modifiers_to_labels_95117": "Spostare i modificatori di elemento tupla con etichetta nelle etichette",
   "Move_to_a_new_file_95049": "Passare a un nuovo file",
   "Multiple_consecutive_numeric_separators_are_not_permitted_6189": "Non sono consentiti più separatori numerici consecutivi.",
@@ -784,11 +930,14 @@
   "Name_is_not_valid_95136": "Nome non valido.",
   "Named_property_0_of_types_1_and_2_are_not_identical_2319": "Le proprietà denominate '{0}' dei tipi '{1}' e '{2}' non sono identiche.",
   "Namespace_0_has_no_exported_member_1_2694": "Lo spazio dei nomi '{0}' non contiene un membro esportato '{1}'.",
+  "Namespace_must_be_given_a_name_1437": "È necessario assegnare un nome allo spazio dei nomi.",
+  "Namespace_name_cannot_be_0_2819": "Lo spazio dei nomi non può essere '{0}'.",
   "No_base_constructor_has_the_specified_number_of_type_arguments_2508": "Nessun costruttore di base contiene il numero specificato di argomenti tipo.",
   "No_constituent_of_type_0_is_callable_2755": "Non è possibile chiamare nessun costituente di tipo '{0}'.",
   "No_constituent_of_type_0_is_constructable_2759": "Non è possibile costruire nessun costituente di tipo '{0}'.",
   "No_index_signature_with_a_parameter_of_type_0_was_found_on_type_1_7054": "Non è stata trovata alcuna firma dell'indice con un parametro di tipo '{0}' nel tipo '{1}'.",
   "No_inputs_were_found_in_config_file_0_Specified_include_paths_were_1_and_exclude_paths_were_2_18003": "Non sono stati trovati input nel file config '{0}'. Percorsi 'include' specificati: '{1}'. Percorsi 'exclude' specificati: '{2}'.",
+  "No_longer_supported_In_early_versions_manually_set_the_text_encoding_for_reading_files_6608": "Non più supportato. Nelle versioni precedenti imposta manualmente la codifica del testo per la lettura dei file.",
   "No_overload_expects_0_arguments_but_overloads_do_exist_that_expect_either_1_or_2_arguments_2575": "Nessun overload prevede {0} argomenti, ma esistono overload che prevedono {1} o {2} argomenti.",
   "No_overload_expects_0_type_arguments_but_overloads_do_exist_that_expect_either_1_or_2_type_arguments_2743": "Nessun overload prevede {0} argomenti di tipo, ma esistono overload che prevedono {1} o {2} argomenti di tipo.",
   "No_overload_matches_this_call_2769": "Nessun overload corrisponde a questa chiamata.",
@@ -802,7 +951,6 @@
   "Not_all_code_paths_return_a_value_7030": "Non tutti i percorsi del codice restituiscono un valore.",
   "Not_all_constituents_of_type_0_are_callable_2756": "Non tutti i costituenti di tipo '{0}' possono essere chiamati.",
   "Not_all_constituents_of_type_0_are_constructable_2760": "Non tutti i costituenti di tipo '{0}' possono essere costruiti.",
-  "Numeric_index_type_0_is_not_assignable_to_string_index_type_1_2413": "Il tipo di indice numerico '{0}' non è assegnabile al tipo di indice stringa '{1}'.",
   "Numeric_literals_with_absolute_values_equal_to_2_53_or_greater_are_too_large_to_be_represented_accur_80008": "I valori letterali numerici con valori assoluti uguali o maggiori di 2^53 sono troppo grandi per essere rappresentati in modo corretto come numeri interi.",
   "Numeric_separators_are_not_allowed_here_6188": "I separatori numerici non sono consentiti in questa posizione.",
   "Object_is_of_type_unknown_2571": "L'oggetto è di tipo 'unknown'.",
@@ -826,9 +974,11 @@
   "Only_identifiers_Slashqualified_names_with_optional_type_arguments_are_currently_supported_in_a_clas_9002": "Nella clausola 'extends' di una classe sono attualmente supportati solo identificatori/nomi qualificati con argomenti tipo facoltativi.",
   "Only_named_exports_may_use_export_type_1383": "Solo le esportazioni denominate possono usare 'export type'.",
   "Only_numeric_enums_can_have_computed_members_but_this_expression_has_type_0_If_you_do_not_need_exhau_18033": "Solo le enumerazioni numeriche possono includere membri calcolati, ma il tipo di questa espressione è '{0}'. Se non sono necessari controlli di esaustività, provare a usare un valore letterale di oggetto.",
+  "Only_output_d_ts_files_and_not_JavaScript_files_6623": "Restituisce solo file d.ts e non file JavaScript.",
   "Only_public_and_protected_methods_of_the_base_class_are_accessible_via_the_super_keyword_2340": "Con la parola chiave 'super' è possibile accedere solo ai metodi pubblico e protetto della classe di base.",
   "Operator_0_cannot_be_applied_to_type_1_2736": "Non è possibile applicare l'operatore '{0}' al tipo '{1}'.",
   "Operator_0_cannot_be_applied_to_types_1_and_2_2365": "Non è possibile applicare l'operatore '{0}' ai tipi '{1}' e '{2}'.",
+  "Opt_a_project_out_of_multi_project_reference_checking_when_editing_6619": "Esclude un progetto dal controllo dei riferimenti a più progetti durante la modifica.",
   "Option_0_can_only_be_specified_in_tsconfig_json_file_or_set_to_false_or_null_on_command_line_6230": "L'opzione '{0}' può essere specificata solo nel file 'tsconfig.json' oppure impostata su 'false' o 'null' sulla riga di comando.",
   "Option_0_can_only_be_specified_in_tsconfig_json_file_or_set_to_null_on_command_line_6064": "L'opzione '{0}' può essere specificata solo nel file 'tsconfig.json' oppure impostata su 'null' sulla riga di comando.",
   "Option_0_can_only_be_used_when_either_option_inlineSourceMap_or_option_sourceMap_is_provided_5051": "L'opzione '{0}' può essere usata solo quando si specifica l'opzione '--inlineSourceMap' o '--sourceMap'.",
@@ -839,16 +989,22 @@
   "Option_0_cannot_be_specified_without_specifying_option_1_or_option_2_5069": "Non è possibile specificare l'opzione '{0}' senza l'opzione'{1}' o '{2}'.",
   "Option_0_should_have_array_of_strings_as_a_value_6103": "Il valore dell'opzione '{0}' deve essere una matrice di stringhe.",
   "Option_build_must_be_the_first_command_line_argument_6369": "L'opzione '--build' deve essere il primo argomento della riga di comando.",
-  "Option_incremental_can_only_be_specified_using_tsconfig_emitting_to_single_file_or_when_option_tsBui_5074": "È possibile specificare l'opzione '--incremental' solo se si usa tsconfig, si crea un singolo file o si specifica l'opzione `--tsBuildInfoFile`.",
+  "Option_incremental_can_only_be_specified_using_tsconfig_emitting_to_single_file_or_when_option_tsBui_5074": "È possibile specificare l'opzione '--incremental' solo se si usa tsconfig, si crea un singolo file o si specifica l'opzione '--tsBuildInfoFile'.",
   "Option_isolatedModules_can_only_be_used_when_either_option_module_is_provided_or_option_target_is_ES_5047": "L'opzione 'isolatedModules' può essere usata solo quando si specifica l'opzione '--module' oppure il valore dell'opzione 'target' è 'ES2015' o maggiore.",
+  "Option_preserveConstEnums_cannot_be_disabled_when_isolatedModules_is_enabled_5091": "Non è possibile disabilitare l'opzione 'preserveConstEnums' quando l'opzione 'isolatedModules' è abilitata.",
   "Option_project_cannot_be_mixed_with_source_files_on_a_command_line_5042": "Non è possibile combinare l'opzione 'project' con file di origine in una riga di comando.",
   "Option_resolveJsonModule_can_only_be_specified_when_module_code_generation_is_commonjs_amd_es2015_or_5071": "È possibile specificare l'opzione '--resolveJsonModule' solo quando la generazione del codice del modulo è impostata su 'commonjs', 'amd', 'es2015' o 'esNext'.",
   "Option_resolveJsonModule_cannot_be_specified_without_node_module_resolution_strategy_5070": "Non è possibile specificare l'opzione '--resolveJsonModule' senza la strategia di risoluzione del modulo 'node'.",
   "Options_0_and_1_cannot_be_combined_6370": "Non è possibile combinare le opzioni '{0}' e '{1}'.",
   "Options_Colon_6027": "Opzioni:",
+  "Output_Formatting_6256": "Formattazione dell'output",
+  "Output_compiler_performance_information_after_building_6615": "Restituisce informazioni sulle prestazioni del compilatore dopo la compilazione.",
   "Output_directory_for_generated_declaration_files_6166": "Directory di output per i file di dichiarazione generati.",
   "Output_file_0_from_project_1_does_not_exist_6309": "Il file di output '{0}' del progetto '{1}' non esiste",
   "Output_file_0_has_not_been_built_from_source_file_1_6305": "Il file di output '{0}' non è stato compilato dal file di origine '{1}'.",
+  "Output_from_referenced_project_0_included_because_1_specified_1411": "L'output del progetto di riferimento '{0}' è incluso perché è stato specificato '{1}'",
+  "Output_from_referenced_project_0_included_because_module_is_specified_as_none_1412": "L'output del progetto di riferimento '{0}' è incluso perché il valore specificato per '--module' è 'none'",
+  "Output_more_detailed_compiler_performance_information_after_building_6632": "Restituisce informazioni più dettagliate sulle prestazioni del compilatore dopo la compilazione.",
   "Overload_0_of_1_2_gave_the_following_error_2772": "L'overload {0} di {1},'{2}', ha restituito l'errore seguente.",
   "Overload_signatures_must_all_be_abstract_or_non_abstract_2512": "Le firme di overload devono essere tutte astratte o tutte non astratte.",
   "Overload_signatures_must_all_be_ambient_or_non_ambient_2384": "Le firme di overload devono essere tutte di ambiente o non di ambiente.",
@@ -892,18 +1048,25 @@
   "Parameter_type_of_public_static_setter_0_from_exported_class_has_or_is_using_name_1_from_private_mod_4034": "Il tipo di parametro del setter statico pubblico '{0}' della classe esportata contiene o usa il nome '{1}' del modulo privato '{2}'.",
   "Parameter_type_of_public_static_setter_0_from_exported_class_has_or_is_using_private_name_1_4035": "Il tipo di parametro del setter statico pubblico '{0}' della classe esportata contiene o usa il nome privato '{1}'.",
   "Parse_in_strict_mode_and_emit_use_strict_for_each_source_file_6141": "Esegue l'analisi in modalità strict e crea la direttiva \"use strict\" per ogni file di origine.",
+  "Part_of_files_list_in_tsconfig_json_1409": "Parte dell'elenco 'files' in tsconfig.json",
   "Pattern_0_can_have_at_most_one_Asterisk_character_5061": "Il criterio '{0}' deve contenere al massimo un carattere '*'.",
   "Performance_timings_for_diagnostics_or_extendedDiagnostics_are_not_available_in_this_session_A_nativ_6386": "Gli intervalli delle prestazioni per '--Diagnostics' o '--extendedDiagnostics' non sono disponibili in questa sessione. Non è stato possibile trovare un'implementazione nativa dell'API Prestazioni Web.",
+  "Platform_specific_6912": "Specifico della piattaforma",
   "Prefix_0_with_an_underscore_90025": "Anteporre un carattere di sottolineatura a '{0}'",
   "Prefix_all_incorrect_property_declarations_with_declare_95095": "Aggiungere 'declare' come prefisso a tutte le dichiarazioni di proprietà non corrette",
   "Prefix_all_unused_declarations_with_where_possible_95025": "Aggiungere a tutte le dichiarazioni non usate il prefisso '_', laddove possibile",
   "Prefix_with_declare_95094": "Aggiungere il prefisso 'declare'",
+  "Print_all_of_the_files_read_during_the_compilation_6653": "Stampa tutti i file letti durante la compilazione.",
+  "Print_files_read_during_the_compilation_including_why_it_was_included_6631": "Stampa i file letti durante la compilazione e indica il motivo per cui sono stati inclusi.",
+  "Print_names_of_files_and_the_reason_they_are_part_of_the_compilation_6505": "Stampa i nomi dei file e il motivo per cui fanno parte della compilazione.",
   "Print_names_of_files_part_of_the_compilation_6155": "Stampa i nomi dei file che fanno parte della compilazione.",
   "Print_names_of_files_that_are_part_of_the_compilation_and_then_stop_processing_6503": "Stampa i nomi dei file che fanno parte della compilazione, quindi arresta l'elaborazione.",
   "Print_names_of_generated_files_part_of_the_compilation_6154": "Stampa i nomi dei file generati che fanno parte della compilazione.",
   "Print_the_compiler_s_version_6019": "Stampa la versione del compilatore.",
   "Print_the_final_configuration_instead_of_building_1350": "Stampa la configurazione finale invece di eseguire la compilazione.",
+  "Print_the_names_of_emitted_files_after_a_compilation_6652": "Stampa i nomi dei file creati al termine di una compilazione.",
   "Print_this_message_6017": "Stampa questo messaggio.",
+  "Private_accessor_was_defined_without_a_getter_2806": "La funzione di accesso privata è stata definita senza un getter.",
   "Private_identifiers_are_not_allowed_in_variable_declarations_18029": "Gli identificatori privati non sono consentiti nelle dichiarazioni di variabili.",
   "Private_identifiers_are_not_allowed_outside_class_bodies_18016": "Gli identificatori privati non sono consentiti all'esterno del corpo della classe.",
   "Private_identifiers_are_only_available_when_targeting_ECMAScript_2015_and_higher_18028": "Gli identificatori privati sono disponibili solo se destinati a ECMAScript 2015 e versioni successive.",
@@ -911,6 +1074,7 @@
   "Private_or_protected_member_0_cannot_be_accessed_on_a_type_parameter_4105": "Non è possibile accedere al membro privato o protetto '{0}' in un parametro di tipo.",
   "Project_0_can_t_be_built_because_its_dependency_1_has_errors_6363": "Non è possibile compilare il progetto '{0}' perché la dipendenza '{1}' contiene errori",
   "Project_0_can_t_be_built_because_its_dependency_1_was_not_built_6383": "Non è possibile compilare il progetto '{0}' perché la relativa dipendenza '{1}' non è stata compilata",
+  "Project_0_is_being_forcibly_rebuilt_6388": "Il progetto '{0}' è stato ricompilato forzatamente",
   "Project_0_is_out_of_date_because_its_dependency_1_is_out_of_date_6353": "Il progetto '{0}' non è aggiornato perché la dipendenza '{1}' non è aggiornata",
   "Project_0_is_out_of_date_because_oldest_output_1_is_older_than_newest_input_2_6350": "Il progetto '{0}' non è aggiornato perché l'output meno recente '{1}' è meno recente dell'input più recente '{2}'",
   "Project_0_is_out_of_date_because_output_file_1_does_not_exist_6352": "Il progetto '{0}' non è aggiornato perché il file di output '{1}' non esiste",
@@ -920,14 +1084,18 @@
   "Project_0_is_up_to_date_because_newest_input_1_is_older_than_oldest_output_2_6351": "Il progetto '{0}' è aggiornato perché l'input più recente '{1}' è meno recente dell'output meno recente '{2}'",
   "Project_0_is_up_to_date_with_d_ts_files_from_its_dependencies_6354": "Il progetto '{0}' è aggiornato con i file con estensione d.ts delle relative dipendenze",
   "Project_references_may_not_form_a_circular_graph_Cycle_detected_Colon_0_6202": "I riferimenti al progetto non possono formare un grafico circolare. Ciclo rilevato: {0}",
+  "Projects_6255": "Progetti",
   "Projects_in_this_build_Colon_0_6355": "Progetti in questa compilazione: {0}",
   "Projects_to_reference_6300": "Progetti cui fare riferimento",
+  "Property_0_cannot_have_an_initializer_because_it_is_marked_abstract_1267": "La proprietà '{0}' non può includere un inizializzatore perché è contrassegnata come astratta.",
   "Property_0_comes_from_an_index_signature_so_it_must_be_accessed_with_0_4111": "La proprietà '{0}' deriva da una firma dell'indice, quindi è necessario accedervi con ['{0}'].",
   "Property_0_does_not_exist_on_const_enum_1_2479": "La proprietà '{0}' non esiste nell'enumerazione 'const' '{1}'.",
   "Property_0_does_not_exist_on_type_1_2339": "La proprietà '{0}' non esiste nel tipo '{1}'.",
   "Property_0_does_not_exist_on_type_1_Did_you_mean_2_2551": "La proprietà '{0}' non esiste nel tipo '{1}'. Si intendeva '{2}'?",
   "Property_0_does_not_exist_on_type_1_Did_you_mean_to_access_the_static_member_2_instead_2576": "La proprietà '{0}' non esiste nel tipo '{1}'. Si intendeva accedere al membro statico '{2}'?",
-  "Property_0_does_not_exist_on_type_1_Do_you_need_to_change_your_target_library_Try_changing_the_lib_c_2550": "La proprietà '{0}' non esiste nel tipo '{1}'. È necessario modificare la libreria di destinazione? Provare a impostare l'opzione `lib` del compilatore su '{2}' o versioni successive.",
+  "Property_0_does_not_exist_on_type_1_Do_you_need_to_change_your_target_library_Try_changing_the_lib_c_2550": "La proprietà '{0}' non esiste nel tipo '{1}'. È necessario modificare la libreria di destinazione? Provare a impostare l'opzione 'lib' del compilatore su '{2}' o versioni successive.",
+  "Property_0_does_not_exist_on_type_1_Try_changing_the_lib_compiler_option_to_include_dom_2812": "La proprietà '{0}' non esiste nel tipo '{1}'. Provare a modificare l'opzione del compilatore 'lib' per includere 'dom'.",
+  "Property_0_has_no_initializer_and_is_not_definitely_assigned_in_a_class_static_block_2817": "La proprietà '{0}' non include alcun inizializzatore e non viene assolutamente assegnata in un blocco statico di classe.",
   "Property_0_has_no_initializer_and_is_not_definitely_assigned_in_the_constructor_2564": "La proprietà '{0}' non include alcun inizializzatore e non viene assolutamente assegnata nel costruttore.",
   "Property_0_implicitly_has_type_any_because_its_get_accessor_lacks_a_return_type_annotation_7033": "La proprietà '{0}' contiene implicitamente il tipo 'any', perché nella relativa funzione di accesso get manca un'annotazione di tipo restituito.",
   "Property_0_implicitly_has_type_any_because_its_set_accessor_lacks_a_parameter_type_annotation_7032": "La proprietà '{0}' contiene implicitamente il tipo 'any', perché nella relativa funzione di accesso set manca un'annotazione di tipo di parametro.",
@@ -945,18 +1113,19 @@
   "Property_0_is_optional_in_type_1_but_required_in_type_2_2327": "La proprietà '{0}' è facoltativa nel tipo '{1}', ma obbligatoria nel tipo '{2}'.",
   "Property_0_is_private_and_only_accessible_within_class_1_2341": "La proprietà '{0}' è privata e accessibile solo all'interno della classe '{1}'.",
   "Property_0_is_private_in_type_1_but_not_in_type_2_2325": "La proprietà '{0}' è privata nel tipo '{1}', ma non nel tipo '{2}'.",
-  "Property_0_is_protected_and_only_accessible_through_an_instance_of_class_1_2446": "La proprietà '{0}' è protetta e accessibile solo tramite un'istanza della classe '{1}'.",
+  "Property_0_is_protected_and_only_accessible_through_an_instance_of_class_1_This_is_an_instance_of_cl_2446": "La proprietà '{0}' è protetta e accessibile solo tramite un'istanza della classe '{1}'. Si tratta di un'istanza della classe '{2}'.",
   "Property_0_is_protected_and_only_accessible_within_class_1_and_its_subclasses_2445": "La proprietà '{0}' è protetta e accessibile solo all'interno della classe '{1}' e delle relative sottoclassi.",
   "Property_0_is_protected_but_type_1_is_not_a_class_derived_from_2_2443": "La proprietà '{0}' è protetta, ma il tipo '{1}' non è una classe derivata da '{2}'.",
   "Property_0_is_protected_in_type_1_but_public_in_type_2_2444": "La proprietà '{0}' è protetta nel tipo '{1}', ma è pubblica non nel tipo '{2}'.",
   "Property_0_is_used_before_being_assigned_2565": "La proprietà '{0}' viene usata prima dell'assegnazione.",
   "Property_0_is_used_before_its_initialization_2729": "La proprietà '{0}' viene usata prima della relativa inizializzazione.",
+  "Property_0_may_not_be_used_in_a_static_property_s_initializer_in_the_same_class_when_target_is_esnex_2810": "La proprietà '{0}' potrebbe non essere usata in un inizializzatore di proprietà statica nella stessa classe quando 'target' è 'esnext' e 'useDefineForClassFields' è 'false'.",
+  "Property_0_may_not_exist_on_type_1_Did_you_mean_2_2568": "La proprietà '{0}' potrebbe non esistere nel tipo '{1}'. Si intendeva '{2}'?",
   "Property_0_of_JSX_spread_attribute_is_not_assignable_to_target_property_2606": "La proprietà '{0}' dell'attributo spread JSX non è assegnabile alla proprietà di destinazione.",
   "Property_0_of_exported_class_expression_may_not_be_private_or_protected_4094": "La proprietà '{0}' dell'espressione di classe esportata potrebbe essere non privata o protetta.",
   "Property_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2_4032": "La proprietà '{0}' dell'interfaccia esportata contiene o usa il nome '{1}' del modulo privato '{2}'.",
   "Property_0_of_exported_interface_has_or_is_using_private_name_1_4033": "La proprietà '{0}' dell'interfaccia esportata contiene o usa il nome privato '{1}'.",
-  "Property_0_of_type_1_is_not_assignable_to_numeric_index_type_2_2412": "La proprietà '{0}' del tipo '{1}' non è assegnabile a un tipo di indice numerico '{2}'.",
-  "Property_0_of_type_1_is_not_assignable_to_string_index_type_2_2411": "La proprietà '{0}' del tipo '{1}' non è assegnabile a un tipo di indice stringa '{2}'.",
+  "Property_0_of_type_1_is_not_assignable_to_2_index_type_3_2411": "La proprietà '{0}' del tipo '{1}' non è assegnabile al tipo di indice '{2}' '{3}'.",
   "Property_0_was_also_declared_here_2733": "In questo punto è dichiarata anche la proprietà '{0}'.",
   "Property_0_will_overwrite_the_base_property_in_1_If_this_is_intentional_add_an_initializer_Otherwise_2612": "La proprietà '{0}' sovrascriverà la proprietà di base in '{1}'. Se questo comportamento è intenzionale, aggiungere un inizializzatore; in caso contrario, aggiungere un modificatore 'declare' o rimuovere la dichiarazione ridondante.",
   "Property_assignment_expected_1136": "È prevista l'assegnazione di proprietà.",
@@ -978,12 +1147,18 @@
   "Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4027": "La proprietà statica pubblica '{0}' della classe esportata contiene o usa il nome '{1}' del modulo privato '{2}'.",
   "Public_static_property_0_of_exported_class_has_or_is_using_private_name_1_4028": "La proprietà statica pubblica '{0}' della classe esportata contiene o usa il nome privato '{1}'.",
   "Qualified_name_0_is_not_allowed_without_a_leading_param_object_1_8032": "Il nome completo '{0}' non è consentito se non si specifica un parametro '@param {object} {1}' iniziale.",
+  "Raise_an_error_when_a_function_parameter_isn_t_read_6676": "Genera un errore quando un parametro di funzione non viene letto",
   "Raise_error_on_expressions_and_declarations_with_an_implied_any_type_6052": "Genera un errore in caso di espressioni o dichiarazioni con tipo 'any' implicito.",
   "Raise_error_on_this_expressions_with_an_implied_any_type_6115": "Genera un errore in caso di espressioni 'this con un tipo 'any' implicito.",
   "Re_exporting_a_type_when_the_isolatedModules_flag_is_provided_requires_using_export_type_1205": "Per riesportare un tipo quando è specificato il flag '--isolatedModules', è necessario usare 'export type'.",
   "Redirect_output_structure_to_the_directory_6006": "Reindirizza la struttura di output alla directory.",
+  "Reduce_the_number_of_projects_loaded_automatically_by_TypeScript_6617": "Riduce il numero di progetti caricati automaticamente da TypeScript.",
   "Referenced_project_0_may_not_disable_emit_6310": "Il progetto di riferimento '{0}' non può disabilitare la creazione.",
   "Referenced_project_0_must_have_setting_composite_Colon_true_6306": "Il progetto di riferimento '{0}' deve includere l'impostazione \"composite\": true.",
+  "Referenced_via_0_from_file_1_1400": "Riferimento tramite '{0}' dal file '{1}'",
+  "Remove_a_list_of_directories_from_the_watch_process_6628": "Rimuove un elenco di directory dal processo dell'espressione di controllo.",
+  "Remove_a_list_of_files_from_the_watch_mode_s_processing_6629": "Rimuove un elenco di file dall'elaborazione della modalità espressione di controllo.",
+  "Remove_all_unnecessary_override_modifiers_95163": "Rimuovere tutti i modificatori 'override' non necessari",
   "Remove_all_unnecessary_uses_of_await_95087": "Rimuovere tutti gli utilizzi non necessari di 'await'",
   "Remove_all_unreachable_code_95051": "Rimuovere tutto il codice non eseguibile",
   "Remove_all_unused_labels_95054": "Rimuovere tutte le etichette inutilizzate",
@@ -991,8 +1166,10 @@
   "Remove_braces_from_arrow_function_95060": "Rimuovere le parentesi graffe dalla funzione arrow",
   "Remove_braces_from_arrow_function_body_95112": "Rimuovere le parentesi graffe dal corpo della funzione arrow",
   "Remove_import_from_0_90005": "Rimuovere l'importazione da '{0}'",
+  "Remove_override_modifier_95161": "Rimuovere il modificatore 'override'",
   "Remove_parentheses_95126": "Rimuovere le parentesi",
   "Remove_template_tag_90011": "Rimuovere il tag template",
+  "Remove_the_20mb_cap_on_total_source_code_size_for_JavaScript_files_in_the_TypeScript_language_server_6618": "Rimuove il limite di 20 MB per le dimensioni totali del codice sorgente relativo ai file JavaScript nel server di linguaggio TypeScript.",
   "Remove_type_parameters_90012": "Rimuovere i parametri di tipo",
   "Remove_unnecessary_await_95086": "Rimuovere l'elemento 'await' non necessario",
   "Remove_unreachable_code_95050": "Rimuovere il codice non eseguibile",
@@ -1010,14 +1187,16 @@
   "Report_errors_in_js_files_8019": "Segnala gli errori presenti nei file con estensione js.",
   "Report_errors_on_unused_locals_6134": "Segnala errori relativi a variabili locali non usate.",
   "Report_errors_on_unused_parameters_6135": "Segnala errori relativi a parametri non usati.",
-  "Require_undeclared_properties_from_index_signatures_to_use_element_accesses_6803": "Richiedere alle proprietà non dichiarate da firme dell'indice di usare gli accessi agli elementi.",
+  "Require_undeclared_properties_from_index_signatures_to_use_element_accesses_6717": "Richiedere alle proprietà non dichiarate da firme dell'indice di usare gli accessi agli elementi.",
   "Required_type_parameters_may_not_follow_optional_type_parameters_2706": "I parametri di tipo obbligatori potrebbero non seguire i parametri di tipo facoltativi.",
   "Resolution_for_module_0_was_found_in_cache_from_location_1_6147": "La risoluzione per il modulo '{0}' è stata trovata nella cache dal percorso '{1}'.",
+  "Resolution_for_type_reference_directive_0_was_found_in_cache_from_location_1_6241": "La risoluzione per la direttiva '{0}' del riferimento al tipo è stata trovata nella cache dal percorso '{1}'.",
   "Resolve_keyof_to_string_valued_property_names_only_no_numbers_or_symbols_6195": "Risolvere 'keyof' solo in nomi di proprietà con valori stringa (senza numeri o simboli).",
   "Resolving_from_node_modules_folder_6118": "Risoluzione dalla cartella node_modules...",
   "Resolving_module_0_from_1_6086": "======== Risoluzione del modulo '{0}' da '{1}'. ========",
   "Resolving_module_name_0_relative_to_base_url_1_2_6094": "Verrà eseguita la risoluzione del nome del modulo '{0}' relativo all'URL di base '{1}' - '{2}'.",
   "Resolving_real_path_for_0_result_1_6130": "Risoluzione del percorso reale per '{0}'. Risultato: '{1}'.",
+  "Resolving_type_reference_directive_0_containing_file_1_6242": "======== Risoluzione della direttiva '{0}' del riferimento al tipo contenente il file '{1}'. ========",
   "Resolving_type_reference_directive_0_containing_file_1_root_directory_2_6116": "======== Risoluzione della direttiva '{0}' del riferimento al tipo contenente il file '{1}' con directory radice '{2}'. ========",
   "Resolving_type_reference_directive_0_containing_file_1_root_directory_not_set_6123": "======== Risoluzione della direttiva '{0}' del riferimento al tipo contenente il file '{1}' e directory radice non impostata. ========",
   "Resolving_type_reference_directive_0_containing_file_not_set_root_directory_1_6127": "======== Risoluzione della direttiva '{0}' del riferimento al tipo contenente il file non impostato con directory radice '{1}'. ========",
@@ -1029,6 +1208,7 @@
   "Rest_signatures_are_incompatible_2572": "Le firme di rest sono incompatibili.",
   "Rest_types_may_only_be_created_from_object_types_2700": "È possibile creare tipi rest solo da tipi di oggetto.",
   "Return_type_annotation_circularly_references_itself_2577": "L'annotazione di tipo restituito contiene un riferimento circolare a se stessa.",
+  "Return_type_must_be_inferred_from_a_function_95149": "Il tipo restituito deve essere dedotto da una funzione",
   "Return_type_of_call_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1_4046": "Il tipo restituito della firma di chiamata dell'interfaccia esportata contiene o usa il nome '{0}' del modulo privato '{1}'.",
   "Return_type_of_call_signature_from_exported_interface_has_or_is_using_private_name_0_4047": "Il tipo restituito della firma di chiamata dell'interfaccia esportata contiene o usa il nome privato '{0}'.",
   "Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_name_0_from_private_mod_4044": "Il tipo restituito della firma del costruttore dell'interfaccia esportata contiene o usa il nome '{0}' del modulo privato '{1}'.",
@@ -1053,15 +1233,31 @@
   "Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_external_module__4050": "Il tipo restituito del metodo statico pubblico della classe esportata contiene o usa il nome '{0}' del modulo esterno {1} ma non può essere rinominato.",
   "Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_private_module_1_4051": "Il tipo restituito del metodo statico pubblico della classe esportata contiene o usa il nome '{0}' del modulo privato '{1}'.",
   "Return_type_of_public_static_method_from_exported_class_has_or_is_using_private_name_0_4052": "Il tipo restituito del metodo statico pubblico della classe esportata contiene o usa il nome privato '{0}'.",
-  "Reusing_module_resolutions_originating_in_0_since_resolutions_are_unchanged_from_old_program_6184": "Le risoluzioni dei moduli con origine in '{0}' verranno riutilizzate perché sono invariate rispetto al vecchio programma.",
-  "Reusing_resolution_of_module_0_to_file_1_from_old_program_6183": "La risoluzione del modulo '{0}' del vecchio programma verrà riutilizzata nel file '{1}'.",
+  "Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_not_resolved_6395": "Il riutilizzo della risoluzione del modulo '{0}' da '{1}' che è stato trovato nella cache dal percorso '{2}' non è stato risolto.",
+  "Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_6393": "Il riutilizzo della risoluzione del modulo '{0}' da '{1}' che è stato trovato nella cache dal percorso '{2}' è stato risolto in '{3}'.",
+  "Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_6394": "Il riutilizzo della risoluzione del modulo '{0}' da '{1}' è stato trovato nella cache dal percorso '{2}'. È stato risolto correttamente in '{3}' con ID pacchetto '{4}'.",
+  "Reusing_resolution_of_module_0_from_1_of_old_program_it_was_not_resolved_6389": "Il riutilizzo della risoluzione del modulo '{0}' da '{1}' del programma precedente non è stato risolto.",
+  "Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2_6183": "Il riutilizzo della risoluzione del modulo '{0}' da '{1}' del programma precedente è stato risolto in '{2}'.",
+  "Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2_with_Package__6184": "Il riutilizzo della risoluzione del modulo '{0}' da '{1}' del programma precedente è stato risolto in '{2}' con l'ID pacchetto '{3}'.",
+  "Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_not_re_6398": "Il riutilizzo della risoluzione della direttiva per il tipo di riferimento '{0}' da '{1}' che è stato trovato nella cache dal percorso '{2}' non è stato risolto.",
+  "Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_succes_6396": "Il riutilizzo della risoluzione della direttiva per il tipo di riferimento '{0}' da '{1}' che è stato trovato nella cache dal percorso '{2}' è stato risolto in '{3}'.",
+  "Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_succes_6397": "Il riutilizzo della risoluzione della direttiva per il tipo di riferimento '{0}' da '{1}' che è stato trovato nella cache dal percorso '{2}' è stato risolto in '{3}' con ID pacchetto '{4}'.",
+  "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_not_resolved_6392": "Il riutilizzo della risoluzione della direttiva riferimento di tipo '{0}' da '{1}' del programma precedente non è stato risolto.",
+  "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved__6390": "Il riutilizzo della risoluzione della direttiva riferimento di tipo '{0}' da '{1}' del programma precedente è stato risolto correttamente in '{2}'.",
+  "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved__6391": "Il riutilizzo della risoluzione della direttiva per il tipo di riferimento '{0}' da '{1}' del programma precedente è stato risolto in '{2}' con l'ID pacchetto '{3}'.",
   "Rewrite_all_as_indexed_access_types_95034": "Riscrivere tutti come tipi di accesso indicizzati",
   "Rewrite_as_the_indexed_access_type_0_90026": "Riscrivere come tipo di accesso indicizzato '{0}'",
   "Root_directory_cannot_be_determined_skipping_primary_search_paths_6122": "Non è possibile determinare la directory radice. I percorsi di ricerca primaria verranno ignorati.",
+  "Root_file_specified_for_compilation_1427": "File radice specificato per la compilazione",
   "STRATEGY_6039": "STRATEGIA",
+  "Save_tsbuildinfo_files_to_allow_for_incremental_compilation_of_projects_6642": "Salva i file .tsbuildinfo per consentire la compilazione incrementale dei progetti.",
   "Scoped_package_detected_looking_in_0_6182": "Il pacchetto con ambito è stato rilevato. Verrà eseguita una ricerca in '{0}'",
+  "Selection_is_not_a_valid_statement_or_statements_95155": "La selezione non corrisponde a una o più istruzioni valide",
   "Selection_is_not_a_valid_type_node_95133": "La selezione non corrisponde a un nodo di tipo valido",
+  "Set_the_JavaScript_language_version_for_emitted_JavaScript_and_include_compatible_library_declaratio_6705": "Imposta la versione del linguaggio JavaScript per il codice JavaScript creato e include le dichiarazioni di libreria compatibili.",
+  "Set_the_language_of_the_messaging_from_TypeScript_This_does_not_affect_emit_6654": "Imposta la lingua della messaggistica da TypeScript. Non influisce sulla creazione.",
   "Set_the_module_option_in_your_configuration_file_to_0_95099": "Impostare l'opzione 'module' nel file di configurazione su '{0}'",
+  "Set_the_newline_character_for_emitting_files_6659": "Imposta il carattere di nuova riga per la creazione di file.",
   "Set_the_target_option_in_your_configuration_file_to_0_95098": "Impostare l'opzione 'target' nel file di configurazione su '{0}'",
   "Setters_cannot_return_a_value_2408": "I setter non possono restituire un valore.",
   "Show_all_compiler_options_6169": "Mostra tutte le opzioni del compilatore.",
@@ -1069,31 +1265,63 @@
   "Show_verbose_diagnostic_information_6150": "Mostra le informazioni di diagnostica dettagliate.",
   "Show_what_would_be_built_or_deleted_if_specified_with_clean_6367": "Mostra gli elementi che vengono compilati (o eliminati, se specificati con l'opzione '--clean')",
   "Signature_0_must_be_a_type_predicate_1224": "La firma '{0}' deve essere un predicato di tipo.",
+  "Skip_type_checking_all_d_ts_files_6693": "Ignora il controllo del tipo di tutti i file .d.ts.",
+  "Skip_type_checking_d_ts_files_that_are_included_with_TypeScript_6692": "Ignora il controllo dei tipi dei file .d.ts inclusi con TypeScript.",
   "Skip_type_checking_of_declaration_files_6012": "Ignora il controllo del tipo dei file di dichiarazione.",
   "Skipping_build_of_project_0_because_its_dependency_1_has_errors_6362": "La compilazione del progetto '{0}' verrà ignorata perché la dipendenza '{1}' contiene errori",
   "Skipping_build_of_project_0_because_its_dependency_1_was_not_built_6382": "La compilazione del progetto '{0}' verrà ignorata perché la dipendenza '{1}' non è stata compilata",
-  "Source_Map_Options_6175": "Opzioni per mapping di origine",
+  "Source_from_referenced_project_0_included_because_1_specified_1414": "L'origine del progetto di riferimento '{0}' è inclusa perché è stato specificato '{1}'",
+  "Source_from_referenced_project_0_included_because_module_is_specified_as_none_1415": "L'origine del progetto di riferimento '{0}' è inclusa perché il valore specificato per '--module' è 'none'",
   "Source_has_0_element_s_but_target_allows_only_1_2619": "L'origine contiene {0} elemento/i ma la destinazione ne consente solo {1}.",
   "Source_has_0_element_s_but_target_requires_1_2618": "L'origine contiene {0} elemento/i ma la destinazione ne richiede {1}.",
+  "Source_provides_no_match_for_required_element_at_position_0_in_target_2623": "L'origine non fornisce alcuna corrispondenza per l'elemento obbligatorio alla posizione {0} nella destinazione.",
+  "Source_provides_no_match_for_variadic_element_at_position_0_in_target_2624": "L'origine non fornisce alcuna corrispondenza per l'elemento variadic alla posizione {0} nella destinazione.",
   "Specialized_overload_signature_is_not_assignable_to_any_non_specialized_signature_2382": "La firma di overload specializzata non è assegnabile a una firma non specializzata.",
   "Specifier_of_dynamic_import_cannot_be_spread_element_1325": "L'identificatore dell'importazione dinamica non può essere l'elemento spread.",
-  "Specify_ECMAScript_target_version_Colon_ES3_default_ES5_ES2015_ES2016_ES2017_ES2018_ES2019_ES2020_or_6015": "Specificare la versione di destinazione di ECMAScript: 'ES3' (impostazione predefinita), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019', 'ES2020' o 'ESNEXT'.",
-  "Specify_JSX_code_generation_Colon_preserve_react_native_or_react_6080": "Specifica la generazione del codice JSX: 'preserve', 'react-native' o 'react'.",
-  "Specify_emit_Slashchecking_behavior_for_imports_that_are_only_used_for_types_1368": "Specificare il comportamento di creazione/controllo per le importazioni usate solo per i tipi",
+  "Specify_ECMAScript_target_version_6015": "Specifica la versione di destinazione di ECMAScript.",
+  "Specify_JSX_code_generation_6080": "Specifica la generazione del codice JSX.",
+  "Specify_a_file_that_bundles_all_outputs_into_one_JavaScript_file_If_declaration_is_true_also_designa_6679": "Consente di specificare un file che aggrega tutti gli output in un unico file JavaScript. Se `declaration` è true, designa anche un file che aggrega tutto l'output dei file .d.ts.",
+  "Specify_a_list_of_glob_patterns_that_match_files_to_be_included_in_compilation_6641": "Consente di specificare un elenco di criteri GLOB che corrispondono ai file da includere nella compilazione.",
+  "Specify_a_list_of_language_service_plugins_to_include_6681": "Consente di specificare un elenco di plug-in da includere del servizio di linguaggio.",
+  "Specify_a_set_of_bundled_library_declaration_files_that_describe_the_target_runtime_environment_6651": "Consente di specificare un set di file di dichiarazione della libreria aggregati che descrivono l'ambiente di runtime di destinazione.",
+  "Specify_a_set_of_entries_that_re_map_imports_to_additional_lookup_locations_6680": "Consente di specificare un set di voci che eseguono di nuovo il mapping delle direttive import nei percorsi di ricerca aggiuntivi.",
+  "Specify_an_array_of_objects_that_specify_paths_for_projects_Used_in_project_references_6687": "Consente di specificare un array di oggetti che indicano percorsi per i progetti. Usato nei riferimenti dei progetti.",
+  "Specify_an_output_folder_for_all_emitted_files_6678": "Consente di specificare una cartella di output per tutti i file creati.",
+  "Specify_emit_Slashchecking_behavior_for_imports_that_are_only_used_for_types_6718": "Specificare il comportamento di creazione/controllo per le importazioni usate solo per i tipi",
   "Specify_file_to_store_incremental_compilation_information_6380": "Specificare il file per l'archiviazione delle informazioni di compilazione incrementale",
+  "Specify_how_TypeScript_looks_up_a_file_from_a_given_module_specifier_6658": "Consente di specificare in che modo TypeScript cerca un file da un identificatore di modulo specifico.",
+  "Specify_how_directories_are_watched_on_systems_that_lack_recursive_file_watching_functionality_6714": "Consente di specifica la modalità di controllo delle directory nei sistemi in cui non sono presenti funzionalità ricorsive di controllo dei file.",
+  "Specify_how_the_TypeScript_watch_mode_works_6715": "Consente di specificare il funzionamento della modalità espressione di controllo TypeScript.",
   "Specify_library_files_to_be_included_in_the_compilation_6079": "Specificare i file di libreria da includere nella compilazione.",
-  "Specify_module_code_generation_Colon_none_commonjs_amd_system_umd_es2015_es2020_or_ESNext_6016": "Specificare il tipo di generazione del codice del modulo: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', 'es2020', or 'ESNext'.",
+  "Specify_module_code_generation_6016": "Specifica la generazione del codice del modulo.",
   "Specify_module_resolution_strategy_Colon_node_Node_js_or_classic_TypeScript_pre_1_6_6069": "Specifica la strategia di risoluzione del modulo: 'node' (Node.js) o 'classic' (TypeScript prima della versione 1.6).",
-  "Specify_strategy_for_creating_a_polling_watch_when_it_fails_to_create_using_file_system_events_Colon_6227": "Specificare la strategia per la creazione di un'espressione di controllo di polling quando non viene creata con eventi del file system: 'FixedInterval' (impostazione predefinita), 'PriorityInterval', 'DynamicPriority'.",
-  "Specify_strategy_for_watching_directory_on_platforms_that_don_t_support_recursive_watching_natively__6226": "Specificare la strategia per il controllo della directory in piattaforme che non supportano il controllo ricorsivo in modo nativo: 'UseFsEvents' (impostazione predefinita), 'FixedPollingInterval', 'DynamicPriorityPolling'.",
-  "Specify_strategy_for_watching_file_Colon_FixedPollingInterval_default_PriorityPollingInterval_Dynami_6225": "Specificare la strategia per il controllo del file: 'FixedPollingInterval' (impostazione predefinita), 'PriorityPollingInterval', 'DynamicPriorityPolling', 'UseFsEvents', 'UseFsEventsOnParentDirectory'.",
+  "Specify_module_specifier_used_to_import_the_JSX_factory_functions_when_using_jsx_Colon_react_jsx_Ast_6649": "Specifica l'identificatore di modulo usato per importare funzioni factory JSX quando si usa `jsx: react-jsx*`.`",
+  "Specify_multiple_folders_that_act_like_Slashnode_modules_Slash_types_6710": "Consente di specificare più cartelle che fungono da `./node_modules/@types`.",
+  "Specify_one_or_more_path_or_node_module_references_to_base_configuration_files_from_which_settings_a_6633": "Consente di specificare uno o più percorsi o riferimenti al modulo del nodo ai file di configurazione di base da cui vengono ereditate le impostazioni.",
+  "Specify_options_for_automatic_acquisition_of_declaration_files_6709": "Consente di specificare le opzioni per l'acquisizione automatica dei file di dichiarazione.",
+  "Specify_strategy_for_creating_a_polling_watch_when_it_fails_to_create_using_file_system_events_Colon_6227": "Specifica la strategia per la creazione di un'espressione di controllo di polling quando non viene creata con eventi del file system: 'FixedInterval' (impostazione predefinita), 'PriorityInterval', 'DynamicPriority', 'FixedChunkSize'.",
+  "Specify_strategy_for_watching_directory_on_platforms_that_don_t_support_recursive_watching_natively__6226": "Specifica la strategia per il controllo della directory in piattaforme che non supportano il controllo ricorsivo in modo nativo: 'UseFsEvents' (impostazione predefinita), 'FixedPollingInterval', 'DynamicPriorityPolling', 'FixedChunkSizePolling'.",
+  "Specify_strategy_for_watching_file_Colon_FixedPollingInterval_default_PriorityPollingInterval_Dynami_6225": "Specifica la strategia per il controllo del file: 'FixedPollingInterval' (impostazione predefinita), 'PriorityPollingInterval', 'DynamicPriorityPolling', 'FixedChunkSizePolling', 'UseFsEvents', 'UseFsEventsOnParentDirectory'.",
+  "Specify_the_JSX_Fragment_reference_used_for_fragments_when_targeting_React_JSX_emit_e_g_React_Fragme_6648": "Consente di specificare il riferimento al fragmento JSX usato per i frammenti quando la destinazione è la creazione JSX React, ad esempio 'React.Fragment' o 'Fragment'.",
   "Specify_the_JSX_factory_function_to_use_when_targeting_react_JSX_emit_e_g_React_createElement_or_h_6146": "Consente di specificare la funzione della factory JSX da usare quando la destinazione è la creazione JSX 'react', ad esempio 'React.createElement' o 'h'.",
+  "Specify_the_JSX_factory_function_used_when_targeting_React_JSX_emit_e_g_React_createElement_or_h_6647": "Consente di specificare la funzione della factory JSX da usare quando la destinazione è la creazione JSX React, ad esempio 'React.createElement' o 'h'",
   "Specify_the_JSX_fragment_factory_function_to_use_when_targeting_react_JSX_emit_with_jsxFactory_compi_18034": "Specificare la funzione della factory di frammenti JSX da usare quando la destinazione è la creazione JSX 'react' quando è specificata l'opzione del compilatore 'jsxFactory', ad esempio 'Fragment'.",
+  "Specify_the_base_directory_to_resolve_non_relative_module_names_6607": "Specificare la directory di base per risolvere i nomi di modulo non relativi.",
   "Specify_the_end_of_line_sequence_to_be_used_when_emitting_files_Colon_CRLF_dos_or_LF_unix_6060": "Specifica la sequenza di fine riga da usare per la creazione dei file, ovvero 'CRLF' (in DOS) o 'LF' (in UNIX).",
+  "Specify_the_folder_for_tsbuildinfo_incremental_compilation_files_6707": "Consente di specificare la cartella per i file di compilazione incrementale .tsbuildinfo.",
   "Specify_the_location_where_debugger_should_locate_TypeScript_files_instead_of_source_locations_6004": "Specifica il percorso in cui il debugger deve trovare i file TypeScript invece dei percorsi di origine.",
-  "Specify_the_location_where_debugger_should_locate_map_files_instead_of_generated_locations_6003": "Specifica il percorso in cui il debugger deve trovare i file map invece dei percorsi generati.",
-  "Specify_the_module_specifier_to_be_used_to_import_the_jsx_and_jsxs_factory_functions_from_eg_react_6238": "Specificare l'identificatore di modulo da usare da cui importare le funzioni di factory `jsx` e `jsxs`, ad esempio react",
+  "Specify_the_location_where_debugger_should_locate_map_files_instead_of_generated_locations_6655": "Specifica il percorso in cui il debugger deve trovare i file map invece dei percorsi generati.",
+  "Specify_the_maximum_folder_depth_used_for_checking_JavaScript_files_from_node_modules_Only_applicabl_6656": "Consente di specificare la profondità massima della cartella utilizzata per il controllo dei file JavaScript da `node_modules`. Applicabile solo con `allowJs`.",
+  "Specify_the_module_specifier_to_be_used_to_import_the_jsx_and_jsxs_factory_functions_from_eg_react_6238": "Specificare l'identificatore di modulo da usare da cui importare le funzioni di factory 'jsx' e 'jsxs', ad esempio react",
+  "Specify_the_object_invoked_for_createElement_This_only_applies_when_targeting_react_JSX_emit_6686": "Consente di specificare l'oggetto richiamato per `createElement`. Si applica quando la destinazione è la creazione JSX `react`.",
+  "Specify_the_output_directory_for_generated_declaration_files_6613": "Consente di specificare la directory di output per i file di dichiarazione generati.",
   "Specify_the_root_directory_of_input_files_Use_to_control_the_output_directory_structure_with_outDir_6058": "Specifica la directory radice dei file di input. Usare per controllare la struttura della directory di output con --outDir.",
+  "Specify_the_root_folder_within_your_source_files_6690": "Consente di specificare la cartella radice nei file di origine.",
+  "Specify_the_root_path_for_debuggers_to_find_the_reference_source_code_6695": "Consente di specificare il percorso radice per consentire ai debugger di trovare il codice sorgente di riferimento.",
+  "Specify_type_package_names_to_be_included_without_being_referenced_in_a_source_file_6711": "Consente di specificare i tipi di nomi dei pacchetti da includere senza farvi riferimento in un file di origine.",
+  "Specify_what_JSX_code_is_generated_6646": "Consente di specificare il codice JSX generato.",
+  "Specify_what_approach_the_watcher_should_use_if_the_system_runs_out_of_native_file_watchers_6634": "Consente di specificare l'approccio che il watcher deve adottare se il sistema esaurisce i watcher di file nativi.",
+  "Specify_what_module_code_is_generated_6657": "Consente di specificare il codice del modulo generato.",
   "Split_all_invalid_type_only_imports_1367": "Dividere tutte le importazioni solo di tipi non valide",
   "Split_into_two_separate_import_declarations_1366": "Dividere in due dichiarazioni di importazione separate",
   "Spread_operator_in_new_expressions_is_only_available_when_targeting_ECMAScript_5_and_higher_2472": "L'operatore Spread in espressioni 'new' è disponibile solo se destinato a ECMAScript 5 e versioni successive.",
@@ -1101,9 +1329,9 @@
   "Starting_compilation_in_watch_mode_6031": "Avvio della compilazione in modalità espressione di controllo...",
   "Statement_expected_1129": "È prevista l'istruzione.",
   "Statements_are_not_allowed_in_ambient_contexts_1036": "Le istruzioni non sono consentite in contesti di ambiente.",
+  "Static_fields_with_private_names_can_t_have_initializers_when_the_useDefineForClassFields_flag_is_no_2805": "I campi statici con nomi privati non possono includere inizializzatori quando per specificare il flag '--useDefineForClassFields' non si usa '--target' con valore 'esnext'. Provare ad aggiungere il flag '--useDefineForClassFields'.",
   "Static_members_cannot_reference_class_type_parameters_2302": "I membri statici non possono fare riferimento a parametri di tipo classe.",
   "Static_property_0_conflicts_with_built_in_property_Function_0_of_constructor_function_1_2699": "La proprietà statica '{0}' è in conflitto con la proprietà predefinita 'Function.{0}' della funzione del costruttore '{1}'.",
-  "Strict_Type_Checking_Options_6173": "Opzioni per controlli del tipo strict",
   "String_literal_expected_1141": "È previsto un valore letterale stringa.",
   "String_literal_with_double_quotes_expected_1327": "È previsto un valore letterale stringa con virgolette doppie.",
   "Stylize_errors_and_messages_using_color_and_context_experimental_6073": "Applica stili a errori e messaggi usando colore e contesto (sperimentale).",
@@ -1117,9 +1345,10 @@
   "Super_calls_are_not_permitted_outside_constructors_or_in_nested_functions_inside_constructors_2337": "Le chiamate super non sono consentite all'esterno di costruttori o nelle funzioni annidate all'interno di costruttori.",
   "Suppress_excess_property_checks_for_object_literals_6072": "Elimina i controlli delle proprietà in eccesso per i valori letterali di oggetto.",
   "Suppress_noImplicitAny_errors_for_indexing_objects_lacking_index_signatures_6055": "Non visualizza gli errori noImplicitAny per gli oggetti di indicizzazione in cui mancano le firme dell'indice.",
+  "Suppress_noImplicitAny_errors_when_indexing_objects_that_lack_index_signatures_6703": "Disabilita gli errori `noImplicitAny` durante l'indicizzazione di oggetti in cui mancano le firme dell'indice.",
   "Switch_each_misused_0_to_1_95138": "Cambiare ogni '{0}' non usato correttamente in '{1}'",
   "Symbol_reference_does_not_refer_to_the_global_Symbol_constructor_object_2470": "Il riferimento 'Symbol' non fa riferimento all'oggetto costruttore Symbol globale.",
-  "Synchronously_call_callbacks_and_update_the_state_of_directory_watchers_on_platforms_that_don_t_supp_6228": "Chiama in modo sincrono i callback e aggiorna lo stato dei watcher di directory in piattaforme che non supportano il controllo ricorsivo in modo nativo.",
+  "Synchronously_call_callbacks_and_update_the_state_of_directory_watchers_on_platforms_that_don_t_supp_6704": "Chiama in modo sincrono i callback e aggiorna lo stato dei watcher di directory in piattaforme che non supportano il controllo ricorsivo in modo nativo.",
   "Syntax_Colon_0_6023": "Sintassi: {0}",
   "Tag_0_expects_at_least_1_arguments_but_the_JSX_factory_2_provides_at_most_3_6229": "Con il tag '{0}' sono previsti almeno '{1}' argomenti, ma la factory JSX '{2}' ne fornisce al massimo '{3}'.",
   "Tagged_template_expressions_are_not_permitted_in_an_optional_chain_1358": "Le espressioni di modello con tag non sono consentite in una catena facoltativa.",
@@ -1134,17 +1363,19 @@
   "The_arguments_object_cannot_be_referenced_in_an_arrow_function_in_ES3_and_ES5_Consider_using_a_stand_2496": "Non è possibile fare riferimento all'oggetto 'arguments' in una funzione arrow in ES3 e ES5. Provare a usare un'espressione di funzione standard.",
   "The_arguments_object_cannot_be_referenced_in_an_async_function_or_method_in_ES3_and_ES5_Consider_usi_2522": "Non è possibile fare riferimento all'oggetto 'arguments' in un metodo o una funzione asincrona in ES3 e ES5. Provare a usare un metodo o una funzione standard.",
   "The_body_of_an_if_statement_cannot_be_the_empty_statement_1313": "Il corpo di un'istruzione 'if' non può essere l'istruzione vuota.",
-  "The_bundledPackageName_option_must_be_provided_when_using_outFile_and_node_module_resolution_with_de_1391": "Non è necessario specificare l'opzione `bundledPackageName` quando si usa la risoluzione dei moduli outFile e node con la creazione di dichiarazioni.",
+  "The_bundledPackageName_option_must_be_provided_when_using_outFile_and_node_module_resolution_with_de_1391": "Non è necessario specificare l'opzione 'bundledPackageName' quando si usa la risoluzione dei moduli outFile e node con la creazione di dichiarazioni.",
   "The_call_would_have_succeeded_against_this_implementation_but_implementation_signatures_of_overloads_2793": "La chiamata sarebbe riuscita rispetto a questa implementazione, ma le firme di implementazione degli overload non sono visibili esternamente.",
   "The_character_set_of_the_input_files_6163": "Set di caratteri dei file di input.",
   "The_containing_arrow_function_captures_the_global_value_of_this_7041": "La funzione arrow contenitore acquisisce il valore globale di 'this'.",
   "The_containing_function_or_module_body_is_too_large_for_control_flow_analysis_2563": "Il corpo del modulo o la funzione che contiene è troppo grande per l'analisi del flusso di controllo.",
   "The_current_host_does_not_support_the_0_option_5001": "L'host corrente non supporta l'opzione '{0}'.",
   "The_declaration_of_0_that_you_probably_intended_to_use_is_defined_here_18018": "La dichiarazione di '{0}' che probabilmente si intende usare viene definita in questo punto",
+  "The_declaration_was_marked_as_deprecated_here_2798": "La dichiarazione è stata contrassegnata come deprecata in questo punto.",
   "The_expected_type_comes_from_property_0_which_is_declared_here_on_type_1_6500": "Il tipo previsto proviene dalla proprietà '{0}', dichiarata in questo punto nel tipo '{1}'",
   "The_expected_type_comes_from_the_return_type_of_this_signature_6502": "Il tipo previsto proviene dal tipo restituito di questa firma.",
   "The_expected_type_comes_from_this_index_signature_6501": "Il tipo previsto proviene da questa firma dell'indice.",
   "The_expression_of_an_export_assignment_must_be_an_identifier_or_qualified_name_in_an_ambient_context_2714": "L'espressione di un'assegnazione di esportazione deve essere un identificatore o un nome completo in un contesto di ambiente.",
+  "The_file_is_in_the_program_because_Colon_1430": "Motivo per cui il file è presente nel programma:",
   "The_files_list_in_config_file_0_is_empty_18002": "L'elenco 'files' nel file config '{0}' è vuoto.",
   "The_first_export_default_is_here_2752": "In questo punto è presente il valore predefinito per la prima esportazione.",
   "The_first_parameter_of_the_then_method_of_a_promise_must_be_a_callback_1060": "Il primo parametro del metodo 'then' di una promessa deve essere un callback.",
@@ -1168,6 +1399,7 @@
   "The_left_hand_side_of_a_for_in_statement_must_be_of_type_string_or_any_2405": "La parte sinistra di un'espressione 'for...in' deve essere di tipo 'string' o 'any'.",
   "The_left_hand_side_of_a_for_of_statement_cannot_use_a_type_annotation_2483": "Nella parte sinistra di un'espressione 'for...of' non è possibile usare un'annotazione di tipo.",
   "The_left_hand_side_of_a_for_of_statement_may_not_be_an_optional_property_access_2781": "La parte sinistra di un'istruzione 'for...of' non può essere un accesso a proprietà facoltativo.",
+  "The_left_hand_side_of_a_for_of_statement_may_not_be_async_1106": "La parte sinistra di un'istruzione 'for...of' non può essere 'async'.",
   "The_left_hand_side_of_a_for_of_statement_must_be_a_variable_or_a_property_access_2487": "La parte sinistra di un'istruzione 'for...of' deve essere una variabile o un accesso a proprietà.",
   "The_left_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type_2362": "La parte sinistra di un'operazione aritmetica deve essere di tipo 'any', 'number', 'bigint' o un tipo enumerazione.",
   "The_left_hand_side_of_an_assignment_expression_may_not_be_an_optional_property_access_2779": "La parte sinistra di un'espressione di assegnazione non può essere un accesso a proprietà facoltativo.",
@@ -1185,15 +1417,18 @@
   "The_parser_expected_to_find_a_to_match_the_token_here_1007": "In questo punto il parser dovrebbe trovare un simbolo '}' abbinato al token '{'.",
   "The_property_0_cannot_be_accessed_on_type_1_within_this_class_because_it_is_shadowed_by_another_priv_18014": "Non è possibile accedere alla proprietà '{0}' nel tipo '{1}' all'interno di questa classe perché è nascosta da un altro identificatore privato con la stessa ortografia.",
   "The_return_type_of_a_JSX_element_constructor_must_return_an_object_type_2601": "Il tipo restituito di un costruttore di elementi JSX deve restituire un tipo di oggetto.",
+  "The_return_type_of_a_get_accessor_must_be_assignable_to_its_set_accessor_type_2380": "Il tipo restituito di una funzione di accesso 'get' deve essere assegnabile al relativo tipo di funzione di accesso 'set'",
   "The_return_type_of_a_parameter_decorator_function_must_be_either_void_or_any_1237": "Il tipo restituito di una funzione di espressione Decorator del parametro deve essere 'void' o 'any'.",
   "The_return_type_of_a_property_decorator_function_must_be_either_void_or_any_1236": "Il tipo restituito di una funzione di espressione Decorator della proprietà deve essere 'void' o 'any'.",
   "The_return_type_of_an_async_function_must_either_be_a_valid_promise_or_must_not_contain_a_callable_t_1058": "Il tipo restituito di una funzione asincrona deve essere una promessa valida oppure non deve contenere un membro 'then' chiamabile.",
   "The_return_type_of_an_async_function_or_method_must_be_the_global_Promise_T_type_Did_you_mean_to_wri_1064": "Il tipo restituito di un metodo o una funzione asincrona deve essere il tipo globale Promise<T>. Si intendeva scrivere 'Promise<{0}>'?",
   "The_right_hand_side_of_a_for_in_statement_must_be_of_type_any_an_object_type_or_a_type_parameter_but_2407": "La parte destra di un'istruzione 'for...in' deve essere di tipo 'any' oppure essere un tipo di oggetto o un parametro di tipo, ma in questo caso il tipo è '{0}'.",
   "The_right_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type_2363": "La parte destra di un'operazione aritmetica deve essere di tipo 'any', 'number', 'bigint' o un tipo enumerazione.",
-  "The_right_hand_side_of_an_in_expression_must_be_of_type_any_an_object_type_or_a_type_parameter_2361": "La parte destra di un'espressione 'in' deve essere di tipo 'any' oppure deve essere un tipo di oggetto o un parametro di tipo.",
+  "The_right_hand_side_of_an_in_expression_must_not_be_a_primitive_2361": "La parte destra di un'espressione 'in' non deve essere una primitiva.",
   "The_right_hand_side_of_an_instanceof_expression_must_be_of_type_any_or_of_a_type_assignable_to_the_F_2359": "La parte destra di un'espressione 'instanceof' deve essere di tipo 'any' o di un tipo assegnabile al tipo di interfaccia 'Function'.",
+  "The_root_value_of_a_0_file_must_be_an_object_5092": "Il valore radice di un file '{0}' deve essere un oggetto.",
   "The_shadowing_declaration_of_0_is_defined_here_18017": "La dichiarazione di oscuramento di '{0}' viene definita in questo punto",
+  "The_signature_0_of_1_is_deprecated_6387": "La firma '{0}' di '{1}' è deprecata.",
   "The_specified_path_does_not_exist_Colon_0_5058": "Il percorso specificato non esiste: '{0}'.",
   "The_tag_was_first_specified_here_8034": "Il tag è stato specificato per la prima volta in questo punto.",
   "The_target_of_an_assignment_must_be_a_variable_or_a_property_access_2541": "La destinazione di un'assegnazione deve essere una variabile o un accesso a proprietà.",
@@ -1204,6 +1439,7 @@
   "The_type_0_is_readonly_and_cannot_be_assigned_to_the_mutable_type_1_4104": "Il tipo '{0}' è 'readonly' e non può essere assegnato al tipo modificabile '{1}'.",
   "The_type_argument_for_type_parameter_0_cannot_be_inferred_from_the_usage_Consider_specifying_the_typ_2453": "Non è possibile dedurre l'argomento tipo per il parametro di tipo '{0}' dall'utilizzo. Provare a specificare gli argomenti tipo in modo esplicito.",
   "The_type_of_a_function_declaration_must_match_the_function_s_signature_8030": "Il tipo di una dichiarazione di funzione deve corrispondere alla firma della funzione.",
+  "The_type_of_this_node_cannot_be_serialized_because_its_property_0_cannot_be_serialized_4118": "Impossibile serializzare questo tipo di nodo perché la sua proprietà '{0}' non può essere serializzata.",
   "The_type_returned_by_the_0_method_of_an_async_iterator_must_be_a_promise_for_a_type_with_a_value_pro_2547": "Il tipo restituito dal metodo '{0}()' di un iteratore asincrono deve essere una promessa per un tipo con una proprietà 'value'.",
   "The_type_returned_by_the_0_method_of_an_iterator_must_have_a_value_property_2490": "Il tipo restituito dal metodo '{0}()' di un iteratore deve contenere una proprietà 'value'.",
   "The_types_of_0_are_incompatible_between_these_types_2200": "I tipi di '{0}' sono incompatibili tra questi tipi.",
@@ -1214,7 +1450,8 @@
   "This_JSX_tag_s_0_prop_expects_a_single_child_of_type_1_but_multiple_children_were_provided_2746": "Con la proprietà '{0}' del tag JSX è previsto un singolo elemento figlio di tipo '{1}', ma sono stati specificati più elementi figlio.",
   "This_JSX_tag_s_0_prop_expects_type_1_which_requires_multiple_children_but_only_a_single_child_was_pr_2745": "Con la proprietà '{0}' del tag JSX è previsto il tipo '{1}' che richiede più elementi figlio, ma è stato specificato un singolo elemento figlio.",
   "This_condition_will_always_return_0_since_the_types_1_and_2_have_no_overlap_2367": "Questa condizione restituirà sempre '{0}' perché i tipi '{1}' e '{2}' non presentano alcuna sovrapposizione.",
-  "This_condition_will_always_return_true_since_the_function_is_always_defined_Did_you_mean_to_call_it__2774": "Questa condizione restituirà sempre true perché la funzione è sempre definita. Si intendeva chiamarla?",
+  "This_condition_will_always_return_true_since_this_0_is_always_defined_2801": "Questa condizione restituirà sempre true perché questo elemento '{0}' è sempre definito.",
+  "This_condition_will_always_return_true_since_this_function_is_always_defined_Did_you_mean_to_call_it_2774": "Questa condizione restituirà sempre true perché questa funzione è sempre definita. Si intendeva chiamarla?",
   "This_constructor_function_may_be_converted_to_a_class_declaration_80002": "Questa funzione del costruttore può essere convertita in una dichiarazione di classe.",
   "This_expression_is_not_callable_2349": "Questa espressione non può essere chiamata.",
   "This_expression_is_not_callable_because_it_is_a_get_accessor_Did_you_mean_to_use_it_without_6234": "Non è possibile chiamare questa espressione perché è una funzione di accesso 'get'. Si intendeva usarla senza '()'?",
@@ -1223,15 +1460,23 @@
   "This_import_is_never_used_as_a_value_and_must_use_import_type_because_importsNotUsedAsValues_is_set__1371": "Questa importazione non viene mai usata come valore e deve usare 'import type' perché 'importsNotUsedAsValues' è impostato su 'error'.",
   "This_is_the_declaration_being_augmented_Consider_moving_the_augmenting_declaration_into_the_same_fil_6233": "Questa è la dichiarazione che verrà aumentata. Provare a spostare la dichiarazione che causa l'aumento nello stesso file.",
   "This_may_be_converted_to_an_async_function_80006": "Può essere convertita in una funzione asincrona.",
+  "This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0_4113": "Questo membro non può includere un modificatore 'override' perché non è dichiarato nella classe di base '{0}'.",
+  "This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0_Did_you__4117": "Questo membro non può includere un modificatore 'override' perché non è dichiarato nella classe di base '{0}'. Forse intendevi '{1}'?",
+  "This_member_cannot_have_an_override_modifier_because_its_containing_class_0_does_not_extend_another__4112": "Questo membro non può includere un modificatore 'override' perché la classe '{0}', che lo contiene, non estende un'altra classe.",
+  "This_member_must_have_an_override_modifier_because_it_overrides_a_member_in_the_base_class_0_4114": "Questo membro deve includere un modificatore 'override' perché sovrascrive un membro nella classe di base '{0}'.",
+  "This_member_must_have_an_override_modifier_because_it_overrides_an_abstract_method_that_is_declared__4116": "Questo membro deve includere un modificatore 'override' perché esegue l'override di un metodo astratto dichiarato nella classe di base '{0}'.",
   "This_module_can_only_be_referenced_with_ECMAScript_imports_Slashexports_by_turning_on_the_0_flag_and_2497": "È possibile fare riferimento a questo modulo solo con importazioni/esportazioni ECMAScript attivando il flag '{0}' e facendo riferimento alla relativa esportazione predefinita.",
   "This_module_is_declared_with_using_export_and_can_only_be_used_with_a_default_import_when_using_the__2594": "Il modulo viene dichiarato con 'export =' e può essere usato solo con un'importazione predefinita quando si usa il flag '{0}'.",
   "This_overload_signature_is_not_compatible_with_its_implementation_signature_2394": "Questa firma di overload non è compatibile con la relativa firma di implementazione.",
   "This_parameter_is_not_allowed_with_use_strict_directive_1346": "Questo parametro non è consentito con la direttiva 'use strict'.",
+  "This_parameter_property_must_have_an_override_modifier_because_it_overrides_a_member_in_base_class_0_4115": "Questa proprietà parametro deve includere un modificatore 'override' perché sovrascrive un membro nella classe di base '{0}'.",
   "This_spread_always_overwrites_this_property_2785": "Questo spread sovrascrive sempre questa proprietà.",
   "This_syntax_requires_an_imported_helper_but_module_0_cannot_be_found_2354": "Con questa sintassi è richiesto un helper importato, ma il modulo '{0}' non è stato trovato.",
   "This_syntax_requires_an_imported_helper_named_1_which_does_not_exist_in_0_Consider_upgrading_your_ve_2343": "Con questa sintassi è richiesto un helper importato denominato '{1}', che non esiste in '{0}'. Provare ad aggiornare la versione di '{0}'.",
+  "This_syntax_requires_an_imported_helper_named_1_with_2_parameters_which_is_not_compatible_with_the_o_2807": "Con questa sintassi è richiesto un helper importato denominato '{1}' con {2} parametri, che non è compatibile con quello presente in '{0}'. Provare ad aggiornare la versione di '{0}'.",
   "Top_level_await_expressions_are_only_allowed_when_the_module_option_is_set_to_esnext_or_system_and_t_1378": "Le espressioni 'await' di primo livello sono consentite solo quando l'opzione 'module' è impostata su 'esnext' o 'system' e l'opzione 'target' è impostata su 'es2017' o versione successiva.",
   "Top_level_declarations_in_d_ts_files_must_start_with_either_a_declare_or_export_modifier_1046": "Le dichiarazioni di primo livello nei file con estensione d.ts devono iniziare con un modificatore 'declare' o 'export'.",
+  "Top_level_for_await_loops_are_only_allowed_when_the_module_option_is_set_to_esnext_or_system_and_the_1432": "I cicli 'for await' di primo livello sono consentiti solo quando l'opzione 'module' è impostata su 'esnext' o 'system' e l'opzione 'target' è impostata su 'es2017' o versione successiva.",
   "Trailing_comma_not_allowed_1009": "La virgola finale non è consentita.",
   "Transpile_each_file_as_a_separate_module_similar_to_ts_transpileModule_6153": "Esegue il transpile di ogni file in un modulo separato (simile a 'ts.transpileModule').",
   "Try_npm_i_save_dev_types_Slash_1_if_it_exists_or_add_a_new_declaration_d_ts_file_containing_declare__7035": "Provare con `npm i --save-dev @types/{1}` se esiste oppure aggiungere un nuovo file di dichiarazione con estensione d.ts contenente `declare module '{0}';`",
@@ -1240,6 +1485,7 @@
   "Tuple_members_must_all_have_names_or_all_not_have_names_5084": "I membri di tupla devono tutti avere o non avere nomi.",
   "Tuple_type_0_of_length_1_has_no_element_at_index_2_2493": "Il tipo di tupla '{0}' con lunghezza '{1}' non contiene elementi alla posizione di indice '{2}'.",
   "Tuple_type_arguments_circularly_reference_themselves_4110": "Gli argomenti tipo di tupla contengono un riferimento circolare a se stessi.",
+  "Type_0_can_only_be_iterated_through_when_using_the_downlevelIteration_flag_or_with_a_target_of_es201_2802": "Il tipo '{0}' può essere iterato solo quando si usa il flag '--downlevelIteration' o quando '--target' è impostato su 'es2015' o un valore superiore.",
   "Type_0_cannot_be_used_as_an_index_type_2538": "Non è possibile usare il tipo '{0}' come tipo di indice.",
   "Type_0_cannot_be_used_to_index_type_1_2536": "Non è possibile usare il tipo '{0}' per indicizzare il tipo '{1}'.",
   "Type_0_does_not_satisfy_the_constraint_1_2344": "Il tipo '{0}' non soddisfa il vincolo '{1}'.",
@@ -1264,7 +1510,9 @@
   "Type_0_must_have_a_Symbol_iterator_method_that_returns_an_iterator_2488": "Il tipo '{0}' deve contenere un metodo '[Symbol.iterator]()' che restituisce un iteratore.",
   "Type_0_provides_no_match_for_the_signature_1_2658": "Il tipo '{0}' non fornisce corrispondenze per la firma '{1}'.",
   "Type_0_recursively_references_itself_as_a_base_type_2310": "Il tipo '{0}' fa riferimento a se stesso in modo ricorsivo come tipo di base.",
+  "Type_Checking_6248": "Controllo del tipo",
   "Type_alias_0_circularly_references_itself_2456": "L'alias di tipo '{0}' contiene un riferimento circolare a se stesso.",
+  "Type_alias_must_be_given_a_name_1439": "È necessario assegnare un nome all'alias del tipo.",
   "Type_alias_name_cannot_be_0_2457": "Il nome dell'alias di tipo non può essere '{0}'.",
   "Type_aliases_can_only_be_used_in_TypeScript_files_8008": "Gli alias di tipo possono esere usati solo in file TypeScript.",
   "Type_annotation_cannot_appear_on_a_constructor_declaration_1093": "L'annotazione di tipo non può essere inclusa in una dichiarazione di costruttore.",
@@ -1276,10 +1524,15 @@
   "Type_arguments_cannot_be_used_here_1342": "Non è possibile usare argomenti tipo in questa posizione.",
   "Type_arguments_for_0_circularly_reference_themselves_4109": "Gli argomenti tipo per '{0}' contengono un riferimento circolare a se stessi.",
   "Type_assertion_expressions_can_only_be_used_in_TypeScript_files_8016": "Le espressioni di asserzione di tipo possono essere usate solo in file TypeScript.",
+  "Type_at_position_0_in_source_is_not_compatible_with_type_at_position_1_in_target_2626": "Il tipo alla posizione {0} nell'origine non è compatibile con il tipo alla posizione {1} nella destinazione.",
+  "Type_at_positions_0_through_1_in_source_is_not_compatible_with_type_at_position_2_in_target_2627": "Il tipo alle posizioni dalla {0} alla {1} nell'origine non è compatibile con il tipo alla posizione {2} nella destinazione.",
+  "Type_catch_clause_variables_as_unknown_instead_of_any_6803": "Digitare le variabili di clausola catch come \"unknown\" invece di \"any\".",
   "Type_declaration_files_to_be_included_in_compilation_6124": "File della dichiarazione di tipo da includere nella compilazione.",
   "Type_expected_1110": "È previsto il tipo.",
   "Type_instantiation_is_excessively_deep_and_possibly_infinite_2589": "La creazione di un'istanza di tipo presenta troppi livelli ed è probabilmente infinita.",
   "Type_is_referenced_directly_or_indirectly_in_the_fulfillment_callback_of_its_own_then_method_1062": "Il tipo viene usato come riferimento diretto o indiretto nel callback di fulfillment del relativo metodo 'then'.",
+  "Type_library_referenced_via_0_from_file_1_1402": "Libreria dei tipi a cui viene fatto riferimento tramite '{0}' dal file '{1}'",
+  "Type_library_referenced_via_0_from_file_1_with_packageId_2_1403": "Libreria dei tipi a cui viene fatto riferimento tramite '{0}' dal file '{1}' con packageId '{2}'",
   "Type_of_await_operand_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member_1320": "Il tipo dell'operando 'await' deve essere una promessa valida oppure non deve contenere un membro 'then' chiamabile.",
   "Type_of_computed_property_s_value_is_0_which_is_not_assignable_to_type_1_2418": "Il tipo del valore della proprietà calcolata è '{0}', che non è assegnabile al tipo '{1}'.",
   "Type_of_iterated_elements_of_a_yield_Asterisk_operand_must_either_be_a_valid_promise_or_must_not_con_1322": "Il tipo di elementi iterati di un operando 'yield*' deve essere una promessa valida oppure non deve contenere un membro 'then' chiamabile.",
@@ -1305,6 +1558,7 @@
   "Type_parameter_name_cannot_be_0_2368": "Il nome del parametro di tipo non può essere '{0}'.",
   "Type_parameters_cannot_appear_on_a_constructor_declaration_1092": "I parametri di tipo non possono essere inclusi in una dichiarazione di costruttore.",
   "Type_predicate_0_is_not_assignable_to_1_1226": "Il predicato di tipo '{0}' non è assegnabile a '{1}'.",
+  "Type_produces_a_tuple_type_that_is_too_large_to_represent_2799": "Il tipo produce un tipo di tupla troppo grande da rappresentare.",
   "Type_reference_directive_0_was_not_resolved_6120": "======== La direttiva '{0}' del riferimento al tipo non è stata risolta. ========",
   "Type_reference_directive_0_was_successfully_resolved_to_1_primary_Colon_2_6119": "======== La direttiva '{0}' del riferimento al tipo è stata risolta in '{1}'. Primaria: {2}. ========",
   "Type_reference_directive_0_was_successfully_resolved_to_1_with_Package_ID_2_primary_Colon_3_6219": "======== La direttiva '{0}' del riferimento al tipo è stata risolta in '{1}' con ID pacchetto ID '{2}'. Primaria: {3}. ========",
@@ -1318,6 +1572,7 @@
   "Unable_to_resolve_signature_of_parameter_decorator_when_called_as_an_expression_1239": "Non è possibile risolvere la firma dell'espressione Decorator del parametro quando è chiamata come espressione.",
   "Unable_to_resolve_signature_of_property_decorator_when_called_as_an_expression_1240": "Non è possibile risolvere la firma dell'espressione Decorator della proprietà quando è chiamata come espressione.",
   "Unexpected_end_of_text_1126": "Fine del testo imprevista.",
+  "Unexpected_keyword_or_identifier_1434": "Parola chiave o identificatore imprevisti.",
   "Unexpected_token_1012": "Token imprevisto.",
   "Unexpected_token_A_constructor_method_accessor_or_property_was_expected_1068": "Token imprevisto. È previsto un costruttore, un metodo, una funzione di accesso o una proprietà.",
   "Unexpected_token_A_type_parameter_name_was_expected_without_curly_braces_1069": "Token imprevisto. Sono previsti nomi di parametro senza parentesi graffe.",
@@ -1328,6 +1583,7 @@
   "Unknown_build_option_0_Did_you_mean_1_5077": "L'opzione di compilazione '{0}' è sconosciuta. Si intendeva '{1}'?",
   "Unknown_compiler_option_0_5023": "Opzione del compilatore sconosciuta: '{0}'.",
   "Unknown_compiler_option_0_Did_you_mean_1_5025": "L'opzione '{0}' del compilatore è sconosciuta. Si intendeva '{1}'?",
+  "Unknown_keyword_or_identifier_Did_you_mean_0_1435": "Parola chiave o identificatore sconosciuti. Intendevi '{0}'?",
   "Unknown_option_excludes_Did_you_mean_exclude_6114": "L'opzione 'excludes' è sconosciuta. Si intendeva 'exclude'?",
   "Unknown_type_acquisition_option_0_17010": "L'opzione '{0}' relativa all'acquisizione del tipo è sconosciuta.",
   "Unknown_type_acquisition_option_0_Did_you_mean_1_17018": "L'opzione di acquisizione del tipo '{0}' è sconosciuta. Si intendeva '{1}'?",
@@ -1350,6 +1606,7 @@
   "Use_element_access_for_all_undeclared_properties_95146": "Usare l'accesso agli elementi per tutte le proprietà non dichiarate.",
   "Use_synthetic_default_member_95016": "Usare il membro 'default' sintetico.",
   "Using_a_string_in_a_for_of_statement_is_only_supported_in_ECMAScript_5_and_higher_2494": "L'uso di una stringa in un'istruzione 'for...of' è supportato solo in ECMAScript 5 e versioni successive.",
+  "Using_build_b_will_make_tsc_behave_more_like_a_build_orchestrator_than_a_compiler_This_is_used_to_tr_6915": "Se si usa --build, l'opzione -b modificherà il comportamento di tsc in modo che sia più simile a un agente di orchestrazione di compilazione che a un compilatore. Viene usata per attivare la compilazione di progetti compositi. Per altre informazioni, vedere {0}",
   "Using_compiler_options_of_project_reference_redirect_0_6215": "Using compiler options of project reference redirect '{0}'.",
   "VERSION_6036": "VERSIONE",
   "Value_of_type_0_has_no_properties_in_common_with_type_1_Did_you_mean_to_call_it_2560": "Il valore di tipo '{0}' non ha proprietà in comune con il tipo '{1}'. Si intendeva chiamarlo?",
@@ -1361,10 +1618,16 @@
   "Variable_0_is_used_before_being_assigned_2454": "La variabile '{0}' viene usata prima dell'assegnazione.",
   "Variable_declaration_expected_1134": "È prevista la dichiarazione di variabile.",
   "Variable_declaration_list_cannot_be_empty_1123": "L'elenco delle dichiarazioni di variabile non può essere vuoto.",
+  "Variable_declaration_not_allowed_at_this_location_1440": "Dichiarazione di variabile non consentita in questa posizione.",
+  "Variadic_element_at_position_0_in_source_does_not_match_element_at_position_1_in_target_2625": "L'elemento variadic alla posizione {0} nell'origine non corrisponde all'elemento alla posizione {1} nella destinazione.",
   "Version_0_6029": "Versione {0}",
   "Visit_https_Colon_Slash_Slashaka_ms_Slashtsconfig_json_to_read_more_about_this_file_95110": "Per altre informazioni su questo file, visitare il sito all'indirizzo https://aka.ms/tsconfig.json",
+  "WATCH_OPTIONS_6918": "OPZIONI DELL'ESPRESSIONE DI CONTROLLO",
+  "Watch_and_Build_Modes_6250": "Modalità di espressione di controllo e compilazione",
   "Watch_input_files_6005": "Controlla i file di input.",
   "Watch_option_0_requires_a_value_of_type_1_5080": "Con l'opzione '{0}' dell'espressione di controllo è richiesto un valore di tipo {1}.",
+  "When_assigning_functions_check_to_ensure_parameters_and_the_return_values_are_subtype_compatible_6698": "Durante l'assegnazione di funzioni verifica che i parametri e i valori restituiti siano compatibili con il sottotipo.",
+  "When_type_checking_take_into_account_null_and_undefined_6699": "Durante il controllo del tipo prende in considerazione `null` e `undefined`.",
   "Whether_to_keep_outdated_console_output_in_watch_mode_instead_of_clearing_the_screen_6191": "Indica se mantenere l'output della console obsoleto in modalità espressione di controllo invece di pulire lo schermo.",
   "Wrap_all_invalid_characters_in_an_expression_container_95109": "Eseguire il wrapping di tutti i caratteri non validi in un contenitore di espressioni",
   "Wrap_all_object_literal_with_parentheses_95116": "Racchiudere tra parentesi tutti i valori letterali di oggetto",
@@ -1372,10 +1635,12 @@
   "Wrap_in_JSX_fragment_95120": "Esegui il wrapping nel frammento JSX",
   "Wrap_invalid_character_in_an_expression_container_95108": "Eseguire il wrapping del carattere non valido in un contenitore di espressioni",
   "Wrap_the_following_body_with_parentheses_which_should_be_an_object_literal_95113": "Racchiudere tra parentesi il corpo seguente che deve essere un valore letterale di oggetto",
+  "You_can_learn_about_all_of_the_compiler_options_at_0_6913": "Per informazioni su tutte le opzioni del compilatore, vedere {0}",
   "You_cannot_rename_a_module_via_a_global_import_8031": "Non è possibile rinominare un modulo tramite un'importazione globale.",
   "You_cannot_rename_elements_that_are_defined_in_the_standard_TypeScript_library_8001": "Non è possibile rinominare elementi definiti nella libreria TypeScript standard.",
   "You_cannot_rename_this_element_8000": "Non è possibile rinominare questo elemento.",
   "_0_accepts_too_few_arguments_to_be_used_as_a_decorator_here_Did_you_mean_to_call_it_first_and_write__1329": "'{0}' accetta un numero troppo ridotto di argomenti da usare come espressione Decorator in questo punto. Si intendeva chiamarlo prima e scrivere '@{0}()'?",
+  "_0_and_1_index_signatures_are_incompatible_2330": "Le firme dell'indice '{0}' e '{1}' non sono compatibili.",
   "_0_and_1_operations_cannot_be_mixed_without_parentheses_5076": "Non è possibile combinare le operazioni '{0}' e '{1}' senza parentesi.",
   "_0_are_specified_twice_The_attribute_named_0_will_be_overwritten_2710": "Gli attributi '{0}' sono stati specificati due volte. L'attributo denominato '{0}' verrà sovrascritto.",
   "_0_can_only_be_imported_by_turning_on_the_esModuleInterop_flag_and_using_a_default_import_2596": "'{0}' può essere importato solo attivando il flag 'esModuleInterop' e usando un'importazione predefinita.",
@@ -1396,6 +1661,8 @@
   "_0_implicitly_has_an_1_return_type_but_a_better_type_may_be_inferred_from_usage_7050": "'{0}' include implicitamente un tipo restituito '{1}', ma è possibile dedurre un tipo migliore dall'utilizzo.",
   "_0_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_reference_7023": "'{0}' contiene implicitamente il tipo restituito 'any', perché non contiene un'annotazione di tipo restituito e viene usato come riferimento diretto o indiretto in una delle relative espressioni restituite.",
   "_0_implicitly_has_type_any_because_it_does_not_have_a_type_annotation_and_is_referenced_directly_or__7022": "'{0}' contiene implicitamente il tipo 'any', perché non contiene un'annotazione di tipo e viene usato come riferimento diretto o indiretto nel relativo inizializzatore.",
+  "_0_index_signatures_are_incompatible_2634": "Le firme dell'indice '{0}' non sono compatibili.",
+  "_0_index_type_1_is_not_assignable_to_2_index_type_3_2413": "Il tipo di indice '{0}' '{1}' non è assegnabile al tipo di indice '{2}' '{3}'.",
   "_0_is_a_primitive_but_1_is_a_wrapper_object_Prefer_using_0_when_possible_2692": "'{0}' è una primitiva, ma '{1}' è un oggetto wrapper. Quando possibile, preferire '{0}'.",
   "_0_is_assignable_to_the_constraint_of_type_1_but_1_could_be_instantiated_with_a_different_subtype_of_5075": "'{0}' è assegnabile al vincolo di tipo '{1}', ma è possibile creare un'istanza di '{1}' con un sottotipo diverso del vincolo '{2}'.",
   "_0_is_declared_but_its_value_is_never_read_6133": "L'elemento '{0}' è dichiarato, ma il suo valore non viene mai letto.",
@@ -1403,7 +1670,7 @@
   "_0_is_declared_here_2728": "In questo punto viene dichiarato '{0}'.",
   "_0_is_defined_as_a_property_in_class_1_but_is_overridden_here_in_2_as_an_accessor_2611": "'{0}' è definito come proprietà nella classe '{1}', ma in questo punto ne viene eseguito l'override in '{2}' come funzione di accesso.",
   "_0_is_defined_as_an_accessor_in_class_1_but_is_overridden_here_in_2_as_an_instance_property_2610": "'{0}' è definito come funzione di accesso nella classe '{1}', ma in questo punto ne viene eseguito l'override in '{2}' come proprietà di istanza.",
-  "_0_is_deprecated_6385": "'{0}' è deprecato",
+  "_0_is_deprecated_6385": "'{0}' è deprecato.",
   "_0_is_not_a_valid_meta_property_for_keyword_1_Did_you_mean_2_17012": "'{0}' non è una metaproprietà valida per la parola chiave '{1}'. Si intendeva '{2}'?",
   "_0_is_not_allowed_as_a_variable_declaration_name_1389": "'{0}' non è consentito come nome di una dichiarazione di variabile.",
   "_0_is_referenced_directly_or_indirectly_in_its_own_base_expression_2506": "'{0}' viene usato come riferimento diretto o indiretto nella relativa espressione di base.",
@@ -1428,7 +1695,7 @@
   "_0_only_refers_to_a_type_but_is_being_used_as_a_namespace_here_2702": "'{0}' fa riferimento solo a un tipo, ma qui viene usato come spazio dei nomi.",
   "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_2693": "'{0}' fa riferimento solo a un tipo, ma qui viene usato come valore.",
   "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_Did_you_mean_to_use_1_in_0_2690": "'{0}' fa riferimento solo a un tipo, ma qui viene usato come valore. Si intendeva usare '{1} in {0}'?",
-  "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_Do_you_need_to_change_your_target_library_2585": "'{0}' si riferisce solo a un tipo, ma in questo punto viene usato come valore. È necessario modificare la libreria di destinazione? Provare a impostare l'opzione `lib` del compilatore su es2015 o versioni successive.",
+  "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_Do_you_need_to_change_your_target_library_2585": "'{0}' si riferisce solo a un tipo, ma in questo punto viene usato come valore. È necessario modificare la libreria di destinazione? Provare a impostare l'opzione 'lib' del compilatore su es2015 o versioni successive.",
   "_0_refers_to_a_UMD_global_but_the_current_file_is_a_module_Consider_adding_an_import_instead_2686": "'{0}' fa riferimento a un istruzione globale UMD, ma il file corrente è un modulo. Provare ad aggiungere un'importazione.",
   "_0_refers_to_a_value_but_is_being_used_as_a_type_here_Did_you_mean_typeof_0_2749": "'{0}' fa riferimento a un valore, ma qui viene usato come tipo. Si intendeva 'typeof {0}'?",
   "_0_tag_already_specified_1223": "Il tag '{0}' è già specificato.",
@@ -1440,6 +1707,7 @@
   "_0_which_lacks_return_type_annotation_implicitly_has_an_1_yield_type_7055": "'{0}', in cui manca l'annotazione di tipo restituito, contiene implicitamente un tipo yield '{1}'.",
   "abstract_modifier_can_only_appear_on_a_class_method_or_property_declaration_1242": "Il modificatore 'abstract' può essere incluso solo in una dichiarazione di classe, metodo o proprietà.",
   "and_here_6204": "e in questo punto.",
+  "arguments_cannot_be_referenced_in_property_initializers_2815": "impossibile fare riferimento agli 'argomenti' negli inizializzatori di proprietà.",
   "await_expressions_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_fi_1375": "Le espressioni 'await' sono consentite solo al primo livello di un file quando il file è un modulo, ma questo file non contiene importazioni o esportazioni. Provare ad aggiungere un elemento 'export {}' vuoto per trasformare il file in un modulo.",
   "await_expressions_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_1308": "Le espressioni 'await' sono consentite solo all'interno di funzioni asincrone e al primo livello di moduli.",
   "await_expressions_cannot_be_used_in_a_parameter_initializer_2524": "Non è possibile usare le espressioni 'await' in un inizializzatore di parametri.",
@@ -1456,6 +1724,7 @@
   "const_enums_can_only_be_used_in_property_or_index_access_expressions_or_the_right_hand_side_of_an_im_2475": "Le enumerazioni 'const' possono essere usate solo in espressioni di accesso a proprietà o indice oppure nella parte destra di un'assegnazione di esportazione, di una dichiarazione di importazione o di una query su tipo.",
   "constructor_cannot_be_used_as_a_parameter_property_name_2398": "Non è possibile usare 'constructor' come nome di proprietà di un parametro.",
   "constructor_is_a_reserved_word_18012": "'#constructor' è una parola riservata.",
+  "default_Colon_6903": "impostazione predefinita:",
   "delete_cannot_be_called_on_an_identifier_in_strict_mode_1102": "Non è possibile chiamare 'delete' su un identificatore in modalità strict.",
   "delete_this_Project_0_is_up_to_date_because_it_was_previously_built_6360": "eliminare - Il progetto '{0}' è aggiornato perché è stato compilato in precedenza",
   "export_Asterisk_does_not_re_export_a_default_1195": "'export *' non consente di riesportare esportazioni predefinite.",
@@ -1466,17 +1735,26 @@
   "extends_clause_of_exported_class_0_has_or_is_using_private_name_1_4020": "La clausola 'extends' della classe esportata '{0}' contiene o usa il nome privato '{1}'.",
   "extends_clause_of_exported_class_has_or_is_using_private_name_0_4021": "La clausola 'extends' della classe esportata contiene o usa il nome privato '{0}'.",
   "extends_clause_of_exported_interface_0_has_or_is_using_private_name_1_4022": "La clausola 'extends' dell'interfaccia esportata '{0}' contiene o usa il nome privato '{1}'.",
+  "false_unless_composite_is_set_6906": "`false`, a meno che non sia impostato `composite`",
+  "false_unless_strict_is_set_6905": "`false`, a meno che non sia impostato `strict`",
   "file_6025": "file",
+  "for_await_loops_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_file_1431": "I cicli 'for await' sono consentiti solo al primo livello di un file quando il file è un modulo, ma questo file non contiene importazioni o esportazioni. Provare ad aggiungere un elemento 'export {}' vuoto per trasformare il file in un modulo.",
+  "for_await_loops_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_1103": "I cicli 'for await' sono consentiti solo all'interno di funzioni asincrone e al primo livello di moduli.",
   "get_and_set_accessor_must_have_the_same_this_type_2682": "Le funzioni di accesso 'get e 'set' devono essere dello stesso tipo 'this'.",
-  "get_and_set_accessor_must_have_the_same_type_2380": "Le funzioni di accesso 'get e 'set' devono essere dello stesso tipo.",
   "get_and_set_accessors_cannot_declare_this_parameters_2784": "Le funzioni di accesso 'get' e 'set' non possono dichiarare parametri 'this'.",
+  "if_files_is_specified_otherwise_Asterisk_Asterisk_Slash_Asterisk_6908": "`[]` se è specificato `files`; in caso contrario, `[\"**/*\"]5D;`",
   "implements_clause_already_seen_1175": "La clausola 'implements' è già presente.",
   "implements_clauses_can_only_be_used_in_TypeScript_files_8005": "Le clausole 'implements' possono essere usate solo in file TypeScript.",
   "import_can_only_be_used_in_TypeScript_files_8002": "'import ... =' può essere usato solo in file TypeScript.",
   "infer_declarations_are_only_permitted_in_the_extends_clause_of_a_conditional_type_1338": "Le dichiarazioni 'infer' sono consentite solo nella clausola 'extends' di un tipo condizionale.",
   "let_declarations_can_only_be_declared_inside_a_block_1157": "Le dichiarazioni 'let' possono essere dichiarate solo all'interno di un blocco.",
   "let_is_not_allowed_to_be_used_as_a_name_in_let_or_const_declarations_2480": "Non è consentito usare 'let' come nome in dichiarazioni 'let' o 'const'.",
+  "module_AMD_or_UMD_or_System_or_ES6_then_Classic_Otherwise_Node_69010": "module === `AMD` o `UMD` o `System` o `ES6`, quindi `Classic`; in caso contrario `Node`",
+  "module_system_or_esModuleInterop_6904": "module === \"system\" o esModuleInterop",
   "new_expression_whose_target_lacks_a_construct_signature_implicitly_has_an_any_type_7009": "L'espressione 'new', nella cui destinazione manca una firma del costrutto, contiene implicitamente un tipo 'any'.",
+  "node_modules_bower_components_jspm_packages_plus_the_value_of_outDir_if_one_is_specified_6907": "`[\"node_modules\", \"bower_components\", \"jspm_packages\"]`, nonché il valore di `outDir` se ne è specificato uno.",
+  "one_of_Colon_6900": "uno di:",
+  "one_or_more_Colon_6901": "uno o più:",
   "options_6024": "opzioni",
   "or_expected_1144": "È previsto '{' o ';'.",
   "package_json_does_not_have_a_0_field_6100": "Il file 'package.json' non contiene un campo '{0}'.",
@@ -1507,6 +1785,9 @@
   "this_cannot_be_referenced_in_constructor_arguments_2333": "Non è possibile fare riferimento a 'this' in argomenti del costruttore.",
   "this_cannot_be_referenced_in_current_location_2332": "Non è possibile fare riferimento a 'this' nella posizione corrente.",
   "this_implicitly_has_type_any_because_it_does_not_have_a_type_annotation_2683": "'this' contiene implicitamente il tipo 'any' perché non include un'annotazione di tipo.",
+  "true_if_composite_false_otherwise_6909": "`true` se è `composite`; in caso contrario, `false`",
+  "tsc_Colon_The_TypeScript_Compiler_6922": "tsc: il compilatore TypeScript",
+  "type_Colon_6902": "tipo:",
   "unique_symbol_types_are_not_allowed_here_1335": "I tipi 'unique symbol' non sono consentiti in questo punto.",
   "unique_symbol_types_are_only_allowed_on_variables_in_a_variable_statement_1334": "I tipi 'unique symbol' sono consentiti solo nelle variabili in un'istruzione di variabile.",
   "unique_symbol_types_may_not_be_used_on_a_variable_declaration_with_a_binding_name_1333": "Non è possibile usare i tipi 'unique symbol' in una dichiarazione di variabile con nome di binding.",
@@ -1514,5 +1795,6 @@
   "use_strict_directive_used_here_1349": "In questo punto è stata usata la direttiva 'use strict'.",
   "with_statements_are_not_allowed_in_an_async_function_block_1300": "Le istruzioni 'with' non sono consentite in un blocco di funzione asincrona.",
   "with_statements_are_not_allowed_in_strict_mode_1101": "Le istruzioni 'with' non sono consentite in modalità strict.",
+  "yield_expression_implicitly_results_in_an_any_type_because_its_containing_generator_lacks_a_return_t_7057": "Con l'espressione 'yield' viene restituito implicitamente un tipo 'any' perché per il generatore che lo contiene non è presente un'annotazione di tipo restituito.",
   "yield_expressions_cannot_be_used_in_a_parameter_initializer_2523": "Non è possibile usare le espressioni 'yield' in un inizializzatore di parametri."
 }
\ No newline at end of file
diff --git a/node_modules/typescript/lib/ja/diagnosticMessages.generated.json b/node_modules/typescript/lib/ja/diagnosticMessages.generated.json
index d000046..dd23071 100644
--- a/node_modules/typescript/lib/ja/diagnosticMessages.generated.json
+++ b/node_modules/typescript/lib/ja/diagnosticMessages.generated.json
@@ -1,4 +1,5 @@
 {
+  "ALL_COMPILER_OPTIONS_6917": "すべてのコンパイラ オプション",
   "A_0_modifier_cannot_be_used_with_an_import_declaration_1079": "'{0}' 修飾子とインポート宣言は同時に使用できません。",
   "A_0_modifier_cannot_be_used_with_an_interface_declaration_1045": "'{0}' 修飾子とインターフェイス宣言は同時に使用できません。",
   "A_0_parameter_must_be_the_first_parameter_2680": "'{0}' パラメーターは最初のパラメーターである必要があります。",
@@ -15,7 +16,7 @@
   "A_class_member_cannot_have_the_0_keyword_1248": "クラス メンバーに '{0}' キーワードを指定することはできません。",
   "A_comma_expression_is_not_allowed_in_a_computed_property_name_1171": "コンマ式は計算されたプロパティ名では使用できません。",
   "A_computed_property_name_cannot_reference_a_type_parameter_from_its_containing_type_2467": "計算されたプロパティ名は、型パラメーターをそれを含む型から参照することはできません。",
-  "A_computed_property_name_in_a_class_property_declaration_must_refer_to_an_expression_whose_type_is_a_1166": "クラス プロパティ宣言内の計算されたプロパティ名は、型がリテラル型または 'unique symbol' 型の式を参照する必要があります。",
+  "A_computed_property_name_in_a_class_property_declaration_must_have_a_simple_literal_type_or_a_unique_1166": "クラス プロパティ宣言内の計算されたプロパティ名には、単純なリテラル型または 'unique symbol' 型が必要です。",
   "A_computed_property_name_in_a_method_overload_must_refer_to_an_expression_whose_type_is_a_literal_ty_1168": "メソッド オーバーロード内の計算されたプロパティ名は、型がリテラル型または 'unique symbol' 型の式を参照する必要があります。",
   "A_computed_property_name_in_a_type_literal_must_refer_to_an_expression_whose_type_is_a_literal_type__1170": "型リテラル内の計算されたプロパティ名は、型がリテラル型または 'unique symbol' 型の式を参照する必要があります。",
   "A_computed_property_name_in_an_ambient_context_must_refer_to_an_expression_whose_type_is_a_literal_t_1165": "環境コンテキスト内の計算されたプロパティ名は、型がリテラル型または 'unique symbol' 型の式を参照する必要があります。",
@@ -33,24 +34,25 @@
   "A_decorator_can_only_decorate_a_method_implementation_not_an_overload_1249": "デコレーターが装飾できるのは、オーバーロードではなく、メソッドの実装のみです。",
   "A_default_clause_cannot_appear_more_than_once_in_a_switch_statement_1113": "'default' 句を 'switch' ステートメントで複数回使用することはできません。",
   "A_default_export_can_only_be_used_in_an_ECMAScript_style_module_1319": "既定のエクスポートは、ECMAScript スタイルのモジュールでのみ使用できます。",
+  "A_default_export_must_be_at_the_top_level_of_a_file_or_module_declaration_1258": "既定のエクスポートは、ファイルまたはモジュールの宣言のトップレベルにある必要があります。",
   "A_definite_assignment_assertion_is_not_permitted_in_this_context_1255": "限定代入アサーション '!' は、このコンテキストで許可されていません。",
   "A_destructuring_declaration_must_have_an_initializer_1182": "非構造化宣言には初期化子が必要です。",
-  "A_dynamic_import_call_in_ES5_SlashES3_requires_the_Promise_constructor_Make_sure_you_have_a_declarat_2712": "ES5/ES3 の動的インポート呼び出しには、'Promise' コンストラクターが必要です。'Promise' コンストラクターの宣言があることを確認するか、`--lib` オプションに 'ES2015' を組み込んでください。",
-  "A_dynamic_import_call_returns_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_include_ES20_2711": "動的インポート呼び出しは 'Promise' を返します。'Promise' の宣言があること、または `--lib` オプションに 'ES2015' を含めていることをご確認ください。",
+  "A_dynamic_import_call_in_ES5_SlashES3_requires_the_Promise_constructor_Make_sure_you_have_a_declarat_2712": "ES5/ES3 の動的インポート呼び出しには、'Promise' コンストラクターが必要です。'Promise' コンストラクターの宣言があることを確認するか、'--lib' オプションに 'ES2015' を組み込んでください。",
+  "A_dynamic_import_call_returns_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_include_ES20_2711": "動的インポート呼び出しは 'Promise' を返します。'Promise' の宣言があること、または '--lib' オプションに 'ES2015' を含めていることをご確認ください。",
   "A_file_cannot_have_a_reference_to_itself_1006": "ファイルにそれ自体への参照を含めることはできません。",
-  "A_for_await_of_statement_is_only_allowed_within_an_async_function_or_async_generator_1103": "'for-await-of' ステートメントは、非同期関数または非同期ジェネレーターの中でのみ使用できます。",
   "A_function_returning_never_cannot_have_a_reachable_end_point_2534": "'never' を返す関数には、到達可能なエンド ポイントがありません。",
   "A_function_that_is_called_with_the_new_keyword_cannot_have_a_this_type_that_is_void_2679": "'new' キーワードで呼び出される関数に、'void' である 'this' 型を使用することはできません。",
   "A_function_whose_declared_type_is_neither_void_nor_any_must_return_a_value_2355": "宣言された型が 'void' でも 'any' でもない関数は値を返す必要があります。",
   "A_generator_cannot_have_a_void_type_annotation_2505": "ジェネレーターに 'void' 型の注釈を指定することはできません。",
   "A_get_accessor_cannot_have_parameters_1054": "'get' アクセサーにパラメーターを指定することはできません。",
+  "A_get_accessor_must_be_at_least_as_accessible_as_the_setter_2808": "get アクセサーは、少なくともセッターと同程度にアクセス可能である必要があります",
   "A_get_accessor_must_return_a_value_2378": "'get' アクセサーは値を返す必要があります。",
   "A_label_is_not_allowed_here_1344": "A ラベルはここでは使用できません。",
   "A_labeled_tuple_element_is_declared_as_optional_with_a_question_mark_after_the_name_and_before_the_c_5086": "ラベル付きのタプル要素を optional として宣言するには、型の後ではなく名前の後とコロンの前に疑問符を付けます。",
   "A_labeled_tuple_element_is_declared_as_rest_with_a_before_the_name_rather_than_before_the_type_5087": "ラベル付きのタプル要素を rest として宣言するには、型の前ではなく名前の前に '...' を付けます。",
   "A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_memb_2651": "列挙型宣言のメンバー初期化子は、他の列挙型で定義されたメンバーを含め、その後で宣言されたメンバーを参照できません。",
-  "A_method_cannot_be_named_with_a_private_identifier_18022": "メソッドに private 識別子を付けることはできません。",
   "A_mixin_class_must_have_a_constructor_with_a_single_rest_parameter_of_type_any_2545": "mixin クラスには、型 'any[]' の単一の rest パラメーターを持つコンストラクターが必要です。",
+  "A_mixin_class_that_extends_from_a_type_variable_containing_an_abstract_construct_signature_must_also_2797": "抽象コンストラクト シグネチャを含む型変数から拡張される mixin クラスも、'abstract' として宣言する必要があります。",
   "A_module_cannot_have_multiple_default_exports_2528": "モジュールに複数の既定のエクスポートを含めることはできません。",
   "A_namespace_declaration_cannot_be_in_a_different_file_from_a_class_or_function_with_which_it_is_merg_2433": "名前空間宣言は、それとマージするクラスや関数と異なるファイルに配置できません。",
   "A_namespace_declaration_cannot_be_located_prior_to_a_class_or_function_with_which_it_is_merged_2434": "名前空間宣言は、それとマージするクラスや関数より前に配置できません。",
@@ -71,10 +73,10 @@
   "A_required_element_cannot_follow_an_optional_element_1257": "必須要素を省略可能な要素の後に指定することはできません。",
   "A_required_parameter_cannot_follow_an_optional_parameter_1016": "必須パラメーターを省略可能なパラメーターの後に指定することはできません。",
   "A_rest_element_cannot_contain_a_binding_pattern_2501": "rest 要素にバインド パターンを含めることはできません。",
+  "A_rest_element_cannot_follow_another_rest_element_1265": "rest 要素を別の rest 要素の後に指定することはできません。",
   "A_rest_element_cannot_have_a_property_name_2566": "rest 要素にプロパティ名を指定することはできません。",
   "A_rest_element_cannot_have_an_initializer_1186": "rest 要素に初期化子を指定することはできません。",
   "A_rest_element_must_be_last_in_a_destructuring_pattern_2462": "rest 要素は非構造化パターンの最後に指定する必要があります。",
-  "A_rest_element_must_be_last_in_a_tuple_type_1256": "rest 要素はタプル型の最後に指定する必要があります。",
   "A_rest_element_type_must_be_an_array_type_2574": "rest 要素型は配列型である必要があります。",
   "A_rest_parameter_cannot_be_optional_1047": "rest パラメーターを省略可能にすることはできません。",
   "A_rest_parameter_cannot_have_an_initializer_1048": "rest パラメーターに初期化子を指定することはできません。",
@@ -82,6 +84,7 @@
   "A_rest_parameter_must_be_of_an_array_type_2370": "rest パラメーターは配列型でなければなりません。",
   "A_rest_parameter_or_binding_pattern_may_not_have_a_trailing_comma_1013": "rest パラメーターまたはバインド パターンに末尾のコンマがない可能性があります。",
   "A_return_statement_can_only_be_used_within_a_function_body_1108": "'return' ステートメントは、関数本体でのみ使用できます。",
+  "A_return_statement_cannot_be_used_inside_a_class_static_block_18041": "'return' ステートメントの使用が無効です。クラスの静的ブロック内では使用できません。",
   "A_series_of_entries_which_re_map_imports_to_lookup_locations_relative_to_the_baseUrl_6167": "'baseUrl' の相対的な場所を検索するためにインポートを再マップする一連のエントリ。",
   "A_set_accessor_cannot_have_a_return_type_annotation_1095": "'set' アクセサーに、戻り値の型の注釈を指定することはできません。",
   "A_set_accessor_cannot_have_an_optional_parameter_1051": "'set' アクセサーに、省略可能パラメーターを指定することはできません。",
@@ -89,6 +92,7 @@
   "A_set_accessor_must_have_exactly_one_parameter_1049": "'set' アクセサーにはパラメーターを 1 つだけ指定しなければなりません。",
   "A_set_accessor_parameter_cannot_have_an_initializer_1052": "'set' アクセサーのパラメーターに初期化子を含めることはできません。",
   "A_signature_with_an_implementation_cannot_use_a_string_literal_type_2381": "実装のシグネチャには文字列リテラル型は使用できません。",
+  "A_spread_argument_must_either_have_a_tuple_type_or_be_passed_to_a_rest_parameter_2556": "spread 引数には、組の種類を指定するか、rest パラメーターに渡す必要があります。",
   "A_super_call_must_be_the_first_statement_in_the_constructor_when_a_class_contains_initialized_proper_2376": "'super' の呼び出しは、初期化されたプロパティ、パラメーターのプロパティ、private 識別子がクラスに含まれている場合は、コンストラクターの最初のステートメントである必要があります。",
   "A_this_based_type_guard_is_not_compatible_with_a_parameter_based_type_guard_2518": "'this' ベース型のガードはパラメーター ベース型のガードとは互換性がありません。",
   "A_this_type_is_available_only_in_a_non_static_member_of_a_class_or_interface_2526": "'this' 型はクラスまたはインターフェイスの静的でないメンバーでのみ使用できます。",
@@ -114,8 +118,11 @@
   "Add_a_return_statement_95111": "return ステートメントを追加する",
   "Add_all_missing_async_modifiers_95041": "不足しているすべての 'async' 修飾子を追加します",
   "Add_all_missing_call_parentheses_95068": "見つからない呼び出しのかっこをすべて追加します",
+  "Add_all_missing_function_declarations_95157": "不足しているすべての関数宣言を追加します",
   "Add_all_missing_imports_95064": "不足しているすべてのインポートを追加する",
   "Add_all_missing_members_95022": "不足しているすべてのメンバーを追加します",
+  "Add_all_missing_override_modifiers_95162": "不足しているすべての 'override' 修飾子を追加する",
+  "Add_all_missing_properties_95166": "不足しているすべてのプロパティを追加する",
   "Add_all_missing_return_statement_95114": "不足しているすべての return ステートメントを追加する",
   "Add_all_missing_super_calls_95039": "不足しているすべての super の呼び出しを追加します",
   "Add_async_modifier_to_containing_function_90029": "含まれている関数に async 修飾子を追加します",
@@ -135,18 +142,22 @@
   "Add_initializers_to_all_uninitialized_properties_95027": "初期化されていないすべてのプロパティに初期化子を追加します",
   "Add_missing_call_parentheses_95067": "見つからない呼び出しのかっこを追加します",
   "Add_missing_enum_member_0_95063": "不足している列挙型メンバー '{0}' を追加する",
+  "Add_missing_function_declaration_0_95156": "不足している関数宣言 '{0}' を追加します",
   "Add_missing_new_operator_to_all_calls_95072": "不足している 'new' 演算子をすべての呼び出しに追加する",
   "Add_missing_new_operator_to_call_95071": "不足している 'new' 演算子を呼び出しに追加する",
+  "Add_missing_properties_95165": "不足しているすべてのプロパティの追加",
   "Add_missing_super_call_90001": "欠落している 'super()' 呼び出しを追加する",
   "Add_missing_typeof_95052": "不足している 'typeof' を追加します",
   "Add_names_to_all_parameters_without_names_95073": "名前のないすべてのパラメーターに名前を追加する",
   "Add_or_remove_braces_in_an_arrow_function_95058": "アロー関数内の中かっこを追加または削除します",
+  "Add_override_modifier_95160": "'override' 修飾子を追加する",
   "Add_parameter_name_90034": "パラメーター名を追加する",
   "Add_qualifier_to_all_unresolved_variables_matching_a_member_name_95037": "メンバー名と一致するすべての未解決の変数に修飾子を追加します",
   "Add_this_parameter_95104": "'this' パラメーターを追加します。",
   "Add_this_tag_95103": "'@this' タグの追加",
   "Add_to_all_uncalled_decorators_95044": "呼び出されていないすべてのデコレーターに '()' を追加します",
   "Add_ts_ignore_to_all_error_messages_95042": "すべてのエラー メッセージに '@ts-ignore' を追加します",
+  "Add_undefined_to_a_type_when_accessed_using_an_index_6674": "インデックスを使用してアクセスした場合は、'undefined' を型に追加します。",
   "Add_undefined_type_to_all_uninitialized_properties_95029": "初期化されていないすべてのプロパティに未定義の型を追加します",
   "Add_undefined_type_to_property_0_95018": "プロパティ '{0}' に '未定義' の型を追加します",
   "Add_unknown_conversion_for_non_overlapping_types_95069": "重複していない型に対して 'unknown' 変換を追加する",
@@ -154,8 +165,6 @@
   "Add_void_to_Promise_resolved_without_a_value_95143": "値なしで解決された Promise に 'void' を追加します",
   "Add_void_to_all_Promises_resolved_without_a_value_95144": "値なしで解決されたすべての Promise に 'void' を追加します",
   "Adding_a_tsconfig_json_file_will_help_organize_projects_that_contain_both_TypeScript_and_JavaScript__5068": "tsconfig.json ファイルを追加すると、TypeScript ファイルと JavaScript ファイルの両方を含むプロジェクトを整理できます。詳細については、https://aka.ms/tsconfig をご覧ください。",
-  "Additional_Checks_6176": "追加のチェック",
-  "Advanced_Options_6178": "詳細オプション",
   "All_declarations_of_0_must_have_identical_modifiers_2687": "'{0}' のすべての宣言には、同一の修飾子が必要です。",
   "All_declarations_of_0_must_have_identical_type_parameters_2428": "'{0}' のすべての宣言には、同一の型パラメーターがある必要があります。",
   "All_declarations_of_an_abstract_method_must_be_consecutive_2516": "抽象メソッドの宣言はすべて連続している必要があります。",
@@ -163,34 +172,38 @@
   "All_imports_in_import_declaration_are_unused_6192": "インポート宣言内のインポートはすべて未使用です。",
   "All_type_parameters_are_unused_6205": "すべての型パラメーターが使用されていません。",
   "All_variables_are_unused_6199": "すべての変数は未使用です。",
-  "Allow_accessing_UMD_globals_from_modules_95076": "モジュールから UMD グローバルへのアクセスを許可します。",
+  "Allow_JavaScript_files_to_be_a_part_of_your_program_Use_the_checkJS_option_to_get_errors_from_these__6600": "JavaScript ファイルをプログラムの一部として使用することを許可します。'checkJS' オプションを使用して、これらのファイルからエラーを取得してください。",
+  "Allow_accessing_UMD_globals_from_modules_6602": "モジュールから UMD グローバルへのアクセスを許可します。",
   "Allow_default_imports_from_modules_with_no_default_export_This_does_not_affect_code_emit_just_typech_6011": "既定のエクスポートがないモジュールからの既定のインポートを許可します。これは、型チェックのみのため、コード生成には影響を与えません。",
+  "Allow_import_x_from_y_when_a_module_doesn_t_have_a_default_export_6601": "モジュールに既定のエクスポートがない場合は、'import x from y' を許可します。",
+  "Allow_importing_helper_functions_from_tslib_once_per_project_instead_of_including_them_per_file_6639": "tslib からヘルパー関数をファイルごとに含めるのではなく、プロジェクトごとに 1 回インポートすることを許可します。",
   "Allow_javascript_files_to_be_compiled_6102": "javascript ファイルのコンパイルを許可します。",
+  "Allow_multiple_folders_to_be_treated_as_one_when_resolving_modules_6691": "モジュールを解決するときに複数のフォルダーを 1 つのフォルダーとして処理することを許可します。",
   "Already_included_file_name_0_differs_from_file_name_1_only_in_casing_1261": "既に含まれているファイル名 '{0}' は、ファイル名 '{1}' と大文字と小文字の指定だけが異なります。",
   "Ambient_module_declaration_cannot_specify_relative_module_name_2436": "アンビエント モジュール宣言では、相対モジュール名を指定できません。",
   "Ambient_modules_cannot_be_nested_in_other_modules_or_namespaces_2435": "アンビエント モジュールを、他のモジュールまたは名前空間内の入れ子にすることはできません。",
   "An_AMD_module_cannot_have_multiple_name_assignments_2458": "AMD モジュールに複数の名前を代入することはできません。",
   "An_abstract_accessor_cannot_have_an_implementation_1318": "抽象アクセサーに実装を含めることはできません。",
   "An_accessibility_modifier_cannot_be_used_with_a_private_identifier_18010": "アクセシビリティ修飾子を private 識別子と共に使用することはできません。",
-  "An_accessor_cannot_be_named_with_a_private_identifier_18023": "private 識別子を使用してアクセサーに名前を付けることはできません。",
   "An_accessor_cannot_have_type_parameters_1094": "アクセサーに型パラメーターを指定することはできません。",
   "An_ambient_module_declaration_is_only_allowed_at_the_top_level_in_a_file_1234": "アンビエント モジュール宣言は、ファイルの最上位にのみ使用できます。",
   "An_argument_for_0_was_not_provided_6210": "'{0}' の引数が指定されていません。",
   "An_argument_matching_this_binding_pattern_was_not_provided_6211": "このバインド パターンに一致する引数が指定されていません。",
   "An_arithmetic_operand_must_be_of_type_any_number_bigint_or_an_enum_type_2356": "算術オペランドは 'any' 型、'number' 型、’bigint' 型、列挙型のいずれかである必要があります。",
   "An_arrow_function_cannot_have_a_this_parameter_2730": "アロー関数に 'this' パラメーターを指定することはできません。",
-  "An_async_function_or_method_in_ES5_SlashES3_requires_the_Promise_constructor_Make_sure_you_have_a_de_2705": "ES5/ES3 の非同期の関数またはメソッドには、'Promise' コンストラクターが必要です。'Promise' コンストラクターの宣言があることを確認するか、`--lib` オプションに 'ES2015' を組み込んでください。",
+  "An_async_function_or_method_in_ES5_SlashES3_requires_the_Promise_constructor_Make_sure_you_have_a_de_2705": "ES5/ES3 の非同期の関数またはメソッドには、'Promise' コンストラクターが必要です。'Promise' コンストラクターの宣言があることを確認するか、'--lib' オプションに 'ES2015' を組み込んでください。",
   "An_async_function_or_method_must_have_a_valid_awaitable_return_type_1057": "非同期関数または非同期メソッドには、有効で待機可能な戻り値の型を指定する必要があります。",
-  "An_async_function_or_method_must_return_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_in_2697": "非同期関数またはメソッドは 'Promise' を返す必要があります。'Promise' の宣言があること、または `--lib` オプションに 'ES2015' を含めていることを確認してください。",
+  "An_async_function_or_method_must_return_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_in_2697": "非同期関数またはメソッドは 'Promise' を返す必要があります。'Promise' の宣言があること、または '--lib' オプションに 'ES2015' を含めていることを確認してください。",
   "An_async_iterator_must_have_a_next_method_2519": "非同期反復子には 'next()' メソッドが必要です。",
   "An_element_access_expression_should_take_an_argument_1011": "要素アクセス式では、引数を取る必要があります。",
   "An_enum_member_cannot_be_named_with_a_private_identifier_18024": "private 識別子を使用して列挙型メンバーに名前を付けることはできません。",
   "An_enum_member_cannot_have_a_numeric_name_2452": "列挙型メンバーに数値名を含めることはできません。",
   "An_enum_member_name_must_be_followed_by_a_or_1357": "列挙型メンバー名の後には、','、'='、'}' のいずれかを指定する必要があります。",
-  "An_export_assignment_can_only_be_used_in_a_module_1231": "エクスポートの代入はモジュールでのみ使用可能です。",
+  "An_expanded_version_of_this_information_showing_all_possible_compiler_options_6928": "使用可能なすべてのコンパイラ オプションを示す、この情報の拡張バージョン",
   "An_export_assignment_cannot_be_used_in_a_module_with_other_exported_elements_2309": "エクスポートの代入は、エクスポートされた他の要素を含むモジュールでは使用できません。",
   "An_export_assignment_cannot_be_used_in_a_namespace_1063": "エクスポートの代入は、名前空間では使用できません。",
   "An_export_assignment_cannot_have_modifiers_1120": "エクスポートの代入に修飾子を指定することはできません。",
+  "An_export_assignment_must_be_at_the_top_level_of_a_file_or_module_declaration_1231": "エクスポートの割り当ては、ファイルまたはモジュールの宣言のトップレベルにある必要があります。",
   "An_export_declaration_can_only_be_used_in_a_module_1233": "エクスポート宣言はモジュールでのみ使用可能です。",
   "An_export_declaration_cannot_have_modifiers_1193": "エクスポート宣言に修飾子を指定することはできません。",
   "An_expression_of_type_void_cannot_be_tested_for_truthiness_1345": "'void' 型の式は、真実性をテストできません。",
@@ -212,9 +225,8 @@
   "An_index_signature_parameter_cannot_have_an_accessibility_modifier_1018": "インデックス シグネチャのパラメーターにアクセシビリティ修飾子を指定することはできません。",
   "An_index_signature_parameter_cannot_have_an_initializer_1020": "インデックス シグネチャのパラメーターに初期化子を指定することはできません。",
   "An_index_signature_parameter_must_have_a_type_annotation_1022": "インデックス シグネチャのパラメーターには型の注釈が必要です。",
-  "An_index_signature_parameter_type_cannot_be_a_type_alias_Consider_writing_0_Colon_1_Colon_2_instead_1336": "インデックス シグネチャのパラメーターの型を型のエイリアスにすることはできません。代わりに、'[{0}: {1}]: {2}' と記述することをご検討ください。",
-  "An_index_signature_parameter_type_cannot_be_a_union_type_Consider_using_a_mapped_object_type_instead_1337": "インデックス シグネチャのパラメーターの型を共用体型にすることはできません。代わりに、マップされたオブジェクト型の使用をご検討ください。",
-  "An_index_signature_parameter_type_must_be_either_string_or_number_1023": "インデックス シグネチャのパラメーターの型は 'string' または 'number' のいずれかである必要があります。",
+  "An_index_signature_parameter_type_cannot_be_a_literal_type_or_generic_type_Consider_using_a_mapped_o_1337": "インデックス シグネチャ パラメーターの型をリテラル型またはジェネリック型にすることはできません。代わりに、マップされたオブジェクト型の使用を検討してください。",
+  "An_index_signature_parameter_type_must_be_string_number_symbol_or_a_template_literal_type_1268": "インデックス シグネチャ パラメーター型は、'string'、'number'、'symbol'、またはテンプレート リテラルの型である必要があります。",
   "An_interface_can_only_extend_an_identifier_Slashqualified_name_with_optional_type_arguments_2499": "インターフェイスが拡張するのは、オプションの型引数が指定された識別子/完全修飾名のみです。",
   "An_interface_can_only_extend_an_object_type_or_intersection_of_object_types_with_statically_known_me_2312": "インターフェイスが拡張できるのは、オブジェクト型または静的な既知のメンバーを持つオブジェクト型の積集合のみです。",
   "An_interface_property_cannot_have_an_initializer_1246": "インターフェイス プロパティに初期化子を使用することはできません。",
@@ -225,6 +237,7 @@
   "An_object_literal_cannot_have_property_and_accessor_with_the_same_name_1119": "オブジェクト リテラルには、同じ名前のプロパティおよびアクセサーを指定することはできません。",
   "An_object_member_cannot_be_declared_optional_1162": "オブジェクト メンバーを省略可能として宣言することはできません。",
   "An_optional_chain_cannot_contain_private_identifiers_18030": "省略可能なチェーンには、pirvate 識別子を含めることはできません。",
+  "An_optional_element_cannot_follow_a_rest_element_1266": "省略可能な要素を rest 要素の後に指定することはできません。",
   "An_outer_value_of_this_is_shadowed_by_this_container_2738": "'this' の外部値がこのコンテナーによってシャドウされています。",
   "An_overload_signature_cannot_be_declared_as_a_generator_1222": "オーバーロード シグネチャをジェネレーターとして宣言することはできません。",
   "An_unary_expression_with_the_0_operator_is_not_allowed_in_the_left_hand_side_of_an_exponentiation_ex_17006": "累乗式の左辺で '{0}' 演算子を含む単項式を使用することはできません。式を括弧で囲むことを検討してください。",
@@ -244,33 +257,47 @@
   "Augmentations_for_the_global_scope_can_only_be_directly_nested_in_external_modules_or_ambient_module_2669": "グローバル スコープの拡張を直接入れ子にできるのは、外部モジュールまたは環境モジュールの宣言内のみです。",
   "Augmentations_for_the_global_scope_should_have_declare_modifier_unless_they_appear_in_already_ambien_2670": "グローバル スコープの拡張は、環境コンテキストに既にある場合を除いて、'declare' 修飾子を使用する必要があります。",
   "Auto_discovery_for_typings_is_enabled_in_project_0_Running_extra_resolution_pass_for_module_1_using__6140": "プロジェクト '{0}' で型指定の自動検出が有効になっています。キャッシュの場所 '{2}' を使用して、モジュール '{1}' に対して追加の解決パスを実行しています。",
+  "Await_expression_cannot_be_used_inside_a_class_static_block_18037": "await 式はクラスの静的ブロック内では使用できません。",
+  "BUILD_OPTIONS_6919": "ビルド オプション",
+  "Backwards_Compatibility_6253": "下位互換性",
   "Base_class_expressions_cannot_reference_class_type_parameters_2562": "基底クラスの式ではクラスの型パラメーターを参照することはできません。",
   "Base_constructor_return_type_0_is_not_an_object_type_or_intersection_of_object_types_with_statically_2509": "基底コンストラクターの戻り値の型 '{0}' が、オブジェクト型または静的な既知のメンバーを持つオブジェクト型の積集合ではありません。",
   "Base_constructors_must_all_have_the_same_return_type_2510": "既定コンストラクターの戻り値の型は、すべて同じである必要があります。",
   "Base_directory_to_resolve_non_absolute_module_names_6083": "相対モジュール名を解決するためのベース ディレクトリ。",
-  "Basic_Options_6172": "基本オプション",
   "BigInt_literals_are_not_available_when_targeting_lower_than_ES2020_2737": "ターゲットが ES2020 未満の場合、bigint リテラルは使用できません。",
   "Binary_digit_expected_1177": "2 進の数字が必要です。",
   "Binding_element_0_implicitly_has_an_1_type_7031": "バインド要素 '{0}' には暗黙的に '{1}' 型が含まれます。",
   "Block_scoped_variable_0_used_before_its_declaration_2448": "ブロック スコープの変数 '{0}' が、宣言の前に使用されています。",
-  "Build_all_projects_including_those_that_appear_to_be_up_to_date_6368": "最新の状態であると思われるものを含むすべてのプロジェクトをビルドします",
+  "Build_a_composite_project_in_the_working_directory_6925": "作業ディレクトリに複合プロジェクトを作成します。",
+  "Build_all_projects_including_those_that_appear_to_be_up_to_date_6636": "最新の状態であると思われるものを含むすべてのプロジェクトをビルドします",
   "Build_one_or_more_projects_and_their_dependencies_if_out_of_date_6364": "最新でない場合は、1 つ以上のプロジェクトとその依存関係をビルドします",
   "Build_option_0_requires_a_value_of_type_1_5073": "ビルド オプション '{0}' には型 {1} の値が必要です。",
   "Building_project_0_6358": "プロジェクト \"{0}\" をビルドしています...",
+  "COMMAND_LINE_FLAGS_6921": "コマンドライン フラグ",
+  "COMMON_COMMANDS_6916": "一般的なコマンド",
+  "COMMON_COMPILER_OPTIONS_6920": "一般的なコンパイラ オプション",
   "Call_decorator_expression_90028": "デコレーター式を呼び出す",
   "Call_signature_return_types_0_and_1_are_incompatible_2202": "呼び出しシグネチャの戻り値の型 '{0}' と '{1}' には互換性がありません。",
   "Call_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type_7020": "戻り値の型の注釈がない呼び出しシグネチャの戻り値の型は、暗黙的に 'any' になります。",
   "Call_signatures_with_no_arguments_have_incompatible_return_types_0_and_1_2204": "引数なしの呼び出しシグネチャに、互換性のない戻り値の型 '{0}' と '{1}' が含まれています。",
   "Call_target_does_not_contain_any_signatures_2346": "呼び出しターゲットにシグネチャが含まれていません。",
   "Can_only_convert_logical_AND_access_chains_95142": "論理 AND のアクセス チェーンのみを変換できます",
+  "Can_only_convert_named_export_95164": "名前付きエクスポートのみを変換できます",
   "Can_only_convert_property_with_modifier_95137": "修飾子を伴うプロパティの変換のみ可能です",
+  "Can_only_convert_string_concatenation_95154": "変換できるのは文字列の連結のみです",
   "Cannot_access_0_1_because_0_is_a_type_but_not_a_namespace_Did_you_mean_to_retrieve_the_type_of_the_p_2713": "'{0}.{1}' にアクセスできません。'{0}' は型で、名前空間ではありません。'{0}[\"{1}\"]' で '{0}' のプロパティ '{1}' の型を取得するつもりでしたか?",
   "Cannot_access_ambient_const_enums_when_the_isolatedModules_flag_is_provided_2748": "'--isolatedModules' フラグが指定されている場合、アンビエント const 列挙型にはアクセスできません。",
   "Cannot_assign_a_0_constructor_type_to_a_1_constructor_type_2672": "'{0}' コンストラクター型を '{1}' コンストラクター型に割り当てることができません。",
   "Cannot_assign_an_abstract_constructor_type_to_a_non_abstract_constructor_type_2517": "抽象コンストラクター型を非抽象コンストラクター型に割り当てることはできません。",
+  "Cannot_assign_to_0_because_it_is_a_class_2629": "クラスであるため、'{0}' に割り当てることはできません。",
   "Cannot_assign_to_0_because_it_is_a_constant_2588": "定数であるため、'{0}' に代入することはできません。",
+  "Cannot_assign_to_0_because_it_is_a_function_2630": "関数であるため、'{0}' に割り当てることはできません。",
+  "Cannot_assign_to_0_because_it_is_a_namespace_2631": "名前空間であるため、'{0}' に割り当てることはできません。",
   "Cannot_assign_to_0_because_it_is_a_read_only_property_2540": "読み取り専用プロパティであるため、'{0}' に代入することはできません。",
+  "Cannot_assign_to_0_because_it_is_an_enum_2628": "列挙型であるため、'{0}' に割り当てることはできません。",
+  "Cannot_assign_to_0_because_it_is_an_import_2632": "インポートであるため、'{0}' に割り当てることはできません。",
   "Cannot_assign_to_0_because_it_is_not_a_variable_2539": "変数ではないため、'{0}' に割り当てられません。",
+  "Cannot_assign_to_private_method_0_Private_methods_are_not_writable_2803": "プライベート メソッド '{0}' に割り当てることはできません。プライベート メソッドは書き込み可能ではありません。",
   "Cannot_augment_module_0_because_it_resolves_to_a_non_module_entity_2671": "モジュール '{0}' は、モジュール以外のエンティティに解決するので拡張できません。",
   "Cannot_augment_module_0_with_value_exports_because_it_resolves_to_a_non_module_entity_2649": "モジュール '{0}' は、モジュール以外のエンティティに解決するため、値のエクスポートで拡張できません。",
   "Cannot_compile_modules_using_option_0_unless_the_module_flag_is_amd_or_system_6131": "'--module' フラグが 'amd' か 'system' でない限り、オプション '{0}' を使用してモジュールをコンパイルできません。",
@@ -292,14 +319,14 @@
   "Cannot_find_name_0_Did_you_mean_1_2552": "'{0}' という名前は見つかりません。'{1}' ですか?",
   "Cannot_find_name_0_Did_you_mean_the_instance_member_this_0_2663": "名前 '{0}' が見つかりません。インスタンス メンバー 'this.{0}' ですか?",
   "Cannot_find_name_0_Did_you_mean_the_static_member_1_0_2662": "名前 '{0}' が見つかりません。静的メンバー '{1}.{0}' ですか?",
-  "Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_2583": "名前 '{0}' が見つかりません。ターゲット ライブラリを変更する必要がありますか? `lib` コンパイラ オプションを '{1}' 以降に変更してみてください。",
-  "Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_2584": "名前 '{0}' が見つかりません。ターゲット ライブラリを変更しますか? `lib` コンパイラ オプションが 'dom' を含むように変更してみてください。",
+  "Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_2583": "名前 '{0}' が見つかりません。ターゲット ライブラリを変更する必要がありますか? 'lib' コンパイラ オプションを '{1}' 以降に変更してみてください。",
+  "Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_2584": "名前 '{0}' が見つかりません。ターゲット ライブラリを変更しますか? 'lib' コンパイラ オプションが 'dom' を含むように変更してみてください。",
   "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_a_test_runner_Try_npm_i_save_dev_type_2582": "名前 '{0}' が見つかりません。テスト ランナーの型定義をインストールする必要がありますか? `npm i --save-dev @types/jest` または `npm i --save-dev @types/mocha` をお試しください。",
-  "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_a_test_runner_Try_npm_i_save_dev_type_2593": "名前 '{0}' が見つかりません。テスト ランナーの型定義をインストールする必要がありますか? `npm i --save-dev @types/jest` または `npm i --save-dev @types/mocha` を試してから、お客様の tsconfig の型フィールドに `jest` または `mocha` を追加してください。",
+  "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_a_test_runner_Try_npm_i_save_dev_type_2593": "名前 '{0}' が見つかりません。テスト ランナーの型定義をインストールする必要がありますか? `npm i --save-dev @types/jest` または `npm i --save-dev @types/mocha` を試してから、tsconfig の型フィールドに 'jest' または 'mocha' を追加してください。",
   "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_jQuery_Try_npm_i_save_dev_types_Slash_2581": "名前 '{0}' が見つかりません。jQuery の型定義をインストールする必要がありますか? `npm i --save-dev @types/jquery` をお試しください。",
-  "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_jQuery_Try_npm_i_save_dev_types_Slash_2592": "名前 '{0}' が見つかりません。jQuery の型定義をインストールする必要がありますか? `npm i --save-dev @types/jquery` を試してから、お客様の tsconfig の型フィールドに `jquery` を追加してみてください。",
+  "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_jQuery_Try_npm_i_save_dev_types_Slash_2592": "名前 '{0}' が見つかりません。jQuery の型定義をインストールする必要がありますか? `npm i --save-dev @types/jquery` を試してから、tsconfig の型フィールドに 'jquery' を追加してみてください。",
   "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_node_Try_npm_i_save_dev_types_Slashno_2580": "名前 '{0}' が見つかりません。ノードの型定義をインストールする必要がありますか? `npm i --save-dev @types/node` をお試しください。",
-  "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_node_Try_npm_i_save_dev_types_Slashno_2591": "名前 '{0}' が見つかりません。ノードの型定義をインストールする必要がありますか? `npm i --save-dev @types/node` を試してから、お客様の tsconfig の型フィールドに `node` を追加してみてください。",
+  "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_node_Try_npm_i_save_dev_types_Slashno_2591": "名前 '{0}' が見つかりません。ノードの型定義をインストールする必要がありますか? `npm i --save-dev @types/node` を試してから、tsconfig の型フィールドに 'node' を追加してみてください。",
   "Cannot_find_namespace_0_2503": "名前空間 '{0}' が見つかりません。",
   "Cannot_find_parameter_0_1225": "パラメーター '{0}' が見つかりません。",
   "Cannot_find_the_common_subdirectory_path_for_the_input_files_5009": "入力ファイルの共通サブディレクトリ パスが見つかりません。",
@@ -318,11 +345,13 @@
   "Cannot_redeclare_block_scoped_variable_0_2451": "ブロック スコープの変数 '{0}' を再宣言することはできません。",
   "Cannot_redeclare_exported_variable_0_2323": "エクスポートされた変数 '{0}' を再び宣言できません。",
   "Cannot_redeclare_identifier_0_in_catch_clause_2492": "catch 句で識別子 '{0}' を再宣言することはできません。",
+  "Cannot_start_a_function_call_in_a_type_annotation_1441": "型の注釈で関数呼び出しを開始することはできません。",
   "Cannot_update_output_of_project_0_because_there_was_error_reading_file_1_6376": "ファイル '{1}' の読み取りでエラーが発生したため、プロジェクト '{0}' の出力を更新できません",
   "Cannot_use_JSX_unless_the_jsx_flag_is_provided_17004": "'--jsx' フラグが指定されていないと、JSX を使用できません。",
   "Cannot_use_imports_exports_or_module_augmentations_when_module_is_none_1148": "'--module' が 'none' である場合、インポート、エクスポート、モジュール拡張は使用できません。",
   "Cannot_use_namespace_0_as_a_type_2709": "名前空間 '{0}' を型として使用することはできません。",
   "Cannot_use_namespace_0_as_a_value_2708": "名前空間 '{0}' を値として使用することはできません。",
+  "Cannot_use_this_in_a_static_property_initializer_of_a_decorated_class_2816": "デコレートされたクラスの静的プロパティ初期化子で 'this' を使用できません。",
   "Cannot_write_file_0_because_it_will_overwrite_tsbuildinfo_file_generated_by_referenced_project_1_6377": "ファイル '{0}' は、参照先のプロジェクト '{1}' によって生成された '.tsbuildinfo' ファイルを上書きするため、書き込めません",
   "Cannot_write_file_0_because_it_would_be_overwritten_by_multiple_input_files_5056": "複数の入力ファイルで上書きされることになるため、ファイル '{0}' を書き込めません。",
   "Cannot_write_file_0_because_it_would_overwrite_input_file_5055": "入力ファイルを上書きすることになるため、ファイル '{0}' を書き込めません。",
@@ -334,6 +363,8 @@
   "Change_all_jsdoc_style_types_to_TypeScript_and_add_undefined_to_nullable_types_95031": "jsdoc スタイルのすべての型を TypeScript に変更します (さらに、'| undefined' を null 許容型に追加します)",
   "Change_extends_to_implements_90003": "'extends' を 'implements' に変更する",
   "Change_spelling_to_0_90022": "スペルを '{0}' に変更する",
+  "Check_for_class_properties_that_are_declared_but_not_set_in_the_constructor_6700": "宣言されているものの、コンストラクターで設定されていないクラス プロパティを確認します。",
+  "Check_that_the_arguments_for_bind_call_and_apply_methods_match_the_original_function_6697": "'bind'、'call'、'apply' のメソッドの引数が元の関数と一致することを確認します。",
   "Checking_if_0_is_the_longest_matching_prefix_for_1_2_6104": "'{0}' が '{1}' - '{2}' の最長一致のプレフィックスであるかを確認しています。",
   "Circular_definition_of_import_alias_0_2303": "インポート エイリアス '{0}' の循環定義です。",
   "Circularity_detected_while_resolving_configuration_Colon_0_18000": "構成: {0} の解決中に循環が検出されました",
@@ -345,7 +376,9 @@
   "Class_0_incorrectly_implements_class_1_Did_you_mean_to_extend_1_and_inherit_its_members_as_a_subclas_2720": "クラス '{0}' はクラス '{1}' を正しく実装していません。'{1}' を拡張し、そのメンバーをサブクラスとして継承しますか?",
   "Class_0_incorrectly_implements_interface_1_2420": "クラス '{0}' はインターフェイス '{1}' を正しく実装していません。",
   "Class_0_used_before_its_declaration_2449": "クラス '{0}' は宣言の前に使用されました。",
-  "Class_declarations_cannot_have_more_than_one_augments_or_extends_tag_8025": "クラス宣言で複数の '@augments' または `@extends` タグを使用することはできません。",
+  "Class_declaration_cannot_implement_overload_list_for_0_2813": "クラスの宣言では '{0}' のオーバーロード リストを実装できません。",
+  "Class_declarations_cannot_have_more_than_one_augments_or_extends_tag_8025": "クラスの宣言で複数の '@augments' または '@extends' タグを含めることはできません。",
+  "Class_decorators_can_t_be_used_with_static_private_identifier_Consider_removing_the_experimental_dec_18036": "クラス デコレーターは、静的プライベート識別子と共に使用することはできません。試験段階のデコレーターを削除することをご検討ください。",
   "Class_name_cannot_be_0_2414": "クラス名を '{0}' にすることはできません。",
   "Class_name_cannot_be_Object_when_targeting_ES5_with_module_0_2725": "モジュール {0} を使用して ES5 をターゲットとするときに、クラス名を 'オブジェクト' にすることはできません。",
   "Class_static_side_0_incorrectly_extends_base_class_static_side_1_2417": "クラス側の静的な '{0}' が基底クラス側の静的な '{1}' を正しく拡張していません。",
@@ -354,16 +387,25 @@
   "Classes_may_not_have_a_field_named_constructor_18006": "クラスに 'constructor' という名前のフィールドを含めることはできません。",
   "Command_line_Options_6171": "コマンド ライン オプション",
   "Compile_the_project_given_the_path_to_its_configuration_file_or_to_a_folder_with_a_tsconfig_json_6020": "構成ファイルか、'tsconfig.json' を含むフォルダーにパスが指定されたプロジェクトをコンパイルします。",
+  "Compiler_Diagnostics_6251": "コンパイラの診断",
   "Compiler_option_0_expects_an_argument_6044": "コンパイラ オプション '{0}' には引数が必要です。",
+  "Compiler_option_0_may_not_be_used_with_build_5094": "コンパイラオプション '--{0} ' は '--build ' と共に使用できない場合があります。",
+  "Compiler_option_0_may_only_be_used_with_build_5093": "コンパイラ オプション '--{0} ' は '--build ' とのみ使用できる場合があります。",
   "Compiler_option_0_requires_a_value_of_type_1_5024": "コンパイラ オプション '{0}' には {1} の型の値が必要です。",
   "Compiler_reserves_name_0_when_emitting_private_identifier_downlevel_18027": "private 識別子を下位レベルに生成するときに、コンパイラは名前 '{0}' を予約します。",
+  "Compiles_the_TypeScript_project_located_at_the_specified_path_6927": "指定されたパスにある TypeScript プロジェクトのコンパイル",
+  "Compiles_the_current_project_tsconfig_json_in_the_working_directory_6923": "現在のプロジェクト (作業ディレクトリ内の tsconfig.json) のコンパイル",
+  "Compiles_the_current_project_with_additional_settings_6929": "追加の設定を使用して、現在のプロジェクトをコンパイルします",
+  "Completeness_6257": "完全",
   "Composite_projects_may_not_disable_declaration_emit_6304": "複合プロジェクトで宣言の生成を無効にすることはできません。",
   "Composite_projects_may_not_disable_incremental_compilation_6379": "複合プロジェクトではインクリメンタル コンパイルを無効にできません。",
+  "Computed_from_the_list_of_input_files_6911": "入力ファイルのリストから計算されます。",
   "Computed_property_names_are_not_allowed_in_enums_1164": "計算されたプロパティ名は列挙型では使用できません。",
   "Computed_values_are_not_permitted_in_an_enum_with_string_valued_members_2553": "文字列値のメンバーを持つ列挙型では、計算値は許可されません。",
   "Concatenate_and_emit_output_to_single_file_6001": "出力を連結して 1 つのファイルを生成します。",
   "Conflicting_definitions_for_0_found_at_1_and_2_Consider_installing_a_specific_version_of_this_librar_4090": "'{0}' の定義が '{1}' および '{2}' で競合しています。競合を解決するには、このライブラリの特定バージョンのインストールをご検討ください。",
   "Conflicts_are_in_this_file_6201": "このファイル内に競合があります。",
+  "Consider_adding_a_declare_modifier_to_this_class_6506": "このクラスに 'declare' 修飾子を追加することを検討してください。",
   "Construct_signature_return_types_0_and_1_are_incompatible_2203": "コンストラクト シグネチャの戻り値の型 '{0}' と '{1}' には互換性がありません。",
   "Construct_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type_7013": "戻り値の型の注釈がないコンストラクト シグネチャの戻り値の型は、暗黙的に 'any' になります。",
   "Construct_signatures_with_no_arguments_have_incompatible_return_types_0_and_1_2205": "引数のないコンストラクト シグネチャには、互換性のない戻り値の型 '{0}' と '{1}' が含まれています。",
@@ -413,16 +455,24 @@
   "Convert_to_type_only_export_1364": "型のみのエクスポートに変換する",
   "Convert_to_type_only_import_1373": "型のみのインポートに変換する",
   "Corrupted_locale_file_0_6051": "ロケール ファイル {0} は破損しています。",
+  "Could_not_convert_to_anonymous_function_95153": "匿名関数に変換できませんでした",
+  "Could_not_convert_to_arrow_function_95151": "アロー関数に変換できませんでした",
+  "Could_not_convert_to_named_function_95152": "名前付き関数に変換できませんでした",
+  "Could_not_determine_function_return_type_95150": "関数の戻り値の型を特定できませんでした",
   "Could_not_find_a_containing_arrow_function_95127": "含まれているアロー関数が見つかりませんでした",
   "Could_not_find_a_declaration_file_for_module_0_1_implicitly_has_an_any_type_7016": "モジュール '{0}' の宣言ファイルが見つかりませんでした。'{1}' は暗黙的に 'any' 型になります。",
   "Could_not_find_convertible_access_expression_95140": "変換可能なアクセス式が見つかりませんでした",
   "Could_not_find_export_statement_95129": "export ステートメントが見つかりませんでした",
   "Could_not_find_import_clause_95131": "インポート句が見つかりませんでした",
   "Could_not_find_matching_access_expressions_95141": "一致するアクセス式が見つかりませんでした",
+  "Could_not_find_name_0_Did_you_mean_1_2570": "名前 '{0}' が見つかりませんでした。'{1}' ですか?",
   "Could_not_find_namespace_import_or_named_imports_95132": "名前空間のインポートまたは名前付きインポートが見つかりませんでした",
   "Could_not_find_property_for_which_to_generate_accessor_95135": "アクセサーを生成するプロパティが見つかりませんでした",
   "Could_not_resolve_the_path_0_with_the_extensions_Colon_1_6231": "次の拡張子を持つパス '{0}' を解決できませんでした: {1}。",
   "Could_not_write_file_0_Colon_1_5033": "ファイル '{0}' を書き込めませんでした: '{1}'。",
+  "Create_source_map_files_for_emitted_JavaScript_files_6694": "生成された JavaScript ファイルのソース マップ ファイルを作成します。",
+  "Create_sourcemaps_for_d_ts_files_6614": "d.ts ファイルのソースマップを作成します。",
+  "Creates_a_tsconfig_json_with_the_recommended_settings_in_the_working_directory_6926": "作業ディレクトリの推奨設定を使用して tsconfig.json を作成します。",
   "DIRECTORY_6038": "ディレクトリ",
   "Declaration_augments_declaration_in_another_file_This_cannot_be_serialized_6232": "この宣言は別のファイル内の宣言を拡張します。この操作はシリアル化できません。",
   "Declaration_emit_for_this_file_requires_using_private_name_0_An_explicit_type_annotation_may_unblock_9005": "このファイルの宣言の生成では、プライベート名 '{0}' を使用する必要があります。明示的な型の注釈では、宣言の生成のブロックを解除できます。",
@@ -430,6 +480,7 @@
   "Declaration_expected_1146": "宣言が必要です。",
   "Declaration_name_conflicts_with_built_in_global_identifier_0_2397": "宣言名が組み込みのグローバル識別子 '{0}' と競合しています。",
   "Declaration_or_statement_expected_1128": "宣言またはステートメントが必要です。",
+  "Declaration_or_statement_expected_This_follows_a_block_of_statements_so_if_you_intended_to_write_a_d_2809": "宣言またはステートメントが必要です。この '=' はステートメントのブロックに続くため、非構造化割り当てを作成する場合は、割り当て全体をかっこで囲む必要があります。",
   "Declarations_with_definite_assignment_assertions_must_also_have_type_annotations_1264": "明確な代入アサーションを使った宣言には、型の注釈も指定する必要があります。",
   "Declarations_with_initializers_cannot_also_have_definite_assignment_assertions_1263": "初期化子を使った宣言に明確な代入アサーションを含めることはできません。",
   "Declare_a_private_field_named_0_90053": "'{0}' という名前のプライベート フィールドを宣言します。",
@@ -441,7 +492,11 @@
   "Declare_static_property_0_90027": "静的プロパティ '{0}' を宣言する",
   "Decorators_are_not_valid_here_1206": "デコレーターはここでは無効です。",
   "Decorators_cannot_be_applied_to_multiple_get_Slashset_accessors_of_the_same_name_1207": "デコレーターを同じ名前の複数の get/set アクセサーに適用することはできません。",
+  "Decorators_may_not_be_applied_to_this_parameters_1433": "デコレーターを ' this ' パラメーターに適用することができない場合があります。",
+  "Decorators_must_precede_the_name_and_all_keywords_of_property_declarations_1436": "デコレーターは、プロパティ宣言の名前とすべてのキーワードの前に置く必要があります。",
   "Default_export_of_the_module_has_or_is_using_private_name_0_4082": "モジュールの既定エクスポートがプライベート名 '{0}' を持っているか、使用しています。",
+  "Default_library_1424": "既定のライブラリ",
+  "Default_library_for_target_0_1425": "ターゲット '{0}' の既定のライブラリ",
   "Definitions_of_the_following_identifiers_conflict_with_those_in_another_file_Colon_0_6200": "次の識別子の定義が、別のファイル内の定義と競合しています: {0}",
   "Delete_all_unused_declarations_95024": "未使用の宣言をすべて削除します",
   "Delete_all_unused_imports_95147": "未使用の import をすべて削除します",
@@ -449,6 +504,7 @@
   "Deprecated_Use_jsxFactory_instead_Specify_the_object_invoked_for_createElement_when_targeting_react__6084": "[非推奨] 代わりに '--jsxFactory' を使います。'react' JSX 発行を対象とするときに、createElement に対して呼び出されたオブジェクトを指定します",
   "Deprecated_Use_outFile_instead_Concatenate_and_emit_output_to_single_file_6170": "[非推奨] 代わりに '--outFile' を使います。出力を連結して 1 つのファイルを生成します",
   "Deprecated_Use_skipLibCheck_instead_Skip_type_checking_of_default_library_declaration_files_6160": "[非推奨] 代わりに '--skipLibCheck' を使います。既定のライブラリ宣言ファイルの型チェックをスキップします。",
+  "Deprecated_setting_Use_outFile_instead_6677": "非推奨の設定です。代わりに 'outFile' をお使いください。",
   "Did_you_forget_to_use_await_2773": "'await' を使用することを忘れていませんか?",
   "Did_you_mean_0_1369": "'{0}' を意図していましたか?",
   "Did_you_mean_for_0_to_be_constrained_to_type_new_args_Colon_any_1_2735": "'{0}' が型 'new (...args: any[]) => {1}' に制約されることを意図していましたか?",
@@ -459,12 +515,30 @@
   "Did_you_mean_to_use_new_with_this_expression_6213": "この式で 'new' を使用することを意図していましたか?",
   "Digit_expected_1124": "数値が必要です",
   "Directory_0_does_not_exist_skipping_all_lookups_in_it_6148": "ディレクトリ '{0}' は存在していません。ディレクトリ内のすべての参照をスキップしています。",
+  "Disable_adding_use_strict_directives_in_emitted_JavaScript_files_6669": "生成された JavaScript ファイルでの 'use strict' ディレクティブの追加を無効にします。",
   "Disable_checking_for_this_file_90018": "このファイルのチェックを無効にする",
+  "Disable_emitting_comments_6688": "コメントの生成を無効にします。",
+  "Disable_emitting_declarations_that_have_internal_in_their_JSDoc_comments_6701": "JSDoc コメントに '@internal' を含む宣言の生成を無効にします。",
+  "Disable_emitting_file_from_a_compilation_6660": "コンパイルからのファイルの生成を無効にします。",
+  "Disable_emitting_files_if_any_type_checking_errors_are_reported_6662": "型チェック エラーが報告された場合は、ファイルの生成を無効にします。",
+  "Disable_erasing_const_enum_declarations_in_generated_code_6682": "生成されたコード内で 'const 列挙型' 宣言の消去を無効にします。",
+  "Disable_error_reporting_for_unreachable_code_6603": "到達できないコードのエラー報告を無効にします。",
+  "Disable_error_reporting_for_unused_labels_6604": "未使用のラベルのエラー報告を無効にします。",
+  "Disable_generating_custom_helper_functions_like_extends_in_compiled_output_6661": "コンパイルされた出力での '__extends' などのカスタム ヘルパー関数の生成を無効にします。",
+  "Disable_including_any_library_files_including_the_default_lib_d_ts_6670": "既定の lib.d.ts を含むすべてのライブラリ ファイルを含めることを無効にします。",
   "Disable_loading_referenced_projects_6235": "参照されているプロジェクトの読み込みを無効にします。",
+  "Disable_preferring_source_files_instead_of_declaration_files_when_referencing_composite_projects_6620": "複合プロジェクトを参照するときに宣言ファイルではなくソース ファイルを優先することを無効にします",
+  "Disable_reporting_of_excess_property_errors_during_the_creation_of_object_literals_6702": "オブジェクト リテラルの作成時に余分なプロパティ エラーの報告を無効にします。",
+  "Disable_resolving_symlinks_to_their_realpath_This_correlates_to_the_same_flag_in_node_6683": "symlink を realpath に解決できないようにします。これは、ノードの同じフラグに関連しています。",
   "Disable_size_limitations_on_JavaScript_projects_6162": "JavaScript プロジェクトのサイズ制限を無効にします。",
   "Disable_solution_searching_for_this_project_6224": "このプロジェクトのソリューション検索を無効にします。",
-  "Disable_strict_checking_of_generic_signatures_in_function_types_6185": "関数型の汎用シグネチャに対する厳密なチェックを無効にします。",
+  "Disable_strict_checking_of_generic_signatures_in_function_types_6673": "関数型の汎用シグネチャに対する厳密なチェックを無効にします。",
+  "Disable_the_type_acquisition_for_JavaScript_projects_6625": "JavaScript プロジェクトの型の取得を無効にする",
+  "Disable_truncating_types_in_error_messages_6663": "エラー メッセージ内の型の切り捨てを無効にします。",
   "Disable_use_of_source_files_instead_of_declaration_files_from_referenced_projects_6221": "参照先のプロジェクトの宣言ファイルの代わりにソース ファイルを使用することを無効にします。",
+  "Disable_wiping_the_console_in_watch_mode_6684": "ウォッチ モードでのコンソールのワイプを無効にする",
+  "Disables_inference_for_type_acquisition_by_looking_at_filenames_in_a_project_6616": "プロジェクト内のファイル名の参照による型取得の推論を無効にします。",
+  "Disallow_import_s_require_s_or_reference_s_from_expanding_the_number_of_files_TypeScript_should_add__6672": "'import'、'require'、'<reference>' を使用して TypeScript がプロジェクトに追加するファイルの数を増やすことを無効にします。",
   "Disallow_inconsistently_cased_references_to_the_same_file_6078": "同じファイルへの大文字小文字の異なる参照を許可しない。",
   "Do_not_add_triple_slash_references_or_imported_modules_to_the_list_of_compiled_files_6159": "トリプルスラッシュの参照やインポートしたモジュールをコンパイルされたファイルのリストに追加しないでください。",
   "Do_not_emit_comments_to_output_6009": "コメントを出力しないでください。",
@@ -483,31 +557,48 @@
   "Duplicate_identifier_0_2300": "識別子 '{0}' が重複しています。",
   "Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module_2441": "識別子 '{0}' が重複しています。コンパイラは、モジュールの最上位のスコープに名前 '{1}' を予約します。",
   "Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module_containing_async_func_2529": "識別子 '{0}' が重複しています。コンパイラは非同期関数を含むモジュールの最上位のスコープに名前 '{1}' を予約します。",
+  "Duplicate_identifier_0_Compiler_reserves_name_1_when_emitting_super_references_in_static_initializer_2818": "識別子 '{0}' が重複しています。静的初期化子で 'super' 参照を出力するときに、コンパイラは名前 '{1}' を予約します。",
   "Duplicate_identifier_0_Compiler_uses_declaration_1_to_support_async_functions_2520": "識別子 '{0}' が重複しています。コンパイラは宣言 '{1}' を使用して非同期関数をサポートします。",
+  "Duplicate_identifier_0_Static_and_instance_elements_cannot_share_the_same_private_name_2804": "識別子 '{0}' が重複しています。静的要素とインスタンス要素は、同じプライベート名を共有できません。",
   "Duplicate_identifier_arguments_Compiler_uses_arguments_to_initialize_rest_parameters_2396": "識別子 'arguments' が重複しています。コンパイラは 'arguments' を使用して rest パラメーターを初期化します。",
   "Duplicate_identifier_newTarget_Compiler_uses_variable_declaration_newTarget_to_capture_new_target_me_2543": "識別子 '_newTarget' が重複しています。コンパイラは変数宣言 '_newTarget' を使用して、'new.target' メタプロパティの参照をキャプチャします。",
   "Duplicate_identifier_super_Compiler_uses_super_to_capture_base_class_reference_2401": "識別子 '_super' が重複しています。コンパイラは '_super' を使用して基底クラスの参照をキャプチャします。",
   "Duplicate_identifier_this_Compiler_uses_variable_declaration_this_to_capture_this_reference_2399": "識別子 '_this' が重複しています。コンパイラは変数宣言 '_this' を使用して '_this' の参照をキャプチャします。",
+  "Duplicate_index_signature_for_type_0_2374": "型 '{0}' のインデックス シグネチャが重複しています。",
   "Duplicate_label_0_1114": "ラベル '{0}' が重複しています。",
-  "Duplicate_number_index_signature_2375": "number インデックス シグネチャが重複しています。",
   "Duplicate_property_0_2718": "プロパティ '{0}' が重複しています。",
-  "Duplicate_string_index_signature_2374": "string インデックス シグネチャが重複しています。",
   "Dynamic_import_cannot_have_type_arguments_1326": "動的インポートに型引数を指定することはできません。",
   "Dynamic_import_must_have_one_specifier_as_an_argument_1324": "動的インポートには、引数として 1 つの指定子を指定する必要があります。",
   "Dynamic_import_s_specifier_must_be_of_type_string_but_here_has_type_0_7036": "動的インポートの指定子の型は 'string' である必要がありますが、ここでは型 '{0}' が指定されています。",
   "Dynamic_imports_are_only_supported_when_the_module_flag_is_set_to_es2020_esnext_commonjs_amd_system__1323": "動的インポートは、'--module' フラグが 'es2020'、'esnext'、'commonjs'、'amd'、'system'、'umd' に設定されている場合にのみサポートされます。",
   "Each_member_of_the_union_type_0_has_construct_signatures_but_none_of_those_signatures_are_compatible_2762": "共用体型 '{0}' の各メンバーにはコンストラクト シグネチャがありますが、これらのシグネチャはいずれも相互に互換性がありません。",
   "Each_member_of_the_union_type_0_has_signatures_but_none_of_those_signatures_are_compatible_with_each_2758": "共用体型 '{0}' の各メンバーにはシグネチャがありますが、これらのシグネチャはいずれも相互に互換性がありません。",
-  "Element_at_index_0_is_variadic_in_one_type_but_not_in_the_other_2622": "インデックス {0} の要素は、一方の型では引数が可変個ですが、他方の型では違います。",
+  "Editor_Support_6249": "エディター サポート",
   "Element_implicitly_has_an_any_type_because_expression_of_type_0_can_t_be_used_to_index_type_1_7053": "型 '{0}' の式を使用して型 '{1}' にインデックスを付けることはできないため、要素は暗黙的に 'any' 型になります。",
   "Element_implicitly_has_an_any_type_because_index_expression_is_not_of_type_number_7015": "インデックス式が型 'number' ではないため、要素に 'any' 型が暗黙的に指定されます。",
   "Element_implicitly_has_an_any_type_because_type_0_has_no_index_signature_7017": "型 '{0}' にはインデックス シグネチャがないため、要素は暗黙的に 'any' 型になります。",
   "Element_implicitly_has_an_any_type_because_type_0_has_no_index_signature_Did_you_mean_to_call_1_7052": "型 '{0}' にはインデックス シグネチャがないため、要素は暗黙的に 'any' 型になります。'{1}' を呼び出すことを意図していましたか?",
-  "Emit_a_UTF_8_Byte_Order_Mark_BOM_in_the_beginning_of_output_files_6164": "出力ファイルの最初に UTF-8 バイト順マーク(BOM) を生成します。",
+  "Emit_6246": "生成",
+  "Emit_ECMAScript_standard_compliant_class_fields_6712": "ECMAScript 標準準拠クラス フィールドを生成します。",
+  "Emit_a_UTF_8_Byte_Order_Mark_BOM_in_the_beginning_of_output_files_6622": "出力ファイルの最初に UTF-8 バイト順マーク(BOM) を生成します。",
   "Emit_a_single_file_with_source_maps_instead_of_having_a_separate_file_6151": "個々のファイルを持つ代わりに、複数のソース マップを含む単一ファイルを生成します。",
+  "Emit_a_v8_CPU_profile_of_the_compiler_run_for_debugging_6638": "デバッグのために実行するコンパイラの v8 CPU プロファイルを生成します。",
+  "Emit_additional_JavaScript_to_ease_support_for_importing_CommonJS_modules_This_enables_allowSyntheti_6626": "CommonJS モジュールのインポートをサポートしやすくするために追加の JavaScript を生成します。これにより、互換性のある型に対して 'allowSyntheticDefaultImports' を使用できるようになります。",
   "Emit_class_fields_with_Define_instead_of_Set_6222": "Set ではなく Define を使用して、クラスのフィールドを生成します。",
+  "Emit_design_type_metadata_for_decorated_declarations_in_source_files_6624": "ソース ファイル内の修飾された宣言に対してデザイン型メタデータを生成します。",
+  "Emit_more_compliant_but_verbose_and_less_performant_JavaScript_for_iteration_6621": "イテレーションのために、準拠性が高いものの、冗長でパフォーマンスが低い JavaScript を生成します。",
   "Emit_the_source_alongside_the_sourcemaps_within_a_single_file_requires_inlineSourceMap_or_sourceMap__6152": "単一ファイル内でソースマップと共にソースを生成します。'--inlineSourceMap' または '--sourceMap' を設定する必要があります。",
   "Enable_all_strict_type_checking_options_6180": "厳密な型チェックのオプションをすべて有効にします。",
+  "Enable_color_and_formatting_in_output_to_make_compiler_errors_easier_to_read_6685": "コンパイラ エラーを読みやすくするために出力の色と書式設定を有効にします",
+  "Enable_constraints_that_allow_a_TypeScript_project_to_be_used_with_project_references_6611": "プロジェクト参照での TypeScript プロジェクトの使用を許可する制約を有効にします。",
+  "Enable_error_reporting_for_codepaths_that_do_not_explicitly_return_in_a_function_6667": "関数で明示的に返されないコードパスのエラー報告を有効にします。",
+  "Enable_error_reporting_for_expressions_and_declarations_with_an_implied_any_type_6665": "暗黙的な 'any' 型を含む式と宣言に関するエラー報告を有効にします。",
+  "Enable_error_reporting_for_fallthrough_cases_in_switch_statements_6664": "switch ステートメントに case のフォールスルーがある場合のエラー報告を有効にします。",
+  "Enable_error_reporting_in_type_checked_JavaScript_files_6609": "型チェックされた JavaScript ファイルでのエラー報告を有効にします。",
+  "Enable_error_reporting_when_a_local_variables_aren_t_read_6675": "ローカル変数が読み取られていない場合にエラー報告を有効にします。",
+  "Enable_error_reporting_when_this_is_given_the_type_any_6668": "'this' に 'any' 型が指定されている場合は、エラー報告を有効にします。",
+  "Enable_experimental_support_for_TC39_stage_2_draft_decorators_6630": "TC39 ステージ 2 ドラフト デコレーター用の実験的なサポートを有効にします。",
+  "Enable_importing_json_files_6689": ".json ファイルのインポートを有効にする",
   "Enable_incremental_compilation_6378": "インクリメンタル コンパイルを有効にする",
   "Enable_project_compilation_6302": "プロジェクトのコンパイルを有効にします",
   "Enable_strict_bind_call_and_apply_methods_on_functions_6214": "厳格な 'bind'、'call'、'apply' メソッドを関数で有効にします。",
@@ -517,11 +608,20 @@
   "Enable_the_experimentalDecorators_option_in_your_configuration_file_95074": "構成ファイルで 'experimentalDecorators' オプションを有効にする",
   "Enable_the_jsx_flag_in_your_configuration_file_95088": "構成ファイルで '--jsx' フラグを有効にする",
   "Enable_tracing_of_the_name_resolution_process_6085": "名前解決の処理のトレースを有効にします。",
-  "Enable_verbose_logging_6366": "詳細ログを有効にします",
+  "Enable_verbose_logging_6713": "詳細ログを有効にします",
   "Enables_emit_interoperability_between_CommonJS_and_ES_Modules_via_creation_of_namespace_objects_for__7037": "すべてのインポートの名前空間オブジェクトを作成して、CommonJS と ES モジュール間の生成の相互運用性を有効にします。'allowSyntheticDefaultImports' を暗黙のうちに表します。",
   "Enables_experimental_support_for_ES7_async_functions_6068": "ES7 非同期関数用の実験的なサポートを有効にします。",
   "Enables_experimental_support_for_ES7_decorators_6065": "ES7 デコレーター用の実験的なサポートを有効にします。",
   "Enables_experimental_support_for_emitting_type_metadata_for_decorators_6066": "デコレーター用の型メタデータを発行するための実験的なサポートを有効にします。",
+  "Enforces_using_indexed_accessors_for_keys_declared_using_an_indexed_type_6671": "インデックス付きの型を使用して宣言されたキーに対してインデックス付きアクセサーの使用を強制する",
+  "Ensure_overriding_members_in_derived_classes_are_marked_with_an_override_modifier_6666": "派生クラスのオーバーライドするメンバーが override 修飾子でマークされていることを確認します。",
+  "Ensure_that_casing_is_correct_in_imports_6637": "インポートの大文字と小文字の指定が正しいことを確認します。",
+  "Ensure_that_each_file_can_be_safely_transpiled_without_relying_on_other_imports_6645": "各ファイルが他のインポートに依存しないで安全にトランスパイルできることを確認します。",
+  "Ensure_use_strict_is_always_emitted_6605": "'use strict' が常に生成されることを確認します。",
+  "Entry_point_for_implicit_type_library_0_1420": "暗黙的なタイプ ライブラリ '{0}' のエントリ ポイント",
+  "Entry_point_for_implicit_type_library_0_with_packageId_1_1421": "packageId が '{1}' の暗黙的なタイプ ライブラリ '{0}' のエントリ ポイント",
+  "Entry_point_of_type_library_0_specified_in_compilerOptions_1417": "compilerOptions で指定されたタイプ ライブラリ '{0}' のエントリ ポイント",
+  "Entry_point_of_type_library_0_specified_in_compilerOptions_with_packageId_1_1418": "compilerOptions で指定された packageId が '{1}' のタイプ ライブラリ '{0}' のエントリ ポイント",
   "Enum_0_used_before_its_declaration_2450": "列挙型 '{0}' は宣言の前に使用されました。",
   "Enum_declarations_can_only_merge_with_namespace_or_other_enum_declarations_2567": "列挙型の宣言は、名前空間または他の列挙型の宣言とのみマージできます。",
   "Enum_declarations_must_all_be_const_or_non_const_2473": "列挙型宣言は、すべてが定数、またはすべてが非定数でなければなりません。",
@@ -535,15 +635,13 @@
   "Expected_0_1_type_arguments_provide_these_with_an_extends_tag_8027": "{0}-{1} 型の引数が必要です。'@extends' タグで指定してください。",
   "Expected_0_arguments_but_got_1_2554": "{0} 個の引数が必要ですが、{1} 個指定されました。",
   "Expected_0_arguments_but_got_1_Did_you_forget_to_include_void_in_your_type_argument_to_Promise_2794": "{0} 引数が必要ですが、{1} が指定されました。'Promise' の型引数に 'void' を含めましたか?",
-  "Expected_0_arguments_but_got_1_or_more_2556": "{0} 個の引数が必要ですが、{1} 個以上指定されました。",
   "Expected_0_type_arguments_but_got_1_2558": "{0} 個の型引数が必要ですが、{1} 個が指定されました。",
   "Expected_0_type_arguments_provide_these_with_an_extends_tag_8026": "{0} 型の引数が必要です。'@extends' タグで指定してください。",
   "Expected_at_least_0_arguments_but_got_1_2555": "最低でも {0} 個の引数が必要ですが、{1} 個指定されました。",
-  "Expected_at_least_0_arguments_but_got_1_or_more_2557": "最低でも {0} 個の引数が必要ですが、{1} 個以上指定されました。",
   "Expected_corresponding_JSX_closing_tag_for_0_17002": "'{0}' の対応する JSX 終了タグが必要です。",
   "Expected_corresponding_closing_tag_for_JSX_fragment_17015": "JSX フラグメントの対応する終了タグが必要です。",
+  "Expected_for_property_initializer_1442": "プロパティ初期化子には '=' を期待しています。",
   "Expected_type_of_0_field_in_package_json_to_be_1_got_2_6105": "'package.json' の '{0}' フィールドの型は '{1}' であるべきですが、'{2}' を取得しました。",
-  "Experimental_Options_6177": "試験的なオプション",
   "Experimental_support_for_decorators_is_a_feature_that_is_subject_to_change_in_a_future_release_Set_t_1219": "デコレーターの実験的なサポートは将来のリリースで変更になる可能性がある機能です。'tsconfig' または 'jsconfig' に 'experimentalDecorators' オプションを設定してこの警告を削除します。",
   "Explicitly_specified_module_resolution_kind_Colon_0_6087": "明示的に指定されたモジュール解決の種類 '{0}'。",
   "Exponentiation_cannot_be_performed_on_bigint_values_unless_the_target_option_is_set_to_es2016_or_lat_2791": "'target' オプションが 'es2016' 以降に設定されている場合を除き、'bigint' 値に対して累乗を実行することはできません。",
@@ -554,12 +652,14 @@
   "Exported_external_package_typings_file_0_is_not_a_module_Please_contact_the_package_author_to_update_2656": "エクスポートされた外部パッケージの型指定のファイル '{0}' はモジュールではありません。パッケージ定義を更新する場合は、パッケージの作成者にお問い合わせください。",
   "Exported_external_package_typings_file_cannot_contain_tripleslash_references_Please_contact_the_pack_2654": "エクスポートされた外部パッケージの型指定のファイルにトリプルスラッシュ参照を含めることはできません。パッケージ定義を更新する場合は、パッケージの作成者にお問い合わせください。",
   "Exported_type_alias_0_has_or_is_using_private_name_1_4081": "エクスポートされた型のエイリアス '{0}' にプライベート名 '{1}' が付いているか、その名前を使用しています。",
+  "Exported_type_alias_0_has_or_is_using_private_name_1_from_module_2_4084": "エクスポートされた型エイリアス '{0}' がモジュール {2} のプライベート名 '{1}' を持っているか、使用しています。",
   "Exported_variable_0_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4023": "エクスポートされた変数 '{0}' が外部モジュール {2} の名前 '{1}' を持っているか使用していますが、名前を指定することはできません。",
   "Exported_variable_0_has_or_is_using_name_1_from_private_module_2_4024": "エクスポートされた変数 '{0}' がプライベート モジュール '{2}' の名前 '{1}' を持っているか、使用しています。",
   "Exported_variable_0_has_or_is_using_private_name_1_4025": "エクスポートされた変数 '{0}' がプライベート名 '{1}' を持っているか、使用しています。",
   "Exports_and_export_assignments_are_not_permitted_in_module_augmentations_2666": "エクスポートとエクスポートの代入はモジュールの拡張では許可されていません。",
   "Expression_expected_1109": "式が必要です。",
   "Expression_or_comma_expected_1137": "式またはコンマが必要です。",
+  "Expression_produces_a_tuple_type_that_is_too_large_to_represent_2800": "式では大きすぎて表すことができないタプル型を生成します。",
   "Expression_produces_a_union_type_that_is_too_complex_to_represent_2590": "式は、複雑すぎて表現できない共用体型を生成します。",
   "Expression_resolves_to_super_that_compiler_uses_to_capture_base_class_reference_2402": "式は、コンパイラが基底クラスの参照をキャプチャするために使用する '_super' に解決されます。",
   "Expression_resolves_to_variable_declaration_0_that_compiler_uses_to_support_async_functions_2521": "式は、コンパイラが非同期関数をサポートするために使用する変数宣言 '{0}' に解決されます。",
@@ -579,7 +679,9 @@
   "Failed_to_parse_file_0_Colon_1_5014": "ファイル '{0}' を解析できませんでした。{1}。",
   "Fallthrough_case_in_switch_7029": "switch に case のフォールスルーがあります。",
   "File_0_does_not_exist_6096": "ファイル '{0}' が存在しません。",
+  "File_0_does_not_exist_according_to_earlier_cached_lookups_6240": "以前にキャッシュされた検索によるとファイル '{0}' は存在しません。",
   "File_0_exist_use_it_as_a_name_resolution_result_6097": "ファイル '{0}' が存在します。名前解決の結果として使用します。",
+  "File_0_exists_according_to_earlier_cached_lookups_6239": "以前にキャッシュされた参照によるとファイル ' {0} ' は、存在します。",
   "File_0_has_an_unsupported_extension_The_only_supported_extensions_are_1_6054": "ファイル '{0}' はサポートされていない拡張子を含んでいます。サポートされている拡張子は {1} のみです。",
   "File_0_has_an_unsupported_extension_so_skipping_it_6081": "ファイル '{0}' にはサポートされていない拡張機能があるため、スキップしています。",
   "File_0_is_a_JavaScript_file_Did_you_mean_to_enable_the_allowJs_option_6504": "ファイル '{0}' は JavaScript ファイルです。'allowJs' オプションを有効にするつもりでしたか?",
@@ -587,16 +689,32 @@
   "File_0_is_not_listed_within_the_file_list_of_project_1_Projects_must_list_all_files_or_use_an_includ_6307": "ファイル '{0}' がプロジェクト '{1}' のファイル リストに含まれていません。プロジェクトではすべてのファイルをリストするか、'include' パターンを使用する必要があります。",
   "File_0_is_not_under_rootDir_1_rootDir_is_expected_to_contain_all_source_files_6059": "ファイル '{0}' が 'rootDir' '{1}' の下にありません。'rootDir' にすべてにソース ファイルが含まれている必要があります。",
   "File_0_not_found_6053": "ファイル '{0}' が見つかりません。",
+  "File_Management_6245": "ファイルの管理",
   "File_change_detected_Starting_incremental_compilation_6032": "ファイルの変更が検出されました。インクリメンタル コンパイルを開始しています...",
   "File_is_a_CommonJS_module_it_may_be_converted_to_an_ES6_module_80001": "ファイルは CommonJS モジュールです。ES6 モジュールに変換される可能性があります。",
+  "File_is_default_library_for_target_specified_here_1426": "ファイルはこちらで指定されたターゲットの既定のライブラリです。",
+  "File_is_entry_point_of_type_library_specified_here_1419": "ファイルはこちらで指定されたタイプ ライブラリのエントリ ポイントです。",
+  "File_is_included_via_import_here_1399": "ファイルはインポートによってこちらに追加されます。",
+  "File_is_included_via_library_reference_here_1406": "ファイルはライブラリ参照によってこちらにインクルードされます。",
+  "File_is_included_via_reference_here_1401": "ファイルは参照によってこちらにインクルードされます。",
+  "File_is_included_via_type_library_reference_here_1404": "ファイルはタイプ ライブラリ参照によってこちらにインクルードされます。",
+  "File_is_library_specified_here_1423": "ファイルはこちらで指定されたライブラリです。",
+  "File_is_matched_by_files_list_specified_here_1410": "ファイルはこちらで指定された 'files' リストに一致します。",
+  "File_is_matched_by_include_pattern_specified_here_1408": "ファイルはこちらで指定されたインクルード パターンに一致します。",
+  "File_is_output_from_referenced_project_specified_here_1413": "ファイルはこちらで指定された参照先プロジェクトからの出力です。",
+  "File_is_output_of_project_reference_source_0_1428": "ファイルはプロジェクト参照ソース '{0}' の出力です",
+  "File_is_source_from_referenced_project_specified_here_1416": "ファイルはこちらで指定された参照先プロジェクトのソースです。",
   "File_name_0_differs_from_already_included_file_name_1_only_in_casing_1149": "ファイル名 '{0}' は、既に含まれているファイル名 '{1}' と大文字と小文字の指定だけが異なります。",
   "File_name_0_has_a_1_extension_stripping_it_6132": "ファイル名 '{0}' に '{1}' 拡張子が使われています - 削除しています。",
+  "File_redirects_to_file_0_1429": "ファイルはファイル '{0}' にリダイレクトされます",
   "File_specification_cannot_contain_a_parent_directory_that_appears_after_a_recursive_directory_wildca_5065": "ファイルの指定で再帰ディレクトリのワイルドカード ('**') の後に親ディレクトリ ('..') を指定することはできません: '{0}'。",
   "File_specification_cannot_end_in_a_recursive_directory_wildcard_Asterisk_Asterisk_Colon_0_5010": "ファイルの指定の末尾を再帰的なディレクトリのワイルドカード ('**') にすることはできません: '{0}'。",
+  "Filters_results_from_the_include_option_6627": "'include' オプションからの結果をフィルター処理します。",
   "Fix_all_detected_spelling_errors_95026": "検出されたすべてのスペル ミスを修正します",
   "Fix_all_expressions_possibly_missing_await_95085": "'await' が不足している可能性があるすべての式を修正する",
   "Fix_all_implicit_this_errors_95107": "すべての暗黙的な 'this' エラーを修正する",
   "Fix_all_incorrect_return_type_of_an_async_functions_90037": "非同期関数の無効な戻り値の型をすべて修正します",
+  "For_await_loops_cannot_be_used_inside_a_class_static_block_18038": "'For await' ループは、クラスの静的ブロック内では使用できません。",
   "Found_0_errors_6217": "{0} 件のエラーが見つかりました。",
   "Found_0_errors_Watching_for_file_changes_6194": "{0} 件のエラーが見つかりました。ファイルの変更をモニタリングしています。",
   "Found_1_error_6216": "1 件のエラーが見つかりました。",
@@ -610,11 +728,14 @@
   "Function_implementation_name_must_be_0_2389": "関数の実装名は '{0}' でなければなりません。",
   "Function_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_ref_7024": "関数は、戻り値の型の注釈がなく、いずれかの return 式で直接的にまたは間接的に参照されているため、戻り値の型は暗黙的に 'any' になります。",
   "Function_lacks_ending_return_statement_and_return_type_does_not_include_undefined_2366": "関数に終了の return ステートメントがないため、戻り値の型には 'undefined' が含まれません。",
+  "Function_not_implemented_95159": "関数が実装されていません。",
   "Function_overload_must_be_static_2387": "関数のオーバーロードは静的でなければなりません。",
   "Function_overload_must_not_be_static_2388": "関数のオーバーロードは静的にはできせん。",
   "Function_type_notation_must_be_parenthesized_when_used_in_a_union_type_1385": "共用体型で使用する場合、関数の型の表記はかっこで囲む必要があります。",
   "Function_type_notation_must_be_parenthesized_when_used_in_an_intersection_type_1387": "交差型で使用する場合、関数の型の表記はかっこで囲む必要があります。",
   "Function_type_which_lacks_return_type_annotation_implicitly_has_an_0_return_type_7014": "戻り値の型の注釈がない関数型の戻り値の型は、暗黙的に '{0}' になります。",
+  "Function_with_bodies_can_only_merge_with_classes_that_are_ambient_2814": "本文を持つ関数は、アンビエントであるクラスとのみ結合できます。",
+  "Generate_d_ts_files_from_TypeScript_and_JavaScript_files_in_your_project_6612": "プロジェクト内の TypeScript ファイルおよび JavaScript ファイルから、.d.ts ファイルを生成します。",
   "Generate_get_and_set_accessors_95046": "'get' および 'set' アクセサーの生成",
   "Generate_get_and_set_accessors_for_all_overriding_properties_95119": "すべてのオーバーライドするプロパティに対して 'get' および 'set' アクセサーを生成します",
   "Generates_a_CPU_profile_6223": "CPU プロファイルを生成します。",
@@ -627,13 +748,13 @@
   "Generators_are_only_available_when_targeting_ECMAScript_2015_or_higher_1220": "ジェネレーターは、ECMAScript 2015 以上を対象にする場合のみ使用できます。",
   "Generic_type_0_requires_1_type_argument_s_2314": "ジェネリック型 '{0}' には {1} 個の型引数が必要です。",
   "Generic_type_0_requires_between_1_and_2_type_arguments_2707": "ジェネリック型 '{0}' には、{1} 個から {2} 個までの型引数が必要です。",
-  "Getter_and_setter_accessors_do_not_agree_in_visibility_2379": "ゲッターおよびセッターでの表示が許可されていません。",
   "Global_module_exports_may_only_appear_at_top_level_1316": "グローバル モジュールのエクスポートは最上位レベルにのみ出現可能です。",
   "Global_module_exports_may_only_appear_in_declaration_files_1315": "グローバル モジュールのエクスポートは宣言ファイルにのみ出現可能です。",
   "Global_module_exports_may_only_appear_in_module_files_1314": "グローバル モジュールのエクスポートはモジュール ファイルにのみ出現可能です。",
   "Global_type_0_must_be_a_class_or_interface_type_2316": "グローバル型 '{0}' はクラス型またはインターフェイス型でなければなりません。",
   "Global_type_0_must_have_1_type_parameter_s_2317": "グローバル型 '{0}' には {1} 個の型パラメーターが必要です。",
   "Have_recompiles_in_incremental_and_watch_assume_that_changes_within_a_file_will_only_affect_files_di_6384": "'--incremental' と '--watch' での再コンパイルは、ファイル内の変更がそのファイルに直接依存しているファイルにのみ影響することを想定しています。",
+  "Have_recompiles_in_projects_that_use_incremental_and_watch_mode_assume_that_changes_within_a_file_wi_6606": "'incremental' と 'watch' モードを使用するプロジェクト内での再コンパイルは、ファイル内の変更がそれに直接依存しているファイルにのみ影響することを想定しています。",
   "Hexadecimal_digit_expected_1125": "16 進の数字が必要です。",
   "Identifier_expected_0_is_a_reserved_word_at_the_top_level_of_a_module_1262": "識別子が必要です。'{0}' は、モジュールの最上位レベルでの予約語です。",
   "Identifier_expected_0_is_a_reserved_word_in_strict_mode_1212": "識別子が必要です。'{0}' は厳格モードの予約語です。",
@@ -644,6 +765,7 @@
   "Identifier_expected_esModule_is_reserved_as_an_exported_marker_when_transforming_ECMAScript_modules_1216": "識別子が必要です。'__esModule' は、ECMAScript モジュールを変換するときのエクスポート済みマーカーとして予約されています。",
   "If_the_0_package_actually_exposes_this_module_consider_sending_a_pull_request_to_amend_https_Colon_S_7040": "'{0}' パッケージが実際にこのモジュールを公開する場合は、pull request を送信して 'https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/{1}' を修正することを検討してください",
   "Ignore_this_error_message_90019": "このエラー メッセージを無視する",
+  "Ignoring_tsconfig_json_compiles_the_specified_files_with_default_compiler_options_6924": "tsconfig.json を無視し、既定のコンパイラ オプションを使用して指定されたファイルをコンパイルします",
   "Implement_all_inherited_abstract_classes_95040": "継承されたすべての抽象クラスを実装します",
   "Implement_all_unimplemented_interfaces_95032": "実装されていないすべてのインターフェイスを実装します",
   "Implement_inherited_abstract_class_90007": "継承抽象クラスを実装する",
@@ -660,14 +782,23 @@
   "Import_may_be_converted_to_a_default_import_80003": "インポートは既定のインポートに変換される可能性があります。",
   "Import_name_cannot_be_0_2438": "インポート名を '{0}' にすることはできません。",
   "Import_or_export_declaration_in_an_ambient_module_declaration_cannot_reference_module_through_relati_2439": "アンビエント モジュール宣言内のインポート宣言またはエクスポート宣言は、相対モジュール名を通してモジュールを参照することはできません。",
+  "Imported_via_0_from_file_1_1393": "ファイル '{1}' から {0} を介してインポートされました",
+  "Imported_via_0_from_file_1_to_import_importHelpers_as_specified_in_compilerOptions_1395": "compilerOptions で指定された 'importHelpers' をインポートするため、ファイル '{1}' から {0} を介してインポートされました",
+  "Imported_via_0_from_file_1_to_import_jsx_and_jsxs_factory_functions_1397": "'jsx' および 'jsxs' ファクトリ関数をインポートするため、ファイル '{1}' から {0} を介してインポートされました",
+  "Imported_via_0_from_file_1_with_packageId_2_1394": "packageId が '{2}' のファイル '{1}' から {0} を介してインポートされました",
+  "Imported_via_0_from_file_1_with_packageId_2_to_import_importHelpers_as_specified_in_compilerOptions_1396": "compilerOptions で指定されているように 'importHelpers' をインポートするため、packageId が '{2}' のファイル '{1}' から {0} を介してインポートされました",
+  "Imported_via_0_from_file_1_with_packageId_2_to_import_jsx_and_jsxs_factory_functions_1398": "'jsx' および 'jsxs' ファクトリ関数をインポートするため、packageId が '{2}' のファイル '{1}' から {0} を介してインポートされました",
   "Imports_are_not_permitted_in_module_augmentations_Consider_moving_them_to_the_enclosing_external_mod_2667": "インポートはモジュールの拡張では許可されていません。外側の外部モジュールに移動することを検討してください。",
   "In_ambient_enum_declarations_member_initializer_must_be_constant_expression_1066": "アンビエント列挙型の宣言では、メンバー初期化子は定数式である必要があります。",
   "In_an_enum_with_multiple_declarations_only_one_declaration_can_omit_an_initializer_for_its_first_enu_2432": "複数の宣言がある列挙型で、最初の列挙要素の初期化子を省略できる宣言は 1 つのみです。",
+  "Include_a_list_of_files_This_does_not_support_glob_patterns_as_opposed_to_include_6635": "ファイルの一覧を含めます。これは、'include' ではなく、glob パターンをサポートしていません。",
   "Include_modules_imported_with_json_extension_6197": "'.json' 拡張子付きのインポートされたモジュールを含める",
-  "Include_undefined_in_index_signature_results_6800": "インデックス署名の結果に '未定義' を含めます",
+  "Include_source_code_in_the_sourcemaps_inside_the_emitted_JavaScript_6644": "生成された JavaScript 内のソースマップにソース コードを含めます。",
+  "Include_sourcemap_files_inside_the_emitted_JavaScript_6643": "出力された JavaScript 内にソースマップ ファイルを含めます。",
+  "Include_undefined_in_index_signature_results_6716": "インデックス署名の結果に '未定義' を含めます",
+  "Including_watch_w_will_start_watching_the_current_project_for_the_file_changes_Once_set_you_can_conf_6914": "--watch を含めると、ファイルの変更について現在のプロジェクトの監視が開始されます。設定が完了すると、次の操作を使用してウォッチ モードを構成できます。",
+  "Index_signature_for_type_0_is_missing_in_type_1_2329": "型 '{0}' is missing in type '{1}' のインデックス シグネチャがありません。",
   "Index_signature_in_type_0_only_permits_reading_2542": "型 '{0}' のインデックス シグネチャは、読み取りのみを許可します。",
-  "Index_signature_is_missing_in_type_0_2329": "型 '{0}' のインデックス シグネチャがありません。",
-  "Index_signatures_are_incompatible_2330": "インデックスの署名に互換性がありません。",
   "Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local_2395": "マージされた宣言 '{0}' の個々の宣言はすべてエクスポートされるか、すべてローカルであるかのどちらかである必要があります。",
   "Infer_all_types_from_usage_95023": "使用法からすべての型を推論します",
   "Infer_function_return_type_95148": "関数の戻り値の型を推論します",
@@ -676,6 +807,7 @@
   "Infer_type_of_0_from_usage_95011": "使用状況から '{0}' の型を推論する",
   "Initialize_property_0_in_the_constructor_90020": "コンストラクターのプロパティ '{0}' を初期化する",
   "Initialize_static_property_0_90021": "静的プロパティ '{0}' を初期化する",
+  "Initializer_for_property_0_2811": "プロパティ ' {0} ' の初期化子。",
   "Initializer_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor_2301": "インスタンス メンバー変数 '{0}' の初期化子はコンストラクターで宣言された識別子 '{1}' を参照できません。",
   "Initializer_provides_no_value_for_this_binding_element_and_the_binding_element_has_no_default_value_2525": "初期化子にこのバインド要素の値が提示されていません。またバインド要素に既定値がありません。",
   "Initializers_are_not_allowed_in_ambient_contexts_1039": "初期化子は環境コンテキストでは使用できません。",
@@ -686,12 +818,16 @@
   "Interface_0_cannot_simultaneously_extend_types_1_and_2_2320": "インターフェイス '{0}' で型 '{1}' と型 '{2}' を同時には拡張できません。",
   "Interface_0_incorrectly_extends_interface_1_2430": "インターフェイス '{0}' はインターフェイス '{1}' を正しく拡張していません。",
   "Interface_declaration_cannot_have_implements_clause_1176": "インターフェイス宣言に 'implements' 句を指定することはできません。",
+  "Interface_must_be_given_a_name_1438": "インターフェイスに名前を指定する必要があります。",
   "Interface_name_cannot_be_0_2427": "インターフェイス名を '{0}' にすることはできません。",
+  "Interop_Constraints_6252": "制約の相互運用",
+  "Interpret_optional_property_types_as_written_rather_than_adding_undefined_6243": "'undefined' を追加するのではなく、省略可能なプロパティ型を記述済みとして解釈します。",
   "Invalid_character_1127": "無効な文字です。",
   "Invalid_module_name_in_augmentation_Module_0_resolves_to_an_untyped_module_at_1_which_cannot_be_augm_2665": "拡張のモジュール名が無効です。モジュール '{0}' は '{1}' の型指定のないモジュールに解決されるため、拡張されません。",
   "Invalid_module_name_in_augmentation_module_0_cannot_be_found_2664": "拡張のモジュール名が無効です。モジュール '{0}' が見つかりません。",
   "Invalid_reference_directive_syntax_1084": "無効な 'reference' ディレクティブ構文です。",
   "Invalid_use_of_0_Class_definitions_are_automatically_in_strict_mode_1210": "'{0}' の使用が無効です。クラス定義は自動的に厳格モードになります。",
+  "Invalid_use_of_0_It_cannot_be_used_inside_a_class_static_block_18039": "'{0}' の使用が無効です。クラスの静的ブロック内では使用できません。",
   "Invalid_use_of_0_Modules_are_automatically_in_strict_mode_1215": "'{0}' の使用方法が無効です。モジュールは自動的に厳格モードになります。",
   "Invalid_use_of_0_in_strict_mode_1100": "厳格モードでは '{0}' の使用は無効です。",
   "Invalid_value_for_jsxFactory_0_is_not_a_valid_identifier_or_qualified_name_5067": "'jsxFactory' の値が無効です。'{0}' が有効な識別子または修飾名ではありません。",
@@ -723,13 +859,18 @@
   "JSX_expressions_may_not_use_the_comma_operator_Did_you_mean_to_write_an_array_18007": "JSX 式では、コンマ演算子を使用できません。配列を作成するつもりでしたか?",
   "JSX_expressions_must_have_one_parent_element_2657": "JSX 式には 1 つの親要素が必要です。",
   "JSX_fragment_has_no_corresponding_closing_tag_17014": "JSX フラグメントには対応する終了タグがありません。",
+  "JSX_property_access_expressions_cannot_include_JSX_namespace_names_2633": "JSX プロパティ アクセス式に JSX 名前空間の名前を含めることはできません",
   "JSX_spread_child_must_be_an_array_type_2609": "JSX スプレッドの子は、配列型でなければなりません。",
+  "JavaScript_Support_6247": "JavaScript サポート",
   "Jump_target_cannot_cross_function_boundary_1107": "ジャンプ先は関数の境界を越えることはできません。",
   "KIND_6034": "種類",
   "Keywords_cannot_contain_escape_characters_1260": "キーワードにエスケープ文字を含めることはできません。",
   "LOCATION_6037": "場所",
+  "Language_and_Environment_6254": "言語と環境",
   "Language_service_is_disabled_9004": "言語サービスが無効になっています。",
   "Left_side_of_comma_operator_is_unused_and_has_no_side_effects_2695": "コンマ演算子の左側が使用されていないため、副作用はありません。",
+  "Library_0_specified_in_compilerOptions_1422": "compilerOptions でライブラリ '{0}' が指定されました",
+  "Library_referenced_via_0_from_file_1_1405": "ファイル '{1}' から '{0}' を介してライブラリが参照されました",
   "Line_break_not_permitted_here_1142": "ここで改行することはできません。",
   "Line_terminator_not_permitted_before_arrow_1200": "行の終端記号をアローの前で使用することはできません。",
   "List_of_folders_to_include_type_definitions_from_6161": "含める型定義の元のフォルダーの一覧。",
@@ -739,11 +880,14 @@
   "Loading_module_0_from_node_modules_folder_target_file_type_1_6098": "'node_modules' フォルダーからモジュール '{0}' を読み込んでいます。対象のファイルの種類は '{1}' です。",
   "Loading_module_as_file_Slash_folder_candidate_module_location_0_target_file_type_1_6095": "ファイル / フォルダーとしてモジュールを読み込んでいます。候補のモジュールの場所は '{0}'、対象のファイルの種類は '{1}' です。",
   "Locale_must_be_of_the_form_language_or_language_territory_For_example_0_or_1_6048": "ロケールは <language> または <language>-<territory> の形式で指定する必要があります (例: '{0}'、'{1}')。",
+  "Log_paths_used_during_the_moduleResolution_process_6706": "'moduleResolution' の処理中に使用されたログ パス。",
   "Longest_matching_prefix_for_0_is_1_6108": "'{0}' の一致する最長プレフィックスは '{1}' です。",
   "Looking_up_in_node_modules_folder_initial_location_0_6125": "'node_modules' フォルダーを検索しています。最初の場所は '{0}' です。",
   "Make_all_super_calls_the_first_statement_in_their_constructor_95036": "すべての 'super()' 呼び出しをそのコンストラクターの最初のステートメントにします",
+  "Make_keyof_only_return_strings_instead_of_string_numbers_or_symbols_Legacy_option_6650": "keyof により、文字列、数字、記号の代わりに、文字列のみが返されるようにします。レガシ オプションです。",
   "Make_super_call_the_first_statement_in_the_constructor_90002": "'super()' 呼び出しをコンストラクター内の最初のステートメントにする",
   "Mapped_object_type_implicitly_has_an_any_template_type_7039": "マップされたオブジェクト型のテンプレートの型は暗黙的に 'any' になります。",
+  "Matched_by_include_pattern_0_in_1_1407": "'{1}' のインクルード パターン '{0}' に一致しています",
   "Member_0_implicitly_has_an_1_type_7008": "メンバー '{0}' の型は暗黙的に '{1}' になります。",
   "Member_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage_7045": "メンバー '{0}' の型は暗黙的に '{1}' ですが、使い方からより良い型を推論する場合があります。",
   "Merge_conflict_marker_encountered_1185": "マージ競合マーカーが検出されました。",
@@ -752,6 +896,7 @@
   "Method_0_cannot_have_an_implementation_because_it_is_marked_abstract_1245": "メソッド '{0}' は abstract に指定されているため、実装を含めることができません。",
   "Method_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2_4101": "エクスポートされたインターフェイスのメソッド '{0}' が、プライベート モジュール '{2}' の名前 '{1}' を持っているか、使用しています。",
   "Method_0_of_exported_interface_has_or_is_using_private_name_1_4102": "エクスポートされたインターフェイスのメソッド '{0}' がプライベート名 '{1}' を持っているか、使用しています。",
+  "Method_not_implemented_95158": "メソッドが実装されていません。",
   "Modifiers_cannot_appear_here_1184": "ここで修飾子を使用することはできません。",
   "Module_0_can_only_be_default_imported_using_the_1_flag_1259": "モジュール '{0}' は、'{1}' フラグを使用して既定でのみインポートできます",
   "Module_0_declares_1_locally_but_it_is_exported_as_2_2460": "モジュール '{0}' は '{1}' をローカルで宣言していますが、これは '{2}' としてエクスポートされています。",
@@ -769,13 +914,14 @@
   "Module_0_was_resolved_as_locally_declared_ambient_module_in_file_1_6144": "モジュール '{0}' は、ファイル '{1}' のローカルで宣言されたアンビエント モジュールとして解決されました。",
   "Module_0_was_resolved_to_1_but_jsx_is_not_set_6142": "モジュール '{0}' は '{1}' に解決されましたが、'--jsx' が設定されていません。",
   "Module_0_was_resolved_to_1_but_resolveJsonModule_is_not_used_7042": "モジュール '{0}' は '{1}' に解決されましたが、'--resolveJsonModule' が使用されていません。",
-  "Module_Resolution_Options_6174": "モジュール解決のオプション",
+  "Module_declaration_names_may_only_use_or_quoted_strings_1443": "モジュール宣言名で使用できるのは、' または \"引用符で囲まれた文字列のみです。",
   "Module_name_0_matched_pattern_1_6092": "モジュール名 '{0}'、照合されたパターン '{1}'。",
   "Module_name_0_was_not_resolved_6090": "======== モジュール名 '{0}' が解決されませんでした。========",
   "Module_name_0_was_successfully_resolved_to_1_6089": "======== モジュール名 '{0}' が正常に '{1}' に解決されました。========",
   "Module_name_0_was_successfully_resolved_to_1_with_Package_ID_2_6218": "======== モジュール名 '{0}' が正常に '{1}' に解決されました (パッケージ ID '{2}')。========",
   "Module_resolution_kind_is_not_specified_using_0_6088": "モジュール解決の種類が '{0}' を使用して指定されていません。",
   "Module_resolution_using_rootDirs_has_failed_6111": "'rootDirs' を使用したモジュール解決が失敗しました。",
+  "Modules_6244": "モジュール",
   "Move_labeled_tuple_element_modifiers_to_labels_95117": "ラベル付きのタプル要素の修飾子をラベルに移動する",
   "Move_to_a_new_file_95049": "新しいファイルへ移動します",
   "Multiple_consecutive_numeric_separators_are_not_permitted_6189": "複数の連続した数値区切り記号を指定することはできません。",
@@ -784,11 +930,14 @@
   "Name_is_not_valid_95136": "名前が無効です",
   "Named_property_0_of_types_1_and_2_are_not_identical_2319": "'{1}' 型および '{2}' 型の名前付きプロパティ '{0}' が一致しません。",
   "Namespace_0_has_no_exported_member_1_2694": "名前空間 '{0}' にエクスポートされたメンバー '{1}' がありません。",
+  "Namespace_must_be_given_a_name_1437": "名前空間に名前を指定する必要があります。",
+  "Namespace_name_cannot_be_0_2819": "名前空間名を '{0}' にすることはできません。",
   "No_base_constructor_has_the_specified_number_of_type_arguments_2508": "指定した数の型引数を持つ基底コンストラクターは存在しません。",
   "No_constituent_of_type_0_is_callable_2755": "型 '{0}' の構成要素は呼び出し可能ではありません。",
   "No_constituent_of_type_0_is_constructable_2759": "型 '{0}' の構成要素はコンストラクト可能ではありません。",
   "No_index_signature_with_a_parameter_of_type_0_was_found_on_type_1_7054": "型 '{0}' のパラメーターを持つインデックス シグネチャが型 '{1}' に見つかりませんでした。",
   "No_inputs_were_found_in_config_file_0_Specified_include_paths_were_1_and_exclude_paths_were_2_18003": "構成ファイル '{0}' で入力が見つかりませんでした。指定された 'include' パスは '{1}' で、'exclude' パスは '{2}' でした。",
+  "No_longer_supported_In_early_versions_manually_set_the_text_encoding_for_reading_files_6608": "サポートされていません。初期のバージョンの場合は、ファイルを読み取るためにテキストのエンコードを手動で設定してください。",
   "No_overload_expects_0_arguments_but_overloads_do_exist_that_expect_either_1_or_2_arguments_2575": "{0} 引数を予期するオーバーロードはありませんが、{1} または {2} 引数のいずれかを予期するオーバーロードは存在します。",
   "No_overload_expects_0_type_arguments_but_overloads_do_exist_that_expect_either_1_or_2_type_arguments_2743": "{0} 型の引数を予期するオーバーロードはありませんが、{1} または {2} 型の引数のいずれかを予期するオーバーロードは存在します。",
   "No_overload_matches_this_call_2769": "この呼び出しに一致するオーバーロードはありません。",
@@ -802,7 +951,6 @@
   "Not_all_code_paths_return_a_value_7030": "一部のコード パスは値を返しません。",
   "Not_all_constituents_of_type_0_are_callable_2756": "型 '{0}' のすべての構成要素が呼び出し可能なわけではありません。",
   "Not_all_constituents_of_type_0_are_constructable_2760": "型 '{0}' のすべての構成要素がコンストラクト可能なわけではありません。",
-  "Numeric_index_type_0_is_not_assignable_to_string_index_type_1_2413": "数値インデックス型 '{0}' を文字列インデックス型 '{1}' に割り当てることはできません。",
   "Numeric_literals_with_absolute_values_equal_to_2_53_or_greater_are_too_large_to_be_represented_accur_80008": "絶対値が 2^53 以上の数値リテラルは大きすぎるため、整数として正確に表現できません。",
   "Numeric_separators_are_not_allowed_here_6188": "数値の区切り記号は、ここでは使用できません。",
   "Object_is_of_type_unknown_2571": "オブジェクト型は 'unknown' です。",
@@ -826,9 +974,11 @@
   "Only_identifiers_Slashqualified_names_with_optional_type_arguments_are_currently_supported_in_a_clas_9002": "クラス 'extends' 句で現在サポートされているのは、オプションの型引数が指定された ID/完全修飾名のみです。",
   "Only_named_exports_may_use_export_type_1383": "名前付きエクスポートでのみ、'export type' を使用できます。",
   "Only_numeric_enums_can_have_computed_members_but_this_expression_has_type_0_If_you_do_not_need_exhau_18033": "計算されたメンバーを使用できるのは数値列挙型のみですが、この式には '{0}' 型があります。網羅性チェックが不要な場合は、代わりにオブジェクト リテラルを使用することをご検討ください。",
+  "Only_output_d_ts_files_and_not_JavaScript_files_6623": "出力の d.ts ファイルのみで、JavaScript ファイルは対象ではありません。",
   "Only_public_and_protected_methods_of_the_base_class_are_accessible_via_the_super_keyword_2340": "'super' キーワードを使用してアクセスできるのは、基底クラスのパブリック メソッドと保護されたメソッドのみです。",
   "Operator_0_cannot_be_applied_to_type_1_2736": "演算子 '{0}' は型 '{1}' に適用できません。",
   "Operator_0_cannot_be_applied_to_types_1_and_2_2365": "演算子 '{0}' を型 '{1}' および '{2}' に適用することはできません。",
+  "Opt_a_project_out_of_multi_project_reference_checking_when_editing_6619": "編集時に複数プロジェクト参照のチェックからプロジェクトをオプトアウトします。",
   "Option_0_can_only_be_specified_in_tsconfig_json_file_or_set_to_false_or_null_on_command_line_6230": "オプション '{0}' は、'tsconfig.json' ファイルで指定することか、コマンド ラインで 'false' または 'null' に設定することしかできません。",
   "Option_0_can_only_be_specified_in_tsconfig_json_file_or_set_to_null_on_command_line_6064": "オプション '{0}' は、'tsconfig.json' ファイルで指定することか、コマンド ラインで 'null' に設定することしかできません。",
   "Option_0_can_only_be_used_when_either_option_inlineSourceMap_or_option_sourceMap_is_provided_5051": "オプション '{0} を使用できるのは、オプション '--inlineSourceMap' またはオプション '--sourceMap' のいずれかを指定した場合のみです。",
@@ -839,16 +989,22 @@
   "Option_0_cannot_be_specified_without_specifying_option_1_or_option_2_5069": "オプション '{1}' またはオプション '{2}' を指定せずに、オプション '{0}' を指定することはできません。",
   "Option_0_should_have_array_of_strings_as_a_value_6103": "オプション '{0}' には、値として文字列の配列を指定する必要があります。",
   "Option_build_must_be_the_first_command_line_argument_6369": "オプション '--build' は最初のコマンド ライン引数である必要があります。",
-  "Option_incremental_can_only_be_specified_using_tsconfig_emitting_to_single_file_or_when_option_tsBui_5074": "オプション '--incremental' は、tsconfig を使用して指定して単一ファイルに出力するか、オプション `--tsBuildInfoFile` が指定された場合にのみ指定することができます。",
+  "Option_incremental_can_only_be_specified_using_tsconfig_emitting_to_single_file_or_when_option_tsBui_5074": "オプション '--incremental' は、tsconfig を使用して指定して単一ファイルに出力するか、オプション '--tsBuildInfoFile' が指定された場合にのみ指定することができます。",
   "Option_isolatedModules_can_only_be_used_when_either_option_module_is_provided_or_option_target_is_ES_5047": "オプション 'isolatedModules' は、オプション '--module' が指定されているか、オプション 'target' が 'ES2015' 以上であるかのいずれかの場合でのみ使用できます。",
+  "Option_preserveConstEnums_cannot_be_disabled_when_isolatedModules_is_enabled_5091": "'isolatedModules' が有効になっているときは、オプション 'preserveConstEnums' を無効にできません。",
   "Option_project_cannot_be_mixed_with_source_files_on_a_command_line_5042": "オプション 'project' をコマンド ライン上でソース ファイルと一緒に指定することはできません。",
   "Option_resolveJsonModule_can_only_be_specified_when_module_code_generation_is_commonjs_amd_es2015_or_5071": "オプション '--resolveJsonModule' は、モジュール コードの生成が 'commonjs'、'amd'、'es2015'、'esNext' である場合にのみ指定できます。",
   "Option_resolveJsonModule_cannot_be_specified_without_node_module_resolution_strategy_5070": "'node' モジュールの解決方法を使用せずにオプション '--resolveJsonModule' を指定することはできません。",
   "Options_0_and_1_cannot_be_combined_6370": "オプション '{0}' と '{1}' を組み合わせることはできません。",
   "Options_Colon_6027": "オプション:",
+  "Output_Formatting_6256": "出力データ形式",
+  "Output_compiler_performance_information_after_building_6615": "ビルド後にコンパイラのパフォーマンス情報を出力します。",
   "Output_directory_for_generated_declaration_files_6166": "生成された宣言ファイルの出力ディレクトリ。",
   "Output_file_0_from_project_1_does_not_exist_6309": "プロジェクト '{1}' からの出力ファイル '{0}' がありません",
   "Output_file_0_has_not_been_built_from_source_file_1_6305": "出力ファイル '{0}' はソース ファイル '{1}' からビルドされていません。",
+  "Output_from_referenced_project_0_included_because_1_specified_1411": "'{1}' が指定されたため、参照先プロジェクト '{0}' から出力がインクルードされました",
+  "Output_from_referenced_project_0_included_because_module_is_specified_as_none_1412": "'--module' が 'none' として指定されたため、参照先プロジェクト '{0}' から出力がインクルードされました",
+  "Output_more_detailed_compiler_performance_information_after_building_6632": "ビルド後により詳しいコンパイラのパフォーマンス情報を出力します。",
   "Overload_0_of_1_2_gave_the_following_error_2772": "{1} 中 {0} のオーバーロード, '{2}' により、次のエラーが発生しました。",
   "Overload_signatures_must_all_be_abstract_or_non_abstract_2512": "オーバーロードのシグネチャはすべてが抽象または非抽象である必要があります。",
   "Overload_signatures_must_all_be_ambient_or_non_ambient_2384": "オーバーロードのシグネチャは、すべてアンビエントであるか、すべてアンビエントでないかのどちらかである必要があります。",
@@ -892,18 +1048,25 @@
   "Parameter_type_of_public_static_setter_0_from_exported_class_has_or_is_using_name_1_from_private_mod_4034": "エクスポートされたクラスのパブリック静的セッター '{0}' のパラメーター型が、プライベート モジュール '{2}' の名前 '{1}' を持っているか、使用しています。",
   "Parameter_type_of_public_static_setter_0_from_exported_class_has_or_is_using_private_name_1_4035": "エクスポートされたクラスのパブリック静的セッター '{0}' のパラメーター型が、プライベート名 '{1}' を持っているか、使用しています。",
   "Parse_in_strict_mode_and_emit_use_strict_for_each_source_file_6141": "厳格モードで解析してソース ファイルごとに \"use strict\" を生成します。",
+  "Part_of_files_list_in_tsconfig_json_1409": "tsconfig.json の 'files' リストの一部",
   "Pattern_0_can_have_at_most_one_Asterisk_character_5061": "パターン '{0}' に使用できる '*' 文字は最大で 1 つです。",
   "Performance_timings_for_diagnostics_or_extendedDiagnostics_are_not_available_in_this_session_A_nativ_6386": "'--diagnostics' または '--extendedDiagnostics' のパフォーマンスのタイミングは、このセッションでは使用できません。Web パフォーマンス API のネイティブ実装が見つかりませんでした。",
+  "Platform_specific_6912": "プラットフォーム固有",
   "Prefix_0_with_an_underscore_90025": "アンダースコアを含むプレフィックス '{0}'",
   "Prefix_all_incorrect_property_declarations_with_declare_95095": "すべての正しくないプロパティ宣言の前に 'declare' を付ける",
   "Prefix_all_unused_declarations_with_where_possible_95025": "可能な場合は、使用されていないすべての宣言にプレフィックスとして '_' を付けます",
   "Prefix_with_declare_95094": "'declare' を前に付ける",
+  "Print_all_of_the_files_read_during_the_compilation_6653": "コンパイル時に読み取られたすべてのファイルを出力します。",
+  "Print_files_read_during_the_compilation_including_why_it_was_included_6631": "コンパイル時に読み取られたファイルを、それが含まれる理由と共に出力します。",
+  "Print_names_of_files_and_the_reason_they_are_part_of_the_compilation_6505": "ファイルの名前と、それらがコンパイルに含まれている理由を書き出します。",
   "Print_names_of_files_part_of_the_compilation_6155": "コンパイルの一環としてファイルの名前を書き出します。",
   "Print_names_of_files_that_are_part_of_the_compilation_and_then_stop_processing_6503": "コンパイルの一部であるファイルの名前を出力してから、処理を停止します。",
   "Print_names_of_generated_files_part_of_the_compilation_6154": "コンパイルの一環として生成されたファイル名を書き出します。",
   "Print_the_compiler_s_version_6019": "コンパイラのバージョンを表示します。",
   "Print_the_final_configuration_instead_of_building_1350": "ビルドを実行するのではなく、最終的な構成を出力します。",
+  "Print_the_names_of_emitted_files_after_a_compilation_6652": "コンパイル後に生成されたファイルの名前を出力します。",
   "Print_this_message_6017": "このメッセージを表示します。",
+  "Private_accessor_was_defined_without_a_getter_2806": "ゲッターなしでプライベート アクセサーが定義されました。",
   "Private_identifiers_are_not_allowed_in_variable_declarations_18029": "変数宣言では、private 識別子は許可されていません。",
   "Private_identifiers_are_not_allowed_outside_class_bodies_18016": "private 識別子は、クラス本体の外では許可されていません。",
   "Private_identifiers_are_only_available_when_targeting_ECMAScript_2015_and_higher_18028": "private 識別子は ECMAScript 2015 以上をターゲットにする場合にのみ使用できます。",
@@ -911,6 +1074,7 @@
   "Private_or_protected_member_0_cannot_be_accessed_on_a_type_parameter_4105": "private または protected メンバー '{0}' には、型パラメーターではアクセスできません。",
   "Project_0_can_t_be_built_because_its_dependency_1_has_errors_6363": "プロジェクト '{0}' はその依存関係 '{1}' にエラーがあるためビルドできません",
   "Project_0_can_t_be_built_because_its_dependency_1_was_not_built_6383": "依存関係 '{1}' がビルドされていないため、プロジェクト '{0}' はビルドできません",
+  "Project_0_is_being_forcibly_rebuilt_6388": "プロジェクト '{0}' が強制的にリビルドされています",
   "Project_0_is_out_of_date_because_its_dependency_1_is_out_of_date_6353": "プロジェクト '{0}' はその依存関係 '{1}' が古いため最新の状態ではありません",
   "Project_0_is_out_of_date_because_oldest_output_1_is_older_than_newest_input_2_6350": "プロジェクト '{0}' は最も古い出力 '{1}' が最新の入力 '{2}' より古いため最新の状態ではありません",
   "Project_0_is_out_of_date_because_output_file_1_does_not_exist_6352": "プロジェクト '{0}' は出力ファイル '{1}' が存在しないため最新の状態ではありません",
@@ -920,14 +1084,18 @@
   "Project_0_is_up_to_date_because_newest_input_1_is_older_than_oldest_output_2_6351": "プロジェクト '{0}' は最新の入力 '{1}' が最も古い出力 '{2}' より古いため最新の状態です",
   "Project_0_is_up_to_date_with_d_ts_files_from_its_dependencies_6354": "プロジェクト '{0}' はその依存関係からの .d.ts ファイルで最新の状態です",
   "Project_references_may_not_form_a_circular_graph_Cycle_detected_Colon_0_6202": "プロジェクト参照が円グラフを形成できません。循環が検出されました: {0}",
+  "Projects_6255": "プロジェクト",
   "Projects_in_this_build_Colon_0_6355": "このビルドのプロジェクト: {0}",
   "Projects_to_reference_6300": "参照するプロジェクト",
+  "Property_0_cannot_have_an_initializer_because_it_is_marked_abstract_1267": "メソッド '{0}' は abstract に指定されているため、初期化子を含めることができません。",
   "Property_0_comes_from_an_index_signature_so_it_must_be_accessed_with_0_4111": "プロパティ '{0}' はインデックス シグネチャに基づいているため、['{0}'] を使用してアクセスする必要があります。",
   "Property_0_does_not_exist_on_const_enum_1_2479": "プロパティ '{0}' が 'const' 列挙型 '{1}' に存在しません。",
   "Property_0_does_not_exist_on_type_1_2339": "プロパティ '{0}' は型 '{1}' に存在しません。",
   "Property_0_does_not_exist_on_type_1_Did_you_mean_2_2551": "プロパティ '{0}' は型 '{1}' に存在していません。'{2}' ですか?",
   "Property_0_does_not_exist_on_type_1_Did_you_mean_to_access_the_static_member_2_instead_2576": "プロパティ '{0}' は型 '{1}' には存在しません。代わりに静的メンバー '{2}' にアクセスしようとしていましたか?",
   "Property_0_does_not_exist_on_type_1_Do_you_need_to_change_your_target_library_Try_changing_the_lib_c_2550": "プロパティ '{0}' が型 '{1}' に存在しません。ターゲット ライブラリを変更する必要がありますか? 'lib' コンパイラ オプションを '{2}' 以降に変更してみてください。",
+  "Property_0_does_not_exist_on_type_1_Try_changing_the_lib_compiler_option_to_include_dom_2812": "プロパティ ' {0} ' は型 ' {1} ' に存在しません。' lib ' コンパイラ オプションを ' dom ' を含むように変更してみてください。",
+  "Property_0_has_no_initializer_and_is_not_definitely_assigned_in_a_class_static_block_2817": "プロパティ '{0}' に初期化子がなく、クラスの静的ブロックで明確に割り当てられていません。",
   "Property_0_has_no_initializer_and_is_not_definitely_assigned_in_the_constructor_2564": "プロパティ '{0}' に初期化子がなく、コンストラクターで明確に割り当てられていません。",
   "Property_0_implicitly_has_type_any_because_its_get_accessor_lacks_a_return_type_annotation_7033": "プロパティ '{0}' には型 'any' が暗黙的に設定されています。get アクセサーには戻り値の型の注釈がないためです。",
   "Property_0_implicitly_has_type_any_because_its_set_accessor_lacks_a_parameter_type_annotation_7032": "プロパティ '{0}' には型 'any' が暗黙的に設定されています。set アクセサーにはパラメーター型の注釈がないためです。",
@@ -945,18 +1113,19 @@
   "Property_0_is_optional_in_type_1_but_required_in_type_2_2327": "プロパティ '{0}' は型 '{1}' では省略可能ですが、型 '{2}' では必須です。",
   "Property_0_is_private_and_only_accessible_within_class_1_2341": "プロパティ '{0}' はプライベートで、クラス '{1}' 内でのみアクセスできます。",
   "Property_0_is_private_in_type_1_but_not_in_type_2_2325": "プロパティ '{0}' は型 '{1}' ではプライベートですが、型 '{2}' ではプライベートではありません。",
-  "Property_0_is_protected_and_only_accessible_through_an_instance_of_class_1_2446": "プロパティ '{0}' は保護されているため、クラス '{1}' のインスタンス経由でのみアクセスできます。",
+  "Property_0_is_protected_and_only_accessible_through_an_instance_of_class_1_This_is_an_instance_of_cl_2446": "プロパティ '{0}' は保護されており、クラス '{1}' のインスタンスを通じてのみアクセスできます。これは、クラス '{2}' のインスタンスです。",
   "Property_0_is_protected_and_only_accessible_within_class_1_and_its_subclasses_2445": "プロパティ '{0}' は保護されているため、クラス '{1}' とそのサブクラス内でのみアクセスできます。",
   "Property_0_is_protected_but_type_1_is_not_a_class_derived_from_2_2443": "プロパティ '{0}' は保護されていますが、型 '{1}' は '{2}' から派生したクラスではありません。",
   "Property_0_is_protected_in_type_1_but_public_in_type_2_2444": "プロパティ '{0}' は型 '{1}' では保護されていますが、型 '{2}' ではパブリックです。",
   "Property_0_is_used_before_being_assigned_2565": "プロパティ '{0}' は割り当てられる前に使用されています。",
   "Property_0_is_used_before_its_initialization_2729": "プロパティ '{0}' が初期化前に使用されています。",
+  "Property_0_may_not_be_used_in_a_static_property_s_initializer_in_the_same_class_when_target_is_esnex_2810": "' target ' が ' esnext ' で、' useesb Forclassfields ' が ' false ' の場合、プロパティ ' {0} ' を同じクラスにある静的プロパティの初期化子で使用することはできません。",
+  "Property_0_may_not_exist_on_type_1_Did_you_mean_2_2568": "プロパティ '{0}' は型 '{1}' に存在していない可能性があります。'{2}' ですか?",
   "Property_0_of_JSX_spread_attribute_is_not_assignable_to_target_property_2606": "JSX のスプレッド属性のプロパティ '{0}' をターゲット プロパティに割り当てることはできません。",
   "Property_0_of_exported_class_expression_may_not_be_private_or_protected_4094": "エクスポートされたクラスの式のプロパティ '{0}' が private または protected でない可能性があります。",
   "Property_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2_4032": "エクスポートされたインターフェイスのプロパティ '{0}' が、プライベート モジュール '{2}' の名前 '{1}' を持っているか、使用しています。",
   "Property_0_of_exported_interface_has_or_is_using_private_name_1_4033": "エクスポートされたインターフェイスのプロパティ '{0}' が、プライベート名 '{1}' を持っているか、使用しています。",
-  "Property_0_of_type_1_is_not_assignable_to_numeric_index_type_2_2412": "型 '{1}' のプロパティ '{0}' を数値インデックス型 '{2}' に割り当てることはできません。",
-  "Property_0_of_type_1_is_not_assignable_to_string_index_type_2_2411": "型 '{1}' のプロパティ '{0}' を文字列インデックス型 '{2}' に割り当てることはできません。",
+  "Property_0_of_type_1_is_not_assignable_to_2_index_type_3_2411": "型 '{1}' のプロパティ '{0}' は'{2}' インデックス型 '{3}' に割り当てることはできません。",
   "Property_0_was_also_declared_here_2733": "ここではプロパティ '{0}' も宣言されています。",
   "Property_0_will_overwrite_the_base_property_in_1_If_this_is_intentional_add_an_initializer_Otherwise_2612": "プロパティ '{0}' は、'{1}' の基底プロパティを上書きします。これが意図的である場合は初期化子を追加してください。そうでなければ、'declare' 修飾子を追加するか、冗長な宣言を削除してください。",
   "Property_assignment_expected_1136": "プロパティの代入が必要です。",
@@ -978,12 +1147,18 @@
   "Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4027": "エクスポートされたクラスのパブリック静的プロパティ '{0}' が、プライベート モジュール '{2}' の名前 '{1}' を持っているか、使用しています。",
   "Public_static_property_0_of_exported_class_has_or_is_using_private_name_1_4028": "エクスポートされたクラスのパブリック静的プロパティ '{0}' が、プライベート名 '{1}' を持っているか、使用しています。",
   "Qualified_name_0_is_not_allowed_without_a_leading_param_object_1_8032": "先頭に '@param {object} {1}' がない場合、修飾名 '{0}' は許可されません。",
+  "Raise_an_error_when_a_function_parameter_isn_t_read_6676": "関数パラメーターが読み取られていないときに、エラーを発生させる",
   "Raise_error_on_expressions_and_declarations_with_an_implied_any_type_6052": "暗黙的な 'any' 型を含む式と宣言に関するエラーを発生させます。",
   "Raise_error_on_this_expressions_with_an_implied_any_type_6115": "暗黙的な 'any' 型を持つ 'this' 式でエラーが発生します。",
   "Re_exporting_a_type_when_the_isolatedModules_flag_is_provided_requires_using_export_type_1205": "'--IsolatedModules' フラグが指定されている場合に型を再エクスポートするには、 'export type' を使用する必要があります。",
   "Redirect_output_structure_to_the_directory_6006": "ディレクトリへ出力構造をリダイレクトします。",
+  "Reduce_the_number_of_projects_loaded_automatically_by_TypeScript_6617": "TypeScript によって自動的に読み込まれるプロジェクトの数を減らします。",
   "Referenced_project_0_may_not_disable_emit_6310": "参照されたプロジェクト '{0}' は、生成を無効にできません。",
   "Referenced_project_0_must_have_setting_composite_Colon_true_6306": "参照されているプロジェクト '{0}' には、設定 \"composite\": true が必要です。",
+  "Referenced_via_0_from_file_1_1400": "ファイル '{1}' から '{0}' を介して参照されています",
+  "Remove_a_list_of_directories_from_the_watch_process_6628": "ウォッチ プロセスからディレクトリの一覧を削除します。",
+  "Remove_a_list_of_files_from_the_watch_mode_s_processing_6629": "ウォッチ モードの処理からファイルの一覧を削除します。",
+  "Remove_all_unnecessary_override_modifiers_95163": "不要な 'override' 修飾子をすべて削除",
   "Remove_all_unnecessary_uses_of_await_95087": "不要な 'await' の使用をすべて削除する",
   "Remove_all_unreachable_code_95051": "到達できないコードをすべて削除します",
   "Remove_all_unused_labels_95054": "すべての未使用のラベルを削除します",
@@ -991,8 +1166,10 @@
   "Remove_braces_from_arrow_function_95060": "アロー関数から中かっこを削除します",
   "Remove_braces_from_arrow_function_body_95112": "アロー関数本体から中かっこを削除します",
   "Remove_import_from_0_90005": "'{0}' からのインポートを削除",
+  "Remove_override_modifier_95161": "'override ' 修飾子の削除",
   "Remove_parentheses_95126": "かっこの削除",
   "Remove_template_tag_90011": "テンプレート タグを削除する",
+  "Remove_the_20mb_cap_on_total_source_code_size_for_JavaScript_files_in_the_TypeScript_language_server_6618": "TypeScript 言語サーバーの JavaScript ファイルのソース コードの合計サイズについて 20 MB の上限を削除します。",
   "Remove_type_parameters_90012": "型パラメーターを削除する",
   "Remove_unnecessary_await_95086": "不要な 'await' を削除する",
   "Remove_unreachable_code_95050": "到達できないコードを削除します",
@@ -1010,14 +1187,16 @@
   "Report_errors_in_js_files_8019": ".js ファイルのエラーを報告します。",
   "Report_errors_on_unused_locals_6134": "使用されていないローカルに関するエラーを報告します。",
   "Report_errors_on_unused_parameters_6135": "使用されていないパラメーターに関するエラーを報告します。",
-  "Require_undeclared_properties_from_index_signatures_to_use_element_accesses_6803": "要素アクセスを使用するには、インデックス シグネチャからの宣言されていないプロパティが必要です。",
+  "Require_undeclared_properties_from_index_signatures_to_use_element_accesses_6717": "要素アクセスを使用するには、インデックス シグネチャからの宣言されていないプロパティが必要です。",
   "Required_type_parameters_may_not_follow_optional_type_parameters_2706": "必須の型パラメーターの後に、オプションの型パラメーターを続けることはできません。",
   "Resolution_for_module_0_was_found_in_cache_from_location_1_6147": "モジュール '{0}' の解決が場所 '{1}' のキャッシュに見つかりました。",
+  "Resolution_for_type_reference_directive_0_was_found_in_cache_from_location_1_6241": "種類参照指令 '{0}' の解決策は、場所 '{1}' のキャッシュには見つかりませんでした。",
   "Resolve_keyof_to_string_valued_property_names_only_no_numbers_or_symbols_6195": "'keyof' を文字列値のプロパティ名のみに解決します (数字または記号なし)。",
   "Resolving_from_node_modules_folder_6118": "node_modules フォルダーから解決しています...",
   "Resolving_module_0_from_1_6086": "======== '{1}' からモジュール '{0}' を解決しています。========",
   "Resolving_module_name_0_relative_to_base_url_1_2_6094": "ベース URL '{1}' - '{2}' に相対するモジュール名 '{0}' を解決しています。",
   "Resolving_real_path_for_0_result_1_6130": "'{0}' の実際のパスを解決しています。結果は '{1}' です。",
+  "Resolving_type_reference_directive_0_containing_file_1_6242": "======== ファイル '{1}' のある種類参照指令 '{0}' の解決 ========",
   "Resolving_type_reference_directive_0_containing_file_1_root_directory_2_6116": "======== 型参照ディレクティブ '{0}' を解決しています。それを含むファイル '{1}'、ルート ディレクトリ '{2}'。========",
   "Resolving_type_reference_directive_0_containing_file_1_root_directory_not_set_6123": "======== 型参照ディレクティブ '{0}' を解決しています。それを含むファイル '{1}'、ルート ディレクトリは未設定。========",
   "Resolving_type_reference_directive_0_containing_file_not_set_root_directory_1_6127": "======== 型参照ディレクティブ '{0}' を解決しています。それを含むファイルは未設定、ルート ディレクトリ '{1}'。========",
@@ -1029,6 +1208,7 @@
   "Rest_signatures_are_incompatible_2572": "rest シグネチャには互換性がありません。",
   "Rest_types_may_only_be_created_from_object_types_2700": "rest 型はオブジェクトの種類からのみ作成できます。",
   "Return_type_annotation_circularly_references_itself_2577": "戻り値の型の注釈は、それ自身を循環参照します。",
+  "Return_type_must_be_inferred_from_a_function_95149": "戻り値の型は関数から推論される必要があります",
   "Return_type_of_call_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1_4046": "エクスポートされたインターフェイスの呼び出しシグネチャの戻り値の型が、プライベート モジュール '{1}' の名前 '{0}' を持っているか、使用しています。",
   "Return_type_of_call_signature_from_exported_interface_has_or_is_using_private_name_0_4047": "エクスポートされたインターフェイスの呼び出しシグネチャの戻り値の型が、プライベート名 '{0}' を持っているか、使用しています。",
   "Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_name_0_from_private_mod_4044": "エクスポートされたインターフェイスのコンストラクター シグネチャの戻り値の型が、プライベート モジュール '{1}' の名前 '{0}' を持っているか、使用しています。",
@@ -1053,15 +1233,31 @@
   "Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_external_module__4050": "エクスポートされたクラスのパブリック静的メソッドの戻り値の型が外部モジュール {1} の名前 '{0}' を持っているか使用していますが、名前を指定することはできません。",
   "Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_private_module_1_4051": "エクスポートされたクラスのパブリック静的メソッドの戻り値の型が、プライベート モジュール '{1}' の名前 '{0}' を持っているか、使用しています。",
   "Return_type_of_public_static_method_from_exported_class_has_or_is_using_private_name_0_4052": "エクスポートされたクラスのパブリック静的メソッドの戻り値の型が、プライベート名 '{0}' を持っているか、使用しています。",
-  "Reusing_module_resolutions_originating_in_0_since_resolutions_are_unchanged_from_old_program_6184": "'{0}' で生成されたモジュール解決は、前のプログラムから変更されていないため、再利用しています。",
-  "Reusing_resolution_of_module_0_to_file_1_from_old_program_6183": "前のプログラムを再利用して、モジュール '{0}' をファイル '{1}' に解決しています。",
+  "Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_not_resolved_6395": "場所 '{2}' のキャッシュにあった '{1}' からモジュール '{0}' の解決策を再利用しましたが、解決できませんでした。",
+  "Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_6393": "場所 '{2}' のキャッシュにあった '{1}' からモジュール '{0}' の解決策を再利用すると、'{3}' に正常に解決されました。",
+  "Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_6394": "場所 '{2}' からキャッシュにあった '{1}' からモジュール '{0}' の解決策を再利用すると、パッケージ ID '{4}' の '{3}' に正常に解決されました。",
+  "Reusing_resolution_of_module_0_from_1_of_old_program_it_was_not_resolved_6389": "古いプログラムの '{1}' からモジュール '{0}' の解決策を再利用しようとしましたが、解決されませんでした。",
+  "Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2_6183": "古いプログラムの '{1}' からモジュール '{0}' の解決策を再利用すると、'{2}' に正常に解決されました。",
+  "Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2_with_Package__6184": "古いプログラムの '{1}' からモジュール '{0}' の解決策を再利用すると、パッケージ ID '{3}' の '{2}' に正常に解決されました。",
+  "Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_not_re_6398": "場所 '{2}' からキャッシュにあった '{1}' からタイプ リファレンス ディレクティブ '{0}' の解決策を再利用しましたが、解決できませんでした。",
+  "Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_succes_6396": "場所 '{2}' からキャッシュにあった '{1}' からタイプ リファレンス ディレクティブ '{0}' の解決策を再利用すると、'{3}' に正常に解決されました。",
+  "Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_succes_6397": "場所 '{2}' からキャッシュにあった '{1}' からタイプ リファレンス ディレクティブ '{0}' の解決策を再利用すると、パッケージ ID '{4}' の '{3}' に正常に解決されました。",
+  "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_not_resolved_6392": "古いプログラムの '{1}' からタイプ リファレンス ディレクティブ '{0}' の解決策を再利用しましたが、解決できませんでした。",
+  "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved__6390": "古いプログラムの '{1}' からタイプ リファレンス ディレクティブ '{0}' の解決策を再利用すると、'{2}' に正常に解決されました。",
+  "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved__6391": "古いプログラムの '{1}' からタイプ リファレンス ディレクティブ '{0}' の解決策を再利用すると、パッケージ ID '{3}' の '{2}' に正常に解決されました。",
   "Rewrite_all_as_indexed_access_types_95034": "すべてをインデックス付きアクセス型として書き換えます",
   "Rewrite_as_the_indexed_access_type_0_90026": "インデックス付きのアクセスの種類 '{0}' として書き換える",
   "Root_directory_cannot_be_determined_skipping_primary_search_paths_6122": "ルート ディレクトリを決定できません。プライマリ検索パスをスキップします。",
+  "Root_file_specified_for_compilation_1427": "コンパイル用に指定されたルート ファイル",
   "STRATEGY_6039": "戦略",
+  "Save_tsbuildinfo_files_to_allow_for_incremental_compilation_of_projects_6642": "プロジェクトのインクリメンタル コンパイルを可能にするには、.tsbuildinfo ファイルを保存します。",
   "Scoped_package_detected_looking_in_0_6182": "'{0}' 内を検索して、スコープ パッケージが検出されました",
+  "Selection_is_not_a_valid_statement_or_statements_95155": "選択内容は有効なステートメントではありません",
   "Selection_is_not_a_valid_type_node_95133": "選択は有効な型ノードではありません",
+  "Set_the_JavaScript_language_version_for_emitted_JavaScript_and_include_compatible_library_declaratio_6705": "生成された JavaScript の JavaScript 言語バージョンを設定し、互換性のあるライブラリ宣言を含めます。",
+  "Set_the_language_of_the_messaging_from_TypeScript_This_does_not_affect_emit_6654": "TypeScript からのメッセージの言語を設定します。これは生成には影響を与えません。",
   "Set_the_module_option_in_your_configuration_file_to_0_95099": "構成ファイルの 'module' オプションを '{0}' に設定する",
+  "Set_the_newline_character_for_emitting_files_6659": "ファイルを生成するための改行文字を設定します。",
   "Set_the_target_option_in_your_configuration_file_to_0_95098": "構成ファイルの 'target' オプションを '{0}' に設定する",
   "Setters_cannot_return_a_value_2408": "セッターは値を返せません。",
   "Show_all_compiler_options_6169": "コンパイラ オプションをすべて表示します。",
@@ -1069,31 +1265,63 @@
   "Show_verbose_diagnostic_information_6150": "詳細な診断情報を表示します。",
   "Show_what_would_be_built_or_deleted_if_specified_with_clean_6367": "ビルドされる (または '--clean' で指定される場合は、削除される) 内容を表示する",
   "Signature_0_must_be_a_type_predicate_1224": "シグネチャ '{0}' は型の述語である必要があります。",
+  "Skip_type_checking_all_d_ts_files_6693": "すべての .d.ts ファイルについて型チェックをスキップします。",
+  "Skip_type_checking_d_ts_files_that_are_included_with_TypeScript_6692": "TypeScript に含まれている .d.ts ファイルの型チェックをスキップします。",
   "Skip_type_checking_of_declaration_files_6012": "宣言ファイルの型チェックをスキップします。",
   "Skipping_build_of_project_0_because_its_dependency_1_has_errors_6362": "プロジェクト '{0}' のビルドは、その依存関係 '{1}' にエラーがあるため、スキップしています",
   "Skipping_build_of_project_0_because_its_dependency_1_was_not_built_6382": "依存関係 '{1}' がビルドされていないため、プロジェクト '{0}' のビルドをスキップしています",
-  "Source_Map_Options_6175": "ソース マップ オプション",
+  "Source_from_referenced_project_0_included_because_1_specified_1414": "'{1}' が指定されたため、参照先プロジェクト '{0}' からソースがインクルードされました",
+  "Source_from_referenced_project_0_included_because_module_is_specified_as_none_1415": "'--module' が 'none' として指定されたため、参照先プロジェクト '{0}' からソースがインクルードされました",
   "Source_has_0_element_s_but_target_allows_only_1_2619": "ソースには {0} 個の要素がありますが、ターゲットで使用できるのは {1} 個のみです。",
   "Source_has_0_element_s_but_target_requires_1_2618": "ソースには {0} 個の要素が含まれていますが、ターゲットには {1} 個が必要です。",
+  "Source_provides_no_match_for_required_element_at_position_0_in_target_2623": "ソースには、ターゲットの位置 {0} にある必須要素と一致するものがありません。",
+  "Source_provides_no_match_for_variadic_element_at_position_0_in_target_2624": "ソースには、ターゲットの位置 {0} にある可変個引数要素と一致するものがありません。",
   "Specialized_overload_signature_is_not_assignable_to_any_non_specialized_signature_2382": "特殊化されたオーバーロード シグネチャは、特殊化されていないシグネチャに割り当てることはできません。",
   "Specifier_of_dynamic_import_cannot_be_spread_element_1325": "動的インポートの指定子にはスプレッド要素を指定できません。",
-  "Specify_ECMAScript_target_version_Colon_ES3_default_ES5_ES2015_ES2016_ES2017_ES2018_ES2019_ES2020_or_6015": "ECMAScript のターゲット バージョンを指定します: 'ES3' (既定値)、'ES5'、'ES2015'、'ES2016'、'ES2017'、'ES2018'、'ES2019'、'ES2020'、'ESNEXT'。",
-  "Specify_JSX_code_generation_Colon_preserve_react_native_or_react_6080": "JSX コード生成を指定します: 'preserve'、'react-native'、'react'。",
-  "Specify_emit_Slashchecking_behavior_for_imports_that_are_only_used_for_types_1368": "型にのみ使用されるインポートの生成または確認動作を指定する",
+  "Specify_ECMAScript_target_version_6015": "ECMAScript ターゲット バージョンを指定します。",
+  "Specify_JSX_code_generation_6080": "JSX コードの生成を指定します。",
+  "Specify_a_file_that_bundles_all_outputs_into_one_JavaScript_file_If_declaration_is_true_also_designa_6679": "1 つの JavaScript ファイルにすべての出力をバンドルするファイルを指定します。'declaration' が true の場合は、すべての .d.ts 出力をバンドルするファイルも指定します。",
+  "Specify_a_list_of_glob_patterns_that_match_files_to_be_included_in_compilation_6641": "コンパイルに含めるファイルに一致する glob パターンの一覧を指定します。",
+  "Specify_a_list_of_language_service_plugins_to_include_6681": "含める言語サービス プラグインの一覧を指定します。",
+  "Specify_a_set_of_bundled_library_declaration_files_that_describe_the_target_runtime_environment_6651": "ターゲットのランタイム環境を記述する、バンドルされたライブラリ宣言ファイルのセットを指定します。",
+  "Specify_a_set_of_entries_that_re_map_imports_to_additional_lookup_locations_6680": "追加の検索場所にインポートを再マップするエントリのセットを指定します。",
+  "Specify_an_array_of_objects_that_specify_paths_for_projects_Used_in_project_references_6687": "プロジェクトのパスを指定するオブジェクトの配列を指定します。プロジェクトの参照で使用されます。",
+  "Specify_an_output_folder_for_all_emitted_files_6678": "すべての生成されたファイルに対して出力フォルダーを指定します。",
+  "Specify_emit_Slashchecking_behavior_for_imports_that_are_only_used_for_types_6718": "型にのみ使用されるインポートの生成または確認動作を指定する",
   "Specify_file_to_store_incremental_compilation_information_6380": "増分コンパイル情報を格納するファイルを指定する",
+  "Specify_how_TypeScript_looks_up_a_file_from_a_given_module_specifier_6658": "TypeScript を使用して、指定されたモジュール指定子でファイルを検索する方法を指定します。",
+  "Specify_how_directories_are_watched_on_systems_that_lack_recursive_file_watching_functionality_6714": "再帰的なファイル ウォッチ機能を持たないシステムでディレクトリをウォッチするための方法を指定します。",
+  "Specify_how_the_TypeScript_watch_mode_works_6715": "TypeScript ウォッチ モードの動作方法を指定します。",
   "Specify_library_files_to_be_included_in_the_compilation_6079": "コンパイルに含めるライブラリ ファイルを指定します。",
-  "Specify_module_code_generation_Colon_none_commonjs_amd_system_umd_es2015_es2020_or_ESNext_6016": "モジュール コードの生成を指定します: 'none'、'commonjs'、'amd'、'system'、'umd'、'es2015'、'es2020、'ESNext'。",
+  "Specify_module_code_generation_6016": "モジュール コードの生成を指定します。",
   "Specify_module_resolution_strategy_Colon_node_Node_js_or_classic_TypeScript_pre_1_6_6069": "モジュールの解決方法を指定します: 'node' (Node.js) または 'classic' (TypeScript pre-1.6)。",
-  "Specify_strategy_for_creating_a_polling_watch_when_it_fails_to_create_using_file_system_events_Colon_6227": "ファイル システムのイベントを使用して作成できなかった場合に、ポーリング監視を作成する方法を指定します: 'FixedInterval' (既定)、'PriorityInterval'、'DynamicPriority'。",
-  "Specify_strategy_for_watching_directory_on_platforms_that_don_t_support_recursive_watching_natively__6226": "再帰的な監視をネイティブでサポートしていないプラットフォーム上のディレクトリを監視する方法を指定します: 'UseFsEvents' (既定)、'FixedPollingInterval'、'DynamicPriorityPolling'。",
-  "Specify_strategy_for_watching_file_Colon_FixedPollingInterval_default_PriorityPollingInterval_Dynami_6225": "ファイルの監視方法を指定します: 'FixedPollingInterval' (既定)、'PriorityPollingInterval'、'DynamicPriorityPolling'、'UseFsEvents'、'UseFsEventsOnParentDirectory'。",
+  "Specify_module_specifier_used_to_import_the_JSX_factory_functions_when_using_jsx_Colon_react_jsx_Ast_6649": "'jsx: react-jsx*' を使用するときに JSX ファクトリ関数のインポートに使用するモジュール指定子を指定します。",
+  "Specify_multiple_folders_that_act_like_Slashnode_modules_Slash_types_6710": "'./node_modules/@types' のように動作する複数のフォルダーを指定します。",
+  "Specify_one_or_more_path_or_node_module_references_to_base_configuration_files_from_which_settings_a_6633": "設定の継承元となる基本構成ファイルへのパスまたはノード モジュール参照を 1 つまたは複数指定します。",
+  "Specify_options_for_automatic_acquisition_of_declaration_files_6709": "宣言ファイルの自動取得に関するオプションを指定します。",
+  "Specify_strategy_for_creating_a_polling_watch_when_it_fails_to_create_using_file_system_events_Colon_6227": "ファイル システムのイベントを使用して作成できなかった場合に、ポーリング監視を作成する方法を指定します: 'FixedInterval' (既定)、'PriorityInterval'、'DynamicPriority'、'FixedChunkSize'。",
+  "Specify_strategy_for_watching_directory_on_platforms_that_don_t_support_recursive_watching_natively__6226": "再帰的な監視をネイティブでサポートしていないプラットフォーム上のディレクトリを監視する方法を指定します: 'UseFsEvents' (既定)、'FixedPollingInterval'、'DynamicPriorityPolling'、'FixedChunkSizePolling'。",
+  "Specify_strategy_for_watching_file_Colon_FixedPollingInterval_default_PriorityPollingInterval_Dynami_6225": "ファイルの監視方法を指定します: 'FixedPollingInterval' (既定)、'PriorityPollingInterval'、'DynamicPriorityPolling'、'FixedChunkSizePolling'、'UseFsEvents'、'UseFsEventsOnParentDirectory'。",
+  "Specify_the_JSX_Fragment_reference_used_for_fragments_when_targeting_React_JSX_emit_e_g_React_Fragme_6648": "React JSX 発行を対象とするときにフラグメントに使用される JSX フラグメント参照を指定します ('React.Fragment' や 'Fragment' など)。",
   "Specify_the_JSX_factory_function_to_use_when_targeting_react_JSX_emit_e_g_React_createElement_or_h_6146": "'react' JSX 発行 ('React.createElement' や 'h') などを対象とするときに使用する JSX ファクトリ関数を指定します。",
+  "Specify_the_JSX_factory_function_used_when_targeting_React_JSX_emit_e_g_React_createElement_or_h_6647": "React JSX 発行を対象とするときに使用される JSX ファクトリ関数を指定します ('React.createElement' や 'h' など)。",
   "Specify_the_JSX_fragment_factory_function_to_use_when_targeting_react_JSX_emit_with_jsxFactory_compi_18034": "'jsxFactory' コンパイラ オプションを指定して 'react' JSX 生成をターゲットにするときに使用する JSX フラグメント ファクトリ関数を指定します (例: 'Fragment')。",
+  "Specify_the_base_directory_to_resolve_non_relative_module_names_6607": "非相対モジュール名を解決するための基本ディレクトリを指定します。",
   "Specify_the_end_of_line_sequence_to_be_used_when_emitting_files_Colon_CRLF_dos_or_LF_unix_6060": "ファイルの生成時に使用する行シーケンスの末尾を指定します: 'CRLF' (dos) または 'LF' (unix)。",
+  "Specify_the_folder_for_tsbuildinfo_incremental_compilation_files_6707": ".tsbuildinfo 増分コンパイル ファイルのフォルダーを指定します。",
   "Specify_the_location_where_debugger_should_locate_TypeScript_files_instead_of_source_locations_6004": "デバッガーがソースの場所の代わりに TypeScript ファイルを検索する必要のある場所を指定します。",
-  "Specify_the_location_where_debugger_should_locate_map_files_instead_of_generated_locations_6003": "デバッガーが、生成された場所の代わりにマップ ファイルを検索する必要のある場所を指定します。",
+  "Specify_the_location_where_debugger_should_locate_map_files_instead_of_generated_locations_6655": "デバッガーが、生成された場所の代わりにマップ ファイルを検索する必要のある場所を指定します。",
+  "Specify_the_maximum_folder_depth_used_for_checking_JavaScript_files_from_node_modules_Only_applicabl_6656": "'node_modules' で JavaScript ファイルを確認するために使用するフォルダーの深さの最大値を指定します。'allowJs' にのみ適用可能です。",
   "Specify_the_module_specifier_to_be_used_to_import_the_jsx_and_jsxs_factory_functions_from_eg_react_6238": "'jsx' と 'jsxs' のファクトリ関数をインポートするために使用されるモジュール指定子を指定します。例: react",
+  "Specify_the_object_invoked_for_createElement_This_only_applies_when_targeting_react_JSX_emit_6686": "'createElement' に対して呼び出されたオブジェクトを指定します。これは、'react' JSX 発行を対象とする場合にのみ適用されます。",
+  "Specify_the_output_directory_for_generated_declaration_files_6613": "生成された宣言ファイルの出力ディレクトリを指定します。",
   "Specify_the_root_directory_of_input_files_Use_to_control_the_output_directory_structure_with_outDir_6058": "入力ファイルのルート ディレクトリを指定します。--outDir とともに、出力ディレクトリ構造の制御に使用します。",
+  "Specify_the_root_folder_within_your_source_files_6690": "ソース ファイル内のルート フォルダーを指定します。",
+  "Specify_the_root_path_for_debuggers_to_find_the_reference_source_code_6695": "デバッガーのルート パスを指定して、参照ソース コードを検索します。",
+  "Specify_type_package_names_to_be_included_without_being_referenced_in_a_source_file_6711": "ソース ファイルに参照されずに含める型のパッケージ名を指定します。",
+  "Specify_what_JSX_code_is_generated_6646": "生成済みの JSX コードを指定します。",
+  "Specify_what_approach_the_watcher_should_use_if_the_system_runs_out_of_native_file_watchers_6634": "システムがネイティブ ファイル ウォッチャーを使い果たした場合に、ウォッチャーが使用するアプローチを指定します。",
+  "Specify_what_module_code_is_generated_6657": "生成済みのモジュール コードを指定します。",
   "Split_all_invalid_type_only_imports_1367": "無効な型のみのインポートをすべて分割する",
   "Split_into_two_separate_import_declarations_1366": "2 つの別個のインポート宣言に分割する",
   "Spread_operator_in_new_expressions_is_only_available_when_targeting_ECMAScript_5_and_higher_2472": "'new' 式のスプレッド演算子は ECMAScript 5 以上をターゲットにする場合にのみ使用できます。",
@@ -1101,9 +1329,9 @@
   "Starting_compilation_in_watch_mode_6031": "ウォッチ モードでのコンパイルを開始しています...",
   "Statement_expected_1129": "ステートメントが必要です。",
   "Statements_are_not_allowed_in_ambient_contexts_1036": "ステートメントは環境コンテキストでは使用できません。",
+  "Static_fields_with_private_names_can_t_have_initializers_when_the_useDefineForClassFields_flag_is_no_2805": "'--useDefineForClassFields' フラグに 'esnext' の '--target' が指定されていない場合、プライベート名を持つ静的フィールドに初期化子を指定することはできません。'--useDefineForClassFields' フラグを追加することをご検討ください。",
   "Static_members_cannot_reference_class_type_parameters_2302": "静的メンバーはクラスの型パラメーターを参照できません。",
   "Static_property_0_conflicts_with_built_in_property_Function_0_of_constructor_function_1_2699": "静的プロパティ '{0}' がコンストラクター関数 '{1}' のビルトイン プロパティ 'Function.{0}' と競合しています。",
-  "Strict_Type_Checking_Options_6173": "Strict 型チェック オプション",
   "String_literal_expected_1141": "文字列リテラルが必要です。",
   "String_literal_with_double_quotes_expected_1327": "二重引用符を含む文字列リテラルが必要です。",
   "Stylize_errors_and_messages_using_color_and_context_experimental_6073": "色とコンテキストを使用してエラーとメッセージにスタイルを適用します (試験的)。",
@@ -1117,9 +1345,10 @@
   "Super_calls_are_not_permitted_outside_constructors_or_in_nested_functions_inside_constructors_2337": "super の呼び出しは、コンストラクターの外部、またはコンストラクター内の入れ子になった関数では使用できません。",
   "Suppress_excess_property_checks_for_object_literals_6072": "オブジェクト リテラルの過剰なプロパティ確認を抑制します。",
   "Suppress_noImplicitAny_errors_for_indexing_objects_lacking_index_signatures_6055": "インデックス シグニチャのないオブジェクトにインデックスを作成するため、noImplicitAny エラーを抑制します。",
+  "Suppress_noImplicitAny_errors_when_indexing_objects_that_lack_index_signatures_6703": "インデックス シグネチャのないオブジェクトにインデックスを作成する際、'noImplicitAny' エラーを表示しません。",
   "Switch_each_misused_0_to_1_95138": "誤用されている各 '{0}' を '{1}' に切り替えてください",
   "Symbol_reference_does_not_refer_to_the_global_Symbol_constructor_object_2470": "'Symbol' 参照は、グローバル シンボル コンストラクター オブジェクトを参照しません。",
-  "Synchronously_call_callbacks_and_update_the_state_of_directory_watchers_on_platforms_that_don_t_supp_6228": "再帰的な監視をネイティブでサポートしていないプラットフォーム上で、同期的にコールバックを呼び出してディレクトリ監視の状態を更新します。",
+  "Synchronously_call_callbacks_and_update_the_state_of_directory_watchers_on_platforms_that_don_t_supp_6704": "再帰的なウォッチをネイティブでサポートしていないプラットフォーム上で、同期的にコールバックを呼び出してディレクトリ ウォッチャーの状態を更新します。",
   "Syntax_Colon_0_6023": "構文: {0}",
   "Tag_0_expects_at_least_1_arguments_but_the_JSX_factory_2_provides_at_most_3_6229": "タグ '{0}' には少なくとも '{1}' 個の引数が必要ですが、JSX ファクトリ '{2}' で提供されるのは最大 '{3}' 個です。",
   "Tagged_template_expressions_are_not_permitted_in_an_optional_chain_1358": "タグ付きテンプレート式は、省略可能なチェーンでは許可されていません。",
@@ -1134,17 +1363,19 @@
   "The_arguments_object_cannot_be_referenced_in_an_arrow_function_in_ES3_and_ES5_Consider_using_a_stand_2496": "'arguments' オブジェクトは、ES3 および ES5 のアロー関数で参照することはできません。標準の関数式の使用を考慮してください。",
   "The_arguments_object_cannot_be_referenced_in_an_async_function_or_method_in_ES3_and_ES5_Consider_usi_2522": "'arguments' オブジェクトは、ES3 および ES5 の非同期関数またはメソッドで参照することはできません。標準の関数またはメソッドを使用することを検討してください。",
   "The_body_of_an_if_statement_cannot_be_the_empty_statement_1313": "'if' ステートメントの本文を空のステートメントにすることはできません。",
-  "The_bundledPackageName_option_must_be_provided_when_using_outFile_and_node_module_resolution_with_de_1391": "宣言の生成で outFile とノード モジュールの解決を使用する場合、`bundledPackageName` オプションを指定する必要があります。",
+  "The_bundledPackageName_option_must_be_provided_when_using_outFile_and_node_module_resolution_with_de_1391": "宣言の生成で outFile とノード モジュールの解決を使用する場合、'bundledPackageName' オプションを指定する必要があります。",
   "The_call_would_have_succeeded_against_this_implementation_but_implementation_signatures_of_overloads_2793": "呼び出しはこの実装に対して成功した可能性がありますが、オーバーロードの実装シグネチャは外部からは参照できません。",
   "The_character_set_of_the_input_files_6163": "入力ファイルの文字セット。",
   "The_containing_arrow_function_captures_the_global_value_of_this_7041": "含まれているアロー関数は、'this' のグローバル値をキャプチャします。",
   "The_containing_function_or_module_body_is_too_large_for_control_flow_analysis_2563": "含まれている関数またはモジュールの本体は、制御フロー解析には大きすぎます。",
   "The_current_host_does_not_support_the_0_option_5001": "現在のホストは '{0}' オプションをサポートしていません。",
   "The_declaration_of_0_that_you_probably_intended_to_use_is_defined_here_18018": "使用するつもりだったと思われる '{0}' の宣言はここで定義されています",
+  "The_declaration_was_marked_as_deprecated_here_2798": "この宣言はここで非推奨とマークされました。",
   "The_expected_type_comes_from_property_0_which_is_declared_here_on_type_1_6500": "予期された型は、型 '{1}' に対してここで宣言されたプロパティ '{0}' から取得されています",
   "The_expected_type_comes_from_the_return_type_of_this_signature_6502": "予期された型は、このシグネチャの戻り値の型に基づいています。",
   "The_expected_type_comes_from_this_index_signature_6501": "予期された型は、このインデックス シグネチャに基づいています。",
   "The_expression_of_an_export_assignment_must_be_an_identifier_or_qualified_name_in_an_ambient_context_2714": "エクスポートの代入の式は、環境コンテキストの識別子または修飾名にする必要があります。",
+  "The_file_is_in_the_program_because_Colon_1430": "ファイルがプログラム内に存在します。理由:",
   "The_files_list_in_config_file_0_is_empty_18002": "構成ファイル '{0}' の 'files' リストが空です。",
   "The_first_export_default_is_here_2752": "最初のエクスポートの既定値はここにあります。",
   "The_first_parameter_of_the_then_method_of_a_promise_must_be_a_callback_1060": "Promise では、'then' メソッドの最初のパラメーターはコールバックでなければなりません。",
@@ -1168,6 +1399,7 @@
   "The_left_hand_side_of_a_for_in_statement_must_be_of_type_string_or_any_2405": "'for...in' ステートメントの左側の型は 'string' または 'any' でなければなりません。",
   "The_left_hand_side_of_a_for_of_statement_cannot_use_a_type_annotation_2483": "'for...of' ステートメントの左側で型の注釈を使用することはできません。",
   "The_left_hand_side_of_a_for_of_statement_may_not_be_an_optional_property_access_2781": "'for...of' ステートメントの左辺には、省略可能なプロパティ アクセスを指定できません。",
+  "The_left_hand_side_of_a_for_of_statement_may_not_be_async_1106": "'for...of' ステートメントの左辺には、'async' を指定できません。",
   "The_left_hand_side_of_a_for_of_statement_must_be_a_variable_or_a_property_access_2487": "'for...of' ステートメントの左側は、変数またはプロパティ アクセスである必要があります。",
   "The_left_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type_2362": "算術演算の左辺には、'any' 型、'number' 型、'bigint' 型、または列挙型を指定する必要があります。",
   "The_left_hand_side_of_an_assignment_expression_may_not_be_an_optional_property_access_2779": "代入式の左辺には、省略可能なプロパティ アクセスを指定できません。",
@@ -1185,15 +1417,18 @@
   "The_parser_expected_to_find_a_to_match_the_token_here_1007": "パーサーは、ここで '{' トークンに一致する '}' を予期していました。",
   "The_property_0_cannot_be_accessed_on_type_1_within_this_class_because_it_is_shadowed_by_another_priv_18014": "同じスペルの別の private 識別子によってシャドウされているため、このクラス内の型 '{1}' ではプロパティ '{0}' にアクセスできません。",
   "The_return_type_of_a_JSX_element_constructor_must_return_an_object_type_2601": "JSX 要素コンストラクターの戻り値の型は、オブジェクト型を返す必要があります。",
+  "The_return_type_of_a_get_accessor_must_be_assignable_to_its_set_accessor_type_2380": "'get' アクセサーの戻り値の型は、その 'set' アクセサーの型に割り当て可能である必要があります",
   "The_return_type_of_a_parameter_decorator_function_must_be_either_void_or_any_1237": "パラメーター デコレーター関数の戻り値の型は、'void' か 'any' である必要があります。",
   "The_return_type_of_a_property_decorator_function_must_be_either_void_or_any_1236": "プロパティ デコレーター関数の戻り値の型は、'void' か 'any' である必要があります。",
   "The_return_type_of_an_async_function_must_either_be_a_valid_promise_or_must_not_contain_a_callable_t_1058": "非同期関数の戻り値の型は、有効な Promise であるか、呼び出し可能な 'then' メンバーを含んでいないかのどちらかであることが必要です。",
   "The_return_type_of_an_async_function_or_method_must_be_the_global_Promise_T_type_Did_you_mean_to_wri_1064": "非同期関数または非同期メソッドの戻り値の型は、グローバル Promise<T> 型である必要があります。'Promise<{0}>' と書き込むつもりでしたか?",
   "The_right_hand_side_of_a_for_in_statement_must_be_of_type_any_an_object_type_or_a_type_parameter_but_2407": "'for...in' ステートメントの右側には、'any' 型、オブジェクト型、型パラメーターを指定する必要がありますが、ここでは型 '{0}' が指定されています。",
   "The_right_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type_2363": "算術演算の右辺には、'any' 型、'number' 型、'bigint' 型、または列挙型を指定する必要があります。",
-  "The_right_hand_side_of_an_in_expression_must_be_of_type_any_an_object_type_or_a_type_parameter_2361": "'in' 式の右辺は、'any' 型、オブジェクト型、型パラメーターでなければなりません。",
+  "The_right_hand_side_of_an_in_expression_must_not_be_a_primitive_2361": "'in' 式の右辺をプリミティブにすることはできません。",
   "The_right_hand_side_of_an_instanceof_expression_must_be_of_type_any_or_of_a_type_assignable_to_the_F_2359": "instanceof' 式の右辺には、'any' 型、または 'Function' インターフェイス型に割り当てることができる型を指定してください。",
+  "The_root_value_of_a_0_file_must_be_an_object_5092": "'{0}' ファイルのルート値はオブジェクトである必要があります。",
   "The_shadowing_declaration_of_0_is_defined_here_18017": "'{0}' のシャドウ宣言はここで定義されています",
+  "The_signature_0_of_1_is_deprecated_6387": "'{1}' のシグネチャ '{0}' は非推奨です。",
   "The_specified_path_does_not_exist_Colon_0_5058": "指定されたパスがありません: '{0}'。",
   "The_tag_was_first_specified_here_8034": "このタグは最初にこちらで指定されました。",
   "The_target_of_an_assignment_must_be_a_variable_or_a_property_access_2541": "代入式のターゲットは、変数またはプロパティ アクセスである必要があります。",
@@ -1204,6 +1439,7 @@
   "The_type_0_is_readonly_and_cannot_be_assigned_to_the_mutable_type_1_4104": "型 '{0}' は 'readonly' であるため、変更可能な型 '{1}' に代入することはできません。",
   "The_type_argument_for_type_parameter_0_cannot_be_inferred_from_the_usage_Consider_specifying_the_typ_2453": "型パラメーター '{0}' の型引数を使用法から推論することはできません。型引数を明示的に指定してください。",
   "The_type_of_a_function_declaration_must_match_the_function_s_signature_8030": "関数の宣言の型は、関数のシグネチャと一致する必要があります。",
+  "The_type_of_this_node_cannot_be_serialized_because_its_property_0_cannot_be_serialized_4118": "このノードの種類は、そのプロパティ '{0}' をシリアル化できないため、シリアル化できません。",
   "The_type_returned_by_the_0_method_of_an_async_iterator_must_be_a_promise_for_a_type_with_a_value_pro_2547": "非同期反復子の '{0}()' メソッドによって返される型は、'value' プロパティを持つ型に対する promise である必要があります。",
   "The_type_returned_by_the_0_method_of_an_iterator_must_have_a_value_property_2490": "反復子の '{0}()' メソッドによって返される型には 'value' プロパティが必要です。",
   "The_types_of_0_are_incompatible_between_these_types_2200": "'{0}' の型は、これらの型同士で互換性がありません。",
@@ -1214,7 +1450,8 @@
   "This_JSX_tag_s_0_prop_expects_a_single_child_of_type_1_but_multiple_children_were_provided_2746": "この JSX タグの '{0}' prop は型 '{1}' の単一の子を予期しますが、複数の子が指定されました。",
   "This_JSX_tag_s_0_prop_expects_type_1_which_requires_multiple_children_but_only_a_single_child_was_pr_2745": "この JSX タグの '{0}' prop は複数の子を必要とする型 '{1}' を予期しますが、単一の子が指定されました。",
   "This_condition_will_always_return_0_since_the_types_1_and_2_have_no_overlap_2367": "型 '{1}' と '{2}' には重複がないため、この条件は常に '{0}' を返します。",
-  "This_condition_will_always_return_true_since_the_function_is_always_defined_Did_you_mean_to_call_it__2774": "関数は常に定義されているため、この条件は常に true を返します。これを呼び出すことを意図していましたか?",
+  "This_condition_will_always_return_true_since_this_0_is_always_defined_2801": "'{0}' が常に定義されているため、この条件は常に true を返します。",
+  "This_condition_will_always_return_true_since_this_function_is_always_defined_Did_you_mean_to_call_it_2774": "この関数は常に定義されているため、この条件は常に true を返します。代わりにこれを呼び出すことを意図していましたか?",
   "This_constructor_function_may_be_converted_to_a_class_declaration_80002": "このコンストラクター関数はクラス宣言に変換される可能性があります。",
   "This_expression_is_not_callable_2349": "この式は呼び出し可能ではありません。",
   "This_expression_is_not_callable_because_it_is_a_get_accessor_Did_you_mean_to_use_it_without_6234": "この式は 'get' アクセサーであるため、呼び出すことができません。'()' なしで使用しますか?",
@@ -1223,15 +1460,23 @@
   "This_import_is_never_used_as_a_value_and_must_use_import_type_because_importsNotUsedAsValues_is_set__1371": "このインポートは値として使用されることはありません。'importsNotUsedAsValues' が 'error' に設定されているため、'import type' を使用する必要があります。",
   "This_is_the_declaration_being_augmented_Consider_moving_the_augmenting_declaration_into_the_same_fil_6233": "これは拡張される宣言です。拡張する側の宣言を同じファイルに移動することを検討してください。",
   "This_may_be_converted_to_an_async_function_80006": "これは非同期関数に変換できます。",
+  "This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0_4113": "このメンバーは、基底クラス '{0}' で宣言されていないため、'override' 修飾子を指定することはできません。",
+  "This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0_Did_you__4117": "このメンバーは、基底クラス '{0}' で宣言されていないため、'override' 修飾子を指定することはできません。'{1}' ということですか?",
+  "This_member_cannot_have_an_override_modifier_because_its_containing_class_0_does_not_extend_another__4112": "このメンバーを含んでいるクラス '{0}' が別のクラスを拡張していないため、このメンバーに 'override' 修飾子を指定することはできません。",
+  "This_member_must_have_an_override_modifier_because_it_overrides_a_member_in_the_base_class_0_4114": "このメンバーは、基底クラス '{0}' のメンバーをオーバーライドするため、'override' 修飾子を指定する必要があります。",
+  "This_member_must_have_an_override_modifier_because_it_overrides_an_abstract_method_that_is_declared__4116": "このメンバーは、基底クラス '{0}' で宣言された抽象メソッドをオーバーライドするため、'override' 修飾子を指定する必要があります。",
   "This_module_can_only_be_referenced_with_ECMAScript_imports_Slashexports_by_turning_on_the_0_flag_and_2497": "このモジュールは、'{0}' フラグをオンにして既定のエクスポートを参照することにより、ECMAScript のインポートまたはエクスポートのみを使用して参照できます。",
   "This_module_is_declared_with_using_export_and_can_only_be_used_with_a_default_import_when_using_the__2594": "このモジュールは 'export =' を使用して宣言されていて、'{0}' フラグを使用する場合は既定のインポートでのみ使用できます。",
   "This_overload_signature_is_not_compatible_with_its_implementation_signature_2394": "このオーバーロード シグネチャには、実装シグネチャとの互換性はありません。",
   "This_parameter_is_not_allowed_with_use_strict_directive_1346": "このパラメーターは、'use strict' ディレクティブと共に使用することはできません。",
+  "This_parameter_property_must_have_an_override_modifier_because_it_overrides_a_member_in_base_class_0_4115": "このメンバーは、基底クラス '{0}' のメンバーをオーバーライドするため、パラメーター プロパティに 'override' 修飾子がある必要があります。",
   "This_spread_always_overwrites_this_property_2785": "このスプレッドは、常にこのプロパティを上書きします。",
   "This_syntax_requires_an_imported_helper_but_module_0_cannot_be_found_2354": "この構文にはインポートされたヘルパーが必要ですが、モジュール '{0}' が見つかりません。",
   "This_syntax_requires_an_imported_helper_named_1_which_does_not_exist_in_0_Consider_upgrading_your_ve_2343": "この構文には、'{1}' という名前のインポートされたヘルパーが必要ですが、'{0}' には存在しません。'{0}' のバージョンのアップグレードを検討してください。",
+  "This_syntax_requires_an_imported_helper_named_1_with_2_parameters_which_is_not_compatible_with_the_o_2807": "この構文には、{2} パラメーターを持つ '{1}' という名前のインポートされたヘルパーが必要ですが、'{0}' にあるものと互換性がありません。'{0}' のバージョンをアップグレードすることをご検討ください。",
   "Top_level_await_expressions_are_only_allowed_when_the_module_option_is_set_to_esnext_or_system_and_t_1378": "トップレベルの 'await' 式は、'module' オプションが 'esnext' または 'system' に設定されていて、'target' オプションが 'es2017' 以上に設定されている場合にのみ使用できます。",
   "Top_level_declarations_in_d_ts_files_must_start_with_either_a_declare_or_export_modifier_1046": ".d.ts ファイルのトップレベルの宣言は、'declare' または 'export' 修飾子で始める必要があります。",
+  "Top_level_for_await_loops_are_only_allowed_when_the_module_option_is_set_to_esnext_or_system_and_the_1432": "トップレベルの 'for await' ループは、'module' オプションが 'esnext' または 'system' に設定されていて、'target' オプションが 'es2017' 以上に設定されている場合にのみ使用できます。",
   "Trailing_comma_not_allowed_1009": "末尾にコンマは使用できません。",
   "Transpile_each_file_as_a_separate_module_similar_to_ts_transpileModule_6153": "個々のモジュールとして各ファイルをトランスパイルします ('ts.transpileModule' に類似)。",
   "Try_npm_i_save_dev_types_Slash_1_if_it_exists_or_add_a_new_declaration_d_ts_file_containing_declare__7035": "存在する場合は `npm i --save-dev @types/{1}` を試すか、`declare module '{0}';` を含む新しい宣言 (.d.ts) ファイルを追加します",
@@ -1240,6 +1485,7 @@
   "Tuple_members_must_all_have_names_or_all_not_have_names_5084": "タプル メンバーのすべての名前が指定されているか、すべての名前が指定されていないかのどちらかでなければなりません。",
   "Tuple_type_0_of_length_1_has_no_element_at_index_2_2493": "長さ '{1}' のタプル型 '{0}' にインデックス '{2}' の要素がありません。",
   "Tuple_type_arguments_circularly_reference_themselves_4110": "タプル型の引数は、それ自体を循環参照します。",
+  "Type_0_can_only_be_iterated_through_when_using_the_downlevelIteration_flag_or_with_a_target_of_es201_2802": "'{0}' の種類は、'--downlevelIteration' フラグを使用している場合、または 'es2015' 以降の '--target' を使用している場合にのみ反復処理できます。",
   "Type_0_cannot_be_used_as_an_index_type_2538": "型 '{0}' はインデックスの型として使用できません。",
   "Type_0_cannot_be_used_to_index_type_1_2536": "型 '{0}' はインデックスの種類 '{1}' に使用できません。",
   "Type_0_does_not_satisfy_the_constraint_1_2344": "型 '{0}' は制約 '{1}' を満たしていません。",
@@ -1264,7 +1510,9 @@
   "Type_0_must_have_a_Symbol_iterator_method_that_returns_an_iterator_2488": "型 '{0}' には、反復子を返す '[Symbol.iterator]()' メソッドが必要です。",
   "Type_0_provides_no_match_for_the_signature_1_2658": "型 '{0}' にはシグネチャ '{1}' に一致するものがありません。",
   "Type_0_recursively_references_itself_as_a_base_type_2310": "型 '{0}' が、基本型としてそれ自体を再帰的に参照しています。",
+  "Type_Checking_6248": "種類を確認中",
   "Type_alias_0_circularly_references_itself_2456": "型のエイリアス '{0}' が自身を循環参照しています。",
+  "Type_alias_must_be_given_a_name_1439": "型のエイリアスには名前を指定する必要があります。",
   "Type_alias_name_cannot_be_0_2457": "型のエイリアス名を '{0}' にすることはできません。",
   "Type_aliases_can_only_be_used_in_TypeScript_files_8008": "型のエイリアスは、TypeScript ファイルでのみ使用できます。",
   "Type_annotation_cannot_appear_on_a_constructor_declaration_1093": "型の注釈はコンストラクター宣言では使用できません。",
@@ -1276,10 +1524,15 @@
   "Type_arguments_cannot_be_used_here_1342": "ここで型引数は使用できません。",
   "Type_arguments_for_0_circularly_reference_themselves_4109": "'{0}' の型引数はそれ自体を循環参照します。",
   "Type_assertion_expressions_can_only_be_used_in_TypeScript_files_8016": "型アサーション式は TypeScript ファイルでのみ使用できます。",
+  "Type_at_position_0_in_source_is_not_compatible_with_type_at_position_1_in_target_2626": "ソースの位置 {0} にある型は、ターゲットの位置 {1} にある型と互換性がありません。",
+  "Type_at_positions_0_through_1_in_source_is_not_compatible_with_type_at_position_2_in_target_2627": "ソースの位置 {0} から {1} にある型は、ターゲットの位置 {2} にある型と互換性がありません。",
+  "Type_catch_clause_variables_as_unknown_instead_of_any_6803": "catch 句の変数を '任意' ではなく '不明' として入力してください。",
   "Type_declaration_files_to_be_included_in_compilation_6124": "コンパイルに含む型宣言ファイル。",
   "Type_expected_1110": "型が必要です。",
   "Type_instantiation_is_excessively_deep_and_possibly_infinite_2589": "型のインスタンス化は非常に深く、無限である可能性があります。",
   "Type_is_referenced_directly_or_indirectly_in_the_fulfillment_callback_of_its_own_then_method_1062": "型は、それ自身の 'then' メソッドのフルフィルメント コールバック内で直接または間接的に参照されます。",
+  "Type_library_referenced_via_0_from_file_1_1402": "ファイル '{1}' から '{0}' を介して参照されたタイプ ライブラリ",
+  "Type_library_referenced_via_0_from_file_1_with_packageId_2_1403": "packageId が '{2}' のファイル '{1}' から '{0}' を介して参照されたタイプ ライブラリ",
   "Type_of_await_operand_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member_1320": "'await' オペランドの型は、有効な Promise であるか、呼び出し可能な 'then' メンバーを含んでいないかのどちらかであることが必要です。",
   "Type_of_computed_property_s_value_is_0_which_is_not_assignable_to_type_1_2418": "計算されたプロパティの値の型は '{0}' です。これは、型 '{1}' に代入することはできません。",
   "Type_of_iterated_elements_of_a_yield_Asterisk_operand_must_either_be_a_valid_promise_or_must_not_con_1322": "'yield*' オペランドの反復要素の型は、有効な Promise であるか、呼び出し可能な 'then' メンバーを含んでいないかのどちらかであることが必要です。",
@@ -1305,6 +1558,7 @@
   "Type_parameter_name_cannot_be_0_2368": "型パラメーター名を '{0}' にすることはできません。",
   "Type_parameters_cannot_appear_on_a_constructor_declaration_1092": "型パラメーターはコンストラクター宣言では使用できません。",
   "Type_predicate_0_is_not_assignable_to_1_1226": "型の述語 '{0}' を '{1}' に割り当てることはできません。",
+  "Type_produces_a_tuple_type_that_is_too_large_to_represent_2799": "型では大きすぎて表すことができないタプル型を生成します。",
   "Type_reference_directive_0_was_not_resolved_6120": "======== 型参照ディレクティブ '{0}' が解決されませんでした。========",
   "Type_reference_directive_0_was_successfully_resolved_to_1_primary_Colon_2_6119": "======== 型参照ディレクティブ '{0}' が正常に '{1}' に解決されました。プライマリ: {2}。========",
   "Type_reference_directive_0_was_successfully_resolved_to_1_with_Package_ID_2_primary_Colon_3_6219": "======== 型参照ディレクティブ '{0}' が正常に '{1}' に解決されました (パッケージ ID '{2}'、プライマリ: {3})。========",
@@ -1318,6 +1572,7 @@
   "Unable_to_resolve_signature_of_parameter_decorator_when_called_as_an_expression_1239": "式として呼び出される場合、パラメーター デコレーターのシグネチャを解決できません。",
   "Unable_to_resolve_signature_of_property_decorator_when_called_as_an_expression_1240": "式として呼び出される場合、プロパティ デコレーターのシグネチャを解決できません。",
   "Unexpected_end_of_text_1126": "予期しないテキストの末尾です。",
+  "Unexpected_keyword_or_identifier_1434": "予期しないキーワードまたは識別子です。",
   "Unexpected_token_1012": "予期しないトークンです。",
   "Unexpected_token_A_constructor_method_accessor_or_property_was_expected_1068": "予期しないトークンです。コンストラクター、メソッド、アクセサー、またはプロパティが必要です。",
   "Unexpected_token_A_type_parameter_name_was_expected_without_curly_braces_1069": "予期しないトークンです。型パラメーター名には、中かっこを含めることはできません。",
@@ -1328,6 +1583,7 @@
   "Unknown_build_option_0_Did_you_mean_1_5077": "'{0}' は不明なビルド オプションです。'{1}' を意図していましたか?",
   "Unknown_compiler_option_0_5023": "コンパイラ オプション '{0}' が不明です。",
   "Unknown_compiler_option_0_Did_you_mean_1_5025": "'{0}' は不明なコンパイラ オプションです。'{1}' を意図していましたか?",
+  "Unknown_keyword_or_identifier_Did_you_mean_0_1435": "不明なキーワードまたは識別子。'{0}' を意味していましたか?",
   "Unknown_option_excludes_Did_you_mean_exclude_6114": "不明なオプション 'excludes' です。'exclude' ですか?",
   "Unknown_type_acquisition_option_0_17010": "不明な型の取得オプション '{0}'。",
   "Unknown_type_acquisition_option_0_Did_you_mean_1_17018": "'{0}' は不明な型の取得オプションです。'{1}' を意図していましたか?",
@@ -1350,6 +1606,7 @@
   "Use_element_access_for_all_undeclared_properties_95146": "宣言されていないすべてのプロパティに対して要素アクセスを使用します。",
   "Use_synthetic_default_member_95016": "合成 'default' メンバーを使用します。",
   "Using_a_string_in_a_for_of_statement_is_only_supported_in_ECMAScript_5_and_higher_2494": "'for...of' ステートメントでの文字列の使用は ECMAScript 5 以上でのみサポートされています。",
+  "Using_build_b_will_make_tsc_behave_more_like_a_build_orchestrator_than_a_compiler_This_is_used_to_tr_6915": "--build を使用すると、-b は tsc をコンパイラというよりビルド オーケストレーターのように動作させます。これは、複合プロジェクトのビルドをトリガーするために使用されます。詳細については、{0} を参照してください。",
   "Using_compiler_options_of_project_reference_redirect_0_6215": "Using compiler options of project reference redirect '{0}'.",
   "VERSION_6036": "バージョン",
   "Value_of_type_0_has_no_properties_in_common_with_type_1_Did_you_mean_to_call_it_2560": "型 '{0}' の値には、型 '{1}' と共通のプロパティがありません。呼び出しますか?",
@@ -1361,10 +1618,16 @@
   "Variable_0_is_used_before_being_assigned_2454": "変数 '{0}' は割り当てられる前に使用されています。",
   "Variable_declaration_expected_1134": "変数の宣言が必要です。",
   "Variable_declaration_list_cannot_be_empty_1123": "変数宣言リストを空にすることはできません。",
+  "Variable_declaration_not_allowed_at_this_location_1440": "変数の宣言はこの場所では許可されていません。",
+  "Variadic_element_at_position_0_in_source_does_not_match_element_at_position_1_in_target_2625": "ソースの位置 {0} にある可変個引数要素は、ターゲットの位置 {1} にある要素と一致しません。",
   "Version_0_6029": "バージョン {0}",
   "Visit_https_Colon_Slash_Slashaka_ms_Slashtsconfig_json_to_read_more_about_this_file_95110": "このファイルの詳細については、https://aka.ms/tsconfig.json をご覧ください",
+  "WATCH_OPTIONS_6918": "ウォッチ オプション",
+  "Watch_and_Build_Modes_6250": "ウォッチ モードとビルド モード",
   "Watch_input_files_6005": "入力ファイルを監視します。",
   "Watch_option_0_requires_a_value_of_type_1_5080": "監視オプション '{0}' には型 {1} の値が必要です。",
+  "When_assigning_functions_check_to_ensure_parameters_and_the_return_values_are_subtype_compatible_6698": "関数を割り当てる際、パラメーターと戻り値が互換性のあるサブタイプであることを確認します。",
+  "When_type_checking_take_into_account_null_and_undefined_6699": "型チェックを行うときは、'null' と 'undefined' が考慮されます。",
   "Whether_to_keep_outdated_console_output_in_watch_mode_instead_of_clearing_the_screen_6191": "画面をクリアする代わりに、古くなったコンソール出力をウォッチ モードで保持するかどうか。",
   "Wrap_all_invalid_characters_in_an_expression_container_95109": "式のコンテナー内のすべての無効な文字をラップする",
   "Wrap_all_object_literal_with_parentheses_95116": "すべてのオブジェクト リテラルをかっこで囲みます",
@@ -1372,10 +1635,12 @@
   "Wrap_in_JSX_fragment_95120": "JSX フラグメントでラップする",
   "Wrap_invalid_character_in_an_expression_container_95108": "式のコンテナー内の無効な文字をラップする",
   "Wrap_the_following_body_with_parentheses_which_should_be_an_object_literal_95113": "次の本体をかっこで囲みます。これはオブジェクト リテラルです",
+  "You_can_learn_about_all_of_the_compiler_options_at_0_6913": "コンパイラ オプションの詳細については、{0} をご覧ください。",
   "You_cannot_rename_a_module_via_a_global_import_8031": "グローバル インポートを使用してモジュールの名前を変更することはできません。",
   "You_cannot_rename_elements_that_are_defined_in_the_standard_TypeScript_library_8001": "標準の TypeScript ライブラリで定義された要素の名前を変更することはできません。",
   "You_cannot_rename_this_element_8000": "この要素の名前を変更することはできません。",
   "_0_accepts_too_few_arguments_to_be_used_as_a_decorator_here_Did_you_mean_to_call_it_first_and_write__1329": "'{0}' は受け入れる引数が少なすぎるので、ここでデコレーターとして使用することができません。最初にこれを呼び出してから、'@{0}()' を書き込むつもりでしたか?",
+  "_0_and_1_index_signatures_are_incompatible_2330": "'{0}' および '{1}' インデックス シグネチャに互換性がありません。",
   "_0_and_1_operations_cannot_be_mixed_without_parentheses_5076": "'{0}' および '{1}' 演算をかっこなしで混在させることはできません。",
   "_0_are_specified_twice_The_attribute_named_0_will_be_overwritten_2710": "'{0}' は 2 回指定されています。'{0}' という名前の属性は上書きされます。",
   "_0_can_only_be_imported_by_turning_on_the_esModuleInterop_flag_and_using_a_default_import_2596": "'{0}' をインポートするには、'esModuleInterop' フラグをオンにして既定のインポートを使用する必要があります。",
@@ -1396,6 +1661,8 @@
   "_0_implicitly_has_an_1_return_type_but_a_better_type_may_be_inferred_from_usage_7050": "'{0}' の戻り値の型は暗黙的に '{1}' になっていますが、使い方からより良い型を推論できます。",
   "_0_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_reference_7023": "'{0}' は、戻り値の型の注釈がなく、いずれかの return 式で直接的にまたは間接的に参照されているため、戻り値の型は暗黙的に 'any' になります。",
   "_0_implicitly_has_type_any_because_it_does_not_have_a_type_annotation_and_is_referenced_directly_or__7022": "'{0}' には型の注釈がなく、直接または間接的に初期化子で参照されているため、暗黙的に 'any' 型が含まれています。",
+  "_0_index_signatures_are_incompatible_2634": "'{0}' インデックス シグネチャに互換性がありません。",
+  "_0_index_type_1_is_not_assignable_to_2_index_type_3_2413": "'{0}'インデックス型'{1}' を '{2}'インデックス型'{3}' に割り当てることはできません。",
   "_0_is_a_primitive_but_1_is_a_wrapper_object_Prefer_using_0_when_possible_2692": "'{0}' はプリミティブですが、'{1}' はラッパー オブジェクトです。できれば '{0}' をご使用ください。",
   "_0_is_assignable_to_the_constraint_of_type_1_but_1_could_be_instantiated_with_a_different_subtype_of_5075": "'{0}' は型 '{1}' の制約に代入できますが、'{1}' は制約 '{2}' の別のサブタイプでインスタンス化できることがあります。",
   "_0_is_declared_but_its_value_is_never_read_6133": "'{0}' が宣言されていますが、その値が読み取られることはありません。",
@@ -1403,7 +1670,7 @@
   "_0_is_declared_here_2728": "'{0}' はここで宣言されています。",
   "_0_is_defined_as_a_property_in_class_1_but_is_overridden_here_in_2_as_an_accessor_2611": "'{0}' はクラス '{1}' でプロパティとして定義されていますが、ここでは '{2}' でアクセサーとしてオーバーライドされています。",
   "_0_is_defined_as_an_accessor_in_class_1_but_is_overridden_here_in_2_as_an_instance_property_2610": "'{0}' はクラス '{1}' でアクセサーとして定義されていますが、ここではインスタンス プロパティとして '{2}' でオーバーライドされています。",
-  "_0_is_deprecated_6385": "'{0}' は非推奨です",
+  "_0_is_deprecated_6385": "'{0}' は非推奨です。",
   "_0_is_not_a_valid_meta_property_for_keyword_1_Did_you_mean_2_17012": "'{0}' はキーワード '{1}' に関するメタプロパティとして無効です。候補: '{2}'。",
   "_0_is_not_allowed_as_a_variable_declaration_name_1389": "'{0}' は変数宣言の名前として使用できません。",
   "_0_is_referenced_directly_or_indirectly_in_its_own_base_expression_2506": "'{0}' はそれ自身のベース式内で直接または間接的に参照されます。",
@@ -1428,7 +1695,7 @@
   "_0_only_refers_to_a_type_but_is_being_used_as_a_namespace_here_2702": "'{0}' は型のみを参照しますが、ここで名前空間として使用されています。",
   "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_2693": "'{0}' は型のみを参照しますが、ここで値として使用されています。",
   "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_Did_you_mean_to_use_1_in_0_2690": "'{0}' は型を参照しているだけですが、こちらでは値として使用されています。'{0} 内の {1}' を使用しますか?",
-  "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_Do_you_need_to_change_your_target_library_2585": "'{0}' は型のみを参照しますが、ここでは値として使用されています。ターゲット ライブラリを変更しますか? `lib` コンパイラ オプションを es2015 以降に変更してみてください。",
+  "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_Do_you_need_to_change_your_target_library_2585": "'{0}' は型のみを参照しますが、ここでは値として使用されています。ターゲット ライブラリを変更しますか? 'lib' コンパイラ オプションを es2015 以降に変更してみてください。",
   "_0_refers_to_a_UMD_global_but_the_current_file_is_a_module_Consider_adding_an_import_instead_2686": "'{0}' は UMD グローバルを参照していますが、現在のファイルはモジュールです。代わりにインポートを追加することを考慮してください。",
   "_0_refers_to_a_value_but_is_being_used_as_a_type_here_Did_you_mean_typeof_0_2749": "'{0}' は値を参照していますが、ここでは型として使用されています。'typeof {0}' を意図していましたか?",
   "_0_tag_already_specified_1223": "'{0}' タグは既に指定されています。",
@@ -1440,6 +1707,7 @@
   "_0_which_lacks_return_type_annotation_implicitly_has_an_1_yield_type_7055": "'{0}' には戻り値の型の注釈がないため、yield 型は暗黙的に '{1}' になります。",
   "abstract_modifier_can_only_appear_on_a_class_method_or_property_declaration_1242": "'abstract' 修飾子は、クラス宣言、メソッド宣言、またはプロパティ宣言のみに使用できます。",
   "and_here_6204": "およびここで。",
+  "arguments_cannot_be_referenced_in_property_initializers_2815": "プロパティ初期化子で 'arguments' を参照することはできません。",
   "await_expressions_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_fi_1375": "ファイルがモジュールの場合、'await' 式はそのファイルのトップ レベルでのみ使用できますが、このファイルにはインポートもエクスポートも含まれていません。空の 'export {}' を追加して、このファイルをモジュールにすることを検討してください。",
   "await_expressions_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_1308": "'await' 式は、非同期関数内と、モジュールのトップ レベルでのみ許可されます。",
   "await_expressions_cannot_be_used_in_a_parameter_initializer_2524": "'await' 式は、パラメーター初期化子では使用できません。",
@@ -1456,6 +1724,7 @@
   "const_enums_can_only_be_used_in_property_or_index_access_expressions_or_the_right_hand_side_of_an_im_2475": "'const' 列挙型は、プロパティまたはインデックスのアクセス式、インポート宣言またはエクスポートの代入の右辺、型のクエリにのみ使用できます。",
   "constructor_cannot_be_used_as_a_parameter_property_name_2398": "'constructor' をパラメーターのプロパティ名として使用することはできません。",
   "constructor_is_a_reserved_word_18012": "'#constructor' は予約語です。",
+  "default_Colon_6903": "既定:",
   "delete_cannot_be_called_on_an_identifier_in_strict_mode_1102": "厳格モードでは 'delete' を識別子で呼び出すことはできません。",
   "delete_this_Project_0_is_up_to_date_because_it_was_previously_built_6360": "これを削除します - プロジェクト '{0}' は、以前にビルドされているため、最新の状態です",
   "export_Asterisk_does_not_re_export_a_default_1195": "'export *' では既定のものは再エクスポートされません。",
@@ -1466,17 +1735,26 @@
   "extends_clause_of_exported_class_0_has_or_is_using_private_name_1_4020": "エクスポートされたクラス '{0}' の 'extends' 句がプライベート名 '{1}' を持っているか、使用しています。",
   "extends_clause_of_exported_class_has_or_is_using_private_name_0_4021": "エクスポートされたクラスの 'extends' 句がプライベート名 '{0}' を持っているか、使用しています。",
   "extends_clause_of_exported_interface_0_has_or_is_using_private_name_1_4022": "エクスポートされたインターフェイス '{0}' の 'extends' 句がプライベート名 '{1}' を持っているか、使用しています。",
+  "false_unless_composite_is_set_6906": "'composite' が設定されていない場合は 'false'",
+  "false_unless_strict_is_set_6905": "'strict' が設定されている場合を除き、' false '",
   "file_6025": "ファイル",
+  "for_await_loops_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_file_1431": "ファイルがモジュールの場合、'for await' ループはそのファイルのトップ レベルでのみ使用できますが、このファイルにはインポートもエクスポートも含まれていません。空の 'export {}' を追加して、このファイルをモジュールにすることを検討してください。",
+  "for_await_loops_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_1103": "'for await' ループは、非同期関数内と、モジュールのトップ レベルでのみ許可されます。",
   "get_and_set_accessor_must_have_the_same_this_type_2682": "'get' アクセサーおよび 'set' アクセサーには、同じ 'this' 型が必要です。",
-  "get_and_set_accessor_must_have_the_same_type_2380": "'get' アクセサーと 'set' アクセサーは同じ型でなければなりません。",
   "get_and_set_accessors_cannot_declare_this_parameters_2784": "'get' および 'set' アクセサーでは 'this' パラメーターを宣言できません。",
+  "if_files_is_specified_otherwise_Asterisk_Asterisk_Slash_Asterisk_6908": "'files' が指定されている場合は '[]'、それ以外の場合は '[\"**/*\"]5D;'",
   "implements_clause_already_seen_1175": "'implements' 句は既に存在します。",
   "implements_clauses_can_only_be_used_in_TypeScript_files_8005": "'implements' 句は、TypeScript ファイルでのみ使用できます。",
   "import_can_only_be_used_in_TypeScript_files_8002": "'import ... =' は、TypeScript ファイルでのみ使用できます。",
   "infer_declarations_are_only_permitted_in_the_extends_clause_of_a_conditional_type_1338": "'infer' 宣言は、条件付き型の 'extends' 句でのみ許可されます。",
   "let_declarations_can_only_be_declared_inside_a_block_1157": "'let' 宣言は、ブロック内でのみ宣言できます。",
   "let_is_not_allowed_to_be_used_as_a_name_in_let_or_const_declarations_2480": "'let' は、'let' 宣言または 'const' 宣言で名前として使用することはできません。",
+  "module_AMD_or_UMD_or_System_or_ES6_then_Classic_Otherwise_Node_69010": "モジュール === 'AMD'、'UMD'、'System'、'ES6'、'Classic'、それ以外の場合は 'Node'",
+  "module_system_or_esModuleInterop_6904": "module === \"system\" or esModuleInterop",
   "new_expression_whose_target_lacks_a_construct_signature_implicitly_has_an_any_type_7009": "ターゲットにコンストラクト シグネチャがない 'new' 式の型は、暗黙的に 'any' になります。",
+  "node_modules_bower_components_jspm_packages_plus_the_value_of_outDir_if_one_is_specified_6907": "`[\"node_modules\", \"bower_components\", \"jspm_packages\"]`' と、指定されている場合は 'outDir' の値を加算します。",
+  "one_of_Colon_6900": "次のいずれか:",
+  "one_or_more_Colon_6901": "1 つ以上",
   "options_6024": "オプション",
   "or_expected_1144": "'{' または ';' が必要です。",
   "package_json_does_not_have_a_0_field_6100": "'package.json' に '{0}' フィールドがありません。",
@@ -1507,6 +1785,9 @@
   "this_cannot_be_referenced_in_constructor_arguments_2333": "'this' はコンストラクター引数では参照できません。",
   "this_cannot_be_referenced_in_current_location_2332": "'this' は現在の場所では参照できません。",
   "this_implicitly_has_type_any_because_it_does_not_have_a_type_annotation_2683": "'this' は型として注釈を持たないため、暗黙的に型 'any' になります。",
+  "true_if_composite_false_otherwise_6909": "'composite' の場合は 'true'、それ以外の場合は 'false'",
+  "tsc_Colon_The_TypeScript_Compiler_6922": "tsc: TypeScript コンパイラ",
+  "type_Colon_6902": "種類:",
   "unique_symbol_types_are_not_allowed_here_1335": "'unique symbol' 型はここでは許可されていません。",
   "unique_symbol_types_are_only_allowed_on_variables_in_a_variable_statement_1334": "'unique symbol' 型は変数ステートメントの変数でのみ許可されています。",
   "unique_symbol_types_may_not_be_used_on_a_variable_declaration_with_a_binding_name_1333": "'unique symbol' 型は、バインディング名を持つ変数の宣言では使用できません。",
@@ -1514,5 +1795,6 @@
   "use_strict_directive_used_here_1349": "'use strict' ディレクティブがここで使用されています。",
   "with_statements_are_not_allowed_in_an_async_function_block_1300": "'with' 式は、非同期関数ブロックでは使用できません。",
   "with_statements_are_not_allowed_in_strict_mode_1101": "厳格モードでは 'with' ステートメントは使用できません。",
+  "yield_expression_implicitly_results_in_an_any_type_because_its_containing_generator_lacks_a_return_t_7057": "'yield' 式は、それを含むジェネレーターに戻り値の型の注釈がないため、暗黙的に 'any' 型になります。",
   "yield_expressions_cannot_be_used_in_a_parameter_initializer_2523": "'yield' 式は、パラメーター初期化子では使用できません。"
 }
\ No newline at end of file
diff --git a/node_modules/typescript/lib/ko/diagnosticMessages.generated.json b/node_modules/typescript/lib/ko/diagnosticMessages.generated.json
index 6012dd7..87b8156 100644
--- a/node_modules/typescript/lib/ko/diagnosticMessages.generated.json
+++ b/node_modules/typescript/lib/ko/diagnosticMessages.generated.json
@@ -1,4 +1,5 @@
 {
+  "ALL_COMPILER_OPTIONS_6917": "모든 컴파일러 옵션",
   "A_0_modifier_cannot_be_used_with_an_import_declaration_1079": "'{0}' 한정자는 가져오기 선언에서 사용할 수 없습니다.",
   "A_0_modifier_cannot_be_used_with_an_interface_declaration_1045": "'{0}' 한정자는 인터페이스 선언에서 사용할 수 없습니다.",
   "A_0_parameter_must_be_the_first_parameter_2680": "'{0}' 매개 변수는 첫 번째 매개 변수여야 합니다.",
@@ -15,7 +16,7 @@
   "A_class_member_cannot_have_the_0_keyword_1248": "클래스 멤버에는 '{0}' 키워드를 사용할 수 없습니다.",
   "A_comma_expression_is_not_allowed_in_a_computed_property_name_1171": "쉼표 식은 컴퓨팅된 속성 이름에 사용할 수 없습니다.",
   "A_computed_property_name_cannot_reference_a_type_parameter_from_its_containing_type_2467": "계산된 속성 이름에서는 포함하는 형식의 형식 매개 변수를 참조할 수 없습니다.",
-  "A_computed_property_name_in_a_class_property_declaration_must_refer_to_an_expression_whose_type_is_a_1166": "클래스 속성 선언의 계산된 속성 이름은 형식이 리터럴 형식이거나 'unique symbol' 형식인 식을 참조해야 합니다.",
+  "A_computed_property_name_in_a_class_property_declaration_must_have_a_simple_literal_type_or_a_unique_1166": "클래스 속성 선언의 계산된 속성 이름에는 간단한 리터럴 형식 또는 '고유 기호' 형식이 있어야 합니다.",
   "A_computed_property_name_in_a_method_overload_must_refer_to_an_expression_whose_type_is_a_literal_ty_1168": "메서드 오버로드의 계산된 속성 이름은 형식이 리터럴 형식이거나 'unique symbol' 형식인 식을 참조해야 합니다.",
   "A_computed_property_name_in_a_type_literal_must_refer_to_an_expression_whose_type_is_a_literal_type__1170": "리터럴 형식의 계산된 속성 이름은 형식이 리터럴 형식이거나 'unique symbol' 형식인 식을 참조해야 합니다.",
   "A_computed_property_name_in_an_ambient_context_must_refer_to_an_expression_whose_type_is_a_literal_t_1165": "앰비언트 컨텍스트의 계산된 속성 이름은 형식이 리터럴 형식이거나 'unique symbol' 형식인 식을 참조해야 합니다.",
@@ -33,24 +34,25 @@
   "A_decorator_can_only_decorate_a_method_implementation_not_an_overload_1249": "데코레이터는 오버로드가 아니라 메서드 구현만 데코레이팅할 수 있습니다.",
   "A_default_clause_cannot_appear_more_than_once_in_a_switch_statement_1113": "'default' 절은 'switch' 문에 두 번 이상 나올 수 없습니다.",
   "A_default_export_can_only_be_used_in_an_ECMAScript_style_module_1319": "기본 내보내기는 ECMAScript 스타일 모듈에서만 사용할 수 있습니다.",
+  "A_default_export_must_be_at_the_top_level_of_a_file_or_module_declaration_1258": "기본 내보내기 수준은 파일 또는 모듈 선언의 최상위 수준에 있어야 합니다.",
   "A_definite_assignment_assertion_is_not_permitted_in_this_context_1255": "이 컨텍스트에서는 한정된 할당 어설션 '!'가 허용되지 않습니다.",
   "A_destructuring_declaration_must_have_an_initializer_1182": "구조 파괴 선언에 이니셜라이저가 있어야 합니다.",
-  "A_dynamic_import_call_in_ES5_SlashES3_requires_the_Promise_constructor_Make_sure_you_have_a_declarat_2712": "ES5/ES3의 동적 가져오기 호출에 'Promise' 생성자가 필요합니다. 'Promise' 생성자에 대한 선언이 있거나 `--lib` 옵션에 'ES2015'가 포함되었는지 확인하세요.",
-  "A_dynamic_import_call_returns_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_include_ES20_2711": "동적 가져오기 호출은 'Promise'를 반환합니다. 'Promise'에 대한 선언이 있거나 `--lib` 옵션에 'ES2015'가 포함되었는지 확인하세요.",
+  "A_dynamic_import_call_in_ES5_SlashES3_requires_the_Promise_constructor_Make_sure_you_have_a_declarat_2712": "ES5/ES3의 동적 가져오기 호출에 'Promise' 생성자가 필요합니다. 'Promise' 생성자에 대한 선언이 있거나 '--lib' 옵션에 'ES2015'가 포함되었는지 확인하세요.",
+  "A_dynamic_import_call_returns_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_include_ES20_2711": "동적 가져오기 호출은 'Promise'를 반환합니다. 'Promise'에 대한 선언이 있거나 '--lib' 옵션에 'ES2015'가 포함되었는지 확인하세요.",
   "A_file_cannot_have_a_reference_to_itself_1006": "파일은 자신에 대한 참조를 포함할 수 없습니다.",
-  "A_for_await_of_statement_is_only_allowed_within_an_async_function_or_async_generator_1103": "'for-await-of' 식은 비동기 함수 또는 비동기 생성기 내에서만 사용할 수 있습니다.",
   "A_function_returning_never_cannot_have_a_reachable_end_point_2534": "'never'를 반환하는 함수에는 연결 가능한 끝점이 있을 수 없습니다.",
   "A_function_that_is_called_with_the_new_keyword_cannot_have_a_this_type_that_is_void_2679": "'new' 키워드로 호출한 함수에는 'void'인 'this' 형식을 사용할 수 없습니다.",
   "A_function_whose_declared_type_is_neither_void_nor_any_must_return_a_value_2355": "선언된 형식이 'void'도 'any'도 아닌 함수는 값을 반환해야 합니다.",
   "A_generator_cannot_have_a_void_type_annotation_2505": "생성기에는 'void' 형식 주석을 사용할 수 없습니다.",
   "A_get_accessor_cannot_have_parameters_1054": "'get' 접근자에는 매개 변수를 사용할 수 없습니다.",
+  "A_get_accessor_must_be_at_least_as_accessible_as_the_setter_2808": "get 접근자는 최소한 setter의 액세스 가능 수준과 같아야 합니다.",
   "A_get_accessor_must_return_a_value_2378": "'get' 접근자는 값을 반환해야 합니다.",
   "A_label_is_not_allowed_here_1344": "여기서는 레이블을 사용할 수 없습니다.",
   "A_labeled_tuple_element_is_declared_as_optional_with_a_question_mark_after_the_name_and_before_the_c_5086": "레이블이 지정된 튜플 요소는 형식 뒤가 아니라 이름 뒤이면서 콜론 앞에 물음표를 사용하여 optional로 선언됩니다.",
   "A_labeled_tuple_element_is_declared_as_rest_with_a_before_the_name_rather_than_before_the_type_5087": "레이블이 지정된 튜플 요소는 형식 앞이 아니라 이름 앞에 '...'을 사용하여 rest로 선언됩니다.",
   "A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_memb_2651": "열거형 선언의 멤버 이니셜라이저는 그 뒤에 선언된 멤버와 다른 열거형에 정의된 멤버를 참조할 수 없습니다.",
-  "A_method_cannot_be_named_with_a_private_identifier_18022": "프라이빗 식별자를 사용하여 메서드 이름을 지정할 수 없습니다.",
   "A_mixin_class_must_have_a_constructor_with_a_single_rest_parameter_of_type_any_2545": "mixin 클래스에는 'any[]' 형식의 rest 매개 변수 하나를 사용하는 생성자가 있어야 합니다.",
+  "A_mixin_class_that_extends_from_a_type_variable_containing_an_abstract_construct_signature_must_also_2797": "추상 구문 시그니처를 포함하는 형식 변수에서 확장되는 mixin 클래스는 'abstract'로도 선언되어야 합니다.",
   "A_module_cannot_have_multiple_default_exports_2528": "모듈에는 기본 내보내기가 여러 개 있을 수 없습니다.",
   "A_namespace_declaration_cannot_be_in_a_different_file_from_a_class_or_function_with_which_it_is_merg_2433": "네임스페이스 선언은 해당 선언이 병합된 클래스나 함수와 다른 파일에 있을 수 없습니다,",
   "A_namespace_declaration_cannot_be_located_prior_to_a_class_or_function_with_which_it_is_merged_2434": "네임스페이스 선언은 해당 선언이 병합된 클래스나 함수 앞에 있을 수 없습니다.",
@@ -71,10 +73,10 @@
   "A_required_element_cannot_follow_an_optional_element_1257": "필수 요소는 선택적 요소 뒤에 올 수 없습니다.",
   "A_required_parameter_cannot_follow_an_optional_parameter_1016": "필수 매개 변수는 선택적 매개 변수 뒤에 올 수 없습니다.",
   "A_rest_element_cannot_contain_a_binding_pattern_2501": "rest 요소에는 바인딩 패턴이 포함될 수 없습니다.",
+  "A_rest_element_cannot_follow_another_rest_element_1265": "rest 요소는 다른 rest 요소 뒤에 올 수 없습니다.",
   "A_rest_element_cannot_have_a_property_name_2566": "rest 요소에는 속성 이름을 사용할 수 없습니다.",
   "A_rest_element_cannot_have_an_initializer_1186": "rest 요소에는 이니셜라이저를 사용할 수 없습니다.",
   "A_rest_element_must_be_last_in_a_destructuring_pattern_2462": "rest 요소는 배열 구조 파괴 패턴의 마지막 요소여야 합니다.",
-  "A_rest_element_must_be_last_in_a_tuple_type_1256": "rest 요소는 튜플 형식의 마지막 요소여야 합니다.",
   "A_rest_element_type_must_be_an_array_type_2574": "rest 요소 형식은 배열 형식이어야 합니다.",
   "A_rest_parameter_cannot_be_optional_1047": "rest 매개 변수는 선택 사항이 될 수 없습니다.",
   "A_rest_parameter_cannot_have_an_initializer_1048": "rest 매개 변수에는 이니셜라이저를 사용할 수 없습니다.",
@@ -82,6 +84,7 @@
   "A_rest_parameter_must_be_of_an_array_type_2370": "rest 매개 변수는 배열 형식이어야 합니다.",
   "A_rest_parameter_or_binding_pattern_may_not_have_a_trailing_comma_1013": "rest 매개 변수 또는 바인딩 패턴에 후행 쉼표가 없을 수 있습니다.",
   "A_return_statement_can_only_be_used_within_a_function_body_1108": "'return' 문은 함수 본문 내에서만 사용할 수 있습니다.",
+  "A_return_statement_cannot_be_used_inside_a_class_static_block_18041": "'return' 문은 클래스 정적 블록 내에서 사용할 수 없습니다.",
   "A_series_of_entries_which_re_map_imports_to_lookup_locations_relative_to_the_baseUrl_6167": "가져오기를 'baseUrl'에 상대적인 조회 위치로 다시 매핑하는 일련의 항목입니다.",
   "A_set_accessor_cannot_have_a_return_type_annotation_1095": "'set' 접근자에는 반환 형식 주석을 사용할 수 없습니다.",
   "A_set_accessor_cannot_have_an_optional_parameter_1051": "'set' 접근자에는 선택적 매개 변수를 사용할 수 없습니다.",
@@ -89,6 +92,7 @@
   "A_set_accessor_must_have_exactly_one_parameter_1049": "'set' 접근자에는 매개 변수를 하나만 사용해야 합니다.",
   "A_set_accessor_parameter_cannot_have_an_initializer_1052": "'set' 접근자 매개 변수에는 이니셜라이저를 사용할 수 없습니다.",
   "A_signature_with_an_implementation_cannot_use_a_string_literal_type_2381": "구현이 있는 서명에는 문자열 리터럴 형식을 사용할 수 없습니다.",
+  "A_spread_argument_must_either_have_a_tuple_type_or_be_passed_to_a_rest_parameter_2556": "확산 인수는 튜플 유형을 가지거나 나머지 매개 변수로 전달되어야 합니다.",
   "A_super_call_must_be_the_first_statement_in_the_constructor_when_a_class_contains_initialized_proper_2376": "클래스에 초기화된 속성, 매개 변수 속성 또는 프라이빗 식별자가 있으면 'super' 호출이 생성자에서 첫 번째 문이어야 합니다.",
   "A_this_based_type_guard_is_not_compatible_with_a_parameter_based_type_guard_2518": "'this' 기반 형식 가드는 매개 변수 기반 형식 가드와 호환되지 않습니다.",
   "A_this_type_is_available_only_in_a_non_static_member_of_a_class_or_interface_2526": "'this' 형식은 클래스 또는 인터페이스의 비정적 멤버에서만 사용할 수 있습니다.",
@@ -114,8 +118,11 @@
   "Add_a_return_statement_95111": "return 문 추가",
   "Add_all_missing_async_modifiers_95041": "누락된 모든 'async' 한정자 추가",
   "Add_all_missing_call_parentheses_95068": "누락된 호출 괄호 모두 추가",
+  "Add_all_missing_function_declarations_95157": "누락된 함수 선언 모두 추가",
   "Add_all_missing_imports_95064": "누락된 모든 가져오기 추가",
   "Add_all_missing_members_95022": "누락된 모든 멤버 추가",
+  "Add_all_missing_override_modifiers_95162": "누락된 모든 'override' 한정자 추가",
+  "Add_all_missing_properties_95166": "누락된 모든 속성 추가",
   "Add_all_missing_return_statement_95114": "누락된 모든 return 문 추가",
   "Add_all_missing_super_calls_95039": "누락된 모든 super 호출 추가",
   "Add_async_modifier_to_containing_function_90029": "포함된 함수에 async 한정자 추가",
@@ -135,18 +142,22 @@
   "Add_initializers_to_all_uninitialized_properties_95027": "초기화되지 않은 모든 속성에 이니셜라이저 추가",
   "Add_missing_call_parentheses_95067": "누락된 호출 괄호 추가",
   "Add_missing_enum_member_0_95063": "누락된 열거형 멤버 '{0}' 추가",
+  "Add_missing_function_declaration_0_95156": "누락된 함수 선언 '{0}' 추가",
   "Add_missing_new_operator_to_all_calls_95072": "모든 호출에 누락된 'new' 연산자 추가",
   "Add_missing_new_operator_to_call_95071": "호출에 누락된 'new' 연산자 추가",
+  "Add_missing_properties_95165": "누락된 속성 추가",
   "Add_missing_super_call_90001": "누락된 'super()' 호출 추가",
   "Add_missing_typeof_95052": "누락된 'typeof' 추가",
   "Add_names_to_all_parameters_without_names_95073": "이름이 없는 모든 매개 변수에 이름 추가",
   "Add_or_remove_braces_in_an_arrow_function_95058": "화살표 함수에 중괄호 추가 또는 제거",
+  "Add_override_modifier_95160": "'override' 한정자 추가",
   "Add_parameter_name_90034": "매개 변수 이름 추가",
   "Add_qualifier_to_all_unresolved_variables_matching_a_member_name_95037": "멤버 이름과 일치하는 모든 확인되지 않은 변수에 한정자 추가",
   "Add_this_parameter_95104": "'this' 매개 변수를 추가합니다.",
   "Add_this_tag_95103": "'@this' 태그 추가",
   "Add_to_all_uncalled_decorators_95044": "호출되지 않는 모든 데코레이터에 '()' 추가",
   "Add_ts_ignore_to_all_error_messages_95042": "모든 오류 메시지에 '@ts-ignore' 추가",
+  "Add_undefined_to_a_type_when_accessed_using_an_index_6674": "인덱스로 액세스할 때 형식에 'undefined'를 추가합니다.",
   "Add_undefined_type_to_all_uninitialized_properties_95029": "초기화되지 않은 모든 속성에 정의되지 않은 형식 추가",
   "Add_undefined_type_to_property_0_95018": "'{0}' 속성에 '정의되지 않은' 형식 추가",
   "Add_unknown_conversion_for_non_overlapping_types_95069": "겹치지 않는 형식에 대해 'unknown' 변환 추가",
@@ -154,8 +165,6 @@
   "Add_void_to_Promise_resolved_without_a_value_95143": "값 없이 확인된 Promise에 'void' 추가",
   "Add_void_to_all_Promises_resolved_without_a_value_95144": "값 없이 확인된 모든 Promise에 'void' 추가",
   "Adding_a_tsconfig_json_file_will_help_organize_projects_that_contain_both_TypeScript_and_JavaScript__5068": "tsconfig.json 파일을 추가하면 TypeScript 파일과 JavaScript 파일이 둘 다 포함된 프로젝트를 정리하는 데 도움이 됩니다. 자세한 내용은 https://aka.ms/tsconfig를 참조하세요.",
-  "Additional_Checks_6176": "추가 검사",
-  "Advanced_Options_6178": "고급 옵션",
   "All_declarations_of_0_must_have_identical_modifiers_2687": "'{0}'의 모든 선언에는 동일한 한정자가 있어야 합니다.",
   "All_declarations_of_0_must_have_identical_type_parameters_2428": "'{0}'의 모든 선언에는 동일한 형식 매개 변수가 있어야 합니다.",
   "All_declarations_of_an_abstract_method_must_be_consecutive_2516": "추상 메서드의 모든 선언은 연속적이어야 합니다.",
@@ -163,34 +172,38 @@
   "All_imports_in_import_declaration_are_unused_6192": "가져오기 선언의 모든 가져오기가 사용되지 않습니다.",
   "All_type_parameters_are_unused_6205": "모든 형식 매개 변수가 사용되지 않습니다.",
   "All_variables_are_unused_6199": "모든 변수가 사용되지 않습니다.",
-  "Allow_accessing_UMD_globals_from_modules_95076": "모듈에서 UMD 전역에 대한 액세스를 허용합니다.",
+  "Allow_JavaScript_files_to_be_a_part_of_your_program_Use_the_checkJS_option_to_get_errors_from_these__6600": "JavaScript 파일이 프로그램의 일부가 되도록 허용합니다. 이러한 파일에서 오류를 가져오려면 'checkJS' 옵션을 사용합니다.",
+  "Allow_accessing_UMD_globals_from_modules_6602": "모듈에서 UMD 전역에 대한 액세스를 허용합니다.",
   "Allow_default_imports_from_modules_with_no_default_export_This_does_not_affect_code_emit_just_typech_6011": "기본 내보내기가 없는 모듈에서 기본 가져오기를 허용합니다. 여기서는 코드 내보내기에는 영향을 주지 않고 형식 검사만 합니다.",
+  "Allow_import_x_from_y_when_a_module_doesn_t_have_a_default_export_6601": "모듈에 기본 내보내기가 없을 때 'y에서 x 가져오기'를 허용합니다.",
+  "Allow_importing_helper_functions_from_tslib_once_per_project_instead_of_including_them_per_file_6639": "tslib에서 도우미 함수를 파일별로 포함하는 대신 프로젝트당 한 번씩 가져오도록 허용합니다.",
   "Allow_javascript_files_to_be_compiled_6102": "Javascript 파일을 컴파일하도록 허용합니다.",
+  "Allow_multiple_folders_to_be_treated_as_one_when_resolving_modules_6691": "모듈을 확인할 때 여러 폴더가 하나로 처리되도록 허용합니다.",
   "Already_included_file_name_0_differs_from_file_name_1_only_in_casing_1261": "이미 포함된 '{0}' 파일 이름은 '{1}' 파일 이름과 대/소문자만 다릅니다.",
   "Ambient_module_declaration_cannot_specify_relative_module_name_2436": "앰비언트 모듈 선언은 상대적 모듈 이름을 지정할 수 없습니다.",
   "Ambient_modules_cannot_be_nested_in_other_modules_or_namespaces_2435": "앰비언트 모듈은 다른 모듈 또는 네임스페이스에 중첩될 수 없습니다.",
   "An_AMD_module_cannot_have_multiple_name_assignments_2458": "AMD 모듈에는 여러 이름이 할당될 수 없습니다.",
   "An_abstract_accessor_cannot_have_an_implementation_1318": "추상 접근자는 구현이 있을 수 없습니다.",
   "An_accessibility_modifier_cannot_be_used_with_a_private_identifier_18010": "접근성 한정자는 프라이빗 식별자와 함께 사용할 수 없습니다.",
-  "An_accessor_cannot_be_named_with_a_private_identifier_18023": "프라이빗 식별자를 사용하여 접근자 이름을 지정할 수 없습니다.",
   "An_accessor_cannot_have_type_parameters_1094": "접근자에는 형식 매개 변수를 사용할 수 없습니다.",
   "An_ambient_module_declaration_is_only_allowed_at_the_top_level_in_a_file_1234": "앰비언트 모듈 선언은 파일의 최상위에서만 사용할 수 있습니다.",
   "An_argument_for_0_was_not_provided_6210": "'{0}'의 인수가 제공되지 않았습니다.",
   "An_argument_matching_this_binding_pattern_was_not_provided_6211": "이 바인딩 패턴과 일치하는 인수가 제공되지 않았습니다.",
   "An_arithmetic_operand_must_be_of_type_any_number_bigint_or_an_enum_type_2356": "산술 피연산자는 'any', 'number', 'bigint' 또는 열거형 형식이어야 합니다.",
   "An_arrow_function_cannot_have_a_this_parameter_2730": "화살표 함수에는 'this' 매개 변수를 사용할 수 없습니다.",
-  "An_async_function_or_method_in_ES5_SlashES3_requires_the_Promise_constructor_Make_sure_you_have_a_de_2705": "ES5/ES3의 비동기 함수 또는 메서드에 'Promise' 생성자가 필요합니다. 'Promise' 생성자에 대한 선언이 있거나 `--lib` 옵션에 'ES2015'가 포함되었는지 확인하세요.",
+  "An_async_function_or_method_in_ES5_SlashES3_requires_the_Promise_constructor_Make_sure_you_have_a_de_2705": "ES5/ES3의 비동기 함수 또는 메서드에 'Promise' 생성자가 필요합니다. 'Promise' 생성자에 대한 선언이 있거나 '--lib' 옵션에 'ES2015'가 포함되었는지 확인하세요.",
   "An_async_function_or_method_must_have_a_valid_awaitable_return_type_1057": "비동기 함수 또는 메서드에는 유효한 대기 가능 반환 형식이 있어야 합니다.",
-  "An_async_function_or_method_must_return_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_in_2697": "비동기 함수 또는 메서드는 'Promise'를 반환해야 합니다. 'Promise'에 대한 선언이 있거나 `--lib` 옵션에 'ES2015'가 포함되었는지 확인하세요.",
+  "An_async_function_or_method_must_return_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_in_2697": "비동기 함수 또는 메서드는 'Promise'를 반환해야 합니다. 'Promise'에 대한 선언이 있거나 '--lib' 옵션에 'ES2015'가 포함되었는지 확인하세요.",
   "An_async_iterator_must_have_a_next_method_2519": "비동기 반복기에는 'next()' 메서드가 있어야 합니다.",
   "An_element_access_expression_should_take_an_argument_1011": "요소 액세스 식은 인수를 사용해야 합니다.",
   "An_enum_member_cannot_be_named_with_a_private_identifier_18024": "프라이빗 식별자를 사용하여 열거형 멤버 이름을 지정할 수 없습니다.",
   "An_enum_member_cannot_have_a_numeric_name_2452": "열거형 멤버는 숫자 이름을 가질 수 없습니다.",
   "An_enum_member_name_must_be_followed_by_a_or_1357": "열거형 멤버 이름 뒤에는 ',', '=' 또는 '}'가 와야 합니다.",
-  "An_export_assignment_can_only_be_used_in_a_module_1231": "내보내기 할당은 모듈에서만 사용할 수 있습니다.",
+  "An_expanded_version_of_this_information_showing_all_possible_compiler_options_6928": "가능한 모든 컴파일러 옵션을 보여 주는 이 정보의 확장된 버전",
   "An_export_assignment_cannot_be_used_in_a_module_with_other_exported_elements_2309": "내보내기 할당은 다른 내보낸 요소가 있는 모듈에서 사용될 수 없습니다.",
   "An_export_assignment_cannot_be_used_in_a_namespace_1063": "내보내기 할당은 네임스페이스에서 사용될 수 없습니다.",
   "An_export_assignment_cannot_have_modifiers_1120": "내보내기 할당에는 한정자를 사용할 수 없습니다.",
+  "An_export_assignment_must_be_at_the_top_level_of_a_file_or_module_declaration_1231": "내보내기 할당은 파일 또는 모듈 선언의 최상위 수준에 있어야 합니다.",
   "An_export_declaration_can_only_be_used_in_a_module_1233": "내보내기 선언은 모듈에서만 사용할 수 있습니다.",
   "An_export_declaration_cannot_have_modifiers_1193": "내보내기 선언에는 한정자를 사용할 수 없습니다.",
   "An_expression_of_type_void_cannot_be_tested_for_truthiness_1345": "'void' 형식 식의 truthiness를 테스트할 수 없습니다.",
@@ -212,9 +225,8 @@
   "An_index_signature_parameter_cannot_have_an_accessibility_modifier_1018": "인덱스 시그니처 매개 변수에는 액세스 가능성 한정자를 사용할 수 없습니다.",
   "An_index_signature_parameter_cannot_have_an_initializer_1020": "인덱스 시그니처 매개 변수에는 이니셜라이저를 사용할 수 없습니다.",
   "An_index_signature_parameter_must_have_a_type_annotation_1022": "인덱스 시그니처 매개 변수에는 형식 주석을 사용할 수 없습니다.",
-  "An_index_signature_parameter_type_cannot_be_a_type_alias_Consider_writing_0_Colon_1_Colon_2_instead_1336": "인덱스 시그니처 매개 변수 형식은 형식 별칭일 수 없습니다. 대신 '[{0}: {1}]: {2}'을(를) 작성하세요.",
-  "An_index_signature_parameter_type_cannot_be_a_union_type_Consider_using_a_mapped_object_type_instead_1337": "인덱스 시그니처 매개 변수 형식은 공용 구조체 형식일 수 없습니다. 대신 매핑된 개체 형식을 사용하세요.",
-  "An_index_signature_parameter_type_must_be_either_string_or_number_1023": "인덱스 시그니처 매개 변수 형식은 'string' 또는 'number'여야 합니다.",
+  "An_index_signature_parameter_type_cannot_be_a_literal_type_or_generic_type_Consider_using_a_mapped_o_1337": "인덱스 시그니처 매개 변수 형식은 리터럴 유형이나 제네릭 형식일 수 없습니다. 대신 매핑된 개체 형식을 사용하세요.",
+  "An_index_signature_parameter_type_must_be_string_number_symbol_or_a_template_literal_type_1268": "인덱스 시그니처 매개 변수 형식은 'string', 'number', 'symbol' 또는 템플릿 리터럴 형식이어야 합니다.",
   "An_interface_can_only_extend_an_identifier_Slashqualified_name_with_optional_type_arguments_2499": "인터페이스는 선택적 형식 인수가 포함된 식별자/정규화된 이름만 확장할 수 있습니다.",
   "An_interface_can_only_extend_an_object_type_or_intersection_of_object_types_with_statically_known_me_2312": "인터페이스는 개체 형식 또는 정적으로 알려진 멤버가 포함된 개체 형식의 교집합만 확장할 수 있습니다.",
   "An_interface_property_cannot_have_an_initializer_1246": "인터페이스 속성에는 이니셜라이저를 사용할 수 없습니다.",
@@ -225,6 +237,7 @@
   "An_object_literal_cannot_have_property_and_accessor_with_the_same_name_1119": "개체 리터럴에 이름이 같은 속성과 접근자를 사용할 수 없습니다.",
   "An_object_member_cannot_be_declared_optional_1162": "개체 멤버는 선택적으로 선언될 수 없습니다.",
   "An_optional_chain_cannot_contain_private_identifiers_18030": "선택적 체인에는 프라이빗 식별자를 사용할 수 없습니다.",
+  "An_optional_element_cannot_follow_a_rest_element_1266": "선택적 요소는 rest 요소 뒤에 올 수 없습니다.",
   "An_outer_value_of_this_is_shadowed_by_this_container_2738": "'this'의 외부 값은 이 컨테이너에서 섀도 처리됩니다.",
   "An_overload_signature_cannot_be_declared_as_a_generator_1222": "오버로드 시그니처는  생성기로 선언할 수 없습니다.",
   "An_unary_expression_with_the_0_operator_is_not_allowed_in_the_left_hand_side_of_an_exponentiation_ex_17006": "지수 식의 왼쪽에는 '{0}' 연산자가 있는 단항 식을 사용할 수 없습니다. 식을 괄호로 묶는 것이 좋습니다.",
@@ -244,33 +257,47 @@
   "Augmentations_for_the_global_scope_can_only_be_directly_nested_in_external_modules_or_ambient_module_2669": "전역 범위에 대한 확대는 외부 모듈 또는 앰비언트 모듈 선언에만 직접 중첩될 수 있습니다.",
   "Augmentations_for_the_global_scope_should_have_declare_modifier_unless_they_appear_in_already_ambien_2670": "전역 범위에 대한 확대는 이미 존재하는 앰비언트 컨텍스트에 표시되지 않는 한 'declare' 한정자를 포함해야 합니다.",
   "Auto_discovery_for_typings_is_enabled_in_project_0_Running_extra_resolution_pass_for_module_1_using__6140": "프로젝트 '{0}'에서 입력에 대한 자동 검색을 사용하도록 설정되었습니다. '{2}' 캐시 위치를 사용하여 모듈 '{1}'에 대해 추가 해결 패스를 실행합니다.",
+  "Await_expression_cannot_be_used_inside_a_class_static_block_18037": "Await 식은 클래스 정적 블록 내에서 사용할 수 없습니다.",
+  "BUILD_OPTIONS_6919": "빌드 옵션",
+  "Backwards_Compatibility_6253": "이전 버전과의 호환성",
   "Base_class_expressions_cannot_reference_class_type_parameters_2562": "기본 클래스 식에서 클래스 형식 매개 변수를 참조할 수 없습니다.",
   "Base_constructor_return_type_0_is_not_an_object_type_or_intersection_of_object_types_with_statically_2509": "기본 생성자 반환 형식 '{0}'은(는) 개체 형식 또는 정적으로 알려진 멤버가 포함된 개체 형식의 교집합이 아닙니다.",
   "Base_constructors_must_all_have_the_same_return_type_2510": "기본 생성자는 모두 반환 형식이 같아야 합니다.",
   "Base_directory_to_resolve_non_absolute_module_names_6083": "비추상 모듈 이름을 확인할 기본 디렉터리입니다.",
-  "Basic_Options_6172": "기본 옵션",
   "BigInt_literals_are_not_available_when_targeting_lower_than_ES2020_2737": "ES2020 미만을 대상으로 할 경우 bigint 리터럴을 사용할 수 없습니다.",
   "Binary_digit_expected_1177": "이진수가 있어야 합니다.",
   "Binding_element_0_implicitly_has_an_1_type_7031": "바인딩 요소 '{0}'에 암시적으로 '{1}' 형식이 있습니다.",
   "Block_scoped_variable_0_used_before_its_declaration_2448": "선언 전에 사용된 블록 범위 변수 '{0}'입니다.",
-  "Build_all_projects_including_those_that_appear_to_be_up_to_date_6368": "최신 상태로 표시될 프로젝트를 포함하여 모든 프로젝트 빌드",
+  "Build_a_composite_project_in_the_working_directory_6925": "작업 디렉터리에서 복합 프로젝트를 빌드합니다.",
+  "Build_all_projects_including_those_that_appear_to_be_up_to_date_6636": "최신 상태로 표시될 프로젝트를 포함하여 모든 프로젝트 빌드",
   "Build_one_or_more_projects_and_their_dependencies_if_out_of_date_6364": "최신 상태가 아닌 경우, 하나 이상의 프로젝트 및 해당 종속성 빌드",
   "Build_option_0_requires_a_value_of_type_1_5073": "빌드 옵션 '{0}'에 {1} 형식의 값이 필요합니다.",
   "Building_project_0_6358": "'{0}' 프로젝트를 빌드하는 중...",
+  "COMMAND_LINE_FLAGS_6921": "명령줄 플래그",
+  "COMMON_COMMANDS_6916": "일반 명령",
+  "COMMON_COMPILER_OPTIONS_6920": "일반 컴파일러 옵션",
   "Call_decorator_expression_90028": "데코레이터 식 호출",
   "Call_signature_return_types_0_and_1_are_incompatible_2202": "호출 시그니처 반환 형식 '{0}' 및 '{1}'이(가) 호환되지 않습니다.",
   "Call_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type_7020": "반환 형식 주석이 없는 호출 시그니처에는 암시적으로 'any' 반환 형식이 포함됩니다.",
   "Call_signatures_with_no_arguments_have_incompatible_return_types_0_and_1_2204": "인수가 없는 호출 시그니처의 반환 형식 '{0}' 및 '{1}'이(가) 호환되지 않습니다.",
   "Call_target_does_not_contain_any_signatures_2346": "호출 대상에 시그니처가 포함되어 있지 않습니다.",
   "Can_only_convert_logical_AND_access_chains_95142": "논리적 AND 액세스 체인만 변환할 수 있습니다.",
+  "Can_only_convert_named_export_95164": "명명된 내보내기만 변환할 수 있습니다.",
   "Can_only_convert_property_with_modifier_95137": "한정자만 사용하여 속성을 변환할 수 있습니다.",
+  "Can_only_convert_string_concatenation_95154": "문자열 연결만 변환할 수 있습니다.",
   "Cannot_access_0_1_because_0_is_a_type_but_not_a_namespace_Did_you_mean_to_retrieve_the_type_of_the_p_2713": "'{0}'이(가) 네임스페이스가 아니라 형식이므로 '{0}.{1}'에 액세스할 수 없습니다. '{0}'에서 '{0}[\"{1}\"]'과(와) 함께 '{1}' 속성의 형식을 검색하려고 했나요?",
   "Cannot_access_ambient_const_enums_when_the_isolatedModules_flag_is_provided_2748": "'--isolatedModules' 플래그가 제공된 경우 앰비언트 const 열거형에 액세스할 수 없습니다.",
   "Cannot_assign_a_0_constructor_type_to_a_1_constructor_type_2672": "'{0}' 생성자 형식을 '{1}' 생성자 형식에 할당할 수 없습니다.",
   "Cannot_assign_an_abstract_constructor_type_to_a_non_abstract_constructor_type_2517": "추상 생성자 형식을 비추상 생성자 형식에 할당할 수 없습니다.",
+  "Cannot_assign_to_0_because_it_is_a_class_2629": "클래스이므로 '{0}'에 할당할 수 없습니다.",
   "Cannot_assign_to_0_because_it_is_a_constant_2588": "상수이므로 '{0}'에 할당할 수 없습니다.",
+  "Cannot_assign_to_0_because_it_is_a_function_2630": "함수이므로 '{0}'에 할당할 수 없습니다.",
+  "Cannot_assign_to_0_because_it_is_a_namespace_2631": "네임스페이스이므로 '{0}'에 할당할 수 없습니다.",
   "Cannot_assign_to_0_because_it_is_a_read_only_property_2540": "읽기 전용 속성이므로 '{0}'에 할당할 수 없습니다.",
+  "Cannot_assign_to_0_because_it_is_an_enum_2628": "열거형이므로 '{0}'에 할당할 수 없습니다.",
+  "Cannot_assign_to_0_because_it_is_an_import_2632": "가져오기이므로 '{0}'에 할당할 수 없습니다.",
   "Cannot_assign_to_0_because_it_is_not_a_variable_2539": "변수가 아니므로 '{0}'에 할당할 수 없습니다.",
+  "Cannot_assign_to_private_method_0_Private_methods_are_not_writable_2803": "프라이빗 메서드 '{0}'에 할당할 수 없습니다. 프라이빗 메서드에는 쓸 수 없습니다.",
   "Cannot_augment_module_0_because_it_resolves_to_a_non_module_entity_2671": "'{0}' 모듈은 모듈이 아닌 엔터티로 확인되므로 확대할 수 없습니다.",
   "Cannot_augment_module_0_with_value_exports_because_it_resolves_to_a_non_module_entity_2649": "모듈이 아닌 엔터티로 확인되기 때문에 값 내보내기로 모듈 '{0}'을(를) 확대할 수 없습니다.",
   "Cannot_compile_modules_using_option_0_unless_the_module_flag_is_amd_or_system_6131": "'--module' 플래그가 'amd' 또는 'system'이 아닌 경우 '{0}' 옵션을 사용하여 모듈을 컴파일할 수 없습니다.",
@@ -293,13 +320,13 @@
   "Cannot_find_name_0_Did_you_mean_the_instance_member_this_0_2663": "'{0}' 이름을 찾을 수 없습니다. 인스턴스 멤버 'this.{0}'을(를) 사용하시겠습니까?",
   "Cannot_find_name_0_Did_you_mean_the_static_member_1_0_2662": "'{0}' 이름을 찾을 수 없습니다. 정적 멤버 '{1}.{0}'을(를) 사용하시겠습니까?",
   "Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_2583": "'{0}' 이름을 찾을 수 없습니다. 대상 라이브러리를 변경하려는 경우 'lib' 컴파일러 옵션을 '{1}' 이상으로 변경해 보세요.",
-  "Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_2584": "'{0}' 이름을 찾을 수 없습니다. 대상 라이브러리를 변경하려는 경우 'dom'을 포함하도록 'lib' 컴파일러 옵션을 변경해 봅니다.",
+  "Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_2584": "'{0}' 이름을 찾을 수 없습니다. 대상 라이브러리를 변경하려는 경우 'dom'을 포함하도록 'lib' 컴파일러 옵션을 변경해 보세요.",
   "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_a_test_runner_Try_npm_i_save_dev_type_2582": "'{0}' 이름을 찾을 수 없습니다. 테스트 실행기의 형식 정의를 설치하려는 경우 'npm i --save-dev @types/jest' 또는 'npm i --save-dev @types/mocha'를 시도합니다.",
-  "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_a_test_runner_Try_npm_i_save_dev_type_2593": "'{0}' 이름을 찾을 수 없습니다. 테스트 실행기의 형식 정의를 설치하려는 경우 'npm i --save-dev @types/jest' 또는 'npm i --save-dev @types/mocha'를 시도한 다음, tsconfig의 형식 필드에 'jest' 또는 'mocha'를 추가합니다.",
+  "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_a_test_runner_Try_npm_i_save_dev_type_2593": "'{0}' 이름을 찾을 수 없습니다. 테스트 실행기의 형식 정의를 설치하려는 경우 'npm i --save-dev @types/jest' 또는 'npm i --save-dev @types/mocha'를 시도한 다음, tsconfig의 형식 필드에 'jest' 또는 'mocha'를 추가하세요.",
   "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_jQuery_Try_npm_i_save_dev_types_Slash_2581": "'{0}' 이름을 찾을 수 없습니다. jQuery의 형식 정의를 설치하려는 경우 'npm i --save-dev @types/jquery'를 시도합니다.",
-  "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_jQuery_Try_npm_i_save_dev_types_Slash_2592": "'{0}' 이름을 찾을 수 없습니다. jQuery의 형식 정의를 설치하려는 경우 'npm i --save-dev @types/jquery'를 시도한 다음, tsconfig의 형식 필드에 'jquery'를 추가합니다.",
+  "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_jQuery_Try_npm_i_save_dev_types_Slash_2592": "'{0}' 이름을 찾을 수 없습니다. jQuery의 형식 정의를 설치하려는 경우 'npm i --save-dev @types/jquery'를 시도한 다음, tsconfig의 형식 필드에 'jquery'를 추가하세요.",
   "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_node_Try_npm_i_save_dev_types_Slashno_2580": "'{0}' 이름을 찾을 수 없습니다. 노드의 형식 정의를 설치하려는 경우 'npm i --save-dev @types/node'를 시도합니다.",
-  "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_node_Try_npm_i_save_dev_types_Slashno_2591": "'{0}' 이름을 찾을 수 없습니다. 노드의 형식 정의를 설치하려는 경우 'npm i --save-dev @types/node'를 시도한 다음, tsconfig의 형식 필드에 'node'를 추가합니다.",
+  "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_node_Try_npm_i_save_dev_types_Slashno_2591": "'{0}' 이름을 찾을 수 없습니다. 노드의 형식 정의를 설치하려는 경우 'npm i --save-dev @types/node'를 시도한 다음, tsconfig의 형식 필드에 'node'를 추가하세요.",
   "Cannot_find_namespace_0_2503": "'{0}' 네임스페이스를 찾을 수 없습니다.",
   "Cannot_find_parameter_0_1225": "'{0}' 매개 변수를 찾을 수 없습니다.",
   "Cannot_find_the_common_subdirectory_path_for_the_input_files_5009": "입력 파일의 공용 하위 디렉터리 경로를 찾을 수 없습니다.",
@@ -318,11 +345,13 @@
   "Cannot_redeclare_block_scoped_variable_0_2451": "블록 범위 변수 '{0}'을(를) 다시 선언할 수 없습니다.",
   "Cannot_redeclare_exported_variable_0_2323": "내보낸 변수 '{0}'을(를) 다시 선언할 수 없습니다.",
   "Cannot_redeclare_identifier_0_in_catch_clause_2492": "catch 절에서 식별자 '{0}'을(를) 다시 선언할 수 없습니다.",
+  "Cannot_start_a_function_call_in_a_type_annotation_1441": "형식 주석에서 함수 호출을 시작할 수 없습니다.",
   "Cannot_update_output_of_project_0_because_there_was_error_reading_file_1_6376": "'{1}' 파일을 읽는 동안 오류가 발생하여 '{0}' 프로젝트의 출력을 업데이트할 수 없습니다.",
   "Cannot_use_JSX_unless_the_jsx_flag_is_provided_17004": "'--jsx' 플래그를 제공하지 않으면 JSX를 사용할 수 없습니다.",
   "Cannot_use_imports_exports_or_module_augmentations_when_module_is_none_1148": "'--module'이 'none'인 경우 가져오기, 내보내기 또는 모듈 확대를 사용할 수 없습니다.",
   "Cannot_use_namespace_0_as_a_type_2709": "'{0}' 네임스페이스를 형식으로 사용할 수 없습니다.",
   "Cannot_use_namespace_0_as_a_value_2708": "'{0}' 네임스페이스를 값으로 사용할 수 없습니다.",
+  "Cannot_use_this_in_a_static_property_initializer_of_a_decorated_class_2816": "데코레이팅된 클래스의 정적 속성 이니셜라이저에서는 'this'를 사용할 수 없습니다.",
   "Cannot_write_file_0_because_it_will_overwrite_tsbuildinfo_file_generated_by_referenced_project_1_6377": "참조된 프로젝트 '{1}'에서 생성된 '.tsbuildinfo' 파일을 덮어쓰므로 '{0}' 파일을 쓸 수 없습니다.",
   "Cannot_write_file_0_because_it_would_be_overwritten_by_multiple_input_files_5056": "'{0}' 파일은 여러 입력 파일로 덮어쓰이므로 쓸 수 없습니다.",
   "Cannot_write_file_0_because_it_would_overwrite_input_file_5055": "'{0}' 파일은 입력 파일을 덮어쓰므로 쓸 수 없습니다.",
@@ -334,6 +363,8 @@
   "Change_all_jsdoc_style_types_to_TypeScript_and_add_undefined_to_nullable_types_95031": "모든 jsdoc-style 형식을 TypeScript로 변경(그리고 nullable 형식에 '| undefined' 추가)",
   "Change_extends_to_implements_90003": "'extends'를 'implements'로 변경",
   "Change_spelling_to_0_90022": "맞춤법을 '{0}'(으)로 변경",
+  "Check_for_class_properties_that_are_declared_but_not_set_in_the_constructor_6700": "선언되었지만 생성자에 설정되지 않은 클래스 속성을 확인합니다.",
+  "Check_that_the_arguments_for_bind_call_and_apply_methods_match_the_original_function_6697": "'bind', 'call' 및 'apply' 메서드의 인수가 원래 함수와 일치하는지 확인합니다.",
   "Checking_if_0_is_the_longest_matching_prefix_for_1_2_6104": "'{0}'이(가) '{1}' - '{2}'에 대해 일치하는 가장 긴 접두사인지 확인하는 중입니다.",
   "Circular_definition_of_import_alias_0_2303": "가져오기 별칭 '{0}'의 순환 정의입니다.",
   "Circularity_detected_while_resolving_configuration_Colon_0_18000": "구성을 확인하는 동안 순환이 검색되었습니다. {0}",
@@ -345,7 +376,9 @@
   "Class_0_incorrectly_implements_class_1_Did_you_mean_to_extend_1_and_inherit_its_members_as_a_subclas_2720": "'{0}' 클래스가 '{1}' 클래스를 잘못 구현합니다. '{1}'을(를) 확장하고 이 클래스의 멤버를 하위 클래스로 상속하시겠습니까?",
   "Class_0_incorrectly_implements_interface_1_2420": "'{0}' 클래스가 '{1}' 인터페이스를 잘못 구현합니다.",
   "Class_0_used_before_its_declaration_2449": "선언 전에 사용된 '{0}' 클래스입니다.",
-  "Class_declarations_cannot_have_more_than_one_augments_or_extends_tag_8025": "클래스 선언은 '@augments' 또는 `@extends` 태그를 둘 이상 가질 수 없습니다.",
+  "Class_declaration_cannot_implement_overload_list_for_0_2813": "클래스 선언에서 '{0}'에 대한 오버로드 목록을 구현할 수 없습니다.",
+  "Class_declarations_cannot_have_more_than_one_augments_or_extends_tag_8025": "클래스 선언은 '@augments' 또는 '@extends' 태그를 둘 이상 가질 수 없습니다.",
+  "Class_decorators_can_t_be_used_with_static_private_identifier_Consider_removing_the_experimental_dec_18036": "클래스 데코레이터는 정적 프라이빗 식별자와 함께 사용할 수 없습니다. 실험적 데코레이터를 제거하는 것이 좋습니다.",
   "Class_name_cannot_be_0_2414": "클래스 이름은 '{0}'일 수 없습니다.",
   "Class_name_cannot_be_Object_when_targeting_ES5_with_module_0_2725": "{0} 모듈을 사용하는 ES5를 대상으로 하는 경우 클래스 이름은 'Object'일 수 없습니다.",
   "Class_static_side_0_incorrectly_extends_base_class_static_side_1_2417": "클래스 정적 측면 '{0}'이(가) 기본 클래스 정적 측면 '{1}'을(를) 잘못 확장합니다.",
@@ -354,16 +387,25 @@
   "Classes_may_not_have_a_field_named_constructor_18006": "클래스에는 'constructor' 필드를 사용할 수 없습니다.",
   "Command_line_Options_6171": "명령줄 옵션",
   "Compile_the_project_given_the_path_to_its_configuration_file_or_to_a_folder_with_a_tsconfig_json_6020": "구성 파일에 대한 경로 또는 'tsconfig.json'이 포함된 폴더에 대한 경로를 고려하여 프로젝트를 컴파일합니다.",
+  "Compiler_Diagnostics_6251": "컴파일러 진단",
   "Compiler_option_0_expects_an_argument_6044": "컴파일러 옵션 '{0}'에는 인수가 필요합니다.",
+  "Compiler_option_0_may_not_be_used_with_build_5094": "컴파일러 옵션 '--{0}'은(는) '-빌드'에서 사용되지 않을 수 있습니다.",
+  "Compiler_option_0_may_only_be_used_with_build_5093": "컴파일러 옵션 '--{0}'은(는) '-빌드'에서만 사용할 수 있습니다.",
   "Compiler_option_0_requires_a_value_of_type_1_5024": "컴파일러 옵션 '{0}'에 {1} 형식의 값이 필요합니다.",
   "Compiler_reserves_name_0_when_emitting_private_identifier_downlevel_18027": "컴파일러는 프라이빗 식별자 하위 수준을 내보낼 때 '{0}' 이름을 예약합니다.",
+  "Compiles_the_TypeScript_project_located_at_the_specified_path_6927": "지정된 경로에 있는 TypeScript 프로젝트를 컴파일합니다.",
+  "Compiles_the_current_project_tsconfig_json_in_the_working_directory_6923": "현재 프로젝트(작업 디렉터리의 tsconfig.json)를 컴파일합니다.",
+  "Compiles_the_current_project_with_additional_settings_6929": "추가 설정을 사용하여 현재 프로젝트를 컴파일합니다.",
+  "Completeness_6257": "완성도",
   "Composite_projects_may_not_disable_declaration_emit_6304": "복합 프로젝트는 선언 내보내기를 비활성화할 수 없습니다.",
   "Composite_projects_may_not_disable_incremental_compilation_6379": "복합 프로젝트는 증분 컴파일을 비활성화할 수 없습니다.",
+  "Computed_from_the_list_of_input_files_6911": "입력 파일 목록에서 컴퓨팅됨",
   "Computed_property_names_are_not_allowed_in_enums_1164": "컴퓨팅된 속성 이름은 열거형에 사용할 수 없습니다.",
   "Computed_values_are_not_permitted_in_an_enum_with_string_valued_members_2553": "계산된 값은 문자열 값 멤버가 포함된 열거형에서 허용되지 않습니다.",
   "Concatenate_and_emit_output_to_single_file_6001": "출력을 연결하고 단일 파일로 내보냅니다.",
   "Conflicting_definitions_for_0_found_at_1_and_2_Consider_installing_a_specific_version_of_this_librar_4090": "'{1}' 및 '{2}'에서 '{0}'에 대한 정의가 충돌하고 있습니다. 이 라이브러리의 특정 버전을 설치하여 충돌을 해결하세요.",
   "Conflicts_are_in_this_file_6201": "이 파일에 충돌이 있습니다.",
+  "Consider_adding_a_declare_modifier_to_this_class_6506": "이 클래스에 'declare' 한정자를 추가하는 것이 좋습니다.",
   "Construct_signature_return_types_0_and_1_are_incompatible_2203": "구문 시그니처 반환 형식 '{0}' 및 '{1}'이(가) 호환되지 않습니다.",
   "Construct_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type_7013": "반환 형식 주석이 없는 구문 시그니처에는 암시적으로 'any' 반환 형식이 포함됩니다.",
   "Construct_signatures_with_no_arguments_have_incompatible_return_types_0_and_1_2205": "인수가 없는 구문 시그니처의 반환 형식 '{0}' 및 '{1}'이(가) 호환되지 않습니다.",
@@ -413,16 +455,24 @@
   "Convert_to_type_only_export_1364": "형식 전용 내보내기로 변환",
   "Convert_to_type_only_import_1373": "형식 전용 가져오기로 변환",
   "Corrupted_locale_file_0_6051": "로캘 파일 {0}이(가) 손상되었습니다.",
+  "Could_not_convert_to_anonymous_function_95153": "익명 함수로 변환할 수 없습니다.",
+  "Could_not_convert_to_arrow_function_95151": "화살표 함수로 변환할 수 없습니다.",
+  "Could_not_convert_to_named_function_95152": "명명된 함수로 변환할 수 없습니다.",
+  "Could_not_determine_function_return_type_95150": "함수 반환 형식을 확인할 수 없습니다.",
   "Could_not_find_a_containing_arrow_function_95127": "포함하는 화살표 함수를 찾을 수 없습니다.",
   "Could_not_find_a_declaration_file_for_module_0_1_implicitly_has_an_any_type_7016": "모듈 '{0}'에 대한 선언 파일을 찾을 수 없습니다. '{1}'에는 암시적으로 'any' 형식이 포함됩니다.",
   "Could_not_find_convertible_access_expression_95140": "변환 가능한 액세스 식을 찾을 수 없습니다.",
   "Could_not_find_export_statement_95129": "export 문을 찾을 수 없습니다.",
   "Could_not_find_import_clause_95131": "import 절을 찾을 수 없습니다.",
   "Could_not_find_matching_access_expressions_95141": "일치하는 액세스 식을 찾을 수 없습니다.",
+  "Could_not_find_name_0_Did_you_mean_1_2570": "'{0}' 이름을 찾을 수 없습니다. '{1}'을(를) 사용하시겠습니까?",
   "Could_not_find_namespace_import_or_named_imports_95132": "네임스페이스 가져오기 또는 명명된 가져오기를 찾을 수 없습니다.",
   "Could_not_find_property_for_which_to_generate_accessor_95135": "접근자를 생성할 속성을 찾을 수 없습니다.",
   "Could_not_resolve_the_path_0_with_the_extensions_Colon_1_6231": "{1} 확장이 포함된 '{0}' 경로를 확인할 수 없습니다.",
   "Could_not_write_file_0_Colon_1_5033": "'{0}' 파일을 쓸 수 없습니다. '{1}'.",
+  "Create_source_map_files_for_emitted_JavaScript_files_6694": "내보낸 JavaScript 파일의 소스 맵 파일을 만듭니다.",
+  "Create_sourcemaps_for_d_ts_files_6614": "d.ts 파일의 sourcemap을 만듭니다.",
+  "Creates_a_tsconfig_json_with_the_recommended_settings_in_the_working_directory_6926": "작업 디렉터리에 권장되는 설정을 사용하여 tsconfig.json을 만듭니다.",
   "DIRECTORY_6038": "디렉터리",
   "Declaration_augments_declaration_in_another_file_This_cannot_be_serialized_6232": "선언이 다른 파일의 선언을 확대합니다. 이 작업은 직렬화할 수 없습니다.",
   "Declaration_emit_for_this_file_requires_using_private_name_0_An_explicit_type_annotation_may_unblock_9005": "이 파일의 선언 내보내기에는 프라이빗 이름 '{0}'을(를) 사용해야 합니다. 명시적 형식 주석은 선언 내보내기를 차단 해제할 수 있습니다.",
@@ -430,6 +480,7 @@
   "Declaration_expected_1146": "선언이 필요합니다.",
   "Declaration_name_conflicts_with_built_in_global_identifier_0_2397": "선언 이름이 기본 제공 전역 ID '{0}'과(와) 충돌합니다.",
   "Declaration_or_statement_expected_1128": "선언 또는 문이 필요합니다.",
+  "Declaration_or_statement_expected_This_follows_a_block_of_statements_so_if_you_intended_to_write_a_d_2809": "선언 또는 문이 필요합니다. 이 '='은 문 블록을 따르므로 구조 파괴 할당을 작성하려는 경우 전체 할당을 괄호로 묶어야 할 수 있습니다.",
   "Declarations_with_definite_assignment_assertions_must_also_have_type_annotations_1264": "한정된 할당 어설션이 포함된 선언에는 형식 주석도 있어야 합니다.",
   "Declarations_with_initializers_cannot_also_have_definite_assignment_assertions_1263": "이니셜라이저가 포함된 선언에는 한정적 할당 어설션을 사용할 수 없습니다.",
   "Declare_a_private_field_named_0_90053": "'{0}'(이)라는 프라이빗 필드를 선언합니다.",
@@ -441,7 +492,11 @@
   "Declare_static_property_0_90027": "'{0}' 정적 속성 선언",
   "Decorators_are_not_valid_here_1206": "데코레이터는 여기에 사용할 수 없습니다.",
   "Decorators_cannot_be_applied_to_multiple_get_Slashset_accessors_of_the_same_name_1207": "동일한 이름의 여러 get/set 접근자에 데코레이터를 적용할 수 없습니다.",
+  "Decorators_may_not_be_applied_to_this_parameters_1433": "데코레이터는 '이' 매개 변수에 적용되지 않을 수 있습니다.",
+  "Decorators_must_precede_the_name_and_all_keywords_of_property_declarations_1436": "데코레이터는 속성 선언의 이름 및 모든 키워드 앞에 와야 합니다.",
   "Default_export_of_the_module_has_or_is_using_private_name_0_4082": "모듈의 기본 내보내기에서 프라이빗 이름 '{0}'을(를) 가지고 있거나 사용 중입니다.",
+  "Default_library_1424": "기본 라이브러리",
+  "Default_library_for_target_0_1425": "대상 '{0}'의 기본 라이브러리",
   "Definitions_of_the_following_identifiers_conflict_with_those_in_another_file_Colon_0_6200": "{0} 식별자의 정의가 다른 파일의 정의와 충돌합니다.",
   "Delete_all_unused_declarations_95024": "사용하지 않는 선언 모두 삭제",
   "Delete_all_unused_imports_95147": "사용하지 않는 가져오기 모두 삭제",
@@ -449,6 +504,7 @@
   "Deprecated_Use_jsxFactory_instead_Specify_the_object_invoked_for_createElement_when_targeting_react__6084": "[사용되지 않음] 대신 '--jsxFactory'를 사용합니다. 'react' JSX 내보내기를 대상으로 할 경우 createElement에 대해 호출되는 개체를 지정합니다.",
   "Deprecated_Use_outFile_instead_Concatenate_and_emit_output_to_single_file_6170": "[사용되지 않음] 대신 '--outFile'을 사용합니다. 출력을 연결하고 단일 파일로 내보냅니다.",
   "Deprecated_Use_skipLibCheck_instead_Skip_type_checking_of_default_library_declaration_files_6160": "[사용되지 않음] 대신 '--skipLibCheck'를 사용합니다. 기본 라이브러리 선언 파일의 형식 검사를 건너뜁니다.",
+  "Deprecated_setting_Use_outFile_instead_6677": "사용되지 않는 설정입니다. 대신 'outFile'을 사용하세요.",
   "Did_you_forget_to_use_await_2773": "'await' 사용을 잊으셨습니까?",
   "Did_you_mean_0_1369": "'{0}'을(를) 사용하시겠습니까?",
   "Did_you_mean_for_0_to_be_constrained_to_type_new_args_Colon_any_1_2735": "'{0}'을(를) 'new (...args: any[]) => {1}' 형식으로 제한하시겠습니까?",
@@ -459,12 +515,30 @@
   "Did_you_mean_to_use_new_with_this_expression_6213": "이 식에서 'new'를 사용하시겠습니까?",
   "Digit_expected_1124": "숫자가 필요합니다.",
   "Directory_0_does_not_exist_skipping_all_lookups_in_it_6148": "'{0}' 디렉터리가 없으므로 이 디렉터리에서 모든 조회를 건너뜁니다.",
+  "Disable_adding_use_strict_directives_in_emitted_JavaScript_files_6669": "내보낸 JavaScript 파일에서 'use strict' 지시문을 추가하지 않도록 설정합니다.",
   "Disable_checking_for_this_file_90018": "이 파일 확인을 사용하지 않도록 설정",
+  "Disable_emitting_comments_6688": "주석 내보내기 사용 안 함",
+  "Disable_emitting_declarations_that_have_internal_in_their_JSDoc_comments_6701": "JSDoc 주석에 '@internal'이 있는 선언을 내보내지 않도록 설정합니다.",
+  "Disable_emitting_files_from_a_compilation_6660": "Disable emitting files from a compilation.",
+  "Disable_emitting_files_if_any_type_checking_errors_are_reported_6662": "형식 검사 오류가 보고되면 파일을 내보내지 않도록 설정합니다.",
+  "Disable_erasing_const_enum_declarations_in_generated_code_6682": "생성된 코드에서 'const enum' 선언 지우기 사용 안 함",
+  "Disable_error_reporting_for_unreachable_code_6603": "연결할 수 없는 코드에 대한 오류 보고를 사용하지 않습니다.",
+  "Disable_error_reporting_for_unused_labels_6604": "사용하지 않은 레이블에 대한 오류 보고를 사용하지 않습니다.",
+  "Disable_generating_custom_helper_functions_like_extends_in_compiled_output_6661": "컴파일된 출력에서 '__extends'와 같은 사용자 지정 도우미 함수 생성을 사용하지 않도록 설정합니다.",
+  "Disable_including_any_library_files_including_the_default_lib_d_ts_6670": "기본 lib.d.ts를 비롯하여 모든 라이브러리 파일을 포함하지 않도록 설정합니다.",
   "Disable_loading_referenced_projects_6235": "참조된 프로젝트 로드를 사용하지 않습니다.",
+  "Disable_preferring_source_files_instead_of_declaration_files_when_referencing_composite_projects_6620": "복합 프로젝트를 참조할 때 선언 파일 대신 선호하는 소스 파일 비활성화",
+  "Disable_reporting_of_excess_property_errors_during_the_creation_of_object_literals_6702": "개체 리터럴을 만드는 동안에는 초과 속성 오류에 대한 보고를 사용하지 않습니다.",
+  "Disable_resolving_symlinks_to_their_realpath_This_correlates_to_the_same_flag_in_node_6683": "실제 경로의 symlink를 확인하지 않도록 설정합니다. 이는 노드의 동일한 플래그와 상관 관계가 있습니다.",
   "Disable_size_limitations_on_JavaScript_projects_6162": "JavaScript 프로젝트에 대한 크기 제한을 사용하지 않도록 설정합니다.",
   "Disable_solution_searching_for_this_project_6224": "이 프로젝트를 검색하는 솔루션을 사용하지 않도록 설정합니다.",
-  "Disable_strict_checking_of_generic_signatures_in_function_types_6185": "함수 형식의 제네릭 시그니처에 대한 엄격한 검사를 사용하지 않도록 설정합니다.",
+  "Disable_strict_checking_of_generic_signatures_in_function_types_6673": "함수 형식의 제네릭 시그니처에 대한 엄격한 검사를 사용하지 않도록 설정합니다.",
+  "Disable_the_type_acquisition_for_JavaScript_projects_6625": "JavaScript 프로젝트의 형식 인식을 사용하지 않습니다.",
+  "Disable_truncating_types_in_error_messages_6663": "오류 메시지에서 잘림 유형을 사용하지 않도록 설정합니다.",
   "Disable_use_of_source_files_instead_of_declaration_files_from_referenced_projects_6221": "참조된 프로젝트의 선언 파일 대신 소스 파일을 사용하지 않도록 설정합니다.",
+  "Disable_wiping_the_console_in_watch_mode_6684": "감시 모드에서 콘솔 초기화를 사용하지 않습니다.",
+  "Disables_inference_for_type_acquisition_by_looking_at_filenames_in_a_project_6616": "프로젝트에서 파일 이름을 확인하여 형식 인식에 대한 유추를 사용하지 않습니다.",
+  "Disallow_import_s_require_s_or_reference_s_from_expanding_the_number_of_files_TypeScript_should_add__6672": "TypeScript가 프로젝트에 추가해야 하는 파일 수를 'import', 'require' 또는 '<reference>'에서 확장하지 못하도록 합니다.",
   "Disallow_inconsistently_cased_references_to_the_same_file_6078": "동일한 파일에 대해 대/소문자를 일관되지 않게 사용한 참조를 허용하지 않습니다.",
   "Do_not_add_triple_slash_references_or_imported_modules_to_the_list_of_compiled_files_6159": "컴파일된 파일 목록에 삼중 슬래시 참조 또는 가져온 모듈을 추가하지 않습니다.",
   "Do_not_emit_comments_to_output_6009": "주석을 출력에 내보내지 마세요.",
@@ -483,31 +557,48 @@
   "Duplicate_identifier_0_2300": "'{0}' 식별자가 중복되었습니다.",
   "Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module_2441": "'{0}' 식별자가 중복되었습니다. 컴파일러는 모듈의 최상위 범위에 이름 '{1}'을(를) 예약합니다.",
   "Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module_containing_async_func_2529": "'{0}' 식별자가 중복되었습니다. 컴파일러는 비동기 함수를 포함하는 모듈의 최상위 범위에 '{1}' 이름을 예약합니다.",
+  "Duplicate_identifier_0_Compiler_reserves_name_1_when_emitting_super_references_in_static_initializer_2818": "중복 식별자 '{0}'입니다. 컴파일러는 정적 이니셜라이저에서 'super' 참조를 내보낸 경우 '{1}' 이름을 예약합니다.",
   "Duplicate_identifier_0_Compiler_uses_declaration_1_to_support_async_functions_2520": "중복 식별자 '{0}'입니다. 컴파일러는 '{1}' 선언을 사용하여 비동기 함수를 지원합니다.",
+  "Duplicate_identifier_0_Static_and_instance_elements_cannot_share_the_same_private_name_2804": "'{0}' 식별자가 중복되었습니다. 정적 요소와 인스턴스 요소는 같은 프라이빗 이름을 공유할 수 없습니다.",
   "Duplicate_identifier_arguments_Compiler_uses_arguments_to_initialize_rest_parameters_2396": "중복 식별자 'arguments'입니다. 컴파일러는 'arguments'를 사용해서 rest 매개 변수를 초기화합니다.",
   "Duplicate_identifier_newTarget_Compiler_uses_variable_declaration_newTarget_to_capture_new_target_me_2543": "'_newTarget' 식별자가 중복되었습니다. 컴파일러는 변수 선언 '_newTarget'을 사용하여 'new.target' 메타 속성 참조를 캡처합니다.",
   "Duplicate_identifier_super_Compiler_uses_super_to_capture_base_class_reference_2401": "중복 식별자 '_super'입니다. 컴파일러는 '_super'를 사용해서 기본 클래스 참조를 캡처합니다.",
   "Duplicate_identifier_this_Compiler_uses_variable_declaration_this_to_capture_this_reference_2399": "중복 식별자 '_this'입니다. 컴파일러는 변수 선언 '_this'를 사용해서 'this' 참조를 캡처합니다.",
+  "Duplicate_index_signature_for_type_0_2374": "'{0}' 형식에 대한 인덱스 시그니처가 중복되었습니다.",
   "Duplicate_label_0_1114": "중복된 레이블 '{0}'입니다.",
-  "Duplicate_number_index_signature_2375": "중복 숫자 인덱스 시그니처입니다.",
   "Duplicate_property_0_2718": "중복 속성 '{0}'입니다.",
-  "Duplicate_string_index_signature_2374": "중복 문자열 인덱스 시그니처입니다.",
   "Dynamic_import_cannot_have_type_arguments_1326": "동적 가져오기에는 형식 인수를 사용할 수 없습니다.",
   "Dynamic_import_must_have_one_specifier_as_an_argument_1324": "동적 가져오기에는 지정자 하나를 인수로 사용해야 합니다.",
   "Dynamic_import_s_specifier_must_be_of_type_string_but_here_has_type_0_7036": "동적 가져오기의 지정자는 'string' 형식이어야 하지만 여기에서 형식은 '{0}'입니다.",
   "Dynamic_imports_are_only_supported_when_the_module_flag_is_set_to_es2020_esnext_commonjs_amd_system__1323": "동적 가져오기는 '--module' 플래그가 'es2020', 'commonjs', 'amd', 'system' 또는 'umd'로 설정된 경우에만 지원됩니다.",
   "Each_member_of_the_union_type_0_has_construct_signatures_but_none_of_those_signatures_are_compatible_2762": "공용 구조체 형식 '{0}'의 각 멤버에 구문 시그니처가 있지만, 해당 시그니처는 서로 호환되지 않습니다.",
   "Each_member_of_the_union_type_0_has_signatures_but_none_of_those_signatures_are_compatible_with_each_2758": "공용 구조체 형식 '{0}'의 각 멤버에 시그니처가 있지만, 해당 시그니처는 서로 호환되지 않습니다.",
-  "Element_at_index_0_is_variadic_in_one_type_but_not_in_the_other_2622": "인덱스 {0}의 요소는 한 형식에서는 가변 인자이지만, 다른 형식에서는 가변 인자가 아닙니다.",
+  "Editor_Support_6249": "편집기 지원",
   "Element_implicitly_has_an_any_type_because_expression_of_type_0_can_t_be_used_to_index_type_1_7053": "'{0}' 형식의 식을 '{1}' 인덱스 형식에 사용할 수 없으므로 요소에 암시적으로 'any' 형식이 있습니다.",
   "Element_implicitly_has_an_any_type_because_index_expression_is_not_of_type_number_7015": "인덱스 식이 'number' 형식이 아니므로 요소에 암시적으로 'any' 형식이 있습니다.",
   "Element_implicitly_has_an_any_type_because_type_0_has_no_index_signature_7017": "'{0}' 형식에 인덱스 시그니처가 없으므로 요소에 암시적으로 'any' 형식이 있습니다.",
   "Element_implicitly_has_an_any_type_because_type_0_has_no_index_signature_Did_you_mean_to_call_1_7052": "'{0}' 형식에 인덱스 시그니처가 없으므로 요소에 암시적으로 'any' 형식이 있습니다. '{1}'을(를) 호출하시겠습니까?",
-  "Emit_a_UTF_8_Byte_Order_Mark_BOM_in_the_beginning_of_output_files_6164": "출력 파일의 시작에서 UTF-8 BOM(바이트 순서 표시)을 내보냅니다.",
+  "Emit_6246": "방출",
+  "Emit_ECMAScript_standard_compliant_class_fields_6712": "ECMAScript 표준 규격 클래스 필드를 내보냅니다.",
+  "Emit_a_UTF_8_Byte_Order_Mark_BOM_in_the_beginning_of_output_files_6622": "출력 파일의 시작에서 UTF-8 BOM(바이트 순서 표시)을 내보냅니다.",
   "Emit_a_single_file_with_source_maps_instead_of_having_a_separate_file_6151": "별도의 파일을 사용하는 대신 소스 맵과 함께 단일 파일을 내보냅니다.",
+  "Emit_a_v8_CPU_profile_of_the_compiler_run_for_debugging_6638": "디버깅을 위해 실행된 컴파일러의 v8 CPU 프로필을 내보냅니다.",
+  "Emit_additional_JavaScript_to_ease_support_for_importing_CommonJS_modules_This_enables_allowSyntheti_6626": "CommonJS 모듈 가져오기를 쉽게 지원하기 위해 추가 JavaScript를 내보냅니다. 이렇게 하면 형식 호환성을 위해 'allowSyntheticDefaultImports'를 사용할 수 있습니다.",
   "Emit_class_fields_with_Define_instead_of_Set_6222": "Set 대신 Define을 사용하여 클래스 필드를 내보냅니다.",
+  "Emit_design_type_metadata_for_decorated_declarations_in_source_files_6624": "소스 파일에서 데코레이트된 선언의 디자인 형식 메타데이터를 내보냅니다.",
+  "Emit_more_compliant_but_verbose_and_less_performant_JavaScript_for_iteration_6621": "반복을 위해 규격에 더 맞지만 장황하고 성능이 떨어지는 JavaScript를 내보냅니다.",
   "Emit_the_source_alongside_the_sourcemaps_within_a_single_file_requires_inlineSourceMap_or_sourceMap__6152": "단일 파일 내에서 소스 맵과 함께 소스를 내보냅니다. '--inlineSourceMap' 또는 '--sourceMap'을 설정해야 합니다.",
   "Enable_all_strict_type_checking_options_6180": "엄격한 형식 검사 옵션을 모두 사용하도록 설정합니다.",
+  "Enable_color_and_formatting_in_TypeScript_s_output_to_make_compiler_errors_easier_to_read_6685": "Enable color and formatting in TypeScript's output to make compiler errors easier to read",
+  "Enable_constraints_that_allow_a_TypeScript_project_to_be_used_with_project_references_6611": "TypeScript 프로젝트를 프로젝트 참조와 함께 사용할 수 있는 제약 조건을 사용합니다.",
+  "Enable_error_reporting_for_codepaths_that_do_not_explicitly_return_in_a_function_6667": "함수에서 명시적으로 반환되지 않은 코드 경로에 대한 오류 보고를 사용합니다.",
+  "Enable_error_reporting_for_expressions_and_declarations_with_an_implied_any_type_6665": "암시된 'any' 형식이 있는 식 및 선언에 대해 보고하는 오류를 사용 설정합니다.",
+  "Enable_error_reporting_for_fallthrough_cases_in_switch_statements_6664": "switch 문에서 폴스루 사례에 대한 오류 보고를 활성화합니다.",
+  "Enable_error_reporting_in_type_checked_JavaScript_files_6609": "형식이 확인된 JavaScript 파일에서 오류 보고를 사용하도록 설정합니다.",
+  "Enable_error_reporting_when_a_local_variables_aren_t_read_6675": "지역 변수를 읽을 수 없을 때 오류 보고를 사용합니다.",
+  "Enable_error_reporting_when_this_is_given_the_type_any_6668": "'this'에 'any' 형식이 지정되면 오류 보고를 사용합니다.",
+  "Enable_experimental_support_for_TC39_stage_2_draft_decorators_6630": "TC39 2단계 초안 데코레이터에 대한 실험적 지원을 사용합니다.",
+  "Enable_importing_json_files_6689": ".json 파일 가져오기를 사용합니다.",
   "Enable_incremental_compilation_6378": "증분 컴파일을 사용합니다.",
   "Enable_project_compilation_6302": "프로젝트 컴파일을 사용하도록 설정",
   "Enable_strict_bind_call_and_apply_methods_on_functions_6214": "함수에서 strict 'bind', 'call' 및 'apply' 메서드를 사용하도록 설정합니다.",
@@ -517,11 +608,20 @@
   "Enable_the_experimentalDecorators_option_in_your_configuration_file_95074": "구성 파일에서 'experimentalDecorators' 옵션을 사용하도록 설정합니다.",
   "Enable_the_jsx_flag_in_your_configuration_file_95088": "구성 파일에서 '--jsx' 플래그를 사용하도록 설정합니다.",
   "Enable_tracing_of_the_name_resolution_process_6085": "이름 확인 프로세스 추적을 사용하도록 설정하세요.",
-  "Enable_verbose_logging_6366": "자세한 정보 로깅 사용",
+  "Enable_verbose_logging_6713": "자세한 정보 로깅 사용",
   "Enables_emit_interoperability_between_CommonJS_and_ES_Modules_via_creation_of_namespace_objects_for__7037": "모든 가져오기에 대한 네임스페이스 개체를 만들어 CommonJS 및 ES 모듈 간의 내보내기 상호 운용성을 사용하도록 설정합니다. 'allowSyntheticDefaultImports'를 의미합니다.",
   "Enables_experimental_support_for_ES7_async_functions_6068": "ES7 비동기 함수에 대해 실험적 지원을 사용합니다.",
   "Enables_experimental_support_for_ES7_decorators_6065": "ES7 데코레이터에 대해 실험적 지원을 사용합니다.",
   "Enables_experimental_support_for_emitting_type_metadata_for_decorators_6066": "데코레이터에 대한 형식 메타데이터를 내보내기 위해 실험적 지원을 사용합니다.",
+  "Enforces_using_indexed_accessors_for_keys_declared_using_an_indexed_type_6671": "인덱싱된 형식을 사용하여 선언된 키에 인덱싱된 접근자를 사용합니다.",
+  "Ensure_overriding_members_in_derived_classes_are_marked_with_an_override_modifier_6666": "파생 클래스의 멤버 재정의가 재정의 한정자로 표시되어 있는지 확인합니다.",
+  "Ensure_that_casing_is_correct_in_imports_6637": "가져오기에서 대/소문자가 올바른지 확인합니다.",
+  "Ensure_that_each_file_can_be_safely_transpiled_without_relying_on_other_imports_6645": "다른 가져오기를 사용하지 않고 각 파일을 안전하게 변환할 수 있는지 확인합니다.",
+  "Ensure_use_strict_is_always_emitted_6605": "'use strict'를 항상 내보내고 있는지 확인합니다.",
+  "Entry_point_for_implicit_type_library_0_1420": "암시적 형식 라이브러리 '{0}'의 진입점",
+  "Entry_point_for_implicit_type_library_0_with_packageId_1_1421": "packageId가 '{1}'인 암시적 형식 라이브러리 '{0}'의 진입점",
+  "Entry_point_of_type_library_0_specified_in_compilerOptions_1417": "compilerOptions에 지정된 형식 라이브러리 '{0}'의 진입점",
+  "Entry_point_of_type_library_0_specified_in_compilerOptions_with_packageId_1_1418": "packageId가 '{1}'인 compilerOptions에 지정된 형식 라이브러리 '{0}'의 진입점",
   "Enum_0_used_before_its_declaration_2450": "선언 전에 사용된 '{0}' 열거형입니다.",
   "Enum_declarations_can_only_merge_with_namespace_or_other_enum_declarations_2567": "열거형 선언은 네임스페이스 또는 다른 열거형 선언과만 병합할 수 있습니다.",
   "Enum_declarations_must_all_be_const_or_non_const_2473": "열거형 선언은 모두 const 또는 비const여야 합니다.",
@@ -535,15 +635,13 @@
   "Expected_0_1_type_arguments_provide_these_with_an_extends_tag_8027": "'@extends' 태그로 제공하는 예상되는 {0}-{1} 형식 인수입니다.",
   "Expected_0_arguments_but_got_1_2554": "{0}개의 인수가 필요한데 {1}개를 가져왔습니다.",
   "Expected_0_arguments_but_got_1_Did_you_forget_to_include_void_in_your_type_argument_to_Promise_2794": "{0}개 인수가 필요한데 {1}개를 가져왔습니다. 'void'를 'Promise'의 형식 인수에 포함하는 것을 잊으셨습니까?",
-  "Expected_0_arguments_but_got_1_or_more_2556": "{0}개의 인수가 필요한데 {1}개 이상을 가져왔습니다.",
   "Expected_0_type_arguments_but_got_1_2558": "{0}개의 형식 인수가 필요한데 {1}개를 가져왔습니다.",
   "Expected_0_type_arguments_provide_these_with_an_extends_tag_8026": "'@extends' 태그로 제공하는 예상되는 {0} 형식 인수입니다.",
   "Expected_at_least_0_arguments_but_got_1_2555": "최소 {0}개의 인수가 필요한데 {1}개를 가져왔습니다.",
-  "Expected_at_least_0_arguments_but_got_1_or_more_2557": "최소 {0}개의 인수가 필요한데 {1}개 이상을 가져왔습니다.",
   "Expected_corresponding_JSX_closing_tag_for_0_17002": "'{0}'에 해당하는 JSX 닫는 태그가 필요합니다.",
   "Expected_corresponding_closing_tag_for_JSX_fragment_17015": "JSX 조각에 닫는 태그가 필요합니다.",
+  "Expected_for_property_initializer_1442": "속성 이니셜라이저에는 '='가 필요합니다.",
   "Expected_type_of_0_field_in_package_json_to_be_1_got_2_6105": "'package.json'의 '{0}' 필드에 '{1}' 형식이 필요한데 '{2}'을(를) 얻었습니다.",
-  "Experimental_Options_6177": "실험적 옵션",
   "Experimental_support_for_decorators_is_a_feature_that_is_subject_to_change_in_a_future_release_Set_t_1219": "데코레이터에 대한 실험적 지원 기능은 이후 릴리스에서 변경될 수 있습니다. 이 경고를 제거하려면 'tsconfig' 또는 'jsconfig'에서 'experimentalDecorators' 옵션을 설정합니다.",
   "Explicitly_specified_module_resolution_kind_Colon_0_6087": "명시적으로 지정된 모듈 확인 종류 '{0}'입니다.",
   "Exponentiation_cannot_be_performed_on_bigint_values_unless_the_target_option_is_set_to_es2016_or_lat_2791": "'target' 옵션이 'es2016' 이상으로 설정되어 있지 않으면 'bigint' 값에 지수화를 수행할 수 없습니다.",
@@ -554,12 +652,14 @@
   "Exported_external_package_typings_file_0_is_not_a_module_Please_contact_the_package_author_to_update_2656": "내보낸 외부 패키지 입력 항목 파일 '{0}'은(는) 모듈이 아닙니다. 패키지 작성자에게 문의하여 패키지 정의를 업데이트하세요.",
   "Exported_external_package_typings_file_cannot_contain_tripleslash_references_Please_contact_the_pack_2654": "내보낸 외부 패키지 입력 항목 파일에는 삼중 슬래시 참조가 포함될 수 없습니다. 패키지 작성자에게 문의하여 패키지 정의를 업데이트하세요.",
   "Exported_type_alias_0_has_or_is_using_private_name_1_4081": "내보낸 형식 별칭 '{0}'은(는) '{1}' 프라이빗 이름을 포함하거나 사용 중입니다.",
+  "Exported_type_alias_0_has_or_is_using_private_name_1_from_module_2_4084": "내보낸 형식 별칭 '{0}'이(가) 모듈 {2}의 프라이빗 이름 '{1}'을(를) 포함하거나 사용하고 있습니다.",
   "Exported_variable_0_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4023": "내보낸 변수 '{0}'이(가) 외부 모듈 {2}의 '{1}' 이름을 가지고 있거나 사용 중이지만 명명할 수 없습니다.",
   "Exported_variable_0_has_or_is_using_name_1_from_private_module_2_4024": "내보낸 변수 '{0}'이(가) 프라이빗 모듈 '{2}'의 '{1}' 이름을 가지고 있거나 사용 중입니다.",
   "Exported_variable_0_has_or_is_using_private_name_1_4025": "내보낸 변수 '{0}'이(가) 프라이빗 이름 '{1}'을(를) 가지고 있거나 사용 중입니다.",
   "Exports_and_export_assignments_are_not_permitted_in_module_augmentations_2666": "내보내기 및 내보내기 할당는 모듈 확대에서 허용되지 않습니다.",
   "Expression_expected_1109": "식이 필요합니다.",
   "Expression_or_comma_expected_1137": "식 또는 쉼표가 필요합니다.",
+  "Expression_produces_a_tuple_type_that_is_too_large_to_represent_2800": "식이 너무 커서 표시할 수 없는 튜플 형식을 생성합니다.",
   "Expression_produces_a_union_type_that_is_too_complex_to_represent_2590": "식에서는 너무 복잡해서 표시할 수 없는 공용 구조체 형식을 생성합니다.",
   "Expression_resolves_to_super_that_compiler_uses_to_capture_base_class_reference_2402": "컴파일러가 기본 클래스 참조를 캡처하기 위해 사용하는 '_super'로 식이 확인됩니다.",
   "Expression_resolves_to_variable_declaration_0_that_compiler_uses_to_support_async_functions_2521": "컴파일러가 비동기 함수를 지원하기 위해 사용하는 변수 선언 '{0}'(으)로 식이 확인됩니다.",
@@ -579,7 +679,9 @@
   "Failed_to_parse_file_0_Colon_1_5014": "'{0}' 파일 구문 분석 실패: {1}.",
   "Fallthrough_case_in_switch_7029": "switch에 Fallthrough case가 있습니다.",
   "File_0_does_not_exist_6096": "'{0}' 파일이 없습니다.",
+  "File_0_does_not_exist_according_to_earlier_cached_lookups_6240": "이전 캐시된 검색에 따라 '{0}' 파일이 존재하지 않습니다.",
   "File_0_exist_use_it_as_a_name_resolution_result_6097": "'{0}' 파일이 있습니다. 이 파일을 이름 확인 결과로 사용하세요.",
+  "File_0_exists_according_to_earlier_cached_lookups_6239": "파일 '{0}'은(는) 이전 캐시된 검색에 따라 존재합니다.",
   "File_0_has_an_unsupported_extension_The_only_supported_extensions_are_1_6054": "'{0}' 파일의 확장명이 지원되지 않습니다. 지원되는 확장명은 {1}뿐입니다.",
   "File_0_has_an_unsupported_extension_so_skipping_it_6081": "'{0}' 파일은 확장명이 지원되지 않으므로 건너뜁니다.",
   "File_0_is_a_JavaScript_file_Did_you_mean_to_enable_the_allowJs_option_6504": "'{0}' 파일은 JavaScript 파일입니다. 'allowJs' 옵션을 사용하도록 설정하시겠습니까?",
@@ -587,16 +689,32 @@
   "File_0_is_not_listed_within_the_file_list_of_project_1_Projects_must_list_all_files_or_use_an_includ_6307": "'{0}' 파일이 '{1}' 프로젝트의 파일 목록에 나열되지 않습니다. 프로젝트는 모든 파일을 나열하거나 'include' 패턴을 사용해야 합니다.",
   "File_0_is_not_under_rootDir_1_rootDir_is_expected_to_contain_all_source_files_6059": "'{0}' 파일이 'rootDir' '{1}' 아래에 있지 않습니다. 'rootDir'에는 모든 소스 파일이 포함되어 있어야 합니다.",
   "File_0_not_found_6053": "파일 '{0}'을(를) 찾을 수 없습니다.",
+  "File_Management_6245": "파일 관리",
   "File_change_detected_Starting_incremental_compilation_6032": "파일 변경이 검색되었습니다. 증분 컴파일을 시작하는 중...",
   "File_is_a_CommonJS_module_it_may_be_converted_to_an_ES6_module_80001": "파일이 CommonJS 모듈입니다. ES6 모듈로 변환될 수 있습니다.",
+  "File_is_default_library_for_target_specified_here_1426": "파일은 여기에 지정된 대상의 기본 라이브러리입니다.",
+  "File_is_entry_point_of_type_library_specified_here_1419": "파일은 여기에 지정된 형식 라이브러리의 진입점입니다.",
+  "File_is_included_via_import_here_1399": "파일은 여기에 가져오기를 통해 포함됩니다.",
+  "File_is_included_via_library_reference_here_1406": "파일은 여기에 라이브러리 참조를 통해 포함됩니다.",
+  "File_is_included_via_reference_here_1401": "파일은 여기에 참조를 통해 포함됩니다.",
+  "File_is_included_via_type_library_reference_here_1404": "파일은 여기에 형식 라이브러리 참조를 통해 포함됩니다.",
+  "File_is_library_specified_here_1423": "파일은 여기에 지정된 라이브러리입니다.",
+  "File_is_matched_by_files_list_specified_here_1410": "파일은 여기에 지정된 'files' 목록으로 일치됩니다.",
+  "File_is_matched_by_include_pattern_specified_here_1408": "파일은 여기에 지정된 포함 패턴으로 일치됩니다.",
+  "File_is_output_from_referenced_project_specified_here_1413": "파일은 여기에 지정된 참조 프로젝트의 출력입니다.",
+  "File_is_output_of_project_reference_source_0_1428": "파일은 프로젝트 참조 소스 '{0}'의 출력입니다.",
+  "File_is_source_from_referenced_project_specified_here_1416": "파일은 여기에 지정된 참조된 프로젝트의 소스입니다.",
   "File_name_0_differs_from_already_included_file_name_1_only_in_casing_1149": "'{0}' 파일 이름은 이미 포함된 '{1}' 파일 이름과 대/소문자만 다릅니다.",
   "File_name_0_has_a_1_extension_stripping_it_6132": "파일 이름 '{0}'에 '{1}' 확장명이 있어 제거하는 중입니다.",
+  "File_redirects_to_file_0_1429": "파일은 '{0}' 파일로 리디렉션됩니다.",
   "File_specification_cannot_contain_a_parent_directory_that_appears_after_a_recursive_directory_wildca_5065": "파일 사양은 재귀 디렉터리 와일드카드('**') 뒤에 나타나는 부모 디렉터리('..')를 포함할 수 없습니다. '{0}'.",
   "File_specification_cannot_end_in_a_recursive_directory_wildcard_Asterisk_Asterisk_Colon_0_5010": "파일 사양은 재귀 디렉터리 와일드카드('**')로 끝날 수 없습니다. '{0}'.",
+  "Filters_results_from_the_include_option_6627": "'include' 옵션의 결과를 필터링합니다.",
   "Fix_all_detected_spelling_errors_95026": "검색된 맞춤법 오류 모두 수정",
   "Fix_all_expressions_possibly_missing_await_95085": "'await'가 누락되었을 수 있는 모든 식 수정",
   "Fix_all_implicit_this_errors_95107": "모든 암시적 'this' 오류 수정",
   "Fix_all_incorrect_return_type_of_an_async_functions_90037": "비동기 함수의 모든 잘못된 반환 형식 수정",
+  "For_await_loops_cannot_be_used_inside_a_class_static_block_18038": "'For await' 루프는 클래스 정적 블록 내에서 사용할 수 없습니다.",
   "Found_0_errors_6217": "{0}개 오류가 발견되었습니다.",
   "Found_0_errors_Watching_for_file_changes_6194": "{0}개 오류가 발견되었습니다. 파일이 변경되었는지 확인하는 중입니다.",
   "Found_1_error_6216": "1개 오류가 발견되었습니다.",
@@ -610,11 +728,14 @@
   "Function_implementation_name_must_be_0_2389": "함수 구현 이름이 '{0}'이어야 합니다.",
   "Function_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_ref_7024": "반환 형식 주석이 없고 반환 식 중 하나에서 직간접적으로 참조되므로 함수에는 암시적으로 반환 형식 'any'가 포함됩니다.",
   "Function_lacks_ending_return_statement_and_return_type_does_not_include_undefined_2366": "함수에 끝 return 문이 없으며 반환 형식에 'undefined'가 포함되지 않습니다.",
+  "Function_not_implemented_95159": "함수가 구현되지 않았습니다.",
   "Function_overload_must_be_static_2387": "함수 오버로드는 정적이어야 합니다.",
   "Function_overload_must_not_be_static_2388": "함수 오버로드는 정적이 아니어야 합니다.",
   "Function_type_notation_must_be_parenthesized_when_used_in_a_union_type_1385": "공용 구조체 형식에 사용되는 경우 함수 형식 표기법을 괄호로 묶어야 합니다.",
   "Function_type_notation_must_be_parenthesized_when_used_in_an_intersection_type_1387": "교집합 형식에 사용되는 경우 함수 형식 표기법을 괄호로 묶어야 합니다.",
   "Function_type_which_lacks_return_type_annotation_implicitly_has_an_0_return_type_7014": "반환 형식 주석이 없는 함수 형식에는 암시적으로 '{0}' 반환 형식이 포함됩니다.",
+  "Function_with_bodies_can_only_merge_with_classes_that_are_ambient_2814": "본문이 있는 함수는 앰비언트 클래스하고만 병합할 수 있습니다.",
+  "Generate_d_ts_files_from_TypeScript_and_JavaScript_files_in_your_project_6612": "프로젝트의 TypeScript 및 JavaScript 파일에서 .d.ts 파일을 생성합니다.",
   "Generate_get_and_set_accessors_95046": "'get' 및 'set' 접근자 생성",
   "Generate_get_and_set_accessors_for_all_overriding_properties_95119": "모든 재정의 속성에 대한 'get' 및 'set' 접근자를 생성합니다.",
   "Generates_a_CPU_profile_6223": "CPU 프로필을 생성합니다.",
@@ -627,13 +748,13 @@
   "Generators_are_only_available_when_targeting_ECMAScript_2015_or_higher_1220": "생성기는 ECMAScript 2015 이상을 대상으로 하는 경우에만 사용할 수 있습니다.",
   "Generic_type_0_requires_1_type_argument_s_2314": "'{0}' 제네릭 형식에 {1} 형식 인수가 필요합니다.",
   "Generic_type_0_requires_between_1_and_2_type_arguments_2707": "제네릭 형식 '{0}'에 {1} 및 {2} 사이의 형식 인수가 필요합니다.",
-  "Getter_and_setter_accessors_do_not_agree_in_visibility_2379": "Getter 및 Setter 접근자의 표시 유형이 다릅니다.",
   "Global_module_exports_may_only_appear_at_top_level_1316": "전역 모듈 내보내기는 최상위 수준에만 나올 수 있습니다.",
   "Global_module_exports_may_only_appear_in_declaration_files_1315": "전역 모듈 내보내기는 선언 파일에만 나올 수 있습니다.",
   "Global_module_exports_may_only_appear_in_module_files_1314": "전역 모듈 내보내기는 모듈 파일에만 나올 수 있습니다.",
   "Global_type_0_must_be_a_class_or_interface_type_2316": "전역 형식 '{0}'은 클래스 또는 인터페이스 형식이어야 합니다.",
   "Global_type_0_must_have_1_type_parameter_s_2317": "전역 형식 '{0}'에는 {1} 형식 매개 변수를 사용해야 합니다.",
   "Have_recompiles_in_incremental_and_watch_assume_that_changes_within_a_file_will_only_affect_files_di_6384": "'--incremental' 및 '--watch'의 다시 컴파일에서 파일 내 변경 내용은 파일에 따라 직접 파일에만 영향을 준다고 가정하도록 합니다.",
+  "Have_recompiles_in_projects_that_use_incremental_and_watch_mode_assume_that_changes_within_a_file_wi_6606": "'incremental' 및 'watch' 모드를 사용하는 프로젝트의 다시 컴파일에서 파일 내 변경 내용은 파일에 따라 파일에만 직접적인 영향을 준다고 가정하게 합니다.",
   "Hexadecimal_digit_expected_1125": "16진수가 필요합니다.",
   "Identifier_expected_0_is_a_reserved_word_at_the_top_level_of_a_module_1262": "식별자가 필요합니다. '{0}'은(는) 모듈의 최상위 수준에 있는 예약어입니다.",
   "Identifier_expected_0_is_a_reserved_word_in_strict_mode_1212": "식별자가 필요합니다. '{0}'은(는) strict 모드의 예약어입니다.",
@@ -644,6 +765,7 @@
   "Identifier_expected_esModule_is_reserved_as_an_exported_marker_when_transforming_ECMAScript_modules_1216": "식별자가 필요합니다. '__esModule'은 ECMAScript 모듈을 변환할 때 내보낸 표식으로 예약되어 있습니다.",
   "If_the_0_package_actually_exposes_this_module_consider_sending_a_pull_request_to_amend_https_Colon_S_7040": "'{0}' 패키지가 이 모듈을 실제로 공개하는 경우 'https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/{1}' 수정을 위한 끌어오기 요청을 보내는 것이 좋습니다.",
   "Ignore_this_error_message_90019": "이 오류 메시지 무시",
+  "Ignoring_tsconfig_json_compiles_the_specified_files_with_default_compiler_options_6924": "tsconfig.json을 무시하고 기본 컴파일러 옵션을 사용하여 지정된 파일을 컴파일합니다.",
   "Implement_all_inherited_abstract_classes_95040": "상속된 추상 클래스 모두 구현",
   "Implement_all_unimplemented_interfaces_95032": "구현되지 않은 인터페이스 모두 구현",
   "Implement_inherited_abstract_class_90007": "상속된 추상 클래스 구현",
@@ -660,14 +782,23 @@
   "Import_may_be_converted_to_a_default_import_80003": "가져오기가 기본 가져오기로 변환될 수 있습니다.",
   "Import_name_cannot_be_0_2438": "가져오기 이름은 '{0}'일 수 없습니다.",
   "Import_or_export_declaration_in_an_ambient_module_declaration_cannot_reference_module_through_relati_2439": "앰비언트 모듈 선언의 가져오기 또는 내보내기 선언은 상대적 모듈 이름을 통해 모듈을 참조할 수 없습니다.",
+  "Imported_via_0_from_file_1_1393": "'{1}' 파일에서 {0}을(를) 통해 가져왔습니다.",
+  "Imported_via_0_from_file_1_to_import_importHelpers_as_specified_in_compilerOptions_1395": "compilerOptions에 지정된 대로 'importHelpers'를 가져오기 위해 '{1}' 파일에서 {0}을(를) 통해 가져왔습니다.",
+  "Imported_via_0_from_file_1_to_import_jsx_and_jsxs_factory_functions_1397": "'jsx' 및 'jsxs' 팩터리 함수를 가져오기 위해 '{1}' 파일에서 {0}을(를) 통해 가져왔습니다.",
+  "Imported_via_0_from_file_1_with_packageId_2_1394": "packageId가 '{2}'인 '{1}' 파일에서 {0}을(를) 통해 가져왔습니다.",
+  "Imported_via_0_from_file_1_with_packageId_2_to_import_importHelpers_as_specified_in_compilerOptions_1396": "compilerOptions에 지정된 대로 'importHelpers'를 가져오기 위해 packageId가 '{2}'인 '{1}' 파일에서 {0}을(를) 통해 가져왔습니다.",
+  "Imported_via_0_from_file_1_with_packageId_2_to_import_jsx_and_jsxs_factory_functions_1398": "'jsx' 및 'jsxs' 팩터리 함수를 가져오기 위해 packageId가 '{2}'인 '{1}' 파일에서 {0}을(를) 통해 가져왔습니다.",
   "Imports_are_not_permitted_in_module_augmentations_Consider_moving_them_to_the_enclosing_external_mod_2667": "가져오기는 모듈 확대에서 허용되지 않습니다. 내보내기를 바깥쪽 외부 모듈로 이동하세요.",
   "In_ambient_enum_declarations_member_initializer_must_be_constant_expression_1066": "앰비언트 열거형 선언에서 멤버 이니셜라이저는 상수 식이어야 합니다.",
   "In_an_enum_with_multiple_declarations_only_one_declaration_can_omit_an_initializer_for_its_first_enu_2432": "다중 선언이 포함된 열거형에서는 하나의 선언만 첫 번째 열거형 요소에 대한 이니셜라이저를 생략할 수 있습니다.",
+  "Include_a_list_of_files_This_does_not_support_glob_patterns_as_opposed_to_include_6635": "파일 목록을 포함합니다. 이는 'include'가 아닌 GLOB 패턴을 지원하지 않습니다.",
   "Include_modules_imported_with_json_extension_6197": "'.json' 확장을 사용하여 가져온 모듈을 포함합니다.",
-  "Include_undefined_in_index_signature_results_6800": "인덱스 시그니처 결과에 '정의되지 않음' 포함",
+  "Include_source_code_in_the_sourcemaps_inside_the_emitted_JavaScript_6644": "내보낸 JavaScript 내 sourcemap에 소스 코드를 포함합니다.",
+  "Include_sourcemap_files_inside_the_emitted_JavaScript_6643": "내보낸 JavaScript 내에 sourcemap 파일을 포함합니다.",
+  "Include_undefined_in_index_signature_results_6716": "인덱스 시그니처 결과에 '정의되지 않음' 포함",
+  "Including_watch_w_will_start_watching_the_current_project_for_the_file_changes_Once_set_you_can_conf_6914": "--watch를 포함하면 -w는 파일 변경 내용에 대한 현재 프로젝트 감시를 시작합니다. 설정되면 다음을 사용하여 조사식 모드를 구성할 수 있습니다.",
+  "Index_signature_for_type_0_is_missing_in_type_1_2329": "'{1}' 형식에 인덱스 시그니처 유형 '{0}'이(가) 없습니다.",
   "Index_signature_in_type_0_only_permits_reading_2542": "'{0}' 형식의 인덱스 시그니처는 읽기만 허용됩니다.",
-  "Index_signature_is_missing_in_type_0_2329": "'{0}' 형식에 인덱스 시그니처가 없습니다.",
-  "Index_signatures_are_incompatible_2330": "인덱스 시그니처가 호환되지 않습니다.",
   "Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local_2395": "병합된 선언 '{0}'의 개별 선언은 모두 내보내 졌거나 모두 로컬이어야 합니다.",
   "Infer_all_types_from_usage_95023": "사용량에서 모든 형식 유추",
   "Infer_function_return_type_95148": "함수 반환 형식 유추",
@@ -676,6 +807,7 @@
   "Infer_type_of_0_from_usage_95011": "사용량에서 '{0}'의 형식 유추",
   "Initialize_property_0_in_the_constructor_90020": "생성자에서 속성 '{0}' 초기화",
   "Initialize_static_property_0_90021": "정적 속성 '{0}' 초기화",
+  "Initializer_for_property_0_2811": "'{0}' 속성에 대한 이니셜라이저",
   "Initializer_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor_2301": "인스턴스 멤버 변수 '{0}'의 이니셜라이저는 생성자에 선언된 식별자 '{1}'을(를) 참조할 수 없습니다.",
   "Initializer_provides_no_value_for_this_binding_element_and_the_binding_element_has_no_default_value_2525": "이니셜라이저는 이 바인딩 요소에 대한 값을 제공하지 않으며 바인딩 요소에는 기본값이 없습니다.",
   "Initializers_are_not_allowed_in_ambient_contexts_1039": "앰비언트 컨텍스트에서는 이니셜라이저가 허용되지 않습니다.",
@@ -686,12 +818,16 @@
   "Interface_0_cannot_simultaneously_extend_types_1_and_2_2320": "'{0}' 인터페이스는 '{1}' 및 '{2}' 형식을 동시에 확장할 수 없습니다.",
   "Interface_0_incorrectly_extends_interface_1_2430": "'{0}' 인터페이스가 '{1}' 인터페이스를 잘못 확장합니다.",
   "Interface_declaration_cannot_have_implements_clause_1176": "인터페이스 선언에는 'implements' 절을 사용할 수 없습니다.",
+  "Interface_must_be_given_a_name_1438": "인터페이스에 이름을 지정해야 합니다.",
   "Interface_name_cannot_be_0_2427": "인터페이스 이름은 '{0}'일 수 없습니다.",
+  "Interop_Constraints_6252": "Interop 제약 조건",
+  "Interpret_optional_property_types_as_written_rather_than_adding_undefined_6243": "'undefined'를 추가하는 대신 선택적 속성 형식을 작성된 것으로 해석합니다.",
   "Invalid_character_1127": "잘못된 문자입니다.",
   "Invalid_module_name_in_augmentation_Module_0_resolves_to_an_untyped_module_at_1_which_cannot_be_augm_2665": "확대의 모듈 이름이 잘못되었습니다. '{1}'에서 '{0}' 모듈이 형식화되지 않은 모듈로 확인되어 확대할 수 없습니다.",
   "Invalid_module_name_in_augmentation_module_0_cannot_be_found_2664": "확대의 모듈 이름이 잘못되었습니다. '{0}' 모듈을 찾을 수 없습니다.",
   "Invalid_reference_directive_syntax_1084": "'reference' 지시문 구문이 잘못되었습니다.",
   "Invalid_use_of_0_Class_definitions_are_automatically_in_strict_mode_1210": "'{0}'을(를) 잘못 사용했습니다. 클래스 정의는 자동으로 strict 모드가 됩니다.",
+  "Invalid_use_of_0_It_cannot_be_used_inside_a_class_static_block_18039": "'{0}'을(를) 잘못 사용했습니다. 해당 항목은 클래스 정적 블록 내에서 사용할 수 없습니다.",
   "Invalid_use_of_0_Modules_are_automatically_in_strict_mode_1215": "'{0}'을(를) 잘못 사용했습니다. 모듈은 자동으로 strict 모드가 됩니다.",
   "Invalid_use_of_0_in_strict_mode_1100": "strict 모드에서 '{0}'을(를) 잘못 사용했습니다.",
   "Invalid_value_for_jsxFactory_0_is_not_a_valid_identifier_or_qualified_name_5067": "'jsxFactory'에 대한 값이 잘못되었습니다. '{0}'이(가) 올바른 식별자 또는 정규화된 이름이 아닙니다.",
@@ -723,13 +859,18 @@
   "JSX_expressions_may_not_use_the_comma_operator_Did_you_mean_to_write_an_array_18007": "JSX 식은 쉼표 연산자를 사용할 수 없습니다. 배열을 작성하시겠습니까?",
   "JSX_expressions_must_have_one_parent_element_2657": "JSX 식에는 부모 요소가 하나 있어야 합니다.",
   "JSX_fragment_has_no_corresponding_closing_tag_17014": "JSX 조각에 닫는 태그가 없습니다.",
+  "JSX_property_access_expressions_cannot_include_JSX_namespace_names_2633": "JSX 속성 액세스 식은 JSX 네임스페이스 이름을 포함할 수 없습니다.",
   "JSX_spread_child_must_be_an_array_type_2609": "JSX 분배 자식은 배열 형식이어야 합니다.",
+  "JavaScript_Support_6247": "JavaScript 지원",
   "Jump_target_cannot_cross_function_boundary_1107": "점프 대상은 함수 경계를 벗어날 수 없습니다.",
   "KIND_6034": "KIND",
   "Keywords_cannot_contain_escape_characters_1260": "키워드에는 이스케이프 문자를 사용할 수 없습니다.",
   "LOCATION_6037": "위치",
+  "Language_and_Environment_6254": "언어 및 환경",
   "Language_service_is_disabled_9004": "언어 서비스를 사용할 수 없습니다.",
   "Left_side_of_comma_operator_is_unused_and_has_no_side_effects_2695": "쉼표 연산자의 왼쪽은 사용되지 않으며 이로 인해 의도하지 않은 결과가 발생하지 않습니다.",
+  "Library_0_specified_in_compilerOptions_1422": "compilerOptions에 '{0}' 라이브러리가 지정되었습니다.",
+  "Library_referenced_via_0_from_file_1_1405": "'{1}' 파일에서 '{0}'을(를) 통해 라이브러리가 참조되었습니다.",
   "Line_break_not_permitted_here_1142": "여기서는 줄 바꿈이 허용되지 않습니다.",
   "Line_terminator_not_permitted_before_arrow_1200": "줄 마침 표시는 화살표 앞에 사용할 수 없습니다.",
   "List_of_folders_to_include_type_definitions_from_6161": "포함할 형식 정의가 있는 폴더의 목록입니다.",
@@ -739,11 +880,14 @@
   "Loading_module_0_from_node_modules_folder_target_file_type_1_6098": "'node_modules' 폴더에서 '{0}' 모듈을 로드하고 있습니다. 대상 파일 형식은 '{1}'입니다.",
   "Loading_module_as_file_Slash_folder_candidate_module_location_0_target_file_type_1_6095": "모듈을 파일/폴더로 로드하고 있습니다. 후보 모듈 위치는 '{0}', 대상 파일 형식은 '{1}'입니다.",
   "Locale_must_be_of_the_form_language_or_language_territory_For_example_0_or_1_6048": "로캘이 <language> 또는 <language>-<territory> 형식이어야 합니다. 예를 들어 '{0}' 또는 '{1}'입니다.",
+  "Log_paths_used_during_the_moduleResolution_process_6706": "'moduleResolution' 프로세스 중에 사용되는 로그 경로입니다.",
   "Longest_matching_prefix_for_0_is_1_6108": "'{0}'에 대해 일치하는 가장 긴 접두사는 '{1}'입니다.",
   "Looking_up_in_node_modules_folder_initial_location_0_6125": "'node_modules' 폴더에서 찾고 있습니다. 초기 위치: '{0}'.",
   "Make_all_super_calls_the_first_statement_in_their_constructor_95036": "모든 'super()' 호출을 생성자의 첫 번째 문으로 만들기",
+  "Make_keyof_only_return_strings_instead_of_string_numbers_or_symbols_Legacy_option_6650": "keyof가 문자열, 숫자 또는 기호 대신 문자열만 반환하도록 합니다. 레거시 옵션입니다.",
   "Make_super_call_the_first_statement_in_the_constructor_90002": "생성자의 첫 번째 문을 'super()'로 호출",
   "Mapped_object_type_implicitly_has_an_any_template_type_7039": "매핑된 개체 형식에는 'any' 템플릿 형식이 암시적으로 포함됩니다.",
+  "Matched_by_include_pattern_0_in_1_1407": "'{1}'의 포함 패턴 '{0}'(으)로 일치되었습니다.",
   "Member_0_implicitly_has_an_1_type_7008": "'{0}' 멤버에는 암시적으로 '{1}' 형식이 포함됩니다.",
   "Member_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage_7045": "'{0}' 멤버는 암시적으로 '{1}' 형식이지만, 사용량에서 더 나은 형식을 유추할 수 있습니다.",
   "Merge_conflict_marker_encountered_1185": "병합 충돌 표식을 발견했습니다.",
@@ -752,6 +896,7 @@
   "Method_0_cannot_have_an_implementation_because_it_is_marked_abstract_1245": "'{0}' 메서드는 abstract로 표시되어 있으므로 구현이 있을 수 없습니다.",
   "Method_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2_4101": "내보낸 인터페이스의 '{0}' 메서드가 프라이빗 모듈 '{2}'의 '{1}' 이름을 가지고 있거나 사용 중입니다.",
   "Method_0_of_exported_interface_has_or_is_using_private_name_1_4102": "내보낸 인터페이스의 '{0}' 메서드가 프라이빗 이름 '{1}'을(를) 가지고 있거나 사용 중입니다.",
+  "Method_not_implemented_95158": "메서드가 구현되지 않았습니다.",
   "Modifiers_cannot_appear_here_1184": "한정자를 여기에 표시할 수 없습니다.",
   "Module_0_can_only_be_default_imported_using_the_1_flag_1259": "'{0}' 모듈은 '{1}' 플래그를 사용하는 가져온 기본값이어야만 합니다.",
   "Module_0_declares_1_locally_but_it_is_exported_as_2_2460": "'{0}' 모듈은 '{1}'을(를) 로컬로 선언하지만, 모듈을 '{2}'(으)로 내보냅니다.",
@@ -769,13 +914,14 @@
   "Module_0_was_resolved_as_locally_declared_ambient_module_in_file_1_6144": "'{0}' 모듈은 '{1}'에서 지역으로 선언된 앰비언트 모듈로 확인되었습니다.",
   "Module_0_was_resolved_to_1_but_jsx_is_not_set_6142": "모듈 '{0}'이(가) '{1}'(으)로 확인되었지만 '--jsx'가 설정되지 않았습니다.",
   "Module_0_was_resolved_to_1_but_resolveJsonModule_is_not_used_7042": "'{0}' 모듈이 '{1}'(으)로 확인되었지만 '--resolveJsonModule'이 사용되지 않았습니다.",
-  "Module_Resolution_Options_6174": "모듈 확인 옵션",
+  "Module_declaration_names_may_only_use_or_quoted_strings_1443": "모듈 선언 이름에는 ' 또는 \" 인용 문자열만 사용할 수 있습니다.",
   "Module_name_0_matched_pattern_1_6092": "모듈 이름: '{0}', 일치하는 패턴: '{1}'",
   "Module_name_0_was_not_resolved_6090": "======== 모듈 이름 '{0}'이(가) 확인되지 않았습니다. ========",
   "Module_name_0_was_successfully_resolved_to_1_6089": "======== 모듈 이름 '{0}'이(가) '{1}'(으)로 확인되었습니다. ========",
   "Module_name_0_was_successfully_resolved_to_1_with_Package_ID_2_6218": "======== 모듈 이름 '{0}'이(가) 패키지 ID가 '{2}'인 '{1}'(으)로 확인되었습니다. ========",
   "Module_resolution_kind_is_not_specified_using_0_6088": "모듈 확인 종류가 지정되지 않았습니다. '{0}'을(를) 사용합니다.",
   "Module_resolution_using_rootDirs_has_failed_6111": "'rootDirs'를 사용한 모듈 확인에 실패했습니다.",
+  "Modules_6244": "모듈",
   "Move_labeled_tuple_element_modifiers_to_labels_95117": "레이블이 지정된 튜플 요소 한정자를 레이블로 이동",
   "Move_to_a_new_file_95049": "새 파일로 이동",
   "Multiple_consecutive_numeric_separators_are_not_permitted_6189": "여러 개의 연속된 숫자 구분 기호는 허용되지 않습니다.",
@@ -784,11 +930,14 @@
   "Name_is_not_valid_95136": "이름이 잘못되었습니다.",
   "Named_property_0_of_types_1_and_2_are_not_identical_2319": "명명된 속성 '{0}'의 형식 '{1}' 및 '{2}'이(가) 동일하지 않습니다.",
   "Namespace_0_has_no_exported_member_1_2694": "'{0}' 네임스페이스에 내보낸 멤버 '{1}'이(가) 없습니다.",
+  "Namespace_must_be_given_a_name_1437": "네임스페이스에 이름을 지정해야 합니다.",
+  "Namespace_name_cannot_be_0_2819": "네임스페이스 이름은 '{0}'일 수 없습니다.",
   "No_base_constructor_has_the_specified_number_of_type_arguments_2508": "기본 생성자에 지정된 수의 형식 인수가 없습니다.",
   "No_constituent_of_type_0_is_callable_2755": "'{0}' 형식의 구성원을 호출할 수 없습니다.",
   "No_constituent_of_type_0_is_constructable_2759": "'{0}' 형식의 구성원을 생성할 수 없습니다.",
   "No_index_signature_with_a_parameter_of_type_0_was_found_on_type_1_7054": "'{1}' 형식에서 '{0}' 형식의 매개 변수가 포함된 인덱스 시그니처를 찾을 수 없습니다.",
   "No_inputs_were_found_in_config_file_0_Specified_include_paths_were_1_and_exclude_paths_were_2_18003": "'{0}' 구성 파일에서 입력을 찾을 수 없습니다. 지정된 '포함' 경로는 '{1}'이고 '제외' 경로는 '{2}'이었습니다.",
+  "No_longer_supported_In_early_versions_manually_set_the_text_encoding_for_reading_files_6608": "더 이상 지원되지 않습니다. 초기 버전에서는 파일을 읽기 위한 텍스트 인코딩을 수동으로 설정합니다.",
   "No_overload_expects_0_arguments_but_overloads_do_exist_that_expect_either_1_or_2_arguments_2575": "오버로드에 {0} 인수가 필요하지 않지만, {1} 또는 {2} 인수가 필요한 오버로드가 있습니다.",
   "No_overload_expects_0_type_arguments_but_overloads_do_exist_that_expect_either_1_or_2_type_arguments_2743": "오버로드에 {0} 형식 인수가 필요하지 않지만, {1} 또는 {2} 형식 인수가 필요한 오버로드가 있습니다.",
   "No_overload_matches_this_call_2769": "이 호출과 일치하는 오버로드가 없습니다.",
@@ -802,7 +951,6 @@
   "Not_all_code_paths_return_a_value_7030": "일부 코드 경로가 값을 반환하지 않습니다.",
   "Not_all_constituents_of_type_0_are_callable_2756": "'{0}' 형식의 일부 구성원을 호출할 수 없습니다.",
   "Not_all_constituents_of_type_0_are_constructable_2760": "'{0}' 형식의 일부 구성원을 생성할 수 없습니다.",
-  "Numeric_index_type_0_is_not_assignable_to_string_index_type_1_2413": "숫자 인덱스 형식 '{0}'을(를) 문자열 인덱스 형식 '{1}'에 할당할 수 없습니다.",
   "Numeric_literals_with_absolute_values_equal_to_2_53_or_greater_are_too_large_to_be_represented_accur_80008": "절대값이 2^53보다 크거나 같은 숫자 리터럴은 너무 커서 정수로 정확하게 표시할 수 없습니다.",
   "Numeric_separators_are_not_allowed_here_6188": "숫자 구분 기호는 여기에서 허용되지 않습니다.",
   "Object_is_of_type_unknown_2571": "개체가 '알 수 없는' 형식입니다.",
@@ -826,9 +974,11 @@
   "Only_identifiers_Slashqualified_names_with_optional_type_arguments_are_currently_supported_in_a_clas_9002": "선택적 형식 인수가 포함된 식별자/정규화된 이름만 현재 클래스 'extends' 절에서 지원됩니다.",
   "Only_named_exports_may_use_export_type_1383": "명명된 내보내기에서만 'export type'을 사용할 수 있습니다.",
   "Only_numeric_enums_can_have_computed_members_but_this_expression_has_type_0_If_you_do_not_need_exhau_18033": "숫자 열거형에는 컴퓨팅된 구성원만 사용할 수 있는데 이 식에는 '{0}' 형식이 있습니다. 전체 검사가 필요하지 않은 경우에는 개체 리터럴을 대신 사용해 보세요.",
+  "Only_output_d_ts_files_and_not_JavaScript_files_6623": "JavaScript 파일은 출력하지 않고 d.ts 파일만 출력합니다.",
   "Only_public_and_protected_methods_of_the_base_class_are_accessible_via_the_super_keyword_2340": "기본 클래스의 공용 및 보호된 메서드만 'super' 키워드를 통해 액세스할 수 있습니다.",
   "Operator_0_cannot_be_applied_to_type_1_2736": "'{0}' 연산자는 '{1}' 형식에 적용할 수 없습니다.",
   "Operator_0_cannot_be_applied_to_types_1_and_2_2365": "'{0}' 연산자를 '{1}' 및 '{2}' 형식에 적용할 수 없습니다.",
+  "Opt_a_project_out_of_multi_project_reference_checking_when_editing_6619": "편집할 때 다중 프로젝트 참조 검사에서 프로젝트를 옵트아웃합니다.",
   "Option_0_can_only_be_specified_in_tsconfig_json_file_or_set_to_false_or_null_on_command_line_6230": "'{0}' 옵션은 'tsconfig. json' 파일에만 지정하거나 명령줄에서 'false' 또는 'null'로 설정할 수 있습니다.",
   "Option_0_can_only_be_specified_in_tsconfig_json_file_or_set_to_null_on_command_line_6064": "'{0}' 옵션은 'tsconfig. json' 파일에만 지정하거나 명령줄에서 'null'로 설정할 수 있습니다.",
   "Option_0_can_only_be_used_when_either_option_inlineSourceMap_or_option_sourceMap_is_provided_5051": "'{0}' 옵션은 '--inlineSourceMap' 옵션 또는 '--sourceMap' 옵션이 제공되는 경우에만 사용할 수 있습니다.",
@@ -841,14 +991,20 @@
   "Option_build_must_be_the_first_command_line_argument_6369": "'--build' 옵션은 첫 번째 명령줄 인수여야 합니다.",
   "Option_incremental_can_only_be_specified_using_tsconfig_emitting_to_single_file_or_when_option_tsBui_5074": "'--incremental' 옵션은 tsconfig를 사용하거나 단일 파일로 내보내서 지정하거나 '--tsBuildInfoFile' 옵션을 지정할 때만 지정할 수 있습니다.",
   "Option_isolatedModules_can_only_be_used_when_either_option_module_is_provided_or_option_target_is_ES_5047": "'isolatedModules' 옵션은 '--module' 옵션을 지정하거나 'target' 옵션이 'ES2015' 이상인 경우에만 사용할 수 있습니다.",
+  "Option_preserveConstEnums_cannot_be_disabled_when_isolatedModules_is_enabled_5091": "'isolatedModules'가 사용하도록 설정된 경우 'preserveConstEnums' 옵션을 사용하지 않도록 설정할 수 없습니다.",
   "Option_project_cannot_be_mixed_with_source_files_on_a_command_line_5042": "명령줄에서 'project' 옵션을 원본 파일과 혼합하여 사용할 수 없습니다.",
   "Option_resolveJsonModule_can_only_be_specified_when_module_code_generation_is_commonjs_amd_es2015_or_5071": "'--resolveJsonModule' 옵션은 모듈 코드 생성이 'commonjs', 'amd', 'es2015' 또는 'esNext'일 경우에만 지정할 수 있습니다.",
   "Option_resolveJsonModule_cannot_be_specified_without_node_module_resolution_strategy_5070": "'node' 모듈 확인 전략 없이 '--resolveJsonModule' 옵션을 지정할 수 없습니다.",
   "Options_0_and_1_cannot_be_combined_6370": "'{0}' 및 '{1}' 옵션은 조합할 수 없습니다.",
   "Options_Colon_6027": "옵션:",
+  "Output_Formatting_6256": "출력 서식 지정",
+  "Output_compiler_performance_information_after_building_6615": "빌드 후 컴파일러 성능 정보를 출력합니다.",
   "Output_directory_for_generated_declaration_files_6166": "생성된 선언 파일의 출력 디렉터리입니다.",
   "Output_file_0_from_project_1_does_not_exist_6309": "프로젝트 '{1}'의 출력 파일 '{0}'이(가) 존재하지 않습니다.",
   "Output_file_0_has_not_been_built_from_source_file_1_6305": "출력 파일 '{0}'이(가) 소스 파일 '{1}'에서 빌드되지 않았습니다.",
+  "Output_from_referenced_project_0_included_because_1_specified_1411": "'{1}'이(가) 지정되었기 때문에 참조된 프로젝트 '{0}'의 출력이 포함됩니다.",
+  "Output_from_referenced_project_0_included_because_module_is_specified_as_none_1412": "'--module'이 'none'으로 지정되었기 때문에 참조된 프로젝트 '{0}'의 출력이 포함됩니다.",
+  "Output_more_detailed_compiler_performance_information_after_building_6632": "빌드 후 더 자세한 컴파일러 성능 정보를 출력합니다.",
   "Overload_0_of_1_2_gave_the_following_error_2772": "오버로드 {0}/{1}('{2}')에서 다음 오류가 발생했습니다.",
   "Overload_signatures_must_all_be_abstract_or_non_abstract_2512": "오버로드 시그니처는 모두 추상이거나 비추상이어야 합니다.",
   "Overload_signatures_must_all_be_ambient_or_non_ambient_2384": "오버로드 시그니처는 모두 앰비언트이거나 앰비언트가 아니어야 합니다.",
@@ -892,18 +1048,25 @@
   "Parameter_type_of_public_static_setter_0_from_exported_class_has_or_is_using_name_1_from_private_mod_4034": "내보낸 클래스에 있는 공용 정적 setter '{0}'의 매개 변수 형식이 프라이빗 모듈 '{2}'의 이름 '{1}'을(를) 가지고 있거나 사용 중입니다.",
   "Parameter_type_of_public_static_setter_0_from_exported_class_has_or_is_using_private_name_1_4035": "내보낸 클래스에 있는 공용 정적 setter '{0}'의 매개 변수 형식이 프라이빗 이름 '{1}'을(를) 가지고 있거나 사용 중입니다.",
   "Parse_in_strict_mode_and_emit_use_strict_for_each_source_file_6141": "strict 모드에서 구문 분석하고 각 소스 파일에 대해 \"use strict\"를 내보냅니다.",
+  "Part_of_files_list_in_tsconfig_json_1409": "tsconfig.json의 'files' 목록의 일부",
   "Pattern_0_can_have_at_most_one_Asterisk_character_5061": "'{0}' 패턴에는 '*' 문자를 최대 하나만 사용할 수 있습니다.",
   "Performance_timings_for_diagnostics_or_extendedDiagnostics_are_not_available_in_this_session_A_nativ_6386": "이 세션에서는 '--diagnostics' 또는 '--extendedDiagnostics'에 대해 성능 타이밍을 사용할 수 없습니다. Web Performance API의 네이티브 구현을 찾을 수 없습니다.",
+  "Platform_specific_6912": "플랫폼별",
   "Prefix_0_with_an_underscore_90025": "'{0}' 앞에 밑줄 추가",
   "Prefix_all_incorrect_property_declarations_with_declare_95095": "모든 잘못된 속성 선언에 'declare'를 접두사로 추가",
   "Prefix_all_unused_declarations_with_where_possible_95025": "가능한 경우 사용하지 않는 모든 선언에 '_'을 접두사로 추가",
   "Prefix_with_declare_95094": "'declare'를 접두사로 추가",
+  "Print_all_of_the_files_read_during_the_compilation_6653": "컴파일 중에 읽은 모든 파일을 출력합니다.",
+  "Print_files_read_during_the_compilation_including_why_it_was_included_6631": "컴파일 중에 읽은 파일을 포함 이유와 함께 출력합니다.",
+  "Print_names_of_files_and_the_reason_they_are_part_of_the_compilation_6505": "파일의 이름과 해당 파일이 컴파일에 포함된 이유를 출력합니다.",
   "Print_names_of_files_part_of_the_compilation_6155": "컴파일의 일부인 파일의 이름을 인쇄합니다.",
   "Print_names_of_files_that_are_part_of_the_compilation_and_then_stop_processing_6503": "컴파일에 포함된 파일의 이름을 인쇄한 다음, 처리를 중지합니다.",
   "Print_names_of_generated_files_part_of_the_compilation_6154": "컴파일의 일부인 생성된 파일의 이름을 인쇄합니다.",
   "Print_the_compiler_s_version_6019": "컴파일러 버전을 인쇄합니다.",
   "Print_the_final_configuration_instead_of_building_1350": "빌드 대신 최종 구성을 인쇄합니다.",
+  "Print_the_names_of_emitted_files_after_a_compilation_6652": "컴파일 후 내보낸 파일의 이름을 출력합니다.",
   "Print_this_message_6017": "이 메시지를 출력합니다.",
+  "Private_accessor_was_defined_without_a_getter_2806": "프라이빗 접근자가 getter 없이 정의되었습니다.",
   "Private_identifiers_are_not_allowed_in_variable_declarations_18029": "변수 선언에서 프라이빗 식별자를 사용할 수 없습니다.",
   "Private_identifiers_are_not_allowed_outside_class_bodies_18016": "클래스 본문 외부에서 프라이빗 식별자를 사용할 수 없습니다.",
   "Private_identifiers_are_only_available_when_targeting_ECMAScript_2015_and_higher_18028": "프라이빗 식별자는 ECMAScript 2015 이상을 대상으로 지정할 때만 사용할 수 있습니다.",
@@ -911,6 +1074,7 @@
   "Private_or_protected_member_0_cannot_be_accessed_on_a_type_parameter_4105": "형식 매개 변수에서 프라이빗 또는 보호된 멤버 '{0}'에 액세스할 수 없습니다.",
   "Project_0_can_t_be_built_because_its_dependency_1_has_errors_6363": "'{0}' 프로젝트는 '{1}' 종속성에 오류가 있기 때문에 빌드할 수 없습니다.",
   "Project_0_can_t_be_built_because_its_dependency_1_was_not_built_6383": "'{1}' 종속성이 빌드되지 않았기 때문에 '{0}' 프로젝트를 빌드할 수 없습니다.",
+  "Project_0_is_being_forcibly_rebuilt_6388": "'{0}' 프로젝트가 강제로 재구축되고 있습니다.",
   "Project_0_is_out_of_date_because_its_dependency_1_is_out_of_date_6353": "'{1}' 종속성이 최신 상태가 아니기 때문에 '{0}' 프로젝트가 최신 상태가 아닙니다.",
   "Project_0_is_out_of_date_because_oldest_output_1_is_older_than_newest_input_2_6350": "가장 오래된 출력 '{1}'이(가) 최신 입력 '{2}'보다 오래되었기 때문에 '{0}' 프로젝트가 최신 상태가 아닙니다.",
   "Project_0_is_out_of_date_because_output_file_1_does_not_exist_6352": "'{1}' 출력 파일이 존재하지 않기 때문에 '{0}' 프로젝트가 최신 상태가 아닙니다.",
@@ -920,14 +1084,18 @@
   "Project_0_is_up_to_date_because_newest_input_1_is_older_than_oldest_output_2_6351": "최신 입력 '{1}'이(가) 가장 오래된 출력 '{2}'보다 오래되었기 때문에 '{0}' 프로젝트가 최신 상태입니다.",
   "Project_0_is_up_to_date_with_d_ts_files_from_its_dependencies_6354": "'{0}' 프로젝트는 종속성에 .d.ts 파일이 있는 최신 상태입니다.",
   "Project_references_may_not_form_a_circular_graph_Cycle_detected_Colon_0_6202": "프로젝트 참조는 순환 그래프를 형성할 수 없습니다. 순환이 발견되었습니다. {0}",
+  "Projects_6255": "프로젝트",
   "Projects_in_this_build_Colon_0_6355": "이 빌드의 프로젝트: {0}",
   "Projects_to_reference_6300": "참조할 프로젝트",
+  "Property_0_cannot_have_an_initializer_because_it_is_marked_abstract_1267": "'{0}' 속성은 추상으로 표시되어 있으므로 이니셜라이저를 사용할 수 없습니다.",
   "Property_0_comes_from_an_index_signature_so_it_must_be_accessed_with_0_4111": "'{0}' 속성은 인덱스 시그니처에서 가져오는 것이므로 ['{0}']을(를) 사용하여 액세스해야 합니다.",
   "Property_0_does_not_exist_on_const_enum_1_2479": "'const' 열거형 '{1}'에 '{0}' 속성이 없습니다.",
   "Property_0_does_not_exist_on_type_1_2339": "'{1}' 형식에 '{0}' 속성이 없습니다.",
   "Property_0_does_not_exist_on_type_1_Did_you_mean_2_2551": "'{0}' 속성이 '{1}' 형식에 없습니다. '{2}'을(를) 사용하시겠습니까?",
   "Property_0_does_not_exist_on_type_1_Did_you_mean_to_access_the_static_member_2_instead_2576": "'{0}' 속성이 '{1}' 형식에 없습니다. 대신 정적 멤버 '{2}'에 액세스하려고 하셨습니까?",
   "Property_0_does_not_exist_on_type_1_Do_you_need_to_change_your_target_library_Try_changing_the_lib_c_2550": "'{0}' 속성이 '{1}' 형식에 없습니다. 대상 라이브러리를 변경해야 하는 경우 'lib' 컴파일러 옵션을 '{2}' 이상으로 변경해 보세요.",
+  "Property_0_does_not_exist_on_type_1_Try_changing_the_lib_compiler_option_to_include_dom_2812": "속성 '{0}'(은)는 '{1}'에 없습니다. 'lib' 컴파일러 옵션을 변경하여 'dom'을 포함하세요.",
+  "Property_0_has_no_initializer_and_is_not_definitely_assigned_in_a_class_static_block_2817": "'{0}' 속성에 이니셜라이저가 없으며 클래스 정적 블록에 확실히 할당되지 않았습니다.",
   "Property_0_has_no_initializer_and_is_not_definitely_assigned_in_the_constructor_2564": "속성 '{0}'은(는) 이니셜라이저가 없고 생성자에 할당되어 있지 않습니다.",
   "Property_0_implicitly_has_type_any_because_its_get_accessor_lacks_a_return_type_annotation_7033": "'{0}' 속성에는 해당 get 접근자에 반환 형식 주석이 없으므로 암시적으로 'any' 형식이 포함됩니다.",
   "Property_0_implicitly_has_type_any_because_its_set_accessor_lacks_a_parameter_type_annotation_7032": "'{0}' 속성에는 해당 set 접근자에 매개 변수 형식 주석이 없으므로 암시적으로 'any' 형식이 포함됩니다.",
@@ -945,18 +1113,19 @@
   "Property_0_is_optional_in_type_1_but_required_in_type_2_2327": "'{0}' 속성은 '{1}' 형식에서 선택적이지만 '{2}' 형식에서는 필수입니다.",
   "Property_0_is_private_and_only_accessible_within_class_1_2341": "'{0}' 속성은 private이며 '{1}' 클래스 내에서만 액세스할 수 있습니다.",
   "Property_0_is_private_in_type_1_but_not_in_type_2_2325": "'{0}' 속성은 '{1}' 형식에서 private이지만 '{2}' 형식에서는 그렇지 않습니다.",
-  "Property_0_is_protected_and_only_accessible_through_an_instance_of_class_1_2446": "'{0}' 속성은 보호된 속성이며 '{1}' 클래스의 인스턴스를 통해서만 액세스할 수 있습니다.",
+  "Property_0_is_protected_and_only_accessible_through_an_instance_of_class_1_This_is_an_instance_of_cl_2446": "'{0}' 속성은 보호되며 '{1}' 클래스의 인스턴스를 통해서만 액세스할 수 있습니다. 이는 '{2}' 클래스의 인스턴스입니다.",
   "Property_0_is_protected_and_only_accessible_within_class_1_and_its_subclasses_2445": "'{0}' 속성은 보호된 속성이며 '{1}' 클래스 및 해당 하위 클래스 내에서만 액세스할 수 있습니다.",
   "Property_0_is_protected_but_type_1_is_not_a_class_derived_from_2_2443": "'{0}' 속성은 보호된 속성이지만 '{1}' 형식은 '{2}'에서 파생된 클래스가 아닙니다.",
   "Property_0_is_protected_in_type_1_but_public_in_type_2_2444": "'{0}' 속성은 '{1}' 형식에서는 보호된 속성이지만 '{2}' 형식에서는 공용입니다.",
   "Property_0_is_used_before_being_assigned_2565": "'{0}' 속성이 할당되기 전에 사용되었습니다.",
   "Property_0_is_used_before_its_initialization_2729": "초기화하기 전에 '{0}' 속성이 사용됩니다.",
+  "Property_0_may_not_be_used_in_a_static_property_s_initializer_in_the_same_class_when_target_is_esnex_2810": "'target'이 'esnext'이고 'useDefineForClassFields'가 'false'인 경우 동일한 클래스의 정적 속성의 이니셜라이저에서 '{0}'(은)는 속성을 사용할 수 없습니다.",
+  "Property_0_may_not_exist_on_type_1_Did_you_mean_2_2568": "'{0}' 속성이 '{1}' 형식에 없을 수 있습니다. '{2}'을(를) 사용하시겠습니까?",
   "Property_0_of_JSX_spread_attribute_is_not_assignable_to_target_property_2606": "JSX 분배 특성의 '{0}' 속성을 대상 속성에 할당할 수 없습니다.",
   "Property_0_of_exported_class_expression_may_not_be_private_or_protected_4094": "내보낸 클래스 식의 속성 '{0}'이(가) 프라이빗이 아니거나 보호되지 않을 수 있습니다.",
   "Property_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2_4032": "내보낸 인터페이스의 '{0}' 속성이 프라이빗 모듈 '{2}'의 '{1}' 이름을 가지고 있거나 사용 중입니다.",
   "Property_0_of_exported_interface_has_or_is_using_private_name_1_4033": "내보낸 인터페이스의 '{0}' 속성이 프라이빗 이름 '{1}'을(를) 가지고 있거나 사용 중입니다.",
-  "Property_0_of_type_1_is_not_assignable_to_numeric_index_type_2_2412": "'{1}' 형식의 '{0}' 속성을 숫자 인덱스 형식 '{2}'에 할당할 수 없습니다.",
-  "Property_0_of_type_1_is_not_assignable_to_string_index_type_2_2411": "'{1}' 형식의 '{0}' 속성을 문자열 인덱스 형식 '{2}'에 할당할 수 없습니다.",
+  "Property_0_of_type_1_is_not_assignable_to_2_index_type_3_2411": "'{0}' 형식의 '{1}' 속성을 '{2}' 인덱스 유형 '{3}'에 할당할 수 없습니다.",
   "Property_0_was_also_declared_here_2733": "여기서도 '{0}' 속성이 선언되었습니다.",
   "Property_0_will_overwrite_the_base_property_in_1_If_this_is_intentional_add_an_initializer_Otherwise_2612": "'{0}' 속성은 '{1}'의 기본 속성을 덮어씁니다. 의도적인 경우 이니셜라이저를 추가합니다. 그렇지 않으면 'declare' 한정자를 추가하거나 중복 선언을 제거합니다.",
   "Property_assignment_expected_1136": "속성 할당이 필요합니다.",
@@ -978,12 +1147,18 @@
   "Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4027": "내보낸 클래스의 공용 정적 속성 '{0}'이(가) 프라이빗 모듈 '{2}'의 '{1}' 이름을 가지고 있거나 사용 중입니다.",
   "Public_static_property_0_of_exported_class_has_or_is_using_private_name_1_4028": "내보낸 클래스의 공용 정적 속성 '{0}'이(가) 프라이빗 이름 '{1}'을(를) 가지고 있거나 사용 중입니다.",
   "Qualified_name_0_is_not_allowed_without_a_leading_param_object_1_8032": "정규화된 이름 '{0}'은(는) 선행 '@param {object} {1}'과(와) 함께 사용해야 합니다.",
+  "Raise_an_error_when_a_function_parameter_isn_t_read_6676": "함수 매개 변수를 읽을 수 없을 때 오류를 표시합니다.",
   "Raise_error_on_expressions_and_declarations_with_an_implied_any_type_6052": "암시된 'any' 형식이 있는 식 및 선언에서 오류를 발생합니다.",
   "Raise_error_on_this_expressions_with_an_implied_any_type_6115": "암시된 'any' 형식이 있는 'this' 식에서 오류를 발생합니다.",
   "Re_exporting_a_type_when_the_isolatedModules_flag_is_provided_requires_using_export_type_1205": "'--isolatedModules' 플래그가 제공될 때 형식을 다시 내보내려면 'export type'을 사용해야 합니다.",
   "Redirect_output_structure_to_the_directory_6006": "출력 구조를 디렉터리로 리디렉션합니다.",
+  "Reduce_the_number_of_projects_loaded_automatically_by_TypeScript_6617": "TypeScript에서 자동으로 로드되는 프로젝트 수를 줄입니다.",
   "Referenced_project_0_may_not_disable_emit_6310": "참조된 프로젝트 '{0}'은(는) 내보내기를 사용하지 않도록 설정할 수 없습니다.",
   "Referenced_project_0_must_have_setting_composite_Colon_true_6306": "참조되는 프로젝트 '{0}'에는 \"composite\": true 설정이 있어야 합니다.",
+  "Referenced_via_0_from_file_1_1400": "'{1}' 파일에서 '{0}'을(를) 통해 참조되었습니다.",
+  "Remove_a_list_of_directories_from_the_watch_process_6628": "감시 프로세스에서 디렉터리 목록을 제거합니다.",
+  "Remove_a_list_of_files_from_the_watch_mode_s_processing_6629": "감시 모드의 처리에서 파일 목록을 제거합니다.",
+  "Remove_all_unnecessary_override_modifiers_95163": "불필요한 'override' 한정자 모두 제거",
   "Remove_all_unnecessary_uses_of_await_95087": "불필요한 'await' 사용 모두 제거",
   "Remove_all_unreachable_code_95051": "접근할 수 없는 코드 모두 제거",
   "Remove_all_unused_labels_95054": "사용되지 않는 레이블 모두 제거",
@@ -991,8 +1166,10 @@
   "Remove_braces_from_arrow_function_95060": "화살표 함수에서 중괄호 제거",
   "Remove_braces_from_arrow_function_body_95112": "화살표 함수 본문에서 중괄호 제거",
   "Remove_import_from_0_90005": "'{0}'에서 가져오기 제거",
+  "Remove_override_modifier_95161": "'override' 한정자 제거",
   "Remove_parentheses_95126": "괄호 제거",
   "Remove_template_tag_90011": "템플릿 태그 제거",
+  "Remove_the_20mb_cap_on_total_source_code_size_for_JavaScript_files_in_the_TypeScript_language_server_6618": "TypeScript 언어 서버에서 JavaScript 파일의 총 소스 코드 크기에 적용되는 20MB 제한을 제거합니다.",
   "Remove_type_parameters_90012": "형식 매개 변수 제거",
   "Remove_unnecessary_await_95086": "불필요한 'await' 제거",
   "Remove_unreachable_code_95050": "접근할 수 없는 코드 제거",
@@ -1010,14 +1187,16 @@
   "Report_errors_in_js_files_8019": ".js 파일의 오류를 보고합니다.",
   "Report_errors_on_unused_locals_6134": "사용되지 않은 로컬 항목에 대한 오류를 보고합니다.",
   "Report_errors_on_unused_parameters_6135": "사용되지 않은 매개 변수에 대한 오류를 보고합니다.",
-  "Require_undeclared_properties_from_index_signatures_to_use_element_accesses_6803": "요소 액세스를 사용하려면 인덱스 시그니처의 선언되지 않은 속성이 필요합니다.",
+  "Require_undeclared_properties_from_index_signatures_to_use_element_accesses_6717": "요소 액세스를 사용하려면 인덱스 시그니처의 선언되지 않은 속성이 필요합니다.",
   "Required_type_parameters_may_not_follow_optional_type_parameters_2706": "필수 형식 매개 변수는 선택적 형식 매개 변수 다음에 올 수 없습니다.",
   "Resolution_for_module_0_was_found_in_cache_from_location_1_6147": "'{0}' 모듈에 대한 해결을 '{1}' 위치의 캐시에서 찾았습니다.",
+  "Resolution_for_type_reference_directive_0_was_found_in_cache_from_location_1_6241": "'{1}' 위치의 캐시에서 형식 참조 지시어 '{0}'에 대한 해상도가 발견되었습니다.",
   "Resolve_keyof_to_string_valued_property_names_only_no_numbers_or_symbols_6195": "문자열 값 속성 이름에 대해서만 'keyof'를 확인합니다(숫자나 기호 아님).",
   "Resolving_from_node_modules_folder_6118": "node_modules 폴더에서 확인하는 중...",
   "Resolving_module_0_from_1_6086": "======== '{1}'에서 '{0}' 모듈을 확인하는 중입니다. ========",
   "Resolving_module_name_0_relative_to_base_url_1_2_6094": "기본 URL '{1}' - '{2}'을(를) 기준으로 모듈 이름 '{0}'을(를) 확인하는 중입니다.",
   "Resolving_real_path_for_0_result_1_6130": "'{0}'의 실제 경로를 확인하는 중입니다. 결과: '{1}'.",
+  "Resolving_type_reference_directive_0_containing_file_1_6242": "======== 파일 '{1}'을(를) 포함하는 형식 참조 지시어 '{0}'을(를) 확인하는 중입니다.' ========",
   "Resolving_type_reference_directive_0_containing_file_1_root_directory_2_6116": "======== 형식 참조 지시문 '{0}'을(를) 확인하는 중입니다. 포함 파일: '{1}', 루트 디렉터리: '{2}' ========",
   "Resolving_type_reference_directive_0_containing_file_1_root_directory_not_set_6123": "======== 형식 참조 지시문 '{0}'을(를) 확인하는 중입니다. 포함 파일: '{1}', 루트 디렉터리: 설정되지 않음 ========",
   "Resolving_type_reference_directive_0_containing_file_not_set_root_directory_1_6127": "======== 형식 참조 지시문 '{0}'을(를) 확인하는 중입니다. 포함 파일: 설정되지 않음, 루트 디렉터리: '{1}' ========",
@@ -1029,6 +1208,7 @@
   "Rest_signatures_are_incompatible_2572": "Rest 시그니처가 호환되지 않습니다.",
   "Rest_types_may_only_be_created_from_object_types_2700": "rest 유형은 개체 형식에서만 만들 수 있습니다.",
   "Return_type_annotation_circularly_references_itself_2577": "반환 형식 주석이 자신을 순환 참조합니다.",
+  "Return_type_must_be_inferred_from_a_function_95149": "반환 형식은 함수에서 유추되어야 합니다.",
   "Return_type_of_call_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1_4046": "내보낸 인터페이스에 있는 호출 시그니처의 반환 형식이 프라이빗 모듈 '{1}'의 '{0}' 이름을 가지고 있거나 사용 중입니다.",
   "Return_type_of_call_signature_from_exported_interface_has_or_is_using_private_name_0_4047": "내보낸 인터페이스에 있는 호출 시그니처의 반환 형식이 프라이빗 이름 '{0}'을(를) 가지고 있거나 사용 중입니다.",
   "Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_name_0_from_private_mod_4044": "내보낸 인터페이스에 있는 생성자 시그니처의 반환 형식이 프라이빗 모듈 '{1}'의 '{0}' 이름을 가지고 있거나 사용 중입니다.",
@@ -1053,15 +1233,31 @@
   "Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_external_module__4050": "내보낸 클래스에 있는 공용 정적 메서드의 반환 형식이 외부 모듈 {1}의 '{0}' 이름을 가지고 있거나 사용 중이지만 명명할 수 없습니다.",
   "Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_private_module_1_4051": "내보낸 클래스에 있는 공용 정적 메서드의 반환 형식이 프라이빗 모듈 '{1}'의 '{0}' 이름을 가지고 있거나 사용 중입니다.",
   "Return_type_of_public_static_method_from_exported_class_has_or_is_using_private_name_0_4052": "내보낸 클래스에 있는 공용 정적 메서드의 반환 형식이 프라이빗 이름 '{0}'을(를) 가지고 있거나 사용 중입니다.",
-  "Reusing_module_resolutions_originating_in_0_since_resolutions_are_unchanged_from_old_program_6184": "이전 프로그램에서 변경되지 않았으므로 '{0}'에서 발생하는 모듈 확인을 다시 사용합니다.",
-  "Reusing_resolution_of_module_0_to_file_1_from_old_program_6183": "'{0}' 모듈 확인을 이전 프로그램의 '{1}' 파일에 다시 사용합니다.",
+  "Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_not_resolved_6395": "'{1}'에서 '{0}' 모듈의 해결 방법을 '{2}위치 '의 캐시에 다시 사용하는 중이었으므로 해결되지 않았습니다.",
+  "Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_6393": "위치 '{2}'의 캐시에 있는 '{1}'에서 '{0}' 모듈의 해결 방법을 다시 사용하는 중입니다. '{3}'(으)로 해결되었습니다.",
+  "Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_6394": "위치 '{2}'의 캐시에 있는 '{1}'에서 '{0}' 모듈의 해결 방법을 다시 사용하는 중입니다. 패키지 ID가 '{4}'인 '{3}'(으)로 해결되었습니다.",
+  "Reusing_resolution_of_module_0_from_1_of_old_program_it_was_not_resolved_6389": "이전 프로그램의 '{1}'에서 '{0}' 모듈의 해결 방법을 다시 사용하는 중이었으므로 확인되지 않았습니다.",
+  "Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2_6183": "이전 프로그램의 '{1}'에서 '{0}' 모듈의 해결 방법을 다시 사용 중이므로 '{2}'(으)로 해결되었습니다.",
+  "Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2_with_Package__6184": "이전 프로그램의 '{1}'에서 '{0}' 모듈의 해결 방법을 다시 사용 중이며 패키지 ID가 '{3}'인 '{2}'(으)로 해결되었습니다.",
+  "Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_not_re_6398": "위치 '{2}'의 캐시에 있는 '{1}'에서 형식 참조 지시문 '{0}'의 해결 방법을 다시 사용하는 중이며 해결되지 않았습니다.",
+  "Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_succes_6396": "위치 '{2}'의 캐시에 있는 '{1}'에서 형식 참조 지시문 '{0}'의 해결 방법을 다시 사용하는 중입니다. '{3}'(으)로 해결되었습니다.",
+  "Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_succes_6397": "위치 '{2}'의 캐시에 있는 '{1}'에서 형식 참조 지시문 '{0}'의 해결 방법을 다시 사용하는 중입니다. 패키지 ID가 '{4}'인 '{3}'(으)로 해결되었습니다.",
+  "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_not_resolved_6392": "이전 프로그램의 '{1}'에서 형식 참조 지시문 '{0}'의 해결 방법을 다시 사용 중이므로 해결되지 않았습니다.",
+  "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved__6390": "이전 프로그램의 '{1}'에서 형식 참조 지시문 '{0}'의 해결 방법을 다시 사용 중이며 '{2}'(으)로 해결되었습니다.",
+  "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved__6391": "이전 프로그램의 '{1}'에서 형식 참조 지시문 '{0}'의 해결 방법을 다시 사용 중이며 패키지 ID가 '{3}'인 '{2}'(으)로 해결되었습니다.",
   "Rewrite_all_as_indexed_access_types_95034": "인덱싱된 액세스 형식으로 모두 다시 작성",
   "Rewrite_as_the_indexed_access_type_0_90026": "인덱싱된 액세스 형식 '{0}'(으)로 다시 작성",
   "Root_directory_cannot_be_determined_skipping_primary_search_paths_6122": "루트 디렉터리를 확인할 수 없어 기본 검색 경로를 건너뜁니다.",
+  "Root_file_specified_for_compilation_1427": "컴파일을 위해 지정된 루트 파일",
   "STRATEGY_6039": "전략",
+  "Save_tsbuildinfo_files_to_allow_for_incremental_compilation_of_projects_6642": "프로젝트의 증분 컴파일을 허용하도록 .tsbuildinfo 파일을 저장합니다.",
   "Scoped_package_detected_looking_in_0_6182": "범위가 지정된 패키지가 검색되었습니다. '{0}'에서 찾습니다.",
+  "Selection_is_not_a_valid_statement_or_statements_95155": "선택 항목이 유효한 하나의 문 또는 여러 문이 아닙니다.",
   "Selection_is_not_a_valid_type_node_95133": "선택 영역이 유효한 형식 노드가 아닙니다.",
+  "Set_the_JavaScript_language_version_for_emitted_JavaScript_and_include_compatible_library_declaratio_6705": "내보낸 JavaScript의 JavaScript 언어 버전을 설정하고 호환되는 라이브러리 선언을 포함합니다.",
+  "Set_the_language_of_the_messaging_from_TypeScript_This_does_not_affect_emit_6654": "TypeScript에서 메시지 언어를 설정합니다. 이는 내보내기에 영향을 주지 않습니다.",
   "Set_the_module_option_in_your_configuration_file_to_0_95099": "구성 파일의 'module' 옵션을 '{0}'(으)로 설정",
+  "Set_the_newline_character_for_emitting_files_6659": "파일을 내보내기 위한 줄 바꿈 문자를 설정합니다.",
   "Set_the_target_option_in_your_configuration_file_to_0_95098": "구성 파일의 'target' 옵션을 '{0}'(으)로 설정",
   "Setters_cannot_return_a_value_2408": "Setter가 값을 반환할 수 없습니다.",
   "Show_all_compiler_options_6169": "모든 컴파일러 옵션을 표시합니다.",
@@ -1069,31 +1265,63 @@
   "Show_verbose_diagnostic_information_6150": "자세한 진단 정보를 표시합니다.",
   "Show_what_would_be_built_or_deleted_if_specified_with_clean_6367": "빌드될 항목 표시(또는 '--clean'으로 지정된 경우 삭제될 항목 표시)",
   "Signature_0_must_be_a_type_predicate_1224": "'{0}' 시그니처는 형식 조건자여야 합니다.",
+  "Skip_type_checking_all_d_ts_files_6693": "모든 .d.ts 파일의 형식 검사를 건너뜁니다.",
+  "Skip_type_checking_d_ts_files_that_are_included_with_TypeScript_6692": "TypeScript에 포함된 .d.ts 파일의 형식 검사를 건너뜁니다.",
   "Skip_type_checking_of_declaration_files_6012": "선언 파일 형식 검사를 건너뜁니다.",
   "Skipping_build_of_project_0_because_its_dependency_1_has_errors_6362": "'{0}' 프로젝트의 빌드는 '{1}' 종속성에 오류가 있기 때문에 건너뜁니다.",
   "Skipping_build_of_project_0_because_its_dependency_1_was_not_built_6382": "'{1}' 종속성이 빌드되지 않았기 때문에 '{0}' 프로젝트의 빌드를 건너뛰는 중",
-  "Source_Map_Options_6175": "소스 맵 옵션",
+  "Source_from_referenced_project_0_included_because_1_specified_1414": "'{1}'이(가) 지정되었기 때문에 참조된 프로젝트 '{0}'의 소스가 포함됩니다.",
+  "Source_from_referenced_project_0_included_because_module_is_specified_as_none_1415": "'--module'이 'none'으로 지정되었기 때문에 참조된 프로젝트 '{0}'의 소스가 포함됩니다.",
   "Source_has_0_element_s_but_target_allows_only_1_2619": "소스에 {0}개 요소가 있지만, 대상에서 {1}개만 허용합니다.",
   "Source_has_0_element_s_but_target_requires_1_2618": "소스에 {0}개 요소가 있지만, 대상에 {1}개가 필요합니다.",
+  "Source_provides_no_match_for_required_element_at_position_0_in_target_2623": "소스가 대상에 있는 {0} 위치의 필수 요소와 일치하는 항목을 제공하지 않습니다.",
+  "Source_provides_no_match_for_variadic_element_at_position_0_in_target_2624": "소스가 대상에 있는 {0} 위치의 가변 인자 요소와 일치하는 항목을 제공하지 않습니다.",
   "Specialized_overload_signature_is_not_assignable_to_any_non_specialized_signature_2382": "특수화된 오버로드 시그니처는 특수화되지 않은 서명에 할당할 수 없습니다.",
   "Specifier_of_dynamic_import_cannot_be_spread_element_1325": "동적 가져오기의 지정자는 스프레드 요소일 수 없습니다.",
-  "Specify_ECMAScript_target_version_Colon_ES3_default_ES5_ES2015_ES2016_ES2017_ES2018_ES2019_ES2020_or_6015": "ECMAScript 대상 버전 지정: 'ES3'(기본값), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019', 'ES2020' 또는 'ESNEXT'.",
-  "Specify_JSX_code_generation_Colon_preserve_react_native_or_react_6080": "JSX 코드 생성 'preserve', 'react-native' 또는 'react'를 지정합니다.",
-  "Specify_emit_Slashchecking_behavior_for_imports_that_are_only_used_for_types_1368": "형식에만 사용되는 가져오기의 내보내기/확인 동작 지정",
+  "Specify_ECMAScript_target_version_6015": "ECMAScript 대상 버전을 지정합니다.",
+  "Specify_JSX_code_generation_6080": "JSX 코드 생성을 지정합니다.",
+  "Specify_a_file_that_bundles_all_outputs_into_one_JavaScript_file_If_declaration_is_true_also_designa_6679": "모든 출력을 하나의 JavaScript 파일에 번들로 제공하는 파일을 지정합니다. 'declaration'이 true이면 모든 .d.ts 출력을 번들로 제공하는 파일도 지정합니다.",
+  "Specify_a_list_of_glob_patterns_that_match_files_to_be_included_in_compilation_6641": "컴파일에 포함할 파일과 일치하는 GLOB 패턴 목록을 지정합니다.",
+  "Specify_a_list_of_language_service_plugins_to_include_6681": "포함할 언어 서비스 플러그 인 목록을 지정합니다.",
+  "Specify_a_set_of_bundled_library_declaration_files_that_describe_the_target_runtime_environment_6651": "대상 런타임 환경을 설명하는 번들 라이브러리 선언 파일 세트를 지정합니다.",
+  "Specify_a_set_of_entries_that_re_map_imports_to_additional_lookup_locations_6680": "추가 검색 위치로 가져오기를 다시 매핑할 항목 집합을 지정합니다.",
+  "Specify_an_array_of_objects_that_specify_paths_for_projects_Used_in_project_references_6687": "프로젝트의 경로를 지정하는 개체 배열을 지정합니다. 프로젝트 참조에 사용됩니다.",
+  "Specify_an_output_folder_for_all_emitted_files_6678": "내보낸 모든 파일의 출력 폴더를 지정합니다.",
+  "Specify_emit_Slashchecking_behavior_for_imports_that_are_only_used_for_types_6718": "형식에만 사용되는 가져오기의 내보내기/확인 동작 지정",
   "Specify_file_to_store_incremental_compilation_information_6380": "증분 컴파일 정보를 저장할 파일 지정",
+  "Specify_how_TypeScript_looks_up_a_file_from_a_given_module_specifier_6658": "TypeScript가 지정된 모듈 지정자에서 파일을 검색하는 방법을 지정합니다.",
+  "Specify_how_directories_are_watched_on_systems_that_lack_recursive_file_watching_functionality_6714": "재귀 파일 감시 기능이 없는 시스템에서 디렉터리를 감시하는 방법을 지정합니다.",
+  "Specify_how_the_TypeScript_watch_mode_works_6715": "TypeScript 감시 모드의 작동 방식을 지정합니다.",
   "Specify_library_files_to_be_included_in_the_compilation_6079": "컴파일에 포함할 라이브러리 파일을 지정합니다.",
-  "Specify_module_code_generation_Colon_none_commonjs_amd_system_umd_es2015_es2020_or_ESNext_6016": "모듈 코드 생성 지정: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', 'es2020' 또는 'ESNext'.",
+  "Specify_module_code_generation_6016": "모듈 코드 생성을 지정합니다.",
   "Specify_module_resolution_strategy_Colon_node_Node_js_or_classic_TypeScript_pre_1_6_6069": "모듈 확인 전략 지정: 'node'(Node.js) 또는 'classic'(TypeScript 1.6 이전).",
-  "Specify_strategy_for_creating_a_polling_watch_when_it_fails_to_create_using_file_system_events_Colon_6227": "파일 시스템 이벤트를 사용하여 만들지 못할 경우 폴링 조사식을 만들기 위한 전략 지정: 'FixedInterval'(기본값), 'PriorityInterval', 'DynamicPriority'.",
-  "Specify_strategy_for_watching_directory_on_platforms_that_don_t_support_recursive_watching_natively__6226": "기본적으로 재귀 감시를 지원하지 않는 플랫폼에서 디렉터리를 감시하기 위한 전략 지정: 'UseFsEvents'(기본값), 'FixedPollingInterval', 'DynamicPriorityPolling'.",
-  "Specify_strategy_for_watching_file_Colon_FixedPollingInterval_default_PriorityPollingInterval_Dynami_6225": "파일을 감시하기 위한 전략 지정: 'FixedPollingInterval'(기본값), 'PriorityPollingInterval', 'DynamicPriorityPolling', 'UseFsEvents', 'UseFsEventsOnParentDirectory'.",
+  "Specify_module_specifier_used_to_import_the_JSX_factory_functions_when_using_jsx_Colon_react_jsx_Ast_6649": "'jsx: react-jsx*'를 사용할 때 JSX 팩터리 함수를 가져오는 데 사용되는 모듈 지정자를 지정합니다.",
+  "Specify_multiple_folders_that_act_like_Slashnode_modules_Slash_types_6710": "'./node_modules/@types'와 같은 역할을 하는 여러 폴더를 지정합니다.",
+  "Specify_one_or_more_path_or_node_module_references_to_base_configuration_files_from_which_settings_a_6633": "설정이 상속되는 기본 구성 파일에 대한 하나 이상의 경로 또는 노드 모듈 참조를 지정합니다.",
+  "Specify_options_for_automatic_acquisition_of_declaration_files_6709": "선언 파일의 자동 인식 옵션을 지정합니다.",
+  "Specify_strategy_for_creating_a_polling_watch_when_it_fails_to_create_using_file_system_events_Colon_6227": "파일 시스템 이벤트를 사용하여 만들지 못할 경우 폴링 조사식을 만들기 위한 전략 지정: 'FixedInterval'(기본값), 'PriorityInterval', 'DynamicPriority', 'FixedChunkSize'.",
+  "Specify_strategy_for_watching_directory_on_platforms_that_don_t_support_recursive_watching_natively__6226": "기본적으로 재귀 감시를 지원하지 않는 플랫폼에서 디렉터리를 감시하기 위한 전략 지정: 'UseFsEvents'(기본값), 'FixedPollingInterval', 'DynamicPriorityPolling', 'FixedChunkSizePolling'.",
+  "Specify_strategy_for_watching_file_Colon_FixedPollingInterval_default_PriorityPollingInterval_Dynami_6225": "파일을 감시하기 위한 전략 지정: 'FixedPollingInterval'(기본값), 'PriorityPollingInterval', 'DynamicPriorityPolling', 'FixedChunkSizePolling', 'UseFsEvents', 'UseFsEventsOnParentDirectory'.",
+  "Specify_the_JSX_Fragment_reference_used_for_fragments_when_targeting_React_JSX_emit_e_g_React_Fragme_6648": "React JSX 내보내기를 대상으로 할 때 조각에 사용되는 JSX 조각 참조를 지정합니다(예: 'React.Fragment' 또는 'Fragment').",
   "Specify_the_JSX_factory_function_to_use_when_targeting_react_JSX_emit_e_g_React_createElement_or_h_6146": "'react' JSX 내보내기를 대상으로 하는 경우 사용할 JSX 팩터리 함수를 지정합니다(예: 'React.createElement' 또는 'h').",
+  "Specify_the_JSX_factory_function_used_when_targeting_React_JSX_emit_e_g_React_createElement_or_h_6647": "React JSX 내보내기를 대상으로 할 때 사용되는 JSX 팩터리 함수를 지정합니다(예: 'React.createElement' 또는 'h').",
   "Specify_the_JSX_fragment_factory_function_to_use_when_targeting_react_JSX_emit_with_jsxFactory_compi_18034": "'JsxFactory' 컴파일러 옵션이 지정된 상태로 'react' JSX 내보내기를 대상으로 설정할 때 사용할 JSX 조각 팩터리 함수를 지정합니다(예: 'Fragment').",
+  "Specify_the_base_directory_to_resolve_non_relative_module_names_6607": "상대적이지 않은 모듈 이름을 확인할 기본 디렉터리를 지정합니다.",
   "Specify_the_end_of_line_sequence_to_be_used_when_emitting_files_Colon_CRLF_dos_or_LF_unix_6060": "파일을 내보낼 때 사용할 줄 시퀀스의 끝 지정: 'CRLF'(dos) 또는 'LF'(unix).",
+  "Specify_the_folder_for_tsbuildinfo_incremental_compilation_files_6707": ".tsbuildinfo 증분 컴파일 파일의 폴더를 지정합니다.",
   "Specify_the_location_where_debugger_should_locate_TypeScript_files_instead_of_source_locations_6004": "소스 위치 대신 디버거가 TypeScript 파일을 찾아야 하는 위치를 지정하세요.",
-  "Specify_the_location_where_debugger_should_locate_map_files_instead_of_generated_locations_6003": "생성된 위치 대신 디버거가 맵 파일을 찾아야 하는 위치를 지정하세요.",
-  "Specify_the_module_specifier_to_be_used_to_import_the_jsx_and_jsxs_factory_functions_from_eg_react_6238": "`jsx` 및 `jsxs` 팩터리 함수를 가져오는 데 사용할 모듈 지정자를 지정합니다(예: react).",
+  "Specify_the_location_where_debugger_should_locate_map_files_instead_of_generated_locations_6655": "생성된 위치 대신 디버거가 맵 파일을 찾아야 하는 위치를 지정하세요.",
+  "Specify_the_maximum_folder_depth_used_for_checking_JavaScript_files_from_node_modules_Only_applicabl_6656": "'node_modules'에서 JavaScript 파일을 확인하는 데 사용되는 최대 폴더 깊이를 지정합니다. 'allowJs'에만 적용됩니다.",
+  "Specify_the_module_specifier_to_be_used_to_import_the_jsx_and_jsxs_factory_functions_from_eg_react_6238": "'jsx' 및 'jsxs' 팩터리 함수를 가져오는 데 사용할 모듈 지정자를 지정합니다(예: react).",
+  "Specify_the_object_invoked_for_createElement_This_only_applies_when_targeting_react_JSX_emit_6686": "'createElement'에 대해 호출된 개체를 지정합니다. 이는 'react' JSX 내보내기를 대상으로 할 때만 적용됩니다.",
+  "Specify_the_output_directory_for_generated_declaration_files_6613": "생성된 선언 파일의 출력 디렉터리를 지정합니다.",
   "Specify_the_root_directory_of_input_files_Use_to_control_the_output_directory_structure_with_outDir_6058": "입력 파일의 루트 디렉터리를 지정하세요. --outDir이 포함된 출력 디렉터리 구조를 제어하는 데 사용됩니다.",
+  "Specify_the_root_folder_within_your_source_files_6690": "소스 파일 내에서 루트 폴더를 지정합니다.",
+  "Specify_the_root_path_for_debuggers_to_find_the_reference_source_code_6695": "디버거의 루트 경로를 지정하여 참조 소스 코드를 찾습니다.",
+  "Specify_type_package_names_to_be_included_without_being_referenced_in_a_source_file_6711": "소스 파일에서 참조하지 않고 포함할 형식 패키지 이름을 지정합니다.",
+  "Specify_what_JSX_code_is_generated_6646": "생성되는 JSX 코드를 지정합니다.",
+  "Specify_what_approach_the_watcher_should_use_if_the_system_runs_out_of_native_file_watchers_6634": "시스템에 원시 파일 감시자가 부족한 경우 감시자가 사용해야 하는 접근 방법을 지정합니다.",
+  "Specify_what_module_code_is_generated_6657": "생성되는 모듈 코드를 지정합니다.",
   "Split_all_invalid_type_only_imports_1367": "잘못된 형식 전용 가져오기 모두 분할",
   "Split_into_two_separate_import_declarations_1366": "두 개의 개별 가져오기 선언으로 분할",
   "Spread_operator_in_new_expressions_is_only_available_when_targeting_ECMAScript_5_and_higher_2472": "'new' 식에서 Spread 연산자는 ECMAScript 5 이상을 대상으로 하는 경우에만 사용할 수 있습니다.",
@@ -1101,9 +1329,9 @@
   "Starting_compilation_in_watch_mode_6031": "감시 모드에서 컴파일을 시작하는 중...",
   "Statement_expected_1129": "문이 필요합니다.",
   "Statements_are_not_allowed_in_ambient_contexts_1036": "앰비언트 컨텍스트에서는 문이 허용되지 않습니다.",
+  "Static_fields_with_private_names_can_t_have_initializers_when_the_useDefineForClassFields_flag_is_no_2805": "'--useDefineForClassFields' 플래그가 'esnext'의 '--target'과 함께 지정되지 않은 경우 프라이빗 이름을 가진 정적 필드는 이니셜라이저를 포함할 수 없습니다. '--useDefineForClassFields' 플래그를 추가하는 것이 좋습니다.",
   "Static_members_cannot_reference_class_type_parameters_2302": "정적 멤버는 클래스 형식 매개 변수를 참조할 수 없습니다.",
   "Static_property_0_conflicts_with_built_in_property_Function_0_of_constructor_function_1_2699": "정적 속성 '{0}'이(가) 생성자 함수 '{1}'의 기본 제공 속성 'Function.{0}'과(와) 충돌합니다.",
-  "Strict_Type_Checking_Options_6173": "엄격한 형식 검사 옵션",
   "String_literal_expected_1141": "문자열 리터럴이 필요합니다.",
   "String_literal_with_double_quotes_expected_1327": "큰따옴표로 묶은 문자열 리터럴이 필요합니다.",
   "Stylize_errors_and_messages_using_color_and_context_experimental_6073": "색과 컨텍스트를 사용하여 오류 및 메시지를 스타일화합니다(실험적).",
@@ -1117,9 +1345,10 @@
   "Super_calls_are_not_permitted_outside_constructors_or_in_nested_functions_inside_constructors_2337": "생성자 밖이나 생성자 내부에 중첩된 함수에서는 Super 호출이 허용되지 않습니다.",
   "Suppress_excess_property_checks_for_object_literals_6072": "개체 리터럴에 대한 초과 속성 검사를 생략합니다.",
   "Suppress_noImplicitAny_errors_for_indexing_objects_lacking_index_signatures_6055": "인덱스 시그니처가 없는 개체 인덱싱에 대한 noImplicitAny 오류를 표시하지 않습니다.",
+  "Suppress_noImplicitAny_errors_when_indexing_objects_that_lack_index_signatures_6703": "인덱스 시그니처가 없는 개체를 인덱싱할 때 'noImplicitAny' 오류를 표시하지 않습니다.",
   "Switch_each_misused_0_to_1_95138": "잘못 사용된 각 '{0}'을(를) '{1}'(으)로 전환",
   "Symbol_reference_does_not_refer_to_the_global_Symbol_constructor_object_2470": "'기호' 참조에서 전역 기호 생성자 개체를 참조하지 않습니다.",
-  "Synchronously_call_callbacks_and_update_the_state_of_directory_watchers_on_platforms_that_don_t_supp_6228": "비동기적으로 콜백을 호출하며 기본적으로 재귀 조사를 지원하지 않는 플랫폼에서 디렉터리 감시자의 상태를 업데이트합니다.",
+  "Synchronously_call_callbacks_and_update_the_state_of_directory_watchers_on_platforms_that_don_t_supp_6704": "기본적으로 재귀 감시를 지원하지 않는 플랫폼에서 동기적으로 콜백을 호출하고 디렉터리 감시자의 상태를 업데이트합니다.",
   "Syntax_Colon_0_6023": "구문: {0}",
   "Tag_0_expects_at_least_1_arguments_but_the_JSX_factory_2_provides_at_most_3_6229": "'{0}' 태그는 '{1}'개 이상의 인수가 필요한데 JSX 팩터리 '{2}'이(가) 최대 '{3}'개를 제공합니다.",
   "Tagged_template_expressions_are_not_permitted_in_an_optional_chain_1358": "태그가 지정된 템플릿 식은 선택적 체인에서 사용할 수 없습니다.",
@@ -1134,17 +1363,19 @@
   "The_arguments_object_cannot_be_referenced_in_an_arrow_function_in_ES3_and_ES5_Consider_using_a_stand_2496": "'arguments' 개체는 ES3 및 ES5의 화살표 함수에서 참조할 수 없습니다. 표준 함수 식을 사용해 보세요.",
   "The_arguments_object_cannot_be_referenced_in_an_async_function_or_method_in_ES3_and_ES5_Consider_usi_2522": "'arguments' 개체는 ES3 및 ES5의 비동기 함수 또는 메서드에서 참조할 수 없습니다. 표준 함수 또는 메서드를 사용해 보세요.",
   "The_body_of_an_if_statement_cannot_be_the_empty_statement_1313": "'if' 문의 본문이 빈 문이면 안 됩니다.",
-  "The_bundledPackageName_option_must_be_provided_when_using_outFile_and_node_module_resolution_with_de_1391": "선언 내보내기에 outFile 및 노드 모듈 확인을 사용하는 경우 `bundledPackageName` 옵션을 제공해야 합니다.",
+  "The_bundledPackageName_option_must_be_provided_when_using_outFile_and_node_module_resolution_with_de_1391": "선언 내보내기에 outFile 및 노드 모듈 확인을 사용하는 경우 'bundledPackageName' 옵션을 제공해야 합니다.",
   "The_call_would_have_succeeded_against_this_implementation_but_implementation_signatures_of_overloads_2793": "이 구현에 대한 호출이 성공하겠지만, 오버로드의 구현 시그니처는 외부에 표시되지 않습니다.",
   "The_character_set_of_the_input_files_6163": "입력 파일의 문자 집합입니다.",
   "The_containing_arrow_function_captures_the_global_value_of_this_7041": "포함하는 화살표 함수는 'this'의 전역 값을 캡처합니다.",
   "The_containing_function_or_module_body_is_too_large_for_control_flow_analysis_2563": "제어 흐름 분석에 대해 포함된 함수 또는 모듈 본문이 너무 큽니다.",
   "The_current_host_does_not_support_the_0_option_5001": "현재 호스트가 '{0}' 옵션을 지원하지 않습니다.",
   "The_declaration_of_0_that_you_probably_intended_to_use_is_defined_here_18018": "사용하려는 '{0}'의 선언이 여기서 정의됩니다.",
+  "The_declaration_was_marked_as_deprecated_here_2798": "선언이 여기에 사용되지 않음으로 표시되었습니다.",
   "The_expected_type_comes_from_property_0_which_is_declared_here_on_type_1_6500": "필요한 형식은 여기에서 '{1}' 형식에 선언된 '{0}' 속성에서 가져옵니다.",
   "The_expected_type_comes_from_the_return_type_of_this_signature_6502": "필요한 형식은 이 시그니처의 반환 형식에서 가져옵니다.",
   "The_expected_type_comes_from_this_index_signature_6501": "필요한 형식은 이 인덱스 시그니처에서 가져옵니다.",
   "The_expression_of_an_export_assignment_must_be_an_identifier_or_qualified_name_in_an_ambient_context_2714": "내보내기 할당의 식은 앰비언트 컨텍스트의 식별자 또는 정규화된 이름이어야 합니다.",
+  "The_file_is_in_the_program_because_Colon_1430": "파일은 다음과 같은 이유로 프로그램에 있습니다.",
   "The_files_list_in_config_file_0_is_empty_18002": "'{0}' 구성 파일의 '파일' 목록이 비어 있습니다.",
   "The_first_export_default_is_here_2752": "첫 번째 내보내기 기본값은 여기에 있습니다.",
   "The_first_parameter_of_the_then_method_of_a_promise_must_be_a_callback_1060": "프라미스에서 'then' 메서드의 첫 번째 매개 변수는 콜백이어야 합니다.",
@@ -1168,6 +1399,7 @@
   "The_left_hand_side_of_a_for_in_statement_must_be_of_type_string_or_any_2405": "'for...in' 문의 왼쪽은 'string' 또는 'any' 형식이어야 합니다.",
   "The_left_hand_side_of_a_for_of_statement_cannot_use_a_type_annotation_2483": "'for...of' 문의 왼쪽에는 형식 주석을 사용할 수 없습니다.",
   "The_left_hand_side_of_a_for_of_statement_may_not_be_an_optional_property_access_2781": "'for...of' 문의 왼쪽은 선택적 속성 액세스일 수 없습니다.",
+  "The_left_hand_side_of_a_for_of_statement_may_not_be_async_1106": "'for...of' 문의 왼쪽은 'async'일 수 없습니다.",
   "The_left_hand_side_of_a_for_of_statement_must_be_a_variable_or_a_property_access_2487": "'for...of' 문의 왼쪽은 변수 또는 속성 액세스여야 합니다.",
   "The_left_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type_2362": "산술 연산의 왼쪽은 'any', 'number', 'bigint' 또는 열거형 형식이어야 합니다.",
   "The_left_hand_side_of_an_assignment_expression_may_not_be_an_optional_property_access_2779": "할당 식의 왼쪽은 선택적 속성 액세스일 수 없습니다.",
@@ -1185,15 +1417,18 @@
   "The_parser_expected_to_find_a_to_match_the_token_here_1007": "여기서 파서는 '{' 토큰과 일치하는 '}'를 찾아야 합니다.",
   "The_property_0_cannot_be_accessed_on_type_1_within_this_class_because_it_is_shadowed_by_another_priv_18014": "철자가 동일한 다른 프라이빗 식별자에서 섀도 처리되기 때문에 이 클래스 내의 '{1}' 형식에서 '{0}' 속성에 액세스할 수 없습니다.",
   "The_return_type_of_a_JSX_element_constructor_must_return_an_object_type_2601": "JSX 요소 생성자의 반환 형식은 개체 형식을 반환해야 합니다.",
+  "The_return_type_of_a_get_accessor_must_be_assignable_to_its_set_accessor_type_2380": "'get' 접근자의 반환 형식은 'set' 접근자 형식에 할당할 수 있어야 합니다.",
   "The_return_type_of_a_parameter_decorator_function_must_be_either_void_or_any_1237": "매개 변수 데코레이터 함수의 반환 형식은 'void' 또는 'any'여야 합니다.",
   "The_return_type_of_a_property_decorator_function_must_be_either_void_or_any_1236": "속성 데코레이터 함수의 반환 형식은 'void' 또는 'any'여야 합니다.",
   "The_return_type_of_an_async_function_must_either_be_a_valid_promise_or_must_not_contain_a_callable_t_1058": "비동기 함수의 반환 형식은 유효한 프라미스여야 하거나 호출 가능 'then' 멤버를 포함하지 않아야 합니다.",
   "The_return_type_of_an_async_function_or_method_must_be_the_global_Promise_T_type_Did_you_mean_to_wri_1064": "비동기 함수 또는 메서드의 반환 형식은 전역 Promise<T> 형식이어야 합니다. 'Promise<{0}>'을(를) 쓰려고 했습니까?",
   "The_right_hand_side_of_a_for_in_statement_must_be_of_type_any_an_object_type_or_a_type_parameter_but_2407": "'for...in' 문 오른쪽은 'any' 형식, 개체 형식 또는 형식 매개 변수여야 하는데, 여기에 '{0}' 형식이 있습니다.",
   "The_right_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type_2363": "산술 연산 오른쪽은 'any', 'number', 'bigint' 또는 열거형 형식이어야 합니다.",
-  "The_right_hand_side_of_an_in_expression_must_be_of_type_any_an_object_type_or_a_type_parameter_2361": "'in' 식의 오른쪽은 'any' 형식, 개체 형식 또는 형식 매개 변수여야 합니다.",
+  "The_right_hand_side_of_an_in_expression_must_not_be_a_primitive_2361": "'in' 식의 오른쪽은 기본 형식이 아니어야 합니다.",
   "The_right_hand_side_of_an_instanceof_expression_must_be_of_type_any_or_of_a_type_assignable_to_the_F_2359": "'instanceof' 식 오른쪽은 'any' 형식이거나 'Function' 인터페이스 형식에 할당할 수 있는 형식이어야 합니다.",
+  "The_root_value_of_a_0_file_must_be_an_object_5092": "'{0}' 파일의 루트 값은 개체여야 합니다.",
   "The_shadowing_declaration_of_0_is_defined_here_18017": "여기서는 '{0}'의 섀도 선언이 정의됩니다.",
+  "The_signature_0_of_1_is_deprecated_6387": "'{1}'의 시그니처 '{0}'은(는) 사용되지 않습니다.",
   "The_specified_path_does_not_exist_Colon_0_5058": "지정된 경로가 없습니다. '{0}'.",
   "The_tag_was_first_specified_here_8034": "태그가 처음에 여기에 지정되었습니다.",
   "The_target_of_an_assignment_must_be_a_variable_or_a_property_access_2541": "할당의 대상은 변수 또는 속성 액세스여야 합니다.",
@@ -1204,6 +1439,7 @@
   "The_type_0_is_readonly_and_cannot_be_assigned_to_the_mutable_type_1_4104": "'{0}' 형식은 'readonly'이며 변경 가능한 형식 '{1}'에 할당할 수 없습니다.",
   "The_type_argument_for_type_parameter_0_cannot_be_inferred_from_the_usage_Consider_specifying_the_typ_2453": "사용량에서 형식 매개 변수 '{0}'의 형식 인수를 유추할 수 없습니다. 형식 인수를 명시적으로 지정하세요.",
   "The_type_of_a_function_declaration_must_match_the_function_s_signature_8030": "함수 선언의 형식은 함수의 시그니처와 일치해야 합니다.",
+  "The_type_of_this_node_cannot_be_serialized_because_its_property_0_cannot_be_serialized_4118": "속성 '{0}'을(를) 직렬화할 수 없기 때문에 이 노드의 유형을 직렬화할 수 없습니다.",
   "The_type_returned_by_the_0_method_of_an_async_iterator_must_be_a_promise_for_a_type_with_a_value_pro_2547": "비동기 반복기의 '{0}()' 메서드에서 반환하는 형식은 'value' 속성이 있는 형식에 대한 프라미스여야 합니다.",
   "The_type_returned_by_the_0_method_of_an_iterator_must_have_a_value_property_2490": "반복기의 '{0}()' 메서드에 의해 반환되는 형식에는 'value' 속성이 있어야 합니다.",
   "The_types_of_0_are_incompatible_between_these_types_2200": "'{0}'의 형식은 해당 형식 간에 호환되지 않습니다.",
@@ -1214,7 +1450,8 @@
   "This_JSX_tag_s_0_prop_expects_a_single_child_of_type_1_but_multiple_children_were_provided_2746": "이 JSX 태그의 '{0}' 속성에는 '{1}' 형식의 자식 하나가 필요하지만, 여러 자식이 제공되었습니다.",
   "This_JSX_tag_s_0_prop_expects_type_1_which_requires_multiple_children_but_only_a_single_child_was_pr_2745": "이 JSX 태그의 '{0}' 속성에는 여러 자식이 있어야 하는 '{1}' 형식이 필요하지만, 단일 자식만 제공되었습니다.",
   "This_condition_will_always_return_0_since_the_types_1_and_2_have_no_overlap_2367": "'{1}' 및 '{2}' 형식에 겹침이 없기 때문에 이 조건은 항상 '{0}'을(를) 반환합니다.",
-  "This_condition_will_always_return_true_since_the_function_is_always_defined_Did_you_mean_to_call_it__2774": "함수가 항상 정의되므로 이 조건은 항상 true를 반환합니다. 대신 호출하시겠습니까?",
+  "This_condition_will_always_return_true_since_this_0_is_always_defined_2801": "이 '{0}'(은)는 항상 정의되어 있으므로 이 조건은 항상 true를 반환합니다.",
+  "This_condition_will_always_return_true_since_this_function_is_always_defined_Did_you_mean_to_call_it_2774": "함수가 항상 정의되므로 이 조건은 항상 true를 반환합니다. 대신 호출하시겠어요?",
   "This_constructor_function_may_be_converted_to_a_class_declaration_80002": "이 생성자 함수는 클래스 선언으로 변환될 수 있습니다.",
   "This_expression_is_not_callable_2349": "이 식은 호출할 수 없습니다.",
   "This_expression_is_not_callable_because_it_is_a_get_accessor_Did_you_mean_to_use_it_without_6234": "이 식은 'get' 접근자이므로 호출할 수 없습니다. '()' 없이 사용하시겠습니까?",
@@ -1223,15 +1460,23 @@
   "This_import_is_never_used_as_a_value_and_must_use_import_type_because_importsNotUsedAsValues_is_set__1371": "이 가져오기는 값으로 사용되지 않으며 'importsNotUsedAsValues'가 'error'로 설정되어 있기 때문에 'import type'을 사용해야 합니다.",
   "This_is_the_declaration_being_augmented_Consider_moving_the_augmenting_declaration_into_the_same_fil_6233": "확대되는 선언입니다. 확대하는 선언을 같은 파일로 이동하는 것이 좋습니다.",
   "This_may_be_converted_to_an_async_function_80006": "비동기 함수로 변환될 수 있습니다.",
+  "This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0_4113": "이 멤버는 기본 클래스 '{0}'에 선언되지 않았으므로 'override' 한정자를 포함할 수 없습니다.",
+  "This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0_Did_you__4117": "이 멤버는 기본 클래스 '{0}'에 선언되지 않았으므로 'override' 한정자를 포함할 수 없습니다. '{1}'였습니까?",
+  "This_member_cannot_have_an_override_modifier_because_its_containing_class_0_does_not_extend_another__4112": "이 멤버는 포함하는 클래스 '{0}'이(가) 다른 클래스를 확장하지 않으므로 'override' 한정자를 포함할 수 없습니다.",
+  "This_member_must_have_an_override_modifier_because_it_overrides_a_member_in_the_base_class_0_4114": "이 멤버는 기본 클래스 '{0}'의 멤버를 재정의하므로 'override' 한정자를 포함해야 합니다.",
+  "This_member_must_have_an_override_modifier_because_it_overrides_an_abstract_method_that_is_declared__4116": "이 멤버는 기본 클래스 '{0}'에 선언된 추상 메서드를 재정의하므로 'override' 한정자를 포함해야 합니다.",
   "This_module_can_only_be_referenced_with_ECMAScript_imports_Slashexports_by_turning_on_the_0_flag_and_2497": "이 모듈은 '{0}' 플래그를 켜고 기본 내보내기를 참조하여 ECMAScript 가져오기/내보내기를 통해서만 참조할 수 있습니다.",
   "This_module_is_declared_with_using_export_and_can_only_be_used_with_a_default_import_when_using_the__2594": "이 모듈은 'export ='를 사용하여 선언되었으며 '{0}' 플래그를 사용하는 경우에만 기본 가져오기와 함께 사용할 수 있습니다.",
   "This_overload_signature_is_not_compatible_with_its_implementation_signature_2394": "이 오버로드 시그니처는 해당 구현 시그니처와 호환되지 않습니다.",
   "This_parameter_is_not_allowed_with_use_strict_directive_1346": "이 매개 변수는 'use strict' 지시문에서 사용할 수 없습니다.",
+  "This_parameter_property_must_have_an_override_modifier_because_it_overrides_a_member_in_base_class_0_4115": "이 매개 변수 속성은 기본 클래스 '{0}'의 멤버를 재정의하므로 'override' 한정자를 포함해야 합니다.",
   "This_spread_always_overwrites_this_property_2785": "이 스프레드는 항상 이 속성을 덮어씁니다.",
   "This_syntax_requires_an_imported_helper_but_module_0_cannot_be_found_2354": "이 구문에는 가져온 도우미가 필요하지만 '{0}' 모듈을 찾을 수 없습니다.",
   "This_syntax_requires_an_imported_helper_named_1_which_does_not_exist_in_0_Consider_upgrading_your_ve_2343": "이 구문에는 '{0}'에 없는 '{1}'(이)라는 가져온 도우미가 필요합니다. '{0}'의 버전을 업그레이드하는 것이 좋습니다.",
+  "This_syntax_requires_an_imported_helper_named_1_with_2_parameters_which_is_not_compatible_with_the_o_2807": "이 구문에는 {2} 매개 변수가 포함된 '{1}'(이)라는 가져온 도우미가 필요하지만, 이 도우미는 '{0}'에 있는 도우미와 호환되지 않습니다. '{0}' 버전을 업그레이드하는 것이 좋습니다.",
   "Top_level_await_expressions_are_only_allowed_when_the_module_option_is_set_to_esnext_or_system_and_t_1378": "최상위 수준 'await' 식은 'module' 옵션이 'esnext' 또는 'system'으로 설정되고 'target' 옵션이 'es2017' 이상으로 설정된 경우에만 사용할 수 있습니다.",
   "Top_level_declarations_in_d_ts_files_must_start_with_either_a_declare_or_export_modifier_1046": ".d.ts 파일의 최상위 수준 선언은 'declare' 또는 'export' 한정자로 시작해야 합니다.",
+  "Top_level_for_await_loops_are_only_allowed_when_the_module_option_is_set_to_esnext_or_system_and_the_1432": "최상위 'for await' 루프는 'module' 옵션이 'esnext' 또는 'system'으로 설정되고 'target' 옵션이 'es2017' 이상으로 설정된 경우에만 사용할 수 있습니다.",
   "Trailing_comma_not_allowed_1009": "후행 쉼표는 허용되지 않습니다.",
   "Transpile_each_file_as_a_separate_module_similar_to_ts_transpileModule_6153": "각 파일을 별도 모듈로 변환 컴파일합니다('ts.transpileModule'과 유사).",
   "Try_npm_i_save_dev_types_Slash_1_if_it_exists_or_add_a_new_declaration_d_ts_file_containing_declare__7035": "해당 항목이 있는 경우 'npm i --save-dev @types/{1}'을(를) 시도하거나, 'declare module '{0}';'을(를) 포함하는 새 선언(.d.ts) 파일 추가",
@@ -1240,6 +1485,7 @@
   "Tuple_members_must_all_have_names_or_all_not_have_names_5084": "튜플 멤버는 모두 이름이 있거나 모두 이름이 없어야 합니다.",
   "Tuple_type_0_of_length_1_has_no_element_at_index_2_2493": "길이가 '{1}'인 튜플 형식 '{0}'의 인덱스 '{2}'에 요소가 없습니다.",
   "Tuple_type_arguments_circularly_reference_themselves_4110": "튜플 형식 인수가 자신을 순환 참조합니다.",
+  "Type_0_can_only_be_iterated_through_when_using_the_downlevelIteration_flag_or_with_a_target_of_es201_2802": "'{0}' 형식은 '--downlevelIteration' 플래그 또는 'es2015' 이상의 '--target'을 사용하는 경우에만 반복할 수 있습니다.",
   "Type_0_cannot_be_used_as_an_index_type_2538": "'{0}' 형식을 인덱스 형식으로 사용할 수 없습니다.",
   "Type_0_cannot_be_used_to_index_type_1_2536": "'{0}' 형식을 인덱스 형식 '{1}'에 사용할 수 없습니다.",
   "Type_0_does_not_satisfy_the_constraint_1_2344": "'{0}' 형식이 '{1}' 제약 조건을 만족하지 않습니다.",
@@ -1264,7 +1510,9 @@
   "Type_0_must_have_a_Symbol_iterator_method_that_returns_an_iterator_2488": "'{0}' 형식에는 반복기를 반환하는 '[Symbol.iterator]()' 메서드가 있어야 합니다.",
   "Type_0_provides_no_match_for_the_signature_1_2658": "'{0}' 형식에서 '{1}' 시그니처에 대한 일치하는 항목을 제공하지 않습니다.",
   "Type_0_recursively_references_itself_as_a_base_type_2310": "Type '{0}' 형식은 자기 자신을 기본 형식으로 재귀적으로 참조합니다.",
+  "Type_Checking_6248": "형식 검사",
   "Type_alias_0_circularly_references_itself_2456": "'{0}' 형식 별칭은 순환적으로 자신을 참조합니다.",
+  "Type_alias_must_be_given_a_name_1439": "형식 별칭에 이름을 지정해야 합니다.",
   "Type_alias_name_cannot_be_0_2457": "형식 별칭 이름은 '{0}'일 수 없습니다.",
   "Type_aliases_can_only_be_used_in_TypeScript_files_8008": "형식 별칭은 TypeScript 파일에서만 사용할 수 있습니다.",
   "Type_annotation_cannot_appear_on_a_constructor_declaration_1093": "형식 주석은 생성자 선언에 표시될 수 없습니다.",
@@ -1276,10 +1524,15 @@
   "Type_arguments_cannot_be_used_here_1342": "형식 인수를 여기에 사용할 수 없습니다.",
   "Type_arguments_for_0_circularly_reference_themselves_4109": "'{0}'의 형식 인수가 자신을 순환 참조합니다.",
   "Type_assertion_expressions_can_only_be_used_in_TypeScript_files_8016": "형식 어설션 식은 TypeScript 파일에서만 사용할 수 있습니다.",
+  "Type_at_position_0_in_source_is_not_compatible_with_type_at_position_1_in_target_2626": "소스의 {0} 위치에 있는 형식이 대상의 {1} 위치에 있는 형식과 호환되지 않습니다.",
+  "Type_at_positions_0_through_1_in_source_is_not_compatible_with_type_at_position_2_in_target_2627": "소스의 {0}~{1} 위치에 있는 형식이 대상의 {2} 위치에 있는 형식과 호환되지 않습니다.",
+  "Type_catch_clause_variables_as_unknown_instead_of_any_6803": "catch 절 변수를 'any' 대신 'unknown'으로 입력하세요.",
   "Type_declaration_files_to_be_included_in_compilation_6124": "컴파일에 포함할 선언 파일을 입력하세요.",
   "Type_expected_1110": "형식이 필요합니다.",
   "Type_instantiation_is_excessively_deep_and_possibly_infinite_2589": "형식 인스턴스화는 깊이가 매우 깊으며 무한할 수도 있습니다.",
   "Type_is_referenced_directly_or_indirectly_in_the_fulfillment_callback_of_its_own_then_method_1062": "형식은 자체 'then' 메서드의 처리 콜백에서 직간접적으로 참조됩니다.",
+  "Type_library_referenced_via_0_from_file_1_1402": "'{1}' 파일에서 '{0}'을(를) 통해 형식 라이브러리가 참조되었습니다.",
+  "Type_library_referenced_via_0_from_file_1_with_packageId_2_1403": "packageId가 '{2}'인 '{1}' 파일에서 '{0}'을(를) 통해 형식 라이브러리가 참조되었습니다.",
   "Type_of_await_operand_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member_1320": "'await' 형식의 피연산자는 유효한 프라미스여야 하거나 호출 가능 'then' 멤버를 포함하지 않아야 합니다.",
   "Type_of_computed_property_s_value_is_0_which_is_not_assignable_to_type_1_2418": "계산된 속성 값의 형식은 '{1}' 형식에 할당할 수 없는 '{0}'입니다.",
   "Type_of_iterated_elements_of_a_yield_Asterisk_operand_must_either_be_a_valid_promise_or_must_not_con_1322": "'yield*'의 반복되는 요소 형식의 피연산자는 유효한 프라미스여야 하거나 호출 가능 'then' 멤버를 포함하지 않아야 합니다.",
@@ -1305,6 +1558,7 @@
   "Type_parameter_name_cannot_be_0_2368": "형식 매개 변수 이름은 '{0}'일 수 없습니다.",
   "Type_parameters_cannot_appear_on_a_constructor_declaration_1092": "형식 매개 변수는 생성자 선언에 표시될 수 없습니다.",
   "Type_predicate_0_is_not_assignable_to_1_1226": "형식 조건자 '{0}'을(를) '{1}'에 할당할 수 없습니다.",
+  "Type_produces_a_tuple_type_that_is_too_large_to_represent_2799": "형식이 너무 커서 표시할 수 없는 튜플 형식을 생성합니다.",
   "Type_reference_directive_0_was_not_resolved_6120": "======== 형식 참조 지시문 '{0}'이(가) 확인되지 않았습니다. ========",
   "Type_reference_directive_0_was_successfully_resolved_to_1_primary_Colon_2_6119": "======== 형식 참조 지시문 '{0}'이(가) '{1}'(으)로 확인되었습니다. 주: {2}. ========",
   "Type_reference_directive_0_was_successfully_resolved_to_1_with_Package_ID_2_primary_Colon_3_6219": "======== 형식 참조 지시문 '{0}'이(가) 패키지 ID가 '{2}'인 '{1}'(으)로 확인되었습니다. 주: {3}. ========",
@@ -1318,6 +1572,7 @@
   "Unable_to_resolve_signature_of_parameter_decorator_when_called_as_an_expression_1239": "식으로 호출된 경우 매개 변수 데코레이터의 서명을 확인할 수 없습니다.",
   "Unable_to_resolve_signature_of_property_decorator_when_called_as_an_expression_1240": "식으로 호출된 경우 속성 데코레이터의 서명을 확인할 수 없습니다.",
   "Unexpected_end_of_text_1126": "예기치 않은 텍스트 끝입니다.",
+  "Unexpected_keyword_or_identifier_1434": "예기치 않은 키워드 또는 식별자입니다.",
   "Unexpected_token_1012": "예기치 않은 토큰입니다.",
   "Unexpected_token_A_constructor_method_accessor_or_property_was_expected_1068": "예기치 않은 토큰입니다. 생성자, 메서드, 접근자 또는 속성이 필요합니다.",
   "Unexpected_token_A_type_parameter_name_was_expected_without_curly_braces_1069": "예기치 않은 토큰입니다. 중괄호가 없는 형식 매개 변수 이름이 필요합니다.",
@@ -1328,6 +1583,7 @@
   "Unknown_build_option_0_Did_you_mean_1_5077": "알 수 없는 빌드 옵션 '{0}'입니다. '{1}'을(를) 사용하시겠습니까?",
   "Unknown_compiler_option_0_5023": "알 수 없는 컴파일러 옵션 '{0}'입니다.",
   "Unknown_compiler_option_0_Did_you_mean_1_5025": "알 수 없는 컴파일러 옵션 '{0}'입니다. '{1}'을(를) 사용하시겠습니까?",
+  "Unknown_keyword_or_identifier_Did_you_mean_0_1435": "알 수 없는 키워드 또는 식별자입니다. '{0}'을(를) 의미했나요?",
   "Unknown_option_excludes_Did_you_mean_exclude_6114": "알 수 없는 옵션 'excludes'입니다. 'exclude'를 사용하시겠습니까?",
   "Unknown_type_acquisition_option_0_17010": "알 수 없는 형식 인식 옵션 '{0}'입니다.",
   "Unknown_type_acquisition_option_0_Did_you_mean_1_17018": "알 수 없는 형식 인식 옵션 '{0}'입니다. '{1}'을(를) 사용하시겠습니까?",
@@ -1350,6 +1606,7 @@
   "Use_element_access_for_all_undeclared_properties_95146": "선언되지 않은 모든 속성에 요소 액세스를 사용합니다.",
   "Use_synthetic_default_member_95016": "가상 '기본' 멤버를 사용합니다.",
   "Using_a_string_in_a_for_of_statement_is_only_supported_in_ECMAScript_5_and_higher_2494": "ECMAScript 5 이상에서만 'for...of' 문에서 문자열을 사용할 수 있습니다.",
+  "Using_build_b_will_make_tsc_behave_more_like_a_build_orchestrator_than_a_compiler_This_is_used_to_tr_6915": "--build를 사용하면 -b가 tsc로 하여금 컴파일러보다 빌드 오케스트레이터처럼 작동하도록 합니다. 이 항목은 {0}에서 더 자세히 알아볼 수 있는 복합 프로젝트를 구축하는 데 사용됩니다.",
   "Using_compiler_options_of_project_reference_redirect_0_6215": "프로젝트 참조 리디렉션 '{0}'의 컴파일러 옵션을 사용 중입니다.",
   "VERSION_6036": "버전",
   "Value_of_type_0_has_no_properties_in_common_with_type_1_Did_you_mean_to_call_it_2560": "'{0}' 형식의 값에 '{1}' 형식과 공통된 속성이 없습니다. 속성을 호출하려고 했습니까?",
@@ -1361,10 +1618,16 @@
   "Variable_0_is_used_before_being_assigned_2454": "'{0}' 변수가 할당되기 전에 사용되었습니다.",
   "Variable_declaration_expected_1134": "변수 선언이 필요합니다.",
   "Variable_declaration_list_cannot_be_empty_1123": "변수 선언 목록은 비워 둘 수 없습니다.",
+  "Variable_declaration_not_allowed_at_this_location_1440": "이 위치에서는 변수 선언을 사용할 수 없습니다.",
+  "Variadic_element_at_position_0_in_source_does_not_match_element_at_position_1_in_target_2625": "소스의 {0} 위치에 있는 가변 인자 요소가 대상의 {1} 위치에 있는 요소와 일치하지 않습니다.",
   "Version_0_6029": "버전 {0}",
   "Visit_https_Colon_Slash_Slashaka_ms_Slashtsconfig_json_to_read_more_about_this_file_95110": "이 파일에 대한 자세한 내용을 보려면 https://aka.ms/tsconfig.json을 방문하세요.",
+  "WATCH_OPTIONS_6918": "조사식 옵션",
+  "Watch_and_Build_Modes_6250": "시청 및 빌드 모드",
   "Watch_input_files_6005": "조사식 입력 파일입니다.",
   "Watch_option_0_requires_a_value_of_type_1_5080": "조사식 옵션 '{0}'에 {1} 형식의 값이 필요합니다.",
+  "When_assigning_functions_check_to_ensure_parameters_and_the_return_values_are_subtype_compatible_6698": "함수를 할당할 때 매개 변수와 반환 값이 하위 형식과 호환되는지 확인합니다.",
+  "When_type_checking_take_into_account_null_and_undefined_6699": "형식 검사 시 'null' 및 'undefined'를 고려합니다.",
   "Whether_to_keep_outdated_console_output_in_watch_mode_instead_of_clearing_the_screen_6191": "화면을 지우지 않고, 감시 모드의 오래된 콘솔 출력을 유지할지 여부입니다.",
   "Wrap_all_invalid_characters_in_an_expression_container_95109": "식 컨테이너에서 모든 잘못된 문자 래핑",
   "Wrap_all_object_literal_with_parentheses_95116": "괄호를 사용하여 모든 개체 리터럴 래핑",
@@ -1372,10 +1635,12 @@
   "Wrap_in_JSX_fragment_95120": "JSX 조각에서 래핑",
   "Wrap_invalid_character_in_an_expression_container_95108": "식 컨테이너에서 잘못된 문자 래핑",
   "Wrap_the_following_body_with_parentheses_which_should_be_an_object_literal_95113": "괄호를 사용하여 개체 리터럴이어야 하는 다음 본문 래핑",
+  "You_can_learn_about_all_of_the_compiler_options_at_0_6913": "{0}에서 모든 컴파일러 옵션에 대해 알아볼 수 있습니다.",
   "You_cannot_rename_a_module_via_a_global_import_8031": "전역 가져오기를 통해 모듈 이름을 바꿀 수 없습니다.",
   "You_cannot_rename_elements_that_are_defined_in_the_standard_TypeScript_library_8001": "표준 TypeScript 라이브러리에 정의된 요소의 이름을 바꿀 수 없습니다.",
   "You_cannot_rename_this_element_8000": "이 요소의 이름을 바꿀 수 없습니다.",
   "_0_accepts_too_few_arguments_to_be_used_as_a_decorator_here_Did_you_mean_to_call_it_first_and_write__1329": "'{0}'이(가) 여기에서 decorator로 사용할 인수를 너무 적게 허용합니다. 먼저 이를 호출하고 '@{0}()'을(를) 작성하시겠습니까?",
+  "_0_and_1_index_signatures_are_incompatible_2330": "'{0}' 및 '{1}' 인덱스 시그니처가 호환되지 않습니다.",
   "_0_and_1_operations_cannot_be_mixed_without_parentheses_5076": "'{0}' 및 '{1}' 작업은 괄호 없이 혼합해서 사용할 수 없습니다.",
   "_0_are_specified_twice_The_attribute_named_0_will_be_overwritten_2710": "'{0}'이(가) 두 번 지정되었습니다. 이름이 '{0}'인 특성을 덮어씁니다.",
   "_0_can_only_be_imported_by_turning_on_the_esModuleInterop_flag_and_using_a_default_import_2596": "'{0}'은(는) 'esModuleInterop' 플래그를 설정하고 기본 가져오기를 사용해서만 가져올 수 있습니다.",
@@ -1396,6 +1661,8 @@
   "_0_implicitly_has_an_1_return_type_but_a_better_type_may_be_inferred_from_usage_7050": "'{0}'은(는) 암시적으로 '{1}' 반환 형식이지만, 사용량에서 더 나은 형식을 유추할 수 있습니다.",
   "_0_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_reference_7023": "반환 형식 주석이 없고 반환 식 중 하나에서 직간접적으로 참조되므로 '{0}'에는 암시적으로 'any' 반환 형식이 포함됩니다.",
   "_0_implicitly_has_type_any_because_it_does_not_have_a_type_annotation_and_is_referenced_directly_or__7022": "'{0}'은(는) 형식 주석이 없고 자체 이니셜라이저에서 직간접적으로 참조되므로 암시적으로 'any' 형식입니다.",
+  "_0_index_signatures_are_incompatible_2634": "'{0}' 인덱스 시그니처가 호환되지 않습니다.",
+  "_0_index_type_1_is_not_assignable_to_2_index_type_3_2413": "'{0}' 인덱스 유형 '{1}'을(를) '{2}' 인텍스 유형 '{3}'에 할당할 수 없습니다.",
   "_0_is_a_primitive_but_1_is_a_wrapper_object_Prefer_using_0_when_possible_2692": "{0}'은(는) 기본 개체이지만 '{1}'은(는) 래퍼 개체입니다. 가능한 경우 '{0}'을(를) 사용하세요.",
   "_0_is_assignable_to_the_constraint_of_type_1_but_1_could_be_instantiated_with_a_different_subtype_of_5075": "'{0}'은(는) '{1}' 형식의 제약 조건에 할당할 수 있지만, '{1}'은(는) '{2}' 제약 조건의 다른 하위 형식으로 인스턴스화할 수 있습니다.",
   "_0_is_declared_but_its_value_is_never_read_6133": "'{0}'이(가) 선언은 되었지만 해당 값이 읽히지는 않았습니다.",
@@ -1403,7 +1670,7 @@
   "_0_is_declared_here_2728": "여기서는 '{0}'이(가) 선언됩니다.",
   "_0_is_defined_as_a_property_in_class_1_but_is_overridden_here_in_2_as_an_accessor_2611": "'{0}'은(는) '{1}' 클래스의 속성으로 정의되지만, '{2}'에서 접근자로 재정의됩니다.",
   "_0_is_defined_as_an_accessor_in_class_1_but_is_overridden_here_in_2_as_an_instance_property_2610": "'{0}'은(는) '{1}' 클래스의 접근자로 정의되지만, '{2}'에서 인스턴스 속성으로 재정의됩니다.",
-  "_0_is_deprecated_6385": "'{0}'은(는) 더 이상 사용되지 않습니다.",
+  "_0_is_deprecated_6385": "'{0}'은(는) 사용되지 않습니다.",
   "_0_is_not_a_valid_meta_property_for_keyword_1_Did_you_mean_2_17012": "'{0}'은(는) '{1}' 키워드에 대한 올바른 메타 속성이 아닙니다. '{2}'을(를) 사용하시겠습니까?",
   "_0_is_not_allowed_as_a_variable_declaration_name_1389": "'{0}'은(는) 변수 선언 이름으로 사용할 수 없습니다.",
   "_0_is_referenced_directly_or_indirectly_in_its_own_base_expression_2506": "'{0}'은(는) 자체 기본 식에서 직간접적으로 참조됩니다.",
@@ -1428,7 +1695,7 @@
   "_0_only_refers_to_a_type_but_is_being_used_as_a_namespace_here_2702": "'{0}'은(는) 형식만 참조하지만, 여기서는 네임스페이스로 사용되고 있습니다.",
   "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_2693": "'{0}'은(는) 형식만 참조하지만, 여기서는 값으로 사용되고 있습니다.",
   "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_Did_you_mean_to_use_1_in_0_2690": "'{0}'은(는) 형식만 참조하는데 여기에서 값으로 사용되고 있습니다. '{0}에서 {1}'을(를) 사용하려고 하셨습니까?",
-  "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_Do_you_need_to_change_your_target_library_2585": "'{0}'은(는) 형식만 참조하지만, 여기서는 값으로 사용되고 있습니다. 대상 라이브러리를 변경하려는 경우 'lib' 컴파일러 옵션을 es2015 이상으로 변경해 봅니다.",
+  "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_Do_you_need_to_change_your_target_library_2585": "'{0}'은(는) 형식만 참조하지만, 여기서는 값으로 사용되고 있습니다. 대상 라이브러리를 변경하려는 경우 'lib' 컴파일러 옵션을 es2015 이상으로 변경해 보세요.",
   "_0_refers_to_a_UMD_global_but_the_current_file_is_a_module_Consider_adding_an_import_instead_2686": "'{0}'은(는) UMD 전역을 참조하지만 현재 파일은 모듈입니다. 대신 가져오기를 추가해 보세요.",
   "_0_refers_to_a_value_but_is_being_used_as_a_type_here_Did_you_mean_typeof_0_2749": "'{0}'은(는) 값을 참조하지만, 여기서는 형식으로 사용되고 있습니다. 'typeof {0}'을(를) 사용하시겠습니까?",
   "_0_tag_already_specified_1223": "'{0}' 태그가 이미 지정되었습니다.",
@@ -1440,6 +1707,7 @@
   "_0_which_lacks_return_type_annotation_implicitly_has_an_1_yield_type_7055": "반환 형식 주석이 없는 '{0}'에는 암시적으로 '{1}' yield 형식이 포함됩니다.",
   "abstract_modifier_can_only_appear_on_a_class_method_or_property_declaration_1242": "'abstract' 한정자는 클래스, 메서드 또는 속성 선언에만 나타날 수 있습니다.",
   "and_here_6204": "및 여기.",
+  "arguments_cannot_be_referenced_in_property_initializers_2815": "'arguments'는 속성 이니셜라이저에서 참조할 수 없습니다.",
   "await_expressions_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_fi_1375": "'await' 식은 파일이 모듈일 경우 해당 파일의 최상위 수준에서만 사용할 수 있지만, 이 파일에는 가져오기 또는 내보내기가 없습니다. 빈 'export {}'를 추가하여 이 파일을 모듈로 만드는 것이 좋습니다.",
   "await_expressions_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_1308": "'await' 식은 비동기 함수 내부 및 모듈의 최상위 수준에서만 사용할 수 있습니다.",
   "await_expressions_cannot_be_used_in_a_parameter_initializer_2524": "'await' 식은 매개 변수 이니셜라이저에서 사용할 수 없습니다.",
@@ -1456,6 +1724,7 @@
   "const_enums_can_only_be_used_in_property_or_index_access_expressions_or_the_right_hand_side_of_an_im_2475": "'const' 열거형은 속성이나 인덱스 액세스 식, 또는 내보내기 할당이나 가져오기 선언의 오른쪽, 또는 형식 쿼리에서만 사용할 수 있습니다.",
   "constructor_cannot_be_used_as_a_parameter_property_name_2398": "'constructor'는 매개 변수 속성 이름으로 사용할 수 없습니다.",
   "constructor_is_a_reserved_word_18012": "'#constructor'는 예약어입니다.",
+  "default_Colon_6903": "기본값:",
   "delete_cannot_be_called_on_an_identifier_in_strict_mode_1102": "strict 모드에서는 식별자에 대해 'delete'를 호출할 수 없습니다.",
   "delete_this_Project_0_is_up_to_date_because_it_was_previously_built_6360": "이 항목 삭제 - '{0}' 프로젝트는 이전에 빌드되었기 때문에 최신 상태입니다.",
   "export_Asterisk_does_not_re_export_a_default_1195": "'export *'는 기본값을 다시 내보내지 않습니다.",
@@ -1466,17 +1735,26 @@
   "extends_clause_of_exported_class_0_has_or_is_using_private_name_1_4020": "내보낸 클래스 '{0}'의 Extends 절이 프라이빗 이름 '{1}'을(를) 가지고 있거나 사용 중입니다.",
   "extends_clause_of_exported_class_has_or_is_using_private_name_0_4021": "내보낸 클래스의 'extends' 절이 프라이빗 이름 '{0}'을(를) 가지고 있거나 사용 중입니다.",
   "extends_clause_of_exported_interface_0_has_or_is_using_private_name_1_4022": "내보낸 인터페이스 '{0}'의 Extends 절이 프라이빗 이름 '{1}'을(를) 가지고 있거나 사용 중입니다.",
+  "false_unless_composite_is_set_6906": "'composite'가 설정되지 않은 한 'false'입니다.",
+  "false_unless_strict_is_set_6905": "'strict'가 설정되지 않은 한 'false'입니다.",
   "file_6025": "파일",
+  "for_await_loops_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_file_1431": "'for await' 루프는 파일이 모듈일 경우 해당 파일의 최상위에서만 사용할 수 있지만, 이 파일에는 가져오기 또는 내보내기가 없습니다. 빈 'export {}'를 추가하여 이 파일을 모듈로 만드는 것이 좋습니다.",
+  "for_await_loops_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_1103": "'for await' 루프는 비동기 함수 내부 및 모듈의 최상위에서만 사용할 수 있습니다.",
   "get_and_set_accessor_must_have_the_same_this_type_2682": "'get' 및 'set' 접근자는 동일한 'this' 형식이어야 합니다.",
-  "get_and_set_accessor_must_have_the_same_type_2380": "'get' 및 'set' 접근자의 형식이 같아야 합니다.",
   "get_and_set_accessors_cannot_declare_this_parameters_2784": "'get' 및 'set' 접근자는 'this' 매개 변수를 선언할 수 없습니다.",
+  "if_files_is_specified_otherwise_Asterisk_Asterisk_Slash_Asterisk_6908": "'files'를 지정하면 '[]'이고, 그렇지 않으면 '[\"**/*\"]5D;'",
   "implements_clause_already_seen_1175": "'implements' 절이 이미 있습니다.",
   "implements_clauses_can_only_be_used_in_TypeScript_files_8005": "'implements' 절은 TypeScript 파일에서만 사용할 수 있습니다.",
   "import_can_only_be_used_in_TypeScript_files_8002": "'import ... ='는 TypeScript 파일에서만 사용할 수 있습니다.",
   "infer_declarations_are_only_permitted_in_the_extends_clause_of_a_conditional_type_1338": "'infer' 선언은 조건 형식의 'extends' 절에서만 사용할 수 있습니다.",
   "let_declarations_can_only_be_declared_inside_a_block_1157": "'let' 선언은 블록 내부에서만 선언될 수 있습니다.",
   "let_is_not_allowed_to_be_used_as_a_name_in_let_or_const_declarations_2480": "'let'은 'let' 또는 'const' 선언에서 이름으로 사용할 수 없습니다.",
+  "module_AMD_or_UMD_or_System_or_ES6_then_Classic_Otherwise_Node_69010": "모듈 === 'AMD' 또는 'UMD' 또는 'System' 또는 'ES6', 'Classic', 그렇지 않으면 'Node'",
+  "module_system_or_esModuleInterop_6904": "모듈 === \"system\" 또는 esModuleInterop",
   "new_expression_whose_target_lacks_a_construct_signature_implicitly_has_an_any_type_7009": "대상에 구문 시그니처가 없는 'new' 식에는 암시적으로 'any' 형식이 포함됩니다.",
+  "node_modules_bower_components_jspm_packages_plus_the_value_of_outDir_if_one_is_specified_6907": "'[\"node_modules\", \"bower_components\", \"jspm_packages\"]', 지정한 경우 'outDir' 값이 추가됩니다.",
+  "one_of_Colon_6900": "다음 중 하나:",
+  "one_or_more_Colon_6901": "하나 이상:",
   "options_6024": "옵션",
   "or_expected_1144": "'{' 또는 ';'이(가) 필요합니다.",
   "package_json_does_not_have_a_0_field_6100": "'package.json'에는 '{0}' 필드가 없습니다.",
@@ -1507,6 +1785,9 @@
   "this_cannot_be_referenced_in_constructor_arguments_2333": "생성자 인수에서 'this'를 참조할 수 없습니다.",
   "this_cannot_be_referenced_in_current_location_2332": "현재 위치에서 'this'를 참조할 수 없습니다.",
   "this_implicitly_has_type_any_because_it_does_not_have_a_type_annotation_2683": "'this'에는 형식 주석이 없으므로 암시적으로 'any' 형식이 포함됩니다.",
+  "true_if_composite_false_otherwise_6909": "'composite'이면 'true'이고, 그렇지 않으면 'false'입니다.",
+  "tsc_Colon_The_TypeScript_Compiler_6922": "tsc: TypeScript 컴파일러",
+  "type_Colon_6902": "형식:",
   "unique_symbol_types_are_not_allowed_here_1335": "여기에서 'unique symbol' 형식은 허용되지 않습니다.",
   "unique_symbol_types_are_only_allowed_on_variables_in_a_variable_statement_1334": "'unique symbol' 형식은 변수 문의 변수에만 허용됩니다.",
   "unique_symbol_types_may_not_be_used_on_a_variable_declaration_with_a_binding_name_1333": "'unique symbol' 형식은 바인딩 이름과 함께 변수 선언에 사용할 수 없습니다.",
@@ -1514,5 +1795,6 @@
   "use_strict_directive_used_here_1349": "여기서는 'use strict' 지시문이 사용됩니다.",
   "with_statements_are_not_allowed_in_an_async_function_block_1300": "'with' 문은 비동기 함수 블록에서 사용할 수 없습니다.",
   "with_statements_are_not_allowed_in_strict_mode_1101": "'with' 문은 strict 모드에서 사용할 수 없습니다.",
+  "yield_expression_implicitly_results_in_an_any_type_because_its_containing_generator_lacks_a_return_t_7057": "'yield' 식은 포함하는 생성기에 반환 형식 주석이 없으므로 암시적으로 'any' 형식으로 생성됩니다.",
   "yield_expressions_cannot_be_used_in_a_parameter_initializer_2523": "'yield' 식은 매개 변수 이니셜라이저에서 사용할 수 없습니다."
 }
\ No newline at end of file
diff --git a/node_modules/typescript/lib/lib.dom.d.ts b/node_modules/typescript/lib/lib.dom.d.ts
index bb2e999..fdcbb9f 100644
--- a/node_modules/typescript/lib/lib.dom.d.ts
+++ b/node_modules/typescript/lib/lib.dom.d.ts
@@ -19,33 +19,21 @@
 
 
 /////////////////////////////
-/// DOM APIs
+/// Window APIs
 /////////////////////////////
 
 interface AddEventListenerOptions extends EventListenerOptions {
     once?: boolean;
     passive?: boolean;
-}
-
-interface AddressErrors {
-    addressLine?: string;
-    city?: string;
-    country?: string;
-    dependentLocality?: string;
-    organization?: string;
-    phone?: string;
-    postalCode?: string;
-    recipient?: string;
-    region?: string;
-    sortingCode?: string;
+    signal?: AbortSignal;
 }
 
 interface AesCbcParams extends Algorithm {
-    iv: Int8Array | Int16Array | Int32Array | Uint8Array | Uint16Array | Uint32Array | Uint8ClampedArray | Float32Array | Float64Array | DataView | ArrayBuffer;
+    iv: BufferSource;
 }
 
 interface AesCtrParams extends Algorithm {
-    counter: Int8Array | Int16Array | Int32Array | Uint8Array | Uint16Array | Uint32Array | Uint8ClampedArray | Float32Array | Float64Array | DataView | ArrayBuffer;
+    counter: BufferSource;
     length: number;
 }
 
@@ -54,8 +42,8 @@
 }
 
 interface AesGcmParams extends Algorithm {
-    additionalData?: Int8Array | Int16Array | Int32Array | Uint8Array | Uint16Array | Uint32Array | Uint8ClampedArray | Float32Array | Float64Array | DataView | ArrayBuffer;
-    iv: Int8Array | Int16Array | Int32Array | Uint8Array | Uint16Array | Uint32Array | Uint8ClampedArray | Float32Array | Float64Array | DataView | ArrayBuffer;
+    additionalData?: BufferSource;
+    iv: BufferSource;
     tagLength?: number;
 }
 
@@ -108,9 +96,12 @@
     playbackRate?: number;
 }
 
-interface AudioContextInfo {
-    currentTime?: number;
-    sampleRate?: number;
+interface AudioConfiguration {
+    bitrate?: number;
+    channels?: string;
+    contentType: string;
+    samplerate?: number;
+    spatialRendering?: boolean;
 }
 
 interface AudioContextOptions {
@@ -124,14 +115,6 @@
     channelInterpretation?: ChannelInterpretation;
 }
 
-interface AudioParamDescriptor {
-    automationRate?: AutomationRate;
-    defaultValue?: number;
-    maxValue?: number;
-    minValue?: number;
-    name: string;
-}
-
 interface AudioProcessingEventInit extends EventInit {
     inputBuffer: AudioBuffer;
     outputBuffer: AudioBuffer;
@@ -140,7 +123,7 @@
 
 interface AudioTimestamp {
     contextTime?: number;
-    performanceTime?: number;
+    performanceTime?: DOMHighResTimeStamp;
 }
 
 interface AudioWorkletNodeOptions extends AudioNodeOptions {
@@ -179,13 +162,20 @@
     type?: BiquadFilterType;
 }
 
+interface BlobEventInit {
+    data: Blob;
+    timecode?: DOMHighResTimeStamp;
+}
+
 interface BlobPropertyBag {
     endings?: EndingType;
     type?: string;
 }
 
-interface ByteLengthChunk {
-    byteLength?: number;
+interface CSSStyleSheetInit {
+    baseURL?: string;
+    disabled?: boolean;
+    media?: MediaList | string;
 }
 
 interface CacheQueryOptions {
@@ -196,7 +186,9 @@
 
 interface CanvasRenderingContext2DSettings {
     alpha?: boolean;
+    colorSpace?: PredefinedColorSpace;
     desynchronized?: boolean;
+    willReadFrequently?: boolean;
 }
 
 interface ChannelMergerOptions extends AudioNodeOptions {
@@ -216,6 +208,10 @@
     clipboardData?: DataTransfer | null;
 }
 
+interface ClipboardItemOptions {
+    presentationStyle?: PresentationStyle;
+}
+
 interface CloseEventInit extends EventInit {
     code?: number;
     reason?: string;
@@ -227,11 +223,12 @@
 }
 
 interface ComputedEffectTiming extends EffectTiming {
-    activeDuration?: number;
+    activeDuration?: CSSNumberish;
     currentIteration?: number | null;
-    endTime?: number;
-    localTime?: number | null;
-    progress?: number | null;
+    endTime?: CSSNumberish;
+    localTime?: CSSNumberish | null;
+    progress?: CSSNumberish | null;
+    startTime?: CSSNumberish;
 }
 
 interface ComputedKeyframe {
@@ -242,10 +239,6 @@
     [property: string]: string | number | null | undefined;
 }
 
-interface ConfirmSiteSpecificExceptionsInformation extends ExceptionInformation {
-    arrayOfDomainStrings?: string[];
-}
-
 interface ConstantSourceOptions {
     offset?: number;
 }
@@ -270,11 +263,6 @@
     ideal?: number;
 }
 
-interface ConstrainVideoFacingModeParameters {
-    exact?: VideoFacingModeEnum | VideoFacingModeEnum[];
-    ideal?: VideoFacingModeEnum | VideoFacingModeEnum[];
-}
-
 interface ConvolverOptions extends AudioNodeOptions {
     buffer?: AudioBuffer | null;
     disableNormalization?: boolean;
@@ -295,6 +283,11 @@
     signal?: AbortSignal;
 }
 
+interface CryptoKeyPair {
+    privateKey?: CryptoKey;
+    publicKey?: CryptoKey;
+}
+
 interface CustomEventInit<T = any> extends EventInit {
     detail?: T;
 }
@@ -380,13 +373,13 @@
     gamma?: number | null;
 }
 
-interface DevicePermissionDescriptor extends PermissionDescriptor {
-    deviceId?: string;
-    name: "camera" | "microphone" | "speaker";
+interface DisplayMediaStreamConstraints {
+    audio?: boolean | MediaTrackConstraints;
+    video?: boolean | MediaTrackConstraints;
 }
 
 interface DocumentTimelineOptions {
-    originTime?: number;
+    originTime?: DOMHighResTimeStamp;
 }
 
 interface DoubleRange {
@@ -435,6 +428,7 @@
     fill?: FillMode;
     iterationStart?: number;
     iterations?: number;
+    playbackRate?: number;
 }
 
 interface ElementCreationOptions {
@@ -484,37 +478,41 @@
     withCredentials?: boolean;
 }
 
-interface ExceptionInformation {
-    domain?: string | null;
-}
-
 interface FilePropertyBag extends BlobPropertyBag {
     lastModified?: number;
 }
 
+interface FileSystemFlags {
+    create?: boolean;
+    exclusive?: boolean;
+}
+
 interface FocusEventInit extends UIEventInit {
     relatedTarget?: EventTarget | null;
 }
 
-interface FocusNavigationEventInit extends EventInit {
-    navigationReason?: string | null;
-    originHeight?: number;
-    originLeft?: number;
-    originTop?: number;
-    originWidth?: number;
-}
-
-interface FocusNavigationOrigin {
-    originHeight?: number;
-    originLeft?: number;
-    originTop?: number;
-    originWidth?: number;
-}
-
 interface FocusOptions {
     preventScroll?: boolean;
 }
 
+interface FontFaceDescriptors {
+    display?: string;
+    featureSettings?: string;
+    stretch?: string;
+    style?: string;
+    unicodeRange?: string;
+    variant?: string;
+    weight?: string;
+}
+
+interface FontFaceSetLoadEventInit extends EventInit {
+    fontfaces?: FontFace[];
+}
+
+interface FormDataEventInit extends EventInit {
+    formData: FormData;
+}
+
 interface FullscreenOptions {
     navigationUI?: FullscreenNavigationUI;
 }
@@ -527,6 +525,10 @@
     gamepad: Gamepad;
 }
 
+interface GetAnimationsOptions {
+    subtree?: boolean;
+}
+
 interface GetNotificationOptions {
     tag?: string;
 }
@@ -542,8 +544,8 @@
 
 interface HkdfParams extends Algorithm {
     hash: HashAlgorithmIdentifier;
-    info: Int8Array | Int16Array | Int32Array | Uint8Array | Uint16Array | Uint32Array | Uint8ClampedArray | Float32Array | Float64Array | DataView | ArrayBuffer;
-    salt: Int8Array | Int16Array | Int32Array | Uint8Array | Uint16Array | Uint32Array | Uint8ClampedArray | Float32Array | Float64Array | DataView | ArrayBuffer;
+    info: BufferSource;
+    salt: BufferSource;
 }
 
 interface HmacImportParams extends Algorithm {
@@ -561,6 +563,11 @@
     length?: number;
 }
 
+interface IDBDatabaseInfo {
+    name?: string;
+    version?: number;
+}
+
 interface IDBIndexParameters {
     multiEntry?: boolean;
     unique?: boolean;
@@ -581,6 +588,10 @@
     feedforward: number[];
 }
 
+interface IdleRequestOptions {
+    timeout?: number;
+}
+
 interface ImageBitmapOptions {
     colorSpaceConversion?: ColorSpaceConversion;
     imageOrientation?: ImageOrientation;
@@ -594,9 +605,8 @@
     alpha?: boolean;
 }
 
-interface ImageEncodeOptions {
-    quality?: number;
-    type?: string;
+interface ImageDataSettings {
+    colorSpace?: PredefinedColorSpace;
 }
 
 interface ImportMeta {
@@ -605,8 +615,10 @@
 
 interface InputEventInit extends UIEventInit {
     data?: string | null;
+    dataTransfer?: DataTransfer | null;
     inputType?: string;
     isComposing?: boolean;
+    targetRanges?: StaticRange[];
 }
 
 interface IntersectionObserverEntryInit {
@@ -616,7 +628,7 @@
     isIntersecting: boolean;
     rootBounds: DOMRectInit | null;
     target: Element;
-    time: number;
+    time: DOMHighResTimeStamp;
 }
 
 interface IntersectionObserverInit {
@@ -676,17 +688,51 @@
 interface KeyframeEffectOptions extends EffectTiming {
     composite?: CompositeOperation;
     iterationComposite?: IterationCompositeOperation;
+    pseudoElement?: string | null;
+}
+
+interface MediaCapabilitiesDecodingInfo extends MediaCapabilitiesInfo {
+    configuration?: MediaDecodingConfiguration;
+}
+
+interface MediaCapabilitiesEncodingInfo extends MediaCapabilitiesInfo {
+    configuration?: MediaEncodingConfiguration;
+}
+
+interface MediaCapabilitiesInfo {
+    powerEfficient: boolean;
+    smooth: boolean;
+    supported: boolean;
+}
+
+interface MediaConfiguration {
+    audio?: AudioConfiguration;
+    video?: VideoConfiguration;
+}
+
+interface MediaDecodingConfiguration extends MediaConfiguration {
+    type: MediaDecodingType;
 }
 
 interface MediaElementAudioSourceOptions {
     mediaElement: HTMLMediaElement;
 }
 
+interface MediaEncodingConfiguration extends MediaConfiguration {
+    type: MediaEncodingType;
+}
+
 interface MediaEncryptedEventInit extends EventInit {
     initData?: ArrayBuffer | null;
     initDataType?: string;
 }
 
+interface MediaImage {
+    sizes?: string;
+    src: string;
+    type?: string;
+}
+
 interface MediaKeyMessageEventInit extends EventInit {
     message: ArrayBuffer;
     messageType: MediaKeyMessageType;
@@ -704,14 +750,46 @@
 
 interface MediaKeySystemMediaCapability {
     contentType?: string;
+    encryptionScheme?: string | null;
     robustness?: string;
 }
 
+interface MediaMetadataInit {
+    album?: string;
+    artist?: string;
+    artwork?: MediaImage[];
+    title?: string;
+}
+
+interface MediaPositionState {
+    duration?: number;
+    playbackRate?: number;
+    position?: number;
+}
+
 interface MediaQueryListEventInit extends EventInit {
     matches?: boolean;
     media?: string;
 }
 
+interface MediaRecorderErrorEventInit extends EventInit {
+    error: DOMException;
+}
+
+interface MediaRecorderOptions {
+    audioBitsPerSecond?: number;
+    bitsPerSecond?: number;
+    mimeType?: string;
+    videoBitsPerSecond?: number;
+}
+
+interface MediaSessionActionDetails {
+    action: MediaSessionAction;
+    fastSeek?: boolean | null;
+    seekOffset?: number | null;
+    seekTime?: number | null;
+}
+
 interface MediaStreamAudioSourceOptions {
     mediaStream: MediaStream;
 }
@@ -722,18 +800,6 @@
     video?: boolean | MediaTrackConstraints;
 }
 
-interface MediaStreamErrorEventInit extends EventInit {
-    error?: MediaStreamError | null;
-}
-
-interface MediaStreamEventInit extends EventInit {
-    stream?: MediaStream;
-}
-
-interface MediaStreamTrackAudioSourceOptions {
-    mediaStreamTrack: MediaStreamTrack;
-}
-
 interface MediaStreamTrackEventInit extends EventInit {
     track: MediaStreamTrack;
 }
@@ -742,13 +808,16 @@
     aspectRatio?: DoubleRange;
     autoGainControl?: boolean[];
     channelCount?: ULongRange;
+    cursor?: string[];
     deviceId?: string;
+    displaySurface?: string;
     echoCancellation?: boolean[];
     facingMode?: string[];
     frameRate?: DoubleRange;
     groupId?: string;
     height?: ULongRange;
     latency?: DoubleRange;
+    logicalSurface?: boolean;
     noiseSuppression?: boolean[];
     resizeMode?: string[];
     sampleRate?: ULongRange;
@@ -758,7 +827,6 @@
 
 interface MediaTrackConstraintSet {
     aspectRatio?: ConstrainDouble;
-    autoGainControl?: ConstrainBoolean;
     channelCount?: ConstrainULong;
     deviceId?: ConstrainDOMString;
     echoCancellation?: ConstrainBoolean;
@@ -767,10 +835,9 @@
     groupId?: ConstrainDOMString;
     height?: ConstrainULong;
     latency?: ConstrainDouble;
-    noiseSuppression?: ConstrainBoolean;
-    resizeMode?: ConstrainDOMString;
     sampleRate?: ConstrainULong;
     sampleSize?: ConstrainULong;
+    suppressLocalAudioPlayback?: ConstrainBoolean;
     width?: ConstrainULong;
 }
 
@@ -780,17 +847,13 @@
 
 interface MediaTrackSettings {
     aspectRatio?: number;
-    autoGainControl?: boolean;
-    channelCount?: number;
     deviceId?: string;
     echoCancellation?: boolean;
     facingMode?: string;
     frameRate?: number;
     groupId?: string;
     height?: number;
-    latency?: number;
-    noiseSuppression?: boolean;
-    resizeMode?: string;
+    restrictOwnAudio?: boolean;
     sampleRate?: number;
     sampleSize?: number;
     width?: number;
@@ -798,19 +861,15 @@
 
 interface MediaTrackSupportedConstraints {
     aspectRatio?: boolean;
-    autoGainControl?: boolean;
-    channelCount?: boolean;
     deviceId?: boolean;
     echoCancellation?: boolean;
     facingMode?: boolean;
     frameRate?: boolean;
     groupId?: boolean;
     height?: boolean;
-    latency?: boolean;
-    noiseSuppression?: boolean;
-    resizeMode?: boolean;
     sampleRate?: boolean;
     sampleSize?: boolean;
+    suppressLocalAudioPlayback?: boolean;
     width?: boolean;
 }
 
@@ -822,11 +881,6 @@
     source?: MessageEventSource | null;
 }
 
-interface MidiPermissionDescriptor extends PermissionDescriptor {
-    name: "midi";
-    sysex?: boolean;
-}
-
 interface MouseEventInit extends EventModifierInit {
     button?: number;
     buttons?: number;
@@ -874,11 +928,6 @@
     subtree?: boolean;
 }
 
-interface NavigationPreloadState {
-    enabled?: boolean;
-    headerValue?: string;
-}
-
 interface NotificationAction {
     action: string;
     icon?: string;
@@ -898,7 +947,7 @@
     requireInteraction?: boolean;
     silent?: boolean;
     tag?: string;
-    timestamp?: number;
+    timestamp?: DOMTimeStamp;
     vibrate?: VibratePattern;
 }
 
@@ -921,6 +970,7 @@
     fill?: FillMode;
     iterationStart?: number;
     iterations?: number;
+    playbackRate?: number;
 }
 
 interface OscillatorOptions extends AudioNodeOptions {
@@ -951,12 +1001,6 @@
     rolloffFactor?: number;
 }
 
-interface PayerErrors {
-    email?: string;
-    name?: string;
-    phone?: string;
-}
-
 interface PaymentCurrencyAmount {
     currency: string;
     value: string;
@@ -965,7 +1009,6 @@
 interface PaymentDetailsBase {
     displayItems?: PaymentItem[];
     modifiers?: PaymentDetailsModifier[];
-    shippingOptions?: PaymentShippingOption[];
 }
 
 interface PaymentDetailsInit extends PaymentDetailsBase {
@@ -976,15 +1019,12 @@
 interface PaymentDetailsModifier {
     additionalDisplayItems?: PaymentItem[];
     data?: any;
-    supportedMethods: string | string[];
+    supportedMethods: string;
     total?: PaymentItem;
 }
 
 interface PaymentDetailsUpdate extends PaymentDetailsBase {
-    error?: string;
-    payerErrors?: PayerErrors;
     paymentMethodErrors?: any;
-    shippingAddressErrors?: AddressErrors;
     total?: PaymentItem;
 }
 
@@ -1001,39 +1041,33 @@
 
 interface PaymentMethodData {
     data?: any;
-    supportedMethods: string | string[];
-}
-
-interface PaymentOptions {
-    requestBillingAddress?: boolean;
-    requestPayerEmail?: boolean;
-    requestPayerName?: boolean;
-    requestPayerPhone?: boolean;
-    requestShipping?: boolean;
-    shippingType?: PaymentShippingType;
+    supportedMethods: string;
 }
 
 interface PaymentRequestUpdateEventInit extends EventInit {
 }
 
-interface PaymentShippingOption {
-    amount: PaymentCurrencyAmount;
-    id: string;
-    label: string;
-    selected?: boolean;
-}
-
 interface PaymentValidationErrors {
     error?: string;
-    payer?: PayerErrors;
     paymentMethod?: any;
-    shippingAddress?: AddressErrors;
 }
 
 interface Pbkdf2Params extends Algorithm {
     hash: HashAlgorithmIdentifier;
     iterations: number;
-    salt: Int8Array | Int16Array | Int32Array | Uint8Array | Uint16Array | Uint32Array | Uint8ClampedArray | Float32Array | Float64Array | DataView | ArrayBuffer;
+    salt: BufferSource;
+}
+
+interface PerformanceMarkOptions {
+    detail?: any;
+    startTime?: DOMHighResTimeStamp;
+}
+
+interface PerformanceMeasureOptions {
+    detail?: any;
+    duration?: DOMHighResTimeStamp;
+    end?: string | DOMHighResTimeStamp;
+    start?: string | DOMHighResTimeStamp;
 }
 
 interface PerformanceObserverInit {
@@ -1147,14 +1181,9 @@
     id: BufferSource;
 }
 
-interface PushPermissionDescriptor extends PermissionDescriptor {
-    name: "push";
-    userVisibleOnly?: boolean;
-}
-
 interface PushSubscriptionJSON {
     endpoint?: string;
-    expirationTime?: number | null;
+    expirationTime?: DOMTimeStamp | null;
     keys?: Record<string, string>;
 }
 
@@ -1181,7 +1210,7 @@
 }
 
 interface RTCCertificateExpiration {
-    expires?: number;
+    expires?: DOMTimeStamp;
 }
 
 interface RTCConfiguration {
@@ -1215,48 +1244,6 @@
     value?: string;
 }
 
-interface RTCDtlsParameters {
-    fingerprints?: RTCDtlsFingerprint[];
-    role?: RTCDtlsRole;
-}
-
-interface RTCErrorEventInit extends EventInit {
-    error: RTCError;
-}
-
-interface RTCErrorInit {
-    errorDetail: RTCErrorDetailType;
-    receivedAlert?: number;
-    sctpCauseCode?: number;
-    sdpLineNumber?: number;
-    sentAlert?: number;
-}
-
-interface RTCIceCandidateAttributes extends RTCStats {
-    addressSourceUrl?: string;
-    candidateType?: RTCStatsIceCandidateType;
-    ipAddress?: string;
-    portNumber?: number;
-    priority?: number;
-    transport?: string;
-}
-
-interface RTCIceCandidateComplete {
-}
-
-interface RTCIceCandidateDictionary {
-    foundation?: string;
-    ip?: string;
-    msMTurnSessionId?: string;
-    port?: number;
-    priority?: number;
-    protocol?: RTCIceProtocol;
-    relatedAddress?: string;
-    relatedPort?: number;
-    tcpType?: RTCIceTcpCandidateType;
-    type?: RTCIceCandidateType;
-}
-
 interface RTCIceCandidateInit {
     candidate?: string;
     sdpMLineIndex?: number | null;
@@ -1264,54 +1251,22 @@
     usernameFragment?: string | null;
 }
 
-interface RTCIceCandidatePair {
-    local?: RTCIceCandidate;
-    remote?: RTCIceCandidate;
-}
-
 interface RTCIceCandidatePairStats extends RTCStats {
     availableIncomingBitrate?: number;
     availableOutgoingBitrate?: number;
-    bytesDiscardedOnSend?: number;
     bytesReceived?: number;
     bytesSent?: number;
-    circuitBreakerTriggerCount?: number;
-    consentExpiredTimestamp?: number;
-    consentRequestsSent?: number;
     currentRoundTripTime?: number;
-    currentRtt?: number;
-    firstRequestTimestamp?: number;
-    lastPacketReceivedTimestamp?: number;
-    lastPacketSentTimestamp?: number;
-    lastRequestTimestamp?: number;
-    lastResponseTimestamp?: number;
-    localCandidateId?: string;
+    localCandidateId: string;
     nominated?: boolean;
-    packetsDiscardedOnSend?: number;
-    packetsReceived?: number;
-    packetsSent?: number;
-    priority?: number;
-    remoteCandidateId?: string;
+    remoteCandidateId: string;
     requestsReceived?: number;
     requestsSent?: number;
     responsesReceived?: number;
     responsesSent?: number;
-    retransmissionsReceived?: number;
-    retransmissionsSent?: number;
-    state?: RTCStatsIceCandidatePairState;
+    state: RTCStatsIceCandidatePairState;
     totalRoundTripTime?: number;
-    totalRtt?: number;
-    transportId?: string;
-}
-
-interface RTCIceGatherOptions {
-    gatherPolicy?: RTCIceGatherPolicy;
-    iceservers?: RTCIceServer[];
-}
-
-interface RTCIceParameters {
-    password?: string;
-    usernameFragment?: string;
+    transportId: string;
 }
 
 interface RTCIceServer {
@@ -1321,18 +1276,13 @@
     username?: string;
 }
 
-interface RTCIdentityProviderOptions {
-    peerIdentity?: string;
-    protocol?: string;
-    usernameHint?: string;
-}
-
-interface RTCInboundRTPStreamStats extends RTCRTPStreamStats {
-    bytesReceived?: number;
-    fractionLost?: number;
-    jitter?: number;
-    packetsLost?: number;
-    packetsReceived?: number;
+interface RTCInboundRtpStreamStats extends RTCReceivedRtpStreamStats {
+    firCount?: number;
+    framesDecoded?: number;
+    nackCount?: number;
+    pliCount?: number;
+    qpSum?: number;
+    remoteId?: string;
 }
 
 interface RTCLocalSessionDescriptionInit {
@@ -1340,23 +1290,6 @@
     type?: RTCSdpType;
 }
 
-interface RTCMediaStreamTrackStats extends RTCStats {
-    audioLevel?: number;
-    echoReturnLoss?: number;
-    echoReturnLossEnhancement?: number;
-    frameHeight?: number;
-    frameWidth?: number;
-    framesCorrupted?: number;
-    framesDecoded?: number;
-    framesDropped?: number;
-    framesPerSecond?: number;
-    framesReceived?: number;
-    framesSent?: number;
-    remoteSource?: boolean;
-    ssrcIds?: string[];
-    trackIdentifier?: string;
-}
-
 interface RTCOfferAnswerOptions {
 }
 
@@ -1366,18 +1299,20 @@
     offerToReceiveVideo?: boolean;
 }
 
-interface RTCOutboundRTPStreamStats extends RTCRTPStreamStats {
-    bytesSent?: number;
-    packetsSent?: number;
-    roundTripTime?: number;
-    targetBitrate?: number;
+interface RTCOutboundRtpStreamStats extends RTCSentRtpStreamStats {
+    firCount?: number;
+    framesEncoded?: number;
+    nackCount?: number;
+    pliCount?: number;
+    qpSum?: number;
+    remoteId?: string;
 }
 
 interface RTCPeerConnectionIceErrorEventInit extends EventInit {
     address?: string | null;
     errorCode: number;
+    errorText?: string;
     port?: number | null;
-    statusText?: string;
     url?: string;
 }
 
@@ -1386,23 +1321,11 @@
     url?: string | null;
 }
 
-interface RTCRTPStreamStats extends RTCStats {
-    associateStatsId?: string;
-    codecId?: string;
-    firCount?: number;
-    isRemote?: boolean;
-    mediaTrackId?: string;
-    mediaType?: string;
-    nackCount?: number;
-    pliCount?: number;
-    sliCount?: number;
-    ssrc?: string;
-    transportId?: string;
-}
-
-interface RTCRtcpFeedback {
-    parameter?: string;
-    type?: string;
+interface RTCReceivedRtpStreamStats extends RTCRtpStreamStats {
+    jitter?: number;
+    packetsDiscarded?: number;
+    packetsLost?: number;
+    packetsReceived?: number;
 }
 
 interface RTCRtcpParameters {
@@ -1438,27 +1361,16 @@
     audioLevel?: number;
     rtpTimestamp: number;
     source: number;
-    timestamp: number;
+    timestamp: DOMHighResTimeStamp;
 }
 
 interface RTCRtpEncodingParameters extends RTCRtpCodingParameters {
     active?: boolean;
     maxBitrate?: number;
+    priority?: RTCPriorityType;
     scaleResolutionDownBy?: number;
 }
 
-interface RTCRtpFecParameters {
-    mechanism?: string;
-    ssrc?: number;
-}
-
-interface RTCRtpHeaderExtension {
-    kind?: string;
-    preferredEncrypt?: boolean;
-    preferredId?: number;
-    uri?: string;
-}
-
 interface RTCRtpHeaderExtensionCapability {
     uri?: string;
 }
@@ -1478,17 +1390,20 @@
 interface RTCRtpReceiveParameters extends RTCRtpParameters {
 }
 
-interface RTCRtpRtxParameters {
-    ssrc?: number;
-}
-
 interface RTCRtpSendParameters extends RTCRtpParameters {
+    degradationPreference?: RTCDegradationPreference;
     encodings: RTCRtpEncodingParameters[];
     transactionId: string;
 }
 
+interface RTCRtpStreamStats extends RTCStats {
+    codecId?: string;
+    kind: string;
+    ssrc: number;
+    transportId?: string;
+}
+
 interface RTCRtpSynchronizationSource extends RTCRtpContributingSource {
-    voiceActivityFlag?: boolean;
 }
 
 interface RTCRtpTransceiverInit {
@@ -1497,10 +1412,9 @@
     streams?: MediaStream[];
 }
 
-interface RTCRtpUnhandled {
-    muxId?: string;
-    payloadType?: number;
-    ssrc?: number;
+interface RTCSentRtpStreamStats extends RTCRtpStreamStats {
+    bytesSent?: number;
+    packetsSent?: number;
 }
 
 interface RTCSessionDescriptionInit {
@@ -1508,33 +1422,10 @@
     type: RTCSdpType;
 }
 
-interface RTCSrtpKeyParam {
-    keyMethod?: string;
-    keySalt?: string;
-    lifetime?: string;
-    mkiLength?: number;
-    mkiValue?: number;
-}
-
-interface RTCSrtpSdesParameters {
-    cryptoSuite?: string;
-    keyParams?: RTCSrtpKeyParam[];
-    sessionParams?: string[];
-    tag?: number;
-}
-
-interface RTCSsrcRange {
-    max?: number;
-    min?: number;
-}
-
 interface RTCStats {
-    id?: string;
-    timestamp?: number;
-    type?: RTCStatsType;
-}
-
-interface RTCStatsReport {
+    id: string;
+    timestamp: DOMHighResTimeStamp;
+    type: RTCStatsType;
 }
 
 interface RTCTrackEventInit extends EventInit {
@@ -1548,17 +1439,12 @@
     bytesReceived?: number;
     bytesSent?: number;
     dtlsCipher?: string;
-    dtlsState?: RTCDtlsTransportState;
-    iceRole?: RTCIceRole;
+    dtlsState: RTCDtlsTransportState;
     localCertificateId?: string;
-    packetsReceived?: number;
-    packetsSent?: number;
     remoteCertificateId?: string;
     rtcpTransportStatsId?: string;
-    selectedCandidatePairChanges?: number;
     selectedCandidatePairId?: string;
     srtpCipher?: string;
-    tlsGroup?: string;
     tlsVersion?: string;
 }
 
@@ -1676,7 +1562,7 @@
 }
 
 interface RsaOaepParams extends Algorithm {
-    label?: Int8Array | Int16Array | Int32Array | Uint8Array | Uint16Array | Uint32Array | Uint8ClampedArray | Float32Array | Float64Array | DataView | ArrayBuffer;
+    label?: BufferSource;
 }
 
 interface RsaOtherPrimesInfo {
@@ -1713,37 +1599,31 @@
 interface SecurityPolicyViolationEventInit extends EventInit {
     blockedURI?: string;
     columnNumber?: number;
-    documentURI?: string;
-    effectiveDirective?: string;
+    disposition: SecurityPolicyViolationEventDisposition;
+    documentURI: string;
+    effectiveDirective: string;
     lineNumber?: number;
-    originalPolicy?: string;
+    originalPolicy: string;
     referrer?: string;
+    sample?: string;
     sourceFile?: string;
-    statusCode?: number;
-    violatedDirective?: string;
+    statusCode: number;
+    violatedDirective: string;
 }
 
 interface ShadowRootInit {
     delegatesFocus?: boolean;
     mode: ShadowRootMode;
+    slotAssignment?: SlotAssignmentMode;
 }
 
 interface ShareData {
+    files?: File[];
     text?: string;
     title?: string;
     url?: string;
 }
 
-interface SpeechRecognitionErrorEventInit extends EventInit {
-    error: SpeechRecognitionErrorCode;
-    message?: string;
-}
-
-interface SpeechRecognitionEventInit extends EventInit {
-    resultIndex?: number;
-    results: SpeechRecognitionResultList;
-}
-
 interface SpeechSynthesisErrorEventInit extends SpeechSynthesisEventInit {
     error: SpeechSynthesisErrorCode;
 }
@@ -1780,16 +1660,6 @@
     url?: string;
 }
 
-interface StoreExceptionsInformation extends ExceptionInformation {
-    detailURI?: string | null;
-    explanationString?: string | null;
-    siteName?: string | null;
-}
-
-interface StoreSiteSpecificExceptionsInformation extends StoreExceptionsInformation {
-    arrayOfDomainStrings?: string[];
-}
-
 interface StreamPipeOptions {
     preventAbort?: boolean;
     preventCancel?: boolean;
@@ -1814,6 +1684,10 @@
     signal?: AbortSignal;
 }
 
+interface SubmitEventInit extends EventInit {
+    submitter?: HTMLElement | null;
+}
+
 interface TextDecodeOptions {
     stream?: boolean;
 }
@@ -1873,6 +1747,8 @@
 interface UIEventInit extends EventInit {
     detail?: number;
     view?: Window | null;
+    /** @deprecated */
+    which?: number;
 }
 
 interface ULongRange {
@@ -1895,21 +1771,16 @@
     type?: undefined;
 }
 
-interface VRDisplayEventInit extends EventInit {
-    display: VRDisplay;
-    reason?: VRDisplayEventReason;
-}
-
-interface VRLayer {
-    leftBounds?: number[] | Float32Array | null;
-    rightBounds?: number[] | Float32Array | null;
-    source?: HTMLCanvasElement | null;
-}
-
-interface VRStageParameters {
-    sittingToStandingTransform?: Float32Array;
-    sizeX?: number;
-    sizeY?: number;
+interface VideoConfiguration {
+    bitrate: number;
+    colorGamut?: ColorGamut;
+    contentType: string;
+    framerate: number;
+    hdrMetadataType?: HdrMetadataType;
+    height: number;
+    scalabilityMode?: string;
+    transferFunction?: TransferFunction;
+    width: number;
 }
 
 interface WaveShaperOptions extends AudioNodeOptions {
@@ -1940,6 +1811,10 @@
     deltaZ?: number;
 }
 
+interface WindowPostMessageOptions extends PostMessageOptions {
+    targetOrigin?: string;
+}
+
 interface WorkerOptions {
     credentials?: RequestCredentials;
     name?: string;
@@ -1950,9 +1825,26 @@
     credentials?: RequestCredentials;
 }
 
-interface EventListener {
-    (evt: Event): void;
-}
+type NodeFilter = ((node: Node) => number) | { acceptNode(node: Node): number; };
+
+declare var NodeFilter: {
+    readonly FILTER_ACCEPT: number;
+    readonly FILTER_REJECT: number;
+    readonly FILTER_SKIP: number;
+    readonly SHOW_ALL: number;
+    readonly SHOW_ATTRIBUTE: number;
+    readonly SHOW_CDATA_SECTION: number;
+    readonly SHOW_COMMENT: number;
+    readonly SHOW_DOCUMENT: number;
+    readonly SHOW_DOCUMENT_FRAGMENT: number;
+    readonly SHOW_DOCUMENT_TYPE: number;
+    readonly SHOW_ELEMENT: number;
+    readonly SHOW_ENTITY: number;
+    readonly SHOW_ENTITY_REFERENCE: number;
+    readonly SHOW_NOTATION: number;
+    readonly SHOW_PROCESSING_INSTRUCTION: number;
+    readonly SHOW_TEXT: number;
+};
 
 type XPathNSResolver = ((prefix: string | null) => string | null) | { lookupNamespaceURI(prefix: string | null): string | null; };
 
@@ -1964,6 +1856,45 @@
     readonly VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE: GLenum;
 }
 
+interface ARIAMixin {
+    ariaAtomic: string;
+    ariaAutoComplete: string;
+    ariaBusy: string;
+    ariaChecked: string;
+    ariaColCount: string;
+    ariaColIndex: string;
+    ariaColSpan: string;
+    ariaCurrent: string;
+    ariaDisabled: string;
+    ariaExpanded: string;
+    ariaHasPopup: string;
+    ariaHidden: string;
+    ariaKeyShortcuts: string;
+    ariaLabel: string;
+    ariaLevel: string;
+    ariaLive: string;
+    ariaModal: string;
+    ariaMultiLine: string;
+    ariaMultiSelectable: string;
+    ariaOrientation: string;
+    ariaPlaceholder: string;
+    ariaPosInSet: string;
+    ariaPressed: string;
+    ariaReadOnly: string;
+    ariaRequired: string;
+    ariaRoleDescription: string;
+    ariaRowCount: string;
+    ariaRowIndex: string;
+    ariaRowSpan: string;
+    ariaSelected: string;
+    ariaSetSize: string;
+    ariaSort: string;
+    ariaValueMax: string;
+    ariaValueMin: string;
+    ariaValueNow: string;
+    ariaValueText: string;
+}
+
 /** A controller object that allows you to abort one or more DOM requests as and when desired. */
 interface AbortController {
     /**
@@ -2043,14 +1974,6 @@
     removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;
 }
 
-interface AesCfbParams extends Algorithm {
-    iv: Int8Array | Int16Array | Int32Array | Uint8Array | Uint16Array | Uint32Array | Uint8ClampedArray | Float32Array | Float64Array | DataView | ArrayBuffer;
-}
-
-interface AesCmacParams extends Algorithm {
-    length: number;
-}
-
 /** A node able to provide real-time frequency and time-domain analysis information. It is an AudioNode that passes the audio stream unchanged from the input to the output, but allows you to take the generated data, process it, and create audio visualizations. */
 interface AnalyserNode extends AudioNode {
     fftSize: number;
@@ -2071,12 +1994,13 @@
 
 interface Animatable {
     animate(keyframes: Keyframe[] | PropertyIndexedKeyframes | null, options?: number | KeyframeAnimationOptions): Animation;
-    getAnimations(): Animation[];
+    getAnimations(options?: GetAnimationsOptions): Animation[];
 }
 
 interface AnimationEventMap {
     "cancel": AnimationPlaybackEvent;
     "finish": AnimationPlaybackEvent;
+    "remove": Event;
 }
 
 interface Animation extends EventTarget {
@@ -2086,15 +2010,19 @@
     id: string;
     oncancel: ((this: Animation, ev: AnimationPlaybackEvent) => any) | null;
     onfinish: ((this: Animation, ev: AnimationPlaybackEvent) => any) | null;
+    onremove: ((this: Animation, ev: Event) => any) | null;
     readonly pending: boolean;
     readonly playState: AnimationPlayState;
     playbackRate: number;
     readonly ready: Promise<Animation>;
+    readonly replaceState: AnimationReplaceState;
     startTime: number | null;
     timeline: AnimationTimeline | null;
     cancel(): void;
+    commitStyles(): void;
     finish(): void;
     pause(): void;
+    persist(): void;
     play(): void;
     reverse(): void;
     updatePlaybackRate(playbackRate: number): void;
@@ -2156,65 +2084,6 @@
     new(): AnimationTimeline;
 };
 
-interface ApplicationCacheEventMap {
-    "cached": Event;
-    "checking": Event;
-    "downloading": Event;
-    "error": Event;
-    "noupdate": Event;
-    "obsolete": Event;
-    "progress": ProgressEvent<ApplicationCache>;
-    "updateready": Event;
-}
-
-interface ApplicationCache extends EventTarget {
-    /** @deprecated */
-    oncached: ((this: ApplicationCache, ev: Event) => any) | null;
-    /** @deprecated */
-    onchecking: ((this: ApplicationCache, ev: Event) => any) | null;
-    /** @deprecated */
-    ondownloading: ((this: ApplicationCache, ev: Event) => any) | null;
-    /** @deprecated */
-    onerror: ((this: ApplicationCache, ev: Event) => any) | null;
-    /** @deprecated */
-    onnoupdate: ((this: ApplicationCache, ev: Event) => any) | null;
-    /** @deprecated */
-    onobsolete: ((this: ApplicationCache, ev: Event) => any) | null;
-    /** @deprecated */
-    onprogress: ((this: ApplicationCache, ev: ProgressEvent<ApplicationCache>) => any) | null;
-    /** @deprecated */
-    onupdateready: ((this: ApplicationCache, ev: Event) => any) | null;
-    /** @deprecated */
-    readonly status: number;
-    /** @deprecated */
-    abort(): void;
-    /** @deprecated */
-    swapCache(): void;
-    /** @deprecated */
-    update(): void;
-    readonly CHECKING: number;
-    readonly DOWNLOADING: number;
-    readonly IDLE: number;
-    readonly OBSOLETE: number;
-    readonly UNCACHED: number;
-    readonly UPDATEREADY: number;
-    addEventListener<K extends keyof ApplicationCacheEventMap>(type: K, listener: (this: ApplicationCache, ev: ApplicationCacheEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
-    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
-    removeEventListener<K extends keyof ApplicationCacheEventMap>(type: K, listener: (this: ApplicationCache, ev: ApplicationCacheEventMap[K]) => any, options?: boolean | EventListenerOptions): void;
-    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;
-}
-
-declare var ApplicationCache: {
-    prototype: ApplicationCache;
-    new(): ApplicationCache;
-    readonly CHECKING: number;
-    readonly DOWNLOADING: number;
-    readonly IDLE: number;
-    readonly OBSOLETE: number;
-    readonly UNCACHED: number;
-    readonly UPDATEREADY: number;
-};
-
 /** A DOM element's attribute as an object. In most DOM methods, you will probably directly retrieve the attribute as a string (e.g., Element.getAttribute(), but certain functions (e.g., Element.getAttributeNode()) or means of iterating give Attr types. */
 interface Attr extends Node {
     readonly localName: string;
@@ -2271,12 +2140,10 @@
 /** An audio-processing graph built from audio modules linked together, each represented by an AudioNode. */
 interface AudioContext extends BaseAudioContext {
     readonly baseLatency: number;
-    readonly outputLatency: number;
     close(): Promise<void>;
     createMediaElementSource(mediaElement: HTMLMediaElement): MediaElementAudioSourceNode;
     createMediaStreamDestination(): MediaStreamAudioDestinationNode;
     createMediaStreamSource(mediaStream: MediaStream): MediaStreamAudioSourceNode;
-    createMediaStreamTrackSource(mediaStreamTrack: MediaStreamTrack): MediaStreamTrackAudioSourceNode;
     getOutputTimestamp(): AudioTimestamp;
     resume(): Promise<void>;
     suspend(): Promise<void>;
@@ -2377,15 +2244,20 @@
     new(): AudioParamMap;
 };
 
-/** The Web Audio API events that occur when a ScriptProcessorNode input buffer is ready to be processed.
+/**
+ * The Web Audio API events that occur when a ScriptProcessorNode input buffer is ready to be processed.
  * @deprecated As of the August 29 2014 Web Audio API spec publication, this feature has been marked as deprecated, and is soon to be replaced by AudioWorklet.
  */
 interface AudioProcessingEvent extends Event {
+    /** @deprecated */
     readonly inputBuffer: AudioBuffer;
+    /** @deprecated */
     readonly outputBuffer: AudioBuffer;
+    /** @deprecated */
     readonly playbackTime: number;
 }
 
+/** @deprecated */
 declare var AudioProcessingEvent: {
     prototype: AudioProcessingEvent;
     new(type: string, eventInitDict: AudioProcessingEventInit): AudioProcessingEvent;
@@ -2502,6 +2374,7 @@
     createOscillator(): OscillatorNode;
     createPanner(): PannerNode;
     createPeriodicWave(real: number[] | Float32Array, imag: number[] | Float32Array, constraints?: PeriodicWaveConstraints): PeriodicWave;
+    /** @deprecated */
     createScriptProcessor(bufferSize?: number, numberOfInputChannels?: number, numberOfOutputChannels?: number): ScriptProcessorNode;
     createStereoPanner(): StereoPannerNode;
     createWaveShaper(): WaveShaperNode;
@@ -2527,28 +2400,6 @@
     new(): BeforeUnloadEvent;
 };
 
-interface BhxBrowser {
-    readonly lastError: DOMException;
-    checkMatchesGlobExpression(pattern: string, value: string): boolean;
-    checkMatchesUriExpression(pattern: string, value: string): boolean;
-    clearLastError(): void;
-    currentWindowId(): number;
-    fireExtensionApiTelemetry(functionName: string, isSucceeded: boolean, isSupported: boolean, errorString: string): void;
-    genericFunction(functionId: number, destination: any, parameters?: string, callbackId?: number): void;
-    genericSynchronousFunction(functionId: number, parameters?: string): string;
-    getExtensionId(): string;
-    getThisAddress(): any;
-    registerGenericFunctionCallbackHandler(callbackHandler: Function): void;
-    registerGenericListenerHandler(eventHandler: Function): void;
-    setLastError(parameters: string): void;
-    webPlatformGenericFunction(destination: any, parameters?: string, callbackId?: number): void;
-}
-
-declare var BhxBrowser: {
-    prototype: BhxBrowser;
-    new(): BhxBrowser;
-};
-
 /** A simple low-order filter, and is created using the AudioContext.createBiquadFilter() method. It is an AudioNode that can represent different kinds of filters, tone control devices, and graphic equalizers. */
 interface BiquadFilterNode extends AudioNode {
     readonly Q: AudioParam;
@@ -2579,6 +2430,16 @@
     new(blobParts?: BlobPart[], options?: BlobPropertyBag): Blob;
 };
 
+interface BlobEvent extends Event {
+    readonly data: Blob;
+    readonly timecode: DOMHighResTimeStamp;
+}
+
+declare var BlobEvent: {
+    prototype: BlobEvent;
+    new(type: string, eventInitDict: BlobEventInit): BlobEvent;
+};
+
 interface Body {
     readonly body: ReadableStream<Uint8Array> | null;
     readonly bodyUsed: boolean;
@@ -2640,6 +2501,19 @@
     new(): CDATASection;
 };
 
+interface CSSAnimation extends Animation {
+    readonly animationName: string;
+    addEventListener<K extends keyof AnimationEventMap>(type: K, listener: (this: CSSAnimation, ev: AnimationEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
+    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
+    removeEventListener<K extends keyof AnimationEventMap>(type: K, listener: (this: CSSAnimation, ev: AnimationEventMap[K]) => any, options?: boolean | EventListenerOptions): void;
+    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;
+}
+
+declare var CSSAnimation: {
+    prototype: CSSAnimation;
+    new(): CSSAnimation;
+};
+
 /** A single condition CSS at-rule, which consists of a condition and a statement block. It is a child of CSSGroupingRule. */
 interface CSSConditionRule extends CSSGroupingRule {
     conditionText: string;
@@ -2650,6 +2524,25 @@
     new(): CSSConditionRule;
 };
 
+interface CSSCounterStyleRule extends CSSRule {
+    additiveSymbols: string;
+    fallback: string;
+    name: string;
+    negative: string;
+    pad: string;
+    prefix: string;
+    range: string;
+    speakAs: string;
+    suffix: string;
+    symbols: string;
+    system: string;
+}
+
+declare var CSSCounterStyleRule: {
+    prototype: CSSCounterStyleRule;
+    new(): CSSCounterStyleRule;
+};
+
 interface CSSFontFaceRule extends CSSRule {
     readonly style: CSSStyleDeclaration;
 }
@@ -2744,6 +2637,7 @@
     cssText: string;
     readonly parentRule: CSSRule | null;
     readonly parentStyleSheet: CSSStyleSheet | null;
+    /** @deprecated */
     readonly type: number;
     readonly CHARSET_RULE: number;
     readonly FONT_FACE_RULE: number;
@@ -2800,9 +2694,12 @@
     animationName: string;
     animationPlayState: string;
     animationTimingFunction: string;
+    appearance: string;
+    aspectRatio: string;
     backfaceVisibility: string;
     background: string;
     backgroundAttachment: string;
+    backgroundBlendMode: string;
     backgroundClip: string;
     backgroundColor: string;
     backgroundImage: string;
@@ -2815,6 +2712,8 @@
     baselineShift: string;
     blockSize: string;
     border: string;
+    borderBlock: string;
+    borderBlockColor: string;
     borderBlockEnd: string;
     borderBlockEndColor: string;
     borderBlockEndStyle: string;
@@ -2823,6 +2722,8 @@
     borderBlockStartColor: string;
     borderBlockStartStyle: string;
     borderBlockStartWidth: string;
+    borderBlockStyle: string;
+    borderBlockWidth: string;
     borderBottom: string;
     borderBottomColor: string;
     borderBottomLeftRadius: string;
@@ -2831,12 +2732,16 @@
     borderBottomWidth: string;
     borderCollapse: string;
     borderColor: string;
+    borderEndEndRadius: string;
+    borderEndStartRadius: string;
     borderImage: string;
     borderImageOutset: string;
     borderImageRepeat: string;
     borderImageSlice: string;
     borderImageSource: string;
     borderImageWidth: string;
+    borderInline: string;
+    borderInlineColor: string;
     borderInlineEnd: string;
     borderInlineEndColor: string;
     borderInlineEndStyle: string;
@@ -2845,6 +2750,8 @@
     borderInlineStartColor: string;
     borderInlineStartStyle: string;
     borderInlineStartWidth: string;
+    borderInlineStyle: string;
+    borderInlineWidth: string;
     borderLeft: string;
     borderLeftColor: string;
     borderLeftStyle: string;
@@ -2855,6 +2762,8 @@
     borderRightStyle: string;
     borderRightWidth: string;
     borderSpacing: string;
+    borderStartEndRadius: string;
+    borderStartStartRadius: string;
     borderStyle: string;
     borderTop: string;
     borderTopColor: string;
@@ -2872,12 +2781,14 @@
     captionSide: string;
     caretColor: string;
     clear: string;
+    /** @deprecated */
     clip: string;
     clipPath: string;
     clipRule: string;
     color: string;
     colorInterpolation: string;
     colorInterpolationFilters: string;
+    colorScheme: string;
     columnCount: string;
     columnFill: string;
     columnGap: string;
@@ -2888,9 +2799,11 @@
     columnSpan: string;
     columnWidth: string;
     columns: string;
+    contain: string;
     content: string;
     counterIncrement: string;
     counterReset: string;
+    counterSet: string;
     cssFloat: string;
     cssText: string;
     cursor: string;
@@ -2916,20 +2829,23 @@
     fontFamily: string;
     fontFeatureSettings: string;
     fontKerning: string;
+    fontOpticalSizing: string;
     fontSize: string;
     fontSizeAdjust: string;
     fontStretch: string;
     fontStyle: string;
     fontSynthesis: string;
     fontVariant: string;
+    /** @deprecated */
+    fontVariantAlternates: string;
     fontVariantCaps: string;
     fontVariantEastAsian: string;
     fontVariantLigatures: string;
     fontVariantNumeric: string;
     fontVariantPosition: string;
+    fontVariationSettings: string;
     fontWeight: string;
     gap: string;
-    glyphOrientationVertical: string;
     grid: string;
     gridArea: string;
     gridAutoColumns: string;
@@ -2950,9 +2866,18 @@
     gridTemplateRows: string;
     height: string;
     hyphens: string;
+    /** @deprecated */
     imageOrientation: string;
     imageRendering: string;
     inlineSize: string;
+    inset: string;
+    insetBlock: string;
+    insetBlockEnd: string;
+    insetBlockStart: string;
+    insetInline: string;
+    insetInlineEnd: string;
+    insetInlineStart: string;
+    isolation: string;
     justifyContent: string;
     justifyItems: string;
     justifySelf: string;
@@ -2967,9 +2892,11 @@
     listStylePosition: string;
     listStyleType: string;
     margin: string;
+    marginBlock: string;
     marginBlockEnd: string;
     marginBlockStart: string;
     marginBottom: string;
+    marginInline: string;
     marginInlineEnd: string;
     marginInlineStart: string;
     marginLeft: string;
@@ -2980,11 +2907,6 @@
     markerMid: string;
     markerStart: string;
     mask: string;
-    maskComposite: string;
-    maskImage: string;
-    maskPosition: string;
-    maskRepeat: string;
-    maskSize: string;
     maskType: string;
     maxBlockSize: string;
     maxHeight: string;
@@ -2994,8 +2916,14 @@
     minHeight: string;
     minInlineSize: string;
     minWidth: string;
+    mixBlendMode: string;
     objectFit: string;
     objectPosition: string;
+    offset: string;
+    offsetAnchor: string;
+    offsetDistance: string;
+    offsetPath: string;
+    offsetRotate: string;
     opacity: string;
     order: string;
     orphans: string;
@@ -3015,9 +2943,11 @@
     overscrollBehaviorX: string;
     overscrollBehaviorY: string;
     padding: string;
+    paddingBlock: string;
     paddingBlockEnd: string;
     paddingBlockStart: string;
     paddingBottom: string;
+    paddingInline: string;
     paddingInlineEnd: string;
     paddingInlineStart: string;
     paddingLeft: string;
@@ -3040,10 +2970,37 @@
     right: string;
     rotate: string;
     rowGap: string;
-    rubyAlign: string;
     rubyPosition: string;
     scale: string;
     scrollBehavior: string;
+    scrollMargin: string;
+    scrollMarginBlock: string;
+    scrollMarginBlockEnd: string;
+    scrollMarginBlockStart: string;
+    scrollMarginBottom: string;
+    scrollMarginInline: string;
+    scrollMarginInlineEnd: string;
+    scrollMarginInlineStart: string;
+    scrollMarginLeft: string;
+    scrollMarginRight: string;
+    scrollMarginTop: string;
+    scrollPadding: string;
+    scrollPaddingBlock: string;
+    scrollPaddingBlockEnd: string;
+    scrollPaddingBlockStart: string;
+    scrollPaddingBottom: string;
+    scrollPaddingInline: string;
+    scrollPaddingInlineEnd: string;
+    scrollPaddingInlineStart: string;
+    scrollPaddingLeft: string;
+    scrollPaddingRight: string;
+    scrollPaddingTop: string;
+    scrollSnapAlign: string;
+    scrollSnapStop: string;
+    scrollSnapType: string;
+    shapeImageThreshold: string;
+    shapeMargin: string;
+    shapeOutside: string;
     shapeRendering: string;
     stopColor: string;
     stopOpacity: string;
@@ -3064,18 +3021,20 @@
     textDecoration: string;
     textDecorationColor: string;
     textDecorationLine: string;
+    textDecorationSkipInk: string;
     textDecorationStyle: string;
+    textDecorationThickness: string;
     textEmphasis: string;
     textEmphasisColor: string;
     textEmphasisPosition: string;
     textEmphasisStyle: string;
     textIndent: string;
-    textJustify: string;
     textOrientation: string;
     textOverflow: string;
     textRendering: string;
     textShadow: string;
     textTransform: string;
+    textUnderlineOffset: string;
     textUnderlinePosition: string;
     top: string;
     touchAction: string;
@@ -3093,49 +3052,49 @@
     userSelect: string;
     verticalAlign: string;
     visibility: string;
-    /** @deprecated */
+    /** @deprecated This is a legacy alias of `alignContent`. */
     webkitAlignContent: string;
-    /** @deprecated */
+    /** @deprecated This is a legacy alias of `alignItems`. */
     webkitAlignItems: string;
-    /** @deprecated */
+    /** @deprecated This is a legacy alias of `alignSelf`. */
     webkitAlignSelf: string;
-    /** @deprecated */
+    /** @deprecated This is a legacy alias of `animation`. */
     webkitAnimation: string;
-    /** @deprecated */
+    /** @deprecated This is a legacy alias of `animationDelay`. */
     webkitAnimationDelay: string;
-    /** @deprecated */
+    /** @deprecated This is a legacy alias of `animationDirection`. */
     webkitAnimationDirection: string;
-    /** @deprecated */
+    /** @deprecated This is a legacy alias of `animationDuration`. */
     webkitAnimationDuration: string;
-    /** @deprecated */
+    /** @deprecated This is a legacy alias of `animationFillMode`. */
     webkitAnimationFillMode: string;
-    /** @deprecated */
+    /** @deprecated This is a legacy alias of `animationIterationCount`. */
     webkitAnimationIterationCount: string;
-    /** @deprecated */
+    /** @deprecated This is a legacy alias of `animationName`. */
     webkitAnimationName: string;
-    /** @deprecated */
+    /** @deprecated This is a legacy alias of `animationPlayState`. */
     webkitAnimationPlayState: string;
-    /** @deprecated */
+    /** @deprecated This is a legacy alias of `animationTimingFunction`. */
     webkitAnimationTimingFunction: string;
-    /** @deprecated */
+    /** @deprecated This is a legacy alias of `appearance`. */
     webkitAppearance: string;
-    /** @deprecated */
+    /** @deprecated This is a legacy alias of `backfaceVisibility`. */
     webkitBackfaceVisibility: string;
-    /** @deprecated */
+    /** @deprecated This is a legacy alias of `backgroundClip`. */
     webkitBackgroundClip: string;
-    /** @deprecated */
+    /** @deprecated This is a legacy alias of `backgroundOrigin`. */
     webkitBackgroundOrigin: string;
-    /** @deprecated */
+    /** @deprecated This is a legacy alias of `backgroundSize`. */
     webkitBackgroundSize: string;
-    /** @deprecated */
+    /** @deprecated This is a legacy alias of `borderBottomLeftRadius`. */
     webkitBorderBottomLeftRadius: string;
-    /** @deprecated */
+    /** @deprecated This is a legacy alias of `borderBottomRightRadius`. */
     webkitBorderBottomRightRadius: string;
-    /** @deprecated */
+    /** @deprecated This is a legacy alias of `borderRadius`. */
     webkitBorderRadius: string;
-    /** @deprecated */
+    /** @deprecated This is a legacy alias of `borderTopLeftRadius`. */
     webkitBorderTopLeftRadius: string;
-    /** @deprecated */
+    /** @deprecated This is a legacy alias of `borderTopRightRadius`. */
     webkitBorderTopRightRadius: string;
     /** @deprecated */
     webkitBoxAlign: string;
@@ -3147,91 +3106,83 @@
     webkitBoxOrient: string;
     /** @deprecated */
     webkitBoxPack: string;
-    /** @deprecated */
+    /** @deprecated This is a legacy alias of `boxShadow`. */
     webkitBoxShadow: string;
-    /** @deprecated */
+    /** @deprecated This is a legacy alias of `boxSizing`. */
     webkitBoxSizing: string;
-    /** @deprecated */
+    /** @deprecated This is a legacy alias of `filter`. */
     webkitFilter: string;
-    /** @deprecated */
+    /** @deprecated This is a legacy alias of `flex`. */
     webkitFlex: string;
-    /** @deprecated */
+    /** @deprecated This is a legacy alias of `flexBasis`. */
     webkitFlexBasis: string;
-    /** @deprecated */
+    /** @deprecated This is a legacy alias of `flexDirection`. */
     webkitFlexDirection: string;
-    /** @deprecated */
+    /** @deprecated This is a legacy alias of `flexFlow`. */
     webkitFlexFlow: string;
-    /** @deprecated */
+    /** @deprecated This is a legacy alias of `flexGrow`. */
     webkitFlexGrow: string;
-    /** @deprecated */
+    /** @deprecated This is a legacy alias of `flexShrink`. */
     webkitFlexShrink: string;
-    /** @deprecated */
+    /** @deprecated This is a legacy alias of `flexWrap`. */
     webkitFlexWrap: string;
-    /** @deprecated */
+    /** @deprecated This is a legacy alias of `justifyContent`. */
     webkitJustifyContent: string;
     webkitLineClamp: string;
-    /** @deprecated */
+    /** @deprecated This is a legacy alias of `mask`. */
     webkitMask: string;
-    /** @deprecated */
+    /** @deprecated This is a legacy alias of `maskBorder`. */
     webkitMaskBoxImage: string;
-    /** @deprecated */
+    /** @deprecated This is a legacy alias of `maskBorderOutset`. */
     webkitMaskBoxImageOutset: string;
-    /** @deprecated */
+    /** @deprecated This is a legacy alias of `maskBorderRepeat`. */
     webkitMaskBoxImageRepeat: string;
-    /** @deprecated */
+    /** @deprecated This is a legacy alias of `maskBorderSlice`. */
     webkitMaskBoxImageSlice: string;
-    /** @deprecated */
+    /** @deprecated This is a legacy alias of `maskBorderSource`. */
     webkitMaskBoxImageSource: string;
-    /** @deprecated */
+    /** @deprecated This is a legacy alias of `maskBorderWidth`. */
     webkitMaskBoxImageWidth: string;
-    /** @deprecated */
+    /** @deprecated This is a legacy alias of `maskClip`. */
     webkitMaskClip: string;
-    /** @deprecated */
     webkitMaskComposite: string;
-    /** @deprecated */
+    /** @deprecated This is a legacy alias of `maskImage`. */
     webkitMaskImage: string;
-    /** @deprecated */
+    /** @deprecated This is a legacy alias of `maskOrigin`. */
     webkitMaskOrigin: string;
-    /** @deprecated */
+    /** @deprecated This is a legacy alias of `maskPosition`. */
     webkitMaskPosition: string;
-    /** @deprecated */
+    /** @deprecated This is a legacy alias of `maskRepeat`. */
     webkitMaskRepeat: string;
-    /** @deprecated */
+    /** @deprecated This is a legacy alias of `maskSize`. */
     webkitMaskSize: string;
-    /** @deprecated */
+    /** @deprecated This is a legacy alias of `order`. */
     webkitOrder: string;
-    /** @deprecated */
+    /** @deprecated This is a legacy alias of `perspective`. */
     webkitPerspective: string;
-    /** @deprecated */
+    /** @deprecated This is a legacy alias of `perspectiveOrigin`. */
     webkitPerspectiveOrigin: string;
-    webkitTapHighlightColor: string;
-    /** @deprecated */
     webkitTextFillColor: string;
-    /** @deprecated */
-    webkitTextSizeAdjust: string;
-    /** @deprecated */
     webkitTextStroke: string;
-    /** @deprecated */
     webkitTextStrokeColor: string;
-    /** @deprecated */
     webkitTextStrokeWidth: string;
-    /** @deprecated */
+    /** @deprecated This is a legacy alias of `transform`. */
     webkitTransform: string;
-    /** @deprecated */
+    /** @deprecated This is a legacy alias of `transformOrigin`. */
     webkitTransformOrigin: string;
-    /** @deprecated */
+    /** @deprecated This is a legacy alias of `transformStyle`. */
     webkitTransformStyle: string;
-    /** @deprecated */
+    /** @deprecated This is a legacy alias of `transition`. */
     webkitTransition: string;
-    /** @deprecated */
+    /** @deprecated This is a legacy alias of `transitionDelay`. */
     webkitTransitionDelay: string;
-    /** @deprecated */
+    /** @deprecated This is a legacy alias of `transitionDuration`. */
     webkitTransitionDuration: string;
-    /** @deprecated */
+    /** @deprecated This is a legacy alias of `transitionProperty`. */
     webkitTransitionProperty: string;
-    /** @deprecated */
+    /** @deprecated This is a legacy alias of `transitionTimingFunction`. */
     webkitTransitionTimingFunction: string;
-    /** @deprecated */
+    /** @deprecated This is a legacy alias of `userSelect`. */
     webkitUserSelect: string;
     whiteSpace: string;
     widows: string;
@@ -3239,11 +3190,10 @@
     willChange: string;
     wordBreak: string;
     wordSpacing: string;
+    /** @deprecated */
     wordWrap: string;
     writingMode: string;
     zIndex: string;
-    /** @deprecated */
-    zoom: string;
     getPropertyPriority(property: string): string;
     getPropertyValue(property: string): string;
     item(index: number): string;
@@ -3272,16 +3222,19 @@
 interface CSSStyleSheet extends StyleSheet {
     readonly cssRules: CSSRuleList;
     readonly ownerRule: CSSRule | null;
+    /** @deprecated */
     readonly rules: CSSRuleList;
+    /** @deprecated */
     addRule(selector?: string, style?: string, index?: number): number;
     deleteRule(index: number): void;
     insertRule(rule: string, index?: number): number;
+    /** @deprecated */
     removeRule(index?: number): void;
 }
 
 declare var CSSStyleSheet: {
     prototype: CSSStyleSheet;
-    new(): CSSStyleSheet;
+    new(options?: CSSStyleSheetInit): CSSStyleSheet;
 };
 
 /** An object representing a single CSS @supports at-rule. It implements the CSSConditionRule interface, and therefore the CSSRule and CSSGroupingRule interfaces with a type value of 12 (CSSRule.SUPPORTS_RULE). */
@@ -3293,6 +3246,19 @@
     new(): CSSSupportsRule;
 };
 
+interface CSSTransition extends Animation {
+    readonly transitionProperty: string;
+    addEventListener<K extends keyof AnimationEventMap>(type: K, listener: (this: CSSTransition, ev: AnimationEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
+    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
+    removeEventListener<K extends keyof AnimationEventMap>(type: K, listener: (this: CSSTransition, ev: AnimationEventMap[K]) => any, options?: boolean | EventListenerOptions): void;
+    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;
+}
+
+declare var CSSTransition: {
+    prototype: CSSTransition;
+    new(): CSSTransition;
+};
+
 /** Provides a storage mechanism for Request / Response object pairs that are cached, for example as part of the ServiceWorker life cycle. Note that the Cache interface is exposed to windowed scopes as well as workers. You don't have to use it in conjunction with service workers, even though it is defined in the service worker spec. */
 interface Cache {
     add(request: RequestInfo): Promise<void>;
@@ -3376,9 +3342,9 @@
 };
 
 interface CanvasImageData {
-    createImageData(sw: number, sh: number): ImageData;
+    createImageData(sw: number, sh: number, settings?: ImageDataSettings): ImageData;
     createImageData(imagedata: ImageData): ImageData;
-    getImageData(sx: number, sy: number, sw: number, sh: number): ImageData;
+    getImageData(sx: number, sy: number, sw: number, sh: number, settings?: ImageDataSettings): ImageData;
     putImageData(imagedata: ImageData, dx: number, dy: number): void;
     putImageData(imagedata: ImageData, dx: number, dy: number, dirtyX: number, dirtyY: number, dirtyWidth: number, dirtyHeight: number): void;
 }
@@ -3389,11 +3355,11 @@
 }
 
 interface CanvasPath {
-    arc(x: number, y: number, radius: number, startAngle: number, endAngle: number, anticlockwise?: boolean): void;
+    arc(x: number, y: number, radius: number, startAngle: number, endAngle: number, counterclockwise?: boolean): void;
     arcTo(x1: number, y1: number, x2: number, y2: number, radius: number): void;
     bezierCurveTo(cp1x: number, cp1y: number, cp2x: number, cp2y: number, x: number, y: number): void;
     closePath(): void;
-    ellipse(x: number, y: number, radiusX: number, radiusY: number, rotation: number, startAngle: number, endAngle: number, anticlockwise?: boolean): void;
+    ellipse(x: number, y: number, radiusX: number, radiusY: number, rotation: number, startAngle: number, endAngle: number, counterclockwise?: boolean): void;
     lineTo(x: number, y: number): void;
     moveTo(x: number, y: number): void;
     quadraticCurveTo(cpx: number, cpy: number, x: number, y: number): void;
@@ -3432,6 +3398,7 @@
 /** The CanvasRenderingContext2D interface, part of the Canvas API, provides the 2D rendering context for the drawing surface of a <canvas> element. It is used for drawing shapes, text, images, and other objects. */
 interface CanvasRenderingContext2D extends CanvasCompositing, CanvasDrawImage, CanvasDrawPath, CanvasFillStrokeStyles, CanvasFilters, CanvasImageData, CanvasImageSmoothing, CanvasPath, CanvasPathDrawingStyles, CanvasRect, CanvasShadowStyles, CanvasState, CanvasText, CanvasTextDrawingStyles, CanvasTransform, CanvasUserInterface {
     readonly canvas: HTMLCanvasElement;
+    getContextAttributes(): CanvasRenderingContext2DSettings;
 }
 
 declare var CanvasRenderingContext2D: {
@@ -3478,21 +3445,8 @@
 interface CanvasUserInterface {
     drawFocusIfNeeded(element: Element): void;
     drawFocusIfNeeded(path: Path2D, element: Element): void;
-    scrollPathIntoView(): void;
-    scrollPathIntoView(path: Path2D): void;
 }
 
-interface CaretPosition {
-    readonly offset: number;
-    readonly offsetNode: Node;
-    getClientRect(): DOMRect | null;
-}
-
-declare var CaretPosition: {
-    prototype: CaretPosition;
-    new(): CaretPosition;
-};
-
 /** The ChannelMergerNode interface, often used in conjunction with its opposite, ChannelSplitterNode, reunites different mono inputs into a single output. Each input is used to fill a channel of the output. This is useful for accessing each channels separately, e.g. for performing channel mixing where gain must be separately controlled on each channel. */
 interface ChannelMergerNode extends AudioNode {
 }
@@ -3553,33 +3507,14 @@
     replaceWith(...nodes: (Node | string)[]): void;
 }
 
-interface ClientRect {
-    bottom: number;
-    readonly height: number;
-    left: number;
-    right: number;
-    top: number;
-    readonly width: number;
+/** @deprecated */
+interface ClientRect extends DOMRect {
 }
 
-declare var ClientRect: {
-    prototype: ClientRect;
-    new(): ClientRect;
-};
-
-interface ClientRectList {
-    readonly length: number;
-    item(index: number): ClientRect;
-    [index: number]: ClientRect;
-}
-
-declare var ClientRectList: {
-    prototype: ClientRectList;
-    new(): ClientRectList;
-};
-
 interface Clipboard extends EventTarget {
+    read(): Promise<ClipboardItems>;
     readText(): Promise<string>;
+    write(data: ClipboardItems): Promise<void>;
     writeText(data: string): Promise<void>;
 }
 
@@ -3598,6 +3533,16 @@
     new(type: string, eventInitDict?: ClipboardEventInit): ClipboardEvent;
 };
 
+interface ClipboardItem {
+    readonly types: ReadonlyArray<string>;
+    getType(type: string): Promise<Blob>;
+}
+
+declare var ClipboardItem: {
+    prototype: ClipboardItem;
+    new(items: Record<string, ClipboardItemData>, options?: ClipboardItemOptions): ClipboardItem;
+};
+
 /** A CloseEvent is sent to clients using WebSockets when the connection is closed. This is delivered to the listener indicated by the WebSocket object's onclose attribute. */
 interface CloseEvent extends Event {
     /**
@@ -3631,6 +3576,8 @@
 /** The DOM CompositionEvent represents events that occur due to the user indirectly entering text. */
 interface CompositionEvent extends UIEvent {
     readonly data: string;
+    /** @deprecated */
+    initCompositionEvent(typeArg: string, bubblesArg?: boolean, cancelableArg?: boolean, viewArg?: WindowProxy | null, dataArg?: string): void;
 }
 
 declare var CompositionEvent: {
@@ -3638,15 +3585,6 @@
     new(type: string, eventInitDict?: CompositionEventInit): CompositionEvent;
 };
 
-interface ConcatParams extends Algorithm {
-    algorithmId: Uint8Array;
-    hash?: string | Algorithm;
-    partyUInfo: Uint8Array;
-    partyVInfo: Uint8Array;
-    privateInfo?: Uint8Array;
-    publicInfo?: Uint8Array;
-}
-
 interface ConstantSourceNode extends AudioScheduledSourceNode {
     readonly offset: AudioParam;
     addEventListener<K extends keyof AudioScheduledSourceNodeEventMap>(type: K, listener: (this: ConstantSourceNode, ev: AudioScheduledSourceNodeEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
@@ -3707,7 +3645,7 @@
 /** Basic cryptography features available in the current context. It allows access to a cryptographically strong random number generator and to cryptographic primitives. */
 interface Crypto {
     readonly subtle: SubtleCrypto;
-    getRandomValues<T extends Int8Array | Int16Array | Int32Array | Uint8Array | Uint16Array | Uint32Array | Uint8ClampedArray | Float32Array | Float64Array | DataView | null>(array: T): T;
+    getRandomValues<T extends ArrayBufferView | null>(array: T): T;
 }
 
 declare var Crypto: {
@@ -3728,22 +3666,11 @@
     new(): CryptoKey;
 };
 
-/** The CryptoKeyPair dictionary of the Web Crypto API represents a key pair for an asymmetric cryptography algorithm, also known as a public-key algorithm. */
-interface CryptoKeyPair {
-    privateKey: CryptoKey;
-    publicKey: CryptoKey;
-}
-
-declare var CryptoKeyPair: {
-    prototype: CryptoKeyPair;
-    new(): CryptoKeyPair;
-};
-
 interface CustomElementRegistry {
     define(name: string, constructor: CustomElementConstructor, options?: ElementDefinitionOptions): void;
-    get(name: string): any;
+    get(name: string): CustomElementConstructor | undefined;
     upgrade(root: Node): void;
-    whenDefined(name: string): Promise<void>;
+    whenDefined(name: string): Promise<CustomElementConstructor>;
 }
 
 declare var CustomElementRegistry: {
@@ -3756,23 +3683,13 @@
      * Returns any custom data event was created with. Typically used for synthetic events.
      */
     readonly detail: T;
-    initCustomEvent(typeArg: string, canBubbleArg: boolean, cancelableArg: boolean, detailArg: T): void;
+    /** @deprecated */
+    initCustomEvent(type: string, bubbles?: boolean, cancelable?: boolean, detail?: T): void;
 }
 
 declare var CustomEvent: {
     prototype: CustomEvent;
-    new<T>(typeArg: string, eventInitDict?: CustomEventInit<T>): CustomEvent<T>;
-};
-
-/** An error object that contains an error name. */
-interface DOMError {
-    readonly name: string;
-    toString(): string;
-}
-
-declare var DOMError: {
-    prototype: DOMError;
-    new(): DOMError;
+    new<T>(type: string, eventInitDict?: CustomEventInit<T>): CustomEvent<T>;
 };
 
 /** An abnormal event (called an exception) which occurs as a result of calling a method or accessing a property of a web API. */
@@ -4068,15 +3985,6 @@
     fromRect(other?: DOMRectInit): DOMRectReadOnly;
 };
 
-interface DOMSettableTokenList extends DOMTokenList {
-    value: string;
-}
-
-declare var DOMSettableTokenList: {
-    prototype: DOMSettableTokenList;
-    new(): DOMSettableTokenList;
-};
-
 /** A type returned by some APIs which contains a list of DOMString (strings). */
 interface DOMStringList {
     /**
@@ -4155,7 +4063,7 @@
      *
      * Throws an "InvalidCharacterError" DOMException if one of the arguments contains any ASCII whitespace.
      */
-    replace(oldToken: string, newToken: string): void;
+    replace(token: string, newToken: string): boolean;
     /**
      * Returns true if token is in the associated attribute's supported tokens. Returns false otherwise.
      *
@@ -4181,19 +4089,6 @@
     new(): DOMTokenList;
 };
 
-interface DataCue extends TextTrackCue {
-    data: ArrayBuffer;
-    addEventListener<K extends keyof TextTrackCueEventMap>(type: K, listener: (this: DataCue, ev: TextTrackCueEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
-    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
-    removeEventListener<K extends keyof TextTrackCueEventMap>(type: K, listener: (this: DataCue, ev: TextTrackCueEventMap[K]) => any, options?: boolean | EventListenerOptions): void;
-    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;
-}
-
-declare var DataCue: {
-    prototype: DataCue;
-    new(): DataCue;
-};
-
 /** Used to hold the data that is being dragged during a drag and drop operation. It may hold one or more data items, each of one or more data types. For more information about drag and drop, see HTML Drag and Drop API. */
 interface DataTransfer {
     /**
@@ -4265,7 +4160,7 @@
      * Invokes the callback with the string data as the argument, if the drag data item kind is text.
      */
     getAsString(callback: FunctionStringCallback | null): void;
-    webkitGetAsEntry(): any;
+    webkitGetAsEntry(): FileSystemEntry | null;
 }
 
 declare var DataTransferItem: {
@@ -4288,12 +4183,11 @@
      * Removes all the entries in the drag data store.
      */
     clear(): void;
-    item(index: number): DataTransferItem;
     /**
      * Removes the indexth entry in the drag data store.
      */
     remove(index: number): void;
-    [name: number]: DataTransferItem;
+    [index: number]: DataTransferItem;
 }
 
 declare var DataTransferItemList: {
@@ -4301,19 +4195,6 @@
     new(): DataTransferItemList;
 };
 
-interface DeferredPermissionRequest {
-    readonly id: number;
-    readonly type: MSWebViewPermissionType;
-    readonly uri: string;
-    allow(): void;
-    deny(): void;
-}
-
-declare var DeferredPermissionRequest: {
-    prototype: DeferredPermissionRequest;
-    new(): DeferredPermissionRequest;
-};
-
 /** A delay-line; an AudioNode audio-processing module that causes a delay between the arrival of an input data and its propagation to the output. */
 interface DelayNode extends AudioNode {
     readonly delayTime: AudioParam;
@@ -4324,18 +4205,6 @@
     new(context: BaseAudioContext, options?: DelayOptions): DelayNode;
 };
 
-/** Provides information about the amount of acceleration the device is experiencing along all three axes. */
-interface DeviceAcceleration {
-    readonly x: number | null;
-    readonly y: number | null;
-    readonly z: number | null;
-}
-
-declare var DeviceAcceleration: {
-    prototype: DeviceAcceleration;
-    new(): DeviceAcceleration;
-};
-
 /** The DeviceMotionEvent provides web developers with information about the speed of changes for the device's position and orientation. */
 interface DeviceMotionEvent extends Event {
     readonly acceleration: DeviceMotionEventAcceleration | null;
@@ -4347,7 +4216,6 @@
 declare var DeviceMotionEvent: {
     prototype: DeviceMotionEvent;
     new(type: string, eventInitDict?: DeviceMotionEventInit): DeviceMotionEvent;
-    requestPermission(): Promise<PermissionState>;
 };
 
 interface DeviceMotionEventAcceleration {
@@ -4373,41 +4241,9 @@
 declare var DeviceOrientationEvent: {
     prototype: DeviceOrientationEvent;
     new(type: string, eventInitDict?: DeviceOrientationEventInit): DeviceOrientationEvent;
-    requestPermission(): Promise<PermissionState>;
 };
 
-/** Provides information about the rate at which the device is rotating around all three axes. */
-interface DeviceRotationRate {
-    readonly alpha: number | null;
-    readonly beta: number | null;
-    readonly gamma: number | null;
-}
-
-declare var DeviceRotationRate: {
-    prototype: DeviceRotationRate;
-    new(): DeviceRotationRate;
-};
-
-interface DhImportKeyParams extends Algorithm {
-    generator: Uint8Array;
-    prime: Uint8Array;
-}
-
-interface DhKeyAlgorithm extends KeyAlgorithm {
-    generator: Uint8Array;
-    prime: Uint8Array;
-}
-
-interface DhKeyDeriveParams extends Algorithm {
-    public: CryptoKey;
-}
-
-interface DhKeyGenParams extends Algorithm {
-    generator: Uint8Array;
-    prime: Uint8Array;
-}
-
-interface DocumentEventMap extends GlobalEventHandlersEventMap, DocumentAndElementEventHandlersEventMap {
+interface DocumentEventMap extends DocumentAndElementEventHandlersEventMap, GlobalEventHandlersEventMap {
     "fullscreenchange": Event;
     "fullscreenerror": Event;
     "pointerlockchange": Event;
@@ -4417,35 +4253,35 @@
 }
 
 /** Any web page loaded in the browser and serves as an entry point into the web page's content, which is the DOM tree. */
-interface Document extends Node, DocumentAndElementEventHandlers, DocumentOrShadowRoot, GlobalEventHandlers, NonElementParentNode, ParentNode, XPathEvaluatorBase {
+interface Document extends Node, DocumentAndElementEventHandlers, DocumentOrShadowRoot, FontFaceSource, GlobalEventHandlers, NonElementParentNode, ParentNode, XPathEvaluatorBase {
     /**
      * Sets or gets the URL for the current document.
      */
     readonly URL: string;
     /**
      * Sets or gets the color of all active links in the document.
+     * @deprecated
      */
-    /** @deprecated */
     alinkColor: string;
     /**
      * Returns a reference to the collection of elements contained by the object.
+     * @deprecated
      */
-    /** @deprecated */
     readonly all: HTMLAllCollection;
     /**
      * Retrieves a collection of all a objects that have a name and/or id property. Objects in this collection are in HTML source order.
+     * @deprecated
      */
-    /** @deprecated */
     readonly anchors: HTMLCollectionOf<HTMLAnchorElement>;
     /**
      * Retrieves a collection of all applet objects in the document.
+     * @deprecated
      */
-    /** @deprecated */
-    readonly applets: HTMLCollectionOf<HTMLAppletElement>;
+    readonly applets: HTMLCollection;
     /**
      * Deprecated. Sets or retrieves a value that indicates the background color behind the object.
+     * @deprecated
      */
-    /** @deprecated */
     bgColor: string;
     /**
      * Specifies the beginning and end of the document body.
@@ -4457,6 +4293,7 @@
     readonly characterSet: string;
     /**
      * Gets or sets the character set used to encode the object.
+     * @deprecated This is a legacy alias of `characterSet`.
      */
     readonly charset: string;
     /**
@@ -4481,6 +4318,9 @@
      * Returns null if the Document is not currently executing a script or SVG script element (e.g., because the running script is an event handler, or a timeout), or if the currently executing script or SVG script element represents a module script.
      */
     readonly currentScript: HTMLOrSVGScriptElement | null;
+    /**
+     * Returns the Window object of the active document.
+     */
     readonly defaultView: (WindowProxy & typeof globalThis) | null;
     /**
      * Sets or gets a value that indicates whether the document can be edited.
@@ -4512,8 +4352,8 @@
     readonly embeds: HTMLCollectionOf<HTMLEmbedElement>;
     /**
      * Sets or gets the foreground (text) color of the document.
+     * @deprecated
      */
-    /** @deprecated */
     fgColor: string;
     /**
      * Retrieves a collection, in source order, of all form objects in the document.
@@ -4540,6 +4380,7 @@
     readonly implementation: DOMImplementation;
     /**
      * Returns the character encoding used to create the webpage that is loaded into the document object.
+     * @deprecated This is a legacy alias of `characterSet`.
      */
     readonly inputEncoding: string;
     /**
@@ -4548,8 +4389,8 @@
     readonly lastModified: string;
     /**
      * Sets or gets the color of the document links.
+     * @deprecated
      */
-    /** @deprecated */
     linkColor: string;
     /**
      * Retrieves a collection of all a objects that specify the href property and all area objects in the document.
@@ -4558,7 +4399,8 @@
     /**
      * Contains information about the current URL.
      */
-    location: Location;
+    get location(): Location;
+    set location(href: string | Location);
     onfullscreenchange: ((this: Document, ev: Event) => any) | null;
     onfullscreenerror: ((this: Document, ev: Event) => any) | null;
     onpointerlockchange: ((this: Document, ev: Event) => any) | null;
@@ -4570,6 +4412,7 @@
     onreadystatechange: ((this: Document, ev: Event) => any) | null;
     onvisibilitychange: ((this: Document, ev: Event) => any) | null;
     readonly ownerDocument: null;
+    readonly pictureInPictureEnabled: boolean;
     /**
      * Return an HTMLCollection of the embed elements in the Document.
      */
@@ -4582,6 +4425,8 @@
      * Gets the URL of the location that referred the user to the current page.
      */
     readonly referrer: string;
+    /** @deprecated */
+    readonly rootElement: SVGSVGElement | null;
     /**
      * Retrieves a collection of all script objects in the document.
      */
@@ -4595,20 +4440,19 @@
     readonly visibilityState: VisibilityState;
     /**
      * Sets or gets the color of the links that the user has visited.
+     * @deprecated
      */
-    /** @deprecated */
     vlinkColor: string;
     /**
      * Moves node from another document and returns it.
      *
      * If node is a document, throws a "NotSupportedError" DOMException or, if node is a shadow root, throws a "HierarchyRequestError" DOMException.
      */
-    adoptNode<T extends Node>(source: T): T;
+    adoptNode<T extends Node>(node: T): T;
     /** @deprecated */
     captureEvents(): void;
-    caretPositionFromPoint(x: number, y: number): CaretPosition | null;
     /** @deprecated */
-    caretRangeFromPoint(x: number, y: number): Range;
+    caretRangeFromPoint(x: number, y: number): Range | null;
     /** @deprecated */
     clear(): void;
     /**
@@ -4666,6 +4510,7 @@
     createEvent(eventInterface: "AnimationPlaybackEvent"): AnimationPlaybackEvent;
     createEvent(eventInterface: "AudioProcessingEvent"): AudioProcessingEvent;
     createEvent(eventInterface: "BeforeUnloadEvent"): BeforeUnloadEvent;
+    createEvent(eventInterface: "BlobEvent"): BlobEvent;
     createEvent(eventInterface: "ClipboardEvent"): ClipboardEvent;
     createEvent(eventInterface: "CloseEvent"): CloseEvent;
     createEvent(eventInterface: "CompositionEvent"): CompositionEvent;
@@ -4674,21 +4519,18 @@
     createEvent(eventInterface: "DeviceOrientationEvent"): DeviceOrientationEvent;
     createEvent(eventInterface: "DragEvent"): DragEvent;
     createEvent(eventInterface: "ErrorEvent"): ErrorEvent;
-    createEvent(eventInterface: "Event"): Event;
-    createEvent(eventInterface: "Events"): Event;
     createEvent(eventInterface: "FocusEvent"): FocusEvent;
-    createEvent(eventInterface: "FocusNavigationEvent"): FocusNavigationEvent;
+    createEvent(eventInterface: "FontFaceSetLoadEvent"): FontFaceSetLoadEvent;
+    createEvent(eventInterface: "FormDataEvent"): FormDataEvent;
     createEvent(eventInterface: "GamepadEvent"): GamepadEvent;
     createEvent(eventInterface: "HashChangeEvent"): HashChangeEvent;
     createEvent(eventInterface: "IDBVersionChangeEvent"): IDBVersionChangeEvent;
     createEvent(eventInterface: "InputEvent"): InputEvent;
     createEvent(eventInterface: "KeyboardEvent"): KeyboardEvent;
-    createEvent(eventInterface: "ListeningStateChangedEvent"): ListeningStateChangedEvent;
     createEvent(eventInterface: "MediaEncryptedEvent"): MediaEncryptedEvent;
     createEvent(eventInterface: "MediaKeyMessageEvent"): MediaKeyMessageEvent;
     createEvent(eventInterface: "MediaQueryListEvent"): MediaQueryListEvent;
-    createEvent(eventInterface: "MediaStreamErrorEvent"): MediaStreamErrorEvent;
-    createEvent(eventInterface: "MediaStreamEvent"): MediaStreamEvent;
+    createEvent(eventInterface: "MediaRecorderErrorEvent"): MediaRecorderErrorEvent;
     createEvent(eventInterface: "MediaStreamTrackEvent"): MediaStreamTrackEvent;
     createEvent(eventInterface: "MessageEvent"): MessageEvent;
     createEvent(eventInterface: "MouseEvent"): MouseEvent;
@@ -4696,42 +4538,28 @@
     createEvent(eventInterface: "MutationEvent"): MutationEvent;
     createEvent(eventInterface: "MutationEvents"): MutationEvent;
     createEvent(eventInterface: "OfflineAudioCompletionEvent"): OfflineAudioCompletionEvent;
-    createEvent(eventInterface: "OverflowEvent"): OverflowEvent;
     createEvent(eventInterface: "PageTransitionEvent"): PageTransitionEvent;
     createEvent(eventInterface: "PaymentMethodChangeEvent"): PaymentMethodChangeEvent;
     createEvent(eventInterface: "PaymentRequestUpdateEvent"): PaymentRequestUpdateEvent;
-    createEvent(eventInterface: "PermissionRequestedEvent"): PermissionRequestedEvent;
     createEvent(eventInterface: "PointerEvent"): PointerEvent;
     createEvent(eventInterface: "PopStateEvent"): PopStateEvent;
     createEvent(eventInterface: "ProgressEvent"): ProgressEvent;
     createEvent(eventInterface: "PromiseRejectionEvent"): PromiseRejectionEvent;
     createEvent(eventInterface: "RTCDTMFToneChangeEvent"): RTCDTMFToneChangeEvent;
     createEvent(eventInterface: "RTCDataChannelEvent"): RTCDataChannelEvent;
-    createEvent(eventInterface: "RTCDtlsTransportStateChangedEvent"): RTCDtlsTransportStateChangedEvent;
-    createEvent(eventInterface: "RTCErrorEvent"): RTCErrorEvent;
-    createEvent(eventInterface: "RTCIceCandidatePairChangedEvent"): RTCIceCandidatePairChangedEvent;
-    createEvent(eventInterface: "RTCIceGathererEvent"): RTCIceGathererEvent;
-    createEvent(eventInterface: "RTCIceTransportStateChangedEvent"): RTCIceTransportStateChangedEvent;
     createEvent(eventInterface: "RTCPeerConnectionIceErrorEvent"): RTCPeerConnectionIceErrorEvent;
     createEvent(eventInterface: "RTCPeerConnectionIceEvent"): RTCPeerConnectionIceEvent;
-    createEvent(eventInterface: "RTCSsrcConflictEvent"): RTCSsrcConflictEvent;
     createEvent(eventInterface: "RTCTrackEvent"): RTCTrackEvent;
-    createEvent(eventInterface: "SVGZoomEvent"): SVGZoomEvent;
-    createEvent(eventInterface: "SVGZoomEvents"): SVGZoomEvent;
     createEvent(eventInterface: "SecurityPolicyViolationEvent"): SecurityPolicyViolationEvent;
-    createEvent(eventInterface: "SpeechRecognitionErrorEvent"): SpeechRecognitionErrorEvent;
-    createEvent(eventInterface: "SpeechRecognitionEvent"): SpeechRecognitionEvent;
     createEvent(eventInterface: "SpeechSynthesisErrorEvent"): SpeechSynthesisErrorEvent;
     createEvent(eventInterface: "SpeechSynthesisEvent"): SpeechSynthesisEvent;
     createEvent(eventInterface: "StorageEvent"): StorageEvent;
-    createEvent(eventInterface: "TextEvent"): TextEvent;
+    createEvent(eventInterface: "SubmitEvent"): SubmitEvent;
     createEvent(eventInterface: "TouchEvent"): TouchEvent;
     createEvent(eventInterface: "TrackEvent"): TrackEvent;
     createEvent(eventInterface: "TransitionEvent"): TransitionEvent;
     createEvent(eventInterface: "UIEvent"): UIEvent;
     createEvent(eventInterface: "UIEvents"): UIEvent;
-    createEvent(eventInterface: "VRDisplayEvent"): VRDisplayEvent;
-    createEvent(eventInterface: "VRDisplayEvent "): VRDisplayEvent ;
     createEvent(eventInterface: "WebGLContextEvent"): WebGLContextEvent;
     createEvent(eventInterface: "WheelEvent"): WheelEvent;
     createEvent(eventInterface: string): Event;
@@ -4740,7 +4568,6 @@
      * @param root The root element or node to start traversing on.
      * @param whatToShow The type of nodes or elements to appear in the node list
      * @param filter A custom NodeFilter function to use. For more information, see filter. Use null for no filter.
-     * @param entityReferenceExpansion A flag that specifies whether entity reference nodes are expanded.
      */
     createNodeIterator(root: Node, whatToShow?: number, filter?: NodeFilter | null): NodeIterator;
     /**
@@ -4761,11 +4588,8 @@
      * @param root The root element or node to start traversing on.
      * @param whatToShow The type of nodes or elements to appear in the node list. For more information, see whatToShow.
      * @param filter A custom NodeFilter function to use.
-     * @param entityReferenceExpansion A flag that specifies whether entity reference nodes are expanded.
      */
     createTreeWalker(root: Node, whatToShow?: number, filter?: NodeFilter | null): TreeWalker;
-    /** @deprecated */
-    createTreeWalker(root: Node, whatToShow: number, filter: NodeFilter | null, entityReferenceExpansion?: boolean): TreeWalker;
     /**
      * Returns the element for the specified x coordinate and the specified y coordinate.
      * @param x The x-offset
@@ -4778,14 +4602,15 @@
      * @param commandId String that specifies the command to execute. This command can be any of the command identifiers that can be executed in script.
      * @param showUI Display the user interface, defaults to false.
      * @param value Value to assign.
+     * @deprecated
      */
     execCommand(commandId: string, showUI?: boolean, value?: string): boolean;
     /**
      * Stops document's fullscreen element from being displayed fullscreen and resolves promise when done.
      */
     exitFullscreen(): Promise<void>;
+    exitPictureInPicture(): Promise<void>;
     exitPointerLock(): void;
-    getAnimations(): Animation[];
     /**
      * Returns a reference to the first object with the specified value of the ID attribute.
      * @param elementId String that specifies the ID value.
@@ -4818,7 +4643,7 @@
      */
     getElementsByTagNameNS(namespaceURI: "http://www.w3.org/1999/xhtml", localName: string): HTMLCollectionOf<HTMLElement>;
     getElementsByTagNameNS(namespaceURI: "http://www.w3.org/2000/svg", localName: string): HTMLCollectionOf<SVGElement>;
-    getElementsByTagNameNS(namespaceURI: string, localName: string): HTMLCollectionOf<Element>;
+    getElementsByTagNameNS(namespace: string | null, localName: string): HTMLCollectionOf<Element>;
     /**
      * Returns an object representing the current selection of the document that is loaded into the object displaying a webpage.
      */
@@ -4827,12 +4652,13 @@
      * Gets a value indicating whether the object currently has focus.
      */
     hasFocus(): boolean;
+    hasStorageAccess(): Promise<boolean>;
     /**
      * Returns a copy of node. If deep is true, the copy also includes the node's descendants.
      *
      * If node is a document or a shadow root, throws a "NotSupportedError" DOMException.
      */
-    importNode<T extends Node>(importedNode: T, deep: boolean): T;
+    importNode<T extends Node>(node: T, deep?: boolean): T;
     /**
      * Opens a new window and loads a document specified by a given URL. Also, opens a new window that uses the url parameter and the name parameter to collect the output of the write method and the writeln method.
      * @param url Specifies a MIME type for the document.
@@ -4840,10 +4666,12 @@
      * @param features Contains a list of items separated by commas. Each item consists of an option and a value, separated by an equals sign (for example, "fullscreen=yes, toolbar=yes"). The following values are supported.
      * @param replace Specifies whether the existing entry for the document is replaced in the history list.
      */
-    open(url?: string, name?: string, features?: string, replace?: boolean): Document;
+    open(unused1?: string, unused2?: string): Document;
+    open(url: string | URL, name: string, features: string): WindowProxy | null;
     /**
      * Returns a Boolean value that indicates whether a specified command can be successfully executed using execCommand, given the current state of the document.
      * @param commandId Specifies a command identifier.
+     * @deprecated
      */
     queryCommandEnabled(commandId: string): boolean;
     /**
@@ -4854,11 +4682,13 @@
     /**
      * Returns a Boolean value that indicates the current state of the command.
      * @param commandId String that specifies a command identifier.
+     * @deprecated
      */
     queryCommandState(commandId: string): boolean;
     /**
      * Returns a Boolean value that indicates whether the current command is supported on the current range.
      * @param commandId Specifies a command identifier.
+     * @deprecated
      */
     queryCommandSupported(commandId: string): boolean;
     /**
@@ -4868,6 +4698,7 @@
     queryCommandValue(commandId: string): string;
     /** @deprecated */
     releaseEvents(): void;
+    requestStorageAccess(): Promise<void>;
     /**
      * Writes one or more HTML expressions to a document in the specified window.
      * @param content Specifies the text and HTML tags to write.
@@ -4905,82 +4736,6 @@
     removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;
 }
 
-interface DocumentEvent {
-    createEvent(eventInterface: "AnimationEvent"): AnimationEvent;
-    createEvent(eventInterface: "AnimationPlaybackEvent"): AnimationPlaybackEvent;
-    createEvent(eventInterface: "AudioProcessingEvent"): AudioProcessingEvent;
-    createEvent(eventInterface: "BeforeUnloadEvent"): BeforeUnloadEvent;
-    createEvent(eventInterface: "ClipboardEvent"): ClipboardEvent;
-    createEvent(eventInterface: "CloseEvent"): CloseEvent;
-    createEvent(eventInterface: "CompositionEvent"): CompositionEvent;
-    createEvent(eventInterface: "CustomEvent"): CustomEvent;
-    createEvent(eventInterface: "DeviceMotionEvent"): DeviceMotionEvent;
-    createEvent(eventInterface: "DeviceOrientationEvent"): DeviceOrientationEvent;
-    createEvent(eventInterface: "DragEvent"): DragEvent;
-    createEvent(eventInterface: "ErrorEvent"): ErrorEvent;
-    createEvent(eventInterface: "Event"): Event;
-    createEvent(eventInterface: "Events"): Event;
-    createEvent(eventInterface: "FocusEvent"): FocusEvent;
-    createEvent(eventInterface: "FocusNavigationEvent"): FocusNavigationEvent;
-    createEvent(eventInterface: "GamepadEvent"): GamepadEvent;
-    createEvent(eventInterface: "HashChangeEvent"): HashChangeEvent;
-    createEvent(eventInterface: "IDBVersionChangeEvent"): IDBVersionChangeEvent;
-    createEvent(eventInterface: "InputEvent"): InputEvent;
-    createEvent(eventInterface: "KeyboardEvent"): KeyboardEvent;
-    createEvent(eventInterface: "ListeningStateChangedEvent"): ListeningStateChangedEvent;
-    createEvent(eventInterface: "MediaEncryptedEvent"): MediaEncryptedEvent;
-    createEvent(eventInterface: "MediaKeyMessageEvent"): MediaKeyMessageEvent;
-    createEvent(eventInterface: "MediaQueryListEvent"): MediaQueryListEvent;
-    createEvent(eventInterface: "MediaStreamErrorEvent"): MediaStreamErrorEvent;
-    createEvent(eventInterface: "MediaStreamEvent"): MediaStreamEvent;
-    createEvent(eventInterface: "MediaStreamTrackEvent"): MediaStreamTrackEvent;
-    createEvent(eventInterface: "MessageEvent"): MessageEvent;
-    createEvent(eventInterface: "MouseEvent"): MouseEvent;
-    createEvent(eventInterface: "MouseEvents"): MouseEvent;
-    createEvent(eventInterface: "MutationEvent"): MutationEvent;
-    createEvent(eventInterface: "MutationEvents"): MutationEvent;
-    createEvent(eventInterface: "OfflineAudioCompletionEvent"): OfflineAudioCompletionEvent;
-    createEvent(eventInterface: "OverflowEvent"): OverflowEvent;
-    createEvent(eventInterface: "PageTransitionEvent"): PageTransitionEvent;
-    createEvent(eventInterface: "PaymentMethodChangeEvent"): PaymentMethodChangeEvent;
-    createEvent(eventInterface: "PaymentRequestUpdateEvent"): PaymentRequestUpdateEvent;
-    createEvent(eventInterface: "PermissionRequestedEvent"): PermissionRequestedEvent;
-    createEvent(eventInterface: "PointerEvent"): PointerEvent;
-    createEvent(eventInterface: "PopStateEvent"): PopStateEvent;
-    createEvent(eventInterface: "ProgressEvent"): ProgressEvent;
-    createEvent(eventInterface: "PromiseRejectionEvent"): PromiseRejectionEvent;
-    createEvent(eventInterface: "RTCDTMFToneChangeEvent"): RTCDTMFToneChangeEvent;
-    createEvent(eventInterface: "RTCDataChannelEvent"): RTCDataChannelEvent;
-    createEvent(eventInterface: "RTCDtlsTransportStateChangedEvent"): RTCDtlsTransportStateChangedEvent;
-    createEvent(eventInterface: "RTCErrorEvent"): RTCErrorEvent;
-    createEvent(eventInterface: "RTCIceCandidatePairChangedEvent"): RTCIceCandidatePairChangedEvent;
-    createEvent(eventInterface: "RTCIceGathererEvent"): RTCIceGathererEvent;
-    createEvent(eventInterface: "RTCIceTransportStateChangedEvent"): RTCIceTransportStateChangedEvent;
-    createEvent(eventInterface: "RTCPeerConnectionIceErrorEvent"): RTCPeerConnectionIceErrorEvent;
-    createEvent(eventInterface: "RTCPeerConnectionIceEvent"): RTCPeerConnectionIceEvent;
-    createEvent(eventInterface: "RTCSsrcConflictEvent"): RTCSsrcConflictEvent;
-    createEvent(eventInterface: "RTCTrackEvent"): RTCTrackEvent;
-    createEvent(eventInterface: "SVGZoomEvent"): SVGZoomEvent;
-    createEvent(eventInterface: "SVGZoomEvents"): SVGZoomEvent;
-    createEvent(eventInterface: "SecurityPolicyViolationEvent"): SecurityPolicyViolationEvent;
-    createEvent(eventInterface: "SpeechRecognitionErrorEvent"): SpeechRecognitionErrorEvent;
-    createEvent(eventInterface: "SpeechRecognitionEvent"): SpeechRecognitionEvent;
-    createEvent(eventInterface: "SpeechSynthesisErrorEvent"): SpeechSynthesisErrorEvent;
-    createEvent(eventInterface: "SpeechSynthesisEvent"): SpeechSynthesisEvent;
-    createEvent(eventInterface: "StorageEvent"): StorageEvent;
-    createEvent(eventInterface: "TextEvent"): TextEvent;
-    createEvent(eventInterface: "TouchEvent"): TouchEvent;
-    createEvent(eventInterface: "TrackEvent"): TrackEvent;
-    createEvent(eventInterface: "TransitionEvent"): TransitionEvent;
-    createEvent(eventInterface: "UIEvent"): UIEvent;
-    createEvent(eventInterface: "UIEvents"): UIEvent;
-    createEvent(eventInterface: "VRDisplayEvent"): VRDisplayEvent;
-    createEvent(eventInterface: "VRDisplayEvent "): VRDisplayEvent ;
-    createEvent(eventInterface: "WebGLContextEvent"): WebGLContextEvent;
-    createEvent(eventInterface: "WheelEvent"): WheelEvent;
-    createEvent(eventInterface: string): Event;
-}
-
 /** A minimal document object that has no parent. It is used as a lightweight version of Document that stores a segment of a document structure comprised of nodes just like a standard document. The key difference is that because the document fragment isn't part of the active document tree structure, changes made to the fragment don't affect the document, cause reflow, or incur any performance impact that can occur when changes are made. */
 interface DocumentFragment extends Node, NonElementParentNode, ParentNode {
     readonly ownerDocument: Document;
@@ -4993,22 +4748,25 @@
 };
 
 interface DocumentOrShadowRoot {
+    /**
+     * Returns the deepest element in the document through which or to which key events are being routed. This is, roughly speaking, the focused element in the document.
+     *
+     * For the purposes of this API, when a child browsing context is focused, its container is focused in the parent browsing context. For example, if the user moves the focus to a text control in an iframe, the iframe is the element returned by the activeElement API in the iframe's node document.
+     *
+     * Similarly, when the focused element is in a different node tree than documentOrShadowRoot, the element returned will be the host that's located in the same node tree as documentOrShadowRoot if documentOrShadowRoot is a shadow-including inclusive ancestor of the focused element, and null if not.
+     */
     readonly activeElement: Element | null;
     /**
      * Returns document's fullscreen element.
      */
     readonly fullscreenElement: Element | null;
+    readonly pictureInPictureElement: Element | null;
     readonly pointerLockElement: Element | null;
     /**
      * Retrieves a collection of styleSheet objects representing the style sheets that correspond to each instance of a link or style object in the document.
      */
     readonly styleSheets: StyleSheetList;
-    caretPositionFromPoint(x: number, y: number): CaretPosition | null;
-    /** @deprecated */
-    caretRangeFromPoint(x: number, y: number): Range;
-    elementFromPoint(x: number, y: number): Element | null;
-    elementsFromPoint(x: number, y: number): Element[];
-    getSelection(): Selection | null;
+    getAnimations(): Animation[];
 }
 
 interface DocumentTimeline extends AnimationTimeline {
@@ -5065,6 +4823,19 @@
     readonly MIN_EXT: GLenum;
 }
 
+interface EXT_color_buffer_float {
+}
+
+interface EXT_color_buffer_half_float {
+    readonly FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE_EXT: GLenum;
+    readonly RGB16F_EXT: GLenum;
+    readonly RGBA16F_EXT: GLenum;
+    readonly UNSIGNED_NORMALIZED_EXT: GLenum;
+}
+
+interface EXT_float_blend {
+}
+
 /** The EXT_frag_depth extension is part of the WebGL API and enables to set a depth value of a fragment from within the fragment shader. */
 interface EXT_frag_depth {
 }
@@ -5079,6 +4850,13 @@
 interface EXT_shader_texture_lod {
 }
 
+interface EXT_texture_compression_rgtc {
+    readonly COMPRESSED_RED_GREEN_RGTC2_EXT: GLenum;
+    readonly COMPRESSED_RED_RGTC1_EXT: GLenum;
+    readonly COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT: GLenum;
+    readonly COMPRESSED_SIGNED_RED_RGTC1_EXT: GLenum;
+}
+
 /** The EXT_texture_filter_anisotropic extension is part of the WebGL API and exposes two constants for anisotropic filtering (AF). */
 interface EXT_texture_filter_anisotropic {
     readonly MAX_TEXTURE_MAX_ANISOTROPY_EXT: GLenum;
@@ -5091,7 +4869,7 @@
 }
 
 /** Element is the most general base class from which all objects in a Document inherit. It only has methods and properties common to all kinds of elements. More specific classes inherit from Element. */
-interface Element extends Node, Animatable, ChildNode, InnerHTML, NonDocumentTypeChildNode, ParentNode, Slottable {
+interface Element extends Node, ARIAMixin, Animatable, ChildNode, InnerHTML, NonDocumentTypeChildNode, ParentNode, Slottable {
     readonly attributes: NamedNodeMap;
     /**
      * Allows for manipulation of element's class content attribute as a set of whitespace-separated tokens through a DOMTokenList object.
@@ -5121,6 +4899,7 @@
     onfullscreenerror: ((this: Element, ev: Event) => any) | null;
     outerHTML: string;
     readonly ownerDocument: Document;
+    readonly part: DOMTokenList;
     /**
      * Returns the namespace prefix.
      */
@@ -5150,7 +4929,7 @@
      */
     closest<K extends keyof HTMLElementTagNameMap>(selector: K): HTMLElementTagNameMap[K] | null;
     closest<K extends keyof SVGElementTagNameMap>(selector: K): SVGElementTagNameMap[K] | null;
-    closest<E extends Element = Element>(selector: string): E | null;
+    closest<E extends Element = Element>(selectors: string): E | null;
     /**
      * Returns element's first attribute whose qualified name is qualifiedName, and null if there is no such attribute otherwise.
      */
@@ -5176,7 +4955,7 @@
     getElementsByTagName(qualifiedName: string): HTMLCollectionOf<Element>;
     getElementsByTagNameNS(namespaceURI: "http://www.w3.org/1999/xhtml", localName: string): HTMLCollectionOf<HTMLElement>;
     getElementsByTagNameNS(namespaceURI: "http://www.w3.org/2000/svg", localName: string): HTMLCollectionOf<SVGElement>;
-    getElementsByTagNameNS(namespaceURI: string, localName: string): HTMLCollectionOf<Element>;
+    getElementsByTagNameNS(namespace: string | null, localName: string): HTMLCollectionOf<Element>;
     /**
      * Returns true if element has an attribute whose qualified name is qualifiedName, and false otherwise.
      */
@@ -5190,14 +4969,13 @@
      */
     hasAttributes(): boolean;
     hasPointerCapture(pointerId: number): boolean;
-    insertAdjacentElement(position: InsertPosition, insertedElement: Element): Element | null;
-    insertAdjacentHTML(where: InsertPosition, html: string): void;
-    insertAdjacentText(where: InsertPosition, text: string): void;
+    insertAdjacentElement(where: InsertPosition, element: Element): Element | null;
+    insertAdjacentHTML(position: InsertPosition, text: string): void;
+    insertAdjacentText(where: InsertPosition, data: string): void;
     /**
      * Returns true if matching selectors against element's root yields element, and false otherwise.
      */
     matches(selectors: string): boolean;
-    msGetRegionContent(): any;
     releasePointerCapture(pointerId: number): void;
     /**
      * Removes element's first attribute whose qualified name is qualifiedName.
@@ -5239,6 +5017,7 @@
      * Returns true if qualifiedName is now present, and false otherwise.
      */
     toggleAttribute(qualifiedName: string, force?: boolean): boolean;
+    /** @deprecated This is a legacy alias of `matches`. */
     webkitMatchesSelector(selectors: string): boolean;
     addEventListener<K extends keyof ElementEventMap>(type: K, listener: (this: Element, ev: ElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
     addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
@@ -5307,6 +5086,7 @@
      * Returns true if event was dispatched by the user agent, and false otherwise.
      */
     readonly isTrusted: boolean;
+    /** @deprecated */
     returnValue: boolean;
     /** @deprecated */
     readonly srcElement: EventTarget | null;
@@ -5317,7 +5097,7 @@
     /**
      * Returns the event's timestamp as the number of milliseconds measured relative to the time origin.
      */
-    readonly timeStamp: number;
+    readonly timeStamp: DOMHighResTimeStamp;
     /**
      * Returns the type of event, e.g. "click", "hashchange", or "submit".
      */
@@ -5326,6 +5106,7 @@
      * Returns the invocation target objects of event's path (objects on which listeners will be invoked), except for any nodes in shadow trees of which the shadow root's mode is "closed" that are not reachable from event's currentTarget.
      */
     composedPath(): EventTarget[];
+    /** @deprecated */
     initEvent(type: string, bubbles?: boolean, cancelable?: boolean): void;
     /**
      * If invoked when the cancelable attribute value is true, and while executing a listener for the event with passive set to false, signals to the operation that caused event to be dispatched that it needs to be canceled.
@@ -5354,8 +5135,12 @@
     readonly NONE: number;
 };
 
+interface EventListener {
+    (evt: Event): void;
+}
+
 interface EventListenerObject {
-    handleEvent(evt: Event): void;
+    handleEvent(object: Event): void;
 }
 
 interface EventSourceEventMap {
@@ -5395,7 +5180,7 @@
 
 declare var EventSource: {
     prototype: EventSource;
-    new(url: string, eventSourceInitDict?: EventSourceInit): EventSource;
+    new(url: string | URL, eventSourceInitDict?: EventSourceInit): EventSource;
     readonly CLOSED: number;
     readonly CONNECTING: number;
     readonly OPEN: number;
@@ -5414,9 +5199,11 @@
      *
      * When set to true, options's once indicates that the callback will only be invoked once after which the event listener will be removed.
      *
+     * If an AbortSignal is passed for options's signal, then the event listener will be removed when signal is aborted.
+     *
      * The event listener is appended to target's event listener list and is not appended if it has the same type, callback, and capture.
      */
-    addEventListener(type: string, listener: EventListenerOrEventListenerObject | null, options?: boolean | AddEventListenerOptions): void;
+    addEventListener(type: string, callback: EventListenerOrEventListenerObject | null, options?: AddEventListenerOptions | boolean): void;
     /**
      * Dispatches a synthetic event event to target and returns true if either event's cancelable attribute value is false or its preventDefault() method was not invoked, and false otherwise.
      */
@@ -5432,23 +5219,7 @@
     new(): EventTarget;
 };
 
-interface ExtensionScriptApis {
-    extensionIdToShortId(extensionId: string): number;
-    fireExtensionApiTelemetry(functionName: string, isSucceeded: boolean, isSupported: boolean, errorString: string): void;
-    genericFunction(routerAddress: any, parameters?: string, callbackId?: number): void;
-    genericSynchronousFunction(functionId: number, parameters?: string): string;
-    genericWebRuntimeCallout(to: any, from: any, payload: string): void;
-    getExtensionId(): string;
-    registerGenericFunctionCallbackHandler(callbackHandler: Function): void;
-    registerGenericPersistentCallbackHandler(callbackHandler: Function): void;
-    registerWebRuntimeCallbackHandler(handler: Function): any;
-}
-
-declare var ExtensionScriptApis: {
-    prototype: ExtensionScriptApis;
-    new(): ExtensionScriptApis;
-};
-
+/** @deprecated */
 interface External {
     /** @deprecated */
     AddSearchProvider(): void;
@@ -5456,6 +5227,7 @@
     IsSearchProviderInstalled(): void;
 }
 
+/** @deprecated */
 declare var External: {
     prototype: External;
     new(): External;
@@ -5465,6 +5237,7 @@
 interface File extends Blob {
     readonly lastModified: number;
     readonly name: string;
+    readonly webkitRelativePath: string;
 }
 
 declare var File: {
@@ -5526,6 +5299,62 @@
     readonly LOADING: number;
 };
 
+interface FileSystem {
+    readonly name: string;
+    readonly root: FileSystemDirectoryEntry;
+}
+
+declare var FileSystem: {
+    prototype: FileSystem;
+    new(): FileSystem;
+};
+
+interface FileSystemDirectoryEntry extends FileSystemEntry {
+    createReader(): FileSystemDirectoryReader;
+    getDirectory(path?: string | null, options?: FileSystemFlags, successCallback?: FileSystemEntryCallback, errorCallback?: ErrorCallback): void;
+    getFile(path?: string | null, options?: FileSystemFlags, successCallback?: FileSystemEntryCallback, errorCallback?: ErrorCallback): void;
+}
+
+declare var FileSystemDirectoryEntry: {
+    prototype: FileSystemDirectoryEntry;
+    new(): FileSystemDirectoryEntry;
+};
+
+/** @deprecated */
+interface FileSystemDirectoryReader {
+    /** @deprecated */
+    readEntries(successCallback: FileSystemEntriesCallback, errorCallback?: ErrorCallback): void;
+}
+
+/** @deprecated */
+declare var FileSystemDirectoryReader: {
+    prototype: FileSystemDirectoryReader;
+    new(): FileSystemDirectoryReader;
+};
+
+interface FileSystemEntry {
+    readonly filesystem: FileSystem;
+    readonly fullPath: string;
+    readonly isDirectory: boolean;
+    readonly isFile: boolean;
+    readonly name: string;
+    getParent(successCallback?: FileSystemEntryCallback, errorCallback?: ErrorCallback): void;
+}
+
+declare var FileSystemEntry: {
+    prototype: FileSystemEntry;
+    new(): FileSystemEntry;
+};
+
+interface FileSystemFileEntry extends FileSystemEntry {
+    file(successCallback: FileCallback, errorCallback?: ErrorCallback): void;
+}
+
+declare var FileSystemFileEntry: {
+    prototype: FileSystemFileEntry;
+    new(): FileSystemFileEntry;
+};
+
 /** Focus-related events like focus, blur, focusin, or focusout. */
 interface FocusEvent extends UIEvent {
     readonly relatedTarget: EventTarget | null;
@@ -5536,20 +5365,68 @@
     new(type: string, eventInitDict?: FocusEventInit): FocusEvent;
 };
 
-interface FocusNavigationEvent extends Event {
-    readonly navigationReason: NavigationReason;
-    readonly originHeight: number;
-    readonly originLeft: number;
-    readonly originTop: number;
-    readonly originWidth: number;
-    requestFocus(): void;
+interface FontFace {
+    ascentOverride: string;
+    descentOverride: string;
+    display: string;
+    family: string;
+    featureSettings: string;
+    lineGapOverride: string;
+    readonly loaded: Promise<FontFace>;
+    readonly status: FontFaceLoadStatus;
+    stretch: string;
+    style: string;
+    unicodeRange: string;
+    variant: string;
+    variationSettings: string;
+    weight: string;
+    load(): Promise<FontFace>;
 }
 
-declare var FocusNavigationEvent: {
-    prototype: FocusNavigationEvent;
-    new(type: string, eventInitDict?: FocusNavigationEventInit): FocusNavigationEvent;
+declare var FontFace: {
+    prototype: FontFace;
+    new(family: string, source: string | BinaryData, descriptors?: FontFaceDescriptors): FontFace;
 };
 
+interface FontFaceSetEventMap {
+    "loading": Event;
+    "loadingdone": Event;
+    "loadingerror": Event;
+}
+
+interface FontFaceSet extends EventTarget {
+    onloading: ((this: FontFaceSet, ev: Event) => any) | null;
+    onloadingdone: ((this: FontFaceSet, ev: Event) => any) | null;
+    onloadingerror: ((this: FontFaceSet, ev: Event) => any) | null;
+    readonly ready: Promise<FontFaceSet>;
+    readonly status: FontFaceSetLoadStatus;
+    check(font: string, text?: string): boolean;
+    load(font: string, text?: string): Promise<FontFace[]>;
+    forEach(callbackfn: (value: FontFace, key: FontFace, parent: FontFaceSet) => void, thisArg?: any): void;
+    addEventListener<K extends keyof FontFaceSetEventMap>(type: K, listener: (this: FontFaceSet, ev: FontFaceSetEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
+    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
+    removeEventListener<K extends keyof FontFaceSetEventMap>(type: K, listener: (this: FontFaceSet, ev: FontFaceSetEventMap[K]) => any, options?: boolean | EventListenerOptions): void;
+    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;
+}
+
+declare var FontFaceSet: {
+    prototype: FontFaceSet;
+    new(initialFaces: FontFace[]): FontFaceSet;
+};
+
+interface FontFaceSetLoadEvent extends Event {
+    readonly fontfaces: ReadonlyArray<FontFace>;
+}
+
+declare var FontFaceSetLoadEvent: {
+    prototype: FontFaceSetLoadEvent;
+    new(type: string, eventInitDict?: FontFaceSetLoadEventInit): FontFaceSetLoadEvent;
+};
+
+interface FontFaceSource {
+    readonly fonts: FontFaceSet;
+}
+
 /** Provides a way to easily construct a set of key/value pairs representing form fields and their values, which can then be easily sent using the XMLHttpRequest.send() method. It uses the same format a form would use if the encoding type were set to "multipart/form-data". */
 interface FormData {
     append(name: string, value: string | Blob, fileName?: string): void;
@@ -5566,6 +5443,18 @@
     new(form?: HTMLFormElement): FormData;
 };
 
+interface FormDataEvent extends Event {
+    /**
+     * Returns a FormData object representing names and values of elements associated to the target form. Operations on the FormData object will affect form data to be submitted.
+     */
+    readonly formData: FormData;
+}
+
+declare var FormDataEvent: {
+    prototype: FormDataEvent;
+    new(type: string, eventInitDict: FormDataEventInit): FormDataEvent;
+};
+
 /** A change in volume. It is an AudioNode audio-processing module that causes a given gain to be applied to the input data before its propagation to the output. A GainNode always has exactly one input and one output, both with the same number of channels. */
 interface GainNode extends AudioNode {
     readonly gain: AudioParam;
@@ -5581,13 +5470,11 @@
     readonly axes: ReadonlyArray<number>;
     readonly buttons: ReadonlyArray<GamepadButton>;
     readonly connected: boolean;
-    readonly hand: GamepadHand;
     readonly hapticActuators: ReadonlyArray<GamepadHapticActuator>;
     readonly id: string;
     readonly index: number;
     readonly mapping: GamepadMappingType;
-    readonly pose: GamepadPose | null;
-    readonly timestamp: number;
+    readonly timestamp: DOMHighResTimeStamp;
 }
 
 declare var Gamepad: {
@@ -5620,7 +5507,6 @@
 /** This Gamepad API interface represents hardware in the controller designed to provide haptic feedback to the user (if available), most commonly vibration hardware. */
 interface GamepadHapticActuator {
     readonly type: GamepadHapticActuatorType;
-    pulse(value: number, duration: number): Promise<boolean>;
 }
 
 declare var GamepadHapticActuator: {
@@ -5628,23 +5514,6 @@
     new(): GamepadHapticActuator;
 };
 
-/** This Gamepad API interface represents the pose of a WebVR controller at a given timestamp (which includes orientation, position, velocity, and acceleration information.) */
-interface GamepadPose {
-    readonly angularAcceleration: Float32Array | null;
-    readonly angularVelocity: Float32Array | null;
-    readonly hasOrientation: boolean;
-    readonly hasPosition: boolean;
-    readonly linearAcceleration: Float32Array | null;
-    readonly linearVelocity: Float32Array | null;
-    readonly orientation: Float32Array | null;
-    readonly position: Float32Array | null;
-}
-
-declare var GamepadPose: {
-    prototype: GamepadPose;
-    new(): GamepadPose;
-};
-
 interface GenericTransformStream {
     readonly readable: ReadableStream;
     readonly writable: WritableStream;
@@ -5653,8 +5522,8 @@
 /** An object able to programmatically obtain the position of the device. It gives Web content access to the location of the device. This allows a Web site or app to offer customized results based on the user's location. */
 interface Geolocation {
     clearWatch(watchId: number): void;
-    getCurrentPosition(successCallback: PositionCallback, errorCallback?: PositionErrorCallback, options?: PositionOptions): void;
-    watchPosition(successCallback: PositionCallback, errorCallback?: PositionErrorCallback, options?: PositionOptions): number;
+    getCurrentPosition(successCallback: PositionCallback, errorCallback?: PositionErrorCallback | null, options?: PositionOptions): void;
+    watchPosition(successCallback: PositionCallback, errorCallback?: PositionErrorCallback | null, options?: PositionOptions): number;
 }
 
 declare var Geolocation: {
@@ -5679,7 +5548,7 @@
 
 interface GeolocationPosition {
     readonly coords: GeolocationCoordinates;
-    readonly timestamp: number;
+    readonly timestamp: DOMTimeStamp;
 }
 
 declare var GeolocationPosition: {
@@ -5712,7 +5581,6 @@
     "auxclick": MouseEvent;
     "beforeinput": InputEvent;
     "blur": FocusEvent;
-    "cancel": Event;
     "canplay": Event;
     "canplaythrough": Event;
     "change": Event;
@@ -5727,7 +5595,6 @@
     "drag": DragEvent;
     "dragend": DragEvent;
     "dragenter": DragEvent;
-    "dragexit": Event;
     "dragleave": DragEvent;
     "dragover": DragEvent;
     "dragstart": DragEvent;
@@ -5739,6 +5606,7 @@
     "focus": FocusEvent;
     "focusin": FocusEvent;
     "focusout": FocusEvent;
+    "formdata": FormDataEvent;
     "gotpointercapture": PointerEvent;
     "input": Event;
     "invalid": Event;
@@ -5794,6 +5662,10 @@
     "transitionstart": TransitionEvent;
     "volumechange": Event;
     "waiting": Event;
+    "webkitanimationend": Event;
+    "webkitanimationiteration": Event;
+    "webkitanimationstart": Event;
+    "webkittransitionend": Event;
     "wheel": WheelEvent;
 }
 
@@ -5813,7 +5685,6 @@
      * @param ev The focus event.
      */
     onblur: ((this: GlobalEventHandlers, ev: FocusEvent) => any) | null;
-    oncancel: ((this: GlobalEventHandlers, ev: Event) => any) | null;
     /**
      * Occurs when playback is possible, but would require further buffering.
      * @param ev The event.
@@ -5857,7 +5728,6 @@
      * @param ev The drag event.
      */
     ondragenter: ((this: GlobalEventHandlers, ev: DragEvent) => any) | null;
-    ondragexit: ((this: GlobalEventHandlers, ev: Event) => any) | null;
     /**
      * Fires on the target object when the user moves the mouse out of a valid drop target during a drag operation.
      * @param ev The drag event.
@@ -5899,6 +5769,7 @@
      * @param ev The event.
      */
     onfocus: ((this: GlobalEventHandlers, ev: FocusEvent) => any) | null;
+    onformdata: ((this: GlobalEventHandlers, ev: FormDataEvent) => any) | null;
     ongotpointercapture: ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null;
     oninput: ((this: GlobalEventHandlers, ev: Event) => any) | null;
     oninvalid: ((this: GlobalEventHandlers, ev: Event) => any) | null;
@@ -5910,6 +5781,7 @@
     /**
      * Fires when the user presses an alphanumeric key.
      * @param ev The event.
+     * @deprecated
      */
     onkeypress: ((this: GlobalEventHandlers, ev: KeyboardEvent) => any) | null;
     /**
@@ -6009,7 +5881,6 @@
      * @param ev The event.
      */
     onscroll: ((this: GlobalEventHandlers, ev: Event) => any) | null;
-    onsecuritypolicyviolation: ((this: GlobalEventHandlers, ev: SecurityPolicyViolationEvent) => any) | null;
     /**
      * Occurs when the seek operation ends.
      * @param ev The event.
@@ -6044,10 +5915,10 @@
      */
     ontimeupdate: ((this: GlobalEventHandlers, ev: Event) => any) | null;
     ontoggle: ((this: GlobalEventHandlers, ev: Event) => any) | null;
-    ontouchcancel?: ((this: GlobalEventHandlers, ev: TouchEvent) => any) | null;
-    ontouchend?: ((this: GlobalEventHandlers, ev: TouchEvent) => any) | null;
-    ontouchmove?: ((this: GlobalEventHandlers, ev: TouchEvent) => any) | null;
-    ontouchstart?: ((this: GlobalEventHandlers, ev: TouchEvent) => any) | null;
+    ontouchcancel?: ((this: GlobalEventHandlers, ev: TouchEvent) => any) | null | undefined;
+    ontouchend?: ((this: GlobalEventHandlers, ev: TouchEvent) => any) | null | undefined;
+    ontouchmove?: ((this: GlobalEventHandlers, ev: TouchEvent) => any) | null | undefined;
+    ontouchstart?: ((this: GlobalEventHandlers, ev: TouchEvent) => any) | null | undefined;
     ontransitioncancel: ((this: GlobalEventHandlers, ev: TransitionEvent) => any) | null;
     ontransitionend: ((this: GlobalEventHandlers, ev: TransitionEvent) => any) | null;
     ontransitionrun: ((this: GlobalEventHandlers, ev: TransitionEvent) => any) | null;
@@ -6062,6 +5933,10 @@
      * @param ev The event.
      */
     onwaiting: ((this: GlobalEventHandlers, ev: Event) => any) | null;
+    onwebkitanimationend: ((this: GlobalEventHandlers, ev: Event) => any) | null;
+    onwebkitanimationiteration: ((this: GlobalEventHandlers, ev: Event) => any) | null;
+    onwebkitanimationstart: ((this: GlobalEventHandlers, ev: Event) => any) | null;
+    onwebkittransitionend: ((this: GlobalEventHandlers, ev: Event) => any) | null;
     onwheel: ((this: GlobalEventHandlers, ev: WheelEvent) => any) | null;
     addEventListener<K extends keyof GlobalEventHandlersEventMap>(type: K, listener: (this: GlobalEventHandlers, ev: GlobalEventHandlersEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
     addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
@@ -6098,13 +5973,13 @@
 interface HTMLAnchorElement extends HTMLElement, HTMLHyperlinkElementUtils {
     /**
      * Sets or retrieves the character set used to encode the object.
+     * @deprecated
      */
-    /** @deprecated */
     charset: string;
     /**
      * Sets or retrieves the coordinates of the object.
+     * @deprecated
      */
-    /** @deprecated */
     coords: string;
     download: string;
     /**
@@ -6113,8 +5988,8 @@
     hreflang: string;
     /**
      * Sets or retrieves the shape of the object.
+     * @deprecated
      */
-    /** @deprecated */
     name: string;
     ping: string;
     referrerPolicy: string;
@@ -6125,13 +6000,13 @@
     readonly relList: DOMTokenList;
     /**
      * Sets or retrieves the relationship between the object and the destination of the link.
+     * @deprecated
      */
-    /** @deprecated */
     rev: string;
     /**
      * Sets or retrieves the shape of the object.
+     * @deprecated
      */
-    /** @deprecated */
     shape: string;
     /**
      * Sets or retrieves the window or frame at which to target content.
@@ -6153,56 +6028,6 @@
     new(): HTMLAnchorElement;
 };
 
-interface HTMLAppletElement extends HTMLElement {
-    /** @deprecated */
-    align: string;
-    /**
-     * Sets or retrieves a text alternative to the graphic.
-     */
-    /** @deprecated */
-    alt: string;
-    /**
-     * Sets or retrieves a character string that can be used to implement your own archive functionality for the object.
-     */
-    /** @deprecated */
-    archive: string;
-    /** @deprecated */
-    code: string;
-    /**
-     * Sets or retrieves the URL of the component.
-     */
-    /** @deprecated */
-    codeBase: string;
-    readonly form: HTMLFormElement | null;
-    /**
-     * Sets or retrieves the height of the object.
-     */
-    /** @deprecated */
-    height: string;
-    /** @deprecated */
-    hspace: number;
-    /**
-     * Sets or retrieves the shape of the object.
-     */
-    /** @deprecated */
-    name: string;
-    /** @deprecated */
-    object: string;
-    /** @deprecated */
-    vspace: number;
-    /** @deprecated */
-    width: string;
-    addEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLAppletElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
-    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
-    removeEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLAppletElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;
-    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;
-}
-
-declare var HTMLAppletElement: {
-    prototype: HTMLAppletElement;
-    new(): HTMLAppletElement;
-};
-
 /** Provides special properties and methods (beyond those of the regular object HTMLElement interface it also has available to it by inheritance) for manipulating the layout and presentation of <area> elements. */
 interface HTMLAreaElement extends HTMLElement, HTMLHyperlinkElementUtils {
     /**
@@ -6216,8 +6041,8 @@
     download: string;
     /**
      * Sets or gets whether clicks in this region cause action.
+     * @deprecated
      */
-    /** @deprecated */
     noHref: boolean;
     ping: string;
     referrerPolicy: string;
@@ -6259,8 +6084,8 @@
 interface HTMLBRElement extends HTMLElement {
     /**
      * Sets or retrieves the side on which floating objects are not to be positioned when any IHTMLBlockElement is inserted into the document.
+     * @deprecated
      */
-    /** @deprecated */
     clear: string;
     addEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLBRElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
     addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
@@ -6408,6 +6233,7 @@
      * Gets or sets the width of a canvas element on a document.
      */
     width: number;
+    captureStream(frameRequestRate?: number): MediaStream;
     /**
      * Returns an object that provides methods and properties for drawing and manipulating images and graphics on a canvas element in a document. A context object includes information about colors, line widths, fonts, and other graphic parameters that can be drawn on a canvas.
      * @param contextId The identifier (ID) of the type of canvas to create. Internet Explorer 9 and Internet Explorer 10 support only a 2-D context using canvas.getContext("2d"); IE11 Preview also supports 3-D or WebGL context using canvas.getContext("experimental-webgl");
@@ -6423,7 +6249,6 @@
      * @param type The standard MIME type for the image format to return. If you do not specify this parameter, the default value is a PNG format image.
      */
     toDataURL(type?: string, quality?: any): string;
-    transferControlToOffscreen(): OffscreenCanvas;
     addEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLCanvasElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
     addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
     removeEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLCanvasElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;
@@ -6497,6 +6322,9 @@
 
 /** Provides special properties (beyond the HTMLElement object interface it also has available to it by inheritance) to manipulate <datalist> elements and their content. */
 interface HTMLDataListElement extends HTMLElement {
+    /**
+     * Returns an HTMLCollection of the option elements of the datalist element.
+     */
     readonly options: HTMLCollectionOf<HTMLOptionElement>;
     addEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLDataListElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
     addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
@@ -6522,23 +6350,15 @@
     new(): HTMLDetailsElement;
 };
 
+/** @deprecated this is not available in most browsers */
 interface HTMLDialogElement extends HTMLElement {
-    open: boolean;
-    returnValue: string;
-    close(returnValue?: string): void;
-    show(): void;
-    showModal(): void;
     addEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLDialogElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
     addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
     removeEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLDialogElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;
     removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;
 }
 
-declare var HTMLDialogElement: {
-    prototype: HTMLDialogElement;
-    new(): HTMLDialogElement;
-};
-
+/** @deprecated */
 interface HTMLDirectoryElement extends HTMLElement {
     /** @deprecated */
     compact: boolean;
@@ -6548,6 +6368,7 @@
     removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;
 }
 
+/** @deprecated */
 declare var HTMLDirectoryElement: {
     prototype: HTMLDirectoryElement;
     new(): HTMLDirectoryElement;
@@ -6557,8 +6378,8 @@
 interface HTMLDivElement extends HTMLElement {
     /**
      * Sets or retrieves how the object is aligned with adjacent text.
+     * @deprecated
      */
-    /** @deprecated */
     align: string;
     addEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLDivElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
     addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
@@ -6571,7 +6392,7 @@
     new(): HTMLDivElement;
 };
 
-/** The HTMLDocument property of Window objects is an alias that browsers expose for the Document interface object. */
+/** @deprecated use Document */
 interface HTMLDocument extends Document {
     addEventListener<K extends keyof DocumentEventMap>(type: K, listener: (this: HTMLDocument, ev: DocumentEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
     addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
@@ -6579,12 +6400,13 @@
     removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;
 }
 
+/** @deprecated */
 declare var HTMLDocument: {
     prototype: HTMLDocument;
     new(): HTMLDocument;
 };
 
-interface HTMLElementEventMap extends ElementEventMap, GlobalEventHandlersEventMap, DocumentAndElementEventHandlersEventMap {
+interface HTMLElementEventMap extends ElementEventMap, DocumentAndElementEventHandlersEventMap, GlobalEventHandlersEventMap {
 }
 
 /** Any HTML element. Some elements directly implement this interface, while others implement it via an interface that inherits it. */
@@ -6602,6 +6424,7 @@
     readonly offsetParent: Element | null;
     readonly offsetTop: number;
     readonly offsetWidth: number;
+    outerText: string;
     spellcheck: boolean;
     title: string;
     translate: boolean;
@@ -6627,8 +6450,8 @@
     height: string;
     /**
      * Sets or retrieves the name of the object.
+     * @deprecated
      */
-    /** @deprecated */
     name: string;
     /**
      * Sets or retrieves a URL to be loaded by the object.
@@ -6654,12 +6477,18 @@
 /** Provides special properties and methods (beyond the regular HTMLElement interface it also has available to it by inheritance) for manipulating the layout and presentation of <fieldset> elements. */
 interface HTMLFieldSetElement extends HTMLElement {
     disabled: boolean;
+    /**
+     * Returns an HTMLCollection of the form controls in the element.
+     */
     readonly elements: HTMLCollection;
     /**
      * Retrieves a reference to the form that the object is embedded in.
      */
     readonly form: HTMLFormElement | null;
     name: string;
+    /**
+     * Returns the string "fieldset".
+     */
     readonly type: string;
     /**
      * Returns the error message that would be displayed if the user submits the form, or an empty string if no error message. It also triggers the standard error message, such as "this is a required field". The result is that the user sees validation messages without actually submitting.
@@ -6694,14 +6523,17 @@
     new(): HTMLFieldSetElement;
 };
 
-/** Implements the document object model (DOM) representation of the font element. The HTML Font Element <font> defines the font size, font face and color of text. */
+/**
+ * Implements the document object model (DOM) representation of the font element. The HTML Font Element <font> defines the font size, font face and color of text.
+ * @deprecated
+ */
 interface HTMLFontElement extends HTMLElement {
     /** @deprecated */
     color: string;
     /**
      * Sets or retrieves the current typeface family.
+     * @deprecated
      */
-    /** @deprecated */
     face: string;
     /** @deprecated */
     size: string;
@@ -6711,6 +6543,7 @@
     removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;
 }
 
+/** @deprecated */
 declare var HTMLFontElement: {
     prototype: HTMLFontElement;
     new(): HTMLFontElement;
@@ -6782,6 +6615,7 @@
      */
     checkValidity(): boolean;
     reportValidity(): boolean;
+    requestSubmit(submitter?: HTMLElement | null): void;
     /**
      * Fires when the user resets a form.
      */
@@ -6803,56 +6637,57 @@
     new(): HTMLFormElement;
 };
 
+/** @deprecated */
 interface HTMLFrameElement extends HTMLElement {
     /**
      * Retrieves the document object of the page or frame.
+     * @deprecated
      */
-    /** @deprecated */
     readonly contentDocument: Document | null;
     /**
      * Retrieves the object of the specified.
+     * @deprecated
      */
-    /** @deprecated */
     readonly contentWindow: WindowProxy | null;
     /**
      * Sets or retrieves whether to display a border for the frame.
+     * @deprecated
      */
-    /** @deprecated */
     frameBorder: string;
     /**
      * Sets or retrieves a URI to a long description of the object.
+     * @deprecated
      */
-    /** @deprecated */
     longDesc: string;
     /**
      * Sets or retrieves the top and bottom margin heights before displaying the text in a frame.
+     * @deprecated
      */
-    /** @deprecated */
     marginHeight: string;
     /**
      * Sets or retrieves the left and right margin widths before displaying the text in a frame.
+     * @deprecated
      */
-    /** @deprecated */
     marginWidth: string;
     /**
      * Sets or retrieves the frame name.
+     * @deprecated
      */
-    /** @deprecated */
     name: string;
     /**
      * Sets or retrieves whether the user can resize the frame.
+     * @deprecated
      */
-    /** @deprecated */
     noResize: boolean;
     /**
      * Sets or retrieves whether the frame can be scrolled.
+     * @deprecated
      */
-    /** @deprecated */
     scrolling: string;
     /**
      * Sets or retrieves a URL to be loaded by the object.
+     * @deprecated
      */
-    /** @deprecated */
     src: string;
     addEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLFrameElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
     addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
@@ -6860,6 +6695,7 @@
     removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;
 }
 
+/** @deprecated */
 declare var HTMLFrameElement: {
     prototype: HTMLFrameElement;
     new(): HTMLFrameElement;
@@ -6868,17 +6704,20 @@
 interface HTMLFrameSetElementEventMap extends HTMLElementEventMap, WindowEventHandlersEventMap {
 }
 
-/** Provides special properties (beyond those of the regular HTMLElement interface they also inherit) for manipulating <frameset> elements. */
+/**
+ * Provides special properties (beyond those of the regular HTMLElement interface they also inherit) for manipulating <frameset> elements.
+ * @deprecated
+ */
 interface HTMLFrameSetElement extends HTMLElement, WindowEventHandlers {
     /**
      * Sets or retrieves the frame widths of the object.
+     * @deprecated
      */
-    /** @deprecated */
     cols: string;
     /**
      * Sets or retrieves the frame heights of the object.
+     * @deprecated
      */
-    /** @deprecated */
     rows: string;
     addEventListener<K extends keyof HTMLFrameSetElementEventMap>(type: K, listener: (this: HTMLFrameSetElement, ev: HTMLFrameSetElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
     addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
@@ -6886,6 +6725,7 @@
     removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;
 }
 
+/** @deprecated */
 declare var HTMLFrameSetElement: {
     prototype: HTMLFrameSetElement;
     new(): HTMLFrameSetElement;
@@ -6895,22 +6735,22 @@
 interface HTMLHRElement extends HTMLElement {
     /**
      * Sets or retrieves how the object is aligned with adjacent text.
+     * @deprecated
      */
-    /** @deprecated */
     align: string;
     /** @deprecated */
     color: string;
     /**
      * Sets or retrieves whether the horizontal rule is drawn with 3-D shading.
+     * @deprecated
      */
-    /** @deprecated */
     noShade: boolean;
     /** @deprecated */
     size: string;
     /**
      * Sets or retrieves the width of the object.
+     * @deprecated
      */
-    /** @deprecated */
     width: string;
     addEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLHRElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
     addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
@@ -6940,8 +6780,8 @@
 interface HTMLHeadingElement extends HTMLElement {
     /**
      * Sets or retrieves a value that indicates the table alignment.
+     * @deprecated
      */
-    /** @deprecated */
     align: string;
     addEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLHeadingElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
     addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
@@ -6958,8 +6798,8 @@
 interface HTMLHtmlElement extends HTMLElement {
     /**
      * Sets or retrieves the DTD version that governs the current document.
+     * @deprecated
      */
-    /** @deprecated */
     version: string;
     addEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLHtmlElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
     addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
@@ -6973,17 +6813,70 @@
 };
 
 interface HTMLHyperlinkElementUtils {
+    /**
+     * Returns the hyperlink's URL's fragment (includes leading "#" if non-empty).
+     *
+     * Can be set, to change the URL's fragment (ignores leading "#").
+     */
     hash: string;
+    /**
+     * Returns the hyperlink's URL's host and port (if different from the default port for the scheme).
+     *
+     * Can be set, to change the URL's host and port.
+     */
     host: string;
+    /**
+     * Returns the hyperlink's URL's host.
+     *
+     * Can be set, to change the URL's host.
+     */
     hostname: string;
+    /**
+     * Returns the hyperlink's URL.
+     *
+     * Can be set, to change the URL.
+     */
     href: string;
     toString(): string;
+    /**
+     * Returns the hyperlink's URL's origin.
+     */
     readonly origin: string;
+    /**
+     * Returns the hyperlink's URL's password.
+     *
+     * Can be set, to change the URL's password.
+     */
     password: string;
+    /**
+     * Returns the hyperlink's URL's path.
+     *
+     * Can be set, to change the URL's path.
+     */
     pathname: string;
+    /**
+     * Returns the hyperlink's URL's port.
+     *
+     * Can be set, to change the URL's port.
+     */
     port: string;
+    /**
+     * Returns the hyperlink's URL's scheme.
+     *
+     * Can be set, to change the URL's scheme.
+     */
     protocol: string;
+    /**
+     * Returns the hyperlink's URL's query (includes leading "?" if non-empty).
+     *
+     * Can be set, to change the URL's query (ignores leading "?").
+     */
     search: string;
+    /**
+     * Returns the hyperlink's URL's username.
+     *
+     * Can be set, to change the URL's username.
+     */
     username: string;
 }
 
@@ -6991,12 +6884,11 @@
 interface HTMLIFrameElement extends HTMLElement {
     /**
      * Sets or retrieves how the object is aligned with adjacent text.
+     * @deprecated
      */
-    /** @deprecated */
     align: string;
     allow: string;
     allowFullscreen: boolean;
-    allowPaymentRequest: boolean;
     /**
      * Retrieves the document object of the page or frame.
      */
@@ -7007,8 +6899,8 @@
     readonly contentWindow: WindowProxy | null;
     /**
      * Sets or retrieves whether to display a border for the frame.
+     * @deprecated
      */
-    /** @deprecated */
     frameBorder: string;
     /**
      * Sets or retrieves the height of the object.
@@ -7016,18 +6908,18 @@
     height: string;
     /**
      * Sets or retrieves a URI to a long description of the object.
+     * @deprecated
      */
-    /** @deprecated */
     longDesc: string;
     /**
      * Sets or retrieves the top and bottom margin heights before displaying the text in a frame.
+     * @deprecated
      */
-    /** @deprecated */
     marginHeight: string;
     /**
      * Sets or retrieves the left and right margin widths before displaying the text in a frame.
+     * @deprecated
      */
-    /** @deprecated */
     marginWidth: string;
     /**
      * Sets or retrieves the frame name.
@@ -7037,8 +6929,8 @@
     readonly sandbox: DOMTokenList;
     /**
      * Sets or retrieves whether the frame can be scrolled.
+     * @deprecated
      */
-    /** @deprecated */
     scrolling: string;
     /**
      * Sets or retrieves a URL to be loaded by the object.
@@ -7068,8 +6960,8 @@
 interface HTMLImageElement extends HTMLElement {
     /**
      * Sets or retrieves how the object is aligned with adjacent text.
+     * @deprecated
      */
-    /** @deprecated */
     align: string;
     /**
      * Sets or retrieves a text alternative to the graphic.
@@ -7077,8 +6969,8 @@
     alt: string;
     /**
      * Specifies the properties of a border drawn around an object.
+     * @deprecated
      */
-    /** @deprecated */
     border: string;
     /**
      * Retrieves whether the object is fully loaded.
@@ -7093,8 +6985,8 @@
     height: number;
     /**
      * Sets or retrieves the width of the border to draw around the object.
+     * @deprecated
      */
-    /** @deprecated */
     hspace: number;
     /**
      * Sets or retrieves whether the image is a server-side image map.
@@ -7103,15 +6995,15 @@
     loading: string;
     /**
      * Sets or retrieves a Uniform Resource Identifier (URI) to a long description of the object.
+     * @deprecated
      */
-    /** @deprecated */
     longDesc: string;
     /** @deprecated */
     lowsrc: string;
     /**
      * Sets or retrieves the name of the object.
+     * @deprecated
      */
-    /** @deprecated */
     name: string;
     /**
      * The original height of the image resource before sizing.
@@ -7134,8 +7026,8 @@
     useMap: string;
     /**
      * Sets or retrieves the vertical margin for the object.
+     * @deprecated
      */
-    /** @deprecated */
     vspace: number;
     /**
      * Sets or retrieves the width of the object.
@@ -7163,8 +7055,8 @@
     accept: string;
     /**
      * Sets or retrieves how the object is aligned with adjacent text.
+     * @deprecated
      */
-    /** @deprecated */
     align: string;
     /**
      * Sets or retrieves a text alternative to the graphic.
@@ -7174,6 +7066,7 @@
      * Specifies whether autocomplete is applied to an editable text field.
      */
     autocomplete: string;
+    capture: string;
     /**
      * Sets or retrieves the state of the check box or radio button.
      */
@@ -7220,6 +7113,9 @@
      * Sets or retrieves the height of the object.
      */
     height: number;
+    /**
+     * When set, overrides the rendering of checkbox controls so that the current value is not visible.
+     */
     indeterminate: boolean;
     readonly labels: NodeListOf<HTMLLabelElement> | null;
     /**
@@ -7284,8 +7180,8 @@
     type: string;
     /**
      * Sets or retrieves the URL, often with a bookmark extension (#name), to use as a client-side image map.
+     * @deprecated
      */
-    /** @deprecated */
     useMap: string;
     /**
      * Returns the error message that would be displayed if the user submits the form, or an empty string if no error message. It also triggers the standard error message, such as "this is a required field". The result is that the user sees validation messages without actually submitting.
@@ -7307,6 +7203,8 @@
      * Returns the input field value as a number.
      */
     valueAsNumber: number;
+    readonly webkitEntries: ReadonlyArray<FileSystemEntry>;
+    webkitdirectory: boolean;
     /**
      * Sets or retrieves the width of the object.
      */
@@ -7380,6 +7278,9 @@
 
 /** Gives access to properties specific to <label> elements. It inherits methods and properties from the base HTMLElement interface. */
 interface HTMLLabelElement extends HTMLElement {
+    /**
+     * Returns the form control that is associated with this element.
+     */
     readonly control: HTMLElement | null;
     /**
      * Retrieves a reference to the form that the object is embedded in.
@@ -7424,8 +7325,8 @@
     as: string;
     /**
      * Sets or retrieves the character set used to encode the object.
+     * @deprecated
      */
-    /** @deprecated */
     charset: string;
     crossOrigin: string | null;
     disabled: boolean;
@@ -7452,14 +7353,14 @@
     readonly relList: DOMTokenList;
     /**
      * Sets or retrieves the relationship between the object and the destination of the link.
+     * @deprecated
      */
-    /** @deprecated */
     rev: string;
     readonly sizes: DOMTokenList;
     /**
      * Sets or retrieves the window or frame at which to target content.
+     * @deprecated
      */
-    /** @deprecated */
     target: string;
     /**
      * Sets or retrieves the MIME type of the object.
@@ -7497,13 +7398,10 @@
     new(): HTMLMapElement;
 };
 
-interface HTMLMarqueeElementEventMap extends HTMLElementEventMap {
-    "bounce": Event;
-    "finish": Event;
-    "start": Event;
-}
-
-/** Provides methods to manipulate <marquee> elements. */
+/**
+ * Provides methods to manipulate <marquee> elements.
+ * @deprecated
+ */
 interface HTMLMarqueeElement extends HTMLElement {
     /** @deprecated */
     behavior: string;
@@ -7518,12 +7416,6 @@
     /** @deprecated */
     loop: number;
     /** @deprecated */
-    onbounce: ((this: HTMLMarqueeElement, ev: Event) => any) | null;
-    /** @deprecated */
-    onfinish: ((this: HTMLMarqueeElement, ev: Event) => any) | null;
-    /** @deprecated */
-    onstart: ((this: HTMLMarqueeElement, ev: Event) => any) | null;
-    /** @deprecated */
     scrollAmount: number;
     /** @deprecated */
     scrollDelay: number;
@@ -7537,12 +7429,13 @@
     start(): void;
     /** @deprecated */
     stop(): void;
-    addEventListener<K extends keyof HTMLMarqueeElementEventMap>(type: K, listener: (this: HTMLMarqueeElement, ev: HTMLMarqueeElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
+    addEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLMarqueeElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
     addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
-    removeEventListener<K extends keyof HTMLMarqueeElementEventMap>(type: K, listener: (this: HTMLMarqueeElement, ev: HTMLMarqueeElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;
+    removeEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLMarqueeElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;
     removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;
 }
 
+/** @deprecated */
 declare var HTMLMarqueeElement: {
     prototype: HTMLMarqueeElement;
     new(): HTMLMarqueeElement;
@@ -7581,6 +7474,7 @@
      * Gets or sets the default playback rate when the user is not using fast forward or reverse for a video or audio resource.
      */
     defaultPlaybackRate: number;
+    disableRemotePlayback: boolean;
     /**
      * Returns the duration in seconds of the current media resource. A NaN value is returned if duration is not available, or Infinity if the media resource is streaming.
      */
@@ -7625,6 +7519,7 @@
      */
     preload: string;
     readonly readyState: number;
+    readonly remote: RemotePlayback;
     /**
      * Returns a TimeRanges object that represents the ranges of the current media resource that can be seeked.
      */
@@ -7721,8 +7616,8 @@
     name: string;
     /**
      * Sets or retrieves a scheme to be used in interpreting the value of a property specified for the object.
+     * @deprecated
      */
-    /** @deprecated */
     scheme: string;
     addEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLMetaElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
     addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
@@ -7803,25 +7698,25 @@
     align: string;
     /**
      * Sets or retrieves a character string that can be used to implement your own archive functionality for the object.
+     * @deprecated
      */
-    /** @deprecated */
     archive: string;
     /** @deprecated */
     border: string;
     /**
      * Sets or retrieves the URL of the file containing the compiled Java class.
+     * @deprecated
      */
-    /** @deprecated */
     code: string;
     /**
      * Sets or retrieves the URL of the component.
+     * @deprecated
      */
-    /** @deprecated */
     codeBase: string;
     /**
      * Sets or retrieves the Internet media type for the code associated with the object.
+     * @deprecated
      */
-    /** @deprecated */
     codeType: string;
     /**
      * Retrieves the document object of the page or frame.
@@ -7850,8 +7745,8 @@
     name: string;
     /**
      * Sets or retrieves a message to be displayed while an object is loading.
+     * @deprecated
      */
-    /** @deprecated */
     standby: string;
     /**
      * Sets or retrieves the MIME type of the object.
@@ -7905,10 +7800,6 @@
 interface HTMLOptGroupElement extends HTMLElement {
     disabled: boolean;
     /**
-     * Retrieves a reference to the form that the object is embedded in.
-     */
-    readonly form: HTMLFormElement | null;
-    /**
      * Sets or retrieves a value that you can use to implement your own label functionality for the object.
      */
     label: string;
@@ -8003,7 +7894,6 @@
 };
 
 interface HTMLOrSVGElement {
-    autofocus: boolean;
     readonly dataset: DOMStringMap;
     nonce?: string;
     tabIndex: number;
@@ -8018,9 +7908,17 @@
     readonly htmlFor: DOMTokenList;
     readonly labels: NodeListOf<HTMLLabelElement>;
     name: string;
+    /**
+     * Returns the string "output".
+     */
     readonly type: string;
     readonly validationMessage: string;
     readonly validity: ValidityState;
+    /**
+     * Returns the element's current value.
+     *
+     * Can be set, to change the value.
+     */
     value: string;
     readonly willValidate: boolean;
     checkValidity(): boolean;
@@ -8041,8 +7939,8 @@
 interface HTMLParagraphElement extends HTMLElement {
     /**
      * Sets or retrieves how the object is aligned with adjacent text.
+     * @deprecated
      */
-    /** @deprecated */
     align: string;
     addEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLParagraphElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
     addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
@@ -8063,8 +7961,8 @@
     name: string;
     /**
      * Sets or retrieves the content type of the resource designated by the value attribute.
+     * @deprecated
      */
-    /** @deprecated */
     type: string;
     /**
      * Sets or retrieves the value of an input parameter for an element.
@@ -8072,8 +7970,8 @@
     value: string;
     /**
      * Sets or retrieves the data type of the value attribute.
+     * @deprecated
      */
-    /** @deprecated */
     valueType: string;
     addEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLParamElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
     addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
@@ -8103,8 +8001,8 @@
 interface HTMLPreElement extends HTMLElement {
     /**
      * Sets or gets a value that you can use to implement your own width functionality for the object.
+     * @deprecated
      */
-    /** @deprecated */
     width: number;
     addEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLPreElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
     addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
@@ -8165,8 +8063,8 @@
     async: boolean;
     /**
      * Sets or retrieves the character set used to encode the object.
+     * @deprecated
      */
-    /** @deprecated */
     charset: string;
     crossOrigin: string | null;
     /**
@@ -8175,13 +8073,13 @@
     defer: boolean;
     /**
      * Sets or retrieves the event for which the script is written.
+     * @deprecated
      */
-    /** @deprecated */
     event: string;
     /**
      * Sets or retrieves the object that is bound to the event script.
+     * @deprecated
      */
-    /** @deprecated */
     htmlFor: string;
     integrity: string;
     noModule: boolean;
@@ -8230,6 +8128,9 @@
      * Sets or retrieves the name of the object.
      */
     name: string;
+    /**
+     * Returns an HTMLOptionsCollection of the list of options.
+     */
     readonly options: HTMLOptionsCollection;
     /**
      * When present, marks an element that can't be submitted without a value.
@@ -8279,7 +8180,7 @@
      * @param name Variant of type Number or String that specifies the object or collection to retrieve. If this parameter is an integer, it is the zero-based index of the object. If this parameter is a string, all objects with matching name or id properties are retrieved, and a collection is returned if more than one match is made.
      * @param index Variant of type Number that specifies the zero-based index of the object to retrieve when a collection is returned.
      */
-    item(index: number): Element | null;
+    item(index: number): HTMLOptionElement | null;
     /**
      * Retrieves a select object or an object from an options collection.
      * @param namedItem A String that specifies the name or id property of the object to retrieve. A collection is returned if more than one match is made.
@@ -8372,8 +8273,8 @@
     media: string;
     /**
      * Retrieves the CSS language in which the style sheet is written.
+     * @deprecated
      */
-    /** @deprecated */
     type: string;
     addEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLStyleElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
     addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
@@ -8390,8 +8291,8 @@
 interface HTMLTableCaptionElement extends HTMLElement {
     /**
      * Sets or retrieves the alignment of the caption or legend.
+     * @deprecated
      */
-    /** @deprecated */
     align: string;
     addEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLTableCaptionElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
     addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
@@ -8412,13 +8313,13 @@
     abbr: string;
     /**
      * Sets or retrieves how the object is aligned with adjacent text.
+     * @deprecated
      */
-    /** @deprecated */
     align: string;
     /**
      * Sets or retrieves a comma-delimited list of conceptual categories associated with the object.
+     * @deprecated
      */
-    /** @deprecated */
     axis: string;
     /** @deprecated */
     bgColor: string;
@@ -8440,13 +8341,13 @@
     headers: string;
     /**
      * Sets or retrieves the height of the object.
+     * @deprecated
      */
-    /** @deprecated */
     height: string;
     /**
      * Sets or retrieves whether the browser automatically performs wordwrap.
+     * @deprecated
      */
-    /** @deprecated */
     noWrap: boolean;
     /**
      * Sets or retrieves how many rows in a table the cell should span.
@@ -8460,8 +8361,8 @@
     vAlign: string;
     /**
      * Sets or retrieves the width of the object.
+     * @deprecated
      */
-    /** @deprecated */
     width: string;
     addEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLTableCellElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
     addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
@@ -8478,8 +8379,8 @@
 interface HTMLTableColElement extends HTMLElement {
     /**
      * Sets or retrieves the alignment of the object relative to the display or table.
+     * @deprecated
      */
-    /** @deprecated */
     align: string;
     /** @deprecated */
     ch: string;
@@ -8493,8 +8394,8 @@
     vAlign: string;
     /**
      * Sets or retrieves the width of the object.
+     * @deprecated
      */
-    /** @deprecated */
     width: string;
     addEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLTableColElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
     addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
@@ -8507,6 +8408,7 @@
     new(): HTMLTableColElement;
 };
 
+/** @deprecated prefer HTMLTableCellElement */
 interface HTMLTableDataCellElement extends HTMLTableCellElement {
     addEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLTableDataCellElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
     addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
@@ -8514,24 +8416,19 @@
     removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;
 }
 
-declare var HTMLTableDataCellElement: {
-    prototype: HTMLTableDataCellElement;
-    new(): HTMLTableDataCellElement;
-};
-
 /** Provides special properties and methods (beyond the regular HTMLElement object interface it also has available to it by inheritance) for manipulating the layout and presentation of tables in an HTML document. */
 interface HTMLTableElement extends HTMLElement {
     /**
      * Sets or retrieves a value that indicates the table alignment.
+     * @deprecated
      */
-    /** @deprecated */
     align: string;
     /** @deprecated */
     bgColor: string;
     /**
      * Sets or retrieves the width of the border to draw around the object.
+     * @deprecated
      */
-    /** @deprecated */
     border: string;
     /**
      * Retrieves the caption object of a table.
@@ -8539,18 +8436,18 @@
     caption: HTMLTableCaptionElement | null;
     /**
      * Sets or retrieves the amount of space between the border of the cell and the content of the cell.
+     * @deprecated
      */
-    /** @deprecated */
     cellPadding: string;
     /**
      * Sets or retrieves the amount of space between cells in a table.
+     * @deprecated
      */
-    /** @deprecated */
     cellSpacing: string;
     /**
      * Sets or retrieves the way the border frame around the table is displayed.
+     * @deprecated
      */
-    /** @deprecated */
     frame: string;
     /**
      * Sets or retrieves the number of horizontal rows contained in the object.
@@ -8558,13 +8455,13 @@
     readonly rows: HTMLCollectionOf<HTMLTableRowElement>;
     /**
      * Sets or retrieves which dividing lines (inner borders) are displayed.
+     * @deprecated
      */
-    /** @deprecated */
     rules: string;
     /**
      * Sets or retrieves a description and/or structure of the object.
+     * @deprecated
      */
-    /** @deprecated */
     summary: string;
     /**
      * Retrieves a collection of all tBody objects in the table. Objects in this collection are in source order.
@@ -8580,8 +8477,8 @@
     tHead: HTMLTableSectionElement | null;
     /**
      * Sets or retrieves the width of the object.
+     * @deprecated
      */
-    /** @deprecated */
     width: string;
     /**
      * Creates an empty caption element in the table.
@@ -8632,6 +8529,7 @@
     new(): HTMLTableElement;
 };
 
+/** @deprecated prefer HTMLTableCellElement */
 interface HTMLTableHeaderCellElement extends HTMLTableCellElement {
     addEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLTableHeaderCellElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
     addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
@@ -8639,24 +8537,19 @@
     removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;
 }
 
-declare var HTMLTableHeaderCellElement: {
-    prototype: HTMLTableHeaderCellElement;
-    new(): HTMLTableHeaderCellElement;
-};
-
 /** Provides special properties and methods (beyond the HTMLElement interface it also has available to it by inheritance) for manipulating the layout and presentation of rows in an HTML table. */
 interface HTMLTableRowElement extends HTMLElement {
     /**
      * Sets or retrieves how the object is aligned with adjacent text.
+     * @deprecated
      */
-    /** @deprecated */
     align: string;
     /** @deprecated */
     bgColor: string;
     /**
      * Retrieves a collection of all cells in the table row.
      */
-    readonly cells: HTMLCollectionOf<HTMLTableDataCellElement | HTMLTableHeaderCellElement>;
+    readonly cells: HTMLCollectionOf<HTMLTableCellElement>;
     /** @deprecated */
     ch: string;
     /** @deprecated */
@@ -8680,7 +8573,7 @@
      * Creates a new cell in the table row, and adds the cell to the cells collection.
      * @param index Number that specifies where to insert the cell in the tr. The default value is -1, which appends the new cell to the end of the cells collection.
      */
-    insertCell(index?: number): HTMLTableDataCellElement;
+    insertCell(index?: number): HTMLTableCellElement;
     addEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLTableRowElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
     addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
     removeEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLTableRowElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;
@@ -8696,8 +8589,8 @@
 interface HTMLTableSectionElement extends HTMLElement {
     /**
      * Sets or retrieves a value that indicates the table alignment.
+     * @deprecated
      */
-    /** @deprecated */
     align: string;
     /** @deprecated */
     ch: string;
@@ -8732,6 +8625,9 @@
 
 /** Enables access to the contents of an HTML <template> element. */
 interface HTMLTemplateElement extends HTMLElement {
+    /**
+     * Returns the template contents (a DocumentFragment).
+     */
     readonly content: DocumentFragment;
     addEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLTemplateElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
     addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
@@ -8894,6 +8790,9 @@
     readonly readyState: number;
     src: string;
     srclang: string;
+    /**
+     * Returns the TextTrack object corresponding to the text track of the track element.
+     */
     readonly track: TextTrack;
     readonly ERROR: number;
     readonly LOADED: number;
@@ -8944,12 +8843,20 @@
     new(): HTMLUnknownElement;
 };
 
+interface HTMLVideoElementEventMap extends HTMLMediaElementEventMap {
+    "enterpictureinpicture": Event;
+    "leavepictureinpicture": Event;
+}
+
 /** Provides special properties and methods for manipulating video objects. It also inherits properties and methods of HTMLMediaElement and HTMLElement. */
 interface HTMLVideoElement extends HTMLMediaElement {
+    disablePictureInPicture: boolean;
     /**
      * Gets or sets the height of the video element.
      */
     height: number;
+    onenterpictureinpicture: ((this: HTMLVideoElement, ev: Event) => any) | null;
+    onleavepictureinpicture: ((this: HTMLVideoElement, ev: Event) => any) | null;
     /**
      * Gets or sets the playsinline of the video element. for example, On iPhone, video elements will now be allowed to play inline, and will not automatically enter fullscreen mode when playback begins.
      */
@@ -8971,9 +8878,10 @@
      */
     width: number;
     getVideoPlaybackQuality(): VideoPlaybackQuality;
-    addEventListener<K extends keyof HTMLMediaElementEventMap>(type: K, listener: (this: HTMLVideoElement, ev: HTMLMediaElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
+    requestPictureInPicture(): Promise<PictureInPictureWindow>;
+    addEventListener<K extends keyof HTMLVideoElementEventMap>(type: K, listener: (this: HTMLVideoElement, ev: HTMLVideoElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
     addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
-    removeEventListener<K extends keyof HTMLMediaElementEventMap>(type: K, listener: (this: HTMLVideoElement, ev: HTMLMediaElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;
+    removeEventListener<K extends keyof HTMLVideoElementEventMap>(type: K, listener: (this: HTMLVideoElement, ev: HTMLVideoElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;
     removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;
 }
 
@@ -9022,8 +8930,8 @@
     back(): void;
     forward(): void;
     go(delta?: number): void;
-    pushState(data: any, title: string, url?: string | null): void;
-    replaceState(data: any, title: string, url?: string | null): void;
+    pushState(data: any, unused: string, url?: string | URL | null): void;
+    replaceState(data: any, unused: string, url?: string | URL | null): void;
 }
 
 declare var History: {
@@ -9031,9 +8939,6 @@
     new(): History;
 };
 
-interface IDBArrayKey extends Array<IDBValidKey> {
-}
-
 /** This IndexedDB API interface represents a cursor for traversing or iterating over multiple records in a database. */
 interface IDBCursor {
     /**
@@ -9048,6 +8953,7 @@
      * Returns the effective key of the cursor. Throws a "InvalidStateError" DOMException if the cursor is advancing or is finished.
      */
     readonly primaryKey: IDBValidKey;
+    readonly request: IDBRequest;
     /**
      * Returns the IDBObjectStore or IDBIndex the cursor was opened from.
      */
@@ -9162,6 +9068,7 @@
      * Throws a "DataError" DOMException if either input is not a valid key.
      */
     cmp(first: any, second: any): number;
+    databases(): Promise<IDBDatabaseInfo[]>;
     /**
      * Attempts to delete the named database. If the database already exists and there are open connections that don't close in response to a versionchange event, the request will be blocked until all they close. If the request is successful request's result will be null.
      */
@@ -9195,13 +9102,13 @@
      *
      * If successful, request's result will be the count.
      */
-    count(key?: IDBValidKey | IDBKeyRange): IDBRequest<number>;
+    count(query?: IDBValidKey | IDBKeyRange): IDBRequest<number>;
     /**
      * Retrieves the value of the first record matching the given key or key range in query.
      *
      * If successful, request's result will be the value, or undefined if there was no matching record.
      */
-    get(key: IDBValidKey | IDBKeyRange): IDBRequest<any | undefined>;
+    get(query: IDBValidKey | IDBKeyRange): IDBRequest<any>;
     /**
      * Retrieves the values of the records matching the given key or key range in query (up to count if given).
      *
@@ -9219,7 +9126,7 @@
      *
      * If successful, request's result will be the key, or undefined if there was no matching record.
      */
-    getKey(key: IDBValidKey | IDBKeyRange): IDBRequest<IDBValidKey | undefined>;
+    getKey(query: IDBValidKey | IDBKeyRange): IDBRequest<IDBValidKey | undefined>;
     /**
      * Opens a cursor over the records matching query, ordered by direction. If query is null, all records in index are matched.
      *
@@ -9327,7 +9234,7 @@
      *
      * If successful, request's result will be the count.
      */
-    count(key?: IDBValidKey | IDBKeyRange): IDBRequest<number>;
+    count(query?: IDBValidKey | IDBKeyRange): IDBRequest<number>;
     /**
      * Creates a new index in store with the given name, keyPath and options and returns a new IDBIndex. If the keyPath and options define constraints that cannot be satisfied with the data already in store the upgrade transaction will abort with a "ConstraintError" DOMException.
      *
@@ -9339,7 +9246,7 @@
      *
      * If successful, request's result will be undefined.
      */
-    delete(key: IDBValidKey | IDBKeyRange): IDBRequest<undefined>;
+    delete(query: IDBValidKey | IDBKeyRange): IDBRequest<undefined>;
     /**
      * Deletes the index in store with the given name.
      *
@@ -9351,7 +9258,7 @@
      *
      * If successful, request's result will be the value, or undefined if there was no matching record.
      */
-    get(query: IDBValidKey | IDBKeyRange): IDBRequest<any | undefined>;
+    get(query: IDBValidKey | IDBKeyRange): IDBRequest<any>;
     /**
      * Retrieves the values of the records matching the given key or key range in query (up to count if given).
      *
@@ -9474,7 +9381,7 @@
     /**
      * If the transaction was aborted, returns the error (a DOMException) providing the reason.
      */
-    readonly error: DOMException;
+    readonly error: DOMException | null;
     /**
      * Returns the mode the transaction was created with ("readonly" or "readwrite"), or "versionchange" for an upgrade transaction.
      */
@@ -9490,6 +9397,7 @@
      * Aborts the transaction. All pending requests will fail with a "AbortError" DOMException and all changes made to the database will be reverted.
      */
     abort(): void;
+    commit(): void;
     /**
      * Returns an IDBObjectStore in the transaction's scope.
      */
@@ -9526,6 +9434,16 @@
     new(context: BaseAudioContext, options: IIRFilterOptions): IIRFilterNode;
 };
 
+interface IdleDeadline {
+    readonly didTimeout: boolean;
+    timeRemaining(): DOMHighResTimeStamp;
+}
+
+declare var IdleDeadline: {
+    prototype: IdleDeadline;
+    new(): IdleDeadline;
+};
+
 interface ImageBitmap {
     /**
      * Returns the intrinsic height of the image, in CSS pixels.
@@ -9550,7 +9468,7 @@
     /**
      * Returns the canvas element that the context is bound to.
      */
-    readonly canvas: HTMLCanvasElement | OffscreenCanvas;
+    readonly canvas: HTMLCanvasElement;
     /**
      * Transfers the underlying bitmap data from imageBitmap to context, and the bitmap becomes the contents of the canvas element to which context is bound.
      */
@@ -9580,27 +9498,20 @@
 
 declare var ImageData: {
     prototype: ImageData;
-    new(sw: number, sh: number): ImageData;
-    new(data: Uint8ClampedArray, sw: number, sh?: number): ImageData;
+    new(sw: number, sh: number, settings?: ImageDataSettings): ImageData;
+    new(data: Uint8ClampedArray, sw: number, sh?: number, settings?: ImageDataSettings): ImageData;
 };
 
 interface InnerHTML {
     innerHTML: string;
 }
 
-interface InputDeviceInfo extends MediaDeviceInfo {
-    getCapabilities(): MediaTrackCapabilities;
-}
-
-declare var InputDeviceInfo: {
-    prototype: InputDeviceInfo;
-    new(): InputDeviceInfo;
-};
-
 interface InputEvent extends UIEvent {
     readonly data: string | null;
+    readonly dataTransfer: DataTransfer | null;
     readonly inputType: string;
     readonly isComposing: boolean;
+    getTargetRanges(): StaticRange[];
 }
 
 declare var InputEvent: {
@@ -9632,7 +9543,7 @@
     readonly isIntersecting: boolean;
     readonly rootBounds: DOMRectReadOnly | null;
     readonly target: Element;
-    readonly time: number;
+    readonly time: DOMHighResTimeStamp;
 }
 
 declare var IntersectionObserverEntry: {
@@ -9640,12 +9551,14 @@
     new(intersectionObserverEntryInit: IntersectionObserverEntryInit): IntersectionObserverEntry;
 };
 
+interface KHR_parallel_shader_compile {
+    readonly COMPLETION_STATUS_KHR: GLenum;
+}
+
 /** KeyboardEvent objects describe a user interaction with the keyboard; each event describes a single interaction between the user and a key (or combination of a key with modifier keys) on the keyboard. */
 interface KeyboardEvent extends UIEvent {
     readonly altKey: boolean;
     /** @deprecated */
-    char: string;
-    /** @deprecated */
     readonly charCode: number;
     readonly code: string;
     readonly ctrlKey: boolean;
@@ -9658,6 +9571,8 @@
     readonly repeat: boolean;
     readonly shiftKey: boolean;
     getModifierState(keyArg: string): boolean;
+    /** @deprecated */
+    initKeyboardEvent(typeArg: string, bubblesArg?: boolean, cancelableArg?: boolean, viewArg?: Window | null, keyArg?: string, locationArg?: number, ctrlKey?: boolean, altKey?: boolean, shiftKey?: boolean, metaKey?: boolean): void;
     readonly DOM_KEY_LOCATION_LEFT: number;
     readonly DOM_KEY_LOCATION_NUMPAD: number;
     readonly DOM_KEY_LOCATION_RIGHT: number;
@@ -9676,6 +9591,7 @@
 interface KeyframeEffect extends AnimationEffect {
     composite: CompositeOperation;
     iterationComposite: IterationCompositeOperation;
+    pseudoElement: string | null;
     target: Element | null;
     getKeyframes(): ComputedKeyframe[];
     setKeyframes(keyframes: Keyframe[] | PropertyIndexedKeyframes | null): void;
@@ -9691,16 +9607,6 @@
     readonly sheet: CSSStyleSheet | null;
 }
 
-interface ListeningStateChangedEvent extends Event {
-    readonly label: string;
-    readonly state: ListeningState;
-}
-
-declare var ListeningStateChangedEvent: {
-    prototype: ListeningStateChangedEvent;
-    new(): ListeningStateChangedEvent;
-};
-
 /** The location (URL) of the object it is linked to. Changes done on it are reflected on the object it relates to. Both the Document and Window interface have such a linked Location, accessible via Document.location and Window.location respectively. */
 interface Location {
     /**
@@ -9763,17 +9669,15 @@
     /**
      * Navigates to the given URL.
      */
-    assign(url: string): void;
+    assign(url: string | URL): void;
     /**
      * Reloads the current page.
      */
     reload(): void;
-    /** @deprecated */
-    reload(forcedReload: boolean): void;
     /**
      * Removes the current page from the session history and navigates to the given URL.
      */
-    replace(url: string): void;
+    replace(url: string | URL): void;
 }
 
 declare var Location: {
@@ -9781,178 +9685,29 @@
     new(): Location;
 };
 
-interface MSAssertion {
-    readonly id: string;
-    readonly type: MSCredentialType;
+interface MathMLElementEventMap extends ElementEventMap, DocumentAndElementEventHandlersEventMap, GlobalEventHandlersEventMap {
 }
 
-declare var MSAssertion: {
-    prototype: MSAssertion;
-    new(): MSAssertion;
-};
-
-interface MSBlobBuilder {
-    append(data: any, endings?: string): void;
-    getBlob(contentType?: string): Blob;
-}
-
-declare var MSBlobBuilder: {
-    prototype: MSBlobBuilder;
-    new(): MSBlobBuilder;
-};
-
-interface MSFIDOCredentialAssertion extends MSAssertion {
-    readonly algorithm: string | Algorithm;
-    readonly attestation: any;
-    readonly publicKey: string;
-    readonly transportHints: MSTransportType[];
-}
-
-declare var MSFIDOCredentialAssertion: {
-    prototype: MSFIDOCredentialAssertion;
-    new(): MSFIDOCredentialAssertion;
-};
-
-interface MSFIDOSignature {
-    readonly authnrData: string;
-    readonly clientData: string;
-    readonly signature: string;
-}
-
-declare var MSFIDOSignature: {
-    prototype: MSFIDOSignature;
-    new(): MSFIDOSignature;
-};
-
-interface MSFIDOSignatureAssertion extends MSAssertion {
-    readonly signature: MSFIDOSignature;
-}
-
-declare var MSFIDOSignatureAssertion: {
-    prototype: MSFIDOSignatureAssertion;
-    new(): MSFIDOSignatureAssertion;
-};
-
-interface MSFileSaver {
-    msSaveBlob(blob: any, defaultName?: string): boolean;
-    msSaveOrOpenBlob(blob: any, defaultName?: string): boolean;
-}
-
-interface MSGesture {
-    target: Element;
-    addPointer(pointerId: number): void;
-    stop(): void;
-}
-
-declare var MSGesture: {
-    prototype: MSGesture;
-    new(): MSGesture;
-};
-
-/** The msGraphicsTrust() constructor returns an object that provides properties for info on protected video playback. */
-interface MSGraphicsTrust {
-    readonly constrictionActive: boolean;
-    readonly status: string;
-}
-
-declare var MSGraphicsTrust: {
-    prototype: MSGraphicsTrust;
-    new(): MSGraphicsTrust;
-};
-
-interface MSInputMethodContextEventMap {
-    "MSCandidateWindowHide": Event;
-    "MSCandidateWindowShow": Event;
-    "MSCandidateWindowUpdate": Event;
-}
-
-interface MSInputMethodContext extends EventTarget {
-    readonly compositionEndOffset: number;
-    readonly compositionStartOffset: number;
-    oncandidatewindowhide: ((this: MSInputMethodContext, ev: Event) => any) | null;
-    oncandidatewindowshow: ((this: MSInputMethodContext, ev: Event) => any) | null;
-    oncandidatewindowupdate: ((this: MSInputMethodContext, ev: Event) => any) | null;
-    readonly target: HTMLElement;
-    getCandidateWindowClientRect(): ClientRect;
-    getCompositionAlternatives(): string[];
-    hasComposition(): boolean;
-    isCandidateWindowVisible(): boolean;
-    addEventListener<K extends keyof MSInputMethodContextEventMap>(type: K, listener: (this: MSInputMethodContext, ev: MSInputMethodContextEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
+interface MathMLElement extends Element, DocumentAndElementEventHandlers, ElementCSSInlineStyle, GlobalEventHandlers, HTMLOrSVGElement {
+    addEventListener<K extends keyof MathMLElementEventMap>(type: K, listener: (this: MathMLElement, ev: MathMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
     addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
-    removeEventListener<K extends keyof MSInputMethodContextEventMap>(type: K, listener: (this: MSInputMethodContext, ev: MSInputMethodContextEventMap[K]) => any, options?: boolean | EventListenerOptions): void;
+    removeEventListener<K extends keyof MathMLElementEventMap>(type: K, listener: (this: MathMLElement, ev: MathMLElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;
     removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;
 }
 
-declare var MSInputMethodContext: {
-    prototype: MSInputMethodContext;
-    new(): MSInputMethodContext;
+declare var MathMLElement: {
+    prototype: MathMLElement;
+    new(): MathMLElement;
 };
 
-interface MSMediaKeyError {
-    readonly code: number;
-    readonly systemCode: number;
-    readonly MS_MEDIA_KEYERR_CLIENT: number;
-    readonly MS_MEDIA_KEYERR_DOMAIN: number;
-    readonly MS_MEDIA_KEYERR_HARDWARECHANGE: number;
-    readonly MS_MEDIA_KEYERR_OUTPUT: number;
-    readonly MS_MEDIA_KEYERR_SERVICE: number;
-    readonly MS_MEDIA_KEYERR_UNKNOWN: number;
+interface MediaCapabilities {
+    decodingInfo(configuration: MediaDecodingConfiguration): Promise<MediaCapabilitiesDecodingInfo>;
+    encodingInfo(configuration: MediaEncodingConfiguration): Promise<MediaCapabilitiesEncodingInfo>;
 }
 
-declare var MSMediaKeyError: {
-    prototype: MSMediaKeyError;
-    new(): MSMediaKeyError;
-    readonly MS_MEDIA_KEYERR_CLIENT: number;
-    readonly MS_MEDIA_KEYERR_DOMAIN: number;
-    readonly MS_MEDIA_KEYERR_HARDWARECHANGE: number;
-    readonly MS_MEDIA_KEYERR_OUTPUT: number;
-    readonly MS_MEDIA_KEYERR_SERVICE: number;
-    readonly MS_MEDIA_KEYERR_UNKNOWN: number;
-};
-
-interface MSMediaKeySession extends EventTarget {
-    readonly error: MSMediaKeyError | null;
-    readonly keySystem: string;
-    readonly sessionId: string;
-    close(): void;
-    update(key: Uint8Array): void;
-}
-
-declare var MSMediaKeySession: {
-    prototype: MSMediaKeySession;
-    new(): MSMediaKeySession;
-};
-
-interface MSMediaKeys {
-    readonly keySystem: string;
-    createSession(type: string, initData: Uint8Array, cdmData?: Uint8Array | null): MSMediaKeySession;
-}
-
-declare var MSMediaKeys: {
-    prototype: MSMediaKeys;
-    new(keySystem: string): MSMediaKeys;
-    isTypeSupported(keySystem: string, type?: string | null): boolean;
-    isTypeSupportedWithFeatures(keySystem: string, type?: string | null): string;
-};
-
-interface MSNavigatorDoNotTrack {
-    confirmSiteSpecificTrackingException(args: ConfirmSiteSpecificExceptionsInformation): boolean;
-    confirmWebWideTrackingException(args: ExceptionInformation): boolean;
-    removeSiteSpecificTrackingException(args: ExceptionInformation): void;
-    removeWebWideTrackingException(args: ExceptionInformation): void;
-    storeSiteSpecificTrackingException(args: StoreSiteSpecificExceptionsInformation): void;
-    storeWebWideTrackingException(args: StoreExceptionsInformation): void;
-}
-
-interface MSStream {
-    readonly type: string;
-    msClose(): void;
-    msDetachStream(): any;
-}
-
-declare var MSStream: {
-    prototype: MSStream;
-    new(): MSStream;
+declare var MediaCapabilities: {
+    prototype: MediaCapabilities;
+    new(): MediaCapabilities;
 };
 
 /** The MediaDevicesInfo interface contains information that describes a single media input or output device. */
@@ -9977,6 +9732,7 @@
 interface MediaDevices extends EventTarget {
     ondevicechange: ((this: MediaDevices, ev: Event) => any) | null;
     enumerateDevices(): Promise<MediaDeviceInfo[]>;
+    getDisplayMedia(constraints?: DisplayMediaStreamConstraints): Promise<MediaStream>;
     getSupportedConstraints(): MediaTrackSupportedConstraints;
     getUserMedia(constraints?: MediaStreamConstraints): Promise<MediaStream>;
     addEventListener<K extends keyof MediaDevicesEventMap>(type: K, listener: (this: MediaDevices, ev: MediaDevicesEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
@@ -10047,7 +9803,7 @@
 
 /** This EncryptedMediaExtensions API interface represents a context for message exchange with a content decryption module (CDM). */
 interface MediaKeySession extends EventTarget {
-    readonly closed: Promise<void>;
+    readonly closed: Promise<MediaKeySessionClosedReason>;
     readonly expiration: number;
     readonly keyStatuses: MediaKeyStatusMap;
     onkeystatuseschange: ((this: MediaKeySession, ev: Event) => any) | null;
@@ -10120,6 +9876,18 @@
     new(): MediaList;
 };
 
+interface MediaMetadata {
+    album: string;
+    artist: string;
+    artwork: ReadonlyArray<MediaImage>;
+    title: string;
+}
+
+declare var MediaMetadata: {
+    prototype: MediaMetadata;
+    new(init?: MediaMetadataInit): MediaMetadata;
+};
+
 interface MediaQueryListEventMap {
     "change": MediaQueryListEvent;
 }
@@ -10130,9 +9898,9 @@
     readonly media: string;
     onchange: ((this: MediaQueryList, ev: MediaQueryListEvent) => any) | null;
     /** @deprecated */
-    addListener(listener: ((this: MediaQueryList, ev: MediaQueryListEvent) => any) | null): void;
+    addListener(callback: ((this: MediaQueryList, ev: MediaQueryListEvent) => any) | null): void;
     /** @deprecated */
-    removeListener(listener: ((this: MediaQueryList, ev: MediaQueryListEvent) => any) | null): void;
+    removeListener(callback: ((this: MediaQueryList, ev: MediaQueryListEvent) => any) | null): void;
     addEventListener<K extends keyof MediaQueryListEventMap>(type: K, listener: (this: MediaQueryList, ev: MediaQueryListEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
     addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
     removeEventListener<K extends keyof MediaQueryListEventMap>(type: K, listener: (this: MediaQueryList, ev: MediaQueryListEventMap[K]) => any, options?: boolean | EventListenerOptions): void;
@@ -10154,6 +9922,65 @@
     new(type: string, eventInitDict?: MediaQueryListEventInit): MediaQueryListEvent;
 };
 
+interface MediaRecorderEventMap {
+    "dataavailable": BlobEvent;
+    "error": Event;
+    "pause": Event;
+    "resume": Event;
+    "start": Event;
+    "stop": Event;
+}
+
+interface MediaRecorder extends EventTarget {
+    readonly audioBitsPerSecond: number;
+    readonly mimeType: string;
+    ondataavailable: ((this: MediaRecorder, ev: BlobEvent) => any) | null;
+    onerror: ((this: MediaRecorder, ev: Event) => any) | null;
+    onpause: ((this: MediaRecorder, ev: Event) => any) | null;
+    onresume: ((this: MediaRecorder, ev: Event) => any) | null;
+    onstart: ((this: MediaRecorder, ev: Event) => any) | null;
+    onstop: ((this: MediaRecorder, ev: Event) => any) | null;
+    readonly state: RecordingState;
+    readonly stream: MediaStream;
+    readonly videoBitsPerSecond: number;
+    pause(): void;
+    requestData(): void;
+    resume(): void;
+    start(timeslice?: number): void;
+    stop(): void;
+    addEventListener<K extends keyof MediaRecorderEventMap>(type: K, listener: (this: MediaRecorder, ev: MediaRecorderEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
+    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
+    removeEventListener<K extends keyof MediaRecorderEventMap>(type: K, listener: (this: MediaRecorder, ev: MediaRecorderEventMap[K]) => any, options?: boolean | EventListenerOptions): void;
+    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;
+}
+
+declare var MediaRecorder: {
+    prototype: MediaRecorder;
+    new(stream: MediaStream, options?: MediaRecorderOptions): MediaRecorder;
+    isTypeSupported(type: string): boolean;
+};
+
+interface MediaRecorderErrorEvent extends Event {
+    readonly error: DOMException;
+}
+
+declare var MediaRecorderErrorEvent: {
+    prototype: MediaRecorderErrorEvent;
+    new(type: string, eventInitDict: MediaRecorderErrorEventInit): MediaRecorderErrorEvent;
+};
+
+interface MediaSession {
+    metadata: MediaMetadata | null;
+    playbackState: MediaSessionPlaybackState;
+    setActionHandler(action: MediaSessionAction, handler: MediaSessionActionHandler | null): void;
+    setPositionState(state?: MediaPositionState): void;
+}
+
+declare var MediaSession: {
+    prototype: MediaSession;
+    new(): MediaSession;
+};
+
 interface MediaSourceEventMap {
     "sourceclose": Event;
     "sourceended": Event;
@@ -10236,36 +10063,6 @@
     new(context: AudioContext, options: MediaStreamAudioSourceOptions): MediaStreamAudioSourceNode;
 };
 
-interface MediaStreamError {
-    readonly constraintName: string | null;
-    readonly message: string | null;
-    readonly name: string;
-}
-
-declare var MediaStreamError: {
-    prototype: MediaStreamError;
-    new(): MediaStreamError;
-};
-
-interface MediaStreamErrorEvent extends Event {
-    readonly error: MediaStreamError | null;
-}
-
-declare var MediaStreamErrorEvent: {
-    prototype: MediaStreamErrorEvent;
-    new(typeArg: string, eventInitDict?: MediaStreamErrorEventInit): MediaStreamErrorEvent;
-};
-
-/** Events that occurs in relation to a MediaStream. Two events of this type can be thrown: addstream and removestream. */
-interface MediaStreamEvent extends Event {
-    readonly stream: MediaStream | null;
-}
-
-declare var MediaStreamEvent: {
-    prototype: MediaStreamEvent;
-    new(type: string, eventInitDict: MediaStreamEventInit): MediaStreamEvent;
-};
-
 interface MediaStreamTrackEventMap {
     "ended": Event;
     "mute": Event;
@@ -10274,6 +10071,7 @@
 
 /** A single media track within a stream; typically, these are audio or video tracks, but other track types may exist as well. */
 interface MediaStreamTrack extends EventTarget {
+    contentHint: string;
     enabled: boolean;
     readonly id: string;
     readonly kind: string;
@@ -10300,14 +10098,6 @@
     new(): MediaStreamTrack;
 };
 
-interface MediaStreamTrackAudioSourceNode extends AudioNode {
-}
-
-declare var MediaStreamTrackAudioSourceNode: {
-    prototype: MediaStreamTrackAudioSourceNode;
-    new(context: AudioContext, options: MediaStreamTrackAudioSourceOptions): MediaStreamTrackAudioSourceNode;
-};
-
 /** Events which indicate that a MediaStream has had tracks added to or removed from the stream through calls to Media Stream API methods. These events are sent to the stream when these changes occur. */
 interface MediaStreamTrackEvent extends Event {
     readonly track: MediaStreamTrack;
@@ -10357,6 +10147,8 @@
      * Returns the WindowProxy of the source window, for cross-document messaging, and the MessagePort being attached, in the connect event fired at SharedWorkerGlobalScope objects.
      */
     readonly source: MessageEventSource | null;
+    /** @deprecated */
+    initMessageEvent(type: string, bubbles?: boolean, cancelable?: boolean, data?: any, origin?: string, lastEventId?: string, source?: MessageEventSource | null, ports?: MessagePort[]): void;
 }
 
 declare var MessageEvent: {
@@ -10399,39 +10191,54 @@
     new(): MessagePort;
 };
 
-/** Provides contains information about a MIME type associated with a particular plugin. NavigatorPlugins.mimeTypes returns an array of this object. */
+/**
+ * Provides contains information about a MIME type associated with a particular plugin. NavigatorPlugins.mimeTypes returns an array of this object.
+ * @deprecated
+ */
 interface MimeType {
     /**
      * Returns the MIME type's description.
+     * @deprecated
      */
     readonly description: string;
     /**
      * Returns the Plugin object that implements this MIME type.
+     * @deprecated
      */
     readonly enabledPlugin: Plugin;
     /**
      * Returns the MIME type's typical file extensions, in a comma-separated list.
+     * @deprecated
      */
     readonly suffixes: string;
     /**
      * Returns the MIME type.
+     * @deprecated
      */
     readonly type: string;
 }
 
+/** @deprecated */
 declare var MimeType: {
     prototype: MimeType;
     new(): MimeType;
 };
 
-/** Returns an array of MimeType instances, each of which contains information about a supported browser plugins. This object is returned by NavigatorPlugins.mimeTypes. */
+/**
+ * Returns an array of MimeType instances, each of which contains information about a supported browser plugins. This object is returned by NavigatorPlugins.mimeTypes.
+ * @deprecated
+ */
 interface MimeTypeArray {
+    /** @deprecated */
     readonly length: number;
+    /** @deprecated */
     item(index: number): MimeType | null;
+    /** @deprecated */
     namedItem(name: string): MimeType | null;
     [index: number]: MimeType;
 }
 
+/** @deprecated */
 declare var MimeTypeArray: {
     prototype: MimeTypeArray;
     new(): MimeTypeArray;
@@ -10459,6 +10266,7 @@
     readonly x: number;
     readonly y: number;
     getModifierState(keyArg: string): boolean;
+    /** @deprecated */
     initMouseEvent(typeArg: string, canBubbleArg: boolean, cancelableArg: boolean, viewArg: Window, detailArg: number, screenXArg: number, screenYArg: number, clientXArg: number, clientYArg: number, ctrlKeyArg: boolean, altKeyArg: boolean, shiftKeyArg: boolean, metaKeyArg: boolean, buttonArg: number, relatedTargetArg: EventTarget | null): void;
 }
 
@@ -10467,20 +10275,29 @@
     new(type: string, eventInitDict?: MouseEventInit): MouseEvent;
 };
 
-/** Provides event properties that are specific to modifications to the Document Object Model (DOM) hierarchy and nodes.
- * @deprecated DOM4 [DOM] provides a new mechanism using a MutationObserver interface which addresses the use cases that mutation events solve, but in a more performant manner. Thus, this specification describes mutation events for reference and completeness of legacy behavior, but deprecates the use of the MutationEvent interface. */
+/**
+ * Provides event properties that are specific to modifications to the Document Object Model (DOM) hierarchy and nodes.
+ * @deprecated DOM4 [DOM] provides a new mechanism using a MutationObserver interface which addresses the use cases that mutation events solve, but in a more performant manner. Thus, this specification describes mutation events for reference and completeness of legacy behavior, but deprecates the use of the MutationEvent interface.
+ */
 interface MutationEvent extends Event {
+    /** @deprecated */
     readonly attrChange: number;
+    /** @deprecated */
     readonly attrName: string;
+    /** @deprecated */
     readonly newValue: string;
+    /** @deprecated */
     readonly prevValue: string;
-    readonly relatedNode: Node;
-    initMutationEvent(typeArg: string, canBubbleArg: boolean, cancelableArg: boolean, relatedNodeArg: Node, prevValueArg: string, newValueArg: string, attrNameArg: string, attrChangeArg: number): void;
+    /** @deprecated */
+    readonly relatedNode: Node | null;
+    /** @deprecated */
+    initMutationEvent(typeArg: string, bubblesArg?: boolean, cancelableArg?: boolean, relatedNodeArg?: Node | null, prevValueArg?: string, newValueArg?: string, attrNameArg?: string, attrChangeArg?: number): void;
     readonly ADDITION: number;
     readonly MODIFICATION: number;
     readonly REMOVAL: number;
 }
 
+/** @deprecated */
 declare var MutationEvent: {
     prototype: MutationEvent;
     new(): MutationEvent;
@@ -10575,41 +10392,24 @@
     new(): NamedNodeMap;
 };
 
-interface NavigationPreloadManager {
-    disable(): Promise<void>;
-    enable(): Promise<void>;
-    getState(): Promise<NavigationPreloadState>;
-    setHeaderValue(value: string): Promise<void>;
-}
-
-declare var NavigationPreloadManager: {
-    prototype: NavigationPreloadManager;
-    new(): NavigationPreloadManager;
-};
-
 /** The state and the identity of the user agent. It allows scripts to query it and to register themselves to carry on some activities. */
-interface Navigator extends MSFileSaver, MSNavigatorDoNotTrack, NavigatorAutomationInformation, NavigatorBeacon, NavigatorConcurrentHardware, NavigatorContentUtils, NavigatorCookies, NavigatorID, NavigatorLanguage, NavigatorOnLine, NavigatorPlugins, NavigatorStorage {
-    readonly activeVRDisplays: ReadonlyArray<VRDisplay>;
+interface Navigator extends NavigatorAutomationInformation, NavigatorConcurrentHardware, NavigatorContentUtils, NavigatorCookies, NavigatorID, NavigatorLanguage, NavigatorNetworkInformation, NavigatorOnLine, NavigatorPlugins, NavigatorStorage {
     readonly clipboard: Clipboard;
     readonly credentials: CredentialsContainer;
     readonly doNotTrack: string | null;
     readonly geolocation: Geolocation;
     readonly maxTouchPoints: number;
+    readonly mediaCapabilities: MediaCapabilities;
     readonly mediaDevices: MediaDevices;
-    readonly msManipulationViewsEnabled: boolean;
-    readonly msMaxTouchPoints: number;
-    readonly msPointerEnabled: boolean;
+    readonly mediaSession: MediaSession;
     readonly permissions: Permissions;
     readonly pointerEnabled: boolean;
     readonly serviceWorker: ServiceWorkerContainer;
     getGamepads(): (Gamepad | null)[];
-    getUserMedia(constraints: MediaStreamConstraints, successCallback: NavigatorUserMediaSuccessCallback, errorCallback: NavigatorUserMediaErrorCallback): void;
-    getVRDisplays(): Promise<VRDisplay[]>;
-    msLaunchUri(uri: string, successCallback?: MSLaunchUriCallback, noHandlerCallback?: MSLaunchUriCallback): void;
     requestMediaKeySystemAccess(keySystem: string, supportedConfigurations: MediaKeySystemConfiguration[]): Promise<MediaKeySystemAccess>;
-    sendBeacon(url: string, data?: BodyInit | null): boolean;
+    sendBeacon(url: string | URL, data?: BodyInit | null): boolean;
     share(data?: ShareData): Promise<void>;
-    vibrate(pattern: number | number[]): boolean;
+    vibrate(pattern: VibratePattern): boolean;
 }
 
 declare var Navigator: {
@@ -10621,17 +10421,12 @@
     readonly webdriver: boolean;
 }
 
-interface NavigatorBeacon {
-    sendBeacon(url: string, data?: Blob | Int8Array | Int16Array | Int32Array | Uint8Array | Uint16Array | Uint32Array | Uint8ClampedArray | Float32Array | Float64Array | DataView | ArrayBuffer | FormData | string | null): boolean;
-}
-
 interface NavigatorConcurrentHardware {
     readonly hardwareConcurrency: number;
 }
 
 interface NavigatorContentUtils {
-    registerProtocolHandler(scheme: string, url: string, title: string): void;
-    unregisterProtocolHandler(scheme: string, url: string): void;
+    registerProtocolHandler(scheme: string, url: string | URL): void;
 }
 
 interface NavigatorCookies {
@@ -10639,14 +10434,21 @@
 }
 
 interface NavigatorID {
+    /** @deprecated */
     readonly appCodeName: string;
+    /** @deprecated */
     readonly appName: string;
+    /** @deprecated */
     readonly appVersion: string;
+    /** @deprecated */
     readonly platform: string;
+    /** @deprecated */
     readonly product: string;
+    /** @deprecated */
     readonly productSub: string;
     readonly userAgent: string;
     readonly vendor: string;
+    /** @deprecated */
     readonly vendorSub: string;
 }
 
@@ -10655,13 +10457,20 @@
     readonly languages: ReadonlyArray<string>;
 }
 
+interface NavigatorNetworkInformation {
+    readonly connection: NetworkInformation;
+}
+
 interface NavigatorOnLine {
     readonly onLine: boolean;
 }
 
 interface NavigatorPlugins {
+    /** @deprecated */
     readonly mimeTypes: MimeTypeArray;
+    /** @deprecated */
     readonly plugins: PluginArray;
+    /** @deprecated */
     javaEnabled(): boolean;
 }
 
@@ -10669,6 +10478,15 @@
     readonly storage: StorageManager;
 }
 
+interface NetworkInformation extends EventTarget {
+    readonly type: ConnectionType;
+}
+
+declare var NetworkInformation: {
+    prototype: NetworkInformation;
+    new(): NetworkInformation;
+};
+
 /** Node is an interface from which a number of DOM API object types inherit. It allows those types to be treated similarly; for example, inheriting the same set of methods, or being tested in the same way. */
 interface Node extends EventTarget {
     /**
@@ -10691,8 +10509,6 @@
      * Returns the last child.
      */
     readonly lastChild: ChildNode | null;
-    /** @deprecated */
-    readonly namespaceURI: string | null;
     /**
      * Returns the next sibling.
      */
@@ -10717,13 +10533,13 @@
     /**
      * Returns the parent.
      */
-    readonly parentNode: Node & ParentNode | null;
+    readonly parentNode: ParentNode | null;
     /**
      * Returns the previous sibling.
      */
     readonly previousSibling: ChildNode | null;
     textContent: string | null;
-    appendChild<T extends Node>(newChild: T): T;
+    appendChild<T extends Node>(node: T): T;
     /**
      * Returns a copy of node. If deep is true, the copy also includes the node's descendants.
      */
@@ -10744,7 +10560,7 @@
      * Returns whether node has children.
      */
     hasChildNodes(): boolean;
-    insertBefore<T extends Node>(newChild: T, refChild: Node | null): T;
+    insertBefore<T extends Node>(node: T, child: Node | null): T;
     isDefaultNamespace(namespace: string | null): boolean;
     /**
      * Returns whether node and otherNode have the same properties.
@@ -10757,8 +10573,8 @@
      * Removes empty exclusive Text nodes and concatenates the data of remaining contiguous exclusive Text nodes into the first of their nodes.
      */
     normalize(): void;
-    removeChild<T extends Node>(oldChild: T): T;
-    replaceChild<T extends Node>(newChild: Node, oldChild: T): T;
+    removeChild<T extends Node>(child: T): T;
+    replaceChild<T extends Node>(node: Node, child: T): T;
     readonly ATTRIBUTE_NODE: number;
     /**
      * node is a CDATASection node.
@@ -10880,30 +10696,6 @@
     readonly TEXT_NODE: number;
 };
 
-/** An object used to filter the nodes in a NodeIterator or TreeWalker. They don't know anything about the DOM or how to traverse nodes; they just know how to evaluate a single node against the provided filter. */
-interface NodeFilter {
-    acceptNode(node: Node): number;
-}
-
-declare var NodeFilter: {
-    readonly FILTER_ACCEPT: number;
-    readonly FILTER_REJECT: number;
-    readonly FILTER_SKIP: number;
-    readonly SHOW_ALL: number;
-    readonly SHOW_ATTRIBUTE: number;
-    readonly SHOW_CDATA_SECTION: number;
-    readonly SHOW_COMMENT: number;
-    readonly SHOW_DOCUMENT: number;
-    readonly SHOW_DOCUMENT_FRAGMENT: number;
-    readonly SHOW_DOCUMENT_TYPE: number;
-    readonly SHOW_ELEMENT: number;
-    readonly SHOW_ENTITY: number;
-    readonly SHOW_ENTITY_REFERENCE: number;
-    readonly SHOW_NOTATION: number;
-    readonly SHOW_PROCESSING_INSTRUCTION: number;
-    readonly SHOW_TEXT: number;
-};
-
 /** An iterator over the members of a list of the nodes in a subtree of the DOM. The nodes will be returned in document order. */
 interface NodeIterator {
     readonly filter: NodeFilter | null;
@@ -10911,6 +10703,7 @@
     readonly referenceNode: Node;
     readonly root: Node;
     readonly whatToShow: number;
+    /** @deprecated */
     detach(): void;
     nextNode(): Node | null;
     previousNode(): Node | null;
@@ -10983,25 +10776,17 @@
 
 /** This Notifications API interface is used to configure and display desktop notifications to the user. */
 interface Notification extends EventTarget {
-    readonly actions: ReadonlyArray<NotificationAction>;
-    readonly badge: string;
     readonly body: string;
     readonly data: any;
     readonly dir: NotificationDirection;
     readonly icon: string;
-    readonly image: string;
     readonly lang: string;
     onclick: ((this: Notification, ev: Event) => any) | null;
     onclose: ((this: Notification, ev: Event) => any) | null;
     onerror: ((this: Notification, ev: Event) => any) | null;
     onshow: ((this: Notification, ev: Event) => any) | null;
-    readonly renotify: boolean;
-    readonly requireInteraction: boolean;
-    readonly silent: boolean;
     readonly tag: string;
-    readonly timestamp: number;
     readonly title: string;
-    readonly vibrate: ReadonlyArray<number>;
     close(): void;
     addEventListener<K extends keyof NotificationEventMap>(type: K, listener: (this: Notification, ev: NotificationEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
     addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
@@ -11012,7 +10797,6 @@
 declare var Notification: {
     prototype: Notification;
     new(title: string, options?: NotificationOptions): Notification;
-    readonly maxActions: number;
     readonly permission: NotificationPermission;
     requestPermission(deprecatedCallback?: NotificationPermissionCallback): Promise<NotificationPermission>;
 };
@@ -11021,6 +10805,9 @@
 interface OES_element_index_uint {
 }
 
+interface OES_fbo_render_mipmap {
+}
+
 /** The OES_standard_derivatives extension is part of the WebGL API and adds the GLSL derivative functions dFdx, dFdy, and fwidth. */
 interface OES_standard_derivatives {
     readonly FRAGMENT_SHADER_DERIVATIVE_HINT_OES: GLenum;
@@ -11051,6 +10838,14 @@
     readonly VERTEX_ARRAY_BINDING_OES: GLenum;
 }
 
+interface OVR_multiview2 {
+    framebufferTextureMultiviewOVR(target: GLenum, attachment: GLenum, texture: WebGLTexture | null, level: GLint, baseViewIndex: GLint, numViews: GLsizei): void;
+    readonly FRAMEBUFFER_ATTACHMENT_TEXTURE_BASE_VIEW_INDEX_OVR: GLenum;
+    readonly FRAMEBUFFER_ATTACHMENT_TEXTURE_NUM_VIEWS_OVR: GLenum;
+    readonly FRAMEBUFFER_INCOMPLETE_VIEW_TARGETS_OVR: GLenum;
+    readonly MAX_VIEWS_OVR: GLenum;
+}
+
 /** The Web Audio API OfflineAudioCompletionEvent interface represents events that occur when the processing of an OfflineAudioContext is terminated. The complete event implements this interface. */
 interface OfflineAudioCompletionEvent extends Event {
     readonly renderedBuffer: AudioBuffer;
@@ -11084,58 +10879,6 @@
     new(numberOfChannels: number, length: number, sampleRate: number): OfflineAudioContext;
 };
 
-interface OffscreenCanvas extends EventTarget {
-    /**
-     * These attributes return the dimensions of the OffscreenCanvas object's bitmap.
-     *
-     * They can be set, to replace the bitmap with a new, transparent black bitmap of the specified dimensions (effectively resizing it).
-     */
-    height: number;
-    /**
-     * These attributes return the dimensions of the OffscreenCanvas object's bitmap.
-     *
-     * They can be set, to replace the bitmap with a new, transparent black bitmap of the specified dimensions (effectively resizing it).
-     */
-    width: number;
-    /**
-     * Returns a promise that will fulfill with a new Blob object representing a file containing the image in the OffscreenCanvas object.
-     *
-     * The argument, if provided, is a dictionary that controls the encoding options of the image file to be created. The type field specifies the file format and has a default value of "image/png"; that type is also used if the requested type isn't supported. If the image format supports variable quality (such as "image/jpeg"), then the quality field is a number in the range 0.0 to 1.0 inclusive indicating the desired quality level for the resulting image.
-     */
-    convertToBlob(options?: ImageEncodeOptions): Promise<Blob>;
-    /**
-     * Returns an object that exposes an API for drawing on the OffscreenCanvas object. contextId specifies the desired API: "2d", "bitmaprenderer", "webgl", or "webgl2". options is handled by that API.
-     *
-     * This specification defines the "2d" context below, which is similar but distinct from the "2d" context that is created from a canvas element. The WebGL specifications define the "webgl" and "webgl2" contexts. [WEBGL]
-     *
-     * Returns null if the canvas has already been initialized with another context type (e.g., trying to get a "2d" context after getting a "webgl" context).
-     */
-    getContext(contextId: "2d", options?: CanvasRenderingContext2DSettings): OffscreenCanvasRenderingContext2D | null;
-    getContext(contextId: "bitmaprenderer", options?: ImageBitmapRenderingContextSettings): ImageBitmapRenderingContext | null;
-    getContext(contextId: "webgl", options?: WebGLContextAttributes): WebGLRenderingContext | null;
-    getContext(contextId: "webgl2", options?: WebGLContextAttributes): WebGL2RenderingContext | null;
-    getContext(contextId: OffscreenRenderingContextId, options?: any): OffscreenRenderingContext | null;
-    /**
-     * Returns a newly created ImageBitmap object with the image in the OffscreenCanvas object. The image in the OffscreenCanvas object is replaced with a new blank image.
-     */
-    transferToImageBitmap(): ImageBitmap;
-}
-
-declare var OffscreenCanvas: {
-    prototype: OffscreenCanvas;
-    new(width: number, height: number): OffscreenCanvas;
-};
-
-interface OffscreenCanvasRenderingContext2D extends CanvasCompositing, CanvasDrawImage, CanvasDrawPath, CanvasFillStrokeStyles, CanvasFilters, CanvasImageData, CanvasImageSmoothing, CanvasPath, CanvasPathDrawingStyles, CanvasRect, CanvasShadowStyles, CanvasState, CanvasText, CanvasTextDrawingStyles, CanvasTransform {
-    readonly canvas: OffscreenCanvas;
-    commit(): void;
-}
-
-declare var OffscreenCanvasRenderingContext2D: {
-    prototype: OffscreenCanvasRenderingContext2D;
-    new(): OffscreenCanvasRenderingContext2D;
-};
-
 /** The OscillatorNode interface represents a periodic waveform, such as a sine wave. It is an AudioScheduledSourceNode audio-processing module that causes a specified frequency of a given wave to be created—in effect, a constant tone. */
 interface OscillatorNode extends AudioScheduledSourceNode {
     readonly detune: AudioParam;
@@ -11154,29 +10897,12 @@
 };
 
 interface OverconstrainedError extends Error {
-    constraint: string;
+    readonly constraint: string;
 }
 
 declare var OverconstrainedError: {
     prototype: OverconstrainedError;
-    new(): OverconstrainedError;
-};
-
-interface OverflowEvent extends UIEvent {
-    readonly horizontalOverflow: boolean;
-    readonly orient: number;
-    readonly verticalOverflow: boolean;
-    readonly BOTH: number;
-    readonly HORIZONTAL: number;
-    readonly VERTICAL: number;
-}
-
-declare var OverflowEvent: {
-    prototype: OverflowEvent;
-    new(): OverflowEvent;
-    readonly BOTH: number;
-    readonly HORIZONTAL: number;
-    readonly VERTICAL: number;
+    new(constraint: string, message?: string): OverconstrainedError;
 };
 
 /** The PageTransitionEvent is fired when a document is being loaded or unloaded. */
@@ -11188,8 +10914,7 @@
      *
      * Things that can cause the page to be unsalvageable include:
      *
-     * Listening for beforeunload events
-     * Listening for unload events
+     * The user agent decided to not keep the Document alive in a session history entry after unload
      * Having iframes that are not salvageable
      * Active WebSocket objects
      * Aborting a Document
@@ -11229,7 +10954,7 @@
     new(context: BaseAudioContext, options?: PannerOptions): PannerNode;
 };
 
-interface ParentNode {
+interface ParentNode extends Node {
     readonly childElementCount: number;
     /**
      * Returns the child elements.
@@ -11267,6 +10992,12 @@
     querySelectorAll<K extends keyof HTMLElementTagNameMap>(selectors: K): NodeListOf<HTMLElementTagNameMap[K]>;
     querySelectorAll<K extends keyof SVGElementTagNameMap>(selectors: K): NodeListOf<SVGElementTagNameMap[K]>;
     querySelectorAll<E extends Element = Element>(selectors: string): NodeListOf<E>;
+    /**
+     * Replace all children of node with nodes, while replacing strings in nodes with equivalent Text nodes.
+     *
+     * Throws a "HierarchyRequestError" DOMException if the constraints of the node tree are violated.
+     */
+    replaceChildren(...nodes: (Node | string)[]): void;
 }
 
 /** This Canvas 2D API interface is used to declare a path that can then be used on a CanvasRenderingContext2D object. The path methods of the CanvasRenderingContext2D interface are also present on this interface, which gives you the convenience of being able to retain and replay your path whenever desired. */
@@ -11282,21 +11013,36 @@
     new(path?: Path2D | string): Path2D;
 };
 
-/** This Payment Request API interface is used to store shipping or payment address information. */
+/**
+ * This Payment Request API interface is used to store shipping or payment address information.
+ * @deprecated
+ */
 interface PaymentAddress {
+    /** @deprecated */
     readonly addressLine: ReadonlyArray<string>;
+    /** @deprecated */
     readonly city: string;
+    /** @deprecated */
     readonly country: string;
+    /** @deprecated */
     readonly dependentLocality: string;
+    /** @deprecated */
     readonly organization: string;
+    /** @deprecated */
     readonly phone: string;
+    /** @deprecated */
     readonly postalCode: string;
+    /** @deprecated */
     readonly recipient: string;
+    /** @deprecated */
     readonly region: string;
+    /** @deprecated */
     readonly sortingCode: string;
+    /** @deprecated */
     toJSON(): any;
 }
 
+/** @deprecated */
 declare var PaymentAddress: {
     prototype: PaymentAddress;
     new(): PaymentAddress;
@@ -11314,22 +11060,15 @@
 
 interface PaymentRequestEventMap {
     "paymentmethodchange": Event;
-    "shippingaddresschange": Event;
-    "shippingoptionchange": Event;
 }
 
 /** This Payment Request API interface is the primary access point into the API, and lets web content and apps accept payments from the end user. */
 interface PaymentRequest extends EventTarget {
     readonly id: string;
     onpaymentmethodchange: ((this: PaymentRequest, ev: Event) => any) | null;
-    onshippingaddresschange: ((this: PaymentRequest, ev: Event) => any) | null;
-    onshippingoptionchange: ((this: PaymentRequest, ev: Event) => any) | null;
-    readonly shippingAddress: PaymentAddress | null;
-    readonly shippingOption: string | null;
-    readonly shippingType: PaymentShippingType | null;
     abort(): Promise<void>;
     canMakePayment(): Promise<boolean>;
-    show(detailsPromise: PaymentDetailsUpdate | Promise<PaymentDetailsUpdate>): Promise<PaymentResponse>;
+    show(detailsPromise?: PaymentDetailsUpdate | PromiseLike<PaymentDetailsUpdate>): Promise<PaymentResponse>;
     addEventListener<K extends keyof PaymentRequestEventMap>(type: K, listener: (this: PaymentRequest, ev: PaymentRequestEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
     addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
     removeEventListener<K extends keyof PaymentRequestEventMap>(type: K, listener: (this: PaymentRequest, ev: PaymentRequestEventMap[K]) => any, options?: boolean | EventListenerOptions): void;
@@ -11338,12 +11077,12 @@
 
 declare var PaymentRequest: {
     prototype: PaymentRequest;
-    new(methodData: PaymentMethodData[], details: PaymentDetailsInit, options?: PaymentOptions): PaymentRequest;
+    new(methodData: PaymentMethodData[], details: PaymentDetailsInit): PaymentRequest;
 };
 
 /** This Payment Request API interface enables a web page to update the details of a PaymentRequest in response to a user action. */
 interface PaymentRequestUpdateEvent extends Event {
-    updateWith(detailsPromise: PaymentDetailsUpdate | Promise<PaymentDetailsUpdate>): void;
+    updateWith(detailsPromise: PaymentDetailsUpdate | PromiseLike<PaymentDetailsUpdate>): void;
 }
 
 declare var PaymentRequestUpdateEvent: {
@@ -11351,28 +11090,14 @@
     new(type: string, eventInitDict?: PaymentRequestUpdateEventInit): PaymentRequestUpdateEvent;
 };
 
-interface PaymentResponseEventMap {
-    "payerdetailchange": Event;
-}
-
 /** This Payment Request API interface is returned after a user selects a payment method and approves a payment request. */
 interface PaymentResponse extends EventTarget {
     readonly details: any;
     readonly methodName: string;
-    onpayerdetailchange: ((this: PaymentResponse, ev: Event) => any) | null;
-    readonly payerEmail: string | null;
-    readonly payerName: string | null;
-    readonly payerPhone: string | null;
     readonly requestId: string;
-    readonly shippingAddress: PaymentAddress | null;
-    readonly shippingOption: string | null;
     complete(result?: PaymentComplete): Promise<void>;
     retry(errorFields?: PaymentValidationErrors): Promise<void>;
     toJSON(): any;
-    addEventListener<K extends keyof PaymentResponseEventMap>(type: K, listener: (this: PaymentResponse, ev: PaymentResponseEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
-    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
-    removeEventListener<K extends keyof PaymentResponseEventMap>(type: K, listener: (this: PaymentResponse, ev: PaymentResponseEventMap[K]) => any, options?: boolean | EventListenerOptions): void;
-    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;
 }
 
 declare var PaymentResponse: {
@@ -11380,35 +11105,6 @@
     new(): PaymentResponse;
 };
 
-interface PerfWidgetExternal {
-    readonly activeNetworkRequestCount: number;
-    readonly averageFrameTime: number;
-    readonly averagePaintTime: number;
-    readonly extraInformationEnabled: boolean;
-    readonly independentRenderingEnabled: boolean;
-    readonly irDisablingContentString: string;
-    readonly irStatusAvailable: boolean;
-    readonly maxCpuSpeed: number;
-    readonly paintRequestsPerSecond: number;
-    readonly performanceCounter: number;
-    readonly performanceCounterFrequency: number;
-    addEventListener(eventType: string, callback: Function): void;
-    getMemoryUsage(): number;
-    getProcessCpuUsage(): number;
-    getRecentCpuUsage(last: number | null): any;
-    getRecentFrames(last: number | null): any;
-    getRecentMemoryUsage(last: number | null): any;
-    getRecentPaintRequests(last: number | null): any;
-    removeEventListener(eventType: string, callback: Function): void;
-    repositionWindow(x: number, y: number): void;
-    resizeWindow(width: number, height: number): void;
-}
-
-declare var PerfWidgetExternal: {
-    prototype: PerfWidgetExternal;
-    new(): PerfWidgetExternal;
-};
-
 interface PerformanceEventMap {
     "resourcetimingbufferfull": Event;
 }
@@ -11418,7 +11114,7 @@
     /** @deprecated */
     readonly navigation: PerformanceNavigation;
     onresourcetimingbufferfull: ((this: Performance, ev: Event) => any) | null;
-    readonly timeOrigin: number;
+    readonly timeOrigin: DOMHighResTimeStamp;
     /** @deprecated */
     readonly timing: PerformanceTiming;
     clearMarks(markName?: string): void;
@@ -11427,9 +11123,9 @@
     getEntries(): PerformanceEntryList;
     getEntriesByName(name: string, type?: string): PerformanceEntryList;
     getEntriesByType(type: string): PerformanceEntryList;
-    mark(markName: string): void;
-    measure(measureName: string, startMark?: string, endMark?: string): void;
-    now(): number;
+    mark(markName: string, markOptions?: PerformanceMarkOptions): PerformanceMark;
+    measure(measureName: string, startOrMeasureOptions?: string | PerformanceMeasureOptions, endMark?: string): PerformanceMeasure;
+    now(): DOMHighResTimeStamp;
     setResourceTimingBufferSize(maxSize: number): void;
     toJSON(): any;
     addEventListener<K extends keyof PerformanceEventMap>(type: K, listener: (this: Performance, ev: PerformanceEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
@@ -11445,10 +11141,10 @@
 
 /** Encapsulates a single performance metric that is part of the performance timeline. A performance entry can be directly created by making a performance mark or measure (for example by calling the mark() method) at an explicit point in an application. Performance entries are also created in indirect ways such as loading a resource (such as an image). */
 interface PerformanceEntry {
-    readonly duration: number;
+    readonly duration: DOMHighResTimeStamp;
     readonly entryType: string;
     readonly name: string;
-    readonly startTime: number;
+    readonly startTime: DOMHighResTimeStamp;
     toJSON(): any;
 }
 
@@ -11457,17 +11153,31 @@
     new(): PerformanceEntry;
 };
 
+interface PerformanceEventTiming extends PerformanceEntry {
+    readonly cancelable: boolean;
+    readonly processingEnd: DOMHighResTimeStamp;
+    readonly processingStart: DOMHighResTimeStamp;
+    readonly target: Node | null;
+}
+
+declare var PerformanceEventTiming: {
+    prototype: PerformanceEventTiming;
+    new(): PerformanceEventTiming;
+};
+
 /** PerformanceMark is an abstract interface for PerformanceEntry objects with an entryType of "mark". Entries of this type are created by calling performance.mark() to add a named DOMHighResTimeStamp (the mark) to the browser's performance timeline. */
 interface PerformanceMark extends PerformanceEntry {
+    readonly detail: any;
 }
 
 declare var PerformanceMark: {
     prototype: PerformanceMark;
-    new(): PerformanceMark;
+    new(markName: string, markOptions?: PerformanceMarkOptions): PerformanceMark;
 };
 
 /** PerformanceMeasure is an abstract interface for PerformanceEntry objects with an entryType of "measure". Entries of this type are created by calling performance.measure() to add a named DOMHighResTimeStamp (the measure) between two marks to the browser's performance timeline. */
 interface PerformanceMeasure extends PerformanceEntry {
+    readonly detail: any;
 }
 
 declare var PerformanceMeasure: {
@@ -11475,12 +11185,16 @@
     new(): PerformanceMeasure;
 };
 
-/** The legacy PerformanceNavigation interface represents information about how the navigation to the current document was done.
+/**
+ * The legacy PerformanceNavigation interface represents information about how the navigation to the current document was done.
  * @deprecated This interface is deprecated in the Navigation Timing Level 2 specification. Please use the PerformanceNavigationTiming interface instead.
  */
 interface PerformanceNavigation {
+    /** @deprecated */
     readonly redirectCount: number;
+    /** @deprecated */
     readonly type: number;
+    /** @deprecated */
     toJSON(): any;
     readonly TYPE_BACK_FORWARD: number;
     readonly TYPE_NAVIGATE: number;
@@ -11488,6 +11202,7 @@
     readonly TYPE_RESERVED: number;
 }
 
+/** @deprecated */
 declare var PerformanceNavigation: {
     prototype: PerformanceNavigation;
     new(): PerformanceNavigation;
@@ -11499,16 +11214,16 @@
 
 /** Provides methods and properties to store and retrieve metrics regarding the browser's document navigation events. For example, this interface can be used to determine how much time it takes to load or unload a document. */
 interface PerformanceNavigationTiming extends PerformanceResourceTiming {
-    readonly domComplete: number;
-    readonly domContentLoadedEventEnd: number;
-    readonly domContentLoadedEventStart: number;
-    readonly domInteractive: number;
-    readonly loadEventEnd: number;
-    readonly loadEventStart: number;
+    readonly domComplete: DOMHighResTimeStamp;
+    readonly domContentLoadedEventEnd: DOMHighResTimeStamp;
+    readonly domContentLoadedEventStart: DOMHighResTimeStamp;
+    readonly domInteractive: DOMHighResTimeStamp;
+    readonly loadEventEnd: DOMHighResTimeStamp;
+    readonly loadEventStart: DOMHighResTimeStamp;
     readonly redirectCount: number;
     readonly type: NavigationType;
-    readonly unloadEventEnd: number;
-    readonly unloadEventStart: number;
+    readonly unloadEventEnd: DOMHighResTimeStamp;
+    readonly unloadEventStart: DOMHighResTimeStamp;
     toJSON(): any;
 }
 
@@ -11540,25 +11255,34 @@
     new(): PerformanceObserverEntryList;
 };
 
+interface PerformancePaintTiming extends PerformanceEntry {
+}
+
+declare var PerformancePaintTiming: {
+    prototype: PerformancePaintTiming;
+    new(): PerformancePaintTiming;
+};
+
 /** Enables retrieval and analysis of detailed network timing data regarding the loading of an application's resources. An application can use the timing metrics to determine, for example, the length of time it takes to fetch a specific resource, such as an XMLHttpRequest, <SVG>, image, or script. */
 interface PerformanceResourceTiming extends PerformanceEntry {
-    readonly connectEnd: number;
-    readonly connectStart: number;
+    readonly connectEnd: DOMHighResTimeStamp;
+    readonly connectStart: DOMHighResTimeStamp;
     readonly decodedBodySize: number;
-    readonly domainLookupEnd: number;
-    readonly domainLookupStart: number;
+    readonly domainLookupEnd: DOMHighResTimeStamp;
+    readonly domainLookupStart: DOMHighResTimeStamp;
     readonly encodedBodySize: number;
-    readonly fetchStart: number;
+    readonly fetchStart: DOMHighResTimeStamp;
     readonly initiatorType: string;
     readonly nextHopProtocol: string;
-    readonly redirectEnd: number;
-    readonly redirectStart: number;
-    readonly requestStart: number;
-    readonly responseEnd: number;
-    readonly responseStart: number;
-    readonly secureConnectionStart: number;
+    readonly redirectEnd: DOMHighResTimeStamp;
+    readonly redirectStart: DOMHighResTimeStamp;
+    readonly requestStart: DOMHighResTimeStamp;
+    readonly responseEnd: DOMHighResTimeStamp;
+    readonly responseStart: DOMHighResTimeStamp;
+    readonly secureConnectionStart: DOMHighResTimeStamp;
+    readonly serverTiming: ReadonlyArray<PerformanceServerTiming>;
     readonly transferSize: number;
-    readonly workerStart: number;
+    readonly workerStart: DOMHighResTimeStamp;
     toJSON(): any;
 }
 
@@ -11567,34 +11291,70 @@
     new(): PerformanceResourceTiming;
 };
 
-/** A legacy interface kept for backwards compatibility and contains properties that offer performance timing information for various events which occur during the loading and use of the current page. You get a PerformanceTiming object describing your page using the window.performance.timing property.
- * @deprecated This interface is deprecated in the Navigation Timing Level 2 specification. Please use the PerformanceNavigationTiming interface instead.
- */
-interface PerformanceTiming {
-    readonly connectEnd: number;
-    readonly connectStart: number;
-    readonly domComplete: number;
-    readonly domContentLoadedEventEnd: number;
-    readonly domContentLoadedEventStart: number;
-    readonly domInteractive: number;
-    readonly domLoading: number;
-    readonly domainLookupEnd: number;
-    readonly domainLookupStart: number;
-    readonly fetchStart: number;
-    readonly loadEventEnd: number;
-    readonly loadEventStart: number;
-    readonly navigationStart: number;
-    readonly redirectEnd: number;
-    readonly redirectStart: number;
-    readonly requestStart: number;
-    readonly responseEnd: number;
-    readonly responseStart: number;
-    readonly secureConnectionStart: number;
-    readonly unloadEventEnd: number;
-    readonly unloadEventStart: number;
+interface PerformanceServerTiming {
+    readonly description: string;
+    readonly duration: DOMHighResTimeStamp;
+    readonly name: string;
     toJSON(): any;
 }
 
+declare var PerformanceServerTiming: {
+    prototype: PerformanceServerTiming;
+    new(): PerformanceServerTiming;
+};
+
+/**
+ * A legacy interface kept for backwards compatibility and contains properties that offer performance timing information for various events which occur during the loading and use of the current page. You get a PerformanceTiming object describing your page using the window.performance.timing property.
+ * @deprecated This interface is deprecated in the Navigation Timing Level 2 specification. Please use the PerformanceNavigationTiming interface instead.
+ */
+interface PerformanceTiming {
+    /** @deprecated */
+    readonly connectEnd: number;
+    /** @deprecated */
+    readonly connectStart: number;
+    /** @deprecated */
+    readonly domComplete: number;
+    /** @deprecated */
+    readonly domContentLoadedEventEnd: number;
+    /** @deprecated */
+    readonly domContentLoadedEventStart: number;
+    /** @deprecated */
+    readonly domInteractive: number;
+    /** @deprecated */
+    readonly domLoading: number;
+    /** @deprecated */
+    readonly domainLookupEnd: number;
+    /** @deprecated */
+    readonly domainLookupStart: number;
+    /** @deprecated */
+    readonly fetchStart: number;
+    /** @deprecated */
+    readonly loadEventEnd: number;
+    /** @deprecated */
+    readonly loadEventStart: number;
+    /** @deprecated */
+    readonly navigationStart: number;
+    /** @deprecated */
+    readonly redirectEnd: number;
+    /** @deprecated */
+    readonly redirectStart: number;
+    /** @deprecated */
+    readonly requestStart: number;
+    /** @deprecated */
+    readonly responseEnd: number;
+    /** @deprecated */
+    readonly responseStart: number;
+    /** @deprecated */
+    readonly secureConnectionStart: number;
+    /** @deprecated */
+    readonly unloadEventEnd: number;
+    /** @deprecated */
+    readonly unloadEventStart: number;
+    /** @deprecated */
+    toJSON(): any;
+}
+
+/** @deprecated */
 declare var PerformanceTiming: {
     prototype: PerformanceTiming;
     new(): PerformanceTiming;
@@ -11609,25 +11369,6 @@
     new(context: BaseAudioContext, options?: PeriodicWaveOptions): PeriodicWave;
 };
 
-interface PermissionRequest extends DeferredPermissionRequest {
-    readonly state: MSWebViewPermissionState;
-    defer(): void;
-}
-
-declare var PermissionRequest: {
-    prototype: PermissionRequest;
-    new(): PermissionRequest;
-};
-
-interface PermissionRequestedEvent extends Event {
-    readonly permissionRequest: PermissionRequest;
-}
-
-declare var PermissionRequestedEvent: {
-    prototype: PermissionRequestedEvent;
-    new(): PermissionRequestedEvent;
-};
-
 interface PermissionStatusEventMap {
     "change": Event;
 }
@@ -11647,7 +11388,7 @@
 };
 
 interface Permissions {
-    query(permissionDesc: PermissionDescriptor | DevicePermissionDescriptor | MidiPermissionDescriptor | PushPermissionDescriptor): Promise<PermissionStatus>;
+    query(permissionDesc: PermissionDescriptor): Promise<PermissionStatus>;
 }
 
 declare var Permissions: {
@@ -11655,46 +11396,83 @@
     new(): Permissions;
 };
 
-/** Provides information about a browser plugin. */
+interface PictureInPictureWindowEventMap {
+    "resize": Event;
+}
+
+interface PictureInPictureWindow extends EventTarget {
+    readonly height: number;
+    onresize: ((this: PictureInPictureWindow, ev: Event) => any) | null;
+    readonly width: number;
+    addEventListener<K extends keyof PictureInPictureWindowEventMap>(type: K, listener: (this: PictureInPictureWindow, ev: PictureInPictureWindowEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
+    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
+    removeEventListener<K extends keyof PictureInPictureWindowEventMap>(type: K, listener: (this: PictureInPictureWindow, ev: PictureInPictureWindowEventMap[K]) => any, options?: boolean | EventListenerOptions): void;
+    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;
+}
+
+declare var PictureInPictureWindow: {
+    prototype: PictureInPictureWindow;
+    new(): PictureInPictureWindow;
+};
+
+/**
+ * Provides information about a browser plugin.
+ * @deprecated
+ */
 interface Plugin {
     /**
      * Returns the plugin's description.
+     * @deprecated
      */
     readonly description: string;
     /**
      * Returns the plugin library's filename, if applicable on the current platform.
+     * @deprecated
      */
     readonly filename: string;
     /**
      * Returns the number of MIME types, represented by MimeType objects, supported by the plugin.
+     * @deprecated
      */
     readonly length: number;
     /**
      * Returns the plugin's name.
+     * @deprecated
      */
     readonly name: string;
     /**
      * Returns the specified MimeType object.
+     * @deprecated
      */
     item(index: number): MimeType | null;
+    /** @deprecated */
     namedItem(name: string): MimeType | null;
     [index: number]: MimeType;
 }
 
+/** @deprecated */
 declare var Plugin: {
     prototype: Plugin;
     new(): Plugin;
 };
 
-/** Used to store a list of Plugin objects describing the available plugins; it's returned by the window.navigator.plugins property. The PluginArray is not a JavaScript array, but has the length property and supports accessing individual items using bracket notation (plugins[2]), as well as via item(index) and namedItem("name") methods. */
+/**
+ * Used to store a list of Plugin objects describing the available plugins; it's returned by the window.navigator.plugins property. The PluginArray is not a JavaScript array, but has the length property and supports accessing individual items using bracket notation (plugins[2]), as well as via item(index) and namedItem("name") methods.
+ * @deprecated
+ */
 interface PluginArray {
+    /** @deprecated */
     readonly length: number;
+    /** @deprecated */
     item(index: number): Plugin | null;
+    /** @deprecated */
     namedItem(name: string): Plugin | null;
-    refresh(reload?: boolean): void;
+    /** @deprecated */
+    refresh(): void;
     [index: number]: Plugin;
 }
 
+/** @deprecated */
 declare var PluginArray: {
     prototype: PluginArray;
     new(): PluginArray;
@@ -11796,7 +11574,6 @@
 /** This Push API interface provides a subcription's URL endpoint and allows unsubscription from a push service. */
 interface PushSubscription {
     readonly endpoint: string;
-    readonly expirationTime: number | null;
     readonly options: PushSubscriptionOptions;
     getKey(name: PushEncryptionKeyName): ArrayBuffer | null;
     toJSON(): PushSubscriptionJSON;
@@ -11810,7 +11587,6 @@
 
 interface PushSubscriptionOptions {
     readonly applicationServerKey: ArrayBuffer | null;
-    readonly userVisibleOnly: boolean;
 }
 
 declare var PushSubscriptionOptions: {
@@ -11819,7 +11595,7 @@
 };
 
 interface RTCCertificate {
-    readonly expires: number;
+    readonly expires: DOMTimeStamp;
     getFingerprints(): RTCDtlsFingerprint[];
 }
 
@@ -11861,7 +11637,7 @@
 interface RTCDataChannelEventMap {
     "bufferedamountlow": Event;
     "close": Event;
-    "error": RTCErrorEvent;
+    "error": Event;
     "message": MessageEvent;
     "open": Event;
 }
@@ -11877,7 +11653,7 @@
     readonly negotiated: boolean;
     onbufferedamountlow: ((this: RTCDataChannel, ev: Event) => any) | null;
     onclose: ((this: RTCDataChannel, ev: Event) => any) | null;
-    onerror: ((this: RTCDataChannel, ev: RTCErrorEvent) => any) | null;
+    onerror: ((this: RTCDataChannel, ev: Event) => any) | null;
     onmessage: ((this: RTCDataChannel, ev: MessageEvent) => any) | null;
     onopen: ((this: RTCDataChannel, ev: Event) => any) | null;
     readonly ordered: boolean;
@@ -11909,16 +11685,12 @@
 };
 
 interface RTCDtlsTransportEventMap {
-    "error": RTCErrorEvent;
     "statechange": Event;
 }
 
 interface RTCDtlsTransport extends EventTarget {
-    readonly iceTransport: RTCIceTransport;
-    onerror: ((this: RTCDtlsTransport, ev: RTCErrorEvent) => any) | null;
     onstatechange: ((this: RTCDtlsTransport, ev: Event) => any) | null;
     readonly state: RTCDtlsTransportState;
-    getRemoteCertificates(): ArrayBuffer[];
     addEventListener<K extends keyof RTCDtlsTransportEventMap>(type: K, listener: (this: RTCDtlsTransport, ev: RTCDtlsTransportEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
     addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
     removeEventListener<K extends keyof RTCDtlsTransportEventMap>(type: K, listener: (this: RTCDtlsTransport, ev: RTCDtlsTransportEventMap[K]) => any, options?: boolean | EventListenerOptions): void;
@@ -11930,62 +11702,9 @@
     new(): RTCDtlsTransport;
 };
 
-interface RTCDtlsTransportStateChangedEvent extends Event {
-    readonly state: RTCDtlsTransportState;
-}
-
-declare var RTCDtlsTransportStateChangedEvent: {
-    prototype: RTCDtlsTransportStateChangedEvent;
-    new(): RTCDtlsTransportStateChangedEvent;
-};
-
-interface RTCDtmfSenderEventMap {
-    "tonechange": RTCDTMFToneChangeEvent;
-}
-
-interface RTCDtmfSender extends EventTarget {
-    readonly canInsertDTMF: boolean;
-    readonly duration: number;
-    readonly interToneGap: number;
-    ontonechange: ((this: RTCDtmfSender, ev: RTCDTMFToneChangeEvent) => any) | null;
-    readonly sender: RTCRtpSender;
-    readonly toneBuffer: string;
-    insertDTMF(tones: string, duration?: number, interToneGap?: number): void;
-    addEventListener<K extends keyof RTCDtmfSenderEventMap>(type: K, listener: (this: RTCDtmfSender, ev: RTCDtmfSenderEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
-    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
-    removeEventListener<K extends keyof RTCDtmfSenderEventMap>(type: K, listener: (this: RTCDtmfSender, ev: RTCDtmfSenderEventMap[K]) => any, options?: boolean | EventListenerOptions): void;
-    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;
-}
-
-declare var RTCDtmfSender: {
-    prototype: RTCDtmfSender;
-    new(sender: RTCRtpSender): RTCDtmfSender;
-};
-
-interface RTCError extends DOMException {
-    readonly errorDetail: RTCErrorDetailType;
-    readonly receivedAlert: number | null;
-    readonly sctpCauseCode: number | null;
-    readonly sdpLineNumber: number | null;
-    readonly sentAlert: number | null;
-}
-
-declare var RTCError: {
-    prototype: RTCError;
-    new(init: RTCErrorInit, message?: string): RTCError;
-};
-
-interface RTCErrorEvent extends Event {
-    readonly error: RTCError;
-}
-
-declare var RTCErrorEvent: {
-    prototype: RTCErrorEvent;
-    new(type: string, eventInitDict: RTCErrorEventInit): RTCErrorEvent;
-};
-
 /** The RTCIceCandidate interface—part of the WebRTC API—represents a candidate Internet Connectivity Establishment (ICE) configuration which may be used to establish an RTCPeerConnection. */
 interface RTCIceCandidate {
+    readonly address: string | null;
     readonly candidate: string;
     readonly component: RTCIceComponent | null;
     readonly foundation: string | null;
@@ -12007,70 +11726,10 @@
     new(candidateInitDict?: RTCIceCandidateInit): RTCIceCandidate;
 };
 
-interface RTCIceCandidatePairChangedEvent extends Event {
-    readonly pair: RTCIceCandidatePair;
-}
-
-declare var RTCIceCandidatePairChangedEvent: {
-    prototype: RTCIceCandidatePairChangedEvent;
-    new(): RTCIceCandidatePairChangedEvent;
-};
-
-interface RTCIceGathererEventMap {
-    "error": Event;
-    "localcandidate": RTCIceGathererEvent;
-}
-
-interface RTCIceGatherer extends RTCStatsProvider {
-    readonly component: RTCIceComponent;
-    onerror: ((this: RTCIceGatherer, ev: Event) => any) | null;
-    onlocalcandidate: ((this: RTCIceGatherer, ev: RTCIceGathererEvent) => any) | null;
-    createAssociatedGatherer(): RTCIceGatherer;
-    getLocalCandidates(): RTCIceCandidateDictionary[];
-    getLocalParameters(): RTCIceParameters;
-    addEventListener<K extends keyof RTCIceGathererEventMap>(type: K, listener: (this: RTCIceGatherer, ev: RTCIceGathererEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
-    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
-    removeEventListener<K extends keyof RTCIceGathererEventMap>(type: K, listener: (this: RTCIceGatherer, ev: RTCIceGathererEventMap[K]) => any, options?: boolean | EventListenerOptions): void;
-    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;
-}
-
-declare var RTCIceGatherer: {
-    prototype: RTCIceGatherer;
-    new(options: RTCIceGatherOptions): RTCIceGatherer;
-};
-
-interface RTCIceGathererEvent extends Event {
-    readonly candidate: RTCIceCandidateDictionary | RTCIceCandidateComplete;
-}
-
-declare var RTCIceGathererEvent: {
-    prototype: RTCIceGathererEvent;
-    new(): RTCIceGathererEvent;
-};
-
-interface RTCIceTransportEventMap {
-    "gatheringstatechange": Event;
-    "selectedcandidatepairchange": Event;
-    "statechange": Event;
-}
-
 /** Provides access to information about the ICE transport layer over which the data is being sent and received. */
 interface RTCIceTransport extends EventTarget {
     readonly gatheringState: RTCIceGathererState;
-    ongatheringstatechange: ((this: RTCIceTransport, ev: Event) => any) | null;
-    onselectedcandidatepairchange: ((this: RTCIceTransport, ev: Event) => any) | null;
-    onstatechange: ((this: RTCIceTransport, ev: Event) => any) | null;
-    readonly role: RTCIceRole;
     readonly state: RTCIceTransportState;
-    getLocalCandidates(): RTCIceCandidate[];
-    getLocalParameters(): RTCIceParameters | null;
-    getRemoteCandidates(): RTCIceCandidate[];
-    getRemoteParameters(): RTCIceParameters | null;
-    getSelectedCandidatePair(): RTCIceCandidatePair | null;
-    addEventListener<K extends keyof RTCIceTransportEventMap>(type: K, listener: (this: RTCIceTransport, ev: RTCIceTransportEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
-    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
-    removeEventListener<K extends keyof RTCIceTransportEventMap>(type: K, listener: (this: RTCIceTransport, ev: RTCIceTransportEventMap[K]) => any, options?: boolean | EventListenerOptions): void;
-    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;
 }
 
 declare var RTCIceTransport: {
@@ -12078,30 +11737,11 @@
     new(): RTCIceTransport;
 };
 
-interface RTCIceTransportStateChangedEvent extends Event {
-    readonly state: RTCIceTransportState;
-}
-
-declare var RTCIceTransportStateChangedEvent: {
-    prototype: RTCIceTransportStateChangedEvent;
-    new(): RTCIceTransportStateChangedEvent;
-};
-
-interface RTCIdentityAssertion {
-    idp: string;
-    name: string;
-}
-
-declare var RTCIdentityAssertion: {
-    prototype: RTCIdentityAssertion;
-    new(idp: string, name: string): RTCIdentityAssertion;
-};
-
 interface RTCPeerConnectionEventMap {
     "connectionstatechange": Event;
     "datachannel": RTCDataChannelEvent;
     "icecandidate": RTCPeerConnectionIceEvent;
-    "icecandidateerror": RTCPeerConnectionIceErrorEvent;
+    "icecandidateerror": Event;
     "iceconnectionstatechange": Event;
     "icegatheringstatechange": Event;
     "negotiationneeded": Event;
@@ -12117,33 +11757,34 @@
     readonly currentRemoteDescription: RTCSessionDescription | null;
     readonly iceConnectionState: RTCIceConnectionState;
     readonly iceGatheringState: RTCIceGatheringState;
-    readonly idpErrorInfo: string | null;
-    readonly idpLoginUrl: string | null;
     readonly localDescription: RTCSessionDescription | null;
     onconnectionstatechange: ((this: RTCPeerConnection, ev: Event) => any) | null;
     ondatachannel: ((this: RTCPeerConnection, ev: RTCDataChannelEvent) => any) | null;
     onicecandidate: ((this: RTCPeerConnection, ev: RTCPeerConnectionIceEvent) => any) | null;
-    onicecandidateerror: ((this: RTCPeerConnection, ev: RTCPeerConnectionIceErrorEvent) => any) | null;
+    onicecandidateerror: ((this: RTCPeerConnection, ev: Event) => any) | null;
     oniceconnectionstatechange: ((this: RTCPeerConnection, ev: Event) => any) | null;
     onicegatheringstatechange: ((this: RTCPeerConnection, ev: Event) => any) | null;
     onnegotiationneeded: ((this: RTCPeerConnection, ev: Event) => any) | null;
     onsignalingstatechange: ((this: RTCPeerConnection, ev: Event) => any) | null;
     ontrack: ((this: RTCPeerConnection, ev: RTCTrackEvent) => any) | null;
-    readonly peerIdentity: Promise<RTCIdentityAssertion>;
     readonly pendingLocalDescription: RTCSessionDescription | null;
     readonly pendingRemoteDescription: RTCSessionDescription | null;
     readonly remoteDescription: RTCSessionDescription | null;
-    readonly sctp: RTCSctpTransport | null;
     readonly signalingState: RTCSignalingState;
-    addIceCandidate(candidate: RTCIceCandidateInit | RTCIceCandidate): Promise<void>;
+    addIceCandidate(candidate?: RTCIceCandidateInit): Promise<void>;
+    /** @deprecated */
+    addIceCandidate(candidate: RTCIceCandidateInit, successCallback: VoidFunction, failureCallback: RTCPeerConnectionErrorCallback): Promise<void>;
     addTrack(track: MediaStreamTrack, ...streams: MediaStream[]): RTCRtpSender;
     addTransceiver(trackOrKind: MediaStreamTrack | string, init?: RTCRtpTransceiverInit): RTCRtpTransceiver;
     close(): void;
-    createAnswer(options?: RTCOfferOptions): Promise<RTCSessionDescriptionInit>;
+    createAnswer(options?: RTCAnswerOptions): Promise<RTCSessionDescriptionInit>;
+    /** @deprecated */
+    createAnswer(successCallback: RTCSessionDescriptionCallback, failureCallback: RTCPeerConnectionErrorCallback): Promise<void>;
     createDataChannel(label: string, dataChannelDict?: RTCDataChannelInit): RTCDataChannel;
     createOffer(options?: RTCOfferOptions): Promise<RTCSessionDescriptionInit>;
+    /** @deprecated */
+    createOffer(successCallback: RTCSessionDescriptionCallback, failureCallback: RTCPeerConnectionErrorCallback, options?: RTCOfferOptions): Promise<void>;
     getConfiguration(): RTCConfiguration;
-    getIdentityAssertion(): Promise<string>;
     getReceivers(): RTCRtpReceiver[];
     getSenders(): RTCRtpSender[];
     getStats(selector?: MediaStreamTrack | null): Promise<RTCStatsReport>;
@@ -12151,9 +11792,12 @@
     removeTrack(sender: RTCRtpSender): void;
     restartIce(): void;
     setConfiguration(configuration?: RTCConfiguration): void;
-    setIdentityProvider(provider: string, options?: RTCIdentityProviderOptions): void;
-    setLocalDescription(description?: RTCSessionDescriptionInit): Promise<void>;
+    setLocalDescription(description?: RTCLocalSessionDescriptionInit): Promise<void>;
+    /** @deprecated */
+    setLocalDescription(description: RTCLocalSessionDescriptionInit, successCallback: VoidFunction, failureCallback: RTCPeerConnectionErrorCallback): Promise<void>;
     setRemoteDescription(description: RTCSessionDescriptionInit): Promise<void>;
+    /** @deprecated */
+    setRemoteDescription(description: RTCSessionDescriptionInit, successCallback: VoidFunction, failureCallback: RTCPeerConnectionErrorCallback): Promise<void>;
     addEventListener<K extends keyof RTCPeerConnectionEventMap>(type: K, listener: (this: RTCPeerConnection, ev: RTCPeerConnectionEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
     addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
     removeEventListener<K extends keyof RTCPeerConnectionEventMap>(type: K, listener: (this: RTCPeerConnection, ev: RTCPeerConnectionEventMap[K]) => any, options?: boolean | EventListenerOptions): void;
@@ -12229,7 +11873,6 @@
     readonly mid: string | null;
     readonly receiver: RTCRtpReceiver;
     readonly sender: RTCRtpSender;
-    setCodecPreferences(codecs: RTCRtpCodecCapability[]): void;
     stop(): void;
 }
 
@@ -12238,27 +11881,6 @@
     new(): RTCRtpTransceiver;
 };
 
-interface RTCSctpTransportEventMap {
-    "statechange": Event;
-}
-
-interface RTCSctpTransport extends EventTarget {
-    readonly maxChannels: number | null;
-    readonly maxMessageSize: number;
-    onstatechange: ((this: RTCSctpTransport, ev: Event) => any) | null;
-    readonly state: RTCSctpTransportState;
-    readonly transport: RTCDtlsTransport;
-    addEventListener<K extends keyof RTCSctpTransportEventMap>(type: K, listener: (this: RTCSctpTransport, ev: RTCSctpTransportEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
-    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
-    removeEventListener<K extends keyof RTCSctpTransportEventMap>(type: K, listener: (this: RTCSctpTransport, ev: RTCSctpTransportEventMap[K]) => any, options?: boolean | EventListenerOptions): void;
-    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;
-}
-
-declare var RTCSctpTransport: {
-    prototype: RTCSctpTransport;
-    new(): RTCSctpTransport;
-};
-
 /** One end of a connection—or potential connection—and how it's configured. Each RTCSessionDescription consists of a description type indicating which part of the offer/answer negotiation process it describes and of the SDP descriptor of the session. */
 interface RTCSessionDescription {
     readonly sdp: string;
@@ -12271,44 +11893,6 @@
     new(descriptionInitDict: RTCSessionDescriptionInit): RTCSessionDescription;
 };
 
-interface RTCSrtpSdesTransportEventMap {
-    "error": Event;
-}
-
-interface RTCSrtpSdesTransport extends EventTarget {
-    onerror: ((this: RTCSrtpSdesTransport, ev: Event) => any) | null;
-    readonly transport: RTCIceTransport;
-    addEventListener<K extends keyof RTCSrtpSdesTransportEventMap>(type: K, listener: (this: RTCSrtpSdesTransport, ev: RTCSrtpSdesTransportEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
-    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
-    removeEventListener<K extends keyof RTCSrtpSdesTransportEventMap>(type: K, listener: (this: RTCSrtpSdesTransport, ev: RTCSrtpSdesTransportEventMap[K]) => any, options?: boolean | EventListenerOptions): void;
-    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;
-}
-
-declare var RTCSrtpSdesTransport: {
-    prototype: RTCSrtpSdesTransport;
-    new(transport: RTCIceTransport, encryptParameters: RTCSrtpSdesParameters, decryptParameters: RTCSrtpSdesParameters): RTCSrtpSdesTransport;
-    getLocalParameters(): RTCSrtpSdesParameters[];
-};
-
-interface RTCSsrcConflictEvent extends Event {
-    readonly ssrc: number;
-}
-
-declare var RTCSsrcConflictEvent: {
-    prototype: RTCSsrcConflictEvent;
-    new(): RTCSsrcConflictEvent;
-};
-
-interface RTCStatsProvider extends EventTarget {
-    getStats(): Promise<RTCStatsReport>;
-    msGetStats(): Promise<RTCStatsReport>;
-}
-
-declare var RTCStatsProvider: {
-    prototype: RTCStatsProvider;
-    new(): RTCStatsProvider;
-};
-
 interface RTCStatsReport {
     forEach(callbackfn: (value: any, key: string, parent: RTCStatsReport) => void, thisArg?: any): void;
 }
@@ -12339,15 +11923,6 @@
     new(): RadioNodeList;
 };
 
-interface RandomSource {
-    getRandomValues<T extends Int8Array | Uint8ClampedArray | Uint8Array | Int16Array | Uint16Array | Int32Array | Uint32Array>(array: T): T;
-}
-
-declare var RandomSource: {
-    prototype: RandomSource;
-    new(): RandomSource;
-};
-
 /** A fragment of a document that can contain nodes and parts of text nodes. */
 interface Range extends AbstractRange {
     /**
@@ -12406,8 +11981,9 @@
     cancel(reason?: any): Promise<void>;
     getReader(): ReadableStreamDefaultReader<R>;
     pipeThrough<T>(transform: ReadableWritablePair<T, R>, options?: StreamPipeOptions): ReadableStream<T>;
-    pipeTo(dest: WritableStream<R>, options?: StreamPipeOptions): Promise<void>;
+    pipeTo(destination: WritableStream<R>, options?: StreamPipeOptions): Promise<void>;
     tee(): [ReadableStream<R>, ReadableStream<R>];
+    forEach(callbackfn: (value: any, key: number, parent: ReadableStream<R>) => void, thisArg?: any): void;
 }
 
 declare var ReadableStream: {
@@ -12418,7 +11994,7 @@
 interface ReadableStreamDefaultController<R = any> {
     readonly desiredSize: number | null;
     close(): void;
-    enqueue(chunk: R): void;
+    enqueue(chunk?: R): void;
     error(e?: any): void;
 }
 
@@ -12442,6 +12018,31 @@
     cancel(reason?: any): Promise<void>;
 }
 
+interface RemotePlaybackEventMap {
+    "connect": Event;
+    "connecting": Event;
+    "disconnect": Event;
+}
+
+interface RemotePlayback extends EventTarget {
+    onconnect: ((this: RemotePlayback, ev: Event) => any) | null;
+    onconnecting: ((this: RemotePlayback, ev: Event) => any) | null;
+    ondisconnect: ((this: RemotePlayback, ev: Event) => any) | null;
+    readonly state: RemotePlaybackState;
+    cancelWatchAvailability(id?: number): Promise<void>;
+    prompt(): Promise<void>;
+    watchAvailability(callback: RemotePlaybackAvailabilityCallback): Promise<number>;
+    addEventListener<K extends keyof RemotePlaybackEventMap>(type: K, listener: (this: RemotePlayback, ev: RemotePlaybackEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
+    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
+    removeEventListener<K extends keyof RemotePlaybackEventMap>(type: K, listener: (this: RemotePlayback, ev: RemotePlaybackEventMap[K]) => any, options?: boolean | EventListenerOptions): void;
+    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;
+}
+
+declare var RemotePlayback: {
+    prototype: RemotePlayback;
+    new(): RemotePlayback;
+};
+
 /** This Fetch API interface represents a resource request. */
 interface Request extends Body {
     /**
@@ -12465,14 +12066,6 @@
      */
     readonly integrity: string;
     /**
-     * Returns a boolean indicating whether or not request is for a history navigation (a.k.a. back-foward navigation).
-     */
-    readonly isHistoryNavigation: boolean;
-    /**
-     * Returns a boolean indicating whether or not request is for a reload navigation.
-     */
-    readonly isReloadNavigation: boolean;
-    /**
      * Returns a boolean indicating whether or not request can outlive the global in which it was created.
      */
     readonly keepalive: boolean;
@@ -12552,7 +12145,6 @@
     readonly redirected: boolean;
     readonly status: number;
     readonly statusText: string;
-    readonly trailer: Promise<Headers>;
     readonly type: ResponseType;
     readonly url: string;
     clone(): Response;
@@ -12562,11 +12154,13 @@
     prototype: Response;
     new(body?: BodyInit | null, init?: ResponseInit): Response;
     error(): Response;
-    redirect(url: string, status?: number): Response;
+    redirect(url: string | URL, status?: number): Response;
 };
 
 /** Provides access to the properties of <a> element, as well as methods to manipulate them. */
 interface SVGAElement extends SVGGraphicsElement, SVGURIReference {
+    rel: string;
+    readonly relList: DOMTokenList;
     readonly target: SVGAnimatedString;
     addEventListener<K extends keyof SVGElementEventMap>(type: K, listener: (this: SVGAElement, ev: SVGElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
     addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
@@ -12777,8 +12371,12 @@
     new(): SVGAnimatedTransformList;
 };
 
-interface SVGAnimationElement extends SVGElement {
-    readonly targetElement: SVGElement;
+interface SVGAnimationElement extends SVGElement, SVGTests {
+    readonly targetElement: SVGElement | null;
+    beginElement(): void;
+    beginElementAt(offset: number): void;
+    endElement(): void;
+    endElementAt(offset: number): void;
     getCurrentTime(): number;
     getSimpleDuration(): number;
     getStartTime(): number;
@@ -12856,20 +12454,6 @@
     readonly SVG_FECOMPONENTTRANSFER_TYPE_UNKNOWN: number;
 };
 
-interface SVGCursorElement extends SVGElement {
-    readonly x: SVGAnimatedLength;
-    readonly y: SVGAnimatedLength;
-    addEventListener<K extends keyof SVGElementEventMap>(type: K, listener: (this: SVGCursorElement, ev: SVGElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
-    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
-    removeEventListener<K extends keyof SVGElementEventMap>(type: K, listener: (this: SVGCursorElement, ev: SVGElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;
-    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;
-}
-
-declare var SVGCursorElement: {
-    prototype: SVGCursorElement;
-    new(): SVGCursorElement;
-};
-
 /** Corresponds to the <defs> element. */
 interface SVGDefsElement extends SVGGraphicsElement {
     addEventListener<K extends keyof SVGElementEventMap>(type: K, listener: (this: SVGDefsElement, ev: SVGElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
@@ -12896,11 +12480,11 @@
     new(): SVGDescElement;
 };
 
-interface SVGElementEventMap extends ElementEventMap, GlobalEventHandlersEventMap, DocumentAndElementEventHandlersEventMap {
+interface SVGElementEventMap extends ElementEventMap, DocumentAndElementEventHandlersEventMap, GlobalEventHandlersEventMap {
 }
 
 /** All of the SVG DOM interfaces that correspond directly to elements in the SVG language derive from the SVGElement interface. */
-interface SVGElement extends Element, DocumentAndElementEventHandlers, DocumentAndElementEventHandlers, ElementCSSInlineStyle, GlobalEventHandlers, GlobalEventHandlers, HTMLOrSVGElement, SVGElementInstance {
+interface SVGElement extends Element, DocumentAndElementEventHandlers, DocumentAndElementEventHandlers, ElementCSSInlineStyle, GlobalEventHandlers, GlobalEventHandlers, HTMLOrSVGElement {
     /** @deprecated */
     readonly className: any;
     readonly ownerSVGElement: SVGSVGElement | null;
@@ -12916,28 +12500,6 @@
     new(): SVGElement;
 };
 
-interface SVGElementInstance extends EventTarget {
-    readonly correspondingElement: SVGElement;
-    readonly correspondingUseElement: SVGUseElement;
-}
-
-declare var SVGElementInstance: {
-    prototype: SVGElementInstance;
-    new(): SVGElementInstance;
-};
-
-interface SVGElementInstanceList {
-    /** @deprecated */
-    readonly length: number;
-    /** @deprecated */
-    item(index: number): SVGElementInstance;
-}
-
-declare var SVGElementInstanceList: {
-    prototype: SVGElementInstanceList;
-    new(): SVGElementInstanceList;
-};
-
 /** Provides access to the properties of <ellipse> elements. */
 interface SVGEllipseElement extends SVGGeometryElement {
     readonly cx: SVGAnimatedLength;
@@ -13682,6 +13244,18 @@
     new(): SVGLinearGradientElement;
 };
 
+interface SVGMPathElement extends SVGElement, SVGURIReference {
+    addEventListener<K extends keyof SVGElementEventMap>(type: K, listener: (this: SVGMPathElement, ev: SVGElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
+    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
+    removeEventListener<K extends keyof SVGElementEventMap>(type: K, listener: (this: SVGMPathElement, ev: SVGElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;
+    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;
+}
+
+declare var SVGMPathElement: {
+    prototype: SVGMPathElement;
+    new(): SVGMPathElement;
+};
+
 interface SVGMarkerElement extends SVGElement, SVGFitToViewBox {
     readonly markerHeight: SVGAnimatedLength;
     readonly markerUnits: SVGAnimatedEnumeration;
@@ -13777,11 +13351,7 @@
 };
 
 /** Corresponds to the <path> element. */
-interface SVGPathElement extends SVGGraphicsElement {
-    /** @deprecated */
-    readonly pathSegList: SVGPathSegList;
-    getPointAtLength(distance: number): SVGPoint;
-    getTotalLength(): number;
+interface SVGPathElement extends SVGGeometryElement {
     addEventListener<K extends keyof SVGElementEventMap>(type: K, listener: (this: SVGPathElement, ev: SVGElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
     addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
     removeEventListener<K extends keyof SVGElementEventMap>(type: K, listener: (this: SVGPathElement, ev: SVGElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;
@@ -13793,282 +13363,6 @@
     new(): SVGPathElement;
 };
 
-interface SVGPathSeg {
-    readonly pathSegType: number;
-    readonly pathSegTypeAsLetter: string;
-    readonly PATHSEG_ARC_ABS: number;
-    readonly PATHSEG_ARC_REL: number;
-    readonly PATHSEG_CLOSEPATH: number;
-    readonly PATHSEG_CURVETO_CUBIC_ABS: number;
-    readonly PATHSEG_CURVETO_CUBIC_REL: number;
-    readonly PATHSEG_CURVETO_CUBIC_SMOOTH_ABS: number;
-    readonly PATHSEG_CURVETO_CUBIC_SMOOTH_REL: number;
-    readonly PATHSEG_CURVETO_QUADRATIC_ABS: number;
-    readonly PATHSEG_CURVETO_QUADRATIC_REL: number;
-    readonly PATHSEG_CURVETO_QUADRATIC_SMOOTH_ABS: number;
-    readonly PATHSEG_CURVETO_QUADRATIC_SMOOTH_REL: number;
-    readonly PATHSEG_LINETO_ABS: number;
-    readonly PATHSEG_LINETO_HORIZONTAL_ABS: number;
-    readonly PATHSEG_LINETO_HORIZONTAL_REL: number;
-    readonly PATHSEG_LINETO_REL: number;
-    readonly PATHSEG_LINETO_VERTICAL_ABS: number;
-    readonly PATHSEG_LINETO_VERTICAL_REL: number;
-    readonly PATHSEG_MOVETO_ABS: number;
-    readonly PATHSEG_MOVETO_REL: number;
-    readonly PATHSEG_UNKNOWN: number;
-}
-
-declare var SVGPathSeg: {
-    prototype: SVGPathSeg;
-    new(): SVGPathSeg;
-    readonly PATHSEG_ARC_ABS: number;
-    readonly PATHSEG_ARC_REL: number;
-    readonly PATHSEG_CLOSEPATH: number;
-    readonly PATHSEG_CURVETO_CUBIC_ABS: number;
-    readonly PATHSEG_CURVETO_CUBIC_REL: number;
-    readonly PATHSEG_CURVETO_CUBIC_SMOOTH_ABS: number;
-    readonly PATHSEG_CURVETO_CUBIC_SMOOTH_REL: number;
-    readonly PATHSEG_CURVETO_QUADRATIC_ABS: number;
-    readonly PATHSEG_CURVETO_QUADRATIC_REL: number;
-    readonly PATHSEG_CURVETO_QUADRATIC_SMOOTH_ABS: number;
-    readonly PATHSEG_CURVETO_QUADRATIC_SMOOTH_REL: number;
-    readonly PATHSEG_LINETO_ABS: number;
-    readonly PATHSEG_LINETO_HORIZONTAL_ABS: number;
-    readonly PATHSEG_LINETO_HORIZONTAL_REL: number;
-    readonly PATHSEG_LINETO_REL: number;
-    readonly PATHSEG_LINETO_VERTICAL_ABS: number;
-    readonly PATHSEG_LINETO_VERTICAL_REL: number;
-    readonly PATHSEG_MOVETO_ABS: number;
-    readonly PATHSEG_MOVETO_REL: number;
-    readonly PATHSEG_UNKNOWN: number;
-};
-
-interface SVGPathSegArcAbs extends SVGPathSeg {
-    angle: number;
-    largeArcFlag: boolean;
-    r1: number;
-    r2: number;
-    sweepFlag: boolean;
-    x: number;
-    y: number;
-}
-
-declare var SVGPathSegArcAbs: {
-    prototype: SVGPathSegArcAbs;
-    new(): SVGPathSegArcAbs;
-};
-
-interface SVGPathSegArcRel extends SVGPathSeg {
-    angle: number;
-    largeArcFlag: boolean;
-    r1: number;
-    r2: number;
-    sweepFlag: boolean;
-    x: number;
-    y: number;
-}
-
-declare var SVGPathSegArcRel: {
-    prototype: SVGPathSegArcRel;
-    new(): SVGPathSegArcRel;
-};
-
-interface SVGPathSegClosePath extends SVGPathSeg {
-}
-
-declare var SVGPathSegClosePath: {
-    prototype: SVGPathSegClosePath;
-    new(): SVGPathSegClosePath;
-};
-
-interface SVGPathSegCurvetoCubicAbs extends SVGPathSeg {
-    x: number;
-    x1: number;
-    x2: number;
-    y: number;
-    y1: number;
-    y2: number;
-}
-
-declare var SVGPathSegCurvetoCubicAbs: {
-    prototype: SVGPathSegCurvetoCubicAbs;
-    new(): SVGPathSegCurvetoCubicAbs;
-};
-
-interface SVGPathSegCurvetoCubicRel extends SVGPathSeg {
-    x: number;
-    x1: number;
-    x2: number;
-    y: number;
-    y1: number;
-    y2: number;
-}
-
-declare var SVGPathSegCurvetoCubicRel: {
-    prototype: SVGPathSegCurvetoCubicRel;
-    new(): SVGPathSegCurvetoCubicRel;
-};
-
-interface SVGPathSegCurvetoCubicSmoothAbs extends SVGPathSeg {
-    x: number;
-    x2: number;
-    y: number;
-    y2: number;
-}
-
-declare var SVGPathSegCurvetoCubicSmoothAbs: {
-    prototype: SVGPathSegCurvetoCubicSmoothAbs;
-    new(): SVGPathSegCurvetoCubicSmoothAbs;
-};
-
-interface SVGPathSegCurvetoCubicSmoothRel extends SVGPathSeg {
-    x: number;
-    x2: number;
-    y: number;
-    y2: number;
-}
-
-declare var SVGPathSegCurvetoCubicSmoothRel: {
-    prototype: SVGPathSegCurvetoCubicSmoothRel;
-    new(): SVGPathSegCurvetoCubicSmoothRel;
-};
-
-interface SVGPathSegCurvetoQuadraticAbs extends SVGPathSeg {
-    x: number;
-    x1: number;
-    y: number;
-    y1: number;
-}
-
-declare var SVGPathSegCurvetoQuadraticAbs: {
-    prototype: SVGPathSegCurvetoQuadraticAbs;
-    new(): SVGPathSegCurvetoQuadraticAbs;
-};
-
-interface SVGPathSegCurvetoQuadraticRel extends SVGPathSeg {
-    x: number;
-    x1: number;
-    y: number;
-    y1: number;
-}
-
-declare var SVGPathSegCurvetoQuadraticRel: {
-    prototype: SVGPathSegCurvetoQuadraticRel;
-    new(): SVGPathSegCurvetoQuadraticRel;
-};
-
-interface SVGPathSegCurvetoQuadraticSmoothAbs extends SVGPathSeg {
-    x: number;
-    y: number;
-}
-
-declare var SVGPathSegCurvetoQuadraticSmoothAbs: {
-    prototype: SVGPathSegCurvetoQuadraticSmoothAbs;
-    new(): SVGPathSegCurvetoQuadraticSmoothAbs;
-};
-
-interface SVGPathSegCurvetoQuadraticSmoothRel extends SVGPathSeg {
-    x: number;
-    y: number;
-}
-
-declare var SVGPathSegCurvetoQuadraticSmoothRel: {
-    prototype: SVGPathSegCurvetoQuadraticSmoothRel;
-    new(): SVGPathSegCurvetoQuadraticSmoothRel;
-};
-
-interface SVGPathSegLinetoAbs extends SVGPathSeg {
-    x: number;
-    y: number;
-}
-
-declare var SVGPathSegLinetoAbs: {
-    prototype: SVGPathSegLinetoAbs;
-    new(): SVGPathSegLinetoAbs;
-};
-
-interface SVGPathSegLinetoHorizontalAbs extends SVGPathSeg {
-    x: number;
-}
-
-declare var SVGPathSegLinetoHorizontalAbs: {
-    prototype: SVGPathSegLinetoHorizontalAbs;
-    new(): SVGPathSegLinetoHorizontalAbs;
-};
-
-interface SVGPathSegLinetoHorizontalRel extends SVGPathSeg {
-    x: number;
-}
-
-declare var SVGPathSegLinetoHorizontalRel: {
-    prototype: SVGPathSegLinetoHorizontalRel;
-    new(): SVGPathSegLinetoHorizontalRel;
-};
-
-interface SVGPathSegLinetoRel extends SVGPathSeg {
-    x: number;
-    y: number;
-}
-
-declare var SVGPathSegLinetoRel: {
-    prototype: SVGPathSegLinetoRel;
-    new(): SVGPathSegLinetoRel;
-};
-
-interface SVGPathSegLinetoVerticalAbs extends SVGPathSeg {
-    y: number;
-}
-
-declare var SVGPathSegLinetoVerticalAbs: {
-    prototype: SVGPathSegLinetoVerticalAbs;
-    new(): SVGPathSegLinetoVerticalAbs;
-};
-
-interface SVGPathSegLinetoVerticalRel extends SVGPathSeg {
-    y: number;
-}
-
-declare var SVGPathSegLinetoVerticalRel: {
-    prototype: SVGPathSegLinetoVerticalRel;
-    new(): SVGPathSegLinetoVerticalRel;
-};
-
-interface SVGPathSegList {
-    readonly numberOfItems: number;
-    appendItem(newItem: SVGPathSeg): SVGPathSeg;
-    clear(): void;
-    getItem(index: number): SVGPathSeg;
-    initialize(newItem: SVGPathSeg): SVGPathSeg;
-    insertItemBefore(newItem: SVGPathSeg, index: number): SVGPathSeg;
-    removeItem(index: number): SVGPathSeg;
-    replaceItem(newItem: SVGPathSeg, index: number): SVGPathSeg;
-}
-
-declare var SVGPathSegList: {
-    prototype: SVGPathSegList;
-    new(): SVGPathSegList;
-};
-
-interface SVGPathSegMovetoAbs extends SVGPathSeg {
-    x: number;
-    y: number;
-}
-
-declare var SVGPathSegMovetoAbs: {
-    prototype: SVGPathSegMovetoAbs;
-    new(): SVGPathSegMovetoAbs;
-};
-
-interface SVGPathSegMovetoRel extends SVGPathSeg {
-    x: number;
-    y: number;
-}
-
-declare var SVGPathSegMovetoRel: {
-    prototype: SVGPathSegMovetoRel;
-    new(): SVGPathSegMovetoRel;
-};
-
 /** Corresponds to the <pattern> element. */
 interface SVGPatternElement extends SVGElement, SVGFitToViewBox, SVGURIReference {
     readonly height: SVGAnimatedLength;
@@ -14210,40 +13504,35 @@
     new(): SVGRectElement;
 };
 
-interface SVGSVGElementEventMap extends SVGElementEventMap {
-    "SVGUnload": Event;
-    "SVGZoom": SVGZoomEvent;
+interface SVGSVGElementEventMap extends SVGElementEventMap, WindowEventHandlersEventMap {
 }
 
 /** Provides access to the properties of <svg> elements, as well as methods to manipulate them. This interface contains also various miscellaneous commonly-used utility methods, such as matrix operations and the ability to control the time of redraw on visual rendering devices. */
-interface SVGSVGElement extends SVGGraphicsElement, DocumentEvent, SVGFitToViewBox, SVGZoomAndPan {
+interface SVGSVGElement extends SVGGraphicsElement, SVGFitToViewBox, WindowEventHandlers {
     currentScale: number;
-    readonly currentTranslate: SVGPoint;
+    readonly currentTranslate: DOMPointReadOnly;
     readonly height: SVGAnimatedLength;
-    onunload: ((this: SVGSVGElement, ev: Event) => any) | null;
-    onzoom: ((this: SVGSVGElement, ev: SVGZoomEvent) => any) | null;
     readonly width: SVGAnimatedLength;
     readonly x: SVGAnimatedLength;
     readonly y: SVGAnimatedLength;
     animationsPaused(): boolean;
-    checkEnclosure(element: SVGElement, rect: SVGRect): boolean;
-    checkIntersection(element: SVGElement, rect: SVGRect): boolean;
+    checkEnclosure(element: SVGElement, rect: DOMRectReadOnly): boolean;
+    checkIntersection(element: SVGElement, rect: DOMRectReadOnly): boolean;
     createSVGAngle(): SVGAngle;
     createSVGLength(): SVGLength;
-    createSVGMatrix(): SVGMatrix;
+    createSVGMatrix(): DOMMatrix;
     createSVGNumber(): SVGNumber;
-    createSVGPoint(): SVGPoint;
-    createSVGRect(): SVGRect;
+    createSVGPoint(): DOMPoint;
+    createSVGRect(): DOMRect;
     createSVGTransform(): SVGTransform;
-    createSVGTransformFromMatrix(matrix: SVGMatrix): SVGTransform;
+    createSVGTransformFromMatrix(matrix?: DOMMatrix2DInit): SVGTransform;
     deselectAll(): void;
     /** @deprecated */
     forceRedraw(): void;
-    getComputedStyle(elt: Element, pseudoElt?: string | null): CSSStyleDeclaration;
     getCurrentTime(): number;
     getElementById(elementId: string): Element;
-    getEnclosureList(rect: SVGRect, referenceElement: SVGElement | null): NodeListOf<SVGCircleElement | SVGEllipseElement | SVGImageElement | SVGLineElement | SVGPathElement | SVGPolygonElement | SVGPolylineElement | SVGRectElement | SVGTextElement | SVGUseElement>;
-    getIntersectionList(rect: SVGRect, referenceElement: SVGElement | null): NodeListOf<SVGCircleElement | SVGEllipseElement | SVGImageElement | SVGLineElement | SVGPathElement | SVGPolygonElement | SVGPolylineElement | SVGRectElement | SVGTextElement | SVGUseElement>;
+    getEnclosureList(rect: DOMRectReadOnly, referenceElement: SVGElement | null): NodeListOf<SVGCircleElement | SVGEllipseElement | SVGImageElement | SVGLineElement | SVGPathElement | SVGPolygonElement | SVGPolylineElement | SVGRectElement | SVGTextElement | SVGUseElement>;
+    getIntersectionList(rect: DOMRectReadOnly, referenceElement: SVGElement | null): NodeListOf<SVGCircleElement | SVGEllipseElement | SVGImageElement | SVGLineElement | SVGPathElement | SVGPolygonElement | SVGPolylineElement | SVGRectElement | SVGTextElement | SVGUseElement>;
     pauseAnimations(): void;
     setCurrentTime(seconds: number): void;
     /** @deprecated */
@@ -14262,9 +13551,6 @@
 declare var SVGSVGElement: {
     prototype: SVGSVGElement;
     new(): SVGSVGElement;
-    readonly SVG_ZOOMANDPAN_DISABLE: number;
-    readonly SVG_ZOOMANDPAN_MAGNIFY: number;
-    readonly SVG_ZOOMANDPAN_UNKNOWN: number;
 };
 
 /** Corresponds to the SVG <script> element. */
@@ -14281,6 +13567,18 @@
     new(): SVGScriptElement;
 };
 
+interface SVGSetElement extends SVGAnimationElement {
+    addEventListener<K extends keyof SVGElementEventMap>(type: K, listener: (this: SVGSetElement, ev: SVGElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
+    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
+    removeEventListener<K extends keyof SVGElementEventMap>(type: K, listener: (this: SVGSetElement, ev: SVGElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;
+    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;
+}
+
+declare var SVGSetElement: {
+    prototype: SVGSetElement;
+    new(): SVGSetElement;
+};
+
 /** Corresponds to the <stop> element. */
 interface SVGStopElement extends SVGElement {
     readonly offset: SVGAnimatedNumber;
@@ -14387,6 +13685,7 @@
     getRotationOfChar(charnum: number): number;
     getStartPositionOfChar(charnum: number): DOMPoint;
     getSubStringLength(charnum: number, nchars: number): number;
+    /** @deprecated */
     selectSubString(charnum: number, nchars: number): void;
     readonly LENGTHADJUST_SPACING: number;
     readonly LENGTHADJUST_SPACINGANDGLYPHS: number;
@@ -14480,9 +13779,9 @@
 /** SVGTransform is the interface for one of the component transformations within an SVGTransformList; thus, an SVGTransform object corresponds to a single component (e.g., scale(…) or matrix(…)) within a transform attribute. */
 interface SVGTransform {
     readonly angle: number;
-    readonly matrix: SVGMatrix;
+    readonly matrix: DOMMatrix;
     readonly type: number;
-    setMatrix(matrix: SVGMatrix): void;
+    setMatrix(matrix?: DOMMatrix2DInit): void;
     setRotate(angle: number, cx: number, cy: number): void;
     setScale(sx: number, sy: number): void;
     setSkewX(angle: number): void;
@@ -14511,16 +13810,18 @@
 
 /** The SVGTransformList defines a list of SVGTransform objects. */
 interface SVGTransformList {
+    readonly length: number;
     readonly numberOfItems: number;
     appendItem(newItem: SVGTransform): SVGTransform;
     clear(): void;
-    consolidate(): SVGTransform;
-    createSVGTransformFromMatrix(matrix: SVGMatrix): SVGTransform;
+    consolidate(): SVGTransform | null;
+    createSVGTransformFromMatrix(matrix?: DOMMatrix2DInit): SVGTransform;
     getItem(index: number): SVGTransform;
     initialize(newItem: SVGTransform): SVGTransform;
     insertItemBefore(newItem: SVGTransform, index: number): SVGTransform;
     removeItem(index: number): SVGTransform;
     replaceItem(newItem: SVGTransform, index: number): SVGTransform;
+    [index: number]: SVGTransform;
 }
 
 declare var SVGTransformList: {
@@ -14565,9 +13866,7 @@
 };
 
 /** Provides access to the properties of <view> elements, as well as methods to manipulate them. */
-interface SVGViewElement extends SVGElement, SVGFitToViewBox, SVGZoomAndPan {
-    /** @deprecated */
-    readonly viewTarget: SVGStringList;
+interface SVGViewElement extends SVGElement, SVGFitToViewBox {
     addEventListener<K extends keyof SVGElementEventMap>(type: K, listener: (this: SVGViewElement, ev: SVGElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
     addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
     removeEventListener<K extends keyof SVGElementEventMap>(type: K, listener: (this: SVGViewElement, ev: SVGElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;
@@ -14577,29 +13876,6 @@
 declare var SVGViewElement: {
     prototype: SVGViewElement;
     new(): SVGViewElement;
-    readonly SVG_ZOOMANDPAN_DISABLE: number;
-    readonly SVG_ZOOMANDPAN_MAGNIFY: number;
-    readonly SVG_ZOOMANDPAN_UNKNOWN: number;
-};
-
-interface SVGZoomAndPan {
-    zoomAndPan: number;
-    readonly SVG_ZOOMANDPAN_DISABLE: number;
-    readonly SVG_ZOOMANDPAN_MAGNIFY: number;
-    readonly SVG_ZOOMANDPAN_UNKNOWN: number;
-}
-
-interface SVGZoomEvent extends UIEvent {
-    readonly newScale: number;
-    readonly newTranslate: SVGPoint;
-    readonly previousScale: number;
-    readonly previousTranslate: SVGPoint;
-    readonly zoomRectScreen: SVGRect;
-}
-
-declare var SVGZoomEvent: {
-    prototype: SVGZoomEvent;
-    new(): SVGZoomEvent;
 };
 
 /** A screen, usually the one on which the current window is being rendered, and is obtained using window.screen. */
@@ -14643,7 +13919,8 @@
     "audioprocess": AudioProcessingEvent;
 }
 
-/** Allows the generation, processing, or analyzing of audio using JavaScript.
+/**
+ * Allows the generation, processing, or analyzing of audio using JavaScript.
  * @deprecated As of the August 29 2014 Web Audio API spec publication, this feature has been marked as deprecated, and was replaced by AudioWorklet (see AudioWorkletNode).
  */
 interface ScriptProcessorNode extends AudioNode {
@@ -14657,6 +13934,7 @@
     removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;
 }
 
+/** @deprecated */
 declare var ScriptProcessorNode: {
     prototype: ScriptProcessorNode;
     new(): ScriptProcessorNode;
@@ -14666,11 +13944,13 @@
 interface SecurityPolicyViolationEvent extends Event {
     readonly blockedURI: string;
     readonly columnNumber: number;
+    readonly disposition: SecurityPolicyViolationEventDisposition;
     readonly documentURI: string;
     readonly effectiveDirective: string;
     readonly lineNumber: number;
     readonly originalPolicy: string;
     readonly referrer: string;
+    readonly sample: string;
     readonly sourceFile: string;
     readonly statusCode: number;
     readonly violatedDirective: string;
@@ -14713,12 +13993,6 @@
     toString(): string;
 };
 
-interface ServiceUIFrameContext {
-    getCachedFrameMessage(key: string): string;
-    postFrameMessage(key: string, data: string): void;
-}
-declare var ServiceUIFrameContext: ServiceUIFrameContext;
-
 interface ServiceWorkerEventMap extends AbstractWorkerEventMap {
     "statechange": Event;
 }
@@ -14754,7 +14028,7 @@
     onmessage: ((this: ServiceWorkerContainer, ev: MessageEvent) => any) | null;
     onmessageerror: ((this: ServiceWorkerContainer, ev: MessageEvent) => any) | null;
     readonly ready: Promise<ServiceWorkerRegistration>;
-    getRegistration(clientURL?: string): Promise<ServiceWorkerRegistration | undefined>;
+    getRegistration(clientURL?: string | URL): Promise<ServiceWorkerRegistration | undefined>;
     getRegistrations(): Promise<ReadonlyArray<ServiceWorkerRegistration>>;
     register(scriptURL: string | URL, options?: RegistrationOptions): Promise<ServiceWorkerRegistration>;
     startMessages(): void;
@@ -14777,11 +14051,9 @@
 interface ServiceWorkerRegistration extends EventTarget {
     readonly active: ServiceWorker | null;
     readonly installing: ServiceWorker | null;
-    readonly navigationPreload: NavigationPreloadManager;
     onupdatefound: ((this: ServiceWorkerRegistration, ev: Event) => any) | null;
     readonly pushManager: PushManager;
     readonly scope: string;
-    readonly sync: SyncManager;
     readonly updateViaCache: ServiceWorkerUpdateViaCache;
     readonly waiting: ServiceWorker | null;
     getNotifications(filter?: GetNotificationOptions): Promise<Notification[]>;
@@ -14800,6 +14072,7 @@
 };
 
 interface ShadowRoot extends DocumentFragment, DocumentOrShadowRoot, InnerHTML {
+    readonly delegatesFocus: boolean;
     readonly host: Element;
     readonly mode: ShadowRootMode;
     /**
@@ -14825,7 +14098,7 @@
 
 declare var SharedWorker: {
     prototype: SharedWorker;
-    new(scriptURL: string, options?: string | WorkerOptions): SharedWorker;
+    new(scriptURL: string | URL, options?: string | WorkerOptions): SharedWorker;
 };
 
 interface Slottable {
@@ -14855,6 +14128,7 @@
     readonly updating: boolean;
     abort(): void;
     appendBuffer(data: BufferSource): void;
+    changeType(type: string): void;
     remove(start: number, end: number): void;
     addEventListener<K extends keyof SourceBufferEventMap>(type: K, listener: (this: SourceBuffer, ev: SourceBufferEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
     addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
@@ -14889,74 +14163,6 @@
     new(): SourceBufferList;
 };
 
-interface SpeechGrammar {
-    src: string;
-    weight: number;
-}
-
-declare var SpeechGrammar: {
-    prototype: SpeechGrammar;
-    new(): SpeechGrammar;
-};
-
-interface SpeechGrammarList {
-    readonly length: number;
-    addFromString(string: string, weight?: number): void;
-    addFromURI(src: string, weight?: number): void;
-    item(index: number): SpeechGrammar;
-    [index: number]: SpeechGrammar;
-}
-
-declare var SpeechGrammarList: {
-    prototype: SpeechGrammarList;
-    new(): SpeechGrammarList;
-};
-
-interface SpeechRecognitionEventMap {
-    "audioend": Event;
-    "audiostart": Event;
-    "end": Event;
-    "error": SpeechRecognitionErrorEvent;
-    "nomatch": SpeechRecognitionEvent;
-    "result": SpeechRecognitionEvent;
-    "soundend": Event;
-    "soundstart": Event;
-    "speechend": Event;
-    "speechstart": Event;
-    "start": Event;
-}
-
-interface SpeechRecognition extends EventTarget {
-    continuous: boolean;
-    grammars: SpeechGrammarList;
-    interimResults: boolean;
-    lang: string;
-    maxAlternatives: number;
-    onaudioend: ((this: SpeechRecognition, ev: Event) => any) | null;
-    onaudiostart: ((this: SpeechRecognition, ev: Event) => any) | null;
-    onend: ((this: SpeechRecognition, ev: Event) => any) | null;
-    onerror: ((this: SpeechRecognition, ev: SpeechRecognitionErrorEvent) => any) | null;
-    onnomatch: ((this: SpeechRecognition, ev: SpeechRecognitionEvent) => any) | null;
-    onresult: ((this: SpeechRecognition, ev: SpeechRecognitionEvent) => any) | null;
-    onsoundend: ((this: SpeechRecognition, ev: Event) => any) | null;
-    onsoundstart: ((this: SpeechRecognition, ev: Event) => any) | null;
-    onspeechend: ((this: SpeechRecognition, ev: Event) => any) | null;
-    onspeechstart: ((this: SpeechRecognition, ev: Event) => any) | null;
-    onstart: ((this: SpeechRecognition, ev: Event) => any) | null;
-    abort(): void;
-    start(): void;
-    stop(): void;
-    addEventListener<K extends keyof SpeechRecognitionEventMap>(type: K, listener: (this: SpeechRecognition, ev: SpeechRecognitionEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
-    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
-    removeEventListener<K extends keyof SpeechRecognitionEventMap>(type: K, listener: (this: SpeechRecognition, ev: SpeechRecognitionEventMap[K]) => any, options?: boolean | EventListenerOptions): void;
-    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;
-}
-
-declare var SpeechRecognition: {
-    prototype: SpeechRecognition;
-    new(): SpeechRecognition;
-};
-
 interface SpeechRecognitionAlternative {
     readonly confidence: number;
     readonly transcript: string;
@@ -14967,26 +14173,6 @@
     new(): SpeechRecognitionAlternative;
 };
 
-interface SpeechRecognitionErrorEvent extends Event {
-    readonly error: SpeechRecognitionErrorCode;
-    readonly message: string;
-}
-
-declare var SpeechRecognitionErrorEvent: {
-    prototype: SpeechRecognitionErrorEvent;
-    new(type: string, eventInitDict: SpeechRecognitionErrorEventInit): SpeechRecognitionErrorEvent;
-};
-
-interface SpeechRecognitionEvent extends Event {
-    readonly resultIndex: number;
-    readonly results: SpeechRecognitionResultList;
-}
-
-declare var SpeechRecognitionEvent: {
-    prototype: SpeechRecognitionEvent;
-    new(type: string, eventInitDict: SpeechRecognitionEventInit): SpeechRecognitionEvent;
-};
-
 interface SpeechRecognitionResult {
     readonly isFinal: boolean;
     readonly length: number;
@@ -15130,29 +14316,35 @@
 /** This Web Storage API interface provides access to a particular domain's session or local storage. It allows, for example, the addition, modification, or deletion of stored data items. */
 interface Storage {
     /**
-     * Returns the number of key/value pairs currently present in the list associated with the object.
+     * Returns the number of key/value pairs.
      */
     readonly length: number;
     /**
-     * Empties the list associated with the object of all key/value pairs, if there are any.
+     * Removes all key/value pairs, if there are any.
+     *
+     * Dispatches a storage event on Window objects holding an equivalent Storage object.
      */
     clear(): void;
     /**
-     * Returns the current value associated with the given key, or null if the given key does not exist in the list associated with the object.
+     * Returns the current value associated with the given key, or null if the given key does not exist.
      */
     getItem(key: string): string | null;
     /**
-     * Returns the name of the nth key in the list, or null if n is greater than or equal to the number of key/value pairs in the object.
+     * Returns the name of the nth key, or null if n is greater than or equal to the number of key/value pairs.
      */
     key(index: number): string | null;
     /**
-     * Removes the key/value pair with the given key from the list associated with the object, if a key/value pair with the given key exists.
+     * Removes the key/value pair with the given key, if a key/value pair with the given key exists.
+     *
+     * Dispatches a storage event on Window objects holding an equivalent Storage object.
      */
     removeItem(key: string): void;
     /**
      * Sets the value of the pair identified by key to value, creating a new key/value pair if none existed for key previously.
      *
      * Throws a "QuotaExceededError" DOMException exception if the new value couldn't be set. (Setting could fail if, e.g., the user has disabled storage for the site, or if the quota has been exceeded.)
+     *
+     * Dispatches a storage event on Window objects holding an equivalent Storage object.
      */
     setItem(key: string, value: string): void;
     [name: string]: any;
@@ -15185,6 +14377,7 @@
      * Returns the URL of the document whose storage item changed.
      */
     readonly url: string;
+    initStorageEvent(type: string, bubbles?: boolean, cancelable?: boolean, key?: string | null, oldValue?: string | null, newValue?: string | null, url?: string | URL, storageArea?: Storage | null): void;
 }
 
 declare var StorageEvent: {
@@ -15203,16 +14396,12 @@
     new(): StorageManager;
 };
 
+/** @deprecated */
 interface StyleMedia {
-    readonly type: string;
+    type: string;
     matchMedium(mediaquery: string): boolean;
 }
 
-declare var StyleMedia: {
-    prototype: StyleMedia;
-    new(): StyleMedia;
-};
-
 /** A single style sheet. CSS style sheets will further implement the more specialized CSSStyleSheet interface. */
 interface StyleSheet {
     disabled: boolean;
@@ -15241,26 +14430,36 @@
     new(): StyleSheetList;
 };
 
+interface SubmitEvent extends Event {
+    /**
+     * Returns the element representing the submit button that triggered the form submission, or null if the submission was not triggered by a button.
+     */
+    readonly submitter: HTMLElement | null;
+}
+
+declare var SubmitEvent: {
+    prototype: SubmitEvent;
+    new(type: string, eventInitDict?: SubmitEventInit): SubmitEvent;
+};
+
 /** This Web Crypto API interface provides a number of low-level cryptographic functions. It is accessed via the Crypto.subtle properties available in a window context (via Window.crypto). */
 interface SubtleCrypto {
-    decrypt(algorithm: AlgorithmIdentifier | RsaOaepParams | AesCtrParams | AesCbcParams | AesCmacParams | AesGcmParams | AesCfbParams, key: CryptoKey, data: Int8Array | Int16Array | Int32Array | Uint8Array | Uint16Array | Uint32Array | Uint8ClampedArray | Float32Array | Float64Array | DataView | ArrayBuffer): Promise<ArrayBuffer>;
-    deriveBits(algorithm: AlgorithmIdentifier | EcdhKeyDeriveParams | DhKeyDeriveParams | ConcatParams | HkdfParams | Pbkdf2Params, baseKey: CryptoKey, length: number): Promise<ArrayBuffer>;
-    deriveKey(algorithm: AlgorithmIdentifier | EcdhKeyDeriveParams | DhKeyDeriveParams | ConcatParams | HkdfParams | Pbkdf2Params, baseKey: CryptoKey, derivedKeyType: string | AesDerivedKeyParams | HmacImportParams | ConcatParams | HkdfParams | Pbkdf2Params, extractable: boolean, keyUsages: KeyUsage[]): Promise<CryptoKey>;
-    digest(algorithm: AlgorithmIdentifier, data: Int8Array | Int16Array | Int32Array | Uint8Array | Uint16Array | Uint32Array | Uint8ClampedArray | Float32Array | Float64Array | DataView | ArrayBuffer): Promise<ArrayBuffer>;
-    encrypt(algorithm: AlgorithmIdentifier | RsaOaepParams | AesCtrParams | AesCbcParams | AesCmacParams | AesGcmParams | AesCfbParams, key: CryptoKey, data: Int8Array | Int16Array | Int32Array | Uint8Array | Uint16Array | Uint32Array | Uint8ClampedArray | Float32Array | Float64Array | DataView | ArrayBuffer): Promise<ArrayBuffer>;
+    decrypt(algorithm: AlgorithmIdentifier | RsaOaepParams | AesCtrParams | AesCbcParams | AesGcmParams, key: CryptoKey, data: BufferSource): Promise<any>;
+    deriveBits(algorithm: AlgorithmIdentifier | EcdhKeyDeriveParams | HkdfParams | Pbkdf2Params, baseKey: CryptoKey, length: number): Promise<ArrayBuffer>;
+    deriveKey(algorithm: AlgorithmIdentifier | EcdhKeyDeriveParams | HkdfParams | Pbkdf2Params, baseKey: CryptoKey, derivedKeyType: AlgorithmIdentifier | AesDerivedKeyParams | HmacImportParams | HkdfParams | Pbkdf2Params, extractable: boolean, keyUsages: KeyUsage[]): Promise<CryptoKey>;
+    digest(algorithm: AlgorithmIdentifier, data: BufferSource): Promise<ArrayBuffer>;
+    encrypt(algorithm: AlgorithmIdentifier | RsaOaepParams | AesCtrParams | AesCbcParams | AesGcmParams, key: CryptoKey, data: BufferSource): Promise<any>;
     exportKey(format: "jwk", key: CryptoKey): Promise<JsonWebKey>;
-    exportKey(format: "raw" | "pkcs8" | "spki", key: CryptoKey): Promise<ArrayBuffer>;
-    exportKey(format: string, key: CryptoKey): Promise<JsonWebKey | ArrayBuffer>;
-    generateKey(algorithm: RsaHashedKeyGenParams | EcKeyGenParams | DhKeyGenParams, extractable: boolean, keyUsages: KeyUsage[]): Promise<CryptoKeyPair>;
+    exportKey(format: Exclude<KeyFormat, "jwk">, key: CryptoKey): Promise<ArrayBuffer>;
+    generateKey(algorithm: RsaHashedKeyGenParams | EcKeyGenParams, extractable: boolean, keyUsages: KeyUsage[]): Promise<CryptoKeyPair>;
     generateKey(algorithm: AesKeyGenParams | HmacKeyGenParams | Pbkdf2Params, extractable: boolean, keyUsages: KeyUsage[]): Promise<CryptoKey>;
     generateKey(algorithm: AlgorithmIdentifier, extractable: boolean, keyUsages: KeyUsage[]): Promise<CryptoKeyPair | CryptoKey>;
-    importKey(format: "jwk", keyData: JsonWebKey, algorithm: AlgorithmIdentifier | RsaHashedImportParams | EcKeyImportParams | HmacImportParams | DhImportKeyParams | AesKeyAlgorithm, extractable: boolean, keyUsages: KeyUsage[]): Promise<CryptoKey>;
-    importKey(format: "raw" | "pkcs8" | "spki", keyData: Int8Array | Int16Array | Int32Array | Uint8Array | Uint16Array | Uint32Array | Uint8ClampedArray | Float32Array | Float64Array | DataView | ArrayBuffer, algorithm: AlgorithmIdentifier | RsaHashedImportParams | EcKeyImportParams | HmacImportParams | DhImportKeyParams | AesKeyAlgorithm, extractable: boolean, keyUsages: KeyUsage[]): Promise<CryptoKey>;
-    importKey(format: string, keyData: JsonWebKey | Int8Array | Int16Array | Int32Array | Uint8Array | Uint16Array | Uint32Array | Uint8ClampedArray | Float32Array | Float64Array | DataView | ArrayBuffer, algorithm: AlgorithmIdentifier | RsaHashedImportParams | EcKeyImportParams | HmacImportParams | DhImportKeyParams | AesKeyAlgorithm, extractable: boolean, keyUsages: KeyUsage[]): Promise<CryptoKey>;
-    sign(algorithm: AlgorithmIdentifier | RsaPssParams | EcdsaParams | AesCmacParams, key: CryptoKey, data: Int8Array | Int16Array | Int32Array | Uint8Array | Uint16Array | Uint32Array | Uint8ClampedArray | Float32Array | Float64Array | DataView | ArrayBuffer): Promise<ArrayBuffer>;
-    unwrapKey(format: "raw" | "pkcs8" | "spki" | "jwk" | string, wrappedKey: Int8Array | Int16Array | Int32Array | Uint8Array | Uint16Array | Uint32Array | Uint8ClampedArray | Float32Array | Float64Array | DataView | ArrayBuffer, unwrappingKey: CryptoKey, unwrapAlgorithm: AlgorithmIdentifier | RsaOaepParams | AesCtrParams | AesCbcParams | AesCmacParams | AesGcmParams | AesCfbParams, unwrappedKeyAlgorithm: AlgorithmIdentifier | RsaHashedImportParams | EcKeyImportParams | HmacImportParams | DhImportKeyParams | AesKeyAlgorithm, extractable: boolean, keyUsages: KeyUsage[]): Promise<CryptoKey>;
-    verify(algorithm: AlgorithmIdentifier | RsaPssParams | EcdsaParams | AesCmacParams, key: CryptoKey, signature: Int8Array | Int16Array | Int32Array | Uint8Array | Uint16Array | Uint32Array | Uint8ClampedArray | Float32Array | Float64Array | DataView | ArrayBuffer, data: Int8Array | Int16Array | Int32Array | Uint8Array | Uint16Array | Uint32Array | Uint8ClampedArray | Float32Array | Float64Array | DataView | ArrayBuffer): Promise<boolean>;
-    wrapKey(format: "raw" | "pkcs8" | "spki" | "jwk" | string, key: CryptoKey, wrappingKey: CryptoKey, wrapAlgorithm: AlgorithmIdentifier | RsaOaepParams | AesCtrParams | AesCbcParams | AesCmacParams | AesGcmParams | AesCfbParams): Promise<ArrayBuffer>;
+    importKey(format: "jwk", keyData: JsonWebKey, algorithm: AlgorithmIdentifier | RsaHashedImportParams | EcKeyImportParams | HmacImportParams | AesKeyAlgorithm, extractable: boolean, keyUsages: KeyUsage[]): Promise<CryptoKey>;
+    importKey(format: Exclude<KeyFormat, "jwk">, keyData: BufferSource, algorithm: AlgorithmIdentifier | RsaHashedImportParams | EcKeyImportParams | HmacImportParams | AesKeyAlgorithm, extractable: boolean, keyUsages: KeyUsage[]): Promise<CryptoKey>;
+    sign(algorithm: AlgorithmIdentifier | RsaPssParams | EcdsaParams, key: CryptoKey, data: BufferSource): Promise<ArrayBuffer>;
+    unwrapKey(format: KeyFormat, wrappedKey: BufferSource, unwrappingKey: CryptoKey, unwrapAlgorithm: AlgorithmIdentifier | RsaOaepParams | AesCtrParams | AesCbcParams | AesGcmParams, unwrappedKeyAlgorithm: AlgorithmIdentifier | RsaHashedImportParams | EcKeyImportParams | HmacImportParams | AesKeyAlgorithm, extractable: boolean, keyUsages: KeyUsage[]): Promise<CryptoKey>;
+    verify(algorithm: AlgorithmIdentifier | RsaPssParams | EcdsaParams, key: CryptoKey, signature: BufferSource, data: BufferSource): Promise<boolean>;
+    wrapKey(format: KeyFormat, key: CryptoKey, wrappingKey: CryptoKey, wrapAlgorithm: AlgorithmIdentifier | RsaOaepParams | AesCtrParams | AesCbcParams | AesGcmParams): Promise<ArrayBuffer>;
 }
 
 declare var SubtleCrypto: {
@@ -15268,17 +14467,6 @@
     new(): SubtleCrypto;
 };
 
-/** This ServiceWorker API interface provides an interface for registering and listing sync registrations. */
-interface SyncManager {
-    getTags(): Promise<string[]>;
-    register(tag: string): Promise<void>;
-}
-
-declare var SyncManager: {
-    prototype: SyncManager;
-    new(): SyncManager;
-};
-
 /** The textual content of Element or Attr. If an element has no markup within its content, it has a single child implementing Text that contains the element's text. However, if the element contains markup, it is parsed into information items and Text nodes that form its children. */
 interface Text extends CharacterData, Slottable {
     readonly assignedSlot: HTMLSlotElement | null;
@@ -15379,36 +14567,6 @@
     new(): TextEncoderStream;
 };
 
-interface TextEvent extends UIEvent {
-    readonly data: string;
-    initTextEvent(typeArg: string, canBubbleArg: boolean, cancelableArg: boolean, viewArg: Window, dataArg: string, inputMethod: number, locale: string): void;
-    readonly DOM_INPUT_METHOD_DROP: number;
-    readonly DOM_INPUT_METHOD_HANDWRITING: number;
-    readonly DOM_INPUT_METHOD_IME: number;
-    readonly DOM_INPUT_METHOD_KEYBOARD: number;
-    readonly DOM_INPUT_METHOD_MULTIMODAL: number;
-    readonly DOM_INPUT_METHOD_OPTION: number;
-    readonly DOM_INPUT_METHOD_PASTE: number;
-    readonly DOM_INPUT_METHOD_SCRIPT: number;
-    readonly DOM_INPUT_METHOD_UNKNOWN: number;
-    readonly DOM_INPUT_METHOD_VOICE: number;
-}
-
-declare var TextEvent: {
-    prototype: TextEvent;
-    new(): TextEvent;
-    readonly DOM_INPUT_METHOD_DROP: number;
-    readonly DOM_INPUT_METHOD_HANDWRITING: number;
-    readonly DOM_INPUT_METHOD_IME: number;
-    readonly DOM_INPUT_METHOD_KEYBOARD: number;
-    readonly DOM_INPUT_METHOD_MULTIMODAL: number;
-    readonly DOM_INPUT_METHOD_OPTION: number;
-    readonly DOM_INPUT_METHOD_PASTE: number;
-    readonly DOM_INPUT_METHOD_SCRIPT: number;
-    readonly DOM_INPUT_METHOD_UNKNOWN: number;
-    readonly DOM_INPUT_METHOD_VOICE: number;
-};
-
 /** The dimensions of a piece of text in the canvas, as created by the CanvasRenderingContext2D.measureText() method. */
 interface TextMetrics {
     /**
@@ -15430,6 +14588,14 @@
     /**
      * Returns the measurement described below.
      */
+    readonly fontBoundingBoxAscent: number;
+    /**
+     * Returns the measurement described below.
+     */
+    readonly fontBoundingBoxDescent: number;
+    /**
+     * Returns the measurement described below.
+     */
     readonly width: number;
 }
 
@@ -15620,8 +14786,6 @@
 
 /** A single contact point on a touch-sensitive device. The contact point is commonly a finger or stylus and the device may be a touchscreen or trackpad. */
 interface Touch {
-    readonly altitudeAngle: number;
-    readonly azimuthAngle: number;
     readonly clientX: number;
     readonly clientY: number;
     readonly force: number;
@@ -15634,7 +14798,6 @@
     readonly screenX: number;
     readonly screenY: number;
     readonly target: EventTarget;
-    readonly touchType: TouchType;
 }
 
 declare var Touch: {
@@ -15695,7 +14858,7 @@
 
 interface TransformStreamDefaultController<O = any> {
     readonly desiredSize: number | null;
-    enqueue(chunk: O): void;
+    enqueue(chunk?: O): void;
     error(reason?: any): void;
     terminate(): void;
 }
@@ -15743,6 +14906,8 @@
     readonly view: Window | null;
     /** @deprecated */
     readonly which: number;
+    /** @deprecated */
+    initUIEvent(typeArg: string, bubblesArg?: boolean, cancelableArg?: boolean, viewArg?: Window | null, detailArg?: number): void;
 }
 
 declare var UIEvent: {
@@ -15770,7 +14935,7 @@
 
 declare var URL: {
     prototype: URL;
-    new(url: string, base?: string | URL): URL;
+    new(url: string | URL, base?: string | URL): URL;
     createObjectURL(object: any): string;
     revokeObjectURL(url: string): void;
 };
@@ -15817,116 +14982,6 @@
     toString(): string;
 };
 
-/** This WebVR API interface represents any VR device supported by this API. It includes generic information such as device IDs and descriptions, as well as methods for starting to present a VR scene, retrieving eye parameters and display capabilities, and other important functionality. */
-interface VRDisplay extends EventTarget {
-    readonly capabilities: VRDisplayCapabilities;
-    depthFar: number;
-    depthNear: number;
-    readonly displayId: number;
-    readonly displayName: string;
-    readonly isConnected: boolean;
-    readonly isPresenting: boolean;
-    readonly stageParameters: VRStageParameters | null;
-    cancelAnimationFrame(handle: number): void;
-    exitPresent(): Promise<void>;
-    getEyeParameters(whichEye: string): VREyeParameters;
-    getFrameData(frameData: VRFrameData): boolean;
-    getLayers(): VRLayer[];
-    /** @deprecated */
-    getPose(): VRPose;
-    requestAnimationFrame(callback: FrameRequestCallback): number;
-    requestPresent(layers: VRLayer[]): Promise<void>;
-    resetPose(): void;
-    submitFrame(pose?: VRPose): void;
-}
-
-declare var VRDisplay: {
-    prototype: VRDisplay;
-    new(): VRDisplay;
-};
-
-/** This WebVR API interface describes the capabilities of a VRDisplay — its features can be used to perform VR device capability tests, for example can it return position information. */
-interface VRDisplayCapabilities {
-    readonly canPresent: boolean;
-    readonly hasExternalDisplay: boolean;
-    readonly hasOrientation: boolean;
-    readonly hasPosition: boolean;
-    readonly maxLayers: number;
-}
-
-declare var VRDisplayCapabilities: {
-    prototype: VRDisplayCapabilities;
-    new(): VRDisplayCapabilities;
-};
-
-/** This WebVR API interface represents represents the event object of WebVR-related events (see the list of WebVR window extensions). */
-interface VRDisplayEvent extends Event {
-    readonly display: VRDisplay;
-    readonly reason: VRDisplayEventReason | null;
-}
-
-declare var VRDisplayEvent: {
-    prototype: VRDisplayEvent;
-    new(type: string, eventInitDict: VRDisplayEventInit): VRDisplayEvent;
-};
-
-/** This WebVR API interface represents all the information required to correctly render a scene for a given eye, including field of view information. */
-interface VREyeParameters {
-    /** @deprecated */
-    readonly fieldOfView: VRFieldOfView;
-    readonly offset: Float32Array;
-    readonly renderHeight: number;
-    readonly renderWidth: number;
-}
-
-declare var VREyeParameters: {
-    prototype: VREyeParameters;
-    new(): VREyeParameters;
-};
-
-/** This WebVR API interface represents a field of view defined by 4 different degree values describing the view from a center point. */
-interface VRFieldOfView {
-    readonly downDegrees: number;
-    readonly leftDegrees: number;
-    readonly rightDegrees: number;
-    readonly upDegrees: number;
-}
-
-declare var VRFieldOfView: {
-    prototype: VRFieldOfView;
-    new(): VRFieldOfView;
-};
-
-/** This WebVR API interface represents all the information needed to render a single frame of a VR scene; constructed by VRDisplay.getFrameData(). */
-interface VRFrameData {
-    readonly leftProjectionMatrix: Float32Array;
-    readonly leftViewMatrix: Float32Array;
-    readonly pose: VRPose;
-    readonly rightProjectionMatrix: Float32Array;
-    readonly rightViewMatrix: Float32Array;
-    readonly timestamp: number;
-}
-
-declare var VRFrameData: {
-    prototype: VRFrameData;
-    new(): VRFrameData;
-};
-
-/** This WebVR API interface represents the state of a VR sensor at a given timestamp (which includes orientation, position, velocity, and acceleration information.) */
-interface VRPose {
-    readonly angularAcceleration: Float32Array | null;
-    readonly angularVelocity: Float32Array | null;
-    readonly linearAcceleration: Float32Array | null;
-    readonly linearVelocity: Float32Array | null;
-    readonly orientation: Float32Array | null;
-    readonly position: Float32Array | null;
-}
-
-declare var VRPose: {
-    prototype: VRPose;
-    new(): VRPose;
-};
-
 interface VTTCue extends TextTrackCue {
     align: AlignSetting;
     line: LineAndPositionSetting;
@@ -15988,7 +15043,9 @@
 
 /** Returned by the HTMLVideoElement.getVideoPlaybackQuality() method and contains metrics that can be used to determine the playback quality of a video. */
 interface VideoPlaybackQuality {
-    readonly creationTime: number;
+    /** @deprecated */
+    readonly corruptedVideoFrames: number;
+    readonly creationTime: DOMHighResTimeStamp;
     readonly droppedVideoFrames: number;
     readonly totalVideoFrames: number;
 }
@@ -15999,7 +15056,7 @@
 };
 
 interface VisualViewportEventMap {
-    "resize": UIEvent;
+    "resize": Event;
     "scroll": Event;
 }
 
@@ -16007,7 +15064,7 @@
     readonly height: number;
     readonly offsetLeft: number;
     readonly offsetTop: number;
-    onresize: ((this: VisualViewport, ev: UIEvent) => any) | null;
+    onresize: ((this: VisualViewport, ev: Event) => any) | null;
     onscroll: ((this: VisualViewport, ev: Event) => any) | null;
     readonly pageLeft: number;
     readonly pageTop: number;
@@ -16062,6 +15119,30 @@
     readonly COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR: GLenum;
 }
 
+interface WEBGL_compressed_texture_etc {
+    readonly COMPRESSED_R11_EAC: GLenum;
+    readonly COMPRESSED_RG11_EAC: GLenum;
+    readonly COMPRESSED_RGB8_ETC2: GLenum;
+    readonly COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2: GLenum;
+    readonly COMPRESSED_RGBA8_ETC2_EAC: GLenum;
+    readonly COMPRESSED_SIGNED_R11_EAC: GLenum;
+    readonly COMPRESSED_SIGNED_RG11_EAC: GLenum;
+    readonly COMPRESSED_SRGB8_ALPHA8_ETC2_EAC: GLenum;
+    readonly COMPRESSED_SRGB8_ETC2: GLenum;
+    readonly COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2: GLenum;
+}
+
+interface WEBGL_compressed_texture_etc1 {
+    readonly COMPRESSED_RGB_ETC1_WEBGL: GLenum;
+}
+
+interface WEBGL_compressed_texture_pvrtc {
+    readonly COMPRESSED_RGBA_PVRTC_2BPPV1_IMG: GLenum;
+    readonly COMPRESSED_RGBA_PVRTC_4BPPV1_IMG: GLenum;
+    readonly COMPRESSED_RGB_PVRTC_2BPPV1_IMG: GLenum;
+    readonly COMPRESSED_RGB_PVRTC_4BPPV1_IMG: GLenum;
+}
+
 /** The WEBGL_compressed_texture_s3tc extension is part of the WebGL API and exposes four S3TC compressed texture formats. */
 interface WEBGL_compressed_texture_s3tc {
     readonly COMPRESSED_RGBA_S3TC_DXT1_EXT: GLenum;
@@ -16152,6 +15233,269 @@
 declare var WebGL2RenderingContext: {
     prototype: WebGL2RenderingContext;
     new(): WebGL2RenderingContext;
+    readonly ACTIVE_UNIFORM_BLOCKS: GLenum;
+    readonly ALREADY_SIGNALED: GLenum;
+    readonly ANY_SAMPLES_PASSED: GLenum;
+    readonly ANY_SAMPLES_PASSED_CONSERVATIVE: GLenum;
+    readonly COLOR: GLenum;
+    readonly COLOR_ATTACHMENT1: GLenum;
+    readonly COLOR_ATTACHMENT10: GLenum;
+    readonly COLOR_ATTACHMENT11: GLenum;
+    readonly COLOR_ATTACHMENT12: GLenum;
+    readonly COLOR_ATTACHMENT13: GLenum;
+    readonly COLOR_ATTACHMENT14: GLenum;
+    readonly COLOR_ATTACHMENT15: GLenum;
+    readonly COLOR_ATTACHMENT2: GLenum;
+    readonly COLOR_ATTACHMENT3: GLenum;
+    readonly COLOR_ATTACHMENT4: GLenum;
+    readonly COLOR_ATTACHMENT5: GLenum;
+    readonly COLOR_ATTACHMENT6: GLenum;
+    readonly COLOR_ATTACHMENT7: GLenum;
+    readonly COLOR_ATTACHMENT8: GLenum;
+    readonly COLOR_ATTACHMENT9: GLenum;
+    readonly COMPARE_REF_TO_TEXTURE: GLenum;
+    readonly CONDITION_SATISFIED: GLenum;
+    readonly COPY_READ_BUFFER: GLenum;
+    readonly COPY_READ_BUFFER_BINDING: GLenum;
+    readonly COPY_WRITE_BUFFER: GLenum;
+    readonly COPY_WRITE_BUFFER_BINDING: GLenum;
+    readonly CURRENT_QUERY: GLenum;
+    readonly DEPTH: GLenum;
+    readonly DEPTH24_STENCIL8: GLenum;
+    readonly DEPTH32F_STENCIL8: GLenum;
+    readonly DEPTH_COMPONENT24: GLenum;
+    readonly DEPTH_COMPONENT32F: GLenum;
+    readonly DRAW_BUFFER0: GLenum;
+    readonly DRAW_BUFFER1: GLenum;
+    readonly DRAW_BUFFER10: GLenum;
+    readonly DRAW_BUFFER11: GLenum;
+    readonly DRAW_BUFFER12: GLenum;
+    readonly DRAW_BUFFER13: GLenum;
+    readonly DRAW_BUFFER14: GLenum;
+    readonly DRAW_BUFFER15: GLenum;
+    readonly DRAW_BUFFER2: GLenum;
+    readonly DRAW_BUFFER3: GLenum;
+    readonly DRAW_BUFFER4: GLenum;
+    readonly DRAW_BUFFER5: GLenum;
+    readonly DRAW_BUFFER6: GLenum;
+    readonly DRAW_BUFFER7: GLenum;
+    readonly DRAW_BUFFER8: GLenum;
+    readonly DRAW_BUFFER9: GLenum;
+    readonly DRAW_FRAMEBUFFER: GLenum;
+    readonly DRAW_FRAMEBUFFER_BINDING: GLenum;
+    readonly DYNAMIC_COPY: GLenum;
+    readonly DYNAMIC_READ: GLenum;
+    readonly FLOAT_32_UNSIGNED_INT_24_8_REV: GLenum;
+    readonly FLOAT_MAT2x3: GLenum;
+    readonly FLOAT_MAT2x4: GLenum;
+    readonly FLOAT_MAT3x2: GLenum;
+    readonly FLOAT_MAT3x4: GLenum;
+    readonly FLOAT_MAT4x2: GLenum;
+    readonly FLOAT_MAT4x3: GLenum;
+    readonly FRAGMENT_SHADER_DERIVATIVE_HINT: GLenum;
+    readonly FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE: GLenum;
+    readonly FRAMEBUFFER_ATTACHMENT_BLUE_SIZE: GLenum;
+    readonly FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING: GLenum;
+    readonly FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE: GLenum;
+    readonly FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE: GLenum;
+    readonly FRAMEBUFFER_ATTACHMENT_GREEN_SIZE: GLenum;
+    readonly FRAMEBUFFER_ATTACHMENT_RED_SIZE: GLenum;
+    readonly FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE: GLenum;
+    readonly FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER: GLenum;
+    readonly FRAMEBUFFER_DEFAULT: GLenum;
+    readonly FRAMEBUFFER_INCOMPLETE_MULTISAMPLE: GLenum;
+    readonly HALF_FLOAT: GLenum;
+    readonly INTERLEAVED_ATTRIBS: GLenum;
+    readonly INT_2_10_10_10_REV: GLenum;
+    readonly INT_SAMPLER_2D: GLenum;
+    readonly INT_SAMPLER_2D_ARRAY: GLenum;
+    readonly INT_SAMPLER_3D: GLenum;
+    readonly INT_SAMPLER_CUBE: GLenum;
+    readonly INVALID_INDEX: GLenum;
+    readonly MAX: GLenum;
+    readonly MAX_3D_TEXTURE_SIZE: GLenum;
+    readonly MAX_ARRAY_TEXTURE_LAYERS: GLenum;
+    readonly MAX_CLIENT_WAIT_TIMEOUT_WEBGL: GLenum;
+    readonly MAX_COLOR_ATTACHMENTS: GLenum;
+    readonly MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS: GLenum;
+    readonly MAX_COMBINED_UNIFORM_BLOCKS: GLenum;
+    readonly MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS: GLenum;
+    readonly MAX_DRAW_BUFFERS: GLenum;
+    readonly MAX_ELEMENTS_INDICES: GLenum;
+    readonly MAX_ELEMENTS_VERTICES: GLenum;
+    readonly MAX_ELEMENT_INDEX: GLenum;
+    readonly MAX_FRAGMENT_INPUT_COMPONENTS: GLenum;
+    readonly MAX_FRAGMENT_UNIFORM_BLOCKS: GLenum;
+    readonly MAX_FRAGMENT_UNIFORM_COMPONENTS: GLenum;
+    readonly MAX_PROGRAM_TEXEL_OFFSET: GLenum;
+    readonly MAX_SAMPLES: GLenum;
+    readonly MAX_SERVER_WAIT_TIMEOUT: GLenum;
+    readonly MAX_TEXTURE_LOD_BIAS: GLenum;
+    readonly MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS: GLenum;
+    readonly MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS: GLenum;
+    readonly MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS: GLenum;
+    readonly MAX_UNIFORM_BLOCK_SIZE: GLenum;
+    readonly MAX_UNIFORM_BUFFER_BINDINGS: GLenum;
+    readonly MAX_VARYING_COMPONENTS: GLenum;
+    readonly MAX_VERTEX_OUTPUT_COMPONENTS: GLenum;
+    readonly MAX_VERTEX_UNIFORM_BLOCKS: GLenum;
+    readonly MAX_VERTEX_UNIFORM_COMPONENTS: GLenum;
+    readonly MIN: GLenum;
+    readonly MIN_PROGRAM_TEXEL_OFFSET: GLenum;
+    readonly OBJECT_TYPE: GLenum;
+    readonly PACK_ROW_LENGTH: GLenum;
+    readonly PACK_SKIP_PIXELS: GLenum;
+    readonly PACK_SKIP_ROWS: GLenum;
+    readonly PIXEL_PACK_BUFFER: GLenum;
+    readonly PIXEL_PACK_BUFFER_BINDING: GLenum;
+    readonly PIXEL_UNPACK_BUFFER: GLenum;
+    readonly PIXEL_UNPACK_BUFFER_BINDING: GLenum;
+    readonly QUERY_RESULT: GLenum;
+    readonly QUERY_RESULT_AVAILABLE: GLenum;
+    readonly R11F_G11F_B10F: GLenum;
+    readonly R16F: GLenum;
+    readonly R16I: GLenum;
+    readonly R16UI: GLenum;
+    readonly R32F: GLenum;
+    readonly R32I: GLenum;
+    readonly R32UI: GLenum;
+    readonly R8: GLenum;
+    readonly R8I: GLenum;
+    readonly R8UI: GLenum;
+    readonly R8_SNORM: GLenum;
+    readonly RASTERIZER_DISCARD: GLenum;
+    readonly READ_BUFFER: GLenum;
+    readonly READ_FRAMEBUFFER: GLenum;
+    readonly READ_FRAMEBUFFER_BINDING: GLenum;
+    readonly RED: GLenum;
+    readonly RED_INTEGER: GLenum;
+    readonly RENDERBUFFER_SAMPLES: GLenum;
+    readonly RG: GLenum;
+    readonly RG16F: GLenum;
+    readonly RG16I: GLenum;
+    readonly RG16UI: GLenum;
+    readonly RG32F: GLenum;
+    readonly RG32I: GLenum;
+    readonly RG32UI: GLenum;
+    readonly RG8: GLenum;
+    readonly RG8I: GLenum;
+    readonly RG8UI: GLenum;
+    readonly RG8_SNORM: GLenum;
+    readonly RGB10_A2: GLenum;
+    readonly RGB10_A2UI: GLenum;
+    readonly RGB16F: GLenum;
+    readonly RGB16I: GLenum;
+    readonly RGB16UI: GLenum;
+    readonly RGB32F: GLenum;
+    readonly RGB32I: GLenum;
+    readonly RGB32UI: GLenum;
+    readonly RGB8: GLenum;
+    readonly RGB8I: GLenum;
+    readonly RGB8UI: GLenum;
+    readonly RGB8_SNORM: GLenum;
+    readonly RGB9_E5: GLenum;
+    readonly RGBA16F: GLenum;
+    readonly RGBA16I: GLenum;
+    readonly RGBA16UI: GLenum;
+    readonly RGBA32F: GLenum;
+    readonly RGBA32I: GLenum;
+    readonly RGBA32UI: GLenum;
+    readonly RGBA8: GLenum;
+    readonly RGBA8I: GLenum;
+    readonly RGBA8UI: GLenum;
+    readonly RGBA8_SNORM: GLenum;
+    readonly RGBA_INTEGER: GLenum;
+    readonly RGB_INTEGER: GLenum;
+    readonly RG_INTEGER: GLenum;
+    readonly SAMPLER_2D_ARRAY: GLenum;
+    readonly SAMPLER_2D_ARRAY_SHADOW: GLenum;
+    readonly SAMPLER_2D_SHADOW: GLenum;
+    readonly SAMPLER_3D: GLenum;
+    readonly SAMPLER_BINDING: GLenum;
+    readonly SAMPLER_CUBE_SHADOW: GLenum;
+    readonly SEPARATE_ATTRIBS: GLenum;
+    readonly SIGNALED: GLenum;
+    readonly SIGNED_NORMALIZED: GLenum;
+    readonly SRGB: GLenum;
+    readonly SRGB8: GLenum;
+    readonly SRGB8_ALPHA8: GLenum;
+    readonly STATIC_COPY: GLenum;
+    readonly STATIC_READ: GLenum;
+    readonly STENCIL: GLenum;
+    readonly STREAM_COPY: GLenum;
+    readonly STREAM_READ: GLenum;
+    readonly SYNC_CONDITION: GLenum;
+    readonly SYNC_FENCE: GLenum;
+    readonly SYNC_FLAGS: GLenum;
+    readonly SYNC_FLUSH_COMMANDS_BIT: GLenum;
+    readonly SYNC_GPU_COMMANDS_COMPLETE: GLenum;
+    readonly SYNC_STATUS: GLenum;
+    readonly TEXTURE_2D_ARRAY: GLenum;
+    readonly TEXTURE_3D: GLenum;
+    readonly TEXTURE_BASE_LEVEL: GLenum;
+    readonly TEXTURE_BINDING_2D_ARRAY: GLenum;
+    readonly TEXTURE_BINDING_3D: GLenum;
+    readonly TEXTURE_COMPARE_FUNC: GLenum;
+    readonly TEXTURE_COMPARE_MODE: GLenum;
+    readonly TEXTURE_IMMUTABLE_FORMAT: GLenum;
+    readonly TEXTURE_IMMUTABLE_LEVELS: GLenum;
+    readonly TEXTURE_MAX_LEVEL: GLenum;
+    readonly TEXTURE_MAX_LOD: GLenum;
+    readonly TEXTURE_MIN_LOD: GLenum;
+    readonly TEXTURE_WRAP_R: GLenum;
+    readonly TIMEOUT_EXPIRED: GLenum;
+    readonly TIMEOUT_IGNORED: GLint64;
+    readonly TRANSFORM_FEEDBACK: GLenum;
+    readonly TRANSFORM_FEEDBACK_ACTIVE: GLenum;
+    readonly TRANSFORM_FEEDBACK_BINDING: GLenum;
+    readonly TRANSFORM_FEEDBACK_BUFFER: GLenum;
+    readonly TRANSFORM_FEEDBACK_BUFFER_BINDING: GLenum;
+    readonly TRANSFORM_FEEDBACK_BUFFER_MODE: GLenum;
+    readonly TRANSFORM_FEEDBACK_BUFFER_SIZE: GLenum;
+    readonly TRANSFORM_FEEDBACK_BUFFER_START: GLenum;
+    readonly TRANSFORM_FEEDBACK_PAUSED: GLenum;
+    readonly TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN: GLenum;
+    readonly TRANSFORM_FEEDBACK_VARYINGS: GLenum;
+    readonly UNIFORM_ARRAY_STRIDE: GLenum;
+    readonly UNIFORM_BLOCK_ACTIVE_UNIFORMS: GLenum;
+    readonly UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES: GLenum;
+    readonly UNIFORM_BLOCK_BINDING: GLenum;
+    readonly UNIFORM_BLOCK_DATA_SIZE: GLenum;
+    readonly UNIFORM_BLOCK_INDEX: GLenum;
+    readonly UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER: GLenum;
+    readonly UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER: GLenum;
+    readonly UNIFORM_BUFFER: GLenum;
+    readonly UNIFORM_BUFFER_BINDING: GLenum;
+    readonly UNIFORM_BUFFER_OFFSET_ALIGNMENT: GLenum;
+    readonly UNIFORM_BUFFER_SIZE: GLenum;
+    readonly UNIFORM_BUFFER_START: GLenum;
+    readonly UNIFORM_IS_ROW_MAJOR: GLenum;
+    readonly UNIFORM_MATRIX_STRIDE: GLenum;
+    readonly UNIFORM_OFFSET: GLenum;
+    readonly UNIFORM_SIZE: GLenum;
+    readonly UNIFORM_TYPE: GLenum;
+    readonly UNPACK_IMAGE_HEIGHT: GLenum;
+    readonly UNPACK_ROW_LENGTH: GLenum;
+    readonly UNPACK_SKIP_IMAGES: GLenum;
+    readonly UNPACK_SKIP_PIXELS: GLenum;
+    readonly UNPACK_SKIP_ROWS: GLenum;
+    readonly UNSIGNALED: GLenum;
+    readonly UNSIGNED_INT_10F_11F_11F_REV: GLenum;
+    readonly UNSIGNED_INT_24_8: GLenum;
+    readonly UNSIGNED_INT_2_10_10_10_REV: GLenum;
+    readonly UNSIGNED_INT_5_9_9_9_REV: GLenum;
+    readonly UNSIGNED_INT_SAMPLER_2D: GLenum;
+    readonly UNSIGNED_INT_SAMPLER_2D_ARRAY: GLenum;
+    readonly UNSIGNED_INT_SAMPLER_3D: GLenum;
+    readonly UNSIGNED_INT_SAMPLER_CUBE: GLenum;
+    readonly UNSIGNED_INT_VEC2: GLenum;
+    readonly UNSIGNED_INT_VEC3: GLenum;
+    readonly UNSIGNED_INT_VEC4: GLenum;
+    readonly UNSIGNED_NORMALIZED: GLenum;
+    readonly VERTEX_ARRAY_BINDING: GLenum;
+    readonly VERTEX_ATTRIB_ARRAY_DIVISOR: GLenum;
+    readonly VERTEX_ATTRIB_ARRAY_INTEGER: GLenum;
+    readonly WAIT_FAILED: GLenum;
     readonly ACTIVE_ATTRIBUTES: GLenum;
     readonly ACTIVE_TEXTURE: GLenum;
     readonly ACTIVE_UNIFORMS: GLenum;
@@ -16448,269 +15792,6 @@
     readonly VERTEX_SHADER: GLenum;
     readonly VIEWPORT: GLenum;
     readonly ZERO: GLenum;
-    readonly ACTIVE_UNIFORM_BLOCKS: GLenum;
-    readonly ALREADY_SIGNALED: GLenum;
-    readonly ANY_SAMPLES_PASSED: GLenum;
-    readonly ANY_SAMPLES_PASSED_CONSERVATIVE: GLenum;
-    readonly COLOR: GLenum;
-    readonly COLOR_ATTACHMENT1: GLenum;
-    readonly COLOR_ATTACHMENT10: GLenum;
-    readonly COLOR_ATTACHMENT11: GLenum;
-    readonly COLOR_ATTACHMENT12: GLenum;
-    readonly COLOR_ATTACHMENT13: GLenum;
-    readonly COLOR_ATTACHMENT14: GLenum;
-    readonly COLOR_ATTACHMENT15: GLenum;
-    readonly COLOR_ATTACHMENT2: GLenum;
-    readonly COLOR_ATTACHMENT3: GLenum;
-    readonly COLOR_ATTACHMENT4: GLenum;
-    readonly COLOR_ATTACHMENT5: GLenum;
-    readonly COLOR_ATTACHMENT6: GLenum;
-    readonly COLOR_ATTACHMENT7: GLenum;
-    readonly COLOR_ATTACHMENT8: GLenum;
-    readonly COLOR_ATTACHMENT9: GLenum;
-    readonly COMPARE_REF_TO_TEXTURE: GLenum;
-    readonly CONDITION_SATISFIED: GLenum;
-    readonly COPY_READ_BUFFER: GLenum;
-    readonly COPY_READ_BUFFER_BINDING: GLenum;
-    readonly COPY_WRITE_BUFFER: GLenum;
-    readonly COPY_WRITE_BUFFER_BINDING: GLenum;
-    readonly CURRENT_QUERY: GLenum;
-    readonly DEPTH: GLenum;
-    readonly DEPTH24_STENCIL8: GLenum;
-    readonly DEPTH32F_STENCIL8: GLenum;
-    readonly DEPTH_COMPONENT24: GLenum;
-    readonly DEPTH_COMPONENT32F: GLenum;
-    readonly DRAW_BUFFER0: GLenum;
-    readonly DRAW_BUFFER1: GLenum;
-    readonly DRAW_BUFFER10: GLenum;
-    readonly DRAW_BUFFER11: GLenum;
-    readonly DRAW_BUFFER12: GLenum;
-    readonly DRAW_BUFFER13: GLenum;
-    readonly DRAW_BUFFER14: GLenum;
-    readonly DRAW_BUFFER15: GLenum;
-    readonly DRAW_BUFFER2: GLenum;
-    readonly DRAW_BUFFER3: GLenum;
-    readonly DRAW_BUFFER4: GLenum;
-    readonly DRAW_BUFFER5: GLenum;
-    readonly DRAW_BUFFER6: GLenum;
-    readonly DRAW_BUFFER7: GLenum;
-    readonly DRAW_BUFFER8: GLenum;
-    readonly DRAW_BUFFER9: GLenum;
-    readonly DRAW_FRAMEBUFFER: GLenum;
-    readonly DRAW_FRAMEBUFFER_BINDING: GLenum;
-    readonly DYNAMIC_COPY: GLenum;
-    readonly DYNAMIC_READ: GLenum;
-    readonly FLOAT_32_UNSIGNED_INT_24_8_REV: GLenum;
-    readonly FLOAT_MAT2x3: GLenum;
-    readonly FLOAT_MAT2x4: GLenum;
-    readonly FLOAT_MAT3x2: GLenum;
-    readonly FLOAT_MAT3x4: GLenum;
-    readonly FLOAT_MAT4x2: GLenum;
-    readonly FLOAT_MAT4x3: GLenum;
-    readonly FRAGMENT_SHADER_DERIVATIVE_HINT: GLenum;
-    readonly FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE: GLenum;
-    readonly FRAMEBUFFER_ATTACHMENT_BLUE_SIZE: GLenum;
-    readonly FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING: GLenum;
-    readonly FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE: GLenum;
-    readonly FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE: GLenum;
-    readonly FRAMEBUFFER_ATTACHMENT_GREEN_SIZE: GLenum;
-    readonly FRAMEBUFFER_ATTACHMENT_RED_SIZE: GLenum;
-    readonly FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE: GLenum;
-    readonly FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER: GLenum;
-    readonly FRAMEBUFFER_DEFAULT: GLenum;
-    readonly FRAMEBUFFER_INCOMPLETE_MULTISAMPLE: GLenum;
-    readonly HALF_FLOAT: GLenum;
-    readonly INTERLEAVED_ATTRIBS: GLenum;
-    readonly INT_2_10_10_10_REV: GLenum;
-    readonly INT_SAMPLER_2D: GLenum;
-    readonly INT_SAMPLER_2D_ARRAY: GLenum;
-    readonly INT_SAMPLER_3D: GLenum;
-    readonly INT_SAMPLER_CUBE: GLenum;
-    readonly INVALID_INDEX: GLenum;
-    readonly MAX: GLenum;
-    readonly MAX_3D_TEXTURE_SIZE: GLenum;
-    readonly MAX_ARRAY_TEXTURE_LAYERS: GLenum;
-    readonly MAX_CLIENT_WAIT_TIMEOUT_WEBGL: GLenum;
-    readonly MAX_COLOR_ATTACHMENTS: GLenum;
-    readonly MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS: GLenum;
-    readonly MAX_COMBINED_UNIFORM_BLOCKS: GLenum;
-    readonly MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS: GLenum;
-    readonly MAX_DRAW_BUFFERS: GLenum;
-    readonly MAX_ELEMENTS_INDICES: GLenum;
-    readonly MAX_ELEMENTS_VERTICES: GLenum;
-    readonly MAX_ELEMENT_INDEX: GLenum;
-    readonly MAX_FRAGMENT_INPUT_COMPONENTS: GLenum;
-    readonly MAX_FRAGMENT_UNIFORM_BLOCKS: GLenum;
-    readonly MAX_FRAGMENT_UNIFORM_COMPONENTS: GLenum;
-    readonly MAX_PROGRAM_TEXEL_OFFSET: GLenum;
-    readonly MAX_SAMPLES: GLenum;
-    readonly MAX_SERVER_WAIT_TIMEOUT: GLenum;
-    readonly MAX_TEXTURE_LOD_BIAS: GLenum;
-    readonly MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS: GLenum;
-    readonly MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS: GLenum;
-    readonly MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS: GLenum;
-    readonly MAX_UNIFORM_BLOCK_SIZE: GLenum;
-    readonly MAX_UNIFORM_BUFFER_BINDINGS: GLenum;
-    readonly MAX_VARYING_COMPONENTS: GLenum;
-    readonly MAX_VERTEX_OUTPUT_COMPONENTS: GLenum;
-    readonly MAX_VERTEX_UNIFORM_BLOCKS: GLenum;
-    readonly MAX_VERTEX_UNIFORM_COMPONENTS: GLenum;
-    readonly MIN: GLenum;
-    readonly MIN_PROGRAM_TEXEL_OFFSET: GLenum;
-    readonly OBJECT_TYPE: GLenum;
-    readonly PACK_ROW_LENGTH: GLenum;
-    readonly PACK_SKIP_PIXELS: GLenum;
-    readonly PACK_SKIP_ROWS: GLenum;
-    readonly PIXEL_PACK_BUFFER: GLenum;
-    readonly PIXEL_PACK_BUFFER_BINDING: GLenum;
-    readonly PIXEL_UNPACK_BUFFER: GLenum;
-    readonly PIXEL_UNPACK_BUFFER_BINDING: GLenum;
-    readonly QUERY_RESULT: GLenum;
-    readonly QUERY_RESULT_AVAILABLE: GLenum;
-    readonly R11F_G11F_B10F: GLenum;
-    readonly R16F: GLenum;
-    readonly R16I: GLenum;
-    readonly R16UI: GLenum;
-    readonly R32F: GLenum;
-    readonly R32I: GLenum;
-    readonly R32UI: GLenum;
-    readonly R8: GLenum;
-    readonly R8I: GLenum;
-    readonly R8UI: GLenum;
-    readonly R8_SNORM: GLenum;
-    readonly RASTERIZER_DISCARD: GLenum;
-    readonly READ_BUFFER: GLenum;
-    readonly READ_FRAMEBUFFER: GLenum;
-    readonly READ_FRAMEBUFFER_BINDING: GLenum;
-    readonly RED: GLenum;
-    readonly RED_INTEGER: GLenum;
-    readonly RENDERBUFFER_SAMPLES: GLenum;
-    readonly RG: GLenum;
-    readonly RG16F: GLenum;
-    readonly RG16I: GLenum;
-    readonly RG16UI: GLenum;
-    readonly RG32F: GLenum;
-    readonly RG32I: GLenum;
-    readonly RG32UI: GLenum;
-    readonly RG8: GLenum;
-    readonly RG8I: GLenum;
-    readonly RG8UI: GLenum;
-    readonly RG8_SNORM: GLenum;
-    readonly RGB10_A2: GLenum;
-    readonly RGB10_A2UI: GLenum;
-    readonly RGB16F: GLenum;
-    readonly RGB16I: GLenum;
-    readonly RGB16UI: GLenum;
-    readonly RGB32F: GLenum;
-    readonly RGB32I: GLenum;
-    readonly RGB32UI: GLenum;
-    readonly RGB8: GLenum;
-    readonly RGB8I: GLenum;
-    readonly RGB8UI: GLenum;
-    readonly RGB8_SNORM: GLenum;
-    readonly RGB9_E5: GLenum;
-    readonly RGBA16F: GLenum;
-    readonly RGBA16I: GLenum;
-    readonly RGBA16UI: GLenum;
-    readonly RGBA32F: GLenum;
-    readonly RGBA32I: GLenum;
-    readonly RGBA32UI: GLenum;
-    readonly RGBA8: GLenum;
-    readonly RGBA8I: GLenum;
-    readonly RGBA8UI: GLenum;
-    readonly RGBA8_SNORM: GLenum;
-    readonly RGBA_INTEGER: GLenum;
-    readonly RGB_INTEGER: GLenum;
-    readonly RG_INTEGER: GLenum;
-    readonly SAMPLER_2D_ARRAY: GLenum;
-    readonly SAMPLER_2D_ARRAY_SHADOW: GLenum;
-    readonly SAMPLER_2D_SHADOW: GLenum;
-    readonly SAMPLER_3D: GLenum;
-    readonly SAMPLER_BINDING: GLenum;
-    readonly SAMPLER_CUBE_SHADOW: GLenum;
-    readonly SEPARATE_ATTRIBS: GLenum;
-    readonly SIGNALED: GLenum;
-    readonly SIGNED_NORMALIZED: GLenum;
-    readonly SRGB: GLenum;
-    readonly SRGB8: GLenum;
-    readonly SRGB8_ALPHA8: GLenum;
-    readonly STATIC_COPY: GLenum;
-    readonly STATIC_READ: GLenum;
-    readonly STENCIL: GLenum;
-    readonly STREAM_COPY: GLenum;
-    readonly STREAM_READ: GLenum;
-    readonly SYNC_CONDITION: GLenum;
-    readonly SYNC_FENCE: GLenum;
-    readonly SYNC_FLAGS: GLenum;
-    readonly SYNC_FLUSH_COMMANDS_BIT: GLenum;
-    readonly SYNC_GPU_COMMANDS_COMPLETE: GLenum;
-    readonly SYNC_STATUS: GLenum;
-    readonly TEXTURE_2D_ARRAY: GLenum;
-    readonly TEXTURE_3D: GLenum;
-    readonly TEXTURE_BASE_LEVEL: GLenum;
-    readonly TEXTURE_BINDING_2D_ARRAY: GLenum;
-    readonly TEXTURE_BINDING_3D: GLenum;
-    readonly TEXTURE_COMPARE_FUNC: GLenum;
-    readonly TEXTURE_COMPARE_MODE: GLenum;
-    readonly TEXTURE_IMMUTABLE_FORMAT: GLenum;
-    readonly TEXTURE_IMMUTABLE_LEVELS: GLenum;
-    readonly TEXTURE_MAX_LEVEL: GLenum;
-    readonly TEXTURE_MAX_LOD: GLenum;
-    readonly TEXTURE_MIN_LOD: GLenum;
-    readonly TEXTURE_WRAP_R: GLenum;
-    readonly TIMEOUT_EXPIRED: GLenum;
-    readonly TIMEOUT_IGNORED: GLint64;
-    readonly TRANSFORM_FEEDBACK: GLenum;
-    readonly TRANSFORM_FEEDBACK_ACTIVE: GLenum;
-    readonly TRANSFORM_FEEDBACK_BINDING: GLenum;
-    readonly TRANSFORM_FEEDBACK_BUFFER: GLenum;
-    readonly TRANSFORM_FEEDBACK_BUFFER_BINDING: GLenum;
-    readonly TRANSFORM_FEEDBACK_BUFFER_MODE: GLenum;
-    readonly TRANSFORM_FEEDBACK_BUFFER_SIZE: GLenum;
-    readonly TRANSFORM_FEEDBACK_BUFFER_START: GLenum;
-    readonly TRANSFORM_FEEDBACK_PAUSED: GLenum;
-    readonly TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN: GLenum;
-    readonly TRANSFORM_FEEDBACK_VARYINGS: GLenum;
-    readonly UNIFORM_ARRAY_STRIDE: GLenum;
-    readonly UNIFORM_BLOCK_ACTIVE_UNIFORMS: GLenum;
-    readonly UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES: GLenum;
-    readonly UNIFORM_BLOCK_BINDING: GLenum;
-    readonly UNIFORM_BLOCK_DATA_SIZE: GLenum;
-    readonly UNIFORM_BLOCK_INDEX: GLenum;
-    readonly UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER: GLenum;
-    readonly UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER: GLenum;
-    readonly UNIFORM_BUFFER: GLenum;
-    readonly UNIFORM_BUFFER_BINDING: GLenum;
-    readonly UNIFORM_BUFFER_OFFSET_ALIGNMENT: GLenum;
-    readonly UNIFORM_BUFFER_SIZE: GLenum;
-    readonly UNIFORM_BUFFER_START: GLenum;
-    readonly UNIFORM_IS_ROW_MAJOR: GLenum;
-    readonly UNIFORM_MATRIX_STRIDE: GLenum;
-    readonly UNIFORM_OFFSET: GLenum;
-    readonly UNIFORM_SIZE: GLenum;
-    readonly UNIFORM_TYPE: GLenum;
-    readonly UNPACK_IMAGE_HEIGHT: GLenum;
-    readonly UNPACK_ROW_LENGTH: GLenum;
-    readonly UNPACK_SKIP_IMAGES: GLenum;
-    readonly UNPACK_SKIP_PIXELS: GLenum;
-    readonly UNPACK_SKIP_ROWS: GLenum;
-    readonly UNSIGNALED: GLenum;
-    readonly UNSIGNED_INT_10F_11F_11F_REV: GLenum;
-    readonly UNSIGNED_INT_24_8: GLenum;
-    readonly UNSIGNED_INT_2_10_10_10_REV: GLenum;
-    readonly UNSIGNED_INT_5_9_9_9_REV: GLenum;
-    readonly UNSIGNED_INT_SAMPLER_2D: GLenum;
-    readonly UNSIGNED_INT_SAMPLER_2D_ARRAY: GLenum;
-    readonly UNSIGNED_INT_SAMPLER_3D: GLenum;
-    readonly UNSIGNED_INT_SAMPLER_CUBE: GLenum;
-    readonly UNSIGNED_INT_VEC2: GLenum;
-    readonly UNSIGNED_INT_VEC3: GLenum;
-    readonly UNSIGNED_INT_VEC4: GLenum;
-    readonly UNSIGNED_NORMALIZED: GLenum;
-    readonly VERTEX_ARRAY_BINDING: GLenum;
-    readonly VERTEX_ATTRIB_ARRAY_DIVISOR: GLenum;
-    readonly VERTEX_ATTRIB_ARRAY_INTEGER: GLenum;
-    readonly WAIT_FAILED: GLenum;
 };
 
 interface WebGL2RenderingContextBase {
@@ -17482,7 +16563,7 @@
 };
 
 interface WebGLRenderingContextBase {
-    readonly canvas: HTMLCanvasElement | OffscreenCanvas;
+    readonly canvas: HTMLCanvasElement;
     readonly drawingBufferHeight: GLsizei;
     readonly drawingBufferWidth: GLsizei;
     activeTexture(texture: GLenum): void;
@@ -17543,13 +16624,21 @@
     getContextAttributes(): WebGLContextAttributes | null;
     getError(): GLenum;
     getExtension(extensionName: "EXT_blend_minmax"): EXT_blend_minmax | null;
+    getExtension(extensionName: "EXT_color_buffer_float"): EXT_color_buffer_float | null;
+    getExtension(extensionName: "EXT_color_buffer_half_float"): EXT_color_buffer_half_float | null;
+    getExtension(extensionName: "EXT_float_blend"): EXT_float_blend | null;
     getExtension(extensionName: "EXT_texture_filter_anisotropic"): EXT_texture_filter_anisotropic | null;
     getExtension(extensionName: "EXT_frag_depth"): EXT_frag_depth | null;
     getExtension(extensionName: "EXT_shader_texture_lod"): EXT_shader_texture_lod | null;
     getExtension(extensionName: "EXT_sRGB"): EXT_sRGB | null;
+    getExtension(extensionName: "KHR_parallel_shader_compile"): KHR_parallel_shader_compile | null;
     getExtension(extensionName: "OES_vertex_array_object"): OES_vertex_array_object | null;
+    getExtension(extensionName: "OVR_multiview2"): OVR_multiview2 | null;
     getExtension(extensionName: "WEBGL_color_buffer_float"): WEBGL_color_buffer_float | null;
     getExtension(extensionName: "WEBGL_compressed_texture_astc"): WEBGL_compressed_texture_astc | null;
+    getExtension(extensionName: "WEBGL_compressed_texture_etc"): WEBGL_compressed_texture_etc | null;
+    getExtension(extensionName: "WEBGL_compressed_texture_etc1"): WEBGL_compressed_texture_etc1 | null;
+    getExtension(extensionName: "WEBGL_compressed_texture_pvrtc"): WEBGL_compressed_texture_pvrtc | null;
     getExtension(extensionName: "WEBGL_compressed_texture_s3tc_srgb"): WEBGL_compressed_texture_s3tc_srgb | null;
     getExtension(extensionName: "WEBGL_debug_shaders"): WEBGL_debug_shaders | null;
     getExtension(extensionName: "WEBGL_draw_buffers"): WEBGL_draw_buffers | null;
@@ -17564,7 +16653,7 @@
     getExtension(extensionName: "OES_standard_derivatives"): OES_standard_derivatives | null;
     getExtension(extensionName: "OES_element_index_uint"): OES_element_index_uint | null;
     getExtension(extensionName: "ANGLE_instanced_arrays"): ANGLE_instanced_arrays | null;
-    getExtension(extensionName: string): any;
+    getExtension(name: string): any;
     getFramebufferAttachmentParameter(target: GLenum, attachment: GLenum, pname: GLenum): any;
     getParameter(pname: GLenum): any;
     getProgramInfoLog(program: WebGLProgram): string | null;
@@ -18021,16 +17110,6 @@
 interface WebGLVertexArrayObjectOES {
 }
 
-interface WebKitPoint {
-    x: number;
-    y: number;
-}
-
-declare var WebKitPoint: {
-    prototype: WebKitPoint;
-    new(x?: number, y?: number): WebKitPoint;
-};
-
 interface WebSocketEventMap {
     "close": CloseEvent;
     "error": Event;
@@ -18092,7 +17171,7 @@
 
 declare var WebSocket: {
     prototype: WebSocket;
-    new(url: string, protocols?: string | string[]): WebSocket;
+    new(url: string | URL, protocols?: string | string[]): WebSocket;
     readonly CLOSED: number;
     readonly CLOSING: number;
     readonly CONNECTING: number;
@@ -18119,139 +17198,67 @@
 };
 
 interface WindowEventMap extends GlobalEventHandlersEventMap, WindowEventHandlersEventMap {
-    "abort": UIEvent;
-    "afterprint": Event;
-    "beforeprint": Event;
-    "beforeunload": BeforeUnloadEvent;
-    "blur": FocusEvent;
-    "canplay": Event;
-    "canplaythrough": Event;
-    "change": Event;
-    "click": MouseEvent;
-    "compassneedscalibration": Event;
-    "contextmenu": MouseEvent;
-    "dblclick": MouseEvent;
     "devicemotion": DeviceMotionEvent;
     "deviceorientation": DeviceOrientationEvent;
-    "deviceorientationabsolute": DeviceOrientationEvent;
-    "drag": DragEvent;
-    "dragend": DragEvent;
-    "dragenter": DragEvent;
-    "dragleave": DragEvent;
-    "dragover": DragEvent;
-    "dragstart": DragEvent;
-    "drop": DragEvent;
-    "durationchange": Event;
-    "emptied": Event;
-    "ended": Event;
-    "error": ErrorEvent;
-    "focus": FocusEvent;
     "gamepadconnected": GamepadEvent;
     "gamepaddisconnected": GamepadEvent;
-    "hashchange": HashChangeEvent;
-    "input": Event;
-    "invalid": Event;
-    "keydown": KeyboardEvent;
-    "keypress": KeyboardEvent;
-    "keyup": KeyboardEvent;
-    "load": Event;
-    "loadeddata": Event;
-    "loadedmetadata": Event;
-    "loadstart": Event;
-    "message": MessageEvent;
-    "mousedown": MouseEvent;
-    "mouseenter": MouseEvent;
-    "mouseleave": MouseEvent;
-    "mousemove": MouseEvent;
-    "mouseout": MouseEvent;
-    "mouseover": MouseEvent;
-    "mouseup": MouseEvent;
-    "mousewheel": Event;
-    "offline": Event;
-    "online": Event;
     "orientationchange": Event;
-    "pagehide": PageTransitionEvent;
-    "pageshow": PageTransitionEvent;
-    "pause": Event;
-    "play": Event;
-    "playing": Event;
-    "popstate": PopStateEvent;
-    "progress": ProgressEvent<Window>;
-    "ratechange": Event;
-    "readystatechange": ProgressEvent<Window>;
-    "reset": Event;
-    "resize": UIEvent;
-    "scroll": Event;
-    "seeked": Event;
-    "seeking": Event;
-    "select": Event;
-    "stalled": Event;
-    "storage": StorageEvent;
-    "submit": Event;
-    "suspend": Event;
-    "timeupdate": Event;
-    "unload": Event;
-    "volumechange": Event;
-    "vrdisplayactivate": Event;
-    "vrdisplayblur": Event;
-    "vrdisplayconnect": Event;
-    "vrdisplaydeactivate": Event;
-    "vrdisplaydisconnect": Event;
-    "vrdisplaypresentchange": Event;
-    "waiting": Event;
 }
 
 /** A window containing a DOM document; the document property points to the DOM document loaded in that window. */
 interface Window extends EventTarget, AnimationFrameProvider, GlobalEventHandlers, WindowEventHandlers, WindowLocalStorage, WindowOrWorkerGlobalScope, WindowSessionStorage {
-    readonly applicationCache: ApplicationCache;
+    /** @deprecated This is a legacy alias of `navigator`. */
     readonly clientInformation: Navigator;
+    /**
+     * Returns true if the window has been closed, false otherwise.
+     */
     readonly closed: boolean;
-    customElements: CustomElementRegistry;
-    defaultStatus: string;
+    /**
+     * Defines a new custom element, mapping the given name to the given constructor as an autonomous custom element.
+     */
+    readonly customElements: CustomElementRegistry;
     readonly devicePixelRatio: number;
-    readonly doNotTrack: string;
     readonly document: Document;
     /** @deprecated */
     readonly event: Event | undefined;
     /** @deprecated */
     readonly external: External;
     readonly frameElement: Element | null;
-    readonly frames: Window;
+    readonly frames: WindowProxy;
     readonly history: History;
     readonly innerHeight: number;
     readonly innerWidth: number;
     readonly length: number;
-    location: Location;
+    get location(): Location;
+    set location(href: string | Location);
+    /**
+     * Returns true if the location bar is visible; otherwise, returns false.
+     */
     readonly locationbar: BarProp;
+    /**
+     * Returns true if the menu bar is visible; otherwise, returns false.
+     */
     readonly menubar: BarProp;
-    readonly msContentScript: ExtensionScriptApis;
     name: string;
     readonly navigator: Navigator;
-    offscreenBuffering: string | boolean;
-    oncompassneedscalibration: ((this: Window, ev: Event) => any) | null;
     ondevicemotion: ((this: Window, ev: DeviceMotionEvent) => any) | null;
     ondeviceorientation: ((this: Window, ev: DeviceOrientationEvent) => any) | null;
-    ondeviceorientationabsolute: ((this: Window, ev: DeviceOrientationEvent) => any) | null;
-    ongamepadconnected: ((this: Window, ev: GamepadEvent) => any) | null;
-    ongamepaddisconnected: ((this: Window, ev: GamepadEvent) => any) | null;
-    onmousewheel: ((this: Window, ev: Event) => any) | null;
     /** @deprecated */
     onorientationchange: ((this: Window, ev: Event) => any) | null;
-    onreadystatechange: ((this: Window, ev: ProgressEvent<Window>) => any) | null;
-    onvrdisplayactivate: ((this: Window, ev: Event) => any) | null;
-    onvrdisplayblur: ((this: Window, ev: Event) => any) | null;
-    onvrdisplayconnect: ((this: Window, ev: Event) => any) | null;
-    onvrdisplaydeactivate: ((this: Window, ev: Event) => any) | null;
-    onvrdisplaydisconnect: ((this: Window, ev: Event) => any) | null;
-    onvrdisplaypresentchange: ((this: Window, ev: Event) => any) | null;
-    opener: WindowProxy | null;
+    opener: any;
     /** @deprecated */
-    readonly orientation: string | number;
+    readonly orientation: number;
     readonly outerHeight: number;
     readonly outerWidth: number;
+    /** @deprecated This is a legacy alias of `scrollX`. */
     readonly pageXOffset: number;
+    /** @deprecated This is a legacy alias of `scrollY`. */
     readonly pageYOffset: number;
-    readonly parent: Window;
+    /** Refers to either the parent WindowProxy, or itself. It can rarely be null e.g. for contentWindow of an iframe that is already removed from the parent. */
+    readonly parent: WindowProxy;
+    /**
+     * Returns true if the personal bar is visible; otherwise, returns false.
+     */
     readonly personalbar: BarProp;
     readonly screen: Screen;
     readonly screenLeft: number;
@@ -18260,37 +17267,63 @@
     readonly screenY: number;
     readonly scrollX: number;
     readonly scrollY: number;
+    /**
+     * Returns true if the scrollbars are visible; otherwise, returns false.
+     */
     readonly scrollbars: BarProp;
     readonly self: Window & typeof globalThis;
     readonly speechSynthesis: SpeechSynthesis;
+    /** @deprecated */
     status: string;
+    /**
+     * Returns true if the status bar is visible; otherwise, returns false.
+     */
     readonly statusbar: BarProp;
-    readonly styleMedia: StyleMedia;
+    /**
+     * Returns true if the toolbar is visible; otherwise, returns false.
+     */
     readonly toolbar: BarProp;
-    readonly top: Window;
+    readonly top: WindowProxy | null;
     readonly visualViewport: VisualViewport;
     readonly window: Window & typeof globalThis;
     alert(message?: any): void;
     blur(): void;
+    cancelIdleCallback(handle: number): void;
     /** @deprecated */
     captureEvents(): void;
+    /**
+     * Closes the window.
+     */
     close(): void;
     confirm(message?: string): boolean;
-    departFocus(navigationReason: NavigationReason, origin: FocusNavigationOrigin): void;
+    /**
+     * Moves the focus to the window's browsing context, if any.
+     */
     focus(): void;
     getComputedStyle(elt: Element, pseudoElt?: string | null): CSSStyleDeclaration;
-    getMatchedCSSRules(elt: Element, pseudoElt?: string | null): CSSRuleList;
     getSelection(): Selection | null;
     matchMedia(query: string): MediaQueryList;
     moveBy(x: number, y: number): void;
     moveTo(x: number, y: number): void;
-    msWriteProfilerMark(profilerMarkName: string): void;
-    open(url?: string, target?: string, features?: string, replace?: boolean): Window | null;
+    open(url?: string | URL, target?: string, features?: string): WindowProxy | null;
+    /**
+     * Posts a message to the given window. Messages can be structured objects, e.g. nested objects and arrays, can contain JavaScript values (strings, numbers, Date objects, etc), and can contain certain data objects such as File Blob, FileList, and ArrayBuffer objects.
+     *
+     * Objects listed in the transfer member of options are transferred, not just cloned, meaning that they are no longer usable on the sending side.
+     *
+     * A target origin can be specified using the targetOrigin member of options. If not provided, it defaults to "/". This default restricts the message to same-origin targets only.
+     *
+     * If the origin of the target window doesn't match the given target origin, the message is discarded, to avoid information leakage. To send the message to the target regardless of origin, set the target origin to "*".
+     *
+     * Throws a "DataCloneError" DOMException if transfer array contains duplicate objects or if message could not be cloned.
+     */
     postMessage(message: any, targetOrigin: string, transfer?: Transferable[]): void;
+    postMessage(message: any, options?: WindowPostMessageOptions): void;
     print(): void;
     prompt(message?: string, _default?: string): string | null;
     /** @deprecated */
     releaseEvents(): void;
+    requestIdleCallback(callback: IdleRequestCallback, options?: IdleRequestOptions): number;
     resizeBy(x: number, y: number): void;
     resizeTo(width: number, height: number): void;
     scroll(options?: ScrollToOptions): void;
@@ -18299,11 +17332,10 @@
     scrollBy(x: number, y: number): void;
     scrollTo(options?: ScrollToOptions): void;
     scrollTo(x: number, y: number): void;
+    /**
+     * Cancels the document load.
+     */
     stop(): void;
-    webkitCancelAnimationFrame(handle: number): void;
-    webkitConvertPointFromNodeToPage(node: Node, pt: WebKitPoint): WebKitPoint;
-    webkitConvertPointFromPageToNode(node: Node, pt: WebKitPoint): WebKitPoint;
-    webkitRequestAnimationFrame(callback: FrameRequestCallback): number;
     addEventListener<K extends keyof WindowEventMap>(type: K, listener: (this: Window, ev: WindowEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
     addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
     removeEventListener<K extends keyof WindowEventMap>(type: K, listener: (this: Window, ev: WindowEventMap[K]) => any, options?: boolean | EventListenerOptions): void;
@@ -18320,7 +17352,9 @@
     "afterprint": Event;
     "beforeprint": Event;
     "beforeunload": BeforeUnloadEvent;
-    "hashchange": HashChangeEvent;
+    "gamepadconnected": Event;
+    "gamepaddisconnected": Event;
+    "hashchange": Event;
     "languagechange": Event;
     "message": MessageEvent;
     "messageerror": MessageEvent;
@@ -18339,7 +17373,9 @@
     onafterprint: ((this: WindowEventHandlers, ev: Event) => any) | null;
     onbeforeprint: ((this: WindowEventHandlers, ev: Event) => any) | null;
     onbeforeunload: ((this: WindowEventHandlers, ev: BeforeUnloadEvent) => any) | null;
-    onhashchange: ((this: WindowEventHandlers, ev: HashChangeEvent) => any) | null;
+    ongamepadconnected: ((this: WindowEventHandlers, ev: Event) => any) | null;
+    ongamepaddisconnected: ((this: WindowEventHandlers, ev: Event) => any) | null;
+    onhashchange: ((this: WindowEventHandlers, ev: Event) => any) | null;
     onlanguagechange: ((this: WindowEventHandlers, ev: Event) => any) | null;
     onmessage: ((this: WindowEventHandlers, ev: MessageEvent) => any) | null;
     onmessageerror: ((this: WindowEventHandlers, ev: MessageEvent) => any) | null;
@@ -18364,6 +17400,7 @@
 
 interface WindowOrWorkerGlobalScope {
     readonly caches: CacheStorage;
+    readonly crossOriginIsolated: boolean;
     readonly crypto: Crypto;
     readonly indexedDB: IDBFactory;
     readonly isSecureContext: boolean;
@@ -18411,11 +17448,18 @@
 
 declare var Worker: {
     prototype: Worker;
-    new(stringUrl: string | URL, options?: WorkerOptions): Worker;
+    new(scriptURL: string | URL, options?: WorkerOptions): Worker;
 };
 
 interface Worklet {
-    addModule(moduleURL: string, options?: WorkletOptions): Promise<void>;
+    /**
+     * Loads and executes the module script given by moduleURL into all of worklet's global scopes. It can also create additional global scopes as part of this process, depending on the worklet type. The returned promise will fulfill once the script has been successfully loaded and run in all global scopes.
+     *
+     * The credentials option can be set to a credentials mode to modify the script-fetching process. It defaults to "same-origin".
+     *
+     * Any failures in fetching the script or its dependencies will cause the returned promise to be rejected with an "AbortError" DOMException. Any errors in parsing the script or its dependencies will cause the returned promise to be rejected with the exception generated during parsing.
+     */
+    addModule(moduleURL: string | URL, options?: WorkletOptions): Promise<void>;
 }
 
 declare var Worklet: {
@@ -18427,6 +17471,7 @@
 interface WritableStream<W = any> {
     readonly locked: boolean;
     abort(reason?: any): Promise<void>;
+    close(): Promise<void>;
     getWriter(): WritableStreamDefaultWriter<W>;
 }
 
@@ -18453,7 +17498,7 @@
     abort(reason?: any): Promise<void>;
     close(): Promise<void>;
     releaseLock(): void;
-    write(chunk: W): Promise<void>;
+    write(chunk?: W): Promise<void>;
 }
 
 declare var WritableStreamDefaultWriter: {
@@ -18486,11 +17531,11 @@
      */
     readonly readyState: number;
     /**
-     * Returns the response's body.
+     * Returns the response body.
      */
     readonly response: any;
     /**
-     * Returns the text response.
+     * Returns response as text.
      *
      * Throws an "InvalidStateError" DOMException if responseType is not the empty string or "text".
      */
@@ -18509,7 +17554,7 @@
     responseType: XMLHttpRequestResponseType;
     readonly responseURL: string;
     /**
-     * Returns the document response.
+     * Returns the response as document.
      *
      * Throws an "InvalidStateError" DOMException if responseType is not the empty string or "document".
      */
@@ -18517,7 +17562,7 @@
     readonly status: number;
     readonly statusText: string;
     /**
-     * Can be set to a time in milliseconds. When set to a non-zero value will cause fetching to terminate after the given time has passed. When the time has passed, the request has not yet completed, and the synchronous flag is unset, a timeout event will then be dispatched, or a "TimeoutError" DOMException will be thrown otherwise (for the send() method).
+     * Can be set to a time in milliseconds. When set to a non-zero value will cause fetching to terminate after the given time has passed. When the time has passed, the request has not yet completed, and this's synchronous flag is unset, a timeout event will then be dispatched, or a "TimeoutError" DOMException will be thrown otherwise (for the send() method).
      *
      * When set: throws an "InvalidAccessError" DOMException if the synchronous flag is set and current global object is a Window object.
      */
@@ -18541,16 +17586,16 @@
     /**
      * Sets the request method, request URL, and synchronous flag.
      *
-     * Throws a "SyntaxError" DOMException if either method is not a valid HTTP method or url cannot be parsed.
+     * Throws a "SyntaxError" DOMException if either method is not a valid method or url cannot be parsed.
      *
      * Throws a "SecurityError" DOMException if method is a case-insensitive match for `CONNECT`, `TRACE`, or `TRACK`.
      *
      * Throws an "InvalidAccessError" DOMException if async is false, current global object is a Window object, and the timeout attribute is not zero or the responseType attribute is not the empty string.
      */
-    open(method: string, url: string): void;
-    open(method: string, url: string, async: boolean, username?: string | null, password?: string | null): void;
+    open(method: string, url: string | URL): void;
+    open(method: string, url: string | URL, async: boolean, username?: string | null, password?: string | null): void;
     /**
-     * Acts as if the `Content-Type` header value for response is mime. (It does not actually change the header though.)
+     * Acts as if the `Content-Type` header value for a response is mime. (It does not change the header.)
      *
      * Throws an "InvalidStateError" DOMException if state is loading or done.
      */
@@ -18560,7 +17605,7 @@
      *
      * Throws an "InvalidStateError" DOMException if either state is not opened or the send() flag is set.
      */
-    send(body?: Document | BodyInit | null): void;
+    send(body?: Document | XMLHttpRequestBodyInit | null): void;
     /**
      * Combines a header in author request headers.
      *
@@ -18707,13 +17752,13 @@
 /** An XSLTProcessor applies an XSLT stylesheet transformation to an XML document to produce a new XML document as output. It has methods to load the XSLT stylesheet, to manipulate <xsl:param> parameter values, and to apply the transformation to documents. */
 interface XSLTProcessor {
     clearParameters(): void;
-    getParameter(namespaceURI: string, localName: string): any;
+    getParameter(namespaceURI: string | null, localName: string): any;
     importStylesheet(style: Node): void;
-    removeParameter(namespaceURI: string, localName: string): void;
+    removeParameter(namespaceURI: string | null, localName: string): void;
     reset(): void;
-    setParameter(namespaceURI: string, localName: string, value: any): void;
+    setParameter(namespaceURI: string | null, localName: string, value: any): void;
     transformToDocument(source: Node): Document;
-    transformToFragment(source: Node, document: Document): DocumentFragment;
+    transformToFragment(source: Node, output: Document): DocumentFragment;
 }
 
 declare var XSLTProcessor: {
@@ -18721,22 +17766,7 @@
     new(): XSLTProcessor;
 };
 
-interface webkitRTCPeerConnection extends RTCPeerConnection {
-    addEventListener<K extends keyof RTCPeerConnectionEventMap>(type: K, listener: (this: webkitRTCPeerConnection, ev: RTCPeerConnectionEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
-    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
-    removeEventListener<K extends keyof RTCPeerConnectionEventMap>(type: K, listener: (this: webkitRTCPeerConnection, ev: RTCPeerConnectionEventMap[K]) => any, options?: boolean | EventListenerOptions): void;
-    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;
-}
-
-declare var webkitRTCPeerConnection: {
-    prototype: webkitRTCPeerConnection;
-    new(configuration: RTCConfiguration): webkitRTCPeerConnection;
-};
-
-declare type EventListenerOrEventListenerObject = EventListener | EventListenerObject;
-
 interface Console {
-    memory: any;
     assert(condition?: boolean, ...data: any[]): void;
     clear(): void;
     count(label?: string): void;
@@ -18745,7 +17775,6 @@
     dir(item?: any, options?: any): void;
     dirxml(...data: any[]): void;
     error(...data: any[]): void;
-    exception(message?: string, ...optionalParams: any[]): void;
     group(...data: any[]): void;
     groupCollapsed(...data: any[]): void;
     groupEnd(): void;
@@ -18770,7 +17799,7 @@
 }
 
 declare namespace WebAssembly {
-    interface CompileError {
+    interface CompileError extends Error {
     }
 
     var CompileError: {
@@ -18797,7 +17826,7 @@
         new(module: Module, importObject?: Imports): Instance;
     };
 
-    interface LinkError {
+    interface LinkError extends Error {
     }
 
     var LinkError: {
@@ -18826,7 +17855,7 @@
         imports(moduleObject: Module): ModuleImportDescriptor[];
     };
 
-    interface RuntimeError {
+    interface RuntimeError extends Error {
     }
 
     var RuntimeError: {
@@ -18836,14 +17865,14 @@
 
     interface Table {
         readonly length: number;
-        get(index: number): Function | null;
-        grow(delta: number): number;
-        set(index: number, value: Function | null): void;
+        get(index: number): any;
+        grow(delta: number, value?: any): number;
+        set(index: number, value?: any): void;
     }
 
     var Table: {
         prototype: Table;
-        new(descriptor: TableDescriptor): Table;
+        new(descriptor: TableDescriptor, value?: any): Table;
     };
 
     interface GlobalDescriptor {
@@ -18880,18 +17909,18 @@
     }
 
     type ImportExportKind = "function" | "global" | "memory" | "table";
-    type TableKind = "anyfunc";
-    type ValueType = "f32" | "f64" | "i32" | "i64";
+    type TableKind = "anyfunc" | "externref";
+    type ValueType = "anyfunc" | "externref" | "f32" | "f64" | "i32" | "i64";
     type ExportValue = Function | Global | Memory | Table;
     type Exports = Record<string, ExportValue>;
     type ImportValue = ExportValue | number;
-    type ModuleImports = Record<string, ImportValue>;
     type Imports = Record<string, ModuleImports>;
+    type ModuleImports = Record<string, ImportValue>;
     function compile(bytes: BufferSource): Promise<Module>;
-    function compileStreaming(source: Response | Promise<Response>): Promise<Module>;
+    function compileStreaming(source: Response | PromiseLike<Response>): Promise<Module>;
     function instantiate(bytes: BufferSource, importObject?: Imports): Promise<WebAssemblyInstantiatedSource>;
     function instantiate(moduleObject: Module, importObject?: Imports): Promise<Instance>;
-    function instantiateStreaming(response: Response | PromiseLike<Response>, importObject?: Imports): Promise<WebAssemblyInstantiatedSource>;
+    function instantiateStreaming(source: Response | PromiseLike<Response>, importObject?: Imports): Promise<WebAssemblyInstantiatedSource>;
     function validate(bytes: BufferSource): boolean;
 }
 
@@ -18911,42 +17940,46 @@
     (decodedData: AudioBuffer): void;
 }
 
-interface EventHandlerNonNull {
-    (event: Event): any;
+interface ErrorCallback {
+    (err: DOMException): void;
 }
 
-interface ForEachCallback {
-    (keyId: Int8Array | Int16Array | Int32Array | Uint8Array | Uint16Array | Uint32Array | Uint8ClampedArray | Float32Array | Float64Array | DataView | ArrayBuffer | null, status: MediaKeyStatus): void;
+interface FileCallback {
+    (file: File): void;
+}
+
+interface FileSystemEntriesCallback {
+    (entries: FileSystemEntry[]): void;
+}
+
+interface FileSystemEntryCallback {
+    (entry: FileSystemEntry): void;
 }
 
 interface FrameRequestCallback {
-    (time: number): void;
+    (time: DOMHighResTimeStamp): void;
 }
 
 interface FunctionStringCallback {
     (data: string): void;
 }
 
+interface IdleRequestCallback {
+    (deadline: IdleDeadline): void;
+}
+
 interface IntersectionObserverCallback {
     (entries: IntersectionObserverEntry[], observer: IntersectionObserver): void;
 }
 
-interface MSLaunchUriCallback {
-    (): void;
+interface MediaSessionActionHandler {
+    (details: MediaSessionActionDetails): void;
 }
 
 interface MutationCallback {
     (mutations: MutationRecord[], observer: MutationObserver): void;
 }
 
-interface NavigatorUserMediaErrorCallback {
-    (error: MediaStreamError): void;
-}
-
-interface NavigatorUserMediaSuccessCallback {
-    (stream: MediaStream): void;
-}
-
 interface NotificationPermissionCallback {
     (permission: NotificationPermission): void;
 }
@@ -18972,7 +18005,7 @@
 }
 
 interface QueuingStrategySize<T = any> {
-    (chunk: T): number;
+    (chunk?: T): number;
 }
 
 interface RTCPeerConnectionErrorCallback {
@@ -18983,8 +18016,8 @@
     (description: RTCSessionDescriptionInit): void;
 }
 
-interface RTCStatsCallback {
-    (report: RTCStatsReport): void;
+interface RemotePlaybackAvailabilityCallback {
+    (available: boolean): void;
 }
 
 interface ResizeObserverCallback {
@@ -18996,7 +18029,7 @@
 }
 
 interface TransformerStartCallback<O> {
-    (controller: TransformStreamDefaultController<O>): void | PromiseLike<void>;
+    (controller: TransformStreamDefaultController<O>): any;
 }
 
 interface TransformerTransformCallback<I, O> {
@@ -19004,7 +18037,7 @@
 }
 
 interface UnderlyingSinkAbortCallback {
-    (reason: any): void | PromiseLike<void>;
+    (reason?: any): void | PromiseLike<void>;
 }
 
 interface UnderlyingSinkCloseCallback {
@@ -19012,7 +18045,7 @@
 }
 
 interface UnderlyingSinkStartCallback {
-    (controller: WritableStreamDefaultController): void | PromiseLike<void>;
+    (controller: WritableStreamDefaultController): any;
 }
 
 interface UnderlyingSinkWriteCallback<W> {
@@ -19020,7 +18053,7 @@
 }
 
 interface UnderlyingSourceCancelCallback {
-    (reason: any): void | PromiseLike<void>;
+    (reason?: any): void | PromiseLike<void>;
 }
 
 interface UnderlyingSourcePullCallback<R> {
@@ -19028,7 +18061,7 @@
 }
 
 interface UnderlyingSourceStartCallback<R> {
-    (controller: ReadableStreamController<R>): void | PromiseLike<void>;
+    (controller: ReadableStreamController<R>): any;
 }
 
 interface VoidFunction {
@@ -19039,7 +18072,6 @@
     "a": HTMLAnchorElement;
     "abbr": HTMLElement;
     "address": HTMLElement;
-    "applet": HTMLAppletElement;
     "area": HTMLAreaElement;
     "article": HTMLElement;
     "aside": HTMLElement;
@@ -19139,11 +18171,11 @@
     "sup": HTMLElement;
     "table": HTMLTableElement;
     "tbody": HTMLTableSectionElement;
-    "td": HTMLTableDataCellElement;
+    "td": HTMLTableCellElement;
     "template": HTMLTemplateElement;
     "textarea": HTMLTextAreaElement;
     "tfoot": HTMLTableSectionElement;
-    "th": HTMLTableHeaderCellElement;
+    "th": HTMLTableCellElement;
     "thead": HTMLTableSectionElement;
     "time": HTMLTimeElement;
     "title": HTMLTitleElement;
@@ -19163,6 +18195,9 @@
 
 interface SVGElementTagNameMap {
     "a": SVGAElement;
+    "animate": SVGAnimateElement;
+    "animateMotion": SVGAnimateMotionElement;
+    "animateTransform": SVGAnimateTransformElement;
     "circle": SVGCircleElement;
     "clipPath": SVGClipPathElement;
     "defs": SVGDefsElement;
@@ -19176,6 +18211,7 @@
     "feDiffuseLighting": SVGFEDiffuseLightingElement;
     "feDisplacementMap": SVGFEDisplacementMapElement;
     "feDistantLight": SVGFEDistantLightElement;
+    "feDropShadow": SVGFEDropShadowElement;
     "feFlood": SVGFEFloodElement;
     "feFuncA": SVGFEFuncAElement;
     "feFuncB": SVGFEFuncBElement;
@@ -19201,6 +18237,7 @@
     "marker": SVGMarkerElement;
     "mask": SVGMaskElement;
     "metadata": SVGMetadataElement;
+    "mpath": SVGMPathElement;
     "path": SVGPathElement;
     "pattern": SVGPatternElement;
     "polygon": SVGPolygonElement;
@@ -19208,6 +18245,7 @@
     "radialGradient": SVGRadialGradientElement;
     "rect": SVGRectElement;
     "script": SVGScriptElement;
+    "set": SVGSetElement;
     "stop": SVGStopElement;
     "style": SVGStyleElement;
     "svg": SVGSVGElement;
@@ -19233,56 +18271,58 @@
 declare var Option: {
     new(text?: string, value?: string, defaultSelected?: boolean, selected?: boolean): HTMLOptionElement;
 };
-declare var applicationCache: ApplicationCache;
+/** @deprecated This is a legacy alias of `navigator`. */
 declare var clientInformation: Navigator;
+/**
+ * Returns true if the window has been closed, false otherwise.
+ */
 declare var closed: boolean;
+/**
+ * Defines a new custom element, mapping the given name to the given constructor as an autonomous custom element.
+ */
 declare var customElements: CustomElementRegistry;
-declare var defaultStatus: string;
 declare var devicePixelRatio: number;
-declare var doNotTrack: string;
 declare var document: Document;
 /** @deprecated */
 declare var event: Event | undefined;
 /** @deprecated */
 declare var external: External;
 declare var frameElement: Element | null;
-declare var frames: Window;
+declare var frames: WindowProxy;
 declare var history: History;
 declare var innerHeight: number;
 declare var innerWidth: number;
 declare var length: number;
 declare var location: Location;
+/**
+ * Returns true if the location bar is visible; otherwise, returns false.
+ */
 declare var locationbar: BarProp;
+/**
+ * Returns true if the menu bar is visible; otherwise, returns false.
+ */
 declare var menubar: BarProp;
-declare var msContentScript: ExtensionScriptApis;
 /** @deprecated */
 declare const name: void;
 declare var navigator: Navigator;
-declare var offscreenBuffering: string | boolean;
-declare var oncompassneedscalibration: ((this: Window, ev: Event) => any) | null;
 declare var ondevicemotion: ((this: Window, ev: DeviceMotionEvent) => any) | null;
 declare var ondeviceorientation: ((this: Window, ev: DeviceOrientationEvent) => any) | null;
-declare var ondeviceorientationabsolute: ((this: Window, ev: DeviceOrientationEvent) => any) | null;
-declare var ongamepadconnected: ((this: Window, ev: GamepadEvent) => any) | null;
-declare var ongamepaddisconnected: ((this: Window, ev: GamepadEvent) => any) | null;
-declare var onmousewheel: ((this: Window, ev: Event) => any) | null;
 /** @deprecated */
 declare var onorientationchange: ((this: Window, ev: Event) => any) | null;
-declare var onreadystatechange: ((this: Window, ev: ProgressEvent<Window>) => any) | null;
-declare var onvrdisplayactivate: ((this: Window, ev: Event) => any) | null;
-declare var onvrdisplayblur: ((this: Window, ev: Event) => any) | null;
-declare var onvrdisplayconnect: ((this: Window, ev: Event) => any) | null;
-declare var onvrdisplaydeactivate: ((this: Window, ev: Event) => any) | null;
-declare var onvrdisplaydisconnect: ((this: Window, ev: Event) => any) | null;
-declare var onvrdisplaypresentchange: ((this: Window, ev: Event) => any) | null;
-declare var opener: WindowProxy | null;
+declare var opener: any;
 /** @deprecated */
-declare var orientation: string | number;
+declare var orientation: number;
 declare var outerHeight: number;
 declare var outerWidth: number;
+/** @deprecated This is a legacy alias of `scrollX`. */
 declare var pageXOffset: number;
+/** @deprecated This is a legacy alias of `scrollY`. */
 declare var pageYOffset: number;
-declare var parent: Window;
+/** Refers to either the parent WindowProxy, or itself. It can rarely be null e.g. for contentWindow of an iframe that is already removed from the parent. */
+declare var parent: WindowProxy;
+/**
+ * Returns true if the personal bar is visible; otherwise, returns false.
+ */
 declare var personalbar: BarProp;
 declare var screen: Screen;
 declare var screenLeft: number;
@@ -19291,37 +18331,63 @@
 declare var screenY: number;
 declare var scrollX: number;
 declare var scrollY: number;
+/**
+ * Returns true if the scrollbars are visible; otherwise, returns false.
+ */
 declare var scrollbars: BarProp;
 declare var self: Window & typeof globalThis;
 declare var speechSynthesis: SpeechSynthesis;
+/** @deprecated */
 declare var status: string;
+/**
+ * Returns true if the status bar is visible; otherwise, returns false.
+ */
 declare var statusbar: BarProp;
-declare var styleMedia: StyleMedia;
+/**
+ * Returns true if the toolbar is visible; otherwise, returns false.
+ */
 declare var toolbar: BarProp;
-declare var top: Window;
+declare var top: WindowProxy | null;
 declare var visualViewport: VisualViewport;
 declare var window: Window & typeof globalThis;
 declare function alert(message?: any): void;
 declare function blur(): void;
+declare function cancelIdleCallback(handle: number): void;
 /** @deprecated */
 declare function captureEvents(): void;
+/**
+ * Closes the window.
+ */
 declare function close(): void;
 declare function confirm(message?: string): boolean;
-declare function departFocus(navigationReason: NavigationReason, origin: FocusNavigationOrigin): void;
+/**
+ * Moves the focus to the window's browsing context, if any.
+ */
 declare function focus(): void;
 declare function getComputedStyle(elt: Element, pseudoElt?: string | null): CSSStyleDeclaration;
-declare function getMatchedCSSRules(elt: Element, pseudoElt?: string | null): CSSRuleList;
 declare function getSelection(): Selection | null;
 declare function matchMedia(query: string): MediaQueryList;
 declare function moveBy(x: number, y: number): void;
 declare function moveTo(x: number, y: number): void;
-declare function msWriteProfilerMark(profilerMarkName: string): void;
-declare function open(url?: string, target?: string, features?: string, replace?: boolean): Window | null;
+declare function open(url?: string | URL, target?: string, features?: string): WindowProxy | null;
+/**
+ * Posts a message to the given window. Messages can be structured objects, e.g. nested objects and arrays, can contain JavaScript values (strings, numbers, Date objects, etc), and can contain certain data objects such as File Blob, FileList, and ArrayBuffer objects.
+ *
+ * Objects listed in the transfer member of options are transferred, not just cloned, meaning that they are no longer usable on the sending side.
+ *
+ * A target origin can be specified using the targetOrigin member of options. If not provided, it defaults to "/". This default restricts the message to same-origin targets only.
+ *
+ * If the origin of the target window doesn't match the given target origin, the message is discarded, to avoid information leakage. To send the message to the target regardless of origin, set the target origin to "*".
+ *
+ * Throws a "DataCloneError" DOMException if transfer array contains duplicate objects or if message could not be cloned.
+ */
 declare function postMessage(message: any, targetOrigin: string, transfer?: Transferable[]): void;
+declare function postMessage(message: any, options?: WindowPostMessageOptions): void;
 declare function print(): void;
 declare function prompt(message?: string, _default?: string): string | null;
 /** @deprecated */
 declare function releaseEvents(): void;
+declare function requestIdleCallback(callback: IdleRequestCallback, options?: IdleRequestOptions): number;
 declare function resizeBy(x: number, y: number): void;
 declare function resizeTo(width: number, height: number): void;
 declare function scroll(options?: ScrollToOptions): void;
@@ -19330,18 +18396,17 @@
 declare function scrollBy(x: number, y: number): void;
 declare function scrollTo(options?: ScrollToOptions): void;
 declare function scrollTo(x: number, y: number): void;
+/**
+ * Cancels the document load.
+ */
 declare function stop(): void;
-declare function webkitCancelAnimationFrame(handle: number): void;
-declare function webkitConvertPointFromNodeToPage(node: Node, pt: WebKitPoint): WebKitPoint;
-declare function webkitConvertPointFromPageToNode(node: Node, pt: WebKitPoint): WebKitPoint;
-declare function webkitRequestAnimationFrame(callback: FrameRequestCallback): number;
 declare function toString(): string;
 /**
  * Dispatches a synthetic event event to target and returns true if either event's cancelable attribute value is false or its preventDefault() method was not invoked, and false otherwise.
  */
 declare function dispatchEvent(event: Event): boolean;
-declare var sessionStorage: Storage;
-declare var localStorage: Storage;
+declare function cancelAnimationFrame(handle: number): void;
+declare function requestAnimationFrame(callback: FrameRequestCallback): number;
 /**
  * Fires when the user aborts the download.
  * @param ev The event.
@@ -19357,7 +18422,6 @@
  * @param ev The focus event.
  */
 declare var onblur: ((this: Window, ev: FocusEvent) => any) | null;
-declare var oncancel: ((this: Window, ev: Event) => any) | null;
 /**
  * Occurs when playback is possible, but would require further buffering.
  * @param ev The event.
@@ -19401,7 +18465,6 @@
  * @param ev The drag event.
  */
 declare var ondragenter: ((this: Window, ev: DragEvent) => any) | null;
-declare var ondragexit: ((this: Window, ev: Event) => any) | null;
 /**
  * Fires on the target object when the user moves the mouse out of a valid drop target during a drag operation.
  * @param ev The drag event.
@@ -19443,6 +18506,7 @@
  * @param ev The event.
  */
 declare var onfocus: ((this: Window, ev: FocusEvent) => any) | null;
+declare var onformdata: ((this: Window, ev: FormDataEvent) => any) | null;
 declare var ongotpointercapture: ((this: Window, ev: PointerEvent) => any) | null;
 declare var oninput: ((this: Window, ev: Event) => any) | null;
 declare var oninvalid: ((this: Window, ev: Event) => any) | null;
@@ -19454,6 +18518,7 @@
 /**
  * Fires when the user presses an alphanumeric key.
  * @param ev The event.
+ * @deprecated
  */
 declare var onkeypress: ((this: Window, ev: KeyboardEvent) => any) | null;
 /**
@@ -19553,7 +18618,6 @@
  * @param ev The event.
  */
 declare var onscroll: ((this: Window, ev: Event) => any) | null;
-declare var onsecuritypolicyviolation: ((this: Window, ev: SecurityPolicyViolationEvent) => any) | null;
 /**
  * Occurs when the seek operation ends.
  * @param ev The event.
@@ -19606,10 +18670,32 @@
  * @param ev The event.
  */
 declare var onwaiting: ((this: Window, ev: Event) => any) | null;
+declare var onwebkitanimationend: ((this: Window, ev: Event) => any) | null;
+declare var onwebkitanimationiteration: ((this: Window, ev: Event) => any) | null;
+declare var onwebkitanimationstart: ((this: Window, ev: Event) => any) | null;
+declare var onwebkittransitionend: ((this: Window, ev: Event) => any) | null;
 declare var onwheel: ((this: Window, ev: WheelEvent) => any) | null;
-declare function cancelAnimationFrame(handle: number): void;
-declare function requestAnimationFrame(callback: FrameRequestCallback): number;
+declare var onafterprint: ((this: Window, ev: Event) => any) | null;
+declare var onbeforeprint: ((this: Window, ev: Event) => any) | null;
+declare var onbeforeunload: ((this: Window, ev: BeforeUnloadEvent) => any) | null;
+declare var ongamepadconnected: ((this: Window, ev: Event) => any) | null;
+declare var ongamepaddisconnected: ((this: Window, ev: Event) => any) | null;
+declare var onhashchange: ((this: Window, ev: Event) => any) | null;
+declare var onlanguagechange: ((this: Window, ev: Event) => any) | null;
+declare var onmessage: ((this: Window, ev: MessageEvent) => any) | null;
+declare var onmessageerror: ((this: Window, ev: MessageEvent) => any) | null;
+declare var onoffline: ((this: Window, ev: Event) => any) | null;
+declare var ononline: ((this: Window, ev: Event) => any) | null;
+declare var onpagehide: ((this: Window, ev: PageTransitionEvent) => any) | null;
+declare var onpageshow: ((this: Window, ev: PageTransitionEvent) => any) | null;
+declare var onpopstate: ((this: Window, ev: PopStateEvent) => any) | null;
+declare var onrejectionhandled: ((this: Window, ev: PromiseRejectionEvent) => any) | null;
+declare var onstorage: ((this: Window, ev: StorageEvent) => any) | null;
+declare var onunhandledrejection: ((this: Window, ev: PromiseRejectionEvent) => any) | null;
+declare var onunload: ((this: Window, ev: Event) => any) | null;
+declare var localStorage: Storage;
 declare var caches: CacheStorage;
+declare var crossOriginIsolated: boolean;
 declare var crypto: Crypto;
 declare var indexedDB: IDBFactory;
 declare var isSecureContext: boolean;
@@ -19625,90 +18711,77 @@
 declare function queueMicrotask(callback: VoidFunction): void;
 declare function setInterval(handler: TimerHandler, timeout?: number, ...arguments: any[]): number;
 declare function setTimeout(handler: TimerHandler, timeout?: number, ...arguments: any[]): number;
-declare var onafterprint: ((this: Window, ev: Event) => any) | null;
-declare var onbeforeprint: ((this: Window, ev: Event) => any) | null;
-declare var onbeforeunload: ((this: Window, ev: BeforeUnloadEvent) => any) | null;
-declare var onhashchange: ((this: Window, ev: HashChangeEvent) => any) | null;
-declare var onlanguagechange: ((this: Window, ev: Event) => any) | null;
-declare var onmessage: ((this: Window, ev: MessageEvent) => any) | null;
-declare var onmessageerror: ((this: Window, ev: MessageEvent) => any) | null;
-declare var onoffline: ((this: Window, ev: Event) => any) | null;
-declare var ononline: ((this: Window, ev: Event) => any) | null;
-declare var onpagehide: ((this: Window, ev: PageTransitionEvent) => any) | null;
-declare var onpageshow: ((this: Window, ev: PageTransitionEvent) => any) | null;
-declare var onpopstate: ((this: Window, ev: PopStateEvent) => any) | null;
-declare var onrejectionhandled: ((this: Window, ev: PromiseRejectionEvent) => any) | null;
-declare var onstorage: ((this: Window, ev: StorageEvent) => any) | null;
-declare var onunhandledrejection: ((this: Window, ev: PromiseRejectionEvent) => any) | null;
-declare var onunload: ((this: Window, ev: Event) => any) | null;
+declare var sessionStorage: Storage;
 declare function addEventListener<K extends keyof WindowEventMap>(type: K, listener: (this: Window, ev: WindowEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
 declare function addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
 declare function removeEventListener<K extends keyof WindowEventMap>(type: K, listener: (this: Window, ev: WindowEventMap[K]) => any, options?: boolean | EventListenerOptions): void;
 declare function removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;
-type HeadersInit = Headers | string[][] | Record<string, string>;
-type BodyInit = Blob | BufferSource | FormData | URLSearchParams | ReadableStream<Uint8Array> | string;
-type RequestInfo = Request | string;
+type AlgorithmIdentifier = Algorithm | string;
+type BigInteger = Uint8Array;
+type BinaryData = ArrayBuffer | ArrayBufferView;
 type BlobPart = BufferSource | Blob | string;
-type DOMHighResTimeStamp = number;
-type RenderingContext = CanvasRenderingContext2D | ImageBitmapRenderingContext | WebGLRenderingContext | WebGL2RenderingContext;
-type HTMLOrSVGImageElement = HTMLImageElement | SVGImageElement;
-type CanvasImageSource = HTMLOrSVGImageElement | HTMLVideoElement | HTMLCanvasElement | ImageBitmap | OffscreenCanvas;
-type OffscreenRenderingContext = OffscreenCanvasRenderingContext2D | ImageBitmapRenderingContext | WebGLRenderingContext | WebGL2RenderingContext;
-type MessageEventSource = WindowProxy | MessagePort | ServiceWorker;
-type HTMLOrSVGScriptElement = HTMLScriptElement | SVGScriptElement;
-type ImageBitmapSource = CanvasImageSource | Blob | ImageData;
-type MediaProvider = MediaStream | MediaSource | Blob;
-type OnErrorEventHandler = OnErrorEventHandlerNonNull | null;
-type OnBeforeUnloadEventHandler = OnBeforeUnloadEventHandlerNonNull | null;
-type TimerHandler = string | Function;
-type ConstrainULong = number | ConstrainULongRange;
-type ConstrainDouble = number | ConstrainDoubleRange;
+type BodyInit = ReadableStream | XMLHttpRequestBodyInit;
+type BufferSource = ArrayBufferView | ArrayBuffer;
+type COSEAlgorithmIdentifier = number;
+type CSSNumberish = number;
+type CanvasImageSource = HTMLOrSVGImageElement | HTMLVideoElement | HTMLCanvasElement | ImageBitmap;
+type ClipboardItemData = Promise<ClipboardItemDataType>;
+type ClipboardItemDataType = string | Blob;
+type ClipboardItems = ClipboardItem[];
 type ConstrainBoolean = boolean | ConstrainBooleanParameters;
 type ConstrainDOMString = string | string[] | ConstrainDOMStringParameters;
-type PerformanceEntryList = PerformanceEntry[];
-type ReadableStreamReader<T> = ReadableStreamDefaultReader<T>;
-type ReadableStreamController<T> = ReadableStreamDefaultController<T>;
-type VibratePattern = number | number[];
-type COSEAlgorithmIdentifier = number;
-type UvmEntry = number[];
-type UvmEntries = UvmEntry[];
-type AlgorithmIdentifier = string | Algorithm;
-type HashAlgorithmIdentifier = AlgorithmIdentifier;
-type BigInteger = Uint8Array;
-type NamedCurve = string;
-type GLenum = number;
-type GLboolean = boolean;
+type ConstrainDouble = number | ConstrainDoubleRange;
+type ConstrainULong = number | ConstrainULongRange;
+type DOMHighResTimeStamp = number;
+type DOMTimeStamp = number;
+type EventListenerOrEventListenerObject = EventListener | EventListenerObject;
+type Float32List = Float32Array | GLfloat[];
+type FormDataEntryValue = File | string;
 type GLbitfield = number;
+type GLboolean = boolean;
+type GLclampf = number;
+type GLenum = number;
+type GLfloat = number;
 type GLint = number;
-type GLsizei = number;
+type GLint64 = number;
 type GLintptr = number;
+type GLsizei = number;
 type GLsizeiptr = number;
 type GLuint = number;
-type GLfloat = number;
-type GLclampf = number;
-type TexImageSource = ImageBitmap | ImageData | HTMLImageElement | HTMLCanvasElement | HTMLVideoElement | OffscreenCanvas;
-type Float32List = Float32Array | GLfloat[];
-type Int32List = Int32Array | GLint[];
-type GLint64 = number;
 type GLuint64 = number;
-type Uint32List = Uint32Array | GLuint[];
-type BufferSource = ArrayBufferView | ArrayBuffer;
-type DOMTimeStamp = number;
-type LineAndPositionSetting = number | AutoKeyword;
-type FormDataEntryValue = File | string;
+type HTMLOrSVGImageElement = HTMLImageElement | SVGImageElement;
+type HTMLOrSVGScriptElement = HTMLScriptElement | SVGScriptElement;
+type HashAlgorithmIdentifier = AlgorithmIdentifier;
+type HeadersInit = string[][] | Record<string, string> | Headers;
+type IDBValidKey = number | string | Date | BufferSource | IDBValidKey[];
+type ImageBitmapSource = CanvasImageSource | Blob | ImageData;
 type InsertPosition = "beforebegin" | "afterbegin" | "beforeend" | "afterend";
-type IDBValidKey = number | string | Date | BufferSource | IDBArrayKey;
+type Int32List = Int32Array | GLint[];
+type LineAndPositionSetting = number | AutoKeyword;
+type MediaProvider = MediaStream | MediaSource | Blob;
+type MessageEventSource = WindowProxy | MessagePort | ServiceWorker;
 type MutationRecordType = "attributes" | "characterData" | "childList";
-type IDBKeyPath = string;
-type Transferable = ArrayBuffer | MessagePort | ImageBitmap | OffscreenCanvas;
-type RTCIceGatherCandidate = RTCIceCandidateDictionary | RTCIceCandidateComplete;
-type RTCTransport = RTCDtlsTransport | RTCSrtpSdesTransport;
-/** @deprecated */
-type MouseWheelEvent = WheelEvent;
-type WindowProxy = Window;
+type NamedCurve = string;
+type OnBeforeUnloadEventHandler = OnBeforeUnloadEventHandlerNonNull | null;
+type OnErrorEventHandler = OnErrorEventHandlerNonNull | null;
+type PerformanceEntryList = PerformanceEntry[];
+type ReadableStreamController<T> = ReadableStreamDefaultController<T>;
 type ReadableStreamDefaultReadResult<T> = ReadableStreamDefaultReadValueResult<T> | ReadableStreamDefaultReadDoneResult;
+type ReadableStreamReader<T> = ReadableStreamDefaultReader<T>;
+type RenderingContext = CanvasRenderingContext2D | ImageBitmapRenderingContext | WebGLRenderingContext | WebGL2RenderingContext;
+type RequestInfo = Request | string;
+type TexImageSource = ImageBitmap | ImageData | HTMLImageElement | HTMLCanvasElement | HTMLVideoElement;
+type TimerHandler = string | Function;
+type Transferable = ArrayBuffer | MessagePort | ImageBitmap;
+type Uint32List = Uint32Array | GLuint[];
+type UvmEntries = UvmEntry[];
+type UvmEntry = number[];
+type VibratePattern = number | number[];
+type WindowProxy = Window;
+type XMLHttpRequestBodyInit = Blob | BufferSource | FormData | URLSearchParams | string;
 type AlignSetting = "center" | "end" | "left" | "right" | "start";
 type AnimationPlayState = "finished" | "idle" | "paused" | "running";
+type AnimationReplaceState = "active" | "persisted" | "removed";
 type AppendMode = "segments" | "sequence";
 type AttestationConveyancePreference = "direct" | "enterprise" | "indirect" | "none";
 type AudioContextLatencyCategory = "balanced" | "interactive" | "playback";
@@ -19722,16 +18795,22 @@
 type CanPlayTypeResult = "" | "maybe" | "probably";
 type CanvasDirection = "inherit" | "ltr" | "rtl";
 type CanvasFillRule = "evenodd" | "nonzero";
+type CanvasFontKerning = "auto" | "none" | "normal";
+type CanvasFontStretch = "condensed" | "expanded" | "extra-condensed" | "extra-expanded" | "normal" | "semi-condensed" | "semi-expanded" | "ultra-condensed" | "ultra-expanded";
+type CanvasFontVariantCaps = "all-petite-caps" | "all-small-caps" | "normal" | "petite-caps" | "small-caps" | "titling-caps" | "unicase";
 type CanvasLineCap = "butt" | "round" | "square";
 type CanvasLineJoin = "bevel" | "miter" | "round";
 type CanvasTextAlign = "center" | "end" | "left" | "right" | "start";
 type CanvasTextBaseline = "alphabetic" | "bottom" | "hanging" | "ideographic" | "middle" | "top";
+type CanvasTextRendering = "auto" | "geometricPrecision" | "optimizeLegibility" | "optimizeSpeed";
 type ChannelCountMode = "clamped-max" | "explicit" | "max";
 type ChannelInterpretation = "discrete" | "speakers";
 type ClientTypes = "all" | "sharedworker" | "window" | "worker";
+type ColorGamut = "p3" | "rec2020" | "srgb";
 type ColorSpaceConversion = "default" | "none";
 type CompositeOperation = "accumulate" | "add" | "replace";
 type CompositeOperationOrAuto = "accumulate" | "add" | "auto" | "replace";
+type ConnectionType = "bluetooth" | "cellular" | "ethernet" | "mixed" | "none" | "other" | "unknown" | "wifi";
 type CredentialMediationRequirement = "optional" | "required" | "silent";
 type DOMParserSupportedType = "application/xhtml+xml" | "application/xml" | "image/svg+xml" | "text/html" | "text/xml";
 type DirectionSetting = "" | "lr" | "rl";
@@ -19741,10 +18820,12 @@
 type EndOfStreamError = "decode" | "network";
 type EndingType = "native" | "transparent";
 type FillMode = "auto" | "backwards" | "both" | "forwards" | "none";
+type FontFaceLoadStatus = "error" | "loaded" | "loading" | "unloaded";
+type FontFaceSetLoadStatus = "loaded" | "loading";
 type FullscreenNavigationUI = "auto" | "hide" | "show";
-type GamepadHand = "" | "left" | "right";
 type GamepadHapticActuatorType = "vibration";
-type GamepadMappingType = "" | "standard";
+type GamepadMappingType = "" | "standard" | "xr-standard";
+type HdrMetadataType = "smpteSt2086" | "smpteSt2094-10" | "smpteSt2094-40";
 type IDBCursorDirection = "next" | "nextunique" | "prev" | "prevunique";
 type IDBRequestReadyState = "done" | "pending";
 type IDBTransactionMode = "readonly" | "readwrite" | "versionchange";
@@ -19755,68 +18836,65 @@
 type KeyType = "private" | "public" | "secret";
 type KeyUsage = "decrypt" | "deriveBits" | "deriveKey" | "encrypt" | "sign" | "unwrapKey" | "verify" | "wrapKey";
 type LineAlignSetting = "center" | "end" | "start";
-type ListeningState = "active" | "disambiguation" | "inactive";
-type MSCredentialType = "FIDO_2_0";
-type MSTransportType = "BT" | "Embedded" | "NFC" | "USB";
-type MSWebViewPermissionState = "allow" | "defer" | "deny" | "unknown";
-type MSWebViewPermissionType = "geolocation" | "media" | "pointerlock" | "unlimitedIndexedDBQuota" | "webnotifications";
+type MediaDecodingType = "file" | "media-source" | "webrtc";
 type MediaDeviceKind = "audioinput" | "audiooutput" | "videoinput";
+type MediaEncodingType = "record" | "webrtc";
 type MediaKeyMessageType = "individualization-request" | "license-release" | "license-renewal" | "license-request";
+type MediaKeySessionClosedReason = "closed-by-application" | "hardware-context-reset" | "internal-error" | "release-acknowledged" | "resource-evicted";
 type MediaKeySessionType = "persistent-license" | "temporary";
-type MediaKeyStatus = "expired" | "internal-error" | "output-downscaled" | "output-restricted" | "released" | "status-pending" | "usable";
+type MediaKeyStatus = "expired" | "internal-error" | "output-downscaled" | "output-restricted" | "released" | "status-pending" | "usable" | "usable-in-future";
 type MediaKeysRequirement = "not-allowed" | "optional" | "required";
+type MediaSessionAction = "hangup" | "nexttrack" | "pause" | "play" | "previoustrack" | "seekbackward" | "seekforward" | "seekto" | "skipad" | "stop" | "togglecamera" | "togglemicrophone";
+type MediaSessionPlaybackState = "none" | "paused" | "playing";
 type MediaStreamTrackState = "ended" | "live";
-type NavigationReason = "down" | "left" | "right" | "up";
 type NavigationType = "back_forward" | "navigate" | "prerender" | "reload";
 type NotificationDirection = "auto" | "ltr" | "rtl";
 type NotificationPermission = "default" | "denied" | "granted";
-type OffscreenRenderingContextId = "2d" | "bitmaprenderer" | "webgl" | "webgl2";
 type OrientationLockType = "any" | "landscape" | "landscape-primary" | "landscape-secondary" | "natural" | "portrait" | "portrait-primary" | "portrait-secondary";
 type OrientationType = "landscape-primary" | "landscape-secondary" | "portrait-primary" | "portrait-secondary";
 type OscillatorType = "custom" | "sawtooth" | "sine" | "square" | "triangle";
 type OverSampleType = "2x" | "4x" | "none";
 type PanningModelType = "HRTF" | "equalpower";
 type PaymentComplete = "fail" | "success" | "unknown";
-type PaymentShippingType = "delivery" | "pickup" | "shipping";
-type PermissionName = "accelerometer" | "ambient-light-sensor" | "background-fetch" | "background-sync" | "bluetooth" | "camera" | "clipboard-read" | "clipboard-write" | "device-info" | "display-capture" | "geolocation" | "gyroscope" | "magnetometer" | "microphone" | "midi" | "nfc" | "notifications" | "persistent-storage" | "push" | "speaker";
+type PermissionName = "gamepad" | "geolocation" | "notifications" | "persistent-storage" | "push" | "screen-wake-lock";
 type PermissionState = "denied" | "granted" | "prompt";
 type PlaybackDirection = "alternate" | "alternate-reverse" | "normal" | "reverse";
 type PositionAlignSetting = "auto" | "center" | "line-left" | "line-right";
+type PredefinedColorSpace = "display-p3" | "srgb";
 type PremultiplyAlpha = "default" | "none" | "premultiply";
+type PresentationStyle = "attachment" | "inline" | "unspecified";
 type PublicKeyCredentialType = "public-key";
 type PushEncryptionKeyName = "auth" | "p256dh";
 type PushPermissionState = "denied" | "granted" | "prompt";
 type RTCBundlePolicy = "balanced" | "max-bundle" | "max-compat";
 type RTCDataChannelState = "closed" | "closing" | "connecting" | "open";
-type RTCDtlsRole = "auto" | "client" | "server";
+type RTCDegradationPreference = "balanced" | "maintain-framerate" | "maintain-resolution";
 type RTCDtlsTransportState = "closed" | "connected" | "connecting" | "failed" | "new";
-type RTCErrorDetailType = "data-channel-failure" | "dtls-failure" | "fingerprint-failure" | "hardware-encoder-error" | "hardware-encoder-not-available" | "sctp-failure" | "sdp-syntax-error";
 type RTCIceCandidateType = "host" | "prflx" | "relay" | "srflx";
 type RTCIceComponent = "rtcp" | "rtp";
 type RTCIceConnectionState = "checking" | "closed" | "completed" | "connected" | "disconnected" | "failed" | "new";
 type RTCIceCredentialType = "password";
-type RTCIceGatherPolicy = "all" | "nohost" | "relay";
 type RTCIceGathererState = "complete" | "gathering" | "new";
 type RTCIceGatheringState = "complete" | "gathering" | "new";
 type RTCIceProtocol = "tcp" | "udp";
-type RTCIceRole = "controlled" | "controlling" | "unknown";
 type RTCIceTcpCandidateType = "active" | "passive" | "so";
 type RTCIceTransportPolicy = "all" | "relay";
 type RTCIceTransportState = "checking" | "closed" | "completed" | "connected" | "disconnected" | "failed" | "new";
 type RTCPeerConnectionState = "closed" | "connected" | "connecting" | "disconnected" | "failed" | "new";
+type RTCPriorityType = "high" | "low" | "medium" | "very-low";
 type RTCRtcpMuxPolicy = "require";
 type RTCRtpTransceiverDirection = "inactive" | "recvonly" | "sendonly" | "sendrecv" | "stopped";
-type RTCSctpTransportState = "closed" | "connected" | "connecting";
 type RTCSdpType = "answer" | "offer" | "pranswer" | "rollback";
 type RTCSignalingState = "closed" | "have-local-offer" | "have-local-pranswer" | "have-remote-offer" | "have-remote-pranswer" | "stable";
-type RTCStatsIceCandidatePairState = "failed" | "frozen" | "in-progress" | "succeeded" | "waiting";
-type RTCStatsIceCandidateType = "host" | "peerreflexive" | "relayed" | "serverreflexive";
-type RTCStatsType = "candidate-pair" | "certificate" | "codec" | "csrc" | "data-channel" | "ice-server" | "inbound-rtp" | "local-candidate" | "media-source" | "outbound-rtp" | "peer-connection" | "receiver" | "remote-candidate" | "remote-inbound-rtp" | "remote-outbound-rtp" | "sctp-transport" | "sender" | "stream" | "track" | "transceiver" | "transport";
+type RTCStatsIceCandidatePairState = "failed" | "frozen" | "in-progress" | "inprogress" | "succeeded" | "waiting";
+type RTCStatsType = "candidate-pair" | "certificate" | "codec" | "csrc" | "data-channel" | "inbound-rtp" | "local-candidate" | "media-source" | "outbound-rtp" | "peer-connection" | "remote-candidate" | "remote-inbound-rtp" | "remote-outbound-rtp" | "track" | "transport";
 type ReadyState = "closed" | "ended" | "open";
+type RecordingState = "inactive" | "paused" | "recording";
 type ReferrerPolicy = "" | "no-referrer" | "no-referrer-when-downgrade" | "origin" | "origin-when-cross-origin" | "same-origin" | "strict-origin" | "strict-origin-when-cross-origin" | "unsafe-url";
+type RemotePlaybackState = "connected" | "connecting" | "disconnected";
 type RequestCache = "default" | "force-cache" | "no-cache" | "no-store" | "only-if-cached" | "reload";
 type RequestCredentials = "include" | "omit" | "same-origin";
-type RequestDestination = "" | "audio" | "audioworklet" | "document" | "embed" | "font" | "image" | "manifest" | "object" | "paintworklet" | "report" | "script" | "sharedworker" | "style" | "track" | "video" | "worker" | "xslt";
+type RequestDestination = "" | "audio" | "audioworklet" | "document" | "embed" | "font" | "frame" | "iframe" | "image" | "manifest" | "object" | "paintworklet" | "report" | "script" | "sharedworker" | "style" | "track" | "video" | "worker" | "xslt";
 type RequestMode = "cors" | "navigate" | "no-cors" | "same-origin";
 type RequestRedirect = "error" | "follow" | "manual";
 type ResidentKeyRequirement = "discouraged" | "preferred" | "required";
@@ -19827,17 +18905,18 @@
 type ScrollLogicalPosition = "center" | "end" | "nearest" | "start";
 type ScrollRestoration = "auto" | "manual";
 type ScrollSetting = "" | "up";
+type SecurityPolicyViolationEventDisposition = "enforce" | "report";
 type SelectionMode = "end" | "preserve" | "select" | "start";
 type ServiceWorkerState = "activated" | "activating" | "installed" | "installing" | "parsed" | "redundant";
 type ServiceWorkerUpdateViaCache = "all" | "imports" | "none";
 type ShadowRootMode = "closed" | "open";
-type SpeechRecognitionErrorCode = "aborted" | "audio-capture" | "bad-grammar" | "language-not-supported" | "network" | "no-speech" | "not-allowed" | "service-not-allowed";
+type SlotAssignmentMode = "manual" | "named";
 type SpeechSynthesisErrorCode = "audio-busy" | "audio-hardware" | "canceled" | "interrupted" | "invalid-argument" | "language-unavailable" | "network" | "not-allowed" | "synthesis-failed" | "synthesis-unavailable" | "text-too-long" | "voice-unavailable";
 type TextTrackKind = "captions" | "chapters" | "descriptions" | "metadata" | "subtitles";
 type TextTrackMode = "disabled" | "hidden" | "showing";
 type TouchType = "direct" | "stylus";
+type TransferFunction = "hlg" | "pq" | "srgb";
 type UserVerificationRequirement = "discouraged" | "preferred" | "required";
-type VRDisplayEventReason = "mounted" | "navigation" | "requested" | "unmounted";
 type VideoFacingModeEnum = "environment" | "left" | "right" | "user";
 type VisibilityState = "hidden" | "visible";
 type WebGLPowerPreference = "default" | "high-performance" | "low-power";
diff --git a/node_modules/typescript/lib/lib.dom.iterable.d.ts b/node_modules/typescript/lib/lib.dom.iterable.d.ts
index 7c9670c..3858f1a 100644
--- a/node_modules/typescript/lib/lib.dom.iterable.d.ts
+++ b/node_modules/typescript/lib/lib.dom.iterable.d.ts
@@ -19,7 +19,7 @@
 
 
 /////////////////////////////
-/// DOM Iterable APIs
+/// Window Iterable APIs
 /////////////////////////////
 
 interface AudioParam {
@@ -50,10 +50,6 @@
     setLineDash(segments: Iterable<number>): void;
 }
 
-interface ClientRectList {
-    [Symbol.iterator](): IterableIterator<ClientRect>;
-}
-
 interface DOMRectList {
     [Symbol.iterator](): IterableIterator<DOMRect>;
 }
@@ -77,6 +73,9 @@
     [Symbol.iterator](): IterableIterator<File>;
 }
 
+interface FontFaceSet extends Set<FontFace> {
+}
+
 interface FormData {
     [Symbol.iterator](): IterableIterator<[string, FormDataEntryValue]>;
     /**
@@ -110,7 +109,7 @@
 }
 
 interface HTMLSelectElement {
-    [Symbol.iterator](): IterableIterator<Element>;
+    [Symbol.iterator](): IterableIterator<HTMLOptionElement>;
 }
 
 interface Headers {
@@ -156,6 +155,11 @@
     [Symbol.iterator](): IterableIterator<string>;
 }
 
+interface MessageEvent<T = any> {
+    /** @deprecated */
+    initMessageEvent(type: string, bubbles?: boolean, cancelable?: boolean, data?: any, origin?: string, lastEventId?: string, source?: MessageEventSource | null, ports?: Iterable<MessagePort>): void;
+}
+
 interface MimeTypeArray {
     [Symbol.iterator](): IterableIterator<MimeType>;
 }
@@ -166,6 +170,7 @@
 
 interface Navigator {
     requestMediaKeySystemAccess(keySystem: string, supportedConfigurations: Iterable<MediaKeySystemConfiguration>): Promise<MediaKeySystemAccess>;
+    vibrate(pattern: Iterable<number>): boolean;
 }
 
 interface NodeList {
@@ -208,11 +213,14 @@
     [Symbol.iterator](): IterableIterator<Plugin>;
 }
 
-interface RTCRtpTransceiver {
-    setCodecPreferences(codecs: Iterable<RTCRtpCodecCapability>): void;
+interface RTCStatsReport extends ReadonlyMap<string, any> {
 }
 
-interface RTCStatsReport extends ReadonlyMap<string, any> {
+interface ReadableStream<R = any> {
+    [Symbol.iterator](): IterableIterator<any>;
+    entries(): IterableIterator<[number, any]>;
+    keys(): IterableIterator<number>;
+    values(): IterableIterator<any>;
 }
 
 interface SVGLengthList {
@@ -231,12 +239,12 @@
     [Symbol.iterator](): IterableIterator<string>;
 }
 
-interface SourceBufferList {
-    [Symbol.iterator](): IterableIterator<SourceBuffer>;
+interface SVGTransformList {
+    [Symbol.iterator](): IterableIterator<SVGTransform>;
 }
 
-interface SpeechGrammarList {
-    [Symbol.iterator](): IterableIterator<SpeechGrammar>;
+interface SourceBufferList {
+    [Symbol.iterator](): IterableIterator<SourceBuffer>;
 }
 
 interface SpeechRecognitionResult {
@@ -251,6 +259,16 @@
     [Symbol.iterator](): IterableIterator<CSSStyleSheet>;
 }
 
+interface SubtleCrypto {
+    deriveKey(algorithm: AlgorithmIdentifier | EcdhKeyDeriveParams | HkdfParams | Pbkdf2Params, baseKey: CryptoKey, derivedKeyType: AlgorithmIdentifier | AesDerivedKeyParams | HmacImportParams | HkdfParams | Pbkdf2Params, extractable: boolean, keyUsages: Iterable<KeyUsage>): Promise<CryptoKey>;
+    generateKey(algorithm: RsaHashedKeyGenParams | EcKeyGenParams, extractable: boolean, keyUsages: KeyUsage[]): Promise<CryptoKeyPair>;
+    generateKey(algorithm: AesKeyGenParams | HmacKeyGenParams | Pbkdf2Params, extractable: boolean, keyUsages: KeyUsage[]): Promise<CryptoKey>;
+    generateKey(algorithm: AlgorithmIdentifier, extractable: boolean, keyUsages: Iterable<KeyUsage>): Promise<CryptoKeyPair | CryptoKey>;
+    importKey(format: "jwk", keyData: JsonWebKey, algorithm: AlgorithmIdentifier | RsaHashedImportParams | EcKeyImportParams | HmacImportParams | AesKeyAlgorithm, extractable: boolean, keyUsages: KeyUsage[]): Promise<CryptoKey>;
+    importKey(format: Exclude<KeyFormat, "jwk">, keyData: BufferSource, algorithm: AlgorithmIdentifier | RsaHashedImportParams | EcKeyImportParams | HmacImportParams | AesKeyAlgorithm, extractable: boolean, keyUsages: Iterable<KeyUsage>): Promise<CryptoKey>;
+    unwrapKey(format: KeyFormat, wrappedKey: BufferSource, unwrappingKey: CryptoKey, unwrapAlgorithm: AlgorithmIdentifier | RsaOaepParams | AesCtrParams | AesCbcParams | AesGcmParams, unwrappedKeyAlgorithm: AlgorithmIdentifier | RsaHashedImportParams | EcKeyImportParams | HmacImportParams | AesKeyAlgorithm, extractable: boolean, keyUsages: Iterable<KeyUsage>): Promise<CryptoKey>;
+}
+
 interface TextTrackCueList {
     [Symbol.iterator](): IterableIterator<TextTrackCue>;
 }
@@ -279,10 +297,6 @@
     values(): IterableIterator<string>;
 }
 
-interface VRDisplay {
-    requestPresent(layers: Iterable<VRLayer>): Promise<void>;
-}
-
 interface WEBGL_draw_buffers {
     drawBuffersWEBGL(buffers: Iterable<GLenum>): void;
 }
diff --git a/node_modules/typescript/lib/lib.es2015.core.d.ts b/node_modules/typescript/lib/lib.es2015.core.d.ts
index 81bbb3f..5caca41 100644
--- a/node_modules/typescript/lib/lib.es2015.core.d.ts
+++ b/node_modules/typescript/lib/lib.es2015.core.d.ts
@@ -43,7 +43,7 @@
     findIndex(predicate: (value: T, index: number, obj: T[]) => unknown, thisArg?: any): number;

 

     /**

-     * Returns the this object after filling the section identified by start and end with value

+     * Changes all array elements from `start` to `end` index to a static `value` and returns the modified array

      * @param value value to fill array section with

      * @param start index to start filling the array at. If start is negative, it is treated as

      * length+start where length is the length of the array.

@@ -507,11 +507,13 @@
     fromCodePoint(...codePoints: number[]): string;

 

     /**

-     * String.raw is intended for use as a tag function of a Tagged Template String. When called

-     * as such the first argument will be a well formed template call site object and the rest

-     * parameter will contain the substitution values.

+     * String.raw is usually used as a tag function of a Tagged Template String. When called as

+     * such, the first argument will be a well formed template call site object and the rest

+     * parameter will contain the substitution values. It can also be called directly, for example,

+     * to interleave strings and values from your own tag function, and in this case the only thing

+     * it needs from the first argument is the raw property.

      * @param template A well-formed template string call site representation.

      * @param substitutions A set of substitution values.

      */

-    raw(template: TemplateStringsArray, ...substitutions: any[]): string;

+    raw(template: { raw: readonly string[] | ArrayLike<string>}, ...substitutions: any[]): string;

 }

diff --git a/node_modules/typescript/lib/lib.es2015.iterable.d.ts b/node_modules/typescript/lib/lib.es2015.iterable.d.ts
index b6121bc..b02a4a0 100644
--- a/node_modules/typescript/lib/lib.es2015.iterable.d.ts
+++ b/node_modules/typescript/lib/lib.es2015.iterable.d.ts
@@ -163,7 +163,7 @@
 interface WeakMap<K extends object, V> { }

 

 interface WeakMapConstructor {

-    new <K extends object, V>(iterable: Iterable<[K, V]>): WeakMap<K, V>;

+    new <K extends object, V>(iterable: Iterable<readonly [K, V]>): WeakMap<K, V>;

 }

 

 interface Set<T> {

diff --git a/node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts b/node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts
index 80fa132..932087e 100644
--- a/node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts
+++ b/node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts
@@ -239,9 +239,9 @@
     match(matcher: { [Symbol.match](string: string): RegExpMatchArray | null; }): RegExpMatchArray | null;

 

     /**

-     * Replaces text in a string, using an object that supports replacement within a string.

-     * @param searchValue A object can search for and replace matches within a string.

-     * @param replaceValue A string containing the text to replace for every successful match of searchValue in this string.

+     * Replaces first match with string or all matches with RegExp.

+     * @param searchValue A string or RegExp search value.

+     * @param replaceValue A string containing the text to replace for match.

      */

     replace(searchValue: { [Symbol.replace](string: string, replaceValue: string): string; }, replaceValue: string): string;

 

diff --git a/node_modules/typescript/lib/lib.es2020.bigint.d.ts b/node_modules/typescript/lib/lib.es2020.bigint.d.ts
index 92acfe4..4d2cc2a 100644
--- a/node_modules/typescript/lib/lib.es2020.bigint.d.ts
+++ b/node_modules/typescript/lib/lib.es2020.bigint.d.ts
@@ -184,7 +184,7 @@
     every(predicate: (value: bigint, index: number, array: BigInt64Array) => boolean, thisArg?: any): boolean;
 
     /**
-     * Returns the this object after filling the section identified by start and end with value
+     * Changes all array elements from `start` to `end` index to a static `value` and returns the modified array
      * @param value value to fill array section with
      * @param start index to start filling the array at. If start is negative, it is treated as
      * length+start where length is the length of the array.
@@ -456,7 +456,7 @@
     every(predicate: (value: bigint, index: number, array: BigUint64Array) => boolean, thisArg?: any): boolean;
 
     /**
-     * Returns the this object after filling the section identified by start and end with value
+     * Changes all array elements from `start` to `end` index to a static `value` and returns the modified array
      * @param value value to fill array section with
      * @param start index to start filling the array at. If start is negative, it is treated as
      * length+start where length is the length of the array.
diff --git a/node_modules/typescript/lib/lib.es5.d.ts b/node_modules/typescript/lib/lib.es5.d.ts
index 878523d..a52ef45 100644
--- a/node_modules/typescript/lib/lib.es5.d.ts
+++ b/node_modules/typescript/lib/lib.es5.d.ts
@@ -1796,7 +1796,7 @@
     every(predicate: (value: number, index: number, array: Int8Array) => unknown, thisArg?: any): boolean;

 

     /**

-     * Returns the this object after filling the section identified by start and end with value

+     * Changes all array elements from `start` to `end` index to a static `value` and returns the modified array

      * @param value value to fill array section with

      * @param start index to start filling the array at. If start is negative, it is treated as

      * length+start where length is the length of the array.

@@ -2078,7 +2078,7 @@
     every(predicate: (value: number, index: number, array: Uint8Array) => unknown, thisArg?: any): boolean;

 

     /**

-     * Returns the this object after filling the section identified by start and end with value

+     * Changes all array elements from `start` to `end` index to a static `value` and returns the modified array

      * @param value value to fill array section with

      * @param start index to start filling the array at. If start is negative, it is treated as

      * length+start where length is the length of the array.

@@ -2360,7 +2360,7 @@
     every(predicate: (value: number, index: number, array: Uint8ClampedArray) => unknown, thisArg?: any): boolean;

 

     /**

-     * Returns the this object after filling the section identified by start and end with value

+     * Changes all array elements from `start` to `end` index to a static `value` and returns the modified array

      * @param value value to fill array section with

      * @param start index to start filling the array at. If start is negative, it is treated as

      * length+start where length is the length of the array.

@@ -2641,7 +2641,7 @@
     every(predicate: (value: number, index: number, array: Int16Array) => unknown, thisArg?: any): boolean;

 

     /**

-     * Returns the this object after filling the section identified by start and end with value

+     * Changes all array elements from `start` to `end` index to a static `value` and returns the modified array

      * @param value value to fill array section with

      * @param start index to start filling the array at. If start is negative, it is treated as

      * length+start where length is the length of the array.

@@ -2923,7 +2923,7 @@
     every(predicate: (value: number, index: number, array: Uint16Array) => unknown, thisArg?: any): boolean;

 

     /**

-     * Returns the this object after filling the section identified by start and end with value

+     * Changes all array elements from `start` to `end` index to a static `value` and returns the modified array

      * @param value value to fill array section with

      * @param start index to start filling the array at. If start is negative, it is treated as

      * length+start where length is the length of the array.

@@ -3205,7 +3205,7 @@
     every(predicate: (value: number, index: number, array: Int32Array) => unknown, thisArg?: any): boolean;

 

     /**

-     * Returns the this object after filling the section identified by start and end with value

+     * Changes all array elements from `start` to `end` index to a static `value` and returns the modified array

      * @param value value to fill array section with

      * @param start index to start filling the array at. If start is negative, it is treated as

      * length+start where length is the length of the array.

@@ -3487,7 +3487,7 @@
     every(predicate: (value: number, index: number, array: Uint32Array) => unknown, thisArg?: any): boolean;

 

     /**

-     * Returns the this object after filling the section identified by start and end with value

+     * Changes all array elements from `start` to `end` index to a static `value` and returns the modified array

      * @param value value to fill array section with

      * @param start index to start filling the array at. If start is negative, it is treated as

      * length+start where length is the length of the array.

@@ -3768,7 +3768,7 @@
     every(predicate: (value: number, index: number, array: Float32Array) => unknown, thisArg?: any): boolean;

 

     /**

-     * Returns the this object after filling the section identified by start and end with value

+     * Changes all array elements from `start` to `end` index to a static `value` and returns the modified array

      * @param value value to fill array section with

      * @param start index to start filling the array at. If start is negative, it is treated as

      * length+start where length is the length of the array.

@@ -4051,7 +4051,7 @@
     every(predicate: (value: number, index: number, array: Float64Array) => unknown, thisArg?: any): boolean;

 

     /**

-     * Returns the this object after filling the section identified by start and end with value

+     * Changes all array elements from `start` to `end` index to a static `value` and returns the modified array

      * @param value value to fill array section with

      * @param start index to start filling the array at. If start is negative, it is treated as

      * length+start where length is the length of the array.

diff --git a/node_modules/typescript/lib/lib.esnext.intl.d.ts b/node_modules/typescript/lib/lib.esnext.intl.d.ts
index b355e9f..676653e 100644
--- a/node_modules/typescript/lib/lib.esnext.intl.d.ts
+++ b/node_modules/typescript/lib/lib.esnext.intl.d.ts
@@ -27,6 +27,6 @@
     }

 

     interface NumberFormat {

-        formatToParts(number?: number): NumberFormatPart[];

+        formatToParts(number?: number | bigint): NumberFormatPart[];

     }

 }

diff --git a/node_modules/typescript/lib/lib.webworker.d.ts b/node_modules/typescript/lib/lib.webworker.d.ts
index be0b44f..0e5b90f 100644
--- a/node_modules/typescript/lib/lib.webworker.d.ts
+++ b/node_modules/typescript/lib/lib.webworker.d.ts
@@ -25,14 +25,15 @@
 interface AddEventListenerOptions extends EventListenerOptions {
     once?: boolean;
     passive?: boolean;
+    signal?: AbortSignal;
 }
 
 interface AesCbcParams extends Algorithm {
-    iv: Int8Array | Int16Array | Int32Array | Uint8Array | Uint16Array | Uint32Array | Uint8ClampedArray | Float32Array | Float64Array | DataView | ArrayBuffer;
+    iv: BufferSource;
 }
 
 interface AesCtrParams extends Algorithm {
-    counter: Int8Array | Int16Array | Int32Array | Uint8Array | Uint16Array | Uint32Array | Uint8ClampedArray | Float32Array | Float64Array | DataView | ArrayBuffer;
+    counter: BufferSource;
     length: number;
 }
 
@@ -41,8 +42,8 @@
 }
 
 interface AesGcmParams extends Algorithm {
-    additionalData?: Int8Array | Int16Array | Int32Array | Uint8Array | Uint16Array | Uint32Array | Uint8ClampedArray | Float32Array | Float64Array | DataView | ArrayBuffer;
-    iv: Int8Array | Int16Array | Int32Array | Uint8Array | Uint16Array | Uint32Array | Uint8ClampedArray | Float32Array | Float64Array | DataView | ArrayBuffer;
+    additionalData?: BufferSource;
+    iv: BufferSource;
     tagLength?: number;
 }
 
@@ -58,6 +59,14 @@
     name: string;
 }
 
+interface AudioConfiguration {
+    bitrate?: number;
+    channels?: string;
+    contentType: string;
+    samplerate?: number;
+    spatialRendering?: boolean;
+}
+
 interface BlobPropertyBag {
     endings?: EndingType;
     type?: string;
@@ -69,11 +78,6 @@
     ignoreVary?: boolean;
 }
 
-interface CanvasRenderingContext2DSettings {
-    alpha?: boolean;
-    desynchronized?: boolean;
-}
-
 interface ClientQueryOptions {
     includeUncontrolled?: boolean;
     type?: ClientTypes;
@@ -144,11 +148,6 @@
     y?: number;
 }
 
-interface DevicePermissionDescriptor extends PermissionDescriptor {
-    deviceId?: string;
-    name: "camera" | "microphone" | "speaker";
-}
-
 interface EcKeyGenParams extends Algorithm {
     namedCurve: NamedCurve;
 }
@@ -200,6 +199,7 @@
 
 interface FetchEventInit extends ExtendableEventInit {
     clientId?: string;
+    handled?: Promise<undefined>;
     preloadResponse?: Promise<any>;
     replacesClientId?: string;
     request: Request;
@@ -210,14 +210,28 @@
     lastModified?: number;
 }
 
+interface FontFaceDescriptors {
+    display?: string;
+    featureSettings?: string;
+    stretch?: string;
+    style?: string;
+    unicodeRange?: string;
+    variant?: string;
+    weight?: string;
+}
+
+interface FontFaceSetLoadEventInit extends EventInit {
+    fontfaces?: FontFace[];
+}
+
 interface GetNotificationOptions {
     tag?: string;
 }
 
 interface HkdfParams extends Algorithm {
     hash: HashAlgorithmIdentifier;
-    info: Int8Array | Int16Array | Int32Array | Uint8Array | Uint16Array | Uint32Array | Uint8ClampedArray | Float32Array | Float64Array | DataView | ArrayBuffer;
-    salt: Int8Array | Int16Array | Int32Array | Uint8Array | Uint16Array | Uint32Array | Uint8ClampedArray | Float32Array | Float64Array | DataView | ArrayBuffer;
+    info: BufferSource;
+    salt: BufferSource;
 }
 
 interface HmacImportParams extends Algorithm {
@@ -230,6 +244,11 @@
     length?: number;
 }
 
+interface IDBDatabaseInfo {
+    name?: string;
+    version?: number;
+}
+
 interface IDBIndexParameters {
     multiEntry?: boolean;
     unique?: boolean;
@@ -258,9 +277,8 @@
     alpha?: boolean;
 }
 
-interface ImageEncodeOptions {
-    quality?: number;
-    type?: string;
+interface ImageDataSettings {
+    colorSpace?: PredefinedColorSpace;
 }
 
 interface ImportMeta {
@@ -292,6 +310,33 @@
     name: string;
 }
 
+interface MediaCapabilitiesDecodingInfo extends MediaCapabilitiesInfo {
+    configuration?: MediaDecodingConfiguration;
+}
+
+interface MediaCapabilitiesEncodingInfo extends MediaCapabilitiesInfo {
+    configuration?: MediaEncodingConfiguration;
+}
+
+interface MediaCapabilitiesInfo {
+    powerEfficient: boolean;
+    smooth: boolean;
+    supported: boolean;
+}
+
+interface MediaConfiguration {
+    audio?: AudioConfiguration;
+    video?: VideoConfiguration;
+}
+
+interface MediaDecodingConfiguration extends MediaConfiguration {
+    type: MediaDecodingType;
+}
+
+interface MediaEncodingConfiguration extends MediaConfiguration {
+    type: MediaEncodingType;
+}
+
 interface MessageEventInit<T = any> extends EventInit {
     data?: T;
     lastEventId?: string;
@@ -300,20 +345,10 @@
     source?: MessageEventSource | null;
 }
 
-interface MidiPermissionDescriptor extends PermissionDescriptor {
-    name: "midi";
-    sysex?: boolean;
-}
-
 interface MultiCacheQueryOptions extends CacheQueryOptions {
     cacheName?: string;
 }
 
-interface NavigationPreloadState {
-    enabled?: boolean;
-    headerValue?: string;
-}
-
 interface NotificationAction {
     action: string;
     icon?: string;
@@ -338,14 +373,26 @@
     requireInteraction?: boolean;
     silent?: boolean;
     tag?: string;
-    timestamp?: number;
+    timestamp?: DOMTimeStamp;
     vibrate?: VibratePattern;
 }
 
 interface Pbkdf2Params extends Algorithm {
     hash: HashAlgorithmIdentifier;
     iterations: number;
-    salt: Int8Array | Int16Array | Int32Array | Uint8Array | Uint16Array | Uint32Array | Uint8ClampedArray | Float32Array | Float64Array | DataView | ArrayBuffer;
+    salt: BufferSource;
+}
+
+interface PerformanceMarkOptions {
+    detail?: any;
+    startTime?: DOMHighResTimeStamp;
+}
+
+interface PerformanceMeasureOptions {
+    detail?: any;
+    duration?: DOMHighResTimeStamp;
+    end?: string | DOMHighResTimeStamp;
+    start?: string | DOMHighResTimeStamp;
 }
 
 interface PerformanceObserverInit {
@@ -377,14 +424,9 @@
     data?: PushMessageDataInit;
 }
 
-interface PushPermissionDescriptor extends PermissionDescriptor {
-    name: "push";
-    userVisibleOnly?: boolean;
-}
-
 interface PushSubscriptionJSON {
     endpoint?: string;
-    expirationTime?: number | null;
+    expirationTime?: DOMTimeStamp | null;
     keys?: Record<string, string>;
 }
 
@@ -508,7 +550,7 @@
 }
 
 interface RsaOaepParams extends Algorithm {
-    label?: Int8Array | Int16Array | Int32Array | Uint8Array | Uint16Array | Uint32Array | Uint8ClampedArray | Float32Array | Float64Array | DataView | ArrayBuffer;
+    label?: BufferSource;
 }
 
 interface RsaOtherPrimesInfo {
@@ -521,6 +563,21 @@
     saltLength: number;
 }
 
+interface SecurityPolicyViolationEventInit extends EventInit {
+    blockedURI?: string;
+    columnNumber?: number;
+    disposition: SecurityPolicyViolationEventDisposition;
+    documentURI: string;
+    effectiveDirective: string;
+    lineNumber?: number;
+    originalPolicy: string;
+    referrer?: string;
+    sample?: string;
+    sourceFile?: string;
+    statusCode: number;
+    violatedDirective: string;
+}
+
 interface StorageEstimate {
     quota?: number;
     usage?: number;
@@ -550,11 +607,6 @@
     signal?: AbortSignal;
 }
 
-interface SyncEventInit extends ExtendableEventInit {
-    lastChance?: boolean;
-    tag: string;
-}
-
 interface TextDecodeOptions {
     stream?: boolean;
 }
@@ -592,6 +644,18 @@
     type?: undefined;
 }
 
+interface VideoConfiguration {
+    bitrate: number;
+    colorGamut?: ColorGamut;
+    contentType: string;
+    framerate: number;
+    hdrMetadataType?: HdrMetadataType;
+    height: number;
+    scalabilityMode?: string;
+    transferFunction?: TransferFunction;
+    width: number;
+}
+
 interface WebGLContextAttributes {
     alpha?: boolean;
     antialias?: boolean;
@@ -614,10 +678,6 @@
     type?: WorkerType;
 }
 
-interface EventListener {
-    (evt: Event): void;
-}
-
 /** The ANGLE_instanced_arrays extension is part of the WebGL API and allows to draw the same object, or groups of similar objects multiple times, if they share the same vertex data, primitive count and type. */
 interface ANGLE_instanced_arrays {
     drawArraysInstancedANGLE(mode: GLenum, first: GLint, count: GLsizei, primcount: GLsizei): void;
@@ -677,14 +737,6 @@
     removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;
 }
 
-interface AesCfbParams extends Algorithm {
-    iv: Int8Array | Int16Array | Int32Array | Uint8Array | Uint16Array | Uint32Array | Uint8ClampedArray | Float32Array | Float64Array | DataView | ArrayBuffer;
-}
-
-interface AesCmacParams extends Algorithm {
-    length: number;
-}
-
 interface AnimationFrameProvider {
     cancelAnimationFrame(handle: number): void;
     requestAnimationFrame(callback: FrameRequestCallback): number;
@@ -787,43 +839,6 @@
     new(): CacheStorage;
 };
 
-interface CanvasCompositing {
-    globalAlpha: number;
-    globalCompositeOperation: string;
-}
-
-interface CanvasDrawImage {
-    drawImage(image: CanvasImageSource, dx: number, dy: number): void;
-    drawImage(image: CanvasImageSource, dx: number, dy: number, dw: number, dh: number): void;
-    drawImage(image: CanvasImageSource, sx: number, sy: number, sw: number, sh: number, dx: number, dy: number, dw: number, dh: number): void;
-}
-
-interface CanvasDrawPath {
-    beginPath(): void;
-    clip(fillRule?: CanvasFillRule): void;
-    clip(path: Path2D, fillRule?: CanvasFillRule): void;
-    fill(fillRule?: CanvasFillRule): void;
-    fill(path: Path2D, fillRule?: CanvasFillRule): void;
-    isPointInPath(x: number, y: number, fillRule?: CanvasFillRule): boolean;
-    isPointInPath(path: Path2D, x: number, y: number, fillRule?: CanvasFillRule): boolean;
-    isPointInStroke(x: number, y: number): boolean;
-    isPointInStroke(path: Path2D, x: number, y: number): boolean;
-    stroke(): void;
-    stroke(path: Path2D): void;
-}
-
-interface CanvasFillStrokeStyles {
-    fillStyle: string | CanvasGradient | CanvasPattern;
-    strokeStyle: string | CanvasGradient | CanvasPattern;
-    createLinearGradient(x0: number, y0: number, x1: number, y1: number): CanvasGradient;
-    createPattern(image: CanvasImageSource, repetition: string | null): CanvasPattern | null;
-    createRadialGradient(x0: number, y0: number, r0: number, x1: number, y1: number, r1: number): CanvasGradient;
-}
-
-interface CanvasFilters {
-    filter: string;
-}
-
 /** An opaque object describing a gradient. It is returned by the methods CanvasRenderingContext2D.createLinearGradient() or CanvasRenderingContext2D.createRadialGradient(). */
 interface CanvasGradient {
     /**
@@ -839,41 +854,18 @@
     new(): CanvasGradient;
 };
 
-interface CanvasImageData {
-    createImageData(sw: number, sh: number): ImageData;
-    createImageData(imagedata: ImageData): ImageData;
-    getImageData(sx: number, sy: number, sw: number, sh: number): ImageData;
-    putImageData(imagedata: ImageData, dx: number, dy: number): void;
-    putImageData(imagedata: ImageData, dx: number, dy: number, dirtyX: number, dirtyY: number, dirtyWidth: number, dirtyHeight: number): void;
-}
-
-interface CanvasImageSmoothing {
-    imageSmoothingEnabled: boolean;
-    imageSmoothingQuality: ImageSmoothingQuality;
-}
-
 interface CanvasPath {
-    arc(x: number, y: number, radius: number, startAngle: number, endAngle: number, anticlockwise?: boolean): void;
+    arc(x: number, y: number, radius: number, startAngle: number, endAngle: number, counterclockwise?: boolean): void;
     arcTo(x1: number, y1: number, x2: number, y2: number, radius: number): void;
     bezierCurveTo(cp1x: number, cp1y: number, cp2x: number, cp2y: number, x: number, y: number): void;
     closePath(): void;
-    ellipse(x: number, y: number, radiusX: number, radiusY: number, rotation: number, startAngle: number, endAngle: number, anticlockwise?: boolean): void;
+    ellipse(x: number, y: number, radiusX: number, radiusY: number, rotation: number, startAngle: number, endAngle: number, counterclockwise?: boolean): void;
     lineTo(x: number, y: number): void;
     moveTo(x: number, y: number): void;
     quadraticCurveTo(cpx: number, cpy: number, x: number, y: number): void;
     rect(x: number, y: number, w: number, h: number): void;
 }
 
-interface CanvasPathDrawingStyles {
-    lineCap: CanvasLineCap;
-    lineDashOffset: number;
-    lineJoin: CanvasLineJoin;
-    lineWidth: number;
-    miterLimit: number;
-    getLineDash(): number[];
-    setLineDash(segments: number[]): void;
-}
-
 /** An opaque object describing a pattern, based on an image, a canvas, or a video, created by the CanvasRenderingContext2D.createPattern() method. */
 interface CanvasPattern {
     /**
@@ -887,55 +879,14 @@
     new(): CanvasPattern;
 };
 
-interface CanvasRect {
-    clearRect(x: number, y: number, w: number, h: number): void;
-    fillRect(x: number, y: number, w: number, h: number): void;
-    strokeRect(x: number, y: number, w: number, h: number): void;
-}
-
-interface CanvasShadowStyles {
-    shadowBlur: number;
-    shadowColor: string;
-    shadowOffsetX: number;
-    shadowOffsetY: number;
-}
-
-interface CanvasState {
-    restore(): void;
-    save(): void;
-}
-
-interface CanvasText {
-    fillText(text: string, x: number, y: number, maxWidth?: number): void;
-    measureText(text: string): TextMetrics;
-    strokeText(text: string, x: number, y: number, maxWidth?: number): void;
-}
-
-interface CanvasTextDrawingStyles {
-    direction: CanvasDirection;
-    font: string;
-    textAlign: CanvasTextAlign;
-    textBaseline: CanvasTextBaseline;
-}
-
-interface CanvasTransform {
-    getTransform(): DOMMatrix;
-    resetTransform(): void;
-    rotate(angle: number): void;
-    scale(x: number, y: number): void;
-    setTransform(a: number, b: number, c: number, d: number, e: number, f: number): void;
-    setTransform(transform?: DOMMatrix2DInit): void;
-    transform(a: number, b: number, c: number, d: number, e: number, f: number): void;
-    translate(x: number, y: number): void;
-}
-
 /** The Client interface represents an executable context such as a Worker, or a SharedWorker. Window clients are represented by the more-specific WindowClient. You can get Client/WindowClient objects from methods such as Clients.matchAll() and Clients.get(). */
 interface Client {
     readonly frameType: FrameType;
     readonly id: string;
     readonly type: ClientTypes;
     readonly url: string;
-    postMessage(message: any, transfer?: Transferable[]): void;
+    postMessage(message: any, transfer: Transferable[]): void;
+    postMessage(message: any, options?: PostMessageOptions): void;
 }
 
 declare var Client: {
@@ -948,7 +899,7 @@
     claim(): Promise<void>;
     get(id: string): Promise<Client | undefined>;
     matchAll<T extends ClientQueryOptions>(options?: T): Promise<ReadonlyArray<T["type"] extends "window" ? WindowClient : Client>>;
-    openWindow(url: string): Promise<WindowClient | null>;
+    openWindow(url: string | URL): Promise<WindowClient | null>;
 }
 
 declare var Clients: {
@@ -977,15 +928,6 @@
     new(type: string, eventInitDict?: CloseEventInit): CloseEvent;
 };
 
-interface ConcatParams extends Algorithm {
-    algorithmId: Uint8Array;
-    hash?: string | Algorithm;
-    partyUInfo: Uint8Array;
-    partyVInfo: Uint8Array;
-    privateInfo?: Uint8Array;
-    publicInfo?: Uint8Array;
-}
-
 /** This Streams API interface provides a built-in byte length queuing strategy that can be used when constructing streams. */
 interface CountQueuingStrategy extends QueuingStrategy {
     readonly highWaterMark: number;
@@ -1000,7 +942,7 @@
 /** Basic cryptography features available in the current context. It allows access to a cryptographically strong random number generator and to cryptographic primitives. */
 interface Crypto {
     readonly subtle: SubtleCrypto;
-    getRandomValues<T extends Int8Array | Int16Array | Int32Array | Uint8Array | Uint16Array | Uint32Array | Uint8ClampedArray | Float32Array | Float64Array | DataView | null>(array: T): T;
+    getRandomValues<T extends ArrayBufferView | null>(array: T): T;
 }
 
 declare var Crypto: {
@@ -1026,12 +968,13 @@
      * Returns any custom data event was created with. Typically used for synthetic events.
      */
     readonly detail: T;
-    initCustomEvent(typeArg: string, canBubbleArg: boolean, cancelableArg: boolean, detailArg: T): void;
+    /** @deprecated */
+    initCustomEvent(type: string, bubbles?: boolean, cancelable?: boolean, detail?: T): void;
 }
 
 declare var CustomEvent: {
     prototype: CustomEvent;
-    new<T>(typeArg: string, eventInitDict?: CustomEventInit<T>): CustomEvent<T>;
+    new<T>(type: string, eventInitDict?: CustomEventInit<T>): CustomEvent<T>;
 };
 
 /** An abnormal event (called an exception) which occurs as a result of calling a method or accessing a property of a web API. */
@@ -1323,30 +1266,24 @@
     new(): DedicatedWorkerGlobalScope;
 };
 
-interface DhImportKeyParams extends Algorithm {
-    generator: Uint8Array;
-    prime: Uint8Array;
-}
-
-interface DhKeyAlgorithm extends KeyAlgorithm {
-    generator: Uint8Array;
-    prime: Uint8Array;
-}
-
-interface DhKeyDeriveParams extends Algorithm {
-    public: CryptoKey;
-}
-
-interface DhKeyGenParams extends Algorithm {
-    generator: Uint8Array;
-    prime: Uint8Array;
-}
-
 interface EXT_blend_minmax {
     readonly MAX_EXT: GLenum;
     readonly MIN_EXT: GLenum;
 }
 
+interface EXT_color_buffer_float {
+}
+
+interface EXT_color_buffer_half_float {
+    readonly FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE_EXT: GLenum;
+    readonly RGB16F_EXT: GLenum;
+    readonly RGBA16F_EXT: GLenum;
+    readonly UNSIGNED_NORMALIZED_EXT: GLenum;
+}
+
+interface EXT_float_blend {
+}
+
 /** The EXT_frag_depth extension is part of the WebGL API and enables to set a depth value of a fragment from within the fragment shader. */
 interface EXT_frag_depth {
 }
@@ -1361,6 +1298,13 @@
 interface EXT_shader_texture_lod {
 }
 
+interface EXT_texture_compression_rgtc {
+    readonly COMPRESSED_RED_GREEN_RGTC2_EXT: GLenum;
+    readonly COMPRESSED_RED_RGTC1_EXT: GLenum;
+    readonly COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT: GLenum;
+    readonly COMPRESSED_SIGNED_RED_RGTC1_EXT: GLenum;
+}
+
 /** The EXT_texture_filter_anisotropic extension is part of the WebGL API and exposes two constants for anisotropic filtering (AF). */
 interface EXT_texture_filter_anisotropic {
     readonly MAX_TEXTURE_MAX_ANISOTROPY_EXT: GLenum;
@@ -1412,6 +1356,7 @@
      * Returns true if event was dispatched by the user agent, and false otherwise.
      */
     readonly isTrusted: boolean;
+    /** @deprecated */
     returnValue: boolean;
     /** @deprecated */
     readonly srcElement: EventTarget | null;
@@ -1422,7 +1367,7 @@
     /**
      * Returns the event's timestamp as the number of milliseconds measured relative to the time origin.
      */
-    readonly timeStamp: number;
+    readonly timeStamp: DOMHighResTimeStamp;
     /**
      * Returns the type of event, e.g. "click", "hashchange", or "submit".
      */
@@ -1431,6 +1376,7 @@
      * Returns the invocation target objects of event's path (objects on which listeners will be invoked), except for any nodes in shadow trees of which the shadow root's mode is "closed" that are not reachable from event's currentTarget.
      */
     composedPath(): EventTarget[];
+    /** @deprecated */
     initEvent(type: string, bubbles?: boolean, cancelable?: boolean): void;
     /**
      * If invoked when the cancelable attribute value is true, and while executing a listener for the event with passive set to false, signals to the operation that caused event to be dispatched that it needs to be canceled.
@@ -1459,8 +1405,12 @@
     readonly NONE: number;
 };
 
+interface EventListener {
+    (evt: Event): void;
+}
+
 interface EventListenerObject {
-    handleEvent(evt: Event): void;
+    handleEvent(object: Event): void;
 }
 
 interface EventSourceEventMap {
@@ -1500,7 +1450,7 @@
 
 declare var EventSource: {
     prototype: EventSource;
-    new(url: string, eventSourceInitDict?: EventSourceInit): EventSource;
+    new(url: string | URL, eventSourceInitDict?: EventSourceInit): EventSource;
     readonly CLOSED: number;
     readonly CONNECTING: number;
     readonly OPEN: number;
@@ -1519,9 +1469,11 @@
      *
      * When set to true, options's once indicates that the callback will only be invoked once after which the event listener will be removed.
      *
+     * If an AbortSignal is passed for options's signal, then the event listener will be removed when signal is aborted.
+     *
      * The event listener is appended to target's event listener list and is not appended if it has the same type, callback, and capture.
      */
-    addEventListener(type: string, listener: EventListenerOrEventListenerObject | null, options?: boolean | AddEventListenerOptions): void;
+    addEventListener(type: string, callback: EventListenerOrEventListenerObject | null, options?: AddEventListenerOptions | boolean): void;
     /**
      * Dispatches a synthetic event event to target and returns true if either event's cancelable attribute value is false or its preventDefault() method was not invoked, and false otherwise.
      */
@@ -1564,10 +1516,10 @@
 /** This is the event type for fetch events dispatched on the service worker global scope. It contains information about the fetch, including the request and how the receiver will treat the response. It provides the event.respondWith() method, which allows us to provide a response to this fetch. */
 interface FetchEvent extends ExtendableEvent {
     readonly clientId: string;
-    readonly preloadResponse: Promise<any>;
+    readonly handled: Promise<undefined>;
     readonly request: Request;
     readonly resultingClientId: string;
-    respondWith(r: Response | Promise<Response>): void;
+    respondWith(r: Response | PromiseLike<Response>): void;
 }
 
 declare var FetchEvent: {
@@ -1579,6 +1531,7 @@
 interface File extends Blob {
     readonly lastModified: number;
     readonly name: string;
+    readonly webkitRelativePath: string;
 }
 
 declare var File: {
@@ -1643,6 +1596,7 @@
 /** Allows to read File or Blob objects in a synchronous way. */
 interface FileReaderSync {
     readAsArrayBuffer(blob: Blob): ArrayBuffer;
+    /** @deprecated */
     readAsBinaryString(blob: Blob): string;
     readAsDataURL(blob: Blob): string;
     readAsText(blob: Blob, encoding?: string): string;
@@ -1653,6 +1607,68 @@
     new(): FileReaderSync;
 };
 
+interface FontFace {
+    ascentOverride: string;
+    descentOverride: string;
+    display: string;
+    family: string;
+    featureSettings: string;
+    lineGapOverride: string;
+    readonly loaded: Promise<FontFace>;
+    readonly status: FontFaceLoadStatus;
+    stretch: string;
+    style: string;
+    unicodeRange: string;
+    variant: string;
+    variationSettings: string;
+    weight: string;
+    load(): Promise<FontFace>;
+}
+
+declare var FontFace: {
+    prototype: FontFace;
+    new(family: string, source: string | BinaryData, descriptors?: FontFaceDescriptors): FontFace;
+};
+
+interface FontFaceSetEventMap {
+    "loading": Event;
+    "loadingdone": Event;
+    "loadingerror": Event;
+}
+
+interface FontFaceSet extends EventTarget {
+    onloading: ((this: FontFaceSet, ev: Event) => any) | null;
+    onloadingdone: ((this: FontFaceSet, ev: Event) => any) | null;
+    onloadingerror: ((this: FontFaceSet, ev: Event) => any) | null;
+    readonly ready: Promise<FontFaceSet>;
+    readonly status: FontFaceSetLoadStatus;
+    check(font: string, text?: string): boolean;
+    load(font: string, text?: string): Promise<FontFace[]>;
+    forEach(callbackfn: (value: FontFace, key: FontFace, parent: FontFaceSet) => void, thisArg?: any): void;
+    addEventListener<K extends keyof FontFaceSetEventMap>(type: K, listener: (this: FontFaceSet, ev: FontFaceSetEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
+    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
+    removeEventListener<K extends keyof FontFaceSetEventMap>(type: K, listener: (this: FontFaceSet, ev: FontFaceSetEventMap[K]) => any, options?: boolean | EventListenerOptions): void;
+    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;
+}
+
+declare var FontFaceSet: {
+    prototype: FontFaceSet;
+    new(initialFaces: FontFace[]): FontFaceSet;
+};
+
+interface FontFaceSetLoadEvent extends Event {
+    readonly fontfaces: ReadonlyArray<FontFace>;
+}
+
+declare var FontFaceSetLoadEvent: {
+    prototype: FontFaceSetLoadEvent;
+    new(type: string, eventInitDict?: FontFaceSetLoadEventInit): FontFaceSetLoadEvent;
+};
+
+interface FontFaceSource {
+    readonly fonts: FontFaceSet;
+}
+
 /** Provides a way to easily construct a set of key/value pairs representing form fields and their values, which can then be easily sent using the XMLHttpRequest.send() method. It uses the same format a form would use if the encoding type were set to "multipart/form-data". */
 interface FormData {
     append(name: string, value: string | Blob, fileName?: string): void;
@@ -1689,9 +1705,6 @@
     new(init?: HeadersInit): Headers;
 };
 
-interface IDBArrayKey extends Array<IDBValidKey> {
-}
-
 /** This IndexedDB API interface represents a cursor for traversing or iterating over multiple records in a database. */
 interface IDBCursor {
     /**
@@ -1706,6 +1719,7 @@
      * Returns the effective key of the cursor. Throws a "InvalidStateError" DOMException if the cursor is advancing or is finished.
      */
     readonly primaryKey: IDBValidKey;
+    readonly request: IDBRequest;
     /**
      * Returns the IDBObjectStore or IDBIndex the cursor was opened from.
      */
@@ -1820,6 +1834,7 @@
      * Throws a "DataError" DOMException if either input is not a valid key.
      */
     cmp(first: any, second: any): number;
+    databases(): Promise<IDBDatabaseInfo[]>;
     /**
      * Attempts to delete the named database. If the database already exists and there are open connections that don't close in response to a versionchange event, the request will be blocked until all they close. If the request is successful request's result will be null.
      */
@@ -1853,13 +1868,13 @@
      *
      * If successful, request's result will be the count.
      */
-    count(key?: IDBValidKey | IDBKeyRange): IDBRequest<number>;
+    count(query?: IDBValidKey | IDBKeyRange): IDBRequest<number>;
     /**
      * Retrieves the value of the first record matching the given key or key range in query.
      *
      * If successful, request's result will be the value, or undefined if there was no matching record.
      */
-    get(key: IDBValidKey | IDBKeyRange): IDBRequest<any | undefined>;
+    get(query: IDBValidKey | IDBKeyRange): IDBRequest<any>;
     /**
      * Retrieves the values of the records matching the given key or key range in query (up to count if given).
      *
@@ -1877,7 +1892,7 @@
      *
      * If successful, request's result will be the key, or undefined if there was no matching record.
      */
-    getKey(key: IDBValidKey | IDBKeyRange): IDBRequest<IDBValidKey | undefined>;
+    getKey(query: IDBValidKey | IDBKeyRange): IDBRequest<IDBValidKey | undefined>;
     /**
      * Opens a cursor over the records matching query, ordered by direction. If query is null, all records in index are matched.
      *
@@ -1985,7 +2000,7 @@
      *
      * If successful, request's result will be the count.
      */
-    count(key?: IDBValidKey | IDBKeyRange): IDBRequest<number>;
+    count(query?: IDBValidKey | IDBKeyRange): IDBRequest<number>;
     /**
      * Creates a new index in store with the given name, keyPath and options and returns a new IDBIndex. If the keyPath and options define constraints that cannot be satisfied with the data already in store the upgrade transaction will abort with a "ConstraintError" DOMException.
      *
@@ -1997,7 +2012,7 @@
      *
      * If successful, request's result will be undefined.
      */
-    delete(key: IDBValidKey | IDBKeyRange): IDBRequest<undefined>;
+    delete(query: IDBValidKey | IDBKeyRange): IDBRequest<undefined>;
     /**
      * Deletes the index in store with the given name.
      *
@@ -2009,7 +2024,7 @@
      *
      * If successful, request's result will be the value, or undefined if there was no matching record.
      */
-    get(query: IDBValidKey | IDBKeyRange): IDBRequest<any | undefined>;
+    get(query: IDBValidKey | IDBKeyRange): IDBRequest<any>;
     /**
      * Retrieves the values of the records matching the given key or key range in query (up to count if given).
      *
@@ -2132,7 +2147,7 @@
     /**
      * If the transaction was aborted, returns the error (a DOMException) providing the reason.
      */
-    readonly error: DOMException;
+    readonly error: DOMException | null;
     /**
      * Returns the mode the transaction was created with ("readonly" or "readwrite"), or "versionchange" for an upgrade transaction.
      */
@@ -2148,6 +2163,7 @@
      * Aborts the transaction. All pending requests will fail with a "AbortError" DOMException and all changes made to the database will be reverted.
      */
     abort(): void;
+    commit(): void;
     /**
      * Returns an IDBObjectStore in the transaction's scope.
      */
@@ -2196,10 +2212,6 @@
 
 interface ImageBitmapRenderingContext {
     /**
-     * Returns the canvas element that the context is bound to.
-     */
-    readonly canvas: OffscreenCanvas;
-    /**
      * Transfers the underlying bitmap data from imageBitmap to context, and the bitmap becomes the contents of the canvas element to which context is bound.
      */
     transferFromImageBitmap(bitmap: ImageBitmap | null): void;
@@ -2228,8 +2240,22 @@
 
 declare var ImageData: {
     prototype: ImageData;
-    new(sw: number, sh: number): ImageData;
-    new(data: Uint8ClampedArray, sw: number, sh?: number): ImageData;
+    new(sw: number, sh: number, settings?: ImageDataSettings): ImageData;
+    new(data: Uint8ClampedArray, sw: number, sh?: number, settings?: ImageDataSettings): ImageData;
+};
+
+interface KHR_parallel_shader_compile {
+    readonly COMPLETION_STATUS_KHR: GLenum;
+}
+
+interface MediaCapabilities {
+    decodingInfo(configuration: MediaDecodingConfiguration): Promise<MediaCapabilitiesDecodingInfo>;
+    encodingInfo(configuration: MediaEncodingConfiguration): Promise<MediaCapabilitiesEncodingInfo>;
+}
+
+declare var MediaCapabilities: {
+    prototype: MediaCapabilities;
+    new(): MediaCapabilities;
 };
 
 /** This Channel Messaging API interface allows us to create a new message channel and send data through it via its two MessagePort properties. */
@@ -2271,6 +2297,8 @@
      * Returns the WindowProxy of the source window, for cross-document messaging, and the MessagePort being attached, in the connect event fired at SharedWorkerGlobalScope objects.
      */
     readonly source: MessageEventSource | null;
+    /** @deprecated */
+    initMessageEvent(type: string, bubbles?: boolean, cancelable?: boolean, data?: any, origin?: string, lastEventId?: string, source?: MessageEventSource | null, ports?: MessagePort[]): void;
 }
 
 declare var MessageEvent: {
@@ -2313,27 +2341,20 @@
     new(): MessagePort;
 };
 
-interface NavigationPreloadManager {
-    disable(): Promise<void>;
-    enable(): Promise<void>;
-    getState(): Promise<NavigationPreloadState>;
-    setHeaderValue(value: string): Promise<void>;
-}
-
-declare var NavigationPreloadManager: {
-    prototype: NavigationPreloadManager;
-    new(): NavigationPreloadManager;
-};
-
 interface NavigatorConcurrentHardware {
     readonly hardwareConcurrency: number;
 }
 
 interface NavigatorID {
+    /** @deprecated */
     readonly appCodeName: string;
+    /** @deprecated */
     readonly appName: string;
+    /** @deprecated */
     readonly appVersion: string;
+    /** @deprecated */
     readonly platform: string;
+    /** @deprecated */
     readonly product: string;
     readonly userAgent: string;
 }
@@ -2343,6 +2364,10 @@
     readonly languages: ReadonlyArray<string>;
 }
 
+interface NavigatorNetworkInformation {
+    readonly connection: NetworkInformation;
+}
+
 interface NavigatorOnLine {
     readonly onLine: boolean;
 }
@@ -2351,6 +2376,15 @@
     readonly storage: StorageManager;
 }
 
+interface NetworkInformation extends EventTarget {
+    readonly type: ConnectionType;
+}
+
+declare var NetworkInformation: {
+    prototype: NetworkInformation;
+    new(): NetworkInformation;
+};
+
 interface NotificationEventMap {
     "click": Event;
     "close": Event;
@@ -2360,25 +2394,17 @@
 
 /** This Notifications API interface is used to configure and display desktop notifications to the user. */
 interface Notification extends EventTarget {
-    readonly actions: ReadonlyArray<NotificationAction>;
-    readonly badge: string;
     readonly body: string;
     readonly data: any;
     readonly dir: NotificationDirection;
     readonly icon: string;
-    readonly image: string;
     readonly lang: string;
     onclick: ((this: Notification, ev: Event) => any) | null;
     onclose: ((this: Notification, ev: Event) => any) | null;
     onerror: ((this: Notification, ev: Event) => any) | null;
     onshow: ((this: Notification, ev: Event) => any) | null;
-    readonly renotify: boolean;
-    readonly requireInteraction: boolean;
-    readonly silent: boolean;
     readonly tag: string;
-    readonly timestamp: number;
     readonly title: string;
-    readonly vibrate: ReadonlyArray<number>;
     close(): void;
     addEventListener<K extends keyof NotificationEventMap>(type: K, listener: (this: Notification, ev: NotificationEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
     addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
@@ -2389,7 +2415,6 @@
 declare var Notification: {
     prototype: Notification;
     new(title: string, options?: NotificationOptions): Notification;
-    readonly maxActions: number;
     readonly permission: NotificationPermission;
 };
 
@@ -2408,6 +2433,9 @@
 interface OES_element_index_uint {
 }
 
+interface OES_fbo_render_mipmap {
+}
+
 /** The OES_standard_derivatives extension is part of the WebGL API and adds the GLSL derivative functions dFdx, dFdy, and fwidth. */
 interface OES_standard_derivatives {
     readonly FRAGMENT_SHADER_DERIVATIVE_HINT_OES: GLenum;
@@ -2438,58 +2466,18 @@
     readonly VERTEX_ARRAY_BINDING_OES: GLenum;
 }
 
+interface OVR_multiview2 {
+    framebufferTextureMultiviewOVR(target: GLenum, attachment: GLenum, texture: WebGLTexture | null, level: GLint, baseViewIndex: GLint, numViews: GLsizei): void;
+    readonly FRAMEBUFFER_ATTACHMENT_TEXTURE_BASE_VIEW_INDEX_OVR: GLenum;
+    readonly FRAMEBUFFER_ATTACHMENT_TEXTURE_NUM_VIEWS_OVR: GLenum;
+    readonly FRAMEBUFFER_INCOMPLETE_VIEW_TARGETS_OVR: GLenum;
+    readonly MAX_VIEWS_OVR: GLenum;
+}
+
+/** @deprecated this is not available in most browsers */
 interface OffscreenCanvas extends EventTarget {
-    /**
-     * These attributes return the dimensions of the OffscreenCanvas object's bitmap.
-     *
-     * They can be set, to replace the bitmap with a new, transparent black bitmap of the specified dimensions (effectively resizing it).
-     */
-    height: number;
-    /**
-     * These attributes return the dimensions of the OffscreenCanvas object's bitmap.
-     *
-     * They can be set, to replace the bitmap with a new, transparent black bitmap of the specified dimensions (effectively resizing it).
-     */
-    width: number;
-    /**
-     * Returns a promise that will fulfill with a new Blob object representing a file containing the image in the OffscreenCanvas object.
-     *
-     * The argument, if provided, is a dictionary that controls the encoding options of the image file to be created. The type field specifies the file format and has a default value of "image/png"; that type is also used if the requested type isn't supported. If the image format supports variable quality (such as "image/jpeg"), then the quality field is a number in the range 0.0 to 1.0 inclusive indicating the desired quality level for the resulting image.
-     */
-    convertToBlob(options?: ImageEncodeOptions): Promise<Blob>;
-    /**
-     * Returns an object that exposes an API for drawing on the OffscreenCanvas object. contextId specifies the desired API: "2d", "bitmaprenderer", "webgl", or "webgl2". options is handled by that API.
-     *
-     * This specification defines the "2d" context below, which is similar but distinct from the "2d" context that is created from a canvas element. The WebGL specifications define the "webgl" and "webgl2" contexts. [WEBGL]
-     *
-     * Returns null if the canvas has already been initialized with another context type (e.g., trying to get a "2d" context after getting a "webgl" context).
-     */
-    getContext(contextId: "2d", options?: CanvasRenderingContext2DSettings): OffscreenCanvasRenderingContext2D | null;
-    getContext(contextId: "bitmaprenderer", options?: ImageBitmapRenderingContextSettings): ImageBitmapRenderingContext | null;
-    getContext(contextId: "webgl", options?: WebGLContextAttributes): WebGLRenderingContext | null;
-    getContext(contextId: "webgl2", options?: WebGLContextAttributes): WebGL2RenderingContext | null;
-    getContext(contextId: OffscreenRenderingContextId, options?: any): OffscreenRenderingContext | null;
-    /**
-     * Returns a newly created ImageBitmap object with the image in the OffscreenCanvas object. The image in the OffscreenCanvas object is replaced with a new blank image.
-     */
-    transferToImageBitmap(): ImageBitmap;
 }
 
-declare var OffscreenCanvas: {
-    prototype: OffscreenCanvas;
-    new(width: number, height: number): OffscreenCanvas;
-};
-
-interface OffscreenCanvasRenderingContext2D extends CanvasCompositing, CanvasDrawImage, CanvasDrawPath, CanvasFillStrokeStyles, CanvasFilters, CanvasImageData, CanvasImageSmoothing, CanvasPath, CanvasPathDrawingStyles, CanvasRect, CanvasShadowStyles, CanvasState, CanvasText, CanvasTextDrawingStyles, CanvasTransform {
-    readonly canvas: OffscreenCanvas;
-    commit(): void;
-}
-
-declare var OffscreenCanvasRenderingContext2D: {
-    prototype: OffscreenCanvasRenderingContext2D;
-    new(): OffscreenCanvasRenderingContext2D;
-};
-
 /** This Canvas 2D API interface is used to declare a path that can then be used on a CanvasRenderingContext2D object. The path methods of the CanvasRenderingContext2D interface are also present on this interface, which gives you the convenience of being able to retain and replay your path whenever desired. */
 interface Path2D extends CanvasPath {
     /**
@@ -2510,16 +2498,16 @@
 /** Provides access to performance-related information for the current page. It's part of the High Resolution Time API, but is enhanced by the Performance Timeline API, the Navigation Timing API, the User Timing API, and the Resource Timing API. */
 interface Performance extends EventTarget {
     onresourcetimingbufferfull: ((this: Performance, ev: Event) => any) | null;
-    readonly timeOrigin: number;
+    readonly timeOrigin: DOMHighResTimeStamp;
     clearMarks(markName?: string): void;
     clearMeasures(measureName?: string): void;
     clearResourceTimings(): void;
     getEntries(): PerformanceEntryList;
     getEntriesByName(name: string, type?: string): PerformanceEntryList;
     getEntriesByType(type: string): PerformanceEntryList;
-    mark(markName: string): void;
-    measure(measureName: string, startMark?: string, endMark?: string): void;
-    now(): number;
+    mark(markName: string, markOptions?: PerformanceMarkOptions): PerformanceMark;
+    measure(measureName: string, startOrMeasureOptions?: string | PerformanceMeasureOptions, endMark?: string): PerformanceMeasure;
+    now(): DOMHighResTimeStamp;
     setResourceTimingBufferSize(maxSize: number): void;
     toJSON(): any;
     addEventListener<K extends keyof PerformanceEventMap>(type: K, listener: (this: Performance, ev: PerformanceEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
@@ -2535,10 +2523,10 @@
 
 /** Encapsulates a single performance metric that is part of the performance timeline. A performance entry can be directly created by making a performance mark or measure (for example by calling the mark() method) at an explicit point in an application. Performance entries are also created in indirect ways such as loading a resource (such as an image). */
 interface PerformanceEntry {
-    readonly duration: number;
+    readonly duration: DOMHighResTimeStamp;
     readonly entryType: string;
     readonly name: string;
-    readonly startTime: number;
+    readonly startTime: DOMHighResTimeStamp;
     toJSON(): any;
 }
 
@@ -2549,15 +2537,17 @@
 
 /** PerformanceMark is an abstract interface for PerformanceEntry objects with an entryType of "mark". Entries of this type are created by calling performance.mark() to add a named DOMHighResTimeStamp (the mark) to the browser's performance timeline. */
 interface PerformanceMark extends PerformanceEntry {
+    readonly detail: any;
 }
 
 declare var PerformanceMark: {
     prototype: PerformanceMark;
-    new(): PerformanceMark;
+    new(markName: string, markOptions?: PerformanceMarkOptions): PerformanceMark;
 };
 
 /** PerformanceMeasure is an abstract interface for PerformanceEntry objects with an entryType of "measure". Entries of this type are created by calling performance.measure() to add a named DOMHighResTimeStamp (the measure) between two marks to the browser's performance timeline. */
 interface PerformanceMeasure extends PerformanceEntry {
+    readonly detail: any;
 }
 
 declare var PerformanceMeasure: {
@@ -2590,23 +2580,24 @@
 
 /** Enables retrieval and analysis of detailed network timing data regarding the loading of an application's resources. An application can use the timing metrics to determine, for example, the length of time it takes to fetch a specific resource, such as an XMLHttpRequest, <SVG>, image, or script. */
 interface PerformanceResourceTiming extends PerformanceEntry {
-    readonly connectEnd: number;
-    readonly connectStart: number;
+    readonly connectEnd: DOMHighResTimeStamp;
+    readonly connectStart: DOMHighResTimeStamp;
     readonly decodedBodySize: number;
-    readonly domainLookupEnd: number;
-    readonly domainLookupStart: number;
+    readonly domainLookupEnd: DOMHighResTimeStamp;
+    readonly domainLookupStart: DOMHighResTimeStamp;
     readonly encodedBodySize: number;
-    readonly fetchStart: number;
+    readonly fetchStart: DOMHighResTimeStamp;
     readonly initiatorType: string;
     readonly nextHopProtocol: string;
-    readonly redirectEnd: number;
-    readonly redirectStart: number;
-    readonly requestStart: number;
-    readonly responseEnd: number;
-    readonly responseStart: number;
-    readonly secureConnectionStart: number;
+    readonly redirectEnd: DOMHighResTimeStamp;
+    readonly redirectStart: DOMHighResTimeStamp;
+    readonly requestStart: DOMHighResTimeStamp;
+    readonly responseEnd: DOMHighResTimeStamp;
+    readonly responseStart: DOMHighResTimeStamp;
+    readonly secureConnectionStart: DOMHighResTimeStamp;
+    readonly serverTiming: ReadonlyArray<PerformanceServerTiming>;
     readonly transferSize: number;
-    readonly workerStart: number;
+    readonly workerStart: DOMHighResTimeStamp;
     toJSON(): any;
 }
 
@@ -2615,6 +2606,18 @@
     new(): PerformanceResourceTiming;
 };
 
+interface PerformanceServerTiming {
+    readonly description: string;
+    readonly duration: DOMHighResTimeStamp;
+    readonly name: string;
+    toJSON(): any;
+}
+
+declare var PerformanceServerTiming: {
+    prototype: PerformanceServerTiming;
+    new(): PerformanceServerTiming;
+};
+
 interface PermissionStatusEventMap {
     "change": Event;
 }
@@ -2634,7 +2637,7 @@
 };
 
 interface Permissions {
-    query(permissionDesc: PermissionDescriptor | DevicePermissionDescriptor | MidiPermissionDescriptor | PushPermissionDescriptor): Promise<PermissionStatus>;
+    query(permissionDesc: PermissionDescriptor): Promise<PermissionStatus>;
 }
 
 declare var Permissions: {
@@ -2704,7 +2707,6 @@
 /** This Push API interface provides a subcription's URL endpoint and allows unsubscription from a push service. */
 interface PushSubscription {
     readonly endpoint: string;
-    readonly expirationTime: number | null;
     readonly options: PushSubscriptionOptions;
     getKey(name: PushEncryptionKeyName): ArrayBuffer | null;
     toJSON(): PushSubscriptionJSON;
@@ -2718,7 +2720,6 @@
 
 interface PushSubscriptionOptions {
     readonly applicationServerKey: ArrayBuffer | null;
-    readonly userVisibleOnly: boolean;
 }
 
 declare var PushSubscriptionOptions: {
@@ -2732,8 +2733,9 @@
     cancel(reason?: any): Promise<void>;
     getReader(): ReadableStreamDefaultReader<R>;
     pipeThrough<T>(transform: ReadableWritablePair<T, R>, options?: StreamPipeOptions): ReadableStream<T>;
-    pipeTo(dest: WritableStream<R>, options?: StreamPipeOptions): Promise<void>;
+    pipeTo(destination: WritableStream<R>, options?: StreamPipeOptions): Promise<void>;
     tee(): [ReadableStream<R>, ReadableStream<R>];
+    forEach(callbackfn: (value: any, key: number, parent: ReadableStream<R>) => void, thisArg?: any): void;
 }
 
 declare var ReadableStream: {
@@ -2744,7 +2746,7 @@
 interface ReadableStreamDefaultController<R = any> {
     readonly desiredSize: number | null;
     close(): void;
-    enqueue(chunk: R): void;
+    enqueue(chunk?: R): void;
     error(e?: any): void;
 }
 
@@ -2791,14 +2793,6 @@
      */
     readonly integrity: string;
     /**
-     * Returns a boolean indicating whether or not request is for a history navigation (a.k.a. back-foward navigation).
-     */
-    readonly isHistoryNavigation: boolean;
-    /**
-     * Returns a boolean indicating whether or not request is for a reload navigation.
-     */
-    readonly isReloadNavigation: boolean;
-    /**
      * Returns a boolean indicating whether or not request can outlive the global in which it was created.
      */
     readonly keepalive: boolean;
@@ -2845,7 +2839,6 @@
     readonly redirected: boolean;
     readonly status: number;
     readonly statusText: string;
-    readonly trailer: Promise<Headers>;
     readonly type: ResponseType;
     readonly url: string;
     clone(): Response;
@@ -2855,7 +2848,28 @@
     prototype: Response;
     new(body?: BodyInit | null, init?: ResponseInit): Response;
     error(): Response;
-    redirect(url: string, status?: number): Response;
+    redirect(url: string | URL, status?: number): Response;
+};
+
+/** Inherits from Event, and represents the event object of an event sent on a document or worker when its content security policy is violated. */
+interface SecurityPolicyViolationEvent extends Event {
+    readonly blockedURI: string;
+    readonly columnNumber: number;
+    readonly disposition: SecurityPolicyViolationEventDisposition;
+    readonly documentURI: string;
+    readonly effectiveDirective: string;
+    readonly lineNumber: number;
+    readonly originalPolicy: string;
+    readonly referrer: string;
+    readonly sample: string;
+    readonly sourceFile: string;
+    readonly statusCode: number;
+    readonly violatedDirective: string;
+}
+
+declare var SecurityPolicyViolationEvent: {
+    prototype: SecurityPolicyViolationEvent;
+    new(type: string, eventInitDict?: SecurityPolicyViolationEventInit): SecurityPolicyViolationEvent;
 };
 
 interface ServiceWorkerEventMap extends AbstractWorkerEventMap {
@@ -2893,7 +2907,7 @@
     onmessage: ((this: ServiceWorkerContainer, ev: MessageEvent) => any) | null;
     onmessageerror: ((this: ServiceWorkerContainer, ev: MessageEvent) => any) | null;
     readonly ready: Promise<ServiceWorkerRegistration>;
-    getRegistration(clientURL?: string): Promise<ServiceWorkerRegistration | undefined>;
+    getRegistration(clientURL?: string | URL): Promise<ServiceWorkerRegistration | undefined>;
     getRegistrations(): Promise<ReadonlyArray<ServiceWorkerRegistration>>;
     register(scriptURL: string | URL, options?: RegistrationOptions): Promise<ServiceWorkerRegistration>;
     startMessages(): void;
@@ -2917,7 +2931,6 @@
     "notificationclick": NotificationEvent;
     "notificationclose": NotificationEvent;
     "push": PushEvent;
-    "sync": SyncEvent;
 }
 
 /** This ServiceWorker API interface represents the global execution context of a service worker. */
@@ -2931,9 +2944,7 @@
     onnotificationclick: ((this: ServiceWorkerGlobalScope, ev: NotificationEvent) => any) | null;
     onnotificationclose: ((this: ServiceWorkerGlobalScope, ev: NotificationEvent) => any) | null;
     onpush: ((this: ServiceWorkerGlobalScope, ev: PushEvent) => any) | null;
-    onsync: ((this: ServiceWorkerGlobalScope, ev: SyncEvent) => any) | null;
     readonly registration: ServiceWorkerRegistration;
-    readonly serviceWorker: ServiceWorker;
     skipWaiting(): Promise<void>;
     addEventListener<K extends keyof ServiceWorkerGlobalScopeEventMap>(type: K, listener: (this: ServiceWorkerGlobalScope, ev: ServiceWorkerGlobalScopeEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
     addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
@@ -2954,11 +2965,9 @@
 interface ServiceWorkerRegistration extends EventTarget {
     readonly active: ServiceWorker | null;
     readonly installing: ServiceWorker | null;
-    readonly navigationPreload: NavigationPreloadManager;
     onupdatefound: ((this: ServiceWorkerRegistration, ev: Event) => any) | null;
     readonly pushManager: PushManager;
     readonly scope: string;
-    readonly sync: SyncManager;
     readonly updateViaCache: ServiceWorkerUpdateViaCache;
     readonly waiting: ServiceWorker | null;
     getNotifications(filter?: GetNotificationOptions): Promise<Notification[]>;
@@ -2976,22 +2985,6 @@
     new(): ServiceWorkerRegistration;
 };
 
-interface SharedWorker extends EventTarget, AbstractWorker {
-    /**
-     * Returns sharedWorker's MessagePort object which can be used to communicate with the global environment.
-     */
-    readonly port: MessagePort;
-    addEventListener<K extends keyof AbstractWorkerEventMap>(type: K, listener: (this: SharedWorker, ev: AbstractWorkerEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
-    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
-    removeEventListener<K extends keyof AbstractWorkerEventMap>(type: K, listener: (this: SharedWorker, ev: AbstractWorkerEventMap[K]) => any, options?: boolean | EventListenerOptions): void;
-    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;
-}
-
-declare var SharedWorker: {
-    prototype: SharedWorker;
-    new(scriptURL: string, options?: string | WorkerOptions): SharedWorker;
-};
-
 interface SharedWorkerGlobalScopeEventMap extends WorkerGlobalScopeEventMap {
     "connect": MessageEvent;
 }
@@ -3029,24 +3022,22 @@
 
 /** This Web Crypto API interface provides a number of low-level cryptographic functions. It is accessed via the Crypto.subtle properties available in a window context (via Window.crypto). */
 interface SubtleCrypto {
-    decrypt(algorithm: AlgorithmIdentifier | RsaOaepParams | AesCtrParams | AesCbcParams | AesCmacParams | AesGcmParams | AesCfbParams, key: CryptoKey, data: Int8Array | Int16Array | Int32Array | Uint8Array | Uint16Array | Uint32Array | Uint8ClampedArray | Float32Array | Float64Array | DataView | ArrayBuffer): Promise<ArrayBuffer>;
-    deriveBits(algorithm: AlgorithmIdentifier | EcdhKeyDeriveParams | DhKeyDeriveParams | ConcatParams | HkdfParams | Pbkdf2Params, baseKey: CryptoKey, length: number): Promise<ArrayBuffer>;
-    deriveKey(algorithm: AlgorithmIdentifier | EcdhKeyDeriveParams | DhKeyDeriveParams | ConcatParams | HkdfParams | Pbkdf2Params, baseKey: CryptoKey, derivedKeyType: string | AesDerivedKeyParams | HmacImportParams | ConcatParams | HkdfParams | Pbkdf2Params, extractable: boolean, keyUsages: KeyUsage[]): Promise<CryptoKey>;
-    digest(algorithm: AlgorithmIdentifier, data: Int8Array | Int16Array | Int32Array | Uint8Array | Uint16Array | Uint32Array | Uint8ClampedArray | Float32Array | Float64Array | DataView | ArrayBuffer): Promise<ArrayBuffer>;
-    encrypt(algorithm: AlgorithmIdentifier | RsaOaepParams | AesCtrParams | AesCbcParams | AesCmacParams | AesGcmParams | AesCfbParams, key: CryptoKey, data: Int8Array | Int16Array | Int32Array | Uint8Array | Uint16Array | Uint32Array | Uint8ClampedArray | Float32Array | Float64Array | DataView | ArrayBuffer): Promise<ArrayBuffer>;
+    decrypt(algorithm: AlgorithmIdentifier | RsaOaepParams | AesCtrParams | AesCbcParams | AesGcmParams, key: CryptoKey, data: BufferSource): Promise<any>;
+    deriveBits(algorithm: AlgorithmIdentifier | EcdhKeyDeriveParams | HkdfParams | Pbkdf2Params, baseKey: CryptoKey, length: number): Promise<ArrayBuffer>;
+    deriveKey(algorithm: AlgorithmIdentifier | EcdhKeyDeriveParams | HkdfParams | Pbkdf2Params, baseKey: CryptoKey, derivedKeyType: AlgorithmIdentifier | AesDerivedKeyParams | HmacImportParams | HkdfParams | Pbkdf2Params, extractable: boolean, keyUsages: KeyUsage[]): Promise<CryptoKey>;
+    digest(algorithm: AlgorithmIdentifier, data: BufferSource): Promise<ArrayBuffer>;
+    encrypt(algorithm: AlgorithmIdentifier | RsaOaepParams | AesCtrParams | AesCbcParams | AesGcmParams, key: CryptoKey, data: BufferSource): Promise<any>;
     exportKey(format: "jwk", key: CryptoKey): Promise<JsonWebKey>;
-    exportKey(format: "raw" | "pkcs8" | "spki", key: CryptoKey): Promise<ArrayBuffer>;
-    exportKey(format: string, key: CryptoKey): Promise<JsonWebKey | ArrayBuffer>;
-    generateKey(algorithm: RsaHashedKeyGenParams | EcKeyGenParams | DhKeyGenParams, extractable: boolean, keyUsages: KeyUsage[]): Promise<CryptoKeyPair>;
+    exportKey(format: Exclude<KeyFormat, "jwk">, key: CryptoKey): Promise<ArrayBuffer>;
+    generateKey(algorithm: RsaHashedKeyGenParams | EcKeyGenParams, extractable: boolean, keyUsages: KeyUsage[]): Promise<CryptoKeyPair>;
     generateKey(algorithm: AesKeyGenParams | HmacKeyGenParams | Pbkdf2Params, extractable: boolean, keyUsages: KeyUsage[]): Promise<CryptoKey>;
     generateKey(algorithm: AlgorithmIdentifier, extractable: boolean, keyUsages: KeyUsage[]): Promise<CryptoKeyPair | CryptoKey>;
-    importKey(format: "jwk", keyData: JsonWebKey, algorithm: AlgorithmIdentifier | RsaHashedImportParams | EcKeyImportParams | HmacImportParams | DhImportKeyParams | AesKeyAlgorithm, extractable: boolean, keyUsages: KeyUsage[]): Promise<CryptoKey>;
-    importKey(format: "raw" | "pkcs8" | "spki", keyData: Int8Array | Int16Array | Int32Array | Uint8Array | Uint16Array | Uint32Array | Uint8ClampedArray | Float32Array | Float64Array | DataView | ArrayBuffer, algorithm: AlgorithmIdentifier | RsaHashedImportParams | EcKeyImportParams | HmacImportParams | DhImportKeyParams | AesKeyAlgorithm, extractable: boolean, keyUsages: KeyUsage[]): Promise<CryptoKey>;
-    importKey(format: string, keyData: JsonWebKey | Int8Array | Int16Array | Int32Array | Uint8Array | Uint16Array | Uint32Array | Uint8ClampedArray | Float32Array | Float64Array | DataView | ArrayBuffer, algorithm: AlgorithmIdentifier | RsaHashedImportParams | EcKeyImportParams | HmacImportParams | DhImportKeyParams | AesKeyAlgorithm, extractable: boolean, keyUsages: KeyUsage[]): Promise<CryptoKey>;
-    sign(algorithm: AlgorithmIdentifier | RsaPssParams | EcdsaParams | AesCmacParams, key: CryptoKey, data: Int8Array | Int16Array | Int32Array | Uint8Array | Uint16Array | Uint32Array | Uint8ClampedArray | Float32Array | Float64Array | DataView | ArrayBuffer): Promise<ArrayBuffer>;
-    unwrapKey(format: "raw" | "pkcs8" | "spki" | "jwk" | string, wrappedKey: Int8Array | Int16Array | Int32Array | Uint8Array | Uint16Array | Uint32Array | Uint8ClampedArray | Float32Array | Float64Array | DataView | ArrayBuffer, unwrappingKey: CryptoKey, unwrapAlgorithm: AlgorithmIdentifier | RsaOaepParams | AesCtrParams | AesCbcParams | AesCmacParams | AesGcmParams | AesCfbParams, unwrappedKeyAlgorithm: AlgorithmIdentifier | RsaHashedImportParams | EcKeyImportParams | HmacImportParams | DhImportKeyParams | AesKeyAlgorithm, extractable: boolean, keyUsages: KeyUsage[]): Promise<CryptoKey>;
-    verify(algorithm: AlgorithmIdentifier | RsaPssParams | EcdsaParams | AesCmacParams, key: CryptoKey, signature: Int8Array | Int16Array | Int32Array | Uint8Array | Uint16Array | Uint32Array | Uint8ClampedArray | Float32Array | Float64Array | DataView | ArrayBuffer, data: Int8Array | Int16Array | Int32Array | Uint8Array | Uint16Array | Uint32Array | Uint8ClampedArray | Float32Array | Float64Array | DataView | ArrayBuffer): Promise<boolean>;
-    wrapKey(format: "raw" | "pkcs8" | "spki" | "jwk" | string, key: CryptoKey, wrappingKey: CryptoKey, wrapAlgorithm: AlgorithmIdentifier | RsaOaepParams | AesCtrParams | AesCbcParams | AesCmacParams | AesGcmParams | AesCfbParams): Promise<ArrayBuffer>;
+    importKey(format: "jwk", keyData: JsonWebKey, algorithm: AlgorithmIdentifier | RsaHashedImportParams | EcKeyImportParams | HmacImportParams | AesKeyAlgorithm, extractable: boolean, keyUsages: KeyUsage[]): Promise<CryptoKey>;
+    importKey(format: Exclude<KeyFormat, "jwk">, keyData: BufferSource, algorithm: AlgorithmIdentifier | RsaHashedImportParams | EcKeyImportParams | HmacImportParams | AesKeyAlgorithm, extractable: boolean, keyUsages: KeyUsage[]): Promise<CryptoKey>;
+    sign(algorithm: AlgorithmIdentifier | RsaPssParams | EcdsaParams, key: CryptoKey, data: BufferSource): Promise<ArrayBuffer>;
+    unwrapKey(format: KeyFormat, wrappedKey: BufferSource, unwrappingKey: CryptoKey, unwrapAlgorithm: AlgorithmIdentifier | RsaOaepParams | AesCtrParams | AesCbcParams | AesGcmParams, unwrappedKeyAlgorithm: AlgorithmIdentifier | RsaHashedImportParams | EcKeyImportParams | HmacImportParams | AesKeyAlgorithm, extractable: boolean, keyUsages: KeyUsage[]): Promise<CryptoKey>;
+    verify(algorithm: AlgorithmIdentifier | RsaPssParams | EcdsaParams, key: CryptoKey, signature: BufferSource, data: BufferSource): Promise<boolean>;
+    wrapKey(format: KeyFormat, key: CryptoKey, wrappingKey: CryptoKey, wrapAlgorithm: AlgorithmIdentifier | RsaOaepParams | AesCtrParams | AesCbcParams | AesGcmParams): Promise<ArrayBuffer>;
 }
 
 declare var SubtleCrypto: {
@@ -3054,28 +3045,6 @@
     new(): SubtleCrypto;
 };
 
-/** A sync action that is dispatched on the ServiceWorkerGlobalScope of a ServiceWorker.  */
-interface SyncEvent extends ExtendableEvent {
-    readonly lastChance: boolean;
-    readonly tag: string;
-}
-
-declare var SyncEvent: {
-    prototype: SyncEvent;
-    new(type: string, init: SyncEventInit): SyncEvent;
-};
-
-/** This ServiceWorker API interface provides an interface for registering and listing sync registrations. */
-interface SyncManager {
-    getTags(): Promise<string[]>;
-    register(tag: string): Promise<void>;
-}
-
-declare var SyncManager: {
-    prototype: SyncManager;
-    new(): SyncManager;
-};
-
 /** A decoder for a specific method, that is a specific character encoding, like utf-8, iso-8859-2, koi8, cp1261, gbk, etc. A decoder takes a stream of bytes as input and emits a stream of code points. For a more scalable, non-native library, see StringView – a C-like representation of strings based on typed arrays. */
 interface TextDecoder extends TextDecoderCommon {
     /**
@@ -3179,6 +3148,14 @@
     /**
      * Returns the measurement described below.
      */
+    readonly fontBoundingBoxAscent: number;
+    /**
+     * Returns the measurement described below.
+     */
+    readonly fontBoundingBoxDescent: number;
+    /**
+     * Returns the measurement described below.
+     */
     readonly width: number;
 }
 
@@ -3199,7 +3176,7 @@
 
 interface TransformStreamDefaultController<O = any> {
     readonly desiredSize: number | null;
-    enqueue(chunk: O): void;
+    enqueue(chunk?: O): void;
     error(reason?: any): void;
     terminate(): void;
 }
@@ -3229,7 +3206,7 @@
 
 declare var URL: {
     prototype: URL;
-    new(url: string, base?: string | URL): URL;
+    new(url: string | URL, base?: string | URL): URL;
     createObjectURL(object: any): string;
     revokeObjectURL(url: string): void;
 };
@@ -3311,6 +3288,30 @@
     readonly COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR: GLenum;
 }
 
+interface WEBGL_compressed_texture_etc {
+    readonly COMPRESSED_R11_EAC: GLenum;
+    readonly COMPRESSED_RG11_EAC: GLenum;
+    readonly COMPRESSED_RGB8_ETC2: GLenum;
+    readonly COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2: GLenum;
+    readonly COMPRESSED_RGBA8_ETC2_EAC: GLenum;
+    readonly COMPRESSED_SIGNED_R11_EAC: GLenum;
+    readonly COMPRESSED_SIGNED_RG11_EAC: GLenum;
+    readonly COMPRESSED_SRGB8_ALPHA8_ETC2_EAC: GLenum;
+    readonly COMPRESSED_SRGB8_ETC2: GLenum;
+    readonly COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2: GLenum;
+}
+
+interface WEBGL_compressed_texture_etc1 {
+    readonly COMPRESSED_RGB_ETC1_WEBGL: GLenum;
+}
+
+interface WEBGL_compressed_texture_pvrtc {
+    readonly COMPRESSED_RGBA_PVRTC_2BPPV1_IMG: GLenum;
+    readonly COMPRESSED_RGBA_PVRTC_4BPPV1_IMG: GLenum;
+    readonly COMPRESSED_RGB_PVRTC_2BPPV1_IMG: GLenum;
+    readonly COMPRESSED_RGB_PVRTC_4BPPV1_IMG: GLenum;
+}
+
 /** The WEBGL_compressed_texture_s3tc extension is part of the WebGL API and exposes four S3TC compressed texture formats. */
 interface WEBGL_compressed_texture_s3tc {
     readonly COMPRESSED_RGBA_S3TC_DXT1_EXT: GLenum;
@@ -3390,6 +3391,269 @@
 declare var WebGL2RenderingContext: {
     prototype: WebGL2RenderingContext;
     new(): WebGL2RenderingContext;
+    readonly ACTIVE_UNIFORM_BLOCKS: GLenum;
+    readonly ALREADY_SIGNALED: GLenum;
+    readonly ANY_SAMPLES_PASSED: GLenum;
+    readonly ANY_SAMPLES_PASSED_CONSERVATIVE: GLenum;
+    readonly COLOR: GLenum;
+    readonly COLOR_ATTACHMENT1: GLenum;
+    readonly COLOR_ATTACHMENT10: GLenum;
+    readonly COLOR_ATTACHMENT11: GLenum;
+    readonly COLOR_ATTACHMENT12: GLenum;
+    readonly COLOR_ATTACHMENT13: GLenum;
+    readonly COLOR_ATTACHMENT14: GLenum;
+    readonly COLOR_ATTACHMENT15: GLenum;
+    readonly COLOR_ATTACHMENT2: GLenum;
+    readonly COLOR_ATTACHMENT3: GLenum;
+    readonly COLOR_ATTACHMENT4: GLenum;
+    readonly COLOR_ATTACHMENT5: GLenum;
+    readonly COLOR_ATTACHMENT6: GLenum;
+    readonly COLOR_ATTACHMENT7: GLenum;
+    readonly COLOR_ATTACHMENT8: GLenum;
+    readonly COLOR_ATTACHMENT9: GLenum;
+    readonly COMPARE_REF_TO_TEXTURE: GLenum;
+    readonly CONDITION_SATISFIED: GLenum;
+    readonly COPY_READ_BUFFER: GLenum;
+    readonly COPY_READ_BUFFER_BINDING: GLenum;
+    readonly COPY_WRITE_BUFFER: GLenum;
+    readonly COPY_WRITE_BUFFER_BINDING: GLenum;
+    readonly CURRENT_QUERY: GLenum;
+    readonly DEPTH: GLenum;
+    readonly DEPTH24_STENCIL8: GLenum;
+    readonly DEPTH32F_STENCIL8: GLenum;
+    readonly DEPTH_COMPONENT24: GLenum;
+    readonly DEPTH_COMPONENT32F: GLenum;
+    readonly DRAW_BUFFER0: GLenum;
+    readonly DRAW_BUFFER1: GLenum;
+    readonly DRAW_BUFFER10: GLenum;
+    readonly DRAW_BUFFER11: GLenum;
+    readonly DRAW_BUFFER12: GLenum;
+    readonly DRAW_BUFFER13: GLenum;
+    readonly DRAW_BUFFER14: GLenum;
+    readonly DRAW_BUFFER15: GLenum;
+    readonly DRAW_BUFFER2: GLenum;
+    readonly DRAW_BUFFER3: GLenum;
+    readonly DRAW_BUFFER4: GLenum;
+    readonly DRAW_BUFFER5: GLenum;
+    readonly DRAW_BUFFER6: GLenum;
+    readonly DRAW_BUFFER7: GLenum;
+    readonly DRAW_BUFFER8: GLenum;
+    readonly DRAW_BUFFER9: GLenum;
+    readonly DRAW_FRAMEBUFFER: GLenum;
+    readonly DRAW_FRAMEBUFFER_BINDING: GLenum;
+    readonly DYNAMIC_COPY: GLenum;
+    readonly DYNAMIC_READ: GLenum;
+    readonly FLOAT_32_UNSIGNED_INT_24_8_REV: GLenum;
+    readonly FLOAT_MAT2x3: GLenum;
+    readonly FLOAT_MAT2x4: GLenum;
+    readonly FLOAT_MAT3x2: GLenum;
+    readonly FLOAT_MAT3x4: GLenum;
+    readonly FLOAT_MAT4x2: GLenum;
+    readonly FLOAT_MAT4x3: GLenum;
+    readonly FRAGMENT_SHADER_DERIVATIVE_HINT: GLenum;
+    readonly FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE: GLenum;
+    readonly FRAMEBUFFER_ATTACHMENT_BLUE_SIZE: GLenum;
+    readonly FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING: GLenum;
+    readonly FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE: GLenum;
+    readonly FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE: GLenum;
+    readonly FRAMEBUFFER_ATTACHMENT_GREEN_SIZE: GLenum;
+    readonly FRAMEBUFFER_ATTACHMENT_RED_SIZE: GLenum;
+    readonly FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE: GLenum;
+    readonly FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER: GLenum;
+    readonly FRAMEBUFFER_DEFAULT: GLenum;
+    readonly FRAMEBUFFER_INCOMPLETE_MULTISAMPLE: GLenum;
+    readonly HALF_FLOAT: GLenum;
+    readonly INTERLEAVED_ATTRIBS: GLenum;
+    readonly INT_2_10_10_10_REV: GLenum;
+    readonly INT_SAMPLER_2D: GLenum;
+    readonly INT_SAMPLER_2D_ARRAY: GLenum;
+    readonly INT_SAMPLER_3D: GLenum;
+    readonly INT_SAMPLER_CUBE: GLenum;
+    readonly INVALID_INDEX: GLenum;
+    readonly MAX: GLenum;
+    readonly MAX_3D_TEXTURE_SIZE: GLenum;
+    readonly MAX_ARRAY_TEXTURE_LAYERS: GLenum;
+    readonly MAX_CLIENT_WAIT_TIMEOUT_WEBGL: GLenum;
+    readonly MAX_COLOR_ATTACHMENTS: GLenum;
+    readonly MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS: GLenum;
+    readonly MAX_COMBINED_UNIFORM_BLOCKS: GLenum;
+    readonly MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS: GLenum;
+    readonly MAX_DRAW_BUFFERS: GLenum;
+    readonly MAX_ELEMENTS_INDICES: GLenum;
+    readonly MAX_ELEMENTS_VERTICES: GLenum;
+    readonly MAX_ELEMENT_INDEX: GLenum;
+    readonly MAX_FRAGMENT_INPUT_COMPONENTS: GLenum;
+    readonly MAX_FRAGMENT_UNIFORM_BLOCKS: GLenum;
+    readonly MAX_FRAGMENT_UNIFORM_COMPONENTS: GLenum;
+    readonly MAX_PROGRAM_TEXEL_OFFSET: GLenum;
+    readonly MAX_SAMPLES: GLenum;
+    readonly MAX_SERVER_WAIT_TIMEOUT: GLenum;
+    readonly MAX_TEXTURE_LOD_BIAS: GLenum;
+    readonly MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS: GLenum;
+    readonly MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS: GLenum;
+    readonly MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS: GLenum;
+    readonly MAX_UNIFORM_BLOCK_SIZE: GLenum;
+    readonly MAX_UNIFORM_BUFFER_BINDINGS: GLenum;
+    readonly MAX_VARYING_COMPONENTS: GLenum;
+    readonly MAX_VERTEX_OUTPUT_COMPONENTS: GLenum;
+    readonly MAX_VERTEX_UNIFORM_BLOCKS: GLenum;
+    readonly MAX_VERTEX_UNIFORM_COMPONENTS: GLenum;
+    readonly MIN: GLenum;
+    readonly MIN_PROGRAM_TEXEL_OFFSET: GLenum;
+    readonly OBJECT_TYPE: GLenum;
+    readonly PACK_ROW_LENGTH: GLenum;
+    readonly PACK_SKIP_PIXELS: GLenum;
+    readonly PACK_SKIP_ROWS: GLenum;
+    readonly PIXEL_PACK_BUFFER: GLenum;
+    readonly PIXEL_PACK_BUFFER_BINDING: GLenum;
+    readonly PIXEL_UNPACK_BUFFER: GLenum;
+    readonly PIXEL_UNPACK_BUFFER_BINDING: GLenum;
+    readonly QUERY_RESULT: GLenum;
+    readonly QUERY_RESULT_AVAILABLE: GLenum;
+    readonly R11F_G11F_B10F: GLenum;
+    readonly R16F: GLenum;
+    readonly R16I: GLenum;
+    readonly R16UI: GLenum;
+    readonly R32F: GLenum;
+    readonly R32I: GLenum;
+    readonly R32UI: GLenum;
+    readonly R8: GLenum;
+    readonly R8I: GLenum;
+    readonly R8UI: GLenum;
+    readonly R8_SNORM: GLenum;
+    readonly RASTERIZER_DISCARD: GLenum;
+    readonly READ_BUFFER: GLenum;
+    readonly READ_FRAMEBUFFER: GLenum;
+    readonly READ_FRAMEBUFFER_BINDING: GLenum;
+    readonly RED: GLenum;
+    readonly RED_INTEGER: GLenum;
+    readonly RENDERBUFFER_SAMPLES: GLenum;
+    readonly RG: GLenum;
+    readonly RG16F: GLenum;
+    readonly RG16I: GLenum;
+    readonly RG16UI: GLenum;
+    readonly RG32F: GLenum;
+    readonly RG32I: GLenum;
+    readonly RG32UI: GLenum;
+    readonly RG8: GLenum;
+    readonly RG8I: GLenum;
+    readonly RG8UI: GLenum;
+    readonly RG8_SNORM: GLenum;
+    readonly RGB10_A2: GLenum;
+    readonly RGB10_A2UI: GLenum;
+    readonly RGB16F: GLenum;
+    readonly RGB16I: GLenum;
+    readonly RGB16UI: GLenum;
+    readonly RGB32F: GLenum;
+    readonly RGB32I: GLenum;
+    readonly RGB32UI: GLenum;
+    readonly RGB8: GLenum;
+    readonly RGB8I: GLenum;
+    readonly RGB8UI: GLenum;
+    readonly RGB8_SNORM: GLenum;
+    readonly RGB9_E5: GLenum;
+    readonly RGBA16F: GLenum;
+    readonly RGBA16I: GLenum;
+    readonly RGBA16UI: GLenum;
+    readonly RGBA32F: GLenum;
+    readonly RGBA32I: GLenum;
+    readonly RGBA32UI: GLenum;
+    readonly RGBA8: GLenum;
+    readonly RGBA8I: GLenum;
+    readonly RGBA8UI: GLenum;
+    readonly RGBA8_SNORM: GLenum;
+    readonly RGBA_INTEGER: GLenum;
+    readonly RGB_INTEGER: GLenum;
+    readonly RG_INTEGER: GLenum;
+    readonly SAMPLER_2D_ARRAY: GLenum;
+    readonly SAMPLER_2D_ARRAY_SHADOW: GLenum;
+    readonly SAMPLER_2D_SHADOW: GLenum;
+    readonly SAMPLER_3D: GLenum;
+    readonly SAMPLER_BINDING: GLenum;
+    readonly SAMPLER_CUBE_SHADOW: GLenum;
+    readonly SEPARATE_ATTRIBS: GLenum;
+    readonly SIGNALED: GLenum;
+    readonly SIGNED_NORMALIZED: GLenum;
+    readonly SRGB: GLenum;
+    readonly SRGB8: GLenum;
+    readonly SRGB8_ALPHA8: GLenum;
+    readonly STATIC_COPY: GLenum;
+    readonly STATIC_READ: GLenum;
+    readonly STENCIL: GLenum;
+    readonly STREAM_COPY: GLenum;
+    readonly STREAM_READ: GLenum;
+    readonly SYNC_CONDITION: GLenum;
+    readonly SYNC_FENCE: GLenum;
+    readonly SYNC_FLAGS: GLenum;
+    readonly SYNC_FLUSH_COMMANDS_BIT: GLenum;
+    readonly SYNC_GPU_COMMANDS_COMPLETE: GLenum;
+    readonly SYNC_STATUS: GLenum;
+    readonly TEXTURE_2D_ARRAY: GLenum;
+    readonly TEXTURE_3D: GLenum;
+    readonly TEXTURE_BASE_LEVEL: GLenum;
+    readonly TEXTURE_BINDING_2D_ARRAY: GLenum;
+    readonly TEXTURE_BINDING_3D: GLenum;
+    readonly TEXTURE_COMPARE_FUNC: GLenum;
+    readonly TEXTURE_COMPARE_MODE: GLenum;
+    readonly TEXTURE_IMMUTABLE_FORMAT: GLenum;
+    readonly TEXTURE_IMMUTABLE_LEVELS: GLenum;
+    readonly TEXTURE_MAX_LEVEL: GLenum;
+    readonly TEXTURE_MAX_LOD: GLenum;
+    readonly TEXTURE_MIN_LOD: GLenum;
+    readonly TEXTURE_WRAP_R: GLenum;
+    readonly TIMEOUT_EXPIRED: GLenum;
+    readonly TIMEOUT_IGNORED: GLint64;
+    readonly TRANSFORM_FEEDBACK: GLenum;
+    readonly TRANSFORM_FEEDBACK_ACTIVE: GLenum;
+    readonly TRANSFORM_FEEDBACK_BINDING: GLenum;
+    readonly TRANSFORM_FEEDBACK_BUFFER: GLenum;
+    readonly TRANSFORM_FEEDBACK_BUFFER_BINDING: GLenum;
+    readonly TRANSFORM_FEEDBACK_BUFFER_MODE: GLenum;
+    readonly TRANSFORM_FEEDBACK_BUFFER_SIZE: GLenum;
+    readonly TRANSFORM_FEEDBACK_BUFFER_START: GLenum;
+    readonly TRANSFORM_FEEDBACK_PAUSED: GLenum;
+    readonly TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN: GLenum;
+    readonly TRANSFORM_FEEDBACK_VARYINGS: GLenum;
+    readonly UNIFORM_ARRAY_STRIDE: GLenum;
+    readonly UNIFORM_BLOCK_ACTIVE_UNIFORMS: GLenum;
+    readonly UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES: GLenum;
+    readonly UNIFORM_BLOCK_BINDING: GLenum;
+    readonly UNIFORM_BLOCK_DATA_SIZE: GLenum;
+    readonly UNIFORM_BLOCK_INDEX: GLenum;
+    readonly UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER: GLenum;
+    readonly UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER: GLenum;
+    readonly UNIFORM_BUFFER: GLenum;
+    readonly UNIFORM_BUFFER_BINDING: GLenum;
+    readonly UNIFORM_BUFFER_OFFSET_ALIGNMENT: GLenum;
+    readonly UNIFORM_BUFFER_SIZE: GLenum;
+    readonly UNIFORM_BUFFER_START: GLenum;
+    readonly UNIFORM_IS_ROW_MAJOR: GLenum;
+    readonly UNIFORM_MATRIX_STRIDE: GLenum;
+    readonly UNIFORM_OFFSET: GLenum;
+    readonly UNIFORM_SIZE: GLenum;
+    readonly UNIFORM_TYPE: GLenum;
+    readonly UNPACK_IMAGE_HEIGHT: GLenum;
+    readonly UNPACK_ROW_LENGTH: GLenum;
+    readonly UNPACK_SKIP_IMAGES: GLenum;
+    readonly UNPACK_SKIP_PIXELS: GLenum;
+    readonly UNPACK_SKIP_ROWS: GLenum;
+    readonly UNSIGNALED: GLenum;
+    readonly UNSIGNED_INT_10F_11F_11F_REV: GLenum;
+    readonly UNSIGNED_INT_24_8: GLenum;
+    readonly UNSIGNED_INT_2_10_10_10_REV: GLenum;
+    readonly UNSIGNED_INT_5_9_9_9_REV: GLenum;
+    readonly UNSIGNED_INT_SAMPLER_2D: GLenum;
+    readonly UNSIGNED_INT_SAMPLER_2D_ARRAY: GLenum;
+    readonly UNSIGNED_INT_SAMPLER_3D: GLenum;
+    readonly UNSIGNED_INT_SAMPLER_CUBE: GLenum;
+    readonly UNSIGNED_INT_VEC2: GLenum;
+    readonly UNSIGNED_INT_VEC3: GLenum;
+    readonly UNSIGNED_INT_VEC4: GLenum;
+    readonly UNSIGNED_NORMALIZED: GLenum;
+    readonly VERTEX_ARRAY_BINDING: GLenum;
+    readonly VERTEX_ATTRIB_ARRAY_DIVISOR: GLenum;
+    readonly VERTEX_ATTRIB_ARRAY_INTEGER: GLenum;
+    readonly WAIT_FAILED: GLenum;
     readonly ACTIVE_ATTRIBUTES: GLenum;
     readonly ACTIVE_TEXTURE: GLenum;
     readonly ACTIVE_UNIFORMS: GLenum;
@@ -3686,269 +3950,6 @@
     readonly VERTEX_SHADER: GLenum;
     readonly VIEWPORT: GLenum;
     readonly ZERO: GLenum;
-    readonly ACTIVE_UNIFORM_BLOCKS: GLenum;
-    readonly ALREADY_SIGNALED: GLenum;
-    readonly ANY_SAMPLES_PASSED: GLenum;
-    readonly ANY_SAMPLES_PASSED_CONSERVATIVE: GLenum;
-    readonly COLOR: GLenum;
-    readonly COLOR_ATTACHMENT1: GLenum;
-    readonly COLOR_ATTACHMENT10: GLenum;
-    readonly COLOR_ATTACHMENT11: GLenum;
-    readonly COLOR_ATTACHMENT12: GLenum;
-    readonly COLOR_ATTACHMENT13: GLenum;
-    readonly COLOR_ATTACHMENT14: GLenum;
-    readonly COLOR_ATTACHMENT15: GLenum;
-    readonly COLOR_ATTACHMENT2: GLenum;
-    readonly COLOR_ATTACHMENT3: GLenum;
-    readonly COLOR_ATTACHMENT4: GLenum;
-    readonly COLOR_ATTACHMENT5: GLenum;
-    readonly COLOR_ATTACHMENT6: GLenum;
-    readonly COLOR_ATTACHMENT7: GLenum;
-    readonly COLOR_ATTACHMENT8: GLenum;
-    readonly COLOR_ATTACHMENT9: GLenum;
-    readonly COMPARE_REF_TO_TEXTURE: GLenum;
-    readonly CONDITION_SATISFIED: GLenum;
-    readonly COPY_READ_BUFFER: GLenum;
-    readonly COPY_READ_BUFFER_BINDING: GLenum;
-    readonly COPY_WRITE_BUFFER: GLenum;
-    readonly COPY_WRITE_BUFFER_BINDING: GLenum;
-    readonly CURRENT_QUERY: GLenum;
-    readonly DEPTH: GLenum;
-    readonly DEPTH24_STENCIL8: GLenum;
-    readonly DEPTH32F_STENCIL8: GLenum;
-    readonly DEPTH_COMPONENT24: GLenum;
-    readonly DEPTH_COMPONENT32F: GLenum;
-    readonly DRAW_BUFFER0: GLenum;
-    readonly DRAW_BUFFER1: GLenum;
-    readonly DRAW_BUFFER10: GLenum;
-    readonly DRAW_BUFFER11: GLenum;
-    readonly DRAW_BUFFER12: GLenum;
-    readonly DRAW_BUFFER13: GLenum;
-    readonly DRAW_BUFFER14: GLenum;
-    readonly DRAW_BUFFER15: GLenum;
-    readonly DRAW_BUFFER2: GLenum;
-    readonly DRAW_BUFFER3: GLenum;
-    readonly DRAW_BUFFER4: GLenum;
-    readonly DRAW_BUFFER5: GLenum;
-    readonly DRAW_BUFFER6: GLenum;
-    readonly DRAW_BUFFER7: GLenum;
-    readonly DRAW_BUFFER8: GLenum;
-    readonly DRAW_BUFFER9: GLenum;
-    readonly DRAW_FRAMEBUFFER: GLenum;
-    readonly DRAW_FRAMEBUFFER_BINDING: GLenum;
-    readonly DYNAMIC_COPY: GLenum;
-    readonly DYNAMIC_READ: GLenum;
-    readonly FLOAT_32_UNSIGNED_INT_24_8_REV: GLenum;
-    readonly FLOAT_MAT2x3: GLenum;
-    readonly FLOAT_MAT2x4: GLenum;
-    readonly FLOAT_MAT3x2: GLenum;
-    readonly FLOAT_MAT3x4: GLenum;
-    readonly FLOAT_MAT4x2: GLenum;
-    readonly FLOAT_MAT4x3: GLenum;
-    readonly FRAGMENT_SHADER_DERIVATIVE_HINT: GLenum;
-    readonly FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE: GLenum;
-    readonly FRAMEBUFFER_ATTACHMENT_BLUE_SIZE: GLenum;
-    readonly FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING: GLenum;
-    readonly FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE: GLenum;
-    readonly FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE: GLenum;
-    readonly FRAMEBUFFER_ATTACHMENT_GREEN_SIZE: GLenum;
-    readonly FRAMEBUFFER_ATTACHMENT_RED_SIZE: GLenum;
-    readonly FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE: GLenum;
-    readonly FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER: GLenum;
-    readonly FRAMEBUFFER_DEFAULT: GLenum;
-    readonly FRAMEBUFFER_INCOMPLETE_MULTISAMPLE: GLenum;
-    readonly HALF_FLOAT: GLenum;
-    readonly INTERLEAVED_ATTRIBS: GLenum;
-    readonly INT_2_10_10_10_REV: GLenum;
-    readonly INT_SAMPLER_2D: GLenum;
-    readonly INT_SAMPLER_2D_ARRAY: GLenum;
-    readonly INT_SAMPLER_3D: GLenum;
-    readonly INT_SAMPLER_CUBE: GLenum;
-    readonly INVALID_INDEX: GLenum;
-    readonly MAX: GLenum;
-    readonly MAX_3D_TEXTURE_SIZE: GLenum;
-    readonly MAX_ARRAY_TEXTURE_LAYERS: GLenum;
-    readonly MAX_CLIENT_WAIT_TIMEOUT_WEBGL: GLenum;
-    readonly MAX_COLOR_ATTACHMENTS: GLenum;
-    readonly MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS: GLenum;
-    readonly MAX_COMBINED_UNIFORM_BLOCKS: GLenum;
-    readonly MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS: GLenum;
-    readonly MAX_DRAW_BUFFERS: GLenum;
-    readonly MAX_ELEMENTS_INDICES: GLenum;
-    readonly MAX_ELEMENTS_VERTICES: GLenum;
-    readonly MAX_ELEMENT_INDEX: GLenum;
-    readonly MAX_FRAGMENT_INPUT_COMPONENTS: GLenum;
-    readonly MAX_FRAGMENT_UNIFORM_BLOCKS: GLenum;
-    readonly MAX_FRAGMENT_UNIFORM_COMPONENTS: GLenum;
-    readonly MAX_PROGRAM_TEXEL_OFFSET: GLenum;
-    readonly MAX_SAMPLES: GLenum;
-    readonly MAX_SERVER_WAIT_TIMEOUT: GLenum;
-    readonly MAX_TEXTURE_LOD_BIAS: GLenum;
-    readonly MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS: GLenum;
-    readonly MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS: GLenum;
-    readonly MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS: GLenum;
-    readonly MAX_UNIFORM_BLOCK_SIZE: GLenum;
-    readonly MAX_UNIFORM_BUFFER_BINDINGS: GLenum;
-    readonly MAX_VARYING_COMPONENTS: GLenum;
-    readonly MAX_VERTEX_OUTPUT_COMPONENTS: GLenum;
-    readonly MAX_VERTEX_UNIFORM_BLOCKS: GLenum;
-    readonly MAX_VERTEX_UNIFORM_COMPONENTS: GLenum;
-    readonly MIN: GLenum;
-    readonly MIN_PROGRAM_TEXEL_OFFSET: GLenum;
-    readonly OBJECT_TYPE: GLenum;
-    readonly PACK_ROW_LENGTH: GLenum;
-    readonly PACK_SKIP_PIXELS: GLenum;
-    readonly PACK_SKIP_ROWS: GLenum;
-    readonly PIXEL_PACK_BUFFER: GLenum;
-    readonly PIXEL_PACK_BUFFER_BINDING: GLenum;
-    readonly PIXEL_UNPACK_BUFFER: GLenum;
-    readonly PIXEL_UNPACK_BUFFER_BINDING: GLenum;
-    readonly QUERY_RESULT: GLenum;
-    readonly QUERY_RESULT_AVAILABLE: GLenum;
-    readonly R11F_G11F_B10F: GLenum;
-    readonly R16F: GLenum;
-    readonly R16I: GLenum;
-    readonly R16UI: GLenum;
-    readonly R32F: GLenum;
-    readonly R32I: GLenum;
-    readonly R32UI: GLenum;
-    readonly R8: GLenum;
-    readonly R8I: GLenum;
-    readonly R8UI: GLenum;
-    readonly R8_SNORM: GLenum;
-    readonly RASTERIZER_DISCARD: GLenum;
-    readonly READ_BUFFER: GLenum;
-    readonly READ_FRAMEBUFFER: GLenum;
-    readonly READ_FRAMEBUFFER_BINDING: GLenum;
-    readonly RED: GLenum;
-    readonly RED_INTEGER: GLenum;
-    readonly RENDERBUFFER_SAMPLES: GLenum;
-    readonly RG: GLenum;
-    readonly RG16F: GLenum;
-    readonly RG16I: GLenum;
-    readonly RG16UI: GLenum;
-    readonly RG32F: GLenum;
-    readonly RG32I: GLenum;
-    readonly RG32UI: GLenum;
-    readonly RG8: GLenum;
-    readonly RG8I: GLenum;
-    readonly RG8UI: GLenum;
-    readonly RG8_SNORM: GLenum;
-    readonly RGB10_A2: GLenum;
-    readonly RGB10_A2UI: GLenum;
-    readonly RGB16F: GLenum;
-    readonly RGB16I: GLenum;
-    readonly RGB16UI: GLenum;
-    readonly RGB32F: GLenum;
-    readonly RGB32I: GLenum;
-    readonly RGB32UI: GLenum;
-    readonly RGB8: GLenum;
-    readonly RGB8I: GLenum;
-    readonly RGB8UI: GLenum;
-    readonly RGB8_SNORM: GLenum;
-    readonly RGB9_E5: GLenum;
-    readonly RGBA16F: GLenum;
-    readonly RGBA16I: GLenum;
-    readonly RGBA16UI: GLenum;
-    readonly RGBA32F: GLenum;
-    readonly RGBA32I: GLenum;
-    readonly RGBA32UI: GLenum;
-    readonly RGBA8: GLenum;
-    readonly RGBA8I: GLenum;
-    readonly RGBA8UI: GLenum;
-    readonly RGBA8_SNORM: GLenum;
-    readonly RGBA_INTEGER: GLenum;
-    readonly RGB_INTEGER: GLenum;
-    readonly RG_INTEGER: GLenum;
-    readonly SAMPLER_2D_ARRAY: GLenum;
-    readonly SAMPLER_2D_ARRAY_SHADOW: GLenum;
-    readonly SAMPLER_2D_SHADOW: GLenum;
-    readonly SAMPLER_3D: GLenum;
-    readonly SAMPLER_BINDING: GLenum;
-    readonly SAMPLER_CUBE_SHADOW: GLenum;
-    readonly SEPARATE_ATTRIBS: GLenum;
-    readonly SIGNALED: GLenum;
-    readonly SIGNED_NORMALIZED: GLenum;
-    readonly SRGB: GLenum;
-    readonly SRGB8: GLenum;
-    readonly SRGB8_ALPHA8: GLenum;
-    readonly STATIC_COPY: GLenum;
-    readonly STATIC_READ: GLenum;
-    readonly STENCIL: GLenum;
-    readonly STREAM_COPY: GLenum;
-    readonly STREAM_READ: GLenum;
-    readonly SYNC_CONDITION: GLenum;
-    readonly SYNC_FENCE: GLenum;
-    readonly SYNC_FLAGS: GLenum;
-    readonly SYNC_FLUSH_COMMANDS_BIT: GLenum;
-    readonly SYNC_GPU_COMMANDS_COMPLETE: GLenum;
-    readonly SYNC_STATUS: GLenum;
-    readonly TEXTURE_2D_ARRAY: GLenum;
-    readonly TEXTURE_3D: GLenum;
-    readonly TEXTURE_BASE_LEVEL: GLenum;
-    readonly TEXTURE_BINDING_2D_ARRAY: GLenum;
-    readonly TEXTURE_BINDING_3D: GLenum;
-    readonly TEXTURE_COMPARE_FUNC: GLenum;
-    readonly TEXTURE_COMPARE_MODE: GLenum;
-    readonly TEXTURE_IMMUTABLE_FORMAT: GLenum;
-    readonly TEXTURE_IMMUTABLE_LEVELS: GLenum;
-    readonly TEXTURE_MAX_LEVEL: GLenum;
-    readonly TEXTURE_MAX_LOD: GLenum;
-    readonly TEXTURE_MIN_LOD: GLenum;
-    readonly TEXTURE_WRAP_R: GLenum;
-    readonly TIMEOUT_EXPIRED: GLenum;
-    readonly TIMEOUT_IGNORED: GLint64;
-    readonly TRANSFORM_FEEDBACK: GLenum;
-    readonly TRANSFORM_FEEDBACK_ACTIVE: GLenum;
-    readonly TRANSFORM_FEEDBACK_BINDING: GLenum;
-    readonly TRANSFORM_FEEDBACK_BUFFER: GLenum;
-    readonly TRANSFORM_FEEDBACK_BUFFER_BINDING: GLenum;
-    readonly TRANSFORM_FEEDBACK_BUFFER_MODE: GLenum;
-    readonly TRANSFORM_FEEDBACK_BUFFER_SIZE: GLenum;
-    readonly TRANSFORM_FEEDBACK_BUFFER_START: GLenum;
-    readonly TRANSFORM_FEEDBACK_PAUSED: GLenum;
-    readonly TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN: GLenum;
-    readonly TRANSFORM_FEEDBACK_VARYINGS: GLenum;
-    readonly UNIFORM_ARRAY_STRIDE: GLenum;
-    readonly UNIFORM_BLOCK_ACTIVE_UNIFORMS: GLenum;
-    readonly UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES: GLenum;
-    readonly UNIFORM_BLOCK_BINDING: GLenum;
-    readonly UNIFORM_BLOCK_DATA_SIZE: GLenum;
-    readonly UNIFORM_BLOCK_INDEX: GLenum;
-    readonly UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER: GLenum;
-    readonly UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER: GLenum;
-    readonly UNIFORM_BUFFER: GLenum;
-    readonly UNIFORM_BUFFER_BINDING: GLenum;
-    readonly UNIFORM_BUFFER_OFFSET_ALIGNMENT: GLenum;
-    readonly UNIFORM_BUFFER_SIZE: GLenum;
-    readonly UNIFORM_BUFFER_START: GLenum;
-    readonly UNIFORM_IS_ROW_MAJOR: GLenum;
-    readonly UNIFORM_MATRIX_STRIDE: GLenum;
-    readonly UNIFORM_OFFSET: GLenum;
-    readonly UNIFORM_SIZE: GLenum;
-    readonly UNIFORM_TYPE: GLenum;
-    readonly UNPACK_IMAGE_HEIGHT: GLenum;
-    readonly UNPACK_ROW_LENGTH: GLenum;
-    readonly UNPACK_SKIP_IMAGES: GLenum;
-    readonly UNPACK_SKIP_PIXELS: GLenum;
-    readonly UNPACK_SKIP_ROWS: GLenum;
-    readonly UNSIGNALED: GLenum;
-    readonly UNSIGNED_INT_10F_11F_11F_REV: GLenum;
-    readonly UNSIGNED_INT_24_8: GLenum;
-    readonly UNSIGNED_INT_2_10_10_10_REV: GLenum;
-    readonly UNSIGNED_INT_5_9_9_9_REV: GLenum;
-    readonly UNSIGNED_INT_SAMPLER_2D: GLenum;
-    readonly UNSIGNED_INT_SAMPLER_2D_ARRAY: GLenum;
-    readonly UNSIGNED_INT_SAMPLER_3D: GLenum;
-    readonly UNSIGNED_INT_SAMPLER_CUBE: GLenum;
-    readonly UNSIGNED_INT_VEC2: GLenum;
-    readonly UNSIGNED_INT_VEC3: GLenum;
-    readonly UNSIGNED_INT_VEC4: GLenum;
-    readonly UNSIGNED_NORMALIZED: GLenum;
-    readonly VERTEX_ARRAY_BINDING: GLenum;
-    readonly VERTEX_ATTRIB_ARRAY_DIVISOR: GLenum;
-    readonly VERTEX_ATTRIB_ARRAY_INTEGER: GLenum;
-    readonly WAIT_FAILED: GLenum;
 };
 
 interface WebGL2RenderingContextBase {
@@ -4720,7 +4721,6 @@
 };
 
 interface WebGLRenderingContextBase {
-    readonly canvas: OffscreenCanvas;
     readonly drawingBufferHeight: GLsizei;
     readonly drawingBufferWidth: GLsizei;
     activeTexture(texture: GLenum): void;
@@ -4781,13 +4781,21 @@
     getContextAttributes(): WebGLContextAttributes | null;
     getError(): GLenum;
     getExtension(extensionName: "EXT_blend_minmax"): EXT_blend_minmax | null;
+    getExtension(extensionName: "EXT_color_buffer_float"): EXT_color_buffer_float | null;
+    getExtension(extensionName: "EXT_color_buffer_half_float"): EXT_color_buffer_half_float | null;
+    getExtension(extensionName: "EXT_float_blend"): EXT_float_blend | null;
     getExtension(extensionName: "EXT_texture_filter_anisotropic"): EXT_texture_filter_anisotropic | null;
     getExtension(extensionName: "EXT_frag_depth"): EXT_frag_depth | null;
     getExtension(extensionName: "EXT_shader_texture_lod"): EXT_shader_texture_lod | null;
     getExtension(extensionName: "EXT_sRGB"): EXT_sRGB | null;
+    getExtension(extensionName: "KHR_parallel_shader_compile"): KHR_parallel_shader_compile | null;
     getExtension(extensionName: "OES_vertex_array_object"): OES_vertex_array_object | null;
+    getExtension(extensionName: "OVR_multiview2"): OVR_multiview2 | null;
     getExtension(extensionName: "WEBGL_color_buffer_float"): WEBGL_color_buffer_float | null;
     getExtension(extensionName: "WEBGL_compressed_texture_astc"): WEBGL_compressed_texture_astc | null;
+    getExtension(extensionName: "WEBGL_compressed_texture_etc"): WEBGL_compressed_texture_etc | null;
+    getExtension(extensionName: "WEBGL_compressed_texture_etc1"): WEBGL_compressed_texture_etc1 | null;
+    getExtension(extensionName: "WEBGL_compressed_texture_pvrtc"): WEBGL_compressed_texture_pvrtc | null;
     getExtension(extensionName: "WEBGL_compressed_texture_s3tc_srgb"): WEBGL_compressed_texture_s3tc_srgb | null;
     getExtension(extensionName: "WEBGL_debug_shaders"): WEBGL_debug_shaders | null;
     getExtension(extensionName: "WEBGL_draw_buffers"): WEBGL_draw_buffers | null;
@@ -4802,7 +4810,7 @@
     getExtension(extensionName: "OES_standard_derivatives"): OES_standard_derivatives | null;
     getExtension(extensionName: "OES_element_index_uint"): OES_element_index_uint | null;
     getExtension(extensionName: "ANGLE_instanced_arrays"): ANGLE_instanced_arrays | null;
-    getExtension(extensionName: string): any;
+    getExtension(name: string): any;
     getFramebufferAttachmentParameter(target: GLenum, attachment: GLenum, pname: GLenum): any;
     getParameter(pname: GLenum): any;
     getProgramInfoLog(program: WebGLProgram): string | null;
@@ -5320,7 +5328,7 @@
 
 declare var WebSocket: {
     prototype: WebSocket;
-    new(url: string, protocols?: string | string[]): WebSocket;
+    new(url: string | URL, protocols?: string | string[]): WebSocket;
     readonly CLOSED: number;
     readonly CLOSING: number;
     readonly CONNECTING: number;
@@ -5332,7 +5340,7 @@
     readonly focused: boolean;
     readonly visibilityState: VisibilityState;
     focus(): Promise<WindowClient>;
-    navigate(url: string): Promise<WindowClient | null>;
+    navigate(url: string | URL): Promise<WindowClient | null>;
 }
 
 declare var WindowClient: {
@@ -5342,6 +5350,7 @@
 
 interface WindowOrWorkerGlobalScope {
     readonly caches: CacheStorage;
+    readonly crossOriginIsolated: boolean;
     readonly crypto: Crypto;
     readonly indexedDB: IDBFactory;
     readonly isSecureContext: boolean;
@@ -5385,7 +5394,7 @@
 
 declare var Worker: {
     prototype: Worker;
-    new(stringUrl: string | URL, options?: WorkerOptions): Worker;
+    new(scriptURL: string | URL, options?: WorkerOptions): Worker;
 };
 
 interface WorkerGlobalScopeEventMap {
@@ -5398,11 +5407,14 @@
 }
 
 /** This Web Workers API interface is an interface representing the scope of any worker. Workers have no browsing context; this scope contains the information usually conveyed by Window objects — in this case event handlers, the console or the associated WorkerNavigator object. Each WorkerGlobalScope has its own event loop. */
-interface WorkerGlobalScope extends EventTarget, WindowOrWorkerGlobalScope {
+interface WorkerGlobalScope extends EventTarget, FontFaceSource, WindowOrWorkerGlobalScope {
     /**
      * Returns workerGlobal's WorkerLocation object.
      */
     readonly location: WorkerLocation;
+    /**
+     * Returns workerGlobal's WorkerNavigator object.
+     */
     readonly navigator: WorkerNavigator;
     onerror: ((this: WorkerGlobalScope, ev: ErrorEvent) => any) | null;
     onlanguagechange: ((this: WorkerGlobalScope, ev: Event) => any) | null;
@@ -5417,7 +5429,7 @@
     /**
      * Fetches each URL in urls, executes them one-by-one in the order they are passed, and then returns (or throws if something went amiss).
      */
-    importScripts(...urls: string[]): void;
+    importScripts(...urls: (string | URL)[]): void;
     addEventListener<K extends keyof WorkerGlobalScopeEventMap>(type: K, listener: (this: WorkerGlobalScope, ev: WorkerGlobalScopeEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
     addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
     removeEventListener<K extends keyof WorkerGlobalScopeEventMap>(type: K, listener: (this: WorkerGlobalScope, ev: WorkerGlobalScopeEventMap[K]) => any, options?: boolean | EventListenerOptions): void;
@@ -5449,8 +5461,8 @@
 };
 
 /** A subset of the Navigator interface allowed to be accessed from a Worker. Such an object is initialized for each worker and is available via the WorkerGlobalScope.navigator property obtained by calling window.self.navigator. */
-interface WorkerNavigator extends NavigatorConcurrentHardware, NavigatorID, NavigatorLanguage, NavigatorOnLine, NavigatorStorage {
-    readonly permissions: Permissions;
+interface WorkerNavigator extends NavigatorConcurrentHardware, NavigatorID, NavigatorLanguage, NavigatorNetworkInformation, NavigatorOnLine, NavigatorStorage {
+    readonly mediaCapabilities: MediaCapabilities;
 }
 
 declare var WorkerNavigator: {
@@ -5462,6 +5474,7 @@
 interface WritableStream<W = any> {
     readonly locked: boolean;
     abort(reason?: any): Promise<void>;
+    close(): Promise<void>;
     getWriter(): WritableStreamDefaultWriter<W>;
 }
 
@@ -5488,7 +5501,7 @@
     abort(reason?: any): Promise<void>;
     close(): Promise<void>;
     releaseLock(): void;
-    write(chunk: W): Promise<void>;
+    write(chunk?: W): Promise<void>;
 }
 
 declare var WritableStreamDefaultWriter: {
@@ -5508,11 +5521,11 @@
      */
     readonly readyState: number;
     /**
-     * Returns the response's body.
+     * Returns the response body.
      */
     readonly response: any;
     /**
-     * Returns the text response.
+     * Returns response as text.
      *
      * Throws an "InvalidStateError" DOMException if responseType is not the empty string or "text".
      */
@@ -5533,7 +5546,7 @@
     readonly status: number;
     readonly statusText: string;
     /**
-     * Can be set to a time in milliseconds. When set to a non-zero value will cause fetching to terminate after the given time has passed. When the time has passed, the request has not yet completed, and the synchronous flag is unset, a timeout event will then be dispatched, or a "TimeoutError" DOMException will be thrown otherwise (for the send() method).
+     * Can be set to a time in milliseconds. When set to a non-zero value will cause fetching to terminate after the given time has passed. When the time has passed, the request has not yet completed, and this's synchronous flag is unset, a timeout event will then be dispatched, or a "TimeoutError" DOMException will be thrown otherwise (for the send() method).
      *
      * When set: throws an "InvalidAccessError" DOMException if the synchronous flag is set and current global object is a Window object.
      */
@@ -5557,16 +5570,16 @@
     /**
      * Sets the request method, request URL, and synchronous flag.
      *
-     * Throws a "SyntaxError" DOMException if either method is not a valid HTTP method or url cannot be parsed.
+     * Throws a "SyntaxError" DOMException if either method is not a valid method or url cannot be parsed.
      *
      * Throws a "SecurityError" DOMException if method is a case-insensitive match for `CONNECT`, `TRACE`, or `TRACK`.
      *
      * Throws an "InvalidAccessError" DOMException if async is false, current global object is a Window object, and the timeout attribute is not zero or the responseType attribute is not the empty string.
      */
-    open(method: string, url: string): void;
-    open(method: string, url: string, async: boolean, username?: string | null, password?: string | null): void;
+    open(method: string, url: string | URL): void;
+    open(method: string, url: string | URL, async: boolean, username?: string | null, password?: string | null): void;
     /**
-     * Acts as if the `Content-Type` header value for response is mime. (It does not actually change the header though.)
+     * Acts as if the `Content-Type` header value for a response is mime. (It does not change the header.)
      *
      * Throws an "InvalidStateError" DOMException if state is loading or done.
      */
@@ -5576,7 +5589,7 @@
      *
      * Throws an "InvalidStateError" DOMException if either state is not opened or the send() flag is set.
      */
-    send(body?: BodyInit | null): void;
+    send(body?: XMLHttpRequestBodyInit | null): void;
     /**
      * Combines a header in author request headers.
      *
@@ -5647,10 +5660,7 @@
     new(): XMLHttpRequestUpload;
 };
 
-declare type EventListenerOrEventListenerObject = EventListener | EventListenerObject;
-
 interface Console {
-    memory: any;
     assert(condition?: boolean, ...data: any[]): void;
     clear(): void;
     count(label?: string): void;
@@ -5659,7 +5669,6 @@
     dir(item?: any, options?: any): void;
     dirxml(...data: any[]): void;
     error(...data: any[]): void;
-    exception(message?: string, ...optionalParams: any[]): void;
     group(...data: any[]): void;
     groupCollapsed(...data: any[]): void;
     groupEnd(): void;
@@ -5677,6 +5686,14 @@
 declare var console: Console;
 
 declare namespace WebAssembly {
+    interface CompileError extends Error {
+    }
+
+    var CompileError: {
+        prototype: CompileError;
+        new(): CompileError;
+    };
+
     interface Global {
         value: any;
         valueOf(): any;
@@ -5696,6 +5713,14 @@
         new(module: Module, importObject?: Imports): Instance;
     };
 
+    interface LinkError extends Error {
+    }
+
+    var LinkError: {
+        prototype: LinkError;
+        new(): LinkError;
+    };
+
     interface Memory {
         readonly buffer: ArrayBuffer;
         grow(delta: number): number;
@@ -5717,16 +5742,24 @@
         imports(moduleObject: Module): ModuleImportDescriptor[];
     };
 
+    interface RuntimeError extends Error {
+    }
+
+    var RuntimeError: {
+        prototype: RuntimeError;
+        new(): RuntimeError;
+    };
+
     interface Table {
         readonly length: number;
-        get(index: number): Function | null;
-        grow(delta: number): number;
-        set(index: number, value: Function | null): void;
+        get(index: number): any;
+        grow(delta: number, value?: any): number;
+        set(index: number, value?: any): void;
     }
 
     var Table: {
         prototype: Table;
-        new(descriptor: TableDescriptor): Table;
+        new(descriptor: TableDescriptor, value?: any): Table;
     };
 
     interface GlobalDescriptor {
@@ -5763,23 +5796,23 @@
     }
 
     type ImportExportKind = "function" | "global" | "memory" | "table";
-    type TableKind = "anyfunc";
-    type ValueType = "f32" | "f64" | "i32" | "i64";
+    type TableKind = "anyfunc" | "externref";
+    type ValueType = "anyfunc" | "externref" | "f32" | "f64" | "i32" | "i64";
     type ExportValue = Function | Global | Memory | Table;
     type Exports = Record<string, ExportValue>;
     type ImportValue = ExportValue | number;
-    type ModuleImports = Record<string, ImportValue>;
     type Imports = Record<string, ModuleImports>;
+    type ModuleImports = Record<string, ImportValue>;
     function compile(bytes: BufferSource): Promise<Module>;
-    function compileStreaming(source: Response | Promise<Response>): Promise<Module>;
+    function compileStreaming(source: Response | PromiseLike<Response>): Promise<Module>;
     function instantiate(bytes: BufferSource, importObject?: Imports): Promise<WebAssemblyInstantiatedSource>;
     function instantiate(moduleObject: Module, importObject?: Imports): Promise<Instance>;
-    function instantiateStreaming(response: Response | PromiseLike<Response>, importObject?: Imports): Promise<WebAssemblyInstantiatedSource>;
+    function instantiateStreaming(source: Response | PromiseLike<Response>, importObject?: Imports): Promise<WebAssemblyInstantiatedSource>;
     function validate(bytes: BufferSource): boolean;
 }
 
 interface FrameRequestCallback {
-    (time: number): void;
+    (time: DOMHighResTimeStamp): void;
 }
 
 interface OnErrorEventHandlerNonNull {
@@ -5791,7 +5824,7 @@
 }
 
 interface QueuingStrategySize<T = any> {
-    (chunk: T): number;
+    (chunk?: T): number;
 }
 
 interface TransformerFlushCallback<O> {
@@ -5799,7 +5832,7 @@
 }
 
 interface TransformerStartCallback<O> {
-    (controller: TransformStreamDefaultController<O>): void | PromiseLike<void>;
+    (controller: TransformStreamDefaultController<O>): any;
 }
 
 interface TransformerTransformCallback<I, O> {
@@ -5807,7 +5840,7 @@
 }
 
 interface UnderlyingSinkAbortCallback {
-    (reason: any): void | PromiseLike<void>;
+    (reason?: any): void | PromiseLike<void>;
 }
 
 interface UnderlyingSinkCloseCallback {
@@ -5815,7 +5848,7 @@
 }
 
 interface UnderlyingSinkStartCallback {
-    (controller: WritableStreamDefaultController): void | PromiseLike<void>;
+    (controller: WritableStreamDefaultController): any;
 }
 
 interface UnderlyingSinkWriteCallback<W> {
@@ -5823,7 +5856,7 @@
 }
 
 interface UnderlyingSourceCancelCallback {
-    (reason: any): void | PromiseLike<void>;
+    (reason?: any): void | PromiseLike<void>;
 }
 
 interface UnderlyingSourcePullCallback<R> {
@@ -5831,7 +5864,7 @@
 }
 
 interface UnderlyingSourceStartCallback<R> {
-    (controller: ReadableStreamController<R>): void | PromiseLike<void>;
+    (controller: ReadableStreamController<R>): any;
 }
 
 interface VoidFunction {
@@ -5861,6 +5894,9 @@
  * Returns workerGlobal's WorkerLocation object.
  */
 declare var location: WorkerLocation;
+/**
+ * Returns workerGlobal's WorkerNavigator object.
+ */
 declare var navigator: WorkerNavigator;
 declare var onerror: ((this: DedicatedWorkerGlobalScope, ev: ErrorEvent) => any) | null;
 declare var onlanguagechange: ((this: DedicatedWorkerGlobalScope, ev: Event) => any) | null;
@@ -5875,12 +5911,14 @@
 /**
  * Fetches each URL in urls, executes them one-by-one in the order they are passed, and then returns (or throws if something went amiss).
  */
-declare function importScripts(...urls: string[]): void;
+declare function importScripts(...urls: (string | URL)[]): void;
 /**
  * Dispatches a synthetic event event to target and returns true if either event's cancelable attribute value is false or its preventDefault() method was not invoked, and false otherwise.
  */
 declare function dispatchEvent(event: Event): boolean;
+declare var fonts: FontFaceSet;
 declare var caches: CacheStorage;
+declare var crossOriginIsolated: boolean;
 declare var crypto: Crypto;
 declare var indexedDB: IDBFactory;
 declare var isSecureContext: boolean;
@@ -5902,85 +5940,89 @@
 declare function addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
 declare function removeEventListener<K extends keyof DedicatedWorkerGlobalScopeEventMap>(type: K, listener: (this: DedicatedWorkerGlobalScope, ev: DedicatedWorkerGlobalScopeEventMap[K]) => any, options?: boolean | EventListenerOptions): void;
 declare function removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;
-type HeadersInit = Headers | string[][] | Record<string, string>;
-type BodyInit = Blob | BufferSource | FormData | URLSearchParams | ReadableStream<Uint8Array> | string;
-type RequestInfo = Request | string;
-type BlobPart = BufferSource | Blob | string;
-type DOMHighResTimeStamp = number;
-type CanvasImageSource = ImageBitmap | OffscreenCanvas;
-type OffscreenRenderingContext = OffscreenCanvasRenderingContext2D | ImageBitmapRenderingContext | WebGLRenderingContext | WebGL2RenderingContext;
-type MessageEventSource = MessagePort | ServiceWorker;
-type ImageBitmapSource = CanvasImageSource | Blob | ImageData;
-type OnErrorEventHandler = OnErrorEventHandlerNonNull | null;
-type TimerHandler = string | Function;
-type PerformanceEntryList = PerformanceEntry[];
-type PushMessageDataInit = BufferSource | string;
-type ReadableStreamReader<T> = ReadableStreamDefaultReader<T>;
-type ReadableStreamController<T> = ReadableStreamDefaultController<T>;
-type VibratePattern = number | number[];
-type AlgorithmIdentifier = string | Algorithm;
-type HashAlgorithmIdentifier = AlgorithmIdentifier;
+type AlgorithmIdentifier = Algorithm | string;
 type BigInteger = Uint8Array;
-type NamedCurve = string;
-type GLenum = number;
-type GLboolean = boolean;
+type BinaryData = ArrayBuffer | ArrayBufferView;
+type BlobPart = BufferSource | Blob | string;
+type BodyInit = ReadableStream | XMLHttpRequestBodyInit;
+type BufferSource = ArrayBufferView | ArrayBuffer;
+type CanvasImageSource = ImageBitmap | OffscreenCanvas;
+type DOMHighResTimeStamp = number;
+type DOMTimeStamp = number;
+type EventListenerOrEventListenerObject = EventListener | EventListenerObject;
+type Float32List = Float32Array | GLfloat[];
+type FormDataEntryValue = File | string;
 type GLbitfield = number;
+type GLboolean = boolean;
+type GLclampf = number;
+type GLenum = number;
+type GLfloat = number;
 type GLint = number;
-type GLsizei = number;
+type GLint64 = number;
 type GLintptr = number;
+type GLsizei = number;
 type GLsizeiptr = number;
 type GLuint = number;
-type GLfloat = number;
-type GLclampf = number;
-type TexImageSource = ImageBitmap | ImageData | OffscreenCanvas;
-type Float32List = Float32Array | GLfloat[];
-type Int32List = Int32Array | GLint[];
-type GLint64 = number;
 type GLuint64 = number;
-type Uint32List = Uint32Array | GLuint[];
-type BufferSource = ArrayBufferView | ArrayBuffer;
-type DOMTimeStamp = number;
-type FormDataEntryValue = File | string;
-type IDBValidKey = number | string | Date | BufferSource | IDBArrayKey;
-type Transferable = ArrayBuffer | MessagePort | ImageBitmap | OffscreenCanvas;
+type HashAlgorithmIdentifier = AlgorithmIdentifier;
+type HeadersInit = string[][] | Record<string, string> | Headers;
+type IDBValidKey = number | string | Date | BufferSource | IDBValidKey[];
+type ImageBitmapSource = CanvasImageSource | Blob | ImageData;
+type Int32List = Int32Array | GLint[];
+type MessageEventSource = MessagePort | ServiceWorker;
+type NamedCurve = string;
+type OnErrorEventHandler = OnErrorEventHandlerNonNull | null;
+type PerformanceEntryList = PerformanceEntry[];
+type PushMessageDataInit = BufferSource | string;
+type ReadableStreamController<T> = ReadableStreamDefaultController<T>;
 type ReadableStreamDefaultReadResult<T> = ReadableStreamDefaultReadValueResult<T> | ReadableStreamDefaultReadDoneResult;
+type ReadableStreamReader<T> = ReadableStreamDefaultReader<T>;
+type RequestInfo = Request | string;
+type TexImageSource = ImageBitmap | ImageData | OffscreenCanvas;
+type TimerHandler = string | Function;
+type Transferable = ArrayBuffer | MessagePort | ImageBitmap;
+type Uint32List = Uint32Array | GLuint[];
+type VibratePattern = number | number[];
+type XMLHttpRequestBodyInit = Blob | BufferSource | FormData | URLSearchParams | string;
 type BinaryType = "arraybuffer" | "blob";
-type CanvasDirection = "inherit" | "ltr" | "rtl";
-type CanvasFillRule = "evenodd" | "nonzero";
-type CanvasLineCap = "butt" | "round" | "square";
-type CanvasLineJoin = "bevel" | "miter" | "round";
-type CanvasTextAlign = "center" | "end" | "left" | "right" | "start";
-type CanvasTextBaseline = "alphabetic" | "bottom" | "hanging" | "ideographic" | "middle" | "top";
 type ClientTypes = "all" | "sharedworker" | "window" | "worker";
+type ColorGamut = "p3" | "rec2020" | "srgb";
 type ColorSpaceConversion = "default" | "none";
+type ConnectionType = "bluetooth" | "cellular" | "ethernet" | "mixed" | "none" | "other" | "unknown" | "wifi";
 type EndingType = "native" | "transparent";
+type FontFaceLoadStatus = "error" | "loaded" | "loading" | "unloaded";
+type FontFaceSetLoadStatus = "loaded" | "loading";
 type FrameType = "auxiliary" | "nested" | "none" | "top-level";
+type HdrMetadataType = "smpteSt2086" | "smpteSt2094-10" | "smpteSt2094-40";
 type IDBCursorDirection = "next" | "nextunique" | "prev" | "prevunique";
 type IDBRequestReadyState = "done" | "pending";
 type IDBTransactionMode = "readonly" | "readwrite" | "versionchange";
 type ImageOrientation = "flipY" | "none";
-type ImageSmoothingQuality = "high" | "low" | "medium";
 type KeyFormat = "jwk" | "pkcs8" | "raw" | "spki";
 type KeyType = "private" | "public" | "secret";
 type KeyUsage = "decrypt" | "deriveBits" | "deriveKey" | "encrypt" | "sign" | "unwrapKey" | "verify" | "wrapKey";
+type MediaDecodingType = "file" | "media-source" | "webrtc";
+type MediaEncodingType = "record" | "webrtc";
 type NotificationDirection = "auto" | "ltr" | "rtl";
 type NotificationPermission = "default" | "denied" | "granted";
-type OffscreenRenderingContextId = "2d" | "bitmaprenderer" | "webgl" | "webgl2";
-type PermissionName = "accelerometer" | "ambient-light-sensor" | "background-fetch" | "background-sync" | "bluetooth" | "camera" | "clipboard-read" | "clipboard-write" | "device-info" | "display-capture" | "geolocation" | "gyroscope" | "magnetometer" | "microphone" | "midi" | "nfc" | "notifications" | "persistent-storage" | "push" | "speaker";
+type PermissionName = "gamepad" | "geolocation" | "notifications" | "persistent-storage" | "push" | "screen-wake-lock";
 type PermissionState = "denied" | "granted" | "prompt";
+type PredefinedColorSpace = "display-p3" | "srgb";
 type PremultiplyAlpha = "default" | "none" | "premultiply";
 type PushEncryptionKeyName = "auth" | "p256dh";
 type PushPermissionState = "denied" | "granted" | "prompt";
 type ReferrerPolicy = "" | "no-referrer" | "no-referrer-when-downgrade" | "origin" | "origin-when-cross-origin" | "same-origin" | "strict-origin" | "strict-origin-when-cross-origin" | "unsafe-url";
 type RequestCache = "default" | "force-cache" | "no-cache" | "no-store" | "only-if-cached" | "reload";
 type RequestCredentials = "include" | "omit" | "same-origin";
-type RequestDestination = "" | "audio" | "audioworklet" | "document" | "embed" | "font" | "image" | "manifest" | "object" | "paintworklet" | "report" | "script" | "sharedworker" | "style" | "track" | "video" | "worker" | "xslt";
+type RequestDestination = "" | "audio" | "audioworklet" | "document" | "embed" | "font" | "frame" | "iframe" | "image" | "manifest" | "object" | "paintworklet" | "report" | "script" | "sharedworker" | "style" | "track" | "video" | "worker" | "xslt";
 type RequestMode = "cors" | "navigate" | "no-cors" | "same-origin";
 type RequestRedirect = "error" | "follow" | "manual";
 type ResizeQuality = "high" | "low" | "medium" | "pixelated";
 type ResponseType = "basic" | "cors" | "default" | "error" | "opaque" | "opaqueredirect";
+type SecurityPolicyViolationEventDisposition = "enforce" | "report";
 type ServiceWorkerState = "activated" | "activating" | "installed" | "installing" | "parsed" | "redundant";
 type ServiceWorkerUpdateViaCache = "all" | "imports" | "none";
+type TransferFunction = "hlg" | "pq" | "srgb";
 type VisibilityState = "hidden" | "visible";
 type WebGLPowerPreference = "default" | "high-performance" | "low-power";
 type WorkerType = "classic" | "module";
diff --git a/node_modules/typescript/lib/lib.webworker.iterable.d.ts b/node_modules/typescript/lib/lib.webworker.iterable.d.ts
index 2f3bdc9..6b45f53 100644
--- a/node_modules/typescript/lib/lib.webworker.iterable.d.ts
+++ b/node_modules/typescript/lib/lib.webworker.iterable.d.ts
@@ -26,10 +26,6 @@
     addAll(requests: Iterable<RequestInfo>): Promise<void>;
 }
 
-interface CanvasPathDrawingStyles {
-    setLineDash(segments: Iterable<number>): void;
-}
-
 interface DOMStringList {
     [Symbol.iterator](): IterableIterator<string>;
 }
@@ -38,6 +34,9 @@
     [Symbol.iterator](): IterableIterator<File>;
 }
 
+interface FontFaceSet extends Set<FontFace> {
+}
+
 interface FormData {
     [Symbol.iterator](): IterableIterator<[string, FormDataEntryValue]>;
     /**
@@ -86,6 +85,28 @@
     createIndex(name: string, keyPath: string | Iterable<string>, options?: IDBIndexParameters): IDBIndex;
 }
 
+interface MessageEvent<T = any> {
+    /** @deprecated */
+    initMessageEvent(type: string, bubbles?: boolean, cancelable?: boolean, data?: any, origin?: string, lastEventId?: string, source?: MessageEventSource | null, ports?: Iterable<MessagePort>): void;
+}
+
+interface ReadableStream<R = any> {
+    [Symbol.iterator](): IterableIterator<any>;
+    entries(): IterableIterator<[number, any]>;
+    keys(): IterableIterator<number>;
+    values(): IterableIterator<any>;
+}
+
+interface SubtleCrypto {
+    deriveKey(algorithm: AlgorithmIdentifier | EcdhKeyDeriveParams | HkdfParams | Pbkdf2Params, baseKey: CryptoKey, derivedKeyType: AlgorithmIdentifier | AesDerivedKeyParams | HmacImportParams | HkdfParams | Pbkdf2Params, extractable: boolean, keyUsages: Iterable<KeyUsage>): Promise<CryptoKey>;
+    generateKey(algorithm: RsaHashedKeyGenParams | EcKeyGenParams, extractable: boolean, keyUsages: KeyUsage[]): Promise<CryptoKeyPair>;
+    generateKey(algorithm: AesKeyGenParams | HmacKeyGenParams | Pbkdf2Params, extractable: boolean, keyUsages: KeyUsage[]): Promise<CryptoKey>;
+    generateKey(algorithm: AlgorithmIdentifier, extractable: boolean, keyUsages: Iterable<KeyUsage>): Promise<CryptoKeyPair | CryptoKey>;
+    importKey(format: "jwk", keyData: JsonWebKey, algorithm: AlgorithmIdentifier | RsaHashedImportParams | EcKeyImportParams | HmacImportParams | AesKeyAlgorithm, extractable: boolean, keyUsages: KeyUsage[]): Promise<CryptoKey>;
+    importKey(format: Exclude<KeyFormat, "jwk">, keyData: BufferSource, algorithm: AlgorithmIdentifier | RsaHashedImportParams | EcKeyImportParams | HmacImportParams | AesKeyAlgorithm, extractable: boolean, keyUsages: Iterable<KeyUsage>): Promise<CryptoKey>;
+    unwrapKey(format: KeyFormat, wrappedKey: BufferSource, unwrappingKey: CryptoKey, unwrapAlgorithm: AlgorithmIdentifier | RsaOaepParams | AesCtrParams | AesCbcParams | AesGcmParams, unwrappedKeyAlgorithm: AlgorithmIdentifier | RsaHashedImportParams | EcKeyImportParams | HmacImportParams | AesKeyAlgorithm, extractable: boolean, keyUsages: Iterable<KeyUsage>): Promise<CryptoKey>;
+}
+
 interface URLSearchParams {
     [Symbol.iterator](): IterableIterator<[string, string]>;
     /**
diff --git a/node_modules/typescript/lib/pl/diagnosticMessages.generated.json b/node_modules/typescript/lib/pl/diagnosticMessages.generated.json
index ee8ffaa..cbf0c15 100644
--- a/node_modules/typescript/lib/pl/diagnosticMessages.generated.json
+++ b/node_modules/typescript/lib/pl/diagnosticMessages.generated.json
@@ -1,4 +1,5 @@
 {
+  "ALL_COMPILER_OPTIONS_6917": "WSZYSTKIE OPCJE KOMPILATORA",
   "A_0_modifier_cannot_be_used_with_an_import_declaration_1079": "Modyfikatora „{0}” nie można używać z deklaracją importu.",
   "A_0_modifier_cannot_be_used_with_an_interface_declaration_1045": "Modyfikatora „{0}” nie można używać z deklaracją interfejsu.",
   "A_0_parameter_must_be_the_first_parameter_2680": "Parametr „{0}” musi być pierwszym parametrem.",
@@ -15,7 +16,7 @@
   "A_class_member_cannot_have_the_0_keyword_1248": "Składowa klasy nie może zawierać słowa kluczowego „{0}”.",
   "A_comma_expression_is_not_allowed_in_a_computed_property_name_1171": "Wyrażenie przecinkowe nie jest dozwolone w obliczonej nazwie właściwości.",
   "A_computed_property_name_cannot_reference_a_type_parameter_from_its_containing_type_2467": "Obliczona nazwa właściwości nie może odwoływać się do parametru typu z zawierającego go typu.",
-  "A_computed_property_name_in_a_class_property_declaration_must_refer_to_an_expression_whose_type_is_a_1166": "Nazwa właściwości obliczanej w deklaracji właściwości klasy musi odwoływać się do wyrażenia, którego typem jest literał lub „unique symbol”.",
+  "A_computed_property_name_in_a_class_property_declaration_must_have_a_simple_literal_type_or_a_unique_1166": "Nazwa właściwości obliczanej w deklaracji właściwości klasy musi mieć typ prostego literału lub typ „unikatowy symbol”.",
   "A_computed_property_name_in_a_method_overload_must_refer_to_an_expression_whose_type_is_a_literal_ty_1168": "Nazwa właściwości obliczanej w przeciążeniu metody musi odwoływać się do wyrażenia, którego typem jest literał lub „unique symbol”.",
   "A_computed_property_name_in_a_type_literal_must_refer_to_an_expression_whose_type_is_a_literal_type__1170": "Nazwa właściwości obliczanej w typie literału musi odwoływać się do wyrażenia, którego typem jest literał lub „unique symbol”.",
   "A_computed_property_name_in_an_ambient_context_must_refer_to_an_expression_whose_type_is_a_literal_t_1165": "Nazwa właściwości obliczanej w otaczającym kontekście musi odwoływać się do wyrażenia, którego typem jest literał lub „unique symbol”.",
@@ -33,24 +34,25 @@
   "A_decorator_can_only_decorate_a_method_implementation_not_an_overload_1249": "Dekorator może dekorować jedynie implementację metody, a nie przeciążenie.",
   "A_default_clause_cannot_appear_more_than_once_in_a_switch_statement_1113": "Klauzula „default” nie może występować więcej niż raz w instrukcji „switch”.",
   "A_default_export_can_only_be_used_in_an_ECMAScript_style_module_1319": "Eksport domyślny może być używany tylko w module w stylu języka ECMAScript.",
+  "A_default_export_must_be_at_the_top_level_of_a_file_or_module_declaration_1258": "Eksport domyślny musi znajdować się na najwyższym poziomie deklaracji pliku lub modułu.",
   "A_definite_assignment_assertion_is_not_permitted_in_this_context_1255": "Asercja określonego przypisania „!” nie jest dozwolona w tym kontekście.",
   "A_destructuring_declaration_must_have_an_initializer_1182": "Deklaracja usuwająca strukturę musi mieć inicjator.",
-  "A_dynamic_import_call_in_ES5_SlashES3_requires_the_Promise_constructor_Make_sure_you_have_a_declarat_2712": "Wywołanie dynamicznego importowania w wersji ES5/ES3 wymaga konstruktora „Promise”. Upewnij się, że masz deklarację dla konstruktora „Promise”, lub uwzględnij wartość „ES2015” w opcji „--lib”.",
-  "A_dynamic_import_call_returns_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_include_ES20_2711": "Wywołanie dynamicznego importowania zwraca element „Promise”. Upewnij się, że masz deklarację elementu „Promise” lub uwzględnij wartość „ES2015” w opcji „--lib”.",
+  "A_dynamic_import_call_in_ES5_SlashES3_requires_the_Promise_constructor_Make_sure_you_have_a_declarat_2712": "Wywołanie dynamicznego importowania w wersji ES5/ES3 wymaga konstruktora \"Promise\". Upewnij się, że masz deklarację dla konstruktora \"Promise\", lub uwzględnij wartość \"ES2015\" w opcji \"--lib\".",
+  "A_dynamic_import_call_returns_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_include_ES20_2711": "Wywołanie dynamicznego importowania zwraca element \"Promise\". Upewnij się, że masz deklarację dla elementu \"Promise\" lub uwzględnij wartość \"ES2015\" w opcji \"--lib\".",
   "A_file_cannot_have_a_reference_to_itself_1006": "Plik nie może przywoływać samego siebie.",
-  "A_for_await_of_statement_is_only_allowed_within_an_async_function_or_async_generator_1103": "Instrukcja „for-await-of” jest dozwolona jedynie w funkcji asynchronicznej lub generatorze asynchronicznym.",
   "A_function_returning_never_cannot_have_a_reachable_end_point_2534": "Funkcja zwracająca wartość „never” nie może mieć osiągalnego punktu końcowego.",
   "A_function_that_is_called_with_the_new_keyword_cannot_have_a_this_type_that_is_void_2679": "Funkcja wywoływana ze słowem kluczowym „new” nie może mieć typu „this” o wartości „void”.",
   "A_function_whose_declared_type_is_neither_void_nor_any_must_return_a_value_2355": "Funkcja, której deklarowany typ jest inny niż „void” lub „any”, musi zwracać wartość.",
   "A_generator_cannot_have_a_void_type_annotation_2505": "Generator nie może mieć adnotacji typu „void”.",
   "A_get_accessor_cannot_have_parameters_1054": "Metoda dostępu „get” nie może mieć parametrów.",
+  "A_get_accessor_must_be_at_least_as_accessible_as_the_setter_2808": "Metoda dostępu get musi być co najmniej tak samo dostępna, jak metoda ustawiająca",
   "A_get_accessor_must_return_a_value_2378": "Metoda dostępu „get” musi zwracać wartość.",
   "A_label_is_not_allowed_here_1344": "Etykieta nie jest dozwolona w tym miejscu.",
   "A_labeled_tuple_element_is_declared_as_optional_with_a_question_mark_after_the_name_and_before_the_c_5086": "Element krotki z etykietą jest deklarowany jako opcjonalny za pomocą znaku zapytania po nazwie i przed dwukropkiem, a nie po typie.",
-  "A_labeled_tuple_element_is_declared_as_rest_with_a_before_the_name_rather_than_before_the_type_5087": "Element krotki z etykietą jest deklarowany jako rest przy użyciu znaku „...” przed nazwą, a nie przed typem.",
+  "A_labeled_tuple_element_is_declared_as_rest_with_a_before_the_name_rather_than_before_the_type_5087": "Oznaczony etykietą element krotki jest deklarowany jako reszta z \"...\" przed nazwą, a nie przed typem.",
   "A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_memb_2651": "Inicjator składowej w deklaracji wyliczenia nie może przywoływać składowych zadeklarowanych po nim, w tym składowych zdefiniowanych w innych wyliczeniach.",
-  "A_method_cannot_be_named_with_a_private_identifier_18022": "Metody nie można nazwać za pomocą identyfikatora prywatnego.",
   "A_mixin_class_must_have_a_constructor_with_a_single_rest_parameter_of_type_any_2545": "Klasa mixin musi mieć konstruktor z pojedynczym parametrem rest o typie „any[]”.",
+  "A_mixin_class_that_extends_from_a_type_variable_containing_an_abstract_construct_signature_must_also_2797": "Klasa domieszki, która rozciąga się od zmiennej typu zawierającej sygnaturę konstrukcji abstrakcyjnej, musi być również zadeklarowana jako „abstract”.",
   "A_module_cannot_have_multiple_default_exports_2528": "Moduł nie może mieć wielu eksportów domyślnych.",
   "A_namespace_declaration_cannot_be_in_a_different_file_from_a_class_or_function_with_which_it_is_merg_2433": "Deklaracja przestrzeni nazw nie może znajdować się w innym pliku niż klasa lub funkcja, z którą ją scalono.",
   "A_namespace_declaration_cannot_be_located_prior_to_a_class_or_function_with_which_it_is_merged_2434": "Deklaracja przestrzeni nazw nie może występować przed klasą lub funkcją, z którą ją scalono.",
@@ -71,10 +73,10 @@
   "A_required_element_cannot_follow_an_optional_element_1257": "Wymagany element nie może występować po elemencie opcjonalnym.",
   "A_required_parameter_cannot_follow_an_optional_parameter_1016": "Wymagany parametr nie może występować po opcjonalnym parametrze.",
   "A_rest_element_cannot_contain_a_binding_pattern_2501": "Element rest nie może zawierać wzorca wiązania.",
+  "A_rest_element_cannot_follow_another_rest_element_1265": "Element rest nie może następować po innym elemencie rest.",
   "A_rest_element_cannot_have_a_property_name_2566": "Element rest nie może mieć nazwy właściwości.",
   "A_rest_element_cannot_have_an_initializer_1186": "Element rest nie może mieć inicjatora.",
   "A_rest_element_must_be_last_in_a_destructuring_pattern_2462": "Element rest musi być ostatni we wzorcu usuwającym strukturę.",
-  "A_rest_element_must_be_last_in_a_tuple_type_1256": "Element rest musi być ostatni we typie krotki.",
   "A_rest_element_type_must_be_an_array_type_2574": "Typ elementu rest musi być typem tablicowym.",
   "A_rest_parameter_cannot_be_optional_1047": "Parametr rest nie może być opcjonalny.",
   "A_rest_parameter_cannot_have_an_initializer_1048": "Parametr rest nie może mieć inicjatora.",
@@ -82,6 +84,7 @@
   "A_rest_parameter_must_be_of_an_array_type_2370": "Parametr rest musi być typu tablicowego.",
   "A_rest_parameter_or_binding_pattern_may_not_have_a_trailing_comma_1013": "Parametr rest ani wzorzec wiązania nie może mieć końcowego przecinka.",
   "A_return_statement_can_only_be_used_within_a_function_body_1108": "Instrukcji „return” można użyć tylko w treści funkcji.",
+  "A_return_statement_cannot_be_used_inside_a_class_static_block_18041": "Instrukcji „return” nie można użyć wewnątrz bloku statycznego klasy.",
   "A_series_of_entries_which_re_map_imports_to_lookup_locations_relative_to_the_baseUrl_6167": "Seria wpisów, które ponownie mapują importowane dane na lokalizacje wyszukiwania względne wobec adresu „baseUrl”.",
   "A_set_accessor_cannot_have_a_return_type_annotation_1095": "Metoda dostępu „set” nie może mieć adnotacji zwracanego typu.",
   "A_set_accessor_cannot_have_an_optional_parameter_1051": "Metoda dostępu „set” nie może mieć parametru opcjonalnego.",
@@ -89,6 +92,7 @@
   "A_set_accessor_must_have_exactly_one_parameter_1049": "Metoda dostępu „set” musi mieć dokładnie jeden parametr.",
   "A_set_accessor_parameter_cannot_have_an_initializer_1052": "Parametr metody dostępu „set” nie może mieć inicjatora.",
   "A_signature_with_an_implementation_cannot_use_a_string_literal_type_2381": "Sygnatura z implementacją nie może używać typu literału ciągu.",
+  "A_spread_argument_must_either_have_a_tuple_type_or_be_passed_to_a_rest_parameter_2556": "Argument nadlewki musi mieć typ krotki lub być przekazywany do parametru Rest.",
   "A_super_call_must_be_the_first_statement_in_the_constructor_when_a_class_contains_initialized_proper_2376": "Wywołanie elementu „super” musi być pierwszą instrukcją w konstruktorze, jeśli klasa zawiera zainicjowane właściwości, właściwości parametrów lub identyfikatory prywatne.",
   "A_this_based_type_guard_is_not_compatible_with_a_parameter_based_type_guard_2518": "Ochrona typu oparta na elemencie „this” nie jest zgodna z ochroną typu opartą na parametrze.",
   "A_this_type_is_available_only_in_a_non_static_member_of_a_class_or_interface_2526": "Typ „this” jest dostępny tylko w niestatycznej składowej klasy lub interfejsu.",
@@ -114,8 +118,11 @@
   "Add_a_return_statement_95111": "Dodaj instrukcję return",
   "Add_all_missing_async_modifiers_95041": "Dodaj wszystkie brakujące modyfikatory „async”",
   "Add_all_missing_call_parentheses_95068": "Dodaj wszystkie brakujące nawiasy wywołań",
+  "Add_all_missing_function_declarations_95157": "Dodaj wszystkie brakujące deklaracje funkcji",
   "Add_all_missing_imports_95064": "Dodaj wszystkie brakujące importy",
   "Add_all_missing_members_95022": "Dodaj wszystkie brakujące elementy członkowskie",
+  "Add_all_missing_override_modifiers_95162": "Dodaj wszystkie brakujące modyfikatory „override”",
+  "Add_all_missing_properties_95166": "Dodaj wszystkie brakujące właściwości",
   "Add_all_missing_return_statement_95114": "Dodaj wszystkie brakujące instrukcje return",
   "Add_all_missing_super_calls_95039": "Dodaj wszystkie brakujące wywołania typu super",
   "Add_async_modifier_to_containing_function_90029": "Dodaj modyfikator asynchroniczny do funkcji zawierającej",
@@ -135,18 +142,22 @@
   "Add_initializers_to_all_uninitialized_properties_95027": "Dodaj inicjatory do wszystkich niezainicjowanych właściwości",
   "Add_missing_call_parentheses_95067": "Dodaj brakujące nawiasy wywołań",
   "Add_missing_enum_member_0_95063": "Dodaj brakujący element członkowski wyliczenia „{0}”",
+  "Add_missing_function_declaration_0_95156": "Dodaj brakującą deklarację funkcji „{0}”",
   "Add_missing_new_operator_to_all_calls_95072": "Dodaj brakujący operator „new” do wszystkich wywołań",
   "Add_missing_new_operator_to_call_95071": "Dodaj brakujący operator „new” do wywołania",
+  "Add_missing_properties_95165": "Dodaj brakujące właściwości",
   "Add_missing_super_call_90001": "Dodaj brakujące wywołanie „super()”",
   "Add_missing_typeof_95052": "Dodaj brakujący element „typeof”",
   "Add_names_to_all_parameters_without_names_95073": "Dodaj nazwy do wszystkich parametrów bez nazw",
   "Add_or_remove_braces_in_an_arrow_function_95058": "Dodaj lub usuń nawiasy klamrowe w funkcji strzałki",
+  "Add_override_modifier_95160": "Dodaj modyfikator „override”",
   "Add_parameter_name_90034": "Dodaj nazwę parametru",
   "Add_qualifier_to_all_unresolved_variables_matching_a_member_name_95037": "Dodaj kwalifikator do wszystkich nierozpoznanych zmiennych pasujących do nazwy składowej",
   "Add_this_parameter_95104": "Dodaj parametr „this”.",
   "Add_this_tag_95103": "Dodaj tag „@this”",
   "Add_to_all_uncalled_decorators_95044": "Dodaj element „()” do wszystkich niewywoływanych dekoratorów",
   "Add_ts_ignore_to_all_error_messages_95042": "Dodaj element „@ts-ignore” do wszystkich komunikatów o błędach",
+  "Add_undefined_to_a_type_when_accessed_using_an_index_6674": "Dodaj element „undefined” do typu podczas uzyskiwania dostępu przy użyciu indeksu.",
   "Add_undefined_type_to_all_uninitialized_properties_95029": "Dodaj typ nieokreślony do wszystkich niezainicjowanych właściwości",
   "Add_undefined_type_to_property_0_95018": "Dodaj typ „undefined” do właściwości „{0}”",
   "Add_unknown_conversion_for_non_overlapping_types_95069": "Dodaj konwersję „unknown” dla nienakładających się typów",
@@ -154,8 +165,6 @@
   "Add_void_to_Promise_resolved_without_a_value_95143": "Dodaj argument „void” do obiektu Promise rozwiązanego bez wartości",
   "Add_void_to_all_Promises_resolved_without_a_value_95144": "Dodaj argument „void” do wszystkich obiektów Promise rozwiązanych bez wartości",
   "Adding_a_tsconfig_json_file_will_help_organize_projects_that_contain_both_TypeScript_and_JavaScript__5068": "Dodanie pliku tsconfig.json pomoże w organizowaniu projektów, które zawierają pliki TypeScript i JavaScript. Dowiedz się więcej: https://aka.ms/tsconfig.",
-  "Additional_Checks_6176": "Dodatkowe kontrole",
-  "Advanced_Options_6178": "Opcje zaawansowane",
   "All_declarations_of_0_must_have_identical_modifiers_2687": "Wszystkie deklaracje elementu „{0}” muszą mieć identyczne modyfikatory.",
   "All_declarations_of_0_must_have_identical_type_parameters_2428": "Wszystkie deklaracje „{0}” muszą mieć identyczne parametry typu.",
   "All_declarations_of_an_abstract_method_must_be_consecutive_2516": "Wszystkie deklaracje metody abstrakcyjnej muszą występować obok siebie.",
@@ -163,34 +172,38 @@
   "All_imports_in_import_declaration_are_unused_6192": "Wszystkie importy w deklaracji importu są nieużywane.",
   "All_type_parameters_are_unused_6205": "Wszystkie parametry typu są nieużywane.",
   "All_variables_are_unused_6199": "Wszystkie zmienne są nieużywane.",
-  "Allow_accessing_UMD_globals_from_modules_95076": "Zezwalaj na dostęp do zmiennych globalnych UMD z modułów.",
+  "Allow_JavaScript_files_to_be_a_part_of_your_program_Use_the_checkJS_option_to_get_errors_from_these__6600": "Zezwalaj plikom JavaScript na udział w programie. Użyj opcji „checkJS”, aby uzyskać błędy z tych plików.",
+  "Allow_accessing_UMD_globals_from_modules_6602": "Zezwalaj na dostęp do zmiennych globalnych UMD z modułów.",
   "Allow_default_imports_from_modules_with_no_default_export_This_does_not_affect_code_emit_just_typech_6011": "Zezwalaj na domyślne importy z modułów bez domyślnego eksportu. To nie wpływa na emitowanie kodu, a tylko na sprawdzanie typów.",
+  "Allow_import_x_from_y_when_a_module_doesn_t_have_a_default_export_6601": "Zezwalaj na elementy „import x from y”, gdy moduł nie ma domyślnej operacji eksportu.",
+  "Allow_importing_helper_functions_from_tslib_once_per_project_instead_of_including_them_per_file_6639": "Zezwalaj na jednorazowe importowanie funkcji pomocniczych z biblioteki tslib w projekcie zamiast dołączania ich dla poszczególnych plików.",
   "Allow_javascript_files_to_be_compiled_6102": "Zezwalaj na kompilowanie plików JavaScript.",
+  "Allow_multiple_folders_to_be_treated_as_one_when_resolving_modules_6691": "Zezwalaj na traktowanie wielu folderów jako jednego podczas rozpoznawania modułów.",
   "Already_included_file_name_0_differs_from_file_name_1_only_in_casing_1261": "Już dołączona nazwa pliku „{0}” różni się od nazwy pliku „{1}” tylko wielkością liter",
   "Ambient_module_declaration_cannot_specify_relative_module_name_2436": "Deklaracja otaczającego modułu nie może określać względnej nazwy modułu.",
   "Ambient_modules_cannot_be_nested_in_other_modules_or_namespaces_2435": "Moduły otoczenia nie mogą być zagnieżdżone w innych modułach ani przestrzeniach nazw.",
   "An_AMD_module_cannot_have_multiple_name_assignments_2458": "Moduł AMD nie może mieć wielu przypisań nazw.",
   "An_abstract_accessor_cannot_have_an_implementation_1318": "Abstrakcyjna metoda dostępu nie może mieć implementacji.",
   "An_accessibility_modifier_cannot_be_used_with_a_private_identifier_18010": "Modyfikator dostępności nie może być używany z identyfikatorem prywatnym.",
-  "An_accessor_cannot_be_named_with_a_private_identifier_18023": "Metoda dostępu nie może mieć nazwy z identyfikatorem prywatnym.",
   "An_accessor_cannot_have_type_parameters_1094": "Metoda dostępu nie może mieć parametrów typu.",
   "An_ambient_module_declaration_is_only_allowed_at_the_top_level_in_a_file_1234": "Deklaracja otaczającego modułu jest dozwolona tylko na najwyższym poziomie pliku.",
   "An_argument_for_0_was_not_provided_6210": "Nie podano argumentu dla elementu „{0}”.",
   "An_argument_matching_this_binding_pattern_was_not_provided_6211": "Argument pasujący do tego wzorca powiązania nie został podany.",
   "An_arithmetic_operand_must_be_of_type_any_number_bigint_or_an_enum_type_2356": "Arytmetyczny operand musi być typu „any”, „number”, „bigint” lub typu wyliczeniowego.",
   "An_arrow_function_cannot_have_a_this_parameter_2730": "Funkcja strzałki nie może mieć parametru „this”.",
-  "An_async_function_or_method_in_ES5_SlashES3_requires_the_Promise_constructor_Make_sure_you_have_a_de_2705": "Asynchroniczna funkcja lub metoda w wersji ES5/ES3 wymaga konstruktora „Promise”. Upewnij się, że masz deklarację dla konstruktora „Promise”, lub uwzględnij wartość „ES2015” w opcji „--lib”.",
+  "An_async_function_or_method_in_ES5_SlashES3_requires_the_Promise_constructor_Make_sure_you_have_a_de_2705": "Asynchroniczna funkcja lub metoda w wersji ES5/ES3 wymaga konstruktora \"Promise\". Upewnij się, że masz deklarację dla konstruktora \"Promise\", lub uwzględnij wartość \"ES2015\" w opcji \"--lib\".",
   "An_async_function_or_method_must_have_a_valid_awaitable_return_type_1057": "Funkcja lub metoda asynchroniczna musi mieć prawidłowy oczekujący zwracany typ.",
-  "An_async_function_or_method_must_return_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_in_2697": "Metoda lub funkcja asynchroniczna musi zwrócić element „Promise”. Upewnij się, że masz deklarację elementu „Promise” lub uwzględnij wartość „ES2015” w opcji „--lib”.",
+  "An_async_function_or_method_must_return_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_in_2697": "Asynchroniczna funkcja lub metoda musi zwrócić element \"Promise\". Upewnij się, że masz deklarację dla elementu \"Promise\" lub uwzględnij wartość \"ES2015\" w opcji \"--lib\".",
   "An_async_iterator_must_have_a_next_method_2519": "Iterator asynchroniczny musi mieć metodę „next()”.",
   "An_element_access_expression_should_take_an_argument_1011": "Wyrażenie dostępu do elementu powinno przyjmować argument.",
   "An_enum_member_cannot_be_named_with_a_private_identifier_18024": "Elementu członkowskiego wyliczenia nie można nazwać za pomocą identyfikatora prywatnego.",
   "An_enum_member_cannot_have_a_numeric_name_2452": "Składowa wyliczenia nie może mieć nazwy liczbowej.",
   "An_enum_member_name_must_be_followed_by_a_or_1357": "Po nazwie elementu członkowskiego wyliczenia musi następować znak „,”, „=” lub „}”.",
-  "An_export_assignment_can_only_be_used_in_a_module_1231": "Przypisanie eksportu może być używane tylko w module.",
+  "An_expanded_version_of_this_information_showing_all_possible_compiler_options_6928": "Rozszerzona wersja tych informacji, przedstawiająca wszystkie możliwe opcje kompilatora",
   "An_export_assignment_cannot_be_used_in_a_module_with_other_exported_elements_2309": "Nie można użyć przypisania eksportu w module z innymi eksportowanymi elementami.",
   "An_export_assignment_cannot_be_used_in_a_namespace_1063": "Nie można użyć przypisania eksportu w przestrzeni nazw.",
   "An_export_assignment_cannot_have_modifiers_1120": "Przypisanie eksportu nie może mieć modyfikatorów.",
+  "An_export_assignment_must_be_at_the_top_level_of_a_file_or_module_declaration_1231": "Przypisanie eksportu musi znajdować się na najwyższym poziomie deklaracji pliku lub modułu.",
   "An_export_declaration_can_only_be_used_in_a_module_1233": "Deklaracja eksportu może być używana tylko w module.",
   "An_export_declaration_cannot_have_modifiers_1193": "Deklaracja eksportu nie może mieć modyfikatorów.",
   "An_expression_of_type_void_cannot_be_tested_for_truthiness_1345": "Wyrażenie typu „void” nie może być testowane pod kątem prawdziwości.",
@@ -212,9 +225,8 @@
   "An_index_signature_parameter_cannot_have_an_accessibility_modifier_1018": "Parametr sygnatury indeksu nie może mieć modyfikatora dostępności.",
   "An_index_signature_parameter_cannot_have_an_initializer_1020": "Parametr sygnatury indeksu nie może mieć inicjatora.",
   "An_index_signature_parameter_must_have_a_type_annotation_1022": "Parametr sygnatury indeksu musi mieć adnotację typu.",
-  "An_index_signature_parameter_type_cannot_be_a_type_alias_Consider_writing_0_Colon_1_Colon_2_instead_1336": "Typ parametru sygnatury indeksu nie może być aliasem typu. Rozważ zastosowanie następującego zapisu: „[{0}: {1}]: {2}”.",
-  "An_index_signature_parameter_type_cannot_be_a_union_type_Consider_using_a_mapped_object_type_instead_1337": "Typ parametru sygnatury indeksu nie może być typem unii. Rozważ użycie zamiast niego mapowanego typu obiektu.",
-  "An_index_signature_parameter_type_must_be_either_string_or_number_1023": "Parametr sygnatury indeksu musi być typu „string” lub „number”.",
+  "An_index_signature_parameter_type_cannot_be_a_literal_type_or_generic_type_Consider_using_a_mapped_o_1337": "Typ parametru sygnatury indeksu nie może być typem literału ani typem ogólnym. Rozważ użycie zamiast tego mapowanego typu obiektu.",
+  "An_index_signature_parameter_type_must_be_string_number_symbol_or_a_template_literal_type_1268": "Parametr sygnatury indeksu musi mieć typ „string”, „number” lub „symbol” albo typ literału szablonu.",
   "An_interface_can_only_extend_an_identifier_Slashqualified_name_with_optional_type_arguments_2499": "Interfejs może rozszerzać tylko identyfikator/nazwę kwalifikowaną z opcjonalnymi argumentami typu.",
   "An_interface_can_only_extend_an_object_type_or_intersection_of_object_types_with_statically_known_me_2312": "Interfejs może rozszerzać tylko typ obiektu lub część wspólną typów obiektów ze statycznie znanymi elementami członkowskimi.",
   "An_interface_property_cannot_have_an_initializer_1246": "Właściwość interfejsu nie może mieć inicjatora.",
@@ -225,6 +237,7 @@
   "An_object_literal_cannot_have_property_and_accessor_with_the_same_name_1119": "Literał obiektu nie może mieć właściwości i metody dostępu o takiej samej nazwie.",
   "An_object_member_cannot_be_declared_optional_1162": "Składowa obiektu nie może być zadeklarowana jako opcjonalna.",
   "An_optional_chain_cannot_contain_private_identifiers_18030": "Opcjonalny łańcuch nie może zawierać identyfikatorów prywatnych.",
+  "An_optional_element_cannot_follow_a_rest_element_1266": "Element opcjonalny nie może następować po elemencie rest.",
   "An_outer_value_of_this_is_shadowed_by_this_container_2738": "Zewnętrzna wartość parametru „this” jest zasłaniana przez ten kontener.",
   "An_overload_signature_cannot_be_declared_as_a_generator_1222": "Sygnatura przeciążenia nie może być zadeklarowana jako generator.",
   "An_unary_expression_with_the_0_operator_is_not_allowed_in_the_left_hand_side_of_an_exponentiation_ex_17006": "Wyrażenie jednoargumentowe z operatorem „{0}” jest niedozwolone po lewej stronie wyrażenia potęgowania. Zastanów się nad zamknięciem wyrażenia w nawiasach.",
@@ -244,33 +257,47 @@
   "Augmentations_for_the_global_scope_can_only_be_directly_nested_in_external_modules_or_ambient_module_2669": "Rozszerzenia zakresu globalnego mogą być zagnieżdżane bezpośrednio jedynie w modułach zewnętrznych lub deklaracjach modułów otoczenia.",
   "Augmentations_for_the_global_scope_should_have_declare_modifier_unless_they_appear_in_already_ambien_2670": "Rozszerzenia zakresu globalnego muszą mieć modyfikator „declare”, chyba że znajdują się w już otaczającym kontekście.",
   "Auto_discovery_for_typings_is_enabled_in_project_0_Running_extra_resolution_pass_for_module_1_using__6140": "Automatyczne odnajdowanie operacji wpisywania zostało włączone w projekcie „{0}”. Trwa uruchamianie dodatkowego przejścia rozwiązania dla modułu „{1}” przy użyciu lokalizacji pamięci podręcznej „{2}”.",
+  "Await_expression_cannot_be_used_inside_a_class_static_block_18037": "Nie można użyć wyrażenia await wewnątrz bloku statycznego klasy.",
+  "BUILD_OPTIONS_6919": "OPCJE KOMPILACJI",
+  "Backwards_Compatibility_6253": "Zgodność z poprzednimi wersjami",
   "Base_class_expressions_cannot_reference_class_type_parameters_2562": "Wyrażenia klasy bazowej nie mogą odwoływać się do parametrów typu klasy.",
   "Base_constructor_return_type_0_is_not_an_object_type_or_intersection_of_object_types_with_statically_2509": "Zwracany typ konstruktora bazowego „{0}” nie jest typem obiektu ani częścią wspólną typów obiektów ze statycznie znanymi elementami członkowskimi.",
   "Base_constructors_must_all_have_the_same_return_type_2510": "Wszystkie konstruktory podstawowe muszą mieć ten sam zwracany typ.",
   "Base_directory_to_resolve_non_absolute_module_names_6083": "Katalog podstawowy do rozpoznawania innych niż bezwzględne nazw modułów.",
-  "Basic_Options_6172": "Opcje podstawowe",
   "BigInt_literals_are_not_available_when_targeting_lower_than_ES2020_2737": "Literały typu BigInt są niedostępne, gdy wersja docelowa jest wcześniejsza niż ES2020.",
   "Binary_digit_expected_1177": "Oczekiwano bitu.",
   "Binding_element_0_implicitly_has_an_1_type_7031": "Dla elementu powiązania „{0}” niejawnie określono typ „{1}”.",
   "Block_scoped_variable_0_used_before_its_declaration_2448": "Zmienna „{0}” o zakresie bloku została użyta przed jej deklaracją.",
-  "Build_all_projects_including_those_that_appear_to_be_up_to_date_6368": "Kompiluj wszystkie projekty, łącznie z tymi, które wydają się być aktualne",
+  "Build_a_composite_project_in_the_working_directory_6925": "Skompiluj projekt złożony w katalogu roboczym.",
+  "Build_all_projects_including_those_that_appear_to_be_up_to_date_6636": "Kompiluj wszystkie projekty, łącznie z tymi, które wydają się być aktualne",
   "Build_one_or_more_projects_and_their_dependencies_if_out_of_date_6364": "Kompiluj co najmniej jeden projekt i jego zależności, jeśli są nieaktualne",
   "Build_option_0_requires_a_value_of_type_1_5073": "Opcja kompilacji „{0}” wymaga wartości typu {1}.",
   "Building_project_0_6358": "Trwa kompilowanie projektu „{0}”...",
+  "COMMAND_LINE_FLAGS_6921": "FLAGI WIERSZA POLECENIA",
+  "COMMON_COMMANDS_6916": "TYPOWE POLECENIA",
+  "COMMON_COMPILER_OPTIONS_6920": "TYPOWE OPCJE KOMPILATORA",
   "Call_decorator_expression_90028": "Wywołaj wyrażenie dekoratora",
   "Call_signature_return_types_0_and_1_are_incompatible_2202": "Zwracane typy sygnatur wywołania „{0}” i „{1}” są niezgodne.",
   "Call_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type_7020": "Dla sygnatury wywołania bez adnotacji zwracanego typu niejawnie określono zwracany typ „any”.",
   "Call_signatures_with_no_arguments_have_incompatible_return_types_0_and_1_2204": "Sygnatury wywołania bez argumentów mają niezgodne zwracane typy „{0}” i „{1}”.",
   "Call_target_does_not_contain_any_signatures_2346": "Cel wywołania nie zawiera żadnych podpisów.",
   "Can_only_convert_logical_AND_access_chains_95142": "Można konwertować tylko łańcuchy logiczne ORAZ łańcuchy dostępu",
+  "Can_only_convert_named_export_95164": "Można przekonwertować tylko nazwany eksport",
   "Can_only_convert_property_with_modifier_95137": "Właściwość można skonwertować tylko za pomocą modyfikatora",
+  "Can_only_convert_string_concatenation_95154": "Konwertować można tylko łączenie ciągów",
   "Cannot_access_0_1_because_0_is_a_type_but_not_a_namespace_Did_you_mean_to_retrieve_the_type_of_the_p_2713": "Nie można uzyskać dostępu do elementu „{0}.{1}”, ponieważ element „{0}” jest typem, ale nie przestrzenią nazw. Czy chcesz pobrać typ właściwości „{1}” w lokalizacji „{0}” za pomocą elementu „{0}[„{1}”]”?",
   "Cannot_access_ambient_const_enums_when_the_isolatedModules_flag_is_provided_2748": "Nie można uzyskać dostępu do otaczających wyliczeń const, gdy flaga „--isolatedModules” jest podana.",
   "Cannot_assign_a_0_constructor_type_to_a_1_constructor_type_2672": "Nie można przypisać typu konstruktora „{0}” do typu konstruktora „{1}”.",
   "Cannot_assign_an_abstract_constructor_type_to_a_non_abstract_constructor_type_2517": "Nie można przypisać abstrakcyjnego typu konstruktora do nieabstrakcyjnego typu konstruktora.",
+  "Cannot_assign_to_0_because_it_is_a_class_2629": "Nie można przypisać do elementu „{0}”, ponieważ jest to klasa.",
   "Cannot_assign_to_0_because_it_is_a_constant_2588": "Nie można przypisać do elementu „{0}”, ponieważ jest to stała.",
+  "Cannot_assign_to_0_because_it_is_a_function_2630": "Nie można przypisać do elementu „{0}”, ponieważ jest to funkcja.",
+  "Cannot_assign_to_0_because_it_is_a_namespace_2631": "Nie można przypisać do elementu „{0}”, ponieważ jest to przestrzeń nazw.",
   "Cannot_assign_to_0_because_it_is_a_read_only_property_2540": "Nie można przypisać do elementu „{0}”, ponieważ jest to właściwość tylko do odczytu.",
+  "Cannot_assign_to_0_because_it_is_an_enum_2628": "Nie można przypisać do elementu „{0}”, ponieważ jest to wyliczenie.",
+  "Cannot_assign_to_0_because_it_is_an_import_2632": "Nie można przypisać do elementu „{0}”, ponieważ jest to import.",
   "Cannot_assign_to_0_because_it_is_not_a_variable_2539": "Nie można przydzielić do elementu „{0}”, ponieważ nie jest to zmienna.",
+  "Cannot_assign_to_private_method_0_Private_methods_are_not_writable_2803": "Nie można przypisać do metody prywatnej „{0}”. Metody prywatne nie są zapisywalne.",
   "Cannot_augment_module_0_because_it_resolves_to_a_non_module_entity_2671": "Nie można rozszerzyć modułu „{0}”, ponieważ rozpoznawany jest obiekt inny niż moduł.",
   "Cannot_augment_module_0_with_value_exports_because_it_resolves_to_a_non_module_entity_2649": "Nie można rozszerzyć modułu „{0}” za pośrednictwem operacji eksportu wartości, ponieważ jest on rozpoznawany jako jednostka inna niż moduł.",
   "Cannot_compile_modules_using_option_0_unless_the_module_flag_is_amd_or_system_6131": "Nie można skompilować modułów za pomocą opcji „{0}”, chyba że flaga „--module” ma wartość „amd” lub „system”.",
@@ -292,14 +319,14 @@
   "Cannot_find_name_0_Did_you_mean_1_2552": "Nie można znaleźć nazwy „{0}”. Czy chodziło Ci o „{1}”?",
   "Cannot_find_name_0_Did_you_mean_the_instance_member_this_0_2663": "Nie można znaleźć nazwy „{0}”. Czy chodziło o składową wystąpienia „this.{0}”?",
   "Cannot_find_name_0_Did_you_mean_the_static_member_1_0_2662": "Nie można znaleźć nazwy „{0}”. Czy chodziło o statyczną składową „{1}.{0}”?",
-  "Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_2583": "Nie można odnaleźć nazwy „{0}”. Czy chcesz zmienić bibliotekę docelową? Spróbuj zmienić opcję kompilatora `lib` na „{1}” lub nowszą.",
-  "Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_2584": "Nie można odnaleźć nazwy „{0}”. Czy chcesz zmienić bibliotekę docelową? Spróbuj zmienić opcję kompilatora „lib”, aby uwzględnić element „dom”.",
+  "Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_2583": "Nie można odnaleźć nazwy \"{0}\". Czy chcesz zmienić bibliotekę docelową? Spróbuj zmienić opcję kompilatora \"lib\" na wersję \"{1}\" lub nowszą.",
+  "Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_2584": "Nie można odnaleźć nazwy \"{0}\". Czy chcesz zmienić bibliotekę docelową? Spróbuj zmienić opcję kompilatora \"lib\", aby uwzględnić element \"dom\".",
   "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_a_test_runner_Try_npm_i_save_dev_type_2582": "Nie można odnaleźć nazwy „{0}”. Czy chcesz zainstalować definicje typów dla modułu uruchamiającego testy? Spróbuj użyć polecenia „npm i --save-dev @types/jest” lub „npm i --save-dev @types/mocha”.",
-  "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_a_test_runner_Try_npm_i_save_dev_type_2593": "Nie można odnaleźć nazwy „{0}”. Czy chcesz zainstalować definicje typów dla modułu uruchamiającego testy? Spróbuj użyć polecenia „npm i --save-dev @types/jest” lub „npm i --save-dev @types/mocha”, a następnie dodaj element „jest” lub „mocha” do pola types w pliku tsconfig.",
+  "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_a_test_runner_Try_npm_i_save_dev_type_2593": "Nie można odnaleźć nazwy \"{0}\". Czy chcesz zainstalować definicje typów dla modułu uruchamiającego testy? Spróbuj użyć polecenia \"npm i --save-dev @types/jest\" lub \"npm i --save-dev @types/mocha\", a następnie dodaj element \"jest\" lub \"mocha\" do pola types w pliku tsconfig.",
   "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_jQuery_Try_npm_i_save_dev_types_Slash_2581": "Nie można odnaleźć nazwy „{0}”. Czy chcesz zainstalować definicje typów dla biblioteki jQuery? Spróbuj użyć polecenia „npm i --save-dev @types/jquery”.",
-  "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_jQuery_Try_npm_i_save_dev_types_Slash_2592": "Nie można odnaleźć nazwy „{0}”. Czy chcesz zainstalować definicje typów dla biblioteki jQuery? Spróbuj użyć polecenia „npm i --save-dev @types/jquery”, a następnie dodaj element „jquery” do pola types w pliku tsconfig.",
+  "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_jQuery_Try_npm_i_save_dev_types_Slash_2592": "Nie można odnaleźć nazwy \"{0}\". Czy chcesz zainstalować definicje typów dla biblioteki jQuery? Spróbuj użyć polecenia \"npm i --save-dev @types/jquery\", a następnie dodaj element \"jquery\" do pola types w pliku tsconfig.",
   "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_node_Try_npm_i_save_dev_types_Slashno_2580": "Nie można odnaleźć nazwy „{0}”. Czy chcesz zainstalować definicje typów dla środowiska Node? Spróbuj użyć polecenia „npm i --save-dev @types/node”.",
-  "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_node_Try_npm_i_save_dev_types_Slashno_2591": "Nie można odnaleźć nazwy „{0}”. Czy chcesz zainstalować definicje typów dla środowiska Node? Spróbuj użyć polecenia „npm i --save-dev @types/node”, a następnie dodaj element „node” do pola types w pliku tsconfig.",
+  "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_node_Try_npm_i_save_dev_types_Slashno_2591": "Nie można odnaleźć nazwy \"{0}\". Czy chcesz zainstalować definicje typów dla węzła? Spróbuj użyć polecenia \"npm i --save-dev @types/node\", a następnie dodaj element \"node\" do pola types w pliku tsconfig.",
   "Cannot_find_namespace_0_2503": "Nie można odnaleźć przestrzeni nazw „{0}”.",
   "Cannot_find_parameter_0_1225": "Nie można odnaleźć parametru „{0}”.",
   "Cannot_find_the_common_subdirectory_path_for_the_input_files_5009": "Nie można odnaleźć wspólnej ścieżki podkatalogu dla plików wejściowych.",
@@ -318,11 +345,13 @@
   "Cannot_redeclare_block_scoped_variable_0_2451": "Nie można ponownie zadeklarować zmiennej „{0}” o zakresie bloku.",
   "Cannot_redeclare_exported_variable_0_2323": "Nie można zadeklarować ponownie wyeksportowanej zmiennej „{0}”.",
   "Cannot_redeclare_identifier_0_in_catch_clause_2492": "Nie można ponownie zadeklarować identyfikatora „{0}” w klauzuli catch.",
+  "Cannot_start_a_function_call_in_a_type_annotation_1441": "Nie można uruchomić wywołania funkcji w adnotacji typu.",
   "Cannot_update_output_of_project_0_because_there_was_error_reading_file_1_6376": "Nie można zaktualizować danych wyjściowych projektu „{0}”, ponieważ wystąpił błąd podczas odczytu pliku „{1}”",
   "Cannot_use_JSX_unless_the_jsx_flag_is_provided_17004": "Nie można użyć kodu JSX, jeśli nie podano flagi „--jsx”.",
   "Cannot_use_imports_exports_or_module_augmentations_when_module_is_none_1148": "Nie można używać importów, eksportów lub rozszerzeń modułów, jeśli flaga „--module” ma wartość „none”.",
   "Cannot_use_namespace_0_as_a_type_2709": "Nie można używać przestrzeni nazw „{0}” jako typu.",
   "Cannot_use_namespace_0_as_a_value_2708": "Nie można używać przestrzeni nazw „{0}” jako wartości.",
+  "Cannot_use_this_in_a_static_property_initializer_of_a_decorated_class_2816": "Nie można użyć elementu \"this\" w statycznym inicjatorze właściwości dekorowanej klasy.",
   "Cannot_write_file_0_because_it_will_overwrite_tsbuildinfo_file_generated_by_referenced_project_1_6377": "Nie można zapisać pliku „{0}”, ponieważ spowoduje to zastąpienie pliku „.tsbuildinfo” generowanego przez przywoływany projekt „{1}”",
   "Cannot_write_file_0_because_it_would_be_overwritten_by_multiple_input_files_5056": "Nie można zapisać pliku „{0}”, ponieważ zostałby nadpisany przez wiele plików wejściowych.",
   "Cannot_write_file_0_because_it_would_overwrite_input_file_5055": "Nie można zapisać pliku „{0}”, ponieważ nadpisałby plik wejściowy.",
@@ -334,6 +363,8 @@
   "Change_all_jsdoc_style_types_to_TypeScript_and_add_undefined_to_nullable_types_95031": "Zmień wszystkie typy w stylu JSDoc na TypeScript (i dodaj element „| undefined” do typów dopuszczających wartość null)",
   "Change_extends_to_implements_90003": "Zmień atrybut „extends” na „implements”",
   "Change_spelling_to_0_90022": "Zmień pisownię na „{0}”",
+  "Check_for_class_properties_that_are_declared_but_not_set_in_the_constructor_6700": "Sprawdź, czy istnieją zadeklarowane właściwości klas, które nie zostały ustawione w konstruktorze.",
+  "Check_that_the_arguments_for_bind_call_and_apply_methods_match_the_original_function_6697": "Sprawdź, czy argumenty dla metod „bind”, „call” i „apply” są zgodne z oryginalną funkcją.",
   "Checking_if_0_is_the_longest_matching_prefix_for_1_2_6104": "Sprawdzanie, czy „{0}” to najdłuższy zgodny prefiks dla „{1}” — „{2}”.",
   "Circular_definition_of_import_alias_0_2303": "Definicja cykliczna aliasu importu „{0}”.",
   "Circularity_detected_while_resolving_configuration_Colon_0_18000": "Wykryto cykliczność podczas rozpoznawania konfiguracji: {0}",
@@ -345,7 +376,9 @@
   "Class_0_incorrectly_implements_class_1_Did_you_mean_to_extend_1_and_inherit_its_members_as_a_subclas_2720": "Klasa „{0}” niepoprawnie implementuje klasę „{1}”. Czy chodziło o rozszerzenie „{1}” i odziedziczenie jego elementów członkowskich jako podklasy?",
   "Class_0_incorrectly_implements_interface_1_2420": "Klasa „{0}” zawiera niepoprawną implementację interfejsu „{1}”.",
   "Class_0_used_before_its_declaration_2449": "Klasa „{0}” została użyta przed zadeklarowaniem.",
-  "Class_declarations_cannot_have_more_than_one_augments_or_extends_tag_8025": "Deklaracje klas nie mogą mieć więcej niż jeden tag „@augments” lub „@extends”.",
+  "Class_declaration_cannot_implement_overload_list_for_0_2813": "Deklaracja klasy nie może implementować listy przeciążeń dla elementu \"{0}\".",
+  "Class_declarations_cannot_have_more_than_one_augments_or_extends_tag_8025": "Deklaracje klas nie mogą mieć więcej niż jeden tag \"@augments\" lub \"@extends\".",
+  "Class_decorators_can_t_be_used_with_static_private_identifier_Consider_removing_the_experimental_dec_18036": "Dekoratorów klas nie można używać ze statycznym identyfikatorem prywatnym. Rozważ usunięcie eksperymentalnego dekoratora.",
   "Class_name_cannot_be_0_2414": "Klasa nie może mieć nazwy „{0}”.",
   "Class_name_cannot_be_Object_when_targeting_ES5_with_module_0_2725": "Nazwą klasy nie może być słowo „Object”, gdy docelowym językiem jest ES5 z modułem {0}.",
   "Class_static_side_0_incorrectly_extends_base_class_static_side_1_2417": "Strona statyczna klasy „{0}” niepoprawnie rozszerza stronę statyczną klasy bazowej „{1}”.",
@@ -354,16 +387,25 @@
   "Classes_may_not_have_a_field_named_constructor_18006": "Klasy nie mogą mieć pola o nazwie „constructor”.",
   "Command_line_Options_6171": "Opcje wiersza polecenia",
   "Compile_the_project_given_the_path_to_its_configuration_file_or_to_a_folder_with_a_tsconfig_json_6020": "Skompiluj projekt z uwzględnieniem ścieżki jego pliku konfiguracji lub folderu z plikiem „tsconfig.json”.",
+  "Compiler_Diagnostics_6251": "Diagnostyka kompilatora",
   "Compiler_option_0_expects_an_argument_6044": "Opcja kompilatora „{0}” oczekuje argumentu.",
+  "Compiler_option_0_may_not_be_used_with_build_5094": "Opcja kompilatora \"--{0}\" nie może być używana z parametrem \"--build\".",
+  "Compiler_option_0_may_only_be_used_with_build_5093": "Opcję kompilatora \"--{0}\" można używać tylko z parametrem \"--build\".",
   "Compiler_option_0_requires_a_value_of_type_1_5024": "Opcja kompilatora „{0}” wymaga wartości typu {1}.",
   "Compiler_reserves_name_0_when_emitting_private_identifier_downlevel_18027": "Kompilator rezerwuje nazwę „{0}” podczas emitowania identyfikatora prywatnego na niższy poziom.",
+  "Compiles_the_TypeScript_project_located_at_the_specified_path_6927": "Kompiluje projekt języka TypeScript zlokalizowany w określonej ścieżce",
+  "Compiles_the_current_project_tsconfig_json_in_the_working_directory_6923": "Kompiluje bieżący projekt (plik tsconfig.json w katalogu roboczym).",
+  "Compiles_the_current_project_with_additional_settings_6929": "Kompiluje bieżący projekt z dodatkowymi ustawieniami",
+  "Completeness_6257": "Kompletność",
   "Composite_projects_may_not_disable_declaration_emit_6304": "Projekty kompozytowe nie mogą wyłączyć emitowania deklaracji.",
   "Composite_projects_may_not_disable_incremental_compilation_6379": "Projekty złożone nie mogą wyłączać kompilacji przyrostowej.",
+  "Computed_from_the_list_of_input_files_6911": "Obliczono na podstawie listy plików wejściowych",
   "Computed_property_names_are_not_allowed_in_enums_1164": "Obliczone nazwy właściwości nie są dozwolone w wyliczeniach.",
   "Computed_values_are_not_permitted_in_an_enum_with_string_valued_members_2553": "Obliczone wartości nie są dozwolone w wyliczeniu ze składowymi o wartości ciągu.",
   "Concatenate_and_emit_output_to_single_file_6001": "Połącz i wyemituj dane wyjściowe do pojedynczego pliku.",
   "Conflicting_definitions_for_0_found_at_1_and_2_Consider_installing_a_specific_version_of_this_librar_4090": "Znaleziono definicje będące w konflikcie dla „{0}” w „{1}” i „{2}”. Rozważ zainstalowanie konkretnej wersji tej biblioteki, aby rozwiązać problem.",
   "Conflicts_are_in_this_file_6201": "Konflikty znajdują się w tym pliku.",
+  "Consider_adding_a_declare_modifier_to_this_class_6506": "Rozważ dodanie modyfikatora \"declare\" do tej klasy.",
   "Construct_signature_return_types_0_and_1_are_incompatible_2203": "Zwracane typy „{0}” i „{1}” sygnatur konstrukcji są niezgodne.",
   "Construct_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type_7013": "Dla sygnatury konstrukcji bez adnotacji zwracanego typu niejawnie określono zwracany typ „any”.",
   "Construct_signatures_with_no_arguments_have_incompatible_return_types_0_and_1_2205": "Sygnatury konstrukcji bez argumentów mają niezgodne zwracane typy „{0}” i „{1}”.",
@@ -413,16 +455,24 @@
   "Convert_to_type_only_export_1364": "Konwertuj na eksport dotyczący tylko typu",
   "Convert_to_type_only_import_1373": "Konwertuj na import dotyczący tylko typu",
   "Corrupted_locale_file_0_6051": "Uszkodzony plik ustawień regionalnych {0}.",
+  "Could_not_convert_to_anonymous_function_95153": "Nie można przekonwertować na funkcję anonimową",
+  "Could_not_convert_to_arrow_function_95151": "Nie można przekonwertować na funkcję strzałki",
+  "Could_not_convert_to_named_function_95152": "Nie można przekonwertować na nazwaną funkcję",
+  "Could_not_determine_function_return_type_95150": "Nie można określić zwracanego typu funkcji",
   "Could_not_find_a_containing_arrow_function_95127": "Nie można było znaleźć zawierającej funkcji strzałki",
   "Could_not_find_a_declaration_file_for_module_0_1_implicitly_has_an_any_type_7016": "Nie można znaleźć pliku deklaracji dla modułu „{0}”. Element „{1}” ma niejawnie typ „any”.",
   "Could_not_find_convertible_access_expression_95140": "Nie można odnaleźć konwertowalnego wyrażenia dostępu",
   "Could_not_find_export_statement_95129": "Nie można było znaleźć instrukcji export",
   "Could_not_find_import_clause_95131": "Nie można było znaleźć klauzuli import",
   "Could_not_find_matching_access_expressions_95141": "Nie można odnaleźć zgodnych wyrażeń dostępu",
+  "Could_not_find_name_0_Did_you_mean_1_2570": "Nie można znaleźć nazwy „{0}”. Czy chodziło o „{1}”?",
   "Could_not_find_namespace_import_or_named_imports_95132": "Nie można było znaleźć importu przestrzeni nazw lub nazwanych importów",
   "Could_not_find_property_for_which_to_generate_accessor_95135": "Nie można było znaleźć właściwości, dla której ma zostać wygenerowana metoda dostępu",
   "Could_not_resolve_the_path_0_with_the_extensions_Colon_1_6231": "Nie można rozpoznać ścieżki „{0}” z rozszerzeniami: {1}.",
   "Could_not_write_file_0_Colon_1_5033": "Nie można zapisać pliku „{0}”: {1}.",
+  "Create_source_map_files_for_emitted_JavaScript_files_6694": "Twórz pliki mapy źródła dla emitowanych plików JavaScript.",
+  "Create_sourcemaps_for_d_ts_files_6614": "Twórz mapy źródła dla plików d.ts.",
+  "Creates_a_tsconfig_json_with_the_recommended_settings_in_the_working_directory_6926": "Tworzy plik tsconfig.json z zalecanymi ustawieniami w katalogu roboczym.",
   "DIRECTORY_6038": "KATALOG",
   "Declaration_augments_declaration_in_another_file_This_cannot_be_serialized_6232": "Deklaracja rozszerza deklarację w innym pliku. Nie można przeprowadzić serializacji.",
   "Declaration_emit_for_this_file_requires_using_private_name_0_An_explicit_type_annotation_may_unblock_9005": "Emitowanie deklaracji dla tego pliku wymaga użycia nazwy prywatnej „{0}”. Jawna adnotacja typu może odblokować emitowanie deklaracji.",
@@ -430,6 +480,7 @@
   "Declaration_expected_1146": "Oczekiwano deklaracji.",
   "Declaration_name_conflicts_with_built_in_global_identifier_0_2397": "Nazwa deklaracji powoduje konflikt z wbudowanym identyfikatorem globalnym „{0}”.",
   "Declaration_or_statement_expected_1128": "Oczekiwano deklaracji lub instrukcji.",
+  "Declaration_or_statement_expected_This_follows_a_block_of_statements_so_if_you_intended_to_write_a_d_2809": "Oczekiwano deklaracji lub instrukcji. Ten znak „=” jest za blokiem instrukcji, dlatego jeśli chodziło Ci o napisanie przypisania usuwającego, może być konieczne zamknięcie całego przypisania w nawiasach.",
   "Declarations_with_definite_assignment_assertions_must_also_have_type_annotations_1264": "Deklaracje z asercjami określonego przypisania muszą również mieć adnotacje typu.",
   "Declarations_with_initializers_cannot_also_have_definite_assignment_assertions_1263": "Deklaracje z inicjatorami nie mogą mieć również asercji określonego przypisania.",
   "Declare_a_private_field_named_0_90053": "Zadeklaruj pole prywatne o nazwie „{0}”.",
@@ -441,7 +492,11 @@
   "Declare_static_property_0_90027": "Zadeklaruj właściwość statyczną „{0}”",
   "Decorators_are_not_valid_here_1206": "Elementy Decorator nie są tutaj prawidłowe.",
   "Decorators_cannot_be_applied_to_multiple_get_Slashset_accessors_of_the_same_name_1207": "Nie można stosować elementów Decorator do wielu metod dostępu pobierania/ustawiania o takiej samej nazwie.",
+  "Decorators_may_not_be_applied_to_this_parameters_1433": "Nie można zastosować dekoratorów w przypadku parametrów \"this\".",
+  "Decorators_must_precede_the_name_and_all_keywords_of_property_declarations_1436": "Dekoratory muszą poprzedzać nazwę i wszystkie słowa kluczowe deklaracji właściwości.",
   "Default_export_of_the_module_has_or_is_using_private_name_0_4082": "Domyślny eksport modułu ma nazwę prywatną „{0}” lub używa tej nazwy.",
+  "Default_library_1424": "Domyślna biblioteka",
+  "Default_library_for_target_0_1425": "Domyślna biblioteka dla elementu docelowego „{0}”",
   "Definitions_of_the_following_identifiers_conflict_with_those_in_another_file_Colon_0_6200": "Definicje następujących identyfikatorów powodują konflikt z tymi w innym pliku: {0}",
   "Delete_all_unused_declarations_95024": "Usuń wszystkie nieużywane deklaracje",
   "Delete_all_unused_imports_95147": "Usuń wszystkie nieużywane importy",
@@ -449,6 +504,7 @@
   "Deprecated_Use_jsxFactory_instead_Specify_the_object_invoked_for_createElement_when_targeting_react__6084": "[Przestarzałe] Użyj w zastępstwie opcji „--jsxFactory”. Określ obiekt wywoływany dla elementu createElement przy określaniu jako celu emisji JSX „react”",
   "Deprecated_Use_outFile_instead_Concatenate_and_emit_output_to_single_file_6170": "[Przestarzałe] Użyj w zastępstwie opcji „--outFile”. Połącz dane wyjściowe i wyemituj jako jeden plik",
   "Deprecated_Use_skipLibCheck_instead_Skip_type_checking_of_default_library_declaration_files_6160": "[Przestarzałe] Użyj w zastępstwie opcji „--skipLibCheck”. Pomiń sprawdzanie typów domyślnych plików deklaracji biblioteki.",
+  "Deprecated_setting_Use_outFile_instead_6677": "Przestarzałe ustawienie. Zamiast tego użyj elementu „outFile”.",
   "Did_you_forget_to_use_await_2773": "Czy zapomniano użyć operatora „await”?",
   "Did_you_mean_0_1369": "Czy chodziło Ci o „{0}”?",
   "Did_you_mean_for_0_to_be_constrained_to_type_new_args_Colon_any_1_2735": "Czy chodziło Ci o ograniczenie elementu „{0}” do typu „new (...args: any[]) => {1}”?",
@@ -459,12 +515,30 @@
   "Did_you_mean_to_use_new_with_this_expression_6213": "Czy chodziło Ci o użycie operatora „new” z tym wyrażeniem?",
   "Digit_expected_1124": "Oczekiwano cyfry.",
   "Directory_0_does_not_exist_skipping_all_lookups_in_it_6148": "Katalog „{0}” nie istnieje. Operacje wyszukiwania w nim zostaną pominięte.",
+  "Disable_adding_use_strict_directives_in_emitted_JavaScript_files_6669": "Wyłącz dodawanie dyrektyw „use strict” w emitowanych plikach JavaScript.",
   "Disable_checking_for_this_file_90018": "Wyłącz sprawdzanie dla tego pliku",
+  "Disable_emitting_comments_6688": "Wyłącz emitowanie komentarzy.",
+  "Disable_emitting_declarations_that_have_internal_in_their_JSDoc_comments_6701": "Wyłącz emitowanie deklaracji mających element „@internal” w komentarzach JSDoc.",
+  "Disable_emitting_file_from_a_compilation_6660": "Wyłącz emitowanie pliku z kompilacji.",
+  "Disable_emitting_files_if_any_type_checking_errors_are_reported_6662": "Wyłącz emitowanie plików, jeśli zostaną zgłoszone jakiekolwiek błędy sprawdzania typów.",
+  "Disable_erasing_const_enum_declarations_in_generated_code_6682": "Wyłącz wymazywanie deklaracji „const enum” w wygenerowanym kodzie.",
+  "Disable_error_reporting_for_unreachable_code_6603": "Wyłącz raportowanie błędów dla nieosiągalnego kodu.",
+  "Disable_error_reporting_for_unused_labels_6604": "Wyłącz raportowanie błędów dla nieużywanych etykiet.",
+  "Disable_generating_custom_helper_functions_like_extends_in_compiled_output_6661": "Wyłącz generowanie niestandardowych funkcji pomocniczych, takich jak „__extends” w skompilowanych danych wyjściowych.",
+  "Disable_including_any_library_files_including_the_default_lib_d_ts_6670": "Wyłącz dołączanie plików bibliotek, w tym domyślnego pliku lib.d.ts.",
   "Disable_loading_referenced_projects_6235": "Wyłącz ładowanie przywoływanych projektów.",
+  "Disable_preferring_source_files_instead_of_declaration_files_when_referencing_composite_projects_6620": "Wyłącz preferowanie plików źródłowych zamiast plików deklaracji podczas odwoływania się do projektów złożonych",
+  "Disable_reporting_of_excess_property_errors_during_the_creation_of_object_literals_6702": "Wyłącz raportowanie błędów dotyczących nadmiarowych właściwości podczas tworzenia literałów obiektów.",
+  "Disable_resolving_symlinks_to_their_realpath_This_correlates_to_the_same_flag_in_node_6683": "Wyłącz rozpoznawanie linków symbolicznych jako ścieżek rzeczywistych. Odpowiada to takiej samej fladze na platformie Node.",
   "Disable_size_limitations_on_JavaScript_projects_6162": "Wyłącz ograniczenia rozmiarów dla projektów JavaScript.",
   "Disable_solution_searching_for_this_project_6224": "Wyłącz wyszukiwanie rozwiązania dla tego projektu.",
-  "Disable_strict_checking_of_generic_signatures_in_function_types_6185": "Wyłącz dokładne sprawdzanie sygnatur ogólnych w typach funkcji.",
+  "Disable_strict_checking_of_generic_signatures_in_function_types_6673": "Wyłącz dokładne sprawdzanie sygnatur ogólnych w typach funkcji.",
+  "Disable_the_type_acquisition_for_JavaScript_projects_6625": "Wyłącz pozyskiwanie typów dla projektów JavaScript",
+  "Disable_truncating_types_in_error_messages_6663": "Wyłącz obcinanie typów w komunikatach o błędach.",
   "Disable_use_of_source_files_instead_of_declaration_files_from_referenced_projects_6221": "Wyłącz używanie plików źródłowych zamiast plików deklaracji z przywoływanych projektów.",
+  "Disable_wiping_the_console_in_watch_mode_6684": "Wyłącz czyszczenie konsoli w trybie obserwacji",
+  "Disables_inference_for_type_acquisition_by_looking_at_filenames_in_a_project_6616": "Wyłącz wnioskowanie dla pozyskiwania typów przez sprawdzanie nazw plików w projekcie.",
+  "Disallow_import_s_require_s_or_reference_s_from_expanding_the_number_of_files_TypeScript_should_add__6672": "Nie zezwalaj elementom „import”, „require” i „<reference>” na zwiększanie liczby plików, które powinny zostać dodane do projektu przez język TypeScript.",
   "Disallow_inconsistently_cased_references_to_the_same_file_6078": "Nie zezwalaj na przywoływanie tego samego pliku za pomocą nazw różniących się wielkością liter.",
   "Do_not_add_triple_slash_references_or_imported_modules_to_the_list_of_compiled_files_6159": "Nie dodawaj odwołań z trzema ukośnikami ani zaimportowanych modułów do listy skompilowanych plików.",
   "Do_not_emit_comments_to_output_6009": "Nie emituj komentarzy do danych wyjściowych.",
@@ -483,31 +557,48 @@
   "Duplicate_identifier_0_2300": "Zduplikowany identyfikator „{0}”.",
   "Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module_2441": "Zduplikowany identyfikator „{0}”. Kompilator rezerwuje nazwę „{1}” w zakresie najwyższego poziomu modułu.",
   "Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module_containing_async_func_2529": "Zduplikowany identyfikator „{0}”. Kompilator rezerwuje nazwę „{1}” w zakresie najwyższego poziomu modułu zawierającego funkcje asynchroniczne.",
+  "Duplicate_identifier_0_Compiler_reserves_name_1_when_emitting_super_references_in_static_initializer_2818": "Zduplikowany identyfikator \"{0}\". Kompilator rezerwuje nazwę \"{1}\" podczas emisji odwołań \"super\" w inicjatorach statycznych.",
   "Duplicate_identifier_0_Compiler_uses_declaration_1_to_support_async_functions_2520": "Zduplikowany identyfikator „{0}”. Kompilator używa deklaracji „{1}” do obsługi funkcji asynchronicznych.",
+  "Duplicate_identifier_0_Static_and_instance_elements_cannot_share_the_same_private_name_2804": "Zduplikowany identyfikator „{0}”. Elementy statyczne i elementy wystąpienia nie mogą mieć tej samej nazwy prywatnej.",
   "Duplicate_identifier_arguments_Compiler_uses_arguments_to_initialize_rest_parameters_2396": "Zduplikowany identyfikator „arguments”. Kompilator używa ciągu „arguments” do zainicjowania parametrów rest.",
   "Duplicate_identifier_newTarget_Compiler_uses_variable_declaration_newTarget_to_capture_new_target_me_2543": "Powielony identyfikator „_newTarget”. Kompilator używa deklaracji zmiennej „_newTarget” do przechwytywania odwołania do metawłaściwości „new.target”.",
   "Duplicate_identifier_super_Compiler_uses_super_to_capture_base_class_reference_2401": "Zduplikowany identyfikator „_super”. Kompilator używa ciągu „_super” do przechwycenia odwołania do klasy bazowej.",
   "Duplicate_identifier_this_Compiler_uses_variable_declaration_this_to_capture_this_reference_2399": "Zduplikowany identyfikator „_this”. Kompilator używa deklaracji zmiennej „_this” do przechwycenia odwołania do elementu „this”.",
+  "Duplicate_index_signature_for_type_0_2374": "Zduplikowana sygnatura indeksu dla typu „{0}”.",
   "Duplicate_label_0_1114": "Zduplikowana etykieta „{0}”.",
-  "Duplicate_number_index_signature_2375": "Zduplikowana sygnatura indeksu liczbowego.",
   "Duplicate_property_0_2718": "Zduplikowana właściwość „{0}”.",
-  "Duplicate_string_index_signature_2374": "Zduplikowana sygnatura indeksu ciągu.",
   "Dynamic_import_cannot_have_type_arguments_1326": "Dynamiczny import nie może mieć argumentów typu.",
   "Dynamic_import_must_have_one_specifier_as_an_argument_1324": "Dynamiczne importowanie musi mieć jeden specyfikator jako argument.",
   "Dynamic_import_s_specifier_must_be_of_type_string_but_here_has_type_0_7036": "Specyfikator dynamicznego importowania musi być typu „string”, ale określono typ „{0}”.",
   "Dynamic_imports_are_only_supported_when_the_module_flag_is_set_to_es2020_esnext_commonjs_amd_system__1323": "Dynamiczne importy są obsługiwane tylko wtedy, gdy flaga „--module” jest ustawiona na wartość „es2020”, „esnext”, „commonjs”, „amd”, „system” lub „umd”.",
   "Each_member_of_the_union_type_0_has_construct_signatures_but_none_of_those_signatures_are_compatible_2762": "Każdy element członkowski typu unii „{0}” ma sygnatury konstrukcji, ale żadne z tych sygnatur nie są ze sobą zgodne.",
   "Each_member_of_the_union_type_0_has_signatures_but_none_of_those_signatures_are_compatible_with_each_2758": "Każdy element członkowski typu unii „{0}” ma sygnatury, ale żadne z tych sygnatur nie są ze sobą zgodne.",
-  "Element_at_index_0_is_variadic_in_one_type_but_not_in_the_other_2622": "Element pod indeksem {0} ma zmienną liczbę argumentów w jednym typie, ale nie w innym.",
+  "Editor_Support_6249": "Pomoc techniczna edytora",
   "Element_implicitly_has_an_any_type_because_expression_of_type_0_can_t_be_used_to_index_type_1_7053": "Element ma niejawnie typ „any”, ponieważ wyrażenie typu „{0}” nie może być używane do indeksowania typu „{1}”.",
   "Element_implicitly_has_an_any_type_because_index_expression_is_not_of_type_number_7015": "Element niejawnie przyjmuje typ „any”, ponieważ wyrażenie indeksu ma typ inny niż „number”.",
   "Element_implicitly_has_an_any_type_because_type_0_has_no_index_signature_7017": "Element ma niejawnie typ „any”, ponieważ typ „{0}” nie ma sygnatury indeksu.",
   "Element_implicitly_has_an_any_type_because_type_0_has_no_index_signature_Did_you_mean_to_call_1_7052": "Element ma niejawnie typ „any”, ponieważ typ „{0}” nie ma sygnatury indeksu. Czy chodziło o wywołanie „{1}”?",
-  "Emit_a_UTF_8_Byte_Order_Mark_BOM_in_the_beginning_of_output_files_6164": "Emituj znacznik kolejności bajtów UTF-8 na początku plików wyjściowych.",
+  "Emit_6246": "Emituj",
+  "Emit_ECMAScript_standard_compliant_class_fields_6712": "Emituj pola klasy zgodne ze standardem ECMAScript.",
+  "Emit_a_UTF_8_Byte_Order_Mark_BOM_in_the_beginning_of_output_files_6622": "Emituj znacznik kolejności bajtów UTF-8 na początku plików wyjściowych.",
   "Emit_a_single_file_with_source_maps_instead_of_having_a_separate_file_6151": "Emituj pojedynczy plik z mapami źródeł zamiast oddzielnego pliku.",
+  "Emit_a_v8_CPU_profile_of_the_compiler_run_for_debugging_6638": "Emituj profil procesora CPU v8 dla uruchomienia kompilatora na potrzeby debugowania.",
+  "Emit_additional_JavaScript_to_ease_support_for_importing_CommonJS_modules_This_enables_allowSyntheti_6626": "Emituj dodatkowy kod JavaScript, aby ułatwić obsługę importowania modułów CommonJS. Włącza to opcję „allowSyntheticDefaultImports” na potrzeby zgodności typów.",
   "Emit_class_fields_with_Define_instead_of_Set_6222": "Emituj pola klasy przy użyciu metody Define zamiast Set.",
+  "Emit_design_type_metadata_for_decorated_declarations_in_source_files_6624": "Emituj metadane typu „design” dla dekorowanych deklaracji w plikach źródłowych.",
+  "Emit_more_compliant_but_verbose_and_less_performant_JavaScript_for_iteration_6621": "Emituj bardziej zgodny, ale dosłowny i mniej wydajny JavaScript dla iteracji.",
   "Emit_the_source_alongside_the_sourcemaps_within_a_single_file_requires_inlineSourceMap_or_sourceMap__6152": "Emituj źródło razem z mapami źródeł w pojedynczym pliku; wymaga ustawienia opcji „--inlineSourceMap” lub „--sourceMap”.",
   "Enable_all_strict_type_checking_options_6180": "Włącz wszystkie opcje ścisłego sprawdzania typów.",
+  "Enable_color_and_formatting_in_output_to_make_compiler_errors_easier_to_read_6685": "Włącz kolor i formatowanie w danych wyjściowych, aby zwiększyć czytelność błędów kompilatora",
+  "Enable_constraints_that_allow_a_TypeScript_project_to_be_used_with_project_references_6611": "Włącz ograniczenia zezwalające na używanie projektu języka TypeScript z odwołaniami do projektów.",
+  "Enable_error_reporting_for_codepaths_that_do_not_explicitly_return_in_a_function_6667": "Włącz raportowanie błędów dla ścieżek kodu, które nie zwracają jawnie funkcji.",
+  "Enable_error_reporting_for_expressions_and_declarations_with_an_implied_any_type_6665": "Włącz raportowanie błędów dla wyrażeń i deklaracji z dorozumianym typem „any”.",
+  "Enable_error_reporting_for_fallthrough_cases_in_switch_statements_6664": "Włącz raportowanie błędów dla przypadków rezerwowych w instrukcjach switch.",
+  "Enable_error_reporting_in_type_checked_JavaScript_files_6609": "Włącz raportowanie błędów w plikach JavaScript z zaznaczonym typem.",
+  "Enable_error_reporting_when_a_local_variables_aren_t_read_6675": "Włącz raportowanie błędów, gdy zmienne lokalne nie są odczytywane.",
+  "Enable_error_reporting_when_this_is_given_the_type_any_6668": "Włącz raportowanie błędów, gdy element „this” ma typ „any”.",
+  "Enable_experimental_support_for_TC39_stage_2_draft_decorators_6630": "Włącz eksperymentalną obsługę dekoratorów w wersji TC39 stage 2 draft.",
+  "Enable_importing_json_files_6689": "Włącz importowanie plików json",
   "Enable_incremental_compilation_6378": "Włącz kompilację przyrostową",
   "Enable_project_compilation_6302": "Włącz kompilację projektu",
   "Enable_strict_bind_call_and_apply_methods_on_functions_6214": "Włącz ścisłe metody „bind”, „call” i „apply” dla funkcji.",
@@ -517,11 +608,20 @@
   "Enable_the_experimentalDecorators_option_in_your_configuration_file_95074": "Włącz opcję „experimentalDecorators” w pliku konfiguracji",
   "Enable_the_jsx_flag_in_your_configuration_file_95088": "Włącz flagę „--jsx” w pliku konfiguracji",
   "Enable_tracing_of_the_name_resolution_process_6085": "Włącz śledzenie procesu rozpoznawania nazw.",
-  "Enable_verbose_logging_6366": "Włącz pełne rejestrowanie",
+  "Enable_verbose_logging_6713": "Włącz pełne rejestrowanie",
   "Enables_emit_interoperability_between_CommonJS_and_ES_Modules_via_creation_of_namespace_objects_for__7037": "Umożliwia współdziałanie emitowania między modułami CommonJS i ES przez tworzenie obiektów przestrzeni nazw dla wszystkich importów. Implikuje użycie ustawienia „allowSyntheticDefaultImports”.",
   "Enables_experimental_support_for_ES7_async_functions_6068": "Umożliwia obsługę eksperymentalną funkcji asynchronicznych języka ES7.",
   "Enables_experimental_support_for_ES7_decorators_6065": "Umożliwia obsługę eksperymentalną elementów Decorator języka ES7.",
   "Enables_experimental_support_for_emitting_type_metadata_for_decorators_6066": "Umożliwia obsługę eksperymentalną emitowania metadanych typów elementów Decorator.",
+  "Enforces_using_indexed_accessors_for_keys_declared_using_an_indexed_type_6671": "Wymuszaj używanie indeksowanych metod dostępu dla kluczy deklarowanych przy użyciu typu indeksowanego",
+  "Ensure_overriding_members_in_derived_classes_are_marked_with_an_override_modifier_6666": "Upewnij się, że przesłaniające elementy członkowskie w klasach pochodnych są oznaczone modyfikatorem „override”.",
+  "Ensure_that_casing_is_correct_in_imports_6637": "Upewnij się, że wielkość liter jest poprawna w importach.",
+  "Ensure_that_each_file_can_be_safely_transpiled_without_relying_on_other_imports_6645": "Upewnij się, że każdy plik może być bezpiecznie transponowany bez polegania na innych importach.",
+  "Ensure_use_strict_is_always_emitted_6605": "Upewnij się, że element „use strict” jest zawsze emitowany.",
+  "Entry_point_for_implicit_type_library_0_1420": "Punkt wejścia dla biblioteki niejawnych typów „{0}”",
+  "Entry_point_for_implicit_type_library_0_with_packageId_1_1421": "Punkt wejścia dla biblioteki niejawnych typów „{0}” o identyfikatorze packageId „{1}”",
+  "Entry_point_of_type_library_0_specified_in_compilerOptions_1417": "Punkt wejścia biblioteki typów „{0}” określony w opcjach compilerOptions",
+  "Entry_point_of_type_library_0_specified_in_compilerOptions_with_packageId_1_1418": "Punkt wejścia biblioteki typów „{0}” określony w opcjach compilerOptions o identyfikatorze packageId „{1}”",
   "Enum_0_used_before_its_declaration_2450": "Wyliczenie „{0}” zostało użyte przed zadeklarowaniem.",
   "Enum_declarations_can_only_merge_with_namespace_or_other_enum_declarations_2567": "Deklaracje wyliczeń można scalać tylko z przestrzeniami nazw lub innymi deklaracjami wyliczeń.",
   "Enum_declarations_must_all_be_const_or_non_const_2473": "Wszystkie deklaracje wyliczeń muszą być elementami const lub żadna nie może być elementem const.",
@@ -535,15 +635,13 @@
   "Expected_0_1_type_arguments_provide_these_with_an_extends_tag_8027": "Oczekiwano argumentów typu {0}-{1}; podaj je z tagiem „@extends”.",
   "Expected_0_arguments_but_got_1_2554": "Oczekiwane argumenty: {0}, uzyskano: {1}.",
   "Expected_0_arguments_but_got_1_Did_you_forget_to_include_void_in_your_type_argument_to_Promise_2794": "Oczekiwano {0} argumentów, ale otrzymano {1}. Czy zapomniano dołączyć wartość „void” w argumencie typu obiektu „Promise”?",
-  "Expected_0_arguments_but_got_1_or_more_2556": "Oczekiwano {0} argumentów, ale otrzymano {1} lub więcej.",
   "Expected_0_type_arguments_but_got_1_2558": "Oczekiwane argumenty typu: {0}, uzyskano: {1}.",
   "Expected_0_type_arguments_provide_these_with_an_extends_tag_8026": "Oczekiwano argumentów typu {0}; podaj je z tagiem „@extends”.",
   "Expected_at_least_0_arguments_but_got_1_2555": "Oczekiwane argumenty: co najmniej {0}, uzyskano: {1}.",
-  "Expected_at_least_0_arguments_but_got_1_or_more_2557": "Oczekiwano co najmniej {0} argumentów, ale otrzymano {1} lub więcej.",
   "Expected_corresponding_JSX_closing_tag_for_0_17002": "Oczekiwano odpowiadającego tagu zamykającego kodu JSX dla elementu „{0}”.",
   "Expected_corresponding_closing_tag_for_JSX_fragment_17015": "Oczekiwano odpowiedniego tagu zamykającego dla fragmentu kodu JSX.",
+  "Expected_for_property_initializer_1442": "Oczekiwano znaku „=” dla inicjatora właściwości.",
   "Expected_type_of_0_field_in_package_json_to_be_1_got_2_6105": "Oczekiwany typ pola „{0}” w pliku „package.json” to „{1}”, a uzyskano typ „{2}”.",
-  "Experimental_Options_6177": "Opcje eksperymentalne",
   "Experimental_support_for_decorators_is_a_feature_that_is_subject_to_change_in_a_future_release_Set_t_1219": "Obsługa eksperymentalna dekoratorów to funkcja, która może ulec zmianie w nowszych wersjach. Ustaw opcję „experimentalDecorators” w pliku „tsconfig” lub „jsconfig”, aby usunąć to ostrzeżenie.",
   "Explicitly_specified_module_resolution_kind_Colon_0_6087": "Jawnie określony rodzaj rozpoznawania modułów: „{0}”.",
   "Exponentiation_cannot_be_performed_on_bigint_values_unless_the_target_option_is_set_to_es2016_or_lat_2791": "Nie można wykonać potęgowania wartości typu „bigint”, chyba że opcja „target” ma wartość „es2016” lub nowszą.",
@@ -554,12 +652,14 @@
   "Exported_external_package_typings_file_0_is_not_a_module_Please_contact_the_package_author_to_update_2656": "Plik typów wyeksportowanych pakietów zewnętrznych „{0}” nie jest modułem. Skontaktuj się z autorem pakietu, aby zaktualizować definicję pakietu.",
   "Exported_external_package_typings_file_cannot_contain_tripleslash_references_Please_contact_the_pack_2654": "Plik typów wyeksportowanych pakietów zewnętrznych nie może zawierać odwołań z potrójnym ukośnikiem. Skontaktuj się z autorem pakietu, aby zaktualizować definicję pakietu.",
   "Exported_type_alias_0_has_or_is_using_private_name_1_4081": "Alias „{0}” wyeksportowanego typu ma nazwę prywatną „{1}” lub używa tej nazwy.",
+  "Exported_type_alias_0_has_or_is_using_private_name_1_from_module_2_4084": "Wyeksportowany alias typu „{0}” ma nazwę prywatną „{1}” z modułu „{2}” lub używa tej nazwy.",
   "Exported_variable_0_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4023": "Wyeksportowana zmienna „{0}” ma nazwę „{1}” z modułu zewnętrznego {2} lub używa tej nazwy, ale nie można jej nazwać.",
   "Exported_variable_0_has_or_is_using_name_1_from_private_module_2_4024": "Wyeksportowana zmienna „{0}” ma nazwę „{1}” z modułu prywatnego „{2}” lub używa tej nazwy.",
   "Exported_variable_0_has_or_is_using_private_name_1_4025": "Wyeksportowana zmienna „{0}” ma nazwę prywatną „{1}” lub używa tej nazwy.",
   "Exports_and_export_assignments_are_not_permitted_in_module_augmentations_2666": "Eksporty i przypisania eksportów nie są dozwolone w rozszerzeniach modułów.",
   "Expression_expected_1109": "Oczekiwano wyrażenia.",
   "Expression_or_comma_expected_1137": "Oczekiwano wyrażenia lub przecinka.",
+  "Expression_produces_a_tuple_type_that_is_too_large_to_represent_2800": "Wyrażenie tworzy typ krotki, który jest zbyt duży, aby go reprezentować.",
   "Expression_produces_a_union_type_that_is_too_complex_to_represent_2590": "Wyrażenie tworzy typ unii, który jest zbyt złożony, aby go reprezentować.",
   "Expression_resolves_to_super_that_compiler_uses_to_capture_base_class_reference_2402": "Wynikiem rozpoznania wyrażenia jest element „_super” używany przez kompilator do przechwycenia odwołania do klasy bazowej.",
   "Expression_resolves_to_variable_declaration_0_that_compiler_uses_to_support_async_functions_2521": "Wynikiem rozpoznania wyrażenia jest deklaracja zmiennej „{0}” używana przez kompilator do obsługi funkcji asynchronicznych.",
@@ -579,7 +679,9 @@
   "Failed_to_parse_file_0_Colon_1_5014": "Nie można przeanalizować pliku „{0}”: {1}.",
   "Fallthrough_case_in_switch_7029": "Przepuszczająca klauzula case w instrukcji switch.",
   "File_0_does_not_exist_6096": "Plik „{0}” nie istnieje.",
+  "File_0_does_not_exist_according_to_earlier_cached_lookups_6240": "Biorąc pod uwagę wcześniejsze wyszukiwania w pamięci podręcznej, plik „{0}” nie istnieje.",
   "File_0_exist_use_it_as_a_name_resolution_result_6097": "Plik „{0}” istnieje — użyj go jako wyniku rozpoznawania nazw.",
+  "File_0_exists_according_to_earlier_cached_lookups_6239": "Biorąc pod uwagę wcześniejsze wyszukiwania w pamięci podręcznej, plik „{0}” istnieje.",
   "File_0_has_an_unsupported_extension_The_only_supported_extensions_are_1_6054": "Plik „{0}” ma nieobsługiwane rozszerzenie. Obsługiwane są tylko rozszerzenia {1}.",
   "File_0_has_an_unsupported_extension_so_skipping_it_6081": "Plik „{0}” ma nieobsługiwane rozszerzenie, dlatego zostanie pominięty.",
   "File_0_is_a_JavaScript_file_Did_you_mean_to_enable_the_allowJs_option_6504": "Plik „{0}” jest plikiem JavaScript. Czy chodziło Ci o włączenie opcji „allowJs”?",
@@ -587,16 +689,32 @@
   "File_0_is_not_listed_within_the_file_list_of_project_1_Projects_must_list_all_files_or_use_an_includ_6307": "Plik „{0}” nie znajduje się na liście plików projektu „{1}”. Projekty muszą zawierać listę wszystkich plików lub używać wzorca „include”.",
   "File_0_is_not_under_rootDir_1_rootDir_is_expected_to_contain_all_source_files_6059": "Plik „{0}” nie znajduje się w katalogu „rootDir” „{1}”. Katalog „rootDir” powinien zawierać wszystkie pliki źródłowe.",
   "File_0_not_found_6053": "Nie można odnaleźć pliku '{0}'.",
+  "File_Management_6245": "Zarządzanie plikami",
   "File_change_detected_Starting_incremental_compilation_6032": "Wykryto zmianę pliku. Trwa rozpoczynanie kompilacji przyrostowej...",
   "File_is_a_CommonJS_module_it_may_be_converted_to_an_ES6_module_80001": "Plik jest modułem CommonJS. Może zostać przekonwertowany na moduł ES6.",
+  "File_is_default_library_for_target_specified_here_1426": "Plik to domyślna biblioteka dla elementu docelowego określonego w tym miejscu.",
+  "File_is_entry_point_of_type_library_specified_here_1419": "Plik to punkt wejścia biblioteki typów określonej w tym miejscu.",
+  "File_is_included_via_import_here_1399": "Plik jest dołączony w tym miejscu za pomocą importu.",
+  "File_is_included_via_library_reference_here_1406": "Plik jest dołączony w tym miejscu za pomocą odwołania do biblioteki.",
+  "File_is_included_via_reference_here_1401": "Plik jest dołączony w tym miejscu za pomocą odwołania.",
+  "File_is_included_via_type_library_reference_here_1404": "Plik jest dołączony w tym miejscu za pomocą odwołania do biblioteki typów.",
+  "File_is_library_specified_here_1423": "Plik to biblioteka określona w tym miejscu.",
+  "File_is_matched_by_files_list_specified_here_1410": "Plik jest zgodny z listą „files” określoną w tym miejscu.",
+  "File_is_matched_by_include_pattern_specified_here_1408": "Plik jest zgodny z wzorcem dołączania określonym w tym miejscu.",
+  "File_is_output_from_referenced_project_specified_here_1413": "Plik to dane wyjściowe z przywoływanego projektu określonego w tym miejscu.",
+  "File_is_output_of_project_reference_source_0_1428": "Plik to dane wyjściowe ze źródła odwołania do projektu „{0}”",
+  "File_is_source_from_referenced_project_specified_here_1416": "Plik to źródło z przywoływanego projektu określonego w tym miejscu.",
   "File_name_0_differs_from_already_included_file_name_1_only_in_casing_1149": "Nazwa pliku „{0}” różni się od już dołączonej nazwy pliku „{1}” tylko wielkością liter.",
   "File_name_0_has_a_1_extension_stripping_it_6132": "Nazwa pliku „{0}” ma rozszerzenie „{1}” — zostanie ono usunięte.",
+  "File_redirects_to_file_0_1429": "Plik przekierowuje do pliku „{0}”",
   "File_specification_cannot_contain_a_parent_directory_that_appears_after_a_recursive_directory_wildca_5065": "Specyfikacja pliku nie może zawierać katalogu nadrzędnego („..”) wyświetlanego po symbolu wieloznacznym katalogu rekursywnego („**”): „{0}”.",
   "File_specification_cannot_end_in_a_recursive_directory_wildcard_Asterisk_Asterisk_Colon_0_5010": "Specyfikacja pliku nie może kończyć się cyklicznym symbolem wieloznacznym katalogu („**”): „{0}”.",
+  "Filters_results_from_the_include_option_6627": "Filtruj wyniki z opcji „include”.",
   "Fix_all_detected_spelling_errors_95026": "Napraw wszystkie wykryte błędy pisowni",
   "Fix_all_expressions_possibly_missing_await_95085": "Napraw wszystkie wyrażenia, w których prawdopodobnie brakuje operatora „await”",
   "Fix_all_implicit_this_errors_95107": "Usuń wszystkie niejawne błędy „this”",
   "Fix_all_incorrect_return_type_of_an_async_functions_90037": "Napraw wszystkie niepoprawne zwracane typy funkcji asynchronicznych",
+  "For_await_loops_cannot_be_used_inside_a_class_static_block_18038": "Pętli \"For await\" nie można używać wewnątrz bloku statycznego klasy.",
   "Found_0_errors_6217": "Znaleziono błędy: {0}.",
   "Found_0_errors_Watching_for_file_changes_6194": "Znalezione błędy: {0}. Obserwowanie zmian plików.",
   "Found_1_error_6216": "Znaleziono 1 błąd.",
@@ -610,11 +728,14 @@
   "Function_implementation_name_must_be_0_2389": "Implementacja funkcji musi mieć nazwę „{0}”.",
   "Function_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_ref_7024": "Dla funkcji niejawnie określono zwracany typ „any”, ponieważ nie zawiera ona adnotacji zwracanego typu i jest przywoływana bezpośrednio lub pośrednio w jednym z jej zwracanych wyrażeń.",
   "Function_lacks_ending_return_statement_and_return_type_does_not_include_undefined_2366": "Funkcja nie zawiera końcowej instrukcji return, a zwracany typ nie obejmuje wartości „undefined”.",
+  "Function_not_implemented_95159": "Funkcja nie jest zaimplementowana.",
   "Function_overload_must_be_static_2387": "Przeciążenie funkcji musi być statyczne.",
   "Function_overload_must_not_be_static_2388": "Przeciążenie funkcji nie może być statyczne.",
   "Function_type_notation_must_be_parenthesized_when_used_in_a_union_type_1385": "Notacja typu funkcji musi być ujęta w nawiasy, jeśli jest używana w typie unii.",
   "Function_type_notation_must_be_parenthesized_when_used_in_an_intersection_type_1387": "Notacja typu funkcji musi być ujęta w nawiasy, jeśli jest używana w typie przecięcia.",
   "Function_type_which_lacks_return_type_annotation_implicitly_has_an_0_return_type_7014": "Dla typu funkcji bez adnotacji zwracanego typu jest niejawnie określony zwracany typ „{0}”.",
+  "Function_with_bodies_can_only_merge_with_classes_that_are_ambient_2814": "Funkcja z treścią może tylko scalać z klasami, które są otaczające.",
+  "Generate_d_ts_files_from_TypeScript_and_JavaScript_files_in_your_project_6612": "Generuj pliki d.ts z plików TypeScript i JavaScript w projekcie.",
   "Generate_get_and_set_accessors_95046": "Generuj metody dostępu „get” i „set”.",
   "Generate_get_and_set_accessors_for_all_overriding_properties_95119": "Generuj metody dostępu „get” i „set” dla wszystkich właściwości przesłaniających",
   "Generates_a_CPU_profile_6223": "Generuje profil procesora CPU.",
@@ -627,13 +748,13 @@
   "Generators_are_only_available_when_targeting_ECMAScript_2015_or_higher_1220": "Generatory są dostępne tylko wtedy, gdy jest używany język ECMAScript 2015 lub nowszy.",
   "Generic_type_0_requires_1_type_argument_s_2314": "Typ ogólny „{0}” wymaga następującej liczby argumentów typu: {1}.",
   "Generic_type_0_requires_between_1_and_2_type_arguments_2707": "Typ ogólny „{0}” wymaga od {1} do {2} argumentów typu.",
-  "Getter_and_setter_accessors_do_not_agree_in_visibility_2379": "Widoczności metod dostępu pobierającej i ustawiającej są niezgodne.",
   "Global_module_exports_may_only_appear_at_top_level_1316": "Globalne eksporty modułu mogą występować tylko na najwyższym poziomie.",
   "Global_module_exports_may_only_appear_in_declaration_files_1315": "Globalne eksporty modułu mogą występować tylko w plikach deklaracji.",
   "Global_module_exports_may_only_appear_in_module_files_1314": "Globalne eksporty modułu mogą występować tylko w plikach modułów.",
   "Global_type_0_must_be_a_class_or_interface_type_2316": "Typ globalny „{0}” musi być typem klasy lub interfejsu.",
   "Global_type_0_must_have_1_type_parameter_s_2317": "Typ globalny „{0}” musi mieć następującą liczbę parametrów typu: {1}.",
   "Have_recompiles_in_incremental_and_watch_assume_that_changes_within_a_file_will_only_affect_files_di_6384": "W przypadku ponownego kompilowania w parametrach „--incremental” i „--watch” przyjmuje się, że zmiany w pliku będą miały wpływ tylko na pliki bezpośrednio od niego zależne.",
+  "Have_recompiles_in_projects_that_use_incremental_and_watch_mode_assume_that_changes_within_a_file_wi_6606": "Określ, że zmiany w pliku będą wpływać tylko na pliki bezpośrednio od niego zależne podczas ponownego kompilowania w projektach używających trybów „incremental” (przyrostowo) i „watch” (obserwacja).",
   "Hexadecimal_digit_expected_1125": "Oczekiwano cyfry szesnastkowej.",
   "Identifier_expected_0_is_a_reserved_word_at_the_top_level_of_a_module_1262": "Oczekiwano identyfikatora. „{0}” jest słowem zastrzeżonym na najwyższym poziomie modułu.",
   "Identifier_expected_0_is_a_reserved_word_in_strict_mode_1212": "Oczekiwano identyfikatora. „{0}” jest wyrazem zastrzeżonym w trybie z ograniczeniami.",
@@ -642,8 +763,9 @@
   "Identifier_expected_0_is_a_reserved_word_that_cannot_be_used_here_1359": "Oczekiwano identyfikatora. „{0}” jest słowem zastrzeżonym, którego nie można użyć w tym miejscu.",
   "Identifier_expected_1003": "Oczekiwano identyfikatora.",
   "Identifier_expected_esModule_is_reserved_as_an_exported_marker_when_transforming_ECMAScript_modules_1216": "Oczekiwano identyfikatora. Ciąg „__esModule” jest zastrzeżony jako eksportowany znacznik podczas transformowania modułów ECMAScript.",
-  "If_the_0_package_actually_exposes_this_module_consider_sending_a_pull_request_to_amend_https_Colon_S_7040": "Jeśli pakiet „{0}” faktycznie udostępnia ten moduł, rozważ wysłanie żądania ściągnięcia w celu zmiany elementu „https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/{1}”",
+  "If_the_0_package_actually_exposes_this_module_consider_sending_a_pull_request_to_amend_https_Colon_S_7040": "Jeśli pakiet \"{0}\" faktycznie udostępnia ten moduł, rozważ wysłanie żądania ściągnięcia w celu zmiany elementu \"https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/{1}\"",
   "Ignore_this_error_message_90019": "Ignoruj ten komunikat o błędzie",
+  "Ignoring_tsconfig_json_compiles_the_specified_files_with_default_compiler_options_6924": "Ignorowanie pliku tsconfig.json, kompiluje określone pliki z domyślnymi opcjami kompilatora",
   "Implement_all_inherited_abstract_classes_95040": "Zaimplementuj wszystkie dziedziczone klasy abstrakcyjne",
   "Implement_all_unimplemented_interfaces_95032": "Zaimplementuj wszystkie niezaimplementowane interfejsy",
   "Implement_inherited_abstract_class_90007": "Wdróż odziedziczoną klasę abstrakcyjną",
@@ -660,14 +782,23 @@
   "Import_may_be_converted_to_a_default_import_80003": "Import może zostać przekonwertowany na import domyślny.",
   "Import_name_cannot_be_0_2438": "Import nie może mieć nazwy „{0}”.",
   "Import_or_export_declaration_in_an_ambient_module_declaration_cannot_reference_module_through_relati_2439": "Deklaracja importu lub eksportu w deklaracji otaczającego modułu nie może przywoływać modułu za pomocą jego nazwy względnej.",
+  "Imported_via_0_from_file_1_1393": "Zaimportowano za pośrednictwem elementu {0} z pliku „{1}”",
+  "Imported_via_0_from_file_1_to_import_importHelpers_as_specified_in_compilerOptions_1395": "Zaimportowano za pośrednictwem elementu {0} z pliku „{1}” w celu zaimportowania elementów „importHelpers” zgodnie z opcjami compilerOptions",
+  "Imported_via_0_from_file_1_to_import_jsx_and_jsxs_factory_functions_1397": "Zaimportowano za pośrednictwem elementu {0} z pliku „{1}” w celu zaimportowania funkcji fabryki „jsx” i „jsxs”",
+  "Imported_via_0_from_file_1_with_packageId_2_1394": "Zaimportowano za pośrednictwem elementu {0} z pliku „{1}” o identyfikatorze packageId „{2}”",
+  "Imported_via_0_from_file_1_with_packageId_2_to_import_importHelpers_as_specified_in_compilerOptions_1396": "Zaimportowano za pośrednictwem elementu {0} z pliku „{1}” o identyfikatorze packageId „{2}” w celu zaimportowania elementów „importHelpers” zgodnie z opcjami compilerOptions",
+  "Imported_via_0_from_file_1_with_packageId_2_to_import_jsx_and_jsxs_factory_functions_1398": "Zaimportowano za pośrednictwem elementu {0} z pliku „{1}” o identyfikatorze packageId „{2}” w celu zaimportowania funkcji fabryki „jsx” i „jsxs”",
   "Imports_are_not_permitted_in_module_augmentations_Consider_moving_them_to_the_enclosing_external_mod_2667": "Importy nie są dozwolone w rozszerzeniach modułów. Rozważ przeniesienie ich do obejmującego modułu zewnętrznego.",
   "In_ambient_enum_declarations_member_initializer_must_be_constant_expression_1066": "W deklaracjach wyliczenia otoczenia inicjator składowej musi być wyrażeniem stałym.",
   "In_an_enum_with_multiple_declarations_only_one_declaration_can_omit_an_initializer_for_its_first_enu_2432": "W przypadku wyliczenia z wieloma deklaracjami tylko jedna deklaracja może pominąć inicjator dla pierwszego elementu wyliczenia.",
+  "Include_a_list_of_files_This_does_not_support_glob_patterns_as_opposed_to_include_6635": "Dołącz listę plików. Nie obsługuje to wzorców globalnych, w przeciwieństwie do elementu „include”.",
   "Include_modules_imported_with_json_extension_6197": "Uwzględnij moduły zaimportowane z rozszerzeniem „json”",
-  "Include_undefined_in_index_signature_results_6800": "Uwzględnij element „undefined” w wynikach sygnatury indeksu",
+  "Include_source_code_in_the_sourcemaps_inside_the_emitted_JavaScript_6644": "Uwzględnij kod źródłowy w mapach źródła wewnątrz emitowanego kodu JavaScript.",
+  "Include_sourcemap_files_inside_the_emitted_JavaScript_6643": "Uwzględnij pliki mapy źródła w emitowanym kodzie JavaScript.",
+  "Include_undefined_in_index_signature_results_6716": "Uwzględnij element „undefined” w wynikach sygnatury indeksu",
+  "Including_watch_w_will_start_watching_the_current_project_for_the_file_changes_Once_set_you_can_conf_6914": "Zawarcie elementu --watch spowoduje, że -w rozpocznie obserwowanie bieżącego projektu w kierunku zmian w plikach. Po skonfigurowaniu ustawienia możesz określić tryb obserwacji za pomocą:",
+  "Index_signature_for_type_0_is_missing_in_type_1_2329": "Brak sygnatury indeksu dla typu „{0}” w typie „{1}”.",
   "Index_signature_in_type_0_only_permits_reading_2542": "Sygnatura indeksu w typie „{0}” zezwala tylko na odczytywanie.",
-  "Index_signature_is_missing_in_type_0_2329": "Brak sygnatury indeksu w typie „{0}”.",
-  "Index_signatures_are_incompatible_2330": "Sygnatury indeksów są niezgodne.",
   "Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local_2395": "Wszystkie poszczególne deklaracje w scalonej deklaracji „{0}” muszą być wyeksportowane lub lokalne.",
   "Infer_all_types_from_usage_95023": "Wywnioskuj wszystkie typy na podstawie użycia",
   "Infer_function_return_type_95148": "Wnioskuj zwracany typ funkcji",
@@ -676,6 +807,7 @@
   "Infer_type_of_0_from_usage_95011": "Wnioskuj typ elementu „{0}” na podstawie użycia",
   "Initialize_property_0_in_the_constructor_90020": "Zainicjuj właściwość „{0}” w konstruktorze",
   "Initialize_static_property_0_90021": "Zainicjuj właściwość statyczną „{0}”",
+  "Initializer_for_property_0_2811": "Inicjator właściwości \"{0}\"",
   "Initializer_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor_2301": "Inicjator zmiennej składowej wystąpienia „{0}” nie może przywoływać identyfikatora „{1}” zadeklarowanego w konstruktorze.",
   "Initializer_provides_no_value_for_this_binding_element_and_the_binding_element_has_no_default_value_2525": "Inicjator nie określa żadnej wartości dla tego elementu powiązania, a element powiązania nie ma wartości domyślnej.",
   "Initializers_are_not_allowed_in_ambient_contexts_1039": "Inicjatory są niedozwolone w otaczających kontekstach.",
@@ -686,12 +818,16 @@
   "Interface_0_cannot_simultaneously_extend_types_1_and_2_2320": "Interfejs „{0}” nie może jednocześnie rozszerzać typów „{1}” i „{2}”.",
   "Interface_0_incorrectly_extends_interface_1_2430": "Interfejs „{0}” niepoprawnie rozszerza interfejs „{1}”.",
   "Interface_declaration_cannot_have_implements_clause_1176": "Deklaracja interfejsu nie może mieć klauzuli „implements”.",
+  "Interface_must_be_given_a_name_1438": "Interfejs musi mieć nazwę.",
   "Interface_name_cannot_be_0_2427": "Interfejs nie może mieć nazwy „{0}”.",
+  "Interop_Constraints_6252": "Ograniczenia międzyoperacyjności",
+  "Interpret_optional_property_types_as_written_rather_than_adding_undefined_6243": "Interpretuj opcjonalne typy właściwości jako zapisane, zamiast dodawać element \"undefined\".",
   "Invalid_character_1127": "Nieprawidłowy znak.",
   "Invalid_module_name_in_augmentation_Module_0_resolves_to_an_untyped_module_at_1_which_cannot_be_augm_2665": "Nieprawidłowa nazwa modułu w rozszerzeniu. Moduł „{0}” jest rozpoznawany jako moduł bez typu na poziomie „{1}”, którego nie można rozszerzyć.",
   "Invalid_module_name_in_augmentation_module_0_cannot_be_found_2664": "Nieprawidłowa nazwa modułu w rozszerzeniu. Nie można znaleźć modułu „{0}”.",
   "Invalid_reference_directive_syntax_1084": "Nieprawidłowa składnia dyrektywy „reference”.",
   "Invalid_use_of_0_Class_definitions_are_automatically_in_strict_mode_1210": "Nieprawidłowe użycie elementu „{0}”. Definicje klas są określane automatycznie w trybie z ograniczeniami.",
+  "Invalid_use_of_0_It_cannot_be_used_inside_a_class_static_block_18039": "Nieprawidłowe użycie elementu \"{0}\". Nie można go użyć wewnątrz bloku statycznego klasy.",
   "Invalid_use_of_0_Modules_are_automatically_in_strict_mode_1215": "Nieprawidłowe użycie elementu „{0}”. Moduły są określane automatycznie w trybie z ograniczeniami.",
   "Invalid_use_of_0_in_strict_mode_1100": "Nieprawidłowe użycie elementu „{0}” w trybie z ograniczeniami.",
   "Invalid_value_for_jsxFactory_0_is_not_a_valid_identifier_or_qualified_name_5067": "Nieprawidłowa wartość elementu „jsxFactory”. „{0}” to nie jest prawidłowy identyfikator ani kwalifikowana nazwa.",
@@ -723,13 +859,18 @@
   "JSX_expressions_may_not_use_the_comma_operator_Did_you_mean_to_write_an_array_18007": "Wyrażenia JSX nie mogą używać operatora przecinka. Czy chodziło Ci o zapisanie tablicy?",
   "JSX_expressions_must_have_one_parent_element_2657": "Wyrażenia JSX muszą mieć jeden element nadrzędny.",
   "JSX_fragment_has_no_corresponding_closing_tag_17014": "Fragment kodu JSX nie ma odpowiedniego tagu zamykającego.",
+  "JSX_property_access_expressions_cannot_include_JSX_namespace_names_2633": "Wyrażenia dostępu do właściwości JSX nie mogą zawierać nazw przestrzeni nazw JSX",
   "JSX_spread_child_must_be_an_array_type_2609": "Element podrzędny rozkładu JSX musi być typem tablicy.",
+  "JavaScript_Support_6247": "Pomoc techniczna języka JavaScript",
   "Jump_target_cannot_cross_function_boundary_1107": "Cel skoku nie może przekraczać granicy funkcji.",
   "KIND_6034": "RODZAJ",
   "Keywords_cannot_contain_escape_characters_1260": "Słowa kluczowe nie mogą zawierać znaków ucieczki.",
   "LOCATION_6037": "LOKALIZACJA",
+  "Language_and_Environment_6254": "Język i środowisko",
   "Language_service_is_disabled_9004": "Usługa języka jest wyłączona.",
   "Left_side_of_comma_operator_is_unused_and_has_no_side_effects_2695": "Lewa strona operatora „przecinek” jest nieużywana i nie ma żadnych efektów ubocznych.",
+  "Library_0_specified_in_compilerOptions_1422": "Biblioteka „{0}” została określona w opcjach compilerOptions",
+  "Library_referenced_via_0_from_file_1_1405": "Biblioteka jest przywoływana za pośrednictwem elementu „{0}” z pliku „{1}”",
   "Line_break_not_permitted_here_1142": "Podział wiersza nie jest tutaj dozwolony.",
   "Line_terminator_not_permitted_before_arrow_1200": "Terminator wiersza nie jest dozwolony przed strzałką.",
   "List_of_folders_to_include_type_definitions_from_6161": "Lista folderów, z których mają być uwzględnione definicje typów.",
@@ -739,11 +880,14 @@
   "Loading_module_0_from_node_modules_folder_target_file_type_1_6098": "Ładowanie modułu „{0}” z folderu „node_modules”, docelowy typ pliku: „{1}”.",
   "Loading_module_as_file_Slash_folder_candidate_module_location_0_target_file_type_1_6095": "Ładowanie modułu jako pliku/folderu, lokalizacja modułu kandydata: „{0}”, docelowy typ pliku: „{1}”.",
   "Locale_must_be_of_the_form_language_or_language_territory_For_example_0_or_1_6048": "Ustawienia regionalne muszą mieć postać <język> lub <język>-<terytorium>. Na przykład „{0}” lub „{1}”.",
+  "Log_paths_used_during_the_moduleResolution_process_6706": "Rejestruj ścieżki używane podczas procesu „moduleResolution”.",
   "Longest_matching_prefix_for_0_is_1_6108": "Najdłuższy zgodny prefiks dla „{0}” to „{1}”.",
   "Looking_up_in_node_modules_folder_initial_location_0_6125": "Wyszukiwanie w folderze „node_modules”, początkowa lokalizacja: „{0}”.",
   "Make_all_super_calls_the_first_statement_in_their_constructor_95036": "Wszystkie wywołania „super()” powinny być pierwszą instrukcją w konstruktorze",
+  "Make_keyof_only_return_strings_instead_of_string_numbers_or_symbols_Legacy_option_6650": "Określ, że element keyof ma zwracać tylko ciągi zamiast ciągów, liczb i symboli. Starsza opcja.",
   "Make_super_call_the_first_statement_in_the_constructor_90002": "Ustaw wywołanie „super()” jako pierwszą instrukcję w konstruktorze",
   "Mapped_object_type_implicitly_has_an_any_template_type_7039": "Zmapowany typ obiektu niejawnie ma typ szablonu „any”.",
+  "Matched_by_include_pattern_0_in_1_1407": "Zgodne z wzorcem dołączania „{0}” w elemencie „{1}”",
   "Member_0_implicitly_has_an_1_type_7008": "Dla składowej „{0}” niejawnie określono typ „{1}”.",
   "Member_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage_7045": "Element członkowski „{0}” niejawnie ma typ „{1}”, ale lepszy typ można wywnioskować na podstawie użycia.",
   "Merge_conflict_marker_encountered_1185": "Napotkano znacznik konfliktu scalania.",
@@ -752,6 +896,7 @@
   "Method_0_cannot_have_an_implementation_because_it_is_marked_abstract_1245": "Metoda „{0}” nie może mieć implementacji, ponieważ jest oznaczona jako abstrakcyjna.",
   "Method_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2_4101": "Metoda „{0}” wyeksportowanego interfejsu ma nazwę „{1}” z modułu prywatnego „{2}” lub używa tej nazwy.",
   "Method_0_of_exported_interface_has_or_is_using_private_name_1_4102": "Metoda „{0}” wyeksportowanego interfejsu ma nazwę prywatną „{1}” lub używa tej nazwy.",
+  "Method_not_implemented_95158": "Metoda nie jest zaimplementowana.",
   "Modifiers_cannot_appear_here_1184": "Modyfikatory nie mogą występować w tym miejscu.",
   "Module_0_can_only_be_default_imported_using_the_1_flag_1259": "Moduł „{0}” może być importowany domyślnie tylko przy użyciu flagi „{1}”",
   "Module_0_declares_1_locally_but_it_is_exported_as_2_2460": "Moduł „{0}” deklaruje element „{1}” lokalnie, ale jest on eksportowany jako „{2}”.",
@@ -769,13 +914,14 @@
   "Module_0_was_resolved_as_locally_declared_ambient_module_in_file_1_6144": "Moduł „{0}” został rozpoznany jako otaczający moduł zadeklarowany lokalnie w pliku „{1}”.",
   "Module_0_was_resolved_to_1_but_jsx_is_not_set_6142": "Moduł „{0}” został rozpoznany jako „{1}”, ale nie jest ustawiona opcja „--jsx”.",
   "Module_0_was_resolved_to_1_but_resolveJsonModule_is_not_used_7042": "Moduł „{0}” został rozpoznany jako „{1}”, ale opcja „--resolveJsonModule” nie jest używana.",
-  "Module_Resolution_Options_6174": "Opcje rozpoznawania modułu",
+  "Module_declaration_names_may_only_use_or_quoted_strings_1443": "W nazwach deklaracji modułu można używać tylko ciągi ujęte w cudzysłów \" lub „”.",
   "Module_name_0_matched_pattern_1_6092": "Nazwa modułu: „{0}”, dopasowany wzorzec: „{1}”.",
   "Module_name_0_was_not_resolved_6090": "======== Nazwa modułu „{0}” nie została rozpoznana. ========",
   "Module_name_0_was_successfully_resolved_to_1_6089": "======== Nazwa modułu „{0}” została pomyślnie rozpoznana jako „{1}”. ========",
   "Module_name_0_was_successfully_resolved_to_1_with_Package_ID_2_6218": "======== Nazwa modułu „{0}” została pomyślnie rozpoznana jako „{1}” z identyfikatorem pakietu „{2}”. ========",
   "Module_resolution_kind_is_not_specified_using_0_6088": "Rodzaj rozpoznawania modułów nie został podany. Zostanie użyty rodzaj „{0}”.",
   "Module_resolution_using_rootDirs_has_failed_6111": "Nie można rozpoznać modułów przy użyciu opcji „rootDirs”.",
+  "Modules_6244": "Moduły",
   "Move_labeled_tuple_element_modifiers_to_labels_95117": "Przenieś modyfikatory elementów krotki z etykietami do etykiet",
   "Move_to_a_new_file_95049": "Przenieś do nowego pliku",
   "Multiple_consecutive_numeric_separators_are_not_permitted_6189": "Kolejne następujące po sobie separatory liczbowe nie są dozwolone.",
@@ -784,11 +930,14 @@
   "Name_is_not_valid_95136": "Nazwa nie jest prawidłowa",
   "Named_property_0_of_types_1_and_2_are_not_identical_2319": "Nazwane właściwości „{0}” typów „{1}” i „{2}” nie są identyczne.",
   "Namespace_0_has_no_exported_member_1_2694": "Przestrzeń nazw „{0}” nie ma wyeksportowanej składowej „{1}”.",
+  "Namespace_must_be_given_a_name_1437": "Przestrzeń nazw musi mieć nazwę.",
+  "Namespace_name_cannot_be_0_2819": "Przestrzeń nazw nie może mieć nazwy „{0}”.",
   "No_base_constructor_has_the_specified_number_of_type_arguments_2508": "Żaden z konstruktorów podstawowych nie ma określonej liczby argumentów typu.",
   "No_constituent_of_type_0_is_callable_2755": "Żadna składowa typu „{0}” nie jest wywoływalna.",
   "No_constituent_of_type_0_is_constructable_2759": "Żadnej składowej typu „{0}” nie można skonstruować.",
   "No_index_signature_with_a_parameter_of_type_0_was_found_on_type_1_7054": "Nie znaleziono żadnej sygnatury indeksu z parametrem typu „{0}” w typie „{1}”.",
   "No_inputs_were_found_in_config_file_0_Specified_include_paths_were_1_and_exclude_paths_were_2_18003": "Nie można znaleźć danych wejściowych w pliku konfiguracji „{0}”. Określone ścieżki „include” to „{1}”, a „exclude” to „{2}”.",
+  "No_longer_supported_In_early_versions_manually_set_the_text_encoding_for_reading_files_6608": "Nie jest już obsługiwane. W starszych wersjach umożliwia ręczne konfigurowanie kodowania tekstu dla odczytywania plików.",
   "No_overload_expects_0_arguments_but_overloads_do_exist_that_expect_either_1_or_2_arguments_2575": "Żadne przeciążenie nie oczekuje {0} argumentów, ale istnieją przeciążenia, które oczekują {1} lub {2} argumentów.",
   "No_overload_expects_0_type_arguments_but_overloads_do_exist_that_expect_either_1_or_2_type_arguments_2743": "Żadne przeciążenie nie oczekuje {0} argumentów typu, ale istnieją przeciążenia, które oczekują {1} lub {2} argumentów typu.",
   "No_overload_matches_this_call_2769": "Żadne przeciążenie nie jest zgodne z tym wywołaniem.",
@@ -802,7 +951,6 @@
   "Not_all_code_paths_return_a_value_7030": "Nie wszystkie ścieżki w kodzie zwracają wartość.",
   "Not_all_constituents_of_type_0_are_callable_2756": "Nie wszystkie składowe typu „{0}” są wywoływalne.",
   "Not_all_constituents_of_type_0_are_constructable_2760": "Nie wszystkie składowe typu „{0}” można skonstruować.",
-  "Numeric_index_type_0_is_not_assignable_to_string_index_type_1_2413": "Nie można przypisać typu indeksu numerycznego „{0}” do typu indeksu ciągu „{1}”.",
   "Numeric_literals_with_absolute_values_equal_to_2_53_or_greater_are_too_large_to_be_represented_accur_80008": "Literały liczbowe z wartościami bezwzględnymi równymi 2^53 lub większymi są zbyt duże, aby mogły być dokładnie reprezentowane jako liczby całkowite.",
   "Numeric_separators_are_not_allowed_here_6188": "Separatory liczbowe nie są dozwolone w tym miejscu.",
   "Object_is_of_type_unknown_2571": "Obiekt jest typu „nieznany”.",
@@ -826,9 +974,11 @@
   "Only_identifiers_Slashqualified_names_with_optional_type_arguments_are_currently_supported_in_a_clas_9002": "Klauzula „extends” klasy obsługuje obecnie tylko identyfikatory/nazwy kwalifikowane z opcjonalnymi argumentami typu.",
   "Only_named_exports_may_use_export_type_1383": "Tylko nazwane eksporty mogą używać elementu „export type”.",
   "Only_numeric_enums_can_have_computed_members_but_this_expression_has_type_0_If_you_do_not_need_exhau_18033": "Tylko wyliczenia numeryczne mogą mieć składowe obliczane, ale to wyrażenie ma typ „{0}”. Jeśli nie potrzebujesz sprawdzeń kompletności, rozważ użycie literału obiektu.",
+  "Only_output_d_ts_files_and_not_JavaScript_files_6623": "Generuj tylko pliki d.ts, a nie pliki JavaScript.",
   "Only_public_and_protected_methods_of_the_base_class_are_accessible_via_the_super_keyword_2340": "Tylko publiczne i chronione metody klasy bazowej są dostępne przy użyciu słowa kluczowego „super”.",
   "Operator_0_cannot_be_applied_to_type_1_2736": "Nie można zastosować operatora „{0}” do typu „{1}”.",
   "Operator_0_cannot_be_applied_to_types_1_and_2_2365": "Nie można zastosować operatora „{0}” do typów „{1}” i „{2}”.",
+  "Opt_a_project_out_of_multi_project_reference_checking_when_editing_6619": "Rezygnacja ze sprawdzania odwołań do wielu projektów podczas edytowania projektu.",
   "Option_0_can_only_be_specified_in_tsconfig_json_file_or_set_to_false_or_null_on_command_line_6230": "Opcję „{0}” można określić tylko w pliku „tsconfig.json” albo ustawić na wartość „false” lub „null” w wierszu polecenia.",
   "Option_0_can_only_be_specified_in_tsconfig_json_file_or_set_to_null_on_command_line_6064": "Opcję „{0}” można określić tylko w pliku „tsconfig.json” albo ustawić na wartość „null” w wierszu polecenia.",
   "Option_0_can_only_be_used_when_either_option_inlineSourceMap_or_option_sourceMap_is_provided_5051": "Opcja „{0}” może być używana tylko w przypadku podania opcji „--inlineSourceMap” lub „--sourceMap”.",
@@ -839,16 +989,22 @@
   "Option_0_cannot_be_specified_without_specifying_option_1_or_option_2_5069": "Opcji „{0}” nie można określić bez opcji „{1}” lub opcji „{2}”.",
   "Option_0_should_have_array_of_strings_as_a_value_6103": "Wartość opcji „{0}” powinna być tablicą łańcuchów.",
   "Option_build_must_be_the_first_command_line_argument_6369": "Opcja „--build” musi być pierwszym argumentem wiersza polecenia.",
-  "Option_incremental_can_only_be_specified_using_tsconfig_emitting_to_single_file_or_when_option_tsBui_5074": "Opcję „--incremental” można określić tylko za pomocą pliku tsconfig, emitując do pojedynczego pliku lub gdy określono opcję „--tsBuildInfoFile”.",
+  "Option_incremental_can_only_be_specified_using_tsconfig_emitting_to_single_file_or_when_option_tsBui_5074": "Opcję \"--incremental\" można określić tylko za pomocą pliku tsconfig, emitując do pojedynczego pliku lub gdy określono opcję \"--tsBuildInfoFile\".",
   "Option_isolatedModules_can_only_be_used_when_either_option_module_is_provided_or_option_target_is_ES_5047": "Opcji „isolatedModules” można użyć tylko wtedy, gdy podano opcję „--module” lub opcja „target” określa cel „ES2015” lub wyższy.",
+  "Option_preserveConstEnums_cannot_be_disabled_when_isolatedModules_is_enabled_5091": "Nie można wyłączyć opcji „preserveConstEnums”, jeśli opcja „isolatedModules” jest włączona.",
   "Option_project_cannot_be_mixed_with_source_files_on_a_command_line_5042": "Nie można mieszać opcji „project” z plikami źródłowymi w wierszu polecenia.",
   "Option_resolveJsonModule_can_only_be_specified_when_module_code_generation_is_commonjs_amd_es2015_or_5071": "Opcję „--resolveJsonModule” można określić tylko wtedy, gdy generacja kodu modułu to „commonjs”, „amd”, „es2015” lub „esNext”.",
   "Option_resolveJsonModule_cannot_be_specified_without_node_module_resolution_strategy_5070": "Nie można określić opcji „--resolveJsonModule” bez strategii rozpoznawania modułów „node”.",
   "Options_0_and_1_cannot_be_combined_6370": "Nie można połączyć opcji „{0}” i „{1}”.",
   "Options_Colon_6027": "Opcje:",
+  "Output_Formatting_6256": "Formatowanie danych wyjściowych",
+  "Output_compiler_performance_information_after_building_6615": "Informacje o wydajności kompilatora danych wyjściowych po skompilowaniu.",
   "Output_directory_for_generated_declaration_files_6166": "Katalog wyjściowy dla wygenerowanych plików deklaracji.",
   "Output_file_0_from_project_1_does_not_exist_6309": "Plik wyjściowy „{0}” z projektu „{1}” nie istnieje",
   "Output_file_0_has_not_been_built_from_source_file_1_6305": "Plik wyjściowy „{0}” nie został utworzony na podstawie pliku źródłowego „{1}”.",
+  "Output_from_referenced_project_0_included_because_1_specified_1411": "Dane wyjściowe z przywoływanego projektu „{0}” zostały dołączone, ponieważ określono element „{1}”",
+  "Output_from_referenced_project_0_included_because_module_is_specified_as_none_1412": "Dane wyjściowe z przywoływanego projektu „{0}” zostały dołączone, ponieważ określono wartość „none” dla opcji „--module”",
+  "Output_more_detailed_compiler_performance_information_after_building_6632": "Podaj bardziej szczegółowe informacje o wydajności kompilatora po zakończeniu kompilacji.",
   "Overload_0_of_1_2_gave_the_following_error_2772": "Przeciążenie {0} z {1}, „{2}”, zwróciło następujący błąd.",
   "Overload_signatures_must_all_be_abstract_or_non_abstract_2512": "Wszystkie sygnatury przeciążeń muszą być abstrakcyjne lub nieabstrakcyjne.",
   "Overload_signatures_must_all_be_ambient_or_non_ambient_2384": "Wszystkie sygnatury przeciążeń muszą być otaczającymi sygnaturami lub żadna nie może być otaczającą sygnaturą.",
@@ -892,18 +1048,25 @@
   "Parameter_type_of_public_static_setter_0_from_exported_class_has_or_is_using_name_1_from_private_mod_4034": "Typ parametru publicznej statycznej metody ustawiającej „{0}” z wyeksportowanej klasy ma nazwę „{1}” z modułu prywatnego „{2}” lub używa tej nazwy.",
   "Parameter_type_of_public_static_setter_0_from_exported_class_has_or_is_using_private_name_1_4035": "Typ parametru publicznej statycznej metody ustawiającej „{0}” z wyeksportowanej klasy ma nazwę prywatną „{1}” lub używa tej nazwy.",
   "Parse_in_strict_mode_and_emit_use_strict_for_each_source_file_6141": "Analizuj w trybie z ograniczeniami i emituj ciąg „use strict” dla każdego pliku źródłowego.",
+  "Part_of_files_list_in_tsconfig_json_1409": "Część listy „files” w pliku tsconfig.json",
   "Pattern_0_can_have_at_most_one_Asterisk_character_5061": "Wzorzec „{0}” może zawierać maksymalnie jeden znak „*”.",
   "Performance_timings_for_diagnostics_or_extendedDiagnostics_are_not_available_in_this_session_A_nativ_6386": "Chronometraż wydajności dla opcji „--diagnostics” lub „--extendedDiagnostics” nie jest dostępny w tej sesji. Nie można było znaleźć natywnej implementacji interfejsu Web Performance API.",
+  "Platform_specific_6912": "Przeznaczone dla platformy",
   "Prefix_0_with_an_underscore_90025": "Poprzedzaj elementy „{0}” znakiem podkreślenia",
   "Prefix_all_incorrect_property_declarations_with_declare_95095": "Dodaj prefiks „declare” do wszystkich niepoprawnych deklaracji właściwości",
   "Prefix_all_unused_declarations_with_where_possible_95025": "Jeśli to możliwe, poprzedź wszystkie nieużywane deklaracje znakiem „_”",
   "Prefix_with_declare_95094": "Dodaj prefiks „declare”",
+  "Print_all_of_the_files_read_during_the_compilation_6653": "Wyświetlaj wszystkie pliki odczytywane podczas kompilacji.",
+  "Print_files_read_during_the_compilation_including_why_it_was_included_6631": "Wyświetlaj pliki odczytywane podczas kompilacji, włącznie z przyczyną dołączenia.",
+  "Print_names_of_files_and_the_reason_they_are_part_of_the_compilation_6505": "Wyświetl nazwy plików i przyczyny, dla których są częścią kompilacji.",
   "Print_names_of_files_part_of_the_compilation_6155": "Drukuj nazwy plików będących częścią kompilacji.",
   "Print_names_of_files_that_are_part_of_the_compilation_and_then_stop_processing_6503": "Drukuj nazwy plików będących częścią kompilacji, a następnie zatrzymaj przetwarzanie.",
   "Print_names_of_generated_files_part_of_the_compilation_6154": "Drukuj nazwy wygenerowanych plików będących częścią kompilacji.",
   "Print_the_compiler_s_version_6019": "Wypisz wersję kompilatora.",
   "Print_the_final_configuration_instead_of_building_1350": "Wydrukuj końcową konfigurację zamiast kompilowania.",
+  "Print_the_names_of_emitted_files_after_a_compilation_6652": "Wyświetlaj nazwy wyemitowanych plików po kompilacji.",
   "Print_this_message_6017": "Wypisz ten komunikat.",
+  "Private_accessor_was_defined_without_a_getter_2806": "Prywatna metoda dostępu została zdefiniowana bez metody pobierającej.",
   "Private_identifiers_are_not_allowed_in_variable_declarations_18029": "Identyfikatory prywatne są niedozwolone w deklaracjach zmiennych.",
   "Private_identifiers_are_not_allowed_outside_class_bodies_18016": "Identyfikatory prywatne są niedozwolone poza treściami klasy.",
   "Private_identifiers_are_only_available_when_targeting_ECMAScript_2015_and_higher_18028": "Identyfikatory prywatne są dostępne tylko wtedy, gdy jest używany język ECMAScript 2015 lub nowszy.",
@@ -911,6 +1074,7 @@
   "Private_or_protected_member_0_cannot_be_accessed_on_a_type_parameter_4105": "Nie można uzyskać dostępu do prywatnego lub chronionego elementu składowego „{0}” w parametrze typu.",
   "Project_0_can_t_be_built_because_its_dependency_1_has_errors_6363": "Nie można skompilować projektu „{0}”, ponieważ jego zależność „{1}” zawiera błędy",
   "Project_0_can_t_be_built_because_its_dependency_1_was_not_built_6383": "Nie można skompilować projektu „{0}”, ponieważ jego zależność „{1}” nie została skompilowania",
+  "Project_0_is_being_forcibly_rebuilt_6388": "Trwa wymuszone odbudowanie projektu „{0}”",
   "Project_0_is_out_of_date_because_its_dependency_1_is_out_of_date_6353": "Projekt „{0}” jest nieaktualny, ponieważ jego zależność „{1}” jest nieaktualna",
   "Project_0_is_out_of_date_because_oldest_output_1_is_older_than_newest_input_2_6350": "Projekt „{0}” jest nieaktualny, ponieważ najstarsze dane wyjściowe „{1}” są starsze niż najnowsze dane wejściowe „{2}”",
   "Project_0_is_out_of_date_because_output_file_1_does_not_exist_6352": "Projekt „{0}” jest nieaktualny, ponieważ plik wyjściowy „{1}” nie istnieje",
@@ -920,14 +1084,18 @@
   "Project_0_is_up_to_date_because_newest_input_1_is_older_than_oldest_output_2_6351": "Projekt „{0}” jest aktualny, ponieważ najnowsze dane wejściowe „{1}” są starsze niż najstarsze dane wyjściowe „{2}”",
   "Project_0_is_up_to_date_with_d_ts_files_from_its_dependencies_6354": "Projekt „{0}” jest aktualny z plikami .d.ts z jego zależności",
   "Project_references_may_not_form_a_circular_graph_Cycle_detected_Colon_0_6202": "Odwołania do projektu nie mogą tworzyć grafu kołowego. Wykryto cykl: {0}",
+  "Projects_6255": "Projekty",
   "Projects_in_this_build_Colon_0_6355": "Projekty w tej kompilacji: {0}",
   "Projects_to_reference_6300": "Projekty do przywołania",
+  "Property_0_cannot_have_an_initializer_because_it_is_marked_abstract_1267": "Właściwości \"{0}\" nie może mieć inicjatora, ponieważ jest oznaczona jako abstrakcyjna.",
   "Property_0_comes_from_an_index_signature_so_it_must_be_accessed_with_0_4111": "Właściwość „{0}” pochodzi z sygnatury indeksu, dlatego należy uzyskiwać do niej dostęp za pomocą elementu [„{0}”].",
   "Property_0_does_not_exist_on_const_enum_1_2479": "Właściwość „{0}” nie istnieje w wyliczeniu ze specyfikatorem „const” „{1}”.",
   "Property_0_does_not_exist_on_type_1_2339": "Właściwość „{0}” nie istnieje w typie „{1}”.",
   "Property_0_does_not_exist_on_type_1_Did_you_mean_2_2551": "Właściwość „{0}” nie istnieje w typie „{1}”. Czy chodziło Ci o „{2}”?",
   "Property_0_does_not_exist_on_type_1_Did_you_mean_to_access_the_static_member_2_instead_2576": "Właściwość „{0}” nie istnieje w typie „{1}”. Czy chodziło o uzyskanie dostępu do statycznego elementu członkowskiego „{2}”?",
-  "Property_0_does_not_exist_on_type_1_Do_you_need_to_change_your_target_library_Try_changing_the_lib_c_2550": "Właściwość „{0}” nie istnieje w typie „{1}”. Czy chcesz zmienić bibliotekę docelową? Spróbuj zmienić opcję kompilatora `lib` na „{2}” lub nowszą.",
+  "Property_0_does_not_exist_on_type_1_Do_you_need_to_change_your_target_library_Try_changing_the_lib_c_2550": "Właściwość \"{0}\" nie istnieje w typie \"{1}\". Czy chcesz zmienić bibliotekę docelową? Spróbuj zmienić opcję kompilatora \"lib\" na \"{2}\" lub nowszą.",
+  "Property_0_does_not_exist_on_type_1_Try_changing_the_lib_compiler_option_to_include_dom_2812": "Właściwość \"{0}\" nie istnieje w typie \"{1}\". Spróbuj zmienić opcję kompilatora \"lib\", aby uwzględnić parametr \"dom\".",
+  "Property_0_has_no_initializer_and_is_not_definitely_assigned_in_a_class_static_block_2817": "Właściwość \"{0}\" nie ma inicjatora i nie jest zdecydowanie przypisana w bloku statycznym klasy.",
   "Property_0_has_no_initializer_and_is_not_definitely_assigned_in_the_constructor_2564": "Właściwość „{0}” nie ma inicjatora i nie jest na pewno przypisana w konstruktorze.",
   "Property_0_implicitly_has_type_any_because_its_get_accessor_lacks_a_return_type_annotation_7033": "Dla właściwości „{0}” niejawnie określono typ „any”, ponieważ jego metoda dostępu „get” nie ma adnotacji zwracanego typu.",
   "Property_0_implicitly_has_type_any_because_its_set_accessor_lacks_a_parameter_type_annotation_7032": "Dla właściwości „{0}” niejawnie określono typ „any”, ponieważ jego metoda dostępu „set” nie ma adnotacji typu parametru.",
@@ -945,18 +1113,19 @@
   "Property_0_is_optional_in_type_1_but_required_in_type_2_2327": "Właściwość „{0}” jest opcjonalna w typie „{1}”, ale jest wymagana w typie „{2}”.",
   "Property_0_is_private_and_only_accessible_within_class_1_2341": "Właściwość „{0}” jest prywatna i dostępna tylko w klasie „{1}”.",
   "Property_0_is_private_in_type_1_but_not_in_type_2_2325": "Właściwość „{0}” jest prywatna w typie „{1}”, ale nie w typie „{2}”.",
-  "Property_0_is_protected_and_only_accessible_through_an_instance_of_class_1_2446": "Właściwość „{0}” jest chroniona i dostępna tylko za pośrednictwem wystąpienia klasy „{1}”.",
+  "Property_0_is_protected_and_only_accessible_through_an_instance_of_class_1_This_is_an_instance_of_cl_2446": "Właściwość „{0}” jest chroniona i dostępna tylko za pośrednictwem wystąpienia klasy „{1}”. To jest wystąpienie klasy „{2}”.",
   "Property_0_is_protected_and_only_accessible_within_class_1_and_its_subclasses_2445": "Właściwość „{0}” jest chroniona i dostępna tylko w klasie „{1}” oraz w jej podklasach.",
   "Property_0_is_protected_but_type_1_is_not_a_class_derived_from_2_2443": "Właściwość „{0}” jest chroniona, ale typ „{1}” nie jest klasą pochodną elementu „{2}”.",
   "Property_0_is_protected_in_type_1_but_public_in_type_2_2444": "Właściwość „{0}” jest chroniona w typie „{1}”, ale jest publiczna w typie „{2}”.",
   "Property_0_is_used_before_being_assigned_2565": "Właściwość „{0}” jest używana przed przypisaniem.",
   "Property_0_is_used_before_its_initialization_2729": "Właściwość „{0}” jest używana przez jej zainicjowaniem.",
+  "Property_0_may_not_be_used_in_a_static_property_s_initializer_in_the_same_class_when_target_is_esnex_2810": "Nie można użyć właściwości \"{0}\" w inicjatorze właściwości statycznej w tej samej klasie, gdy parametr \"target\" ma wartość \"esnext\", a parametr \"useDefineForClassFields\" ma wartość \"false\".",
+  "Property_0_may_not_exist_on_type_1_Did_you_mean_2_2568": "Właściwość „{0}” nie istnieje w typie „{1}”. Czy chodziło Ci o „{2}”?",
   "Property_0_of_JSX_spread_attribute_is_not_assignable_to_target_property_2606": "Właściwości „{0}” atrybutu rozkładu JSX nie można przypisać do właściwości docelowej.",
   "Property_0_of_exported_class_expression_may_not_be_private_or_protected_4094": "Właściwość „{0}” wyeksportowanego wyrażenia klasy nie może być prywatna ani chroniona.",
   "Property_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2_4032": "Właściwość „{0}” wyeksportowanego interfejsu ma nazwę „{1}” z modułu prywatnego „{2}” lub używa tej nazwy.",
   "Property_0_of_exported_interface_has_or_is_using_private_name_1_4033": "Właściwość „{0}” wyeksportowanego interfejsu ma nazwę prywatną „{1}” lub używa tej nazwy.",
-  "Property_0_of_type_1_is_not_assignable_to_numeric_index_type_2_2412": "Nie można przypisać właściwości „{0}” typu „{1}” do typu indeksu numerycznego „{2}”.",
-  "Property_0_of_type_1_is_not_assignable_to_string_index_type_2_2411": "Nie można przypisać właściwości „{0}” typu „{1}” do typu indeksu ciągu „{2}”.",
+  "Property_0_of_type_1_is_not_assignable_to_2_index_type_3_2411": "Właściwości „{0}” typu „{1}” nie można przypisać do typu indeksu „{2}” „{3}”.",
   "Property_0_was_also_declared_here_2733": "Właściwość „{0}” została również zadeklarowana w tym miejscu.",
   "Property_0_will_overwrite_the_base_property_in_1_If_this_is_intentional_add_an_initializer_Otherwise_2612": "Właściwość „{0}” zastąpi właściwość bazową w elemencie „{1}”. Jeśli jest to zamierzone, dodaj inicjator. W przeciwnym razie dodaj modyfikator „declare” lub usuń nadmiarową deklarację.",
   "Property_assignment_expected_1136": "Oczekiwano przypisania właściwości.",
@@ -978,12 +1147,18 @@
   "Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4027": "Publiczna właściwość statyczna „{0}” wyeksportowanej klasy ma nazwę „{1}” z modułu prywatnego „{2}” lub używa tej nazwy.",
   "Public_static_property_0_of_exported_class_has_or_is_using_private_name_1_4028": "Publiczna właściwość statyczna „{0}” wyeksportowanej klasy ma nazwę prywatną „{1}” lub używa tej nazwy.",
   "Qualified_name_0_is_not_allowed_without_a_leading_param_object_1_8032": "Nazwa kwalifikowana „{0}” nie jest dozwolona bez wiodącego elementu „@param {object} {1}”.",
+  "Raise_an_error_when_a_function_parameter_isn_t_read_6676": "Zgłoś błąd, gdy parametr funkcji nie zostanie odczytany",
   "Raise_error_on_expressions_and_declarations_with_an_implied_any_type_6052": "Zgłaszaj błąd w przypadku wyrażeń i deklaracji z implikowanym typem „any”.",
   "Raise_error_on_this_expressions_with_an_implied_any_type_6115": "Zgłaszaj błąd w przypadku wyrażeń „this” z niejawnym typem „any”.",
   "Re_exporting_a_type_when_the_isolatedModules_flag_is_provided_requires_using_export_type_1205": "Ponowne eksportowanie typu, gdy podano flagę „--isolatedModules”, wymaga użycia aliasu „export type”.",
   "Redirect_output_structure_to_the_directory_6006": "Przekieruj strukturę wyjściową do katalogu.",
+  "Reduce_the_number_of_projects_loaded_automatically_by_TypeScript_6617": "Zmniejsz liczbę projektów ładowanych automatycznie przez język TypeScript.",
   "Referenced_project_0_may_not_disable_emit_6310": "Przywoływany projekt „{0}” nie może wyłączać emisji.",
   "Referenced_project_0_must_have_setting_composite_Colon_true_6306": "Przywoływany projekt „{0}” musi mieć ustawienie „composite” o wartości true.",
+  "Referenced_via_0_from_file_1_1400": "Przywoływane za pośrednictwem elementu „{0}” z pliku „{1}”",
+  "Remove_a_list_of_directories_from_the_watch_process_6628": "Usuń listę katalogów z procesu obserwacji.",
+  "Remove_a_list_of_files_from_the_watch_mode_s_processing_6629": "Usuń listę plików z przetwarzania w trybie obserwacji.",
+  "Remove_all_unnecessary_override_modifiers_95163": "Usuń wszystkie niepotrzebne modyfikatory „overrides”",
   "Remove_all_unnecessary_uses_of_await_95087": "Usuń wszystkie niepotrzebne użycia operatora „await”",
   "Remove_all_unreachable_code_95051": "Usuń cały nieosiągalny kod",
   "Remove_all_unused_labels_95054": "Usuń wszystkie nieużywane etykiety",
@@ -991,8 +1166,10 @@
   "Remove_braces_from_arrow_function_95060": "Usuń nawiasy klamrowe z funkcji strzałki",
   "Remove_braces_from_arrow_function_body_95112": "Usuń nawiasy klamrowe z treści funkcji strzałkowej",
   "Remove_import_from_0_90005": "Usuń import z „{0}”",
+  "Remove_override_modifier_95161": "Usuń modyfikator „override”",
   "Remove_parentheses_95126": "Usuń nawiasy",
   "Remove_template_tag_90011": "Usuń znacznik szablonu",
+  "Remove_the_20mb_cap_on_total_source_code_size_for_JavaScript_files_in_the_TypeScript_language_server_6618": "Usuń ograniczenie 20 MB dotyczące łącznego rozmiaru kodu źródłowego dla plików JavaScript na serwerze języka TypeScript.",
   "Remove_type_parameters_90012": "Usuń parametry typu",
   "Remove_unnecessary_await_95086": "Usuń niepotrzebny operator „await”",
   "Remove_unreachable_code_95050": "Usuń nieosiągalny kod",
@@ -1010,14 +1187,16 @@
   "Report_errors_in_js_files_8019": "Zgłaszaj błędy w plikach js.",
   "Report_errors_on_unused_locals_6134": "Raportuj błędy dla nieużywanych elementów lokalnych.",
   "Report_errors_on_unused_parameters_6135": "Raportuj błędy dla nieużywanych parametrów.",
-  "Require_undeclared_properties_from_index_signatures_to_use_element_accesses_6803": "Wymagaj, aby niezadeklarowane właściwości z sygnatur indeksów korzystały z dostępów do elementów.",
+  "Require_undeclared_properties_from_index_signatures_to_use_element_accesses_6717": "Wymagaj, aby niezadeklarowane właściwości z sygnatur indeksów korzystały z dostępów do elementów.",
   "Required_type_parameters_may_not_follow_optional_type_parameters_2706": "Wymagane parametry typu mogą nie być zgodne z opcjonalnymi parametrami typu.",
   "Resolution_for_module_0_was_found_in_cache_from_location_1_6147": "Znaleziono rozwiązanie dla modułu „{0}” w pamięci podręcznej z lokalizacji „{1}”.",
+  "Resolution_for_type_reference_directive_0_was_found_in_cache_from_location_1_6241": "Znaleziono rozwiązanie dla dyrektywy odwołania do typu „{0}” w pamięci podręcznej z lokalizacji „{1}”.",
   "Resolve_keyof_to_string_valued_property_names_only_no_numbers_or_symbols_6195": "Rozwiązuj elementy „keyof” tylko do nazw właściwości mających jako wartość ciągi (nie liczby czy symbole).",
   "Resolving_from_node_modules_folder_6118": "Trwa rozpoznawanie na podstawie folderu node_modules...",
   "Resolving_module_0_from_1_6086": "======== Rozpoznawanie modułu „{0}” na podstawie „{1}”. ========",
   "Resolving_module_name_0_relative_to_base_url_1_2_6094": "Rozpoznawanie nazwy modułu „{0}” względem podstawowego adresu URL „{1}” — „{2}”.",
   "Resolving_real_path_for_0_result_1_6130": "Rozpoznawanie rzeczywistej ścieżki elementu ƒ„{0}”, wynik: „{1}”.",
+  "Resolving_type_reference_directive_0_containing_file_1_6242": "======== Rozwiązywanie dyrektywy odwołania do typu „{0}”, zawierającego plik: „{1}”. ========",
   "Resolving_type_reference_directive_0_containing_file_1_root_directory_2_6116": "======== Rozpoznawanie dyrektywy odwołania do typu „{0}”, plik zawierający: „{1}”, katalog główny: „{2}”. ========",
   "Resolving_type_reference_directive_0_containing_file_1_root_directory_not_set_6123": "======== Rozpoznawanie dyrektywy odwołania do typu „{0}”, plik zawierający: „{1}”, katalog główny nie został ustawiony. ========",
   "Resolving_type_reference_directive_0_containing_file_not_set_root_directory_1_6127": "======== Rozpoznawanie dyrektywy odwołania do typu „{0}”, plik zawierający nie został ustawiony, katalog główny: „{1}”. ========",
@@ -1029,6 +1208,7 @@
   "Rest_signatures_are_incompatible_2572": "Sygnatury rest są niezgodne.",
   "Rest_types_may_only_be_created_from_object_types_2700": "Typy rest można tworzyć tylko na podstawie typów obiektu.",
   "Return_type_annotation_circularly_references_itself_2577": "Adnotacja zwracanego typu cyklicznie odwołuje się do samej siebie.",
+  "Return_type_must_be_inferred_from_a_function_95149": "Zwracany typ musi zostać wywnioskowany na podstawie funkcji",
   "Return_type_of_call_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1_4046": "Zwracany typ sygnatury wywołania z wyeksportowanego interfejsu ma nazwę „{0}” z modułu prywatnego „{1}” lub używa tej nazwy.",
   "Return_type_of_call_signature_from_exported_interface_has_or_is_using_private_name_0_4047": "Zwracany typ sygnatury wywołania z wyeksportowanego interfejsu ma nazwę prywatną „{0}” lub używa tej nazwy.",
   "Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_name_0_from_private_mod_4044": "Zwracany typ sygnatury konstruktora z wyeksportowanego interfejsu ma nazwę „{0}” z modułu prywatnego „{1}” lub używa tej nazwy.",
@@ -1053,15 +1233,31 @@
   "Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_external_module__4050": "Zwracany typ publicznej metody statycznej z wyeksportowanej klasy ma nazwę „{0}” z modułu zewnętrznego {1} lub używa tej nazwy, ale nie można go nazwać.",
   "Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_private_module_1_4051": "Zwracany typ publicznej metody statycznej z wyeksportowanej klasy ma nazwę „{0}” z modułu prywatnego „{1}” lub używa tej nazwy.",
   "Return_type_of_public_static_method_from_exported_class_has_or_is_using_private_name_0_4052": "Zwracany typ publicznej metody statycznej z wyeksportowanej klasy ma nazwę prywatną „{0}” lub używa tej nazwy.",
-  "Reusing_module_resolutions_originating_in_0_since_resolutions_are_unchanged_from_old_program_6184": "Ponownie używane są rozwiązania modułu pochodzące z programu „{0}”, ponieważ rozwiązania nie zmieniły się w stosunku do starej wersji programu.",
-  "Reusing_resolution_of_module_0_to_file_1_from_old_program_6183": "Ponownie używane jest rozwiązanie modułu „{0}” do pliku „{1}” ze starej wersji programu.",
+  "Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_not_resolved_6395": "Ponowne użycie rozwiązania modułu „{0}” z „{1}” w pamięci podręcznej z lokalizacji „{2}” nie zostało rozpoznane.",
+  "Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_6393": "Ponowne użycie rozwiązania modułu „{0}” z „{1}” w pamięci podręcznej z lokalizacji „{2}” pomyślnie rozpoznano jako „{3}”.",
+  "Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_6394": "Ponowne użycie rozwiązania modułu „{0}” z „{1}” w pamięci podręcznej z lokalizacji „{2}” pomyślnie rozpoznano jako „{3}” z identyfikatorem pakietu „{4}”.",
+  "Reusing_resolution_of_module_0_from_1_of_old_program_it_was_not_resolved_6389": "Ponowne użycie rozwiązania modułu „{0}” z „{1}” starego programu nie zostało rozpoznane.",
+  "Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2_6183": "Ponowne użycie rozwiązania modułu „{0}” z „{1}” starego programu, pomyślnie rozpoznano jako „{2}”.",
+  "Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2_with_Package__6184": "Ponowne użycie rozwiązania modułu „{0}” z „{1}” starego programu, pomyślnie rozpoznano jako „{2}” z identyfikatorem pakietu „{3}”.",
+  "Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_not_re_6398": "Ponowne użycie rozpoznawania dyrektywy odwołania typu „{0}” z „{1}” w pamięci podręcznej z lokalizacji „{2}” nie zostało rozpoznane.",
+  "Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_succes_6396": "Ponowne użycie rozpoznawania dyrektywy odwołania typu „{0}” z „{1}” w pamięci podręcznej z lokalizacji „{2}” pomyślnie rozpoznano jako „{3}”.",
+  "Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_succes_6397": "Ponowne użycie rozpoznawania dyrektywy odwołania typu „{0}” z „{1}” w pamięci podręcznej z lokalizacji „{2}” pomyślnie rozpoznano jako „{3}” z identyfikatorem pakietu „{4}”.",
+  "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_not_resolved_6392": "Ponowne użycie rozwiązania dyrektywy odwołania typu „{0}” z „{1}” starego programu nie zostało rozpoznane.",
+  "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved__6390": "Ponowne użycie rozpoznawania dyrektywy odwołania typu „{0}” z „{1}” starego programu pomyślnie rozpoznano jako „{2}”.",
+  "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved__6391": "Ponowne użycie rozpoznawania dyrektywy odwołania typu „{0}” z „{1}” starego programu pomyślnie rozpoznano jako „{2}” o identyfikatorze pakietu „{3}”.",
   "Rewrite_all_as_indexed_access_types_95034": "Zmień wszystko na indeksowane typy dostępu",
   "Rewrite_as_the_indexed_access_type_0_90026": "Napisz ponownie jako indeksowany typ dostępu „{0}”",
   "Root_directory_cannot_be_determined_skipping_primary_search_paths_6122": "Nie można określić katalogu głównego. Pomijanie ścieżek wyszukiwania podstawowego.",
+  "Root_file_specified_for_compilation_1427": "Plik główny określony na potrzeby kompilacji",
   "STRATEGY_6039": "STRATEGIA",
+  "Save_tsbuildinfo_files_to_allow_for_incremental_compilation_of_projects_6642": "Zapisuj pliki tsbuildinfo, aby umożliwić przyrostową kompilację projektów.",
   "Scoped_package_detected_looking_in_0_6182": "Wykryto pakiet w zakresie, wyszukiwanie w „{0}”",
+  "Selection_is_not_a_valid_statement_or_statements_95155": "Wybór nie jest prawidłową instrukcją ani instrukcjami",
   "Selection_is_not_a_valid_type_node_95133": "Wybór nie jest prawidłowym węzłem typu",
+  "Set_the_JavaScript_language_version_for_emitted_JavaScript_and_include_compatible_library_declaratio_6705": "Określ wersję języka JavaScript dla emitowanego kodu JavaScript i dołącz zgodne deklaracje bibliotek.",
+  "Set_the_language_of_the_messaging_from_TypeScript_This_does_not_affect_emit_6654": "Określ język komunikatów z języka TypeScript. Nie wpływa to na emisję.",
   "Set_the_module_option_in_your_configuration_file_to_0_95099": "Ustaw opcję „module” w pliku konfiguracji na wartość „{0}”",
+  "Set_the_newline_character_for_emitting_files_6659": "Określ znak nowego wiersza dla emisji plików.",
   "Set_the_target_option_in_your_configuration_file_to_0_95098": "Ustaw opcję „target” w pliku konfiguracji na wartość „{0}”",
   "Setters_cannot_return_a_value_2408": "Metody ustawiające nie mogą zwracać wartości.",
   "Show_all_compiler_options_6169": "Pokaż wszystkie opcje kompilatora.",
@@ -1069,31 +1265,63 @@
   "Show_verbose_diagnostic_information_6150": "Pokaż pełne informacje diagnostyczne.",
   "Show_what_would_be_built_or_deleted_if_specified_with_clean_6367": "Pokaż, co zostanie skompilowane (lub usunięte, jeśli określono opcję „--clean”)",
   "Signature_0_must_be_a_type_predicate_1224": "Sygnatura „{0}” musi być predykatem typów.",
+  "Skip_type_checking_all_d_ts_files_6693": "Pomiń sprawdzanie typów dla wszystkich plików d.ts.",
+  "Skip_type_checking_d_ts_files_that_are_included_with_TypeScript_6692": "Pomiń sprawdzanie typów w plikach d.ts dołączanych w kodzie TypeScript.",
   "Skip_type_checking_of_declaration_files_6012": "Pomiń sprawdzanie typu plików deklaracji.",
   "Skipping_build_of_project_0_because_its_dependency_1_has_errors_6362": "Pomijanie kompilacji projektu „{0}”, ponieważ jego zależność „{1}” zawiera błędy",
   "Skipping_build_of_project_0_because_its_dependency_1_was_not_built_6382": "Pomijanie kompilacji projektu „{0}”, ponieważ jego zależność „{1}” nie została skompilowana",
-  "Source_Map_Options_6175": "Opcje mapy źródła",
+  "Source_from_referenced_project_0_included_because_1_specified_1414": "Źródło z przywoływanego projektu „{0}” zostało dołączone, ponieważ określono element „{1}”",
+  "Source_from_referenced_project_0_included_because_module_is_specified_as_none_1415": "Źródło z przywoływanego projektu „{0}” zostało dołączone, ponieważ określono wartość „none” dla opcji „--module”",
   "Source_has_0_element_s_but_target_allows_only_1_2619": "Liczba elementów w źródle to {0}, ale element docelowy zezwala tylko na {1}.",
   "Source_has_0_element_s_but_target_requires_1_2618": "Liczba elementów w źródle to {0}, ale element docelowy wymaga {1}.",
+  "Source_provides_no_match_for_required_element_at_position_0_in_target_2623": "Źródło nie udostępnia dopasowania dla wymaganego elementu na pozycji {0} w lokalizacji docelowej.",
+  "Source_provides_no_match_for_variadic_element_at_position_0_in_target_2624": "Źródło nie udostępnia dopasowania dla elementu ze zmienną argumentów na pozycji {0} w lokalizacji docelowej.",
   "Specialized_overload_signature_is_not_assignable_to_any_non_specialized_signature_2382": "Nie można przypisać specjalizowanej sygnatury przeciążenia do żadnej sygnatury niespecjalizowanej.",
   "Specifier_of_dynamic_import_cannot_be_spread_element_1325": "Specyfikator dynamicznego importowania nie może być elementem spread.",
-  "Specify_ECMAScript_target_version_Colon_ES3_default_ES5_ES2015_ES2016_ES2017_ES2018_ES2019_ES2020_or_6015": "Określ wersję docelową języka ECMAScript: „ES3” (wartość domyślna), „ES5”, „ES2015”, „ES2016”, „ES2017”, „ES2018”, „ES2019”, „ES2020” lub „ESNEXT”.",
-  "Specify_JSX_code_generation_Colon_preserve_react_native_or_react_6080": "Wybierz sposób generowania kodu JSX: „preserve”, „react-native” lub „react”.",
-  "Specify_emit_Slashchecking_behavior_for_imports_that_are_only_used_for_types_1368": "Określ zachowanie emisji/sprawdzania dla importów, które są używane tylko dla typów",
+  "Specify_ECMAScript_target_version_6015": "Określ wersję docelową ECMAScript.",
+  "Specify_JSX_code_generation_6080": "Określ generowanie kodu JSX.",
+  "Specify_a_file_that_bundles_all_outputs_into_one_JavaScript_file_If_declaration_is_true_also_designa_6679": "Określ plik łączący wszystkie dane wyjściowe w jeden plik JavaScript. Jeśli element „declaration” ma wartość true, wyznaczany jest też plik łączący wszystkie dane wyjściowe d.ts.",
+  "Specify_a_list_of_glob_patterns_that_match_files_to_be_included_in_compilation_6641": "Określ listę wzorców globalnych pasujących do plików, które należy uwzględnić w kompilacji.",
+  "Specify_a_list_of_language_service_plugins_to_include_6681": "Określ listę wtyczek usług języka do uwzględnienia.",
+  "Specify_a_set_of_bundled_library_declaration_files_that_describe_the_target_runtime_environment_6651": "Określ zestaw połączonych plików deklaracji bibliotek, które opisują docelowe środowisko uruchomieniowe.",
+  "Specify_a_set_of_entries_that_re_map_imports_to_additional_lookup_locations_6680": "Określ zestaw wpisów, które ponownie mapują operacje importu na dodatkowe lokalizacje wyszukiwania.",
+  "Specify_an_array_of_objects_that_specify_paths_for_projects_Used_in_project_references_6687": "Określ tablicę obiektów określających ścieżki dla projektów. Używane w odwołaniach do projektów.",
+  "Specify_an_output_folder_for_all_emitted_files_6678": "Określ folder wyjściowy dla wszystkich emitowanych plików.",
+  "Specify_emit_Slashchecking_behavior_for_imports_that_are_only_used_for_types_6718": "Określ zachowanie emisji/sprawdzania dla importów, które są używane tylko dla typów",
   "Specify_file_to_store_incremental_compilation_information_6380": "Określ plik do przechowywania informacji o kompilacji przyrostowej",
+  "Specify_how_TypeScript_looks_up_a_file_from_a_given_module_specifier_6658": "Określ, jak język TypeScript ma wyszukiwać plik z podanego specyfikatora modułu.",
+  "Specify_how_directories_are_watched_on_systems_that_lack_recursive_file_watching_functionality_6714": "Określ sposób obserwacji katalogów w systemach, które nie mają funkcji rekursywnej obserwacji plików.",
+  "Specify_how_the_TypeScript_watch_mode_works_6715": "Określ sposób działania trybu zegarka TypeScript.",
   "Specify_library_files_to_be_included_in_the_compilation_6079": "Określ pliki biblioteki do uwzględnienia w kompilacji.",
-  "Specify_module_code_generation_Colon_none_commonjs_amd_system_umd_es2015_es2020_or_ESNext_6016": "Określ sposób generowania kodu modułu: „none”, „commonjs”, „amd”, „system”, „umd”, „es2015”, „es2020” lub „ESNext”.",
+  "Specify_module_code_generation_6016": "Określ generowanie kodu modułu.",
   "Specify_module_resolution_strategy_Colon_node_Node_js_or_classic_TypeScript_pre_1_6_6069": "Określ strategię rozpoznawania modułów: „node” (Node.js) lub „classic” (TypeScript w wersji wcześniejszej niż 1.6).",
-  "Specify_strategy_for_creating_a_polling_watch_when_it_fails_to_create_using_file_system_events_Colon_6227": "Określ strategię obserwowania z sondowaniem, gdy nie powiedzie się utworzenie przy użyciu zdarzeń systemu plików: „FixedInterval” (domyślna), „PriorityInterval”, „DynamicPriority”.",
-  "Specify_strategy_for_watching_directory_on_platforms_that_don_t_support_recursive_watching_natively__6226": "Określ strategię obserwowania katalogu na platformach, które nie obsługują natywnego obserwowania rekursywnego: „UseFsEvents” (domyślna), „FixedPollingInterval”, „DynamicPriorityPolling”.",
-  "Specify_strategy_for_watching_file_Colon_FixedPollingInterval_default_PriorityPollingInterval_Dynami_6225": "Określ strategię obserwowania pliku: „FixedPollingInterval” (domyślna), „PriorityPollingInterval”, „DynamicPriorityPolling”, „UseFsEvents”, „UseFsEventsOnParentDirectory”.",
+  "Specify_module_specifier_used_to_import_the_JSX_factory_functions_when_using_jsx_Colon_react_jsx_Ast_6649": "Określ specyfikator modułów używany do importowania funkcji fabryki JSX w przypadku używania elementów „jsx: react-jsx*”.",
+  "Specify_multiple_folders_that_act_like_Slashnode_modules_Slash_types_6710": "Określ wiele folderów działających jak element „./node_modules/@types”.",
+  "Specify_one_or_more_path_or_node_module_references_to_base_configuration_files_from_which_settings_a_6633": "Określ co najmniej jedną ścieżkę lub odwołanie do modułu platformy Node dotyczące podstawowych plików konfiguracji, z których są dziedziczone ustawienia.",
+  "Specify_options_for_automatic_acquisition_of_declaration_files_6709": "Określ opcje automatycznego pozyskiwania plików deklaracji.",
+  "Specify_strategy_for_creating_a_polling_watch_when_it_fails_to_create_using_file_system_events_Colon_6227": "Określ strategię obserwowania z sondowaniem, gdy nie powiedzie się utworzenie przy użyciu zdarzeń systemu plików: „FixedInterval” (domyślna), „PriorityInterval”, „DynamicPriority”, „FixedChunkSize”.",
+  "Specify_strategy_for_watching_directory_on_platforms_that_don_t_support_recursive_watching_natively__6226": "Określ strategię obserwowania katalogu na platformach, które nie obsługują natywnego obserwowania rekursywnego: „UseFsEvents” (domyślna), „FixedPollingInterval”, „DynamicPriorityPolling”, „FixedChunkSizePolling”.",
+  "Specify_strategy_for_watching_file_Colon_FixedPollingInterval_default_PriorityPollingInterval_Dynami_6225": "Określ strategię obserwowania pliku: „FixedPollingInterval” (domyślna), „PriorityPollingInterval”, „DynamicPriorityPolling”, „FixedChunkSizePolling”, „UseFsEvents”, „UseFsEventsOnParentDirectory”.",
+  "Specify_the_JSX_Fragment_reference_used_for_fragments_when_targeting_React_JSX_emit_e_g_React_Fragme_6648": "Określ odwołanie do fragmentów JSX używane dla fragmentów w przypadku docelowej emisji kodu React JSX, np. „React.Fragment” lub „Fragment”.",
   "Specify_the_JSX_factory_function_to_use_when_targeting_react_JSX_emit_e_g_React_createElement_or_h_6146": "Określ funkcję fabryki JSX do użycia, gdy elementem docelowym jest emisja elementu JSX „react”, np. „React.createElement” lub „h”.",
+  "Specify_the_JSX_factory_function_used_when_targeting_React_JSX_emit_e_g_React_createElement_or_h_6647": "Określ funkcję fabryki JSX używaną w przypadku docelowej emisji kodu React JSX, na przykład „React.createElement” lub „h”",
   "Specify_the_JSX_fragment_factory_function_to_use_when_targeting_react_JSX_emit_with_jsxFactory_compi_18034": "Określ funkcję fabryki fragmentów JSX, która ma być używana po ukierunkowaniu na emisję JSX „react” za pomocą opcji kompilatora „jsxFactory”, na przykład „Fragment”.",
+  "Specify_the_base_directory_to_resolve_non_relative_module_names_6607": "Określ katalog podstawowy, aby rozpoznać nie względne nazwy modułów.",
   "Specify_the_end_of_line_sequence_to_be_used_when_emitting_files_Colon_CRLF_dos_or_LF_unix_6060": "Określ sekwencję końca wiersza, która ma być używana podczas emitowania plików: „CRLF” (dos) lub „LF” (unix).",
+  "Specify_the_folder_for_tsbuildinfo_incremental_compilation_files_6707": "Określ folder dla przyrostowych plików kompilacji .tsbuildinfo.",
   "Specify_the_location_where_debugger_should_locate_TypeScript_files_instead_of_source_locations_6004": "Określ lokalizację, w której debuger ma szukać plików TypeScript zamiast szukania w lokalizacjach źródłowych.",
-  "Specify_the_location_where_debugger_should_locate_map_files_instead_of_generated_locations_6003": "Określ lokalizację, w której debuger ma szukać plików map zamiast szukania w wygenerowanych lokalizacjach.",
-  "Specify_the_module_specifier_to_be_used_to_import_the_jsx_and_jsxs_factory_functions_from_eg_react_6238": "Określ specyfikator modułu, który ma być używany do importowania funkcji fabryki „jsx” i „jsxs” na przykład z platformy React",
+  "Specify_the_location_where_debugger_should_locate_map_files_instead_of_generated_locations_6655": "Określ lokalizację, w której debuger ma szukać plików map zamiast szukania w wygenerowanych lokalizacjach.",
+  "Specify_the_maximum_folder_depth_used_for_checking_JavaScript_files_from_node_modules_Only_applicabl_6656": "Określ maksymalną głębokość folderów używaną do sprawdzania plików JavaScript z poziomu elementu „node_modules”. Ma to zastosowanie tylko w przypadku użycia elementu „allowJs”.",
+  "Specify_the_module_specifier_to_be_used_to_import_the_jsx_and_jsxs_factory_functions_from_eg_react_6238": "Określ specyfikator modułu, który ma być używany do importowania z funkcji fabryki \"jsx\" i \"jsxs\", na przykład z platformy React",
+  "Specify_the_object_invoked_for_createElement_This_only_applies_when_targeting_react_JSX_emit_6686": "Określ obiekt wywoływany dla elementu „createElement”. Ma to zastosowanie tylko w przypadku docelowej emisji kodu JSX „react”.",
+  "Specify_the_output_directory_for_generated_declaration_files_6613": "Określ katalog wyjściowy dla generowanych plików deklaracji.",
   "Specify_the_root_directory_of_input_files_Use_to_control_the_output_directory_structure_with_outDir_6058": "Określ katalog główny plików wejściowych. Strukturą katalogów wyjściowych można sterować przy użyciu opcji --outDir.",
+  "Specify_the_root_folder_within_your_source_files_6690": "Określ folder główny w plikach źródłowych.",
+  "Specify_the_root_path_for_debuggers_to_find_the_reference_source_code_6695": "Określ ścieżkę katalogu głównego, w którym debugery będą mogły znaleźć referencyjny kod źródłowy.",
+  "Specify_type_package_names_to_be_included_without_being_referenced_in_a_source_file_6711": "Określ nazwy pakietów typów do uwzględnienia bez odwoływania się do nich w pliku źródłowym.",
+  "Specify_what_JSX_code_is_generated_6646": "Określ, jaki kod JSX jest generowany.",
+  "Specify_what_approach_the_watcher_should_use_if_the_system_runs_out_of_native_file_watchers_6634": "Określ, jakie podejście ma stosować obserwator, jeśli w systemie zabraknie natywnych obserwatorów plików.",
+  "Specify_what_module_code_is_generated_6657": "Określ, jaki kod modułów jest generowany.",
   "Split_all_invalid_type_only_imports_1367": "Podziel wszystkie nieprawidłowe importy dotyczące tylko typu",
   "Split_into_two_separate_import_declarations_1366": "Podziel na dwie osobne deklaracje importu",
   "Spread_operator_in_new_expressions_is_only_available_when_targeting_ECMAScript_5_and_higher_2472": "Operator rozpiętości w wyrażeniach „new” jest dostępny tylko wtedy, gdy jest używany język ECMAScript 5 lub nowszy.",
@@ -1101,9 +1329,9 @@
   "Starting_compilation_in_watch_mode_6031": "Trwa uruchamianie kompilacji w trybie śledzenia...",
   "Statement_expected_1129": "Oczekiwano instrukcji.",
   "Statements_are_not_allowed_in_ambient_contexts_1036": "Instrukcje są niedozwolone w otaczających kontekstach.",
+  "Static_fields_with_private_names_can_t_have_initializers_when_the_useDefineForClassFields_flag_is_no_2805": "Pola statyczne z nazwami prywatnymi nie mogą mieć inicjatorów, gdy flaga „--useDefineForClassFields” nie jest określona z opcją „--target” o wartości „esnext”. Rozważ dodanie flagi „--useDefineForClassFields”.",
   "Static_members_cannot_reference_class_type_parameters_2302": "Statyczne składowe nie mogą przywoływać parametrów typu klasy.",
   "Static_property_0_conflicts_with_built_in_property_Function_0_of_constructor_function_1_2699": "Właściwość statyczna „{0}” jest w konflikcie z właściwością wbudowaną „Function.{0}” funkcji konstruktora „{1}”.",
-  "Strict_Type_Checking_Options_6173": "Opcje ścisłego sprawdzania typów",
   "String_literal_expected_1141": "Oczekiwano literału ciągu.",
   "String_literal_with_double_quotes_expected_1327": "Oczekiwano literału ciągu z podwójnymi cudzysłowami.",
   "Stylize_errors_and_messages_using_color_and_context_experimental_6073": "Stosuj styl dla błędów i komunikatów za pomocą koloru i kontekstu. (eksperymentalne).",
@@ -1117,9 +1345,10 @@
   "Super_calls_are_not_permitted_outside_constructors_or_in_nested_functions_inside_constructors_2337": "Wywołania super są niedozwolone poza konstruktorami i zagnieżdżonymi funkcjami wewnątrz konstruktorów.",
   "Suppress_excess_property_checks_for_object_literals_6072": "Pomiń nadmiarowe sprawdzenia właściwości dla literałów obiektu.",
   "Suppress_noImplicitAny_errors_for_indexing_objects_lacking_index_signatures_6055": "Pomiń błędy noImplicitAny dotyczące obiektów indeksowania bez sygnatur indeksów.",
+  "Suppress_noImplicitAny_errors_when_indexing_objects_that_lack_index_signatures_6703": "Pomijaj błędy „noImplicitAny” podczas indeksowania obiektów, które nie mają sygnatur indeksu.",
   "Switch_each_misused_0_to_1_95138": "Zmień każdy niepoprawnie użyty element „{0}” na „{1}”",
   "Symbol_reference_does_not_refer_to_the_global_Symbol_constructor_object_2470": "Odwołanie do elementu „Symbol” nie zawiera odwołania do globalnego obiektu konstruktora symboli.",
-  "Synchronously_call_callbacks_and_update_the_state_of_directory_watchers_on_platforms_that_don_t_supp_6228": "Synchronicznie wywołaj wywołania zwrotne i zaktualizuj stan obserwatorów katalogów na platformach, które nie obsługują natywnego obserwowania rekursywnego.",
+  "Synchronously_call_callbacks_and_update_the_state_of_directory_watchers_on_platforms_that_don_t_supp_6704": "Synchronicznie wywołuj wywołania zwrotne i aktualizuj stan obserwatorów katalogów na platformach, które nie obsługują natywnie obserwacji rekursywnej.",
   "Syntax_Colon_0_6023": "Składnia: {0}",
   "Tag_0_expects_at_least_1_arguments_but_the_JSX_factory_2_provides_at_most_3_6229": "Tag „{0}” oczekuje co najmniej „{1}” argumentów, ale fabryka JSX „{2}” dostarcza maksymalnie „{3}”.",
   "Tagged_template_expressions_are_not_permitted_in_an_optional_chain_1358": "Oznakowane wyrażenia szablonu nie są dozwolone w opcjonalnym łańcuchu.",
@@ -1134,17 +1363,19 @@
   "The_arguments_object_cannot_be_referenced_in_an_arrow_function_in_ES3_and_ES5_Consider_using_a_stand_2496": "Obiekt „arguments” nie może być przywoływany w funkcji strzałkowej w językach ES3 i ES5. Rozważ użycie standardowego wyrażenia funkcji.",
   "The_arguments_object_cannot_be_referenced_in_an_async_function_or_method_in_ES3_and_ES5_Consider_usi_2522": "Obiekt „arguments” nie może być przywoływany w asynchronicznej funkcji lub metodzie w języku ES3 i ES5. Rozważ użycie standardowej funkcji lub metody.",
   "The_body_of_an_if_statement_cannot_be_the_empty_statement_1313": "Treść instrukcji „if” nie może być pustą instrukcją.",
-  "The_bundledPackageName_option_must_be_provided_when_using_outFile_and_node_module_resolution_with_de_1391": "Opcja „bundledPackageName” musi być podana, gdy używana jest opcja outFile i rozpoznawanie modułu węzła z emitowaniem deklaracji.",
+  "The_bundledPackageName_option_must_be_provided_when_using_outFile_and_node_module_resolution_with_de_1391": "Opcja \"bundledPackageName\" musi być zapewniona, gdy używana jest opcja outFile i rozpoznawanie modułu węzła z emitowaniem deklaracji.",
   "The_call_would_have_succeeded_against_this_implementation_but_implementation_signatures_of_overloads_2793": "Wywołanie powiodłoby się dla tej implementacji, ale sygnatury implementacji przeciążeń nie są widoczne na zewnątrz.",
   "The_character_set_of_the_input_files_6163": "Zestaw znaków plików wejściowych.",
   "The_containing_arrow_function_captures_the_global_value_of_this_7041": "Zawierająca funkcja strzałki przechwytuje wartość globalną parametru „this”.",
   "The_containing_function_or_module_body_is_too_large_for_control_flow_analysis_2563": "Treść zawierającej funkcji lub modułu jest za duża do analizy przepływu sterowania.",
   "The_current_host_does_not_support_the_0_option_5001": "Bieżący host nie obsługuje opcji „{0}”.",
   "The_declaration_of_0_that_you_probably_intended_to_use_is_defined_here_18018": "W tym miejscu zdefiniowano deklarację elementu „{0}”, której prawdopodobnie zamierzano użyć",
+  "The_declaration_was_marked_as_deprecated_here_2798": "Deklaracja została oznaczona jako przestarzała w tym miejscu.",
   "The_expected_type_comes_from_property_0_which_is_declared_here_on_type_1_6500": "Oczekiwany typ pochodzi z właściwości „{0}”, która jest zadeklarowana tutaj w typie „{1}”",
   "The_expected_type_comes_from_the_return_type_of_this_signature_6502": "Oczekiwany typ pochodzi ze zwracanego typu tej sygnatury.",
   "The_expected_type_comes_from_this_index_signature_6501": "Oczekiwany typ pochodzi z tej sygnatury indeksu.",
   "The_expression_of_an_export_assignment_must_be_an_identifier_or_qualified_name_in_an_ambient_context_2714": "Wyrażenie przypisania eksportu musi być identyfikatorem lub kwalifikowaną nazwą w otaczającym kontekście.",
+  "The_file_is_in_the_program_because_Colon_1430": "Plik jest w programie, ponieważ:",
   "The_files_list_in_config_file_0_is_empty_18002": "Lista „files” w pliku konfiguracji „{0}” jest pusta.",
   "The_first_export_default_is_here_2752": "Pierwszy element export default jest tutaj.",
   "The_first_parameter_of_the_then_method_of_a_promise_must_be_a_callback_1060": "Pierwszym parametrem metody „then” obietnicy musi być wywołanie zwrotne.",
@@ -1168,6 +1399,7 @@
   "The_left_hand_side_of_a_for_in_statement_must_be_of_type_string_or_any_2405": "Lewa strona instrukcji „for...in” musi być typu „string” lub „any”.",
   "The_left_hand_side_of_a_for_of_statement_cannot_use_a_type_annotation_2483": "Lewa strona instrukcji „for...of” nie może używać adnotacji typu.",
   "The_left_hand_side_of_a_for_of_statement_may_not_be_an_optional_property_access_2781": "Lewa strona instrukcji „for...of” nie może być opcjonalnym dostępem do właściwości.",
+  "The_left_hand_side_of_a_for_of_statement_may_not_be_async_1106": "Lewa strona instrukcji „for...of” nie może być „asynchroniczna”.",
   "The_left_hand_side_of_a_for_of_statement_must_be_a_variable_or_a_property_access_2487": "Lewa strona instrukcji „for...of” musi być zmienną lub dostępem do właściwości.",
   "The_left_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type_2362": "Lewa strona operacji arytmetycznej musi być typu „any”, „number”, „bigint” lub typu wyliczeniowego.",
   "The_left_hand_side_of_an_assignment_expression_may_not_be_an_optional_property_access_2779": "Lewa strona wyrażenia przypisania nie może być opcjonalnym dostępem do właściwości.",
@@ -1185,15 +1417,18 @@
   "The_parser_expected_to_find_a_to_match_the_token_here_1007": "Analizator oczekiwał odnalezienia elementu „}” w celu dopasowania do tokenu „{” w tym miejscu.",
   "The_property_0_cannot_be_accessed_on_type_1_within_this_class_because_it_is_shadowed_by_another_priv_18014": "Nie można uzyskać dostępu do właściwości „{0}” w typie „{1}” w tej klasie, ponieważ jest ona zasłaniana przez inny identyfikator prywatny o takiej samej pisowni.",
   "The_return_type_of_a_JSX_element_constructor_must_return_an_object_type_2601": "Zwracany typ konstruktora elementu JSX musi zwracać typ obiektu.",
+  "The_return_type_of_a_get_accessor_must_be_assignable_to_its_set_accessor_type_2380": "Zwracany typ metody dostępu „get” musi być możliwy do przypisania do typu metody dostępu „set”",
   "The_return_type_of_a_parameter_decorator_function_must_be_either_void_or_any_1237": "Zwracany typ funkcji dekoratora parametrów musi mieć postać „void” lub „any”.",
   "The_return_type_of_a_property_decorator_function_must_be_either_void_or_any_1236": "Zwracany typ funkcji dekoratora właściwości musi mieć postać „void” lub „any”.",
   "The_return_type_of_an_async_function_must_either_be_a_valid_promise_or_must_not_contain_a_callable_t_1058": "Zwracany typ funkcji asynchronicznej musi być prawidłową obietnicą lub nie może zawierać wywoływalnej składowej „then”.",
   "The_return_type_of_an_async_function_or_method_must_be_the_global_Promise_T_type_Did_you_mean_to_wri_1064": "Zwracany typ funkcji lub metody asynchronicznej musi być globalnym typem Promise<T>. Czy chodziło Ci o typ „Promise<{0}>”?",
   "The_right_hand_side_of_a_for_in_statement_must_be_of_type_any_an_object_type_or_a_type_parameter_but_2407": "Prawa strona instrukcji „for...in” musi zawierać typ „any”, typ obiektu lub parametr typu, a tutaj ma typ „{0}”.",
   "The_right_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type_2363": "Prawa strona operacji arytmetycznej musi być typu „any”, „number”, „bigint” lub typu wyliczeniowego.",
-  "The_right_hand_side_of_an_in_expression_must_be_of_type_any_an_object_type_or_a_type_parameter_2361": "Prawa strona wyrażenia „in” musi być typu „any”, typu obiektu lub parametrem typu.",
+  "The_right_hand_side_of_an_in_expression_must_not_be_a_primitive_2361": "Typ pierwotny nie może znajdować się po prawej stronie wyrażenia „in”.",
   "The_right_hand_side_of_an_instanceof_expression_must_be_of_type_any_or_of_a_type_assignable_to_the_F_2359": "Prawa strona wyrażenia „instanceof” musi być typu „any” lub typu, który można przypisać do typu interfejsu „Function”.",
+  "The_root_value_of_a_0_file_must_be_an_object_5092": "Wartość katalogu głównego pliku „{0}” musi być obiektem.",
   "The_shadowing_declaration_of_0_is_defined_here_18017": "Deklaracja przesłaniania „{0}” jest zdefiniowana tutaj",
+  "The_signature_0_of_1_is_deprecated_6387": "Sygnatura „{0}” elementu „{1}” jest przestarzała.",
   "The_specified_path_does_not_exist_Colon_0_5058": "Wybrana ścieżka nie istnieje: „{0}”.",
   "The_tag_was_first_specified_here_8034": "Tag został najpierw określony w tym miejscu.",
   "The_target_of_an_assignment_must_be_a_variable_or_a_property_access_2541": "Cel przypisania musi być zmienną lub dostępem do właściwości.",
@@ -1204,6 +1439,7 @@
   "The_type_0_is_readonly_and_cannot_be_assigned_to_the_mutable_type_1_4104": "Typ „{0}” jest „readonly” i nie można go przypisać do typu modyfikowalnego „{1}”.",
   "The_type_argument_for_type_parameter_0_cannot_be_inferred_from_the_usage_Consider_specifying_the_typ_2453": "Nie można wywnioskować argumentu typu dla parametru typu „{0}” na podstawie użycia. Rozważ jawne określenie argumentów typu.",
   "The_type_of_a_function_declaration_must_match_the_function_s_signature_8030": "Typ deklaracji funkcji musi być zgodny z sygnaturą funkcji.",
+  "The_type_of_this_node_cannot_be_serialized_because_its_property_0_cannot_be_serialized_4118": "Typ tego węzła nie może być serializowany, ponieważ jego właściwość „{0}” nie może być serializowana.",
   "The_type_returned_by_the_0_method_of_an_async_iterator_must_be_a_promise_for_a_type_with_a_value_pro_2547": "Typ zwracany przez metodę „{0}()” iteratora asynchronicznego musi być obietnicą dla typu z właściwością „value”.",
   "The_type_returned_by_the_0_method_of_an_iterator_must_have_a_value_property_2490": "Typ zwracany przez metodę „{0}()” iteratora musi mieć właściwość „value”.",
   "The_types_of_0_are_incompatible_between_these_types_2200": "Typy elementu „{0}” są niezgodne między tymi typami.",
@@ -1214,7 +1450,8 @@
   "This_JSX_tag_s_0_prop_expects_a_single_child_of_type_1_but_multiple_children_were_provided_2746": "Element prop „{0}” tego tagu JSX oczekuje pojedynczego elementu podrzędnego typu „{1}”, ale podano wiele elementów podrzędnych.",
   "This_JSX_tag_s_0_prop_expects_type_1_which_requires_multiple_children_but_only_a_single_child_was_pr_2745": "Element prop „{0}” tego tagu JSX oczekuje typu „{1}”, który wymaga wielu elementów podrzędnych, ale podano tylko jeden element podrzędny.",
   "This_condition_will_always_return_0_since_the_types_1_and_2_have_no_overlap_2367": "Ten warunek będzie zawsze zwracał element „{0}”, ponieważ typy „{1}” i „{2}” nie nakładają się.",
-  "This_condition_will_always_return_true_since_the_function_is_always_defined_Did_you_mean_to_call_it__2774": "Ten warunek będzie zawsze zwracał wartość true, ponieważ funkcja jest zawsze zdefiniowana. Czy chcesz wywołać ją wywołać zamiast tego?",
+  "This_condition_will_always_return_true_since_this_0_is_always_defined_2801": "Ten warunek będzie zawsze zwracać wartość true, ponieważ wartość '{0}' jest zawsze prawdziwa.",
+  "This_condition_will_always_return_true_since_this_function_is_always_defined_Did_you_mean_to_call_it_2774": "Ten warunek będzie zawsze zwracał wartość true, ponieważ funkcja jest zawsze zdefiniowana. Czy chcesz wywołać ją zamiast tego?",
   "This_constructor_function_may_be_converted_to_a_class_declaration_80002": "Ta funkcja konstruktora może zostać przekonwertowana na deklarację klasy.",
   "This_expression_is_not_callable_2349": "To wyrażenie nie jest wywoływalne.",
   "This_expression_is_not_callable_because_it_is_a_get_accessor_Did_you_mean_to_use_it_without_6234": "Tego wyrażenia nie można wywoływać, ponieważ jest to metoda dostępu „get”. Czy chodziło Ci o użycie go bez znaków „()”?",
@@ -1223,15 +1460,23 @@
   "This_import_is_never_used_as_a_value_and_must_use_import_type_because_importsNotUsedAsValues_is_set__1371": "Ten import nigdy nie jest używany jako wartość i musi używać aliasu „import type”, ponieważ opcja „importsNotUsedAsValues” jest ustawiona na wartość „error”.",
   "This_is_the_declaration_being_augmented_Consider_moving_the_augmenting_declaration_into_the_same_fil_6233": "To jest rozszerzana deklaracja. Rozważ przeniesienie deklaracji rozszerzenia do tego samego pliku.",
   "This_may_be_converted_to_an_async_function_80006": "To można przekonwertować na funkcję asynchroniczną.",
+  "This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0_4113": "Ten element członkowski nie może mieć modyfikatora „override”, ponieważ nie jest zadeklarowany w klasie podstawowej „{0}”.",
+  "This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0_Did_you__4117": "Ten element członkowski nie może mieć modyfikatora \"override\", ponieważ nie jest on zadeklarowany w klasie bazowej \"{0}\". Czy chodzi Ci o \"{1}\"?",
+  "This_member_cannot_have_an_override_modifier_because_its_containing_class_0_does_not_extend_another__4112": "Ten element członkowski nie może mieć modyfikatora „override”, ponieważ jego klasa zawierająca „{0}” nie rozszerza innej klasy.",
+  "This_member_must_have_an_override_modifier_because_it_overrides_a_member_in_the_base_class_0_4114": "Ten element członkowski musi mieć modyfikator „override”, ponieważ przesłania on element członkowski w klasie podstawowej „{0}”.",
+  "This_member_must_have_an_override_modifier_because_it_overrides_an_abstract_method_that_is_declared__4116": "Ten element członkowski musi mieć modyfikator „override”, ponieważ zastępuje metodę abstrakcyjną zadeklarowaną w klasie podstawowej „{0}”.",
   "This_module_can_only_be_referenced_with_ECMAScript_imports_Slashexports_by_turning_on_the_0_flag_and_2497": "Do tego modułu można odwoływać się tylko za pomocą importów/eksportów języka ECMAScript, włączając flagę „{0}” i odwołując się do jego eksportu domyślnego.",
   "This_module_is_declared_with_using_export_and_can_only_be_used_with_a_default_import_when_using_the__2594": "Ten moduł jest zadeklarowany przy użyciu składni „export =” i może być używany tylko z importem domyślnym, gdy jest używana flaga „{0}”.",
   "This_overload_signature_is_not_compatible_with_its_implementation_signature_2394": "Ta sygnatura przeciążenia nie jest zgodna z jej sygnaturą implementacji.",
   "This_parameter_is_not_allowed_with_use_strict_directive_1346": "Ten parametr nie jest dozwolony w dyrektywie „use strict”.",
+  "This_parameter_property_must_have_an_override_modifier_because_it_overrides_a_member_in_base_class_0_4115": "Ta właściwość parametru musi mieć modyfikator \"override\", ponieważ zastępuje on członka w klasie bazowej \"{0}\".",
   "This_spread_always_overwrites_this_property_2785": "To rozmieszczenie zawsze powoduje zastąpienie tej właściwości.",
   "This_syntax_requires_an_imported_helper_but_module_0_cannot_be_found_2354": "Ta składnia wymaga zaimportowanego pomocnika, ale nie można znaleźć modułu „{0}”.",
   "This_syntax_requires_an_imported_helper_named_1_which_does_not_exist_in_0_Consider_upgrading_your_ve_2343": "Ta składnia wymaga zaimportowanego pomocnika o nazwie „{1}”, który nie istnieje w elemencie „{0}”. Rozważ uaktualnienie wersji „{0}”.",
+  "This_syntax_requires_an_imported_helper_named_1_with_2_parameters_which_is_not_compatible_with_the_o_2807": "Ta składnia wymaga zaimportowanego pomocnika o nazwie „{1}” z parametrami {2}, który nie jest zgodny z tym w elemencie „{0}”. Rozważ uaktualnienie wersji elementu „{0}”.",
   "Top_level_await_expressions_are_only_allowed_when_the_module_option_is_set_to_esnext_or_system_and_t_1378": "Wyrażenia „await” na najwyższym poziomie są dozwolone tylko wtedy, gdy opcja „module” jest ustawiona na wartość „esnext” lub „system”, a opcja „target” jest ustawiona na wartość „es2017” lub wyższą.",
   "Top_level_declarations_in_d_ts_files_must_start_with_either_a_declare_or_export_modifier_1046": "Deklaracje najwyższego poziomu w plikach .d.ts muszą rozpoczynać się od modyfikatora „declare” lub „export”.",
+  "Top_level_for_await_loops_are_only_allowed_when_the_module_option_is_set_to_esnext_or_system_and_the_1432": "Pętle „for await” na najwyższym poziomie są dozwolone tylko wtedy, gdy opcja „module” jest ustawiona na wartość „esnext” lub „system”, a opcja „target” jest ustawiona na wartość „es2017” lub wyższą.",
   "Trailing_comma_not_allowed_1009": "Końcowy przecinek jest niedozwolony.",
   "Transpile_each_file_as_a_separate_module_similar_to_ts_transpileModule_6153": "Transpiluj każdy plik jako oddzielny moduł (podobne do „ts.transpileModule”).",
   "Try_npm_i_save_dev_types_Slash_1_if_it_exists_or_add_a_new_declaration_d_ts_file_containing_declare__7035": "Spróbuj użyć polecenia „npm i --save-dev @types/{1}”, jeśli istnieje, lub dodać nowy plik deklaracji (.d.ts) zawierający ciąg „declare module '{0}';”",
@@ -1240,6 +1485,7 @@
   "Tuple_members_must_all_have_names_or_all_not_have_names_5084": "Wszystkie składowe krotki muszą mieć nazwy albo wszystkie nie mogą mieć nazw.",
   "Tuple_type_0_of_length_1_has_no_element_at_index_2_2493": "Typ krotki „{0}” o długości „{1}” nie ma żadnego elementu w indeksie „{2}”.",
   "Tuple_type_arguments_circularly_reference_themselves_4110": "Argumenty typu krotki cyklicznie odwołują się do samych siebie.",
+  "Type_0_can_only_be_iterated_through_when_using_the_downlevelIteration_flag_or_with_a_target_of_es201_2802": "Po typie „{0}” można iterować tylko wtedy, gdy jest używana flaga „--downlevelIteration” lub parametr „--target” ma wartość „es2015” lub wyższą.",
   "Type_0_cannot_be_used_as_an_index_type_2538": "Typu „{0}” nie można używać jako typu indeksu.",
   "Type_0_cannot_be_used_to_index_type_1_2536": "Typu „{0}” nie można użyć do indeksowania typu „{1}”.",
   "Type_0_does_not_satisfy_the_constraint_1_2344": "Typ „{0}” nie spełnia warunków ograniczenia „{1}”.",
@@ -1264,7 +1510,9 @@
   "Type_0_must_have_a_Symbol_iterator_method_that_returns_an_iterator_2488": "Typ „{0}” musi zawierać metodę „[Symbol.iterator]()” zwracającą iterator.",
   "Type_0_provides_no_match_for_the_signature_1_2658": "Typ „{0}” nie udostępnia dopasowania dla sygnatury „{1}”.",
   "Type_0_recursively_references_itself_as_a_base_type_2310": "Typ „{0}” rekursywnie przywołuje sam siebie jako typ podstawowy.",
+  "Type_Checking_6248": "Sprawdzanie typu",
   "Type_alias_0_circularly_references_itself_2456": "Alias typu „{0}” cyklicznie przywołuje sam siebie.",
+  "Type_alias_must_be_given_a_name_1439": "Alias typu musi mieć nazwę.",
   "Type_alias_name_cannot_be_0_2457": "Alias typu nie może mieć nazwy „{0}”.",
   "Type_aliases_can_only_be_used_in_TypeScript_files_8008": "Aliasów typów można używać tylko w plikach TypeScript.",
   "Type_annotation_cannot_appear_on_a_constructor_declaration_1093": "Adnotacja typu nie może występować w deklaracji konstruktora.",
@@ -1276,10 +1524,15 @@
   "Type_arguments_cannot_be_used_here_1342": "Nie można tutaj używać argumentów typu.",
   "Type_arguments_for_0_circularly_reference_themselves_4109": "Argumenty typu dla elementu „{0}” cyklicznie odwołują się do samych siebie.",
   "Type_assertion_expressions_can_only_be_used_in_TypeScript_files_8016": "Wyrażeń asercji typu można używać tylko w plikach TypeScript.",
+  "Type_at_position_0_in_source_is_not_compatible_with_type_at_position_1_in_target_2626": "Typ na pozycji {0} w źródle nie jest zgodny z typem na pozycji {1} w lokalizacji docelowej.",
+  "Type_at_positions_0_through_1_in_source_is_not_compatible_with_type_at_position_2_in_target_2627": "Typ na pozycjach od {0} do {1} w źródle nie jest zgodny z typem w pozycji {2} w lokalizacji docelowej.",
+  "Type_catch_clause_variables_as_unknown_instead_of_any_6803": "Wpisz zmienne klauzuli catch jako \"unknown\" zamiast \"any\".",
   "Type_declaration_files_to_be_included_in_compilation_6124": "Pliki deklaracji typu do uwzględnienia w kompilacji.",
   "Type_expected_1110": "Oczekiwano typu.",
   "Type_instantiation_is_excessively_deep_and_possibly_infinite_2589": "Tworzenie wystąpienia typu jest nadmiernie szczegółowe i prawdopodobnie nieskończone.",
   "Type_is_referenced_directly_or_indirectly_in_the_fulfillment_callback_of_its_own_then_method_1062": "Typ jest przywoływany bezpośrednio lub pośrednio w wywołaniu zwrotnym realizacji jego własnej metody „then”.",
+  "Type_library_referenced_via_0_from_file_1_1402": "Biblioteka typów jest przywoływana za pośrednictwem elementu „{0}” z pliku „{1}”",
+  "Type_library_referenced_via_0_from_file_1_with_packageId_2_1403": "Biblioteka typów jest przywoływana za pośrednictwem elementu „{0}” z pliku „{1}” o identyfikatorze packageId „{2}”",
   "Type_of_await_operand_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member_1320": "Typ operandu „await” musi być prawidłową obietnicą lub nie może zawierać wywoływalnej składowej „then”.",
   "Type_of_computed_property_s_value_is_0_which_is_not_assignable_to_type_1_2418": "Typ wartości właściwości obliczanej to „{0}”, którego nie można przypisać do typu „{1}”.",
   "Type_of_iterated_elements_of_a_yield_Asterisk_operand_must_either_be_a_valid_promise_or_must_not_con_1322": "Typ iterowanych elementów operandu „yield*” musi być prawidłową obietnicą lub nie może zawierać wywoływalnej składowej „then”.",
@@ -1305,6 +1558,7 @@
   "Type_parameter_name_cannot_be_0_2368": "Parametr typu nie może mieć nazwy „{0}”.",
   "Type_parameters_cannot_appear_on_a_constructor_declaration_1092": "Parametry typu nie mogą występować w deklaracji konstruktora.",
   "Type_predicate_0_is_not_assignable_to_1_1226": "Predykatu typów „{0}” nie można przypisać do elementu „{1}”.",
+  "Type_produces_a_tuple_type_that_is_too_large_to_represent_2799": "Typ tworzy typ krotki, który jest zbyt duży, aby go reprezentować.",
   "Type_reference_directive_0_was_not_resolved_6120": "======== Dyrektywa odwołania do typu „{0}” nie została rozpoznana. ========",
   "Type_reference_directive_0_was_successfully_resolved_to_1_primary_Colon_2_6119": "======== Dyrektywa odwołania do typu „{0}” została pomyślnie rozpoznana jako „{1}”, podstawowe: {2}. ========",
   "Type_reference_directive_0_was_successfully_resolved_to_1_with_Package_ID_2_primary_Colon_3_6219": "======== Dyrektywa odwołania do typu „{0}” została pomyślnie rozpoznana jako „{1}” z identyfikatorem pakietu „{2}”, podstawowe: {3}. ========",
@@ -1318,6 +1572,7 @@
   "Unable_to_resolve_signature_of_parameter_decorator_when_called_as_an_expression_1239": "Nie można rozpoznać sygnatury dekoratora parametru wywołanego jako wyrażenie.",
   "Unable_to_resolve_signature_of_property_decorator_when_called_as_an_expression_1240": "Nie można rozpoznać sygnatury dekoratora właściwości wywołanego jako wyrażenie.",
   "Unexpected_end_of_text_1126": "Nieoczekiwany koniec tekstu.",
+  "Unexpected_keyword_or_identifier_1434": "Nieoczekiwane słowo kluczowe lub identyfikator.",
   "Unexpected_token_1012": "Nieoczekiwany token.",
   "Unexpected_token_A_constructor_method_accessor_or_property_was_expected_1068": "Nieoczekiwany token. Oczekiwano konstruktora, metody, metody dostępu lub właściwości.",
   "Unexpected_token_A_type_parameter_name_was_expected_without_curly_braces_1069": "Nieoczekiwany token. Oczekiwano nazwy parametru typu bez nawiasów klamrowych.",
@@ -1328,6 +1583,7 @@
   "Unknown_build_option_0_Did_you_mean_1_5077": "Nieznana opcja kompilacji „{0}”. Czy chodziło o „{1}”?",
   "Unknown_compiler_option_0_5023": "Nieznana opcja kompilatora „{0}”.",
   "Unknown_compiler_option_0_Did_you_mean_1_5025": "Nieznana opcja kompilatora „{0}”. Czy chodziło o „{1}”?",
+  "Unknown_keyword_or_identifier_Did_you_mean_0_1435": "Nieznane słowo kluczowe lub identyfikator. Czy chodziło Ci o „{0}”?",
   "Unknown_option_excludes_Did_you_mean_exclude_6114": "Nieznana opcja „excludes”. Czy chodziło o „exclude”?",
   "Unknown_type_acquisition_option_0_17010": "Opcja pozyskania nieznanego typu „{0}”.",
   "Unknown_type_acquisition_option_0_Did_you_mean_1_17018": "Nieznana opcja pozyskania typu „{0}”. Czy chodziło o „{1}”?",
@@ -1350,6 +1606,7 @@
   "Use_element_access_for_all_undeclared_properties_95146": "Użyj dostępu do elementu w przypadku wszystkich niezadeklarowanych właściwości.",
   "Use_synthetic_default_member_95016": "Użyj syntetycznej składowej „default”.",
   "Using_a_string_in_a_for_of_statement_is_only_supported_in_ECMAScript_5_and_higher_2494": "Używanie ciągu w instrukcji „for...of” jest obsługiwane tylko w języku ECMAScript 5 lub nowszym.",
+  "Using_build_b_will_make_tsc_behave_more_like_a_build_orchestrator_than_a_compiler_This_is_used_to_tr_6915": "Użycie elementu --build, -b sprawi, że narzędzie tsc będzie zachowywało się bardziej jak orkiestrator kompilacji niż kompilator. Ta opcja jest wykorzystywana do wyzwalania kompilacji projektów złożonych, o których dowiesz się więcej na stronie {0}",
   "Using_compiler_options_of_project_reference_redirect_0_6215": "Using compiler options of project reference redirect '{0}'.",
   "VERSION_6036": "WERSJA",
   "Value_of_type_0_has_no_properties_in_common_with_type_1_Did_you_mean_to_call_it_2560": "Wartość typu „{0}” nie ma żadnych wspólnych właściwości z typem „{1}”. Czy jej wywołanie było zamierzone?",
@@ -1361,10 +1618,16 @@
   "Variable_0_is_used_before_being_assigned_2454": "Zmienna „{0}” jest używana przed przypisaniem.",
   "Variable_declaration_expected_1134": "Oczekiwano deklaracji zmiennej.",
   "Variable_declaration_list_cannot_be_empty_1123": "Lista deklaracji zmiennych nie może być pusta.",
+  "Variable_declaration_not_allowed_at_this_location_1440": "Deklaracja zmiennej jest niedozwolona w tej lokalizacji.",
+  "Variadic_element_at_position_0_in_source_does_not_match_element_at_position_1_in_target_2625": "Element ze zmienną liczbą argumentów na pozycji {0} w źródle nie jest zgodny z elementem na pozycji {1} w lokalizacji docelowej.",
   "Version_0_6029": "Wersja {0}",
   "Visit_https_Colon_Slash_Slashaka_ms_Slashtsconfig_json_to_read_more_about_this_file_95110": "Odwiedź witrynę https://aka.ms/tsconfig.json, aby dowiedzieć się więcej o tym pliku",
+  "WATCH_OPTIONS_6918": "OPCJE OBSERWACJI",
+  "Watch_and_Build_Modes_6250": "Tryb wyrażeń kontrolnych i kompilowania",
   "Watch_input_files_6005": "Obserwuj pliki wejściowe.",
   "Watch_option_0_requires_a_value_of_type_1_5080": "Opcja obserwowania „{0}” wymaga wartości typu {1}.",
+  "When_assigning_functions_check_to_ensure_parameters_and_the_return_values_are_subtype_compatible_6698": "Podczas przypisywania funkcji upewnij się, że parametry i zwracane wartości są zgodne pod względem podtypów.",
+  "When_type_checking_take_into_account_null_and_undefined_6699": "Podczas sprawdzania typów uwzględniaj elementy „null” i „undefined”.",
   "Whether_to_keep_outdated_console_output_in_watch_mode_instead_of_clearing_the_screen_6191": "Określa, czy zachować nieaktualne dane wyjściowe konsoli w trybie śledzenia zamiast wyczyścić ekran.",
   "Wrap_all_invalid_characters_in_an_expression_container_95109": "Opakuj wszystkie nieprawidłowe znaki w kontenerze wyrażenia",
   "Wrap_all_object_literal_with_parentheses_95116": "Zawijaj wszystkie literały obiektu z nawiasami",
@@ -1372,10 +1635,12 @@
   "Wrap_in_JSX_fragment_95120": "Opakuj we fragment JSX",
   "Wrap_invalid_character_in_an_expression_container_95108": "Opakuj nieprawidłowy znak w kontenerze wyrażenia",
   "Wrap_the_following_body_with_parentheses_which_should_be_an_object_literal_95113": "Zawijaj następującą treść z nawiasami, która powinna być literałem obiektu",
+  "You_can_learn_about_all_of_the_compiler_options_at_0_6913": "O wszystkich opcjach kompilatora przeczytasz na stronie {0}",
   "You_cannot_rename_a_module_via_a_global_import_8031": "Nie można zmienić nazwy modułu za pomocą importu globalnego.",
   "You_cannot_rename_elements_that_are_defined_in_the_standard_TypeScript_library_8001": "Nie można zmienić nazw elementów zdefiniowanych w standardowej bibliotece TypeScript.",
   "You_cannot_rename_this_element_8000": "Nie można zmienić nazwy tego elementu.",
   "_0_accepts_too_few_arguments_to_be_used_as_a_decorator_here_Did_you_mean_to_call_it_first_and_write__1329": "Element „{0}” akceptuje za mało argumentów, aby można go było użyć w tym miejscu jako dekorator. Czy chcesz najpierw go wywołać i zapisać tag „@{0}()”?",
+  "_0_and_1_index_signatures_are_incompatible_2330": "Sygnatury indeksów „{0}” i „{1}” są niezgodne.",
   "_0_and_1_operations_cannot_be_mixed_without_parentheses_5076": "Operacji „{0}” i „{1}” nie można mieszać bez nawiasów.",
   "_0_are_specified_twice_The_attribute_named_0_will_be_overwritten_2710": "Element „{0}” został określony dwa razy. Atrybut o nazwie „{0}” zostanie przesłonięty.",
   "_0_can_only_be_imported_by_turning_on_the_esModuleInterop_flag_and_using_a_default_import_2596": "Element „{0}” można zaimportować tylko przez włączenie flagi „esModuleInterop” i użycie importu domyślnego.",
@@ -1396,6 +1661,8 @@
   "_0_implicitly_has_an_1_return_type_but_a_better_type_may_be_inferred_from_usage_7050": "Element „{0}” niejawnie ma zwracany typ „{1}”, ale lepszy typ można wywnioskować na podstawie użycia.",
   "_0_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_reference_7023": "Dla elementu „{0}” niejawnie określono zwracany typ „any”, ponieważ nie zawiera on adnotacji zwracanego typu i jest przywoływany bezpośrednio lub pośrednio w jednym z jego zwracanych wyrażeń.",
   "_0_implicitly_has_type_any_because_it_does_not_have_a_type_annotation_and_is_referenced_directly_or__7022": "Dla elementu „{0}” niejawnie określono typ „any”, ponieważ nie zawiera on adnotacji typu i jest przywoływany bezpośrednio lub pośrednio w jego własnym inicjatorze.",
+  "_0_index_signatures_are_incompatible_2634": "Sygnatury indeksów „{0}” są niezgodne.",
+  "_0_index_type_1_is_not_assignable_to_2_index_type_3_2413": "Typu indeksu „{0}” „{1}” nie można przypisać do typu indeksu „{2}” „{3}”.",
   "_0_is_a_primitive_but_1_is_a_wrapper_object_Prefer_using_0_when_possible_2692": "Element „{0}” jest elementem podstawowym, ale element „{1}” jest obiektem otoki. Preferuje się użycie elementu „{0}”, jeśli jest to możliwe.",
   "_0_is_assignable_to_the_constraint_of_type_1_but_1_could_be_instantiated_with_a_different_subtype_of_5075": "Element „{0}” można przypisać do ograniczenia typu „{1}”, ale wystąpienie typu „{1}” można utworzyć z innym podtypem ograniczenia „{2}”.",
   "_0_is_declared_but_its_value_is_never_read_6133": "Element „{0}” jest zadeklarowany, ale jego wartość nie jest nigdy odczytywana.",
@@ -1403,7 +1670,7 @@
   "_0_is_declared_here_2728": "Element „{0}” jest zadeklarowany tutaj.",
   "_0_is_defined_as_a_property_in_class_1_but_is_overridden_here_in_2_as_an_accessor_2611": "Element „{0}” jest zdefiniowany jako właściwość w klasie „{1}”, ale jest przesłaniany tutaj w elemencie „{2}” jako metoda dostępu.",
   "_0_is_defined_as_an_accessor_in_class_1_but_is_overridden_here_in_2_as_an_instance_property_2610": "Element „{0}” jest zdefiniowany jako metoda dostępu w klasie „{1}”, ale jest przesłaniany tutaj w elemencie „{2}” jako właściwość wystąpienia.",
-  "_0_is_deprecated_6385": "Element „{0}” jest przestarzały",
+  "_0_is_deprecated_6385": "Element „{0}” jest przestarzały.",
   "_0_is_not_a_valid_meta_property_for_keyword_1_Did_you_mean_2_17012": "„{0}” nie jest prawidłową metawłaściwością słowa kluczowego „{1}”. Czy miał to być element „{2}”?",
   "_0_is_not_allowed_as_a_variable_declaration_name_1389": "Element „{0}” nie jest dozwolony jako nazwa deklaracji zmiennej.",
   "_0_is_referenced_directly_or_indirectly_in_its_own_base_expression_2506": "Element „{0}” jest przywoływany bezpośrednio lub pośrednio w jego własnym wyrażeniu podstawowym.",
@@ -1428,7 +1695,7 @@
   "_0_only_refers_to_a_type_but_is_being_used_as_a_namespace_here_2702": "Element „{0}” odwołuje się tylko do typu, ale jest używany tutaj jako przestrzeń nazw.",
   "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_2693": "Element „{0}” odwołuje się jedynie do typu, ale jest używany w tym miejscu jako wartość.",
   "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_Did_you_mean_to_use_1_in_0_2690": "Element „{0}” odwołuje się do typu, ale jest używany tutaj jako wartość. Czy chodziło o użycie wyrażenia „{1} in {0}”?",
-  "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_Do_you_need_to_change_your_target_library_2585": "Element „{0}” odwołuje się tylko do typu, ale jest używany tutaj jako wartość. Czy chcesz zmienić bibliotekę docelową? Spróbuj zmienić opcję kompilatora „lib” na es2015 lub nowszą.",
+  "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_Do_you_need_to_change_your_target_library_2585": "Element \"{0}\" odwołuje się tylko do typu, ale jest używany tutaj jako wartość. Czy chcesz zmienić bibliotekę docelową? Spróbuj zmienić opcję kompilatora \"lib\" na es2015 lub nowszą.",
   "_0_refers_to_a_UMD_global_but_the_current_file_is_a_module_Consider_adding_an_import_instead_2686": "„{0}” odnosi się do globalnego formatu UMD, ale bieżący plik jest modułem. Rozważ zamiast tego dodanie importu.",
   "_0_refers_to_a_value_but_is_being_used_as_a_type_here_Did_you_mean_typeof_0_2749": "Element „{0}” odwołuje się do wartości, ale jest używany tutaj jako typ. Czy chodziło o „typeof {0}”?",
   "_0_tag_already_specified_1223": "Tag „{0}” jest już określony.",
@@ -1440,6 +1707,7 @@
   "_0_which_lacks_return_type_annotation_implicitly_has_an_1_yield_type_7055": "Dla elementu „{0}” bez adnotacji zwracanego typu niejawnie określono zwracany typ „{1}”.",
   "abstract_modifier_can_only_appear_on_a_class_method_or_property_declaration_1242": "Modyfikator „abstract” może być stosowany jedynie w przypadku deklaracji klasy, metody lub właściwości.",
   "and_here_6204": "i tutaj.",
+  "arguments_cannot_be_referenced_in_property_initializers_2815": "w inicjatorach właściwości nie można odwoływać się do \"arguments\".",
   "await_expressions_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_fi_1375": "Wyrażenia „await” na najwyższym poziomie pliku są dozwolone tylko wtedy, gdy plik jest modułem, ale ten plik nie ma żadnych importów ani eksportów. Rozważ dodanie pustego elementu „export {}”, aby ten plik był modułem.",
   "await_expressions_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_1308": "Wyrażenia „await” są dozwolone tylko w funkcjach asynchronicznych i na najwyższym poziomie modułów.",
   "await_expressions_cannot_be_used_in_a_parameter_initializer_2524": "Wyrażeń „await” nie można używać w inicjatorze parametru.",
@@ -1456,6 +1724,7 @@
   "const_enums_can_only_be_used_in_property_or_index_access_expressions_or_the_right_hand_side_of_an_im_2475": "Wyliczenia ze specyfikatorem „const” mogą być używane tylko w wyrażeniach dostępu do indeksu lub właściwości albo po prawej stronie deklaracji importu, przypisania eksportu lub typu zapytania.",
   "constructor_cannot_be_used_as_a_parameter_property_name_2398": "Nie można użyć ciągu „constructor” jako nazwy właściwości parametru.",
   "constructor_is_a_reserved_word_18012": "„#constructor” jest słowem zastrzeżonym.",
+  "default_Colon_6903": "wartość domyślna:",
   "delete_cannot_be_called_on_an_identifier_in_strict_mode_1102": "Nie można wywołać elementu „delete” dla identyfikatora w trybie z ograniczeniami.",
   "delete_this_Project_0_is_up_to_date_because_it_was_previously_built_6360": "usuń to — projekt „{0}” jest aktualny, ponieważ został wcześniej skompilowany",
   "export_Asterisk_does_not_re_export_a_default_1195": "Wyrażenie „export *” nie eksportuje ponownie eksportów domyślnych.",
@@ -1466,17 +1735,26 @@
   "extends_clause_of_exported_class_0_has_or_is_using_private_name_1_4020": "Klauzula „extends” wyeksportowanej klasy „{0}” ma nazwę prywatną „{1}” lub używa tej nazwy.",
   "extends_clause_of_exported_class_has_or_is_using_private_name_0_4021": "Klauzula „extends” wyeksportowanej klasy ma nazwę prywatną „{0}” lub używa tej nazwy.",
   "extends_clause_of_exported_interface_0_has_or_is_using_private_name_1_4022": "Klauzula „extends” wyeksportowanego interfejsu „{0}” ma nazwę prywatną „{1}” lub używa tej nazwy.",
+  "false_unless_composite_is_set_6906": "\"false\", chyba że ustawiono element \"composite\"",
+  "false_unless_strict_is_set_6905": "\"false\", chyba że ustawiono \"strict\"",
   "file_6025": "plik",
+  "for_await_loops_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_file_1431": "Pętle „for await” na najwyższym poziomie pliku są dozwolone tylko wtedy, gdy plik jest modułem, ale ten plik nie ma żadnych importów ani eksportów. Rozważ dodanie pustego elementu „export {}”, aby ten plik był modułem.",
+  "for_await_loops_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_1103": "Pętle „for await” są dozwolone tylko w funkcjach asynchronicznych i na najwyższym poziomie modułów.",
   "get_and_set_accessor_must_have_the_same_this_type_2682": "Metody dostępu „get” i „set” muszą mieć ten sam typ „this”.",
-  "get_and_set_accessor_must_have_the_same_type_2380": "Metody dostępu „get” i „set” muszą być tego samego typu.",
   "get_and_set_accessors_cannot_declare_this_parameters_2784": "Metody dostępu „get” i „set” nie mogą deklarować parametrów „this”.",
+  "if_files_is_specified_otherwise_Asterisk_Asterisk_Slash_Asterisk_6908": "\"[]\" jeśli określono \"files\", w przeciwnym razie \"[\"**/*\"]5D;\"",
   "implements_clause_already_seen_1175": "Napotkano już klauzulę „implements”.",
   "implements_clauses_can_only_be_used_in_TypeScript_files_8005": "Klauzule „implements” mogą być używane tylko w plikach TypeScript.",
   "import_can_only_be_used_in_TypeScript_files_8002": "Ciąg „import ... =” może być używany tylko w plikach TypeScript.",
   "infer_declarations_are_only_permitted_in_the_extends_clause_of_a_conditional_type_1338": "Deklaracje „infer” są dozwolone tylko w klauzuli „extends” typu warunkowego.",
   "let_declarations_can_only_be_declared_inside_a_block_1157": "Deklaracje „let” mogą być deklarowane tylko w bloku.",
   "let_is_not_allowed_to_be_used_as_a_name_in_let_or_const_declarations_2480": "Element „let” nie może być używany jako nazwa w deklaracjach „let” ani „const”.",
+  "module_AMD_or_UMD_or_System_or_ES6_then_Classic_Otherwise_Node_69010": "module === \"AMD\" lub \"UMD\" lub \"System\" lub \"ES6\", a następnie \"Classic\", w przeciwnym razie \"Node\"",
+  "module_system_or_esModuleInterop_6904": "module === \"system\" lub esModuleInterop",
   "new_expression_whose_target_lacks_a_construct_signature_implicitly_has_an_any_type_7009": "Wyrażenie „new”, którego element docelowy nie ma sygnatury konstrukcji, jest niejawnie typu „any”.",
+  "node_modules_bower_components_jspm_packages_plus_the_value_of_outDir_if_one_is_specified_6907": "\"[\"node_modules\", \"bower_components\", \"jspm_packages\"]\", plus wartość elementu \"outDir\", jeśli jest określona.",
+  "one_of_Colon_6900": "jeden z:",
+  "one_or_more_Colon_6901": "co najmniej jeden:",
   "options_6024": "opcje",
   "or_expected_1144": "Oczekiwano znaku „{” lub „;”.",
   "package_json_does_not_have_a_0_field_6100": "Plik „package.json” nie zawiera pola „{0}”.",
@@ -1507,6 +1785,9 @@
   "this_cannot_be_referenced_in_constructor_arguments_2333": "Nie można przywołać elementu „this” w argumentach konstruktora.",
   "this_cannot_be_referenced_in_current_location_2332": "Nie można przywołać elementu „this” w bieżącej lokalizacji.",
   "this_implicitly_has_type_any_because_it_does_not_have_a_type_annotation_2683": "Element „this” niejawnie przyjmuje typ „any”, ponieważ nie ma adnotacji typu.",
+  "true_if_composite_false_otherwise_6909": "\"true\", jeśli \"composite\", w przeciwnym razie \"false\"",
+  "tsc_Colon_The_TypeScript_Compiler_6922": "tsc: kompilator TypeScript",
+  "type_Colon_6902": "typ:",
   "unique_symbol_types_are_not_allowed_here_1335": "Typy „unique symbol” nie są dozwolone w tym miejscu.",
   "unique_symbol_types_are_only_allowed_on_variables_in_a_variable_statement_1334": "Typy „unique symbol” są dozwolone tylko w zmiennych w instrukcji zmiennej.",
   "unique_symbol_types_may_not_be_used_on_a_variable_declaration_with_a_binding_name_1333": "Typów „unique symbol” nie można używać w deklaracji zmiennej z nazwą powiązania.",
@@ -1514,5 +1795,6 @@
   "use_strict_directive_used_here_1349": "Dyrektywa „use strict” użyta w tym miejscu.",
   "with_statements_are_not_allowed_in_an_async_function_block_1300": "Instrukcje „with” są niedozwolone w bloku funkcji asynchronicznej.",
   "with_statements_are_not_allowed_in_strict_mode_1101": "Instrukcje „with” są niedozwolone w trybie z ograniczeniami.",
+  "yield_expression_implicitly_results_in_an_any_type_because_its_containing_generator_lacks_a_return_t_7057": "Wyrażenie „yield” niejawnie zwraca wynik w postaci typu „any”, ponieważ w zawierającym generatorze brakuje adnotacji zwracanego typu.",
   "yield_expressions_cannot_be_used_in_a_parameter_initializer_2523": "Wyrażeń „yield” nie można używać w inicjatorze parametru."
 }
\ No newline at end of file
diff --git a/node_modules/typescript/lib/protocol.d.ts b/node_modules/typescript/lib/protocol.d.ts
index d8faa2a..fab689b 100644
--- a/node_modules/typescript/lib/protocol.d.ts
+++ b/node_modules/typescript/lib/protocol.d.ts
@@ -72,7 +72,8 @@
         UncommentSelection = "uncommentSelection",
         PrepareCallHierarchy = "prepareCallHierarchy",
         ProvideCallHierarchyIncomingCalls = "provideCallHierarchyIncomingCalls",
-        ProvideCallHierarchyOutgoingCalls = "provideCallHierarchyOutgoingCalls"
+        ProvideCallHierarchyOutgoingCalls = "provideCallHierarchyOutgoingCalls",
+        ProvideInlayHints = "provideInlayHints"
     }
     /**
      * A TypeScript Server message
@@ -1589,6 +1590,14 @@
         arguments: FormatOnKeyRequestArgs;
     }
     type CompletionsTriggerCharacter = "." | '"' | "'" | "`" | "/" | "@" | "<" | "#" | " ";
+    const enum CompletionTriggerKind {
+        /** Completion was triggered by typing an identifier, manual invocation (e.g Ctrl+Space) or via API. */
+        Invoked = 1,
+        /** Completion was triggered by a trigger character. */
+        TriggerCharacter = 2,
+        /** Completion was re-triggered as the current completion list is incomplete. */
+        TriggerForIncompleteCompletions = 3
+    }
     /**
      * Arguments for completions messages.
      */
@@ -1602,6 +1611,7 @@
          * Should be `undefined` if a user manually requested completion.
          */
         triggerCharacter?: CompletionsTriggerCharacter;
+        triggerKind?: CompletionTriggerKind;
         /**
          * @deprecated Use UserPreferences.includeCompletionsForModuleExports
          */
@@ -1944,6 +1954,31 @@
     interface SignatureHelpResponse extends Response {
         body?: SignatureHelpItems;
     }
+    type InlayHintKind = "Type" | "Parameter" | "Enum";
+    interface InlayHintsRequestArgs extends FileRequestArgs {
+        /**
+         * Start position of the span.
+         */
+        start: number;
+        /**
+         * Length of the span.
+         */
+        length: number;
+    }
+    interface InlayHintsRequest extends Request {
+        command: CommandTypes.ProvideInlayHints;
+        arguments: InlayHintsRequestArgs;
+    }
+    interface InlayHintItem {
+        text: string;
+        position: Location;
+        kind: InlayHintKind;
+        whitespaceBefore?: boolean;
+        whitespaceAfter?: boolean;
+    }
+    interface InlayHintsResponse extends Response {
+        body?: InlayHintItem[];
+    }
     /**
      * Synchronous request for semantic diagnostics of one file.
      */
@@ -2602,6 +2637,7 @@
          * values, with insertion text to replace preceding `.` tokens with `?.`.
          */
         readonly includeAutomaticOptionalChainCompletions?: boolean;
+        readonly allowIncompleteCompletions?: boolean;
         readonly importModuleSpecifierPreference?: "shortest" | "project-relative" | "relative" | "non-relative";
         /** Determines whether we import `foo/index.ts` as "foo", "foo/index", or "foo/index.js" */
         readonly importModuleSpecifierEnding?: "auto" | "minimal" | "index" | "js";
@@ -2832,7 +2868,10 @@
          * interface Y { foo:number; }
          */
         memberVariableElement = "property",
-        /** class X { constructor() { } } */
+        /**
+         * class X { constructor() { } }
+         * class X { static { } }
+         */
         constructorImplementationElement = "constructor",
         /** interface Y { ():number; } */
         callSignatureElement = "call",
diff --git a/node_modules/typescript/lib/pt-br/diagnosticMessages.generated.json b/node_modules/typescript/lib/pt-br/diagnosticMessages.generated.json
index 80ce271..dc1bdb7 100644
--- a/node_modules/typescript/lib/pt-br/diagnosticMessages.generated.json
+++ b/node_modules/typescript/lib/pt-br/diagnosticMessages.generated.json
@@ -1,4 +1,5 @@
 {
+  "ALL_COMPILER_OPTIONS_6917": "TODAS AS OPÇÕES DO COMPILADOR",
   "A_0_modifier_cannot_be_used_with_an_import_declaration_1079": "Um modificador '{0}' não pode ser usado com uma declaração de importação.",
   "A_0_modifier_cannot_be_used_with_an_interface_declaration_1045": "Um modificador '{0}' não pode ser usado com uma declaração de interface.",
   "A_0_parameter_must_be_the_first_parameter_2680": "Um parâmetro '{0}' deve ser o primeiro parâmetro.",
@@ -15,7 +16,7 @@
   "A_class_member_cannot_have_the_0_keyword_1248": "Um membro de classe não pode ter a palavra-chave '{0}'.",
   "A_comma_expression_is_not_allowed_in_a_computed_property_name_1171": "Uma expressão de vírgula não é permitida em um nome de propriedade calculado.",
   "A_computed_property_name_cannot_reference_a_type_parameter_from_its_containing_type_2467": "Um nome de propriedade calculado não pode fazer referência a um parâmetro de tipo no seu tipo recipiente.",
-  "A_computed_property_name_in_a_class_property_declaration_must_refer_to_an_expression_whose_type_is_a_1166": "Um nome de propriedade computado em uma declaração de propriedade de classe deve se referir a uma expressão cujo tipo é um tipo literal ou um 'unique symbol'.",
+  "A_computed_property_name_in_a_class_property_declaration_must_have_a_simple_literal_type_or_a_unique_1166": "Um nome de propriedade computado em uma declaração de propriedade de classe precisa ter um tipo literal simples ou um tipo 'símbolo exclusivo'.",
   "A_computed_property_name_in_a_method_overload_must_refer_to_an_expression_whose_type_is_a_literal_ty_1168": "Um nome de propriedade computado em uma sobrecarga do método deve se referir a uma expressão cujo tipo é um tipo literal ou um 'unique symbol'.",
   "A_computed_property_name_in_a_type_literal_must_refer_to_an_expression_whose_type_is_a_literal_type__1170": "Um nome de propriedade computado em um tipo literal deve se referir a uma expressão cujo tipo é um tipo literal ou um 'unique symbol'.",
   "A_computed_property_name_in_an_ambient_context_must_refer_to_an_expression_whose_type_is_a_literal_t_1165": "Um nome de propriedade computado em um contexto de ambiente deve se referir a uma expressão cujo tipo é um tipo literal ou um 'unique symbol'.",
@@ -33,24 +34,25 @@
   "A_decorator_can_only_decorate_a_method_implementation_not_an_overload_1249": "Um decorador pode decorar somente uma implementação de método, não uma sobrecarga.",
   "A_default_clause_cannot_appear_more_than_once_in_a_switch_statement_1113": "Uma cláusula 'default' não pode aparecer mais de uma vez em uma instrução 'switch'.",
   "A_default_export_can_only_be_used_in_an_ECMAScript_style_module_1319": "Uma exportação padrão só pode ser usada em um módulo do estilo ECMAScript.",
+  "A_default_export_must_be_at_the_top_level_of_a_file_or_module_declaration_1258": "Uma exportação padrão deve estar no nível superior de uma declaração de arquivo ou módulo.",
   "A_definite_assignment_assertion_is_not_permitted_in_this_context_1255": "Uma declaração de atribuição definitiva '!' não é permitida neste contexto.",
   "A_destructuring_declaration_must_have_an_initializer_1182": "Uma declaração de desestruturação deve ter um inicializador.",
-  "A_dynamic_import_call_in_ES5_SlashES3_requires_the_Promise_constructor_Make_sure_you_have_a_declarat_2712": "Uma chamada de importação dinâmica em ES5/ES3 exige o construtor 'Promise'. Verifique se você tem uma declaração para o construtor 'Promise' ou inclua 'ES2015' em sua opção `--lib`.",
-  "A_dynamic_import_call_returns_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_include_ES20_2711": "Uma chamada de importação dinâmica retorna um 'Promise'. Verifique se você tem uma declaração para 'Promise' ou inclua 'ES2015' em sua opção `--lib`.",
+  "A_dynamic_import_call_in_ES5_SlashES3_requires_the_Promise_constructor_Make_sure_you_have_a_declarat_2712": "Uma chamada de importação dinâmica em ES5/ES3 requer o construtor 'Promise'.  Verifique se você tem uma declaração para o construtor 'Promise' ou inclua 'ES2015' na sua opção '--lib'.",
+  "A_dynamic_import_call_returns_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_include_ES20_2711": "Uma chamada de importação dinâmica retorna um 'Promise'. Verifique se você tem uma declaração para 'Promise' ou inclua 'ES2015' na sua opção '--lib'.",
   "A_file_cannot_have_a_reference_to_itself_1006": "Um arquivo não pode fazer referência a si mesmo.",
-  "A_for_await_of_statement_is_only_allowed_within_an_async_function_or_async_generator_1103": "Uma instrução 'for-await-of' é permitida somente na função assíncrona ou no gerador assíncrono.",
   "A_function_returning_never_cannot_have_a_reachable_end_point_2534": "Uma função que retorna 'never' não pode ter um ponto de extremidade acessível.",
   "A_function_that_is_called_with_the_new_keyword_cannot_have_a_this_type_that_is_void_2679": "Uma função chamada com a palavra-chave 'new' não pode ter um tipo 'this' que seja 'void'.",
   "A_function_whose_declared_type_is_neither_void_nor_any_must_return_a_value_2355": "A função cujo tipo declarado não é 'void' nem 'any' deve retornar um valor.",
   "A_generator_cannot_have_a_void_type_annotation_2505": "O gerador não pode ter uma anotação de tipo 'void'.",
   "A_get_accessor_cannot_have_parameters_1054": "Um acessador 'get' não pode ter parâmetros.",
+  "A_get_accessor_must_be_at_least_as_accessible_as_the_setter_2808": "Um acessador get precisa ser pelo menos tão acessível quanto o setter",
   "A_get_accessor_must_return_a_value_2378": "Um acessador 'get' deve retornar um valor.",
   "A_label_is_not_allowed_here_1344": "Um rótulo não é permitido aqui.",
   "A_labeled_tuple_element_is_declared_as_optional_with_a_question_mark_after_the_name_and_before_the_c_5086": "Um elemento de tupla rotulado é declarado como opcional com um ponto de interrogação depois do nome e antes de dois-pontos, em vez de depois do tipo.",
-  "A_labeled_tuple_element_is_declared_as_rest_with_a_before_the_name_rather_than_before_the_type_5087": "Um elemento de tupla rotulado é declarado como rest com um `...` antes do nome, em vez de antes do tipo.",
+  "A_labeled_tuple_element_is_declared_as_rest_with_a_before_the_name_rather_than_before_the_type_5087": "Um elemento de tupla rotulado foi declarado como Rest com um '...' antes do nome, em vez de antes do tipo.",
   "A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_memb_2651": "O inicializador de um membro em uma declaração de enumeração não pode referenciar membros declarados depois dele, inclusive membros definidos em outras enumerações.",
-  "A_method_cannot_be_named_with_a_private_identifier_18022": "Um método não pode ser nomeado com um identificador privado.",
   "A_mixin_class_must_have_a_constructor_with_a_single_rest_parameter_of_type_any_2545": "Uma classe mixin deve ter um construtor um único parâmetro rest do tipo 'any[]'.",
+  "A_mixin_class_that_extends_from_a_type_variable_containing_an_abstract_construct_signature_must_also_2797": "Uma classe mixin que se estende de uma variável de tipo contendo uma assinatura de constructo abstrata também precisa ser declarada como 'abstract'.",
   "A_module_cannot_have_multiple_default_exports_2528": "Um módulo não pode ter várias exportações padrão.",
   "A_namespace_declaration_cannot_be_in_a_different_file_from_a_class_or_function_with_which_it_is_merg_2433": "Uma declaração de namespace não pode estar em um arquivo diferente de uma classe ou função com a qual ela é mesclada.",
   "A_namespace_declaration_cannot_be_located_prior_to_a_class_or_function_with_which_it_is_merged_2434": "Uma declaração de namespace não pode estar localizada antes de uma classe ou função com a qual ela é mesclada.",
@@ -71,10 +73,10 @@
   "A_required_element_cannot_follow_an_optional_element_1257": "Um elemento obrigatório não pode seguir um elemento opcional.",
   "A_required_parameter_cannot_follow_an_optional_parameter_1016": "Um parâmetro obrigatório não pode seguir um parâmetro opcional.",
   "A_rest_element_cannot_contain_a_binding_pattern_2501": "Um elemento rest não pode conter um padrão de associação.",
+  "A_rest_element_cannot_follow_another_rest_element_1265": "Um elemento REST não pode seguir outro elemento REST.",
   "A_rest_element_cannot_have_a_property_name_2566": "Um elemento rest não pode ter um nome de propriedade.",
   "A_rest_element_cannot_have_an_initializer_1186": "Um elemento rest não pode ter um inicializador.",
   "A_rest_element_must_be_last_in_a_destructuring_pattern_2462": "Um elemento rest deve ser o último em um padrão de desestruturação.",
-  "A_rest_element_must_be_last_in_a_tuple_type_1256": "Um elemento rest deve ser o último em um tipo de tupla.",
   "A_rest_element_type_must_be_an_array_type_2574": "Um elemento rest deve ser um tipo de matriz.",
   "A_rest_parameter_cannot_be_optional_1047": "Um parâmetro rest não pode ser opcional.",
   "A_rest_parameter_cannot_have_an_initializer_1048": "Um parâmetro rest não pode ter um inicializador.",
@@ -82,6 +84,7 @@
   "A_rest_parameter_must_be_of_an_array_type_2370": "Um parâmetro rest deve ser de um tipo de matriz.",
   "A_rest_parameter_or_binding_pattern_may_not_have_a_trailing_comma_1013": "Um padrão de associação ou o parâmetro rest não pode ter uma vírgula à direita.",
   "A_return_statement_can_only_be_used_within_a_function_body_1108": "Uma instrução 'return' só pode ser usada dentro de um corpo de função.",
+  "A_return_statement_cannot_be_used_inside_a_class_static_block_18041": "Não é possível usar uma instrução “return” dentro de um bloco estático de classe.",
   "A_series_of_entries_which_re_map_imports_to_lookup_locations_relative_to_the_baseUrl_6167": "Uma série de entradas que o remapeamento importa para pesquisar locais relativos a 'baseUrl'.",
   "A_set_accessor_cannot_have_a_return_type_annotation_1095": "Um acessador 'set' não pode ter uma anotação de tipo de retorno.",
   "A_set_accessor_cannot_have_an_optional_parameter_1051": "Um acessador 'set' não pode ter um parâmetro opcional.",
@@ -89,6 +92,7 @@
   "A_set_accessor_must_have_exactly_one_parameter_1049": "Um acessador 'set' deve ter exatamente um parâmetro.",
   "A_set_accessor_parameter_cannot_have_an_initializer_1052": "Um parâmetro de acessador 'set' não pode ter um inicializador.",
   "A_signature_with_an_implementation_cannot_use_a_string_literal_type_2381": "Uma assinatura com uma implementação não pode usar um tipo de cadeia de caracteres literal.",
+  "A_spread_argument_must_either_have_a_tuple_type_or_be_passed_to_a_rest_parameter_2556": "Um argumento de espalhamento deve ter um tipo de tupla ou ser passado para um parâmetro Rest.",
   "A_super_call_must_be_the_first_statement_in_the_constructor_when_a_class_contains_initialized_proper_2376": "Uma chamada 'super' deve ser a primeira instrução no construtor quando uma classe contiver propriedades inicializadas, propriedades de parâmetro ou identificadores privados.",
   "A_this_based_type_guard_is_not_compatible_with_a_parameter_based_type_guard_2518": "Uma proteção de tipo baseado em 'this não é compatível com uma proteção de tipo baseado em parâmetro.",
   "A_this_type_is_available_only_in_a_non_static_member_of_a_class_or_interface_2526": "Um tipo 'this' está disponível somente em um membro não estático de uma classe ou interface.",
@@ -114,8 +118,11 @@
   "Add_a_return_statement_95111": "Adicionar uma instrução return",
   "Add_all_missing_async_modifiers_95041": "Adicionar todos os modificadores 'async' ausentes",
   "Add_all_missing_call_parentheses_95068": "Adicionar todos os parênteses de chamada ausentes",
+  "Add_all_missing_function_declarations_95157": "Adicionar todas as declarações de função ausentes",
   "Add_all_missing_imports_95064": "Adicionar todas as importações ausentes",
   "Add_all_missing_members_95022": "Adicionar todos os membros ausentes",
+  "Add_all_missing_override_modifiers_95162": "Adicionar todos os modificadores 'override' ausentes",
+  "Add_all_missing_properties_95166": "Adicionar todas as propriedades ausentes",
   "Add_all_missing_return_statement_95114": "Adicionar todas as instruções return ausentes",
   "Add_all_missing_super_calls_95039": "Adicionar todas as chamadas super ausentes",
   "Add_async_modifier_to_containing_function_90029": "Adicione o modificador assíncrono que contém a função",
@@ -135,18 +142,22 @@
   "Add_initializers_to_all_uninitialized_properties_95027": "Adicionar inicializadores a todas as propriedades não inicializadas",
   "Add_missing_call_parentheses_95067": "Adicionar os parênteses de chamada ausentes",
   "Add_missing_enum_member_0_95063": "Adicionar membro de enumeração ausente '{0}'",
+  "Add_missing_function_declaration_0_95156": "Adicionar a declaração de função ausente '{0}'",
   "Add_missing_new_operator_to_all_calls_95072": "Adicionar operador 'new' ausente a todas as chamadas",
   "Add_missing_new_operator_to_call_95071": "Adicionar operador 'new' ausente à chamada",
+  "Add_missing_properties_95165": "Adicionar propriedades ausentes",
   "Add_missing_super_call_90001": "Adicionar chamada 'super()' ausente",
   "Add_missing_typeof_95052": "Adicionar 'typeof' ausente",
   "Add_names_to_all_parameters_without_names_95073": "Adicionar nomes a todos os parâmetros sem nomes",
   "Add_or_remove_braces_in_an_arrow_function_95058": "Adicionar ou remover chaves em uma função de seta",
+  "Add_override_modifier_95160": "Adicionar modificador \"override\"",
   "Add_parameter_name_90034": "Adicionar nome de parâmetro",
   "Add_qualifier_to_all_unresolved_variables_matching_a_member_name_95037": "Adicionar um qualificador a todas as variáveis não resolvidas correspondentes a um nome de membro",
   "Add_this_parameter_95104": "Adicionar o parâmetro 'this'.",
   "Add_this_tag_95103": "Adicionar a marca '@this'",
   "Add_to_all_uncalled_decorators_95044": "Adicionar '()' a todos os decoradores não chamados",
   "Add_ts_ignore_to_all_error_messages_95042": "Adicionar '@ts-ignore' a todas as mensagens de erro",
+  "Add_undefined_to_a_type_when_accessed_using_an_index_6674": "Adicione 'undefined' a um tipo quando acessado usando um índice.",
   "Add_undefined_type_to_all_uninitialized_properties_95029": "Adicionar tipo indefinido a todas as propriedades não inicializadas",
   "Add_undefined_type_to_property_0_95018": "Adicionar tipo 'indefinido' à propriedade '{0}'",
   "Add_unknown_conversion_for_non_overlapping_types_95069": "Adicionar conversão 'unknown' para tipos sem sobreposição",
@@ -154,8 +165,6 @@
   "Add_void_to_Promise_resolved_without_a_value_95143": "Adicionar 'void' ao Promise resolvido sem um valor",
   "Add_void_to_all_Promises_resolved_without_a_value_95144": "Adicionar 'void' a todos os Promises resolvidos sem um valor",
   "Adding_a_tsconfig_json_file_will_help_organize_projects_that_contain_both_TypeScript_and_JavaScript__5068": "Adicionar um arquivo tsconfig.json ajudará a organizar projetos que contêm arquivos TypeScript e JavaScript. Saiba mais em https://aka.ms/tsconfig.",
-  "Additional_Checks_6176": "Verificações Adicionais",
-  "Advanced_Options_6178": "Opções Avançadas",
   "All_declarations_of_0_must_have_identical_modifiers_2687": "Todas as declarações de '{0}' devem ter modificadores idênticos.",
   "All_declarations_of_0_must_have_identical_type_parameters_2428": "Todas as declarações de '{0}' devem ter parâmetros de tipo idênticos.",
   "All_declarations_of_an_abstract_method_must_be_consecutive_2516": "Todas as declarações de um método abstrato devem ser consecutivas.",
@@ -163,34 +172,38 @@
   "All_imports_in_import_declaration_are_unused_6192": "Nenhuma das importações na declaração de importação está sendo utilizada.",
   "All_type_parameters_are_unused_6205": "Todos os parâmetros de tipo são inutilizados.",
   "All_variables_are_unused_6199": "Nenhuma das variáveis está sendo utilizada.",
-  "Allow_accessing_UMD_globals_from_modules_95076": "Permitir o acesso a UMD globais de módulos.",
+  "Allow_JavaScript_files_to_be_a_part_of_your_program_Use_the_checkJS_option_to_get_errors_from_these__6600": "Permitir que arquivos JavaScript façam parte do seu programa. Use a opção 'checkJS' para obter erros desses arquivos.",
+  "Allow_accessing_UMD_globals_from_modules_6602": "Permitir o acesso a UMD globais de módulos.",
   "Allow_default_imports_from_modules_with_no_default_export_This_does_not_affect_code_emit_just_typech_6011": "Permita importações padrão de módulos sem exportação padrão. Isso não afeta a emissão do código, apenas a verificação de digitação.",
+  "Allow_import_x_from_y_when_a_module_doesn_t_have_a_default_export_6601": "Permitir 'importar x de y' quando um módulo não tiver uma exportação padrão.",
+  "Allow_importing_helper_functions_from_tslib_once_per_project_instead_of_including_them_per_file_6639": "Permitir a importação de funções auxiliares do tslib uma vez por projeto, em vez de incluí-las por arquivo.",
   "Allow_javascript_files_to_be_compiled_6102": "Permita que arquivos javascript sejam compilados.",
+  "Allow_multiple_folders_to_be_treated_as_one_when_resolving_modules_6691": "Permitir que várias pastas sejam tratadas como uma ao resolver módulos.",
   "Already_included_file_name_0_differs_from_file_name_1_only_in_casing_1261": "O nome do arquivo '{0}' já incluído difere do nome de arquivo '{1}' somente em maiúsculas e minúsculas.",
   "Ambient_module_declaration_cannot_specify_relative_module_name_2436": "A declaração de módulo de ambiente não pode especificar o nome do módulo relativo.",
   "Ambient_modules_cannot_be_nested_in_other_modules_or_namespaces_2435": "Módulos de ambiente não podem ser aninhados em outros módulos ou namespaces.",
   "An_AMD_module_cannot_have_multiple_name_assignments_2458": "Um módulo AMD não pode ter várias atribuições de nome.",
   "An_abstract_accessor_cannot_have_an_implementation_1318": "Um acessador abstrato não pode ter uma implementação.",
   "An_accessibility_modifier_cannot_be_used_with_a_private_identifier_18010": "Não é possível usar um modificador de acessibilidade com um identificador privado.",
-  "An_accessor_cannot_be_named_with_a_private_identifier_18023": "Um acessador não pode ser nomeado com um identificador privado.",
   "An_accessor_cannot_have_type_parameters_1094": "Um acessador não pode ter parâmetros de tipo.",
   "An_ambient_module_declaration_is_only_allowed_at_the_top_level_in_a_file_1234": "Uma declaração de módulo de ambiente só é permitida no nível superior em um arquivo.",
   "An_argument_for_0_was_not_provided_6210": "Não foi fornecido um argumento para '{0}'.",
   "An_argument_matching_this_binding_pattern_was_not_provided_6211": "Não foi fornecido um argumento correspondente a esse padrão de associação.",
   "An_arithmetic_operand_must_be_of_type_any_number_bigint_or_an_enum_type_2356": "Um operando aritmético deve ser do tipo 'any', 'number', 'bignit' ou um tipo enumerado.",
   "An_arrow_function_cannot_have_a_this_parameter_2730": "Uma função de seta não pode ter um parâmetro 'this'.",
-  "An_async_function_or_method_in_ES5_SlashES3_requires_the_Promise_constructor_Make_sure_you_have_a_de_2705": "Uma função ou método assíncrono em ES5/ES3 requer o construtor 'Promise'. Verifique se você tem a declaração para o construtor 'Promise' ou inclua 'ES2015' em sua opção `--lib`.",
+  "An_async_function_or_method_in_ES5_SlashES3_requires_the_Promise_constructor_Make_sure_you_have_a_de_2705": "Uma função ou método assíncrono em ES5/ES3 requer o construtor 'Promise'.  Verifique se você tem uma declaração para o construtor 'Promise' ou inclua 'ES2015' na sua opção '--lib'.",
   "An_async_function_or_method_must_have_a_valid_awaitable_return_type_1057": "Um método ou função assíncrona deve ter um tipo de retorno válido que é possível aguardar.",
-  "An_async_function_or_method_must_return_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_in_2697": "Um método ou função assíncrona deve retornar uma 'Promessa'. Certifique-se de ter uma declaração para 'Promessa' ou inclua 'ES2015' na sua opção `--lib`.",
+  "An_async_function_or_method_must_return_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_in_2697": "Uma função ou método assíncrono deve retornar um 'Promise'. Verifique se você tem uma declaração para 'Promise' ou inclua 'ES2015' na sua opção '--lib'.",
   "An_async_iterator_must_have_a_next_method_2519": "O iterador assíncrono deve ter um método 'next()'.",
   "An_element_access_expression_should_take_an_argument_1011": "Uma expressão de acesso do elemento deveria receber um argumento.",
   "An_enum_member_cannot_be_named_with_a_private_identifier_18024": "Um membro de enumeração não pode ser nomeado com um identificador privado.",
   "An_enum_member_cannot_have_a_numeric_name_2452": "Um membro de enumeração não pode ter um nome numérico.",
   "An_enum_member_name_must_be_followed_by_a_or_1357": "Um nome de membro de enumeração deve ser seguido por ',', '=' ou '}'.",
-  "An_export_assignment_can_only_be_used_in_a_module_1231": "Uma atribuição de exportação só pode ser usada em um módulo.",
+  "An_expanded_version_of_this_information_showing_all_possible_compiler_options_6928": "Uma versão expandida dessas informações, mostrando todas as opções do compilador possíveis",
   "An_export_assignment_cannot_be_used_in_a_module_with_other_exported_elements_2309": "Uma atribuição de exportação não pode ser usada em um módulo com outros elementos exportados.",
   "An_export_assignment_cannot_be_used_in_a_namespace_1063": "Uma atribuição de exportação não pode ser usada em um namespace.",
   "An_export_assignment_cannot_have_modifiers_1120": "Uma atribuição de exportação não pode ter modificadores.",
+  "An_export_assignment_must_be_at_the_top_level_of_a_file_or_module_declaration_1231": "Uma atribuição de exportação deve estar no nível superior de uma declaração de arquivo ou módulo.",
   "An_export_declaration_can_only_be_used_in_a_module_1233": "Uma declaração de exportação só pode ser usada em um módulo.",
   "An_export_declaration_cannot_have_modifiers_1193": "Uma declaração de exportação não pode ter modificadores.",
   "An_expression_of_type_void_cannot_be_tested_for_truthiness_1345": "Uma expressão do tipo 'nula' não pode ser testada quanto à veracidade.",
@@ -212,9 +225,8 @@
   "An_index_signature_parameter_cannot_have_an_accessibility_modifier_1018": "Um parâmetro de assinatura de índice não pode ter um modificador de acessibilidade.",
   "An_index_signature_parameter_cannot_have_an_initializer_1020": "Um parâmetro de assinatura de índice não pode ter um inicializador.",
   "An_index_signature_parameter_must_have_a_type_annotation_1022": "Um parâmetro de assinatura de índice deve ter uma anotação de tipo.",
-  "An_index_signature_parameter_type_cannot_be_a_type_alias_Consider_writing_0_Colon_1_Colon_2_instead_1336": "Um tipo de parâmetro de assinatura de índice não pode ser um alias de tipo. Considere gravar ' [{0}: {1}]: {2}' em vez disso.",
-  "An_index_signature_parameter_type_cannot_be_a_union_type_Consider_using_a_mapped_object_type_instead_1337": "Um tipo de parâmetro de assinatura de índice não pode ser um tipo de união. Considere usar um tipo de objeto mapeado em vez disso.",
-  "An_index_signature_parameter_type_must_be_either_string_or_number_1023": "Um tipo de parâmetro de assinatura de índice deve ser 'string' ou 'number'.",
+  "An_index_signature_parameter_type_cannot_be_a_literal_type_or_generic_type_Consider_using_a_mapped_o_1337": "Um tipo de parâmetro de assinatura de índice não pode ser um tipo literal ou genérico. Considere usar um tipo de objeto mapeado.",
+  "An_index_signature_parameter_type_must_be_string_number_symbol_or_a_template_literal_type_1268": "Um tipo de parâmetro de assinatura de índice deve ser 'cadeia de caracteres', 'número', 'símbolo' ou um tipo literal de modelo.",
   "An_interface_can_only_extend_an_identifier_Slashqualified_name_with_optional_type_arguments_2499": "Uma interface só pode estender um identificador/nome qualificado com argumentos de tipo opcionais.",
   "An_interface_can_only_extend_an_object_type_or_intersection_of_object_types_with_statically_known_me_2312": "Uma interface só pode estender um tipo de objeto ou interseção de tipos de objeto com membros estaticamente conhecidos.",
   "An_interface_property_cannot_have_an_initializer_1246": "Uma propriedade de interface não pode ter um inicializador.",
@@ -225,6 +237,7 @@
   "An_object_literal_cannot_have_property_and_accessor_with_the_same_name_1119": "Um literal de objeto não pode ter propriedade e acessador com o mesmo nome.",
   "An_object_member_cannot_be_declared_optional_1162": "Um membro de objeto não pode ser declarado como opcional.",
   "An_optional_chain_cannot_contain_private_identifiers_18030": "Uma cadeia opcional não pode conter identificadores privados.",
+  "An_optional_element_cannot_follow_a_rest_element_1266": "Um elemento opcional não pode seguir um elemento REST.",
   "An_outer_value_of_this_is_shadowed_by_this_container_2738": "Um valor externo de 'this' é sombreado por este contêiner.",
   "An_overload_signature_cannot_be_declared_as_a_generator_1222": "A assinatura de sobrecarga não pode ser declarada como geradora.",
   "An_unary_expression_with_the_0_operator_is_not_allowed_in_the_left_hand_side_of_an_exponentiation_ex_17006": "Uma expressão unária com o operador '{0}' não é permitida no lado esquerdo de uma expressão de exponenciação. Considere delimitar a expressão em parênteses.",
@@ -244,33 +257,47 @@
   "Augmentations_for_the_global_scope_can_only_be_directly_nested_in_external_modules_or_ambient_module_2669": "Acréscimos de escopo global somente podem ser diretamente aninhados em módulos externos ou declarações de módulo de ambiente.",
   "Augmentations_for_the_global_scope_should_have_declare_modifier_unless_they_appear_in_already_ambien_2670": "Acréscimos de escopo global devem ter o modificador 'declare' a menos que apareçam em contexto já ambiente.",
   "Auto_discovery_for_typings_is_enabled_in_project_0_Running_extra_resolution_pass_for_module_1_using__6140": "A descoberta automática para digitações está habilitada no projeto '{0}'. Executando o passe de resolução extra para o módulo '{1}' usando o local do cache '{2}'.",
+  "Await_expression_cannot_be_used_inside_a_class_static_block_18037": "A expressão Await não pode ser usada dentro de um bloco estático de classe.",
+  "BUILD_OPTIONS_6919": "OPÇÕES DE BUILD",
+  "Backwards_Compatibility_6253": "Compatibilidade com Versões Anteriores",
   "Base_class_expressions_cannot_reference_class_type_parameters_2562": "As expressões de classe base não podem referenciar parâmetros de tipo de classe.",
   "Base_constructor_return_type_0_is_not_an_object_type_or_intersection_of_object_types_with_statically_2509": "O tipo de retorno do construtor base '{0}' não é um tipo de objeto ou interseção de tipos de objeto com membros estaticamente conhecidos.",
   "Base_constructors_must_all_have_the_same_return_type_2510": "Todos os construtores base devem ter o mesmo tipo de retorno.",
   "Base_directory_to_resolve_non_absolute_module_names_6083": "Diretório base para resolver nomes de módulo não absolutos.",
-  "Basic_Options_6172": "Opções Básicas",
   "BigInt_literals_are_not_available_when_targeting_lower_than_ES2020_2737": "Os literais de BigInt não estão disponíveis ao direcionar para menos de ES2020.",
   "Binary_digit_expected_1177": "Dígito binário esperado.",
   "Binding_element_0_implicitly_has_an_1_type_7031": "O elemento de associação '{0}' tem implicitamente um tipo '{1}'.",
   "Block_scoped_variable_0_used_before_its_declaration_2448": "Variável de escopo de bloco '{0}' usada antes da sua declaração.",
-  "Build_all_projects_including_those_that_appear_to_be_up_to_date_6368": "Compilar todos os projetos, incluindo aqueles que parecem estar atualizados",
+  "Build_a_composite_project_in_the_working_directory_6925": "Crie um projeto composto no diretório de trabalho.",
+  "Build_all_projects_including_those_that_appear_to_be_up_to_date_6636": "Compilar todos os projetos, incluindo aqueles que parecem estar atualizados",
   "Build_one_or_more_projects_and_their_dependencies_if_out_of_date_6364": "Compilar um ou mais projetos e suas dependências, se estiverem desatualizados",
   "Build_option_0_requires_a_value_of_type_1_5073": "A opção de build '{0}' requer um valor do tipo {1}.",
   "Building_project_0_6358": "Compilando o projeto '{0}'...",
+  "COMMAND_LINE_FLAGS_6921": "SINALIZADORES DE LINHA DE COMANDO",
+  "COMMON_COMMANDS_6916": "COMANDOS COMUNS",
+  "COMMON_COMPILER_OPTIONS_6920": "OPÇÕES COMUNS DO COMPILADOR",
   "Call_decorator_expression_90028": "Chamar expressão do decorador",
   "Call_signature_return_types_0_and_1_are_incompatible_2202": "Os tipos de retorno da assinatura de chamada '{0}' e '{1}' são incompatíveis.",
   "Call_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type_7020": "Assinatura de chamada, que não tem a anotação de tipo de retorno, implicitamente tem um tipo de retorno 'any'.",
   "Call_signatures_with_no_arguments_have_incompatible_return_types_0_and_1_2204": "Assinaturas de chamada sem argumentos têm tipos de retorno incompatíveis '{0}' e '{1}'.",
   "Call_target_does_not_contain_any_signatures_2346": "O destino da chamada não contém nenhuma assinatura.",
   "Can_only_convert_logical_AND_access_chains_95142": "Só é possível converter cadeias de acesso E lógicas",
+  "Can_only_convert_named_export_95164": "Só pode converter exportação nomeada",
   "Can_only_convert_property_with_modifier_95137": "Só é possível converter a propriedade com o modificador",
+  "Can_only_convert_string_concatenation_95154": "Só é possível converter a concatenação de cadeia de caracteres",
   "Cannot_access_0_1_because_0_is_a_type_but_not_a_namespace_Did_you_mean_to_retrieve_the_type_of_the_p_2713": "Não foi possível acessar '{0}.{1}' porque '{0}' é um tipo, mas não um namespace. Você quis dizer recuperar o tipo da propriedade '{1}' em '{0}' com '{0}[\"{1}\"]'?",
   "Cannot_access_ambient_const_enums_when_the_isolatedModules_flag_is_provided_2748": "Não é possível acessar enumerações de constante de ambiente quando o sinalizador '--isolatedModules' é fornecido.",
   "Cannot_assign_a_0_constructor_type_to_a_1_constructor_type_2672": "Não é possível atribuir um tipo de construtor '{0}' para um tipo de construtor '{1}'.",
   "Cannot_assign_an_abstract_constructor_type_to_a_non_abstract_constructor_type_2517": "Não é possível atribuir um tipo de construtor abstrato a um tipo de construtor não abstrato.",
+  "Cannot_assign_to_0_because_it_is_a_class_2629": "Não é possível fazer a atribuição a '{0}' porque ela é uma classe.",
   "Cannot_assign_to_0_because_it_is_a_constant_2588": "Não é possível atribuir a '{0}' porque é uma constante.",
+  "Cannot_assign_to_0_because_it_is_a_function_2630": "Não é possível fazer a atribuição a '{0}' porque ela é uma função.",
+  "Cannot_assign_to_0_because_it_is_a_namespace_2631": "Não é possível fazer a atribuição a '{0}' porque ele é um namespace.",
   "Cannot_assign_to_0_because_it_is_a_read_only_property_2540": "Não é possível atribuir a '{0}' porque é uma propriedade de somente leitura.",
+  "Cannot_assign_to_0_because_it_is_an_enum_2628": "Não é possível fazer a atribuição a '{0}' porque ela é uma enumeração.",
+  "Cannot_assign_to_0_because_it_is_an_import_2632": "Não é possível fazer a atribuição a '{0}' porque ela é uma importação.",
   "Cannot_assign_to_0_because_it_is_not_a_variable_2539": "Não é possível atribuir a '{0}' porque não é uma variável.",
+  "Cannot_assign_to_private_method_0_Private_methods_are_not_writable_2803": "Não é possível fazer a atribuição ao método privado '{0}'. Os métodos privados não são graváveis.",
   "Cannot_augment_module_0_because_it_resolves_to_a_non_module_entity_2671": "Não é possível aumentar o módulo '{0}' porque ele resolve para uma entidade não módulo.",
   "Cannot_augment_module_0_with_value_exports_because_it_resolves_to_a_non_module_entity_2649": "Não é possível aumentar o módulo '{0}' com as exportações do valor, porque ele resolve para uma entidade sem módulo.",
   "Cannot_compile_modules_using_option_0_unless_the_module_flag_is_amd_or_system_6131": "Não é possível compilar módulos usando a opção '{0}', a menos que o sinalizador '--module' seja 'amd' ou 'system'.",
@@ -292,14 +319,14 @@
   "Cannot_find_name_0_Did_you_mean_1_2552": "Não é possível localizar o nome '{0}'. Você quis dizer '{1}'?",
   "Cannot_find_name_0_Did_you_mean_the_instance_member_this_0_2663": "Não foi possível localizar o nome '{0}'. Você quis dizer o membro de instância 'this.{0}'?",
   "Cannot_find_name_0_Did_you_mean_the_static_member_1_0_2662": "Não foi possível encontrar o nome '{0}'. Você quis dizer o membro estático '{1}.{0}'?",
-  "Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_2583": "Não é possível localizar o nome '{0}'. Você precisa alterar sua biblioteca de destino? Tente alterar a opção `lib` do compilador para '{1}' ou posterior.",
-  "Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_2584": "Não é possível localizar o nome '{0}'. Você precisa alterar sua biblioteca de destino? Tente alterar a opção de compilador 'lib' para incluir 'dom'.",
+  "Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_2583": "Não é possível encontrar o nome '{0}'. Você precisa alterar sua biblioteca de destino? Tente alterar a opção 'lib' do compilador para '{1}' ou posterior.",
+  "Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_2584": "Não é possível encontrar o nome '{0}'. Você precisa alterar sua biblioteca de destino? Tente alterar a opção 'lib' do compilador para incluir 'dom'.",
   "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_a_test_runner_Try_npm_i_save_dev_type_2582": "Não é possível localizar o nome '{0}'. Você precisa instalar definições de tipo para um executor de teste? Tente `npm i --save-dev @types/jest` ou `npm i --save-dev @types/mocha`.",
-  "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_a_test_runner_Try_npm_i_save_dev_type_2593": "Não é possível localizar o nome '{0}'. Você precisa instalar definições de tipo para um executor de teste? Tente `npm i --save-dev @types/jest` ou `npm i --save-dev @types/mocha` e, em seguida, adicione `jest` ou `mocha` aos campos de tipo no tsconfig.",
+  "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_a_test_runner_Try_npm_i_save_dev_type_2593": "Não é possível encontrar o nome '{0}'. Você precisa instalar as definições de tipo para um executor de teste? Tente `npm i --save-dev @types/jest` ou `npm i --save-dev @types/mocha` e depois adicione 'jest' ou 'mocha' ao campo tipos em seu tsconfig.",
   "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_jQuery_Try_npm_i_save_dev_types_Slash_2581": "Não é possível localizar o nome '{0}'. Você precisa instalar definições de tipo para o jQuery? Tente `npm i --save-dev @types/jquery`.",
-  "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_jQuery_Try_npm_i_save_dev_types_Slash_2592": "Não é possível localizar o nome '{0}'. Você precisa instalar definições de tipo para o jQuery? Tente `npm i --save-dev @types/jquery` e, em seguida, adicione `jquery` ao campo de tipos no tsconfig.",
+  "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_jQuery_Try_npm_i_save_dev_types_Slash_2592": "Não é possível localizar o nome '{0}'. Você precisa instalar as definições de tipo para jQuery? Tente `npm i --save-dev @types/jquery` e, em seguida, adicione 'jquery' para o campo tipos em seu tsconfig.",
   "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_node_Try_npm_i_save_dev_types_Slashno_2580": "Não é possível localizar o nome '{0}'. Você precisa instalar definições de tipo para o nó? Tente `npm i --save-dev @types/node`.",
-  "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_node_Try_npm_i_save_dev_types_Slashno_2591": "Não é possível localizar o nome '{0}'. Você precisa instalar definições de tipo para o nó? Tente `npm i --save-dev @types/node` e, em seguida, adicione `node` ao campo de tipos no tsconfig.",
+  "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_node_Try_npm_i_save_dev_types_Slashno_2591": "Não é possível encontrar o nome '{0}'. Você precisa instalar as definições de tipo para o nó? Tente `npm i --save-dev @types/node` e, em seguida, adicione 'node' ao campo tipos em seu tsconfig.",
   "Cannot_find_namespace_0_2503": "Não é possível encontrar o namespace '{0}'.",
   "Cannot_find_parameter_0_1225": "Não é possível encontrar o parâmetro '{0}'.",
   "Cannot_find_the_common_subdirectory_path_for_the_input_files_5009": "Não é possível encontrar o caminho do subdiretório comum para os arquivos de entrada.",
@@ -318,11 +345,13 @@
   "Cannot_redeclare_block_scoped_variable_0_2451": "Não é possível declarar novamente a variável de escopo de bloco '{0}'.",
   "Cannot_redeclare_exported_variable_0_2323": "Não é possível redeclarar a variável exportada '{0}'.",
   "Cannot_redeclare_identifier_0_in_catch_clause_2492": "Não é possível declarar novamente o identificador '{0}' na cláusula catch.",
+  "Cannot_start_a_function_call_in_a_type_annotation_1441": "Não é possível iniciar uma chamada de função em uma anotação de tipo.",
   "Cannot_update_output_of_project_0_because_there_was_error_reading_file_1_6376": "Não é possível atualizar a saída do projeto '{0}' porque houve um erro ao ler o arquivo '{1}'",
   "Cannot_use_JSX_unless_the_jsx_flag_is_provided_17004": "Não é possível usar JSX, a menos que o sinalizador '--jsx' seja fornecido.",
   "Cannot_use_imports_exports_or_module_augmentations_when_module_is_none_1148": "Não será possível usar importações, exportações ou acréscimos de módulo quando '--module' for 'none'.",
   "Cannot_use_namespace_0_as_a_type_2709": "Não é possível usar o namespace '{0}' como um tipo.",
   "Cannot_use_namespace_0_as_a_value_2708": "Não é possível usar o namespace '{0}' como um valor.",
+  "Cannot_use_this_in_a_static_property_initializer_of_a_decorated_class_2816": "Não é possível usar \"this\" em um inicializador de propriedade estática de uma classe decorada.",
   "Cannot_write_file_0_because_it_will_overwrite_tsbuildinfo_file_generated_by_referenced_project_1_6377": "Não é possível gravar o arquivo '{0}' porque ele substituirá o arquivo '.tsbuildinfo' gerado pelo projeto referenciado '{1}'",
   "Cannot_write_file_0_because_it_would_be_overwritten_by_multiple_input_files_5056": "Não é possível gravar o arquivo '{0}' porque ele seria substituído por diversos arquivos de entrada.",
   "Cannot_write_file_0_because_it_would_overwrite_input_file_5055": "Não é possível gravar o arquivo '{0}' porque ele substituiria o arquivo de entrada.",
@@ -334,6 +363,8 @@
   "Change_all_jsdoc_style_types_to_TypeScript_and_add_undefined_to_nullable_types_95031": "Alterar todos os tipos de estilo jsdoc para TypeScript (e adicionar '| undefined' a tipos que permitem valor nulo)",
   "Change_extends_to_implements_90003": "Alterar 'extends' para 'implements'",
   "Change_spelling_to_0_90022": "Alterar ortografia para '{0}'",
+  "Check_for_class_properties_that_are_declared_but_not_set_in_the_constructor_6700": "Verifique as propriedades de classe declaradas, mas não definidas no construtor.",
+  "Check_that_the_arguments_for_bind_call_and_apply_methods_match_the_original_function_6697": "Verificar se os argumentos para os métodos 'bind', 'call' e 'apply' correspondem à função original.",
   "Checking_if_0_is_the_longest_matching_prefix_for_1_2_6104": "Verificando se '{0}' é o maior prefixo correspondente para '{1}' - '{2}'.",
   "Circular_definition_of_import_alias_0_2303": "Definição circular do alias de importação '{0}'.",
   "Circularity_detected_while_resolving_configuration_Colon_0_18000": "Circularidade detectada ao resolver a configuração: {0}",
@@ -345,7 +376,9 @@
   "Class_0_incorrectly_implements_class_1_Did_you_mean_to_extend_1_and_inherit_its_members_as_a_subclas_2720": "A classe '{0}' implementa incorretamente a classe '{1}'. Você pretendia estender '{1}' e herdar seus membros como uma subclasse?",
   "Class_0_incorrectly_implements_interface_1_2420": "A classe '{0}' implementa incorretamente a interface '{1}'.",
   "Class_0_used_before_its_declaration_2449": "Classe '{0}' usada antes de sua declaração.",
-  "Class_declarations_cannot_have_more_than_one_augments_or_extends_tag_8025": "Declarações de classe não podem ter mais de uma marca `@augments` ou `@extends`.",
+  "Class_declaration_cannot_implement_overload_list_for_0_2813": "A declaração da classe não pode implementar a lista de sobrecarga para '{0}'.",
+  "Class_declarations_cannot_have_more_than_one_augments_or_extends_tag_8025": "As declarações de classe não podem ter mais de uma marca '@augments' ou '@extends'.",
+  "Class_decorators_can_t_be_used_with_static_private_identifier_Consider_removing_the_experimental_dec_18036": "Os decoradores de classe não podem ser usados com um identificador privado estático. Considere remover o decorador experimental.",
   "Class_name_cannot_be_0_2414": "O nome de classe não pode ser '{0}'.",
   "Class_name_cannot_be_Object_when_targeting_ES5_with_module_0_2725": "O nome da classe não pode ser 'Object' ao direcionar ES5 com módulo {0}.",
   "Class_static_side_0_incorrectly_extends_base_class_static_side_1_2417": "O lado estático da classe '{0}' incorretamente estende o lado estático da classe base '{1}'.",
@@ -354,16 +387,25 @@
   "Classes_may_not_have_a_field_named_constructor_18006": "Classes não podem ter um campo denominado 'constructor'.",
   "Command_line_Options_6171": "Opções da Linha de Comando",
   "Compile_the_project_given_the_path_to_its_configuration_file_or_to_a_folder_with_a_tsconfig_json_6020": "Compile o projeto dando o caminho para seu arquivo de configuração ou para uma pasta com um 'tsconfig.json'.",
+  "Compiler_Diagnostics_6251": "Diagnóstico do Compilador",
   "Compiler_option_0_expects_an_argument_6044": "A opção do compilador '{0}' espera um argumento.",
+  "Compiler_option_0_may_not_be_used_with_build_5094": "A opção de compilador '--{0}' não pode ser usada com '--build'.",
+  "Compiler_option_0_may_only_be_used_with_build_5093": "A opção de compilador '--{0}' pode ser usada somente com '--build'.",
   "Compiler_option_0_requires_a_value_of_type_1_5024": "A opção do compilador '{0}' requer um valor do tipo {1}.",
   "Compiler_reserves_name_0_when_emitting_private_identifier_downlevel_18027": "O compilador reserva o nome '{0}' ao emitir um identificador privado para versões anteriores.",
+  "Compiles_the_TypeScript_project_located_at_the_specified_path_6927": "Compila o projeto TypeScript localizado no caminho especificado",
+  "Compiles_the_current_project_tsconfig_json_in_the_working_directory_6923": "Compila o projeto atual (tsconfig.json no diretório de trabalho).",
+  "Compiles_the_current_project_with_additional_settings_6929": "Compila o projeto atual, com configurações adicionais",
+  "Completeness_6257": "Integridade",
   "Composite_projects_may_not_disable_declaration_emit_6304": "Projetos compostos não podem desabilitar a emissão de declaração.",
   "Composite_projects_may_not_disable_incremental_compilation_6379": "Projetos compostos podem não desabilitar a compilação incremental.",
+  "Computed_from_the_list_of_input_files_6911": "Calculado a partir da lista de arquivos de entrada",
   "Computed_property_names_are_not_allowed_in_enums_1164": "Nomes de propriedade calculados não são permitidos em enums.",
   "Computed_values_are_not_permitted_in_an_enum_with_string_valued_members_2553": "Os valores computados não são permitidos em uma enumeração com membros de valor de cadeia de caracteres.",
   "Concatenate_and_emit_output_to_single_file_6001": "Concatenar e emitir saída para um arquivo único.",
   "Conflicting_definitions_for_0_found_at_1_and_2_Consider_installing_a_specific_version_of_this_librar_4090": "Foram encontradas definições em conflito para '{0}' em '{1}' e em '{2}'. Considere instalar uma versão específica desta biblioteca para solucionar o conflito.",
   "Conflicts_are_in_this_file_6201": "Há conflitos neste arquivo.",
+  "Consider_adding_a_declare_modifier_to_this_class_6506": "Considere adicionar um modificador 'declare' para esta classe.",
   "Construct_signature_return_types_0_and_1_are_incompatible_2203": "Os tipos de retorno de assinatura de constructo '{0}' e '{1}' são incompatíveis.",
   "Construct_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type_7013": "Assinatura de constructo, que não tem a anotação de tipo de retorno, implicitamente tem um tipo de retorno 'any'.",
   "Construct_signatures_with_no_arguments_have_incompatible_return_types_0_and_1_2205": "Assinaturas de constructo sem argumentos têm tipos de retorno incompatíveis '{0}' e '{1}'.",
@@ -413,16 +455,24 @@
   "Convert_to_type_only_export_1364": "Converter para exportação somente de tipo",
   "Convert_to_type_only_import_1373": "Converter para importação somente de tipo",
   "Corrupted_locale_file_0_6051": "Arquivo de localidade {0} corrompido.",
+  "Could_not_convert_to_anonymous_function_95153": "Não foi possível fazer a conversão para a função anônima",
+  "Could_not_convert_to_arrow_function_95151": "Não foi possível fazer a conversão para a função de seta",
+  "Could_not_convert_to_named_function_95152": "Não foi possível fazer a conversão para a função nomeada",
+  "Could_not_determine_function_return_type_95150": "Não foi possível determinar o tipo de retorno da função",
   "Could_not_find_a_containing_arrow_function_95127": "Não foi possível localizar uma função de seta contentora",
   "Could_not_find_a_declaration_file_for_module_0_1_implicitly_has_an_any_type_7016": "Não foi possível localizar o arquivo de declaração para o módulo '{0}'. '{1}' tem implicitamente um tipo 'any'.",
   "Could_not_find_convertible_access_expression_95140": "Não foi possível localizar a expressão de acesso conversível",
   "Could_not_find_export_statement_95129": "Não foi possível localizar a instrução de exportação",
   "Could_not_find_import_clause_95131": "Não foi possível localizar a cláusula de importação",
   "Could_not_find_matching_access_expressions_95141": "Não foi possível localizar expressões de acesso correspondentes",
+  "Could_not_find_name_0_Did_you_mean_1_2570": "Não foi possível encontrar o nome '{0}'. Você quis dizer '{1}'?",
   "Could_not_find_namespace_import_or_named_imports_95132": "Não foi possível localizar a importação de namespace nem as importações nomeadas",
   "Could_not_find_property_for_which_to_generate_accessor_95135": "Não foi possível localizar a propriedade para a qual o acessador deve ser gerado",
   "Could_not_resolve_the_path_0_with_the_extensions_Colon_1_6231": "Não foi possível resolver o caminho '{0}' com as extensões: {1}.",
   "Could_not_write_file_0_Colon_1_5033": "Não foi possível gravar o arquivo '{0}': {1}.",
+  "Create_source_map_files_for_emitted_JavaScript_files_6694": "Criar arquivos source map para arquivos JavaScript emitidos.",
+  "Create_sourcemaps_for_d_ts_files_6614": "Criar sourcemaps para arquivos .d.ts.",
+  "Creates_a_tsconfig_json_with_the_recommended_settings_in_the_working_directory_6926": "Cria um tsconfig.json com as configurações recomendadas no diretório de trabalho.",
   "DIRECTORY_6038": "DIRETÓRIO",
   "Declaration_augments_declaration_in_another_file_This_cannot_be_serialized_6232": "A declaração aumenta a declaração em outro arquivo. Isso não pode ser serializado.",
   "Declaration_emit_for_this_file_requires_using_private_name_0_An_explicit_type_annotation_may_unblock_9005": "A emissão de declaração para esse arquivo requer o uso do nome privado '{0}'. Uma anotação de tipo explícita pode desbloquear a emissão de declaração.",
@@ -430,6 +480,7 @@
   "Declaration_expected_1146": "Declaração esperada.",
   "Declaration_name_conflicts_with_built_in_global_identifier_0_2397": "O nome de declaração entra em conflito com o identificador global integrado '{0}'.",
   "Declaration_or_statement_expected_1128": "Declaração ou instrução esperada.",
+  "Declaration_or_statement_expected_This_follows_a_block_of_statements_so_if_you_intended_to_write_a_d_2809": "É esperada uma declaração ou uma instrução. Este '=' segue um bloco de instruções, portanto, se você pretende gravar uma atribuição de desestruturação, talvez seja necessário encapsular toda a atribuição entre parênteses.",
   "Declarations_with_definite_assignment_assertions_must_also_have_type_annotations_1264": "As declarações com asserções de atribuição definitiva também precisam ter anotações de tipo.",
   "Declarations_with_initializers_cannot_also_have_definite_assignment_assertions_1263": "As declarações com inicializadores também não podem ter asserções de atribuição definitiva.",
   "Declare_a_private_field_named_0_90053": "Declare um campo privado chamado '{0}'.",
@@ -441,7 +492,11 @@
   "Declare_static_property_0_90027": "Declarar propriedade estática '{0}'",
   "Decorators_are_not_valid_here_1206": "Os decoradores não são válidos aqui.",
   "Decorators_cannot_be_applied_to_multiple_get_Slashset_accessors_of_the_same_name_1207": "Os decoradores não podem ser aplicados a vários acessadores get/set de mesmo nome.",
+  "Decorators_may_not_be_applied_to_this_parameters_1433": "Decoradores não podem ser aplicados a parâmetros 'this'.",
+  "Decorators_must_precede_the_name_and_all_keywords_of_property_declarations_1436": "Os decoradores devem preceder o nome e todas as palavras-chave das declarações de propriedade.",
   "Default_export_of_the_module_has_or_is_using_private_name_0_4082": "A exportação padrão do módulo tem ou está usando o nome particular '{0}'.",
+  "Default_library_1424": "Biblioteca padrão",
+  "Default_library_for_target_0_1425": "Biblioteca padrão para o destino '{0}'",
   "Definitions_of_the_following_identifiers_conflict_with_those_in_another_file_Colon_0_6200": "As definições dos seguintes identificadores estão em conflito com as de outro arquivo: {0}",
   "Delete_all_unused_declarations_95024": "Excluir todas as declarações não usadas",
   "Delete_all_unused_imports_95147": "Excluir todas as importações não usadas",
@@ -449,6 +504,7 @@
   "Deprecated_Use_jsxFactory_instead_Specify_the_object_invoked_for_createElement_when_targeting_react__6084": "[Preterido] Use '--jsxFactory' no lugar. Especifique o objeto invocado para createElement ao direcionar uma emissão de JSX 'react'",
   "Deprecated_Use_outFile_instead_Concatenate_and_emit_output_to_single_file_6170": "[Preterido] Use '--outFile' no lugar. Concatene e emita uma saída para um arquivo único",
   "Deprecated_Use_skipLibCheck_instead_Skip_type_checking_of_default_library_declaration_files_6160": "[Preterido] Use '--skipLibCheck' no lugar. Ignore a verificação de tipo dos arquivos de declaração de biblioteca padrão.",
+  "Deprecated_setting_Use_outFile_instead_6677": "Configuração preterida. Use 'outFile' em vez disso.",
   "Did_you_forget_to_use_await_2773": "Você esqueceu de usar 'await'?",
   "Did_you_mean_0_1369": "Você quis dizer '{0}'?",
   "Did_you_mean_for_0_to_be_constrained_to_type_new_args_Colon_any_1_2735": "Você quis dizer que '{0}' deve ser restrito ao tipo 'new (...args: any[]) => {1}'?",
@@ -459,12 +515,30 @@
   "Did_you_mean_to_use_new_with_this_expression_6213": "Você quis usar 'new' com essa expressão?",
   "Digit_expected_1124": "Dígito esperado.",
   "Directory_0_does_not_exist_skipping_all_lookups_in_it_6148": "O diretório '{0}' não existe; ignorando todas as pesquisas nele.",
+  "Disable_adding_use_strict_directives_in_emitted_JavaScript_files_6669": "Desabilitar a adição de diretivas 'use strict' em arquivos JavaScript emitidos.",
   "Disable_checking_for_this_file_90018": "Desabilitar a verificação para esse arquivo",
+  "Disable_emitting_comments_6688": "Desabilitar comentários de emissão.",
+  "Disable_emitting_declarations_that_have_internal_in_their_JSDoc_comments_6701": "Desabilite as declarações de emissão que têm ' @internal ' em seus comentários JSDoc.",
+  "Disable_emitting_file_from_a_compilation_6660": "Desabilitar o arquivo emissor de uma compilação.",
+  "Disable_emitting_files_if_any_type_checking_errors_are_reported_6662": "Desabilitar a emissão de arquivos se forem reportados erros de verificação de tipo.",
+  "Disable_erasing_const_enum_declarations_in_generated_code_6682": "Desabilitar a exclusão de declarações 'const enum' no código gerado.",
+  "Disable_error_reporting_for_unreachable_code_6603": "Desabilitar o relatório de erros para código inacessível.",
+  "Disable_error_reporting_for_unused_labels_6604": "Desabilitar o relatório de erros para rótulos não utilizados.",
+  "Disable_generating_custom_helper_functions_like_extends_in_compiled_output_6661": "Desabilitar funções auxiliares personalizadas como '__extends' nas saídas compiladas.",
+  "Disable_including_any_library_files_including_the_default_lib_d_ts_6670": "Desabilitar a inclusão de qualquer arquivo de biblioteca, incluindo o padrão lib.d.ts.",
   "Disable_loading_referenced_projects_6235": "Desabilite o carregamento de projetos referenciados.",
+  "Disable_preferring_source_files_instead_of_declaration_files_when_referencing_composite_projects_6620": "Desabilitar arquivos de origem de referência em vez de arquivos de declaração ao referenciar projetos compostos",
+  "Disable_reporting_of_excess_property_errors_during_the_creation_of_object_literals_6702": "Desabilitar relatório de excesso de erros de propriedade durante a criação de literais de objeto.",
+  "Disable_resolving_symlinks_to_their_realpath_This_correlates_to_the_same_flag_in_node_6683": "Desabilitar a resolução de symlinks para seus realpath. Isso se correlaciona com o mesmo sinalizador no nó.",
   "Disable_size_limitations_on_JavaScript_projects_6162": "Desabilitar as limitações de tamanho nos projetos JavaScript.",
   "Disable_solution_searching_for_this_project_6224": "Desabilite a pesquisa de solução deste projeto.",
-  "Disable_strict_checking_of_generic_signatures_in_function_types_6185": "Desabilitar verificação estrita de assinaturas genéricas em tipos de função.",
+  "Disable_strict_checking_of_generic_signatures_in_function_types_6673": "Desabilitar verificação estrita de assinaturas genéricas em tipos de função.",
+  "Disable_the_type_acquisition_for_JavaScript_projects_6625": "Desabilitar a aquisição de tipo para projetos JavaScript",
+  "Disable_truncating_types_in_error_messages_6663": "Desabilitar truncamento de tipos em mensagens de erro.",
   "Disable_use_of_source_files_instead_of_declaration_files_from_referenced_projects_6221": "Desabilite o uso de arquivos de origem em vez de arquivos de declaração de projetos referenciados.",
+  "Disable_wiping_the_console_in_watch_mode_6684": "Desabilitar a limpeza do console no modo de inspeção",
+  "Disables_inference_for_type_acquisition_by_looking_at_filenames_in_a_project_6616": "Desabilita a inferência para a aquisição de tipo examinando filenames em um projeto.",
+  "Disallow_import_s_require_s_or_reference_s_from_expanding_the_number_of_files_TypeScript_should_add__6672": "Não permitir 'importar', 'necessário ou' <referência> de expandir o número de arquivos que TypeScript deve adicionar a um projeto.",
   "Disallow_inconsistently_cased_references_to_the_same_file_6078": "Não permitir referências com maiúsculas de minúsculas inconsistentes no mesmo arquivo.",
   "Do_not_add_triple_slash_references_or_imported_modules_to_the_list_of_compiled_files_6159": "Não adicionar as referências de barra tripla nem os módulos importados à lista de arquivos compilados.",
   "Do_not_emit_comments_to_output_6009": "Não emita comentários para a saída.",
@@ -483,31 +557,48 @@
   "Duplicate_identifier_0_2300": "Identificador '{0}' duplicado.",
   "Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module_2441": "Identificador duplicado '{0}'. O compilador reserva o nome '{1}' no escopo de nível superior de um módulo.",
   "Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module_containing_async_func_2529": "Duplicar o identificador '{0}'. O compilador reserva o nome '{1}' em escopo de alto nível de um módulo que contém funções assíncronas.",
+  "Duplicate_identifier_0_Compiler_reserves_name_1_when_emitting_super_references_in_static_initializer_2818": "Identificador duplicado '{0}'. O compilador reserva o nome '{1}' ao emitir 'super' referências em inicializadores estáticos.",
   "Duplicate_identifier_0_Compiler_uses_declaration_1_to_support_async_functions_2520": "Identificador '{0}' duplicado. O compilador usa a declaração '{1}' para dar suporte a funções assíncronas.",
+  "Duplicate_identifier_0_Static_and_instance_elements_cannot_share_the_same_private_name_2804": "Identificador duplicado '{0}'. Os elementos estáticos e de instância não podem compartilhar o mesmo nome privado.",
   "Duplicate_identifier_arguments_Compiler_uses_arguments_to_initialize_rest_parameters_2396": "Identificador 'arguments' duplicado. O compilador usa 'arguments' para inicializar os parâmetros rest.",
   "Duplicate_identifier_newTarget_Compiler_uses_variable_declaration_newTarget_to_capture_new_target_me_2543": "Identificador duplicado '_newTarget'. O compilador usa a declaração de variável '_newTarget' para capturar a referência de metapropriedade 'new.target'.",
   "Duplicate_identifier_super_Compiler_uses_super_to_capture_base_class_reference_2401": "Identificador '_super' duplicado. O compilador usa '_super' para capturar a referência da classe base.",
   "Duplicate_identifier_this_Compiler_uses_variable_declaration_this_to_capture_this_reference_2399": "Identificador '_this' duplicado. O compilador usa a declaração de variável '_this' para capturar a referência 'this'.",
+  "Duplicate_index_signature_for_type_0_2374": "Assinatura de índice duplicada para o tipo '{0}'.",
   "Duplicate_label_0_1114": "Rótulo '{0}' duplicado.",
-  "Duplicate_number_index_signature_2375": "Assinatura de índice de número duplicado.",
   "Duplicate_property_0_2718": "Propriedade '{0}' duplicada.",
-  "Duplicate_string_index_signature_2374": "Assinatura de índice de cadeia de caracteres duplicada.",
   "Dynamic_import_cannot_have_type_arguments_1326": "A importação dinâmica não pode ter argumentos de tipo.",
   "Dynamic_import_must_have_one_specifier_as_an_argument_1324": "A importação dinâmica deve ter um especificador como um argumento.",
   "Dynamic_import_s_specifier_must_be_of_type_string_but_here_has_type_0_7036": "O especificador da importação dinâmica deve ser do tipo 'string', mas aqui tem o tipo '{0}'.",
   "Dynamic_imports_are_only_supported_when_the_module_flag_is_set_to_es2020_esnext_commonjs_amd_system__1323": "Só há suporte para importações dinâmicas quando o sinalizador '--module' está definido como 'es2020', 'esnext', 'commonjs', 'amd', 'system' ou 'UMD'.",
   "Each_member_of_the_union_type_0_has_construct_signatures_but_none_of_those_signatures_are_compatible_2762": "Cada membro do tipo de união '{0}' tem assinaturas de constructo, mas nenhuma dessas assinaturas é compatível entre si.",
   "Each_member_of_the_union_type_0_has_signatures_but_none_of_those_signatures_are_compatible_with_each_2758": "Cada membro do tipo de união '{0}' tem assinaturas, mas nenhuma dessas assinaturas é compatível entre si.",
-  "Element_at_index_0_is_variadic_in_one_type_but_not_in_the_other_2622": "O elemento no índice {0} é variádico em um tipo, mas não em outro.",
+  "Editor_Support_6249": "Suporte do Editor",
   "Element_implicitly_has_an_any_type_because_expression_of_type_0_can_t_be_used_to_index_type_1_7053": "O elemento implicitamente tem um tipo 'any' porque a expressão do tipo '{0}' não pode ser usada para o tipo de índice '{1}'.",
   "Element_implicitly_has_an_any_type_because_index_expression_is_not_of_type_number_7015": "O elemento implicitamente tem um tipo 'any' porque a expressão de índice não é do tipo 'number'.",
   "Element_implicitly_has_an_any_type_because_type_0_has_no_index_signature_7017": "O elemento tem, implicitamente, 'qualquer' tipo, pois o tipo '{0}' não tem assinatura de índice.",
   "Element_implicitly_has_an_any_type_because_type_0_has_no_index_signature_Did_you_mean_to_call_1_7052": "O elemento implicitamente tem um tipo 'any' porque o tipo '{0}' não tem assinatura de índice. Você quis dizer chamada de '{1}'?",
-  "Emit_a_UTF_8_Byte_Order_Mark_BOM_in_the_beginning_of_output_files_6164": "Emitir uma Marca de Ordem de Byte (BOM) UTF-8 no início dos arquivos de saída.",
+  "Emit_6246": "Emitir",
+  "Emit_ECMAScript_standard_compliant_class_fields_6712": "Emitir os campos de classe ECMAScript-standard-compliant.",
+  "Emit_a_UTF_8_Byte_Order_Mark_BOM_in_the_beginning_of_output_files_6622": "Emitir uma Marca de Ordem de Byte (BOM) UTF-8 no início dos arquivos de saída.",
   "Emit_a_single_file_with_source_maps_instead_of_having_a_separate_file_6151": "Emitir um arquivo único com os mapas de origem em vez de arquivos separados.",
+  "Emit_a_v8_CPU_profile_of_the_compiler_run_for_debugging_6638": "Emitir um perfil de CPU V8 da execução do compilador para depuração.",
+  "Emit_additional_JavaScript_to_ease_support_for_importing_CommonJS_modules_This_enables_allowSyntheti_6626": "Emitir JavaScript adicional para facilitar o suporte à importação de módulos CommonJS. Isso habilita 'allowSyntheticDefaultImports' para compatibilidade de tipo.",
   "Emit_class_fields_with_Define_instead_of_Set_6222": "Emita campos de classe com Definir em vez de Configurar.",
+  "Emit_design_type_metadata_for_decorated_declarations_in_source_files_6624": "Emitir metadados de tipo design para declarações decoradas nos arquivos de origem.",
+  "Emit_more_compliant_but_verbose_and_less_performant_JavaScript_for_iteration_6621": "Emitir um JavaScript mais compatível, mas detalhado e menos eficaz para iteração.",
   "Emit_the_source_alongside_the_sourcemaps_within_a_single_file_requires_inlineSourceMap_or_sourceMap__6152": "Emitir a origem ao lado dos sourcemaps em um arquivo único; a definição requer '--inlineSourceMap' ou '--sourceMap'.",
   "Enable_all_strict_type_checking_options_6180": "Habilitar todas as opções estritas de verificação de tipo.",
+  "Enable_color_and_formatting_in_output_to_make_compiler_errors_easier_to_read_6685": "Habilitar cor e formatação na saída para facilitar a leitura dos erros do compilador",
+  "Enable_constraints_that_allow_a_TypeScript_project_to_be_used_with_project_references_6611": "Habilitar restrições que permitem que um projeto TypeScript seja usado com referências do projeto.",
+  "Enable_error_reporting_for_codepaths_that_do_not_explicitly_return_in_a_function_6667": "Habilitar o relatório de erros para codepaths que não retornam explicitamente uma função.",
+  "Enable_error_reporting_for_expressions_and_declarations_with_an_implied_any_type_6665": "Habilitar o relatório de erros para expressões e declarações com um tipo 'any' implícito.",
+  "Enable_error_reporting_for_fallthrough_cases_in_switch_statements_6664": "Habilitar o relatório de erros para casos fallthrough no parâmetro relatório.",
+  "Enable_error_reporting_in_type_checked_JavaScript_files_6609": "Habilitar o relatório de erros em arquivos JavaScript verificados por tipo.",
+  "Enable_error_reporting_when_a_local_variables_aren_t_read_6675": "Habilitar relatório de erros quando as variáveis locais não forem lidas.",
+  "Enable_error_reporting_when_this_is_given_the_type_any_6668": "Habilitar relatório de erros quando 'this' for fornecido o tipo 'any'.",
+  "Enable_experimental_support_for_TC39_stage_2_draft_decorators_6630": "Habilitar suporte experimental para decoradores de rascunho do TC39 estágio 2.",
+  "Enable_importing_json_files_6689": "Habilitar importação de arquivos .JSON",
   "Enable_incremental_compilation_6378": "Habilitar compilação incremental",
   "Enable_project_compilation_6302": "Habilitar a compilação do projeto",
   "Enable_strict_bind_call_and_apply_methods_on_functions_6214": "Habilite os métodos estritos 'bind', 'call' e 'apply' em funções.",
@@ -517,11 +608,20 @@
   "Enable_the_experimentalDecorators_option_in_your_configuration_file_95074": "Habilitar a opção 'experimentalDecorators' no arquivo de configuração",
   "Enable_the_jsx_flag_in_your_configuration_file_95088": "Habilitar o sinalizador '--jsx' no arquivo de configuração",
   "Enable_tracing_of_the_name_resolution_process_6085": "Habilite o rastreio do processo de resolução de nome.",
-  "Enable_verbose_logging_6366": "Habilitar registro em log detalhado",
+  "Enable_verbose_logging_6713": "Habilitar registro em log detalhado",
   "Enables_emit_interoperability_between_CommonJS_and_ES_Modules_via_creation_of_namespace_objects_for__7037": "Permite emissão de interoperabilidade entre CommonJS e Módulos ES através da criação de objetos de namespace para todas as importações. Implica em 'allowSyntheticDefaultImports'.",
   "Enables_experimental_support_for_ES7_async_functions_6068": "Habilita o suporte experimental para funções assíncronas de ES7.",
   "Enables_experimental_support_for_ES7_decorators_6065": "Habilita o suporte experimental para decoradores ES7.",
   "Enables_experimental_support_for_emitting_type_metadata_for_decorators_6066": "Habilita o suporte experimental para a emissão de tipo de metadados para decoradores.",
+  "Enforces_using_indexed_accessors_for_keys_declared_using_an_indexed_type_6671": "Aplicar o uso de acessadores indexados para chaves declaradas usando um tipo indexado",
+  "Ensure_overriding_members_in_derived_classes_are_marked_with_an_override_modifier_6666": "Verifique se os membros de substituição em classes derivadas estão marcados com um modificador de ignorar.",
+  "Ensure_that_casing_is_correct_in_imports_6637": "Certifique-se de que a capitalização esteja correta nas importações.",
+  "Ensure_that_each_file_can_be_safely_transpiled_without_relying_on_other_imports_6645": "Certifique-se que cada arquivo pode ser convertido em segurança sem depender de outras importações.",
+  "Ensure_use_strict_is_always_emitted_6605": "Certifique-se de que 'use strict' seja sempre emitido.",
+  "Entry_point_for_implicit_type_library_0_1420": "Ponto de entrada para a biblioteca de tipos implícita '{0}'",
+  "Entry_point_for_implicit_type_library_0_with_packageId_1_1421": "Ponto de entrada para a biblioteca de tipos implícita '{0}' com packageId '{1}'",
+  "Entry_point_of_type_library_0_specified_in_compilerOptions_1417": "Ponto de entrada da biblioteca de tipos '{0}' especificado em compilerOptions",
+  "Entry_point_of_type_library_0_specified_in_compilerOptions_with_packageId_1_1418": "Ponto de entrada da biblioteca de tipos '{0}' especificado em compilerOptions com packageId '{1}'",
   "Enum_0_used_before_its_declaration_2450": "A enumeração '{0}' usada antes de sua declaração.",
   "Enum_declarations_can_only_merge_with_namespace_or_other_enum_declarations_2567": "As declarações enum só podem ser mescladas com namespaces ou com outras declarações enum.",
   "Enum_declarations_must_all_be_const_or_non_const_2473": "Declarações de enumeração devem ser const ou não const.",
@@ -535,15 +635,13 @@
   "Expected_0_1_type_arguments_provide_these_with_an_extends_tag_8027": "Espera-se {0}-{1} argumentos de tipo; forneça esses recursos com uma marca \"@extends\".",
   "Expected_0_arguments_but_got_1_2554": "{0} argumentos eram esperados, mas {1} foram obtidos.",
   "Expected_0_arguments_but_got_1_Did_you_forget_to_include_void_in_your_type_argument_to_Promise_2794": "{0} argumentos eram esperados, mas foram obtidos {1}. Você esqueceu de incluir 'void' no argumento de tipo para 'Promise'?",
-  "Expected_0_arguments_but_got_1_or_more_2556": "Eram {0} argumentos esperados, mas {1} ou mais foram obtidos.",
   "Expected_0_type_arguments_but_got_1_2558": "{0} argumentos de tipo eram esperados, mas {1} foram obtidos.",
   "Expected_0_type_arguments_provide_these_with_an_extends_tag_8026": "Espera-se {0} argumentos de tipo; forneça esses recursos com uma marca \"@extends\".",
   "Expected_at_least_0_arguments_but_got_1_2555": "Pelo menos {0} argumentos eram esperados, mas {1} foram obtidos.",
-  "Expected_at_least_0_arguments_but_got_1_or_more_2557": "Pelo menos {0} argumentos eram esperados, mas {1} ou mais foram obtidos.",
   "Expected_corresponding_JSX_closing_tag_for_0_17002": "Marca de fechamento de JSX correspondente esperada para '{0}'.",
   "Expected_corresponding_closing_tag_for_JSX_fragment_17015": "Marca de fechamento correspondente esperada para fragmento JSX.",
+  "Expected_for_property_initializer_1442": "Esperado '=' para inicializador de propriedade.",
   "Expected_type_of_0_field_in_package_json_to_be_1_got_2_6105": "O tipo esperado do campo '{0}' em 'package.json' como '{1}' obteve '{2}'.",
-  "Experimental_Options_6177": "Opções Experimentais",
   "Experimental_support_for_decorators_is_a_feature_that_is_subject_to_change_in_a_future_release_Set_t_1219": "O suporte experimental de decorador é um recurso que está sujeito a alterações em uma liberação futura. Configure a opção 'experimentalDecorators' em seu 'tsconfig' ou 'jsconfig' para remover este aviso.",
   "Explicitly_specified_module_resolution_kind_Colon_0_6087": "Tipo de resolução de módulo especificado explicitamente: '{0}'.",
   "Exponentiation_cannot_be_performed_on_bigint_values_unless_the_target_option_is_set_to_es2016_or_lat_2791": "A exponenciação não pode ser executada nos valores 'bigint', a menos que a opção 'target' esteja definida como 'es2016' ou posterior.",
@@ -554,12 +652,14 @@
   "Exported_external_package_typings_file_0_is_not_a_module_Please_contact_the_package_author_to_update_2656": "O arquivo de digitação '{0}' do pacote externo exportado não é um módulo. Entre em contato com o autor do pacote para atualizar a definição de pacote.",
   "Exported_external_package_typings_file_cannot_contain_tripleslash_references_Please_contact_the_pack_2654": "O arquivo de digitação do pacote externo exportado não pode conter referências de barra tripla. Entre em contato com o autor do pacote para atualizar a definição de pacote.",
   "Exported_type_alias_0_has_or_is_using_private_name_1_4081": "O alias de tipo exportado '{0}' tem ou está usando o nome particular '{1}'.",
+  "Exported_type_alias_0_has_or_is_using_private_name_1_from_module_2_4084": "O alias do tipo exportado '{0}' tem ou está usando o nome privado '{1}' do módulo {2}.",
   "Exported_variable_0_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4023": "A variável exportada '{0}' tem ou está usando o nome '{1}' do módulo externo {2}, mas não pode ser nomeada.",
   "Exported_variable_0_has_or_is_using_name_1_from_private_module_2_4024": "A variável exportada '{0}' tem ou está usando o nome '{1}' do módulo particular '{2}'.",
   "Exported_variable_0_has_or_is_using_private_name_1_4025": "A variável exportada '{0}' tem ou está usando o nome particular '{1}'.",
   "Exports_and_export_assignments_are_not_permitted_in_module_augmentations_2666": "Exportações e designações de exportações não são permitidas em acréscimos de módulo.",
   "Expression_expected_1109": "Expressão esperada.",
   "Expression_or_comma_expected_1137": "Expressão ou vírgula esperada.",
+  "Expression_produces_a_tuple_type_that_is_too_large_to_represent_2800": "A expressão produz um tipo de tupla grande demais para ser representada.",
   "Expression_produces_a_union_type_that_is_too_complex_to_represent_2590": "A expressão produz um tipo de união muito complexo para representar.",
   "Expression_resolves_to_super_that_compiler_uses_to_capture_base_class_reference_2402": "A expressão é resolvida como '_super', que o compilador utiliza para capturar a referência da classe base.",
   "Expression_resolves_to_variable_declaration_0_that_compiler_uses_to_support_async_functions_2521": "A expressão é resolvida como uma declaração de variável '{0}' que o compilador usa para dar suporte a funções assíncronas.",
@@ -579,7 +679,9 @@
   "Failed_to_parse_file_0_Colon_1_5014": "Falha ao analisar arquivo '{0}': {1}.",
   "Fallthrough_case_in_switch_7029": "Caso de fallthrough no comutador.",
   "File_0_does_not_exist_6096": "O arquivo '{0}' não existe.",
+  "File_0_does_not_exist_according_to_earlier_cached_lookups_6240": "O arquivo '{0}' não existe de acordo com as pesquisas anteriores em cache.",
   "File_0_exist_use_it_as_a_name_resolution_result_6097": "O arquivo '{0}' existe; use-o como um resultado de resolução de nome.",
+  "File_0_exists_according_to_earlier_cached_lookups_6239": "O arquivo '{0}' existe de acordo com as pesquisas anteriores em cache.",
   "File_0_has_an_unsupported_extension_The_only_supported_extensions_are_1_6054": "O arquivo '{0}' tem uma extensão sem suporte. As únicas extensões com suporte são {1}.",
   "File_0_has_an_unsupported_extension_so_skipping_it_6081": "O arquivo '{0}' tem uma extensão sem suporte, portanto ele será ignorado.",
   "File_0_is_a_JavaScript_file_Did_you_mean_to_enable_the_allowJs_option_6504": "O arquivo '{0}' é um arquivo JavaScript. Você quis habilitar a opção 'allowJs'?",
@@ -587,16 +689,32 @@
   "File_0_is_not_listed_within_the_file_list_of_project_1_Projects_must_list_all_files_or_use_an_includ_6307": "O arquivo '{0}' não está na lista de arquivos de projeto '{1}'. Os projetos devem listar todos os arquivos ou usar um padrão 'include'.",
   "File_0_is_not_under_rootDir_1_rootDir_is_expected_to_contain_all_source_files_6059": "O arquivo '{0}' não está em 'rootDir' '{1}'. Espera-se que 'rootDir' contenha todos os arquivos de origem.",
   "File_0_not_found_6053": "Arquivo '{0}' não encontrado.",
+  "File_Management_6245": "Gerenciamento de Arquivos",
   "File_change_detected_Starting_incremental_compilation_6032": "Alteração do arquivo detectada. Iniciando compilação incremental...",
   "File_is_a_CommonJS_module_it_may_be_converted_to_an_ES6_module_80001": "O arquivo é um módulo CommonJS; ele pode ser convertido em um módulo ES6.",
+  "File_is_default_library_for_target_specified_here_1426": "O arquivo é a biblioteca padrão para o destino especificado aqui.",
+  "File_is_entry_point_of_type_library_specified_here_1419": "O arquivo é o ponto de entrada da biblioteca de tipos especificada aqui.",
+  "File_is_included_via_import_here_1399": "O arquivo é incluído via importação aqui.",
+  "File_is_included_via_library_reference_here_1406": "O arquivo é incluído via referência de biblioteca aqui.",
+  "File_is_included_via_reference_here_1401": "O arquivo é incluído via referência aqui.",
+  "File_is_included_via_type_library_reference_here_1404": "O arquivo é incluído via referência de biblioteca de tipos.",
+  "File_is_library_specified_here_1423": "O arquivo é a biblioteca especificada aqui.",
+  "File_is_matched_by_files_list_specified_here_1410": "O arquivo corresponde à lista 'files' especificada aqui.",
+  "File_is_matched_by_include_pattern_specified_here_1408": "O arquivo corresponde ao padrão de inclusão especificado aqui.",
+  "File_is_output_from_referenced_project_specified_here_1413": "O arquivo é a saída do projeto referenciado especificado aqui.",
+  "File_is_output_of_project_reference_source_0_1428": "O arquivo é a saída da origem de referência do projeto '{0}'",
+  "File_is_source_from_referenced_project_specified_here_1416": "O arquivo é a origem do projeto referenciado especificado aqui.",
   "File_name_0_differs_from_already_included_file_name_1_only_in_casing_1149": "O nome do arquivo '{0}' difere do nome de arquivo '{1}' já incluído somente em maiúsculas e minúsculas.",
   "File_name_0_has_a_1_extension_stripping_it_6132": "O nome do arquivo '{0}' tem uma extensão '{1}' – remoção.",
+  "File_redirects_to_file_0_1429": "O arquivo redireciona para o arquivo '{0}'",
   "File_specification_cannot_contain_a_parent_directory_that_appears_after_a_recursive_directory_wildca_5065": "A especificação de arquivo não pode conter um diretório pai ('..') que aparece após um curinga de diretório recursivo ('**'): '{0}'.",
   "File_specification_cannot_end_in_a_recursive_directory_wildcard_Asterisk_Asterisk_Colon_0_5010": "A especificação de arquivo não pode terminar em um curinga do diretório recursivo ('**'): '{0}'.",
+  "Filters_results_from_the_include_option_6627": "Filtra os resultados da opção 'include'.",
   "Fix_all_detected_spelling_errors_95026": "Corrigir todos os erros de ortografia detectados",
   "Fix_all_expressions_possibly_missing_await_95085": "Corrigir todas as expressões possivelmente com 'await' ausente",
   "Fix_all_implicit_this_errors_95107": "Corrigir todos os erros de 'this' implícitos",
   "Fix_all_incorrect_return_type_of_an_async_functions_90037": "Corrigir todo tipo de retorno incorreto de uma função assíncrona",
+  "For_await_loops_cannot_be_used_inside_a_class_static_block_18038": "Os loops “For Await” não podem ser usados dentro de um bloco estático de classe.",
   "Found_0_errors_6217": "Encontrados {0} erros.",
   "Found_0_errors_Watching_for_file_changes_6194": "{0} erros encontrados. Monitorando alterações de arquivo.",
   "Found_1_error_6216": "Encontrado 1 erro.",
@@ -610,11 +728,14 @@
   "Function_implementation_name_must_be_0_2389": "O nome da implementação de função deve ser '{0}'.",
   "Function_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_ref_7024": "A função tem o tipo de retorno 'any', de forma implícita, porque ela não tem uma anotação de tipo de retorno e é referenciada direta ou indiretamente em uma das suas expressões de retorno.",
   "Function_lacks_ending_return_statement_and_return_type_does_not_include_undefined_2366": "A função não tem a instrução return final e o tipo de retorno não inclui 'undefined'.",
+  "Function_not_implemented_95159": "Função não implementada.",
   "Function_overload_must_be_static_2387": "A sobrecarga de função deve ser estática.",
   "Function_overload_must_not_be_static_2388": "A sobrecarga de função não deve ser estática.",
   "Function_type_notation_must_be_parenthesized_when_used_in_a_union_type_1385": "A notação de tipo de função precisa estar entre parênteses quando usada em um tipo de união.",
   "Function_type_notation_must_be_parenthesized_when_used_in_an_intersection_type_1387": "A notação de tipo de função precisa estar entre parênteses quando usada em um tipo de interseção.",
   "Function_type_which_lacks_return_type_annotation_implicitly_has_an_0_return_type_7014": "O tipo de função, que não tem a anotação de tipo de retorno, implicitamente tem um tipo de retorno '{0}'.",
+  "Function_with_bodies_can_only_merge_with_classes_that_are_ambient_2814": "A função com corpos só podem ser mescladas com classes que são ambientes.",
+  "Generate_d_ts_files_from_TypeScript_and_JavaScript_files_in_your_project_6612": "Gerar arquivos d.ts de arquivos TypeScript e JavaScript em seu projeto.",
   "Generate_get_and_set_accessors_95046": "Gerar acessadores 'get' e 'set'",
   "Generate_get_and_set_accessors_for_all_overriding_properties_95119": "Gerar os acessadores 'get' e 'set' para todas as propriedades de substituição",
   "Generates_a_CPU_profile_6223": "Gera um perfil de CPU.",
@@ -627,13 +748,13 @@
   "Generators_are_only_available_when_targeting_ECMAScript_2015_or_higher_1220": "Geradores só estão disponíveis ao direcionar para o ECMAScript 2015 ou superior.",
   "Generic_type_0_requires_1_type_argument_s_2314": "O tipo genérico '{0}' exige {1} argumento(s) de tipo.",
   "Generic_type_0_requires_between_1_and_2_type_arguments_2707": "O tipo genérico '{0}' exige argumentos de tipo entre {1} e {2}.",
-  "Getter_and_setter_accessors_do_not_agree_in_visibility_2379": "Acessadores getter e setter não concordam quanto à visibilidade.",
   "Global_module_exports_may_only_appear_at_top_level_1316": "As exportações de módulo global podem somente aparecer no nível superior.",
   "Global_module_exports_may_only_appear_in_declaration_files_1315": "As exportações de módulo global podem somente aparecer em arquivos de declaração.",
   "Global_module_exports_may_only_appear_in_module_files_1314": "As exportações de módulo global podem somente aparecer em arquivos de módulo.",
   "Global_type_0_must_be_a_class_or_interface_type_2316": "O tipo global '{0}' deve ser um tipo de classe ou interface.",
   "Global_type_0_must_have_1_type_parameter_s_2317": "O tipo global '{0}' deve ter {1} parâmetro(s) de tipo.",
   "Have_recompiles_in_incremental_and_watch_assume_that_changes_within_a_file_will_only_affect_files_di_6384": "Faça com que as recompilações em '--incremental' e '--watch' presumam que as alterações dentro de um arquivo só afetarão os arquivos que dependem diretamente dele.",
+  "Have_recompiles_in_projects_that_use_incremental_and_watch_mode_assume_that_changes_within_a_file_wi_6606": "Ter recompilações em projetos que usam os modos 'incremental' e 'watch' pressupõem que as alterações em um arquivo afetarão apenas os arquivos diretamente dependendo dele.",
   "Hexadecimal_digit_expected_1125": "Dígito hexadecimal esperado.",
   "Identifier_expected_0_is_a_reserved_word_at_the_top_level_of_a_module_1262": "Um identificador é esperado. '{0}' é uma palavra reservada no nível superior de um módulo.",
   "Identifier_expected_0_is_a_reserved_word_in_strict_mode_1212": "Identificador esperado. '{0}' é uma palavra reservada no modo estrito.",
@@ -642,8 +763,9 @@
   "Identifier_expected_0_is_a_reserved_word_that_cannot_be_used_here_1359": "Identificador esperado. '{0}' é uma palavra reservada que não pode ser usada aqui.",
   "Identifier_expected_1003": "Identificador esperado.",
   "Identifier_expected_esModule_is_reserved_as_an_exported_marker_when_transforming_ECMAScript_modules_1216": "Identificador esperado. '__esModule' é reservado como um marcador exportado ao transformar os módulos ECMAScript.",
-  "If_the_0_package_actually_exposes_this_module_consider_sending_a_pull_request_to_amend_https_Colon_S_7040": "Se o pacote '{0}' realmente expõe este módulo, considere enviar uma solicitação pull para corrigir 'https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/{1}`",
+  "If_the_0_package_actually_exposes_this_module_consider_sending_a_pull_request_to_amend_https_Colon_S_7040": "Se o pacote '{0}' realmente expõe este módulo, considere enviar uma solicitação de pull para corrigir 'https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/{1}'",
   "Ignore_this_error_message_90019": "Ignorar essa mensagem de erro",
+  "Ignoring_tsconfig_json_compiles_the_specified_files_with_default_compiler_options_6924": "Ignorando tsconfig.json, compila os arquivos especificados com opções do compilador padrão",
   "Implement_all_inherited_abstract_classes_95040": "Implementar todas as classes abstratas herdadas",
   "Implement_all_unimplemented_interfaces_95032": "Implementar todas as interfaces não implementadas",
   "Implement_inherited_abstract_class_90007": "Implementar classe abstrata herdada",
@@ -660,14 +782,23 @@
   "Import_may_be_converted_to_a_default_import_80003": "A importação pode ser convertida em uma importação padrão.",
   "Import_name_cannot_be_0_2438": "O nome da importação não pode ser '{0}'.",
   "Import_or_export_declaration_in_an_ambient_module_declaration_cannot_reference_module_through_relati_2439": "A declaração de importação e exportação em uma declaração de módulo de ambiente não pode fazer referência ao módulo por meio do nome do módulo relativo.",
+  "Imported_via_0_from_file_1_1393": "Importado via {0} do arquivo '{1}'",
+  "Imported_via_0_from_file_1_to_import_importHelpers_as_specified_in_compilerOptions_1395": "Importado via {0} do arquivo '{1}' para importar 'importHelpers' conforme especificado em compilerOptions",
+  "Imported_via_0_from_file_1_to_import_jsx_and_jsxs_factory_functions_1397": "Importado via {0} do arquivo '{1}' para importar as funções de fábrica 'jsx' e 'jsxs'",
+  "Imported_via_0_from_file_1_with_packageId_2_1394": "Importado via {0} do arquivo '{1}' com packageId '{2}'",
+  "Imported_via_0_from_file_1_with_packageId_2_to_import_importHelpers_as_specified_in_compilerOptions_1396": "Importado via {0} do arquivo '{1}' com packageId '{2}' para importar 'importHelpers' conforme especificado em compilerOptions",
+  "Imported_via_0_from_file_1_with_packageId_2_to_import_jsx_and_jsxs_factory_functions_1398": "Importado via {0} do arquivo '{1}' com packageId '{2}' para importar as funções de fábrica 'jsx' e 'jsxs'",
   "Imports_are_not_permitted_in_module_augmentations_Consider_moving_them_to_the_enclosing_external_mod_2667": "Importações não são permitidas em acréscimos de módulo. Considere movê-las para o módulo externo delimitador.",
   "In_ambient_enum_declarations_member_initializer_must_be_constant_expression_1066": "Em declarações de enumeração de ambiente, o inicializador de membro deve ser uma expressão de constante.",
   "In_an_enum_with_multiple_declarations_only_one_declaration_can_omit_an_initializer_for_its_first_enu_2432": "Em uma enumeração com várias declarações, somente uma declaração pode omitir um inicializador para o primeiro elemento de enumeração.",
+  "Include_a_list_of_files_This_does_not_support_glob_patterns_as_opposed_to_include_6635": "Incluir uma lista de arquivos. Isso não oferece suporte a padrões glob, ao contrário de 'include'.",
   "Include_modules_imported_with_json_extension_6197": "Incluir módulos importados com a extensão '.json'",
-  "Include_undefined_in_index_signature_results_6800": "Incluir 'undefined' nos resultados da assinatura de índice",
+  "Include_source_code_in_the_sourcemaps_inside_the_emitted_JavaScript_6644": "Incluir o código-fonte no sourcemaps dentro do JavaScript emitido.",
+  "Include_sourcemap_files_inside_the_emitted_JavaScript_6643": "Incluir arquivos sourcemap dentro do JavaScript emitido.",
+  "Include_undefined_in_index_signature_results_6716": "Incluir 'undefined' nos resultados da assinatura de índice",
+  "Including_watch_w_will_start_watching_the_current_project_for_the_file_changes_Once_set_you_can_conf_6914": "Incluir --watch, -w começará a observar o projeto atual para as alterações do arquivo. Uma vez definido, você pode configurar o modo de inspeção com:",
+  "Index_signature_for_type_0_is_missing_in_type_1_2329": "A assinatura do índice para o tipo '{0}' está ausente no tipo '{1}'.",
   "Index_signature_in_type_0_only_permits_reading_2542": "Assinatura de índice no tipo '{0}' permite somente leitura.",
-  "Index_signature_is_missing_in_type_0_2329": "Assinatura de índice ausente no tipo '{0}'.",
-  "Index_signatures_are_incompatible_2330": "As assinaturas de índice são incompatíveis.",
   "Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local_2395": "Todas as declarações individuais na declaração mesclada '{0}' devem ser exportadas ou ficar no local.",
   "Infer_all_types_from_usage_95023": "Inferir todos os tipos de uso",
   "Infer_function_return_type_95148": "Inferir o tipo de retorno da função",
@@ -676,6 +807,7 @@
   "Infer_type_of_0_from_usage_95011": "Inferir tipo de '{0}' pelo uso",
   "Initialize_property_0_in_the_constructor_90020": "Inicializar a propriedade '{0}' no construtor",
   "Initialize_static_property_0_90021": "Inicializar a propriedade estática '{0}'",
+  "Initializer_for_property_0_2811": "Inicializador para a propriedade '{0}'",
   "Initializer_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor_2301": "O inicializador da variável de membro de instância '{0}' não pode referenciar o identificador '{1}' declarado no construtor.",
   "Initializer_provides_no_value_for_this_binding_element_and_the_binding_element_has_no_default_value_2525": "O inicializador não fornece um valor para esse elemento de associação e o elemento de associação não tem valor padrão.",
   "Initializers_are_not_allowed_in_ambient_contexts_1039": "Inicializadores não são permitidos em contextos de ambiente.",
@@ -686,12 +818,16 @@
   "Interface_0_cannot_simultaneously_extend_types_1_and_2_2320": "A interface '{0}' não pode estender os tipos '{1}' e '{2}' simultaneamente.",
   "Interface_0_incorrectly_extends_interface_1_2430": "A interface '{0}' estende incorretamente a interface '{1}'.",
   "Interface_declaration_cannot_have_implements_clause_1176": "A declaração de interface não pode ter a cláusula 'implements'.",
+  "Interface_must_be_given_a_name_1438": "A interface deve receber um nome.",
   "Interface_name_cannot_be_0_2427": "O nome da interface não pode ser '{0}'.",
+  "Interop_Constraints_6252": "Restrições Interop",
+  "Interpret_optional_property_types_as_written_rather_than_adding_undefined_6243": "Interprete os tipos de propriedade opcionais conforme escritos, em vez de adicionar 'indefinido'.",
   "Invalid_character_1127": "Caractere inválido.",
   "Invalid_module_name_in_augmentation_Module_0_resolves_to_an_untyped_module_at_1_which_cannot_be_augm_2665": "Nome de módulo inválido no aumento. O módulo '{0}' resolve para um módulo não tipado em '{1}', que não pode ser aumentado.",
   "Invalid_module_name_in_augmentation_module_0_cannot_be_found_2664": "Nome de módulo inválido em acréscimo, o módulo '{0}' não pôde ser encontrado.",
   "Invalid_reference_directive_syntax_1084": "Sintaxe de diretiva 'reference' inválida.",
   "Invalid_use_of_0_Class_definitions_are_automatically_in_strict_mode_1210": "Uso inválido de '{0}'. Definições de classe estão automaticamente no modo estrito.",
+  "Invalid_use_of_0_It_cannot_be_used_inside_a_class_static_block_18039": "Uso inválido de “{0}”. Ele não pode ser usado dentro de um bloco estático de classe.",
   "Invalid_use_of_0_Modules_are_automatically_in_strict_mode_1215": "Uso inválido de '{0}'. Os módulos ficam automaticamente em modo estrito.",
   "Invalid_use_of_0_in_strict_mode_1100": "Uso inválido de '{0}' no modo estrito.",
   "Invalid_value_for_jsxFactory_0_is_not_a_valid_identifier_or_qualified_name_5067": "Valor inválido para 'jsxFactory'. '{0}' não é um identificador válido ou nome qualificado.",
@@ -723,13 +859,18 @@
   "JSX_expressions_may_not_use_the_comma_operator_Did_you_mean_to_write_an_array_18007": "Expressões JSX não podem usar o operador vírgula. Você quis escrever uma matriz?",
   "JSX_expressions_must_have_one_parent_element_2657": "As expressões JSX devem ter um elemento pai.",
   "JSX_fragment_has_no_corresponding_closing_tag_17014": "O fragmento JSX não tem uma marcação de fechamento correspondente.",
+  "JSX_property_access_expressions_cannot_include_JSX_namespace_names_2633": "As expressões de acesso da propriedade JSX não podem incluir nomes do namespace JSX",
   "JSX_spread_child_must_be_an_array_type_2609": "O filho do espalhamento JSX deve ser um tipo de matriz.",
+  "JavaScript_Support_6247": "Suporte do JavaScript",
   "Jump_target_cannot_cross_function_boundary_1107": "O destino do salto não pode ultrapassar o limite de função.",
   "KIND_6034": "TIPO",
   "Keywords_cannot_contain_escape_characters_1260": "As palavras-chave não podem conter caracteres de escape.",
   "LOCATION_6037": "LOCAL",
+  "Language_and_Environment_6254": "Idioma e Ambiente",
   "Language_service_is_disabled_9004": "O serviço de linguagem está desabilitado.",
   "Left_side_of_comma_operator_is_unused_and_has_no_side_effects_2695": "O operador antes da vírgula não é usado e não tem efeitos colaterais.",
+  "Library_0_specified_in_compilerOptions_1422": "Biblioteca '{0}' especificada em compilerOptions",
+  "Library_referenced_via_0_from_file_1_1405": "Biblioteca referenciada via '{0}' do arquivo '{1}'",
   "Line_break_not_permitted_here_1142": "Quebra de linha não permitida aqui.",
   "Line_terminator_not_permitted_before_arrow_1200": "Terminador de linha não permitido antes de seta.",
   "List_of_folders_to_include_type_definitions_from_6161": "Lista de pastas das quais são incluídas as definições de tipo.",
@@ -739,11 +880,14 @@
   "Loading_module_0_from_node_modules_folder_target_file_type_1_6098": "Carregando o módulo '{0}' da pasta 'node_modules', tipo de arquivo de destino '{1}'.",
   "Loading_module_as_file_Slash_folder_candidate_module_location_0_target_file_type_1_6095": "Carregando módulo como arquivo/pasta, local do módulo candidato '{0}', tipo de arquivo de destino '{1}'.",
   "Locale_must_be_of_the_form_language_or_language_territory_For_example_0_or_1_6048": "A localidade deve estar no formato <language> ou <language>-<territory>. Por exemplo '{0}' ou '{1}'.",
+  "Log_paths_used_during_the_moduleResolution_process_6706": "Caminhos de log usados durante o processo 'moduleResolution'.",
   "Longest_matching_prefix_for_0_is_1_6108": "O maior prefixo correspondente para '{0}' é '{1}'.",
   "Looking_up_in_node_modules_folder_initial_location_0_6125": "Pesquisando na pasta 'node_modules', local inicial '{0}'.",
   "Make_all_super_calls_the_first_statement_in_their_constructor_95036": "Tornar todas as chamadas 'super()' a primeira instrução nos respectivos construtores",
+  "Make_keyof_only_return_strings_instead_of_string_numbers_or_symbols_Legacy_option_6650": "Fazer com que o keyof retorne apenas cadeias de caracteres, números ou símbolos. Opção herdada.",
   "Make_super_call_the_first_statement_in_the_constructor_90002": "Tornar a chamada 'super()' a primeira instrução no construtor",
   "Mapped_object_type_implicitly_has_an_any_template_type_7039": "O tipo de objeto mapeado implicitamente tem um tipo de modelo 'any'.",
+  "Matched_by_include_pattern_0_in_1_1407": "Correspondência pelo padrão de inclusão '{0}' em '{1}'",
   "Member_0_implicitly_has_an_1_type_7008": "O membro '{0}' implicitamente tem um tipo '{1}'.",
   "Member_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage_7045": "O membro '{0}' implicitamente tem um tipo '{1}', mas um tipo melhor pode ser inferido do uso.",
   "Merge_conflict_marker_encountered_1185": "Marcador de conflito de mesclagem encontrado.",
@@ -752,6 +896,7 @@
   "Method_0_cannot_have_an_implementation_because_it_is_marked_abstract_1245": "O método '{0}' não pode ter uma implementação, pois está marcado como abstrato.",
   "Method_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2_4101": "O método '{0}' da interface exportada tem ou está usando o nome '{1}' do módulo privado '{2}'.",
   "Method_0_of_exported_interface_has_or_is_using_private_name_1_4102": "O método '{0}' da interface exportada tem ou está usando o nome privado '{1}'.",
+  "Method_not_implemented_95158": "Método não implementado.",
   "Modifiers_cannot_appear_here_1184": "Modificadores não podem aparecer aqui.",
   "Module_0_can_only_be_default_imported_using_the_1_flag_1259": "O módulo '{0}' só pode ser importado por padrão usando o sinalizador '{1}'",
   "Module_0_declares_1_locally_but_it_is_exported_as_2_2460": "O módulo '{0}' declara '{1}' localmente, mas é exportado como '{2}'.",
@@ -769,13 +914,14 @@
   "Module_0_was_resolved_as_locally_declared_ambient_module_in_file_1_6144": "O módulo '{0}' foi resolvido como módulo de ambiente declarado localmente no arquivo '{1}'.",
   "Module_0_was_resolved_to_1_but_jsx_is_not_set_6142": "O módulo '{0}' foi resolvido para '{1}', mas '--jsx' não está configurado.",
   "Module_0_was_resolved_to_1_but_resolveJsonModule_is_not_used_7042": "O módulo '{0}' foi resolvido para '{1}', mas '--resolveJsonModule' não é usado.",
-  "Module_Resolution_Options_6174": "Opções da Resolução de Módulo",
+  "Module_declaration_names_may_only_use_or_quoted_strings_1443": "Os nomes de declaração de módulo só podem usar ' ou “ cadeias de caracteres entre aspas.",
   "Module_name_0_matched_pattern_1_6092": "Nome do módulo '{0}', padrão correspondido '{1}'.",
   "Module_name_0_was_not_resolved_6090": "======== Nome do módulo '{0}' não foi resolvido. ========",
   "Module_name_0_was_successfully_resolved_to_1_6089": "======== Nome do módulo '{0}' foi resolvido com sucesso '{1}'. ========",
   "Module_name_0_was_successfully_resolved_to_1_with_Package_ID_2_6218": "======== O nome do módulo '{0}' foi resolvido com sucesso para '{1}' com a ID do Pacote '{2}'. ========",
   "Module_resolution_kind_is_not_specified_using_0_6088": "Resolução de tipo não foi especificado, usando '{0}'.",
   "Module_resolution_using_rootDirs_has_failed_6111": "Falha na resolução de módulo usando 'rootDirs'.",
+  "Modules_6244": "Módulos",
   "Move_labeled_tuple_element_modifiers_to_labels_95117": "Mover os modificadores de elemento de tupla rotulados para rótulos",
   "Move_to_a_new_file_95049": "Mover para um novo arquivo",
   "Multiple_consecutive_numeric_separators_are_not_permitted_6189": "Não são permitidos vários separadores numéricos consecutivos.",
@@ -784,11 +930,14 @@
   "Name_is_not_valid_95136": "Nome inválido",
   "Named_property_0_of_types_1_and_2_are_not_identical_2319": "As propriedades com nome '{0}' dos tipos '{1}' e '{2}' não são idênticas.",
   "Namespace_0_has_no_exported_member_1_2694": "O namespace '{0}' não tem o membro exportado '{1}'.",
+  "Namespace_must_be_given_a_name_1437": "O Namespace deve receber um nome.",
+  "Namespace_name_cannot_be_0_2819": "O nome do Namespace não pode ser '{0}'.",
   "No_base_constructor_has_the_specified_number_of_type_arguments_2508": "Nenhum construtor base tem o número especificado de argumentos de tipo.",
   "No_constituent_of_type_0_is_callable_2755": "Nenhum membro do tipo '{0}' pode ser chamado.",
   "No_constituent_of_type_0_is_constructable_2759": "Nenhum membro do tipo '{0}' é construído.",
   "No_index_signature_with_a_parameter_of_type_0_was_found_on_type_1_7054": "Nenhuma assinatura de índice com um parâmetro do tipo '{0}' foi localizada no tipo '{1}'.",
   "No_inputs_were_found_in_config_file_0_Specified_include_paths_were_1_and_exclude_paths_were_2_18003": "Nenhuma entrada foi localizada no arquivo de configuração '{0}'. Os caminhos especificados foram 'incluir' '{1}' e 'excluir' '{2}'.",
+  "No_longer_supported_In_early_versions_manually_set_the_text_encoding_for_reading_files_6608": "Não há mais suporte. Em versões iniciais, defina manualmente a codificação de texto para a leitura de arquivos.",
   "No_overload_expects_0_arguments_but_overloads_do_exist_that_expect_either_1_or_2_arguments_2575": "Nenhuma sobrecarga espera argumentos {0}, mas existem sobrecargas que esperam argumentos {1} ou {2}.",
   "No_overload_expects_0_type_arguments_but_overloads_do_exist_that_expect_either_1_or_2_type_arguments_2743": "Nenhuma sobrecarga espera argumentos do tipo {0}, mas existem sobrecargas que esperam argumentos do tipo {1} ou {2}.",
   "No_overload_matches_this_call_2769": "Nenhuma sobrecarga corresponde a esta chamada.",
@@ -802,7 +951,6 @@
   "Not_all_code_paths_return_a_value_7030": "Nem todos os caminhos de código retornam um valor.",
   "Not_all_constituents_of_type_0_are_callable_2756": "Nem todos os membros do tipo '{0}' podem ser chamados.",
   "Not_all_constituents_of_type_0_are_constructable_2760": "Nem todos os membros do tipo '{0}' são construídos.",
-  "Numeric_index_type_0_is_not_assignable_to_string_index_type_1_2413": "O tipo de índice numérico '{0}' não é atribuível ao tipo de índice de cadeia de caracteres '{1}'.",
   "Numeric_literals_with_absolute_values_equal_to_2_53_or_greater_are_too_large_to_be_represented_accur_80008": "Os literais numéricos com valores absolutos iguais a 2^53 ou mais são muito grandes para serem representados precisamente como inteiros.",
   "Numeric_separators_are_not_allowed_here_6188": "Separadores numéricos não são permitidos aqui.",
   "Object_is_of_type_unknown_2571": "O objeto é do tipo 'desconhecido'.",
@@ -826,9 +974,11 @@
   "Only_identifiers_Slashqualified_names_with_optional_type_arguments_are_currently_supported_in_a_clas_9002": "Somente os identificadores/nomes qualificados com argumentos de tipo opcionais tem suporte atualmente nas cláusulas de classe 'extends'.",
   "Only_named_exports_may_use_export_type_1383": "Somente as exportações nomeadas podem usar 'export type'.",
   "Only_numeric_enums_can_have_computed_members_but_this_expression_has_type_0_If_you_do_not_need_exhau_18033": "Somente enumerações numéricas podem ter membros computados, mas esta expressão tem o tipo '{0}'. Se você não precisar de verificações de exaustão, considere o uso de um literal de objeto.",
+  "Only_output_d_ts_files_and_not_JavaScript_files_6623": "Gerar somente arquivos .d.ts e não arquivos JavaScript.",
   "Only_public_and_protected_methods_of_the_base_class_are_accessible_via_the_super_keyword_2340": "Somente métodos protegidos e públicos da classe base são acessíveis pela palavra-chave 'super'.",
   "Operator_0_cannot_be_applied_to_type_1_2736": "O operador '{0}' não pode ser aplicado ao tipo '{1}'.",
   "Operator_0_cannot_be_applied_to_types_1_and_2_2365": "O operador '{0}' não pode ser aplicado aos tipos '{1}' e '{2}'.",
+  "Opt_a_project_out_of_multi_project_reference_checking_when_editing_6619": "Recusar um projeto de verificação de referência de multiprojeto ao editar.",
   "Option_0_can_only_be_specified_in_tsconfig_json_file_or_set_to_false_or_null_on_command_line_6230": "A opção '{0}' somente pode ser especificada no arquivo 'tsconfig.json' ou definida como 'false' ou 'null' na linha de comando.",
   "Option_0_can_only_be_specified_in_tsconfig_json_file_or_set_to_null_on_command_line_6064": "A opção '{0}' somente pode ser especificada no arquivo 'tsconfig.json' ou definida como 'null' na linha de comando.",
   "Option_0_can_only_be_used_when_either_option_inlineSourceMap_or_option_sourceMap_is_provided_5051": "A opção '{0} só pode ser usada quando qualquer uma das opções '--inlineSourceMap' ou '--sourceMap' é fornecida.",
@@ -839,16 +989,22 @@
   "Option_0_cannot_be_specified_without_specifying_option_1_or_option_2_5069": "A opção '{0}' não pode ser especificada sem a especificação da opção '{1}' ou '{2}'.",
   "Option_0_should_have_array_of_strings_as_a_value_6103": "A opção '{0}' deve ter matriz de cadeias de um valor.",
   "Option_build_must_be_the_first_command_line_argument_6369": "A opção '--build' precisa ser o primeiro argumento da linha de comando.",
-  "Option_incremental_can_only_be_specified_using_tsconfig_emitting_to_single_file_or_when_option_tsBui_5074": "A opção '--incremental' só pode ser especificada usando tsconfig, emitindo para um único arquivo ou quando a opção '--tsBuildInfoFile' é especificada.",
+  "Option_incremental_can_only_be_specified_using_tsconfig_emitting_to_single_file_or_when_option_tsBui_5074": "A opção '--incremental' só pode ser especificada usando tsconfig, emitindo para um arquivo único ou quando a opção '--tsBuildInfoFile' for especificada.",
   "Option_isolatedModules_can_only_be_used_when_either_option_module_is_provided_or_option_target_is_ES_5047": "A opção 'isolatedModules' só pode ser usada quando nenhuma opção de '--module' for fornecida ou a opção 'target' for 'ES2015' ou superior.",
+  "Option_preserveConstEnums_cannot_be_disabled_when_isolatedModules_is_enabled_5091": "A opção 'preserveConstEnums' não pode ser desabilitada quando 'isolatedModules' está habilitada.",
   "Option_project_cannot_be_mixed_with_source_files_on_a_command_line_5042": "A opção 'project' não pode ser mesclada com arquivos de origem em uma linha de comando.",
   "Option_resolveJsonModule_can_only_be_specified_when_module_code_generation_is_commonjs_amd_es2015_or_5071": "A opção '--resolveJsonModule' só pode ser especificada quando a geração de código de módulo é 'commonjs', 'amd', 'es2015' ou 'esNext'.",
   "Option_resolveJsonModule_cannot_be_specified_without_node_module_resolution_strategy_5070": "A opção '--resolveJsonModule' não pode ser especificada sem a estratégia de resolução de módulo de 'nó'.",
   "Options_0_and_1_cannot_be_combined_6370": "As opções '{0}' e '{1}' não podem ser combinadas.",
   "Options_Colon_6027": "Opções:",
+  "Output_Formatting_6256": "Formatação da Saída",
+  "Output_compiler_performance_information_after_building_6615": "Gerar informações de desempenho do compilador após a criação.",
   "Output_directory_for_generated_declaration_files_6166": "Diretório de saída para os arquivos de declaração gerados.",
   "Output_file_0_from_project_1_does_not_exist_6309": "O arquivo de saída '{0}' do projeto '{1}' não existe",
   "Output_file_0_has_not_been_built_from_source_file_1_6305": "O arquivo de saída '{0}' não foi compilado do arquivo de origem '{1}'.",
+  "Output_from_referenced_project_0_included_because_1_specified_1411": "Saída do projeto referenciado '{0}' incluída porque '{1}' está especificado",
+  "Output_from_referenced_project_0_included_because_module_is_specified_as_none_1412": "Saída do projeto referenciado '{0}' incluída porque '--module' está especificado como 'none'",
+  "Output_more_detailed_compiler_performance_information_after_building_6632": "Gerar informações de desempenho do compilador mais detalhadas após a criação.",
   "Overload_0_of_1_2_gave_the_following_error_2772": "A sobrecarga {0} de {1}, '{2}', gerou o seguinte erro.",
   "Overload_signatures_must_all_be_abstract_or_non_abstract_2512": "Assinaturas de sobrecarga devem todas ser abstratas ou não abstratas.",
   "Overload_signatures_must_all_be_ambient_or_non_ambient_2384": "Todas as assinaturas de sobrecarga devem ser ambiente ou não ambiente.",
@@ -892,18 +1048,25 @@
   "Parameter_type_of_public_static_setter_0_from_exported_class_has_or_is_using_name_1_from_private_mod_4034": "O tipo de parâmetro do setter estático público '{0}' da classe exportada tem ou está usando o nome '{1}' do módulo privado '{2}'.",
   "Parameter_type_of_public_static_setter_0_from_exported_class_has_or_is_using_private_name_1_4035": "O tipo de parâmetro do setter estático público '{0}' da classe exportada tem ou está usando o nome privado '{1}'.",
   "Parse_in_strict_mode_and_emit_use_strict_for_each_source_file_6141": "Analisar em modo estrito e emitir \"usar estrito\" para cada arquivo de origem.",
+  "Part_of_files_list_in_tsconfig_json_1409": "Parte da lista 'files' no tsconfig.json",
   "Pattern_0_can_have_at_most_one_Asterisk_character_5061": "O padrão '{0}' pode ter no máximo um caractere '*'.",
   "Performance_timings_for_diagnostics_or_extendedDiagnostics_are_not_available_in_this_session_A_nativ_6386": "Os tempos de desempenho de '--diagnostics' ou '--extendedDiagnostics' não estão disponíveis nesta sessão. Não foi possível encontrar uma implementação nativa da API de Desempenho Web.",
+  "Platform_specific_6912": "Específico da plataforma",
   "Prefix_0_with_an_underscore_90025": "Prefixo '{0}' com um sublinhado",
   "Prefix_all_incorrect_property_declarations_with_declare_95095": "Prefixar todas as declarações de propriedade incorretas com 'declare'",
   "Prefix_all_unused_declarations_with_where_possible_95025": "Prefixar com '_' todas as declarações não usadas quando possível",
   "Prefix_with_declare_95094": "Prefixar com 'declare'",
+  "Print_all_of_the_files_read_during_the_compilation_6653": "Imprimir todos os arquivos lidos durante a compilação.",
+  "Print_files_read_during_the_compilation_including_why_it_was_included_6631": "Arquivos de impressão lidos durante a compilação, incluindo o motivo de sua inclusão.",
+  "Print_names_of_files_and_the_reason_they_are_part_of_the_compilation_6505": "Imprima nomes de arquivos e o motivo pelo qual eles fazem parte da compilação.",
   "Print_names_of_files_part_of_the_compilation_6155": "Nomes de impressão das partes dos arquivos da compilação.",
   "Print_names_of_files_that_are_part_of_the_compilation_and_then_stop_processing_6503": "Imprima nomes de arquivos que fazem parte da compilação e, em seguida, interrompa o processamento.",
   "Print_names_of_generated_files_part_of_the_compilation_6154": "Nomes de impressão das partes dos arquivos gerados da compilação.",
   "Print_the_compiler_s_version_6019": "Imprima a versão do compilador.",
   "Print_the_final_configuration_instead_of_building_1350": "Imprima a configuração final em vez de compilar.",
+  "Print_the_names_of_emitted_files_after_a_compilation_6652": "Imprimir os nomes dos arquivos emitidos após uma compilação.",
   "Print_this_message_6017": "Imprima esta mensagem.",
+  "Private_accessor_was_defined_without_a_getter_2806": "O acessador privado foi definido sem um getter.",
   "Private_identifiers_are_not_allowed_in_variable_declarations_18029": "Identificadores privados não são permitidos em declarações de variáveis.",
   "Private_identifiers_are_not_allowed_outside_class_bodies_18016": "Identificadores privados não são permitidos fora dos corpos de classe.",
   "Private_identifiers_are_only_available_when_targeting_ECMAScript_2015_and_higher_18028": "Identificadores privados só estão disponíveis ao direcionar para o ECMAScript 2015 ou superior.",
@@ -911,6 +1074,7 @@
   "Private_or_protected_member_0_cannot_be_accessed_on_a_type_parameter_4105": "O membro privado ou protegido '{0}' não pode ser acessado em um parâmetro de tipo.",
   "Project_0_can_t_be_built_because_its_dependency_1_has_errors_6363": "O projeto '{0}' não pode ser compilado porque sua dependência '{1}' tem erros",
   "Project_0_can_t_be_built_because_its_dependency_1_was_not_built_6383": "O projeto '{0}' não pode ser criado porque sua dependência '{1}' não foi criada",
+  "Project_0_is_being_forcibly_rebuilt_6388": "O projeto '{0}' está sendo reconstruído forçadamente",
   "Project_0_is_out_of_date_because_its_dependency_1_is_out_of_date_6353": "O projeto '{0}' está desatualizado porque sua dependência '{1}' está desatualizada",
   "Project_0_is_out_of_date_because_oldest_output_1_is_older_than_newest_input_2_6350": "O projeto '{0}' está desatualizado porque a saída mais antiga '{1}' é mais antiga que a entrada mais recente '{2}'",
   "Project_0_is_out_of_date_because_output_file_1_does_not_exist_6352": "O projeto '{0}' está desatualizado porque o arquivo de saída '{1}' não existe",
@@ -920,14 +1084,18 @@
   "Project_0_is_up_to_date_because_newest_input_1_is_older_than_oldest_output_2_6351": "O projeto '{0}' está atualizado porque a entrada mais recente '{1}' é mais antiga que a saída mais antiga '{2}'",
   "Project_0_is_up_to_date_with_d_ts_files_from_its_dependencies_6354": "O projeto '{0}' está atualizado com os arquivos .d.ts de suas dependências",
   "Project_references_may_not_form_a_circular_graph_Cycle_detected_Colon_0_6202": "Referências de projeto não podem formar um gráfico circular. Ciclo detectado: {0}",
+  "Projects_6255": "Projetos",
   "Projects_in_this_build_Colon_0_6355": "Projetos neste build: {0}",
   "Projects_to_reference_6300": "Projetos a serem referenciados",
+  "Property_0_cannot_have_an_initializer_because_it_is_marked_abstract_1267": "A propriedade '{0}' não pode ter um inicializador, pois está marcado como abstrato.",
   "Property_0_comes_from_an_index_signature_so_it_must_be_accessed_with_0_4111": "A propriedade '{0}' vem de uma assinatura de índice, portanto, ela precisa ser acessada com ['{0}'].",
   "Property_0_does_not_exist_on_const_enum_1_2479": "A propriedade '{0}' não existe na enumeração 'const' '{1}'.",
   "Property_0_does_not_exist_on_type_1_2339": "A propriedade '{0}' não existe no tipo '{1}'.",
   "Property_0_does_not_exist_on_type_1_Did_you_mean_2_2551": "A propriedade '{0}' não existe no tipo '{1}'. Você quis dizer '{2}'?",
   "Property_0_does_not_exist_on_type_1_Did_you_mean_to_access_the_static_member_2_instead_2576": "A propriedade '{0}' não existe no tipo '{1}'. Você queria acessar o membro estático '{2}'?",
-  "Property_0_does_not_exist_on_type_1_Do_you_need_to_change_your_target_library_Try_changing_the_lib_c_2550": "A propriedade '{0}' não existe no tipo '{1}'. Você precisa alterar sua biblioteca de destino? Tente alterar a opção `lib` do compilador para '{2}' ou posterior.",
+  "Property_0_does_not_exist_on_type_1_Do_you_need_to_change_your_target_library_Try_changing_the_lib_c_2550": "A propriedade '{0}' não existe no tipo '{1}'. Você precisa alterar sua biblioteca de destino? Tente alterar a opção 'lib' do compilador para '{2}' ou posterior.",
+  "Property_0_does_not_exist_on_type_1_Try_changing_the_lib_compiler_option_to_include_dom_2812": "A propriedade '{0}' não existe no tipo '{1}'. Tente alterar a opção de compilador 'lib' para incluir 'dom'.",
+  "Property_0_has_no_initializer_and_is_not_definitely_assigned_in_a_class_static_block_2817": "A propriedade “{0}” não tem nenhum inicializador e não está definitivamente atribuída no bloco estático de classe.",
   "Property_0_has_no_initializer_and_is_not_definitely_assigned_in_the_constructor_2564": "A propriedade '{0}' não tem nenhum inicializador e não está definitivamente atribuída no construtor.",
   "Property_0_implicitly_has_type_any_because_its_get_accessor_lacks_a_return_type_annotation_7033": "A propriedade '{0}' tem implicitamente o tipo 'any' porque o acessador get não tem uma anotação de tipo de retorno.",
   "Property_0_implicitly_has_type_any_because_its_set_accessor_lacks_a_parameter_type_annotation_7032": "A propriedade '{0}' tem implicitamente o tipo 'any' porque o acessador set não tem uma anotação de tipo de parâmetro.",
@@ -945,18 +1113,19 @@
   "Property_0_is_optional_in_type_1_but_required_in_type_2_2327": "A propriedade '{0}' é opcional no tipo '{1}', mas obrigatória no tipo '{2}'.",
   "Property_0_is_private_and_only_accessible_within_class_1_2341": "A propriedade '{0}' é particular e somente é acessível na classe '{1}'.",
   "Property_0_is_private_in_type_1_but_not_in_type_2_2325": "A propriedade '{0}' é particular no tipo '{1}', mas não no tipo '{2}'.",
-  "Property_0_is_protected_and_only_accessible_through_an_instance_of_class_1_2446": "A propriedade '{0}' é protegida e somente é acessível por meio de uma instância da classe '{1}'.",
+  "Property_0_is_protected_and_only_accessible_through_an_instance_of_class_1_This_is_an_instance_of_cl_2446": "A propriedade '{0}' está protegida e só pode ser acessada por meio de uma instância da classe '{1}'. Esta é uma instância da classe '{2}'.",
   "Property_0_is_protected_and_only_accessible_within_class_1_and_its_subclasses_2445": "A propriedade '{0}' é protegida e somente é acessível na classe '{1}' e em suas subclasses.",
   "Property_0_is_protected_but_type_1_is_not_a_class_derived_from_2_2443": "A propriedade '{0}' é protegida, mas o tipo '{1}' não é uma classe derivada de '{2}'.",
   "Property_0_is_protected_in_type_1_but_public_in_type_2_2444": "A propriedade '{0}' é protegida no tipo '{1}', mas pública no tipo '{2}'.",
   "Property_0_is_used_before_being_assigned_2565": "A propriedade '{0}' é usada antes de ser atribuída.",
   "Property_0_is_used_before_its_initialization_2729": "A propriedade '{0}' é usada antes da inicialização.",
+  "Property_0_may_not_be_used_in_a_static_property_s_initializer_in_the_same_class_when_target_is_esnex_2810": "A propriedade '{0}' não pode ser usada em um inicializador de propriedade estática na mesma classe quando 'target' é 'esnext' e ' useDefineForClassFields' é 'false'.",
+  "Property_0_may_not_exist_on_type_1_Did_you_mean_2_2568": "A propriedade pode não existir '{0}' no tipo '{1}'. Você quis dizer '{2}'?",
   "Property_0_of_JSX_spread_attribute_is_not_assignable_to_target_property_2606": "A propriedade \"{0}\" do atributo de espalhamento JSX não pode ser atribuída à propriedade de destino.",
   "Property_0_of_exported_class_expression_may_not_be_private_or_protected_4094": "A propriedade '{0}' da expressão de classe exportada não pode ser privada nem protegida.",
   "Property_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2_4032": "A propriedade '{0}' da interface exportada tem ou está usando o nome '{1}' do módulo particular '{2}'.",
   "Property_0_of_exported_interface_has_or_is_using_private_name_1_4033": "A propriedade '{0}' da interface exportada tem ou está usando o nome particular '{1}'.",
-  "Property_0_of_type_1_is_not_assignable_to_numeric_index_type_2_2412": "A propriedade '{0}' do tipo '{1}' não é atribuível ao tipo de índice numérico '{2}'.",
-  "Property_0_of_type_1_is_not_assignable_to_string_index_type_2_2411": "A propriedade '{0}' do tipo '{1}' não é atribuível ao tipo de índice de cadeia de caracteres '{2}'.",
+  "Property_0_of_type_1_is_not_assignable_to_2_index_type_3_2411": "A propriedade '{0}' do tipo '{1}' não pode ser atribuída ao '{2}' tipo de índice '{3}'.",
   "Property_0_was_also_declared_here_2733": "A propriedade '{0}' também foi declarada aqui.",
   "Property_0_will_overwrite_the_base_property_in_1_If_this_is_intentional_add_an_initializer_Otherwise_2612": "A propriedade '{0}' substituirá a propriedade base em '{1}'. Se isso for intencional, adicione um inicializador. Caso contrário, adicione um modificador 'declare' ou remova a declaração redundante.",
   "Property_assignment_expected_1136": "Atribuição de propriedade esperada.",
@@ -978,12 +1147,18 @@
   "Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4027": "A propriedade estática pública '{0}' da classe exportada tem ou está usando o nome '{1}' do módulo particular '{2}'.",
   "Public_static_property_0_of_exported_class_has_or_is_using_private_name_1_4028": "A propriedade estática pública '{0}' da classe exportada tem ou está usando o nome particular '{1}'.",
   "Qualified_name_0_is_not_allowed_without_a_leading_param_object_1_8032": "O nome qualificado '{0}' não é permitido sem um '@param {object} {1}' à esquerda.",
+  "Raise_an_error_when_a_function_parameter_isn_t_read_6676": "Gerar um erro quando um parâmetro de função não for lido",
   "Raise_error_on_expressions_and_declarations_with_an_implied_any_type_6052": "Gerar erro em expressões e declarações com um tipo 'any' implícito.",
   "Raise_error_on_this_expressions_with_an_implied_any_type_6115": "Gerar erro em expressões 'this' com um tipo 'any' implícito.",
   "Re_exporting_a_type_when_the_isolatedModules_flag_is_provided_requires_using_export_type_1205": "Exportar novamente um tipo quando o sinalizador '--isolatedModules' é fornecido requer o uso de 'export type'.",
   "Redirect_output_structure_to_the_directory_6006": "Redirecione a estrutura de saída para o diretório.",
+  "Reduce_the_number_of_projects_loaded_automatically_by_TypeScript_6617": "Reduzir o número de projetos carregados automaticamente pelo TypeScript.",
   "Referenced_project_0_may_not_disable_emit_6310": "O projeto referenciado '{0}' pode não desabilitar a emissão.",
   "Referenced_project_0_must_have_setting_composite_Colon_true_6306": "O projeto referenciado '{0}' deve ter a configuração de \"composite\": true.",
+  "Referenced_via_0_from_file_1_1400": "Referenciado via '{0}' do arquivo '{1}'",
+  "Remove_a_list_of_directories_from_the_watch_process_6628": "Remova uma lista de diretórios do processo de inspeção.",
+  "Remove_a_list_of_files_from_the_watch_mode_s_processing_6629": "Remover uma lista de arquivos do processamento do modo de inspeção.",
+  "Remove_all_unnecessary_override_modifiers_95163": "Remover todos os modificadores 'override' desnecessários",
   "Remove_all_unnecessary_uses_of_await_95087": "Remover todos os usos desnecessários de 'await'",
   "Remove_all_unreachable_code_95051": "Remover todo o código inacessível",
   "Remove_all_unused_labels_95054": "Remover todos os rótulos não utilizados",
@@ -991,8 +1166,10 @@
   "Remove_braces_from_arrow_function_95060": "Remover chaves da função de seta",
   "Remove_braces_from_arrow_function_body_95112": "Remover as chaves do corpo de função de seta",
   "Remove_import_from_0_90005": "Remover importação de '{0}'",
+  "Remove_override_modifier_95161": "Remover o modificador 'override'",
   "Remove_parentheses_95126": "Remover os parênteses",
   "Remove_template_tag_90011": "Remover marca de modelo",
+  "Remove_the_20mb_cap_on_total_source_code_size_for_JavaScript_files_in_the_TypeScript_language_server_6618": "Remover o limite de 20MB no tamanho total do código-fonte para arquivos JavaScript no servidor de linguagem TypeScript.",
   "Remove_type_parameters_90012": "Remover parâmetros de tipo",
   "Remove_unnecessary_await_95086": "Remover 'await' desnecessário",
   "Remove_unreachable_code_95050": "Remover código inacessível",
@@ -1010,14 +1187,16 @@
   "Report_errors_in_js_files_8019": "Relatar erros em arquivos .js.",
   "Report_errors_on_unused_locals_6134": "Relatar erros nos locais não utilizados.",
   "Report_errors_on_unused_parameters_6135": "Relatar erros nos parâmetros não utilizados.",
-  "Require_undeclared_properties_from_index_signatures_to_use_element_accesses_6803": "Exigir que as propriedades não declaradas de assinaturas de índice usem acessos de elemento.",
+  "Require_undeclared_properties_from_index_signatures_to_use_element_accesses_6717": "Exigir que as propriedades não declaradas de assinaturas de índice usem acessos de elemento.",
   "Required_type_parameters_may_not_follow_optional_type_parameters_2706": "Os parâmetros de tipo necessários podem não seguir os parâmetros de tipo opcionais.",
   "Resolution_for_module_0_was_found_in_cache_from_location_1_6147": "A resolução para o módulo '{0}' foi encontrada no cache do local '{1}'.",
+  "Resolution_for_type_reference_directive_0_was_found_in_cache_from_location_1_6241": "A resolução para a diretiva de referência de tipo '{0}' foi encontrada no cache a partir do local '{1}'.",
   "Resolve_keyof_to_string_valued_property_names_only_no_numbers_or_symbols_6195": "Resolva 'keyof' somente para nomes de propriedades com valores de cadeia de caracteres (sem números nem símbolos).",
   "Resolving_from_node_modules_folder_6118": "Resolvendo na pasta node_modules...",
   "Resolving_module_0_from_1_6086": "======== Resolvendo módulo '{0}' de '{1}'. ========",
   "Resolving_module_name_0_relative_to_base_url_1_2_6094": "Resolvendo nome de módulo '{0}' relativo à URL base '{1}' - '{2}'.",
   "Resolving_real_path_for_0_result_1_6130": "Resolvendo o caminho real de '{0}', resultado '{1}'.",
+  "Resolving_type_reference_directive_0_containing_file_1_6242": "======== Resolvendo a diretiva de tipo de referência '{0}', contendo o arquivo '{1}'. ========",
   "Resolving_type_reference_directive_0_containing_file_1_root_directory_2_6116": "======== Resolvendo diretiva de referência de tipo '{0}', arquivo contido '{1}', diretório raiz '{2}'. ========",
   "Resolving_type_reference_directive_0_containing_file_1_root_directory_not_set_6123": "======== Resolvendo diretiva de referência de tipo '{0}', arquivo contido '{1}', diretório raiz não configurado. ========",
   "Resolving_type_reference_directive_0_containing_file_not_set_root_directory_1_6127": "======== Resolvendo diretiva de referência de tipo '{0}', arquivo contido não configurado, diretório raiz '{1}'. ========",
@@ -1029,6 +1208,7 @@
   "Rest_signatures_are_incompatible_2572": "As assinaturas de REST são incompatíveis.",
   "Rest_types_may_only_be_created_from_object_types_2700": "Os tipos de rest podem ser criado somente de tipos de objeto.",
   "Return_type_annotation_circularly_references_itself_2577": "A anotação de tipo de retorno faz referência circular a si mesma.",
+  "Return_type_must_be_inferred_from_a_function_95149": "O tipo de retorno precisa ser inferido de uma função",
   "Return_type_of_call_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1_4046": "O tipo de retorno da assinatura de chamada da interface exportada tem ou está usando o nome '{0}' do módulo particular '{1}'.",
   "Return_type_of_call_signature_from_exported_interface_has_or_is_using_private_name_0_4047": "O tipo de retorno da assinatura de chamada da interface exportada tem ou está usando o nome particular '{0}'.",
   "Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_name_0_from_private_mod_4044": "O tipo de retorno da assinatura de construtor da interface exportada tem ou está usando o nome '{0}' do módulo particular '{1}'.",
@@ -1053,15 +1233,31 @@
   "Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_external_module__4050": "O tipo de retorno do método estático público da classe exportada tem ou está usando o nome '{0}' do módulo externo {1}, mas não pode ser nomeado.",
   "Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_private_module_1_4051": "O tipo de retorno do método estático público da classe exportada tem ou está usando o nome '{0}' do módulo particular '{1}'.",
   "Return_type_of_public_static_method_from_exported_class_has_or_is_using_private_name_0_4052": "O tipo de retorno do método estático público da classe exportada tem ou está usando o nome particular '{0}'.",
-  "Reusing_module_resolutions_originating_in_0_since_resolutions_are_unchanged_from_old_program_6184": "Reutilizando resoluções de módulo originados em '{0}', já que as resoluções do programa antigo estão inalteradas.",
-  "Reusing_resolution_of_module_0_to_file_1_from_old_program_6183": "Reutilizando a resolução do módulo '{0}' para o arquivo '{1}' do programa antigo.",
+  "Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_not_resolved_6395": "Reutilizando a resolução do módulo '{0}' de '{1}' encontrado no cache a partir da localização '{2}', não foi resolvido.",
+  "Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_6393": "Reutilizando a resolução do módulo '{0}' de '{1}' encontrado no cache de localização '{2}', foi resolvido com sucesso para '{3}'.",
+  "Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_6394": "Reutilizando a resolução do módulo '{0}' de '{1}' encontrado no cache a partir da localização '{2}', foi resolvido com sucesso para '{3}' com ID do Pacote '{4}'.",
+  "Reusing_resolution_of_module_0_from_1_of_old_program_it_was_not_resolved_6389": "Reutilizando a resolução do módulo '{0}' de '{1}' do antigo programa, não foi resolvido.",
+  "Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2_6183": "Reutilizando a resolução do módulo '{0}' de '{1}' do antigo programa, foi resolvido com sucesso para '{2}'.",
+  "Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2_with_Package__6184": "Reutilizando a resolução do módulo '{0}' de '{1}' do antigo programa, foi resolvido com sucesso para '{2}' com a ID do pacote '{3}'.",
+  "Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_not_re_6398": "Reutilizando a resolução do tipo diretiva de referência '{0}' de '{1}' encontrado no cache de localização '{2}', não foi resolvido.",
+  "Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_succes_6396": "Reutilizando a resolução do tipo diretiva de referência '{0}' de '{1}' encontrado no cache de localização '{2}', foi resolvido com sucesso para '{3}'.",
+  "Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_succes_6397": "Reutilizando a resolução do tipo diretiva de referência '{0}' de '{1}' encontrado no cache de localização '{2}', foi resolvido com sucesso '{3}' com ID do Pacote '{4}'.",
+  "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_not_resolved_6392": "Reutilizando a resolução do tipo diretiva de referência '{0}' de '{1}' do antigo programa, não foi resolvido.",
+  "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved__6390": "Reutilizando a resolução do tipo diretiva de referência '{0}' de '{1}' do antigo programa, foi resolvido com sucesso para '{2}'.",
+  "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved__6391": "Reutilizando a resolução do tipo diretriz de referência '{0}' de '{1}' do antigo programa, foi resolvido com sucesso para '{2}' com ID do Pacote '{3}'.",
   "Rewrite_all_as_indexed_access_types_95034": "Reescrever tudo como tipos de acesso indexados",
   "Rewrite_as_the_indexed_access_type_0_90026": "Reescrever como o tipo de acesso indexado '{0}'",
   "Root_directory_cannot_be_determined_skipping_primary_search_paths_6122": "Diretório raiz não pode ser determinado, ignorando caminhos de pesquisa primários.",
+  "Root_file_specified_for_compilation_1427": "Arquivo raiz especificado para compilação",
   "STRATEGY_6039": "ESTRATÉGIA",
+  "Save_tsbuildinfo_files_to_allow_for_incremental_compilation_of_projects_6642": "Salvar arquivos .tsbuildinfo para permitir a compilação incremental de projetos.",
   "Scoped_package_detected_looking_in_0_6182": "Pacote com escopo detectado, procurando no '{0}'",
+  "Selection_is_not_a_valid_statement_or_statements_95155": "A seleção não é uma instrução ou instruções válidas",
   "Selection_is_not_a_valid_type_node_95133": "A seleção não é um nó de tipo válido",
+  "Set_the_JavaScript_language_version_for_emitted_JavaScript_and_include_compatible_library_declaratio_6705": "Definir a versão do idioma do JavaScript para o JavaScript emitido e incluir as declarações de biblioteca compatíveis.",
+  "Set_the_language_of_the_messaging_from_TypeScript_This_does_not_affect_emit_6654": "Definir o idioma das mensagens do TypeScript. Isso não afeta a emissão.",
   "Set_the_module_option_in_your_configuration_file_to_0_95099": "Defina a opção 'module' no arquivo de configuração para '{0}'",
+  "Set_the_newline_character_for_emitting_files_6659": "Definir o caractere de nova linha para a emissão de arquivos.",
   "Set_the_target_option_in_your_configuration_file_to_0_95098": "Defina a opção 'target' no arquivo de configuração para '{0}'",
   "Setters_cannot_return_a_value_2408": "Setters não podem retornar um valor.",
   "Show_all_compiler_options_6169": "Mostrar todas as opções do compilador.",
@@ -1069,31 +1265,63 @@
   "Show_verbose_diagnostic_information_6150": "Mostras as informações detalhadas de diagnóstico.",
   "Show_what_would_be_built_or_deleted_if_specified_with_clean_6367": "Mostrar o que seria compilado (ou excluído, se especificado com '--clean')",
   "Signature_0_must_be_a_type_predicate_1224": "A assinatura '{0}' deve ser um predicado de tipo.",
+  "Skip_type_checking_all_d_ts_files_6693": "Ignorar verificação de tipo de todos os arquivos .d.ts.",
+  "Skip_type_checking_d_ts_files_that_are_included_with_TypeScript_6692": "Ignorar verificação de tipo de arquivos .d.ts que estão incluídos com TypeScript.",
   "Skip_type_checking_of_declaration_files_6012": "Ignorar a verificação de tipo dos arquivos de declaração.",
   "Skipping_build_of_project_0_because_its_dependency_1_has_errors_6362": "Ignorando o build do projeto '{0}' porque a dependência '{1}' tem erros",
   "Skipping_build_of_project_0_because_its_dependency_1_was_not_built_6382": "Ignorando o build do projeto '{0}' porque a dependência '{1}' não foi criada",
-  "Source_Map_Options_6175": "Opções do Sourcemap",
+  "Source_from_referenced_project_0_included_because_1_specified_1414": "Origem do projeto referenciado '{0}' incluída porque '{1}' está especificado",
+  "Source_from_referenced_project_0_included_because_module_is_specified_as_none_1415": "Origem do projeto referenciado '{0}' incluída porque '--module' está especificado como 'none'",
   "Source_has_0_element_s_but_target_allows_only_1_2619": "A origem tem {0} elementos, mas o destino permite somente {1}.",
   "Source_has_0_element_s_but_target_requires_1_2618": "A origem tem {0} elementos, mas o destino exige {1}.",
+  "Source_provides_no_match_for_required_element_at_position_0_in_target_2623": "A fonte não fornece nenhuma correspondência para o elemento necessário na posição {0} no destino.",
+  "Source_provides_no_match_for_variadic_element_at_position_0_in_target_2624": "A fonte não fornece nenhuma correspondência para o elemento variádico na posição {0} no destino.",
   "Specialized_overload_signature_is_not_assignable_to_any_non_specialized_signature_2382": "A assinatura de sobrecarga especializada não pode ser atribuída a qualquer assinatura não especializada.",
   "Specifier_of_dynamic_import_cannot_be_spread_element_1325": "O especificador de importação dinâmica não pode ser o elemento de difusão.",
-  "Specify_ECMAScript_target_version_Colon_ES3_default_ES5_ES2015_ES2016_ES2017_ES2018_ES2019_ES2020_or_6015": "Especifique a versão de destino ECMAScript: 'ES3' (padrão), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019', 'ES2020' ou 'ESNEXT'.",
-  "Specify_JSX_code_generation_Colon_preserve_react_native_or_react_6080": "Especifique a geração de código JSX: 'preserve', 'react-native' ou 'react'.",
-  "Specify_emit_Slashchecking_behavior_for_imports_that_are_only_used_for_types_1368": "Especificar o comportamento de emissão/verificação para importações que são usadas somente para tipos",
+  "Specify_ECMAScript_target_version_6015": "Especifique a versão de destino do ECMAScript.",
+  "Specify_JSX_code_generation_6080": "Especifique a geração do código JSX.",
+  "Specify_a_file_that_bundles_all_outputs_into_one_JavaScript_file_If_declaration_is_true_also_designa_6679": "Especificar um arquivo que agrupa todas as saídas em um arquivo JavaScript. Se 'declaração' for true, também designará um arquivo que incluirá todas as saídas .d.ts.",
+  "Specify_a_list_of_glob_patterns_that_match_files_to_be_included_in_compilation_6641": "Especificar uma lista de padrões glob que correspondam aos arquivos a serem incluídos na compilação.",
+  "Specify_a_list_of_language_service_plugins_to_include_6681": "Especificar uma lista de plug-ins de serviço de linguagem a incluir.",
+  "Specify_a_set_of_bundled_library_declaration_files_that_describe_the_target_runtime_environment_6651": "Especificar um conjunto de arquivos de declaração de biblioteca empacotados que descreva o ambiente de tempo de runtime de destino.",
+  "Specify_a_set_of_entries_that_re_map_imports_to_additional_lookup_locations_6680": "Especificar um conjunto de entradas que remapeiem importações para locais de pesquisa adicionais.",
+  "Specify_an_array_of_objects_that_specify_paths_for_projects_Used_in_project_references_6687": "Especifique uma matriz de objetos que especificam caminhos para projetos. Usado em referências de projeto.",
+  "Specify_an_output_folder_for_all_emitted_files_6678": "Especificar uma pasta de saída para todos os arquivos emitidos.",
+  "Specify_emit_Slashchecking_behavior_for_imports_that_are_only_used_for_types_6718": "Especificar o comportamento de emissão/verificação para importações que são usadas somente para tipos",
   "Specify_file_to_store_incremental_compilation_information_6380": "Especificar arquivo para armazenar informações de compilação incremental",
+  "Specify_how_TypeScript_looks_up_a_file_from_a_given_module_specifier_6658": "Especifique como o TypeScript procura um arquivo de um determinado especificador de módulo.",
+  "Specify_how_directories_are_watched_on_systems_that_lack_recursive_file_watching_functionality_6714": "Especificar como os diretórios são observados nos sistemas que não têm a funcionalidade recursiva de inspeção de arquivo.",
+  "Specify_how_the_TypeScript_watch_mode_works_6715": "Especifique como funciona o modo de inspeção TypeScript.",
   "Specify_library_files_to_be_included_in_the_compilation_6079": "Especifique os arquivos de biblioteca a serem incluídos na compilação.",
-  "Specify_module_code_generation_Colon_none_commonjs_amd_system_umd_es2015_es2020_or_ESNext_6016": "Especifique a geração de código de módulo: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', 'es2020' ou 'ESNext'.",
+  "Specify_module_code_generation_6016": "Especifique a geração do código do módulo.",
   "Specify_module_resolution_strategy_Colon_node_Node_js_or_classic_TypeScript_pre_1_6_6069": "Especifique a estratégia de resolução de módulo: 'node' (Node.js) ou 'classic' (TypeScript pré-1.6).",
-  "Specify_strategy_for_creating_a_polling_watch_when_it_fails_to_create_using_file_system_events_Colon_6227": "Especifique a estratégia para criar uma inspeção de sondagem quando não conseguir criar usando eventos do sistema de arquivos: 'FixedInterval' (padrão), 'PriorityInterval', 'DynamicPriority'.",
-  "Specify_strategy_for_watching_directory_on_platforms_that_don_t_support_recursive_watching_natively__6226": "Especifique a estratégia para assistir ao diretório em plataformas que não têm suporte à observação recursiva nativamente: 'UseFsEvents' (padrão), 'FixedPollingInterval', 'DynamicPriorityPolling'.",
-  "Specify_strategy_for_watching_file_Colon_FixedPollingInterval_default_PriorityPollingInterval_Dynami_6225": "Especifique a estratégia para assistir ao arquivo: 'FixedPollingInterval' (padrão), 'PriorityPollingInterval', 'DynamicPriorityPolling', 'UseFsEvents', 'UseFsEventsOnParentDirectory'.",
+  "Specify_module_specifier_used_to_import_the_JSX_factory_functions_when_using_jsx_Colon_react_jsx_Ast_6649": "Especificar o especificador de módulo usado para importar as funções de fábrica JSX ao usar 'jsx: react-jsx*'.'",
+  "Specify_multiple_folders_that_act_like_Slashnode_modules_Slash_types_6710": "Especificar várias pastas que agem como './node_modules/@types '.",
+  "Specify_one_or_more_path_or_node_module_references_to_base_configuration_files_from_which_settings_a_6633": "Especificar uma ou mais referências de módulo ou nó para os arquivos de configuração base dos quais as configurações são herdadas.",
+  "Specify_options_for_automatic_acquisition_of_declaration_files_6709": "Especifique opções para aquisição automática de arquivos de declaração.",
+  "Specify_strategy_for_creating_a_polling_watch_when_it_fails_to_create_using_file_system_events_Colon_6227": "Especifique a estratégia para criar uma inspeção de sondagem quando não conseguir criar usando eventos do sistema de arquivos: 'FixedInterval' (padrão), 'PriorityInterval', 'DynamicPriority', 'FixedChunkSize'.",
+  "Specify_strategy_for_watching_directory_on_platforms_that_don_t_support_recursive_watching_natively__6226": "Especifique a estratégia para observar ao diretório em plataformas que não têm suporte à observação recursiva nativamente: 'UseFsEvents' (padrão), 'FixedPollingInterval', 'DynamicPriorityPolling', 'FixedChunkSizePolling'.",
+  "Specify_strategy_for_watching_file_Colon_FixedPollingInterval_default_PriorityPollingInterval_Dynami_6225": "Especifique a estratégia para observar ao arquivo: 'FixedPollingInterval' (padrão), 'PriorityPollingInterval', 'DynamicPriorityPolling', 'FixedChunkSizePolling', 'UseFsEvents', 'UseFsEventsOnParentDirectory'.",
+  "Specify_the_JSX_Fragment_reference_used_for_fragments_when_targeting_React_JSX_emit_e_g_React_Fragme_6648": "Especifique a referência do fragmento JSX usada para fragmentos ao direcionar o React JSX emit, por exemplo, 'React.Fragment' ou 'Fragment'.",
   "Specify_the_JSX_factory_function_to_use_when_targeting_react_JSX_emit_e_g_React_createElement_or_h_6146": "Especifique a função de fábrica JSX a ser usada ao direcionar a emissão 'react' do JSX, por ex., 'React.createElement' ou 'h'.",
+  "Specify_the_JSX_factory_function_used_when_targeting_React_JSX_emit_e_g_React_createElement_or_h_6647": "Especifique a função de fábrica JSX usada ao direcionar o React JSX emit, por exemplo, 'React.createElement' ou 'h'",
   "Specify_the_JSX_fragment_factory_function_to_use_when_targeting_react_JSX_emit_with_jsxFactory_compi_18034": "Especifique a função de alocador do fragmento JSX a ser usada no direcionamento de uma emissão de JSX 'react' com a opção do compilador 'jsxFactory' especificada, por exemplo, 'Fragment'.",
+  "Specify_the_base_directory_to_resolve_non_relative_module_names_6607": "Especificar o diretório base para resolver nomes de módulos não relativos.",
   "Specify_the_end_of_line_sequence_to_be_used_when_emitting_files_Colon_CRLF_dos_or_LF_unix_6060": "Especifique o fim da sequência de linha a ser usado ao emitir arquivos: 'CRLF' (dos) ou 'LF' (unix).",
+  "Specify_the_folder_for_tsbuildinfo_incremental_compilation_files_6707": "Especifique a pasta para os arquivos de compilação incremental .tsbuildinfo.",
   "Specify_the_location_where_debugger_should_locate_TypeScript_files_instead_of_source_locations_6004": "Especifique o local onde o depurador deve localizar arquivos TypeScript em vez de locais de origem.",
-  "Specify_the_location_where_debugger_should_locate_map_files_instead_of_generated_locations_6003": "Especifique o local onde o depurador deve localizar arquivos de mapa em vez de locais gerados.",
-  "Specify_the_module_specifier_to_be_used_to_import_the_jsx_and_jsxs_factory_functions_from_eg_react_6238": "Especifique o especificador de módulo a ser usado para importar as funções do alocador `jsx` e `jsxs`. Por exemplo, react",
+  "Specify_the_location_where_debugger_should_locate_map_files_instead_of_generated_locations_6655": "Especifique o local onde o depurador deve localizar arquivos de mapa em vez de locais gerados.",
+  "Specify_the_maximum_folder_depth_used_for_checking_JavaScript_files_from_node_modules_Only_applicabl_6656": "Especifique a profundidade máxima da pasta usada para verificar os arquivos JavaScript de `node_modules`. Aplicável apenas com `allowJs`.",
+  "Specify_the_module_specifier_to_be_used_to_import_the_jsx_and_jsxs_factory_functions_from_eg_react_6238": "Especifique o especificador do módulo a ser utilizado para importar as funções 'jsx' e 'jsxs' de fábrica, por exemplo, react",
+  "Specify_the_object_invoked_for_createElement_This_only_applies_when_targeting_react_JSX_emit_6686": "Especifique o objeto invocado para `createElement`. Isso se aplica apenas ao direcionar a emissão JSX `react`.",
+  "Specify_the_output_directory_for_generated_declaration_files_6613": "Especifique o diretório de saída para os arquivos de declaração gerados.",
   "Specify_the_root_directory_of_input_files_Use_to_control_the_output_directory_structure_with_outDir_6058": "Especifique o diretório raiz de arquivos de entrada. Use para controlar a estrutura do diretório de saída com --outDir.",
+  "Specify_the_root_folder_within_your_source_files_6690": "Especifique a pasta raiz em seus arquivos de origem.",
+  "Specify_the_root_path_for_debuggers_to_find_the_reference_source_code_6695": "Especifique o caminho raiz para que os depuradores localizem o código-fonte de referência.",
+  "Specify_type_package_names_to_be_included_without_being_referenced_in_a_source_file_6711": "Especifique os nomes dos pacotes de tipo a serem incluídos sem serem referenciados em um arquivo de origem.",
+  "Specify_what_JSX_code_is_generated_6646": "Especifique qual código JSX é gerado.",
+  "Specify_what_approach_the_watcher_should_use_if_the_system_runs_out_of_native_file_watchers_6634": "Especificar qual abordagem a inspeção deverá usar se o sistema ficar sem os observadores de arquivo nativos.",
+  "Specify_what_module_code_is_generated_6657": "Especifique qual código do módulo é gerado.",
   "Split_all_invalid_type_only_imports_1367": "Dividir todas as importações somente de tipo inválidas",
   "Split_into_two_separate_import_declarations_1366": "Dividir em duas declarações de importação separadas",
   "Spread_operator_in_new_expressions_is_only_available_when_targeting_ECMAScript_5_and_higher_2472": "O operador de espalhamento só está disponível em expressões 'new' no direcionamento a ECMAScript 5 e superior.",
@@ -1101,9 +1329,9 @@
   "Starting_compilation_in_watch_mode_6031": "Iniciando compilação no modo de inspeção...",
   "Statement_expected_1129": "Instrução esperada.",
   "Statements_are_not_allowed_in_ambient_contexts_1036": "Instruções não são permitidas em contextos de ambiente.",
+  "Static_fields_with_private_names_can_t_have_initializers_when_the_useDefineForClassFields_flag_is_no_2805": "Os campos estáticos com nomes privados não podem ter inicializadores quando o sinalizador '--useDefineForClassFields' não está especificado com um '--target' igual a 'esnext'. Considere adicionar o sinalizador '--useDefineForClassFields'.",
   "Static_members_cannot_reference_class_type_parameters_2302": "Membros estáticos não podem fazer referência a parâmetros de tipo de classe.",
   "Static_property_0_conflicts_with_built_in_property_Function_0_of_constructor_function_1_2699": "Conflitos de propriedade estática '{0}' com propriedade interna 'Function.{0}' da função de construtor '{1}'.",
-  "Strict_Type_Checking_Options_6173": "Opções Estritas da Verificação de Tipo",
   "String_literal_expected_1141": "Literal de cadeia de caracteres esperado.",
   "String_literal_with_double_quotes_expected_1327": "Literal de cadeia com aspas duplas é esperado.",
   "Stylize_errors_and_messages_using_color_and_context_experimental_6073": "Estilizar erros e mensagens usando cor e contexto (experimental).",
@@ -1117,9 +1345,10 @@
   "Super_calls_are_not_permitted_outside_constructors_or_in_nested_functions_inside_constructors_2337": "As chamadas super não são permitidas fora dos construtores ou em funções aninhadas dentro dos construtores.",
   "Suppress_excess_property_checks_for_object_literals_6072": "Verificações de propriedade de excesso de compactação para literais de objeto.",
   "Suppress_noImplicitAny_errors_for_indexing_objects_lacking_index_signatures_6055": "Suprimir erros de noImplicitAny para objetos de indexação sem assinaturas de índice.",
+  "Suppress_noImplicitAny_errors_when_indexing_objects_that_lack_index_signatures_6703": "Suprimir erros 'noImplicitAny' ao indexar objetos que não têm assinaturas de índice.",
   "Switch_each_misused_0_to_1_95138": "Mude cada '{0}' usado incorretamente para '{1}'",
   "Symbol_reference_does_not_refer_to_the_global_Symbol_constructor_object_2470": "A referência 'symbol' não se refere ao objeto global do construtor Symbol.",
-  "Synchronously_call_callbacks_and_update_the_state_of_directory_watchers_on_platforms_that_don_t_supp_6228": "Chame sincronicamente retornos de chamadas e atualize o estado de observadores de diretório em plataformas que não têm suporte à observação recursiva nativamente.",
+  "Synchronously_call_callbacks_and_update_the_state_of_directory_watchers_on_platforms_that_don_t_supp_6704": "Chame sincronicamente retornos de chamadas e atualize o estado de observadores de diretório em plataformas que não têm suporte à observação recursiva nativamente.",
   "Syntax_Colon_0_6023": "Sintaxe: {0}",
   "Tag_0_expects_at_least_1_arguments_but_the_JSX_factory_2_provides_at_most_3_6229": "A tag '{0}' espera no mínimo '{1}' argumentos, mas o alocador JSX '{2}' fornece no máximo '{3}'.",
   "Tagged_template_expressions_are_not_permitted_in_an_optional_chain_1358": "Expressões de modelo marcado não são permitidas em uma cadeia opcional.",
@@ -1134,17 +1363,19 @@
   "The_arguments_object_cannot_be_referenced_in_an_arrow_function_in_ES3_and_ES5_Consider_using_a_stand_2496": "O objeto 'arguments' não pode ser referenciado em uma função de seta em ES3 e ES5. Considere usar uma expressão de função padrão.",
   "The_arguments_object_cannot_be_referenced_in_an_async_function_or_method_in_ES3_and_ES5_Consider_usi_2522": "O objeto 'arguments' não pode ser referenciado em uma função assíncrona ou o método no ES3 e ES5. Considere usar uma função ou um método padrão.",
   "The_body_of_an_if_statement_cannot_be_the_empty_statement_1313": "O corpo de uma instrução 'if' não pode ser uma instrução vazia.",
-  "The_bundledPackageName_option_must_be_provided_when_using_outFile_and_node_module_resolution_with_de_1391": "A opção `bundledPackageName` precisa ser fornecida ao usar outFile e a resolução de módulo de nó com a emissão de declaração.",
+  "The_bundledPackageName_option_must_be_provided_when_using_outFile_and_node_module_resolution_with_de_1391": "A opção 'bundledPackageName' deve ser fornecida ao utilizar outFile e resolução de módulo de nó com a emissão de declaração.",
   "The_call_would_have_succeeded_against_this_implementation_but_implementation_signatures_of_overloads_2793": "A chamada teria sido bem-sucedida nesta implementação, mas as assinaturas de implementação de sobrecargas não estão visíveis externamente.",
   "The_character_set_of_the_input_files_6163": "O conjunto de caracteres dos arquivos de entrada.",
   "The_containing_arrow_function_captures_the_global_value_of_this_7041": "A função de seta contida captura o valor global de 'this'.",
   "The_containing_function_or_module_body_is_too_large_for_control_flow_analysis_2563": "O corpo da função ou do módulo contido é muito grande para a análise de fluxo de controle.",
   "The_current_host_does_not_support_the_0_option_5001": "O host atual não dá suporte à opção '{0}'.",
   "The_declaration_of_0_that_you_probably_intended_to_use_is_defined_here_18018": "A declaração de '{0}' que você provavelmente pretende usar é definida aqui",
+  "The_declaration_was_marked_as_deprecated_here_2798": "A declaração foi marcada como preterida aqui.",
   "The_expected_type_comes_from_property_0_which_is_declared_here_on_type_1_6500": "O tipo esperado vem da propriedade '{0}', que é declarada aqui no tipo '{1}'",
   "The_expected_type_comes_from_the_return_type_of_this_signature_6502": "O tipo esperado vem do tipo de retorno dessa assinatura.",
   "The_expected_type_comes_from_this_index_signature_6501": "O tipo esperado vem dessa assinatura de índice.",
   "The_expression_of_an_export_assignment_must_be_an_identifier_or_qualified_name_in_an_ambient_context_2714": "A expressão de uma atribuição de exportação deve ser um identificador ou nome qualificado em um contexto de ambiente.",
+  "The_file_is_in_the_program_because_Colon_1430": "O arquivo está no programa porque:",
   "The_files_list_in_config_file_0_is_empty_18002": "A lista de 'arquivos' no arquivo de configuração '{0}' está vazia.",
   "The_first_export_default_is_here_2752": "O primeiro padrão de exportação está aqui.",
   "The_first_parameter_of_the_then_method_of_a_promise_must_be_a_callback_1060": "O primeiro parâmetro do método 'then' de uma promessa deve ser um retorno de chamada.",
@@ -1168,6 +1399,7 @@
   "The_left_hand_side_of_a_for_in_statement_must_be_of_type_string_or_any_2405": "O lado esquerdo de uma instrução de 'for...in' deve ser do tipo 'string' ou 'any'.",
   "The_left_hand_side_of_a_for_of_statement_cannot_use_a_type_annotation_2483": "O lado esquerdo de uma instrução 'for...of' não pode usar uma anotação de tipo.",
   "The_left_hand_side_of_a_for_of_statement_may_not_be_an_optional_property_access_2781": "O lado esquerdo de uma instrução 'for...of' pode não ser um acesso opcional de propriedade.",
+  "The_left_hand_side_of_a_for_of_statement_may_not_be_async_1106": "O lado esquerdo de uma instrução 'for...of' não pode ser 'assíncrono'.",
   "The_left_hand_side_of_a_for_of_statement_must_be_a_variable_or_a_property_access_2487": "O lado esquerdo de uma instrução 'for...of' deve ser uma variável ou um acesso à propriedade.",
   "The_left_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type_2362": "O lado esquerdo de uma operação aritmética deve ser do tipo 'any', 'number', 'bigint' ou um tipo enumerado.",
   "The_left_hand_side_of_an_assignment_expression_may_not_be_an_optional_property_access_2779": "O lado esquerdo de uma expressão de atribuição pode não ser um acesso opcional de propriedade.",
@@ -1185,15 +1417,18 @@
   "The_parser_expected_to_find_a_to_match_the_token_here_1007": "O analisador esperava localizar um '}' para corresponder ao token '{' aqui.",
   "The_property_0_cannot_be_accessed_on_type_1_within_this_class_because_it_is_shadowed_by_another_priv_18014": "A propriedade '{0}' não pode ser acessada no tipo '{1}' dentro dessa classe porque ela é sombreada por outro identificador privado com a mesma grafia.",
   "The_return_type_of_a_JSX_element_constructor_must_return_an_object_type_2601": "O tipo de retorno de um construtor de elemento JSX deve retornar um tipo de objeto.",
+  "The_return_type_of_a_get_accessor_must_be_assignable_to_its_set_accessor_type_2380": "O tipo de retorno de um acessador 'get' precisa ser atribuível ao respectivo tipo de acessador 'set'",
   "The_return_type_of_a_parameter_decorator_function_must_be_either_void_or_any_1237": "O tipo de retorno de uma função de decorador de parâmetro deve ser 'void' ou 'any'.",
   "The_return_type_of_a_property_decorator_function_must_be_either_void_or_any_1236": "O tipo de retorno de uma função de decorador de propriedade deve ser 'void' ou 'any'.",
   "The_return_type_of_an_async_function_must_either_be_a_valid_promise_or_must_not_contain_a_callable_t_1058": "O tipo de retorno de uma função assíncrona deve ser uma promessa válida ou não deve conter um membro \"then\" que pode ser chamado.",
   "The_return_type_of_an_async_function_or_method_must_be_the_global_Promise_T_type_Did_you_mean_to_wri_1064": "O tipo de retorno de uma função assíncrona ou método precisa ser o tipo Promise<T> global. Você quis escrever 'Promise<{0}>'?",
   "The_right_hand_side_of_a_for_in_statement_must_be_of_type_any_an_object_type_or_a_type_parameter_but_2407": "O lado direito de uma instrução 'for...in' deve ser do tipo 'any', um tipo de objeto ou um parâmetro de tipo, mas aqui ele tem o tipo '{0}'.",
   "The_right_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type_2363": "O lado direito de uma operação aritmética deve ser do tipo 'any', 'number', 'bigint' ou um tipo enumerado.",
-  "The_right_hand_side_of_an_in_expression_must_be_of_type_any_an_object_type_or_a_type_parameter_2361": "O lado direito de uma expressão 'in' deve ser do tipo 'any', um tipo de objeto ou um parâmetro de tipo.",
+  "The_right_hand_side_of_an_in_expression_must_not_be_a_primitive_2361": "O lado direito de uma expressão 'in' não pode ser um primitivo.",
   "The_right_hand_side_of_an_instanceof_expression_must_be_of_type_any_or_of_a_type_assignable_to_the_F_2359": "O lado direito de uma expressão 'instanceof' deve ser do tipo 'any' ou de um tipo que pode ser atribuído ao tipo de interface 'Function'.",
+  "The_root_value_of_a_0_file_must_be_an_object_5092": "O valor raiz de um arquivo '{0}' precisa ser um objeto.",
   "The_shadowing_declaration_of_0_is_defined_here_18017": "A declaração de sombreamento de '{0}' é definida aqui",
+  "The_signature_0_of_1_is_deprecated_6387": "A assinatura '{0}' de '{1}' foi preterida.",
   "The_specified_path_does_not_exist_Colon_0_5058": "O caminho especificado não existe: '{0}'.",
   "The_tag_was_first_specified_here_8034": "A marca foi especificada primeiro aqui.",
   "The_target_of_an_assignment_must_be_a_variable_or_a_property_access_2541": "O destino de uma atribuição deve ser uma variável ou um acesso à propriedade.",
@@ -1204,6 +1439,7 @@
   "The_type_0_is_readonly_and_cannot_be_assigned_to_the_mutable_type_1_4104": "O tipo '{0}' é 'readonly' e não pode ser atribuído ao tipo mutável '{1}'.",
   "The_type_argument_for_type_parameter_0_cannot_be_inferred_from_the_usage_Consider_specifying_the_typ_2453": "O argumento de tipo para o parâmetro de tipo '{0}' não pode ser inferido com base no uso. Considere especificar os argumentos de tipo explicitamente.",
   "The_type_of_a_function_declaration_must_match_the_function_s_signature_8030": "O tipo de uma declaração de função deve corresponder à assinatura da função.",
+  "The_type_of_this_node_cannot_be_serialized_because_its_property_0_cannot_be_serialized_4118": "O tipo deste nó não pode ser serializado porque sua propriedade '{0}' não pode ser serializada.",
   "The_type_returned_by_the_0_method_of_an_async_iterator_must_be_a_promise_for_a_type_with_a_value_pro_2547": "O tipo retornado pelo método '{0}()' de um iterador assíncrono deve ser uma promessa para um tipo com a propriedade 'value'.",
   "The_type_returned_by_the_0_method_of_an_iterator_must_have_a_value_property_2490": "O tipo retornado pelo método '{0}()' de um iterador deve ter uma propriedade 'value'.",
   "The_types_of_0_are_incompatible_between_these_types_2200": "Os tipos de '{0}' são incompatíveis entre esses tipos.",
@@ -1214,7 +1450,8 @@
   "This_JSX_tag_s_0_prop_expects_a_single_child_of_type_1_but_multiple_children_were_provided_2746": "A propriedade '{0}' da marca desse JSX espera um único filho do tipo '{1}', mas vários filhos foram fornecidos.",
   "This_JSX_tag_s_0_prop_expects_type_1_which_requires_multiple_children_but_only_a_single_child_was_pr_2745": "A propriedade '{0}' da marca desse JSX espera o tipo '{1}' que requer vários filhos, mas somente um único filho foi fornecido.",
   "This_condition_will_always_return_0_since_the_types_1_and_2_have_no_overlap_2367": "Essa condição sempre retornará '{0}', pois os tipos '{1}' e '{2}' não têm nenhuma sobreposição.",
-  "This_condition_will_always_return_true_since_the_function_is_always_defined_Did_you_mean_to_call_it__2774": "Essa condição sempre retornará true, pois a função é sempre definida. Você quis chamá-la em vez disso?",
+  "This_condition_will_always_return_true_since_this_0_is_always_defined_2801": "Esta condição sempre retornará verdadeiro, já que este '{0}' está sempre definido.",
+  "This_condition_will_always_return_true_since_this_function_is_always_defined_Did_you_mean_to_call_it_2774": "Esta condição sempre retornará verdadeira, uma vez que esta função foi sempre definida. Você pretendia chamá-la em vez disso?",
   "This_constructor_function_may_be_converted_to_a_class_declaration_80002": "Esta função de construtor pode ser convertida em uma declaração de classe.",
   "This_expression_is_not_callable_2349": "Essa expressão não pode ser chamada.",
   "This_expression_is_not_callable_because_it_is_a_get_accessor_Did_you_mean_to_use_it_without_6234": "Esta expressão não pode ser chamada porque é um acessador 'get'. Você quis usá-la sem '()'?",
@@ -1223,15 +1460,23 @@
   "This_import_is_never_used_as_a_value_and_must_use_import_type_because_importsNotUsedAsValues_is_set__1371": "Esta importação nunca é usada como um valor e precisa usar um 'tipo de importação' porque 'importsNotUsedAsValues' está definido como 'erro'.",
   "This_is_the_declaration_being_augmented_Consider_moving_the_augmenting_declaration_into_the_same_fil_6233": "Esta é a declaração que está sendo aumentada. Considere mover a declaração em aumento para o mesmo arquivo.",
   "This_may_be_converted_to_an_async_function_80006": "Isso pode ser convertido em uma função assíncrona.",
+  "This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0_4113": "Este membro não pode ter um modificador 'override' porque não está declarado na classe base '{0}'.",
+  "This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0_Did_you__4117": "Esse membro não pode ter um modificador de 'substituição' porque ele não é declarado na classe base '{0}'. Você quis dizer '{1}'?",
+  "This_member_cannot_have_an_override_modifier_because_its_containing_class_0_does_not_extend_another__4112": "Este membro não pode ter um modificador 'override' porque a classe que o contém, '{0}', não se estende para outra classe.",
+  "This_member_must_have_an_override_modifier_because_it_overrides_a_member_in_the_base_class_0_4114": "Este membro precisa ter um modificador 'override' porque substitui um membro na classe base '{0}'.",
+  "This_member_must_have_an_override_modifier_because_it_overrides_an_abstract_method_that_is_declared__4116": "Este membro precisa ter um modificador 'override' porque substitui um método abstrato que é declarado na classe base '{0}'.",
   "This_module_can_only_be_referenced_with_ECMAScript_imports_Slashexports_by_turning_on_the_0_flag_and_2497": "Esse módulo só pode ser referenciado com importações/exportações de ECMAScript ligando o sinalizador '{0}' e referenciando sua exportação padrão.",
   "This_module_is_declared_with_using_export_and_can_only_be_used_with_a_default_import_when_using_the__2594": "Esse módulo é declarado com o uso de 'export =' e só pode ser usado com uma importação padrão ao usar o sinalizador '{0}'.",
   "This_overload_signature_is_not_compatible_with_its_implementation_signature_2394": "Esta assinatura de sobrecarga não é compatível com sua assinatura de implementação.",
   "This_parameter_is_not_allowed_with_use_strict_directive_1346": "Este parâmetro não é permitido com a diretiva 'use strict'.",
+  "This_parameter_property_must_have_an_override_modifier_because_it_overrides_a_member_in_base_class_0_4115": "Esta propriedade de parâmetro deve ter uma modificação de 'substituição' porque substitui um membro na classe base '{0}'.",
   "This_spread_always_overwrites_this_property_2785": "Essa difusão sempre substitui essa propriedade.",
   "This_syntax_requires_an_imported_helper_but_module_0_cannot_be_found_2354": "Essa sintaxe requer um auxiliar importado, mas o módulo '{0}' não pode ser encontrado.",
   "This_syntax_requires_an_imported_helper_named_1_which_does_not_exist_in_0_Consider_upgrading_your_ve_2343": "Esta sintaxe requer um auxiliar importado chamado '{1}' que não existe em '{0}'. Considere atualizar sua versão do '{0}'.",
+  "This_syntax_requires_an_imported_helper_named_1_with_2_parameters_which_is_not_compatible_with_the_o_2807": "Esta sintaxe exige um auxiliar importado nomeado como '{1}' com parâmetros {2}, o que não é compatível com o que está em '{0}'. Considere atualizar sua versão do '{0}'.",
   "Top_level_await_expressions_are_only_allowed_when_the_module_option_is_set_to_esnext_or_system_and_t_1378": "As expressões 'await' de nível superior só são permitidas quando a opção 'module' é definida como 'esnext' ou 'system' e a opção 'target' é definida como 'es2017' ou superior.",
   "Top_level_declarations_in_d_ts_files_must_start_with_either_a_declare_or_export_modifier_1046": "As declarações de nível superior em arquivos .d.ts devem começar com um modificador 'declare' ou 'export'.",
+  "Top_level_for_await_loops_are_only_allowed_when_the_module_option_is_set_to_esnext_or_system_and_the_1432": "Os loops 'for await' de nível superior só são permitidos quando a opção 'module' é definida como 'esnext' ou 'system' e a opção 'target' é definida como 'es2017' ou superior.",
   "Trailing_comma_not_allowed_1009": "Vírgula à direita não permitida.",
   "Transpile_each_file_as_a_separate_module_similar_to_ts_transpileModule_6153": "Transcompilar cada arquivo como um módulo separado (do mesmo modo que 'ts.transpileModule').",
   "Try_npm_i_save_dev_types_Slash_1_if_it_exists_or_add_a_new_declaration_d_ts_file_containing_declare__7035": "Tente `npm i --save-dev @types/{1}` caso exista ou adicione um novo arquivo de declaração (.d.ts) contendo `declare module '{0}';`",
@@ -1240,6 +1485,7 @@
   "Tuple_members_must_all_have_names_or_all_not_have_names_5084": "Todos os membros de tupla precisam ter nomes ou não ter nomes.",
   "Tuple_type_0_of_length_1_has_no_element_at_index_2_2493": "O tipo de tupla '{0}' de comprimento '{1}' não tem nenhum elemento no índice '{2}'.",
   "Tuple_type_arguments_circularly_reference_themselves_4110": "Os argumentos de tipo de tupla se referenciam circularmente.",
+  "Type_0_can_only_be_iterated_through_when_using_the_downlevelIteration_flag_or_with_a_target_of_es201_2802": "O tipo '{0}' só pode ser iterado usando o sinalizador '--downlevelIteration' ou um '--target' igual a 'es2015' ou superior.",
   "Type_0_cannot_be_used_as_an_index_type_2538": "O tipo '{0}' não pode ser usado como um tipo de índice.",
   "Type_0_cannot_be_used_to_index_type_1_2536": "O tipo '{0}' não pode ser usado para indexar o tipo '{1}'.",
   "Type_0_does_not_satisfy_the_constraint_1_2344": "O tipo '{0}' não satisfaz a restrição '{1}'.",
@@ -1264,7 +1510,9 @@
   "Type_0_must_have_a_Symbol_iterator_method_that_returns_an_iterator_2488": "O tipo '{0}' deve ter um método '[Symbol.iterator]()' que retorna um iterador.",
   "Type_0_provides_no_match_for_the_signature_1_2658": "O tipo '{0}' fornece nenhuma correspondência para a assinatura '{1}'.",
   "Type_0_recursively_references_itself_as_a_base_type_2310": "O tipo '{0}' referencia recursivamente a si próprio como um tipo base.",
+  "Type_Checking_6248": "Verificação de Tipo",
   "Type_alias_0_circularly_references_itself_2456": "O alias de tipo '{0}' referencia circulamente a si próprio.",
+  "Type_alias_must_be_given_a_name_1439": "O alias de tipo deve receber um nome.",
   "Type_alias_name_cannot_be_0_2457": "O nome do alias de tipo não pode ser '{0}'.",
   "Type_aliases_can_only_be_used_in_TypeScript_files_8008": "Os aliases de tipo só podem ser usados em arquivos TypeScript.",
   "Type_annotation_cannot_appear_on_a_constructor_declaration_1093": "Uma anotação de tipo não pode aparecer em uma declaração de construtor.",
@@ -1276,10 +1524,15 @@
   "Type_arguments_cannot_be_used_here_1342": "Argumentos de tipo não podem ser usados aqui.",
   "Type_arguments_for_0_circularly_reference_themselves_4109": "Os argumentos de tipo '{0}' se referenciam circularmente.",
   "Type_assertion_expressions_can_only_be_used_in_TypeScript_files_8016": "As expressões de declaração de tipo só podem ser usadas em arquivos TypeScript.",
+  "Type_at_position_0_in_source_is_not_compatible_with_type_at_position_1_in_target_2626": "O tipo na posição {0} na fonte não é compatível com o tipo na posição {1} no destino.",
+  "Type_at_positions_0_through_1_in_source_is_not_compatible_with_type_at_position_2_in_target_2627": "O tipo nas posições {0} até {1} na fonte não é compatível com o tipo na posição {2} no destino.",
+  "Type_catch_clause_variables_as_unknown_instead_of_any_6803": "Digite as variáveis da cláusula catch como 'desconhecido' em vez de 'qualquer'.",
   "Type_declaration_files_to_be_included_in_compilation_6124": "Arquivos de declaração de tipo a serem incluídos em compilação.",
   "Type_expected_1110": "Tipo esperado.",
   "Type_instantiation_is_excessively_deep_and_possibly_infinite_2589": "A instanciação de tipo é muito profunda e possivelmente infinita.",
   "Type_is_referenced_directly_or_indirectly_in_the_fulfillment_callback_of_its_own_then_method_1062": "O tipo é referenciado diretamente ou indiretamente em um retorno de chamada de preenchimento do seu próprio método 'then'.",
+  "Type_library_referenced_via_0_from_file_1_1402": "Biblioteca de tipos referenciada via '{0}' do arquivo '{1}'",
+  "Type_library_referenced_via_0_from_file_1_with_packageId_2_1403": "Biblioteca de tipos referenciada via '{0}' do arquivo '{1}' com packageId '{2}'",
   "Type_of_await_operand_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member_1320": "O tipo de operando \"await\" deve ser uma promessa válida ou não deve conter um membro \"then\" que pode ser chamado.",
   "Type_of_computed_property_s_value_is_0_which_is_not_assignable_to_type_1_2418": "O tipo de valor da propriedade computada é '{0}', que não pode ser atribuído ao tipo '{1}'.",
   "Type_of_iterated_elements_of_a_yield_Asterisk_operand_must_either_be_a_valid_promise_or_must_not_con_1322": "O tipo de elementos iterados de um operando \"yield*\" deve ser uma promessa válida ou não deve conter um membro \"then\" que pode ser chamado.",
@@ -1305,6 +1558,7 @@
   "Type_parameter_name_cannot_be_0_2368": "O nome do parâmetro de tipo não pode ser '{0}'.",
   "Type_parameters_cannot_appear_on_a_constructor_declaration_1092": "Os parâmetros de tipo não podem aparecer em uma declaração de construtor.",
   "Type_predicate_0_is_not_assignable_to_1_1226": "O predicado de tipo '{0}' não pode ser atribuído a '{1}'.",
+  "Type_produces_a_tuple_type_that_is_too_large_to_represent_2799": "O tipo produz um tipo de tupla grande demais para ser representado.",
   "Type_reference_directive_0_was_not_resolved_6120": "======== A diretiva de referência de tipo '{0}' não foi resolvida. ========",
   "Type_reference_directive_0_was_successfully_resolved_to_1_primary_Colon_2_6119": "======== A diretiva de referência de tipo '{0}' foi resolvida com sucesso para '{1}', primário: {2}. ========",
   "Type_reference_directive_0_was_successfully_resolved_to_1_with_Package_ID_2_primary_Colon_3_6219": "======== A diretiva de referência de tipo '{0}' foi resolvida com sucesso para '{1}' com a ID do Pacote '{2}', primário: {3}. ========",
@@ -1318,6 +1572,7 @@
   "Unable_to_resolve_signature_of_parameter_decorator_when_called_as_an_expression_1239": "Não é possível resolver a assinatura do decorador de parâmetro quando ele é chamado como uma expressão.",
   "Unable_to_resolve_signature_of_property_decorator_when_called_as_an_expression_1240": "Não é possível resolver a assinatura do decorador de propriedade quando ele é chamado como uma expressão.",
   "Unexpected_end_of_text_1126": "Fim inesperado do texto.",
+  "Unexpected_keyword_or_identifier_1434": "Palavra-chave ou identificador inesperado.",
   "Unexpected_token_1012": "Token inesperado.",
   "Unexpected_token_A_constructor_method_accessor_or_property_was_expected_1068": "Token inesperado. Um construtor, método, acessador ou propriedade era esperado.",
   "Unexpected_token_A_type_parameter_name_was_expected_without_curly_braces_1069": "Token inesperado. Era esperado um nome de parâmetro de tipo sem chaves.",
@@ -1328,6 +1583,7 @@
   "Unknown_build_option_0_Did_you_mean_1_5077": "Opção de build '{0}' desconhecida. Você quis dizer '{1}'?",
   "Unknown_compiler_option_0_5023": "Opção do compilador '{0}' desconhecida.",
   "Unknown_compiler_option_0_Did_you_mean_1_5025": "Opção de compilador '{0}' desconhecida. Você quis dizer '{1}'?",
+  "Unknown_keyword_or_identifier_Did_you_mean_0_1435": "Palavra-chave ou identificador desconhecido. Você quis dizer '{0}'?",
   "Unknown_option_excludes_Did_you_mean_exclude_6114": "Opção desconhecida 'excludes'. Você quis dizer 'exclude'?",
   "Unknown_type_acquisition_option_0_17010": "Opção de aquisição de tipo desconhecido '{0}'.",
   "Unknown_type_acquisition_option_0_Did_you_mean_1_17018": "Opção de aquisição de tipo '{0}' desconhecida. Você quis dizer '{1}'?",
@@ -1350,6 +1606,7 @@
   "Use_element_access_for_all_undeclared_properties_95146": "Usar o acesso de elemento para todas as propriedades não declaradas.",
   "Use_synthetic_default_member_95016": "Use o membro sintético 'padrão'.",
   "Using_a_string_in_a_for_of_statement_is_only_supported_in_ECMAScript_5_and_higher_2494": "Há suporte para o uso de uma cadeia de caracteres em uma instrução 'for...of' somente no ECMAScript 5 e superior.",
+  "Using_build_b_will_make_tsc_behave_more_like_a_build_orchestrator_than_a_compiler_This_is_used_to_tr_6915": "Usar --build, -b fará com que o tsc se comporte mais como um orquestrador de build do que como um compilador. Isso é usado para acionar a construção de projetos compostos sobre os quais você pode aprender mais em {0}",
   "Using_compiler_options_of_project_reference_redirect_0_6215": "Usando as opções do compilador de redirecionamento de referência do projeto '{0}'.",
   "VERSION_6036": "VERSÃO",
   "Value_of_type_0_has_no_properties_in_common_with_type_1_Did_you_mean_to_call_it_2560": "O valor do tipo '{0}' não tem propriedades em comum com o tipo '{1}'. Você queria chamá-lo?",
@@ -1361,10 +1618,16 @@
   "Variable_0_is_used_before_being_assigned_2454": "A variável '{0}' é usada antes de ser atribuída.",
   "Variable_declaration_expected_1134": "Declaração de variável esperada.",
   "Variable_declaration_list_cannot_be_empty_1123": "A lista de declaração de variável não pode estar vazia.",
+  "Variable_declaration_not_allowed_at_this_location_1440": "A declaração de variável não é permitida neste local.",
+  "Variadic_element_at_position_0_in_source_does_not_match_element_at_position_1_in_target_2625": "O elemento variádico na posição {0} na fonte não corresponde ao elemento na posição {1} no destino.",
   "Version_0_6029": "Versão {0}",
   "Visit_https_Colon_Slash_Slashaka_ms_Slashtsconfig_json_to_read_more_about_this_file_95110": "Visite https://aka.ms/tsconfig.json para ler mais sobre este arquivo",
+  "WATCH_OPTIONS_6918": "OPÇÕES DE INSPEÇÃO",
+  "Watch_and_Build_Modes_6250": "Modos Inspeção e Compilação",
   "Watch_input_files_6005": "Observe os arquivos de entrada.",
   "Watch_option_0_requires_a_value_of_type_1_5080": "A opção do observador '{0}' requer um valor do tipo {1}.",
+  "When_assigning_functions_check_to_ensure_parameters_and_the_return_values_are_subtype_compatible_6698": "Ao atribuir funções, certifique-se que os parâmetros e os valores de retorno sejam compatíveis com subtipo.",
+  "When_type_checking_take_into_account_null_and_undefined_6699": "Quando a fizer a verificação de tipo, considere 'null' e 'undefined'.",
   "Whether_to_keep_outdated_console_output_in_watch_mode_instead_of_clearing_the_screen_6191": "Se é necessário manter a saída de console desatualizada no modo de inspeção, em vez de limpar a tela.",
   "Wrap_all_invalid_characters_in_an_expression_container_95109": "Encapsular todos os caracteres inválidos em um contêiner de expressão",
   "Wrap_all_object_literal_with_parentheses_95116": "Colocar todo o literal de objeto entre parênteses",
@@ -1372,10 +1635,12 @@
   "Wrap_in_JSX_fragment_95120": "Encapsular o fragmento de JSX",
   "Wrap_invalid_character_in_an_expression_container_95108": "Encapsular caractere inválido em um contêiner de expressão",
   "Wrap_the_following_body_with_parentheses_which_should_be_an_object_literal_95113": "Colocar entre parênteses o corpo a seguir, que deve ser um literal de objeto",
+  "You_can_learn_about_all_of_the_compiler_options_at_0_6913": "Você pode aprender sobre todas as opções do compilador em {0}",
   "You_cannot_rename_a_module_via_a_global_import_8031": "Não é possível renomear um módulo por meio de uma importação global.",
   "You_cannot_rename_elements_that_are_defined_in_the_standard_TypeScript_library_8001": "Não é possível renomear elementos que são definidos na biblioteca TypeScript padrão.",
   "You_cannot_rename_this_element_8000": "Você não pode renomear este elemento.",
   "_0_accepts_too_few_arguments_to_be_used_as_a_decorator_here_Did_you_mean_to_call_it_first_and_write__1329": "'{0}' aceita muito poucos argumentos para serem usados como um decorador aqui. Você quis dizer para chamá-lo primeiro e gravar '@{0}()'?",
+  "_0_and_1_index_signatures_are_incompatible_2330": "As assinaturas de índice '{0}' e '{1}' são incompatíveis.",
   "_0_and_1_operations_cannot_be_mixed_without_parentheses_5076": "As operações '{0}' e '{1}' não podem ser combinadas sem parênteses.",
   "_0_are_specified_twice_The_attribute_named_0_will_be_overwritten_2710": "'{0}' são especificados duas vezes. O atributo chamado '{0}' será substituído.",
   "_0_can_only_be_imported_by_turning_on_the_esModuleInterop_flag_and_using_a_default_import_2596": "'{0}' só pode ser importado ativando o sinalizador 'esModuleInterop' e usando uma importação padrão.",
@@ -1396,6 +1661,8 @@
   "_0_implicitly_has_an_1_return_type_but_a_better_type_may_be_inferred_from_usage_7050": "'{0}' tem implicitamente um tipo de retorno '{1}', mas um tipo melhor pode ser inferido do uso.",
   "_0_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_reference_7023": "Implicitamente, '{0}' tem um retorno tipo 'any' porque ele não tem uma anotação de tipo de retorno e é referenciado direta ou indiretamente em uma das suas expressões de retorno.",
   "_0_implicitly_has_type_any_because_it_does_not_have_a_type_annotation_and_is_referenced_directly_or__7022": "Implicitamente, '{0}' tem o tipo 'any' porque não tem uma anotação de tipo e é referenciado direta ou indiretamente em seu próprio inicializador.",
+  "_0_index_signatures_are_incompatible_2634": "'{0}' assinaturas de índice são incompatíveis.",
+  "_0_index_type_1_is_not_assignable_to_2_index_type_3_2413": "'{0}' tipo de índice '{1}' não pode ser atribuído a '{2}' tipo de índice '{3}'.",
   "_0_is_a_primitive_but_1_is_a_wrapper_object_Prefer_using_0_when_possible_2692": "'{0}' é um primitivo, mas '{1}' é um objeto de wrapper. Prefira usar '{0}' quando possível.",
   "_0_is_assignable_to_the_constraint_of_type_1_but_1_could_be_instantiated_with_a_different_subtype_of_5075": "'{0}' é atribuível à restrição do tipo '{1}', mas é possível criar uma instância de '{1}' com um subtipo diferente de restrição '{2}'.",
   "_0_is_declared_but_its_value_is_never_read_6133": "'{0}' é declarado, mas seu valor nunca é lido.",
@@ -1403,7 +1670,7 @@
   "_0_is_declared_here_2728": "'{0}' é declarado aqui.",
   "_0_is_defined_as_a_property_in_class_1_but_is_overridden_here_in_2_as_an_accessor_2611": "'{0}' está definido como uma propriedade na classe '{1}', mas é substituído aqui em '{2}' como um acessador.",
   "_0_is_defined_as_an_accessor_in_class_1_but_is_overridden_here_in_2_as_an_instance_property_2610": "'{0}' está definido como um acessador na classe '{1}', mas é substituído aqui em '{2}' como uma propriedade de instância.",
-  "_0_is_deprecated_6385": "'{0}' foi preterido",
+  "_0_is_deprecated_6385": "'{0}' foi preterido.",
   "_0_is_not_a_valid_meta_property_for_keyword_1_Did_you_mean_2_17012": "'{0}' não é uma metapropriedade para a palavra-chave '{1}'. Você quis dizer '{2}'?",
   "_0_is_not_allowed_as_a_variable_declaration_name_1389": "'{0}' não é permitido como um nome de declaração de variável.",
   "_0_is_referenced_directly_or_indirectly_in_its_own_base_expression_2506": "'{0}' é referenciado direta ou indiretamente em sua própria expressão base.",
@@ -1428,7 +1695,7 @@
   "_0_only_refers_to_a_type_but_is_being_used_as_a_namespace_here_2702": "'{0}' refere-se apenas a um tipo, mas está sendo usado como um namespace aqui.",
   "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_2693": "'{0}' só faz referência a um tipo, mas está sendo usado como valor no momento.",
   "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_Did_you_mean_to_use_1_in_0_2690": "'{0}' faz referência somente a um tipo, mas está sendo usado como um valor aqui. Você quis usar '{1} em {0}'?",
-  "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_Do_you_need_to_change_your_target_library_2585": "'{0}' faz referência somente a um tipo, mas está sendo usado como um valor aqui. Você precisa alterar sua biblioteca de destino? Tente alterar a opção de compilador 'lib' para es2015 ou posterior.",
+  "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_Do_you_need_to_change_your_target_library_2585": "'{0}' refere-se apenas a um tipo, mas está sendo usado como um valor aqui. Você precisa alterar sua biblioteca de destino? Tente alterar a opção 'lib' do compilador para es2015 ou posterior.",
   "_0_refers_to_a_UMD_global_but_the_current_file_is_a_module_Consider_adding_an_import_instead_2686": "'{0}' refere-se a uma UMD global, mas o arquivo atual é um módulo. Considere adicionar uma importação.",
   "_0_refers_to_a_value_but_is_being_used_as_a_type_here_Did_you_mean_typeof_0_2749": "'{0}' refere-se a um valor, mas está sendo usado como um tipo aqui. Você quis dizer 'typeof {0}'?",
   "_0_tag_already_specified_1223": "A marca '{0}' já foi especificada.",
@@ -1440,6 +1707,7 @@
   "_0_which_lacks_return_type_annotation_implicitly_has_an_1_yield_type_7055": "'{0}', que não tem a anotação de tipo de retorno, implicitamente tem um tipo de rendimento '{1}'.",
   "abstract_modifier_can_only_appear_on_a_class_method_or_property_declaration_1242": "O modificador 'abstract' pode aparecer somente em uma declaração de classe, método ou propriedade.",
   "and_here_6204": "e aqui.",
+  "arguments_cannot_be_referenced_in_property_initializers_2815": "'argumentos' não podem ser referenciados em inicializadores de propriedade.",
   "await_expressions_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_fi_1375": "As expressões 'await' só são permitidas no nível superior de um arquivo quando esse arquivo é um módulo, mas não tem importações ou exportações. Considere adicionar um 'export {}' vazio para transformar este arquivo em um módulo.",
   "await_expressions_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_1308": "As expressões 'await' só são permitidas em funções assíncronas e nos níveis superiores de módulos.",
   "await_expressions_cannot_be_used_in_a_parameter_initializer_2524": "As expressões 'await' não podem ser usadas em inicializadores de parâmetros.",
@@ -1456,6 +1724,7 @@
   "const_enums_can_only_be_used_in_property_or_index_access_expressions_or_the_right_hand_side_of_an_im_2475": "Enumerações 'const' só podem ser usadas em expressões de acesso de índice ou propriedade, ou então do lado direito de uma consulta de tipo, declaração de importação ou atribuição de exportação.",
   "constructor_cannot_be_used_as_a_parameter_property_name_2398": "Não é possível usar 'constructor' como nome de uma propriedade de parâmetro.",
   "constructor_is_a_reserved_word_18012": "'#constructor' é uma palavra reservada.",
+  "default_Colon_6903": "padrão:",
   "delete_cannot_be_called_on_an_identifier_in_strict_mode_1102": "'delete' não pode ser chamado em um identificador no modo estrito.",
   "delete_this_Project_0_is_up_to_date_because_it_was_previously_built_6360": "excluir isto – o Projeto '{0}' está atualizado porque ele já foi compilado",
   "export_Asterisk_does_not_re_export_a_default_1195": "'export *' não exporta novamente um padrão.",
@@ -1466,17 +1735,26 @@
   "extends_clause_of_exported_class_0_has_or_is_using_private_name_1_4020": "A cláusula 'extends' da classe exportada '{0}' tem ou está usando o nome particular '{1}'.",
   "extends_clause_of_exported_class_has_or_is_using_private_name_0_4021": "A cláusula 'extends' da classe exportada tem ou está usando o nome particular '{0}'.",
   "extends_clause_of_exported_interface_0_has_or_is_using_private_name_1_4022": "A cláusula 'extends' da interface exportada '{0}' tem ou está usando o nome particular '{1}'.",
+  "false_unless_composite_is_set_6906": "`false`, a menos que `composite` esteja definido",
+  "false_unless_strict_is_set_6905": "`false`, a menos que `strict` esteja definido",
   "file_6025": "arquivo",
+  "for_await_loops_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_file_1431": "Os loops 'for await' só são permitidos no nível superior de um arquivo quando esse arquivo é um módulo, mas este arquivo não tem importações nem exportações. Considere adicionar um 'export {}' vazio para transformar este arquivo em um módulo.",
+  "for_await_loops_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_1103": "Os loops 'for await' só são permitidos em funções assíncronas e nos níveis superiores dos módulos.",
   "get_and_set_accessor_must_have_the_same_this_type_2682": "os assessores 'set' e 'get' devem ter o mesmo tipo 'this'.",
-  "get_and_set_accessor_must_have_the_same_type_2380": "Os acessadores 'get' e 'set' devem ser do mesmo tipo.",
   "get_and_set_accessors_cannot_declare_this_parameters_2784": "os acessadores 'get' e 'set' não podem declarar os parâmetros 'this'.",
+  "if_files_is_specified_otherwise_Asterisk_Asterisk_Slash_Asterisk_6908": "`[]` se `files` for especificado, caso contrário `[\"**/*\"]5D;`",
   "implements_clause_already_seen_1175": "A cláusula 'implements' já foi vista.",
   "implements_clauses_can_only_be_used_in_TypeScript_files_8005": "Cláusulas 'implements' só podem ser usadas em arquivos TypeScript.",
   "import_can_only_be_used_in_TypeScript_files_8002": "'import ... =' só pode ser usado em arquivos TypeScript.",
   "infer_declarations_are_only_permitted_in_the_extends_clause_of_a_conditional_type_1338": "As declarações 'infer' só são permitidas na cláusula 'extends' de um tipo condicional.",
   "let_declarations_can_only_be_declared_inside_a_block_1157": "Declarações 'let' só podem ser declaradas dentro de um bloco.",
   "let_is_not_allowed_to_be_used_as_a_name_in_let_or_const_declarations_2480": "O uso de 'let' não é permitido como um nome em declarações 'let' ou 'const'.",
+  "module_AMD_or_UMD_or_System_or_ES6_then_Classic_Otherwise_Node_69010": "módulo === `AMD` ou `UMD` ou `System` ou `ES6` e `Classic`. Caso contrário, `Node`",
+  "module_system_or_esModuleInterop_6904": "módulo === \"system\" ou esModuleInterop",
   "new_expression_whose_target_lacks_a_construct_signature_implicitly_has_an_any_type_7009": "A expressão 'new', cujo destino não tem uma assinatura de constructo, implicitamente tem um tipo 'any'.",
+  "node_modules_bower_components_jspm_packages_plus_the_value_of_outDir_if_one_is_specified_6907": "`[\" node_modules \",\" bower_components \",\" jspm_packages \"]`, mais o valor de `outDir`, caso seja especificado.",
+  "one_of_Colon_6900": "um dos:",
+  "one_or_more_Colon_6901": "um ou mais:",
   "options_6024": "opções",
   "or_expected_1144": "'{' ou ';' esperado.",
   "package_json_does_not_have_a_0_field_6100": "'package.json' não tem um campo '{0}'.",
@@ -1507,6 +1785,9 @@
   "this_cannot_be_referenced_in_constructor_arguments_2333": "'this' não pode ser referenciado em argumentos de construtor.",
   "this_cannot_be_referenced_in_current_location_2332": "'this' não pode ser referenciado no local atual.",
   "this_implicitly_has_type_any_because_it_does_not_have_a_type_annotation_2683": "'this' implicitamente tem o tipo 'any' porque não tem uma anotação de tipo.",
+  "true_if_composite_false_otherwise_6909": "`true` se` composite`, `false` caso contrário",
+  "tsc_Colon_The_TypeScript_Compiler_6922": "tsc: o Compilador TypeScript",
+  "type_Colon_6902": "tipo:",
   "unique_symbol_types_are_not_allowed_here_1335": "Tipos de 'unique symbol' não são permitidos aqui.",
   "unique_symbol_types_are_only_allowed_on_variables_in_a_variable_statement_1334": "Tipos de 'unique symbol' são permitidos apenas em variáveis em uma declaração de variável.",
   "unique_symbol_types_may_not_be_used_on_a_variable_declaration_with_a_binding_name_1333": "Tipos de 'unique symbol' não podem ser usados em uma declaração de variável com um nome associado.",
@@ -1514,5 +1795,6 @@
   "use_strict_directive_used_here_1349": "A diretiva 'use strict' usada aqui.",
   "with_statements_are_not_allowed_in_an_async_function_block_1300": "As declarações 'with' não são permitidas em blocos de funções assíncronas.",
   "with_statements_are_not_allowed_in_strict_mode_1101": "Instruções 'with' não são permitidas no modo estrito.",
+  "yield_expression_implicitly_results_in_an_any_type_because_its_containing_generator_lacks_a_return_t_7057": "Expressão 'yield' resulta implicitamente em um tipo 'any' porque seu gerador contido não tem uma anotação de tipo de retorno.",
   "yield_expressions_cannot_be_used_in_a_parameter_initializer_2523": "As expressões 'yield' não podem ser usadas em inicializadores de parâmetros."
 }
\ No newline at end of file
diff --git a/node_modules/typescript/lib/ru/diagnosticMessages.generated.json b/node_modules/typescript/lib/ru/diagnosticMessages.generated.json
index 438b21a..bb728fd 100644
--- a/node_modules/typescript/lib/ru/diagnosticMessages.generated.json
+++ b/node_modules/typescript/lib/ru/diagnosticMessages.generated.json
@@ -1,4 +1,5 @@
 {
+  "ALL_COMPILER_OPTIONS_6917": "ВСЕ ПАРАМЕТРЫ КОМПИЛЯТОРОВ",
   "A_0_modifier_cannot_be_used_with_an_import_declaration_1079": "Модификатор \"{0}\" не может быть использован с объявлением импорта.",
   "A_0_modifier_cannot_be_used_with_an_interface_declaration_1045": "Модификатор \"{0}\" не может быть использован с объявлением интерфейса.",
   "A_0_parameter_must_be_the_first_parameter_2680": "В качестве первого параметра необходимо указать \"{0}\".",
@@ -15,7 +16,7 @@
   "A_class_member_cannot_have_the_0_keyword_1248": "Элемент класса не может иметь ключевое слово \"{0}\".",
   "A_comma_expression_is_not_allowed_in_a_computed_property_name_1171": "Выражение с запятой запрещено в имени вычисляемого свойства.",
   "A_computed_property_name_cannot_reference_a_type_parameter_from_its_containing_type_2467": "Имя вычисляемого свойства не может ссылаться на параметр типа из содержащего его типа.",
-  "A_computed_property_name_in_a_class_property_declaration_must_refer_to_an_expression_whose_type_is_a_1166": "Имя вычисляемого свойства в объявлении свойств класса должно ссылаться на выражение, тип которого — литерал или \"unique symbol\".",
+  "A_computed_property_name_in_a_class_property_declaration_must_have_a_simple_literal_type_or_a_unique_1166": "Имя вычисляемого свойства в объявлении свойства класса должно иметь тип простого литерала или тип \"уникальный символ\".",
   "A_computed_property_name_in_a_method_overload_must_refer_to_an_expression_whose_type_is_a_literal_ty_1168": "Имя вычисляемого свойства в перегрузке метода должно ссылаться на выражение, тип которого — литерал или \"unique symbol\".",
   "A_computed_property_name_in_a_type_literal_must_refer_to_an_expression_whose_type_is_a_literal_type__1170": "Имя вычисляемого свойства в литерале должно ссылаться на выражение, тип которого — литерал или \"unique symbol\".",
   "A_computed_property_name_in_an_ambient_context_must_refer_to_an_expression_whose_type_is_a_literal_t_1165": "Имя вычисляемого свойства в окружающем контексте должно ссылаться на выражение, тип которого — литерал или \"unique symbol\".",
@@ -33,24 +34,25 @@
   "A_decorator_can_only_decorate_a_method_implementation_not_an_overload_1249": "Декоратор может только декорировать реализацию метода, а не перегрузку.",
   "A_default_clause_cannot_appear_more_than_once_in_a_switch_statement_1113": "Предложение default не может повторяться в операторе switch.",
   "A_default_export_can_only_be_used_in_an_ECMAScript_style_module_1319": "Экспорт по умолчанию можно использовать только в модуле в стиле ECMAScript.",
+  "A_default_export_must_be_at_the_top_level_of_a_file_or_module_declaration_1258": "Экспорт по умолчанию должен находиться на верхнем уровне объявления файла или модуля.",
   "A_definite_assignment_assertion_is_not_permitted_in_this_context_1255": "Утверждение определенного назначения \"!\" запрещено в этом контексте.",
   "A_destructuring_declaration_must_have_an_initializer_1182": "Объявление деструктурирования должно включать инициализатор.",
-  "A_dynamic_import_call_in_ES5_SlashES3_requires_the_Promise_constructor_Make_sure_you_have_a_declarat_2712": "Для вызова динамического импорта в ES5/ES3 требуется конструктор \"Promise\". Объявите конструктор \"Promise\" или включите \"ES2015\" в параметр \"--lib\".",
-  "A_dynamic_import_call_returns_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_include_ES20_2711": "Вызов динамического импорта возвращает конструктор \"Promise\". Объявите конструктор \"Promise\" или включите \"ES2015\" в параметр \"--lib\".",
+  "A_dynamic_import_call_in_ES5_SlashES3_requires_the_Promise_constructor_Make_sure_you_have_a_declarat_2712": "Для вызова динамического импорта в ES5/ES3 требуется конструктор \"Promise\". Убедитесь в наличии объявления для конструктора \"Promise\" или включите \"ES2015\" в параметр \"--lib\".",
+  "A_dynamic_import_call_returns_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_include_ES20_2711": "Вызов динамического импорта возвращает \"Promise\". Убедитесь в наличии объявления для \"Promise\" или включите \"ES2015\" в параметр \"--lib\".",
   "A_file_cannot_have_a_reference_to_itself_1006": "Файл не может содержать ссылку на самого себя.",
-  "A_for_await_of_statement_is_only_allowed_within_an_async_function_or_async_generator_1103": "Оператор for-await-of разрешено использовать только в асинхронной функции или в асинхронном генераторе.",
   "A_function_returning_never_cannot_have_a_reachable_end_point_2534": "Функция, возвращающая \"never\", не может иметь доступную конечную точку.",
   "A_function_that_is_called_with_the_new_keyword_cannot_have_a_this_type_that_is_void_2679": "Функция, которая вызывается с ключевым словом new, не может иметь тип this со значением void.",
   "A_function_whose_declared_type_is_neither_void_nor_any_must_return_a_value_2355": "Функция, объявленный тип которой не является void или any, должна возвращать значение.",
   "A_generator_cannot_have_a_void_type_annotation_2505": "Генератор не может иметь аннотацию типа void.",
   "A_get_accessor_cannot_have_parameters_1054": "Метод доступа get не может иметь параметров.",
+  "A_get_accessor_must_be_at_least_as_accessible_as_the_setter_2808": "Метод доступа get должен быть доступным как минимум в той же мере, что и метод задания.",
   "A_get_accessor_must_return_a_value_2378": "Метод доступа get должен возвращать значение.",
   "A_label_is_not_allowed_here_1344": "Метка здесь запрещена.",
   "A_labeled_tuple_element_is_declared_as_optional_with_a_question_mark_after_the_name_and_before_the_c_5086": "Элемент маркированного кортежа объявлен как необязательный с вопросительным знаком между именем и двоеточием, а не после типа.",
-  "A_labeled_tuple_element_is_declared_as_rest_with_a_before_the_name_rather_than_before_the_type_5087": "Элемент маркированного кортежа объявлен как rest с многоточием перед именем, а не перед типом.",
+  "A_labeled_tuple_element_is_declared_as_rest_with_a_before_the_name_rather_than_before_the_type_5087": "Маркированный элемент кортежа объявлен как rest с многоточием перед именем, а не перед типом.",
   "A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_memb_2651": "Инициализатор элемента в объявлении перечисления не может ссылаться на элементы, объявленные после него, включая элементы, определенные в других перечислениях.",
-  "A_method_cannot_be_named_with_a_private_identifier_18022": "Метод не может иметь имя с закрытым идентификатором.",
   "A_mixin_class_must_have_a_constructor_with_a_single_rest_parameter_of_type_any_2545": "Класс примеси должен иметь конструктор с одиночным параметром REST типа any[].",
+  "A_mixin_class_that_extends_from_a_type_variable_containing_an_abstract_construct_signature_must_also_2797": "Класс примеси, который наследуется от переменной типа, содержащей сигнатуру абстрактной конструкции, должен быть также объявлен как \"abstract\".",
   "A_module_cannot_have_multiple_default_exports_2528": "Модуль не может иметь несколько импортов по умолчанию.",
   "A_namespace_declaration_cannot_be_in_a_different_file_from_a_class_or_function_with_which_it_is_merg_2433": "Объявление пространства имен и класс или функция, с которыми оно объединено, не могут находится в разных файлах.",
   "A_namespace_declaration_cannot_be_located_prior_to_a_class_or_function_with_which_it_is_merged_2434": "Объявление пространства имен не может располагаться раньше класса или функции, с которыми оно объединено.",
@@ -71,10 +73,10 @@
   "A_required_element_cannot_follow_an_optional_element_1257": "Обязательный элемент не должен следовать за необязательным.",
   "A_required_parameter_cannot_follow_an_optional_parameter_1016": "Обязательный параметр не должен следовать за необязательным.",
   "A_rest_element_cannot_contain_a_binding_pattern_2501": "Элемент rest не может содержать шаблон привязки.",
+  "A_rest_element_cannot_follow_another_rest_element_1265": "Элемент rest не может следовать за другим элементом rest.",
   "A_rest_element_cannot_have_a_property_name_2566": "Элемент rest не может иметь имя свойства.",
   "A_rest_element_cannot_have_an_initializer_1186": "Элемент rest не может содержать инициализатор.",
   "A_rest_element_must_be_last_in_a_destructuring_pattern_2462": "Элемент REST должен быть последним в шаблоне деструктуризации.",
-  "A_rest_element_must_be_last_in_a_tuple_type_1256": "Элемент rest должен быть последним в типе кортежа.",
   "A_rest_element_type_must_be_an_array_type_2574": "Элемент rest должен иметь тип массива.",
   "A_rest_parameter_cannot_be_optional_1047": "Параметр rest не может быть необязательным.",
   "A_rest_parameter_cannot_have_an_initializer_1048": "Параметр rest не может иметь инициализатор.",
@@ -82,6 +84,7 @@
   "A_rest_parameter_must_be_of_an_array_type_2370": "Параметр rest должен иметь тип массива.",
   "A_rest_parameter_or_binding_pattern_may_not_have_a_trailing_comma_1013": "После параметра rest или шаблона привязки не может стоять запятая.",
   "A_return_statement_can_only_be_used_within_a_function_body_1108": "Оператор return можно использовать только в теле функции.",
+  "A_return_statement_cannot_be_used_inside_a_class_static_block_18041": "Оператор return нельзя использовать внутри статического блока класса.",
   "A_series_of_entries_which_re_map_imports_to_lookup_locations_relative_to_the_baseUrl_6167": "Серия записей, которая повторно сопоставляет импорты с расположениями поиска, заданными относительно baseUrl.",
   "A_set_accessor_cannot_have_a_return_type_annotation_1095": "Метод доступа set не может иметь заметку с типом возвращаемого значения.",
   "A_set_accessor_cannot_have_an_optional_parameter_1051": "Метод доступа set не может иметь необязательный параметр.",
@@ -89,6 +92,7 @@
   "A_set_accessor_must_have_exactly_one_parameter_1049": "У метода доступа set должен быть ровно один параметр.",
   "A_set_accessor_parameter_cannot_have_an_initializer_1052": "Параметр метода доступа set не может иметь инициализатор.",
   "A_signature_with_an_implementation_cannot_use_a_string_literal_type_2381": "Сигнатура с реализацией не может использовать тип строкового литерала.",
+  "A_spread_argument_must_either_have_a_tuple_type_or_be_passed_to_a_rest_parameter_2556": "Аргумент расширения должен иметь тип кортежа либо передаваться в параметр rest.",
   "A_super_call_must_be_the_first_statement_in_the_constructor_when_a_class_contains_initialized_proper_2376": "Вызов \"super\" должен быть первой инструкцией в конструкторе, если класс содержит инициализированные свойства, свойства параметров или закрытые идентификаторы.",
   "A_this_based_type_guard_is_not_compatible_with_a_parameter_based_type_guard_2518": "Условие типа this несовместимо с условием типа на основе параметров.",
   "A_this_type_is_available_only_in_a_non_static_member_of_a_class_or_interface_2526": "Тип this доступен только в нестатическом элементе класса или интерфейса.",
@@ -114,8 +118,11 @@
   "Add_a_return_statement_95111": "Добавить оператор return",
   "Add_all_missing_async_modifiers_95041": "Добавить все отсутствующие модификаторы \"async\"",
   "Add_all_missing_call_parentheses_95068": "Добавить все недостающие скобки вызова",
+  "Add_all_missing_function_declarations_95157": "Добавить все недостающие объявления функций",
   "Add_all_missing_imports_95064": "Добавить все отсутствующие импорты",
   "Add_all_missing_members_95022": "Добавить все отсутствующие элементы",
+  "Add_all_missing_override_modifiers_95162": "Добавьте все отсутствующие модификаторы \"override\".",
+  "Add_all_missing_properties_95166": "Добавить все отсутствующие свойства",
   "Add_all_missing_return_statement_95114": "Добавить все отсутствующие операторы return",
   "Add_all_missing_super_calls_95039": "Добавить все отсутствующие вызовы super",
   "Add_async_modifier_to_containing_function_90029": "Добавьте модификатор async в содержащую функцию",
@@ -135,18 +142,22 @@
   "Add_initializers_to_all_uninitialized_properties_95027": "Добавить инициализаторы ко всем неинициализированным свойствам",
   "Add_missing_call_parentheses_95067": "Добавить недостающие скобки вызова",
   "Add_missing_enum_member_0_95063": "Добавить отсутствующий член перечисления \"{0}\"",
+  "Add_missing_function_declaration_0_95156": "Добавить недостающее объявление функции \"{0}\"",
   "Add_missing_new_operator_to_all_calls_95072": "Добавить отсутствующий оператор \"new\" во все вызовы",
   "Add_missing_new_operator_to_call_95071": "Добавить отсутствующий оператор \"new\" в вызов",
+  "Add_missing_properties_95165": "Добавить отсутствующие свойства",
   "Add_missing_super_call_90001": "Добавьте отсутствующий вызов \"super()\"",
   "Add_missing_typeof_95052": "Добавить отсутствующий \"typeof\"",
   "Add_names_to_all_parameters_without_names_95073": "Добавить имена ко всем параметрам без имен",
   "Add_or_remove_braces_in_an_arrow_function_95058": "Добавить скобки в стрелочную функцию или удалить скобки из нее",
+  "Add_override_modifier_95160": "Добавьте модификатор \"override\".",
   "Add_parameter_name_90034": "Добавить имя параметра",
   "Add_qualifier_to_all_unresolved_variables_matching_a_member_name_95037": "Добавить квалификатор ко всем неразрешенным переменным, соответствующим имени члена",
   "Add_this_parameter_95104": "Добавьте параметр this.",
   "Add_this_tag_95103": "Добавить тег @this",
   "Add_to_all_uncalled_decorators_95044": "Добавить \"()\" ко всем невызванным декораторам",
   "Add_ts_ignore_to_all_error_messages_95042": "Добавить \"@ts-ignore\" ко всем сообщениям об ошибках",
+  "Add_undefined_to_a_type_when_accessed_using_an_index_6674": "Добавить \"undefined\" к типу при доступе с использованием индекса.",
   "Add_undefined_type_to_all_uninitialized_properties_95029": "Добавить неопределенный тип ко всем неинициализированным свойствам",
   "Add_undefined_type_to_property_0_95018": "Добавить тип \"undefined\" к свойству \"{0}\"",
   "Add_unknown_conversion_for_non_overlapping_types_95069": "Добавить преобразование \"unknown\" для неперекрывающихся типов",
@@ -154,8 +165,6 @@
   "Add_void_to_Promise_resolved_without_a_value_95143": "Добавить \"void\" в Promise (обещание), разрешенное без значения",
   "Add_void_to_all_Promises_resolved_without_a_value_95144": "Добавить \"void\" во все Promise (обещания), разрешенные без значения",
   "Adding_a_tsconfig_json_file_will_help_organize_projects_that_contain_both_TypeScript_and_JavaScript__5068": "Добавление файла tsconfig.json поможет организовать проекты, содержащие файлы TypeScript и JavaScript. Дополнительные сведения: https://aka.ms/tsconfig.",
-  "Additional_Checks_6176": "Дополнительные проверки",
-  "Advanced_Options_6178": "Дополнительные параметры",
   "All_declarations_of_0_must_have_identical_modifiers_2687": "Все объявления \"{0}\" должны иметь одинаковые модификаторы.",
   "All_declarations_of_0_must_have_identical_type_parameters_2428": "Все объявления \"{0}\" должны иметь одинаковые параметры типа.",
   "All_declarations_of_an_abstract_method_must_be_consecutive_2516": "Все объявления абстрактных методов должны быть последовательными.",
@@ -163,34 +172,38 @@
   "All_imports_in_import_declaration_are_unused_6192": "Ни один из импортов в объявлении импорта не используется.",
   "All_type_parameters_are_unused_6205": "Ни один из параметров типа не используется.",
   "All_variables_are_unused_6199": "Ни одна переменная не используется.",
-  "Allow_accessing_UMD_globals_from_modules_95076": "Разрешение обращения к глобальным значениям UMD из модулей.",
+  "Allow_JavaScript_files_to_be_a_part_of_your_program_Use_the_checkJS_option_to_get_errors_from_these__6600": "Разрешите файлам JavaScript быть частью программы. Используйте параметр \"checkJS\" для получения ошибок из этих файлов.",
+  "Allow_accessing_UMD_globals_from_modules_6602": "Разрешение обращения к глобальным значениям UMD из модулей.",
   "Allow_default_imports_from_modules_with_no_default_export_This_does_not_affect_code_emit_just_typech_6011": "Разрешить импорт по умолчанию из модулей без экспорта по умолчанию. Это не повлияет на выведение кода — только на проверку типов.",
+  "Allow_import_x_from_y_when_a_module_doesn_t_have_a_default_export_6601": "Разрешить \"импортировать x из y\", если модуль не имеет экспорта по умолчанию.",
+  "Allow_importing_helper_functions_from_tslib_once_per_project_instead_of_including_them_per_file_6639": "Разрешить импортировать вспомогательныхе функции из tslib один раз для каждого проекта, а не включать их для каждого файла.",
   "Allow_javascript_files_to_be_compiled_6102": "Разрешить компиляцию файлов javascript.",
+  "Allow_multiple_folders_to_be_treated_as_one_when_resolving_modules_6691": "Разрешить обрабатывать несколько папок как одну при разрешении модулей.",
   "Already_included_file_name_0_differs_from_file_name_1_only_in_casing_1261": "Уже включенное имя файла \"{0}\" отличается от имени файла \"{1}\" только регистром.",
   "Ambient_module_declaration_cannot_specify_relative_module_name_2436": "Объявление окружающего модуля не может содержать относительное имя модуля.",
   "Ambient_modules_cannot_be_nested_in_other_modules_or_namespaces_2435": "Внешний модуль не может быть вложен в другие модули или пространства имен.",
   "An_AMD_module_cannot_have_multiple_name_assignments_2458": "Модуль AMD не может иметь несколько назначений имен.",
   "An_abstract_accessor_cannot_have_an_implementation_1318": "У абстрактного метода доступа не может быть реализации.",
   "An_accessibility_modifier_cannot_be_used_with_a_private_identifier_18010": "Модификатор специальных возможностей запрещено использовать с закрытым идентификатором.",
-  "An_accessor_cannot_be_named_with_a_private_identifier_18023": "Метод доступа не может иметь имя с закрытым идентификатором.",
   "An_accessor_cannot_have_type_parameters_1094": "Метод доступа не может иметь параметры типа.",
   "An_ambient_module_declaration_is_only_allowed_at_the_top_level_in_a_file_1234": "Объявление окружающего модуля разрешено использовать только в рамках верхнего уровня файла.",
   "An_argument_for_0_was_not_provided_6210": "Не указан аргумент для \"{0}\".",
   "An_argument_matching_this_binding_pattern_was_not_provided_6211": "Не указан аргумент, соответствующий этому шаблону привязки.",
   "An_arithmetic_operand_must_be_of_type_any_number_bigint_or_an_enum_type_2356": "Арифметический операнд должен иметь тип \"any\", \"number\", \"bigint\" или тип перечисления.",
   "An_arrow_function_cannot_have_a_this_parameter_2730": "Стрелочная функция не может иметь параметр \"this\".",
-  "An_async_function_or_method_in_ES5_SlashES3_requires_the_Promise_constructor_Make_sure_you_have_a_de_2705": "Асинхронной функции или методу ES5/ES3 требуется конструктор Promise. Убедитесь, что имеется объявление для конструктора Promise или включите ES2015 в параметр \"--lib\".",
+  "An_async_function_or_method_in_ES5_SlashES3_requires_the_Promise_constructor_Make_sure_you_have_a_de_2705": "Асинхронной функции или методу ES5/ES3 требуется конструктор \"Promise\". Убедитесь в наличии объявления для конструктора \"Promise\" или включите \"ES2015\" в параметр \"--lib\".",
   "An_async_function_or_method_must_have_a_valid_awaitable_return_type_1057": "Асинхронная функция или метод должны иметь допустимый тип возвращаемого значения, поддерживающий ожидание.",
-  "An_async_function_or_method_must_return_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_in_2697": "Асинхронная функция или метод должны вернуть Promise. Убедитесь, что у вас есть объявление для Promise или включите ES2015 в параметр --lib.",
+  "An_async_function_or_method_must_return_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_in_2697": "Асинхронная функция или метод должны вернуть \"Promise\". Убедитесь в наличии объявления для \"Promise\" или включите \"ES2015\" в параметр \"--lib\".",
   "An_async_iterator_must_have_a_next_method_2519": "В асинхронном итераторе должен быть метод next().",
   "An_element_access_expression_should_take_an_argument_1011": "Выражение доступа к элементу должно принимать аргумент.",
   "An_enum_member_cannot_be_named_with_a_private_identifier_18024": "Член перечисления не может иметь имя с закрытым идентификатором.",
   "An_enum_member_cannot_have_a_numeric_name_2452": "Имя элемента перечисления не может быть числовым.",
   "An_enum_member_name_must_be_followed_by_a_or_1357": "После имени члена перечисления должен стоять знак \",\", \"=\" или \"}\".",
-  "An_export_assignment_can_only_be_used_in_a_module_1231": "Назначение экспорта может быть использовано только в модуле.",
+  "An_expanded_version_of_this_information_showing_all_possible_compiler_options_6928": "Расширенная версия этих сведений, в которой показаны все возможные параметры компиляторов",
   "An_export_assignment_cannot_be_used_in_a_module_with_other_exported_elements_2309": "Назначение экспорта нельзя использовать в модуле с другими экспортированными элементами.",
   "An_export_assignment_cannot_be_used_in_a_namespace_1063": "Назначение экспорта нельзя использовать в пространстве имен.",
   "An_export_assignment_cannot_have_modifiers_1120": "Назначение экспорта не может иметь модификаторы.",
+  "An_export_assignment_must_be_at_the_top_level_of_a_file_or_module_declaration_1231": "Назначение экспорта должно находиться на верхнем уровне объявления файла или модуля.",
   "An_export_declaration_can_only_be_used_in_a_module_1233": "Объявление экспорта может быть использовано только в модуле.",
   "An_export_declaration_cannot_have_modifiers_1193": "Объявление экспорта не может иметь модификаторы.",
   "An_expression_of_type_void_cannot_be_tested_for_truthiness_1345": "Выражение типа \"void\" не может быть проверено на истинность.",
@@ -212,9 +225,8 @@
   "An_index_signature_parameter_cannot_have_an_accessibility_modifier_1018": "Параметра сигнатуры индекса не может содержать модификатор специальных возможностей.",
   "An_index_signature_parameter_cannot_have_an_initializer_1020": "Параметр сигнатуры индекса не может содержать инициализатор.",
   "An_index_signature_parameter_must_have_a_type_annotation_1022": "У параметра сигнатуры индекса должна быть аннотация типа.",
-  "An_index_signature_parameter_type_cannot_be_a_type_alias_Consider_writing_0_Colon_1_Colon_2_instead_1336": "Тип параметра сигнатуры индекса не может быть псевдонимом типа. Вместо этого рекомендуется написать \"[{0}: {1}]: {2}\".",
-  "An_index_signature_parameter_type_cannot_be_a_union_type_Consider_using_a_mapped_object_type_instead_1337": "Тип параметра сигнатуры индекса не может быть типом объединения. Рекомендуется использовать тип сопоставляемого объекта.",
-  "An_index_signature_parameter_type_must_be_either_string_or_number_1023": "Параметр сигнатуры индекса должен иметь тип \"string\" или \"number\".",
+  "An_index_signature_parameter_type_cannot_be_a_literal_type_or_generic_type_Consider_using_a_mapped_o_1337": "Тип параметра сигнатуры индекса не может быть типом литерала или универсальным типом. Рекомендуется использовать тип сопоставляемого объекта.",
+  "An_index_signature_parameter_type_must_be_string_number_symbol_or_a_template_literal_type_1268": "Тип параметра сигнатуры индекса должен быть строкой, числом, символом или типом литерала шаблона.",
   "An_interface_can_only_extend_an_identifier_Slashqualified_name_with_optional_type_arguments_2499": "Интерфейс может расширить только идентификатор или полное имя с дополнительными аргументами типа.",
   "An_interface_can_only_extend_an_object_type_or_intersection_of_object_types_with_statically_known_me_2312": "Интерфейс может расширять только тип объекта или пересечение типов объектов со статическими известными членами.",
   "An_interface_property_cannot_have_an_initializer_1246": "Свойство интерфейса не может иметь инициализатор.",
@@ -225,6 +237,7 @@
   "An_object_literal_cannot_have_property_and_accessor_with_the_same_name_1119": "Объектный литерал не может иметь свойство и метод доступа с одинаковым именем.",
   "An_object_member_cannot_be_declared_optional_1162": "Элемент объекта не может быть объявлен необязательным.",
   "An_optional_chain_cannot_contain_private_identifiers_18030": "Необязательная цепочка не может содержать закрытые идентификаторы.",
+  "An_optional_element_cannot_follow_a_rest_element_1266": "Необязательный элемент не может следовать за элементом rest.",
   "An_outer_value_of_this_is_shadowed_by_this_container_2738": "Этот контейнер затемняет внешнее значение \"this\".",
   "An_overload_signature_cannot_be_declared_as_a_generator_1222": "Сигнатура перегрузки не может быть объявлена в качестве генератора.",
   "An_unary_expression_with_the_0_operator_is_not_allowed_in_the_left_hand_side_of_an_exponentiation_ex_17006": "Унарное выражение с оператором \"{0}\" не допускается в левой части выражения, возводимого в степень. Попробуйте заключить выражение в скобки.",
@@ -244,33 +257,47 @@
   "Augmentations_for_the_global_scope_can_only_be_directly_nested_in_external_modules_or_ambient_module_2669": "Улучшения для глобальной области могут быть вложены во внешние модули или неоднозначные объявления модулей только напрямую.",
   "Augmentations_for_the_global_scope_should_have_declare_modifier_unless_they_appear_in_already_ambien_2670": "Улучшения для глобальной области не должны иметь модификатор declare, если они отображаются в окружающем контексте.",
   "Auto_discovery_for_typings_is_enabled_in_project_0_Running_extra_resolution_pass_for_module_1_using__6140": "Автообнаружение для вводимых данных включено в проекте \"{0}\". Идет запуск дополнительного этапа разрешения для модуля \"{1}\" с использованием расположения кэша \"{2}\".",
+  "Await_expression_cannot_be_used_inside_a_class_static_block_18037": "Выражение Await нельзя использовать внутри статического блока класса.",
+  "BUILD_OPTIONS_6919": "ПАРАМЕТРЫ СБОРКИ",
+  "Backwards_Compatibility_6253": "Обратная совместимость",
   "Base_class_expressions_cannot_reference_class_type_parameters_2562": "Выражения базового класса не могут ссылаться на параметры типа класса.",
   "Base_constructor_return_type_0_is_not_an_object_type_or_intersection_of_object_types_with_statically_2509": "Тип возвращаемого значения базового конструктора \"{0}\" не является ни типом объекта, ни пересечением типов объектов со статическими известными членами.",
   "Base_constructors_must_all_have_the_same_return_type_2510": "Конструкторы базового класса должны иметь одинаковые типы возвращаемых значений.",
   "Base_directory_to_resolve_non_absolute_module_names_6083": "Базовый каталог для разрешения неабсолютных имен модуля.",
-  "Basic_Options_6172": "Базовые параметры",
   "BigInt_literals_are_not_available_when_targeting_lower_than_ES2020_2737": "Литералы типа bigint недоступны при нацеливании на версию ниже ES2020.",
   "Binary_digit_expected_1177": "Ожидался бит.",
   "Binding_element_0_implicitly_has_an_1_type_7031": "Элемент привязки \"{0}\" имеет неявный тип \"{1}\".",
   "Block_scoped_variable_0_used_before_its_declaration_2448": "Переменная \"{0}\" с областью видимости, ограниченной блоком, использована перед своим объявлением.",
-  "Build_all_projects_including_those_that_appear_to_be_up_to_date_6368": "Собрать все проекты, включая не требующие обновления",
+  "Build_a_composite_project_in_the_working_directory_6925": "Создание составного проекта в рабочей папке.",
+  "Build_all_projects_including_those_that_appear_to_be_up_to_date_6636": "Собрать все проекты, включая не требующие обновления",
   "Build_one_or_more_projects_and_their_dependencies_if_out_of_date_6364": "Собрать один проект или несколько и их зависимости, если они не обновлены",
   "Build_option_0_requires_a_value_of_type_1_5073": "Параметр сборки \"{0}\" требует значение типа {1}.",
   "Building_project_0_6358": "Сборка проекта \"{0}\"...",
+  "COMMAND_LINE_FLAGS_6921": "ФЛАГИ КОМАНДНОЙ СТРОКИ",
+  "COMMON_COMMANDS_6916": "ОБЩИЕ КОМАНДЫ",
+  "COMMON_COMPILER_OPTIONS_6920": "ОБЩИЕ ПАРАМЕТРЫ КОМПИЛЯТОРОВ",
   "Call_decorator_expression_90028": "Вызовите выражение декоратора",
   "Call_signature_return_types_0_and_1_are_incompatible_2202": "Типы возвращаемых значений сигнатур вызовов \"{0}\" и \"{1}\" несовместимы.",
   "Call_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type_7020": "Сигнатура вызова, у которой нет аннотации типа возвращаемого значения, неявно имеет тип возвращаемого значения any.",
   "Call_signatures_with_no_arguments_have_incompatible_return_types_0_and_1_2204": "Сигнатуры вызова без аргументов имеют несовместимые типы возвращаемых значений \"{0}\" и \"{1}\".",
   "Call_target_does_not_contain_any_signatures_2346": "Объект вызова не содержит сигнатуры.",
   "Can_only_convert_logical_AND_access_chains_95142": "Можно преобразовывать только цепочки доступа с логическим И.",
+  "Can_only_convert_named_export_95164": "Можно преобразовать только именованный экспорт.",
   "Can_only_convert_property_with_modifier_95137": "Можно только преобразовать свойство с модификатором",
+  "Can_only_convert_string_concatenation_95154": "Можно только преобразовать объединение строк.",
   "Cannot_access_0_1_because_0_is_a_type_but_not_a_namespace_Did_you_mean_to_retrieve_the_type_of_the_p_2713": "Не удается получить доступ к {0}.{1}, так как {0} является типом, но не является пространством имен. Вы хотели получить тип свойства {1} в {0} с использованием {0}[\"{1}\"]?",
   "Cannot_access_ambient_const_enums_when_the_isolatedModules_flag_is_provided_2748": "Не удается обратиться к перечислениям внешних констант, если задан флаг \"--isolatedModules\".",
   "Cannot_assign_a_0_constructor_type_to_a_1_constructor_type_2672": "Не удается назначить тип конструктора \"{0}\" для типа конструктора \"{1}\".",
   "Cannot_assign_an_abstract_constructor_type_to_a_non_abstract_constructor_type_2517": "Не удается назначить тип конструктора абстрактного класса для типа конструктора класса, не являющегося абстрактным.",
+  "Cannot_assign_to_0_because_it_is_a_class_2629": "Не удается задать значение для \"{0}\", так как это класс.",
   "Cannot_assign_to_0_because_it_is_a_constant_2588": "Не удается задать значение для \"{0}\", так как это константа.",
+  "Cannot_assign_to_0_because_it_is_a_function_2630": "Не удается задать значение для \"{0}\", так как это функция.",
+  "Cannot_assign_to_0_because_it_is_a_namespace_2631": "Не удается задать значение для \"{0}\", так как это пространство имен.",
   "Cannot_assign_to_0_because_it_is_a_read_only_property_2540": "Не удается задать значение для \"{0}\", так как это свойство, доступное только для чтения.",
+  "Cannot_assign_to_0_because_it_is_an_enum_2628": "Не удается задать значение для \"{0}\", так как это перечисление.",
+  "Cannot_assign_to_0_because_it_is_an_import_2632": "Не удается задать значение для \"{0}\", так как это импорт.",
   "Cannot_assign_to_0_because_it_is_not_a_variable_2539": "Не удается задать значение для \"{0}\", так как это не переменная.",
+  "Cannot_assign_to_private_method_0_Private_methods_are_not_writable_2803": "Не удается присвоить значение частному методу \"{0}\". Частные методы недоступны для записи.",
   "Cannot_augment_module_0_because_it_resolves_to_a_non_module_entity_2671": "Не удается улучшить модуль \"{0}\", так как он разрешается в немодульную сущность.",
   "Cannot_augment_module_0_with_value_exports_because_it_resolves_to_a_non_module_entity_2649": "Невозможно добавить экспорт значений в модуль \"{0}\", так как он разрешается в немодульную сущность.",
   "Cannot_compile_modules_using_option_0_unless_the_module_flag_is_amd_or_system_6131": "Невозможно скомпилировать модули с использованием параметра \"{0}\", если флаг \"--module\" не имеет значения \"amd\" или \"system\".",
@@ -295,11 +322,11 @@
   "Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_2583": "Не удается найти имя \"{0}\". Вы хотите изменить целевую библиотеку? Попробуйте изменить параметр компилятора \"lib\" на \"{1}\" или более поздней версии.",
   "Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_2584": "Не удается найти имя \"{0}\". Вы хотите изменить целевую библиотеку? Попробуйте изменить параметр компилятора \"lib\", включив \"dom\".",
   "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_a_test_runner_Try_npm_i_save_dev_type_2582": "Не удается найти имя \"{0}\". Вы хотите установить определения типов для средства запуска тестов? Попробуйте использовать команды \"npm i --save-dev @types/jest\" или \"npm i --save-dev @types/mocha\".",
-  "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_a_test_runner_Try_npm_i_save_dev_type_2593": "Не удается найти имя \"{0}\". Вы хотите установить определения типов для средства запуска тестов? Попробуйте использовать команды \"npm i --save-dev @types/jest\" или \"npm i --save-dev @types/mocha\", а затем добавить \"jest\" или \"mocha\" в поле типов в файле tsconfig.",
+  "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_a_test_runner_Try_npm_i_save_dev_type_2593": "Не удается найти имя \"{0}\". Вы хотите установить определения типов для средства выполнения тестов? Попробуйте использовать `npm i --save-dev @types/jest` или `npm i --save-dev @types/mocha`, а затем добавьте \"jest\" или \"mocha\" в поле типов в файле tsconfig.",
   "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_jQuery_Try_npm_i_save_dev_types_Slash_2581": "Не удается найти имя \"{0}\". Вы хотите установить определения типов для jQuery? Попробуйте использовать команду \"npm i --save-dev @types/jquery\".",
-  "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_jQuery_Try_npm_i_save_dev_types_Slash_2592": "Не удается найти имя \"{0}\". Вы хотите установить определения типов для jQuery? Попробуйте использовать команду \"npm i --save-dev @types/jquery\", а затем добавить \"jquery\" в поле типов в файле tsconfig.",
+  "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_jQuery_Try_npm_i_save_dev_types_Slash_2592": "Не удается найти имя \"{0}\". Вы хотите установить определения типов для jQuery? Попробуйте использовать `npm i --save-dev @types/jquery`, а затем добавить \"jquery\" в поле типов в файле tsconfig.",
   "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_node_Try_npm_i_save_dev_types_Slashno_2580": "Не удается найти имя \"{0}\". Вы хотите установить определения типов для узла? Попробуйте использовать команду \"npm i --save-dev @types/node\".",
-  "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_node_Try_npm_i_save_dev_types_Slashno_2591": "Не удается найти имя \"{0}\". Вы хотите установить определения типов для узла? Попробуйте использовать команду \"npm i --save-dev @types/node\", а затем добавить \"node\" в поле типов в файле tsconfig.",
+  "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_node_Try_npm_i_save_dev_types_Slashno_2591": "Не удается найти имя \"{0}\". Вы хотите установить определения типов для узла? Попробуйте использовать `npm i --save-dev @types/node`, а затем добавьте \"node\" в поле типов в файле tsconfig.",
   "Cannot_find_namespace_0_2503": "Не удается найти пространство имен \"{0}\".",
   "Cannot_find_parameter_0_1225": "Не удается найти параметр \"{0}\".",
   "Cannot_find_the_common_subdirectory_path_for_the_input_files_5009": "Не удается найти общий путь к подкаталогу для входных файлов.",
@@ -318,11 +345,13 @@
   "Cannot_redeclare_block_scoped_variable_0_2451": "Невозможно повторно объявить переменную \"{0}\" с областью видимости \"Блок\".",
   "Cannot_redeclare_exported_variable_0_2323": "Не удается повторно объявить экспортированную переменную \"{0}\".",
   "Cannot_redeclare_identifier_0_in_catch_clause_2492": "Невозможно повторно объявить идентификатор \"{0}\" в операторе catch.",
+  "Cannot_start_a_function_call_in_a_type_annotation_1441": "Не удается запустить вызов функции в заметке типа.",
   "Cannot_update_output_of_project_0_because_there_was_error_reading_file_1_6376": "Не удается обновить выходные данные проекта \"{0}\", так как произошла ошибка при чтении файла \"{1}\".",
   "Cannot_use_JSX_unless_the_jsx_flag_is_provided_17004": "Невозможно использовать JSX, если не задан флаг \"--jsx\".",
   "Cannot_use_imports_exports_or_module_augmentations_when_module_is_none_1148": "Невозможно использовать директивы import, export или приращения модуля, если флаг \"--module\" имеет значение \"none\".",
   "Cannot_use_namespace_0_as_a_type_2709": "Невозможно использовать пространство имен \"{0}\" как тип.",
   "Cannot_use_namespace_0_as_a_value_2708": "Невозможно использовать пространство имен \"{0}\" как значение.",
+  "Cannot_use_this_in_a_static_property_initializer_of_a_decorated_class_2816": "Нельзя использовать \"this\" в инициализаторе статического свойства для класса, использующего декоратор.",
   "Cannot_write_file_0_because_it_will_overwrite_tsbuildinfo_file_generated_by_referenced_project_1_6377": "Не удается записать файл \"{0}\", так как это перезапишет файл \"TSBUILDINFO\", созданный проектом \"{1}\", на который указывает ссылка.",
   "Cannot_write_file_0_because_it_would_be_overwritten_by_multiple_input_files_5056": "Не удается записать файл \"{0}\", так как он будет перезаписан несколькими входными файлами.",
   "Cannot_write_file_0_because_it_would_overwrite_input_file_5055": "Не удается записать файл \"{0}\", так как это привело бы к перезаписи входного файла.",
@@ -334,6 +363,8 @@
   "Change_all_jsdoc_style_types_to_TypeScript_and_add_undefined_to_nullable_types_95031": "Изменить все типы JSDoc на TypeScript (и добавить \"| undefined\" к типам, допускающим значение NULL)",
   "Change_extends_to_implements_90003": "Измените \"extends\" на \"implements\"",
   "Change_spelling_to_0_90022": "Измените написание на \"{0}\"",
+  "Check_for_class_properties_that_are_declared_but_not_set_in_the_constructor_6700": "Проверьте свойства класса, которые объявлены, но не заданы в конструкторе.",
+  "Check_that_the_arguments_for_bind_call_and_apply_methods_match_the_original_function_6697": "Убедитесь, что аргументы для методов \"Bind\", \"Call\" и \"Apply\" соответствуют исходной функции.",
   "Checking_if_0_is_the_longest_matching_prefix_for_1_2_6104": "Идет проверка того, является ли \"{0}\" самым длинным соответствующим префиксом для \"{1}\" — \"{2}\".",
   "Circular_definition_of_import_alias_0_2303": "Циклическое определение псевдонима импорта \"{0}\".",
   "Circularity_detected_while_resolving_configuration_Colon_0_18000": "Обнаружена цикличность при разрешении конфигурации: {0}",
@@ -345,7 +376,9 @@
   "Class_0_incorrectly_implements_class_1_Did_you_mean_to_extend_1_and_inherit_its_members_as_a_subclas_2720": "Класс \"{0}\" неправильно реализует класс \"{1}\". Вы хотели расширить \"{1}\" и унаследовать его члены в виде подкласса?",
   "Class_0_incorrectly_implements_interface_1_2420": "Класс \"{0}\" неправильно реализует интерфейс \"{1}\".",
   "Class_0_used_before_its_declaration_2449": "Класс \"{0}\" использован прежде, чем объявлен.",
+  "Class_declaration_cannot_implement_overload_list_for_0_2813": "Объявление класса не может реализовать список перегрузок для \"{0}\".",
   "Class_declarations_cannot_have_more_than_one_augments_or_extends_tag_8025": "В объявлении класса не может использоваться более одного тега \"@augments\" или \"@extends\".",
+  "Class_decorators_can_t_be_used_with_static_private_identifier_Consider_removing_the_experimental_dec_18036": "Декораторы классов не могут использоваться со статическим частным идентификатором. Попробуйте удалить экспериментальный декоратор.",
   "Class_name_cannot_be_0_2414": "Имя класса не может иметь значение \"{0}\".",
   "Class_name_cannot_be_Object_when_targeting_ES5_with_module_0_2725": "Класс не может иметь имя \"Object\" при выборе ES5 с модулем {0} в качестве целевого.",
   "Class_static_side_0_incorrectly_extends_base_class_static_side_1_2417": "Статическая сторона класса \"{0}\" неправильно расширяет статическую сторону базового класса \"{1}\".",
@@ -354,16 +387,25 @@
   "Classes_may_not_have_a_field_named_constructor_18006": "Классы не могут иметь поле с именем \"constructor\".",
   "Command_line_Options_6171": "Параметры командной строки",
   "Compile_the_project_given_the_path_to_its_configuration_file_or_to_a_folder_with_a_tsconfig_json_6020": "Компиляция проекта по заданному пути к файлу конфигурации или папке с файлом tsconfig.json.",
+  "Compiler_Diagnostics_6251": "Диагностика компилятора",
   "Compiler_option_0_expects_an_argument_6044": "Параметр компилятора \"{0}\" ожидает аргумент.",
+  "Compiler_option_0_may_not_be_used_with_build_5094": "Параметр компилятора \"--{0}\" не может использоваться с \"--build\".",
+  "Compiler_option_0_may_only_be_used_with_build_5093": "Параметр компилятора \"--{0}\" может использоваться только с \"--build\".",
   "Compiler_option_0_requires_a_value_of_type_1_5024": "Параметр \"{0}\" компилятора требует значение типа {1}.",
   "Compiler_reserves_name_0_when_emitting_private_identifier_downlevel_18027": "Компилятор резервирует имя \"{0}\" при выдаче закрытого идентификатора на нижний уровень.",
+  "Compiles_the_TypeScript_project_located_at_the_specified_path_6927": "Компилирует проект TypeScript, расположенный по указанному пути",
+  "Compiles_the_current_project_tsconfig_json_in_the_working_directory_6923": "Компилирует текущий проект (tsconfig.js в рабочей папке.)",
+  "Compiles_the_current_project_with_additional_settings_6929": "Компилирует текущий проект с дополнительными параметрами",
+  "Completeness_6257": "Полнота",
   "Composite_projects_may_not_disable_declaration_emit_6304": "Составные проекты не могут отключать выпуск объявления.",
   "Composite_projects_may_not_disable_incremental_compilation_6379": "Составные проекты не могут отключить добавочную компиляцию.",
+  "Computed_from_the_list_of_input_files_6911": "Вычислено из списка входных файлов",
   "Computed_property_names_are_not_allowed_in_enums_1164": "Имена вычисляемых свойств запрещены в перечислениях.",
   "Computed_values_are_not_permitted_in_an_enum_with_string_valued_members_2553": "Вычисленные значения запрещены в перечислении с членами, имеющими строковые значения.",
   "Concatenate_and_emit_output_to_single_file_6001": "Связать и вывести результаты в один файл.",
   "Conflicting_definitions_for_0_found_at_1_and_2_Consider_installing_a_specific_version_of_this_librar_4090": "Конфликтующие определения для \"{0}\" найдены в \"{1}\" и \"{2}\". Попробуйте установить конкретную версию этой библиотеки, чтобы устранить конфликт.",
   "Conflicts_are_in_this_file_6201": "В этом файле присутствуют конфликты.",
+  "Consider_adding_a_declare_modifier_to_this_class_6506": "Попробуйте добавить к этому классу модификатор \"declare\".",
   "Construct_signature_return_types_0_and_1_are_incompatible_2203": "Типы возвращаемых значений сигнатур конструкции \"{0}\" и \"{1}\" несовместимы.",
   "Construct_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type_7013": "Сигнатура конструктора, у которой нет аннотации типа возвращаемого значения, неявно имеет тип возвращаемого значения any.",
   "Construct_signatures_with_no_arguments_have_incompatible_return_types_0_and_1_2205": "Сигнатуры конструкции без аргументов имеют несовместимые типы возвращаемых значений \"{0}\" и \"{1}\".",
@@ -413,16 +455,24 @@
   "Convert_to_type_only_export_1364": "Преобразовать в экспорт, распространяющийся только на тип",
   "Convert_to_type_only_import_1373": "Преобразовать в импорт, распространяющийся только на тип",
   "Corrupted_locale_file_0_6051": "Поврежденный файл языкового стандарта \"{0}\".",
+  "Could_not_convert_to_anonymous_function_95153": "Не удалось преобразовать в анонимную функцию.",
+  "Could_not_convert_to_arrow_function_95151": "Не удалось преобразовать в стрелочную функцию.",
+  "Could_not_convert_to_named_function_95152": "Не удалось преобразовать в именованную функцию.",
+  "Could_not_determine_function_return_type_95150": "Не удалось определить тип возвращаемого значения функции.",
   "Could_not_find_a_containing_arrow_function_95127": "Не удалось найти содержащую стрелочную функцию",
   "Could_not_find_a_declaration_file_for_module_0_1_implicitly_has_an_any_type_7016": "Не удалось найти файл объявления модуля \"{0}\". \"{1}\" имеет неявный тип \"any\".",
   "Could_not_find_convertible_access_expression_95140": "Не удалось найти преобразуемое выражение доступа.",
   "Could_not_find_export_statement_95129": "Не удалось найти инструкцию экспорта.",
   "Could_not_find_import_clause_95131": "Не удалось найти предложение импорта.",
   "Could_not_find_matching_access_expressions_95141": "Не удалось найти соответствующие выражения доступа.",
+  "Could_not_find_name_0_Did_you_mean_1_2570": "Не удалось найти имя \"{0}\". Вы имели в виду \"{1}\"?",
   "Could_not_find_namespace_import_or_named_imports_95132": "Не удалось найти импорт пространства имен или именованные импорты.",
   "Could_not_find_property_for_which_to_generate_accessor_95135": "Не удалось найти свойство, для которого создается метод доступа.",
   "Could_not_resolve_the_path_0_with_the_extensions_Colon_1_6231": "Не удалось разрешить путь \"{0}\" с расширениями: {1}.",
   "Could_not_write_file_0_Colon_1_5033": "Не удалось записать файл \"{0}\": \"{1}\".",
+  "Create_source_map_files_for_emitted_JavaScript_files_6694": "Создать файлы сопоставителя с исходным кодом для выпущенных файлов JavaScript.",
+  "Create_sourcemaps_for_d_ts_files_6614": "Создание сопоставителя с исходным кодом для файлов d.ts.",
+  "Creates_a_tsconfig_json_with_the_recommended_settings_in_the_working_directory_6926": "Создает tsconfig.jsс рекомендуемыми параметрами в рабочей папке.",
   "DIRECTORY_6038": "КАТАЛОГ",
   "Declaration_augments_declaration_in_another_file_This_cannot_be_serialized_6232": "Объявление дополняет объявление в другом файле. Сериализация невозможна.",
   "Declaration_emit_for_this_file_requires_using_private_name_0_An_explicit_type_annotation_may_unblock_9005": "Для порождения объявления для этого файла требуется использовать закрытое имя \"{0}\". Явная заметка с типом может разблокировать порождение объявления.",
@@ -430,6 +480,7 @@
   "Declaration_expected_1146": "Ожидалось объявление.",
   "Declaration_name_conflicts_with_built_in_global_identifier_0_2397": "Имя объявления конфликтует со встроенным глобальным идентификатором \"{0}\".",
   "Declaration_or_statement_expected_1128": "Ожидалось объявление или оператор.",
+  "Declaration_or_statement_expected_This_follows_a_block_of_statements_so_if_you_intended_to_write_a_d_2809": "Ожидалось объявление или инструкция. Этот символ \"=\" следует за блоком инструкций, поэтому, если вы хотите использовать назначение деструктурирования, может потребоваться заключить все присваивание в круглые скобки.",
   "Declarations_with_definite_assignment_assertions_must_also_have_type_annotations_1264": "Объявления с определенными утверждениями присваивания также должны иметь заметки типов.",
   "Declarations_with_initializers_cannot_also_have_definite_assignment_assertions_1263": "Объявления с инициализаторами не могут также иметь определенные утверждения присваивания.",
   "Declare_a_private_field_named_0_90053": "Объявите закрытое поле с именем \"{0}\".",
@@ -441,7 +492,11 @@
   "Declare_static_property_0_90027": "Объявите статическое свойство \"{0}\"",
   "Decorators_are_not_valid_here_1206": "Декораторы здесь недопустимы.",
   "Decorators_cannot_be_applied_to_multiple_get_Slashset_accessors_of_the_same_name_1207": "Декораторы нельзя применять к множественным методам доступа get или set с совпадающим именем.",
+  "Decorators_may_not_be_applied_to_this_parameters_1433": "Декораторы не могут применяться к параметрам \"this\".",
+  "Decorators_must_precede_the_name_and_all_keywords_of_property_declarations_1436": "Перед именем и всеми ключевыми словами объявлений свойств должны предшествовать декораторы.",
   "Default_export_of_the_module_has_or_is_using_private_name_0_4082": "Экспорт модуля по умолчанию использует или имеет закрытое имя \"{0}\".",
+  "Default_library_1424": "Библиотека по умолчанию",
+  "Default_library_for_target_0_1425": "Библиотека по умолчанию для целевого объекта \"{0}\"",
   "Definitions_of_the_following_identifiers_conflict_with_those_in_another_file_Colon_0_6200": "Определения следующих идентификаторов конфликтуют с определениями в другом файле: {0}",
   "Delete_all_unused_declarations_95024": "Удалить все неиспользуемые объявления",
   "Delete_all_unused_imports_95147": "Удаление всех неиспользуемых импортов",
@@ -449,6 +504,7 @@
   "Deprecated_Use_jsxFactory_instead_Specify_the_object_invoked_for_createElement_when_targeting_react__6084": "[Устарело.] Используйте --jsxFactory. Укажите объект, вызываемый для createElement при целевом порождении JSX react",
   "Deprecated_Use_outFile_instead_Concatenate_and_emit_output_to_single_file_6170": "[Устарело.] Используйте --outFile. Сцепление и порождение выходных данных в одном файле",
   "Deprecated_Use_skipLibCheck_instead_Skip_type_checking_of_default_library_declaration_files_6160": "[Устарело.] Используйте --skipLibCheck. Пропуск проверки типов для файлов объявления библиотеки по умолчанию.",
+  "Deprecated_setting_Use_outFile_instead_6677": "Устаревший параметр. Используйте вместо этого \"outFile\".",
   "Did_you_forget_to_use_await_2773": "Возможно, пропущено \"await\"?",
   "Did_you_mean_0_1369": "Вы хотели использовать \"{0}\"?",
   "Did_you_mean_for_0_to_be_constrained_to_type_new_args_Colon_any_1_2735": "Вы хотели, чтобы \"{0}\" был ограничен типом \"new (...args: any[]) => {1}\"?",
@@ -459,12 +515,30 @@
   "Did_you_mean_to_use_new_with_this_expression_6213": "Вы хотели использовать \"new\" с этим выражением?",
   "Digit_expected_1124": "Ожидалась цифра.",
   "Directory_0_does_not_exist_skipping_all_lookups_in_it_6148": "Каталога \"{0}\" не существует. Поиск в нем будет пропускаться.",
+  "Disable_adding_use_strict_directives_in_emitted_JavaScript_files_6669": "Отключить добавление директив \"use strict\" в создаваемых файлах JavaScript.",
   "Disable_checking_for_this_file_90018": "Отключите проверку для этого файла",
+  "Disable_emitting_comments_6688": "Отключить создаваемые комментарии.",
+  "Disable_emitting_declarations_that_have_internal_in_their_JSDoc_comments_6701": "Отключите отправку объявлений, в комментариях JSDoc которых есть \"@internal\".",
+  "Disable_emitting_file_from_a_compilation_6660": "Отключить создаваемый файл из компиляции.",
+  "Disable_emitting_files_if_any_type_checking_errors_are_reported_6662": "Отключить создаваемый файл, если сообщается об ошибках проверки типов.",
+  "Disable_erasing_const_enum_declarations_in_generated_code_6682": "Отключить стирание объявлений \"const enum\" в сгенерированном коде.",
+  "Disable_error_reporting_for_unreachable_code_6603": "Отключить отчеты об ошибках для недостижимого кода.",
+  "Disable_error_reporting_for_unused_labels_6604": "Отключить отчеты об ошибках для неиспользуемых меток.",
+  "Disable_generating_custom_helper_functions_like_extends_in_compiled_output_6661": "Отключить создание пользовательских вспомогательных функций, такие как \"__extends\", в скомпилированных выходных данных.",
+  "Disable_including_any_library_files_including_the_default_lib_d_ts_6670": "Отключить включение любых файлов библиотеки, включая lib.d.ts по умолчанию.",
   "Disable_loading_referenced_projects_6235": "Отключите загрузку проектов, на которые имеются ссылки.",
+  "Disable_preferring_source_files_instead_of_declaration_files_when_referencing_composite_projects_6620": "Отключить предпочтение исходных файлов вместо файлов объявлений при обращении к составным проектам",
+  "Disable_reporting_of_excess_property_errors_during_the_creation_of_object_literals_6702": "Отключить отправку отчетов об избыточных ошибках свойств во время создания объектных литералов.",
+  "Disable_resolving_symlinks_to_their_realpath_This_correlates_to_the_same_flag_in_node_6683": "Отключить разрешение символических ссылок на их реальный путь. Это соответствует тому же флажку в узле.",
   "Disable_size_limitations_on_JavaScript_projects_6162": "Отключение ограничений на размеры в проектах JavaScript.",
   "Disable_solution_searching_for_this_project_6224": "Отключите поиск решений для этого проекта.",
-  "Disable_strict_checking_of_generic_signatures_in_function_types_6185": "Отключить строгую проверку универсальных сигнатур в типах функций.",
+  "Disable_strict_checking_of_generic_signatures_in_function_types_6673": "Отключить строгую проверку универсальных сигнатур в типах функций.",
+  "Disable_the_type_acquisition_for_JavaScript_projects_6625": "Отключить получение типа для проектов JavaScript",
+  "Disable_truncating_types_in_error_messages_6663": "Отключить усечение типов в сообщениях об ошибках.",
   "Disable_use_of_source_files_instead_of_declaration_files_from_referenced_projects_6221": "Отключите использование исходных файлов вместо файлов объявлений из проектов, указанных в ссылках.",
+  "Disable_wiping_the_console_in_watch_mode_6684": "Отключить очистку консоли в режиме просмотра",
+  "Disables_inference_for_type_acquisition_by_looking_at_filenames_in_a_project_6616": "Отключает вывод для получения типа при просмотре имен файлов в проекте.",
+  "Disallow_import_s_require_s_or_reference_s_from_expanding_the_number_of_files_TypeScript_should_add__6672": "Запретить \"import\", \"require\" или \"<reference>\" увеличивать количество файлов, которые TypeScript должен добавить в проект.",
   "Disallow_inconsistently_cased_references_to_the_same_file_6078": "Запретить ссылки с разным регистром, указывающие на один файл.",
   "Do_not_add_triple_slash_references_or_imported_modules_to_the_list_of_compiled_files_6159": "Не добавлять ссылки с тройной косой чертой или импортированные модули в список скомпилированных файлов.",
   "Do_not_emit_comments_to_output_6009": "Не создавать комментарии в выходных данных.",
@@ -483,31 +557,48 @@
   "Duplicate_identifier_0_2300": "Повторяющийся идентификатор \"{0}\".",
   "Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module_2441": "Повторяющийся идентификатор \"{0}\". Компилятор резервирует имя \"{1}\" в области верхнего уровня модуля.",
   "Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module_containing_async_func_2529": "Повторяющийся идентификатор \"{0}\". Компилятор резервирует имя \"{1}\" в области верхнего уровня для асинхронных функций в модуле.",
+  "Duplicate_identifier_0_Compiler_reserves_name_1_when_emitting_super_references_in_static_initializer_2818": "Дублированный идентификатор \"{0}\". Компилятор резервирует имя \"{1}\" при выпуске ссылок \"super\" в статических инициализаторах.",
   "Duplicate_identifier_0_Compiler_uses_declaration_1_to_support_async_functions_2520": "Повторяющийся идентификатор \"{0}\". Компилятор использует объявление \"{1}\" для поддержки асинхронных функций.",
+  "Duplicate_identifier_0_Static_and_instance_elements_cannot_share_the_same_private_name_2804": "Повторяющийся идентификатор \"{0}\". Статические элементы и элементы экземпляров не могут совместно использовать одно и то же частное имя.",
   "Duplicate_identifier_arguments_Compiler_uses_arguments_to_initialize_rest_parameters_2396": "Повторяющийся идентификатор arguments. Компилятор использует arguments для инициализации параметров \"rest\".",
   "Duplicate_identifier_newTarget_Compiler_uses_variable_declaration_newTarget_to_capture_new_target_me_2543": "Дублирующийся идентификатор \"_newTarget\". Компилятор использует объявление переменной \"_newTarget\" для получения ссылки на метасвойство \"new.target\".",
   "Duplicate_identifier_super_Compiler_uses_super_to_capture_base_class_reference_2401": "Повторяющийся идентификатор \"_super\". Компилятор использует \"_super\" для получения ссылки на базовый класс.",
   "Duplicate_identifier_this_Compiler_uses_variable_declaration_this_to_capture_this_reference_2399": "Повторяющийся идентификатор \"_this\". Компилятор использует объявление переменной \"_this\" для получения ссылки this.",
+  "Duplicate_index_signature_for_type_0_2374": "Повторяющаяся сигнатура индекса для типа \"{0}\".",
   "Duplicate_label_0_1114": "Повторяющаяся метка \"{0}\".",
-  "Duplicate_number_index_signature_2375": "Повторяющаяся сигнатура числового индекса.",
   "Duplicate_property_0_2718": "Повторяющееся свойство \"{0}\".",
-  "Duplicate_string_index_signature_2374": "Повторяющаяся сигнатура строкового индекса.",
   "Dynamic_import_cannot_have_type_arguments_1326": "При динамическом импорте не могут использоваться аргументы типов.",
   "Dynamic_import_must_have_one_specifier_as_an_argument_1324": "При динамическом импорте необходимо указать один описатель в качестве аргумента.",
   "Dynamic_import_s_specifier_must_be_of_type_string_but_here_has_type_0_7036": "Описатель динамического импорта должен иметь тип \"string\", но имеет тип \"{0}\".",
   "Dynamic_imports_are_only_supported_when_the_module_flag_is_set_to_es2020_esnext_commonjs_amd_system__1323": "Динамические импорты поддерживаются только в том случае, если флаг \"--module\" имеет значение \"es2020\", \"esnext\", \"commonjs\", \"amd\", \"system\" или \"umd\".",
   "Each_member_of_the_union_type_0_has_construct_signatures_but_none_of_those_signatures_are_compatible_2762": "Каждый член типа объединения \"{0}\" имеет сигнатуры конструкций, но ни одна из их не совместима с другими.",
   "Each_member_of_the_union_type_0_has_signatures_but_none_of_those_signatures_are_compatible_with_each_2758": "Каждый член типа объединения \"{0}\" имеет сигнатуры, но ни одна из их не совместима с другими.",
-  "Element_at_index_0_is_variadic_in_one_type_but_not_in_the_other_2622": "Элемент с индексом {0} является вариадическим в одном типе, но не является в другом.",
+  "Editor_Support_6249": "Поддержка редактора",
   "Element_implicitly_has_an_any_type_because_expression_of_type_0_can_t_be_used_to_index_type_1_7053": "Элемент неявно имеет тип \"any\", так как выражение типа \"{0}\" не может использоваться для индексации типа \"{1}\".",
   "Element_implicitly_has_an_any_type_because_index_expression_is_not_of_type_number_7015": "Элемент неявно содержит тип any, так как выражение индекса не имеет тип number.",
   "Element_implicitly_has_an_any_type_because_type_0_has_no_index_signature_7017": "Элемент неявно имеет тип any, так как тип \"{0}\" не содержит сигнатуру индекса.",
   "Element_implicitly_has_an_any_type_because_type_0_has_no_index_signature_Did_you_mean_to_call_1_7052": "Элемент неявно имеет тип \"any\", так как тип \"{0}\" не содержит сигнатуру индекса. Возможно, вы хотели вызвать \"{1}\"?",
-  "Emit_a_UTF_8_Byte_Order_Mark_BOM_in_the_beginning_of_output_files_6164": "Порождать метку порядка байтов UTF-8 в начале выходных файлов.",
+  "Emit_6246": "Вывести",
+  "Emit_ECMAScript_standard_compliant_class_fields_6712": "Создавать поля класса, соответствующие стандарту ECMAScript.",
+  "Emit_a_UTF_8_Byte_Order_Mark_BOM_in_the_beginning_of_output_files_6622": "Порождать метку порядка байтов UTF-8 в начале выходных файлов.",
   "Emit_a_single_file_with_source_maps_instead_of_having_a_separate_file_6151": "Порождать один файл с сопоставлениями источников, а не создавать отдельный файл.",
+  "Emit_a_v8_CPU_profile_of_the_compiler_run_for_debugging_6638": "Вывести профиль ЦП v8 для запуска компилятора для отладки.",
+  "Emit_additional_JavaScript_to_ease_support_for_importing_CommonJS_modules_This_enables_allowSyntheti_6626": "Создайте дополнительный файл JavaScript, чтобы упростить поддержку импорта модулей CommonJS. Это включает \"allowSyntheticDefaultImports\" для совместимости типов.",
   "Emit_class_fields_with_Define_instead_of_Set_6222": "Выведите поля классов с Define вместо Set.",
+  "Emit_design_type_metadata_for_decorated_declarations_in_source_files_6624": "Выдавать метаданные типа \"Конструктор\" для декорированных объявлений в исходных файлах.",
+  "Emit_more_compliant_but_verbose_and_less_performant_JavaScript_for_iteration_6621": "Создать более совместимый, но подробный и менее производительный файл JavaScript для итерации.",
   "Emit_the_source_alongside_the_sourcemaps_within_a_single_file_requires_inlineSourceMap_or_sourceMap__6152": "Порождать источник вместе с сопоставителями с исходным кодом в одном файле (нужно задать параметр --inlineSourceMap или --sourceMap).",
   "Enable_all_strict_type_checking_options_6180": "Включить все параметры строгой проверки типов.",
+  "Enable_color_and_formatting_in_output_to_make_compiler_errors_easier_to_read_6685": "Включите цвет и форматирование в выводе, чтобы ошибки компилятора легче читались",
+  "Enable_constraints_that_allow_a_TypeScript_project_to_be_used_with_project_references_6611": "Включить ограничения, позволяющие использовать проект TypeScript со ссылками проекта.",
+  "Enable_error_reporting_for_codepaths_that_do_not_explicitly_return_in_a_function_6667": "Включить отчеты об ошибках для кодовых путей, которые не возвращаются в функции явным образом.",
+  "Enable_error_reporting_for_expressions_and_declarations_with_an_implied_any_type_6665": "Включить отчеты об ошибках в выражениях и объявлениях с подразумеваемым типом \"any\".",
+  "Enable_error_reporting_for_fallthrough_cases_in_switch_statements_6664": "Включить отчет об ошибках для случаев сбоя в операторах switch.",
+  "Enable_error_reporting_in_type_checked_JavaScript_files_6609": "Включить отчеты об ошибках в файлах JavaScript с проверкой типа.",
+  "Enable_error_reporting_when_a_local_variables_aren_t_read_6675": "Включить отчеты об ошибках, если локальные переменные не считываться.",
+  "Enable_error_reporting_when_this_is_given_the_type_any_6668": "Включить отчеты об ошибках, если параметр \"this\" имеет тип \"any\".",
+  "Enable_experimental_support_for_TC39_stage_2_draft_decorators_6630": "Включить экспериментальную поддержку черновиков оформителей TC39 stage 2.",
+  "Enable_importing_json_files_6689": "Включить импорт файлов JSON",
   "Enable_incremental_compilation_6378": "Включить инкрементную компиляцию",
   "Enable_project_compilation_6302": "Включить компиляцию проекта",
   "Enable_strict_bind_call_and_apply_methods_on_functions_6214": "Включите строгие методы \"bind\", \"call\" и \"apply\" для функций.",
@@ -517,11 +608,20 @@
   "Enable_the_experimentalDecorators_option_in_your_configuration_file_95074": "Включите параметр \"experimentalDecorators\" в файле конфигурации",
   "Enable_the_jsx_flag_in_your_configuration_file_95088": "Включите флаг \"--jsx\" в файле конфигурации",
   "Enable_tracing_of_the_name_resolution_process_6085": "Включить трассировку процесса разрешения имен.",
-  "Enable_verbose_logging_6366": "Включить подробное ведение журнала",
+  "Enable_verbose_logging_6713": "Включить подробное ведение журнала",
   "Enables_emit_interoperability_between_CommonJS_and_ES_Modules_via_creation_of_namespace_objects_for__7037": "Позволяет обеспечивать взаимодействие между модулями CommonJS и ES посредством создания объектов пространства имен для всех импортов. Подразумевает \"allowSyntheticDefaultImports\".",
   "Enables_experimental_support_for_ES7_async_functions_6068": "Включает экспериментальную поддержку для асинхронных функций ES7.",
   "Enables_experimental_support_for_ES7_decorators_6065": "Включает экспериментальную поддержку для декораторов ES7.",
   "Enables_experimental_support_for_emitting_type_metadata_for_decorators_6066": "Включает экспериментальную поддержку для создания метаданных типа для декораторов.",
+  "Enforces_using_indexed_accessors_for_keys_declared_using_an_indexed_type_6671": "Принудительно использует индексированные методы доступа для ключей, объявленных с помощью индексированного типа",
+  "Ensure_overriding_members_in_derived_classes_are_marked_with_an_override_modifier_6666": "Убедитесь, что переопределяемые элементы в производных классах помечены модификатором переопределения.",
+  "Ensure_that_casing_is_correct_in_imports_6637": "Убедитесь, что при импорте используется правильный регистр.",
+  "Ensure_that_each_file_can_be_safely_transpiled_without_relying_on_other_imports_6645": "Убедитесь, что каждый файл можно безопасно перенести, не полагаясь на другой импорт.",
+  "Ensure_use_strict_is_always_emitted_6605": "Убедитесь, что всегда используется \"use strict\".",
+  "Entry_point_for_implicit_type_library_0_1420": "Точка входа для библиотеки неявных типов \"{0}\"",
+  "Entry_point_for_implicit_type_library_0_with_packageId_1_1421": "Точка входа для библиотеки неявных типов \"{0}\" с идентификатором пакета \"{1}\"",
+  "Entry_point_of_type_library_0_specified_in_compilerOptions_1417": "Точка входа для библиотеки типов \"{0}\", указанная в compilerOptions",
+  "Entry_point_of_type_library_0_specified_in_compilerOptions_with_packageId_1_1418": "Точка входа для библиотеки типов \"{0}\" с идентификатором пакета \"{1}\", указанная в compilerOptions",
   "Enum_0_used_before_its_declaration_2450": "Перечисление \"{0}\" использовано прежде, чем объявлено.",
   "Enum_declarations_can_only_merge_with_namespace_or_other_enum_declarations_2567": "Объявления перечислений можно объединять только с пространствами имен или другими объявлениями перечислений.",
   "Enum_declarations_must_all_be_const_or_non_const_2473": "Все объявления перечислений должны иметь значение const или отличное от const.",
@@ -535,15 +635,13 @@
   "Expected_0_1_type_arguments_provide_these_with_an_extends_tag_8027": "Ожидается аргументов типа: {0}–{1}. Укажите их с тегом \"@extends\".",
   "Expected_0_arguments_but_got_1_2554": "Ожидалось аргументов: {0}, получено: {1}.",
   "Expected_0_arguments_but_got_1_Did_you_forget_to_include_void_in_your_type_argument_to_Promise_2794": "Ожидаемое число аргументов — {0}, фактическое — {1}. Возможно, вы забыли указать void в аргументе типа в Promise?",
-  "Expected_0_arguments_but_got_1_or_more_2556": "Ожидалось аргументов: {0}, получено: {1} или больше.",
   "Expected_0_type_arguments_but_got_1_2558": "Ожидались аргументы типа {0}, получены: {1}.",
   "Expected_0_type_arguments_provide_these_with_an_extends_tag_8026": "Ожидается аргументов типа: {0}. Укажите их с тегом \"@extends\".",
   "Expected_at_least_0_arguments_but_got_1_2555": "Ожидалось аргументов не меньше: {0}, получено: {1}.",
-  "Expected_at_least_0_arguments_but_got_1_or_more_2557": "Ожидалось аргументов не меньше: {0}, получено: {1} или больше.",
   "Expected_corresponding_JSX_closing_tag_for_0_17002": "Ожидался соответствующий закрывающий тег JSX для \"{0}\".",
   "Expected_corresponding_closing_tag_for_JSX_fragment_17015": "Ожидался соответствующий закрывающий тег фрагмента JSX.",
+  "Expected_for_property_initializer_1442": "Требуется \"=\" для инициализатора свойства.",
   "Expected_type_of_0_field_in_package_json_to_be_1_got_2_6105": "Ожидаемый тип поля \"{0}\" в \"package.json\" должен быть \"{1}\", получен \"{2}\".",
-  "Experimental_Options_6177": "Экспериментальные параметры",
   "Experimental_support_for_decorators_is_a_feature_that_is_subject_to_change_in_a_future_release_Set_t_1219": "Экспериментальная поддержка для декораторов — это функция, которая будет изменена в будущем выпуске. Задайте параметр \"experimentalDecorators\" в \"tsconfig\" или \"jsconfig\", чтобы удалить это предупреждение.",
   "Explicitly_specified_module_resolution_kind_Colon_0_6087": "Явно указанный тип разрешения модуля: \"{0}\".",
   "Exponentiation_cannot_be_performed_on_bigint_values_unless_the_target_option_is_set_to_es2016_or_lat_2791": "Невозможно выполнить возведение в степень для значений \"bigint\", если для параметра \"target\" не задана версия \"es2016\" или более поздняя версия.",
@@ -554,12 +652,14 @@
   "Exported_external_package_typings_file_0_is_not_a_module_Please_contact_the_package_author_to_update_2656": "Файл экспортированных внешних типизаций пакета \"{0}\" не является модулем. Обратитесь к автору пакета для обновления определения пакета.",
   "Exported_external_package_typings_file_cannot_contain_tripleslash_references_Please_contact_the_pack_2654": "Файл экспортированных внешних типизаций пакета не может содержать ссылки с тройной косой чертой. Обратитесь к автору пакета для обновления определения пакета.",
   "Exported_type_alias_0_has_or_is_using_private_name_1_4081": "Экспортированный псевдоним типа \"{0}\" имеет или использует закрытое имя \"{1}\".",
+  "Exported_type_alias_0_has_or_is_using_private_name_1_from_module_2_4084": "Экспортированный псевдоним типа \"{0}\" имеет или использует частное имя \"{1}\" из модуля \"{2}\".",
   "Exported_variable_0_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4023": "Экспортированная переменная \"{0}\" имеет или использует имя \"{1}\" из внешнего модуля {2}, но не может быть именована.",
   "Exported_variable_0_has_or_is_using_name_1_from_private_module_2_4024": "Экспортированная переменная \"{0}\" имеет или использует имя \"{1}\" из закрытого модуля \"{2}\".",
   "Exported_variable_0_has_or_is_using_private_name_1_4025": "Экспортированная переменная \"{0}\" имеет или использует закрытое имя \"{1}\".",
   "Exports_and_export_assignments_are_not_permitted_in_module_augmentations_2666": "Экспорт и назначения экспорта не разрешены в улучшениях модуля.",
   "Expression_expected_1109": "Ожидалось выражение.",
   "Expression_or_comma_expected_1137": "Ожидалось выражение или запятая.",
+  "Expression_produces_a_tuple_type_that_is_too_large_to_represent_2800": "Выражение создает тип кортежа, который слишком большой для представления.",
   "Expression_produces_a_union_type_that_is_too_complex_to_represent_2590": "Выражение создает тип объединения, который слишком сложен для представления.",
   "Expression_resolves_to_super_that_compiler_uses_to_capture_base_class_reference_2402": "Разрешение выражения дает идентификатор \"_super\", который используется компилятором для получения ссылки на базовый класс.",
   "Expression_resolves_to_variable_declaration_0_that_compiler_uses_to_support_async_functions_2521": "Разрешение выражения дает объявление переменной \"{0}\", которое используется компилятором для поддержки асинхронных функций.",
@@ -579,7 +679,9 @@
   "Failed_to_parse_file_0_Colon_1_5014": "Не удалось проанализировать файл \"{0}\": {1}.",
   "Fallthrough_case_in_switch_7029": "Случай передачи управления в операторе switch.",
   "File_0_does_not_exist_6096": "Файл \"{0}\" не существует.",
+  "File_0_does_not_exist_according_to_earlier_cached_lookups_6240": "Согласно ранее кэшированным поискам, файл \"{0}\" не существует.",
   "File_0_exist_use_it_as_a_name_resolution_result_6097": "Файл \"{0}\" существует — используйте его как результат разрешения имени.",
+  "File_0_exists_according_to_earlier_cached_lookups_6239": "Согласно ранее кэшированным поискам, файл \"{0}\" существует.",
   "File_0_has_an_unsupported_extension_The_only_supported_extensions_are_1_6054": "Файл \"{0}\" имеет неподдерживаемое расширение. Поддерживаются только следующие расширения: {1}.",
   "File_0_has_an_unsupported_extension_so_skipping_it_6081": "Файл \"{0}\" имеет неподдерживаемое разрешение, поэтому будет пропущен.",
   "File_0_is_a_JavaScript_file_Did_you_mean_to_enable_the_allowJs_option_6504": "\"{0}\" является файлом JavaScript. Вы хотели включить параметр \"allowJs\"?",
@@ -587,16 +689,32 @@
   "File_0_is_not_listed_within_the_file_list_of_project_1_Projects_must_list_all_files_or_use_an_includ_6307": "Файл \"{0}\" отсутствует в списке файлов проекта \"{1}\". Проекты должны перечислять все файлы или использовать шаблон включения.",
   "File_0_is_not_under_rootDir_1_rootDir_is_expected_to_contain_all_source_files_6059": "Файл \"{0}\" отсутствует в \"rootDir\" \"{1}\". Все исходные файлы должны находиться в каталоге \"rootDir\".",
   "File_0_not_found_6053": "Файл \"{0}\" не найден.",
+  "File_Management_6245": "Управление файлами",
   "File_change_detected_Starting_incremental_compilation_6032": "Обнаружено изменение в файле. Запускается инкрементная компиляция...",
   "File_is_a_CommonJS_module_it_may_be_converted_to_an_ES6_module_80001": "Файл является модулем CommonJS; его можно преобразовать в модуль ES6.",
+  "File_is_default_library_for_target_specified_here_1426": "Файл является библиотекой по умолчанию для указанного здесь целевого объекта.",
+  "File_is_entry_point_of_type_library_specified_here_1419": "Файл является точкой входа для указанной здесь библиотеки типов.",
+  "File_is_included_via_import_here_1399": "Файл включается с помощью импорта.",
+  "File_is_included_via_library_reference_here_1406": "Файл включается с помощью ссылки на библиотеку.",
+  "File_is_included_via_reference_here_1401": "Файл включается с помощью ссылки.",
+  "File_is_included_via_type_library_reference_here_1404": "Файл включается с помощью ссылки на библиотеку типов.",
+  "File_is_library_specified_here_1423": "Файл представляет собой указанную здесь библиотеку.",
+  "File_is_matched_by_files_list_specified_here_1410": "Файл соответствует указанному здесь списку \"files\".",
+  "File_is_matched_by_include_pattern_specified_here_1408": "Файл соответствует указанному здесь шаблону включения.",
+  "File_is_output_from_referenced_project_specified_here_1413": "Файл представляет собой выходные данные для указанного здесь проекта, на который указывает ссылка.",
+  "File_is_output_of_project_reference_source_0_1428": "Файл представляет собой выходные данные для источника ссылки на проект \"{0}\"",
+  "File_is_source_from_referenced_project_specified_here_1416": "Файл представляет собой источник для указанного здесь проекта, на который указывает ссылка.",
   "File_name_0_differs_from_already_included_file_name_1_only_in_casing_1149": "Файл с именем \"{0}\" отличается от уже включенного файла с именем \"{1}\" только регистром.",
   "File_name_0_has_a_1_extension_stripping_it_6132": "У имени файла \"{0}\" есть расширение \"{1}\"; расширение удаляется.",
+  "File_redirects_to_file_0_1429": "Файл перенаправляется в файл \"{0}\"",
   "File_specification_cannot_contain_a_parent_directory_that_appears_after_a_recursive_directory_wildca_5065": "Спецификация файла не может содержать родительский каталог (\"..\"), который указывается после рекурсивного подстановочного знака каталога (\"**\"): \"{0}\".",
   "File_specification_cannot_end_in_a_recursive_directory_wildcard_Asterisk_Asterisk_Colon_0_5010": "Спецификация файла не может заканчиваться рекурсивным подстановочным знаком каталога (\"**\"): \"{0}\".",
+  "Filters_results_from_the_include_option_6627": "Фильтрует результаты в параметре \"включить\".",
   "Fix_all_detected_spelling_errors_95026": "Исправить все обнаруженные синтаксические ошибки",
   "Fix_all_expressions_possibly_missing_await_95085": "Исправить все выражения, где может отсутствовать \"await\"",
   "Fix_all_implicit_this_errors_95107": "Исправить все ошибки неявного this",
   "Fix_all_incorrect_return_type_of_an_async_functions_90037": "Исправьте все неправильные возвращаемые типы асинхронных функций.",
+  "For_await_loops_cannot_be_used_inside_a_class_static_block_18038": "Циклы \"For await\" нельзя использовать внутри статического блока класса.",
   "Found_0_errors_6217": "Найдено ошибок: {0}.",
   "Found_0_errors_Watching_for_file_changes_6194": "Найдено ошибок: {0}. Отслеживаются изменения в файлах.",
   "Found_1_error_6216": "Найдено ошибок: 1.",
@@ -610,11 +728,14 @@
   "Function_implementation_name_must_be_0_2389": "Имя реализации функции должно иметь значение \"{0}\".",
   "Function_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_ref_7024": "Функция неявно имеет тип возвращаемого значения any, так как у нее нет заметки с типом возвращаемого значения, а также на нее прямо или косвенно указывает ссылка в одном из ее выражений \"return\".",
   "Function_lacks_ending_return_statement_and_return_type_does_not_include_undefined_2366": "В функции отсутствует завершающий оператор return, а тип возвращаемого значения не включает \"undefined\".",
+  "Function_not_implemented_95159": "Функция не реализована.",
   "Function_overload_must_be_static_2387": "Перегрузка функции должна быть статической.",
   "Function_overload_must_not_be_static_2388": "Перегрузка функции не должна быть статической.",
   "Function_type_notation_must_be_parenthesized_when_used_in_a_union_type_1385": "При использовании в типе объединения нотация типа функции должна быть заключена в круглые скобки.",
   "Function_type_notation_must_be_parenthesized_when_used_in_an_intersection_type_1387": "При использовании в типе пересечения нотация типа функции должна быть заключена в круглые скобки.",
   "Function_type_which_lacks_return_type_annotation_implicitly_has_an_0_return_type_7014": "Тип функции, у которого нет заметки с типом возвращаемого значения, неявно имеет тип возвращаемого значения \"{0}\".",
+  "Function_with_bodies_can_only_merge_with_classes_that_are_ambient_2814": "Функция с телом может объединяться только с классами, которые являются внешними.",
+  "Generate_d_ts_files_from_TypeScript_and_JavaScript_files_in_your_project_6612": "Создание D.ts-файлов из файлов TypeScript и JavaScript в проекте.",
   "Generate_get_and_set_accessors_95046": "Создать методы доступа get и set",
   "Generate_get_and_set_accessors_for_all_overriding_properties_95119": "Создать методы доступа get и set для всех переопределяемых свойств",
   "Generates_a_CPU_profile_6223": "Создает профиль ЦП.",
@@ -627,13 +748,13 @@
   "Generators_are_only_available_when_targeting_ECMAScript_2015_or_higher_1220": "Генераторы доступны только при разработке для ECMAScript 2015 или более поздних версий.",
   "Generic_type_0_requires_1_type_argument_s_2314": "Универсальный тип \"{0}\" требует следующее число аргументов типа: {1}.",
   "Generic_type_0_requires_between_1_and_2_type_arguments_2707": "Универсальный тип \"{0}\" требует аргументы типа от {1} до {2}.",
-  "Getter_and_setter_accessors_do_not_agree_in_visibility_2379": "Методы доступа get и set не согласуются с точки зрения видимости.",
   "Global_module_exports_may_only_appear_at_top_level_1316": "Глобальные операции экспорта модуля могут появиться только на верхнем уровне.",
   "Global_module_exports_may_only_appear_in_declaration_files_1315": "Глобальные операции экспорта модуля могут появиться только в файлах объявления.",
   "Global_module_exports_may_only_appear_in_module_files_1314": "Глобальные операции экспорта модуля могут появиться только в файлах модуля.",
   "Global_type_0_must_be_a_class_or_interface_type_2316": "Глобальный тип \"{0}\" должен быть классом или интерфейсом.",
   "Global_type_0_must_have_1_type_parameter_s_2317": "Глобальный тип \"{0}\" должен иметь следующее число параметров типа: {1}.",
   "Have_recompiles_in_incremental_and_watch_assume_that_changes_within_a_file_will_only_affect_files_di_6384": "Сделайте так, чтобы повторные компиляции в \"--incremental\" и \"--watch\" предполагали, что изменения в файле будут затрагивать только файлы, напрямую зависящие от него.",
+  "Have_recompiles_in_projects_that_use_incremental_and_watch_mode_assume_that_changes_within_a_file_wi_6606": "Сделайте так, чтобы повторные компиляции в проектах, в которых используются режимы \"incremental\" и \"watch\" предполагали, что изменения в файле будут затрагивать только файлы, напрямую зависящие от него.",
   "Hexadecimal_digit_expected_1125": "Ожидалась шестнадцатеричная цифра.",
   "Identifier_expected_0_is_a_reserved_word_at_the_top_level_of_a_module_1262": "Требуется идентификатор. \"{0}\" является зарезервированным словом на верхнем уровне модуля.",
   "Identifier_expected_0_is_a_reserved_word_in_strict_mode_1212": "Ожидался идентификатор. \"{0}\" является зарезервированным словом в строгом режиме.",
@@ -644,6 +765,7 @@
   "Identifier_expected_esModule_is_reserved_as_an_exported_marker_when_transforming_ECMAScript_modules_1216": "Ожидался идентификатор. Значение \"__esModule\" зарезервировано как экспортируемый маркер при преобразовании модулей ECMAScript.",
   "If_the_0_package_actually_exposes_this_module_consider_sending_a_pull_request_to_amend_https_Colon_S_7040": "Если пакет \"{0}\" фактически предоставляет этот модуль, рекомендуется отправить запрос на вытягивание, чтобы изменить \"https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/{1}\"",
   "Ignore_this_error_message_90019": "Пропустите это сообщение об ошибке",
+  "Ignoring_tsconfig_json_compiles_the_specified_files_with_default_compiler_options_6924": "Пропуск tsconfig.json, компилирует указанные файлы с параметрами компилятора по умолчанию",
   "Implement_all_inherited_abstract_classes_95040": "Реализовать все унаследованные абстрактные классы",
   "Implement_all_unimplemented_interfaces_95032": "Реализовать все нереализованные интерфейсы",
   "Implement_inherited_abstract_class_90007": "Реализуйте наследуемый абстрактный класс",
@@ -660,14 +782,23 @@
   "Import_may_be_converted_to_a_default_import_80003": "Импорт можно преобразовать в импорт по умолчанию.",
   "Import_name_cannot_be_0_2438": "Имя импорта не может иметь значение \"{0}\".",
   "Import_or_export_declaration_in_an_ambient_module_declaration_cannot_reference_module_through_relati_2439": "Объявление импорта или экспорта во объявлении окружающего модуля не может иметь ссылки на модуль через относительное имя модуля.",
+  "Imported_via_0_from_file_1_1393": "Импортировано с помощью {0} из файла \"{1}\".",
+  "Imported_via_0_from_file_1_to_import_importHelpers_as_specified_in_compilerOptions_1395": "Импортировано с помощью {0} из файла \"{1}\" для импорта \"importHelpers\", как указано в compilerOptions.",
+  "Imported_via_0_from_file_1_to_import_jsx_and_jsxs_factory_functions_1397": "Импортировано с помощью {0} из файла \"{1}\" для импорта функций фабрики \"jsx\" и \"jsxs\".",
+  "Imported_via_0_from_file_1_with_packageId_2_1394": "Импортировано с помощью {0} из файла \"{1}\" с идентификатором пакета \"{2}\".",
+  "Imported_via_0_from_file_1_with_packageId_2_to_import_importHelpers_as_specified_in_compilerOptions_1396": "Импортировано с помощью {0} из файла \"{1}\" с идентификатором пакета \"{2}\" для импорта \"importHelpers\", как указано в compilerOptions.",
+  "Imported_via_0_from_file_1_with_packageId_2_to_import_jsx_and_jsxs_factory_functions_1398": "Импортировано с помощью {0} из файла \"{1}\" с идентификатором пакета \"{2}\" для импорта функций фабрики \"jsx\" и \"jsxs\".",
   "Imports_are_not_permitted_in_module_augmentations_Consider_moving_them_to_the_enclosing_external_mod_2667": "Операции импорта запрещены в улучшениях модуля. Попробуйте переместить их в содержащий внешний модуль.",
   "In_ambient_enum_declarations_member_initializer_must_be_constant_expression_1066": "Во внешних объявлениях перечислений инициализатор элемента должен быть константным выражением.",
   "In_an_enum_with_multiple_declarations_only_one_declaration_can_omit_an_initializer_for_its_first_enu_2432": "В перечислении с несколькими объявлениями только одно объявление может опустить инициализатор для своего первого элемента перечисления.",
+  "Include_a_list_of_files_This_does_not_support_glob_patterns_as_opposed_to_include_6635": "Включить список файлов. Не поддерживает шаблоны стандартной маски, в отличие от \"include\".",
   "Include_modules_imported_with_json_extension_6197": "Включать модули, импортированные с расширением .json",
-  "Include_undefined_in_index_signature_results_6800": "Включить undefined в результаты сигнатуры индекса",
+  "Include_source_code_in_the_sourcemaps_inside_the_emitted_JavaScript_6644": "Включить исходный код в исходные карты в создаваемом файле JavaScript.",
+  "Include_sourcemap_files_inside_the_emitted_JavaScript_6643": "Включить файлы исходных карт в создаваемый код JavaScript.",
+  "Include_undefined_in_index_signature_results_6716": "Включить undefined в результаты сигнатуры индекса",
+  "Including_watch_w_will_start_watching_the_current_project_for_the_file_changes_Once_set_you_can_conf_6914": "При включении --watch, -w начнет отслеживание изменений файла в текущем проекте. После установки можно настроить режим просмотра с помощью:",
+  "Index_signature_for_type_0_is_missing_in_type_1_2329": "В типе \"{1}\" отсутствует сигнатура индекса для типа \"{0}\".",
   "Index_signature_in_type_0_only_permits_reading_2542": "Сигнатура индекса в типе \"{0}\" разрешает только чтение.",
-  "Index_signature_is_missing_in_type_0_2329": "В типе \"{0}\" отсутствует сигнатура индекса.",
-  "Index_signatures_are_incompatible_2330": "Сигнатуры индекса несовместимы.",
   "Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local_2395": "Все отдельные объявления в объединенном объявлении \"{0}\" должны быть экспортированными или локальными.",
   "Infer_all_types_from_usage_95023": "Вывести все типы исходя из использования",
   "Infer_function_return_type_95148": "Вывод типа возвращаемого значения функции",
@@ -676,6 +807,7 @@
   "Infer_type_of_0_from_usage_95011": "Выведите тип \"{0}\" на основании его использования",
   "Initialize_property_0_in_the_constructor_90020": "Инициализируйте свойство \"{0}\" в конструкторе",
   "Initialize_static_property_0_90021": "Инициализируйте статическое свойство \"{0}\"",
+  "Initializer_for_property_0_2811": "Инициализатор для свойства \"{0}\"",
   "Initializer_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor_2301": "Инициализатор переменной-элемента экземпляра \"{0}\" не может ссылаться на идентификатор \"{1}\", объявленный в конструкторе.",
   "Initializer_provides_no_value_for_this_binding_element_and_the_binding_element_has_no_default_value_2525": "Инициализатор не предоставляет значения для элемента привязки, который не имеет значения по умолчанию.",
   "Initializers_are_not_allowed_in_ambient_contexts_1039": "Инициализаторы не разрешены в окружающих контекстах.",
@@ -686,12 +818,16 @@
   "Interface_0_cannot_simultaneously_extend_types_1_and_2_2320": "Интерфейс \"{0}\" не может одновременно расширить типы \"{1}\" и \"{2}\".",
   "Interface_0_incorrectly_extends_interface_1_2430": "Интерфейс \"{0}\" неправильно расширяет интерфейс \"{1}\".",
   "Interface_declaration_cannot_have_implements_clause_1176": "Объявление интерфейса не может иметь предложение implements.",
+  "Interface_must_be_given_a_name_1438": "Интерфейсу должно быть присвоено имя.",
   "Interface_name_cannot_be_0_2427": "Имя интерфейса не может иметь значение \"{0}\".",
+  "Interop_Constraints_6252": "Ограничения взаимодействия",
+  "Interpret_optional_property_types_as_written_rather_than_adding_undefined_6243": "Интерпретируйте необязательные типы свойств так, как они написаны, а не добавляйте неопределенное значение.",
   "Invalid_character_1127": "Недопустимый символ.",
   "Invalid_module_name_in_augmentation_Module_0_resolves_to_an_untyped_module_at_1_which_cannot_be_augm_2665": "Недопустимое имя модуля в приращении. Модуль \"{0}\" разрешается в модуль без типа в \"{1}\", который невозможно дополнить.",
   "Invalid_module_name_in_augmentation_module_0_cannot_be_found_2664": "Недопустимое имя модуля в улучшении, не удается найти модуль \"{0}\".",
   "Invalid_reference_directive_syntax_1084": "Недопустимый синтаксис директивы reference.",
   "Invalid_use_of_0_Class_definitions_are_automatically_in_strict_mode_1210": "Недопустимое использование \"{0}\". Определения классов автоматически находятся в строгом режиме.",
+  "Invalid_use_of_0_It_cannot_be_used_inside_a_class_static_block_18039": "Недопустимое использование \"{0}\". Его нельзя использовать внутри статического блока класса.",
   "Invalid_use_of_0_Modules_are_automatically_in_strict_mode_1215": "Недопустимое использование \"{0}\". Модули автоматически находятся в строгом режиме.",
   "Invalid_use_of_0_in_strict_mode_1100": "Недопустимое использование \"{0}\" в строгом режиме.",
   "Invalid_value_for_jsxFactory_0_is_not_a_valid_identifier_or_qualified_name_5067": "Недопустимое значение для jsxFactory. \"{0}\" не является допустимым идентификатором или полным именем.",
@@ -723,13 +859,18 @@
   "JSX_expressions_may_not_use_the_comma_operator_Did_you_mean_to_write_an_array_18007": "Выражения JSX не могут использовать оператор \"запятая\". Возможно, вы хотели выполнить запись в массив?",
   "JSX_expressions_must_have_one_parent_element_2657": "Выражения JSX должны иметь один родительский элемент.",
   "JSX_fragment_has_no_corresponding_closing_tag_17014": "Фрагмент JSX не имеет соответствующего закрывающего тега.",
+  "JSX_property_access_expressions_cannot_include_JSX_namespace_names_2633": "Выражения доступа к свойствам JSX не могут содержать имена пространств имен JSX",
   "JSX_spread_child_must_be_an_array_type_2609": "Дочерний объект расширения JSX должен иметь тип массива.",
+  "JavaScript_Support_6247": "Поддержка JavaScript",
   "Jump_target_cannot_cross_function_boundary_1107": "Целевой объект перехода не может находиться за границей функции.",
   "KIND_6034": "ВИД",
   "Keywords_cannot_contain_escape_characters_1260": "Ключевые слова не могут содержать escape-символы.",
   "LOCATION_6037": "РАСПОЛОЖЕНИЕ",
+  "Language_and_Environment_6254": "Язык и среда",
   "Language_service_is_disabled_9004": "Языковая служба отключена.",
   "Left_side_of_comma_operator_is_unused_and_has_no_side_effects_2695": "Сторона оператора слева от запятой не используется и не имеет побочных эффектов.",
+  "Library_0_specified_in_compilerOptions_1422": "Библиотека \"{0}\", указанная в compilerOptions",
+  "Library_referenced_via_0_from_file_1_1405": "Библиотека, на которую осуществляется ссылка с помощью \"{0}\" из файла \"{1}\"",
   "Line_break_not_permitted_here_1142": "Здесь запрещено использовать разрыв строки.",
   "Line_terminator_not_permitted_before_arrow_1200": "Перед стрелкой запрещен символ завершения строки.",
   "List_of_folders_to_include_type_definitions_from_6161": "Список папок, определения типов из которых будут включены.",
@@ -739,11 +880,14 @@
   "Loading_module_0_from_node_modules_folder_target_file_type_1_6098": "Загружается модуль \"{0}\" из папки \"node_modules\", тип целевого файла: \"{1}\".",
   "Loading_module_as_file_Slash_folder_candidate_module_location_0_target_file_type_1_6095": "Загружается модуль в виде файла или папки, расположение модуля-кандидата: \"{0}\", тип целевого файла: \"{1}\".",
   "Locale_must_be_of_the_form_language_or_language_territory_For_example_0_or_1_6048": "Языковой стандарт должен иметь форму <язык> или <язык>–<территория>. Например, \"{0}\" или \"{1}\".",
+  "Log_paths_used_during_the_moduleResolution_process_6706": "Пути к журналу, используемые в процессе \"moduleResolution\".",
   "Longest_matching_prefix_for_0_is_1_6108": "Самый длинный соответствующий префикс для \"{0}\": \"{1}\".",
   "Looking_up_in_node_modules_folder_initial_location_0_6125": "Поиск в папке node_modules; первоначальное расположение: \"{0}\".",
   "Make_all_super_calls_the_first_statement_in_their_constructor_95036": "Сделать все вызовы \"super()\" первой инструкцией в конструкторе",
+  "Make_keyof_only_return_strings_instead_of_string_numbers_or_symbols_Legacy_option_6650": "Сделать так, чтобы keyof возвращал только строки, а не строки, числа или символы. Устаревший вариант.",
   "Make_super_call_the_first_statement_in_the_constructor_90002": "Сделайте вызов \"super()\" первой инструкцией в конструкторе",
   "Mapped_object_type_implicitly_has_an_any_template_type_7039": "Сопоставленный объект неявно имеет тип шаблона \"любой\".",
+  "Matched_by_include_pattern_0_in_1_1407": "Соответствует шаблону включения \"{0}\" в \"{1}\".",
   "Member_0_implicitly_has_an_1_type_7008": "Элемент \"{0}\" неявно имеет тип \"{1}\".",
   "Member_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage_7045": "Член \"{0}\" неявно имеет тип \"{1}\", но из использования можно определить более подходящий тип.",
   "Merge_conflict_marker_encountered_1185": "Встретилась отметка о конфликте слияния.",
@@ -752,6 +896,7 @@
   "Method_0_cannot_have_an_implementation_because_it_is_marked_abstract_1245": "Метод \"{0}\" не может иметь реализацию, так как он отмечен в качестве абстрактного.",
   "Method_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2_4101": "Метод \"{0}\" экспортированного интерфейса имеет или использует имя \"{1}\" из закрытого модуля \"{2}\".",
   "Method_0_of_exported_interface_has_or_is_using_private_name_1_4102": "Метод \"{0}\" экспортированного интерфейса имеет или использует закрытое имя \"{1}\".",
+  "Method_not_implemented_95158": "Метод не реализован.",
   "Modifiers_cannot_appear_here_1184": "Здесь невозможно использовать модификаторы.",
   "Module_0_can_only_be_default_imported_using_the_1_flag_1259": "Модуль \"{0}\" можно только импортировать по умолчанию с помощью флага \"{1}\"",
   "Module_0_declares_1_locally_but_it_is_exported_as_2_2460": "Модуль \"{0}\" объявляет \"{1}\" локально, но он экспортируется как \"{2}\".",
@@ -769,13 +914,14 @@
   "Module_0_was_resolved_as_locally_declared_ambient_module_in_file_1_6144": "Модуль \"{0}\" был разрешен как локально объявленный окружающий модуль в файле \"{1}\".",
   "Module_0_was_resolved_to_1_but_jsx_is_not_set_6142": "Модуль \"{0}\" был разрешен как \"{1}\", но параметр \"--jsx\" не задан.",
   "Module_0_was_resolved_to_1_but_resolveJsonModule_is_not_used_7042": "Модуль \"{0}\" был разрешен как \"{1}\", но параметр \"--resolveJsonModule\" не используется.",
-  "Module_Resolution_Options_6174": "Параметры разрешения модулей",
+  "Module_declaration_names_may_only_use_or_quoted_strings_1443": "Имена объявлений модулей могут использовать только строки в кавычках «» или \"\".",
   "Module_name_0_matched_pattern_1_6092": "Имя модуля \"{0}\", соответствующий шаблон \"{1}\".",
   "Module_name_0_was_not_resolved_6090": "======== Имя модуля \"{0}\" не было разрешено. ========",
   "Module_name_0_was_successfully_resolved_to_1_6089": "======== Имя модуля \"{0}\" было успешно разрешено в \"{1}\". ========",
   "Module_name_0_was_successfully_resolved_to_1_with_Package_ID_2_6218": "======== Имя модуля \"{0}\" было успешно разрешено в \"{1}\" с идентификатором пакета \"{2}\". ========",
   "Module_resolution_kind_is_not_specified_using_0_6088": "Тип разрешения модуля не указан, используется \"{0}\".",
   "Module_resolution_using_rootDirs_has_failed_6111": "Произошел сбой при разрешении модуля с помощью \"rootDirs\".",
+  "Modules_6244": "Модули",
   "Move_labeled_tuple_element_modifiers_to_labels_95117": "Переместить модификаторы элементов маркированного кортежа в метки",
   "Move_to_a_new_file_95049": "Переместить в новый файл",
   "Multiple_consecutive_numeric_separators_are_not_permitted_6189": "Использовать несколько последовательных числовых разделителей запрещено.",
@@ -784,11 +930,14 @@
   "Name_is_not_valid_95136": "Недопустимое имя",
   "Named_property_0_of_types_1_and_2_are_not_identical_2319": "Именованное свойство \"{0}\" содержит типы \"{1}\" и \"{2}\", которые не являются идентичными.",
   "Namespace_0_has_no_exported_member_1_2694": "Пространство имен \"{0}\" не содержит экспортированный элемент \"{1}\".",
+  "Namespace_must_be_given_a_name_1437": "Пространству имен должно быть задано имя.",
+  "Namespace_name_cannot_be_0_2819": "Имя пространства имен не может быть \"{0}\".",
   "No_base_constructor_has_the_specified_number_of_type_arguments_2508": "Ни один конструктор базового класса не имеет указанного числа аргументов типа.",
   "No_constituent_of_type_0_is_callable_2755": "Нет составляющей типа \"{0}\", которую можно вызвать.",
   "No_constituent_of_type_0_is_constructable_2759": "Нет составляющей типа \"{0}\", которую можно создать.",
   "No_index_signature_with_a_parameter_of_type_0_was_found_on_type_1_7054": "В типе \"{1}\" не обнаружена сигнатура индекса с параметром типа \"{0}\".",
   "No_inputs_were_found_in_config_file_0_Specified_include_paths_were_1_and_exclude_paths_were_2_18003": "Не удалось найти входные данные в файле конфигурации \"{0}\". Указанные пути \"include\": \"{1}\", пути \"exclude\": \"{2}\".",
+  "No_longer_supported_In_early_versions_manually_set_the_text_encoding_for_reading_files_6608": "Больше не поддерживается. В ранних версиях кодирование текста устанавливалось вручную для чтения файлов.",
   "No_overload_expects_0_arguments_but_overloads_do_exist_that_expect_either_1_or_2_arguments_2575": "Ни одна перегрузка не ожидает аргументы {0}, но существуют перегрузки, которые ожидают аргументы {1} или {2}.",
   "No_overload_expects_0_type_arguments_but_overloads_do_exist_that_expect_either_1_or_2_type_arguments_2743": "Ни одна перегрузка не ожидает аргументы типа {0}, но существуют перегрузки, которые ожидают аргументы типа {1} или {2}.",
   "No_overload_matches_this_call_2769": "Ни одна перегрузка не соответствует этому вызову.",
@@ -802,7 +951,6 @@
   "Not_all_code_paths_return_a_value_7030": "Не все пути к коду возвращают значение.",
   "Not_all_constituents_of_type_0_are_callable_2756": "Не все составляющие типа \"{0}\" можно вызвать.",
   "Not_all_constituents_of_type_0_are_constructable_2760": "Не все составляющие типа \"{0}\" можно создать.",
-  "Numeric_index_type_0_is_not_assignable_to_string_index_type_1_2413": "Тип числового индекса \"{0}\" нельзя назначить типу строкового индекса \"{1}\".",
   "Numeric_literals_with_absolute_values_equal_to_2_53_or_greater_are_too_large_to_be_represented_accur_80008": "Числовые литералы с абсолютными значениями, равными 2^53 или более, слишком велики для точного представления в виде целых чисел.",
   "Numeric_separators_are_not_allowed_here_6188": "Числовые разделители здесь запрещены.",
   "Object_is_of_type_unknown_2571": "Объект имеет тип \"Неизвестный\".",
@@ -826,9 +974,11 @@
   "Only_identifiers_Slashqualified_names_with_optional_type_arguments_are_currently_supported_in_a_clas_9002": "В предложениях extends класса сейчас поддерживаются только идентификаторы или полные имена с необязательными аргументами типа.",
   "Only_named_exports_may_use_export_type_1383": "\"export type\" может использоваться только в именованном экспорте.",
   "Only_numeric_enums_can_have_computed_members_but_this_expression_has_type_0_If_you_do_not_need_exhau_18033": "Только числовые перечисления могут иметь вычисляемые элементы, но это выражение имеет тип \"{0}\". Если вы не хотите проверять полноту, рекомендуется использовать вместо этого объектный литерал.",
+  "Only_output_d_ts_files_and_not_JavaScript_files_6623": "Вывод только файлов d.ts, но не файлов JavaScript.",
   "Only_public_and_protected_methods_of_the_base_class_are_accessible_via_the_super_keyword_2340": "Через ключевое слово super доступны только общие и защищенные методы базового класса.",
   "Operator_0_cannot_be_applied_to_type_1_2736": "Не удается применить операнд \"{0}\" к типу \"{1}\".",
   "Operator_0_cannot_be_applied_to_types_1_and_2_2365": "Оператор \"{0}\" невозможно применить к типам \"{1}\" и \"{2}\".",
+  "Opt_a_project_out_of_multi_project_reference_checking_when_editing_6619": "Отключить проект от проверки ссылок на несколько проектов при редактировании.",
   "Option_0_can_only_be_specified_in_tsconfig_json_file_or_set_to_false_or_null_on_command_line_6230": "Параметр \"{0}\" можно указать только в файле \"tsconfig.json\" либо задать значение \"false\" или \"null\" для этого параметра в командной строке.",
   "Option_0_can_only_be_specified_in_tsconfig_json_file_or_set_to_null_on_command_line_6064": "Параметр \"{0}\" можно указать только в файле \"tsconfig.json\" либо задать значение \"null\" для этого параметра в командной строке.",
   "Option_0_can_only_be_used_when_either_option_inlineSourceMap_or_option_sourceMap_is_provided_5051": "Параметр \"{0}\" можно использовать только при указании \"--inlineSourceMap\" или \"--sourceMap\".",
@@ -839,16 +989,22 @@
   "Option_0_cannot_be_specified_without_specifying_option_1_or_option_2_5069": "Параметр \"{0}\" нельзя указывать без указания параметра \"{1}\" или \"{2}\".",
   "Option_0_should_have_array_of_strings_as_a_value_6103": "Параметр \"{0}\" должен иметь массив строк в качестве значения.",
   "Option_build_must_be_the_first_command_line_argument_6369": "Параметр \"--build\" должен быть первым аргументом командной строки.",
-  "Option_incremental_can_only_be_specified_using_tsconfig_emitting_to_single_file_or_when_option_tsBui_5074": "Параметр \"--incremental\" можно указать только с помощью tsconfig, выполнив вывод в отдельный файл, либо когда параметр \"--tsBuildInfoFile\".",
+  "Option_incremental_can_only_be_specified_using_tsconfig_emitting_to_single_file_or_when_option_tsBui_5074": "Параметр \"--incremental\" можно указать только с помощью tsconfig, выполнив выпуск в отдельный файл или если указан параметр \"--tsBuildInfoFile\".",
   "Option_isolatedModules_can_only_be_used_when_either_option_module_is_provided_or_option_target_is_ES_5047": "Параметр isolatedModules можно использовать, только если указан параметр --module или если параметр target — ES2015 или выше.",
+  "Option_preserveConstEnums_cannot_be_disabled_when_isolatedModules_is_enabled_5091": "Параметр \"preserveConstEnums\" не может быть отключен, если включен параметр \"isolatedModules\".",
   "Option_project_cannot_be_mixed_with_source_files_on_a_command_line_5042": "Параметр project не может быть указан вместе с исходными файлами в командной строке.",
   "Option_resolveJsonModule_can_only_be_specified_when_module_code_generation_is_commonjs_amd_es2015_or_5071": "Параметр \"--resolveJsonModule\" можно указывать, только когда для создания кода модуля указано значение \"commonjs\", \"amd\", \"es2015\" или \"esNext\".",
   "Option_resolveJsonModule_cannot_be_specified_without_node_module_resolution_strategy_5070": "Параметр \"--resolveJsonModule\" нельзя указать без стратегии разрешения модуля node.",
   "Options_0_and_1_cannot_be_combined_6370": "Параметры \"{0}\" и \"{1}\" не могут использоваться одновременно.",
   "Options_Colon_6027": "Параметры:",
+  "Output_Formatting_6256": "Форматирование выходных данных",
+  "Output_compiler_performance_information_after_building_6615": "Вывод сведений о производительности компиляторов после сборки.",
   "Output_directory_for_generated_declaration_files_6166": "Выходной каталог для создаваемых файлов объявления.",
   "Output_file_0_from_project_1_does_not_exist_6309": "Выходной файл \"{0}\" из проекта \"{1}\" не существует",
   "Output_file_0_has_not_been_built_from_source_file_1_6305": "Выходной файл \"{0}\" не создан из исходного файла \"{1}\".",
+  "Output_from_referenced_project_0_included_because_1_specified_1411": "Выходные данные из проекта \"{0}\", на который указывает ссылка, включены, так как указан \"{1}\".",
+  "Output_from_referenced_project_0_included_because_module_is_specified_as_none_1412": "Выходные данные из проекта \"{0}\", на который указывает ссылка, включены, так как для параметра \"--module\" указано значение \"none\".",
+  "Output_more_detailed_compiler_performance_information_after_building_6632": "Вывод более подробных сведений о производительности компиляторов после сборки.",
   "Overload_0_of_1_2_gave_the_following_error_2772": "Перегрузка {0} из {1}, \"{2}\", возвратила следующую ошибку.",
   "Overload_signatures_must_all_be_abstract_or_non_abstract_2512": "Сигнатуры перегрузки должны быть абстрактными или неабстрактными.",
   "Overload_signatures_must_all_be_ambient_or_non_ambient_2384": "Все сигнатуры перегрузки должны быть либо внешними, либо не внешними.",
@@ -892,18 +1048,25 @@
   "Parameter_type_of_public_static_setter_0_from_exported_class_has_or_is_using_name_1_from_private_mod_4034": "Тип параметра открытого статического метода задания \"{0}\" из экспортированного класса имеет или использует имя \"{1}\" из закрытого модуля \"{2}\".",
   "Parameter_type_of_public_static_setter_0_from_exported_class_has_or_is_using_private_name_1_4035": "Тип параметра открытого статического метода задания \"{0}\" из экспортированного класса имеет или использует закрытое имя \"{1}\".",
   "Parse_in_strict_mode_and_emit_use_strict_for_each_source_file_6141": "Анализ в строгом режиме и создание директивы \"use strict\" для каждого исходного файла.",
+  "Part_of_files_list_in_tsconfig_json_1409": "Часть списка \"files\" в tsconfig.json",
   "Pattern_0_can_have_at_most_one_Asterisk_character_5061": "Шаблон \"{0}\" может содержать не больше одного символа \"*\".",
   "Performance_timings_for_diagnostics_or_extendedDiagnostics_are_not_available_in_this_session_A_nativ_6386": "Временные показатели производительности для параметров \"--diagnostics\" и \"--extendedDiagnostics\" недоступны в этом сеансе. Не удалось найти стандартную реализацию API веб-производительности.",
+  "Platform_specific_6912": "Для конкретной платформы",
   "Prefix_0_with_an_underscore_90025": "Добавьте к \"{0}\" префикс — символ подчеркивания",
   "Prefix_all_incorrect_property_declarations_with_declare_95095": "Добавить ко всем неправильным объявлениям свойств префикс \"declare\"",
   "Prefix_all_unused_declarations_with_where_possible_95025": "Добавить префикс \"_\" ко всем неиспользуемым объявлениям, где это возможно",
   "Prefix_with_declare_95094": "Добавить префикс \"declare\"",
+  "Print_all_of_the_files_read_during_the_compilation_6653": "Печать всех файлов, считанных во время компиляции.",
+  "Print_files_read_during_the_compilation_including_why_it_was_included_6631": "Печать файлов, считываемых во время компиляции, включая то, почему он был включен.",
+  "Print_names_of_files_and_the_reason_they_are_part_of_the_compilation_6505": "Печать имен файлов и причины, по которой они включены в компиляцию.",
   "Print_names_of_files_part_of_the_compilation_6155": "Печатать имена файлов, входящих в компиляцию.",
   "Print_names_of_files_that_are_part_of_the_compilation_and_then_stop_processing_6503": "Печать имен файлов, которые являются частью компиляции, а затем остановка обработки.",
   "Print_names_of_generated_files_part_of_the_compilation_6154": "Печатать имена создаваемых файлов, входящих в компиляцию.",
   "Print_the_compiler_s_version_6019": "Печать версии компилятора.",
   "Print_the_final_configuration_instead_of_building_1350": "Печать окончательной конфигурации вместо создания.",
+  "Print_the_names_of_emitted_files_after_a_compilation_6652": "Печать имен созданных файлов после компиляции.",
   "Print_this_message_6017": "Напечатайте это сообщение.",
+  "Private_accessor_was_defined_without_a_getter_2806": "Частный метод доступа был определен без метода получения.",
   "Private_identifiers_are_not_allowed_in_variable_declarations_18029": "Закрытые идентификаторы запрещено использовать в объявлениях переменных.",
   "Private_identifiers_are_not_allowed_outside_class_bodies_18016": "Закрытые идентификаторы запрещено использовать вне тела классов.",
   "Private_identifiers_are_only_available_when_targeting_ECMAScript_2015_and_higher_18028": "Закрытые идентификаторы доступны только при разработке для ECMAScript 2015 или более поздних версий.",
@@ -911,6 +1074,7 @@
   "Private_or_protected_member_0_cannot_be_accessed_on_a_type_parameter_4105": "Не удается обратиться к закрытому или защищенному члену \"{0}\" в параметре типа.",
   "Project_0_can_t_be_built_because_its_dependency_1_has_errors_6363": "Не удается собрать проект \"{0}\", так как его зависимость \"{1}\" содержит ошибки",
   "Project_0_can_t_be_built_because_its_dependency_1_was_not_built_6383": "Не удается собрать проект \"{0}\", так как его зависимость \"{1}\" не была собрана",
+  "Project_0_is_being_forcibly_rebuilt_6388": "Проект \"{0}\" принудительно перестраивается",
   "Project_0_is_out_of_date_because_its_dependency_1_is_out_of_date_6353": "Проект \"{0}\" требует обновления, так как не обновлена его зависимость \"{1}\"",
   "Project_0_is_out_of_date_because_oldest_output_1_is_older_than_newest_input_2_6350": "Проект \"{0}\" требует обновления, так как самые старые выходные данные \"{1}\" старше самых новых входных данных \"{2}\"",
   "Project_0_is_out_of_date_because_output_file_1_does_not_exist_6352": "Проект \"{0}\" требует обновления, так как выходного файла \"{1}\" не существует",
@@ -920,14 +1084,18 @@
   "Project_0_is_up_to_date_because_newest_input_1_is_older_than_oldest_output_2_6351": "Проект \"{0}\" не требует обновления, так как самые новые входные данные \"{1}\" старее самых старых выходных данных \"{2}\"",
   "Project_0_is_up_to_date_with_d_ts_files_from_its_dependencies_6354": "Проект \"{0}\" не требует обновления с файлами .d.ts, взятыми из зависимостей проекта",
   "Project_references_may_not_form_a_circular_graph_Cycle_detected_Colon_0_6202": "Ссылки на проект не могут формировать циклический граф. Обнаружен цикл: {0}",
+  "Projects_6255": "Проекты",
   "Projects_in_this_build_Colon_0_6355": "Проекты в этой сборке: {0}",
   "Projects_to_reference_6300": "Проекты для ссылки",
+  "Property_0_cannot_have_an_initializer_because_it_is_marked_abstract_1267": "Свойство \"{0}\" не может содержать инициализатор, так как оно помечено как абстрактное.",
   "Property_0_comes_from_an_index_signature_so_it_must_be_accessed_with_0_4111": "Свойство \"{0}\" поступает из сигнатуры индекса, поэтому доступ к нему должен осуществляться с помощью [\"{0}\"].",
   "Property_0_does_not_exist_on_const_enum_1_2479": "Свойство \"{0}\" не существует в перечислении const \"{1}\".",
   "Property_0_does_not_exist_on_type_1_2339": "Свойство \"{0}\" не существует в типе \"{1}\".",
   "Property_0_does_not_exist_on_type_1_Did_you_mean_2_2551": "Свойство \"{0}\" не существует в типе \"{1}\". Вы имели в виду \"{2}\"?",
   "Property_0_does_not_exist_on_type_1_Did_you_mean_to_access_the_static_member_2_instead_2576": "Свойство \"{0}\" отсутствует в типе \"{1}\". Вы хотели обратиться к статическому элементу \"{2}\"?",
   "Property_0_does_not_exist_on_type_1_Do_you_need_to_change_your_target_library_Try_changing_the_lib_c_2550": "Свойство \"{0}\" не существует в типе \"{1}\". Вы хотите изменить целевую библиотеку? Попробуйте изменить параметр компилятора \"lib\" на \"{2}\" или более поздней версии.",
+  "Property_0_does_not_exist_on_type_1_Try_changing_the_lib_compiler_option_to_include_dom_2812": "Свойство \"{0}\" не существует в типе \"{1}\". Попробуйте изменить параметр компилятора \"lib\", включив \"dom\".",
+  "Property_0_has_no_initializer_and_is_not_definitely_assigned_in_a_class_static_block_2817": "Свойство \"{0}\" не имеет инициализатора, и ему не гарантировано присваивание в статическом блоке класса.",
   "Property_0_has_no_initializer_and_is_not_definitely_assigned_in_the_constructor_2564": "Свойство \"{0}\" не имеет инициализатора, и ему не гарантировано присваивание в конструкторе.",
   "Property_0_implicitly_has_type_any_because_its_get_accessor_lacks_a_return_type_annotation_7033": "Свойство \"{0}\" неявно имеет тип \"все\", так как для его метода доступа get не задана заметка с типом возвращаемого значения.",
   "Property_0_implicitly_has_type_any_because_its_set_accessor_lacks_a_parameter_type_annotation_7032": "Свойство \"{0}\" неявно имеет тип \"все\", так как для его метода доступа set не задана заметка с типом параметра.",
@@ -945,18 +1113,19 @@
   "Property_0_is_optional_in_type_1_but_required_in_type_2_2327": "Свойство \"{0}\" является необязательным в типе \"{1}\" и обязательным в типе \"{2}\".",
   "Property_0_is_private_and_only_accessible_within_class_1_2341": "Свойство \"{0}\" является закрытым и доступно только в классе \"{1}\".",
   "Property_0_is_private_in_type_1_but_not_in_type_2_2325": "Свойство \"{0}\" является закрытым в типе \"{1}\" и не является таковым в типе \"{2}\".",
-  "Property_0_is_protected_and_only_accessible_through_an_instance_of_class_1_2446": "Свойство \"{0}\" является защищенным и доступно только через экземпляр класса \"{1}\".",
+  "Property_0_is_protected_and_only_accessible_through_an_instance_of_class_1_This_is_an_instance_of_cl_2446": "Свойство \"{0}\" защищено и доступно только через экземпляр класса \"{1}\". Это экземпляр класса \"{2}\".",
   "Property_0_is_protected_and_only_accessible_within_class_1_and_its_subclasses_2445": "Свойство \"{0}\" является защищенным и доступно только в классе \"{1}\" и его подклассах.",
   "Property_0_is_protected_but_type_1_is_not_a_class_derived_from_2_2443": "Свойство \"{0}\" является защищенным, однако тип \"{1}\" не является классом, производным от \"{2}\".",
   "Property_0_is_protected_in_type_1_but_public_in_type_2_2444": "Свойство \"{0}\" является защищенным в типе \"{1}\" и общим в типе \"{2}\".",
   "Property_0_is_used_before_being_assigned_2565": "Свойство \"{0}\" используется перед присваиванием значения.",
   "Property_0_is_used_before_its_initialization_2729": "Свойство \"{0}\" используется перед его инициализацией.",
+  "Property_0_may_not_be_used_in_a_static_property_s_initializer_in_the_same_class_when_target_is_esnex_2810": "Свойство \"{0}\" не может использоваться в инициализаторе статического свойства в том же классе, если \"target\" имеет значение \"esnext\", а \"useDefineForClassFields\" — \"false\".",
+  "Property_0_may_not_exist_on_type_1_Did_you_mean_2_2568": "Свойство \"{0}\" может не существовать в типе \"{1}\". Вы имели в виду \"{2}\"?",
   "Property_0_of_JSX_spread_attribute_is_not_assignable_to_target_property_2606": "Свойство \"{0}\" атрибута расширения JSX не может быть назначено для целевого свойства.",
   "Property_0_of_exported_class_expression_may_not_be_private_or_protected_4094": "Свойство \"{0}\" выражения экспортированного класса не может быть частным или защищенным.",
   "Property_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2_4032": "Свойство \"{0}\" экспортированного интерфейса имеет или использует имя \"{1}\" из закрытого модуля \"{2}\".",
   "Property_0_of_exported_interface_has_or_is_using_private_name_1_4033": "Свойство \"{0}\" экспортированного интерфейса имеет или использует закрытое имя \"{1}\".",
-  "Property_0_of_type_1_is_not_assignable_to_numeric_index_type_2_2412": "Свойство \"{0}\" типа \"{1}\" нельзя назначить типу числового индекса \"{2}\".",
-  "Property_0_of_type_1_is_not_assignable_to_string_index_type_2_2411": "Свойство \"{0}\" типа \"{1}\" нельзя назначить типу строкового индекса \"{2}\".",
+  "Property_0_of_type_1_is_not_assignable_to_2_index_type_3_2411": "Свойство \"{0}\" типа \"{1}\" не может быть назначено типу индекса \"{2}\" \"{3}\".",
   "Property_0_was_also_declared_here_2733": "Здесь также было объявлено свойство \"{0}\".",
   "Property_0_will_overwrite_the_base_property_in_1_If_this_is_intentional_add_an_initializer_Otherwise_2612": "Свойство \"{0}\" перезапишет базовое свойство в \"{1}\". Если это сделано намеренно, добавьте инициализатор. В противном случае добавьте модификатор \"declare\" или удалите избыточное объявление.",
   "Property_assignment_expected_1136": "Ожидалось назначение свойства.",
@@ -978,12 +1147,18 @@
   "Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4027": "Общее статическое свойство \"{0}\" экспортированного класса имеет или использует имя \"{1}\" из закрытого модуля \"{2}\".",
   "Public_static_property_0_of_exported_class_has_or_is_using_private_name_1_4028": "Общее статическое свойство \"{0}\" экспортированного класса имеет или использует закрытое имя \"{1}\".",
   "Qualified_name_0_is_not_allowed_without_a_leading_param_object_1_8032": "Полное имя \"{0}\" запрещено использовать, если перед ним не стоит \"@param {object} {1}\".",
+  "Raise_an_error_when_a_function_parameter_isn_t_read_6676": "Ошибка, если параметр функции не читается",
   "Raise_error_on_expressions_and_declarations_with_an_implied_any_type_6052": "Вызывать ошибку в выражениях и объявлениях с подразумеваемым типом any.",
   "Raise_error_on_this_expressions_with_an_implied_any_type_6115": "Вызвать ошибку в выражениях this с неявным типом any.",
   "Re_exporting_a_type_when_the_isolatedModules_flag_is_provided_requires_using_export_type_1205": "Для повторного экспорта типа при указании флага \"--isolatedModules\" требуется использовать \"export type\".",
   "Redirect_output_structure_to_the_directory_6006": "Перенаправить структуру вывода в каталог.",
+  "Reduce_the_number_of_projects_loaded_automatically_by_TypeScript_6617": "Уменьшить количество проектов, автоматически загружаемых с помощью TypeScript.",
   "Referenced_project_0_may_not_disable_emit_6310": "Проект \"{0}\", на который указывает ссылка, не может отключить порождение.",
   "Referenced_project_0_must_have_setting_composite_Colon_true_6306": "Указанный в ссылке проект \"{0}\" должен иметь следующее значение параметра composite: true.",
+  "Referenced_via_0_from_file_1_1400": "Ссылка с помощью \"{0}\" из файла \"{1}\"",
+  "Remove_a_list_of_directories_from_the_watch_process_6628": "Удалить список каталогов из процесса просмотра.",
+  "Remove_a_list_of_files_from_the_watch_mode_s_processing_6629": "Удалить список файлов из обработки в режиме просмотра.",
+  "Remove_all_unnecessary_override_modifiers_95163": "Удалите все ненужные модификаторы \"override\".",
   "Remove_all_unnecessary_uses_of_await_95087": "Удаление всех ненужных случаев использования \"await\"",
   "Remove_all_unreachable_code_95051": "Удалить весь недостижимый код",
   "Remove_all_unused_labels_95054": "Удалить все неиспользуемые метки",
@@ -991,8 +1166,10 @@
   "Remove_braces_from_arrow_function_95060": "Удалить скобки из стрелочной функции",
   "Remove_braces_from_arrow_function_body_95112": "Удалить скобки из тела стрелочной функции",
   "Remove_import_from_0_90005": "Удалить импорт из \"{0}\"",
+  "Remove_override_modifier_95161": "Удалите модификатор \"override\".",
   "Remove_parentheses_95126": "Удалите круглые скобки",
   "Remove_template_tag_90011": "Удаление тега шаблона",
+  "Remove_the_20mb_cap_on_total_source_code_size_for_JavaScript_files_in_the_TypeScript_language_server_6618": "Снимите ограничение в 20 МБ на общий размер исходного кода для файлов JavaScript на языковом сервере TypeScript.",
   "Remove_type_parameters_90012": "Удаление параметров типа",
   "Remove_unnecessary_await_95086": "Удалить ненужный оператор \"await\"",
   "Remove_unreachable_code_95050": "Удалить недостижимый код",
@@ -1010,14 +1187,16 @@
   "Report_errors_in_js_files_8019": "Сообщать об ошибках в JS-файлах.",
   "Report_errors_on_unused_locals_6134": "Сообщать об ошибках в неиспользованных локальных переменных.",
   "Report_errors_on_unused_parameters_6135": "Сообщать об ошибках в неиспользованных параметрах.",
-  "Require_undeclared_properties_from_index_signatures_to_use_element_accesses_6803": "Требовать необъявленные свойства из сигнатур индекса для использования доступа к элементам.",
+  "Require_undeclared_properties_from_index_signatures_to_use_element_accesses_6717": "Требовать необъявленные свойства из сигнатур индекса для использования доступа к элементам.",
   "Required_type_parameters_may_not_follow_optional_type_parameters_2706": "Обязательные параметры типа не могут следовать за необязательными параметрами типа.",
   "Resolution_for_module_0_was_found_in_cache_from_location_1_6147": "Разрешение для модуля \"{0}\" найдено в кэше из расположения \"{1}\".",
+  "Resolution_for_type_reference_directive_0_was_found_in_cache_from_location_1_6241": "Разрешение для директивы ссылки на тип \"{0}\" обнаружено в кэше из расположения \"{1}\".",
   "Resolve_keyof_to_string_valued_property_names_only_no_numbers_or_symbols_6195": "Разрешать \"keyof\" только в имена свойств со строковым значением (не числа и не символы).",
   "Resolving_from_node_modules_folder_6118": "Идет разрешение из папки node_modules...",
   "Resolving_module_0_from_1_6086": "======== Идет разрешение модуля \"{0}\" из \"{1}\". ========",
   "Resolving_module_name_0_relative_to_base_url_1_2_6094": "Идет разрешение имени модуля \"{0}\" относительного к базовому URL-адресу \"{1}\" — \"{2}\".",
   "Resolving_real_path_for_0_result_1_6130": "Разрешается реальный путь для \"{0}\"; результат: \"{1}\".",
+  "Resolving_type_reference_directive_0_containing_file_1_6242": "======== Разрешение директивы ссылки на тип \"{0}\", содержащее файл \"{1}\". ========",
   "Resolving_type_reference_directive_0_containing_file_1_root_directory_2_6116": "======== Идет разрешение директивы ссылки на тип \"{0}\", содержащий файл \"{1}\", корневой каталог \"{2}\". ========",
   "Resolving_type_reference_directive_0_containing_file_1_root_directory_not_set_6123": "======== Идет разрешение директивы ссылки на тип \"{0}\", содержащий файл \"{1}\", корневой каталог не задан. ========",
   "Resolving_type_reference_directive_0_containing_file_not_set_root_directory_1_6127": "======== Идет разрешение директивы ссылки на тип \"{0}\", содержащий файл не задан, корневой каталог \"{1}\". ========",
@@ -1029,6 +1208,7 @@
   "Rest_signatures_are_incompatible_2572": "Сигнатуры элемента rest несовместимы.",
   "Rest_types_may_only_be_created_from_object_types_2700": "Типы REST можно создавать только из типов объектов.",
   "Return_type_annotation_circularly_references_itself_2577": "Заметка с типом возвращаемого значения циклически ссылается на саму себя.",
+  "Return_type_must_be_inferred_from_a_function_95149": "Тип возвращаемого значения должен быть определен из функции.",
   "Return_type_of_call_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1_4046": "Тип возвращаемого значения сигнатуры вызова из экспортированного интерфейса имеет или использует имя \"{0}\" из закрытого модуля \"{1}\".",
   "Return_type_of_call_signature_from_exported_interface_has_or_is_using_private_name_0_4047": "Тип возвращаемого значения сигнатуры вызова из экспортированного интерфейса имеет или использует закрытое имя \"{0}\".",
   "Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_name_0_from_private_mod_4044": "Тип возвращаемого значения сигнатуры конструктора из экспортированного интерфейса имеет или использует имя \"{0}\" из закрытого модуля \"{1}\".",
@@ -1053,15 +1233,31 @@
   "Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_external_module__4050": "Тип возвращаемого значения общего статического метода из экспортированного класса имеет или использует имя \"{0}\" из внешнего модуля {1}, но не может быть именован.",
   "Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_private_module_1_4051": "Тип возвращаемого значения общего статического метода из экспортированного класса имеет или использует имя \"{0}\" из закрытого модуля \"{1}\".",
   "Return_type_of_public_static_method_from_exported_class_has_or_is_using_private_name_0_4052": "Тип возвращаемого значения общего статического метода из экспортированного класса имеет или использует закрытое имя \"{0}\".",
-  "Reusing_module_resolutions_originating_in_0_since_resolutions_are_unchanged_from_old_program_6184": "Повторно используются разрешения модулей, унаследованные из \"{0}\", так как они не изменились со старой программы.",
-  "Reusing_resolution_of_module_0_to_file_1_from_old_program_6183": "Повторно используется разрешение модуля \"{0}\" в файле \"{1}\" из старой программы.",
+  "Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_not_resolved_6395": "Повторное использование модуля \"{0}\" из \"{1}\", найденного в кэше из расположения \"{2}\". Не разрешено.",
+  "Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_6393": "Повторное использование разрешения модуля \"{0}\" из \"{1}\", найденного в кэше из расположения \"{2}\". Разрешено в \"{3}\".",
+  "Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_6394": "Повторное использование разрешения модуля \"{0}\" из \"{1}\", найденного в кэше из расположения \"{2}\". Разрешено в \"{3}\" с ИД пакета \"{4}\".",
+  "Reusing_resolution_of_module_0_from_1_of_old_program_it_was_not_resolved_6389": "Повторное использование разрешения модуля \"{0}\" из \"{1}\" старой программы. Не разрешено.",
+  "Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2_6183": "Повторное использование разрешения модуля \"{0}\" из \"{1}\" старой программы. Разрешено в \"{2}\".",
+  "Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2_with_Package__6184": "Повторное использование модуля \"{0}\" из \"{1}\" старой программы. Разрешено в \"{2}\" с ИД пакета \"{3}\".",
+  "Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_not_re_6398": "Повторное использование директивы ссылки на тип \"{0}\" из \"{1}\", найденной в кэше из расположения \"{2}\". Не разрешено.",
+  "Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_succes_6396": "Повторное использование директивы ссылки на тип \"{0}\" из \"{1}\", найденной в кэше из расположения \"{2}\". Разрешено в \"{3}\".",
+  "Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_succes_6397": "Повторное использование директивы ссылки на тип \"{0}\" из \"{1}\", найденной в кэше из расположения \"{2}\". Разрешено в \"{3}\" с ИД пакета \"{4}\".",
+  "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_not_resolved_6392": "Повторное использование директивы ссылки на тип \"{0}\" из \"{1}\" старой программы. Не разрешено.",
+  "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved__6390": "Повторное использование директивы ссылки на тип \"{0}\" из \"{1}\" старой программы. Разрешено в \"{2}\".",
+  "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved__6391": "Повторное использование директивы ссылки на тип \"{0}\" из \"{1}\" старой программы. Разрешено в \"{2}\" с ИД пакета \"{3}\".",
   "Rewrite_all_as_indexed_access_types_95034": "Перезаписать все как типы с индексным доступом",
   "Rewrite_as_the_indexed_access_type_0_90026": "Перезапишите как тип с индексным доступом \"{0}\"",
   "Root_directory_cannot_be_determined_skipping_primary_search_paths_6122": "Корневой каталог невозможно определить, идет пропуск первичных путей поиска.",
+  "Root_file_specified_for_compilation_1427": "Корневой файл, указанный для компиляции",
   "STRATEGY_6039": "СТРАТЕГИЯ",
+  "Save_tsbuildinfo_files_to_allow_for_incremental_compilation_of_projects_6642": "Сохраните файлы .tsbuildinfo, чтобы обеспечить возможность добавочной компиляции проектов.",
   "Scoped_package_detected_looking_in_0_6182": "Обнаружен пакет, относящийся к области; поиск в \"{0}\"",
+  "Selection_is_not_a_valid_statement_or_statements_95155": "Выделенный фрагмент не является допустимым оператором или операторами.",
   "Selection_is_not_a_valid_type_node_95133": "Выбранный элемент не является допустимым узлом типа.",
+  "Set_the_JavaScript_language_version_for_emitted_JavaScript_and_include_compatible_library_declaratio_6705": "Задать версию языка файла JavaScript для создаваемого файла JavaScript и включения объявлений совместимых библиотек.",
+  "Set_the_language_of_the_messaging_from_TypeScript_This_does_not_affect_emit_6654": "Установить язык сообщений из файла TypeScript. Это не влияет на выпуск.",
   "Set_the_module_option_in_your_configuration_file_to_0_95099": "Задание для параметра \"module\" в файле конфигурации значения \"{0}\"",
+  "Set_the_newline_character_for_emitting_files_6659": "Установка символа новой строки для созданных файлов.",
   "Set_the_target_option_in_your_configuration_file_to_0_95098": "Задание для параметра \"target\" в файле конфигурации значения \"{0}\"",
   "Setters_cannot_return_a_value_2408": "Методы доступа set не могут возвращать значения.",
   "Show_all_compiler_options_6169": "Отображение всех параметров компилятора.",
@@ -1069,31 +1265,63 @@
   "Show_verbose_diagnostic_information_6150": "Отображение подробных сведений диагностики.",
   "Show_what_would_be_built_or_deleted_if_specified_with_clean_6367": "Показать компоненты, которые будут собраны (или удалены, если дополнительно указан параметр \"--clean\")",
   "Signature_0_must_be_a_type_predicate_1224": "Сигнатура \"{0}\" должна быть предикатом типа.",
+  "Skip_type_checking_all_d_ts_files_6693": "Пропустить проверку типа всех файлов .d.ts",
+  "Skip_type_checking_d_ts_files_that_are_included_with_TypeScript_6692": "Пропуск проверки типа файлов D.ts, включенных в файл TypeScript.",
   "Skip_type_checking_of_declaration_files_6012": "Пропустить проверку типа файлов объявления.",
   "Skipping_build_of_project_0_because_its_dependency_1_has_errors_6362": "Сборка проекта \"{0}\" будет пропущена, так как его зависимость \"{1}\" содержит ошибки",
   "Skipping_build_of_project_0_because_its_dependency_1_was_not_built_6382": "Сборка проекта \"{0}\" будет пропущена, так как его зависимость \"{1}\" не была собрана",
-  "Source_Map_Options_6175": "Параметры сопоставления источников",
+  "Source_from_referenced_project_0_included_because_1_specified_1414": "Источник из проекта \"{0}\", на который указывает ссылка, включен, так как указан \"{1}\".",
+  "Source_from_referenced_project_0_included_because_module_is_specified_as_none_1415": "Источник из проекта \"{0}\", на который указывает ссылка, включен, так как для параметра \"--module\" указано значение \"none\".",
   "Source_has_0_element_s_but_target_allows_only_1_2619": "Число элементов в источнике — {0}, но целевой объект разрешает только {1}.",
   "Source_has_0_element_s_but_target_requires_1_2618": "Число элементов в источнике — {0}, но целевой объект требует {1}.",
+  "Source_provides_no_match_for_required_element_at_position_0_in_target_2623": "Источник не предоставляет соответствия для обязательного элемента в позиции {0} в целевом объекте.",
+  "Source_provides_no_match_for_variadic_element_at_position_0_in_target_2624": "Источник не предоставляет соответствия для элемента с переменным числом аргументов в позиции {0} в целевом объекте.",
   "Specialized_overload_signature_is_not_assignable_to_any_non_specialized_signature_2382": "Специализированная сигнатура перегрузки не поддерживает назначение неспециализированной сигнатуре.",
   "Specifier_of_dynamic_import_cannot_be_spread_element_1325": "Описатель динамического импорта не может быть элементом расширения.",
-  "Specify_ECMAScript_target_version_Colon_ES3_default_ES5_ES2015_ES2016_ES2017_ES2018_ES2019_ES2020_or_6015": "Укажите целевую версию ECMAScript: \"ES3\" (по умолчанию), \"ES5\", \"ES2015\", \"ES2016\", \"ES2017\", \"ES2018\", \"ES2019\", \"ES2020\" или \"ESNEXT\".",
-  "Specify_JSX_code_generation_Colon_preserve_react_native_or_react_6080": "Укажите вариант создания кода JSX: \"preserve\", \"react-native\" или \"react\".",
-  "Specify_emit_Slashchecking_behavior_for_imports_that_are_only_used_for_types_1368": "Указание поведения вывода/проверки для импортов, которые используются только для типов",
+  "Specify_ECMAScript_target_version_6015": "Укажите целевую версию ECMAScript.",
+  "Specify_JSX_code_generation_6080": "Укажите способ создания кода JSX.",
+  "Specify_a_file_that_bundles_all_outputs_into_one_JavaScript_file_If_declaration_is_true_also_designa_6679": "Укажите файл, который объединяет все выходные данные в один файл JavaScript. Если параметр \"declaration\" имеет значение true, также обозначает файл, который объединяет весь вывод .d.ts.",
+  "Specify_a_list_of_glob_patterns_that_match_files_to_be_included_in_compilation_6641": "Укажите список шаблонов стандартной маски, соответствующих файлам, которые будут включены в компиляцию.",
+  "Specify_a_list_of_language_service_plugins_to_include_6681": "Укажите список включаемых подключаемых модулей языковой службы.",
+  "Specify_a_set_of_bundled_library_declaration_files_that_describe_the_target_runtime_environment_6651": "Укажите набор файлов объявлений связанных библиотек, которые описывают целевую среду выполнения.",
+  "Specify_a_set_of_entries_that_re_map_imports_to_additional_lookup_locations_6680": "Укажите набор записей, которые повторно сопоставляют импорт с дополнительными расположениями поиска.",
+  "Specify_an_array_of_objects_that_specify_paths_for_projects_Used_in_project_references_6687": "Укажите массив объектов, которые указывают пути для проектов. Используется в ссылках проекта.",
+  "Specify_an_output_folder_for_all_emitted_files_6678": "Укажите выходную папку для всех выпущенных файлов.",
+  "Specify_emit_Slashchecking_behavior_for_imports_that_are_only_used_for_types_6718": "Указание поведения вывода/проверки для импортов, которые используются только для типов",
   "Specify_file_to_store_incremental_compilation_information_6380": "Указание файла для хранения сведений о добавочной компиляции",
+  "Specify_how_TypeScript_looks_up_a_file_from_a_given_module_specifier_6658": "Укажите, как TypeScript ищет файл в заданном описателе модуля.",
+  "Specify_how_directories_are_watched_on_systems_that_lack_recursive_file_watching_functionality_6714": "Укажите способ наблюдения за каталогами в системах, в которых отсутствует рекурсивный просмотр файлов.",
+  "Specify_how_the_TypeScript_watch_mode_works_6715": "Укажите, как работает режим отслеживания TypeScript.",
   "Specify_library_files_to_be_included_in_the_compilation_6079": "Укажите файлы библиотек для включения в компиляцию.",
-  "Specify_module_code_generation_Colon_none_commonjs_amd_system_umd_es2015_es2020_or_ESNext_6016": "Укажите создание кода модуля: \"none\", \"commonjs\", \"amd\", \"system\", \"umd\", \"es2015\", \"es2020\" или \"ESNext\".",
+  "Specify_module_code_generation_6016": "Укажите способ создания кода модуля.",
   "Specify_module_resolution_strategy_Colon_node_Node_js_or_classic_TypeScript_pre_1_6_6069": "Укажите стратегию разрешения модуля: node (Node.js) или classic (TypeScript pre-1.6).",
-  "Specify_strategy_for_creating_a_polling_watch_when_it_fails_to_create_using_file_system_events_Colon_6227": "Укажите стратегию для создания контрольного значения опроса, когда его не удается создать с использованием событий файловой системы: \"FixedInterval\" (по умолчанию), \"PriorityInterval\", \"DynamicPriority\".",
-  "Specify_strategy_for_watching_directory_on_platforms_that_don_t_support_recursive_watching_natively__6226": "Укажите стратегию для наблюдения за каталогом на платформах, не имеющих собственной поддержки рекурсивного наблюдения: \"UseFsEvents\" (по умолчанию), \"FixedPollingInterval\", \"DynamicPriorityPolling\".",
-  "Specify_strategy_for_watching_file_Colon_FixedPollingInterval_default_PriorityPollingInterval_Dynami_6225": "Укажите стратегию для наблюдения за файлом: \"FixedPollingInterval\" (по умолчанию), \"PriorityPollingInterval\", \"DynamicPriorityPolling\", \"UseFsEvents\", \"UseFsEventsOnParentDirectory\".",
+  "Specify_module_specifier_used_to_import_the_JSX_factory_functions_when_using_jsx_Colon_react_jsx_Ast_6649": "Укажите спецификатор модуля, используемый для импорта функций множителя JSX при использовании \"jsx: react-jsx*\".",
+  "Specify_multiple_folders_that_act_like_Slashnode_modules_Slash_types_6710": "Укажите несколько папок, которые действуют как \"./node_modules/@types\".",
+  "Specify_one_or_more_path_or_node_module_references_to_base_configuration_files_from_which_settings_a_6633": "Укажите один или несколько путей или ссылок на модуль узла для файлов базовой конфигурации, от которых наследуются параметры.",
+  "Specify_options_for_automatic_acquisition_of_declaration_files_6709": "Укажите параметры для автоматического получения файлов объявлений.",
+  "Specify_strategy_for_creating_a_polling_watch_when_it_fails_to_create_using_file_system_events_Colon_6227": "Укажите стратегию для создания контрольного значения опроса, когда его не удается создать с использованием событий файловой системы: \"FixedInterval\" (по умолчанию), \"PriorityInterval\", \"DynamicPriority\", \"FixedChunkSize\".",
+  "Specify_strategy_for_watching_directory_on_platforms_that_don_t_support_recursive_watching_natively__6226": "Укажите стратегию для наблюдения за каталогом на платформах, не имеющих собственной поддержки рекурсивного наблюдения: \"UseFsEvents\" (по умолчанию), \"FixedPollingInterval\", \"DynamicPriorityPolling\", \"FixedChunkSizePolling\".",
+  "Specify_strategy_for_watching_file_Colon_FixedPollingInterval_default_PriorityPollingInterval_Dynami_6225": "Укажите стратегию для наблюдения за файлом: \"FixedPollingInterval\" (по умолчанию), \"PriorityPollingInterval\", \"DynamicPriorityPolling\", \"FixedChunkSizePolling\", \"UseFsEvents\", \"UseFsEventsOnParentDirectory\".",
+  "Specify_the_JSX_Fragment_reference_used_for_fragments_when_targeting_React_JSX_emit_e_g_React_Fragme_6648": "Укажите ссылку на фрагмент JSX, используемую для фрагментов при нацеливании на вывод React JSX, например \"React.Fragment\" или \"Fragment\".",
   "Specify_the_JSX_factory_function_to_use_when_targeting_react_JSX_emit_e_g_React_createElement_or_h_6146": "Укажите функцию фабрики JSX, используемую при нацеливании на вывод JSX \"react\", например \"React.createElement\" или \"h\".",
+  "Specify_the_JSX_factory_function_used_when_targeting_React_JSX_emit_e_g_React_createElement_or_h_6647": "Укажите функцию фабрики JSX, используемую при нацеливании на вывод React JSX, например \"React.createElement\" или \"h\".",
   "Specify_the_JSX_fragment_factory_function_to_use_when_targeting_react_JSX_emit_with_jsxFactory_compi_18034": "Укажите функцию фабрики фрагмента JSX, которая будет использоваться при нацеливании порождения JSX \"react\", если указан параметр компилятора \"jsxFactory\", например \"Fragment\".",
+  "Specify_the_base_directory_to_resolve_non_relative_module_names_6607": "Укажите базовый каталог для разрешения не относительных имен модулей.",
   "Specify_the_end_of_line_sequence_to_be_used_when_emitting_files_Colon_CRLF_dos_or_LF_unix_6060": "Укажите окончание последовательности строки для использования при порождении файлов: CRLF (DOS) или LF (UNIX).",
+  "Specify_the_folder_for_tsbuildinfo_incremental_compilation_files_6707": "Укажите папку для файлов инкрементной компиляции .tsbuildinfo.",
   "Specify_the_location_where_debugger_should_locate_TypeScript_files_instead_of_source_locations_6004": "Укажите расположение, в котором отладчик должен найти файлы TypeScript вместо исходных расположений.",
-  "Specify_the_location_where_debugger_should_locate_map_files_instead_of_generated_locations_6003": "Укажите расположение, в котором отладчик должен найти файлы карты, вместо созданных расположений.",
-  "Specify_the_module_specifier_to_be_used_to_import_the_jsx_and_jsxs_factory_functions_from_eg_react_6238": "Укажите спецификатор модуля, который будет использоваться для импорта функций фабрики jsx и jsxs, например react",
+  "Specify_the_location_where_debugger_should_locate_map_files_instead_of_generated_locations_6655": "Укажите расположение, в котором отладчик должен найти файлы карты, вместо созданных расположений.",
+  "Specify_the_maximum_folder_depth_used_for_checking_JavaScript_files_from_node_modules_Only_applicabl_6656": "Укажите максимальную глубину папки, используемую для проверки файлов JavaScript в \"node_modules\". Применимо только в сочетании с \"allowJs\".",
+  "Specify_the_module_specifier_to_be_used_to_import_the_jsx_and_jsxs_factory_functions_from_eg_react_6238": "Укажите описатель модуля, который будет использоваться для импорта функций фабрики \"jsx\" и \"jsxs\", например react",
+  "Specify_the_object_invoked_for_createElement_This_only_applies_when_targeting_react_JSX_emit_6686": "Укажите объект, вызванный для \"createElement\". Это применимо только при нацеливании на вывод JSX в \"react\".",
+  "Specify_the_output_directory_for_generated_declaration_files_6613": "Укажите выходной каталог для создаваемых файлов объявления.",
   "Specify_the_root_directory_of_input_files_Use_to_control_the_output_directory_structure_with_outDir_6058": "Укажите корневой каталог входных файлов. Используйте его для управления структурой выходных каталогов с --outDir.",
+  "Specify_the_root_folder_within_your_source_files_6690": "Укажите корневую папку в исходных файлах.",
+  "Specify_the_root_path_for_debuggers_to_find_the_reference_source_code_6695": "Укажите корневой путь для отладчиков для поиска исходного кода ссылки.",
+  "Specify_type_package_names_to_be_included_without_being_referenced_in_a_source_file_6711": "Укажите имена типов пакетов, которые будут включены без ссылки в исходном файле.",
+  "Specify_what_JSX_code_is_generated_6646": "Укажите, какой код JSX создается.",
+  "Specify_what_approach_the_watcher_should_use_if_the_system_runs_out_of_native_file_watchers_6634": "Укажите, какой подход должен использовать наблюдатель, если наблюдатель за основными файлами вышел из системы.",
+  "Specify_what_module_code_is_generated_6657": "Укажите создаваемый код модуля.",
   "Split_all_invalid_type_only_imports_1367": "Разделение всех недопустимых импортов, затрагивающих только тип",
   "Split_into_two_separate_import_declarations_1366": "Разделение на два отдельных объявления импорта",
   "Spread_operator_in_new_expressions_is_only_available_when_targeting_ECMAScript_5_and_higher_2472": "Оператор расширения в выражениях new доступен только при разработке для ECMAScript 5 и более поздних версий.",
@@ -1101,9 +1329,9 @@
   "Starting_compilation_in_watch_mode_6031": "Запуск компиляции в режиме наблюдения...",
   "Statement_expected_1129": "Ожидался оператор.",
   "Statements_are_not_allowed_in_ambient_contexts_1036": "Операторы не разрешены в окружающих контекстах.",
+  "Static_fields_with_private_names_can_t_have_initializers_when_the_useDefineForClassFields_flag_is_no_2805": "Статические поля с частными именами не могут иметь инициализаторы, если не указан флаг \"--useDefineForClassFields\" с параметром \"--target\", имеющим значение \"esnext\". Рекомендуется добавить флаг \"--useDefineForClassFields\".",
   "Static_members_cannot_reference_class_type_parameters_2302": "Статические элементы не могут ссылаться на параметры типов класса.",
   "Static_property_0_conflicts_with_built_in_property_Function_0_of_constructor_function_1_2699": "Статическое свойство \"{0}\" конфликтует со встроенным свойством \"Function.{0}\" функции-конструктора \"{1}\".",
-  "Strict_Type_Checking_Options_6173": "Параметры строгой проверки типов",
   "String_literal_expected_1141": "Ожидался строковый литерал.",
   "String_literal_with_double_quotes_expected_1327": "Ожидается строковый литерал с двойными кавычками.",
   "Stylize_errors_and_messages_using_color_and_context_experimental_6073": "Стилизовать ошибки и сообщения с помощью цвета и контекста (экспериментальная функция).",
@@ -1117,9 +1345,10 @@
   "Super_calls_are_not_permitted_outside_constructors_or_in_nested_functions_inside_constructors_2337": "Вызовы super не разрешены вне конструкторов или во вложенных функциях внутри конструкторов.",
   "Suppress_excess_property_checks_for_object_literals_6072": "Подавлять избыточные проверки свойств для объектных литералов.",
   "Suppress_noImplicitAny_errors_for_indexing_objects_lacking_index_signatures_6055": "Подавлять ошибки noImplicitAny для объектов индексирования, у которых отсутствуют сигнатуры индекса.",
+  "Suppress_noImplicitAny_errors_when_indexing_objects_that_lack_index_signatures_6703": "Подавление ошибок \"noImplicitAny\" при индексации объектов без сигнатуры индекса.",
   "Switch_each_misused_0_to_1_95138": "Изменить все неверно используемые \"{0}\" на \"{1}\"",
   "Symbol_reference_does_not_refer_to_the_global_Symbol_constructor_object_2470": "Ссылка Symbol не ссылается на глобальный объект конструктора Symbol.",
-  "Synchronously_call_callbacks_and_update_the_state_of_directory_watchers_on_platforms_that_don_t_supp_6228": "Синхронно вызывайте обратные вызовы и обновляйте состояние наблюдателей каталогов на платформах, не имеющих собственной поддержки рекурсивного наблюдения.",
+  "Synchronously_call_callbacks_and_update_the_state_of_directory_watchers_on_platforms_that_don_t_supp_6704": "Синхронно вызывайте обратные вызовы и обновляйте состояние наблюдателей каталогов на платформах, не имеющих собственной поддержки рекурсивного наблюдения.",
   "Syntax_Colon_0_6023": "Синтаксис: {0}",
   "Tag_0_expects_at_least_1_arguments_but_the_JSX_factory_2_provides_at_most_3_6229": "Минимальное ожидаемое число аргументов для тега \"{0}\" — \"{1}\", но фабрика JSX \"{2}\" предоставляет максимум \"{3}\".",
   "Tagged_template_expressions_are_not_permitted_in_an_optional_chain_1358": "Выражения шаблона с тегами запрещено использовать в необязательной цепочке.",
@@ -1134,17 +1363,19 @@
   "The_arguments_object_cannot_be_referenced_in_an_arrow_function_in_ES3_and_ES5_Consider_using_a_stand_2496": "Нельзя ссылаться на объект типа arguments в стрелочной функции ES3 и ES5. Используйте стандартное выражение функции.",
   "The_arguments_object_cannot_be_referenced_in_an_async_function_or_method_in_ES3_and_ES5_Consider_usi_2522": "На объект arguments невозможно указать ссылку в асинхронной функции или методе в ES3 и ES5. Попробуйте использовать стандартную функцию или метод.",
   "The_body_of_an_if_statement_cannot_be_the_empty_statement_1313": "Текст оператора if не может быть пустым.",
-  "The_bundledPackageName_option_must_be_provided_when_using_outFile_and_node_module_resolution_with_de_1391": "Параметр bundledPackageName должен быть указан при использовании outFile и разрешения модуля узла с порождением объявления.",
+  "The_bundledPackageName_option_must_be_provided_when_using_outFile_and_node_module_resolution_with_de_1391": "Параметр \"bundledPackageName\" должен быть указан при использовании outFile и разрешения модуля узла с выпуском объявления.",
   "The_call_would_have_succeeded_against_this_implementation_but_implementation_signatures_of_overloads_2793": "Вызов для этой реализации был выполнен успешно, но сигнатуры реализации перегрузок не видны извне.",
   "The_character_set_of_the_input_files_6163": "Кодировка входных файлов.",
   "The_containing_arrow_function_captures_the_global_value_of_this_7041": "Содержащая стрелочная функция фиксирует глобальное значение \"this\".",
   "The_containing_function_or_module_body_is_too_large_for_control_flow_analysis_2563": "Содержащая функция или текст модуля слишком велики для анализа потока управления.",
   "The_current_host_does_not_support_the_0_option_5001": "Текущий узел не поддерживает параметр \"{0}\".",
   "The_declaration_of_0_that_you_probably_intended_to_use_is_defined_here_18018": "Здесь определяется объявление объекта \"{0}\", который вы, вероятно, намеревались использовать",
+  "The_declaration_was_marked_as_deprecated_here_2798": "Объявление было отмечено как устаревшее.",
   "The_expected_type_comes_from_property_0_which_is_declared_here_on_type_1_6500": "Ожидаемый тип поступает из свойства \"{0}\", объявленного здесь в типе \"{1}\"",
   "The_expected_type_comes_from_the_return_type_of_this_signature_6502": "Ожидаемый тип определяется типом возвращаемого значения этой сигнатуры.",
   "The_expected_type_comes_from_this_index_signature_6501": "Ожидаемый тип определяется этой сигнатурой индекса.",
   "The_expression_of_an_export_assignment_must_be_an_identifier_or_qualified_name_in_an_ambient_context_2714": "Выражение назначения экспорта должно представлять собой идентификатор или полное имя в окружающем контексте.",
+  "The_file_is_in_the_program_because_Colon_1430": "Файл включен в программу по следующей причине:",
   "The_files_list_in_config_file_0_is_empty_18002": "Список \"files\" в файле конфигурации \"{0}\" пуст.",
   "The_first_export_default_is_here_2752": "Здесь находится первый экспорт данных по умолчанию.",
   "The_first_parameter_of_the_then_method_of_a_promise_must_be_a_callback_1060": "Первым параметром метода then класса promise должен быть обратный вызов.",
@@ -1168,6 +1399,7 @@
   "The_left_hand_side_of_a_for_in_statement_must_be_of_type_string_or_any_2405": "Левый операнд оператора for...in должен иметь тип string или any.",
   "The_left_hand_side_of_a_for_of_statement_cannot_use_a_type_annotation_2483": "Левый операнд оператора for...of не может использовать аннотацию типа.",
   "The_left_hand_side_of_a_for_of_statement_may_not_be_an_optional_property_access_2781": "Левая часть оператора \"for...of\" не может быть обращением к необязательному свойству.",
+  "The_left_hand_side_of_a_for_of_statement_may_not_be_async_1106": "Левая часть оператора \"for...of\" не может быть \"async\".",
   "The_left_hand_side_of_a_for_of_statement_must_be_a_variable_or_a_property_access_2487": "В левой части оператора \"for...of\" должна быть переменная или доступ к свойству.",
   "The_left_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type_2362": "Левый операнд арифметической операции должен иметь тип \"any\", \"number\", \"bigint\" или тип перечисления.",
   "The_left_hand_side_of_an_assignment_expression_may_not_be_an_optional_property_access_2779": "Левая часть выражения присваивания не может быть обращением к необязательному свойству.",
@@ -1185,15 +1417,18 @@
   "The_parser_expected_to_find_a_to_match_the_token_here_1007": "Анализатор ожидал найти \"}\" для соответствия указанному здесь токену \"{\".",
   "The_property_0_cannot_be_accessed_on_type_1_within_this_class_because_it_is_shadowed_by_another_priv_18014": "Невозможно обратиться к свойству \"{0}\" в типе \"{1}\" внутри этого класса, так как он затемнен другим закрытым идентификатором с таким же написанием.",
   "The_return_type_of_a_JSX_element_constructor_must_return_an_object_type_2601": "Тип возвращаемого значения конструктора элемента JSX должен возвращать тип объекта.",
+  "The_return_type_of_a_get_accessor_must_be_assignable_to_its_set_accessor_type_2380": "Тип возвращаемого значения метода доступа \"get\" должен быть назначен его типу метода доступа \"set\"",
   "The_return_type_of_a_parameter_decorator_function_must_be_either_void_or_any_1237": "Тип возвращаемого значения функции декоратора параметра должен быть либо void, либо any.",
   "The_return_type_of_a_property_decorator_function_must_be_either_void_or_any_1236": "Тип возвращаемого значения функции декоратора свойства должен быть либо void, либо any.",
   "The_return_type_of_an_async_function_must_either_be_a_valid_promise_or_must_not_contain_a_callable_t_1058": "Тип возвращаемого значения асинхронной функции должен быть допустимым обещанием либо не должен содержать вызываемый элемент \"then\".",
   "The_return_type_of_an_async_function_or_method_must_be_the_global_Promise_T_type_Did_you_mean_to_wri_1064": "Возвращаемое значение асинхронной функции или метода должно иметь глобальный тип Promise<T>. Вы имели в виду \"Promise<{0}>\"?",
   "The_right_hand_side_of_a_for_in_statement_must_be_of_type_any_an_object_type_or_a_type_parameter_but_2407": "Правая часть оператора \"for…in\" должна иметь тип \"any\", тип объекта или быть параметром типа, однако указан тип \"{0}\".",
   "The_right_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type_2363": "Правый операнд арифметической операции должен иметь тип \"any\", \"number\", \"bigint\" или тип перечисления.",
-  "The_right_hand_side_of_an_in_expression_must_be_of_type_any_an_object_type_or_a_type_parameter_2361": "Правый операнд выражения \"in\" должен иметь тип \"any\", быть типом объекта или параметром типа.",
+  "The_right_hand_side_of_an_in_expression_must_not_be_a_primitive_2361": "Правый операнд выражения in не должен быть примитивом.",
   "The_right_hand_side_of_an_instanceof_expression_must_be_of_type_any_or_of_a_type_assignable_to_the_F_2359": "Правый операнд выражения instanceof должен иметь тип any или тип, который можно назначить типу интерфейса Function.",
+  "The_root_value_of_a_0_file_must_be_an_object_5092": "Корневое значение файла \"{0}\" должно быть объектом.",
   "The_shadowing_declaration_of_0_is_defined_here_18017": "Здесь определено объявление затемнения \"{0}\"",
+  "The_signature_0_of_1_is_deprecated_6387": "Сигнатура \"{0}\" \"{1}\" устарела.",
   "The_specified_path_does_not_exist_Colon_0_5058": "Указанный путь не существует: \"{0}\".",
   "The_tag_was_first_specified_here_8034": "Этот тег был впервые указан здесь.",
   "The_target_of_an_assignment_must_be_a_variable_or_a_property_access_2541": "Целевой объект назначения должен быть переменной или доступом к свойству.",
@@ -1204,6 +1439,7 @@
   "The_type_0_is_readonly_and_cannot_be_assigned_to_the_mutable_type_1_4104": "Тип \"{0}\" является \"readonly\" и не может быть назначен изменяемому типу \"{1}\".",
   "The_type_argument_for_type_parameter_0_cannot_be_inferred_from_the_usage_Consider_specifying_the_typ_2453": "Аргумент типа для параметра типа \"{0}\" невозможно вывести из использования. Рассмотрите возможность явного указания аргументов типа.",
   "The_type_of_a_function_declaration_must_match_the_function_s_signature_8030": "Тип объявления функции должен соответствовать сигнатуре этой функции.",
+  "The_type_of_this_node_cannot_be_serialized_because_its_property_0_cannot_be_serialized_4118": "Невозможно сериализовать тип этого узла, поскольку его свойство \"{0}\" не может быть сериализовано.",
   "The_type_returned_by_the_0_method_of_an_async_iterator_must_be_a_promise_for_a_type_with_a_value_pro_2547": "Возвращаемый тип метода \"{0}()\" асинхронного итератора должен быть обещанием для типа со свойством \"value\".",
   "The_type_returned_by_the_0_method_of_an_iterator_must_have_a_value_property_2490": "Тип, возвращаемый методом \"{0}()\" итератора, должен содержать свойство \"value\".",
   "The_types_of_0_are_incompatible_between_these_types_2200": "Типы \"{0}\" несовместимы между этими типами.",
@@ -1214,7 +1450,8 @@
   "This_JSX_tag_s_0_prop_expects_a_single_child_of_type_1_but_multiple_children_were_provided_2746": "Свойство \"{0}\" этого тега JSX ожидает один дочерний объект типа \"{1}\", однако было предоставлено несколько дочерних объектов.",
   "This_JSX_tag_s_0_prop_expects_type_1_which_requires_multiple_children_but_only_a_single_child_was_pr_2745": "Свойство \"{0}\" этого тега JSX ожидает тип \"{1}\", требующий несколько дочерних объектов, однако был предоставлен только один дочерний объект.",
   "This_condition_will_always_return_0_since_the_types_1_and_2_have_no_overlap_2367": "Это условие всегда будет возвращать \"{0}\", так как типы \"{1}\" и \"{2}\" не перекрываются.",
-  "This_condition_will_always_return_true_since_the_function_is_always_defined_Did_you_mean_to_call_it__2774": "Это условие будет всегда возвращать значение true, так как функция всегда определена. Возможно, вы хотели вызвать вместо этого ее?",
+  "This_condition_will_always_return_true_since_this_0_is_always_defined_2801": "Это условие всегда будет возвращать значение true, поскольку функция \"{0}\" всегда определена.",
+  "This_condition_will_always_return_true_since_this_function_is_always_defined_Did_you_mean_to_call_it_2774": "Это условие будет всегда возвращать значение true, поскольку функция всегда определена. Возможно, вы хотите вызвать ее?",
   "This_constructor_function_may_be_converted_to_a_class_declaration_80002": "Эту функцию конструктора можно преобразовать в объявление класса.",
   "This_expression_is_not_callable_2349": "Это выражение не является вызываемым.",
   "This_expression_is_not_callable_because_it_is_a_get_accessor_Did_you_mean_to_use_it_without_6234": "Это выражение не может быть вызвано, так как оно является методом доступа get. Вы хотели использовать его без \"()\"?",
@@ -1223,15 +1460,23 @@
   "This_import_is_never_used_as_a_value_and_must_use_import_type_because_importsNotUsedAsValues_is_set__1371": "Этот импорт никогда не используется в качестве значения и должен использовать \"import type\", так как для \"importsNotUsedAsValues\" задано значение \"error\".",
   "This_is_the_declaration_being_augmented_Consider_moving_the_augmenting_declaration_into_the_same_fil_6233": "Это объявление дополняется другим объявлением. Попробуйте переместить дополняющее объявление в тот же файл.",
   "This_may_be_converted_to_an_async_function_80006": "Это можно преобразовать в асинхронную функцию.",
+  "This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0_4113": "Этот элемент не может иметь модификатор \"override\", так как он не объявлен в базовом классе \"{0}\".",
+  "This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0_Did_you__4117": "Этот элемент не может иметь модификатор \"override\", так как он не объявлен в базовом классе \"{0}\". Возможно, вы имели в виду \"{1}\"?",
+  "This_member_cannot_have_an_override_modifier_because_its_containing_class_0_does_not_extend_another__4112": "Этот элемент не может иметь модификатор \"override\", поскольку содержащий его класс \"{0}\" не расширяет другой класс.",
+  "This_member_must_have_an_override_modifier_because_it_overrides_a_member_in_the_base_class_0_4114": "Этот элемент должен иметь модификатор \"override\", так как он переопределяет элемент в базовом классе \"{0}\".",
+  "This_member_must_have_an_override_modifier_because_it_overrides_an_abstract_method_that_is_declared__4116": "Этот элемент должен иметь модификатор \"override\", так как он переопределяет абстрактный метод, объявленный в базовом классе \"{0}\".",
   "This_module_can_only_be_referenced_with_ECMAScript_imports_Slashexports_by_turning_on_the_0_flag_and_2497": "На этот модуль можно ссылаться только с помощью импортов/экспортов ECMAScript, включив флаг \"{0}\" и сославшись на его экспорт по умолчанию.",
   "This_module_is_declared_with_using_export_and_can_only_be_used_with_a_default_import_when_using_the__2594": "Этот модуль объявлен с помощью \"export =\" и может использоваться только с импортом по умолчанию при использовании флага \"{0}\".",
   "This_overload_signature_is_not_compatible_with_its_implementation_signature_2394": "Сигнатура перегрузки несовместима с ее сигнатурой реализации.",
   "This_parameter_is_not_allowed_with_use_strict_directive_1346": "Этот параметр запрещено использовать с директивой \"use strict\".",
+  "This_parameter_property_must_have_an_override_modifier_because_it_overrides_a_member_in_base_class_0_4115": "Это свойство параметра должно иметь модификатор \"override\", так как он переопределяет элемент базового класса \"{0}\".",
   "This_spread_always_overwrites_this_property_2785": "Это распространение всегда перезаписывает данное свойство.",
   "This_syntax_requires_an_imported_helper_but_module_0_cannot_be_found_2354": "Для этого синтаксиса требуется импортированный вспомогательный объект, но найти модуль \"{0}\" не удается.",
   "This_syntax_requires_an_imported_helper_named_1_which_does_not_exist_in_0_Consider_upgrading_your_ve_2343": "Для этого синтаксиса требуется импортированный вспомогательный объект с именем \"{1}\", который не существует в \"{0}\". Рекомендуется обновить версию \"{0}\".",
+  "This_syntax_requires_an_imported_helper_named_1_with_2_parameters_which_is_not_compatible_with_the_o_2807": "Для этого синтаксиса требуется импортированный вспомогательный объект с именем \"{1}\" и параметрами ({2}), который не совместим с объектом в \"{0}\". Попробуйте обновить версию \"{0}\".",
   "Top_level_await_expressions_are_only_allowed_when_the_module_option_is_set_to_esnext_or_system_and_t_1378": "Выражения \"await\" верхнего уровня разрешены, только если для параметра \"module\" задано значение \"esnext\" или \"system\", а для параметра \"target\" задано значение \"es2017\" или выше.",
   "Top_level_declarations_in_d_ts_files_must_start_with_either_a_declare_or_export_modifier_1046": "Объявления верхнего уровня в файлах .d.ts должны начинаться с модификатора \"declare\" или \"export\".",
+  "Top_level_for_await_loops_are_only_allowed_when_the_module_option_is_set_to_esnext_or_system_and_the_1432": "Циклы \"for await\" верхнего уровня допускаются, только если для параметра \"module\" задано значение \"esnext\" или \"system\", а для параметра \"target\" задано значение \"es2017\" или выше.",
   "Trailing_comma_not_allowed_1009": "Завершающая запятая запрещена.",
   "Transpile_each_file_as_a_separate_module_similar_to_ts_transpileModule_6153": "Транскомпиляция каждого файла как отдельного модуля (аналогично ts.transpileModule).",
   "Try_npm_i_save_dev_types_Slash_1_if_it_exists_or_add_a_new_declaration_d_ts_file_containing_declare__7035": "Попробуйте использовать команду \"npm i --save-dev @types/{1}\", если он существует, или добавьте новый файл объявления (.d.ts), содержащий \"declare module '{0}';\".",
@@ -1240,6 +1485,7 @@
   "Tuple_members_must_all_have_names_or_all_not_have_names_5084": "Имена должны быть заданы для всех членов кортежа или не должны быть заданы ни для одного из членов кортежа.",
   "Tuple_type_0_of_length_1_has_no_element_at_index_2_2493": "Тип кортежа \"{0}\" длиной \"{1}\" не имеет элемент с индексом \"{2}\".",
   "Tuple_type_arguments_circularly_reference_themselves_4110": "Аргументы типа кортежа циклически ссылаются сами на себя.",
+  "Type_0_can_only_be_iterated_through_when_using_the_downlevelIteration_flag_or_with_a_target_of_es201_2802": "Итерация типа \"{0}\" может осуществляться только с использованием флага \"--downlevelIteration\" или с параметром \"--target\" \"es2015\" или выше.",
   "Type_0_cannot_be_used_as_an_index_type_2538": "Тип \"{0}\" невозможно использовать как тип индекса.",
   "Type_0_cannot_be_used_to_index_type_1_2536": "Тип \"{0}\" не может использоваться для индексации типа \"{1}\".",
   "Type_0_does_not_satisfy_the_constraint_1_2344": "Тип \"{0}\" не удовлетворяет ограничению \"{1}\".",
@@ -1264,7 +1510,9 @@
   "Type_0_must_have_a_Symbol_iterator_method_that_returns_an_iterator_2488": "Тип \"{0}\" должен иметь метод \"[Symbol.iterator]()\", который возвращает итератор.",
   "Type_0_provides_no_match_for_the_signature_1_2658": "Тип \"{0}\" не предоставляет соответствия для сигнатуры \"{1}\".",
   "Type_0_recursively_references_itself_as_a_base_type_2310": "Тип \"{0}\" рекурсивно ссылается сам на себя как на базовый тип.",
+  "Type_Checking_6248": "Проверка типа",
   "Type_alias_0_circularly_references_itself_2456": "Псевдоним типа \"{0}\" циклически ссылается на себя.",
+  "Type_alias_must_be_given_a_name_1439": "Псевдониму типа необходимо присвоить имя.",
   "Type_alias_name_cannot_be_0_2457": "Псевдоним типа не может иметь имя \"{0}\".",
   "Type_aliases_can_only_be_used_in_TypeScript_files_8008": "Псевдонимы типов можно использовать только в файлах TypeScript.",
   "Type_annotation_cannot_appear_on_a_constructor_declaration_1093": "Аннотация типа не может содержаться в объявлении конструктора.",
@@ -1276,10 +1524,15 @@
   "Type_arguments_cannot_be_used_here_1342": "Использовать аргументы типа здесь недопустимо.",
   "Type_arguments_for_0_circularly_reference_themselves_4109": "Аргументы типа для \"{0}\" циклически ссылаются сами на себя.",
   "Type_assertion_expressions_can_only_be_used_in_TypeScript_files_8016": "Выражения утверждения типа можно использовать только в файлах TypeScript.",
+  "Type_at_position_0_in_source_is_not_compatible_with_type_at_position_1_in_target_2626": "Тип в позиции {0} в источнике не совместим с типом в позиции {1} в целевом объекте.",
+  "Type_at_positions_0_through_1_in_source_is_not_compatible_with_type_at_position_2_in_target_2627": "Типы в позициях {0}–{1} в источнике не совместимы с типом в позиции {2} в целевом объекте.",
+  "Type_catch_clause_variables_as_unknown_instead_of_any_6803": "Введите предложение catch как \"unknown\" вместо \"any\".",
   "Type_declaration_files_to_be_included_in_compilation_6124": "Файлы объявления типа, включаемые в компиляцию.",
   "Type_expected_1110": "Ожидался тип.",
   "Type_instantiation_is_excessively_deep_and_possibly_infinite_2589": "Создание экземпляра типа является слишком глубоким и, возможно, бесконечным.",
   "Type_is_referenced_directly_or_indirectly_in_the_fulfillment_callback_of_its_own_then_method_1062": "На тип есть прямые или непрямые ссылки в обратном вызове выполнения собственного метода then.",
+  "Type_library_referenced_via_0_from_file_1_1402": "Библиотека типов, на которую осуществляется ссылка с помощью \"{0}\" из файла \"{1}\"",
+  "Type_library_referenced_via_0_from_file_1_with_packageId_2_1403": "Библиотека типов, на которую осуществляется ссылка с помощью \"{0}\" из файла \"{1}\" с идентификатором пакета \"{2}\"",
   "Type_of_await_operand_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member_1320": "Тип операнда \"await\" должен быть допустимым обещанием либо не должен содержать вызываемый элемент \"then\".",
   "Type_of_computed_property_s_value_is_0_which_is_not_assignable_to_type_1_2418": "Типом значения вычисляемого свойства является \"{0}\", который не может быть назначен типу \"{1}\".",
   "Type_of_iterated_elements_of_a_yield_Asterisk_operand_must_either_be_a_valid_promise_or_must_not_con_1322": "Тип элементов итерации для операнда \"yield*\" должен быть допустимым обещанием либо не должен содержать вызываемый элемент \"then\".",
@@ -1305,6 +1558,7 @@
   "Type_parameter_name_cannot_be_0_2368": "Параметр типа не может иметь имя \"{0}\".",
   "Type_parameters_cannot_appear_on_a_constructor_declaration_1092": "Параметры типов не могут содержаться в объявлении конструктора.",
   "Type_predicate_0_is_not_assignable_to_1_1226": "Предикат типов \"{0}\" не может быть назначен для \"{1}\".",
+  "Type_produces_a_tuple_type_that_is_too_large_to_represent_2799": "Тип создает тип кортежа, который слишком большой для представления.",
   "Type_reference_directive_0_was_not_resolved_6120": "======== Директива ссылки на тип \"{0}\" не разрешена. ========",
   "Type_reference_directive_0_was_successfully_resolved_to_1_primary_Colon_2_6119": "======== Директива ссылки на тип \"{0}\" успешно разрешена в \"{1}\", первичный объект: {2}. ========",
   "Type_reference_directive_0_was_successfully_resolved_to_1_with_Package_ID_2_primary_Colon_3_6219": "======== Директива ссылки на тип \"{0}\" успешно разрешена в \"{1}\" с идентификатором пакета \"{2}\", первичный объект: {3}. ========",
@@ -1318,6 +1572,7 @@
   "Unable_to_resolve_signature_of_parameter_decorator_when_called_as_an_expression_1239": "Не удается разрешить сигнатуру декоратора параметра при вызове в качестве выражения.",
   "Unable_to_resolve_signature_of_property_decorator_when_called_as_an_expression_1240": "Не удается разрешить сигнатуру декоратора свойства при вызове в качестве выражения.",
   "Unexpected_end_of_text_1126": "Неожиданный конец текста.",
+  "Unexpected_keyword_or_identifier_1434": "Непредвиденное ключевое слово или идентификатор.",
   "Unexpected_token_1012": "Неожиданный токен.",
   "Unexpected_token_A_constructor_method_accessor_or_property_was_expected_1068": "Неожиданный токен. Ожидался конструктор, метод, метод доступа или свойство.",
   "Unexpected_token_A_type_parameter_name_was_expected_without_curly_braces_1069": "Непредвиденная лексема. Ожидалось имя параметра типа без фигурных скобок.",
@@ -1328,6 +1583,7 @@
   "Unknown_build_option_0_Did_you_mean_1_5077": "Неизвестный параметр сборки \"{0}\". Возможно, вы хотели использовать \"{1}\"?",
   "Unknown_compiler_option_0_5023": "Неизвестный параметр компилятора \"{0}\".",
   "Unknown_compiler_option_0_Did_you_mean_1_5025": "Неизвестный параметр компилятора \"{0}\". Возможно, вы хотели использовать \"{1}\"?",
+  "Unknown_keyword_or_identifier_Did_you_mean_0_1435": "Неизвестное ключевое слово или идентификатор. Вы имели в виду \"{0}\"?",
   "Unknown_option_excludes_Did_you_mean_exclude_6114": "Неизвестный параметр excludes. Возможно, вы имели в виду exclude?",
   "Unknown_type_acquisition_option_0_17010": "Неизвестный параметр получения типа, \"{0}\".",
   "Unknown_type_acquisition_option_0_Did_you_mean_1_17018": "Неизвестный параметр получения типа \"{0}\". Возможно, вы хотели использовать \"{1}\"?",
@@ -1350,6 +1606,7 @@
   "Use_element_access_for_all_undeclared_properties_95146": "Использовать доступ к элементам для всех необъявленных свойств.",
   "Use_synthetic_default_member_95016": "Используйте искусственный элемент \"default\".",
   "Using_a_string_in_a_for_of_statement_is_only_supported_in_ECMAScript_5_and_higher_2494": "Использование строки для оператора for...of поддерживается только в ECMAScript 5 и более поздних версиях.",
+  "Using_build_b_will_make_tsc_behave_more_like_a_build_orchestrator_than_a_compiler_This_is_used_to_tr_6915": "Использование --build,-b заставит TSC вести себя больше как оркестратор сборки, чем как компилятор. Это используется для запуска создания составных проектов, о которых можно узнать больше на {0}",
   "Using_compiler_options_of_project_reference_redirect_0_6215": "Использование параметров компилятора для перенаправления ссылки на проект \"{0}\".",
   "VERSION_6036": "ВЕРСИЯ",
   "Value_of_type_0_has_no_properties_in_common_with_type_1_Did_you_mean_to_call_it_2560": "Значение типа \"{0}\" не имеет общих свойств со значением типа \"{1}\". Вы хотели вызвать его?",
@@ -1361,10 +1618,16 @@
   "Variable_0_is_used_before_being_assigned_2454": "Переменная \"{0}\" используется перед назначением.",
   "Variable_declaration_expected_1134": "Ожидалось объявление переменной.",
   "Variable_declaration_list_cannot_be_empty_1123": "Список объявлений переменной не может быть пустым.",
+  "Variable_declaration_not_allowed_at_this_location_1440": "Объявление переменной в этом расположении запрещено.",
+  "Variadic_element_at_position_0_in_source_does_not_match_element_at_position_1_in_target_2625": "Элемент с переменным числом аргументов в позиции {0} в источнике не соответствует элементу в позиции {1} в целевом объекте.",
   "Version_0_6029": "Версия {0}",
   "Visit_https_Colon_Slash_Slashaka_ms_Slashtsconfig_json_to_read_more_about_this_file_95110": "Дополнительные сведения об этом файле: https://aka.ms/tsconfig.json.",
+  "WATCH_OPTIONS_6918": "ПАРАМЕТРЫ ПРОСМОТРА",
+  "Watch_and_Build_Modes_6250": "Режимы отслеживания и сборки",
   "Watch_input_files_6005": "Просмотр входных файлов.",
   "Watch_option_0_requires_a_value_of_type_1_5080": "Параметр \"{0}\" контрольного значения требует значение типа {1}.",
+  "When_assigning_functions_check_to_ensure_parameters_and_the_return_values_are_subtype_compatible_6698": "При назначении функций убедитесь, что параметры и возвращаемые значения совместимы с подтипом.",
+  "When_type_checking_take_into_account_null_and_undefined_6699": "При проверке типа учитывайте параметры \"null\" и \"undefined\".",
   "Whether_to_keep_outdated_console_output_in_watch_mode_instead_of_clearing_the_screen_6191": "Сохранять ли устаревшие выходные данные консоли в режиме просмотра вместо очистки экрана.",
   "Wrap_all_invalid_characters_in_an_expression_container_95109": "Заключение всех недопустимых символов в контейнер выражений",
   "Wrap_all_object_literal_with_parentheses_95116": "Заключить все литералы объектов в круглые скобки",
@@ -1372,10 +1635,12 @@
   "Wrap_in_JSX_fragment_95120": "Перенос во фрагмент JSX",
   "Wrap_invalid_character_in_an_expression_container_95108": "Заключение недопустимого знака в контейнер выражений",
   "Wrap_the_following_body_with_parentheses_which_should_be_an_object_literal_95113": "Заключить следующий текст в круглые скобки, которые должны быть литералом объекта",
+  "You_can_learn_about_all_of_the_compiler_options_at_0_6913": "Вы можете узнать обо всех параметрах компилятора на {0}",
   "You_cannot_rename_a_module_via_a_global_import_8031": "Вы не можете переименовать модуль с помощью глобального импорта.",
   "You_cannot_rename_elements_that_are_defined_in_the_standard_TypeScript_library_8001": "Невозможно переименовать элементы, определенные в стандартной библиотеке TypeScript.",
   "You_cannot_rename_this_element_8000": "Этот элемент переименовать нельзя.",
   "_0_accepts_too_few_arguments_to_be_used_as_a_decorator_here_Did_you_mean_to_call_it_first_and_write__1329": "\"{0}\" принимает слишком мало аргументов для использования в качестве декоратора. Вы хотели сначала вызвать его и записать \"@{0}()\"?",
+  "_0_and_1_index_signatures_are_incompatible_2330": "Сигнатуры индекса \"{0}\" и \"{1}\" несовместимы.",
   "_0_and_1_operations_cannot_be_mixed_without_parentheses_5076": "Операции \"{0}\" и \"{1}\" невозможно использовать одновременно без скобок.",
   "_0_are_specified_twice_The_attribute_named_0_will_be_overwritten_2710": "\"{0}\" указаны дважды. Атрибут \"{0}\" будет перезаписан.",
   "_0_can_only_be_imported_by_turning_on_the_esModuleInterop_flag_and_using_a_default_import_2596": "Для импорта \"{0}\" необходимо установить флаг \"esModuleInterop\" и использовать импорт по умолчанию.",
@@ -1396,6 +1661,8 @@
   "_0_implicitly_has_an_1_return_type_but_a_better_type_may_be_inferred_from_usage_7050": "\"{0}\" неявно имеет тип возвращаемого значения \"{1}\", но из использования можно определить более подходящий тип.",
   "_0_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_reference_7023": "\"{0}\" неявно имеет тип возвращаемого значения any, так как у него нет заметки с типом возвращаемого значения, а также на него прямо или косвенно указана ссылка в одном из его выражений return.",
   "_0_implicitly_has_type_any_because_it_does_not_have_a_type_annotation_and_is_referenced_directly_or__7022": "\"{0}\" неявно имеет тип any, так как отсутствует аннотация типа и на \"{0}\" есть прямые или непрямые ссылки в его собственном инициализаторе.",
+  "_0_index_signatures_are_incompatible_2634": "Сигнатуры индекса \"{0}\" несовместимы.",
+  "_0_index_type_1_is_not_assignable_to_2_index_type_3_2413": "Тип индекса \"{0}\" \"{1}\" не может быть назначен типу индекса \"{2}\" \"{3}\".",
   "_0_is_a_primitive_but_1_is_a_wrapper_object_Prefer_using_0_when_possible_2692": "\"{0}\" является примитивом, но \"{1}\" — объект оболочки. Предпочтительно использовать \"{0}\" по мере возможности.",
   "_0_is_assignable_to_the_constraint_of_type_1_but_1_could_be_instantiated_with_a_different_subtype_of_5075": "\"{0}\" может быть назначен ограничению типа \"{1}\", но можно создать экземпляр \"{1}\" с другим подтипом ограничения \"{2}\".",
   "_0_is_declared_but_its_value_is_never_read_6133": "Свойство \"{0}\" объявлено, но его значение не было прочитано.",
@@ -1403,7 +1670,7 @@
   "_0_is_declared_here_2728": "Здесь объявлен \"{0}\".",
   "_0_is_defined_as_a_property_in_class_1_but_is_overridden_here_in_2_as_an_accessor_2611": "\"{0}\" определен как свойство в классе \"{1}\", но переопределяется здесь в \"{2}\" как метод доступа.",
   "_0_is_defined_as_an_accessor_in_class_1_but_is_overridden_here_in_2_as_an_instance_property_2610": "\"{0}\" определен как метод доступа в классе \"{1}\", но переопределяется здесь в \"{2}\" как свойство экземпляра.",
-  "_0_is_deprecated_6385": "\"{0}\" устарел.",
+  "_0_is_deprecated_6385": "\"{0}\" устарело.",
   "_0_is_not_a_valid_meta_property_for_keyword_1_Did_you_mean_2_17012": "\"{0}\" не является допустимым метасвойством для ключевого слова \"{1}\". Вы имели в виду \"{2}\"?",
   "_0_is_not_allowed_as_a_variable_declaration_name_1389": "Использование \"{0}\" в качестве имени объявления переменной не допускается.",
   "_0_is_referenced_directly_or_indirectly_in_its_own_base_expression_2506": "На \"{0}\" есть прямые или непрямые ссылки в его собственном базовом выражении.",
@@ -1428,7 +1695,7 @@
   "_0_only_refers_to_a_type_but_is_being_used_as_a_namespace_here_2702": "\"{0}\" относится только к типу, а здесь используется как пространство имен.",
   "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_2693": "\"{0}\" относится только к типу, но используется здесь как значение.",
   "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_Did_you_mean_to_use_1_in_0_2690": "\"{0}\" относится только к типу, но используется здесь как значение. Вы хотели использовать \"{1} в {0}\"?",
-  "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_Do_you_need_to_change_your_target_library_2585": "\"{0}\" относится только к типу, но здесь используется как значение. Вы хотите изменить целевую библиотеку? Попробуйте изменить параметр компилятора \"lib\" на es2015 или более поздней версии.",
+  "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_Do_you_need_to_change_your_target_library_2585": "\"{0}\" относится только к типу, но здесь используется как значение. Вы хотите изменить целевую библиотеку? Попробуйте изменить параметр компилятора \"lib\" на ES2015 или более поздней версии.",
   "_0_refers_to_a_UMD_global_but_the_current_file_is_a_module_Consider_adding_an_import_instead_2686": "\"{0}\" ссылается на глобальную переменную UMD, но текущий файл является модулем. Рекомендуется добавить импорт.",
   "_0_refers_to_a_value_but_is_being_used_as_a_type_here_Did_you_mean_typeof_0_2749": "\"{0}\" относится к значению, но здесь используется как тип. Возможно, вы имели в виду \"typeof {0}\"?",
   "_0_tag_already_specified_1223": "Тег \"{0}\" уже указан.",
@@ -1440,6 +1707,7 @@
   "_0_which_lacks_return_type_annotation_implicitly_has_an_1_yield_type_7055": "\"{0}\", у которого нет заметки с типом возвращаемого значения, неявно имеет тип yield \"{1}\".",
   "abstract_modifier_can_only_appear_on_a_class_method_or_property_declaration_1242": "Модификатор abstract может отображаться только в объявлении класса, метода или свойства.",
   "and_here_6204": "и здесь.",
+  "arguments_cannot_be_referenced_in_property_initializers_2815": "Ссылка на \"arguments\" в инициализаторах свойств невозможна.",
   "await_expressions_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_fi_1375": "Выражения \"await\" допускаются только на верхнем уровне файла, если он является модулем, но не имеет импортов и экспортов. Рекомендуется добавить пустой элемент \"export {}\", чтобы сделать этот файл модулем.",
   "await_expressions_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_1308": "Выражения \"await\" допускаются только в асинхронных функциях и на верхних уровнях модулей.",
   "await_expressions_cannot_be_used_in_a_parameter_initializer_2524": "Выражения await не могут быть использованы в инициализаторе параметра.",
@@ -1456,6 +1724,7 @@
   "const_enums_can_only_be_used_in_property_or_index_access_expressions_or_the_right_hand_side_of_an_im_2475": "Перечисления const можно использовать только в выражениях доступа к свойству или индексу, а также в правой части объявления импорта, назначения экспорта или запроса типа.",
   "constructor_cannot_be_used_as_a_parameter_property_name_2398": "Недопустимо использовать constructor как имя свойства параметра.",
   "constructor_is_a_reserved_word_18012": "\"#constructor\" является зарезервированным словом.",
+  "default_Colon_6903": "по умолчанию:",
   "delete_cannot_be_called_on_an_identifier_in_strict_mode_1102": "Невозможно вызвать оператор delete с идентификатором в строгом режиме.",
   "delete_this_Project_0_is_up_to_date_because_it_was_previously_built_6360": "удалить это — проект \"{0}\" не требует обновления, так как был собран ранее",
   "export_Asterisk_does_not_re_export_a_default_1195": "При использовании \"export *\" повторный экспорт по умолчанию не выполняется.",
@@ -1466,17 +1735,26 @@
   "extends_clause_of_exported_class_0_has_or_is_using_private_name_1_4020": "Предложение extends экспортированного класса \"{0}\" имеет или использует закрытое имя \"{1}\".",
   "extends_clause_of_exported_class_has_or_is_using_private_name_0_4021": "Предложение extends экспортированного класса имеет или использует закрытое имя \"{0}\".",
   "extends_clause_of_exported_interface_0_has_or_is_using_private_name_1_4022": "Предложение extends экспортированного интерфейса \"{0}\" имеет или использует закрытое имя \"{1}\".",
+  "false_unless_composite_is_set_6906": "\"false\", если не задано значение \"composite\"",
+  "false_unless_strict_is_set_6905": "\"false\", если не задано \"strict\"",
   "file_6025": "файл",
+  "for_await_loops_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_file_1431": "Циклы \"for await\" допускаются только на верхнем уровне файла, если он является модулем, но этот файл не содержит импортов или экспортов. Рекомендуется добавить пустой элемент \"export {}\", чтобы сделать этот файл модулем.",
+  "for_await_loops_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_1103": "Циклы \"for await\" допускаются только в асинхронных функциях и на верхних уровнях модулей.",
   "get_and_set_accessor_must_have_the_same_this_type_2682": "Методы доступа \"get\" и \"set\" должны иметь одинаковый тип \"this\".",
-  "get_and_set_accessor_must_have_the_same_type_2380": "Методы доступа get и set должны иметь одинаковый тип.",
   "get_and_set_accessors_cannot_declare_this_parameters_2784": "Методы доступа \"get\" и \"set\" не могут объявлять параметры \"this\".",
+  "if_files_is_specified_otherwise_Asterisk_Asterisk_Slash_Asterisk_6908": "\"[]\", если указаны \"files\", в противном случае \"[\"**/*\"]5D;\"",
   "implements_clause_already_seen_1175": "Предложение implements уже существует.",
   "implements_clauses_can_only_be_used_in_TypeScript_files_8005": "Предложения \"implements\" можно использовать только в файлах TypeScript.",
   "import_can_only_be_used_in_TypeScript_files_8002": "Элемент \"import ... =\" можно использовать только в файлах TypeScript.",
   "infer_declarations_are_only_permitted_in_the_extends_clause_of_a_conditional_type_1338": "Объявления \"infer\" допустимы только в предложении \"extends\" условного типа.",
   "let_declarations_can_only_be_declared_inside_a_block_1157": "Объявления let можно задать только в блоке.",
   "let_is_not_allowed_to_be_used_as_a_name_in_let_or_const_declarations_2480": "Не допускается использование let в качестве имени в объявлениях let или const.",
+  "module_AMD_or_UMD_or_System_or_ES6_then_Classic_Otherwise_Node_69010": "модуль === \"AMD\" или \"UMD\" или \"Система\" или \"ES6\", затем \"Классический\", или \"Узел\"",
+  "module_system_or_esModuleInterop_6904": "модуль === \"system\" или \"esModuleInterop\"",
   "new_expression_whose_target_lacks_a_construct_signature_implicitly_has_an_any_type_7009": "Выражение new, у цели которого нет сигнатуры конструктора, неявно имеет тип any.",
+  "node_modules_bower_components_jspm_packages_plus_the_value_of_outDir_if_one_is_specified_6907": "\"[\"node_modules\", \"bower_components\", \"jspm_packages\"]\" и значение \"outDir\", если оно указано.",
+  "one_of_Colon_6900": "один из:",
+  "one_or_more_Colon_6901": "один или более:",
   "options_6024": "параметры",
   "or_expected_1144": "Ожидалось \"{\" или \";\".",
   "package_json_does_not_have_a_0_field_6100": "В package.json нет поля \"{0}\".",
@@ -1507,6 +1785,9 @@
   "this_cannot_be_referenced_in_constructor_arguments_2333": "На this не могут указывать ссылки в аргументах конструктора.",
   "this_cannot_be_referenced_in_current_location_2332": "На this не могут указывать ссылки в текущем расположении.",
   "this_implicitly_has_type_any_because_it_does_not_have_a_type_annotation_2683": "this неявно содержит тип any, так как он не имеет аннотации типа.",
+  "true_if_composite_false_otherwise_6909": "\"true\", если \"composite\", \"false\" в противном случае",
+  "tsc_Colon_The_TypeScript_Compiler_6922": "TSC: компилятор TypeScript",
+  "type_Colon_6902": "тип:",
   "unique_symbol_types_are_not_allowed_here_1335": "Типы \"unique symbol\" здесь запрещены.",
   "unique_symbol_types_are_only_allowed_on_variables_in_a_variable_statement_1334": "Типы \"unique symbol\" разрешены только у переменных в операторах с переменными.",
   "unique_symbol_types_may_not_be_used_on_a_variable_declaration_with_a_binding_name_1333": "Типы \"unique symbol\" невозможно использовать в объявлении переменной с именем привязки.",
@@ -1514,5 +1795,6 @@
   "use_strict_directive_used_here_1349": "Здесь используется директива \"use strict\".",
   "with_statements_are_not_allowed_in_an_async_function_block_1300": "Операторы with не разрешено использовать в блоке асинхронной функции.",
   "with_statements_are_not_allowed_in_strict_mode_1101": "Операторы with не разрешено использовать в строгом режиме.",
+  "yield_expression_implicitly_results_in_an_any_type_because_its_containing_generator_lacks_a_return_t_7057": "Выражение \"yield\" неявно формирует результат типа \"any\", поскольку содержащий его генератор не имеет заметки типа возвращаемого значения.",
   "yield_expressions_cannot_be_used_in_a_parameter_initializer_2523": "Выражения yield не могут быть использованы в инициализаторе параметра."
 }
\ No newline at end of file
diff --git a/node_modules/typescript/lib/tr/diagnosticMessages.generated.json b/node_modules/typescript/lib/tr/diagnosticMessages.generated.json
index fdc2cd6..44530d4 100644
--- a/node_modules/typescript/lib/tr/diagnosticMessages.generated.json
+++ b/node_modules/typescript/lib/tr/diagnosticMessages.generated.json
@@ -1,4 +1,5 @@
 {
+  "ALL_COMPILER_OPTIONS_6917": "TÜM DERLEYİCİ SEÇENEKLERİ",
   "A_0_modifier_cannot_be_used_with_an_import_declaration_1079": "Bir '{0}' değiştiricisi, içeri aktarma bildirimiyle birlikte kullanılamaz.",
   "A_0_modifier_cannot_be_used_with_an_interface_declaration_1045": "Bir '{0}' değiştiricisi, arabirim bildirimiyle birlikte kullanılamaz.",
   "A_0_parameter_must_be_the_first_parameter_2680": "Bir '{0}' parametresi ilk parametre olmalıdır.",
@@ -15,7 +16,7 @@
   "A_class_member_cannot_have_the_0_keyword_1248": "Bir sınıf üyesi '{0}' anahtar kelimesini içeremez.",
   "A_comma_expression_is_not_allowed_in_a_computed_property_name_1171": "Hesaplanan özellik adında virgül ifadesine izin verilmez.",
   "A_computed_property_name_cannot_reference_a_type_parameter_from_its_containing_type_2467": "Hesaplanan özellik adı, kapsayan türündeki bir tür parametresine başvuramaz.",
-  "A_computed_property_name_in_a_class_property_declaration_must_refer_to_an_expression_whose_type_is_a_1166": "Bir sınıf özelliği bildirimindeki hesaplanan özellik adı, sabit değer türündeki veya 'unique symbol' türündeki bir ifadeye başvurmalıdır.",
+  "A_computed_property_name_in_a_class_property_declaration_must_have_a_simple_literal_type_or_a_unique_1166": "Sınıf özelliği bildirimindeki hesaplanan özellik adı, basit bir sabit değer türüne veya 'benzersiz sembol' türüne sahip olmalıdır.",
   "A_computed_property_name_in_a_method_overload_must_refer_to_an_expression_whose_type_is_a_literal_ty_1168": "Bir metot aşırı yüklemesindeki hesaplanan özellik adı, sabit değer türündeki veya 'unique symbol' türündeki bir ifadeye başvurmalıdır.",
   "A_computed_property_name_in_a_type_literal_must_refer_to_an_expression_whose_type_is_a_literal_type__1170": "Bir tür sabit değerindeki hesaplanan özellik adı, sabit değer türündeki veya 'unique symbol' türündeki bir ifadeye başvurmalıdır.",
   "A_computed_property_name_in_an_ambient_context_must_refer_to_an_expression_whose_type_is_a_literal_t_1165": "Bir çevresel bağlamdaki hesaplanan özellik adı, sabit değer türündeki veya 'unique symbol' türündeki bir ifadeye başvurmalıdır.",
@@ -33,24 +34,25 @@
   "A_decorator_can_only_decorate_a_method_implementation_not_an_overload_1249": "Dekoratörler yalnızca metot uygulaması dekore edebilir; aşırı yüklemeleri dekore edemez.",
   "A_default_clause_cannot_appear_more_than_once_in_a_switch_statement_1113": "'default' yan tümcesi, 'switch' deyiminde birden fazla kez bulunamaz.",
   "A_default_export_can_only_be_used_in_an_ECMAScript_style_module_1319": "Varsayılan dışarı aktarma, yalnızca ECMAScript stili bir modülde kullanılabilir.",
+  "A_default_export_must_be_at_the_top_level_of_a_file_or_module_declaration_1258": "Varsayılan dışarı aktarma, bir dosyanın veya modül bildiriminin en üst düzeyinde olmalıdır.",
   "A_definite_assignment_assertion_is_not_permitted_in_this_context_1255": "Bu bağlamda '!' belirli atama onayına izin verilmez.",
   "A_destructuring_declaration_must_have_an_initializer_1182": "Yok etme bildiriminin bir başlatıcısı olmalıdır.",
-  "A_dynamic_import_call_in_ES5_SlashES3_requires_the_Promise_constructor_Make_sure_you_have_a_declarat_2712": "ES5/ES3 içindeki dinamik içeri aktarma çağrısı, 'Promise' oluşturucusu gerektirir. 'Promise' oluşturucusu için bir bildiriminizin olduğundan veya `--lib` seçeneğinize 'ES2015' eklediğinizden emin olun.",
-  "A_dynamic_import_call_returns_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_include_ES20_2711": "Dinamik içeri aktarma çağrısı, 'Promise' döndürür. Bir 'Promise' bildiriminiz olduğundan emin olun veya `--lib` seçeneğinize 'ES2015' ekleyin.",
+  "A_dynamic_import_call_in_ES5_SlashES3_requires_the_Promise_constructor_Make_sure_you_have_a_declarat_2712": "ES5/ES3 içindeki dinamik içeri aktarma çağrısı, 'Promise' oluşturucusunu gerektirir. 'Promise' oluşturucusu için bir bildiriminiz olduğundan emin olun veya '--lib' seçeneğinize 'ES2015' ekleyin.",
+  "A_dynamic_import_call_returns_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_include_ES20_2711": "Dinamik içeri aktarma çağrısı, 'Promise' döndürür. 'Promise' için bir bildiriminiz olduğundan emin olun veya '--lib' seçeneğinize 'ES2015' ekleyin.",
   "A_file_cannot_have_a_reference_to_itself_1006": "Bir dosya kendine başvuramaz.",
-  "A_for_await_of_statement_is_only_allowed_within_an_async_function_or_async_generator_1103": "Bir 'for-await-of' deyimine yalnızca zaman uyumsuz işlev veya zaman uyumsuz oluşturucu içinde izin verilir.",
   "A_function_returning_never_cannot_have_a_reachable_end_point_2534": "'never' döndüren bir işlev, erişilebilir bir uç noktaya sahip olamaz.",
   "A_function_that_is_called_with_the_new_keyword_cannot_have_a_this_type_that_is_void_2679": "'New' anahtar kelimesiyle çağrılan bir işlev, 'void' olan bir 'this' türüne sahip olamaz.",
   "A_function_whose_declared_type_is_neither_void_nor_any_must_return_a_value_2355": "Bildirilen türü 'void' veya 'any' olmayan işlevin bir değer döndürmesi gerekir.",
   "A_generator_cannot_have_a_void_type_annotation_2505": "Bir oluşturucu 'void' türündeki bir ek açıklamaya sahip olamaz.",
   "A_get_accessor_cannot_have_parameters_1054": "Bir 'get' erişimcisi parametrelere sahip olamaz.",
+  "A_get_accessor_must_be_at_least_as_accessible_as_the_setter_2808": "Get erişimcisi en az ayarlayıcı kadar erişilebilir olmalıdır",
   "A_get_accessor_must_return_a_value_2378": "'get' erişimcisinin bir değer döndürmesi gerekir.",
   "A_label_is_not_allowed_here_1344": "'Burada etikete izin verilmiyor.",
   "A_labeled_tuple_element_is_declared_as_optional_with_a_question_mark_after_the_name_and_before_the_c_5086": "Etiketli demet öğesi türden sonra değil, addan sonra ve iki nokta işaretinden önce bir soru işareti ile isteğe bağlı olarak bildirilir.",
-  "A_labeled_tuple_element_is_declared_as_rest_with_a_before_the_name_rather_than_before_the_type_5087": "Etiketli demet öğesi türden önce değil, addan önce `...` ile diğerleri olarak bildirilir.",
+  "A_labeled_tuple_element_is_declared_as_rest_with_a_before_the_name_rather_than_before_the_type_5087": "Etiketlenmiş bir demet öğesi, tür yerine addan önce '...' ile bekleyen olarak bildirilir.",
   "A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_memb_2651": "Sabit listesi bildirimindeki bir üye başlatıcısı, diğer sabit listelerinde tanımlanan üyeler dahil olmak üzere kendinden sonra bildirilen üyelere başvuramaz.",
-  "A_method_cannot_be_named_with_a_private_identifier_18022": "Bir metot özel tanımlayıcıyla adlandırılamaz.",
   "A_mixin_class_must_have_a_constructor_with_a_single_rest_parameter_of_type_any_2545": "Mixin sınıfının 'any[]' türünde tek bir rest parametresi içeren bir oluşturucusu olmalıdır.",
+  "A_mixin_class_that_extends_from_a_type_variable_containing_an_abstract_construct_signature_must_also_2797": "Soyut yapı imzası içeren bir tür değişkeninden genişleyen mixin sınıfı da 'soyut' olarak bildirilmelidir.",
   "A_module_cannot_have_multiple_default_exports_2528": "Modül, birden fazla varsayılan dışarı aktarmaya sahip olamaz.",
   "A_namespace_declaration_cannot_be_in_a_different_file_from_a_class_or_function_with_which_it_is_merg_2433": "Bir ad alanı bildirimi, birleştirildiği sınıf veya işlevden farklı bir dosyada olamaz.",
   "A_namespace_declaration_cannot_be_located_prior_to_a_class_or_function_with_which_it_is_merged_2434": "Bir ad alanı bildirimi, birleştirildiği sınıf veya işlevden önce gelemez.",
@@ -71,10 +73,10 @@
   "A_required_element_cannot_follow_an_optional_element_1257": "Gerekli öğe, isteğe bağlı öğeden sonra gelemez.",
   "A_required_parameter_cannot_follow_an_optional_parameter_1016": "Gerekli parametre, isteğe bağlı parametreden sonra gelemez.",
   "A_rest_element_cannot_contain_a_binding_pattern_2501": "rest öğesi bir bağlama deseni içeremez.",
+  "A_rest_element_cannot_follow_another_rest_element_1265": "REST öğesi başka bir REST öğesini izleyemez.",
   "A_rest_element_cannot_have_a_property_name_2566": "Rest öğesinin özellik adı olamaz.",
   "A_rest_element_cannot_have_an_initializer_1186": "rest öğesi bir başlatıcıya sahip olamaz.",
   "A_rest_element_must_be_last_in_a_destructuring_pattern_2462": "Rest öğesi, yok etme desenindeki son öğe olmalıdır.",
-  "A_rest_element_must_be_last_in_a_tuple_type_1256": "REST öğesi, demet türündeki son öğe olmalıdır.",
   "A_rest_element_type_must_be_an_array_type_2574": "REST öğesi dizi türünde olmalıdır.",
   "A_rest_parameter_cannot_be_optional_1047": "rest parametresi isteğe bağlı olamaz.",
   "A_rest_parameter_cannot_have_an_initializer_1048": "rest parametresi bir başlatıcıya sahip olamaz.",
@@ -82,6 +84,7 @@
   "A_rest_parameter_must_be_of_an_array_type_2370": "rest parametresi dizi türünde olmalıdır.",
   "A_rest_parameter_or_binding_pattern_may_not_have_a_trailing_comma_1013": "Bir rest parametresi veya bağlama deseninin sonunda virgül olamaz.",
   "A_return_statement_can_only_be_used_within_a_function_body_1108": "'return' deyimi, yalnızca bir işlev gövdesinde kullanılabilir.",
+  "A_return_statement_cannot_be_used_inside_a_class_static_block_18041": "'Return' deyimi bir sınıf statik bloğu içinde kullanılamaz.",
   "A_series_of_entries_which_re_map_imports_to_lookup_locations_relative_to_the_baseUrl_6167": "İçeri aktarmaları, 'baseUrl' ile ilgili arama konumlarına yeniden eşleyen bir girdi dizisi.",
   "A_set_accessor_cannot_have_a_return_type_annotation_1095": "'set' erişimcisi, dönüş türü ek açıklamasına sahip olamaz.",
   "A_set_accessor_cannot_have_an_optional_parameter_1051": "'set' erişimcisi isteğe bağlı bir parametreye sahip olamaz.",
@@ -89,6 +92,7 @@
   "A_set_accessor_must_have_exactly_one_parameter_1049": "'set' erişimcisi tam olarak bir parametreye sahip olmalıdır.",
   "A_set_accessor_parameter_cannot_have_an_initializer_1052": "'set' erişimci parametresinin bir başlatıcısı olamaz.",
   "A_signature_with_an_implementation_cannot_use_a_string_literal_type_2381": "Uygulamaya sahip bir imza, dize sabit değeri türünü kullanamaz.",
+  "A_spread_argument_must_either_have_a_tuple_type_or_be_passed_to_a_rest_parameter_2556": "Yayılma bağımsız değişkeni, bir demet türüne sahip olmalı ya da bir rest parametresine geçirilmelidir.",
   "A_super_call_must_be_the_first_statement_in_the_constructor_when_a_class_contains_initialized_proper_2376": "Bir sınıf başlatılmış özellikler, parametre özellikleri veya özel tanımlayıcılar içerdiğinde 'super' çağrısı, oluşturucudaki ilk deyim olmalıdır.",
   "A_this_based_type_guard_is_not_compatible_with_a_parameter_based_type_guard_2518": "'This' tabanlı tür koruması, parametre tabanlı tür koruması ile uyumlu değildir.",
   "A_this_type_is_available_only_in_a_non_static_member_of_a_class_or_interface_2526": "'this' türü, yalnızca bir sınıfın veya arabirimin statik olmayan bir üyesinde kullanılabilir.",
@@ -114,8 +118,11 @@
   "Add_a_return_statement_95111": "Return deyimi ekleyin",
   "Add_all_missing_async_modifiers_95041": "Tüm eksik 'async' değiştiricileri ekle",
   "Add_all_missing_call_parentheses_95068": "Eksik tüm çağrı parantezlerini ekle",
+  "Add_all_missing_function_declarations_95157": "Eksik işlev bildirimlerinin tümünü ekle",
   "Add_all_missing_imports_95064": "Tüm eksik içeri aktarmaları ekleyin",
   "Add_all_missing_members_95022": "Tüm eksik üyeleri ekle",
+  "Add_all_missing_override_modifiers_95162": "Tüm eksik 'override' değiştiricilerini ekle",
+  "Add_all_missing_properties_95166": "Tüm eksik özellikleri ekleyin",
   "Add_all_missing_return_statement_95114": "Tüm eksik return deyimlerini ekleyin",
   "Add_all_missing_super_calls_95039": "Tüm eksik süper çağrıları ekle",
   "Add_async_modifier_to_containing_function_90029": "İçeren işleve zaman uyumsuz değiştirici ekle",
@@ -135,18 +142,22 @@
   "Add_initializers_to_all_uninitialized_properties_95027": "Tüm başlatılmamış özelliklere başlatıcılar ekle",
   "Add_missing_call_parentheses_95067": "Eksik çağrı parantezlerini ekle",
   "Add_missing_enum_member_0_95063": "Eksik '{0}' sabit listesi üyesini ekleyin",
+  "Add_missing_function_declaration_0_95156": "Eksik '{0}' işlev bildirimini ekle",
   "Add_missing_new_operator_to_all_calls_95072": "Tüm çağrılara eksik 'new' işlecini ekleyin",
   "Add_missing_new_operator_to_call_95071": "Çağrıya eksik 'new' işlecini ekleyin",
+  "Add_missing_properties_95165": "Eksik özellikleri ekleyin",
   "Add_missing_super_call_90001": "Eksik 'super()' çağrısını ekle",
   "Add_missing_typeof_95052": "Eksik 'typeof' öğesini ekle",
   "Add_names_to_all_parameters_without_names_95073": "Adları olmayan tüm parametrelere ad ekleyin",
   "Add_or_remove_braces_in_an_arrow_function_95058": "Ok işlevine küme ayracı ekle veya kaldır",
+  "Add_override_modifier_95160": "'override' değiştiricisi ekle",
   "Add_parameter_name_90034": "Parametre adı ekleyin",
   "Add_qualifier_to_all_unresolved_variables_matching_a_member_name_95037": "Bir üye adıyla eşleşen tüm çözülmemiş değişkenlere niteleyici ekle",
   "Add_this_parameter_95104": "'this' parametresini ekleyin.",
   "Add_this_tag_95103": "'@this' etiketi ekle",
   "Add_to_all_uncalled_decorators_95044": "Çağrılmayan tüm dekoratörlere '()' ekle",
   "Add_ts_ignore_to_all_error_messages_95042": "Tüm hata iletilerine '@ts-ignore' ekle",
+  "Add_undefined_to_a_type_when_accessed_using_an_index_6674": "Bir dizin kullanarak erişildiğinde türe `undefined` ekleyin.",
   "Add_undefined_type_to_all_uninitialized_properties_95029": "Tüm başlatılmamış özelliklere tanımsız tür ekle",
   "Add_undefined_type_to_property_0_95018": "'{0}' özelliğine 'undefined' türünü ekle",
   "Add_unknown_conversion_for_non_overlapping_types_95069": "Çakışmayan türler için 'unknown' dönüştürmesi ekleyin",
@@ -154,8 +165,6 @@
   "Add_void_to_Promise_resolved_without_a_value_95143": "Değer olmadan çözümlenen Promise'e 'void' ekle",
   "Add_void_to_all_Promises_resolved_without_a_value_95144": "Değer olmadan çözümlenen tüm Promise'lere 'void' ekle",
   "Adding_a_tsconfig_json_file_will_help_organize_projects_that_contain_both_TypeScript_and_JavaScript__5068": "Bir tsconfig.json dosyası eklemek, hem TypeScript hem de JavaScript dosyaları içeren projeleri düzenlemenize yardımcı olur. Daha fazla bilgi edinmek için bkz. https://aka.ms/tsconfig.",
-  "Additional_Checks_6176": "Ek Denetimler",
-  "Advanced_Options_6178": "Gelişmiş Seçenekler",
   "All_declarations_of_0_must_have_identical_modifiers_2687": "Tüm '{0}' bildirimleri aynı değiştiricilere sahip olmalıdır.",
   "All_declarations_of_0_must_have_identical_type_parameters_2428": "Tüm '{0}' bildirimleri özdeş tür parametrelerine sahip olmalıdır.",
   "All_declarations_of_an_abstract_method_must_be_consecutive_2516": "Soyut metoda ait tüm bildirimler ardışık olmalıdır.",
@@ -163,34 +172,38 @@
   "All_imports_in_import_declaration_are_unused_6192": "İçeri aktarma bildirimindeki hiçbir içeri aktarma kullanılmadı.",
   "All_type_parameters_are_unused_6205": "Tüm tür parametreleri kullanılmıyor.",
   "All_variables_are_unused_6199": "Hiçbir değişken kullanılmıyor.",
-  "Allow_accessing_UMD_globals_from_modules_95076": "Modüllerden UMD genel değişkenlerine erişmeye izin verin.",
+  "Allow_JavaScript_files_to_be_a_part_of_your_program_Use_the_checkJS_option_to_get_errors_from_these__6600": "JavaScript dosyalarının programınızın bir parçası olmasına izin verin. Bu dosyalardan hataları almak için `checkJS` seçeneğini kullanın.",
+  "Allow_accessing_UMD_globals_from_modules_6602": "Modüllerden UMD genel değişkenlerine erişmeye izin verin.",
   "Allow_default_imports_from_modules_with_no_default_export_This_does_not_affect_code_emit_just_typech_6011": "Varsayılan dışarı aktarmaya sahip olmayan modüllerde varsayılan içeri aktarmalara izin verin. Bu işlem kod üretimini etkilemez, yalnızca tür denetimini etkiler.",
+  "Allow_import_x_from_y_when_a_module_doesn_t_have_a_default_export_6601": "Bir modülün varsayılan dışarı aktarması olmadığında 'import x from y' öğesine izin verin.",
+  "Allow_importing_helper_functions_from_tslib_once_per_project_instead_of_including_them_per_file_6639": "tslib’den yardımcı işlevlerin her dosya başına eklenmesi yerine proje başına bir kez içeri aktarılmasına izin verin.",
   "Allow_javascript_files_to_be_compiled_6102": "Javascript dosyalarının derlenmesine izin ver.",
+  "Allow_multiple_folders_to_be_treated_as_one_when_resolving_modules_6691": "Modüller çözümlenirken birden çok klasörün tek bir klasör olarak işlenmesine izin verin.",
   "Already_included_file_name_0_differs_from_file_name_1_only_in_casing_1261": "Zaten eklenmiş olan '{0}' dosya adı, '{1}' dosya adından yalnızca büyük/küçük harf yönünden farklıdır.",
   "Ambient_module_declaration_cannot_specify_relative_module_name_2436": "Çevresel modül bildirimi göreli modül adını belirtemez.",
   "Ambient_modules_cannot_be_nested_in_other_modules_or_namespaces_2435": "Çevresel modüller, diğer modüllerde veya ad alanlarında iç içe bulunamaz.",
   "An_AMD_module_cannot_have_multiple_name_assignments_2458": "AMD modülü birden fazla ad atamasında sahip olamaz.",
   "An_abstract_accessor_cannot_have_an_implementation_1318": "Soyut erişimcinin uygulaması olamaz.",
   "An_accessibility_modifier_cannot_be_used_with_a_private_identifier_18010": "Erişilebilirlik değiştiricisi özel bir tanımlayıcıyla kullanılamıyor.",
-  "An_accessor_cannot_be_named_with_a_private_identifier_18023": "Erişimci özel bir tanımlayıcıyla adlandırılamıyor.",
   "An_accessor_cannot_have_type_parameters_1094": "Erişimci, tür parametrelerine sahip olamaz.",
   "An_ambient_module_declaration_is_only_allowed_at_the_top_level_in_a_file_1234": "Çevresel modül bildirimine yalnızca bir dosyadaki en üst düzeyde izin verilir.",
   "An_argument_for_0_was_not_provided_6210": "'{0}' için bağımsız değişken sağlanmadı.",
   "An_argument_matching_this_binding_pattern_was_not_provided_6211": "Bu bağlama deseniyle eşleşen bağımsız değişken sağlanmadı.",
   "An_arithmetic_operand_must_be_of_type_any_number_bigint_or_an_enum_type_2356": "Aritmetik işlenen 'any', 'number', 'bigint' veya bir sabit listesi türünde olmalıdır.",
   "An_arrow_function_cannot_have_a_this_parameter_2730": "Ok işlevi 'this' parametresine sahip olamaz.",
-  "An_async_function_or_method_in_ES5_SlashES3_requires_the_Promise_constructor_Make_sure_you_have_a_de_2705": "ES5/ES3 içindeki zaman uyumsuz bir fonksiyon veya metot, 'Promise' oluşturucusu gerektiriyor. 'Promise' oluşturucusu için bir bildiriminizin olduğundan veya `--lib` seçeneğinize 'ES2015' eklediğinizden emin olun.",
+  "An_async_function_or_method_in_ES5_SlashES3_requires_the_Promise_constructor_Make_sure_you_have_a_de_2705": "ES5/ES3 içindeki zaman uyumsuz bir işlev veya metot, 'Promise' oluşturucusunu gerektiriyor. 'Promise' oluşturucusu için bir bildiriminiz olduğundan emin olun veya '--lib' seçeneğinize 'ES2015' ekleyin.",
   "An_async_function_or_method_must_have_a_valid_awaitable_return_type_1057": "Zaman uyumsuz bir işlev veya metot, geçerli bir beklenebilir dönüş türüne sahip olmalıdır.",
-  "An_async_function_or_method_must_return_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_in_2697": "Zaman uyumsuz bir işlevin veya metodun 'Promise' döndürmesi gerekir. Bir 'Promise' bildiriminiz olduğundan emin olun veya `--lib` seçeneğinize 'ES2015' ifadesini ekleyin.",
+  "An_async_function_or_method_must_return_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_in_2697": "Zaman uyumsuz bir işlevin veya metodun 'Promise' döndürmesi gerekir. 'Promise' için bir bildiriminiz olduğundan emin olun veya '--lib' seçeneğinize 'ES2015' ekleyin.",
   "An_async_iterator_must_have_a_next_method_2519": "Zaman uyumsuz yineleyicinin bir 'next()' metodu olmalıdır.",
   "An_element_access_expression_should_take_an_argument_1011": "Bir öğe erişimi ifadesi bir bağımsız değişken almalıdır.",
   "An_enum_member_cannot_be_named_with_a_private_identifier_18024": "Sabit listesi üyesi özel bir tanımlayıcıyla adlandırılamaz.",
   "An_enum_member_cannot_have_a_numeric_name_2452": "Sabit listesi üyesi, sayısal bir ada sahip olamaz.",
   "An_enum_member_name_must_be_followed_by_a_or_1357": "Sabit listesi üyesinin adından sonra bir ',', '=' veya '}' gelmelidir.",
-  "An_export_assignment_can_only_be_used_in_a_module_1231": "Dışarı aktarma ataması yalnızca bir modülde kullanılabilir.",
+  "An_expanded_version_of_this_information_showing_all_possible_compiler_options_6928": "Bu bilgilerin genişletilmiş bir versiyonu, kullanılabilir tüm derleyici seçeneklerini görüntüler",
   "An_export_assignment_cannot_be_used_in_a_module_with_other_exported_elements_2309": "Dışarı aktarma ataması, dışarı aktarılmış diğer öğelere sahip bir modülde kullanılamaz.",
   "An_export_assignment_cannot_be_used_in_a_namespace_1063": "Ad alanında dışarı aktarma ataması kullanılamaz.",
   "An_export_assignment_cannot_have_modifiers_1120": "Dışarı aktarma ataması, değiştiricilere sahip olamaz.",
+  "An_export_assignment_must_be_at_the_top_level_of_a_file_or_module_declaration_1231": "Dışarı aktarma ataması, bir dosyanın veya modül bildiriminin en üst düzeyinde olmalıdır.",
   "An_export_declaration_can_only_be_used_in_a_module_1233": "Dışarı aktarma bildirimi yalnızca bir modülde kullanılabilir.",
   "An_export_declaration_cannot_have_modifiers_1193": "Dışarı aktarma bildirimi, değiştiricilere sahip olamaz.",
   "An_expression_of_type_void_cannot_be_tested_for_truthiness_1345": "'void' türünde bir ifade doğruluk bakımından test edilemiyor.",
@@ -212,9 +225,8 @@
   "An_index_signature_parameter_cannot_have_an_accessibility_modifier_1018": "Dizin imzası parametresi, bir erişilebilirlik değiştiricisine sahip olamaz.",
   "An_index_signature_parameter_cannot_have_an_initializer_1020": "Dizin imzası parametresi, bir başlatıcıya sahip olamaz.",
   "An_index_signature_parameter_must_have_a_type_annotation_1022": "Dizin imzası parametresi, bir tür ek açıklamasına sahip olmalıdır.",
-  "An_index_signature_parameter_type_cannot_be_a_type_alias_Consider_writing_0_Colon_1_Colon_2_instead_1336": "Dizin imzası parametre türü bir tür diğer adı olamaz. Bunun yerine '[{0}: {1}]: {2}' yazabilirsiniz.",
-  "An_index_signature_parameter_type_cannot_be_a_union_type_Consider_using_a_mapped_object_type_instead_1337": "Dizin imzası parametre türü bir birleşim türü olamaz. Bunun yerine eşlenen nesne türü kullanabilirsiniz.",
-  "An_index_signature_parameter_type_must_be_either_string_or_number_1023": "Dizin imzası parametresi, 'string' veya 'number' türünde olmalıdır.",
+  "An_index_signature_parameter_type_cannot_be_a_literal_type_or_generic_type_Consider_using_a_mapped_o_1337": "Dizin imzası parametre türü sabit değer veya genel tür olamaz. Bunun yerine eşlenen nesne türü kullanabilirsiniz.",
+  "An_index_signature_parameter_type_must_be_string_number_symbol_or_a_template_literal_type_1268": "Dizin imzası parametre türü 'dize', 'sayı', 'sembol' veya şablon sabit değeri olmalıdır.",
   "An_interface_can_only_extend_an_identifier_Slashqualified_name_with_optional_type_arguments_2499": "Bir arabirim, isteğe bağlı tür bağımsız değişkenleri ile yalnızca bir tanımlayıcıyı/tam adı genişletebilir.",
   "An_interface_can_only_extend_an_object_type_or_intersection_of_object_types_with_statically_known_me_2312": "Arabirim, yalnızca statik olarak bilinen üyelere sahip bir nesne türünü veya nesne türlerinin bir kesişimini genişletebilir.",
   "An_interface_property_cannot_have_an_initializer_1246": "Arabirim özelliği bir başlatıcıya sahip olamaz.",
@@ -225,6 +237,7 @@
   "An_object_literal_cannot_have_property_and_accessor_with_the_same_name_1119": "Nesne sabit değeri, aynı ada sahip bir özellik ve erişimciye sahip olamaz.",
   "An_object_member_cannot_be_declared_optional_1162": "Nesne üyesi, isteğe bağlı olarak bildirilemez.",
   "An_optional_chain_cannot_contain_private_identifiers_18030": "İsteğe bağlı bir zincir, özel tanımlayıcı içeremez.",
+  "An_optional_element_cannot_follow_a_rest_element_1266": "İsteğe bağlı bir öğe, REST öğesini izleyemez.",
   "An_outer_value_of_this_is_shadowed_by_this_container_2738": "'this' öğesinin dış değeri bu kapsayıcı tarafından gölgelenir.",
   "An_overload_signature_cannot_be_declared_as_a_generator_1222": "Aşırı yükleme imzası, bir oluşturucu olarak bildirilemez.",
   "An_unary_expression_with_the_0_operator_is_not_allowed_in_the_left_hand_side_of_an_exponentiation_ex_17006": "Üs ifadesinin sol tarafında '{0}' işlecine sahip bir tek terimli ifadeye izin verilmez. İfadeyi parantez içine yazmayı düşünün.",
@@ -244,33 +257,47 @@
   "Augmentations_for_the_global_scope_can_only_be_directly_nested_in_external_modules_or_ambient_module_2669": "Genel kapsam genişletmeleri yalnızca dış modüllerde ya da çevresel modül bildirimlerinde doğrudan yuvalanabilir.",
   "Augmentations_for_the_global_scope_should_have_declare_modifier_unless_they_appear_in_already_ambien_2670": "Genel kapsam genişletmeleri, zaten çevresel olan bir bağlamda göründükleri durumlar dışında 'declare' değiştiricisine sahip olmalıdır.",
   "Auto_discovery_for_typings_is_enabled_in_project_0_Running_extra_resolution_pass_for_module_1_using__6140": "'{0}' projesinde otomatik tür bulma etkinleştirildi. '{2}' önbellek konumu kullanılarak '{1}' modülü için ek çözümleme geçişi çalıştırılıyor.",
+  "Await_expression_cannot_be_used_inside_a_class_static_block_18037": "‘Await’ ifadesi bir sınıf statik bloğu içinde kullanılamaz.",
+  "BUILD_OPTIONS_6919": "DERLEME SEÇENEKLERİ",
+  "Backwards_Compatibility_6253": "Geriye Doğru Uyumluluk",
   "Base_class_expressions_cannot_reference_class_type_parameters_2562": "Temel sınıf ifadelerinde sınıf türü parametrelerine başvuruda bulunulamaz.",
   "Base_constructor_return_type_0_is_not_an_object_type_or_intersection_of_object_types_with_statically_2509": "'{0}' temel oluşturucu dönüş türü, statik olarak bilinen üyelere sahip bir nesne türü veya nesne türlerinin bir kesişimi değil.",
   "Base_constructors_must_all_have_the_same_return_type_2510": "Tüm temel oluşturucuların aynı dönüş türüne sahip olması gerekir.",
   "Base_directory_to_resolve_non_absolute_module_names_6083": "Mutlak olmayan modül adlarını çözümlemek için kullanılan temel dizin.",
-  "Basic_Options_6172": "Temel Seçenekler",
   "BigInt_literals_are_not_available_when_targeting_lower_than_ES2020_2737": "ES2020'den düşük değerler hedeflendiğinde büyük tamsayı sabit değerleri kullanılamıyor.",
   "Binary_digit_expected_1177": "İkili sayı bekleniyor.",
   "Binding_element_0_implicitly_has_an_1_type_7031": "'{0}' bağlama öğesi, örtük olarak '{1}' türü içeriyor.",
   "Block_scoped_variable_0_used_before_its_declaration_2448": "Blok kapsamlı değişken '{0}', bildirilmeden önce kullanıldı.",
-  "Build_all_projects_including_those_that_appear_to_be_up_to_date_6368": "Güncel görünenler de dahil olmak üzere tüm projeleri derleyin",
+  "Build_a_composite_project_in_the_working_directory_6925": "Çalışma dizininde kompozit proje oluşturun.",
+  "Build_all_projects_including_those_that_appear_to_be_up_to_date_6636": "Güncel görünenler de dahil olmak üzere tüm projeleri derleyin",
   "Build_one_or_more_projects_and_their_dependencies_if_out_of_date_6364": "Eskiyse, bir veya daha fazla projeyi ve bağımlılıklarını derleyin",
   "Build_option_0_requires_a_value_of_type_1_5073": "'{0}' derleme seçeneği, {1} türünde bir değer gerektiriyor.",
   "Building_project_0_6358": "'{0}' projesi derleniyor...",
+  "COMMAND_LINE_FLAGS_6921": "KOMUT SATIRI BAYRAKLARI",
+  "COMMON_COMMANDS_6916": "ORTAK KOMUTLAR",
+  "COMMON_COMPILER_OPTIONS_6920": "ORTAK DERLEYİCİ SEÇENEKLERI",
   "Call_decorator_expression_90028": "Dekoratör ifadesini çağır",
   "Call_signature_return_types_0_and_1_are_incompatible_2202": "'{0}' ve '{1}' çağrı imzası dönüş türleri uyumsuz.",
   "Call_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type_7020": "Dönüş türü ek açıklaması bulunmayan çağrı imzası, örtük olarak 'any' dönüş türüne sahip.",
   "Call_signatures_with_no_arguments_have_incompatible_return_types_0_and_1_2204": "Bağımsız değişken içermeyen çağrı imzaları uyumsuz '{0}' ve '{1}' dönüş türlerine sahip.",
   "Call_target_does_not_contain_any_signatures_2346": "Çağrı hedefi imza içermiyor.",
   "Can_only_convert_logical_AND_access_chains_95142": "Yalnızca mantıksal zincirler VE erişim zincirleri dönüştürülebilir",
+  "Can_only_convert_named_export_95164": "Yalnızca adı belirtilen dışarı aktarma dönüştürülebilir",
   "Can_only_convert_property_with_modifier_95137": "Yalnızca değiştirici içeren özellik dönüştürülebilir",
+  "Can_only_convert_string_concatenation_95154": "Yalnızca dize birleştirmesi dönüştürülebilir",
   "Cannot_access_0_1_because_0_is_a_type_but_not_a_namespace_Did_you_mean_to_retrieve_the_type_of_the_p_2713": "'{0}' bir ad alanı değil tür olduğundan '{0}.{1}' erişimi sağlanamıyor. '{0}[\"{1}\"]' değerini belirterek '{0}' içindeki '{1}' özelliğinin türünü almak mı istediniz?",
   "Cannot_access_ambient_const_enums_when_the_isolatedModules_flag_is_provided_2748": "'--isolatedModules' bayrağı sağlandığında çevresel const sabit listelerine erişilemiyor.",
   "Cannot_assign_a_0_constructor_type_to_a_1_constructor_type_2672": "'{0}' oluşturucu türüne '{1}' oluşturucu türü atanamaz.",
   "Cannot_assign_an_abstract_constructor_type_to_a_non_abstract_constructor_type_2517": "Bir soyut oluşturucu türü, soyut olmayan bir oluşturucu türüne atanamaz.",
+  "Cannot_assign_to_0_because_it_is_a_class_2629": "Sınıf olduğundan '{0}' özelliğine atama yapılamıyor.",
   "Cannot_assign_to_0_because_it_is_a_constant_2588": "Sabit olduğundan '{0}' özelliğine atama yapılamıyor.",
+  "Cannot_assign_to_0_because_it_is_a_function_2630": "İşlev olduğundan '{0}' özelliğine atama yapılamıyor.",
+  "Cannot_assign_to_0_because_it_is_a_namespace_2631": "Ad alanı olduğundan '{0}' özelliğine atama yapılamıyor.",
   "Cannot_assign_to_0_because_it_is_a_read_only_property_2540": "Salt okunur bir özellik olduğundan '{0}' özelliğine atama yapılamıyor.",
+  "Cannot_assign_to_0_because_it_is_an_enum_2628": "Sabit listesi olduğundan '{0}' öğesine atama yapılamıyor.",
+  "Cannot_assign_to_0_because_it_is_an_import_2632": "İçeri aktarma olduğundan '{0}' öğesine atama yapılamıyor.",
   "Cannot_assign_to_0_because_it_is_not_a_variable_2539": "Değişken olmadığından '{0}' öğesine atama yapılamıyor.",
+  "Cannot_assign_to_private_method_0_Private_methods_are_not_writable_2803": "'{0}' özel metoduna atanamıyor. Özel metotlar yazılamaz.",
   "Cannot_augment_module_0_because_it_resolves_to_a_non_module_entity_2671": "'{0}' modülü, modül olmayan bir varlığa çözümlendiğinden genişletilemiyor.",
   "Cannot_augment_module_0_with_value_exports_because_it_resolves_to_a_non_module_entity_2649": "Modül olmayan bir varlığa çözümlendiğinden '{0}' modülü, değer dışarı aktarmalarıyla genişletilemiyor.",
   "Cannot_compile_modules_using_option_0_unless_the_module_flag_is_amd_or_system_6131": "'--module' bayrağı 'amd' veya 'system' olmadığı sürece '{0}' seçeneği kullanılarak modül derlenemez.",
@@ -292,14 +319,14 @@
   "Cannot_find_name_0_Did_you_mean_1_2552": "'{0}' adı bulunamıyor. Bunu mu demek istediniz: '{1}'?",
   "Cannot_find_name_0_Did_you_mean_the_instance_member_this_0_2663": "'{0}' adı bulunamıyor. 'this.{0}' örnek üyesini mi aradınız?",
   "Cannot_find_name_0_Did_you_mean_the_static_member_1_0_2662": "'{0}' adı bulunamıyor. '{1}.{0}' statik üyesini mi aradınız?",
-  "Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_2583": "'{0}' adı bulunamıyor. Hedef kitaplığınızı değiştirmeniz mi gerekiyor? `lib` derleyici seçeneğini '{1}' veya üzeri olarak değiştirmeyi deneyin.",
-  "Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_2584": "'{0}' adı bulunamıyor. Hedef kitaplığınızı değiştirmeniz gerekiyor mu? `lib` derleyici seçeneğini 'dom' içerecek şekilde değiştirmeyi deneyin.",
+  "Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_2583": "'{0}' adı bulunamıyor. Hedef kitaplığınızı değiştirmeniz mi gerekiyor? 'lib' derleyici seçeneğini '{1}' veya üzeri olarak değiştirmeyi deneyin.",
+  "Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_2584": "'{0}' adı bulunamıyor. Hedef kitaplığınızı değiştirmeniz gerekiyor mu? 'lib' derleyici seçeneğini 'dom' içerecek şekilde değiştirmeyi deneyin.",
   "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_a_test_runner_Try_npm_i_save_dev_type_2582": "'{0}' adı bulunamıyor. Test Runner için tür tanımlarını yüklemeniz mi gerekiyor? Şunları deneyin: `npm i --save-dev @types/jest` veya `npm i --save-dev @types/mocha`.",
-  "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_a_test_runner_Try_npm_i_save_dev_type_2593": "'{0}' adı bulunamıyor. Test Runner için tür tanımlarını yüklemeniz mi gerekiyor? Şunları deneyin: `npm i --save-dev @types/jest` veya `npm i --save-dev @types/mocha`. Ardından tsconfig dosyanızdaki types alanına `jest` veya `mocha` ekleyin.",
+  "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_a_test_runner_Try_npm_i_save_dev_type_2593": "'{0}' adı bulunamıyor. Test Runner için tür tanımlarını yüklemeniz mi gerekiyor? Şunları deneyin: `npm i --save-dev @types/jest` veya `npm i --save-dev @types/mocha`. Ardından tsconfig dosyanızdaki türler alanına 'jest' veya 'mocha' ekleyin.",
   "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_jQuery_Try_npm_i_save_dev_types_Slash_2581": "'{0}' adı bulunamıyor. jQuery için tür tanımlarını yüklemeniz mi gerekiyor? Şunu deneyin: `npm i --save-dev @types/jquery`.",
-  "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_jQuery_Try_npm_i_save_dev_types_Slash_2592": "'{0}' adı bulunamıyor. jQuery için tür tanımlarını yüklemeniz mi gerekiyor? Şunu deneyin: `npm i --save-dev @types/jquery`. Ardından tsconfig dosyanızdaki types alanına `jquery` ekleyin.",
+  "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_jQuery_Try_npm_i_save_dev_types_Slash_2592": "'{0}' adı bulunamıyor. jQuery için tür tanımlarını yüklemeniz gerekiyor mu? Şunu deneyin: `npm i --save-dev @types/jquery`. Ardından tsconfig dosyanızdaki türler alanına 'jquery' öğesini ekleyin.",
   "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_node_Try_npm_i_save_dev_types_Slashno_2580": "'{0}' adı bulunamıyor. Düğüm için tür tanımlarını yüklemeniz mi gerekiyor? Şunu deneyin: `npm i --save-dev @types/node`.",
-  "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_node_Try_npm_i_save_dev_types_Slashno_2591": "'{0}' adı bulunamıyor. Düğüm için tür tanımlarını yüklemeniz mi gerekiyor? Şunu deneyin: `npm i --save-dev @types/node`. Ardından tsconfig dosyanızdaki types alanına `node` ekleyin.",
+  "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_node_Try_npm_i_save_dev_types_Slashno_2591": "'{0}' adı bulunamıyor. Düğüm için tür tanımlarını yüklemeniz mi gerekiyor? Şunu deneyin: `npm i --save-dev @types/node`. Ardından tsconfig dosyanızdaki türler alanına 'node' ekleyin.",
   "Cannot_find_namespace_0_2503": "'{0}' ad alanı bulunamıyor.",
   "Cannot_find_parameter_0_1225": "'{0}' parametresi bulunamıyor.",
   "Cannot_find_the_common_subdirectory_path_for_the_input_files_5009": "Giriş dosyalarına ait ortak alt dizin yolu bulunamıyor.",
@@ -318,11 +345,13 @@
   "Cannot_redeclare_block_scoped_variable_0_2451": "Blok kapsamlı değişken '{0}', yeniden bildirilemiyor.",
   "Cannot_redeclare_exported_variable_0_2323": "Dışarı aktarılan '{0}' değişkeni yeniden bildirilemiyor.",
   "Cannot_redeclare_identifier_0_in_catch_clause_2492": "Catch yan tümcesindeki '{0}' tanımlayıcısı yeniden bildirilemiyor.",
+  "Cannot_start_a_function_call_in_a_type_annotation_1441": "Bir tür ek açıklamasında bir işlev çağrısı başlatılamıyor.",
   "Cannot_update_output_of_project_0_because_there_was_error_reading_file_1_6376": "'{1}' dosyası okunurken hata oluştuğundan '{0}' projesinin çıkışı güncelleştirilemiyor",
   "Cannot_use_JSX_unless_the_jsx_flag_is_provided_17004": "'--jsx' bayrağı sağlanmazsa JSX kullanılamaz.",
   "Cannot_use_imports_exports_or_module_augmentations_when_module_is_none_1148": "'--module' değeri 'none' olduğunda içeri aktarma, dışarı aktarma veya modül genişletme kullanılamaz.",
   "Cannot_use_namespace_0_as_a_type_2709": "'{0}' ad alanı, tür olarak kullanılamaz.",
   "Cannot_use_namespace_0_as_a_value_2708": "'{0}' ad alanı, değer olarak kullanılamaz.",
+  "Cannot_use_this_in_a_static_property_initializer_of_a_decorated_class_2816": "'This' ifadesi bir donatılmış sınıfın statik özellik başlatıcısında kullanılamaz.",
   "Cannot_write_file_0_because_it_will_overwrite_tsbuildinfo_file_generated_by_referenced_project_1_6377": "'{0}' dosyası, başvurulan '{1}' projesi tarafından oluşturulan '.tsbuildinfo' dosyasının üzerine yazacağından bu dosya yazılamıyor",
   "Cannot_write_file_0_because_it_would_be_overwritten_by_multiple_input_files_5056": "Birden fazla giriş dosyası tarafından üzerine yazılacağı için '{0}' dosyası yazılamıyor.",
   "Cannot_write_file_0_because_it_would_overwrite_input_file_5055": "Giriş dosyasının üzerine yazacağı için '{0}' dosyası yazılamıyor.",
@@ -334,6 +363,8 @@
   "Change_all_jsdoc_style_types_to_TypeScript_and_add_undefined_to_nullable_types_95031": "Tüm jsdoc-style türlerini TypeScript olarak değiştir (ve null yapılabilir türlere '| undefined' ekle)",
   "Change_extends_to_implements_90003": "'extends' ifadesini 'implements' olarak değiştirin",
   "Change_spelling_to_0_90022": "Yazımı '{0}' olarak değiştir",
+  "Check_for_class_properties_that_are_declared_but_not_set_in_the_constructor_6700": "Bildirilen ancak oluşturucuda ayarlanmamış sınıf özelliklerini denetleyin.",
+  "Check_that_the_arguments_for_bind_call_and_apply_methods_match_the_original_function_6697": "`bind`, `call` ve `apply` yöntemlerinin bağımsız değişkenlerinin özgün işlevle eşleştiğini denetleyin.",
   "Checking_if_0_is_the_longest_matching_prefix_for_1_2_6104": "'{0}' ön ekinin '{1}' - '{2}' için eşleşen en uzun ön ek olup olmadığı denetleniyor.",
   "Circular_definition_of_import_alias_0_2303": "'{0}' içeri aktarma diğer adının döngüsel tanımı.",
   "Circularity_detected_while_resolving_configuration_Colon_0_18000": "Yapılandırma çözümlenirken döngüsellik algılandı: {0}",
@@ -345,7 +376,9 @@
   "Class_0_incorrectly_implements_class_1_Did_you_mean_to_extend_1_and_inherit_its_members_as_a_subclas_2720": "'{0}' sınıfı hatalı olarak '{1}' sınıfını uyguluyor. '{1}' sınıfını genişletip üyelerini bir alt sınıf olarak devralmak mı istiyordunuz?",
   "Class_0_incorrectly_implements_interface_1_2420": "'{0}' sınıfı, '{1}' arabirimini yanlış uyguluyor.",
   "Class_0_used_before_its_declaration_2449": "'{0}' sınıfı, bildiriminden önce kullanıldı.",
-  "Class_declarations_cannot_have_more_than_one_augments_or_extends_tag_8025": "Sınıf bildirimlerinde birden fazla `@augments` veya `@extends` etiketi olamaz.",
+  "Class_declaration_cannot_implement_overload_list_for_0_2813": "Sınıf bildirimi, '{0}' için aşırı yükleme listesi uygulayamaz.",
+  "Class_declarations_cannot_have_more_than_one_augments_or_extends_tag_8025": "Sınıf bildirimlerinde birden fazla '@augments' veya '@extends' etiketi olamaz.",
+  "Class_decorators_can_t_be_used_with_static_private_identifier_Consider_removing_the_experimental_dec_18036": "Sınıf dekoratörleri statik özel tanımlayıcıyla kullanılamaz. Deneysel dekoratörü kaldırmayı düşünün.",
   "Class_name_cannot_be_0_2414": "Sınıf adı '{0}' olamaz.",
   "Class_name_cannot_be_Object_when_targeting_ES5_with_module_0_2725": "Modül {0} ile ES5 hedeflendiğinde sınıf adı 'Object' olamaz.",
   "Class_static_side_0_incorrectly_extends_base_class_static_side_1_2417": "'{0}' statik sınıf tarafı, '{1}' statik temel sınıf tarafını yanlış genişletiyor.",
@@ -354,16 +387,25 @@
   "Classes_may_not_have_a_field_named_constructor_18006": "Sınıflarda 'constructor' adlı bir alan olmayabilir.",
   "Command_line_Options_6171": "Komut Satırı Seçenekleri",
   "Compile_the_project_given_the_path_to_its_configuration_file_or_to_a_folder_with_a_tsconfig_json_6020": "Yapılandırma dosyasının yolu veya 'tsconfig.json' dosyasını içeren klasörün yolu belirtilen projeyi derleyin.",
+  "Compiler_Diagnostics_6251": "Derleyici Tanılaması",
   "Compiler_option_0_expects_an_argument_6044": "'{0}' derleyici seçeneği, bağımsız değişken bekliyor.",
+  "Compiler_option_0_may_not_be_used_with_build_5094": "'--{0}' derleyici seçeneği, '--build' ile kullanılamaz.",
+  "Compiler_option_0_may_only_be_used_with_build_5093": "'--{0}' derleyici seçeneği, yalnızca '--build' ile kullanılabilir.",
   "Compiler_option_0_requires_a_value_of_type_1_5024": "'{0}' derleyici seçeneği, {1} türünde bir değer gerektiriyor.",
   "Compiler_reserves_name_0_when_emitting_private_identifier_downlevel_18027": "Özel tanımlayıcı alt düzeyi gösterilirken derleyici '{0}' adını ayırır.",
+  "Compiles_the_TypeScript_project_located_at_the_specified_path_6927": "Belirtilen yolda bulunan TypeScript projesini derler",
+  "Compiles_the_current_project_tsconfig_json_in_the_working_directory_6923": "Geçerli projeyi derler (çalışma dizinindeki tsconfig.js).",
+  "Compiles_the_current_project_with_additional_settings_6929": "Geçerli projeyi ek ayarlarla derler",
+  "Completeness_6257": "Tamlık",
   "Composite_projects_may_not_disable_declaration_emit_6304": "Bileşik projeler, bildirim gösterimini devre dışı bırakamaz.",
   "Composite_projects_may_not_disable_incremental_compilation_6379": "Bileşik projeler artımlı derlemeyi devre dışı bırakamayabilir.",
+  "Computed_from_the_list_of_input_files_6911": "Giriş dosyaları listesinden hesaplanır",
   "Computed_property_names_are_not_allowed_in_enums_1164": "Sabit listelerinde hesaplanan özellik adına izin verilmiyor.",
   "Computed_values_are_not_permitted_in_an_enum_with_string_valued_members_2553": "Dize değeri içeren üyelerin bulunduğu bir sabit listesinde hesaplanan değerlere izin verilmez.",
   "Concatenate_and_emit_output_to_single_file_6001": "Çıktıyı tek dosyaya birleştirin ve yayın.",
   "Conflicting_definitions_for_0_found_at_1_and_2_Consider_installing_a_specific_version_of_this_librar_4090": "'{1}' ve '{2}' içinde '{0}' için çakışan tanımlar bulundu. Çakışmayı çözmek için bu kitaplığın belirli bir versiyonunu yüklemeniz önerilir.",
   "Conflicts_are_in_this_file_6201": "Çakışmalar bu dosyada bulunuyor.",
+  "Consider_adding_a_declare_modifier_to_this_class_6506": "Bu sınıfa 'declare' değiştiricisi eklemeyi düşünün.",
   "Construct_signature_return_types_0_and_1_are_incompatible_2203": "'{0}' ve '{1}' yapı imzası dönüş türleri uyumlu değil.",
   "Construct_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type_7013": "Dönüş türü ek açıklaması bulunmayan yapı imzası, örtük olarak 'any' dönüş türüne sahip.",
   "Construct_signatures_with_no_arguments_have_incompatible_return_types_0_and_1_2205": "Bağımsız değişken içermeyen yapı imzaları uyumsuz '{0}' ve '{1}' dönüş türlerine sahip.",
@@ -413,16 +455,24 @@
   "Convert_to_type_only_export_1364": "Yalnızca tür dışarı aktarmaya dönüştürün",
   "Convert_to_type_only_import_1373": "Yalnızca tür içeri aktarmaya dönüştürün",
   "Corrupted_locale_file_0_6051": "{0} yerel ayar dosyası bozuk.",
+  "Could_not_convert_to_anonymous_function_95153": "Anonim işleve dönüştürülemedi",
+  "Could_not_convert_to_arrow_function_95151": "Arrow işlevine dönüştürülemedi",
+  "Could_not_convert_to_named_function_95152": "Adlandırılmış işleve dönüştürülemedi",
+  "Could_not_determine_function_return_type_95150": "İşlev dönüş türü belirlenemedi",
   "Could_not_find_a_containing_arrow_function_95127": "İçeren bir ok işlevi bulunamadı",
   "Could_not_find_a_declaration_file_for_module_0_1_implicitly_has_an_any_type_7016": "'{0}' modülü için bildirim dosyası bulunamadı. '{1}' örtülü olarak 'any' türüne sahip.",
   "Could_not_find_convertible_access_expression_95140": "Dönüştürülebilir erişim ifadesi bulunamadı",
   "Could_not_find_export_statement_95129": "Dışarı aktarma ifadesi bulunamadı",
   "Could_not_find_import_clause_95131": "İçeri aktarma yan tümcesi bulunamadı",
   "Could_not_find_matching_access_expressions_95141": "Eşleşen erişim ifadeleri bulunamadı",
+  "Could_not_find_name_0_Did_you_mean_1_2570": "'{0}' adı bulunamıyor. Şunu mu demek istediniz: '{1}'?",
   "Could_not_find_namespace_import_or_named_imports_95132": "Ad alanı içeri aktarması veya adlandırılmış içeri aktarmalar bulunamadı",
   "Could_not_find_property_for_which_to_generate_accessor_95135": "Erişimcinin oluşturulacağı özellik bulunamadı",
   "Could_not_resolve_the_path_0_with_the_extensions_Colon_1_6231": "Uzantılara sahip '{0}' yolu çözümlenemedi: {1}.",
   "Could_not_write_file_0_Colon_1_5033": "'{0}' dosyası yazılamadı: {1}.",
+  "Create_source_map_files_for_emitted_JavaScript_files_6694": "Yayılan JavaScript dosyaları için kaynak eşleme dosyaları oluşturun.",
+  "Create_sourcemaps_for_d_ts_files_6614": "d.ts dosyaları için kaynak eşlemeleri oluşturun.",
+  "Creates_a_tsconfig_json_with_the_recommended_settings_in_the_working_directory_6926": "Çalışma dizininde önerilen ayarlarla ilgili bir tsconfig.js oluşturur.",
   "DIRECTORY_6038": "DİZİN",
   "Declaration_augments_declaration_in_another_file_This_cannot_be_serialized_6232": "Bildirim başka bir dosyadaki bildirimi genişlettiğinden serileştirilemez.",
   "Declaration_emit_for_this_file_requires_using_private_name_0_An_explicit_type_annotation_may_unblock_9005": "Bu dosya için bildirim gösterme, '{0}' özel adını kullanmayı gerektiriyor. Açık tür ek açıklaması, bildirim gösterme engelini kaldırabilir.",
@@ -430,6 +480,7 @@
   "Declaration_expected_1146": "Bildirim bekleniyor.",
   "Declaration_name_conflicts_with_built_in_global_identifier_0_2397": "Bildirim adı, yerleşik genel tanımlayıcı '{0}' ile çakışıyor.",
   "Declaration_or_statement_expected_1128": "Bildirim veya deyim bekleniyor.",
+  "Declaration_or_statement_expected_This_follows_a_block_of_statements_so_if_you_intended_to_write_a_d_2809": "Bildirim veya deyim bekleniyor. Bu '=' bir deyim bloğunu izlediğinden yok etme ataması yazmak istiyorsanız tüm atamayı parantez içine almanız gerekebilir.",
   "Declarations_with_definite_assignment_assertions_must_also_have_type_annotations_1264": "Kesin atama onaylamaları olan bildirimlerde tür ek açıklamaları da olmalıdır.",
   "Declarations_with_initializers_cannot_also_have_definite_assignment_assertions_1263": "Başlatıcılara sahip bildirimlerde kesin atama onaylamaları olamaz.",
   "Declare_a_private_field_named_0_90053": "'{0}' adlı bir özel alan bildirin.",
@@ -441,7 +492,11 @@
   "Declare_static_property_0_90027": "'{0}' statik özelliğini bildir",
   "Decorators_are_not_valid_here_1206": "Buradaki dekoratörler geçerli değil.",
   "Decorators_cannot_be_applied_to_multiple_get_Slashset_accessors_of_the_same_name_1207": "Dekoratörler aynı ada sahip birden fazla get/set erişimcisine uygulanamaz.",
+  "Decorators_may_not_be_applied_to_this_parameters_1433": "Dekoratörler 'this' parametrelerine uygulanamaz.",
+  "Decorators_must_precede_the_name_and_all_keywords_of_property_declarations_1436": "Dekoratörler, özellik bildirimlerinin adından ve tüm anahtar sözcüklerinden önce gelmelidir.",
   "Default_export_of_the_module_has_or_is_using_private_name_0_4082": "Modülün varsayılan dışarı aktarımı '{0}' özel adına sahip veya bu adı kullanıyor.",
+  "Default_library_1424": "Varsayılan kitaplık",
+  "Default_library_for_target_0_1425": "'{0}' hedefi için varsayılan kitaplık",
   "Definitions_of_the_following_identifiers_conflict_with_those_in_another_file_Colon_0_6200": "Şu tanımlayıcıların tanımları başka bir dosyadaki tanımlarla çakışıyor: {0}",
   "Delete_all_unused_declarations_95024": "Kullanılmayan tüm bildirimleri sil",
   "Delete_all_unused_imports_95147": "Kullanılmayan tüm içeri aktarmaları sil",
@@ -449,6 +504,7 @@
   "Deprecated_Use_jsxFactory_instead_Specify_the_object_invoked_for_createElement_when_targeting_react__6084": "[Kullanım Dışı] Bunun yerine '--jsxFactory' kullanın. 'react' JSX gösterimi hedefleniyorsa, createElement için çağrılan nesneyi belirtin",
   "Deprecated_Use_outFile_instead_Concatenate_and_emit_output_to_single_file_6170": "[Kullanım Dışı] Bunun yerine '--outFile' kullanın. Çıkışı tek bir dosya olarak birleştirin ve gösterin",
   "Deprecated_Use_skipLibCheck_instead_Skip_type_checking_of_default_library_declaration_files_6160": "[Kullanım Dışı] Bunun yerine '--skipLibCheck' kullanın. Varsayılan kitaplık bildirim dosyalarının tür denetimini atlayın.",
+  "Deprecated_setting_Use_outFile_instead_6677": "Ayar kullanım dışı bırakıldı. Bunun yerine `outFile` kullanın.",
   "Did_you_forget_to_use_await_2773": "'await' kullanmayı mı unuttunuz?",
   "Did_you_mean_0_1369": "Şunu mu demek istediniz: '{0}'?",
   "Did_you_mean_for_0_to_be_constrained_to_type_new_args_Colon_any_1_2735": "'{0}' değerinin 'new (...args: any[]) => {1}' türüne kısıtlanmasını mı istediniz?",
@@ -459,12 +515,30 @@
   "Did_you_mean_to_use_new_with_this_expression_6213": "Bu ifadeyle 'new' kullanmak mı istediniz?",
   "Digit_expected_1124": "Rakam bekleniyor.",
   "Directory_0_does_not_exist_skipping_all_lookups_in_it_6148": "'{0}' dizini yok, içindeki tüm aramalar atlanıyor.",
+  "Disable_adding_use_strict_directives_in_emitted_JavaScript_files_6669": "Yayılan JavaScript dosyalarında ‘use strict’ yönergelerini eklemeyi devre dışı bırakın.",
   "Disable_checking_for_this_file_90018": "Bu dosya için denetimi devre dışı bırak",
+  "Disable_emitting_comments_6688": "Yorumların yayılmasını devre dışı bırakın.",
+  "Disable_emitting_declarations_that_have_internal_in_their_JSDoc_comments_6701": "JSDoc açıklamalarında `@internal` olan yayma bildirimlerini devre dışı bırakın.",
+  "Disable_emitting_file_from_a_compilation_6660": "Bir derlemeden dosya yaymayı devre dışı bırakın.",
+  "Disable_emitting_files_if_any_type_checking_errors_are_reported_6662": "Herhangi bir tür denetimi hatası bildirildiyse, dosya yaymayı devre dışı bırakın.",
+  "Disable_erasing_const_enum_declarations_in_generated_code_6682": "Oluşturulan kodda `const enum` bildirimlerinin silinmesini devre dışı bırakın.",
+  "Disable_error_reporting_for_unreachable_code_6603": "Ulaşılamaz kod için hata raporlamayı devre dışı bırakın.",
+  "Disable_error_reporting_for_unused_labels_6604": "Kullanılmayan etiketler için hata raporlamayı devre dışı bırakın.",
+  "Disable_generating_custom_helper_functions_like_extends_in_compiled_output_6661": "Derlenen çıkışta `__extends` gibi özel yardımcı işlevler oluşturmayı devre dışı bırakın.",
+  "Disable_including_any_library_files_including_the_default_lib_d_ts_6670": "Varsayılan lib.d.ts dahil olmak üzere kitaplık dosyalarının dahil edilmesini devre dışı bırakın.",
   "Disable_loading_referenced_projects_6235": "Başvurulan projelerin yüklenmesini devre dışı bırakın.",
+  "Disable_preferring_source_files_instead_of_declaration_files_when_referencing_composite_projects_6620": "Bileşik projelere başvurulurken bildirim dosyaları yerine kaynak dosyaları tercih etmeyi devre dışı bırak",
+  "Disable_reporting_of_excess_property_errors_during_the_creation_of_object_literals_6702": "Nesne sabit değerleri oluşturulurken fazlalık özellik hatalarının raporlanmasını devre dışı bırakın.",
+  "Disable_resolving_symlinks_to_their_realpath_This_correlates_to_the_same_flag_in_node_6683": "Simgesel bağlantıları gerçek yollarına çözümlemeyi devre dışı bırakın. Bu, düğümdeki aynı bayrakla bağıntılıdır.",
   "Disable_size_limitations_on_JavaScript_projects_6162": "JavaScript projelerinde boyut sınırlamalarını devre dışı bırakın.",
   "Disable_solution_searching_for_this_project_6224": "Bu proje için çözüm aramayı devre dışı bırakın.",
-  "Disable_strict_checking_of_generic_signatures_in_function_types_6185": "İşlev türlerinde genel imzalar için katı denetimi devre dışı bırakın.",
+  "Disable_strict_checking_of_generic_signatures_in_function_types_6673": "İşlev türlerinde genel imzalar için katı denetimi devre dışı bırakın.",
+  "Disable_the_type_acquisition_for_JavaScript_projects_6625": "JavaScript projeleri için tür alımını devre dışı bırak",
+  "Disable_truncating_types_in_error_messages_6663": "Hata iletilerinde türlerin kesilmesini devre dışı bırakın.",
   "Disable_use_of_source_files_instead_of_declaration_files_from_referenced_projects_6221": "Başvurulan projelerdeki bildirim dosyaları yerine kaynak dosyalarının kullanımını devre dışı bırakın.",
+  "Disable_wiping_the_console_in_watch_mode_6684": "İzleme modunda konsolu temizlemeyi devre dışı bırak",
+  "Disables_inference_for_type_acquisition_by_looking_at_filenames_in_a_project_6616": "Bir projedeki dosya adlarına bakarak tür alımı çıkarımı devre dışı bırakır.",
+  "Disallow_import_s_require_s_or_reference_s_from_expanding_the_number_of_files_TypeScript_should_add__6672": "`import`, `require` veya `<reference>` öğelerinin, TypeScript’in bir projeye eklemesi gereken dosya sayısını artırmasını engelleyin.",
   "Disallow_inconsistently_cased_references_to_the_same_file_6078": "Aynı dosyaya yönelik tutarsız büyük/küçük harflere sahip başvurulara izin verme.",
   "Do_not_add_triple_slash_references_or_imported_modules_to_the_list_of_compiled_files_6159": "Derlenen dosya listesine üç eğik çizgi başvuruları veya içeri aktarılan modüller eklemeyin.",
   "Do_not_emit_comments_to_output_6009": "Çıktıya ait açıklamaları gösterme.",
@@ -483,31 +557,48 @@
   "Duplicate_identifier_0_2300": "Yinelenen tanımlayıcı: '{0}'.",
   "Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module_2441": "Yinelenen tanımlayıcı: '{0}'. Derleyici, bir modülün üst düzey kapsamındaki '{1}' adını ayırır.",
   "Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module_containing_async_func_2529": "'{0}' tanımlayıcısı yineleniyor. Derleyici, zaman uyumsuz işlevler içeren bir modülün en üst düzey kapsamında '{1}' adını ayırıyor.",
+  "Duplicate_identifier_0_Compiler_reserves_name_1_when_emitting_super_references_in_static_initializer_2818": "'{0}' tanımlayıcısı yineleniyor. Derleyici, statik başlatıcılarda 'super' başvurularını yayımlarken '{1}' adını ayırır.",
   "Duplicate_identifier_0_Compiler_uses_declaration_1_to_support_async_functions_2520": "Yinelenen tanımlayıcı: '{0}'. Derleyici, zaman uyumsuz işlevleri desteklemek için '{1}' bildirimini kullanır.",
+  "Duplicate_identifier_0_Static_and_instance_elements_cannot_share_the_same_private_name_2804": "Yinelenen tanımlayıcı: '{0}'. Statik öğeler ve örnek öğeleri aynı özel adı paylaşamaz.",
   "Duplicate_identifier_arguments_Compiler_uses_arguments_to_initialize_rest_parameters_2396": "Yinelenen tanımlayıcı: 'arguments'. Derleyici, rest parametrelerini başlatmak için 'arguments' tanımlayıcısını kullanır.",
   "Duplicate_identifier_newTarget_Compiler_uses_variable_declaration_newTarget_to_capture_new_target_me_2543": "Yinelenen '_newTarget' tanımlayıcısı. Derleyicide, '_newTarget' değişken bildirimi 'new.target' meta-özellik başvurusu yakalamak için kullanılıyor.",
   "Duplicate_identifier_super_Compiler_uses_super_to_capture_base_class_reference_2401": "Yinelenen tanımlayıcı: '_super'. Derleyici, temel sınıf başvurusunu yakalamak için '_super' tanımlayıcısını kullanır.",
   "Duplicate_identifier_this_Compiler_uses_variable_declaration_this_to_capture_this_reference_2399": "Yinelenen tanımlayıcı: '_this'. Derleyici, 'this' başvurusunu yakalamak için '_this' değişken bildirimini kullanır.",
+  "Duplicate_index_signature_for_type_0_2374": "'{0}' türü için yinelenen dizin imzası var.",
   "Duplicate_label_0_1114": "'{0}' etiketi yineleniyor.",
-  "Duplicate_number_index_signature_2375": "Dizin imzasında yinelenen numara.",
   "Duplicate_property_0_2718": "'{0}' özelliğini yineleyin.",
-  "Duplicate_string_index_signature_2374": "Dizin imzasında yinelenen dize.",
   "Dynamic_import_cannot_have_type_arguments_1326": "Dinamik içeri aktarma, tür bağımsız değişkenleri içeremez.",
   "Dynamic_import_must_have_one_specifier_as_an_argument_1324": "Dinamik içeri aktarma, bağımsız değişken olarak bir tanımlayıcı içermelidir.",
   "Dynamic_import_s_specifier_must_be_of_type_string_but_here_has_type_0_7036": "Dinamik içeri aktarmanın tanımlayıcısı 'string' türünde olmalıdır, ancak buradaki tür: '{0}'.",
   "Dynamic_imports_are_only_supported_when_the_module_flag_is_set_to_es2020_esnext_commonjs_amd_system__1323": "Dinamik içeri aktarmalar yalnızca '--module' bayrağı 'es2020', 'esnext', 'commonjs', 'amd', 'system' veya 'umd' olarak ayarlandığında desteklenir.",
   "Each_member_of_the_union_type_0_has_construct_signatures_but_none_of_those_signatures_are_compatible_2762": "'{0}' birleşim türünün her bir üyesi yapı imzalarına sahip ancak bu imzaların hiçbiri birbiriyle uyumlu değil.",
   "Each_member_of_the_union_type_0_has_signatures_but_none_of_those_signatures_are_compatible_with_each_2758": "'{0}' birleşim türünün her bir üyesi imzalara sahip ancak bu imzaların hiçbiri birbiriyle uyumlu değil.",
-  "Element_at_index_0_is_variadic_in_one_type_but_not_in_the_other_2622": "{0} dizinindeki öğe, bir tür içinde değişken sayıda bağımsız değişken içeriyor ancak diğerinde içermiyor.",
+  "Editor_Support_6249": "Düzenleyici Desteği",
   "Element_implicitly_has_an_any_type_because_expression_of_type_0_can_t_be_used_to_index_type_1_7053": "'{0}' türündeki ifade '{1}' türünün dizinini oluşturmak için kullanılamadığından öğe, örtük olarak 'any' türüne sahip.",
   "Element_implicitly_has_an_any_type_because_index_expression_is_not_of_type_number_7015": "Dizin ifadesi 'number' türünde olmadığından, öğe örtük olarak 'any' türü içeriyor.",
   "Element_implicitly_has_an_any_type_because_type_0_has_no_index_signature_7017": "'{0}' türünün dizin imzası olmadığından öğe dolaylı olarak 'any' türüne sahip.",
   "Element_implicitly_has_an_any_type_because_type_0_has_no_index_signature_Did_you_mean_to_call_1_7052": "'{0}' türünün dizin imzası olmadığından öğe, örtük olarak 'any' türüne sahip. '{1}' türünü mü çağırmak istediniz?",
-  "Emit_a_UTF_8_Byte_Order_Mark_BOM_in_the_beginning_of_output_files_6164": "Çıkış dosyalarının başında bir UTF-8 Bayt Sırası İşareti (BOM) gösterin.",
+  "Emit_6246": "Yayımla",
+  "Emit_ECMAScript_standard_compliant_class_fields_6712": "ECMAScript-standard-compliant sınıf alanlarını yayın.",
+  "Emit_a_UTF_8_Byte_Order_Mark_BOM_in_the_beginning_of_output_files_6622": "Çıkış dosyalarının başında bir UTF-8 Bayt Sırası İşareti (BOM) gösterin.",
   "Emit_a_single_file_with_source_maps_instead_of_having_a_separate_file_6151": "Ayrı bir dosya oluşturmak yerine, kaynak eşlemeleri içeren tek bir dosya gösterin.",
+  "Emit_a_v8_CPU_profile_of_the_compiler_run_for_debugging_6638": "Hata ayıklama için derleyici çalıştırmasının bir v8 CPU profilini yayın.",
+  "Emit_additional_JavaScript_to_ease_support_for_importing_CommonJS_modules_This_enables_allowSyntheti_6626": "CommonJS modüllerini içeri aktarmak için desteğe kolaylık sağlamak üzere ek JavaScript yayın. Bu, tür uyumluluğu için 'allowSyntheticDefaultImports' öğesini etkinleştirir.",
   "Emit_class_fields_with_Define_instead_of_Set_6222": "Sınıf alanlarını Set yerine Define ile gösterin.",
+  "Emit_design_type_metadata_for_decorated_declarations_in_source_files_6624": "Kaynak dosyalarındaki donatılmış bildirimler için design-type meta verilerini yayın.",
+  "Emit_more_compliant_but_verbose_and_less_performant_JavaScript_for_iteration_6621": "Yineleme için daha uyumlu, ancak ayrıntılı ve daha düşük performanslı JavaScript yayın.",
   "Emit_the_source_alongside_the_sourcemaps_within_a_single_file_requires_inlineSourceMap_or_sourceMap__6152": "Kaynağı, kaynak eşlemeleri ile birlikte tek bir dosya içinde gösterin; '--inlineSourceMap' veya '--sourceMap' öğesinin ayarlanmasını gerektirir.",
   "Enable_all_strict_type_checking_options_6180": "Tüm katı tür denetleme seçeneklerini etkinleştirin.",
+  "Enable_color_and_formatting_in_output_to_make_compiler_errors_easier_to_read_6685": "Derleyici hatalarının okunmasını kolaylaştırmak için çıkışta renk ve biçimlendirme özelliğini etkinleştir",
+  "Enable_constraints_that_allow_a_TypeScript_project_to_be_used_with_project_references_6611": "Bir TypeScript projesinin proje başvurularıyla birlikte kullanılmasına olanak sağlayan kısıtlamaları etkinleştirin.",
+  "Enable_error_reporting_for_codepaths_that_do_not_explicitly_return_in_a_function_6667": "Açıkça bir işlev döndürmeyen kod yolları için hata raporlamayı etkinleştirin.",
+  "Enable_error_reporting_for_expressions_and_declarations_with_an_implied_any_type_6665": "Örtük `any` türüne sahip ifade ve bildirimlerde hata raporlamayı etkinleştirin.",
+  "Enable_error_reporting_for_fallthrough_cases_in_switch_statements_6664": "Switch deyimlerinde sonraki ifadelere geçiş ile ilgili hataların raporlanmasını etkinleştirin.",
+  "Enable_error_reporting_in_type_checked_JavaScript_files_6609": "Tür denetimli JavaScript dosyalarında hata raporlamayı etkinleştirin.",
+  "Enable_error_reporting_when_a_local_variables_aren_t_read_6675": "Yerel değişkenler okunmadığında hata raporlamayı etkinleştirin.",
+  "Enable_error_reporting_when_this_is_given_the_type_any_6668": "`this` için `any` türü verildiğinde hata bildirimini etkinleştirin.",
+  "Enable_experimental_support_for_TC39_stage_2_draft_decorators_6630": "TC39 aşama 2 taslak dekoratörleri için deneysel desteği etkinleştirin.",
+  "Enable_importing_json_files_6689": ".json dosyalarını içeri aktarmayı etkinleştir",
   "Enable_incremental_compilation_6378": "Artımlı derlemeyi etkinleştir",
   "Enable_project_compilation_6302": "Proje derlemeyi etkinleştir",
   "Enable_strict_bind_call_and_apply_methods_on_functions_6214": "İşlevlerde katı 'bind', 'call' ve 'apply' metotlarını etkinleştirin.",
@@ -517,11 +608,20 @@
   "Enable_the_experimentalDecorators_option_in_your_configuration_file_95074": "Yapılandırma dosyanızda 'experimentalDecorators' seçeneğini etkinleştirin",
   "Enable_the_jsx_flag_in_your_configuration_file_95088": "Yapılandırma dosyanızda '--jsx' bayrağını etkinleştirin",
   "Enable_tracing_of_the_name_resolution_process_6085": "Ad çözümleme işlemini izlemeyi etkinleştir.",
-  "Enable_verbose_logging_6366": "Ayrıntılı günlüğe yazmayı etkinleştir",
+  "Enable_verbose_logging_6713": "Ayrıntılı günlüğe yazmayı etkinleştir",
   "Enables_emit_interoperability_between_CommonJS_and_ES_Modules_via_creation_of_namespace_objects_for__7037": "Tüm içeri aktarma işlemleri için ad alanı nesnelerinin oluşturulması aracılığıyla CommonJS ile ES Modülleri arasında yayımlama birlikte çalışabilirliğine imkan tanır. Şu anlama gelir: 'allowSyntheticDefaultImports'.",
   "Enables_experimental_support_for_ES7_async_functions_6068": "Zaman uyumsuz ES7 işlevleri için deneysel desteği etkinleştirir.",
   "Enables_experimental_support_for_ES7_decorators_6065": "ES7 dekoratörleri için deneysel desteği etkinleştirir.",
   "Enables_experimental_support_for_emitting_type_metadata_for_decorators_6066": "Dekoratörlere tür meta verisi gönderme için deneysel desteği etkinleştirir.",
+  "Enforces_using_indexed_accessors_for_keys_declared_using_an_indexed_type_6671": "Dizini oluşturulmuş bir tür kullanılarak bildirilen anahtarlar için dizini oluşturulmuş erişimcileri kullanmayı zorlar",
+  "Ensure_overriding_members_in_derived_classes_are_marked_with_an_override_modifier_6666": "Türetilmiş sınıflarda geçersiz kılan üyelerin bir geçersiz kılma değiştiricisiyle işaretlendiğinden emin olun.",
+  "Ensure_that_casing_is_correct_in_imports_6637": "İçeri aktarmalarda büyük harfe çevirmenin doğru olduğundan emin olun.",
+  "Ensure_that_each_file_can_be_safely_transpiled_without_relying_on_other_imports_6645": "Her dosyanın diğer içeri aktarmalara bağlı olmadan güvenli bir şekilde kaynaktan kaynağa derlenebildiğinden emin olun.",
+  "Ensure_use_strict_is_always_emitted_6605": "'use strict' öğesinin her zaman yayıldığından emin olun.",
+  "Entry_point_for_implicit_type_library_0_1420": "'{0}' örtük tür kitaplığı için giriş noktası",
+  "Entry_point_for_implicit_type_library_0_with_packageId_1_1421": "'{1}' paket kimliğine sahip '{0}' örtük tür kitaplığı için giriş noktası",
+  "Entry_point_of_type_library_0_specified_in_compilerOptions_1417": "compilerOptions içinde belirtilen '{0}' tür kitaplığının giriş noktası",
+  "Entry_point_of_type_library_0_specified_in_compilerOptions_with_packageId_1_1418": "'{1}' paket kimliğine sahip compilerOptions içinde belirtilen '{0}' tür kitaplığının giriş noktası",
   "Enum_0_used_before_its_declaration_2450": "'{0}' sabit listesi, bildiriminden önce kullanıldı.",
   "Enum_declarations_can_only_merge_with_namespace_or_other_enum_declarations_2567": "Sabit listesi bildirimleri yalnızca ad alanı veya diğer sabit listesi bildirimleri ile birleştirilebilir.",
   "Enum_declarations_must_all_be_const_or_non_const_2473": "Sabit listesi bildirimlerinin tümü const veya const olmayan değerler olmalıdır.",
@@ -535,15 +635,13 @@
   "Expected_0_1_type_arguments_provide_these_with_an_extends_tag_8027": "{0}-{1} tür bağımsız değişkeni bekleniyordu; bunları bir '@extends' etiketiyle sağlayın.",
   "Expected_0_arguments_but_got_1_2554": "{0} bağımsız değişken bekleniyordu ancak {1} alındı.",
   "Expected_0_arguments_but_got_1_Did_you_forget_to_include_void_in_your_type_argument_to_Promise_2794": "{0} bağımsız değişken bekleniyordu ancak {1} bağımsız değişken alındı. Tür bağımsız değişkeninizdeki 'void' operatörünü 'Promise'e eklemeyi mi unuttunuz?",
-  "Expected_0_arguments_but_got_1_or_more_2556": "{0} bağımsız değişken bekleniyordu ancak {1} veya daha fazla bağımsız değişken alındı.",
   "Expected_0_type_arguments_but_got_1_2558": "{0} tür bağımsız değişkeni bekleniyordu ancak {1} alındı.",
   "Expected_0_type_arguments_provide_these_with_an_extends_tag_8026": "{0} tür bağımsız değişkeni bekleniyordu; bunları bir '@extends' etiketiyle sağlayın.",
   "Expected_at_least_0_arguments_but_got_1_2555": "En az {0} bağımsız değişken bekleniyordu ancak {1} alındı.",
-  "Expected_at_least_0_arguments_but_got_1_or_more_2557": "En az {0} bağımsız değişken bekleniyordu ancak {1} veya daha fazla bağımsız değişken alındı.",
   "Expected_corresponding_JSX_closing_tag_for_0_17002": "'{0}' için ilgili JSX kapanış etiketi bekleniyor.",
   "Expected_corresponding_closing_tag_for_JSX_fragment_17015": "JSX parçasına karşılık gelen kapanış etiketi bekleniyordu.",
+  "Expected_for_property_initializer_1442": "Özellik başlatıcısı için '=' bekleniyor.",
   "Expected_type_of_0_field_in_package_json_to_be_1_got_2_6105": "'package.json' dosyasındaki '{0}' alanının '{1}' türünde olması bekleniyordu ancak '{2}' alındı.",
-  "Experimental_Options_6177": "Deneysel Seçenekler",
   "Experimental_support_for_decorators_is_a_feature_that_is_subject_to_change_in_a_future_release_Set_t_1219": "Dekoratörler için sunulan deneysel destek özelliği, sonraki sürümlerde değiştirilebilir. Bu uyarıyı kaldırmak için 'tsconfig' veya 'jsconfig' dosyanızdaki 'experimentalDecorators' seçeneğini ayarlayın.",
   "Explicitly_specified_module_resolution_kind_Colon_0_6087": "Açık olarak belirtilen modül çözümleme türü: '{0}'.",
   "Exponentiation_cannot_be_performed_on_bigint_values_unless_the_target_option_is_set_to_es2016_or_lat_2791": "'target' seçeneği 'es2016' veya üzeri olarak belirlenmedikçe 'bigint' değerlerinde üs olarak gösterme yapılamaz.",
@@ -554,12 +652,14 @@
   "Exported_external_package_typings_file_0_is_not_a_module_Please_contact_the_package_author_to_update_2656": "Dışarı aktarılan dış paket yazı dosyası '{0}', bir modül değil. Paket tanımını güncelleştirmek için lütfen paket yazarı ile iletişime geçin.",
   "Exported_external_package_typings_file_cannot_contain_tripleslash_references_Please_contact_the_pack_2654": "Dışarı aktarılan dış paket yazıları, üç eğik çizgili başvurular içeremez. Paket tanımını güncelleştirmek için lütfen paket yazarı ile iletişime geçin.",
   "Exported_type_alias_0_has_or_is_using_private_name_1_4081": "Dışarı aktarılan '{0}' tür diğer adı, '{1}' özel adına sahip veya bu adı kullanıyor.",
+  "Exported_type_alias_0_has_or_is_using_private_name_1_from_module_2_4084": "Dışarı aktarılan türün diğer adı olan '{0}' ifadesi, {2} modülündeki '{1}' özel adına sahip veya bu özel adı kullanıyor.",
   "Exported_variable_0_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4023": "Dışarı aktarılan '{0}' değişkeni, {2} dış modülündeki '{1}' adına sahip veya bu adı kullanıyor, ancak adlandırılamıyor.",
   "Exported_variable_0_has_or_is_using_name_1_from_private_module_2_4024": "Dışarı aktarılan '{0}' değişkeni, '{2}' özel modüldeki '{1}' adına sahip veya bu adı kullanıyor.",
   "Exported_variable_0_has_or_is_using_private_name_1_4025": "Dışarı aktarılan '{0}' değişkeni, '{1}' özel adına sahip veya bu adı kullanıyor.",
   "Exports_and_export_assignments_are_not_permitted_in_module_augmentations_2666": "Modül genişletmelerinde dışarı aktarmalara ve dışarı aktarma atamalarına izin verilmez.",
   "Expression_expected_1109": "İfade bekleniyor.",
   "Expression_or_comma_expected_1137": "İfade veya virgül bekleniyor.",
+  "Expression_produces_a_tuple_type_that_is_too_large_to_represent_2800": "İfade, temsil edilemeyecek kadar büyük olan bir demet türü oluşturuyor.",
   "Expression_produces_a_union_type_that_is_too_complex_to_represent_2590": "İfade, temsili çok karmaşık olan bir birleşim türü oluşturuyor.",
   "Expression_resolves_to_super_that_compiler_uses_to_capture_base_class_reference_2402": "İfade, derleyicinin temel sınıf başvurusunu yakalamak için kullandığı '_super' öğesi olarak çözümleniyor.",
   "Expression_resolves_to_variable_declaration_0_that_compiler_uses_to_support_async_functions_2521": "İfade, derleyicinin zaman uyumsuz işlevleri desteklemek için kullandığı '{0}' değişken bildirimi olarak çözümleniyor.",
@@ -579,7 +679,9 @@
   "Failed_to_parse_file_0_Colon_1_5014": "'{0}' dosyası ayrıştırılamadı: {1}.",
   "Fallthrough_case_in_switch_7029": "switch deyiminde sonraki ifadeye geçiş.",
   "File_0_does_not_exist_6096": "'{0}' adlı dosya yok.",
+  "File_0_does_not_exist_according_to_earlier_cached_lookups_6240": "'{0}' dosyası, önceden önbelleğe alınan aramalara göre mevcut değil.",
   "File_0_exist_use_it_as_a_name_resolution_result_6097": "'{0}' adlı dosya yok; bunu bir çözümleme sonucu olarak kullanın.",
+  "File_0_exists_according_to_earlier_cached_lookups_6239": "'{0}' dosyası, önceden önbelleğe alınan aramalara göre mevcut.",
   "File_0_has_an_unsupported_extension_The_only_supported_extensions_are_1_6054": "'{0}' dosyası desteklenmeyen uzantıya sahip. Yalnızca şu uzantılar desteklenir: {1}.",
   "File_0_has_an_unsupported_extension_so_skipping_it_6081": "'{0}' dosyasının desteklenmeyen bir uzantısı olduğundan dosya atlanıyor.",
   "File_0_is_a_JavaScript_file_Did_you_mean_to_enable_the_allowJs_option_6504": "'{0}' dosyası bir JavaScript dosyasıdır. 'allowJs' seçeneğini mi etkinleştirmek istediniz?",
@@ -587,16 +689,32 @@
   "File_0_is_not_listed_within_the_file_list_of_project_1_Projects_must_list_all_files_or_use_an_includ_6307": "'{0}' dosyası, '{1}' projesinin dosya listesinde değil. Projelerin tüm dosyaları listelemesi veya bir 'include' deseni kullanması gerekir.",
   "File_0_is_not_under_rootDir_1_rootDir_is_expected_to_contain_all_source_files_6059": "'{0}' dosyası, 'rootDir' '{1}' dizininde değil. 'rootDir' dizininin tüm kaynak dosyalarını içermesi bekleniyor.",
   "File_0_not_found_6053": "'{0}' dosyası bulunamadı.",
+  "File_Management_6245": "Dosya Yönetimi",
   "File_change_detected_Starting_incremental_compilation_6032": "Dosya değişikliği algılandı. Artımlı derleme başlatılıyor...",
   "File_is_a_CommonJS_module_it_may_be_converted_to_an_ES6_module_80001": "Bir CommonJS modülü olan dosya, ES6 modülüne dönüştürülebilir.",
+  "File_is_default_library_for_target_specified_here_1426": "Burada dosya, belirtilen hedef için varsayılan kitaplıktır.",
+  "File_is_entry_point_of_type_library_specified_here_1419": "Burada dosya, belirtilen tür kitaplığının giriş noktasıdır.",
+  "File_is_included_via_import_here_1399": "Burada dosya, içeri aktarma aracılığıyla eklenmiştir.",
+  "File_is_included_via_library_reference_here_1406": "Burada dosya, kitaplık başvurusu aracılığıyla eklenmiştir.",
+  "File_is_included_via_reference_here_1401": "Burada dosya, başvuru aracılığıyla eklenmiştir.",
+  "File_is_included_via_type_library_reference_here_1404": "Burada dosya, tür kitaplığı başvurusu aracılığıyla eklenmiştir.",
+  "File_is_library_specified_here_1423": "Burada dosya, belirtilen kitaplıktır.",
+  "File_is_matched_by_files_list_specified_here_1410": "Burada dosya, belirtilen 'dosyalar' listesine göre eşleştirilir.",
+  "File_is_matched_by_include_pattern_specified_here_1408": "Burada dosya, belirtilen ekleme desenine göre eşleştirilir.",
+  "File_is_output_from_referenced_project_specified_here_1413": "Burada dosya, belirtilmiş başvurulan projenin çıkışıdır.",
+  "File_is_output_of_project_reference_source_0_1428": "Dosya, '{0}' proje başvuru kaynağının çıkışıdır",
+  "File_is_source_from_referenced_project_specified_here_1416": "Burada dosya, belirtilmiş başvurulan projenin kaynağıdır.",
   "File_name_0_differs_from_already_included_file_name_1_only_in_casing_1149": "'{0}' dosya adının, zaten eklenmiş olan '{1}' dosya adından tek farkı, büyük/küçük harf kullanımı.",
   "File_name_0_has_a_1_extension_stripping_it_6132": "'{0}' dosya adında '{1}' uzantısı var; uzantı ayrılıyor.",
+  "File_redirects_to_file_0_1429": "Dosya, '{0}' dosyasına yeniden yönlendiriyor",
   "File_specification_cannot_contain_a_parent_directory_that_appears_after_a_recursive_directory_wildca_5065": "Dosya belirtimi, özyinelemeli dizin joker karakterinden ('**') sonra görünen bir üst dizin ('..') içeremez: '{0}'.",
   "File_specification_cannot_end_in_a_recursive_directory_wildcard_Asterisk_Asterisk_Colon_0_5010": "Dosya belirtimi, özyinelemeli dizin joker karakter ('**') ile bitemez: '{0}'.",
+  "Filters_results_from_the_include_option_6627": "`include` seçeneğinden sonuçları filtreler.",
   "Fix_all_detected_spelling_errors_95026": "Algılanan tüm yazım hatalarını düzelt",
   "Fix_all_expressions_possibly_missing_await_95085": "'await' deyiminin eksik olabileceği tüm ifadeleri düzeltin",
   "Fix_all_implicit_this_errors_95107": "Tüm örtük 'this' hatalarını onar",
   "Fix_all_incorrect_return_type_of_an_async_functions_90037": "Asenkron işlevlerin tüm hatalı dönüş türlerini onar",
+  "For_await_loops_cannot_be_used_inside_a_class_static_block_18038": "'For await' döngüleri bir sınıf statik bloğu içinde kullanılamaz.",
   "Found_0_errors_6217": "{0} hata bulundu.",
   "Found_0_errors_Watching_for_file_changes_6194": "{0} hata bulundu. Dosya değişiklikleri izleniyor.",
   "Found_1_error_6216": "1 hata bulundu.",
@@ -610,11 +728,14 @@
   "Function_implementation_name_must_be_0_2389": "İşlev uygulamasının adı '{0}' olmalıdır.",
   "Function_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_ref_7024": "Dönüş türü ek açıklamasına sahip olmadığından ve doğrudan veya dolaylı olarak dönüş ifadelerinden birinde kendine başvurulduğundan işlev, örtük olarak 'any' türüne sahiptir.",
   "Function_lacks_ending_return_statement_and_return_type_does_not_include_undefined_2366": "İşlevin sonunda return deyimi eksik ve dönüş türü 'undefined' içermiyor.",
+  "Function_not_implemented_95159": "İşlev uygulanmadı.",
   "Function_overload_must_be_static_2387": "İşlev aşırı yüklemesi statik olmalıdır.",
   "Function_overload_must_not_be_static_2388": "İşlev aşırı yüklemesi statik olmamalıdır.",
   "Function_type_notation_must_be_parenthesized_when_used_in_a_union_type_1385": "İşlev türü gösterimi bir birleşim türünde kullanıldığında parantez içine alınmalıdır.",
   "Function_type_notation_must_be_parenthesized_when_used_in_an_intersection_type_1387": "İşlev türü gösterimi bir kesişim türünde kullanıldığında parantez içine alınmalıdır.",
   "Function_type_which_lacks_return_type_annotation_implicitly_has_an_0_return_type_7014": "Dönüş türü ek açıklaması bulunmayan işlev türü, örtük olarak '{0}' dönüş türüne sahip.",
+  "Function_with_bodies_can_only_merge_with_classes_that_are_ambient_2814": "Gövdelere sahip işlev yalnızca çevresel sınıflarla birleştirebilir.",
+  "Generate_d_ts_files_from_TypeScript_and_JavaScript_files_in_your_project_6612": "Projenizdeki TypeScript ve JavaScript dosyalarından .d.ts dosyaları oluşturun.",
   "Generate_get_and_set_accessors_95046": "'get' ve 'set' erişimcilerini oluşturun",
   "Generate_get_and_set_accessors_for_all_overriding_properties_95119": "Tüm geçersiz kılma özellikleri için 'get' ve 'set' erişimcileri oluşturun",
   "Generates_a_CPU_profile_6223": "Bir CPU profili oluşturur.",
@@ -627,13 +748,13 @@
   "Generators_are_only_available_when_targeting_ECMAScript_2015_or_higher_1220": "Oluşturucular yalnızca ECMEAScript 2015 veya üstü hedeflenirken kullanılabilir.",
   "Generic_type_0_requires_1_type_argument_s_2314": "'{0}' genel türü, {1} tür bağımsız değişkenini gerektiriyor.",
   "Generic_type_0_requires_between_1_and_2_type_arguments_2707": "'{0}' genel türü {1} ile {2} arasında bağımsız değişken gerektirir.",
-  "Getter_and_setter_accessors_do_not_agree_in_visibility_2379": "Alıcı ve ayarlayıcı erişimcileri görünürlükte anlaşamıyor.",
   "Global_module_exports_may_only_appear_at_top_level_1316": "Genel modül dışarı aktarmaları yalnızca en üst düzeyde görünebilir.",
   "Global_module_exports_may_only_appear_in_declaration_files_1315": "Genel modül dışarı aktarmaları yalnızca bildirim dosyalarında görünebilir.",
   "Global_module_exports_may_only_appear_in_module_files_1314": "Genel modül dışarı aktarmaları yalnızca modül dosyalarında görünebilir.",
   "Global_type_0_must_be_a_class_or_interface_type_2316": "'{0}' genel türü, bir sınıf veya arabirim türü olmalıdır.",
   "Global_type_0_must_have_1_type_parameter_s_2317": "'{0}' genel türü, {1} türünde parametre içermelidir.",
   "Have_recompiles_in_incremental_and_watch_assume_that_changes_within_a_file_will_only_affect_files_di_6384": "'--incremental' ve '--watch' içinde yeniden derlemelerin olması, bir dosya içindeki değişikliklerin yalnızca doğrudan buna bağımlı olan dosyaları etkileyeceğini varsayar.",
+  "Have_recompiles_in_projects_that_use_incremental_and_watch_mode_assume_that_changes_within_a_file_wi_6606": "`incremental` ve `watch` modunu kullanan projelerde yeniden derlemelerin olması, bir dosya içindeki değişikliklerin yalnızca doğrudan buna bağımlı olan dosyaları etkileyeceğini varsayar.",
   "Hexadecimal_digit_expected_1125": "Onaltılık basamak bekleniyor.",
   "Identifier_expected_0_is_a_reserved_word_at_the_top_level_of_a_module_1262": "Tanımlayıcı bekleniyor. '{0}' modülün en üst düzeyinde ayrılmış bir sözcüktür.",
   "Identifier_expected_0_is_a_reserved_word_in_strict_mode_1212": "Tanımlayıcı bekleniyor. '{0}', katı modda ayrılmış bir sözcüktür.",
@@ -642,8 +763,9 @@
   "Identifier_expected_0_is_a_reserved_word_that_cannot_be_used_here_1359": "Tanımlayıcı bekleniyor. '{0}', burada kullanılamayan ayrılmış bir sözcüktür.",
   "Identifier_expected_1003": "Tanımlayıcı bekleniyor.",
   "Identifier_expected_esModule_is_reserved_as_an_exported_marker_when_transforming_ECMAScript_modules_1216": "Tanımlayıcı bekleniyor. '__esModule', ECMAScript modülleri dönüştürülürken, dışarı aktarılan bir işaretçi olarak ayrılmış.",
-  "If_the_0_package_actually_exposes_this_module_consider_sending_a_pull_request_to_amend_https_Colon_S_7040": "'{0}' paketi bu modülü gerçekten kullanıma sunarsa, 'https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/{1}` öğesini düzeltmek için bir çekme isteği göndermeyi deneyin",
+  "If_the_0_package_actually_exposes_this_module_consider_sending_a_pull_request_to_amend_https_Colon_S_7040": "'{0}' paketi bu modülü gerçekten kullanıma sunarsa, 'https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/{1}' öğesini düzeltmek için bir çekme isteği göndermeyi deneyin",
   "Ignore_this_error_message_90019": "Bu hata iletisini yoksay",
+  "Ignoring_tsconfig_json_compiles_the_specified_files_with_default_compiler_options_6924": "tsconfig.json yok sayılıyor, belirtilen dosyaları varsayılan derleyici seçenekleriyle derler",
   "Implement_all_inherited_abstract_classes_95040": "Devralınan tüm soyut sınıfları uygula",
   "Implement_all_unimplemented_interfaces_95032": "Uygulanmayan tüm arabirimleri uygula",
   "Implement_inherited_abstract_class_90007": "Devralınan soyut sınıfı uygula",
@@ -660,14 +782,23 @@
   "Import_may_be_converted_to_a_default_import_80003": "İçeri aktarma varsayılan bir içeri aktarmaya dönüştürülebilir.",
   "Import_name_cannot_be_0_2438": "İçeri aktarma adı '{0}' olamaz.",
   "Import_or_export_declaration_in_an_ambient_module_declaration_cannot_reference_module_through_relati_2439": "Çevresel modül bildirimindeki içeri veya dışarı aktarma bildirimi, göreli modül adı aracılığıyla modüle başvuramaz.",
+  "Imported_via_0_from_file_1_1393": "'{1}' dosyasından {0} aracılığıyla içeri aktarıldı",
+  "Imported_via_0_from_file_1_to_import_importHelpers_as_specified_in_compilerOptions_1395": "compilerOptions içinde belirtildiği gibi 'importHelpers' öğesini içeri aktarmak için '{1}' dosyasından {0} aracılığıyla içeri aktarıldı",
+  "Imported_via_0_from_file_1_to_import_jsx_and_jsxs_factory_functions_1397": "'jsx' ve 'jsxs' fabrika işlevlerini içeri aktarmak için '{1}' dosyasından {0} aracılığıyla içeri aktarıldı",
+  "Imported_via_0_from_file_1_with_packageId_2_1394": "'{2}' paket kimliğine sahip '{1}' dosyasından {0} aracılığıyla içeri aktarıldı",
+  "Imported_via_0_from_file_1_with_packageId_2_to_import_importHelpers_as_specified_in_compilerOptions_1396": "compilerOptions içinde belirtildiği gibi 'importHelpers' öğesini içeri aktarmak için '{2}' paket kimliğine sahip '{1}' dosyasından {0} aracılığıyla içeri aktarıldı",
+  "Imported_via_0_from_file_1_with_packageId_2_to_import_jsx_and_jsxs_factory_functions_1398": "'jsx' ve 'jsxs' fabrika işlevlerini içeri aktarmak için '{2}' paket kimliğine sahip '{1}' dosyasından {0} aracılığıyla içeri aktarıldı",
   "Imports_are_not_permitted_in_module_augmentations_Consider_moving_them_to_the_enclosing_external_mod_2667": "Modül genişletmelerinde içeri aktarmalara izin verilmez. Bunları, kapsayan dış modüle taşımanız önerilir.",
   "In_ambient_enum_declarations_member_initializer_must_be_constant_expression_1066": "Çevresel sabit listesi bildirimlerinde, üye başlatıcısı sabit ifade olmalıdır.",
   "In_an_enum_with_multiple_declarations_only_one_declaration_can_omit_an_initializer_for_its_first_enu_2432": "Birden fazla bildirime sahip sabit listesinde yalnızca bir bildirim ilk sabit listesi öğesine ait başlatıcıyı atlayabilir.",
+  "Include_a_list_of_files_This_does_not_support_glob_patterns_as_opposed_to_include_6635": "Dosyaların listesini ekleyin. Bu, `include` seçeneğinden farklı olarak glob desenlerini desteklemez.",
   "Include_modules_imported_with_json_extension_6197": "'.json' uzantısıyla içeri aktarılan modülleri dahil et",
-  "Include_undefined_in_index_signature_results_6800": "Dizin imzası sonuçlarına 'undefined' öğesini ekle",
+  "Include_source_code_in_the_sourcemaps_inside_the_emitted_JavaScript_6644": "Yayılan JavaScript içindeki kaynak eşlemelerine kaynak kodunu ekleyin.",
+  "Include_sourcemap_files_inside_the_emitted_JavaScript_6643": "Yayılan JavaScript içine kaynak eşleme dosyalarını ekleyin.",
+  "Include_undefined_in_index_signature_results_6716": "Dizin imzası sonuçlarına 'undefined' öğesini ekle",
+  "Including_watch_w_will_start_watching_the_current_project_for_the_file_changes_Once_set_you_can_conf_6914": "--watch dahil olmak üzere -w, dosya değişiklikleri için geçerli projeyi izlemeye başlayacak. Bir kez ayarlandıktan sonra, izleme modunu şununla yapılandırabilirsiniz:",
+  "Index_signature_for_type_0_is_missing_in_type_1_2329": "'{0}' türündeki dizin imzası '{1}' türünde yok.",
   "Index_signature_in_type_0_only_permits_reading_2542": "'{0}' türündeki dizin imzası yalnızca okumaya izin veriyor.",
-  "Index_signature_is_missing_in_type_0_2329": "'{0}' türündeki dizin imzası yok.",
-  "Index_signatures_are_incompatible_2330": "Dizin imzaları uyumsuz.",
   "Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local_2395": "'{0}' birleştirilmiş bildirimindeki bildirimlerin tümü dışarı aktarılmış veya yerel olmalıdır.",
   "Infer_all_types_from_usage_95023": "Tüm türleri kullanımdan çıkar",
   "Infer_function_return_type_95148": "İşlev dönüş türünü çıkarsa",
@@ -676,6 +807,7 @@
   "Infer_type_of_0_from_usage_95011": "'{0}' türü için kullanımdan çıkarım yap",
   "Initialize_property_0_in_the_constructor_90020": "Oluşturucu içinde '{0}' özelliğini başlat",
   "Initialize_static_property_0_90021": "'{0}' statik özelliğini başlat",
+  "Initializer_for_property_0_2811": "'{0}' özelliği için başlatıcı",
   "Initializer_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor_2301": "'{0}' örnek üyesi değişkeninin başlatıcısı, oluşturucuda bildirilen '{1}' tanımlayıcısına başvuramaz.",
   "Initializer_provides_no_value_for_this_binding_element_and_the_binding_element_has_no_default_value_2525": "Başlatıcı bu bağlama öğesi için bir değer sağlamıyor ve bağlama öğesi varsayılan değere sahip değil.",
   "Initializers_are_not_allowed_in_ambient_contexts_1039": "Çevresel bağlamlarda başlatıcılara izin verilmez.",
@@ -686,12 +818,16 @@
   "Interface_0_cannot_simultaneously_extend_types_1_and_2_2320": "'{0}' arabirimi, aynı anda '{1}' ve '{2}' türlerini genişletemez.",
   "Interface_0_incorrectly_extends_interface_1_2430": "'{0}' arabirimi, '{1}' arabirimini yanlış genişletiyor.",
   "Interface_declaration_cannot_have_implements_clause_1176": "Arabirim bildirimi, 'implements' yan tümcesine sahip olamaz.",
+  "Interface_must_be_given_a_name_1438": "Arabirime bir ad verilmesi gerekir.",
   "Interface_name_cannot_be_0_2427": "Arabirim adı '{0}' olamaz.",
+  "Interop_Constraints_6252": "Birlikte Çalışma Kısıtlamaları",
+  "Interpret_optional_property_types_as_written_rather_than_adding_undefined_6243": "'undefined' eklemek yerine isteğe bağlı özellik türlerini yazıldıkları gibi yorumlayın.",
   "Invalid_character_1127": "Geçersiz karakter.",
   "Invalid_module_name_in_augmentation_Module_0_resolves_to_an_untyped_module_at_1_which_cannot_be_augm_2665": "Genişletmedeki modül adı geçersiz. '{0}' modülü, '{1}' konumundaki türü belirsiz ve genişletilemeyen bir modüle çözümleniyor.",
   "Invalid_module_name_in_augmentation_module_0_cannot_be_found_2664": "Genişletmedeki modül adı geçersiz; '{0}' adlı modül bulunamıyor.",
   "Invalid_reference_directive_syntax_1084": "Geçersiz 'reference' yönergesi söz dizimi.",
   "Invalid_use_of_0_Class_definitions_are_automatically_in_strict_mode_1210": "Geçersiz '{0}' kullanımı. Sınıf tanımları otomatik olarak katı moddadır.",
+  "Invalid_use_of_0_It_cannot_be_used_inside_a_class_static_block_18039": "Geçersiz '{0}' kullanımı. Bu ifade bir sınıf statik bloğu içinde kullanılamaz.",
   "Invalid_use_of_0_Modules_are_automatically_in_strict_mode_1215": "Geçersiz '{0}' kullanımı. Modüller otomatik olarak katı moddadır.",
   "Invalid_use_of_0_in_strict_mode_1100": "Katı modda geçersiz '{0}' kullanımı.",
   "Invalid_value_for_jsxFactory_0_is_not_a_valid_identifier_or_qualified_name_5067": "'jsxFactory' değeri geçersiz. '{0}' geçerli bir tanımlayıcı veya tam ad değil.",
@@ -723,13 +859,18 @@
   "JSX_expressions_may_not_use_the_comma_operator_Did_you_mean_to_write_an_array_18007": "JSX ifadeleri virgül işlecini kullanamaz. Bir dizi mi yazmak istediniz?",
   "JSX_expressions_must_have_one_parent_element_2657": "JSX ifadelerinin bir üst öğesi olmalıdır.",
   "JSX_fragment_has_no_corresponding_closing_tag_17014": "JSX parçasına karşılık gelen bir kapatma etiketi yok.",
+  "JSX_property_access_expressions_cannot_include_JSX_namespace_names_2633": "JSX özellik erişimi ifadeleri JSX ad alanı adlarını içeremez",
   "JSX_spread_child_must_be_an_array_type_2609": "JSX yayılma alt öğesi, bir dizi türü olmalıdır.",
+  "JavaScript_Support_6247": "JavaScript Desteği",
   "Jump_target_cannot_cross_function_boundary_1107": "Atlama hedefi işlev sınırını geçemez.",
   "KIND_6034": "TÜR",
   "Keywords_cannot_contain_escape_characters_1260": "Anahtar sözcükler kaçış karakterleri içeremez.",
   "LOCATION_6037": "KONUM",
+  "Language_and_Environment_6254": "Dil ve Ortam",
   "Language_service_is_disabled_9004": "Dil hizmeti devre dışı.",
   "Left_side_of_comma_operator_is_unused_and_has_no_side_effects_2695": "Virgül işlecinin sol tarafı kullanılmıyor ve herhangi bir yan etkisi yok.",
+  "Library_0_specified_in_compilerOptions_1422": "compilerOptions içinde belirtilen '{0}' kitaplığı",
+  "Library_referenced_via_0_from_file_1_1405": "'{1}' dosyasından '{0}' aracılığıyla başvurulan kitaplık",
   "Line_break_not_permitted_here_1142": "Burada satır sonuna izin verilmez.",
   "Line_terminator_not_permitted_before_arrow_1200": "Oktan önce satır sonlandırıcısına izin verilmez.",
   "List_of_folders_to_include_type_definitions_from_6161": "Eklenecek tür tanımlarının alınacağı klasörlerin listesi.",
@@ -739,11 +880,14 @@
   "Loading_module_0_from_node_modules_folder_target_file_type_1_6098": "'node_modules' klasöründen '{0}' modülü yükleniyor, hedef dosya türü '{1}'.",
   "Loading_module_as_file_Slash_folder_candidate_module_location_0_target_file_type_1_6095": "Modül, dosya/klasör olarak yükleniyor; aday modül konumu '{0}'; hedef dosya türü '{1}'.",
   "Locale_must_be_of_the_form_language_or_language_territory_For_example_0_or_1_6048": "Yerel ayar, <language> veya <language>-<territory> biçiminde olmalıdır. Örneğin, '{0}' veya '{1}'.",
+  "Log_paths_used_during_the_moduleResolution_process_6706": "`moduleResolution` işlemi sırasında kullanılan yolları günlüğe kaydedin.",
   "Longest_matching_prefix_for_0_is_1_6108": "'{0}' için eşleşen en uzun ön ek: '{1}'.",
   "Looking_up_in_node_modules_folder_initial_location_0_6125": "'node_modules' klasöründe aranıyor; ilk konum: '{0}'.",
   "Make_all_super_calls_the_first_statement_in_their_constructor_95036": "Tüm 'super()' çağrılarını kendi oluşturucularının ilk deyimi yap",
+  "Make_keyof_only_return_strings_instead_of_string_numbers_or_symbols_Legacy_option_6650": "Dize, sayı veya simge yerine yalnızca dönüş dizelerinin anahtarını oluşturun. Eski seçenek.",
   "Make_super_call_the_first_statement_in_the_constructor_90002": "Oluşturucudaki ilk deyime 'super()' tarafından çağrı yapılmasını sağla",
   "Mapped_object_type_implicitly_has_an_any_template_type_7039": "Eşleştirilmiş nesne türü örtük olarak 'any' şablon türüne sahip.",
+  "Matched_by_include_pattern_0_in_1_1407": "'{1}' içindeki '{0}' ekleme desenine göre eşleştirildi",
   "Member_0_implicitly_has_an_1_type_7008": "'{0}' üyesi örtük olarak '{1}' türüne sahip.",
   "Member_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage_7045": "'{0}' üyesi örtük olarak bir '{1}' türüne sahip ancak kullanımdan daha iyi bir tür çıkarsanabilir.",
   "Merge_conflict_marker_encountered_1185": "Birleştirme çakışması işaretçisiyle karşılaşıldı.",
@@ -752,6 +896,7 @@
   "Method_0_cannot_have_an_implementation_because_it_is_marked_abstract_1245": "'{0}' metodu abstract olarak işaretlendiğinden bir uygulamaya sahip olamaz.",
   "Method_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2_4101": "Dışarı aktarılan arabirimin '{0}' metodu, '{2}' özel modülündeki '{1}' adına sahip veya bu adı kullanıyor.",
   "Method_0_of_exported_interface_has_or_is_using_private_name_1_4102": "Dışarı aktarılan arabirimin '{0}' metodu, '{1}' özel adına sahip veya bu adı kullanıyor.",
+  "Method_not_implemented_95158": "Metot uygulanmadı.",
   "Modifiers_cannot_appear_here_1184": "Değiştiriciler burada görüntülenemez.",
   "Module_0_can_only_be_default_imported_using_the_1_flag_1259": "'{0}' modülü yalnızca varsayılan olarak '{1}' bayrağı kullanılarak içeri aktarılabilir",
   "Module_0_declares_1_locally_but_it_is_exported_as_2_2460": "'{0}' modülü '{1}' öğesini yerel olarak bildiriyor ancak '{2}' olarak dışarı aktarıldı.",
@@ -769,13 +914,14 @@
   "Module_0_was_resolved_as_locally_declared_ambient_module_in_file_1_6144": "'{0}' modülü, '{1}' dosyasında yerel olarak bildirilmiş çevresel modül olarak çözümlendi.",
   "Module_0_was_resolved_to_1_but_jsx_is_not_set_6142": "'{0}' modülü '{1}' olarak çözüldü ancak '--jsx' ayarlanmadı.",
   "Module_0_was_resolved_to_1_but_resolveJsonModule_is_not_used_7042": "'{0}' modülü '{1}' olarak çözümlendi ancak '--resolveJsonModule' kullanılmadı.",
-  "Module_Resolution_Options_6174": "Modül Çözümleme Seçenekleri",
+  "Module_declaration_names_may_only_use_or_quoted_strings_1443": "Modül bildirim adları yalnızca ' veya \" tırnak içine alınmış dizeleri kullanabilir.",
   "Module_name_0_matched_pattern_1_6092": "Modül adı: '{0}', eşleşen desen: '{1}'.",
   "Module_name_0_was_not_resolved_6090": "======== '{0}' modül adı çözümlenemedi. ========",
   "Module_name_0_was_successfully_resolved_to_1_6089": "======== '{0}' modül adı '{1}' öğesine başarıyla çözümlendi. ========",
   "Module_name_0_was_successfully_resolved_to_1_with_Package_ID_2_6218": "======== '{0}' modül adı '{2}' Paket Kimliğiyle '{1}' olarak başarıyla çözümlendi. ========",
   "Module_resolution_kind_is_not_specified_using_0_6088": "Modül çözümleme türü belirtilmedi, '{0}' kullanılıyor.",
   "Module_resolution_using_rootDirs_has_failed_6111": "'rootDirs' kullanarak modül çözümleme başarısız oldu.",
+  "Modules_6244": "Modüller",
   "Move_labeled_tuple_element_modifiers_to_labels_95117": "Etiketlenmiş demet öğesi değiştiricilerini etiketlere taşı",
   "Move_to_a_new_file_95049": "Yeni bir dosyaya taşı",
   "Multiple_consecutive_numeric_separators_are_not_permitted_6189": "Birbirini izleyen birden çok sayısal ayırıcıya izin verilmez.",
@@ -784,11 +930,14 @@
   "Name_is_not_valid_95136": "Ad geçerli değil",
   "Named_property_0_of_types_1_and_2_are_not_identical_2319": "'{1}' ve '{2}' türündeki '{0}' adlı özellikler aynı değil.",
   "Namespace_0_has_no_exported_member_1_2694": "'{0}' ad alanında dışarı aktarılan '{1}' üyesi yok.",
+  "Namespace_must_be_given_a_name_1437": "Ad alanına bir ad verilmesi gerekir.",
+  "Namespace_name_cannot_be_0_2819": "Ad alanı “{0}” olamaz.",
   "No_base_constructor_has_the_specified_number_of_type_arguments_2508": "Hiçbir temel oluşturucu, belirtilen tür bağımsız değişkeni sayısına sahip değil.",
   "No_constituent_of_type_0_is_callable_2755": "'{0}' türünde çağrılabilir bileşen yok.",
   "No_constituent_of_type_0_is_constructable_2759": "'{0}' türünde oluşturulabilir bileşen yok.",
   "No_index_signature_with_a_parameter_of_type_0_was_found_on_type_1_7054": "'{1}' türü üzerinde '{0}' türünde parametreye sahip dizin imzası bulunamadı.",
   "No_inputs_were_found_in_config_file_0_Specified_include_paths_were_1_and_exclude_paths_were_2_18003": "'{0}' yapılandırma dosyasında giriş bulunamadı. Belirtilen 'include' yolları: '{1}', 'exclude' yolları: '{2}'.",
+  "No_longer_supported_In_early_versions_manually_set_the_text_encoding_for_reading_files_6608": "Artık desteklenmiyor. Önceki sürümlerde, dosyaları okumak için metin kodlamasını el ile ayarlayın.",
   "No_overload_expects_0_arguments_but_overloads_do_exist_that_expect_either_1_or_2_arguments_2575": "{0} bağımsız değişken bekleyen aşırı yükleme yok ancak {1} veya {2} bağımsız değişken bekleyen aşırı yüklemeler var.",
   "No_overload_expects_0_type_arguments_but_overloads_do_exist_that_expect_either_1_or_2_type_arguments_2743": "{0} tür bağımsız değişkeni bekleyen aşırı yükleme yok ancak {1} veya {2} tür bağımsız değişkeni bekleyen aşırı yüklemeler var.",
   "No_overload_matches_this_call_2769": "Bu çağrıyla eşleşen aşırı yükleme yok.",
@@ -802,7 +951,6 @@
   "Not_all_code_paths_return_a_value_7030": "Tüm kod yolları bir değer döndürmez.",
   "Not_all_constituents_of_type_0_are_callable_2756": "'{0}' türündeki tüm bileşenler çağrılabilir değil.",
   "Not_all_constituents_of_type_0_are_constructable_2760": "'{0}' türündeki tüm bileşenler oluşturulabilir değil.",
-  "Numeric_index_type_0_is_not_assignable_to_string_index_type_1_2413": "'{0}' sayısal dizin türü, '{1}' dize dizini türüne atanamaz.",
   "Numeric_literals_with_absolute_values_equal_to_2_53_or_greater_are_too_large_to_be_represented_accur_80008": "2^53 veya üzeri mutlak değerlere sahip sayısal sabit değerler, tamsayı olarak doğru bir şekilde temsil edilemeyecek kadar büyüktür.",
   "Numeric_separators_are_not_allowed_here_6188": "Burada sayısal ayırıcılara izin verilmez.",
   "Object_is_of_type_unknown_2571": "Nesne 'unknown' türünde.",
@@ -826,9 +974,11 @@
   "Only_identifiers_Slashqualified_names_with_optional_type_arguments_are_currently_supported_in_a_clas_9002": "Sınıf 'extends' yan tümceleri içinde, şu an için yalnızca isteğe bağlı tür bağımsız değişkenlerine sahip tanımlayıcılar/tam adlar destekleniyor.",
   "Only_named_exports_may_use_export_type_1383": "Yalnızca adlandırılmış dışarı aktarmalarda 'export type' kullanılabilir.",
   "Only_numeric_enums_can_have_computed_members_but_this_expression_has_type_0_If_you_do_not_need_exhau_18033": "Yalnızca sayısal sabit listelerinde hesaplanmış üyeler olabilir ancak bu ifadede '{0}' türü var. Kapsamlılık denetimleri gerekmiyorsa bunun yerine bir nesne sabit değeri kullanmayı düşünebilirsiniz.",
+  "Only_output_d_ts_files_and_not_JavaScript_files_6623": "JavaScript dosyalarının değil yalnızca d.ts dosyalarının çıkışını alın.",
   "Only_public_and_protected_methods_of_the_base_class_are_accessible_via_the_super_keyword_2340": "'super' anahtar sözcüğüyle yalnızca temel sınıfa ait ortak ve korunan metotlara erişilebilir.",
   "Operator_0_cannot_be_applied_to_type_1_2736": "'{0}' işleci '{1}' türüne uygulanamıyor.",
   "Operator_0_cannot_be_applied_to_types_1_and_2_2365": "'{0}' işleci, '{1}' ve '{2}' türüne uygulanamaz.",
+  "Opt_a_project_out_of_multi_project_reference_checking_when_editing_6619": "Düzenleme sırasında bir projeyi çok projeli başvuru denetiminin dışında tutun.",
   "Option_0_can_only_be_specified_in_tsconfig_json_file_or_set_to_false_or_null_on_command_line_6230": "'{0}' seçeneği, yalnızca 'tsconfig.json' dosyasında belirtilebilir veya komut satırında 'false' veya 'null' olarak ayarlanabilir.",
   "Option_0_can_only_be_specified_in_tsconfig_json_file_or_set_to_null_on_command_line_6064": "'{0}' seçeneği, yalnızca 'tsconfig.json' dosyasında belirtilebilir veya komut satırında 'null' olarak ayarlanabilir.",
   "Option_0_can_only_be_used_when_either_option_inlineSourceMap_or_option_sourceMap_is_provided_5051": "'{0} seçeneği yalnızca '--inlineSourceMap' veya '--sourceMap' seçeneği sağlandığında kullanılabilir.",
@@ -839,16 +989,22 @@
   "Option_0_cannot_be_specified_without_specifying_option_1_or_option_2_5069": "'{1}' seçeneği veya '{2}' seçeneği belirtilmeden '{0}' seçeneği belirtilemez.",
   "Option_0_should_have_array_of_strings_as_a_value_6103": "'{0}' seçeneği değer olarak, dizelerden oluşan bir dizi içermelidir.",
   "Option_build_must_be_the_first_command_line_argument_6369": "'--build' seçeneği ilk komut satırı bağımsız değişkeni olmalıdır.",
-  "Option_incremental_can_only_be_specified_using_tsconfig_emitting_to_single_file_or_when_option_tsBui_5074": "'--incremental' seçeneği yalnızca tsconfig kullanılarak, tek dosyada gösterilerek veya `--tsBuildInfoFile` seçeneği sağlandığında belirtilebilir.",
+  "Option_incremental_can_only_be_specified_using_tsconfig_emitting_to_single_file_or_when_option_tsBui_5074": "'--incremental' seçeneği yalnızca tsconfig kullanılarak, tek bir dosyada gösterilerek veya '--tsBuildInfoFile' seçeneği sağlandığında belirtilebilir.",
   "Option_isolatedModules_can_only_be_used_when_either_option_module_is_provided_or_option_target_is_ES_5047": "'isolatedModules' seçeneği, yalnızca '--module' sağlandığında veya 'target' seçeneği 'ES2015' veya daha yüksek bir sürüm değerine sahip olduğunda kullanılabilir.",
+  "Option_preserveConstEnums_cannot_be_disabled_when_isolatedModules_is_enabled_5091": "'isolatedModules' etkinken 'preserveConstEnums' seçeneği devre dışı bırakılamaz.",
   "Option_project_cannot_be_mixed_with_source_files_on_a_command_line_5042": "'project' seçeneği, komut satırındaki kaynak dosyalarıyla karıştırılamaz.",
   "Option_resolveJsonModule_can_only_be_specified_when_module_code_generation_is_commonjs_amd_es2015_or_5071": "'--resolveJsonModule' seçeneği yalnızca modül kodu oluşturma 'commonjs', 'amd', 'es2015' veya 'esNext' olduğunda belirtilebilir.",
   "Option_resolveJsonModule_cannot_be_specified_without_node_module_resolution_strategy_5070": "'node' modül çözümleme stratejisi olmadan '--resolveJsonModule' seçeneği belirtilemez.",
   "Options_0_and_1_cannot_be_combined_6370": "'{0}' ve '{1}' seçenekleri birleştirilemez.",
   "Options_Colon_6027": "Seçenekler:",
+  "Output_Formatting_6256": "Çıkış Biçimlendirmesi",
+  "Output_compiler_performance_information_after_building_6615": "Derleme sonrasında derleyici performans bilgilerinin çıkışını alın.",
   "Output_directory_for_generated_declaration_files_6166": "Oluşturulan bildirim dosyaları için çıkış dizini.",
   "Output_file_0_from_project_1_does_not_exist_6309": "'{1}' projesinden '{0}' çıkış dosyası yok",
   "Output_file_0_has_not_been_built_from_source_file_1_6305": "Çıkış dosyası '{0}' '{1}' kaynak dosyasından oluşturulmamış.",
+  "Output_from_referenced_project_0_included_because_1_specified_1411": "'{1}' belirtildiğinden, başvurulan '{0}' projesinin çıkışı dahil edildi",
+  "Output_from_referenced_project_0_included_because_module_is_specified_as_none_1412": "'--module' 'none' olarak belirtildiğinden, başvurulan '{0}' projesinin çıkışı dahil edildi",
+  "Output_more_detailed_compiler_performance_information_after_building_6632": "Derleme sonrasında derleyici performans bilgilerinin daha ayrıntılı çıkışını alın.",
   "Overload_0_of_1_2_gave_the_following_error_2772": "{0}/{1} aşırı yükleme '{2}' imzası, aşağıdaki hatayı verdi.",
   "Overload_signatures_must_all_be_abstract_or_non_abstract_2512": "Aşırı yükleme imzalarının hepsi soyut veya soyut olmayan olmalıdır.",
   "Overload_signatures_must_all_be_ambient_or_non_ambient_2384": "Aşırı yükleme imzalarının tümü çevresel veya çevresel olmayan türde olmalıdır.",
@@ -892,18 +1048,25 @@
   "Parameter_type_of_public_static_setter_0_from_exported_class_has_or_is_using_name_1_from_private_mod_4034": "Dışarı aktarılan sınıftaki genel statik ayarlayıcı '{0}' için parametre türü, '{2}' özel modülündeki '{1}' adına sahip veya bu adı kullanıyor.",
   "Parameter_type_of_public_static_setter_0_from_exported_class_has_or_is_using_private_name_1_4035": "Dışarı aktarılan sınıftaki genel statik ayarlayıcı '{0}' için parametre türü, '{1}' özel adına sahip veya bu adı kullanıyor.",
   "Parse_in_strict_mode_and_emit_use_strict_for_each_source_file_6141": "Katı modda ayrıştırın ve her kaynak dosya için \"use strict\" kullanın.",
+  "Part_of_files_list_in_tsconfig_json_1409": "tsconfig.json içindeki 'files' listesinin parçası",
   "Pattern_0_can_have_at_most_one_Asterisk_character_5061": "'{0}' deseni en fazla bir adet '*' karakteri içerebilir.",
   "Performance_timings_for_diagnostics_or_extendedDiagnostics_are_not_available_in_this_session_A_nativ_6386": "'--diagnostics' veya '--extendedDiagnostics' için performans zamanlamaları bu oturumda kullanılamaz. Web performans API'sinin yerel bir uygulaması bulunamadı.",
+  "Platform_specific_6912": "Platforma özel",
   "Prefix_0_with_an_underscore_90025": "'{0}' için ön ek olarak alt çizgi kullan",
   "Prefix_all_incorrect_property_declarations_with_declare_95095": "Hatalı tüm özellik bildirimlerinin başına 'declare' ekleyin",
   "Prefix_all_unused_declarations_with_where_possible_95025": "Mümkün olduğunda tüm kullanılmayan bildirimlerin başına '_' ekle",
   "Prefix_with_declare_95094": "Başına 'declare' ekleyin",
+  "Print_all_of_the_files_read_during_the_compilation_6653": "Derleme sırasında okunan tüm dosyaları yazdırın.",
+  "Print_files_read_during_the_compilation_including_why_it_was_included_6631": "Derleme sırasında, neden dahil edildiğini de içerecek şekilde okunan dosyaları yazdırın.",
+  "Print_names_of_files_and_the_reason_they_are_part_of_the_compilation_6505": "Dosya adlarını ve bunların derlemenin bir parçası olmalarının nedenini yazdır.",
   "Print_names_of_files_part_of_the_compilation_6155": "Derlemenin parçası olan dosyaların adlarını yazdırın.",
   "Print_names_of_files_that_are_part_of_the_compilation_and_then_stop_processing_6503": "Derlemenin parçası olan dosyaların adlarını yazdırın ve sonra işlemeyi durdurun.",
   "Print_names_of_generated_files_part_of_the_compilation_6154": "Oluşturulan dosyalardan, derlemenin parçası olanların adlarını yazdırın.",
   "Print_the_compiler_s_version_6019": "Derleyici sürümünü yazdır.",
   "Print_the_final_configuration_instead_of_building_1350": "Derlemek yerine son yapılandırmayı yazdırın.",
+  "Print_the_names_of_emitted_files_after_a_compilation_6652": "Derleme sonrasında yayılan dosyaların adlarını yazdırın.",
   "Print_this_message_6017": "Bu iletiyi yazdır.",
+  "Private_accessor_was_defined_without_a_getter_2806": "Özel erişimci bir alıcı olmadan tanımlandı.",
   "Private_identifiers_are_not_allowed_in_variable_declarations_18029": "Değişken bildirimlerinde özel tanımlayıcılara izin verilmiyor.",
   "Private_identifiers_are_not_allowed_outside_class_bodies_18016": "Sınıf gövdelerinin dışında özel tanımlayıcılara izin verilmiyor.",
   "Private_identifiers_are_only_available_when_targeting_ECMAScript_2015_and_higher_18028": "Özel tanımlayıcılar yalnızca ECMAScript 2015 veya üzeri hedeflenirken kullanılabilir.",
@@ -911,6 +1074,7 @@
   "Private_or_protected_member_0_cannot_be_accessed_on_a_type_parameter_4105": "Özel veya korumalı '{0}' üyesine bir tür parametresinde erişilemiyor.",
   "Project_0_can_t_be_built_because_its_dependency_1_has_errors_6363": "'{0}' projesinin '{1}' bağımlılığında hatalar olduğundan proje derlenemiyor",
   "Project_0_can_t_be_built_because_its_dependency_1_was_not_built_6383": "'{0}' projesinin '{1}' bağımlılığı derlenmediğinden proje derlenemiyor",
+  "Project_0_is_being_forcibly_rebuilt_6388": "'{0}' projesi zorla yeniden oluşturuluyor",
   "Project_0_is_out_of_date_because_its_dependency_1_is_out_of_date_6353": "'{0}' projesinin '{1}' bağımlılığı güncel olmadığından proje güncel değil",
   "Project_0_is_out_of_date_because_oldest_output_1_is_older_than_newest_input_2_6350": "En eski '{1}' çıkışı en yeni '{2}' girişinden daha eski olduğundan '{0}' projesi güncel değil",
   "Project_0_is_out_of_date_because_output_file_1_does_not_exist_6352": "Çıkış dosyası '{1}' mevcut olmadığından '{0}' projesi güncel değil",
@@ -920,14 +1084,18 @@
   "Project_0_is_up_to_date_because_newest_input_1_is_older_than_oldest_output_2_6351": "En yeni '{1}' girişi en eski '{2}' çıkışından daha eski olduğundan '{0}' projesi güncel",
   "Project_0_is_up_to_date_with_d_ts_files_from_its_dependencies_6354": "'{0}' projesi bağımlılıklarından d.ts dosyaları ile güncel",
   "Project_references_may_not_form_a_circular_graph_Cycle_detected_Colon_0_6202": "Proje başvuruları döngüsel bir grafik formu oluşturamaz. Döngü tespit edildi: {0}",
+  "Projects_6255": "Projeler",
   "Projects_in_this_build_Colon_0_6355": "Bu derlemedeki projeler: {0}",
   "Projects_to_reference_6300": "Başvurulacak projeler",
+  "Property_0_cannot_have_an_initializer_because_it_is_marked_abstract_1267": "'{0}' özelliği abstract olarak işaretlendiğinden bir başlatıcıya sahip olamaz.",
   "Property_0_comes_from_an_index_signature_so_it_must_be_accessed_with_0_4111": "'{0}' özelliği bir dizin imzasından geldiğinden ['{0}'] ile erişilmelidir.",
   "Property_0_does_not_exist_on_const_enum_1_2479": "'{0}' özelliği, '{1}' 'const' sabit listesi üzerinde değil.",
   "Property_0_does_not_exist_on_type_1_2339": "'{0}' özelliği, '{1}' türünde değil.",
   "Property_0_does_not_exist_on_type_1_Did_you_mean_2_2551": "'{0}' özelliği '{1}' türünde yok. Bunu mu demek istediniz: '{2}'?",
   "Property_0_does_not_exist_on_type_1_Did_you_mean_to_access_the_static_member_2_instead_2576": "'{0}' özelliği '{1}' türünde yok. Bunun yerine '{2}' statik üyesine erişmek mi istediniz?",
-  "Property_0_does_not_exist_on_type_1_Do_you_need_to_change_your_target_library_Try_changing_the_lib_c_2550": "'{0}' özelliği '{1}' türünde yok. Hedef kitaplığınızı değiştirmeniz mi gerekiyor? `lib` derleyici seçeneğini '{2}' veya üzeri olarak değiştirmeyi deneyin.",
+  "Property_0_does_not_exist_on_type_1_Do_you_need_to_change_your_target_library_Try_changing_the_lib_c_2550": "'{0}' özelliği '{1}' türünde yok. Hedef kitaplığınızı değiştirmeniz mi gerekiyor? 'lib' derleyici seçeneğini '{2}' veya üzeri olarak değiştirmeyi deneyin.",
+  "Property_0_does_not_exist_on_type_1_Try_changing_the_lib_compiler_option_to_include_dom_2812": "'{0}' özelliği '{1}' türünde yok. 'Lib' derleyici seçeneğini 'dom' içerecek şekilde değiştirmeyi deneyin.",
+  "Property_0_has_no_initializer_and_is_not_definitely_assigned_in_a_class_static_block_2817": "'{0}' özelliği başlatıcı içermiyor ve kesinlikle bir sınıf statik bloğuna atanmamış.",
   "Property_0_has_no_initializer_and_is_not_definitely_assigned_in_the_constructor_2564": "'{0}' özelliği başlatıcı içermiyor ve oluşturucuda kesin olarak atanmamış.",
   "Property_0_implicitly_has_type_any_because_its_get_accessor_lacks_a_return_type_annotation_7033": "'{0}' özelliği, get erişimcisinin dönüş türü ek açıklaması olmadığı için örtük olarak 'any' türü içeriyor.",
   "Property_0_implicitly_has_type_any_because_its_set_accessor_lacks_a_parameter_type_annotation_7032": "'{0}' özelliği, set erişimcisinin parametre türü ek açıklaması olmadığı için örtük olarak 'any' türü içeriyor.",
@@ -945,18 +1113,19 @@
   "Property_0_is_optional_in_type_1_but_required_in_type_2_2327": "'{0}' özelliği, '{1}' türünde isteğe bağlıdır, ancak '{2}' türünde gereklidir.",
   "Property_0_is_private_and_only_accessible_within_class_1_2341": "'{0}' özelliği özeldir ve yalnızca '{1}' sınıfı içinden erişilebilir.",
   "Property_0_is_private_in_type_1_but_not_in_type_2_2325": "'{0}' özelliği, '{1}' türünde özel, '{2}' türünde özel değildir.",
-  "Property_0_is_protected_and_only_accessible_through_an_instance_of_class_1_2446": "'{0}' özelliği korumalıdır ve yalnızca '{1}' sınıfının örneği aracılığıyla erişilebilir.",
+  "Property_0_is_protected_and_only_accessible_through_an_instance_of_class_1_This_is_an_instance_of_cl_2446": "'{0}' özelliği korunuyor ve yalnızca '{1}' sınıfının bir örneği üzerinden erişilebilir. Bu, '{2}' sınıfının bir örneğidir.",
   "Property_0_is_protected_and_only_accessible_within_class_1_and_its_subclasses_2445": "'{0}' özelliği korumalıdır ve yalnızca '{1}' sınıfı içinden ve alt sınıflarından erişilebilir.",
   "Property_0_is_protected_but_type_1_is_not_a_class_derived_from_2_2443": "'{0}' özelliği korumalıdır; ancak '{1}' türü, '{2}' öğesinden türetilmiş bir sınıf değildir.",
   "Property_0_is_protected_in_type_1_but_public_in_type_2_2444": "'{0}' özelliği '{1}' türünde korumalı, '{2}' türünde ise ortaktır.",
   "Property_0_is_used_before_being_assigned_2565": "'{0}' özelliği atanmadan önce kullanıldı.",
   "Property_0_is_used_before_its_initialization_2729": "'{0}' özelliği başlatılmadan önce kullanılıyor.",
+  "Property_0_may_not_be_used_in_a_static_property_s_initializer_in_the_same_class_when_target_is_esnex_2810": "'target', 'esnext' ve 'useDefineForClassFields', 'false' olduğunda, '{0}' özelliği aynı sınıftaki bir statik özelliğin başlatıcısında kullanılamaz.",
+  "Property_0_may_not_exist_on_type_1_Did_you_mean_2_2568": "'{0}' özelliği '{1}' türü üzerinde olamaz. Şunu mu demek istediniz: '{2}'?",
   "Property_0_of_JSX_spread_attribute_is_not_assignable_to_target_property_2606": "JSX yayılma özniteliğine ait '{0}' özelliği, hedef özelliğe atanamaz.",
   "Property_0_of_exported_class_expression_may_not_be_private_or_protected_4094": "Dışarı aktarılan sınıf ifadesinin '{0}' özelliği, özel veya korumalı olmayabilir.",
   "Property_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2_4032": "Dışarı aktarılan arabirimin '{0}' özelliği, '{2}' özel modülündeki '{1}' adına sahip veya bu adı kullanıyor.",
   "Property_0_of_exported_interface_has_or_is_using_private_name_1_4033": "Dışarı aktarılan arabirimin '{0}' özelliği, '{1}' özel adına sahip veya bu adı kullanıyor.",
-  "Property_0_of_type_1_is_not_assignable_to_numeric_index_type_2_2412": "'{1}' türünün '{0}' özelliği, '{2}' sayısal dizin türüne atanamaz.",
-  "Property_0_of_type_1_is_not_assignable_to_string_index_type_2_2411": "'{1}' türünün '{0}' özelliği, '{2}' dize dizini türüne atanamaz.",
+  "Property_0_of_type_1_is_not_assignable_to_2_index_type_3_2411": "'{1}' türündeki '{0}' özelliği '{2}' dizin türüne '{3}' atanamaz.",
   "Property_0_was_also_declared_here_2733": "'{0}' özelliği de burada bildirildi.",
   "Property_0_will_overwrite_the_base_property_in_1_If_this_is_intentional_add_an_initializer_Otherwise_2612": "'{0}' özelliği '{1}' içindeki temel özelliğin üzerine yazacak. Bu bilerek yapılıyorsa bir başlatıcı ekleyin. Aksi takdirde, bir 'declare' değiştiricisi ekleyin veya gereksiz bildirimi kaldırın.",
   "Property_assignment_expected_1136": "Özellik ataması bekleniyor.",
@@ -978,12 +1147,18 @@
   "Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4027": "Dışarı aktarılan sınıfın '{0}' ortak statik özelliği, '{2}' özel modülündeki '{1}' adına sahip veya bu adı kullanıyor.",
   "Public_static_property_0_of_exported_class_has_or_is_using_private_name_1_4028": "Dışarı aktarılan sınıfın '{0}' ortak statik özelliği, '{1}' özel adına sahip veya bu adı kullanıyor.",
   "Qualified_name_0_is_not_allowed_without_a_leading_param_object_1_8032": "'{0}' tam adının başında '@param {object} {1}' olmadan bu ada izin verilmiyor.",
+  "Raise_an_error_when_a_function_parameter_isn_t_read_6676": "İşlev parametresi okunmazsa bir hata oluştur",
   "Raise_error_on_expressions_and_declarations_with_an_implied_any_type_6052": "Belirtilen 'any' türüne sahip ifade ve bildirimlerde hata oluştur.",
   "Raise_error_on_this_expressions_with_an_implied_any_type_6115": "Örtük olarak 'any' türü içeren 'this' ifadelerinde hata tetikle.",
   "Re_exporting_a_type_when_the_isolatedModules_flag_is_provided_requires_using_export_type_1205": "'--isolatedModules' bayrağı sağlandığında bir türü yeniden dışarı aktarmak için 'export type' kullanmak gerekir.",
   "Redirect_output_structure_to_the_directory_6006": "Çıktı yapısını dizine yeniden yönlendir.",
+  "Reduce_the_number_of_projects_loaded_automatically_by_TypeScript_6617": "TypeScript tarafından otomatik olarak yüklenen projelerin sayısını azaltın.",
   "Referenced_project_0_may_not_disable_emit_6310": "Başvurulan '{0}' projesi, yayma özelliğini devre dışı bırakamaz.",
   "Referenced_project_0_must_have_setting_composite_Colon_true_6306": "Başvurulan proje '{0}' \"composite\": true ayarına sahip olmalıdır.",
+  "Referenced_via_0_from_file_1_1400": "'{1}' dosyasından '{0}' aracılığıyla başvuruldu",
+  "Remove_a_list_of_directories_from_the_watch_process_6628": "İzleme işleminden dizinlerin listesini kaldırın.",
+  "Remove_a_list_of_files_from_the_watch_mode_s_processing_6629": "İzleme modu işlemesinden bir dosya listesini kaldırın.",
+  "Remove_all_unnecessary_override_modifiers_95163": "Tüm gereksiz 'override' değiştiricilerini kaldır",
   "Remove_all_unnecessary_uses_of_await_95087": "Tüm gereksiz 'await' kullanımlarını kaldırın",
   "Remove_all_unreachable_code_95051": "Tüm erişilemeyen kodları kaldır",
   "Remove_all_unused_labels_95054": "Kullanılmayan tüm etiketleri kaldır",
@@ -991,8 +1166,10 @@
   "Remove_braces_from_arrow_function_95060": "Ok işlevinden küme ayraçlarını kaldır",
   "Remove_braces_from_arrow_function_body_95112": "Ok işlevi gövdesinden küme ayraçlarını kaldır",
   "Remove_import_from_0_90005": "'{0}' öğesinden içeri aktarmayı kaldır",
+  "Remove_override_modifier_95161": "'override' değiştiricisini kaldır",
   "Remove_parentheses_95126": "Parantezleri kaldır",
   "Remove_template_tag_90011": "Şablon etiketini kaldırın",
+  "Remove_the_20mb_cap_on_total_source_code_size_for_JavaScript_files_in_the_TypeScript_language_server_6618": "TypeScript dil sunucusundaki JavaScript dosyaları için toplam kaynak kodu boyutuna yönelik 20 MB sınırını kaldırın.",
   "Remove_type_parameters_90012": "Tür parametrelerini kaldırın",
   "Remove_unnecessary_await_95086": "Gereksiz 'await' öğesini kaldırın",
   "Remove_unreachable_code_95050": "Erişilemeyen kodları kaldır",
@@ -1010,14 +1187,16 @@
   "Report_errors_in_js_files_8019": ".js dosyalarındaki hataları bildirin.",
   "Report_errors_on_unused_locals_6134": "Kullanılmayan yerel öğelerdeki hataları bildirin.",
   "Report_errors_on_unused_parameters_6135": "Kullanılmayan parametrelerdeki hataları bildirin.",
-  "Require_undeclared_properties_from_index_signatures_to_use_element_accesses_6803": "Öğe erişimlerini kullanmak için dizin imzalarından bildirilmemiş özellikler gerektirin.",
+  "Require_undeclared_properties_from_index_signatures_to_use_element_accesses_6717": "Öğe erişimlerini kullanmak için dizin imzalarından bildirilmemiş özellikler gerektirin.",
   "Required_type_parameters_may_not_follow_optional_type_parameters_2706": "Gerekli tür parametreleri, isteğe bağlı tür parametrelerini takip edemez.",
   "Resolution_for_module_0_was_found_in_cache_from_location_1_6147": "'{0}' modülünün çözümü '{1}' konumundaki önbellekte bulundu.",
+  "Resolution_for_type_reference_directive_0_was_found_in_cache_from_location_1_6241": "'{0}' tür başvurusu yönergesinin çözümlemesi '{1}' konumundaki önbellekte bulundu.",
   "Resolve_keyof_to_string_valued_property_names_only_no_numbers_or_symbols_6195": "'Keyof' değerini yalnızca dize değerli özellik adlarına (sayılar veya simgeler olmadan) çözümleyin.",
   "Resolving_from_node_modules_folder_6118": "Node_modules klasöründen çözümleniyor...",
   "Resolving_module_0_from_1_6086": "======== '{0}' modülü '{1}' öğesinden çözümleniyor. ========",
   "Resolving_module_name_0_relative_to_base_url_1_2_6094": "'{0}' modül adı, '{1}' - '{2}' temel url'sine göre çözümleniyor.",
   "Resolving_real_path_for_0_result_1_6130": "'{0}' için gerçek yol çözümleniyor, sonuç: '{1}'.",
+  "Resolving_type_reference_directive_0_containing_file_1_6242": "======== '{0}' tür başvurusu yönergesi çözümleniyor, kapsayan dosya: '{1}'. ========",
   "Resolving_type_reference_directive_0_containing_file_1_root_directory_2_6116": "========  '{0}' tür başvurusu yönergesi çözümleniyor, kapsayan dosya: '{1}', kök dizini: '{2}'. ========",
   "Resolving_type_reference_directive_0_containing_file_1_root_directory_not_set_6123": "========  '{0}' tür başvuru yönergesi çözümleniyor, içeren dosya '{1}', kök dizin ayarlanmadı. ========",
   "Resolving_type_reference_directive_0_containing_file_not_set_root_directory_1_6127": "========  '{0}' tür başvurusu yönergesi çözümleniyor, kapsayan dosya ayarlanmadı, kök dizin: '{1}'. ========",
@@ -1029,6 +1208,7 @@
   "Rest_signatures_are_incompatible_2572": "REST imzaları uyumsuz.",
   "Rest_types_may_only_be_created_from_object_types_2700": "Rest türleri yalnızca nesne türlerinden oluşturulabilir.",
   "Return_type_annotation_circularly_references_itself_2577": "Dönüş türü ek açıklaması döngüsel olarak kendine başvuruyor.",
+  "Return_type_must_be_inferred_from_a_function_95149": "Dönüş türü bir işlevden çıkarsanmalıdır",
   "Return_type_of_call_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1_4046": "Dışarı aktarılan arabirimdeki çağrı imzasının dönüş türü, '{1}' özel modülündeki '{0}' adına sahip veya bu adı kullanıyor.",
   "Return_type_of_call_signature_from_exported_interface_has_or_is_using_private_name_0_4047": "Dışarı aktarılan arabirimdeki çağrı imzasının dönüş türü, '{0}' özel adına sahip veya bu adı kullanıyor.",
   "Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_name_0_from_private_mod_4044": "Dışarı aktarılan arabirimdeki oluşturucu imzasının dönüş türü, '{1}' özel modülündeki '{0}' adına sahip veya bu adı kullanıyor.",
@@ -1053,15 +1233,31 @@
   "Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_external_module__4050": "Dışarı aktarılan sınıftaki ortak statik metodun dönüş türü, '{1}' dış modülündeki '{0}' adına sahip veya bu adı kullanıyor, ancak adlandırılamıyor.",
   "Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_private_module_1_4051": "Dışarı aktarılan sınıftaki ortak statik metodun dönüş türü, '{1}' özel modülündeki '{0}' adına sahip veya bu adı kullanıyor.",
   "Return_type_of_public_static_method_from_exported_class_has_or_is_using_private_name_0_4052": "Dışarı aktarılan sınıftaki ortak statik metodun dönüş türü, '{0}' özel adına sahip veya bu adı kullanıyor.",
-  "Reusing_module_resolutions_originating_in_0_since_resolutions_are_unchanged_from_old_program_6184": "Eski programdaki çözümlemeler değişmediğinden '{0}' kaynaklı modül çözümlemeleri yeniden kullanılıyor.",
-  "Reusing_resolution_of_module_0_to_file_1_from_old_program_6183": "Eski programın '{1}' dosyasında '{0}' modülü çözmesi yeniden kullanılıyor.",
+  "Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_not_resolved_6395": "'{2}' konumundaki önbellekte bulunan '{1}' üzerindeki '{0}' modülünün çözümlemesinin yeniden kullanılması, çözülmedi.",
+  "Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_6393": "'{2}' konumundaki önbellekte bulunan '{1}' üzerindeki '{0}' modülünün çözümlemesinin yeniden kullanılması, başarıyla '{3}' olarak çözüldü.",
+  "Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_6394": "'{2}' konumundaki önbellekte bulunan '{1}' üzerindeki '{0}' modülünün çözümlemesinin yeniden kullanılması, başarıyla Paket Kimliği '{4}' ile '{3}' olarak çözüldü.",
+  "Reusing_resolution_of_module_0_from_1_of_old_program_it_was_not_resolved_6389": "Eski programın '{1}' üzerindeki '{0}' modülünün çözümlemesinin yeniden kullanılması, çözülmedi.",
+  "Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2_6183": "Eski programın '{1}' üzerindeki '{0}' modülünün çözümlemesinin yeniden kullanılması, başarıyla '{2}' olarak çözüldü.",
+  "Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2_with_Package__6184": "Eski programın '{1}' üzerindeki '{0}' modülünün çözümlemesinin yeniden kullanılması, başarıyla Paket Kimliği '{3}' ile '{2}' olarak çözüldü.",
+  "Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_not_re_6398": "'{2}' konumundaki önbellekte bulunan '{1}' üzerindeki '{0}' tür başvuru yönergesi çözümlemesinin yeniden kullanılması, çözülmedi.",
+  "Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_succes_6396": "'{2}' konumundaki önbellekte bulunan '{1}' üzerindeki '{0}' tür başvuru yönergesi çözümlemesinin yeniden kullanılması, başarıyla '{3}' olarak çözüldü.",
+  "Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_succes_6397": "'{2}' konumundaki önbellekte bulunan '{1}' üzerindeki '{0}' tür başvuru yönergesi çözümlemesinin yeniden kullanılması, başarıyla Paket Kimliği '{4}' ile '{3}' olarak çözüldü.",
+  "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_not_resolved_6392": "Eski programın '{1}' üzerindeki '{0}' tür başvuru yönergesi çözümlemesinin yeniden kullanılması, çözülmedi.",
+  "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved__6390": "Eski programın '{1}' üzerindeki '{0}' tür başvuru yönergesi çözümlemesinin yeniden kullanılması, başarıyla '{2}' olarak çözüldü.",
+  "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved__6391": "Eski programın '{1}' üzerindeki '{0}' tür başvuru yönergesi çözümlemesinin yeniden kullanılması, başarıyla Paket Kimliği '{3}' ile '{2}' olarak çözüldü.",
   "Rewrite_all_as_indexed_access_types_95034": "Tümünü dizinlenmiş erişim türleri olarak yeniden yaz",
   "Rewrite_as_the_indexed_access_type_0_90026": "Dizine eklenmiş erişim türü '{0}' olarak yeniden yaz",
   "Root_directory_cannot_be_determined_skipping_primary_search_paths_6122": "Kök dizin belirlenemiyor, birincil arama yolları atlanıyor.",
+  "Root_file_specified_for_compilation_1427": "Derleme için belirtilen kök dosyası",
   "STRATEGY_6039": "STRATEJİ",
+  "Save_tsbuildinfo_files_to_allow_for_incremental_compilation_of_projects_6642": "Projelerin artımlı derlenmesini sağlamak için .tsbuildinfo dosyalarını kaydedin.",
   "Scoped_package_detected_looking_in_0_6182": "Kapsamlı paket algılandı, '{0}' içinde aranıyor",
+  "Selection_is_not_a_valid_statement_or_statements_95155": "Seçim geçerli bir veya daha fazla deyim değil",
   "Selection_is_not_a_valid_type_node_95133": "Seçim geçerli bir tür düğümü değil",
+  "Set_the_JavaScript_language_version_for_emitted_JavaScript_and_include_compatible_library_declaratio_6705": "Yayılan JavaScript için JavaScript dil sürümünü ayarlayın ve uyumlu kitaplık bildirimlerini ekleyin.",
+  "Set_the_language_of_the_messaging_from_TypeScript_This_does_not_affect_emit_6654": "TypeScript’ten ileti dilini ayarlayın. Bu, yaymayı etkilemez.",
   "Set_the_module_option_in_your_configuration_file_to_0_95099": "Yapılandırma dosyanızdaki 'module' seçeneğini '{0}' olarak ayarlayın",
+  "Set_the_newline_character_for_emitting_files_6659": "Dosyaları yaymak için yeni satır karakterini ayarlayın.",
   "Set_the_target_option_in_your_configuration_file_to_0_95098": "Yapılandırma dosyanızdaki 'target' seçeneğini '{0}' olarak ayarlayın",
   "Setters_cannot_return_a_value_2408": "Ayarlayıcılar bir değer döndüremez.",
   "Show_all_compiler_options_6169": "Tüm derleyici seçeneklerini gösterin.",
@@ -1069,31 +1265,63 @@
   "Show_verbose_diagnostic_information_6150": "Ayrıntılı tanılama bilgilerini gösterin.",
   "Show_what_would_be_built_or_deleted_if_specified_with_clean_6367": "Nelerin derleneceğini (veya '--clean' ile belirtilmişse silineceğini) göster",
   "Signature_0_must_be_a_type_predicate_1224": "'{0}' imzası bir tür koşulu olmalıdır.",
+  "Skip_type_checking_all_d_ts_files_6693": "Tüm .d.ts dosyalarında tür denetimini atlayın.",
+  "Skip_type_checking_d_ts_files_that_are_included_with_TypeScript_6692": "TypeScript ile birlikte gelen .d.ts dosyaları için tür denetimini atlayın.",
   "Skip_type_checking_of_declaration_files_6012": "Bildirim dosyalarının tür denetimini atla.",
   "Skipping_build_of_project_0_because_its_dependency_1_has_errors_6362": "'{0}' projesinin '{1}' bağımlılığında hatalar olduğundan projenin derlenmesi atlanıyor",
   "Skipping_build_of_project_0_because_its_dependency_1_was_not_built_6382": "'{0}' projesinin '{1}' bağımlılığı derlenmediğinden projenin derlenmesi atlanıyor",
-  "Source_Map_Options_6175": "Kaynak Eşleme Seçenekleri",
+  "Source_from_referenced_project_0_included_because_1_specified_1414": "'{1}' belirtildiğinden, başvurulan '{0}' projesinin kaynağı dahil edildi",
+  "Source_from_referenced_project_0_included_because_module_is_specified_as_none_1415": "'--module' 'none' olarak belirtildiğinden, başvurulan '{0}' projesinin kaynağı dahil edildi",
   "Source_has_0_element_s_but_target_allows_only_1_2619": "Kaynakta {0} öğe var ancak hedef yalnızca {1} öğeye izin veriyor.",
   "Source_has_0_element_s_but_target_requires_1_2618": "Kaynakta {0} öğe var ancak hedef {1} öğe gerektiriyor.",
+  "Source_provides_no_match_for_required_element_at_position_0_in_target_2623": "Kaynak, hedefteki {0} konumunda bulunan gerekli öğe için eşleşme sağlamıyor.",
+  "Source_provides_no_match_for_variadic_element_at_position_0_in_target_2624": "Kaynak, hedefteki {0} konumunda bulunan değişen sayıda bağımsız değişken içeren öğe için eşleşme sağlamıyor.",
   "Specialized_overload_signature_is_not_assignable_to_any_non_specialized_signature_2382": "Özelleşmiş aşırı yükleme imzası özelleşmemiş imzalara atanamaz.",
   "Specifier_of_dynamic_import_cannot_be_spread_element_1325": "Dinamik içeri aktarmanın tanımlayıcısı, yayılma öğesi olamaz.",
-  "Specify_ECMAScript_target_version_Colon_ES3_default_ES5_ES2015_ES2016_ES2017_ES2018_ES2019_ES2020_or_6015": "ECMAScript hedef sürümünü belirtin: 'ES3' (varsayılan), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019', 'ES2020' veya 'ESNEXT'.",
-  "Specify_JSX_code_generation_Colon_preserve_react_native_or_react_6080": "JSX kod oluşturma seçeneğini belirtin: 'preserve', 'react-native' veya 'react'.",
-  "Specify_emit_Slashchecking_behavior_for_imports_that_are_only_used_for_types_1368": "Yalnızca türlere yönelik kullanılan içeri aktarmalar için gösterme/denetleme davranışını belirtin",
+  "Specify_ECMAScript_target_version_6015": "ECMAScript hedef sürümünü belirtin.",
+  "Specify_JSX_code_generation_6080": "JSX kodu oluşturmayı belirtin.",
+  "Specify_a_file_that_bundles_all_outputs_into_one_JavaScript_file_If_declaration_is_true_also_designa_6679": "Tüm çıkışları tek bir JavaScript dosyasında paketleyen bir dosya belirtin. `declaration` değeri true ise, tüm .d.ts çıkışını paketleyen bir dosya da belirtir.",
+  "Specify_a_list_of_glob_patterns_that_match_files_to_be_included_in_compilation_6641": "Derlemeye dahil edilecek dosyalarla eşleşen glob desenlerinin bir listesini belirtin.",
+  "Specify_a_list_of_language_service_plugins_to_include_6681": "Dahil edilecek dil hizmeti eklentilerinin listesini belirtin.",
+  "Specify_a_set_of_bundled_library_declaration_files_that_describe_the_target_runtime_environment_6651": "Hedef çalışma zamanı ortamını açıklayan bir paket kitaplık bildirim dosyası kümesi belirtin.",
+  "Specify_a_set_of_entries_that_re_map_imports_to_additional_lookup_locations_6680": "İçeri aktarmaları ek arama konumlarına yeniden eşleyen bir girdi kümesi belirtin.",
+  "Specify_an_array_of_objects_that_specify_paths_for_projects_Used_in_project_references_6687": "Projeler için yolları belirten nesnelerin bir dizisini belirtin. Proje başvurularında kullanılır.",
+  "Specify_an_output_folder_for_all_emitted_files_6678": "Tüm yayılan dosyalar için bir çıkış klasörü belirtin.",
+  "Specify_emit_Slashchecking_behavior_for_imports_that_are_only_used_for_types_6718": "Yalnızca türlere yönelik kullanılan içeri aktarmalar için gösterme/denetleme davranışını belirtin",
   "Specify_file_to_store_incremental_compilation_information_6380": "Artımlı derleme bilgilerinin depolanacağı dosyayı belirtin",
+  "Specify_how_TypeScript_looks_up_a_file_from_a_given_module_specifier_6658": "TypeScript’in belirli bir modül belirticisinden bir dosyayı nasıl arayacağını belirtin.",
+  "Specify_how_directories_are_watched_on_systems_that_lack_recursive_file_watching_functionality_6714": "Özyinelemeli dosya izleme işlevselliği olmayan sistemlerde dizinlerin nasıl izleneceğini belirtin.",
+  "Specify_how_the_TypeScript_watch_mode_works_6715": "TypeScript izleme modunun nasıl çalıştığını belirtin.",
   "Specify_library_files_to_be_included_in_the_compilation_6079": "Derlemeye dahil edilecek kitaplık dosyalarını belirtin.",
-  "Specify_module_code_generation_Colon_none_commonjs_amd_system_umd_es2015_es2020_or_ESNext_6016": "Modül kodu oluşturmayı belirtin: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', 'es2020' veya 'ESNext'.",
+  "Specify_module_code_generation_6016": "Modül kodu oluşturmayı belirtin.",
   "Specify_module_resolution_strategy_Colon_node_Node_js_or_classic_TypeScript_pre_1_6_6069": "Modül çözümleme stratejisini belirtin: 'Node' (Node.js) veya 'classic' (TypeScript pre-1.6).",
-  "Specify_strategy_for_creating_a_polling_watch_when_it_fails_to_create_using_file_system_events_Colon_6227": "Dosya sistemi olayları kullanılarak oluşturulamadığında yoklama izlemesi oluşturmak için strateji belirtin: 'FixedInterval' (varsayılan), 'PriorityInterval', 'DynamicPriority'.",
-  "Specify_strategy_for_watching_directory_on_platforms_that_don_t_support_recursive_watching_natively__6226": "Özyinelemeli izlemeyi yerel olarak desteklemeyen platformlarda dizini izlemek için strateji belirtin: 'UseFsEvents' (varsayılan), 'FixedPollingInterval', 'DynamicPriorityPolling'.",
-  "Specify_strategy_for_watching_file_Colon_FixedPollingInterval_default_PriorityPollingInterval_Dynami_6225": "Dosya izlemek için strateji belirtin: 'FixedPollingInterval' (varsayılan), 'PriorityPollingInterval', 'DynamicPriorityPolling', 'UseFsEvents', 'UseFsEventsOnParentDirectory'.",
+  "Specify_module_specifier_used_to_import_the_JSX_factory_functions_when_using_jsx_Colon_react_jsx_Ast_6649": "`jsx: react-jsx*` kullanırken JSX fabrika işlevlerini içeri aktarmak için kullanılan modül belirticiyi belirtin.",
+  "Specify_multiple_folders_that_act_like_Slashnode_modules_Slash_types_6710": "`./node_modules/@types` gibi davranan birden çok klasör belirtin.",
+  "Specify_one_or_more_path_or_node_module_references_to_base_configuration_files_from_which_settings_a_6633": "Ayarlarının devralındığı temel yapılandırma dosyalarına yönelik bir veya daha fazla yol ya da düğüm modülü başvurusu belirtin.",
+  "Specify_options_for_automatic_acquisition_of_declaration_files_6709": "Bildirim dosyalarının otomatik olarak alınması için seçenekleri belirtin.",
+  "Specify_strategy_for_creating_a_polling_watch_when_it_fails_to_create_using_file_system_events_Colon_6227": "Dosya sistemi olayları kullanılarak oluşturulamadığında yoklama izlemesi oluşturma stratejisini belirtin: 'FixedInterval' (varsayılan), 'PriorityInterval', 'DynamicPriority', 'FixedChunkSize'.",
+  "Specify_strategy_for_watching_directory_on_platforms_that_don_t_support_recursive_watching_natively__6226": "Özyinelemeli izlemeyi yerel olarak desteklemeyen platformlarda dizini izleme stratejisini belirtin: 'UseFsEvents' (varsayılan), 'FixedPollingInterval', 'DynamicPriorityPolling', 'FixedChunkSizePolling'.",
+  "Specify_strategy_for_watching_file_Colon_FixedPollingInterval_default_PriorityPollingInterval_Dynami_6225": "Dosya izleme stratejisini belirtin: 'FixedPollingInterval' (varsayılan), 'PriorityPollingInterval', 'DynamicPriorityPolling', 'FixedChunkSizePolling', 'UseFsEvents', 'UseFsEventsOnParentDirectory'.",
+  "Specify_the_JSX_Fragment_reference_used_for_fragments_when_targeting_React_JSX_emit_e_g_React_Fragme_6648": "React JSX yayma hedeflenirken parçalar için kullanılacak JSX Parça başvurusunu belirtin, örneğin 'React.Fragment' veya 'Fragment'.",
   "Specify_the_JSX_factory_function_to_use_when_targeting_react_JSX_emit_e_g_React_createElement_or_h_6146": "'React.createElement' veya 'h' gibi 'react' JSX emit hedeflerken kullanılacak JSX fabrika işlevini belirtin.",
+  "Specify_the_JSX_factory_function_used_when_targeting_React_JSX_emit_e_g_React_createElement_or_h_6647": "React JSX yayma hedeflenirken kullanılacak JSX fabrika işlevini belirtin, örneğin 'React.createElement' veya 'h'.",
   "Specify_the_JSX_fragment_factory_function_to_use_when_targeting_react_JSX_emit_with_jsxFactory_compi_18034": "'jsxFactory' derleme seçeneği belirtilmiş olarak 'react' JSX yaymasını hedeflerken kullanılacak JSX parçası fabrika işlevini belirtin (ör. 'Fragment').",
+  "Specify_the_base_directory_to_resolve_non_relative_module_names_6607": "Göreli olmayan modül adlarını çözümlemek için temel dizini belirtin.",
   "Specify_the_end_of_line_sequence_to_be_used_when_emitting_files_Colon_CRLF_dos_or_LF_unix_6060": "Dosyalar gösterilirken kullanılacak satır sonu dizisini belirtin: 'CRLF' (dos) veya 'LF' (unix).",
+  "Specify_the_folder_for_tsbuildinfo_incremental_compilation_files_6707": ".tsbuildinfo artımlı derleme dosyaları için klasörü belirtin.",
   "Specify_the_location_where_debugger_should_locate_TypeScript_files_instead_of_source_locations_6004": "Hata ayıklayıcının TypeScript dosyalarını kaynak konumlar yerine nerede bulması gerektiğini belirtin.",
-  "Specify_the_location_where_debugger_should_locate_map_files_instead_of_generated_locations_6003": "Hata ayıklayıcının, eşlem dosyalarını üretilen konumlar yerine nerede bulması gerektiğini belirtin.",
-  "Specify_the_module_specifier_to_be_used_to_import_the_jsx_and_jsxs_factory_functions_from_eg_react_6238": "`jsx` ve `jsxs` fabrika işlevlerini içeri aktarmak için kullanılacak modül tanımlayıcısını (ör. react) belirtin.",
+  "Specify_the_location_where_debugger_should_locate_map_files_instead_of_generated_locations_6655": "Hata ayıklayıcının, eşlem dosyalarını üretilen konumlar yerine nerede bulması gerektiğini belirtin.",
+  "Specify_the_maximum_folder_depth_used_for_checking_JavaScript_files_from_node_modules_Only_applicabl_6656": "`node_modules` öğesinden JavaScript dosyalarını denetlemek için kullanılan en yüksek klasör derinliğini belirtin. Yalnızca `allowJs` ile geçerlidir.",
+  "Specify_the_module_specifier_to_be_used_to_import_the_jsx_and_jsxs_factory_functions_from_eg_react_6238": "'jsx' ve 'jsxs' fabrika işlevlerini içeri aktarmak için kullanılacak modül tanımlayıcısını (ör. react) belirtin.",
+  "Specify_the_object_invoked_for_createElement_This_only_applies_when_targeting_react_JSX_emit_6686": "`createElement` için çağrılan nesneyi belirtin. Bu yalnızca `react` JSX yayma hedeflerken geçerlidir.",
+  "Specify_the_output_directory_for_generated_declaration_files_6613": "Oluşturulan bildirim dosyaları için çıkış dizinini belirtin.",
   "Specify_the_root_directory_of_input_files_Use_to_control_the_output_directory_structure_with_outDir_6058": "Giriş dosyalarının kök dizinini belirtin. Çıkış dizininin yapısını --outDir ile denetlemek için kullanın.",
+  "Specify_the_root_folder_within_your_source_files_6690": "Kaynak dosyalarınızda kök klasörü belirtin.",
+  "Specify_the_root_path_for_debuggers_to_find_the_reference_source_code_6695": "Başvuru kaynak kodunu bulmak için hata ayıklayıcıların kök yolunu belirtin.",
+  "Specify_type_package_names_to_be_included_without_being_referenced_in_a_source_file_6711": "Bir kaynak dosyada başvurulmadan eklenecek tür paketi adlarını belirtin.",
+  "Specify_what_JSX_code_is_generated_6646": "Oluşturulacak JSX kodunu belirtin.",
+  "Specify_what_approach_the_watcher_should_use_if_the_system_runs_out_of_native_file_watchers_6634": "Sistemde yerel dosya izleyicileri tükenirse izleyicinin kullanması gereken yaklaşımı belirtin.",
+  "Specify_what_module_code_is_generated_6657": "Oluşturulan modül kodunu belirtin.",
   "Split_all_invalid_type_only_imports_1367": "Geçersiz tüm yalnızca tür içeri aktarmalarını bölün",
   "Split_into_two_separate_import_declarations_1366": "İki ayrı içeri aktarma bildirimine bölün",
   "Spread_operator_in_new_expressions_is_only_available_when_targeting_ECMAScript_5_and_higher_2472": "'new' ifadelerindeki yayılma işleci yalnızca ECMAScript 5 ve üzeri hedeflenirken kullanılabilir.",
@@ -1101,9 +1329,9 @@
   "Starting_compilation_in_watch_mode_6031": "Derleme, izleme modunda başlatılıyor...",
   "Statement_expected_1129": "Deyim bekleniyor.",
   "Statements_are_not_allowed_in_ambient_contexts_1036": "Çevresel bağlamlarda deyimlere izin verilmez.",
+  "Static_fields_with_private_names_can_t_have_initializers_when_the_useDefineForClassFields_flag_is_no_2805": "'--useDefineForClassFields' bayrağı 'esnext' öğesinin '--target' hedefi ile belirtilmediğinde özel adlara sahip statik alanlar başlatıcılara sahip olamaz. '--useDefineForClassFields' bayrağını eklemeyi düşünün.",
   "Static_members_cannot_reference_class_type_parameters_2302": "Statik üyeler sınıf türündeki parametrelere başvuramaz.",
   "Static_property_0_conflicts_with_built_in_property_Function_0_of_constructor_function_1_2699": "'{0}' statik özelliği, '{1}' oluşturucu işlevinin yerleşik özelliği olan 'Function.{0}' ile çakışıyor.",
-  "Strict_Type_Checking_Options_6173": "Katı Tür Denetimi Seçenekleri",
   "String_literal_expected_1141": "Dize sabit değeri bekleniyor.",
   "String_literal_with_double_quotes_expected_1327": "Çift tırnak içine alınmış bir dize sabit değeri bekleniyor.",
   "Stylize_errors_and_messages_using_color_and_context_experimental_6073": "Renk ve bağlam kullanarak hataların ve iletilerin stilini belirleyin (deneysel).",
@@ -1117,9 +1345,10 @@
   "Super_calls_are_not_permitted_outside_constructors_or_in_nested_functions_inside_constructors_2337": "Super çağrılarına oluşturucu dışında veya oluşturucu içindeki iç içe işlevlerde izin verilmez.",
   "Suppress_excess_property_checks_for_object_literals_6072": "Nesne sabit değerlerine ait fazla özellik denetimlerini gösterme.",
   "Suppress_noImplicitAny_errors_for_indexing_objects_lacking_index_signatures_6055": "Dizin imzaları olmayan nesneler için dizin oluştururken noImplicitAny hatalarını gösterme.",
+  "Suppress_noImplicitAny_errors_when_indexing_objects_that_lack_index_signatures_6703": "Dizin imzası olmayan nesnelerin dizinini oluştururken `noImplicitAny` hatalarını gizleyin.",
   "Switch_each_misused_0_to_1_95138": "Yanlış kullanılan tüm '{0}' öğelerini '{1}' olarak değiştir",
   "Symbol_reference_does_not_refer_to_the_global_Symbol_constructor_object_2470": "'Symbol' başvurusu, genel Simge oluşturucu nesnesine başvurmaz.",
-  "Synchronously_call_callbacks_and_update_the_state_of_directory_watchers_on_platforms_that_don_t_supp_6228": "Geri çağırmaları eşzamanlı olarak çağırın ve özyinelemeli izlemeyi yerel olarak desteklemeyen platformlardaki dizin izleyicilerinin durumunu güncelleştirin.",
+  "Synchronously_call_callbacks_and_update_the_state_of_directory_watchers_on_platforms_that_don_t_supp_6704": "Geri çağırmaları eşzamanlı olarak çağırın ve özyinelemeli izlemeyi yerel olarak desteklemeyen platformlardaki dizin izleyicilerinin durumunu güncelleştirin.",
   "Syntax_Colon_0_6023": "Söz dizimi: {0}",
   "Tag_0_expects_at_least_1_arguments_but_the_JSX_factory_2_provides_at_most_3_6229": "'{0}' etiketi en az '{1}' bağımsız değişken bekliyor, ancak '{2}' JSX fabrikası en fazla '{3}' tane sağlıyor.",
   "Tagged_template_expressions_are_not_permitted_in_an_optional_chain_1358": "İsteğe bağlı bir zincirde etiketli şablon ifadelerine izin verilmiyor.",
@@ -1134,17 +1363,19 @@
   "The_arguments_object_cannot_be_referenced_in_an_arrow_function_in_ES3_and_ES5_Consider_using_a_stand_2496": "ES3 ve ES5'te bulunan bir ok işlevinde 'arguments' nesnesine başvuru yapılamaz. Standart bir işlev ifadesi kullanmayı göz önünde bulundurun.",
   "The_arguments_object_cannot_be_referenced_in_an_async_function_or_method_in_ES3_and_ES5_Consider_usi_2522": "ES3 ve ES5'te 'arguments' nesnesine zaman uyumsuz bir işlev veya metot içinde başvurulamaz. Standart bir işlev veya metot kullanmayı düşünün.",
   "The_body_of_an_if_statement_cannot_be_the_empty_statement_1313": "'if' deyiminin gövdesi boş deyim olamaz.",
-  "The_bundledPackageName_option_must_be_provided_when_using_outFile_and_node_module_resolution_with_de_1391": "Bildirim gösterimi ile outFile ve düğüm modülü çözümlemesi kullanılırken `bundledPackageName` seçeneği belirtilmelidir.",
+  "The_bundledPackageName_option_must_be_provided_when_using_outFile_and_node_module_resolution_with_de_1391": "Bildirim gösterimi ile outFile ve düğüm modülü çözümlemesi kullanılırken 'bundledPackageName' seçeneği sağlanmalıdır.",
   "The_call_would_have_succeeded_against_this_implementation_but_implementation_signatures_of_overloads_2793": "Çağrı, bu uygulamada başarılı olabilirdi, ancak aşırı yüklemelerin uygulama imzaları dışarıdan görünmüyor.",
   "The_character_set_of_the_input_files_6163": "Giriş dosyalarının karakter kümesi.",
   "The_containing_arrow_function_captures_the_global_value_of_this_7041": "Kapsayıcı ok işlevi, 'this' öğesinin genel değerini yakalar.",
   "The_containing_function_or_module_body_is_too_large_for_control_flow_analysis_2563": "İçeren işlev veya modül gövdesi, denetim akışı analizi için çok büyük.",
   "The_current_host_does_not_support_the_0_option_5001": "Mevcut ana bilgisayar '{0}' seçeneğini desteklemiyor.",
   "The_declaration_of_0_that_you_probably_intended_to_use_is_defined_here_18018": "Büyük olasılıkla kullanmayı amaçladığınız '{0}' bildirimi burada tanımlanır",
+  "The_declaration_was_marked_as_deprecated_here_2798": "Bildirim burada kullanım dışı olarak işaretlendi.",
   "The_expected_type_comes_from_property_0_which_is_declared_here_on_type_1_6500": "Beklenen tür, burada '{1}' türünde bildirilen '{0}' özelliğinden geliyor",
   "The_expected_type_comes_from_the_return_type_of_this_signature_6502": "Beklenen tür bu imzanın dönüş türünden geliyor.",
   "The_expected_type_comes_from_this_index_signature_6501": "Beklenen tür bu dizin imzasından geliyor.",
   "The_expression_of_an_export_assignment_must_be_an_identifier_or_qualified_name_in_an_ambient_context_2714": "Bir dışarı aktarma ataması ifadesi, çevresel bağlamda bir tanımlayıcı veya tam ad olmalıdır.",
+  "The_file_is_in_the_program_because_Colon_1430": "Dosya, şu nedenle programın içinde:",
   "The_files_list_in_config_file_0_is_empty_18002": "'{0}' yapılandırma dosyasındaki 'dosyalar' listesi boş.",
   "The_first_export_default_is_here_2752": "İlk dışarı aktarma varsayılanı buradadır.",
   "The_first_parameter_of_the_then_method_of_a_promise_must_be_a_callback_1060": "Promise'in 'then' metodunun ilk parametresi, bir geri arama parametresi olmalıdır.",
@@ -1168,6 +1399,7 @@
   "The_left_hand_side_of_a_for_in_statement_must_be_of_type_string_or_any_2405": "'for...in' deyiminin sol tarafı 'string' veya 'any' türünde olmalıdır.",
   "The_left_hand_side_of_a_for_of_statement_cannot_use_a_type_annotation_2483": "'for...of' deyiminin sol tarafında tür ek açıklaması kullanılamaz.",
   "The_left_hand_side_of_a_for_of_statement_may_not_be_an_optional_property_access_2781": "'for...of' deyiminin sol tarafı, isteğe bağlı bir özellik erişimi olamaz.",
+  "The_left_hand_side_of_a_for_of_statement_may_not_be_async_1106": "'for...of' deyiminin sol tarafı, asenkron olamaz.",
   "The_left_hand_side_of_a_for_of_statement_must_be_a_variable_or_a_property_access_2487": "'for...of' deyiminin sol tarafında bir değişken veya özellik erişimi bulunmalıdır.",
   "The_left_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type_2362": "Aritmetik işlemin sol tarafı, 'any', 'number', 'bigint' veya bir sabit listesi türünde olmalıdır.",
   "The_left_hand_side_of_an_assignment_expression_may_not_be_an_optional_property_access_2779": "Atama ifadesinin sol tarafı, isteğe bağlı bir özellik erişimi olamaz.",
@@ -1185,15 +1417,18 @@
   "The_parser_expected_to_find_a_to_match_the_token_here_1007": "Ayrıştırıcı, buradaki '{' belirteciyle eşleştirmek için bir '}' bulmayı bekliyordu.",
   "The_property_0_cannot_be_accessed_on_type_1_within_this_class_because_it_is_shadowed_by_another_priv_18014": "'{0}' özelliği aynı yazımı içeren başka bir özel tanımlayıcı tarafından gölgelendiğinden bu sınıf içindeki '{1}' türü üzerinde bu özelliğe erişilemiyor.",
   "The_return_type_of_a_JSX_element_constructor_must_return_an_object_type_2601": "JSX öğe oluşturucusuna ait dönüş türü bir nesne türünü döndürmelidir.",
+  "The_return_type_of_a_get_accessor_must_be_assignable_to_its_set_accessor_type_2380": "'get' erişimcisinin dönüş türü, 'set' erişimcisinin türüne atanabilmelidir",
   "The_return_type_of_a_parameter_decorator_function_must_be_either_void_or_any_1237": "Parametre dekoratör işlevine ait dönüş türü 'void' veya 'any' olmalıdır.",
   "The_return_type_of_a_property_decorator_function_must_be_either_void_or_any_1236": "Özellik dekoratör işlevine ait dönüş türü 'void' veya 'any' olmalıdır.",
   "The_return_type_of_an_async_function_must_either_be_a_valid_promise_or_must_not_contain_a_callable_t_1058": "Zaman uyumsuz bir işlevin dönüş türü, geçerli bir promise olmalı veya çağrılabilir 'then' üyesi içermemelidir.",
   "The_return_type_of_an_async_function_or_method_must_be_the_global_Promise_T_type_Did_you_mean_to_wri_1064": "Asenkron bir işlevin ya da metodun dönüş türü, genel Promise<T> türü olmalıdır. 'Promise<{0}>' yazmak mı istediniz?",
   "The_right_hand_side_of_a_for_in_statement_must_be_of_type_any_an_object_type_or_a_type_parameter_but_2407": "'for...in' deyiminin sağ tarafı 'any' türünde, bir nesne türü veya tür parametresi olmalıdır ancak burada '{0}' türüne sahip.",
   "The_right_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type_2363": "Aritmetik işlemin sağ tarafı, 'any', 'number', 'bigint' veya bir sabit listesi türünde olmalıdır.",
-  "The_right_hand_side_of_an_in_expression_must_be_of_type_any_an_object_type_or_a_type_parameter_2361": "'in' ifadesinin sağ tarafı 'any' türünde, bir nesne türü veya tür parametresi olmalıdır.",
+  "The_right_hand_side_of_an_in_expression_must_not_be_a_primitive_2361": "'in' ifadesinin sağ tarafı basit olmamalıdır.",
   "The_right_hand_side_of_an_instanceof_expression_must_be_of_type_any_or_of_a_type_assignable_to_the_F_2359": "'instanceof' ifadesinin sağ tarafı 'any' türünde veya 'Function' arabirim türüne atanabilir bir türde olmalıdır.",
+  "The_root_value_of_a_0_file_must_be_an_object_5092": "'{0}' dosyasının kök değeri bir nesne olmalıdır.",
   "The_shadowing_declaration_of_0_is_defined_here_18017": "'{0}' için gölgeleme bildirimi burada tanımlanır",
+  "The_signature_0_of_1_is_deprecated_6387": "'{1}' öğesinin '{0}' imzası kullanım dışı bırakıldı.",
   "The_specified_path_does_not_exist_Colon_0_5058": "Belirtilen yol yok: '{0}'.",
   "The_tag_was_first_specified_here_8034": "Etiket ilk olarak burada belirtildi.",
   "The_target_of_an_assignment_must_be_a_variable_or_a_property_access_2541": "Atama hedefi, bir değişken veya özellik erişimi olmalıdır.",
@@ -1204,6 +1439,7 @@
   "The_type_0_is_readonly_and_cannot_be_assigned_to_the_mutable_type_1_4104": "'{0}' türü 'readonly' olduğundan değiştirilebilir '{1}' türüne atanamıyor.",
   "The_type_argument_for_type_parameter_0_cannot_be_inferred_from_the_usage_Consider_specifying_the_typ_2453": "'{0}' tür parametresinin tür bağımsız değişkeni kullanımdan belirlenemez. Tür bağımsız değişkenlerini açık olarak belirtmeyi göz önünde bulundurun.",
   "The_type_of_a_function_declaration_must_match_the_function_s_signature_8030": "İşlev bildiriminin türü işlevin imzasıyla eşleşmelidir.",
+  "The_type_of_this_node_cannot_be_serialized_because_its_property_0_cannot_be_serialized_4118": "'{0}' özelliği seri hale getirilemediğinden bu düğüm türü seri hale getirilemiyor.",
   "The_type_returned_by_the_0_method_of_an_async_iterator_must_be_a_promise_for_a_type_with_a_value_pro_2547": "Asenkron yineleyicinin '{0}()' metodu tarafından döndürülen tür, 'value' özelliğine sahip bir tür için promise olmalıdır.",
   "The_type_returned_by_the_0_method_of_an_iterator_must_have_a_value_property_2490": "Bir yineleyicinin '{0}()' metodu tarafından döndürülen tür, 'value' özelliğine sahip olmalıdır.",
   "The_types_of_0_are_incompatible_between_these_types_2200": "'{0}' türleri bu türler arasında uyumsuz.",
@@ -1214,7 +1450,8 @@
   "This_JSX_tag_s_0_prop_expects_a_single_child_of_type_1_but_multiple_children_were_provided_2746": "Bu JSX etiketinin '{0}' özelliği, '{1}' türünde tek bir alt öğe bekliyor ancak birden çok alt öğe sağlandı.",
   "This_JSX_tag_s_0_prop_expects_type_1_which_requires_multiple_children_but_only_a_single_child_was_pr_2745": "Bu JSX etiketinin '{0}' özelliği, birden çok alt öğe gerektiren '{1}' türünü bekliyor ancak yalnızca tek bir alt öğe sağlandı.",
   "This_condition_will_always_return_0_since_the_types_1_and_2_have_no_overlap_2367": "'{1}' ve '{2}' türleri çakışmadığından bu koşul her zaman '{0}' döndürür.",
-  "This_condition_will_always_return_true_since_the_function_is_always_defined_Did_you_mean_to_call_it__2774": "İşlev her zaman tanımlı olduğundan bu koşul her zaman true döndürür. Bunun yerine işlevi çağırmayı mı istediniz?",
+  "This_condition_will_always_return_true_since_this_0_is_always_defined_2801": "Bu '{0}' her zaman tanımlandığı için bu koşul her zaman doğru olacaktır.",
+  "This_condition_will_always_return_true_since_this_function_is_always_defined_Did_you_mean_to_call_it_2774": "İşlev her zaman tanımlı olduğundan bu koşul her zaman true döndürür. Bunun yerine işlevi çağırmayı mı istediniz?",
   "This_constructor_function_may_be_converted_to_a_class_declaration_80002": "Bu oluşturucu işlevi bir sınıf bildirimine dönüştürülebilir.",
   "This_expression_is_not_callable_2349": "Bu ifade çağrılabilir değil.",
   "This_expression_is_not_callable_because_it_is_a_get_accessor_Did_you_mean_to_use_it_without_6234": "Bu ifade 'get' erişimcisi olduğundan çağrılamaz. Bunu '()' olmadan mı kullanmak istiyorsunuz?",
@@ -1223,15 +1460,23 @@
   "This_import_is_never_used_as_a_value_and_must_use_import_type_because_importsNotUsedAsValues_is_set__1371": "'importsNotUsedAsValues' 'error' olarak ayarlandığından, bu içeri aktarma hiçbir zaman değer olarak kullanılmaz ve 'import type' kullanmalıdır.",
   "This_is_the_declaration_being_augmented_Consider_moving_the_augmenting_declaration_into_the_same_fil_6233": "Bu, genişletilmekte olan bildirimdir. Genişleten bildirimi aynı dosyaya taşımayı düşünün.",
   "This_may_be_converted_to_an_async_function_80006": "Bu, asenkron bir işleve dönüştürülebilir.",
+  "This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0_4113": "Bu üye '{0}' temel sınıfında bildirilmediğinden 'override' değiştiricisine sahip olamaz.",
+  "This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0_Did_you__4117": "Bu üye, '{0}' temel sınıfında bildirilmediğinden 'override' değiştiricisine sahip olamaz. '{1}' öğesini mi kastettiniz?",
+  "This_member_cannot_have_an_override_modifier_because_its_containing_class_0_does_not_extend_another__4112": "Kapsayan '{0}' sınıfı başka bir sınıfı genişletmediğinden bu üye 'override' değiştiricisine sahip olamaz.",
+  "This_member_must_have_an_override_modifier_because_it_overrides_a_member_in_the_base_class_0_4114": "Bu üye, '{0}' temel sınıfındaki bir üyeyi geçersiz kıldığından 'override' değiştiricisine sahip olmalıdır.",
+  "This_member_must_have_an_override_modifier_because_it_overrides_an_abstract_method_that_is_declared__4116": "Bu üye, '{0}' temel sınıfında bildirilen soyut bir metodu geçersiz kıldığından 'override' değiştiricisine sahip olmalıdır.",
   "This_module_can_only_be_referenced_with_ECMAScript_imports_Slashexports_by_turning_on_the_0_flag_and_2497": "Bu modüle yalnızca '{0}' bayrağını açıp modülün varsayılan dışarı aktarma işlemine başvurarak ECMAScript içeri/dışarı aktarma işlemleri ile başvurulabilir.",
   "This_module_is_declared_with_using_export_and_can_only_be_used_with_a_default_import_when_using_the__2594": "Bu modül, 'export =' kullanılarak bildirildi ve yalnızca '{0}' bayrağı kullanılırken varsayılan bir içeri aktarma ile kullanılabilir.",
   "This_overload_signature_is_not_compatible_with_its_implementation_signature_2394": "Bu aşırı yükleme imzası, uygulama imzasıyla uyumlu değil.",
   "This_parameter_is_not_allowed_with_use_strict_directive_1346": "Bu parametreye 'use strict' yönergesi ile izin verilmiyor.",
+  "This_parameter_property_must_have_an_override_modifier_because_it_overrides_a_member_in_base_class_0_4115": "Bu parametre özelliği, '{0}' temel sınıfındaki bir üyeyi geçersiz kıldığından bir 'override' değiştiricisi içermelidir.",
   "This_spread_always_overwrites_this_property_2785": "Bu yayılma her zaman bu özelliğin üzerine yazar.",
   "This_syntax_requires_an_imported_helper_but_module_0_cannot_be_found_2354": "Bu söz dizimi, içeri aktarılan bir yardımcı gerektiriyor ancak '{0}' modülü bulunamıyor.",
   "This_syntax_requires_an_imported_helper_named_1_which_does_not_exist_in_0_Consider_upgrading_your_ve_2343": "Bu söz dizimi, '{0}' içinde bulunmayan '{1}' adlı içeri aktarılmış bir yardımcı gerektirir. '{0}' sürümünüzü yükseltmeyi deneyin.",
+  "This_syntax_requires_an_imported_helper_named_1_with_2_parameters_which_is_not_compatible_with_the_o_2807": "Bu söz dizimi, '{0}' içindeki yardımcı ile uyumlu olmayan, {2} parametreye sahip '{1}' adlı içeri aktarılan yardımcıyı gerektiriyor. '{0}' sürümünüzü yükseltmeyi düşünün.",
   "Top_level_await_expressions_are_only_allowed_when_the_module_option_is_set_to_esnext_or_system_and_t_1378": "Üst düzey 'await' ifadelerine yalnızca 'module' seçeneği 'esnext' ya da 'system' olarak ayarlandığında ve 'target' seçeneği 'es2017' veya üzeri olarak ayarlandığında izin verilir.",
   "Top_level_declarations_in_d_ts_files_must_start_with_either_a_declare_or_export_modifier_1046": ".d.ts dosyalarındaki üst düzey bildirimler bir 'declare' veya 'export' değiştiricisi ile başlamalıdır.",
+  "Top_level_for_await_loops_are_only_allowed_when_the_module_option_is_set_to_esnext_or_system_and_the_1432": "Üst düzey 'for await' döngülerine yalnızca 'module' seçeneği 'esnext' ya da 'system' olarak ayarlandığında ve 'target' seçeneği 'es2017' veya üzeri olarak ayarlandığında izin verilir.",
   "Trailing_comma_not_allowed_1009": "Sona eklenen virgüle izin verilmez.",
   "Transpile_each_file_as_a_separate_module_similar_to_ts_transpileModule_6153": "Her dosyayı ayrı bir modül olarak derleyin ('ts.transpileModule' gibi).",
   "Try_npm_i_save_dev_types_Slash_1_if_it_exists_or_add_a_new_declaration_d_ts_file_containing_declare__7035": "Varsa `npm i --save-dev @types/{1}` deneyin veya `declare module '{0}';` deyimini içeren yeni bir bildirim (.d.ts) dosyası ekleyin",
@@ -1240,6 +1485,7 @@
   "Tuple_members_must_all_have_names_or_all_not_have_names_5084": "Tüm demet üyelerinin adı olmalı veya hiçbirinin adı olmamalıdır.",
   "Tuple_type_0_of_length_1_has_no_element_at_index_2_2493": "'{1}' uzunluğundaki '{0}' demet türü, '{2}' dizininde öğe içermiyor.",
   "Tuple_type_arguments_circularly_reference_themselves_4110": "Demet türü bağımsız değişkenleri döngüsel olarak kendisine başvuruyor.",
+  "Type_0_can_only_be_iterated_through_when_using_the_downlevelIteration_flag_or_with_a_target_of_es201_2802": "'{0}' türü yalnızca '--downlevelIteration' bayrağı kullanılarak veya '--target' için 'es2015' ya da üzeri kullanıldığında yinelenebilir.",
   "Type_0_cannot_be_used_as_an_index_type_2538": "'{0}' türü, dizin türü olarak kullanılamaz.",
   "Type_0_cannot_be_used_to_index_type_1_2536": "'{0}' türü, '{1}' türünü dizinlemek için kullanılamaz.",
   "Type_0_does_not_satisfy_the_constraint_1_2344": "'{0}' türü, '{1}' kısıtlamasını karşılamıyor.",
@@ -1264,7 +1510,9 @@
   "Type_0_must_have_a_Symbol_iterator_method_that_returns_an_iterator_2488": "'{0}' türünün, bir yineleyici döndüren '[Symbol.iterator]()' metoduna sahip olması gerekir.",
   "Type_0_provides_no_match_for_the_signature_1_2658": "'{0}' türü, '{1}' imzası için eşleşme sağlamıyor.",
   "Type_0_recursively_references_itself_as_a_base_type_2310": "'{0}' türü, öz yinelemeli şekilde kendine temel tür olarak başvuruyor.",
+  "Type_Checking_6248": "Tür Denetlemesi",
   "Type_alias_0_circularly_references_itself_2456": "'{0}' tür diğer adı, döngüsel olarak kendine başvuruyor.",
+  "Type_alias_must_be_given_a_name_1439": "Tür takma adına bir ad verilmesi gerekir.",
   "Type_alias_name_cannot_be_0_2457": "Tür diğer adı '{0}' olamaz.",
   "Type_aliases_can_only_be_used_in_TypeScript_files_8008": "Tür diğer adları, yalnızca TypeScript dosyalarında kullanılabilir.",
   "Type_annotation_cannot_appear_on_a_constructor_declaration_1093": "Tür ek açıklaması, oluşturucu bildiriminde görüntülenemez.",
@@ -1276,10 +1524,15 @@
   "Type_arguments_cannot_be_used_here_1342": "Tür bağımsız değişkenleri burada kullanılamaz.",
   "Type_arguments_for_0_circularly_reference_themselves_4109": "'{0}' için tür bağımsız değişkenleri, döngüsel olarak kendisine başvuruyor.",
   "Type_assertion_expressions_can_only_be_used_in_TypeScript_files_8016": "Tür onaylama ifadeleri, yalnızca TypeScript dosyalarında kullanılabilir.",
+  "Type_at_position_0_in_source_is_not_compatible_with_type_at_position_1_in_target_2626": "Kaynaktaki {0} konumunda bulunan tür, hedefteki {1} konumunda bulunan türle uyumlu değil.",
+  "Type_at_positions_0_through_1_in_source_is_not_compatible_with_type_at_position_2_in_target_2627": "Kaynaktaki {0} ile {1} arasındaki konumlarda bulunan tür, hedefteki {2} konumunda bulunan türle uyumlu değil.",
+  "Type_catch_clause_variables_as_unknown_instead_of_any_6803": "Catch yan tümcesi değişkenlerini 'any' yerine 'unknown' olarak yazın.",
   "Type_declaration_files_to_be_included_in_compilation_6124": "Derlemeye eklenecek tür bildirim dosyaları.",
   "Type_expected_1110": "Tür bekleniyor.",
   "Type_instantiation_is_excessively_deep_and_possibly_infinite_2589": "Tür örneği oluşturma işlemi, fazla ayrıntılı ve büyük olasılıkla sınırsız.",
   "Type_is_referenced_directly_or_indirectly_in_the_fulfillment_callback_of_its_own_then_method_1062": "Türe, kendi 'then' metodunun tamamlama geri aramasında doğrudan veya dolaylı olarak başvuruluyor.",
+  "Type_library_referenced_via_0_from_file_1_1402": "'{1}' dosyasından '{0}' aracılığıyla başvurulan tür kitaplığı",
+  "Type_library_referenced_via_0_from_file_1_with_packageId_2_1403": "'{2}' paket kimliğine sahip '{1}' dosyasından '{0}' aracılığıyla başvurulan tür kitaplığı",
   "Type_of_await_operand_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member_1320": "'await' işleneninin türü, geçerli bir promise olmalı veya çağrılabilir 'then' üyesi içermemelidir.",
   "Type_of_computed_property_s_value_is_0_which_is_not_assignable_to_type_1_2418": "Hesaplanan özellik değerinin '{0}' türü, '{1}' türüne atanamıyor.",
   "Type_of_iterated_elements_of_a_yield_Asterisk_operand_must_either_be_a_valid_promise_or_must_not_con_1322": "Bir 'yield*' işleneninin yinelenen öğelerinin türü, geçerli bir promise olmalı veya çağrılabilir 'then' üyesi içermemelidir.",
@@ -1305,6 +1558,7 @@
   "Type_parameter_name_cannot_be_0_2368": "Tür parametresi adı '{0}' olamaz.",
   "Type_parameters_cannot_appear_on_a_constructor_declaration_1092": "Tür parametreleri, oluşturucu bildiriminde görüntülenemez.",
   "Type_predicate_0_is_not_assignable_to_1_1226": "'{0}' tür koşulu, '{1}' öğesine atanamaz.",
+  "Type_produces_a_tuple_type_that_is_too_large_to_represent_2799": "Tür, temsil edilemeyecek kadar büyük olan bir demet türü oluşturuyor.",
   "Type_reference_directive_0_was_not_resolved_6120": "======== '{0}' tür başvuru yönergesi çözümlenmedi. ========",
   "Type_reference_directive_0_was_successfully_resolved_to_1_primary_Colon_2_6119": "======== '{0}' tür başvuru yönergesi '{1}' olarak başarıyla çözümlendi, birincil: {2}. ========",
   "Type_reference_directive_0_was_successfully_resolved_to_1_with_Package_ID_2_primary_Colon_3_6219": "======== '{0}' tür başvuru yönergesi '{2}' Paket Kimliğine sahip '{1}' olarak başarıyla çözümlendi, birincil: {3}. ========",
@@ -1318,6 +1572,7 @@
   "Unable_to_resolve_signature_of_parameter_decorator_when_called_as_an_expression_1239": "Bir ifade olarak çağrıldığında parametre dekoratörünün imzası çözümlenemez.",
   "Unable_to_resolve_signature_of_property_decorator_when_called_as_an_expression_1240": "Bir ifade olarak çağrıldığında özellik dekoratörünün imzası çözümlenemez.",
   "Unexpected_end_of_text_1126": "Beklenmeyen metin sonu.",
+  "Unexpected_keyword_or_identifier_1434": "Beklenmeyen anahtar kelime veya tanımlayıcı.",
   "Unexpected_token_1012": "Beklenmeyen belirteç.",
   "Unexpected_token_A_constructor_method_accessor_or_property_was_expected_1068": "Beklenmeyen belirteç. Bir oluşturucu, metot, erişimci veya özellik bekleniyordu.",
   "Unexpected_token_A_type_parameter_name_was_expected_without_curly_braces_1069": "Beklenmeyen belirteç. Küme ayracı olmadan bir tür parametresi adı bekleniyordu.",
@@ -1328,6 +1583,7 @@
   "Unknown_build_option_0_Did_you_mean_1_5077": "Bilinmeyen '{0}' derleme seçeneği. Şunu mu demek istediniz: '{1}'?",
   "Unknown_compiler_option_0_5023": "Bilinmeyen '{0}' derleyici seçeneği.",
   "Unknown_compiler_option_0_Did_you_mean_1_5025": "Bilinmeyen '{0}' derleyici seçeneği. Şunu mu demek istediniz: '{1}'?",
+  "Unknown_keyword_or_identifier_Did_you_mean_0_1435": "Bilinmeyen anahtar sözcük veya tanımlayıcı. “{0}” mi demek istediniz?",
   "Unknown_option_excludes_Did_you_mean_exclude_6114": "'Excludes' seçeneği bilinmiyor. 'Exclude' seçeneğini mi belirtmek istediniz?",
   "Unknown_type_acquisition_option_0_17010": "Bilinmeyen '{0}' tür alımı seçeneği.",
   "Unknown_type_acquisition_option_0_Did_you_mean_1_17018": "Bilinmeyen '{0}' tür alma seçeneği. Şunu mu demek istediniz: '{1}'?",
@@ -1350,6 +1606,7 @@
   "Use_element_access_for_all_undeclared_properties_95146": "Tüm bildirilmemiş özellikler için öğe erişimi kullanın.",
   "Use_synthetic_default_member_95016": "Yapay 'default' üyesini kullanın.",
   "Using_a_string_in_a_for_of_statement_is_only_supported_in_ECMAScript_5_and_higher_2494": "'for...of' deyiminde dize kullanma yalnızca ECMAScript 5 veya üzerinde desteklenir.",
+  "Using_build_b_will_make_tsc_behave_more_like_a_build_orchestrator_than_a_compiler_This_is_used_to_tr_6915": "--build kullanarak -b, tsc’nin derleyici yerine derleme düzenleyici gibi davranmasına yol açar. Bu, kompozit projeler oluşturmayı tetiklemek için kullanılır. Daha fazla bilgi edinmek için bkz. {0}",
   "Using_compiler_options_of_project_reference_redirect_0_6215": "'{0}' proje başvurusu yeniden yönlendirmesinin derleyici seçenekleri kullanılıyor.",
   "VERSION_6036": "SÜRÜM",
   "Value_of_type_0_has_no_properties_in_common_with_type_1_Did_you_mean_to_call_it_2560": "'{0}' türünün değeri ile '{1}' türü arasında hiç ortak özellik yok. Bunun yerine çağrı yapmak mı istediniz?",
@@ -1361,10 +1618,16 @@
   "Variable_0_is_used_before_being_assigned_2454": "'{0}' değişkeni atanmadan önce kullanılır.",
   "Variable_declaration_expected_1134": "Değişken bildirimi bekleniyor.",
   "Variable_declaration_list_cannot_be_empty_1123": "Değişken bildirim listesi boş olamaz.",
+  "Variable_declaration_not_allowed_at_this_location_1440": "Bu konumda değişken bildirimine izin verilmiyor.",
+  "Variadic_element_at_position_0_in_source_does_not_match_element_at_position_1_in_target_2625": "Kaynaktaki {0} konumunda bulunan değişen sayıda bağımsız değişken içeren öğe, hedefteki {1} konumunda bulunan öğeyle eşleşmiyor.",
   "Version_0_6029": "Sürüm {0}",
   "Visit_https_Colon_Slash_Slashaka_ms_Slashtsconfig_json_to_read_more_about_this_file_95110": "Bu dosya hakkında daha fazla bilgi için https://aka.ms/tsconfig.json adresini ziyaret edin",
+  "WATCH_OPTIONS_6918": "İZLEME SEÇENEKLERİ",
+  "Watch_and_Build_Modes_6250": "İzleme ve Derleme Modları",
   "Watch_input_files_6005": "Giriş dosyalarını izleyin.",
   "Watch_option_0_requires_a_value_of_type_1_5080": "'{0}' izleme seçeneği, {1} türünde bir değer gerektiriyor.",
+  "When_assigning_functions_check_to_ensure_parameters_and_the_return_values_are_subtype_compatible_6698": "İşlevler atanırken, parametrelerin ve dönüş değerlerinin alt tür ile uyumlu olduğundan emin olun.",
+  "When_type_checking_take_into_account_null_and_undefined_6699": "Tür denetimi sırasında `null` ve `undefined` öğelerini hesaba katın.",
   "Whether_to_keep_outdated_console_output_in_watch_mode_instead_of_clearing_the_screen_6191": "Eski konsol çıktısının ekrandan kaldırılmak yerine izleme modunda tutulup tutulmayacağı.",
   "Wrap_all_invalid_characters_in_an_expression_container_95109": "Geçersiz tüm karakterleri bir ifade kapsayıcısında sarmalayın",
   "Wrap_all_object_literal_with_parentheses_95116": "Tüm nesne sabit değerini parantez içine alın",
@@ -1372,10 +1635,12 @@
   "Wrap_in_JSX_fragment_95120": "JSX parçasında sarmala",
   "Wrap_invalid_character_in_an_expression_container_95108": "Geçersiz karakteri bir ifade kapsayıcısında sarmalayın",
   "Wrap_the_following_body_with_parentheses_which_should_be_an_object_literal_95113": "Nesne sabit değeri olması gereken aşağıdaki gövdeyi parantez içine alın",
+  "You_can_learn_about_all_of_the_compiler_options_at_0_6913": "Tüm derleyici seçenekleri hakkında bilgi edinmek için bkz. {0}",
   "You_cannot_rename_a_module_via_a_global_import_8031": "Genel içeri aktarma aracılığıyla bir modülü yeniden adlandıramazsınız.",
   "You_cannot_rename_elements_that_are_defined_in_the_standard_TypeScript_library_8001": "Standart TypeScript kitaplığında tanımlanmış öğeleri yeniden adlandıramazsınız.",
   "You_cannot_rename_this_element_8000": "Bu öğeyi yeniden adlandıramazsınız.",
   "_0_accepts_too_few_arguments_to_be_used_as_a_decorator_here_Did_you_mean_to_call_it_first_and_write__1329": "'{0}' burada dekoratör olarak kullanılmak için çok az bağımsız değişken kabul ediyor. Önce çağırıp '@{0}()' yazmak mı istediniz?",
+  "_0_and_1_index_signatures_are_incompatible_2330": "'{0}' ve '{1}' dizin imzaları uyumsuz.",
   "_0_and_1_operations_cannot_be_mixed_without_parentheses_5076": "'{0}' ve '{1}' işlemleri ayraç olmadan karıştırılamaz.",
   "_0_are_specified_twice_The_attribute_named_0_will_be_overwritten_2710": "'{0}' iki kez belirtildi. '{0}' özniteliğinin üzerine yazılacak.",
   "_0_can_only_be_imported_by_turning_on_the_esModuleInterop_flag_and_using_a_default_import_2596": "'{0}' yalnızca 'esModuleInterop' bayrağı etkinleştirilip varsayılan içeri aktarma kullanılarak içeri aktarılabilir.",
@@ -1396,6 +1661,8 @@
   "_0_implicitly_has_an_1_return_type_but_a_better_type_may_be_inferred_from_usage_7050": "'{0}' örtük olarak bir '{1}' dönüş türüne sahip ancak kullanımdan daha iyi bir tür çıkarsanabilir.",
   "_0_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_reference_7023": "Dönüş türü ek açıklamasına sahip olmadığından ve doğrudan veya dolaylı olarak dönüş ifadelerinden birinde kendine başvurulduğundan, '{0}' öğesi örtük olarak 'any' türüne sahip.",
   "_0_implicitly_has_type_any_because_it_does_not_have_a_type_annotation_and_is_referenced_directly_or__7022": "Bir tür ek açıklamasına sahip olmadığından ve kendi başlatıcısında doğrudan veya dolaylı olarak başvurulduğundan, '{0}' öğesi örtük olarak 'any' türüne sahip.",
+  "_0_index_signatures_are_incompatible_2634": "'{0}' dizin imzaları uyumsuz.",
+  "_0_index_type_1_is_not_assignable_to_2_index_type_3_2413": "'{0}' dizin türü '{1}' ' {2}' dizin türüne '{3}' atanamaz.",
   "_0_is_a_primitive_but_1_is_a_wrapper_object_Prefer_using_0_when_possible_2692": "'{0}' temel elemandır ancak '{1}' sarmalayıcı nesnedir. Mümkün olduğunda '{0}' kullanmayı tercih edin.",
   "_0_is_assignable_to_the_constraint_of_type_1_but_1_could_be_instantiated_with_a_different_subtype_of_5075": "'{0}', '{1}' türündeki kısıtlamaya atanabilir ancak '{1}' örneği, '{2}' kısıtlamasının farklı bir alt türüyle oluşturulabilir.",
   "_0_is_declared_but_its_value_is_never_read_6133": "'{0}' bildirildi ancak değeri hiç okunmadı.",
@@ -1403,7 +1670,7 @@
   "_0_is_declared_here_2728": "'{0}' burada bildirilir.",
   "_0_is_defined_as_a_property_in_class_1_but_is_overridden_here_in_2_as_an_accessor_2611": "'{0}', '{1}' sınıfında bir özellik olarak tanımlandı ancak burada, '{2}' içinde bir erişimci olarak geçersiz kılındı.",
   "_0_is_defined_as_an_accessor_in_class_1_but_is_overridden_here_in_2_as_an_instance_property_2610": "'{0}', '{1}' sınıfında bir erişimci olarak tanımlandı ancak burada, '{2}' içinde örnek özelliği olarak geçersiz kılındı.",
-  "_0_is_deprecated_6385": "'{0}' kullanım dışı bırakıldı",
+  "_0_is_deprecated_6385": "'{0}' kullanım dışı bırakıldı.",
   "_0_is_not_a_valid_meta_property_for_keyword_1_Did_you_mean_2_17012": "'{0}', '{1}' anahtar sözcüğü için geçerli bir meta özellik değil. Bunu mu demek istediniz: '{2}'?",
   "_0_is_not_allowed_as_a_variable_declaration_name_1389": "'{0}' öğesinin değişken bildirim adı olarak kullanılmasına izin verilmiyor.",
   "_0_is_referenced_directly_or_indirectly_in_its_own_base_expression_2506": "'{0}' öğesine kendi temel ifadesinde doğrudan veya dolaylı olarak başvuruluyor.",
@@ -1428,7 +1695,7 @@
   "_0_only_refers_to_a_type_but_is_being_used_as_a_namespace_here_2702": "'{0}' yalnızca bir türe başvuruyor, ancak burada bir ad alanı olarak kullanılıyor.",
   "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_2693": "'{0}' yalnızca bir türe başvuruyor, ancak burada bir değer olarak kullanılıyor.",
   "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_Did_you_mean_to_use_1_in_0_2690": "'{0}' yalnızca bir türe başvuruyor, ancak burada bir değer olarak kullanılıyor. '{0}' içinde '{1}' kullanmak mı istediniz?",
-  "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_Do_you_need_to_change_your_target_library_2585": "'{0}' yalnızca bir türe başvuruyor ancak burada bir değer olarak kullanılıyor. Hedef kitaplığınızı değiştirmeniz gerekiyor mu? `lib` derleyici seçeneğini es2015 veya üzeri olarak değiştirmeyi deneyin.",
+  "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_Do_you_need_to_change_your_target_library_2585": "'{0}' yalnızca bir türe başvuruyor ancak burada bir değer olarak kullanılıyor. Hedef kitaplığınızı değiştirmeniz gerekiyor mu? 'lib' derleyici seçeneğini es2015 veya üzeri olarak değiştirmeyi deneyin.",
   "_0_refers_to_a_UMD_global_but_the_current_file_is_a_module_Consider_adding_an_import_instead_2686": "'{0}' bir UMD genel öğesine başvuruyor, ancak geçerli dosya bir modül. Bunun yerine bir içeri aktarma eklemeyi deneyin.",
   "_0_refers_to_a_value_but_is_being_used_as_a_type_here_Did_you_mean_typeof_0_2749": "'{0}' bir değere başvuruyor ancak burada tür olarak kullanılıyor. 'typeof {0}' kullanmak mı istediniz?",
   "_0_tag_already_specified_1223": "'{0}' etiketi zaten belirtildi.",
@@ -1440,6 +1707,7 @@
   "_0_which_lacks_return_type_annotation_implicitly_has_an_1_yield_type_7055": "Dönüş türü ek açıklaması olmayan '{0}', örtük olarak '{1}' yield türüne sahip.",
   "abstract_modifier_can_only_appear_on_a_class_method_or_property_declaration_1242": "'abstract' değiştiricisi yalnızca sınıf, metot veya özellik bildiriminde görünebilir.",
   "and_here_6204": "ve buraya.",
+  "arguments_cannot_be_referenced_in_property_initializers_2815": "Özellik başlatıcılarda 'arguments' öğesine başvurulamaz.",
   "await_expressions_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_fi_1375": "'await' ifadelerine yalnızca dosya bir modül olduğunda dosyanın en üst düzeyinde izin verilir ancak bu dosyanın içeri veya dışarı aktarma işlemi yok. Bu dosyayı modül yapmak için boş bir 'export {}' eklemeyi deneyin.",
   "await_expressions_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_1308": "'await' ifadelerine yalnızca asenkron işlevler içinde ve modüllerin en üst düzeylerinde izin verilir.",
   "await_expressions_cannot_be_used_in_a_parameter_initializer_2524": "'await' ifadeleri bir parametre başlatıcısında kullanılamaz.",
@@ -1456,6 +1724,7 @@
   "const_enums_can_only_be_used_in_property_or_index_access_expressions_or_the_right_hand_side_of_an_im_2475": "'const' sabit listeleri yalnızca bir özellikte, dizin erişim ifadelerinde, içeri aktarma bildiriminin veya dışarı aktarma atamasının sağ tarafında ya da tür sorgusunda kullanılabilir.",
   "constructor_cannot_be_used_as_a_parameter_property_name_2398": "'constructor', parametre özellik adı olarak kullanılamaz.",
   "constructor_is_a_reserved_word_18012": "'#constructor' ayrılmış bir sözcüktür.",
+  "default_Colon_6903": "varsayılan:",
   "delete_cannot_be_called_on_an_identifier_in_strict_mode_1102": "'delete', katı moddaki bir tanımlayıcıda çağrılamaz.",
   "delete_this_Project_0_is_up_to_date_because_it_was_previously_built_6360": "bunu silin - '{0}' projesi önceden derlenmiş olduğundan güncel",
   "export_Asterisk_does_not_re_export_a_default_1195": "'export *' varsayılanı yeniden dışarı aktarmaz.",
@@ -1466,17 +1735,26 @@
   "extends_clause_of_exported_class_0_has_or_is_using_private_name_1_4020": "Dışarı aktarılan '{0}' sınıfının 'extends' yan tümcesi, '{1}' özel adına sahip veya bu adı kullanıyor.",
   "extends_clause_of_exported_class_has_or_is_using_private_name_0_4021": "Dışarı aktarılan sınıfın 'extends' yan tümcesi, '{0}' özel adına sahip veya bu adı kullanıyor.",
   "extends_clause_of_exported_interface_0_has_or_is_using_private_name_1_4022": "Dışarı aktarılan '{0}' arabiriminin 'extends' yan tümcesi, '{1}' özel adına sahip veya bu adı kullanıyor.",
+  "false_unless_composite_is_set_6906": "'Kompozit' ayarlanmamışsa 'false'",
+  "false_unless_strict_is_set_6905": "'Katı' ayarlanmamışsa 'false'",
   "file_6025": "dosya",
+  "for_await_loops_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_file_1431": "'for await' döngülerine yalnızca dosya bir modül olduğunda dosyanın en üst düzeyinde izin verilir ancak bu dosyanın içeri veya dışarı aktarma işlemi yok. Bu dosyayı modül yapmak için boş bir 'export {}' eklemeyi deneyin.",
+  "for_await_loops_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_1103": "'for await' döngülerine yalnızca asenkron işlevler içinde ve modüllerin en üst düzeylerinde izin verilir.",
   "get_and_set_accessor_must_have_the_same_this_type_2682": "'get' ve 'set' erişimcisi aynı 'this' türüne sahip olmalıdır.",
-  "get_and_set_accessor_must_have_the_same_type_2380": "'get' ve 'set' erişimcisi aynı türde olmalıdır.",
   "get_and_set_accessors_cannot_declare_this_parameters_2784": "'get' ve 'set' erişimcileri 'this' parametreleri bildiremez.",
+  "if_files_is_specified_otherwise_Asterisk_Asterisk_Slash_Asterisk_6908": "'Files' ayarlanmışsa ‘[]', aksi takdirde `[\"**/*\"]5D;`",
   "implements_clause_already_seen_1175": "'implements' yan tümcesi zaten görüldü.",
   "implements_clauses_can_only_be_used_in_TypeScript_files_8005": "'implements' yan tümceleri yalnızca TypeScript dosyalarında kullanılabilir.",
   "import_can_only_be_used_in_TypeScript_files_8002": "'import ... =' yalnızca TypeScript dosyalarında kullanılabilir.",
   "infer_declarations_are_only_permitted_in_the_extends_clause_of_a_conditional_type_1338": "'infer' bildirimlerine yalnızca bir koşullu türün 'extends' yan tümcesinde izin verilir.",
   "let_declarations_can_only_be_declared_inside_a_block_1157": "'let' bildirimleri yalnızca bu bloğun içinde bildirilebilir.",
   "let_is_not_allowed_to_be_used_as_a_name_in_let_or_const_declarations_2480": "'let' ifadesi, 'let' veya 'const' bildirimlerinde ad olarak kullanılamaz.",
+  "module_AMD_or_UMD_or_System_or_ES6_then_Classic_Otherwise_Node_69010": "module === 'AMD' veya 'UMD' veya 'Sistem' veya 'ES6' ve ardından 'Klasik', aksi durumda 'Node'",
+  "module_system_or_esModuleInterop_6904": "module === \"sistem\" veya esModuleInterop",
   "new_expression_whose_target_lacks_a_construct_signature_implicitly_has_an_any_type_7009": "Yapı imzası bulunmayan 'new' ifadesi örtük olarak 'any' türüne sahip.",
+  "node_modules_bower_components_jspm_packages_plus_the_value_of_outDir_if_one_is_specified_6907": "`[\"node_modules\", \"bower_components\", \"jspm_packages\"]` ve belirtilmişse ek olarak `outDir`.",
+  "one_of_Colon_6900": "şunlardan biri:",
+  "one_or_more_Colon_6901": "bir veya daha fazla:",
   "options_6024": "seçenekler",
   "or_expected_1144": "'{' veya ';' bekleniyor.",
   "package_json_does_not_have_a_0_field_6100": "'package.json' geçerli bir '{0}' alanına sahip değil.",
@@ -1507,6 +1785,9 @@
   "this_cannot_be_referenced_in_constructor_arguments_2333": "'super' öğesine oluşturucu bağımsız değişkenlerinde başvurulamaz.",
   "this_cannot_be_referenced_in_current_location_2332": "'this' öğesine geçerli konumda başvurulamaz.",
   "this_implicitly_has_type_any_because_it_does_not_have_a_type_annotation_2683": "'this', tür ek açıklamasına sahip olmadığından örtük olarak 'any' türü içeriyor",
+  "true_if_composite_false_otherwise_6909": "'Kompozit' ayarlanmışsa 'true', değilse 'false'",
+  "tsc_Colon_The_TypeScript_Compiler_6922": "tsc: The TypeScript Derleyicisi",
+  "type_Colon_6902": "tür:",
   "unique_symbol_types_are_not_allowed_here_1335": "Burada 'unique symbol' türlerine izin verilmez.",
   "unique_symbol_types_are_only_allowed_on_variables_in_a_variable_statement_1334": "'unique symbol' türlerine yalnızca bir değişken deyimindeki değişkenlerde izin verilir.",
   "unique_symbol_types_may_not_be_used_on_a_variable_declaration_with_a_binding_name_1333": "'unique symbol' türleri, bağlama adına sahip bir değişken bildiriminde kullanılamaz.",
@@ -1514,5 +1795,6 @@
   "use_strict_directive_used_here_1349": "'use strict' yönergesi burada kullanıldı.",
   "with_statements_are_not_allowed_in_an_async_function_block_1300": "'with' deyimlerine zaman uyumsuz bir işlev bloğunda izin verilmez.",
   "with_statements_are_not_allowed_in_strict_mode_1101": "'with' deyimlerine katı modda izin verilmez.",
+  "yield_expression_implicitly_results_in_an_any_type_because_its_containing_generator_lacks_a_return_t_7057": "Kapsayan oluşturucusunda dönüş türü ek açıklaması olmadığından 'yield' ifadesi örtük olarak 'any' türü ile sonuçlanır.",
   "yield_expressions_cannot_be_used_in_a_parameter_initializer_2523": "'yield' ifadeleri bir parametre başlatıcısında kullanılamaz."
 }
\ No newline at end of file
diff --git a/node_modules/typescript/lib/tsc.js b/node_modules/typescript/lib/tsc.js
index 78c5ec2..d425ad1 100644
--- a/node_modules/typescript/lib/tsc.js
+++ b/node_modules/typescript/lib/tsc.js
@@ -15,10 +15,14 @@
 
 
 "use strict";
-var __spreadArray = (this && this.__spreadArray) || function (to, from) {
-    for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)
-        to[j] = from[i];
-    return to;
+var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
+    if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
+        if (ar || !(i in from)) {
+            if (!ar) ar = Array.prototype.slice.call(from, 0, i);
+            ar[i] = from[i];
+        }
+    }
+    return to.concat(ar || Array.prototype.slice.call(from));
 };
 var __assign = (this && this.__assign) || function () {
     __assign = Object.assign || function(t) {
@@ -64,8 +68,8 @@
 };
 var ts;
 (function (ts) {
-    ts.versionMajorMinor = "4.3";
-    ts.version = "4.3.5";
+    ts.versionMajorMinor = "4.4";
+    ts.version = "4.4.2";
     var NativeCollections;
     (function (NativeCollections) {
         function tryGetNativeMap() {
@@ -689,7 +693,7 @@
             return array1;
         if (!some(array1))
             return array2;
-        return __spreadArray(__spreadArray([], array1), array2);
+        return __spreadArray(__spreadArray([], array1, true), array2, true);
     }
     ts.concatenate = concatenate;
     function selectIndex(_, i) {
@@ -1590,8 +1594,38 @@
     }
     ts.stringContains = stringContains;
     function removeMinAndVersionNumbers(fileName) {
-        var trailingMinOrVersion = /[.-]((min)|(\d+(\.\d+)*))$/;
-        return fileName.replace(trailingMinOrVersion, "").replace(trailingMinOrVersion, "");
+        var end = fileName.length;
+        for (var pos = end - 1; pos > 0; pos--) {
+            var ch = fileName.charCodeAt(pos);
+            if (ch >= 48 && ch <= 57) {
+                do {
+                    --pos;
+                    ch = fileName.charCodeAt(pos);
+                } while (pos > 0 && ch >= 48 && ch <= 57);
+            }
+            else if (pos > 4 && (ch === 110 || ch === 78)) {
+                --pos;
+                ch = fileName.charCodeAt(pos);
+                if (ch !== 105 && ch !== 73) {
+                    break;
+                }
+                --pos;
+                ch = fileName.charCodeAt(pos);
+                if (ch !== 109 && ch !== 77) {
+                    break;
+                }
+                --pos;
+                ch = fileName.charCodeAt(pos);
+            }
+            else {
+                break;
+            }
+            if (ch !== 45 && ch !== 46) {
+                break;
+            }
+            end = pos;
+        }
+        return end === fileName.length ? fileName : fileName.slice(0, end);
     }
     ts.removeMinAndVersionNumbers = removeMinAndVersionNumbers;
     function orderedRemoveItem(array, item) {
@@ -1806,6 +1840,18 @@
         return array.slice(0, index);
     }
     ts.takeWhile = takeWhile;
+    ts.trimString = !!String.prototype.trim ? (function (s) { return s.trim(); }) : function (s) { return ts.trimStringEnd(ts.trimStringStart(s)); };
+    ts.trimStringEnd = !!String.prototype.trimEnd ? (function (s) { return s.trimEnd(); }) : trimEndImpl;
+    ts.trimStringStart = !!String.prototype.trimStart ? (function (s) { return s.trimStart(); }) : function (s) { return s.replace(/^\s+/g, ""); };
+    function trimEndImpl(s) {
+        var end = s.length - 1;
+        while (end >= 0) {
+            if (!ts.isWhiteSpaceLike(s.charCodeAt(end)))
+                break;
+            end--;
+        }
+        return s.slice(0, end + 1);
+    }
 })(ts || (ts = {}));
 var ts;
 (function (ts) {
@@ -1977,7 +2023,7 @@
         Debug.assertEachNode = assertEachNode;
         function assertNode(node, test, message, stackCrawlMark) {
             if (shouldAssertFunction(1, "assertNode")) {
-                assert(node !== undefined && (test === undefined || test(node)), message || "Unexpected node.", function () { return "Node " + formatSyntaxKind(node.kind) + " did not pass test '" + getFunctionName(test) + "'."; }, stackCrawlMark || assertNode);
+                assert(node !== undefined && (test === undefined || test(node)), message || "Unexpected node.", function () { return "Node " + formatSyntaxKind(node === null || node === void 0 ? void 0 : node.kind) + " did not pass test '" + getFunctionName(test) + "'."; }, stackCrawlMark || assertNode);
             }
         }
         Debug.assertNode = assertNode;
@@ -1989,13 +2035,13 @@
         Debug.assertNotNode = assertNotNode;
         function assertOptionalNode(node, test, message, stackCrawlMark) {
             if (shouldAssertFunction(1, "assertOptionalNode")) {
-                assert(test === undefined || node === undefined || test(node), message || "Unexpected node.", function () { return "Node " + formatSyntaxKind(node.kind) + " did not pass test '" + getFunctionName(test) + "'."; }, stackCrawlMark || assertOptionalNode);
+                assert(test === undefined || node === undefined || test(node), message || "Unexpected node.", function () { return "Node " + formatSyntaxKind(node === null || node === void 0 ? void 0 : node.kind) + " did not pass test '" + getFunctionName(test) + "'."; }, stackCrawlMark || assertOptionalNode);
             }
         }
         Debug.assertOptionalNode = assertOptionalNode;
         function assertOptionalToken(node, kind, message, stackCrawlMark) {
             if (shouldAssertFunction(1, "assertOptionalToken")) {
-                assert(kind === undefined || node === undefined || node.kind === kind, message || "Unexpected node.", function () { return "Node " + formatSyntaxKind(node.kind) + " was not a '" + formatSyntaxKind(kind) + "' token."; }, stackCrawlMark || assertOptionalToken);
+                assert(kind === undefined || node === undefined || node.kind === kind, message || "Unexpected node.", function () { return "Node " + formatSyntaxKind(node === null || node === void 0 ? void 0 : node.kind) + " was not a '" + formatSyntaxKind(kind) + "' token."; }, stackCrawlMark || assertOptionalToken);
             }
         }
         Debug.assertOptionalToken = assertOptionalToken;
@@ -2549,18 +2595,19 @@
         return VersionRange;
     }());
     ts.VersionRange = VersionRange;
-    var logicalOrRegExp = /\s*\|\|\s*/g;
+    var logicalOrRegExp = /\|\|/g;
     var whitespaceRegExp = /\s+/g;
     var partialRegExp = /^([xX*0]|[1-9]\d*)(?:\.([xX*0]|[1-9]\d*)(?:\.([xX*0]|[1-9]\d*)(?:-([a-z0-9-.]+))?(?:\+([a-z0-9-.]+))?)?)?$/i;
     var hyphenRegExp = /^\s*([a-z0-9-+.*]+)\s+-\s+([a-z0-9-+.*]+)\s*$/i;
-    var rangeRegExp = /^\s*(~|\^|<|<=|>|>=|=)?\s*([a-z0-9-+.*]+)$/i;
+    var rangeRegExp = /^(~|\^|<|<=|>|>=|=)?\s*([a-z0-9-+.*]+)$/i;
     function parseRange(text) {
         var alternatives = [];
-        for (var _i = 0, _a = text.trim().split(logicalOrRegExp); _i < _a.length; _i++) {
+        for (var _i = 0, _a = ts.trimString(text).split(logicalOrRegExp); _i < _a.length; _i++) {
             var range = _a[_i];
             if (!range)
                 continue;
             var comparators = [];
+            range = ts.trimString(range);
             var match = hyphenRegExp.exec(range);
             if (match) {
                 if (!parseHyphen(match[1], match[2], comparators))
@@ -2569,7 +2616,7 @@
             else {
                 for (var _b = 0, _c = range.split(whitespaceRegExp); _b < _c.length; _b++) {
                     var simple = _c[_b];
-                    var match_1 = rangeRegExp.exec(simple);
+                    var match_1 = rangeRegExp.exec(ts.trimString(simple));
                     if (!match_1 || !parseComparator(match_1[1], match_1[2], comparators))
                         return undefined;
                 }
@@ -3459,7 +3506,7 @@
         var rest = path.substring(rootLength).split(ts.directorySeparator);
         if (rest.length && !ts.lastOrUndefined(rest))
             rest.pop();
-        return __spreadArray([root], rest);
+        return __spreadArray([root], rest, true);
     }
     function getPathComponents(path, currentDirectory) {
         if (currentDirectory === void 0) { currentDirectory = ""; }
@@ -3475,6 +3522,11 @@
     }
     ts.getPathFromPathComponents = getPathFromPathComponents;
     function normalizeSlashes(path) {
+        var index = path.indexOf("\\");
+        if (index === -1) {
+            return path;
+        }
+        backslashRegExp.lastIndex = index;
         return path.replace(backslashRegExp, ts.directorySeparator);
     }
     ts.normalizeSlashes = normalizeSlashes;
@@ -3530,7 +3582,7 @@
         for (var _i = 1; _i < arguments.length; _i++) {
             paths[_i - 1] = arguments[_i];
         }
-        return normalizePath(ts.some(paths) ? combinePaths.apply(void 0, __spreadArray([path], paths)) : normalizeSlashes(path));
+        return normalizePath(ts.some(paths) ? combinePaths.apply(void 0, __spreadArray([path], paths, false)) : normalizeSlashes(path));
     }
     ts.resolvePath = resolvePath;
     function getNormalizedPathComponents(path, currentDirectory) {
@@ -3543,6 +3595,16 @@
     ts.getNormalizedAbsolutePath = getNormalizedAbsolutePath;
     function normalizePath(path) {
         path = normalizeSlashes(path);
+        if (!relativePathSegmentRegExp.test(path)) {
+            return path;
+        }
+        var simplified = path.replace(/\/\.\//g, "/").replace(/^\.\//, "");
+        if (simplified !== path) {
+            path = simplified;
+            if (!relativePathSegmentRegExp.test(path)) {
+                return path;
+            }
+        }
         var normalized = getPathFromPathComponents(reducePathComponents(getPathComponents(path)));
         return normalized && hasTrailingDirectorySeparator(path) ? ensureTrailingDirectorySeparator(normalized) : normalized;
     }
@@ -3598,7 +3660,7 @@
         return pathext ? path.slice(0, path.length - pathext.length) + (ts.startsWith(ext, ".") ? ext : "." + ext) : path;
     }
     ts.changeAnyExtension = changeAnyExtension;
-    var relativePathSegmentRegExp = /(^|\/)\.{0,2}($|\/)/;
+    var relativePathSegmentRegExp = /(?:\/\/)|(?:^|\/)\.\.?(?:$|\/)/;
     function comparePathsWorker(a, b, componentComparer) {
         if (a === b)
             return 0;
@@ -3699,7 +3761,7 @@
         for (; start < fromComponents.length; start++) {
             relative.push("..");
         }
-        return __spreadArray(__spreadArray([""], relative), components);
+        return __spreadArray(__spreadArray([""], relative, true), components, true);
     }
     ts.getPathComponentsRelativeTo = getPathComponentsRelativeTo;
     function getRelativePathFromDirectory(fromDirectory, to, getCanonicalFileNameOrIgnoreCase) {
@@ -4484,6 +4546,7 @@
             }
             var activeSession;
             var profilePath = "./profile.cpuprofile";
+            var hitSystemWatcherLimit = false;
             var Buffer = require("buffer").Buffer;
             var nodeVersion = getNodeMajorVersion();
             var isNode4OrLater = nodeVersion >= 4;
@@ -4518,6 +4581,9 @@
                 write: function (s) {
                     process.stdout.write(s);
                 },
+                getWidthOfTerminal: function () {
+                    return process.stdout.columns;
+                },
                 writeOutputIsTTY: function () {
                     return process.stdout.isTTY;
                 },
@@ -4763,6 +4829,10 @@
                             options = { persistent: true };
                         }
                     }
+                    if (hitSystemWatcherLimit) {
+                        ts.sysLog("sysLog:: " + fileOrDirectory + ":: Defaulting to fsWatchFile");
+                        return watchPresentFileSystemEntryWithFsWatchFile();
+                    }
                     try {
                         var presentWatcher = _fs.watch(fileOrDirectory, options, isLinuxOrMacOs ?
                             callbackChangingToMissingFileSystemEntry :
@@ -4771,6 +4841,8 @@
                         return presentWatcher;
                     }
                     catch (e) {
+                        hitSystemWatcherLimit || (hitSystemWatcherLimit = e.code === "ENOSPC");
+                        ts.sysLog("sysLog:: " + fileOrDirectory + ":: Changing to fsWatchFile");
                         return watchPresentFileSystemEntryWithFsWatchFile();
                     }
                 }
@@ -4784,7 +4856,6 @@
                         callback(event, relativeName);
                 }
                 function watchPresentFileSystemEntryWithFsWatchFile() {
-                    ts.sysLog("sysLog:: " + fileOrDirectory + ":: Changing to fsWatchFile");
                     return watchFile(fileOrDirectory, createFileWatcherCallback(callback), fallbackPollingInterval, fallbackOptions);
                 }
                 function watchMissingFileSystemEntry() {
@@ -4887,7 +4958,7 @@
                 }
             }
             function readDirectory(path, extensions, excludes, includes, depth) {
-                return ts.matchFiles(path, extensions, excludes, includes, useCaseSensitiveFileNames, process.cwd(), depth, getAccessibleFileSystemEntries, realpath);
+                return ts.matchFiles(path, extensions, excludes, includes, useCaseSensitiveFileNames, process.cwd(), depth, getAccessibleFileSystemEntries, realpath, directoryExists);
             }
             function fileSystemEntryExists(path, entryKind) {
                 var originalStackTraceLimit = Error.stackTraceLimit;
@@ -5002,7 +5073,6 @@
         An_index_signature_parameter_cannot_have_an_initializer: diag(1020, ts.DiagnosticCategory.Error, "An_index_signature_parameter_cannot_have_an_initializer_1020", "An index signature parameter cannot have an initializer."),
         An_index_signature_must_have_a_type_annotation: diag(1021, ts.DiagnosticCategory.Error, "An_index_signature_must_have_a_type_annotation_1021", "An index signature must have a type annotation."),
         An_index_signature_parameter_must_have_a_type_annotation: diag(1022, ts.DiagnosticCategory.Error, "An_index_signature_parameter_must_have_a_type_annotation_1022", "An index signature parameter must have a type annotation."),
-        An_index_signature_parameter_type_must_be_either_string_or_number: diag(1023, ts.DiagnosticCategory.Error, "An_index_signature_parameter_type_must_be_either_string_or_number_1023", "An index signature parameter type must be either 'string' or 'number'."),
         readonly_modifier_can_only_appear_on_a_property_declaration_or_index_signature: diag(1024, ts.DiagnosticCategory.Error, "readonly_modifier_can_only_appear_on_a_property_declaration_or_index_signature_1024", "'readonly' modifier can only appear on a property declaration or index signature."),
         An_index_signature_cannot_have_a_trailing_comma: diag(1025, ts.DiagnosticCategory.Error, "An_index_signature_cannot_have_a_trailing_comma_1025", "An index signature cannot have a trailing comma."),
         Accessibility_modifier_already_seen: diag(1028, ts.DiagnosticCategory.Error, "Accessibility_modifier_already_seen_1028", "Accessibility modifier already seen."),
@@ -5063,6 +5133,7 @@
         for_await_loops_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules: diag(1103, ts.DiagnosticCategory.Error, "for_await_loops_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_1103", "'for await' loops are only allowed within async functions and at the top levels of modules."),
         A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement: diag(1104, ts.DiagnosticCategory.Error, "A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement_1104", "A 'continue' statement can only be used within an enclosing iteration statement."),
         A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement: diag(1105, ts.DiagnosticCategory.Error, "A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement_1105", "A 'break' statement can only be used within an enclosing iteration or switch statement."),
+        The_left_hand_side_of_a_for_of_statement_may_not_be_async: diag(1106, ts.DiagnosticCategory.Error, "The_left_hand_side_of_a_for_of_statement_may_not_be_async_1106", "The left-hand side of a 'for...of' statement may not be 'async'."),
         Jump_target_cannot_cross_function_boundary: diag(1107, ts.DiagnosticCategory.Error, "Jump_target_cannot_cross_function_boundary_1107", "Jump target cannot cross function boundary."),
         A_return_statement_can_only_be_used_within_a_function_body: diag(1108, ts.DiagnosticCategory.Error, "A_return_statement_can_only_be_used_within_a_function_body_1108", "A 'return' statement can only be used within a function body."),
         Expression_expected: diag(1109, ts.DiagnosticCategory.Error, "Expression_expected_1109", "Expression expected."),
@@ -5149,7 +5220,7 @@
         Decorators_are_not_valid_here: diag(1206, ts.DiagnosticCategory.Error, "Decorators_are_not_valid_here_1206", "Decorators are not valid here."),
         Decorators_cannot_be_applied_to_multiple_get_Slashset_accessors_of_the_same_name: diag(1207, ts.DiagnosticCategory.Error, "Decorators_cannot_be_applied_to_multiple_get_Slashset_accessors_of_the_same_name_1207", "Decorators cannot be applied to multiple get/set accessors of the same name."),
         _0_cannot_be_compiled_under_isolatedModules_because_it_is_considered_a_global_script_file_Add_an_import_export_or_an_empty_export_statement_to_make_it_a_module: diag(1208, ts.DiagnosticCategory.Error, "_0_cannot_be_compiled_under_isolatedModules_because_it_is_considered_a_global_script_file_Add_an_imp_1208", "'{0}' cannot be compiled under '--isolatedModules' because it is considered a global script file. Add an import, export, or an empty 'export {}' statement to make it a module."),
-        Invalid_use_of_0_Class_definitions_are_automatically_in_strict_mode: diag(1210, ts.DiagnosticCategory.Error, "Invalid_use_of_0_Class_definitions_are_automatically_in_strict_mode_1210", "Invalid use of '{0}'. Class definitions are automatically in strict mode."),
+        Code_contained_in_a_class_is_evaluated_in_JavaScript_s_strict_mode_which_does_not_allow_this_use_of_0_For_more_information_see_https_Colon_Slash_Slashdeveloper_mozilla_org_Slashen_US_Slashdocs_SlashWeb_SlashJavaScript_SlashReference_SlashStrict_mode: diag(1210, ts.DiagnosticCategory.Error, "Code_contained_in_a_class_is_evaluated_in_JavaScript_s_strict_mode_which_does_not_allow_this_use_of__1210", "Code contained in a class is evaluated in JavaScript's strict mode which does not allow this use of '{0}'. For more information, see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Strict_mode."),
         A_class_declaration_without_the_default_modifier_must_have_a_name: diag(1211, ts.DiagnosticCategory.Error, "A_class_declaration_without_the_default_modifier_must_have_a_name_1211", "A class declaration without the 'default' modifier must have a name."),
         Identifier_expected_0_is_a_reserved_word_in_strict_mode: diag(1212, ts.DiagnosticCategory.Error, "Identifier_expected_0_is_a_reserved_word_in_strict_mode_1212", "Identifier expected. '{0}' is a reserved word in strict mode."),
         Identifier_expected_0_is_a_reserved_word_in_strict_mode_Class_definitions_are_automatically_in_strict_mode: diag(1213, ts.DiagnosticCategory.Error, "Identifier_expected_0_is_a_reserved_word_in_strict_mode_Class_definitions_are_automatically_in_stric_1213", "Identifier expected. '{0}' is a reserved word in strict mode. Class definitions are automatically in strict mode."),
@@ -5204,6 +5275,8 @@
         Declarations_with_definite_assignment_assertions_must_also_have_type_annotations: diag(1264, ts.DiagnosticCategory.Error, "Declarations_with_definite_assignment_assertions_must_also_have_type_annotations_1264", "Declarations with definite assignment assertions must also have type annotations."),
         A_rest_element_cannot_follow_another_rest_element: diag(1265, ts.DiagnosticCategory.Error, "A_rest_element_cannot_follow_another_rest_element_1265", "A rest element cannot follow another rest element."),
         An_optional_element_cannot_follow_a_rest_element: diag(1266, ts.DiagnosticCategory.Error, "An_optional_element_cannot_follow_a_rest_element_1266", "An optional element cannot follow a rest element."),
+        Property_0_cannot_have_an_initializer_because_it_is_marked_abstract: diag(1267, ts.DiagnosticCategory.Error, "Property_0_cannot_have_an_initializer_because_it_is_marked_abstract_1267", "Property '{0}' cannot have an initializer because it is marked abstract."),
+        An_index_signature_parameter_type_must_be_string_number_symbol_or_a_template_literal_type: diag(1268, ts.DiagnosticCategory.Error, "An_index_signature_parameter_type_must_be_string_number_symbol_or_a_template_literal_type_1268", "An index signature parameter type must be 'string', 'number', 'symbol', or a template literal type."),
         with_statements_are_not_allowed_in_an_async_function_block: diag(1300, ts.DiagnosticCategory.Error, "with_statements_are_not_allowed_in_an_async_function_block_1300", "'with' statements are not allowed in an async function block."),
         await_expressions_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules: diag(1308, ts.DiagnosticCategory.Error, "await_expressions_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_1308", "'await' expressions are only allowed within async functions and at the top levels of modules."),
         Did_you_mean_to_use_a_Colon_An_can_only_follow_a_property_name_when_the_containing_object_literal_is_part_of_a_destructuring_pattern: diag(1312, ts.DiagnosticCategory.Error, "Did_you_mean_to_use_a_Colon_An_can_only_follow_a_property_name_when_the_containing_object_literal_is_1312", "Did you mean to use a ':'? An '=' can only follow a property name when the containing object literal is part of a destructuring pattern."),
@@ -5230,8 +5303,7 @@
         unique_symbol_types_may_not_be_used_on_a_variable_declaration_with_a_binding_name: diag(1333, ts.DiagnosticCategory.Error, "unique_symbol_types_may_not_be_used_on_a_variable_declaration_with_a_binding_name_1333", "'unique symbol' types may not be used on a variable declaration with a binding name."),
         unique_symbol_types_are_only_allowed_on_variables_in_a_variable_statement: diag(1334, ts.DiagnosticCategory.Error, "unique_symbol_types_are_only_allowed_on_variables_in_a_variable_statement_1334", "'unique symbol' types are only allowed on variables in a variable statement."),
         unique_symbol_types_are_not_allowed_here: diag(1335, ts.DiagnosticCategory.Error, "unique_symbol_types_are_not_allowed_here_1335", "'unique symbol' types are not allowed here."),
-        An_index_signature_parameter_type_cannot_be_a_type_alias_Consider_writing_0_Colon_1_Colon_2_instead: diag(1336, ts.DiagnosticCategory.Error, "An_index_signature_parameter_type_cannot_be_a_type_alias_Consider_writing_0_Colon_1_Colon_2_instead_1336", "An index signature parameter type cannot be a type alias. Consider writing '[{0}: {1}]: {2}' instead."),
-        An_index_signature_parameter_type_cannot_be_a_union_type_Consider_using_a_mapped_object_type_instead: diag(1337, ts.DiagnosticCategory.Error, "An_index_signature_parameter_type_cannot_be_a_union_type_Consider_using_a_mapped_object_type_instead_1337", "An index signature parameter type cannot be a union type. Consider using a mapped object type instead."),
+        An_index_signature_parameter_type_cannot_be_a_literal_type_or_generic_type_Consider_using_a_mapped_object_type_instead: diag(1337, ts.DiagnosticCategory.Error, "An_index_signature_parameter_type_cannot_be_a_literal_type_or_generic_type_Consider_using_a_mapped_o_1337", "An index signature parameter type cannot be a literal type or generic type. Consider using a mapped object type instead."),
         infer_declarations_are_only_permitted_in_the_extends_clause_of_a_conditional_type: diag(1338, ts.DiagnosticCategory.Error, "infer_declarations_are_only_permitted_in_the_extends_clause_of_a_conditional_type_1338", "'infer' declarations are only permitted in the 'extends' clause of a conditional type."),
         Module_0_does_not_refer_to_a_value_but_is_used_as_a_value_here: diag(1339, ts.DiagnosticCategory.Error, "Module_0_does_not_refer_to_a_value_but_is_used_as_a_value_here_1339", "Module '{0}' does not refer to a value, but is used as a value here."),
         Module_0_does_not_refer_to_a_type_but_is_used_as_a_type_here_Did_you_mean_typeof_import_0: diag(1340, ts.DiagnosticCategory.Error, "Module_0_does_not_refer_to_a_type_but_is_used_as_a_type_here_Did_you_mean_typeof_import_0_1340", "Module '{0}' does not refer to a type, but is used as a type here. Did you mean 'typeof import('{0}')'?"),
@@ -5261,7 +5333,6 @@
         Convert_all_re_exported_types_to_type_only_exports: diag(1365, ts.DiagnosticCategory.Message, "Convert_all_re_exported_types_to_type_only_exports_1365", "Convert all re-exported types to type-only exports"),
         Split_into_two_separate_import_declarations: diag(1366, ts.DiagnosticCategory.Message, "Split_into_two_separate_import_declarations_1366", "Split into two separate import declarations"),
         Split_all_invalid_type_only_imports: diag(1367, ts.DiagnosticCategory.Message, "Split_all_invalid_type_only_imports_1367", "Split all invalid type-only imports"),
-        Specify_emit_Slashchecking_behavior_for_imports_that_are_only_used_for_types: diag(1368, ts.DiagnosticCategory.Message, "Specify_emit_Slashchecking_behavior_for_imports_that_are_only_used_for_types_1368", "Specify emit/checking behavior for imports that are only used for types"),
         Did_you_mean_0: diag(1369, ts.DiagnosticCategory.Message, "Did_you_mean_0_1369", "Did you mean '{0}'?"),
         This_import_is_never_used_as_a_value_and_must_use_import_type_because_importsNotUsedAsValues_is_set_to_error: diag(1371, ts.DiagnosticCategory.Error, "This_import_is_never_used_as_a_value_and_must_use_import_type_because_importsNotUsedAsValues_is_set__1371", "This import is never used as a value and must use 'import type' because 'importsNotUsedAsValues' is set to 'error'."),
         Convert_to_type_only_import: diag(1373, ts.DiagnosticCategory.Message, "Convert_to_type_only_import_1373", "Convert to type-only import"),
@@ -5325,6 +5396,16 @@
         for_await_loops_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_file_has_no_imports_or_exports_Consider_adding_an_empty_export_to_make_this_file_a_module: diag(1431, ts.DiagnosticCategory.Error, "for_await_loops_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_file_1431", "'for await' loops are only allowed at the top level of a file when that file is a module, but this file has no imports or exports. Consider adding an empty 'export {}' to make this file a module."),
         Top_level_for_await_loops_are_only_allowed_when_the_module_option_is_set_to_esnext_or_system_and_the_target_option_is_set_to_es2017_or_higher: diag(1432, ts.DiagnosticCategory.Error, "Top_level_for_await_loops_are_only_allowed_when_the_module_option_is_set_to_esnext_or_system_and_the_1432", "Top-level 'for await' loops are only allowed when the 'module' option is set to 'esnext' or 'system', and the 'target' option is set to 'es2017' or higher."),
         Decorators_may_not_be_applied_to_this_parameters: diag(1433, ts.DiagnosticCategory.Error, "Decorators_may_not_be_applied_to_this_parameters_1433", "Decorators may not be applied to 'this' parameters."),
+        Unexpected_keyword_or_identifier: diag(1434, ts.DiagnosticCategory.Error, "Unexpected_keyword_or_identifier_1434", "Unexpected keyword or identifier."),
+        Unknown_keyword_or_identifier_Did_you_mean_0: diag(1435, ts.DiagnosticCategory.Error, "Unknown_keyword_or_identifier_Did_you_mean_0_1435", "Unknown keyword or identifier. Did you mean '{0}'?"),
+        Decorators_must_precede_the_name_and_all_keywords_of_property_declarations: diag(1436, ts.DiagnosticCategory.Error, "Decorators_must_precede_the_name_and_all_keywords_of_property_declarations_1436", "Decorators must precede the name and all keywords of property declarations."),
+        Namespace_must_be_given_a_name: diag(1437, ts.DiagnosticCategory.Error, "Namespace_must_be_given_a_name_1437", "Namespace must be given a name."),
+        Interface_must_be_given_a_name: diag(1438, ts.DiagnosticCategory.Error, "Interface_must_be_given_a_name_1438", "Interface must be given a name."),
+        Type_alias_must_be_given_a_name: diag(1439, ts.DiagnosticCategory.Error, "Type_alias_must_be_given_a_name_1439", "Type alias must be given a name."),
+        Variable_declaration_not_allowed_at_this_location: diag(1440, ts.DiagnosticCategory.Error, "Variable_declaration_not_allowed_at_this_location_1440", "Variable declaration not allowed at this location."),
+        Cannot_start_a_function_call_in_a_type_annotation: diag(1441, ts.DiagnosticCategory.Error, "Cannot_start_a_function_call_in_a_type_annotation_1441", "Cannot start a function call in a type annotation."),
+        Expected_for_property_initializer: diag(1442, ts.DiagnosticCategory.Error, "Expected_for_property_initializer_1442", "Expected '=' for property initializer."),
+        Module_declaration_names_may_only_use_or_quoted_strings: diag(1443, ts.DiagnosticCategory.Error, "Module_declaration_names_may_only_use_or_quoted_strings_1443", "Module declaration names may only use ' or \" quoted strings."),
         The_types_of_0_are_incompatible_between_these_types: diag(2200, ts.DiagnosticCategory.Error, "The_types_of_0_are_incompatible_between_these_types_2200", "The types of '{0}' are incompatible between these types."),
         The_types_returned_by_0_are_incompatible_between_these_types: diag(2201, ts.DiagnosticCategory.Error, "The_types_returned_by_0_are_incompatible_between_these_types_2201", "The types returned by '{0}' are incompatible between these types."),
         Call_signature_return_types_0_and_1_are_incompatible: diag(2202, ts.DiagnosticCategory.Error, "Call_signature_return_types_0_and_1_are_incompatible_2202", "Call signature return types '{0}' and '{1}' are incompatible.", undefined, true),
@@ -5360,8 +5441,8 @@
         Types_of_property_0_are_incompatible: diag(2326, ts.DiagnosticCategory.Error, "Types_of_property_0_are_incompatible_2326", "Types of property '{0}' are incompatible."),
         Property_0_is_optional_in_type_1_but_required_in_type_2: diag(2327, ts.DiagnosticCategory.Error, "Property_0_is_optional_in_type_1_but_required_in_type_2_2327", "Property '{0}' is optional in type '{1}' but required in type '{2}'."),
         Types_of_parameters_0_and_1_are_incompatible: diag(2328, ts.DiagnosticCategory.Error, "Types_of_parameters_0_and_1_are_incompatible_2328", "Types of parameters '{0}' and '{1}' are incompatible."),
-        Index_signature_is_missing_in_type_0: diag(2329, ts.DiagnosticCategory.Error, "Index_signature_is_missing_in_type_0_2329", "Index signature is missing in type '{0}'."),
-        Index_signatures_are_incompatible: diag(2330, ts.DiagnosticCategory.Error, "Index_signatures_are_incompatible_2330", "Index signatures are incompatible."),
+        Index_signature_for_type_0_is_missing_in_type_1: diag(2329, ts.DiagnosticCategory.Error, "Index_signature_for_type_0_is_missing_in_type_1_2329", "Index signature for type '{0}' is missing in type '{1}'."),
+        _0_and_1_index_signatures_are_incompatible: diag(2330, ts.DiagnosticCategory.Error, "_0_and_1_index_signatures_are_incompatible_2330", "'{0}' and '{1}' index signatures are incompatible."),
         this_cannot_be_referenced_in_a_module_or_namespace_body: diag(2331, ts.DiagnosticCategory.Error, "this_cannot_be_referenced_in_a_module_or_namespace_body_2331", "'this' cannot be referenced in a module or namespace body."),
         this_cannot_be_referenced_in_current_location: diag(2332, ts.DiagnosticCategory.Error, "this_cannot_be_referenced_in_current_location_2332", "'this' cannot be referenced in current location."),
         this_cannot_be_referenced_in_constructor_arguments: diag(2333, ts.DiagnosticCategory.Error, "this_cannot_be_referenced_in_constructor_arguments_2333", "'this' cannot be referenced in constructor arguments."),
@@ -5405,8 +5486,7 @@
         A_parameter_initializer_is_only_allowed_in_a_function_or_constructor_implementation: diag(2371, ts.DiagnosticCategory.Error, "A_parameter_initializer_is_only_allowed_in_a_function_or_constructor_implementation_2371", "A parameter initializer is only allowed in a function or constructor implementation."),
         Parameter_0_cannot_reference_itself: diag(2372, ts.DiagnosticCategory.Error, "Parameter_0_cannot_reference_itself_2372", "Parameter '{0}' cannot reference itself."),
         Parameter_0_cannot_reference_identifier_1_declared_after_it: diag(2373, ts.DiagnosticCategory.Error, "Parameter_0_cannot_reference_identifier_1_declared_after_it_2373", "Parameter '{0}' cannot reference identifier '{1}' declared after it."),
-        Duplicate_string_index_signature: diag(2374, ts.DiagnosticCategory.Error, "Duplicate_string_index_signature_2374", "Duplicate string index signature."),
-        Duplicate_number_index_signature: diag(2375, ts.DiagnosticCategory.Error, "Duplicate_number_index_signature_2375", "Duplicate number index signature."),
+        Duplicate_index_signature_for_type_0: diag(2374, ts.DiagnosticCategory.Error, "Duplicate_index_signature_for_type_0_2374", "Duplicate index signature for type '{0}'."),
         A_super_call_must_be_the_first_statement_in_the_constructor_when_a_class_contains_initialized_properties_parameter_properties_or_private_identifiers: diag(2376, ts.DiagnosticCategory.Error, "A_super_call_must_be_the_first_statement_in_the_constructor_when_a_class_contains_initialized_proper_2376", "A 'super' call must be the first statement in the constructor when a class contains initialized properties, parameter properties, or private identifiers."),
         Constructors_for_derived_classes_must_contain_a_super_call: diag(2377, ts.DiagnosticCategory.Error, "Constructors_for_derived_classes_must_contain_a_super_call_2377", "Constructors for derived classes must contain a 'super' call."),
         A_get_accessor_must_return_a_value: diag(2378, ts.DiagnosticCategory.Error, "A_get_accessor_must_return_a_value_2378", "A 'get' accessor must return a value."),
@@ -5441,9 +5521,8 @@
         Setters_cannot_return_a_value: diag(2408, ts.DiagnosticCategory.Error, "Setters_cannot_return_a_value_2408", "Setters cannot return a value."),
         Return_type_of_constructor_signature_must_be_assignable_to_the_instance_type_of_the_class: diag(2409, ts.DiagnosticCategory.Error, "Return_type_of_constructor_signature_must_be_assignable_to_the_instance_type_of_the_class_2409", "Return type of constructor signature must be assignable to the instance type of the class."),
         The_with_statement_is_not_supported_All_symbols_in_a_with_block_will_have_type_any: diag(2410, ts.DiagnosticCategory.Error, "The_with_statement_is_not_supported_All_symbols_in_a_with_block_will_have_type_any_2410", "The 'with' statement is not supported. All symbols in a 'with' block will have type 'any'."),
-        Property_0_of_type_1_is_not_assignable_to_string_index_type_2: diag(2411, ts.DiagnosticCategory.Error, "Property_0_of_type_1_is_not_assignable_to_string_index_type_2_2411", "Property '{0}' of type '{1}' is not assignable to string index type '{2}'."),
-        Property_0_of_type_1_is_not_assignable_to_numeric_index_type_2: diag(2412, ts.DiagnosticCategory.Error, "Property_0_of_type_1_is_not_assignable_to_numeric_index_type_2_2412", "Property '{0}' of type '{1}' is not assignable to numeric index type '{2}'."),
-        Numeric_index_type_0_is_not_assignable_to_string_index_type_1: diag(2413, ts.DiagnosticCategory.Error, "Numeric_index_type_0_is_not_assignable_to_string_index_type_1_2413", "Numeric index type '{0}' is not assignable to string index type '{1}'."),
+        Property_0_of_type_1_is_not_assignable_to_2_index_type_3: diag(2411, ts.DiagnosticCategory.Error, "Property_0_of_type_1_is_not_assignable_to_2_index_type_3_2411", "Property '{0}' of type '{1}' is not assignable to '{2}' index type '{3}'."),
+        _0_index_type_1_is_not_assignable_to_2_index_type_3: diag(2413, ts.DiagnosticCategory.Error, "_0_index_type_1_is_not_assignable_to_2_index_type_3_2413", "'{0}' index type '{1}' is not assignable to '{2}' index type '{3}'."),
         Class_name_cannot_be_0: diag(2414, ts.DiagnosticCategory.Error, "Class_name_cannot_be_0_2414", "Class name cannot be '{0}'."),
         Class_0_incorrectly_extends_base_class_1: diag(2415, ts.DiagnosticCategory.Error, "Class_0_incorrectly_extends_base_class_1_2415", "Class '{0}' incorrectly extends base class '{1}'."),
         Property_0_in_type_1_is_not_assignable_to_the_same_property_in_base_type_2: diag(2416, ts.DiagnosticCategory.Error, "Property_0_in_type_1_is_not_assignable_to_the_same_property_in_base_type_2_2416", "Property '{0}' in type '{1}' is not assignable to the same property in base type '{2}'."),
@@ -5590,7 +5669,9 @@
         Property_0_is_used_before_being_assigned: diag(2565, ts.DiagnosticCategory.Error, "Property_0_is_used_before_being_assigned_2565", "Property '{0}' is used before being assigned."),
         A_rest_element_cannot_have_a_property_name: diag(2566, ts.DiagnosticCategory.Error, "A_rest_element_cannot_have_a_property_name_2566", "A rest element cannot have a property name."),
         Enum_declarations_can_only_merge_with_namespace_or_other_enum_declarations: diag(2567, ts.DiagnosticCategory.Error, "Enum_declarations_can_only_merge_with_namespace_or_other_enum_declarations_2567", "Enum declarations can only merge with namespace or other enum declarations."),
+        Property_0_may_not_exist_on_type_1_Did_you_mean_2: diag(2568, ts.DiagnosticCategory.Error, "Property_0_may_not_exist_on_type_1_Did_you_mean_2_2568", "Property '{0}' may not exist on type '{1}'. Did you mean '{2}'?"),
         Type_0_is_not_an_array_type_or_a_string_type_Use_compiler_option_downlevelIteration_to_allow_iterating_of_iterators: diag(2569, ts.DiagnosticCategory.Error, "Type_0_is_not_an_array_type_or_a_string_type_Use_compiler_option_downlevelIteration_to_allow_iterati_2569", "Type '{0}' is not an array type or a string type. Use compiler option '--downlevelIteration' to allow iterating of iterators."),
+        Could_not_find_name_0_Did_you_mean_1: diag(2570, ts.DiagnosticCategory.Error, "Could_not_find_name_0_Did_you_mean_1_2570", "Could not find name '{0}'. Did you mean '{1}'?"),
         Object_is_of_type_unknown: diag(2571, ts.DiagnosticCategory.Error, "Object_is_of_type_unknown_2571", "Object is of type 'unknown'."),
         Rest_signatures_are_incompatible: diag(2572, ts.DiagnosticCategory.Error, "Rest_signatures_are_incompatible_2572", "Rest signatures are incompatible."),
         Property_0_is_incompatible_with_rest_element_type: diag(2573, ts.DiagnosticCategory.Error, "Property_0_is_incompatible_with_rest_element_type_2573", "Property '{0}' is incompatible with rest element type."),
@@ -5651,6 +5732,7 @@
         Cannot_assign_to_0_because_it_is_a_namespace: diag(2631, ts.DiagnosticCategory.Error, "Cannot_assign_to_0_because_it_is_a_namespace_2631", "Cannot assign to '{0}' because it is a namespace."),
         Cannot_assign_to_0_because_it_is_an_import: diag(2632, ts.DiagnosticCategory.Error, "Cannot_assign_to_0_because_it_is_an_import_2632", "Cannot assign to '{0}' because it is an import."),
         JSX_property_access_expressions_cannot_include_JSX_namespace_names: diag(2633, ts.DiagnosticCategory.Error, "JSX_property_access_expressions_cannot_include_JSX_namespace_names_2633", "JSX property access expressions cannot include JSX namespace names"),
+        _0_index_signatures_are_incompatible: diag(2634, ts.DiagnosticCategory.Error, "_0_index_signatures_are_incompatible_2634", "'{0}' index signatures are incompatible."),
         Cannot_augment_module_0_with_value_exports_because_it_resolves_to_a_non_module_entity: diag(2649, ts.DiagnosticCategory.Error, "Cannot_augment_module_0_with_value_exports_because_it_resolves_to_a_non_module_entity_2649", "Cannot augment module '{0}' with value exports because it resolves to a non-module entity."),
         A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_members_defined_in_other_enums: diag(2651, ts.DiagnosticCategory.Error, "A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_memb_2651", "A member initializer in a enum declaration cannot reference members declared after it, including members defined in other enums."),
         Merged_declaration_0_cannot_include_a_default_export_declaration_Consider_adding_a_separate_export_default_0_declaration_instead: diag(2652, ts.DiagnosticCategory.Error, "Merged_declaration_0_cannot_include_a_default_export_declaration_Consider_adding_a_separate_export_d_2652", "Merged declaration '{0}' cannot include a default export declaration. Consider adding a separate 'export default {0}' declaration instead."),
@@ -5813,6 +5895,13 @@
         Property_0_may_not_be_used_in_a_static_property_s_initializer_in_the_same_class_when_target_is_esnext_and_useDefineForClassFields_is_false: diag(2810, ts.DiagnosticCategory.Error, "Property_0_may_not_be_used_in_a_static_property_s_initializer_in_the_same_class_when_target_is_esnex_2810", "Property '{0}' may not be used in a static property's initializer in the same class when 'target' is 'esnext' and 'useDefineForClassFields' is 'false'."),
         Initializer_for_property_0: diag(2811, ts.DiagnosticCategory.Error, "Initializer_for_property_0_2811", "Initializer for property '{0}'"),
         Property_0_does_not_exist_on_type_1_Try_changing_the_lib_compiler_option_to_include_dom: diag(2812, ts.DiagnosticCategory.Error, "Property_0_does_not_exist_on_type_1_Try_changing_the_lib_compiler_option_to_include_dom_2812", "Property '{0}' does not exist on type '{1}'. Try changing the 'lib' compiler option to include 'dom'."),
+        Class_declaration_cannot_implement_overload_list_for_0: diag(2813, ts.DiagnosticCategory.Error, "Class_declaration_cannot_implement_overload_list_for_0_2813", "Class declaration cannot implement overload list for '{0}'."),
+        Function_with_bodies_can_only_merge_with_classes_that_are_ambient: diag(2814, ts.DiagnosticCategory.Error, "Function_with_bodies_can_only_merge_with_classes_that_are_ambient_2814", "Function with bodies can only merge with classes that are ambient."),
+        arguments_cannot_be_referenced_in_property_initializers: diag(2815, ts.DiagnosticCategory.Error, "arguments_cannot_be_referenced_in_property_initializers_2815", "'arguments' cannot be referenced in property initializers."),
+        Cannot_use_this_in_a_static_property_initializer_of_a_decorated_class: diag(2816, ts.DiagnosticCategory.Error, "Cannot_use_this_in_a_static_property_initializer_of_a_decorated_class_2816", "Cannot use 'this' in a static property initializer of a decorated class."),
+        Property_0_has_no_initializer_and_is_not_definitely_assigned_in_a_class_static_block: diag(2817, ts.DiagnosticCategory.Error, "Property_0_has_no_initializer_and_is_not_definitely_assigned_in_a_class_static_block_2817", "Property '{0}' has no initializer and is not definitely assigned in a class static block."),
+        Duplicate_identifier_0_Compiler_reserves_name_1_when_emitting_super_references_in_static_initializers: diag(2818, ts.DiagnosticCategory.Error, "Duplicate_identifier_0_Compiler_reserves_name_1_when_emitting_super_references_in_static_initializer_2818", "Duplicate identifier '{0}'. Compiler reserves name '{1}' when emitting 'super' references in static initializers."),
+        Namespace_name_cannot_be_0: diag(2819, ts.DiagnosticCategory.Error, "Namespace_name_cannot_be_0_2819", "Namespace name cannot be '{0}'."),
         Import_declaration_0_is_using_private_name_1: diag(4000, ts.DiagnosticCategory.Error, "Import_declaration_0_is_using_private_name_1_4000", "Import declaration '{0}' is using private name '{1}'."),
         Type_parameter_0_of_exported_class_has_or_is_using_private_name_1: diag(4002, ts.DiagnosticCategory.Error, "Type_parameter_0_of_exported_class_has_or_is_using_private_name_1_4002", "Type parameter '{0}' of exported class has or is using private name '{1}'."),
         Type_parameter_0_of_exported_interface_has_or_is_using_private_name_1: diag(4004, ts.DiagnosticCategory.Error, "Type_parameter_0_of_exported_interface_has_or_is_using_private_name_1_4004", "Type parameter '{0}' of exported interface has or is using private name '{1}'."),
@@ -5912,6 +6001,8 @@
         This_member_must_have_an_override_modifier_because_it_overrides_a_member_in_the_base_class_0: diag(4114, ts.DiagnosticCategory.Error, "This_member_must_have_an_override_modifier_because_it_overrides_a_member_in_the_base_class_0_4114", "This member must have an 'override' modifier because it overrides a member in the base class '{0}'."),
         This_parameter_property_must_have_an_override_modifier_because_it_overrides_a_member_in_base_class_0: diag(4115, ts.DiagnosticCategory.Error, "This_parameter_property_must_have_an_override_modifier_because_it_overrides_a_member_in_base_class_0_4115", "This parameter property must have an 'override' modifier because it overrides a member in base class '{0}'."),
         This_member_must_have_an_override_modifier_because_it_overrides_an_abstract_method_that_is_declared_in_the_base_class_0: diag(4116, ts.DiagnosticCategory.Error, "This_member_must_have_an_override_modifier_because_it_overrides_an_abstract_method_that_is_declared__4116", "This member must have an 'override' modifier because it overrides an abstract method that is declared in the base class '{0}'."),
+        This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0_Did_you_mean_1: diag(4117, ts.DiagnosticCategory.Error, "This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0_Did_you__4117", "This member cannot have an 'override' modifier because it is not declared in the base class '{0}'. Did you mean '{1}'?"),
+        The_type_of_this_node_cannot_be_serialized_because_its_property_0_cannot_be_serialized: diag(4118, ts.DiagnosticCategory.Error, "The_type_of_this_node_cannot_be_serialized_because_its_property_0_cannot_be_serialized_4118", "The type of this node cannot be serialized because its property '{0}' cannot be serialized."),
         The_current_host_does_not_support_the_0_option: diag(5001, ts.DiagnosticCategory.Error, "The_current_host_does_not_support_the_0_option_5001", "The current host does not support the '{0}' option."),
         Cannot_find_the_common_subdirectory_path_for_the_input_files: diag(5009, ts.DiagnosticCategory.Error, "Cannot_find_the_common_subdirectory_path_for_the_input_files_5009", "Cannot find the common subdirectory path for the input files."),
         File_specification_cannot_end_in_a_recursive_directory_wildcard_Asterisk_Asterisk_Colon_0: diag(5010, ts.DiagnosticCategory.Error, "File_specification_cannot_end_in_a_recursive_directory_wildcard_Asterisk_Asterisk_Colon_0_5010", "File specification cannot end in a recursive directory wildcard ('**'): '{0}'."),
@@ -5970,7 +6061,7 @@
         Generates_a_sourcemap_for_each_corresponding_d_ts_file: diag(6000, ts.DiagnosticCategory.Message, "Generates_a_sourcemap_for_each_corresponding_d_ts_file_6000", "Generates a sourcemap for each corresponding '.d.ts' file."),
         Concatenate_and_emit_output_to_single_file: diag(6001, ts.DiagnosticCategory.Message, "Concatenate_and_emit_output_to_single_file_6001", "Concatenate and emit output to single file."),
         Generates_corresponding_d_ts_file: diag(6002, ts.DiagnosticCategory.Message, "Generates_corresponding_d_ts_file_6002", "Generates corresponding '.d.ts' file."),
-        Specify_the_location_where_debugger_should_locate_map_files_instead_of_generated_locations: diag(6003, ts.DiagnosticCategory.Message, "Specify_the_location_where_debugger_should_locate_map_files_instead_of_generated_locations_6003", "Specify the location where debugger should locate map files instead of generated locations."),
+        Specify_the_location_where_debugger_should_locate_map_files_instead_of_generated_locations: diag(6655, ts.DiagnosticCategory.Message, "Specify_the_location_where_debugger_should_locate_map_files_instead_of_generated_locations_6655", "Specify the location where debugger should locate map files instead of generated locations."),
         Specify_the_location_where_debugger_should_locate_TypeScript_files_instead_of_source_locations: diag(6004, ts.DiagnosticCategory.Message, "Specify_the_location_where_debugger_should_locate_TypeScript_files_instead_of_source_locations_6004", "Specify the location where debugger should locate TypeScript files instead of source locations."),
         Watch_input_files: diag(6005, ts.DiagnosticCategory.Message, "Watch_input_files_6005", "Watch input files."),
         Redirect_output_structure_to_the_directory: diag(6006, ts.DiagnosticCategory.Message, "Redirect_output_structure_to_the_directory_6006", "Redirect output structure to the directory."),
@@ -5982,8 +6073,8 @@
         Skip_type_checking_of_declaration_files: diag(6012, ts.DiagnosticCategory.Message, "Skip_type_checking_of_declaration_files_6012", "Skip type checking of declaration files."),
         Do_not_resolve_the_real_path_of_symlinks: diag(6013, ts.DiagnosticCategory.Message, "Do_not_resolve_the_real_path_of_symlinks_6013", "Do not resolve the real path of symlinks."),
         Only_emit_d_ts_declaration_files: diag(6014, ts.DiagnosticCategory.Message, "Only_emit_d_ts_declaration_files_6014", "Only emit '.d.ts' declaration files."),
-        Specify_ECMAScript_target_version_Colon_ES3_default_ES5_ES2015_ES2016_ES2017_ES2018_ES2019_ES2020_ES2021_or_ESNEXT: diag(6015, ts.DiagnosticCategory.Message, "Specify_ECMAScript_target_version_Colon_ES3_default_ES5_ES2015_ES2016_ES2017_ES2018_ES2019_ES2020_ES_6015", "Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019', 'ES2020', 'ES2021', or 'ESNEXT'."),
-        Specify_module_code_generation_Colon_none_commonjs_amd_system_umd_es2015_es2020_or_ESNext: diag(6016, ts.DiagnosticCategory.Message, "Specify_module_code_generation_Colon_none_commonjs_amd_system_umd_es2015_es2020_or_ESNext_6016", "Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', 'es2020', or 'ESNext'."),
+        Specify_ECMAScript_target_version: diag(6015, ts.DiagnosticCategory.Message, "Specify_ECMAScript_target_version_6015", "Specify ECMAScript target version."),
+        Specify_module_code_generation: diag(6016, ts.DiagnosticCategory.Message, "Specify_module_code_generation_6016", "Specify module code generation."),
         Print_this_message: diag(6017, ts.DiagnosticCategory.Message, "Print_this_message_6017", "Print this message."),
         Print_the_compiler_s_version: diag(6019, ts.DiagnosticCategory.Message, "Print_the_compiler_s_version_6019", "Print the compiler's version."),
         Compile_the_project_given_the_path_to_its_configuration_file_or_to_a_folder_with_a_tsconfig_json: diag(6020, ts.DiagnosticCategory.Message, "Compile_the_project_given_the_path_to_its_configuration_file_or_to_a_folder_with_a_tsconfig_json_6020", "Compile the project given the path to its configuration file, or to a folder with a 'tsconfig.json'."),
@@ -6035,7 +6126,7 @@
         Do_not_report_errors_on_unreachable_code: diag(6077, ts.DiagnosticCategory.Message, "Do_not_report_errors_on_unreachable_code_6077", "Do not report errors on unreachable code."),
         Disallow_inconsistently_cased_references_to_the_same_file: diag(6078, ts.DiagnosticCategory.Message, "Disallow_inconsistently_cased_references_to_the_same_file_6078", "Disallow inconsistently-cased references to the same file."),
         Specify_library_files_to_be_included_in_the_compilation: diag(6079, ts.DiagnosticCategory.Message, "Specify_library_files_to_be_included_in_the_compilation_6079", "Specify library files to be included in the compilation."),
-        Specify_JSX_code_generation_Colon_preserve_react_native_react_react_jsx_or_react_jsxdev: diag(6080, ts.DiagnosticCategory.Message, "Specify_JSX_code_generation_Colon_preserve_react_native_react_react_jsx_or_react_jsxdev_6080", "Specify JSX code generation: 'preserve', 'react-native', 'react', 'react-jsx' or 'react-jsxdev'."),
+        Specify_JSX_code_generation: diag(6080, ts.DiagnosticCategory.Message, "Specify_JSX_code_generation_6080", "Specify JSX code generation."),
         File_0_has_an_unsupported_extension_so_skipping_it: diag(6081, ts.DiagnosticCategory.Message, "File_0_has_an_unsupported_extension_so_skipping_it_6081", "File '{0}' has an unsupported extension, so skipping it."),
         Only_amd_and_system_modules_are_supported_alongside_0: diag(6082, ts.DiagnosticCategory.Error, "Only_amd_and_system_modules_are_supported_alongside_0_6082", "Only 'amd' and 'system' modules are supported alongside --{0}."),
         Base_directory_to_resolve_non_absolute_module_names: diag(6083, ts.DiagnosticCategory.Message, "Base_directory_to_resolve_non_absolute_module_names_6083", "Base directory to resolve non-absolute module names."),
@@ -6117,7 +6208,7 @@
         List_of_folders_to_include_type_definitions_from: diag(6161, ts.DiagnosticCategory.Message, "List_of_folders_to_include_type_definitions_from_6161", "List of folders to include type definitions from."),
         Disable_size_limitations_on_JavaScript_projects: diag(6162, ts.DiagnosticCategory.Message, "Disable_size_limitations_on_JavaScript_projects_6162", "Disable size limitations on JavaScript projects."),
         The_character_set_of_the_input_files: diag(6163, ts.DiagnosticCategory.Message, "The_character_set_of_the_input_files_6163", "The character set of the input files."),
-        Emit_a_UTF_8_Byte_Order_Mark_BOM_in_the_beginning_of_output_files: diag(6164, ts.DiagnosticCategory.Message, "Emit_a_UTF_8_Byte_Order_Mark_BOM_in_the_beginning_of_output_files_6164", "Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files."),
+        Emit_a_UTF_8_Byte_Order_Mark_BOM_in_the_beginning_of_output_files: diag(6622, ts.DiagnosticCategory.Message, "Emit_a_UTF_8_Byte_Order_Mark_BOM_in_the_beginning_of_output_files_6622", "Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files."),
         Do_not_truncate_error_messages: diag(6165, ts.DiagnosticCategory.Message, "Do_not_truncate_error_messages_6165", "Do not truncate error messages."),
         Output_directory_for_generated_declaration_files: diag(6166, ts.DiagnosticCategory.Message, "Output_directory_for_generated_declaration_files_6166", "Output directory for generated declaration files."),
         A_series_of_entries_which_re_map_imports_to_lookup_locations_relative_to_the_baseUrl: diag(6167, ts.DiagnosticCategory.Message, "A_series_of_entries_which_re_map_imports_to_lookup_locations_relative_to_the_baseUrl_6167", "A series of entries which re-map imports to lookup locations relative to the 'baseUrl'."),
@@ -6125,20 +6216,12 @@
         Show_all_compiler_options: diag(6169, ts.DiagnosticCategory.Message, "Show_all_compiler_options_6169", "Show all compiler options."),
         Deprecated_Use_outFile_instead_Concatenate_and_emit_output_to_single_file: diag(6170, ts.DiagnosticCategory.Message, "Deprecated_Use_outFile_instead_Concatenate_and_emit_output_to_single_file_6170", "[Deprecated] Use '--outFile' instead. Concatenate and emit output to single file"),
         Command_line_Options: diag(6171, ts.DiagnosticCategory.Message, "Command_line_Options_6171", "Command-line Options"),
-        Basic_Options: diag(6172, ts.DiagnosticCategory.Message, "Basic_Options_6172", "Basic Options"),
-        Strict_Type_Checking_Options: diag(6173, ts.DiagnosticCategory.Message, "Strict_Type_Checking_Options_6173", "Strict Type-Checking Options"),
-        Module_Resolution_Options: diag(6174, ts.DiagnosticCategory.Message, "Module_Resolution_Options_6174", "Module Resolution Options"),
-        Source_Map_Options: diag(6175, ts.DiagnosticCategory.Message, "Source_Map_Options_6175", "Source Map Options"),
-        Additional_Checks: diag(6176, ts.DiagnosticCategory.Message, "Additional_Checks_6176", "Additional Checks"),
-        Experimental_Options: diag(6177, ts.DiagnosticCategory.Message, "Experimental_Options_6177", "Experimental Options"),
-        Advanced_Options: diag(6178, ts.DiagnosticCategory.Message, "Advanced_Options_6178", "Advanced Options"),
         Provide_full_support_for_iterables_in_for_of_spread_and_destructuring_when_targeting_ES5_or_ES3: diag(6179, ts.DiagnosticCategory.Message, "Provide_full_support_for_iterables_in_for_of_spread_and_destructuring_when_targeting_ES5_or_ES3_6179", "Provide full support for iterables in 'for-of', spread, and destructuring when targeting 'ES5' or 'ES3'."),
         Enable_all_strict_type_checking_options: diag(6180, ts.DiagnosticCategory.Message, "Enable_all_strict_type_checking_options_6180", "Enable all strict type-checking options."),
         List_of_language_service_plugins: diag(6181, ts.DiagnosticCategory.Message, "List_of_language_service_plugins_6181", "List of language service plugins."),
         Scoped_package_detected_looking_in_0: diag(6182, ts.DiagnosticCategory.Message, "Scoped_package_detected_looking_in_0_6182", "Scoped package detected, looking in '{0}'"),
-        Reusing_resolution_of_module_0_to_file_1_from_old_program: diag(6183, ts.DiagnosticCategory.Message, "Reusing_resolution_of_module_0_to_file_1_from_old_program_6183", "Reusing resolution of module '{0}' to file '{1}' from old program."),
-        Reusing_module_resolutions_originating_in_0_since_resolutions_are_unchanged_from_old_program: diag(6184, ts.DiagnosticCategory.Message, "Reusing_module_resolutions_originating_in_0_since_resolutions_are_unchanged_from_old_program_6184", "Reusing module resolutions originating in '{0}' since resolutions are unchanged from old program."),
-        Disable_strict_checking_of_generic_signatures_in_function_types: diag(6185, ts.DiagnosticCategory.Message, "Disable_strict_checking_of_generic_signatures_in_function_types_6185", "Disable strict checking of generic signatures in function types."),
+        Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2: diag(6183, ts.DiagnosticCategory.Message, "Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2_6183", "Reusing resolution of module '{0}' from '{1}' of old program, it was successfully resolved to '{2}'."),
+        Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2_with_Package_ID_3: diag(6184, ts.DiagnosticCategory.Message, "Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2_with_Package__6184", "Reusing resolution of module '{0}' from '{1}' of old program, it was successfully resolved to '{2}' with Package ID '{3}'."),
         Enable_strict_checking_of_function_types: diag(6186, ts.DiagnosticCategory.Message, "Enable_strict_checking_of_function_types_6186", "Enable strict checking of function types."),
         Enable_strict_checking_of_property_initialization_in_classes: diag(6187, ts.DiagnosticCategory.Message, "Enable_strict_checking_of_property_initialization_in_classes_6187", "Enable strict checking of property initialization in classes."),
         Numeric_separators_are_not_allowed_here: diag(6188, ts.DiagnosticCategory.Error, "Numeric_separators_are_not_allowed_here_6188", "Numeric separators are not allowed here."),
@@ -6180,7 +6263,6 @@
         Specify_strategy_for_watching_file_Colon_FixedPollingInterval_default_PriorityPollingInterval_DynamicPriorityPolling_FixedChunkSizePolling_UseFsEvents_UseFsEventsOnParentDirectory: diag(6225, ts.DiagnosticCategory.Message, "Specify_strategy_for_watching_file_Colon_FixedPollingInterval_default_PriorityPollingInterval_Dynami_6225", "Specify strategy for watching file: 'FixedPollingInterval' (default), 'PriorityPollingInterval', 'DynamicPriorityPolling', 'FixedChunkSizePolling', 'UseFsEvents', 'UseFsEventsOnParentDirectory'."),
         Specify_strategy_for_watching_directory_on_platforms_that_don_t_support_recursive_watching_natively_Colon_UseFsEvents_default_FixedPollingInterval_DynamicPriorityPolling_FixedChunkSizePolling: diag(6226, ts.DiagnosticCategory.Message, "Specify_strategy_for_watching_directory_on_platforms_that_don_t_support_recursive_watching_natively__6226", "Specify strategy for watching directory on platforms that don't support recursive watching natively: 'UseFsEvents' (default), 'FixedPollingInterval', 'DynamicPriorityPolling', 'FixedChunkSizePolling'."),
         Specify_strategy_for_creating_a_polling_watch_when_it_fails_to_create_using_file_system_events_Colon_FixedInterval_default_PriorityInterval_DynamicPriority_FixedChunkSize: diag(6227, ts.DiagnosticCategory.Message, "Specify_strategy_for_creating_a_polling_watch_when_it_fails_to_create_using_file_system_events_Colon_6227", "Specify strategy for creating a polling watch when it fails to create using file system events: 'FixedInterval' (default), 'PriorityInterval', 'DynamicPriority', 'FixedChunkSize'."),
-        Synchronously_call_callbacks_and_update_the_state_of_directory_watchers_on_platforms_that_don_t_support_recursive_watching_natively: diag(6228, ts.DiagnosticCategory.Message, "Synchronously_call_callbacks_and_update_the_state_of_directory_watchers_on_platforms_that_don_t_supp_6228", "Synchronously call callbacks and update the state of directory watchers on platforms that don't support recursive watching natively."),
         Tag_0_expects_at_least_1_arguments_but_the_JSX_factory_2_provides_at_most_3: diag(6229, ts.DiagnosticCategory.Error, "Tag_0_expects_at_least_1_arguments_but_the_JSX_factory_2_provides_at_most_3_6229", "Tag '{0}' expects at least '{1}' arguments, but the JSX factory '{2}' provides at most '{3}'."),
         Option_0_can_only_be_specified_in_tsconfig_json_file_or_set_to_false_or_null_on_command_line: diag(6230, ts.DiagnosticCategory.Error, "Option_0_can_only_be_specified_in_tsconfig_json_file_or_set_to_false_or_null_on_command_line_6230", "Option '{0}' can only be specified in 'tsconfig.json' file or set to 'false' or 'null' on command line."),
         Could_not_resolve_the_path_0_with_the_extensions_Colon_1: diag(6231, ts.DiagnosticCategory.Error, "Could_not_resolve_the_path_0_with_the_extensions_Colon_1_6231", "Could not resolve the path '{0}' with the extensions: {1}."),
@@ -6195,6 +6277,21 @@
         File_0_does_not_exist_according_to_earlier_cached_lookups: diag(6240, ts.DiagnosticCategory.Message, "File_0_does_not_exist_according_to_earlier_cached_lookups_6240", "File '{0}' does not exist according to earlier cached lookups."),
         Resolution_for_type_reference_directive_0_was_found_in_cache_from_location_1: diag(6241, ts.DiagnosticCategory.Message, "Resolution_for_type_reference_directive_0_was_found_in_cache_from_location_1_6241", "Resolution for type reference directive '{0}' was found in cache from location '{1}'."),
         Resolving_type_reference_directive_0_containing_file_1: diag(6242, ts.DiagnosticCategory.Message, "Resolving_type_reference_directive_0_containing_file_1_6242", "======== Resolving type reference directive '{0}', containing file '{1}'. ========"),
+        Interpret_optional_property_types_as_written_rather_than_adding_undefined: diag(6243, ts.DiagnosticCategory.Message, "Interpret_optional_property_types_as_written_rather_than_adding_undefined_6243", "Interpret optional property types as written, rather than adding 'undefined'."),
+        Modules: diag(6244, ts.DiagnosticCategory.Message, "Modules_6244", "Modules"),
+        File_Management: diag(6245, ts.DiagnosticCategory.Message, "File_Management_6245", "File Management"),
+        Emit: diag(6246, ts.DiagnosticCategory.Message, "Emit_6246", "Emit"),
+        JavaScript_Support: diag(6247, ts.DiagnosticCategory.Message, "JavaScript_Support_6247", "JavaScript Support"),
+        Type_Checking: diag(6248, ts.DiagnosticCategory.Message, "Type_Checking_6248", "Type Checking"),
+        Editor_Support: diag(6249, ts.DiagnosticCategory.Message, "Editor_Support_6249", "Editor Support"),
+        Watch_and_Build_Modes: diag(6250, ts.DiagnosticCategory.Message, "Watch_and_Build_Modes_6250", "Watch and Build Modes"),
+        Compiler_Diagnostics: diag(6251, ts.DiagnosticCategory.Message, "Compiler_Diagnostics_6251", "Compiler Diagnostics"),
+        Interop_Constraints: diag(6252, ts.DiagnosticCategory.Message, "Interop_Constraints_6252", "Interop Constraints"),
+        Backwards_Compatibility: diag(6253, ts.DiagnosticCategory.Message, "Backwards_Compatibility_6253", "Backwards Compatibility"),
+        Language_and_Environment: diag(6254, ts.DiagnosticCategory.Message, "Language_and_Environment_6254", "Language and Environment"),
+        Projects: diag(6255, ts.DiagnosticCategory.Message, "Projects_6255", "Projects"),
+        Output_Formatting: diag(6256, ts.DiagnosticCategory.Message, "Output_Formatting_6256", "Output Formatting"),
+        Completeness: diag(6257, ts.DiagnosticCategory.Message, "Completeness_6257", "Completeness"),
         Projects_to_reference: diag(6300, ts.DiagnosticCategory.Message, "Projects_to_reference_6300", "Projects to reference"),
         Enable_project_compilation: diag(6302, ts.DiagnosticCategory.Message, "Enable_project_compilation_6302", "Enable project compilation"),
         Composite_projects_may_not_disable_declaration_emit: diag(6304, ts.DiagnosticCategory.Error, "Composite_projects_may_not_disable_declaration_emit_6304", "Composite projects may not disable declaration emit."),
@@ -6220,9 +6317,7 @@
         Project_0_can_t_be_built_because_its_dependency_1_has_errors: diag(6363, ts.DiagnosticCategory.Message, "Project_0_can_t_be_built_because_its_dependency_1_has_errors_6363", "Project '{0}' can't be built because its dependency '{1}' has errors"),
         Build_one_or_more_projects_and_their_dependencies_if_out_of_date: diag(6364, ts.DiagnosticCategory.Message, "Build_one_or_more_projects_and_their_dependencies_if_out_of_date_6364", "Build one or more projects and their dependencies, if out of date"),
         Delete_the_outputs_of_all_projects: diag(6365, ts.DiagnosticCategory.Message, "Delete_the_outputs_of_all_projects_6365", "Delete the outputs of all projects"),
-        Enable_verbose_logging: diag(6366, ts.DiagnosticCategory.Message, "Enable_verbose_logging_6366", "Enable verbose logging"),
         Show_what_would_be_built_or_deleted_if_specified_with_clean: diag(6367, ts.DiagnosticCategory.Message, "Show_what_would_be_built_or_deleted_if_specified_with_clean_6367", "Show what would be built (or deleted, if specified with '--clean')"),
-        Build_all_projects_including_those_that_appear_to_be_up_to_date: diag(6368, ts.DiagnosticCategory.Message, "Build_all_projects_including_those_that_appear_to_be_up_to_date_6368", "Build all projects, including those that appear to be up to date"),
         Option_build_must_be_the_first_command_line_argument: diag(6369, ts.DiagnosticCategory.Error, "Option_build_must_be_the_first_command_line_argument_6369", "Option '--build' must be the first command line argument."),
         Options_0_and_1_cannot_be_combined: diag(6370, ts.DiagnosticCategory.Error, "Options_0_and_1_cannot_be_combined_6370", "Options '{0}' and '{1}' cannot be combined."),
         Updating_unchanged_output_timestamps_of_project_0: diag(6371, ts.DiagnosticCategory.Message, "Updating_unchanged_output_timestamps_of_project_0_6371", "Updating unchanged output timestamps of project '{0}'..."),
@@ -6243,15 +6338,167 @@
         Performance_timings_for_diagnostics_or_extendedDiagnostics_are_not_available_in_this_session_A_native_implementation_of_the_Web_Performance_API_could_not_be_found: diag(6386, ts.DiagnosticCategory.Message, "Performance_timings_for_diagnostics_or_extendedDiagnostics_are_not_available_in_this_session_A_nativ_6386", "Performance timings for '--diagnostics' or '--extendedDiagnostics' are not available in this session. A native implementation of the Web Performance API could not be found."),
         The_signature_0_of_1_is_deprecated: diag(6387, ts.DiagnosticCategory.Suggestion, "The_signature_0_of_1_is_deprecated_6387", "The signature '{0}' of '{1}' is deprecated.", undefined, undefined, true),
         Project_0_is_being_forcibly_rebuilt: diag(6388, ts.DiagnosticCategory.Message, "Project_0_is_being_forcibly_rebuilt_6388", "Project '{0}' is being forcibly rebuilt"),
+        Reusing_resolution_of_module_0_from_1_of_old_program_it_was_not_resolved: diag(6389, ts.DiagnosticCategory.Message, "Reusing_resolution_of_module_0_from_1_of_old_program_it_was_not_resolved_6389", "Reusing resolution of module '{0}' from '{1}' of old program, it was not resolved."),
+        Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved_to_2: diag(6390, ts.DiagnosticCategory.Message, "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved__6390", "Reusing resolution of type reference directive '{0}' from '{1}' of old program, it was successfully resolved to '{2}'."),
+        Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved_to_2_with_Package_ID_3: diag(6391, ts.DiagnosticCategory.Message, "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved__6391", "Reusing resolution of type reference directive '{0}' from '{1}' of old program, it was successfully resolved to '{2}' with Package ID '{3}'."),
+        Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_not_resolved: diag(6392, ts.DiagnosticCategory.Message, "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_not_resolved_6392", "Reusing resolution of type reference directive '{0}' from '{1}' of old program, it was not resolved."),
+        Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_3: diag(6393, ts.DiagnosticCategory.Message, "Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_6393", "Reusing resolution of module '{0}' from '{1}' found in cache from location '{2}', it was successfully resolved to '{3}'."),
+        Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_3_with_Package_ID_4: diag(6394, ts.DiagnosticCategory.Message, "Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_6394", "Reusing resolution of module '{0}' from '{1}' found in cache from location '{2}', it was successfully resolved to '{3}' with Package ID '{4}'."),
+        Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_not_resolved: diag(6395, ts.DiagnosticCategory.Message, "Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_not_resolved_6395", "Reusing resolution of module '{0}' from '{1}' found in cache from location '{2}', it was not resolved."),
+        Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_3: diag(6396, ts.DiagnosticCategory.Message, "Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_succes_6396", "Reusing resolution of type reference directive '{0}' from '{1}' found in cache from location '{2}', it was successfully resolved to '{3}'."),
+        Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_3_with_Package_ID_4: diag(6397, ts.DiagnosticCategory.Message, "Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_succes_6397", "Reusing resolution of type reference directive '{0}' from '{1}' found in cache from location '{2}', it was successfully resolved to '{3}' with Package ID '{4}'."),
+        Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_not_resolved: diag(6398, ts.DiagnosticCategory.Message, "Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_not_re_6398", "Reusing resolution of type reference directive '{0}' from '{1}' found in cache from location '{2}', it was not resolved."),
         The_expected_type_comes_from_property_0_which_is_declared_here_on_type_1: diag(6500, ts.DiagnosticCategory.Message, "The_expected_type_comes_from_property_0_which_is_declared_here_on_type_1_6500", "The expected type comes from property '{0}' which is declared here on type '{1}'"),
         The_expected_type_comes_from_this_index_signature: diag(6501, ts.DiagnosticCategory.Message, "The_expected_type_comes_from_this_index_signature_6501", "The expected type comes from this index signature."),
         The_expected_type_comes_from_the_return_type_of_this_signature: diag(6502, ts.DiagnosticCategory.Message, "The_expected_type_comes_from_the_return_type_of_this_signature_6502", "The expected type comes from the return type of this signature."),
         Print_names_of_files_that_are_part_of_the_compilation_and_then_stop_processing: diag(6503, ts.DiagnosticCategory.Message, "Print_names_of_files_that_are_part_of_the_compilation_and_then_stop_processing_6503", "Print names of files that are part of the compilation and then stop processing."),
         File_0_is_a_JavaScript_file_Did_you_mean_to_enable_the_allowJs_option: diag(6504, ts.DiagnosticCategory.Error, "File_0_is_a_JavaScript_file_Did_you_mean_to_enable_the_allowJs_option_6504", "File '{0}' is a JavaScript file. Did you mean to enable the 'allowJs' option?"),
         Print_names_of_files_and_the_reason_they_are_part_of_the_compilation: diag(6505, ts.DiagnosticCategory.Message, "Print_names_of_files_and_the_reason_they_are_part_of_the_compilation_6505", "Print names of files and the reason they are part of the compilation."),
-        Include_undefined_in_index_signature_results: diag(6800, ts.DiagnosticCategory.Message, "Include_undefined_in_index_signature_results_6800", "Include 'undefined' in index signature results"),
-        Ensure_overriding_members_in_derived_classes_are_marked_with_an_override_modifier: diag(6801, ts.DiagnosticCategory.Message, "Ensure_overriding_members_in_derived_classes_are_marked_with_an_override_modifier_6801", "Ensure overriding members in derived classes are marked with an 'override' modifier."),
-        Require_undeclared_properties_from_index_signatures_to_use_element_accesses: diag(6802, ts.DiagnosticCategory.Message, "Require_undeclared_properties_from_index_signatures_to_use_element_accesses_6802", "Require undeclared properties from index signatures to use element accesses."),
+        Consider_adding_a_declare_modifier_to_this_class: diag(6506, ts.DiagnosticCategory.Message, "Consider_adding_a_declare_modifier_to_this_class_6506", "Consider adding a 'declare' modifier to this class."),
+        Allow_JavaScript_files_to_be_a_part_of_your_program_Use_the_checkJS_option_to_get_errors_from_these_files: diag(6600, ts.DiagnosticCategory.Message, "Allow_JavaScript_files_to_be_a_part_of_your_program_Use_the_checkJS_option_to_get_errors_from_these__6600", "Allow JavaScript files to be a part of your program. Use the `checkJS` option to get errors from these files."),
+        Allow_import_x_from_y_when_a_module_doesn_t_have_a_default_export: diag(6601, ts.DiagnosticCategory.Message, "Allow_import_x_from_y_when_a_module_doesn_t_have_a_default_export_6601", "Allow 'import x from y' when a module doesn't have a default export."),
+        Allow_accessing_UMD_globals_from_modules: diag(6602, ts.DiagnosticCategory.Message, "Allow_accessing_UMD_globals_from_modules_6602", "Allow accessing UMD globals from modules."),
+        Disable_error_reporting_for_unreachable_code: diag(6603, ts.DiagnosticCategory.Message, "Disable_error_reporting_for_unreachable_code_6603", "Disable error reporting for unreachable code."),
+        Disable_error_reporting_for_unused_labels: diag(6604, ts.DiagnosticCategory.Message, "Disable_error_reporting_for_unused_labels_6604", "Disable error reporting for unused labels."),
+        Ensure_use_strict_is_always_emitted: diag(6605, ts.DiagnosticCategory.Message, "Ensure_use_strict_is_always_emitted_6605", "Ensure 'use strict' is always emitted."),
+        Have_recompiles_in_projects_that_use_incremental_and_watch_mode_assume_that_changes_within_a_file_will_only_affect_files_directly_depending_on_it: diag(6606, ts.DiagnosticCategory.Message, "Have_recompiles_in_projects_that_use_incremental_and_watch_mode_assume_that_changes_within_a_file_wi_6606", "Have recompiles in projects that use `incremental` and `watch` mode assume that changes within a file will only affect files directly depending on it."),
+        Specify_the_base_directory_to_resolve_non_relative_module_names: diag(6607, ts.DiagnosticCategory.Message, "Specify_the_base_directory_to_resolve_non_relative_module_names_6607", "Specify the base directory to resolve non-relative module names."),
+        No_longer_supported_In_early_versions_manually_set_the_text_encoding_for_reading_files: diag(6608, ts.DiagnosticCategory.Message, "No_longer_supported_In_early_versions_manually_set_the_text_encoding_for_reading_files_6608", "No longer supported. In early versions, manually set the text encoding for reading files."),
+        Enable_error_reporting_in_type_checked_JavaScript_files: diag(6609, ts.DiagnosticCategory.Message, "Enable_error_reporting_in_type_checked_JavaScript_files_6609", "Enable error reporting in type-checked JavaScript files."),
+        Enable_constraints_that_allow_a_TypeScript_project_to_be_used_with_project_references: diag(6611, ts.DiagnosticCategory.Message, "Enable_constraints_that_allow_a_TypeScript_project_to_be_used_with_project_references_6611", "Enable constraints that allow a TypeScript project to be used with project references."),
+        Generate_d_ts_files_from_TypeScript_and_JavaScript_files_in_your_project: diag(6612, ts.DiagnosticCategory.Message, "Generate_d_ts_files_from_TypeScript_and_JavaScript_files_in_your_project_6612", "Generate .d.ts files from TypeScript and JavaScript files in your project."),
+        Specify_the_output_directory_for_generated_declaration_files: diag(6613, ts.DiagnosticCategory.Message, "Specify_the_output_directory_for_generated_declaration_files_6613", "Specify the output directory for generated declaration files."),
+        Create_sourcemaps_for_d_ts_files: diag(6614, ts.DiagnosticCategory.Message, "Create_sourcemaps_for_d_ts_files_6614", "Create sourcemaps for d.ts files."),
+        Output_compiler_performance_information_after_building: diag(6615, ts.DiagnosticCategory.Message, "Output_compiler_performance_information_after_building_6615", "Output compiler performance information after building."),
+        Disables_inference_for_type_acquisition_by_looking_at_filenames_in_a_project: diag(6616, ts.DiagnosticCategory.Message, "Disables_inference_for_type_acquisition_by_looking_at_filenames_in_a_project_6616", "Disables inference for type acquisition by looking at filenames in a project."),
+        Reduce_the_number_of_projects_loaded_automatically_by_TypeScript: diag(6617, ts.DiagnosticCategory.Message, "Reduce_the_number_of_projects_loaded_automatically_by_TypeScript_6617", "Reduce the number of projects loaded automatically by TypeScript."),
+        Remove_the_20mb_cap_on_total_source_code_size_for_JavaScript_files_in_the_TypeScript_language_server: diag(6618, ts.DiagnosticCategory.Message, "Remove_the_20mb_cap_on_total_source_code_size_for_JavaScript_files_in_the_TypeScript_language_server_6618", "Remove the 20mb cap on total source code size for JavaScript files in the TypeScript language server."),
+        Opt_a_project_out_of_multi_project_reference_checking_when_editing: diag(6619, ts.DiagnosticCategory.Message, "Opt_a_project_out_of_multi_project_reference_checking_when_editing_6619", "Opt a project out of multi-project reference checking when editing."),
+        Disable_preferring_source_files_instead_of_declaration_files_when_referencing_composite_projects: diag(6620, ts.DiagnosticCategory.Message, "Disable_preferring_source_files_instead_of_declaration_files_when_referencing_composite_projects_6620", "Disable preferring source files instead of declaration files when referencing composite projects"),
+        Emit_more_compliant_but_verbose_and_less_performant_JavaScript_for_iteration: diag(6621, ts.DiagnosticCategory.Message, "Emit_more_compliant_but_verbose_and_less_performant_JavaScript_for_iteration_6621", "Emit more compliant, but verbose and less performant JavaScript for iteration."),
+        Only_output_d_ts_files_and_not_JavaScript_files: diag(6623, ts.DiagnosticCategory.Message, "Only_output_d_ts_files_and_not_JavaScript_files_6623", "Only output d.ts files and not JavaScript files."),
+        Emit_design_type_metadata_for_decorated_declarations_in_source_files: diag(6624, ts.DiagnosticCategory.Message, "Emit_design_type_metadata_for_decorated_declarations_in_source_files_6624", "Emit design-type metadata for decorated declarations in source files."),
+        Disable_the_type_acquisition_for_JavaScript_projects: diag(6625, ts.DiagnosticCategory.Message, "Disable_the_type_acquisition_for_JavaScript_projects_6625", "Disable the type acquisition for JavaScript projects"),
+        Emit_additional_JavaScript_to_ease_support_for_importing_CommonJS_modules_This_enables_allowSyntheticDefaultImports_for_type_compatibility: diag(6626, ts.DiagnosticCategory.Message, "Emit_additional_JavaScript_to_ease_support_for_importing_CommonJS_modules_This_enables_allowSyntheti_6626", "Emit additional JavaScript to ease support for importing CommonJS modules. This enables `allowSyntheticDefaultImports` for type compatibility."),
+        Filters_results_from_the_include_option: diag(6627, ts.DiagnosticCategory.Message, "Filters_results_from_the_include_option_6627", "Filters results from the `include` option."),
+        Remove_a_list_of_directories_from_the_watch_process: diag(6628, ts.DiagnosticCategory.Message, "Remove_a_list_of_directories_from_the_watch_process_6628", "Remove a list of directories from the watch process."),
+        Remove_a_list_of_files_from_the_watch_mode_s_processing: diag(6629, ts.DiagnosticCategory.Message, "Remove_a_list_of_files_from_the_watch_mode_s_processing_6629", "Remove a list of files from the watch mode's processing."),
+        Enable_experimental_support_for_TC39_stage_2_draft_decorators: diag(6630, ts.DiagnosticCategory.Message, "Enable_experimental_support_for_TC39_stage_2_draft_decorators_6630", "Enable experimental support for TC39 stage 2 draft decorators."),
+        Print_files_read_during_the_compilation_including_why_it_was_included: diag(6631, ts.DiagnosticCategory.Message, "Print_files_read_during_the_compilation_including_why_it_was_included_6631", "Print files read during the compilation including why it was included."),
+        Output_more_detailed_compiler_performance_information_after_building: diag(6632, ts.DiagnosticCategory.Message, "Output_more_detailed_compiler_performance_information_after_building_6632", "Output more detailed compiler performance information after building."),
+        Specify_one_or_more_path_or_node_module_references_to_base_configuration_files_from_which_settings_are_inherited: diag(6633, ts.DiagnosticCategory.Message, "Specify_one_or_more_path_or_node_module_references_to_base_configuration_files_from_which_settings_a_6633", "Specify one or more path or node module references to base configuration files from which settings are inherited."),
+        Specify_what_approach_the_watcher_should_use_if_the_system_runs_out_of_native_file_watchers: diag(6634, ts.DiagnosticCategory.Message, "Specify_what_approach_the_watcher_should_use_if_the_system_runs_out_of_native_file_watchers_6634", "Specify what approach the watcher should use if the system runs out of native file watchers."),
+        Include_a_list_of_files_This_does_not_support_glob_patterns_as_opposed_to_include: diag(6635, ts.DiagnosticCategory.Message, "Include_a_list_of_files_This_does_not_support_glob_patterns_as_opposed_to_include_6635", "Include a list of files. This does not support glob patterns, as opposed to `include`."),
+        Build_all_projects_including_those_that_appear_to_be_up_to_date: diag(6636, ts.DiagnosticCategory.Message, "Build_all_projects_including_those_that_appear_to_be_up_to_date_6636", "Build all projects, including those that appear to be up to date"),
+        Ensure_that_casing_is_correct_in_imports: diag(6637, ts.DiagnosticCategory.Message, "Ensure_that_casing_is_correct_in_imports_6637", "Ensure that casing is correct in imports."),
+        Emit_a_v8_CPU_profile_of_the_compiler_run_for_debugging: diag(6638, ts.DiagnosticCategory.Message, "Emit_a_v8_CPU_profile_of_the_compiler_run_for_debugging_6638", "Emit a v8 CPU profile of the compiler run for debugging."),
+        Allow_importing_helper_functions_from_tslib_once_per_project_instead_of_including_them_per_file: diag(6639, ts.DiagnosticCategory.Message, "Allow_importing_helper_functions_from_tslib_once_per_project_instead_of_including_them_per_file_6639", "Allow importing helper functions from tslib once per project, instead of including them per-file."),
+        Specify_a_list_of_glob_patterns_that_match_files_to_be_included_in_compilation: diag(6641, ts.DiagnosticCategory.Message, "Specify_a_list_of_glob_patterns_that_match_files_to_be_included_in_compilation_6641", "Specify a list of glob patterns that match files to be included in compilation."),
+        Save_tsbuildinfo_files_to_allow_for_incremental_compilation_of_projects: diag(6642, ts.DiagnosticCategory.Message, "Save_tsbuildinfo_files_to_allow_for_incremental_compilation_of_projects_6642", "Save .tsbuildinfo files to allow for incremental compilation of projects."),
+        Include_sourcemap_files_inside_the_emitted_JavaScript: diag(6643, ts.DiagnosticCategory.Message, "Include_sourcemap_files_inside_the_emitted_JavaScript_6643", "Include sourcemap files inside the emitted JavaScript."),
+        Include_source_code_in_the_sourcemaps_inside_the_emitted_JavaScript: diag(6644, ts.DiagnosticCategory.Message, "Include_source_code_in_the_sourcemaps_inside_the_emitted_JavaScript_6644", "Include source code in the sourcemaps inside the emitted JavaScript."),
+        Ensure_that_each_file_can_be_safely_transpiled_without_relying_on_other_imports: diag(6645, ts.DiagnosticCategory.Message, "Ensure_that_each_file_can_be_safely_transpiled_without_relying_on_other_imports_6645", "Ensure that each file can be safely transpiled without relying on other imports."),
+        Specify_what_JSX_code_is_generated: diag(6646, ts.DiagnosticCategory.Message, "Specify_what_JSX_code_is_generated_6646", "Specify what JSX code is generated."),
+        Specify_the_JSX_factory_function_used_when_targeting_React_JSX_emit_e_g_React_createElement_or_h: diag(6647, ts.DiagnosticCategory.Message, "Specify_the_JSX_factory_function_used_when_targeting_React_JSX_emit_e_g_React_createElement_or_h_6647", "Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'"),
+        Specify_the_JSX_Fragment_reference_used_for_fragments_when_targeting_React_JSX_emit_e_g_React_Fragment_or_Fragment: diag(6648, ts.DiagnosticCategory.Message, "Specify_the_JSX_Fragment_reference_used_for_fragments_when_targeting_React_JSX_emit_e_g_React_Fragme_6648", "Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'."),
+        Specify_module_specifier_used_to_import_the_JSX_factory_functions_when_using_jsx_Colon_react_jsx_Asterisk: diag(6649, ts.DiagnosticCategory.Message, "Specify_module_specifier_used_to_import_the_JSX_factory_functions_when_using_jsx_Colon_react_jsx_Ast_6649", "Specify module specifier used to import the JSX factory functions when using `jsx: react-jsx*`.`"),
+        Make_keyof_only_return_strings_instead_of_string_numbers_or_symbols_Legacy_option: diag(6650, ts.DiagnosticCategory.Message, "Make_keyof_only_return_strings_instead_of_string_numbers_or_symbols_Legacy_option_6650", "Make keyof only return strings instead of string, numbers or symbols. Legacy option."),
+        Specify_a_set_of_bundled_library_declaration_files_that_describe_the_target_runtime_environment: diag(6651, ts.DiagnosticCategory.Message, "Specify_a_set_of_bundled_library_declaration_files_that_describe_the_target_runtime_environment_6651", "Specify a set of bundled library declaration files that describe the target runtime environment."),
+        Print_the_names_of_emitted_files_after_a_compilation: diag(6652, ts.DiagnosticCategory.Message, "Print_the_names_of_emitted_files_after_a_compilation_6652", "Print the names of emitted files after a compilation."),
+        Print_all_of_the_files_read_during_the_compilation: diag(6653, ts.DiagnosticCategory.Message, "Print_all_of_the_files_read_during_the_compilation_6653", "Print all of the files read during the compilation."),
+        Set_the_language_of_the_messaging_from_TypeScript_This_does_not_affect_emit: diag(6654, ts.DiagnosticCategory.Message, "Set_the_language_of_the_messaging_from_TypeScript_This_does_not_affect_emit_6654", "Set the language of the messaging from TypeScript. This does not affect emit."),
+        Specify_the_maximum_folder_depth_used_for_checking_JavaScript_files_from_node_modules_Only_applicable_with_allowJs: diag(6656, ts.DiagnosticCategory.Message, "Specify_the_maximum_folder_depth_used_for_checking_JavaScript_files_from_node_modules_Only_applicabl_6656", "Specify the maximum folder depth used for checking JavaScript files from `node_modules`. Only applicable with `allowJs`."),
+        Specify_what_module_code_is_generated: diag(6657, ts.DiagnosticCategory.Message, "Specify_what_module_code_is_generated_6657", "Specify what module code is generated."),
+        Specify_how_TypeScript_looks_up_a_file_from_a_given_module_specifier: diag(6658, ts.DiagnosticCategory.Message, "Specify_how_TypeScript_looks_up_a_file_from_a_given_module_specifier_6658", "Specify how TypeScript looks up a file from a given module specifier."),
+        Set_the_newline_character_for_emitting_files: diag(6659, ts.DiagnosticCategory.Message, "Set_the_newline_character_for_emitting_files_6659", "Set the newline character for emitting files."),
+        Disable_emitting_files_from_a_compilation: diag(6660, ts.DiagnosticCategory.Message, "Disable_emitting_files_from_a_compilation_6660", "Disable emitting files from a compilation."),
+        Disable_generating_custom_helper_functions_like_extends_in_compiled_output: diag(6661, ts.DiagnosticCategory.Message, "Disable_generating_custom_helper_functions_like_extends_in_compiled_output_6661", "Disable generating custom helper functions like `__extends` in compiled output."),
+        Disable_emitting_files_if_any_type_checking_errors_are_reported: diag(6662, ts.DiagnosticCategory.Message, "Disable_emitting_files_if_any_type_checking_errors_are_reported_6662", "Disable emitting files if any type checking errors are reported."),
+        Disable_truncating_types_in_error_messages: diag(6663, ts.DiagnosticCategory.Message, "Disable_truncating_types_in_error_messages_6663", "Disable truncating types in error messages."),
+        Enable_error_reporting_for_fallthrough_cases_in_switch_statements: diag(6664, ts.DiagnosticCategory.Message, "Enable_error_reporting_for_fallthrough_cases_in_switch_statements_6664", "Enable error reporting for fallthrough cases in switch statements."),
+        Enable_error_reporting_for_expressions_and_declarations_with_an_implied_any_type: diag(6665, ts.DiagnosticCategory.Message, "Enable_error_reporting_for_expressions_and_declarations_with_an_implied_any_type_6665", "Enable error reporting for expressions and declarations with an implied `any` type.."),
+        Ensure_overriding_members_in_derived_classes_are_marked_with_an_override_modifier: diag(6666, ts.DiagnosticCategory.Message, "Ensure_overriding_members_in_derived_classes_are_marked_with_an_override_modifier_6666", "Ensure overriding members in derived classes are marked with an override modifier."),
+        Enable_error_reporting_for_codepaths_that_do_not_explicitly_return_in_a_function: diag(6667, ts.DiagnosticCategory.Message, "Enable_error_reporting_for_codepaths_that_do_not_explicitly_return_in_a_function_6667", "Enable error reporting for codepaths that do not explicitly return in a function."),
+        Enable_error_reporting_when_this_is_given_the_type_any: diag(6668, ts.DiagnosticCategory.Message, "Enable_error_reporting_when_this_is_given_the_type_any_6668", "Enable error reporting when `this` is given the type `any`."),
+        Disable_adding_use_strict_directives_in_emitted_JavaScript_files: diag(6669, ts.DiagnosticCategory.Message, "Disable_adding_use_strict_directives_in_emitted_JavaScript_files_6669", "Disable adding 'use strict' directives in emitted JavaScript files."),
+        Disable_including_any_library_files_including_the_default_lib_d_ts: diag(6670, ts.DiagnosticCategory.Message, "Disable_including_any_library_files_including_the_default_lib_d_ts_6670", "Disable including any library files, including the default lib.d.ts."),
+        Enforces_using_indexed_accessors_for_keys_declared_using_an_indexed_type: diag(6671, ts.DiagnosticCategory.Message, "Enforces_using_indexed_accessors_for_keys_declared_using_an_indexed_type_6671", "Enforces using indexed accessors for keys declared using an indexed type"),
+        Disallow_import_s_require_s_or_reference_s_from_expanding_the_number_of_files_TypeScript_should_add_to_a_project: diag(6672, ts.DiagnosticCategory.Message, "Disallow_import_s_require_s_or_reference_s_from_expanding_the_number_of_files_TypeScript_should_add__6672", "Disallow `import`s, `require`s or `<reference>`s from expanding the number of files TypeScript should add to a project."),
+        Disable_strict_checking_of_generic_signatures_in_function_types: diag(6673, ts.DiagnosticCategory.Message, "Disable_strict_checking_of_generic_signatures_in_function_types_6673", "Disable strict checking of generic signatures in function types."),
+        Add_undefined_to_a_type_when_accessed_using_an_index: diag(6674, ts.DiagnosticCategory.Message, "Add_undefined_to_a_type_when_accessed_using_an_index_6674", "Add `undefined` to a type when accessed using an index."),
+        Enable_error_reporting_when_a_local_variables_aren_t_read: diag(6675, ts.DiagnosticCategory.Message, "Enable_error_reporting_when_a_local_variables_aren_t_read_6675", "Enable error reporting when a local variables aren't read."),
+        Raise_an_error_when_a_function_parameter_isn_t_read: diag(6676, ts.DiagnosticCategory.Message, "Raise_an_error_when_a_function_parameter_isn_t_read_6676", "Raise an error when a function parameter isn't read"),
+        Deprecated_setting_Use_outFile_instead: diag(6677, ts.DiagnosticCategory.Message, "Deprecated_setting_Use_outFile_instead_6677", "Deprecated setting. Use `outFile` instead."),
+        Specify_an_output_folder_for_all_emitted_files: diag(6678, ts.DiagnosticCategory.Message, "Specify_an_output_folder_for_all_emitted_files_6678", "Specify an output folder for all emitted files."),
+        Specify_a_file_that_bundles_all_outputs_into_one_JavaScript_file_If_declaration_is_true_also_designates_a_file_that_bundles_all_d_ts_output: diag(6679, ts.DiagnosticCategory.Message, "Specify_a_file_that_bundles_all_outputs_into_one_JavaScript_file_If_declaration_is_true_also_designa_6679", "Specify a file that bundles all outputs into one JavaScript file. If `declaration` is true, also designates a file that bundles all .d.ts output."),
+        Specify_a_set_of_entries_that_re_map_imports_to_additional_lookup_locations: diag(6680, ts.DiagnosticCategory.Message, "Specify_a_set_of_entries_that_re_map_imports_to_additional_lookup_locations_6680", "Specify a set of entries that re-map imports to additional lookup locations."),
+        Specify_a_list_of_language_service_plugins_to_include: diag(6681, ts.DiagnosticCategory.Message, "Specify_a_list_of_language_service_plugins_to_include_6681", "Specify a list of language service plugins to include."),
+        Disable_erasing_const_enum_declarations_in_generated_code: diag(6682, ts.DiagnosticCategory.Message, "Disable_erasing_const_enum_declarations_in_generated_code_6682", "Disable erasing `const enum` declarations in generated code."),
+        Disable_resolving_symlinks_to_their_realpath_This_correlates_to_the_same_flag_in_node: diag(6683, ts.DiagnosticCategory.Message, "Disable_resolving_symlinks_to_their_realpath_This_correlates_to_the_same_flag_in_node_6683", "Disable resolving symlinks to their realpath. This correlates to the same flag in node."),
+        Disable_wiping_the_console_in_watch_mode: diag(6684, ts.DiagnosticCategory.Message, "Disable_wiping_the_console_in_watch_mode_6684", "Disable wiping the console in watch mode"),
+        Enable_color_and_formatting_in_TypeScript_s_output_to_make_compiler_errors_easier_to_read: diag(6685, ts.DiagnosticCategory.Message, "Enable_color_and_formatting_in_TypeScript_s_output_to_make_compiler_errors_easier_to_read_6685", "Enable color and formatting in TypeScript's output to make compiler errors easier to read"),
+        Specify_the_object_invoked_for_createElement_This_only_applies_when_targeting_react_JSX_emit: diag(6686, ts.DiagnosticCategory.Message, "Specify_the_object_invoked_for_createElement_This_only_applies_when_targeting_react_JSX_emit_6686", "Specify the object invoked for `createElement`. This only applies when targeting `react` JSX emit."),
+        Specify_an_array_of_objects_that_specify_paths_for_projects_Used_in_project_references: diag(6687, ts.DiagnosticCategory.Message, "Specify_an_array_of_objects_that_specify_paths_for_projects_Used_in_project_references_6687", "Specify an array of objects that specify paths for projects. Used in project references."),
+        Disable_emitting_comments: diag(6688, ts.DiagnosticCategory.Message, "Disable_emitting_comments_6688", "Disable emitting comments."),
+        Enable_importing_json_files: diag(6689, ts.DiagnosticCategory.Message, "Enable_importing_json_files_6689", "Enable importing .json files"),
+        Specify_the_root_folder_within_your_source_files: diag(6690, ts.DiagnosticCategory.Message, "Specify_the_root_folder_within_your_source_files_6690", "Specify the root folder within your source files."),
+        Allow_multiple_folders_to_be_treated_as_one_when_resolving_modules: diag(6691, ts.DiagnosticCategory.Message, "Allow_multiple_folders_to_be_treated_as_one_when_resolving_modules_6691", "Allow multiple folders to be treated as one when resolving modules."),
+        Skip_type_checking_d_ts_files_that_are_included_with_TypeScript: diag(6692, ts.DiagnosticCategory.Message, "Skip_type_checking_d_ts_files_that_are_included_with_TypeScript_6692", "Skip type checking .d.ts files that are included with TypeScript."),
+        Skip_type_checking_all_d_ts_files: diag(6693, ts.DiagnosticCategory.Message, "Skip_type_checking_all_d_ts_files_6693", "Skip type checking all .d.ts files."),
+        Create_source_map_files_for_emitted_JavaScript_files: diag(6694, ts.DiagnosticCategory.Message, "Create_source_map_files_for_emitted_JavaScript_files_6694", "Create source map files for emitted JavaScript files."),
+        Specify_the_root_path_for_debuggers_to_find_the_reference_source_code: diag(6695, ts.DiagnosticCategory.Message, "Specify_the_root_path_for_debuggers_to_find_the_reference_source_code_6695", "Specify the root path for debuggers to find the reference source code."),
+        Check_that_the_arguments_for_bind_call_and_apply_methods_match_the_original_function: diag(6697, ts.DiagnosticCategory.Message, "Check_that_the_arguments_for_bind_call_and_apply_methods_match_the_original_function_6697", "Check that the arguments for `bind`, `call`, and `apply` methods match the original function."),
+        When_assigning_functions_check_to_ensure_parameters_and_the_return_values_are_subtype_compatible: diag(6698, ts.DiagnosticCategory.Message, "When_assigning_functions_check_to_ensure_parameters_and_the_return_values_are_subtype_compatible_6698", "When assigning functions, check to ensure parameters and the return values are subtype-compatible."),
+        When_type_checking_take_into_account_null_and_undefined: diag(6699, ts.DiagnosticCategory.Message, "When_type_checking_take_into_account_null_and_undefined_6699", "When type checking, take into account `null` and `undefined`."),
+        Check_for_class_properties_that_are_declared_but_not_set_in_the_constructor: diag(6700, ts.DiagnosticCategory.Message, "Check_for_class_properties_that_are_declared_but_not_set_in_the_constructor_6700", "Check for class properties that are declared but not set in the constructor."),
+        Disable_emitting_declarations_that_have_internal_in_their_JSDoc_comments: diag(6701, ts.DiagnosticCategory.Message, "Disable_emitting_declarations_that_have_internal_in_their_JSDoc_comments_6701", "Disable emitting declarations that have `@internal` in their JSDoc comments."),
+        Disable_reporting_of_excess_property_errors_during_the_creation_of_object_literals: diag(6702, ts.DiagnosticCategory.Message, "Disable_reporting_of_excess_property_errors_during_the_creation_of_object_literals_6702", "Disable reporting of excess property errors during the creation of object literals."),
+        Suppress_noImplicitAny_errors_when_indexing_objects_that_lack_index_signatures: diag(6703, ts.DiagnosticCategory.Message, "Suppress_noImplicitAny_errors_when_indexing_objects_that_lack_index_signatures_6703", "Suppress `noImplicitAny` errors when indexing objects that lack index signatures."),
+        Synchronously_call_callbacks_and_update_the_state_of_directory_watchers_on_platforms_that_don_t_support_recursive_watching_natively: diag(6704, ts.DiagnosticCategory.Message, "Synchronously_call_callbacks_and_update_the_state_of_directory_watchers_on_platforms_that_don_t_supp_6704", "Synchronously call callbacks and update the state of directory watchers on platforms that don`t support recursive watching natively."),
+        Set_the_JavaScript_language_version_for_emitted_JavaScript_and_include_compatible_library_declarations: diag(6705, ts.DiagnosticCategory.Message, "Set_the_JavaScript_language_version_for_emitted_JavaScript_and_include_compatible_library_declaratio_6705", "Set the JavaScript language version for emitted JavaScript and include compatible library declarations."),
+        Log_paths_used_during_the_moduleResolution_process: diag(6706, ts.DiagnosticCategory.Message, "Log_paths_used_during_the_moduleResolution_process_6706", "Log paths used during the `moduleResolution` process."),
+        Specify_the_folder_for_tsbuildinfo_incremental_compilation_files: diag(6707, ts.DiagnosticCategory.Message, "Specify_the_folder_for_tsbuildinfo_incremental_compilation_files_6707", "Specify the folder for .tsbuildinfo incremental compilation files."),
+        Specify_options_for_automatic_acquisition_of_declaration_files: diag(6709, ts.DiagnosticCategory.Message, "Specify_options_for_automatic_acquisition_of_declaration_files_6709", "Specify options for automatic acquisition of declaration files."),
+        Specify_multiple_folders_that_act_like_Slashnode_modules_Slash_types: diag(6710, ts.DiagnosticCategory.Message, "Specify_multiple_folders_that_act_like_Slashnode_modules_Slash_types_6710", "Specify multiple folders that act like `./node_modules/@types`."),
+        Specify_type_package_names_to_be_included_without_being_referenced_in_a_source_file: diag(6711, ts.DiagnosticCategory.Message, "Specify_type_package_names_to_be_included_without_being_referenced_in_a_source_file_6711", "Specify type package names to be included without being referenced in a source file."),
+        Emit_ECMAScript_standard_compliant_class_fields: diag(6712, ts.DiagnosticCategory.Message, "Emit_ECMAScript_standard_compliant_class_fields_6712", "Emit ECMAScript-standard-compliant class fields."),
+        Enable_verbose_logging: diag(6713, ts.DiagnosticCategory.Message, "Enable_verbose_logging_6713", "Enable verbose logging"),
+        Specify_how_directories_are_watched_on_systems_that_lack_recursive_file_watching_functionality: diag(6714, ts.DiagnosticCategory.Message, "Specify_how_directories_are_watched_on_systems_that_lack_recursive_file_watching_functionality_6714", "Specify how directories are watched on systems that lack recursive file-watching functionality."),
+        Specify_how_the_TypeScript_watch_mode_works: diag(6715, ts.DiagnosticCategory.Message, "Specify_how_the_TypeScript_watch_mode_works_6715", "Specify how the TypeScript watch mode works."),
+        Include_undefined_in_index_signature_results: diag(6716, ts.DiagnosticCategory.Message, "Include_undefined_in_index_signature_results_6716", "Include 'undefined' in index signature results"),
+        Require_undeclared_properties_from_index_signatures_to_use_element_accesses: diag(6717, ts.DiagnosticCategory.Message, "Require_undeclared_properties_from_index_signatures_to_use_element_accesses_6717", "Require undeclared properties from index signatures to use element accesses."),
+        Specify_emit_Slashchecking_behavior_for_imports_that_are_only_used_for_types: diag(6718, ts.DiagnosticCategory.Message, "Specify_emit_Slashchecking_behavior_for_imports_that_are_only_used_for_types_6718", "Specify emit/checking behavior for imports that are only used for types"),
+        Type_catch_clause_variables_as_unknown_instead_of_any: diag(6803, ts.DiagnosticCategory.Message, "Type_catch_clause_variables_as_unknown_instead_of_any_6803", "Type catch clause variables as 'unknown' instead of 'any'."),
+        one_of_Colon: diag(6900, ts.DiagnosticCategory.Message, "one_of_Colon_6900", "one of:"),
+        one_or_more_Colon: diag(6901, ts.DiagnosticCategory.Message, "one_or_more_Colon_6901", "one or more:"),
+        type_Colon: diag(6902, ts.DiagnosticCategory.Message, "type_Colon_6902", "type:"),
+        default_Colon: diag(6903, ts.DiagnosticCategory.Message, "default_Colon_6903", "default:"),
+        module_system_or_esModuleInterop: diag(6904, ts.DiagnosticCategory.Message, "module_system_or_esModuleInterop_6904", "module === \"system\" or esModuleInterop"),
+        false_unless_strict_is_set: diag(6905, ts.DiagnosticCategory.Message, "false_unless_strict_is_set_6905", "`false`, unless `strict` is set"),
+        false_unless_composite_is_set: diag(6906, ts.DiagnosticCategory.Message, "false_unless_composite_is_set_6906", "`false`, unless `composite` is set"),
+        node_modules_bower_components_jspm_packages_plus_the_value_of_outDir_if_one_is_specified: diag(6907, ts.DiagnosticCategory.Message, "node_modules_bower_components_jspm_packages_plus_the_value_of_outDir_if_one_is_specified_6907", "`[\"node_modules\", \"bower_components\", \"jspm_packages\"]`, plus the value of `outDir` if one is specified."),
+        if_files_is_specified_otherwise_Asterisk_Asterisk_Slash_Asterisk: diag(6908, ts.DiagnosticCategory.Message, "if_files_is_specified_otherwise_Asterisk_Asterisk_Slash_Asterisk_6908", "`[]` if `files` is specified, otherwise `[\"**/*\"]`"),
+        true_if_composite_false_otherwise: diag(6909, ts.DiagnosticCategory.Message, "true_if_composite_false_otherwise_6909", "`true` if `composite`, `false` otherwise"),
+        module_AMD_or_UMD_or_System_or_ES6_then_Classic_Otherwise_Node: diag(69010, ts.DiagnosticCategory.Message, "module_AMD_or_UMD_or_System_or_ES6_then_Classic_Otherwise_Node_69010", "module === `AMD` or `UMD` or `System` or `ES6`, then `Classic`, Otherwise `Node`"),
+        Computed_from_the_list_of_input_files: diag(6911, ts.DiagnosticCategory.Message, "Computed_from_the_list_of_input_files_6911", "Computed from the list of input files"),
+        Platform_specific: diag(6912, ts.DiagnosticCategory.Message, "Platform_specific_6912", "Platform specific"),
+        You_can_learn_about_all_of_the_compiler_options_at_0: diag(6913, ts.DiagnosticCategory.Message, "You_can_learn_about_all_of_the_compiler_options_at_0_6913", "You can learn about all of the compiler options at {0}"),
+        Including_watch_w_will_start_watching_the_current_project_for_the_file_changes_Once_set_you_can_config_watch_mode_with_Colon: diag(6914, ts.DiagnosticCategory.Message, "Including_watch_w_will_start_watching_the_current_project_for_the_file_changes_Once_set_you_can_conf_6914", "Including --watch, -w will start watching the current project for the file changes. Once set, you can config watch mode with:"),
+        Using_build_b_will_make_tsc_behave_more_like_a_build_orchestrator_than_a_compiler_This_is_used_to_trigger_building_composite_projects_which_you_can_learn_more_about_at_0: diag(6915, ts.DiagnosticCategory.Message, "Using_build_b_will_make_tsc_behave_more_like_a_build_orchestrator_than_a_compiler_This_is_used_to_tr_6915", "Using --build, -b will make tsc behave more like a build orchestrator than a compiler. This is used to trigger building composite projects which you can learn more about at {0}"),
+        COMMON_COMMANDS: diag(6916, ts.DiagnosticCategory.Message, "COMMON_COMMANDS_6916", "COMMON COMMANDS"),
+        ALL_COMPILER_OPTIONS: diag(6917, ts.DiagnosticCategory.Message, "ALL_COMPILER_OPTIONS_6917", "ALL COMPILER OPTIONS"),
+        WATCH_OPTIONS: diag(6918, ts.DiagnosticCategory.Message, "WATCH_OPTIONS_6918", "WATCH OPTIONS"),
+        BUILD_OPTIONS: diag(6919, ts.DiagnosticCategory.Message, "BUILD_OPTIONS_6919", "BUILD OPTIONS"),
+        COMMON_COMPILER_OPTIONS: diag(6920, ts.DiagnosticCategory.Message, "COMMON_COMPILER_OPTIONS_6920", "COMMON COMPILER OPTIONS"),
+        COMMAND_LINE_FLAGS: diag(6921, ts.DiagnosticCategory.Message, "COMMAND_LINE_FLAGS_6921", "COMMAND LINE FLAGS"),
+        tsc_Colon_The_TypeScript_Compiler: diag(6922, ts.DiagnosticCategory.Message, "tsc_Colon_The_TypeScript_Compiler_6922", "tsc: The TypeScript Compiler"),
+        Compiles_the_current_project_tsconfig_json_in_the_working_directory: diag(6923, ts.DiagnosticCategory.Message, "Compiles_the_current_project_tsconfig_json_in_the_working_directory_6923", "Compiles the current project (tsconfig.json in the working directory.)"),
+        Ignoring_tsconfig_json_compiles_the_specified_files_with_default_compiler_options: diag(6924, ts.DiagnosticCategory.Message, "Ignoring_tsconfig_json_compiles_the_specified_files_with_default_compiler_options_6924", "Ignoring tsconfig.json, compiles the specified files with default compiler options."),
+        Build_a_composite_project_in_the_working_directory: diag(6925, ts.DiagnosticCategory.Message, "Build_a_composite_project_in_the_working_directory_6925", "Build a composite project in the working directory."),
+        Creates_a_tsconfig_json_with_the_recommended_settings_in_the_working_directory: diag(6926, ts.DiagnosticCategory.Message, "Creates_a_tsconfig_json_with_the_recommended_settings_in_the_working_directory_6926", "Creates a tsconfig.json with the recommended settings in the working directory."),
+        Compiles_the_TypeScript_project_located_at_the_specified_path: diag(6927, ts.DiagnosticCategory.Message, "Compiles_the_TypeScript_project_located_at_the_specified_path_6927", "Compiles the TypeScript project located at the specified path."),
+        An_expanded_version_of_this_information_showing_all_possible_compiler_options: diag(6928, ts.DiagnosticCategory.Message, "An_expanded_version_of_this_information_showing_all_possible_compiler_options_6928", "An expanded version of this information, showing all possible compiler options"),
+        Compiles_the_current_project_with_additional_settings: diag(6929, ts.DiagnosticCategory.Message, "Compiles_the_current_project_with_additional_settings_6929", "Compiles the current project, with additional settings."),
         Variable_0_implicitly_has_an_1_type: diag(7005, ts.DiagnosticCategory.Error, "Variable_0_implicitly_has_an_1_type_7005", "Variable '{0}' implicitly has an '{1}' type."),
         Parameter_0_implicitly_has_an_1_type: diag(7006, ts.DiagnosticCategory.Error, "Parameter_0_implicitly_has_an_1_type_7006", "Parameter '{0}' implicitly has an '{1}' type."),
         Member_0_implicitly_has_an_1_type: diag(7008, ts.DiagnosticCategory.Error, "Member_0_implicitly_has_an_1_type_7008", "Member '{0}' implicitly has an '{1}' type."),
@@ -6485,7 +6732,6 @@
         Add_names_to_all_parameters_without_names: diag(95073, ts.DiagnosticCategory.Message, "Add_names_to_all_parameters_without_names_95073", "Add names to all parameters without names"),
         Enable_the_experimentalDecorators_option_in_your_configuration_file: diag(95074, ts.DiagnosticCategory.Message, "Enable_the_experimentalDecorators_option_in_your_configuration_file_95074", "Enable the 'experimentalDecorators' option in your configuration file"),
         Convert_parameters_to_destructured_object: diag(95075, ts.DiagnosticCategory.Message, "Convert_parameters_to_destructured_object_95075", "Convert parameters to destructured object"),
-        Allow_accessing_UMD_globals_from_modules: diag(95076, ts.DiagnosticCategory.Message, "Allow_accessing_UMD_globals_from_modules_95076", "Allow accessing UMD globals from modules."),
         Extract_type: diag(95077, ts.DiagnosticCategory.Message, "Extract_type_95077", "Extract type"),
         Extract_to_type_alias: diag(95078, ts.DiagnosticCategory.Message, "Extract_to_type_alias_95078", "Extract to type alias"),
         Extract_to_typedef: diag(95079, ts.DiagnosticCategory.Message, "Extract_to_typedef_95079", "Extract to typedef"),
@@ -6573,6 +6819,11 @@
         Remove_override_modifier: diag(95161, ts.DiagnosticCategory.Message, "Remove_override_modifier_95161", "Remove 'override' modifier"),
         Add_all_missing_override_modifiers: diag(95162, ts.DiagnosticCategory.Message, "Add_all_missing_override_modifiers_95162", "Add all missing 'override' modifiers"),
         Remove_all_unnecessary_override_modifiers: diag(95163, ts.DiagnosticCategory.Message, "Remove_all_unnecessary_override_modifiers_95163", "Remove all unnecessary 'override' modifiers"),
+        Can_only_convert_named_export: diag(95164, ts.DiagnosticCategory.Message, "Can_only_convert_named_export_95164", "Can only convert named export"),
+        Add_missing_properties: diag(95165, ts.DiagnosticCategory.Message, "Add_missing_properties_95165", "Add missing properties"),
+        Add_all_missing_properties: diag(95166, ts.DiagnosticCategory.Message, "Add_all_missing_properties_95166", "Add all missing properties"),
+        Add_missing_attributes: diag(95167, ts.DiagnosticCategory.Message, "Add_missing_attributes_95167", "Add missing attributes"),
+        Add_all_missing_attributes: diag(95168, ts.DiagnosticCategory.Message, "Add_all_missing_attributes_95168", "Add all missing attributes"),
         No_value_exists_in_scope_for_the_shorthand_property_0_Either_declare_one_or_provide_an_initializer: diag(18004, ts.DiagnosticCategory.Error, "No_value_exists_in_scope_for_the_shorthand_property_0_Either_declare_one_or_provide_an_initializer_18004", "No value exists in scope for the shorthand property '{0}'. Either declare one or provide an initializer."),
         Classes_may_not_have_a_field_named_constructor: diag(18006, ts.DiagnosticCategory.Error, "Classes_may_not_have_a_field_named_constructor_18006", "Classes may not have a field named 'constructor'."),
         JSX_expressions_may_not_use_the_comma_operator_Did_you_mean_to_write_an_array: diag(18007, ts.DiagnosticCategory.Error, "JSX_expressions_may_not_use_the_comma_operator_Did_you_mean_to_write_an_array_18007", "JSX expressions may not use the comma operator. Did you mean to write an array?"),
@@ -6599,110 +6850,114 @@
         Specify_the_JSX_fragment_factory_function_to_use_when_targeting_react_JSX_emit_with_jsxFactory_compiler_option_is_specified_e_g_Fragment: diag(18034, ts.DiagnosticCategory.Message, "Specify_the_JSX_fragment_factory_function_to_use_when_targeting_react_JSX_emit_with_jsxFactory_compi_18034", "Specify the JSX fragment factory function to use when targeting 'react' JSX emit with 'jsxFactory' compiler option is specified, e.g. 'Fragment'."),
         Invalid_value_for_jsxFragmentFactory_0_is_not_a_valid_identifier_or_qualified_name: diag(18035, ts.DiagnosticCategory.Error, "Invalid_value_for_jsxFragmentFactory_0_is_not_a_valid_identifier_or_qualified_name_18035", "Invalid value for 'jsxFragmentFactory'. '{0}' is not a valid identifier or qualified-name."),
         Class_decorators_can_t_be_used_with_static_private_identifier_Consider_removing_the_experimental_decorator: diag(18036, ts.DiagnosticCategory.Error, "Class_decorators_can_t_be_used_with_static_private_identifier_Consider_removing_the_experimental_dec_18036", "Class decorators can't be used with static private identifier. Consider removing the experimental decorator."),
+        Await_expression_cannot_be_used_inside_a_class_static_block: diag(18037, ts.DiagnosticCategory.Error, "Await_expression_cannot_be_used_inside_a_class_static_block_18037", "Await expression cannot be used inside a class static block."),
+        For_await_loops_cannot_be_used_inside_a_class_static_block: diag(18038, ts.DiagnosticCategory.Error, "For_await_loops_cannot_be_used_inside_a_class_static_block_18038", "'For await' loops cannot be used inside a class static block."),
+        Invalid_use_of_0_It_cannot_be_used_inside_a_class_static_block: diag(18039, ts.DiagnosticCategory.Error, "Invalid_use_of_0_It_cannot_be_used_inside_a_class_static_block_18039", "Invalid use of '{0}'. It cannot be used inside a class static block."),
+        A_return_statement_cannot_be_used_inside_a_class_static_block: diag(18041, ts.DiagnosticCategory.Error, "A_return_statement_cannot_be_used_inside_a_class_static_block_18041", "A 'return' statement cannot be used inside a class static block."),
     };
 })(ts || (ts = {}));
 var ts;
 (function (ts) {
     var _a;
     function tokenIsIdentifierOrKeyword(token) {
-        return token >= 78;
+        return token >= 79;
     }
     ts.tokenIsIdentifierOrKeyword = tokenIsIdentifierOrKeyword;
     function tokenIsIdentifierOrKeywordOrGreaterThan(token) {
         return token === 31 || tokenIsIdentifierOrKeyword(token);
     }
     ts.tokenIsIdentifierOrKeywordOrGreaterThan = tokenIsIdentifierOrKeywordOrGreaterThan;
-    var textToKeywordObj = (_a = {
-            abstract: 125,
-            any: 128,
-            as: 126,
-            asserts: 127,
-            bigint: 155,
-            boolean: 131,
-            break: 80,
-            case: 81,
-            catch: 82,
-            class: 83,
-            continue: 85,
-            const: 84
+    ts.textToKeywordObj = (_a = {
+            abstract: 126,
+            any: 129,
+            as: 127,
+            asserts: 128,
+            bigint: 156,
+            boolean: 132,
+            break: 81,
+            case: 82,
+            catch: 83,
+            class: 84,
+            continue: 86,
+            const: 85
         },
-        _a["" + "constructor"] = 132,
-        _a.debugger = 86,
-        _a.declare = 133,
-        _a.default = 87,
-        _a.delete = 88,
-        _a.do = 89,
-        _a.else = 90,
-        _a.enum = 91,
-        _a.export = 92,
-        _a.extends = 93,
-        _a.false = 94,
-        _a.finally = 95,
-        _a.for = 96,
-        _a.from = 153,
-        _a.function = 97,
-        _a.get = 134,
-        _a.if = 98,
-        _a.implements = 116,
-        _a.import = 99,
-        _a.in = 100,
-        _a.infer = 135,
-        _a.instanceof = 101,
-        _a.interface = 117,
-        _a.intrinsic = 136,
-        _a.is = 137,
-        _a.keyof = 138,
-        _a.let = 118,
-        _a.module = 139,
-        _a.namespace = 140,
-        _a.never = 141,
-        _a.new = 102,
-        _a.null = 103,
-        _a.number = 144,
-        _a.object = 145,
-        _a.package = 119,
-        _a.private = 120,
-        _a.protected = 121,
-        _a.public = 122,
-        _a.override = 156,
-        _a.readonly = 142,
-        _a.require = 143,
-        _a.global = 154,
-        _a.return = 104,
-        _a.set = 146,
-        _a.static = 123,
-        _a.string = 147,
-        _a.super = 105,
-        _a.switch = 106,
-        _a.symbol = 148,
-        _a.this = 107,
-        _a.throw = 108,
-        _a.true = 109,
-        _a.try = 110,
-        _a.type = 149,
-        _a.typeof = 111,
-        _a.undefined = 150,
-        _a.unique = 151,
-        _a.unknown = 152,
-        _a.var = 112,
-        _a.void = 113,
-        _a.while = 114,
-        _a.with = 115,
-        _a.yield = 124,
-        _a.async = 129,
-        _a.await = 130,
-        _a.of = 157,
+        _a["" + "constructor"] = 133,
+        _a.debugger = 87,
+        _a.declare = 134,
+        _a.default = 88,
+        _a.delete = 89,
+        _a.do = 90,
+        _a.else = 91,
+        _a.enum = 92,
+        _a.export = 93,
+        _a.extends = 94,
+        _a.false = 95,
+        _a.finally = 96,
+        _a.for = 97,
+        _a.from = 154,
+        _a.function = 98,
+        _a.get = 135,
+        _a.if = 99,
+        _a.implements = 117,
+        _a.import = 100,
+        _a.in = 101,
+        _a.infer = 136,
+        _a.instanceof = 102,
+        _a.interface = 118,
+        _a.intrinsic = 137,
+        _a.is = 138,
+        _a.keyof = 139,
+        _a.let = 119,
+        _a.module = 140,
+        _a.namespace = 141,
+        _a.never = 142,
+        _a.new = 103,
+        _a.null = 104,
+        _a.number = 145,
+        _a.object = 146,
+        _a.package = 120,
+        _a.private = 121,
+        _a.protected = 122,
+        _a.public = 123,
+        _a.override = 157,
+        _a.readonly = 143,
+        _a.require = 144,
+        _a.global = 155,
+        _a.return = 105,
+        _a.set = 147,
+        _a.static = 124,
+        _a.string = 148,
+        _a.super = 106,
+        _a.switch = 107,
+        _a.symbol = 149,
+        _a.this = 108,
+        _a.throw = 109,
+        _a.true = 110,
+        _a.try = 111,
+        _a.type = 150,
+        _a.typeof = 112,
+        _a.undefined = 151,
+        _a.unique = 152,
+        _a.unknown = 153,
+        _a.var = 113,
+        _a.void = 114,
+        _a.while = 115,
+        _a.with = 116,
+        _a.yield = 125,
+        _a.async = 130,
+        _a.await = 131,
+        _a.of = 158,
         _a);
-    var textToKeyword = new ts.Map(ts.getEntries(textToKeywordObj));
-    var textToToken = new ts.Map(ts.getEntries(__assign(__assign({}, textToKeywordObj), { "{": 18, "}": 19, "(": 20, ")": 21, "[": 22, "]": 23, ".": 24, "...": 25, ";": 26, ",": 27, "<": 29, ">": 31, "<=": 32, ">=": 33, "==": 34, "!=": 35, "===": 36, "!==": 37, "=>": 38, "+": 39, "-": 40, "**": 42, "*": 41, "/": 43, "%": 44, "++": 45, "--": 46, "<<": 47, "</": 30, ">>": 48, ">>>": 49, "&": 50, "|": 51, "^": 52, "!": 53, "~": 54, "&&": 55, "||": 56, "?": 57, "??": 60, "?.": 28, ":": 58, "=": 62, "+=": 63, "-=": 64, "*=": 65, "**=": 66, "/=": 67, "%=": 68, "<<=": 69, ">>=": 70, ">>>=": 71, "&=": 72, "|=": 73, "^=": 77, "||=": 74, "&&=": 75, "??=": 76, "@": 59, "`": 61 })));
+    var textToKeyword = new ts.Map(ts.getEntries(ts.textToKeywordObj));
+    var textToToken = new ts.Map(ts.getEntries(__assign(__assign({}, ts.textToKeywordObj), { "{": 18, "}": 19, "(": 20, ")": 21, "[": 22, "]": 23, ".": 24, "...": 25, ";": 26, ",": 27, "<": 29, ">": 31, "<=": 32, ">=": 33, "==": 34, "!=": 35, "===": 36, "!==": 37, "=>": 38, "+": 39, "-": 40, "**": 42, "*": 41, "/": 43, "%": 44, "++": 45, "--": 46, "<<": 47, "</": 30, ">>": 48, ">>>": 49, "&": 50, "|": 51, "^": 52, "!": 53, "~": 54, "&&": 55, "||": 56, "?": 57, "??": 60, "?.": 28, ":": 58, "=": 63, "+=": 64, "-=": 65, "*=": 66, "**=": 67, "/=": 68, "%=": 69, "<<=": 70, ">>=": 71, ">>>=": 72, "&=": 73, "|=": 74, "^=": 78, "||=": 75, "&&=": 76, "??=": 77, "@": 59, "#": 62, "`": 61 })));
     var unicodeES3IdentifierStart = [170, 170, 181, 181, 186, 186, 192, 214, 216, 246, 248, 543, 546, 563, 592, 685, 688, 696, 699, 705, 720, 721, 736, 740, 750, 750, 890, 890, 902, 902, 904, 906, 908, 908, 910, 929, 931, 974, 976, 983, 986, 1011, 1024, 1153, 1164, 1220, 1223, 1224, 1227, 1228, 1232, 1269, 1272, 1273, 1329, 1366, 1369, 1369, 1377, 1415, 1488, 1514, 1520, 1522, 1569, 1594, 1600, 1610, 1649, 1747, 1749, 1749, 1765, 1766, 1786, 1788, 1808, 1808, 1810, 1836, 1920, 1957, 2309, 2361, 2365, 2365, 2384, 2384, 2392, 2401, 2437, 2444, 2447, 2448, 2451, 2472, 2474, 2480, 2482, 2482, 2486, 2489, 2524, 2525, 2527, 2529, 2544, 2545, 2565, 2570, 2575, 2576, 2579, 2600, 2602, 2608, 2610, 2611, 2613, 2614, 2616, 2617, 2649, 2652, 2654, 2654, 2674, 2676, 2693, 2699, 2701, 2701, 2703, 2705, 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2749, 2749, 2768, 2768, 2784, 2784, 2821, 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2870, 2873, 2877, 2877, 2908, 2909, 2911, 2913, 2949, 2954, 2958, 2960, 2962, 2965, 2969, 2970, 2972, 2972, 2974, 2975, 2979, 2980, 2984, 2986, 2990, 2997, 2999, 3001, 3077, 3084, 3086, 3088, 3090, 3112, 3114, 3123, 3125, 3129, 3168, 3169, 3205, 3212, 3214, 3216, 3218, 3240, 3242, 3251, 3253, 3257, 3294, 3294, 3296, 3297, 3333, 3340, 3342, 3344, 3346, 3368, 3370, 3385, 3424, 3425, 3461, 3478, 3482, 3505, 3507, 3515, 3517, 3517, 3520, 3526, 3585, 3632, 3634, 3635, 3648, 3654, 3713, 3714, 3716, 3716, 3719, 3720, 3722, 3722, 3725, 3725, 3732, 3735, 3737, 3743, 3745, 3747, 3749, 3749, 3751, 3751, 3754, 3755, 3757, 3760, 3762, 3763, 3773, 3773, 3776, 3780, 3782, 3782, 3804, 3805, 3840, 3840, 3904, 3911, 3913, 3946, 3976, 3979, 4096, 4129, 4131, 4135, 4137, 4138, 4176, 4181, 4256, 4293, 4304, 4342, 4352, 4441, 4447, 4514, 4520, 4601, 4608, 4614, 4616, 4678, 4680, 4680, 4682, 4685, 4688, 4694, 4696, 4696, 4698, 4701, 4704, 4742, 4744, 4744, 4746, 4749, 4752, 4782, 4784, 4784, 4786, 4789, 4792, 4798, 4800, 4800, 4802, 4805, 4808, 4814, 4816, 4822, 4824, 4846, 4848, 4878, 4880, 4880, 4882, 4885, 4888, 4894, 4896, 4934, 4936, 4954, 5024, 5108, 5121, 5740, 5743, 5750, 5761, 5786, 5792, 5866, 6016, 6067, 6176, 6263, 6272, 6312, 7680, 7835, 7840, 7929, 7936, 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025, 8027, 8027, 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130, 8132, 8134, 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188, 8319, 8319, 8450, 8450, 8455, 8455, 8458, 8467, 8469, 8469, 8473, 8477, 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8493, 8495, 8497, 8499, 8505, 8544, 8579, 12293, 12295, 12321, 12329, 12337, 12341, 12344, 12346, 12353, 12436, 12445, 12446, 12449, 12538, 12540, 12542, 12549, 12588, 12593, 12686, 12704, 12727, 13312, 19893, 19968, 40869, 40960, 42124, 44032, 55203, 63744, 64045, 64256, 64262, 64275, 64279, 64285, 64285, 64287, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321, 64323, 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008, 65019, 65136, 65138, 65140, 65140, 65142, 65276, 65313, 65338, 65345, 65370, 65382, 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500,];
     var unicodeES3IdentifierPart = [170, 170, 181, 181, 186, 186, 192, 214, 216, 246, 248, 543, 546, 563, 592, 685, 688, 696, 699, 705, 720, 721, 736, 740, 750, 750, 768, 846, 864, 866, 890, 890, 902, 902, 904, 906, 908, 908, 910, 929, 931, 974, 976, 983, 986, 1011, 1024, 1153, 1155, 1158, 1164, 1220, 1223, 1224, 1227, 1228, 1232, 1269, 1272, 1273, 1329, 1366, 1369, 1369, 1377, 1415, 1425, 1441, 1443, 1465, 1467, 1469, 1471, 1471, 1473, 1474, 1476, 1476, 1488, 1514, 1520, 1522, 1569, 1594, 1600, 1621, 1632, 1641, 1648, 1747, 1749, 1756, 1759, 1768, 1770, 1773, 1776, 1788, 1808, 1836, 1840, 1866, 1920, 1968, 2305, 2307, 2309, 2361, 2364, 2381, 2384, 2388, 2392, 2403, 2406, 2415, 2433, 2435, 2437, 2444, 2447, 2448, 2451, 2472, 2474, 2480, 2482, 2482, 2486, 2489, 2492, 2492, 2494, 2500, 2503, 2504, 2507, 2509, 2519, 2519, 2524, 2525, 2527, 2531, 2534, 2545, 2562, 2562, 2565, 2570, 2575, 2576, 2579, 2600, 2602, 2608, 2610, 2611, 2613, 2614, 2616, 2617, 2620, 2620, 2622, 2626, 2631, 2632, 2635, 2637, 2649, 2652, 2654, 2654, 2662, 2676, 2689, 2691, 2693, 2699, 2701, 2701, 2703, 2705, 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2748, 2757, 2759, 2761, 2763, 2765, 2768, 2768, 2784, 2784, 2790, 2799, 2817, 2819, 2821, 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2870, 2873, 2876, 2883, 2887, 2888, 2891, 2893, 2902, 2903, 2908, 2909, 2911, 2913, 2918, 2927, 2946, 2947, 2949, 2954, 2958, 2960, 2962, 2965, 2969, 2970, 2972, 2972, 2974, 2975, 2979, 2980, 2984, 2986, 2990, 2997, 2999, 3001, 3006, 3010, 3014, 3016, 3018, 3021, 3031, 3031, 3047, 3055, 3073, 3075, 3077, 3084, 3086, 3088, 3090, 3112, 3114, 3123, 3125, 3129, 3134, 3140, 3142, 3144, 3146, 3149, 3157, 3158, 3168, 3169, 3174, 3183, 3202, 3203, 3205, 3212, 3214, 3216, 3218, 3240, 3242, 3251, 3253, 3257, 3262, 3268, 3270, 3272, 3274, 3277, 3285, 3286, 3294, 3294, 3296, 3297, 3302, 3311, 3330, 3331, 3333, 3340, 3342, 3344, 3346, 3368, 3370, 3385, 3390, 3395, 3398, 3400, 3402, 3405, 3415, 3415, 3424, 3425, 3430, 3439, 3458, 3459, 3461, 3478, 3482, 3505, 3507, 3515, 3517, 3517, 3520, 3526, 3530, 3530, 3535, 3540, 3542, 3542, 3544, 3551, 3570, 3571, 3585, 3642, 3648, 3662, 3664, 3673, 3713, 3714, 3716, 3716, 3719, 3720, 3722, 3722, 3725, 3725, 3732, 3735, 3737, 3743, 3745, 3747, 3749, 3749, 3751, 3751, 3754, 3755, 3757, 3769, 3771, 3773, 3776, 3780, 3782, 3782, 3784, 3789, 3792, 3801, 3804, 3805, 3840, 3840, 3864, 3865, 3872, 3881, 3893, 3893, 3895, 3895, 3897, 3897, 3902, 3911, 3913, 3946, 3953, 3972, 3974, 3979, 3984, 3991, 3993, 4028, 4038, 4038, 4096, 4129, 4131, 4135, 4137, 4138, 4140, 4146, 4150, 4153, 4160, 4169, 4176, 4185, 4256, 4293, 4304, 4342, 4352, 4441, 4447, 4514, 4520, 4601, 4608, 4614, 4616, 4678, 4680, 4680, 4682, 4685, 4688, 4694, 4696, 4696, 4698, 4701, 4704, 4742, 4744, 4744, 4746, 4749, 4752, 4782, 4784, 4784, 4786, 4789, 4792, 4798, 4800, 4800, 4802, 4805, 4808, 4814, 4816, 4822, 4824, 4846, 4848, 4878, 4880, 4880, 4882, 4885, 4888, 4894, 4896, 4934, 4936, 4954, 4969, 4977, 5024, 5108, 5121, 5740, 5743, 5750, 5761, 5786, 5792, 5866, 6016, 6099, 6112, 6121, 6160, 6169, 6176, 6263, 6272, 6313, 7680, 7835, 7840, 7929, 7936, 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025, 8027, 8027, 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130, 8132, 8134, 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188, 8255, 8256, 8319, 8319, 8400, 8412, 8417, 8417, 8450, 8450, 8455, 8455, 8458, 8467, 8469, 8469, 8473, 8477, 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8493, 8495, 8497, 8499, 8505, 8544, 8579, 12293, 12295, 12321, 12335, 12337, 12341, 12344, 12346, 12353, 12436, 12441, 12442, 12445, 12446, 12449, 12542, 12549, 12588, 12593, 12686, 12704, 12727, 13312, 19893, 19968, 40869, 40960, 42124, 44032, 55203, 63744, 64045, 64256, 64262, 64275, 64279, 64285, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321, 64323, 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008, 65019, 65056, 65059, 65075, 65076, 65101, 65103, 65136, 65138, 65140, 65140, 65142, 65276, 65296, 65305, 65313, 65338, 65343, 65343, 65345, 65370, 65381, 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500,];
     var unicodeES5IdentifierStart = [170, 170, 181, 181, 186, 186, 192, 214, 216, 246, 248, 705, 710, 721, 736, 740, 748, 748, 750, 750, 880, 884, 886, 887, 890, 893, 902, 902, 904, 906, 908, 908, 910, 929, 931, 1013, 1015, 1153, 1162, 1319, 1329, 1366, 1369, 1369, 1377, 1415, 1488, 1514, 1520, 1522, 1568, 1610, 1646, 1647, 1649, 1747, 1749, 1749, 1765, 1766, 1774, 1775, 1786, 1788, 1791, 1791, 1808, 1808, 1810, 1839, 1869, 1957, 1969, 1969, 1994, 2026, 2036, 2037, 2042, 2042, 2048, 2069, 2074, 2074, 2084, 2084, 2088, 2088, 2112, 2136, 2208, 2208, 2210, 2220, 2308, 2361, 2365, 2365, 2384, 2384, 2392, 2401, 2417, 2423, 2425, 2431, 2437, 2444, 2447, 2448, 2451, 2472, 2474, 2480, 2482, 2482, 2486, 2489, 2493, 2493, 2510, 2510, 2524, 2525, 2527, 2529, 2544, 2545, 2565, 2570, 2575, 2576, 2579, 2600, 2602, 2608, 2610, 2611, 2613, 2614, 2616, 2617, 2649, 2652, 2654, 2654, 2674, 2676, 2693, 2701, 2703, 2705, 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2749, 2749, 2768, 2768, 2784, 2785, 2821, 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2869, 2873, 2877, 2877, 2908, 2909, 2911, 2913, 2929, 2929, 2947, 2947, 2949, 2954, 2958, 2960, 2962, 2965, 2969, 2970, 2972, 2972, 2974, 2975, 2979, 2980, 2984, 2986, 2990, 3001, 3024, 3024, 3077, 3084, 3086, 3088, 3090, 3112, 3114, 3123, 3125, 3129, 3133, 3133, 3160, 3161, 3168, 3169, 3205, 3212, 3214, 3216, 3218, 3240, 3242, 3251, 3253, 3257, 3261, 3261, 3294, 3294, 3296, 3297, 3313, 3314, 3333, 3340, 3342, 3344, 3346, 3386, 3389, 3389, 3406, 3406, 3424, 3425, 3450, 3455, 3461, 3478, 3482, 3505, 3507, 3515, 3517, 3517, 3520, 3526, 3585, 3632, 3634, 3635, 3648, 3654, 3713, 3714, 3716, 3716, 3719, 3720, 3722, 3722, 3725, 3725, 3732, 3735, 3737, 3743, 3745, 3747, 3749, 3749, 3751, 3751, 3754, 3755, 3757, 3760, 3762, 3763, 3773, 3773, 3776, 3780, 3782, 3782, 3804, 3807, 3840, 3840, 3904, 3911, 3913, 3948, 3976, 3980, 4096, 4138, 4159, 4159, 4176, 4181, 4186, 4189, 4193, 4193, 4197, 4198, 4206, 4208, 4213, 4225, 4238, 4238, 4256, 4293, 4295, 4295, 4301, 4301, 4304, 4346, 4348, 4680, 4682, 4685, 4688, 4694, 4696, 4696, 4698, 4701, 4704, 4744, 4746, 4749, 4752, 4784, 4786, 4789, 4792, 4798, 4800, 4800, 4802, 4805, 4808, 4822, 4824, 4880, 4882, 4885, 4888, 4954, 4992, 5007, 5024, 5108, 5121, 5740, 5743, 5759, 5761, 5786, 5792, 5866, 5870, 5872, 5888, 5900, 5902, 5905, 5920, 5937, 5952, 5969, 5984, 5996, 5998, 6000, 6016, 6067, 6103, 6103, 6108, 6108, 6176, 6263, 6272, 6312, 6314, 6314, 6320, 6389, 6400, 6428, 6480, 6509, 6512, 6516, 6528, 6571, 6593, 6599, 6656, 6678, 6688, 6740, 6823, 6823, 6917, 6963, 6981, 6987, 7043, 7072, 7086, 7087, 7098, 7141, 7168, 7203, 7245, 7247, 7258, 7293, 7401, 7404, 7406, 7409, 7413, 7414, 7424, 7615, 7680, 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025, 8027, 8027, 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130, 8132, 8134, 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188, 8305, 8305, 8319, 8319, 8336, 8348, 8450, 8450, 8455, 8455, 8458, 8467, 8469, 8469, 8473, 8477, 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8493, 8495, 8505, 8508, 8511, 8517, 8521, 8526, 8526, 8544, 8584, 11264, 11310, 11312, 11358, 11360, 11492, 11499, 11502, 11506, 11507, 11520, 11557, 11559, 11559, 11565, 11565, 11568, 11623, 11631, 11631, 11648, 11670, 11680, 11686, 11688, 11694, 11696, 11702, 11704, 11710, 11712, 11718, 11720, 11726, 11728, 11734, 11736, 11742, 11823, 11823, 12293, 12295, 12321, 12329, 12337, 12341, 12344, 12348, 12353, 12438, 12445, 12447, 12449, 12538, 12540, 12543, 12549, 12589, 12593, 12686, 12704, 12730, 12784, 12799, 13312, 19893, 19968, 40908, 40960, 42124, 42192, 42237, 42240, 42508, 42512, 42527, 42538, 42539, 42560, 42606, 42623, 42647, 42656, 42735, 42775, 42783, 42786, 42888, 42891, 42894, 42896, 42899, 42912, 42922, 43000, 43009, 43011, 43013, 43015, 43018, 43020, 43042, 43072, 43123, 43138, 43187, 43250, 43255, 43259, 43259, 43274, 43301, 43312, 43334, 43360, 43388, 43396, 43442, 43471, 43471, 43520, 43560, 43584, 43586, 43588, 43595, 43616, 43638, 43642, 43642, 43648, 43695, 43697, 43697, 43701, 43702, 43705, 43709, 43712, 43712, 43714, 43714, 43739, 43741, 43744, 43754, 43762, 43764, 43777, 43782, 43785, 43790, 43793, 43798, 43808, 43814, 43816, 43822, 43968, 44002, 44032, 55203, 55216, 55238, 55243, 55291, 63744, 64109, 64112, 64217, 64256, 64262, 64275, 64279, 64285, 64285, 64287, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321, 64323, 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008, 65019, 65136, 65140, 65142, 65276, 65313, 65338, 65345, 65370, 65382, 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500,];
     var unicodeES5IdentifierPart = [170, 170, 181, 181, 186, 186, 192, 214, 216, 246, 248, 705, 710, 721, 736, 740, 748, 748, 750, 750, 768, 884, 886, 887, 890, 893, 902, 902, 904, 906, 908, 908, 910, 929, 931, 1013, 1015, 1153, 1155, 1159, 1162, 1319, 1329, 1366, 1369, 1369, 1377, 1415, 1425, 1469, 1471, 1471, 1473, 1474, 1476, 1477, 1479, 1479, 1488, 1514, 1520, 1522, 1552, 1562, 1568, 1641, 1646, 1747, 1749, 1756, 1759, 1768, 1770, 1788, 1791, 1791, 1808, 1866, 1869, 1969, 1984, 2037, 2042, 2042, 2048, 2093, 2112, 2139, 2208, 2208, 2210, 2220, 2276, 2302, 2304, 2403, 2406, 2415, 2417, 2423, 2425, 2431, 2433, 2435, 2437, 2444, 2447, 2448, 2451, 2472, 2474, 2480, 2482, 2482, 2486, 2489, 2492, 2500, 2503, 2504, 2507, 2510, 2519, 2519, 2524, 2525, 2527, 2531, 2534, 2545, 2561, 2563, 2565, 2570, 2575, 2576, 2579, 2600, 2602, 2608, 2610, 2611, 2613, 2614, 2616, 2617, 2620, 2620, 2622, 2626, 2631, 2632, 2635, 2637, 2641, 2641, 2649, 2652, 2654, 2654, 2662, 2677, 2689, 2691, 2693, 2701, 2703, 2705, 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2748, 2757, 2759, 2761, 2763, 2765, 2768, 2768, 2784, 2787, 2790, 2799, 2817, 2819, 2821, 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2869, 2873, 2876, 2884, 2887, 2888, 2891, 2893, 2902, 2903, 2908, 2909, 2911, 2915, 2918, 2927, 2929, 2929, 2946, 2947, 2949, 2954, 2958, 2960, 2962, 2965, 2969, 2970, 2972, 2972, 2974, 2975, 2979, 2980, 2984, 2986, 2990, 3001, 3006, 3010, 3014, 3016, 3018, 3021, 3024, 3024, 3031, 3031, 3046, 3055, 3073, 3075, 3077, 3084, 3086, 3088, 3090, 3112, 3114, 3123, 3125, 3129, 3133, 3140, 3142, 3144, 3146, 3149, 3157, 3158, 3160, 3161, 3168, 3171, 3174, 3183, 3202, 3203, 3205, 3212, 3214, 3216, 3218, 3240, 3242, 3251, 3253, 3257, 3260, 3268, 3270, 3272, 3274, 3277, 3285, 3286, 3294, 3294, 3296, 3299, 3302, 3311, 3313, 3314, 3330, 3331, 3333, 3340, 3342, 3344, 3346, 3386, 3389, 3396, 3398, 3400, 3402, 3406, 3415, 3415, 3424, 3427, 3430, 3439, 3450, 3455, 3458, 3459, 3461, 3478, 3482, 3505, 3507, 3515, 3517, 3517, 3520, 3526, 3530, 3530, 3535, 3540, 3542, 3542, 3544, 3551, 3570, 3571, 3585, 3642, 3648, 3662, 3664, 3673, 3713, 3714, 3716, 3716, 3719, 3720, 3722, 3722, 3725, 3725, 3732, 3735, 3737, 3743, 3745, 3747, 3749, 3749, 3751, 3751, 3754, 3755, 3757, 3769, 3771, 3773, 3776, 3780, 3782, 3782, 3784, 3789, 3792, 3801, 3804, 3807, 3840, 3840, 3864, 3865, 3872, 3881, 3893, 3893, 3895, 3895, 3897, 3897, 3902, 3911, 3913, 3948, 3953, 3972, 3974, 3991, 3993, 4028, 4038, 4038, 4096, 4169, 4176, 4253, 4256, 4293, 4295, 4295, 4301, 4301, 4304, 4346, 4348, 4680, 4682, 4685, 4688, 4694, 4696, 4696, 4698, 4701, 4704, 4744, 4746, 4749, 4752, 4784, 4786, 4789, 4792, 4798, 4800, 4800, 4802, 4805, 4808, 4822, 4824, 4880, 4882, 4885, 4888, 4954, 4957, 4959, 4992, 5007, 5024, 5108, 5121, 5740, 5743, 5759, 5761, 5786, 5792, 5866, 5870, 5872, 5888, 5900, 5902, 5908, 5920, 5940, 5952, 5971, 5984, 5996, 5998, 6000, 6002, 6003, 6016, 6099, 6103, 6103, 6108, 6109, 6112, 6121, 6155, 6157, 6160, 6169, 6176, 6263, 6272, 6314, 6320, 6389, 6400, 6428, 6432, 6443, 6448, 6459, 6470, 6509, 6512, 6516, 6528, 6571, 6576, 6601, 6608, 6617, 6656, 6683, 6688, 6750, 6752, 6780, 6783, 6793, 6800, 6809, 6823, 6823, 6912, 6987, 6992, 7001, 7019, 7027, 7040, 7155, 7168, 7223, 7232, 7241, 7245, 7293, 7376, 7378, 7380, 7414, 7424, 7654, 7676, 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025, 8027, 8027, 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130, 8132, 8134, 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188, 8204, 8205, 8255, 8256, 8276, 8276, 8305, 8305, 8319, 8319, 8336, 8348, 8400, 8412, 8417, 8417, 8421, 8432, 8450, 8450, 8455, 8455, 8458, 8467, 8469, 8469, 8473, 8477, 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8493, 8495, 8505, 8508, 8511, 8517, 8521, 8526, 8526, 8544, 8584, 11264, 11310, 11312, 11358, 11360, 11492, 11499, 11507, 11520, 11557, 11559, 11559, 11565, 11565, 11568, 11623, 11631, 11631, 11647, 11670, 11680, 11686, 11688, 11694, 11696, 11702, 11704, 11710, 11712, 11718, 11720, 11726, 11728, 11734, 11736, 11742, 11744, 11775, 11823, 11823, 12293, 12295, 12321, 12335, 12337, 12341, 12344, 12348, 12353, 12438, 12441, 12442, 12445, 12447, 12449, 12538, 12540, 12543, 12549, 12589, 12593, 12686, 12704, 12730, 12784, 12799, 13312, 19893, 19968, 40908, 40960, 42124, 42192, 42237, 42240, 42508, 42512, 42539, 42560, 42607, 42612, 42621, 42623, 42647, 42655, 42737, 42775, 42783, 42786, 42888, 42891, 42894, 42896, 42899, 42912, 42922, 43000, 43047, 43072, 43123, 43136, 43204, 43216, 43225, 43232, 43255, 43259, 43259, 43264, 43309, 43312, 43347, 43360, 43388, 43392, 43456, 43471, 43481, 43520, 43574, 43584, 43597, 43600, 43609, 43616, 43638, 43642, 43643, 43648, 43714, 43739, 43741, 43744, 43759, 43762, 43766, 43777, 43782, 43785, 43790, 43793, 43798, 43808, 43814, 43816, 43822, 43968, 44010, 44012, 44013, 44016, 44025, 44032, 55203, 55216, 55238, 55243, 55291, 63744, 64109, 64112, 64217, 64256, 64262, 64275, 64279, 64285, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321, 64323, 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008, 65019, 65024, 65039, 65056, 65062, 65075, 65076, 65101, 65103, 65136, 65140, 65142, 65276, 65296, 65305, 65313, 65338, 65343, 65343, 65345, 65370, 65382, 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500,];
     var unicodeESNextIdentifierStart = [65, 90, 97, 122, 170, 170, 181, 181, 186, 186, 192, 214, 216, 246, 248, 705, 710, 721, 736, 740, 748, 748, 750, 750, 880, 884, 886, 887, 890, 893, 895, 895, 902, 902, 904, 906, 908, 908, 910, 929, 931, 1013, 1015, 1153, 1162, 1327, 1329, 1366, 1369, 1369, 1376, 1416, 1488, 1514, 1519, 1522, 1568, 1610, 1646, 1647, 1649, 1747, 1749, 1749, 1765, 1766, 1774, 1775, 1786, 1788, 1791, 1791, 1808, 1808, 1810, 1839, 1869, 1957, 1969, 1969, 1994, 2026, 2036, 2037, 2042, 2042, 2048, 2069, 2074, 2074, 2084, 2084, 2088, 2088, 2112, 2136, 2144, 2154, 2208, 2228, 2230, 2237, 2308, 2361, 2365, 2365, 2384, 2384, 2392, 2401, 2417, 2432, 2437, 2444, 2447, 2448, 2451, 2472, 2474, 2480, 2482, 2482, 2486, 2489, 2493, 2493, 2510, 2510, 2524, 2525, 2527, 2529, 2544, 2545, 2556, 2556, 2565, 2570, 2575, 2576, 2579, 2600, 2602, 2608, 2610, 2611, 2613, 2614, 2616, 2617, 2649, 2652, 2654, 2654, 2674, 2676, 2693, 2701, 2703, 2705, 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2749, 2749, 2768, 2768, 2784, 2785, 2809, 2809, 2821, 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2869, 2873, 2877, 2877, 2908, 2909, 2911, 2913, 2929, 2929, 2947, 2947, 2949, 2954, 2958, 2960, 2962, 2965, 2969, 2970, 2972, 2972, 2974, 2975, 2979, 2980, 2984, 2986, 2990, 3001, 3024, 3024, 3077, 3084, 3086, 3088, 3090, 3112, 3114, 3129, 3133, 3133, 3160, 3162, 3168, 3169, 3200, 3200, 3205, 3212, 3214, 3216, 3218, 3240, 3242, 3251, 3253, 3257, 3261, 3261, 3294, 3294, 3296, 3297, 3313, 3314, 3333, 3340, 3342, 3344, 3346, 3386, 3389, 3389, 3406, 3406, 3412, 3414, 3423, 3425, 3450, 3455, 3461, 3478, 3482, 3505, 3507, 3515, 3517, 3517, 3520, 3526, 3585, 3632, 3634, 3635, 3648, 3654, 3713, 3714, 3716, 3716, 3718, 3722, 3724, 3747, 3749, 3749, 3751, 3760, 3762, 3763, 3773, 3773, 3776, 3780, 3782, 3782, 3804, 3807, 3840, 3840, 3904, 3911, 3913, 3948, 3976, 3980, 4096, 4138, 4159, 4159, 4176, 4181, 4186, 4189, 4193, 4193, 4197, 4198, 4206, 4208, 4213, 4225, 4238, 4238, 4256, 4293, 4295, 4295, 4301, 4301, 4304, 4346, 4348, 4680, 4682, 4685, 4688, 4694, 4696, 4696, 4698, 4701, 4704, 4744, 4746, 4749, 4752, 4784, 4786, 4789, 4792, 4798, 4800, 4800, 4802, 4805, 4808, 4822, 4824, 4880, 4882, 4885, 4888, 4954, 4992, 5007, 5024, 5109, 5112, 5117, 5121, 5740, 5743, 5759, 5761, 5786, 5792, 5866, 5870, 5880, 5888, 5900, 5902, 5905, 5920, 5937, 5952, 5969, 5984, 5996, 5998, 6000, 6016, 6067, 6103, 6103, 6108, 6108, 6176, 6264, 6272, 6312, 6314, 6314, 6320, 6389, 6400, 6430, 6480, 6509, 6512, 6516, 6528, 6571, 6576, 6601, 6656, 6678, 6688, 6740, 6823, 6823, 6917, 6963, 6981, 6987, 7043, 7072, 7086, 7087, 7098, 7141, 7168, 7203, 7245, 7247, 7258, 7293, 7296, 7304, 7312, 7354, 7357, 7359, 7401, 7404, 7406, 7411, 7413, 7414, 7418, 7418, 7424, 7615, 7680, 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025, 8027, 8027, 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130, 8132, 8134, 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188, 8305, 8305, 8319, 8319, 8336, 8348, 8450, 8450, 8455, 8455, 8458, 8467, 8469, 8469, 8472, 8477, 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8505, 8508, 8511, 8517, 8521, 8526, 8526, 8544, 8584, 11264, 11310, 11312, 11358, 11360, 11492, 11499, 11502, 11506, 11507, 11520, 11557, 11559, 11559, 11565, 11565, 11568, 11623, 11631, 11631, 11648, 11670, 11680, 11686, 11688, 11694, 11696, 11702, 11704, 11710, 11712, 11718, 11720, 11726, 11728, 11734, 11736, 11742, 12293, 12295, 12321, 12329, 12337, 12341, 12344, 12348, 12353, 12438, 12443, 12447, 12449, 12538, 12540, 12543, 12549, 12591, 12593, 12686, 12704, 12730, 12784, 12799, 13312, 19893, 19968, 40943, 40960, 42124, 42192, 42237, 42240, 42508, 42512, 42527, 42538, 42539, 42560, 42606, 42623, 42653, 42656, 42735, 42775, 42783, 42786, 42888, 42891, 42943, 42946, 42950, 42999, 43009, 43011, 43013, 43015, 43018, 43020, 43042, 43072, 43123, 43138, 43187, 43250, 43255, 43259, 43259, 43261, 43262, 43274, 43301, 43312, 43334, 43360, 43388, 43396, 43442, 43471, 43471, 43488, 43492, 43494, 43503, 43514, 43518, 43520, 43560, 43584, 43586, 43588, 43595, 43616, 43638, 43642, 43642, 43646, 43695, 43697, 43697, 43701, 43702, 43705, 43709, 43712, 43712, 43714, 43714, 43739, 43741, 43744, 43754, 43762, 43764, 43777, 43782, 43785, 43790, 43793, 43798, 43808, 43814, 43816, 43822, 43824, 43866, 43868, 43879, 43888, 44002, 44032, 55203, 55216, 55238, 55243, 55291, 63744, 64109, 64112, 64217, 64256, 64262, 64275, 64279, 64285, 64285, 64287, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321, 64323, 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008, 65019, 65136, 65140, 65142, 65276, 65313, 65338, 65345, 65370, 65382, 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500, 65536, 65547, 65549, 65574, 65576, 65594, 65596, 65597, 65599, 65613, 65616, 65629, 65664, 65786, 65856, 65908, 66176, 66204, 66208, 66256, 66304, 66335, 66349, 66378, 66384, 66421, 66432, 66461, 66464, 66499, 66504, 66511, 66513, 66517, 66560, 66717, 66736, 66771, 66776, 66811, 66816, 66855, 66864, 66915, 67072, 67382, 67392, 67413, 67424, 67431, 67584, 67589, 67592, 67592, 67594, 67637, 67639, 67640, 67644, 67644, 67647, 67669, 67680, 67702, 67712, 67742, 67808, 67826, 67828, 67829, 67840, 67861, 67872, 67897, 67968, 68023, 68030, 68031, 68096, 68096, 68112, 68115, 68117, 68119, 68121, 68149, 68192, 68220, 68224, 68252, 68288, 68295, 68297, 68324, 68352, 68405, 68416, 68437, 68448, 68466, 68480, 68497, 68608, 68680, 68736, 68786, 68800, 68850, 68864, 68899, 69376, 69404, 69415, 69415, 69424, 69445, 69600, 69622, 69635, 69687, 69763, 69807, 69840, 69864, 69891, 69926, 69956, 69956, 69968, 70002, 70006, 70006, 70019, 70066, 70081, 70084, 70106, 70106, 70108, 70108, 70144, 70161, 70163, 70187, 70272, 70278, 70280, 70280, 70282, 70285, 70287, 70301, 70303, 70312, 70320, 70366, 70405, 70412, 70415, 70416, 70419, 70440, 70442, 70448, 70450, 70451, 70453, 70457, 70461, 70461, 70480, 70480, 70493, 70497, 70656, 70708, 70727, 70730, 70751, 70751, 70784, 70831, 70852, 70853, 70855, 70855, 71040, 71086, 71128, 71131, 71168, 71215, 71236, 71236, 71296, 71338, 71352, 71352, 71424, 71450, 71680, 71723, 71840, 71903, 71935, 71935, 72096, 72103, 72106, 72144, 72161, 72161, 72163, 72163, 72192, 72192, 72203, 72242, 72250, 72250, 72272, 72272, 72284, 72329, 72349, 72349, 72384, 72440, 72704, 72712, 72714, 72750, 72768, 72768, 72818, 72847, 72960, 72966, 72968, 72969, 72971, 73008, 73030, 73030, 73056, 73061, 73063, 73064, 73066, 73097, 73112, 73112, 73440, 73458, 73728, 74649, 74752, 74862, 74880, 75075, 77824, 78894, 82944, 83526, 92160, 92728, 92736, 92766, 92880, 92909, 92928, 92975, 92992, 92995, 93027, 93047, 93053, 93071, 93760, 93823, 93952, 94026, 94032, 94032, 94099, 94111, 94176, 94177, 94179, 94179, 94208, 100343, 100352, 101106, 110592, 110878, 110928, 110930, 110948, 110951, 110960, 111355, 113664, 113770, 113776, 113788, 113792, 113800, 113808, 113817, 119808, 119892, 119894, 119964, 119966, 119967, 119970, 119970, 119973, 119974, 119977, 119980, 119982, 119993, 119995, 119995, 119997, 120003, 120005, 120069, 120071, 120074, 120077, 120084, 120086, 120092, 120094, 120121, 120123, 120126, 120128, 120132, 120134, 120134, 120138, 120144, 120146, 120485, 120488, 120512, 120514, 120538, 120540, 120570, 120572, 120596, 120598, 120628, 120630, 120654, 120656, 120686, 120688, 120712, 120714, 120744, 120746, 120770, 120772, 120779, 123136, 123180, 123191, 123197, 123214, 123214, 123584, 123627, 124928, 125124, 125184, 125251, 125259, 125259, 126464, 126467, 126469, 126495, 126497, 126498, 126500, 126500, 126503, 126503, 126505, 126514, 126516, 126519, 126521, 126521, 126523, 126523, 126530, 126530, 126535, 126535, 126537, 126537, 126539, 126539, 126541, 126543, 126545, 126546, 126548, 126548, 126551, 126551, 126553, 126553, 126555, 126555, 126557, 126557, 126559, 126559, 126561, 126562, 126564, 126564, 126567, 126570, 126572, 126578, 126580, 126583, 126585, 126588, 126590, 126590, 126592, 126601, 126603, 126619, 126625, 126627, 126629, 126633, 126635, 126651, 131072, 173782, 173824, 177972, 177984, 178205, 178208, 183969, 183984, 191456, 194560, 195101];
     var unicodeESNextIdentifierPart = [48, 57, 65, 90, 95, 95, 97, 122, 170, 170, 181, 181, 183, 183, 186, 186, 192, 214, 216, 246, 248, 705, 710, 721, 736, 740, 748, 748, 750, 750, 768, 884, 886, 887, 890, 893, 895, 895, 902, 906, 908, 908, 910, 929, 931, 1013, 1015, 1153, 1155, 1159, 1162, 1327, 1329, 1366, 1369, 1369, 1376, 1416, 1425, 1469, 1471, 1471, 1473, 1474, 1476, 1477, 1479, 1479, 1488, 1514, 1519, 1522, 1552, 1562, 1568, 1641, 1646, 1747, 1749, 1756, 1759, 1768, 1770, 1788, 1791, 1791, 1808, 1866, 1869, 1969, 1984, 2037, 2042, 2042, 2045, 2045, 2048, 2093, 2112, 2139, 2144, 2154, 2208, 2228, 2230, 2237, 2259, 2273, 2275, 2403, 2406, 2415, 2417, 2435, 2437, 2444, 2447, 2448, 2451, 2472, 2474, 2480, 2482, 2482, 2486, 2489, 2492, 2500, 2503, 2504, 2507, 2510, 2519, 2519, 2524, 2525, 2527, 2531, 2534, 2545, 2556, 2556, 2558, 2558, 2561, 2563, 2565, 2570, 2575, 2576, 2579, 2600, 2602, 2608, 2610, 2611, 2613, 2614, 2616, 2617, 2620, 2620, 2622, 2626, 2631, 2632, 2635, 2637, 2641, 2641, 2649, 2652, 2654, 2654, 2662, 2677, 2689, 2691, 2693, 2701, 2703, 2705, 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2748, 2757, 2759, 2761, 2763, 2765, 2768, 2768, 2784, 2787, 2790, 2799, 2809, 2815, 2817, 2819, 2821, 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2869, 2873, 2876, 2884, 2887, 2888, 2891, 2893, 2902, 2903, 2908, 2909, 2911, 2915, 2918, 2927, 2929, 2929, 2946, 2947, 2949, 2954, 2958, 2960, 2962, 2965, 2969, 2970, 2972, 2972, 2974, 2975, 2979, 2980, 2984, 2986, 2990, 3001, 3006, 3010, 3014, 3016, 3018, 3021, 3024, 3024, 3031, 3031, 3046, 3055, 3072, 3084, 3086, 3088, 3090, 3112, 3114, 3129, 3133, 3140, 3142, 3144, 3146, 3149, 3157, 3158, 3160, 3162, 3168, 3171, 3174, 3183, 3200, 3203, 3205, 3212, 3214, 3216, 3218, 3240, 3242, 3251, 3253, 3257, 3260, 3268, 3270, 3272, 3274, 3277, 3285, 3286, 3294, 3294, 3296, 3299, 3302, 3311, 3313, 3314, 3328, 3331, 3333, 3340, 3342, 3344, 3346, 3396, 3398, 3400, 3402, 3406, 3412, 3415, 3423, 3427, 3430, 3439, 3450, 3455, 3458, 3459, 3461, 3478, 3482, 3505, 3507, 3515, 3517, 3517, 3520, 3526, 3530, 3530, 3535, 3540, 3542, 3542, 3544, 3551, 3558, 3567, 3570, 3571, 3585, 3642, 3648, 3662, 3664, 3673, 3713, 3714, 3716, 3716, 3718, 3722, 3724, 3747, 3749, 3749, 3751, 3773, 3776, 3780, 3782, 3782, 3784, 3789, 3792, 3801, 3804, 3807, 3840, 3840, 3864, 3865, 3872, 3881, 3893, 3893, 3895, 3895, 3897, 3897, 3902, 3911, 3913, 3948, 3953, 3972, 3974, 3991, 3993, 4028, 4038, 4038, 4096, 4169, 4176, 4253, 4256, 4293, 4295, 4295, 4301, 4301, 4304, 4346, 4348, 4680, 4682, 4685, 4688, 4694, 4696, 4696, 4698, 4701, 4704, 4744, 4746, 4749, 4752, 4784, 4786, 4789, 4792, 4798, 4800, 4800, 4802, 4805, 4808, 4822, 4824, 4880, 4882, 4885, 4888, 4954, 4957, 4959, 4969, 4977, 4992, 5007, 5024, 5109, 5112, 5117, 5121, 5740, 5743, 5759, 5761, 5786, 5792, 5866, 5870, 5880, 5888, 5900, 5902, 5908, 5920, 5940, 5952, 5971, 5984, 5996, 5998, 6000, 6002, 6003, 6016, 6099, 6103, 6103, 6108, 6109, 6112, 6121, 6155, 6157, 6160, 6169, 6176, 6264, 6272, 6314, 6320, 6389, 6400, 6430, 6432, 6443, 6448, 6459, 6470, 6509, 6512, 6516, 6528, 6571, 6576, 6601, 6608, 6618, 6656, 6683, 6688, 6750, 6752, 6780, 6783, 6793, 6800, 6809, 6823, 6823, 6832, 6845, 6912, 6987, 6992, 7001, 7019, 7027, 7040, 7155, 7168, 7223, 7232, 7241, 7245, 7293, 7296, 7304, 7312, 7354, 7357, 7359, 7376, 7378, 7380, 7418, 7424, 7673, 7675, 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025, 8027, 8027, 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130, 8132, 8134, 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188, 8255, 8256, 8276, 8276, 8305, 8305, 8319, 8319, 8336, 8348, 8400, 8412, 8417, 8417, 8421, 8432, 8450, 8450, 8455, 8455, 8458, 8467, 8469, 8469, 8472, 8477, 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8505, 8508, 8511, 8517, 8521, 8526, 8526, 8544, 8584, 11264, 11310, 11312, 11358, 11360, 11492, 11499, 11507, 11520, 11557, 11559, 11559, 11565, 11565, 11568, 11623, 11631, 11631, 11647, 11670, 11680, 11686, 11688, 11694, 11696, 11702, 11704, 11710, 11712, 11718, 11720, 11726, 11728, 11734, 11736, 11742, 11744, 11775, 12293, 12295, 12321, 12335, 12337, 12341, 12344, 12348, 12353, 12438, 12441, 12447, 12449, 12538, 12540, 12543, 12549, 12591, 12593, 12686, 12704, 12730, 12784, 12799, 13312, 19893, 19968, 40943, 40960, 42124, 42192, 42237, 42240, 42508, 42512, 42539, 42560, 42607, 42612, 42621, 42623, 42737, 42775, 42783, 42786, 42888, 42891, 42943, 42946, 42950, 42999, 43047, 43072, 43123, 43136, 43205, 43216, 43225, 43232, 43255, 43259, 43259, 43261, 43309, 43312, 43347, 43360, 43388, 43392, 43456, 43471, 43481, 43488, 43518, 43520, 43574, 43584, 43597, 43600, 43609, 43616, 43638, 43642, 43714, 43739, 43741, 43744, 43759, 43762, 43766, 43777, 43782, 43785, 43790, 43793, 43798, 43808, 43814, 43816, 43822, 43824, 43866, 43868, 43879, 43888, 44010, 44012, 44013, 44016, 44025, 44032, 55203, 55216, 55238, 55243, 55291, 63744, 64109, 64112, 64217, 64256, 64262, 64275, 64279, 64285, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321, 64323, 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008, 65019, 65024, 65039, 65056, 65071, 65075, 65076, 65101, 65103, 65136, 65140, 65142, 65276, 65296, 65305, 65313, 65338, 65343, 65343, 65345, 65370, 65382, 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500, 65536, 65547, 65549, 65574, 65576, 65594, 65596, 65597, 65599, 65613, 65616, 65629, 65664, 65786, 65856, 65908, 66045, 66045, 66176, 66204, 66208, 66256, 66272, 66272, 66304, 66335, 66349, 66378, 66384, 66426, 66432, 66461, 66464, 66499, 66504, 66511, 66513, 66517, 66560, 66717, 66720, 66729, 66736, 66771, 66776, 66811, 66816, 66855, 66864, 66915, 67072, 67382, 67392, 67413, 67424, 67431, 67584, 67589, 67592, 67592, 67594, 67637, 67639, 67640, 67644, 67644, 67647, 67669, 67680, 67702, 67712, 67742, 67808, 67826, 67828, 67829, 67840, 67861, 67872, 67897, 67968, 68023, 68030, 68031, 68096, 68099, 68101, 68102, 68108, 68115, 68117, 68119, 68121, 68149, 68152, 68154, 68159, 68159, 68192, 68220, 68224, 68252, 68288, 68295, 68297, 68326, 68352, 68405, 68416, 68437, 68448, 68466, 68480, 68497, 68608, 68680, 68736, 68786, 68800, 68850, 68864, 68903, 68912, 68921, 69376, 69404, 69415, 69415, 69424, 69456, 69600, 69622, 69632, 69702, 69734, 69743, 69759, 69818, 69840, 69864, 69872, 69881, 69888, 69940, 69942, 69951, 69956, 69958, 69968, 70003, 70006, 70006, 70016, 70084, 70089, 70092, 70096, 70106, 70108, 70108, 70144, 70161, 70163, 70199, 70206, 70206, 70272, 70278, 70280, 70280, 70282, 70285, 70287, 70301, 70303, 70312, 70320, 70378, 70384, 70393, 70400, 70403, 70405, 70412, 70415, 70416, 70419, 70440, 70442, 70448, 70450, 70451, 70453, 70457, 70459, 70468, 70471, 70472, 70475, 70477, 70480, 70480, 70487, 70487, 70493, 70499, 70502, 70508, 70512, 70516, 70656, 70730, 70736, 70745, 70750, 70751, 70784, 70853, 70855, 70855, 70864, 70873, 71040, 71093, 71096, 71104, 71128, 71133, 71168, 71232, 71236, 71236, 71248, 71257, 71296, 71352, 71360, 71369, 71424, 71450, 71453, 71467, 71472, 71481, 71680, 71738, 71840, 71913, 71935, 71935, 72096, 72103, 72106, 72151, 72154, 72161, 72163, 72164, 72192, 72254, 72263, 72263, 72272, 72345, 72349, 72349, 72384, 72440, 72704, 72712, 72714, 72758, 72760, 72768, 72784, 72793, 72818, 72847, 72850, 72871, 72873, 72886, 72960, 72966, 72968, 72969, 72971, 73014, 73018, 73018, 73020, 73021, 73023, 73031, 73040, 73049, 73056, 73061, 73063, 73064, 73066, 73102, 73104, 73105, 73107, 73112, 73120, 73129, 73440, 73462, 73728, 74649, 74752, 74862, 74880, 75075, 77824, 78894, 82944, 83526, 92160, 92728, 92736, 92766, 92768, 92777, 92880, 92909, 92912, 92916, 92928, 92982, 92992, 92995, 93008, 93017, 93027, 93047, 93053, 93071, 93760, 93823, 93952, 94026, 94031, 94087, 94095, 94111, 94176, 94177, 94179, 94179, 94208, 100343, 100352, 101106, 110592, 110878, 110928, 110930, 110948, 110951, 110960, 111355, 113664, 113770, 113776, 113788, 113792, 113800, 113808, 113817, 113821, 113822, 119141, 119145, 119149, 119154, 119163, 119170, 119173, 119179, 119210, 119213, 119362, 119364, 119808, 119892, 119894, 119964, 119966, 119967, 119970, 119970, 119973, 119974, 119977, 119980, 119982, 119993, 119995, 119995, 119997, 120003, 120005, 120069, 120071, 120074, 120077, 120084, 120086, 120092, 120094, 120121, 120123, 120126, 120128, 120132, 120134, 120134, 120138, 120144, 120146, 120485, 120488, 120512, 120514, 120538, 120540, 120570, 120572, 120596, 120598, 120628, 120630, 120654, 120656, 120686, 120688, 120712, 120714, 120744, 120746, 120770, 120772, 120779, 120782, 120831, 121344, 121398, 121403, 121452, 121461, 121461, 121476, 121476, 121499, 121503, 121505, 121519, 122880, 122886, 122888, 122904, 122907, 122913, 122915, 122916, 122918, 122922, 123136, 123180, 123184, 123197, 123200, 123209, 123214, 123214, 123584, 123641, 124928, 125124, 125136, 125142, 125184, 125259, 125264, 125273, 126464, 126467, 126469, 126495, 126497, 126498, 126500, 126500, 126503, 126503, 126505, 126514, 126516, 126519, 126521, 126521, 126523, 126523, 126530, 126530, 126535, 126535, 126537, 126537, 126539, 126539, 126541, 126543, 126545, 126546, 126548, 126548, 126551, 126551, 126553, 126553, 126555, 126555, 126557, 126557, 126559, 126559, 126561, 126562, 126564, 126564, 126567, 126570, 126572, 126578, 126580, 126583, 126585, 126588, 126590, 126590, 126592, 126601, 126603, 126619, 126625, 126627, 126629, 126633, 126635, 126651, 131072, 173782, 173824, 177972, 177984, 178205, 178208, 183969, 183984, 191456, 194560, 195101, 917760, 917999];
-    var commentDirectiveRegExSingleLine = /^\s*\/\/\/?\s*@(ts-expect-error|ts-ignore)/;
-    var commentDirectiveRegExMultiLine = /^\s*(?:\/|\*)*\s*@(ts-expect-error|ts-ignore)/;
+    var commentDirectiveRegExSingleLine = /^\/\/\/?\s*@(ts-expect-error|ts-ignore)/;
+    var commentDirectiveRegExMultiLine = /^(?:\/|\*)*\s*@(ts-expect-error|ts-ignore)/;
     function lookupInUnicodeMap(code, map) {
         if (code < map[0]) {
             return false;
@@ -7231,8 +7486,8 @@
             hasExtendedUnicodeEscape: function () { return (tokenFlags & 8) !== 0; },
             hasPrecedingLineBreak: function () { return (tokenFlags & 1) !== 0; },
             hasPrecedingJSDocComment: function () { return (tokenFlags & 2) !== 0; },
-            isIdentifier: function () { return token === 78 || token > 115; },
-            isReservedWord: function () { return token >= 80 && token <= 115; },
+            isIdentifier: function () { return token === 79 || token > 116; },
+            isReservedWord: function () { return token >= 81 && token <= 116; },
             isUnterminated: function () { return (tokenFlags & 4) !== 0; },
             getCommentDirectives: function () { return commentDirectives; },
             getNumericLiteralFlags: function () { return tokenFlags & 1008; },
@@ -7247,6 +7502,7 @@
             reScanJsxAttributeValue: reScanJsxAttributeValue,
             reScanJsxToken: reScanJsxToken,
             reScanLessThanToken: reScanLessThanToken,
+            reScanHashToken: reScanHashToken,
             reScanQuestionToken: reScanQuestionToken,
             reScanInvalidIdentifier: reScanInvalidIdentifier,
             scanJsxToken: scanJsxToken,
@@ -7724,7 +7980,7 @@
                     }
                 }
             }
-            return token = 78;
+            return token = 79;
         }
         function scanBinaryOrOctalDigits(base) {
             var value = "";
@@ -7865,19 +8121,19 @@
                         return token = scanTemplateAndSetTokenValue(false);
                     case 37:
                         if (text.charCodeAt(pos + 1) === 61) {
-                            return pos += 2, token = 68;
+                            return pos += 2, token = 69;
                         }
                         pos++;
                         return token = 44;
                     case 38:
                         if (text.charCodeAt(pos + 1) === 38) {
                             if (text.charCodeAt(pos + 2) === 61) {
-                                return pos += 3, token = 75;
+                                return pos += 3, token = 76;
                             }
                             return pos += 2, token = 55;
                         }
                         if (text.charCodeAt(pos + 1) === 61) {
-                            return pos += 2, token = 72;
+                            return pos += 2, token = 73;
                         }
                         pos++;
                         return token = 50;
@@ -7889,11 +8145,11 @@
                         return token = 21;
                     case 42:
                         if (text.charCodeAt(pos + 1) === 61) {
-                            return pos += 2, token = 65;
+                            return pos += 2, token = 66;
                         }
                         if (text.charCodeAt(pos + 1) === 42) {
                             if (text.charCodeAt(pos + 2) === 61) {
-                                return pos += 3, token = 66;
+                                return pos += 3, token = 67;
                             }
                             return pos += 2, token = 42;
                         }
@@ -7908,7 +8164,7 @@
                             return pos += 2, token = 45;
                         }
                         if (text.charCodeAt(pos + 1) === 61) {
-                            return pos += 2, token = 63;
+                            return pos += 2, token = 64;
                         }
                         pos++;
                         return token = 39;
@@ -7920,7 +8176,7 @@
                             return pos += 2, token = 46;
                         }
                         if (text.charCodeAt(pos + 1) === 61) {
-                            return pos += 2, token = 64;
+                            return pos += 2, token = 65;
                         }
                         pos++;
                         return token = 40;
@@ -7986,7 +8242,7 @@
                             }
                         }
                         if (text.charCodeAt(pos + 1) === 61) {
-                            return pos += 2, token = 67;
+                            return pos += 2, token = 68;
                         }
                         pos++;
                         return token = 43;
@@ -8058,7 +8314,7 @@
                         }
                         if (text.charCodeAt(pos + 1) === 60) {
                             if (text.charCodeAt(pos + 2) === 61) {
-                                return pos += 3, token = 69;
+                                return pos += 3, token = 70;
                             }
                             return pos += 2, token = 47;
                         }
@@ -8092,7 +8348,7 @@
                             return pos += 2, token = 38;
                         }
                         pos++;
-                        return token = 62;
+                        return token = 63;
                     case 62:
                         if (isConflictMarkerTrivia(text, pos)) {
                             pos = scanConflictMarkerTrivia(text, pos, error);
@@ -8111,7 +8367,7 @@
                         }
                         if (text.charCodeAt(pos + 1) === 63) {
                             if (text.charCodeAt(pos + 2) === 61) {
-                                return pos += 3, token = 76;
+                                return pos += 3, token = 77;
                             }
                             return pos += 2, token = 60;
                         }
@@ -8125,7 +8381,7 @@
                         return token = 23;
                     case 94:
                         if (text.charCodeAt(pos + 1) === 61) {
-                            return pos += 2, token = 77;
+                            return pos += 2, token = 78;
                         }
                         pos++;
                         return token = 52;
@@ -8144,12 +8400,12 @@
                         }
                         if (text.charCodeAt(pos + 1) === 124) {
                             if (text.charCodeAt(pos + 2) === 61) {
-                                return pos += 3, token = 74;
+                                return pos += 3, token = 75;
                             }
                             return pos += 2, token = 56;
                         }
                         if (text.charCodeAt(pos + 1) === 61) {
-                            return pos += 2, token = 73;
+                            return pos += 2, token = 74;
                         }
                         pos++;
                         return token = 51;
@@ -8186,21 +8442,15 @@
                             pos++;
                             return token = 0;
                         }
-                        pos++;
-                        if (isIdentifierStart(ch = text.charCodeAt(pos), languageVersion)) {
+                        if (isIdentifierStart(codePointAt(text, pos + 1), languageVersion)) {
                             pos++;
-                            while (pos < end && isIdentifierPart(ch = text.charCodeAt(pos), languageVersion))
-                                pos++;
-                            tokenValue = text.substring(tokenPos, pos);
-                            if (ch === 92) {
-                                tokenValue += scanIdentifierParts();
-                            }
+                            scanIdentifier(codePointAt(text, pos), languageVersion);
                         }
                         else {
-                            tokenValue = "#";
-                            error(ts.Diagnostics.Invalid_character);
+                            tokenValue = String.fromCharCode(codePointAt(text, pos));
+                            error(ts.Diagnostics.Invalid_character, pos++, charSize(ch));
                         }
-                        return token = 79;
+                        return token = 80;
                     default:
                         var identifierKind = scanIdentifier(ch, languageVersion);
                         if (identifierKind) {
@@ -8215,8 +8465,9 @@
                             pos += charSize(ch);
                             continue;
                         }
-                        error(ts.Diagnostics.Invalid_character);
-                        pos += charSize(ch);
+                        var size = charSize(ch);
+                        error(ts.Diagnostics.Invalid_character, pos, size);
+                        pos += size;
                         return token = 0;
                 }
             }
@@ -8251,12 +8502,12 @@
                 if (text.charCodeAt(pos) === 62) {
                     if (text.charCodeAt(pos + 1) === 62) {
                         if (text.charCodeAt(pos + 2) === 61) {
-                            return pos += 3, token = 71;
+                            return pos += 3, token = 72;
                         }
                         return pos += 2, token = 49;
                     }
                     if (text.charCodeAt(pos + 1) === 61) {
-                        return pos += 2, token = 70;
+                        return pos += 2, token = 71;
                     }
                     pos++;
                     return token = 48;
@@ -8269,12 +8520,12 @@
             return token;
         }
         function reScanAsteriskEqualsToken() {
-            ts.Debug.assert(token === 65, "'reScanAsteriskEqualsToken' should only be called on a '*='");
+            ts.Debug.assert(token === 66, "'reScanAsteriskEqualsToken' should only be called on a '*='");
             pos = tokenPos + 1;
-            return token = 62;
+            return token = 63;
         }
         function reScanSlashToken() {
-            if (token === 43 || token === 67) {
+            if (token === 43 || token === 68) {
                 var p = tokenPos + 1;
                 var inEscape = false;
                 var inCharacterClass = false;
@@ -8318,7 +8569,7 @@
             return token;
         }
         function appendIfCommentDirective(commentDirectives, text, commentDirectiveRegEx, lineStart) {
-            var type = getDirectiveFromComment(text, commentDirectiveRegEx);
+            var type = getDirectiveFromComment(ts.trimStringStart(text), commentDirectiveRegEx);
             if (type === undefined) {
                 return commentDirectives;
             }
@@ -8361,6 +8612,13 @@
             }
             return token;
         }
+        function reScanHashToken() {
+            if (token === 80) {
+                pos = tokenPos + 1;
+                return token = 62;
+            }
+            return token;
+        }
         function reScanQuestionToken() {
             ts.Debug.assert(token === 60, "'reScanQuestionToken' should only be called on a '??'");
             pos = tokenPos + 1;
@@ -8432,7 +8690,7 @@
                         tokenValue += ":";
                         pos++;
                         namespaceSeparator = true;
-                        token = 78;
+                        token = 79;
                         continue;
                     }
                     var oldPos = pos;
@@ -8504,13 +8762,15 @@
                 case 62:
                     return token = 31;
                 case 61:
-                    return token = 62;
+                    return token = 63;
                 case 44:
                     return token = 27;
                 case 46:
                     return token = 24;
                 case 96:
                     return token = 61;
+                case 35:
+                    return token = 62;
                 case 92:
                     pos--;
                     var extendedCookedChar = peekExtendedUnicodeEscape();
@@ -8801,9 +9061,9 @@
     }
     ts.collapseTextChangeRangesAcrossMultipleVersions = collapseTextChangeRangesAcrossMultipleVersions;
     function getTypeParameterOwner(d) {
-        if (d && d.kind === 160) {
+        if (d && d.kind === 161) {
             for (var current = d; current; current = current.parent) {
-                if (isFunctionLike(current) || isClassLike(current) || current.kind === 254) {
+                if (isFunctionLike(current) || isClassLike(current) || current.kind === 256) {
                     return current;
                 }
             }
@@ -8811,7 +9071,7 @@
     }
     ts.getTypeParameterOwner = getTypeParameterOwner;
     function isParameterPropertyDeclaration(node, parent) {
-        return ts.hasSyntacticModifier(node, 16476) && parent.kind === 167;
+        return ts.hasSyntacticModifier(node, 16476) && parent.kind === 169;
     }
     ts.isParameterPropertyDeclaration = isParameterPropertyDeclaration;
     function isEmptyBindingPattern(node) {
@@ -8841,14 +9101,14 @@
             node = walkUpBindingElementsAndPatterns(node);
         }
         var flags = getFlags(node);
-        if (node.kind === 250) {
+        if (node.kind === 252) {
             node = node.parent;
         }
-        if (node && node.kind === 251) {
+        if (node && node.kind === 253) {
             flags |= getFlags(node);
             node = node.parent;
         }
-        if (node && node.kind === 233) {
+        if (node && node.kind === 235) {
             flags |= getFlags(node);
         }
         return flags;
@@ -8984,30 +9244,30 @@
             return getDeclarationIdentifier(hostNode);
         }
         switch (hostNode.kind) {
-            case 233:
+            case 235:
                 if (hostNode.declarationList && hostNode.declarationList.declarations[0]) {
                     return getDeclarationIdentifier(hostNode.declarationList.declarations[0]);
                 }
                 break;
-            case 234:
+            case 236:
                 var expr = hostNode.expression;
-                if (expr.kind === 217 && expr.operatorToken.kind === 62) {
+                if (expr.kind === 219 && expr.operatorToken.kind === 63) {
                     expr = expr.left;
                 }
                 switch (expr.kind) {
-                    case 202:
+                    case 204:
                         return expr.name;
-                    case 203:
+                    case 205:
                         var arg = expr.argumentExpression;
                         if (ts.isIdentifier(arg)) {
                             return arg;
                         }
                 }
                 break;
-            case 208: {
+            case 210: {
                 return getDeclarationIdentifier(hostNode.expression);
             }
-            case 246: {
+            case 248: {
                 if (isDeclaration(hostNode.statement) || isExpression(hostNode.statement)) {
                     return getDeclarationIdentifier(hostNode.statement);
                 }
@@ -9039,18 +9299,18 @@
     ts.isNamedDeclaration = isNamedDeclaration;
     function getNonAssignedNameOfDeclaration(declaration) {
         switch (declaration.kind) {
-            case 78:
+            case 79:
                 return declaration;
-            case 337:
-            case 330: {
+            case 342:
+            case 335: {
                 var name = declaration.name;
-                if (name.kind === 158) {
+                if (name.kind === 159) {
                     return name.right;
                 }
                 break;
             }
-            case 204:
-            case 217: {
+            case 206:
+            case 219: {
                 var expr_1 = declaration;
                 switch (ts.getAssignmentDeclarationKind(expr_1)) {
                     case 1:
@@ -9066,15 +9326,15 @@
                         return undefined;
                 }
             }
-            case 335:
+            case 340:
                 return getNameOfJSDocTypedef(declaration);
-            case 329:
+            case 334:
                 return nameForNamelessJSDocTypedef(declaration);
-            case 267: {
+            case 269: {
                 var expression = declaration.expression;
                 return ts.isIdentifier(expression) ? expression : undefined;
             }
-            case 203:
+            case 205:
                 var expr = declaration;
                 if (ts.isBindableStaticElementAccessExpression(expr)) {
                     return expr.argumentExpression;
@@ -9293,7 +9553,7 @@
     function getTextOfJSDocComment(comment) {
         return typeof comment === "string" ? comment
             : comment === null || comment === void 0 ? void 0 : comment.map(function (c) {
-                return c.kind === 313 ? c.text : "{@link " + (c.name ? ts.entityNameToString(c.name) + " " : "") + c.text + "}";
+                return c.kind === 316 ? c.text : "{@link " + (c.name ? ts.entityNameToString(c.name) + " " : "") + c.text + "}";
             }).join("");
     }
     ts.getTextOfJSDocComment = getTextOfJSDocComment;
@@ -9302,7 +9562,7 @@
             return ts.emptyArray;
         }
         if (ts.isJSDocTypeAlias(node)) {
-            ts.Debug.assert(node.parent.kind === 312);
+            ts.Debug.assert(node.parent.kind === 315);
             return ts.flatMap(node.parent.tags, function (tag) { return ts.isJSDocTemplateTag(tag) ? tag.typeParameters : undefined; });
         }
         if (node.typeParameters) {
@@ -9328,11 +9588,11 @@
     }
     ts.getEffectiveConstraintOfTypeParameter = getEffectiveConstraintOfTypeParameter;
     function isMemberName(node) {
-        return node.kind === 78 || node.kind === 79;
+        return node.kind === 79 || node.kind === 80;
     }
     ts.isMemberName = isMemberName;
     function isGetOrSetAccessorDeclaration(node) {
-        return node.kind === 169 || node.kind === 168;
+        return node.kind === 171 || node.kind === 170;
     }
     ts.isGetOrSetAccessorDeclaration = isGetOrSetAccessorDeclaration;
     function isPropertyAccessChain(node) {
@@ -9350,10 +9610,10 @@
     function isOptionalChain(node) {
         var kind = node.kind;
         return !!(node.flags & 32) &&
-            (kind === 202
-                || kind === 203
-                || kind === 204
-                || kind === 226);
+            (kind === 204
+                || kind === 205
+                || kind === 206
+                || kind === 228);
     }
     ts.isOptionalChain = isOptionalChain;
     function isOptionalChainRoot(node) {
@@ -9371,7 +9631,7 @@
     }
     ts.isOutermostOptionalChain = isOutermostOptionalChain;
     function isNullishCoalesce(node) {
-        return node.kind === 217 && node.operatorToken.kind === 60;
+        return node.kind === 219 && node.operatorToken.kind === 60;
     }
     ts.isNullishCoalesce = isNullishCoalesce;
     function isConstTypeReference(node) {
@@ -9388,17 +9648,17 @@
     }
     ts.isNonNullChain = isNonNullChain;
     function isBreakOrContinueStatement(node) {
-        return node.kind === 242 || node.kind === 241;
+        return node.kind === 244 || node.kind === 243;
     }
     ts.isBreakOrContinueStatement = isBreakOrContinueStatement;
     function isNamedExportBindings(node) {
-        return node.kind === 270 || node.kind === 269;
+        return node.kind === 272 || node.kind === 271;
     }
     ts.isNamedExportBindings = isNamedExportBindings;
     function isUnparsedTextLike(node) {
         switch (node.kind) {
-            case 295:
-            case 296:
+            case 297:
+            case 298:
                 return true;
             default:
                 return false;
@@ -9407,12 +9667,12 @@
     ts.isUnparsedTextLike = isUnparsedTextLike;
     function isUnparsedNode(node) {
         return isUnparsedTextLike(node) ||
-            node.kind === 293 ||
-            node.kind === 297;
+            node.kind === 295 ||
+            node.kind === 299;
     }
     ts.isUnparsedNode = isUnparsedNode;
     function isJSDocPropertyLikeTag(node) {
-        return node.kind === 337 || node.kind === 330;
+        return node.kind === 342 || node.kind === 335;
     }
     ts.isJSDocPropertyLikeTag = isJSDocPropertyLikeTag;
     function isNode(node) {
@@ -9420,11 +9680,11 @@
     }
     ts.isNode = isNode;
     function isNodeKind(kind) {
-        return kind >= 158;
+        return kind >= 159;
     }
     ts.isNodeKind = isNodeKind;
     function isTokenKind(kind) {
-        return kind >= 0 && kind <= 157;
+        return kind >= 0 && kind <= 158;
     }
     ts.isTokenKind = isTokenKind;
     function isToken(n) {
@@ -9463,13 +9723,13 @@
     ts.isImportOrExportSpecifier = isImportOrExportSpecifier;
     function isTypeOnlyImportOrExportDeclaration(node) {
         switch (node.kind) {
-            case 266:
-            case 271:
+            case 268:
+            case 273:
                 return node.parent.parent.isTypeOnly;
-            case 264:
+            case 266:
                 return node.parent.isTypeOnly;
+            case 265:
             case 263:
-            case 261:
                 return node.isTypeOnly;
             default:
                 return false;
@@ -9494,18 +9754,18 @@
     ts.isPrivateIdentifierPropertyAccessExpression = isPrivateIdentifierPropertyAccessExpression;
     function isModifierKind(token) {
         switch (token) {
-            case 125:
-            case 129:
-            case 84:
-            case 133:
-            case 87:
-            case 92:
-            case 122:
-            case 120:
-            case 121:
-            case 142:
+            case 126:
+            case 130:
+            case 85:
+            case 134:
+            case 88:
+            case 93:
             case 123:
-            case 156:
+            case 121:
+            case 122:
+            case 143:
+            case 124:
+            case 157:
                 return true;
         }
         return false;
@@ -9516,7 +9776,7 @@
     }
     ts.isParameterPropertyModifier = isParameterPropertyModifier;
     function isClassMemberModifier(idToken) {
-        return isParameterPropertyModifier(idToken) || idToken === 123 || idToken === 156;
+        return isParameterPropertyModifier(idToken) || idToken === 124 || idToken === 157;
     }
     ts.isClassMemberModifier = isClassMemberModifier;
     function isModifier(node) {
@@ -9525,43 +9785,51 @@
     ts.isModifier = isModifier;
     function isEntityName(node) {
         var kind = node.kind;
-        return kind === 158
-            || kind === 78;
+        return kind === 159
+            || kind === 79;
     }
     ts.isEntityName = isEntityName;
     function isPropertyName(node) {
         var kind = node.kind;
-        return kind === 78
-            || kind === 79
+        return kind === 79
+            || kind === 80
             || kind === 10
             || kind === 8
-            || kind === 159;
+            || kind === 160;
     }
     ts.isPropertyName = isPropertyName;
     function isBindingName(node) {
         var kind = node.kind;
-        return kind === 78
-            || kind === 197
-            || kind === 198;
+        return kind === 79
+            || kind === 199
+            || kind === 200;
     }
     ts.isBindingName = isBindingName;
     function isFunctionLike(node) {
         return !!node && isFunctionLikeKind(node.kind);
     }
     ts.isFunctionLike = isFunctionLike;
+    function isFunctionLikeOrClassStaticBlockDeclaration(node) {
+        return !!node && (isFunctionLikeKind(node.kind) || ts.isClassStaticBlockDeclaration(node));
+    }
+    ts.isFunctionLikeOrClassStaticBlockDeclaration = isFunctionLikeOrClassStaticBlockDeclaration;
     function isFunctionLikeDeclaration(node) {
         return node && isFunctionLikeDeclarationKind(node.kind);
     }
     ts.isFunctionLikeDeclaration = isFunctionLikeDeclaration;
+    function isBooleanLiteral(node) {
+        return node.kind === 110 || node.kind === 95;
+    }
+    ts.isBooleanLiteral = isBooleanLiteral;
     function isFunctionLikeDeclarationKind(kind) {
         switch (kind) {
-            case 252:
-            case 166:
+            case 254:
             case 167:
-            case 168:
             case 169:
-            case 209:
-            case 210:
+            case 170:
+            case 171:
+            case 211:
+            case 212:
                 return true;
             default:
                 return false;
@@ -9569,14 +9837,14 @@
     }
     function isFunctionLikeKind(kind) {
         switch (kind) {
-            case 165:
-            case 170:
-            case 315:
-            case 171:
+            case 166:
             case 172:
-            case 175:
-            case 309:
-            case 176:
+            case 318:
+            case 173:
+            case 174:
+            case 177:
+            case 312:
+            case 178:
                 return true;
             default:
                 return isFunctionLikeDeclarationKind(kind);
@@ -9589,28 +9857,29 @@
     ts.isFunctionOrModuleBlock = isFunctionOrModuleBlock;
     function isClassElement(node) {
         var kind = node.kind;
-        return kind === 167
-            || kind === 164
-            || kind === 166
+        return kind === 169
+            || kind === 165
+            || kind === 167
+            || kind === 170
+            || kind === 171
+            || kind === 174
             || kind === 168
-            || kind === 169
-            || kind === 172
-            || kind === 230;
+            || kind === 232;
     }
     ts.isClassElement = isClassElement;
     function isClassLike(node) {
-        return node && (node.kind === 253 || node.kind === 222);
+        return node && (node.kind === 255 || node.kind === 224);
     }
     ts.isClassLike = isClassLike;
     function isAccessor(node) {
-        return node && (node.kind === 168 || node.kind === 169);
+        return node && (node.kind === 170 || node.kind === 171);
     }
     ts.isAccessor = isAccessor;
     function isMethodOrAccessor(node) {
         switch (node.kind) {
-            case 166:
-            case 168:
-            case 169:
+            case 167:
+            case 170:
+            case 171:
                 return true;
             default:
                 return false;
@@ -9619,11 +9888,11 @@
     ts.isMethodOrAccessor = isMethodOrAccessor;
     function isTypeElement(node) {
         var kind = node.kind;
-        return kind === 171
-            || kind === 170
-            || kind === 163
-            || kind === 165
-            || kind === 172;
+        return kind === 173
+            || kind === 172
+            || kind === 164
+            || kind === 166
+            || kind === 174;
     }
     ts.isTypeElement = isTypeElement;
     function isClassOrTypeElement(node) {
@@ -9632,12 +9901,12 @@
     ts.isClassOrTypeElement = isClassOrTypeElement;
     function isObjectLiteralElementLike(node) {
         var kind = node.kind;
-        return kind === 289
-            || kind === 290
-            || kind === 291
-            || kind === 166
-            || kind === 168
-            || kind === 169;
+        return kind === 291
+            || kind === 292
+            || kind === 293
+            || kind === 167
+            || kind === 170
+            || kind === 171;
     }
     ts.isObjectLiteralElementLike = isObjectLiteralElementLike;
     function isTypeNode(node) {
@@ -9646,8 +9915,8 @@
     ts.isTypeNode = isTypeNode;
     function isFunctionOrConstructorTypeNode(node) {
         switch (node.kind) {
-            case 175:
-            case 176:
+            case 177:
+            case 178:
                 return true;
         }
         return false;
@@ -9656,29 +9925,29 @@
     function isBindingPattern(node) {
         if (node) {
             var kind = node.kind;
-            return kind === 198
-                || kind === 197;
+            return kind === 200
+                || kind === 199;
         }
         return false;
     }
     ts.isBindingPattern = isBindingPattern;
     function isAssignmentPattern(node) {
         var kind = node.kind;
-        return kind === 200
-            || kind === 201;
+        return kind === 202
+            || kind === 203;
     }
     ts.isAssignmentPattern = isAssignmentPattern;
     function isArrayBindingElement(node) {
         var kind = node.kind;
-        return kind === 199
-            || kind === 223;
+        return kind === 201
+            || kind === 225;
     }
     ts.isArrayBindingElement = isArrayBindingElement;
     function isDeclarationBindingElement(bindingElement) {
         switch (bindingElement.kind) {
-            case 250:
-            case 161:
-            case 199:
+            case 252:
+            case 162:
+            case 201:
                 return true;
         }
         return false;
@@ -9691,17 +9960,28 @@
     ts.isBindingOrAssignmentPattern = isBindingOrAssignmentPattern;
     function isObjectBindingOrAssignmentPattern(node) {
         switch (node.kind) {
-            case 197:
-            case 201:
+            case 199:
+            case 203:
                 return true;
         }
         return false;
     }
     ts.isObjectBindingOrAssignmentPattern = isObjectBindingOrAssignmentPattern;
+    function isObjectBindingOrAssignmentElement(node) {
+        switch (node.kind) {
+            case 201:
+            case 291:
+            case 292:
+            case 293:
+                return true;
+        }
+        return false;
+    }
+    ts.isObjectBindingOrAssignmentElement = isObjectBindingOrAssignmentElement;
     function isArrayBindingOrAssignmentPattern(node) {
         switch (node.kind) {
-            case 198:
             case 200:
+            case 202:
                 return true;
         }
         return false;
@@ -9709,25 +9989,25 @@
     ts.isArrayBindingOrAssignmentPattern = isArrayBindingOrAssignmentPattern;
     function isPropertyAccessOrQualifiedNameOrImportTypeNode(node) {
         var kind = node.kind;
-        return kind === 202
-            || kind === 158
-            || kind === 196;
+        return kind === 204
+            || kind === 159
+            || kind === 198;
     }
     ts.isPropertyAccessOrQualifiedNameOrImportTypeNode = isPropertyAccessOrQualifiedNameOrImportTypeNode;
     function isPropertyAccessOrQualifiedName(node) {
         var kind = node.kind;
-        return kind === 202
-            || kind === 158;
+        return kind === 204
+            || kind === 159;
     }
     ts.isPropertyAccessOrQualifiedName = isPropertyAccessOrQualifiedName;
     function isCallLikeExpression(node) {
         switch (node.kind) {
-            case 276:
-            case 275:
-            case 204:
-            case 205:
+            case 278:
+            case 277:
             case 206:
-            case 162:
+            case 207:
+            case 208:
+            case 163:
                 return true;
             default:
                 return false;
@@ -9735,12 +10015,12 @@
     }
     ts.isCallLikeExpression = isCallLikeExpression;
     function isCallOrNewExpression(node) {
-        return node.kind === 204 || node.kind === 205;
+        return node.kind === 206 || node.kind === 207;
     }
     ts.isCallOrNewExpression = isCallOrNewExpression;
     function isTemplateLiteral(node) {
         var kind = node.kind;
-        return kind === 219
+        return kind === 221
             || kind === 14;
     }
     ts.isTemplateLiteral = isTemplateLiteral;
@@ -9750,34 +10030,34 @@
     ts.isLeftHandSideExpression = isLeftHandSideExpression;
     function isLeftHandSideExpressionKind(kind) {
         switch (kind) {
-            case 202:
-            case 203:
-            case 205:
             case 204:
-            case 274:
-            case 275:
-            case 278:
+            case 205:
+            case 207:
             case 206:
-            case 200:
+            case 276:
+            case 277:
+            case 280:
             case 208:
-            case 201:
-            case 222:
-            case 209:
-            case 78:
+            case 202:
+            case 210:
+            case 203:
+            case 224:
+            case 211:
+            case 79:
             case 13:
             case 8:
             case 9:
             case 10:
             case 14:
-            case 219:
-            case 94:
-            case 103:
-            case 107:
-            case 109:
-            case 105:
-            case 226:
-            case 227:
-            case 99:
+            case 221:
+            case 95:
+            case 104:
+            case 108:
+            case 110:
+            case 106:
+            case 228:
+            case 229:
+            case 100:
                 return true;
             default:
                 return false;
@@ -9789,13 +10069,13 @@
     ts.isUnaryExpression = isUnaryExpression;
     function isUnaryExpressionKind(kind) {
         switch (kind) {
-            case 215:
-            case 216:
-            case 211:
-            case 212:
+            case 217:
+            case 218:
             case 213:
             case 214:
-            case 207:
+            case 215:
+            case 216:
+            case 209:
                 return true;
             default:
                 return isLeftHandSideExpressionKind(kind);
@@ -9803,9 +10083,9 @@
     }
     function isUnaryExpressionWithWrite(expr) {
         switch (expr.kind) {
-            case 216:
+            case 218:
                 return true;
-            case 215:
+            case 217:
                 return expr.operator === 45 ||
                     expr.operator === 46;
             default:
@@ -9819,15 +10099,15 @@
     ts.isExpression = isExpression;
     function isExpressionKind(kind) {
         switch (kind) {
-            case 218:
             case 220:
-            case 210:
-            case 217:
-            case 221:
-            case 225:
+            case 222:
+            case 212:
+            case 219:
             case 223:
-            case 341:
-            case 340:
+            case 227:
+            case 225:
+            case 346:
+            case 345:
                 return true;
             default:
                 return isUnaryExpressionKind(kind);
@@ -9835,8 +10115,8 @@
     }
     function isAssertionExpression(node) {
         var kind = node.kind;
-        return kind === 207
-            || kind === 225;
+        return kind === 209
+            || kind === 227;
     }
     ts.isAssertionExpression = isAssertionExpression;
     function isNotEmittedOrPartiallyEmittedNode(node) {
@@ -9846,13 +10126,13 @@
     ts.isNotEmittedOrPartiallyEmittedNode = isNotEmittedOrPartiallyEmittedNode;
     function isIterationStatement(node, lookInLabeledStatements) {
         switch (node.kind) {
+            case 240:
+            case 241:
+            case 242:
             case 238:
             case 239:
-            case 240:
-            case 236:
-            case 237:
                 return true;
-            case 246:
+            case 248:
                 return lookInLabeledStatements && isIterationStatement(node.statement, lookInLabeledStatements);
         }
         return false;
@@ -9875,7 +10155,7 @@
     }
     ts.isExternalModuleIndicator = isExternalModuleIndicator;
     function isForInOrOfStatement(node) {
-        return node.kind === 239 || node.kind === 240;
+        return node.kind === 241 || node.kind === 242;
     }
     ts.isForInOrOfStatement = isForInOrOfStatement;
     function isConciseBody(node) {
@@ -9894,109 +10174,110 @@
     ts.isForInitializer = isForInitializer;
     function isModuleBody(node) {
         var kind = node.kind;
-        return kind === 258
-            || kind === 257
-            || kind === 78;
+        return kind === 260
+            || kind === 259
+            || kind === 79;
     }
     ts.isModuleBody = isModuleBody;
     function isNamespaceBody(node) {
         var kind = node.kind;
-        return kind === 258
-            || kind === 257;
+        return kind === 260
+            || kind === 259;
     }
     ts.isNamespaceBody = isNamespaceBody;
     function isJSDocNamespaceBody(node) {
         var kind = node.kind;
-        return kind === 78
-            || kind === 257;
+        return kind === 79
+            || kind === 259;
     }
     ts.isJSDocNamespaceBody = isJSDocNamespaceBody;
     function isNamedImportBindings(node) {
         var kind = node.kind;
-        return kind === 265
-            || kind === 264;
+        return kind === 267
+            || kind === 266;
     }
     ts.isNamedImportBindings = isNamedImportBindings;
     function isModuleOrEnumDeclaration(node) {
-        return node.kind === 257 || node.kind === 256;
+        return node.kind === 259 || node.kind === 258;
     }
     ts.isModuleOrEnumDeclaration = isModuleOrEnumDeclaration;
     function isDeclarationKind(kind) {
-        return kind === 210
-            || kind === 199
-            || kind === 253
-            || kind === 222
-            || kind === 167
-            || kind === 256
-            || kind === 292
-            || kind === 271
-            || kind === 252
-            || kind === 209
+        return kind === 212
+            || kind === 201
+            || kind === 255
+            || kind === 224
             || kind === 168
-            || kind === 263
-            || kind === 261
-            || kind === 266
-            || kind === 254
-            || kind === 281
-            || kind === 166
-            || kind === 165
-            || kind === 257
-            || kind === 260
-            || kind === 264
-            || kind === 270
-            || kind === 161
-            || kind === 289
-            || kind === 164
-            || kind === 163
             || kind === 169
-            || kind === 290
-            || kind === 255
-            || kind === 160
-            || kind === 250
-            || kind === 335
-            || kind === 328
-            || kind === 337;
-    }
-    function isDeclarationStatementKind(kind) {
-        return kind === 252
-            || kind === 272
-            || kind === 253
+            || kind === 258
+            || kind === 294
+            || kind === 273
             || kind === 254
-            || kind === 255
-            || kind === 256
-            || kind === 257
-            || kind === 262
-            || kind === 261
+            || kind === 211
+            || kind === 170
+            || kind === 265
+            || kind === 263
             || kind === 268
-            || kind === 267
-            || kind === 260;
-    }
-    function isStatementKindButNotDeclarationKind(kind) {
-        return kind === 242
-            || kind === 241
-            || kind === 249
-            || kind === 236
-            || kind === 234
-            || kind === 232
-            || kind === 239
-            || kind === 240
-            || kind === 238
-            || kind === 235
-            || kind === 246
-            || kind === 243
-            || kind === 245
-            || kind === 247
-            || kind === 248
-            || kind === 233
-            || kind === 237
-            || kind === 244
-            || kind === 339
-            || kind === 343
+            || kind === 256
+            || kind === 283
+            || kind === 167
+            || kind === 166
+            || kind === 259
+            || kind === 262
+            || kind === 266
+            || kind === 272
+            || kind === 162
+            || kind === 291
+            || kind === 165
+            || kind === 164
+            || kind === 171
+            || kind === 292
+            || kind === 257
+            || kind === 161
+            || kind === 252
+            || kind === 340
+            || kind === 333
             || kind === 342;
     }
+    function isDeclarationStatementKind(kind) {
+        return kind === 254
+            || kind === 274
+            || kind === 255
+            || kind === 256
+            || kind === 257
+            || kind === 258
+            || kind === 259
+            || kind === 264
+            || kind === 263
+            || kind === 270
+            || kind === 269
+            || kind === 262;
+    }
+    function isStatementKindButNotDeclarationKind(kind) {
+        return kind === 244
+            || kind === 243
+            || kind === 251
+            || kind === 238
+            || kind === 236
+            || kind === 234
+            || kind === 241
+            || kind === 242
+            || kind === 240
+            || kind === 237
+            || kind === 248
+            || kind === 245
+            || kind === 247
+            || kind === 249
+            || kind === 250
+            || kind === 235
+            || kind === 239
+            || kind === 246
+            || kind === 344
+            || kind === 348
+            || kind === 347;
+    }
     function isDeclaration(node) {
-        if (node.kind === 160) {
-            return (node.parent && node.parent.kind !== 334) || ts.isInJSFile(node);
+        if (node.kind === 161) {
+            return (node.parent && node.parent.kind !== 339) || ts.isInJSFile(node);
         }
         return isDeclarationKind(node.kind);
     }
@@ -10017,10 +10298,10 @@
     }
     ts.isStatement = isStatement;
     function isBlockStatement(node) {
-        if (node.kind !== 231)
+        if (node.kind !== 233)
             return false;
         if (node.parent !== undefined) {
-            if (node.parent.kind === 248 || node.parent.kind === 288) {
+            if (node.parent.kind === 250 || node.parent.kind === 290) {
                 return false;
             }
         }
@@ -10030,80 +10311,80 @@
         var kind = node.kind;
         return isStatementKindButNotDeclarationKind(kind)
             || isDeclarationStatementKind(kind)
-            || kind === 231;
+            || kind === 233;
     }
     ts.isStatementOrBlock = isStatementOrBlock;
     function isModuleReference(node) {
         var kind = node.kind;
-        return kind === 273
-            || kind === 158
-            || kind === 78;
+        return kind === 275
+            || kind === 159
+            || kind === 79;
     }
     ts.isModuleReference = isModuleReference;
     function isJsxTagNameExpression(node) {
         var kind = node.kind;
-        return kind === 107
-            || kind === 78
-            || kind === 202;
+        return kind === 108
+            || kind === 79
+            || kind === 204;
     }
     ts.isJsxTagNameExpression = isJsxTagNameExpression;
     function isJsxChild(node) {
         var kind = node.kind;
-        return kind === 274
-            || kind === 284
-            || kind === 275
+        return kind === 276
+            || kind === 286
+            || kind === 277
             || kind === 11
-            || kind === 278;
+            || kind === 280;
     }
     ts.isJsxChild = isJsxChild;
     function isJsxAttributeLike(node) {
         var kind = node.kind;
-        return kind === 281
-            || kind === 283;
+        return kind === 283
+            || kind === 285;
     }
     ts.isJsxAttributeLike = isJsxAttributeLike;
     function isStringLiteralOrJsxExpression(node) {
         var kind = node.kind;
         return kind === 10
-            || kind === 284;
+            || kind === 286;
     }
     ts.isStringLiteralOrJsxExpression = isStringLiteralOrJsxExpression;
     function isJsxOpeningLikeElement(node) {
         var kind = node.kind;
-        return kind === 276
-            || kind === 275;
+        return kind === 278
+            || kind === 277;
     }
     ts.isJsxOpeningLikeElement = isJsxOpeningLikeElement;
     function isCaseOrDefaultClause(node) {
         var kind = node.kind;
-        return kind === 285
-            || kind === 286;
+        return kind === 287
+            || kind === 288;
     }
     ts.isCaseOrDefaultClause = isCaseOrDefaultClause;
     function isJSDocNode(node) {
-        return node.kind >= 302 && node.kind <= 337;
+        return node.kind >= 304 && node.kind <= 342;
     }
     ts.isJSDocNode = isJSDocNode;
     function isJSDocCommentContainingNode(node) {
-        return node.kind === 312
-            || node.kind === 311
-            || node.kind === 313
+        return node.kind === 315
+            || node.kind === 314
             || node.kind === 316
+            || isJSDocLinkLike(node)
             || isJSDocTag(node)
             || ts.isJSDocTypeLiteral(node)
             || ts.isJSDocSignature(node);
     }
     ts.isJSDocCommentContainingNode = isJSDocCommentContainingNode;
     function isJSDocTag(node) {
-        return node.kind >= 317 && node.kind <= 337;
+        return node.kind >= 322 && node.kind <= 342;
     }
     ts.isJSDocTag = isJSDocTag;
     function isSetAccessor(node) {
-        return node.kind === 169;
+        return node.kind === 171;
     }
     ts.isSetAccessor = isSetAccessor;
     function isGetAccessor(node) {
-        return node.kind === 168;
+        return node.kind === 170;
     }
     ts.isGetAccessor = isGetAccessor;
     function hasJSDocNodes(node) {
@@ -10121,13 +10402,13 @@
     ts.hasInitializer = hasInitializer;
     function hasOnlyExpressionInitializer(node) {
         switch (node.kind) {
-            case 250:
-            case 161:
-            case 199:
-            case 163:
+            case 252:
+            case 162:
+            case 201:
             case 164:
-            case 289:
-            case 292:
+            case 165:
+            case 291:
+            case 294:
                 return true;
             default:
                 return false;
@@ -10135,11 +10416,11 @@
     }
     ts.hasOnlyExpressionInitializer = hasOnlyExpressionInitializer;
     function isObjectLiteralElement(node) {
-        return node.kind === 281 || node.kind === 283 || isObjectLiteralElementLike(node);
+        return node.kind === 283 || node.kind === 285 || isObjectLiteralElementLike(node);
     }
     ts.isObjectLiteralElement = isObjectLiteralElement;
     function isTypeReferenceType(node) {
-        return node.kind === 174 || node.kind === 224;
+        return node.kind === 176 || node.kind === 226;
     }
     ts.isTypeReferenceType = isTypeReferenceType;
     var MAX_SMI_X86 = 1073741823;
@@ -10170,6 +10451,10 @@
         return node.kind === 10 || node.kind === 14;
     }
     ts.isStringLiteralLike = isStringLiteralLike;
+    function isJSDocLinkLike(node) {
+        return node.kind === 319 || node.kind === 320 || node.kind === 321;
+    }
+    ts.isJSDocLinkLike = isJSDocLinkLike;
 })(ts || (ts = {}));
 var ts;
 (function (ts) {
@@ -10243,7 +10528,7 @@
             increaseIndent: ts.noop,
             decreaseIndent: ts.noop,
             clear: function () { return str = ""; },
-            trackSymbol: ts.noop,
+            trackSymbol: function () { return false; },
             reportInaccessibleThisError: ts.noop,
             reportInaccessibleUniqueSymbolError: ts.noop,
             reportPrivateInBaseOfClassExpression: ts.noop,
@@ -10255,11 +10540,19 @@
     }
     ts.changesAffectModuleResolution = changesAffectModuleResolution;
     function optionsHaveModuleResolutionChanges(oldOptions, newOptions) {
-        return ts.moduleResolutionOptionDeclarations.some(function (o) {
+        return optionsHaveChanges(oldOptions, newOptions, ts.moduleResolutionOptionDeclarations);
+    }
+    ts.optionsHaveModuleResolutionChanges = optionsHaveModuleResolutionChanges;
+    function changesAffectingProgramStructure(oldOptions, newOptions) {
+        return optionsHaveChanges(oldOptions, newOptions, ts.optionsAffectingProgramStructure);
+    }
+    ts.changesAffectingProgramStructure = changesAffectingProgramStructure;
+    function optionsHaveChanges(oldOptions, newOptions, optionDeclarations) {
+        return oldOptions !== newOptions && optionDeclarations.some(function (o) {
             return !isJsonEqual(getCompilerOptionValue(oldOptions, o), getCompilerOptionValue(newOptions, o));
         });
     }
-    ts.optionsHaveModuleResolutionChanges = optionsHaveModuleResolutionChanges;
+    ts.optionsHaveChanges = optionsHaveChanges;
     function forEachAncestor(node, callback) {
         while (true) {
             var res = callback(node);
@@ -10396,19 +10689,23 @@
         }
     }
     function getSourceFileOfNode(node) {
-        while (node && node.kind !== 298) {
+        while (node && node.kind !== 300) {
             node = node.parent;
         }
         return node;
     }
     ts.getSourceFileOfNode = getSourceFileOfNode;
+    function getSourceFileOfModule(module) {
+        return getSourceFileOfNode(module.valueDeclaration || getNonAugmentationDeclaration(module));
+    }
+    ts.getSourceFileOfModule = getSourceFileOfModule;
     function isStatementWithLocals(node) {
         switch (node.kind) {
-            case 231:
-            case 259:
-            case 238:
-            case 239:
+            case 233:
+            case 261:
             case 240:
+            case 241:
+            case 242:
                 return true;
         }
         return false;
@@ -10468,7 +10765,7 @@
                 break;
             }
         }
-        to.splice.apply(to, __spreadArray([statementIndex, 0], from));
+        to.splice.apply(to, __spreadArray([statementIndex, 0], from, false));
         return to;
     }
     function insertStatementAfterPrologue(to, statement, isPrologueDirective) {
@@ -10507,10 +10804,10 @@
             commentPos + 2 < commentEnd &&
             text.charCodeAt(commentPos + 2) === 47) {
             var textSubStr = text.substring(commentPos, commentEnd);
-            return textSubStr.match(ts.fullTripleSlashReferencePathRegEx) ||
-                textSubStr.match(ts.fullTripleSlashAMDReferencePathRegEx) ||
-                textSubStr.match(fullTripleSlashReferenceTypeReferenceDirectiveRegEx) ||
-                textSubStr.match(defaultLibReferenceRegEx) ?
+            return ts.fullTripleSlashReferencePathRegEx.test(textSubStr) ||
+                ts.fullTripleSlashAMDReferencePathRegEx.test(textSubStr) ||
+                fullTripleSlashReferenceTypeReferenceDirectiveRegEx.test(textSubStr) ||
+                defaultLibReferenceRegEx.test(textSubStr) ?
                 true : false;
         }
         return false;
@@ -10558,7 +10855,7 @@
         if (includeJsDoc && ts.hasJSDocNodes(node)) {
             return getTokenPosOfNode(node.jsDoc[0], sourceFile);
         }
-        if (node.kind === 338 && node._children.length > 0) {
+        if (node.kind === 343 && node._children.length > 0) {
             return getTokenPosOfNode(node._children[0], sourceFile, includeJsDoc);
         }
         return ts.skipTrivia((sourceFile || getSourceFileOfNode(node)).text, node.pos, false, false, isInJSDoc(node));
@@ -10590,7 +10887,7 @@
         }
         var text = sourceText.substring(includeTrivia ? node.pos : ts.skipTrivia(sourceText, node.pos), node.end);
         if (isJSDocTypeExpressionOrChild(node)) {
-            text = text.replace(/(^|\r?\n|\r)\s*\*\s*/g, "$1");
+            text = text.split(/\r\n|\n|\r/).map(function (line) { return ts.trimStringStart(line.replace(/^\s*\*/, "")); }).join("\n");
         }
         return text;
     }
@@ -10683,6 +10980,7 @@
     }
     ts.getScriptTargetFeatures = getScriptTargetFeatures;
     function getLiteralText(node, sourceFile, flags) {
+        var _a;
         if (canUseOriginalText(node, flags)) {
             return getSourceTextOfNodeFromSourceFile(sourceFile, node);
         }
@@ -10704,7 +11002,7 @@
             case 17: {
                 var escapeText = flags & 1 || (getEmitFlags(node) & 16777216) ? escapeString :
                     escapeNonAsciiString;
-                var rawText = node.rawText || escapeTemplateSubstitution(escapeText(node.text, 96));
+                var rawText = (_a = node.rawText) !== null && _a !== void 0 ? _a : escapeTemplateSubstitution(escapeText(node.text, 96));
                 switch (node.kind) {
                     case 14:
                         return "`" + rawText + "`";
@@ -10753,7 +11051,7 @@
     ts.isBlockOrCatchScoped = isBlockOrCatchScoped;
     function isCatchClauseVariableDeclarationOrBindingElement(declaration) {
         var node = getRootDeclaration(declaration);
-        return node.kind === 250 && node.parent.kind === 288;
+        return node.kind === 252 && node.parent.kind === 290;
     }
     ts.isCatchClauseVariableDeclarationOrBindingElement = isCatchClauseVariableDeclarationOrBindingElement;
     function isAmbientModule(node) {
@@ -10777,12 +11075,12 @@
     }
     ts.isShorthandAmbientModuleSymbol = isShorthandAmbientModuleSymbol;
     function isShorthandAmbientModule(node) {
-        return !!node && node.kind === 257 && (!node.body);
+        return !!node && node.kind === 259 && (!node.body);
     }
     function isBlockScopedContainerTopLevel(node) {
-        return node.kind === 298 ||
-            node.kind === 257 ||
-            ts.isFunctionLike(node);
+        return node.kind === 300 ||
+            node.kind === 259 ||
+            ts.isFunctionLikeOrClassStaticBlockDeclaration(node);
     }
     ts.isBlockScopedContainerTopLevel = isBlockScopedContainerTopLevel;
     function isGlobalScopeAugmentation(module) {
@@ -10795,9 +11093,9 @@
     ts.isExternalModuleAugmentation = isExternalModuleAugmentation;
     function isModuleAugmentationExternal(node) {
         switch (node.parent.kind) {
-            case 298:
+            case 300:
                 return ts.isExternalModule(node.parent);
-            case 258:
+            case 260:
                 return isAmbientModule(node.parent.parent) && ts.isSourceFile(node.parent.parent.parent) && !ts.isExternalModule(node.parent.parent.parent);
         }
         return false;
@@ -10842,32 +11140,34 @@
     ts.isEffectiveStrictModeSourceFile = isEffectiveStrictModeSourceFile;
     function isBlockScope(node, parentNode) {
         switch (node.kind) {
-            case 298:
+            case 300:
+            case 261:
+            case 290:
             case 259:
-            case 288:
-            case 257:
-            case 238:
-            case 239:
             case 240:
-            case 167:
-            case 166:
-            case 168:
+            case 241:
+            case 242:
             case 169:
-            case 252:
-            case 209:
-            case 210:
+            case 167:
+            case 170:
+            case 171:
+            case 254:
+            case 211:
+            case 212:
+            case 165:
+            case 168:
                 return true;
-            case 231:
-                return !ts.isFunctionLike(parentNode);
+            case 233:
+                return !ts.isFunctionLikeOrClassStaticBlockDeclaration(parentNode);
         }
         return false;
     }
     ts.isBlockScope = isBlockScope;
     function isDeclarationWithTypeParameters(node) {
         switch (node.kind) {
-            case 328:
-            case 335:
-            case 315:
+            case 333:
+            case 340:
+            case 318:
                 return true;
             default:
                 ts.assertType(node);
@@ -10877,25 +11177,25 @@
     ts.isDeclarationWithTypeParameters = isDeclarationWithTypeParameters;
     function isDeclarationWithTypeParameterChildren(node) {
         switch (node.kind) {
+            case 172:
+            case 173:
+            case 166:
+            case 174:
+            case 177:
+            case 178:
+            case 312:
+            case 255:
+            case 224:
+            case 256:
+            case 257:
+            case 339:
+            case 254:
+            case 167:
+            case 169:
             case 170:
             case 171:
-            case 165:
-            case 172:
-            case 175:
-            case 176:
-            case 309:
-            case 253:
-            case 222:
-            case 254:
-            case 255:
-            case 334:
-            case 252:
-            case 166:
-            case 167:
-            case 168:
-            case 169:
-            case 209:
-            case 210:
+            case 211:
+            case 212:
                 return true;
             default:
                 ts.assertType(node);
@@ -10905,8 +11205,8 @@
     ts.isDeclarationWithTypeParameterChildren = isDeclarationWithTypeParameterChildren;
     function isAnyImportSyntax(node) {
         switch (node.kind) {
-            case 262:
-            case 261:
+            case 264:
+            case 263:
                 return true;
             default:
                 return false;
@@ -10915,15 +11215,15 @@
     ts.isAnyImportSyntax = isAnyImportSyntax;
     function isLateVisibilityPaintedStatement(node) {
         switch (node.kind) {
-            case 262:
-            case 261:
-            case 233:
-            case 253:
-            case 252:
-            case 257:
+            case 264:
+            case 263:
+            case 235:
             case 255:
             case 254:
+            case 259:
+            case 257:
             case 256:
+            case 258:
                 return true;
             default:
                 return false;
@@ -10942,6 +11242,14 @@
         return ts.findAncestor(node.parent, function (current) { return isBlockScope(current, current.parent); });
     }
     ts.getEnclosingBlockScopeContainer = getEnclosingBlockScopeContainer;
+    function forEachEnclosingBlockScopeContainer(node, cb) {
+        var container = getEnclosingBlockScopeContainer(node);
+        while (container) {
+            cb(container);
+            container = getEnclosingBlockScopeContainer(container);
+        }
+    }
+    ts.forEachEnclosingBlockScopeContainer = forEachEnclosingBlockScopeContainer;
     function declarationNameToString(name) {
         return !name || getFullWidth(name) === 0 ? "(Missing)" : getTextOfNode(name);
     }
@@ -10951,19 +11259,19 @@
     }
     ts.getNameFromIndexInfo = getNameFromIndexInfo;
     function isComputedNonLiteralName(name) {
-        return name.kind === 159 && !isStringOrNumericLiteralLike(name.expression);
+        return name.kind === 160 && !isStringOrNumericLiteralLike(name.expression);
     }
     ts.isComputedNonLiteralName = isComputedNonLiteralName;
     function getTextOfPropertyName(name) {
         switch (name.kind) {
-            case 78:
             case 79:
+            case 80:
                 return name.escapedText;
             case 10:
             case 8:
             case 14:
                 return ts.escapeLeadingUnderscores(name.text);
-            case 159:
+            case 160:
                 if (isStringOrNumericLiteralLike(name.expression))
                     return ts.escapeLeadingUnderscores(name.expression.text);
                 return ts.Debug.fail("Text of property name cannot be read from non-literal-valued ComputedPropertyNames");
@@ -10974,20 +11282,22 @@
     ts.getTextOfPropertyName = getTextOfPropertyName;
     function entityNameToString(name) {
         switch (name.kind) {
-            case 107:
+            case 108:
                 return "this";
+            case 80:
             case 79:
-            case 78:
                 return getFullWidth(name) === 0 ? ts.idText(name) : getTextOfNode(name);
-            case 158:
+            case 159:
                 return entityNameToString(name.left) + "." + entityNameToString(name.right);
-            case 202:
+            case 204:
                 if (ts.isIdentifier(name.name) || ts.isPrivateIdentifier(name.name)) {
                     return entityNameToString(name.expression) + "." + entityNameToString(name.name);
                 }
                 else {
                     return ts.Debug.assertNever(name.name);
                 }
+            case 306:
+                return entityNameToString(name.left) + entityNameToString(name.right);
             default:
                 return ts.Debug.assertNever(name);
         }
@@ -11067,7 +11377,7 @@
     ts.getSpanOfTokenAtPosition = getSpanOfTokenAtPosition;
     function getErrorSpanForArrowFunction(sourceFile, node) {
         var pos = ts.skipTrivia(sourceFile.text, node.pos);
-        if (node.body && node.body.kind === 231) {
+        if (node.body && node.body.kind === 233) {
             var startLine = ts.getLineAndCharacterOfPosition(sourceFile, node.body.pos).line;
             var endLine = ts.getLineAndCharacterOfPosition(sourceFile, node.body.end).line;
             if (startLine < endLine) {
@@ -11079,34 +11389,35 @@
     function getErrorSpanForNode(sourceFile, node) {
         var errorNode = node;
         switch (node.kind) {
-            case 298:
+            case 300:
                 var pos_1 = ts.skipTrivia(sourceFile.text, 0, false);
                 if (pos_1 === sourceFile.text.length) {
                     return ts.createTextSpan(0, 0);
                 }
                 return getSpanOfTokenAtPosition(sourceFile, pos_1);
-            case 250:
-            case 199:
-            case 253:
-            case 222:
-            case 254:
-            case 257:
-            case 256:
-            case 292:
             case 252:
-            case 209:
-            case 166:
-            case 168:
-            case 169:
+            case 201:
             case 255:
+            case 224:
+            case 256:
+            case 259:
+            case 258:
+            case 294:
+            case 254:
+            case 211:
+            case 167:
+            case 170:
+            case 171:
+            case 257:
+            case 165:
             case 164:
-            case 163:
+            case 266:
                 errorNode = node.name;
                 break;
-            case 210:
+            case 212:
                 return getErrorSpanForArrowFunction(sourceFile, node);
-            case 285:
-            case 286:
+            case 287:
+            case 288:
                 var start = ts.skipTrivia(sourceFile.text, node.pos);
                 var end = node.statements.length > 0 ? node.statements[0].pos : node.end;
                 return ts.createTextSpanFromBounds(start, end);
@@ -11155,16 +11466,16 @@
     }
     ts.isLet = isLet;
     function isSuperCall(n) {
-        return n.kind === 204 && n.expression.kind === 105;
+        return n.kind === 206 && n.expression.kind === 106;
     }
     ts.isSuperCall = isSuperCall;
     function isImportCall(n) {
-        return n.kind === 204 && n.expression.kind === 99;
+        return n.kind === 206 && n.expression.kind === 100;
     }
     ts.isImportCall = isImportCall;
     function isImportMeta(n) {
         return ts.isMetaProperty(n)
-            && n.keywordToken === 99
+            && n.keywordToken === 100
             && n.name.escapedText === "meta";
     }
     ts.isImportMeta = isImportMeta;
@@ -11173,7 +11484,7 @@
     }
     ts.isLiteralImportTypeNode = isLiteralImportTypeNode;
     function isPrologueDirective(node) {
-        return node.kind === 234
+        return node.kind === 236
             && node.expression.kind === 10;
     }
     ts.isPrologueDirective = isPrologueDirective;
@@ -11201,12 +11512,12 @@
     }
     ts.getLeadingCommentRangesOfNode = getLeadingCommentRangesOfNode;
     function getJSDocCommentRanges(node, text) {
-        var commentRanges = (node.kind === 161 ||
-            node.kind === 160 ||
-            node.kind === 209 ||
+        var commentRanges = (node.kind === 162 ||
+            node.kind === 161 ||
+            node.kind === 211 ||
+            node.kind === 212 ||
             node.kind === 210 ||
-            node.kind === 208 ||
-            node.kind === 250) ?
+            node.kind === 252) ?
             ts.concatenate(ts.getTrailingCommentRanges(text, node.pos), ts.getLeadingCommentRanges(text, node.pos)) :
             ts.getLeadingCommentRanges(text, node.pos);
         return ts.filter(commentRanges, function (comment) {
@@ -11216,84 +11527,84 @@
         });
     }
     ts.getJSDocCommentRanges = getJSDocCommentRanges;
-    ts.fullTripleSlashReferencePathRegEx = /^(\/\/\/\s*<reference\s+path\s*=\s*)('|")(.+?)\2.*?\/>/;
-    var fullTripleSlashReferenceTypeReferenceDirectiveRegEx = /^(\/\/\/\s*<reference\s+types\s*=\s*)('|")(.+?)\2.*?\/>/;
-    ts.fullTripleSlashAMDReferencePathRegEx = /^(\/\/\/\s*<amd-dependency\s+path\s*=\s*)('|")(.+?)\2.*?\/>/;
-    var defaultLibReferenceRegEx = /^(\/\/\/\s*<reference\s+no-default-lib\s*=\s*)('|")(.+?)\2\s*\/>/;
+    ts.fullTripleSlashReferencePathRegEx = /^(\/\/\/\s*<reference\s+path\s*=\s*)(('[^']*')|("[^"]*")).*?\/>/;
+    var fullTripleSlashReferenceTypeReferenceDirectiveRegEx = /^(\/\/\/\s*<reference\s+types\s*=\s*)(('[^']*')|("[^"]*")).*?\/>/;
+    ts.fullTripleSlashAMDReferencePathRegEx = /^(\/\/\/\s*<amd-dependency\s+path\s*=\s*)(('[^']*')|("[^"]*")).*?\/>/;
+    var defaultLibReferenceRegEx = /^(\/\/\/\s*<reference\s+no-default-lib\s*=\s*)(('[^']*')|("[^"]*"))\s*\/>/;
     function isPartOfTypeNode(node) {
-        if (173 <= node.kind && node.kind <= 196) {
+        if (175 <= node.kind && node.kind <= 198) {
             return true;
         }
         switch (node.kind) {
-            case 128:
-            case 152:
-            case 144:
-            case 155:
-            case 147:
-            case 131:
-            case 148:
+            case 129:
+            case 153:
             case 145:
-            case 150:
-            case 141:
+            case 156:
+            case 148:
+            case 132:
+            case 149:
+            case 146:
+            case 151:
+            case 142:
                 return true;
-            case 113:
-                return node.parent.kind !== 213;
-            case 224:
+            case 114:
+                return node.parent.kind !== 215;
+            case 226:
                 return !isExpressionWithTypeArgumentsInClassExtendsClause(node);
-            case 160:
-                return node.parent.kind === 191 || node.parent.kind === 186;
-            case 78:
-                if (node.parent.kind === 158 && node.parent.right === node) {
+            case 161:
+                return node.parent.kind === 193 || node.parent.kind === 188;
+            case 79:
+                if (node.parent.kind === 159 && node.parent.right === node) {
                     node = node.parent;
                 }
-                else if (node.parent.kind === 202 && node.parent.name === node) {
+                else if (node.parent.kind === 204 && node.parent.name === node) {
                     node = node.parent;
                 }
-                ts.Debug.assert(node.kind === 78 || node.kind === 158 || node.kind === 202, "'node' was expected to be a qualified name, identifier or property access in 'isPartOfTypeNode'.");
-            case 158:
-            case 202:
-            case 107: {
+                ts.Debug.assert(node.kind === 79 || node.kind === 159 || node.kind === 204, "'node' was expected to be a qualified name, identifier or property access in 'isPartOfTypeNode'.");
+            case 159:
+            case 204:
+            case 108: {
                 var parent = node.parent;
-                if (parent.kind === 177) {
+                if (parent.kind === 179) {
                     return false;
                 }
-                if (parent.kind === 196) {
+                if (parent.kind === 198) {
                     return !parent.isTypeOf;
                 }
-                if (173 <= parent.kind && parent.kind <= 196) {
+                if (175 <= parent.kind && parent.kind <= 198) {
                     return true;
                 }
                 switch (parent.kind) {
-                    case 224:
+                    case 226:
                         return !isExpressionWithTypeArgumentsInClassExtendsClause(parent);
-                    case 160:
-                        return node === parent.constraint;
-                    case 334:
-                        return node === parent.constraint;
-                    case 164:
-                    case 163:
                     case 161:
-                    case 250:
-                        return node === parent.type;
+                        return node === parent.constraint;
+                    case 339:
+                        return node === parent.constraint;
+                    case 165:
+                    case 164:
+                    case 162:
                     case 252:
-                    case 209:
-                    case 210:
+                        return node === parent.type;
+                    case 254:
+                    case 211:
+                    case 212:
+                    case 169:
                     case 167:
                     case 166:
-                    case 165:
-                    case 168:
-                    case 169:
-                        return node === parent.type;
                     case 170:
                     case 171:
+                        return node === parent.type;
                     case 172:
+                    case 173:
+                    case 174:
                         return node === parent.type;
-                    case 207:
+                    case 209:
                         return node === parent.type;
-                    case 204:
-                    case 205:
-                        return ts.contains(parent.typeArguments, node);
                     case 206:
+                    case 207:
+                        return ts.contains(parent.typeArguments, node);
+                    case 208:
                         return false;
                 }
             }
@@ -11315,23 +11626,23 @@
         return traverse(body);
         function traverse(node) {
             switch (node.kind) {
-                case 243:
+                case 245:
                     return visitor(node);
-                case 259:
-                case 231:
-                case 235:
-                case 236:
+                case 261:
+                case 233:
                 case 237:
                 case 238:
                 case 239:
                 case 240:
-                case 244:
-                case 245:
-                case 285:
-                case 286:
+                case 241:
+                case 242:
                 case 246:
-                case 248:
+                case 247:
+                case 287:
                 case 288:
+                case 248:
+                case 250:
+                case 290:
                     return ts.forEachChild(node, traverse);
             }
         }
@@ -11341,21 +11652,21 @@
         return traverse(body);
         function traverse(node) {
             switch (node.kind) {
-                case 220:
+                case 222:
                     visitor(node);
                     var operand = node.expression;
                     if (operand) {
                         traverse(operand);
                     }
                     return;
+                case 258:
                 case 256:
-                case 254:
+                case 259:
                 case 257:
-                case 255:
                     return;
                 default:
                     if (ts.isFunctionLike(node)) {
-                        if (node.name && node.name.kind === 159) {
+                        if (node.name && node.name.kind === 160) {
                             traverse(node.name.expression);
                             return;
                         }
@@ -11368,10 +11679,10 @@
     }
     ts.forEachYieldExpression = forEachYieldExpression;
     function getRestParameterElementType(node) {
-        if (node && node.kind === 179) {
+        if (node && node.kind === 181) {
             return node.elementType;
         }
-        else if (node && node.kind === 174) {
+        else if (node && node.kind === 176) {
             return ts.singleOrUndefined(node.typeArguments);
         }
         else {
@@ -11381,12 +11692,12 @@
     ts.getRestParameterElementType = getRestParameterElementType;
     function getMembersOfDeclaration(node) {
         switch (node.kind) {
-            case 254:
-            case 253:
-            case 222:
-            case 178:
+            case 256:
+            case 255:
+            case 224:
+            case 180:
                 return node.members;
-            case 201:
+            case 203:
                 return node.properties;
         }
     }
@@ -11394,14 +11705,14 @@
     function isVariableLike(node) {
         if (node) {
             switch (node.kind) {
-                case 199:
-                case 292:
-                case 161:
-                case 289:
+                case 201:
+                case 294:
+                case 162:
+                case 291:
+                case 165:
                 case 164:
-                case 163:
-                case 290:
-                case 250:
+                case 292:
+                case 252:
                     return true;
             }
         }
@@ -11413,8 +11724,8 @@
     }
     ts.isVariableLikeOrAccessor = isVariableLikeOrAccessor;
     function isVariableDeclarationInVariableStatement(node) {
-        return node.parent.kind === 251
-            && node.parent.parent.kind === 233;
+        return node.parent.kind === 253
+            && node.parent.parent.kind === 235;
     }
     ts.isVariableDeclarationInVariableStatement = isVariableDeclarationInVariableStatement;
     function isValidESSymbolDeclaration(node) {
@@ -11425,13 +11736,13 @@
     ts.isValidESSymbolDeclaration = isValidESSymbolDeclaration;
     function introducesArgumentsExoticObject(node) {
         switch (node.kind) {
-            case 166:
-            case 165:
             case 167:
-            case 168:
+            case 166:
             case 169:
-            case 252:
-            case 209:
+            case 170:
+            case 171:
+            case 254:
+            case 211:
                 return true;
         }
         return false;
@@ -11442,7 +11753,7 @@
             if (beforeUnwrapLabelCallback) {
                 beforeUnwrapLabelCallback(node);
             }
-            if (node.statement.kind !== 246) {
+            if (node.statement.kind !== 248) {
                 return node.statement;
             }
             node = node.statement;
@@ -11450,17 +11761,17 @@
     }
     ts.unwrapInnermostStatementOfLabel = unwrapInnermostStatementOfLabel;
     function isFunctionBlock(node) {
-        return node && node.kind === 231 && ts.isFunctionLike(node.parent);
+        return node && node.kind === 233 && ts.isFunctionLike(node.parent);
     }
     ts.isFunctionBlock = isFunctionBlock;
     function isObjectLiteralMethod(node) {
-        return node && node.kind === 166 && node.parent.kind === 201;
+        return node && node.kind === 167 && node.parent.kind === 203;
     }
     ts.isObjectLiteralMethod = isObjectLiteralMethod;
     function isObjectLiteralOrClassExpressionMethod(node) {
-        return node.kind === 166 &&
-            (node.parent.kind === 201 ||
-                node.parent.kind === 222);
+        return node.kind === 167 &&
+            (node.parent.kind === 203 ||
+                node.parent.kind === 224);
     }
     ts.isObjectLiteralOrClassExpressionMethod = isObjectLiteralOrClassExpressionMethod;
     function isIdentifierTypePredicate(predicate) {
@@ -11473,7 +11784,7 @@
     ts.isThisTypePredicate = isThisTypePredicate;
     function getPropertyAssignment(objectLiteral, key, key2) {
         return objectLiteral.properties.filter(function (property) {
-            if (property.kind === 289) {
+            if (property.kind === 291) {
                 var propName = getTextOfPropertyName(property.name);
                 return key === propName || (!!key2 && key2 === propName);
             }
@@ -11521,47 +11832,61 @@
         return ts.findAncestor(node.parent, ts.isClassLike);
     }
     ts.getContainingClass = getContainingClass;
+    function getContainingClassStaticBlock(node) {
+        return ts.findAncestor(node.parent, function (n) {
+            if (ts.isClassLike(n) || ts.isFunctionLike(n)) {
+                return "quit";
+            }
+            return ts.isClassStaticBlockDeclaration(n);
+        });
+    }
+    ts.getContainingClassStaticBlock = getContainingClassStaticBlock;
+    function getContainingFunctionOrClassStaticBlock(node) {
+        return ts.findAncestor(node.parent, ts.isFunctionLikeOrClassStaticBlockDeclaration);
+    }
+    ts.getContainingFunctionOrClassStaticBlock = getContainingFunctionOrClassStaticBlock;
     function getThisContainer(node, includeArrowFunctions) {
-        ts.Debug.assert(node.kind !== 298);
+        ts.Debug.assert(node.kind !== 300);
         while (true) {
             node = node.parent;
             if (!node) {
                 return ts.Debug.fail();
             }
             switch (node.kind) {
-                case 159:
+                case 160:
                     if (ts.isClassLike(node.parent.parent)) {
                         return node;
                     }
                     node = node.parent;
                     break;
-                case 162:
-                    if (node.parent.kind === 161 && ts.isClassElement(node.parent.parent)) {
+                case 163:
+                    if (node.parent.kind === 162 && ts.isClassElement(node.parent.parent)) {
                         node = node.parent.parent;
                     }
                     else if (ts.isClassElement(node.parent)) {
                         node = node.parent;
                     }
                     break;
-                case 210:
+                case 212:
                     if (!includeArrowFunctions) {
                         continue;
                     }
-                case 252:
-                case 209:
-                case 257:
-                case 164:
-                case 163:
-                case 166:
-                case 165:
-                case 167:
+                case 254:
+                case 211:
+                case 259:
                 case 168:
+                case 165:
+                case 164:
+                case 167:
+                case 166:
                 case 169:
                 case 170:
                 case 171:
                 case 172:
-                case 256:
-                case 298:
+                case 173:
+                case 174:
+                case 258:
+                case 300:
                     return node;
             }
         }
@@ -11579,9 +11904,9 @@
         var container = getThisContainer(node, false);
         if (container) {
             switch (container.kind) {
-                case 167:
-                case 252:
-                case 209:
+                case 169:
+                case 254:
+                case 211:
                     return container;
             }
         }
@@ -11595,25 +11920,26 @@
                 return node;
             }
             switch (node.kind) {
-                case 159:
+                case 160:
                     node = node.parent;
                     break;
-                case 252:
-                case 209:
-                case 210:
+                case 254:
+                case 211:
+                case 212:
                     if (!stopOnFunctions) {
                         continue;
                     }
-                case 164:
-                case 163:
-                case 166:
                 case 165:
+                case 164:
                 case 167:
-                case 168:
+                case 166:
                 case 169:
+                case 170:
+                case 171:
+                case 168:
                     return node;
-                case 162:
-                    if (node.parent.kind === 161 && ts.isClassElement(node.parent.parent)) {
+                case 163:
+                    if (node.parent.kind === 162 && ts.isClassElement(node.parent.parent)) {
                         node = node.parent.parent;
                     }
                     else if (ts.isClassElement(node.parent)) {
@@ -11625,59 +11951,59 @@
     }
     ts.getSuperContainer = getSuperContainer;
     function getImmediatelyInvokedFunctionExpression(func) {
-        if (func.kind === 209 || func.kind === 210) {
+        if (func.kind === 211 || func.kind === 212) {
             var prev = func;
             var parent = func.parent;
-            while (parent.kind === 208) {
+            while (parent.kind === 210) {
                 prev = parent;
                 parent = parent.parent;
             }
-            if (parent.kind === 204 && parent.expression === prev) {
+            if (parent.kind === 206 && parent.expression === prev) {
                 return parent;
             }
         }
     }
     ts.getImmediatelyInvokedFunctionExpression = getImmediatelyInvokedFunctionExpression;
     function isSuperOrSuperProperty(node) {
-        return node.kind === 105
+        return node.kind === 106
             || isSuperProperty(node);
     }
     ts.isSuperOrSuperProperty = isSuperOrSuperProperty;
     function isSuperProperty(node) {
         var kind = node.kind;
-        return (kind === 202 || kind === 203)
-            && node.expression.kind === 105;
+        return (kind === 204 || kind === 205)
+            && node.expression.kind === 106;
     }
     ts.isSuperProperty = isSuperProperty;
     function isThisProperty(node) {
         var kind = node.kind;
-        return (kind === 202 || kind === 203)
-            && node.expression.kind === 107;
+        return (kind === 204 || kind === 205)
+            && node.expression.kind === 108;
     }
     ts.isThisProperty = isThisProperty;
     function isThisInitializedDeclaration(node) {
         var _a;
-        return !!node && ts.isVariableDeclaration(node) && ((_a = node.initializer) === null || _a === void 0 ? void 0 : _a.kind) === 107;
+        return !!node && ts.isVariableDeclaration(node) && ((_a = node.initializer) === null || _a === void 0 ? void 0 : _a.kind) === 108;
     }
     ts.isThisInitializedDeclaration = isThisInitializedDeclaration;
     function isThisInitializedObjectBindingExpression(node) {
         return !!node
             && (ts.isShorthandPropertyAssignment(node) || ts.isPropertyAssignment(node))
             && ts.isBinaryExpression(node.parent.parent)
-            && node.parent.parent.operatorToken.kind === 62
-            && node.parent.parent.right.kind === 107;
+            && node.parent.parent.operatorToken.kind === 63
+            && node.parent.parent.right.kind === 108;
     }
     ts.isThisInitializedObjectBindingExpression = isThisInitializedObjectBindingExpression;
     function getEntityNameFromTypeNode(node) {
         switch (node.kind) {
-            case 174:
+            case 176:
                 return node.typeName;
-            case 224:
+            case 226:
                 return isEntityNameExpression(node.expression)
                     ? node.expression
                     : undefined;
-            case 78:
-            case 158:
+            case 79:
+            case 159:
                 return node;
         }
         return undefined;
@@ -11685,10 +12011,10 @@
     ts.getEntityNameFromTypeNode = getEntityNameFromTypeNode;
     function getInvokedExpression(node) {
         switch (node.kind) {
-            case 206:
+            case 208:
                 return node.tag;
-            case 276:
-            case 275:
+            case 278:
+            case 277:
                 return node.tagName;
             default:
                 return node.expression;
@@ -11700,21 +12026,21 @@
             return false;
         }
         switch (node.kind) {
-            case 253:
+            case 255:
                 return true;
-            case 164:
-                return parent.kind === 253;
-            case 168:
-            case 169:
-            case 166:
+            case 165:
+                return parent.kind === 255;
+            case 170:
+            case 171:
+            case 167:
                 return node.body !== undefined
-                    && parent.kind === 253;
-            case 161:
+                    && parent.kind === 255;
+            case 162:
                 return parent.body !== undefined
-                    && (parent.kind === 167
-                        || parent.kind === 166
-                        || parent.kind === 169)
-                    && grandparent.kind === 253;
+                    && (parent.kind === 169
+                        || parent.kind === 167
+                        || parent.kind === 171)
+                    && grandparent.kind === 255;
         }
         return false;
     }
@@ -11730,9 +12056,10 @@
     ts.nodeOrChildIsDecorated = nodeOrChildIsDecorated;
     function childIsDecorated(node, parent) {
         switch (node.kind) {
-            case 253:
+            case 255:
                 return ts.some(node.members, function (m) { return nodeOrChildIsDecorated(m, node, parent); });
-            case 166:
+            case 167:
+            case 171:
             case 169:
                 return ts.some(node.parameters, function (p) { return nodeIsDecorated(p, node, parent); });
             default:
@@ -11740,11 +12067,18 @@
         }
     }
     ts.childIsDecorated = childIsDecorated;
+    function classOrConstructorParameterIsDecorated(node) {
+        if (nodeIsDecorated(node))
+            return true;
+        var constructor = getFirstConstructorWithBody(node);
+        return !!constructor && childIsDecorated(constructor, node);
+    }
+    ts.classOrConstructorParameterIsDecorated = classOrConstructorParameterIsDecorated;
     function isJSXTagName(node) {
         var parent = node.parent;
-        if (parent.kind === 276 ||
-            parent.kind === 275 ||
-            parent.kind === 277) {
+        if (parent.kind === 278 ||
+            parent.kind === 277 ||
+            parent.kind === 279) {
             return parent.tagName === node;
         }
         return false;
@@ -11752,56 +12086,61 @@
     ts.isJSXTagName = isJSXTagName;
     function isExpressionNode(node) {
         switch (node.kind) {
-            case 105:
-            case 103:
-            case 109:
-            case 94:
+            case 106:
+            case 104:
+            case 110:
+            case 95:
             case 13:
-            case 200:
-            case 201:
             case 202:
             case 203:
             case 204:
             case 205:
             case 206:
-            case 225:
             case 207:
-            case 226:
             case 208:
+            case 227:
             case 209:
-            case 222:
+            case 228:
             case 210:
-            case 213:
             case 211:
+            case 224:
             case 212:
             case 215:
-            case 216:
+            case 213:
+            case 214:
             case 217:
             case 218:
-            case 221:
             case 219:
-            case 223:
-            case 274:
-            case 275:
-            case 278:
             case 220:
-            case 214:
-            case 227:
+            case 223:
+            case 221:
+            case 225:
+            case 276:
+            case 277:
+            case 280:
+            case 222:
+            case 216:
+            case 229:
                 return true;
-            case 158:
-                while (node.parent.kind === 158) {
+            case 159:
+                while (node.parent.kind === 159) {
                     node = node.parent;
                 }
-                return node.parent.kind === 177 || isJSXTagName(node);
-            case 78:
-                if (node.parent.kind === 177 || isJSXTagName(node)) {
+                return node.parent.kind === 179 || ts.isJSDocLinkLike(node.parent) || ts.isJSDocNameReference(node.parent) || ts.isJSDocMemberName(node.parent) || isJSXTagName(node);
+            case 306:
+                while (ts.isJSDocMemberName(node.parent)) {
+                    node = node.parent;
+                }
+                return node.parent.kind === 179 || ts.isJSDocLinkLike(node.parent) || ts.isJSDocNameReference(node.parent) || ts.isJSDocMemberName(node.parent) || isJSXTagName(node);
+            case 79:
+                if (node.parent.kind === 179 || ts.isJSDocLinkLike(node.parent) || ts.isJSDocNameReference(node.parent) || ts.isJSDocMemberName(node.parent) || isJSXTagName(node)) {
                     return true;
                 }
             case 8:
             case 9:
             case 10:
             case 14:
-            case 107:
+            case 108:
                 return isInExpressionContext(node);
             default:
                 return false;
@@ -11811,49 +12150,49 @@
     function isInExpressionContext(node) {
         var parent = node.parent;
         switch (parent.kind) {
-            case 250:
-            case 161:
+            case 252:
+            case 162:
+            case 165:
             case 164:
-            case 163:
-            case 292:
-            case 289:
-            case 199:
+            case 294:
+            case 291:
+            case 201:
                 return parent.initializer === node;
-            case 234:
-            case 235:
             case 236:
             case 237:
-            case 243:
-            case 244:
-            case 245:
-            case 285:
-            case 247:
-                return parent.expression === node;
             case 238:
+            case 239:
+            case 245:
+            case 246:
+            case 247:
+            case 287:
+            case 249:
+                return parent.expression === node;
+            case 240:
                 var forStatement = parent;
-                return (forStatement.initializer === node && forStatement.initializer.kind !== 251) ||
+                return (forStatement.initializer === node && forStatement.initializer.kind !== 253) ||
                     forStatement.condition === node ||
                     forStatement.incrementor === node;
-            case 239:
-            case 240:
+            case 241:
+            case 242:
                 var forInStatement = parent;
-                return (forInStatement.initializer === node && forInStatement.initializer.kind !== 251) ||
+                return (forInStatement.initializer === node && forInStatement.initializer.kind !== 253) ||
                     forInStatement.expression === node;
-            case 207:
-            case 225:
+            case 209:
+            case 227:
                 return node === parent.expression;
-            case 229:
+            case 231:
                 return node === parent.expression;
-            case 159:
+            case 160:
                 return node === parent.expression;
-            case 162:
-            case 284:
-            case 283:
-            case 291:
+            case 163:
+            case 286:
+            case 285:
+            case 293:
                 return true;
-            case 224:
+            case 226:
                 return parent.expression === node && isExpressionWithTypeArgumentsInClassExtendsClause(parent);
-            case 290:
+            case 292:
                 return parent.objectAssignmentInitializer === node;
             default:
                 return isExpressionNode(parent);
@@ -11861,10 +12200,10 @@
     }
     ts.isInExpressionContext = isInExpressionContext;
     function isPartOfTypeQuery(node) {
-        while (node.kind === 158 || node.kind === 78) {
+        while (node.kind === 159 || node.kind === 79) {
             node = node.parent;
         }
-        return node.kind === 177;
+        return node.kind === 179;
     }
     ts.isPartOfTypeQuery = isPartOfTypeQuery;
     function isNamespaceReexportDeclaration(node) {
@@ -11872,7 +12211,7 @@
     }
     ts.isNamespaceReexportDeclaration = isNamespaceReexportDeclaration;
     function isExternalModuleImportEqualsDeclaration(node) {
-        return node.kind === 261 && node.moduleReference.kind === 273;
+        return node.kind === 263 && node.moduleReference.kind === 275;
     }
     ts.isExternalModuleImportEqualsDeclaration = isExternalModuleImportEqualsDeclaration;
     function getExternalModuleImportEqualsDeclarationExpression(node) {
@@ -11885,7 +12224,7 @@
     }
     ts.getExternalModuleRequireArgument = getExternalModuleRequireArgument;
     function isInternalModuleImportEqualsDeclaration(node) {
-        return node.kind === 261 && node.moduleReference.kind !== 273;
+        return node.kind === 263 && node.moduleReference.kind !== 275;
     }
     ts.isInternalModuleImportEqualsDeclaration = isInternalModuleImportEqualsDeclaration;
     function isSourceFileJS(file) {
@@ -11917,15 +12256,15 @@
             ts.isIdentifier(node.typeName) &&
             node.typeName.escapedText === "Object" &&
             node.typeArguments && node.typeArguments.length === 2 &&
-            (node.typeArguments[0].kind === 147 || node.typeArguments[0].kind === 144);
+            (node.typeArguments[0].kind === 148 || node.typeArguments[0].kind === 145);
     }
     ts.isJSDocIndexSignature = isJSDocIndexSignature;
     function isRequireCall(callExpression, requireStringLiteralLikeArgument) {
-        if (callExpression.kind !== 204) {
+        if (callExpression.kind !== 206) {
             return false;
         }
         var _a = callExpression, expression = _a.expression, args = _a.arguments;
-        if (expression.kind !== 78 || expression.escapedText !== "require") {
+        if (expression.kind !== 79 || expression.escapedText !== "require") {
             return false;
         }
         if (args.length !== 1) {
@@ -11936,7 +12275,7 @@
     }
     ts.isRequireCall = isRequireCall;
     function isRequireVariableDeclaration(node) {
-        if (node.kind === 199) {
+        if (node.kind === 201) {
             node = node.parent.parent;
         }
         return ts.isVariableDeclaration(node) && !!node.initializer && isRequireCall(getLeftmostAccessExpression(node.initializer), true);
@@ -11985,7 +12324,7 @@
         });
     }
     function getAssignedExpandoInitializer(node) {
-        if (node && node.parent && ts.isBinaryExpression(node.parent) && node.parent.operatorToken.kind === 62) {
+        if (node && node.parent && ts.isBinaryExpression(node.parent) && node.parent.operatorToken.kind === 63) {
             var isPrototypeAssignment = isPrototypeAccess(node.parent.left);
             return getExpandoInitializer(node.parent.right, isPrototypeAssignment) ||
                 getDefaultedExpandoInitializer(node.parent.left, node.parent.right, isPrototypeAssignment);
@@ -12001,11 +12340,11 @@
     function getExpandoInitializer(initializer, isPrototypeAssignment) {
         if (ts.isCallExpression(initializer)) {
             var e = skipParentheses(initializer.expression);
-            return e.kind === 209 || e.kind === 210 ? initializer : undefined;
+            return e.kind === 211 || e.kind === 212 ? initializer : undefined;
         }
-        if (initializer.kind === 209 ||
-            initializer.kind === 222 ||
-            initializer.kind === 210) {
+        if (initializer.kind === 211 ||
+            initializer.kind === 224 ||
+            initializer.kind === 212) {
             return initializer;
         }
         if (ts.isObjectLiteralExpression(initializer) && (initializer.properties.length === 0 || isPrototypeAssignment)) {
@@ -12023,7 +12362,7 @@
     }
     function isDefaultedExpandoInitializer(node) {
         var name = ts.isVariableDeclaration(node.parent) ? node.parent.name :
-            ts.isBinaryExpression(node.parent) && node.parent.operatorToken.kind === 62 ? node.parent.left :
+            ts.isBinaryExpression(node.parent) && node.parent.operatorToken.kind === 63 ? node.parent.left :
                 undefined;
         return name && getExpandoInitializer(node.right, isPrototypeAccess(name)) && isEntityNameExpression(name) && isSameEntityName(name, node.left);
     }
@@ -12031,7 +12370,7 @@
     function getNameOfExpando(node) {
         if (ts.isBinaryExpression(node.parent)) {
             var parent = ((node.parent.operatorToken.kind === 56 || node.parent.operatorToken.kind === 60) && ts.isBinaryExpression(node.parent.parent)) ? node.parent.parent : node.parent;
-            if (parent.operatorToken.kind === 62 && ts.isIdentifier(parent.left)) {
+            if (parent.operatorToken.kind === 63 && ts.isIdentifier(parent.left)) {
                 return parent.left;
             }
         }
@@ -12045,7 +12384,7 @@
             return getTextOfIdentifierOrLiteral(name) === getTextOfIdentifierOrLiteral(initializer);
         }
         if (ts.isIdentifier(name) && isLiteralLikeAccess(initializer) &&
-            (initializer.expression.kind === 107 ||
+            (initializer.expression.kind === 108 ||
                 ts.isIdentifier(initializer.expression) &&
                     (initializer.expression.escapedText === "window" ||
                         initializer.expression.escapedText === "self" ||
@@ -12108,13 +12447,13 @@
     }
     ts.isLiteralLikeElementAccess = isLiteralLikeElementAccess;
     function isBindableStaticAccessExpression(node, excludeThisKeyword) {
-        return ts.isPropertyAccessExpression(node) && (!excludeThisKeyword && node.expression.kind === 107 || ts.isIdentifier(node.name) && isBindableStaticNameExpression(node.expression, true))
+        return ts.isPropertyAccessExpression(node) && (!excludeThisKeyword && node.expression.kind === 108 || ts.isIdentifier(node.name) && isBindableStaticNameExpression(node.expression, true))
             || isBindableStaticElementAccessExpression(node, excludeThisKeyword);
     }
     ts.isBindableStaticAccessExpression = isBindableStaticAccessExpression;
     function isBindableStaticElementAccessExpression(node, excludeThisKeyword) {
         return isLiteralLikeElementAccess(node)
-            && ((!excludeThisKeyword && node.expression.kind === 107) ||
+            && ((!excludeThisKeyword && node.expression.kind === 108) ||
                 isEntityNameExpression(node.expression) ||
                 isBindableStaticAccessExpression(node.expression, true));
     }
@@ -12144,7 +12483,7 @@
             }
             return 7;
         }
-        if (expr.operatorToken.kind !== 62 || !isAccessExpression(expr.left) || isVoidZero(getRightMostAssignedExpression(expr))) {
+        if (expr.operatorToken.kind !== 63 || !isAccessExpression(expr.left) || isVoidZero(getRightMostAssignedExpression(expr))) {
             return 0;
         }
         if (isBindableStaticNameExpression(expr.left.expression, true) && getElementOrPropertyAccessName(expr.left) === "prototype" && ts.isObjectLiteralExpression(getInitializerOfBinaryExpression(expr))) {
@@ -12180,7 +12519,7 @@
     }
     ts.getElementOrPropertyAccessName = getElementOrPropertyAccessName;
     function getAssignmentDeclarationPropertyAccessKind(lhs) {
-        if (lhs.expression.kind === 107) {
+        if (lhs.expression.kind === 108) {
             return 4;
         }
         else if (isModuleExportsAccessExpression(lhs)) {
@@ -12220,7 +12559,7 @@
     ts.isPrototypePropertyAssignment = isPrototypePropertyAssignment;
     function isSpecialPropertyDeclaration(expr) {
         return isInJSFile(expr) &&
-            expr.parent && expr.parent.kind === 234 &&
+            expr.parent && expr.parent.kind === 236 &&
             (!ts.isElementAccessExpression(expr) || isLiteralLikeElementAccess(expr)) &&
             !!ts.getJSDocTypeTag(expr.parent);
     }
@@ -12240,17 +12579,17 @@
             return false;
         }
         var decl = symbol.valueDeclaration;
-        return decl.kind === 252 || ts.isVariableDeclaration(decl) && decl.initializer && ts.isFunctionLike(decl.initializer);
+        return decl.kind === 254 || ts.isVariableDeclaration(decl) && decl.initializer && ts.isFunctionLike(decl.initializer);
     }
     ts.isFunctionSymbol = isFunctionSymbol;
     function tryGetModuleSpecifierFromDeclaration(node) {
         var _a, _b, _c;
         switch (node.kind) {
-            case 250:
+            case 252:
                 return node.initializer.arguments[0].text;
-            case 262:
+            case 264:
                 return (_a = ts.tryCast(node.moduleSpecifier, ts.isStringLiteralLike)) === null || _a === void 0 ? void 0 : _a.text;
-            case 261:
+            case 263:
                 return (_c = ts.tryCast((_b = ts.tryCast(node.moduleReference, ts.isExternalModuleReference)) === null || _b === void 0 ? void 0 : _b.expression, ts.isStringLiteralLike)) === null || _c === void 0 ? void 0 : _c.text;
             default:
                 ts.Debug.assertNever(node);
@@ -12263,14 +12602,14 @@
     ts.importFromModuleSpecifier = importFromModuleSpecifier;
     function tryGetImportFromModuleSpecifier(node) {
         switch (node.parent.kind) {
-            case 262:
-            case 268:
+            case 264:
+            case 270:
                 return node.parent;
-            case 273:
+            case 275:
                 return node.parent.parent;
-            case 204:
+            case 206:
                 return isImportCall(node.parent) || isRequireCall(node.parent, false) ? node.parent : undefined;
-            case 192:
+            case 194:
                 ts.Debug.assert(ts.isStringLiteral(node));
                 return ts.tryCast(node.parent.parent, ts.isImportTypeNode);
             default:
@@ -12280,16 +12619,16 @@
     ts.tryGetImportFromModuleSpecifier = tryGetImportFromModuleSpecifier;
     function getExternalModuleName(node) {
         switch (node.kind) {
-            case 262:
-            case 268:
+            case 264:
+            case 270:
                 return node.moduleSpecifier;
-            case 261:
-                return node.moduleReference.kind === 273 ? node.moduleReference.expression : undefined;
-            case 196:
+            case 263:
+                return node.moduleReference.kind === 275 ? node.moduleReference.expression : undefined;
+            case 198:
                 return isLiteralImportTypeNode(node) ? node.argument.literal : undefined;
-            case 204:
+            case 206:
                 return node.arguments[0];
-            case 257:
+            case 259:
                 return node.name.kind === 10 ? node.name : undefined;
             default:
                 return ts.Debug.assertNever(node);
@@ -12298,11 +12637,11 @@
     ts.getExternalModuleName = getExternalModuleName;
     function getNamespaceDeclarationNode(node) {
         switch (node.kind) {
-            case 262:
+            case 264:
                 return node.importClause && ts.tryCast(node.importClause.namedBindings, ts.isNamespaceImport);
-            case 261:
+            case 263:
                 return node;
-            case 268:
+            case 270:
                 return node.exportClause && ts.tryCast(node.exportClause, ts.isNamespaceExport);
             default:
                 return ts.Debug.assertNever(node);
@@ -12310,7 +12649,7 @@
     }
     ts.getNamespaceDeclarationNode = getNamespaceDeclarationNode;
     function isDefaultImport(node) {
-        return node.kind === 262 && !!node.importClause && !!node.importClause.name;
+        return node.kind === 264 && !!node.importClause && !!node.importClause.name;
     }
     ts.isDefaultImport = isDefaultImport;
     function forEachImportClauseDeclaration(node, action) {
@@ -12331,13 +12670,13 @@
     function hasQuestionToken(node) {
         if (node) {
             switch (node.kind) {
-                case 161:
+                case 162:
+                case 167:
                 case 166:
+                case 292:
+                case 291:
                 case 165:
-                case 290:
-                case 289:
                 case 164:
-                case 163:
                     return node.questionToken !== undefined;
             }
         }
@@ -12351,7 +12690,7 @@
     }
     ts.isJSDocConstructSignature = isJSDocConstructSignature;
     function isJSDocTypeAlias(node) {
-        return node.kind === 335 || node.kind === 328 || node.kind === 329;
+        return node.kind === 340 || node.kind === 333 || node.kind === 334;
     }
     ts.isJSDocTypeAlias = isJSDocTypeAlias;
     function isTypeAlias(node) {
@@ -12361,7 +12700,7 @@
     function getSourceOfAssignment(node) {
         return ts.isExpressionStatement(node) &&
             ts.isBinaryExpression(node.expression) &&
-            node.expression.operatorToken.kind === 62
+            node.expression.operatorToken.kind === 63
             ? getRightMostAssignedExpression(node.expression)
             : undefined;
     }
@@ -12376,12 +12715,12 @@
     }
     function getSingleInitializerOfVariableStatementOrPropertyDeclaration(node) {
         switch (node.kind) {
-            case 233:
+            case 235:
                 var v = getSingleVariableOfVariableStatement(node);
                 return v && v.initializer;
-            case 164:
+            case 165:
                 return node.initializer;
-            case 289:
+            case 291:
                 return node.initializer;
         }
     }
@@ -12393,7 +12732,7 @@
     function getNestedModuleDeclaration(node) {
         return ts.isModuleDeclaration(node) &&
             node.body &&
-            node.body.kind === 257
+            node.body.kind === 259
             ? node.body
             : undefined;
     }
@@ -12407,11 +12746,11 @@
             if (ts.hasJSDocNodes(node)) {
                 result = ts.append(result, ts.last(node.jsDoc));
             }
-            if (node.kind === 161) {
+            if (node.kind === 162) {
                 result = ts.addRange(result, (noCache ? ts.getJSDocParameterTagsNoCache : ts.getJSDocParameterTags)(node));
                 break;
             }
-            if (node.kind === 160) {
+            if (node.kind === 161) {
                 result = ts.addRange(result, (noCache ? ts.getJSDocTypeParameterTagsNoCache : ts.getJSDocTypeParameterTags)(node));
                 break;
             }
@@ -12422,18 +12761,18 @@
     ts.getJSDocCommentsAndTags = getJSDocCommentsAndTags;
     function getNextJSDocCommentLocation(node) {
         var parent = node.parent;
-        if (parent.kind === 289 ||
-            parent.kind === 267 ||
-            parent.kind === 164 ||
-            parent.kind === 234 && node.kind === 202 ||
-            parent.kind === 243 ||
+        if (parent.kind === 291 ||
+            parent.kind === 269 ||
+            parent.kind === 165 ||
+            parent.kind === 236 && node.kind === 204 ||
+            parent.kind === 245 ||
             getNestedModuleDeclaration(parent) ||
-            ts.isBinaryExpression(node) && node.operatorToken.kind === 62) {
+            ts.isBinaryExpression(node) && node.operatorToken.kind === 63) {
             return parent;
         }
         else if (parent.parent &&
             (getSingleVariableOfVariableStatement(parent.parent) === node ||
-                ts.isBinaryExpression(parent) && parent.operatorToken.kind === 62)) {
+                ts.isBinaryExpression(parent) && parent.operatorToken.kind === 63)) {
             return parent.parent;
         }
         else if (parent.parent && parent.parent.parent &&
@@ -12456,7 +12795,7 @@
         if (!decl) {
             return undefined;
         }
-        var parameter = ts.find(decl.parameters, function (p) { return p.name.kind === 78 && p.name.escapedText === name; });
+        var parameter = ts.find(decl.parameters, function (p) { return p.name.kind === 79 && p.name.escapedText === name; });
         return parameter && parameter.symbol;
     }
     ts.getParameterSymbolFromJSDoc = getParameterSymbolFromJSDoc;
@@ -12505,7 +12844,7 @@
     ts.hasRestParameter = hasRestParameter;
     function isRestParameter(node) {
         var type = ts.isJSDocParameterTag(node) ? (node.typeExpression && node.typeExpression.type) : node.type;
-        return node.dotDotDotToken !== undefined || !!type && type.kind === 310;
+        return node.dotDotDotToken !== undefined || !!type && type.kind === 313;
     }
     ts.isRestParameter = isRestParameter;
     function hasTypeArguments(node) {
@@ -12516,34 +12855,34 @@
         var parent = node.parent;
         while (true) {
             switch (parent.kind) {
-                case 217:
+                case 219:
                     var binaryOperator = parent.operatorToken.kind;
                     return isAssignmentOperator(binaryOperator) && parent.left === node ?
-                        binaryOperator === 62 || isLogicalOrCoalescingAssignmentOperator(binaryOperator) ? 1 : 2 :
+                        binaryOperator === 63 || isLogicalOrCoalescingAssignmentOperator(binaryOperator) ? 1 : 2 :
                         0;
-                case 215:
-                case 216:
+                case 217:
+                case 218:
                     var unaryOperator = parent.operator;
                     return unaryOperator === 45 || unaryOperator === 46 ? 2 : 0;
-                case 239:
-                case 240:
+                case 241:
+                case 242:
                     return parent.initializer === node ? 1 : 0;
-                case 208:
-                case 200:
-                case 221:
-                case 226:
+                case 210:
+                case 202:
+                case 223:
+                case 228:
                     node = parent;
                     break;
-                case 291:
+                case 293:
                     node = parent.parent;
                     break;
-                case 290:
+                case 292:
                     if (parent.name !== node) {
                         return 0;
                     }
                     node = parent.parent;
                     break;
-                case 289:
+                case 291:
                     if (parent.name === node) {
                         return 0;
                     }
@@ -12562,22 +12901,22 @@
     ts.isAssignmentTarget = isAssignmentTarget;
     function isNodeWithPossibleHoistedDeclaration(node) {
         switch (node.kind) {
-            case 231:
             case 233:
-            case 244:
             case 235:
-            case 245:
-            case 259:
-            case 285:
-            case 286:
             case 246:
+            case 237:
+            case 247:
+            case 261:
+            case 287:
+            case 288:
+            case 248:
+            case 240:
+            case 241:
+            case 242:
             case 238:
             case 239:
-            case 240:
-            case 236:
-            case 237:
-            case 248:
-            case 288:
+            case 250:
+            case 290:
                 return true;
         }
         return false;
@@ -12594,16 +12933,16 @@
         return node;
     }
     function walkUpParenthesizedTypes(node) {
-        return walkUp(node, 187);
+        return walkUp(node, 189);
     }
     ts.walkUpParenthesizedTypes = walkUpParenthesizedTypes;
     function walkUpParenthesizedExpressions(node) {
-        return walkUp(node, 208);
+        return walkUp(node, 210);
     }
     ts.walkUpParenthesizedExpressions = walkUpParenthesizedExpressions;
     function walkUpParenthesizedTypesAndGetParentAndChild(node) {
         var child;
-        while (node && node.kind === 187) {
+        while (node && node.kind === 189) {
             child = node;
             node = node.parent;
         }
@@ -12614,18 +12953,12 @@
         return ts.skipOuterExpressions(node, 1);
     }
     ts.skipParentheses = skipParentheses;
-    function skipParenthesesUp(node) {
-        while (node.kind === 208) {
-            node = node.parent;
-        }
-        return node;
-    }
     function isDeleteTarget(node) {
-        if (node.kind !== 202 && node.kind !== 203) {
+        if (node.kind !== 204 && node.kind !== 205) {
             return false;
         }
         node = walkUpParenthesizedExpressions(node.parent);
-        return node && node.kind === 211;
+        return node && node.kind === 213;
     }
     ts.isDeleteTarget = isDeleteTarget;
     function isNodeDescendantOf(node, ancestor) {
@@ -12649,7 +12982,7 @@
             case 8:
                 if (ts.isComputedPropertyName(parent))
                     return parent.parent;
-            case 78:
+            case 79:
                 if (ts.isDeclaration(parent)) {
                     return parent.name === name ? parent : undefined;
                 }
@@ -12666,7 +12999,7 @@
                         ? binExp
                         : undefined;
                 }
-            case 79:
+            case 80:
                 return ts.isDeclaration(parent) && parent.name === name ? parent : undefined;
             default:
                 return undefined;
@@ -12675,63 +13008,63 @@
     ts.getDeclarationFromName = getDeclarationFromName;
     function isLiteralComputedPropertyDeclarationName(node) {
         return isStringOrNumericLiteralLike(node) &&
-            node.parent.kind === 159 &&
+            node.parent.kind === 160 &&
             ts.isDeclaration(node.parent.parent);
     }
     ts.isLiteralComputedPropertyDeclarationName = isLiteralComputedPropertyDeclarationName;
     function isIdentifierName(node) {
         var parent = node.parent;
         switch (parent.kind) {
-            case 164:
-            case 163:
-            case 166:
             case 165:
-            case 168:
-            case 169:
-            case 292:
-            case 289:
-            case 202:
+            case 164:
+            case 167:
+            case 166:
+            case 170:
+            case 171:
+            case 294:
+            case 291:
+            case 204:
                 return parent.name === node;
-            case 158:
+            case 159:
                 return parent.right === node;
-            case 199:
-            case 266:
+            case 201:
+            case 268:
                 return parent.propertyName === node;
-            case 271:
-            case 281:
+            case 273:
+            case 283:
                 return true;
         }
         return false;
     }
     ts.isIdentifierName = isIdentifierName;
     function isAliasSymbolDeclaration(node) {
-        return node.kind === 261 ||
-            node.kind === 260 ||
-            node.kind === 263 && !!node.name ||
-            node.kind === 264 ||
-            node.kind === 270 ||
+        return node.kind === 263 ||
+            node.kind === 262 ||
+            node.kind === 265 && !!node.name ||
             node.kind === 266 ||
-            node.kind === 271 ||
-            node.kind === 267 && exportAssignmentIsAlias(node) ||
+            node.kind === 272 ||
+            node.kind === 268 ||
+            node.kind === 273 ||
+            node.kind === 269 && exportAssignmentIsAlias(node) ||
             ts.isBinaryExpression(node) && getAssignmentDeclarationKind(node) === 2 && exportAssignmentIsAlias(node) ||
-            ts.isPropertyAccessExpression(node) && ts.isBinaryExpression(node.parent) && node.parent.left === node && node.parent.operatorToken.kind === 62 && isAliasableExpression(node.parent.right) ||
-            node.kind === 290 ||
-            node.kind === 289 && isAliasableExpression(node.initializer);
+            ts.isPropertyAccessExpression(node) && ts.isBinaryExpression(node.parent) && node.parent.left === node && node.parent.operatorToken.kind === 63 && isAliasableExpression(node.parent.right) ||
+            node.kind === 292 ||
+            node.kind === 291 && isAliasableExpression(node.initializer);
     }
     ts.isAliasSymbolDeclaration = isAliasSymbolDeclaration;
     function getAliasDeclarationFromName(node) {
         switch (node.parent.kind) {
-            case 263:
+            case 265:
+            case 268:
             case 266:
-            case 264:
-            case 271:
-            case 267:
-            case 261:
+            case 273:
+            case 269:
+            case 263:
                 return node.parent;
-            case 158:
+            case 159:
                 do {
                     node = node.parent;
-                } while (node.parent.kind === 158);
+                } while (node.parent.kind === 159);
                 return getAliasDeclarationFromName(node);
         }
     }
@@ -12750,7 +13083,7 @@
     }
     ts.getExportAssignmentExpression = getExportAssignmentExpression;
     function getPropertyAssignmentAliasLikeExpression(node) {
-        return node.kind === 290 ? node.name : node.kind === 289 ? node.initializer :
+        return node.kind === 292 ? node.name : node.kind === 291 ? node.initializer :
             node.parent.right;
     }
     ts.getPropertyAssignmentAliasLikeExpression = getPropertyAssignmentAliasLikeExpression;
@@ -12766,7 +13099,7 @@
     }
     ts.getEffectiveBaseTypeNode = getEffectiveBaseTypeNode;
     function getClassExtendsHeritageElement(node) {
-        var heritageClause = getHeritageClause(node.heritageClauses, 93);
+        var heritageClause = getHeritageClause(node.heritageClauses, 94);
         return heritageClause && heritageClause.types.length > 0 ? heritageClause.types[0] : undefined;
     }
     ts.getClassExtendsHeritageElement = getClassExtendsHeritageElement;
@@ -12775,7 +13108,7 @@
             return ts.getJSDocImplementsTags(node).map(function (n) { return n.class; });
         }
         else {
-            var heritageClause = getHeritageClause(node.heritageClauses, 116);
+            var heritageClause = getHeritageClause(node.heritageClauses, 117);
             return heritageClause === null || heritageClause === void 0 ? void 0 : heritageClause.types;
         }
     }
@@ -12787,7 +13120,7 @@
     }
     ts.getAllSuperTypeNodes = getAllSuperTypeNodes;
     function getInterfaceBaseTypeNodes(node) {
-        var heritageClause = getHeritageClause(node.heritageClauses, 93);
+        var heritageClause = getHeritageClause(node.heritageClauses, 94);
         return heritageClause ? heritageClause.types : undefined;
     }
     ts.getInterfaceBaseTypeNodes = getInterfaceBaseTypeNodes;
@@ -12814,11 +13147,11 @@
     }
     ts.getAncestor = getAncestor;
     function isKeyword(token) {
-        return 80 <= token && token <= 157;
+        return 81 <= token && token <= 158;
     }
     ts.isKeyword = isKeyword;
     function isContextualKeyword(token) {
-        return 125 <= token && token <= 157;
+        return 126 <= token && token <= 158;
     }
     ts.isContextualKeyword = isContextualKeyword;
     function isNonContextualKeyword(token) {
@@ -12826,7 +13159,7 @@
     }
     ts.isNonContextualKeyword = isNonContextualKeyword;
     function isFutureReservedKeyword(token) {
-        return 116 <= token && token <= 124;
+        return 117 <= token && token <= 125;
     }
     ts.isFutureReservedKeyword = isFutureReservedKeyword;
     function isStringANonContextualKeyword(name) {
@@ -12854,13 +13187,13 @@
         }
         var flags = 0;
         switch (node.kind) {
-            case 252:
-            case 209:
-            case 166:
+            case 254:
+            case 211:
+            case 167:
                 if (node.asteriskToken) {
                     flags |= 1;
                 }
-            case 210:
+            case 212:
                 if (hasSyntacticModifier(node, 256)) {
                     flags |= 2;
                 }
@@ -12874,10 +13207,10 @@
     ts.getFunctionFlags = getFunctionFlags;
     function isAsyncFunction(node) {
         switch (node.kind) {
-            case 252:
-            case 209:
-            case 210:
-            case 166:
+            case 254:
+            case 211:
+            case 212:
+            case 167:
                 return node.body !== undefined
                     && node.asteriskToken === undefined
                     && hasSyntacticModifier(node, 256);
@@ -12899,7 +13232,7 @@
     }
     ts.hasDynamicName = hasDynamicName;
     function isDynamicName(name) {
-        if (!(name.kind === 159 || name.kind === 203)) {
+        if (!(name.kind === 160 || name.kind === 205)) {
             return false;
         }
         var expr = ts.isElementAccessExpression(name) ? skipParentheses(name.argumentExpression) : name.expression;
@@ -12909,13 +13242,13 @@
     ts.isDynamicName = isDynamicName;
     function getPropertyNameForPropertyNameNode(name) {
         switch (name.kind) {
-            case 78:
             case 79:
+            case 80:
                 return name.escapedText;
             case 10:
             case 8:
                 return ts.escapeLeadingUnderscores(name.text);
-            case 159:
+            case 160:
                 var nameExpression = name.expression;
                 if (isStringOrNumericLiteralLike(nameExpression)) {
                     return ts.escapeLeadingUnderscores(nameExpression.text);
@@ -12934,7 +13267,7 @@
     ts.getPropertyNameForPropertyNameNode = getPropertyNameForPropertyNameNode;
     function isPropertyNameLiteral(node) {
         switch (node.kind) {
-            case 78:
+            case 79:
             case 10:
             case 14:
             case 8:
@@ -12964,8 +13297,12 @@
         return ts.startsWith(symbol.escapedName, "__@");
     }
     ts.isKnownSymbol = isKnownSymbol;
+    function isPrivateIdentifierSymbol(symbol) {
+        return ts.startsWith(symbol.escapedName, "__#");
+    }
+    ts.isPrivateIdentifierSymbol = isPrivateIdentifierSymbol;
     function isESSymbolIdentifier(node) {
-        return node.kind === 78 && node.escapedText === "Symbol";
+        return node.kind === 79 && node.escapedText === "Symbol";
     }
     ts.isESSymbolIdentifier = isESSymbolIdentifier;
     function isPushOrUnshiftIdentifier(node) {
@@ -12974,11 +13311,11 @@
     ts.isPushOrUnshiftIdentifier = isPushOrUnshiftIdentifier;
     function isParameterDeclaration(node) {
         var root = getRootDeclaration(node);
-        return root.kind === 161;
+        return root.kind === 162;
     }
     ts.isParameterDeclaration = isParameterDeclaration;
     function getRootDeclaration(node) {
-        while (node.kind === 199) {
+        while (node.kind === 201) {
             node = node.parent.parent;
         }
         return node;
@@ -12986,15 +13323,15 @@
     ts.getRootDeclaration = getRootDeclaration;
     function nodeStartsNewLexicalEnvironment(node) {
         var kind = node.kind;
-        return kind === 167
-            || kind === 209
-            || kind === 252
-            || kind === 210
-            || kind === 166
-            || kind === 168
-            || kind === 169
-            || kind === 257
-            || kind === 298;
+        return kind === 169
+            || kind === 211
+            || kind === 254
+            || kind === 212
+            || kind === 167
+            || kind === 170
+            || kind === 171
+            || kind === 259
+            || kind === 300;
     }
     ts.nodeStartsNewLexicalEnvironment = nodeStartsNewLexicalEnvironment;
     function nodeIsSynthesized(range) {
@@ -13008,41 +13345,41 @@
     ts.getOriginalSourceFile = getOriginalSourceFile;
     function getExpressionAssociativity(expression) {
         var operator = getOperator(expression);
-        var hasArguments = expression.kind === 205 && expression.arguments !== undefined;
+        var hasArguments = expression.kind === 207 && expression.arguments !== undefined;
         return getOperatorAssociativity(expression.kind, operator, hasArguments);
     }
     ts.getExpressionAssociativity = getExpressionAssociativity;
     function getOperatorAssociativity(kind, operator, hasArguments) {
         switch (kind) {
-            case 205:
+            case 207:
                 return hasArguments ? 0 : 1;
-            case 215:
-            case 212:
-            case 213:
-            case 211:
-            case 214:
-            case 218:
-            case 220:
-                return 1;
             case 217:
+            case 214:
+            case 215:
+            case 213:
+            case 216:
+            case 220:
+            case 222:
+                return 1;
+            case 219:
                 switch (operator) {
                     case 42:
-                    case 62:
                     case 63:
                     case 64:
-                    case 66:
                     case 65:
                     case 67:
+                    case 66:
                     case 68:
                     case 69:
                     case 70:
                     case 71:
                     case 72:
-                    case 77:
                     case 73:
+                    case 78:
                     case 74:
                     case 75:
                     case 76:
+                    case 77:
                         return 1;
                 }
         }
@@ -13051,15 +13388,15 @@
     ts.getOperatorAssociativity = getOperatorAssociativity;
     function getExpressionPrecedence(expression) {
         var operator = getOperator(expression);
-        var hasArguments = expression.kind === 205 && expression.arguments !== undefined;
+        var hasArguments = expression.kind === 207 && expression.arguments !== undefined;
         return getOperatorPrecedence(expression.kind, operator, hasArguments);
     }
     ts.getExpressionPrecedence = getExpressionPrecedence;
     function getOperator(expression) {
-        if (expression.kind === 217) {
+        if (expression.kind === 219) {
             return expression.operatorToken.kind;
         }
-        else if (expression.kind === 215 || expression.kind === 216) {
+        else if (expression.kind === 217 || expression.kind === 218) {
             return expression.operator;
         }
         else {
@@ -13069,81 +13406,81 @@
     ts.getOperator = getOperator;
     function getOperatorPrecedence(nodeKind, operatorKind, hasArguments) {
         switch (nodeKind) {
-            case 341:
+            case 346:
                 return 0;
-            case 221:
+            case 223:
                 return 1;
-            case 220:
+            case 222:
                 return 2;
-            case 218:
+            case 220:
                 return 4;
-            case 217:
+            case 219:
                 switch (operatorKind) {
                     case 27:
                         return 0;
-                    case 62:
                     case 63:
                     case 64:
-                    case 66:
                     case 65:
                     case 67:
+                    case 66:
                     case 68:
                     case 69:
                     case 70:
                     case 71:
                     case 72:
-                    case 77:
                     case 73:
+                    case 78:
                     case 74:
                     case 75:
                     case 76:
+                    case 77:
                         return 3;
                     default:
                         return getBinaryOperatorPrecedence(operatorKind);
                 }
-            case 207:
-            case 226:
-            case 215:
-            case 212:
-            case 213:
-            case 211:
+            case 209:
+            case 228:
+            case 217:
             case 214:
-                return 16;
+            case 215:
+            case 213:
             case 216:
+                return 16;
+            case 218:
                 return 17;
-            case 204:
-                return 18;
-            case 205:
-                return hasArguments ? 19 : 18;
             case 206:
-            case 202:
-            case 203:
-            case 227:
+                return 18;
+            case 207:
+                return hasArguments ? 19 : 18;
+            case 208:
+            case 204:
+            case 205:
+            case 229:
                 return 19;
-            case 225:
+            case 227:
                 return 11;
-            case 107:
-            case 105:
-            case 78:
-            case 103:
-            case 109:
-            case 94:
+            case 108:
+            case 106:
+            case 79:
+            case 104:
+            case 110:
+            case 95:
             case 8:
             case 9:
             case 10:
-            case 200:
-            case 201:
-            case 209:
-            case 210:
-            case 222:
+            case 202:
+            case 203:
+            case 211:
+            case 212:
+            case 224:
             case 13:
             case 14:
-            case 219:
-            case 208:
-            case 223:
-            case 274:
-            case 275:
-            case 278:
+            case 221:
+            case 210:
+            case 225:
+            case 276:
+            case 277:
+            case 280:
                 return 20;
             default:
                 return -1;
@@ -13173,9 +13510,9 @@
             case 31:
             case 32:
             case 33:
+            case 102:
             case 101:
-            case 100:
-            case 126:
+            case 127:
                 return 11;
             case 47:
             case 48:
@@ -13197,7 +13534,7 @@
     function getSemanticJsxChildren(children) {
         return ts.filter(children, function (i) {
             switch (i.kind) {
-                case 284:
+                case 286:
                     return !!i.expression;
                 case 11:
                     return !i.containsOnlyTriviaWhiteSpaces;
@@ -13283,7 +13620,7 @@
     ts.hasInvalidEscape = hasInvalidEscape;
     var doubleQuoteEscapedCharsRegExp = /[\\\"\u0000-\u001f\t\v\f\b\r\n\u2028\u2029\u0085]/g;
     var singleQuoteEscapedCharsRegExp = /[\\\'\u0000-\u001f\t\v\f\b\r\n\u2028\u2029\u0085]/g;
-    var backtickQuoteEscapedCharsRegExp = /[\\`]/g;
+    var backtickQuoteEscapedCharsRegExp = /\r\n|[\\\`\u0000-\u001f\t\v\f\b\r\u2028\u2029\u0085]/g;
     var escapedCharsMap = new ts.Map(ts.getEntries({
         "\t": "\\t",
         "\v": "\\v",
@@ -13297,7 +13634,8 @@
         "\`": "\\\`",
         "\u2028": "\\u2028",
         "\u2029": "\\u2029",
-        "\u0085": "\\u0085"
+        "\u0085": "\\u0085",
+        "\r\n": "\\r\\n",
     }));
     function encodeUtf16EscapeSequence(charCode) {
         var hexCharCode = charCode.toString(16).toUpperCase();
@@ -13472,7 +13810,7 @@
             reportInaccessibleThisError: ts.noop,
             reportPrivateInBaseOfClassExpression: ts.noop,
             reportInaccessibleUniqueSymbolError: ts.noop,
-            trackSymbol: ts.noop,
+            trackSymbol: function () { return false; },
             writeKeyword: write,
             writeOperator: write,
             writeParameter: write,
@@ -13709,11 +14047,21 @@
     }
     ts.parameterIsThisKeyword = parameterIsThisKeyword;
     function isThisIdentifier(node) {
-        return !!node && node.kind === 78 && identifierIsThisKeyword(node);
+        return !!node && node.kind === 79 && identifierIsThisKeyword(node);
     }
     ts.isThisIdentifier = isThisIdentifier;
+    function isThisInTypeQuery(node) {
+        if (!isThisIdentifier(node)) {
+            return false;
+        }
+        while (ts.isQualifiedName(node.parent) && node.parent.left === node) {
+            node = node.parent;
+        }
+        return node.parent.kind === 179;
+    }
+    ts.isThisInTypeQuery = isThisInTypeQuery;
     function identifierIsThisKeyword(id) {
-        return id.originalKeywordKind === 107;
+        return id.originalKeywordKind === 108;
     }
     ts.identifierIsThisKeyword = identifierIsThisKeyword;
     function getAllAccessorDeclarations(declarations, accessor) {
@@ -13723,10 +14071,10 @@
         var setAccessor;
         if (hasDynamicName(accessor)) {
             firstAccessor = accessor;
-            if (accessor.kind === 168) {
+            if (accessor.kind === 170) {
                 getAccessor = accessor;
             }
-            else if (accessor.kind === 169) {
+            else if (accessor.kind === 171) {
                 setAccessor = accessor;
             }
             else {
@@ -13736,7 +14084,7 @@
         else {
             ts.forEach(declarations, function (member) {
                 if (ts.isAccessor(member)
-                    && hasSyntacticModifier(member, 32) === hasSyntacticModifier(accessor, 32)) {
+                    && isStatic(member) === isStatic(accessor)) {
                     var memberName = getPropertyNameForPropertyNameNode(member.name);
                     var accessorName = getPropertyNameForPropertyNameNode(accessor.name);
                     if (memberName === accessorName) {
@@ -13746,10 +14094,10 @@
                         else if (!secondAccessor) {
                             secondAccessor = member;
                         }
-                        if (member.kind === 168 && !getAccessor) {
+                        if (member.kind === 170 && !getAccessor) {
                             getAccessor = member;
                         }
-                        if (member.kind === 169 && !setAccessor) {
+                        if (member.kind === 171 && !setAccessor) {
                             setAccessor = member;
                         }
                     }
@@ -13788,7 +14136,7 @@
     }
     ts.getJSDocTypeParameterDeclarations = getJSDocTypeParameterDeclarations;
     function isNonTypeAliasTemplate(tag) {
-        return ts.isJSDocTemplateTag(tag) && !(tag.parent.kind === 312 && tag.parent.tags.some(isJSDocTypeAlias));
+        return ts.isJSDocTemplateTag(tag) && !(tag.parent.kind === 315 && tag.parent.tags.some(isJSDocTypeAlias));
     }
     function getEffectiveSetAccessorTypeAnnotationNode(node) {
         var parameter = getSetAccessorValueParameter(node);
@@ -13920,7 +14268,7 @@
     ts.writeCommentRange = writeCommentRange;
     function writeTrimmedCurrentLine(text, commentEnd, writer, newLine, pos, nextLineStart) {
         var end = Math.min(commentEnd, nextLineStart - 1);
-        var currentLineText = text.substring(pos, end).replace(/^\s+|\s+$/g, "");
+        var currentLineText = ts.trimString(text.substring(pos, end));
         if (currentLineText) {
             writer.writeComment(currentLineText);
             if (end !== commentEnd) {
@@ -13959,6 +14307,10 @@
         return !!getSelectedSyntacticModifierFlags(node, flags);
     }
     ts.hasSyntacticModifier = hasSyntacticModifier;
+    function isStatic(node) {
+        return ts.isClassElement(node) && hasStaticModifier(node) || ts.isClassStaticBlockDeclaration(node);
+    }
+    ts.isStatic = isStatic;
     function hasStaticModifier(node) {
         return hasSyntacticModifier(node, 32);
     }
@@ -13988,7 +14340,7 @@
     }
     ts.getSelectedSyntacticModifierFlags = getSelectedSyntacticModifierFlags;
     function getModifierFlagsWorker(node, includeJSDoc, alwaysIncludeJSDoc) {
-        if (node.kind >= 0 && node.kind <= 157) {
+        if (node.kind >= 0 && node.kind <= 158) {
             return 0;
         }
         if (!(node.modifierFlagsCache & 536870912)) {
@@ -14037,7 +14389,7 @@
     ts.getEffectiveModifierFlagsNoCache = getEffectiveModifierFlagsNoCache;
     function getSyntacticModifierFlagsNoCache(node) {
         var flags = modifiersToFlags(node.modifiers);
-        if (node.flags & 4 || (node.kind === 78 && node.isInJSDocNamespace)) {
+        if (node.flags & 4 || (node.kind === 79 && node.isInJSDocNamespace)) {
             flags |= 1;
         }
         return flags;
@@ -14056,18 +14408,18 @@
     ts.modifiersToFlags = modifiersToFlags;
     function modifierToFlag(token) {
         switch (token) {
-            case 123: return 32;
-            case 122: return 4;
-            case 121: return 16;
-            case 120: return 8;
-            case 125: return 128;
-            case 92: return 1;
-            case 133: return 2;
-            case 84: return 2048;
-            case 87: return 512;
-            case 129: return 256;
-            case 142: return 64;
-            case 156: return 16384;
+            case 124: return 32;
+            case 123: return 4;
+            case 122: return 16;
+            case 121: return 8;
+            case 126: return 128;
+            case 93: return 1;
+            case 134: return 2;
+            case 85: return 2048;
+            case 88: return 512;
+            case 130: return 256;
+            case 143: return 64;
+            case 157: return 16384;
         }
         return 0;
     }
@@ -14083,9 +14435,9 @@
     }
     ts.isLogicalOperator = isLogicalOperator;
     function isLogicalOrCoalescingAssignmentOperator(token) {
-        return token === 74
-            || token === 75
-            || token === 76;
+        return token === 75
+            || token === 76
+            || token === 77;
     }
     ts.isLogicalOrCoalescingAssignmentOperator = isLogicalOrCoalescingAssignmentOperator;
     function isLogicalOrCoalescingAssignmentExpression(expr) {
@@ -14093,7 +14445,7 @@
     }
     ts.isLogicalOrCoalescingAssignmentExpression = isLogicalOrCoalescingAssignmentExpression;
     function isAssignmentOperator(token) {
-        return token >= 62 && token <= 77;
+        return token >= 63 && token <= 78;
     }
     ts.isAssignmentOperator = isAssignmentOperator;
     function tryGetClassExtendingExpressionWithTypeArguments(node) {
@@ -14105,14 +14457,14 @@
         return ts.isExpressionWithTypeArguments(node)
             && ts.isHeritageClause(node.parent)
             && ts.isClassLike(node.parent.parent)
-            ? { class: node.parent.parent, isImplements: node.parent.token === 116 }
+            ? { class: node.parent.parent, isImplements: node.parent.token === 117 }
             : undefined;
     }
     ts.tryGetClassImplementingOrExtendingExpressionWithTypeArguments = tryGetClassImplementingOrExtendingExpressionWithTypeArguments;
     function isAssignmentExpression(node, excludeCompoundAssignment) {
         return ts.isBinaryExpression(node)
             && (excludeCompoundAssignment
-                ? node.operatorToken.kind === 62
+                ? node.operatorToken.kind === 63
                 : isAssignmentOperator(node.operatorToken.kind))
             && ts.isLeftHandSideExpression(node.left);
     }
@@ -14124,8 +14476,8 @@
     function isDestructuringAssignment(node) {
         if (isAssignmentExpression(node, true)) {
             var kind = node.left.kind;
-            return kind === 201
-                || kind === 200;
+            return kind === 203
+                || kind === 202;
         }
         return false;
     }
@@ -14135,33 +14487,33 @@
     }
     ts.isExpressionWithTypeArgumentsInClassExtendsClause = isExpressionWithTypeArgumentsInClassExtendsClause;
     function isEntityNameExpression(node) {
-        return node.kind === 78 || isPropertyAccessEntityNameExpression(node);
+        return node.kind === 79 || isPropertyAccessEntityNameExpression(node);
     }
     ts.isEntityNameExpression = isEntityNameExpression;
     function getFirstIdentifier(node) {
         switch (node.kind) {
-            case 78:
+            case 79:
                 return node;
-            case 158:
+            case 159:
                 do {
                     node = node.left;
-                } while (node.kind !== 78);
+                } while (node.kind !== 79);
                 return node;
-            case 202:
+            case 204:
                 do {
                     node = node.expression;
-                } while (node.kind !== 78);
+                } while (node.kind !== 79);
                 return node;
         }
     }
     ts.getFirstIdentifier = getFirstIdentifier;
     function isDottedName(node) {
-        return node.kind === 78
-            || node.kind === 107
-            || node.kind === 105
-            || node.kind === 227
-            || node.kind === 202 && isDottedName(node.expression)
-            || node.kind === 208 && isDottedName(node.expression);
+        return node.kind === 79
+            || node.kind === 108
+            || node.kind === 106
+            || node.kind === 229
+            || node.kind === 204 && isDottedName(node.expression)
+            || node.kind === 210 && isDottedName(node.expression);
     }
     ts.isDottedName = isDottedName;
     function isPropertyAccessEntityNameExpression(node) {
@@ -14192,17 +14544,23 @@
     }
     ts.isPrototypeAccess = isPrototypeAccess;
     function isRightSideOfQualifiedNameOrPropertyAccess(node) {
-        return (node.parent.kind === 158 && node.parent.right === node) ||
-            (node.parent.kind === 202 && node.parent.name === node);
+        return (node.parent.kind === 159 && node.parent.right === node) ||
+            (node.parent.kind === 204 && node.parent.name === node);
     }
     ts.isRightSideOfQualifiedNameOrPropertyAccess = isRightSideOfQualifiedNameOrPropertyAccess;
+    function isRightSideOfQualifiedNameOrPropertyAccessOrJSDocMemberName(node) {
+        return ts.isQualifiedName(node.parent) && node.parent.right === node
+            || ts.isPropertyAccessExpression(node.parent) && node.parent.name === node
+            || ts.isJSDocMemberName(node.parent) && node.parent.right === node;
+    }
+    ts.isRightSideOfQualifiedNameOrPropertyAccessOrJSDocMemberName = isRightSideOfQualifiedNameOrPropertyAccessOrJSDocMemberName;
     function isEmptyObjectLiteral(expression) {
-        return expression.kind === 201 &&
+        return expression.kind === 203 &&
             expression.properties.length === 0;
     }
     ts.isEmptyObjectLiteral = isEmptyObjectLiteral;
     function isEmptyArrayLiteral(expression) {
-        return expression.kind === 200 &&
+        return expression.kind === 202 &&
             expression.elements.length === 0;
     }
     ts.isEmptyArrayLiteral = isEmptyArrayLiteral;
@@ -14474,8 +14832,8 @@
         var parseNode = ts.getParseTreeNode(node);
         if (parseNode) {
             switch (parseNode.parent.kind) {
-                case 256:
-                case 257:
+                case 258:
+                case 259:
                     return parseNode === parseNode.parent.name;
             }
         }
@@ -14504,7 +14862,7 @@
     function getDeclarationModifierFlagsFromSymbol(s, isWrite) {
         if (isWrite === void 0) { isWrite = false; }
         if (s.valueDeclaration) {
-            var declaration = (isWrite && s.declarations && ts.find(s.declarations, function (d) { return d.kind === 169; })) || s.valueDeclaration;
+            var declaration = (isWrite && s.declarations && ts.find(s.declarations, function (d) { return d.kind === 171; })) || s.valueDeclaration;
             var flags = ts.getCombinedModifierFlags(declaration);
             return s.parent && s.parent.flags & 32 ? flags : flags & ~28;
         }
@@ -14543,32 +14901,32 @@
         if (!parent)
             return 0;
         switch (parent.kind) {
-            case 208:
+            case 210:
                 return accessKind(parent);
-            case 216:
-            case 215:
+            case 218:
+            case 217:
                 var operator = parent.operator;
                 return operator === 45 || operator === 46 ? writeOrReadWrite() : 0;
-            case 217:
+            case 219:
                 var _a = parent, left = _a.left, operatorToken = _a.operatorToken;
                 return left === node && isAssignmentOperator(operatorToken.kind) ?
-                    operatorToken.kind === 62 ? 1 : writeOrReadWrite()
+                    operatorToken.kind === 63 ? 1 : writeOrReadWrite()
                     : 0;
-            case 202:
+            case 204:
                 return parent.name !== node ? 0 : accessKind(parent);
-            case 289: {
+            case 291: {
                 var parentAccess = accessKind(parent.parent);
                 return node === parent.name ? reverseAccessKind(parentAccess) : parentAccess;
             }
-            case 290:
+            case 292:
                 return node === parent.objectAssignmentInitializer ? 0 : accessKind(parent.parent);
-            case 200:
+            case 202:
                 return accessKind(parent);
             default:
                 return 0;
         }
         function writeOrReadWrite() {
-            return parent.parent && skipParenthesesUp(parent.parent).kind === 234 ? 1 : 2;
+            return parent.parent && walkUpParenthesizedExpressions(parent.parent).kind === 236 ? 1 : 2;
         }
     }
     function reverseAccessKind(a) {
@@ -14695,37 +15053,37 @@
     }
     ts.isObjectTypeDeclaration = isObjectTypeDeclaration;
     function isTypeNodeKind(kind) {
-        return (kind >= 173 && kind <= 196)
-            || kind === 128
-            || kind === 152
-            || kind === 144
-            || kind === 155
+        return (kind >= 175 && kind <= 198)
+            || kind === 129
+            || kind === 153
             || kind === 145
-            || kind === 131
-            || kind === 147
+            || kind === 156
+            || kind === 146
+            || kind === 132
             || kind === 148
-            || kind === 113
-            || kind === 150
-            || kind === 141
-            || kind === 224
-            || kind === 304
-            || kind === 305
-            || kind === 306
+            || kind === 149
+            || kind === 114
+            || kind === 151
+            || kind === 142
+            || kind === 226
             || kind === 307
             || kind === 308
             || kind === 309
-            || kind === 310;
+            || kind === 310
+            || kind === 311
+            || kind === 312
+            || kind === 313;
     }
     ts.isTypeNodeKind = isTypeNodeKind;
     function isAccessExpression(node) {
-        return node.kind === 202 || node.kind === 203;
+        return node.kind === 204 || node.kind === 205;
     }
     ts.isAccessExpression = isAccessExpression;
     function getNameOfAccessExpression(node) {
-        if (node.kind === 202) {
+        if (node.kind === 204) {
             return node.name;
         }
-        ts.Debug.assert(node.kind === 203);
+        ts.Debug.assert(node.kind === 205);
         return node.argumentExpression;
     }
     ts.getNameOfAccessExpression = getNameOfAccessExpression;
@@ -14740,7 +15098,7 @@
     }
     ts.isBundleFileTextLike = isBundleFileTextLike;
     function isNamedImportsOrExports(node) {
-        return node.kind === 265 || node.kind === 269;
+        return node.kind === 267 || node.kind === 271;
     }
     ts.isNamedImportsOrExports = isNamedImportsOrExports;
     function getLeftmostAccessExpression(expr) {
@@ -14753,27 +15111,27 @@
     function getLeftmostExpression(node, stopAtCallExpressions) {
         while (true) {
             switch (node.kind) {
-                case 216:
+                case 218:
                     node = node.operand;
                     continue;
-                case 217:
+                case 219:
                     node = node.left;
                     continue;
-                case 218:
+                case 220:
                     node = node.condition;
                     continue;
-                case 206:
+                case 208:
                     node = node.tag;
                     continue;
-                case 204:
+                case 206:
                     if (stopAtCallExpressions) {
                         return node;
                     }
-                case 225:
-                case 203:
-                case 202:
-                case 226:
-                case 340:
+                case 227:
+                case 205:
+                case 204:
+                case 228:
+                case 345:
                     node = node.expression;
                     continue;
             }
@@ -15154,13 +15512,11 @@
     }
     ts.getUseDefineForClassFields = getUseDefineForClassFields;
     function compilerOptionsAffectSemanticDiagnostics(newOptions, oldOptions) {
-        return oldOptions !== newOptions &&
-            ts.semanticDiagnosticsOptionDeclarations.some(function (option) { return !isJsonEqual(getCompilerOptionValue(oldOptions, option), getCompilerOptionValue(newOptions, option)); });
+        return optionsHaveChanges(oldOptions, newOptions, ts.semanticDiagnosticsOptionDeclarations);
     }
     ts.compilerOptionsAffectSemanticDiagnostics = compilerOptionsAffectSemanticDiagnostics;
     function compilerOptionsAffectEmit(newOptions, oldOptions) {
-        return oldOptions !== newOptions &&
-            ts.affectsEmitOptionDeclarations.some(function (option) { return !isJsonEqual(getCompilerOptionValue(oldOptions, option), getCompilerOptionValue(newOptions, option)); });
+        return optionsHaveChanges(oldOptions, newOptions, ts.affectsEmitOptionDeclarations);
     }
     ts.compilerOptionsAffectEmit = compilerOptionsAffectEmit;
     function getCompilerOptionValue(options, option) {
@@ -15206,6 +15562,7 @@
         var symlinkedDirectories;
         var symlinkedDirectoriesByRealpath;
         var symlinkedFiles;
+        var hasProcessedResolutions = false;
         return {
             getSymlinkedFiles: function () { return symlinkedFiles; },
             getSymlinkedDirectories: function () { return symlinkedDirectories; },
@@ -15231,30 +15588,31 @@
                     });
                 }
             },
+            setSymlinksFromResolutions: function (files, typeReferenceDirectives) {
+                var _this = this;
+                var _a;
+                ts.Debug.assert(!hasProcessedResolutions);
+                hasProcessedResolutions = true;
+                for (var _i = 0, files_1 = files; _i < files_1.length; _i++) {
+                    var file = files_1[_i];
+                    (_a = file.resolvedModules) === null || _a === void 0 ? void 0 : _a.forEach(function (resolution) { return processResolution(_this, resolution); });
+                }
+                typeReferenceDirectives === null || typeReferenceDirectives === void 0 ? void 0 : typeReferenceDirectives.forEach(function (resolution) { return processResolution(_this, resolution); });
+            },
+            hasProcessedResolutions: function () { return hasProcessedResolutions; },
         };
-    }
-    ts.createSymlinkCache = createSymlinkCache;
-    function discoverProbableSymlinks(files, getCanonicalFileName, cwd) {
-        var cache = createSymlinkCache(cwd, getCanonicalFileName);
-        var symlinks = ts.flatMap(files, function (sf) {
-            var pairs = sf.resolvedModules && ts.arrayFrom(ts.mapDefinedIterator(sf.resolvedModules.values(), function (res) {
-                return (res === null || res === void 0 ? void 0 : res.originalPath) ? [res.resolvedFileName, res.originalPath] : undefined;
-            }));
-            return ts.concatenate(pairs, sf.resolvedTypeReferenceDirectiveNames && ts.arrayFrom(ts.mapDefinedIterator(sf.resolvedTypeReferenceDirectiveNames.values(), function (res) {
-                return (res === null || res === void 0 ? void 0 : res.originalPath) && res.resolvedFileName ? [res.resolvedFileName, res.originalPath] : undefined;
-            })));
-        });
-        for (var _i = 0, symlinks_1 = symlinks; _i < symlinks_1.length; _i++) {
-            var _a = symlinks_1[_i], resolvedPath = _a[0], originalPath = _a[1];
-            cache.setSymlinkedFile(ts.toPath(originalPath, cwd, getCanonicalFileName), resolvedPath);
-            var _b = guessDirectorySymlink(resolvedPath, originalPath, cwd, getCanonicalFileName) || ts.emptyArray, commonResolved = _b[0], commonOriginal = _b[1];
+        function processResolution(cache, resolution) {
+            if (!resolution || !resolution.originalPath || !resolution.resolvedFileName)
+                return;
+            var resolvedFileName = resolution.resolvedFileName, originalPath = resolution.originalPath;
+            cache.setSymlinkedFile(ts.toPath(originalPath, cwd, getCanonicalFileName), resolvedFileName);
+            var _a = guessDirectorySymlink(resolvedFileName, originalPath, cwd, getCanonicalFileName) || ts.emptyArray, commonResolved = _a[0], commonOriginal = _a[1];
             if (commonResolved && commonOriginal) {
                 cache.setSymlinkedDirectory(commonOriginal, { real: commonResolved, realPath: ts.toPath(commonResolved, cwd, getCanonicalFileName) });
             }
         }
-        return cache;
     }
-    ts.discoverProbableSymlinks = discoverProbableSymlinks;
+    ts.createSymlinkCache = createSymlinkCache;
     function guessDirectorySymlink(a, b, cwd, getCanonicalFileName) {
         var aParts = ts.getPathComponents(ts.getNormalizedAbsolutePath(a, cwd));
         var bParts = ts.getPathComponents(ts.getNormalizedAbsolutePath(b, cwd));
@@ -15413,7 +15771,7 @@
         return new RegExp(pattern, useCaseSensitiveFileNames ? "" : "i");
     }
     ts.getRegexFromPattern = getRegexFromPattern;
-    function matchFiles(path, extensions, excludes, includes, useCaseSensitiveFileNames, currentDirectory, depth, getFileSystemEntries, realpath) {
+    function matchFiles(path, extensions, excludes, includes, useCaseSensitiveFileNames, currentDirectory, depth, getFileSystemEntries, realpath, directoryExists) {
         path = ts.normalizePath(path);
         currentDirectory = ts.normalizePath(currentDirectory);
         var patterns = getFileMatcherPatterns(path, excludes, includes, useCaseSensitiveFileNames, currentDirectory);
@@ -15425,7 +15783,9 @@
         var toCanonical = ts.createGetCanonicalFileName(useCaseSensitiveFileNames);
         for (var _i = 0, _a = patterns.basePaths; _i < _a.length; _i++) {
             var basePath = _a[_i];
-            visitDirectory(basePath, ts.combinePaths(currentDirectory, basePath), depth);
+            if (directoryExists(basePath)) {
+                visitDirectory(basePath, ts.combinePaths(currentDirectory, basePath), depth);
+            }
         }
         return ts.flatten(results);
         function visitDirectory(path, absolutePath, depth) {
@@ -15531,14 +15891,14 @@
     ts.supportedTSExtensionsForExtractExtension = [".d.ts", ".ts", ".tsx"];
     ts.supportedJSExtensions = [".js", ".jsx"];
     ts.supportedJSAndJsonExtensions = [".js", ".jsx", ".json"];
-    var allSupportedExtensions = __spreadArray(__spreadArray([], ts.supportedTSExtensions), ts.supportedJSExtensions);
-    var allSupportedExtensionsWithJson = __spreadArray(__spreadArray(__spreadArray([], ts.supportedTSExtensions), ts.supportedJSExtensions), [".json"]);
+    var allSupportedExtensions = __spreadArray(__spreadArray([], ts.supportedTSExtensions, true), ts.supportedJSExtensions, true);
+    var allSupportedExtensionsWithJson = __spreadArray(__spreadArray(__spreadArray([], ts.supportedTSExtensions, true), ts.supportedJSExtensions, true), [".json"], false);
     function getSupportedExtensions(options, extraFileExtensions) {
         var needJsExtensions = options && getAllowJSCompilerOption(options);
         if (!extraFileExtensions || extraFileExtensions.length === 0) {
             return needJsExtensions ? allSupportedExtensions : ts.supportedTSExtensions;
         }
-        var extensions = __spreadArray(__spreadArray([], needJsExtensions ? allSupportedExtensions : ts.supportedTSExtensions), ts.mapDefined(extraFileExtensions, function (x) { return x.scriptKind === 7 || needJsExtensions && isJSLike(x.scriptKind) ? x.extension : undefined; }));
+        var extensions = __spreadArray(__spreadArray([], needJsExtensions ? allSupportedExtensions : ts.supportedTSExtensions, true), ts.mapDefined(extraFileExtensions, function (x) { return x.scriptKind === 7 || needJsExtensions && isJSLike(x.scriptKind) ? x.extension : undefined; }), true);
         return ts.deduplicate(extensions, ts.equateStringsCaseSensitive, ts.compareStringsCaseSensitive);
     }
     ts.getSupportedExtensions = getSupportedExtensions;
@@ -15552,7 +15912,7 @@
         if (supportedExtensions === ts.supportedTSExtensions) {
             return ts.supportedTSExtensionsWithJson;
         }
-        return __spreadArray(__spreadArray([], supportedExtensions), [".json"]);
+        return __spreadArray(__spreadArray([], supportedExtensions, true), [".json"], false);
     }
     ts.getSuppoertedExtensionsWithJsonIfResolveJsonModule = getSuppoertedExtensionsWithJsonIfResolveJsonModule;
     function isJSLike(scriptKind) {
@@ -15643,14 +16003,22 @@
     }
     ts.changeExtension = changeExtension;
     function tryParsePattern(pattern) {
-        ts.Debug.assert(hasZeroOrOneAsteriskCharacter(pattern));
         var indexOfStar = pattern.indexOf("*");
-        return indexOfStar === -1 ? undefined : {
-            prefix: pattern.substr(0, indexOfStar),
-            suffix: pattern.substr(indexOfStar + 1)
-        };
+        if (indexOfStar === -1) {
+            return pattern;
+        }
+        return pattern.indexOf("*", indexOfStar + 1) !== -1
+            ? undefined
+            : {
+                prefix: pattern.substr(0, indexOfStar),
+                suffix: pattern.substr(indexOfStar + 1)
+            };
     }
     ts.tryParsePattern = tryParsePattern;
+    function tryParsePatterns(paths) {
+        return ts.mapDefined(ts.getOwnKeys(paths), function (path) { return tryParsePattern(path); });
+    }
+    ts.tryParsePatterns = tryParsePatterns;
     function positionIsSynthesized(pos) {
         return !(pos >= 0);
     }
@@ -15684,18 +16052,15 @@
         files: ts.emptyArray,
         directories: ts.emptyArray
     };
-    function matchPatternOrExact(patternStrings, candidate) {
+    function matchPatternOrExact(patternOrStrings, candidate) {
         var patterns = [];
-        for (var _i = 0, patternStrings_1 = patternStrings; _i < patternStrings_1.length; _i++) {
-            var patternString = patternStrings_1[_i];
-            if (!hasZeroOrOneAsteriskCharacter(patternString))
-                continue;
-            var pattern = tryParsePattern(patternString);
-            if (pattern) {
-                patterns.push(pattern);
+        for (var _i = 0, patternOrStrings_1 = patternOrStrings; _i < patternOrStrings_1.length; _i++) {
+            var patternOrString = patternOrStrings_1[_i];
+            if (patternOrString === candidate) {
+                return candidate;
             }
-            else if (patternString === candidate) {
-                return patternString;
+            if (!ts.isString(patternOrString)) {
+                patterns.push(patternOrString);
             }
         }
         return ts.findBestPatternMatch(patterns, function (_) { return _; }, candidate);
@@ -15830,41 +16195,44 @@
             || isPartOfTypeQuery(useSite)
             || isIdentifierInNonEmittingHeritageClause(useSite)
             || isPartOfPossiblyValidTypeOrAbstractComputedPropertyName(useSite)
-            || !isExpressionNode(useSite);
+            || !(isExpressionNode(useSite) || isShorthandPropertyNameUseSite(useSite));
     }
     ts.isValidTypeOnlyAliasUseSite = isValidTypeOnlyAliasUseSite;
     function typeOnlyDeclarationIsExport(typeOnlyDeclaration) {
-        return typeOnlyDeclaration.kind === 271;
+        return typeOnlyDeclaration.kind === 273;
     }
     ts.typeOnlyDeclarationIsExport = typeOnlyDeclarationIsExport;
+    function isShorthandPropertyNameUseSite(useSite) {
+        return ts.isIdentifier(useSite) && ts.isShorthandPropertyAssignment(useSite.parent) && useSite.parent.name === useSite;
+    }
     function isPartOfPossiblyValidTypeOrAbstractComputedPropertyName(node) {
-        while (node.kind === 78 || node.kind === 202) {
+        while (node.kind === 79 || node.kind === 204) {
             node = node.parent;
         }
-        if (node.kind !== 159) {
+        if (node.kind !== 160) {
             return false;
         }
         if (hasSyntacticModifier(node.parent, 128)) {
             return true;
         }
         var containerKind = node.parent.parent.kind;
-        return containerKind === 254 || containerKind === 178;
+        return containerKind === 256 || containerKind === 180;
     }
     function isIdentifierInNonEmittingHeritageClause(node) {
-        if (node.kind !== 78)
+        if (node.kind !== 79)
             return false;
         var heritageClause = ts.findAncestor(node.parent, function (parent) {
             switch (parent.kind) {
-                case 287:
+                case 289:
                     return true;
-                case 202:
-                case 224:
+                case 204:
+                case 226:
                     return false;
                 default:
                     return "quit";
             }
         });
-        return (heritageClause === null || heritageClause === void 0 ? void 0 : heritageClause.token) === 116 || (heritageClause === null || heritageClause === void 0 ? void 0 : heritageClause.parent.kind) === 254;
+        return (heritageClause === null || heritageClause === void 0 ? void 0 : heritageClause.token) === 117 || (heritageClause === null || heritageClause === void 0 ? void 0 : heritageClause.parent.kind) === 256;
     }
     function isIdentifierTypeReference(node) {
         return ts.isTypeReferenceNode(node) && ts.isIdentifier(node.typeName);
@@ -15994,18 +16362,18 @@
         if (!node.parent)
             return undefined;
         switch (node.kind) {
-            case 160:
-                var parent_1 = node.parent;
-                return parent_1.kind === 186 ? undefined : parent_1.typeParameters;
             case 161:
-                return node.parent.parameters;
-            case 195:
-                return node.parent.templateSpans;
-            case 229:
-                return node.parent.templateSpans;
+                var parent_1 = node.parent;
+                return parent_1.kind === 188 ? undefined : parent_1.typeParameters;
             case 162:
+                return node.parent.parameters;
+            case 197:
+                return node.parent.templateSpans;
+            case 231:
+                return node.parent.templateSpans;
+            case 163:
                 return node.parent.decorators;
-            case 287:
+            case 289:
                 return node.parent.heritageClauses;
         }
         var parent = node.parent;
@@ -16013,49 +16381,68 @@
             return ts.isJSDocTypeLiteral(node.parent) ? undefined : node.parent.tags;
         }
         switch (parent.kind) {
-            case 178:
-            case 254:
-                return ts.isTypeElement(node) ? parent.members : undefined;
-            case 183:
-            case 184:
-                return parent.types;
             case 180:
-            case 200:
-            case 341:
-            case 265:
-            case 269:
+            case 256:
+                return ts.isTypeElement(node) ? parent.members : undefined;
+            case 185:
+            case 186:
+                return parent.types;
+            case 182:
+            case 202:
+            case 346:
+            case 267:
+            case 271:
                 return parent.elements;
-            case 201:
-            case 282:
+            case 203:
+            case 284:
                 return parent.properties;
-            case 204:
-            case 205:
+            case 206:
+            case 207:
                 return ts.isTypeNode(node) ? parent.typeArguments :
                     parent.expression === node ? undefined :
                         parent.arguments;
-            case 274:
-            case 278:
-                return ts.isJsxChild(node) ? parent.children : undefined;
             case 276:
-            case 275:
+            case 280:
+                return ts.isJsxChild(node) ? parent.children : undefined;
+            case 278:
+            case 277:
                 return ts.isTypeNode(node) ? parent.typeArguments : undefined;
-            case 231:
-            case 285:
-            case 286:
-            case 258:
+            case 233:
+            case 287:
+            case 288:
+            case 260:
                 return parent.statements;
-            case 259:
+            case 261:
                 return parent.clauses;
-            case 253:
-            case 222:
+            case 255:
+            case 224:
                 return ts.isClassElement(node) ? parent.members : undefined;
-            case 256:
+            case 258:
                 return ts.isEnumMember(node) ? parent.members : undefined;
-            case 298:
+            case 300:
                 return parent.statements;
         }
     }
     ts.getContainingNodeArray = getContainingNodeArray;
+    function hasContextSensitiveParameters(node) {
+        if (!node.typeParameters) {
+            if (ts.some(node.parameters, function (p) { return !getEffectiveTypeAnnotationNode(p); })) {
+                return true;
+            }
+            if (node.kind !== 212) {
+                var parameter = ts.firstOrUndefined(node.parameters);
+                if (!(parameter && parameterIsThisKeyword(parameter))) {
+                    return true;
+                }
+            }
+        }
+        return false;
+    }
+    ts.hasContextSensitiveParameters = hasContextSensitiveParameters;
+    function isInfinityOrNaNString(name) {
+        return name === "Infinity" || name === "-Infinity" || name === "NaN";
+    }
+    ts.isInfinityOrNaNString = isInfinityOrNaNString;
 })(ts || (ts = {}));
 var ts;
 (function (ts) {
@@ -16137,10 +16524,10 @@
             return parenthesizerRule;
         }
         function binaryOperandNeedsParentheses(binaryOperator, operand, isLeftSideOfBinary, leftOperand) {
-            var binaryOperatorPrecedence = ts.getOperatorPrecedence(217, binaryOperator);
-            var binaryOperatorAssociativity = ts.getOperatorAssociativity(217, binaryOperator);
+            var binaryOperatorPrecedence = ts.getOperatorPrecedence(219, binaryOperator);
+            var binaryOperatorAssociativity = ts.getOperatorAssociativity(219, binaryOperator);
             var emittedOperand = ts.skipPartiallyEmittedExpressions(operand);
-            if (!isLeftSideOfBinary && operand.kind === 210 && binaryOperatorPrecedence > 3) {
+            if (!isLeftSideOfBinary && operand.kind === 212 && binaryOperatorPrecedence > 3) {
                 return true;
             }
             var operandPrecedence = ts.getExpressionPrecedence(emittedOperand);
@@ -16148,7 +16535,7 @@
                 case -1:
                     if (!isLeftSideOfBinary
                         && binaryOperatorAssociativity === 1
-                        && operand.kind === 220) {
+                        && operand.kind === 222) {
                         return false;
                     }
                     return true;
@@ -16187,7 +16574,7 @@
             if (ts.isLiteralKind(node.kind)) {
                 return node.kind;
             }
-            if (node.kind === 217 && node.operatorToken.kind === 39) {
+            if (node.kind === 219 && node.operatorToken.kind === 39) {
                 if (node.cachedLiteralKind !== undefined) {
                     return node.cachedLiteralKind;
                 }
@@ -16203,7 +16590,7 @@
         }
         function parenthesizeBinaryOperand(binaryOperator, operand, isLeftSideOfBinary, leftOperand) {
             var skipped = ts.skipPartiallyEmittedExpressions(operand);
-            if (skipped.kind === 208) {
+            if (skipped.kind === 210) {
                 return operand;
             }
             return binaryOperandNeedsParentheses(binaryOperator, operand, isLeftSideOfBinary, leftOperand)
@@ -16220,7 +16607,7 @@
             return ts.isCommaSequence(expression) ? factory.createParenthesizedExpression(expression) : expression;
         }
         function parenthesizeConditionOfConditionalExpression(condition) {
-            var conditionalPrecedence = ts.getOperatorPrecedence(218, 57);
+            var conditionalPrecedence = ts.getOperatorPrecedence(220, 57);
             var emittedCondition = ts.skipPartiallyEmittedExpressions(condition);
             var conditionPrecedence = ts.getExpressionPrecedence(emittedCondition);
             if (ts.compareValues(conditionPrecedence, conditionalPrecedence) !== 1) {
@@ -16239,8 +16626,8 @@
             var needsParens = ts.isCommaSequence(check);
             if (!needsParens) {
                 switch (ts.getLeftmostExpression(check, false).kind) {
-                    case 222:
-                    case 209:
+                    case 224:
+                    case 211:
                         needsParens = true;
                 }
             }
@@ -16249,9 +16636,9 @@
         function parenthesizeExpressionOfNew(expression) {
             var leftmostExpr = ts.getLeftmostExpression(expression, true);
             switch (leftmostExpr.kind) {
-                case 204:
+                case 206:
                     return factory.createParenthesizedExpression(expression);
-                case 205:
+                case 207:
                     return !leftmostExpr.arguments
                         ? factory.createParenthesizedExpression(expression)
                         : expression;
@@ -16261,7 +16648,7 @@
         function parenthesizeLeftSideOfAccess(expression) {
             var emittedExpression = ts.skipPartiallyEmittedExpressions(expression);
             if (ts.isLeftHandSideExpression(emittedExpression)
-                && (emittedExpression.kind !== 205 || emittedExpression.arguments)) {
+                && (emittedExpression.kind !== 207 || emittedExpression.arguments)) {
                 return expression;
             }
             return ts.setTextRange(factory.createParenthesizedExpression(expression), expression);
@@ -16279,7 +16666,7 @@
         function parenthesizeExpressionForDisallowedComma(expression) {
             var emittedExpression = ts.skipPartiallyEmittedExpressions(expression);
             var expressionPrecedence = ts.getExpressionPrecedence(emittedExpression);
-            var commaPrecedence = ts.getOperatorPrecedence(217, 27);
+            var commaPrecedence = ts.getOperatorPrecedence(219, 27);
             return expressionPrecedence > commaPrecedence ? expression : ts.setTextRange(factory.createParenthesizedExpression(expression), expression);
         }
         function parenthesizeExpressionOfExpressionStatement(expression) {
@@ -16287,41 +16674,41 @@
             if (ts.isCallExpression(emittedExpression)) {
                 var callee = emittedExpression.expression;
                 var kind = ts.skipPartiallyEmittedExpressions(callee).kind;
-                if (kind === 209 || kind === 210) {
+                if (kind === 211 || kind === 212) {
                     var updated = factory.updateCallExpression(emittedExpression, ts.setTextRange(factory.createParenthesizedExpression(callee), callee), emittedExpression.typeArguments, emittedExpression.arguments);
                     return factory.restoreOuterExpressions(expression, updated, 8);
                 }
             }
             var leftmostExpressionKind = ts.getLeftmostExpression(emittedExpression, false).kind;
-            if (leftmostExpressionKind === 201 || leftmostExpressionKind === 209) {
+            if (leftmostExpressionKind === 203 || leftmostExpressionKind === 211) {
                 return ts.setTextRange(factory.createParenthesizedExpression(expression), expression);
             }
             return expression;
         }
         function parenthesizeConciseBodyOfArrowFunction(body) {
-            if (!ts.isBlock(body) && (ts.isCommaSequence(body) || ts.getLeftmostExpression(body, false).kind === 201)) {
+            if (!ts.isBlock(body) && (ts.isCommaSequence(body) || ts.getLeftmostExpression(body, false).kind === 203)) {
                 return ts.setTextRange(factory.createParenthesizedExpression(body), body);
             }
             return body;
         }
         function parenthesizeMemberOfConditionalType(member) {
-            return member.kind === 185 ? factory.createParenthesizedType(member) : member;
+            return member.kind === 187 ? factory.createParenthesizedType(member) : member;
         }
         function parenthesizeMemberOfElementType(member) {
             switch (member.kind) {
-                case 183:
-                case 184:
-                case 175:
-                case 176:
+                case 185:
+                case 186:
+                case 177:
+                case 178:
                     return factory.createParenthesizedType(member);
             }
             return parenthesizeMemberOfConditionalType(member);
         }
         function parenthesizeElementTypeOfArrayType(member) {
             switch (member.kind) {
-                case 177:
-                case 189:
-                case 186:
+                case 179:
+                case 191:
+                case 188:
                     return factory.createParenthesizedType(member);
             }
             return parenthesizeMemberOfElementType(member);
@@ -16426,11 +16813,11 @@
         }
         function convertToAssignmentPattern(node) {
             switch (node.kind) {
-                case 198:
                 case 200:
+                case 202:
                     return convertToArrayAssignmentPattern(node);
-                case 197:
-                case 201:
+                case 199:
+                case 203:
                     return convertToObjectAssignmentPattern(node);
             }
         }
@@ -16537,6 +16924,8 @@
             updateConstructSignature: updateConstructSignature,
             createIndexSignature: createIndexSignature,
             updateIndexSignature: updateIndexSignature,
+            createClassStaticBlockDeclaration: createClassStaticBlockDeclaration,
+            updateClassStaticBlockDeclaration: updateClassStaticBlockDeclaration,
             createTemplateLiteralTypeSpan: createTemplateLiteralTypeSpan,
             updateTemplateLiteralTypeSpan: updateTemplateLiteralTypeSpan,
             createKeywordTypeNode: createKeywordTypeNode,
@@ -16749,18 +17138,18 @@
             createMissingDeclaration: createMissingDeclaration,
             createExternalModuleReference: createExternalModuleReference,
             updateExternalModuleReference: updateExternalModuleReference,
-            get createJSDocAllType() { return getJSDocPrimaryTypeCreateFunction(304); },
-            get createJSDocUnknownType() { return getJSDocPrimaryTypeCreateFunction(305); },
-            get createJSDocNonNullableType() { return getJSDocUnaryTypeCreateFunction(307); },
-            get updateJSDocNonNullableType() { return getJSDocUnaryTypeUpdateFunction(307); },
-            get createJSDocNullableType() { return getJSDocUnaryTypeCreateFunction(306); },
-            get updateJSDocNullableType() { return getJSDocUnaryTypeUpdateFunction(306); },
-            get createJSDocOptionalType() { return getJSDocUnaryTypeCreateFunction(308); },
-            get updateJSDocOptionalType() { return getJSDocUnaryTypeUpdateFunction(308); },
-            get createJSDocVariadicType() { return getJSDocUnaryTypeCreateFunction(310); },
-            get updateJSDocVariadicType() { return getJSDocUnaryTypeUpdateFunction(310); },
-            get createJSDocNamepathType() { return getJSDocUnaryTypeCreateFunction(311); },
-            get updateJSDocNamepathType() { return getJSDocUnaryTypeUpdateFunction(311); },
+            get createJSDocAllType() { return getJSDocPrimaryTypeCreateFunction(307); },
+            get createJSDocUnknownType() { return getJSDocPrimaryTypeCreateFunction(308); },
+            get createJSDocNonNullableType() { return getJSDocUnaryTypeCreateFunction(310); },
+            get updateJSDocNonNullableType() { return getJSDocUnaryTypeUpdateFunction(310); },
+            get createJSDocNullableType() { return getJSDocUnaryTypeCreateFunction(309); },
+            get updateJSDocNullableType() { return getJSDocUnaryTypeUpdateFunction(309); },
+            get createJSDocOptionalType() { return getJSDocUnaryTypeCreateFunction(311); },
+            get updateJSDocOptionalType() { return getJSDocUnaryTypeUpdateFunction(311); },
+            get createJSDocVariadicType() { return getJSDocUnaryTypeCreateFunction(313); },
+            get updateJSDocVariadicType() { return getJSDocUnaryTypeUpdateFunction(313); },
+            get createJSDocNamepathType() { return getJSDocUnaryTypeCreateFunction(314); },
+            get updateJSDocNamepathType() { return getJSDocUnaryTypeUpdateFunction(314); },
             createJSDocFunctionType: createJSDocFunctionType,
             updateJSDocFunctionType: updateJSDocFunctionType,
             createJSDocTypeLiteral: createJSDocTypeLiteral,
@@ -16787,32 +17176,38 @@
             updateJSDocSeeTag: updateJSDocSeeTag,
             createJSDocNameReference: createJSDocNameReference,
             updateJSDocNameReference: updateJSDocNameReference,
+            createJSDocMemberName: createJSDocMemberName,
+            updateJSDocMemberName: updateJSDocMemberName,
             createJSDocLink: createJSDocLink,
             updateJSDocLink: updateJSDocLink,
-            get createJSDocTypeTag() { return getJSDocTypeLikeTagCreateFunction(333); },
-            get updateJSDocTypeTag() { return getJSDocTypeLikeTagUpdateFunction(333); },
-            get createJSDocReturnTag() { return getJSDocTypeLikeTagCreateFunction(331); },
-            get updateJSDocReturnTag() { return getJSDocTypeLikeTagUpdateFunction(331); },
-            get createJSDocThisTag() { return getJSDocTypeLikeTagCreateFunction(332); },
-            get updateJSDocThisTag() { return getJSDocTypeLikeTagUpdateFunction(332); },
-            get createJSDocEnumTag() { return getJSDocTypeLikeTagCreateFunction(329); },
-            get updateJSDocEnumTag() { return getJSDocTypeLikeTagUpdateFunction(329); },
-            get createJSDocAuthorTag() { return getJSDocSimpleTagCreateFunction(320); },
-            get updateJSDocAuthorTag() { return getJSDocSimpleTagUpdateFunction(320); },
-            get createJSDocClassTag() { return getJSDocSimpleTagCreateFunction(322); },
-            get updateJSDocClassTag() { return getJSDocSimpleTagUpdateFunction(322); },
-            get createJSDocPublicTag() { return getJSDocSimpleTagCreateFunction(323); },
-            get updateJSDocPublicTag() { return getJSDocSimpleTagUpdateFunction(323); },
-            get createJSDocPrivateTag() { return getJSDocSimpleTagCreateFunction(324); },
-            get updateJSDocPrivateTag() { return getJSDocSimpleTagUpdateFunction(324); },
-            get createJSDocProtectedTag() { return getJSDocSimpleTagCreateFunction(325); },
-            get updateJSDocProtectedTag() { return getJSDocSimpleTagUpdateFunction(325); },
-            get createJSDocReadonlyTag() { return getJSDocSimpleTagCreateFunction(326); },
-            get updateJSDocReadonlyTag() { return getJSDocSimpleTagUpdateFunction(326); },
-            get createJSDocOverrideTag() { return getJSDocSimpleTagCreateFunction(327); },
-            get updateJSDocOverrideTag() { return getJSDocSimpleTagUpdateFunction(327); },
-            get createJSDocDeprecatedTag() { return getJSDocSimpleTagCreateFunction(321); },
-            get updateJSDocDeprecatedTag() { return getJSDocSimpleTagUpdateFunction(321); },
+            createJSDocLinkCode: createJSDocLinkCode,
+            updateJSDocLinkCode: updateJSDocLinkCode,
+            createJSDocLinkPlain: createJSDocLinkPlain,
+            updateJSDocLinkPlain: updateJSDocLinkPlain,
+            get createJSDocTypeTag() { return getJSDocTypeLikeTagCreateFunction(338); },
+            get updateJSDocTypeTag() { return getJSDocTypeLikeTagUpdateFunction(338); },
+            get createJSDocReturnTag() { return getJSDocTypeLikeTagCreateFunction(336); },
+            get updateJSDocReturnTag() { return getJSDocTypeLikeTagUpdateFunction(336); },
+            get createJSDocThisTag() { return getJSDocTypeLikeTagCreateFunction(337); },
+            get updateJSDocThisTag() { return getJSDocTypeLikeTagUpdateFunction(337); },
+            get createJSDocEnumTag() { return getJSDocTypeLikeTagCreateFunction(334); },
+            get updateJSDocEnumTag() { return getJSDocTypeLikeTagUpdateFunction(334); },
+            get createJSDocAuthorTag() { return getJSDocSimpleTagCreateFunction(325); },
+            get updateJSDocAuthorTag() { return getJSDocSimpleTagUpdateFunction(325); },
+            get createJSDocClassTag() { return getJSDocSimpleTagCreateFunction(327); },
+            get updateJSDocClassTag() { return getJSDocSimpleTagUpdateFunction(327); },
+            get createJSDocPublicTag() { return getJSDocSimpleTagCreateFunction(328); },
+            get updateJSDocPublicTag() { return getJSDocSimpleTagUpdateFunction(328); },
+            get createJSDocPrivateTag() { return getJSDocSimpleTagCreateFunction(329); },
+            get updateJSDocPrivateTag() { return getJSDocSimpleTagUpdateFunction(329); },
+            get createJSDocProtectedTag() { return getJSDocSimpleTagCreateFunction(330); },
+            get updateJSDocProtectedTag() { return getJSDocSimpleTagUpdateFunction(330); },
+            get createJSDocReadonlyTag() { return getJSDocSimpleTagCreateFunction(331); },
+            get updateJSDocReadonlyTag() { return getJSDocSimpleTagUpdateFunction(331); },
+            get createJSDocOverrideTag() { return getJSDocSimpleTagCreateFunction(332); },
+            get updateJSDocOverrideTag() { return getJSDocSimpleTagUpdateFunction(332); },
+            get createJSDocDeprecatedTag() { return getJSDocSimpleTagCreateFunction(326); },
+            get updateJSDocDeprecatedTag() { return getJSDocSimpleTagUpdateFunction(326); },
             createJSDocUnknownTag: createJSDocUnknownTag,
             updateJSDocUnknownTag: updateJSDocUnknownTag,
             createJSDocText: createJSDocText,
@@ -16880,7 +17275,7 @@
             updateSyntheticReferenceExpression: updateSyntheticReferenceExpression,
             cloneNode: cloneNode,
             get createComma() { return getBinaryCreateFunction(27); },
-            get createAssignment() { return getBinaryCreateFunction(62); },
+            get createAssignment() { return getBinaryCreateFunction(63); },
             get createLogicalOr() { return getBinaryCreateFunction(56); },
             get createLogicalAnd() { return getBinaryCreateFunction(55); },
             get createBitwiseOr() { return getBinaryCreateFunction(51); },
@@ -16925,8 +17320,11 @@
             createArraySliceCall: createArraySliceCall,
             createArrayConcatCall: createArrayConcatCall,
             createObjectDefinePropertyCall: createObjectDefinePropertyCall,
+            createReflectGetCall: createReflectGetCall,
+            createReflectSetCall: createReflectSetCall,
             createPropertyDescriptor: createPropertyDescriptor,
             createCallBinding: createCallBinding,
+            createAssignmentTargetWrapper: createAssignmentTargetWrapper,
             inlineExpressions: inlineExpressions,
             getInternalName: getInternalName,
             getLocalName: getLocalName,
@@ -16951,11 +17349,20 @@
                 elements = [];
             }
             else if (ts.isNodeArray(elements)) {
-                if (elements.transformFlags === undefined) {
-                    aggregateChildrenFlags(elements);
+                if (hasTrailingComma === undefined || elements.hasTrailingComma === hasTrailingComma) {
+                    if (elements.transformFlags === undefined) {
+                        aggregateChildrenFlags(elements);
+                    }
+                    ts.Debug.attachNodeArrayDebugInfo(elements);
+                    return elements;
                 }
-                ts.Debug.attachNodeArrayDebugInfo(elements);
-                return elements;
+                var array_8 = elements.slice();
+                array_8.pos = elements.pos;
+                array_8.end = elements.end;
+                array_8.hasTrailingComma = hasTrailingComma;
+                array_8.transformFlags = elements.transformFlags;
+                ts.Debug.attachNodeArrayDebugInfo(array_8);
+                return array_8;
             }
             var length = elements.length;
             var array = (length >= 1 && length <= 4 ? elements.slice() : elements);
@@ -16987,11 +17394,11 @@
             node.name = name;
             if (name) {
                 switch (node.kind) {
-                    case 166:
-                    case 168:
-                    case 169:
-                    case 164:
-                    case 289:
+                    case 167:
+                    case 170:
+                    case 171:
+                    case 165:
+                    case 291:
                         if (ts.isIdentifier(name)) {
                             node.transformFlags |= propagateIdentifierNameFlags(name);
                             break;
@@ -17122,10 +17529,10 @@
             if (originalKeywordKind === undefined && text) {
                 originalKeywordKind = ts.stringToToken(text);
             }
-            if (originalKeywordKind === 78) {
+            if (originalKeywordKind === 79) {
                 originalKeywordKind = undefined;
             }
-            var node = baseFactory.createBaseIdentifierNode(78);
+            var node = baseFactory.createBaseIdentifierNode(79);
             node.originalKeywordKind = originalKeywordKind;
             node.escapedText = ts.escapeLeadingUnderscores(text);
             return node;
@@ -17142,7 +17549,7 @@
             if (typeArguments) {
                 node.typeArguments = createNodeArray(typeArguments);
             }
-            if (node.originalKeywordKind === 130) {
+            if (node.originalKeywordKind === 131) {
                 node.transformFlags |= 16777216;
             }
             return node;
@@ -17184,7 +17591,7 @@
         function createPrivateIdentifier(text) {
             if (!ts.startsWith(text, "#"))
                 ts.Debug.fail("First character of private identifier must be #: " + text);
-            var node = baseFactory.createBasePrivateIdentifierNode(79);
+            var node = baseFactory.createBasePrivateIdentifierNode(80);
             node.escapedText = ts.escapeLeadingUnderscores(text);
             node.transformFlags |= 8388608;
             return node;
@@ -17193,44 +17600,46 @@
             return baseFactory.createBaseTokenNode(kind);
         }
         function createToken(token) {
-            ts.Debug.assert(token >= 0 && token <= 157, "Invalid token");
+            ts.Debug.assert(token >= 0 && token <= 158, "Invalid token");
             ts.Debug.assert(token <= 14 || token >= 17, "Invalid token. Use 'createTemplateLiteralLikeNode' to create template literals.");
             ts.Debug.assert(token <= 8 || token >= 14, "Invalid token. Use 'createLiteralLikeNode' to create literals.");
-            ts.Debug.assert(token !== 78, "Invalid token. Use 'createIdentifier' to create identifiers");
+            ts.Debug.assert(token !== 79, "Invalid token. Use 'createIdentifier' to create identifiers");
             var node = createBaseToken(token);
             var transformFlags = 0;
             switch (token) {
-                case 129:
+                case 130:
                     transformFlags =
                         128 |
                             64;
                     break;
-                case 122:
-                case 120:
+                case 123:
                 case 121:
-                case 142:
-                case 125:
-                case 133:
-                case 84:
-                case 128:
-                case 144:
-                case 155:
-                case 141:
+                case 122:
+                case 143:
+                case 126:
+                case 134:
+                case 85:
+                case 129:
                 case 145:
                 case 156:
-                case 147:
-                case 131:
+                case 142:
+                case 146:
+                case 157:
                 case 148:
-                case 113:
-                case 152:
-                case 150:
+                case 132:
+                case 149:
+                case 114:
+                case 153:
+                case 151:
                     transformFlags = 1;
                     break;
-                case 123:
-                case 105:
+                case 106:
+                    transformFlags = 512 | 33554432;
+                    break;
+                case 124:
                     transformFlags = 512;
                     break;
-                case 107:
+                case 108:
                     transformFlags = 8192;
                     break;
             }
@@ -17240,19 +17649,19 @@
             return node;
         }
         function createSuper() {
-            return createToken(105);
+            return createToken(106);
         }
         function createThis() {
-            return createToken(107);
+            return createToken(108);
         }
         function createNull() {
-            return createToken(103);
+            return createToken(104);
         }
         function createTrue() {
-            return createToken(109);
+            return createToken(110);
         }
         function createFalse() {
-            return createToken(94);
+            return createToken(95);
         }
         function createModifier(kind) {
             return createToken(kind);
@@ -17260,45 +17669,45 @@
         function createModifiersFromModifierFlags(flags) {
             var result = [];
             if (flags & 1) {
-                result.push(createModifier(92));
+                result.push(createModifier(93));
             }
             if (flags & 2) {
-                result.push(createModifier(133));
+                result.push(createModifier(134));
             }
             if (flags & 512) {
-                result.push(createModifier(87));
+                result.push(createModifier(88));
             }
             if (flags & 2048) {
-                result.push(createModifier(84));
+                result.push(createModifier(85));
             }
             if (flags & 4) {
-                result.push(createModifier(122));
-            }
-            if (flags & 8) {
-                result.push(createModifier(120));
-            }
-            if (flags & 16) {
-                result.push(createModifier(121));
-            }
-            if (flags & 128) {
-                result.push(createModifier(125));
-            }
-            if (flags & 32) {
                 result.push(createModifier(123));
             }
+            if (flags & 8) {
+                result.push(createModifier(121));
+            }
+            if (flags & 16) {
+                result.push(createModifier(122));
+            }
+            if (flags & 128) {
+                result.push(createModifier(126));
+            }
+            if (flags & 32) {
+                result.push(createModifier(124));
+            }
             if (flags & 16384) {
-                result.push(createModifier(156));
+                result.push(createModifier(157));
             }
             if (flags & 64) {
-                result.push(createModifier(142));
+                result.push(createModifier(143));
             }
             if (flags & 256) {
-                result.push(createModifier(129));
+                result.push(createModifier(130));
             }
             return result;
         }
         function createQualifiedName(left, right) {
-            var node = createBaseNode(158);
+            var node = createBaseNode(159);
             node.left = left;
             node.right = asName(right);
             node.transformFlags |=
@@ -17313,7 +17722,7 @@
                 : node;
         }
         function createComputedPropertyName(expression) {
-            var node = createBaseNode(159);
+            var node = createBaseNode(160);
             node.expression = parenthesizerRules().parenthesizeExpressionOfComputedPropertyName(expression);
             node.transformFlags |=
                 propagateChildFlags(node.expression) |
@@ -17327,7 +17736,7 @@
                 : node;
         }
         function createTypeParameterDeclaration(name, constraint, defaultType) {
-            var node = createBaseNamedDeclaration(160, undefined, undefined, name);
+            var node = createBaseNamedDeclaration(161, undefined, undefined, name);
             node.constraint = constraint;
             node.default = defaultType;
             node.transformFlags = 1;
@@ -17341,7 +17750,7 @@
                 : node;
         }
         function createParameterDeclaration(decorators, modifiers, dotDotDotToken, name, questionToken, type, initializer) {
-            var node = createBaseVariableLikeDeclaration(161, decorators, modifiers, name, type, initializer && parenthesizerRules().parenthesizeExpressionForDisallowedComma(initializer));
+            var node = createBaseVariableLikeDeclaration(162, decorators, modifiers, name, type, initializer && parenthesizerRules().parenthesizeExpressionForDisallowedComma(initializer));
             node.dotDotDotToken = dotDotDotToken;
             node.questionToken = questionToken;
             if (ts.isThisIdentifier(node.name)) {
@@ -17372,7 +17781,7 @@
                 : node;
         }
         function createDecorator(expression) {
-            var node = createBaseNode(162);
+            var node = createBaseNode(163);
             node.expression = parenthesizerRules().parenthesizeLeftSideOfAccess(expression);
             node.transformFlags |=
                 propagateChildFlags(node.expression) |
@@ -17386,7 +17795,7 @@
                 : node;
         }
         function createPropertySignature(modifiers, name, questionToken, type) {
-            var node = createBaseNamedDeclaration(163, undefined, modifiers, name);
+            var node = createBaseNamedDeclaration(164, undefined, modifiers, name);
             node.type = type;
             node.questionToken = questionToken;
             node.transformFlags = 1;
@@ -17401,7 +17810,7 @@
                 : node;
         }
         function createPropertyDeclaration(decorators, modifiers, name, questionOrExclamationToken, type, initializer) {
-            var node = createBaseVariableLikeDeclaration(164, decorators, modifiers, name, type, initializer);
+            var node = createBaseVariableLikeDeclaration(165, decorators, modifiers, name, type, initializer);
             node.questionToken = questionOrExclamationToken && ts.isQuestionToken(questionOrExclamationToken) ? questionOrExclamationToken : undefined;
             node.exclamationToken = questionOrExclamationToken && ts.isExclamationToken(questionOrExclamationToken) ? questionOrExclamationToken : undefined;
             node.transformFlags |=
@@ -17428,7 +17837,7 @@
                 : node;
         }
         function createMethodSignature(modifiers, name, questionToken, typeParameters, parameters, type) {
-            var node = createBaseSignatureDeclaration(165, undefined, modifiers, name, typeParameters, parameters, type);
+            var node = createBaseSignatureDeclaration(166, undefined, modifiers, name, typeParameters, parameters, type);
             node.questionToken = questionToken;
             node.transformFlags = 1;
             return node;
@@ -17444,7 +17853,7 @@
                 : node;
         }
         function createMethodDeclaration(decorators, modifiers, asteriskToken, name, questionToken, typeParameters, parameters, type, body) {
-            var node = createBaseFunctionLikeDeclaration(166, decorators, modifiers, name, typeParameters, parameters, type, body);
+            var node = createBaseFunctionLikeDeclaration(167, decorators, modifiers, name, typeParameters, parameters, type, body);
             node.asteriskToken = asteriskToken;
             node.questionToken = questionToken;
             node.transformFlags |=
@@ -17480,8 +17889,21 @@
                 ? updateBaseFunctionLikeDeclaration(createMethodDeclaration(decorators, modifiers, asteriskToken, name, questionToken, typeParameters, parameters, type, body), node)
                 : node;
         }
+        function createClassStaticBlockDeclaration(decorators, modifiers, body) {
+            var node = createBaseGenericNamedDeclaration(168, decorators, modifiers, undefined, undefined);
+            node.body = body;
+            node.transformFlags = propagateChildFlags(body) | 8388608;
+            return node;
+        }
+        function updateClassStaticBlockDeclaration(node, decorators, modifiers, body) {
+            return node.decorators !== decorators
+                || node.modifier !== modifiers
+                || node.body !== body
+                ? update(createClassStaticBlockDeclaration(decorators, modifiers, body), node)
+                : node;
+        }
         function createConstructorDeclaration(decorators, modifiers, parameters, body) {
-            var node = createBaseFunctionLikeDeclaration(167, decorators, modifiers, undefined, undefined, parameters, undefined, body);
+            var node = createBaseFunctionLikeDeclaration(169, decorators, modifiers, undefined, undefined, parameters, undefined, body);
             node.transformFlags |= 512;
             return node;
         }
@@ -17494,7 +17916,7 @@
                 : node;
         }
         function createGetAccessorDeclaration(decorators, modifiers, name, parameters, type, body) {
-            return createBaseFunctionLikeDeclaration(168, decorators, modifiers, name, undefined, parameters, type, body);
+            return createBaseFunctionLikeDeclaration(170, decorators, modifiers, name, undefined, parameters, type, body);
         }
         function updateGetAccessorDeclaration(node, decorators, modifiers, name, parameters, type, body) {
             return node.decorators !== decorators
@@ -17507,7 +17929,7 @@
                 : node;
         }
         function createSetAccessorDeclaration(decorators, modifiers, name, parameters, body) {
-            return createBaseFunctionLikeDeclaration(169, decorators, modifiers, name, undefined, parameters, undefined, body);
+            return createBaseFunctionLikeDeclaration(171, decorators, modifiers, name, undefined, parameters, undefined, body);
         }
         function updateSetAccessorDeclaration(node, decorators, modifiers, name, parameters, body) {
             return node.decorators !== decorators
@@ -17519,7 +17941,7 @@
                 : node;
         }
         function createCallSignature(typeParameters, parameters, type) {
-            var node = createBaseSignatureDeclaration(170, undefined, undefined, undefined, typeParameters, parameters, type);
+            var node = createBaseSignatureDeclaration(172, undefined, undefined, undefined, typeParameters, parameters, type);
             node.transformFlags = 1;
             return node;
         }
@@ -17531,7 +17953,7 @@
                 : node;
         }
         function createConstructSignature(typeParameters, parameters, type) {
-            var node = createBaseSignatureDeclaration(171, undefined, undefined, undefined, typeParameters, parameters, type);
+            var node = createBaseSignatureDeclaration(173, undefined, undefined, undefined, typeParameters, parameters, type);
             node.transformFlags = 1;
             return node;
         }
@@ -17543,7 +17965,7 @@
                 : node;
         }
         function createIndexSignature(decorators, modifiers, parameters, type) {
-            var node = createBaseSignatureDeclaration(172, decorators, modifiers, undefined, undefined, parameters, type);
+            var node = createBaseSignatureDeclaration(174, decorators, modifiers, undefined, undefined, parameters, type);
             node.transformFlags = 1;
             return node;
         }
@@ -17556,7 +17978,7 @@
                 : node;
         }
         function createTemplateLiteralTypeSpan(type, literal) {
-            var node = createBaseNode(195);
+            var node = createBaseNode(197);
             node.type = type;
             node.literal = literal;
             node.transformFlags = 1;
@@ -17572,7 +17994,7 @@
             return createToken(kind);
         }
         function createTypePredicateNode(assertsModifier, parameterName, type) {
-            var node = createBaseNode(173);
+            var node = createBaseNode(175);
             node.assertsModifier = assertsModifier;
             node.parameterName = asName(parameterName);
             node.type = type;
@@ -17587,7 +18009,7 @@
                 : node;
         }
         function createTypeReferenceNode(typeName, typeArguments) {
-            var node = createBaseNode(174);
+            var node = createBaseNode(176);
             node.typeName = asName(typeName);
             node.typeArguments = typeArguments && parenthesizerRules().parenthesizeTypeArguments(createNodeArray(typeArguments));
             node.transformFlags = 1;
@@ -17600,7 +18022,7 @@
                 : node;
         }
         function createFunctionTypeNode(typeParameters, parameters, type) {
-            var node = createBaseSignatureDeclaration(175, undefined, undefined, undefined, typeParameters, parameters, type);
+            var node = createBaseSignatureDeclaration(177, undefined, undefined, undefined, typeParameters, parameters, type);
             node.transformFlags = 1;
             return node;
         }
@@ -17621,7 +18043,7 @@
                     ts.Debug.fail("Incorrect number of arguments specified.");
         }
         function createConstructorTypeNode1(modifiers, typeParameters, parameters, type) {
-            var node = createBaseSignatureDeclaration(176, undefined, modifiers, undefined, typeParameters, parameters, type);
+            var node = createBaseSignatureDeclaration(178, undefined, modifiers, undefined, typeParameters, parameters, type);
             node.transformFlags = 1;
             return node;
         }
@@ -17649,7 +18071,7 @@
             return updateConstructorTypeNode1(node, node.modifiers, typeParameters, parameters, type);
         }
         function createTypeQueryNode(exprName) {
-            var node = createBaseNode(177);
+            var node = createBaseNode(179);
             node.exprName = exprName;
             node.transformFlags = 1;
             return node;
@@ -17660,7 +18082,7 @@
                 : node;
         }
         function createTypeLiteralNode(members) {
-            var node = createBaseNode(178);
+            var node = createBaseNode(180);
             node.members = createNodeArray(members);
             node.transformFlags = 1;
             return node;
@@ -17671,7 +18093,7 @@
                 : node;
         }
         function createArrayTypeNode(elementType) {
-            var node = createBaseNode(179);
+            var node = createBaseNode(181);
             node.elementType = parenthesizerRules().parenthesizeElementTypeOfArrayType(elementType);
             node.transformFlags = 1;
             return node;
@@ -17682,7 +18104,7 @@
                 : node;
         }
         function createTupleTypeNode(elements) {
-            var node = createBaseNode(180);
+            var node = createBaseNode(182);
             node.elements = createNodeArray(elements);
             node.transformFlags = 1;
             return node;
@@ -17693,7 +18115,7 @@
                 : node;
         }
         function createNamedTupleMember(dotDotDotToken, name, questionToken, type) {
-            var node = createBaseNode(193);
+            var node = createBaseNode(195);
             node.dotDotDotToken = dotDotDotToken;
             node.name = name;
             node.questionToken = questionToken;
@@ -17710,7 +18132,7 @@
                 : node;
         }
         function createOptionalTypeNode(type) {
-            var node = createBaseNode(181);
+            var node = createBaseNode(183);
             node.type = parenthesizerRules().parenthesizeElementTypeOfArrayType(type);
             node.transformFlags = 1;
             return node;
@@ -17721,7 +18143,7 @@
                 : node;
         }
         function createRestTypeNode(type) {
-            var node = createBaseNode(182);
+            var node = createBaseNode(184);
             node.type = type;
             node.transformFlags = 1;
             return node;
@@ -17743,19 +18165,19 @@
                 : node;
         }
         function createUnionTypeNode(types) {
-            return createUnionOrIntersectionTypeNode(183, types);
+            return createUnionOrIntersectionTypeNode(185, types);
         }
         function updateUnionTypeNode(node, types) {
             return updateUnionOrIntersectionTypeNode(node, types);
         }
         function createIntersectionTypeNode(types) {
-            return createUnionOrIntersectionTypeNode(184, types);
+            return createUnionOrIntersectionTypeNode(186, types);
         }
         function updateIntersectionTypeNode(node, types) {
             return updateUnionOrIntersectionTypeNode(node, types);
         }
         function createConditionalTypeNode(checkType, extendsType, trueType, falseType) {
-            var node = createBaseNode(185);
+            var node = createBaseNode(187);
             node.checkType = parenthesizerRules().parenthesizeMemberOfConditionalType(checkType);
             node.extendsType = parenthesizerRules().parenthesizeMemberOfConditionalType(extendsType);
             node.trueType = trueType;
@@ -17772,7 +18194,7 @@
                 : node;
         }
         function createInferTypeNode(typeParameter) {
-            var node = createBaseNode(186);
+            var node = createBaseNode(188);
             node.typeParameter = typeParameter;
             node.transformFlags = 1;
             return node;
@@ -17783,7 +18205,7 @@
                 : node;
         }
         function createTemplateLiteralType(head, templateSpans) {
-            var node = createBaseNode(194);
+            var node = createBaseNode(196);
             node.head = head;
             node.templateSpans = createNodeArray(templateSpans);
             node.transformFlags = 1;
@@ -17797,7 +18219,7 @@
         }
         function createImportTypeNode(argument, qualifier, typeArguments, isTypeOf) {
             if (isTypeOf === void 0) { isTypeOf = false; }
-            var node = createBaseNode(196);
+            var node = createBaseNode(198);
             node.argument = argument;
             node.qualifier = qualifier;
             node.typeArguments = typeArguments && parenthesizerRules().parenthesizeTypeArguments(typeArguments);
@@ -17815,7 +18237,7 @@
                 : node;
         }
         function createParenthesizedType(type) {
-            var node = createBaseNode(187);
+            var node = createBaseNode(189);
             node.type = type;
             node.transformFlags = 1;
             return node;
@@ -17826,12 +18248,12 @@
                 : node;
         }
         function createThisTypeNode() {
-            var node = createBaseNode(188);
+            var node = createBaseNode(190);
             node.transformFlags = 1;
             return node;
         }
         function createTypeOperatorNode(operator, type) {
-            var node = createBaseNode(189);
+            var node = createBaseNode(191);
             node.operator = operator;
             node.type = parenthesizerRules().parenthesizeMemberOfElementType(type);
             node.transformFlags = 1;
@@ -17843,7 +18265,7 @@
                 : node;
         }
         function createIndexedAccessTypeNode(objectType, indexType) {
-            var node = createBaseNode(190);
+            var node = createBaseNode(192);
             node.objectType = parenthesizerRules().parenthesizeMemberOfElementType(objectType);
             node.indexType = indexType;
             node.transformFlags = 1;
@@ -17856,7 +18278,7 @@
                 : node;
         }
         function createMappedTypeNode(readonlyToken, typeParameter, nameType, questionToken, type) {
-            var node = createBaseNode(191);
+            var node = createBaseNode(193);
             node.readonlyToken = readonlyToken;
             node.typeParameter = typeParameter;
             node.nameType = nameType;
@@ -17875,7 +18297,7 @@
                 : node;
         }
         function createLiteralTypeNode(literal) {
-            var node = createBaseNode(192);
+            var node = createBaseNode(194);
             node.literal = literal;
             node.transformFlags = 1;
             return node;
@@ -17886,7 +18308,7 @@
                 : node;
         }
         function createObjectBindingPattern(elements) {
-            var node = createBaseNode(197);
+            var node = createBaseNode(199);
             node.elements = createNodeArray(elements);
             node.transformFlags |=
                 propagateChildrenFlags(node.elements) |
@@ -17905,7 +18327,7 @@
                 : node;
         }
         function createArrayBindingPattern(elements) {
-            var node = createBaseNode(198);
+            var node = createBaseNode(200);
             node.elements = createNodeArray(elements);
             node.transformFlags |=
                 propagateChildrenFlags(node.elements) |
@@ -17919,7 +18341,7 @@
                 : node;
         }
         function createBindingElement(dotDotDotToken, propertyName, name, initializer) {
-            var node = createBaseBindingLikeDeclaration(199, undefined, undefined, name, initializer && parenthesizerRules().parenthesizeExpressionForDisallowedComma(initializer));
+            var node = createBaseBindingLikeDeclaration(201, undefined, undefined, name, initializer && parenthesizerRules().parenthesizeExpressionForDisallowedComma(initializer));
             node.propertyName = asName(propertyName);
             node.dotDotDotToken = dotDotDotToken;
             node.transformFlags |=
@@ -17947,8 +18369,10 @@
             return node;
         }
         function createArrayLiteralExpression(elements, multiLine) {
-            var node = createBaseExpression(200);
-            node.elements = parenthesizerRules().parenthesizeExpressionsOfCommaDelimitedList(createNodeArray(elements));
+            var node = createBaseExpression(202);
+            var lastElement = elements && ts.lastOrUndefined(elements);
+            var elementsArray = createNodeArray(elements, lastElement && ts.isOmittedExpression(lastElement) ? true : undefined);
+            node.elements = parenthesizerRules().parenthesizeExpressionsOfCommaDelimitedList(elementsArray);
             node.multiLine = multiLine;
             node.transformFlags |= propagateChildrenFlags(node.elements);
             return node;
@@ -17959,7 +18383,7 @@
                 : node;
         }
         function createObjectLiteralExpression(properties, multiLine) {
-            var node = createBaseExpression(201);
+            var node = createBaseExpression(203);
             node.properties = createNodeArray(properties);
             node.multiLine = multiLine;
             node.transformFlags |= propagateChildrenFlags(node.properties);
@@ -17971,7 +18395,7 @@
                 : node;
         }
         function createPropertyAccessExpression(expression, name) {
-            var node = createBaseExpression(202);
+            var node = createBaseExpression(204);
             node.expression = parenthesizerRules().parenthesizeLeftSideOfAccess(expression);
             node.name = asName(name);
             node.transformFlags =
@@ -17996,7 +18420,7 @@
                 : node;
         }
         function createPropertyAccessChain(expression, questionDotToken, name) {
-            var node = createBaseExpression(202);
+            var node = createBaseExpression(204);
             node.flags |= 32;
             node.expression = parenthesizerRules().parenthesizeLeftSideOfAccess(expression);
             node.questionDotToken = questionDotToken;
@@ -18019,7 +18443,7 @@
                 : node;
         }
         function createElementAccessExpression(expression, index) {
-            var node = createBaseExpression(203);
+            var node = createBaseExpression(205);
             node.expression = parenthesizerRules().parenthesizeLeftSideOfAccess(expression);
             node.argumentExpression = asExpression(index);
             node.transformFlags |=
@@ -18042,7 +18466,7 @@
                 : node;
         }
         function createElementAccessChain(expression, questionDotToken, index) {
-            var node = createBaseExpression(203);
+            var node = createBaseExpression(205);
             node.flags |= 32;
             node.expression = parenthesizerRules().parenthesizeLeftSideOfAccess(expression);
             node.questionDotToken = questionDotToken;
@@ -18063,7 +18487,7 @@
                 : node;
         }
         function createCallExpression(expression, typeArguments, argumentsArray) {
-            var node = createBaseExpression(204);
+            var node = createBaseExpression(206);
             node.expression = parenthesizerRules().parenthesizeLeftSideOfAccess(expression);
             node.typeArguments = asNodeArray(typeArguments);
             node.arguments = parenthesizerRules().parenthesizeExpressionsOfCommaDelimitedList(createNodeArray(argumentsArray));
@@ -18093,7 +18517,7 @@
                 : node;
         }
         function createCallChain(expression, questionDotToken, typeArguments, argumentsArray) {
-            var node = createBaseExpression(204);
+            var node = createBaseExpression(206);
             node.flags |= 32;
             node.expression = parenthesizerRules().parenthesizeLeftSideOfAccess(expression);
             node.questionDotToken = questionDotToken;
@@ -18123,7 +18547,7 @@
                 : node;
         }
         function createNewExpression(expression, typeArguments, argumentsArray) {
-            var node = createBaseExpression(205);
+            var node = createBaseExpression(207);
             node.expression = parenthesizerRules().parenthesizeExpressionOfNew(expression);
             node.typeArguments = asNodeArray(typeArguments);
             node.arguments = argumentsArray ? parenthesizerRules().parenthesizeExpressionsOfCommaDelimitedList(argumentsArray) : undefined;
@@ -18145,7 +18569,7 @@
                 : node;
         }
         function createTaggedTemplateExpression(tag, typeArguments, template) {
-            var node = createBaseExpression(206);
+            var node = createBaseExpression(208);
             node.tag = parenthesizerRules().parenthesizeLeftSideOfAccess(tag);
             node.typeArguments = asNodeArray(typeArguments);
             node.template = template;
@@ -18170,7 +18594,7 @@
                 : node;
         }
         function createTypeAssertion(type, expression) {
-            var node = createBaseExpression(207);
+            var node = createBaseExpression(209);
             node.expression = parenthesizerRules().parenthesizeOperandOfPrefixUnary(expression);
             node.type = type;
             node.transformFlags |=
@@ -18186,7 +18610,7 @@
                 : node;
         }
         function createParenthesizedExpression(expression) {
-            var node = createBaseExpression(208);
+            var node = createBaseExpression(210);
             node.expression = expression;
             node.transformFlags = propagateChildFlags(node.expression);
             return node;
@@ -18197,7 +18621,7 @@
                 : node;
         }
         function createFunctionExpression(modifiers, asteriskToken, name, typeParameters, parameters, type, body) {
-            var node = createBaseFunctionLikeDeclaration(209, undefined, modifiers, name, typeParameters, parameters, type, body);
+            var node = createBaseFunctionLikeDeclaration(211, undefined, modifiers, name, typeParameters, parameters, type, body);
             node.asteriskToken = asteriskToken;
             node.transformFlags |= propagateChildFlags(node.asteriskToken);
             if (node.typeParameters) {
@@ -18228,13 +18652,13 @@
                 : node;
         }
         function createArrowFunction(modifiers, typeParameters, parameters, type, equalsGreaterThanToken, body) {
-            var node = createBaseFunctionLikeDeclaration(210, undefined, modifiers, undefined, typeParameters, parameters, type, parenthesizerRules().parenthesizeConciseBodyOfArrowFunction(body));
+            var node = createBaseFunctionLikeDeclaration(212, undefined, modifiers, undefined, typeParameters, parameters, type, parenthesizerRules().parenthesizeConciseBodyOfArrowFunction(body));
             node.equalsGreaterThanToken = equalsGreaterThanToken !== null && equalsGreaterThanToken !== void 0 ? equalsGreaterThanToken : createToken(38);
             node.transformFlags |=
                 propagateChildFlags(node.equalsGreaterThanToken) |
                     512;
             if (ts.modifiersToFlags(node.modifiers) & 256) {
-                node.transformFlags |= 128;
+                node.transformFlags |= 128 | 8192;
             }
             return node;
         }
@@ -18249,7 +18673,7 @@
                 : node;
         }
         function createDeleteExpression(expression) {
-            var node = createBaseExpression(211);
+            var node = createBaseExpression(213);
             node.expression = parenthesizerRules().parenthesizeOperandOfPrefixUnary(expression);
             node.transformFlags |= propagateChildFlags(node.expression);
             return node;
@@ -18260,7 +18684,7 @@
                 : node;
         }
         function createTypeOfExpression(expression) {
-            var node = createBaseExpression(212);
+            var node = createBaseExpression(214);
             node.expression = parenthesizerRules().parenthesizeOperandOfPrefixUnary(expression);
             node.transformFlags |= propagateChildFlags(node.expression);
             return node;
@@ -18271,7 +18695,7 @@
                 : node;
         }
         function createVoidExpression(expression) {
-            var node = createBaseExpression(213);
+            var node = createBaseExpression(215);
             node.expression = parenthesizerRules().parenthesizeOperandOfPrefixUnary(expression);
             node.transformFlags |= propagateChildFlags(node.expression);
             return node;
@@ -18282,7 +18706,7 @@
                 : node;
         }
         function createAwaitExpression(expression) {
-            var node = createBaseExpression(214);
+            var node = createBaseExpression(216);
             node.expression = parenthesizerRules().parenthesizeOperandOfPrefixUnary(expression);
             node.transformFlags |=
                 propagateChildFlags(node.expression) |
@@ -18297,10 +18721,16 @@
                 : node;
         }
         function createPrefixUnaryExpression(operator, operand) {
-            var node = createBaseExpression(215);
+            var node = createBaseExpression(217);
             node.operator = operator;
             node.operand = parenthesizerRules().parenthesizeOperandOfPrefixUnary(operand);
             node.transformFlags |= propagateChildFlags(node.operand);
+            if ((operator === 45 || operator === 46) &&
+                ts.isIdentifier(node.operand) &&
+                !ts.isGeneratedIdentifier(node.operand) &&
+                !ts.isLocalName(node.operand)) {
+                node.transformFlags |= 67108864;
+            }
             return node;
         }
         function updatePrefixUnaryExpression(node, operand) {
@@ -18309,10 +18739,15 @@
                 : node;
         }
         function createPostfixUnaryExpression(operand, operator) {
-            var node = createBaseExpression(216);
+            var node = createBaseExpression(218);
             node.operator = operator;
             node.operand = parenthesizerRules().parenthesizeOperandOfPostfixUnary(operand);
-            node.transformFlags = propagateChildFlags(node.operand);
+            node.transformFlags |= propagateChildFlags(node.operand);
+            if (ts.isIdentifier(node.operand) &&
+                !ts.isGeneratedIdentifier(node.operand) &&
+                !ts.isLocalName(node.operand)) {
+                node.transformFlags |= 67108864;
+            }
             return node;
         }
         function updatePostfixUnaryExpression(node, operand) {
@@ -18321,7 +18756,7 @@
                 : node;
         }
         function createBinaryExpression(left, operator, right) {
-            var node = createBaseExpression(217);
+            var node = createBaseExpression(219);
             var operatorToken = asToken(operator);
             var operatorKind = operatorToken.kind;
             node.left = parenthesizerRules().parenthesizeLeftSideOfBinary(operatorKind, left);
@@ -18334,7 +18769,7 @@
             if (operatorKind === 60) {
                 node.transformFlags |= 16;
             }
-            else if (operatorKind === 62) {
+            else if (operatorKind === 63) {
                 if (ts.isObjectLiteralExpression(node.left)) {
                     node.transformFlags |=
                         512 |
@@ -18349,7 +18784,7 @@
                             propagateAssignmentPatternFlags(node.left);
                 }
             }
-            else if (operatorKind === 42 || operatorKind === 66) {
+            else if (operatorKind === 42 || operatorKind === 67) {
                 node.transformFlags |= 256;
             }
             else if (ts.isLogicalOrCoalescingAssignmentOperator(operatorKind)) {
@@ -18386,7 +18821,7 @@
                 : node;
         }
         function createConditionalExpression(condition, questionToken, whenTrue, colonToken, whenFalse) {
-            var node = createBaseExpression(218);
+            var node = createBaseExpression(220);
             node.condition = parenthesizerRules().parenthesizeConditionOfConditionalExpression(condition);
             node.questionToken = questionToken !== null && questionToken !== void 0 ? questionToken : createToken(57);
             node.whenTrue = parenthesizerRules().parenthesizeBranchOfConditionalExpression(whenTrue);
@@ -18410,7 +18845,7 @@
                 : node;
         }
         function createTemplateExpression(head, templateSpans) {
-            var node = createBaseExpression(219);
+            var node = createBaseExpression(221);
             node.head = head;
             node.templateSpans = createNodeArray(templateSpans);
             node.transformFlags |=
@@ -18471,7 +18906,7 @@
         }
         function createYieldExpression(asteriskToken, expression) {
             ts.Debug.assert(!asteriskToken || !!expression, "A `YieldExpression` with an asteriskToken must have an expression.");
-            var node = createBaseExpression(220);
+            var node = createBaseExpression(222);
             node.expression = expression && parenthesizerRules().parenthesizeExpressionForDisallowedComma(expression);
             node.asteriskToken = asteriskToken;
             node.transformFlags |=
@@ -18489,7 +18924,7 @@
                 : node;
         }
         function createSpreadElement(expression) {
-            var node = createBaseExpression(221);
+            var node = createBaseExpression(223);
             node.expression = parenthesizerRules().parenthesizeExpressionForDisallowedComma(expression);
             node.transformFlags |=
                 propagateChildFlags(node.expression) |
@@ -18503,7 +18938,7 @@
                 : node;
         }
         function createClassExpression(decorators, modifiers, name, typeParameters, heritageClauses, members) {
-            var node = createBaseClassLikeDeclaration(222, decorators, modifiers, name, typeParameters, heritageClauses, members);
+            var node = createBaseClassLikeDeclaration(224, decorators, modifiers, name, typeParameters, heritageClauses, members);
             node.transformFlags |= 512;
             return node;
         }
@@ -18518,10 +18953,10 @@
                 : node;
         }
         function createOmittedExpression() {
-            return createBaseExpression(223);
+            return createBaseExpression(225);
         }
         function createExpressionWithTypeArguments(expression, typeArguments) {
-            var node = createBaseNode(224);
+            var node = createBaseNode(226);
             node.expression = parenthesizerRules().parenthesizeLeftSideOfAccess(expression);
             node.typeArguments = typeArguments && parenthesizerRules().parenthesizeTypeArguments(typeArguments);
             node.transformFlags |=
@@ -18537,7 +18972,7 @@
                 : node;
         }
         function createAsExpression(expression, type) {
-            var node = createBaseExpression(225);
+            var node = createBaseExpression(227);
             node.expression = expression;
             node.type = type;
             node.transformFlags |=
@@ -18553,7 +18988,7 @@
                 : node;
         }
         function createNonNullExpression(expression) {
-            var node = createBaseExpression(226);
+            var node = createBaseExpression(228);
             node.expression = parenthesizerRules().parenthesizeLeftSideOfAccess(expression);
             node.transformFlags |=
                 propagateChildFlags(node.expression) |
@@ -18569,7 +19004,7 @@
                 : node;
         }
         function createNonNullChain(expression) {
-            var node = createBaseExpression(226);
+            var node = createBaseExpression(228);
             node.flags |= 32;
             node.expression = parenthesizerRules().parenthesizeLeftSideOfAccess(expression);
             node.transformFlags |=
@@ -18584,15 +19019,15 @@
                 : node;
         }
         function createMetaProperty(keywordToken, name) {
-            var node = createBaseExpression(227);
+            var node = createBaseExpression(229);
             node.keywordToken = keywordToken;
             node.name = name;
             node.transformFlags |= propagateChildFlags(node.name);
             switch (keywordToken) {
-                case 102:
+                case 103:
                     node.transformFlags |= 512;
                     break;
-                case 99:
+                case 100:
                     node.transformFlags |= 4;
                     break;
                 default:
@@ -18606,7 +19041,7 @@
                 : node;
         }
         function createTemplateSpan(expression, literal) {
-            var node = createBaseNode(229);
+            var node = createBaseNode(231);
             node.expression = expression;
             node.literal = literal;
             node.transformFlags |=
@@ -18622,12 +19057,12 @@
                 : node;
         }
         function createSemicolonClassElement() {
-            var node = createBaseNode(230);
+            var node = createBaseNode(232);
             node.transformFlags |= 512;
             return node;
         }
         function createBlock(statements, multiLine) {
-            var node = createBaseNode(231);
+            var node = createBaseNode(233);
             node.statements = createNodeArray(statements);
             node.multiLine = multiLine;
             node.transformFlags |= propagateChildrenFlags(node.statements);
@@ -18639,7 +19074,7 @@
                 : node;
         }
         function createVariableStatement(modifiers, declarationList) {
-            var node = createBaseDeclaration(233, undefined, modifiers);
+            var node = createBaseDeclaration(235, undefined, modifiers);
             node.declarationList = ts.isArray(declarationList) ? createVariableDeclarationList(declarationList) : declarationList;
             node.transformFlags |=
                 propagateChildFlags(node.declarationList);
@@ -18655,10 +19090,10 @@
                 : node;
         }
         function createEmptyStatement() {
-            return createBaseNode(232);
+            return createBaseNode(234);
         }
         function createExpressionStatement(expression) {
-            var node = createBaseNode(234);
+            var node = createBaseNode(236);
             node.expression = parenthesizerRules().parenthesizeExpressionOfExpressionStatement(expression);
             node.transformFlags |= propagateChildFlags(node.expression);
             return node;
@@ -18669,7 +19104,7 @@
                 : node;
         }
         function createIfStatement(expression, thenStatement, elseStatement) {
-            var node = createBaseNode(235);
+            var node = createBaseNode(237);
             node.expression = expression;
             node.thenStatement = asEmbeddedStatement(thenStatement);
             node.elseStatement = asEmbeddedStatement(elseStatement);
@@ -18687,7 +19122,7 @@
                 : node;
         }
         function createDoStatement(statement, expression) {
-            var node = createBaseNode(236);
+            var node = createBaseNode(238);
             node.statement = asEmbeddedStatement(statement);
             node.expression = expression;
             node.transformFlags |=
@@ -18702,7 +19137,7 @@
                 : node;
         }
         function createWhileStatement(expression, statement) {
-            var node = createBaseNode(237);
+            var node = createBaseNode(239);
             node.expression = expression;
             node.statement = asEmbeddedStatement(statement);
             node.transformFlags |=
@@ -18717,7 +19152,7 @@
                 : node;
         }
         function createForStatement(initializer, condition, incrementor, statement) {
-            var node = createBaseNode(238);
+            var node = createBaseNode(240);
             node.initializer = initializer;
             node.condition = condition;
             node.incrementor = incrementor;
@@ -18738,7 +19173,7 @@
                 : node;
         }
         function createForInStatement(initializer, expression, statement) {
-            var node = createBaseNode(239);
+            var node = createBaseNode(241);
             node.initializer = initializer;
             node.expression = expression;
             node.statement = asEmbeddedStatement(statement);
@@ -18756,7 +19191,7 @@
                 : node;
         }
         function createForOfStatement(awaitModifier, initializer, expression, statement) {
-            var node = createBaseNode(240);
+            var node = createBaseNode(242);
             node.awaitModifier = awaitModifier;
             node.initializer = initializer;
             node.expression = parenthesizerRules().parenthesizeExpressionForDisallowedComma(expression);
@@ -18780,7 +19215,7 @@
                 : node;
         }
         function createContinueStatement(label) {
-            var node = createBaseNode(241);
+            var node = createBaseNode(243);
             node.label = asName(label);
             node.transformFlags |=
                 propagateChildFlags(node.label) |
@@ -18793,7 +19228,7 @@
                 : node;
         }
         function createBreakStatement(label) {
-            var node = createBaseNode(242);
+            var node = createBaseNode(244);
             node.label = asName(label);
             node.transformFlags |=
                 propagateChildFlags(node.label) |
@@ -18806,7 +19241,7 @@
                 : node;
         }
         function createReturnStatement(expression) {
-            var node = createBaseNode(243);
+            var node = createBaseNode(245);
             node.expression = expression;
             node.transformFlags |=
                 propagateChildFlags(node.expression) |
@@ -18820,7 +19255,7 @@
                 : node;
         }
         function createWithStatement(expression, statement) {
-            var node = createBaseNode(244);
+            var node = createBaseNode(246);
             node.expression = expression;
             node.statement = asEmbeddedStatement(statement);
             node.transformFlags |=
@@ -18835,7 +19270,7 @@
                 : node;
         }
         function createSwitchStatement(expression, caseBlock) {
-            var node = createBaseNode(245);
+            var node = createBaseNode(247);
             node.expression = parenthesizerRules().parenthesizeExpressionForDisallowedComma(expression);
             node.caseBlock = caseBlock;
             node.transformFlags |=
@@ -18850,7 +19285,7 @@
                 : node;
         }
         function createLabeledStatement(label, statement) {
-            var node = createBaseNode(246);
+            var node = createBaseNode(248);
             node.label = asName(label);
             node.statement = asEmbeddedStatement(statement);
             node.transformFlags |=
@@ -18865,7 +19300,7 @@
                 : node;
         }
         function createThrowStatement(expression) {
-            var node = createBaseNode(247);
+            var node = createBaseNode(249);
             node.expression = expression;
             node.transformFlags |= propagateChildFlags(node.expression);
             return node;
@@ -18876,7 +19311,7 @@
                 : node;
         }
         function createTryStatement(tryBlock, catchClause, finallyBlock) {
-            var node = createBaseNode(248);
+            var node = createBaseNode(250);
             node.tryBlock = tryBlock;
             node.catchClause = catchClause;
             node.finallyBlock = finallyBlock;
@@ -18894,10 +19329,10 @@
                 : node;
         }
         function createDebuggerStatement() {
-            return createBaseNode(249);
+            return createBaseNode(251);
         }
         function createVariableDeclaration(name, exclamationToken, type, initializer) {
-            var node = createBaseVariableLikeDeclaration(250, undefined, undefined, name, type, initializer && parenthesizerRules().parenthesizeExpressionForDisallowedComma(initializer));
+            var node = createBaseVariableLikeDeclaration(252, undefined, undefined, name, type, initializer && parenthesizerRules().parenthesizeExpressionForDisallowedComma(initializer));
             node.exclamationToken = exclamationToken;
             node.transformFlags |= propagateChildFlags(node.exclamationToken);
             if (exclamationToken) {
@@ -18915,7 +19350,7 @@
         }
         function createVariableDeclarationList(declarations, flags) {
             if (flags === void 0) { flags = 0; }
-            var node = createBaseNode(251);
+            var node = createBaseNode(253);
             node.flags |= flags & 3;
             node.declarations = createNodeArray(declarations);
             node.transformFlags |=
@@ -18934,7 +19369,7 @@
                 : node;
         }
         function createFunctionDeclaration(decorators, modifiers, asteriskToken, name, typeParameters, parameters, type, body) {
-            var node = createBaseFunctionLikeDeclaration(252, decorators, modifiers, name, typeParameters, parameters, type, body);
+            var node = createBaseFunctionLikeDeclaration(254, decorators, modifiers, name, typeParameters, parameters, type, body);
             node.asteriskToken = asteriskToken;
             if (!node.body || ts.modifiersToFlags(node.modifiers) & 2) {
                 node.transformFlags = 1;
@@ -18970,7 +19405,7 @@
                 : node;
         }
         function createClassDeclaration(decorators, modifiers, name, typeParameters, heritageClauses, members) {
-            var node = createBaseClassLikeDeclaration(253, decorators, modifiers, name, typeParameters, heritageClauses, members);
+            var node = createBaseClassLikeDeclaration(255, decorators, modifiers, name, typeParameters, heritageClauses, members);
             if (ts.modifiersToFlags(node.modifiers) & 2) {
                 node.transformFlags = 1;
             }
@@ -18993,7 +19428,7 @@
                 : node;
         }
         function createInterfaceDeclaration(decorators, modifiers, name, typeParameters, heritageClauses, members) {
-            var node = createBaseInterfaceOrClassLikeDeclaration(254, decorators, modifiers, name, typeParameters, heritageClauses);
+            var node = createBaseInterfaceOrClassLikeDeclaration(256, decorators, modifiers, name, typeParameters, heritageClauses);
             node.members = createNodeArray(members);
             node.transformFlags = 1;
             return node;
@@ -19009,7 +19444,7 @@
                 : node;
         }
         function createTypeAliasDeclaration(decorators, modifiers, name, typeParameters, type) {
-            var node = createBaseGenericNamedDeclaration(255, decorators, modifiers, name, typeParameters);
+            var node = createBaseGenericNamedDeclaration(257, decorators, modifiers, name, typeParameters);
             node.type = type;
             node.transformFlags = 1;
             return node;
@@ -19024,7 +19459,7 @@
                 : node;
         }
         function createEnumDeclaration(decorators, modifiers, name, members) {
-            var node = createBaseNamedDeclaration(256, decorators, modifiers, name);
+            var node = createBaseNamedDeclaration(258, decorators, modifiers, name);
             node.members = createNodeArray(members);
             node.transformFlags |=
                 propagateChildrenFlags(node.members) |
@@ -19042,7 +19477,7 @@
         }
         function createModuleDeclaration(decorators, modifiers, name, body, flags) {
             if (flags === void 0) { flags = 0; }
-            var node = createBaseDeclaration(257, decorators, modifiers);
+            var node = createBaseDeclaration(259, decorators, modifiers);
             node.flags |= flags & (16 | 4 | 1024);
             node.name = name;
             node.body = body;
@@ -19067,7 +19502,7 @@
                 : node;
         }
         function createModuleBlock(statements) {
-            var node = createBaseNode(258);
+            var node = createBaseNode(260);
             node.statements = createNodeArray(statements);
             node.transformFlags |= propagateChildrenFlags(node.statements);
             return node;
@@ -19078,7 +19513,7 @@
                 : node;
         }
         function createCaseBlock(clauses) {
-            var node = createBaseNode(259);
+            var node = createBaseNode(261);
             node.clauses = createNodeArray(clauses);
             node.transformFlags |= propagateChildrenFlags(node.clauses);
             return node;
@@ -19089,7 +19524,7 @@
                 : node;
         }
         function createNamespaceExportDeclaration(name) {
-            var node = createBaseNamedDeclaration(260, undefined, undefined, name);
+            var node = createBaseNamedDeclaration(262, undefined, undefined, name);
             node.transformFlags = 1;
             return node;
         }
@@ -19099,7 +19534,7 @@
                 : node;
         }
         function createImportEqualsDeclaration(decorators, modifiers, isTypeOnly, name, moduleReference) {
-            var node = createBaseNamedDeclaration(261, decorators, modifiers, name);
+            var node = createBaseNamedDeclaration(263, decorators, modifiers, name);
             node.isTypeOnly = isTypeOnly;
             node.moduleReference = moduleReference;
             node.transformFlags |= propagateChildFlags(node.moduleReference);
@@ -19118,7 +19553,7 @@
                 : node;
         }
         function createImportDeclaration(decorators, modifiers, importClause, moduleSpecifier) {
-            var node = createBaseDeclaration(262, decorators, modifiers);
+            var node = createBaseDeclaration(264, decorators, modifiers);
             node.importClause = importClause;
             node.moduleSpecifier = moduleSpecifier;
             node.transformFlags |=
@@ -19136,7 +19571,7 @@
                 : node;
         }
         function createImportClause(isTypeOnly, name, namedBindings) {
-            var node = createBaseNode(263);
+            var node = createBaseNode(265);
             node.isTypeOnly = isTypeOnly;
             node.name = name;
             node.namedBindings = namedBindings;
@@ -19157,7 +19592,7 @@
                 : node;
         }
         function createNamespaceImport(name) {
-            var node = createBaseNode(264);
+            var node = createBaseNode(266);
             node.name = name;
             node.transformFlags |= propagateChildFlags(node.name);
             node.transformFlags &= ~16777216;
@@ -19169,7 +19604,7 @@
                 : node;
         }
         function createNamespaceExport(name) {
-            var node = createBaseNode(270);
+            var node = createBaseNode(272);
             node.name = name;
             node.transformFlags |=
                 propagateChildFlags(node.name) |
@@ -19183,7 +19618,7 @@
                 : node;
         }
         function createNamedImports(elements) {
-            var node = createBaseNode(265);
+            var node = createBaseNode(267);
             node.elements = createNodeArray(elements);
             node.transformFlags |= propagateChildrenFlags(node.elements);
             node.transformFlags &= ~16777216;
@@ -19195,7 +19630,7 @@
                 : node;
         }
         function createImportSpecifier(propertyName, name) {
-            var node = createBaseNode(266);
+            var node = createBaseNode(268);
             node.propertyName = propertyName;
             node.name = name;
             node.transformFlags |=
@@ -19211,10 +19646,10 @@
                 : node;
         }
         function createExportAssignment(decorators, modifiers, isExportEquals, expression) {
-            var node = createBaseDeclaration(267, decorators, modifiers);
+            var node = createBaseDeclaration(269, decorators, modifiers);
             node.isExportEquals = isExportEquals;
             node.expression = isExportEquals
-                ? parenthesizerRules().parenthesizeRightSideOfBinary(62, undefined, expression)
+                ? parenthesizerRules().parenthesizeRightSideOfBinary(63, undefined, expression)
                 : parenthesizerRules().parenthesizeExpressionOfExportDefault(expression);
             node.transformFlags |= propagateChildFlags(node.expression);
             node.transformFlags &= ~16777216;
@@ -19228,7 +19663,7 @@
                 : node;
         }
         function createExportDeclaration(decorators, modifiers, isTypeOnly, exportClause, moduleSpecifier) {
-            var node = createBaseDeclaration(268, decorators, modifiers);
+            var node = createBaseDeclaration(270, decorators, modifiers);
             node.isTypeOnly = isTypeOnly;
             node.exportClause = exportClause;
             node.moduleSpecifier = moduleSpecifier;
@@ -19248,7 +19683,7 @@
                 : node;
         }
         function createNamedExports(elements) {
-            var node = createBaseNode(269);
+            var node = createBaseNode(271);
             node.elements = createNodeArray(elements);
             node.transformFlags |= propagateChildrenFlags(node.elements);
             node.transformFlags &= ~16777216;
@@ -19260,7 +19695,7 @@
                 : node;
         }
         function createExportSpecifier(propertyName, name) {
-            var node = createBaseNode(271);
+            var node = createBaseNode(273);
             node.propertyName = asName(propertyName);
             node.name = asName(name);
             node.transformFlags |=
@@ -19276,11 +19711,11 @@
                 : node;
         }
         function createMissingDeclaration() {
-            var node = createBaseDeclaration(272, undefined, undefined);
+            var node = createBaseDeclaration(274, undefined, undefined);
             return node;
         }
         function createExternalModuleReference(expression) {
-            var node = createBaseNode(273);
+            var node = createBaseNode(275);
             node.expression = expression;
             node.transformFlags |= propagateChildFlags(node.expression);
             node.transformFlags &= ~16777216;
@@ -19305,7 +19740,7 @@
                 : node;
         }
         function createJSDocFunctionType(parameters, type) {
-            var node = createBaseSignatureDeclaration(309, undefined, undefined, undefined, undefined, parameters, type);
+            var node = createBaseSignatureDeclaration(312, undefined, undefined, undefined, undefined, parameters, type);
             return node;
         }
         function updateJSDocFunctionType(node, parameters, type) {
@@ -19316,7 +19751,7 @@
         }
         function createJSDocTypeLiteral(propertyTags, isArrayType) {
             if (isArrayType === void 0) { isArrayType = false; }
-            var node = createBaseNode(314);
+            var node = createBaseNode(317);
             node.jsDocPropertyTags = asNodeArray(propertyTags);
             node.isArrayType = isArrayType;
             return node;
@@ -19328,7 +19763,7 @@
                 : node;
         }
         function createJSDocTypeExpression(type) {
-            var node = createBaseNode(302);
+            var node = createBaseNode(304);
             node.type = type;
             return node;
         }
@@ -19338,7 +19773,7 @@
                 : node;
         }
         function createJSDocSignature(typeParameters, parameters, type) {
-            var node = createBaseNode(315);
+            var node = createBaseNode(318);
             node.typeParameters = asNodeArray(typeParameters);
             node.parameters = createNodeArray(parameters);
             node.type = type;
@@ -19364,7 +19799,7 @@
             return node;
         }
         function createJSDocTemplateTag(tagName, constraint, typeParameters, comment) {
-            var node = createBaseJSDocTag(334, tagName !== null && tagName !== void 0 ? tagName : createIdentifier("template"), comment);
+            var node = createBaseJSDocTag(339, tagName !== null && tagName !== void 0 ? tagName : createIdentifier("template"), comment);
             node.constraint = constraint;
             node.typeParameters = createNodeArray(typeParameters);
             return node;
@@ -19379,7 +19814,7 @@
                 : node;
         }
         function createJSDocTypedefTag(tagName, typeExpression, fullName, comment) {
-            var node = createBaseJSDocTag(335, tagName !== null && tagName !== void 0 ? tagName : createIdentifier("typedef"), comment);
+            var node = createBaseJSDocTag(340, tagName !== null && tagName !== void 0 ? tagName : createIdentifier("typedef"), comment);
             node.typeExpression = typeExpression;
             node.fullName = fullName;
             node.name = ts.getJSDocTypeAliasName(fullName);
@@ -19395,7 +19830,7 @@
                 : node;
         }
         function createJSDocParameterTag(tagName, name, isBracketed, typeExpression, isNameFirst, comment) {
-            var node = createBaseJSDocTag(330, tagName !== null && tagName !== void 0 ? tagName : createIdentifier("param"), comment);
+            var node = createBaseJSDocTag(335, tagName !== null && tagName !== void 0 ? tagName : createIdentifier("param"), comment);
             node.typeExpression = typeExpression;
             node.name = name;
             node.isNameFirst = !!isNameFirst;
@@ -19414,7 +19849,7 @@
                 : node;
         }
         function createJSDocPropertyTag(tagName, name, isBracketed, typeExpression, isNameFirst, comment) {
-            var node = createBaseJSDocTag(337, tagName !== null && tagName !== void 0 ? tagName : createIdentifier("prop"), comment);
+            var node = createBaseJSDocTag(342, tagName !== null && tagName !== void 0 ? tagName : createIdentifier("prop"), comment);
             node.typeExpression = typeExpression;
             node.name = name;
             node.isNameFirst = !!isNameFirst;
@@ -19433,7 +19868,7 @@
                 : node;
         }
         function createJSDocCallbackTag(tagName, typeExpression, fullName, comment) {
-            var node = createBaseJSDocTag(328, tagName !== null && tagName !== void 0 ? tagName : createIdentifier("callback"), comment);
+            var node = createBaseJSDocTag(333, tagName !== null && tagName !== void 0 ? tagName : createIdentifier("callback"), comment);
             node.typeExpression = typeExpression;
             node.fullName = fullName;
             node.name = ts.getJSDocTypeAliasName(fullName);
@@ -19449,7 +19884,7 @@
                 : node;
         }
         function createJSDocAugmentsTag(tagName, className, comment) {
-            var node = createBaseJSDocTag(318, tagName !== null && tagName !== void 0 ? tagName : createIdentifier("augments"), comment);
+            var node = createBaseJSDocTag(323, tagName !== null && tagName !== void 0 ? tagName : createIdentifier("augments"), comment);
             node.class = className;
             return node;
         }
@@ -19462,12 +19897,12 @@
                 : node;
         }
         function createJSDocImplementsTag(tagName, className, comment) {
-            var node = createBaseJSDocTag(319, tagName !== null && tagName !== void 0 ? tagName : createIdentifier("implements"), comment);
+            var node = createBaseJSDocTag(324, tagName !== null && tagName !== void 0 ? tagName : createIdentifier("implements"), comment);
             node.class = className;
             return node;
         }
         function createJSDocSeeTag(tagName, name, comment) {
-            var node = createBaseJSDocTag(336, tagName !== null && tagName !== void 0 ? tagName : createIdentifier("see"), comment);
+            var node = createBaseJSDocTag(341, tagName !== null && tagName !== void 0 ? tagName : createIdentifier("see"), comment);
             node.name = name;
             return node;
         }
@@ -19479,7 +19914,7 @@
                 : node;
         }
         function createJSDocNameReference(name) {
-            var node = createBaseNode(303);
+            var node = createBaseNode(305);
             node.name = name;
             return node;
         }
@@ -19488,8 +19923,23 @@
                 ? update(createJSDocNameReference(name), node)
                 : node;
         }
+        function createJSDocMemberName(left, right) {
+            var node = createBaseNode(306);
+            node.left = left;
+            node.right = right;
+            node.transformFlags |=
+                propagateChildFlags(node.left) |
+                    propagateChildFlags(node.right);
+            return node;
+        }
+        function updateJSDocMemberName(node, left, right) {
+            return node.left !== left
+                || node.right !== right
+                ? update(createJSDocMemberName(left, right), node)
+                : node;
+        }
         function createJSDocLink(name, text) {
-            var node = createBaseNode(316);
+            var node = createBaseNode(319);
             node.name = name;
             node.text = text;
             return node;
@@ -19499,6 +19949,28 @@
                 ? update(createJSDocLink(name, text), node)
                 : node;
         }
+        function createJSDocLinkCode(name, text) {
+            var node = createBaseNode(320);
+            node.name = name;
+            node.text = text;
+            return node;
+        }
+        function updateJSDocLinkCode(node, name, text) {
+            return node.name !== name
+                ? update(createJSDocLinkCode(name, text), node)
+                : node;
+        }
+        function createJSDocLinkPlain(name, text) {
+            var node = createBaseNode(321);
+            node.name = name;
+            node.text = text;
+            return node;
+        }
+        function updateJSDocLinkPlain(node, name, text) {
+            return node.name !== name
+                ? update(createJSDocLinkPlain(name, text), node)
+                : node;
+        }
         function updateJSDocImplementsTag(node, tagName, className, comment) {
             if (tagName === void 0) { tagName = getDefaultTagName(node); }
             return node.tagName !== tagName
@@ -19532,7 +20004,7 @@
                 : node;
         }
         function createJSDocUnknownTag(tagName, comment) {
-            var node = createBaseJSDocTag(317, tagName, comment);
+            var node = createBaseJSDocTag(322, tagName, comment);
             return node;
         }
         function updateJSDocUnknownTag(node, tagName, comment) {
@@ -19542,7 +20014,7 @@
                 : node;
         }
         function createJSDocText(text) {
-            var node = createBaseNode(313);
+            var node = createBaseNode(316);
             node.text = text;
             return node;
         }
@@ -19552,7 +20024,7 @@
                 : node;
         }
         function createJSDocComment(comment, tags) {
-            var node = createBaseNode(312);
+            var node = createBaseNode(315);
             node.comment = comment;
             node.tags = asNodeArray(tags);
             return node;
@@ -19564,7 +20036,7 @@
                 : node;
         }
         function createJsxElement(openingElement, children, closingElement) {
-            var node = createBaseNode(274);
+            var node = createBaseNode(276);
             node.openingElement = openingElement;
             node.children = createNodeArray(children);
             node.closingElement = closingElement;
@@ -19583,7 +20055,7 @@
                 : node;
         }
         function createJsxSelfClosingElement(tagName, typeArguments, attributes) {
-            var node = createBaseNode(275);
+            var node = createBaseNode(277);
             node.tagName = tagName;
             node.typeArguments = asNodeArray(typeArguments);
             node.attributes = attributes;
@@ -19605,7 +20077,7 @@
                 : node;
         }
         function createJsxOpeningElement(tagName, typeArguments, attributes) {
-            var node = createBaseNode(276);
+            var node = createBaseNode(278);
             node.tagName = tagName;
             node.typeArguments = asNodeArray(typeArguments);
             node.attributes = attributes;
@@ -19627,7 +20099,7 @@
                 : node;
         }
         function createJsxClosingElement(tagName) {
-            var node = createBaseNode(277);
+            var node = createBaseNode(279);
             node.tagName = tagName;
             node.transformFlags |=
                 propagateChildFlags(node.tagName) |
@@ -19640,7 +20112,7 @@
                 : node;
         }
         function createJsxFragment(openingFragment, children, closingFragment) {
-            var node = createBaseNode(278);
+            var node = createBaseNode(280);
             node.openingFragment = openingFragment;
             node.children = createNodeArray(children);
             node.closingFragment = closingFragment;
@@ -19672,17 +20144,17 @@
                 : node;
         }
         function createJsxOpeningFragment() {
-            var node = createBaseNode(279);
+            var node = createBaseNode(281);
             node.transformFlags |= 2;
             return node;
         }
         function createJsxJsxClosingFragment() {
-            var node = createBaseNode(280);
+            var node = createBaseNode(282);
             node.transformFlags |= 2;
             return node;
         }
         function createJsxAttribute(name, initializer) {
-            var node = createBaseNode(281);
+            var node = createBaseNode(283);
             node.name = name;
             node.initializer = initializer;
             node.transformFlags |=
@@ -19698,7 +20170,7 @@
                 : node;
         }
         function createJsxAttributes(properties) {
-            var node = createBaseNode(282);
+            var node = createBaseNode(284);
             node.properties = createNodeArray(properties);
             node.transformFlags |=
                 propagateChildrenFlags(node.properties) |
@@ -19711,7 +20183,7 @@
                 : node;
         }
         function createJsxSpreadAttribute(expression) {
-            var node = createBaseNode(283);
+            var node = createBaseNode(285);
             node.expression = expression;
             node.transformFlags |=
                 propagateChildFlags(node.expression) |
@@ -19724,7 +20196,7 @@
                 : node;
         }
         function createJsxExpression(dotDotDotToken, expression) {
-            var node = createBaseNode(284);
+            var node = createBaseNode(286);
             node.dotDotDotToken = dotDotDotToken;
             node.expression = expression;
             node.transformFlags |=
@@ -19739,7 +20211,7 @@
                 : node;
         }
         function createCaseClause(expression, statements) {
-            var node = createBaseNode(285);
+            var node = createBaseNode(287);
             node.expression = parenthesizerRules().parenthesizeExpressionForDisallowedComma(expression);
             node.statements = createNodeArray(statements);
             node.transformFlags |=
@@ -19754,7 +20226,7 @@
                 : node;
         }
         function createDefaultClause(statements) {
-            var node = createBaseNode(286);
+            var node = createBaseNode(288);
             node.statements = createNodeArray(statements);
             node.transformFlags = propagateChildrenFlags(node.statements);
             return node;
@@ -19765,15 +20237,15 @@
                 : node;
         }
         function createHeritageClause(token, types) {
-            var node = createBaseNode(287);
+            var node = createBaseNode(289);
             node.token = token;
             node.types = createNodeArray(types);
             node.transformFlags |= propagateChildrenFlags(node.types);
             switch (token) {
-                case 93:
+                case 94:
                     node.transformFlags |= 512;
                     break;
-                case 116:
+                case 117:
                     node.transformFlags |= 1;
                     break;
                 default:
@@ -19787,7 +20259,7 @@
                 : node;
         }
         function createCatchClause(variableDeclaration, block) {
-            var node = createBaseNode(288);
+            var node = createBaseNode(290);
             variableDeclaration = !ts.isString(variableDeclaration) ? variableDeclaration : createVariableDeclaration(variableDeclaration, undefined, undefined, undefined);
             node.variableDeclaration = variableDeclaration;
             node.block = block;
@@ -19805,7 +20277,7 @@
                 : node;
         }
         function createPropertyAssignment(name, initializer) {
-            var node = createBaseNamedDeclaration(289, undefined, undefined, name);
+            var node = createBaseNamedDeclaration(291, undefined, undefined, name);
             node.initializer = parenthesizerRules().parenthesizeExpressionForDisallowedComma(initializer);
             node.transformFlags |=
                 propagateChildFlags(node.name) |
@@ -19830,7 +20302,7 @@
                 : node;
         }
         function createShorthandPropertyAssignment(name, objectAssignmentInitializer) {
-            var node = createBaseNamedDeclaration(290, undefined, undefined, name);
+            var node = createBaseNamedDeclaration(292, undefined, undefined, name);
             node.objectAssignmentInitializer = objectAssignmentInitializer && parenthesizerRules().parenthesizeExpressionForDisallowedComma(objectAssignmentInitializer);
             node.transformFlags |=
                 propagateChildFlags(node.objectAssignmentInitializer) |
@@ -19857,7 +20329,7 @@
                 : node;
         }
         function createSpreadAssignment(expression) {
-            var node = createBaseNode(291);
+            var node = createBaseNode(293);
             node.expression = parenthesizerRules().parenthesizeExpressionForDisallowedComma(expression);
             node.transformFlags |=
                 propagateChildFlags(node.expression) |
@@ -19871,7 +20343,7 @@
                 : node;
         }
         function createEnumMember(name, initializer) {
-            var node = createBaseNode(292);
+            var node = createBaseNode(294);
             node.name = asName(name);
             node.initializer = initializer && parenthesizerRules().parenthesizeExpressionForDisallowedComma(initializer);
             node.transformFlags |=
@@ -19887,7 +20359,7 @@
                 : node;
         }
         function createSourceFile(statements, endOfFileToken, flags) {
-            var node = baseFactory.createBaseSourceFileNode(298);
+            var node = baseFactory.createBaseSourceFileNode(300);
             node.statements = createNodeArray(statements);
             node.endOfFileToken = endOfFileToken;
             node.flags |= flags;
@@ -19904,7 +20376,7 @@
             return node;
         }
         function cloneSourceFileWithChanges(source, statements, isDeclarationFile, referencedFiles, typeReferences, hasNoDefaultLib, libReferences) {
-            var node = baseFactory.createBaseSourceFileNode(298);
+            var node = baseFactory.createBaseSourceFileNode(300);
             for (var p in source) {
                 if (p === "emitNode" || ts.hasProperty(node, p) || !ts.hasProperty(source, p))
                     continue;
@@ -19940,7 +20412,7 @@
         }
         function createBundle(sourceFiles, prepends) {
             if (prepends === void 0) { prepends = ts.emptyArray; }
-            var node = createBaseNode(299);
+            var node = createBaseNode(301);
             node.prepends = prepends;
             node.sourceFiles = sourceFiles;
             return node;
@@ -19953,7 +20425,7 @@
                 : node;
         }
         function createUnparsedSource(prologues, syntheticReferences, texts) {
-            var node = createBaseNode(300);
+            var node = createBaseNode(302);
             node.prologues = prologues;
             node.syntheticReferences = syntheticReferences;
             node.texts = texts;
@@ -19970,49 +20442,49 @@
             return node;
         }
         function createUnparsedPrologue(data) {
-            return createBaseUnparsedNode(293, data);
+            return createBaseUnparsedNode(295, data);
         }
         function createUnparsedPrepend(data, texts) {
-            var node = createBaseUnparsedNode(294, data);
+            var node = createBaseUnparsedNode(296, data);
             node.texts = texts;
             return node;
         }
         function createUnparsedTextLike(data, internal) {
-            return createBaseUnparsedNode(internal ? 296 : 295, data);
+            return createBaseUnparsedNode(internal ? 298 : 297, data);
         }
         function createUnparsedSyntheticReference(section) {
-            var node = createBaseNode(297);
+            var node = createBaseNode(299);
             node.data = section.data;
             node.section = section;
             return node;
         }
         function createInputFiles() {
-            var node = createBaseNode(301);
+            var node = createBaseNode(303);
             node.javascriptText = "";
             node.declarationText = "";
             return node;
         }
         function createSyntheticExpression(type, isSpread, tupleNameSource) {
             if (isSpread === void 0) { isSpread = false; }
-            var node = createBaseNode(228);
+            var node = createBaseNode(230);
             node.type = type;
             node.isSpread = isSpread;
             node.tupleNameSource = tupleNameSource;
             return node;
         }
         function createSyntaxList(children) {
-            var node = createBaseNode(338);
+            var node = createBaseNode(343);
             node._children = children;
             return node;
         }
         function createNotEmittedStatement(original) {
-            var node = createBaseNode(339);
+            var node = createBaseNode(344);
             node.original = original;
             ts.setTextRange(node, original);
             return node;
         }
         function createPartiallyEmittedExpression(expression, original) {
-            var node = createBaseNode(340);
+            var node = createBaseNode(345);
             node.expression = expression;
             node.original = original;
             node.transformFlags |=
@@ -20038,7 +20510,7 @@
             return node;
         }
         function createCommaListExpression(elements) {
-            var node = createBaseNode(341);
+            var node = createBaseNode(346);
             node.elements = createNodeArray(ts.sameFlatMap(elements, flattenCommaElements));
             node.transformFlags |= propagateChildrenFlags(node.elements);
             return node;
@@ -20049,19 +20521,19 @@
                 : node;
         }
         function createEndOfDeclarationMarker(original) {
-            var node = createBaseNode(343);
+            var node = createBaseNode(348);
             node.emitNode = {};
             node.original = original;
             return node;
         }
         function createMergeDeclarationMarker(original) {
-            var node = createBaseNode(342);
+            var node = createBaseNode(347);
             node.emitNode = {};
             node.original = original;
             return node;
         }
         function createSyntheticReferenceExpression(expression, thisArg) {
-            var node = createBaseNode(344);
+            var node = createBaseNode(349);
             node.expression = expression;
             node.thisArg = thisArg;
             node.transformFlags |=
@@ -20079,9 +20551,9 @@
             if (node === undefined) {
                 return node;
             }
-            var clone = ts.isSourceFile(node) ? baseFactory.createBaseSourceFileNode(298) :
-                ts.isIdentifier(node) ? baseFactory.createBaseIdentifierNode(78) :
-                    ts.isPrivateIdentifier(node) ? baseFactory.createBasePrivateIdentifierNode(79) :
+            var clone = ts.isSourceFile(node) ? baseFactory.createBaseSourceFileNode(300) :
+                ts.isIdentifier(node) ? baseFactory.createBaseIdentifierNode(79) :
+                    ts.isPrivateIdentifier(node) ? baseFactory.createBasePrivateIdentifierNode(80) :
                         !ts.isNodeKind(node.kind) ? baseFactory.createBaseTokenNode(node.kind) :
                             baseFactory.createBaseNode(node.kind);
             clone.flags |= (node.flags & ~8);
@@ -20118,13 +20590,16 @@
                 : factory.createStrictEquality(createTypeOfExpression(value), createStringLiteral(tag));
         }
         function createMethodCall(object, methodName, argumentsList) {
+            if (ts.isCallChain(object)) {
+                return createCallChain(createPropertyAccessChain(object, undefined, methodName), undefined, undefined, argumentsList);
+            }
             return createCallExpression(createPropertyAccessExpression(object, methodName), undefined, argumentsList);
         }
         function createFunctionBindCall(target, thisArg, argumentsList) {
-            return createMethodCall(target, "bind", __spreadArray([thisArg], argumentsList));
+            return createMethodCall(target, "bind", __spreadArray([thisArg], argumentsList, true));
         }
         function createFunctionCallCall(target, thisArg, argumentsList) {
-            return createMethodCall(target, "call", __spreadArray([thisArg], argumentsList));
+            return createMethodCall(target, "call", __spreadArray([thisArg], argumentsList, true));
         }
         function createFunctionApplyCall(target, thisArg, argumentsExpression) {
             return createMethodCall(target, "apply", [thisArg, argumentsExpression]);
@@ -20141,6 +20616,12 @@
         function createObjectDefinePropertyCall(target, propertyName, attributes) {
             return createGlobalMethodCall("Object", "defineProperty", [target, asExpression(propertyName), attributes]);
         }
+        function createReflectGetCall(target, propertyKey, receiver) {
+            return createGlobalMethodCall("Reflect", "get", receiver ? [target, propertyKey, receiver] : [target, propertyKey]);
+        }
+        function createReflectSetCall(target, propertyKey, value, receiver) {
+            return createGlobalMethodCall("Reflect", "set", receiver ? [target, propertyKey, value, receiver] : [target, propertyKey, value]);
+        }
         function tryAddPropertyAssignment(properties, propertyName, expression) {
             if (expression) {
                 properties.push(createPropertyAssignment(propertyName, expression));
@@ -20161,11 +20642,11 @@
         }
         function updateOuterExpression(outerExpression, expression) {
             switch (outerExpression.kind) {
-                case 208: return updateParenthesizedExpression(outerExpression, expression);
-                case 207: return updateTypeAssertion(outerExpression, outerExpression.type, expression);
-                case 225: return updateAsExpression(outerExpression, expression, outerExpression.type);
-                case 226: return updateNonNullExpression(outerExpression, expression);
-                case 340: return updatePartiallyEmittedExpression(outerExpression, expression);
+                case 210: return updateParenthesizedExpression(outerExpression, expression);
+                case 209: return updateTypeAssertion(outerExpression, outerExpression.type, expression);
+                case 227: return updateAsExpression(outerExpression, expression, outerExpression.type);
+                case 228: return updateNonNullExpression(outerExpression, expression);
+                case 345: return updatePartiallyEmittedExpression(outerExpression, expression);
             }
         }
         function isIgnorableParen(node) {
@@ -20198,20 +20679,20 @@
         function shouldBeCapturedInTempVariable(node, cacheIdentifiers) {
             var target = ts.skipParentheses(node);
             switch (target.kind) {
-                case 78:
+                case 79:
                     return cacheIdentifiers;
-                case 107:
+                case 108:
                 case 8:
                 case 9:
                 case 10:
                     return false;
-                case 200:
+                case 202:
                     var elements = target.elements;
                     if (elements.length === 0) {
                         return false;
                     }
                     return true;
-                case 201:
+                case 203:
                     return target.properties.length > 0;
                 default:
                     return true;
@@ -20264,6 +20745,13 @@
             }
             return { target: target, thisArg: thisArg };
         }
+        function createAssignmentTargetWrapper(paramName, expression) {
+            return createPropertyAccessExpression(createParenthesizedExpression(createObjectLiteralExpression([
+                createSetAccessorDeclaration(undefined, undefined, "value", [createParameterDeclaration(undefined, undefined, undefined, paramName, undefined, undefined, undefined)], createBlock([
+                    createExpressionStatement(expression)
+                ]))
+            ])), "value");
+        }
         function inlineExpressions(expressions) {
             return expressions.length > 10
                 ? createCommaListExpression(expressions)
@@ -20366,7 +20854,7 @@
         function ensureUseStrict(statements) {
             var foundUseStrict = ts.findUseStrictPrologue(statements);
             if (!foundUseStrict) {
-                return ts.setTextRange(createNodeArray(__spreadArray([createUseStrictPrologue()], statements)), statements);
+                return ts.setTextRange(createNodeArray(__spreadArray([createUseStrictPrologue()], statements, true)), statements);
             }
             return statements;
         }
@@ -20395,17 +20883,17 @@
             ts.Debug.assert(rightCustomPrologueEnd === declarations.length, "Expected declarations to be valid standard or custom prologues");
             var left = ts.isNodeArray(statements) ? statements.slice() : statements;
             if (rightCustomPrologueEnd > rightHoistedVariablesEnd) {
-                left.splice.apply(left, __spreadArray([leftHoistedVariablesEnd, 0], declarations.slice(rightHoistedVariablesEnd, rightCustomPrologueEnd)));
+                left.splice.apply(left, __spreadArray([leftHoistedVariablesEnd, 0], declarations.slice(rightHoistedVariablesEnd, rightCustomPrologueEnd), false));
             }
             if (rightHoistedVariablesEnd > rightHoistedFunctionsEnd) {
-                left.splice.apply(left, __spreadArray([leftHoistedFunctionsEnd, 0], declarations.slice(rightHoistedFunctionsEnd, rightHoistedVariablesEnd)));
+                left.splice.apply(left, __spreadArray([leftHoistedFunctionsEnd, 0], declarations.slice(rightHoistedFunctionsEnd, rightHoistedVariablesEnd), false));
             }
             if (rightHoistedFunctionsEnd > rightStandardPrologueEnd) {
-                left.splice.apply(left, __spreadArray([leftStandardPrologueEnd, 0], declarations.slice(rightStandardPrologueEnd, rightHoistedFunctionsEnd)));
+                left.splice.apply(left, __spreadArray([leftStandardPrologueEnd, 0], declarations.slice(rightStandardPrologueEnd, rightHoistedFunctionsEnd), false));
             }
             if (rightStandardPrologueEnd > 0) {
                 if (leftStandardPrologueEnd === 0) {
-                    left.splice.apply(left, __spreadArray([0, 0], declarations.slice(0, rightStandardPrologueEnd)));
+                    left.splice.apply(left, __spreadArray([0, 0], declarations.slice(0, rightStandardPrologueEnd), false));
                 }
                 else {
                     var leftPrologues = new ts.Map();
@@ -20492,24 +20980,24 @@
     }
     function getDefaultTagNameForKind(kind) {
         switch (kind) {
-            case 333: return "type";
-            case 331: return "returns";
-            case 332: return "this";
-            case 329: return "enum";
-            case 320: return "author";
-            case 322: return "class";
-            case 323: return "public";
-            case 324: return "private";
-            case 325: return "protected";
-            case 326: return "readonly";
-            case 327: return "override";
-            case 334: return "template";
-            case 335: return "typedef";
-            case 330: return "param";
-            case 337: return "prop";
-            case 328: return "callback";
-            case 318: return "augments";
-            case 319: return "implements";
+            case 338: return "type";
+            case 336: return "returns";
+            case 337: return "this";
+            case 334: return "enum";
+            case 325: return "author";
+            case 327: return "class";
+            case 328: return "public";
+            case 329: return "private";
+            case 330: return "protected";
+            case 331: return "readonly";
+            case 332: return "override";
+            case 339: return "template";
+            case 340: return "typedef";
+            case 335: return "param";
+            case 342: return "prop";
+            case 333: return "callback";
+            case 323: return "augments";
+            case 324: return "implements";
             default:
                 return ts.Debug.fail("Unsupported kind: " + ts.Debug.formatSyntaxKind(kind));
         }
@@ -20535,7 +21023,7 @@
                 break;
         }
         var token = rawTextScanner.scan();
-        if (token === 23) {
+        if (token === 19) {
             token = rawTextScanner.reScanTemplateToken(false);
         }
         if (rawTextScanner.isUnterminated()) {
@@ -20562,7 +21050,7 @@
         return propagateChildFlags(node) & ~16777216;
     }
     function propagatePropertyNameFlagsOfChild(node, transformFlags) {
-        return transformFlags | (node.transformFlags & 8192);
+        return transformFlags | (node.transformFlags & 33562624);
     }
     function propagateChildFlags(child) {
         if (!child)
@@ -20582,69 +21070,69 @@
         children.transformFlags = subtreeFlags;
     }
     function getTransformFlagsSubtreeExclusions(kind) {
-        if (kind >= 173 && kind <= 196) {
+        if (kind >= 175 && kind <= 198) {
             return -2;
         }
         switch (kind) {
-            case 204:
-            case 205:
-            case 200:
+            case 206:
+            case 207:
+            case 202:
                 return 536887296;
-            case 257:
-                return 555888640;
-            case 161:
+            case 259:
+                return 589443072;
+            case 162:
                 return 536870912;
-            case 210:
+            case 212:
                 return 557748224;
-            case 209:
-            case 252:
-                return 557756416;
-            case 251:
-                return 537165824;
+            case 211:
+            case 254:
+                return 591310848;
             case 253:
-            case 222:
+                return 537165824;
+            case 255:
+            case 224:
                 return 536940544;
-            case 167:
-                return 557752320;
-            case 164:
-                return 536879104;
-            case 166:
-            case 168:
             case 169:
-                return 540975104;
-            case 128:
-            case 144:
-            case 155:
-            case 141:
-            case 147:
-            case 145:
-            case 131:
-            case 148:
-            case 113:
-            case 160:
-            case 163:
+                return 591306752;
             case 165:
+                return 570433536;
+            case 167:
             case 170:
             case 171:
+                return 574529536;
+            case 129:
+            case 145:
+            case 156:
+            case 142:
+            case 148:
+            case 146:
+            case 132:
+            case 149:
+            case 114:
+            case 161:
+            case 164:
+            case 166:
             case 172:
-            case 254:
-            case 255:
+            case 173:
+            case 174:
+            case 256:
+            case 257:
                 return -2;
-            case 201:
-                return 536973312;
-            case 288:
-                return 536903680;
-            case 197:
-            case 198:
-                return 536887296;
-            case 207:
-            case 225:
-            case 340:
-            case 208:
-            case 105:
-                return 536870912;
-            case 202:
             case 203:
+                return 536973312;
+            case 290:
+                return 536903680;
+            case 199:
+            case 200:
+                return 536887296;
+            case 209:
+            case 227:
+            case 345:
+            case 210:
+            case 106:
+                return 536870912;
+            case 204:
+            case 205:
                 return 536870912;
             default:
                 return 536870912;
@@ -20893,7 +21381,7 @@
         if (trailingComments)
             destEmitNode.trailingComments = ts.addRange(trailingComments.slice(), destEmitNode.trailingComments);
         if (flags)
-            destEmitNode.flags = flags;
+            destEmitNode.flags = flags & ~268435456;
         if (commentRange)
             destEmitNode.commentRange = commentRange;
         if (sourceMapRange)
@@ -20927,7 +21415,7 @@
         var _a;
         if (!node.emitNode) {
             if (ts.isParseTreeNode(node)) {
-                if (node.kind === 298) {
+                if (node.kind === 300) {
                     return node.emitNode = { annotatedNodes: [node] };
                 }
                 var sourceFile = (_a = ts.getSourceFileOfNode(ts.getParseTreeNode(ts.getSourceFileOfNode(node)))) !== null && _a !== void 0 ? _a : ts.Debug.fail("Could not determine parsed source file.");
@@ -20935,6 +21423,9 @@
             }
             node.emitNode = {};
         }
+        else {
+            ts.Debug.assert(!(node.emitNode.flags & 268435456), "Invalid attempt to mutate an immutable node.");
+        }
         return node.emitNode;
     }
     ts.getOrCreateEmitNode = getOrCreateEmitNode;
@@ -21122,6 +21613,8 @@
 (function (ts) {
     function createEmitHelperFactory(context) {
         var factory = context.factory;
+        var immutableTrue = ts.memoize(function () { return ts.setEmitFlags(factory.createTrue(), 268435456); });
+        var immutableFalse = ts.memoize(function () { return ts.setEmitFlags(factory.createFalse(), 268435456); });
         return {
             getUnscopedHelperName: getUnscopedHelperName,
             createDecorateHelper: createDecorateHelper,
@@ -21250,9 +21743,9 @@
             context.requestEmitHelper(ts.templateObjectHelper);
             return factory.createCallExpression(getUnscopedHelperName("__makeTemplateObject"), undefined, [cooked, raw]);
         }
-        function createSpreadArrayHelper(to, from) {
+        function createSpreadArrayHelper(to, from, packFrom) {
             context.requestEmitHelper(ts.spreadArrayHelper);
-            return factory.createCallExpression(getUnscopedHelperName("__spreadArray"), undefined, [to, from]);
+            return factory.createCallExpression(getUnscopedHelperName("__spreadArray"), undefined, [to, from, packFrom ? immutableTrue() : immutableFalse()]);
         }
         function createValuesHelper(expression) {
             context.requestEmitHelper(ts.valuesHelper);
@@ -21270,7 +21763,7 @@
         }
         function createCreateBindingHelper(module, inputName, outputName) {
             context.requestEmitHelper(ts.createBindingHelper);
-            return factory.createCallExpression(getUnscopedHelperName("__createBinding"), undefined, __spreadArray([factory.createIdentifier("exports"), module, inputName], (outputName ? [outputName] : [])));
+            return factory.createCallExpression(getUnscopedHelperName("__createBinding"), undefined, __spreadArray([factory.createIdentifier("exports"), module, inputName], (outputName ? [outputName] : []), true));
         }
         function createImportStarHelper(expression) {
             context.requestEmitHelper(ts.importStarHelper);
@@ -21433,7 +21926,7 @@
         name: "typescript:spreadArray",
         importName: "__spreadArray",
         scoped: false,
-        text: "\n            var __spreadArray = (this && this.__spreadArray) || function (to, from) {\n                for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)\n                    to[j] = from[i];\n                return to;\n            };"
+        text: "\n            var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {\n                if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n                    if (ar || !(i in from)) {\n                        if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n                        ar[i] = from[i];\n                    }\n                }\n                return to.concat(ar || Array.prototype.slice.call(from));\n            };"
     };
     ts.valuesHelper = {
         name: "typescript:values",
@@ -21538,7 +22031,7 @@
     function isCallToHelper(firstSegment, helperName) {
         return ts.isCallExpression(firstSegment)
             && ts.isIdentifier(firstSegment.expression)
-            && (ts.getEmitFlags(firstSegment.expression) & 4096)
+            && (ts.getEmitFlags(firstSegment.expression) & 4096) !== 0
             && firstSegment.expression.escapedText === helperName;
     }
     ts.isCallToHelper = isCallToHelper;
@@ -21622,767 +22115,787 @@
     }
     ts.isEqualsGreaterThanToken = isEqualsGreaterThanToken;
     function isIdentifier(node) {
-        return node.kind === 78;
+        return node.kind === 79;
     }
     ts.isIdentifier = isIdentifier;
     function isPrivateIdentifier(node) {
-        return node.kind === 79;
+        return node.kind === 80;
     }
     ts.isPrivateIdentifier = isPrivateIdentifier;
     function isExportModifier(node) {
-        return node.kind === 92;
+        return node.kind === 93;
     }
     ts.isExportModifier = isExportModifier;
     function isAsyncModifier(node) {
-        return node.kind === 129;
+        return node.kind === 130;
     }
     ts.isAsyncModifier = isAsyncModifier;
     function isAssertsKeyword(node) {
-        return node.kind === 127;
+        return node.kind === 128;
     }
     ts.isAssertsKeyword = isAssertsKeyword;
     function isAwaitKeyword(node) {
-        return node.kind === 130;
+        return node.kind === 131;
     }
     ts.isAwaitKeyword = isAwaitKeyword;
     function isReadonlyKeyword(node) {
-        return node.kind === 142;
+        return node.kind === 143;
     }
     ts.isReadonlyKeyword = isReadonlyKeyword;
     function isStaticModifier(node) {
-        return node.kind === 123;
+        return node.kind === 124;
     }
     ts.isStaticModifier = isStaticModifier;
+    function isAbstractModifier(node) {
+        return node.kind === 126;
+    }
+    ts.isAbstractModifier = isAbstractModifier;
     function isSuperKeyword(node) {
-        return node.kind === 105;
+        return node.kind === 106;
     }
     ts.isSuperKeyword = isSuperKeyword;
     function isImportKeyword(node) {
-        return node.kind === 99;
+        return node.kind === 100;
     }
     ts.isImportKeyword = isImportKeyword;
     function isQualifiedName(node) {
-        return node.kind === 158;
+        return node.kind === 159;
     }
     ts.isQualifiedName = isQualifiedName;
     function isComputedPropertyName(node) {
-        return node.kind === 159;
+        return node.kind === 160;
     }
     ts.isComputedPropertyName = isComputedPropertyName;
     function isTypeParameterDeclaration(node) {
-        return node.kind === 160;
+        return node.kind === 161;
     }
     ts.isTypeParameterDeclaration = isTypeParameterDeclaration;
     function isParameter(node) {
-        return node.kind === 161;
+        return node.kind === 162;
     }
     ts.isParameter = isParameter;
     function isDecorator(node) {
-        return node.kind === 162;
+        return node.kind === 163;
     }
     ts.isDecorator = isDecorator;
     function isPropertySignature(node) {
-        return node.kind === 163;
+        return node.kind === 164;
     }
     ts.isPropertySignature = isPropertySignature;
     function isPropertyDeclaration(node) {
-        return node.kind === 164;
+        return node.kind === 165;
     }
     ts.isPropertyDeclaration = isPropertyDeclaration;
     function isMethodSignature(node) {
-        return node.kind === 165;
+        return node.kind === 166;
     }
     ts.isMethodSignature = isMethodSignature;
     function isMethodDeclaration(node) {
-        return node.kind === 166;
+        return node.kind === 167;
     }
     ts.isMethodDeclaration = isMethodDeclaration;
+    function isClassStaticBlockDeclaration(node) {
+        return node.kind === 168;
+    }
+    ts.isClassStaticBlockDeclaration = isClassStaticBlockDeclaration;
     function isConstructorDeclaration(node) {
-        return node.kind === 167;
+        return node.kind === 169;
     }
     ts.isConstructorDeclaration = isConstructorDeclaration;
     function isGetAccessorDeclaration(node) {
-        return node.kind === 168;
+        return node.kind === 170;
     }
     ts.isGetAccessorDeclaration = isGetAccessorDeclaration;
     function isSetAccessorDeclaration(node) {
-        return node.kind === 169;
+        return node.kind === 171;
     }
     ts.isSetAccessorDeclaration = isSetAccessorDeclaration;
     function isCallSignatureDeclaration(node) {
-        return node.kind === 170;
+        return node.kind === 172;
     }
     ts.isCallSignatureDeclaration = isCallSignatureDeclaration;
     function isConstructSignatureDeclaration(node) {
-        return node.kind === 171;
+        return node.kind === 173;
     }
     ts.isConstructSignatureDeclaration = isConstructSignatureDeclaration;
     function isIndexSignatureDeclaration(node) {
-        return node.kind === 172;
+        return node.kind === 174;
     }
     ts.isIndexSignatureDeclaration = isIndexSignatureDeclaration;
     function isTypePredicateNode(node) {
-        return node.kind === 173;
+        return node.kind === 175;
     }
     ts.isTypePredicateNode = isTypePredicateNode;
     function isTypeReferenceNode(node) {
-        return node.kind === 174;
+        return node.kind === 176;
     }
     ts.isTypeReferenceNode = isTypeReferenceNode;
     function isFunctionTypeNode(node) {
-        return node.kind === 175;
+        return node.kind === 177;
     }
     ts.isFunctionTypeNode = isFunctionTypeNode;
     function isConstructorTypeNode(node) {
-        return node.kind === 176;
+        return node.kind === 178;
     }
     ts.isConstructorTypeNode = isConstructorTypeNode;
     function isTypeQueryNode(node) {
-        return node.kind === 177;
+        return node.kind === 179;
     }
     ts.isTypeQueryNode = isTypeQueryNode;
     function isTypeLiteralNode(node) {
-        return node.kind === 178;
+        return node.kind === 180;
     }
     ts.isTypeLiteralNode = isTypeLiteralNode;
     function isArrayTypeNode(node) {
-        return node.kind === 179;
+        return node.kind === 181;
     }
     ts.isArrayTypeNode = isArrayTypeNode;
     function isTupleTypeNode(node) {
-        return node.kind === 180;
+        return node.kind === 182;
     }
     ts.isTupleTypeNode = isTupleTypeNode;
     function isNamedTupleMember(node) {
-        return node.kind === 193;
+        return node.kind === 195;
     }
     ts.isNamedTupleMember = isNamedTupleMember;
     function isOptionalTypeNode(node) {
-        return node.kind === 181;
+        return node.kind === 183;
     }
     ts.isOptionalTypeNode = isOptionalTypeNode;
     function isRestTypeNode(node) {
-        return node.kind === 182;
+        return node.kind === 184;
     }
     ts.isRestTypeNode = isRestTypeNode;
     function isUnionTypeNode(node) {
-        return node.kind === 183;
+        return node.kind === 185;
     }
     ts.isUnionTypeNode = isUnionTypeNode;
     function isIntersectionTypeNode(node) {
-        return node.kind === 184;
+        return node.kind === 186;
     }
     ts.isIntersectionTypeNode = isIntersectionTypeNode;
     function isConditionalTypeNode(node) {
-        return node.kind === 185;
+        return node.kind === 187;
     }
     ts.isConditionalTypeNode = isConditionalTypeNode;
     function isInferTypeNode(node) {
-        return node.kind === 186;
+        return node.kind === 188;
     }
     ts.isInferTypeNode = isInferTypeNode;
     function isParenthesizedTypeNode(node) {
-        return node.kind === 187;
+        return node.kind === 189;
     }
     ts.isParenthesizedTypeNode = isParenthesizedTypeNode;
     function isThisTypeNode(node) {
-        return node.kind === 188;
+        return node.kind === 190;
     }
     ts.isThisTypeNode = isThisTypeNode;
     function isTypeOperatorNode(node) {
-        return node.kind === 189;
+        return node.kind === 191;
     }
     ts.isTypeOperatorNode = isTypeOperatorNode;
     function isIndexedAccessTypeNode(node) {
-        return node.kind === 190;
+        return node.kind === 192;
     }
     ts.isIndexedAccessTypeNode = isIndexedAccessTypeNode;
     function isMappedTypeNode(node) {
-        return node.kind === 191;
+        return node.kind === 193;
     }
     ts.isMappedTypeNode = isMappedTypeNode;
     function isLiteralTypeNode(node) {
-        return node.kind === 192;
+        return node.kind === 194;
     }
     ts.isLiteralTypeNode = isLiteralTypeNode;
     function isImportTypeNode(node) {
-        return node.kind === 196;
+        return node.kind === 198;
     }
     ts.isImportTypeNode = isImportTypeNode;
     function isTemplateLiteralTypeSpan(node) {
-        return node.kind === 195;
+        return node.kind === 197;
     }
     ts.isTemplateLiteralTypeSpan = isTemplateLiteralTypeSpan;
     function isTemplateLiteralTypeNode(node) {
-        return node.kind === 194;
+        return node.kind === 196;
     }
     ts.isTemplateLiteralTypeNode = isTemplateLiteralTypeNode;
     function isObjectBindingPattern(node) {
-        return node.kind === 197;
+        return node.kind === 199;
     }
     ts.isObjectBindingPattern = isObjectBindingPattern;
     function isArrayBindingPattern(node) {
-        return node.kind === 198;
+        return node.kind === 200;
     }
     ts.isArrayBindingPattern = isArrayBindingPattern;
     function isBindingElement(node) {
-        return node.kind === 199;
+        return node.kind === 201;
     }
     ts.isBindingElement = isBindingElement;
     function isArrayLiteralExpression(node) {
-        return node.kind === 200;
+        return node.kind === 202;
     }
     ts.isArrayLiteralExpression = isArrayLiteralExpression;
     function isObjectLiteralExpression(node) {
-        return node.kind === 201;
+        return node.kind === 203;
     }
     ts.isObjectLiteralExpression = isObjectLiteralExpression;
     function isPropertyAccessExpression(node) {
-        return node.kind === 202;
+        return node.kind === 204;
     }
     ts.isPropertyAccessExpression = isPropertyAccessExpression;
     function isElementAccessExpression(node) {
-        return node.kind === 203;
+        return node.kind === 205;
     }
     ts.isElementAccessExpression = isElementAccessExpression;
     function isCallExpression(node) {
-        return node.kind === 204;
+        return node.kind === 206;
     }
     ts.isCallExpression = isCallExpression;
     function isNewExpression(node) {
-        return node.kind === 205;
+        return node.kind === 207;
     }
     ts.isNewExpression = isNewExpression;
     function isTaggedTemplateExpression(node) {
-        return node.kind === 206;
+        return node.kind === 208;
     }
     ts.isTaggedTemplateExpression = isTaggedTemplateExpression;
     function isTypeAssertionExpression(node) {
-        return node.kind === 207;
+        return node.kind === 209;
     }
     ts.isTypeAssertionExpression = isTypeAssertionExpression;
     function isParenthesizedExpression(node) {
-        return node.kind === 208;
+        return node.kind === 210;
     }
     ts.isParenthesizedExpression = isParenthesizedExpression;
     function isFunctionExpression(node) {
-        return node.kind === 209;
+        return node.kind === 211;
     }
     ts.isFunctionExpression = isFunctionExpression;
     function isArrowFunction(node) {
-        return node.kind === 210;
+        return node.kind === 212;
     }
     ts.isArrowFunction = isArrowFunction;
     function isDeleteExpression(node) {
-        return node.kind === 211;
+        return node.kind === 213;
     }
     ts.isDeleteExpression = isDeleteExpression;
     function isTypeOfExpression(node) {
-        return node.kind === 212;
+        return node.kind === 214;
     }
     ts.isTypeOfExpression = isTypeOfExpression;
     function isVoidExpression(node) {
-        return node.kind === 213;
+        return node.kind === 215;
     }
     ts.isVoidExpression = isVoidExpression;
     function isAwaitExpression(node) {
-        return node.kind === 214;
+        return node.kind === 216;
     }
     ts.isAwaitExpression = isAwaitExpression;
     function isPrefixUnaryExpression(node) {
-        return node.kind === 215;
+        return node.kind === 217;
     }
     ts.isPrefixUnaryExpression = isPrefixUnaryExpression;
     function isPostfixUnaryExpression(node) {
-        return node.kind === 216;
+        return node.kind === 218;
     }
     ts.isPostfixUnaryExpression = isPostfixUnaryExpression;
     function isBinaryExpression(node) {
-        return node.kind === 217;
+        return node.kind === 219;
     }
     ts.isBinaryExpression = isBinaryExpression;
     function isConditionalExpression(node) {
-        return node.kind === 218;
+        return node.kind === 220;
     }
     ts.isConditionalExpression = isConditionalExpression;
     function isTemplateExpression(node) {
-        return node.kind === 219;
+        return node.kind === 221;
     }
     ts.isTemplateExpression = isTemplateExpression;
     function isYieldExpression(node) {
-        return node.kind === 220;
+        return node.kind === 222;
     }
     ts.isYieldExpression = isYieldExpression;
     function isSpreadElement(node) {
-        return node.kind === 221;
+        return node.kind === 223;
     }
     ts.isSpreadElement = isSpreadElement;
     function isClassExpression(node) {
-        return node.kind === 222;
+        return node.kind === 224;
     }
     ts.isClassExpression = isClassExpression;
     function isOmittedExpression(node) {
-        return node.kind === 223;
+        return node.kind === 225;
     }
     ts.isOmittedExpression = isOmittedExpression;
     function isExpressionWithTypeArguments(node) {
-        return node.kind === 224;
+        return node.kind === 226;
     }
     ts.isExpressionWithTypeArguments = isExpressionWithTypeArguments;
     function isAsExpression(node) {
-        return node.kind === 225;
+        return node.kind === 227;
     }
     ts.isAsExpression = isAsExpression;
     function isNonNullExpression(node) {
-        return node.kind === 226;
+        return node.kind === 228;
     }
     ts.isNonNullExpression = isNonNullExpression;
     function isMetaProperty(node) {
-        return node.kind === 227;
+        return node.kind === 229;
     }
     ts.isMetaProperty = isMetaProperty;
     function isSyntheticExpression(node) {
-        return node.kind === 228;
+        return node.kind === 230;
     }
     ts.isSyntheticExpression = isSyntheticExpression;
     function isPartiallyEmittedExpression(node) {
-        return node.kind === 340;
+        return node.kind === 345;
     }
     ts.isPartiallyEmittedExpression = isPartiallyEmittedExpression;
     function isCommaListExpression(node) {
-        return node.kind === 341;
+        return node.kind === 346;
     }
     ts.isCommaListExpression = isCommaListExpression;
     function isTemplateSpan(node) {
-        return node.kind === 229;
+        return node.kind === 231;
     }
     ts.isTemplateSpan = isTemplateSpan;
     function isSemicolonClassElement(node) {
-        return node.kind === 230;
+        return node.kind === 232;
     }
     ts.isSemicolonClassElement = isSemicolonClassElement;
     function isBlock(node) {
-        return node.kind === 231;
+        return node.kind === 233;
     }
     ts.isBlock = isBlock;
     function isVariableStatement(node) {
-        return node.kind === 233;
+        return node.kind === 235;
     }
     ts.isVariableStatement = isVariableStatement;
     function isEmptyStatement(node) {
-        return node.kind === 232;
+        return node.kind === 234;
     }
     ts.isEmptyStatement = isEmptyStatement;
     function isExpressionStatement(node) {
-        return node.kind === 234;
+        return node.kind === 236;
     }
     ts.isExpressionStatement = isExpressionStatement;
     function isIfStatement(node) {
-        return node.kind === 235;
+        return node.kind === 237;
     }
     ts.isIfStatement = isIfStatement;
     function isDoStatement(node) {
-        return node.kind === 236;
+        return node.kind === 238;
     }
     ts.isDoStatement = isDoStatement;
     function isWhileStatement(node) {
-        return node.kind === 237;
+        return node.kind === 239;
     }
     ts.isWhileStatement = isWhileStatement;
     function isForStatement(node) {
-        return node.kind === 238;
+        return node.kind === 240;
     }
     ts.isForStatement = isForStatement;
     function isForInStatement(node) {
-        return node.kind === 239;
+        return node.kind === 241;
     }
     ts.isForInStatement = isForInStatement;
     function isForOfStatement(node) {
-        return node.kind === 240;
+        return node.kind === 242;
     }
     ts.isForOfStatement = isForOfStatement;
     function isContinueStatement(node) {
-        return node.kind === 241;
+        return node.kind === 243;
     }
     ts.isContinueStatement = isContinueStatement;
     function isBreakStatement(node) {
-        return node.kind === 242;
+        return node.kind === 244;
     }
     ts.isBreakStatement = isBreakStatement;
     function isReturnStatement(node) {
-        return node.kind === 243;
+        return node.kind === 245;
     }
     ts.isReturnStatement = isReturnStatement;
     function isWithStatement(node) {
-        return node.kind === 244;
+        return node.kind === 246;
     }
     ts.isWithStatement = isWithStatement;
     function isSwitchStatement(node) {
-        return node.kind === 245;
+        return node.kind === 247;
     }
     ts.isSwitchStatement = isSwitchStatement;
     function isLabeledStatement(node) {
-        return node.kind === 246;
+        return node.kind === 248;
     }
     ts.isLabeledStatement = isLabeledStatement;
     function isThrowStatement(node) {
-        return node.kind === 247;
+        return node.kind === 249;
     }
     ts.isThrowStatement = isThrowStatement;
     function isTryStatement(node) {
-        return node.kind === 248;
+        return node.kind === 250;
     }
     ts.isTryStatement = isTryStatement;
     function isDebuggerStatement(node) {
-        return node.kind === 249;
+        return node.kind === 251;
     }
     ts.isDebuggerStatement = isDebuggerStatement;
     function isVariableDeclaration(node) {
-        return node.kind === 250;
+        return node.kind === 252;
     }
     ts.isVariableDeclaration = isVariableDeclaration;
     function isVariableDeclarationList(node) {
-        return node.kind === 251;
+        return node.kind === 253;
     }
     ts.isVariableDeclarationList = isVariableDeclarationList;
     function isFunctionDeclaration(node) {
-        return node.kind === 252;
+        return node.kind === 254;
     }
     ts.isFunctionDeclaration = isFunctionDeclaration;
     function isClassDeclaration(node) {
-        return node.kind === 253;
+        return node.kind === 255;
     }
     ts.isClassDeclaration = isClassDeclaration;
     function isInterfaceDeclaration(node) {
-        return node.kind === 254;
+        return node.kind === 256;
     }
     ts.isInterfaceDeclaration = isInterfaceDeclaration;
     function isTypeAliasDeclaration(node) {
-        return node.kind === 255;
+        return node.kind === 257;
     }
     ts.isTypeAliasDeclaration = isTypeAliasDeclaration;
     function isEnumDeclaration(node) {
-        return node.kind === 256;
+        return node.kind === 258;
     }
     ts.isEnumDeclaration = isEnumDeclaration;
     function isModuleDeclaration(node) {
-        return node.kind === 257;
+        return node.kind === 259;
     }
     ts.isModuleDeclaration = isModuleDeclaration;
     function isModuleBlock(node) {
-        return node.kind === 258;
+        return node.kind === 260;
     }
     ts.isModuleBlock = isModuleBlock;
     function isCaseBlock(node) {
-        return node.kind === 259;
+        return node.kind === 261;
     }
     ts.isCaseBlock = isCaseBlock;
     function isNamespaceExportDeclaration(node) {
-        return node.kind === 260;
+        return node.kind === 262;
     }
     ts.isNamespaceExportDeclaration = isNamespaceExportDeclaration;
     function isImportEqualsDeclaration(node) {
-        return node.kind === 261;
+        return node.kind === 263;
     }
     ts.isImportEqualsDeclaration = isImportEqualsDeclaration;
     function isImportDeclaration(node) {
-        return node.kind === 262;
+        return node.kind === 264;
     }
     ts.isImportDeclaration = isImportDeclaration;
     function isImportClause(node) {
-        return node.kind === 263;
+        return node.kind === 265;
     }
     ts.isImportClause = isImportClause;
     function isNamespaceImport(node) {
-        return node.kind === 264;
+        return node.kind === 266;
     }
     ts.isNamespaceImport = isNamespaceImport;
     function isNamespaceExport(node) {
-        return node.kind === 270;
+        return node.kind === 272;
     }
     ts.isNamespaceExport = isNamespaceExport;
     function isNamedImports(node) {
-        return node.kind === 265;
+        return node.kind === 267;
     }
     ts.isNamedImports = isNamedImports;
     function isImportSpecifier(node) {
-        return node.kind === 266;
+        return node.kind === 268;
     }
     ts.isImportSpecifier = isImportSpecifier;
     function isExportAssignment(node) {
-        return node.kind === 267;
+        return node.kind === 269;
     }
     ts.isExportAssignment = isExportAssignment;
     function isExportDeclaration(node) {
-        return node.kind === 268;
+        return node.kind === 270;
     }
     ts.isExportDeclaration = isExportDeclaration;
     function isNamedExports(node) {
-        return node.kind === 269;
+        return node.kind === 271;
     }
     ts.isNamedExports = isNamedExports;
     function isExportSpecifier(node) {
-        return node.kind === 271;
+        return node.kind === 273;
     }
     ts.isExportSpecifier = isExportSpecifier;
     function isMissingDeclaration(node) {
-        return node.kind === 272;
+        return node.kind === 274;
     }
     ts.isMissingDeclaration = isMissingDeclaration;
     function isNotEmittedStatement(node) {
-        return node.kind === 339;
+        return node.kind === 344;
     }
     ts.isNotEmittedStatement = isNotEmittedStatement;
     function isSyntheticReference(node) {
-        return node.kind === 344;
+        return node.kind === 349;
     }
     ts.isSyntheticReference = isSyntheticReference;
     function isMergeDeclarationMarker(node) {
-        return node.kind === 342;
+        return node.kind === 347;
     }
     ts.isMergeDeclarationMarker = isMergeDeclarationMarker;
     function isEndOfDeclarationMarker(node) {
-        return node.kind === 343;
+        return node.kind === 348;
     }
     ts.isEndOfDeclarationMarker = isEndOfDeclarationMarker;
     function isExternalModuleReference(node) {
-        return node.kind === 273;
+        return node.kind === 275;
     }
     ts.isExternalModuleReference = isExternalModuleReference;
     function isJsxElement(node) {
-        return node.kind === 274;
+        return node.kind === 276;
     }
     ts.isJsxElement = isJsxElement;
     function isJsxSelfClosingElement(node) {
-        return node.kind === 275;
+        return node.kind === 277;
     }
     ts.isJsxSelfClosingElement = isJsxSelfClosingElement;
     function isJsxOpeningElement(node) {
-        return node.kind === 276;
+        return node.kind === 278;
     }
     ts.isJsxOpeningElement = isJsxOpeningElement;
     function isJsxClosingElement(node) {
-        return node.kind === 277;
+        return node.kind === 279;
     }
     ts.isJsxClosingElement = isJsxClosingElement;
     function isJsxFragment(node) {
-        return node.kind === 278;
+        return node.kind === 280;
     }
     ts.isJsxFragment = isJsxFragment;
     function isJsxOpeningFragment(node) {
-        return node.kind === 279;
+        return node.kind === 281;
     }
     ts.isJsxOpeningFragment = isJsxOpeningFragment;
     function isJsxClosingFragment(node) {
-        return node.kind === 280;
+        return node.kind === 282;
     }
     ts.isJsxClosingFragment = isJsxClosingFragment;
     function isJsxAttribute(node) {
-        return node.kind === 281;
+        return node.kind === 283;
     }
     ts.isJsxAttribute = isJsxAttribute;
     function isJsxAttributes(node) {
-        return node.kind === 282;
+        return node.kind === 284;
     }
     ts.isJsxAttributes = isJsxAttributes;
     function isJsxSpreadAttribute(node) {
-        return node.kind === 283;
+        return node.kind === 285;
     }
     ts.isJsxSpreadAttribute = isJsxSpreadAttribute;
     function isJsxExpression(node) {
-        return node.kind === 284;
+        return node.kind === 286;
     }
     ts.isJsxExpression = isJsxExpression;
     function isCaseClause(node) {
-        return node.kind === 285;
+        return node.kind === 287;
     }
     ts.isCaseClause = isCaseClause;
     function isDefaultClause(node) {
-        return node.kind === 286;
+        return node.kind === 288;
     }
     ts.isDefaultClause = isDefaultClause;
     function isHeritageClause(node) {
-        return node.kind === 287;
+        return node.kind === 289;
     }
     ts.isHeritageClause = isHeritageClause;
     function isCatchClause(node) {
-        return node.kind === 288;
+        return node.kind === 290;
     }
     ts.isCatchClause = isCatchClause;
     function isPropertyAssignment(node) {
-        return node.kind === 289;
+        return node.kind === 291;
     }
     ts.isPropertyAssignment = isPropertyAssignment;
     function isShorthandPropertyAssignment(node) {
-        return node.kind === 290;
+        return node.kind === 292;
     }
     ts.isShorthandPropertyAssignment = isShorthandPropertyAssignment;
     function isSpreadAssignment(node) {
-        return node.kind === 291;
+        return node.kind === 293;
     }
     ts.isSpreadAssignment = isSpreadAssignment;
     function isEnumMember(node) {
-        return node.kind === 292;
+        return node.kind === 294;
     }
     ts.isEnumMember = isEnumMember;
     function isUnparsedPrepend(node) {
-        return node.kind === 294;
+        return node.kind === 296;
     }
     ts.isUnparsedPrepend = isUnparsedPrepend;
     function isSourceFile(node) {
-        return node.kind === 298;
+        return node.kind === 300;
     }
     ts.isSourceFile = isSourceFile;
     function isBundle(node) {
-        return node.kind === 299;
+        return node.kind === 301;
     }
     ts.isBundle = isBundle;
     function isUnparsedSource(node) {
-        return node.kind === 300;
+        return node.kind === 302;
     }
     ts.isUnparsedSource = isUnparsedSource;
     function isJSDocTypeExpression(node) {
-        return node.kind === 302;
+        return node.kind === 304;
     }
     ts.isJSDocTypeExpression = isJSDocTypeExpression;
     function isJSDocNameReference(node) {
-        return node.kind === 303;
+        return node.kind === 305;
     }
     ts.isJSDocNameReference = isJSDocNameReference;
+    function isJSDocMemberName(node) {
+        return node.kind === 306;
+    }
+    ts.isJSDocMemberName = isJSDocMemberName;
     function isJSDocLink(node) {
-        return node.kind === 316;
+        return node.kind === 319;
     }
     ts.isJSDocLink = isJSDocLink;
+    function isJSDocLinkCode(node) {
+        return node.kind === 320;
+    }
+    ts.isJSDocLinkCode = isJSDocLinkCode;
+    function isJSDocLinkPlain(node) {
+        return node.kind === 321;
+    }
+    ts.isJSDocLinkPlain = isJSDocLinkPlain;
     function isJSDocAllType(node) {
-        return node.kind === 304;
+        return node.kind === 307;
     }
     ts.isJSDocAllType = isJSDocAllType;
     function isJSDocUnknownType(node) {
-        return node.kind === 305;
+        return node.kind === 308;
     }
     ts.isJSDocUnknownType = isJSDocUnknownType;
     function isJSDocNullableType(node) {
-        return node.kind === 306;
+        return node.kind === 309;
     }
     ts.isJSDocNullableType = isJSDocNullableType;
     function isJSDocNonNullableType(node) {
-        return node.kind === 307;
+        return node.kind === 310;
     }
     ts.isJSDocNonNullableType = isJSDocNonNullableType;
     function isJSDocOptionalType(node) {
-        return node.kind === 308;
+        return node.kind === 311;
     }
     ts.isJSDocOptionalType = isJSDocOptionalType;
     function isJSDocFunctionType(node) {
-        return node.kind === 309;
+        return node.kind === 312;
     }
     ts.isJSDocFunctionType = isJSDocFunctionType;
     function isJSDocVariadicType(node) {
-        return node.kind === 310;
+        return node.kind === 313;
     }
     ts.isJSDocVariadicType = isJSDocVariadicType;
     function isJSDocNamepathType(node) {
-        return node.kind === 311;
+        return node.kind === 314;
     }
     ts.isJSDocNamepathType = isJSDocNamepathType;
     function isJSDoc(node) {
-        return node.kind === 312;
+        return node.kind === 315;
     }
     ts.isJSDoc = isJSDoc;
     function isJSDocTypeLiteral(node) {
-        return node.kind === 314;
+        return node.kind === 317;
     }
     ts.isJSDocTypeLiteral = isJSDocTypeLiteral;
     function isJSDocSignature(node) {
-        return node.kind === 315;
+        return node.kind === 318;
     }
     ts.isJSDocSignature = isJSDocSignature;
     function isJSDocAugmentsTag(node) {
-        return node.kind === 318;
+        return node.kind === 323;
     }
     ts.isJSDocAugmentsTag = isJSDocAugmentsTag;
     function isJSDocAuthorTag(node) {
-        return node.kind === 320;
+        return node.kind === 325;
     }
     ts.isJSDocAuthorTag = isJSDocAuthorTag;
     function isJSDocClassTag(node) {
-        return node.kind === 322;
+        return node.kind === 327;
     }
     ts.isJSDocClassTag = isJSDocClassTag;
     function isJSDocCallbackTag(node) {
-        return node.kind === 328;
+        return node.kind === 333;
     }
     ts.isJSDocCallbackTag = isJSDocCallbackTag;
     function isJSDocPublicTag(node) {
-        return node.kind === 323;
+        return node.kind === 328;
     }
     ts.isJSDocPublicTag = isJSDocPublicTag;
     function isJSDocPrivateTag(node) {
-        return node.kind === 324;
+        return node.kind === 329;
     }
     ts.isJSDocPrivateTag = isJSDocPrivateTag;
     function isJSDocProtectedTag(node) {
-        return node.kind === 325;
+        return node.kind === 330;
     }
     ts.isJSDocProtectedTag = isJSDocProtectedTag;
     function isJSDocReadonlyTag(node) {
-        return node.kind === 326;
+        return node.kind === 331;
     }
     ts.isJSDocReadonlyTag = isJSDocReadonlyTag;
     function isJSDocOverrideTag(node) {
-        return node.kind === 327;
+        return node.kind === 332;
     }
     ts.isJSDocOverrideTag = isJSDocOverrideTag;
     function isJSDocDeprecatedTag(node) {
-        return node.kind === 321;
+        return node.kind === 326;
     }
     ts.isJSDocDeprecatedTag = isJSDocDeprecatedTag;
     function isJSDocSeeTag(node) {
-        return node.kind === 336;
+        return node.kind === 341;
     }
     ts.isJSDocSeeTag = isJSDocSeeTag;
     function isJSDocEnumTag(node) {
-        return node.kind === 329;
+        return node.kind === 334;
     }
     ts.isJSDocEnumTag = isJSDocEnumTag;
     function isJSDocParameterTag(node) {
-        return node.kind === 330;
+        return node.kind === 335;
     }
     ts.isJSDocParameterTag = isJSDocParameterTag;
     function isJSDocReturnTag(node) {
-        return node.kind === 331;
+        return node.kind === 336;
     }
     ts.isJSDocReturnTag = isJSDocReturnTag;
     function isJSDocThisTag(node) {
-        return node.kind === 332;
+        return node.kind === 337;
     }
     ts.isJSDocThisTag = isJSDocThisTag;
     function isJSDocTypeTag(node) {
-        return node.kind === 333;
+        return node.kind === 338;
     }
     ts.isJSDocTypeTag = isJSDocTypeTag;
     function isJSDocTemplateTag(node) {
-        return node.kind === 334;
+        return node.kind === 339;
     }
     ts.isJSDocTemplateTag = isJSDocTemplateTag;
     function isJSDocTypedefTag(node) {
-        return node.kind === 335;
+        return node.kind === 340;
     }
     ts.isJSDocTypedefTag = isJSDocTypedefTag;
     function isJSDocUnknownTag(node) {
-        return node.kind === 317;
+        return node.kind === 322;
     }
     ts.isJSDocUnknownTag = isJSDocUnknownTag;
     function isJSDocPropertyTag(node) {
-        return node.kind === 337;
+        return node.kind === 342;
     }
     ts.isJSDocPropertyTag = isJSDocPropertyTag;
     function isJSDocImplementsTag(node) {
-        return node.kind === 319;
+        return node.kind === 324;
     }
     ts.isJSDocImplementsTag = isJSDocImplementsTag;
     function isSyntaxList(n) {
-        return n.kind === 338;
+        return n.kind === 343;
     }
     ts.isSyntaxList = isSyntaxList;
 })(ts || (ts = {}));
@@ -22487,7 +23000,7 @@
     ts.createForOfBindingStatement = createForOfBindingStatement;
     function insertLeadingStatement(factory, dest, source) {
         if (ts.isBlock(dest)) {
-            return factory.updateBlock(dest, ts.setTextRange(factory.createNodeArray(__spreadArray([source], dest.statements)), dest.statements));
+            return factory.updateBlock(dest, ts.setTextRange(factory.createNodeArray(__spreadArray([source], dest.statements, true)), dest.statements));
         }
         else {
             return factory.createBlock(factory.createNodeArray([dest, source]), true);
@@ -22543,18 +23056,41 @@
             ts.Debug.failBadSyntaxKind(property.name, "Private identifiers are not allowed in object literals.");
         }
         switch (property.kind) {
-            case 168:
-            case 169:
+            case 170:
+            case 171:
                 return createExpressionForAccessorDeclaration(factory, node.properties, property, receiver, !!node.multiLine);
-            case 289:
+            case 291:
                 return createExpressionForPropertyAssignment(factory, property, receiver);
-            case 290:
+            case 292:
                 return createExpressionForShorthandPropertyAssignment(factory, property, receiver);
-            case 166:
+            case 167:
                 return createExpressionForMethodDeclaration(factory, property, receiver);
         }
     }
     ts.createExpressionForObjectLiteralElementLike = createExpressionForObjectLiteralElementLike;
+    function expandPreOrPostfixIncrementOrDecrementExpression(factory, node, expression, recordTempVariable, resultVariable) {
+        var operator = node.operator;
+        ts.Debug.assert(operator === 45 || operator === 46, "Expected 'node' to be a pre- or post-increment or pre- or post-decrement expression");
+        var temp = factory.createTempVariable(recordTempVariable);
+        expression = factory.createAssignment(temp, expression);
+        ts.setTextRange(expression, node.operand);
+        var operation = ts.isPrefixUnaryExpression(node) ?
+            factory.createPrefixUnaryExpression(operator, temp) :
+            factory.createPostfixUnaryExpression(temp, operator);
+        ts.setTextRange(operation, node);
+        if (resultVariable) {
+            operation = factory.createAssignment(resultVariable, operation);
+            ts.setTextRange(operation, node);
+        }
+        expression = factory.createComma(expression, operation);
+        ts.setTextRange(expression, node);
+        if (ts.isPostfixUnaryExpression(node)) {
+            expression = factory.createComma(expression, temp);
+            ts.setTextRange(expression, node);
+        }
+        return expression;
+    }
+    ts.expandPreOrPostfixIncrementOrDecrementExpression = expandPreOrPostfixIncrementOrDecrementExpression;
     function isInternalName(node) {
         return (ts.getEmitFlags(node) & 32768) !== 0;
     }
@@ -22593,21 +23129,21 @@
     }
     ts.startsWithUseStrict = startsWithUseStrict;
     function isCommaSequence(node) {
-        return node.kind === 217 && node.operatorToken.kind === 27 ||
-            node.kind === 341;
+        return node.kind === 219 && node.operatorToken.kind === 27 ||
+            node.kind === 346;
     }
     ts.isCommaSequence = isCommaSequence;
     function isOuterExpression(node, kinds) {
         if (kinds === void 0) { kinds = 15; }
         switch (node.kind) {
-            case 208:
+            case 210:
                 return (kinds & 1) !== 0;
-            case 207:
-            case 225:
+            case 209:
+            case 227:
                 return (kinds & 2) !== 0;
-            case 226:
+            case 228:
                 return (kinds & 4) !== 0;
-            case 340:
+            case 345:
                 return (kinds & 8) !== 0;
         }
         return false;
@@ -22719,10 +23255,10 @@
             var name = namespaceDeclaration.name;
             return ts.isGeneratedIdentifier(name) ? name : factory.createIdentifier(ts.getSourceTextOfNodeFromSourceFile(sourceFile, name) || ts.idText(name));
         }
-        if (node.kind === 262 && node.importClause) {
+        if (node.kind === 264 && node.importClause) {
             return factory.getGeneratedNameForNode(node);
         }
-        if (node.kind === 268 && node.moduleSpecifier) {
+        if (node.kind === 270 && node.moduleSpecifier) {
             return factory.getGeneratedNameForNode(node);
         }
         return undefined;
@@ -22785,11 +23321,11 @@
         }
         if (ts.isObjectLiteralElementLike(bindingElement)) {
             switch (bindingElement.kind) {
-                case 289:
-                    return getTargetOfBindingOrAssignmentElement(bindingElement.initializer);
-                case 290:
-                    return bindingElement.name;
                 case 291:
+                    return getTargetOfBindingOrAssignmentElement(bindingElement.initializer);
+                case 292:
+                    return bindingElement.name;
+                case 293:
                     return getTargetOfBindingOrAssignmentElement(bindingElement.expression);
             }
             return undefined;
@@ -22805,11 +23341,11 @@
     ts.getTargetOfBindingOrAssignmentElement = getTargetOfBindingOrAssignmentElement;
     function getRestIndicatorOfBindingOrAssignmentElement(bindingElement) {
         switch (bindingElement.kind) {
-            case 161:
-            case 199:
+            case 162:
+            case 201:
                 return bindingElement.dotDotDotToken;
-            case 221:
-            case 291:
+            case 223:
+            case 293:
                 return bindingElement;
         }
         return undefined;
@@ -22823,7 +23359,7 @@
     ts.getPropertyNameOfBindingOrAssignmentElement = getPropertyNameOfBindingOrAssignmentElement;
     function tryGetPropertyNameOfBindingOrAssignmentElement(bindingElement) {
         switch (bindingElement.kind) {
-            case 199:
+            case 201:
                 if (bindingElement.propertyName) {
                     var propertyName = bindingElement.propertyName;
                     if (ts.isPrivateIdentifier(propertyName)) {
@@ -22834,7 +23370,7 @@
                         : propertyName;
                 }
                 break;
-            case 289:
+            case 291:
                 if (bindingElement.name) {
                     var propertyName = bindingElement.name;
                     if (ts.isPrivateIdentifier(propertyName)) {
@@ -22845,7 +23381,7 @@
                         : propertyName;
                 }
                 break;
-            case 291:
+            case 293:
                 if (bindingElement.name && ts.isPrivateIdentifier(bindingElement.name)) {
                     return ts.Debug.failBadSyntaxKind(bindingElement.name);
                 }
@@ -22864,11 +23400,11 @@
     }
     function getElementsOfBindingOrAssignmentPattern(name) {
         switch (name.kind) {
-            case 197:
-            case 198:
+            case 199:
             case 200:
+            case 202:
                 return name.elements;
-            case 201:
+            case 203:
                 return name.properties;
         }
     }
@@ -22887,29 +23423,29 @@
     ts.getJSDocTypeAliasName = getJSDocTypeAliasName;
     function canHaveModifiers(node) {
         var kind = node.kind;
-        return kind === 161
-            || kind === 163
+        return kind === 162
             || kind === 164
             || kind === 165
             || kind === 166
             || kind === 167
-            || kind === 168
             || kind === 169
-            || kind === 172
-            || kind === 209
-            || kind === 210
-            || kind === 222
-            || kind === 233
-            || kind === 252
-            || kind === 253
+            || kind === 170
+            || kind === 171
+            || kind === 174
+            || kind === 211
+            || kind === 212
+            || kind === 224
+            || kind === 235
             || kind === 254
             || kind === 255
             || kind === 256
             || kind === 257
-            || kind === 261
-            || kind === 262
-            || kind === 267
-            || kind === 268;
+            || kind === 258
+            || kind === 259
+            || kind === 263
+            || kind === 264
+            || kind === 269
+            || kind === 270;
     }
     ts.canHaveModifiers = canHaveModifiers;
     ts.isTypeNodeOrTypeParameterDeclaration = ts.or(ts.isTypeNode, ts.isTypeParameterDeclaration);
@@ -22920,9 +23456,9 @@
     ts.isModuleName = ts.or(ts.isIdentifier, ts.isStringLiteral);
     function isLiteralTypeLikeExpression(node) {
         var kind = node.kind;
-        return kind === 103
-            || kind === 109
-            || kind === 94
+        return kind === 104
+            || kind === 110
+            || kind === 95
             || ts.isLiteralExpression(node)
             || ts.isPrefixUnaryExpression(node);
     }
@@ -22961,8 +23497,8 @@
             || kind === 32
             || kind === 31
             || kind === 33
-            || kind === 101
-            || kind === 100;
+            || kind === 102
+            || kind === 101;
     }
     function isRelationalOperatorOrHigher(kind) {
         return isRelationalOperator(kind)
@@ -23181,19 +23717,19 @@
     }
     ts.isJSDocLikeText = isJSDocLikeText;
     function forEachChild(node, cbNode, cbNodes) {
-        if (!node || node.kind <= 157) {
+        if (!node || node.kind <= 158) {
             return;
         }
         switch (node.kind) {
-            case 158:
+            case 159:
                 return visitNode(cbNode, node.left) ||
                     visitNode(cbNode, node.right);
-            case 160:
+            case 161:
                 return visitNode(cbNode, node.name) ||
                     visitNode(cbNode, node.constraint) ||
                     visitNode(cbNode, node.default) ||
                     visitNode(cbNode, node.expression);
-            case 290:
+            case 292:
                 return visitNodes(cbNode, cbNodes, node.decorators) ||
                     visitNodes(cbNode, cbNodes, node.modifiers) ||
                     visitNode(cbNode, node.name) ||
@@ -23201,9 +23737,9 @@
                     visitNode(cbNode, node.exclamationToken) ||
                     visitNode(cbNode, node.equalsToken) ||
                     visitNode(cbNode, node.objectAssignmentInitializer);
-            case 291:
+            case 293:
                 return visitNode(cbNode, node.expression);
-            case 161:
+            case 162:
                 return visitNodes(cbNode, cbNodes, node.decorators) ||
                     visitNodes(cbNode, cbNodes, node.modifiers) ||
                     visitNode(cbNode, node.dotDotDotToken) ||
@@ -23211,59 +23747,59 @@
                     visitNode(cbNode, node.questionToken) ||
                     visitNode(cbNode, node.type) ||
                     visitNode(cbNode, node.initializer);
+            case 165:
+                return visitNodes(cbNode, cbNodes, node.decorators) ||
+                    visitNodes(cbNode, cbNodes, node.modifiers) ||
+                    visitNode(cbNode, node.name) ||
+                    visitNode(cbNode, node.questionToken) ||
+                    visitNode(cbNode, node.exclamationToken) ||
+                    visitNode(cbNode, node.type) ||
+                    visitNode(cbNode, node.initializer);
             case 164:
                 return visitNodes(cbNode, cbNodes, node.decorators) ||
                     visitNodes(cbNode, cbNodes, node.modifiers) ||
                     visitNode(cbNode, node.name) ||
                     visitNode(cbNode, node.questionToken) ||
-                    visitNode(cbNode, node.exclamationToken) ||
                     visitNode(cbNode, node.type) ||
                     visitNode(cbNode, node.initializer);
-            case 163:
-                return visitNodes(cbNode, cbNodes, node.decorators) ||
-                    visitNodes(cbNode, cbNodes, node.modifiers) ||
-                    visitNode(cbNode, node.name) ||
-                    visitNode(cbNode, node.questionToken) ||
-                    visitNode(cbNode, node.type) ||
-                    visitNode(cbNode, node.initializer);
-            case 289:
+            case 291:
                 return visitNodes(cbNode, cbNodes, node.decorators) ||
                     visitNodes(cbNode, cbNodes, node.modifiers) ||
                     visitNode(cbNode, node.name) ||
                     visitNode(cbNode, node.questionToken) ||
                     visitNode(cbNode, node.initializer);
-            case 250:
+            case 252:
                 return visitNodes(cbNode, cbNodes, node.decorators) ||
                     visitNodes(cbNode, cbNodes, node.modifiers) ||
                     visitNode(cbNode, node.name) ||
                     visitNode(cbNode, node.exclamationToken) ||
                     visitNode(cbNode, node.type) ||
                     visitNode(cbNode, node.initializer);
-            case 199:
+            case 201:
                 return visitNodes(cbNode, cbNodes, node.decorators) ||
                     visitNodes(cbNode, cbNodes, node.modifiers) ||
                     visitNode(cbNode, node.dotDotDotToken) ||
                     visitNode(cbNode, node.propertyName) ||
                     visitNode(cbNode, node.name) ||
                     visitNode(cbNode, node.initializer);
-            case 175:
-            case 176:
-            case 170:
-            case 171:
+            case 177:
+            case 178:
             case 172:
+            case 173:
+            case 174:
                 return visitNodes(cbNode, cbNodes, node.decorators) ||
                     visitNodes(cbNode, cbNodes, node.modifiers) ||
                     visitNodes(cbNode, cbNodes, node.typeParameters) ||
                     visitNodes(cbNode, cbNodes, node.parameters) ||
                     visitNode(cbNode, node.type);
-            case 166:
-            case 165:
             case 167:
-            case 168:
+            case 166:
             case 169:
-            case 209:
-            case 252:
-            case 210:
+            case 170:
+            case 171:
+            case 211:
+            case 254:
+            case 212:
                 return visitNodes(cbNode, cbNodes, node.decorators) ||
                     visitNodes(cbNode, cbNodes, node.modifiers) ||
                     visitNode(cbNode, node.asteriskToken) ||
@@ -23275,326 +23811,333 @@
                     visitNode(cbNode, node.type) ||
                     visitNode(cbNode, node.equalsGreaterThanToken) ||
                     visitNode(cbNode, node.body);
-            case 174:
+            case 168:
+                return visitNodes(cbNode, cbNodes, node.decorators) ||
+                    visitNodes(cbNode, cbNodes, node.modifiers) ||
+                    visitNode(cbNode, node.body);
+            case 176:
                 return visitNode(cbNode, node.typeName) ||
                     visitNodes(cbNode, cbNodes, node.typeArguments);
-            case 173:
+            case 175:
                 return visitNode(cbNode, node.assertsModifier) ||
                     visitNode(cbNode, node.parameterName) ||
                     visitNode(cbNode, node.type);
-            case 177:
-                return visitNode(cbNode, node.exprName);
-            case 178:
-                return visitNodes(cbNode, cbNodes, node.members);
             case 179:
-                return visitNode(cbNode, node.elementType);
+                return visitNode(cbNode, node.exprName);
             case 180:
+                return visitNodes(cbNode, cbNodes, node.members);
+            case 181:
+                return visitNode(cbNode, node.elementType);
+            case 182:
                 return visitNodes(cbNode, cbNodes, node.elements);
-            case 183:
-            case 184:
-                return visitNodes(cbNode, cbNodes, node.types);
             case 185:
+            case 186:
+                return visitNodes(cbNode, cbNodes, node.types);
+            case 187:
                 return visitNode(cbNode, node.checkType) ||
                     visitNode(cbNode, node.extendsType) ||
                     visitNode(cbNode, node.trueType) ||
                     visitNode(cbNode, node.falseType);
-            case 186:
+            case 188:
                 return visitNode(cbNode, node.typeParameter);
-            case 196:
+            case 198:
                 return visitNode(cbNode, node.argument) ||
                     visitNode(cbNode, node.qualifier) ||
                     visitNodes(cbNode, cbNodes, node.typeArguments);
-            case 187:
             case 189:
+            case 191:
                 return visitNode(cbNode, node.type);
-            case 190:
+            case 192:
                 return visitNode(cbNode, node.objectType) ||
                     visitNode(cbNode, node.indexType);
-            case 191:
+            case 193:
                 return visitNode(cbNode, node.readonlyToken) ||
                     visitNode(cbNode, node.typeParameter) ||
                     visitNode(cbNode, node.nameType) ||
                     visitNode(cbNode, node.questionToken) ||
                     visitNode(cbNode, node.type);
-            case 192:
+            case 194:
                 return visitNode(cbNode, node.literal);
-            case 193:
+            case 195:
                 return visitNode(cbNode, node.dotDotDotToken) ||
                     visitNode(cbNode, node.name) ||
                     visitNode(cbNode, node.questionToken) ||
                     visitNode(cbNode, node.type);
-            case 197:
-            case 198:
-                return visitNodes(cbNode, cbNodes, node.elements);
+            case 199:
             case 200:
                 return visitNodes(cbNode, cbNodes, node.elements);
-            case 201:
-                return visitNodes(cbNode, cbNodes, node.properties);
             case 202:
+                return visitNodes(cbNode, cbNodes, node.elements);
+            case 203:
+                return visitNodes(cbNode, cbNodes, node.properties);
+            case 204:
                 return visitNode(cbNode, node.expression) ||
                     visitNode(cbNode, node.questionDotToken) ||
                     visitNode(cbNode, node.name);
-            case 203:
+            case 205:
                 return visitNode(cbNode, node.expression) ||
                     visitNode(cbNode, node.questionDotToken) ||
                     visitNode(cbNode, node.argumentExpression);
-            case 204:
-            case 205:
+            case 206:
+            case 207:
                 return visitNode(cbNode, node.expression) ||
                     visitNode(cbNode, node.questionDotToken) ||
                     visitNodes(cbNode, cbNodes, node.typeArguments) ||
                     visitNodes(cbNode, cbNodes, node.arguments);
-            case 206:
+            case 208:
                 return visitNode(cbNode, node.tag) ||
                     visitNode(cbNode, node.questionDotToken) ||
                     visitNodes(cbNode, cbNodes, node.typeArguments) ||
                     visitNode(cbNode, node.template);
-            case 207:
+            case 209:
                 return visitNode(cbNode, node.type) ||
                     visitNode(cbNode, node.expression);
-            case 208:
-                return visitNode(cbNode, node.expression);
-            case 211:
-                return visitNode(cbNode, node.expression);
-            case 212:
+            case 210:
                 return visitNode(cbNode, node.expression);
             case 213:
                 return visitNode(cbNode, node.expression);
-            case 215:
-                return visitNode(cbNode, node.operand);
-            case 220:
-                return visitNode(cbNode, node.asteriskToken) ||
-                    visitNode(cbNode, node.expression);
             case 214:
                 return visitNode(cbNode, node.expression);
-            case 216:
-                return visitNode(cbNode, node.operand);
+            case 215:
+                return visitNode(cbNode, node.expression);
             case 217:
+                return visitNode(cbNode, node.operand);
+            case 222:
+                return visitNode(cbNode, node.asteriskToken) ||
+                    visitNode(cbNode, node.expression);
+            case 216:
+                return visitNode(cbNode, node.expression);
+            case 218:
+                return visitNode(cbNode, node.operand);
+            case 219:
                 return visitNode(cbNode, node.left) ||
                     visitNode(cbNode, node.operatorToken) ||
                     visitNode(cbNode, node.right);
-            case 225:
+            case 227:
                 return visitNode(cbNode, node.expression) ||
                     visitNode(cbNode, node.type);
-            case 226:
+            case 228:
                 return visitNode(cbNode, node.expression);
-            case 227:
+            case 229:
                 return visitNode(cbNode, node.name);
-            case 218:
+            case 220:
                 return visitNode(cbNode, node.condition) ||
                     visitNode(cbNode, node.questionToken) ||
                     visitNode(cbNode, node.whenTrue) ||
                     visitNode(cbNode, node.colonToken) ||
                     visitNode(cbNode, node.whenFalse);
-            case 221:
+            case 223:
                 return visitNode(cbNode, node.expression);
-            case 231:
-            case 258:
+            case 233:
+            case 260:
                 return visitNodes(cbNode, cbNodes, node.statements);
-            case 298:
+            case 300:
                 return visitNodes(cbNode, cbNodes, node.statements) ||
                     visitNode(cbNode, node.endOfFileToken);
-            case 233:
+            case 235:
                 return visitNodes(cbNode, cbNodes, node.decorators) ||
                     visitNodes(cbNode, cbNodes, node.modifiers) ||
                     visitNode(cbNode, node.declarationList);
-            case 251:
+            case 253:
                 return visitNodes(cbNode, cbNodes, node.declarations);
-            case 234:
+            case 236:
                 return visitNode(cbNode, node.expression);
-            case 235:
+            case 237:
                 return visitNode(cbNode, node.expression) ||
                     visitNode(cbNode, node.thenStatement) ||
                     visitNode(cbNode, node.elseStatement);
-            case 236:
+            case 238:
                 return visitNode(cbNode, node.statement) ||
                     visitNode(cbNode, node.expression);
-            case 237:
+            case 239:
                 return visitNode(cbNode, node.expression) ||
                     visitNode(cbNode, node.statement);
-            case 238:
+            case 240:
                 return visitNode(cbNode, node.initializer) ||
                     visitNode(cbNode, node.condition) ||
                     visitNode(cbNode, node.incrementor) ||
                     visitNode(cbNode, node.statement);
-            case 239:
+            case 241:
                 return visitNode(cbNode, node.initializer) ||
                     visitNode(cbNode, node.expression) ||
                     visitNode(cbNode, node.statement);
-            case 240:
+            case 242:
                 return visitNode(cbNode, node.awaitModifier) ||
                     visitNode(cbNode, node.initializer) ||
                     visitNode(cbNode, node.expression) ||
                     visitNode(cbNode, node.statement);
-            case 241:
-            case 242:
-                return visitNode(cbNode, node.label);
             case 243:
-                return visitNode(cbNode, node.expression);
             case 244:
-                return visitNode(cbNode, node.expression) ||
-                    visitNode(cbNode, node.statement);
+                return visitNode(cbNode, node.label);
             case 245:
-                return visitNode(cbNode, node.expression) ||
-                    visitNode(cbNode, node.caseBlock);
-            case 259:
-                return visitNodes(cbNode, cbNodes, node.clauses);
-            case 285:
-                return visitNode(cbNode, node.expression) ||
-                    visitNodes(cbNode, cbNodes, node.statements);
-            case 286:
-                return visitNodes(cbNode, cbNodes, node.statements);
+                return visitNode(cbNode, node.expression);
             case 246:
-                return visitNode(cbNode, node.label) ||
+                return visitNode(cbNode, node.expression) ||
                     visitNode(cbNode, node.statement);
             case 247:
-                return visitNode(cbNode, node.expression);
+                return visitNode(cbNode, node.expression) ||
+                    visitNode(cbNode, node.caseBlock);
+            case 261:
+                return visitNodes(cbNode, cbNodes, node.clauses);
+            case 287:
+                return visitNode(cbNode, node.expression) ||
+                    visitNodes(cbNode, cbNodes, node.statements);
+            case 288:
+                return visitNodes(cbNode, cbNodes, node.statements);
             case 248:
+                return visitNode(cbNode, node.label) ||
+                    visitNode(cbNode, node.statement);
+            case 249:
+                return visitNode(cbNode, node.expression);
+            case 250:
                 return visitNode(cbNode, node.tryBlock) ||
                     visitNode(cbNode, node.catchClause) ||
                     visitNode(cbNode, node.finallyBlock);
-            case 288:
+            case 290:
                 return visitNode(cbNode, node.variableDeclaration) ||
                     visitNode(cbNode, node.block);
-            case 162:
+            case 163:
                 return visitNode(cbNode, node.expression);
-            case 253:
-            case 222:
-                return visitNodes(cbNode, cbNodes, node.decorators) ||
-                    visitNodes(cbNode, cbNodes, node.modifiers) ||
-                    visitNode(cbNode, node.name) ||
-                    visitNodes(cbNode, cbNodes, node.typeParameters) ||
-                    visitNodes(cbNode, cbNodes, node.heritageClauses) ||
-                    visitNodes(cbNode, cbNodes, node.members);
-            case 254:
-                return visitNodes(cbNode, cbNodes, node.decorators) ||
-                    visitNodes(cbNode, cbNodes, node.modifiers) ||
-                    visitNode(cbNode, node.name) ||
-                    visitNodes(cbNode, cbNodes, node.typeParameters) ||
-                    visitNodes(cbNode, cbNodes, node.heritageClauses) ||
-                    visitNodes(cbNode, cbNodes, node.members);
             case 255:
+            case 224:
                 return visitNodes(cbNode, cbNodes, node.decorators) ||
                     visitNodes(cbNode, cbNodes, node.modifiers) ||
                     visitNode(cbNode, node.name) ||
                     visitNodes(cbNode, cbNodes, node.typeParameters) ||
-                    visitNode(cbNode, node.type);
+                    visitNodes(cbNode, cbNodes, node.heritageClauses) ||
+                    visitNodes(cbNode, cbNodes, node.members);
             case 256:
                 return visitNodes(cbNode, cbNodes, node.decorators) ||
                     visitNodes(cbNode, cbNodes, node.modifiers) ||
                     visitNode(cbNode, node.name) ||
+                    visitNodes(cbNode, cbNodes, node.typeParameters) ||
+                    visitNodes(cbNode, cbNodes, node.heritageClauses) ||
                     visitNodes(cbNode, cbNodes, node.members);
-            case 292:
-                return visitNode(cbNode, node.name) ||
-                    visitNode(cbNode, node.initializer);
             case 257:
                 return visitNodes(cbNode, cbNodes, node.decorators) ||
                     visitNodes(cbNode, cbNodes, node.modifiers) ||
                     visitNode(cbNode, node.name) ||
+                    visitNodes(cbNode, cbNodes, node.typeParameters) ||
+                    visitNode(cbNode, node.type);
+            case 258:
+                return visitNodes(cbNode, cbNodes, node.decorators) ||
+                    visitNodes(cbNode, cbNodes, node.modifiers) ||
+                    visitNode(cbNode, node.name) ||
+                    visitNodes(cbNode, cbNodes, node.members);
+            case 294:
+                return visitNode(cbNode, node.name) ||
+                    visitNode(cbNode, node.initializer);
+            case 259:
+                return visitNodes(cbNode, cbNodes, node.decorators) ||
+                    visitNodes(cbNode, cbNodes, node.modifiers) ||
+                    visitNode(cbNode, node.name) ||
                     visitNode(cbNode, node.body);
-            case 261:
+            case 263:
                 return visitNodes(cbNode, cbNodes, node.decorators) ||
                     visitNodes(cbNode, cbNodes, node.modifiers) ||
                     visitNode(cbNode, node.name) ||
                     visitNode(cbNode, node.moduleReference);
-            case 262:
+            case 264:
                 return visitNodes(cbNode, cbNodes, node.decorators) ||
                     visitNodes(cbNode, cbNodes, node.modifiers) ||
                     visitNode(cbNode, node.importClause) ||
                     visitNode(cbNode, node.moduleSpecifier);
-            case 263:
+            case 265:
                 return visitNode(cbNode, node.name) ||
                     visitNode(cbNode, node.namedBindings);
-            case 260:
+            case 262:
                 return visitNode(cbNode, node.name);
-            case 264:
+            case 266:
                 return visitNode(cbNode, node.name);
-            case 270:
+            case 272:
                 return visitNode(cbNode, node.name);
-            case 265:
-            case 269:
+            case 267:
+            case 271:
                 return visitNodes(cbNode, cbNodes, node.elements);
-            case 268:
+            case 270:
                 return visitNodes(cbNode, cbNodes, node.decorators) ||
                     visitNodes(cbNode, cbNodes, node.modifiers) ||
                     visitNode(cbNode, node.exportClause) ||
                     visitNode(cbNode, node.moduleSpecifier);
-            case 266:
-            case 271:
+            case 268:
+            case 273:
                 return visitNode(cbNode, node.propertyName) ||
                     visitNode(cbNode, node.name);
-            case 267:
+            case 269:
                 return visitNodes(cbNode, cbNodes, node.decorators) ||
                     visitNodes(cbNode, cbNodes, node.modifiers) ||
                     visitNode(cbNode, node.expression);
-            case 219:
+            case 221:
                 return visitNode(cbNode, node.head) || visitNodes(cbNode, cbNodes, node.templateSpans);
-            case 229:
+            case 231:
                 return visitNode(cbNode, node.expression) || visitNode(cbNode, node.literal);
-            case 194:
+            case 196:
                 return visitNode(cbNode, node.head) || visitNodes(cbNode, cbNodes, node.templateSpans);
-            case 195:
+            case 197:
                 return visitNode(cbNode, node.type) || visitNode(cbNode, node.literal);
-            case 159:
+            case 160:
                 return visitNode(cbNode, node.expression);
-            case 287:
+            case 289:
                 return visitNodes(cbNode, cbNodes, node.types);
-            case 224:
+            case 226:
                 return visitNode(cbNode, node.expression) ||
                     visitNodes(cbNode, cbNodes, node.typeArguments);
-            case 273:
+            case 275:
                 return visitNode(cbNode, node.expression);
-            case 272:
-                return visitNodes(cbNode, cbNodes, node.decorators);
-            case 341:
-                return visitNodes(cbNode, cbNodes, node.elements);
             case 274:
+                return visitNodes(cbNode, cbNodes, node.decorators);
+            case 346:
+                return visitNodes(cbNode, cbNodes, node.elements);
+            case 276:
                 return visitNode(cbNode, node.openingElement) ||
                     visitNodes(cbNode, cbNodes, node.children) ||
                     visitNode(cbNode, node.closingElement);
-            case 278:
+            case 280:
                 return visitNode(cbNode, node.openingFragment) ||
                     visitNodes(cbNode, cbNodes, node.children) ||
                     visitNode(cbNode, node.closingFragment);
-            case 275:
-            case 276:
+            case 277:
+            case 278:
                 return visitNode(cbNode, node.tagName) ||
                     visitNodes(cbNode, cbNodes, node.typeArguments) ||
                     visitNode(cbNode, node.attributes);
-            case 282:
+            case 284:
                 return visitNodes(cbNode, cbNodes, node.properties);
-            case 281:
+            case 283:
                 return visitNode(cbNode, node.name) ||
                     visitNode(cbNode, node.initializer);
-            case 283:
+            case 285:
                 return visitNode(cbNode, node.expression);
-            case 284:
+            case 286:
                 return visitNode(cbNode, node.dotDotDotToken) ||
                     visitNode(cbNode, node.expression);
-            case 277:
+            case 279:
                 return visitNode(cbNode, node.tagName);
-            case 181:
-            case 182:
-            case 302:
-            case 307:
-            case 306:
-            case 308:
+            case 183:
+            case 184:
+            case 304:
             case 310:
-                return visitNode(cbNode, node.type);
             case 309:
+            case 311:
+            case 313:
+                return visitNode(cbNode, node.type);
+            case 312:
                 return visitNodes(cbNode, cbNodes, node.parameters) ||
                     visitNode(cbNode, node.type);
-            case 312:
+            case 315:
                 return (typeof node.comment === "string" ? undefined : visitNodes(cbNode, cbNodes, node.comment))
                     || visitNodes(cbNode, cbNodes, node.tags);
-            case 336:
+            case 341:
                 return visitNode(cbNode, node.tagName) ||
                     visitNode(cbNode, node.name) ||
                     (typeof node.comment === "string" ? undefined : visitNodes(cbNode, cbNodes, node.comment));
-            case 303:
+            case 305:
                 return visitNode(cbNode, node.name);
-            case 330:
-            case 337:
+            case 306:
+                return visitNode(cbNode, node.left) ||
+                    visitNode(cbNode, node.right);
+            case 335:
+            case 342:
                 return visitNode(cbNode, node.tagName) ||
                     (node.isNameFirst
                         ? visitNode(cbNode, node.name) ||
@@ -23603,62 +24146,64 @@
                         : visitNode(cbNode, node.typeExpression) ||
                             visitNode(cbNode, node.name) ||
                             (typeof node.comment === "string" ? undefined : visitNodes(cbNode, cbNodes, node.comment)));
-            case 320:
+            case 325:
                 return visitNode(cbNode, node.tagName) ||
                     (typeof node.comment === "string" ? undefined : visitNodes(cbNode, cbNodes, node.comment));
-            case 319:
+            case 324:
                 return visitNode(cbNode, node.tagName) ||
                     visitNode(cbNode, node.class) ||
                     (typeof node.comment === "string" ? undefined : visitNodes(cbNode, cbNodes, node.comment));
-            case 318:
+            case 323:
                 return visitNode(cbNode, node.tagName) ||
                     visitNode(cbNode, node.class) ||
                     (typeof node.comment === "string" ? undefined : visitNodes(cbNode, cbNodes, node.comment));
-            case 334:
+            case 339:
                 return visitNode(cbNode, node.tagName) ||
                     visitNode(cbNode, node.constraint) ||
                     visitNodes(cbNode, cbNodes, node.typeParameters) ||
                     (typeof node.comment === "string" ? undefined : visitNodes(cbNode, cbNodes, node.comment));
-            case 335:
+            case 340:
                 return visitNode(cbNode, node.tagName) ||
                     (node.typeExpression &&
-                        node.typeExpression.kind === 302
+                        node.typeExpression.kind === 304
                         ? visitNode(cbNode, node.typeExpression) ||
                             visitNode(cbNode, node.fullName) ||
                             (typeof node.comment === "string" ? undefined : visitNodes(cbNode, cbNodes, node.comment))
                         : visitNode(cbNode, node.fullName) ||
-                            visitNode(cbNode, node.typeExpression)) ||
-                    (typeof node.comment === "string" ? undefined : visitNodes(cbNode, cbNodes, node.comment));
-            case 328:
+                            visitNode(cbNode, node.typeExpression) ||
+                            (typeof node.comment === "string" ? undefined : visitNodes(cbNode, cbNodes, node.comment)));
+            case 333:
                 return visitNode(cbNode, node.tagName) ||
                     visitNode(cbNode, node.fullName) ||
                     visitNode(cbNode, node.typeExpression) ||
                     (typeof node.comment === "string" ? undefined : visitNodes(cbNode, cbNodes, node.comment));
-            case 331:
-            case 333:
-            case 332:
-            case 329:
+            case 336:
+            case 338:
+            case 337:
+            case 334:
                 return visitNode(cbNode, node.tagName) ||
                     visitNode(cbNode, node.typeExpression) ||
                     (typeof node.comment === "string" ? undefined : visitNodes(cbNode, cbNodes, node.comment));
-            case 315:
+            case 318:
                 return ts.forEach(node.typeParameters, cbNode) ||
                     ts.forEach(node.parameters, cbNode) ||
                     visitNode(cbNode, node.type);
-            case 316:
-                return visitNode(cbNode, node.name);
-            case 314:
-                return ts.forEach(node.jsDocPropertyTags, cbNode);
-            case 317:
-            case 322:
-            case 323:
-            case 324:
-            case 325:
-            case 326:
+            case 319:
+            case 320:
             case 321:
+                return visitNode(cbNode, node.name);
+            case 317:
+                return ts.forEach(node.jsDocPropertyTags, cbNode);
+            case 322:
+            case 327:
+            case 328:
+            case 329:
+            case 330:
+            case 331:
+            case 326:
                 return visitNode(cbNode, node.tagName)
                     || (typeof node.comment === "string" ? undefined : visitNodes(cbNode, cbNodes, node.comment));
-            case 340:
+            case 345:
                 return visitNode(cbNode, node.expression);
         }
     }
@@ -23693,7 +24238,7 @@
                         continue;
                     return res;
                 }
-                if (current.kind >= 158) {
+                if (current.kind >= 159) {
                     for (var _i = 0, _a = gatherPossibleChildren(current); _i < _a.length; _i++) {
                         var child = _a[_i];
                         queue.push(child);
@@ -23852,9 +24397,9 @@
                         case 22:
                             expression_1 = parseArrayLiteralExpression();
                             break;
-                        case 109:
-                        case 94:
-                        case 103:
+                        case 110:
+                        case 95:
+                        case 104:
                             expression_1 = parseTokenNode();
                             break;
                         case 40:
@@ -24254,6 +24799,9 @@
         function reScanLessThanToken() {
             return currentToken = scanner.reScanLessThanToken();
         }
+        function reScanHashToken() {
+            return currentToken = scanner.reScanHashToken();
+        }
         function scanJsxIdentifier() {
             return currentToken = scanner.scanJsxIdentifier();
         }
@@ -24288,22 +24836,22 @@
             return speculationHelper(callback, 0);
         }
         function isBindingIdentifier() {
-            if (token() === 78) {
+            if (token() === 79) {
                 return true;
             }
-            return token() > 115;
+            return token() > 116;
         }
         function isIdentifier() {
-            if (token() === 78) {
+            if (token() === 79) {
                 return true;
             }
-            if (token() === 124 && inYieldContext()) {
+            if (token() === 125 && inYieldContext()) {
                 return false;
             }
-            if (token() === 130 && inAwaitContext()) {
+            if (token() === 131 && inAwaitContext()) {
                 return false;
             }
-            return token() > 115;
+            return token() > 116;
         }
         function parseExpected(kind, diagnosticMessage, shouldAdvance) {
             if (shouldAdvance === void 0) { shouldAdvance = true; }
@@ -24321,6 +24869,98 @@
             }
             return false;
         }
+        var viableKeywordSuggestions = Object.keys(ts.textToKeywordObj).filter(function (keyword) { return keyword.length > 2; });
+        function parseErrorForMissingSemicolonAfter(node) {
+            var _a;
+            if (ts.isTaggedTemplateExpression(node)) {
+                parseErrorAt(ts.skipTrivia(sourceText, node.template.pos), node.template.end, ts.Diagnostics.Module_declaration_names_may_only_use_or_quoted_strings);
+                return;
+            }
+            var expressionText = ts.isIdentifier(node) ? ts.idText(node) : undefined;
+            if (!expressionText || !ts.isIdentifierText(expressionText, languageVersion)) {
+                parseErrorAtCurrentToken(ts.Diagnostics._0_expected, ts.tokenToString(26));
+                return;
+            }
+            var pos = ts.skipTrivia(sourceText, node.pos);
+            switch (expressionText) {
+                case "const":
+                case "let":
+                case "var":
+                    parseErrorAt(pos, node.end, ts.Diagnostics.Variable_declaration_not_allowed_at_this_location);
+                    return;
+                case "declare":
+                    return;
+                case "interface":
+                    parseErrorForInvalidName(ts.Diagnostics.Interface_name_cannot_be_0, ts.Diagnostics.Interface_must_be_given_a_name, 18);
+                    return;
+                case "is":
+                    parseErrorAt(pos, scanner.getTextPos(), ts.Diagnostics.A_type_predicate_is_only_allowed_in_return_type_position_for_functions_and_methods);
+                    return;
+                case "module":
+                case "namespace":
+                    parseErrorForInvalidName(ts.Diagnostics.Namespace_name_cannot_be_0, ts.Diagnostics.Namespace_must_be_given_a_name, 18);
+                    return;
+                case "type":
+                    parseErrorForInvalidName(ts.Diagnostics.Type_alias_name_cannot_be_0, ts.Diagnostics.Type_alias_must_be_given_a_name, 63);
+                    return;
+            }
+            var suggestion = (_a = ts.getSpellingSuggestion(expressionText, viableKeywordSuggestions, function (n) { return n; })) !== null && _a !== void 0 ? _a : getSpaceSuggestion(expressionText);
+            if (suggestion) {
+                parseErrorAt(pos, node.end, ts.Diagnostics.Unknown_keyword_or_identifier_Did_you_mean_0, suggestion);
+                return;
+            }
+            if (token() === 0) {
+                return;
+            }
+            parseErrorAt(pos, node.end, ts.Diagnostics.Unexpected_keyword_or_identifier);
+        }
+        function parseErrorForInvalidName(nameDiagnostic, blankDiagnostic, tokenIfBlankName) {
+            if (token() === tokenIfBlankName) {
+                parseErrorAtCurrentToken(blankDiagnostic);
+            }
+            else {
+                parseErrorAtCurrentToken(nameDiagnostic, ts.tokenToString(token()));
+            }
+        }
+        function getSpaceSuggestion(expressionText) {
+            for (var _i = 0, viableKeywordSuggestions_1 = viableKeywordSuggestions; _i < viableKeywordSuggestions_1.length; _i++) {
+                var keyword = viableKeywordSuggestions_1[_i];
+                if (expressionText.length > keyword.length + 2 && ts.startsWith(expressionText, keyword)) {
+                    return keyword + " " + expressionText.slice(keyword.length);
+                }
+            }
+            return undefined;
+        }
+        function parseSemicolonAfterPropertyName(name, type, initializer) {
+            if (token() === 59 && !scanner.hasPrecedingLineBreak()) {
+                parseErrorAtCurrentToken(ts.Diagnostics.Decorators_must_precede_the_name_and_all_keywords_of_property_declarations);
+                return;
+            }
+            if (token() === 20) {
+                parseErrorAtCurrentToken(ts.Diagnostics.Cannot_start_a_function_call_in_a_type_annotation);
+                nextToken();
+                return;
+            }
+            if (type && !canParseSemicolon()) {
+                if (initializer) {
+                    parseErrorAtCurrentToken(ts.Diagnostics._0_expected, ts.tokenToString(26));
+                }
+                else {
+                    parseErrorAtCurrentToken(ts.Diagnostics.Expected_for_property_initializer);
+                }
+                return;
+            }
+            if (tryParseSemicolon()) {
+                return;
+            }
+            if (initializer) {
+                if (token() === 18) {
+                    parseErrorAtCurrentToken(ts.Diagnostics._0_expected, ts.tokenToString(26));
+                }
+                return;
+            }
+            parseErrorForMissingSemicolonAfter(name);
+        }
         function parseExpectedJSDoc(kind) {
             if (token() === kind) {
                 nextTokenJSDoc();
@@ -24374,16 +25014,17 @@
             }
             return token() === 19 || token() === 1 || scanner.hasPrecedingLineBreak();
         }
+        function tryParseSemicolon() {
+            if (!canParseSemicolon()) {
+                return false;
+            }
+            if (token() === 26) {
+                nextToken();
+            }
+            return true;
+        }
         function parseSemicolon() {
-            if (canParseSemicolon()) {
-                if (token() === 26) {
-                    nextToken();
-                }
-                return true;
-            }
-            else {
-                return parseExpected(26);
-            }
+            return tryParseSemicolon() || parseExpected(26);
         }
         function createNodeArray(elements, pos, end, hasTrailingComma) {
             var array = factory.createNodeArray(elements, hasTrailingComma);
@@ -24409,11 +25050,11 @@
                 parseErrorAtCurrentToken(diagnosticMessage, arg0);
             }
             var pos = getNodePos();
-            var result = kind === 78 ? factory.createIdentifier("", undefined, undefined) :
+            var result = kind === 79 ? factory.createIdentifier("", undefined, undefined) :
                 ts.isTemplateLiteralKind(kind) ? factory.createTemplateLiteralLikeNode(kind, "", "", undefined) :
                     kind === 8 ? factory.createNumericLiteral("", undefined) :
                         kind === 10 ? factory.createStringLiteral("", undefined) :
-                            kind === 272 ? factory.createMissingDeclaration() :
+                            kind === 274 ? factory.createMissingDeclaration() :
                                 factory.createToken(kind);
             return finishNode(result, pos);
         }
@@ -24433,11 +25074,11 @@
                 nextTokenWithoutCheck();
                 return finishNode(factory.createIdentifier(text, undefined, originalKeywordKind), pos);
             }
-            if (token() === 79) {
+            if (token() === 80) {
                 parseErrorAtCurrentToken(privateIdentifierDiagnosticMessage || ts.Diagnostics.Private_identifiers_are_not_allowed_outside_class_bodies);
                 return createIdentifier(true);
             }
-            if (token() === 0 && scanner.tryScan(function () { return scanner.reScanInvalidIdentifier() === 78; })) {
+            if (token() === 0 && scanner.tryScan(function () { return scanner.reScanInvalidIdentifier() === 79; })) {
                 return createIdentifier(true);
             }
             identifierCount++;
@@ -24447,7 +25088,7 @@
             var defaultMessage = isReservedWord ?
                 ts.Diagnostics.Identifier_expected_0_is_a_reserved_word_that_cannot_be_used_here :
                 ts.Diagnostics.Identifier_expected;
-            return createMissingNode(78, reportAtCurrentPosition, diagnosticMessage || defaultMessage, msgArg);
+            return createMissingNode(79, reportAtCurrentPosition, diagnosticMessage || defaultMessage, msgArg);
         }
         function parseBindingIdentifier(privateIdentifierDiagnosticMessage) {
             return createIdentifier(isBindingIdentifier(), undefined, privateIdentifierDiagnosticMessage);
@@ -24472,7 +25113,7 @@
             if (allowComputedPropertyNames && token() === 22) {
                 return parseComputedPropertyName();
             }
-            if (token() === 79) {
+            if (token() === 80) {
                 return parsePrivateIdentifier();
             }
             return parseIdentifierName();
@@ -24512,23 +25153,23 @@
         }
         function nextTokenCanFollowModifier() {
             switch (token()) {
-                case 84:
-                    return nextToken() === 91;
-                case 92:
+                case 85:
+                    return nextToken() === 92;
+                case 93:
                     nextToken();
-                    if (token() === 87) {
+                    if (token() === 88) {
                         return lookAhead(nextTokenCanFollowDefaultKeyword);
                     }
-                    if (token() === 149) {
+                    if (token() === 150) {
                         return lookAhead(nextTokenCanFollowExportModifier);
                     }
                     return canFollowExportModifier();
-                case 87:
+                case 88:
                     return nextTokenCanFollowDefaultKeyword();
-                case 123:
+                case 124:
                     return nextTokenIsOnSameLineAndCanFollowModifier();
-                case 134:
-                case 146:
+                case 135:
+                case 147:
                     nextToken();
                     return canFollowModifier();
                 default:
@@ -24537,7 +25178,7 @@
         }
         function canFollowExportModifier() {
             return token() !== 41
-                && token() !== 126
+                && token() !== 127
                 && token() !== 18
                 && canFollowModifier();
         }
@@ -24557,10 +25198,10 @@
         }
         function nextTokenCanFollowDefaultKeyword() {
             nextToken();
-            return token() === 83 || token() === 97 ||
-                token() === 117 ||
-                (token() === 125 && lookAhead(nextTokenIsClassKeywordOnSameLine)) ||
-                (token() === 129 && lookAhead(nextTokenIsFunctionKeywordOnSameLine));
+            return token() === 84 || token() === 98 ||
+                token() === 118 ||
+                (token() === 126 && lookAhead(nextTokenIsClassKeywordOnSameLine)) ||
+                (token() === 130 && lookAhead(nextTokenIsFunctionKeywordOnSameLine));
         }
         function isListElement(parsingContext, inErrorRecovery) {
             var node = currentNode(parsingContext);
@@ -24573,7 +25214,7 @@
                 case 3:
                     return !(token() === 26 && inErrorRecovery) && isStartOfStatement();
                 case 2:
-                    return token() === 81 || token() === 87;
+                    return token() === 82 || token() === 88;
                 case 4:
                     return lookAhead(isTypeMemberStart);
                 case 5:
@@ -24640,7 +25281,7 @@
             ts.Debug.assert(token() === 18);
             if (nextToken() === 19) {
                 var next = nextToken();
-                return next === 27 || next === 18 || next === 93 || next === 116;
+                return next === 27 || next === 18 || next === 94 || next === 117;
             }
             return true;
         }
@@ -24657,8 +25298,8 @@
             return ts.tokenIsIdentifierOrKeywordOrGreaterThan(token());
         }
         function isHeritageClauseExtendsOrImplementsKeyword() {
-            if (token() === 116 ||
-                token() === 93) {
+            if (token() === 117 ||
+                token() === 94) {
                 return lookAhead(nextTokenIsStartOfExpression);
             }
             return false;
@@ -24686,13 +25327,13 @@
                 case 23:
                     return token() === 19;
                 case 3:
-                    return token() === 19 || token() === 81 || token() === 87;
+                    return token() === 19 || token() === 82 || token() === 88;
                 case 7:
-                    return token() === 18 || token() === 93 || token() === 116;
+                    return token() === 18 || token() === 94 || token() === 117;
                 case 8:
                     return isVariableDeclaratorListTerminator();
                 case 19:
-                    return token() === 31 || token() === 20 || token() === 18 || token() === 93 || token() === 116;
+                    return token() === 31 || token() === 20 || token() === 18 || token() === 94 || token() === 117;
                 case 11:
                     return token() === 21 || token() === 26;
                 case 15:
@@ -24827,17 +25468,17 @@
         function isReusableClassMember(node) {
             if (node) {
                 switch (node.kind) {
-                    case 167:
-                    case 172:
-                    case 168:
                     case 169:
-                    case 164:
-                    case 230:
+                    case 174:
+                    case 170:
+                    case 171:
+                    case 165:
+                    case 232:
                         return true;
-                    case 166:
+                    case 167:
                         var methodDeclaration = node;
-                        var nameIsConstructor = methodDeclaration.name.kind === 78 &&
-                            methodDeclaration.name.originalKeywordKind === 132;
+                        var nameIsConstructor = methodDeclaration.name.kind === 79 &&
+                            methodDeclaration.name.originalKeywordKind === 133;
                         return !nameIsConstructor;
                 }
             }
@@ -24846,8 +25487,8 @@
         function isReusableSwitchClause(node) {
             if (node) {
                 switch (node.kind) {
-                    case 285:
-                    case 286:
+                    case 287:
+                    case 288:
                         return true;
                 }
             }
@@ -24856,65 +25497,65 @@
         function isReusableStatement(node) {
             if (node) {
                 switch (node.kind) {
-                    case 252:
-                    case 233:
-                    case 231:
+                    case 254:
                     case 235:
-                    case 234:
-                    case 247:
-                    case 243:
-                    case 245:
-                    case 242:
-                    case 241:
-                    case 239:
-                    case 240:
-                    case 238:
+                    case 233:
                     case 237:
-                    case 244:
-                    case 232:
-                    case 248:
-                    case 246:
                     case 236:
                     case 249:
-                    case 262:
-                    case 261:
-                    case 268:
-                    case 267:
-                    case 257:
-                    case 253:
-                    case 254:
-                    case 256:
+                    case 245:
+                    case 247:
+                    case 244:
+                    case 243:
+                    case 241:
+                    case 242:
+                    case 240:
+                    case 239:
+                    case 246:
+                    case 234:
+                    case 250:
+                    case 248:
+                    case 238:
+                    case 251:
+                    case 264:
+                    case 263:
+                    case 270:
+                    case 269:
+                    case 259:
                     case 255:
+                    case 256:
+                    case 258:
+                    case 257:
                         return true;
                 }
             }
             return false;
         }
         function isReusableEnumMember(node) {
-            return node.kind === 292;
+            return node.kind === 294;
         }
         function isReusableTypeMember(node) {
             if (node) {
                 switch (node.kind) {
-                    case 171:
-                    case 165:
+                    case 173:
+                    case 166:
+                    case 174:
+                    case 164:
                     case 172:
-                    case 163:
-                    case 170:
                         return true;
                 }
             }
             return false;
         }
         function isReusableVariableDeclaration(node) {
-            if (node.kind !== 250) {
+            if (node.kind !== 252) {
                 return false;
             }
             var variableDeclarator = node;
             return variableDeclarator.initializer === undefined;
         }
         function isReusableParameter(node) {
-            if (node.kind !== 161) {
+            if (node.kind !== 162) {
                 return false;
             }
             var parameter = node;
@@ -24930,7 +25571,10 @@
         }
         function parsingContextErrors(context) {
             switch (context) {
-                case 0: return parseErrorAtCurrentToken(ts.Diagnostics.Declaration_or_statement_expected);
+                case 0:
+                    return token() === 88
+                        ? parseErrorAtCurrentToken(ts.Diagnostics._0_expected, ts.tokenToString(93))
+                        : parseErrorAtCurrentToken(ts.Diagnostics.Declaration_or_statement_expected);
                 case 1: return parseErrorAtCurrentToken(ts.Diagnostics.Declaration_or_statement_expected);
                 case 2: return parseErrorAtCurrentToken(ts.Diagnostics.case_or_default_expected);
                 case 3: return parseErrorAtCurrentToken(ts.Diagnostics.Statement_expected);
@@ -25037,12 +25681,12 @@
             if (scanner.hasPrecedingLineBreak() && ts.tokenIsIdentifierOrKeyword(token())) {
                 var matchesPattern = lookAhead(nextTokenIsIdentifierOrKeywordOnSameLine);
                 if (matchesPattern) {
-                    return createMissingNode(78, true, ts.Diagnostics.Identifier_expected);
+                    return createMissingNode(79, true, ts.Diagnostics.Identifier_expected);
                 }
             }
-            if (token() === 79) {
+            if (token() === 80) {
                 var node = parsePrivateIdentifier();
-                return allowPrivateIdentifiers ? node : createMissingNode(78, true, ts.Diagnostics.Identifier_expected);
+                return allowPrivateIdentifiers ? node : createMissingNode(79, true, ts.Diagnostics.Identifier_expected);
             }
             return allowIdentifierNames ? parseIdentifierName() : parseIdentifier();
         }
@@ -25142,14 +25786,14 @@
         }
         function typeHasArrowFunctionBlockingParseError(node) {
             switch (node.kind) {
-                case 174:
+                case 176:
                     return ts.nodeIsMissing(node.typeName);
-                case 175:
-                case 176: {
+                case 177:
+                case 178: {
                     var _a = node, parameters = _a.parameters, type = _a.type;
                     return isMissingList(parameters) || typeHasArrowFunctionBlockingParseError(type);
                 }
-                case 187:
+                case 189:
                     return typeHasArrowFunctionBlockingParseError(node.type);
                 default:
                     return false;
@@ -25181,7 +25825,7 @@
                 token() === 19 ||
                 token() === 21 ||
                 token() === 31 ||
-                token() === 62 ||
+                token() === 63 ||
                 token() === 51) {
                 return finishNode(factory.createJSDocUnknownType(), pos);
             }
@@ -25203,7 +25847,7 @@
         function parseJSDocParameter() {
             var pos = getNodePos();
             var name;
-            if (token() === 107 || token() === 102) {
+            if (token() === 108 || token() === 103) {
                 name = parseIdentifierName();
                 parseExpected(58);
             }
@@ -25212,7 +25856,7 @@
         function parseJSDocType() {
             scanner.setInJSDocType(true);
             var pos = getNodePos();
-            if (parseOptional(139)) {
+            if (parseOptional(140)) {
                 var moduleTag = factory.createJSDocNamepathType(undefined);
                 terminate: while (true) {
                     switch (token()) {
@@ -25234,7 +25878,7 @@
             if (hasDotDotDot) {
                 type = finishNode(factory.createJSDocVariadicType(type), pos);
             }
-            if (token() === 62) {
+            if (token() === 63) {
                 nextToken();
                 return finishNode(factory.createJSDocOptionalType(type), pos);
             }
@@ -25242,7 +25886,7 @@
         }
         function parseTypeQuery() {
             var pos = getNodePos();
-            parseExpected(111);
+            parseExpected(112);
             return finishNode(factory.createTypeQueryNode(parseEntityName(true)), pos);
         }
         function parseTypeParameter() {
@@ -25250,7 +25894,7 @@
             var name = parseIdentifier();
             var constraint;
             var expression;
-            if (parseOptional(93)) {
+            if (parseOptional(94)) {
                 if (isStartOfType() || !isStartOfExpression()) {
                     constraint = parseType();
                 }
@@ -25258,7 +25902,7 @@
                     expression = parseUnaryExpressionOrHigher();
                 }
             }
-            var defaultType = parseOptional(62) ? parseType() : undefined;
+            var defaultType = parseOptional(63) ? parseType() : undefined;
             var node = factory.createTypeParameterDeclaration(name, constraint, defaultType);
             node.expression = expression;
             return finishNode(node, pos);
@@ -25292,7 +25936,7 @@
             var pos = getNodePos();
             var hasJSDoc = hasPrecedingJSDocComment();
             var decorators = inOuterAwaitContext ? doInAwaitContext(parseDecorators) : parseDecorators();
-            if (token() === 107) {
+            if (token() === 108) {
                 var node_1 = factory.createParameterDeclaration(decorators, undefined, undefined, createIdentifier(true), undefined, parseTypeAnnotation(), undefined);
                 if (decorators) {
                     parseErrorAtRange(decorators[0], ts.Diagnostics.Decorators_may_not_be_applied_to_this_parameters);
@@ -25355,14 +25999,14 @@
         function parseSignatureMember(kind) {
             var pos = getNodePos();
             var hasJSDoc = hasPrecedingJSDocComment();
-            if (kind === 171) {
-                parseExpected(102);
+            if (kind === 173) {
+                parseExpected(103);
             }
             var typeParameters = parseTypeParameters();
             var parameters = parseParameters(4);
             var type = parseReturnType(58, true);
             parseTypeMemberSemicolon();
-            var node = kind === 170
+            var node = kind === 172
                 ? factory.createCallSignature(typeParameters, parameters, type)
                 : factory.createConstructSignature(typeParameters, parameters, type);
             return withJSDoc(finishNode(node, pos), hasJSDoc);
@@ -25416,7 +26060,7 @@
             else {
                 var type = parseTypeAnnotation();
                 node = factory.createPropertySignature(modifiers, name, questionToken, type);
-                if (token() === 62)
+                if (token() === 63)
                     node.initializer = parseInitializer();
             }
             parseTypeMemberSemicolon();
@@ -25425,8 +26069,8 @@
         function isTypeMemberStart() {
             if (token() === 20 ||
                 token() === 29 ||
-                token() === 134 ||
-                token() === 146) {
+                token() === 135 ||
+                token() === 147) {
                 return true;
             }
             var idToken = false;
@@ -25453,19 +26097,19 @@
         }
         function parseTypeMember() {
             if (token() === 20 || token() === 29) {
-                return parseSignatureMember(170);
+                return parseSignatureMember(172);
             }
-            if (token() === 102 && lookAhead(nextTokenIsOpenParenOrLessThan)) {
-                return parseSignatureMember(171);
+            if (token() === 103 && lookAhead(nextTokenIsOpenParenOrLessThan)) {
+                return parseSignatureMember(173);
             }
             var pos = getNodePos();
             var hasJSDoc = hasPrecedingJSDocComment();
             var modifiers = parseModifiers();
-            if (parseContextualModifier(134)) {
-                return parseAccessorDeclaration(pos, hasJSDoc, undefined, modifiers, 168);
+            if (parseContextualModifier(135)) {
+                return parseAccessorDeclaration(pos, hasJSDoc, undefined, modifiers, 170);
             }
-            if (parseContextualModifier(146)) {
-                return parseAccessorDeclaration(pos, hasJSDoc, undefined, modifiers, 169);
+            if (parseContextualModifier(147)) {
+                return parseAccessorDeclaration(pos, hasJSDoc, undefined, modifiers, 171);
             }
             if (isIndexSignature()) {
                 return parseIndexSignatureDeclaration(pos, hasJSDoc, undefined, modifiers);
@@ -25506,17 +26150,17 @@
         function isStartOfMappedType() {
             nextToken();
             if (token() === 39 || token() === 40) {
-                return nextToken() === 142;
+                return nextToken() === 143;
             }
-            if (token() === 142) {
+            if (token() === 143) {
                 nextToken();
             }
-            return token() === 22 && nextTokenIsIdentifier() && nextToken() === 100;
+            return token() === 22 && nextTokenIsIdentifier() && nextToken() === 101;
         }
         function parseMappedTypeParameter() {
             var pos = getNodePos();
             var name = parseIdentifierName();
-            parseExpected(100);
+            parseExpected(101);
             var type = parseType();
             return finishNode(factory.createTypeParameterDeclaration(name, type, undefined), pos);
         }
@@ -25524,15 +26168,15 @@
             var pos = getNodePos();
             parseExpected(18);
             var readonlyToken;
-            if (token() === 142 || token() === 39 || token() === 40) {
+            if (token() === 143 || token() === 39 || token() === 40) {
                 readonlyToken = parseTokenNode();
-                if (readonlyToken.kind !== 142) {
-                    parseExpected(142);
+                if (readonlyToken.kind !== 143) {
+                    parseExpected(143);
                 }
             }
             parseExpected(22);
             var typeParameter = parseMappedTypeParameter();
-            var nameType = parseOptional(126) ? parseType() : undefined;
+            var nameType = parseOptional(127) ? parseType() : undefined;
             parseExpected(23);
             var questionToken;
             if (token() === 57 || token() === 39 || token() === 40) {
@@ -25596,10 +26240,10 @@
         }
         function parseModifiersForConstructorType() {
             var modifiers;
-            if (token() === 125) {
+            if (token() === 126) {
                 var pos = getNodePos();
                 nextToken();
-                var modifier = finishNode(factory.createToken(125), pos);
+                var modifier = finishNode(factory.createToken(126), pos);
                 modifiers = createNodeArray([modifier], pos);
             }
             return modifiers;
@@ -25608,7 +26252,7 @@
             var pos = getNodePos();
             var hasJSDoc = hasPrecedingJSDocComment();
             var modifiers = parseModifiersForConstructorType();
-            var isConstructorType = parseOptional(102);
+            var isConstructorType = parseOptional(103);
             var typeParameters = parseTypeParameters();
             var parameters = parseParameters(4);
             var type = parseReturnType(38, false);
@@ -25628,7 +26272,7 @@
             if (negative) {
                 nextToken();
             }
-            var expression = token() === 109 || token() === 94 || token() === 103 ?
+            var expression = token() === 110 || token() === 95 || token() === 104 ?
                 parseTokenNode() :
                 parseLiteralLikeNode(token());
             if (negative) {
@@ -25638,13 +26282,13 @@
         }
         function isStartOfTypeOfImportType() {
             nextToken();
-            return token() === 99;
+            return token() === 100;
         }
         function parseImportType() {
             sourceFlags |= 1048576;
             var pos = getNodePos();
-            var isTypeOf = parseOptional(111);
-            parseExpected(99);
+            var isTypeOf = parseOptional(112);
+            parseExpected(100);
             parseExpected(20);
             var type = parseType();
             parseExpected(21);
@@ -25658,18 +26302,18 @@
         }
         function parseNonArrayType() {
             switch (token()) {
-                case 128:
-                case 152:
-                case 147:
-                case 144:
-                case 155:
+                case 129:
+                case 153:
                 case 148:
-                case 131:
-                case 150:
-                case 141:
                 case 145:
+                case 156:
+                case 149:
+                case 132:
+                case 151:
+                case 142:
+                case 146:
                     return tryParse(parseKeywordAndNoDot) || parseTypeReference();
-                case 65:
+                case 66:
                     scanner.reScanAsteriskEqualsToken();
                 case 41:
                     return parseJSDocAllType();
@@ -25677,7 +26321,7 @@
                     scanner.reScanQuestionToken();
                 case 57:
                     return parseJSDocUnknownOrNullableType();
-                case 97:
+                case 98:
                     return parseJSDocFunctionType();
                 case 53:
                     return parseJSDocNonNullableType();
@@ -25685,24 +26329,24 @@
                 case 10:
                 case 8:
                 case 9:
-                case 109:
-                case 94:
-                case 103:
+                case 110:
+                case 95:
+                case 104:
                     return parseLiteralTypeNode();
                 case 40:
                     return lookAhead(nextTokenIsNumericOrBigIntLiteral) ? parseLiteralTypeNode(true) : parseTypeReference();
-                case 113:
+                case 114:
                     return parseTokenNode();
-                case 107: {
+                case 108: {
                     var thisKeyword = parseThisTypeNode();
-                    if (token() === 137 && !scanner.hasPrecedingLineBreak()) {
+                    if (token() === 138 && !scanner.hasPrecedingLineBreak()) {
                         return parseThisTypePredicate(thisKeyword);
                     }
                     else {
                         return thisKeyword;
                     }
                 }
-                case 111:
+                case 112:
                     return lookAhead(isStartOfTypeOfImportType) ? parseImportType() : parseTypeQuery();
                 case 18:
                     return lookAhead(isStartOfMappedType) ? parseMappedType() : parseTypeLiteral();
@@ -25710,9 +26354,9 @@
                     return parseTupleType();
                 case 20:
                     return parseParenthesizedType();
-                case 99:
+                case 100:
                     return parseImportType();
-                case 127:
+                case 128:
                     return lookAhead(nextTokenIsIdentifierOrKeywordOnSameLine) ? parseAssertsTypePredicate() : parseTypeReference();
                 case 15:
                     return parseTemplateType();
@@ -25722,44 +26366,44 @@
         }
         function isStartOfType(inStartOfParameter) {
             switch (token()) {
-                case 128:
-                case 152:
-                case 147:
-                case 144:
-                case 155:
-                case 131:
-                case 142:
+                case 129:
+                case 153:
                 case 148:
+                case 145:
+                case 156:
+                case 132:
+                case 143:
+                case 149:
+                case 152:
+                case 114:
                 case 151:
-                case 113:
-                case 150:
-                case 103:
-                case 107:
-                case 111:
-                case 141:
+                case 104:
+                case 108:
+                case 112:
+                case 142:
                 case 18:
                 case 22:
                 case 29:
                 case 51:
                 case 50:
-                case 102:
+                case 103:
                 case 10:
                 case 8:
                 case 9:
-                case 109:
-                case 94:
-                case 145:
+                case 110:
+                case 95:
+                case 146:
                 case 41:
                 case 57:
                 case 53:
                 case 25:
-                case 135:
-                case 99:
-                case 127:
+                case 136:
+                case 100:
+                case 128:
                 case 14:
                 case 15:
                     return true;
-                case 97:
+                case 98:
                     return !inStartOfParameter;
                 case 40:
                     return !inStartOfParameter && lookAhead(nextTokenIsNumericOrBigIntLiteral);
@@ -25818,17 +26462,17 @@
         }
         function parseInferType() {
             var pos = getNodePos();
-            parseExpected(135);
+            parseExpected(136);
             return finishNode(factory.createInferTypeNode(parseTypeParameterOfInferType()), pos);
         }
         function parseTypeOperatorOrHigher() {
             var operator = token();
             switch (operator) {
-                case 138:
-                case 151:
-                case 142:
+                case 139:
+                case 152:
+                case 143:
                     return parseTypeOperator(operator);
-                case 135:
+                case 136:
                     return parseInferType();
             }
             return parsePostfixTypeOrHigher();
@@ -25875,7 +26519,7 @@
         }
         function nextTokenIsNewKeyword() {
             nextToken();
-            return token() === 102;
+            return token() === 103;
         }
         function isStartOfFunctionTypeOrConstructorType() {
             if (token() === 29) {
@@ -25884,14 +26528,14 @@
             if (token() === 20 && lookAhead(isUnambiguouslyStartOfFunctionType)) {
                 return true;
             }
-            return token() === 102 ||
-                token() === 125 && lookAhead(nextTokenIsNewKeyword);
+            return token() === 103 ||
+                token() === 126 && lookAhead(nextTokenIsNewKeyword);
         }
         function skipParameterStart() {
             if (ts.isModifierKind(token())) {
                 parseModifiers();
             }
-            if (isIdentifier() || token() === 107) {
+            if (isIdentifier() || token() === 108) {
                 nextToken();
                 return true;
             }
@@ -25909,7 +26553,7 @@
             }
             if (skipParameterStart()) {
                 if (token() === 58 || token() === 27 ||
-                    token() === 57 || token() === 62) {
+                    token() === 57 || token() === 63) {
                     return true;
                 }
                 if (token() === 21) {
@@ -25934,16 +26578,16 @@
         }
         function parseTypePredicatePrefix() {
             var id = parseIdentifier();
-            if (token() === 137 && !scanner.hasPrecedingLineBreak()) {
+            if (token() === 138 && !scanner.hasPrecedingLineBreak()) {
                 nextToken();
                 return id;
             }
         }
         function parseAssertsTypePredicate() {
             var pos = getNodePos();
-            var assertsModifier = parseExpectedToken(127);
-            var parameterName = token() === 107 ? parseThisTypeNode() : parseIdentifier();
-            var type = parseOptional(137) ? parseType() : undefined;
+            var assertsModifier = parseExpectedToken(128);
+            var parameterName = token() === 108 ? parseThisTypeNode() : parseIdentifier();
+            var type = parseOptional(138) ? parseType() : undefined;
             return finishNode(factory.createTypePredicateNode(assertsModifier, parameterName, type), pos);
         }
         function parseType() {
@@ -25955,7 +26599,7 @@
             }
             var pos = getNodePos();
             var type = parseUnionTypeOrHigher();
-            if (!noConditionalTypes && !scanner.hasPrecedingLineBreak() && parseOptional(93)) {
+            if (!noConditionalTypes && !scanner.hasPrecedingLineBreak() && parseOptional(94)) {
                 var extendsType = parseTypeWorker(true);
                 parseExpected(57);
                 var trueType = parseTypeWorker();
@@ -25970,11 +26614,11 @@
         }
         function isStartOfLeftHandSideExpression() {
             switch (token()) {
-                case 107:
-                case 105:
-                case 103:
-                case 109:
-                case 94:
+                case 108:
+                case 106:
+                case 104:
+                case 110:
+                case 95:
                 case 8:
                 case 9:
                 case 10:
@@ -25983,14 +26627,14 @@
                 case 20:
                 case 22:
                 case 18:
-                case 97:
-                case 83:
-                case 102:
+                case 98:
+                case 84:
+                case 103:
                 case 43:
-                case 67:
-                case 78:
+                case 68:
+                case 79:
                     return true;
-                case 99:
+                case 100:
                     return lookAhead(nextTokenIsOpenParenOrLessThanOrDot);
                 default:
                     return isIdentifier();
@@ -26005,15 +26649,15 @@
                 case 40:
                 case 54:
                 case 53:
-                case 88:
-                case 111:
-                case 113:
+                case 89:
+                case 112:
+                case 114:
                 case 45:
                 case 46:
                 case 29:
-                case 130:
-                case 124:
-                case 79:
+                case 131:
+                case 125:
+                case 80:
                     return true;
                 default:
                     if (isBinaryOperator()) {
@@ -26024,8 +26668,8 @@
         }
         function isStartOfExpressionStatement() {
             return token() !== 18 &&
-                token() !== 97 &&
-                token() !== 83 &&
+                token() !== 98 &&
+                token() !== 84 &&
                 token() !== 59 &&
                 isStartOfExpression();
         }
@@ -26046,7 +26690,7 @@
             return expr;
         }
         function parseInitializer() {
-            return parseOptional(62) ? parseAssignmentExpressionOrHigher() : undefined;
+            return parseOptional(63) ? parseAssignmentExpressionOrHigher() : undefined;
         }
         function parseAssignmentExpressionOrHigher() {
             if (isYieldExpression()) {
@@ -26058,7 +26702,7 @@
             }
             var pos = getNodePos();
             var expr = parseBinaryExpressionOrHigher(0);
-            if (expr.kind === 78 && token() === 38) {
+            if (expr.kind === 79 && token() === 38) {
                 return parseSimpleArrowFunctionExpression(pos, expr, undefined);
             }
             if (ts.isLeftHandSideExpression(expr) && ts.isAssignmentOperator(reScanGreaterToken())) {
@@ -26067,7 +26711,7 @@
             return parseConditionalExpressionRest(expr, pos);
         }
         function isYieldExpression() {
-            if (token() === 124) {
+            if (token() === 125) {
                 if (inYieldContext()) {
                     return true;
                 }
@@ -26110,7 +26754,7 @@
                 tryParse(parsePossibleParenthesizedArrowFunctionExpression);
         }
         function isParenthesizedArrowFunctionExpression() {
-            if (token() === 20 || token() === 29 || token() === 129) {
+            if (token() === 20 || token() === 29 || token() === 130) {
                 return lookAhead(isParenthesizedArrowFunctionExpressionWorker);
             }
             if (token() === 38) {
@@ -26119,7 +26763,7 @@
             return 0;
         }
         function isParenthesizedArrowFunctionExpressionWorker() {
-            if (token() === 129) {
+            if (token() === 130) {
                 nextToken();
                 if (scanner.hasPrecedingLineBreak()) {
                     return 0;
@@ -26148,10 +26792,10 @@
                 if (second === 25) {
                     return 1;
                 }
-                if (ts.isModifierKind(second) && second !== 129 && lookAhead(nextTokenIsIdentifier)) {
+                if (ts.isModifierKind(second) && second !== 130 && lookAhead(nextTokenIsIdentifier)) {
                     return 1;
                 }
-                if (!isIdentifier() && second !== 107) {
+                if (!isIdentifier() && second !== 108) {
                     return 0;
                 }
                 switch (nextToken()) {
@@ -26159,12 +26803,12 @@
                         return 1;
                     case 57:
                         nextToken();
-                        if (token() === 58 || token() === 27 || token() === 62 || token() === 21) {
+                        if (token() === 58 || token() === 27 || token() === 63 || token() === 21) {
                             return 1;
                         }
                         return 0;
                     case 27:
-                    case 62:
+                    case 63:
                     case 21:
                         return 2;
                 }
@@ -26178,10 +26822,10 @@
                 if (languageVariant === 1) {
                     var isArrowFunctionInJsx = lookAhead(function () {
                         var third = nextToken();
-                        if (third === 93) {
+                        if (third === 94) {
                             var fourth = nextToken();
                             switch (fourth) {
-                                case 62:
+                                case 63:
                                 case 31:
                                     return false;
                                 default:
@@ -26213,7 +26857,7 @@
             return result;
         }
         function tryParseAsyncSimpleArrowFunctionExpression() {
-            if (token() === 129) {
+            if (token() === 130) {
                 if (lookAhead(isUnParenthesizedAsyncArrowFunctionWorker) === 1) {
                     var pos = getNodePos();
                     var asyncModifier = parseModifiersForArrowFunction();
@@ -26224,13 +26868,13 @@
             return undefined;
         }
         function isUnParenthesizedAsyncArrowFunctionWorker() {
-            if (token() === 129) {
+            if (token() === 130) {
                 nextToken();
                 if (scanner.hasPrecedingLineBreak() || token() === 38) {
                     return 0;
                 }
                 var expr = parseBinaryExpressionOrHigher(0);
-                if (!scanner.hasPrecedingLineBreak() && expr.kind === 78 && token() === 38) {
+                if (!scanner.hasPrecedingLineBreak() && expr.kind === 79 && token() === 38) {
                     return 1;
                 }
             }
@@ -26276,8 +26920,8 @@
                 return parseFunctionBlock(isAsync ? 2 : 0);
             }
             if (token() !== 26 &&
-                token() !== 97 &&
-                token() !== 83 &&
+                token() !== 98 &&
+                token() !== 84 &&
                 isStartOfStatement() &&
                 !isStartOfExpressionStatement()) {
                 return parseFunctionBlock(16 | (isAsync ? 2 : 0));
@@ -26298,7 +26942,7 @@
             var colonToken;
             return finishNode(factory.createConditionalExpression(leftOperand, questionToken, doOutsideOfContext(disallowInAndDecoratorContext, parseAssignmentExpressionOrHigher), colonToken = parseExpectedToken(58), ts.nodeIsPresent(colonToken)
                 ? parseAssignmentExpressionOrHigher()
-                : createMissingNode(78, false, ts.Diagnostics._0_expected, ts.tokenToString(58))), pos);
+                : createMissingNode(79, false, ts.Diagnostics._0_expected, ts.tokenToString(58))), pos);
         }
         function parseBinaryExpressionOrHigher(precedence) {
             var pos = getNodePos();
@@ -26306,7 +26950,7 @@
             return parseBinaryExpressionRest(precedence, leftOperand, pos);
         }
         function isInOrOfKeyword(t) {
-            return t === 100 || t === 157;
+            return t === 101 || t === 158;
         }
         function parseBinaryExpressionRest(precedence, leftOperand, pos) {
             while (true) {
@@ -26318,10 +26962,10 @@
                 if (!consumeCurrentOperator) {
                     break;
                 }
-                if (token() === 100 && inDisallowInContext()) {
+                if (token() === 101 && inDisallowInContext()) {
                     break;
                 }
-                if (token() === 126) {
+                if (token() === 127) {
                     if (scanner.hasPrecedingLineBreak()) {
                         break;
                     }
@@ -26337,7 +26981,7 @@
             return leftOperand;
         }
         function isBinaryOperator() {
-            if (inDisallowInContext() && token() === 100) {
+            if (inDisallowInContext() && token() === 101) {
                 return false;
             }
             return ts.getBinaryOperatorPrecedence(token()) > 0;
@@ -26365,7 +27009,7 @@
             return finishNode(factory.createVoidExpression(nextTokenAnd(parseSimpleUnaryExpression)), pos);
         }
         function isAwaitExpression() {
-            if (token() === 130) {
+            if (token() === 131) {
                 if (inAwaitContext()) {
                     return true;
                 }
@@ -26390,7 +27034,7 @@
             if (token() === 42) {
                 var pos = ts.skipTrivia(sourceText, simpleUnaryExpression.pos);
                 var end = simpleUnaryExpression.end;
-                if (simpleUnaryExpression.kind === 207) {
+                if (simpleUnaryExpression.kind === 209) {
                     parseErrorAt(pos, end, ts.Diagnostics.A_type_assertion_expression_is_not_allowed_in_the_left_hand_side_of_an_exponentiation_expression_Consider_enclosing_the_expression_in_parentheses);
                 }
                 else {
@@ -26406,15 +27050,15 @@
                 case 54:
                 case 53:
                     return parsePrefixUnaryExpression();
-                case 88:
+                case 89:
                     return parseDeleteExpression();
-                case 111:
+                case 112:
                     return parseTypeOfExpression();
-                case 113:
+                case 114:
                     return parseVoidExpression();
                 case 29:
                     return parseTypeAssertion();
-                case 130:
+                case 131:
                     if (isAwaitExpression()) {
                         return parseAwaitExpression();
                     }
@@ -26428,10 +27072,10 @@
                 case 40:
                 case 54:
                 case 53:
-                case 88:
-                case 111:
-                case 113:
-                case 130:
+                case 89:
+                case 112:
+                case 114:
+                case 131:
                     return false;
                 case 29:
                     if (languageVariant !== 1) {
@@ -26461,7 +27105,7 @@
         function parseLeftHandSideExpressionOrHigher() {
             var pos = getNodePos();
             var expression;
-            if (token() === 99) {
+            if (token() === 100) {
                 if (lookAhead(nextTokenIsOpenParenOrLessThan)) {
                     sourceFlags |= 1048576;
                     expression = parseTokenNode();
@@ -26469,7 +27113,7 @@
                 else if (lookAhead(nextTokenIsDot)) {
                     nextToken();
                     nextToken();
-                    expression = finishNode(factory.createMetaProperty(99, parseIdentifierName()), pos);
+                    expression = finishNode(factory.createMetaProperty(100, parseIdentifierName()), pos);
                     sourceFlags |= 2097152;
                 }
                 else {
@@ -26477,7 +27121,7 @@
                 }
             }
             else {
-                expression = token() === 105 ? parseSuperExpression() : parseMemberExpressionOrHigher();
+                expression = token() === 106 ? parseSuperExpression() : parseMemberExpressionOrHigher();
             }
             return parseCallExpressionRest(pos, expression);
         }
@@ -26502,23 +27146,40 @@
             parseExpectedToken(24, ts.Diagnostics.super_must_be_followed_by_an_argument_list_or_member_access);
             return finishNode(factory.createPropertyAccessExpression(expression, parseRightSideOfDot(true, true)), pos);
         }
-        function parseJsxElementOrSelfClosingElementOrFragment(inExpressionContext, topInvalidNodePosition) {
+        function parseJsxElementOrSelfClosingElementOrFragment(inExpressionContext, topInvalidNodePosition, openingTag) {
             var pos = getNodePos();
             var opening = parseJsxOpeningOrSelfClosingElementOrOpeningFragment(inExpressionContext);
             var result;
-            if (opening.kind === 276) {
+            if (opening.kind === 278) {
                 var children = parseJsxChildren(opening);
-                var closingElement = parseJsxClosingElement(inExpressionContext);
-                if (!tagNamesAreEquivalent(opening.tagName, closingElement.tagName)) {
-                    parseErrorAtRange(closingElement, ts.Diagnostics.Expected_corresponding_JSX_closing_tag_for_0, ts.getTextOfNodeFromSourceText(sourceText, opening.tagName));
+                var closingElement = void 0;
+                var lastChild = children[children.length - 1];
+                if ((lastChild === null || lastChild === void 0 ? void 0 : lastChild.kind) === 276
+                    && !tagNamesAreEquivalent(lastChild.openingElement.tagName, lastChild.closingElement.tagName)
+                    && tagNamesAreEquivalent(opening.tagName, lastChild.closingElement.tagName)) {
+                    var end = lastChild.openingElement.end;
+                    var newLast = finishNode(factory.createJsxElement(lastChild.openingElement, createNodeArray([], end, end), finishNode(factory.createJsxClosingElement(finishNode(factory.createIdentifier(""), end, end)), end, end)), lastChild.openingElement.pos, end);
+                    children = createNodeArray(__spreadArray(__spreadArray([], children.slice(0, children.length - 1), true), [newLast], false), children.pos, end);
+                    closingElement = lastChild.closingElement;
+                }
+                else {
+                    closingElement = parseJsxClosingElement(opening, inExpressionContext);
+                    if (!tagNamesAreEquivalent(opening.tagName, closingElement.tagName)) {
+                        if (openingTag && ts.isJsxOpeningElement(openingTag) && tagNamesAreEquivalent(closingElement.tagName, openingTag.tagName)) {
+                            parseErrorAtRange(opening.tagName, ts.Diagnostics.JSX_element_0_has_no_corresponding_closing_tag, ts.getTextOfNodeFromSourceText(sourceText, opening.tagName));
+                        }
+                        else {
+                            parseErrorAtRange(closingElement.tagName, ts.Diagnostics.Expected_corresponding_JSX_closing_tag_for_0, ts.getTextOfNodeFromSourceText(sourceText, opening.tagName));
+                        }
+                    }
                 }
                 result = finishNode(factory.createJsxElement(opening, children, closingElement), pos);
             }
-            else if (opening.kind === 279) {
+            else if (opening.kind === 281) {
                 result = finishNode(factory.createJsxFragment(opening, parseJsxChildren(opening), parseJsxClosingFragment(inExpressionContext)), pos);
             }
             else {
-                ts.Debug.assert(opening.kind === 275);
+                ts.Debug.assert(opening.kind === 277);
                 result = opening;
             }
             if (inExpressionContext && token() === 29) {
@@ -26560,7 +27221,7 @@
                 case 18:
                     return parseJsxExpression(false);
                 case 29:
-                    return parseJsxElementOrSelfClosingElementOrFragment(false);
+                    return parseJsxElementOrSelfClosingElementOrFragment(false, undefined, openingTag);
                 default:
                     return ts.Debug.assertNever(token);
             }
@@ -26575,6 +27236,12 @@
                 if (!child)
                     break;
                 list.push(child);
+                if (ts.isJsxOpeningElement(openingTag)
+                    && (child === null || child === void 0 ? void 0 : child.kind) === 276
+                    && !tagNamesAreEquivalent(child.openingElement.tagName, child.closingElement.tagName)
+                    && tagNamesAreEquivalent(openingTag.tagName, child.closingElement.tagName)) {
+                    break;
+                }
             }
             parsingContext = saveParsingContext;
             return createNodeArray(list, listPos);
@@ -26600,12 +27267,13 @@
             }
             else {
                 parseExpected(43);
-                if (inExpressionContext) {
-                    parseExpected(31);
-                }
-                else {
-                    parseExpected(31, undefined, false);
-                    scanJsxText();
+                if (parseExpected(31, undefined, false)) {
+                    if (inExpressionContext) {
+                        nextToken();
+                    }
+                    else {
+                        scanJsxText();
+                    }
                 }
                 node = factory.createJsxSelfClosingElement(tagName, typeArguments, attributes);
             }
@@ -26614,7 +27282,7 @@
         function parseJsxElementName() {
             var pos = getNodePos();
             scanJsxIdentifier();
-            var expression = token() === 107 ?
+            var expression = token() === 108 ?
                 parseTokenNode() : parseIdentifierName();
             while (parseOptional(24)) {
                 expression = finishNode(factory.createPropertyAccessExpression(expression, parseRightSideOfDot(true, false)), pos);
@@ -26648,7 +27316,7 @@
             }
             scanJsxIdentifier();
             var pos = getNodePos();
-            return finishNode(factory.createJsxAttribute(parseIdentifierName(), token() !== 62 ? undefined :
+            return finishNode(factory.createJsxAttribute(parseIdentifierName(), token() !== 63 ? undefined :
                 scanJsxAttributeValue() === 10 ? parseLiteralNode() :
                     parseJsxExpression(true)), pos);
         }
@@ -26660,16 +27328,17 @@
             parseExpected(19);
             return finishNode(factory.createJsxSpreadAttribute(expression), pos);
         }
-        function parseJsxClosingElement(inExpressionContext) {
+        function parseJsxClosingElement(open, inExpressionContext) {
             var pos = getNodePos();
             parseExpected(30);
             var tagName = parseJsxElementName();
-            if (inExpressionContext) {
-                parseExpected(31);
-            }
-            else {
-                parseExpected(31, undefined, false);
-                scanJsxText();
+            if (parseExpected(31, undefined, false)) {
+                if (inExpressionContext || !tagNamesAreEquivalent(open.tagName, tagName)) {
+                    nextToken();
+                }
+                else {
+                    scanJsxText();
+                }
             }
             return finishNode(factory.createJsxClosingElement(tagName), pos);
         }
@@ -26679,12 +27348,13 @@
             if (ts.tokenIsIdentifierOrKeyword(token())) {
                 parseErrorAtRange(parseJsxElementName(), ts.Diagnostics.Expected_corresponding_closing_tag_for_JSX_fragment);
             }
-            if (inExpressionContext) {
-                parseExpected(31);
-            }
-            else {
-                parseExpected(31, undefined, false);
-                scanJsxText();
+            if (parseExpected(31, undefined, false)) {
+                if (inExpressionContext) {
+                    nextToken();
+                }
+                else {
+                    scanJsxText();
+                }
             }
             return finishNode(factory.createJsxJsxClosingFragment(), pos);
         }
@@ -26739,7 +27409,7 @@
         function parseElementAccessExpressionRest(pos, expression, questionDotToken) {
             var argumentExpression;
             if (token() === 23) {
-                argumentExpression = createMissingNode(78, true, ts.Diagnostics.An_element_access_expression_should_take_an_argument);
+                argumentExpression = createMissingNode(79, true, ts.Diagnostics.An_element_access_expression_should_take_an_argument);
             }
             else {
                 var argument = allowInAnd(parseExpression);
@@ -26826,7 +27496,7 @@
                     continue;
                 }
                 if (questionDotToken) {
-                    var name = createMissingNode(78, false, ts.Diagnostics.Identifier_expected);
+                    var name = createMissingNode(79, false, ts.Diagnostics.Identifier_expected);
                     expression = finishNode(factory.createPropertyAccessChain(expression, questionDotToken, name), pos);
                 }
                 break;
@@ -26892,11 +27562,11 @@
                 case 10:
                 case 14:
                     return parseLiteralNode();
-                case 107:
-                case 105:
-                case 103:
-                case 109:
-                case 94:
+                case 108:
+                case 106:
+                case 104:
+                case 110:
+                case 95:
                     return parseTokenNode();
                 case 20:
                     return parseParenthesizedExpression();
@@ -26904,19 +27574,19 @@
                     return parseArrayLiteralExpression();
                 case 18:
                     return parseObjectLiteralExpression();
-                case 129:
+                case 130:
                     if (!lookAhead(nextTokenIsFunctionKeywordOnSameLine)) {
                         break;
                     }
                     return parseFunctionExpression();
-                case 83:
+                case 84:
                     return parseClassExpression();
-                case 97:
+                case 98:
                     return parseFunctionExpression();
-                case 102:
+                case 103:
                     return parseNewExpressionOrNewDotTarget();
                 case 43:
-                case 67:
+                case 68:
                     if (reScanSlashToken() === 13) {
                         return parseLiteralNode();
                     }
@@ -26965,11 +27635,11 @@
             }
             var decorators = parseDecorators();
             var modifiers = parseModifiers();
-            if (parseContextualModifier(134)) {
-                return parseAccessorDeclaration(pos, hasJSDoc, decorators, modifiers, 168);
+            if (parseContextualModifier(135)) {
+                return parseAccessorDeclaration(pos, hasJSDoc, decorators, modifiers, 170);
             }
-            if (parseContextualModifier(146)) {
-                return parseAccessorDeclaration(pos, hasJSDoc, decorators, modifiers, 169);
+            if (parseContextualModifier(147)) {
+                return parseAccessorDeclaration(pos, hasJSDoc, decorators, modifiers, 171);
             }
             var asteriskToken = parseOptionalToken(41);
             var tokenIsIdentifier = isIdentifier();
@@ -26982,7 +27652,7 @@
             var node;
             var isShorthandPropertyAssignment = tokenIsIdentifier && (token() !== 58);
             if (isShorthandPropertyAssignment) {
-                var equalsToken = parseOptionalToken(62);
+                var equalsToken = parseOptionalToken(63);
                 var objectAssignmentInitializer = equalsToken ? allowInAnd(parseAssignmentExpressionOrHigher) : undefined;
                 node = factory.createShorthandPropertyAssignment(name, objectAssignmentInitializer);
                 node.equalsToken = equalsToken;
@@ -27013,14 +27683,12 @@
             return finishNode(factory.createObjectLiteralExpression(properties, multiLine), pos);
         }
         function parseFunctionExpression() {
-            var saveDecoratorContext = inDecoratorContext();
-            if (saveDecoratorContext) {
-                setDecoratorContext(false);
-            }
+            var savedDecoratorContext = inDecoratorContext();
+            setDecoratorContext(false);
             var pos = getNodePos();
             var hasJSDoc = hasPrecedingJSDocComment();
             var modifiers = parseModifiers();
-            parseExpected(97);
+            parseExpected(98);
             var asteriskToken = parseOptionalToken(41);
             var isGenerator = asteriskToken ? 1 : 0;
             var isAsync = ts.some(modifiers, ts.isAsyncModifier) ? 2 : 0;
@@ -27032,9 +27700,7 @@
             var parameters = parseParameters(isGenerator | isAsync);
             var type = parseReturnType(58, false);
             var body = parseFunctionBlock(isGenerator | isAsync);
-            if (saveDecoratorContext) {
-                setDecoratorContext(true);
-            }
+            setDecoratorContext(savedDecoratorContext);
             var node = factory.createFunctionExpression(modifiers, asteriskToken, name, typeParameters, parameters, type, body);
             return withJSDoc(finishNode(node, pos), hasJSDoc);
         }
@@ -27043,10 +27709,10 @@
         }
         function parseNewExpressionOrNewDotTarget() {
             var pos = getNodePos();
-            parseExpected(102);
+            parseExpected(103);
             if (parseOptional(24)) {
                 var name = parseIdentifierName();
-                return finishNode(factory.createMetaProperty(102, name), pos);
+                return finishNode(factory.createMetaProperty(103, name), pos);
             }
             var expressionPos = getNodePos();
             var expression = parsePrimaryExpression();
@@ -27084,7 +27750,7 @@
                     }
                 }
                 var result = withJSDoc(finishNode(factory.createBlock(statements, multiLine), pos), hasJSDoc);
-                if (token() === 62) {
+                if (token() === 63) {
                     parseErrorAtCurrentToken(ts.Diagnostics.Declaration_or_statement_expected_This_follows_a_block_of_statements_so_if_you_intended_to_write_a_destructuring_assignment_you_might_need_to_wrap_the_the_whole_assignment_in_parentheses);
                     nextToken();
                 }
@@ -27124,20 +27790,20 @@
         function parseIfStatement() {
             var pos = getNodePos();
             var hasJSDoc = hasPrecedingJSDocComment();
-            parseExpected(98);
+            parseExpected(99);
             parseExpected(20);
             var expression = allowInAnd(parseExpression);
             parseExpected(21);
             var thenStatement = parseStatement();
-            var elseStatement = parseOptional(90) ? parseStatement() : undefined;
+            var elseStatement = parseOptional(91) ? parseStatement() : undefined;
             return withJSDoc(finishNode(factory.createIfStatement(expression, thenStatement, elseStatement), pos), hasJSDoc);
         }
         function parseDoStatement() {
             var pos = getNodePos();
             var hasJSDoc = hasPrecedingJSDocComment();
-            parseExpected(89);
+            parseExpected(90);
             var statement = parseStatement();
-            parseExpected(114);
+            parseExpected(115);
             parseExpected(20);
             var expression = allowInAnd(parseExpression);
             parseExpected(21);
@@ -27147,7 +27813,7 @@
         function parseWhileStatement() {
             var pos = getNodePos();
             var hasJSDoc = hasPrecedingJSDocComment();
-            parseExpected(114);
+            parseExpected(115);
             parseExpected(20);
             var expression = allowInAnd(parseExpression);
             parseExpected(21);
@@ -27157,12 +27823,12 @@
         function parseForOrForInOrForOfStatement() {
             var pos = getNodePos();
             var hasJSDoc = hasPrecedingJSDocComment();
-            parseExpected(96);
-            var awaitToken = parseOptionalToken(130);
+            parseExpected(97);
+            var awaitToken = parseOptionalToken(131);
             parseExpected(20);
             var initializer;
             if (token() !== 26) {
-                if (token() === 112 || token() === 118 || token() === 84) {
+                if (token() === 113 || token() === 119 || token() === 85) {
                     initializer = parseVariableDeclarationList(true);
                 }
                 else {
@@ -27170,12 +27836,12 @@
                 }
             }
             var node;
-            if (awaitToken ? parseExpected(157) : parseOptional(157)) {
+            if (awaitToken ? parseExpected(158) : parseOptional(158)) {
                 var expression = allowInAnd(parseAssignmentExpressionOrHigher);
                 parseExpected(21);
                 node = factory.createForOfStatement(awaitToken, initializer, expression, parseStatement());
             }
-            else if (parseOptional(100)) {
+            else if (parseOptional(101)) {
                 var expression = allowInAnd(parseExpression);
                 parseExpected(21);
                 node = factory.createForInStatement(initializer, expression, parseStatement());
@@ -27197,10 +27863,10 @@
         function parseBreakOrContinueStatement(kind) {
             var pos = getNodePos();
             var hasJSDoc = hasPrecedingJSDocComment();
-            parseExpected(kind === 242 ? 80 : 85);
+            parseExpected(kind === 244 ? 81 : 86);
             var label = canParseSemicolon() ? undefined : parseIdentifier();
             parseSemicolon();
-            var node = kind === 242
+            var node = kind === 244
                 ? factory.createBreakStatement(label)
                 : factory.createContinueStatement(label);
             return withJSDoc(finishNode(node, pos), hasJSDoc);
@@ -27208,7 +27874,7 @@
         function parseReturnStatement() {
             var pos = getNodePos();
             var hasJSDoc = hasPrecedingJSDocComment();
-            parseExpected(104);
+            parseExpected(105);
             var expression = canParseSemicolon() ? undefined : allowInAnd(parseExpression);
             parseSemicolon();
             return withJSDoc(finishNode(factory.createReturnStatement(expression), pos), hasJSDoc);
@@ -27216,7 +27882,7 @@
         function parseWithStatement() {
             var pos = getNodePos();
             var hasJSDoc = hasPrecedingJSDocComment();
-            parseExpected(115);
+            parseExpected(116);
             parseExpected(20);
             var expression = allowInAnd(parseExpression);
             parseExpected(21);
@@ -27225,7 +27891,7 @@
         }
         function parseCaseClause() {
             var pos = getNodePos();
-            parseExpected(81);
+            parseExpected(82);
             var expression = allowInAnd(parseExpression);
             parseExpected(58);
             var statements = parseList(3, parseStatement);
@@ -27233,13 +27899,13 @@
         }
         function parseDefaultClause() {
             var pos = getNodePos();
-            parseExpected(87);
+            parseExpected(88);
             parseExpected(58);
             var statements = parseList(3, parseStatement);
             return finishNode(factory.createDefaultClause(statements), pos);
         }
         function parseCaseOrDefaultClause() {
-            return token() === 81 ? parseCaseClause() : parseDefaultClause();
+            return token() === 82 ? parseCaseClause() : parseDefaultClause();
         }
         function parseCaseBlock() {
             var pos = getNodePos();
@@ -27251,7 +27917,7 @@
         function parseSwitchStatement() {
             var pos = getNodePos();
             var hasJSDoc = hasPrecedingJSDocComment();
-            parseExpected(106);
+            parseExpected(107);
             parseExpected(20);
             var expression = allowInAnd(parseExpression);
             parseExpected(21);
@@ -27261,31 +27927,33 @@
         function parseThrowStatement() {
             var pos = getNodePos();
             var hasJSDoc = hasPrecedingJSDocComment();
-            parseExpected(108);
+            parseExpected(109);
             var expression = scanner.hasPrecedingLineBreak() ? undefined : allowInAnd(parseExpression);
             if (expression === undefined) {
                 identifierCount++;
                 expression = finishNode(factory.createIdentifier(""), getNodePos());
             }
-            parseSemicolon();
+            if (!tryParseSemicolon()) {
+                parseErrorForMissingSemicolonAfter(expression);
+            }
             return withJSDoc(finishNode(factory.createThrowStatement(expression), pos), hasJSDoc);
         }
         function parseTryStatement() {
             var pos = getNodePos();
             var hasJSDoc = hasPrecedingJSDocComment();
-            parseExpected(110);
+            parseExpected(111);
             var tryBlock = parseBlock(false);
-            var catchClause = token() === 82 ? parseCatchClause() : undefined;
+            var catchClause = token() === 83 ? parseCatchClause() : undefined;
             var finallyBlock;
-            if (!catchClause || token() === 95) {
-                parseExpected(95);
+            if (!catchClause || token() === 96) {
+                parseExpected(96);
                 finallyBlock = parseBlock(false);
             }
             return withJSDoc(finishNode(factory.createTryStatement(tryBlock, catchClause, finallyBlock), pos), hasJSDoc);
         }
         function parseCatchClause() {
             var pos = getNodePos();
-            parseExpected(82);
+            parseExpected(83);
             var variableDeclaration;
             if (parseOptional(20)) {
                 variableDeclaration = parseVariableDeclaration();
@@ -27300,7 +27968,7 @@
         function parseDebuggerStatement() {
             var pos = getNodePos();
             var hasJSDoc = hasPrecedingJSDocComment();
-            parseExpected(86);
+            parseExpected(87);
             parseSemicolon();
             return withJSDoc(finishNode(factory.createDebuggerStatement(), pos), hasJSDoc);
         }
@@ -27314,7 +27982,9 @@
                 node = factory.createLabeledStatement(expression, parseStatement());
             }
             else {
-                parseSemicolon();
+                if (!tryParseSemicolon()) {
+                    parseErrorForMissingSemicolonAfter(expression);
+                }
                 node = factory.createExpressionStatement(expression);
                 if (hasParen) {
                     hasJSDoc = false;
@@ -27328,11 +27998,11 @@
         }
         function nextTokenIsClassKeywordOnSameLine() {
             nextToken();
-            return token() === 83 && !scanner.hasPrecedingLineBreak();
+            return token() === 84 && !scanner.hasPrecedingLineBreak();
         }
         function nextTokenIsFunctionKeywordOnSameLine() {
             nextToken();
-            return token() === 97 && !scanner.hasPrecedingLineBreak();
+            return token() === 98 && !scanner.hasPrecedingLineBreak();
         }
         function nextTokenIsIdentifierOrKeywordOrLiteralOnSameLine() {
             nextToken();
@@ -27341,50 +28011,50 @@
         function isDeclaration() {
             while (true) {
                 switch (token()) {
-                    case 112:
-                    case 118:
+                    case 113:
+                    case 119:
+                    case 85:
+                    case 98:
                     case 84:
-                    case 97:
-                    case 83:
-                    case 91:
+                    case 92:
                         return true;
-                    case 117:
-                    case 149:
+                    case 118:
+                    case 150:
                         return nextTokenIsIdentifierOnSameLine();
-                    case 139:
                     case 140:
+                    case 141:
                         return nextTokenIsIdentifierOrStringLiteralOnSameLine();
-                    case 125:
-                    case 129:
-                    case 133:
-                    case 120:
+                    case 126:
+                    case 130:
+                    case 134:
                     case 121:
                     case 122:
-                    case 142:
+                    case 123:
+                    case 143:
                         nextToken();
                         if (scanner.hasPrecedingLineBreak()) {
                             return false;
                         }
                         continue;
-                    case 154:
+                    case 155:
                         nextToken();
-                        return token() === 18 || token() === 78 || token() === 92;
-                    case 99:
+                        return token() === 18 || token() === 79 || token() === 93;
+                    case 100:
                         nextToken();
                         return token() === 10 || token() === 41 ||
                             token() === 18 || ts.tokenIsIdentifierOrKeyword(token());
-                    case 92:
+                    case 93:
                         var currentToken_1 = nextToken();
-                        if (currentToken_1 === 149) {
+                        if (currentToken_1 === 150) {
                             currentToken_1 = lookAhead(nextToken);
                         }
-                        if (currentToken_1 === 62 || currentToken_1 === 41 ||
-                            currentToken_1 === 18 || currentToken_1 === 87 ||
-                            currentToken_1 === 126) {
+                        if (currentToken_1 === 63 || currentToken_1 === 41 ||
+                            currentToken_1 === 18 || currentToken_1 === 88 ||
+                            currentToken_1 === 127) {
                             return true;
                         }
                         continue;
-                    case 123:
+                    case 124:
                         nextToken();
                         continue;
                     default:
@@ -27400,55 +28070,55 @@
                 case 59:
                 case 26:
                 case 18:
-                case 112:
-                case 118:
-                case 97:
-                case 83:
-                case 91:
+                case 113:
+                case 119:
                 case 98:
-                case 89:
-                case 114:
-                case 96:
-                case 85:
-                case 80:
-                case 104:
-                case 115:
-                case 106:
-                case 108:
-                case 110:
-                case 86:
-                case 82:
-                case 95:
-                    return true;
-                case 99:
-                    return isStartOfDeclaration() || lookAhead(nextTokenIsOpenParenOrLessThanOrDot);
                 case 84:
                 case 92:
-                    return isStartOfDeclaration();
-                case 129:
-                case 133:
-                case 117:
-                case 139:
-                case 140:
-                case 149:
-                case 154:
+                case 99:
+                case 90:
+                case 115:
+                case 97:
+                case 86:
+                case 81:
+                case 105:
+                case 116:
+                case 107:
+                case 109:
+                case 111:
+                case 87:
+                case 83:
+                case 96:
                     return true;
-                case 122:
-                case 120:
-                case 121:
+                case 100:
+                    return isStartOfDeclaration() || lookAhead(nextTokenIsOpenParenOrLessThanOrDot);
+                case 85:
+                case 93:
+                    return isStartOfDeclaration();
+                case 130:
+                case 134:
+                case 118:
+                case 140:
+                case 141:
+                case 150:
+                case 155:
+                    return true;
                 case 123:
-                case 142:
+                case 121:
+                case 122:
+                case 124:
+                case 143:
                     return isStartOfDeclaration() || !lookAhead(nextTokenIsIdentifierOrKeywordOnSameLine);
                 default:
                     return isStartOfExpression();
             }
         }
-        function nextTokenIsIdentifierOrStartOfDestructuring() {
+        function nextTokenIsBindingIdentifierOrStartOfDestructuring() {
             nextToken();
-            return isIdentifier() || token() === 18 || token() === 22;
+            return isBindingIdentifier() || token() === 18 || token() === 22;
         }
         function isLetDeclaration() {
-            return lookAhead(nextTokenIsIdentifierOrStartOfDestructuring);
+            return lookAhead(nextTokenIsBindingIdentifierOrStartOfDestructuring);
         }
         function parseStatement() {
             switch (token()) {
@@ -27456,62 +28126,62 @@
                     return parseEmptyStatement();
                 case 18:
                     return parseBlock(false);
-                case 112:
+                case 113:
                     return parseVariableStatement(getNodePos(), hasPrecedingJSDocComment(), undefined, undefined);
-                case 118:
+                case 119:
                     if (isLetDeclaration()) {
                         return parseVariableStatement(getNodePos(), hasPrecedingJSDocComment(), undefined, undefined);
                     }
                     break;
-                case 97:
-                    return parseFunctionDeclaration(getNodePos(), hasPrecedingJSDocComment(), undefined, undefined);
-                case 83:
-                    return parseClassDeclaration(getNodePos(), hasPrecedingJSDocComment(), undefined, undefined);
                 case 98:
+                    return parseFunctionDeclaration(getNodePos(), hasPrecedingJSDocComment(), undefined, undefined);
+                case 84:
+                    return parseClassDeclaration(getNodePos(), hasPrecedingJSDocComment(), undefined, undefined);
+                case 99:
                     return parseIfStatement();
-                case 89:
+                case 90:
                     return parseDoStatement();
-                case 114:
-                    return parseWhileStatement();
-                case 96:
-                    return parseForOrForInOrForOfStatement();
-                case 85:
-                    return parseBreakOrContinueStatement(241);
-                case 80:
-                    return parseBreakOrContinueStatement(242);
-                case 104:
-                    return parseReturnStatement();
                 case 115:
-                    return parseWithStatement();
-                case 106:
-                    return parseSwitchStatement();
-                case 108:
-                    return parseThrowStatement();
-                case 110:
-                case 82:
-                case 95:
-                    return parseTryStatement();
+                    return parseWhileStatement();
+                case 97:
+                    return parseForOrForInOrForOfStatement();
                 case 86:
+                    return parseBreakOrContinueStatement(243);
+                case 81:
+                    return parseBreakOrContinueStatement(244);
+                case 105:
+                    return parseReturnStatement();
+                case 116:
+                    return parseWithStatement();
+                case 107:
+                    return parseSwitchStatement();
+                case 109:
+                    return parseThrowStatement();
+                case 111:
+                case 83:
+                case 96:
+                    return parseTryStatement();
+                case 87:
                     return parseDebuggerStatement();
                 case 59:
                     return parseDeclaration();
-                case 129:
-                case 117:
-                case 149:
-                case 139:
+                case 130:
+                case 118:
+                case 150:
                 case 140:
-                case 133:
-                case 84:
-                case 91:
+                case 141:
+                case 134:
+                case 85:
                 case 92:
-                case 99:
-                case 120:
+                case 93:
+                case 100:
                 case 121:
                 case 122:
-                case 125:
                 case 123:
-                case 142:
-                case 154:
+                case 126:
+                case 124:
+                case 143:
+                case 155:
                     if (isStartOfDeclaration()) {
                         return parseDeclaration();
                     }
@@ -27520,7 +28190,7 @@
             return parseExpressionOrLabeledStatement();
         }
         function isDeclareModifier(modifier) {
-            return modifier.kind === 133;
+            return modifier.kind === 134;
         }
         function parseDeclaration() {
             var isAmbient = ts.some(lookAhead(function () { return (parseDecorators(), parseModifiers()); }), isDeclareModifier);
@@ -27555,40 +28225,40 @@
         }
         function parseDeclarationWorker(pos, hasJSDoc, decorators, modifiers) {
             switch (token()) {
-                case 112:
-                case 118:
-                case 84:
+                case 113:
+                case 119:
+                case 85:
                     return parseVariableStatement(pos, hasJSDoc, decorators, modifiers);
-                case 97:
+                case 98:
                     return parseFunctionDeclaration(pos, hasJSDoc, decorators, modifiers);
-                case 83:
+                case 84:
                     return parseClassDeclaration(pos, hasJSDoc, decorators, modifiers);
-                case 117:
+                case 118:
                     return parseInterfaceDeclaration(pos, hasJSDoc, decorators, modifiers);
-                case 149:
+                case 150:
                     return parseTypeAliasDeclaration(pos, hasJSDoc, decorators, modifiers);
-                case 91:
-                    return parseEnumDeclaration(pos, hasJSDoc, decorators, modifiers);
-                case 154:
-                case 139:
-                case 140:
-                    return parseModuleDeclaration(pos, hasJSDoc, decorators, modifiers);
-                case 99:
-                    return parseImportDeclarationOrImportEqualsDeclaration(pos, hasJSDoc, decorators, modifiers);
                 case 92:
+                    return parseEnumDeclaration(pos, hasJSDoc, decorators, modifiers);
+                case 155:
+                case 140:
+                case 141:
+                    return parseModuleDeclaration(pos, hasJSDoc, decorators, modifiers);
+                case 100:
+                    return parseImportDeclarationOrImportEqualsDeclaration(pos, hasJSDoc, decorators, modifiers);
+                case 93:
                     nextToken();
                     switch (token()) {
-                        case 87:
-                        case 62:
+                        case 88:
+                        case 63:
                             return parseExportAssignment(pos, hasJSDoc, decorators, modifiers);
-                        case 126:
+                        case 127:
                             return parseNamespaceExportDeclaration(pos, hasJSDoc, decorators, modifiers);
                         default:
                             return parseExportDeclaration(pos, hasJSDoc, decorators, modifiers);
                     }
                 default:
                     if (decorators || modifiers) {
-                        var missing = createMissingNode(272, true, ts.Diagnostics.Declaration_expected);
+                        var missing = createMissingNode(274, true, ts.Diagnostics.Declaration_expected);
                         ts.setTextRangePos(missing, pos);
                         missing.decorators = decorators;
                         missing.modifiers = modifiers;
@@ -27652,7 +28322,7 @@
         function isBindingIdentifierOrPrivateIdentifierOrPattern() {
             return token() === 18
                 || token() === 22
-                || token() === 79
+                || token() === 80
                 || isBindingIdentifier();
         }
         function parseIdentifierOrPattern(privateIdentifierDiagnosticMessage) {
@@ -27672,7 +28342,7 @@
             var hasJSDoc = hasPrecedingJSDocComment();
             var name = parseIdentifierOrPattern(ts.Diagnostics.Private_identifiers_are_not_allowed_in_variable_declarations);
             var exclamationToken;
-            if (allowExclamation && name.kind === 78 &&
+            if (allowExclamation && name.kind === 79 &&
                 token() === 53 && !scanner.hasPrecedingLineBreak()) {
                 exclamationToken = parseTokenNode();
             }
@@ -27685,12 +28355,12 @@
             var pos = getNodePos();
             var flags = 0;
             switch (token()) {
-                case 112:
+                case 113:
                     break;
-                case 118:
+                case 119:
                     flags |= 1;
                     break;
-                case 84:
+                case 85:
                     flags |= 2;
                     break;
                 default:
@@ -27698,7 +28368,7 @@
             }
             nextToken();
             var declarations;
-            if (token() === 157 && lookAhead(canFollowContextualOfKeyword)) {
+            if (token() === 158 && lookAhead(canFollowContextualOfKeyword)) {
                 declarations = createMissingList();
             }
             else {
@@ -27722,7 +28392,7 @@
         function parseFunctionDeclaration(pos, hasJSDoc, decorators, modifiers) {
             var savedAwaitContext = inAwaitContext();
             var modifierFlags = ts.modifiersToFlags(modifiers);
-            parseExpected(97);
+            parseExpected(98);
             var asteriskToken = parseOptionalToken(41);
             var name = modifierFlags & 512 ? parseOptionalBindingIdentifier() : parseBindingIdentifier();
             var isGenerator = asteriskToken ? 1 : 0;
@@ -27738,8 +28408,8 @@
             return withJSDoc(finishNode(node, pos), hasJSDoc);
         }
         function parseConstructorName() {
-            if (token() === 132) {
-                return parseExpected(132);
+            if (token() === 133) {
+                return parseExpected(133);
             }
             if (token() === 10 && lookAhead(nextToken) === 20) {
                 return tryParse(function () {
@@ -27777,7 +28447,7 @@
             var exclamationToken = !questionToken && !scanner.hasPrecedingLineBreak() ? parseOptionalToken(53) : undefined;
             var type = parseTypeAnnotation();
             var initializer = doOutsideOfContext(8192 | 32768 | 4096, parseInitializer);
-            parseSemicolon();
+            parseSemicolonAfterPropertyName(name, type, initializer);
             var node = factory.createPropertyDeclaration(decorators, modifiers, name, questionToken || exclamationToken, type, initializer);
             return withJSDoc(finishNode(node, pos), hasJSDoc);
         }
@@ -27796,11 +28466,11 @@
             var parameters = parseParameters(0);
             var type = parseReturnType(58, false);
             var body = parseFunctionBlockOrSemicolon(0);
-            var node = kind === 168
+            var node = kind === 170
                 ? factory.createGetAccessorDeclaration(decorators, modifiers, name, parameters, type, body)
                 : factory.createSetAccessorDeclaration(decorators, modifiers, name, parameters, body);
             node.typeParameters = typeParameters;
-            if (type && node.kind === 169)
+            if (type && node.kind === 171)
                 node.type = type;
             return withJSDoc(finishNode(node, pos), hasJSDoc);
         }
@@ -27827,7 +28497,7 @@
                 return true;
             }
             if (idToken !== undefined) {
-                if (!ts.isKeyword(idToken) || idToken === 146 || idToken === 134) {
+                if (!ts.isKeyword(idToken) || idToken === 147 || idToken === 135) {
                     return true;
                 }
                 switch (token()) {
@@ -27835,7 +28505,7 @@
                     case 29:
                     case 53:
                     case 58:
-                    case 62:
+                    case 63:
                     case 57:
                         return true;
                     default:
@@ -27844,8 +28514,23 @@
             }
             return false;
         }
+        function parseClassStaticBlockDeclaration(pos, hasJSDoc, decorators, modifiers) {
+            parseExpectedToken(124);
+            var body = parseClassStaticBlockBody();
+            return withJSDoc(finishNode(factory.createClassStaticBlockDeclaration(decorators, modifiers, body), pos), hasJSDoc);
+        }
+        function parseClassStaticBlockBody() {
+            var savedYieldContext = inYieldContext();
+            var savedAwaitContext = inAwaitContext();
+            setYieldContext(false);
+            setAwaitContext(true);
+            var body = parseBlock(false);
+            setYieldContext(savedYieldContext);
+            setAwaitContext(savedAwaitContext);
+            return body;
+        }
         function parseDecoratorExpression() {
-            if (inAwaitContext() && token() === 130) {
+            if (inAwaitContext() && token() === 131) {
                 var pos = getNodePos();
                 var awaitExpression = parseIdentifier(ts.Diagnostics.Expression_expected);
                 nextToken();
@@ -27870,14 +28555,17 @@
             }
             return list && createNodeArray(list, pos);
         }
-        function tryParseModifier(permitInvalidConstAsModifier) {
+        function tryParseModifier(permitInvalidConstAsModifier, stopOnStartOfClassStaticBlock) {
             var pos = getNodePos();
             var kind = token();
-            if (token() === 84 && permitInvalidConstAsModifier) {
+            if (token() === 85 && permitInvalidConstAsModifier) {
                 if (!tryParse(nextTokenIsOnSameLineAndCanFollowModifier)) {
                     return undefined;
                 }
             }
+            else if (stopOnStartOfClassStaticBlock && token() === 124 && lookAhead(nextTokenIsOpenBrace)) {
+                return undefined;
+            }
             else {
                 if (!parseAnyContextualModifier()) {
                     return undefined;
@@ -27885,20 +28573,20 @@
             }
             return finishNode(factory.createToken(kind), pos);
         }
-        function parseModifiers(permitInvalidConstAsModifier) {
+        function parseModifiers(permitInvalidConstAsModifier, stopOnStartOfClassStaticBlock) {
             var pos = getNodePos();
             var list, modifier;
-            while (modifier = tryParseModifier(permitInvalidConstAsModifier)) {
+            while (modifier = tryParseModifier(permitInvalidConstAsModifier, stopOnStartOfClassStaticBlock)) {
                 list = ts.append(list, modifier);
             }
             return list && createNodeArray(list, pos);
         }
         function parseModifiersForArrowFunction() {
             var modifiers;
-            if (token() === 129) {
+            if (token() === 130) {
                 var pos = getNodePos();
                 nextToken();
-                var modifier = finishNode(factory.createToken(129), pos);
+                var modifier = finishNode(factory.createToken(130), pos);
                 modifiers = createNodeArray([modifier], pos);
             }
             return modifiers;
@@ -27911,14 +28599,17 @@
             }
             var hasJSDoc = hasPrecedingJSDocComment();
             var decorators = parseDecorators();
-            var modifiers = parseModifiers(true);
-            if (parseContextualModifier(134)) {
-                return parseAccessorDeclaration(pos, hasJSDoc, decorators, modifiers, 168);
+            var modifiers = parseModifiers(true, true);
+            if (token() === 124 && lookAhead(nextTokenIsOpenBrace)) {
+                return parseClassStaticBlockDeclaration(pos, hasJSDoc, decorators, modifiers);
             }
-            if (parseContextualModifier(146)) {
-                return parseAccessorDeclaration(pos, hasJSDoc, decorators, modifiers, 169);
+            if (parseContextualModifier(135)) {
+                return parseAccessorDeclaration(pos, hasJSDoc, decorators, modifiers, 170);
             }
-            if (token() === 132 || token() === 10) {
+            if (parseContextualModifier(147)) {
+                return parseAccessorDeclaration(pos, hasJSDoc, decorators, modifiers, 171);
+            }
+            if (token() === 133 || token() === 10) {
                 var constructorDeclaration = tryParseConstructorDeclaration(pos, hasJSDoc, decorators, modifiers);
                 if (constructorDeclaration) {
                     return constructorDeclaration;
@@ -27945,20 +28636,20 @@
                 }
             }
             if (decorators || modifiers) {
-                var name = createMissingNode(78, true, ts.Diagnostics.Declaration_expected);
+                var name = createMissingNode(79, true, ts.Diagnostics.Declaration_expected);
                 return parsePropertyDeclaration(pos, hasJSDoc, decorators, modifiers, name, undefined);
             }
             return ts.Debug.fail("Should not have attempted to parse class member declaration.");
         }
         function parseClassExpression() {
-            return parseClassDeclarationOrExpression(getNodePos(), hasPrecedingJSDocComment(), undefined, undefined, 222);
+            return parseClassDeclarationOrExpression(getNodePos(), hasPrecedingJSDocComment(), undefined, undefined, 224);
         }
         function parseClassDeclaration(pos, hasJSDoc, decorators, modifiers) {
-            return parseClassDeclarationOrExpression(pos, hasJSDoc, decorators, modifiers, 253);
+            return parseClassDeclarationOrExpression(pos, hasJSDoc, decorators, modifiers, 255);
         }
         function parseClassDeclarationOrExpression(pos, hasJSDoc, decorators, modifiers, kind) {
             var savedAwaitContext = inAwaitContext();
-            parseExpected(83);
+            parseExpected(84);
             var name = parseNameOfClassDeclarationOrExpression();
             var typeParameters = parseTypeParameters();
             if (ts.some(modifiers, ts.isExportModifier))
@@ -27973,7 +28664,7 @@
                 members = createMissingList();
             }
             setAwaitContext(savedAwaitContext);
-            var node = kind === 253
+            var node = kind === 255
                 ? factory.createClassDeclaration(decorators, modifiers, name, typeParameters, heritageClauses, members)
                 : factory.createClassExpression(decorators, modifiers, name, typeParameters, heritageClauses, members);
             return withJSDoc(finishNode(node, pos), hasJSDoc);
@@ -27984,7 +28675,7 @@
                 : undefined;
         }
         function isImplementsClause() {
-            return token() === 116 && lookAhead(nextTokenIsIdentifierOrKeyword);
+            return token() === 117 && lookAhead(nextTokenIsIdentifierOrKeyword);
         }
         function parseHeritageClauses() {
             if (isHeritageClause()) {
@@ -27995,7 +28686,7 @@
         function parseHeritageClause() {
             var pos = getNodePos();
             var tok = token();
-            ts.Debug.assert(tok === 93 || tok === 116);
+            ts.Debug.assert(tok === 94 || tok === 117);
             nextToken();
             var types = parseDelimitedList(7, parseExpressionWithTypeArguments);
             return finishNode(factory.createHeritageClause(tok, types), pos);
@@ -28011,13 +28702,13 @@
                 parseBracketedList(20, parseType, 29, 31) : undefined;
         }
         function isHeritageClause() {
-            return token() === 93 || token() === 116;
+            return token() === 94 || token() === 117;
         }
         function parseClassMembers() {
             return parseList(5, parseClassElement);
         }
         function parseInterfaceDeclaration(pos, hasJSDoc, decorators, modifiers) {
-            parseExpected(117);
+            parseExpected(118);
             var name = parseIdentifier();
             var typeParameters = parseTypeParameters();
             var heritageClauses = parseHeritageClauses();
@@ -28026,11 +28717,11 @@
             return withJSDoc(finishNode(node, pos), hasJSDoc);
         }
         function parseTypeAliasDeclaration(pos, hasJSDoc, decorators, modifiers) {
-            parseExpected(149);
+            parseExpected(150);
             var name = parseIdentifier();
             var typeParameters = parseTypeParameters();
-            parseExpected(62);
-            var type = token() === 136 && tryParse(parseKeywordAndNoDot) || parseType();
+            parseExpected(63);
+            var type = token() === 137 && tryParse(parseKeywordAndNoDot) || parseType();
             parseSemicolon();
             var node = factory.createTypeAliasDeclaration(decorators, modifiers, name, typeParameters, type);
             return withJSDoc(finishNode(node, pos), hasJSDoc);
@@ -28043,7 +28734,7 @@
             return withJSDoc(finishNode(factory.createEnumMember(name, initializer), pos), hasJSDoc);
         }
         function parseEnumDeclaration(pos, hasJSDoc, decorators, modifiers) {
-            parseExpected(91);
+            parseExpected(92);
             var name = parseIdentifier();
             var members;
             if (parseExpected(18)) {
@@ -28080,7 +28771,7 @@
         function parseAmbientExternalModuleDeclaration(pos, hasJSDoc, decorators, modifiers) {
             var flags = 0;
             var name;
-            if (token() === 154) {
+            if (token() === 155) {
                 name = parseIdentifier();
                 flags |= 1024;
             }
@@ -28100,14 +28791,14 @@
         }
         function parseModuleDeclaration(pos, hasJSDoc, decorators, modifiers) {
             var flags = 0;
-            if (token() === 154) {
+            if (token() === 155) {
                 return parseAmbientExternalModuleDeclaration(pos, hasJSDoc, decorators, modifiers);
             }
-            else if (parseOptional(140)) {
+            else if (parseOptional(141)) {
                 flags |= 16;
             }
             else {
-                parseExpected(139);
+                parseExpected(140);
                 if (token() === 10) {
                     return parseAmbientExternalModuleDeclaration(pos, hasJSDoc, decorators, modifiers);
                 }
@@ -28115,18 +28806,21 @@
             return parseModuleOrNamespaceDeclaration(pos, hasJSDoc, decorators, modifiers, flags);
         }
         function isExternalModuleReference() {
-            return token() === 143 &&
+            return token() === 144 &&
                 lookAhead(nextTokenIsOpenParen);
         }
         function nextTokenIsOpenParen() {
             return nextToken() === 20;
         }
+        function nextTokenIsOpenBrace() {
+            return nextToken() === 18;
+        }
         function nextTokenIsSlash() {
             return nextToken() === 43;
         }
         function parseNamespaceExportDeclaration(pos, hasJSDoc, decorators, modifiers) {
-            parseExpected(126);
-            parseExpected(140);
+            parseExpected(127);
+            parseExpected(141);
             var name = parseIdentifier();
             parseSemicolon();
             var node = factory.createNamespaceExportDeclaration(name);
@@ -28135,14 +28829,14 @@
             return withJSDoc(finishNode(node, pos), hasJSDoc);
         }
         function parseImportDeclarationOrImportEqualsDeclaration(pos, hasJSDoc, decorators, modifiers) {
-            parseExpected(99);
+            parseExpected(100);
             var afterImportPos = scanner.getStartPos();
             var identifier;
             if (isIdentifier()) {
                 identifier = parseIdentifier();
             }
             var isTypeOnly = false;
-            if (token() !== 153 &&
+            if (token() !== 154 &&
                 (identifier === null || identifier === void 0 ? void 0 : identifier.escapedText) === "type" &&
                 (isIdentifier() || tokenAfterImportDefinitelyProducesImportDeclaration())) {
                 isTypeOnly = true;
@@ -28156,7 +28850,7 @@
                 token() === 41 ||
                 token() === 18) {
                 importClause = parseImportClause(identifier, afterImportPos, isTypeOnly);
-                parseExpected(153);
+                parseExpected(154);
             }
             var moduleSpecifier = parseModuleSpecifier();
             parseSemicolon();
@@ -28167,10 +28861,10 @@
             return token() === 41 || token() === 18;
         }
         function tokenAfterImportedIdentifierDefinitelyProducesImportDeclaration() {
-            return token() === 27 || token() === 153;
+            return token() === 27 || token() === 154;
         }
         function parseImportEqualsDeclaration(pos, hasJSDoc, decorators, modifiers, identifier, isTypeOnly) {
-            parseExpected(62);
+            parseExpected(63);
             var moduleReference = parseModuleReference();
             parseSemicolon();
             var node = factory.createImportEqualsDeclaration(decorators, modifiers, isTypeOnly, identifier, moduleReference);
@@ -28181,7 +28875,7 @@
             var namedBindings;
             if (!identifier ||
                 parseOptional(27)) {
-                namedBindings = token() === 41 ? parseNamespaceImport() : parseNamedImportsOrExports(265);
+                namedBindings = token() === 41 ? parseNamespaceImport() : parseNamedImportsOrExports(267);
             }
             return finishNode(factory.createImportClause(isTypeOnly, identifier, namedBindings), pos);
         }
@@ -28192,7 +28886,7 @@
         }
         function parseExternalModuleReference() {
             var pos = getNodePos();
-            parseExpected(143);
+            parseExpected(144);
             parseExpected(20);
             var expression = parseModuleSpecifier();
             parseExpected(21);
@@ -28211,22 +28905,22 @@
         function parseNamespaceImport() {
             var pos = getNodePos();
             parseExpected(41);
-            parseExpected(126);
+            parseExpected(127);
             var name = parseIdentifier();
             return finishNode(factory.createNamespaceImport(name), pos);
         }
         function parseNamedImportsOrExports(kind) {
             var pos = getNodePos();
-            var node = kind === 265
+            var node = kind === 267
                 ? factory.createNamedImports(parseBracketedList(23, parseImportSpecifier, 18, 19))
                 : factory.createNamedExports(parseBracketedList(23, parseExportSpecifier, 18, 19));
             return finishNode(node, pos);
         }
         function parseExportSpecifier() {
-            return parseImportOrExportSpecifier(271);
+            return parseImportOrExportSpecifier(273);
         }
         function parseImportSpecifier() {
-            return parseImportOrExportSpecifier(266);
+            return parseImportOrExportSpecifier(268);
         }
         function parseImportOrExportSpecifier(kind) {
             var pos = getNodePos();
@@ -28236,9 +28930,9 @@
             var identifierName = parseIdentifierName();
             var propertyName;
             var name;
-            if (token() === 126) {
+            if (token() === 127) {
                 propertyName = identifierName;
-                parseExpected(126);
+                parseExpected(127);
                 checkIdentifierIsKeyword = ts.isKeyword(token()) && !isIdentifier();
                 checkIdentifierStart = scanner.getTokenPos();
                 checkIdentifierEnd = scanner.getTextPos();
@@ -28247,10 +28941,10 @@
             else {
                 name = identifierName;
             }
-            if (kind === 266 && checkIdentifierIsKeyword) {
+            if (kind === 268 && checkIdentifierIsKeyword) {
                 parseErrorAt(checkIdentifierStart, checkIdentifierEnd, ts.Diagnostics.Identifier_expected);
             }
-            var node = kind === 266
+            var node = kind === 268
                 ? factory.createImportSpecifier(propertyName, name)
                 : factory.createExportSpecifier(propertyName, name);
             return finishNode(node, pos);
@@ -28263,19 +28957,19 @@
             setAwaitContext(true);
             var exportClause;
             var moduleSpecifier;
-            var isTypeOnly = parseOptional(149);
+            var isTypeOnly = parseOptional(150);
             var namespaceExportPos = getNodePos();
             if (parseOptional(41)) {
-                if (parseOptional(126)) {
+                if (parseOptional(127)) {
                     exportClause = parseNamespaceExport(namespaceExportPos);
                 }
-                parseExpected(153);
+                parseExpected(154);
                 moduleSpecifier = parseModuleSpecifier();
             }
             else {
-                exportClause = parseNamedImportsOrExports(269);
-                if (token() === 153 || (token() === 10 && !scanner.hasPrecedingLineBreak())) {
-                    parseExpected(153);
+                exportClause = parseNamedImportsOrExports(271);
+                if (token() === 154 || (token() === 10 && !scanner.hasPrecedingLineBreak())) {
+                    parseExpected(154);
                     moduleSpecifier = parseModuleSpecifier();
                 }
             }
@@ -28288,11 +28982,11 @@
             var savedAwaitContext = inAwaitContext();
             setAwaitContext(true);
             var isExportEquals;
-            if (parseOptional(62)) {
+            if (parseOptional(63)) {
                 isExportEquals = true;
             }
             else {
-                parseExpected(87);
+                parseExpected(88);
             }
             var expression = parseAssignmentExpressionOrHigher();
             parseSemicolon();
@@ -28306,7 +29000,7 @@
                     getImportMetaIfNecessary(sourceFile);
         }
         function isAnExternalModuleIndicatorNode(node) {
-            return hasModifierOfKind(node, 92)
+            return hasModifierOfKind(node, 93)
                 || ts.isImportEqualsDeclaration(node) && ts.isExternalModuleReference(node.moduleReference)
                 || ts.isImportDeclaration(node)
                 || ts.isExportAssignment(node)
@@ -28324,7 +29018,7 @@
             return ts.some(node.modifiers, function (m) { return m.kind === kind; });
         }
         function isImportMeta(node) {
-            return ts.isMetaProperty(node) && node.keywordToken === 99 && node.name.escapedText === "meta";
+            return ts.isMetaProperty(node) && node.keywordToken === 100 && node.name.escapedText === "meta";
         }
         var JSDocParser;
         (function (JSDocParser) {
@@ -28357,7 +29051,13 @@
             function parseJSDocNameReference() {
                 var pos = getNodePos();
                 var hasBrace = parseOptional(18);
+                var p2 = getNodePos();
                 var entityName = parseEntityName(false);
+                while (token() === 80) {
+                    reScanHashToken();
+                    nextTokenJSDoc();
+                    entityName = finishNode(factory.createJSDocMemberName(entityName, parseIdentifier()), p2);
+                }
                 if (hasBrace) {
                     parseExpectedJSDoc(19);
                 }
@@ -28746,27 +29446,43 @@
                     return next === 5 || next === 4;
                 }
                 function parseJSDocLink(start) {
-                    if (!tryParse(parseJSDocLinkPrefix)) {
+                    var linkType = tryParse(parseJSDocLinkPrefix);
+                    if (!linkType) {
                         return undefined;
                     }
                     nextTokenJSDoc();
                     skipWhitespace();
+                    var p2 = getNodePos();
                     var name = ts.tokenIsIdentifierOrKeyword(token())
                         ? parseEntityName(true)
                         : undefined;
+                    if (name) {
+                        while (token() === 80) {
+                            reScanHashToken();
+                            nextTokenJSDoc();
+                            name = finishNode(factory.createJSDocMemberName(name, parseIdentifier()), p2);
+                        }
+                    }
                     var text = [];
                     while (token() !== 19 && token() !== 4 && token() !== 1) {
                         text.push(scanner.getTokenText());
                         nextTokenJSDoc();
                     }
-                    return finishNode(factory.createJSDocLink(name, text.join("")), start, scanner.getTextPos());
+                    var create = linkType === "link" ? factory.createJSDocLink
+                        : linkType === "linkcode" ? factory.createJSDocLinkCode
+                            : factory.createJSDocLinkPlain;
+                    return finishNode(create(name, text.join("")), start, scanner.getTextPos());
                 }
                 function parseJSDocLinkPrefix() {
                     skipWhitespaceOrAsterisk();
-                    return token() === 18
+                    if (token() === 18
                         && nextTokenJSDoc() === 59
-                        && ts.tokenIsIdentifierOrKeyword(nextTokenJSDoc())
-                        && scanner.getTokenValue() === "link";
+                        && ts.tokenIsIdentifierOrKeyword(nextTokenJSDoc())) {
+                        var kind = scanner.getTokenValue();
+                        if (kind === "link" || kind === "linkcode" || kind === "linkplain") {
+                            return kind;
+                        }
+                    }
                 }
                 function parseUnknownTag(start, tagName, indent, indentText) {
                     return finishNode(factory.createJSDocUnknownTag(tagName, parseTrailingTagComments(start, getNodePos(), indent, indentText)), start);
@@ -28800,7 +29516,7 @@
                     }
                     if (isBracketed) {
                         skipWhitespace();
-                        if (parseOptionalToken(62)) {
+                        if (parseOptionalToken(63)) {
                             parseExpression();
                         }
                         parseExpected(23);
@@ -28809,9 +29525,9 @@
                 }
                 function isObjectOrObjectArrayTypeReference(node) {
                     switch (node.kind) {
-                        case 145:
+                        case 146:
                             return true;
-                        case 179:
+                        case 181:
                             return isObjectOrObjectArrayTypeReference(node.elementType);
                         default:
                             return ts.isTypeReferenceNode(node) && ts.isIdentifier(node.typeName) && node.typeName.escapedText === "Object" && !node.typeArguments;
@@ -28843,12 +29559,12 @@
                         var child = void 0;
                         var children = void 0;
                         while (child = tryParse(function () { return parseChildParameterOrPropertyTag(target, indent, name); })) {
-                            if (child.kind === 330 || child.kind === 337) {
+                            if (child.kind === 335 || child.kind === 342) {
                                 children = ts.append(children, child);
                             }
                         }
                         if (children) {
-                            var literal = finishNode(factory.createJSDocTypeLiteral(children, typeExpression.type.kind === 179), pos);
+                            var literal = finishNode(factory.createJSDocTypeLiteral(children, typeExpression.type.kind === 181), pos);
                             return finishNode(factory.createJSDocTypeExpression(literal), pos);
                         }
                     }
@@ -28965,7 +29681,7 @@
                         var hasChildren = false;
                         while (child = tryParse(function () { return parseChildPropertyTag(indent); })) {
                             hasChildren = true;
-                            if (child.kind === 333) {
+                            if (child.kind === 338) {
                                 if (childTypeTag) {
                                     parseErrorAtCurrentToken(ts.Diagnostics.A_JSDoc_typedef_comment_may_not_contain_multiple_type_tags);
                                     var lastError = ts.lastOrUndefined(parseDiagnostics);
@@ -28983,7 +29699,7 @@
                             }
                         }
                         if (hasChildren) {
-                            var isArrayType = typeExpression && typeExpression.type.kind === 179;
+                            var isArrayType = typeExpression && typeExpression.type.kind === 181;
                             var jsdocTypeLiteral = factory.createJSDocTypeLiteral(jsDocPropertyTags, isArrayType);
                             typeExpression = childTypeTag && childTypeTag.typeExpression && !isObjectOrObjectArrayTypeReference(childTypeTag.typeExpression.type) ?
                                 childTypeTag.typeExpression :
@@ -29033,7 +29749,7 @@
                     var returnTag = tryParse(function () {
                         if (parseOptionalJsdoc(59)) {
                             var tag = parseTag(indent);
-                            if (tag && tag.kind === 331) {
+                            if (tag && tag.kind === 336) {
                                 return tag;
                             }
                         }
@@ -29067,7 +29783,7 @@
                             case 59:
                                 if (canParseTag) {
                                     var child = tryParseChildTag(target, indent);
-                                    if (child && (child.kind === 330 || child.kind === 337) &&
+                                    if (child && (child.kind === 335 || child.kind === 342) &&
                                         target !== 4 &&
                                         name && (ts.isIdentifier(child.name) || !escapedTextsEqual(name, child.name.left))) {
                                         return false;
@@ -29086,7 +29802,7 @@
                                 }
                                 seenAsterisk = true;
                                 break;
-                            case 78:
+                            case 79:
                                 canParseTag = false;
                                 break;
                             case 1:
@@ -29170,7 +29886,7 @@
                 }
                 function parseJSDocIdentifierName(message) {
                     if (!ts.tokenIsIdentifierOrKeyword(token())) {
-                        return createMissingNode(78, !message, message || ts.Diagnostics.Identifier_expected);
+                        return createMissingNode(79, !message, message || ts.Diagnostics.Identifier_expected);
                     }
                     identifierCount++;
                     var pos = scanner.getTokenPos();
@@ -29282,8 +29998,8 @@
             function visitArray(array) {
                 array._children = undefined;
                 ts.setTextRangePosEnd(array, array.pos + delta, array.end + delta);
-                for (var _i = 0, array_8 = array; _i < array_8.length; _i++) {
-                    var node = array_8[_i];
+                for (var _i = 0, array_9 = array; _i < array_9.length; _i++) {
+                    var node = array_9[_i];
                     visitNode(node);
                 }
             }
@@ -29292,7 +30008,7 @@
             switch (node.kind) {
                 case 10:
                 case 8:
-                case 78:
+                case 79:
                     return true;
             }
             return false;
@@ -29366,8 +30082,8 @@
                     array.intersectsChange = true;
                     array._children = undefined;
                     adjustIntersectingElement(array, changeStart, changeRangeOldEnd, changeRangeNewEnd, delta);
-                    for (var _i = 0, array_9 = array; _i < array_9.length; _i++) {
-                        var node = array_9[_i];
+                    for (var _i = 0, array_10 = array; _i < array_10.length; _i++) {
+                        var node = array_10[_i];
                         visitNode(node);
                     }
                     return;
@@ -29616,7 +30332,7 @@
         if (namedArgRegExCache.has(name)) {
             return namedArgRegExCache.get(name);
         }
-        var result = new RegExp("(\\s" + name + "\\s*=\\s*)('|\")(.+?)\\2", "im");
+        var result = new RegExp("(\\s" + name + "\\s*=\\s*)(?:(?:'([^']*)')|(?:\"([^\"]*)\"))", "im");
         namedArgRegExCache.set(name, result);
         return result;
     }
@@ -29640,16 +30356,17 @@
                         return;
                     }
                     else if (matchResult) {
+                        var value = matchResult[2] || matchResult[3];
                         if (arg.captureSpan) {
-                            var startPos = range.pos + matchResult.index + matchResult[1].length + matchResult[2].length;
+                            var startPos = range.pos + matchResult.index + matchResult[1].length + 1;
                             argument[arg.name] = {
-                                value: matchResult[3],
+                                value: value,
                                 pos: startPos,
-                                end: startPos + matchResult[3].length
+                                end: startPos + value.length
                             };
                         }
                         else {
-                            argument[arg.name] = matchResult[3];
+                            argument[arg.name] = value;
                         }
                     }
                 }
@@ -29665,7 +30382,7 @@
             return addPragmaForMatch(pragmas, range, 2, singleLine);
         }
         if (range.kind === 3) {
-            var multiLinePragmaRegEx = /\s*@(\S+)\s*(.*)\s*$/gim;
+            var multiLinePragmaRegEx = /@(\S+)(\s+.*)?$/gim;
             var multiLineMatch = void 0;
             while (multiLineMatch = multiLinePragmaRegEx.exec(text)) {
                 addPragmaForMatch(pragmas, range, 4, multiLineMatch);
@@ -29692,7 +30409,7 @@
             return {};
         if (!pragma.args)
             return {};
-        var args = text.split(/\s+/);
+        var args = ts.trimString(text).split(/\s+/);
         var argMap = {};
         for (var i = 0; i < pragma.args.length; i++) {
             var argument = pragma.args[i];
@@ -29710,10 +30427,10 @@
         if (lhs.kind !== rhs.kind) {
             return false;
         }
-        if (lhs.kind === 78) {
+        if (lhs.kind === 79) {
             return lhs.escapedText === rhs.escapedText;
         }
-        if (lhs.kind === 107) {
+        if (lhs.kind === 108) {
             return true;
         }
         return lhs.name.escapedText === rhs.name.escapedText &&
@@ -29808,8 +30525,8 @@
                 usefsevents: ts.WatchFileKind.UseFsEvents,
                 usefseventsonparentdirectory: ts.WatchFileKind.UseFsEventsOnParentDirectory,
             })),
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Specify_strategy_for_watching_file_Colon_FixedPollingInterval_default_PriorityPollingInterval_DynamicPriorityPolling_FixedChunkSizePolling_UseFsEvents_UseFsEventsOnParentDirectory,
+            category: ts.Diagnostics.Watch_and_Build_Modes,
+            description: ts.Diagnostics.Specify_how_the_TypeScript_watch_mode_works,
         },
         {
             name: "watchDirectory",
@@ -29819,8 +30536,8 @@
                 dynamicprioritypolling: ts.WatchDirectoryKind.DynamicPriorityPolling,
                 fixedchunksizepolling: ts.WatchDirectoryKind.FixedChunkSizePolling,
             })),
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Specify_strategy_for_watching_directory_on_platforms_that_don_t_support_recursive_watching_natively_Colon_UseFsEvents_default_FixedPollingInterval_DynamicPriorityPolling_FixedChunkSizePolling,
+            category: ts.Diagnostics.Watch_and_Build_Modes,
+            description: ts.Diagnostics.Specify_how_directories_are_watched_on_systems_that_lack_recursive_file_watching_functionality,
         },
         {
             name: "fallbackPolling",
@@ -29830,13 +30547,13 @@
                 dynamicpriority: ts.PollingWatchKind.DynamicPriority,
                 fixedchunksize: ts.PollingWatchKind.FixedChunkSize,
             })),
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Specify_strategy_for_creating_a_polling_watch_when_it_fails_to_create_using_file_system_events_Colon_FixedInterval_default_PriorityInterval_DynamicPriority_FixedChunkSize,
+            category: ts.Diagnostics.Watch_and_Build_Modes,
+            description: ts.Diagnostics.Specify_what_approach_the_watcher_should_use_if_the_system_runs_out_of_native_file_watchers,
         },
         {
             name: "synchronousWatchDirectory",
             type: "boolean",
-            category: ts.Diagnostics.Advanced_Options,
+            category: ts.Diagnostics.Watch_and_Build_Modes,
             description: ts.Diagnostics.Synchronously_call_callbacks_and_update_the_state_of_directory_watchers_on_platforms_that_don_t_support_recursive_watching_natively,
         },
         {
@@ -29848,8 +30565,8 @@
                 isFilePath: true,
                 extraValidation: specToDiagnostic
             },
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Synchronously_call_callbacks_and_update_the_state_of_directory_watchers_on_platforms_that_don_t_support_recursive_watching_natively,
+            category: ts.Diagnostics.Watch_and_Build_Modes,
+            description: ts.Diagnostics.Remove_a_list_of_directories_from_the_watch_process,
         },
         {
             name: "excludeFiles",
@@ -29860,8 +30577,8 @@
                 isFilePath: true,
                 extraValidation: specToDiagnostic
             },
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Synchronously_call_callbacks_and_update_the_state_of_directory_watchers_on_platforms_that_don_t_support_recursive_watching_natively,
+            category: ts.Diagnostics.Watch_and_Build_Modes,
+            description: ts.Diagnostics.Remove_a_list_of_files_from_the_watch_mode_s_processing,
         },
     ];
     ts.commonOptionsWithBuild = [
@@ -29883,6 +30600,7 @@
             shortName: "w",
             type: "boolean",
             showInSimplifiedHelpView: true,
+            isCommandLineOnly: true,
             category: ts.Diagnostics.Command_line_Options,
             description: ts.Diagnostics.Watch_input_files,
         },
@@ -29890,58 +30608,67 @@
             name: "preserveWatchOutput",
             type: "boolean",
             showInSimplifiedHelpView: false,
-            category: ts.Diagnostics.Command_line_Options,
-            description: ts.Diagnostics.Whether_to_keep_outdated_console_output_in_watch_mode_instead_of_clearing_the_screen,
+            category: ts.Diagnostics.Output_Formatting,
+            description: ts.Diagnostics.Disable_wiping_the_console_in_watch_mode,
+            defaultValueDescription: "n/a"
         },
         {
             name: "listFiles",
             type: "boolean",
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Print_names_of_files_part_of_the_compilation
+            category: ts.Diagnostics.Compiler_Diagnostics,
+            description: ts.Diagnostics.Print_all_of_the_files_read_during_the_compilation,
+            defaultValueDescription: "false"
         },
         {
             name: "explainFiles",
             type: "boolean",
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Print_names_of_files_and_the_reason_they_are_part_of_the_compilation
-        }, {
+            category: ts.Diagnostics.Compiler_Diagnostics,
+            description: ts.Diagnostics.Print_files_read_during_the_compilation_including_why_it_was_included
+        },
+        {
             name: "listEmittedFiles",
             type: "boolean",
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Print_names_of_generated_files_part_of_the_compilation
+            category: ts.Diagnostics.Compiler_Diagnostics,
+            description: ts.Diagnostics.Print_the_names_of_emitted_files_after_a_compilation,
+            defaultValueDescription: "false"
         },
         {
             name: "pretty",
             type: "boolean",
             showInSimplifiedHelpView: true,
-            category: ts.Diagnostics.Command_line_Options,
-            description: ts.Diagnostics.Stylize_errors_and_messages_using_color_and_context_experimental
+            category: ts.Diagnostics.Output_Formatting,
+            description: ts.Diagnostics.Enable_color_and_formatting_in_TypeScript_s_output_to_make_compiler_errors_easier_to_read,
+            defaultValueDescription: "true"
         },
         {
             name: "traceResolution",
             type: "boolean",
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Enable_tracing_of_the_name_resolution_process
+            category: ts.Diagnostics.Compiler_Diagnostics,
+            description: ts.Diagnostics.Log_paths_used_during_the_moduleResolution_process,
+            defaultValueDescription: "false"
         },
         {
             name: "diagnostics",
             type: "boolean",
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Show_diagnostic_information
+            category: ts.Diagnostics.Compiler_Diagnostics,
+            description: ts.Diagnostics.Output_compiler_performance_information_after_building,
+            defaultValueDescription: "false"
         },
         {
             name: "extendedDiagnostics",
             type: "boolean",
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Show_verbose_diagnostic_information
+            category: ts.Diagnostics.Compiler_Diagnostics,
+            description: ts.Diagnostics.Output_more_detailed_compiler_performance_information_after_building,
+            defaultValueDescription: "false"
         },
         {
             name: "generateCpuProfile",
             type: "string",
             isFilePath: true,
             paramType: ts.Diagnostics.FILE_OR_DIRECTORY,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Generates_a_CPU_profile
+            category: ts.Diagnostics.Compiler_Diagnostics,
+            description: ts.Diagnostics.Emit_a_v8_CPU_profile_of_the_compiler_run_for_debugging,
+            defaultValueDescription: "profile.cpuprofile"
         },
         {
             name: "generateTrace",
@@ -29949,30 +30676,33 @@
             isFilePath: true,
             isCommandLineOnly: true,
             paramType: ts.Diagnostics.DIRECTORY,
-            category: ts.Diagnostics.Advanced_Options,
+            category: ts.Diagnostics.Compiler_Diagnostics,
             description: ts.Diagnostics.Generates_an_event_trace_and_a_list_of_types
         },
         {
             name: "incremental",
             shortName: "i",
             type: "boolean",
-            category: ts.Diagnostics.Basic_Options,
+            category: ts.Diagnostics.Projects,
             description: ts.Diagnostics.Enable_incremental_compilation,
-            transpileOptionValue: undefined
+            transpileOptionValue: undefined,
+            defaultValueDescription: ts.Diagnostics.false_unless_composite_is_set
         },
         {
             name: "assumeChangesOnlyAffectDirectDependencies",
             type: "boolean",
             affectsSemanticDiagnostics: true,
             affectsEmit: true,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Have_recompiles_in_incremental_and_watch_assume_that_changes_within_a_file_will_only_affect_files_directly_depending_on_it
+            category: ts.Diagnostics.Watch_and_Build_Modes,
+            description: ts.Diagnostics.Have_recompiles_in_projects_that_use_incremental_and_watch_mode_assume_that_changes_within_a_file_will_only_affect_files_directly_depending_on_it
         },
         {
             name: "locale",
             type: "string",
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.The_locale_used_when_displaying_messages_to_the_user_e_g_en_us
+            category: ts.Diagnostics.Command_line_Options,
+            isCommandLineOnly: true,
+            description: ts.Diagnostics.Set_the_language_of_the_messaging_from_TypeScript_This_does_not_affect_emit,
+            defaultValueDescription: ts.Diagnostics.Platform_specific
         },
     ];
     ts.targetOptionDeclaration = {
@@ -29996,8 +30726,9 @@
         affectsEmit: true,
         paramType: ts.Diagnostics.VERSION,
         showInSimplifiedHelpView: true,
-        category: ts.Diagnostics.Basic_Options,
-        description: ts.Diagnostics.Specify_ECMAScript_target_version_Colon_ES3_default_ES5_ES2015_ES2016_ES2017_ES2018_ES2019_ES2020_ES2021_or_ESNEXT,
+        category: ts.Diagnostics.Language_and_Environment,
+        description: ts.Diagnostics.Set_the_JavaScript_language_version_for_emitted_JavaScript_and_include_compatible_library_declarations,
+        defaultValueDescription: "ES3"
     };
     var commandOptionsWithoutBuild = [
         {
@@ -30043,6 +30774,7 @@
         {
             name: "showConfig",
             type: "boolean",
+            showInSimplifiedHelpView: true,
             category: ts.Diagnostics.Command_line_Options,
             isCommandLineOnly: true,
             description: ts.Diagnostics.Print_the_final_configuration_instead_of_building
@@ -30075,8 +30807,8 @@
             affectsEmit: true,
             paramType: ts.Diagnostics.KIND,
             showInSimplifiedHelpView: true,
-            category: ts.Diagnostics.Basic_Options,
-            description: ts.Diagnostics.Specify_module_code_generation_Colon_none_commonjs_amd_system_umd_es2015_es2020_or_ESNext,
+            category: ts.Diagnostics.Modules,
+            description: ts.Diagnostics.Specify_what_module_code_is_generated,
         },
         {
             name: "lib",
@@ -30085,10 +30817,10 @@
                 name: "lib",
                 type: ts.libMap
             },
-            affectsModuleResolution: true,
+            affectsProgramStructure: true,
             showInSimplifiedHelpView: true,
-            category: ts.Diagnostics.Basic_Options,
-            description: ts.Diagnostics.Specify_library_files_to_be_included_in_the_compilation,
+            category: ts.Diagnostics.Language_and_Environment,
+            description: ts.Diagnostics.Specify_a_set_of_bundled_library_declaration_files_that_describe_the_target_runtime_environment,
             transpileOptionValue: undefined
         },
         {
@@ -30096,14 +30828,17 @@
             type: "boolean",
             affectsModuleResolution: true,
             showInSimplifiedHelpView: true,
-            category: ts.Diagnostics.Basic_Options,
-            description: ts.Diagnostics.Allow_javascript_files_to_be_compiled
+            category: ts.Diagnostics.JavaScript_Support,
+            description: ts.Diagnostics.Allow_JavaScript_files_to_be_a_part_of_your_program_Use_the_checkJS_option_to_get_errors_from_these_files,
+            defaultValueDescription: "false"
         },
         {
             name: "checkJs",
             type: "boolean",
-            category: ts.Diagnostics.Basic_Options,
-            description: ts.Diagnostics.Report_errors_in_js_files
+            showInSimplifiedHelpView: true,
+            category: ts.Diagnostics.JavaScript_Support,
+            description: ts.Diagnostics.Enable_error_reporting_in_type_checked_JavaScript_files,
+            defaultValueDescription: "false"
         },
         {
             name: "jsx",
@@ -30113,8 +30848,9 @@
             affectsModuleResolution: true,
             paramType: ts.Diagnostics.KIND,
             showInSimplifiedHelpView: true,
-            category: ts.Diagnostics.Basic_Options,
-            description: ts.Diagnostics.Specify_JSX_code_generation_Colon_preserve_react_native_react_react_jsx_or_react_jsxdev,
+            category: ts.Diagnostics.Language_and_Environment,
+            description: ts.Diagnostics.Specify_what_JSX_code_is_generated,
+            defaultValueDescription: "undefined"
         },
         {
             name: "declaration",
@@ -30122,34 +30858,39 @@
             type: "boolean",
             affectsEmit: true,
             showInSimplifiedHelpView: true,
-            category: ts.Diagnostics.Basic_Options,
-            description: ts.Diagnostics.Generates_corresponding_d_ts_file,
-            transpileOptionValue: undefined
+            category: ts.Diagnostics.Emit,
+            transpileOptionValue: undefined,
+            description: ts.Diagnostics.Generate_d_ts_files_from_TypeScript_and_JavaScript_files_in_your_project,
+            defaultValueDescription: ts.Diagnostics.false_unless_composite_is_set,
         },
         {
             name: "declarationMap",
             type: "boolean",
             affectsEmit: true,
             showInSimplifiedHelpView: true,
-            category: ts.Diagnostics.Basic_Options,
-            description: ts.Diagnostics.Generates_a_sourcemap_for_each_corresponding_d_ts_file,
-            transpileOptionValue: undefined
+            category: ts.Diagnostics.Emit,
+            transpileOptionValue: undefined,
+            defaultValueDescription: "false",
+            description: ts.Diagnostics.Create_sourcemaps_for_d_ts_files
         },
         {
             name: "emitDeclarationOnly",
             type: "boolean",
             affectsEmit: true,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Only_emit_d_ts_declaration_files,
-            transpileOptionValue: undefined
+            showInSimplifiedHelpView: true,
+            category: ts.Diagnostics.Emit,
+            description: ts.Diagnostics.Only_output_d_ts_files_and_not_JavaScript_files,
+            transpileOptionValue: undefined,
+            defaultValueDescription: "false",
         },
         {
             name: "sourceMap",
             type: "boolean",
             affectsEmit: true,
             showInSimplifiedHelpView: true,
-            category: ts.Diagnostics.Basic_Options,
-            description: ts.Diagnostics.Generates_corresponding_map_file,
+            category: ts.Diagnostics.Emit,
+            defaultValueDescription: "false",
+            description: ts.Diagnostics.Create_source_map_files_for_emitted_JavaScript_files,
         },
         {
             name: "outFile",
@@ -30158,9 +30899,10 @@
             isFilePath: true,
             paramType: ts.Diagnostics.FILE,
             showInSimplifiedHelpView: true,
-            category: ts.Diagnostics.Basic_Options,
-            description: ts.Diagnostics.Concatenate_and_emit_output_to_single_file,
-            transpileOptionValue: undefined
+            category: ts.Diagnostics.Emit,
+            description: ts.Diagnostics.Specify_a_file_that_bundles_all_outputs_into_one_JavaScript_file_If_declaration_is_true_also_designates_a_file_that_bundles_all_d_ts_output,
+            transpileOptionValue: undefined,
+            defaultValueDescription: "n/a"
         },
         {
             name: "outDir",
@@ -30169,8 +30911,9 @@
             isFilePath: true,
             paramType: ts.Diagnostics.DIRECTORY,
             showInSimplifiedHelpView: true,
-            category: ts.Diagnostics.Basic_Options,
-            description: ts.Diagnostics.Redirect_output_structure_to_the_directory,
+            category: ts.Diagnostics.Emit,
+            description: ts.Diagnostics.Specify_an_output_folder_for_all_emitted_files,
+            defaultValueDescription: "n/a"
         },
         {
             name: "rootDir",
@@ -30178,17 +30921,19 @@
             affectsEmit: true,
             isFilePath: true,
             paramType: ts.Diagnostics.LOCATION,
-            category: ts.Diagnostics.Basic_Options,
-            description: ts.Diagnostics.Specify_the_root_directory_of_input_files_Use_to_control_the_output_directory_structure_with_outDir,
+            category: ts.Diagnostics.Modules,
+            description: ts.Diagnostics.Specify_the_root_folder_within_your_source_files,
+            defaultValueDescription: ts.Diagnostics.Computed_from_the_list_of_input_files
         },
         {
             name: "composite",
             type: "boolean",
             affectsEmit: true,
             isTSConfigOnly: true,
-            category: ts.Diagnostics.Basic_Options,
-            description: ts.Diagnostics.Enable_project_compilation,
-            transpileOptionValue: undefined
+            category: ts.Diagnostics.Projects,
+            transpileOptionValue: undefined,
+            defaultValueDescription: "false",
+            description: ts.Diagnostics.Enable_constraints_that_allow_a_TypeScript_project_to_be_used_with_project_references,
         },
         {
             name: "tsBuildInfoFile",
@@ -30196,32 +30941,36 @@
             affectsEmit: true,
             isFilePath: true,
             paramType: ts.Diagnostics.FILE,
-            category: ts.Diagnostics.Basic_Options,
-            description: ts.Diagnostics.Specify_file_to_store_incremental_compilation_information,
-            transpileOptionValue: undefined
+            category: ts.Diagnostics.Projects,
+            transpileOptionValue: undefined,
+            defaultValueDescription: ".tsbuildinfo",
+            description: ts.Diagnostics.Specify_the_folder_for_tsbuildinfo_incremental_compilation_files,
         },
         {
             name: "removeComments",
             type: "boolean",
             affectsEmit: true,
             showInSimplifiedHelpView: true,
-            category: ts.Diagnostics.Basic_Options,
-            description: ts.Diagnostics.Do_not_emit_comments_to_output,
+            category: ts.Diagnostics.Emit,
+            defaultValueDescription: "false",
+            description: ts.Diagnostics.Disable_emitting_comments,
         },
         {
             name: "noEmit",
             type: "boolean",
             showInSimplifiedHelpView: true,
-            category: ts.Diagnostics.Basic_Options,
-            description: ts.Diagnostics.Do_not_emit_outputs,
-            transpileOptionValue: undefined
+            category: ts.Diagnostics.Emit,
+            description: ts.Diagnostics.Disable_emitting_files_from_a_compilation,
+            transpileOptionValue: undefined,
+            defaultValueDescription: "false"
         },
         {
             name: "importHelpers",
             type: "boolean",
             affectsEmit: true,
-            category: ts.Diagnostics.Basic_Options,
-            description: ts.Diagnostics.Import_emit_helpers_from_tslib
+            category: ts.Diagnostics.Emit,
+            description: ts.Diagnostics.Allow_importing_helper_functions_from_tslib_once_per_project_instead_of_including_them_per_file,
+            defaultValueDescription: "false"
         },
         {
             name: "importsNotUsedAsValues",
@@ -30232,147 +30981,162 @@
             })),
             affectsEmit: true,
             affectsSemanticDiagnostics: true,
-            category: ts.Diagnostics.Advanced_Options,
+            category: ts.Diagnostics.Emit,
             description: ts.Diagnostics.Specify_emit_Slashchecking_behavior_for_imports_that_are_only_used_for_types
         },
         {
             name: "downlevelIteration",
             type: "boolean",
             affectsEmit: true,
-            category: ts.Diagnostics.Basic_Options,
-            description: ts.Diagnostics.Provide_full_support_for_iterables_in_for_of_spread_and_destructuring_when_targeting_ES5_or_ES3
+            category: ts.Diagnostics.Emit,
+            description: ts.Diagnostics.Emit_more_compliant_but_verbose_and_less_performant_JavaScript_for_iteration,
+            defaultValueDescription: "false"
         },
         {
             name: "isolatedModules",
             type: "boolean",
-            category: ts.Diagnostics.Basic_Options,
-            description: ts.Diagnostics.Transpile_each_file_as_a_separate_module_similar_to_ts_transpileModule,
-            transpileOptionValue: true
+            category: ts.Diagnostics.Interop_Constraints,
+            description: ts.Diagnostics.Ensure_that_each_file_can_be_safely_transpiled_without_relying_on_other_imports,
+            transpileOptionValue: true,
+            defaultValueDescription: "false"
         },
         {
             name: "strict",
             type: "boolean",
             showInSimplifiedHelpView: true,
-            category: ts.Diagnostics.Strict_Type_Checking_Options,
-            description: ts.Diagnostics.Enable_all_strict_type_checking_options
+            category: ts.Diagnostics.Type_Checking,
+            description: ts.Diagnostics.Enable_all_strict_type_checking_options,
+            defaultValueDescription: "false"
         },
         {
             name: "noImplicitAny",
             type: "boolean",
             affectsSemanticDiagnostics: true,
             strictFlag: true,
-            showInSimplifiedHelpView: true,
-            category: ts.Diagnostics.Strict_Type_Checking_Options,
-            description: ts.Diagnostics.Raise_error_on_expressions_and_declarations_with_an_implied_any_type
+            category: ts.Diagnostics.Type_Checking,
+            description: ts.Diagnostics.Enable_error_reporting_for_expressions_and_declarations_with_an_implied_any_type,
+            defaultValueDescription: ts.Diagnostics.false_unless_strict_is_set
         },
         {
             name: "strictNullChecks",
             type: "boolean",
             affectsSemanticDiagnostics: true,
             strictFlag: true,
-            showInSimplifiedHelpView: true,
-            category: ts.Diagnostics.Strict_Type_Checking_Options,
-            description: ts.Diagnostics.Enable_strict_null_checks
+            category: ts.Diagnostics.Type_Checking,
+            description: ts.Diagnostics.When_type_checking_take_into_account_null_and_undefined,
+            defaultValueDescription: ts.Diagnostics.false_unless_strict_is_set
         },
         {
             name: "strictFunctionTypes",
             type: "boolean",
-            affectsSemanticDiagnostics: true,
             strictFlag: true,
-            showInSimplifiedHelpView: true,
-            category: ts.Diagnostics.Strict_Type_Checking_Options,
-            description: ts.Diagnostics.Enable_strict_checking_of_function_types
+            category: ts.Diagnostics.Type_Checking,
+            description: ts.Diagnostics.When_assigning_functions_check_to_ensure_parameters_and_the_return_values_are_subtype_compatible,
+            defaultValueDescription: ts.Diagnostics.false_unless_strict_is_set
         },
         {
             name: "strictBindCallApply",
             type: "boolean",
             strictFlag: true,
-            showInSimplifiedHelpView: true,
-            category: ts.Diagnostics.Strict_Type_Checking_Options,
-            description: ts.Diagnostics.Enable_strict_bind_call_and_apply_methods_on_functions
+            category: ts.Diagnostics.Type_Checking,
+            description: ts.Diagnostics.Check_that_the_arguments_for_bind_call_and_apply_methods_match_the_original_function,
+            defaultValueDescription: ts.Diagnostics.false_unless_strict_is_set
         },
         {
             name: "strictPropertyInitialization",
             type: "boolean",
             affectsSemanticDiagnostics: true,
             strictFlag: true,
-            showInSimplifiedHelpView: true,
-            category: ts.Diagnostics.Strict_Type_Checking_Options,
-            description: ts.Diagnostics.Enable_strict_checking_of_property_initialization_in_classes
+            category: ts.Diagnostics.Type_Checking,
+            description: ts.Diagnostics.Check_for_class_properties_that_are_declared_but_not_set_in_the_constructor,
+            defaultValueDescription: ts.Diagnostics.false_unless_strict_is_set
         },
         {
             name: "noImplicitThis",
             type: "boolean",
             affectsSemanticDiagnostics: true,
             strictFlag: true,
-            showInSimplifiedHelpView: true,
-            category: ts.Diagnostics.Strict_Type_Checking_Options,
-            description: ts.Diagnostics.Raise_error_on_this_expressions_with_an_implied_any_type,
+            category: ts.Diagnostics.Type_Checking,
+            description: ts.Diagnostics.Enable_error_reporting_when_this_is_given_the_type_any,
+            defaultValueDescription: ts.Diagnostics.false_unless_strict_is_set
+        },
+        {
+            name: "useUnknownInCatchVariables",
+            type: "boolean",
+            affectsSemanticDiagnostics: true,
+            strictFlag: true,
+            category: ts.Diagnostics.Type_Checking,
+            description: ts.Diagnostics.Type_catch_clause_variables_as_unknown_instead_of_any,
         },
         {
             name: "alwaysStrict",
             type: "boolean",
             affectsSourceFile: true,
             strictFlag: true,
-            showInSimplifiedHelpView: true,
-            category: ts.Diagnostics.Strict_Type_Checking_Options,
-            description: ts.Diagnostics.Parse_in_strict_mode_and_emit_use_strict_for_each_source_file
+            category: ts.Diagnostics.Type_Checking,
+            description: ts.Diagnostics.Ensure_use_strict_is_always_emitted,
+            defaultValueDescription: ts.Diagnostics.false_unless_strict_is_set
         },
         {
             name: "noUnusedLocals",
             type: "boolean",
             affectsSemanticDiagnostics: true,
-            showInSimplifiedHelpView: true,
-            category: ts.Diagnostics.Additional_Checks,
-            description: ts.Diagnostics.Report_errors_on_unused_locals,
+            category: ts.Diagnostics.Type_Checking,
+            description: ts.Diagnostics.Enable_error_reporting_when_a_local_variables_aren_t_read,
+            defaultValueDescription: "false"
         },
         {
             name: "noUnusedParameters",
             type: "boolean",
             affectsSemanticDiagnostics: true,
-            showInSimplifiedHelpView: true,
-            category: ts.Diagnostics.Additional_Checks,
-            description: ts.Diagnostics.Report_errors_on_unused_parameters,
+            category: ts.Diagnostics.Type_Checking,
+            description: ts.Diagnostics.Raise_an_error_when_a_function_parameter_isn_t_read,
+            defaultValueDescription: "false"
+        },
+        {
+            name: "exactOptionalPropertyTypes",
+            type: "boolean",
+            affectsSemanticDiagnostics: true,
+            category: ts.Diagnostics.Type_Checking,
+            description: ts.Diagnostics.Interpret_optional_property_types_as_written_rather_than_adding_undefined
         },
         {
             name: "noImplicitReturns",
             type: "boolean",
             affectsSemanticDiagnostics: true,
-            showInSimplifiedHelpView: true,
-            category: ts.Diagnostics.Additional_Checks,
-            description: ts.Diagnostics.Report_error_when_not_all_code_paths_in_function_return_a_value
+            category: ts.Diagnostics.Type_Checking,
+            description: ts.Diagnostics.Enable_error_reporting_for_codepaths_that_do_not_explicitly_return_in_a_function,
+            defaultValueDescription: "false"
         },
         {
             name: "noFallthroughCasesInSwitch",
             type: "boolean",
             affectsBindDiagnostics: true,
             affectsSemanticDiagnostics: true,
-            showInSimplifiedHelpView: true,
-            category: ts.Diagnostics.Additional_Checks,
-            description: ts.Diagnostics.Report_errors_for_fallthrough_cases_in_switch_statement
+            category: ts.Diagnostics.Type_Checking,
+            description: ts.Diagnostics.Enable_error_reporting_for_fallthrough_cases_in_switch_statements
         },
         {
             name: "noUncheckedIndexedAccess",
             type: "boolean",
             affectsSemanticDiagnostics: true,
-            showInSimplifiedHelpView: false,
-            category: ts.Diagnostics.Additional_Checks,
+            category: ts.Diagnostics.Type_Checking,
             description: ts.Diagnostics.Include_undefined_in_index_signature_results
         },
         {
             name: "noImplicitOverride",
             type: "boolean",
             affectsSemanticDiagnostics: true,
-            showInSimplifiedHelpView: false,
-            category: ts.Diagnostics.Additional_Checks,
+            category: ts.Diagnostics.Type_Checking,
             description: ts.Diagnostics.Ensure_overriding_members_in_derived_classes_are_marked_with_an_override_modifier
         },
         {
             name: "noPropertyAccessFromIndexSignature",
             type: "boolean",
             showInSimplifiedHelpView: false,
-            category: ts.Diagnostics.Additional_Checks,
-            description: ts.Diagnostics.Require_undeclared_properties_from_index_signatures_to_use_element_accesses
+            category: ts.Diagnostics.Type_Checking,
+            description: ts.Diagnostics.Enforces_using_indexed_accessors_for_keys_declared_using_an_indexed_type,
+            defaultValueDescription: "false"
         },
         {
             name: "moduleResolution",
@@ -30382,24 +31146,25 @@
             })),
             affectsModuleResolution: true,
             paramType: ts.Diagnostics.STRATEGY,
-            category: ts.Diagnostics.Module_Resolution_Options,
-            description: ts.Diagnostics.Specify_module_resolution_strategy_Colon_node_Node_js_or_classic_TypeScript_pre_1_6,
+            category: ts.Diagnostics.Modules,
+            description: ts.Diagnostics.Specify_how_TypeScript_looks_up_a_file_from_a_given_module_specifier,
+            defaultValueDescription: ts.Diagnostics.module_AMD_or_UMD_or_System_or_ES6_then_Classic_Otherwise_Node
         },
         {
             name: "baseUrl",
             type: "string",
             affectsModuleResolution: true,
             isFilePath: true,
-            category: ts.Diagnostics.Module_Resolution_Options,
-            description: ts.Diagnostics.Base_directory_to_resolve_non_absolute_module_names
+            category: ts.Diagnostics.Modules,
+            description: ts.Diagnostics.Specify_the_base_directory_to_resolve_non_relative_module_names
         },
         {
             name: "paths",
             type: "object",
             affectsModuleResolution: true,
             isTSConfigOnly: true,
-            category: ts.Diagnostics.Module_Resolution_Options,
-            description: ts.Diagnostics.A_series_of_entries_which_re_map_imports_to_lookup_locations_relative_to_the_baseUrl,
+            category: ts.Diagnostics.Modules,
+            description: ts.Diagnostics.Specify_a_set_of_entries_that_re_map_imports_to_additional_lookup_locations,
             transpileOptionValue: undefined
         },
         {
@@ -30412,9 +31177,10 @@
                 isFilePath: true
             },
             affectsModuleResolution: true,
-            category: ts.Diagnostics.Module_Resolution_Options,
-            description: ts.Diagnostics.List_of_root_folders_whose_combined_content_represents_the_structure_of_the_project_at_runtime,
-            transpileOptionValue: undefined
+            category: ts.Diagnostics.Modules,
+            description: ts.Diagnostics.Allow_multiple_folders_to_be_treated_as_one_when_resolving_modules,
+            transpileOptionValue: undefined,
+            defaultValueDescription: ts.Diagnostics.Computed_from_the_list_of_input_files
         },
         {
             name: "typeRoots",
@@ -30425,8 +31191,8 @@
                 isFilePath: true
             },
             affectsModuleResolution: true,
-            category: ts.Diagnostics.Module_Resolution_Options,
-            description: ts.Diagnostics.List_of_folders_to_include_type_definitions_from
+            category: ts.Diagnostics.Modules,
+            description: ts.Diagnostics.Specify_multiple_folders_that_act_like_Slashnode_modules_Slash_types
         },
         {
             name: "types",
@@ -30435,18 +31201,19 @@
                 name: "types",
                 type: "string"
             },
-            affectsModuleResolution: true,
+            affectsProgramStructure: true,
             showInSimplifiedHelpView: true,
-            category: ts.Diagnostics.Module_Resolution_Options,
-            description: ts.Diagnostics.Type_declaration_files_to_be_included_in_compilation,
+            category: ts.Diagnostics.Modules,
+            description: ts.Diagnostics.Specify_type_package_names_to_be_included_without_being_referenced_in_a_source_file,
             transpileOptionValue: undefined
         },
         {
             name: "allowSyntheticDefaultImports",
             type: "boolean",
             affectsSemanticDiagnostics: true,
-            category: ts.Diagnostics.Module_Resolution_Options,
-            description: ts.Diagnostics.Allow_default_imports_from_modules_with_no_default_export_This_does_not_affect_code_emit_just_typechecking
+            category: ts.Diagnostics.Interop_Constraints,
+            description: ts.Diagnostics.Allow_import_x_from_y_when_a_module_doesn_t_have_a_default_export,
+            defaultValueDescription: ts.Diagnostics.module_system_or_esModuleInterop
         },
         {
             name: "esModuleInterop",
@@ -30454,78 +31221,84 @@
             affectsSemanticDiagnostics: true,
             affectsEmit: true,
             showInSimplifiedHelpView: true,
-            category: ts.Diagnostics.Module_Resolution_Options,
-            description: ts.Diagnostics.Enables_emit_interoperability_between_CommonJS_and_ES_Modules_via_creation_of_namespace_objects_for_all_imports_Implies_allowSyntheticDefaultImports
+            category: ts.Diagnostics.Interop_Constraints,
+            description: ts.Diagnostics.Emit_additional_JavaScript_to_ease_support_for_importing_CommonJS_modules_This_enables_allowSyntheticDefaultImports_for_type_compatibility,
+            defaultValueDescription: "false"
         },
         {
             name: "preserveSymlinks",
             type: "boolean",
-            category: ts.Diagnostics.Module_Resolution_Options,
-            description: ts.Diagnostics.Do_not_resolve_the_real_path_of_symlinks,
+            category: ts.Diagnostics.Interop_Constraints,
+            description: ts.Diagnostics.Disable_resolving_symlinks_to_their_realpath_This_correlates_to_the_same_flag_in_node,
+            defaultValueDescription: "n/a"
         },
         {
             name: "allowUmdGlobalAccess",
             type: "boolean",
             affectsSemanticDiagnostics: true,
-            category: ts.Diagnostics.Module_Resolution_Options,
+            category: ts.Diagnostics.Modules,
             description: ts.Diagnostics.Allow_accessing_UMD_globals_from_modules,
+            defaultValueDescription: "false"
         },
         {
             name: "sourceRoot",
             type: "string",
             affectsEmit: true,
             paramType: ts.Diagnostics.LOCATION,
-            category: ts.Diagnostics.Source_Map_Options,
-            description: ts.Diagnostics.Specify_the_location_where_debugger_should_locate_TypeScript_files_instead_of_source_locations,
+            category: ts.Diagnostics.Emit,
+            description: ts.Diagnostics.Specify_the_root_path_for_debuggers_to_find_the_reference_source_code,
         },
         {
             name: "mapRoot",
             type: "string",
             affectsEmit: true,
             paramType: ts.Diagnostics.LOCATION,
-            category: ts.Diagnostics.Source_Map_Options,
+            category: ts.Diagnostics.Emit,
             description: ts.Diagnostics.Specify_the_location_where_debugger_should_locate_map_files_instead_of_generated_locations,
         },
         {
             name: "inlineSourceMap",
             type: "boolean",
             affectsEmit: true,
-            category: ts.Diagnostics.Source_Map_Options,
-            description: ts.Diagnostics.Emit_a_single_file_with_source_maps_instead_of_having_a_separate_file
+            category: ts.Diagnostics.Emit,
+            description: ts.Diagnostics.Include_sourcemap_files_inside_the_emitted_JavaScript,
+            defaultValueDescription: "false"
         },
         {
             name: "inlineSources",
             type: "boolean",
             affectsEmit: true,
-            category: ts.Diagnostics.Source_Map_Options,
-            description: ts.Diagnostics.Emit_the_source_alongside_the_sourcemaps_within_a_single_file_requires_inlineSourceMap_or_sourceMap_to_be_set
+            category: ts.Diagnostics.Emit,
+            description: ts.Diagnostics.Include_source_code_in_the_sourcemaps_inside_the_emitted_JavaScript,
+            defaultValueDescription: "false"
         },
         {
             name: "experimentalDecorators",
             type: "boolean",
             affectsSemanticDiagnostics: true,
-            category: ts.Diagnostics.Experimental_Options,
-            description: ts.Diagnostics.Enables_experimental_support_for_ES7_decorators
+            category: ts.Diagnostics.Language_and_Environment,
+            description: ts.Diagnostics.Enable_experimental_support_for_TC39_stage_2_draft_decorators
         },
         {
             name: "emitDecoratorMetadata",
             type: "boolean",
             affectsSemanticDiagnostics: true,
             affectsEmit: true,
-            category: ts.Diagnostics.Experimental_Options,
-            description: ts.Diagnostics.Enables_experimental_support_for_emitting_type_metadata_for_decorators
+            category: ts.Diagnostics.Language_and_Environment,
+            description: ts.Diagnostics.Emit_design_type_metadata_for_decorated_declarations_in_source_files
         },
         {
             name: "jsxFactory",
             type: "string",
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Specify_the_JSX_factory_function_to_use_when_targeting_react_JSX_emit_e_g_React_createElement_or_h
+            category: ts.Diagnostics.Language_and_Environment,
+            description: ts.Diagnostics.Specify_the_JSX_factory_function_used_when_targeting_React_JSX_emit_e_g_React_createElement_or_h,
+            defaultValueDescription: "`React.createElement`"
         },
         {
             name: "jsxFragmentFactory",
             type: "string",
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Specify_the_JSX_fragment_factory_function_to_use_when_targeting_react_JSX_emit_with_jsxFactory_compiler_option_is_specified_e_g_Fragment
+            category: ts.Diagnostics.Language_and_Environment,
+            description: ts.Diagnostics.Specify_the_JSX_Fragment_reference_used_for_fragments_when_targeting_React_JSX_emit_e_g_React_Fragment_or_Fragment
         },
         {
             name: "jsxImportSource",
@@ -30533,51 +31306,58 @@
             affectsSemanticDiagnostics: true,
             affectsEmit: true,
             affectsModuleResolution: true,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Specify_the_module_specifier_to_be_used_to_import_the_jsx_and_jsxs_factory_functions_from_eg_react
+            category: ts.Diagnostics.Language_and_Environment,
+            description: ts.Diagnostics.Specify_module_specifier_used_to_import_the_JSX_factory_functions_when_using_jsx_Colon_react_jsx_Asterisk,
+            defaultValueDescription: "react"
         },
         {
             name: "resolveJsonModule",
             type: "boolean",
             affectsModuleResolution: true,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Include_modules_imported_with_json_extension
+            category: ts.Diagnostics.Modules,
+            description: ts.Diagnostics.Enable_importing_json_files,
+            defaultValueDescription: "false"
         },
         {
             name: "out",
             type: "string",
             affectsEmit: true,
             isFilePath: false,
-            category: ts.Diagnostics.Advanced_Options,
+            category: ts.Diagnostics.Backwards_Compatibility,
             paramType: ts.Diagnostics.FILE,
-            description: ts.Diagnostics.Deprecated_Use_outFile_instead_Concatenate_and_emit_output_to_single_file,
-            transpileOptionValue: undefined
+            transpileOptionValue: undefined,
+            defaultValueDescription: "n/a",
+            description: ts.Diagnostics.Deprecated_setting_Use_outFile_instead,
         },
         {
             name: "reactNamespace",
             type: "string",
             affectsEmit: true,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Deprecated_Use_jsxFactory_instead_Specify_the_object_invoked_for_createElement_when_targeting_react_JSX_emit
+            category: ts.Diagnostics.Language_and_Environment,
+            description: ts.Diagnostics.Specify_the_object_invoked_for_createElement_This_only_applies_when_targeting_react_JSX_emit,
+            defaultValueDescription: "`React`",
         },
         {
             name: "skipDefaultLibCheck",
             type: "boolean",
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Deprecated_Use_skipLibCheck_instead_Skip_type_checking_of_default_library_declaration_files
+            category: ts.Diagnostics.Completeness,
+            description: ts.Diagnostics.Skip_type_checking_d_ts_files_that_are_included_with_TypeScript,
+            defaultValueDescription: "false",
         },
         {
             name: "charset",
             type: "string",
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.The_character_set_of_the_input_files
+            category: ts.Diagnostics.Backwards_Compatibility,
+            description: ts.Diagnostics.No_longer_supported_In_early_versions_manually_set_the_text_encoding_for_reading_files,
+            defaultValueDescription: "utf8"
         },
         {
             name: "emitBOM",
             type: "boolean",
             affectsEmit: true,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Emit_a_UTF_8_Byte_Order_Mark_BOM_in_the_beginning_of_output_files
+            category: ts.Diagnostics.Emit,
+            description: ts.Diagnostics.Emit_a_UTF_8_Byte_Order_Mark_BOM_in_the_beginning_of_output_files,
+            defaultValueDescription: "false"
         },
         {
             name: "newLine",
@@ -30587,95 +31367,104 @@
             })),
             affectsEmit: true,
             paramType: ts.Diagnostics.NEWLINE,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Specify_the_end_of_line_sequence_to_be_used_when_emitting_files_Colon_CRLF_dos_or_LF_unix,
+            category: ts.Diagnostics.Emit,
+            description: ts.Diagnostics.Set_the_newline_character_for_emitting_files,
+            defaultValueDescription: ts.Diagnostics.Platform_specific
         },
         {
             name: "noErrorTruncation",
             type: "boolean",
             affectsSemanticDiagnostics: true,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Do_not_truncate_error_messages
+            category: ts.Diagnostics.Output_Formatting,
+            description: ts.Diagnostics.Disable_truncating_types_in_error_messages,
+            defaultValueDescription: "false"
         },
         {
             name: "noLib",
             type: "boolean",
-            affectsModuleResolution: true,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Do_not_include_the_default_library_file_lib_d_ts,
-            transpileOptionValue: true
+            category: ts.Diagnostics.Language_and_Environment,
+            affectsProgramStructure: true,
+            description: ts.Diagnostics.Disable_including_any_library_files_including_the_default_lib_d_ts,
+            transpileOptionValue: true,
+            defaultValueDescription: "false"
         },
         {
             name: "noResolve",
             type: "boolean",
             affectsModuleResolution: true,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Do_not_add_triple_slash_references_or_imported_modules_to_the_list_of_compiled_files,
-            transpileOptionValue: true
+            category: ts.Diagnostics.Modules,
+            description: ts.Diagnostics.Disallow_import_s_require_s_or_reference_s_from_expanding_the_number_of_files_TypeScript_should_add_to_a_project,
+            transpileOptionValue: true,
+            defaultValueDescription: "false"
         },
         {
             name: "stripInternal",
             type: "boolean",
             affectsEmit: true,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Do_not_emit_declarations_for_code_that_has_an_internal_annotation,
+            category: ts.Diagnostics.Emit,
+            description: ts.Diagnostics.Disable_emitting_declarations_that_have_internal_in_their_JSDoc_comments,
         },
         {
             name: "disableSizeLimit",
             type: "boolean",
-            affectsSourceFile: true,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Disable_size_limitations_on_JavaScript_projects
+            affectsProgramStructure: true,
+            category: ts.Diagnostics.Editor_Support,
+            description: ts.Diagnostics.Remove_the_20mb_cap_on_total_source_code_size_for_JavaScript_files_in_the_TypeScript_language_server,
+            defaultValueDescription: "false"
         },
         {
             name: "disableSourceOfProjectReferenceRedirect",
             type: "boolean",
             isTSConfigOnly: true,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Disable_use_of_source_files_instead_of_declaration_files_from_referenced_projects
+            category: ts.Diagnostics.Projects,
+            description: ts.Diagnostics.Disable_preferring_source_files_instead_of_declaration_files_when_referencing_composite_projects
         },
         {
             name: "disableSolutionSearching",
             type: "boolean",
             isTSConfigOnly: true,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Disable_solution_searching_for_this_project
+            category: ts.Diagnostics.Projects,
+            description: ts.Diagnostics.Opt_a_project_out_of_multi_project_reference_checking_when_editing
         },
         {
             name: "disableReferencedProjectLoad",
             type: "boolean",
             isTSConfigOnly: true,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Disable_loading_referenced_projects
+            category: ts.Diagnostics.Projects,
+            description: ts.Diagnostics.Reduce_the_number_of_projects_loaded_automatically_by_TypeScript
         },
         {
             name: "noImplicitUseStrict",
             type: "boolean",
             affectsSemanticDiagnostics: true,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Do_not_emit_use_strict_directives_in_module_output
+            category: ts.Diagnostics.Backwards_Compatibility,
+            description: ts.Diagnostics.Disable_adding_use_strict_directives_in_emitted_JavaScript_files,
+            defaultValueDescription: "false"
         },
         {
             name: "noEmitHelpers",
             type: "boolean",
             affectsEmit: true,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Do_not_generate_custom_helper_functions_like_extends_in_compiled_output
+            category: ts.Diagnostics.Emit,
+            description: ts.Diagnostics.Disable_generating_custom_helper_functions_like_extends_in_compiled_output,
+            defaultValueDescription: "false"
         },
         {
             name: "noEmitOnError",
             type: "boolean",
             affectsEmit: true,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Do_not_emit_outputs_if_any_errors_were_reported,
-            transpileOptionValue: undefined
+            category: ts.Diagnostics.Emit,
+            transpileOptionValue: undefined,
+            description: ts.Diagnostics.Disable_emitting_files_if_any_type_checking_errors_are_reported,
+            defaultValueDescription: "false"
         },
         {
             name: "preserveConstEnums",
             type: "boolean",
             affectsEmit: true,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Do_not_erase_const_enum_declarations_in_generated_code
+            category: ts.Diagnostics.Emit,
+            description: ts.Diagnostics.Disable_erasing_const_enum_declarations_in_generated_code,
+            defaultValueDescription: "n/a"
         },
         {
             name: "declarationDir",
@@ -30683,80 +31472,91 @@
             affectsEmit: true,
             isFilePath: true,
             paramType: ts.Diagnostics.DIRECTORY,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Output_directory_for_generated_declaration_files,
-            transpileOptionValue: undefined
+            category: ts.Diagnostics.Emit,
+            transpileOptionValue: undefined,
+            description: ts.Diagnostics.Specify_the_output_directory_for_generated_declaration_files,
+            defaultValueDescription: "n/a"
         },
         {
             name: "skipLibCheck",
             type: "boolean",
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Skip_type_checking_of_declaration_files,
+            category: ts.Diagnostics.Completeness,
+            description: ts.Diagnostics.Skip_type_checking_all_d_ts_files,
+            defaultValueDescription: "false"
         },
         {
             name: "allowUnusedLabels",
             type: "boolean",
             affectsBindDiagnostics: true,
             affectsSemanticDiagnostics: true,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Do_not_report_errors_on_unused_labels
+            category: ts.Diagnostics.Type_Checking,
+            description: ts.Diagnostics.Disable_error_reporting_for_unused_labels,
+            defaultValueDescription: "undefined"
         },
         {
             name: "allowUnreachableCode",
             type: "boolean",
             affectsBindDiagnostics: true,
             affectsSemanticDiagnostics: true,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Do_not_report_errors_on_unreachable_code
+            category: ts.Diagnostics.Type_Checking,
+            description: ts.Diagnostics.Disable_error_reporting_for_unreachable_code,
+            defaultValueDescription: "undefined"
         },
         {
             name: "suppressExcessPropertyErrors",
             type: "boolean",
             affectsSemanticDiagnostics: true,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Suppress_excess_property_checks_for_object_literals,
+            category: ts.Diagnostics.Backwards_Compatibility,
+            description: ts.Diagnostics.Disable_reporting_of_excess_property_errors_during_the_creation_of_object_literals,
+            defaultValueDescription: "false"
         },
         {
             name: "suppressImplicitAnyIndexErrors",
             type: "boolean",
             affectsSemanticDiagnostics: true,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Suppress_noImplicitAny_errors_for_indexing_objects_lacking_index_signatures,
+            category: ts.Diagnostics.Backwards_Compatibility,
+            description: ts.Diagnostics.Suppress_noImplicitAny_errors_when_indexing_objects_that_lack_index_signatures,
+            defaultValueDescription: "false"
         },
         {
             name: "forceConsistentCasingInFileNames",
             type: "boolean",
             affectsModuleResolution: true,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Disallow_inconsistently_cased_references_to_the_same_file
+            category: ts.Diagnostics.Interop_Constraints,
+            description: ts.Diagnostics.Ensure_that_casing_is_correct_in_imports,
+            defaultValueDescription: "false"
         },
         {
             name: "maxNodeModuleJsDepth",
             type: "number",
             affectsModuleResolution: true,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.The_maximum_dependency_depth_to_search_under_node_modules_and_load_JavaScript_files
+            category: ts.Diagnostics.JavaScript_Support,
+            description: ts.Diagnostics.Specify_the_maximum_folder_depth_used_for_checking_JavaScript_files_from_node_modules_Only_applicable_with_allowJs,
+            defaultValueDescription: "0"
         },
         {
             name: "noStrictGenericChecks",
             type: "boolean",
             affectsSemanticDiagnostics: true,
-            category: ts.Diagnostics.Advanced_Options,
+            category: ts.Diagnostics.Backwards_Compatibility,
             description: ts.Diagnostics.Disable_strict_checking_of_generic_signatures_in_function_types,
+            defaultValueDescription: "false"
         },
         {
             name: "useDefineForClassFields",
             type: "boolean",
             affectsSemanticDiagnostics: true,
             affectsEmit: true,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Emit_class_fields_with_Define_instead_of_Set,
+            category: ts.Diagnostics.Language_and_Environment,
+            description: ts.Diagnostics.Emit_ECMAScript_standard_compliant_class_fields,
+            defaultValueDescription: "false"
         },
         {
             name: "keyofStringsOnly",
             type: "boolean",
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Resolve_keyof_to_string_valued_property_names_only_no_numbers_or_symbols,
+            category: ts.Diagnostics.Backwards_Compatibility,
+            description: ts.Diagnostics.Make_keyof_only_return_strings_instead_of_string_numbers_or_symbols_Legacy_option,
+            defaultValueDescription: "false"
         },
         {
             name: "plugins",
@@ -30766,20 +31566,22 @@
                 name: "plugin",
                 type: "object"
             },
-            description: ts.Diagnostics.List_of_language_service_plugins
+            description: ts.Diagnostics.List_of_language_service_plugins,
+            category: ts.Diagnostics.Editor_Support,
         },
     ];
-    ts.optionDeclarations = __spreadArray(__spreadArray([], ts.commonOptionsWithBuild), commandOptionsWithoutBuild);
+    ts.optionDeclarations = __spreadArray(__spreadArray([], ts.commonOptionsWithBuild, true), commandOptionsWithoutBuild, true);
     ts.semanticDiagnosticsOptionDeclarations = ts.optionDeclarations.filter(function (option) { return !!option.affectsSemanticDiagnostics; });
     ts.affectsEmitOptionDeclarations = ts.optionDeclarations.filter(function (option) { return !!option.affectsEmit; });
     ts.moduleResolutionOptionDeclarations = ts.optionDeclarations.filter(function (option) { return !!option.affectsModuleResolution; });
     ts.sourceFileAffectingCompilerOptions = ts.optionDeclarations.filter(function (option) {
         return !!option.affectsSourceFile || !!option.affectsModuleResolution || !!option.affectsBindDiagnostics;
     });
+    ts.optionsAffectingProgramStructure = ts.optionDeclarations.filter(function (option) { return !!option.affectsProgramStructure; });
     ts.transpileOptionValueCompilerOptions = ts.optionDeclarations.filter(function (option) {
         return ts.hasProperty(option, "transpileOptionValue");
     });
-    var commandOptionsOnlyBuild = [
+    ts.optionsForBuild = [
         {
             name: "verbose",
             shortName: "v",
@@ -30808,7 +31610,7 @@
             type: "boolean"
         }
     ];
-    ts.buildOpts = __spreadArray(__spreadArray([], ts.commonOptionsWithBuild), commandOptionsOnlyBuild);
+    ts.buildOpts = __spreadArray(__spreadArray([], ts.commonOptionsWithBuild, true), ts.optionsForBuild, true);
     ts.typeAcquisitionDeclarations = [
         {
             name: "enableAutoDiscovery",
@@ -30888,12 +31690,12 @@
         return createDiagnostic(ts.Diagnostics.Argument_for_0_option_must_be_Colon_1, "--" + opt.name, namesOfType);
     }
     function parseCustomTypeOption(opt, value, errors) {
-        return convertJsonOptionOfCustomType(opt, trimString(value || ""), errors);
+        return convertJsonOptionOfCustomType(opt, ts.trimString(value || ""), errors);
     }
     ts.parseCustomTypeOption = parseCustomTypeOption;
     function parseListTypeOption(opt, value, errors) {
         if (value === void 0) { value = ""; }
-        value = trimString(value);
+        value = ts.trimString(value);
         if (ts.startsWith(value, "-")) {
             return undefined;
         }
@@ -31247,7 +32049,8 @@
                     },
                     {
                         name: "extends",
-                        type: "string"
+                        type: "string",
+                        category: ts.Diagnostics.File_Management,
                     },
                     {
                         name: "references",
@@ -31255,7 +32058,8 @@
                         element: {
                             name: "references",
                             type: "object"
-                        }
+                        },
+                        category: ts.Diagnostics.Projects,
                     },
                     {
                         name: "files",
@@ -31263,7 +32067,8 @@
                         element: {
                             name: "files",
                             type: "string"
-                        }
+                        },
+                        category: ts.Diagnostics.File_Management,
                     },
                     {
                         name: "include",
@@ -31271,7 +32076,9 @@
                         element: {
                             name: "include",
                             type: "string"
-                        }
+                        },
+                        category: ts.Diagnostics.File_Management,
+                        defaultValueDescription: ts.Diagnostics.if_files_is_specified_otherwise_Asterisk_Asterisk_Slash_Asterisk
                     },
                     {
                         name: "exclude",
@@ -31279,7 +32086,9 @@
                         element: {
                             name: "exclude",
                             type: "string"
-                        }
+                        },
+                        category: ts.Diagnostics.File_Management,
+                        defaultValueDescription: ts.Diagnostics.node_modules_bower_components_jspm_packages_plus_the_value_of_outDir_if_one_is_specified
                     },
                     ts.compileOnSaveCommandLineOption
                 ])
@@ -31291,7 +32100,7 @@
         var _a;
         var rootExpression = (_a = sourceFile.statements[0]) === null || _a === void 0 ? void 0 : _a.expression;
         var knownRootOptions = reportOptionsErrors ? getTsconfigRootOptionsMap() : undefined;
-        if (rootExpression && rootExpression.kind !== 201) {
+        if (rootExpression && rootExpression.kind !== 203) {
             errors.push(ts.createDiagnosticForNodeInSourceFile(sourceFile, rootExpression, ts.Diagnostics.The_root_value_of_a_0_file_must_be_an_object, ts.getBaseFileName(sourceFile.fileName) === "jsconfig.json" ? "jsconfig.json" : "tsconfig.json"));
             if (ts.isArrayLiteralExpression(rootExpression)) {
                 var firstObject = ts.find(rootExpression.elements, ts.isObjectLiteralExpression);
@@ -31319,7 +32128,7 @@
         function convertObjectLiteralExpressionToJson(node, knownOptions, extraKeyDiagnostics, parentOption) {
             var result = returnValue ? {} : undefined;
             var _loop_4 = function (element) {
-                if (element.kind !== 289) {
+                if (element.kind !== 291) {
                     errors.push(ts.createDiagnosticForNodeInSourceFile(sourceFile, element, ts.Diagnostics.Property_assignment_expected));
                     return "continue";
                 }
@@ -31380,13 +32189,13 @@
         function convertPropertyValueToJson(valueExpression, option) {
             var invalidReported;
             switch (valueExpression.kind) {
-                case 109:
+                case 110:
                     reportInvalidOptionValue(option && option.type !== "boolean");
                     return validateValue(true);
-                case 94:
+                case 95:
                     reportInvalidOptionValue(option && option.type !== "boolean");
                     return validateValue(false);
-                case 103:
+                case 104:
                     reportInvalidOptionValue(option && option.name === "extends");
                     return validateValue(null);
                 case 10:
@@ -31406,13 +32215,13 @@
                 case 8:
                     reportInvalidOptionValue(option && option.type !== "number");
                     return validateValue(Number(valueExpression.text));
-                case 215:
+                case 217:
                     if (valueExpression.operator !== 40 || valueExpression.operand.kind !== 8) {
                         break;
                     }
                     reportInvalidOptionValue(option && option.type !== "number");
                     return validateValue(-Number(valueExpression.operand.text));
-                case 201:
+                case 203:
                     reportInvalidOptionValue(option && option.type !== "object");
                     var objectLiteralExpression = valueExpression;
                     if (option) {
@@ -31422,7 +32231,7 @@
                     else {
                         return validateValue(convertObjectLiteralExpressionToJson(objectLiteralExpression, undefined, undefined, undefined));
                     }
-                case 200:
+                case 202:
                     reportInvalidOptionValue(option && option.type !== "list");
                     return validateValue(convertArrayLiteralExpressionToJson(valueExpression.elements, option && option.element));
             }
@@ -31438,7 +32247,7 @@
                 if (!invalidReported) {
                     var diagnostic = (_a = option === null || option === void 0 ? void 0 : option.extraValidation) === null || _a === void 0 ? void 0 : _a.call(option, value);
                     if (diagnostic) {
-                        errors.push(ts.createDiagnosticForNodeInSourceFile.apply(void 0, __spreadArray([sourceFile, valueExpression], diagnostic)));
+                        errors.push(ts.createDiagnosticForNodeInSourceFile.apply(void 0, __spreadArray([sourceFile, valueExpression], diagnostic, false)));
                         return undefined;
                     }
                 }
@@ -31548,7 +32357,7 @@
         var getCanonicalFileName = pathOptions && ts.createGetCanonicalFileName(pathOptions.useCaseSensitiveFileNames);
         var _loop_5 = function (name) {
             if (ts.hasProperty(options, name)) {
-                if (optionsNameMap.has(name) && optionsNameMap.get(name).category === ts.Diagnostics.Command_line_Options) {
+                if (optionsNameMap.has(name) && (optionsNameMap.get(name).category === ts.Diagnostics.Command_line_Options || optionsNameMap.get(name).category === ts.Diagnostics.Output_Formatting)) {
                     return "continue";
                 }
                 var value = options[name];
@@ -31605,18 +32414,17 @@
         function makePadding(paddingLength) {
             return Array(paddingLength + 1).join(" ");
         }
-        function isAllowedOption(_a) {
-            var category = _a.category, name = _a.name;
-            return category !== undefined
-                && category !== ts.Diagnostics.Command_line_Options
-                && (category !== ts.Diagnostics.Advanced_Options || compilerOptionsMap.has(name));
+        function isAllowedOptionForOutput(_a) {
+            var category = _a.category, name = _a.name, isCommandLineOnly = _a.isCommandLineOnly;
+            var categoriesToSkip = [ts.Diagnostics.Command_line_Options, ts.Diagnostics.Editor_Support, ts.Diagnostics.Compiler_Diagnostics, ts.Diagnostics.Backwards_Compatibility, ts.Diagnostics.Watch_and_Build_Modes, ts.Diagnostics.Output_Formatting];
+            return !isCommandLineOnly && category !== undefined && (!categoriesToSkip.includes(category) || compilerOptionsMap.has(name));
         }
         function writeConfigurations() {
             var categorizedOptions = ts.createMultiMap();
             for (var _i = 0, optionDeclarations_1 = ts.optionDeclarations; _i < optionDeclarations_1.length; _i++) {
                 var option = optionDeclarations_1[_i];
                 var category = option.category;
-                if (isAllowedOption(option)) {
+                if (isAllowedOptionForOutput(option)) {
                     categorizedOptions.add(ts.getLocaleSpecificMessage(category), option);
                 }
             }
@@ -31796,6 +32604,7 @@
                 validatedFilesSpec: ts.filter(filesSpecs, ts.isString),
                 validatedIncludeSpecs: validatedIncludeSpecs,
                 validatedExcludeSpecs: validatedExcludeSpecs,
+                pathPatterns: undefined,
             };
         }
         function getFileNames(basePath) {
@@ -31887,7 +32696,7 @@
         basePath = ts.normalizeSlashes(basePath);
         var resolvedPath = ts.getNormalizedAbsolutePath(configFileName || "", basePath);
         if (resolutionStack.indexOf(resolvedPath) >= 0) {
-            errors.push(ts.createCompilerDiagnostic(ts.Diagnostics.Circularity_detected_while_resolving_configuration_Colon_0, __spreadArray(__spreadArray([], resolutionStack), [resolvedPath]).join(" -> ")));
+            errors.push(ts.createCompilerDiagnostic(ts.Diagnostics.Circularity_detected_while_resolving_configuration_Colon_0, __spreadArray(__spreadArray([], resolutionStack, true), [resolvedPath], false).join(" -> ")));
             return { raw: json || convertToObject(sourceFile, errors) };
         }
         var ownConfig = json ?
@@ -32177,12 +32986,7 @@
     function convertJsonOptionOfListType(option, values, basePath, errors) {
         return ts.filter(ts.map(values, function (v) { return convertJsonOption(option.element, v, basePath, errors); }), function (v) { return !!v; });
     }
-    function trimString(s) {
-        return typeof s.trim === "function" ? s.trim() : s.replace(/^[\s]+|[\s]+$/g, "");
-    }
     var invalidTrailingRecursionPattern = /(^|\/)\*\*\/?$/;
-    var invalidDotDotAfterRecursiveWildcardPattern = /(^|\/)\*\*\/(.*\/)?\.\.($|\/)/;
-    var watchRecursivePattern = /\/[^/]*?[*?][^/]*\//;
     var wildcardDirectoryPattern = /^[^*?]*(?=\/[^/]*[*?])/;
     function getFileNamesFromConfigSpecs(configFileSpecs, basePath, options, host, extraFileExtensions) {
         if (extraFileExtensions === void 0) { extraFileExtensions = ts.emptyArray; }
@@ -32254,8 +33058,16 @@
         return matchesExcludeWorker(pathToCheck, validatedExcludeSpecs, useCaseSensitiveFileNames, currentDirectory, basePath);
     }
     ts.isExcludedFile = isExcludedFile;
+    function invalidDotDotAfterRecursiveWildcard(s) {
+        var wildcardIndex = ts.startsWith(s, "**/") ? 0 : s.indexOf("/**/");
+        if (wildcardIndex === -1) {
+            return false;
+        }
+        var lastDotIndex = ts.endsWith(s, "/..") ? s.length : s.lastIndexOf("/../");
+        return lastDotIndex > wildcardIndex;
+    }
     function matchesExclude(pathToCheck, excludeSpecs, useCaseSensitiveFileNames, currentDirectory) {
-        return matchesExcludeWorker(pathToCheck, ts.filter(excludeSpecs, function (spec) { return !invalidDotDotAfterRecursiveWildcardPattern.test(spec); }), useCaseSensitiveFileNames, currentDirectory);
+        return matchesExcludeWorker(pathToCheck, ts.filter(excludeSpecs, function (spec) { return !invalidDotDotAfterRecursiveWildcard(spec); }), useCaseSensitiveFileNames, currentDirectory);
     }
     ts.matchesExclude = matchesExclude;
     function matchesExcludeWorker(pathToCheck, excludeSpecs, useCaseSensitiveFileNames, currentDirectory, basePath) {
@@ -32288,7 +33100,7 @@
         if (disallowTrailingRecursion && invalidTrailingRecursionPattern.test(spec)) {
             return [ts.Diagnostics.File_specification_cannot_end_in_a_recursive_directory_wildcard_Asterisk_Asterisk_Colon_0, spec];
         }
-        else if (invalidDotDotAfterRecursiveWildcardPattern.test(spec)) {
+        else if (invalidDotDotAfterRecursiveWildcard(spec)) {
             return [ts.Diagnostics.File_specification_cannot_contain_a_parent_directory_that_appears_after_a_recursive_directory_wildcard_Asterisk_Asterisk_Colon_0, spec];
         }
     }
@@ -32333,9 +33145,14 @@
     function getWildcardDirectoryFromSpec(spec, useCaseSensitiveFileNames) {
         var match = wildcardDirectoryPattern.exec(spec);
         if (match) {
+            var questionWildcardIndex = spec.indexOf("?");
+            var starWildcardIndex = spec.indexOf("*");
+            var lastDirectorySeperatorIndex = spec.lastIndexOf(ts.directorySeparator);
             return {
                 key: useCaseSensitiveFileNames ? match[0] : ts.toFileNameLowerCase(match[0]),
-                flags: watchRecursivePattern.test(spec) ? 1 : 0
+                flags: (questionWildcardIndex !== -1 && questionWildcardIndex < lastDirectorySeperatorIndex)
+                    || (starWildcardIndex !== -1 && starWildcardIndex < lastDirectorySeperatorIndex)
+                    ? 1 : 0
             };
         }
         if (ts.isImplicitGlob(spec)) {
@@ -32781,7 +33598,7 @@
     ts.createCacheWithRedirects = createCacheWithRedirects;
     function createPackageJsonInfoCache(currentDirectory, getCanonicalFileName) {
         var cache;
-        return { getPackageJsonInfo: getPackageJsonInfo, setPackageJsonInfo: setPackageJsonInfo, clear: clear };
+        return { getPackageJsonInfo: getPackageJsonInfo, setPackageJsonInfo: setPackageJsonInfo, clear: clear, entries: entries };
         function getPackageJsonInfo(packageJsonPath) {
             return cache === null || cache === void 0 ? void 0 : cache.get(ts.toPath(packageJsonPath, currentDirectory, getCanonicalFileName));
         }
@@ -32791,6 +33608,10 @@
         function clear() {
             cache = undefined;
         }
+        function entries() {
+            var iter = cache === null || cache === void 0 ? void 0 : cache.entries();
+            return iter ? ts.arrayFrom(iter) : [];
+        }
     }
     function getOrCreateCache(cacheWithRedirects, redirectedReference, key, create) {
         var cache = cacheWithRedirects.getOrCreateMapOfCacheRedirects(redirectedReference);
@@ -33002,7 +33823,8 @@
         }
     }
     function tryLoadModuleUsingPathsIfEligible(extensions, moduleName, loader, state) {
-        var _a = state.compilerOptions, baseUrl = _a.baseUrl, paths = _a.paths;
+        var _a;
+        var _b = state.compilerOptions, baseUrl = _b.baseUrl, paths = _b.paths, configFile = _b.configFile;
         if (paths && !ts.pathIsRelative(moduleName)) {
             if (state.traceEnabled) {
                 if (baseUrl) {
@@ -33011,7 +33833,8 @@
                 trace(state.host, ts.Diagnostics.paths_option_is_specified_looking_for_a_pattern_to_match_module_name_0, moduleName);
             }
             var baseDirectory = ts.getPathsBasePath(state.compilerOptions, state.host);
-            return tryLoadModuleUsingPaths(extensions, moduleName, baseDirectory, paths, loader, false, state);
+            var pathPatterns = (configFile === null || configFile === void 0 ? void 0 : configFile.configFileSpecs) ? (_a = configFile.configFileSpecs).pathPatterns || (_a.pathPatterns = ts.tryParsePatterns(paths)) : undefined;
+            return tryLoadModuleUsingPaths(extensions, moduleName, baseDirectory, paths, pathPatterns, loader, false, state);
         }
     }
     function tryLoadModuleUsingRootDirs(extensions, moduleName, containingDirectory, loader, state) {
@@ -33105,7 +33928,7 @@
     ts.tryResolveJSModule = tryResolveJSModule;
     var jsOnlyExtensions = [Extensions.JavaScript];
     var tsExtensions = [Extensions.TypeScript, Extensions.JavaScript];
-    var tsPlusJsonExtensions = __spreadArray(__spreadArray([], tsExtensions), [Extensions.Json]);
+    var tsPlusJsonExtensions = __spreadArray(__spreadArray([], tsExtensions, true), [Extensions.Json], false);
     var tsconfigExtensions = [Extensions.TSConfig];
     function tryResolveJSModuleWorker(moduleName, initialDir, host) {
         return nodeModuleNameResolverWorker(moduleName, initialDir, { moduleResolution: ts.ModuleResolutionKind.NodeJs, allowJs: true }, host, undefined, jsOnlyExtensions, undefined);
@@ -33367,7 +34190,7 @@
             if (state.traceEnabled) {
                 trace(state.host, ts.Diagnostics.package_json_has_a_typesVersions_entry_0_that_matches_compiler_version_1_looking_for_a_pattern_to_match_module_name_2, versionPaths.version, ts.version, moduleName);
             }
-            var result = tryLoadModuleUsingPaths(extensions, moduleName, candidate, versionPaths.paths, loader, onlyRecordFailuresForPackageFile || onlyRecordFailuresForIndex, state);
+            var result = tryLoadModuleUsingPaths(extensions, moduleName, candidate, versionPaths.paths, undefined, loader, onlyRecordFailuresForPackageFile || onlyRecordFailuresForIndex, state);
             if (result) {
                 return removeIgnoredPackageId(result.value);
             }
@@ -33467,7 +34290,7 @@
                     trace(state.host, ts.Diagnostics.package_json_has_a_typesVersions_entry_0_that_matches_compiler_version_1_looking_for_a_pattern_to_match_module_name_2, packageInfo.versionPaths.version, ts.version, rest);
                 }
                 var packageDirectoryExists = nodeModulesDirectoryExists && ts.directoryProbablyExists(packageDirectory, state.host);
-                var fromPaths = tryLoadModuleUsingPaths(extensions, rest, packageDirectory, packageInfo.versionPaths.paths, loader, !packageDirectoryExists, state);
+                var fromPaths = tryLoadModuleUsingPaths(extensions, rest, packageDirectory, packageInfo.versionPaths.paths, undefined, loader, !packageDirectoryExists, state);
                 if (fromPaths) {
                     return fromPaths.value;
                 }
@@ -33475,8 +34298,9 @@
         }
         return loader(extensions, candidate, !nodeModulesDirectoryExists, state);
     }
-    function tryLoadModuleUsingPaths(extensions, moduleName, baseDirectory, paths, loader, onlyRecordFailures, state) {
-        var matchedPattern = ts.matchPatternOrExact(ts.getOwnKeys(paths), moduleName);
+    function tryLoadModuleUsingPaths(extensions, moduleName, baseDirectory, paths, pathPatterns, loader, onlyRecordFailures, state) {
+        pathPatterns || (pathPatterns = ts.tryParsePatterns(paths));
+        var matchedPattern = ts.matchPatternOrExact(pathPatterns, moduleName);
         if (matchedPattern) {
             var matchedStar_1 = ts.isString(matchedPattern) ? undefined : ts.matchedText(matchedPattern, moduleName);
             var matchedPatternText = ts.isString(matchedPattern) ? matchedPattern : ts.patternText(matchedPattern);
@@ -33621,23 +34445,23 @@
     }
     function getModuleInstanceStateWorker(node, visited) {
         switch (node.kind) {
-            case 254:
-            case 255:
-                return 0;
             case 256:
+            case 257:
+                return 0;
+            case 258:
                 if (ts.isEnumConst(node)) {
                     return 2;
                 }
                 break;
-            case 262:
-            case 261:
+            case 264:
+            case 263:
                 if (!(ts.hasSyntacticModifier(node, 1))) {
                     return 0;
                 }
                 break;
-            case 268:
+            case 270:
                 var exportDeclaration = node;
-                if (!exportDeclaration.moduleSpecifier && exportDeclaration.exportClause && exportDeclaration.exportClause.kind === 269) {
+                if (!exportDeclaration.moduleSpecifier && exportDeclaration.exportClause && exportDeclaration.exportClause.kind === 271) {
                     var state = 0;
                     for (var _i = 0, _a = exportDeclaration.exportClause.elements; _i < _a.length; _i++) {
                         var specifier = _a[_i];
@@ -33652,7 +34476,7 @@
                     return state;
                 }
                 break;
-            case 258: {
+            case 260: {
                 var state_1 = 0;
                 ts.forEachChild(node, function (n) {
                     var childState = getModuleInstanceStateCached(n, visited);
@@ -33671,9 +34495,9 @@
                 });
                 return state_1;
             }
-            case 257:
+            case 259:
                 return getModuleInstanceState(node, visited);
-            case 78:
+            case 79:
                 if (node.isInJSDocNamespace) {
                     return 0;
                 }
@@ -33829,7 +34653,7 @@
             }
         }
         function getDeclarationName(node) {
-            if (node.kind === 267) {
+            if (node.kind === 269) {
                 return node.isExportEquals ? "export=" : "default";
             }
             var name = ts.getNameOfDeclaration(node);
@@ -33838,7 +34662,7 @@
                     var moduleName = ts.getTextOfIdentifierOrLiteral(name);
                     return (ts.isGlobalScopeAugmentation(node) ? "__global" : "\"" + moduleName + "\"");
                 }
-                if (name.kind === 159) {
+                if (name.kind === 160) {
                     var nameExpression = name.expression;
                     if (ts.isStringOrNumericLiteralLike(nameExpression)) {
                         return ts.escapeLeadingUnderscores(nameExpression.text);
@@ -33861,31 +34685,31 @@
                 return ts.isPropertyNameLiteral(name) ? ts.getEscapedTextOfIdentifierOrLiteral(name) : undefined;
             }
             switch (node.kind) {
-                case 167:
+                case 169:
                     return "__constructor";
-                case 175:
-                case 170:
-                case 315:
-                    return "__call";
-                case 176:
-                case 171:
-                    return "__new";
+                case 177:
                 case 172:
+                case 318:
+                    return "__call";
+                case 178:
+                case 173:
+                    return "__new";
+                case 174:
                     return "__index";
-                case 268:
+                case 270:
                     return "__export";
-                case 298:
+                case 300:
                     return "export=";
-                case 217:
+                case 219:
                     if (ts.getAssignmentDeclarationKind(node) === 2) {
                         return "export=";
                     }
                     ts.Debug.fail("Unknown binary declaration kind");
                     break;
-                case 309:
+                case 312:
                     return (ts.isJSDocConstructSignature(node) ? "__new" : "__call");
-                case 161:
-                    ts.Debug.assert(node.parent.kind === 309, "Impossible parameter parent kind", function () { return "parent is: " + (ts.SyntaxKind ? ts.SyntaxKind[node.parent.kind] : node.parent.kind) + ", expected JSDocFunctionType"; });
+                case 162:
+                    ts.Debug.assert(node.parent.kind === 312, "Impossible parameter parent kind", function () { return "parent is: " + (ts.SyntaxKind ? ts.SyntaxKind[node.parent.kind] : node.parent.kind) + ", expected JSDocFunctionType"; });
                     var functionType = node.parent;
                     var index = functionType.parameters.indexOf(node);
                     return "arg" + index;
@@ -33894,10 +34718,12 @@
         function getDisplayName(node) {
             return ts.isNamedDeclaration(node) ? ts.declarationNameToString(node.name) : ts.unescapeLeadingUnderscores(ts.Debug.checkDefined(getDeclarationName(node)));
         }
-        function declareSymbol(symbolTable, parent, node, includes, excludes, isReplaceableByMethod) {
-            ts.Debug.assert(!ts.hasDynamicName(node));
+        function declareSymbol(symbolTable, parent, node, includes, excludes, isReplaceableByMethod, isComputedName) {
+            ts.Debug.assert(isComputedName || !ts.hasDynamicName(node));
             var isDefaultExport = ts.hasSyntacticModifier(node, 512) || ts.isExportSpecifier(node) && node.name.escapedText === "default";
-            var name = isDefaultExport && parent ? "default" : getDeclarationName(node);
+            var name = isComputedName ? "__computed"
+                : isDefaultExport && parent ? "default"
+                    : getDeclarationName(node);
             var symbol;
             if (name === undefined) {
                 symbol = createSymbol(0, "__missing");
@@ -33940,7 +34766,7 @@
                             }
                             else {
                                 if (symbol.declarations && symbol.declarations.length &&
-                                    (node.kind === 267 && !node.isExportEquals)) {
+                                    (node.kind === 269 && !node.isExportEquals)) {
                                     message_1 = ts.Diagnostics.A_module_cannot_have_multiple_default_exports;
                                     messageNeedsName_1 = false;
                                     multipleDefaultExports_1 = true;
@@ -33961,7 +34787,7 @@
                             }
                         });
                         var diag = createDiagnosticForNode(declarationName_1, message_1, messageNeedsName_1 ? getDisplayName(node) : undefined);
-                        file.bindDiagnostics.push(ts.addRelatedInfo.apply(void 0, __spreadArray([diag], relatedInformation_1)));
+                        file.bindDiagnostics.push(ts.addRelatedInfo.apply(void 0, __spreadArray([diag], relatedInformation_1, false)));
                         symbol = createSymbol(0, name);
                     }
                 }
@@ -33978,7 +34804,7 @@
         function declareModuleMember(node, symbolFlags, symbolExcludes) {
             var hasExportModifier = !!(ts.getCombinedModifierFlags(node) & 1) || jsdocTreatAsExported(node);
             if (symbolFlags & 2097152) {
-                if (node.kind === 271 || (node.kind === 261 && hasExportModifier)) {
+                if (node.kind === 273 || (node.kind === 263 && hasExportModifier)) {
                     return declareSymbol(container.symbol.exports, container.symbol, node, symbolFlags, symbolExcludes);
                 }
                 else {
@@ -34025,7 +34851,7 @@
             var saveThisParentContainer = thisParentContainer;
             var savedBlockScopeContainer = blockScopeContainer;
             if (containerFlags & 1) {
-                if (node.kind !== 210) {
+                if (node.kind !== 212) {
                     thisParentContainer = container;
                 }
                 container = blockScopeContainer = node;
@@ -34054,7 +34880,7 @@
                         currentFlow.node = node;
                     }
                 }
-                currentReturnTarget = isIIFE || node.kind === 167 || (ts.isInJSFile(node) && (node.kind === 252 || node.kind === 209)) ? createBranchLabel() : undefined;
+                currentReturnTarget = isIIFE || node.kind === 169 || node.kind === 168 || (ts.isInJSFile(node) && (node.kind === 254 || node.kind === 211)) ? createBranchLabel() : undefined;
                 currentExceptionTarget = undefined;
                 currentBreakTarget = undefined;
                 currentContinueTarget = undefined;
@@ -34068,14 +34894,14 @@
                         node.flags |= 512;
                     node.endFlowNode = currentFlow;
                 }
-                if (node.kind === 298) {
+                if (node.kind === 300) {
                     node.flags |= emitFlags;
                     node.endFlowNode = currentFlow;
                 }
                 if (currentReturnTarget) {
                     addAntecedent(currentReturnTarget, currentFlow);
                     currentFlow = finishFlowLabel(currentReturnTarget);
-                    if (node.kind === 167 || (ts.isInJSFile(node) && (node.kind === 252 || node.kind === 209))) {
+                    if (node.kind === 169 || node.kind === 168 || (ts.isInJSFile(node) && (node.kind === 254 || node.kind === 211))) {
                         node.returnFlowNode = currentFlow;
                     }
                 }
@@ -34102,8 +34928,8 @@
             blockScopeContainer = savedBlockScopeContainer;
         }
         function bindEachFunctionsFirst(nodes) {
-            bindEach(nodes, function (n) { return n.kind === 252 ? bind(n) : undefined; });
-            bindEach(nodes, function (n) { return n.kind !== 252 ? bind(n) : undefined; });
+            bindEach(nodes, function (n) { return n.kind === 254 ? bind(n) : undefined; });
+            bindEach(nodes, function (n) { return n.kind !== 254 ? bind(n) : undefined; });
         }
         function bindEach(nodes, bindFunction) {
             if (bindFunction === void 0) { bindFunction = bind; }
@@ -34124,59 +34950,59 @@
                 inAssignmentPattern = saveInAssignmentPattern;
                 return;
             }
-            if (node.kind >= 233 && node.kind <= 249 && !options.allowUnreachableCode) {
+            if (node.kind >= 235 && node.kind <= 251 && !options.allowUnreachableCode) {
                 node.flowNode = currentFlow;
             }
             switch (node.kind) {
-                case 237:
+                case 239:
                     bindWhileStatement(node);
                     break;
-                case 236:
+                case 238:
                     bindDoStatement(node);
                     break;
-                case 238:
+                case 240:
                     bindForStatement(node);
                     break;
-                case 239:
-                case 240:
+                case 241:
+                case 242:
                     bindForInOrForOfStatement(node);
                     break;
-                case 235:
+                case 237:
                     bindIfStatement(node);
                     break;
-                case 243:
-                case 247:
+                case 245:
+                case 249:
                     bindReturnOrThrow(node);
                     break;
-                case 242:
-                case 241:
+                case 244:
+                case 243:
                     bindBreakOrContinueStatement(node);
                     break;
-                case 248:
+                case 250:
                     bindTryStatement(node);
                     break;
-                case 245:
+                case 247:
                     bindSwitchStatement(node);
                     break;
-                case 259:
+                case 261:
                     bindCaseBlock(node);
                     break;
-                case 285:
+                case 287:
                     bindCaseClause(node);
                     break;
-                case 234:
+                case 236:
                     bindExpressionStatement(node);
                     break;
-                case 246:
+                case 248:
                     bindLabeledStatement(node);
                     break;
-                case 215:
+                case 217:
                     bindPrefixUnaryExpressionFlow(node);
                     break;
-                case 216:
+                case 218:
                     bindPostfixUnaryExpressionFlow(node);
                     break;
-                case 217:
+                case 219:
                     if (ts.isDestructuringAssignment(node)) {
                         inAssignmentPattern = saveInAssignmentPattern;
                         bindDestructuringAssignmentFlow(node);
@@ -34184,46 +35010,46 @@
                     }
                     bindBinaryExpressionFlow(node);
                     break;
-                case 211:
+                case 213:
                     bindDeleteExpressionFlow(node);
                     break;
-                case 218:
+                case 220:
                     bindConditionalExpressionFlow(node);
                     break;
-                case 250:
+                case 252:
                     bindVariableDeclarationFlow(node);
                     break;
-                case 202:
-                case 203:
+                case 204:
+                case 205:
                     bindAccessExpressionFlow(node);
                     break;
-                case 204:
+                case 206:
                     bindCallExpressionFlow(node);
                     break;
-                case 226:
+                case 228:
                     bindNonNullExpressionFlow(node);
                     break;
-                case 335:
-                case 328:
-                case 329:
+                case 340:
+                case 333:
+                case 334:
                     bindJSDocTypeAlias(node);
                     break;
-                case 298: {
+                case 300: {
                     bindEachFunctionsFirst(node.statements);
                     bind(node.endOfFileToken);
                     break;
                 }
-                case 231:
-                case 258:
+                case 233:
+                case 260:
                     bindEachFunctionsFirst(node.statements);
                     break;
-                case 199:
+                case 201:
                     bindBindingElementFlow(node);
                     break;
-                case 201:
-                case 200:
-                case 289:
-                case 221:
+                case 203:
+                case 202:
+                case 291:
+                case 223:
                     inAssignmentPattern = saveInAssignmentPattern;
                 default:
                     bindEachChild(node);
@@ -34234,22 +35060,22 @@
         }
         function isNarrowingExpression(expr) {
             switch (expr.kind) {
-                case 78:
                 case 79:
-                case 107:
-                case 202:
-                case 203:
-                    return containsNarrowableReference(expr);
+                case 80:
+                case 108:
                 case 204:
+                case 205:
+                    return containsNarrowableReference(expr);
+                case 206:
                     return hasNarrowableArgument(expr);
-                case 208:
-                case 226:
+                case 210:
+                case 228:
                     return isNarrowingExpression(expr.expression);
-                case 217:
+                case 219:
                     return isNarrowingBinaryExpression(expr);
-                case 215:
+                case 217:
                     return expr.operator === 53 && isNarrowingExpression(expr.operand);
-                case 212:
+                case 214:
                     return isNarrowingExpression(expr.expression);
             }
             return false;
@@ -34273,7 +35099,7 @@
                     }
                 }
             }
-            if (expr.expression.kind === 202 &&
+            if (expr.expression.kind === 204 &&
                 containsNarrowableReference(expr.expression.expression)) {
                 return true;
             }
@@ -34282,15 +35108,12 @@
         function isNarrowingTypeofOperands(expr1, expr2) {
             return ts.isTypeOfExpression(expr1) && isNarrowableOperand(expr1.expression) && ts.isStringLiteralLike(expr2);
         }
-        function isNarrowableInOperands(left, right) {
-            return ts.isStringLiteralLike(left) && isNarrowingExpression(right);
-        }
         function isNarrowingBinaryExpression(expr) {
             switch (expr.operatorToken.kind) {
-                case 62:
-                case 74:
+                case 63:
                 case 75:
                 case 76:
+                case 77:
                     return containsNarrowableReference(expr.left);
                 case 34:
                 case 35:
@@ -34298,10 +35121,10 @@
                 case 37:
                     return isNarrowableOperand(expr.left) || isNarrowableOperand(expr.right) ||
                         isNarrowingTypeofOperands(expr.right, expr.left) || isNarrowingTypeofOperands(expr.left, expr.right);
-                case 101:
+                case 102:
                     return isNarrowableOperand(expr.left);
-                case 100:
-                    return isNarrowableInOperands(expr.left, expr.right);
+                case 101:
+                    return isNarrowingExpression(expr.right);
                 case 27:
                     return isNarrowingExpression(expr.right);
             }
@@ -34309,11 +35132,11 @@
         }
         function isNarrowableOperand(expr) {
             switch (expr.kind) {
-                case 208:
+                case 210:
                     return isNarrowableOperand(expr.expression);
-                case 217:
+                case 219:
                     switch (expr.operatorToken.kind) {
-                        case 62:
+                        case 63:
                             return isNarrowableOperand(expr.left);
                         case 27:
                             return isNarrowableOperand(expr.right);
@@ -34346,8 +35169,8 @@
             if (!expression) {
                 return flags & 32 ? antecedent : unreachableFlow;
             }
-            if ((expression.kind === 109 && flags & 64 ||
-                expression.kind === 94 && flags & 32) &&
+            if ((expression.kind === 110 && flags & 64 ||
+                expression.kind === 95 && flags & 32) &&
                 !ts.isExpressionOfOptionalChainRoot(expression) && !ts.isNullishCoalesce(expression.parent)) {
                 return unreachableFlow;
             }
@@ -34386,26 +35209,26 @@
         function isStatementCondition(node) {
             var parent = node.parent;
             switch (parent.kind) {
-                case 235:
                 case 237:
-                case 236:
-                    return parent.expression === node;
+                case 239:
                 case 238:
-                case 218:
+                    return parent.expression === node;
+                case 240:
+                case 220:
                     return parent.condition === node;
             }
             return false;
         }
         function isLogicalExpression(node) {
             while (true) {
-                if (node.kind === 208) {
+                if (node.kind === 210) {
                     node = node.expression;
                 }
-                else if (node.kind === 215 && node.operator === 53) {
+                else if (node.kind === 217 && node.operator === 53) {
                     node = node.operand;
                 }
                 else {
-                    return node.kind === 217 && (node.operatorToken.kind === 55 ||
+                    return node.kind === 219 && (node.operatorToken.kind === 55 ||
                         node.operatorToken.kind === 56 ||
                         node.operatorToken.kind === 60);
                 }
@@ -34452,7 +35275,7 @@
         }
         function setContinueTarget(node, target) {
             var label = activeLabelList;
-            while (label && node.parent.kind === 246) {
+            while (label && node.parent.kind === 248) {
                 label.continueTarget = target;
                 label = label.next;
                 node = node.parent;
@@ -34503,12 +35326,12 @@
             bind(node.expression);
             addAntecedent(preLoopLabel, currentFlow);
             currentFlow = preLoopLabel;
-            if (node.kind === 240) {
+            if (node.kind === 242) {
                 bind(node.awaitModifier);
             }
             addAntecedent(postLoopLabel, currentFlow);
             bind(node.initializer);
-            if (node.initializer.kind !== 251) {
+            if (node.initializer.kind !== 253) {
                 bindAssignmentTargetFlow(node.initializer);
             }
             bindIterativeStatement(node.statement, postLoopLabel, preLoopLabel);
@@ -34530,7 +35353,7 @@
         }
         function bindReturnOrThrow(node) {
             bind(node.expression);
-            if (node.kind === 243) {
+            if (node.kind === 245) {
                 hasExplicitReturn = true;
                 if (currentReturnTarget) {
                     addAntecedent(currentReturnTarget, currentFlow);
@@ -34547,7 +35370,7 @@
             return undefined;
         }
         function bindBreakOrContinueFlow(node, breakTarget, continueTarget) {
-            var flowLabel = node.kind === 242 ? breakTarget : continueTarget;
+            var flowLabel = node.kind === 244 ? breakTarget : continueTarget;
             if (flowLabel) {
                 addAntecedent(flowLabel, currentFlow);
                 currentFlow = unreachableFlow;
@@ -34620,7 +35443,7 @@
             preSwitchCaseFlow = currentFlow;
             bind(node.caseBlock);
             addAntecedent(postSwitchLabel, currentFlow);
-            var hasDefault = ts.forEach(node.caseBlock.clauses, function (c) { return c.kind === 286; });
+            var hasDefault = ts.forEach(node.caseBlock.clauses, function (c) { return c.kind === 288; });
             node.possiblyExhaustive = !hasDefault && !postSwitchLabel.antecedents;
             if (!hasDefault) {
                 addAntecedent(postSwitchLabel, createFlowSwitchClause(preSwitchCaseFlow, node, 0, 0));
@@ -34663,9 +35486,9 @@
             maybeBindExpressionFlowIfCall(node.expression);
         }
         function maybeBindExpressionFlowIfCall(node) {
-            if (node.kind === 204) {
+            if (node.kind === 206) {
                 var call = node;
-                if (call.expression.kind !== 105 && ts.isDottedName(call.expression)) {
+                if (call.expression.kind !== 106 && ts.isDottedName(call.expression)) {
                     currentFlow = createFlowCall(currentFlow, call);
                 }
             }
@@ -34689,7 +35512,7 @@
             currentFlow = finishFlowLabel(postStatementLabel);
         }
         function bindDestructuringTargetFlow(node) {
-            if (node.kind === 217 && node.operatorToken.kind === 62) {
+            if (node.kind === 219 && node.operatorToken.kind === 63) {
                 bindAssignmentTargetFlow(node.left);
             }
             else {
@@ -34700,10 +35523,10 @@
             if (isNarrowableReference(node)) {
                 currentFlow = createFlowMutation(16, currentFlow, node);
             }
-            else if (node.kind === 200) {
+            else if (node.kind === 202) {
                 for (var _i = 0, _a = node.elements; _i < _a.length; _i++) {
                     var e = _a[_i];
-                    if (e.kind === 221) {
+                    if (e.kind === 223) {
                         bindAssignmentTargetFlow(e.expression);
                     }
                     else {
@@ -34711,16 +35534,16 @@
                     }
                 }
             }
-            else if (node.kind === 201) {
+            else if (node.kind === 203) {
                 for (var _b = 0, _c = node.properties; _b < _c.length; _b++) {
                     var p = _c[_b];
-                    if (p.kind === 289) {
+                    if (p.kind === 291) {
                         bindDestructuringTargetFlow(p.initializer);
                     }
-                    else if (p.kind === 290) {
+                    else if (p.kind === 292) {
                         bindAssignmentTargetFlow(p.name);
                     }
-                    else if (p.kind === 291) {
+                    else if (p.kind === 293) {
                         bindAssignmentTargetFlow(p.expression);
                     }
                 }
@@ -34728,7 +35551,7 @@
         }
         function bindLogicalLikeExpression(node, trueTarget, falseTarget) {
             var preRightLabel = createBranchLabel();
-            if (node.operatorToken.kind === 55 || node.operatorToken.kind === 75) {
+            if (node.operatorToken.kind === 55 || node.operatorToken.kind === 76) {
                 bindCondition(node.left, preRightLabel, falseTarget);
             }
             else {
@@ -34847,7 +35670,7 @@
                     var operator = node.operatorToken.kind;
                     if (ts.isAssignmentOperator(operator) && !ts.isAssignmentTarget(node)) {
                         bindAssignmentTargetFlow(node.left);
-                        if (operator === 62 && node.left.kind === 203) {
+                        if (operator === 63 && node.left.kind === 205) {
                             var elementAccess = node.left;
                             if (isNarrowableOperand(elementAccess.expression)) {
                                 currentFlow = createFlowMutation(256, currentFlow, node);
@@ -34875,7 +35698,7 @@
         }
         function bindDeleteExpressionFlow(node) {
             bindEachChild(node);
-            if (node.expression.kind === 202) {
+            if (node.expression.kind === 204) {
                 bindAssignmentTargetFlow(node.expression);
             }
         }
@@ -34926,16 +35749,19 @@
             }
         }
         function bindJSDocTypeAlias(node) {
-            ts.setParent(node.tagName, node);
-            if (node.kind !== 329 && node.fullName) {
+            bind(node.tagName);
+            if (node.kind !== 334 && node.fullName) {
                 ts.setParent(node.fullName, node);
                 ts.setParentRecursive(node.fullName, false);
             }
+            if (typeof node.comment !== "string") {
+                bindEach(node.comment);
+            }
         }
         function bindJSDocClassTag(node) {
             bindEachChild(node);
             var host = ts.getHostSignatureFromJSDoc(node);
-            if (host && host.kind !== 166) {
+            if (host && host.kind !== 167) {
                 addDeclarationToSymbol(host.symbol, host, 32);
             }
         }
@@ -34948,15 +35774,15 @@
         }
         function bindOptionalChainRest(node) {
             switch (node.kind) {
-                case 202:
+                case 204:
                     bind(node.questionDotToken);
                     bind(node.name);
                     break;
-                case 203:
+                case 205:
                     bind(node.questionDotToken);
                     bind(node.argumentExpression);
                     break;
-                case 204:
+                case 206:
                     bind(node.questionDotToken);
                     bindEach(node.typeArguments);
                     bindEach(node.arguments);
@@ -35007,19 +35833,19 @@
             }
             else {
                 var expr = ts.skipParentheses(node.expression);
-                if (expr.kind === 209 || expr.kind === 210) {
+                if (expr.kind === 211 || expr.kind === 212) {
                     bindEach(node.typeArguments);
                     bindEach(node.arguments);
                     bind(node.expression);
                 }
                 else {
                     bindEachChild(node);
-                    if (node.expression.kind === 105) {
+                    if (node.expression.kind === 106) {
                         currentFlow = createFlowCall(currentFlow, node);
                     }
                 }
             }
-            if (node.expression.kind === 202) {
+            if (node.expression.kind === 204) {
                 var propertyAccess = node.expression;
                 if (ts.isIdentifier(propertyAccess.name) && isNarrowableOperand(propertyAccess.expression) && ts.isPushOrUnshiftIdentifier(propertyAccess.name)) {
                     currentFlow = createFlowMutation(256, currentFlow, node);
@@ -35028,54 +35854,55 @@
         }
         function getContainerFlags(node) {
             switch (node.kind) {
-                case 222:
-                case 253:
-                case 256:
-                case 201:
-                case 178:
-                case 314:
-                case 282:
-                    return 1;
-                case 254:
-                    return 1 | 64;
-                case 257:
+                case 224:
                 case 255:
-                case 191:
+                case 258:
+                case 203:
+                case 180:
+                case 317:
+                case 284:
+                    return 1;
+                case 256:
+                    return 1 | 64;
+                case 259:
+                case 257:
+                case 193:
                     return 1 | 32;
-                case 298:
+                case 300:
                     return 1 | 4 | 32;
-                case 166:
+                case 167:
                     if (ts.isObjectLiteralOrClassExpressionMethod(node)) {
                         return 1 | 4 | 32 | 8 | 128;
                     }
-                case 167:
-                case 252:
-                case 165:
-                case 168:
                 case 169:
+                case 254:
+                case 166:
                 case 170:
-                case 315:
-                case 309:
-                case 175:
                 case 171:
                 case 172:
-                case 176:
+                case 318:
+                case 312:
+                case 177:
+                case 173:
+                case 174:
+                case 178:
+                case 168:
                     return 1 | 4 | 32 | 8;
-                case 209:
-                case 210:
+                case 211:
+                case 212:
                     return 1 | 4 | 32 | 8 | 16;
-                case 258:
+                case 260:
                     return 4;
-                case 164:
+                case 165:
                     return node.initializer ? 4 : 0;
-                case 288:
-                case 238:
-                case 239:
+                case 290:
                 case 240:
-                case 259:
+                case 241:
+                case 242:
+                case 261:
                     return 2;
-                case 231:
-                    return ts.isFunctionLike(node.parent) ? 0 : 2;
+                case 233:
+                    return ts.isFunctionLike(node.parent) || ts.isClassStaticBlockDeclaration(node.parent) ? 0 : 2;
             }
             return 0;
         }
@@ -35087,45 +35914,46 @@
         }
         function declareSymbolAndAddToSymbolTable(node, symbolFlags, symbolExcludes) {
             switch (container.kind) {
-                case 257:
+                case 259:
                     return declareModuleMember(node, symbolFlags, symbolExcludes);
-                case 298:
+                case 300:
                     return declareSourceFileMember(node, symbolFlags, symbolExcludes);
-                case 222:
-                case 253:
+                case 224:
+                case 255:
                     return declareClassMember(node, symbolFlags, symbolExcludes);
-                case 256:
+                case 258:
                     return declareSymbol(container.symbol.exports, container.symbol, node, symbolFlags, symbolExcludes);
-                case 178:
-                case 314:
-                case 201:
-                case 254:
-                case 282:
+                case 180:
+                case 317:
+                case 203:
+                case 256:
+                case 284:
                     return declareSymbol(container.symbol.members, container.symbol, node, symbolFlags, symbolExcludes);
-                case 175:
-                case 176:
+                case 177:
+                case 178:
+                case 172:
+                case 173:
+                case 318:
+                case 174:
+                case 167:
+                case 166:
+                case 169:
                 case 170:
                 case 171:
-                case 315:
-                case 172:
-                case 166:
-                case 165:
-                case 167:
+                case 254:
+                case 211:
+                case 212:
+                case 312:
+                case 340:
+                case 333:
                 case 168:
-                case 169:
-                case 252:
-                case 209:
-                case 210:
-                case 309:
-                case 335:
-                case 328:
-                case 255:
-                case 191:
+                case 257:
+                case 193:
                     return declareSymbol(container.locals, undefined, node, symbolFlags, symbolExcludes);
             }
         }
         function declareClassMember(node, symbolFlags, symbolExcludes) {
-            return ts.hasSyntacticModifier(node, 32)
+            return ts.isStatic(node)
                 ? declareSymbol(container.symbol.exports, container.symbol, node, symbolFlags, symbolExcludes)
                 : declareSymbol(container.symbol.members, container.symbol, node, symbolFlags, symbolExcludes);
         }
@@ -35159,15 +35987,13 @@
                     var pattern = void 0;
                     if (node.name.kind === 10) {
                         var text = node.name.text;
-                        if (ts.hasZeroOrOneAsteriskCharacter(text)) {
-                            pattern = ts.tryParsePattern(text);
-                        }
-                        else {
+                        pattern = ts.tryParsePattern(text);
+                        if (pattern === undefined) {
                             errorOnFirstToken(node.name, ts.Diagnostics.Pattern_0_can_have_at_most_one_Asterisk_character, text);
                         }
                     }
                     var symbol = declareSymbolAndAddToSymbolTable(node, 512, 110735);
-                    file.patternAmbientModules = ts.append(file.patternAmbientModules, pattern && { pattern: pattern, symbol: symbol });
+                    file.patternAmbientModules = ts.append(file.patternAmbientModules, pattern && !ts.isString(pattern) ? { pattern: pattern, symbol: symbol } : undefined);
                 }
             }
             else {
@@ -35199,11 +36025,11 @@
                 var seen = new ts.Map();
                 for (var _i = 0, _a = node.properties; _i < _a.length; _i++) {
                     var prop = _a[_i];
-                    if (prop.kind === 291 || prop.name.kind !== 78) {
+                    if (prop.kind === 293 || prop.name.kind !== 79) {
                         continue;
                     }
                     var identifier = prop.name;
-                    var currentKind = prop.kind === 289 || prop.kind === 290 || prop.kind === 166
+                    var currentKind = prop.kind === 291 || prop.kind === 292 || prop.kind === 167
                         ? 1
                         : 2;
                     var existingKind = seen.get(identifier.escapedText);
@@ -35235,10 +36061,10 @@
         }
         function bindBlockScopedDeclaration(node, symbolFlags, symbolExcludes) {
             switch (blockScopeContainer.kind) {
-                case 257:
+                case 259:
                     declareModuleMember(node, symbolFlags, symbolExcludes);
                     break;
-                case 298:
+                case 300:
                     if (ts.isExternalOrCommonJsModule(container)) {
                         declareModuleMember(node, symbolFlags, symbolExcludes);
                         break;
@@ -35304,7 +36130,7 @@
                         container = oldContainer;
                     }
                 }
-                else if (ts.isJSDocEnumTag(typeAlias) || !typeAlias.fullName || typeAlias.fullName.kind === 78) {
+                else if (ts.isJSDocEnumTag(typeAlias) || !typeAlias.fullName || typeAlias.fullName.kind === 79) {
                     parent = typeAlias.parent;
                     bindBlockScopedDeclaration(typeAlias, 524288, 788968);
                 }
@@ -35324,11 +36150,11 @@
                 !(node.flags & 4194304) &&
                 !ts.isIdentifierName(node)) {
                 if (inStrictMode &&
-                    node.originalKeywordKind >= 116 &&
-                    node.originalKeywordKind <= 124) {
+                    node.originalKeywordKind >= 117 &&
+                    node.originalKeywordKind <= 125) {
                     file.bindDiagnostics.push(createDiagnosticForNode(node, getStrictModeIdentifierMessage(node), ts.declarationNameToString(node)));
                 }
-                else if (node.originalKeywordKind === 130) {
+                else if (node.originalKeywordKind === 131) {
                     if (ts.isExternalModule(file) && ts.isInTopLevelContext(node)) {
                         file.bindDiagnostics.push(createDiagnosticForNode(node, ts.Diagnostics.Identifier_expected_0_is_a_reserved_word_at_the_top_level_of_a_module, ts.declarationNameToString(node)));
                     }
@@ -35336,7 +36162,7 @@
                         file.bindDiagnostics.push(createDiagnosticForNode(node, ts.Diagnostics.Identifier_expected_0_is_a_reserved_word_that_cannot_be_used_here, ts.declarationNameToString(node)));
                     }
                 }
-                else if (node.originalKeywordKind === 124 && node.flags & 8192) {
+                else if (node.originalKeywordKind === 125 && node.flags & 8192) {
                     file.bindDiagnostics.push(createDiagnosticForNode(node, ts.Diagnostics.Identifier_expected_0_is_a_reserved_word_that_cannot_be_used_here, ts.declarationNameToString(node)));
                 }
             }
@@ -35368,7 +36194,7 @@
             }
         }
         function checkStrictModeDeleteExpression(node) {
-            if (inStrictMode && node.expression.kind === 78) {
+            if (inStrictMode && node.expression.kind === 79) {
                 var span = ts.getErrorSpanForNode(file, node.expression);
                 file.bindDiagnostics.push(ts.createFileDiagnostic(file, span.start, span.length, ts.Diagnostics.delete_cannot_be_called_on_an_identifier_in_strict_mode));
             }
@@ -35377,7 +36203,7 @@
             return ts.isIdentifier(node) && (node.escapedText === "eval" || node.escapedText === "arguments");
         }
         function checkStrictModeEvalOrArguments(contextNode, name) {
-            if (name && name.kind === 78) {
+            if (name && name.kind === 79) {
                 var identifier = name;
                 if (isEvalOrArgumentsIdentifier(identifier)) {
                     var span = ts.getErrorSpanForNode(file, name);
@@ -35387,7 +36213,7 @@
         }
         function getStrictModeEvalOrArgumentsMessage(node) {
             if (ts.getContainingClass(node)) {
-                return ts.Diagnostics.Invalid_use_of_0_Class_definitions_are_automatically_in_strict_mode;
+                return ts.Diagnostics.Code_contained_in_a_class_is_evaluated_in_JavaScript_s_strict_mode_which_does_not_allow_this_use_of_0_For_more_information_see_https_Colon_Slash_Slashdeveloper_mozilla_org_Slashen_US_Slashdocs_SlashWeb_SlashJavaScript_SlashReference_SlashStrict_mode;
             }
             if (file.externalModuleIndicator) {
                 return ts.Diagnostics.Invalid_use_of_0_Modules_are_automatically_in_strict_mode;
@@ -35410,9 +36236,9 @@
         }
         function checkStrictModeFunctionDeclaration(node) {
             if (languageVersion < 2) {
-                if (blockScopeContainer.kind !== 298 &&
-                    blockScopeContainer.kind !== 257 &&
-                    !ts.isFunctionLike(blockScopeContainer)) {
+                if (blockScopeContainer.kind !== 300 &&
+                    blockScopeContainer.kind !== 259 &&
+                    !ts.isFunctionLikeOrClassStaticBlockDeclaration(blockScopeContainer)) {
                     var errorSpan = ts.getErrorSpanForNode(file, node);
                     file.bindDiagnostics.push(ts.createFileDiagnostic(file, errorSpan.start, errorSpan.length, getStrictModeBlockScopeFunctionDeclarationMessage(node)));
                 }
@@ -35473,7 +36299,7 @@
             ts.setParent(node, parent);
             var saveInStrictMode = inStrictMode;
             bindWorker(node);
-            if (node.kind > 157) {
+            if (node.kind > 158) {
                 var saveParent = parent;
                 parent = node;
                 var containerFlags = getContainerFlags(node);
@@ -35531,7 +36357,7 @@
         }
         function bindWorker(node) {
             switch (node.kind) {
-                case 78:
+                case 79:
                     if (node.isInJSDocNamespace) {
                         var parentNode = node.parent;
                         while (parentNode && !ts.isJSDocTypeAlias(parentNode)) {
@@ -35540,24 +36366,24 @@
                         bindBlockScopedDeclaration(parentNode, 524288, 788968);
                         break;
                     }
-                case 107:
-                    if (currentFlow && (ts.isExpression(node) || parent.kind === 290)) {
+                case 108:
+                    if (currentFlow && (ts.isExpression(node) || parent.kind === 292)) {
                         node.flowNode = currentFlow;
                     }
                     return checkContextualIdentifier(node);
-                case 158:
-                    if (currentFlow && parent.kind === 177) {
+                case 159:
+                    if (currentFlow && ts.isPartOfTypeQuery(node)) {
                         node.flowNode = currentFlow;
                     }
                     break;
-                case 227:
-                case 105:
+                case 229:
+                case 106:
                     node.flowNode = currentFlow;
                     break;
-                case 79:
+                case 80:
                     return checkPrivateIdentifier(node);
-                case 202:
-                case 203:
+                case 204:
+                case 205:
                     var expr = node;
                     if (currentFlow && isNarrowableReference(expr)) {
                         expr.flowNode = currentFlow;
@@ -35572,7 +36398,7 @@
                         declareSymbol(file.locals, undefined, expr.expression, 1 | 134217728, 111550);
                     }
                     break;
-                case 217:
+                case 219:
                     var specialKind = ts.getAssignmentDeclarationKind(node);
                     switch (specialKind) {
                         case 1:
@@ -35607,74 +36433,74 @@
                             ts.Debug.fail("Unknown binary expression special property assignment kind");
                     }
                     return checkStrictModeBinaryExpression(node);
-                case 288:
+                case 290:
                     return checkStrictModeCatchClause(node);
-                case 211:
+                case 213:
                     return checkStrictModeDeleteExpression(node);
                 case 8:
                     return checkStrictModeNumericLiteral(node);
-                case 216:
+                case 218:
                     return checkStrictModePostfixUnaryExpression(node);
-                case 215:
+                case 217:
                     return checkStrictModePrefixUnaryExpression(node);
-                case 244:
-                    return checkStrictModeWithStatement(node);
                 case 246:
+                    return checkStrictModeWithStatement(node);
+                case 248:
                     return checkStrictModeLabeledStatement(node);
-                case 188:
+                case 190:
                     seenThisKeyword = true;
                     return;
-                case 173:
+                case 175:
                     break;
-                case 160:
-                    return bindTypeParameter(node);
                 case 161:
+                    return bindTypeParameter(node);
+                case 162:
                     return bindParameter(node);
-                case 250:
+                case 252:
                     return bindVariableDeclarationOrBindingElement(node);
-                case 199:
+                case 201:
                     node.flowNode = currentFlow;
                     return bindVariableDeclarationOrBindingElement(node);
-                case 164:
-                case 163:
-                    return bindPropertyWorker(node);
-                case 289:
-                case 290:
-                    return bindPropertyOrMethodOrAccessor(node, 4, 0);
-                case 292:
-                    return bindPropertyOrMethodOrAccessor(node, 8, 900095);
-                case 170:
-                case 171:
-                case 172:
-                    return declareSymbolAndAddToSymbolTable(node, 131072, 0);
-                case 166:
                 case 165:
-                    return bindPropertyOrMethodOrAccessor(node, 8192 | (node.questionToken ? 16777216 : 0), ts.isObjectLiteralMethod(node) ? 0 : 103359);
-                case 252:
-                    return bindFunctionDeclaration(node);
+                case 164:
+                    return bindPropertyWorker(node);
+                case 291:
+                case 292:
+                    return bindPropertyOrMethodOrAccessor(node, 4, 0);
+                case 294:
+                    return bindPropertyOrMethodOrAccessor(node, 8, 900095);
+                case 172:
+                case 173:
+                case 174:
+                    return declareSymbolAndAddToSymbolTable(node, 131072, 0);
                 case 167:
-                    return declareSymbolAndAddToSymbolTable(node, 16384, 0);
-                case 168:
-                    return bindPropertyOrMethodOrAccessor(node, 32768, 46015);
+                case 166:
+                    return bindPropertyOrMethodOrAccessor(node, 8192 | (node.questionToken ? 16777216 : 0), ts.isObjectLiteralMethod(node) ? 0 : 103359);
+                case 254:
+                    return bindFunctionDeclaration(node);
                 case 169:
+                    return declareSymbolAndAddToSymbolTable(node, 16384, 0);
+                case 170:
+                    return bindPropertyOrMethodOrAccessor(node, 32768, 46015);
+                case 171:
                     return bindPropertyOrMethodOrAccessor(node, 65536, 78783);
-                case 175:
-                case 309:
-                case 315:
-                case 176:
-                    return bindFunctionOrConstructorType(node);
+                case 177:
+                case 312:
+                case 318:
                 case 178:
-                case 314:
-                case 191:
+                    return bindFunctionOrConstructorType(node);
+                case 180:
+                case 317:
+                case 193:
                     return bindAnonymousTypeWorker(node);
-                case 322:
+                case 327:
                     return bindJSDocClassTag(node);
-                case 201:
+                case 203:
                     return bindObjectLiteralExpression(node);
-                case 209:
-                case 210:
+                case 211:
+                case 212:
                     return bindFunctionExpression(node);
-                case 204:
+                case 206:
                     var assignmentKind = ts.getAssignmentDeclarationKind(node);
                     switch (assignmentKind) {
                         case 7:
@@ -35692,60 +36518,60 @@
                         bindCallExpression(node);
                     }
                     break;
-                case 222:
-                case 253:
+                case 224:
+                case 255:
                     inStrictMode = true;
                     return bindClassLikeDeclaration(node);
-                case 254:
-                    return bindBlockScopedDeclaration(node, 64, 788872);
-                case 255:
-                    return bindBlockScopedDeclaration(node, 524288, 788968);
                 case 256:
-                    return bindEnumDeclaration(node);
+                    return bindBlockScopedDeclaration(node, 64, 788872);
                 case 257:
+                    return bindBlockScopedDeclaration(node, 524288, 788968);
+                case 258:
+                    return bindEnumDeclaration(node);
+                case 259:
                     return bindModuleDeclaration(node);
-                case 282:
+                case 284:
                     return bindJsxAttributes(node);
-                case 281:
+                case 283:
                     return bindJsxAttribute(node, 4, 0);
-                case 261:
-                case 264:
-                case 266:
-                case 271:
-                    return declareSymbolAndAddToSymbolTable(node, 2097152, 2097152);
-                case 260:
-                    return bindNamespaceExportDeclaration(node);
                 case 263:
-                    return bindImportClause(node);
+                case 266:
                 case 268:
+                case 273:
+                    return declareSymbolAndAddToSymbolTable(node, 2097152, 2097152);
+                case 262:
+                    return bindNamespaceExportDeclaration(node);
+                case 265:
+                    return bindImportClause(node);
+                case 270:
                     return bindExportDeclaration(node);
-                case 267:
+                case 269:
                     return bindExportAssignment(node);
-                case 298:
+                case 300:
                     updateStrictModeStatementList(node.statements);
                     return bindSourceFileIfExternalModule();
-                case 231:
-                    if (!ts.isFunctionLike(node.parent)) {
+                case 233:
+                    if (!ts.isFunctionLikeOrClassStaticBlockDeclaration(node.parent)) {
                         return;
                     }
-                case 258:
+                case 260:
                     return updateStrictModeStatementList(node.statements);
-                case 330:
-                    if (node.parent.kind === 315) {
+                case 335:
+                    if (node.parent.kind === 318) {
                         return bindParameter(node);
                     }
-                    if (node.parent.kind !== 314) {
+                    if (node.parent.kind !== 317) {
                         break;
                     }
-                case 337:
+                case 342:
                     var propTag = node;
-                    var flags = propTag.isBracketed || propTag.typeExpression && propTag.typeExpression.type.kind === 308 ?
+                    var flags = propTag.isBracketed || propTag.typeExpression && propTag.typeExpression.type.kind === 311 ?
                         4 | 16777216 :
                         4;
                     return declareSymbolAndAddToSymbolTable(propTag, flags, 0);
-                case 335:
-                case 328:
-                case 329:
+                case 340:
+                case 333:
+                case 334:
                     return (delayedTypeAliases || (delayedTypeAliases = [])).push(node);
             }
         }
@@ -35889,10 +36715,10 @@
             }
             var thisContainer = ts.getThisContainer(node, false);
             switch (thisContainer.kind) {
-                case 252:
-                case 209:
+                case 254:
+                case 211:
                     var constructorSymbol = thisContainer.symbol;
-                    if (ts.isBinaryExpression(thisContainer.parent) && thisContainer.parent.operatorToken.kind === 62) {
+                    if (ts.isBinaryExpression(thisContainer.parent) && thisContainer.parent.operatorToken.kind === 63) {
                         var l = thisContainer.parent.left;
                         if (ts.isBindableStaticAccessExpression(l) && ts.isPrototypeAccess(l.expression)) {
                             constructorSymbol = lookupSymbolForPropertyAccess(l.expression.expression, thisParentContainer);
@@ -35901,7 +36727,7 @@
                     if (constructorSymbol && constructorSymbol.valueDeclaration) {
                         constructorSymbol.members = constructorSymbol.members || ts.createSymbolTable();
                         if (ts.hasDynamicName(node)) {
-                            bindDynamicallyNamedThisPropertyAssignment(node, constructorSymbol);
+                            bindDynamicallyNamedThisPropertyAssignment(node, constructorSymbol, constructorSymbol.members);
                         }
                         else {
                             declareSymbol(constructorSymbol.members, constructorSymbol, node, 4 | 67108864, 0 & ~4);
@@ -35909,21 +36735,21 @@
                         addDeclarationToSymbol(constructorSymbol, constructorSymbol.valueDeclaration, 32);
                     }
                     break;
-                case 167:
-                case 164:
-                case 166:
-                case 168:
                 case 169:
+                case 165:
+                case 167:
+                case 170:
+                case 171:
                     var containingClass = thisContainer.parent;
-                    var symbolTable = ts.hasSyntacticModifier(thisContainer, 32) ? containingClass.symbol.exports : containingClass.symbol.members;
+                    var symbolTable = ts.isStatic(thisContainer) ? containingClass.symbol.exports : containingClass.symbol.members;
                     if (ts.hasDynamicName(node)) {
-                        bindDynamicallyNamedThisPropertyAssignment(node, containingClass.symbol);
+                        bindDynamicallyNamedThisPropertyAssignment(node, containingClass.symbol, symbolTable);
                     }
                     else {
                         declareSymbol(symbolTable, containingClass.symbol, node, 4 | 67108864, 0, true);
                     }
                     break;
-                case 298:
+                case 300:
                     if (ts.hasDynamicName(node)) {
                         break;
                     }
@@ -35938,8 +36764,8 @@
                     ts.Debug.failBadSyntaxKind(thisContainer);
             }
         }
-        function bindDynamicallyNamedThisPropertyAssignment(node, symbol) {
-            bindAnonymousDeclaration(node, 4, "__computed");
+        function bindDynamicallyNamedThisPropertyAssignment(node, symbol, symbolTable) {
+            declareSymbol(symbolTable, symbol, node, 4, 0, true, true);
             addLateBoundAssignmentDeclarationToSymbol(node, symbol);
         }
         function addLateBoundAssignmentDeclarationToSymbol(node, symbol) {
@@ -35948,10 +36774,10 @@
             }
         }
         function bindSpecialPropertyDeclaration(node) {
-            if (node.expression.kind === 107) {
+            if (node.expression.kind === 108) {
                 bindThisPropertyAssignment(node);
             }
-            else if (ts.isBindableStaticAccessExpression(node) && node.parent.parent.kind === 298) {
+            else if (ts.isBindableStaticAccessExpression(node) && node.parent.parent.kind === 300) {
                 if (ts.isPrototypeAccess(node.expression)) {
                     bindPrototypePropertyAssignment(node, node.parent);
                 }
@@ -35982,7 +36808,7 @@
         }
         function bindObjectDefinePropertyAssignment(node) {
             var namespaceSymbol = lookupSymbolForPropertyAccess(node.arguments[0]);
-            var isToplevel = node.parent.parent.kind === 298;
+            var isToplevel = node.parent.parent.kind === 300;
             namespaceSymbol = bindPotentiallyMissingNamespaces(namespaceSymbol, node.arguments[0], isToplevel, false, false);
             bindPotentiallyNewExpandoMemberToNamespace(node, namespaceSymbol, false);
         }
@@ -36076,8 +36902,8 @@
         }
         function isTopLevelNamespaceAssignment(propertyAccess) {
             return ts.isBinaryExpression(propertyAccess.parent)
-                ? getParentOfBinaryExpression(propertyAccess.parent).parent.kind === 298
-                : propertyAccess.parent.parent.kind === 298;
+                ? getParentOfBinaryExpression(propertyAccess.parent).parent.kind === 300
+                : propertyAccess.parent.parent.kind === 300;
         }
         function bindPropertyAssignment(name, propertyAccess, isPrototypeProperty, containerIsClass) {
             var namespaceSymbol = lookupSymbolForPropertyAccess(name, container) || lookupSymbolForPropertyAccess(name, blockScopeContainer);
@@ -36143,7 +36969,7 @@
             }
         }
         function bindClassLikeDeclaration(node) {
-            if (node.kind === 253) {
+            if (node.kind === 255) {
                 bindBlockScopedDeclaration(node, 32, 899503);
             }
             else {
@@ -36190,7 +37016,7 @@
             }
         }
         function bindParameter(node) {
-            if (node.kind === 330 && container.kind !== 315) {
+            if (node.kind === 335 && container.kind !== 318) {
                 return;
             }
             if (inStrictMode && !(node.flags & 8388608)) {
@@ -36263,7 +37089,7 @@
                     declareSymbolAndAddToSymbolTable(node, 262144, 526824);
                 }
             }
-            else if (node.parent.kind === 186) {
+            else if (node.parent.kind === 188) {
                 var container_2 = getInferTypeContainer(node.parent);
                 if (container_2) {
                     if (!container_2.locals) {
@@ -36288,9 +37114,9 @@
                 return false;
             }
             if (currentFlow === unreachableFlow) {
-                var reportError = (ts.isStatementButNotDeclaration(node) && node.kind !== 232) ||
-                    node.kind === 253 ||
-                    (node.kind === 257 && shouldReportErrorOnModuleDeclaration(node));
+                var reportError = (ts.isStatementButNotDeclaration(node) && node.kind !== 234) ||
+                    node.kind === 255 ||
+                    (node.kind === 259 && shouldReportErrorOnModuleDeclaration(node));
                 if (reportError) {
                     currentFlow = reportedUnreachableFlow;
                     if (!options.allowUnreachableCode) {
@@ -36322,12 +37148,12 @@
     }
     function isPurelyTypeDeclaration(s) {
         switch (s.kind) {
-            case 254:
-            case 255:
-                return true;
-            case 257:
-                return getModuleInstanceState(s) !== 1;
             case 256:
+            case 257:
+                return true;
+            case 259:
+                return getModuleInstanceState(s) !== 1;
+            case 258:
                 return ts.hasSyntacticModifier(s, 2048);
             default:
                 return false;
@@ -36370,7 +37196,7 @@
 })(ts || (ts = {}));
 var ts;
 (function (ts) {
-    function createGetSymbolWalker(getRestTypeOfSignature, getTypePredicateOfSignature, getReturnTypeOfSignature, getBaseTypes, resolveStructuredTypeMembers, getTypeOfSymbol, getResolvedSymbol, getIndexTypeOfStructuredType, getConstraintOfTypeParameter, getFirstIdentifier, getTypeArguments) {
+    function createGetSymbolWalker(getRestTypeOfSignature, getTypePredicateOfSignature, getReturnTypeOfSignature, getBaseTypes, resolveStructuredTypeMembers, getTypeOfSymbol, getResolvedSymbol, getConstraintOfTypeParameter, getFirstIdentifier, getTypeArguments) {
         return getSymbolWalker;
         function getSymbolWalker(accept) {
             if (accept === void 0) { accept = function () { return true; }; }
@@ -36482,21 +37308,22 @@
                 visitType(interfaceT.thisType);
             }
             function visitObjectType(type) {
-                var stringIndexType = getIndexTypeOfStructuredType(type, 0);
-                visitType(stringIndexType);
-                var numberIndexType = getIndexTypeOfStructuredType(type, 1);
-                visitType(numberIndexType);
                 var resolved = resolveStructuredTypeMembers(type);
-                for (var _i = 0, _a = resolved.callSignatures; _i < _a.length; _i++) {
-                    var signature = _a[_i];
-                    visitSignature(signature);
+                for (var _i = 0, _a = resolved.indexInfos; _i < _a.length; _i++) {
+                    var info = _a[_i];
+                    visitType(info.keyType);
+                    visitType(info.type);
                 }
-                for (var _b = 0, _c = resolved.constructSignatures; _b < _c.length; _b++) {
+                for (var _b = 0, _c = resolved.callSignatures; _b < _c.length; _b++) {
                     var signature = _c[_b];
                     visitSignature(signature);
                 }
-                for (var _d = 0, _e = resolved.properties; _d < _e.length; _d++) {
-                    var p = _e[_d];
+                for (var _d = 0, _e = resolved.constructSignatures; _d < _e.length; _d++) {
+                    var signature = _e[_d];
+                    visitSignature(signature);
+                }
+                for (var _f = 0, _g = resolved.properties; _f < _g.length; _f++) {
+                    var p = _g[_f];
                     visitSymbol(p);
                 }
             }
@@ -36518,7 +37345,7 @@
                     symbol.exports.forEach(visitSymbol);
                 }
                 ts.forEach(symbol.declarations, function (d) {
-                    if (d.type && d.type.kind === 177) {
+                    if (d.type && d.type.kind === 179) {
                         var query = d.type;
                         var entity = getResolvedSymbol(getFirstIdentifier(query.exprName));
                         visitSymbol(entity);
@@ -36631,8 +37458,10 @@
         var strictPropertyInitialization = ts.getStrictOptionValue(compilerOptions, "strictPropertyInitialization");
         var noImplicitAny = ts.getStrictOptionValue(compilerOptions, "noImplicitAny");
         var noImplicitThis = ts.getStrictOptionValue(compilerOptions, "noImplicitThis");
+        var useUnknownInCatchVariables = ts.getStrictOptionValue(compilerOptions, "useUnknownInCatchVariables");
         var keyofStringsOnly = !!compilerOptions.keyofStringsOnly;
         var freshObjectLiteralFlag = compilerOptions.suppressExcessPropertyErrors ? 0 : 16384;
+        var exactOptionalPropertyTypes = compilerOptions.exactOptionalPropertyTypes;
         var checkBinaryExpression = createCheckBinaryExpression();
         var emitResolver = createResolver();
         var nodeBuilder = createNodeBuilder();
@@ -36665,6 +37494,7 @@
             getDiagnostics: getDiagnostics,
             getGlobalDiagnostics: getGlobalDiagnostics,
             getRecursionIdentity: getRecursionIdentity,
+            getUnmatchedProperties: getUnmatchedProperties,
             getTypeOfSymbolAtLocation: function (symbol, locationIn) {
                 var location = ts.getParseTreeNode(locationIn);
                 return location ? getTypeOfSymbolAtLocation(symbol, location) : errorType;
@@ -36688,9 +37518,10 @@
                 return lexicallyScopedIdentifier ? getPrivateIdentifierPropertyOfType(leftType, lexicallyScopedIdentifier) : undefined;
             },
             getTypeOfPropertyOfType: function (type, name) { return getTypeOfPropertyOfType(type, ts.escapeLeadingUnderscores(name)); },
-            getIndexInfoOfType: getIndexInfoOfType,
+            getIndexInfoOfType: function (type, kind) { return getIndexInfoOfType(type, kind === 0 ? stringType : numberType); },
+            getIndexInfosOfType: getIndexInfosOfType,
             getSignaturesOfType: getSignaturesOfType,
-            getIndexTypeOfType: getIndexTypeOfType,
+            getIndexTypeOfType: function (type, kind) { return getIndexTypeOfType(type, kind === 0 ? stringType : numberType); },
             getBaseTypes: getBaseTypes,
             getBaseTypeOfLiteralType: getBaseTypeOfLiteralType,
             getWidenedType: getWidenedType,
@@ -36699,6 +37530,7 @@
                 return node ? getTypeFromTypeNode(node) : errorType;
             },
             getParameterType: getTypeAtPosition,
+            getParameterIdentifierNameAtPosition: getParameterIdentifierNameAtPosition,
             getPromisedTypeOfPromise: getPromisedTypeOfPromise,
             getAwaitedType: function (type) { return getAwaitedType(type); },
             getReturnTypeOfSignature: getReturnTypeOfSignature,
@@ -36723,6 +37555,10 @@
                 var node = ts.getParseTreeNode(nodeIn);
                 return node ? getSymbolAtLocation(node, true) : undefined;
             },
+            getIndexInfosAtLocation: function (nodeIn) {
+                var node = ts.getParseTreeNode(nodeIn);
+                return node ? getIndexInfosAtLocation(node) : undefined;
+            },
             getShorthandAssignmentValueSymbol: function (nodeIn) {
                 var node = ts.getParseTreeNode(nodeIn);
                 return node ? getShorthandAssignmentValueSymbol(node) : undefined;
@@ -36822,6 +37658,7 @@
             },
             getExpandedParameters: getExpandedParameters,
             hasEffectiveRestParameter: hasEffectiveRestParameter,
+            containsArgumentsReference: containsArgumentsReference,
             getConstantValue: function (nodeIn) {
                 var node = ts.getParseTreeNode(nodeIn, canHaveConstantValue);
                 return node ? getConstantValue(node) : undefined;
@@ -36847,7 +37684,8 @@
             getEmitResolver: getEmitResolver,
             getExportsOfModule: getExportsOfModuleAsArray,
             getExportsAndPropertiesOfModule: getExportsAndPropertiesOfModule,
-            getSymbolWalker: ts.createGetSymbolWalker(getRestTypeOfSignature, getTypePredicateOfSignature, getReturnTypeOfSignature, getBaseTypes, resolveStructuredTypeMembers, getTypeOfSymbol, getResolvedSymbol, getIndexTypeOfStructuredType, getConstraintOfTypeParameter, ts.getFirstIdentifier, getTypeArguments),
+            forEachExportAndPropertyOfModule: forEachExportAndPropertyOfModule,
+            getSymbolWalker: ts.createGetSymbolWalker(getRestTypeOfSignature, getTypePredicateOfSignature, getReturnTypeOfSignature, getBaseTypes, resolveStructuredTypeMembers, getTypeOfSymbol, getResolvedSymbol, getConstraintOfTypeParameter, ts.getFirstIdentifier, getTypeArguments),
             getAmbientModules: getAmbientModules,
             getJsxIntrinsicTagNamesAt: getJsxIntrinsicTagNamesAt,
             isOptionalParameter: function (nodeIn) {
@@ -36895,6 +37733,7 @@
             getSuggestionForNonexistentSymbol: function (location, name, meaning) { return getSuggestionForNonexistentSymbol(location, ts.escapeLeadingUnderscores(name), meaning); },
             getSuggestedSymbolForNonexistentModule: getSuggestedSymbolForNonexistentModule,
             getSuggestionForNonexistentExport: getSuggestionForNonexistentExport,
+            getSuggestedSymbolForNonexistentClassMember: getSuggestedSymbolForNonexistentClassMember,
             getBaseConstraintOfType: getBaseConstraintOfType,
             getDefaultFromTypeParameter: function (type) { return type && type.flags & 262144 ? getDefaultFromTypeParameter(type) : undefined; },
             resolveName: function (name, location, meaning, excludeGlobals) {
@@ -36964,7 +37803,10 @@
         var tupleTypes = new ts.Map();
         var unionTypes = new ts.Map();
         var intersectionTypes = new ts.Map();
-        var literalTypes = new ts.Map();
+        var stringLiteralTypes = new ts.Map();
+        var numberLiteralTypes = new ts.Map();
+        var bigIntLiteralTypes = new ts.Map();
+        var enumLiteralTypes = new ts.Map();
         var indexedAccessTypes = new ts.Map();
         var templateLiteralTypes = new ts.Map();
         var stringMappingTypes = new ts.Map();
@@ -36984,6 +37826,7 @@
         var undefinedType = createIntrinsicType(32768, "undefined");
         var undefinedWideningType = strictNullChecks ? undefinedType : createIntrinsicType(32768, "undefined", 131072);
         var optionalType = createIntrinsicType(32768, "undefined");
+        var missingType = exactOptionalPropertyTypes ? createIntrinsicType(32768, "undefined") : undefinedType;
         var nullType = createIntrinsicType(65536, "null");
         var nullWideningType = strictNullChecks ? nullType : createIntrinsicType(65536, "null", 131072);
         var stringType = createIntrinsicType(4, "string");
@@ -37001,10 +37844,7 @@
         falseType.freshType = falseType;
         regularFalseType.regularType = regularFalseType;
         regularFalseType.freshType = falseType;
-        var booleanType = createBooleanType([regularFalseType, regularTrueType]);
-        createBooleanType([regularFalseType, trueType]);
-        createBooleanType([falseType, regularTrueType]);
-        createBooleanType([falseType, trueType]);
+        var booleanType = getUnionType([regularFalseType, regularTrueType]);
         var esSymbolType = createIntrinsicType(4096, "symbol");
         var voidType = createIntrinsicType(16384, "void");
         var neverType = createIntrinsicType(131072, "never");
@@ -37013,25 +37853,26 @@
         var implicitNeverType = createIntrinsicType(131072, "never");
         var unreachableNeverType = createIntrinsicType(131072, "never");
         var nonPrimitiveType = createIntrinsicType(67108864, "object");
+        var stringOrNumberType = getUnionType([stringType, numberType]);
         var stringNumberSymbolType = getUnionType([stringType, numberType, esSymbolType]);
         var keyofConstraintType = keyofStringsOnly ? stringType : stringNumberSymbolType;
         var numberOrBigIntType = getUnionType([numberType, bigintType]);
         var templateConstraintType = getUnionType([stringType, numberType, booleanType, bigintType, nullType, undefinedType]);
         var restrictiveMapper = makeFunctionTypeMapper(function (t) { return t.flags & 262144 ? getRestrictiveTypeParameter(t) : t; });
         var permissiveMapper = makeFunctionTypeMapper(function (t) { return t.flags & 262144 ? wildcardType : t; });
-        var emptyObjectType = createAnonymousType(undefined, emptySymbols, ts.emptyArray, ts.emptyArray, undefined, undefined);
-        var emptyJsxObjectType = createAnonymousType(undefined, emptySymbols, ts.emptyArray, ts.emptyArray, undefined, undefined);
+        var emptyObjectType = createAnonymousType(undefined, emptySymbols, ts.emptyArray, ts.emptyArray, ts.emptyArray);
+        var emptyJsxObjectType = createAnonymousType(undefined, emptySymbols, ts.emptyArray, ts.emptyArray, ts.emptyArray);
         emptyJsxObjectType.objectFlags |= 2048;
         var emptyTypeLiteralSymbol = createSymbol(2048, "__type");
         emptyTypeLiteralSymbol.members = ts.createSymbolTable();
-        var emptyTypeLiteralType = createAnonymousType(emptyTypeLiteralSymbol, emptySymbols, ts.emptyArray, ts.emptyArray, undefined, undefined);
-        var emptyGenericType = createAnonymousType(undefined, emptySymbols, ts.emptyArray, ts.emptyArray, undefined, undefined);
+        var emptyTypeLiteralType = createAnonymousType(emptyTypeLiteralSymbol, emptySymbols, ts.emptyArray, ts.emptyArray, ts.emptyArray);
+        var emptyGenericType = createAnonymousType(undefined, emptySymbols, ts.emptyArray, ts.emptyArray, ts.emptyArray);
         emptyGenericType.instantiations = new ts.Map();
-        var anyFunctionType = createAnonymousType(undefined, emptySymbols, ts.emptyArray, ts.emptyArray, undefined, undefined);
+        var anyFunctionType = createAnonymousType(undefined, emptySymbols, ts.emptyArray, ts.emptyArray, ts.emptyArray);
         anyFunctionType.objectFlags |= 524288;
-        var noConstraintType = createAnonymousType(undefined, emptySymbols, ts.emptyArray, ts.emptyArray, undefined, undefined);
-        var circularConstraintType = createAnonymousType(undefined, emptySymbols, ts.emptyArray, ts.emptyArray, undefined, undefined);
-        var resolvingDefaultType = createAnonymousType(undefined, emptySymbols, ts.emptyArray, ts.emptyArray, undefined, undefined);
+        var noConstraintType = createAnonymousType(undefined, emptySymbols, ts.emptyArray, ts.emptyArray, ts.emptyArray);
+        var circularConstraintType = createAnonymousType(undefined, emptySymbols, ts.emptyArray, ts.emptyArray, ts.emptyArray);
+        var resolvingDefaultType = createAnonymousType(undefined, emptySymbols, ts.emptyArray, ts.emptyArray, ts.emptyArray);
         var markerSuperType = createTypeParameter();
         var markerSubType = createTypeParameter();
         markerSubType.constraint = markerSuperType;
@@ -37041,7 +37882,7 @@
         var unknownSignature = createSignature(undefined, undefined, undefined, ts.emptyArray, errorType, undefined, 0, 0);
         var resolvingSignature = createSignature(undefined, undefined, undefined, ts.emptyArray, anyType, undefined, 0, 0);
         var silentNeverSignature = createSignature(undefined, undefined, undefined, ts.emptyArray, silentNeverType, undefined, 0, 0);
-        var enumNumberIndexInfo = createIndexInfo(stringType, true);
+        var enumNumberIndexInfo = createIndexInfo(numberType, stringType, true);
         var iterationTypesCache = new ts.Map();
         var noIterationTypes = {
             get yieldType() { return ts.Debug.fail("Not supported"); },
@@ -37118,6 +37959,7 @@
         var deferredGlobalAsyncGeneratorType;
         var deferredGlobalTemplateStringsArrayType;
         var deferredGlobalImportMetaType;
+        var deferredGlobalImportMetaExpressionType;
         var deferredGlobalExtractSymbol;
         var deferredGlobalOmitSymbol;
         var deferredGlobalBigIntType;
@@ -37130,9 +37972,9 @@
         var lastFlowNode;
         var lastFlowNodeReachable;
         var flowTypeCache;
-        var emptyStringType = getLiteralType("");
-        var zeroType = getLiteralType(0);
-        var zeroBigIntType = getLiteralType({ negative: false, base10Value: "0" });
+        var emptyStringType = getStringLiteralType("");
+        var zeroType = getNumberLiteralType(0);
+        var zeroBigIntType = getBigIntLiteralType({ negative: false, base10Value: "0" });
         var resolutionTargets = [];
         var resolutionResults = [];
         var resolutionPropertyNames = [];
@@ -37152,6 +37994,7 @@
         var potentialThisCollisions = [];
         var potentialNewTargetCollisions = [];
         var potentialWeakMapSetCollisions = [];
+        var potentialReflectCollisions = [];
         var awaitedTypeStack = [];
         var diagnostics = ts.createDiagnosticCollection();
         var suggestionDiagnostics = ts.createDiagnosticCollection();
@@ -37260,10 +38103,13 @@
             diagnostic.skippedOn = key;
             return diagnostic;
         }
-        function error(location, message, arg0, arg1, arg2, arg3) {
-            var diagnostic = location
+        function createError(location, message, arg0, arg1, arg2, arg3) {
+            return location
                 ? ts.createDiagnosticForNode(location, message, arg0, arg1, arg2, arg3)
                 : ts.createCompilerDiagnostic(message, arg0, arg1, arg2, arg3);
+        }
+        function error(location, message, arg0, arg1, arg2, arg3) {
+            var diagnostic = createError(location, message, arg0, arg1, arg2, arg3);
             diagnostics.add(diagnostic);
             return diagnostic;
         }
@@ -37314,7 +38160,7 @@
         }
         function createSymbol(flags, name, checkFlags) {
             symbolCount++;
-            var symbol = (new Symbol(flags | 33554432, name));
+            var symbol = new Symbol(flags | 33554432, name);
             symbol.checkFlags = checkFlags || 0;
             return symbol;
         }
@@ -37566,7 +38412,7 @@
             return nodeLinks[nodeId] || (nodeLinks[nodeId] = new NodeLinks());
         }
         function isGlobalSourceFile(node) {
-            return node.kind === 298 && !ts.isExternalOrCommonJsModule(node);
+            return node.kind === 300 && !ts.isExternalOrCommonJsModule(node);
         }
         function getSymbol(symbols, name, meaning) {
             if (meaning) {
@@ -37613,15 +38459,15 @@
                 return sourceFiles.indexOf(declarationFile) <= sourceFiles.indexOf(useFile);
             }
             if (declaration.pos <= usage.pos && !(ts.isPropertyDeclaration(declaration) && ts.isThisProperty(usage.parent) && !declaration.initializer && !declaration.exclamationToken)) {
-                if (declaration.kind === 199) {
-                    var errorBindingElement = ts.getAncestor(usage, 199);
+                if (declaration.kind === 201) {
+                    var errorBindingElement = ts.getAncestor(usage, 201);
                     if (errorBindingElement) {
                         return ts.findAncestor(errorBindingElement, ts.isBindingElement) !== ts.findAncestor(declaration, ts.isBindingElement) ||
                             declaration.pos < errorBindingElement.pos;
                     }
-                    return isBlockScopedNameDeclaredBeforeUse(ts.getAncestor(declaration, 250), usage);
+                    return isBlockScopedNameDeclaredBeforeUse(ts.getAncestor(declaration, 252), usage);
                 }
-                else if (declaration.kind === 250) {
+                else if (declaration.kind === 252) {
                     return !isImmediatelyUsedInInitializerOfBlockScopedVariable(declaration, usage);
                 }
                 else if (ts.isClassDeclaration(declaration)) {
@@ -37637,10 +38483,10 @@
                 }
                 return true;
             }
-            if (usage.parent.kind === 271 || (usage.parent.kind === 267 && usage.parent.isExportEquals)) {
+            if (usage.parent.kind === 273 || (usage.parent.kind === 269 && usage.parent.isExportEquals)) {
                 return true;
             }
-            if (usage.kind === 267 && usage.isExportEquals) {
+            if (usage.kind === 269 && usage.isExportEquals) {
                 return true;
             }
             if (!!(usage.flags & 4194304) || isInTypeQuery(usage) || usageInTypeDeclaration()) {
@@ -37662,9 +38508,9 @@
             }
             function isImmediatelyUsedInInitializerOfBlockScopedVariable(declaration, usage) {
                 switch (declaration.parent.parent.kind) {
-                    case 233:
-                    case 238:
+                    case 235:
                     case 240:
+                    case 242:
                         if (isSameScopeDescendentOf(usage, declaration, declContainer)) {
                             return true;
                         }
@@ -37681,19 +38527,33 @@
                     if (ts.isFunctionLike(current)) {
                         return true;
                     }
-                    var initializerOfProperty = current.parent &&
-                        current.parent.kind === 164 &&
-                        current.parent.initializer === current;
-                    if (initializerOfProperty) {
-                        if (ts.hasSyntacticModifier(current.parent, 32)) {
-                            if (declaration.kind === 166) {
-                                return true;
+                    if (ts.isClassStaticBlockDeclaration(current)) {
+                        return declaration.pos < usage.pos;
+                    }
+                    var propertyDeclaration = ts.tryCast(current.parent, ts.isPropertyDeclaration);
+                    if (propertyDeclaration) {
+                        var initializerOfProperty = propertyDeclaration.initializer === current;
+                        if (initializerOfProperty) {
+                            if (ts.isStatic(current.parent)) {
+                                if (declaration.kind === 167) {
+                                    return true;
+                                }
+                                if (ts.isPropertyDeclaration(declaration) && ts.getContainingClass(usage) === ts.getContainingClass(declaration)) {
+                                    var propName = declaration.name;
+                                    if (ts.isIdentifier(propName) || ts.isPrivateIdentifier(propName)) {
+                                        var type = getTypeOfSymbol(getSymbolOfNode(declaration));
+                                        var staticBlocks = ts.filter(declaration.parent.members, ts.isClassStaticBlockDeclaration);
+                                        if (isPropertyInitializedInStaticBlocks(propName, type, staticBlocks, declaration.parent.pos, current.pos)) {
+                                            return true;
+                                        }
+                                    }
+                                }
                             }
-                        }
-                        else {
-                            var isDeclarationInstanceProperty = declaration.kind === 164 && !ts.hasSyntacticModifier(declaration, 32);
-                            if (!isDeclarationInstanceProperty || ts.getContainingClass(usage) !== ts.getContainingClass(declaration)) {
-                                return true;
+                            else {
+                                var isDeclarationInstanceProperty = declaration.kind === 165 && !ts.isStatic(declaration);
+                                if (!isDeclarationInstanceProperty || ts.getContainingClass(usage) !== ts.getContainingClass(declaration)) {
+                                    return true;
+                                }
                             }
                         }
                     }
@@ -37709,18 +38569,18 @@
                         return "quit";
                     }
                     switch (node.kind) {
-                        case 210:
+                        case 212:
                             return true;
-                        case 164:
+                        case 165:
                             return stopAtAnyPropertyDeclaration &&
                                 (ts.isPropertyDeclaration(declaration) && node.parent === declaration.parent
                                     || ts.isParameterPropertyDeclaration(declaration, declaration.parent) && node.parent === declaration.parent.parent)
                                 ? "quit" : true;
-                        case 231:
+                        case 233:
                             switch (node.parent.kind) {
-                                case 168:
-                                case 166:
-                                case 169:
+                                case 170:
+                                case 167:
+                                case 171:
                                     return true;
                                 default:
                                     return false;
@@ -37755,17 +38615,17 @@
             }
             function requiresScopeChangeWorker(node) {
                 switch (node.kind) {
-                    case 210:
-                    case 209:
-                    case 252:
-                    case 167:
-                        return false;
-                    case 166:
-                    case 168:
+                    case 212:
+                    case 211:
+                    case 254:
                     case 169:
-                    case 289:
+                        return false;
+                    case 167:
+                    case 170:
+                    case 171:
+                    case 291:
                         return requiresScopeChangeWorker(node.name);
-                    case 164:
+                    case 165:
                         if (ts.hasStaticModifier(node)) {
                             return target < 99 || !useDefineForClassFields;
                         }
@@ -37783,11 +38643,11 @@
                 }
             }
         }
-        function resolveName(location, name, meaning, nameNotFoundMessage, nameArg, isUse, excludeGlobals, suggestedNameNotFoundMessage) {
+        function resolveName(location, name, meaning, nameNotFoundMessage, nameArg, isUse, excludeGlobals, issueSuggestions) {
             if (excludeGlobals === void 0) { excludeGlobals = false; }
-            return resolveNameHelper(location, name, meaning, nameNotFoundMessage, nameArg, isUse, excludeGlobals, getSymbol, suggestedNameNotFoundMessage);
+            return resolveNameHelper(location, name, meaning, nameNotFoundMessage, nameArg, isUse, excludeGlobals, getSymbol, issueSuggestions);
         }
-        function resolveNameHelper(location, name, meaning, nameNotFoundMessage, nameArg, isUse, excludeGlobals, lookup, suggestedNameNotFoundMessage) {
+        function resolveNameHelper(location, name, meaning, nameNotFoundMessage, nameArg, isUse, excludeGlobals, lookup, issueSuggestions) {
             var _a;
             var originalLocation = location;
             var result;
@@ -37804,11 +38664,11 @@
                     if (result = lookup(location.locals, name, meaning)) {
                         var useResult = true;
                         if (ts.isFunctionLike(location) && lastLocation && lastLocation !== location.body) {
-                            if (meaning & result.flags & 788968 && lastLocation.kind !== 312) {
+                            if (meaning & result.flags & 788968 && lastLocation.kind !== 315) {
                                 useResult = result.flags & 262144
                                     ? lastLocation === location.type ||
-                                        lastLocation.kind === 161 ||
-                                        lastLocation.kind === 160
+                                        lastLocation.kind === 162 ||
+                                        lastLocation.kind === 161
                                     : false;
                             }
                             if (meaning & result.flags & 3) {
@@ -37817,13 +38677,13 @@
                                 }
                                 else if (result.flags & 1) {
                                     useResult =
-                                        lastLocation.kind === 161 ||
+                                        lastLocation.kind === 162 ||
                                             (lastLocation === location.type &&
                                                 !!ts.findAncestor(result.valueDeclaration, ts.isParameter));
                                 }
                             }
                         }
-                        else if (location.kind === 185) {
+                        else if (location.kind === 187) {
                             useResult = lastLocation === location.trueType;
                         }
                         if (useResult) {
@@ -37836,13 +38696,13 @@
                 }
                 withinDeferredContext = withinDeferredContext || getIsDeferredContext(location, lastLocation);
                 switch (location.kind) {
-                    case 298:
+                    case 300:
                         if (!ts.isExternalOrCommonJsModule(location))
                             break;
                         isInExternalModule = true;
-                    case 257:
+                    case 259:
                         var moduleExports = getSymbolOfNode(location).exports || emptySymbols;
-                        if (location.kind === 298 || (ts.isModuleDeclaration(location) && location.flags & 8388608 && !ts.isGlobalScopeAugmentation(location))) {
+                        if (location.kind === 300 || (ts.isModuleDeclaration(location) && location.flags & 8388608 && !ts.isGlobalScopeAugmentation(location))) {
                             if (result = moduleExports.get("default")) {
                                 var localSymbol = ts.getLocalSymbolForExportDefault(result);
                                 if (localSymbol && (result.flags & meaning) && localSymbol.escapedName === name) {
@@ -37853,7 +38713,7 @@
                             var moduleExport = moduleExports.get(name);
                             if (moduleExport &&
                                 moduleExport.flags === 2097152 &&
-                                (ts.getDeclarationOfKind(moduleExport, 271) || ts.getDeclarationOfKind(moduleExport, 270))) {
+                                (ts.getDeclarationOfKind(moduleExport, 273) || ts.getDeclarationOfKind(moduleExport, 272))) {
                                 break;
                             }
                         }
@@ -37866,13 +38726,13 @@
                             }
                         }
                         break;
-                    case 256:
+                    case 258:
                         if (result = lookup(getSymbolOfNode(location).exports, name, meaning & 8)) {
                             break loop;
                         }
                         break;
-                    case 164:
-                        if (!ts.hasSyntacticModifier(location, 32)) {
+                    case 165:
+                        if (!ts.isStatic(location)) {
                             var ctor = findConstructorDeclaration(location.parent);
                             if (ctor && ctor.locals) {
                                 if (lookup(ctor.locals, name, meaning & 111551)) {
@@ -37881,21 +38741,21 @@
                             }
                         }
                         break;
-                    case 253:
-                    case 222:
-                    case 254:
+                    case 255:
+                    case 224:
+                    case 256:
                         if (result = lookup(getSymbolOfNode(location).members || emptySymbols, name, meaning & 788968)) {
                             if (!isTypeParameterSymbolDeclaredInContainer(result, location)) {
                                 result = undefined;
                                 break;
                             }
-                            if (lastLocation && ts.hasSyntacticModifier(lastLocation, 32)) {
+                            if (lastLocation && ts.isStatic(lastLocation)) {
                                 error(errorLocation, ts.Diagnostics.Static_members_cannot_reference_class_type_parameters);
                                 return undefined;
                             }
                             break loop;
                         }
-                        if (location.kind === 222 && meaning & 32) {
+                        if (location.kind === 224 && meaning & 32) {
                             var className = location.name;
                             if (className && name === className.escapedText) {
                                 result = location.symbol;
@@ -37903,8 +38763,8 @@
                             }
                         }
                         break;
-                    case 224:
-                        if (lastLocation === location.expression && location.parent.token === 93) {
+                    case 226:
+                        if (lastLocation === location.expression && location.parent.token === 94) {
                             var container = location.parent.parent;
                             if (ts.isClassLike(container) && (result = lookup(getSymbolOfNode(container).members, name, meaning & 788968))) {
                                 if (nameNotFoundMessage) {
@@ -37914,30 +38774,30 @@
                             }
                         }
                         break;
-                    case 159:
+                    case 160:
                         grandparent = location.parent.parent;
-                        if (ts.isClassLike(grandparent) || grandparent.kind === 254) {
+                        if (ts.isClassLike(grandparent) || grandparent.kind === 256) {
                             if (result = lookup(getSymbolOfNode(grandparent).members, name, meaning & 788968)) {
                                 error(errorLocation, ts.Diagnostics.A_computed_property_name_cannot_reference_a_type_parameter_from_its_containing_type);
                                 return undefined;
                             }
                         }
                         break;
-                    case 210:
+                    case 212:
                         if (compilerOptions.target >= 2) {
                             break;
                         }
-                    case 166:
                     case 167:
-                    case 168:
                     case 169:
-                    case 252:
+                    case 170:
+                    case 171:
+                    case 254:
                         if (meaning & 3 && name === "arguments") {
                             result = argumentsSymbol;
                             break loop;
                         }
                         break;
-                    case 209:
+                    case 211:
                         if (meaning & 3 && name === "arguments") {
                             result = argumentsSymbol;
                             break loop;
@@ -37950,23 +38810,23 @@
                             }
                         }
                         break;
-                    case 162:
-                        if (location.parent && location.parent.kind === 161) {
+                    case 163:
+                        if (location.parent && location.parent.kind === 162) {
                             location = location.parent;
                         }
-                        if (location.parent && (ts.isClassElement(location.parent) || location.parent.kind === 253)) {
+                        if (location.parent && (ts.isClassElement(location.parent) || location.parent.kind === 255)) {
                             location = location.parent;
                         }
                         break;
-                    case 335:
-                    case 328:
-                    case 329:
+                    case 340:
+                    case 333:
+                    case 334:
                         var root = ts.getJSDocRoot(location);
                         if (root) {
                             location = root.parent;
                         }
                         break;
-                    case 161:
+                    case 162:
                         if (lastLocation && (lastLocation === location.initializer ||
                             lastLocation === location.name && ts.isBindingPattern(lastLocation))) {
                             if (!associatedDeclarationForContainingInitializerOrBindingName) {
@@ -37974,7 +38834,7 @@
                             }
                         }
                         break;
-                    case 199:
+                    case 201:
                         if (lastLocation && (lastLocation === location.initializer ||
                             lastLocation === location.name && ts.isBindingPattern(lastLocation))) {
                             if (ts.isParameterDeclaration(location) && !associatedDeclarationForContainingInitializerOrBindingName) {
@@ -37982,7 +38842,7 @@
                             }
                         }
                         break;
-                    case 186:
+                    case 188:
                         if (meaning & 262144) {
                             var parameterName = location.typeParameter.name;
                             if (parameterName && name === parameterName.escapedText) {
@@ -38003,7 +38863,7 @@
             }
             if (!result) {
                 if (lastLocation) {
-                    ts.Debug.assert(lastLocation.kind === 298);
+                    ts.Debug.assert(lastLocation.kind === 300);
                     if (lastLocation.commonJsModuleIndicator && name === "exports" && meaning & lastLocation.symbol.flags) {
                         return lastLocation.symbol;
                     }
@@ -38030,15 +38890,18 @@
                             !checkAndReportErrorForUsingNamespaceModuleAsValue(errorLocation, name, meaning) &&
                             !checkAndReportErrorForUsingValueAsType(errorLocation, name, meaning)) {
                         var suggestion = void 0;
-                        if (suggestedNameNotFoundMessage && suggestionCount < maximumSuggestionCount) {
+                        if (issueSuggestions && suggestionCount < maximumSuggestionCount) {
                             suggestion = getSuggestedSymbolForNonexistentSymbol(originalLocation, name, meaning);
-                            var isGlobalScopeAugmentationDeclaration = suggestion && suggestion.valueDeclaration && ts.isAmbientModule(suggestion.valueDeclaration) && ts.isGlobalScopeAugmentation(suggestion.valueDeclaration);
+                            var isGlobalScopeAugmentationDeclaration = (suggestion === null || suggestion === void 0 ? void 0 : suggestion.valueDeclaration) && ts.isAmbientModule(suggestion.valueDeclaration) && ts.isGlobalScopeAugmentation(suggestion.valueDeclaration);
                             if (isGlobalScopeAugmentationDeclaration) {
                                 suggestion = undefined;
                             }
                             if (suggestion) {
                                 var suggestionName = symbolToString(suggestion);
-                                var diagnostic = error(errorLocation, suggestedNameNotFoundMessage, diagnosticName(nameArg), suggestionName);
+                                var isUncheckedJS = isUncheckedJSSuggestion(originalLocation, suggestion, false);
+                                var message = isUncheckedJS ? ts.Diagnostics.Could_not_find_name_0_Did_you_mean_1 : ts.Diagnostics.Cannot_find_name_0_Did_you_mean_1;
+                                var diagnostic = createError(errorLocation, message, diagnosticName(nameArg), suggestionName);
+                                addErrorOrSuggestion(!isUncheckedJS, diagnostic);
                                 if (suggestion.valueDeclaration) {
                                     ts.addRelatedInfo(diagnostic, ts.createDiagnosticForNode(suggestion.valueDeclaration, ts.Diagnostics._0_is_declared_here, suggestionName));
                                 }
@@ -38113,9 +38976,9 @@
             }
         }
         function getIsDeferredContext(location, lastLocation) {
-            if (location.kind !== 210 && location.kind !== 209) {
+            if (location.kind !== 212 && location.kind !== 211) {
                 return ts.isTypeQueryNode(location) || ((ts.isFunctionLikeDeclaration(location) ||
-                    (location.kind === 164 && !ts.hasSyntacticModifier(location, 32))) && (!lastLocation || lastLocation !== location.name));
+                    (location.kind === 165 && !ts.isStatic(location))) && (!lastLocation || lastLocation !== location.name));
             }
             if (lastLocation && lastLocation === location.name) {
                 return false;
@@ -38127,12 +38990,12 @@
         }
         function isSelfReferenceLocation(node) {
             switch (node.kind) {
-                case 252:
-                case 253:
                 case 254:
-                case 256:
                 case 255:
+                case 256:
+                case 258:
                 case 257:
+                case 259:
                     return true;
                 default:
                     return false;
@@ -38145,7 +39008,7 @@
             if (symbol.declarations) {
                 for (var _i = 0, _a = symbol.declarations; _i < _a.length; _i++) {
                     var decl = _a[_i];
-                    if (decl.kind === 160) {
+                    if (decl.kind === 161) {
                         var parent = ts.isJSDocTemplateTag(decl.parent) ? ts.getJSDocHost(decl.parent) : decl.parent;
                         if (parent === container) {
                             return !(ts.isJSDocTemplateTag(decl.parent) && ts.find(decl.parent.parent.tags, ts.isJSDocTypeAlias));
@@ -38172,7 +39035,7 @@
                         error(errorLocation, ts.Diagnostics.Cannot_find_name_0_Did_you_mean_the_static_member_1_0, diagnosticName(nameArg), symbolToString(classSymbol));
                         return true;
                     }
-                    if (location === container && !ts.hasSyntacticModifier(location, 32)) {
+                    if (location === container && !ts.isStatic(location)) {
                         var instanceType = getDeclaredTypeOfSymbol(classSymbol).thisType;
                         if (getPropertyOfType(instanceType, name)) {
                             error(errorLocation, ts.Diagnostics.Cannot_find_name_0_Did_you_mean_the_instance_member_this_0, diagnosticName(nameArg));
@@ -38194,10 +39057,10 @@
         }
         function getEntityNameForExtendingInterface(node) {
             switch (node.kind) {
-                case 78:
-                case 202:
+                case 79:
+                case 204:
                     return node.parent ? getEntityNameForExtendingInterface(node.parent) : undefined;
-                case 224:
+                case 226:
                     if (ts.isEntityNameExpression(node.expression)) {
                         return node.expression;
                     }
@@ -38240,7 +39103,7 @@
             return name === "any" || name === "string" || name === "number" || name === "boolean" || name === "never" || name === "unknown";
         }
         function checkAndReportErrorForExportingPrimitiveType(errorLocation, name) {
-            if (isPrimitiveTypeName(name) && errorLocation.parent.kind === 271) {
+            if (isPrimitiveTypeName(name) && errorLocation.parent.kind === 273) {
                 error(errorLocation, ts.Diagnostics.Cannot_export_0_Only_local_declarations_can_be_exported_from_a_module, name);
                 return true;
             }
@@ -38314,7 +39177,7 @@
             if (result.flags & (16 | 1 | 67108864) && result.flags & 32) {
                 return;
             }
-            var declaration = (_a = result.declarations) === null || _a === void 0 ? void 0 : _a.find(function (d) { return ts.isBlockOrCatchScoped(d) || ts.isClassLike(d) || (d.kind === 256); });
+            var declaration = (_a = result.declarations) === null || _a === void 0 ? void 0 : _a.find(function (d) { return ts.isBlockOrCatchScoped(d) || ts.isClassLike(d) || (d.kind === 258); });
             if (declaration === undefined)
                 return ts.Debug.fail("checkResolvedBlockScopedVariable could not find block-scoped declaration");
             if (!(declaration.flags & 8388608) && !isBlockScopedNameDeclaredBeforeUse(declaration, errorLocation)) {
@@ -38345,13 +39208,13 @@
         }
         function getAnyImportSyntax(node) {
             switch (node.kind) {
-                case 261:
-                    return node;
                 case 263:
+                    return node;
+                case 265:
                     return node.parent;
-                case 264:
-                    return node.parent.parent;
                 case 266:
+                    return node.parent.parent;
+                case 268:
                     return node.parent.parent.parent;
                 default:
                     return undefined;
@@ -38361,22 +39224,22 @@
             return symbol.declarations && ts.findLast(symbol.declarations, isAliasSymbolDeclaration);
         }
         function isAliasSymbolDeclaration(node) {
-            return node.kind === 261
-                || node.kind === 260
-                || node.kind === 263 && !!node.name
-                || node.kind === 264
-                || node.kind === 270
+            return node.kind === 263
+                || node.kind === 262
+                || node.kind === 265 && !!node.name
                 || node.kind === 266
-                || node.kind === 271
-                || node.kind === 267 && ts.exportAssignmentIsAlias(node)
+                || node.kind === 272
+                || node.kind === 268
+                || node.kind === 273
+                || node.kind === 269 && ts.exportAssignmentIsAlias(node)
                 || ts.isBinaryExpression(node) && ts.getAssignmentDeclarationKind(node) === 2 && ts.exportAssignmentIsAlias(node)
                 || ts.isAccessExpression(node)
                     && ts.isBinaryExpression(node.parent)
                     && node.parent.left === node
-                    && node.parent.operatorToken.kind === 62
+                    && node.parent.operatorToken.kind === 63
                     && isAliasableOrJsExpression(node.parent.right)
-                || node.kind === 290
-                || node.kind === 289 && isAliasableOrJsExpression(node.initializer)
+                || node.kind === 292
+                || node.kind === 291 && isAliasableOrJsExpression(node.initializer)
                 || ts.isRequireVariableDeclaration(node);
         }
         function isAliasableOrJsExpression(e) {
@@ -38390,7 +39253,7 @@
                     ? resolveSymbol(getPropertyOfType(resolveExternalModuleTypeByLiteral(name), commonJSPropertyAccess.name.escapedText))
                     : undefined;
             }
-            if (ts.isVariableDeclaration(node) || node.moduleReference.kind === 273) {
+            if (ts.isVariableDeclaration(node) || node.moduleReference.kind === 275) {
                 var immediate = resolveExternalModuleName(node, ts.getExternalModuleRequireArgument(node) || ts.getExternalModuleImportEqualsDeclarationExpression(node));
                 var resolved_4 = resolveExternalModuleSymbol(immediate);
                 markSymbolOfAliasDeclarationIfTypeOnly(node, immediate, resolved_4, false);
@@ -38622,7 +39485,7 @@
                     if (localSymbol.declarations) {
                         ts.addRelatedInfo.apply(void 0, __spreadArray([diagnostic], ts.map(localSymbol.declarations, function (decl, index) {
                             return ts.createDiagnosticForNode(decl, index === 0 ? ts.Diagnostics._0_is_declared_here : ts.Diagnostics.and_here, declarationName);
-                        })));
+                        }), false));
                     }
                 }
             }
@@ -38702,7 +39565,7 @@
             return getTargetOfAliasLikeExpression(expression, dontRecursivelyResolve);
         }
         function getTargetOfAccessExpression(node, dontRecursivelyResolve) {
-            if (!(ts.isBinaryExpression(node.parent) && node.parent.left === node && node.parent.operatorToken.kind === 62)) {
+            if (!(ts.isBinaryExpression(node.parent) && node.parent.left === node && node.parent.operatorToken.kind === 63)) {
                 return undefined;
             }
             return getTargetOfAliasLikeExpression(node.parent.right, dontRecursivelyResolve);
@@ -38710,31 +39573,31 @@
         function getTargetOfAliasDeclaration(node, dontRecursivelyResolve) {
             if (dontRecursivelyResolve === void 0) { dontRecursivelyResolve = false; }
             switch (node.kind) {
-                case 261:
-                case 250:
-                    return getTargetOfImportEqualsDeclaration(node, dontRecursivelyResolve);
                 case 263:
+                case 252:
+                    return getTargetOfImportEqualsDeclaration(node, dontRecursivelyResolve);
+                case 265:
                     return getTargetOfImportClause(node, dontRecursivelyResolve);
-                case 264:
-                    return getTargetOfNamespaceImport(node, dontRecursivelyResolve);
-                case 270:
-                    return getTargetOfNamespaceExport(node, dontRecursivelyResolve);
                 case 266:
-                case 199:
+                    return getTargetOfNamespaceImport(node, dontRecursivelyResolve);
+                case 272:
+                    return getTargetOfNamespaceExport(node, dontRecursivelyResolve);
+                case 268:
+                case 201:
                     return getTargetOfImportSpecifier(node, dontRecursivelyResolve);
-                case 271:
+                case 273:
                     return getTargetOfExportSpecifier(node, 111551 | 788968 | 1920, dontRecursivelyResolve);
-                case 267:
-                case 217:
+                case 269:
+                case 219:
                     return getTargetOfExportAssignment(node, dontRecursivelyResolve);
-                case 260:
+                case 262:
                     return getTargetOfNamespaceExportDeclaration(node, dontRecursivelyResolve);
-                case 290:
+                case 292:
                     return resolveEntityName(node.name, 111551 | 788968 | 1920, true, dontRecursivelyResolve);
-                case 289:
+                case 291:
                     return getTargetOfPropertyAssignment(node, dontRecursivelyResolve);
-                case 203:
-                case 202:
+                case 205:
+                case 204:
                     return getTargetOfAccessExpression(node, dontRecursivelyResolve);
                 default:
                     return ts.Debug.fail();
@@ -38839,14 +39702,14 @@
             }
         }
         function getSymbolOfPartOfRightHandSideOfImportEquals(entityName, dontResolveAlias) {
-            if (entityName.kind === 78 && ts.isRightSideOfQualifiedNameOrPropertyAccess(entityName)) {
+            if (entityName.kind === 79 && ts.isRightSideOfQualifiedNameOrPropertyAccess(entityName)) {
                 entityName = entityName.parent;
             }
-            if (entityName.kind === 78 || entityName.parent.kind === 158) {
+            if (entityName.kind === 79 || entityName.parent.kind === 159) {
                 return resolveEntityName(entityName, 1920, false, dontResolveAlias);
             }
             else {
-                ts.Debug.assert(entityName.parent.kind === 261);
+                ts.Debug.assert(entityName.parent.kind === 263);
                 return resolveEntityName(entityName, 111551 | 788968 | 1920, false, dontResolveAlias);
             }
         }
@@ -38859,7 +39722,7 @@
             }
             var namespaceMeaning = 1920 | (ts.isInJSFile(name) ? meaning & 111551 : 0);
             var symbol;
-            if (name.kind === 78) {
+            if (name.kind === 79) {
                 var message = meaning === namespaceMeaning || ts.nodeIsSynthesized(name) ? ts.Diagnostics.Cannot_find_namespace_0 : getCannotFindNameDiagnosticForName(ts.getFirstIdentifier(name));
                 var symbolFromJSPrototype = ts.isInJSFile(name) && !ts.nodeIsSynthesized(name) ? resolveEntityNameFromAssignmentDeclaration(name, meaning) : undefined;
                 symbol = getMergedSymbol(resolveName(location || name, name.escapedText, meaning, ignoreErrors || symbolFromJSPrototype ? undefined : message, name, true));
@@ -38867,9 +39730,9 @@
                     return getMergedSymbol(symbolFromJSPrototype);
                 }
             }
-            else if (name.kind === 158 || name.kind === 202) {
-                var left = name.kind === 158 ? name.left : name.expression;
-                var right = name.kind === 158 ? name.right : name.name;
+            else if (name.kind === 159 || name.kind === 204) {
+                var left = name.kind === 159 ? name.left : name.expression;
+                var right = name.kind === 159 ? name.right : name.name;
                 var namespace = resolveEntityName(left, namespaceMeaning, ignoreErrors, false, location);
                 if (!namespace || ts.nodeIsMissing(right)) {
                     return undefined;
@@ -38908,7 +39771,7 @@
                 throw ts.Debug.assertNever(name, "Unknown entity name kind.");
             }
             ts.Debug.assert((ts.getCheckFlags(symbol) & 1) === 0, "Should never get an instantiated symbol here.");
-            if (!ts.nodeIsSynthesized(name) && ts.isEntityName(name) && (symbol.flags & 2097152 || name.parent.kind === 267)) {
+            if (!ts.nodeIsSynthesized(name) && ts.isEntityName(name) && (symbol.flags & 2097152 || name.parent.kind === 269)) {
                 markSymbolOfAliasDeclarationIfTypeOnly(ts.getAliasDeclarationFromName(name), symbol, undefined, true);
             }
             return (symbol.flags & meaning) || dontResolveAlias ? symbol : resolveAlias(symbol);
@@ -39113,7 +39976,7 @@
         function resolveESModuleSymbol(moduleSymbol, referencingLocation, dontResolveAlias, suppressInteropError) {
             var symbol = resolveExternalModuleSymbol(moduleSymbol, dontResolveAlias);
             if (!dontResolveAlias && symbol) {
-                if (!suppressInteropError && !(symbol.flags & (1536 | 3)) && !ts.getDeclarationOfKind(symbol, 298)) {
+                if (!suppressInteropError && !(symbol.flags & (1536 | 3)) && !ts.getDeclarationOfKind(symbol, 300)) {
                     var compilerOptionName = moduleKind >= ts.ModuleKind.ES2015
                         ? "allowSyntheticDefaultImports"
                         : "esModuleInterop";
@@ -39145,7 +40008,7 @@
                             if (symbol.exports)
                                 result.exports = new ts.Map(symbol.exports);
                             var resolvedModuleType = resolveStructuredTypeMembers(moduleType);
-                            result.type = createAnonymousType(result, resolvedModuleType.members, ts.emptyArray, ts.emptyArray, resolvedModuleType.stringIndexInfo, resolvedModuleType.numberIndexInfo);
+                            result.type = createAnonymousType(result, resolvedModuleType.members, ts.emptyArray, ts.emptyArray, resolvedModuleType.indexInfos);
                             return result;
                         }
                     }
@@ -39170,6 +40033,23 @@
             }
             return exports;
         }
+        function forEachExportAndPropertyOfModule(moduleSymbol, cb) {
+            var exports = getExportsOfModule(moduleSymbol);
+            exports.forEach(function (symbol, key) {
+                if (!isReservedMemberName(key)) {
+                    cb(symbol, key);
+                }
+            });
+            var exportEquals = resolveExternalModuleSymbol(moduleSymbol);
+            if (exportEquals !== moduleSymbol) {
+                var type = getTypeOfSymbol(exportEquals);
+                if (shouldTreatPropertiesOfExternalModuleAsExports(type)) {
+                    getPropertiesOfType(type).forEach(function (symbol) {
+                        cb(symbol, symbol.escapedName);
+                    });
+                }
+            }
+        }
         function tryGetMemberInModuleExports(memberName, moduleSymbol) {
             var symbolTable = getExportsOfModule(moduleSymbol);
             if (symbolTable) {
@@ -39339,7 +40219,7 @@
                             }
                         });
                     }) : undefined;
-                var res = firstVariableMatch ? __spreadArray(__spreadArray([firstVariableMatch], additionalContainers), [container]) : __spreadArray(__spreadArray([], additionalContainers), [container]);
+                var res = firstVariableMatch ? __spreadArray(__spreadArray([firstVariableMatch], additionalContainers, true), [container], false) : __spreadArray(__spreadArray([], additionalContainers, true), [container], false);
                 res = ts.append(res, objectLiteralContainer);
                 res = ts.addRange(res, reexportContainers);
                 return res;
@@ -39348,7 +40228,7 @@
                 if (!ts.isAmbientModule(d) && d.parent && hasNonGlobalAugmentationExternalModuleSymbol(d.parent)) {
                     return getSymbolOfNode(d.parent);
                 }
-                if (ts.isClassExpression(d) && ts.isBinaryExpression(d.parent) && d.parent.operatorToken.kind === 62 && ts.isAccessExpression(d.parent.left) && ts.isEntityNameExpression(d.parent.left.expression)) {
+                if (ts.isClassExpression(d) && ts.isBinaryExpression(d.parent) && d.parent.operatorToken.kind === 63 && ts.isAccessExpression(d.parent.left) && ts.isEntityNameExpression(d.parent.left.expression)) {
                     if (ts.isModuleExportsAccessExpression(d.parent.left) || ts.isExportsIdentifier(d.parent.left.expression)) {
                         return getSymbolOfNode(ts.getSourceFileOfNode(d));
                     }
@@ -39411,7 +40291,7 @@
             var members = node.members;
             for (var _i = 0, members_3 = members; _i < members_3.length; _i++) {
                 var member = members_3[_i];
-                if (member.kind === 167 && ts.nodeIsPresent(member.body)) {
+                if (member.kind === 169 && ts.nodeIsPresent(member.body)) {
                     return member;
                 }
             }
@@ -39435,12 +40315,6 @@
             type.objectFlags = objectFlags;
             return type;
         }
-        function createBooleanType(trueFalseTypes) {
-            var type = getUnionType(trueFalseTypes);
-            type.flags |= 16;
-            type.intrinsicName = "boolean";
-            return type;
-        }
         function createObjectType(objectFlags, symbol) {
             var type = createType(524288);
             type.objectFlags = objectFlags;
@@ -39449,12 +40323,11 @@
             type.properties = undefined;
             type.callSignatures = undefined;
             type.constructSignatures = undefined;
-            type.stringIndexInfo = undefined;
-            type.numberIndexInfo = undefined;
+            type.indexInfos = undefined;
             return type;
         }
         function createTypeofType() {
-            return getUnionType(ts.arrayFrom(typeofEQFacts.keys(), getLiteralType));
+            return getUnionType(ts.arrayFrom(typeofEQFacts.keys(), getStringLiteralType));
         }
         function createTypeParameter(symbol) {
             var type = createType(262144);
@@ -39483,20 +40356,19 @@
             var index = getIndexSymbolFromSymbolTable(members);
             return index ? ts.concatenate(result, [index]) : result;
         }
-        function setStructuredTypeMembers(type, members, callSignatures, constructSignatures, stringIndexInfo, numberIndexInfo) {
+        function setStructuredTypeMembers(type, members, callSignatures, constructSignatures, indexInfos) {
             var resolved = type;
             resolved.members = members;
             resolved.properties = ts.emptyArray;
             resolved.callSignatures = callSignatures;
             resolved.constructSignatures = constructSignatures;
-            resolved.stringIndexInfo = stringIndexInfo;
-            resolved.numberIndexInfo = numberIndexInfo;
+            resolved.indexInfos = indexInfos;
             if (members !== emptySymbols)
                 resolved.properties = getNamedMembers(members);
             return resolved;
         }
-        function createAnonymousType(symbol, members, callSignatures, constructSignatures, stringIndexInfo, numberIndexInfo) {
-            return setStructuredTypeMembers(createObjectType(16, symbol), members, callSignatures, constructSignatures, stringIndexInfo, numberIndexInfo);
+        function createAnonymousType(symbol, members, callSignatures, constructSignatures, indexInfos) {
+            return setStructuredTypeMembers(createObjectType(16, symbol), members, callSignatures, constructSignatures, indexInfos);
         }
         function getResolvedTypeWithoutAbstractConstructSignatures(type) {
             if (type.constructSignatures.length === 0)
@@ -39506,7 +40378,7 @@
             var constructSignatures = ts.filter(type.constructSignatures, function (signature) { return !(signature.flags & 4); });
             if (type.constructSignatures === constructSignatures)
                 return type;
-            var typeCopy = createAnonymousType(type.symbol, type.members, type.callSignatures, ts.some(constructSignatures) ? constructSignatures : ts.emptyArray, type.stringIndexInfo, type.numberIndexInfo);
+            var typeCopy = createAnonymousType(type.symbol, type.members, type.callSignatures, ts.some(constructSignatures) ? constructSignatures : ts.emptyArray, type.indexInfos);
             type.objectTypeWithoutAbstractConstructSignatures = typeCopy;
             typeCopy.objectTypeWithoutAbstractConstructSignatures = typeCopy;
             return typeCopy;
@@ -39515,31 +40387,31 @@
             var result;
             var _loop_8 = function (location) {
                 if (location.locals && !isGlobalSourceFile(location)) {
-                    if (result = callback(location.locals, undefined, true)) {
+                    if (result = callback(location.locals, undefined, true, location)) {
                         return { value: result };
                     }
                 }
                 switch (location.kind) {
-                    case 298:
+                    case 300:
                         if (!ts.isExternalOrCommonJsModule(location)) {
                             break;
                         }
-                    case 257:
+                    case 259:
                         var sym = getSymbolOfNode(location);
-                        if (result = callback((sym === null || sym === void 0 ? void 0 : sym.exports) || emptySymbols, undefined, true)) {
+                        if (result = callback((sym === null || sym === void 0 ? void 0 : sym.exports) || emptySymbols, undefined, true, location)) {
                             return { value: result };
                         }
                         break;
-                    case 253:
-                    case 222:
-                    case 254:
+                    case 255:
+                    case 224:
+                    case 256:
                         var table_1;
                         (getSymbolOfNode(location).members || emptySymbols).forEach(function (memberSymbol, key) {
                             if (memberSymbol.flags & (788968 & ~67108864)) {
                                 (table_1 || (table_1 = ts.createSymbolTable())).set(key, memberSymbol);
                             }
                         });
-                        if (table_1 && (result = callback(table_1))) {
+                        if (table_1 && (result = callback(table_1, undefined, false, location))) {
                             return { value: result };
                         }
                         break;
@@ -39560,12 +40432,21 @@
             if (!(symbol && !isPropertyOrMethodDeclarationSymbol(symbol))) {
                 return undefined;
             }
+            var links = getSymbolLinks(symbol);
+            var cache = (links.accessibleChainCache || (links.accessibleChainCache = new ts.Map()));
+            var firstRelevantLocation = forEachSymbolTableInScope(enclosingDeclaration, function (_, __, ___, node) { return node; });
+            var key = (useOnlyExternalAliasing ? 0 : 1) + "|" + (firstRelevantLocation && getNodeId(firstRelevantLocation)) + "|" + meaning;
+            if (cache.has(key)) {
+                return cache.get(key);
+            }
             var id = getSymbolId(symbol);
             var visitedSymbolTables = visitedSymbolTablesMap.get(id);
             if (!visitedSymbolTables) {
                 visitedSymbolTablesMap.set(id, visitedSymbolTables = []);
             }
-            return forEachSymbolTableInScope(enclosingDeclaration, getAccessibleSymbolChainFromSymbolTable);
+            var result = forEachSymbolTableInScope(enclosingDeclaration, getAccessibleSymbolChainFromSymbolTable);
+            cache.set(key, result);
+            return result;
             function getAccessibleSymbolChainFromSymbolTable(symbols, ignoreQualification, isLocalNameLookup) {
                 if (!ts.pushIfUnique(visitedSymbolTables, symbols)) {
                     return undefined;
@@ -39594,7 +40475,7 @@
                         && !(ts.isUMDExportSymbol(symbolFromSymbolTable) && enclosingDeclaration && ts.isExternalModule(ts.getSourceFileOfNode(enclosingDeclaration)))
                         && (!useOnlyExternalAliasing || ts.some(symbolFromSymbolTable.declarations, ts.isExternalModuleImportEqualsDeclaration))
                         && (isLocalNameLookup ? !ts.some(symbolFromSymbolTable.declarations, ts.isNamespaceReexportDeclaration) : true)
-                        && (ignoreQualification || !ts.getDeclarationOfKind(symbolFromSymbolTable, 271))) {
+                        && (ignoreQualification || !ts.getDeclarationOfKind(symbolFromSymbolTable, 273))) {
                         var resolvedImportedSymbol = resolveAlias(symbolFromSymbolTable);
                         var candidate = getCandidateListForSymbol(symbolFromSymbolTable, resolvedImportedSymbol, ignoreQualification);
                         if (candidate) {
@@ -39630,7 +40511,7 @@
                 if (symbolFromSymbolTable === symbol) {
                     return true;
                 }
-                symbolFromSymbolTable = (symbolFromSymbolTable.flags & 2097152 && !ts.getDeclarationOfKind(symbolFromSymbolTable, 271)) ? resolveAlias(symbolFromSymbolTable) : symbolFromSymbolTable;
+                symbolFromSymbolTable = (symbolFromSymbolTable.flags & 2097152 && !ts.getDeclarationOfKind(symbolFromSymbolTable, 273)) ? resolveAlias(symbolFromSymbolTable) : symbolFromSymbolTable;
                 if (symbolFromSymbolTable.flags & meaning) {
                     qualify = true;
                     return true;
@@ -39644,10 +40525,10 @@
                 for (var _i = 0, _a = symbol.declarations; _i < _a.length; _i++) {
                     var declaration = _a[_i];
                     switch (declaration.kind) {
-                        case 164:
-                        case 166:
-                        case 168:
-                        case 169:
+                        case 165:
+                        case 167:
+                        case 170:
+                        case 171:
                             continue;
                         default:
                             return false;
@@ -39747,14 +40628,14 @@
             return node && getSymbolOfNode(node);
         }
         function hasExternalModuleSymbol(declaration) {
-            return ts.isAmbientModule(declaration) || (declaration.kind === 298 && ts.isExternalOrCommonJsModule(declaration));
+            return ts.isAmbientModule(declaration) || (declaration.kind === 300 && ts.isExternalOrCommonJsModule(declaration));
         }
         function hasNonGlobalAugmentationExternalModuleSymbol(declaration) {
-            return ts.isModuleWithStringLiteralName(declaration) || (declaration.kind === 298 && ts.isExternalOrCommonJsModule(declaration));
+            return ts.isModuleWithStringLiteralName(declaration) || (declaration.kind === 300 && ts.isExternalOrCommonJsModule(declaration));
         }
         function hasVisibleDeclarations(symbol, shouldComputeAliasToMakeVisible) {
             var aliasesToMakeVisible;
-            if (!ts.every(ts.filter(symbol.declarations, function (d) { return d.kind !== 78; }), getIsDeclarationVisible)) {
+            if (!ts.every(ts.filter(symbol.declarations, function (d) { return d.kind !== 79; }), getIsDeclarationVisible)) {
                 return undefined;
             }
             return { accessibility: 0, aliasesToMakeVisible: aliasesToMakeVisible };
@@ -39799,13 +40680,13 @@
         }
         function isEntityNameVisible(entityName, enclosingDeclaration) {
             var meaning;
-            if (entityName.parent.kind === 177 ||
+            if (entityName.parent.kind === 179 ||
                 ts.isExpressionWithTypeArgumentsInClassExtendsClause(entityName.parent) ||
-                entityName.parent.kind === 159) {
+                entityName.parent.kind === 160) {
                 meaning = 111551 | 1048576;
             }
-            else if (entityName.kind === 158 || entityName.kind === 202 ||
-                entityName.parent.kind === 261) {
+            else if (entityName.kind === 159 || entityName.kind === 204 ||
+                entityName.parent.kind === 263) {
                 meaning = 1920;
             }
             else {
@@ -39841,7 +40722,7 @@
             return writer ? symbolToStringWorker(writer).getText() : ts.usingSingleLineStringWriter(symbolToStringWorker);
             function symbolToStringWorker(writer) {
                 var entity = builder(symbol, meaning, enclosingDeclaration, nodeFlags);
-                var printer = (enclosingDeclaration === null || enclosingDeclaration === void 0 ? void 0 : enclosingDeclaration.kind) === 298 ? ts.createPrinter({ removeComments: true, neverAsciiEscape: true }) : ts.createPrinter({ removeComments: true });
+                var printer = (enclosingDeclaration === null || enclosingDeclaration === void 0 ? void 0 : enclosingDeclaration.kind) === 300 ? ts.createPrinter({ removeComments: true, neverAsciiEscape: true }) : ts.createPrinter({ removeComments: true });
                 var sourceFile = enclosingDeclaration && ts.getSourceFileOfNode(enclosingDeclaration);
                 printer.writeNode(4, entity, sourceFile, writer);
                 return writer;
@@ -39853,10 +40734,10 @@
             function signatureToStringWorker(writer) {
                 var sigOutput;
                 if (flags & 262144) {
-                    sigOutput = kind === 1 ? 176 : 175;
+                    sigOutput = kind === 1 ? 178 : 177;
                 }
                 else {
-                    sigOutput = kind === 1 ? 171 : 170;
+                    sigOutput = kind === 1 ? 173 : 172;
                 }
                 var sig = nodeBuilder.signatureToSignatureDeclaration(signature, sigOutput, enclosingDeclaration, toNodeBuilderFlags(flags) | 70221824 | 512);
                 var printer = ts.createPrinter({ removeComments: true, omitTrailingSemicolon: true });
@@ -39910,8 +40791,8 @@
                 typeToTypeNode: function (type, enclosingDeclaration, flags, tracker) {
                     return withContext(enclosingDeclaration, flags, tracker, function (context) { return typeToTypeNodeHelper(type, context); });
                 },
-                indexInfoToIndexSignatureDeclaration: function (indexInfo, kind, enclosingDeclaration, flags, tracker) {
-                    return withContext(enclosingDeclaration, flags, tracker, function (context) { return indexInfoToIndexSignatureDeclarationHelper(indexInfo, kind, context, undefined); });
+                indexInfoToIndexSignatureDeclaration: function (indexInfo, enclosingDeclaration, flags, tracker) {
+                    return withContext(enclosingDeclaration, flags, tracker, function (context) { return indexInfoToIndexSignatureDeclarationHelper(indexInfo, context, undefined); });
                 },
                 signatureToSignatureDeclaration: function (signature, kind, enclosingDeclaration, flags, tracker) {
                     return withContext(enclosingDeclaration, flags, tracker, function (context) { return signatureToSignatureDeclarationHelper(signature, kind, context); });
@@ -39941,9 +40822,8 @@
                 var context = {
                     enclosingDeclaration: enclosingDeclaration,
                     flags: flags || 0,
-                    tracker: tracker && tracker.trackSymbol ? tracker : { trackSymbol: ts.noop, moduleResolverHost: flags & 134217728 ? {
+                    tracker: tracker && tracker.trackSymbol ? tracker : { trackSymbol: function () { return false; }, moduleResolverHost: flags & 134217728 ? {
                             getCommonSourceDirectory: !!host.getCommonSourceDirectory ? function () { return host.getCommonSourceDirectory(); } : function () { return ""; },
-                            getSourceFiles: function () { return host.getSourceFiles(); },
                             getCurrentDirectory: function () { return host.getCurrentDirectory(); },
                             getSymlinkCache: ts.maybeBind(host, host.getSymlinkCache),
                             useCaseSensitiveFileNames: ts.maybeBind(host, host.useCaseSensitiveFileNames),
@@ -39954,17 +40834,46 @@
                             getFileIncludeReasons: function () { return host.getFileIncludeReasons(); },
                         } : undefined },
                     encounteredError: false,
+                    reportedDiagnostic: false,
                     visitedTypes: undefined,
                     symbolDepth: undefined,
                     inferTypeParameters: undefined,
                     approximateLength: 0
                 };
+                context.tracker = wrapSymbolTrackerToReportForContext(context, context.tracker);
                 var resultingNode = cb(context);
                 if (context.truncating && context.flags & 1) {
                     (_b = (_a = context.tracker) === null || _a === void 0 ? void 0 : _a.reportTruncationError) === null || _b === void 0 ? void 0 : _b.call(_a);
                 }
                 return context.encounteredError ? undefined : resultingNode;
             }
+            function wrapSymbolTrackerToReportForContext(context, tracker) {
+                var oldTrackSymbol = tracker.trackSymbol;
+                return __assign(__assign({}, tracker), { reportCyclicStructureError: wrapReportedDiagnostic(tracker.reportCyclicStructureError), reportInaccessibleThisError: wrapReportedDiagnostic(tracker.reportInaccessibleThisError), reportInaccessibleUniqueSymbolError: wrapReportedDiagnostic(tracker.reportInaccessibleUniqueSymbolError), reportLikelyUnsafeImportRequiredError: wrapReportedDiagnostic(tracker.reportLikelyUnsafeImportRequiredError), reportNonlocalAugmentation: wrapReportedDiagnostic(tracker.reportNonlocalAugmentation), reportPrivateInBaseOfClassExpression: wrapReportedDiagnostic(tracker.reportPrivateInBaseOfClassExpression), reportNonSerializableProperty: wrapReportedDiagnostic(tracker.reportNonSerializableProperty), trackSymbol: oldTrackSymbol && (function () {
+                        var args = [];
+                        for (var _i = 0; _i < arguments.length; _i++) {
+                            args[_i] = arguments[_i];
+                        }
+                        var result = oldTrackSymbol.apply(void 0, args);
+                        if (result) {
+                            context.reportedDiagnostic = true;
+                        }
+                        return result;
+                    }) });
+                function wrapReportedDiagnostic(method) {
+                    if (!method) {
+                        return method;
+                    }
+                    return (function () {
+                        var args = [];
+                        for (var _i = 0; _i < arguments.length; _i++) {
+                            args[_i] = arguments[_i];
+                        }
+                        context.reportedDiagnostic = true;
+                        return method.apply(void 0, args);
+                    });
+                }
+            }
             function checkTruncationLength(context) {
                 if (context.truncating)
                     return context.truncating;
@@ -39982,33 +40891,33 @@
                         return undefined;
                     }
                     context.approximateLength += 3;
-                    return ts.factory.createKeywordTypeNode(128);
+                    return ts.factory.createKeywordTypeNode(129);
                 }
                 if (!(context.flags & 536870912)) {
                     type = getReducedType(type);
                 }
                 if (type.flags & 1) {
                     context.approximateLength += 3;
-                    return ts.factory.createKeywordTypeNode(type === intrinsicMarkerType ? 136 : 128);
+                    return ts.factory.createKeywordTypeNode(type === intrinsicMarkerType ? 137 : 129);
                 }
                 if (type.flags & 2) {
-                    return ts.factory.createKeywordTypeNode(152);
+                    return ts.factory.createKeywordTypeNode(153);
                 }
                 if (type.flags & 4) {
                     context.approximateLength += 6;
-                    return ts.factory.createKeywordTypeNode(147);
+                    return ts.factory.createKeywordTypeNode(148);
                 }
                 if (type.flags & 8) {
                     context.approximateLength += 6;
-                    return ts.factory.createKeywordTypeNode(144);
+                    return ts.factory.createKeywordTypeNode(145);
                 }
                 if (type.flags & 64) {
                     context.approximateLength += 6;
-                    return ts.factory.createKeywordTypeNode(155);
+                    return ts.factory.createKeywordTypeNode(156);
                 }
-                if (type.flags & 16) {
+                if (type.flags & 16 && !type.aliasSymbol) {
                     context.approximateLength += 7;
-                    return ts.factory.createKeywordTypeNode(131);
+                    return ts.factory.createKeywordTypeNode(132);
                 }
                 if (type.flags & 1024 && !(type.flags & 1048576)) {
                     var parentSymbol = getParentOfSymbol(type.symbol);
@@ -40062,15 +40971,15 @@
                         }
                     }
                     context.approximateLength += 13;
-                    return ts.factory.createTypeOperatorNode(151, ts.factory.createKeywordTypeNode(148));
+                    return ts.factory.createTypeOperatorNode(152, ts.factory.createKeywordTypeNode(149));
                 }
                 if (type.flags & 16384) {
                     context.approximateLength += 4;
-                    return ts.factory.createKeywordTypeNode(113);
+                    return ts.factory.createKeywordTypeNode(114);
                 }
                 if (type.flags & 32768) {
                     context.approximateLength += 9;
-                    return ts.factory.createKeywordTypeNode(150);
+                    return ts.factory.createKeywordTypeNode(151);
                 }
                 if (type.flags & 65536) {
                     context.approximateLength += 4;
@@ -40078,15 +40987,15 @@
                 }
                 if (type.flags & 131072) {
                     context.approximateLength += 5;
-                    return ts.factory.createKeywordTypeNode(141);
+                    return ts.factory.createKeywordTypeNode(142);
                 }
                 if (type.flags & 4096) {
                     context.approximateLength += 6;
-                    return ts.factory.createKeywordTypeNode(148);
+                    return ts.factory.createKeywordTypeNode(149);
                 }
                 if (type.flags & 67108864) {
                     context.approximateLength += 6;
-                    return ts.factory.createKeywordTypeNode(145);
+                    return ts.factory.createKeywordTypeNode(146);
                 }
                 if (isThisTypeParameter(type)) {
                     if (context.flags & 4194304) {
@@ -40154,7 +41063,7 @@
                     var indexedType = type.type;
                     context.approximateLength += 6;
                     var indexTypeNode = typeToTypeNodeHelper(indexedType, context);
-                    return ts.factory.createTypeOperatorNode(138, indexTypeNode);
+                    return ts.factory.createTypeOperatorNode(139, indexTypeNode);
                 }
                 if (type.flags & 134217728) {
                     var texts_1 = type.texts;
@@ -40175,6 +41084,13 @@
                     return ts.factory.createIndexedAccessTypeNode(objectTypeNode, indexTypeNode);
                 }
                 if (type.flags & 16777216) {
+                    return visitAndTransformType(type, function (type) { return conditionalTypeToTypeNode(type); });
+                }
+                if (type.flags & 33554432) {
+                    return typeToTypeNodeHelper(type.baseType, context);
+                }
+                return ts.Debug.fail("Should be unreachable.");
+                function conditionalTypeToTypeNode(type) {
                     var checkTypeNode = typeToTypeNodeHelper(type.checkType, context);
                     var saveInferTypeParameters = context.inferTypeParameters;
                     context.inferTypeParameters = type.root.inferTypeParameters;
@@ -40185,10 +41101,6 @@
                     context.approximateLength += 15;
                     return ts.factory.createConditionalTypeNode(checkTypeNode, extendsTypeNode, trueTypeNode, falseTypeNode);
                 }
-                if (type.flags & 33554432) {
-                    return typeToTypeNodeHelper(type.baseType, context);
-                }
-                return ts.Debug.fail("Should be unreachable.");
                 function typeToTypeNodeOrCircularityElision(type) {
                     var _a, _b, _c;
                     if (type.flags & 1048576) {
@@ -40209,14 +41121,14 @@
                     var questionToken = type.declaration.questionToken ? ts.factory.createToken(type.declaration.questionToken.kind) : undefined;
                     var appropriateConstraintTypeNode;
                     if (isMappedTypeWithKeyofConstraintDeclaration(type)) {
-                        appropriateConstraintTypeNode = ts.factory.createTypeOperatorNode(138, typeToTypeNodeHelper(getModifiersTypeFromMappedType(type), context));
+                        appropriateConstraintTypeNode = ts.factory.createTypeOperatorNode(139, typeToTypeNodeHelper(getModifiersTypeFromMappedType(type), context));
                     }
                     else {
                         appropriateConstraintTypeNode = typeToTypeNodeHelper(getConstraintTypeFromMappedType(type), context);
                     }
                     var typeParameterNode = typeParameterToDeclarationWithConstraint(getTypeParameterFromMappedType(type), context, appropriateConstraintTypeNode);
                     var nameTypeNode = type.declaration.nameType ? typeToTypeNodeHelper(getNameTypeFromMappedType(type), context) : undefined;
-                    var templateTypeNode = typeToTypeNodeHelper(getTemplateTypeFromMappedType(type), context);
+                    var templateTypeNode = typeToTypeNodeHelper(removeMissingType(getTemplateTypeFromMappedType(type), !!(getMappedTypeModifiers(type) & 4)), context);
                     var mappedTypeNode = ts.factory.createMappedTypeNode(readonlyToken, typeParameterNode, nameTypeNode, questionToken, templateTypeNode);
                     context.approximateLength += 10;
                     return ts.setEmitFlags(mappedTypeNode, 1);
@@ -40232,7 +41144,7 @@
                         }
                         else if (symbol.flags & 32
                             && !getBaseTypeVariableOfClass(symbol)
-                            && !(symbol.valueDeclaration && symbol.valueDeclaration.kind === 222 && context.flags & 2048) ||
+                            && !(symbol.valueDeclaration && symbol.valueDeclaration.kind === 224 && context.flags & 2048) ||
                             symbol.flags & (384 | 512) ||
                             shouldWriteTypeOfFunctionSymbol()) {
                             return symbolToTypeNode(symbol, context, isInstanceType);
@@ -40256,11 +41168,11 @@
                     function shouldWriteTypeOfFunctionSymbol() {
                         var _a;
                         var isStaticMethodSymbol = !!(symbol.flags & 8192) &&
-                            ts.some(symbol.declarations, function (declaration) { return ts.hasSyntacticModifier(declaration, 32); });
+                            ts.some(symbol.declarations, function (declaration) { return ts.isStatic(declaration); });
                         var isNonLocalFunctionSymbol = !!(symbol.flags & 16) &&
                             (symbol.parent ||
                                 ts.forEach(symbol.declarations, function (declaration) {
-                                    return declaration.parent.kind === 298 || declaration.parent.kind === 258;
+                                    return declaration.parent.kind === 300 || declaration.parent.kind === 260;
                                 }));
                         if (isStaticMethodSymbol || isNonLocalFunctionSymbol) {
                             return (!!(context.flags & 4096) || ((_a = context.visitedTypes) === null || _a === void 0 ? void 0 : _a.has(typeId))) &&
@@ -40269,17 +41181,32 @@
                     }
                 }
                 function visitAndTransformType(type, transform) {
+                    var _a, _b;
                     var typeId = type.id;
                     var isConstructorObject = ts.getObjectFlags(type) & 16 && type.symbol && type.symbol.flags & 32;
                     var id = ts.getObjectFlags(type) & 4 && type.node ? "N" + getNodeId(type.node) :
-                        type.symbol ? (isConstructorObject ? "+" : "") + getSymbolId(type.symbol) :
-                            undefined;
+                        type.flags & 16777216 ? "N" + getNodeId(type.root.node) :
+                            type.symbol ? (isConstructorObject ? "+" : "") + getSymbolId(type.symbol) :
+                                undefined;
                     if (!context.visitedTypes) {
                         context.visitedTypes = new ts.Set();
                     }
                     if (id && !context.symbolDepth) {
                         context.symbolDepth = new ts.Map();
                     }
+                    var links = context.enclosingDeclaration && getNodeLinks(context.enclosingDeclaration);
+                    var key = getTypeId(type) + "|" + context.flags;
+                    if (links) {
+                        links.serializedTypes || (links.serializedTypes = new ts.Map());
+                    }
+                    var cachedResult = (_a = links === null || links === void 0 ? void 0 : links.serializedTypes) === null || _a === void 0 ? void 0 : _a.get(key);
+                    if (cachedResult) {
+                        if (cachedResult.truncating) {
+                            context.truncating = true;
+                        }
+                        context.approximateLength += cachedResult.addedLength;
+                        return deepCloneOrReuseNode(cachedResult);
+                    }
                     var depth;
                     if (id) {
                         depth = context.symbolDepth.get(id) || 0;
@@ -40289,31 +41216,46 @@
                         context.symbolDepth.set(id, depth + 1);
                     }
                     context.visitedTypes.add(typeId);
+                    var startLength = context.approximateLength;
                     var result = transform(type);
+                    var addedLength = context.approximateLength - startLength;
+                    if (!context.reportedDiagnostic && !context.encounteredError) {
+                        if (context.truncating) {
+                            result.truncating = true;
+                        }
+                        result.addedLength = addedLength;
+                        (_b = links === null || links === void 0 ? void 0 : links.serializedTypes) === null || _b === void 0 ? void 0 : _b.set(key, result);
+                    }
                     context.visitedTypes.delete(typeId);
                     if (id) {
                         context.symbolDepth.set(id, depth);
                     }
                     return result;
+                    function deepCloneOrReuseNode(node) {
+                        if (!ts.nodeIsSynthesized(node) && ts.getParseTreeNode(node) === node) {
+                            return node;
+                        }
+                        return ts.setTextRange(ts.factory.cloneNode(ts.visitEachChild(node, deepCloneOrReuseNode, ts.nullTransformationContext)), node);
+                    }
                 }
                 function createTypeNodeFromObjectType(type) {
                     if (isGenericMappedType(type) || type.containsError) {
                         return createMappedTypeNodeFromType(type);
                     }
                     var resolved = resolveStructuredTypeMembers(type);
-                    if (!resolved.properties.length && !resolved.stringIndexInfo && !resolved.numberIndexInfo) {
+                    if (!resolved.properties.length && !resolved.indexInfos.length) {
                         if (!resolved.callSignatures.length && !resolved.constructSignatures.length) {
                             context.approximateLength += 2;
                             return ts.setEmitFlags(ts.factory.createTypeLiteralNode(undefined), 1);
                         }
                         if (resolved.callSignatures.length === 1 && !resolved.constructSignatures.length) {
                             var signature = resolved.callSignatures[0];
-                            var signatureNode = signatureToSignatureDeclarationHelper(signature, 175, context);
+                            var signatureNode = signatureToSignatureDeclarationHelper(signature, 177, context);
                             return signatureNode;
                         }
                         if (resolved.constructSignatures.length === 1 && !resolved.callSignatures.length) {
                             var signature = resolved.constructSignatures[0];
-                            var signatureNode = signatureToSignatureDeclarationHelper(signature, 176, context);
+                            var signatureNode = signatureToSignatureDeclarationHelper(signature, 178, context);
                             return signatureNode;
                         }
                     }
@@ -40322,8 +41264,7 @@
                         var types = ts.map(abstractSignatures, getOrCreateTypeFromSignature);
                         var typeElementCount = resolved.callSignatures.length +
                             (resolved.constructSignatures.length - abstractSignatures.length) +
-                            (resolved.stringIndexInfo ? 1 : 0) +
-                            (resolved.numberIndexInfo ? 1 : 0) +
+                            resolved.indexInfos.length +
                             (context.flags & 2048 ?
                                 ts.countWhere(resolved.properties, function (p) { return !(p.flags & 4194304); }) :
                                 ts.length(resolved.properties));
@@ -40350,9 +41291,10 @@
                         }
                         var elementType = typeToTypeNodeHelper(typeArguments[0], context);
                         var arrayType = ts.factory.createArrayTypeNode(elementType);
-                        return type.target === globalArrayType ? arrayType : ts.factory.createTypeOperatorNode(142, arrayType);
+                        return type.target === globalArrayType ? arrayType : ts.factory.createTypeOperatorNode(143, arrayType);
                     }
                     else if (type.target.objectFlags & 8) {
+                        typeArguments = ts.sameMap(typeArguments, function (t, i) { return removeMissingType(t, !!(type.target.elementFlags[i] & 2)); });
                         if (typeArguments.length > 0) {
                             var arity = getTypeReferenceArity(type);
                             var tupleConstituentNodes = mapToTypeNodes(typeArguments.slice(0, arity), context);
@@ -40374,12 +41316,12 @@
                                     }
                                 }
                                 var tupleTypeNode = ts.setEmitFlags(ts.factory.createTupleTypeNode(tupleConstituentNodes), 1);
-                                return type.target.readonly ? ts.factory.createTypeOperatorNode(142, tupleTypeNode) : tupleTypeNode;
+                                return type.target.readonly ? ts.factory.createTypeOperatorNode(143, tupleTypeNode) : tupleTypeNode;
                             }
                         }
                         if (context.encounteredError || (context.flags & 524288)) {
                             var tupleTypeNode = ts.setEmitFlags(ts.factory.createTupleTypeNode([]), 1);
-                            return type.target.readonly ? ts.factory.createTypeOperatorNode(142, tupleTypeNode) : tupleTypeNode;
+                            return type.target.readonly ? ts.factory.createTypeOperatorNode(143, tupleTypeNode) : tupleTypeNode;
                         }
                         context.encounteredError = true;
                         return undefined;
@@ -40479,34 +41421,25 @@
                     var typeElements = [];
                     for (var _i = 0, _a = resolvedType.callSignatures; _i < _a.length; _i++) {
                         var signature = _a[_i];
-                        typeElements.push(signatureToSignatureDeclarationHelper(signature, 170, context));
+                        typeElements.push(signatureToSignatureDeclarationHelper(signature, 172, context));
                     }
                     for (var _b = 0, _c = resolvedType.constructSignatures; _b < _c.length; _b++) {
                         var signature = _c[_b];
                         if (signature.flags & 4)
                             continue;
-                        typeElements.push(signatureToSignatureDeclarationHelper(signature, 171, context));
+                        typeElements.push(signatureToSignatureDeclarationHelper(signature, 173, context));
                     }
-                    if (resolvedType.stringIndexInfo) {
-                        var indexSignature = void 0;
-                        if (resolvedType.objectFlags & 1024) {
-                            indexSignature = indexInfoToIndexSignatureDeclarationHelper(createIndexInfo(anyType, resolvedType.stringIndexInfo.isReadonly, resolvedType.stringIndexInfo.declaration), 0, context, createElidedInformationPlaceholder(context));
-                        }
-                        else {
-                            indexSignature = indexInfoToIndexSignatureDeclarationHelper(resolvedType.stringIndexInfo, 0, context, undefined);
-                        }
-                        typeElements.push(indexSignature);
-                    }
-                    if (resolvedType.numberIndexInfo) {
-                        typeElements.push(indexInfoToIndexSignatureDeclarationHelper(resolvedType.numberIndexInfo, 1, context, undefined));
+                    for (var _d = 0, _e = resolvedType.indexInfos; _d < _e.length; _d++) {
+                        var info = _e[_d];
+                        typeElements.push(indexInfoToIndexSignatureDeclarationHelper(info, context, resolvedType.objectFlags & 1024 ? createElidedInformationPlaceholder(context) : undefined));
                     }
                     var properties = resolvedType.properties;
                     if (!properties) {
                         return typeElements;
                     }
                     var i = 0;
-                    for (var _d = 0, properties_1 = properties; _d < properties_1.length; _d++) {
-                        var propertySymbol = properties_1[_d];
+                    for (var _f = 0, properties_1 = properties; _f < properties_1.length; _f++) {
+                        var propertySymbol = properties_1[_f];
                         i++;
                         if (context.flags & 2048) {
                             if (propertySymbol.flags & 4194304) {
@@ -40531,7 +41464,7 @@
                 if (!(context.flags & 1)) {
                     return ts.factory.createTypeReferenceNode(ts.factory.createIdentifier("..."), undefined);
                 }
-                return ts.factory.createKeywordTypeNode(128);
+                return ts.factory.createKeywordTypeNode(129);
             }
             function shouldUsePlaceholderForProperty(propertySymbol, context) {
                 var _a;
@@ -40541,27 +41474,32 @@
                             && !(ts.getObjectFlags(ts.last(context.reverseMappedStack).propertyType) & 16)));
             }
             function addPropertyToElementList(propertySymbol, context, typeElements) {
-                var _a;
+                var _a, _b;
                 var propertyIsReverseMapped = !!(ts.getCheckFlags(propertySymbol) & 8192);
                 var propertyType = shouldUsePlaceholderForProperty(propertySymbol, context) ?
-                    anyType : getTypeOfSymbol(propertySymbol);
+                    anyType : getNonMissingTypeOfSymbol(propertySymbol);
                 var saveEnclosingDeclaration = context.enclosingDeclaration;
                 context.enclosingDeclaration = undefined;
                 if (context.tracker.trackSymbol && ts.getCheckFlags(propertySymbol) & 4096 && isLateBoundName(propertySymbol.escapedName)) {
-                    var decl = ts.first(propertySymbol.declarations);
-                    if (propertySymbol.declarations && hasLateBindableName(decl)) {
-                        if (ts.isBinaryExpression(decl)) {
-                            var name = ts.getNameOfDeclaration(decl);
-                            if (name && ts.isElementAccessExpression(name) && ts.isPropertyAccessEntityNameExpression(name.argumentExpression)) {
-                                trackComputedName(name.argumentExpression, saveEnclosingDeclaration, context);
+                    if (propertySymbol.declarations) {
+                        var decl = ts.first(propertySymbol.declarations);
+                        if (hasLateBindableName(decl)) {
+                            if (ts.isBinaryExpression(decl)) {
+                                var name = ts.getNameOfDeclaration(decl);
+                                if (name && ts.isElementAccessExpression(name) && ts.isPropertyAccessEntityNameExpression(name.argumentExpression)) {
+                                    trackComputedName(name.argumentExpression, saveEnclosingDeclaration, context);
+                                }
+                            }
+                            else {
+                                trackComputedName(decl.name.expression, saveEnclosingDeclaration, context);
                             }
                         }
-                        else {
-                            trackComputedName(decl.name.expression, saveEnclosingDeclaration, context);
-                        }
+                    }
+                    else if ((_a = context.tracker) === null || _a === void 0 ? void 0 : _a.reportNonSerializableProperty) {
+                        context.tracker.reportNonSerializableProperty(symbolToString(propertySymbol));
                     }
                 }
-                context.enclosingDeclaration = propertySymbol.valueDeclaration || ((_a = propertySymbol.declarations) === null || _a === void 0 ? void 0 : _a[0]) || saveEnclosingDeclaration;
+                context.enclosingDeclaration = propertySymbol.valueDeclaration || ((_b = propertySymbol.declarations) === null || _b === void 0 ? void 0 : _b[0]) || saveEnclosingDeclaration;
                 var propertyName = getPropertyNameNodeForSymbol(propertySymbol, context);
                 context.enclosingDeclaration = saveEnclosingDeclaration;
                 context.approximateLength += (ts.symbolName(propertySymbol).length + 1);
@@ -40570,7 +41508,7 @@
                     var signatures = getSignaturesOfType(filterType(propertyType, function (t) { return !(t.flags & 32768); }), 0);
                     for (var _i = 0, signatures_1 = signatures; _i < signatures_1.length; _i++) {
                         var signature = signatures_1[_i];
-                        var methodDeclaration = signatureToSignatureDeclarationHelper(signature, 165, context, { name: propertyName, questionToken: optionalToken });
+                        var methodDeclaration = signatureToSignatureDeclarationHelper(signature, 166, context, { name: propertyName, questionToken: optionalToken });
                         typeElements.push(preserveCommentsOn(methodDeclaration));
                     }
                 }
@@ -40584,12 +41522,12 @@
                             context.reverseMappedStack || (context.reverseMappedStack = []);
                             context.reverseMappedStack.push(propertySymbol);
                         }
-                        propertyTypeNode = propertyType ? serializeTypeForDeclaration(context, propertyType, propertySymbol, saveEnclosingDeclaration) : ts.factory.createKeywordTypeNode(128);
+                        propertyTypeNode = propertyType ? serializeTypeForDeclaration(context, propertyType, propertySymbol, saveEnclosingDeclaration) : ts.factory.createKeywordTypeNode(129);
                         if (propertyIsReverseMapped) {
                             context.reverseMappedStack.pop();
                         }
                     }
-                    var modifiers = isReadonlySymbol(propertySymbol) ? [ts.factory.createToken(142)] : undefined;
+                    var modifiers = isReadonlySymbol(propertySymbol) ? [ts.factory.createToken(143)] : undefined;
                     if (modifiers) {
                         context.approximateLength += 9;
                     }
@@ -40598,8 +41536,8 @@
                 }
                 function preserveCommentsOn(node) {
                     var _a;
-                    if (ts.some(propertySymbol.declarations, function (d) { return d.kind === 337; })) {
-                        var d = (_a = propertySymbol.declarations) === null || _a === void 0 ? void 0 : _a.find(function (d) { return d.kind === 337; });
+                    if (ts.some(propertySymbol.declarations, function (d) { return d.kind === 342; })) {
+                        var d = (_a = propertySymbol.declarations) === null || _a === void 0 ? void 0 : _a.find(function (d) { return d.kind === 342; });
                         var commentText = ts.getTextOfJSDocComment(d.comment);
                         if (commentText) {
                             ts.setSyntheticLeadingComments(node, [{ kind: 3, text: "*\n * " + commentText.replace(/\n/g, "\n * ") + "\n ", pos: -1, end: -1, hasTrailingNewLine: true }]);
@@ -40674,9 +41612,9 @@
                     || !!a.symbol && a.symbol === b.symbol
                     || !!a.aliasSymbol && a.aliasSymbol === b.aliasSymbol;
             }
-            function indexInfoToIndexSignatureDeclarationHelper(indexInfo, kind, context, typeNode) {
+            function indexInfoToIndexSignatureDeclarationHelper(indexInfo, context, typeNode) {
                 var name = ts.getNameFromIndexInfo(indexInfo) || "x";
-                var indexerTypeNode = ts.factory.createKeywordTypeNode(kind === 0 ? 147 : 144);
+                var indexerTypeNode = typeToTypeNodeHelper(indexInfo.keyType, context);
                 var indexingParameter = ts.factory.createParameterDeclaration(undefined, undefined, undefined, name, undefined, indexerTypeNode, undefined);
                 if (!typeNode) {
                     typeNode = typeToTypeNodeHelper(indexInfo.type || anyType, context);
@@ -40685,13 +41623,14 @@
                     context.encounteredError = true;
                 }
                 context.approximateLength += (name.length + 4);
-                return ts.factory.createIndexSignature(undefined, indexInfo.isReadonly ? [ts.factory.createToken(142)] : undefined, [indexingParameter], typeNode);
+                return ts.factory.createIndexSignature(undefined, indexInfo.isReadonly ? [ts.factory.createToken(143)] : undefined, [indexingParameter], typeNode);
             }
             function signatureToSignatureDeclarationHelper(signature, kind, context, options) {
                 var _a, _b, _c, _d;
                 var suppressAny = context.flags & 256;
                 if (suppressAny)
                     context.flags &= ~256;
+                context.approximateLength += 3;
                 var typeParameters;
                 var typeArguments;
                 if (context.flags & 32 && signature.target && signature.mapper && signature.target.typeParameters) {
@@ -40701,7 +41640,7 @@
                     typeParameters = signature.typeParameters && signature.typeParameters.map(function (parameter) { return typeParameterToDeclaration(parameter, context); });
                 }
                 var expandedParams = getExpandedParameters(signature, true)[0];
-                var parameters = (ts.some(expandedParams, function (p) { return p !== expandedParams[expandedParams.length - 1] && !!(ts.getCheckFlags(p) & 32768); }) ? signature.parameters : expandedParams).map(function (parameter) { return symbolToParameterDeclaration(parameter, context, kind === 167, options === null || options === void 0 ? void 0 : options.privateSymbolVisitor, options === null || options === void 0 ? void 0 : options.bundledImports); });
+                var parameters = (ts.some(expandedParams, function (p) { return p !== expandedParams[expandedParams.length - 1] && !!(ts.getCheckFlags(p) & 32768); }) ? signature.parameters : expandedParams).map(function (parameter) { return symbolToParameterDeclaration(parameter, context, kind === 169, options === null || options === void 0 ? void 0 : options.privateSymbolVisitor, options === null || options === void 0 ? void 0 : options.bundledImports); });
                 if (signature.thisParameter) {
                     var thisParameter = symbolToParameterDeclaration(signature.thisParameter, context);
                     parameters.unshift(thisParameter);
@@ -40710,7 +41649,7 @@
                 var typePredicate = getTypePredicateOfSignature(signature);
                 if (typePredicate) {
                     var assertsModifier = typePredicate.kind === 2 || typePredicate.kind === 3 ?
-                        ts.factory.createToken(127) :
+                        ts.factory.createToken(128) :
                         undefined;
                     var parameterName = typePredicate.kind === 1 || typePredicate.kind === 3 ?
                         ts.setEmitFlags(ts.factory.createIdentifier(typePredicate.parameterName), 16777216) :
@@ -40724,29 +41663,28 @@
                         returnTypeNode = serializeReturnTypeForSignature(context, returnType, signature, options === null || options === void 0 ? void 0 : options.privateSymbolVisitor, options === null || options === void 0 ? void 0 : options.bundledImports);
                     }
                     else if (!suppressAny) {
-                        returnTypeNode = ts.factory.createKeywordTypeNode(128);
+                        returnTypeNode = ts.factory.createKeywordTypeNode(129);
                     }
                 }
                 var modifiers = options === null || options === void 0 ? void 0 : options.modifiers;
-                if ((kind === 176) && signature.flags & 4) {
+                if ((kind === 178) && signature.flags & 4) {
                     var flags = ts.modifiersToFlags(modifiers);
                     modifiers = ts.factory.createModifiersFromModifierFlags(flags | 128);
                 }
-                context.approximateLength += 3;
-                var node = kind === 170 ? ts.factory.createCallSignature(typeParameters, parameters, returnTypeNode) :
-                    kind === 171 ? ts.factory.createConstructSignature(typeParameters, parameters, returnTypeNode) :
-                        kind === 165 ? ts.factory.createMethodSignature(modifiers, (_a = options === null || options === void 0 ? void 0 : options.name) !== null && _a !== void 0 ? _a : ts.factory.createIdentifier(""), options === null || options === void 0 ? void 0 : options.questionToken, typeParameters, parameters, returnTypeNode) :
-                            kind === 166 ? ts.factory.createMethodDeclaration(undefined, modifiers, undefined, (_b = options === null || options === void 0 ? void 0 : options.name) !== null && _b !== void 0 ? _b : ts.factory.createIdentifier(""), undefined, typeParameters, parameters, returnTypeNode, undefined) :
-                                kind === 167 ? ts.factory.createConstructorDeclaration(undefined, modifiers, parameters, undefined) :
-                                    kind === 168 ? ts.factory.createGetAccessorDeclaration(undefined, modifiers, (_c = options === null || options === void 0 ? void 0 : options.name) !== null && _c !== void 0 ? _c : ts.factory.createIdentifier(""), parameters, returnTypeNode, undefined) :
-                                        kind === 169 ? ts.factory.createSetAccessorDeclaration(undefined, modifiers, (_d = options === null || options === void 0 ? void 0 : options.name) !== null && _d !== void 0 ? _d : ts.factory.createIdentifier(""), parameters, undefined) :
-                                            kind === 172 ? ts.factory.createIndexSignature(undefined, modifiers, parameters, returnTypeNode) :
-                                                kind === 309 ? ts.factory.createJSDocFunctionType(parameters, returnTypeNode) :
-                                                    kind === 175 ? ts.factory.createFunctionTypeNode(typeParameters, parameters, returnTypeNode !== null && returnTypeNode !== void 0 ? returnTypeNode : ts.factory.createTypeReferenceNode(ts.factory.createIdentifier(""))) :
-                                                        kind === 176 ? ts.factory.createConstructorTypeNode(modifiers, typeParameters, parameters, returnTypeNode !== null && returnTypeNode !== void 0 ? returnTypeNode : ts.factory.createTypeReferenceNode(ts.factory.createIdentifier(""))) :
-                                                            kind === 252 ? ts.factory.createFunctionDeclaration(undefined, modifiers, undefined, (options === null || options === void 0 ? void 0 : options.name) ? ts.cast(options.name, ts.isIdentifier) : ts.factory.createIdentifier(""), typeParameters, parameters, returnTypeNode, undefined) :
-                                                                kind === 209 ? ts.factory.createFunctionExpression(modifiers, undefined, (options === null || options === void 0 ? void 0 : options.name) ? ts.cast(options.name, ts.isIdentifier) : ts.factory.createIdentifier(""), typeParameters, parameters, returnTypeNode, ts.factory.createBlock([])) :
-                                                                    kind === 210 ? ts.factory.createArrowFunction(modifiers, typeParameters, parameters, returnTypeNode, undefined, ts.factory.createBlock([])) :
+                var node = kind === 172 ? ts.factory.createCallSignature(typeParameters, parameters, returnTypeNode) :
+                    kind === 173 ? ts.factory.createConstructSignature(typeParameters, parameters, returnTypeNode) :
+                        kind === 166 ? ts.factory.createMethodSignature(modifiers, (_a = options === null || options === void 0 ? void 0 : options.name) !== null && _a !== void 0 ? _a : ts.factory.createIdentifier(""), options === null || options === void 0 ? void 0 : options.questionToken, typeParameters, parameters, returnTypeNode) :
+                            kind === 167 ? ts.factory.createMethodDeclaration(undefined, modifiers, undefined, (_b = options === null || options === void 0 ? void 0 : options.name) !== null && _b !== void 0 ? _b : ts.factory.createIdentifier(""), undefined, typeParameters, parameters, returnTypeNode, undefined) :
+                                kind === 169 ? ts.factory.createConstructorDeclaration(undefined, modifiers, parameters, undefined) :
+                                    kind === 170 ? ts.factory.createGetAccessorDeclaration(undefined, modifiers, (_c = options === null || options === void 0 ? void 0 : options.name) !== null && _c !== void 0 ? _c : ts.factory.createIdentifier(""), parameters, returnTypeNode, undefined) :
+                                        kind === 171 ? ts.factory.createSetAccessorDeclaration(undefined, modifiers, (_d = options === null || options === void 0 ? void 0 : options.name) !== null && _d !== void 0 ? _d : ts.factory.createIdentifier(""), parameters, undefined) :
+                                            kind === 174 ? ts.factory.createIndexSignature(undefined, modifiers, parameters, returnTypeNode) :
+                                                kind === 312 ? ts.factory.createJSDocFunctionType(parameters, returnTypeNode) :
+                                                    kind === 177 ? ts.factory.createFunctionTypeNode(typeParameters, parameters, returnTypeNode !== null && returnTypeNode !== void 0 ? returnTypeNode : ts.factory.createTypeReferenceNode(ts.factory.createIdentifier(""))) :
+                                                        kind === 178 ? ts.factory.createConstructorTypeNode(modifiers, typeParameters, parameters, returnTypeNode !== null && returnTypeNode !== void 0 ? returnTypeNode : ts.factory.createTypeReferenceNode(ts.factory.createIdentifier(""))) :
+                                                            kind === 254 ? ts.factory.createFunctionDeclaration(undefined, modifiers, undefined, (options === null || options === void 0 ? void 0 : options.name) ? ts.cast(options.name, ts.isIdentifier) : ts.factory.createIdentifier(""), typeParameters, parameters, returnTypeNode, undefined) :
+                                                                kind === 211 ? ts.factory.createFunctionExpression(modifiers, undefined, (options === null || options === void 0 ? void 0 : options.name) ? ts.cast(options.name, ts.isIdentifier) : ts.factory.createIdentifier(""), typeParameters, parameters, returnTypeNode, ts.factory.createBlock([])) :
+                                                                    kind === 212 ? ts.factory.createArrowFunction(modifiers, typeParameters, parameters, returnTypeNode, undefined, ts.factory.createBlock([])) :
                                                                         ts.Debug.assertNever(kind);
                 if (typeArguments) {
                     node.typeArguments = ts.factory.createNodeArray(typeArguments);
@@ -40768,9 +41706,9 @@
                 return typeParameterToDeclarationWithConstraint(type, context, constraintNode);
             }
             function symbolToParameterDeclaration(parameterSymbol, context, preserveModifierFlags, privateSymbolVisitor, bundledImports) {
-                var parameterDeclaration = ts.getDeclarationOfKind(parameterSymbol, 161);
+                var parameterDeclaration = ts.getDeclarationOfKind(parameterSymbol, 162);
                 if (!parameterDeclaration && !ts.isTransientSymbol(parameterSymbol)) {
-                    parameterDeclaration = ts.getDeclarationOfKind(parameterSymbol, 330);
+                    parameterDeclaration = ts.getDeclarationOfKind(parameterSymbol, 335);
                 }
                 var parameterType = getTypeOfSymbol(parameterSymbol);
                 if (parameterDeclaration && isRequiredInitializedParameter(parameterDeclaration)) {
@@ -40784,8 +41722,8 @@
                 var isRest = parameterDeclaration && ts.isRestParameter(parameterDeclaration) || ts.getCheckFlags(parameterSymbol) & 32768;
                 var dotDotDotToken = isRest ? ts.factory.createToken(25) : undefined;
                 var name = parameterDeclaration ? parameterDeclaration.name ?
-                    parameterDeclaration.name.kind === 78 ? ts.setEmitFlags(ts.factory.cloneNode(parameterDeclaration.name), 16777216) :
-                        parameterDeclaration.name.kind === 158 ? ts.setEmitFlags(ts.factory.cloneNode(parameterDeclaration.name.right), 16777216) :
+                    parameterDeclaration.name.kind === 79 ? ts.setEmitFlags(ts.factory.cloneNode(parameterDeclaration.name), 16777216) :
+                        parameterDeclaration.name.kind === 159 ? ts.setEmitFlags(ts.factory.cloneNode(parameterDeclaration.name.right), 16777216) :
                             cloneBindingName(parameterDeclaration.name) :
                     ts.symbolName(parameterSymbol) :
                     ts.symbolName(parameterSymbol);
@@ -40931,11 +41869,11 @@
             }
             function getSpecifierForModuleSymbol(symbol, context) {
                 var _a;
-                var file = ts.getDeclarationOfKind(symbol, 298);
+                var file = ts.getDeclarationOfKind(symbol, 300);
                 if (!file) {
                     var equivalentFileSymbol = ts.firstDefined(symbol.declarations, function (d) { return getFileSymbolIfFileSymbolExportEqualsContainer(d, symbol); });
                     if (equivalentFileSymbol) {
-                        file = ts.getDeclarationOfKind(equivalentFileSymbol, 298);
+                        file = ts.getDeclarationOfKind(equivalentFileSymbol, 300);
                     }
                 }
                 if (file && file.moduleName !== undefined) {
@@ -41077,7 +42015,7 @@
                 return false;
             }
             function typeParameterToName(type, context) {
-                var _a;
+                var _a, _b;
                 if (context.flags & 4 && context.typeParameterNames) {
                     var cached = context.typeParameterNames.get(getTypeId(type));
                     if (cached) {
@@ -41085,22 +42023,23 @@
                     }
                 }
                 var result = symbolToName(type.symbol, context, 788968, true);
-                if (!(result.kind & 78)) {
+                if (!(result.kind & 79)) {
                     return ts.factory.createIdentifier("(Missing type parameter)");
                 }
                 if (context.flags & 4) {
                     var rawtext = result.escapedText;
-                    var i = 0;
+                    var i = ((_a = context.typeParameterNamesByTextNextNameCount) === null || _a === void 0 ? void 0 : _a.get(rawtext)) || 0;
                     var text = rawtext;
-                    while (((_a = context.typeParameterNamesByText) === null || _a === void 0 ? void 0 : _a.has(text)) || typeParameterShadowsNameInScope(text, context, type)) {
+                    while (((_b = context.typeParameterNamesByText) === null || _b === void 0 ? void 0 : _b.has(text)) || typeParameterShadowsNameInScope(text, context, type)) {
                         i++;
                         text = rawtext + "_" + i;
                     }
                     if (text !== rawtext) {
                         result = ts.factory.createIdentifier(text, result.typeArguments);
                     }
+                    (context.typeParameterNamesByTextNextNameCount || (context.typeParameterNamesByTextNextNameCount = new ts.Map())).set(rawtext, i);
                     (context.typeParameterNames || (context.typeParameterNames = new ts.Map())).set(getTypeId(type), result);
-                    (context.typeParameterNamesByText || (context.typeParameterNamesByText = new ts.Set())).add(result.escapedText);
+                    (context.typeParameterNamesByText || (context.typeParameterNamesByText = new ts.Set())).add(rawtext);
                 }
                 return result;
             }
@@ -41226,6 +42165,7 @@
                 if (initial.typeParameterSymbolList) {
                     initial.typeParameterSymbolList = new ts.Set(initial.typeParameterSymbolList);
                 }
+                initial.tracker = wrapSymbolTrackerToReportForContext(initial, initial.tracker);
                 return initial;
             }
             function getDeclarationWithTypeAnnotation(symbol, enclosingDeclaration) {
@@ -41309,17 +42249,17 @@
                 }
                 return transformed === existing ? ts.setTextRange(ts.factory.cloneNode(existing), existing) : transformed;
                 function visitExistingNodeTreeSymbols(node) {
-                    if (ts.isJSDocAllType(node) || node.kind === 311) {
-                        return ts.factory.createKeywordTypeNode(128);
+                    if (ts.isJSDocAllType(node) || node.kind === 314) {
+                        return ts.factory.createKeywordTypeNode(129);
                     }
                     if (ts.isJSDocUnknownType(node)) {
-                        return ts.factory.createKeywordTypeNode(152);
+                        return ts.factory.createKeywordTypeNode(153);
                     }
                     if (ts.isJSDocNullableType(node)) {
                         return ts.factory.createUnionTypeNode([ts.visitNode(node.type, visitExistingNodeTreeSymbols), ts.factory.createLiteralTypeNode(ts.factory.createNull())]);
                     }
                     if (ts.isJSDocOptionalType(node)) {
-                        return ts.factory.createUnionTypeNode([ts.visitNode(node.type, visitExistingNodeTreeSymbols), ts.factory.createKeywordTypeNode(150)]);
+                        return ts.factory.createUnionTypeNode([ts.visitNode(node.type, visitExistingNodeTreeSymbols), ts.factory.createKeywordTypeNode(151)]);
                     }
                     if (ts.isJSDocNonNullableType(node)) {
                         return ts.visitNode(node.type, visitExistingNodeTreeSymbols);
@@ -41332,11 +42272,11 @@
                             var name = ts.isIdentifier(t.name) ? t.name : t.name.right;
                             var typeViaParent = getTypeOfPropertyOfType(getTypeFromTypeNode(node), name.escapedText);
                             var overrideTypeNode = typeViaParent && t.typeExpression && getTypeFromTypeNode(t.typeExpression.type) !== typeViaParent ? typeToTypeNodeHelper(typeViaParent, context) : undefined;
-                            return ts.factory.createPropertySignature(undefined, name, t.isBracketed || t.typeExpression && ts.isJSDocOptionalType(t.typeExpression.type) ? ts.factory.createToken(57) : undefined, overrideTypeNode || (t.typeExpression && ts.visitNode(t.typeExpression.type, visitExistingNodeTreeSymbols)) || ts.factory.createKeywordTypeNode(128));
+                            return ts.factory.createPropertySignature(undefined, name, t.isBracketed || t.typeExpression && ts.isJSDocOptionalType(t.typeExpression.type) ? ts.factory.createToken(57) : undefined, overrideTypeNode || (t.typeExpression && ts.visitNode(t.typeExpression.type, visitExistingNodeTreeSymbols)) || ts.factory.createKeywordTypeNode(129));
                         }));
                     }
                     if (ts.isTypeReferenceNode(node) && ts.isIdentifier(node.typeName) && node.typeName.escapedText === "") {
-                        return ts.setOriginalNode(ts.factory.createKeywordTypeNode(128), node);
+                        return ts.setOriginalNode(ts.factory.createKeywordTypeNode(129), node);
                     }
                     if ((ts.isExpressionWithTypeArguments(node) || ts.isTypeReferenceNode(node)) && ts.isJSDocIndexSignature(node)) {
                         return ts.factory.createTypeLiteralNode([ts.factory.createIndexSignature(undefined, undefined, [ts.factory.createParameterDeclaration(undefined, undefined, undefined, "x", undefined, ts.visitNode(node.typeArguments[0], visitExistingNodeTreeSymbols))], ts.visitNode(node.typeArguments[1], visitExistingNodeTreeSymbols))]);
@@ -41344,10 +42284,10 @@
                     if (ts.isJSDocFunctionType(node)) {
                         if (ts.isJSDocConstructSignature(node)) {
                             var newTypeNode_1;
-                            return ts.factory.createConstructorTypeNode(node.modifiers, ts.visitNodes(node.typeParameters, visitExistingNodeTreeSymbols), ts.mapDefined(node.parameters, function (p, i) { return p.name && ts.isIdentifier(p.name) && p.name.escapedText === "new" ? (newTypeNode_1 = p.type, undefined) : ts.factory.createParameterDeclaration(undefined, undefined, getEffectiveDotDotDotForParameter(p), getNameForJSDocFunctionParameter(p, i), p.questionToken, ts.visitNode(p.type, visitExistingNodeTreeSymbols), undefined); }), ts.visitNode(newTypeNode_1 || node.type, visitExistingNodeTreeSymbols) || ts.factory.createKeywordTypeNode(128));
+                            return ts.factory.createConstructorTypeNode(node.modifiers, ts.visitNodes(node.typeParameters, visitExistingNodeTreeSymbols), ts.mapDefined(node.parameters, function (p, i) { return p.name && ts.isIdentifier(p.name) && p.name.escapedText === "new" ? (newTypeNode_1 = p.type, undefined) : ts.factory.createParameterDeclaration(undefined, undefined, getEffectiveDotDotDotForParameter(p), getNameForJSDocFunctionParameter(p, i), p.questionToken, ts.visitNode(p.type, visitExistingNodeTreeSymbols), undefined); }), ts.visitNode(newTypeNode_1 || node.type, visitExistingNodeTreeSymbols) || ts.factory.createKeywordTypeNode(129));
                         }
                         else {
-                            return ts.factory.createFunctionTypeNode(ts.visitNodes(node.typeParameters, visitExistingNodeTreeSymbols), ts.map(node.parameters, function (p, i) { return ts.factory.createParameterDeclaration(undefined, undefined, getEffectiveDotDotDotForParameter(p), getNameForJSDocFunctionParameter(p, i), p.questionToken, ts.visitNode(p.type, visitExistingNodeTreeSymbols), undefined); }), ts.visitNode(node.type, visitExistingNodeTreeSymbols) || ts.factory.createKeywordTypeNode(128));
+                            return ts.factory.createFunctionTypeNode(ts.visitNodes(node.typeParameters, visitExistingNodeTreeSymbols), ts.map(node.parameters, function (p, i) { return ts.factory.createParameterDeclaration(undefined, undefined, getEffectiveDotDotDotForParameter(p), getNameForJSDocFunctionParameter(p, i), p.questionToken, ts.visitNode(p.type, visitExistingNodeTreeSymbols), undefined); }), ts.visitNode(node.type, visitExistingNodeTreeSymbols) || ts.factory.createKeywordTypeNode(129));
                         }
                     }
                     if (ts.isTypeReferenceNode(node) && ts.isInJSDoc(node) && (!existingTypeNodeIsNotReferenceOrIsReferenceWithCompatibleTypeArgumentCount(node, getTypeFromTypeNode(node)) || getIntendedTypeFromJSDocTypeReference(node) || unknownSymbol === resolveTypeReferenceName(getTypeReferenceName(node), 788968, true))) {
@@ -41411,8 +42351,8 @@
                 }
             }
             function symbolTableToDeclarationStatements(symbolTable, context, bundled) {
-                var serializePropertySymbolForClass = makeSerializePropertySymbol(ts.factory.createPropertyDeclaration, 166, true);
-                var serializePropertySymbolForInterfaceWorker = makeSerializePropertySymbol(function (_decorators, mods, name, question, type) { return ts.factory.createPropertySignature(mods, name, question, type); }, 165, false);
+                var serializePropertySymbolForClass = makeSerializePropertySymbol(ts.factory.createPropertyDeclaration, 167, true);
+                var serializePropertySymbolForInterfaceWorker = makeSerializePropertySymbol(function (_decorators, mods, name, question, type) { return ts.factory.createPropertySignature(mods, name, question, type); }, 166, false);
                 var enclosingDeclaration = context.enclosingDeclaration;
                 var results = [];
                 var visitedSymbols = new ts.Set();
@@ -41427,9 +42367,11 @@
                                 }
                             }
                             else if (oldcontext.tracker && oldcontext.tracker.trackSymbol) {
-                                oldcontext.tracker.trackSymbol(sym, decl, meaning);
+                                return oldcontext.tracker.trackSymbol(sym, decl, meaning);
                             }
+                            return false;
                         } }) });
+                context.tracker = wrapSymbolTrackerToReportForContext(context, context.tracker);
                 ts.forEachEntry(symbolTable, function (symbol, name) {
                     var baseName = ts.unescapeLeadingUnderscores(name);
                     void getInternalSymbolName(symbol, baseName);
@@ -41443,7 +42385,7 @@
                 visitSymbolTable(symbolTable);
                 return mergeRedundantStatements(results);
                 function isIdentifierAndNotUndefined(node) {
-                    return !!node && node.kind === 78;
+                    return !!node && node.kind === 79;
                 }
                 function getNamesOfDeclaration(statement) {
                     if (ts.isVariableStatement(statement)) {
@@ -41462,8 +42404,8 @@
                         var name_2 = ns.name;
                         var body = ns.body;
                         if (ts.length(excessExports)) {
-                            ns = ts.factory.updateModuleDeclaration(ns, ns.decorators, ns.modifiers, ns.name, body = ts.factory.updateModuleBlock(body, ts.factory.createNodeArray(__spreadArray(__spreadArray([], ns.body.statements), [ts.factory.createExportDeclaration(undefined, undefined, false, ts.factory.createNamedExports(ts.map(ts.flatMap(excessExports, function (e) { return getNamesOfDeclaration(e); }), function (id) { return ts.factory.createExportSpecifier(undefined, id); })), undefined)]))));
-                            statements = __spreadArray(__spreadArray(__spreadArray([], statements.slice(0, nsIndex)), [ns]), statements.slice(nsIndex + 1));
+                            ns = ts.factory.updateModuleDeclaration(ns, ns.decorators, ns.modifiers, ns.name, body = ts.factory.updateModuleBlock(body, ts.factory.createNodeArray(__spreadArray(__spreadArray([], ns.body.statements, true), [ts.factory.createExportDeclaration(undefined, undefined, false, ts.factory.createNamedExports(ts.map(ts.flatMap(excessExports, function (e) { return getNamesOfDeclaration(e); }), function (id) { return ts.factory.createExportSpecifier(undefined, id); })), undefined)], false))));
+                            statements = __spreadArray(__spreadArray(__spreadArray([], statements.slice(0, nsIndex), true), [ns], false), statements.slice(nsIndex + 1), true);
                         }
                         if (!ts.find(statements, function (s) { return s !== ns && ts.nodeHasName(s, name_2); })) {
                             results = [];
@@ -41471,7 +42413,7 @@
                             ts.forEach(body.statements, function (s) {
                                 addResult(s, mixinExportFlag_1 ? 1 : 0);
                             });
-                            statements = __spreadArray(__spreadArray([], ts.filter(statements, function (s) { return s !== ns && s !== exportAssignment; })), results);
+                            statements = __spreadArray(__spreadArray([], ts.filter(statements, function (s) { return s !== ns && s !== exportAssignment; }), true), results, true);
                         }
                     }
                     return statements;
@@ -41480,7 +42422,7 @@
                     var exports = ts.filter(statements, function (d) { return ts.isExportDeclaration(d) && !d.moduleSpecifier && !!d.exportClause && ts.isNamedExports(d.exportClause); });
                     if (ts.length(exports) > 1) {
                         var nonExports = ts.filter(statements, function (d) { return !ts.isExportDeclaration(d) || !!d.moduleSpecifier || !d.exportClause; });
-                        statements = __spreadArray(__spreadArray([], nonExports), [ts.factory.createExportDeclaration(undefined, undefined, false, ts.factory.createNamedExports(ts.flatMap(exports, function (e) { return ts.cast(e.exportClause, ts.isNamedExports).elements; })), undefined)]);
+                        statements = __spreadArray(__spreadArray([], nonExports, true), [ts.factory.createExportDeclaration(undefined, undefined, false, ts.factory.createNamedExports(ts.flatMap(exports, function (e) { return ts.cast(e.exportClause, ts.isNamedExports).elements; })), undefined)], false);
                     }
                     var reexports = ts.filter(statements, function (d) { return ts.isExportDeclaration(d) && !!d.moduleSpecifier && !!d.exportClause && ts.isNamedExports(d.exportClause); });
                     if (ts.length(reexports) > 1) {
@@ -41488,9 +42430,9 @@
                         if (groups.length !== reexports.length) {
                             var _loop_9 = function (group_1) {
                                 if (group_1.length > 1) {
-                                    statements = __spreadArray(__spreadArray([], ts.filter(statements, function (s) { return group_1.indexOf(s) === -1; })), [
+                                    statements = __spreadArray(__spreadArray([], ts.filter(statements, function (s) { return group_1.indexOf(s) === -1; }), true), [
                                         ts.factory.createExportDeclaration(undefined, undefined, false, ts.factory.createNamedExports(ts.flatMap(group_1, function (e) { return ts.cast(e.exportClause, ts.isNamedExports).elements; })), group_1[0].moduleSpecifier)
-                                    ]);
+                                    ], false);
                                 }
                             };
                             for (var _i = 0, groups_1 = groups; _i < groups_1.length; _i++) {
@@ -41581,6 +42523,9 @@
                         var oldContext = context;
                         context = cloneNodeBuilderContext(context);
                         var result = serializeSymbolWorker(symbol, isPrivate, propertyAsAlias);
+                        if (context.reportedDiagnostic) {
+                            oldcontext.reportedDiagnostic = context.reportedDiagnostic;
+                        }
                         context = oldContext;
                         return result;
                     }
@@ -41768,11 +42713,11 @@
                     var baseTypes = getBaseTypes(interfaceType);
                     var baseType = ts.length(baseTypes) ? getIntersectionType(baseTypes) : undefined;
                     var members = ts.flatMap(getPropertiesOfType(interfaceType), function (p) { return serializePropertySymbolForInterface(p, baseType); });
-                    var callSignatures = serializeSignatures(0, interfaceType, baseType, 170);
-                    var constructSignatures = serializeSignatures(1, interfaceType, baseType, 171);
+                    var callSignatures = serializeSignatures(0, interfaceType, baseType, 172);
+                    var constructSignatures = serializeSignatures(1, interfaceType, baseType, 173);
                     var indexSignatures = serializeIndexSignatures(interfaceType, baseType);
-                    var heritageClauses = !ts.length(baseTypes) ? undefined : [ts.factory.createHeritageClause(93, ts.mapDefined(baseTypes, function (b) { return trySerializeAsTypeReference(b, 111551); }))];
-                    addResult(ts.factory.createInterfaceDeclaration(undefined, undefined, getInternalSymbolName(symbol, symbolName), typeParamDecls, heritageClauses, __spreadArray(__spreadArray(__spreadArray(__spreadArray([], indexSignatures), constructSignatures), callSignatures), members)), modifierFlags);
+                    var heritageClauses = !ts.length(baseTypes) ? undefined : [ts.factory.createHeritageClause(94, ts.mapDefined(baseTypes, function (b) { return trySerializeAsTypeReference(b, 111551); }))];
+                    addResult(ts.factory.createInterfaceDeclaration(undefined, undefined, getInternalSymbolName(symbol, symbolName), typeParamDecls, heritageClauses, __spreadArray(__spreadArray(__spreadArray(__spreadArray([], indexSignatures, true), constructSignatures, true), callSignatures, true), members, true)), modifierFlags);
                 }
                 function getNamespaceMembersForSerialization(symbol) {
                     return !symbol.exports ? [] : ts.filter(ts.arrayFrom(symbol.exports.values()), isNamespaceMember);
@@ -41821,7 +42766,7 @@
                     var signatures = getSignaturesOfType(type, 0);
                     for (var _i = 0, signatures_2 = signatures; _i < signatures_2.length; _i++) {
                         var sig = signatures_2[_i];
-                        var decl = signatureToSignatureDeclarationHelper(sig, 252, context, { name: ts.factory.createIdentifier(localName), privateSymbolVisitor: includePrivateSymbol, bundledImports: bundled });
+                        var decl = signatureToSignatureDeclarationHelper(sig, 254, context, { name: ts.factory.createIdentifier(localName), privateSymbolVisitor: includePrivateSymbol, bundledImports: bundled });
                         addResult(ts.setTextRange(decl, getSignatureTextRangeLocation(sig)), modifierFlags);
                     }
                     if (!(symbol.flags & (512 | 1024) && !!symbol.exports && !!symbol.exports.size)) {
@@ -41872,7 +42817,7 @@
                 }
                 function isNamespaceMember(p) {
                     return !!(p.flags & (788968 | 1920 | 2097152)) ||
-                        !(p.flags & 4194304 || p.escapedName === "prototype" || p.valueDeclaration && ts.getEffectiveModifierFlags(p.valueDeclaration) & 32 && ts.isClassLike(p.valueDeclaration.parent));
+                        !(p.flags & 4194304 || p.escapedName === "prototype" || p.valueDeclaration && ts.isStatic(p.valueDeclaration) && ts.isClassLike(p.valueDeclaration.parent));
                 }
                 function sanitizeJSDocImplements(clauses) {
                     var result = ts.mapDefined(clauses, function (e) {
@@ -41921,7 +42866,7 @@
                     var staticBaseType = isClass
                         ? getBaseConstructorTypeOfClass(staticType)
                         : anyType;
-                    var heritageClauses = __spreadArray(__spreadArray([], !ts.length(baseTypes) ? [] : [ts.factory.createHeritageClause(93, ts.map(baseTypes, function (b) { return serializeBaseType(b, staticBaseType, localName); }))]), !ts.length(implementsExpressions) ? [] : [ts.factory.createHeritageClause(116, implementsExpressions)]);
+                    var heritageClauses = __spreadArray(__spreadArray([], !ts.length(baseTypes) ? [] : [ts.factory.createHeritageClause(94, ts.map(baseTypes, function (b) { return serializeBaseType(b, staticBaseType, localName); }))], true), !ts.length(implementsExpressions) ? [] : [ts.factory.createHeritageClause(117, implementsExpressions)], true);
                     var symbolProps = getNonInterhitedProperties(classType, baseTypes, getPropertiesOfType(classType));
                     var publicSymbolProps = ts.filter(symbolProps, function (s) {
                         var valueDecl = s.valueDeclaration;
@@ -41942,10 +42887,10 @@
                         !ts.some(getSignaturesOfType(staticType, 1));
                     var constructors = isNonConstructableClassLikeInJsFile ?
                         [ts.factory.createConstructorDeclaration(undefined, ts.factory.createModifiersFromModifierFlags(8), [], undefined)] :
-                        serializeSignatures(1, staticType, staticBaseType, 167);
+                        serializeSignatures(1, staticType, staticBaseType, 169);
                     var indexSignatures = serializeIndexSignatures(classType, baseTypes[0]);
                     context.enclosingDeclaration = oldEnclosing;
-                    addResult(ts.setTextRange(ts.factory.createClassDeclaration(undefined, undefined, localName, typeParamDecls, heritageClauses, __spreadArray(__spreadArray(__spreadArray(__spreadArray(__spreadArray([], indexSignatures), staticMembers), constructors), publicProperties), privateProperties)), symbol.declarations && ts.filter(symbol.declarations, function (d) { return ts.isClassDeclaration(d) || ts.isClassExpression(d); })[0]), modifierFlags);
+                    addResult(ts.setTextRange(ts.factory.createClassDeclaration(undefined, undefined, localName, typeParamDecls, heritageClauses, __spreadArray(__spreadArray(__spreadArray(__spreadArray(__spreadArray([], indexSignatures, true), staticMembers, true), constructors, true), publicProperties, true), privateProperties, true)), symbol.declarations && ts.filter(symbol.declarations, function (d) { return ts.isClassDeclaration(d) || ts.isClassExpression(d); })[0]), modifierFlags);
                 }
                 function serializeAsAlias(symbol, localName, modifierFlags) {
                     var _a, _b, _c, _d, _e;
@@ -41963,8 +42908,8 @@
                     var targetName = getInternalSymbolName(target, verbatimTargetName);
                     includePrivateSymbol(target);
                     switch (node.kind) {
-                        case 199:
-                            if (((_b = (_a = node.parent) === null || _a === void 0 ? void 0 : _a.parent) === null || _b === void 0 ? void 0 : _b.kind) === 250) {
+                        case 201:
+                            if (((_b = (_a = node.parent) === null || _a === void 0 ? void 0 : _a.parent) === null || _b === void 0 ? void 0 : _b.kind) === 252) {
                                 var specifier_1 = getSpecifierForModuleSymbol(target.parent || target, context);
                                 var propertyName = node.propertyName;
                                 addResult(ts.factory.createImportDeclaration(undefined, undefined, ts.factory.createImportClause(false, undefined, ts.factory.createNamedImports([ts.factory.createImportSpecifier(propertyName && ts.isIdentifier(propertyName) ? ts.factory.createIdentifier(ts.idText(propertyName)) : undefined, ts.factory.createIdentifier(localName))])), ts.factory.createStringLiteral(specifier_1)), 0);
@@ -41972,12 +42917,12 @@
                             }
                             ts.Debug.failBadSyntaxKind(((_c = node.parent) === null || _c === void 0 ? void 0 : _c.parent) || node, "Unhandled binding element grandparent kind in declaration serialization");
                             break;
-                        case 290:
-                            if (((_e = (_d = node.parent) === null || _d === void 0 ? void 0 : _d.parent) === null || _e === void 0 ? void 0 : _e.kind) === 217) {
+                        case 292:
+                            if (((_e = (_d = node.parent) === null || _d === void 0 ? void 0 : _d.parent) === null || _e === void 0 ? void 0 : _e.kind) === 219) {
                                 serializeExportSpecifier(ts.unescapeLeadingUnderscores(symbol.escapedName), targetName);
                             }
                             break;
-                        case 250:
+                        case 252:
                             if (ts.isPropertyAccessExpression(node.initializer)) {
                                 var initializer = node.initializer;
                                 var uniqueName = ts.factory.createUniqueName(localName);
@@ -41986,7 +42931,7 @@
                                 addResult(ts.factory.createImportEqualsDeclaration(undefined, undefined, false, ts.factory.createIdentifier(localName), ts.factory.createQualifiedName(uniqueName, initializer.name)), modifierFlags);
                                 break;
                             }
-                        case 261:
+                        case 263:
                             if (target.escapedName === "export=" && ts.some(target.declarations, ts.isJsonSourceFile)) {
                                 serializeMaybeAliasAssignment(symbol);
                                 break;
@@ -41996,33 +42941,33 @@
                                 ? symbolToName(target, context, 67108863, false)
                                 : ts.factory.createExternalModuleReference(ts.factory.createStringLiteral(getSpecifierForModuleSymbol(target, context)))), isLocalImport ? modifierFlags : 0);
                             break;
-                        case 260:
+                        case 262:
                             addResult(ts.factory.createNamespaceExportDeclaration(ts.idText(node.name)), 0);
                             break;
-                        case 263:
+                        case 265:
                             addResult(ts.factory.createImportDeclaration(undefined, undefined, ts.factory.createImportClause(false, ts.factory.createIdentifier(localName), undefined), ts.factory.createStringLiteral(getSpecifierForModuleSymbol(target.parent || target, context))), 0);
                             break;
-                        case 264:
+                        case 266:
                             addResult(ts.factory.createImportDeclaration(undefined, undefined, ts.factory.createImportClause(false, undefined, ts.factory.createNamespaceImport(ts.factory.createIdentifier(localName))), ts.factory.createStringLiteral(getSpecifierForModuleSymbol(target, context))), 0);
                             break;
-                        case 270:
+                        case 272:
                             addResult(ts.factory.createExportDeclaration(undefined, undefined, false, ts.factory.createNamespaceExport(ts.factory.createIdentifier(localName)), ts.factory.createStringLiteral(getSpecifierForModuleSymbol(target, context))), 0);
                             break;
-                        case 266:
+                        case 268:
                             addResult(ts.factory.createImportDeclaration(undefined, undefined, ts.factory.createImportClause(false, undefined, ts.factory.createNamedImports([
                                 ts.factory.createImportSpecifier(localName !== verbatimTargetName ? ts.factory.createIdentifier(verbatimTargetName) : undefined, ts.factory.createIdentifier(localName))
                             ])), ts.factory.createStringLiteral(getSpecifierForModuleSymbol(target.parent || target, context))), 0);
                             break;
-                        case 271:
+                        case 273:
                             var specifier = node.parent.parent.moduleSpecifier;
                             serializeExportSpecifier(ts.unescapeLeadingUnderscores(symbol.escapedName), specifier ? verbatimTargetName : targetName, specifier && ts.isStringLiteralLike(specifier) ? ts.factory.createStringLiteral(specifier.text) : undefined);
                             break;
-                        case 267:
+                        case 269:
                             serializeMaybeAliasAssignment(symbol);
                             break;
-                        case 217:
-                        case 202:
-                        case 203:
+                        case 219:
+                        case 204:
+                        case 205:
                             if (symbol.escapedName === "default" || symbol.escapedName === "export=") {
                                 serializeMaybeAliasAssignment(symbol);
                             }
@@ -42055,7 +43000,7 @@
                             includePrivateSymbol(referenced || target);
                         }
                         var oldTrack = context.tracker.trackSymbol;
-                        context.tracker.trackSymbol = ts.noop;
+                        context.tracker.trackSymbol = function () { return false; };
                         if (isExportAssignmentCompatibleSymbolName) {
                             results.push(ts.factory.createExportAssignment(undefined, undefined, isExportEquals, symbolToExpression(target, context, 67108863)));
                         }
@@ -42103,8 +43048,7 @@
                 function isTypeRepresentableAsFunctionNamespaceMerge(typeToSerialize, hostSymbol) {
                     var ctxSrc = ts.getSourceFileOfNode(context.enclosingDeclaration);
                     return ts.getObjectFlags(typeToSerialize) & (16 | 32) &&
-                        !getIndexInfoOfType(typeToSerialize, 0) &&
-                        !getIndexInfoOfType(typeToSerialize, 1) &&
+                        !ts.length(getIndexInfosOfType(typeToSerialize)) &&
                         !isClassInstanceSide(typeToSerialize) &&
                         !!(ts.length(ts.filter(getPropertiesOfType(typeToSerialize), isNamespaceMember)) || ts.length(getSignaturesOfType(typeToSerialize, 0))) &&
                         !ts.length(getSignaturesOfType(typeToSerialize, 1)) &&
@@ -42216,20 +43160,17 @@
                 }
                 function serializeIndexSignatures(input, baseType) {
                     var results = [];
-                    for (var _i = 0, _a = [0, 1]; _i < _a.length; _i++) {
-                        var type = _a[_i];
-                        var info = getIndexInfoOfType(input, type);
-                        if (info) {
-                            if (baseType) {
-                                var baseInfo = getIndexInfoOfType(baseType, type);
-                                if (baseInfo) {
-                                    if (isTypeIdenticalTo(info.type, baseInfo.type)) {
-                                        continue;
-                                    }
+                    for (var _i = 0, _a = getIndexInfosOfType(input); _i < _a.length; _i++) {
+                        var info = _a[_i];
+                        if (baseType) {
+                            var baseInfo = getIndexInfoOfType(baseType, info.keyType);
+                            if (baseInfo) {
+                                if (isTypeIdenticalTo(info.type, baseInfo.type)) {
+                                    continue;
                                 }
                             }
-                            results.push(indexInfoToIndexSignatureDeclarationHelper(info, type, context, undefined));
                         }
+                        results.push(indexInfoToIndexSignatureDeclarationHelper(info, context, undefined));
                     }
                     return results;
                 }
@@ -42323,7 +43264,7 @@
             if (flags === void 0) { flags = 16384; }
             return writer ? typePredicateToStringWorker(writer).getText() : ts.usingSingleLineStringWriter(typePredicateToStringWorker);
             function typePredicateToStringWorker(writer) {
-                var predicate = ts.factory.createTypePredicateNode(typePredicate.kind === 2 || typePredicate.kind === 3 ? ts.factory.createToken(127) : undefined, typePredicate.kind === 1 || typePredicate.kind === 3 ? ts.factory.createIdentifier(typePredicate.parameterName) : ts.factory.createThisTypeNode(), typePredicate.type && nodeBuilder.typeToTypeNode(typePredicate.type, enclosingDeclaration, toNodeBuilderFlags(flags) | 70221824 | 512));
+                var predicate = ts.factory.createTypePredicateNode(typePredicate.kind === 2 || typePredicate.kind === 3 ? ts.factory.createToken(128) : undefined, typePredicate.kind === 1 || typePredicate.kind === 3 ? ts.factory.createIdentifier(typePredicate.parameterName) : ts.factory.createThisTypeNode(), typePredicate.type && nodeBuilder.typeToTypeNode(typePredicate.type, enclosingDeclaration, toNodeBuilderFlags(flags) | 70221824 | 512));
                 var printer = ts.createPrinter({ removeComments: true });
                 var sourceFile = enclosingDeclaration && ts.getSourceFileOfNode(enclosingDeclaration);
                 printer.writeNode(4, predicate, sourceFile, writer);
@@ -42369,7 +43310,7 @@
         function getTypeAliasForTypeLiteral(type) {
             if (type.symbol && type.symbol.flags & 2048 && type.symbol.declarations) {
                 var node = ts.walkUpParenthesizedTypes(type.symbol.declarations[0].parent);
-                if (node.kind === 255) {
+                if (node.kind === 257) {
                     return getSymbolOfNode(node);
                 }
             }
@@ -42377,11 +43318,11 @@
         }
         function isTopLevelInExternalModuleAugmentation(node) {
             return node && node.parent &&
-                node.parent.kind === 258 &&
+                node.parent.kind === 260 &&
                 ts.isExternalModuleAugmentation(node.parent.parent);
         }
         function isDefaultBindingContext(location) {
-            return location.kind === 298 || ts.isAmbientModule(location);
+            return location.kind === 300 || ts.isAmbientModule(location);
         }
         function getNameOfSymbolFromNameType(symbol, context) {
             var nameType = getSymbolLinks(symbol).nameType;
@@ -42429,17 +43370,17 @@
                 if (!declaration) {
                     declaration = symbol.declarations[0];
                 }
-                if (declaration.parent && declaration.parent.kind === 250) {
+                if (declaration.parent && declaration.parent.kind === 252) {
                     return ts.declarationNameToString(declaration.parent.name);
                 }
                 switch (declaration.kind) {
-                    case 222:
-                    case 209:
-                    case 210:
+                    case 224:
+                    case 211:
+                    case 212:
                         if (context && !context.encounteredError && !(context.flags & 131072)) {
                             context.encounteredError = true;
                         }
-                        return declaration.kind === 222 ? "(Anonymous class)" : "(Anonymous function)";
+                        return declaration.kind === 224 ? "(Anonymous class)" : "(Anonymous function)";
                 }
             }
             var name = getNameOfSymbolFromNameType(symbol, context);
@@ -42456,68 +43397,68 @@
             return false;
             function determineIfDeclarationIsVisible() {
                 switch (node.kind) {
-                    case 328:
-                    case 335:
-                    case 329:
+                    case 333:
+                    case 340:
+                    case 334:
                         return !!(node.parent && node.parent.parent && node.parent.parent.parent && ts.isSourceFile(node.parent.parent.parent));
-                    case 199:
+                    case 201:
                         return isDeclarationVisible(node.parent.parent);
-                    case 250:
+                    case 252:
                         if (ts.isBindingPattern(node.name) &&
                             !node.name.elements.length) {
                             return false;
                         }
-                    case 257:
-                    case 253:
-                    case 254:
+                    case 259:
                     case 255:
-                    case 252:
                     case 256:
-                    case 261:
+                    case 257:
+                    case 254:
+                    case 258:
+                    case 263:
                         if (ts.isExternalModuleAugmentation(node)) {
                             return true;
                         }
                         var parent = getDeclarationContainer(node);
                         if (!(ts.getCombinedModifierFlags(node) & 1) &&
-                            !(node.kind !== 261 && parent.kind !== 298 && parent.flags & 8388608)) {
+                            !(node.kind !== 263 && parent.kind !== 300 && parent.flags & 8388608)) {
                             return isGlobalSourceFile(parent);
                         }
                         return isDeclarationVisible(parent);
-                    case 164:
-                    case 163:
-                    case 168:
-                    case 169:
-                    case 166:
                     case 165:
+                    case 164:
+                    case 170:
+                    case 171:
+                    case 167:
+                    case 166:
                         if (ts.hasEffectiveModifier(node, 8 | 16)) {
                             return false;
                         }
-                    case 167:
-                    case 171:
-                    case 170:
+                    case 169:
+                    case 173:
                     case 172:
-                    case 161:
-                    case 258:
-                    case 175:
-                    case 176:
-                    case 178:
                     case 174:
-                    case 179:
-                    case 180:
-                    case 183:
-                    case 184:
-                    case 187:
-                    case 193:
-                        return isDeclarationVisible(node.parent);
-                    case 263:
-                    case 264:
-                    case 266:
-                        return false;
-                    case 160:
-                    case 298:
+                    case 162:
                     case 260:
+                    case 177:
+                    case 178:
+                    case 180:
+                    case 176:
+                    case 181:
+                    case 182:
+                    case 185:
+                    case 186:
+                    case 189:
+                    case 195:
+                        return isDeclarationVisible(node.parent);
+                    case 265:
+                    case 266:
+                    case 268:
+                        return false;
+                    case 161:
+                    case 300:
+                    case 262:
                         return true;
-                    case 267:
+                    case 269:
                         return false;
                     default:
                         return false;
@@ -42526,10 +43467,10 @@
         }
         function collectLinkedAliases(node, setVisibility) {
             var exportSymbol;
-            if (node.parent && node.parent.kind === 267) {
+            if (node.parent && node.parent.kind === 269) {
                 exportSymbol = resolveName(node, node.escapedText, 111551 | 788968 | 1920 | 2097152, undefined, node, false);
             }
-            else if (node.parent.kind === 271) {
+            else if (node.parent.kind === 273) {
                 exportSymbol = getTargetOfExportSpecifier(node.parent, 111551 | 788968 | 1920 | 2097152);
             }
             var result;
@@ -42617,12 +43558,12 @@
         function getDeclarationContainer(node) {
             return ts.findAncestor(ts.getRootDeclaration(node), function (node) {
                 switch (node.kind) {
-                    case 250:
-                    case 251:
+                    case 252:
+                    case 253:
+                    case 268:
+                    case 267:
                     case 266:
                     case 265:
-                    case 264:
-                    case 263:
                         return false;
                     default:
                         return true;
@@ -42638,7 +43579,8 @@
             return prop ? getTypeOfSymbol(prop) : undefined;
         }
         function getTypeOfPropertyOrIndexSignature(type, name) {
-            return getTypeOfPropertyOfType(type, name) || isNumericLiteralName(name) && getIndexTypeOfType(type, 1) || getIndexTypeOfType(type, 0) || unknownType;
+            var _a;
+            return getTypeOfPropertyOfType(type, name) || ((_a = getApplicableIndexInfoForName(type, name)) === null || _a === void 0 ? void 0 : _a.type) || unknownType;
         }
         function isTypeAny(type) {
             return type && (type.flags & 1) !== 0;
@@ -42675,9 +43617,7 @@
                     members.set(prop.escapedName, getSpreadSymbol(prop, false));
                 }
             }
-            var stringIndexInfo = getIndexInfoOfType(source, 0);
-            var numberIndexInfo = getIndexInfoOfType(source, 1);
-            var result = createAnonymousType(symbol, members, ts.emptyArray, ts.emptyArray, stringIndexInfo, numberIndexInfo);
+            var result = createAnonymousType(symbol, members, ts.emptyArray, ts.emptyArray, getIndexInfosOfType(source));
             result.objectFlags |= 8388608;
             return result;
         }
@@ -42713,23 +43653,23 @@
         function getParentElementAccess(node) {
             var ancestor = node.parent.parent;
             switch (ancestor.kind) {
-                case 199:
-                case 289:
+                case 201:
+                case 291:
                     return getSyntheticElementAccess(ancestor);
-                case 200:
+                case 202:
                     return getSyntheticElementAccess(node.parent);
-                case 250:
+                case 252:
                     return ancestor.initializer;
-                case 217:
+                case 219:
                     return ancestor.right;
             }
         }
         function getDestructuringPropertyName(node) {
             var parent = node.parent;
-            if (node.kind === 199 && parent.kind === 197) {
+            if (node.kind === 201 && parent.kind === 199) {
                 return getLiteralPropertyNameText(node.propertyName || node.name);
             }
-            if (node.kind === 289 || node.kind === 290) {
+            if (node.kind === 291 || node.kind === 292) {
                 return getLiteralPropertyNameText(node.name);
             }
             return "" + parent.elements.indexOf(node);
@@ -42751,7 +43691,7 @@
                 parentType = getTypeWithFacts(parentType, 524288);
             }
             var type;
-            if (pattern.kind === 197) {
+            if (pattern.kind === 199) {
                 if (declaration.dotDotDotToken) {
                     parentType = getReducedType(parentType);
                     if (parentType.flags & 2 || !isValidSpreadType(parentType)) {
@@ -42770,7 +43710,7 @@
                 else {
                     var name = declaration.propertyName || declaration.name;
                     var indexType = getLiteralTypeFromPropertyName(name);
-                    var declaredType = getIndexedAccessType(parentType, indexType, undefined, name, undefined, undefined, 16);
+                    var declaredType = getIndexedAccessType(parentType, indexType, 32, name);
                     type = getFlowTypeOfDestructuring(declaration, declaredType);
                 }
             }
@@ -42783,9 +43723,9 @@
                         createArrayType(elementType);
                 }
                 else if (isArrayLikeType(parentType)) {
-                    var indexType = getLiteralType(index_2);
-                    var accessFlags = hasDefaultValue(declaration) ? 8 : 0;
-                    var declaredType = getIndexedAccessTypeOrUndefined(parentType, indexType, undefined, declaration.name, accessFlags | 16) || errorType;
+                    var indexType = getNumberLiteralType(index_2);
+                    var accessFlags = 32 | (hasDefaultValue(declaration) ? 16 : 0);
+                    var declaredType = getIndexedAccessTypeOrUndefined(parentType, indexType, accessFlags, declaration.name) || errorType;
                     type = getFlowTypeOfDestructuring(declaration, declaredType);
                 }
                 else {
@@ -42809,34 +43749,36 @@
         }
         function isNullOrUndefined(node) {
             var expr = ts.skipParentheses(node);
-            return expr.kind === 103 || expr.kind === 78 && getResolvedSymbol(expr) === undefinedSymbol;
+            return expr.kind === 104 || expr.kind === 79 && getResolvedSymbol(expr) === undefinedSymbol;
         }
         function isEmptyArrayLiteral(node) {
             var expr = ts.skipParentheses(node);
-            return expr.kind === 200 && expr.elements.length === 0;
+            return expr.kind === 202 && expr.elements.length === 0;
         }
-        function addOptionality(type, optional) {
-            if (optional === void 0) { optional = true; }
-            return strictNullChecks && optional ? getOptionalType(type) : type;
+        function addOptionality(type, isProperty, isOptional) {
+            if (isProperty === void 0) { isProperty = false; }
+            if (isOptional === void 0) { isOptional = true; }
+            return strictNullChecks && isOptional ? getOptionalType(type, isProperty) : type;
         }
         function getTypeForVariableLikeDeclaration(declaration, includeOptionality) {
-            if (ts.isVariableDeclaration(declaration) && declaration.parent.parent.kind === 239) {
+            if (ts.isVariableDeclaration(declaration) && declaration.parent.parent.kind === 241) {
                 var indexType = getIndexType(getNonNullableTypeIfNeeded(checkExpression(declaration.parent.parent.expression)));
                 return indexType.flags & (262144 | 4194304) ? getExtractStringType(indexType) : stringType;
             }
-            if (ts.isVariableDeclaration(declaration) && declaration.parent.parent.kind === 240) {
+            if (ts.isVariableDeclaration(declaration) && declaration.parent.parent.kind === 242) {
                 var forOfStatement = declaration.parent.parent;
                 return checkRightHandSideOfForOf(forOfStatement) || anyType;
             }
             if (ts.isBindingPattern(declaration.parent)) {
                 return getTypeForBindingElement(declaration);
             }
-            var isOptional = includeOptionality && (ts.isParameter(declaration) && isJSDocOptionalParameter(declaration)
-                || isOptionalJSDocPropertyLikeTag(declaration)
-                || !ts.isBindingElement(declaration) && !ts.isVariableDeclaration(declaration) && !!declaration.questionToken);
+            var isProperty = ts.isPropertyDeclaration(declaration) || ts.isPropertySignature(declaration);
+            var isOptional = includeOptionality && (isProperty && !!declaration.questionToken ||
+                ts.isParameter(declaration) && (!!declaration.questionToken || isJSDocOptionalParameter(declaration)) ||
+                isOptionalJSDocPropertyLikeTag(declaration));
             var declaredType = tryGetTypeFromEffectiveTypeNode(declaration);
             if (declaredType) {
-                return addOptionality(declaredType, isOptional);
+                return addOptionality(declaredType, isProperty, isOptional);
             }
             if ((noImplicitAny || ts.isInJSFile(declaration)) &&
                 ts.isVariableDeclaration(declaration) && !ts.isBindingPattern(declaration.name) &&
@@ -42850,8 +43792,8 @@
             }
             if (ts.isParameter(declaration)) {
                 var func = declaration.parent;
-                if (func.kind === 169 && hasBindableName(func)) {
-                    var getter = ts.getDeclarationOfKind(getSymbolOfNode(declaration.parent), 168);
+                if (func.kind === 171 && hasBindableName(func)) {
+                    var getter = ts.getDeclarationOfKind(getSymbolOfNode(declaration.parent), 170);
                     if (getter) {
                         var getterSignature = getSignatureFromDeclaration(getter);
                         var thisParameter = getAccessorThisParameter(func);
@@ -42872,7 +43814,7 @@
                 }
                 var type = declaration.symbol.escapedName === "this" ? getContextualThisParameterType(func) : getContextuallyTypedParameterType(declaration);
                 if (type) {
-                    return addOptionality(type, isOptional);
+                    return addOptionality(type, false, isOptional);
                 }
             }
             if (ts.hasOnlyExpressionInitializer(declaration) && !!declaration.initializer) {
@@ -42883,14 +43825,23 @@
                     }
                 }
                 var type = widenTypeInferredFromInitializer(declaration, checkDeclarationInitializer(declaration));
-                return addOptionality(type, isOptional);
+                return addOptionality(type, isProperty, isOptional);
             }
-            if (ts.isPropertyDeclaration(declaration) && !ts.hasStaticModifier(declaration) && (noImplicitAny || ts.isInJSFile(declaration))) {
-                var constructor = findConstructorDeclaration(declaration.parent);
-                var type = constructor ? getFlowTypeInConstructor(declaration.symbol, constructor) :
-                    ts.getEffectiveModifierFlags(declaration) & 2 ? getTypeOfPropertyInBaseClass(declaration.symbol) :
-                        undefined;
-                return type && addOptionality(type, isOptional);
+            if (ts.isPropertyDeclaration(declaration) && (noImplicitAny || ts.isInJSFile(declaration))) {
+                if (!ts.hasStaticModifier(declaration)) {
+                    var constructor = findConstructorDeclaration(declaration.parent);
+                    var type = constructor ? getFlowTypeInConstructor(declaration.symbol, constructor) :
+                        ts.getEffectiveModifierFlags(declaration) & 2 ? getTypeOfPropertyInBaseClass(declaration.symbol) :
+                            undefined;
+                    return type && addOptionality(type, true, isOptional);
+                }
+                else {
+                    var staticBlocks = ts.filter(declaration.parent.members, ts.isClassStaticBlockDeclaration);
+                    var type = staticBlocks.length ? getFlowTypeInStaticBlocks(declaration.symbol, staticBlocks) :
+                        ts.getEffectiveModifierFlags(declaration) & 2 ? getTypeOfPropertyInBaseClass(declaration.symbol) :
+                            undefined;
+                    return type && addOptionality(type, true, isOptional);
+                }
             }
             if (ts.isJsxAttribute(declaration)) {
                 return trueType;
@@ -42908,7 +43859,7 @@
                     links.isConstructorDeclaredProperty = !!getDeclaringConstructor(symbol) && ts.every(symbol.declarations, function (declaration) {
                         return ts.isBinaryExpression(declaration) &&
                             isPossiblyAliasedThisProperty(declaration) &&
-                            (declaration.left.kind !== 203 || ts.isStringOrNumericLiteralLike(declaration.left.argumentExpression)) &&
+                            (declaration.left.kind !== 205 || ts.isStringOrNumericLiteralLike(declaration.left.argumentExpression)) &&
                             !getAnnotatedTypeForAssignmentDeclaration(undefined, declaration, symbol, declaration);
                     });
                 }
@@ -42928,7 +43879,7 @@
             for (var _i = 0, _a = symbol.declarations; _i < _a.length; _i++) {
                 var declaration = _a[_i];
                 var container = ts.getThisContainer(declaration, false);
-                if (container && (container.kind === 167 || isJSConstructor(container))) {
+                if (container && (container.kind === 169 || isJSConstructor(container))) {
                     return container;
                 }
             }
@@ -42949,6 +43900,26 @@
             reference.flowNode = file.endFlowNode;
             return getFlowTypeOfReference(reference, autoType, undefinedType);
         }
+        function getFlowTypeInStaticBlocks(symbol, staticBlocks) {
+            var accessName = ts.startsWith(symbol.escapedName, "__#")
+                ? ts.factory.createPrivateIdentifier(symbol.escapedName.split("@")[1])
+                : ts.unescapeLeadingUnderscores(symbol.escapedName);
+            for (var _i = 0, staticBlocks_1 = staticBlocks; _i < staticBlocks_1.length; _i++) {
+                var staticBlock = staticBlocks_1[_i];
+                var reference = ts.factory.createPropertyAccessExpression(ts.factory.createThis(), accessName);
+                ts.setParent(reference.expression, reference);
+                ts.setParent(reference, staticBlock);
+                reference.flowNode = staticBlock.returnFlowNode;
+                var flowType = getFlowTypeOfProperty(reference, symbol);
+                if (noImplicitAny && (flowType === autoType || flowType === autoArrayType)) {
+                    error(symbol.valueDeclaration, ts.Diagnostics.Member_0_implicitly_has_an_1_type, symbolToString(symbol), typeToString(flowType));
+                }
+                if (everyType(flowType, isNullableType)) {
+                    continue;
+                }
+                return convertAutoToAny(flowType);
+            }
+        }
         function getFlowTypeInConstructor(symbol, constructor) {
             var accessName = ts.startsWith(symbol.escapedName, "__#")
                 ? ts.factory.createPrivateIdentifier(symbol.escapedName.split("@")[1])
@@ -43034,7 +44005,7 @@
                     type = getUnionType(sourceTypes, 2);
                 }
             }
-            var widened = getWidenedType(addOptionality(type, definedInMethod && !definedInConstructor));
+            var widened = getWidenedType(addOptionality(type, false, definedInMethod && !definedInConstructor));
             if (symbol.valueDeclaration && filterType(widened, function (t) { return !!(t.flags & ~98304); }) === neverType) {
                 reportImplicitAny(symbol.valueDeclaration, anyType);
                 return anyType;
@@ -43058,7 +44029,7 @@
             if ((_b = s === null || s === void 0 ? void 0 : s.exports) === null || _b === void 0 ? void 0 : _b.size) {
                 mergeSymbolTable(exports, s.exports);
             }
-            var type = createAnonymousType(symbol, exports, ts.emptyArray, ts.emptyArray, undefined, undefined);
+            var type = createAnonymousType(symbol, exports, ts.emptyArray, ts.emptyArray, ts.emptyArray);
             type.objectFlags |= 8192;
             return type;
         }
@@ -43077,7 +44048,10 @@
             if ((_a = symbol.parent) === null || _a === void 0 ? void 0 : _a.valueDeclaration) {
                 var typeNode_2 = ts.getEffectiveTypeAnnotationNode(symbol.parent.valueDeclaration);
                 if (typeNode_2) {
-                    return getTypeOfPropertyOfType(getTypeFromTypeNode(typeNode_2), symbol.escapedName);
+                    var annotationSymbol = getPropertyOfType(getTypeFromTypeNode(typeNode_2), symbol.escapedName);
+                    if (annotationSymbol) {
+                        return getNonMissingTypeOfSymbol(annotationSymbol);
+                    }
                 }
             }
             return declaredType;
@@ -43147,7 +44121,7 @@
                         members_4.set(name, s);
                     }
                 });
-                var result = createAnonymousType(initialSize !== members_4.size ? undefined : exportedType.symbol, members_4, exportedType.callSignatures, exportedType.constructSignatures, exportedType.stringIndexInfo, exportedType.numberIndexInfo);
+                var result = createAnonymousType(initialSize !== members_4.size ? undefined : exportedType.symbol, members_4, exportedType.callSignatures, exportedType.constructSignatures, exportedType.indexInfos);
                 result.objectFlags |= (ts.getObjectFlags(type) & 8192);
                 if (result.symbol && result.symbol.flags & 32 && type === getDeclaredTypeOfClassOrInterface(result.symbol)) {
                     result.objectFlags |= 16777216;
@@ -43162,14 +44136,14 @@
         }
         function containsSameNamedThisProperty(thisProperty, expression) {
             return ts.isPropertyAccessExpression(thisProperty)
-                && thisProperty.expression.kind === 107
+                && thisProperty.expression.kind === 108
                 && ts.forEachChildRecursively(expression, function (n) { return isMatchingReference(thisProperty, n); });
         }
         function isDeclarationInConstructor(expression) {
             var thisContainer = ts.getThisContainer(expression, false);
-            return thisContainer.kind === 167 ||
-                thisContainer.kind === 252 ||
-                (thisContainer.kind === 209 && !ts.isPrototypePropertyAssignment(thisContainer.parent));
+            return thisContainer.kind === 169 ||
+                thisContainer.kind === 254 ||
+                (thisContainer.kind === 211 && !ts.isPrototypePropertyAssignment(thisContainer.parent));
         }
         function getConstructorDefinedThisAssignmentTypes(types, declarations) {
             ts.Debug.assert(types.length === declarations.length);
@@ -43200,7 +44174,7 @@
             ts.forEach(pattern.elements, function (e) {
                 var name = e.propertyName || e.name;
                 if (e.dotDotDotToken) {
-                    stringIndexInfo = createIndexInfo(anyType, false);
+                    stringIndexInfo = createIndexInfo(stringType, anyType, false);
                     return;
                 }
                 var exprType = getLiteralTypeFromPropertyName(name);
@@ -43215,7 +44189,7 @@
                 symbol.bindingElement = e;
                 members.set(symbol.escapedName, symbol);
             });
-            var result = createAnonymousType(undefined, members, ts.emptyArray, ts.emptyArray, stringIndexInfo, undefined);
+            var result = createAnonymousType(undefined, members, ts.emptyArray, ts.emptyArray, stringIndexInfo ? [stringIndexInfo] : ts.emptyArray);
             result.objectFlags |= objectFlags;
             if (includePatternInType) {
                 result.pattern = pattern;
@@ -43226,7 +44200,7 @@
         function getTypeFromArrayBindingPattern(pattern, includePatternInType, reportErrors) {
             var elements = pattern.elements;
             var lastElement = ts.lastOrUndefined(elements);
-            var restElement = lastElement && lastElement.kind === 199 && lastElement.dotDotDotToken ? lastElement : undefined;
+            var restElement = lastElement && lastElement.kind === 201 && lastElement.dotDotDotToken ? lastElement : undefined;
             if (elements.length === 0 || elements.length === 1 && restElement) {
                 return languageVersion >= 2 ? createIterableType(anyType) : anyArrayType;
             }
@@ -43244,7 +44218,7 @@
         function getTypeFromBindingPattern(pattern, includePatternInType, reportErrors) {
             if (includePatternInType === void 0) { includePatternInType = false; }
             if (reportErrors === void 0) { reportErrors = false; }
-            return pattern.kind === 197
+            return pattern.kind === 199
                 ? getTypeFromObjectBindingPattern(pattern, includePatternInType, reportErrors)
                 : getTypeFromArrayBindingPattern(pattern, includePatternInType, reportErrors);
         }
@@ -43279,7 +44253,7 @@
         }
         function declarationBelongsToPrivateAmbientMember(declaration) {
             var root = ts.getRootDeclaration(declaration);
-            var memberDeclaration = root.kind === 161 ? root.parent : root;
+            var memberDeclaration = root.kind === 162 ? root.parent : root;
             return isPrivateWithinAmbient(memberDeclaration);
         }
         function tryGetTypeFromEffectiveTypeNode(declaration) {
@@ -43319,14 +44293,14 @@
                     result.exports = new ts.Map(fileSymbol.exports);
                 var members = ts.createSymbolTable();
                 members.set("exports", result);
-                return createAnonymousType(symbol, members, ts.emptyArray, ts.emptyArray, undefined, undefined);
+                return createAnonymousType(symbol, members, ts.emptyArray, ts.emptyArray, ts.emptyArray);
             }
             ts.Debug.assertIsDefined(symbol.valueDeclaration);
             var declaration = symbol.valueDeclaration;
             if (ts.isCatchClauseVariableDeclarationOrBindingElement(declaration)) {
                 var typeNode = ts.getEffectiveTypeAnnotationNode(declaration);
                 if (typeNode === undefined) {
-                    return anyType;
+                    return useUnknownInCatchVariables ? unknownType : anyType;
                 }
                 var type_1 = getTypeOfNode(typeNode);
                 return isTypeAny(type_1) || type_1 === unknownType ? type_1 : errorType;
@@ -43344,7 +44318,7 @@
                 return reportCircularityError(symbol);
             }
             var type;
-            if (declaration.kind === 267) {
+            if (declaration.kind === 269) {
                 type = widenTypeForVariableLikeDeclaration(checkExpressionCached(declaration.expression), declaration);
             }
             else if (ts.isBinaryExpression(declaration) ||
@@ -43411,7 +44385,7 @@
         }
         function getAnnotatedAccessorTypeNode(accessor) {
             if (accessor) {
-                if (accessor.kind === 168) {
+                if (accessor.kind === 170) {
                     var getterTypeAnnotation = ts.getEffectiveReturnTypeNode(accessor);
                     return getterTypeAnnotation;
                 }
@@ -43450,7 +44424,7 @@
             if (!popTypeResolution()) {
                 type = anyType;
                 if (noImplicitAny) {
-                    var getter = ts.getDeclarationOfKind(symbol, 168);
+                    var getter = ts.getDeclarationOfKind(symbol, 170);
                     error(getter, ts.Diagnostics._0_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_referenced_directly_or_indirectly_in_one_of_its_return_expressions, symbolToString(symbol));
                 }
             }
@@ -43458,8 +44432,8 @@
         }
         function resolveTypeOfAccessors(symbol, writing) {
             if (writing === void 0) { writing = false; }
-            var getter = ts.getDeclarationOfKind(symbol, 168);
-            var setter = ts.getDeclarationOfKind(symbol, 169);
+            var getter = ts.getDeclarationOfKind(symbol, 170);
+            var setter = ts.getDeclarationOfKind(symbol, 171);
             var setterType = getAnnotatedAccessorType(setter);
             if (writing && setterType) {
                 return instantiateTypeIfNeeded(setterType, symbol);
@@ -43529,9 +44503,9 @@
             if (symbol.flags & 1536 && ts.isShorthandAmbientModuleSymbol(symbol)) {
                 return anyType;
             }
-            else if (declaration && (declaration.kind === 217 ||
+            else if (declaration && (declaration.kind === 219 ||
                 ts.isAccessExpression(declaration) &&
-                    declaration.parent.kind === 217)) {
+                    declaration.parent.kind === 219)) {
                 return getWidenedTypeForAssignmentDeclaration(symbol);
             }
             else if (symbol.flags & 512 && declaration && ts.isSourceFile(declaration) && declaration.commonJsModuleIndicator) {
@@ -43593,7 +44567,7 @@
                 error(symbol.valueDeclaration, ts.Diagnostics._0_is_referenced_directly_or_indirectly_in_its_own_type_annotation, symbolToString(symbol));
                 return errorType;
             }
-            if (noImplicitAny && (declaration.kind !== 161 || declaration.initializer)) {
+            if (noImplicitAny && (declaration.kind !== 162 || declaration.initializer)) {
                 error(symbol.valueDeclaration, ts.Diagnostics._0_implicitly_has_type_any_because_it_does_not_have_a_type_annotation_and_is_referenced_directly_or_indirectly_in_its_own_initializer, symbolToString(symbol));
             }
             return anyType;
@@ -43647,6 +44621,9 @@
             }
             return errorType;
         }
+        function getNonMissingTypeOfSymbol(symbol) {
+            return removeMissingType(getTypeOfSymbol(symbol), !!(symbol.flags & 16777216));
+        }
         function isReferenceToType(type, target) {
             return type !== undefined
                 && target !== undefined
@@ -43692,46 +44669,46 @@
                     return undefined;
                 }
                 switch (node.kind) {
-                    case 253:
-                    case 222:
-                    case 254:
-                    case 170:
-                    case 171:
-                    case 165:
-                    case 175:
-                    case 176:
-                    case 309:
-                    case 252:
-                    case 166:
-                    case 209:
-                    case 210:
                     case 255:
+                    case 224:
+                    case 256:
+                    case 172:
+                    case 173:
+                    case 166:
+                    case 177:
+                    case 178:
+                    case 312:
+                    case 254:
+                    case 167:
+                    case 211:
+                    case 212:
+                    case 257:
+                    case 339:
+                    case 340:
                     case 334:
-                    case 335:
-                    case 329:
-                    case 328:
-                    case 191:
-                    case 185: {
+                    case 333:
+                    case 193:
+                    case 187: {
                         var outerTypeParameters = getOuterTypeParameters(node, includeThisTypes);
-                        if (node.kind === 191) {
+                        if (node.kind === 193) {
                             return ts.append(outerTypeParameters, getDeclaredTypeOfTypeParameter(getSymbolOfNode(node.typeParameter)));
                         }
-                        else if (node.kind === 185) {
+                        else if (node.kind === 187) {
                             return ts.concatenate(outerTypeParameters, getInferTypeParameters(node));
                         }
                         var outerAndOwnTypeParameters = appendTypeParameters(outerTypeParameters, ts.getEffectiveTypeParameterDeclarations(node));
                         var thisType = includeThisTypes &&
-                            (node.kind === 253 || node.kind === 222 || node.kind === 254 || isJSConstructor(node)) &&
+                            (node.kind === 255 || node.kind === 224 || node.kind === 256 || isJSConstructor(node)) &&
                             getDeclaredTypeOfClassOrInterface(getSymbolOfNode(node)).thisType;
                         return thisType ? ts.append(outerAndOwnTypeParameters, thisType) : outerAndOwnTypeParameters;
                     }
-                    case 330:
+                    case 335:
                         var paramSymbol = ts.getParameterSymbolFromJSDoc(node);
                         if (paramSymbol) {
                             node = paramSymbol.valueDeclaration;
                         }
                         break;
-                    case 312: {
+                    case 315: {
                         var outerTypeParameters = getOuterTypeParameters(node, includeThisTypes);
                         return node.tags
                             ? appendTypeParameters(outerTypeParameters, ts.flatMap(node.tags, function (t) { return ts.isJSDocTemplateTag(t) ? t.typeParameters : undefined; }))
@@ -43741,7 +44718,7 @@
             }
         }
         function getOuterTypeParametersOfClassOrInterface(symbol) {
-            var declaration = symbol.flags & 32 ? symbol.valueDeclaration : ts.getDeclarationOfKind(symbol, 254);
+            var declaration = symbol.flags & 32 ? symbol.valueDeclaration : ts.getDeclarationOfKind(symbol, 256);
             ts.Debug.assert(!!declaration, "Class was missing valueDeclaration -OR- non-class had no interface declarations");
             return getOuterTypeParameters(declaration);
         }
@@ -43752,9 +44729,9 @@
             var result;
             for (var _i = 0, _a = symbol.declarations; _i < _a.length; _i++) {
                 var node = _a[_i];
-                if (node.kind === 254 ||
-                    node.kind === 253 ||
-                    node.kind === 222 ||
+                if (node.kind === 256 ||
+                    node.kind === 255 ||
+                    node.kind === 224 ||
                     isJSConstructor(node) ||
                     ts.isTypeAlias(node)) {
                     var declaration = node;
@@ -43891,7 +44868,7 @@
                     if (!popTypeResolution() && type.symbol.declarations) {
                         for (var _i = 0, _a = type.symbol.declarations; _i < _a.length; _i++) {
                             var declaration = _a[_i];
-                            if (declaration.kind === 253 || declaration.kind === 254) {
+                            if (declaration.kind === 255 || declaration.kind === 256) {
                                 reportCircularBaseType(declaration, type);
                             }
                         }
@@ -43972,7 +44949,7 @@
             if (type.symbol.declarations) {
                 for (var _i = 0, _a = type.symbol.declarations; _i < _a.length; _i++) {
                     var declaration = _a[_i];
-                    if (declaration.kind === 254 && ts.getInterfaceBaseTypeNodes(declaration)) {
+                    if (declaration.kind === 256 && ts.getInterfaceBaseTypeNodes(declaration)) {
                         for (var _b = 0, _c = ts.getInterfaceBaseTypeNodes(declaration); _b < _c.length; _b++) {
                             var node = _c[_b];
                             var baseType = getReducedType(getTypeFromTypeNode(node));
@@ -44005,7 +44982,7 @@
             }
             for (var _i = 0, _a = symbol.declarations; _i < _a.length; _i++) {
                 var declaration = _a[_i];
-                if (declaration.kind === 254) {
+                if (declaration.kind === 256) {
                     if (declaration.flags & 128) {
                         return false;
                     }
@@ -44073,7 +45050,12 @@
                 }
                 else {
                     type = errorType;
-                    error(ts.isNamedDeclaration(declaration) ? declaration.name : declaration || declaration, ts.Diagnostics.Type_alias_0_circularly_references_itself, symbolToString(symbol));
+                    if (declaration.kind === 334) {
+                        error(declaration.typeExpression.type, ts.Diagnostics.Type_alias_0_circularly_references_itself, symbolToString(symbol));
+                    }
+                    else {
+                        error(ts.isNamedDeclaration(declaration) ? declaration.name : declaration || declaration, ts.Diagnostics.Type_alias_0_circularly_references_itself, symbolToString(symbol));
+                    }
                 }
                 links.declaredType = type;
             }
@@ -44083,7 +45065,7 @@
             if (ts.isStringLiteralLike(expr)) {
                 return true;
             }
-            else if (expr.kind === 217) {
+            else if (expr.kind === 219) {
                 return isStringConcatExpression(expr.left) && isStringConcatExpression(expr.right);
             }
             return false;
@@ -44098,12 +45080,12 @@
                 case 8:
                 case 14:
                     return true;
-                case 215:
+                case 217:
                     return expr.operator === 40 &&
                         expr.operand.kind === 8;
-                case 78:
+                case 79:
                     return ts.nodeIsMissing(expr) || !!getSymbolOfNode(member.parent).exports.get(expr.escapedText);
-                case 217:
+                case 219:
                     return isStringConcatExpression(expr);
                 default:
                     return false;
@@ -44118,7 +45100,7 @@
             if (symbol.declarations) {
                 for (var _i = 0, _a = symbol.declarations; _i < _a.length; _i++) {
                     var declaration = _a[_i];
-                    if (declaration.kind === 256) {
+                    if (declaration.kind === 258) {
                         for (var _b = 0, _c = declaration.members; _b < _c.length; _b++) {
                             var member = _c[_b];
                             if (member.initializer && ts.isStringLiteralLike(member.initializer)) {
@@ -44147,11 +45129,11 @@
                 if (symbol.declarations) {
                     for (var _i = 0, _a = symbol.declarations; _i < _a.length; _i++) {
                         var declaration = _a[_i];
-                        if (declaration.kind === 256) {
+                        if (declaration.kind === 258) {
                             for (var _b = 0, _c = declaration.members; _b < _c.length; _b++) {
                                 var member = _c[_b];
                                 var value = getEnumMemberValue(member);
-                                var memberType = getFreshTypeOfLiteralType(getLiteralType(value !== undefined ? value : 0, enumCount, getSymbolOfNode(member)));
+                                var memberType = getFreshTypeOfLiteralType(getEnumLiteralType(value !== undefined ? value : 0, enumCount, getSymbolOfNode(member)));
                                 getSymbolLinks(getSymbolOfNode(member)).declaredType = memberType;
                                 memberTypeList.push(getRegularTypeOfLiteralType(memberType));
                             }
@@ -44215,22 +45197,22 @@
         }
         function isThislessType(node) {
             switch (node.kind) {
-                case 128:
-                case 152:
-                case 147:
-                case 144:
-                case 155:
-                case 131:
+                case 129:
+                case 153:
                 case 148:
                 case 145:
-                case 113:
-                case 150:
-                case 141:
-                case 192:
+                case 156:
+                case 132:
+                case 149:
+                case 146:
+                case 114:
+                case 151:
+                case 142:
+                case 194:
                     return true;
-                case 179:
+                case 181:
                     return isThislessType(node.elementType);
-                case 174:
+                case 176:
                     return !node.typeArguments || node.typeArguments.every(isThislessType);
             }
             return false;
@@ -44246,7 +45228,7 @@
         function isThislessFunctionLikeDeclaration(node) {
             var returnType = ts.getEffectiveReturnTypeNode(node);
             var typeParameters = ts.getEffectiveTypeParameterDeclarations(node);
-            return (node.kind === 167 || (!!returnType && isThislessType(returnType))) &&
+            return (node.kind === 169 || (!!returnType && isThislessType(returnType))) &&
                 node.parameters.every(isThislessVariableLikeDeclaration) &&
                 typeParameters.every(isThislessTypeParameter);
         }
@@ -44255,14 +45237,14 @@
                 var declaration = symbol.declarations[0];
                 if (declaration) {
                     switch (declaration.kind) {
-                        case 164:
-                        case 163:
-                            return isThislessVariableLikeDeclaration(declaration);
-                        case 166:
                         case 165:
+                        case 164:
+                            return isThislessVariableLikeDeclaration(declaration);
                         case 167:
-                        case 168:
+                        case 166:
                         case 169:
+                        case 170:
+                        case 171:
                             return isThislessFunctionLikeDeclaration(declaration);
                     }
                 }
@@ -44286,7 +45268,7 @@
             }
         }
         function isStaticPrivateIdentifierProperty(s) {
-            return !!s.valueDeclaration && ts.isPrivateIdentifierClassElementDeclaration(s.valueDeclaration) && ts.hasSyntacticModifier(s.valueDeclaration, 32);
+            return !!s.valueDeclaration && ts.isPrivateIdentifierClassElementDeclaration(s.valueDeclaration) && ts.isStatic(s.valueDeclaration);
         }
         function resolveDeclaredMembers(type) {
             if (!type.declaredProperties) {
@@ -44295,10 +45277,10 @@
                 type.declaredProperties = getNamedMembers(members);
                 type.declaredCallSignatures = ts.emptyArray;
                 type.declaredConstructSignatures = ts.emptyArray;
+                type.declaredIndexInfos = ts.emptyArray;
                 type.declaredCallSignatures = getSignaturesOfSymbol(members.get("__call"));
                 type.declaredConstructSignatures = getSignaturesOfSymbol(members.get("__new"));
-                type.declaredStringIndexInfo = getIndexInfoOfSymbol(symbol, 0);
-                type.declaredNumberIndexInfo = getIndexInfoOfSymbol(symbol, 1);
+                type.declaredIndexInfos = getIndexInfosOfSymbol(symbol);
             }
             return type;
         }
@@ -44344,7 +45326,7 @@
             if (!symbol.declarations) {
                 symbol.declarations = [member];
             }
-            else {
+            else if (!member.symbol.isReplaceableByMethod) {
                 symbol.declarations.push(member);
             }
             if (symbolFlags & 111551) {
@@ -44390,8 +45372,8 @@
         function getResolvedMembersOrExportsOfSymbol(symbol, resolutionKind) {
             var links = getSymbolLinks(symbol);
             if (!links[resolutionKind]) {
-                var isStatic = resolutionKind === "resolvedExports";
-                var earlySymbols = !isStatic ? symbol.members :
+                var isStatic_1 = resolutionKind === "resolvedExports";
+                var earlySymbols = !isStatic_1 ? symbol.members :
                     symbol.flags & 1536 ? getExportsOfModuleWorker(symbol) :
                         symbol.exports;
                 links[resolutionKind] = earlySymbols || emptySymbols;
@@ -44402,7 +45384,7 @@
                     if (members) {
                         for (var _b = 0, members_5 = members; _b < members_5.length; _b++) {
                             var member = members_5[_b];
-                            if (isStatic === ts.hasStaticModifier(member) && hasLateBindableName(member)) {
+                            if (isStatic_1 === ts.hasStaticModifier(member) && hasLateBindableName(member)) {
                                 lateBindMember(symbol, earlySymbols, lateSymbols, member);
                             }
                         }
@@ -44418,7 +45400,7 @@
                             || ts.isBinaryExpression(member) && isPossiblyAliasedThisProperty(member, assignmentKind)
                             || assignmentKind === 9
                             || assignmentKind === 6;
-                        if (isStatic === !isInstanceMember && hasLateBindableName(member)) {
+                        if (isStatic_1 === !isInstanceMember && hasLateBindableName(member)) {
                             lateBindMember(symbol, earlySymbols, lateSymbols, member);
                         }
                     }
@@ -44468,29 +45450,26 @@
             var members;
             var callSignatures;
             var constructSignatures;
-            var stringIndexInfo;
-            var numberIndexInfo;
+            var indexInfos;
             if (ts.rangeEquals(typeParameters, typeArguments, 0, typeParameters.length)) {
                 members = source.symbol ? getMembersOfSymbol(source.symbol) : ts.createSymbolTable(source.declaredProperties);
                 callSignatures = source.declaredCallSignatures;
                 constructSignatures = source.declaredConstructSignatures;
-                stringIndexInfo = source.declaredStringIndexInfo;
-                numberIndexInfo = source.declaredNumberIndexInfo;
+                indexInfos = source.declaredIndexInfos;
             }
             else {
                 mapper = createTypeMapper(typeParameters, typeArguments);
                 members = createInstantiatedSymbolTable(source.declaredProperties, mapper, typeParameters.length === 1);
                 callSignatures = instantiateSignatures(source.declaredCallSignatures, mapper);
                 constructSignatures = instantiateSignatures(source.declaredConstructSignatures, mapper);
-                stringIndexInfo = instantiateIndexInfo(source.declaredStringIndexInfo, mapper);
-                numberIndexInfo = instantiateIndexInfo(source.declaredNumberIndexInfo, mapper);
+                indexInfos = instantiateIndexInfos(source.declaredIndexInfos, mapper);
             }
             var baseTypes = getBaseTypes(source);
             if (baseTypes.length) {
                 if (source.symbol && members === getMembersOfSymbol(source.symbol)) {
                     members = ts.createSymbolTable(source.declaredProperties);
                 }
-                setStructuredTypeMembers(type, members, callSignatures, constructSignatures, stringIndexInfo, numberIndexInfo);
+                setStructuredTypeMembers(type, members, callSignatures, constructSignatures, indexInfos);
                 var thisArgument = ts.lastOrUndefined(typeArguments);
                 for (var _i = 0, baseTypes_1 = baseTypes; _i < baseTypes_1.length; _i++) {
                     var baseType = baseTypes_1[_i];
@@ -44498,15 +45477,11 @@
                     addInheritedMembers(members, getPropertiesOfType(instantiatedBaseType));
                     callSignatures = ts.concatenate(callSignatures, getSignaturesOfType(instantiatedBaseType, 0));
                     constructSignatures = ts.concatenate(constructSignatures, getSignaturesOfType(instantiatedBaseType, 1));
-                    if (!stringIndexInfo) {
-                        stringIndexInfo = instantiatedBaseType === anyType ?
-                            createIndexInfo(anyType, false) :
-                            getIndexInfoOfType(instantiatedBaseType, 0);
-                    }
-                    numberIndexInfo = numberIndexInfo || getIndexInfoOfType(instantiatedBaseType, 1);
+                    var inheritedIndexInfos = instantiatedBaseType !== anyType ? getIndexInfosOfType(instantiatedBaseType) : [createIndexInfo(stringType, anyType, false)];
+                    indexInfos = ts.concatenate(indexInfos, ts.filter(inheritedIndexInfos, function (info) { return !findIndexInfo(indexInfos, info.keyType); }));
                 }
             }
-            setStructuredTypeMembers(type, members, callSignatures, constructSignatures, stringIndexInfo, numberIndexInfo);
+            setStructuredTypeMembers(type, members, callSignatures, constructSignatures, indexInfos);
         }
         function resolveClassOrInterfaceMembers(type) {
             resolveObjectTypeMembers(type, resolveDeclaredMembers(type), ts.emptyArray, ts.emptyArray);
@@ -44789,36 +45764,33 @@
             }
             return result;
         }
-        function getUnionIndexInfo(types, kind) {
-            var indexTypes = [];
-            var isAnyReadonly = false;
-            for (var _i = 0, types_4 = types; _i < types_4.length; _i++) {
-                var type = types_4[_i];
-                var indexInfo = getIndexInfoOfType(getApparentType(type), kind);
-                if (!indexInfo) {
-                    return undefined;
+        function getUnionIndexInfos(types) {
+            var sourceInfos = getIndexInfosOfType(types[0]);
+            if (sourceInfos) {
+                var result = [];
+                var _loop_11 = function (info) {
+                    var indexType = info.keyType;
+                    if (ts.every(types, function (t) { return !!getIndexInfoOfType(t, indexType); })) {
+                        result.push(createIndexInfo(indexType, getUnionType(ts.map(types, function (t) { return getIndexTypeOfType(t, indexType); })), ts.some(types, function (t) { return getIndexInfoOfType(t, indexType).isReadonly; })));
+                    }
+                };
+                for (var _i = 0, sourceInfos_1 = sourceInfos; _i < sourceInfos_1.length; _i++) {
+                    var info = sourceInfos_1[_i];
+                    _loop_11(info);
                 }
-                indexTypes.push(indexInfo.type);
-                isAnyReadonly = isAnyReadonly || indexInfo.isReadonly;
+                return result;
             }
-            return createIndexInfo(getUnionType(indexTypes, 2), isAnyReadonly);
+            return ts.emptyArray;
         }
         function resolveUnionTypeMembers(type) {
             var callSignatures = getUnionSignatures(ts.map(type.types, function (t) { return t === globalFunctionType ? [unknownSignature] : getSignaturesOfType(t, 0); }));
             var constructSignatures = getUnionSignatures(ts.map(type.types, function (t) { return getSignaturesOfType(t, 1); }));
-            var stringIndexInfo = getUnionIndexInfo(type.types, 0);
-            var numberIndexInfo = getUnionIndexInfo(type.types, 1);
-            setStructuredTypeMembers(type, emptySymbols, callSignatures, constructSignatures, stringIndexInfo, numberIndexInfo);
+            var indexInfos = getUnionIndexInfos(type.types);
+            setStructuredTypeMembers(type, emptySymbols, callSignatures, constructSignatures, indexInfos);
         }
         function intersectTypes(type1, type2) {
             return !type1 ? type2 : !type2 ? type1 : getIntersectionType([type1, type2]);
         }
-        function intersectIndexInfos(info1, info2) {
-            return !info1 ? info2 : !info2 ? info1 : createIndexInfo(getIntersectionType([info1.type, info2.type]), info1.isReadonly && info2.isReadonly);
-        }
-        function unionSpreadIndexInfos(info1, info2) {
-            return info1 && info2 && createIndexInfo(getUnionType([info1.type, info2.type]), info1.isReadonly || info2.isReadonly);
-        }
         function findMixins(types) {
             var constructorTypeCount = ts.countWhere(types, function (t) { return getSignaturesOfType(t, 1).length > 0; });
             var mixinFlags = ts.map(types, isMixinConstructorType);
@@ -44843,12 +45815,11 @@
         function resolveIntersectionTypeMembers(type) {
             var callSignatures;
             var constructSignatures;
-            var stringIndexInfo;
-            var numberIndexInfo;
+            var indexInfos;
             var types = type.types;
             var mixinFlags = findMixins(types);
             var mixinCount = ts.countWhere(mixinFlags, function (b) { return b; });
-            var _loop_11 = function (i) {
+            var _loop_12 = function (i) {
                 var t = type.types[i];
                 if (!mixinFlags[i]) {
                     var signatures = getSignaturesOfType(t, 1);
@@ -44862,50 +45833,58 @@
                     constructSignatures = appendSignatures(constructSignatures, signatures);
                 }
                 callSignatures = appendSignatures(callSignatures, getSignaturesOfType(t, 0));
-                stringIndexInfo = intersectIndexInfos(stringIndexInfo, getIndexInfoOfType(t, 0));
-                numberIndexInfo = intersectIndexInfos(numberIndexInfo, getIndexInfoOfType(t, 1));
+                indexInfos = ts.reduceLeft(getIndexInfosOfType(t), function (infos, newInfo) { return appendIndexInfo(infos, newInfo, false); }, indexInfos);
             };
             for (var i = 0; i < types.length; i++) {
-                _loop_11(i);
+                _loop_12(i);
             }
-            setStructuredTypeMembers(type, emptySymbols, callSignatures || ts.emptyArray, constructSignatures || ts.emptyArray, stringIndexInfo, numberIndexInfo);
+            setStructuredTypeMembers(type, emptySymbols, callSignatures || ts.emptyArray, constructSignatures || ts.emptyArray, indexInfos || ts.emptyArray);
         }
         function appendSignatures(signatures, newSignatures) {
-            var _loop_12 = function (sig) {
+            var _loop_13 = function (sig) {
                 if (!signatures || ts.every(signatures, function (s) { return !compareSignaturesIdentical(s, sig, false, false, false, compareTypesIdentical); })) {
                     signatures = ts.append(signatures, sig);
                 }
             };
             for (var _i = 0, newSignatures_1 = newSignatures; _i < newSignatures_1.length; _i++) {
                 var sig = newSignatures_1[_i];
-                _loop_12(sig);
+                _loop_13(sig);
             }
             return signatures;
         }
+        function appendIndexInfo(indexInfos, newInfo, union) {
+            if (indexInfos) {
+                for (var i = 0; i < indexInfos.length; i++) {
+                    var info = indexInfos[i];
+                    if (info.keyType === newInfo.keyType) {
+                        indexInfos[i] = createIndexInfo(info.keyType, union ? getUnionType([info.type, newInfo.type]) : getIntersectionType([info.type, newInfo.type]), union ? info.isReadonly || newInfo.isReadonly : info.isReadonly && newInfo.isReadonly);
+                        return indexInfos;
+                    }
+                }
+            }
+            return ts.append(indexInfos, newInfo);
+        }
         function resolveAnonymousTypeMembers(type) {
             var symbol = getMergedSymbol(type.symbol);
             if (type.target) {
-                setStructuredTypeMembers(type, emptySymbols, ts.emptyArray, ts.emptyArray, undefined, undefined);
+                setStructuredTypeMembers(type, emptySymbols, ts.emptyArray, ts.emptyArray, ts.emptyArray);
                 var members = createInstantiatedSymbolTable(getPropertiesOfObjectType(type.target), type.mapper, false);
                 var callSignatures = instantiateSignatures(getSignaturesOfType(type.target, 0), type.mapper);
                 var constructSignatures = instantiateSignatures(getSignaturesOfType(type.target, 1), type.mapper);
-                var stringIndexInfo = instantiateIndexInfo(getIndexInfoOfType(type.target, 0), type.mapper);
-                var numberIndexInfo = instantiateIndexInfo(getIndexInfoOfType(type.target, 1), type.mapper);
-                setStructuredTypeMembers(type, members, callSignatures, constructSignatures, stringIndexInfo, numberIndexInfo);
+                var indexInfos = instantiateIndexInfos(getIndexInfosOfType(type.target), type.mapper);
+                setStructuredTypeMembers(type, members, callSignatures, constructSignatures, indexInfos);
             }
             else if (symbol.flags & 2048) {
-                setStructuredTypeMembers(type, emptySymbols, ts.emptyArray, ts.emptyArray, undefined, undefined);
+                setStructuredTypeMembers(type, emptySymbols, ts.emptyArray, ts.emptyArray, ts.emptyArray);
                 var members = getMembersOfSymbol(symbol);
                 var callSignatures = getSignaturesOfSymbol(members.get("__call"));
                 var constructSignatures = getSignaturesOfSymbol(members.get("__new"));
-                var stringIndexInfo = getIndexInfoOfSymbol(symbol, 0);
-                var numberIndexInfo = getIndexInfoOfSymbol(symbol, 1);
-                setStructuredTypeMembers(type, members, callSignatures, constructSignatures, stringIndexInfo, numberIndexInfo);
+                var indexInfos = getIndexInfosOfSymbol(symbol);
+                setStructuredTypeMembers(type, members, callSignatures, constructSignatures, indexInfos);
             }
             else {
                 var members = emptySymbols;
-                var stringIndexInfo = void 0;
-                var numberIndexInfo = void 0;
+                var indexInfos = void 0;
                 if (symbol.exports) {
                     members = getExportsOfSymbol(symbol);
                     if (symbol === globalThisSymbol) {
@@ -44919,7 +45898,7 @@
                     }
                 }
                 var baseConstructorIndexInfo = void 0;
-                setStructuredTypeMembers(type, members, ts.emptyArray, ts.emptyArray, undefined, undefined);
+                setStructuredTypeMembers(type, members, ts.emptyArray, ts.emptyArray, ts.emptyArray);
                 if (symbol.flags & 32) {
                     var classType = getDeclaredTypeOfClassOrInterface(symbol);
                     var baseConstructorType = getBaseConstructorTypeOfClass(classType);
@@ -44928,22 +45907,23 @@
                         addInheritedMembers(members, getPropertiesOfType(baseConstructorType));
                     }
                     else if (baseConstructorType === anyType) {
-                        baseConstructorIndexInfo = createIndexInfo(anyType, false);
+                        baseConstructorIndexInfo = createIndexInfo(stringType, anyType, false);
                     }
                 }
                 var indexSymbol = getIndexSymbolFromSymbolTable(members);
                 if (indexSymbol) {
-                    stringIndexInfo = getIndexInfoOfIndexSymbol(indexSymbol, 0);
-                    numberIndexInfo = getIndexInfoOfIndexSymbol(indexSymbol, 1);
+                    indexInfos = getIndexInfosOfIndexSymbol(indexSymbol);
                 }
                 else {
-                    stringIndexInfo = baseConstructorIndexInfo;
+                    if (baseConstructorIndexInfo) {
+                        indexInfos = ts.append(indexInfos, baseConstructorIndexInfo);
+                    }
                     if (symbol.flags & 384 && (getDeclaredTypeOfSymbol(symbol).flags & 32 ||
                         ts.some(type.properties, function (prop) { return !!(getTypeOfSymbol(prop).flags & 296); }))) {
-                        numberIndexInfo = enumNumberIndexInfo;
+                        indexInfos = ts.append(indexInfos, enumNumberIndexInfo);
                     }
                 }
-                setStructuredTypeMembers(type, members, ts.emptyArray, ts.emptyArray, stringIndexInfo, numberIndexInfo);
+                setStructuredTypeMembers(type, members, ts.emptyArray, ts.emptyArray, indexInfos || ts.emptyArray);
                 if (symbol.flags & (16 | 8192)) {
                     type.callSignatures = getSignaturesOfSymbol(symbol);
                 }
@@ -44963,20 +45943,14 @@
             }
         }
         function replaceIndexedAccess(instantiable, type, replacement) {
-            return instantiateType(instantiable, createTypeMapper([type.indexType, type.objectType], [getLiteralType(0), createTupleType([replacement])]));
-        }
-        function getIndexInfoOfIndexSymbol(indexSymbol, indexKind) {
-            var declaration = getIndexDeclarationOfIndexSymbol(indexSymbol, indexKind);
-            if (!declaration)
-                return undefined;
-            return createIndexInfo(declaration.type ? getTypeFromTypeNode(declaration.type) : anyType, ts.hasEffectiveModifier(declaration, 64), declaration);
+            return instantiateType(instantiable, createTypeMapper([type.indexType, type.objectType], [getNumberLiteralType(0), createTupleType([replacement])]));
         }
         function resolveReverseMappedTypeMembers(type) {
-            var indexInfo = getIndexInfoOfType(type.source, 0);
+            var indexInfo = getIndexInfoOfType(type.source, stringType);
             var modifiers = getMappedTypeModifiers(type.mappedType);
             var readonlyMask = modifiers & 1 ? false : true;
             var optionalMask = modifiers & 4 ? 0 : 16777216;
-            var stringIndexInfo = indexInfo && createIndexInfo(inferReverseMappedType(indexInfo.type, type.mappedType, type.constraintType), readonlyMask && indexInfo.isReadonly);
+            var indexInfos = indexInfo ? [createIndexInfo(stringType, inferReverseMappedType(indexInfo.type, type.mappedType, type.constraintType), readonlyMask && indexInfo.isReadonly)] : ts.emptyArray;
             var members = ts.createSymbolTable();
             for (var _i = 0, _a = getPropertiesOfType(type.source); _i < _a.length; _i++) {
                 var prop = _a[_i];
@@ -44999,7 +45973,7 @@
                 }
                 members.set(prop.escapedName, inferredProp);
             }
-            setStructuredTypeMembers(type, members, ts.emptyArray, ts.emptyArray, stringIndexInfo, undefined);
+            setStructuredTypeMembers(type, members, ts.emptyArray, ts.emptyArray, indexInfos);
         }
         function getLowerBoundOfKeyType(type) {
             if (type.flags & 4194304) {
@@ -45029,9 +46003,8 @@
         }
         function resolveMappedTypeMembers(type) {
             var members = ts.createSymbolTable();
-            var stringIndexInfo;
-            var numberIndexInfo;
-            setStructuredTypeMembers(type, emptySymbols, ts.emptyArray, ts.emptyArray, undefined, undefined);
+            var indexInfos;
+            setStructuredTypeMembers(type, emptySymbols, ts.emptyArray, ts.emptyArray, ts.emptyArray);
             var typeParameter = getTypeParameterFromMappedType(type);
             var constraintType = getConstraintTypeFromMappedType(type);
             var nameType = getNameTypeFromMappedType(type.target || type);
@@ -45044,17 +46017,22 @@
                     var prop = _a[_i];
                     addMemberForKeyType(getLiteralTypeFromProperty(prop, include));
                 }
-                if (modifiersType.flags & 1 || getIndexInfoOfType(modifiersType, 0)) {
+                if (modifiersType.flags & 1) {
                     addMemberForKeyType(stringType);
                 }
-                if (!keyofStringsOnly && getIndexInfoOfType(modifiersType, 1)) {
-                    addMemberForKeyType(numberType);
+                else {
+                    for (var _b = 0, _c = getIndexInfosOfType(modifiersType); _b < _c.length; _b++) {
+                        var info = _c[_b];
+                        if (!keyofStringsOnly || info.keyType.flags & (4 | 134217728)) {
+                            addMemberForKeyType(info.keyType);
+                        }
+                    }
                 }
             }
             else {
                 forEachType(getLowerBoundOfKeyType(constraintType), addMemberForKeyType);
             }
-            setStructuredTypeMembers(type, members, ts.emptyArray, ts.emptyArray, stringIndexInfo, numberIndexInfo);
+            setStructuredTypeMembers(type, members, ts.emptyArray, ts.emptyArray, indexInfos || ts.emptyArray);
             function addMemberForKeyType(keyType) {
                 var propNameType = nameType ? instantiateType(nameType, appendTypeMapping(type.mapper, typeParameter, keyType)) : keyType;
                 forEachType(propNameType, function (t) { return addMemberForKeyTypeWorker(keyType, t); });
@@ -45081,19 +46059,18 @@
                         prop.keyType = keyType;
                         if (modifiersProp) {
                             prop.syntheticOrigin = modifiersProp;
-                            prop.declarations = modifiersProp.declarations;
+                            prop.declarations = nameType ? undefined : modifiersProp.declarations;
                         }
                         members.set(propName, prop);
                     }
                 }
-                else if (propNameType.flags & (1 | 4 | 8 | 32)) {
+                else if (isValidIndexKeyType(propNameType) || propNameType.flags & (1 | 32)) {
+                    var indexKeyType = propNameType.flags & (1 | 4) ? stringType :
+                        propNameType.flags & (8 | 32) ? numberType :
+                            propNameType;
                     var propType = instantiateType(templateType, appendTypeMapping(type.mapper, typeParameter, keyType));
-                    if (propNameType.flags & (1 | 4)) {
-                        stringIndexInfo = createIndexInfo(stringIndexInfo ? getUnionType([stringIndexInfo.type, propType]) : propType, !!(templateModifiers & 1));
-                    }
-                    else {
-                        numberIndexInfo = createIndexInfo(numberIndexInfo ? getUnionType([numberIndexInfo.type, propType]) : propType, !!(templateModifiers & 1));
-                    }
+                    var indexInfo = createIndexInfo(indexKeyType, propType, !!(templateModifiers & 1));
+                    indexInfos = appendIndexInfo(indexInfos, indexInfo, true);
                 }
             }
         }
@@ -45107,8 +46084,8 @@
                 var templateType = getTemplateTypeFromMappedType(mappedType.target || mappedType);
                 var mapper = appendTypeMapping(mappedType.mapper, getTypeParameterFromMappedType(mappedType), symbol.keyType);
                 var propType = instantiateType(templateType, mapper);
-                var type = strictNullChecks && symbol.flags & 16777216 && !maybeTypeOfKind(propType, 32768 | 16384) ? getOptionalType(propType) :
-                    symbol.checkFlags & 524288 ? getTypeWithFacts(propType, 524288) :
+                var type = strictNullChecks && symbol.flags & 16777216 && !maybeTypeOfKind(propType, 32768 | 16384) ? getOptionalType(propType, true) :
+                    symbol.checkFlags & 524288 ? removeMissingOrUndefinedType(propType) :
                         propType;
                 if (!popTypeResolution()) {
                     error(currentNode, ts.Diagnostics.Type_of_property_0_circularly_references_itself_in_mapped_type_1, symbolToString(symbol), typeToString(mappedType));
@@ -45134,7 +46111,7 @@
         function getTemplateTypeFromMappedType(type) {
             return type.templateType ||
                 (type.templateType = type.declaration.type ?
-                    instantiateType(addOptionality(getTypeFromTypeNode(type.declaration.type), !!(getMappedTypeModifiers(type) & 4)), type.mapper) :
+                    instantiateType(addOptionality(getTypeFromTypeNode(type.declaration.type), true, !!(getMappedTypeModifiers(type) & 4)), type.mapper) :
                     errorType);
         }
         function getConstraintDeclarationForMappedType(type) {
@@ -45142,8 +46119,8 @@
         }
         function isMappedTypeWithKeyofConstraintDeclaration(type) {
             var constraintDeclaration = getConstraintDeclarationForMappedType(type);
-            return constraintDeclaration.kind === 189 &&
-                constraintDeclaration.operator === 138;
+            return constraintDeclaration.kind === 191 &&
+                constraintDeclaration.operator === 139;
         }
         function getModifiersTypeFromMappedType(type) {
             if (!type.modifiersType) {
@@ -45236,7 +46213,7 @@
                             }
                         }
                     }
-                    if (type.flags & 1048576 && !getIndexInfoOfType(current, 0) && !getIndexInfoOfType(current, 1)) {
+                    if (type.flags & 1048576 && getIndexInfosOfType(current).length === 0) {
                         break;
                     }
                 }
@@ -45265,8 +46242,8 @@
                 return getAugmentedPropertiesOfType(unionType);
             }
             var props = ts.createSymbolTable();
-            for (var _i = 0, types_5 = types; _i < types_5.length; _i++) {
-                var memberType = types_5[_i];
+            for (var _i = 0, types_4 = types; _i < types_4.length; _i++) {
+                var memberType = types_4[_i];
                 for (var _a = 0, _b = getAugmentedPropertiesOfType(memberType); _a < _b.length; _a++) {
                     var escapedName = _b[_a].escapedName;
                     if (!props.has(escapedName)) {
@@ -45297,14 +46274,14 @@
         function getConstraintFromIndexedAccess(type) {
             var indexConstraint = getSimplifiedTypeOrConstraint(type.indexType);
             if (indexConstraint && indexConstraint !== type.indexType) {
-                var indexedAccess = getIndexedAccessTypeOrUndefined(type.objectType, indexConstraint, type.noUncheckedIndexedAccessCandidate);
+                var indexedAccess = getIndexedAccessTypeOrUndefined(type.objectType, indexConstraint, type.accessFlags);
                 if (indexedAccess) {
                     return indexedAccess;
                 }
             }
             var objectConstraint = getSimplifiedTypeOrConstraint(type.objectType);
             if (objectConstraint && objectConstraint !== type.objectType) {
-                return getIndexedAccessTypeOrUndefined(objectConstraint, type.indexType, type.noUncheckedIndexedAccessCandidate);
+                return getIndexedAccessTypeOrUndefined(objectConstraint, type.indexType, type.accessFlags);
             }
             return undefined;
         }
@@ -45338,8 +46315,8 @@
         function getEffectiveConstraintOfIntersection(types, targetIsUnion) {
             var constraints;
             var hasDisjointDomainType = false;
-            for (var _i = 0, types_6 = types; _i < types_6.length; _i++) {
-                var t = types_6[_i];
+            for (var _i = 0, types_5 = types; _i < types_5.length; _i++) {
+                var t = types_5[_i];
                 if (t.flags & 465829888) {
                     var constraint = getConstraintOfType(t);
                     while (constraint && constraint.flags & (262144 | 4194304 | 16777216)) {
@@ -45358,8 +46335,8 @@
             }
             if (constraints && (targetIsUnion || hasDisjointDomainType)) {
                 if (hasDisjointDomainType) {
-                    for (var _a = 0, types_7 = types; _a < types_7.length; _a++) {
-                        var t = types_7[_a];
+                    for (var _a = 0, types_6 = types; _a < types_6.length; _a++) {
+                        var t = types_6[_a];
                         if (t.flags & 469892092) {
                             constraints = ts.append(constraints, t);
                         }
@@ -45430,8 +46407,8 @@
                     var types = t.types;
                     var baseTypes = [];
                     var different = false;
-                    for (var _i = 0, types_8 = types; _i < types_8.length; _i++) {
-                        var type_3 = types_8[_i];
+                    for (var _i = 0, types_7 = types; _i < types_7.length; _i++) {
+                        var type_3 = types_7[_i];
                         var baseType = getBaseConstraint(type_3);
                         if (baseType) {
                             if (baseType !== type_3) {
@@ -45465,7 +46442,7 @@
                 if (t.flags & 8388608) {
                     var baseObjectType = getBaseConstraint(t.objectType);
                     var baseIndexType = getBaseConstraint(t.indexType);
-                    var baseIndexedAccess = baseObjectType && baseIndexType && getIndexedAccessTypeOrUndefined(baseObjectType, baseIndexType, t.noUncheckedIndexedAccessCandidate);
+                    var baseIndexedAccess = baseObjectType && baseIndexType && getIndexedAccessTypeOrUndefined(baseObjectType, baseIndexType, t.accessFlags);
                     return baseIndexedAccess && getBaseConstraint(baseIndexedAccess);
                 }
                 if (t.flags & 16777216) {
@@ -45593,7 +46570,7 @@
                         }
                     }
                     else if (isUnion) {
-                        var indexInfo = !isLateBoundName(name) && (isNumericLiteralName(name) && getIndexInfoOfType(type, 1) || getIndexInfoOfType(type, 0));
+                        var indexInfo = !isLateBoundName(name) && getApplicableIndexInfoForName(type, name);
                         if (indexInfo) {
                             checkFlags |= 32 | (indexInfo.isReadonly ? 8 : 0);
                             indexTypes = ts.append(indexTypes, isTupleType(type) ? getRestTypeOfTupleType(type) || undefinedType : indexInfo.type);
@@ -45694,15 +46671,15 @@
             return property && !(ts.getCheckFlags(property) & 16) ? property : undefined;
         }
         function getReducedType(type) {
-            if (type.flags & 1048576 && type.objectFlags & 67108864) {
+            if (type.flags & 1048576 && type.objectFlags & 33554432) {
                 return type.resolvedReducedType || (type.resolvedReducedType = getReducedUnionType(type));
             }
             else if (type.flags & 2097152) {
-                if (!(type.objectFlags & 67108864)) {
-                    type.objectFlags |= 67108864 |
-                        (ts.some(getPropertiesOfUnionOrIntersectionType(type), isNeverReducedProperty) ? 134217728 : 0);
+                if (!(type.objectFlags & 33554432)) {
+                    type.objectFlags |= 33554432 |
+                        (ts.some(getPropertiesOfUnionOrIntersectionType(type), isNeverReducedProperty) ? 67108864 : 0);
                 }
-                return type.objectFlags & 134217728 ? neverType : type;
+                return type.objectFlags & 67108864 ? neverType : type;
             }
             return type;
         }
@@ -45729,7 +46706,7 @@
             return !prop.valueDeclaration && !!(ts.getCheckFlags(prop) & 1024);
         }
         function elaborateNeverIntersection(errorInfo, type) {
-            if (type.flags & 2097152 && ts.getObjectFlags(type) & 134217728) {
+            if (type.flags & 2097152 && ts.getObjectFlags(type) & 67108864) {
                 var neverProp = ts.find(getPropertiesOfUnionOrIntersectionType(type), isDiscriminantWithNeverType);
                 if (neverProp) {
                     return ts.chainDiagnosticMessages(errorInfo, ts.Diagnostics.The_intersection_0_was_reduced_to_never_because_property_1_has_conflicting_types_in_some_constituents, typeToString(type, undefined, 536870912), symbolToString(neverProp));
@@ -45778,40 +46755,62 @@
         function getSignaturesOfType(type, kind) {
             return getSignaturesOfStructuredType(getReducedApparentType(type), kind);
         }
-        function getIndexInfoOfStructuredType(type, kind) {
-            if (type.flags & 3670016) {
-                var resolved = resolveStructuredTypeMembers(type);
-                return kind === 0 ? resolved.stringIndexInfo : resolved.numberIndexInfo;
-            }
+        function findIndexInfo(indexInfos, keyType) {
+            return ts.find(indexInfos, function (info) { return info.keyType === keyType; });
         }
-        function getIndexTypeOfStructuredType(type, kind) {
-            var info = getIndexInfoOfStructuredType(type, kind);
-            return info && info.type;
-        }
-        function getIndexInfoOfType(type, kind) {
-            return getIndexInfoOfStructuredType(getReducedApparentType(type), kind);
-        }
-        function getIndexTypeOfType(type, kind) {
-            return getIndexTypeOfStructuredType(getReducedApparentType(type), kind);
-        }
-        function getImplicitIndexTypeOfType(type, kind) {
-            if (isObjectTypeWithInferableIndex(type)) {
-                var propTypes = [];
-                for (var _i = 0, _a = getPropertiesOfType(type); _i < _a.length; _i++) {
-                    var prop = _a[_i];
-                    if (kind === 0 || isNumericLiteralName(prop.escapedName)) {
-                        var propType = getTypeOfSymbol(prop);
-                        propTypes.push(prop.flags & 16777216 ? getTypeWithFacts(propType, 524288) : propType);
+        function findApplicableIndexInfo(indexInfos, keyType) {
+            var stringIndexInfo;
+            var applicableInfo;
+            var applicableInfos;
+            for (var _i = 0, indexInfos_1 = indexInfos; _i < indexInfos_1.length; _i++) {
+                var info = indexInfos_1[_i];
+                if (info.keyType === stringType) {
+                    stringIndexInfo = info;
+                }
+                else if (isApplicableIndexType(keyType, info.keyType)) {
+                    if (!applicableInfo) {
+                        applicableInfo = info;
+                    }
+                    else {
+                        (applicableInfos || (applicableInfos = [applicableInfo])).push(info);
                     }
                 }
-                if (kind === 0) {
-                    ts.append(propTypes, getIndexTypeOfType(type, 1));
-                }
-                if (propTypes.length) {
-                    return getUnionType(propTypes);
-                }
             }
-            return undefined;
+            return applicableInfos ? createIndexInfo(unknownType, getIntersectionType(ts.map(applicableInfos, function (info) { return info.type; })), ts.reduceLeft(applicableInfos, function (isReadonly, info) { return isReadonly && info.isReadonly; }, true)) :
+                applicableInfo ? applicableInfo :
+                    stringIndexInfo && isApplicableIndexType(keyType, stringType) ? stringIndexInfo :
+                        undefined;
+        }
+        function isApplicableIndexType(source, target) {
+            return isTypeAssignableTo(source, target) ||
+                target === stringType && isTypeAssignableTo(source, numberType) ||
+                target === numberType && !!(source.flags & 128) && isNumericLiteralName(source.value);
+        }
+        function getIndexInfosOfStructuredType(type) {
+            if (type.flags & 3670016) {
+                var resolved = resolveStructuredTypeMembers(type);
+                return resolved.indexInfos;
+            }
+            return ts.emptyArray;
+        }
+        function getIndexInfosOfType(type) {
+            return getIndexInfosOfStructuredType(getReducedApparentType(type));
+        }
+        function getIndexInfoOfType(type, keyType) {
+            return findIndexInfo(getIndexInfosOfType(type), keyType);
+        }
+        function getIndexTypeOfType(type, keyType) {
+            var _a;
+            return (_a = getIndexInfoOfType(type, keyType)) === null || _a === void 0 ? void 0 : _a.type;
+        }
+        function getApplicableIndexInfos(type, keyType) {
+            return getIndexInfosOfType(type).filter(function (info) { return isApplicableIndexType(keyType, info.keyType); });
+        }
+        function getApplicableIndexInfo(type, keyType) {
+            return findApplicableIndexInfo(getIndexInfosOfType(type), keyType);
+        }
+        function getApplicableIndexInfoForName(type, name) {
+            return getApplicableIndexInfo(type, isLateBoundName(name) ? esSymbolType : getStringLiteralType(ts.unescapeLeadingUnderscores(name)));
         }
         function getTypeParametersFromDeclaration(declaration) {
             var result;
@@ -45831,10 +46830,10 @@
             return result;
         }
         function isJSDocOptionalParameter(node) {
-            return ts.isInJSFile(node) && (node.type && node.type.kind === 308
+            return ts.isInJSFile(node) && (node.type && node.type.kind === 311
                 || ts.getJSDocParameterTags(node).some(function (_a) {
                     var isBracketed = _a.isBracketed, typeExpression = _a.typeExpression;
-                    return isBracketed || !!typeExpression && typeExpression.type.kind === 308;
+                    return isBracketed || !!typeExpression && typeExpression.type.kind === 311;
                 }));
         }
         function tryFindAmbientModule(moduleName, withAugmentations) {
@@ -45870,7 +46869,7 @@
                 return false;
             }
             var isBracketed = node.isBracketed, typeExpression = node.typeExpression;
-            return isBracketed || !!typeExpression && typeExpression.type.kind === 308;
+            return isBracketed || !!typeExpression && typeExpression.type.kind === 311;
         }
         function createTypePredicate(kind, parameterName, parameterIndex, type) {
             return { kind: kind, parameterName: parameterName, parameterIndex: parameterIndex, type: type };
@@ -45943,27 +46942,27 @@
                     else {
                         parameters.push(paramSymbol);
                     }
-                    if (type && type.kind === 192) {
+                    if (type && type.kind === 194) {
                         flags |= 2;
                     }
                     var isOptionalParameter_1 = isOptionalJSDocPropertyLikeTag(param) ||
-                        param.initializer || param.questionToken || param.dotDotDotToken ||
+                        param.initializer || param.questionToken || ts.isRestParameter(param) ||
                         iife && parameters.length > iife.arguments.length && !type ||
                         isJSDocOptionalParameter(param);
                     if (!isOptionalParameter_1) {
                         minArgumentCount = parameters.length;
                     }
                 }
-                if ((declaration.kind === 168 || declaration.kind === 169) &&
+                if ((declaration.kind === 170 || declaration.kind === 171) &&
                     hasBindableName(declaration) &&
                     (!hasThisParameter || !thisParameter)) {
-                    var otherKind = declaration.kind === 168 ? 169 : 168;
+                    var otherKind = declaration.kind === 170 ? 171 : 170;
                     var other = ts.getDeclarationOfKind(getSymbolOfNode(declaration), otherKind);
                     if (other) {
                         thisParameter = getAnnotatedAccessorThisParameter(other);
                     }
                 }
-                var classType = declaration.kind === 167 ?
+                var classType = declaration.kind === 169 ?
                     getDeclaredTypeOfClassOrInterface(getMergedSymbol(declaration.parent.symbol))
                     : undefined;
                 var typeParameters = classType ? classType.localTypeParameters : getTypeParametersFromDeclaration(declaration);
@@ -46020,16 +47019,16 @@
                 if (!node)
                     return false;
                 switch (node.kind) {
-                    case 78:
+                    case 79:
                         return node.escapedText === argumentsSymbol.escapedName && getResolvedSymbol(node) === argumentsSymbol;
-                    case 164:
-                    case 166:
-                    case 168:
-                    case 169:
-                        return node.name.kind === 159
+                    case 165:
+                    case 167:
+                    case 170:
+                    case 171:
+                        return node.name.kind === 160
                             && traverse(node.name);
-                    case 202:
-                    case 203:
+                    case 204:
+                    case 205:
                         return traverse(node.expression);
                     default:
                         return !ts.nodeStartsNewLexicalEnvironment(node) && !ts.isPartOfTypeNode(node) && !!ts.forEachChild(node, traverse);
@@ -46098,7 +47097,7 @@
         function createTypePredicateFromTypePredicateNode(node, signature) {
             var parameterName = node.parameterName;
             var type = node.type && getTypeFromTypeNode(node.type);
-            return parameterName.kind === 188 ?
+            return parameterName.kind === 190 ?
                 createTypePredicate(node.assertsModifier ? 2 : 0, undefined, undefined, type) :
                 createTypePredicate(node.assertsModifier ? 3 : 1, parameterName.escapedText, ts.findIndex(signature.parameters, function (p) { return p.escapedName === parameterName.escapedText; }), type);
         }
@@ -46144,7 +47143,7 @@
             return signature.resolvedReturnType;
         }
         function getReturnTypeFromAnnotation(declaration) {
-            if (declaration.kind === 167) {
+            if (declaration.kind === 169) {
                 return getDeclaredTypeOfClassOrInterface(getMergedSymbol(declaration.parent.symbol));
             }
             if (ts.isJSDocConstructSignature(declaration)) {
@@ -46154,12 +47153,12 @@
             if (typeNode) {
                 return getTypeFromTypeNode(typeNode);
             }
-            if (declaration.kind === 168 && hasBindableName(declaration)) {
+            if (declaration.kind === 170 && hasBindableName(declaration)) {
                 var jsDocType = ts.isInJSFile(declaration) && getTypeForDeclarationFromJSDocComment(declaration);
                 if (jsDocType) {
                     return jsDocType;
                 }
-                var setter = ts.getDeclarationOfKind(getSymbolOfNode(declaration), 169);
+                var setter = ts.getDeclarationOfKind(getSymbolOfNode(declaration), 171);
                 var setterType = getAnnotatedAccessorType(setter);
                 if (setterType) {
                     return setterType;
@@ -46177,7 +47176,7 @@
             if (signatureHasRestParameter(signature)) {
                 var sigRestType = getTypeOfSymbol(signature.parameters[signature.parameters.length - 1]);
                 var restType = isTupleType(sigRestType) ? getRestTypeOfTupleType(sigRestType) : sigRestType;
-                return restType && getIndexTypeOfType(restType, 1);
+                return restType && getIndexTypeOfType(restType, numberType);
             }
             return undefined;
         }
@@ -46246,12 +47245,13 @@
         function getOrCreateTypeFromSignature(signature) {
             if (!signature.isolatedSignatureType) {
                 var kind = signature.declaration ? signature.declaration.kind : 0;
-                var isConstructor = kind === 167 || kind === 171 || kind === 176;
+                var isConstructor = kind === 169 || kind === 173 || kind === 178;
                 var type = createObjectType(16);
                 type.members = emptySymbols;
                 type.properties = ts.emptyArray;
                 type.callSignatures = !isConstructor ? [signature] : ts.emptyArray;
                 type.constructSignatures = isConstructor ? [signature] : ts.emptyArray;
+                type.indexInfos = ts.emptyArray;
                 signature.isolatedSignatureType = type;
             }
             return signature.isolatedSignatureType;
@@ -46262,39 +47262,39 @@
         function getIndexSymbolFromSymbolTable(symbolTable) {
             return symbolTable.get("__index");
         }
-        function getIndexDeclarationOfSymbol(symbol, kind) {
-            var indexSymbol = symbol && getIndexSymbol(symbol);
-            return indexSymbol && getIndexDeclarationOfIndexSymbol(indexSymbol, kind);
+        function createIndexInfo(keyType, type, isReadonly, declaration) {
+            return { keyType: keyType, type: type, isReadonly: isReadonly, declaration: declaration };
         }
-        function getIndexDeclarationOfSymbolTable(symbolTable, kind) {
-            var indexSymbol = symbolTable && getIndexSymbolFromSymbolTable(symbolTable);
-            return indexSymbol && getIndexDeclarationOfIndexSymbol(indexSymbol, kind);
+        function getIndexInfosOfSymbol(symbol) {
+            var indexSymbol = getIndexSymbol(symbol);
+            return indexSymbol ? getIndexInfosOfIndexSymbol(indexSymbol) : ts.emptyArray;
         }
-        function getIndexDeclarationOfIndexSymbol(indexSymbol, kind) {
-            var syntaxKind = kind === 1 ? 144 : 147;
-            if (indexSymbol === null || indexSymbol === void 0 ? void 0 : indexSymbol.declarations) {
-                for (var _i = 0, _a = indexSymbol.declarations; _i < _a.length; _i++) {
-                    var decl = _a[_i];
-                    var node = ts.cast(decl, ts.isIndexSignatureDeclaration);
-                    if (node.parameters.length === 1) {
-                        var parameter = node.parameters[0];
-                        if (parameter.type && parameter.type.kind === syntaxKind) {
-                            return node;
+        function getIndexInfosOfIndexSymbol(indexSymbol) {
+            if (indexSymbol.declarations) {
+                var indexInfos_2 = [];
+                var _loop_14 = function (declaration) {
+                    if (declaration.parameters.length === 1) {
+                        var parameter = declaration.parameters[0];
+                        if (parameter.type) {
+                            forEachType(getTypeFromTypeNode(parameter.type), function (keyType) {
+                                if (isValidIndexKeyType(keyType) && !findIndexInfo(indexInfos_2, keyType)) {
+                                    indexInfos_2.push(createIndexInfo(keyType, declaration.type ? getTypeFromTypeNode(declaration.type) : anyType, ts.hasEffectiveModifier(declaration, 64), declaration));
+                                }
+                            });
                         }
                     }
+                };
+                for (var _i = 0, _a = indexSymbol.declarations; _i < _a.length; _i++) {
+                    var declaration = _a[_i];
+                    _loop_14(declaration);
                 }
+                return indexInfos_2;
             }
-            return undefined;
+            return ts.emptyArray;
         }
-        function createIndexInfo(type, isReadonly, declaration) {
-            return { type: type, isReadonly: isReadonly, declaration: declaration };
-        }
-        function getIndexInfoOfSymbol(symbol, kind) {
-            var declaration = getIndexDeclarationOfSymbol(symbol, kind);
-            if (declaration) {
-                return createIndexInfo(declaration.type ? getTypeFromTypeNode(declaration.type) : anyType, ts.hasEffectiveModifier(declaration, 64), declaration);
-            }
-            return undefined;
+        function isValidIndexKeyType(type) {
+            return !!(type.flags & (4 | 8 | 4096)) || isPatternLiteralType(type) ||
+                !!(type.flags & 2097152) && !isGenericIndexType(type) && !isGenericObjectType(type) && ts.some(type.types, isValidIndexKeyType);
         }
         function getConstraintDeclaration(type) {
             return ts.mapDefined(ts.filter(type.symbol && type.symbol.declarations, ts.isTypeParameterDeclaration), ts.getEffectiveConstraintOfTypeParameter)[0];
@@ -46305,9 +47305,9 @@
             if ((_a = typeParameter.symbol) === null || _a === void 0 ? void 0 : _a.declarations) {
                 for (var _i = 0, _b = typeParameter.symbol.declarations; _i < _b.length; _i++) {
                     var declaration = _b[_i];
-                    if (declaration.parent.kind === 186) {
+                    if (declaration.parent.kind === 188) {
                         var _c = ts.walkUpParenthesizedTypesAndGetParentAndChild(declaration.parent.parent), _d = _c[0], childTypeParameter = _d === void 0 ? declaration.parent : _d, grandParent = _c[1];
-                        if (grandParent.kind === 174) {
+                        if (grandParent.kind === 176) {
                             var typeReference = grandParent;
                             var typeParameters = getTypeParametersForTypeReference(typeReference);
                             if (typeParameters) {
@@ -46324,20 +47324,20 @@
                                 }
                             }
                         }
-                        else if (grandParent.kind === 161 && grandParent.dotDotDotToken ||
-                            grandParent.kind === 182 ||
-                            grandParent.kind === 193 && grandParent.dotDotDotToken) {
+                        else if (grandParent.kind === 162 && grandParent.dotDotDotToken ||
+                            grandParent.kind === 184 ||
+                            grandParent.kind === 195 && grandParent.dotDotDotToken) {
                             inferences = ts.append(inferences, createArrayType(unknownType));
                         }
-                        else if (grandParent.kind === 195) {
+                        else if (grandParent.kind === 197) {
                             inferences = ts.append(inferences, stringType);
                         }
-                        else if (grandParent.kind === 160 && grandParent.parent.kind === 191) {
+                        else if (grandParent.kind === 161 && grandParent.parent.kind === 193) {
                             inferences = ts.append(inferences, keyofConstraintType);
                         }
-                        else if (grandParent.kind === 191 && grandParent.type &&
-                            ts.skipParentheses(grandParent.type) === declaration.parent && grandParent.parent.kind === 185 &&
-                            grandParent.parent.extendsType === grandParent && grandParent.parent.checkType.kind === 191 &&
+                        else if (grandParent.kind === 193 && grandParent.type &&
+                            ts.skipParentheses(grandParent.type) === declaration.parent && grandParent.parent.kind === 187 &&
+                            grandParent.parent.extendsType === grandParent && grandParent.parent.checkType.kind === 193 &&
                             grandParent.parent.checkType.type) {
                             var checkMappedType_1 = grandParent.parent.checkType;
                             var nodeType = getTypeFromTypeNode(checkMappedType_1.type);
@@ -46362,7 +47362,7 @@
                     else {
                         var type = getTypeFromTypeNode(constraintDeclaration);
                         if (type.flags & 1 && type !== errorType) {
-                            type = constraintDeclaration.parent.parent.kind === 191 ? keyofConstraintType : unknownType;
+                            type = constraintDeclaration.parent.parent.kind === 193 ? keyofConstraintType : unknownType;
                         }
                         typeParameter.constraint = type;
                     }
@@ -46371,7 +47371,7 @@
             return typeParameter.constraint === noConstraintType ? undefined : typeParameter.constraint;
         }
         function getParentSymbolOfTypeParameter(typeParameter) {
-            var tp = ts.getDeclarationOfKind(typeParameter.symbol, 160);
+            var tp = ts.getDeclarationOfKind(typeParameter.symbol, 161);
             var host = ts.isJSDocTemplateTag(tp.parent) ? ts.getHostSignatureFromJSDoc(tp.parent) : tp.parent;
             return host && getSymbolOfNode(host);
         }
@@ -46403,8 +47403,8 @@
         }
         function getPropagatingFlagsOfTypes(types, excludeKinds) {
             var result = 0;
-            for (var _i = 0, types_9 = types; _i < types_9.length; _i++) {
-                var type = types_9[_i];
+            for (var _i = 0, types_8 = types; _i < types_8.length; _i++) {
+                var type = types_8[_i];
                 if (!(type.flags & excludeKinds)) {
                     result |= ts.getObjectFlags(type);
                 }
@@ -46453,8 +47453,8 @@
                 }
                 var node = type.node;
                 var typeArguments = !node ? ts.emptyArray :
-                    node.kind === 174 ? ts.concatenate(type.target.outerTypeParameters, getEffectiveTypeArguments(node, type.target.localTypeParameters)) :
-                        node.kind === 179 ? [getTypeFromTypeNode(node.elementType)] :
+                    node.kind === 176 ? ts.concatenate(type.target.outerTypeParameters, getEffectiveTypeArguments(node, type.target.localTypeParameters)) :
+                        node.kind === 181 ? [getTypeFromTypeNode(node.elementType)] :
                             ts.map(node.elements, getTypeFromTypeNode);
                 if (popTypeResolution()) {
                     type.resolvedTypeArguments = type.mapper ? instantiateTypes(typeArguments, type.mapper) : typeArguments;
@@ -46492,7 +47492,7 @@
                         return errorType;
                     }
                 }
-                if (node.kind === 174 && isDeferredTypeReferenceNode(node, ts.length(node.typeArguments) !== typeParameters.length)) {
+                if (node.kind === 176 && isDeferredTypeReferenceNode(node, ts.length(node.typeArguments) !== typeParameters.length)) {
                     return createDeferredTypeReference(type, node, undefined);
                 }
                 var typeArguments = ts.concatenate(type.outerTypeParameters, fillMissingTypeArguments(typeArgumentsFromTypeReferenceNode(node), typeParameters, minTypeArgumentCount, isJs));
@@ -46539,9 +47539,9 @@
         }
         function getTypeReferenceName(node) {
             switch (node.kind) {
-                case 174:
+                case 176:
                     return node.typeName;
-                case 224:
+                case 226:
                     var expr = node.expression;
                     if (ts.isEntityNameExpression(expr)) {
                         return expr;
@@ -46588,7 +47588,7 @@
                 var valueType = getTypeOfSymbol(symbol);
                 var typeType = valueType;
                 if (symbol.valueDeclaration) {
-                    var isImportTypeWithQualifier = node.kind === 196 && node.qualifier;
+                    var isImportTypeWithQualifier = node.kind === 198 && node.qualifier;
                     if (valueType.symbol && valueType.symbol !== symbol && isImportTypeWithQualifier) {
                         typeType = getTypeReferenceType(node, valueType.symbol);
                     }
@@ -46613,7 +47613,7 @@
             return result;
         }
         function isUnaryTupleTypeNode(node) {
-            return node.kind === 180 && node.elements.length === 1;
+            return node.kind === 182 && node.elements.length === 1;
         }
         function getImpliedConstraint(type, checkNode, extendsNode) {
             return isUnaryTupleTypeNode(checkNode) && isUnaryTupleTypeNode(extendsNode) ? getImpliedConstraint(type, checkNode.elements[0], extendsNode.elements[0]) :
@@ -46623,12 +47623,12 @@
         function getConditionalFlowTypeOfType(type, node) {
             var constraints;
             var covariant = true;
-            while (node && !ts.isStatement(node) && node.kind !== 312) {
+            while (node && !ts.isStatement(node) && node.kind !== 315) {
                 var parent = node.parent;
-                if (parent.kind === 161) {
+                if (parent.kind === 162) {
                     covariant = !covariant;
                 }
-                if ((covariant || type.flags & 8650752) && parent.kind === 185 && node === parent.trueType) {
+                if ((covariant || type.flags & 8650752) && parent.kind === 187 && node === parent.trueType) {
                     var constraint = getImpliedConstraint(type, parent.checkType, parent.extendsType);
                     if (constraint) {
                         constraints = ts.append(constraints, constraint);
@@ -46639,7 +47639,7 @@
             return constraints ? getSubstitutionType(type, getIntersectionType(ts.append(constraints, type))) : type;
         }
         function isJSDocTypeReference(node) {
-            return !!(node.flags & 4194304) && (node.kind === 174 || node.kind === 196);
+            return !!(node.flags & 4194304) && (node.kind === 176 || node.kind === 198);
         }
         function checkNoTypeArguments(node, symbol) {
             if (node.typeArguments) {
@@ -46683,8 +47683,8 @@
                             if (ts.isJSDocIndexSignature(node)) {
                                 var indexed = getTypeFromTypeNode(typeArgs[0]);
                                 var target = getTypeFromTypeNode(typeArgs[1]);
-                                var index = createIndexInfo(target, false);
-                                return createAnonymousType(undefined, emptySymbols, ts.emptyArray, ts.emptyArray, indexed === stringType ? index : undefined, indexed === numberType ? index : undefined);
+                                var indexInfo = indexed === stringType || indexed === numberType ? [createIndexInfo(indexed, target, false)] : ts.emptyArray;
+                                return createAnonymousType(undefined, emptySymbols, ts.emptyArray, ts.emptyArray, indexInfo);
                             }
                             return anyType;
                         }
@@ -46735,7 +47735,8 @@
         function getTypeFromTypeQueryNode(node) {
             var links = getNodeLinks(node);
             if (!links.resolvedType) {
-                links.resolvedType = getRegularTypeOfLiteralType(getWidenedType(checkExpression(node.exprName)));
+                var type = ts.isThisIdentifier(node.exprName) ? checkThisExpression(node.exprName) : checkExpression(node.exprName);
+                links.resolvedType = getRegularTypeOfLiteralType(getWidenedType(type));
             }
             return links.resolvedType;
         }
@@ -46746,9 +47747,9 @@
                     for (var _i = 0, declarations_3 = declarations; _i < declarations_3.length; _i++) {
                         var declaration = declarations_3[_i];
                         switch (declaration.kind) {
-                            case 253:
-                            case 254:
+                            case 255:
                             case 256:
+                            case 258:
                                 return declaration;
                         }
                     }
@@ -46790,6 +47791,19 @@
         function getGlobalImportMetaType() {
             return deferredGlobalImportMetaType || (deferredGlobalImportMetaType = getGlobalType("ImportMeta", 0, true)) || emptyObjectType;
         }
+        function getGlobalImportMetaExpressionType() {
+            if (!deferredGlobalImportMetaExpressionType) {
+                var symbol = createSymbol(0, "ImportMetaExpression");
+                var importMetaType = getGlobalImportMetaType();
+                var metaPropertySymbol = createSymbol(4, "meta", 8);
+                metaPropertySymbol.parent = symbol;
+                metaPropertySymbol.type = importMetaType;
+                var members = ts.createSymbolTable([metaPropertySymbol]);
+                symbol.members = members;
+                deferredGlobalImportMetaExpressionType = createAnonymousType(symbol, members, ts.emptyArray, ts.emptyArray, ts.emptyArray);
+            }
+            return deferredGlobalImportMetaExpressionType;
+        }
         function getGlobalESSymbolConstructorSymbol(reportErrors) {
             return deferredGlobalESSymbolConstructorSymbol || (deferredGlobalESSymbolConstructorSymbol = getGlobalValueSymbol("Symbol", reportErrors));
         }
@@ -46869,11 +47883,11 @@
         }
         function getTupleElementFlags(node) {
             switch (node.kind) {
-                case 181:
+                case 183:
                     return 2;
-                case 182:
+                case 184:
                     return getRestTypeElementFlags(node);
-                case 193:
+                case 195:
                     return node.questionToken ? 2 :
                         node.dotDotDotToken ? getRestTypeElementFlags(node) :
                             1;
@@ -46891,57 +47905,57 @@
                 return readonly ? globalReadonlyArrayType : globalArrayType;
             }
             var elementFlags = ts.map(node.elements, getTupleElementFlags);
-            var missingName = ts.some(node.elements, function (e) { return e.kind !== 193; });
+            var missingName = ts.some(node.elements, function (e) { return e.kind !== 195; });
             return getTupleTargetType(elementFlags, readonly, missingName ? undefined : node.elements);
         }
         function isDeferredTypeReferenceNode(node, hasDefaultTypeArguments) {
-            return !!getAliasSymbolForTypeNode(node) || isResolvedByTypeAlias(node) && (node.kind === 179 ? mayResolveTypeAlias(node.elementType) :
-                node.kind === 180 ? ts.some(node.elements, mayResolveTypeAlias) :
+            return !!getAliasSymbolForTypeNode(node) || isResolvedByTypeAlias(node) && (node.kind === 181 ? mayResolveTypeAlias(node.elementType) :
+                node.kind === 182 ? ts.some(node.elements, mayResolveTypeAlias) :
                     hasDefaultTypeArguments || ts.some(node.typeArguments, mayResolveTypeAlias));
         }
         function isResolvedByTypeAlias(node) {
             var parent = node.parent;
             switch (parent.kind) {
-                case 187:
-                case 193:
-                case 174:
-                case 183:
-                case 184:
-                case 190:
-                case 185:
                 case 189:
-                case 179:
-                case 180:
+                case 195:
+                case 176:
+                case 185:
+                case 186:
+                case 192:
+                case 187:
+                case 191:
+                case 181:
+                case 182:
                     return isResolvedByTypeAlias(parent);
-                case 255:
+                case 257:
                     return true;
             }
             return false;
         }
         function mayResolveTypeAlias(node) {
             switch (node.kind) {
-                case 174:
+                case 176:
                     return isJSDocTypeReference(node) || !!(resolveTypeReferenceName(node.typeName, 788968).flags & 524288);
-                case 177:
+                case 179:
                     return true;
+                case 191:
+                    return node.operator !== 152 && mayResolveTypeAlias(node.type);
                 case 189:
-                    return node.operator !== 151 && mayResolveTypeAlias(node.type);
-                case 187:
-                case 181:
-                case 193:
-                case 308:
-                case 306:
-                case 307:
-                case 302:
-                    return mayResolveTypeAlias(node.type);
-                case 182:
-                    return node.type.kind !== 179 || mayResolveTypeAlias(node.type.elementType);
                 case 183:
+                case 195:
+                case 311:
+                case 309:
+                case 310:
+                case 304:
+                    return mayResolveTypeAlias(node.type);
                 case 184:
-                    return ts.some(node.types, mayResolveTypeAlias);
-                case 190:
-                    return mayResolveTypeAlias(node.objectType) || mayResolveTypeAlias(node.indexType);
+                    return node.type.kind !== 181 || mayResolveTypeAlias(node.type.elementType);
                 case 185:
+                case 186:
+                    return ts.some(node.types, mayResolveTypeAlias);
+                case 192:
+                    return mayResolveTypeAlias(node.objectType) || mayResolveTypeAlias(node.indexType);
+                case 187:
                     return mayResolveTypeAlias(node.checkType) || mayResolveTypeAlias(node.extendsType) ||
                         mayResolveTypeAlias(node.trueType) || mayResolveTypeAlias(node.falseType);
             }
@@ -46954,19 +47968,19 @@
                 if (target === emptyGenericType) {
                     links.resolvedType = emptyObjectType;
                 }
-                else if (!(node.kind === 180 && ts.some(node.elements, function (e) { return !!(getTupleElementFlags(e) & 8); })) && isDeferredTypeReferenceNode(node)) {
-                    links.resolvedType = node.kind === 180 && node.elements.length === 0 ? target :
+                else if (!(node.kind === 182 && ts.some(node.elements, function (e) { return !!(getTupleElementFlags(e) & 8); })) && isDeferredTypeReferenceNode(node)) {
+                    links.resolvedType = node.kind === 182 && node.elements.length === 0 ? target :
                         createDeferredTypeReference(target, node, undefined);
                 }
                 else {
-                    var elementTypes = node.kind === 179 ? [getTypeFromTypeNode(node.elementType)] : ts.map(node.elements, getTypeFromTypeNode);
+                    var elementTypes = node.kind === 181 ? [getTypeFromTypeNode(node.elementType)] : ts.map(node.elements, getTypeFromTypeNode);
                     links.resolvedType = createNormalizedTypeReference(target, elementTypes);
                 }
             }
             return links.resolvedType;
         }
         function isReadonlyTypeOperator(node) {
-            return ts.isTypeOperatorNode(node) && node.operator === 142;
+            return ts.isTypeOperatorNode(node) && node.operator === 143;
         }
         function createTupleType(elementTypes, elementFlags, readonly, namedMemberDeclarations) {
             if (readonly === void 0) { readonly = false; }
@@ -47014,10 +48028,10 @@
                 lengthSymbol.type = numberType;
             }
             else {
-                var literalTypes_1 = [];
+                var literalTypes = [];
                 for (var i = minLength; i <= arity; i++)
-                    literalTypes_1.push(getLiteralType(i));
-                lengthSymbol.type = getUnionType(literalTypes_1);
+                    literalTypes.push(getNumberLiteralType(i));
+                lengthSymbol.type = getUnionType(literalTypes);
             }
             properties.push(lengthSymbol);
             var type = createObjectType(8 | 4);
@@ -47034,8 +48048,7 @@
             type.declaredProperties = properties;
             type.declaredCallSignatures = ts.emptyArray;
             type.declaredConstructSignatures = ts.emptyArray;
-            type.declaredStringIndexInfo = undefined;
-            type.declaredNumberIndexInfo = undefined;
+            type.declaredIndexInfos = ts.emptyArray;
             type.elementFlags = elementFlags;
             type.minLength = minLength;
             type.fixedLength = fixedLength;
@@ -47067,7 +48080,7 @@
             var lastRequiredIndex = -1;
             var firstRestIndex = -1;
             var lastOptionalOrRestIndex = -1;
-            var _loop_13 = function (i) {
+            var _loop_15 = function (i) {
                 var type = elementTypes[i];
                 var flags = target.elementFlags[i];
                 if (flags & 8) {
@@ -47085,7 +48098,7 @@
                         ts.forEach(elements, function (t, n) { var _a; return addElement(t, type.target.elementFlags[n], (_a = type.target.labeledElementDeclarations) === null || _a === void 0 ? void 0 : _a[n]); });
                     }
                     else {
-                        addElement(isArrayLikeType(type) && getIndexTypeOfType(type, 1) || errorType, 4, (_b = target.labeledElementDeclarations) === null || _b === void 0 ? void 0 : _b[i]);
+                        addElement(isArrayLikeType(type) && getIndexTypeOfType(type, numberType) || errorType, 4, (_b = target.labeledElementDeclarations) === null || _b === void 0 ? void 0 : _b[i]);
                     }
                 }
                 else {
@@ -47093,7 +48106,7 @@
                 }
             };
             for (var i = 0; i < elementTypes.length; i++) {
-                var state_4 = _loop_13(i);
+                var state_4 = _loop_15(i);
                 if (typeof state_4 === "object")
                     return state_4.value;
             }
@@ -47139,7 +48152,7 @@
                 createTupleType(getTypeArguments(type).slice(index, endIndex), target.elementFlags.slice(index, endIndex), false, target.labeledElementDeclarations && target.labeledElementDeclarations.slice(index, endIndex));
         }
         function getKnownKeysOfTupleType(type) {
-            return getUnionType(ts.append(ts.arrayOf(type.target.fixedLength, function (i) { return getLiteralType("" + i); }), getIndexType(type.target.readonly ? globalReadonlyArrayType : globalArrayType)));
+            return getUnionType(ts.append(ts.arrayOf(type.target.fixedLength, function (i) { return getStringLiteralType("" + i); }), getIndexType(type.target.readonly ? globalReadonlyArrayType : globalArrayType)));
         }
         function getStartElementCount(type, flags) {
             var index = ts.findIndex(type.elementFlags, function (f) { return !(f & flags); });
@@ -47149,8 +48162,7 @@
             return type.elementFlags.length - ts.findLastIndex(type.elementFlags, function (f) { return !(f & flags); }) - 1;
         }
         function getTypeFromOptionalTypeNode(node) {
-            var type = getTypeFromTypeNode(node.type);
-            return strictNullChecks ? getOptionalType(type) : type;
+            return addOptionality(getTypeFromTypeNode(node.type), true);
         }
         function getTypeId(type) {
             return type.id;
@@ -47192,8 +48204,8 @@
             return includes;
         }
         function addTypesToUnion(typeSet, includes, types) {
-            for (var _i = 0, types_10 = types; _i < types_10.length; _i++) {
-                var type = types_10[_i];
+            for (var _i = 0, types_9 = types; _i < types_9.length; _i++) {
+                var type = types_9[_i];
                 includes = addTypeToUnion(typeSet, includes, type);
             }
             return includes;
@@ -47216,8 +48228,8 @@
                         ts.find(getPropertiesOfType(source), function (p) { return isUnitType(getTypeOfSymbol(p)); }) :
                         undefined;
                     var keyPropertyType = keyProperty && getRegularTypeOfLiteralType(getTypeOfSymbol(keyProperty));
-                    for (var _i = 0, types_11 = types; _i < types_11.length; _i++) {
-                        var target = types_11[_i];
+                    for (var _i = 0, types_10 = types; _i < types_10.length; _i++) {
+                        var target = types_10[_i];
                         if (source !== target) {
                             if (count === 100000) {
                                 var estimatedCount = (count / (len - i)) * len;
@@ -47253,7 +48265,7 @@
                 i--;
                 var t = types[i];
                 var flags = t.flags;
-                var remove = flags & 128 && includes & 4 ||
+                var remove = flags & (128 | 134217728 | 268435456) && includes & 4 ||
                     flags & 256 && includes & 8 ||
                     flags & 2048 && includes & 64 ||
                     flags & 8192 && includes & 4096 ||
@@ -47268,7 +48280,7 @@
             var templates = ts.filter(types, isPatternLiteralType);
             if (templates.length) {
                 var i = types.length;
-                var _loop_14 = function () {
+                var _loop_16 = function () {
                     i--;
                     var t = types[i];
                     if (t.flags & 128 && ts.some(templates, function (template) { return isTypeSubtypeOf(t, template); })) {
@@ -47276,7 +48288,7 @@
                     }
                 };
                 while (i > 0) {
-                    _loop_14();
+                    _loop_16();
                 }
             }
         }
@@ -47284,8 +48296,8 @@
             return !!(type.flags & 1048576 && (type.aliasSymbol || type.origin));
         }
         function addNamedUnions(namedUnions, types) {
-            for (var _i = 0, types_12 = types; _i < types_12.length; _i++) {
-                var t = types_12[_i];
+            for (var _i = 0, types_11 = types; _i < types_11.length; _i++) {
+                var t = types_11[_i];
                 if (t.flags & 1048576) {
                     var origin = t.origin;
                     if (t.aliasSymbol || origin && !(origin.flags & 1048576)) {
@@ -47316,7 +48328,13 @@
                 if (includes & 3) {
                     return includes & 1 ? includes & 8388608 ? wildcardType : anyType : unknownType;
                 }
-                if (includes & (2944 | 8192) || includes & 16384 && includes & 32768) {
+                if (exactOptionalPropertyTypes && includes & 32768) {
+                    var missingIndex = ts.binarySearch(typeSet, missingType, getTypeId, ts.compareValues);
+                    if (missingIndex >= 0 && containsType(typeSet, undefinedType)) {
+                        ts.orderedRemoveItemAt(typeSet, missingIndex);
+                    }
+                }
+                if (includes & (2944 | 8192 | 134217728 | 268435456) || includes & 16384 && includes & 32768) {
                     removeRedundantLiteralTypes(typeSet, includes, !!(unionReduction & 2));
                 }
                 if (includes & 128 && includes & 134217728) {
@@ -47338,14 +48356,14 @@
                 var namedUnions = [];
                 addNamedUnions(namedUnions, types);
                 var reducedTypes = [];
-                var _loop_15 = function (t) {
+                var _loop_17 = function (t) {
                     if (!ts.some(namedUnions, function (union) { return containsType(union.types, t); })) {
                         reducedTypes.push(t);
                     }
                 };
                 for (var _i = 0, typeSet_1 = typeSet; _i < typeSet_1.length; _i++) {
                     var t = typeSet_1[_i];
-                    _loop_15(t);
+                    _loop_17(t);
                 }
                 if (!aliasSymbol && namedUnions.length === 1 && reducedTypes.length === 0) {
                     return namedUnions[0];
@@ -47360,7 +48378,7 @@
                 }
             }
             var objectFlags = (includes & 468598819 ? 0 : 65536) |
-                (includes & 2097152 ? 67108864 : 0);
+                (includes & 2097152 ? 33554432 : 0);
             return getUnionTypeFromSortedList(typeSet, objectFlags, aliasSymbol, aliasTypeArguments, origin);
         }
         function getUnionOrIntersectionTypePredicate(signatures, kind) {
@@ -47396,15 +48414,6 @@
         function typePredicateKindsMatch(a, b) {
             return a.kind === b.kind && a.parameterIndex === b.parameterIndex;
         }
-        function createUnionType(types, aliasSymbol, aliasTypeArguments, origin) {
-            var result = createType(1048576);
-            result.objectFlags = getPropagatingFlagsOfTypes(types, 98304);
-            result.types = types;
-            result.origin = origin;
-            result.aliasSymbol = aliasSymbol;
-            result.aliasTypeArguments = aliasTypeArguments;
-            return result;
-        }
         function getUnionTypeFromSortedList(types, objectFlags, aliasSymbol, aliasTypeArguments, origin) {
             if (types.length === 0) {
                 return neverType;
@@ -47419,8 +48428,16 @@
             var id = typeKey + getAliasId(aliasSymbol, aliasTypeArguments);
             var type = unionTypes.get(id);
             if (!type) {
-                type = createUnionType(types, aliasSymbol, aliasTypeArguments, origin);
-                type.objectFlags |= objectFlags;
+                type = createType(1048576);
+                type.objectFlags = objectFlags | getPropagatingFlagsOfTypes(types, 98304);
+                type.types = types;
+                type.origin = origin;
+                type.aliasSymbol = aliasSymbol;
+                type.aliasTypeArguments = aliasTypeArguments;
+                if (types.length === 2 && types[0].flags & 512 && types[1].flags & 512) {
+                    type.flags |= 16;
+                    type.intrinsicName = "boolean";
+                }
                 unionTypes.set(id, type);
             }
             return type;
@@ -47460,8 +48477,8 @@
             return includes;
         }
         function addTypesToIntersection(typeSet, includes, types) {
-            for (var _i = 0, types_13 = types; _i < types_13.length; _i++) {
-                var type = types_13[_i];
+            for (var _i = 0, types_12 = types; _i < types_12.length; _i++) {
+                var type = types_12[_i];
                 includes = addTypeToIntersection(typeSet, includes, getRegularTypeOfLiteralType(type));
             }
             return includes;
@@ -47574,8 +48591,10 @@
             var typeMembershipMap = new ts.Map();
             var includes = addTypesToIntersection(typeMembershipMap, 0, types);
             var typeSet = ts.arrayFrom(typeMembershipMap.values());
-            if (includes & 131072 ||
-                strictNullChecks && includes & 98304 && includes & (524288 | 67108864 | 16777216) ||
+            if (includes & 131072) {
+                return ts.contains(typeSet, silentNeverType) ? silentNeverType : neverType;
+            }
+            if (strictNullChecks && includes & 98304 && includes & (524288 | 67108864 | 16777216) ||
                 includes & 67108864 && includes & (469892092 & ~67108864) ||
                 includes & 402653316 && includes & (469892092 & ~402653316) ||
                 includes & 296 && includes & (469892092 & ~296) ||
@@ -47704,37 +48723,33 @@
                 getUnionType([mapType(constraint, function (t) { return instantiateTypeAsMappedNameType(nameType, type, t); }), mapType(getUnionType(ts.map(properties || ts.emptyArray, function (p) { return getLiteralTypeFromProperty(p, 8576); })), function (t) { return instantiateTypeAsMappedNameType(nameType, type, t); })]) :
                 constraint;
         }
-        function maybeNonDistributiveNameType(type) {
-            return !!(type && (type.flags & 16777216 && (!type.root.isDistributive || maybeNonDistributiveNameType(type.checkType)) ||
-                type.flags & (3145728 | 134217728) && ts.some(type.types, maybeNonDistributiveNameType) ||
-                type.flags & (4194304 | 268435456) && maybeNonDistributiveNameType(type.type) ||
-                type.flags & 8388608 && maybeNonDistributiveNameType(type.indexType) ||
-                type.flags & 33554432 && maybeNonDistributiveNameType(type.substitute)));
+        function hasDistributiveNameType(mappedType) {
+            var typeVariable = getTypeParameterFromMappedType(mappedType);
+            return isDistributive(getNameTypeFromMappedType(mappedType) || typeVariable);
+            function isDistributive(type) {
+                return type.flags & (3 | 131068 | 131072 | 262144 | 524288 | 67108864) ? true :
+                    type.flags & 16777216 ? type.root.isDistributive && type.checkType === typeVariable :
+                        type.flags & (3145728 | 134217728) ? ts.every(type.types, isDistributive) :
+                            type.flags & 8388608 ? isDistributive(type.objectType) && isDistributive(type.indexType) :
+                                type.flags & 33554432 ? isDistributive(type.substitute) :
+                                    type.flags & 268435456 ? isDistributive(type.type) :
+                                        false;
+            }
         }
         function getLiteralTypeFromPropertyName(name) {
             if (ts.isPrivateIdentifier(name)) {
                 return neverType;
             }
-            return ts.isIdentifier(name) ? getLiteralType(ts.unescapeLeadingUnderscores(name.escapedText)) :
+            return ts.isIdentifier(name) ? getStringLiteralType(ts.unescapeLeadingUnderscores(name.escapedText)) :
                 getRegularTypeOfLiteralType(ts.isComputedPropertyName(name) ? checkComputedPropertyName(name) : checkExpression(name));
         }
-        function getBigIntLiteralType(node) {
-            return getLiteralType({
-                negative: false,
-                base10Value: ts.parsePseudoBigInt(node.text)
-            });
-        }
-        function getLiteralTypeFromProperty(prop, include) {
-            if (!(ts.getDeclarationModifierFlagsFromSymbol(prop) & 24)) {
+        function getLiteralTypeFromProperty(prop, include, includeNonPublic) {
+            if (includeNonPublic || !(ts.getDeclarationModifierFlagsFromSymbol(prop) & 24)) {
                 var type = getSymbolLinks(getLateBoundSymbol(prop)).nameType;
                 if (!type) {
-                    if (prop.escapedName === "default") {
-                        type = getLiteralType("default");
-                    }
-                    else {
-                        var name = prop.valueDeclaration && ts.getNameOfDeclaration(prop.valueDeclaration);
-                        type = name && getLiteralTypeFromPropertyName(name) || (!ts.isKnownSymbol(prop) ? getLiteralType(ts.symbolName(prop)) : undefined);
-                    }
+                    var name = ts.getNameOfDeclaration(prop.valueDeclaration);
+                    type = prop.escapedName === "default" ? getStringLiteralType("default") :
+                        name && getLiteralTypeFromPropertyName(name) || (!ts.isKnownSymbol(prop) ? getStringLiteralType(ts.symbolName(prop)) : undefined);
                 }
                 if (type && type.flags & include) {
                     return type;
@@ -47744,27 +48759,22 @@
         }
         function getLiteralTypeFromProperties(type, include, includeOrigin) {
             var origin = includeOrigin && (ts.getObjectFlags(type) & (3 | 4) || type.aliasSymbol) ? createOriginIndexType(type) : undefined;
-            return getUnionType(ts.map(getPropertiesOfType(type), function (p) { return getLiteralTypeFromProperty(p, include); }), 1, undefined, undefined, origin);
-        }
-        function getNonEnumNumberIndexInfo(type) {
-            var numberIndexInfo = getIndexInfoOfType(type, 1);
-            return numberIndexInfo !== enumNumberIndexInfo ? numberIndexInfo : undefined;
+            var propertyTypes = ts.map(getPropertiesOfType(type), function (prop) { return getLiteralTypeFromProperty(prop, include); });
+            var indexKeyTypes = ts.map(getIndexInfosOfType(type), function (info) { return info !== enumNumberIndexInfo && info.keyType.flags & include ?
+                info.keyType === stringType && include & 8 ? stringOrNumberType : info.keyType : neverType; });
+            return getUnionType(ts.concatenate(propertyTypes, indexKeyTypes), 1, undefined, undefined, origin);
         }
         function getIndexType(type, stringsOnly, noIndexSignatures) {
             if (stringsOnly === void 0) { stringsOnly = keyofStringsOnly; }
-            var includeOrigin = stringsOnly === keyofStringsOnly && !noIndexSignatures;
             type = getReducedType(type);
             return type.flags & 1048576 ? getIntersectionType(ts.map(type.types, function (t) { return getIndexType(t, stringsOnly, noIndexSignatures); })) :
                 type.flags & 2097152 ? getUnionType(ts.map(type.types, function (t) { return getIndexType(t, stringsOnly, noIndexSignatures); })) :
-                    type.flags & 58982400 || isGenericTupleType(type) || isGenericMappedType(type) && maybeNonDistributiveNameType(getNameTypeFromMappedType(type)) ? getIndexTypeForGenericType(type, stringsOnly) :
+                    type.flags & 58982400 || isGenericTupleType(type) || isGenericMappedType(type) && !hasDistributiveNameType(type) ? getIndexTypeForGenericType(type, stringsOnly) :
                         ts.getObjectFlags(type) & 32 ? getIndexTypeForMappedType(type, noIndexSignatures) :
                             type === wildcardType ? wildcardType :
                                 type.flags & 2 ? neverType :
                                     type.flags & (1 | 131072) ? keyofConstraintType :
-                                        stringsOnly ? !noIndexSignatures && getIndexInfoOfType(type, 0) ? stringType : getLiteralTypeFromProperties(type, 128, includeOrigin) :
-                                            !noIndexSignatures && getIndexInfoOfType(type, 0) ? getUnionType([stringType, numberType, getLiteralTypeFromProperties(type, 8192, includeOrigin)]) :
-                                                getNonEnumNumberIndexInfo(type) ? getUnionType([numberType, getLiteralTypeFromProperties(type, 128 | 8192, includeOrigin)]) :
-                                                    getLiteralTypeFromProperties(type, 8576, includeOrigin);
+                                        getLiteralTypeFromProperties(type, (noIndexSignatures ? 128 : 402653316) | (stringsOnly ? 0 : 296 | 12288), stringsOnly === keyofStringsOnly && !noIndexSignatures);
         }
         function getExtractStringType(type) {
             if (keyofStringsOnly) {
@@ -47781,15 +48791,15 @@
             var links = getNodeLinks(node);
             if (!links.resolvedType) {
                 switch (node.operator) {
-                    case 138:
+                    case 139:
                         links.resolvedType = getIndexType(getTypeFromTypeNode(node.type));
                         break;
-                    case 151:
-                        links.resolvedType = node.type.kind === 148
+                    case 152:
+                        links.resolvedType = node.type.kind === 149
                             ? getESSymbolLikeTypeForNode(ts.walkUpParenthesizedTypes(node.parent))
                             : errorType;
                         break;
-                    case 142:
+                    case 143:
                         links.resolvedType = getTypeFromTypeNode(node.type);
                         break;
                     default:
@@ -47801,7 +48811,7 @@
         function getTypeFromTemplateTypeNode(node) {
             var links = getNodeLinks(node);
             if (!links.resolvedType) {
-                links.resolvedType = getTemplateLiteralType(__spreadArray([node.head.text], ts.map(node.templateSpans, function (span) { return span.literal.text; })), ts.map(node.templateSpans, function (span) { return getTypeFromTypeNode(span.type); }));
+                links.resolvedType = getTemplateLiteralType(__spreadArray([node.head.text], ts.map(node.templateSpans, function (span) { return span.literal.text; }), true), ts.map(node.templateSpans, function (span) { return getTypeFromTypeNode(span.type); }));
             }
             return links.resolvedType;
         }
@@ -47822,7 +48832,7 @@
                 return stringType;
             }
             if (newTypes.length === 0) {
-                return getLiteralType(text);
+                return getStringLiteralType(text);
             }
             newTexts.push(text);
             if (ts.every(newTexts, function (t) { return t === ""; }) && ts.every(newTypes, function (t) { return !!(t.flags & 4); })) {
@@ -47875,7 +48885,7 @@
         function getStringMappingType(symbol, type) {
             return type.flags & (1048576 | 131072) ? mapType(type, function (t) { return getStringMappingType(symbol, t); }) :
                 isGenericIndexType(type) ? getStringMappingTypeForGenericType(symbol, type) :
-                    type.flags & 128 ? getLiteralType(applyStringMapping(symbol, type.value)) :
+                    type.flags & 128 ? getStringLiteralType(applyStringMapping(symbol, type.value)) :
                         type;
         }
         function applyStringMapping(symbol, str) {
@@ -47901,13 +48911,13 @@
             result.type = type;
             return result;
         }
-        function createIndexedAccessType(objectType, indexType, aliasSymbol, aliasTypeArguments, shouldIncludeUndefined) {
+        function createIndexedAccessType(objectType, indexType, accessFlags, aliasSymbol, aliasTypeArguments) {
             var type = createType(8388608);
             type.objectType = objectType;
             type.indexType = indexType;
+            type.accessFlags = accessFlags;
             type.aliasSymbol = aliasSymbol;
             type.aliasTypeArguments = aliasTypeArguments;
-            type.noUncheckedIndexedAccessCandidate = shouldIncludeUndefined;
             return type;
         }
         function isJSLiteralType(type) {
@@ -47946,14 +48956,17 @@
             }
             return true;
         }
-        function getPropertyTypeForIndexType(originalObjectType, objectType, indexType, fullIndexType, suppressNoImplicitAnyError, accessNode, accessFlags, noUncheckedIndexedAccessCandidate, reportDeprecated) {
+        function getPropertyTypeForIndexType(originalObjectType, objectType, indexType, fullIndexType, accessNode, accessFlags) {
             var _a;
-            var accessExpression = accessNode && accessNode.kind === 203 ? accessNode : undefined;
+            var accessExpression = accessNode && accessNode.kind === 205 ? accessNode : undefined;
             var propName = accessNode && ts.isPrivateIdentifier(accessNode) ? undefined : getPropertyNameFromIndex(indexType, accessNode);
             if (propName !== undefined) {
+                if (accessFlags & 256) {
+                    return getTypeOfPropertyOfContextualType(objectType, propName) || anyType;
+                }
                 var prop = getPropertyOfType(objectType, propName);
                 if (prop) {
-                    if (reportDeprecated && accessNode && prop.declarations && getDeclarationNodeFlagsFromSymbol(prop) & 134217728 && isUncalledFunctionReference(accessNode, prop)) {
+                    if (accessFlags & 64 && accessNode && prop.declarations && getDeclarationNodeFlagsFromSymbol(prop) & 134217728 && isUncalledFunctionReference(accessNode, prop)) {
                         var deprecatedNode = (_a = accessExpression === null || accessExpression === void 0 ? void 0 : accessExpression.argumentExpression) !== null && _a !== void 0 ? _a : (ts.isIndexedAccessTypeNode(accessNode) ? accessNode.indexType : accessNode);
                         addDeprecatedSuggestion(deprecatedNode, prop.declarations, propName);
                     }
@@ -47963,7 +48976,7 @@
                             error(accessExpression.argumentExpression, ts.Diagnostics.Cannot_assign_to_0_because_it_is_a_read_only_property, symbolToString(prop));
                             return undefined;
                         }
-                        if (accessFlags & 4) {
+                        if (accessFlags & 8) {
                             getNodeLinks(accessNode).resolvedSymbol = prop;
                         }
                         if (isThisPropertyAccessInConstructor(accessExpression, prop)) {
@@ -47976,7 +48989,7 @@
                         propType;
                 }
                 if (everyType(objectType, isTupleType) && isNumericLiteralName(propName) && +propName >= 0) {
-                    if (accessNode && everyType(objectType, function (t) { return !t.target.hasRestElement; }) && !(accessFlags & 8)) {
+                    if (accessNode && everyType(objectType, function (t) { return !t.target.hasRestElement; }) && !(accessFlags & 16)) {
                         var indexNode = getIndexNodeForAccessExpression(accessNode);
                         if (isTupleType(objectType)) {
                             error(indexNode, ts.Diagnostics.Tuple_type_0_of_length_1_has_no_element_at_index_2, typeToString(objectType), getTypeReferenceArity(objectType), ts.unescapeLeadingUnderscores(propName));
@@ -47985,10 +48998,10 @@
                             error(indexNode, ts.Diagnostics.Property_0_does_not_exist_on_type_1, ts.unescapeLeadingUnderscores(propName), typeToString(objectType));
                         }
                     }
-                    errorIfWritingToReadonlyIndex(getIndexInfoOfType(objectType, 1));
+                    errorIfWritingToReadonlyIndex(getIndexInfoOfType(objectType, numberType));
                     return mapType(objectType, function (t) {
                         var restType = getRestTypeOfTupleType(t) || undefinedType;
-                        return noUncheckedIndexedAccessCandidate ? getUnionType([restType, undefinedType]) : restType;
+                        return accessFlags & 1 ? getUnionType([restType, undefinedType]) : restType;
                     });
                 }
             }
@@ -47996,22 +49009,21 @@
                 if (objectType.flags & (1 | 131072)) {
                     return objectType;
                 }
-                var stringIndexInfo = getIndexInfoOfType(objectType, 0);
-                var indexInfo = isTypeAssignableToKind(indexType, 296) && getIndexInfoOfType(objectType, 1) || stringIndexInfo;
+                var indexInfo = getApplicableIndexInfo(objectType, indexType) || getIndexInfoOfType(objectType, stringType);
                 if (indexInfo) {
-                    if (accessFlags & 1 && indexInfo === stringIndexInfo) {
+                    if (accessFlags & 2 && indexInfo.keyType !== numberType) {
                         if (accessExpression) {
                             error(accessExpression, ts.Diagnostics.Type_0_cannot_be_used_to_index_type_1, typeToString(indexType), typeToString(originalObjectType));
                         }
                         return undefined;
                     }
-                    if (accessNode && !isTypeAssignableToKind(indexType, 4 | 8)) {
+                    if (accessNode && indexInfo.keyType === stringType && !isTypeAssignableToKind(indexType, 4 | 8)) {
                         var indexNode = getIndexNodeForAccessExpression(accessNode);
                         error(indexNode, ts.Diagnostics.Type_0_cannot_be_used_as_an_index_type, typeToString(indexType));
-                        return noUncheckedIndexedAccessCandidate ? getUnionType([indexInfo.type, undefinedType]) : indexInfo.type;
+                        return accessFlags & 1 ? getUnionType([indexInfo.type, undefinedType]) : indexInfo.type;
                     }
                     errorIfWritingToReadonlyIndex(indexInfo);
-                    return noUncheckedIndexedAccessCandidate ? getUnionType([indexInfo.type, undefinedType]) : indexInfo.type;
+                    return accessFlags & 1 ? getUnionType([indexInfo.type, undefinedType]) : indexInfo.type;
                 }
                 if (indexType.flags & 131072) {
                     return neverType;
@@ -48035,12 +49047,12 @@
                     if (objectType.symbol === globalThisSymbol && propName !== undefined && globalThisSymbol.exports.has(propName) && (globalThisSymbol.exports.get(propName).flags & 418)) {
                         error(accessExpression, ts.Diagnostics.Property_0_does_not_exist_on_type_1, ts.unescapeLeadingUnderscores(propName), typeToString(objectType));
                     }
-                    else if (noImplicitAny && !compilerOptions.suppressImplicitAnyIndexErrors && !suppressNoImplicitAnyError) {
+                    else if (noImplicitAny && !compilerOptions.suppressImplicitAnyIndexErrors && !(accessFlags & 128)) {
                         if (propName !== undefined && typeHasStaticProperty(propName, objectType)) {
                             var typeName = typeToString(objectType);
                             error(accessExpression, ts.Diagnostics.Property_0_does_not_exist_on_type_1_Did_you_mean_to_access_the_static_member_2_instead, propName, typeName, typeName + "[" + ts.getTextOfNode(accessExpression.argumentExpression) + "]");
                         }
-                        else if (getIndexTypeOfType(objectType, 1)) {
+                        else if (getIndexTypeOfType(objectType, numberType)) {
                             error(accessExpression.argumentExpression, ts.Diagnostics.Element_implicitly_has_an_any_type_because_index_expression_is_not_of_type_number);
                         }
                         else {
@@ -48108,9 +49120,9 @@
             }
         }
         function getIndexNodeForAccessExpression(accessNode) {
-            return accessNode.kind === 203 ? accessNode.argumentExpression :
-                accessNode.kind === 190 ? accessNode.indexType :
-                    accessNode.kind === 159 ? accessNode.expression :
+            return accessNode.kind === 205 ? accessNode.argumentExpression :
+                accessNode.kind === 192 ? accessNode.indexType :
+                    accessNode.kind === 160 ? accessNode.expression :
                         accessNode;
         }
         function isPatternLiteralPlaceholderType(type) {
@@ -48119,39 +49131,32 @@
         function isPatternLiteralType(type) {
             return !!(type.flags & 134217728) && ts.every(type.types, isPatternLiteralPlaceholderType);
         }
+        function isGenericType(type) {
+            return !!getGenericObjectFlags(type);
+        }
         function isGenericObjectType(type) {
-            if (type.flags & 3145728) {
-                if (!(type.objectFlags & 4194304)) {
-                    type.objectFlags |= 4194304 |
-                        (ts.some(type.types, isGenericObjectType) ? 8388608 : 0);
-                }
-                return !!(type.objectFlags & 8388608);
-            }
-            if (type.flags & 33554432) {
-                if (!(type.objectFlags & 4194304)) {
-                    type.objectFlags |= 4194304 |
-                        (isGenericObjectType(type.substitute) || isGenericObjectType(type.baseType) ? 8388608 : 0);
-                }
-                return !!(type.objectFlags & 8388608);
-            }
-            return !!(type.flags & 58982400) || isGenericMappedType(type) || isGenericTupleType(type);
+            return !!(getGenericObjectFlags(type) & 8388608);
         }
         function isGenericIndexType(type) {
+            return !!(getGenericObjectFlags(type) & 16777216);
+        }
+        function getGenericObjectFlags(type) {
             if (type.flags & 3145728) {
-                if (!(type.objectFlags & 16777216)) {
-                    type.objectFlags |= 16777216 |
-                        (ts.some(type.types, isGenericIndexType) ? 33554432 : 0);
+                if (!(type.objectFlags & 4194304)) {
+                    type.objectFlags |= 4194304 |
+                        ts.reduceLeft(type.types, function (flags, t) { return flags | getGenericObjectFlags(t); }, 0);
                 }
-                return !!(type.objectFlags & 33554432);
+                return type.objectFlags & 25165824;
             }
             if (type.flags & 33554432) {
-                if (!(type.objectFlags & 16777216)) {
-                    type.objectFlags |= 16777216 |
-                        (isGenericIndexType(type.substitute) || isGenericIndexType(type.baseType) ? 33554432 : 0);
+                if (!(type.objectFlags & 4194304)) {
+                    type.objectFlags |= 4194304 |
+                        getGenericObjectFlags(type.substitute) | getGenericObjectFlags(type.baseType);
                 }
-                return !!(type.objectFlags & 33554432);
+                return type.objectFlags & 25165824;
             }
-            return !!(type.flags & (58982400 | 4194304 | 134217728 | 268435456)) && !isPatternLiteralType(type);
+            return (type.flags & 58982400 || isGenericMappedType(type) || isGenericTupleType(type) ? 8388608 : 0) |
+                (type.flags & (58982400 | 4194304 | 134217728 | 268435456) && !isPatternLiteralType(type) ? 16777216 : 0);
         }
         function isThisTypeParameter(type) {
             return !!(type.flags & 262144 && type.isThisType);
@@ -48239,9 +49244,9 @@
             var templateMapper = combineTypeMappers(objectType.mapper, mapper);
             return instantiateType(getTemplateTypeFromMappedType(objectType), templateMapper);
         }
-        function getIndexedAccessType(objectType, indexType, noUncheckedIndexedAccessCandidate, accessNode, aliasSymbol, aliasTypeArguments, accessFlags) {
+        function getIndexedAccessType(objectType, indexType, accessFlags, accessNode, aliasSymbol, aliasTypeArguments) {
             if (accessFlags === void 0) { accessFlags = 0; }
-            return getIndexedAccessTypeOrUndefined(objectType, indexType, noUncheckedIndexedAccessCandidate, accessNode, accessFlags, aliasSymbol, aliasTypeArguments) || (accessNode ? errorType : unknownType);
+            return getIndexedAccessTypeOrUndefined(objectType, indexType, accessFlags, accessNode, aliasSymbol, aliasTypeArguments) || (accessNode ? errorType : unknownType);
         }
         function indexTypeLessThan(indexType, limit) {
             return everyType(indexType, function (t) {
@@ -48255,27 +49260,27 @@
                 return false;
             });
         }
-        function getIndexedAccessTypeOrUndefined(objectType, indexType, noUncheckedIndexedAccessCandidate, accessNode, accessFlags, aliasSymbol, aliasTypeArguments) {
+        function getIndexedAccessTypeOrUndefined(objectType, indexType, accessFlags, accessNode, aliasSymbol, aliasTypeArguments) {
             if (accessFlags === void 0) { accessFlags = 0; }
             if (objectType === wildcardType || indexType === wildcardType) {
                 return wildcardType;
             }
-            var shouldIncludeUndefined = noUncheckedIndexedAccessCandidate ||
-                (!!compilerOptions.noUncheckedIndexedAccess &&
-                    (accessFlags & (2 | 16)) === 16);
             if (isStringIndexSignatureOnlyType(objectType) && !(indexType.flags & 98304) && isTypeAssignableToKind(indexType, 4 | 8)) {
                 indexType = stringType;
             }
-            if (isGenericIndexType(indexType) || (accessNode && accessNode.kind !== 190 ?
+            if (compilerOptions.noUncheckedIndexedAccess && accessFlags & 32)
+                accessFlags |= 1;
+            if (isGenericIndexType(indexType) || (accessNode && accessNode.kind !== 192 ?
                 isGenericTupleType(objectType) && !indexTypeLessThan(indexType, objectType.target.fixedLength) :
                 isGenericObjectType(objectType) && !(isTupleType(objectType) && indexTypeLessThan(indexType, objectType.target.fixedLength)))) {
                 if (objectType.flags & 3) {
                     return objectType;
                 }
-                var id = objectType.id + "," + indexType.id + (shouldIncludeUndefined ? "?" : "") + getAliasId(aliasSymbol, aliasTypeArguments);
+                var persistentAccessFlags = accessFlags & 1;
+                var id = objectType.id + "," + indexType.id + "," + persistentAccessFlags + getAliasId(aliasSymbol, aliasTypeArguments);
                 var type = indexedAccessTypes.get(id);
                 if (!type) {
-                    indexedAccessTypes.set(id, type = createIndexedAccessType(objectType, indexType, aliasSymbol, aliasTypeArguments, shouldIncludeUndefined));
+                    indexedAccessTypes.set(id, type = createIndexedAccessType(objectType, indexType, persistentAccessFlags, aliasSymbol, aliasTypeArguments));
                 }
                 return type;
             }
@@ -48285,7 +49290,7 @@
                 var wasMissingProp = false;
                 for (var _i = 0, _a = indexType.types; _i < _a.length; _i++) {
                     var t = _a[_i];
-                    var propType = getPropertyTypeForIndexType(objectType, apparentObjectType, t, indexType, wasMissingProp, accessNode, accessFlags, shouldIncludeUndefined);
+                    var propType = getPropertyTypeForIndexType(objectType, apparentObjectType, t, indexType, accessNode, accessFlags | (wasMissingProp ? 128 : 0));
                     if (propType) {
                         propTypes.push(propType);
                     }
@@ -48299,11 +49304,11 @@
                 if (wasMissingProp) {
                     return undefined;
                 }
-                return accessFlags & 2
+                return accessFlags & 4
                     ? getIntersectionType(propTypes, aliasSymbol, aliasTypeArguments)
                     : getUnionType(propTypes, 1, aliasSymbol, aliasTypeArguments);
             }
-            return getPropertyTypeForIndexType(objectType, apparentObjectType, indexType, indexType, false, accessNode, accessFlags | 4, shouldIncludeUndefined, true);
+            return getPropertyTypeForIndexType(objectType, apparentObjectType, indexType, indexType, accessNode, accessFlags | 8 | 64);
         }
         function getTypeFromIndexedAccessTypeNode(node) {
             var links = getNodeLinks(node);
@@ -48311,7 +49316,7 @@
                 var objectType = getTypeFromTypeNode(node.objectType);
                 var indexType = getTypeFromTypeNode(node.indexType);
                 var potentialAlias = getAliasSymbolForTypeNode(node);
-                var resolved = getIndexedAccessType(objectType, indexType, undefined, node, potentialAlias, getTypeArgumentsForAliasSymbol(potentialAlias));
+                var resolved = getIndexedAccessType(objectType, indexType, 0, node, potentialAlias, getTypeArgumentsForAliasSymbol(potentialAlias));
                 links.resolvedType = resolved.flags & 8388608 &&
                     resolved.objectType === objectType &&
                     resolved.indexType === indexType ?
@@ -48342,11 +49347,10 @@
             return type;
         }
         function isTypicalNondistributiveConditional(root) {
-            return !root.isDistributive
-                && root.node.checkType.kind === 180
-                && ts.length(root.node.checkType.elements) === 1
-                && root.node.extendsType.kind === 180
-                && ts.length(root.node.extendsType.elements) === 1;
+            return !root.isDistributive && isSingletonTupleType(root.node.checkType) && isSingletonTupleType(root.node.extendsType);
+        }
+        function isSingletonTupleType(node) {
+            return ts.isTupleTypeNode(node) && ts.length(node.elements) === 1 && !ts.isOptionalTypeNode(node.elements[0]) && !ts.isRestTypeNode(node.elements[0]);
         }
         function unwrapNondistributiveConditionalTuple(root, type) {
             return isTypicalNondistributiveConditional(root) && isTupleType(type) ? getTypeArguments(type)[0] : type;
@@ -48357,7 +49361,7 @@
             while (true) {
                 var isUnwrapped = isTypicalNondistributiveConditional(root);
                 var checkType = instantiateType(unwrapNondistributiveConditionalTuple(root, getActualTypeVariable(root.checkType)), mapper);
-                var checkTypeInstantiable = isGenericObjectType(checkType) || isGenericIndexType(checkType);
+                var checkTypeInstantiable = isGenericType(checkType);
                 var extendsType = instantiateType(unwrapNondistributiveConditionalTuple(root, root.extendsType), mapper);
                 if (checkType === wildcardType || extendsType === wildcardType) {
                     return wildcardType;
@@ -48371,7 +49375,7 @@
                     combinedMapper = mapper ? combineTypeMappers(context.mapper, mapper) : context.mapper;
                 }
                 var inferredExtendsType = combinedMapper ? instantiateType(unwrapNondistributiveConditionalTuple(root, root.extendsType), combinedMapper) : extendsType;
-                if (!checkTypeInstantiable && !isGenericObjectType(inferredExtendsType) && !isGenericIndexType(inferredExtendsType)) {
+                if (!checkTypeInstantiable && !isGenericType(inferredExtendsType)) {
                     if (!(inferredExtendsType.flags & 3) && ((checkType.flags & 1 && !isUnwrapped) || !isTypeAssignableTo(getPermissiveInstantiation(checkType), getPermissiveInstantiation(inferredExtendsType)))) {
                         if (checkType.flags & 1 && !isUnwrapped) {
                             (extraTypes || (extraTypes = [])).push(instantiateType(getTypeFromTypeNode(root.node.trueType), combinedMapper || mapper));
@@ -48553,7 +49557,7 @@
         }
         function getAliasSymbolForTypeNode(node) {
             var host = node.parent;
-            while (ts.isParenthesizedTypeNode(host) || ts.isJSDocTypeExpression(host) || ts.isTypeOperatorNode(host) && host.operator === 142) {
+            while (ts.isParenthesizedTypeNode(host) || ts.isJSDocTypeExpression(host) || ts.isTypeOperatorNode(host) && host.operator === 143) {
                 host = host.parent;
             }
             return ts.isTypeAlias(host) ? getSymbolOfNode(host) : undefined;
@@ -48568,16 +49572,19 @@
             return isEmptyObjectType(type) || !!(type.flags & (65536 | 32768 | 528 | 296 | 2112 | 402653316 | 1056 | 67108864 | 4194304));
         }
         function tryMergeUnionOfObjectTypeAndEmptyObject(type, readonly) {
+            if (!(type.flags & 1048576)) {
+                return type;
+            }
             if (ts.every(type.types, isEmptyObjectTypeOrSpreadsIntoEmptyObject)) {
                 return ts.find(type.types, isEmptyObjectType) || emptyObjectType;
             }
             var firstType = ts.find(type.types, function (t) { return !isEmptyObjectTypeOrSpreadsIntoEmptyObject(t); });
             if (!firstType) {
-                return undefined;
+                return type;
             }
-            var secondType = firstType && ts.find(type.types, function (t) { return t !== firstType && !isEmptyObjectTypeOrSpreadsIntoEmptyObject(t); });
+            var secondType = ts.find(type.types, function (t) { return t !== firstType && !isEmptyObjectTypeOrSpreadsIntoEmptyObject(t); });
             if (secondType) {
-                return undefined;
+                return type;
             }
             return getAnonymousPartialType(firstType);
             function getAnonymousPartialType(type) {
@@ -48590,14 +49597,14 @@
                         var isSetonlyAccessor = prop.flags & 65536 && !(prop.flags & 32768);
                         var flags = 4 | 16777216;
                         var result = createSymbol(flags, prop.escapedName, getIsLateCheckFlag(prop) | (readonly ? 8 : 0));
-                        result.type = isSetonlyAccessor ? undefinedType : getUnionType([getTypeOfSymbol(prop), undefinedType]);
+                        result.type = isSetonlyAccessor ? undefinedType : addOptionality(getTypeOfSymbol(prop), true);
                         result.declarations = prop.declarations;
                         result.nameType = getSymbolLinks(prop).nameType;
                         result.syntheticOrigin = prop;
                         members.set(prop.escapedName, result);
                     }
                 }
-                var spread = createAnonymousType(type.symbol, members, ts.emptyArray, ts.emptyArray, getIndexInfoOfType(type, 0), getIndexInfoOfType(type, 1));
+                var spread = createAnonymousType(type.symbol, members, ts.emptyArray, ts.emptyArray, getIndexInfosOfType(type));
                 spread.objectFlags |= 128 | 262144;
                 return spread;
             }
@@ -48615,20 +49622,14 @@
             if (right.flags & 131072) {
                 return left;
             }
+            left = tryMergeUnionOfObjectTypeAndEmptyObject(left, readonly);
             if (left.flags & 1048576) {
-                var merged = tryMergeUnionOfObjectTypeAndEmptyObject(left, readonly);
-                if (merged) {
-                    return getSpreadType(merged, right, symbol, objectFlags, readonly);
-                }
                 return checkCrossProductUnion([left, right])
                     ? mapType(left, function (t) { return getSpreadType(t, right, symbol, objectFlags, readonly); })
                     : errorType;
             }
+            right = tryMergeUnionOfObjectTypeAndEmptyObject(right, readonly);
             if (right.flags & 1048576) {
-                var merged = tryMergeUnionOfObjectTypeAndEmptyObject(right, readonly);
-                if (merged) {
-                    return getSpreadType(left, merged, symbol, objectFlags, readonly);
-                }
                 return checkCrossProductUnion([left, right])
                     ? mapType(right, function (t) { return getSpreadType(left, t, symbol, objectFlags, readonly); })
                     : errorType;
@@ -48651,16 +49652,7 @@
             }
             var members = ts.createSymbolTable();
             var skippedPrivateMembers = new ts.Set();
-            var stringIndexInfo;
-            var numberIndexInfo;
-            if (left === emptyObjectType) {
-                stringIndexInfo = getIndexInfoOfType(right, 0);
-                numberIndexInfo = getIndexInfoOfType(right, 1);
-            }
-            else {
-                stringIndexInfo = unionSpreadIndexInfos(getIndexInfoOfType(left, 0), getIndexInfoOfType(right, 0));
-                numberIndexInfo = unionSpreadIndexInfos(getIndexInfoOfType(left, 1), getIndexInfoOfType(right, 1));
-            }
+            var indexInfos = left === emptyObjectType ? getIndexInfosOfType(right) : getUnionIndexInfos([left, right]);
             for (var _i = 0, _a = getPropertiesOfType(right); _i < _a.length; _i++) {
                 var rightProp = _a[_i];
                 if (ts.getDeclarationModifierFlagsFromSymbol(rightProp) & (8 | 16)) {
@@ -48682,7 +49674,7 @@
                         var declarations = ts.concatenate(leftProp.declarations, rightProp.declarations);
                         var flags = 4 | (leftProp.flags & 16777216);
                         var result = createSymbol(flags, leftProp.escapedName);
-                        result.type = getUnionType([getTypeOfSymbol(leftProp), getTypeWithFacts(rightType, 524288)]);
+                        result.type = getUnionType([getTypeOfSymbol(leftProp), removeMissingOrUndefinedType(rightType)]);
                         result.leftSpread = leftProp;
                         result.rightSpread = rightProp;
                         result.declarations = declarations;
@@ -48694,7 +49686,7 @@
                     members.set(leftProp.escapedName, getSpreadSymbol(leftProp, readonly));
                 }
             }
-            var spread = createAnonymousType(symbol, members, ts.emptyArray, ts.emptyArray, getIndexInfoWithReadonly(stringIndexInfo, readonly), getIndexInfoWithReadonly(numberIndexInfo, readonly));
+            var spread = createAnonymousType(symbol, members, ts.emptyArray, ts.emptyArray, ts.sameMap(indexInfos, function (info) { return getIndexInfoWithReadonly(info, readonly); }));
             spread.objectFlags |= 128 | 262144 | 4194304 | objectFlags;
             return spread;
         }
@@ -48718,19 +49710,19 @@
             return result;
         }
         function getIndexInfoWithReadonly(info, readonly) {
-            return info && info.isReadonly !== readonly ? createIndexInfo(info.type, readonly, info.declaration) : info;
+            return info.isReadonly !== readonly ? createIndexInfo(info.keyType, info.type, readonly, info.declaration) : info;
         }
-        function createLiteralType(flags, value, symbol) {
+        function createLiteralType(flags, value, symbol, regularType) {
             var type = createType(flags);
             type.symbol = symbol;
             type.value = value;
+            type.regularType = regularType || type;
             return type;
         }
         function getFreshTypeOfLiteralType(type) {
             if (type.flags & 2944) {
                 if (!type.freshType) {
-                    var freshType = createLiteralType(type.flags, type.value, type.symbol);
-                    freshType.regularType = type;
+                    var freshType = createLiteralType(type.flags, type.value, type.symbol, type);
                     freshType.freshType = freshType;
                     type.freshType = freshType;
                 }
@@ -48746,21 +49738,32 @@
         function isFreshLiteralType(type) {
             return !!(type.flags & 2944) && type.freshType === type;
         }
-        function getLiteralType(value, enumId, symbol) {
-            var qualifier = typeof value === "number" ? "#" : typeof value === "string" ? "@" : "n";
-            var key = (enumId ? enumId : "") + qualifier + (typeof value === "object" ? ts.pseudoBigIntToString(value) : value);
-            var type = literalTypes.get(key);
-            if (!type) {
-                var flags = (typeof value === "number" ? 256 :
-                    typeof value === "string" ? 128 : 2048) |
-                    (enumId ? 1024 : 0);
-                literalTypes.set(key, type = createLiteralType(flags, value, symbol));
-                type.regularType = type;
-            }
-            return type;
+        function getStringLiteralType(value) {
+            var type;
+            return stringLiteralTypes.get(value) ||
+                (stringLiteralTypes.set(value, type = createLiteralType(128, value)), type);
+        }
+        function getNumberLiteralType(value) {
+            var type;
+            return numberLiteralTypes.get(value) ||
+                (numberLiteralTypes.set(value, type = createLiteralType(256, value)), type);
+        }
+        function getBigIntLiteralType(value) {
+            var type;
+            var key = ts.pseudoBigIntToString(value);
+            return bigIntLiteralTypes.get(key) ||
+                (bigIntLiteralTypes.set(key, type = createLiteralType(2048, value)), type);
+        }
+        function getEnumLiteralType(value, enumId, symbol) {
+            var type;
+            var qualifier = typeof value === "string" ? "@" : "#";
+            var key = enumId + qualifier + value;
+            var flags = 1024 | (typeof value === "string" ? 128 : 256);
+            return enumLiteralTypes.get(key) ||
+                (enumLiteralTypes.set(key, type = createLiteralType(flags, value, symbol)), type);
         }
         function getTypeFromLiteralTypeNode(node) {
-            if (node.literal.kind === 103) {
+            if (node.literal.kind === 104) {
                 return nullType;
             }
             var links = getNodeLinks(node);
@@ -48786,8 +49789,8 @@
         function getThisType(node) {
             var container = ts.getThisContainer(node, false);
             var parent = container && container.parent;
-            if (parent && (ts.isClassLike(parent) || parent.kind === 254)) {
-                if (!ts.hasSyntacticModifier(container, 32) &&
+            if (parent && (ts.isClassLike(parent) || parent.kind === 256)) {
+                if (!ts.isStatic(container) &&
                     (!ts.isConstructorDeclaration(container) || ts.isNodeDescendantOf(node, container.body))) {
                     return getDeclaredTypeOfClassOrInterface(getSymbolOfNode(parent)).thisType;
                 }
@@ -48817,17 +49820,17 @@
         }
         function getArrayElementTypeNode(node) {
             switch (node.kind) {
-                case 187:
+                case 189:
                     return getArrayElementTypeNode(node.type);
-                case 180:
+                case 182:
                     if (node.elements.length === 1) {
                         node = node.elements[0];
-                        if (node.kind === 182 || node.kind === 193 && node.dotDotDotToken) {
+                        if (node.kind === 184 || node.kind === 195 && node.dotDotDotToken) {
                             return getArrayElementTypeNode(node.type);
                         }
                     }
                     break;
-                case 179:
+                case 181:
                     return node.elementType;
             }
             return undefined;
@@ -48836,102 +49839,101 @@
             var links = getNodeLinks(node);
             return links.resolvedType || (links.resolvedType =
                 node.dotDotDotToken ? getTypeFromRestTypeNode(node) :
-                    node.questionToken && strictNullChecks ? getOptionalType(getTypeFromTypeNode(node.type)) :
-                        getTypeFromTypeNode(node.type));
+                    addOptionality(getTypeFromTypeNode(node.type), true, !!node.questionToken));
         }
         function getTypeFromTypeNode(node) {
             return getConditionalFlowTypeOfType(getTypeFromTypeNodeWorker(node), node);
         }
         function getTypeFromTypeNodeWorker(node) {
             switch (node.kind) {
-                case 128:
-                case 304:
-                case 305:
-                    return anyType;
-                case 152:
-                    return unknownType;
-                case 147:
-                    return stringType;
-                case 144:
-                    return numberType;
-                case 155:
-                    return bigintType;
-                case 131:
-                    return booleanType;
-                case 148:
-                    return esSymbolType;
-                case 113:
-                    return voidType;
-                case 150:
-                    return undefinedType;
-                case 103:
-                    return nullType;
-                case 141:
-                    return neverType;
-                case 145:
-                    return node.flags & 131072 && !noImplicitAny ? anyType : nonPrimitiveType;
-                case 136:
-                    return intrinsicMarkerType;
-                case 188:
-                case 107:
-                    return getTypeFromThisTypeNode(node);
-                case 192:
-                    return getTypeFromLiteralTypeNode(node);
-                case 174:
-                    return getTypeFromTypeReference(node);
-                case 173:
-                    return node.assertsModifier ? voidType : booleanType;
-                case 224:
-                    return getTypeFromTypeReference(node);
-                case 177:
-                    return getTypeFromTypeQueryNode(node);
-                case 179:
-                case 180:
-                    return getTypeFromArrayOrTupleTypeNode(node);
-                case 181:
-                    return getTypeFromOptionalTypeNode(node);
-                case 183:
-                    return getTypeFromUnionTypeNode(node);
-                case 184:
-                    return getTypeFromIntersectionTypeNode(node);
-                case 306:
-                    return getTypeFromJSDocNullableTypeNode(node);
-                case 308:
-                    return addOptionality(getTypeFromTypeNode(node.type));
-                case 193:
-                    return getTypeFromNamedTupleTypeNode(node);
-                case 187:
+                case 129:
                 case 307:
-                case 302:
-                    return getTypeFromTypeNode(node.type);
-                case 182:
-                    return getTypeFromRestTypeNode(node);
-                case 310:
-                    return getTypeFromJSDocVariadicType(node);
-                case 175:
-                case 176:
-                case 178:
-                case 314:
-                case 309:
-                case 315:
-                    return getTypeFromTypeLiteralOrFunctionOrConstructorTypeNode(node);
-                case 189:
-                    return getTypeFromTypeOperatorNode(node);
+                case 308:
+                    return anyType;
+                case 153:
+                    return unknownType;
+                case 148:
+                    return stringType;
+                case 145:
+                    return numberType;
+                case 156:
+                    return bigintType;
+                case 132:
+                    return booleanType;
+                case 149:
+                    return esSymbolType;
+                case 114:
+                    return voidType;
+                case 151:
+                    return undefinedType;
+                case 104:
+                    return nullType;
+                case 142:
+                    return neverType;
+                case 146:
+                    return node.flags & 131072 && !noImplicitAny ? anyType : nonPrimitiveType;
+                case 137:
+                    return intrinsicMarkerType;
                 case 190:
-                    return getTypeFromIndexedAccessTypeNode(node);
-                case 191:
-                    return getTypeFromMappedTypeNode(node);
-                case 185:
-                    return getTypeFromConditionalTypeNode(node);
-                case 186:
-                    return getTypeFromInferTypeNode(node);
+                case 108:
+                    return getTypeFromThisTypeNode(node);
                 case 194:
-                    return getTypeFromTemplateTypeNode(node);
+                    return getTypeFromLiteralTypeNode(node);
+                case 176:
+                    return getTypeFromTypeReference(node);
+                case 175:
+                    return node.assertsModifier ? voidType : booleanType;
+                case 226:
+                    return getTypeFromTypeReference(node);
+                case 179:
+                    return getTypeFromTypeQueryNode(node);
+                case 181:
+                case 182:
+                    return getTypeFromArrayOrTupleTypeNode(node);
+                case 183:
+                    return getTypeFromOptionalTypeNode(node);
+                case 185:
+                    return getTypeFromUnionTypeNode(node);
+                case 186:
+                    return getTypeFromIntersectionTypeNode(node);
+                case 309:
+                    return getTypeFromJSDocNullableTypeNode(node);
+                case 311:
+                    return addOptionality(getTypeFromTypeNode(node.type));
+                case 195:
+                    return getTypeFromNamedTupleTypeNode(node);
+                case 189:
+                case 310:
+                case 304:
+                    return getTypeFromTypeNode(node.type);
+                case 184:
+                    return getTypeFromRestTypeNode(node);
+                case 313:
+                    return getTypeFromJSDocVariadicType(node);
+                case 177:
+                case 178:
+                case 180:
+                case 317:
+                case 312:
+                case 318:
+                    return getTypeFromTypeLiteralOrFunctionOrConstructorTypeNode(node);
+                case 191:
+                    return getTypeFromTypeOperatorNode(node);
+                case 192:
+                    return getTypeFromIndexedAccessTypeNode(node);
+                case 193:
+                    return getTypeFromMappedTypeNode(node);
+                case 187:
+                    return getTypeFromConditionalTypeNode(node);
+                case 188:
+                    return getTypeFromInferTypeNode(node);
                 case 196:
+                    return getTypeFromTemplateTypeNode(node);
+                case 198:
                     return getTypeFromImportTypeNode(node);
-                case 78:
-                case 158:
-                case 202:
+                case 79:
+                case 159:
+                case 204:
                     var symbol = getSymbolAtLocation(node);
                     return symbol ? getDeclaredTypeOfSymbol(symbol) : errorType;
                 default:
@@ -48961,6 +49963,9 @@
         function instantiateSignatures(signatures, mapper) {
             return instantiateList(signatures, mapper, instantiateSignature);
         }
+        function instantiateIndexInfos(indexInfos, mapper) {
+            return instantiateList(indexInfos, mapper, instantiateIndexInfo);
+        }
         function createTypeMapper(sources, targets) {
             return sources.length === 1 ? makeUnaryTypeMapper(sources[0], targets ? targets[0] : anyType) : makeArrayTypeMapper(sources, targets);
         }
@@ -49107,14 +50112,14 @@
             return type;
         }
         function maybeTypeParameterReference(node) {
-            return !(node.parent.kind === 174 && node.parent.typeArguments && node === node.parent.typeName ||
-                node.parent.kind === 196 && node.parent.typeArguments && node === node.parent.qualifier);
+            return !(node.parent.kind === 176 && node.parent.typeArguments && node === node.parent.typeName ||
+                node.parent.kind === 198 && node.parent.typeArguments && node === node.parent.qualifier);
         }
         function isTypeParameterPossiblyReferenced(tp, node) {
             if (tp.symbol && tp.symbol.declarations && tp.symbol.declarations.length === 1) {
                 var container = tp.symbol.declarations[0].parent;
                 for (var n = node; n !== container; n = n.parent) {
-                    if (!n || n.kind === 231 || n.kind === 185 && ts.forEachChild(n.extendsType, containsReference)) {
+                    if (!n || n.kind === 233 || n.kind === 187 && ts.forEachChild(n.extendsType, containsReference)) {
                         return true;
                     }
                 }
@@ -49123,15 +50128,15 @@
             return true;
             function containsReference(node) {
                 switch (node.kind) {
-                    case 188:
+                    case 190:
                         return !!tp.isThisType;
-                    case 78:
+                    case 79:
                         return !tp.isThisType && ts.isPartOfTypeNode(node) && maybeTypeParameterReference(node) &&
                             getTypeFromTypeNodeWorker(node) === tp;
-                    case 177:
+                    case 179:
                         return true;
+                    case 167:
                     case 166:
-                    case 165:
                         return !node.type && !!node.body ||
                             ts.some(node.typeParameters, containsReference) ||
                             ts.some(node.parameters, containsReference) ||
@@ -49198,7 +50203,7 @@
         function instantiateMappedTupleType(tupleType, mappedType, mapper) {
             var elementFlags = tupleType.target.elementFlags;
             var elementTypes = ts.map(getTypeArguments(tupleType), function (_, i) {
-                return instantiateMappedTypeTemplate(mappedType, getLiteralType("" + i), !!(elementFlags[i] & 2), mapper);
+                return instantiateMappedTypeTemplate(mappedType, getStringLiteralType("" + i), !!(elementFlags[i] & 2), mapper);
             });
             var modifiers = getMappedTypeModifiers(mappedType);
             var newTupleModifiers = modifiers & 4 ? ts.map(elementFlags, function (f) { return f & 1 ? 2 : f; }) :
@@ -49212,7 +50217,7 @@
             var templateMapper = appendTypeMapping(mapper, getTypeParameterFromMappedType(type), key);
             var propType = instantiateType(getTemplateTypeFromMappedType(type.target || type), templateMapper);
             var modifiers = getMappedTypeModifiers(type);
-            return strictNullChecks && modifiers & 4 && !maybeTypeOfKind(propType, 32768 | 16384) ? getOptionalType(propType) :
+            return strictNullChecks && modifiers & 4 && !maybeTypeOfKind(propType, 32768 | 16384) ? getOptionalType(propType, true) :
                 strictNullChecks && modifiers & 8 && isOptional ? getTypeWithFacts(propType, 524288) :
                     propType;
         }
@@ -49321,7 +50326,7 @@
             if (flags & 8388608) {
                 var newAliasSymbol = aliasSymbol || type.aliasSymbol;
                 var newAliasTypeArguments = aliasSymbol ? aliasTypeArguments : instantiateTypes(type.aliasTypeArguments, mapper);
-                return getIndexedAccessType(instantiateType(type.objectType, mapper), instantiateType(type.indexType, mapper), type.noUncheckedIndexedAccessCandidate, undefined, newAliasSymbol, newAliasTypeArguments);
+                return getIndexedAccessType(instantiateType(type.objectType, mapper), instantiateType(type.indexType, mapper), type.accessFlags, undefined, newAliasSymbol, newAliasTypeArguments);
             }
             if (flags & 16777216) {
                 return getConditionalTypeInstantiation(type, combineTypeMappers(type.mapper, mapper), aliasSymbol, aliasTypeArguments);
@@ -49372,37 +50377,37 @@
             return type.restrictiveInstantiation;
         }
         function instantiateIndexInfo(info, mapper) {
-            return info && createIndexInfo(instantiateType(info.type, mapper), info.isReadonly, info.declaration);
+            return createIndexInfo(info.keyType, instantiateType(info.type, mapper), info.isReadonly, info.declaration);
         }
         function isContextSensitive(node) {
-            ts.Debug.assert(node.kind !== 166 || ts.isObjectLiteralMethod(node));
+            ts.Debug.assert(node.kind !== 167 || ts.isObjectLiteralMethod(node));
             switch (node.kind) {
-                case 209:
-                case 210:
-                case 166:
-                case 252:
+                case 211:
+                case 212:
+                case 167:
+                case 254:
                     return isContextSensitiveFunctionLikeDeclaration(node);
-                case 201:
+                case 203:
                     return ts.some(node.properties, isContextSensitive);
-                case 200:
+                case 202:
                     return ts.some(node.elements, isContextSensitive);
-                case 218:
+                case 220:
                     return isContextSensitive(node.whenTrue) ||
                         isContextSensitive(node.whenFalse);
-                case 217:
+                case 219:
                     return (node.operatorToken.kind === 56 || node.operatorToken.kind === 60) &&
                         (isContextSensitive(node.left) || isContextSensitive(node.right));
-                case 289:
+                case 291:
                     return isContextSensitive(node.initializer);
-                case 208:
+                case 210:
                     return isContextSensitive(node.expression);
-                case 282:
+                case 284:
                     return ts.some(node.properties, isContextSensitive) || ts.isJsxOpeningElement(node.parent) && ts.some(node.parent.parent.children, isContextSensitive);
-                case 281: {
+                case 283: {
                     var initializer = node.initializer;
                     return !!initializer && isContextSensitive(initializer);
                 }
-                case 284: {
+                case 286: {
                     var expression = node.expression;
                     return !!expression && isContextSensitive(expression);
                 }
@@ -49411,24 +50416,10 @@
         }
         function isContextSensitiveFunctionLikeDeclaration(node) {
             return (!ts.isFunctionDeclaration(node) || ts.isInJSFile(node) && !!getTypeForDeclarationFromJSDocComment(node)) &&
-                (hasContextSensitiveParameters(node) || hasContextSensitiveReturnExpression(node));
-        }
-        function hasContextSensitiveParameters(node) {
-            if (!node.typeParameters) {
-                if (ts.some(node.parameters, function (p) { return !ts.getEffectiveTypeAnnotationNode(p); })) {
-                    return true;
-                }
-                if (node.kind !== 210) {
-                    var parameter = ts.firstOrUndefined(node.parameters);
-                    if (!(parameter && ts.parameterIsThisKeyword(parameter))) {
-                        return true;
-                    }
-                }
-            }
-            return false;
+                (ts.hasContextSensitiveParameters(node) || hasContextSensitiveReturnExpression(node));
         }
         function hasContextSensitiveReturnExpression(node) {
-            return !node.typeParameters && !ts.getEffectiveReturnTypeNode(node) && !!node.body && node.body.kind !== 231 && isContextSensitive(node.body);
+            return !node.typeParameters && !ts.getEffectiveReturnTypeNode(node) && !!node.body && node.body.kind !== 233 && isContextSensitive(node.body);
         }
         function isContextSensitiveFunctionOrObjectLiteralMethod(func) {
             return (ts.isInJSFile(func) && ts.isFunctionDeclaration(func) || isFunctionExpressionOrArrowFunction(func) || ts.isObjectLiteralMethod(func)) &&
@@ -49443,6 +50434,7 @@
                     result.properties = resolved.properties;
                     result.callSignatures = ts.emptyArray;
                     result.constructSignatures = ts.emptyArray;
+                    result.indexInfos = ts.emptyArray;
                     return result;
                 }
             }
@@ -49508,23 +50500,23 @@
                 return true;
             }
             switch (node.kind) {
-                case 284:
-                case 208:
+                case 286:
+                case 210:
                     return elaborateError(node.expression, source, target, relation, headMessage, containingMessageChain, errorOutputContainer);
-                case 217:
+                case 219:
                     switch (node.operatorToken.kind) {
-                        case 62:
+                        case 63:
                         case 27:
                             return elaborateError(node.right, source, target, relation, headMessage, containingMessageChain, errorOutputContainer);
                     }
                     break;
-                case 201:
+                case 203:
                     return elaborateObjectLiteral(node, source, target, relation, containingMessageChain, errorOutputContainer);
-                case 200:
+                case 202:
                     return elaborateArrayLiteral(node, source, target, relation, containingMessageChain, errorOutputContainer);
-                case 282:
+                case 284:
                     return elaborateJsxComponents(node, source, target, relation, containingMessageChain, errorOutputContainer);
-                case 210:
+                case 212:
                     return elaborateArrowFunction(node, source, target, relation, containingMessageChain, errorOutputContainer);
             }
             return false;
@@ -49615,7 +50607,14 @@
                 if (!targetPropType || targetPropType.flags & 8388608)
                     continue;
                 var sourcePropType = getIndexedAccessTypeOrUndefined(source, nameType);
-                if (sourcePropType && !checkTypeRelatedTo(sourcePropType, targetPropType, relation, undefined)) {
+                if (!sourcePropType)
+                    continue;
+                var propName = getPropertyNameFromIndex(nameType, undefined);
+                var targetIsOptional = !!(propName && (getPropertyOfType(target, propName) || unknownSymbol).flags & 16777216);
+                var sourceIsOptional = !!(propName && (getPropertyOfType(source, propName) || unknownSymbol).flags & 16777216);
+                targetPropType = removeMissingType(targetPropType, targetIsOptional);
+                sourcePropType = removeMissingType(sourcePropType, targetIsOptional && sourceIsOptional);
+                if (!checkTypeRelatedTo(sourcePropType, targetPropType, relation, undefined)) {
                     var elaborated = next && elaborateError(next, sourcePropType, targetPropType, relation, undefined, containingMessageChain, errorOutputContainer);
                     if (elaborated) {
                         reportedError = true;
@@ -49633,9 +50632,7 @@
                             var targetProp = propertyName !== undefined ? getPropertyOfType(target, propertyName) : undefined;
                             var issuedElaboration = false;
                             if (!targetProp) {
-                                var indexInfo = isTypeAssignableToKind(nameType, 296) && getIndexInfoOfType(target, 1) ||
-                                    getIndexInfoOfType(target, 0) ||
-                                    undefined;
+                                var indexInfo = getApplicableIndexInfo(target, nameType);
                                 if (indexInfo && indexInfo.declaration && !ts.getSourceFileOfNode(indexInfo.declaration).hasNoDefaultLib) {
                                     issuedElaboration = true;
                                     ts.addRelatedInfo(reportedDiag, ts.createDiagnosticForNode(indexInfo.declaration, ts.Diagnostics.The_expected_type_comes_from_this_index_signature));
@@ -49666,9 +50663,9 @@
                     case 1:
                         if (!(_i < _a.length)) return [3, 4];
                         prop = _a[_i];
-                        if (ts.isJsxSpreadAttribute(prop))
+                        if (ts.isJsxSpreadAttribute(prop) || isHyphenatedJsxName(ts.idText(prop.name)))
                             return [3, 3];
-                        return [4, { errorNode: prop.name, innerExpression: prop.initializer, nameType: getLiteralType(ts.idText(prop.name)) }];
+                        return [4, { errorNode: prop.name, innerExpression: prop.initializer, nameType: getStringLiteralType(ts.idText(prop.name)) }];
                     case 2:
                         _b.sent();
                         _b.label = 3;
@@ -49692,7 +50689,7 @@
                     case 1:
                         if (!(i < node.children.length)) return [3, 5];
                         child = node.children[i];
-                        nameType = getLiteralType(i - memberOffset);
+                        nameType = getNumberLiteralType(i - memberOffset);
                         elem = getElaborationElementForJsxChild(child, nameType, getInvalidTextDiagnostic);
                         if (!elem) return [3, 3];
                         return [4, elem];
@@ -49711,16 +50708,16 @@
         }
         function getElaborationElementForJsxChild(child, nameType, getInvalidTextDiagnostic) {
             switch (child.kind) {
-                case 284:
+                case 286:
                     return { errorNode: child, innerExpression: child.expression, nameType: nameType };
                 case 11:
                     if (child.containsOnlyTriviaWhiteSpaces) {
                         break;
                     }
                     return { errorNode: child, innerExpression: undefined, nameType: nameType, errorMessage: getInvalidTextDiagnostic() };
-                case 274:
-                case 275:
-                case 278:
+                case 276:
+                case 277:
+                case 280:
                     return { errorNode: child, innerExpression: child, nameType: nameType };
                 default:
                     return ts.Debug.assertNever(child, "Found invalid jsx child");
@@ -49733,7 +50730,7 @@
                 var containingElement = node.parent.parent;
                 var childPropName = getJsxElementChildrenPropertyName(getJsxNamespaceAt(node));
                 var childrenPropName = childPropName === undefined ? "children" : ts.unescapeLeadingUnderscores(childPropName);
-                var childrenNameType = getLiteralType(childrenPropName);
+                var childrenNameType = getStringLiteralType(childrenPropName);
                 var childrenTargetType = getIndexedAccessType(target, childrenNameType);
                 var validChildren = ts.getSemanticJsxChildren(containingElement.children);
                 if (!ts.length(validChildren)) {
@@ -49786,7 +50783,7 @@
                     var tagNameText = ts.getTextOfNode(node.parent.tagName);
                     var childPropName = getJsxElementChildrenPropertyName(getJsxNamespaceAt(node));
                     var childrenPropName = childPropName === undefined ? "children" : ts.unescapeLeadingUnderscores(childPropName);
-                    var childrenTargetType = getIndexedAccessType(target, getLiteralType(childrenPropName));
+                    var childrenTargetType = getIndexedAccessType(target, getStringLiteralType(childrenPropName));
                     var diagnostic = ts.Diagnostics._0_components_don_t_accept_text_as_child_elements_Text_in_JSX_has_the_type_string_but_the_expected_type_of_1_is_2;
                     invalidTextDiagnostic = __assign(__assign({}, diagnostic), { key: "!!ALREADY FORMATTED!!", message: ts.formatMessage(undefined, diagnostic, tagNameText, childrenPropName, typeToString(childrenTargetType)) });
                 }
@@ -49810,7 +50807,7 @@
                         elem = node.elements[i];
                         if (ts.isOmittedExpression(elem))
                             return [3, 3];
-                        nameType = getLiteralType(i);
+                        nameType = getNumberLiteralType(i);
                         return [4, { errorNode: elem, innerExpression: elem, nameType: nameType }];
                     case 2:
                         _a.sent();
@@ -49862,11 +50859,11 @@
                         }
                         _b = prop.kind;
                         switch (_b) {
-                            case 169: return [3, 2];
-                            case 168: return [3, 2];
-                            case 166: return [3, 2];
-                            case 290: return [3, 2];
-                            case 289: return [3, 4];
+                            case 171: return [3, 2];
+                            case 170: return [3, 2];
+                            case 167: return [3, 2];
+                            case 292: return [3, 2];
+                            case 291: return [3, 4];
                         }
                         return [3, 6];
                     case 2: return [4, { errorNode: prop.name, innerExpression: undefined, nameType: type }];
@@ -49930,8 +50927,8 @@
                 return 0;
             }
             var kind = target.declaration ? target.declaration.kind : 0;
-            var strictVariance = !(checkMode & 3) && strictFunctionTypes && kind !== 166 &&
-                kind !== 165 && kind !== 167;
+            var strictVariance = !(checkMode & 3) && strictFunctionTypes && kind !== 167 &&
+                kind !== 166 && kind !== 169;
             var result = -1;
             var sourceThisType = getThisTypeOfSignature(source);
             if (sourceThisType && sourceThisType !== voidType) {
@@ -50048,8 +51045,7 @@
                 t.properties.length === 0 &&
                 t.callSignatures.length === 0 &&
                 t.constructSignatures.length === 0 &&
-                !t.stringIndexInfo &&
-                !t.numberIndexInfo;
+                t.indexInfos.length === 0;
         }
         function isEmptyObjectType(type) {
             return type.flags & 524288 ? !isGenericMappedType(type) && isEmptyResolvedType(resolveStructuredTypeMembers(type)) :
@@ -50063,7 +51059,7 @@
                 type.symbol && type.symbol.flags & 2048 && getMembersOfSymbol(type.symbol).size === 0));
         }
         function isStringIndexSignatureOnlyType(type) {
-            return type.flags & 524288 && !isGenericMappedType(type) && getPropertiesOfType(type).length === 0 && getIndexInfoOfType(type, 0) && !getIndexInfoOfType(type, 1) ||
+            return type.flags & 524288 && !isGenericMappedType(type) && getPropertiesOfType(type).length === 0 && getIndexInfosOfType(type).length === 1 && !!getIndexInfoOfType(type, stringType) ||
                 type.flags & 3145728 && ts.every(type.types, isStringIndexSignatureOnlyType) ||
                 false;
         }
@@ -50165,9 +51161,10 @@
                 }
             }
             else {
-                if (!(source.flags & 3145728) && !(target.flags & 3145728) &&
-                    source.flags !== target.flags && !(source.flags & 469237760))
+                if (source.flags !== target.flags)
                     return false;
+                if (source.flags & 67358815)
+                    return true;
             }
             if (source.flags & 524288 && target.flags & 524288) {
                 var related = relation.get(getRelationKey(source, target, 0, relation));
@@ -50181,7 +51178,7 @@
             return false;
         }
         function isIgnoredJsxProperty(source, sourceProp) {
-            return ts.getObjectFlags(source) & 2048 && !isUnhyphenatedJsxName(sourceProp.escapedName);
+            return ts.getObjectFlags(source) & 2048 && isHyphenatedJsxName(sourceProp.escapedName);
         }
         function getNormalizedType(type, writing) {
             while (true) {
@@ -50245,7 +51242,7 @@
                 }
                 var diag = ts.createDiagnosticForNodeFromMessageChain(errorNode, errorInfo, relatedInformation);
                 if (relatedInfo) {
-                    ts.addRelatedInfo.apply(void 0, __spreadArray([diag], relatedInfo));
+                    ts.addRelatedInfo.apply(void 0, __spreadArray([diag], relatedInfo, false));
                 }
                 if (errorOutputContainer) {
                     (errorOutputContainer.errors || (errorOutputContainer.errors = [])).push(diag);
@@ -50287,7 +51284,7 @@
                 if (stack.length === 1) {
                     reportError.apply(void 0, stack[0]);
                     if (info) {
-                        reportRelationError.apply(void 0, __spreadArray([undefined], info));
+                        reportRelationError.apply(void 0, __spreadArray([undefined], info, false));
                     }
                     return;
                 }
@@ -50366,11 +51363,11 @@
                     var _b = secondaryRootErrors_1[_i], msg = _b[0], args = _b.slice(1);
                     var originalValue = msg.elidedInCompatabilityPyramid;
                     msg.elidedInCompatabilityPyramid = false;
-                    reportError.apply(void 0, __spreadArray([msg], args));
+                    reportError.apply(void 0, __spreadArray([msg], args, false));
                     msg.elidedInCompatabilityPyramid = originalValue;
                 }
                 if (info) {
-                    reportRelationError.apply(void 0, __spreadArray([undefined], info));
+                    reportRelationError.apply(void 0, __spreadArray([undefined], info, false));
                 }
             }
             function reportError(message, arg0, arg1, arg2, arg3) {
@@ -50617,12 +51614,12 @@
                 }
             }
             function isIdenticalTo(source, target) {
-                var flags = source.flags & target.flags;
-                if (!(flags & 469237760)) {
+                if (source.flags !== target.flags)
                     return 0;
-                }
+                if (source.flags & 67358815)
+                    return -1;
                 traceUnionsOrIntersectionsTooLarge(source, target);
-                if (flags & 3145728) {
+                if (source.flags & 3145728) {
                     var result_7 = eachTypeRelatedToSomeType(source, target);
                     if (result_7) {
                         result_7 &= eachTypeRelatedToSomeType(target, source);
@@ -50633,9 +51630,10 @@
             }
             function getTypeOfPropertyInTypes(types, name) {
                 var appendPropType = function (propTypes, type) {
+                    var _a;
                     type = getApparentType(type);
                     var prop = type.flags & 3145728 ? getPropertyOfUnionOrIntersectionType(type, name) : getPropertyOfObjectType(type, name);
-                    var propType = prop && getTypeOfSymbol(prop) || isNumericLiteralName(name) && getIndexTypeOfType(type, 1) || getIndexTypeOfType(type, 0) || undefinedType;
+                    var propType = prop && getTypeOfSymbol(prop) || ((_a = getApplicableIndexInfoForName(type, name)) === null || _a === void 0 ? void 0 : _a.type) || undefinedType;
                     return ts.append(propTypes, propType);
                 };
                 return getUnionType(ts.reduceLeft(types, appendPropType, undefined) || ts.emptyArray);
@@ -50656,7 +51654,7 @@
                     reducedTarget = findMatchingDiscriminantType(source, target, isRelatedTo) || filterPrimitivesIfContainsNonPrimitive(target);
                     checkTypes = reducedTarget.flags & 1048576 ? reducedTarget.types : [reducedTarget];
                 }
-                var _loop_16 = function (prop) {
+                var _loop_18 = function (prop) {
                     if (shouldCheckAsExcessProperty(prop, source.symbol) && !isIgnoredJsxProperty(source, prop)) {
                         if (!isKnownProperty(reducedTarget, prop.escapedName, isComparingJsxAttributes)) {
                             if (reportErrors) {
@@ -50709,7 +51707,7 @@
                 };
                 for (var _i = 0, _b = getPropertiesOfType(source); _i < _b.length; _i++) {
                     var prop = _b[_i];
-                    var state_5 = _loop_16(prop);
+                    var state_5 = _loop_18(prop);
                     if (typeof state_5 === "object")
                         return state_5.value;
                 }
@@ -50974,7 +51972,7 @@
                         return typeRelatedToEachType(getRegularTypeOfObjectLiteral(source), target, reportErrors, 2);
                     }
                     if (relation === comparableRelation && target.flags & 131068) {
-                        var constraints = ts.sameMap(source.types, function (t) { return t.flags & 131068 ? t : getBaseConstraintOfType(t) || unknownType; });
+                        var constraints = ts.sameMap(source.types, getBaseConstraintOrType);
                         if (constraints !== source.types) {
                             source = getIntersectionType(constraints);
                             if (!(source.flags & 2097152)) {
@@ -51086,8 +52084,8 @@
                         var baseObjectType = getBaseConstraintOfType(objectType) || objectType;
                         var baseIndexType = getBaseConstraintOfType(indexType) || indexType;
                         if (!isGenericObjectType(baseObjectType) && !isGenericIndexType(baseIndexType)) {
-                            var accessFlags = 2 | (baseObjectType !== objectType ? 1 : 0);
-                            var constraint = getIndexedAccessTypeOrUndefined(baseObjectType, baseIndexType, target.noUncheckedIndexedAccessCandidate, undefined, accessFlags);
+                            var accessFlags = 4 | (baseObjectType !== objectType ? 2 : 0);
+                            var constraint = getIndexedAccessTypeOrUndefined(baseObjectType, baseIndexType, accessFlags);
                             if (constraint) {
                                 if (reportErrors && originalErrorInfo) {
                                     resetErrorInfo(saveErrorInfo);
@@ -51283,7 +52281,7 @@
                         return 0;
                     }
                     if (ts.getObjectFlags(source) & 4 && ts.getObjectFlags(target) & 4 && source.target === target.target &&
-                        !(ts.getObjectFlags(source) & 4096 || ts.getObjectFlags(target) & 4096)) {
+                        !isTupleType(source) && !(ts.getObjectFlags(source) & 4096 || ts.getObjectFlags(target) & 4096)) {
                         var variances = getVariances(source.target);
                         if (variances === ts.emptyArray) {
                             return 1;
@@ -51295,7 +52293,7 @@
                     }
                     else if (isReadonlyArrayType(target) ? isArrayType(source) || isTupleType(source) : isArrayType(target) && isTupleType(source) && !source.target.readonly) {
                         if (relation !== identityRelation) {
-                            return isRelatedTo(getIndexTypeOfType(source, 1) || anyType, getIndexTypeOfType(target, 1) || anyType, reportErrors);
+                            return isRelatedTo(getIndexTypeOfType(source, numberType) || anyType, getIndexTypeOfType(target, numberType) || anyType, reportErrors);
                         }
                         else {
                             return 0;
@@ -51312,10 +52310,7 @@
                             if (result) {
                                 result &= signaturesRelatedTo(source, target, 1, reportStructuralErrors);
                                 if (result) {
-                                    result &= indexTypesRelatedTo(source, target, 0, sourceIsPrimitive, reportStructuralErrors, intersectionState);
-                                    if (result) {
-                                        result &= indexTypesRelatedTo(source, target, 1, sourceIsPrimitive, reportStructuralErrors, intersectionState);
-                                    }
+                                    result &= indexSignaturesRelatedTo(source, target, sourceIsPrimitive, reportStructuralErrors, intersectionState);
                                 }
                             }
                         }
@@ -51398,7 +52393,7 @@
                 var numCombinations = 1;
                 for (var _i = 0, sourcePropertiesFiltered_1 = sourcePropertiesFiltered; _i < sourcePropertiesFiltered_1.length; _i++) {
                     var sourceProperty = sourcePropertiesFiltered_1[_i];
-                    numCombinations *= countTypes(getTypeOfSymbol(sourceProperty));
+                    numCombinations *= countTypes(getNonMissingTypeOfSymbol(sourceProperty));
                     if (numCombinations > 25) {
                         ts.tracing === null || ts.tracing === void 0 ? void 0 : ts.tracing.instant("checkTypes", "typeRelatedToDiscriminatedType_DepthLimit", { sourceId: source.id, targetId: target.id, numCombinations: numCombinations });
                         return 0;
@@ -51408,7 +52403,7 @@
                 var excludedProperties = new ts.Set();
                 for (var i = 0; i < sourcePropertiesFiltered.length; i++) {
                     var sourceProperty = sourcePropertiesFiltered[i];
-                    var sourcePropertyType = getTypeOfSymbol(sourceProperty);
+                    var sourcePropertyType = getNonMissingTypeOfSymbol(sourceProperty);
                     sourceDiscriminantTypes[i] = sourcePropertyType.flags & 1048576
                         ? sourcePropertyType.types
                         : [sourcePropertyType];
@@ -51416,11 +52411,11 @@
                 }
                 var discriminantCombinations = ts.cartesianProduct(sourceDiscriminantTypes);
                 var matchingTypes = [];
-                var _loop_17 = function (combination) {
+                var _loop_19 = function (combination) {
                     var hasMatch = false;
                     outer: for (var _c = 0, _d = target.types; _c < _d.length; _c++) {
                         var type = _d[_c];
-                        var _loop_18 = function (i) {
+                        var _loop_20 = function (i) {
                             var sourceProperty = sourcePropertiesFiltered[i];
                             var targetProperty = getPropertyOfType(type, sourceProperty.escapedName);
                             if (!targetProperty)
@@ -51433,7 +52428,7 @@
                             }
                         };
                         for (var i = 0; i < sourcePropertiesFiltered.length; i++) {
-                            var state_7 = _loop_18(i);
+                            var state_7 = _loop_20(i);
                             switch (state_7) {
                                 case "continue-outer": continue outer;
                             }
@@ -51447,7 +52442,7 @@
                 };
                 for (var _a = 0, discriminantCombinations_1 = discriminantCombinations; _a < discriminantCombinations_1.length; _a++) {
                     var combination = discriminantCombinations_1[_a];
-                    var state_6 = _loop_17(combination);
+                    var state_6 = _loop_19(combination);
                     if (typeof state_6 === "object")
                         return state_6.value;
                 }
@@ -51459,11 +52454,8 @@
                         result &= signaturesRelatedTo(source, type, 0, false);
                         if (result) {
                             result &= signaturesRelatedTo(source, type, 1, false);
-                            if (result) {
-                                result &= indexTypesRelatedTo(source, type, 0, false, false, 0);
-                                if (result && !(isTupleType(source) && isTupleType(type))) {
-                                    result &= indexTypesRelatedTo(source, type, 1, false, false, 0);
-                                }
+                            if (result && !(isTupleType(source) && isTupleType(type))) {
+                                result &= indexSignaturesRelatedTo(source, type, false, false, 0);
                             }
                         }
                     }
@@ -51491,40 +52483,9 @@
             }
             function isPropertySymbolTypeRelated(sourceProp, targetProp, getTypeOfSourceProperty, reportErrors, intersectionState) {
                 var targetIsOptional = strictNullChecks && !!(ts.getCheckFlags(targetProp) & 48);
-                var source = getTypeOfSourceProperty(sourceProp);
-                if (ts.getCheckFlags(targetProp) & 65536 && !getSymbolLinks(targetProp).type) {
-                    var links = getSymbolLinks(targetProp);
-                    ts.Debug.assertIsDefined(links.deferralParent);
-                    ts.Debug.assertIsDefined(links.deferralConstituents);
-                    var unionParent = !!(links.deferralParent.flags & 1048576);
-                    var result_12 = unionParent ? 0 : -1;
-                    var targetTypes = links.deferralConstituents;
-                    for (var _i = 0, targetTypes_3 = targetTypes; _i < targetTypes_3.length; _i++) {
-                        var targetType = targetTypes_3[_i];
-                        var related = isRelatedTo(source, targetType, false, undefined, unionParent ? 0 : 2);
-                        if (!unionParent) {
-                            if (!related) {
-                                return isRelatedTo(source, addOptionality(getTypeOfSymbol(targetProp), targetIsOptional), reportErrors);
-                            }
-                            result_12 &= related;
-                        }
-                        else {
-                            if (related) {
-                                return related;
-                            }
-                        }
-                    }
-                    if (unionParent && !result_12 && targetIsOptional) {
-                        result_12 = isRelatedTo(source, undefinedType);
-                    }
-                    if (unionParent && !result_12 && reportErrors) {
-                        return isRelatedTo(source, addOptionality(getTypeOfSymbol(targetProp), targetIsOptional), reportErrors);
-                    }
-                    return result_12;
-                }
-                else {
-                    return isRelatedTo(source, addOptionality(getTypeOfSymbol(targetProp), targetIsOptional), reportErrors, undefined, intersectionState);
-                }
+                var effectiveTarget = addOptionality(getNonMissingTypeOfSymbol(targetProp), false, targetIsOptional);
+                var effectiveSource = getTypeOfSourceProperty(sourceProp);
+                return isRelatedTo(effectiveSource, effectiveTarget, reportErrors, undefined, intersectionState);
             }
             function propertyRelatedTo(source, target, sourceProp, targetProp, getTypeOfSourceProperty, reportErrors, intersectionState, skipOptional) {
                 var sourcePropFlags = ts.getDeclarationModifierFlagsFromSymbol(sourceProp);
@@ -51594,7 +52555,7 @@
                 }
                 if (props.length === 1) {
                     var propName = symbolToString(unmatchedProperty);
-                    reportError.apply(void 0, __spreadArray([ts.Diagnostics.Property_0_is_missing_in_type_1_but_required_in_type_2, propName], getTypeNamesForErrorDisplay(source, target)));
+                    reportError.apply(void 0, __spreadArray([ts.Diagnostics.Property_0_is_missing_in_type_1_but_required_in_type_2, propName], getTypeNamesForErrorDisplay(source, target), false));
                     if (ts.length(unmatchedProperty.declarations)) {
                         associateRelatedInfo(ts.createDiagnosticForNode(unmatchedProperty.declarations[0], ts.Diagnostics._0_is_declared_here, propName));
                     }
@@ -51642,7 +52603,7 @@
                             }
                             return 0;
                         }
-                        if (!targetRestFlag && sourceRestFlag) {
+                        if (!targetRestFlag && (sourceRestFlag || targetArity < sourceArity)) {
                             if (reportErrors) {
                                 if (sourceMinLength < targetMinLength) {
                                     reportError(ts.Diagnostics.Target_requires_0_element_s_but_source_may_have_fewer, targetMinLength);
@@ -51689,13 +52650,14 @@
                                 }
                             }
                             var sourceType = !isTupleType(source) ? sourceTypeArguments[0] :
-                                i < startCount || i >= targetArity - endCount ? sourceTypeArguments[sourceIndex] :
+                                i < startCount || i >= targetArity - endCount ? removeMissingType(sourceTypeArguments[sourceIndex], !!(sourceFlags & targetFlags & 2)) :
                                     getElementTypeOfSliceOfTupleType(source, startCount, endCount) || neverType;
                             var targetType = targetTypeArguments[i];
-                            var targetCheckType = sourceFlags & 8 && targetFlags & 4 ? createArrayType(targetType) : targetType;
+                            var targetCheckType = sourceFlags & 8 && targetFlags & 4 ? createArrayType(targetType) :
+                                removeMissingType(targetType, !!(targetFlags & 2));
                             var related = isRelatedTo(sourceType, targetCheckType, reportErrors, undefined, intersectionState);
                             if (!related) {
-                                if (reportErrors) {
+                                if (reportErrors && (targetArity > 1 || sourceArity > 1)) {
                                     if (i < startCount || i >= targetArity - endCount || sourceArity - startCount - endCount === 1) {
                                         reportIncompatibleError(ts.Diagnostics.Type_at_position_0_in_source_is_not_compatible_with_type_at_position_1_in_target, sourceIndex, i);
                                     }
@@ -51726,7 +52688,7 @@
                         var sourceProp = _a[_i];
                         if (!getPropertyOfObjectType(target, sourceProp.escapedName)) {
                             var sourceType = getTypeOfSymbol(sourceProp);
-                            if (!(sourceType === undefinedType || sourceType === undefinedWideningType || sourceType === optionalType)) {
+                            if (!(sourceType.flags & 32768)) {
                                 if (reportErrors) {
                                     reportError(ts.Diagnostics.Property_0_does_not_exist_on_type_1, symbolToString(sourceProp), typeToString(target));
                                 }
@@ -51743,7 +52705,7 @@
                     if (!(targetProp.flags & 4194304) && (!numericNamesOnly || isNumericLiteralName(name) || name === "length")) {
                         var sourceProp = getPropertyOfType(source, name);
                         if (sourceProp && sourceProp !== targetProp) {
-                            var related = propertyRelatedTo(source, target, sourceProp, targetProp, getTypeOfSymbol, reportErrors, intersectionState, relation === comparableRelation);
+                            var related = propertyRelatedTo(source, target, sourceProp, targetProp, getNonMissingTypeOfSymbol, reportErrors, intersectionState, relation === comparableRelation);
                             if (!related) {
                                 return 0;
                             }
@@ -51824,7 +52786,7 @@
                     var targetSignature = ts.first(targetSignatures);
                     result = signatureRelatedTo(sourceSignature, targetSignature, eraseGenerics, reportErrors, incompatibleReporter(sourceSignature, targetSignature));
                     if (!result && reportErrors && kind === 1 && (sourceObjectFlags & targetObjectFlags) &&
-                        (((_a = targetSignature.declaration) === null || _a === void 0 ? void 0 : _a.kind) === 167 || ((_b = sourceSignature.declaration) === null || _b === void 0 ? void 0 : _b.kind) === 167)) {
+                        (((_a = targetSignature.declaration) === null || _a === void 0 ? void 0 : _a.kind) === 169 || ((_b = sourceSignature.declaration) === null || _b === void 0 ? void 0 : _b.kind) === 169)) {
                         var constructSignatureToString = function (signature) {
                             return signatureToString(signature, undefined, 262144, kind);
                         };
@@ -51886,24 +52848,21 @@
                 }
                 return result;
             }
-            function eachPropertyRelatedTo(source, target, kind, reportErrors) {
+            function membersRelatedToIndexInfo(source, targetInfo, reportErrors) {
                 var result = -1;
+                var keyType = targetInfo.keyType;
                 var props = source.flags & 2097152 ? getPropertiesOfUnionOrIntersectionType(source) : getPropertiesOfObjectType(source);
                 for (var _i = 0, props_2 = props; _i < props_2.length; _i++) {
                     var prop = props_2[_i];
                     if (isIgnoredJsxProperty(source, prop)) {
                         continue;
                     }
-                    var nameType = getSymbolLinks(prop).nameType;
-                    if (nameType && nameType.flags & 8192) {
-                        continue;
-                    }
-                    if (kind === 0 || isNumericLiteralName(prop.escapedName)) {
-                        var propType = getTypeOfSymbol(prop);
-                        var type = propType.flags & 32768 || !(kind === 0 && prop.flags & 16777216)
+                    if (isApplicableIndexType(getLiteralTypeFromProperty(prop, 8576), keyType)) {
+                        var propType = getNonMissingTypeOfSymbol(prop);
+                        var type = exactOptionalPropertyTypes || propType.flags & 32768 || keyType === numberType || !(prop.flags & 16777216)
                             ? propType
                             : getTypeWithFacts(propType, 524288);
-                        var related = isRelatedTo(type, target, reportErrors);
+                        var related = isRelatedTo(type, targetInfo.type, reportErrors);
                         if (!related) {
                             if (reportErrors) {
                                 reportError(ts.Diagnostics.Property_0_is_incompatible_with_index_signature, symbolToString(prop));
@@ -51913,61 +52872,76 @@
                         result &= related;
                     }
                 }
+                for (var _a = 0, _b = getIndexInfosOfType(source); _a < _b.length; _a++) {
+                    var info = _b[_a];
+                    if (isApplicableIndexType(info.keyType, keyType)) {
+                        var related = indexInfoRelatedTo(info, targetInfo, reportErrors);
+                        if (!related) {
+                            return 0;
+                        }
+                        result &= related;
+                    }
+                }
                 return result;
             }
-            function indexTypeRelatedTo(sourceType, targetType, reportErrors) {
-                var related = isRelatedTo(sourceType, targetType, reportErrors);
+            function indexInfoRelatedTo(sourceInfo, targetInfo, reportErrors) {
+                var related = isRelatedTo(sourceInfo.type, targetInfo.type, reportErrors);
                 if (!related && reportErrors) {
-                    reportError(ts.Diagnostics.Index_signatures_are_incompatible);
+                    if (sourceInfo.keyType === targetInfo.keyType) {
+                        reportError(ts.Diagnostics._0_index_signatures_are_incompatible, typeToString(sourceInfo.keyType));
+                    }
+                    else {
+                        reportError(ts.Diagnostics._0_and_1_index_signatures_are_incompatible, typeToString(sourceInfo.keyType), typeToString(targetInfo.keyType));
+                    }
                 }
                 return related;
             }
-            function indexTypesRelatedTo(source, target, kind, sourceIsPrimitive, reportErrors, intersectionState) {
+            function indexSignaturesRelatedTo(source, target, sourceIsPrimitive, reportErrors, intersectionState) {
                 if (relation === identityRelation) {
-                    return indexTypesIdenticalTo(source, target, kind);
+                    return indexSignaturesIdenticalTo(source, target);
                 }
-                var targetType = getIndexTypeOfType(target, kind);
-                if (!targetType) {
-                    return -1;
-                }
-                if (targetType.flags & 1 && !sourceIsPrimitive) {
-                    var stringIndexType = kind === 0 ? targetType : getIndexTypeOfType(target, 0);
-                    if (stringIndexType && stringIndexType.flags & 1) {
-                        return -1;
+                var indexInfos = getIndexInfosOfType(target);
+                var targetHasStringIndex = ts.some(indexInfos, function (info) { return info.keyType === stringType; });
+                var result = -1;
+                for (var _i = 0, indexInfos_3 = indexInfos; _i < indexInfos_3.length; _i++) {
+                    var targetInfo = indexInfos_3[_i];
+                    var related = !sourceIsPrimitive && targetHasStringIndex && targetInfo.type.flags & 1 ? -1 :
+                        isGenericMappedType(source) && targetHasStringIndex ? isRelatedTo(getTemplateTypeFromMappedType(source), targetInfo.type, reportErrors) :
+                            typeRelatedToIndexInfo(source, targetInfo, reportErrors, intersectionState);
+                    if (!related) {
+                        return 0;
                     }
+                    result &= related;
                 }
-                if (isGenericMappedType(source)) {
-                    return getIndexTypeOfType(target, 0) ? isRelatedTo(getTemplateTypeFromMappedType(source), targetType, reportErrors) : 0;
-                }
-                var indexType = getIndexTypeOfType(source, kind) || kind === 1 && getIndexTypeOfType(source, 0);
-                if (indexType) {
-                    return indexTypeRelatedTo(indexType, targetType, reportErrors);
+                return result;
+            }
+            function typeRelatedToIndexInfo(source, targetInfo, reportErrors, intersectionState) {
+                var sourceInfo = getApplicableIndexInfo(source, targetInfo.keyType);
+                if (sourceInfo) {
+                    return indexInfoRelatedTo(sourceInfo, targetInfo, reportErrors);
                 }
                 if (!(intersectionState & 1) && isObjectTypeWithInferableIndex(source)) {
-                    var related = eachPropertyRelatedTo(source, targetType, kind, reportErrors);
-                    if (related && kind === 0) {
-                        var numberIndexType = getIndexTypeOfType(source, 1);
-                        if (numberIndexType) {
-                            related &= indexTypeRelatedTo(numberIndexType, targetType, reportErrors);
-                        }
-                    }
-                    return related;
+                    return membersRelatedToIndexInfo(source, targetInfo, reportErrors);
                 }
                 if (reportErrors) {
-                    reportError(ts.Diagnostics.Index_signature_is_missing_in_type_0, typeToString(source));
+                    reportError(ts.Diagnostics.Index_signature_for_type_0_is_missing_in_type_1, typeToString(targetInfo.keyType), typeToString(source));
                 }
                 return 0;
             }
-            function indexTypesIdenticalTo(source, target, indexKind) {
-                var targetInfo = getIndexInfoOfType(target, indexKind);
-                var sourceInfo = getIndexInfoOfType(source, indexKind);
-                if (!sourceInfo && !targetInfo) {
-                    return -1;
+            function indexSignaturesIdenticalTo(source, target) {
+                var sourceInfos = getIndexInfosOfType(source);
+                var targetInfos = getIndexInfosOfType(target);
+                if (sourceInfos.length !== targetInfos.length) {
+                    return 0;
                 }
-                if (sourceInfo && targetInfo && sourceInfo.isReadonly === targetInfo.isReadonly) {
-                    return isRelatedTo(sourceInfo.type, targetInfo.type);
+                for (var _i = 0, targetInfos_1 = targetInfos; _i < targetInfos_1.length; _i++) {
+                    var targetInfo = targetInfos_1[_i];
+                    var sourceInfo = getIndexInfoOfType(source, targetInfo.keyType);
+                    if (!(sourceInfo && isRelatedTo(sourceInfo.type, targetInfo.type) && sourceInfo.isReadonly === targetInfo.isReadonly)) {
+                        return 0;
+                    }
                 }
-                return 0;
+                return -1;
             }
             function constructorVisibilitiesAreCompatible(sourceSignature, targetSignature, reportErrors) {
                 if (!sourceSignature.declaration || !targetSignature.declaration) {
@@ -52050,10 +53024,8 @@
         function isWeakType(type) {
             if (type.flags & 524288) {
                 var resolved = resolveStructuredTypeMembers(type);
-                return resolved.callSignatures.length === 0 && resolved.constructSignatures.length === 0 &&
-                    !resolved.stringIndexInfo && !resolved.numberIndexInfo &&
-                    resolved.properties.length > 0 &&
-                    ts.every(resolved.properties, function (p) { return !!(p.flags & 16777216); });
+                return resolved.callSignatures.length === 0 && resolved.constructSignatures.length === 0 && resolved.indexInfos.length === 0 &&
+                    resolved.properties.length > 0 && ts.every(resolved.properties, function (p) { return !!(p.flags & 16777216); });
             }
             if (type.flags & 2097152) {
                 return ts.every(type.types, isWeakType);
@@ -52090,7 +53062,7 @@
                 ts.tracing === null || ts.tracing === void 0 ? void 0 : ts.tracing.push("checkTypes", "getVariancesWorker", { arity: typeParameters.length, id: (_c = (_a = cache.id) !== null && _a !== void 0 ? _a : (_b = cache.declaredType) === null || _b === void 0 ? void 0 : _b.id) !== null && _c !== void 0 ? _c : -1 });
                 cache.variances = ts.emptyArray;
                 variances = [];
-                var _loop_19 = function (tp) {
+                var _loop_21 = function (tp) {
                     var unmeasurable = false;
                     var unreliable = false;
                     var oldHandler = outofbandVarianceMarkerHandler;
@@ -52115,7 +53087,7 @@
                 };
                 for (var _i = 0, typeParameters_1 = typeParameters; _i < typeParameters_1.length; _i++) {
                     var tp = typeParameters_1[_i];
-                    _loop_19(tp);
+                    _loop_21(tp);
                 }
                 cache.variances = variances;
                 ts.tracing === null || ts.tracing === void 0 ? void 0 : ts.tracing.pop();
@@ -52364,8 +53336,8 @@
         }
         function literalTypesWithSameBaseType(types) {
             var commonBaseType;
-            for (var _i = 0, types_14 = types; _i < types_14.length; _i++) {
-                var t = types_14[_i];
+            for (var _i = 0, types_13 = types; _i < types_13.length; _i++) {
+                var t = types_13[_i];
                 var baseType = getBaseTypeOfLiteralType(t);
                 if (!commonBaseType) {
                     commonBaseType = baseType;
@@ -52420,6 +53392,12 @@
             }
             type.objectFlags |= 33554432;
             var target = type.target;
+            if (ts.getObjectFlags(target) & 1) {
+                var baseTypeNode = getBaseTypeNodeOfClass(target);
+                if (baseTypeNode && baseTypeNode.expression.kind !== 79 && baseTypeNode.expression.kind !== 204) {
+                    return undefined;
+                }
+            }
             var bases = getBaseTypes(target);
             if (bases.length !== 1) {
                 return undefined;
@@ -52434,9 +53412,12 @@
             type.objectFlags |= 67108864;
             return type.cachedEquivalentBaseType = instantiatedBase;
         }
+        function isEmptyLiteralType(type) {
+            return strictNullChecks ? type === implicitNeverType : type === undefinedWideningType;
+        }
         function isEmptyArrayLiteralType(type) {
             var elementType = getElementTypeOfArrayType(type);
-            return strictNullChecks ? elementType === implicitNeverType : elementType === undefinedWideningType;
+            return !!elementType && isEmptyLiteralType(elementType);
         }
         function isTupleLikeType(type) {
             return isTupleType(type) || !!getPropertyOfType(type, "0");
@@ -52559,8 +53540,8 @@
         }
         function getFalsyFlagsOfTypes(types) {
             var result = 0;
-            for (var _i = 0, types_15 = types; _i < types_15.length; _i++) {
-                var t = types_15[_i];
+            for (var _i = 0, types_14 = types; _i < types_14.length; _i++) {
+                var t = types_14[_i];
                 result |= getFalsyFlags(t);
             }
             return result;
@@ -52600,9 +53581,10 @@
                     missing === 65536 ? getUnionType([type, nullType]) :
                         getUnionType([type, undefinedType, nullType]);
         }
-        function getOptionalType(type) {
+        function getOptionalType(type, isProperty) {
+            if (isProperty === void 0) { isProperty = false; }
             ts.Debug.assert(strictNullChecks);
-            return type.flags & 32768 ? type : getUnionType([type, undefinedType]);
+            return type.flags & 32768 ? type : getUnionType([type, isProperty ? missingType : undefinedType]);
         }
         function getGlobalNonNullableTypeInstantiation(type) {
             var reducedType = getTypeWithFacts(type, 2097152);
@@ -52619,11 +53601,8 @@
         function addOptionalTypeMarker(type) {
             return strictNullChecks ? getUnionType([type, optionalType]) : type;
         }
-        function isNotOptionalTypeMarker(type) {
-            return type !== optionalType;
-        }
         function removeOptionalTypeMarker(type) {
-            return strictNullChecks ? filterType(type, isNotOptionalTypeMarker) : type;
+            return strictNullChecks ? removeType(type, optionalType) : type;
         }
         function propagateOptionalTypeMarker(type, node, wasOptional) {
             return wasOptional ? ts.isOutermostOptionalChain(node) ? getOptionalType(type) : addOptionalTypeMarker(type) : type;
@@ -52633,6 +53612,15 @@
                 ts.isOptionalChain(expression) ? removeOptionalTypeMarker(exprType) :
                     exprType;
         }
+        function removeMissingType(type, isOptional) {
+            return exactOptionalPropertyTypes && isOptional ? removeType(type, missingType) : type;
+        }
+        function containsMissingType(type) {
+            return exactOptionalPropertyTypes && (type === missingType || type.flags & 1048576 && containsType(type.types, missingType));
+        }
+        function removeMissingOrUndefinedType(type) {
+            return exactOptionalPropertyTypes ? removeType(type, missingType) : getTypeWithFacts(type, 524288);
+        }
         function isCoercibleUnderDoubleEquals(source, target) {
             return ((source.flags & (8 | 4 | 512)) !== 0)
                 && ((target.flags & (8 | 4 | 16)) !== 0);
@@ -52677,7 +53665,7 @@
             }
             var resolved = type;
             var members = transformTypeOfMembers(type, getRegularTypeOfObjectLiteral);
-            var regularNew = createAnonymousType(resolved.symbol, members, resolved.callSignatures, resolved.constructSignatures, resolved.stringIndexInfo, resolved.numberIndexInfo);
+            var regularNew = createAnonymousType(resolved.symbol, members, resolved.callSignatures, resolved.constructSignatures, resolved.indexInfos);
             regularNew.flags = resolved.flags;
             regularNew.objectFlags |= resolved.objectFlags & ~16384;
             type.regularType = regularNew;
@@ -52734,7 +53722,7 @@
             if (cached) {
                 return cached;
             }
-            var result = createSymbolWithType(prop, undefinedType);
+            var result = createSymbolWithType(prop, missingType);
             result.flags |= 16777216;
             undefinedProperties.set(prop.escapedName, result);
             return result;
@@ -52753,9 +53741,7 @@
                     }
                 }
             }
-            var stringIndexInfo = getIndexInfoOfType(type, 0);
-            var numberIndexInfo = getIndexInfoOfType(type, 1);
-            var result = createAnonymousType(type.symbol, members, ts.emptyArray, ts.emptyArray, stringIndexInfo && createIndexInfo(getWidenedType(stringIndexInfo.type), stringIndexInfo.isReadonly), numberIndexInfo && createIndexInfo(getWidenedType(numberIndexInfo.type), numberIndexInfo.isReadonly));
+            var result = createAnonymousType(type.symbol, members, ts.emptyArray, ts.emptyArray, ts.sameMap(getIndexInfosOfType(type), function (info) { return createIndexInfo(info.keyType, getWidenedType(info.type), info.isReadonly); }));
             result.objectFlags |= (ts.getObjectFlags(type) & (8192 | 524288));
             return result;
         }
@@ -52838,12 +53824,12 @@
             }
             var diagnostic;
             switch (declaration.kind) {
-                case 217:
+                case 219:
+                case 165:
                 case 164:
-                case 163:
                     diagnostic = noImplicitAny ? ts.Diagnostics.Member_0_implicitly_has_an_1_type : ts.Diagnostics.Member_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage;
                     break;
-                case 161:
+                case 162:
                     var param = declaration;
                     if (ts.isIdentifier(param.name) &&
                         (ts.isCallSignatureDeclaration(param.parent) || ts.isMethodSignature(param.parent) || ts.isFunctionTypeNode(param.parent)) &&
@@ -52858,22 +53844,22 @@
                         noImplicitAny ? ts.Diagnostics.Rest_parameter_0_implicitly_has_an_any_type : ts.Diagnostics.Rest_parameter_0_implicitly_has_an_any_type_but_a_better_type_may_be_inferred_from_usage :
                         noImplicitAny ? ts.Diagnostics.Parameter_0_implicitly_has_an_1_type : ts.Diagnostics.Parameter_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage;
                     break;
-                case 199:
+                case 201:
                     diagnostic = ts.Diagnostics.Binding_element_0_implicitly_has_an_1_type;
                     if (!noImplicitAny) {
                         return;
                     }
                     break;
-                case 309:
+                case 312:
                     error(declaration, ts.Diagnostics.Function_type_which_lacks_return_type_annotation_implicitly_has_an_0_return_type, typeAsString);
                     return;
-                case 252:
+                case 254:
+                case 167:
                 case 166:
-                case 165:
-                case 168:
-                case 169:
-                case 209:
-                case 210:
+                case 170:
+                case 171:
+                case 211:
+                case 212:
                     if (noImplicitAny && !declaration.name) {
                         if (wideningKind === 3) {
                             error(declaration, ts.Diagnostics.Generator_implicitly_has_yield_type_0_because_it_does_not_yield_any_values_Consider_supplying_a_return_type_annotation, typeAsString);
@@ -52887,7 +53873,7 @@
                         wideningKind === 3 ? ts.Diagnostics._0_which_lacks_return_type_annotation_implicitly_has_an_1_yield_type :
                             ts.Diagnostics._0_which_lacks_return_type_annotation_implicitly_has_an_1_return_type;
                     break;
-                case 191:
+                case 193:
                     if (noImplicitAny) {
                         error(declaration, ts.Diagnostics.Mapped_object_type_implicitly_has_an_any_template_type);
                     }
@@ -53025,8 +54011,8 @@
         }
         function isNonGenericTopLevelType(type) {
             if (type.aliasSymbol && !type.aliasTypeArguments) {
-                var declaration = ts.getDeclarationOfKind(type.aliasSymbol, 255);
-                return !!(declaration && ts.findAncestor(declaration.parent, function (n) { return n.kind === 298 ? true : n.kind === 257 ? false : "quit"; }));
+                var declaration = ts.getDeclarationOfKind(type.aliasSymbol, 257);
+                return !!(declaration && ts.findAncestor(declaration.parent, function (n) { return n.kind === 300 ? true : n.kind === 259 ? false : "quit"; }));
             }
             return false;
         }
@@ -53050,8 +54036,8 @@
                 }
                 members.set(name, literalProp);
             });
-            var indexInfo = type.flags & 4 ? createIndexInfo(emptyObjectType, false) : undefined;
-            return createAnonymousType(undefined, members, ts.emptyArray, ts.emptyArray, indexInfo, undefined);
+            var indexInfos = type.flags & 4 ? [createIndexInfo(stringType, emptyObjectType, false)] : ts.emptyArray;
+            return createAnonymousType(undefined, members, ts.emptyArray, ts.emptyArray, indexInfos);
         }
         function inferTypeForHomomorphicMappedType(source, target, constraint) {
             if (inInferTypeForHomomorphicMappedType) {
@@ -53073,7 +54059,7 @@
                 isTupleType(type) && ts.some(getTypeArguments(type), isPartiallyInferableType);
         }
         function createReverseMappedType(source, target, constraint) {
-            if (!(getIndexInfoOfType(source, 0) || getPropertiesOfType(source).length !== 0 && isPartiallyInferableType(source))) {
+            if (!(getIndexInfoOfType(source, stringType) || getPropertiesOfType(source).length !== 0 && isPartiallyInferableType(source))) {
                 return undefined;
             }
             if (isArrayType(source)) {
@@ -53256,8 +54242,8 @@
             }
             function addMatch(s, p) {
                 var matchType = s === seg ?
-                    getLiteralType(getSourceText(s).slice(pos, p)) :
-                    getTemplateLiteralType(__spreadArray(__spreadArray([sourceTexts[seg].slice(pos)], sourceTexts.slice(seg + 1, s)), [getSourceText(s).slice(0, p)]), sourceTypes.slice(seg, s));
+                    getStringLiteralType(getSourceText(s).slice(pos, p)) :
+                    getTemplateLiteralType(__spreadArray(__spreadArray([sourceTexts[seg].slice(pos)], sourceTexts.slice(seg + 1, s), true), [getSourceText(s).slice(0, p)], false), sourceTypes.slice(seg, s));
                 matches.push(matchType);
                 seg = s;
                 pos = p;
@@ -53526,8 +54512,8 @@
             }
             function getSingleTypeVariableFromIntersectionTypes(types) {
                 var typeVariable;
-                for (var _i = 0, types_16 = types; _i < types_16.length; _i++) {
-                    var type = types_16[_i];
+                for (var _i = 0, types_15 = types; _i < types_15.length; _i++) {
+                    var type = types_15[_i];
                     var t = type.flags & 2097152 && ts.find(type.types, function (t) { return !!getInferenceInfoForType(t); });
                     if (!t || typeVariable && t !== typeVariable) {
                         return undefined;
@@ -53624,10 +54610,8 @@
                         return true;
                     }
                     var propTypes = ts.map(getPropertiesOfType(source), getTypeOfSymbol);
-                    var stringIndexType = getIndexTypeOfType(source, 0);
-                    var numberIndexInfo = getNonEnumNumberIndexInfo(source);
-                    var numberIndexType = numberIndexInfo && numberIndexInfo.type;
-                    inferFromTypes(getUnionType(ts.append(ts.append(propTypes, stringIndexType), numberIndexType)), getTemplateTypeFromMappedType(target));
+                    var indexTypes = ts.map(getIndexInfosOfType(source), function (info) { return info !== enumNumberIndexInfo ? info.type : neverType; });
+                    inferFromTypes(getUnionType(ts.concatenate(propTypes, indexTypes)), getTemplateTypeFromMappedType(target));
                     return true;
                 }
                 return false;
@@ -53759,7 +54743,7 @@
                 if (!skipParameters) {
                     var saveBivariant = bivariant;
                     var kind = target.declaration ? target.declaration.kind : 0;
-                    bivariant = bivariant || kind === 166 || kind === 165 || kind === 167;
+                    bivariant = bivariant || kind === 167 || kind === 166 || kind === 169;
                     applyToParameterTypes(source, target, inferFromContravariantTypes);
                     bivariant = saveBivariant;
                 }
@@ -53767,27 +54751,41 @@
             }
             function inferFromIndexTypes(source, target) {
                 var priority = (ts.getObjectFlags(source) & ts.getObjectFlags(target) & 32) ? 8 : 0;
-                var targetStringIndexType = getIndexTypeOfType(target, 0);
-                if (targetStringIndexType) {
-                    var sourceIndexType = getIndexTypeOfType(source, 0) ||
-                        getImplicitIndexTypeOfType(source, 0);
-                    if (sourceIndexType) {
-                        inferWithPriority(sourceIndexType, targetStringIndexType, priority);
+                var indexInfos = getIndexInfosOfType(target);
+                if (isObjectTypeWithInferableIndex(source)) {
+                    for (var _i = 0, indexInfos_4 = indexInfos; _i < indexInfos_4.length; _i++) {
+                        var targetInfo = indexInfos_4[_i];
+                        var propTypes = [];
+                        for (var _a = 0, _b = getPropertiesOfType(source); _a < _b.length; _a++) {
+                            var prop = _b[_a];
+                            if (isApplicableIndexType(getLiteralTypeFromProperty(prop, 8576), targetInfo.keyType)) {
+                                var propType = getTypeOfSymbol(prop);
+                                propTypes.push(prop.flags & 16777216 ? removeMissingOrUndefinedType(propType) : propType);
+                            }
+                        }
+                        for (var _c = 0, _d = getIndexInfosOfType(source); _c < _d.length; _c++) {
+                            var info = _d[_c];
+                            if (isApplicableIndexType(info.keyType, targetInfo.keyType)) {
+                                propTypes.push(info.type);
+                            }
+                        }
+                        if (propTypes.length) {
+                            inferWithPriority(getUnionType(propTypes), targetInfo.type, priority);
+                        }
                     }
                 }
-                var targetNumberIndexType = getIndexTypeOfType(target, 1);
-                if (targetNumberIndexType) {
-                    var sourceIndexType = getIndexTypeOfType(source, 1) ||
-                        getIndexTypeOfType(source, 0) ||
-                        getImplicitIndexTypeOfType(source, 1);
-                    if (sourceIndexType) {
-                        inferWithPriority(sourceIndexType, targetNumberIndexType, priority);
+                for (var _e = 0, indexInfos_5 = indexInfos; _e < indexInfos_5.length; _e++) {
+                    var targetInfo = indexInfos_5[_e];
+                    var sourceInfo = getApplicableIndexInfo(source, targetInfo.keyType);
+                    if (sourceInfo) {
+                        inferWithPriority(sourceInfo.type, targetInfo.type, priority);
                     }
                 }
             }
         }
         function isTypeOrBaseIdenticalTo(s, t) {
-            return isTypeIdenticalTo(s, t) || !!(t.flags & 4 && s.flags & 128 || t.flags & 8 && s.flags & 256);
+            return exactOptionalPropertyTypes && t === missingType ? s === t :
+                (isTypeIdenticalTo(s, t) || !!(t.flags & 4 && s.flags & 128 || t.flags & 8 && s.flags & 256));
         }
         function isTypeCloselyMatchedBy(s, t) {
             return !!(s.flags & 524288 && t.flags & 524288 && s.symbol && s.symbol === t.symbol ||
@@ -53922,7 +54920,7 @@
                 case "BigUint64Array":
                     return ts.Diagnostics.Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_1_or_later;
                 default:
-                    if (node.parent.kind === 290) {
+                    if (node.parent.kind === 292) {
                         return ts.Diagnostics.No_value_exists_in_scope_for_the_shorthand_property_0_Either_declare_one_or_provide_an_initializer;
                     }
                     else {
@@ -53934,25 +54932,28 @@
             var links = getNodeLinks(node);
             if (!links.resolvedSymbol) {
                 links.resolvedSymbol = !ts.nodeIsMissing(node) &&
-                    resolveName(node, node.escapedText, 111551 | 1048576, getCannotFindNameDiagnosticForName(node), node, !ts.isWriteOnlyAccess(node), false, ts.Diagnostics.Cannot_find_name_0_Did_you_mean_1) || unknownSymbol;
+                    resolveName(node, node.escapedText, 111551 | 1048576, getCannotFindNameDiagnosticForName(node), node, !ts.isWriteOnlyAccess(node), false, true) || unknownSymbol;
             }
             return links.resolvedSymbol;
         }
         function isInTypeQuery(node) {
-            return !!ts.findAncestor(node, function (n) { return n.kind === 177 ? true : n.kind === 78 || n.kind === 158 ? false : "quit"; });
+            return !!ts.findAncestor(node, function (n) { return n.kind === 179 ? true : n.kind === 79 || n.kind === 159 ? false : "quit"; });
         }
         function getFlowCacheKey(node, declaredType, initialType, flowContainer) {
             switch (node.kind) {
-                case 78:
+                case 79:
                     var symbol = getResolvedSymbol(node);
                     return symbol !== unknownSymbol ? (flowContainer ? getNodeId(flowContainer) : "-1") + "|" + getTypeId(declaredType) + "|" + getTypeId(initialType) + "|" + getSymbolId(symbol) : undefined;
-                case 107:
+                case 108:
                     return "0|" + (flowContainer ? getNodeId(flowContainer) : "-1") + "|" + getTypeId(declaredType) + "|" + getTypeId(initialType);
-                case 226:
-                case 208:
+                case 228:
+                case 210:
                     return getFlowCacheKey(node.expression, declaredType, initialType, flowContainer);
-                case 202:
-                case 203:
+                case 159:
+                    var left = getFlowCacheKey(node.left, declaredType, initialType, flowContainer);
+                    return left && left + "." + node.right.escapedText;
+                case 204:
+                case 205:
                     var propName = getAccessedPropertyName(node);
                     if (propName !== undefined) {
                         var key = getFlowCacheKey(node.expression, declaredType, initialType, flowContainer);
@@ -53963,53 +54964,78 @@
         }
         function isMatchingReference(source, target) {
             switch (target.kind) {
-                case 208:
-                case 226:
+                case 210:
+                case 228:
                     return isMatchingReference(source, target.expression);
-                case 217:
+                case 219:
                     return (ts.isAssignmentExpression(target) && isMatchingReference(source, target.left)) ||
                         (ts.isBinaryExpression(target) && target.operatorToken.kind === 27 && isMatchingReference(source, target.right));
             }
             switch (source.kind) {
-                case 227:
-                    return target.kind === 227
+                case 229:
+                    return target.kind === 229
                         && source.keywordToken === target.keywordToken
                         && source.name.escapedText === target.name.escapedText;
-                case 78:
                 case 79:
-                    return target.kind === 78 && getResolvedSymbol(source) === getResolvedSymbol(target) ||
-                        (target.kind === 250 || target.kind === 199) &&
-                            getExportSymbolOfValueSymbolIfExported(getResolvedSymbol(source)) === getSymbolOfNode(target);
-                case 107:
-                    return target.kind === 107;
-                case 105:
-                    return target.kind === 105;
-                case 226:
-                case 208:
+                case 80:
+                    return ts.isThisInTypeQuery(source) ?
+                        target.kind === 108 :
+                        target.kind === 79 && getResolvedSymbol(source) === getResolvedSymbol(target) ||
+                            (target.kind === 252 || target.kind === 201) &&
+                                getExportSymbolOfValueSymbolIfExported(getResolvedSymbol(source)) === getSymbolOfNode(target);
+                case 108:
+                    return target.kind === 108;
+                case 106:
+                    return target.kind === 106;
+                case 228:
+                case 210:
                     return isMatchingReference(source.expression, target);
-                case 202:
-                case 203:
+                case 204:
+                case 205:
                     return ts.isAccessExpression(target) &&
                         getAccessedPropertyName(source) === getAccessedPropertyName(target) &&
                         isMatchingReference(source.expression, target.expression);
-                case 158:
+                case 159:
                     return ts.isAccessExpression(target) &&
                         source.right.escapedText === getAccessedPropertyName(target) &&
                         isMatchingReference(source.left, target.expression);
-                case 217:
+                case 219:
                     return (ts.isBinaryExpression(source) && source.operatorToken.kind === 27 && isMatchingReference(source.right, target));
             }
             return false;
         }
         function containsTruthyCheck(source, target) {
             return isMatchingReference(source, target) ||
-                (target.kind === 217 && target.operatorToken.kind === 55 &&
+                (target.kind === 219 && target.operatorToken.kind === 55 &&
                     (containsTruthyCheck(source, target.left) || containsTruthyCheck(source, target.right)));
         }
+        function getPropertyAccess(expr) {
+            if (ts.isAccessExpression(expr)) {
+                return expr;
+            }
+            if (ts.isIdentifier(expr)) {
+                var symbol = getResolvedSymbol(expr);
+                if (isConstVariable(symbol)) {
+                    var declaration = symbol.valueDeclaration;
+                    if (ts.isVariableDeclaration(declaration) && !declaration.type && declaration.initializer && ts.isAccessExpression(declaration.initializer)) {
+                        return declaration.initializer;
+                    }
+                    if (ts.isBindingElement(declaration) && !declaration.initializer) {
+                        var parent = declaration.parent.parent;
+                        if (ts.isVariableDeclaration(parent) && !parent.type && parent.initializer && (ts.isIdentifier(parent.initializer) || ts.isAccessExpression(parent.initializer))) {
+                            return declaration;
+                        }
+                    }
+                }
+            }
+            return undefined;
+        }
         function getAccessedPropertyName(access) {
-            return access.kind === 202 ? access.name.escapedText :
-                ts.isStringOrNumericLiteralLike(access.argumentExpression) ? ts.escapeLeadingUnderscores(access.argumentExpression.text) :
-                    undefined;
+            var propertyName;
+            return access.kind === 204 ? access.name.escapedText :
+                access.kind === 205 && ts.isStringOrNumericLiteralLike(access.argumentExpression) ? ts.escapeLeadingUnderscores(access.argumentExpression.text) :
+                    access.kind === 201 && (propertyName = getDestructuringPropertyName(access)) ? ts.escapeLeadingUnderscores(propertyName) :
+                        undefined;
         }
         function containsMatchingReference(source, target) {
             while (ts.isAccessExpression(source)) {
@@ -54036,7 +55062,7 @@
                     if (prop.isDiscriminantProperty === undefined) {
                         prop.isDiscriminantProperty =
                             (prop.checkFlags & 192) === 192 &&
-                                !maybeTypeOfKind(getTypeOfSymbol(prop), 465829888);
+                                !maybeTypeOfKind(getTypeOfSymbol(prop), 465829888 & ~134217728);
                     }
                     return !!prop.isDiscriminantProperty;
                 }
@@ -54060,7 +55086,7 @@
         function mapTypesByKeyProperty(types, name) {
             var map = new ts.Map();
             var count = 0;
-            var _loop_20 = function (type) {
+            var _loop_22 = function (type) {
                 if (type.flags & (524288 | 2097152 | 58982400)) {
                     var discriminant = getTypeOfPropertyOfType(type, name);
                     if (discriminant) {
@@ -54084,9 +55110,9 @@
                     }
                 }
             };
-            for (var _i = 0, types_17 = types; _i < types_17.length; _i++) {
-                var type = types_17[_i];
-                var state_8 = _loop_20(type);
+            for (var _i = 0, types_16 = types; _i < types_16.length; _i++) {
+                var type = types_16[_i];
+                var state_8 = _loop_22(type);
                 if (typeof state_8 === "object")
                     return state_8.value;
             }
@@ -54121,7 +55147,7 @@
         }
         function getMatchingUnionConstituentForObjectLiteral(unionType, node) {
             var keyPropertyName = getKeyPropertyName(unionType);
-            var propNode = keyPropertyName && ts.find(node.properties, function (p) { return p.symbol && p.kind === 289 &&
+            var propNode = keyPropertyName && ts.find(node.properties, function (p) { return p.symbol && p.kind === 291 &&
                 p.symbol.escapedName === keyPropertyName && isPossiblyDiscriminantValue(p.initializer); });
             var propType = propNode && getTypeOfExpression(propNode.initializer);
             return propType && getConstituentTypeForKeyType(unionType, propType);
@@ -54138,7 +55164,7 @@
                     }
                 }
             }
-            if (expression.expression.kind === 202 &&
+            if (expression.expression.kind === 204 &&
                 isOrContainsMatchingReference(reference, expression.expression.expression)) {
                 return true;
             }
@@ -54265,14 +55291,12 @@
                 type;
         }
         function getTypeOfDestructuredProperty(type, name) {
+            var _a;
             var nameType = getLiteralTypeFromPropertyName(name);
             if (!isTypeUsableAsPropertyName(nameType))
                 return errorType;
             var text = getPropertyNameFromType(nameType);
-            return getTypeOfPropertyOfType(type, text) ||
-                isNumericLiteralName(text) && includeUndefinedInIndexSignature(getIndexTypeOfType(type, 1)) ||
-                includeUndefinedInIndexSignature(getIndexTypeOfType(type, 0)) ||
-                errorType;
+            return getTypeOfPropertyOfType(type, text) || includeUndefinedInIndexSignature((_a = getApplicableIndexInfoForName(type, text)) === null || _a === void 0 ? void 0 : _a.type) || errorType;
         }
         function getTypeOfDestructuredArrayElement(type, index) {
             return everyType(type, isTupleLikeType) && getTupleElementType(type, index) ||
@@ -54290,15 +55314,15 @@
             return createArrayType(checkIteratedTypeOrElementType(65, type, undefinedType, undefined) || errorType);
         }
         function getAssignedTypeOfBinaryExpression(node) {
-            var isDestructuringDefaultAssignment = node.parent.kind === 200 && isDestructuringAssignmentTarget(node.parent) ||
-                node.parent.kind === 289 && isDestructuringAssignmentTarget(node.parent.parent);
+            var isDestructuringDefaultAssignment = node.parent.kind === 202 && isDestructuringAssignmentTarget(node.parent) ||
+                node.parent.kind === 291 && isDestructuringAssignmentTarget(node.parent.parent);
             return isDestructuringDefaultAssignment ?
                 getTypeWithDefault(getAssignedType(node), node.right) :
                 getTypeOfExpression(node.right);
         }
         function isDestructuringAssignmentTarget(parent) {
-            return parent.parent.kind === 217 && parent.parent.left === parent ||
-                parent.parent.kind === 240 && parent.parent.initializer === parent;
+            return parent.parent.kind === 219 && parent.parent.left === parent ||
+                parent.parent.kind === 242 && parent.parent.initializer === parent;
         }
         function getAssignedTypeOfArrayLiteralElement(node, element) {
             return getTypeOfDestructuredArrayElement(getAssignedType(node), node.elements.indexOf(element));
@@ -54315,21 +55339,21 @@
         function getAssignedType(node) {
             var parent = node.parent;
             switch (parent.kind) {
-                case 239:
+                case 241:
                     return stringType;
-                case 240:
+                case 242:
                     return checkRightHandSideOfForOf(parent) || errorType;
-                case 217:
+                case 219:
                     return getAssignedTypeOfBinaryExpression(parent);
-                case 211:
+                case 213:
                     return undefinedType;
-                case 200:
+                case 202:
                     return getAssignedTypeOfArrayLiteralElement(parent, node);
-                case 221:
+                case 223:
                     return getAssignedTypeOfSpreadExpression(parent);
-                case 289:
+                case 291:
                     return getAssignedTypeOfPropertyAssignment(parent);
-                case 290:
+                case 292:
                     return getAssignedTypeOfShorthandPropertyAssignment(parent);
             }
             return errorType;
@@ -54337,7 +55361,7 @@
         function getInitialTypeOfBindingElement(node) {
             var pattern = node.parent;
             var parentType = getInitialType(pattern.parent);
-            var type = pattern.kind === 197 ?
+            var type = pattern.kind === 199 ?
                 getTypeOfDestructuredProperty(parentType, node.propertyName || node.name) :
                 !node.dotDotDotToken ?
                     getTypeOfDestructuredArrayElement(parentType, pattern.elements.indexOf(node)) :
@@ -54352,35 +55376,35 @@
             if (node.initializer) {
                 return getTypeOfInitializer(node.initializer);
             }
-            if (node.parent.parent.kind === 239) {
+            if (node.parent.parent.kind === 241) {
                 return stringType;
             }
-            if (node.parent.parent.kind === 240) {
+            if (node.parent.parent.kind === 242) {
                 return checkRightHandSideOfForOf(node.parent.parent) || errorType;
             }
             return errorType;
         }
         function getInitialType(node) {
-            return node.kind === 250 ?
+            return node.kind === 252 ?
                 getInitialTypeOfVariableDeclaration(node) :
                 getInitialTypeOfBindingElement(node);
         }
         function isEmptyArrayAssignment(node) {
-            return node.kind === 250 && node.initializer &&
+            return node.kind === 252 && node.initializer &&
                 isEmptyArrayLiteral(node.initializer) ||
-                node.kind !== 199 && node.parent.kind === 217 &&
+                node.kind !== 201 && node.parent.kind === 219 &&
                     isEmptyArrayLiteral(node.parent.right);
         }
         function getReferenceCandidate(node) {
             switch (node.kind) {
-                case 208:
+                case 210:
                     return getReferenceCandidate(node.expression);
-                case 217:
+                case 219:
                     switch (node.operatorToken.kind) {
-                        case 62:
-                        case 74:
+                        case 63:
                         case 75:
                         case 76:
+                        case 77:
                             return getReferenceCandidate(node.left);
                         case 27:
                             return getReferenceCandidate(node.right);
@@ -54390,13 +55414,13 @@
         }
         function getReferenceRoot(node) {
             var parent = node.parent;
-            return parent.kind === 208 ||
-                parent.kind === 217 && parent.operatorToken.kind === 62 && parent.left === node ||
-                parent.kind === 217 && parent.operatorToken.kind === 27 && parent.right === node ?
+            return parent.kind === 210 ||
+                parent.kind === 219 && parent.operatorToken.kind === 63 && parent.left === node ||
+                parent.kind === 219 && parent.operatorToken.kind === 27 && parent.right === node ?
                 getReferenceRoot(parent) : node;
         }
         function getTypeOfSwitchClause(clause) {
-            if (clause.kind === 285) {
+            if (clause.kind === 287) {
                 return getRegularTypeOfLiteralType(getTypeOfExpression(clause.expression));
             }
             return neverType;
@@ -54416,7 +55440,7 @@
             var witnesses = [];
             for (var _i = 0, _a = switchStatement.caseBlock.clauses; _i < _a.length; _i++) {
                 var clause = _a[_i];
-                if (clause.kind === 285) {
+                if (clause.kind === 287) {
                     if (ts.isStringLiteralLike(clause.expression)) {
                         witnesses.push(clause.expression.text);
                         continue;
@@ -54484,6 +55508,9 @@
             }
             return type.flags & 131072 || f(type) ? type : neverType;
         }
+        function removeType(type, targetType) {
+            return filterType(type, function (t) { return t !== targetType; });
+        }
         function countTypes(type) {
             return type.flags & 1048576 ? type.types.length : 1;
         }
@@ -54498,8 +55525,8 @@
             var types = origin && origin.flags & 1048576 ? origin.types : type.types;
             var mappedTypes;
             var changed = false;
-            for (var _i = 0, types_18 = types; _i < types_18.length; _i++) {
-                var t = types_18[_i];
+            for (var _i = 0, types_17 = types; _i < types_17.length; _i++) {
+                var t = types_17[_i];
                 var mapped = t.flags & 1048576 ? mapType(t, mapper, noReductions) : mapper(t);
                 changed || (changed = t !== mapped);
                 if (mapped) {
@@ -54575,8 +55602,8 @@
         }
         function isEvolvingArrayTypeList(types) {
             var hasEvolvingArrayType = false;
-            for (var _i = 0, types_19 = types; _i < types_19.length; _i++) {
-                var t = types_19[_i];
+            for (var _i = 0, types_18 = types; _i < types_18.length; _i++) {
+                var t = types_18[_i];
                 if (!(t.flags & 131072)) {
                     if (!(ts.getObjectFlags(t) & 256)) {
                         return false;
@@ -54590,21 +55617,21 @@
             var root = getReferenceRoot(node);
             var parent = root.parent;
             var isLengthPushOrUnshift = ts.isPropertyAccessExpression(parent) && (parent.name.escapedText === "length" ||
-                parent.parent.kind === 204
+                parent.parent.kind === 206
                     && ts.isIdentifier(parent.name)
                     && ts.isPushOrUnshiftIdentifier(parent.name));
-            var isElementAssignment = parent.kind === 203 &&
+            var isElementAssignment = parent.kind === 205 &&
                 parent.expression === root &&
-                parent.parent.kind === 217 &&
-                parent.parent.operatorToken.kind === 62 &&
+                parent.parent.kind === 219 &&
+                parent.parent.operatorToken.kind === 63 &&
                 parent.parent.left === parent &&
                 !ts.isAssignmentTarget(parent.parent) &&
                 isTypeAssignableToKind(getTypeOfExpression(parent.argumentExpression), 296);
             return isLengthPushOrUnshift || isElementAssignment;
         }
         function isDeclarationWithExplicitTypeAnnotation(declaration) {
-            return (declaration.kind === 250 || declaration.kind === 161 ||
-                declaration.kind === 164 || declaration.kind === 163) &&
+            return (declaration.kind === 252 || declaration.kind === 162 ||
+                declaration.kind === 165 || declaration.kind === 164) &&
                 !!ts.getEffectiveTypeAnnotationNode(declaration);
         }
         function getExplicitTypeOfSymbol(symbol, diagnostic) {
@@ -54623,7 +55650,7 @@
                     if (isDeclarationWithExplicitTypeAnnotation(declaration)) {
                         return getTypeOfSymbol(symbol);
                     }
-                    if (ts.isVariableDeclaration(declaration) && declaration.parent.parent.kind === 240) {
+                    if (ts.isVariableDeclaration(declaration) && declaration.parent.parent.kind === 242) {
                         var statement = declaration.parent.parent;
                         var expressionType = getTypeOfDottedName(statement.expression, undefined);
                         if (expressionType) {
@@ -54640,14 +55667,14 @@
         function getTypeOfDottedName(node, diagnostic) {
             if (!(node.flags & 16777216)) {
                 switch (node.kind) {
-                    case 78:
+                    case 79:
                         var symbol = getExportSymbolOfValueSymbolIfExported(getResolvedSymbol(node));
                         return getExplicitTypeOfSymbol(symbol.flags & 2097152 ? resolveAlias(symbol) : symbol, diagnostic);
-                    case 107:
+                    case 108:
                         return getExplicitThisType(node);
-                    case 105:
+                    case 106:
                         return checkSuperExpression(node);
-                    case 202: {
+                    case 204: {
                         var type = getTypeOfDottedName(node.expression, diagnostic);
                         if (type) {
                             var name = node.name;
@@ -54665,7 +55692,7 @@
                         }
                         return undefined;
                     }
-                    case 208:
+                    case 210:
                         return getTypeOfDottedName(node.expression, diagnostic);
                 }
             }
@@ -54675,10 +55702,10 @@
             var signature = links.effectsSignature;
             if (signature === undefined) {
                 var funcType = void 0;
-                if (node.parent.kind === 234) {
+                if (node.parent.kind === 236) {
                     funcType = getTypeOfDottedName(node.expression, undefined);
                 }
-                else if (node.expression.kind !== 105) {
+                else if (node.expression.kind !== 106) {
                     if (ts.isOptionalChain(node)) {
                         funcType = checkNonNullType(getOptionalExpressionType(checkExpression(node.expression), node.expression), node.expression);
                     }
@@ -54719,7 +55746,7 @@
         }
         function isFalseExpression(expr) {
             var node = ts.skipParentheses(expr);
-            return node.kind === 94 || node.kind === 217 && (node.operatorToken.kind === 55 && (isFalseExpression(node.left) || isFalseExpression(node.right)) ||
+            return node.kind === 95 || node.kind === 219 && (node.operatorToken.kind === 55 && (isFalseExpression(node.left) || isFalseExpression(node.right)) ||
                 node.operatorToken.kind === 56 && isFalseExpression(node.left) && isFalseExpression(node.right));
         }
         function isReachableFlowNodeWorker(flow, noCacheCheck) {
@@ -54800,7 +55827,7 @@
                     flow = flow.antecedent;
                 }
                 else if (flags & 512) {
-                    if (flow.node.expression.kind === 105) {
+                    if (flow.node.expression.kind === 106) {
                         return true;
                     }
                     flow = flow.antecedent;
@@ -54824,15 +55851,27 @@
                 }
             }
         }
-        function getFlowTypeOfReference(reference, declaredType, initialType, flowContainer, couldBeUninitialized) {
+        function isConstantReference(node) {
+            switch (node.kind) {
+                case 79:
+                    var symbol = getResolvedSymbol(node);
+                    return isConstVariable(symbol) || !!symbol.valueDeclaration && ts.getRootDeclaration(symbol.valueDeclaration).kind === 162 && !isParameterAssigned(symbol);
+                case 204:
+                case 205:
+                    return isConstantReference(node.expression) && isReadonlySymbol(getNodeLinks(node).resolvedSymbol || unknownSymbol);
+            }
+            return false;
+        }
+        function getFlowTypeOfReference(reference, declaredType, initialType, flowContainer) {
             if (initialType === void 0) { initialType = declaredType; }
             var key;
             var isKeySet = false;
             var flowDepth = 0;
+            var inlineLevel = 0;
             if (flowAnalysisDisabled) {
                 return errorType;
             }
-            if (!reference.flowNode || !couldBeUninitialized && !(declaredType.flags & 536624127)) {
+            if (!reference.flowNode) {
                 return declaredType;
             }
             flowInvocationCount++;
@@ -54840,7 +55879,7 @@
             var evolvedType = getTypeFromFlowType(getTypeAtFlowNode(reference.flowNode));
             sharedFlowCount = sharedFlowStart;
             var resultType = ts.getObjectFlags(evolvedType) & 256 && isEvolvingArrayOperationTarget(reference) ? autoArrayType : finalizeEvolvingArrayType(evolvedType);
-            if (resultType === unreachableNeverType || reference.parent && reference.parent.kind === 226 && !(resultType.flags & 131072) && getTypeWithFacts(resultType, 2097152).flags & 131072) {
+            if (resultType === unreachableNeverType || reference.parent && reference.parent.kind === 228 && !(resultType.flags & 131072) && getTypeWithFacts(resultType, 2097152).flags & 131072) {
                 return declaredType;
             }
             return resultType;
@@ -54918,9 +55957,9 @@
                     else if (flags & 2) {
                         var container = flow.node;
                         if (container && container !== flowContainer &&
-                            reference.kind !== 202 &&
-                            reference.kind !== 203 &&
-                            reference.kind !== 107) {
+                            reference.kind !== 204 &&
+                            reference.kind !== 205 &&
+                            reference.kind !== 108) {
                             flow = container.flowNode;
                             continue;
                         }
@@ -54940,7 +55979,7 @@
             }
             function getInitialOrAssignedType(flow) {
                 var node = flow.node;
-                return getNarrowableTypeForReference(node.kind === 250 || node.kind === 199 ?
+                return getNarrowableTypeForReference(node.kind === 252 || node.kind === 201 ?
                     getInitialType(node) :
                     getAssignedType(node), reference);
             }
@@ -54972,23 +56011,23 @@
                     }
                     if (ts.isVariableDeclaration(node) && (ts.isInJSFile(node) || ts.isVarConst(node))) {
                         var init = ts.getDeclaredExpandoInitializer(node);
-                        if (init && (init.kind === 209 || init.kind === 210)) {
+                        if (init && (init.kind === 211 || init.kind === 212)) {
                             return getTypeAtFlowNode(flow.antecedent);
                         }
                     }
                     return declaredType;
                 }
-                if (ts.isVariableDeclaration(node) && node.parent.parent.kind === 239 && isMatchingReference(reference, node.parent.parent.expression)) {
+                if (ts.isVariableDeclaration(node) && node.parent.parent.kind === 241 && isMatchingReference(reference, node.parent.parent.expression)) {
                     return getNonNullableTypeIfNeeded(getTypeFromFlowType(getTypeAtFlowNode(flow.antecedent)));
                 }
                 return undefined;
             }
             function narrowTypeByAssertion(type, expr) {
                 var node = ts.skipParentheses(expr);
-                if (node.kind === 94) {
+                if (node.kind === 95) {
                     return unreachableNeverType;
                 }
-                if (node.kind === 217) {
+                if (node.kind === 219) {
                     if (node.operatorToken.kind === 55) {
                         return narrowTypeByAssertion(narrowTypeByAssertion(type, node.left), node.right);
                     }
@@ -55019,7 +56058,7 @@
             function getTypeAtFlowArrayMutation(flow) {
                 if (declaredType === autoType || declaredType === autoArrayType) {
                     var node = flow.node;
-                    var expr = node.kind === 204 ?
+                    var expr = node.kind === 206 ?
                         node.expression.expression :
                         node.left.expression;
                     if (isMatchingReference(reference, getReferenceCandidate(expr))) {
@@ -55027,7 +56066,7 @@
                         var type = getTypeFromFlowType(flowType);
                         if (ts.getObjectFlags(type) & 256) {
                             var evolvedType_1 = type;
-                            if (node.kind === 204) {
+                            if (node.kind === 206) {
                                 for (var _i = 0, _a = node.arguments; _i < _a.length; _i++) {
                                     var arg = _a[_i];
                                     evolvedType_1 = addEvolvingArrayElementType(evolvedType_1, arg);
@@ -55067,7 +56106,7 @@
                 if (isMatchingReference(reference, expr)) {
                     type = narrowTypeBySwitchOnDiscriminant(type, flow.switchStatement, flow.clauseStart, flow.clauseEnd);
                 }
-                else if (expr.kind === 212 && isMatchingReference(reference, expr.expression)) {
+                else if (expr.kind === 214 && isMatchingReference(reference, expr.expression)) {
                     type = narrowBySwitchOnTypeOf(type, flow.switchStatement, flow.clauseStart, flow.clauseEnd);
                 }
                 else {
@@ -55075,12 +56114,13 @@
                         if (optionalChainContainsReference(expr, reference)) {
                             type = narrowTypeBySwitchOptionalChainContainment(type, flow.switchStatement, flow.clauseStart, flow.clauseEnd, function (t) { return !(t.flags & (32768 | 131072)); });
                         }
-                        else if (expr.kind === 212 && optionalChainContainsReference(expr.expression, reference)) {
+                        else if (expr.kind === 214 && optionalChainContainsReference(expr.expression, reference)) {
                             type = narrowTypeBySwitchOptionalChainContainment(type, flow.switchStatement, flow.clauseStart, flow.clauseEnd, function (t) { return !(t.flags & 131072 || t.flags & 128 && t.value === "undefined"); });
                         }
                     }
-                    if (isMatchingReferenceDiscriminant(expr, type)) {
-                        type = narrowTypeBySwitchOnDiscriminantProperty(type, expr, flow.switchStatement, flow.clauseStart, flow.clauseEnd);
+                    var access = getDiscriminantPropertyAccess(expr, type);
+                    if (access) {
+                        type = narrowTypeBySwitchOnDiscriminantProperty(type, access, flow.switchStatement, flow.clauseStart, flow.clauseEnd);
                     }
                 }
                 return createFlowType(type, isIncomplete(flowType));
@@ -55193,16 +56233,13 @@
                 }
                 return result;
             }
-            function isMatchingReferenceDiscriminant(expr, computedType) {
+            function getDiscriminantPropertyAccess(expr, computedType) {
+                var access, name;
                 var type = declaredType.flags & 1048576 ? declaredType : computedType;
-                if (!(type.flags & 1048576) || !ts.isAccessExpression(expr)) {
-                    return false;
-                }
-                var name = getAccessedPropertyName(expr);
-                if (name === undefined) {
-                    return false;
-                }
-                return isMatchingReference(reference, expr.expression) && isDiscriminantProperty(type, name);
+                return type.flags & 1048576 && (access = getPropertyAccess(expr)) && (name = getAccessedPropertyName(access)) &&
+                    isMatchingReference(reference, ts.isAccessExpression(access) ? access.expression : access.parent.parent.initializer) &&
+                    isDiscriminantProperty(type, name) ?
+                    access : undefined;
             }
             function narrowTypeByDiscriminant(type, access, narrowType) {
                 var propName = getAccessedPropertyName(access);
@@ -55225,10 +56262,10 @@
                 if ((operator === 36 || operator === 37) && type.flags & 1048576) {
                     var keyPropertyName = getKeyPropertyName(type);
                     if (keyPropertyName && keyPropertyName === getAccessedPropertyName(access)) {
-                        var candidate_2 = getConstituentTypeForKeyType(type, getTypeOfExpression(value));
-                        if (candidate_2) {
-                            return operator === (assumeTrue ? 36 : 37) ? candidate_2 :
-                                isUnitType(getTypeOfPropertyOfType(candidate_2, keyPropertyName) || unknownType) ? filterType(type, function (t) { return t !== candidate_2; }) :
+                        var candidate = getConstituentTypeForKeyType(type, getTypeOfExpression(value));
+                        if (candidate) {
+                            return operator === (assumeTrue ? 36 : 37) ? candidate :
+                                isUnitType(getTypeOfPropertyOfType(candidate, keyPropertyName) || unknownType) ? removeType(type, candidate) :
                                     type;
                         }
                     }
@@ -55252,37 +56289,34 @@
                 if (strictNullChecks && assumeTrue && optionalChainContainsReference(expr, reference)) {
                     type = getTypeWithFacts(type, 2097152);
                 }
-                if (isMatchingReferenceDiscriminant(expr, type)) {
-                    return narrowTypeByDiscriminant(type, expr, function (t) { return getTypeWithFacts(t, assumeTrue ? 4194304 : 8388608); });
+                var access = getDiscriminantPropertyAccess(expr, type);
+                if (access) {
+                    return narrowTypeByDiscriminant(type, access, function (t) { return getTypeWithFacts(t, assumeTrue ? 4194304 : 8388608); });
                 }
                 return type;
             }
             function isTypePresencePossible(type, propName, assumeTrue) {
-                if (getIndexInfoOfType(type, 0)) {
-                    return true;
-                }
                 var prop = getPropertyOfType(type, propName);
                 if (prop) {
                     return prop.flags & 16777216 ? true : assumeTrue;
                 }
-                return !assumeTrue;
+                return getApplicableIndexInfoForName(type, propName) ? true : !assumeTrue;
             }
-            function narrowByInKeyword(type, literal, assumeTrue) {
+            function narrowByInKeyword(type, name, assumeTrue) {
                 if (type.flags & 1048576
                     || type.flags & 524288 && declaredType !== type
                     || isThisTypeParameter(type)
                     || type.flags & 2097152 && ts.every(type.types, function (t) { return t.symbol !== globalThisSymbol; })) {
-                    var propName_1 = ts.escapeLeadingUnderscores(literal.text);
-                    return filterType(type, function (t) { return isTypePresencePossible(t, propName_1, assumeTrue); });
+                    return filterType(type, function (t) { return isTypePresencePossible(t, name, assumeTrue); });
                 }
                 return type;
             }
             function narrowTypeByBinaryExpression(type, expr, assumeTrue) {
                 switch (expr.operatorToken.kind) {
-                    case 62:
-                    case 74:
+                    case 63:
                     case 75:
                     case 76:
+                    case 77:
                         return narrowTypeByTruthiness(narrowType(type, expr.right, assumeTrue), expr.left, assumeTrue);
                     case 34:
                     case 35:
@@ -55291,10 +56325,10 @@
                         var operator = expr.operatorToken.kind;
                         var left = getReferenceCandidate(expr.left);
                         var right = getReferenceCandidate(expr.right);
-                        if (left.kind === 212 && ts.isStringLiteralLike(right)) {
+                        if (left.kind === 214 && ts.isStringLiteralLike(right)) {
                             return narrowTypeByTypeof(type, left, operator, right, assumeTrue);
                         }
-                        if (right.kind === 212 && ts.isStringLiteralLike(left)) {
+                        if (right.kind === 214 && ts.isStringLiteralLike(left)) {
                             return narrowTypeByTypeof(type, right, operator, left, assumeTrue);
                         }
                         if (isMatchingReference(reference, left)) {
@@ -55311,11 +56345,13 @@
                                 type = narrowTypeByOptionalChainContainment(type, operator, left, assumeTrue);
                             }
                         }
-                        if (isMatchingReferenceDiscriminant(left, type)) {
-                            return narrowTypeByDiscriminantProperty(type, left, operator, right, assumeTrue);
+                        var leftAccess = getDiscriminantPropertyAccess(left, type);
+                        if (leftAccess) {
+                            return narrowTypeByDiscriminantProperty(type, leftAccess, operator, right, assumeTrue);
                         }
-                        if (isMatchingReferenceDiscriminant(right, type)) {
-                            return narrowTypeByDiscriminantProperty(type, right, operator, left, assumeTrue);
+                        var rightAccess = getDiscriminantPropertyAccess(right, type);
+                        if (rightAccess) {
+                            return narrowTypeByDiscriminantProperty(type, rightAccess, operator, left, assumeTrue);
                         }
                         if (isMatchingConstructorReference(left)) {
                             return narrowTypeByConstructor(type, operator, right, assumeTrue);
@@ -55324,16 +56360,32 @@
                             return narrowTypeByConstructor(type, operator, left, assumeTrue);
                         }
                         break;
-                    case 101:
+                    case 102:
                         return narrowTypeByInstanceof(type, expr, assumeTrue);
-                    case 100:
+                    case 101:
                         var target = getReferenceCandidate(expr.right);
-                        if (ts.isStringLiteralLike(expr.left) && isMatchingReference(reference, target)) {
-                            return narrowByInKeyword(type, expr.left, assumeTrue);
+                        var leftType = getTypeOfNode(expr.left);
+                        if (leftType.flags & 128) {
+                            var name = ts.escapeLeadingUnderscores(leftType.value);
+                            if (containsMissingType(type) && ts.isAccessExpression(reference) && isMatchingReference(reference.expression, target) &&
+                                getAccessedPropertyName(reference) === name) {
+                                return getTypeWithFacts(type, assumeTrue ? 524288 : 65536);
+                            }
+                            if (isMatchingReference(reference, target)) {
+                                return narrowByInKeyword(type, name, assumeTrue);
+                            }
                         }
                         break;
                     case 27:
                         return narrowType(type, expr.right, assumeTrue);
+                    case 55:
+                        return assumeTrue ?
+                            narrowType(narrowType(type, expr.left, true), expr.right, true) :
+                            getUnionType([narrowType(type, expr.left, false), narrowType(type, expr.right, false)]);
+                    case 56:
+                        return assumeTrue ?
+                            getUnionType([narrowType(type, expr.left, true), narrowType(type, expr.right, true)]) :
+                            narrowType(narrowType(type, expr.left, false), expr.right, false);
                 }
                 return type;
             }
@@ -55400,7 +56452,7 @@
                     return type;
                 }
                 if (assumeTrue && type.flags & 2 && literal.text === "object") {
-                    if (typeOfExpr.parent.parent.kind === 217) {
+                    if (typeOfExpr.parent.parent.kind === 219) {
                         var expr = typeOfExpr.parent.parent;
                         if (expr.operatorToken.kind === 55 && expr.right === typeOfExpr.parent && containsTruthyCheck(reference, expr.left)) {
                             return nonPrimitiveType;
@@ -55610,6 +56662,16 @@
                         return narrowTypeByTypePredicate(type, predicate, callExpression, assumeTrue);
                     }
                 }
+                if (containsMissingType(type) && ts.isAccessExpression(reference) && ts.isPropertyAccessExpression(callExpression.expression)) {
+                    var callAccess = callExpression.expression;
+                    if (isMatchingReference(reference.expression, getReferenceCandidate(callAccess.expression)) &&
+                        ts.isIdentifier(callAccess.name) && callAccess.name.escapedText === "hasOwnProperty" && callExpression.arguments.length === 1) {
+                        var argument = callExpression.arguments[0];
+                        if (ts.isStringLiteralLike(argument) && getAccessedPropertyName(reference) === ts.escapeLeadingUnderscores(argument.text)) {
+                            return getTypeWithFacts(type, assumeTrue ? 524288 : 65536);
+                        }
+                    }
+                }
                 return type;
             }
             function narrowTypeByTypePredicate(type, predicate, callExpression, assumeTrue) {
@@ -55623,8 +56685,9 @@
                             !(getTypeFacts(predicate.type) & 65536)) {
                             type = getTypeWithFacts(type, 2097152);
                         }
-                        if (isMatchingReferenceDiscriminant(predicateArgument, type)) {
-                            return narrowTypeByDiscriminant(type, predicateArgument, function (t) { return getNarrowedType(t, predicate.type, assumeTrue, isTypeSubtypeOf); });
+                        var access = getDiscriminantPropertyAccess(predicateArgument, type);
+                        if (access) {
+                            return narrowTypeByDiscriminant(type, access, function (t) { return getNarrowedType(t, predicate.type, assumeTrue, isTypeSubtypeOf); });
                         }
                     }
                 }
@@ -55636,20 +56699,32 @@
                     return narrowTypeByOptionality(type, expr, assumeTrue);
                 }
                 switch (expr.kind) {
-                    case 78:
-                    case 107:
-                    case 105:
-                    case 202:
-                    case 203:
-                        return narrowTypeByTruthiness(type, expr, assumeTrue);
+                    case 79:
+                        if (!isMatchingReference(reference, expr) && inlineLevel < 5) {
+                            var symbol = getResolvedSymbol(expr);
+                            if (isConstVariable(symbol)) {
+                                var declaration = symbol.valueDeclaration;
+                                if (declaration && ts.isVariableDeclaration(declaration) && !declaration.type && declaration.initializer && isConstantReference(reference)) {
+                                    inlineLevel++;
+                                    var result = narrowType(type, declaration.initializer, assumeTrue);
+                                    inlineLevel--;
+                                    return result;
+                                }
+                            }
+                        }
+                    case 108:
+                    case 106:
                     case 204:
+                    case 205:
+                        return narrowTypeByTruthiness(type, expr, assumeTrue);
+                    case 206:
                         return narrowTypeByCallExpression(type, expr, assumeTrue);
-                    case 208:
-                    case 226:
+                    case 210:
+                    case 228:
                         return narrowType(type, expr.expression, assumeTrue);
-                    case 217:
+                    case 219:
                         return narrowTypeByBinaryExpression(type, expr, assumeTrue);
-                    case 215:
+                    case 217:
                         if (expr.operator === 53) {
                             return narrowType(type, expr.operand, !assumeTrue);
                         }
@@ -55661,15 +56736,16 @@
                 if (isMatchingReference(reference, expr)) {
                     return getTypeWithFacts(type, assumePresent ? 2097152 : 262144);
                 }
-                if (isMatchingReferenceDiscriminant(expr, type)) {
-                    return narrowTypeByDiscriminant(type, expr, function (t) { return getTypeWithFacts(t, assumePresent ? 2097152 : 262144); });
+                var access = getDiscriminantPropertyAccess(expr, type);
+                if (access) {
+                    return narrowTypeByDiscriminant(type, access, function (t) { return getTypeWithFacts(t, assumePresent ? 2097152 : 262144); });
                 }
                 return type;
             }
         }
         function getTypeOfSymbolAtLocation(symbol, location) {
             symbol = symbol.exportSymbol || symbol;
-            if (location.kind === 78 || location.kind === 79) {
+            if (location.kind === 79 || location.kind === 80) {
                 if (ts.isRightSideOfQualifiedNameOrPropertyAccess(location)) {
                     location = location.parent;
                 }
@@ -55683,14 +56759,14 @@
             if (ts.isDeclarationName(location) && ts.isSetAccessor(location.parent) && getAnnotatedAccessorTypeNode(location.parent)) {
                 return resolveTypeOfAccessors(location.parent.symbol, true);
             }
-            return getTypeOfSymbol(symbol);
+            return getNonMissingTypeOfSymbol(symbol);
         }
         function getControlFlowContainer(node) {
             return ts.findAncestor(node.parent, function (node) {
                 return ts.isFunctionLike(node) && !ts.getImmediatelyInvokedFunctionExpression(node) ||
-                    node.kind === 258 ||
-                    node.kind === 298 ||
-                    node.kind === 164;
+                    node.kind === 260 ||
+                    node.kind === 300 ||
+                    node.kind === 165;
             });
         }
         function isParameterAssigned(symbol) {
@@ -55711,10 +56787,10 @@
             return !!ts.findAncestor(node.parent, function (node) { return ts.isFunctionLike(node) && !!(getNodeLinks(node).flags & 8388608); });
         }
         function markParameterAssignments(node) {
-            if (node.kind === 78) {
+            if (node.kind === 79) {
                 if (ts.isAssignmentTarget(node)) {
                     var symbol = getResolvedSymbol(node);
-                    if (symbol.valueDeclaration && ts.getRootDeclaration(symbol.valueDeclaration).kind === 161) {
+                    if (symbol.valueDeclaration && ts.getRootDeclaration(symbol.valueDeclaration).kind === 162) {
                         symbol.isAssigned = true;
                     }
                 }
@@ -55724,12 +56800,12 @@
             }
         }
         function isConstVariable(symbol) {
-            return symbol.flags & 3 && (getDeclarationNodeFlagsFromSymbol(symbol) & 2) !== 0 && getTypeOfSymbol(symbol) !== autoArrayType;
+            return symbol.flags & 3 && (getDeclarationNodeFlagsFromSymbol(symbol) & 2) !== 0;
         }
         function removeOptionalityFromDeclaredType(declaredType, declaration) {
             if (pushTypeResolution(declaration.symbol, 2)) {
                 var annotationIncludesUndefined = strictNullChecks &&
-                    declaration.kind === 161 &&
+                    declaration.kind === 162 &&
                     declaration.initializer &&
                     getFalsyFlags(declaredType) & 32768 &&
                     !(getFalsyFlags(checkExpression(declaration.initializer)) & 32768);
@@ -55741,29 +56817,29 @@
                 return declaredType;
             }
         }
-        function isConstraintPosition(node) {
+        function isConstraintPosition(type, node) {
             var parent = node.parent;
-            return parent.kind === 202 ||
-                parent.kind === 204 && parent.expression === node ||
-                parent.kind === 203 && parent.expression === node &&
-                    !isGenericIndexType(getTypeOfExpression(parent.argumentExpression));
+            return parent.kind === 204 ||
+                parent.kind === 206 && parent.expression === node ||
+                parent.kind === 205 && parent.expression === node &&
+                    !(isGenericTypeWithoutNullableConstraint(type) && isGenericIndexType(getTypeOfExpression(parent.argumentExpression)));
         }
         function isGenericTypeWithUnionConstraint(type) {
             return !!(type.flags & 465829888 && getBaseConstraintOrType(type).flags & (98304 | 1048576));
         }
-        function containsGenericType(type) {
-            return !!(type.flags & 465829888 || type.flags & 3145728 && ts.some(type.types, containsGenericType));
+        function isGenericTypeWithoutNullableConstraint(type) {
+            return !!(type.flags & 465829888 && !maybeTypeOfKind(getBaseConstraintOrType(type), 98304));
         }
-        function hasContextualTypeWithNoGenericTypes(node) {
+        function hasNonBindingPatternContextualTypeWithNoGenericTypes(node) {
             var contextualType = (ts.isIdentifier(node) || ts.isPropertyAccessExpression(node) || ts.isElementAccessExpression(node)) &&
                 !((ts.isJsxOpeningElement(node.parent) || ts.isJsxSelfClosingElement(node.parent)) && node.parent.tagName === node) &&
-                getContextualType(node);
-            return contextualType && !someType(contextualType, containsGenericType);
+                getContextualType(node, 8);
+            return contextualType && !isGenericType(contextualType);
         }
         function getNarrowableTypeForReference(type, reference, checkMode) {
             var substituteConstraints = !(checkMode && checkMode & 2) &&
                 someType(type, isGenericTypeWithUnionConstraint) &&
-                (isConstraintPosition(reference) || hasContextualTypeWithNoGenericTypes(reference));
+                (isConstraintPosition(type, reference) || hasNonBindingPatternContextualTypeWithNoGenericTypes(reference));
             return substituteConstraints ? mapType(type, function (t) { return t.flags & 465829888 ? getBaseConstraintOrType(t) : t; }) : type;
         }
         function isExportOrExportExpression(location) {
@@ -55790,9 +56866,13 @@
                 return errorType;
             }
             if (symbol === argumentsSymbol) {
+                if (isInPropertyInitializerOrClassStaticBlock(node)) {
+                    error(node, ts.Diagnostics.arguments_cannot_be_referenced_in_property_initializers);
+                    return errorType;
+                }
                 var container = ts.getContainingFunction(node);
                 if (languageVersion < 2) {
-                    if (container.kind === 210) {
+                    if (container.kind === 212) {
                         error(node, ts.Diagnostics.The_arguments_object_cannot_be_referenced_in_an_arrow_function_in_ES3_and_ES5_Consider_using_a_standard_function_expression);
                     }
                     else if (ts.hasSyntacticModifier(container, 256)) {
@@ -55812,7 +56892,7 @@
             }
             var declaration = localOrExportSymbol.valueDeclaration;
             if (declaration && localOrExportSymbol.flags & 32) {
-                if (declaration.kind === 253
+                if (declaration.kind === 255
                     && ts.nodeIsDecorated(declaration)) {
                     var container = ts.getContainingClass(node);
                     while (container !== undefined) {
@@ -55824,11 +56904,11 @@
                         container = ts.getContainingClass(container);
                     }
                 }
-                else if (declaration.kind === 222) {
+                else if (declaration.kind === 224) {
                     var container = ts.getThisContainer(node, false);
-                    while (container.kind !== 298) {
+                    while (container.kind !== 300) {
                         if (container.parent === declaration) {
-                            if (container.kind === 164 && ts.hasSyntacticModifier(container, 32)) {
+                            if (ts.isPropertyDeclaration(container) && ts.isStatic(container) || ts.isClassStaticBlockDeclaration(container)) {
                                 getNodeLinks(declaration).flags |= 16777216;
                                 getNodeLinks(node).flags |= 33554432;
                             }
@@ -55879,27 +56959,27 @@
                 return type;
             }
             type = getNarrowableTypeForReference(type, node, checkMode);
-            var isParameter = ts.getRootDeclaration(declaration).kind === 161;
+            var isParameter = ts.getRootDeclaration(declaration).kind === 162;
             var declarationContainer = getControlFlowContainer(declaration);
             var flowContainer = getControlFlowContainer(node);
             var isOuterVariable = flowContainer !== declarationContainer;
             var isSpreadDestructuringAssignmentTarget = node.parent && node.parent.parent && ts.isSpreadAssignment(node.parent) && isDestructuringAssignmentTarget(node.parent.parent);
             var isModuleExports = symbol.flags & 134217728;
-            while (flowContainer !== declarationContainer && (flowContainer.kind === 209 ||
-                flowContainer.kind === 210 || ts.isObjectLiteralOrClassExpressionMethod(flowContainer)) &&
-                (isConstVariable(localOrExportSymbol) || isParameter && !isParameterAssigned(localOrExportSymbol))) {
+            while (flowContainer !== declarationContainer && (flowContainer.kind === 211 ||
+                flowContainer.kind === 212 || ts.isObjectLiteralOrClassExpressionMethod(flowContainer)) &&
+                (isConstVariable(localOrExportSymbol) && type !== autoArrayType || isParameter && !isParameterAssigned(localOrExportSymbol))) {
                 flowContainer = getControlFlowContainer(flowContainer);
             }
             var assumeInitialized = isParameter || isAlias || isOuterVariable || isSpreadDestructuringAssignmentTarget || isModuleExports || ts.isBindingElement(declaration) ||
                 type !== autoType && type !== autoArrayType && (!strictNullChecks || (type.flags & (3 | 16384)) !== 0 ||
-                    isInTypeQuery(node) || node.parent.kind === 271) ||
-                node.parent.kind === 226 ||
-                declaration.kind === 250 && declaration.exclamationToken ||
+                    isInTypeQuery(node) || node.parent.kind === 273) ||
+                node.parent.kind === 228 ||
+                declaration.kind === 252 && declaration.exclamationToken ||
                 declaration.flags & 8388608;
             var initialType = assumeInitialized ? (isParameter ? removeOptionalityFromDeclaredType(type, declaration) : type) :
                 type === autoType || type === autoArrayType ? undefinedType :
                     getOptionalType(type);
-            var flowType = getFlowTypeOfReference(node, type, initialType, flowContainer, !assumeInitialized);
+            var flowType = getFlowTypeOfReference(node, type, initialType, flowContainer);
             if (!isEvolvingArrayOperationTarget(node) && (type === autoType || type === autoArrayType)) {
                 if (flowType === autoType || flowType === autoArrayType) {
                     if (noImplicitAny) {
@@ -55929,7 +57009,7 @@
                 (symbol.flags & (2 | 32)) === 0 ||
                 !symbol.valueDeclaration ||
                 ts.isSourceFile(symbol.valueDeclaration) ||
-                symbol.valueDeclaration.parent.kind === 288) {
+                symbol.valueDeclaration.parent.kind === 290) {
                 return;
             }
             var container = ts.getEnclosingBlockScopeContainer(symbol.valueDeclaration);
@@ -55939,7 +57019,7 @@
                 if (isCaptured) {
                     var capturesBlockScopeBindingInLoopBody = true;
                     if (ts.isForStatement(container)) {
-                        var varDeclList = ts.getAncestor(symbol.valueDeclaration, 251);
+                        var varDeclList = ts.getAncestor(symbol.valueDeclaration, 253);
                         if (varDeclList && varDeclList.parent === container) {
                             var part = getPartOfForStatementContainingNode(node.parent, container);
                             if (part) {
@@ -55958,7 +57038,7 @@
                     }
                 }
                 if (ts.isForStatement(container)) {
-                    var varDeclList = ts.getAncestor(symbol.valueDeclaration, 251);
+                    var varDeclList = ts.getAncestor(symbol.valueDeclaration, 253);
                     if (varDeclList && varDeclList.parent === container && isAssignedInBodyOfForStatement(node, container)) {
                         getNodeLinks(symbol.valueDeclaration).flags |= 4194304;
                     }
@@ -55975,14 +57055,14 @@
         }
         function isAssignedInBodyOfForStatement(node, container) {
             var current = node;
-            while (current.parent.kind === 208) {
+            while (current.parent.kind === 210) {
                 current = current.parent;
             }
             var isAssigned = false;
             if (ts.isAssignmentTarget(current)) {
                 isAssigned = true;
             }
-            else if ((current.parent.kind === 215 || current.parent.kind === 216)) {
+            else if ((current.parent.kind === 217 || current.parent.kind === 218)) {
                 var expr = current.parent;
                 isAssigned = expr.operator === 45 || expr.operator === 46;
             }
@@ -55993,7 +57073,7 @@
         }
         function captureLexicalThis(node, container) {
             getNodeLinks(node).flags |= 2;
-            if (container.kind === 164 || container.kind === 167) {
+            if (container.kind === 165 || container.kind === 169) {
                 var classNode = container.parent;
                 getNodeLinks(classNode).flags |= 4;
             }
@@ -56021,39 +57101,41 @@
                 }
             }
         }
+        function checkThisInStaticClassFieldInitializerInDecoratedClass(thisExpression, container) {
+            if (ts.isPropertyDeclaration(container) && ts.hasStaticModifier(container) &&
+                container.initializer && ts.textRangeContainsPositionInclusive(container.initializer, thisExpression.pos) && ts.length(container.parent.decorators)) {
+                error(thisExpression, ts.Diagnostics.Cannot_use_this_in_a_static_property_initializer_of_a_decorated_class);
+            }
+        }
         function checkThisExpression(node) {
+            var isNodeInTypeQuery = isInTypeQuery(node);
             var container = ts.getThisContainer(node, true);
             var capturedByArrowFunction = false;
-            if (container.kind === 167) {
+            if (container.kind === 169) {
                 checkThisBeforeSuper(node, container, ts.Diagnostics.super_must_be_called_before_accessing_this_in_the_constructor_of_a_derived_class);
             }
-            if (container.kind === 210) {
+            if (container.kind === 212) {
                 container = ts.getThisContainer(container, false);
                 capturedByArrowFunction = true;
             }
+            checkThisInStaticClassFieldInitializerInDecoratedClass(node, container);
             switch (container.kind) {
-                case 257:
+                case 259:
                     error(node, ts.Diagnostics.this_cannot_be_referenced_in_a_module_or_namespace_body);
                     break;
-                case 256:
+                case 258:
                     error(node, ts.Diagnostics.this_cannot_be_referenced_in_current_location);
                     break;
-                case 167:
+                case 169:
                     if (isInConstructorArgumentInitializer(node, container)) {
                         error(node, ts.Diagnostics.this_cannot_be_referenced_in_constructor_arguments);
                     }
                     break;
-                case 164:
-                case 163:
-                    if (ts.hasSyntacticModifier(container, 32) && !(compilerOptions.target === 99 && useDefineForClassFields)) {
-                        error(node, ts.Diagnostics.this_cannot_be_referenced_in_a_static_property_initializer);
-                    }
-                    break;
-                case 159:
+                case 160:
                     error(node, ts.Diagnostics.this_cannot_be_referenced_in_a_computed_property_name);
                     break;
             }
-            if (capturedByArrowFunction && languageVersion < 2) {
+            if (!isNodeInTypeQuery && capturedByArrowFunction && languageVersion < 2) {
                 captureLexicalThis(node, container);
             }
             var type = tryGetThisTypeAt(node, true, container);
@@ -56100,7 +57182,7 @@
             }
             if (ts.isClassLike(container.parent)) {
                 var symbol = getSymbolOfNode(container.parent);
-                var type = ts.hasSyntacticModifier(container, 32) ? getTypeOfSymbol(symbol) : getDeclaredTypeOfSymbol(symbol).thisType;
+                var type = ts.isStatic(container) ? getTypeOfSymbol(symbol) : getDeclaredTypeOfSymbol(symbol).thisType;
                 return getFlowTypeOfReference(node, type);
             }
             if (ts.isSourceFile(container)) {
@@ -56126,11 +57208,11 @@
             }
             if (ts.isClassLike(container.parent)) {
                 var symbol = getSymbolOfNode(container.parent);
-                return ts.hasSyntacticModifier(container, 32) ? getTypeOfSymbol(symbol) : getDeclaredTypeOfSymbol(symbol).thisType;
+                return ts.isStatic(container) ? getTypeOfSymbol(symbol) : getDeclaredTypeOfSymbol(symbol).thisType;
             }
         }
         function getClassNameFromPrototypeMethod(container) {
-            if (container.kind === 209 &&
+            if (container.kind === 211 &&
                 ts.isBinaryExpression(container.parent) &&
                 ts.getAssignmentDeclarationKind(container.parent) === 3) {
                 return container.parent
@@ -56138,20 +57220,20 @@
                     .expression
                     .expression;
             }
-            else if (container.kind === 166 &&
-                container.parent.kind === 201 &&
+            else if (container.kind === 167 &&
+                container.parent.kind === 203 &&
                 ts.isBinaryExpression(container.parent.parent) &&
                 ts.getAssignmentDeclarationKind(container.parent.parent) === 6) {
                 return container.parent.parent.left.expression;
             }
-            else if (container.kind === 209 &&
-                container.parent.kind === 289 &&
-                container.parent.parent.kind === 201 &&
+            else if (container.kind === 211 &&
+                container.parent.kind === 291 &&
+                container.parent.parent.kind === 203 &&
                 ts.isBinaryExpression(container.parent.parent.parent) &&
                 ts.getAssignmentDeclarationKind(container.parent.parent.parent) === 6) {
                 return container.parent.parent.parent.left.expression;
             }
-            else if (container.kind === 209 &&
+            else if (container.kind === 211 &&
                 ts.isPropertyAssignment(container.parent) &&
                 ts.isIdentifier(container.parent.name) &&
                 (container.parent.name.escapedText === "value" || container.parent.name.escapedText === "get" || container.parent.name.escapedText === "set") &&
@@ -56173,7 +57255,7 @@
         }
         function getTypeForThisExpressionFromJSDoc(node) {
             var jsdocType = ts.getJSDocType(node);
-            if (jsdocType && jsdocType.kind === 309) {
+            if (jsdocType && jsdocType.kind === 312) {
                 var jsDocFunctionType = jsdocType;
                 if (jsDocFunctionType.parameters.length > 0 &&
                     jsDocFunctionType.parameters[0].name &&
@@ -56187,15 +57269,15 @@
             }
         }
         function isInConstructorArgumentInitializer(node, constructorDecl) {
-            return !!ts.findAncestor(node, function (n) { return ts.isFunctionLikeDeclaration(n) ? "quit" : n.kind === 161 && n.parent === constructorDecl; });
+            return !!ts.findAncestor(node, function (n) { return ts.isFunctionLikeDeclaration(n) ? "quit" : n.kind === 162 && n.parent === constructorDecl; });
         }
         function checkSuperExpression(node) {
-            var isCallExpression = node.parent.kind === 204 && node.parent.expression === node;
+            var isCallExpression = node.parent.kind === 206 && node.parent.expression === node;
             var immediateContainer = ts.getSuperContainer(node, true);
             var container = immediateContainer;
             var needToCaptureLexicalThis = false;
             if (!isCallExpression) {
-                while (container && container.kind === 210) {
+                while (container && container.kind === 212) {
                     container = ts.getSuperContainer(container, true);
                     needToCaptureLexicalThis = languageVersion < 2;
                 }
@@ -56203,14 +57285,14 @@
             var canUseSuperExpression = isLegalUsageOfSuperExpression(container);
             var nodeCheckFlag = 0;
             if (!canUseSuperExpression) {
-                var current = ts.findAncestor(node, function (n) { return n === container ? "quit" : n.kind === 159; });
-                if (current && current.kind === 159) {
+                var current = ts.findAncestor(node, function (n) { return n === container ? "quit" : n.kind === 160; });
+                if (current && current.kind === 160) {
                     error(node, ts.Diagnostics.super_cannot_be_referenced_in_a_computed_property_name);
                 }
                 else if (isCallExpression) {
                     error(node, ts.Diagnostics.Super_calls_are_not_permitted_outside_constructors_or_in_nested_functions_inside_constructors);
                 }
-                else if (!container || !container.parent || !(ts.isClassLike(container.parent) || container.parent.kind === 201)) {
+                else if (!container || !container.parent || !(ts.isClassLike(container.parent) || container.parent.kind === 203)) {
                     error(node, ts.Diagnostics.super_can_only_be_referenced_in_members_of_derived_classes_or_object_literal_expressions);
                 }
                 else {
@@ -56218,17 +57300,26 @@
                 }
                 return errorType;
             }
-            if (!isCallExpression && immediateContainer.kind === 167) {
+            if (!isCallExpression && immediateContainer.kind === 169) {
                 checkThisBeforeSuper(node, container, ts.Diagnostics.super_must_be_called_before_accessing_a_property_of_super_in_the_constructor_of_a_derived_class);
             }
-            if (ts.hasSyntacticModifier(container, 32) || isCallExpression) {
+            if (ts.isStatic(container) || isCallExpression) {
                 nodeCheckFlag = 512;
+                if (!isCallExpression &&
+                    languageVersion >= 2 && languageVersion <= 8 &&
+                    (ts.isPropertyDeclaration(container) || ts.isClassStaticBlockDeclaration(container))) {
+                    ts.forEachEnclosingBlockScopeContainer(node.parent, function (current) {
+                        if (!ts.isSourceFile(current) || ts.isExternalOrCommonJsModule(current)) {
+                            getNodeLinks(current).flags |= 134217728;
+                        }
+                    });
+                }
             }
             else {
                 nodeCheckFlag = 256;
             }
             getNodeLinks(node).flags |= nodeCheckFlag;
-            if (container.kind === 166 && ts.hasSyntacticModifier(container, 256)) {
+            if (container.kind === 167 && ts.hasSyntacticModifier(container, 256)) {
                 if (ts.isSuperProperty(node.parent) && ts.isAssignmentTarget(node.parent)) {
                     getNodeLinks(container).flags |= 4096;
                 }
@@ -56239,7 +57330,7 @@
             if (needToCaptureLexicalThis) {
                 captureLexicalThis(node.parent, container);
             }
-            if (container.parent.kind === 201) {
+            if (container.parent.kind === 203) {
                 if (languageVersion < 2) {
                     error(node, ts.Diagnostics.super_is_only_allowed_in_members_of_object_literal_expressions_when_option_target_is_ES2015_or_higher);
                     return errorType;
@@ -56258,7 +57349,7 @@
             if (!baseClassType) {
                 return errorType;
             }
-            if (container.kind === 167 && isInConstructorArgumentInitializer(node, container)) {
+            if (container.kind === 169 && isInConstructorArgumentInitializer(node, container)) {
                 error(node, ts.Diagnostics.super_cannot_be_referenced_in_constructor_arguments);
                 return errorType;
             }
@@ -56270,24 +57361,26 @@
                     return false;
                 }
                 if (isCallExpression) {
-                    return container.kind === 167;
+                    return container.kind === 169;
                 }
                 else {
-                    if (ts.isClassLike(container.parent) || container.parent.kind === 201) {
-                        if (ts.hasSyntacticModifier(container, 32)) {
-                            return container.kind === 166 ||
+                    if (ts.isClassLike(container.parent) || container.parent.kind === 203) {
+                        if (ts.isStatic(container)) {
+                            return container.kind === 167 ||
+                                container.kind === 166 ||
+                                container.kind === 170 ||
+                                container.kind === 171 ||
                                 container.kind === 165 ||
-                                container.kind === 168 ||
-                                container.kind === 169;
+                                container.kind === 168;
                         }
                         else {
-                            return container.kind === 166 ||
+                            return container.kind === 167 ||
+                                container.kind === 166 ||
+                                container.kind === 170 ||
+                                container.kind === 171 ||
                                 container.kind === 165 ||
-                                container.kind === 168 ||
-                                container.kind === 169 ||
                                 container.kind === 164 ||
-                                container.kind === 163 ||
-                                container.kind === 167;
+                                container.kind === 169;
                         }
                     }
                 }
@@ -56295,10 +57388,10 @@
             }
         }
         function getContainingObjectLiteral(func) {
-            return (func.kind === 166 ||
-                func.kind === 168 ||
-                func.kind === 169) && func.parent.kind === 201 ? func.parent :
-                func.kind === 209 && func.parent.kind === 289 ? func.parent.parent :
+            return (func.kind === 167 ||
+                func.kind === 170 ||
+                func.kind === 171) && func.parent.kind === 203 ? func.parent :
+                func.kind === 211 && func.parent.kind === 291 ? func.parent.parent :
                     undefined;
         }
         function getThisTypeArgument(type) {
@@ -56310,7 +57403,7 @@
             });
         }
         function getContextualThisParameterType(func) {
-            if (func.kind === 210) {
+            if (func.kind === 212) {
                 return undefined;
             }
             if (isContextSensitiveFunctionOrObjectLiteralMethod(func)) {
@@ -56334,7 +57427,7 @@
                         if (thisType) {
                             return instantiateType(thisType, getMapperFromContext(getInferenceContext(containingLiteral)));
                         }
-                        if (literal.parent.kind !== 289) {
+                        if (literal.parent.kind !== 291) {
                             break;
                         }
                         literal = literal.parent.parent;
@@ -56343,7 +57436,7 @@
                     return getWidenedType(contextualType ? getNonNullableType(contextualType) : checkExpressionCached(containingLiteral));
                 }
                 var parent = ts.walkUpParenthesizedExpressions(func.parent);
-                if (parent.kind === 217 && parent.operatorToken.kind === 62) {
+                if (parent.kind === 219 && parent.operatorToken.kind === 63) {
                     var target = parent.left;
                     if (ts.isAccessExpression(target)) {
                         var expression = target.expression;
@@ -56394,12 +57487,12 @@
                 return getTypeFromTypeNode(typeNode);
             }
             switch (declaration.kind) {
-                case 161:
+                case 162:
                     return getContextuallyTypedParameterType(declaration);
-                case 199:
+                case 201:
                     return getContextualTypeForBindingElement(declaration);
-                case 164:
-                    if (ts.hasSyntacticModifier(declaration, 32)) {
+                case 165:
+                    if (ts.isStatic(declaration)) {
                         return getContextualTypeForStaticPropertyDeclaration(declaration);
                     }
             }
@@ -56408,10 +57501,10 @@
             var parent = declaration.parent.parent;
             var name = declaration.propertyName || declaration.name;
             var parentType = getContextualTypeForVariableLikeDeclaration(parent) ||
-                parent.kind !== 199 && parent.initializer && checkDeclarationInitializer(parent);
+                parent.kind !== 201 && parent.initializer && checkDeclarationInitializer(parent);
             if (!parentType || ts.isBindingPattern(name) || ts.isComputedNonLiteralName(name))
                 return undefined;
-            if (parent.name.kind === 198) {
+            if (parent.name.kind === 200) {
                 var index = ts.indexOfNode(declaration.parent.elements, declaration);
                 if (index < 0)
                     return undefined;
@@ -56529,10 +57622,13 @@
             if (ts.isJsxOpeningLikeElement(callTarget) && argIndex === 0) {
                 return getEffectiveFirstArgumentForJsxSignature(signature, callTarget);
             }
-            return getTypeAtPosition(signature, argIndex);
+            var restIndex = signature.parameters.length - 1;
+            return signatureHasRestParameter(signature) && argIndex >= restIndex ?
+                getIndexedAccessType(getTypeOfSymbol(signature.parameters[restIndex]), getNumberLiteralType(argIndex - restIndex), 256) :
+                getTypeAtPosition(signature, argIndex);
         }
         function getContextualTypeForSubstitutionExpression(template, substitutionExpression) {
-            if (template.parent.kind === 206) {
+            if (template.parent.kind === 208) {
                 return getContextualTypeForArgument(template.parent, substitutionExpression);
             }
             return undefined;
@@ -56541,10 +57637,10 @@
             var binaryExpression = node.parent;
             var left = binaryExpression.left, operatorToken = binaryExpression.operatorToken, right = binaryExpression.right;
             switch (operatorToken.kind) {
-                case 62:
-                case 75:
-                case 74:
+                case 63:
                 case 76:
+                case 75:
+                case 77:
                     return node === right ? getContextualTypeForAssignmentDeclaration(binaryExpression) : undefined;
                 case 56:
                 case 60:
@@ -56558,13 +57654,39 @@
                     return undefined;
             }
         }
+        function getSymbolForExpression(e) {
+            if (e.symbol) {
+                return e.symbol;
+            }
+            if (ts.isIdentifier(e)) {
+                return getResolvedSymbol(e);
+            }
+            if (ts.isPropertyAccessExpression(e)) {
+                var lhsType = getTypeOfExpression(e.expression);
+                return ts.isPrivateIdentifier(e.name) ? tryGetPrivateIdentifierPropertyOfType(lhsType, e.name) : getPropertyOfType(lhsType, e.name.escapedText);
+            }
+            return undefined;
+            function tryGetPrivateIdentifierPropertyOfType(type, id) {
+                var lexicallyScopedSymbol = lookupSymbolForPrivateIdentifierDeclaration(id.escapedText, id);
+                return lexicallyScopedSymbol && getPrivateIdentifierPropertyOfType(type, lexicallyScopedSymbol);
+            }
+        }
         function getContextualTypeForAssignmentDeclaration(binaryExpression) {
             var _a, _b;
             var kind = ts.getAssignmentDeclarationKind(binaryExpression);
             switch (kind) {
                 case 0:
-                    return getTypeOfExpression(binaryExpression.left);
                 case 4:
+                    var lhsSymbol = getSymbolForExpression(binaryExpression.left);
+                    var decl = lhsSymbol && lhsSymbol.valueDeclaration;
+                    if (decl && (ts.isPropertyDeclaration(decl) || ts.isPropertySignature(decl))) {
+                        var overallAnnotation = ts.getEffectiveTypeAnnotationNode(decl);
+                        return (overallAnnotation && instantiateType(getTypeFromTypeNode(overallAnnotation), getSymbolLinks(lhsSymbol).mapper)) ||
+                            (decl.initializer && getTypeOfExpression(binaryExpression.left));
+                    }
+                    if (kind === 0) {
+                        return getTypeOfExpression(binaryExpression.left);
+                    }
                     return getContextualTypeForThisPropertyAssignment(binaryExpression);
                 case 5:
                     if (isPossiblyAliasedThisProperty(binaryExpression, kind)) {
@@ -56574,12 +57696,12 @@
                         return getTypeOfExpression(binaryExpression.left);
                     }
                     else {
-                        var decl = binaryExpression.left.symbol.valueDeclaration;
-                        if (!decl) {
+                        var decl_1 = binaryExpression.left.symbol.valueDeclaration;
+                        if (!decl_1) {
                             return undefined;
                         }
                         var lhs = ts.cast(binaryExpression.left, ts.isAccessExpression);
-                        var overallAnnotation = ts.getEffectiveTypeAnnotationNode(decl);
+                        var overallAnnotation = ts.getEffectiveTypeAnnotationNode(decl_1);
                         if (overallAnnotation) {
                             return getTypeFromTypeNode(overallAnnotation);
                         }
@@ -56597,7 +57719,7 @@
                                 return undefined;
                             }
                         }
-                        return ts.isInJSFile(decl) ? undefined : getTypeOfExpression(binaryExpression.left);
+                        return ts.isInJSFile(decl_1) ? undefined : getTypeOfExpression(binaryExpression.left);
                     }
                 case 1:
                 case 6:
@@ -56652,10 +57774,11 @@
         }
         function getTypeOfPropertyOfContextualType(type, name) {
             return mapType(type, function (t) {
+                var _a;
                 if (isGenericMappedType(t)) {
                     var constraint = getConstraintTypeFromMappedType(t);
                     var constraintOfConstraint = getBaseConstraintOfType(constraint) || constraint;
-                    var propertyNameType = getLiteralType(ts.unescapeLeadingUnderscores(name));
+                    var propertyNameType = getStringLiteralType(ts.unescapeLeadingUnderscores(name));
                     if (isTypeAssignableTo(propertyNameType, constraintOfConstraint)) {
                         return substituteIndexedMappedType(t, propertyNameType);
                     }
@@ -56671,15 +57794,11 @@
                             return restType;
                         }
                     }
-                    return isNumericLiteralName(name) && getIndexTypeOfContextualType(t, 1) ||
-                        getIndexTypeOfContextualType(t, 0);
+                    return (_a = findApplicableIndexInfo(getIndexInfosOfStructuredType(t), getStringLiteralType(ts.unescapeLeadingUnderscores(name)))) === null || _a === void 0 ? void 0 : _a.type;
                 }
                 return undefined;
             }, true);
         }
-        function getIndexTypeOfContextualType(type, kind) {
-            return mapType(type, function (t) { return getIndexTypeOfStructuredType(t, kind); }, true);
-        }
         function getContextualTypeForObjectLiteralMethod(node, contextFlags) {
             ts.Debug.assert(ts.isObjectLiteralMethod(node));
             if (node.flags & 16777216) {
@@ -56696,14 +57815,12 @@
             var type = getApparentTypeOfContextualType(objectLiteral, contextFlags);
             if (type) {
                 if (hasBindableName(element)) {
-                    var symbolName_3 = getSymbolOfNode(element).escapedName;
-                    var propertyType = getTypeOfPropertyOfContextualType(type, symbolName_3);
-                    if (propertyType) {
-                        return propertyType;
-                    }
+                    return getTypeOfPropertyOfContextualType(type, getSymbolOfNode(element).escapedName);
                 }
-                return isNumericName(element.name) && getIndexTypeOfContextualType(type, 1) ||
-                    getIndexTypeOfContextualType(type, 0);
+                if (element.name) {
+                    var nameType_1 = getLiteralTypeFromPropertyName(element.name);
+                    return mapType(type, function (t) { var _a; return (_a = findApplicableIndexInfo(getIndexInfosOfStructuredType(t), nameType_1)) === null || _a === void 0 ? void 0 : _a.type; }, true);
+                }
             }
             return undefined;
         }
@@ -56726,7 +57843,7 @@
             var childFieldType = getTypeOfPropertyOfContextualType(attributesType, jsxChildrenPropertyName);
             return childFieldType && (realChildren.length === 1 ? childFieldType : mapType(childFieldType, function (t) {
                 if (isArrayLikeType(t)) {
-                    return getIndexedAccessType(t, getLiteralType(childIndex));
+                    return getIndexedAccessType(t, getNumberLiteralType(childIndex));
                 }
                 else {
                     return t;
@@ -56759,25 +57876,25 @@
                 case 8:
                 case 9:
                 case 14:
-                case 109:
-                case 94:
-                case 103:
-                case 78:
-                case 150:
+                case 110:
+                case 95:
+                case 104:
+                case 79:
+                case 151:
                     return true;
-                case 202:
-                case 208:
+                case 204:
+                case 210:
                     return isPossiblyDiscriminantValue(node.expression);
-                case 284:
+                case 286:
                     return !node.expression || isPossiblyDiscriminantValue(node.expression);
             }
             return false;
         }
         function discriminateContextualTypeByObjectMembers(node, contextualType) {
-            return getMatchingUnionConstituentForObjectLiteral(contextualType, node) || discriminateTypeByDiscriminableItems(contextualType, ts.concatenate(ts.map(ts.filter(node.properties, function (p) { return !!p.symbol && p.kind === 289 && isPossiblyDiscriminantValue(p.initializer) && isDiscriminantProperty(contextualType, p.symbol.escapedName); }), function (prop) { return [function () { return getContextFreeTypeOfExpression(prop.initializer); }, prop.symbol.escapedName]; }), ts.map(ts.filter(getPropertiesOfType(contextualType), function (s) { var _a; return !!(s.flags & 16777216) && !!((_a = node === null || node === void 0 ? void 0 : node.symbol) === null || _a === void 0 ? void 0 : _a.members) && !node.symbol.members.has(s.escapedName) && isDiscriminantProperty(contextualType, s.escapedName); }), function (s) { return [function () { return undefinedType; }, s.escapedName]; })), isTypeAssignableTo, contextualType);
+            return getMatchingUnionConstituentForObjectLiteral(contextualType, node) || discriminateTypeByDiscriminableItems(contextualType, ts.concatenate(ts.map(ts.filter(node.properties, function (p) { return !!p.symbol && p.kind === 291 && isPossiblyDiscriminantValue(p.initializer) && isDiscriminantProperty(contextualType, p.symbol.escapedName); }), function (prop) { return [function () { return getContextFreeTypeOfExpression(prop.initializer); }, prop.symbol.escapedName]; }), ts.map(ts.filter(getPropertiesOfType(contextualType), function (s) { var _a; return !!(s.flags & 16777216) && !!((_a = node === null || node === void 0 ? void 0 : node.symbol) === null || _a === void 0 ? void 0 : _a.members) && !node.symbol.members.has(s.escapedName) && isDiscriminantProperty(contextualType, s.escapedName); }), function (s) { return [function () { return undefinedType; }, s.escapedName]; })), isTypeAssignableTo, contextualType);
         }
         function discriminateContextualTypeByJSXAttributes(node, contextualType) {
-            return discriminateTypeByDiscriminableItems(contextualType, ts.concatenate(ts.map(ts.filter(node.properties, function (p) { return !!p.symbol && p.kind === 281 && isDiscriminantProperty(contextualType, p.symbol.escapedName) && (!p.initializer || isPossiblyDiscriminantValue(p.initializer)); }), function (prop) { return [!prop.initializer ? (function () { return trueType; }) : (function () { return checkExpression(prop.initializer); }), prop.symbol.escapedName]; }), ts.map(ts.filter(getPropertiesOfType(contextualType), function (s) { var _a; return !!(s.flags & 16777216) && !!((_a = node === null || node === void 0 ? void 0 : node.symbol) === null || _a === void 0 ? void 0 : _a.members) && !node.symbol.members.has(s.escapedName) && isDiscriminantProperty(contextualType, s.escapedName); }), function (s) { return [function () { return undefinedType; }, s.escapedName]; })), isTypeAssignableTo, contextualType);
+            return discriminateTypeByDiscriminableItems(contextualType, ts.concatenate(ts.map(ts.filter(node.properties, function (p) { return !!p.symbol && p.kind === 283 && isDiscriminantProperty(contextualType, p.symbol.escapedName) && (!p.initializer || isPossiblyDiscriminantValue(p.initializer)); }), function (prop) { return [!prop.initializer ? (function () { return trueType; }) : (function () { return checkExpression(prop.initializer); }), prop.symbol.escapedName]; }), ts.map(ts.filter(getPropertiesOfType(contextualType), function (s) { var _a; return !!(s.flags & 16777216) && !!((_a = node === null || node === void 0 ? void 0 : node.symbol) === null || _a === void 0 ? void 0 : _a.members) && !node.symbol.members.has(s.escapedName) && isDiscriminantProperty(contextualType, s.escapedName); }), function (s) { return [function () { return undefinedType; }, s.escapedName]; })), isTypeAssignableTo, contextualType);
         }
         function getApparentTypeOfContextualType(node, contextFlags) {
             var contextualType = ts.isObjectLiteralMethod(node) ?
@@ -56826,58 +57943,58 @@
             }
             var parent = node.parent;
             switch (parent.kind) {
-                case 250:
-                case 161:
+                case 252:
+                case 162:
+                case 165:
                 case 164:
-                case 163:
-                case 199:
+                case 201:
                     return getContextualTypeForInitializerExpression(node, contextFlags);
-                case 210:
-                case 243:
+                case 212:
+                case 245:
                     return getContextualTypeForReturnExpression(node);
-                case 220:
+                case 222:
                     return getContextualTypeForYieldOperand(parent);
-                case 214:
+                case 216:
                     return getContextualTypeForAwaitOperand(parent, contextFlags);
-                case 204:
-                    if (parent.expression.kind === 99) {
+                case 206:
+                    if (parent.expression.kind === 100) {
                         return stringType;
                     }
-                case 205:
-                    return getContextualTypeForArgument(parent, node);
                 case 207:
-                case 225:
+                    return getContextualTypeForArgument(parent, node);
+                case 209:
+                case 227:
                     return ts.isConstTypeReference(parent.type) ? tryFindWhenConstTypeReference(parent) : getTypeFromTypeNode(parent.type);
-                case 217:
+                case 219:
                     return getContextualTypeForBinaryOperand(node, contextFlags);
-                case 289:
-                case 290:
-                    return getContextualTypeForObjectLiteralElement(parent, contextFlags);
                 case 291:
+                case 292:
+                    return getContextualTypeForObjectLiteralElement(parent, contextFlags);
+                case 293:
                     return getContextualType(parent.parent, contextFlags);
-                case 200: {
+                case 202: {
                     var arrayLiteral = parent;
                     var type = getApparentTypeOfContextualType(arrayLiteral, contextFlags);
                     return getContextualTypeForElementExpression(type, ts.indexOfNode(arrayLiteral.elements, node));
                 }
-                case 218:
+                case 220:
                     return getContextualTypeForConditionalOperand(node, contextFlags);
-                case 229:
-                    ts.Debug.assert(parent.parent.kind === 219);
+                case 231:
+                    ts.Debug.assert(parent.parent.kind === 221);
                     return getContextualTypeForSubstitutionExpression(parent.parent, node);
-                case 208: {
+                case 210: {
                     var tag = ts.isInJSFile(parent) ? ts.getJSDocTypeTag(parent) : undefined;
                     return tag ? getTypeFromTypeNode(tag.typeExpression.type) : getContextualType(parent, contextFlags);
                 }
-                case 226:
+                case 228:
                     return getContextualType(parent, contextFlags);
-                case 284:
+                case 286:
                     return getContextualTypeForJsxExpression(parent);
-                case 281:
                 case 283:
+                case 285:
                     return getContextualTypeForJsxAttribute(parent);
-                case 276:
-                case 275:
+                case 278:
+                case 277:
                     return getContextualJsxElementAttributesType(parent, contextFlags);
             }
             return undefined;
@@ -57094,7 +58211,7 @@
             return !hasEffectiveRestParameter(signature) && getParameterCount(signature) < targetParameterCount;
         }
         function isFunctionExpressionOrArrowFunction(node) {
-            return node.kind === 209 || node.kind === 210;
+            return node.kind === 211 || node.kind === 212;
         }
         function getContextualSignatureForFunctionLikeDeclaration(node) {
             return isFunctionExpressionOrArrowFunction(node) || ts.isObjectLiteralMethod(node)
@@ -57102,7 +58219,7 @@
                 : undefined;
         }
         function getContextualSignature(node) {
-            ts.Debug.assert(node.kind !== 166 || ts.isObjectLiteralMethod(node));
+            ts.Debug.assert(node.kind !== 167 || ts.isObjectLiteralMethod(node));
             var typeTagSignature = getSignatureOfTypeTag(node);
             if (typeTagSignature) {
                 return typeTagSignature;
@@ -57116,8 +58233,8 @@
             }
             var signatureList;
             var types = type.types;
-            for (var _i = 0, types_20 = types; _i < types_20.length; _i++) {
-                var current = types_20[_i];
+            for (var _i = 0, types_19 = types; _i < types_19.length; _i++) {
+                var current = types_19[_i];
                 var signature = getContextualCallSignature(current, node);
                 if (signature) {
                     if (!signatureList) {
@@ -57146,8 +58263,8 @@
             return node.isSpread ? getIndexedAccessType(node.type, numberType) : node.type;
         }
         function hasDefaultValue(node) {
-            return (node.kind === 199 && !!node.initializer) ||
-                (node.kind === 217 && node.operatorToken.kind === 62);
+            return (node.kind === 201 && !!node.initializer) ||
+                (node.kind === 219 && node.operatorToken.kind === 63);
         }
         function checkArrayLiteral(node, checkMode, forceTuple) {
             var elements = node.elements;
@@ -57157,9 +58274,10 @@
             var contextualType = getApparentTypeOfContextualType(node);
             var inDestructuringPattern = ts.isAssignmentTarget(node);
             var inConstContext = isConstContext(node);
+            var hasOmittedExpression = false;
             for (var i = 0; i < elementCount; i++) {
                 var e = elements[i];
-                if (e.kind === 221) {
+                if (e.kind === 223) {
                     if (languageVersion < 2) {
                         checkExternalEmitHelpers(e, compilerOptions.downlevelIteration ? 1536 : 1024);
                     }
@@ -57169,7 +58287,7 @@
                         elementFlags.push(8);
                     }
                     else if (inDestructuringPattern) {
-                        var restElementType = getIndexTypeOfType(spreadType, 1) ||
+                        var restElementType = getIndexTypeOfType(spreadType, numberType) ||
                             getIteratedTypeOrElementType(65, spreadType, undefinedType, undefined, false) ||
                             unknownType;
                         elementTypes.push(restElementType);
@@ -57180,11 +58298,16 @@
                         elementFlags.push(4);
                     }
                 }
+                else if (exactOptionalPropertyTypes && e.kind === 225) {
+                    hasOmittedExpression = true;
+                    elementTypes.push(missingType);
+                    elementFlags.push(2);
+                }
                 else {
                     var elementContextualType = getContextualTypeForElementExpression(contextualType, elementTypes.length);
                     var type = checkExpressionForMutableLocation(e, checkMode, elementContextualType, forceTuple);
-                    elementTypes.push(type);
-                    elementFlags.push(1);
+                    elementTypes.push(addOptionality(type, true, hasOmittedExpression));
+                    elementFlags.push(hasOmittedExpression ? 2 : 1);
                 }
             }
             if (inDestructuringPattern) {
@@ -57210,9 +58333,9 @@
         }
         function isNumericName(name) {
             switch (name.kind) {
-                case 159:
+                case 160:
                     return isNumericComputedName(name);
-                case 78:
+                case 79:
                     return isNumericLiteralName(name.escapedText);
                 case 8:
                 case 10:
@@ -57224,9 +58347,6 @@
         function isNumericComputedName(name) {
             return isTypeAssignableToKind(checkComputedPropertyName(name), 296);
         }
-        function isInfinityOrNaNString(name) {
-            return name === "Infinity" || name === "-Infinity" || name === "NaN";
-        }
         function isNumericLiteralName(name) {
             return (+name).toString() === name;
         }
@@ -57256,15 +58376,24 @@
             var firstDecl = (_a = symbol.declarations) === null || _a === void 0 ? void 0 : _a[0];
             return isNumericLiteralName(symbol.escapedName) || (firstDecl && ts.isNamedDeclaration(firstDecl) && isNumericName(firstDecl.name));
         }
-        function getObjectLiteralIndexInfo(node, offset, properties, kind) {
+        function isSymbolWithSymbolName(symbol) {
+            var _a;
+            var firstDecl = (_a = symbol.declarations) === null || _a === void 0 ? void 0 : _a[0];
+            return ts.isKnownSymbol(symbol) || (firstDecl && ts.isNamedDeclaration(firstDecl) && ts.isComputedPropertyName(firstDecl.name) &&
+                isTypeAssignableToKind(checkComputedPropertyName(firstDecl.name), 4096));
+        }
+        function getObjectLiteralIndexInfo(node, offset, properties, keyType) {
             var propTypes = [];
             for (var i = offset; i < properties.length; i++) {
-                if (kind === 0 || isSymbolWithNumericName(properties[i])) {
+                var prop = properties[i];
+                if (keyType === stringType && !isSymbolWithSymbolName(prop) ||
+                    keyType === numberType && isSymbolWithNumericName(prop) ||
+                    keyType === esSymbolType && isSymbolWithSymbolName(prop)) {
                     propTypes.push(getTypeOfSymbol(properties[i]));
                 }
             }
             var unionType = propTypes.length ? getUnionType(propTypes, 2) : undefinedType;
-            return createIndexInfo(unionType, isConstContext(node));
+            return createIndexInfo(keyType, unionType, isConstContext(node));
         }
         function getImmediateAliasedSymbol(symbol) {
             ts.Debug.assert((symbol.flags & 2097152) !== 0, "Should only get Alias here.");
@@ -57286,7 +58415,7 @@
             var spread = emptyObjectType;
             var contextualType = getApparentTypeOfContextualType(node);
             var contextualTypeHasPattern = contextualType && contextualType.pattern &&
-                (contextualType.pattern.kind === 197 || contextualType.pattern.kind === 201);
+                (contextualType.pattern.kind === 199 || contextualType.pattern.kind === 203);
             var inConstContext = isConstContext(node);
             var checkFlags = inConstContext ? 8 : 0;
             var isInJavascript = ts.isInJSFile(node) && !ts.isInJsonFile(node);
@@ -57296,6 +58425,7 @@
             var patternWithComputedProperties = false;
             var hasComputedStringProperty = false;
             var hasComputedNumberProperty = false;
+            var hasComputedSymbolProperty = false;
             for (var _i = 0, _a = node.properties; _i < _a.length; _i++) {
                 var elem = _a[_i];
                 if (elem.name && ts.isComputedPropertyName(elem.name)) {
@@ -57306,13 +58436,13 @@
             for (var _b = 0, _c = node.properties; _b < _c.length; _b++) {
                 var memberDecl = _c[_b];
                 var member = getSymbolOfNode(memberDecl);
-                var computedNameType = memberDecl.name && memberDecl.name.kind === 159 ?
+                var computedNameType = memberDecl.name && memberDecl.name.kind === 160 ?
                     checkComputedPropertyName(memberDecl.name) : undefined;
-                if (memberDecl.kind === 289 ||
-                    memberDecl.kind === 290 ||
+                if (memberDecl.kind === 291 ||
+                    memberDecl.kind === 292 ||
                     ts.isObjectLiteralMethod(memberDecl)) {
-                    var type = memberDecl.kind === 289 ? checkPropertyAssignment(memberDecl, checkMode) :
-                        memberDecl.kind === 290 ? checkExpressionForMutableLocation(!inDestructuringPattern && memberDecl.objectAssignmentInitializer ? memberDecl.objectAssignmentInitializer : memberDecl.name, checkMode) :
+                    var type = memberDecl.kind === 291 ? checkPropertyAssignment(memberDecl, checkMode) :
+                        memberDecl.kind === 292 ? checkExpressionForMutableLocation(!inDestructuringPattern && memberDecl.objectAssignmentInitializer ? memberDecl.objectAssignmentInitializer : memberDecl.name, checkMode) :
                             checkObjectLiteralMethod(memberDecl, checkMode);
                     if (isInJavascript) {
                         var jsDocType = getTypeForDeclarationFromJSDocComment(memberDecl);
@@ -57333,8 +58463,8 @@
                         prop.nameType = nameType;
                     }
                     if (inDestructuringPattern) {
-                        var isOptional = (memberDecl.kind === 289 && hasDefaultValue(memberDecl.initializer)) ||
-                            (memberDecl.kind === 290 && memberDecl.objectAssignmentInitializer);
+                        var isOptional = (memberDecl.kind === 291 && hasDefaultValue(memberDecl.initializer)) ||
+                            (memberDecl.kind === 292 && memberDecl.objectAssignmentInitializer);
                         if (isOptional) {
                             prop.flags |= 16777216;
                         }
@@ -57344,7 +58474,7 @@
                         if (impliedProp) {
                             prop.flags |= impliedProp.flags & 16777216;
                         }
-                        else if (!compilerOptions.suppressExcessPropertyErrors && !getIndexInfoOfType(contextualType, 0)) {
+                        else if (!compilerOptions.suppressExcessPropertyErrors && !getIndexInfoOfType(contextualType, stringType)) {
                             error(memberDecl.name, ts.Diagnostics.Object_literal_may_only_specify_known_properties_and_0_does_not_exist_in_type_1, symbolToString(member), typeToString(contextualType));
                         }
                     }
@@ -57358,7 +58488,7 @@
                     member = prop;
                     allPropertiesTable === null || allPropertiesTable === void 0 ? void 0 : allPropertiesTable.set(prop.escapedName, prop);
                 }
-                else if (memberDecl.kind === 291) {
+                else if (memberDecl.kind === 293) {
                     if (languageVersion < 2) {
                         checkExternalEmitHelpers(memberDecl, 2);
                     }
@@ -57368,17 +58498,19 @@
                         propertiesTable = ts.createSymbolTable();
                         hasComputedStringProperty = false;
                         hasComputedNumberProperty = false;
+                        hasComputedSymbolProperty = false;
                     }
                     var type = getReducedType(checkExpression(memberDecl.expression));
                     if (isValidSpreadType(type)) {
+                        var mergedType = tryMergeUnionOfObjectTypeAndEmptyObject(type, inConstContext);
                         if (allPropertiesTable) {
-                            checkSpreadPropOverrides(type, allPropertiesTable, memberDecl);
+                            checkSpreadPropOverrides(mergedType, allPropertiesTable, memberDecl);
                         }
                         offset = propertiesArray.length;
                         if (spread === errorType) {
                             continue;
                         }
-                        spread = getSpreadType(spread, type, node.symbol, objectFlags, inConstContext);
+                        spread = getSpreadType(spread, mergedType, node.symbol, objectFlags, inConstContext);
                     }
                     else {
                         error(memberDecl, ts.Diagnostics.Spread_types_may_only_be_created_from_object_types);
@@ -57387,7 +58519,7 @@
                     continue;
                 }
                 else {
-                    ts.Debug.assert(memberDecl.kind === 168 || memberDecl.kind === 169);
+                    ts.Debug.assert(memberDecl.kind === 170 || memberDecl.kind === 171);
                     checkNodeDeferred(memberDecl);
                 }
                 if (computedNameType && !(computedNameType.flags & 8576)) {
@@ -57395,6 +58527,9 @@
                         if (isTypeAssignableTo(computedNameType, numberType)) {
                             hasComputedNumberProperty = true;
                         }
+                        else if (isTypeAssignableTo(computedNameType, esSymbolType)) {
+                            hasComputedSymbolProperty = true;
+                        }
                         else {
                             hasComputedStringProperty = true;
                         }
@@ -57408,7 +58543,7 @@
                 }
                 propertiesArray.push(member);
             }
-            if (contextualTypeHasPattern && node.parent.kind !== 291) {
+            if (contextualTypeHasPattern && node.parent.kind !== 293) {
                 for (var _d = 0, _e = getPropertiesOfType(contextualType); _d < _e.length; _d++) {
                     var prop = _e[_d];
                     if (!propertiesTable.get(prop.escapedName) && !getPropertyOfType(spread, prop.escapedName)) {
@@ -57435,9 +58570,14 @@
             }
             return createObjectLiteralType();
             function createObjectLiteralType() {
-                var stringIndexInfo = hasComputedStringProperty ? getObjectLiteralIndexInfo(node, offset, propertiesArray, 0) : undefined;
-                var numberIndexInfo = hasComputedNumberProperty ? getObjectLiteralIndexInfo(node, offset, propertiesArray, 1) : undefined;
-                var result = createAnonymousType(node.symbol, propertiesTable, ts.emptyArray, ts.emptyArray, stringIndexInfo, numberIndexInfo);
+                var indexInfos = [];
+                if (hasComputedStringProperty)
+                    indexInfos.push(getObjectLiteralIndexInfo(node, offset, propertiesArray, stringType));
+                if (hasComputedNumberProperty)
+                    indexInfos.push(getObjectLiteralIndexInfo(node, offset, propertiesArray, numberType));
+                if (hasComputedSymbolProperty)
+                    indexInfos.push(getObjectLiteralIndexInfo(node, offset, propertiesArray, esSymbolType));
+                var result = createAnonymousType(node.symbol, propertiesTable, ts.emptyArray, ts.emptyArray, indexInfos);
                 result.objectFlags |= objectFlags | 128 | 262144;
                 if (isJSObjectLiteral) {
                     result.objectFlags |= 8192;
@@ -57495,11 +58635,11 @@
             checkJsxChildren(node);
             return getJsxElementTypeAt(node) || anyType;
         }
-        function isUnhyphenatedJsxName(name) {
-            return !ts.stringContains(name, "-");
+        function isHyphenatedJsxName(name) {
+            return ts.stringContains(name, "-");
         }
         function isJsxIntrinsicIdentifier(tagName) {
-            return tagName.kind === 78 && ts.isIntrinsicJsxName(tagName.escapedText);
+            return tagName.kind === 79 && ts.isIntrinsicJsxName(tagName.escapedText);
         }
         function checkJsxAttribute(node, checkMode) {
             return node.initializer
@@ -57537,7 +58677,7 @@
                     }
                 }
                 else {
-                    ts.Debug.assert(attributeDecl.kind === 283);
+                    ts.Debug.assert(attributeDecl.kind === 285);
                     if (attributesTable.size > 0) {
                         spread = getSpreadType(spread, createJsxAttributesType(), attributes.symbol, objectFlags, false);
                         attributesTable = ts.createSymbolTable();
@@ -57562,7 +58702,7 @@
                     spread = getSpreadType(spread, createJsxAttributesType(), attributes.symbol, objectFlags, false);
                 }
             }
-            var parent = openingLikeElement.parent.kind === 274 ? openingLikeElement.parent : undefined;
+            var parent = openingLikeElement.parent.kind === 276 ? openingLikeElement.parent : undefined;
             if (parent && parent.openingElement === openingLikeElement && parent.children.length > 0) {
                 var childrenTypes = checkJsxChildren(parent, checkMode);
                 if (!hasSpreadAnyType && jsxChildrenPropertyName && jsxChildrenPropertyName !== "") {
@@ -57580,7 +58720,7 @@
                     childrenPropSymbol.valueDeclaration.symbol = childrenPropSymbol;
                     var childPropMap = ts.createSymbolTable();
                     childPropMap.set(jsxChildrenPropertyName, childrenPropSymbol);
-                    spread = getSpreadType(spread, createAnonymousType(attributes.symbol, childPropMap, ts.emptyArray, ts.emptyArray, undefined, undefined), attributes.symbol, objectFlags, false);
+                    spread = getSpreadType(spread, createAnonymousType(attributes.symbol, childPropMap, ts.emptyArray, ts.emptyArray, ts.emptyArray), attributes.symbol, objectFlags, false);
                 }
             }
             if (hasSpreadAnyType) {
@@ -57592,7 +58732,7 @@
             return typeToIntersect || (spread === emptyJsxObjectType ? createJsxAttributesType() : spread);
             function createJsxAttributesType() {
                 objectFlags |= freshObjectLiteralFlag;
-                var result = createAnonymousType(attributes.symbol, attributesTable, ts.emptyArray, ts.emptyArray, undefined, undefined);
+                var result = createAnonymousType(attributes.symbol, attributesTable, ts.emptyArray, ts.emptyArray, ts.emptyArray);
                 result.objectFlags |= objectFlags | 128 | 262144;
                 return result;
             }
@@ -57606,7 +58746,7 @@
                         childrenTypes.push(stringType);
                     }
                 }
-                else if (child.kind === 284 && !child.expression) {
+                else if (child.kind === 286 && !child.expression) {
                     continue;
                 }
                 else {
@@ -57618,11 +58758,12 @@
         function checkSpreadPropOverrides(type, props, spread) {
             for (var _i = 0, _a = getPropertiesOfType(type); _i < _a.length; _i++) {
                 var right = _a[_i];
-                var left = props.get(right.escapedName);
-                var rightType = getTypeOfSymbol(right);
-                if (left && !maybeTypeOfKind(rightType, 98304) && !(maybeTypeOfKind(rightType, 3) && right.flags & 16777216)) {
-                    var diagnostic = error(left.valueDeclaration, ts.Diagnostics._0_is_specified_more_than_once_so_this_usage_will_be_overwritten, ts.unescapeLeadingUnderscores(left.escapedName));
-                    ts.addRelatedInfo(diagnostic, ts.createDiagnosticForNode(spread, ts.Diagnostics.This_spread_always_overwrites_this_property));
+                if (!(right.flags & 16777216)) {
+                    var left = props.get(right.escapedName);
+                    if (left) {
+                        var diagnostic = error(left.valueDeclaration, ts.Diagnostics._0_is_specified_more_than_once_so_this_usage_will_be_overwritten, ts.unescapeLeadingUnderscores(left.escapedName));
+                        ts.addRelatedInfo(diagnostic, ts.createDiagnosticForNode(spread, ts.Diagnostics.This_spread_always_overwrites_this_property));
+                    }
                 }
             }
         }
@@ -57647,7 +58788,7 @@
                         links.jsxFlags |= 1;
                         return links.resolvedSymbol = intrinsicProp;
                     }
-                    var indexSignatureType = getIndexTypeOfType(intrinsicElementsType, 0);
+                    var indexSignatureType = getIndexTypeOfType(intrinsicElementsType, stringType);
                     if (indexSignatureType) {
                         links.jsxFlags |= 2;
                         return links.resolvedSymbol = intrinsicElementsType.symbol;
@@ -57777,7 +58918,7 @@
                 if (intrinsicProp) {
                     return getTypeOfSymbol(intrinsicProp);
                 }
-                var indexSignatureType = getIndexTypeOfType(intrinsicElementsType, 0);
+                var indexSignatureType = getIndexTypeOfType(intrinsicElementsType, stringType);
                 if (indexSignatureType) {
                     return indexSignatureType;
                 }
@@ -57822,7 +58963,7 @@
                 }
                 else if (links.jsxFlags & 2) {
                     return links.resolvedJsxElementAttributesType =
-                        getIndexTypeOfType(getJsxType(JsxNames.IntrinsicElements, node), 0) || errorType;
+                        getIndexTypeOfType(getJsxType(JsxNames.IntrinsicElements, node), stringType) || errorType;
                 }
                 else {
                     return links.resolvedJsxElementAttributesType = errorType;
@@ -57889,11 +59030,10 @@
         }
         function isKnownProperty(targetType, name, isComparingJsxAttributes) {
             if (targetType.flags & 524288) {
-                var resolved = resolveStructuredTypeMembers(targetType);
-                if (resolved.stringIndexInfo ||
-                    resolved.numberIndexInfo && isNumericLiteralName(name) ||
-                    getPropertyOfObjectType(targetType, name) ||
-                    isComparingJsxAttributes && !isUnhyphenatedJsxName(name)) {
+                if (getPropertyOfObjectType(targetType, name) ||
+                    getApplicableIndexInfoForName(targetType, name) ||
+                    isLateBoundName(name) && getIndexInfoOfType(targetType, stringType) ||
+                    isComparingJsxAttributes && isHyphenatedJsxName(name)) {
                     return true;
                 }
             }
@@ -57942,9 +59082,9 @@
         function checkPropertyAccessibility(node, isSuper, writing, type, prop, reportError) {
             if (reportError === void 0) { reportError = true; }
             var flags = ts.getDeclarationModifierFlagsFromSymbol(prop, writing);
-            var errorNode = node.kind === 158 ? node.right :
-                node.kind === 196 ? node :
-                    node.kind === 199 && node.propertyName ? node.propertyName : node.name;
+            var errorNode = node.kind === 159 ? node.right :
+                node.kind === 198 ? node :
+                    node.kind === 201 && node.propertyName ? node.propertyName : node.name;
             if (isSuper) {
                 if (languageVersion < 2) {
                     if (symbolHasNonMethodDeclaration(prop)) {
@@ -58077,10 +59217,11 @@
             return propagateOptionalTypeMarker(checkPropertyAccessExpressionOrQualifiedName(node, node.expression, checkNonNullType(nonOptionalType, node.expression), node.name, checkMode), node, nonOptionalType !== leftType);
         }
         function checkQualifiedName(node, checkMode) {
-            return checkPropertyAccessExpressionOrQualifiedName(node, node.left, checkNonNullExpression(node.left), node.right, checkMode);
+            var leftType = ts.isPartOfTypeQuery(node) && ts.isThisIdentifier(node.left) ? checkNonNullType(checkThisExpression(node.left), node.left) : checkNonNullExpression(node.left);
+            return checkPropertyAccessExpressionOrQualifiedName(node, node.left, leftType, node.right, checkMode);
         }
         function isMethodAccessForCall(node) {
-            while (node.parent.kind === 208) {
+            while (node.parent.kind === 210) {
                 node = node.parent;
             }
             return ts.isCallOrNewExpression(node.parent) && node.parent.expression === node;
@@ -58203,9 +59344,11 @@
             }
             var propType;
             if (!prop) {
-                var indexInfo = !ts.isPrivateIdentifier(right) && (assignmentKind === 0 || !isGenericObjectType(leftType) || isThisTypeParameter(leftType)) ? getIndexInfoOfType(apparentType, 0) : undefined;
+                var indexInfo = !ts.isPrivateIdentifier(right) && (assignmentKind === 0 || !isGenericObjectType(leftType) || isThisTypeParameter(leftType)) ?
+                    getApplicableIndexInfoForName(apparentType, right.escapedText) : undefined;
                 if (!(indexInfo && indexInfo.type)) {
-                    if (isJSLiteralType(leftType)) {
+                    var isUncheckedJS = isUncheckedJSSuggestion(node, leftType.symbol, true);
+                    if (!isUncheckedJS && isJSLiteralType(leftType)) {
                         return anyType;
                     }
                     if (leftType.symbol === globalThisSymbol) {
@@ -58218,7 +59361,7 @@
                         return anyType;
                     }
                     if (right.escapedText && !checkAndReportErrorForExtendingInterface(node)) {
-                        reportNonexistentProperty(right, isThisTypeParameter(leftType) ? apparentType : leftType);
+                        reportNonexistentProperty(right, isThisTypeParameter(leftType) ? apparentType : leftType, isUncheckedJS);
                     }
                     return errorType;
                 }
@@ -58238,7 +59381,7 @@
                 markPropertyAsReferenced(prop, node, isSelfTypeAccess(left, parentSymbol));
                 getNodeLinks(node).resolvedSymbol = prop;
                 var writing = ts.isWriteAccess(node);
-                checkPropertyAccessibility(node, left.kind === 105, writing, apparentType, prop);
+                checkPropertyAccessibility(node, left.kind === 106, writing, apparentType, prop);
                 if (isAssignmentToReadonlyEntity(node, prop, assignmentKind)) {
                     error(right, ts.Diagnostics.Cannot_assign_to_0_because_it_is_a_read_only_property, ts.idText(right));
                     return errorType;
@@ -58247,13 +59390,27 @@
             }
             return getFlowTypeOfAccessExpression(node, prop, propType, right, checkMode);
         }
+        function isUncheckedJSSuggestion(node, suggestion, excludeClasses) {
+            var file = ts.getSourceFileOfNode(node);
+            if (file) {
+                if (compilerOptions.checkJs === undefined && file.checkJsDirective === undefined && (file.scriptKind === 1 || file.scriptKind === 2)) {
+                    var declarationFile = ts.forEach(suggestion === null || suggestion === void 0 ? void 0 : suggestion.declarations, ts.getSourceFileOfNode);
+                    return !(file !== declarationFile && !!declarationFile && isGlobalSourceFile(declarationFile))
+                        && !(excludeClasses && suggestion && suggestion.flags & 32)
+                        && !(!!node && excludeClasses && ts.isPropertyAccessExpression(node) && node.expression.kind === 108);
+                }
+            }
+            return false;
+        }
         function getFlowTypeOfAccessExpression(node, prop, propType, errorNode, checkMode) {
             var assignmentKind = ts.getAssignmentTargetKind(node);
-            if (assignmentKind === 1 ||
-                prop &&
-                    !(prop.flags & (3 | 4 | 98304))
-                    && !(prop.flags & 8192 && propType.flags & 1048576)
-                    && !isDuplicatedCommonJSExport(prop.declarations)) {
+            if (assignmentKind === 1) {
+                return removeMissingType(propType, !!(prop && prop.flags & 16777216));
+            }
+            if (prop &&
+                !(prop.flags & (3 | 4 | 98304))
+                && !(prop.flags & 8192 && propType.flags & 1048576)
+                && !isDuplicatedCommonJSExport(prop.declarations)) {
                 return propType;
             }
             if (propType === autoType) {
@@ -58261,12 +59418,14 @@
             }
             propType = getNarrowableTypeForReference(propType, node, checkMode);
             var assumeUninitialized = false;
-            if (strictNullChecks && strictPropertyInitialization && ts.isAccessExpression(node) && node.expression.kind === 107) {
+            if (strictNullChecks && strictPropertyInitialization && ts.isAccessExpression(node) && node.expression.kind === 108) {
                 var declaration = prop && prop.valueDeclaration;
-                if (declaration && isInstancePropertyWithoutInitializer(declaration)) {
-                    var flowContainer = getControlFlowContainer(node);
-                    if (flowContainer.kind === 167 && flowContainer.parent === declaration.parent && !(declaration.flags & 8388608)) {
-                        assumeUninitialized = true;
+                if (declaration && isPropertyWithoutInitializer(declaration)) {
+                    if (!ts.isStatic(declaration)) {
+                        var flowContainer = getControlFlowContainer(node);
+                        if (flowContainer.kind === 169 && flowContainer.parent === declaration.parent && !(declaration.flags & 8388608)) {
+                            assumeUninitialized = true;
+                        }
                     }
                 }
             }
@@ -58290,15 +59449,15 @@
             }
             var diagnosticMessage;
             var declarationName = ts.idText(right);
-            if (isInPropertyInitializer(node)
+            if (isInPropertyInitializerOrClassStaticBlock(node)
                 && !isOptionalPropertyDeclaration(valueDeclaration)
                 && !(ts.isAccessExpression(node) && ts.isAccessExpression(node.expression))
                 && !isBlockScopedNameDeclaredBeforeUse(valueDeclaration, right)
                 && (compilerOptions.useDefineForClassFields || !isPropertyDeclaredInAncestorClass(prop))) {
                 diagnosticMessage = error(right, ts.Diagnostics.Property_0_is_used_before_its_initialization, declarationName);
             }
-            else if (valueDeclaration.kind === 253 &&
-                node.parent.kind !== 174 &&
+            else if (valueDeclaration.kind === 255 &&
+                node.parent.kind !== 176 &&
                 !(valueDeclaration.flags & 8388608) &&
                 !isBlockScopedNameDeclaredBeforeUse(valueDeclaration, right)) {
                 diagnosticMessage = error(right, ts.Diagnostics.Class_0_used_before_its_declaration, declarationName);
@@ -58307,26 +59466,29 @@
                 ts.addRelatedInfo(diagnosticMessage, ts.createDiagnosticForNode(valueDeclaration, ts.Diagnostics._0_is_declared_here, declarationName));
             }
         }
-        function isInPropertyInitializer(node) {
+        function isInPropertyInitializerOrClassStaticBlock(node) {
             return !!ts.findAncestor(node, function (node) {
                 switch (node.kind) {
-                    case 164:
+                    case 165:
                         return true;
-                    case 289:
-                    case 166:
-                    case 168:
-                    case 169:
                     case 291:
-                    case 159:
-                    case 229:
-                    case 284:
-                    case 281:
-                    case 282:
+                    case 167:
+                    case 170:
+                    case 171:
+                    case 293:
+                    case 160:
+                    case 231:
+                    case 286:
                     case 283:
-                    case 276:
-                    case 224:
-                    case 287:
+                    case 284:
+                    case 285:
+                    case 278:
+                    case 226:
+                    case 289:
                         return false;
+                    case 212:
+                    case 236:
+                        return ts.isBlock(node.parent) && ts.isClassStaticBlockDeclaration(node.parent.parent) ? true : "quit";
                     default:
                         return ts.isExpressionNode(node) ? false : "quit";
                 }
@@ -58355,13 +59517,13 @@
             }
             return getIntersectionType(x);
         }
-        function reportNonexistentProperty(propNode, containingType) {
+        function reportNonexistentProperty(propNode, containingType, isUncheckedJS) {
             var errorInfo;
             var relatedInfo;
             if (!ts.isPrivateIdentifier(propNode) && containingType.flags & 1048576 && !(containingType.flags & 131068)) {
                 for (var _i = 0, _a = containingType.types; _i < _a.length; _i++) {
                     var subtype = _a[_i];
-                    if (!getPropertyOfType(subtype, propNode.escapedText) && !getIndexInfoOfType(subtype, 0)) {
+                    if (!getPropertyOfType(subtype, propNode.escapedText) && !getApplicableIndexInfoForName(subtype, propNode.escapedText)) {
                         errorInfo = ts.chainDiagnosticMessages(errorInfo, ts.Diagnostics.Property_0_does_not_exist_on_type_1, ts.declarationNameToString(propNode), typeToString(subtype));
                         break;
                     }
@@ -58389,7 +59551,8 @@
                         var suggestion = getSuggestedSymbolForNonexistentProperty(propNode, containingType);
                         if (suggestion !== undefined) {
                             var suggestedName = ts.symbolName(suggestion);
-                            errorInfo = ts.chainDiagnosticMessages(errorInfo, ts.Diagnostics.Property_0_does_not_exist_on_type_1_Did_you_mean_2, missingProperty, container, suggestedName);
+                            var message = isUncheckedJS ? ts.Diagnostics.Property_0_may_not_exist_on_type_1_Did_you_mean_2 : ts.Diagnostics.Property_0_does_not_exist_on_type_1_Did_you_mean_2;
+                            errorInfo = ts.chainDiagnosticMessages(errorInfo, message, missingProperty, container, suggestedName);
                             relatedInfo = suggestion.valueDeclaration && ts.createDiagnosticForNode(suggestion.valueDeclaration, ts.Diagnostics._0_is_declared_here, suggestedName);
                         }
                         else {
@@ -58405,7 +59568,7 @@
             if (relatedInfo) {
                 ts.addRelatedInfo(resultDiagnostic, relatedInfo);
             }
-            diagnostics.add(resultDiagnostic);
+            addErrorOrSuggestion(!isUncheckedJS, resultDiagnostic);
         }
         function containerSeemsToBeEmptyDomElement(containingType) {
             return (compilerOptions.lib && !compilerOptions.lib.includes("dom")) &&
@@ -58414,7 +59577,7 @@
         }
         function typeHasStaticProperty(propName, containingType) {
             var prop = containingType.symbol && getPropertyOfType(getTypeOfSymbol(containingType.symbol), propName);
-            return prop !== undefined && !!prop.valueDeclaration && ts.hasSyntacticModifier(prop.valueDeclaration, 32);
+            return prop !== undefined && !!prop.valueDeclaration && ts.isStatic(prop.valueDeclaration);
         }
         function getSuggestedLibForNonExistentName(name) {
             var missingName = diagnosticName(name);
@@ -58444,6 +59607,9 @@
                 }
             }
         }
+        function getSuggestedSymbolForNonexistentClassMember(name, baseType) {
+            return getSpellingSuggestionForName(name, getPropertiesOfType(baseType), 106500);
+        }
         function getSuggestedSymbolForNonexistentProperty(name, containingType) {
             var props = getPropertiesOfType(containingType);
             if (typeof name !== "string") {
@@ -58551,21 +59717,21 @@
             (ts.getCheckFlags(prop) & 1 ? getSymbolLinks(prop).target : prop).isReferenced = 67108863;
         }
         function isSelfTypeAccess(name, parent) {
-            return name.kind === 107
+            return name.kind === 108
                 || !!parent && ts.isEntityNameExpression(name) && parent === getResolvedSymbol(ts.getFirstIdentifier(name));
         }
         function isValidPropertyAccess(node, propertyName) {
             switch (node.kind) {
-                case 202:
-                    return isValidPropertyAccessWithType(node, node.expression.kind === 105, propertyName, getWidenedType(checkExpression(node.expression)));
-                case 158:
+                case 204:
+                    return isValidPropertyAccessWithType(node, node.expression.kind === 106, propertyName, getWidenedType(checkExpression(node.expression)));
+                case 159:
                     return isValidPropertyAccessWithType(node, false, propertyName, getWidenedType(checkExpression(node.left)));
-                case 196:
+                case 198:
                     return isValidPropertyAccessWithType(node, false, propertyName, getTypeFromTypeNode(node));
             }
         }
         function isValidPropertyAccessForCompletions(node, type, property) {
-            return isValidPropertyAccessWithType(node, node.kind === 202 && node.expression.kind === 105, property.escapedName, type);
+            return isValidPropertyAccessWithType(node, node.kind === 204 && node.expression.kind === 106, property.escapedName, type);
         }
         function isValidPropertyAccessWithType(node, isSuper, propertyName, type) {
             if (type === errorType || isTypeAny(type)) {
@@ -58583,29 +59749,29 @@
         }
         function getForInVariableSymbol(node) {
             var initializer = node.initializer;
-            if (initializer.kind === 251) {
+            if (initializer.kind === 253) {
                 var variable = initializer.declarations[0];
                 if (variable && !ts.isBindingPattern(variable.name)) {
                     return getSymbolOfNode(variable);
                 }
             }
-            else if (initializer.kind === 78) {
+            else if (initializer.kind === 79) {
                 return getResolvedSymbol(initializer);
             }
             return undefined;
         }
         function hasNumericPropertyNames(type) {
-            return getIndexTypeOfType(type, 1) && !getIndexTypeOfType(type, 0);
+            return getIndexInfosOfType(type).length === 1 && !!getIndexInfoOfType(type, numberType);
         }
         function isForInVariableForNumericPropertyNames(expr) {
             var e = ts.skipParentheses(expr);
-            if (e.kind === 78) {
+            if (e.kind === 79) {
                 var symbol = getResolvedSymbol(e);
                 if (symbol.flags & 3) {
                     var child = expr;
                     var node = expr.parent;
                     while (node) {
-                        if (node.kind === 239 &&
+                        if (node.kind === 241 &&
                             child === node.statement &&
                             getForInVariableSymbol(node) === symbol &&
                             hasNumericPropertyNames(getTypeOfExpression(node.expression))) {
@@ -58640,9 +59806,9 @@
             }
             var effectiveIndexType = isForInVariableForNumericPropertyNames(indexExpression) ? numberType : indexType;
             var accessFlags = ts.isAssignmentTarget(node) ?
-                2 | (isGenericObjectType(objectType) && !isThisTypeParameter(objectType) ? 1 : 0) :
-                0;
-            var indexedAccessType = getIndexedAccessTypeOrUndefined(objectType, effectiveIndexType, undefined, node, accessFlags | 16) || errorType;
+                4 | (isGenericObjectType(objectType) && !isThisTypeParameter(objectType) ? 2 : 0) :
+                32;
+            var indexedAccessType = getIndexedAccessTypeOrUndefined(objectType, effectiveIndexType, accessFlags, node) || errorType;
             return checkIndexedAccessIndexType(getFlowTypeOfAccessExpression(node, getNodeLinks(node).resolvedSymbol, indexedAccessType, indexExpression, checkMode), node);
         }
         function callLikeExpressionMayHaveTypeArguments(node) {
@@ -58652,13 +59818,13 @@
             if (callLikeExpressionMayHaveTypeArguments(node)) {
                 ts.forEach(node.typeArguments, checkSourceElement);
             }
-            if (node.kind === 206) {
+            if (node.kind === 208) {
                 checkExpression(node.template);
             }
             else if (ts.isJsxOpeningLikeElement(node)) {
                 checkExpression(node.attributes);
             }
-            else if (node.kind !== 162) {
+            else if (node.kind !== 163) {
                 ts.forEach(node.arguments, function (argument) {
                     checkExpression(argument);
                 });
@@ -58707,7 +59873,7 @@
             }
         }
         function isSpreadArgument(arg) {
-            return !!arg && (arg.kind === 221 || arg.kind === 228 && arg.isSpread);
+            return !!arg && (arg.kind === 223 || arg.kind === 230 && arg.isSpread);
         }
         function getSpreadArgumentIndex(args) {
             return ts.findIndex(args, isSpreadArgument);
@@ -58724,9 +59890,9 @@
             var callIsIncomplete = false;
             var effectiveParameterCount = getParameterCount(signature);
             var effectiveMinimumArguments = getMinArgumentCount(signature);
-            if (node.kind === 206) {
+            if (node.kind === 208) {
                 argCount = args.length;
-                if (node.template.kind === 219) {
+                if (node.template.kind === 221) {
                     var lastSpan = ts.last(node.template.templateSpans);
                     callIsIncomplete = ts.nodeIsMissing(lastSpan.literal) || !!lastSpan.literal.isUnterminated;
                 }
@@ -58736,7 +59902,7 @@
                     callIsIncomplete = !!templateLiteral.isUnterminated;
                 }
             }
-            else if (node.kind === 162) {
+            else if (node.kind === 163) {
                 argCount = getDecoratorArgumentCount(node, signature);
             }
             else if (ts.isJsxOpeningLikeElement(node)) {
@@ -58749,7 +59915,7 @@
                 effectiveMinimumArguments = Math.min(effectiveMinimumArguments, 1);
             }
             else if (!node.arguments) {
-                ts.Debug.assert(node.kind === 205);
+                ts.Debug.assert(node.kind === 207);
                 return getMinArgumentCount(signature) === 0;
             }
             else {
@@ -58790,7 +59956,7 @@
         function getSingleSignature(type, kind, allowMembers) {
             if (type.flags & 524288) {
                 var resolved = resolveStructuredTypeMembers(type);
-                if (allowMembers || resolved.properties.length === 0 && !resolved.stringIndexInfo && !resolved.numberIndexInfo) {
+                if (allowMembers || resolved.properties.length === 0 && resolved.indexInfos.length === 0) {
                     if (kind === 0 && resolved.callSignatures.length === 1 && resolved.constructSignatures.length === 0) {
                         return resolved.callSignatures[0];
                     }
@@ -58835,7 +60001,7 @@
             if (ts.isJsxOpeningLikeElement(node)) {
                 return inferJsxTypeArguments(node, signature, checkMode, context);
             }
-            if (node.kind !== 162) {
+            if (node.kind !== 163) {
                 var contextualType = getContextualType(node, ts.every(signature.typeParameters, function (p) { return !!getDefaultFromTypeParameter(p); }) ? 8 : 0);
                 if (contextualType) {
                     var outerContext = getInferenceContext(node);
@@ -58868,7 +60034,7 @@
             }
             for (var i = 0; i < argCount; i++) {
                 var arg = args[i];
-                if (arg.kind !== 223) {
+                if (arg.kind !== 225) {
                     var paramType = getTypeAtPosition(signature, i);
                     var argType = checkExpressionWithContextualType(arg, paramType, context, checkMode);
                     inferTypes(context.inferences, argType, paramType);
@@ -58890,7 +60056,7 @@
             if (index >= argCount - 1) {
                 var arg = args[argCount - 1];
                 if (isSpreadArgument(arg)) {
-                    return getMutableArrayOrTupleType(arg.kind === 228 ? arg.type :
+                    return getMutableArrayOrTupleType(arg.kind === 230 ? arg.type :
                         checkExpressionWithContextualType(arg.expression, restType, context, checkMode));
                 }
             }
@@ -58900,24 +60066,24 @@
             for (var i = index; i < argCount; i++) {
                 var arg = args[i];
                 if (isSpreadArgument(arg)) {
-                    var spreadType = arg.kind === 228 ? arg.type : checkExpression(arg.expression);
+                    var spreadType = arg.kind === 230 ? arg.type : checkExpression(arg.expression);
                     if (isArrayLikeType(spreadType)) {
                         types.push(spreadType);
                         flags.push(8);
                     }
                     else {
-                        types.push(checkIteratedTypeOrElementType(33, spreadType, undefinedType, arg.kind === 221 ? arg.expression : arg));
+                        types.push(checkIteratedTypeOrElementType(33, spreadType, undefinedType, arg.kind === 223 ? arg.expression : arg));
                         flags.push(4);
                     }
                 }
                 else {
-                    var contextualType = getIndexedAccessType(restType, getLiteralType(i - index));
+                    var contextualType = getIndexedAccessType(restType, getNumberLiteralType(i - index), 256);
                     var argType = checkExpressionWithContextualType(arg, contextualType, context, checkMode);
                     var hasPrimitiveContextualType = maybeTypeOfKind(contextualType, 131068 | 4194304 | 134217728 | 268435456);
                     types.push(hasPrimitiveContextualType ? getRegularTypeOfLiteralType(argType) : getWidenedLiteralType(argType));
                     flags.push(1);
                 }
-                if (arg.kind === 228 && arg.tupleNameSource) {
+                if (arg.kind === 230 && arg.tupleNameSource) {
                     names.push(arg.tupleNameSource);
                 }
             }
@@ -59048,7 +60214,7 @@
                 return undefined;
             }
             var thisType = getThisTypeOfSignature(signature);
-            if (thisType && thisType !== voidType && node.kind !== 205) {
+            if (thisType && thisType !== voidType && node.kind !== 207) {
                 var thisArgumentNode = getThisArgumentOfCall(node);
                 var thisArgumentType = getThisArgumentType(thisArgumentNode);
                 var errorNode = reportErrors ? (thisArgumentNode || node) : undefined;
@@ -59063,7 +60229,7 @@
             var argCount = restType ? Math.min(getParameterCount(signature) - 1, args.length) : args.length;
             for (var i = 0; i < argCount; i++) {
                 var arg = args[i];
-                if (arg.kind !== 223) {
+                if (arg.kind !== 225) {
                     var paramType = getTypeAtPosition(signature, i);
                     var argType = checkExpressionWithContextualType(arg, paramType, undefined, checkMode);
                     var checkArgType = checkMode & 4 ? getRegularTypeOfObjectLiteral(argType) : argType;
@@ -59101,8 +60267,10 @@
             }
         }
         function getThisArgumentOfCall(node) {
-            if (node.kind === 204) {
-                var callee = ts.skipOuterExpressions(node.expression);
+            var expression = node.kind === 206 ? node.expression :
+                node.kind === 208 ? node.tag : undefined;
+            if (expression) {
+                var callee = ts.skipOuterExpressions(expression);
                 if (ts.isAccessExpression(callee)) {
                     return callee.expression;
                 }
@@ -59115,17 +60283,17 @@
             return result;
         }
         function getEffectiveCallArguments(node) {
-            if (node.kind === 206) {
+            if (node.kind === 208) {
                 var template = node.template;
                 var args_3 = [createSyntheticExpression(template, getGlobalTemplateStringsArrayType())];
-                if (template.kind === 219) {
+                if (template.kind === 221) {
                     ts.forEach(template.templateSpans, function (span) {
                         args_3.push(span.expression);
                     });
                 }
                 return args_3;
             }
-            if (node.kind === 162) {
+            if (node.kind === 163) {
                 return getEffectiveDecoratorArguments(node);
             }
             if (ts.isJsxOpeningLikeElement(node)) {
@@ -59135,9 +60303,9 @@
             var spreadIndex = getSpreadArgumentIndex(args);
             if (spreadIndex >= 0) {
                 var effectiveArgs_1 = args.slice(0, spreadIndex);
-                var _loop_21 = function (i) {
+                var _loop_23 = function (i) {
                     var arg = args[i];
-                    var spreadType = arg.kind === 221 && (flowLoopCount ? checkExpression(arg.expression) : checkExpressionCached(arg.expression));
+                    var spreadType = arg.kind === 223 && (flowLoopCount ? checkExpression(arg.expression) : checkExpressionCached(arg.expression));
                     if (spreadType && isTupleType(spreadType)) {
                         ts.forEach(getTypeArguments(spreadType), function (t, i) {
                             var _a;
@@ -59151,7 +60319,7 @@
                     }
                 };
                 for (var i = spreadIndex; i < args.length; i++) {
-                    _loop_21(i);
+                    _loop_23(i);
                 }
                 return effectiveArgs_1;
             }
@@ -59161,23 +60329,23 @@
             var parent = node.parent;
             var expr = node.expression;
             switch (parent.kind) {
-                case 253:
-                case 222:
+                case 255:
+                case 224:
                     return [
                         createSyntheticExpression(expr, getTypeOfSymbol(getSymbolOfNode(parent)))
                     ];
-                case 161:
+                case 162:
                     var func = parent.parent;
                     return [
-                        createSyntheticExpression(expr, parent.parent.kind === 167 ? getTypeOfSymbol(getSymbolOfNode(func)) : errorType),
+                        createSyntheticExpression(expr, parent.parent.kind === 169 ? getTypeOfSymbol(getSymbolOfNode(func)) : errorType),
                         createSyntheticExpression(expr, anyType),
                         createSyntheticExpression(expr, numberType)
                     ];
-                case 164:
-                case 166:
-                case 168:
-                case 169:
-                    var hasPropDesc = parent.kind !== 164 && languageVersion !== 0;
+                case 165:
+                case 167:
+                case 170:
+                case 171:
+                    var hasPropDesc = parent.kind !== 165 && languageVersion !== 0;
                     return [
                         createSyntheticExpression(expr, getParentTypeOfClassElement(parent)),
                         createSyntheticExpression(expr, getClassElementPropertyKeyType(parent)),
@@ -59188,16 +60356,16 @@
         }
         function getDecoratorArgumentCount(node, signature) {
             switch (node.parent.kind) {
-                case 253:
-                case 222:
+                case 255:
+                case 224:
                     return 1;
-                case 164:
+                case 165:
                     return 2;
-                case 166:
-                case 168:
-                case 169:
+                case 167:
+                case 170:
+                case 171:
                     return languageVersion === 0 || signature.parameters.length <= 2 ? 2 : 3;
-                case 161:
+                case 162:
                     return 3;
                 default:
                     return ts.Debug.fail();
@@ -59326,14 +60494,14 @@
             return ts.createDiagnosticForNodeArray(ts.getSourceFileOfNode(node), typeArguments, ts.Diagnostics.Expected_0_type_arguments_but_got_1, belowArgCount === -Infinity ? aboveArgCount : belowArgCount, argCount);
         }
         function resolveCall(node, signatures, candidatesOutArray, checkMode, callChainFlags, fallbackError) {
-            var isTaggedTemplate = node.kind === 206;
-            var isDecorator = node.kind === 162;
+            var isTaggedTemplate = node.kind === 208;
+            var isDecorator = node.kind === 163;
             var isJsxOpeningOrSelfClosingElement = ts.isJsxOpeningLikeElement(node);
             var reportErrors = !candidatesOutArray && produceDiagnostics;
             var typeArguments;
             if (!isDecorator) {
                 typeArguments = node.typeArguments;
-                if (isTaggedTemplate || isJsxOpeningOrSelfClosingElement || node.expression.kind !== 105) {
+                if (isTaggedTemplate || isJsxOpeningOrSelfClosingElement || node.expression.kind !== 106) {
                     ts.forEach(typeArguments, checkSourceElement);
                 }
             }
@@ -59352,7 +60520,7 @@
             var candidateForArgumentArityError;
             var candidateForTypeArgumentError;
             var result;
-            var signatureHelpTrailingComma = !!(checkMode & 16) && node.kind === 204 && node.arguments.hasTrailingComma;
+            var signatureHelpTrailingComma = !!(checkMode & 16) && node.kind === 206 && node.arguments.hasTrailingComma;
             if (candidates.length > 1) {
                 result = chooseOverload(candidates, subtypeRelation, isSingleNonGenericCandidate, signatureHelpTrailingComma);
             }
@@ -59392,7 +60560,7 @@
                         var min_3 = Number.MAX_VALUE;
                         var minIndex = 0;
                         var i_1 = 0;
-                        var _loop_22 = function (c) {
+                        var _loop_24 = function (c) {
                             var chain_2 = function () { return ts.chainDiagnosticMessages(undefined, ts.Diagnostics.Overload_0_of_1_2_gave_the_following_error, i_1 + 1, candidates.length, signatureToString(c)); };
                             var diags_2 = getSignatureApplicabilityError(node, args, c, assignableRelation, 0, true, chain_2);
                             if (diags_2) {
@@ -59410,12 +60578,12 @@
                         };
                         for (var _a = 0, candidatesForArgumentError_1 = candidatesForArgumentError; _a < candidatesForArgumentError_1.length; _a++) {
                             var c = candidatesForArgumentError_1[_a];
-                            _loop_22(c);
+                            _loop_24(c);
                         }
                         var diags_3 = max > 1 ? allDiagnostics[minIndex] : ts.flatten(allDiagnostics);
                         ts.Debug.assert(diags_3.length > 0, "No errors reported for 3 or fewer overload signatures");
                         var chain = ts.chainDiagnosticMessages(ts.map(diags_3, function (d) { return typeof d.messageText === "string" ? d : d.messageText; }), ts.Diagnostics.No_overload_matches_this_call);
-                        var related = __spreadArray([], ts.flatMap(diags_3, function (d) { return d.relatedInformation; }));
+                        var related = __spreadArray([], ts.flatMap(diags_3, function (d) { return d.relatedInformation; }), true);
                         var diag = void 0;
                         if (ts.every(diags_3, function (d) { return d.start === diags_3[0].start && d.length === diags_3[0].length && d.file === diags_3[0].file; })) {
                             var _b = diags_3[0], file = _b.file, start = _b.start, length_7 = _b.length;
@@ -59553,7 +60721,7 @@
             }
             var _a = ts.minAndMax(candidates, getNumNonRestParameters), minArgumentCount = _a.min, maxNonRestParam = _a.max;
             var parameters = [];
-            var _loop_23 = function (i) {
+            var _loop_25 = function (i) {
                 var symbols = ts.mapDefined(candidates, function (s) { return signatureHasRestParameter(s) ?
                     i < s.parameters.length - 1 ? s.parameters[i] : ts.last(s.parameters) :
                     i < s.parameters.length ? s.parameters[i] : undefined; });
@@ -59561,7 +60729,7 @@
                 parameters.push(createCombinedSymbolFromTypes(symbols, ts.mapDefined(candidates, function (candidate) { return tryGetTypeAtPosition(candidate, i); })));
             };
             for (var i = 0; i < maxNonRestParam; i++) {
-                _loop_23(i);
+                _loop_25(i);
             }
             var restParameterSymbols = ts.mapDefined(candidates, function (c) { return signatureHasRestParameter(c) ? ts.last(c.parameters) : undefined; });
             var flags = 0;
@@ -59631,7 +60799,7 @@
             return maxParamsIndex;
         }
         function resolveCallExpression(node, candidatesOutArray, checkMode) {
-            if (node.expression.kind === 105) {
+            if (node.expression.kind === 106) {
                 var superType = checkSuperExpression(node.expression);
                 if (isTypeAny(superType)) {
                     for (var _i = 0, _a = node.arguments; _i < _a.length; _i++) {
@@ -59800,7 +60968,7 @@
             }
             var declaration = signature.declaration;
             var modifiers = ts.getSelectedEffectiveModifierFlags(declaration, 24);
-            if (!modifiers || declaration.kind !== 167) {
+            if (!modifiers || declaration.kind !== 169) {
                 return true;
             }
             var declaringClassDeclaration = ts.getClassLikeDeclarationOfSymbol(declaration.parent.symbol);
@@ -59831,8 +60999,8 @@
             if (apparentType.flags & 1048576) {
                 var types = apparentType.types;
                 var hasSignatures = false;
-                for (var _i = 0, types_21 = types; _i < types_21.length; _i++) {
-                    var constituent = types_21[_i];
+                for (var _i = 0, types_20 = types; _i < types_20.length; _i++) {
+                    var constituent = types_20[_i];
                     var signatures = getSignaturesOfType(constituent, kind);
                     if (signatures.length !== 0) {
                         hasSignatures = true;
@@ -59932,16 +61100,16 @@
         }
         function getDiagnosticHeadMessageForDecoratorResolution(node) {
             switch (node.parent.kind) {
-                case 253:
-                case 222:
+                case 255:
+                case 224:
                     return ts.Diagnostics.Unable_to_resolve_signature_of_class_decorator_when_called_as_an_expression;
-                case 161:
+                case 162:
                     return ts.Diagnostics.Unable_to_resolve_signature_of_parameter_decorator_when_called_as_an_expression;
-                case 164:
+                case 165:
                     return ts.Diagnostics.Unable_to_resolve_signature_of_property_decorator_when_called_as_an_expression;
-                case 166:
-                case 168:
-                case 169:
+                case 167:
+                case 170:
+                case 171:
                     return ts.Diagnostics.Unable_to_resolve_signature_of_method_decorator_when_called_as_an_expression;
                 default:
                     return ts.Debug.fail();
@@ -59982,7 +61150,7 @@
             var exports = namespace && getExportsOfSymbol(namespace);
             var typeSymbol = exports && getSymbol(exports, JsxNames.Element, 788968);
             var returnNode = typeSymbol && nodeBuilder.symbolToEntityName(typeSymbol, 788968, node);
-            var declaration = ts.factory.createFunctionTypeNode(undefined, [ts.factory.createParameterDeclaration(undefined, undefined, undefined, "props", undefined, nodeBuilder.typeToTypeNode(result, node))], returnNode ? ts.factory.createTypeReferenceNode(returnNode, undefined) : ts.factory.createKeywordTypeNode(128));
+            var declaration = ts.factory.createFunctionTypeNode(undefined, [ts.factory.createParameterDeclaration(undefined, undefined, undefined, "props", undefined, nodeBuilder.typeToTypeNode(result, node))], returnNode ? ts.factory.createTypeReferenceNode(returnNode, undefined) : ts.factory.createKeywordTypeNode(129));
             var parameterSymbol = createSymbol(1, "props");
             parameterSymbol.type = result;
             return createSignature(declaration, undefined, undefined, [parameterSymbol], typeSymbol ? getDeclaredTypeOfSymbol(typeSymbol) : errorType, undefined, 1, 0);
@@ -60022,16 +61190,16 @@
         }
         function resolveSignature(node, candidatesOutArray, checkMode) {
             switch (node.kind) {
-                case 204:
-                    return resolveCallExpression(node, candidatesOutArray, checkMode);
-                case 205:
-                    return resolveNewExpression(node, candidatesOutArray, checkMode);
                 case 206:
+                    return resolveCallExpression(node, candidatesOutArray, checkMode);
+                case 207:
+                    return resolveNewExpression(node, candidatesOutArray, checkMode);
+                case 208:
                     return resolveTaggedTemplateExpression(node, candidatesOutArray, checkMode);
-                case 162:
+                case 163:
                     return resolveDecorator(node, candidatesOutArray, checkMode);
-                case 276:
-                case 275:
+                case 278:
+                case 277:
                     return resolveJsxOpeningLikeElement(node, candidatesOutArray, checkMode);
             }
             throw ts.Debug.assertNever(node, "Branch in 'resolveSignature' should be unreachable.");
@@ -60109,7 +61277,7 @@
             else if (ts.isBinaryExpression(node.parent)) {
                 var parentNode = node.parent;
                 var parentNodeOperator = node.parent.operatorToken.kind;
-                if (parentNodeOperator === 62 && (allowDeclaration || parentNode.right === node)) {
+                if (parentNodeOperator === 63 && (allowDeclaration || parentNode.right === node)) {
                     name = parentNode.left;
                     decl = name;
                 }
@@ -60118,7 +61286,7 @@
                         name = parentNode.parent.name;
                         decl = parentNode.parent;
                     }
-                    else if (ts.isBinaryExpression(parentNode.parent) && parentNode.parent.operatorToken.kind === 62 && (allowDeclaration || parentNode.parent.right === parentNode)) {
+                    else if (ts.isBinaryExpression(parentNode.parent) && parentNode.parent.operatorToken.kind === 63 && (allowDeclaration || parentNode.parent.right === parentNode)) {
                         name = parentNode.parent.left;
                         decl = name;
                     }
@@ -60141,10 +61309,10 @@
                 return false;
             }
             var parent = node.parent;
-            while (parent && parent.kind === 202) {
+            while (parent && parent.kind === 204) {
                 parent = parent.parent;
             }
-            if (parent && ts.isBinaryExpression(parent) && ts.isPrototypeAccess(parent.left) && parent.operatorToken.kind === 62) {
+            if (parent && ts.isBinaryExpression(parent) && ts.isPrototypeAccess(parent.left) && parent.operatorToken.kind === 63) {
                 var right = ts.getInitializerOfBinaryExpression(parent);
                 return ts.isObjectLiteralExpression(right) && right;
             }
@@ -60158,15 +61326,15 @@
                 return nonInferrableType;
             }
             checkDeprecatedSignature(signature, node);
-            if (node.expression.kind === 105) {
+            if (node.expression.kind === 106) {
                 return voidType;
             }
-            if (node.kind === 205) {
+            if (node.kind === 207) {
                 var declaration = signature.declaration;
                 if (declaration &&
-                    declaration.kind !== 167 &&
-                    declaration.kind !== 171 &&
-                    declaration.kind !== 176 &&
+                    declaration.kind !== 169 &&
+                    declaration.kind !== 173 &&
+                    declaration.kind !== 178 &&
                     !ts.isJSDocConstructSignature(declaration) &&
                     !isJSConstructor(declaration)) {
                     if (noImplicitAny) {
@@ -60182,7 +61350,7 @@
             if (returnType.flags & 12288 && isSymbolOrSymbolForCall(node)) {
                 return getESSymbolLikeTypeForNode(ts.walkUpParenthesizedExpressions(node.parent));
             }
-            if (node.kind === 204 && !node.questionDotToken && node.parent.kind === 234 &&
+            if (node.kind === 206 && !node.questionDotToken && node.parent.kind === 236 &&
                 returnType.flags & 16384 && getTypePredicateOfSignature(signature)) {
                 if (!ts.isDottedName(node.expression)) {
                     error(node.expression, ts.Diagnostics.Assertions_require_the_call_target_to_be_an_identifier_or_qualified_name);
@@ -60195,7 +61363,7 @@
             if (ts.isInJSFile(node)) {
                 var jsSymbol = getSymbolOfExpando(node, false);
                 if ((_a = jsSymbol === null || jsSymbol === void 0 ? void 0 : jsSymbol.exports) === null || _a === void 0 ? void 0 : _a.size) {
-                    var jsAssignmentType = createAnonymousType(jsSymbol, jsSymbol.exports, ts.emptyArray, ts.emptyArray, undefined, undefined);
+                    var jsAssignmentType = createAnonymousType(jsSymbol, jsSymbol.exports, ts.emptyArray, ts.emptyArray, ts.emptyArray);
                     jsAssignmentType.objectFlags |= 8192;
                     return getIntersectionType([returnType, jsAssignmentType]);
                 }
@@ -60212,20 +61380,20 @@
         function getDeprecatedSuggestionNode(node) {
             node = ts.skipParentheses(node);
             switch (node.kind) {
-                case 204:
-                case 162:
-                case 205:
-                    return getDeprecatedSuggestionNode(node.expression);
                 case 206:
+                case 163:
+                case 207:
+                    return getDeprecatedSuggestionNode(node.expression);
+                case 208:
                     return getDeprecatedSuggestionNode(node.tag);
-                case 276:
-                case 275:
+                case 278:
+                case 277:
                     return getDeprecatedSuggestionNode(node.tagName);
-                case 203:
+                case 205:
                     return node.argumentExpression;
-                case 202:
+                case 204:
                     return node.name;
-                case 174:
+                case 176:
                     var typeReference = node;
                     return ts.isQualifiedName(typeReference.typeName) ? typeReference.typeName.right : typeReference;
                 default:
@@ -60282,11 +61450,11 @@
                         var memberTable = ts.createSymbolTable();
                         var newSymbol = createSymbol(2097152, "default");
                         newSymbol.parent = originalSymbol;
-                        newSymbol.nameType = getLiteralType("default");
+                        newSymbol.nameType = getStringLiteralType("default");
                         newSymbol.target = resolveSymbol(symbol);
                         memberTable.set("default", newSymbol);
                         var anonymousSymbol = createSymbol(2048, "__type");
-                        var defaultContainingObject = createAnonymousType(anonymousSymbol, memberTable, ts.emptyArray, ts.emptyArray, undefined, undefined);
+                        var defaultContainingObject = createAnonymousType(anonymousSymbol, memberTable, ts.emptyArray, ts.emptyArray, ts.emptyArray);
                         anonymousSymbol.type = defaultContainingObject;
                         synthType.syntheticType = isValidSpreadType(type) ? getSpreadType(type, defaultContainingObject, anonymousSymbol, 0, false) : defaultContainingObject;
                     }
@@ -60312,9 +61480,9 @@
                 return false;
             }
             var targetDeclarationKind = resolvedRequire.flags & 16
-                ? 252
+                ? 254
                 : resolvedRequire.flags & 3
-                    ? 250
+                    ? 252
                     : 0;
             if (targetDeclarationKind !== 0) {
                 var decl = ts.getDeclarationOfKind(resolvedRequire, targetDeclarationKind);
@@ -60341,21 +61509,21 @@
                 case 14:
                 case 8:
                 case 9:
-                case 109:
-                case 94:
-                case 200:
-                case 201:
-                case 219:
+                case 110:
+                case 95:
+                case 202:
+                case 203:
+                case 221:
                     return true;
-                case 208:
+                case 210:
                     return isValidConstAssertionArgument(node.expression);
-                case 215:
+                case 217:
                     var op = node.operator;
                     var arg = node.operand;
                     return op === 40 && (arg.kind === 8 || arg.kind === 9) ||
                         op === 39 && arg.kind === 8;
-                case 202:
-                case 203:
+                case 204:
+                case 205:
                     var expr = node.expression;
                     if (ts.isIdentifier(expr)) {
                         var symbol = getSymbolAtLocation(expr);
@@ -60397,21 +61565,32 @@
         }
         function checkMetaProperty(node) {
             checkGrammarMetaProperty(node);
-            if (node.keywordToken === 102) {
+            if (node.keywordToken === 103) {
                 return checkNewTargetMetaProperty(node);
             }
-            if (node.keywordToken === 99) {
+            if (node.keywordToken === 100) {
                 return checkImportMetaProperty(node);
             }
             return ts.Debug.assertNever(node.keywordToken);
         }
+        function checkMetaPropertyKeyword(node) {
+            switch (node.keywordToken) {
+                case 100:
+                    return getGlobalImportMetaExpressionType();
+                case 103:
+                    var type = checkNewTargetMetaProperty(node);
+                    return type === errorType ? errorType : createNewTargetExpressionType(type);
+                default:
+                    ts.Debug.assertNever(node.keywordToken);
+            }
+        }
         function checkNewTargetMetaProperty(node) {
             var container = ts.getNewTargetContainer(node);
             if (!container) {
                 error(node, ts.Diagnostics.Meta_property_0_is_only_allowed_in_the_body_of_a_function_declaration_function_expression_or_constructor, "new.target");
                 return errorType;
             }
-            else if (container.kind === 167) {
+            else if (container.kind === 169) {
                 var symbol = getSymbolOfNode(container.parent);
                 return getTypeOfSymbol(symbol);
             }
@@ -60426,7 +61605,6 @@
             }
             var file = ts.getSourceFileOfNode(node);
             ts.Debug.assert(!!(file.flags & 2097152), "Containing file is missing import meta node flag.");
-            ts.Debug.assert(!!file.externalModuleIndicator, "Containing file should be a module.");
             return node.name.escapedText === "meta" ? getGlobalImportMetaType() : errorType;
         }
         function getTypeOfParameter(symbol) {
@@ -60457,8 +61635,37 @@
             }
             return restParameter.escapedName;
         }
+        function getParameterIdentifierNameAtPosition(signature, pos) {
+            var paramCount = signature.parameters.length - (signatureHasRestParameter(signature) ? 1 : 0);
+            if (pos < paramCount) {
+                var param = signature.parameters[pos];
+                return isParameterDeclarationWithIdentifierName(param) ? [param.escapedName, false] : undefined;
+            }
+            var restParameter = signature.parameters[paramCount] || unknownSymbol;
+            if (!isParameterDeclarationWithIdentifierName(restParameter)) {
+                return undefined;
+            }
+            var restType = getTypeOfSymbol(restParameter);
+            if (isTupleType(restType)) {
+                var associatedNames = restType.target.labeledElementDeclarations;
+                var index = pos - paramCount;
+                var associatedName = associatedNames === null || associatedNames === void 0 ? void 0 : associatedNames[index];
+                var isRestTupleElement = !!(associatedName === null || associatedName === void 0 ? void 0 : associatedName.dotDotDotToken);
+                return associatedName ? [
+                    getTupleElementLabel(associatedName),
+                    isRestTupleElement
+                ] : undefined;
+            }
+            if (pos === paramCount) {
+                return [restParameter.escapedName, true];
+            }
+            return undefined;
+        }
+        function isParameterDeclarationWithIdentifierName(symbol) {
+            return symbol.valueDeclaration && ts.isParameter(symbol.valueDeclaration) && ts.isIdentifier(symbol.valueDeclaration.name);
+        }
         function isValidDeclarationForTupleLabel(d) {
-            return d.kind === 193 || (ts.isParameter(d) && d.name && ts.isIdentifier(d.name));
+            return d.kind === 195 || (ts.isParameter(d) && d.name && ts.isIdentifier(d.name));
         }
         function getNameableDeclarationAtPosition(signature, pos) {
             var paramCount = signature.parameters.length - (signatureHasRestParameter(signature) ? 1 : 0);
@@ -60487,7 +61694,7 @@
                 var restType = getTypeOfSymbol(signature.parameters[paramCount]);
                 var index = pos - paramCount;
                 if (!isTupleType(restType) || restType.target.hasRestElement || index < restType.target.fixedLength) {
-                    return getIndexedAccessType(restType, getLiteralType(index));
+                    return getIndexedAccessType(restType, getNumberLiteralType(index));
                 }
             }
             return undefined;
@@ -60659,7 +61866,7 @@
             if (!links.type) {
                 var declaration = parameter.valueDeclaration;
                 links.type = type || getWidenedTypeForVariableLikeDeclaration(declaration, true);
-                if (declaration.name.kind !== 78) {
+                if (declaration.name.kind !== 79) {
                     if (links.type === unknownType) {
                         links.type = getTypeFromBindingPattern(declaration.name);
                     }
@@ -60671,7 +61878,7 @@
             for (var _i = 0, _a = pattern.elements; _i < _a.length; _i++) {
                 var element = _a[_i];
                 if (!ts.isOmittedExpression(element)) {
-                    if (element.name.kind === 78) {
+                    if (element.name.kind === 79) {
                         getSymbolLinks(getSymbolOfNode(element)).type = getTypeForBindingElement(element);
                     }
                     else {
@@ -60711,6 +61918,15 @@
             }
             return promiseType;
         }
+        function createNewTargetExpressionType(targetType) {
+            var symbol = createSymbol(0, "NewTargetExpression");
+            var targetPropertySymbol = createSymbol(4, "target", 8);
+            targetPropertySymbol.parent = symbol;
+            targetPropertySymbol.type = targetType;
+            var members = ts.createSymbolTable([targetPropertySymbol]);
+            symbol.members = members;
+            return createAnonymousType(symbol, members, ts.emptyArray, ts.emptyArray, ts.emptyArray);
+        }
         function getReturnTypeFromBody(func, checkMode) {
             if (!func.body) {
                 return errorType;
@@ -60722,7 +61938,7 @@
             var yieldType;
             var nextType;
             var fallbackReturnType = voidType;
-            if (func.body.kind !== 231) {
+            if (func.body.kind !== 233) {
                 returnType = checkExpressionCached(func.body, checkMode && checkMode & ~8);
                 if (isAsync) {
                     returnType = checkAwaitedType(returnType, func, ts.Diagnostics.The_return_type_of_an_async_function_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member);
@@ -60872,7 +62088,7 @@
             return links.isExhaustive !== undefined ? links.isExhaustive : (links.isExhaustive = computeExhaustiveSwitchStatement(node));
         }
         function computeExhaustiveSwitchStatement(node) {
-            if (node.expression.kind === 212) {
+            if (node.expression.kind === 214) {
                 var operandType = getTypeOfExpression(node.expression.expression);
                 var witnesses = getSwitchClauseTypeOfWitnesses(node, false);
                 var notEqualFacts_1 = getFactsFromTypeofSwitch(0, 0, witnesses, true);
@@ -60927,11 +62143,11 @@
         }
         function mayReturnNever(func) {
             switch (func.kind) {
-                case 209:
-                case 210:
+                case 211:
+                case 212:
                     return true;
-                case 166:
-                    return func.parent.kind === 201;
+                case 167:
+                    return func.parent.kind === 203;
                 default:
                     return false;
             }
@@ -60945,7 +62161,7 @@
             if (type && maybeTypeOfKind(type, 1 | 16384)) {
                 return;
             }
-            if (func.kind === 165 || ts.nodeIsMissing(func.body) || func.body.kind !== 231 || !functionHasImplicitReturn(func)) {
+            if (func.kind === 166 || ts.nodeIsMissing(func.body) || func.body.kind !== 233 || !functionHasImplicitReturn(func)) {
                 return;
             }
             var hasExplicitReturn = func.flags & 512;
@@ -60973,10 +62189,13 @@
             }
         }
         function checkFunctionExpressionOrObjectLiteralMethod(node, checkMode) {
-            ts.Debug.assert(node.kind !== 166 || ts.isObjectLiteralMethod(node));
+            ts.Debug.assert(node.kind !== 167 || ts.isObjectLiteralMethod(node));
             checkNodeDeferred(node);
+            if (ts.isFunctionExpression(node)) {
+                checkCollisionsForDeclarationName(node, node.name);
+            }
             if (checkMode && checkMode & 4 && isContextSensitive(node)) {
-                if (!ts.getEffectiveReturnTypeNode(node) && !hasContextSensitiveParameters(node)) {
+                if (!ts.getEffectiveReturnTypeNode(node) && !ts.hasContextSensitiveParameters(node)) {
                     var contextualSignature = getContextualSignature(node);
                     if (contextualSignature && couldContainTypeVariables(getReturnTypeOfSignature(contextualSignature))) {
                         var links = getNodeLinks(node);
@@ -60985,7 +62204,7 @@
                         }
                         var returnType = getReturnTypeFromBody(node, checkMode);
                         var returnOnlySignature = createSignature(undefined, undefined, undefined, ts.emptyArray, returnType, undefined, 0, 0);
-                        var returnOnlyType = createAnonymousType(node.symbol, emptySymbols, [returnOnlySignature], ts.emptyArray, undefined, undefined);
+                        var returnOnlyType = createAnonymousType(node.symbol, emptySymbols, [returnOnlySignature], ts.emptyArray, ts.emptyArray);
                         returnOnlyType.objectFlags |= 524288;
                         return links.contextFreeType = returnOnlyType;
                     }
@@ -60993,7 +62212,7 @@
                 return anyFunctionType;
             }
             var hasGrammarError = checkGrammarFunctionLikeDeclaration(node);
-            if (!hasGrammarError && node.kind === 209) {
+            if (!hasGrammarError && node.kind === 211) {
                 checkGrammarForGenerator(node);
             }
             contextuallyCheckFunctionExpressionOrObjectLiteralMethod(node, checkMode);
@@ -61034,7 +62253,7 @@
             }
         }
         function checkFunctionExpressionOrObjectLiteralMethodDeferred(node) {
-            ts.Debug.assert(node.kind !== 166 || ts.isObjectLiteralMethod(node));
+            ts.Debug.assert(node.kind !== 167 || ts.isObjectLiteralMethod(node));
             var functionFlags = ts.getFunctionFlags(node);
             var returnType = getReturnTypeFromAnnotation(node);
             checkAllCodePathsInNonVoidFunctionReturnOrThrow(node, returnType);
@@ -61042,7 +62261,7 @@
                 if (!ts.getEffectiveReturnTypeNode(node)) {
                     getReturnTypeOfSignature(getSignatureFromDeclaration(node));
                 }
-                if (node.body.kind === 231) {
+                if (node.body.kind === 233) {
                     checkSourceElement(node.body);
                 }
                 else {
@@ -61112,9 +62331,9 @@
             if (isReadonlySymbol(symbol)) {
                 if (symbol.flags & 4 &&
                     ts.isAccessExpression(expr) &&
-                    expr.expression.kind === 107) {
+                    expr.expression.kind === 108) {
                     var ctor = ts.getContainingFunction(expr);
-                    if (!(ctor && (ctor.kind === 167 || isJSConstructor(ctor)))) {
+                    if (!(ctor && (ctor.kind === 169 || isJSConstructor(ctor)))) {
                         return true;
                     }
                     if (symbol.valueDeclaration) {
@@ -61134,11 +62353,11 @@
             }
             if (ts.isAccessExpression(expr)) {
                 var node = ts.skipParentheses(expr.expression);
-                if (node.kind === 78) {
+                if (node.kind === 79) {
                     var symbol_2 = getNodeLinks(node).resolvedSymbol;
                     if (symbol_2.flags & 2097152) {
                         var declaration = getDeclarationOfAliasSymbol(symbol_2);
-                        return !!declaration && declaration.kind === 264;
+                        return !!declaration && declaration.kind === 266;
                     }
                 }
             }
@@ -61146,7 +62365,7 @@
         }
         function checkReferenceExpression(expr, invalidReferenceMessage, invalidOptionalChainMessage) {
             var node = ts.skipOuterExpressions(expr, 6 | 1);
-            if (node.kind !== 78 && !ts.isAccessExpression(node)) {
+            if (node.kind !== 79 && !ts.isAccessExpression(node)) {
                 error(expr, invalidReferenceMessage);
                 return false;
             }
@@ -61172,13 +62391,15 @@
                 if (isReadonlySymbol(symbol)) {
                     error(expr, ts.Diagnostics.The_operand_of_a_delete_operator_cannot_be_a_read_only_property);
                 }
-                checkDeleteExpressionMustBeOptional(expr, getTypeOfSymbol(symbol));
+                checkDeleteExpressionMustBeOptional(expr, symbol);
             }
             return booleanType;
         }
-        function checkDeleteExpressionMustBeOptional(expr, type) {
-            var AnyOrUnknownOrNeverFlags = 3 | 131072;
-            if (strictNullChecks && !(type.flags & AnyOrUnknownOrNeverFlags) && !(getFalsyFlags(type) & 32768)) {
+        function checkDeleteExpressionMustBeOptional(expr, symbol) {
+            var type = getTypeOfSymbol(symbol);
+            if (strictNullChecks &&
+                !(type.flags & (3 | 131072)) &&
+                !(exactOptionalPropertyTypes ? symbol.flags & 16777216 : getFalsyFlags(type) & 32768)) {
                 error(expr, ts.Diagnostics.The_operand_of_a_delete_operator_must_be_optional);
             }
         }
@@ -61192,7 +62413,11 @@
         }
         function checkAwaitExpression(node) {
             if (produceDiagnostics) {
-                if (!(node.flags & 32768)) {
+                var container = ts.getContainingFunctionOrClassStaticBlock(node);
+                if (container && ts.isClassStaticBlockDeclaration(container)) {
+                    error(node, ts.Diagnostics.Await_expression_cannot_be_used_inside_a_class_static_block);
+                }
+                else if (!(node.flags & 32768)) {
                     if (ts.isInTopLevelContext(node)) {
                         var sourceFile = ts.getSourceFileOfNode(node);
                         if (!hasParseDiagnostics(sourceFile)) {
@@ -61215,9 +62440,8 @@
                         if (!hasParseDiagnostics(sourceFile)) {
                             var span = ts.getSpanOfTokenAtPosition(sourceFile, node.pos);
                             var diagnostic = ts.createFileDiagnostic(sourceFile, span.start, span.length, ts.Diagnostics.await_expressions_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules);
-                            var func = ts.getContainingFunction(node);
-                            if (func && func.kind !== 167 && (ts.getFunctionFlags(func) & 2) === 0) {
-                                var relatedInfo = ts.createDiagnosticForNode(func, ts.Diagnostics.Did_you_mean_to_mark_this_function_as_async);
+                            if (container && container.kind !== 169 && (ts.getFunctionFlags(container) & 2) === 0) {
+                                var relatedInfo = ts.createDiagnosticForNode(container, ts.Diagnostics.Did_you_mean_to_mark_this_function_as_async);
                                 ts.addRelatedInfo(diagnostic, relatedInfo);
                             }
                             diagnostics.add(diagnostic);
@@ -61244,14 +62468,14 @@
                 case 8:
                     switch (node.operator) {
                         case 40:
-                            return getFreshTypeOfLiteralType(getLiteralType(-node.operand.text));
+                            return getFreshTypeOfLiteralType(getNumberLiteralType(-node.operand.text));
                         case 39:
-                            return getFreshTypeOfLiteralType(getLiteralType(+node.operand.text));
+                            return getFreshTypeOfLiteralType(getNumberLiteralType(+node.operand.text));
                     }
                     break;
                 case 9:
                     if (node.operator === 40) {
-                        return getFreshTypeOfLiteralType(getLiteralType({
+                        return getFreshTypeOfLiteralType(getBigIntLiteralType({
                             negative: true,
                             base10Value: ts.parsePseudoBigInt(node.operand.text)
                         }));
@@ -61313,8 +62537,8 @@
             }
             if (type.flags & 3145728) {
                 var types = type.types;
-                for (var _i = 0, types_22 = types; _i < types_22.length; _i++) {
-                    var t = types_22[_i];
+                for (var _i = 0, types_21 = types; _i < types_21.length; _i++) {
+                    var t = types_21[_i];
                     if (maybeTypeOfKind(t, kind)) {
                         return true;
                     }
@@ -61396,7 +62620,7 @@
             if (rightIsThis === void 0) { rightIsThis = false; }
             var properties = node.properties;
             var property = properties[propertyIndex];
-            if (property.kind === 289 || property.kind === 290) {
+            if (property.kind === 291 || property.kind === 292) {
                 var name = property.name;
                 var exprType = getLiteralTypeFromPropertyName(name);
                 if (isTypeUsableAsPropertyName(exprType)) {
@@ -61407,11 +62631,11 @@
                         checkPropertyAccessibility(property, false, true, objectLiteralType, prop);
                     }
                 }
-                var elementType = getIndexedAccessType(objectLiteralType, exprType, undefined, name, undefined, undefined, 16);
+                var elementType = getIndexedAccessType(objectLiteralType, exprType, 32, name);
                 var type = getFlowTypeOfDestructuring(property, elementType);
-                return checkDestructuringAssignment(property.kind === 290 ? property : property.initializer, type);
+                return checkDestructuringAssignment(property.kind === 292 ? property : property.initializer, type);
             }
-            else if (property.kind === 291) {
+            else if (property.kind === 293) {
                 if (propertyIndex < properties.length - 1) {
                     error(property, ts.Diagnostics.A_rest_element_must_be_last_in_a_destructuring_pattern);
                 }
@@ -61446,7 +62670,7 @@
             var inBoundsType = compilerOptions.noUncheckedIndexedAccess ? undefined : possiblyOutOfBoundsType;
             for (var i = 0; i < elements.length; i++) {
                 var type = possiblyOutOfBoundsType;
-                if (node.elements[i].kind === 221) {
+                if (node.elements[i].kind === 223) {
                     type = inBoundsType = inBoundsType !== null && inBoundsType !== void 0 ? inBoundsType : (checkIteratedTypeOrElementType(65, sourceType, undefinedType, node) || errorType);
                 }
                 checkArrayLiteralDestructuringElementAssignment(node, sourceType, i, type, checkMode);
@@ -61456,12 +62680,12 @@
         function checkArrayLiteralDestructuringElementAssignment(node, sourceType, elementIndex, elementType, checkMode) {
             var elements = node.elements;
             var element = elements[elementIndex];
-            if (element.kind !== 223) {
-                if (element.kind !== 221) {
-                    var indexType = getLiteralType(elementIndex);
+            if (element.kind !== 225) {
+                if (element.kind !== 223) {
+                    var indexType = getNumberLiteralType(elementIndex);
                     if (isArrayLikeType(sourceType)) {
-                        var accessFlags = 16 | (hasDefaultValue(element) ? 8 : 0);
-                        var elementType_2 = getIndexedAccessTypeOrUndefined(sourceType, indexType, undefined, createSyntheticExpression(element, indexType), accessFlags) || errorType;
+                        var accessFlags = 32 | (hasDefaultValue(element) ? 16 : 0);
+                        var elementType_2 = getIndexedAccessTypeOrUndefined(sourceType, indexType, accessFlags, createSyntheticExpression(element, indexType)) || errorType;
                         var assignedType = hasDefaultValue(element) ? getTypeWithFacts(elementType_2, 524288) : elementType_2;
                         var type = getFlowTypeOfDestructuring(element, assignedType);
                         return checkDestructuringAssignment(element, type, checkMode);
@@ -61473,7 +62697,7 @@
                 }
                 else {
                     var restExpression = element.expression;
-                    if (restExpression.kind === 217 && restExpression.operatorToken.kind === 62) {
+                    if (restExpression.kind === 219 && restExpression.operatorToken.kind === 63) {
                         error(restExpression.operatorToken, ts.Diagnostics.A_rest_element_cannot_have_an_initializer);
                     }
                     else {
@@ -61489,7 +62713,7 @@
         }
         function checkDestructuringAssignment(exprOrAssignment, sourceType, checkMode, rightIsThis) {
             var target;
-            if (exprOrAssignment.kind === 290) {
+            if (exprOrAssignment.kind === 292) {
                 var prop = exprOrAssignment;
                 if (prop.objectAssignmentInitializer) {
                     if (strictNullChecks &&
@@ -61503,24 +62727,24 @@
             else {
                 target = exprOrAssignment;
             }
-            if (target.kind === 217 && target.operatorToken.kind === 62) {
+            if (target.kind === 219 && target.operatorToken.kind === 63) {
                 checkBinaryExpression(target, checkMode);
                 target = target.left;
             }
-            if (target.kind === 201) {
+            if (target.kind === 203) {
                 return checkObjectLiteralAssignment(target, sourceType, rightIsThis);
             }
-            if (target.kind === 200) {
+            if (target.kind === 202) {
                 return checkArrayLiteralAssignment(target, sourceType, checkMode);
             }
             return checkReferenceAssignment(target, sourceType, checkMode);
         }
         function checkReferenceAssignment(target, sourceType, checkMode) {
             var targetType = checkExpression(target, checkMode);
-            var error = target.parent.kind === 291 ?
+            var error = target.parent.kind === 293 ?
                 ts.Diagnostics.The_target_of_an_object_rest_assignment_must_be_a_variable_or_a_property_access :
                 ts.Diagnostics.The_left_hand_side_of_an_assignment_expression_must_be_a_variable_or_a_property_access;
-            var optionalError = target.parent.kind === 291 ?
+            var optionalError = target.parent.kind === 293 ?
                 ts.Diagnostics.The_target_of_an_object_rest_assignment_may_not_be_an_optional_property_access :
                 ts.Diagnostics.The_left_hand_side_of_an_assignment_expression_may_not_be_an_optional_property_access;
             if (checkReferenceExpression(target, error, optionalError)) {
@@ -61534,39 +62758,39 @@
         function isSideEffectFree(node) {
             node = ts.skipParentheses(node);
             switch (node.kind) {
-                case 78:
+                case 79:
                 case 10:
                 case 13:
-                case 206:
-                case 219:
+                case 208:
+                case 221:
                 case 14:
                 case 8:
                 case 9:
-                case 109:
-                case 94:
-                case 103:
-                case 150:
-                case 209:
-                case 222:
-                case 210:
-                case 200:
-                case 201:
+                case 110:
+                case 95:
+                case 104:
+                case 151:
+                case 211:
+                case 224:
                 case 212:
-                case 226:
-                case 275:
-                case 274:
+                case 202:
+                case 203:
+                case 214:
+                case 228:
+                case 277:
+                case 276:
                     return true;
-                case 218:
+                case 220:
                     return isSideEffectFree(node.whenTrue) &&
                         isSideEffectFree(node.whenFalse);
-                case 217:
+                case 219:
                     if (ts.isAssignmentOperator(node.operatorToken.kind)) {
                         return false;
                     }
                     return isSideEffectFree(node.left) &&
                         isSideEffectFree(node.right);
-                case 215:
-                case 216:
+                case 217:
+                case 218:
                     switch (node.operator) {
                         case 53:
                         case 39:
@@ -61575,9 +62799,9 @@
                             return true;
                     }
                     return false;
-                case 213:
-                case 207:
-                case 225:
+                case 215:
+                case 209:
+                case 227:
                 default:
                     return false;
             }
@@ -61614,9 +62838,9 @@
                 }
                 checkGrammarNullishCoalesceWithLogicalExpression(node);
                 var operator = node.operatorToken.kind;
-                if (operator === 62 && (node.left.kind === 201 || node.left.kind === 200)) {
+                if (operator === 63 && (node.left.kind === 203 || node.left.kind === 202)) {
                     state.skip = true;
-                    setLastResult(state, checkDestructuringAssignment(node.left, checkExpression(node.right, checkMode), checkMode, node.right.kind === 107));
+                    setLastResult(state, checkDestructuringAssignment(node.left, checkExpression(node.right, checkMode), checkMode, node.right.kind === 108));
                     return state;
                 }
                 return state;
@@ -61701,8 +62925,8 @@
         }
         function checkBinaryLikeExpression(left, operatorToken, right, checkMode, errorNode) {
             var operator = operatorToken.kind;
-            if (operator === 62 && (left.kind === 201 || left.kind === 200)) {
-                return checkDestructuringAssignment(left, checkExpression(right, checkMode), checkMode, right.kind === 107);
+            if (operator === 63 && (left.kind === 203 || left.kind === 202)) {
+                return checkDestructuringAssignment(left, checkExpression(right, checkMode), checkMode, right.kind === 108);
             }
             var leftType;
             if (operator === 55 || operator === 56 || operator === 60) {
@@ -61719,26 +62943,26 @@
             switch (operator) {
                 case 41:
                 case 42:
-                case 65:
                 case 66:
-                case 43:
                 case 67:
-                case 44:
+                case 43:
                 case 68:
-                case 40:
-                case 64:
-                case 47:
+                case 44:
                 case 69:
-                case 48:
+                case 40:
+                case 65:
+                case 47:
                 case 70:
-                case 49:
+                case 48:
                 case 71:
-                case 51:
-                case 73:
-                case 52:
-                case 77:
-                case 50:
+                case 49:
                 case 72:
+                case 51:
+                case 74:
+                case 52:
+                case 78:
+                case 50:
+                case 73:
                     if (leftType === silentNeverType || rightType === silentNeverType) {
                         return silentNeverType;
                     }
@@ -61762,11 +62986,11 @@
                         else if (bothAreBigIntLike(leftType, rightType)) {
                             switch (operator) {
                                 case 49:
-                                case 71:
+                                case 72:
                                     reportOperatorError();
                                     break;
                                 case 42:
-                                case 66:
+                                case 67:
                                     if (languageVersion < 3) {
                                         error(errorNode, ts.Diagnostics.Exponentiation_cannot_be_performed_on_bigint_values_unless_the_target_option_is_set_to_es2016_or_later);
                                     }
@@ -61783,7 +63007,7 @@
                         return resultType_1;
                     }
                 case 39:
-                case 63:
+                case 64:
                     if (leftType === silentNeverType || rightType === silentNeverType) {
                         return silentNeverType;
                     }
@@ -61815,7 +63039,7 @@
                         });
                         return anyType;
                     }
-                    if (operator === 63) {
+                    if (operator === 64) {
                         checkAssignmentOperator(resultType);
                     }
                     return resultType;
@@ -61837,41 +63061,41 @@
                 case 37:
                     reportOperatorErrorUnless(function (left, right) { return isTypeEqualityComparableTo(left, right) || isTypeEqualityComparableTo(right, left); });
                     return booleanType;
-                case 101:
+                case 102:
                     return checkInstanceOfExpression(left, right, leftType, rightType);
-                case 100:
+                case 101:
                     return checkInExpression(left, right, leftType, rightType);
                 case 55:
-                case 75: {
+                case 76: {
                     var resultType_2 = getTypeFacts(leftType) & 4194304 ?
                         getUnionType([extractDefinitelyFalsyTypes(strictNullChecks ? leftType : getBaseTypeOfLiteralType(rightType)), rightType]) :
                         leftType;
-                    if (operator === 75) {
+                    if (operator === 76) {
                         checkAssignmentOperator(rightType);
                     }
                     return resultType_2;
                 }
                 case 56:
-                case 74: {
+                case 75: {
                     var resultType_3 = getTypeFacts(leftType) & 8388608 ?
                         getUnionType([removeDefinitelyFalsyTypes(leftType), rightType], 2) :
                         leftType;
-                    if (operator === 74) {
+                    if (operator === 75) {
                         checkAssignmentOperator(rightType);
                     }
                     return resultType_3;
                 }
                 case 60:
-                case 76: {
+                case 77: {
                     var resultType_4 = getTypeFacts(leftType) & 262144 ?
                         getUnionType([getNonNullableType(leftType), rightType], 2) :
                         leftType;
-                    if (operator === 76) {
+                    if (operator === 77) {
                         checkAssignmentOperator(rightType);
                     }
                     return resultType_4;
                 }
-                case 62:
+                case 63:
                     var declKind = ts.isBinaryExpression(left.parent) ? ts.getAssignmentDeclarationKind(left.parent) : 0;
                     checkAssignmentDeclaration(declKind, rightType);
                     if (isAssignmentDeclaration(declKind)) {
@@ -61926,7 +63150,7 @@
                 }
             }
             function isEvalNode(node) {
-                return node.kind === 78 && node.escapedText === "eval";
+                return node.kind === 79 && node.escapedText === "eval";
             }
             function checkForDisallowedESSymbolOperand(operator) {
                 var offendingSymbolOperand = maybeTypeOfKind(leftType, 12288) ? left :
@@ -61941,13 +63165,13 @@
             function getSuggestedBooleanOperator(operator) {
                 switch (operator) {
                     case 51:
-                    case 73:
+                    case 74:
                         return 56;
                     case 52:
-                    case 77:
+                    case 78:
                         return 37;
                     case 50:
-                    case 72:
+                    case 73:
                         return 55;
                     default:
                         return undefined;
@@ -62098,6 +63322,11 @@
             var type2 = checkExpression(node.whenFalse, checkMode);
             return getUnionType([type1, type2], 2);
         }
+        function isTemplateLiteralContext(node) {
+            var parent = node.parent;
+            return ts.isParenthesizedExpression(parent) && isTemplateLiteralContext(parent) ||
+                ts.isElementAccessExpression(parent) && parent.argumentExpression === node;
+        }
         function checkTemplateExpression(node) {
             var texts = [node.head.text];
             var types = [];
@@ -62110,14 +63339,14 @@
                 texts.push(span.literal.text);
                 types.push(isTypeAssignableTo(type, templateConstraintType) ? type : stringType);
             }
-            return isConstContext(node) || someType(getContextualType(node) || unknownType, isTemplateLiteralContextualType) ? getTemplateLiteralType(texts, types) : stringType;
+            return isConstContext(node) || isTemplateLiteralContext(node) || someType(getContextualType(node) || unknownType, isTemplateLiteralContextualType) ? getTemplateLiteralType(texts, types) : stringType;
         }
         function isTemplateLiteralContextualType(type) {
             return !!(type.flags & (128 | 134217728) ||
                 type.flags & 58982400 && maybeTypeOfKind(getBaseConstraintOfType(type) || unknownType, 402653316));
         }
         function getContextNode(node) {
-            if (node.kind === 282 && !ts.isJsxSelfClosingElement(node.parent)) {
+            if (node.kind === 284 && !ts.isJsxSelfClosingElement(node.parent)) {
                 return node.parent.parent;
             }
             return node;
@@ -62157,13 +63386,13 @@
         }
         function isTypeAssertion(node) {
             node = ts.skipParentheses(node);
-            return node.kind === 207 || node.kind === 225;
+            return node.kind === 209 || node.kind === 227;
         }
         function checkDeclarationInitializer(declaration, contextualType) {
             var initializer = ts.getEffectiveInitializer(declaration);
             var type = getQuickTypeOfExpression(initializer) ||
                 (contextualType ? checkExpressionWithContextualType(initializer, contextualType, undefined, 0) : checkExpressionCached(initializer));
-            return ts.isParameter(declaration) && declaration.name.kind === 198 &&
+            return ts.isParameter(declaration) && declaration.name.kind === 200 &&
                 isTupleType(type) && !type.target.hasRestElement && getTypeReferenceArity(type) < declaration.name.elements.length ?
                 padTupleType(type, declaration.name) : type;
         }
@@ -62173,7 +63402,7 @@
             var elementFlags = type.target.elementFlags.slice();
             for (var i = getTypeReferenceArity(type); i < patternElements.length; i++) {
                 var e = patternElements[i];
-                if (i < patternElements.length - 1 || !(e.kind === 199 && e.dotDotDotToken)) {
+                if (i < patternElements.length - 1 || !(e.kind === 201 && e.dotDotDotToken)) {
                     elementTypes.push(!ts.isOmittedExpression(e) && hasDefaultValue(e) ? getTypeFromBindingElement(e, false, false) : anyType);
                     elementFlags.push(2);
                     if (!ts.isOmittedExpression(e) && !hasDefaultValue(e)) {
@@ -62186,7 +63415,7 @@
         function widenTypeInferredFromInitializer(declaration, type) {
             var widened = ts.getCombinedNodeFlags(declaration) & 2 || ts.isDeclarationReadonly(declaration) ? type : getWidenedLiteralType(type);
             if (ts.isInJSFile(declaration)) {
-                if (widened.flags & 98304) {
+                if (isEmptyLiteralType(widened)) {
                     reportImplicitAny(declaration, anyType);
                     return anyType;
                 }
@@ -62232,14 +63461,14 @@
                     getWidenedLiteralLikeTypeForContextualType(type, instantiateContextualType(arguments.length === 2 ? getContextualType(node) : contextualType, node));
         }
         function checkPropertyAssignment(node, checkMode) {
-            if (node.name.kind === 159) {
+            if (node.name.kind === 160) {
                 checkComputedPropertyName(node.name);
             }
             return checkExpressionForMutableLocation(node.initializer, checkMode);
         }
         function checkObjectLiteralMethod(node, checkMode) {
             checkGrammarMethod(node);
-            if (node.name.kind === 159) {
+            if (node.name.kind === 160) {
                 checkComputedPropertyName(node.name);
             }
             var uninstantiatedType = checkFunctionExpressionOrObjectLiteralMethod(node, checkMode);
@@ -62349,7 +63578,7 @@
                 len--;
             var s = baseName.slice(0, len);
             for (var index = 1; true; index++) {
-                var augmentedName = (s + index);
+                var augmentedName = s + index;
                 if (!hasTypeParameterByName(typeParameters, augmentedName)) {
                     return augmentedName;
                 }
@@ -62389,7 +63618,7 @@
         }
         function getQuickTypeOfExpression(node) {
             var expr = ts.skipParentheses(node);
-            if (ts.isCallExpression(expr) && expr.expression.kind !== 105 && !ts.isRequireCall(expr, true) && !isSymbolOrSymbolForCall(expr)) {
+            if (ts.isCallExpression(expr) && expr.expression.kind !== 106 && !ts.isRequireCall(expr, true) && !isSymbolOrSymbolForCall(expr)) {
                 var type = ts.isCallChain(expr) ? getReturnTypeOfSingleNonGenericSignatureOfCallChain(expr) :
                     getReturnTypeOfSingleNonGenericCallSignature(checkNonNullExpression(expr.expression));
                 if (type) {
@@ -62400,7 +63629,7 @@
                 return getTypeFromTypeNode(expr.type);
             }
             else if (node.kind === 8 || node.kind === 10 ||
-                node.kind === 109 || node.kind === 94) {
+                node.kind === 110 || node.kind === 95) {
                 return checkExpression(node);
             }
             return undefined;
@@ -62435,11 +63664,11 @@
             return type;
         }
         function checkConstEnumAccess(node, type) {
-            var ok = (node.parent.kind === 202 && node.parent.expression === node) ||
-                (node.parent.kind === 203 && node.parent.expression === node) ||
-                ((node.kind === 78 || node.kind === 158) && isInRightSideOfImportOrExportAssignment(node) ||
-                    (node.parent.kind === 177 && node.parent.exprName === node)) ||
-                (node.parent.kind === 271);
+            var ok = (node.parent.kind === 204 && node.parent.expression === node) ||
+                (node.parent.kind === 205 && node.parent.expression === node) ||
+                ((node.kind === 79 || node.kind === 159) && isInRightSideOfImportOrExportAssignment(node) ||
+                    (node.parent.kind === 179 && node.parent.exprName === node)) ||
+                (node.parent.kind === 273);
             if (!ok) {
                 error(node, ts.Diagnostics.const_enums_can_only_be_used_in_property_or_index_access_expressions_or_the_right_hand_side_of_an_import_declaration_or_export_assignment_or_type_query);
             }
@@ -62454,7 +63683,7 @@
         function checkParenthesizedExpression(node, checkMode) {
             var tag = ts.isInJSFile(node) ? ts.getJSDocTypeTag(node) : undefined;
             if (tag) {
-                return checkAssertionWorker(tag, tag.typeExpression.type, node.expression, checkMode);
+                return checkAssertionWorker(tag.typeExpression.type, tag.typeExpression.type, node.expression, checkMode);
             }
             return checkExpression(node.expression, checkMode);
         }
@@ -62462,105 +63691,108 @@
             var kind = node.kind;
             if (cancellationToken) {
                 switch (kind) {
-                    case 222:
-                    case 209:
-                    case 210:
+                    case 224:
+                    case 211:
+                    case 212:
                         cancellationToken.throwIfCancellationRequested();
                 }
             }
             switch (kind) {
-                case 78:
+                case 79:
                     return checkIdentifier(node, checkMode);
-                case 107:
+                case 108:
                     return checkThisExpression(node);
-                case 105:
+                case 106:
                     return checkSuperExpression(node);
-                case 103:
+                case 104:
                     return nullWideningType;
                 case 14:
                 case 10:
-                    return getFreshTypeOfLiteralType(getLiteralType(node.text));
+                    return getFreshTypeOfLiteralType(getStringLiteralType(node.text));
                 case 8:
                     checkGrammarNumericLiteral(node);
-                    return getFreshTypeOfLiteralType(getLiteralType(+node.text));
+                    return getFreshTypeOfLiteralType(getNumberLiteralType(+node.text));
                 case 9:
                     checkGrammarBigIntLiteral(node);
-                    return getFreshTypeOfLiteralType(getBigIntLiteralType(node));
-                case 109:
+                    return getFreshTypeOfLiteralType(getBigIntLiteralType({
+                        negative: false,
+                        base10Value: ts.parsePseudoBigInt(node.text)
+                    }));
+                case 110:
                     return trueType;
-                case 94:
+                case 95:
                     return falseType;
-                case 219:
+                case 221:
                     return checkTemplateExpression(node);
                 case 13:
                     return globalRegExpType;
-                case 200:
-                    return checkArrayLiteral(node, checkMode, forceTuple);
-                case 201:
-                    return checkObjectLiteral(node, checkMode);
                 case 202:
-                    return checkPropertyAccessExpression(node, checkMode);
-                case 158:
-                    return checkQualifiedName(node, checkMode);
+                    return checkArrayLiteral(node, checkMode, forceTuple);
                 case 203:
-                    return checkIndexedAccess(node, checkMode);
+                    return checkObjectLiteral(node, checkMode);
                 case 204:
-                    if (node.expression.kind === 99) {
+                    return checkPropertyAccessExpression(node, checkMode);
+                case 159:
+                    return checkQualifiedName(node, checkMode);
+                case 205:
+                    return checkIndexedAccess(node, checkMode);
+                case 206:
+                    if (node.expression.kind === 100) {
                         return checkImportCallExpression(node);
                     }
-                case 205:
-                    return checkCallExpression(node, checkMode);
-                case 206:
-                    return checkTaggedTemplateExpression(node);
-                case 208:
-                    return checkParenthesizedExpression(node, checkMode);
-                case 222:
-                    return checkClassExpression(node);
-                case 209:
-                case 210:
-                    return checkFunctionExpressionOrObjectLiteralMethod(node, checkMode);
-                case 212:
-                    return checkTypeOfExpression(node);
                 case 207:
-                case 225:
-                    return checkAssertion(node);
-                case 226:
-                    return checkNonNullAssertion(node);
-                case 227:
-                    return checkMetaProperty(node);
+                    return checkCallExpression(node, checkMode);
+                case 208:
+                    return checkTaggedTemplateExpression(node);
+                case 210:
+                    return checkParenthesizedExpression(node, checkMode);
+                case 224:
+                    return checkClassExpression(node);
                 case 211:
-                    return checkDeleteExpression(node);
-                case 213:
-                    return checkVoidExpression(node);
+                case 212:
+                    return checkFunctionExpressionOrObjectLiteralMethod(node, checkMode);
                 case 214:
-                    return checkAwaitExpression(node);
-                case 215:
-                    return checkPrefixUnaryExpression(node);
-                case 216:
-                    return checkPostfixUnaryExpression(node);
-                case 217:
-                    return checkBinaryExpression(node, checkMode);
-                case 218:
-                    return checkConditionalExpression(node, checkMode);
-                case 221:
-                    return checkSpreadExpression(node, checkMode);
-                case 223:
-                    return undefinedWideningType;
-                case 220:
-                    return checkYieldExpression(node);
+                    return checkTypeOfExpression(node);
+                case 209:
+                case 227:
+                    return checkAssertion(node);
                 case 228:
+                    return checkNonNullAssertion(node);
+                case 229:
+                    return checkMetaProperty(node);
+                case 213:
+                    return checkDeleteExpression(node);
+                case 215:
+                    return checkVoidExpression(node);
+                case 216:
+                    return checkAwaitExpression(node);
+                case 217:
+                    return checkPrefixUnaryExpression(node);
+                case 218:
+                    return checkPostfixUnaryExpression(node);
+                case 219:
+                    return checkBinaryExpression(node, checkMode);
+                case 220:
+                    return checkConditionalExpression(node, checkMode);
+                case 223:
+                    return checkSpreadExpression(node, checkMode);
+                case 225:
+                    return undefinedWideningType;
+                case 222:
+                    return checkYieldExpression(node);
+                case 230:
                     return checkSyntheticExpression(node);
-                case 284:
+                case 286:
                     return checkJsxExpression(node, checkMode);
-                case 274:
-                    return checkJsxElement(node, checkMode);
-                case 275:
-                    return checkJsxSelfClosingElement(node, checkMode);
-                case 278:
-                    return checkJsxFragment(node);
-                case 282:
-                    return checkJsxAttributes(node, checkMode);
                 case 276:
+                    return checkJsxElement(node, checkMode);
+                case 277:
+                    return checkJsxSelfClosingElement(node, checkMode);
+                case 280:
+                    return checkJsxFragment(node);
+                case 284:
+                    return checkJsxAttributes(node, checkMode);
+                case 278:
                     ts.Debug.fail("Shouldn't ever directly check a JsxOpeningElement");
             }
             return errorType;
@@ -62590,10 +63822,10 @@
             checkVariableLikeDeclaration(node);
             var func = ts.getContainingFunction(node);
             if (ts.hasSyntacticModifier(node, 16476)) {
-                if (!(func.kind === 167 && ts.nodeIsPresent(func.body))) {
+                if (!(func.kind === 169 && ts.nodeIsPresent(func.body))) {
                     error(node, ts.Diagnostics.A_parameter_property_is_only_allowed_in_a_constructor_implementation);
                 }
-                if (func.kind === 167 && ts.isIdentifier(node.name) && node.name.escapedText === "constructor") {
+                if (func.kind === 169 && ts.isIdentifier(node.name) && node.name.escapedText === "constructor") {
                     error(node.name, ts.Diagnostics.constructor_cannot_be_used_as_a_parameter_property_name);
                 }
             }
@@ -62604,13 +63836,13 @@
                 if (func.parameters.indexOf(node) !== 0) {
                     error(node, ts.Diagnostics.A_0_parameter_must_be_the_first_parameter, node.name.escapedText);
                 }
-                if (func.kind === 167 || func.kind === 171 || func.kind === 176) {
+                if (func.kind === 169 || func.kind === 173 || func.kind === 178) {
                     error(node, ts.Diagnostics.A_constructor_cannot_have_a_this_parameter);
                 }
-                if (func.kind === 210) {
+                if (func.kind === 212) {
                     error(node, ts.Diagnostics.An_arrow_function_cannot_have_a_this_parameter);
                 }
-                if (func.kind === 168 || func.kind === 169) {
+                if (func.kind === 170 || func.kind === 171) {
                     error(node, ts.Diagnostics.get_and_set_accessors_cannot_declare_this_parameters);
                 }
             }
@@ -62664,13 +63896,13 @@
         }
         function getTypePredicateParent(node) {
             switch (node.parent.kind) {
-                case 210:
-                case 170:
-                case 252:
-                case 209:
-                case 175:
+                case 212:
+                case 172:
+                case 254:
+                case 211:
+                case 177:
+                case 167:
                 case 166:
-                case 165:
                     var parent = node.parent;
                     if (node === parent.type) {
                         return parent;
@@ -62684,11 +63916,11 @@
                     continue;
                 }
                 var name = element.name;
-                if (name.kind === 78 && name.escapedText === predicateVariableName) {
+                if (name.kind === 79 && name.escapedText === predicateVariableName) {
                     error(predicateVariableNode, ts.Diagnostics.A_type_predicate_cannot_reference_element_0_in_a_binding_pattern, predicateVariableName);
                     return true;
                 }
-                else if (name.kind === 198 || name.kind === 197) {
+                else if (name.kind === 200 || name.kind === 199) {
                     if (checkIfTypePredicateVariableIsDeclaredInBindingPattern(name, predicateVariableNode, predicateVariableName)) {
                         return true;
                     }
@@ -62696,12 +63928,12 @@
             }
         }
         function checkSignatureDeclaration(node) {
-            if (node.kind === 172) {
+            if (node.kind === 174) {
                 checkGrammarIndexSignature(node);
             }
-            else if (node.kind === 175 || node.kind === 252 || node.kind === 176 ||
-                node.kind === 170 || node.kind === 167 ||
-                node.kind === 171) {
+            else if (node.kind === 177 || node.kind === 254 || node.kind === 178 ||
+                node.kind === 172 || node.kind === 169 ||
+                node.kind === 173) {
                 checkGrammarFunctionLikeDeclaration(node);
             }
             var functionFlags = ts.getFunctionFlags(node);
@@ -62726,10 +63958,10 @@
                 var returnTypeNode = ts.getEffectiveReturnTypeNode(node);
                 if (noImplicitAny && !returnTypeNode) {
                     switch (node.kind) {
-                        case 171:
+                        case 173:
                             error(node, ts.Diagnostics.Construct_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type);
                             break;
-                        case 170:
+                        case 172:
                             error(node, ts.Diagnostics.Call_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type);
                             break;
                     }
@@ -62753,7 +63985,7 @@
                         checkAsyncFunctionReturnType(node, returnTypeNode);
                     }
                 }
-                if (node.kind !== 172 && node.kind !== 309) {
+                if (node.kind !== 174 && node.kind !== 312) {
                     registerForUnusedIdentifiersCheck(node);
                 }
             }
@@ -62764,7 +63996,7 @@
             var privateIdentifiers = new ts.Map();
             for (var _i = 0, _a = node.members; _i < _a.length; _i++) {
                 var member = _a[_i];
-                if (member.kind === 167) {
+                if (member.kind === 169) {
                     for (var _b = 0, _c = member.parameters; _b < _c.length; _b++) {
                         var param = _c[_b];
                         if (ts.isParameterPropertyDeclaration(param, member) && !ts.isBindingPattern(param.name)) {
@@ -62773,29 +64005,29 @@
                     }
                 }
                 else {
-                    var isStatic = ts.hasSyntacticModifier(member, 32);
+                    var isStaticMember = ts.isStatic(member);
                     var name = member.name;
                     if (!name) {
                         continue;
                     }
                     var isPrivate = ts.isPrivateIdentifier(name);
-                    var privateStaticFlags = isPrivate && isStatic ? 16 : 0;
+                    var privateStaticFlags = isPrivate && isStaticMember ? 16 : 0;
                     var names = isPrivate ? privateIdentifiers :
-                        isStatic ? staticNames :
+                        isStaticMember ? staticNames :
                             instanceNames;
                     var memberName = name && ts.getPropertyNameForPropertyNameNode(name);
                     if (memberName) {
                         switch (member.kind) {
-                            case 168:
+                            case 170:
                                 addName(names, name, memberName, 1 | privateStaticFlags);
                                 break;
-                            case 169:
+                            case 171:
                                 addName(names, name, memberName, 2 | privateStaticFlags);
                                 break;
-                            case 164:
+                            case 165:
                                 addName(names, name, memberName, 3 | privateStaticFlags);
                                 break;
-                            case 166:
+                            case 167:
                                 addName(names, name, memberName, 8 | privateStaticFlags);
                                 break;
                         }
@@ -62833,8 +64065,8 @@
             for (var _i = 0, _a = node.members; _i < _a.length; _i++) {
                 var member = _a[_i];
                 var memberNameNode = member.name;
-                var isStatic = ts.hasSyntacticModifier(member, 32);
-                if (isStatic && memberNameNode) {
+                var isStaticMember = ts.isStatic(member);
+                if (isStaticMember && memberNameNode) {
                     var memberName = ts.getPropertyNameForPropertyNameNode(memberNameNode);
                     switch (memberName) {
                         case "name":
@@ -62854,7 +64086,7 @@
             var names = new ts.Map();
             for (var _i = 0, _a = node.members; _i < _a.length; _i++) {
                 var member = _a[_i];
-                if (member.kind === 163) {
+                if (member.kind === 164) {
                     var memberName = void 0;
                     var name = member.name;
                     switch (name.kind) {
@@ -62862,7 +64094,7 @@
                         case 8:
                             memberName = name.text;
                             break;
-                        case 78:
+                        case 79:
                             memberName = ts.idText(name);
                             break;
                         default:
@@ -62879,7 +64111,7 @@
             }
         }
         function checkTypeForDuplicateIndexSignatures(node) {
-            if (node.kind === 254) {
+            if (node.kind === 256) {
                 var nodeSymbol = getSymbolOfNode(node);
                 if (nodeSymbol.declarations && nodeSymbol.declarations.length > 0 && nodeSymbol.declarations[0] !== node) {
                     return;
@@ -62887,32 +64119,32 @@
             }
             var indexSymbol = getIndexSymbol(getSymbolOfNode(node));
             if (indexSymbol === null || indexSymbol === void 0 ? void 0 : indexSymbol.declarations) {
-                var seenNumericIndexer = false;
-                var seenStringIndexer = false;
-                for (var _i = 0, _a = indexSymbol.declarations; _i < _a.length; _i++) {
-                    var decl = _a[_i];
-                    var declaration = decl;
+                var indexSignatureMap_1 = new ts.Map();
+                var _loop_26 = function (declaration) {
                     if (declaration.parameters.length === 1 && declaration.parameters[0].type) {
-                        switch (declaration.parameters[0].type.kind) {
-                            case 147:
-                                if (!seenStringIndexer) {
-                                    seenStringIndexer = true;
-                                }
-                                else {
-                                    error(declaration, ts.Diagnostics.Duplicate_string_index_signature);
-                                }
-                                break;
-                            case 144:
-                                if (!seenNumericIndexer) {
-                                    seenNumericIndexer = true;
-                                }
-                                else {
-                                    error(declaration, ts.Diagnostics.Duplicate_number_index_signature);
-                                }
-                                break;
+                        forEachType(getTypeFromTypeNode(declaration.parameters[0].type), function (type) {
+                            var entry = indexSignatureMap_1.get(getTypeId(type));
+                            if (entry) {
+                                entry.declarations.push(declaration);
+                            }
+                            else {
+                                indexSignatureMap_1.set(getTypeId(type), { type: type, declarations: [declaration] });
+                            }
+                        });
+                    }
+                };
+                for (var _i = 0, _a = indexSymbol.declarations; _i < _a.length; _i++) {
+                    var declaration = _a[_i];
+                    _loop_26(declaration);
+                }
+                indexSignatureMap_1.forEach(function (entry) {
+                    if (entry.declarations.length > 1) {
+                        for (var _i = 0, _a = entry.declarations; _i < _a.length; _i++) {
+                            var declaration = _a[_i];
+                            error(declaration, ts.Diagnostics.Duplicate_index_signature_for_type_0, typeToString(entry.type));
                         }
                     }
-                }
+                });
             }
         }
         function checkPropertyDeclaration(node) {
@@ -62923,6 +64155,9 @@
             if (ts.isPrivateIdentifier(node.name) && ts.hasStaticModifier(node) && node.initializer && languageVersion === 99 && !compilerOptions.useDefineForClassFields) {
                 error(node.initializer, ts.Diagnostics.Static_fields_with_private_names_can_t_have_initializers_when_the_useDefineForClassFields_flag_is_not_specified_with_a_target_of_esnext_Consider_adding_the_useDefineForClassFields_flag);
             }
+            if (ts.hasSyntacticModifier(node, 128) && node.kind === 165 && node.initializer) {
+                error(node, ts.Diagnostics.Property_0_cannot_have_an_initializer_because_it_is_marked_abstract, ts.declarationNameToString(node.name));
+            }
         }
         function checkPropertySignature(node) {
             if (ts.isPrivateIdentifier(node.name)) {
@@ -62934,7 +64169,7 @@
             if (!checkGrammarMethod(node))
                 checkGrammarComputedPropertyName(node.name);
             checkFunctionOrMethodDeclaration(node);
-            if (ts.hasSyntacticModifier(node, 128) && node.kind === 166 && node.body) {
+            if (ts.hasSyntacticModifier(node, 128) && node.kind === 167 && node.body) {
                 error(node, ts.Diagnostics.Method_0_cannot_have_an_implementation_because_it_is_marked_abstract, ts.declarationNameToString(node.name));
             }
             if (ts.isPrivateIdentifier(node.name) && !ts.getContainingClass(node)) {
@@ -62956,6 +64191,10 @@
                 }
             }
         }
+        function checkClassStaticBlockDeclaration(node) {
+            checkGrammarDecoratorsAndModifiers(node);
+            ts.forEachChild(node, checkSourceElement);
+        }
         function checkConstructorDeclaration(node) {
             checkSignatureDeclaration(node);
             if (!checkGrammarConstructorTypeParameters(node))
@@ -62976,8 +64215,8 @@
                 if (ts.isPrivateIdentifierClassElementDeclaration(n)) {
                     return true;
                 }
-                return n.kind === 164 &&
-                    !ts.hasSyntacticModifier(n, 32) &&
+                return n.kind === 165 &&
+                    !ts.isStatic(n) &&
                     !!n.initializer;
             }
             var containingClassDecl = node.parent;
@@ -62997,7 +64236,7 @@
                         var superCallStatement = void 0;
                         for (var _i = 0, statements_4 = statements; _i < statements_4.length; _i++) {
                             var statement = statements_4[_i];
-                            if (statement.kind === 234 && ts.isSuperCall(statement.expression)) {
+                            if (statement.kind === 236 && ts.isSuperCall(statement.expression)) {
                                 superCallStatement = statement;
                                 break;
                             }
@@ -63021,20 +64260,20 @@
                     checkGrammarComputedPropertyName(node.name);
                 checkDecorators(node);
                 checkSignatureDeclaration(node);
-                if (node.kind === 168) {
+                if (node.kind === 170) {
                     if (!(node.flags & 8388608) && ts.nodeIsPresent(node.body) && (node.flags & 256)) {
                         if (!(node.flags & 512)) {
                             error(node.name, ts.Diagnostics.A_get_accessor_must_return_a_value);
                         }
                     }
                 }
-                if (node.name.kind === 159) {
+                if (node.name.kind === 160) {
                     checkComputedPropertyName(node.name);
                 }
                 if (hasBindableName(node)) {
                     var symbol = getSymbolOfNode(node);
-                    var getter = ts.getDeclarationOfKind(symbol, 168);
-                    var setter = ts.getDeclarationOfKind(symbol, 169);
+                    var getter = ts.getDeclarationOfKind(symbol, 170);
+                    var setter = ts.getDeclarationOfKind(symbol, 171);
                     if (getter && setter && !(getNodeCheckFlags(getter) & 1)) {
                         getNodeLinks(getter).flags |= 1;
                         var getterFlags = ts.getEffectiveModifierFlags(getter);
@@ -63056,7 +64295,7 @@
                     }
                 }
                 var returnType = getTypeOfAccessors(getSymbolOfNode(node));
-                if (node.kind === 168) {
+                if (node.kind === 170) {
                     checkAllCodePathsInNonVoidFunctionReturnOrThrow(node, returnType);
                 }
             }
@@ -63098,7 +64337,7 @@
         }
         function checkTypeReferenceNode(node) {
             checkGrammarTypeArguments(node, node.typeArguments);
-            if (node.kind === 174 && node.typeName.jsdocDotPos !== undefined && !ts.isInJSFile(node) && !ts.isInJSDoc(node)) {
+            if (node.kind === 176 && node.typeName.jsdocDotPos !== undefined && !ts.isInJSFile(node) && !ts.isInJSDoc(node)) {
                 grammarErrorAtPos(node, node.typeName.jsdocDotPos, 1, ts.Diagnostics.JSDoc_types_can_only_be_used_inside_documentation_comments);
             }
             ts.forEach(node.typeArguments, checkSourceElement);
@@ -63151,7 +64390,7 @@
             var hasNamedElement = ts.some(elementTypes, ts.isNamedTupleMember);
             for (var _i = 0, elementTypes_1 = elementTypes; _i < elementTypes_1.length; _i++) {
                 var e = elementTypes_1[_i];
-                if (e.kind !== 193 && hasNamedElement) {
+                if (e.kind !== 195 && hasNamedElement) {
                     grammarErrorOnNode(e, ts.Diagnostics.Tuple_members_must_all_have_names_or_all_not_have_names);
                     break;
                 }
@@ -63199,14 +64438,14 @@
             var objectType = type.objectType;
             var indexType = type.indexType;
             if (isTypeAssignableTo(indexType, getIndexType(objectType, false))) {
-                if (accessNode.kind === 203 && ts.isAssignmentTarget(accessNode) &&
+                if (accessNode.kind === 205 && ts.isAssignmentTarget(accessNode) &&
                     ts.getObjectFlags(objectType) & 32 && getMappedTypeModifiers(objectType) & 1) {
                     error(accessNode, ts.Diagnostics.Index_signature_in_type_0_only_permits_reading, typeToString(objectType));
                 }
                 return type;
             }
             var apparentObjectType = getApparentType(objectType);
-            if (getIndexInfoOfType(apparentObjectType, 1) && isTypeAssignableToKind(indexType, 296)) {
+            if (getIndexInfoOfType(apparentObjectType, numberType) && isTypeAssignableToKind(indexType, 296)) {
                 return type;
             }
             if (isGenericObjectType(objectType)) {
@@ -63255,7 +64494,7 @@
             ts.forEachChild(node, checkSourceElement);
         }
         function checkInferType(node) {
-            if (!ts.findAncestor(node, function (n) { return n.parent && n.parent.kind === 185 && n.parent.extendsType === n; })) {
+            if (!ts.findAncestor(node, function (n) { return n.parent && n.parent.kind === 187 && n.parent.extendsType === n; })) {
                 grammarErrorOnNode(node, ts.Diagnostics.infer_declarations_are_only_permitted_in_the_extends_clause_of_a_conditional_type);
             }
             checkSourceElement(node.typeParameter);
@@ -63278,10 +64517,10 @@
             if (node.dotDotDotToken && node.questionToken) {
                 grammarErrorOnNode(node, ts.Diagnostics.A_tuple_member_cannot_be_both_optional_and_rest);
             }
-            if (node.type.kind === 181) {
+            if (node.type.kind === 183) {
                 grammarErrorOnNode(node.type, ts.Diagnostics.A_labeled_tuple_element_is_declared_as_optional_with_a_question_mark_after_the_name_and_before_the_colon_rather_than_after_the_type);
             }
-            if (node.type.kind === 182) {
+            if (node.type.kind === 184) {
                 grammarErrorOnNode(node.type, ts.Diagnostics.A_labeled_tuple_element_is_declared_as_rest_with_a_before_the_name_rather_than_before_the_type);
             }
             checkSourceElement(node.type);
@@ -63292,9 +64531,9 @@
         }
         function getEffectiveDeclarationFlags(n, flagsToCheck) {
             var flags = ts.getCombinedModifierFlags(n);
-            if (n.parent.kind !== 254 &&
-                n.parent.kind !== 253 &&
-                n.parent.kind !== 222 &&
+            if (n.parent.kind !== 256 &&
+                n.parent.kind !== 255 &&
+                n.parent.kind !== 224 &&
                 n.flags & 8388608) {
                 if (!(flags & 2) && !(ts.isModuleBlock(n.parent) && ts.isModuleDeclaration(n.parent.parent) && ts.isGlobalScopeAugmentation(n.parent.parent))) {
                     flags |= 1;
@@ -63375,10 +64614,10 @@
                             ts.isComputedPropertyName(node.name) && ts.isComputedPropertyName(subsequentName) ||
                             ts.isPropertyNameLiteral(node.name) && ts.isPropertyNameLiteral(subsequentName) &&
                                 ts.getEscapedTextOfIdentifierOrLiteral(node.name) === ts.getEscapedTextOfIdentifierOrLiteral(subsequentName))) {
-                            var reportError = (node.kind === 166 || node.kind === 165) &&
-                                ts.hasSyntacticModifier(node, 32) !== ts.hasSyntacticModifier(subsequentNode, 32);
+                            var reportError = (node.kind === 167 || node.kind === 166) &&
+                                ts.isStatic(node) !== ts.isStatic(subsequentNode);
                             if (reportError) {
-                                var diagnostic = ts.hasSyntacticModifier(node, 32) ? ts.Diagnostics.Function_overload_must_be_static : ts.Diagnostics.Function_overload_must_not_be_static;
+                                var diagnostic = ts.isStatic(node) ? ts.Diagnostics.Function_overload_must_be_static : ts.Diagnostics.Function_overload_must_not_be_static;
                                 error(errorNode_1, diagnostic);
                             }
                             return;
@@ -63411,14 +64650,14 @@
                     var current = declarations_4[_i];
                     var node = current;
                     var inAmbientContext = node.flags & 8388608;
-                    var inAmbientContextOrInterface = node.parent && (node.parent.kind === 254 || node.parent.kind === 178) || inAmbientContext;
+                    var inAmbientContextOrInterface = node.parent && (node.parent.kind === 256 || node.parent.kind === 180) || inAmbientContext;
                     if (inAmbientContextOrInterface) {
                         previousDeclaration = undefined;
                     }
-                    if ((node.kind === 253 || node.kind === 222) && !inAmbientContext) {
+                    if ((node.kind === 255 || node.kind === 224) && !inAmbientContext) {
                         hasNonAmbientClass = true;
                     }
-                    if (node.kind === 252 || node.kind === 166 || node.kind === 165 || node.kind === 167) {
+                    if (node.kind === 254 || node.kind === 167 || node.kind === 166 || node.kind === 169) {
                         functionDeclarations.push(node);
                         var currentNodeFlags = getEffectiveDeclarationFlags(node, flagsToCheck);
                         someNodeFlags |= currentNodeFlags;
@@ -63462,9 +64701,18 @@
                     error(ts.getNameOfDeclaration(declaration) || declaration, ts.Diagnostics.Duplicate_function_implementation);
                 });
             }
-            if (hasNonAmbientClass && !isConstructor && symbol.flags & 16) {
+            if (hasNonAmbientClass && !isConstructor && symbol.flags & 16 && declarations) {
+                var relatedDiagnostics_1 = ts.filter(declarations, function (d) { return d.kind === 255; })
+                    .map(function (d) { return ts.createDiagnosticForNode(d, ts.Diagnostics.Consider_adding_a_declare_modifier_to_this_class); });
                 ts.forEach(declarations, function (declaration) {
-                    addDuplicateDeclarationError(declaration, ts.Diagnostics.Duplicate_identifier_0, ts.symbolName(symbol), declarations);
+                    var diagnostic = declaration.kind === 255
+                        ? ts.Diagnostics.Class_declaration_cannot_implement_overload_list_for_0
+                        : declaration.kind === 254
+                            ? ts.Diagnostics.Function_with_bodies_can_only_merge_with_classes_that_are_ambient
+                            : undefined;
+                    if (diagnostic) {
+                        ts.addRelatedInfo.apply(void 0, __spreadArray([error(ts.getNameOfDeclaration(declaration) || declaration, diagnostic, ts.symbolName(symbol))], relatedDiagnostics_1, false));
+                    }
                 });
             }
             if (lastSeenNonAmbientDeclaration && !lastSeenNonAmbientDeclaration.body &&
@@ -63541,42 +64789,42 @@
             function getDeclarationSpaces(decl) {
                 var d = decl;
                 switch (d.kind) {
-                    case 254:
-                    case 255:
-                    case 335:
-                    case 328:
-                    case 329:
-                        return 2;
+                    case 256:
                     case 257:
+                    case 340:
+                    case 333:
+                    case 334:
+                        return 2;
+                    case 259:
                         return ts.isAmbientModule(d) || ts.getModuleInstanceState(d) !== 0
                             ? 4 | 1
                             : 4;
-                    case 253:
-                    case 256:
-                    case 292:
+                    case 255:
+                    case 258:
+                    case 294:
                         return 2 | 1;
-                    case 298:
+                    case 300:
                         return 2 | 1 | 4;
-                    case 267:
-                    case 217:
+                    case 269:
+                    case 219:
                         var node_2 = d;
                         var expression = ts.isExportAssignment(node_2) ? node_2.expression : node_2.right;
                         if (!ts.isEntityNameExpression(expression)) {
                             return 1;
                         }
                         d = expression;
-                    case 261:
-                    case 264:
                     case 263:
-                        var result_13 = 0;
-                        var target = resolveAlias(getSymbolOfNode(d));
-                        ts.forEach(target.declarations, function (d) { result_13 |= getDeclarationSpaces(d); });
-                        return result_13;
-                    case 250:
-                    case 199:
-                    case 252:
                     case 266:
-                    case 78:
+                    case 265:
+                        var result_12 = 0;
+                        var target = resolveAlias(getSymbolOfNode(d));
+                        ts.forEach(target.declarations, function (d) { result_12 |= getDeclarationSpaces(d); });
+                        return result_12;
+                    case 252:
+                    case 201:
+                    case 254:
+                    case 268:
+                    case 79:
                         return 1;
                     default:
                         return ts.Debug.failBadSyntaxKind(d);
@@ -63697,7 +64945,7 @@
                 var promiseConstructorSymbol = resolveEntityName(promiseConstructorName, 111551, true);
                 var promiseConstructorType = promiseConstructorSymbol ? getTypeOfSymbol(promiseConstructorSymbol) : errorType;
                 if (promiseConstructorType === errorType) {
-                    if (promiseConstructorName.kind === 78 && promiseConstructorName.escapedText === "Promise" && getTargetType(returnType) === getGlobalPromiseType(false)) {
+                    if (promiseConstructorName.kind === 79 && promiseConstructorName.escapedText === "Promise" && getTargetType(returnType) === getGlobalPromiseType(false)) {
                         error(returnTypeNode, ts.Diagnostics.An_async_function_or_method_in_ES5_SlashES3_requires_the_Promise_constructor_Make_sure_you_have_a_declaration_for_the_Promise_constructor_or_include_ES2015_in_your_lib_option);
                     }
                     else {
@@ -63733,22 +64981,22 @@
             var headMessage = getDiagnosticHeadMessageForDecoratorResolution(node);
             var errorInfo;
             switch (node.parent.kind) {
-                case 253:
+                case 255:
                     var classSymbol = getSymbolOfNode(node.parent);
                     var classConstructorType = getTypeOfSymbol(classSymbol);
                     expectedReturnType = getUnionType([classConstructorType, voidType]);
                     break;
-                case 161:
+                case 162:
                     expectedReturnType = voidType;
                     errorInfo = ts.chainDiagnosticMessages(undefined, ts.Diagnostics.The_return_type_of_a_parameter_decorator_function_must_be_either_void_or_any);
                     break;
-                case 164:
+                case 165:
                     expectedReturnType = voidType;
                     errorInfo = ts.chainDiagnosticMessages(undefined, ts.Diagnostics.The_return_type_of_a_property_decorator_function_must_be_either_void_or_any);
                     break;
-                case 166:
-                case 168:
-                case 169:
+                case 167:
+                case 170:
+                case 171:
                     var methodType = getTypeOfNode(node.parent);
                     var descriptorType = createTypedPropertyDescriptorType(methodType);
                     expectedReturnType = getUnionType([descriptorType, voidType]);
@@ -63765,7 +65013,7 @@
             if (!typeName)
                 return;
             var rootName = ts.getFirstIdentifier(typeName);
-            var meaning = (typeName.kind === 78 ? 788968 : 1920) | 2097152;
+            var meaning = (typeName.kind === 79 ? 788968 : 1920) | 2097152;
             var rootSymbol = resolveName(rootName, rootName.escapedText, meaning, undefined, undefined, true);
             if (rootSymbol
                 && rootSymbol.flags & 2097152
@@ -63784,30 +65032,30 @@
         function getEntityNameForDecoratorMetadata(node) {
             if (node) {
                 switch (node.kind) {
-                    case 184:
-                    case 183:
-                        return getEntityNameForDecoratorMetadataFromTypeList(node.types);
+                    case 186:
                     case 185:
-                        return getEntityNameForDecoratorMetadataFromTypeList([node.trueType, node.falseType]);
+                        return getEntityNameForDecoratorMetadataFromTypeList(node.types);
                     case 187:
-                    case 193:
+                        return getEntityNameForDecoratorMetadataFromTypeList([node.trueType, node.falseType]);
+                    case 189:
+                    case 195:
                         return getEntityNameForDecoratorMetadata(node.type);
-                    case 174:
+                    case 176:
                         return node.typeName;
                 }
             }
         }
         function getEntityNameForDecoratorMetadataFromTypeList(types) {
             var commonEntityName;
-            for (var _i = 0, types_23 = types; _i < types_23.length; _i++) {
-                var typeNode = types_23[_i];
-                while (typeNode.kind === 187 || typeNode.kind === 193) {
+            for (var _i = 0, types_22 = types; _i < types_22.length; _i++) {
+                var typeNode = types_22[_i];
+                while (typeNode.kind === 189 || typeNode.kind === 195) {
                     typeNode = typeNode.type;
                 }
-                if (typeNode.kind === 141) {
+                if (typeNode.kind === 142) {
                     continue;
                 }
-                if (!strictNullChecks && (typeNode.kind === 192 && typeNode.literal.kind === 103 || typeNode.kind === 150)) {
+                if (!strictNullChecks && (typeNode.kind === 194 && typeNode.literal.kind === 104 || typeNode.kind === 151)) {
                     continue;
                 }
                 var individualEntityName = getEntityNameForDecoratorMetadata(typeNode);
@@ -63843,13 +65091,13 @@
             }
             var firstDecorator = node.decorators[0];
             checkExternalEmitHelpers(firstDecorator, 8);
-            if (node.kind === 161) {
+            if (node.kind === 162) {
                 checkExternalEmitHelpers(firstDecorator, 32);
             }
             if (compilerOptions.emitDecoratorMetadata) {
                 checkExternalEmitHelpers(firstDecorator, 16);
                 switch (node.kind) {
-                    case 253:
+                    case 255:
                         var constructor = ts.getFirstConstructorWithBody(node);
                         if (constructor) {
                             for (var _i = 0, _a = constructor.parameters; _i < _a.length; _i++) {
@@ -63858,23 +65106,23 @@
                             }
                         }
                         break;
-                    case 168:
-                    case 169:
-                        var otherKind = node.kind === 168 ? 169 : 168;
+                    case 170:
+                    case 171:
+                        var otherKind = node.kind === 170 ? 171 : 170;
                         var otherAccessor = ts.getDeclarationOfKind(getSymbolOfNode(node), otherKind);
                         markDecoratorMedataDataTypeNodeAsReferenced(getAnnotatedAccessorTypeNode(node) || otherAccessor && getAnnotatedAccessorTypeNode(otherAccessor));
                         break;
-                    case 166:
+                    case 167:
                         for (var _b = 0, _c = node.parameters; _b < _c.length; _b++) {
                             var parameter = _c[_b];
                             markDecoratorMedataDataTypeNodeAsReferenced(getParameterTypeNodeForDecoratorCheck(parameter));
                         }
                         markDecoratorMedataDataTypeNodeAsReferenced(ts.getEffectiveReturnTypeNode(node));
                         break;
-                    case 164:
+                    case 165:
                         markDecoratorMedataDataTypeNodeAsReferenced(ts.getEffectiveTypeAnnotationNode(node));
                         break;
-                    case 161:
+                    case 162:
                         markDecoratorMedataDataTypeNodeAsReferenced(getParameterTypeNodeForDecoratorCheck(node));
                         var containingSignature = node.parent;
                         for (var _d = 0, _e = containingSignature.parameters; _d < _e.length; _d++) {
@@ -63890,8 +65138,7 @@
             if (produceDiagnostics) {
                 checkFunctionOrMethodDeclaration(node);
                 checkGrammarForGenerator(node);
-                checkCollisionWithRequireExportsInGeneratedCode(node, node.name);
-                checkCollisionWithGlobalPromiseInGeneratedCode(node, node.name);
+                checkCollisionsForDeclarationName(node, node.name);
             }
         }
         function checkJSDocTypeAliasTag(node) {
@@ -63933,7 +65180,7 @@
                     else if (ts.findLast(ts.getJSDocTags(decl), ts.isJSDocParameterTag) === node &&
                         node.typeExpression && node.typeExpression.type &&
                         !isArrayType(getTypeFromTypeNode(node.typeExpression.type))) {
-                        error(node.name, ts.Diagnostics.JSDoc_param_tag_has_name_0_but_there_is_no_parameter_with_that_name_It_would_match_arguments_if_it_had_an_array_type, ts.idText(node.name.kind === 158 ? node.name.right : node.name));
+                        error(node.name, ts.Diagnostics.JSDoc_param_tag_has_name_0_but_there_is_no_parameter_with_that_name_It_would_match_arguments_if_it_had_an_array_type, ts.idText(node.name.kind === 159 ? node.name.right : node.name));
                     }
                 }
             }
@@ -63975,9 +65222,9 @@
         }
         function getIdentifierFromEntityNameExpression(node) {
             switch (node.kind) {
-                case 78:
+                case 79:
                     return node;
-                case 202:
+                case 204:
                     return node.name;
                 default:
                     return undefined;
@@ -63988,7 +65235,7 @@
             checkDecorators(node);
             checkSignatureDeclaration(node);
             var functionFlags = ts.getFunctionFlags(node);
-            if (node.name && node.name.kind === 159) {
+            if (node.name && node.name.kind === 160) {
                 checkComputedPropertyName(node.name);
             }
             if (hasBindableName(node)) {
@@ -64002,7 +65249,7 @@
                     checkFunctionOrConstructorSymbol(symbol);
                 }
             }
-            var body = node.kind === 165 ? undefined : node.body;
+            var body = node.kind === 166 ? undefined : node.body;
             checkSourceElement(body);
             checkAllCodePathsInNonVoidFunctionReturnOrThrow(node, getReturnTypeFromAnnotation(node));
             if (produceDiagnostics && !ts.getEffectiveReturnTypeNode(node)) {
@@ -64035,42 +65282,42 @@
             for (var _i = 0, potentiallyUnusedIdentifiers_1 = potentiallyUnusedIdentifiers; _i < potentiallyUnusedIdentifiers_1.length; _i++) {
                 var node = potentiallyUnusedIdentifiers_1[_i];
                 switch (node.kind) {
-                    case 253:
-                    case 222:
+                    case 255:
+                    case 224:
                         checkUnusedClassMembers(node, addDiagnostic);
                         checkUnusedTypeParameters(node, addDiagnostic);
                         break;
-                    case 298:
-                    case 257:
-                    case 231:
+                    case 300:
                     case 259:
-                    case 238:
-                    case 239:
+                    case 233:
+                    case 261:
                     case 240:
+                    case 241:
+                    case 242:
                         checkUnusedLocalsAndParameters(node, addDiagnostic);
                         break;
-                    case 167:
-                    case 209:
-                    case 252:
-                    case 210:
-                    case 166:
-                    case 168:
                     case 169:
+                    case 211:
+                    case 254:
+                    case 212:
+                    case 167:
+                    case 170:
+                    case 171:
                         if (node.body) {
                             checkUnusedLocalsAndParameters(node, addDiagnostic);
                         }
                         checkUnusedTypeParameters(node, addDiagnostic);
                         break;
-                    case 165:
-                    case 170:
-                    case 171:
-                    case 175:
-                    case 176:
-                    case 255:
-                    case 254:
+                    case 166:
+                    case 172:
+                    case 173:
+                    case 177:
+                    case 178:
+                    case 257:
+                    case 256:
                         checkUnusedTypeParameters(node, addDiagnostic);
                         break;
-                    case 186:
+                    case 188:
                         checkUnusedInferTypeParameter(node, addDiagnostic);
                         break;
                     default:
@@ -64090,11 +65337,11 @@
             for (var _i = 0, _a = node.members; _i < _a.length; _i++) {
                 var member = _a[_i];
                 switch (member.kind) {
-                    case 166:
-                    case 164:
-                    case 168:
-                    case 169:
-                        if (member.kind === 169 && member.symbol.flags & 32768) {
+                    case 167:
+                    case 165:
+                    case 170:
+                    case 171:
+                        if (member.kind === 171 && member.symbol.flags & 32768) {
                             break;
                         }
                         var symbol = getSymbolOfNode(member);
@@ -64104,7 +65351,7 @@
                             addDiagnostic(member, 0, ts.createDiagnosticForNode(member.name, ts.Diagnostics._0_is_declared_but_its_value_is_never_read, symbolToString(symbol)));
                         }
                         break;
-                    case 167:
+                    case 169:
                         for (var _b = 0, _c = member.parameters; _b < _c.length; _b++) {
                             var parameter = _c[_b];
                             if (!parameter.symbol.isReferenced && ts.hasSyntacticModifier(parameter, 8)) {
@@ -64112,11 +65359,12 @@
                             }
                         }
                         break;
-                    case 172:
-                    case 230:
+                    case 174:
+                    case 232:
+                    case 168:
                         break;
                     default:
-                        ts.Debug.fail();
+                        ts.Debug.fail("Unexpected class member");
                 }
             }
         }
@@ -64138,7 +65386,7 @@
                     continue;
                 var name = ts.idText(typeParameter.name);
                 var parent = typeParameter.parent;
-                if (parent.kind !== 186 && parent.typeParameters.every(isTypeParameterUnused)) {
+                if (parent.kind !== 188 && parent.typeParameters.every(isTypeParameterUnused)) {
                     if (ts.tryAddToSet(seenParentsWithEveryUnused, parent)) {
                         var sourceFile = ts.getSourceFileOfNode(parent);
                         var range = ts.isJSDocTemplateTag(parent)
@@ -64232,7 +65480,7 @@
                 var importDecl = importClause.parent;
                 var nDeclarations = (importClause.name ? 1 : 0) +
                     (importClause.namedBindings ?
-                        (importClause.namedBindings.kind === 264 ? 1 : importClause.namedBindings.elements.length)
+                        (importClause.namedBindings.kind === 266 ? 1 : importClause.namedBindings.elements.length)
                         : 0);
                 if (nDeclarations === unuseds.length) {
                     addDiagnostic(importDecl, 0, unuseds.length === 1
@@ -64250,7 +65498,7 @@
                 var bindingPattern = _a[0], bindingElements = _a[1];
                 var kind = tryGetRootParameterDeclaration(bindingPattern.parent) ? 1 : 0;
                 if (bindingPattern.elements.length === bindingElements.length) {
-                    if (bindingElements.length === 1 && bindingPattern.parent.kind === 250 && bindingPattern.parent.parent.kind === 251) {
+                    if (bindingElements.length === 1 && bindingPattern.parent.kind === 252 && bindingPattern.parent.parent.kind === 253) {
                         addToGroup(unusedVariables, bindingPattern.parent.parent, bindingPattern.parent, getNodeId);
                     }
                     else {
@@ -64271,7 +65519,7 @@
                 if (declarationList.declarations.length === declarations.length) {
                     addDiagnostic(declarationList, 0, declarations.length === 1
                         ? ts.createDiagnosticForNode(ts.first(declarations).name, ts.Diagnostics._0_is_declared_but_its_value_is_never_read, bindingNameText(ts.first(declarations).name))
-                        : ts.createDiagnosticForNode(declarationList.parent.kind === 233 ? declarationList.parent : declarationList, ts.Diagnostics.All_variables_are_unused));
+                        : ts.createDiagnosticForNode(declarationList.parent.kind === 235 ? declarationList.parent : declarationList, ts.Diagnostics.All_variables_are_unused));
                 }
                 else {
                     for (var _i = 0, declarations_5 = declarations; _i < declarations_5.length; _i++) {
@@ -64283,23 +65531,23 @@
         }
         function bindingNameText(name) {
             switch (name.kind) {
-                case 78:
+                case 79:
                     return ts.idText(name);
-                case 198:
-                case 197:
+                case 200:
+                case 199:
                     return bindingNameText(ts.cast(ts.first(name.elements), ts.isBindingElement).name);
                 default:
                     return ts.Debug.assertNever(name);
             }
         }
         function isImportedDeclaration(node) {
-            return node.kind === 263 || node.kind === 266 || node.kind === 264;
+            return node.kind === 265 || node.kind === 268 || node.kind === 266;
         }
         function importClauseFromImported(decl) {
-            return decl.kind === 263 ? decl : decl.kind === 264 ? decl.parent : decl.parent.parent;
+            return decl.kind === 265 ? decl : decl.kind === 266 ? decl.parent : decl.parent.parent;
         }
         function checkBlock(node) {
-            if (node.kind === 231) {
+            if (node.kind === 233) {
                 checkGrammarStatementInAmbientContext(node);
             }
             if (ts.isFunctionOrModuleBlock(node)) {
@@ -64325,22 +65573,28 @@
             });
         }
         function needCollisionCheckForIdentifier(node, identifier, name) {
-            if (!(identifier && identifier.escapedText === name)) {
+            if ((identifier === null || identifier === void 0 ? void 0 : identifier.escapedText) !== name) {
                 return false;
             }
-            if (node.kind === 164 ||
-                node.kind === 163 ||
+            if (node.kind === 165 ||
+                node.kind === 164 ||
+                node.kind === 167 ||
                 node.kind === 166 ||
-                node.kind === 165 ||
-                node.kind === 168 ||
-                node.kind === 169) {
+                node.kind === 170 ||
+                node.kind === 171 ||
+                node.kind === 291) {
                 return false;
             }
             if (node.flags & 8388608) {
                 return false;
             }
+            if (ts.isImportClause(node) || ts.isImportEqualsDeclaration(node) || ts.isImportSpecifier(node)) {
+                if (ts.isTypeOnlyImportOrExportDeclaration(node)) {
+                    return false;
+                }
+            }
             var root = ts.getRootDeclaration(node);
-            if (root.kind === 161 && ts.nodeIsMissing(root.parent.body)) {
+            if (ts.isParameter(root) && ts.nodeIsMissing(root.parent.body)) {
                 return false;
             }
             return true;
@@ -64348,7 +65602,7 @@
         function checkIfThisIsCapturedInEnclosingScope(node) {
             ts.findAncestor(node, function (current) {
                 if (getNodeCheckFlags(current) & 4) {
-                    var isDeclaration_1 = node.kind !== 78;
+                    var isDeclaration_1 = node.kind !== 79;
                     if (isDeclaration_1) {
                         error(ts.getNameOfDeclaration(node), ts.Diagnostics.Duplicate_identifier_this_Compiler_uses_variable_declaration_this_to_capture_this_reference);
                     }
@@ -64363,7 +65617,7 @@
         function checkIfNewTargetIsCapturedInEnclosingScope(node) {
             ts.findAncestor(node, function (current) {
                 if (getNodeCheckFlags(current) & 8) {
-                    var isDeclaration_2 = node.kind !== 78;
+                    var isDeclaration_2 = node.kind !== 79;
                     if (isDeclaration_2) {
                         error(ts.getNameOfDeclaration(node), ts.Diagnostics.Duplicate_identifier_newTarget_Compiler_uses_variable_declaration_newTarget_to_capture_new_target_meta_property_reference);
                     }
@@ -64375,6 +65629,39 @@
                 return false;
             });
         }
+        function checkCollisionWithRequireExportsInGeneratedCode(node, name) {
+            if (moduleKind >= ts.ModuleKind.ES2015) {
+                return;
+            }
+            if (!name || !needCollisionCheckForIdentifier(node, name, "require") && !needCollisionCheckForIdentifier(node, name, "exports")) {
+                return;
+            }
+            if (ts.isModuleDeclaration(node) && ts.getModuleInstanceState(node) !== 1) {
+                return;
+            }
+            var parent = getDeclarationContainer(node);
+            if (parent.kind === 300 && ts.isExternalOrCommonJsModule(parent)) {
+                errorSkippedOn("noEmit", name, ts.Diagnostics.Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module, ts.declarationNameToString(name), ts.declarationNameToString(name));
+            }
+        }
+        function checkCollisionWithGlobalPromiseInGeneratedCode(node, name) {
+            if (!name || languageVersion >= 4 || !needCollisionCheckForIdentifier(node, name, "Promise")) {
+                return;
+            }
+            if (ts.isModuleDeclaration(node) && ts.getModuleInstanceState(node) !== 1) {
+                return;
+            }
+            var parent = getDeclarationContainer(node);
+            if (parent.kind === 300 && ts.isExternalOrCommonJsModule(parent) && parent.flags & 2048) {
+                errorSkippedOn("noEmit", name, ts.Diagnostics.Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module_containing_async_functions, ts.declarationNameToString(name), ts.declarationNameToString(name));
+            }
+        }
+        function recordPotentialCollisionWithWeakMapSetInGeneratedCode(node, name) {
+            if (languageVersion <= 8
+                && (needCollisionCheckForIdentifier(node, name, "WeakMap") || needCollisionCheckForIdentifier(node, name, "WeakSet"))) {
+                potentialWeakMapSetCollisions.push(node);
+            }
+        }
         function checkWeakMapSetCollision(node) {
             var enclosingBlockScope = ts.getEnclosingBlockScopeContainer(node);
             if (getNodeCheckFlags(enclosingBlockScope) & 67108864) {
@@ -64382,38 +65669,61 @@
                 errorSkippedOn("noEmit", node, ts.Diagnostics.Compiler_reserves_name_0_when_emitting_private_identifier_downlevel, node.name.escapedText);
             }
         }
-        function checkCollisionWithRequireExportsInGeneratedCode(node, name) {
-            if (moduleKind >= ts.ModuleKind.ES2015) {
-                return;
-            }
-            if (!needCollisionCheckForIdentifier(node, name, "require") && !needCollisionCheckForIdentifier(node, name, "exports")) {
-                return;
-            }
-            if (ts.isModuleDeclaration(node) && ts.getModuleInstanceState(node) !== 1) {
-                return;
-            }
-            var parent = getDeclarationContainer(node);
-            if (parent.kind === 298 && ts.isExternalOrCommonJsModule(parent)) {
-                errorSkippedOn("noEmit", name, ts.Diagnostics.Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module, ts.declarationNameToString(name), ts.declarationNameToString(name));
+        function recordPotentialCollisionWithReflectInGeneratedCode(node, name) {
+            if (name && languageVersion >= 2 && languageVersion <= 8
+                && needCollisionCheckForIdentifier(node, name, "Reflect")) {
+                potentialReflectCollisions.push(node);
             }
         }
-        function checkCollisionWithGlobalPromiseInGeneratedCode(node, name) {
-            if (languageVersion >= 4 || !needCollisionCheckForIdentifier(node, name, "Promise")) {
-                return;
+        function checkReflectCollision(node) {
+            var hasCollision = false;
+            if (ts.isClassExpression(node)) {
+                for (var _i = 0, _a = node.members; _i < _a.length; _i++) {
+                    var member = _a[_i];
+                    if (getNodeCheckFlags(member) & 134217728) {
+                        hasCollision = true;
+                        break;
+                    }
+                }
             }
-            if (ts.isModuleDeclaration(node) && ts.getModuleInstanceState(node) !== 1) {
-                return;
+            else if (ts.isFunctionExpression(node)) {
+                if (getNodeCheckFlags(node) & 134217728) {
+                    hasCollision = true;
+                }
             }
-            var parent = getDeclarationContainer(node);
-            if (parent.kind === 298 && ts.isExternalOrCommonJsModule(parent) && parent.flags & 2048) {
-                errorSkippedOn("noEmit", name, ts.Diagnostics.Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module_containing_async_functions, ts.declarationNameToString(name), ts.declarationNameToString(name));
+            else {
+                var container = ts.getEnclosingBlockScopeContainer(node);
+                if (container && getNodeCheckFlags(container) & 134217728) {
+                    hasCollision = true;
+                }
+            }
+            if (hasCollision) {
+                ts.Debug.assert(ts.isNamedDeclaration(node) && ts.isIdentifier(node.name), "The target of a Reflect collision check should be an identifier");
+                errorSkippedOn("noEmit", node, ts.Diagnostics.Duplicate_identifier_0_Compiler_reserves_name_1_when_emitting_super_references_in_static_initializers, ts.declarationNameToString(node.name), "Reflect");
+            }
+        }
+        function checkCollisionsForDeclarationName(node, name) {
+            if (!name)
+                return;
+            checkCollisionWithRequireExportsInGeneratedCode(node, name);
+            checkCollisionWithGlobalPromiseInGeneratedCode(node, name);
+            recordPotentialCollisionWithWeakMapSetInGeneratedCode(node, name);
+            recordPotentialCollisionWithReflectInGeneratedCode(node, name);
+            if (ts.isClassLike(node)) {
+                checkTypeNameIsReserved(name, ts.Diagnostics.Class_name_cannot_be_0);
+                if (!(node.flags & 8388608)) {
+                    checkClassNameCollisionWithObject(name);
+                }
+            }
+            else if (ts.isEnumDeclaration(node)) {
+                checkTypeNameIsReserved(name, ts.Diagnostics.Enum_name_cannot_be_0);
             }
         }
         function checkVarDeclaredNamesNotShadowed(node) {
             if ((ts.getCombinedNodeFlags(node) & 3) !== 0 || ts.isParameterDeclaration(node)) {
                 return;
             }
-            if (node.kind === 250 && !node.initializer) {
+            if (node.kind === 252 && !node.initializer) {
                 return;
             }
             var symbol = getSymbolOfNode(node);
@@ -64425,15 +65735,15 @@
                     localDeclarationSymbol !== symbol &&
                     localDeclarationSymbol.flags & 2) {
                     if (getDeclarationNodeFlagsFromSymbol(localDeclarationSymbol) & 3) {
-                        var varDeclList = ts.getAncestor(localDeclarationSymbol.valueDeclaration, 251);
-                        var container = varDeclList.parent.kind === 233 && varDeclList.parent.parent
+                        var varDeclList = ts.getAncestor(localDeclarationSymbol.valueDeclaration, 253);
+                        var container = varDeclList.parent.kind === 235 && varDeclList.parent.parent
                             ? varDeclList.parent.parent
                             : undefined;
                         var namesShareScope = container &&
-                            (container.kind === 231 && ts.isFunctionLike(container.parent) ||
-                                container.kind === 258 ||
-                                container.kind === 257 ||
-                                container.kind === 298);
+                            (container.kind === 233 && ts.isFunctionLike(container.parent) ||
+                                container.kind === 260 ||
+                                container.kind === 259 ||
+                                container.kind === 300);
                         if (!namesShareScope) {
                             var name = symbolToString(localDeclarationSymbol);
                             error(node, ts.Diagnostics.Cannot_initialize_outer_scoped_variable_0_in_the_same_scope_as_block_scoped_declaration_1, name, name);
@@ -64454,7 +65764,7 @@
             if (!node.name) {
                 return;
             }
-            if (node.name.kind === 159) {
+            if (node.name.kind === 160) {
                 checkComputedPropertyName(node.name);
                 if (node.initializer) {
                     checkExpressionCached(node.initializer);
@@ -64464,7 +65774,7 @@
                 if (ts.isObjectBindingPattern(node.parent) && node.dotDotDotToken && languageVersion < 5) {
                     checkExternalEmitHelpers(node, 4);
                 }
-                if (node.propertyName && node.propertyName.kind === 159) {
+                if (node.propertyName && node.propertyName.kind === 160) {
                     checkComputedPropertyName(node.propertyName);
                 }
                 var parent = node.parent.parent;
@@ -64477,13 +65787,13 @@
                         var property = getPropertyOfType(parentType, nameText);
                         if (property) {
                             markPropertyAsReferenced(property, undefined, false);
-                            checkPropertyAccessibility(node, !!parent.initializer && parent.initializer.kind === 105, false, parentType, property);
+                            checkPropertyAccessibility(node, !!parent.initializer && parent.initializer.kind === 106, false, parentType, property);
                         }
                     }
                 }
             }
             if (ts.isBindingPattern(node.name)) {
-                if (node.name.kind === 198 && languageVersion < 2 && compilerOptions.downlevelIteration) {
+                if (node.name.kind === 200 && languageVersion < 2 && compilerOptions.downlevelIteration) {
                     checkExternalEmitHelpers(node, 512);
                 }
                 ts.forEach(node.name.elements, checkSourceElement);
@@ -64493,7 +65803,7 @@
                 return;
             }
             if (ts.isBindingPattern(node.name)) {
-                var needCheckInitializer = node.initializer && node.parent.parent.kind !== 239;
+                var needCheckInitializer = node.initializer && node.parent.parent.kind !== 241;
                 var needCheckWidenedType = node.name.elements.length === 0;
                 if (needCheckInitializer || needCheckWidenedType) {
                     var widenedType = getWidenedTypeForVariableLikeDeclaration(node);
@@ -64530,7 +65840,7 @@
                         ts.isObjectLiteralExpression(initializer) &&
                         (initializer.properties.length === 0 || ts.isPrototypeAccess(node.name)) &&
                         !!((_a = symbol.exports) === null || _a === void 0 ? void 0 : _a.size);
-                    if (!isJSObjectLiteralInitializer && node.parent.parent.kind !== 239) {
+                    if (!isJSObjectLiteralInitializer && node.parent.parent.kind !== 241) {
                         checkTypeAssignableToAndOptionallyElaborate(checkExpressionCached(initializer), type, node, initializer, undefined);
                     }
                 }
@@ -64554,22 +65864,17 @@
                     error(node.name, ts.Diagnostics.All_declarations_of_0_must_have_identical_modifiers, ts.declarationNameToString(node.name));
                 }
             }
-            if (node.kind !== 164 && node.kind !== 163) {
+            if (node.kind !== 165 && node.kind !== 164) {
                 checkExportsOnMergedDeclarations(node);
-                if (node.kind === 250 || node.kind === 199) {
+                if (node.kind === 252 || node.kind === 201) {
                     checkVarDeclaredNamesNotShadowed(node);
                 }
-                checkCollisionWithRequireExportsInGeneratedCode(node, node.name);
-                checkCollisionWithGlobalPromiseInGeneratedCode(node, node.name);
-                if (languageVersion < 99
-                    && (needCollisionCheckForIdentifier(node, node.name, "WeakMap") || needCollisionCheckForIdentifier(node, node.name, "WeakSet"))) {
-                    potentialWeakMapSetCollisions.push(node);
-                }
+                checkCollisionsForDeclarationName(node, node.name);
             }
         }
         function errorNextVariableOrPropertyDeclarationMustHaveSameType(firstDeclaration, firstType, nextDeclaration, nextType) {
             var nextDeclarationName = ts.getNameOfDeclaration(nextDeclaration);
-            var message = nextDeclaration.kind === 164 || nextDeclaration.kind === 163
+            var message = nextDeclaration.kind === 165 || nextDeclaration.kind === 164
                 ? ts.Diagnostics.Subsequent_property_declarations_must_have_the_same_type_Property_0_must_be_of_type_1_but_here_has_type_2
                 : ts.Diagnostics.Subsequent_variable_declarations_must_have_the_same_type_Variable_0_must_be_of_type_1_but_here_has_type_2;
             var declName = ts.declarationNameToString(nextDeclarationName);
@@ -64579,8 +65884,8 @@
             }
         }
         function areDeclarationFlagsIdentical(left, right) {
-            if ((left.kind === 161 && right.kind === 250) ||
-                (left.kind === 250 && right.kind === 161)) {
+            if ((left.kind === 162 && right.kind === 252) ||
+                (left.kind === 252 && right.kind === 162)) {
                 return true;
             }
             if (ts.hasQuestionToken(left) !== ts.hasQuestionToken(right)) {
@@ -64618,7 +65923,7 @@
             var type = checkTruthinessExpression(node.expression);
             checkTestingKnownTruthyCallableOrAwaitableType(node.expression, type, node.thenStatement);
             checkSourceElement(node.thenStatement);
-            if (node.thenStatement.kind === 232) {
+            if (node.thenStatement.kind === 234) {
                 error(node.thenStatement, ts.Diagnostics.The_body_of_an_if_statement_cannot_be_the_empty_statement);
             }
             checkSourceElement(node.elseStatement);
@@ -64629,26 +65934,24 @@
             if (getFalsyFlags(type))
                 return;
             var location = ts.isBinaryExpression(condExpr) ? condExpr.right : condExpr;
+            if (ts.isPropertyAccessExpression(location) && ts.isAssertionExpression(ts.skipParentheses(location.expression))) {
+                return;
+            }
             var testedNode = ts.isIdentifier(location) ? location
                 : ts.isPropertyAccessExpression(location) ? location.name
                     : ts.isBinaryExpression(location) && ts.isIdentifier(location.right) ? location.right
                         : undefined;
-            var isPropertyExpressionCast = ts.isPropertyAccessExpression(location)
-                && ts.isAssertionExpression(ts.skipParentheses(location.expression));
-            if (!testedNode || isPropertyExpressionCast) {
-                return;
-            }
             var callSignatures = getSignaturesOfType(type, 0);
             var isPromise = !!getAwaitedTypeOfPromise(type);
             if (callSignatures.length === 0 && !isPromise) {
                 return;
             }
-            var testedSymbol = getSymbolAtLocation(testedNode);
-            if (!testedSymbol) {
+            var testedSymbol = testedNode && getSymbolAtLocation(testedNode);
+            if (!testedSymbol && !isPromise) {
                 return;
             }
-            var isUsed = ts.isBinaryExpression(condExpr.parent) && isSymbolUsedInBinaryExpressionChain(condExpr.parent, testedSymbol)
-                || body && isSymbolUsedInConditionBody(condExpr, body, testedNode, testedSymbol);
+            var isUsed = testedSymbol && ts.isBinaryExpression(condExpr.parent) && isSymbolUsedInBinaryExpressionChain(condExpr.parent, testedSymbol)
+                || testedSymbol && body && isSymbolUsedInConditionBody(condExpr, body, testedNode, testedSymbol);
             if (!isUsed) {
                 if (isPromise) {
                     errorAndMaybeSuggestAwait(location, true, ts.Diagnostics.This_condition_will_always_return_true_since_this_0_is_always_defined, getTypeNameForErrorDisplay(type));
@@ -64670,7 +65973,7 @@
                         var childExpression = childNode.parent;
                         while (testedExpression && childExpression) {
                             if (ts.isIdentifier(testedExpression) && ts.isIdentifier(childExpression) ||
-                                testedExpression.kind === 107 && childExpression.kind === 107) {
+                                testedExpression.kind === 108 && childExpression.kind === 108) {
                                 return getSymbolAtLocation(testedExpression) === getSymbolAtLocation(childExpression);
                             }
                             else if (ts.isPropertyAccessExpression(testedExpression) && ts.isPropertyAccessExpression(childExpression)) {
@@ -64732,12 +66035,12 @@
         }
         function checkForStatement(node) {
             if (!checkGrammarStatementInAmbientContext(node)) {
-                if (node.initializer && node.initializer.kind === 251) {
+                if (node.initializer && node.initializer.kind === 253) {
                     checkGrammarVariableDeclarationList(node.initializer);
                 }
             }
             if (node.initializer) {
-                if (node.initializer.kind === 251) {
+                if (node.initializer.kind === 253) {
                     ts.forEach(node.initializer.declarations, checkVariableDeclaration);
                 }
                 else {
@@ -64755,22 +66058,28 @@
         }
         function checkForOfStatement(node) {
             checkGrammarForInOrForOfStatement(node);
+            var container = ts.getContainingFunctionOrClassStaticBlock(node);
             if (node.awaitModifier) {
-                var functionFlags = ts.getFunctionFlags(ts.getContainingFunction(node));
-                if ((functionFlags & (4 | 2)) === 2 && languageVersion < 99) {
-                    checkExternalEmitHelpers(node, 16384);
+                if (container && ts.isClassStaticBlockDeclaration(container)) {
+                    grammarErrorOnNode(node.awaitModifier, ts.Diagnostics.For_await_loops_cannot_be_used_inside_a_class_static_block);
+                }
+                else {
+                    var functionFlags = ts.getFunctionFlags(container);
+                    if ((functionFlags & (4 | 2)) === 2 && languageVersion < 99) {
+                        checkExternalEmitHelpers(node, 16384);
+                    }
                 }
             }
             else if (compilerOptions.downlevelIteration && languageVersion < 2) {
                 checkExternalEmitHelpers(node, 256);
             }
-            if (node.initializer.kind === 251) {
+            if (node.initializer.kind === 253) {
                 checkForInOrForOfVariableDeclaration(node);
             }
             else {
                 var varExpr = node.initializer;
                 var iteratedType = checkRightHandSideOfForOf(node);
-                if (varExpr.kind === 200 || varExpr.kind === 201) {
+                if (varExpr.kind === 202 || varExpr.kind === 203) {
                     checkDestructuringAssignment(varExpr, iteratedType || errorType);
                 }
                 else {
@@ -64789,7 +66098,7 @@
         function checkForInStatement(node) {
             checkGrammarForInOrForOfStatement(node);
             var rightType = getNonNullableTypeIfNeeded(checkExpression(node.expression));
-            if (node.initializer.kind === 251) {
+            if (node.initializer.kind === 253) {
                 var variable = node.initializer.declarations[0];
                 if (variable && ts.isBindingPattern(variable.name)) {
                     error(variable.name, ts.Diagnostics.The_left_hand_side_of_a_for_in_statement_cannot_be_a_destructuring_pattern);
@@ -64799,7 +66108,7 @@
             else {
                 var varExpr = node.initializer;
                 var leftType = checkExpression(varExpr);
-                if (varExpr.kind === 200 || varExpr.kind === 201) {
+                if (varExpr.kind === 202 || varExpr.kind === 203) {
                     error(varExpr, ts.Diagnostics.The_left_hand_side_of_a_for_in_statement_cannot_be_a_destructuring_pattern);
                 }
                 else if (!isTypeAssignableTo(getIndexTypeOrString(rightType), leftType)) {
@@ -64896,7 +66205,7 @@
                 }
                 return hasStringConstituent ? possibleOutOfBounds ? includeUndefinedInIndexSignature(stringType) : stringType : undefined;
             }
-            var arrayElementType = getIndexTypeOfType(arrayType, 1);
+            var arrayElementType = getIndexTypeOfType(arrayType, numberType);
             if (hasStringConstituent && arrayElementType) {
                 if (arrayElementType.flags & 402653316 && !compilerOptions.noUncheckedIndexedAccess) {
                     return stringType;
@@ -64967,8 +66276,8 @@
             var yieldTypes;
             var returnTypes;
             var nextTypes;
-            for (var _i = 0, array_10 = array; _i < array_10.length; _i++) {
-                var iterationTypes = array_10[_i];
+            for (var _i = 0, array_11 = array; _i < array_11.length; _i++) {
+                var iterationTypes = array_11[_i];
                 if (iterationTypes === undefined || iterationTypes === noIterationTypes) {
                     continue;
                 }
@@ -65306,27 +66615,31 @@
             if (checkGrammarStatementInAmbientContext(node)) {
                 return;
             }
-            var func = ts.getContainingFunction(node);
-            if (!func) {
+            var container = ts.getContainingFunctionOrClassStaticBlock(node);
+            if (container && ts.isClassStaticBlockDeclaration(container)) {
+                grammarErrorOnFirstToken(node, ts.Diagnostics.A_return_statement_cannot_be_used_inside_a_class_static_block);
+                return;
+            }
+            if (!container) {
                 grammarErrorOnFirstToken(node, ts.Diagnostics.A_return_statement_can_only_be_used_within_a_function_body);
                 return;
             }
-            var signature = getSignatureFromDeclaration(func);
+            var signature = getSignatureFromDeclaration(container);
             var returnType = getReturnTypeOfSignature(signature);
-            var functionFlags = ts.getFunctionFlags(func);
+            var functionFlags = ts.getFunctionFlags(container);
             if (strictNullChecks || node.expression || returnType.flags & 131072) {
                 var exprType = node.expression ? checkExpressionCached(node.expression) : undefinedType;
-                if (func.kind === 169) {
+                if (container.kind === 171) {
                     if (node.expression) {
                         error(node, ts.Diagnostics.Setters_cannot_return_a_value);
                     }
                 }
-                else if (func.kind === 167) {
+                else if (container.kind === 169) {
                     if (node.expression && !checkTypeAssignableToAndOptionallyElaborate(exprType, returnType, node, node.expression)) {
                         error(node, ts.Diagnostics.Return_type_of_constructor_signature_must_be_assignable_to_the_instance_type_of_the_class);
                     }
                 }
-                else if (getReturnTypeFromAnnotation(func)) {
+                else if (getReturnTypeFromAnnotation(container)) {
                     var unwrappedReturnType = (_a = unwrapReturnType(returnType, functionFlags)) !== null && _a !== void 0 ? _a : returnType;
                     var unwrappedExprType = functionFlags & 2
                         ? checkAwaitedType(exprType, node, ts.Diagnostics.The_return_type_of_an_async_function_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member)
@@ -65336,7 +66649,7 @@
                     }
                 }
             }
-            else if (func.kind !== 167 && compilerOptions.noImplicitReturns && !isUnwrappedReturnTypeVoidOrAny(func, returnType)) {
+            else if (container.kind !== 169 && compilerOptions.noImplicitReturns && !isUnwrappedReturnTypeVoidOrAny(container, returnType)) {
                 error(node, ts.Diagnostics.Not_all_code_paths_return_a_value);
             }
         }
@@ -65361,7 +66674,7 @@
             var expressionType = checkExpression(node.expression);
             var expressionIsLiteral = isLiteralType(expressionType);
             ts.forEach(node.caseBlock.clauses, function (clause) {
-                if (clause.kind === 286 && !hasDuplicateDefaultClause) {
+                if (clause.kind === 288 && !hasDuplicateDefaultClause) {
                     if (firstDefaultClause === undefined) {
                         firstDefaultClause = clause;
                     }
@@ -65370,7 +66683,7 @@
                         hasDuplicateDefaultClause = true;
                     }
                 }
-                if (produceDiagnostics && clause.kind === 285) {
+                if (produceDiagnostics && clause.kind === 287) {
                     var caseType = checkExpression(clause.expression);
                     var caseIsLiteral = isLiteralType(caseType);
                     var comparedExpressionType = expressionType;
@@ -65397,7 +66710,7 @@
                     if (ts.isFunctionLike(current)) {
                         return "quit";
                     }
-                    if (current.kind === 246 && current.label.escapedText === node.label.escapedText) {
+                    if (current.kind === 248 && current.label.escapedText === node.label.escapedText) {
                         grammarErrorOnNode(node.label, ts.Diagnostics.Duplicate_label_0, ts.getTextOfNode(node.label));
                         return true;
                     }
@@ -65451,76 +66764,75 @@
                 checkBlock(node.finallyBlock);
             }
         }
-        function checkIndexConstraints(type, isStatic) {
-            var _a, _b, _c, _d;
-            var declaredNumberIndexer = getIndexDeclarationOfSymbolTable(isStatic ? (_a = type.symbol) === null || _a === void 0 ? void 0 : _a.exports : (_b = type.symbol) === null || _b === void 0 ? void 0 : _b.members, 1);
-            var declaredStringIndexer = getIndexDeclarationOfSymbolTable(isStatic ? (_c = type.symbol) === null || _c === void 0 ? void 0 : _c.exports : (_d = type.symbol) === null || _d === void 0 ? void 0 : _d.members, 0);
-            var stringIndexType = getIndexTypeOfType(type, 0);
-            var numberIndexType = getIndexTypeOfType(type, 1);
-            if (stringIndexType || numberIndexType) {
-                ts.forEach(getPropertiesOfObjectType(type), function (prop) {
-                    if (isStatic && prop.flags & 4194304)
-                        return;
-                    var propType = getTypeOfSymbol(prop);
-                    checkIndexConstraintForProperty(prop, propType, type, declaredStringIndexer, stringIndexType, 0);
-                    checkIndexConstraintForProperty(prop, propType, type, declaredNumberIndexer, numberIndexType, 1);
-                });
-                var classDeclaration = type.symbol.valueDeclaration;
-                if (ts.getObjectFlags(type) & 1 && classDeclaration && ts.isClassLike(classDeclaration)) {
-                    for (var _i = 0, _e = classDeclaration.members; _i < _e.length; _i++) {
-                        var member = _e[_i];
-                        if (!ts.hasSyntacticModifier(member, 32) && !hasBindableName(member)) {
-                            var symbol = getSymbolOfNode(member);
-                            var propType = getTypeOfSymbol(symbol);
-                            checkIndexConstraintForProperty(symbol, propType, type, declaredStringIndexer, stringIndexType, 0);
-                            checkIndexConstraintForProperty(symbol, propType, type, declaredNumberIndexer, numberIndexType, 1);
-                        }
+        function checkIndexConstraints(type, isStaticIndex) {
+            var indexInfos = getIndexInfosOfType(type);
+            if (indexInfos.length === 0) {
+                return;
+            }
+            for (var _i = 0, _a = getPropertiesOfObjectType(type); _i < _a.length; _i++) {
+                var prop = _a[_i];
+                if (!(isStaticIndex && prop.flags & 4194304)) {
+                    checkIndexConstraintForProperty(type, prop, getLiteralTypeFromProperty(prop, 8576, true), getNonMissingTypeOfSymbol(prop));
+                }
+            }
+            var typeDeclaration = type.symbol.valueDeclaration;
+            if (typeDeclaration && ts.isClassLike(typeDeclaration)) {
+                for (var _b = 0, _c = typeDeclaration.members; _b < _c.length; _b++) {
+                    var member = _c[_b];
+                    if (!ts.isStatic(member) && !hasBindableName(member)) {
+                        var symbol = getSymbolOfNode(member);
+                        checkIndexConstraintForProperty(type, symbol, getTypeOfExpression(member.name.expression), getNonMissingTypeOfSymbol(symbol));
                     }
                 }
             }
-            var errorNode;
-            if (stringIndexType && numberIndexType) {
-                errorNode = declaredNumberIndexer || declaredStringIndexer;
-                if (!errorNode && (ts.getObjectFlags(type) & 2)) {
-                    var someBaseTypeHasBothIndexers = ts.forEach(getBaseTypes(type), function (base) { return getIndexTypeOfType(base, 0) && getIndexTypeOfType(base, 1); });
-                    errorNode = someBaseTypeHasBothIndexers || !type.symbol.declarations ? undefined : type.symbol.declarations[0];
+            if (indexInfos.length > 1) {
+                for (var _d = 0, indexInfos_6 = indexInfos; _d < indexInfos_6.length; _d++) {
+                    var info = indexInfos_6[_d];
+                    checkIndexConstraintForIndexSignature(type, info);
                 }
             }
-            if (errorNode && !isTypeAssignableTo(numberIndexType, stringIndexType)) {
-                error(errorNode, ts.Diagnostics.Numeric_index_type_0_is_not_assignable_to_string_index_type_1, typeToString(numberIndexType), typeToString(stringIndexType));
+        }
+        function checkIndexConstraintForProperty(type, prop, propNameType, propType) {
+            var declaration = prop.valueDeclaration;
+            var name = ts.getNameOfDeclaration(declaration);
+            if (name && ts.isPrivateIdentifier(name)) {
+                return;
             }
-            function checkIndexConstraintForProperty(prop, propertyType, containingType, indexDeclaration, indexType, indexKind) {
-                if (!indexType || ts.isKnownSymbol(prop)) {
-                    return;
+            var indexInfos = getApplicableIndexInfos(type, propNameType);
+            var interfaceDeclaration = ts.getObjectFlags(type) & 2 ? ts.getDeclarationOfKind(type.symbol, 256) : undefined;
+            var localPropDeclaration = declaration && declaration.kind === 219 ||
+                name && name.kind === 160 || getParentOfSymbol(prop) === type.symbol ? declaration : undefined;
+            var _loop_27 = function (info) {
+                var localIndexDeclaration = info.declaration && getParentOfSymbol(getSymbolOfNode(info.declaration)) === type.symbol ? info.declaration : undefined;
+                var errorNode = localPropDeclaration || localIndexDeclaration ||
+                    (interfaceDeclaration && !ts.some(getBaseTypes(type), function (base) { return !!getPropertyOfObjectType(base, prop.escapedName) && !!getIndexTypeOfType(base, info.keyType); }) ? interfaceDeclaration : undefined);
+                if (errorNode && !isTypeAssignableTo(propType, info.type)) {
+                    error(errorNode, ts.Diagnostics.Property_0_of_type_1_is_not_assignable_to_2_index_type_3, symbolToString(prop), typeToString(propType), typeToString(info.keyType), typeToString(info.type));
                 }
-                var propDeclaration = prop.valueDeclaration;
-                var name = propDeclaration && ts.getNameOfDeclaration(propDeclaration);
-                if (name && ts.isPrivateIdentifier(name)) {
-                    return;
+            };
+            for (var _i = 0, indexInfos_7 = indexInfos; _i < indexInfos_7.length; _i++) {
+                var info = indexInfos_7[_i];
+                _loop_27(info);
+            }
+        }
+        function checkIndexConstraintForIndexSignature(type, checkInfo) {
+            var declaration = checkInfo.declaration;
+            var indexInfos = getApplicableIndexInfos(type, checkInfo.keyType);
+            var interfaceDeclaration = ts.getObjectFlags(type) & 2 ? ts.getDeclarationOfKind(type.symbol, 256) : undefined;
+            var localCheckDeclaration = declaration && getParentOfSymbol(getSymbolOfNode(declaration)) === type.symbol ? declaration : undefined;
+            var _loop_28 = function (info) {
+                if (info === checkInfo)
+                    return "continue";
+                var localIndexDeclaration = info.declaration && getParentOfSymbol(getSymbolOfNode(info.declaration)) === type.symbol ? info.declaration : undefined;
+                var errorNode = localCheckDeclaration || localIndexDeclaration ||
+                    (interfaceDeclaration && !ts.some(getBaseTypes(type), function (base) { return !!getIndexInfoOfType(base, checkInfo.keyType) && !!getIndexTypeOfType(base, info.keyType); }) ? interfaceDeclaration : undefined);
+                if (errorNode && !isTypeAssignableTo(checkInfo.type, info.type)) {
+                    error(errorNode, ts.Diagnostics._0_index_type_1_is_not_assignable_to_2_index_type_3, typeToString(checkInfo.keyType), typeToString(checkInfo.type), typeToString(info.keyType), typeToString(info.type));
                 }
-                if (indexKind === 1 && !(name ? isNumericName(name) : isNumericLiteralName(prop.escapedName))) {
-                    return;
-                }
-                var errorNode;
-                if (propDeclaration && name &&
-                    (propDeclaration.kind === 217 ||
-                        name.kind === 159 ||
-                        prop.parent === containingType.symbol)) {
-                    errorNode = propDeclaration;
-                }
-                else if (indexDeclaration) {
-                    errorNode = indexDeclaration;
-                }
-                else if (ts.getObjectFlags(containingType) & 2) {
-                    var someBaseClassHasBothPropertyAndIndexer = ts.forEach(getBaseTypes(containingType), function (base) { return getPropertyOfObjectType(base, prop.escapedName) && getIndexTypeOfType(base, indexKind); });
-                    errorNode = someBaseClassHasBothPropertyAndIndexer || !containingType.symbol.declarations ? undefined : containingType.symbol.declarations[0];
-                }
-                if (errorNode && !isTypeAssignableTo(propertyType, indexType)) {
-                    var errorMessage = indexKind === 0
-                        ? ts.Diagnostics.Property_0_of_type_1_is_not_assignable_to_string_index_type_2
-                        : ts.Diagnostics.Property_0_of_type_1_is_not_assignable_to_numeric_index_type_2;
-                    error(errorNode, errorMessage, symbolToString(prop), typeToString(propertyType), typeToString(indexType));
-                }
+            };
+            for (var _i = 0, indexInfos_8 = indexInfos; _i < indexInfos_8.length; _i++) {
+                var info = indexInfos_8[_i];
+                _loop_28(info);
             }
         }
         function checkTypeNameIsReserved(name, message) {
@@ -65570,7 +66882,7 @@
         function checkTypeParametersNotReferenced(root, typeParameters, index) {
             visit(root);
             function visit(node) {
-                if (node.kind === 174) {
+                if (node.kind === 176) {
                     var type = getTypeFromTypeReference(node);
                     if (type.flags & 262144) {
                         for (var i = index; i < typeParameters.length; i++) {
@@ -65658,14 +66970,7 @@
         function checkClassLikeDeclaration(node) {
             checkGrammarClassLikeDeclaration(node);
             checkDecorators(node);
-            if (node.name) {
-                checkTypeNameIsReserved(node.name, ts.Diagnostics.Class_name_cannot_be_0);
-                checkCollisionWithRequireExportsInGeneratedCode(node, node.name);
-                checkCollisionWithGlobalPromiseInGeneratedCode(node, node.name);
-                if (!(node.flags & 8388608)) {
-                    checkClassNameCollisionWithObject(node.name);
-                }
-            }
+            checkCollisionsForDeclarationName(node, node.name);
             checkTypeParameters(ts.getEffectiveTypeParameterDeclarations(node));
             checkExportsOnMergedDeclarations(node);
             var symbol = getSymbolOfNode(node);
@@ -65773,7 +67078,7 @@
             var baseTypes = baseTypeNode && getBaseTypes(type);
             var baseWithThis = (baseTypes === null || baseTypes === void 0 ? void 0 : baseTypes.length) ? getTypeWithThisArgument(ts.first(baseTypes), type.thisType) : undefined;
             var baseStaticType = getBaseConstructorTypeOfClass(type);
-            var _loop_24 = function (member) {
+            var _loop_29 = function (member) {
                 if (ts.hasAmbientModifier(member)) {
                     return "continue";
                 }
@@ -65788,11 +67093,11 @@
             };
             for (var _i = 0, _a = node.members; _i < _a.length; _i++) {
                 var member = _a[_i];
-                _loop_24(member);
+                _loop_29(member);
             }
             function checkClassMember(member, memberIsParameterProperty) {
                 var hasOverride = ts.hasOverrideModifier(member);
-                var hasStatic = ts.hasStaticModifier(member);
+                var hasStatic = ts.isStatic(member);
                 if (baseWithThis && (hasOverride || compilerOptions.noImplicitOverride)) {
                     var declaredProp = member.name && getSymbolAtLocation(member.name) || getSymbolAtLocation(member);
                     if (!declaredProp) {
@@ -65804,10 +67109,13 @@
                     var baseProp = getPropertyOfType(baseType, declaredProp.escapedName);
                     var baseClassName = typeToString(baseWithThis);
                     if (prop && !baseProp && hasOverride) {
-                        error(member, ts.Diagnostics.This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0, baseClassName);
+                        var suggestion = getSuggestedSymbolForNonexistentClassMember(ts.symbolName(declaredProp), baseType);
+                        suggestion ?
+                            error(member, ts.Diagnostics.This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0_Did_you_mean_1, baseClassName, symbolToString(suggestion)) :
+                            error(member, ts.Diagnostics.This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0, baseClassName);
                     }
-                    else if (prop && (baseProp === null || baseProp === void 0 ? void 0 : baseProp.valueDeclaration) && compilerOptions.noImplicitOverride && !nodeInAmbientContext) {
-                        var baseHasAbstract = ts.hasAbstractModifier(baseProp.valueDeclaration);
+                    else if (prop && (baseProp === null || baseProp === void 0 ? void 0 : baseProp.declarations) && compilerOptions.noImplicitOverride && !nodeInAmbientContext) {
+                        var baseHasAbstract = ts.some(baseProp.declarations, function (d) { return ts.hasAbstractModifier(d); });
                         if (hasOverride) {
                             return;
                         }
@@ -65830,8 +67138,8 @@
         }
         function issueMemberSpecificError(node, typeWithThis, baseWithThis, broadDiag) {
             var issuedMemberError = false;
-            var _loop_25 = function (member) {
-                if (ts.hasStaticModifier(member)) {
+            var _loop_30 = function (member) {
+                if (ts.isStatic(member)) {
                     return "continue";
                 }
                 var declaredProp = member.name && getSymbolAtLocation(member.name) || getSymbolAtLocation(member);
@@ -65848,7 +67156,7 @@
             };
             for (var _i = 0, _a = node.members; _i < _a.length; _i++) {
                 var member = _a[_i];
-                _loop_25(member);
+                _loop_30(member);
             }
             if (!issuedMemberError) {
                 checkTypeAssignableTo(typeWithThis, baseWithThis, node.name || node, broadDiag);
@@ -65871,7 +67179,7 @@
         }
         function getClassOrInterfaceDeclarationsOfSymbol(symbol) {
             return ts.filter(symbol.declarations, function (d) {
-                return d.kind === 253 || d.kind === 254;
+                return d.kind === 255 || d.kind === 256;
             });
         }
         function checkKindsOfPropertyMemberOverrides(type, baseType) {
@@ -65903,7 +67211,7 @@
                                 continue basePropertyCheck;
                             }
                         }
-                        if (derivedClassDecl.kind === 222) {
+                        if (derivedClassDecl.kind === 224) {
                             error(derivedClassDecl, ts.Diagnostics.Non_abstract_class_expression_does_not_implement_inherited_abstract_member_0_from_class_1, symbolToString(baseProperty), typeToString(baseType));
                         }
                         else {
@@ -65921,7 +67229,7 @@
                     var derivedPropertyFlags = derived.flags & 98308;
                     if (basePropertyFlags && derivedPropertyFlags) {
                         if (baseDeclarationFlags & 128 && !(base.valueDeclaration && ts.isPropertyDeclaration(base.valueDeclaration) && base.valueDeclaration.initializer)
-                            || base.valueDeclaration && base.valueDeclaration.parent.kind === 254
+                            || base.valueDeclaration && base.valueDeclaration.parent.kind === 256
                             || derived.valueDeclaration && ts.isBinaryExpression(derived.valueDeclaration)) {
                             continue;
                         }
@@ -65934,7 +67242,7 @@
                             error(ts.getNameOfDeclaration(derived.valueDeclaration) || derived.valueDeclaration, errorMessage_1, symbolToString(base), typeToString(baseType), typeToString(type));
                         }
                         else if (useDefineForClassFields) {
-                            var uninitialized = (_a = derived.declarations) === null || _a === void 0 ? void 0 : _a.find(function (d) { return d.kind === 164 && !d.initializer; });
+                            var uninitialized = (_a = derived.declarations) === null || _a === void 0 ? void 0 : _a.find(function (d) { return d.kind === 165 && !d.initializer; });
                             if (uninitialized
                                 && !(derived.flags & 33554432)
                                 && !(baseDeclarationFlags & 128)
@@ -66034,7 +67342,7 @@
                 if (ts.getEffectiveModifierFlags(member) & 2) {
                     continue;
                 }
-                if (isInstancePropertyWithoutInitializer(member)) {
+                if (!ts.isStatic(member) && isPropertyWithoutInitializer(member)) {
                     var propName = member.name;
                     if (ts.isIdentifier(propName) || ts.isPrivateIdentifier(propName)) {
                         var type = getTypeOfSymbol(getSymbolOfNode(member));
@@ -66047,12 +67355,28 @@
                 }
             }
         }
-        function isInstancePropertyWithoutInitializer(node) {
-            return node.kind === 164 &&
-                !ts.hasSyntacticModifier(node, 32 | 128) &&
+        function isPropertyWithoutInitializer(node) {
+            return node.kind === 165 &&
+                !ts.hasAbstractModifier(node) &&
                 !node.exclamationToken &&
                 !node.initializer;
         }
+        function isPropertyInitializedInStaticBlocks(propName, propType, staticBlocks, startPos, endPos) {
+            for (var _i = 0, staticBlocks_2 = staticBlocks; _i < staticBlocks_2.length; _i++) {
+                var staticBlock = staticBlocks_2[_i];
+                if (staticBlock.pos >= startPos && staticBlock.pos <= endPos) {
+                    var reference = ts.factory.createPropertyAccessExpression(ts.factory.createThis(), propName);
+                    ts.setParent(reference.expression, reference);
+                    ts.setParent(reference, staticBlock);
+                    reference.flowNode = staticBlock.returnFlowNode;
+                    var flowType = getFlowTypeOfReference(reference, propType, getOptionalType(propType));
+                    if (!(getFalsyFlags(flowType) & 32768)) {
+                        return true;
+                    }
+                }
+            }
+            return false;
+        }
         function isPropertyInitializedInConstructor(propName, propType, constructor) {
             var reference = ts.factory.createPropertyAccessExpression(ts.factory.createThis(), propName);
             ts.setParent(reference.expression, reference);
@@ -66070,7 +67394,7 @@
                 checkExportsOnMergedDeclarations(node);
                 var symbol = getSymbolOfNode(node);
                 checkTypeParameterListsIdentical(symbol);
-                var firstInterfaceDecl = ts.getDeclarationOfKind(symbol, 254);
+                var firstInterfaceDecl = ts.getDeclarationOfKind(symbol, 256);
                 if (node === firstInterfaceDecl) {
                     var type = getDeclaredTypeOfSymbol(symbol);
                     var typeWithThis = getTypeWithThisArgument(type);
@@ -66101,7 +67425,7 @@
             checkTypeNameIsReserved(node.name, ts.Diagnostics.Type_alias_name_cannot_be_0);
             checkExportsOnMergedDeclarations(node);
             checkTypeParameters(node.typeParameters);
-            if (node.type.kind === 136) {
+            if (node.type.kind === 137) {
                 if (!intrinsicTypeKinds.has(node.name.escapedText) || ts.length(node.typeParameters) !== 1) {
                     error(node.type, ts.Diagnostics.The_intrinsic_keyword_can_only_be_used_to_declare_compiler_provided_intrinsic_types);
                 }
@@ -66130,7 +67454,7 @@
             }
             else {
                 var text = ts.getTextOfPropertyName(member.name);
-                if (isNumericLiteralName(text) && !isInfinityOrNaNString(text)) {
+                if (isNumericLiteralName(text) && !ts.isInfinityOrNaNString(text)) {
                     error(member.name, ts.Diagnostics.An_enum_member_cannot_have_a_numeric_name);
                 }
             }
@@ -66180,7 +67504,7 @@
             return value;
             function evaluate(expr) {
                 switch (expr.kind) {
-                    case 215:
+                    case 217:
                         var value_2 = evaluate(expr.operand);
                         if (typeof value_2 === "number") {
                             switch (expr.operator) {
@@ -66190,7 +67514,7 @@
                             }
                         }
                         break;
-                    case 217:
+                    case 219:
                         var left = evaluate(expr.left);
                         var right = evaluate(expr.right);
                         if (typeof left === "number" && typeof right === "number") {
@@ -66219,22 +67543,22 @@
                     case 8:
                         checkGrammarNumericLiteral(expr);
                         return +expr.text;
-                    case 208:
+                    case 210:
                         return evaluate(expr.expression);
-                    case 78:
+                    case 79:
                         var identifier = expr;
-                        if (isInfinityOrNaNString(identifier.escapedText)) {
+                        if (ts.isInfinityOrNaNString(identifier.escapedText)) {
                             return +(identifier.escapedText);
                         }
                         return ts.nodeIsMissing(expr) ? 0 : evaluateEnumMember(expr, getSymbolOfNode(member.parent), identifier.escapedText);
-                    case 203:
-                    case 202:
+                    case 205:
+                    case 204:
                         var ex = expr;
                         if (isConstantMemberAccess(ex)) {
                             var type = getTypeOfExpression(ex.expression);
                             if (type.symbol && type.symbol.flags & 384) {
                                 var name = void 0;
-                                if (ex.kind === 202) {
+                                if (ex.kind === 204) {
                                     name = ex.name.escapedText;
                                 }
                                 else {
@@ -66266,9 +67590,9 @@
             }
         }
         function isConstantMemberAccess(node) {
-            return node.kind === 78 ||
-                node.kind === 202 && isConstantMemberAccess(node.expression) ||
-                node.kind === 203 && isConstantMemberAccess(node.expression) &&
+            return node.kind === 79 ||
+                node.kind === 204 && isConstantMemberAccess(node.expression) ||
+                node.kind === 205 && isConstantMemberAccess(node.expression) &&
                     ts.isStringLiteralLike(node.argumentExpression);
         }
         function checkEnumDeclaration(node) {
@@ -66276,9 +67600,7 @@
                 return;
             }
             checkGrammarDecoratorsAndModifiers(node);
-            checkTypeNameIsReserved(node.name, ts.Diagnostics.Enum_name_cannot_be_0);
-            checkCollisionWithRequireExportsInGeneratedCode(node, node.name);
-            checkCollisionWithGlobalPromiseInGeneratedCode(node, node.name);
+            checkCollisionsForDeclarationName(node, node.name);
             checkExportsOnMergedDeclarations(node);
             node.members.forEach(checkEnumMember);
             computeEnumMemberValues(node);
@@ -66295,7 +67617,7 @@
                 }
                 var seenEnumMissingInitialInitializer_1 = false;
                 ts.forEach(enumSymbol.declarations, function (declaration) {
-                    if (declaration.kind !== 256) {
+                    if (declaration.kind !== 258) {
                         return false;
                     }
                     var enumDeclaration = declaration;
@@ -66324,8 +67646,8 @@
             if (declarations) {
                 for (var _i = 0, declarations_8 = declarations; _i < declarations_8.length; _i++) {
                     var declaration = declarations_8[_i];
-                    if ((declaration.kind === 253 ||
-                        (declaration.kind === 252 && ts.nodeIsPresent(declaration.body))) &&
+                    if ((declaration.kind === 255 ||
+                        (declaration.kind === 254 && ts.nodeIsPresent(declaration.body))) &&
                         !(declaration.flags & 8388608)) {
                         return declaration;
                     }
@@ -66366,8 +67688,7 @@
                     }
                 }
                 if (ts.isIdentifier(node.name)) {
-                    checkCollisionWithRequireExportsInGeneratedCode(node, node.name);
-                    checkCollisionWithGlobalPromiseInGeneratedCode(node, node.name);
+                    checkCollisionsForDeclarationName(node, node.name);
                 }
                 checkExportsOnMergedDeclarations(node);
                 var symbol = getSymbolOfNode(node);
@@ -66385,7 +67706,7 @@
                             error(node.name, ts.Diagnostics.A_namespace_declaration_cannot_be_located_prior_to_a_class_or_function_with_which_it_is_merged);
                         }
                     }
-                    var mergedClass = ts.getDeclarationOfKind(symbol, 253);
+                    var mergedClass = ts.getDeclarationOfKind(symbol, 255);
                     if (mergedClass &&
                         inSameLexicalScope(node, mergedClass)) {
                         getNodeLinks(node).flags |= 32768;
@@ -66429,22 +67750,22 @@
         function checkModuleAugmentationElement(node, isGlobalAugmentation) {
             var _a;
             switch (node.kind) {
-                case 233:
+                case 235:
                     for (var _i = 0, _b = node.declarationList.declarations; _i < _b.length; _i++) {
                         var decl = _b[_i];
                         checkModuleAugmentationElement(decl, isGlobalAugmentation);
                     }
                     break;
-                case 267:
-                case 268:
+                case 269:
+                case 270:
                     grammarErrorOnFirstToken(node, ts.Diagnostics.Exports_and_export_assignments_are_not_permitted_in_module_augmentations);
                     break;
-                case 261:
-                case 262:
+                case 263:
+                case 264:
                     grammarErrorOnFirstToken(node, ts.Diagnostics.Imports_are_not_permitted_in_module_augmentations_Consider_moving_them_to_the_enclosing_external_module);
                     break;
-                case 199:
-                case 250:
+                case 201:
+                case 252:
                     var name = node.name;
                     if (ts.isBindingPattern(name)) {
                         for (var _c = 0, _d = name.elements; _c < _d.length; _c++) {
@@ -66453,12 +67774,12 @@
                         }
                         break;
                     }
-                case 253:
-                case 256:
-                case 252:
-                case 254:
-                case 257:
                 case 255:
+                case 258:
+                case 254:
+                case 256:
+                case 259:
+                case 257:
                     if (isGlobalAugmentation) {
                         return;
                     }
@@ -66474,20 +67795,20 @@
         }
         function getFirstNonModuleExportsIdentifier(node) {
             switch (node.kind) {
-                case 78:
+                case 79:
                     return node;
-                case 158:
+                case 159:
                     do {
                         node = node.left;
-                    } while (node.kind !== 78);
+                    } while (node.kind !== 79);
                     return node;
-                case 202:
+                case 204:
                     do {
                         if (ts.isModuleExportsAccessExpression(node.expression) && !ts.isPrivateIdentifier(node.name)) {
                             return node.name;
                         }
                         node = node.expression;
-                    } while (node.kind !== 78);
+                    } while (node.kind !== 79);
                     return node;
             }
         }
@@ -66500,9 +67821,9 @@
                 error(moduleName, ts.Diagnostics.String_literal_expected);
                 return false;
             }
-            var inAmbientExternalModule = node.parent.kind === 258 && ts.isAmbientModule(node.parent.parent);
-            if (node.parent.kind !== 298 && !inAmbientExternalModule) {
-                error(moduleName, node.kind === 268 ?
+            var inAmbientExternalModule = node.parent.kind === 260 && ts.isAmbientModule(node.parent.parent);
+            if (node.parent.kind !== 300 && !inAmbientExternalModule) {
+                error(moduleName, node.kind === 270 ?
                     ts.Diagnostics.Export_declarations_are_not_permitted_in_a_namespace :
                     ts.Diagnostics.Import_declarations_in_a_namespace_cannot_reference_a_module);
                 return false;
@@ -66525,13 +67846,13 @@
                     (symbol.flags & 788968 ? 788968 : 0) |
                     (symbol.flags & 1920 ? 1920 : 0);
                 if (target.flags & excludedMeanings) {
-                    var message = node.kind === 271 ?
+                    var message = node.kind === 273 ?
                         ts.Diagnostics.Export_declaration_conflicts_with_exported_declaration_of_0 :
                         ts.Diagnostics.Import_declaration_conflicts_with_local_declaration_of_0;
                     error(node, message, symbolToString(symbol));
                 }
                 if (compilerOptions.isolatedModules
-                    && node.kind === 271
+                    && node.kind === 273
                     && !node.parent.parent.isTypeOnly
                     && !(target.flags & 111551)
                     && !(node.flags & 8388608)) {
@@ -66543,10 +67864,9 @@
             }
         }
         function checkImportBinding(node) {
-            checkCollisionWithRequireExportsInGeneratedCode(node, node.name);
-            checkCollisionWithGlobalPromiseInGeneratedCode(node, node.name);
+            checkCollisionsForDeclarationName(node, node.name);
             checkAliasSymbol(node);
-            if (node.kind === 266 &&
+            if (node.kind === 268 &&
                 ts.idText(node.propertyName || node.name) === "default" &&
                 compilerOptions.esModuleInterop &&
                 moduleKind !== ts.ModuleKind.System && moduleKind < ts.ModuleKind.ES2015) {
@@ -66567,7 +67887,7 @@
                         checkImportBinding(importClause);
                     }
                     if (importClause.namedBindings) {
-                        if (importClause.namedBindings.kind === 264) {
+                        if (importClause.namedBindings.kind === 266) {
                             checkImportBinding(importClause.namedBindings);
                             if (moduleKind !== ts.ModuleKind.System && moduleKind < ts.ModuleKind.ES2015 && compilerOptions.esModuleInterop) {
                                 checkExternalEmitHelpers(node, 65536);
@@ -66593,7 +67913,7 @@
                 if (ts.hasSyntacticModifier(node, 1)) {
                     markExportAsReferenced(node);
                 }
-                if (node.moduleReference.kind !== 273) {
+                if (node.moduleReference.kind !== 275) {
                     var target = resolveAlias(getSymbolOfNode(node));
                     if (target !== unknownSymbol) {
                         if (target.flags & 111551) {
@@ -66631,10 +67951,10 @@
             if (!node.moduleSpecifier || checkExternalImportOrExportDeclaration(node)) {
                 if (node.exportClause && !ts.isNamespaceExport(node.exportClause)) {
                     ts.forEach(node.exportClause.elements, checkExportSpecifier);
-                    var inAmbientExternalModule = node.parent.kind === 258 && ts.isAmbientModule(node.parent.parent);
-                    var inAmbientNamespaceDeclaration = !inAmbientExternalModule && node.parent.kind === 258 &&
+                    var inAmbientExternalModule = node.parent.kind === 260 && ts.isAmbientModule(node.parent.parent);
+                    var inAmbientNamespaceDeclaration = !inAmbientExternalModule && node.parent.kind === 260 &&
                         !node.moduleSpecifier && node.flags & 8388608;
-                    if (node.parent.kind !== 298 && !inAmbientExternalModule && !inAmbientNamespaceDeclaration) {
+                    if (node.parent.kind !== 300 && !inAmbientExternalModule && !inAmbientNamespaceDeclaration) {
                         error(node, ts.Diagnostics.Export_declarations_are_not_permitted_in_a_namespace);
                     }
                 }
@@ -66661,14 +67981,14 @@
         }
         function checkGrammarExportDeclaration(node) {
             var _a;
-            var isTypeOnlyExportStar = node.isTypeOnly && ((_a = node.exportClause) === null || _a === void 0 ? void 0 : _a.kind) !== 269;
+            var isTypeOnlyExportStar = node.isTypeOnly && ((_a = node.exportClause) === null || _a === void 0 ? void 0 : _a.kind) !== 271;
             if (isTypeOnlyExportStar) {
                 grammarErrorOnNode(node, ts.Diagnostics.Only_named_exports_may_use_export_type);
             }
             return !isTypeOnlyExportStar;
         }
         function checkGrammarModuleElementContext(node, errorMessage) {
-            var isInAppropriateContext = node.parent.kind === 298 || node.parent.kind === 258 || node.parent.kind === 257;
+            var isInAppropriateContext = node.parent.kind === 300 || node.parent.kind === 260 || node.parent.kind === 259;
             if (!isInAppropriateContext) {
                 grammarErrorOnFirstToken(node, errorMessage);
             }
@@ -66743,8 +68063,8 @@
             if (checkGrammarModuleElementContext(node, illegalContextMessage)) {
                 return;
             }
-            var container = node.parent.kind === 298 ? node.parent : node.parent.parent;
-            if (container.kind === 257 && !ts.isAmbientModule(container)) {
+            var container = node.parent.kind === 300 ? node.parent : node.parent.parent;
+            if (container.kind === 259 && !ts.isAmbientModule(container)) {
                 if (node.isExportEquals) {
                     error(node, ts.Diagnostics.An_export_assignment_cannot_be_used_in_a_namespace);
                 }
@@ -66756,7 +68076,7 @@
             if (!checkGrammarDecoratorsAndModifiers(node) && ts.hasEffectiveModifiers(node)) {
                 grammarErrorOnFirstToken(node, ts.Diagnostics.An_export_assignment_cannot_have_modifiers);
             }
-            if (node.expression.kind === 78) {
+            if (node.expression.kind === 79) {
                 var id = node.expression;
                 var sym = resolveEntityName(id, 67108863, true, true, node);
                 if (sym) {
@@ -66856,170 +68176,172 @@
             var kind = node.kind;
             if (cancellationToken) {
                 switch (kind) {
-                    case 257:
-                    case 253:
+                    case 259:
+                    case 255:
+                    case 256:
                     case 254:
-                    case 252:
                         cancellationToken.throwIfCancellationRequested();
                 }
             }
-            if (kind >= 233 && kind <= 249 && node.flowNode && !isReachableFlowNode(node.flowNode)) {
+            if (kind >= 235 && kind <= 251 && node.flowNode && !isReachableFlowNode(node.flowNode)) {
                 errorOrSuggestion(compilerOptions.allowUnreachableCode === false, node, ts.Diagnostics.Unreachable_code_detected);
             }
             switch (kind) {
-                case 160:
-                    return checkTypeParameter(node);
                 case 161:
+                    return checkTypeParameter(node);
+                case 162:
                     return checkParameter(node);
-                case 164:
+                case 165:
                     return checkPropertyDeclaration(node);
-                case 163:
+                case 164:
                     return checkPropertySignature(node);
-                case 176:
-                case 175:
+                case 178:
+                case 177:
+                case 172:
+                case 173:
+                case 174:
+                    return checkSignatureDeclaration(node);
+                case 167:
+                case 166:
+                    return checkMethodDeclaration(node);
+                case 168:
+                    return checkClassStaticBlockDeclaration(node);
+                case 169:
+                    return checkConstructorDeclaration(node);
                 case 170:
                 case 171:
-                case 172:
-                    return checkSignatureDeclaration(node);
-                case 166:
-                case 165:
-                    return checkMethodDeclaration(node);
-                case 167:
-                    return checkConstructorDeclaration(node);
-                case 168:
-                case 169:
                     return checkAccessorDeclaration(node);
-                case 174:
+                case 176:
                     return checkTypeReferenceNode(node);
-                case 173:
+                case 175:
                     return checkTypePredicate(node);
-                case 177:
-                    return checkTypeQuery(node);
-                case 178:
-                    return checkTypeLiteral(node);
                 case 179:
-                    return checkArrayType(node);
+                    return checkTypeQuery(node);
                 case 180:
+                    return checkTypeLiteral(node);
+                case 181:
+                    return checkArrayType(node);
+                case 182:
                     return checkTupleType(node);
+                case 185:
+                case 186:
+                    return checkUnionOrIntersectionType(node);
+                case 189:
                 case 183:
                 case 184:
-                    return checkUnionOrIntersectionType(node);
-                case 187:
-                case 181:
-                case 182:
                     return checkSourceElement(node.type);
-                case 188:
+                case 190:
                     return checkThisType(node);
-                case 189:
+                case 191:
                     return checkTypeOperator(node);
-                case 185:
+                case 187:
                     return checkConditionalType(node);
-                case 186:
+                case 188:
                     return checkInferType(node);
-                case 194:
-                    return checkTemplateLiteralType(node);
                 case 196:
+                    return checkTemplateLiteralType(node);
+                case 198:
                     return checkImportType(node);
-                case 193:
+                case 195:
                     return checkNamedTupleMember(node);
-                case 318:
+                case 323:
                     return checkJSDocAugmentsTag(node);
-                case 319:
+                case 324:
                     return checkJSDocImplementsTag(node);
-                case 335:
-                case 328:
-                case 329:
-                    return checkJSDocTypeAliasTag(node);
-                case 334:
-                    return checkJSDocTemplateTag(node);
+                case 340:
                 case 333:
+                case 334:
+                    return checkJSDocTypeAliasTag(node);
+                case 339:
+                    return checkJSDocTemplateTag(node);
+                case 338:
                     return checkJSDocTypeTag(node);
-                case 330:
+                case 335:
                     return checkJSDocParameterTag(node);
-                case 337:
+                case 342:
                     return checkJSDocPropertyTag(node);
-                case 309:
+                case 312:
                     checkJSDocFunctionType(node);
+                case 310:
+                case 309:
                 case 307:
-                case 306:
-                case 304:
-                case 305:
-                case 314:
+                case 308:
+                case 317:
                     checkJSDocTypeIsInJsFile(node);
                     ts.forEachChild(node, checkSourceElement);
                     return;
-                case 310:
+                case 313:
                     checkJSDocVariadicType(node);
                     return;
-                case 302:
+                case 304:
                     return checkSourceElement(node.type);
-                case 190:
+                case 192:
                     return checkIndexedAccessType(node);
-                case 191:
+                case 193:
                     return checkMappedType(node);
-                case 252:
-                    return checkFunctionDeclaration(node);
-                case 231:
-                case 258:
-                    return checkBlock(node);
-                case 233:
-                    return checkVariableStatement(node);
-                case 234:
-                    return checkExpressionStatement(node);
-                case 235:
-                    return checkIfStatement(node);
-                case 236:
-                    return checkDoStatement(node);
-                case 237:
-                    return checkWhileStatement(node);
-                case 238:
-                    return checkForStatement(node);
-                case 239:
-                    return checkForInStatement(node);
-                case 240:
-                    return checkForOfStatement(node);
-                case 241:
-                case 242:
-                    return checkBreakOrContinueStatement(node);
-                case 243:
-                    return checkReturnStatement(node);
-                case 244:
-                    return checkWithStatement(node);
-                case 245:
-                    return checkSwitchStatement(node);
-                case 246:
-                    return checkLabeledStatement(node);
-                case 247:
-                    return checkThrowStatement(node);
-                case 248:
-                    return checkTryStatement(node);
-                case 250:
-                    return checkVariableDeclaration(node);
-                case 199:
-                    return checkBindingElement(node);
-                case 253:
-                    return checkClassDeclaration(node);
                 case 254:
-                    return checkInterfaceDeclaration(node);
-                case 255:
-                    return checkTypeAliasDeclaration(node);
-                case 256:
-                    return checkEnumDeclaration(node);
-                case 257:
-                    return checkModuleDeclaration(node);
-                case 262:
-                    return checkImportDeclaration(node);
-                case 261:
-                    return checkImportEqualsDeclaration(node);
-                case 268:
-                    return checkExportDeclaration(node);
-                case 267:
-                    return checkExportAssignment(node);
-                case 232:
+                    return checkFunctionDeclaration(node);
+                case 233:
+                case 260:
+                    return checkBlock(node);
+                case 235:
+                    return checkVariableStatement(node);
+                case 236:
+                    return checkExpressionStatement(node);
+                case 237:
+                    return checkIfStatement(node);
+                case 238:
+                    return checkDoStatement(node);
+                case 239:
+                    return checkWhileStatement(node);
+                case 240:
+                    return checkForStatement(node);
+                case 241:
+                    return checkForInStatement(node);
+                case 242:
+                    return checkForOfStatement(node);
+                case 243:
+                case 244:
+                    return checkBreakOrContinueStatement(node);
+                case 245:
+                    return checkReturnStatement(node);
+                case 246:
+                    return checkWithStatement(node);
+                case 247:
+                    return checkSwitchStatement(node);
+                case 248:
+                    return checkLabeledStatement(node);
                 case 249:
+                    return checkThrowStatement(node);
+                case 250:
+                    return checkTryStatement(node);
+                case 252:
+                    return checkVariableDeclaration(node);
+                case 201:
+                    return checkBindingElement(node);
+                case 255:
+                    return checkClassDeclaration(node);
+                case 256:
+                    return checkInterfaceDeclaration(node);
+                case 257:
+                    return checkTypeAliasDeclaration(node);
+                case 258:
+                    return checkEnumDeclaration(node);
+                case 259:
+                    return checkModuleDeclaration(node);
+                case 264:
+                    return checkImportDeclaration(node);
+                case 263:
+                    return checkImportEqualsDeclaration(node);
+                case 270:
+                    return checkExportDeclaration(node);
+                case 269:
+                    return checkExportAssignment(node);
+                case 234:
+                case 251:
                     checkGrammarStatementInAmbientContext(node);
                     return;
-                case 272:
+                case 274:
                     return checkMissingDeclaration(node);
             }
         }
@@ -67099,30 +68421,30 @@
             currentNode = node;
             instantiationCount = 0;
             switch (node.kind) {
-                case 204:
-                case 205:
                 case 206:
-                case 162:
-                case 276:
+                case 207:
+                case 208:
+                case 163:
+                case 278:
                     resolveUntypedCall(node);
                     break;
-                case 209:
-                case 210:
+                case 211:
+                case 212:
+                case 167:
                 case 166:
-                case 165:
                     checkFunctionExpressionOrObjectLiteralMethodDeferred(node);
                     break;
-                case 168:
-                case 169:
+                case 170:
+                case 171:
                     checkAccessorDeclaration(node);
                     break;
-                case 222:
+                case 224:
                     checkClassExpressionDeferred(node);
                     break;
-                case 275:
+                case 277:
                     checkJsxSelfClosingElementDeferred(node);
                     break;
-                case 274:
+                case 276:
                     checkJsxElementDeferred(node);
                     break;
             }
@@ -67163,6 +68485,7 @@
                 ts.clear(potentialThisCollisions);
                 ts.clear(potentialNewTargetCollisions);
                 ts.clear(potentialWeakMapSetCollisions);
+                ts.clear(potentialReflectCollisions);
                 ts.forEach(node.statements, checkSourceElement);
                 checkSourceElement(node.endOfFileToken);
                 checkDeferredNodes(node);
@@ -67196,6 +68519,10 @@
                     ts.forEach(potentialWeakMapSetCollisions, checkWeakMapSetCollision);
                     ts.clear(potentialWeakMapSetCollisions);
                 }
+                if (potentialReflectCollisions.length) {
+                    ts.forEach(potentialReflectCollisions, checkReflectCollision);
+                    ts.clear(potentialReflectCollisions);
+                }
                 links.flags |= 1;
             }
         }
@@ -67242,7 +68569,7 @@
                 return [];
             }
             var symbols = ts.createSymbolTable();
-            var isStatic = false;
+            var isStaticSymbol = false;
             populateSymbols();
             symbols.delete("this");
             return symbolsToArray(symbols);
@@ -67252,27 +68579,27 @@
                         copySymbols(location.locals, meaning);
                     }
                     switch (location.kind) {
-                        case 298:
+                        case 300:
                             if (!ts.isExternalModule(location))
                                 break;
-                        case 257:
+                        case 259:
                             copyLocallyVisibleExportSymbols(getSymbolOfNode(location).exports, meaning & 2623475);
                             break;
-                        case 256:
+                        case 258:
                             copySymbols(getSymbolOfNode(location).exports, meaning & 8);
                             break;
-                        case 222:
+                        case 224:
                             var className = location.name;
                             if (className) {
                                 copySymbol(location.symbol, meaning);
                             }
-                        case 253:
-                        case 254:
-                            if (!isStatic) {
+                        case 255:
+                        case 256:
+                            if (!isStaticSymbol) {
                                 copySymbols(getMembersOfSymbol(getSymbolOfNode(location)), meaning & 788968);
                             }
                             break;
-                        case 209:
+                        case 211:
                             var funcName = location.name;
                             if (funcName) {
                                 copySymbol(location.symbol, meaning);
@@ -67282,7 +68609,7 @@
                     if (ts.introducesArgumentsExoticObject(location)) {
                         copySymbol(argumentsSymbol, meaning);
                     }
-                    isStatic = ts.hasSyntacticModifier(location, 32);
+                    isStaticSymbol = ts.isStatic(location);
                     location = location.parent;
                 }
                 copySymbols(globals, meaning);
@@ -67305,7 +68632,7 @@
             function copyLocallyVisibleExportSymbols(source, meaning) {
                 if (meaning) {
                     source.forEach(function (symbol) {
-                        if (!ts.getDeclarationOfKind(symbol, 271) && !ts.getDeclarationOfKind(symbol, 270)) {
+                        if (!ts.getDeclarationOfKind(symbol, 273) && !ts.getDeclarationOfKind(symbol, 272)) {
                             copySymbol(symbol, meaning);
                         }
                     });
@@ -67313,50 +68640,41 @@
             }
         }
         function isTypeDeclarationName(name) {
-            return name.kind === 78 &&
+            return name.kind === 79 &&
                 isTypeDeclaration(name.parent) &&
                 ts.getNameOfDeclaration(name.parent) === name;
         }
         function isTypeDeclaration(node) {
             switch (node.kind) {
-                case 160:
-                case 253:
-                case 254:
+                case 161:
                 case 255:
                 case 256:
-                case 335:
-                case 328:
-                case 329:
+                case 257:
+                case 258:
+                case 340:
+                case 333:
+                case 334:
                     return true;
-                case 263:
+                case 265:
                     return node.isTypeOnly;
-                case 266:
-                case 271:
+                case 268:
+                case 273:
                     return node.parent.parent.isTypeOnly;
                 default:
                     return false;
             }
         }
         function isTypeReferenceIdentifier(node) {
-            while (node.parent.kind === 158) {
+            while (node.parent.kind === 159) {
                 node = node.parent;
             }
-            return node.parent.kind === 174;
+            return node.parent.kind === 176;
         }
         function isHeritageClauseElementIdentifier(node) {
-            while (node.parent.kind === 202) {
+            while (node.parent.kind === 204) {
                 node = node.parent;
             }
-            return node.parent.kind === 224;
-        }
-        function getJSDocEntryNameReference(node) {
-            while (node.parent.kind === 158) {
-                node = node.parent;
-            }
-            while (node.parent.kind === 202) {
-                node = node.parent;
-            }
-            return ts.isJSDocNameReference(node.parent) ? node.parent : undefined;
+            return node.parent.kind === 226;
         }
         function forEachEnclosingClass(node, callback) {
             var result;
@@ -67384,13 +68702,13 @@
             return !!forEachEnclosingClass(node, function (n) { return n === classDeclaration; });
         }
         function getLeftSideOfImportEqualsOrExportAssignment(nodeOnRightSide) {
-            while (nodeOnRightSide.parent.kind === 158) {
+            while (nodeOnRightSide.parent.kind === 159) {
                 nodeOnRightSide = nodeOnRightSide.parent;
             }
-            if (nodeOnRightSide.parent.kind === 261) {
+            if (nodeOnRightSide.parent.kind === 263) {
                 return nodeOnRightSide.parent.moduleReference === nodeOnRightSide ? nodeOnRightSide.parent : undefined;
             }
-            if (nodeOnRightSide.parent.kind === 267) {
+            if (nodeOnRightSide.parent.kind === 269) {
                 return nodeOnRightSide.parent.expression === nodeOnRightSide ? nodeOnRightSide.parent : undefined;
             }
             return undefined;
@@ -67416,7 +68734,7 @@
                 node = parent;
                 parent = parent.parent;
             }
-            if (parent && parent.kind === 196 && parent.qualifier === node) {
+            if (parent && parent.kind === 198 && parent.qualifier === node) {
                 return parent;
             }
             return undefined;
@@ -67426,27 +68744,27 @@
                 return getSymbolOfNode(name.parent);
             }
             if (ts.isInJSFile(name) &&
-                name.parent.kind === 202 &&
+                name.parent.kind === 204 &&
                 name.parent === name.parent.parent.left) {
-                if (!ts.isPrivateIdentifier(name)) {
+                if (!ts.isPrivateIdentifier(name) && !ts.isJSDocMemberName(name)) {
                     var specialPropertyAssignmentSymbol = getSpecialPropertyAssignmentSymbolFromEntityName(name);
                     if (specialPropertyAssignmentSymbol) {
                         return specialPropertyAssignmentSymbol;
                     }
                 }
             }
-            if (name.parent.kind === 267 && ts.isEntityNameExpression(name)) {
+            if (name.parent.kind === 269 && ts.isEntityNameExpression(name)) {
                 var success = resolveEntityName(name, 111551 | 788968 | 1920 | 2097152, true);
                 if (success && success !== unknownSymbol) {
                     return success;
                 }
             }
-            else if (!ts.isPropertyAccessExpression(name) && !ts.isPrivateIdentifier(name) && isInRightSideOfImportOrExportAssignment(name)) {
-                var importEqualsDeclaration = ts.getAncestor(name, 261);
+            else if (ts.isEntityName(name) && isInRightSideOfImportOrExportAssignment(name)) {
+                var importEqualsDeclaration = ts.getAncestor(name, 263);
                 ts.Debug.assert(importEqualsDeclaration !== undefined);
                 return getSymbolOfPartOfRightHandSideOfImportEquals(name, true);
             }
-            if (!ts.isPropertyAccessExpression(name) && !ts.isPrivateIdentifier(name)) {
+            if (ts.isEntityName(name)) {
                 var possibleImportNode = isImportTypeQualifierPart(name);
                 if (possibleImportNode) {
                     getTypeFromTypeNode(possibleImportNode);
@@ -67454,12 +68772,12 @@
                     return sym === unknownSymbol ? undefined : sym;
                 }
             }
-            while (ts.isRightSideOfQualifiedNameOrPropertyAccess(name)) {
+            while (ts.isRightSideOfQualifiedNameOrPropertyAccessOrJSDocMemberName(name)) {
                 name = name.parent;
             }
             if (isHeritageClauseElementIdentifier(name)) {
                 var meaning = 0;
-                if (name.parent.kind === 224) {
+                if (name.parent.kind === 226) {
                     meaning = 788968;
                     if (ts.isExpressionWithTypeArgumentsInClassExtendsClause(name.parent)) {
                         meaning |= 111551;
@@ -67474,10 +68792,10 @@
                     return entityNameSymbol;
                 }
             }
-            if (name.parent.kind === 330) {
+            if (name.parent.kind === 335) {
                 return ts.getParameterSymbolFromJSDoc(name.parent);
             }
-            if (name.parent.kind === 160 && name.parent.parent.kind === 334) {
+            if (name.parent.kind === 161 && name.parent.parent.kind === 339) {
                 ts.Debug.assert(!ts.isInJSFile(name));
                 var typeParameter = ts.getTypeParameterFromJsDoc(name.parent);
                 return typeParameter && typeParameter.symbol;
@@ -67486,61 +68804,72 @@
                 if (ts.nodeIsMissing(name)) {
                     return undefined;
                 }
-                if (name.kind === 78) {
+                var isJSDoc_1 = ts.findAncestor(name, ts.or(ts.isJSDocLinkLike, ts.isJSDocNameReference, ts.isJSDocMemberName));
+                var meaning = isJSDoc_1 ? 788968 | 1920 | 111551 : 111551;
+                if (name.kind === 79) {
                     if (ts.isJSXTagName(name) && isJsxIntrinsicIdentifier(name)) {
                         var symbol = getIntrinsicTagSymbol(name.parent);
                         return symbol === unknownSymbol ? undefined : symbol;
                     }
-                    return resolveEntityName(name, 111551, false, true);
+                    var result = resolveEntityName(name, meaning, false, !isJSDoc_1, ts.getHostSignatureFromJSDoc(name));
+                    if (!result && isJSDoc_1) {
+                        var container = ts.findAncestor(name, ts.or(ts.isClassLike, ts.isInterfaceDeclaration));
+                        if (container) {
+                            return resolveJSDocMemberName(name, getSymbolOfNode(container));
+                        }
+                    }
+                    return result;
                 }
-                else if (name.kind === 202 || name.kind === 158) {
+                else if (name.kind === 204 || name.kind === 159) {
                     var links = getNodeLinks(name);
                     if (links.resolvedSymbol) {
                         return links.resolvedSymbol;
                     }
-                    if (name.kind === 202) {
+                    if (name.kind === 204) {
                         checkPropertyAccessExpression(name, 0);
                     }
                     else {
                         checkQualifiedName(name, 0);
                     }
+                    if (!links.resolvedSymbol && isJSDoc_1 && ts.isQualifiedName(name)) {
+                        return resolveJSDocMemberName(name);
+                    }
                     return links.resolvedSymbol;
                 }
+                else if (ts.isJSDocMemberName(name)) {
+                    return resolveJSDocMemberName(name);
+                }
             }
             else if (isTypeReferenceIdentifier(name)) {
-                var meaning = name.parent.kind === 174 ? 788968 : 1920;
+                var meaning = name.parent.kind === 176 ? 788968 : 1920;
                 return resolveEntityName(name, meaning, false, true);
             }
-            var jsdocReference = getJSDocEntryNameReference(name);
-            if (jsdocReference || ts.isJSDocLink(name.parent)) {
-                var meaning = 788968 | 1920 | 111551;
-                var symbol = resolveEntityName(name, meaning, false, false, ts.getHostSignatureFromJSDoc(name));
-                if (symbol) {
-                    return symbol;
-                }
-                else if (ts.isQualifiedName(name) && ts.isIdentifier(name.left)) {
-                    var links = getNodeLinks(name);
-                    if (links.resolvedSymbol) {
-                        return links.resolvedSymbol;
-                    }
-                    checkQualifiedName(name, 0);
-                    if (links.resolvedSymbol) {
-                        return links.resolvedSymbol;
-                    }
-                    var s = resolveEntityName(name.left, meaning, false);
-                    if (s) {
-                        var t = getDeclaredTypeOfSymbol(s);
-                        return getPropertyOfType(t, name.right.escapedText);
-                    }
-                }
-            }
-            if (name.parent.kind === 173) {
+            if (name.parent.kind === 175) {
                 return resolveEntityName(name, 1);
             }
             return undefined;
         }
+        function resolveJSDocMemberName(name, container) {
+            if (ts.isEntityName(name)) {
+                var meaning = 788968 | 1920 | 111551;
+                var symbol = resolveEntityName(name, meaning, false, true, ts.getHostSignatureFromJSDoc(name));
+                if (!symbol && ts.isIdentifier(name) && container) {
+                    symbol = getMergedSymbol(getSymbol(getExportsOfSymbol(container), name.escapedText, meaning));
+                }
+                if (symbol) {
+                    return symbol;
+                }
+            }
+            var left = ts.isIdentifier(name) ? container : resolveJSDocMemberName(name.left);
+            var right = ts.isIdentifier(name) ? name.escapedText : name.right.escapedText;
+            if (left) {
+                var proto = left.flags & 111551 && getPropertyOfType(getTypeOfSymbol(left), "prototype");
+                var t = proto ? getTypeOfSymbol(proto) : getDeclaredTypeOfSymbol(left);
+                return getPropertyOfType(t, right);
+            }
+        }
         function getSymbolAtLocation(node, ignoreErrors) {
-            if (node.kind === 298) {
+            if (node.kind === 300) {
                 return ts.isExternalModule(node) ? getMergedSymbol(node.symbol) : undefined;
             }
             var parent = node.parent;
@@ -67557,12 +68886,12 @@
             else if (ts.isLiteralComputedPropertyDeclarationName(node)) {
                 return getSymbolOfNode(parent.parent);
             }
-            if (node.kind === 78) {
+            if (node.kind === 79) {
                 if (isInRightSideOfImportOrExportAssignment(node)) {
                     return getSymbolOfNameOrPropertyAccessExpression(node);
                 }
-                else if (parent.kind === 199 &&
-                    grandParent.kind === 197 &&
+                else if (parent.kind === 201 &&
+                    grandParent.kind === 199 &&
                     node === parent.propertyName) {
                     var typeOfPattern = getTypeOfNode(grandParent);
                     var propertyDeclaration = getPropertyOfType(typeOfPattern, node.escapedText);
@@ -67570,14 +68899,24 @@
                         return propertyDeclaration;
                     }
                 }
+                else if (ts.isMetaProperty(parent)) {
+                    var parentType = getTypeOfNode(parent);
+                    var propertyDeclaration = getPropertyOfType(parentType, node.escapedText);
+                    if (propertyDeclaration) {
+                        return propertyDeclaration;
+                    }
+                    if (parent.keywordToken === 103) {
+                        return checkNewTargetMetaProperty(parent).symbol;
+                    }
+                }
             }
             switch (node.kind) {
-                case 78:
                 case 79:
-                case 202:
-                case 158:
+                case 80:
+                case 204:
+                case 159:
                     return getSymbolOfNameOrPropertyAccessExpression(node);
-                case 107:
+                case 108:
                     var container = ts.getThisContainer(node, false);
                     if (ts.isFunctionLike(container)) {
                         var sig = getSignatureFromDeclaration(container);
@@ -67588,20 +68927,20 @@
                     if (ts.isInExpressionContext(node)) {
                         return checkExpression(node).symbol;
                     }
-                case 188:
+                case 190:
                     return getTypeFromThisTypeNode(node).symbol;
-                case 105:
+                case 106:
                     return checkExpression(node).symbol;
-                case 132:
+                case 133:
                     var constructorDeclaration = node.parent;
-                    if (constructorDeclaration && constructorDeclaration.kind === 167) {
+                    if (constructorDeclaration && constructorDeclaration.kind === 169) {
                         return constructorDeclaration.parent.symbol;
                     }
                     return undefined;
                 case 10:
                 case 14:
                     if ((ts.isExternalModuleImportEqualsDeclaration(node.parent.parent) && ts.getExternalModuleImportEqualsDeclarationExpression(node.parent.parent) === node) ||
-                        ((node.parent.kind === 262 || node.parent.kind === 268) && node.parent.moduleSpecifier === node) ||
+                        ((node.parent.kind === 264 || node.parent.kind === 270) && node.parent.moduleSpecifier === node) ||
                         ((ts.isInJSFile(node) && ts.isRequireCall(node.parent, false)) || ts.isImportCall(node.parent)) ||
                         (ts.isLiteralTypeNode(node.parent) && ts.isLiteralImportTypeNode(node.parent.parent) && node.parent.parent.argument === node.parent)) {
                         return resolveExternalModuleName(node, node, ignoreErrors);
@@ -67616,21 +68955,35 @@
                             ? getTypeFromTypeNode(grandParent.objectType)
                             : undefined;
                     return objectType && getPropertyOfType(objectType, ts.escapeLeadingUnderscores(node.text));
-                case 87:
-                case 97:
+                case 88:
+                case 98:
                 case 38:
-                case 83:
+                case 84:
                     return getSymbolOfNode(node.parent);
-                case 196:
+                case 198:
                     return ts.isLiteralImportTypeNode(node) ? getSymbolAtLocation(node.argument.literal, ignoreErrors) : undefined;
-                case 92:
+                case 93:
                     return ts.isExportAssignment(node.parent) ? ts.Debug.checkDefined(node.parent.symbol) : undefined;
+                case 100:
+                case 103:
+                    return ts.isMetaProperty(node.parent) ? checkMetaPropertyKeyword(node.parent).symbol : undefined;
+                case 229:
+                    return checkExpression(node).symbol;
                 default:
                     return undefined;
             }
         }
+        function getIndexInfosAtLocation(node) {
+            if (ts.isIdentifier(node) && ts.isPropertyAccessExpression(node.parent) && node.parent.name === node) {
+                var keyType_1 = getLiteralTypeFromPropertyName(node);
+                var objectType = getTypeOfExpression(node.parent.expression);
+                var objectTypes = objectType.flags & 1048576 ? objectType.types : [objectType];
+                return ts.flatMap(objectTypes, function (t) { return ts.filter(getIndexInfosOfType(t), function (info) { return isApplicableIndexType(keyType_1, info.keyType); }); });
+            }
+            return undefined;
+        }
         function getShorthandAssignmentValueSymbol(location) {
-            if (location && location.kind === 290) {
+            if (location && location.kind === 292) {
                 return resolveEntityName(location.name, 111551 | 2097152);
             }
             return undefined;
@@ -67694,19 +69047,22 @@
                     return declaredType !== errorType ? declaredType : getTypeOfSymbol(symbol);
                 }
             }
+            if (ts.isMetaProperty(node.parent) && node.parent.keywordToken === node.kind) {
+                return checkMetaPropertyKeyword(node.parent);
+            }
             return errorType;
         }
         function getTypeOfAssignmentPattern(expr) {
-            ts.Debug.assert(expr.kind === 201 || expr.kind === 200);
-            if (expr.parent.kind === 240) {
+            ts.Debug.assert(expr.kind === 203 || expr.kind === 202);
+            if (expr.parent.kind === 242) {
                 var iteratedType = checkRightHandSideOfForOf(expr.parent);
                 return checkDestructuringAssignment(expr, iteratedType || errorType);
             }
-            if (expr.parent.kind === 217) {
+            if (expr.parent.kind === 219) {
                 var iteratedType = getTypeOfExpression(expr.parent.right);
                 return checkDestructuringAssignment(expr, iteratedType || errorType);
             }
-            if (expr.parent.kind === 289) {
+            if (expr.parent.kind === 291) {
                 var node_3 = ts.cast(expr.parent.parent, ts.isObjectLiteralExpression);
                 var typeOfParentObjectLiteral = getTypeOfAssignmentPattern(node_3) || errorType;
                 var propertyIndex = ts.indexOfNode(node_3.properties, expr.parent);
@@ -67729,19 +69085,19 @@
         }
         function getParentTypeOfClassElement(node) {
             var classSymbol = getSymbolOfNode(node.parent);
-            return ts.hasSyntacticModifier(node, 32)
+            return ts.isStatic(node)
                 ? getTypeOfSymbol(classSymbol)
                 : getDeclaredTypeOfSymbol(classSymbol);
         }
         function getClassElementPropertyKeyType(element) {
             var name = element.name;
             switch (name.kind) {
-                case 78:
-                    return getLiteralType(ts.idText(name));
+                case 79:
+                    return getStringLiteralType(ts.idText(name));
                 case 8:
                 case 10:
-                    return getLiteralType(name.text);
-                case 159:
+                    return getStringLiteralType(name.text);
+                case 160:
                     var nameType = checkComputedPropertyName(name);
                     return isTypeAssignableToKind(nameType, 12288) ? nameType : stringType;
                 default:
@@ -67841,7 +69197,7 @@
                     }
                     var parentSymbol_1 = getParentOfSymbol(symbol);
                     if (parentSymbol_1) {
-                        if (parentSymbol_1.flags & 512 && ((_a = parentSymbol_1.valueDeclaration) === null || _a === void 0 ? void 0 : _a.kind) === 298) {
+                        if (parentSymbol_1.flags & 512 && ((_a = parentSymbol_1.valueDeclaration) === null || _a === void 0 ? void 0 : _a.kind) === 300) {
                             var symbolFile = parentSymbol_1.valueDeclaration;
                             var referenceFile = ts.getSourceFileOfNode(node);
                             var symbolIsUmdExport = symbolFile !== referenceFile;
@@ -67868,7 +69224,7 @@
         function isSymbolOfDestructuredElementOfCatchBinding(symbol) {
             return symbol.valueDeclaration
                 && ts.isBindingElement(symbol.valueDeclaration)
-                && ts.walkUpBindingElementsAndPatterns(symbol.valueDeclaration).parent.kind === 288;
+                && ts.walkUpBindingElementsAndPatterns(symbol.valueDeclaration).parent.kind === 290;
         }
         function isSymbolOfDeclarationWithCollidingName(symbol) {
             if (symbol.flags & 418 && symbol.valueDeclaration && !ts.isSourceFile(symbol.valueDeclaration)) {
@@ -67883,7 +69239,7 @@
                         else if (nodeLinks_1.flags & 262144) {
                             var isDeclaredInLoop = nodeLinks_1.flags & 524288;
                             var inLoopInitializer = ts.isIterationStatement(container, false);
-                            var inLoopBodyBlock = container.kind === 231 && ts.isIterationStatement(container.parent, false);
+                            var inLoopBodyBlock = container.kind === 233 && ts.isIterationStatement(container.parent, false);
                             links.isDeclarationWithCollidingName = !ts.isBlockScopedContainerTopLevel(container) && (!isDeclaredInLoop || (!inLoopInitializer && !inLoopBodyBlock));
                         }
                         else {
@@ -67919,20 +69275,20 @@
         }
         function isValueAliasDeclaration(node) {
             switch (node.kind) {
-                case 261:
-                    return isAliasResolvedToValue(getSymbolOfNode(node) || unknownSymbol);
                 case 263:
-                case 264:
+                    return isAliasResolvedToValue(getSymbolOfNode(node) || unknownSymbol);
+                case 265:
                 case 266:
-                case 271:
+                case 268:
+                case 273:
                     var symbol = getSymbolOfNode(node) || unknownSymbol;
                     return isAliasResolvedToValue(symbol) && !getTypeOnlyAliasDeclaration(symbol);
-                case 268:
+                case 270:
                     var exportClause = node.exportClause;
                     return !!exportClause && (ts.isNamespaceExport(exportClause) ||
                         ts.some(exportClause.elements, isValueAliasDeclaration));
-                case 267:
-                    return node.expression && node.expression.kind === 78 ?
+                case 269:
+                    return node.expression && node.expression.kind === 79 ?
                         isAliasResolvedToValue(getSymbolOfNode(node) || unknownSymbol) :
                         true;
             }
@@ -67940,7 +69296,7 @@
         }
         function isTopLevelValueImportEqualsWithEntityName(nodeIn) {
             var node = ts.getParseTreeNode(nodeIn, ts.isImportEqualsDeclaration);
-            if (node === undefined || node.parent.kind !== 298 || !ts.isInternalModuleImportEqualsDeclaration(node)) {
+            if (node === undefined || node.parent.kind !== 300 || !ts.isInternalModuleImportEqualsDeclaration(node)) {
                 return false;
             }
             var isValue = isAliasResolvedToValue(getSymbolOfNode(node));
@@ -68025,7 +69381,11 @@
             return symbol && getPropertiesOfType(getTypeOfSymbol(symbol)) || ts.emptyArray;
         }
         function getNodeCheckFlags(node) {
-            return getNodeLinks(node).flags || 0;
+            var _a;
+            var nodeId = node.id || 0;
+            if (nodeId < 0 || nodeId >= nodeLinks.length)
+                return 0;
+            return ((_a = nodeLinks[nodeId]) === null || _a === void 0 ? void 0 : _a.flags) || 0;
         }
         function getEnumMemberValue(node) {
             computeEnumMemberValues(node.parent);
@@ -68033,15 +69393,15 @@
         }
         function canHaveConstantValue(node) {
             switch (node.kind) {
-                case 292:
-                case 202:
-                case 203:
+                case 294:
+                case 204:
+                case 205:
                     return true;
             }
             return false;
         }
         function getConstantValue(node) {
-            if (node.kind === 292) {
+            if (node.kind === 294) {
                 return getEnumMemberValue(node);
             }
             var symbol = getNodeLinks(node).resolvedSymbol;
@@ -68057,7 +69417,7 @@
             return !!(type.flags & 524288) && getSignaturesOfType(type, 0).length > 0;
         }
         function getTypeReferenceSerializationKind(typeNameIn, location) {
-            var _a;
+            var _a, _b;
             var typeName = ts.getParseTreeNode(typeNameIn, ts.isEntityName);
             if (!typeName)
                 return ts.TypeReferenceSerializationKind.Unknown;
@@ -68066,9 +69426,14 @@
                 if (!location)
                     return ts.TypeReferenceSerializationKind.Unknown;
             }
+            var isTypeOnly = false;
+            if (ts.isQualifiedName(typeName)) {
+                var rootValueSymbol = resolveEntityName(ts.getFirstIdentifier(typeName), 111551, true, true, location);
+                isTypeOnly = !!((_a = rootValueSymbol === null || rootValueSymbol === void 0 ? void 0 : rootValueSymbol.declarations) === null || _a === void 0 ? void 0 : _a.every(ts.isTypeOnlyImportOrExportDeclaration));
+            }
             var valueSymbol = resolveEntityName(typeName, 111551, true, true, location);
-            var isTypeOnly = ((_a = valueSymbol === null || valueSymbol === void 0 ? void 0 : valueSymbol.declarations) === null || _a === void 0 ? void 0 : _a.every(ts.isTypeOnlyImportOrExportDeclaration)) || false;
             var resolvedSymbol = valueSymbol && valueSymbol.flags & 2097152 ? resolveAlias(valueSymbol) : valueSymbol;
+            isTypeOnly || (isTypeOnly = !!((_b = valueSymbol === null || valueSymbol === void 0 ? void 0 : valueSymbol.declarations) === null || _b === void 0 ? void 0 : _b.every(ts.isTypeOnlyImportOrExportDeclaration)));
             var typeSymbol = resolveEntityName(typeName, 788968, true, false, location);
             if (resolvedSymbol && resolvedSymbol === typeSymbol) {
                 var globalPromiseSymbol = getGlobalPromiseConstructorSymbol(false);
@@ -68124,7 +69489,7 @@
         function createTypeOfDeclaration(declarationIn, enclosingDeclaration, flags, tracker, addUndefined) {
             var declaration = ts.getParseTreeNode(declarationIn, ts.isVariableLikeOrAccessor);
             if (!declaration) {
-                return ts.factory.createToken(128);
+                return ts.factory.createToken(129);
             }
             var symbol = getSymbolOfNode(declaration);
             var type = symbol && !(symbol.flags & (2048 | 131072))
@@ -68142,7 +69507,7 @@
         function createReturnTypeOfSignatureDeclaration(signatureDeclarationIn, enclosingDeclaration, flags, tracker) {
             var signatureDeclaration = ts.getParseTreeNode(signatureDeclarationIn, ts.isFunctionLike);
             if (!signatureDeclaration) {
-                return ts.factory.createToken(128);
+                return ts.factory.createToken(129);
             }
             var signature = getSignatureFromDeclaration(signatureDeclaration);
             return nodeBuilder.typeToTypeNode(getReturnTypeOfSignature(signature), enclosingDeclaration, flags | 1024, tracker);
@@ -68150,7 +69515,7 @@
         function createTypeOfExpression(exprIn, enclosingDeclaration, flags, tracker) {
             var expr = ts.getParseTreeNode(exprIn, ts.isExpression);
             if (!expr) {
-                return ts.factory.createToken(128);
+                return ts.factory.createToken(129);
             }
             var type = getWidenedType(getRegularTypeOfExpression(expr));
             return nodeBuilder.typeToTypeNode(type, enclosingDeclaration, flags | 1024, tracker);
@@ -68298,12 +69663,12 @@
                 getJsxFragmentFactoryEntity: getJsxFragmentFactoryEntity,
                 getAllAccessorDeclarations: function (accessor) {
                     accessor = ts.getParseTreeNode(accessor, ts.isGetOrSetAccessorDeclaration);
-                    var otherKind = accessor.kind === 169 ? 168 : 169;
+                    var otherKind = accessor.kind === 171 ? 170 : 171;
                     var otherAccessor = ts.getDeclarationOfKind(getSymbolOfNode(accessor), otherKind);
                     var firstAccessor = otherAccessor && (otherAccessor.pos < accessor.pos) ? otherAccessor : accessor;
                     var secondAccessor = otherAccessor && (otherAccessor.pos < accessor.pos) ? accessor : otherAccessor;
-                    var setAccessor = accessor.kind === 169 ? accessor : otherAccessor;
-                    var getAccessor = accessor.kind === 168 ? accessor : otherAccessor;
+                    var setAccessor = accessor.kind === 171 ? accessor : otherAccessor;
+                    var getAccessor = accessor.kind === 170 ? accessor : otherAccessor;
                     return {
                         firstAccessor: firstAccessor,
                         secondAccessor: secondAccessor,
@@ -68319,7 +69684,7 @@
                 },
                 getDeclarationStatementsForSourceFile: function (node, flags, tracker, bundled) {
                     var n = ts.getParseTreeNode(node);
-                    ts.Debug.assert(n && n.kind === 298, "Non-sourcefile node passed into getDeclarationsForSourceFile");
+                    ts.Debug.assert(n && n.kind === 300, "Non-sourcefile node passed into getDeclarationsForSourceFile");
                     var sym = getSymbolOfNode(node);
                     if (!sym) {
                         return !node.locals ? [] : nodeBuilder.symbolTableToDeclarationStatements(node.locals, node, flags, tracker, bundled);
@@ -68356,14 +69721,14 @@
                 return false;
             }
             function isInHeritageClause(node) {
-                return node.parent && node.parent.kind === 224 && node.parent.parent && node.parent.parent.kind === 287;
+                return node.parent && node.parent.kind === 226 && node.parent.parent && node.parent.parent.kind === 289;
             }
             function getTypeReferenceDirectivesForEntityName(node) {
                 if (!fileToDirective) {
                     return undefined;
                 }
                 var meaning = 788968 | 1920;
-                if ((node.kind === 78 && isInTypeQuery(node)) || (node.kind === 202 && !isInHeritageClause(node))) {
+                if ((node.kind === 79 && isInTypeQuery(node)) || (node.kind === 204 && !isInHeritageClause(node))) {
                     meaning = 111551 | 1048576;
                 }
                 var symbol = resolveEntityName(node, meaning, true);
@@ -68403,7 +69768,7 @@
                         break;
                     }
                 }
-                if (current.valueDeclaration && current.valueDeclaration.kind === 298 && current.flags & 512) {
+                if (current.valueDeclaration && current.valueDeclaration.kind === 300 && current.flags & 512) {
                     return false;
                 }
                 for (var _i = 0, _a = symbol.declarations; _i < _a.length; _i++) {
@@ -68430,12 +69795,12 @@
             }
         }
         function getExternalModuleFileFromDeclaration(declaration) {
-            var specifier = declaration.kind === 257 ? ts.tryCast(declaration.name, ts.isStringLiteral) : ts.getExternalModuleName(declaration);
+            var specifier = declaration.kind === 259 ? ts.tryCast(declaration.name, ts.isStringLiteral) : ts.getExternalModuleName(declaration);
             var moduleSymbol = resolveExternalModuleNameWorker(specifier, specifier, undefined);
             if (!moduleSymbol) {
                 return undefined;
             }
-            return ts.getDeclarationOfKind(moduleSymbol, 298);
+            return ts.getDeclarationOfKind(moduleSymbol, 300);
         }
         function initializeTypeChecker() {
             for (var _i = 0, _a = host.getSourceFiles(); _i < _a.length; _i++) {
@@ -68505,7 +69870,7 @@
             anyArrayType = createArrayType(anyType);
             autoArrayType = createArrayType(autoType);
             if (autoArrayType === emptyObjectType) {
-                autoArrayType = createAnonymousType(undefined, emptySymbols, ts.emptyArray, ts.emptyArray, undefined, undefined);
+                autoArrayType = createAnonymousType(undefined, emptySymbols, ts.emptyArray, ts.emptyArray, ts.emptyArray);
             }
             globalReadonlyArrayType = getGlobalTypeOrUndefined("ReadonlyArray", 1) || globalArrayType;
             anyReadonlyArrayType = globalReadonlyArrayType ? createTypeFromGenericGlobalType(globalReadonlyArrayType, [anyType]) : anyArrayType;
@@ -68569,6 +69934,11 @@
                                         error(location, ts.Diagnostics.This_syntax_requires_an_imported_helper_named_1_with_2_parameters_which_is_not_compatible_with_the_one_in_0_Consider_upgrading_your_version_of_0, ts.externalHelpersModuleNameText, name, 5);
                                     }
                                 }
+                                else if (helper & 1024) {
+                                    if (!ts.some(getSignaturesOfSymbol(symbol), function (signature) { return getParameterCount(signature) > 2; })) {
+                                        error(location, ts.Diagnostics.This_syntax_requires_an_imported_helper_named_1_with_2_parameters_which_is_not_compatible_with_the_one_in_0_Consider_upgrading_your_version_of_0, ts.externalHelpersModuleNameText, name, 3);
+                                    }
+                                }
                             }
                         }
                     }
@@ -68617,14 +69987,14 @@
                 return false;
             }
             if (!ts.nodeCanBeDecorated(node, node.parent, node.parent.parent)) {
-                if (node.kind === 166 && !ts.nodeIsPresent(node.body)) {
+                if (node.kind === 167 && !ts.nodeIsPresent(node.body)) {
                     return grammarErrorOnFirstToken(node, ts.Diagnostics.A_decorator_can_only_decorate_a_method_implementation_not_an_overload);
                 }
                 else {
                     return grammarErrorOnFirstToken(node, ts.Diagnostics.Decorators_are_not_valid_here);
                 }
             }
-            else if (node.kind === 168 || node.kind === 169) {
+            else if (node.kind === 170 || node.kind === 171) {
                 var accessors = ts.getAllAccessorDeclarations(node.parent.members, node);
                 if (accessors.firstAccessor.decorators && node === accessors.secondAccessor) {
                     return grammarErrorOnFirstToken(node, ts.Diagnostics.Decorators_cannot_be_applied_to_multiple_get_Slashset_accessors_of_the_same_name);
@@ -68641,21 +70011,21 @@
             var flags = 0;
             for (var _i = 0, _a = node.modifiers; _i < _a.length; _i++) {
                 var modifier = _a[_i];
-                if (modifier.kind !== 142) {
-                    if (node.kind === 163 || node.kind === 165) {
+                if (modifier.kind !== 143) {
+                    if (node.kind === 164 || node.kind === 166) {
                         return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_type_member, ts.tokenToString(modifier.kind));
                     }
-                    if (node.kind === 172 && (modifier.kind !== 123 || !ts.isClassLike(node.parent))) {
+                    if (node.kind === 174 && (modifier.kind !== 124 || !ts.isClassLike(node.parent))) {
                         return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_an_index_signature, ts.tokenToString(modifier.kind));
                     }
                 }
                 switch (modifier.kind) {
-                    case 84:
-                        if (node.kind !== 256) {
-                            return grammarErrorOnNode(node, ts.Diagnostics.A_class_member_cannot_have_the_0_keyword, ts.tokenToString(84));
+                    case 85:
+                        if (node.kind !== 258) {
+                            return grammarErrorOnNode(node, ts.Diagnostics.A_class_member_cannot_have_the_0_keyword, ts.tokenToString(85));
                         }
                         break;
-                    case 156:
+                    case 157:
                         if (flags & 16384) {
                             return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_already_seen, "override");
                         }
@@ -68671,9 +70041,9 @@
                         flags |= 16384;
                         lastOverride = modifier;
                         break;
+                    case 123:
                     case 122:
                     case 121:
-                    case 120:
                         var text = visibilityToString(ts.modifierToFlag(modifier.kind));
                         if (flags & 28) {
                             return grammarErrorOnNode(modifier, ts.Diagnostics.Accessibility_modifier_already_seen);
@@ -68690,11 +70060,11 @@
                         else if (flags & 256) {
                             return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_must_precede_1_modifier, text, "async");
                         }
-                        else if (node.parent.kind === 258 || node.parent.kind === 298) {
+                        else if (node.parent.kind === 260 || node.parent.kind === 300) {
                             return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_module_or_namespace_element, text);
                         }
                         else if (flags & 128) {
-                            if (modifier.kind === 120) {
+                            if (modifier.kind === 121) {
                                 return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_be_used_with_1_modifier, text, "abstract");
                             }
                             else {
@@ -68706,7 +70076,7 @@
                         }
                         flags |= ts.modifierToFlag(modifier.kind);
                         break;
-                    case 123:
+                    case 124:
                         if (flags & 32) {
                             return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_already_seen, "static");
                         }
@@ -68716,10 +70086,10 @@
                         else if (flags & 256) {
                             return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_must_precede_1_modifier, "static", "async");
                         }
-                        else if (node.parent.kind === 258 || node.parent.kind === 298) {
+                        else if (node.parent.kind === 260 || node.parent.kind === 300) {
                             return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_module_or_namespace_element, "static");
                         }
-                        else if (node.kind === 161) {
+                        else if (node.kind === 162) {
                             return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_parameter, "static");
                         }
                         else if (flags & 128) {
@@ -68731,17 +70101,17 @@
                         flags |= 32;
                         lastStatic = modifier;
                         break;
-                    case 142:
+                    case 143:
                         if (flags & 64) {
                             return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_already_seen, "readonly");
                         }
-                        else if (node.kind !== 164 && node.kind !== 163 && node.kind !== 172 && node.kind !== 161) {
+                        else if (node.kind !== 165 && node.kind !== 164 && node.kind !== 174 && node.kind !== 162) {
                             return grammarErrorOnNode(modifier, ts.Diagnostics.readonly_modifier_can_only_appear_on_a_property_declaration_or_index_signature);
                         }
                         flags |= 64;
                         lastReadonly = modifier;
                         break;
-                    case 92:
+                    case 93:
                         if (flags & 1) {
                             return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_already_seen, "export");
                         }
@@ -68757,19 +70127,22 @@
                         else if (ts.isClassLike(node.parent)) {
                             return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_class_elements_of_this_kind, "export");
                         }
-                        else if (node.kind === 161) {
+                        else if (node.kind === 162) {
                             return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_parameter, "export");
                         }
                         flags |= 1;
                         break;
-                    case 87:
-                        var container = node.parent.kind === 298 ? node.parent : node.parent.parent;
-                        if (container.kind === 257 && !ts.isAmbientModule(container)) {
+                    case 88:
+                        var container = node.parent.kind === 300 ? node.parent : node.parent.parent;
+                        if (container.kind === 259 && !ts.isAmbientModule(container)) {
                             return grammarErrorOnNode(modifier, ts.Diagnostics.A_default_export_can_only_be_used_in_an_ECMAScript_style_module);
                         }
+                        else if (!(flags & 1)) {
+                            return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_must_precede_1_modifier, "export", "default");
+                        }
                         flags |= 512;
                         break;
-                    case 133:
+                    case 134:
                         if (flags & 2) {
                             return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_already_seen, "declare");
                         }
@@ -68782,10 +70155,10 @@
                         else if (ts.isClassLike(node.parent) && !ts.isPropertyDeclaration(node)) {
                             return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_class_elements_of_this_kind, "declare");
                         }
-                        else if (node.kind === 161) {
+                        else if (node.kind === 162) {
                             return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_parameter, "declare");
                         }
-                        else if ((node.parent.flags & 8388608) && node.parent.kind === 258) {
+                        else if ((node.parent.flags & 8388608) && node.parent.kind === 260) {
                             return grammarErrorOnNode(modifier, ts.Diagnostics.A_declare_modifier_cannot_be_used_in_an_already_ambient_context);
                         }
                         else if (ts.isPrivateIdentifierClassElementDeclaration(node)) {
@@ -68794,19 +70167,19 @@
                         flags |= 2;
                         lastDeclare = modifier;
                         break;
-                    case 125:
+                    case 126:
                         if (flags & 128) {
                             return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_already_seen, "abstract");
                         }
-                        if (node.kind !== 253 &&
-                            node.kind !== 176) {
-                            if (node.kind !== 166 &&
-                                node.kind !== 164 &&
-                                node.kind !== 168 &&
-                                node.kind !== 169) {
+                        if (node.kind !== 255 &&
+                            node.kind !== 178) {
+                            if (node.kind !== 167 &&
+                                node.kind !== 165 &&
+                                node.kind !== 170 &&
+                                node.kind !== 171) {
                                 return grammarErrorOnNode(modifier, ts.Diagnostics.abstract_modifier_can_only_appear_on_a_class_method_or_property_declaration);
                             }
-                            if (!(node.parent.kind === 253 && ts.hasSyntacticModifier(node.parent, 128))) {
+                            if (!(node.parent.kind === 255 && ts.hasSyntacticModifier(node.parent, 128))) {
                                 return grammarErrorOnNode(modifier, ts.Diagnostics.Abstract_methods_can_only_appear_within_an_abstract_class);
                             }
                             if (flags & 32) {
@@ -68822,19 +70195,19 @@
                                 return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_must_precede_1_modifier, "abstract", "override");
                             }
                         }
-                        if (ts.isNamedDeclaration(node) && node.name.kind === 79) {
+                        if (ts.isNamedDeclaration(node) && node.name.kind === 80) {
                             return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_be_used_with_a_private_identifier, "abstract");
                         }
                         flags |= 128;
                         break;
-                    case 129:
+                    case 130:
                         if (flags & 256) {
                             return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_already_seen, "async");
                         }
                         else if (flags & 2 || node.parent.flags & 8388608) {
                             return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_be_used_in_an_ambient_context, "async");
                         }
-                        else if (node.kind === 161) {
+                        else if (node.kind === 162) {
                             return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_parameter, "async");
                         }
                         if (flags & 128) {
@@ -68845,7 +70218,7 @@
                         break;
                 }
             }
-            if (node.kind === 167) {
+            if (node.kind === 169) {
                 if (flags & 32) {
                     return grammarErrorOnNode(lastStatic, ts.Diagnostics._0_modifier_cannot_appear_on_a_constructor_declaration, "static");
                 }
@@ -68863,13 +70236,13 @@
                 }
                 return false;
             }
-            else if ((node.kind === 262 || node.kind === 261) && flags & 2) {
+            else if ((node.kind === 264 || node.kind === 263) && flags & 2) {
                 return grammarErrorOnNode(lastDeclare, ts.Diagnostics.A_0_modifier_cannot_be_used_with_an_import_declaration, "declare");
             }
-            else if (node.kind === 161 && (flags & 16476) && ts.isBindingPattern(node.name)) {
+            else if (node.kind === 162 && (flags & 16476) && ts.isBindingPattern(node.name)) {
                 return grammarErrorOnNode(node, ts.Diagnostics.A_parameter_property_may_not_be_declared_using_a_binding_pattern);
             }
-            else if (node.kind === 161 && (flags & 16476) && node.dotDotDotToken) {
+            else if (node.kind === 162 && (flags & 16476) && node.dotDotDotToken) {
                 return grammarErrorOnNode(node, ts.Diagnostics.A_parameter_property_cannot_be_declared_using_a_rest_parameter);
             }
             if (flags & 256) {
@@ -68886,39 +70259,40 @@
         }
         function shouldReportBadModifier(node) {
             switch (node.kind) {
-                case 168:
+                case 170:
+                case 171:
                 case 169:
-                case 167:
-                case 164:
-                case 163:
-                case 166:
                 case 165:
-                case 172:
-                case 257:
-                case 262:
-                case 261:
-                case 268:
-                case 267:
-                case 209:
-                case 210:
-                case 161:
+                case 164:
+                case 167:
+                case 166:
+                case 174:
+                case 259:
+                case 264:
+                case 263:
+                case 270:
+                case 269:
+                case 211:
+                case 212:
+                case 162:
                     return false;
                 default:
-                    if (node.parent.kind === 258 || node.parent.kind === 298) {
+                    if (node.parent.kind === 260 || node.parent.kind === 300) {
                         return false;
                     }
                     switch (node.kind) {
-                        case 252:
-                            return nodeHasAnyModifiersExcept(node, 129);
-                        case 253:
-                        case 176:
-                            return nodeHasAnyModifiersExcept(node, 125);
                         case 254:
-                        case 233:
+                            return nodeHasAnyModifiersExcept(node, 130);
                         case 255:
-                            return true;
+                        case 178:
+                            return nodeHasAnyModifiersExcept(node, 126);
                         case 256:
-                            return nodeHasAnyModifiersExcept(node, 84);
+                        case 235:
+                        case 257:
+                        case 168:
+                            return true;
+                        case 258:
+                            return nodeHasAnyModifiersExcept(node, 85);
                         default:
                             ts.Debug.fail();
                     }
@@ -68929,10 +70303,10 @@
         }
         function checkGrammarAsyncModifier(node, asyncModifier) {
             switch (node.kind) {
-                case 166:
-                case 252:
-                case 209:
-                case 210:
+                case 167:
+                case 254:
+                case 211:
+                case 212:
                     return false;
             }
             return grammarErrorOnNode(asyncModifier, ts.Diagnostics._0_modifier_cannot_be_used_here, "async");
@@ -68995,7 +70369,7 @@
                             ts.addRelatedInfo(error(parameter, ts.Diagnostics.This_parameter_is_not_allowed_with_use_strict_directive), ts.createDiagnosticForNode(useStrictDirective_1, ts.Diagnostics.use_strict_directive_used_here));
                         });
                         var diagnostics_2 = nonSimpleParameters.map(function (parameter, index) { return (index === 0 ? ts.createDiagnosticForNode(parameter, ts.Diagnostics.Non_simple_parameter_declared_here) : ts.createDiagnosticForNode(parameter, ts.Diagnostics.and_here)); });
-                        ts.addRelatedInfo.apply(void 0, __spreadArray([error(useStrictDirective_1, ts.Diagnostics.use_strict_directive_cannot_be_used_with_non_simple_parameter_list)], diagnostics_2));
+                        ts.addRelatedInfo.apply(void 0, __spreadArray([error(useStrictDirective_1, ts.Diagnostics.use_strict_directive_cannot_be_used_with_non_simple_parameter_list)], diagnostics_2, false));
                         return true;
                     }
                 }
@@ -69050,15 +70424,12 @@
             if (!parameter.type) {
                 return grammarErrorOnNode(parameter.name, ts.Diagnostics.An_index_signature_parameter_must_have_a_type_annotation);
             }
-            if (parameter.type.kind !== 147 && parameter.type.kind !== 144) {
-                var type = getTypeFromTypeNode(parameter.type);
-                if (type.flags & 4 || type.flags & 8) {
-                    return grammarErrorOnNode(parameter.name, ts.Diagnostics.An_index_signature_parameter_type_cannot_be_a_type_alias_Consider_writing_0_Colon_1_Colon_2_instead, ts.getTextOfNode(parameter.name), typeToString(type), typeToString(node.type ? getTypeFromTypeNode(node.type) : anyType));
-                }
-                if (type.flags & 1048576 && allTypesAssignableToKind(type, 384, true)) {
-                    return grammarErrorOnNode(parameter.name, ts.Diagnostics.An_index_signature_parameter_type_cannot_be_a_union_type_Consider_using_a_mapped_object_type_instead);
-                }
-                return grammarErrorOnNode(parameter.name, ts.Diagnostics.An_index_signature_parameter_type_must_be_either_string_or_number);
+            var type = getTypeFromTypeNode(parameter.type);
+            if (someType(type, function (t) { return !!(t.flags & 8576); }) || isGenericType(type)) {
+                return grammarErrorOnNode(parameter.name, ts.Diagnostics.An_index_signature_parameter_type_cannot_be_a_literal_type_or_generic_type_Consider_using_a_mapped_object_type_instead);
+            }
+            if (!everyType(type, isValidIndexKeyType)) {
+                return grammarErrorOnNode(parameter.name, ts.Diagnostics.An_index_signature_parameter_type_must_be_string_number_symbol_or_a_template_literal_type);
             }
             if (!node.type) {
                 return grammarErrorOnNode(node, ts.Diagnostics.An_index_signature_must_have_a_type_annotation);
@@ -69091,7 +70462,7 @@
             if (args) {
                 for (var _i = 0, args_4 = args; _i < args_4.length; _i++) {
                     var arg = args_4[_i];
-                    if (arg.kind === 223) {
+                    if (arg.kind === 225) {
                         return grammarErrorAtPos(arg, arg.pos, 0, ts.Diagnostics.Argument_expression_expected);
                     }
                 }
@@ -69121,7 +70492,7 @@
             if (!checkGrammarDecoratorsAndModifiers(node) && node.heritageClauses) {
                 for (var _i = 0, _a = node.heritageClauses; _i < _a.length; _i++) {
                     var heritageClause = _a[_i];
-                    if (heritageClause.token === 93) {
+                    if (heritageClause.token === 94) {
                         if (seenExtendsClause) {
                             return grammarErrorOnFirstToken(heritageClause, ts.Diagnostics.extends_clause_already_seen);
                         }
@@ -69134,7 +70505,7 @@
                         seenExtendsClause = true;
                     }
                     else {
-                        ts.Debug.assert(heritageClause.token === 116);
+                        ts.Debug.assert(heritageClause.token === 117);
                         if (seenImplementsClause) {
                             return grammarErrorOnFirstToken(heritageClause, ts.Diagnostics.implements_clause_already_seen);
                         }
@@ -69149,14 +70520,14 @@
             if (node.heritageClauses) {
                 for (var _i = 0, _a = node.heritageClauses; _i < _a.length; _i++) {
                     var heritageClause = _a[_i];
-                    if (heritageClause.token === 93) {
+                    if (heritageClause.token === 94) {
                         if (seenExtendsClause) {
                             return grammarErrorOnFirstToken(heritageClause, ts.Diagnostics.extends_clause_already_seen);
                         }
                         seenExtendsClause = true;
                     }
                     else {
-                        ts.Debug.assert(heritageClause.token === 116);
+                        ts.Debug.assert(heritageClause.token === 117);
                         return grammarErrorOnFirstToken(heritageClause, ts.Diagnostics.Interface_declaration_cannot_have_implements_clause);
                     }
                     checkGrammarHeritageClause(heritageClause);
@@ -69165,20 +70536,20 @@
             return false;
         }
         function checkGrammarComputedPropertyName(node) {
-            if (node.kind !== 159) {
+            if (node.kind !== 160) {
                 return false;
             }
             var computedPropertyName = node;
-            if (computedPropertyName.expression.kind === 217 && computedPropertyName.expression.operatorToken.kind === 27) {
+            if (computedPropertyName.expression.kind === 219 && computedPropertyName.expression.operatorToken.kind === 27) {
                 return grammarErrorOnNode(computedPropertyName.expression, ts.Diagnostics.A_comma_expression_is_not_allowed_in_a_computed_property_name);
             }
             return false;
         }
         function checkGrammarForGenerator(node) {
             if (node.asteriskToken) {
-                ts.Debug.assert(node.kind === 252 ||
-                    node.kind === 209 ||
-                    node.kind === 166);
+                ts.Debug.assert(node.kind === 254 ||
+                    node.kind === 211 ||
+                    node.kind === 167);
                 if (node.flags & 8388608) {
                     return grammarErrorOnNode(node.asteriskToken, ts.Diagnostics.Generators_are_not_allowed_in_an_ambient_context);
                 }
@@ -69197,7 +70568,7 @@
             var seen = new ts.Map();
             for (var _i = 0, _a = node.properties; _i < _a.length; _i++) {
                 var prop = _a[_i];
-                if (prop.kind === 291) {
+                if (prop.kind === 293) {
                     if (inDestructuring) {
                         var expression = ts.skipParentheses(prop.expression);
                         if (ts.isArrayLiteralExpression(expression) || ts.isObjectLiteralExpression(expression)) {
@@ -69207,41 +70578,41 @@
                     continue;
                 }
                 var name = prop.name;
-                if (name.kind === 159) {
+                if (name.kind === 160) {
                     checkGrammarComputedPropertyName(name);
                 }
-                if (prop.kind === 290 && !inDestructuring && prop.objectAssignmentInitializer) {
+                if (prop.kind === 292 && !inDestructuring && prop.objectAssignmentInitializer) {
                     return grammarErrorOnNode(prop.equalsToken, ts.Diagnostics.Did_you_mean_to_use_a_Colon_An_can_only_follow_a_property_name_when_the_containing_object_literal_is_part_of_a_destructuring_pattern);
                 }
-                if (name.kind === 79) {
+                if (name.kind === 80) {
                     grammarErrorOnNode(name, ts.Diagnostics.Private_identifiers_are_not_allowed_outside_class_bodies);
                 }
                 if (prop.modifiers) {
                     for (var _b = 0, _c = prop.modifiers; _b < _c.length; _b++) {
                         var mod = _c[_b];
-                        if (mod.kind !== 129 || prop.kind !== 166) {
+                        if (mod.kind !== 130 || prop.kind !== 167) {
                             grammarErrorOnNode(mod, ts.Diagnostics._0_modifier_cannot_be_used_here, ts.getTextOfNode(mod));
                         }
                     }
                 }
                 var currentKind = void 0;
                 switch (prop.kind) {
-                    case 290:
+                    case 292:
                         checkGrammarForInvalidExclamationToken(prop.exclamationToken, ts.Diagnostics.A_definite_assignment_assertion_is_not_permitted_in_this_context);
-                    case 289:
+                    case 291:
                         checkGrammarForInvalidQuestionMark(prop.questionToken, ts.Diagnostics.An_object_member_cannot_be_declared_optional);
                         if (name.kind === 8) {
                             checkGrammarNumericLiteral(name);
                         }
                         currentKind = 4;
                         break;
-                    case 166:
+                    case 167:
                         currentKind = 8;
                         break;
-                    case 168:
+                    case 170:
                         currentKind = 1;
                         break;
-                    case 169:
+                    case 171:
                         currentKind = 2;
                         break;
                     default:
@@ -69281,7 +70652,7 @@
             var seen = new ts.Map();
             for (var _i = 0, _a = node.attributes.properties; _i < _a.length; _i++) {
                 var attr = _a[_i];
-                if (attr.kind === 283) {
+                if (attr.kind === 285) {
                     continue;
                 }
                 var name = attr.name, initializer = attr.initializer;
@@ -69291,7 +70662,7 @@
                 else {
                     return grammarErrorOnNode(name, ts.Diagnostics.JSX_elements_cannot_have_multiple_attributes_with_the_same_name);
                 }
-                if (initializer && initializer.kind === 284 && !initializer.expression) {
+                if (initializer && initializer.kind === 286 && !initializer.expression) {
                     return grammarErrorOnNode(initializer, ts.Diagnostics.JSX_attributes_must_only_be_assigned_a_non_empty_expression);
                 }
             }
@@ -69326,7 +70697,7 @@
             if (checkGrammarStatementInAmbientContext(forInOrOfStatement)) {
                 return true;
             }
-            if (forInOrOfStatement.kind === 240 && forInOrOfStatement.awaitModifier) {
+            if (forInOrOfStatement.kind === 242 && forInOrOfStatement.awaitModifier) {
                 if (!(forInOrOfStatement.flags & 32768)) {
                     var sourceFile = ts.getSourceFileOfNode(forInOrOfStatement);
                     if (ts.isInTopLevelContext(forInOrOfStatement)) {
@@ -69343,7 +70714,7 @@
                         if (!hasParseDiagnostics(sourceFile)) {
                             var diagnostic = ts.createDiagnosticForNode(forInOrOfStatement.awaitModifier, ts.Diagnostics.for_await_loops_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules);
                             var func = ts.getContainingFunction(forInOrOfStatement);
-                            if (func && func.kind !== 167) {
+                            if (func && func.kind !== 169) {
                                 ts.Debug.assert((ts.getFunctionFlags(func) & 2) === 0, "Enclosing function should never be an async function.");
                                 var relatedInfo = ts.createDiagnosticForNode(func, ts.Diagnostics.Did_you_mean_to_mark_this_function_as_async);
                                 ts.addRelatedInfo(diagnostic, relatedInfo);
@@ -69355,7 +70726,12 @@
                     return false;
                 }
             }
-            if (forInOrOfStatement.initializer.kind === 251) {
+            if (ts.isForOfStatement(forInOrOfStatement) && !(forInOrOfStatement.flags & 32768) &&
+                ts.isIdentifier(forInOrOfStatement.initializer) && forInOrOfStatement.initializer.escapedText === "async") {
+                grammarErrorOnNode(forInOrOfStatement.initializer, ts.Diagnostics.The_left_hand_side_of_a_for_of_statement_may_not_be_async);
+                return false;
+            }
+            if (forInOrOfStatement.initializer.kind === 253) {
                 var variableList = forInOrOfStatement.initializer;
                 if (!checkGrammarVariableDeclarationList(variableList)) {
                     var declarations = variableList.declarations;
@@ -69363,20 +70739,20 @@
                         return false;
                     }
                     if (declarations.length > 1) {
-                        var diagnostic = forInOrOfStatement.kind === 239
+                        var diagnostic = forInOrOfStatement.kind === 241
                             ? ts.Diagnostics.Only_a_single_variable_declaration_is_allowed_in_a_for_in_statement
                             : ts.Diagnostics.Only_a_single_variable_declaration_is_allowed_in_a_for_of_statement;
                         return grammarErrorOnFirstToken(variableList.declarations[1], diagnostic);
                     }
                     var firstDeclaration = declarations[0];
                     if (firstDeclaration.initializer) {
-                        var diagnostic = forInOrOfStatement.kind === 239
+                        var diagnostic = forInOrOfStatement.kind === 241
                             ? ts.Diagnostics.The_variable_declaration_of_a_for_in_statement_cannot_have_an_initializer
                             : ts.Diagnostics.The_variable_declaration_of_a_for_of_statement_cannot_have_an_initializer;
                         return grammarErrorOnNode(firstDeclaration.name, diagnostic);
                     }
                     if (firstDeclaration.type) {
-                        var diagnostic = forInOrOfStatement.kind === 239
+                        var diagnostic = forInOrOfStatement.kind === 241
                             ? ts.Diagnostics.The_left_hand_side_of_a_for_in_statement_cannot_use_a_type_annotation
                             : ts.Diagnostics.The_left_hand_side_of_a_for_of_statement_cannot_use_a_type_annotation;
                         return grammarErrorOnNode(firstDeclaration, diagnostic);
@@ -69386,7 +70762,7 @@
             return false;
         }
         function checkGrammarAccessor(accessor) {
-            if (!(accessor.flags & 8388608) && (accessor.parent.kind !== 178) && (accessor.parent.kind !== 254)) {
+            if (!(accessor.flags & 8388608) && (accessor.parent.kind !== 180) && (accessor.parent.kind !== 256)) {
                 if (languageVersion < 1) {
                     return grammarErrorOnNode(accessor.name, ts.Diagnostics.Accessors_are_only_available_when_targeting_ECMAScript_5_and_higher);
                 }
@@ -69401,7 +70777,7 @@
                 if (ts.hasSyntacticModifier(accessor, 128)) {
                     return grammarErrorOnNode(accessor, ts.Diagnostics.An_abstract_accessor_cannot_have_an_implementation);
                 }
-                if (accessor.parent.kind === 178 || accessor.parent.kind === 254) {
+                if (accessor.parent.kind === 180 || accessor.parent.kind === 256) {
                     return grammarErrorOnNode(accessor.body, ts.Diagnostics.An_implementation_cannot_be_declared_in_ambient_contexts);
                 }
             }
@@ -69409,11 +70785,11 @@
                 return grammarErrorOnNode(accessor.name, ts.Diagnostics.An_accessor_cannot_have_type_parameters);
             }
             if (!doesAccessorHaveCorrectParameterCount(accessor)) {
-                return grammarErrorOnNode(accessor.name, accessor.kind === 168 ?
+                return grammarErrorOnNode(accessor.name, accessor.kind === 170 ?
                     ts.Diagnostics.A_get_accessor_cannot_have_parameters :
                     ts.Diagnostics.A_set_accessor_must_have_exactly_one_parameter);
             }
-            if (accessor.kind === 169) {
+            if (accessor.kind === 171) {
                 if (accessor.type) {
                     return grammarErrorOnNode(accessor.name, ts.Diagnostics.A_set_accessor_cannot_have_a_return_type_annotation);
                 }
@@ -69431,17 +70807,17 @@
             return false;
         }
         function doesAccessorHaveCorrectParameterCount(accessor) {
-            return getAccessorThisParameter(accessor) || accessor.parameters.length === (accessor.kind === 168 ? 0 : 1);
+            return getAccessorThisParameter(accessor) || accessor.parameters.length === (accessor.kind === 170 ? 0 : 1);
         }
         function getAccessorThisParameter(accessor) {
-            if (accessor.parameters.length === (accessor.kind === 168 ? 1 : 2)) {
+            if (accessor.parameters.length === (accessor.kind === 170 ? 1 : 2)) {
                 return ts.getThisParameter(accessor);
             }
         }
         function checkGrammarTypeOperatorNode(node) {
-            if (node.operator === 151) {
-                if (node.type.kind !== 148) {
-                    return grammarErrorOnNode(node.type, ts.Diagnostics._0_expected, ts.tokenToString(148));
+            if (node.operator === 152) {
+                if (node.type.kind !== 149) {
+                    return grammarErrorOnNode(node.type, ts.Diagnostics._0_expected, ts.tokenToString(149));
                 }
                 var parent = ts.walkUpParenthesizedTypes(node.parent);
                 if (ts.isInJSFile(parent) && ts.isJSDocTypeExpression(parent)) {
@@ -69451,9 +70827,9 @@
                     }
                 }
                 switch (parent.kind) {
-                    case 250:
+                    case 252:
                         var decl = parent;
-                        if (decl.name.kind !== 78) {
+                        if (decl.name.kind !== 79) {
                             return grammarErrorOnNode(node, ts.Diagnostics.unique_symbol_types_may_not_be_used_on_a_variable_declaration_with_a_binding_name);
                         }
                         if (!ts.isVariableDeclarationInVariableStatement(decl)) {
@@ -69463,13 +70839,13 @@
                             return grammarErrorOnNode(parent.name, ts.Diagnostics.A_variable_whose_type_is_a_unique_symbol_type_must_be_const);
                         }
                         break;
-                    case 164:
-                        if (!ts.hasSyntacticModifier(parent, 32) ||
-                            !ts.hasEffectiveModifier(parent, 64)) {
+                    case 165:
+                        if (!ts.isStatic(parent) ||
+                            !ts.hasEffectiveReadonlyModifier(parent)) {
                             return grammarErrorOnNode(parent.name, ts.Diagnostics.A_property_of_a_class_whose_type_is_a_unique_symbol_type_must_be_both_static_and_readonly);
                         }
                         break;
-                    case 163:
+                    case 164:
                         if (!ts.hasSyntacticModifier(parent, 64)) {
                             return grammarErrorOnNode(parent.name, ts.Diagnostics.A_property_of_an_interface_or_type_literal_whose_type_is_a_unique_symbol_type_must_be_readonly);
                         }
@@ -69478,9 +70854,9 @@
                         return grammarErrorOnNode(node, ts.Diagnostics.unique_symbol_types_are_not_allowed_here);
                 }
             }
-            else if (node.operator === 142) {
-                if (node.type.kind !== 179 && node.type.kind !== 180) {
-                    return grammarErrorOnFirstToken(node, ts.Diagnostics.readonly_type_modifier_is_only_permitted_on_array_and_tuple_literal_types, ts.tokenToString(148));
+            else if (node.operator === 143) {
+                if (node.type.kind !== 181 && node.type.kind !== 182) {
+                    return grammarErrorOnFirstToken(node, ts.Diagnostics.readonly_type_modifier_is_only_permitted_on_array_and_tuple_literal_types, ts.tokenToString(149));
                 }
             }
         }
@@ -69493,9 +70869,9 @@
             if (checkGrammarFunctionLikeDeclaration(node)) {
                 return true;
             }
-            if (node.kind === 166) {
-                if (node.parent.kind === 201) {
-                    if (node.modifiers && !(node.modifiers.length === 1 && ts.first(node.modifiers).kind === 129)) {
+            if (node.kind === 167) {
+                if (node.parent.kind === 203) {
+                    if (node.modifiers && !(node.modifiers.length === 1 && ts.first(node.modifiers).kind === 130)) {
                         return grammarErrorOnFirstToken(node, ts.Diagnostics.Modifiers_cannot_appear_here);
                     }
                     else if (checkGrammarForInvalidQuestionMark(node.questionToken, ts.Diagnostics.An_object_member_cannot_be_declared_optional)) {
@@ -69519,27 +70895,27 @@
                 if (node.flags & 8388608) {
                     return checkGrammarForInvalidDynamicName(node.name, ts.Diagnostics.A_computed_property_name_in_an_ambient_context_must_refer_to_an_expression_whose_type_is_a_literal_type_or_a_unique_symbol_type);
                 }
-                else if (node.kind === 166 && !node.body) {
+                else if (node.kind === 167 && !node.body) {
                     return checkGrammarForInvalidDynamicName(node.name, ts.Diagnostics.A_computed_property_name_in_a_method_overload_must_refer_to_an_expression_whose_type_is_a_literal_type_or_a_unique_symbol_type);
                 }
             }
-            else if (node.parent.kind === 254) {
+            else if (node.parent.kind === 256) {
                 return checkGrammarForInvalidDynamicName(node.name, ts.Diagnostics.A_computed_property_name_in_an_interface_must_refer_to_an_expression_whose_type_is_a_literal_type_or_a_unique_symbol_type);
             }
-            else if (node.parent.kind === 178) {
+            else if (node.parent.kind === 180) {
                 return checkGrammarForInvalidDynamicName(node.name, ts.Diagnostics.A_computed_property_name_in_a_type_literal_must_refer_to_an_expression_whose_type_is_a_literal_type_or_a_unique_symbol_type);
             }
         }
         function checkGrammarBreakOrContinueStatement(node) {
             var current = node;
             while (current) {
-                if (ts.isFunctionLike(current)) {
+                if (ts.isFunctionLikeOrClassStaticBlockDeclaration(current)) {
                     return grammarErrorOnNode(node, ts.Diagnostics.Jump_target_cannot_cross_function_boundary);
                 }
                 switch (current.kind) {
-                    case 246:
+                    case 248:
                         if (node.label && current.label.escapedText === node.label.escapedText) {
-                            var isMisplacedContinueLabel = node.kind === 241
+                            var isMisplacedContinueLabel = node.kind === 243
                                 && !ts.isIterationStatement(current.statement, true);
                             if (isMisplacedContinueLabel) {
                                 return grammarErrorOnNode(node, ts.Diagnostics.A_continue_statement_can_only_jump_to_a_label_of_an_enclosing_iteration_statement);
@@ -69547,8 +70923,8 @@
                             return false;
                         }
                         break;
-                    case 245:
-                        if (node.kind === 242 && !node.label) {
+                    case 247:
+                        if (node.kind === 244 && !node.label) {
                             return false;
                         }
                         break;
@@ -69561,13 +70937,13 @@
                 current = current.parent;
             }
             if (node.label) {
-                var message = node.kind === 242
+                var message = node.kind === 244
                     ? ts.Diagnostics.A_break_statement_can_only_jump_to_a_label_of_an_enclosing_statement
                     : ts.Diagnostics.A_continue_statement_can_only_jump_to_a_label_of_an_enclosing_iteration_statement;
                 return grammarErrorOnNode(node, message);
             }
             else {
-                var message = node.kind === 242
+                var message = node.kind === 244
                     ? ts.Diagnostics.A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement
                     : ts.Diagnostics.A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement;
                 return grammarErrorOnNode(node, message);
@@ -69590,12 +70966,12 @@
         }
         function isStringOrNumberLiteralExpression(expr) {
             return ts.isStringOrNumericLiteralLike(expr) ||
-                expr.kind === 215 && expr.operator === 40 &&
+                expr.kind === 217 && expr.operator === 40 &&
                     expr.operand.kind === 8;
         }
         function isBigIntLiteralExpression(expr) {
             return expr.kind === 9 ||
-                expr.kind === 215 && expr.operator === 40 &&
+                expr.kind === 217 && expr.operator === 40 &&
                     expr.operand.kind === 9;
         }
         function isSimpleLiteralEnumReference(expr) {
@@ -69609,7 +70985,7 @@
             if (initializer) {
                 var isInvalidInitializer = !(isStringOrNumberLiteralExpression(initializer) ||
                     isSimpleLiteralEnumReference(initializer) ||
-                    initializer.kind === 109 || initializer.kind === 94 ||
+                    initializer.kind === 110 || initializer.kind === 95 ||
                     isBigIntLiteralExpression(initializer));
                 var isConstOrReadonly = ts.isDeclarationReadonly(node) || ts.isVariableDeclaration(node) && ts.isVarConst(node);
                 if (isConstOrReadonly && !node.type) {
@@ -69626,7 +71002,7 @@
             }
         }
         function checkGrammarVariableDeclaration(node) {
-            if (node.parent.parent.kind !== 239 && node.parent.parent.kind !== 240) {
+            if (node.parent.parent.kind !== 241 && node.parent.parent.kind !== 242) {
                 if (node.flags & 8388608) {
                     checkAmbientInitializer(node);
                 }
@@ -69639,7 +71015,7 @@
                     }
                 }
             }
-            if (node.exclamationToken && (node.parent.parent.kind !== 233 || !node.type || node.initializer || node.flags & 8388608)) {
+            if (node.exclamationToken && (node.parent.parent.kind !== 235 || !node.type || node.initializer || node.flags & 8388608)) {
                 var message = node.initializer
                     ? ts.Diagnostics.Declarations_with_initializers_cannot_also_have_definite_assignment_assertions
                     : !node.type
@@ -69656,7 +71032,7 @@
             return checkLetConstNames && checkGrammarNameInLetOrConstDeclarations(node.name);
         }
         function checkESModuleMarker(name) {
-            if (name.kind === 78) {
+            if (name.kind === 79) {
                 if (ts.idText(name) === "__esModule") {
                     return grammarErrorOnNodeSkippedOn("noEmit", name, ts.Diagnostics.Identifier_expected_esModule_is_reserved_as_an_exported_marker_when_transforming_ECMAScript_modules);
                 }
@@ -69673,8 +71049,8 @@
             return false;
         }
         function checkGrammarNameInLetOrConstDeclarations(name) {
-            if (name.kind === 78) {
-                if (name.originalKeywordKind === 118) {
+            if (name.kind === 79) {
+                if (name.originalKeywordKind === 119) {
                     return grammarErrorOnNode(name, ts.Diagnostics.let_is_not_allowed_to_be_used_as_a_name_in_let_or_const_declarations);
                 }
             }
@@ -69701,15 +71077,15 @@
         }
         function allowLetAndConstDeclarations(parent) {
             switch (parent.kind) {
-                case 235:
-                case 236:
                 case 237:
-                case 244:
                 case 238:
                 case 239:
-                case 240:
-                    return false;
                 case 246:
+                case 240:
+                case 241:
+                case 242:
+                    return false;
+                case 248:
                     return allowLetAndConstDeclarations(parent.parent);
             }
             return true;
@@ -69727,12 +71103,12 @@
         function checkGrammarMetaProperty(node) {
             var escapedText = node.name.escapedText;
             switch (node.keywordToken) {
-                case 102:
+                case 103:
                     if (escapedText !== "target") {
                         return grammarErrorOnNode(node.name, ts.Diagnostics._0_is_not_a_valid_meta_property_for_keyword_1_Did_you_mean_2, node.name.escapedText, ts.tokenToString(node.keywordToken), "target");
                     }
                     break;
-                case 99:
+                case 100:
                     if (escapedText !== "meta") {
                         return grammarErrorOnNode(node.name, ts.Diagnostics._0_is_not_a_valid_meta_property_for_keyword_1_Did_you_mean_2, node.name.escapedText, ts.tokenToString(node.keywordToken), "meta");
                     }
@@ -69801,7 +71177,7 @@
                     return grammarErrorOnNode(node.name, ts.Diagnostics.Private_identifiers_are_only_available_when_targeting_ECMAScript_2015_and_higher);
                 }
             }
-            else if (node.parent.kind === 254) {
+            else if (node.parent.kind === 256) {
                 if (checkGrammarForInvalidDynamicName(node.name, ts.Diagnostics.A_computed_property_name_in_an_interface_must_refer_to_an_expression_whose_type_is_a_literal_type_or_a_unique_symbol_type)) {
                     return true;
                 }
@@ -69809,7 +71185,7 @@
                     return grammarErrorOnNode(node.initializer, ts.Diagnostics.An_interface_property_cannot_have_an_initializer);
                 }
             }
-            else if (node.parent.kind === 178) {
+            else if (node.parent.kind === 180) {
                 if (checkGrammarForInvalidDynamicName(node.name, ts.Diagnostics.A_computed_property_name_in_a_type_literal_must_refer_to_an_expression_whose_type_is_a_literal_type_or_a_unique_symbol_type)) {
                     return true;
                 }
@@ -69821,7 +71197,7 @@
                 checkAmbientInitializer(node);
             }
             if (ts.isPropertyDeclaration(node) && node.exclamationToken && (!ts.isClassLike(node.parent) || !node.type || node.initializer ||
-                node.flags & 8388608 || ts.hasSyntacticModifier(node, 32 | 128))) {
+                node.flags & 8388608 || ts.isStatic(node) || ts.hasAbstractModifier(node))) {
                 var message = node.initializer
                     ? ts.Diagnostics.Declarations_with_initializers_cannot_also_have_definite_assignment_assertions
                     : !node.type
@@ -69831,13 +71207,13 @@
             }
         }
         function checkGrammarTopLevelElementForRequiredDeclareModifier(node) {
-            if (node.kind === 254 ||
-                node.kind === 255 ||
+            if (node.kind === 256 ||
+                node.kind === 257 ||
+                node.kind === 264 ||
+                node.kind === 263 ||
+                node.kind === 270 ||
+                node.kind === 269 ||
                 node.kind === 262 ||
-                node.kind === 261 ||
-                node.kind === 268 ||
-                node.kind === 267 ||
-                node.kind === 260 ||
                 ts.hasSyntacticModifier(node, 2 | 1 | 512)) {
                 return false;
             }
@@ -69846,7 +71222,7 @@
         function checkGrammarTopLevelElementsForRequiredDeclareModifier(file) {
             for (var _i = 0, _a = file.statements; _i < _a.length; _i++) {
                 var decl = _a[_i];
-                if (ts.isDeclaration(decl) || decl.kind === 233) {
+                if (ts.isDeclaration(decl) || decl.kind === 235) {
                     if (checkGrammarTopLevelElementForRequiredDeclareModifier(decl)) {
                         return true;
                     }
@@ -69863,7 +71239,7 @@
                 if (!links.hasReportedStatementInAmbientContext && (ts.isFunctionLike(node.parent) || ts.isAccessor(node.parent))) {
                     return getNodeLinks(node).hasReportedStatementInAmbientContext = grammarErrorOnFirstToken(node, ts.Diagnostics.An_implementation_cannot_be_declared_in_ambient_contexts);
                 }
-                if (node.parent.kind === 231 || node.parent.kind === 258 || node.parent.kind === 298) {
+                if (node.parent.kind === 233 || node.parent.kind === 260 || node.parent.kind === 300) {
                     var links_2 = getNodeLinks(node.parent);
                     if (!links_2.hasReportedStatementInAmbientContext) {
                         return links_2.hasReportedStatementInAmbientContext = grammarErrorOnFirstToken(node, ts.Diagnostics.Statements_are_not_allowed_in_ambient_contexts);
@@ -69880,10 +71256,10 @@
                 if (languageVersion >= 1) {
                     diagnosticMessage = ts.Diagnostics.Octal_literals_are_not_available_when_targeting_ECMAScript_5_and_higher_Use_the_syntax_0;
                 }
-                else if (ts.isChildOfNodeWithKind(node, 192)) {
+                else if (ts.isChildOfNodeWithKind(node, 194)) {
                     diagnosticMessage = ts.Diagnostics.Octal_literal_types_must_use_ES2015_syntax_Use_the_syntax_0;
                 }
-                else if (ts.isChildOfNodeWithKind(node, 292)) {
+                else if (ts.isChildOfNodeWithKind(node, 294)) {
                     diagnosticMessage = ts.Diagnostics.Octal_literals_are_not_allowed_in_enums_members_initializer_Use_the_syntax_0;
                 }
                 if (diagnosticMessage) {
@@ -70045,13 +71421,13 @@
         return !ts.isAccessor(declaration);
     }
     function isNotOverload(declaration) {
-        return (declaration.kind !== 252 && declaration.kind !== 166) ||
+        return (declaration.kind !== 254 && declaration.kind !== 167) ||
             !!declaration.body;
     }
     function isDeclarationNameOrImportPropertyName(name) {
         switch (name.parent.kind) {
-            case 266:
-            case 271:
+            case 268:
+            case 273:
                 return ts.isIdentifier(name);
             default:
                 return ts.isDeclarationName(name);
@@ -70263,415 +71639,420 @@
             return undefined;
         }
         var kind = node.kind;
-        if ((kind > 0 && kind <= 157) || kind === 188) {
+        if ((kind > 0 && kind <= 158) || kind === 190) {
             return node;
         }
         var factory = context.factory;
         switch (kind) {
-            case 78:
+            case 79:
                 ts.Debug.type(node);
                 return factory.updateIdentifier(node, nodesVisitor(node.typeArguments, visitor, ts.isTypeNodeOrTypeParameterDeclaration));
-            case 158:
-                ts.Debug.type(node);
-                return factory.updateQualifiedName(node, nodeVisitor(node.left, visitor, ts.isEntityName), nodeVisitor(node.right, visitor, ts.isIdentifier));
             case 159:
                 ts.Debug.type(node);
-                return factory.updateComputedPropertyName(node, nodeVisitor(node.expression, visitor, ts.isExpression));
+                return factory.updateQualifiedName(node, nodeVisitor(node.left, visitor, ts.isEntityName), nodeVisitor(node.right, visitor, ts.isIdentifier));
             case 160:
                 ts.Debug.type(node);
-                return factory.updateTypeParameterDeclaration(node, nodeVisitor(node.name, visitor, ts.isIdentifier), nodeVisitor(node.constraint, visitor, ts.isTypeNode), nodeVisitor(node.default, visitor, ts.isTypeNode));
+                return factory.updateComputedPropertyName(node, nodeVisitor(node.expression, visitor, ts.isExpression));
             case 161:
                 ts.Debug.type(node);
-                return factory.updateParameterDeclaration(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), nodeVisitor(node.dotDotDotToken, tokenVisitor, ts.isDotDotDotToken), nodeVisitor(node.name, visitor, ts.isBindingName), nodeVisitor(node.questionToken, tokenVisitor, ts.isQuestionToken), nodeVisitor(node.type, visitor, ts.isTypeNode), nodeVisitor(node.initializer, visitor, ts.isExpression));
+                return factory.updateTypeParameterDeclaration(node, nodeVisitor(node.name, visitor, ts.isIdentifier), nodeVisitor(node.constraint, visitor, ts.isTypeNode), nodeVisitor(node.default, visitor, ts.isTypeNode));
             case 162:
                 ts.Debug.type(node);
-                return factory.updateDecorator(node, nodeVisitor(node.expression, visitor, ts.isExpression));
+                return factory.updateParameterDeclaration(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), nodeVisitor(node.dotDotDotToken, tokenVisitor, ts.isDotDotDotToken), nodeVisitor(node.name, visitor, ts.isBindingName), nodeVisitor(node.questionToken, tokenVisitor, ts.isQuestionToken), nodeVisitor(node.type, visitor, ts.isTypeNode), nodeVisitor(node.initializer, visitor, ts.isExpression));
             case 163:
                 ts.Debug.type(node);
-                return factory.updatePropertySignature(node, nodesVisitor(node.modifiers, visitor, ts.isModifier), nodeVisitor(node.name, visitor, ts.isPropertyName), nodeVisitor(node.questionToken, tokenVisitor, ts.isToken), nodeVisitor(node.type, visitor, ts.isTypeNode));
+                return factory.updateDecorator(node, nodeVisitor(node.expression, visitor, ts.isExpression));
             case 164:
                 ts.Debug.type(node);
-                return factory.updatePropertyDeclaration(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), nodeVisitor(node.name, visitor, ts.isPropertyName), nodeVisitor(node.questionToken || node.exclamationToken, tokenVisitor, ts.isQuestionOrExclamationToken), nodeVisitor(node.type, visitor, ts.isTypeNode), nodeVisitor(node.initializer, visitor, ts.isExpression));
+                return factory.updatePropertySignature(node, nodesVisitor(node.modifiers, visitor, ts.isModifier), nodeVisitor(node.name, visitor, ts.isPropertyName), nodeVisitor(node.questionToken, tokenVisitor, ts.isToken), nodeVisitor(node.type, visitor, ts.isTypeNode));
             case 165:
                 ts.Debug.type(node);
-                return factory.updateMethodSignature(node, nodesVisitor(node.modifiers, visitor, ts.isModifier), nodeVisitor(node.name, visitor, ts.isPropertyName), nodeVisitor(node.questionToken, tokenVisitor, ts.isQuestionToken), nodesVisitor(node.typeParameters, visitor, ts.isTypeParameterDeclaration), nodesVisitor(node.parameters, visitor, ts.isParameterDeclaration), nodeVisitor(node.type, visitor, ts.isTypeNode));
+                return factory.updatePropertyDeclaration(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), nodeVisitor(node.name, visitor, ts.isPropertyName), nodeVisitor(node.questionToken || node.exclamationToken, tokenVisitor, ts.isQuestionOrExclamationToken), nodeVisitor(node.type, visitor, ts.isTypeNode), nodeVisitor(node.initializer, visitor, ts.isExpression));
             case 166:
                 ts.Debug.type(node);
-                return factory.updateMethodDeclaration(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), nodeVisitor(node.asteriskToken, tokenVisitor, ts.isAsteriskToken), nodeVisitor(node.name, visitor, ts.isPropertyName), nodeVisitor(node.questionToken, tokenVisitor, ts.isQuestionToken), nodesVisitor(node.typeParameters, visitor, ts.isTypeParameterDeclaration), visitParameterList(node.parameters, visitor, context, nodesVisitor), nodeVisitor(node.type, visitor, ts.isTypeNode), visitFunctionBody(node.body, visitor, context, nodeVisitor));
+                return factory.updateMethodSignature(node, nodesVisitor(node.modifiers, visitor, ts.isModifier), nodeVisitor(node.name, visitor, ts.isPropertyName), nodeVisitor(node.questionToken, tokenVisitor, ts.isQuestionToken), nodesVisitor(node.typeParameters, visitor, ts.isTypeParameterDeclaration), nodesVisitor(node.parameters, visitor, ts.isParameterDeclaration), nodeVisitor(node.type, visitor, ts.isTypeNode));
             case 167:
                 ts.Debug.type(node);
-                return factory.updateConstructorDeclaration(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), visitParameterList(node.parameters, visitor, context, nodesVisitor), visitFunctionBody(node.body, visitor, context, nodeVisitor));
-            case 168:
-                ts.Debug.type(node);
-                return factory.updateGetAccessorDeclaration(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), nodeVisitor(node.name, visitor, ts.isPropertyName), visitParameterList(node.parameters, visitor, context, nodesVisitor), nodeVisitor(node.type, visitor, ts.isTypeNode), visitFunctionBody(node.body, visitor, context, nodeVisitor));
+                return factory.updateMethodDeclaration(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), nodeVisitor(node.asteriskToken, tokenVisitor, ts.isAsteriskToken), nodeVisitor(node.name, visitor, ts.isPropertyName), nodeVisitor(node.questionToken, tokenVisitor, ts.isQuestionToken), nodesVisitor(node.typeParameters, visitor, ts.isTypeParameterDeclaration), visitParameterList(node.parameters, visitor, context, nodesVisitor), nodeVisitor(node.type, visitor, ts.isTypeNode), visitFunctionBody(node.body, visitor, context, nodeVisitor));
             case 169:
                 ts.Debug.type(node);
-                return factory.updateSetAccessorDeclaration(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), nodeVisitor(node.name, visitor, ts.isPropertyName), visitParameterList(node.parameters, visitor, context, nodesVisitor), visitFunctionBody(node.body, visitor, context, nodeVisitor));
+                return factory.updateConstructorDeclaration(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), visitParameterList(node.parameters, visitor, context, nodesVisitor), visitFunctionBody(node.body, visitor, context, nodeVisitor));
             case 170:
                 ts.Debug.type(node);
-                return factory.updateCallSignature(node, nodesVisitor(node.typeParameters, visitor, ts.isTypeParameterDeclaration), nodesVisitor(node.parameters, visitor, ts.isParameterDeclaration), nodeVisitor(node.type, visitor, ts.isTypeNode));
+                return factory.updateGetAccessorDeclaration(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), nodeVisitor(node.name, visitor, ts.isPropertyName), visitParameterList(node.parameters, visitor, context, nodesVisitor), nodeVisitor(node.type, visitor, ts.isTypeNode), visitFunctionBody(node.body, visitor, context, nodeVisitor));
             case 171:
                 ts.Debug.type(node);
-                return factory.updateConstructSignature(node, nodesVisitor(node.typeParameters, visitor, ts.isTypeParameterDeclaration), nodesVisitor(node.parameters, visitor, ts.isParameterDeclaration), nodeVisitor(node.type, visitor, ts.isTypeNode));
+                return factory.updateSetAccessorDeclaration(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), nodeVisitor(node.name, visitor, ts.isPropertyName), visitParameterList(node.parameters, visitor, context, nodesVisitor), visitFunctionBody(node.body, visitor, context, nodeVisitor));
+            case 168:
+                ts.Debug.type(node);
+                context.startLexicalEnvironment();
+                context.suspendLexicalEnvironment();
+                return factory.updateClassStaticBlockDeclaration(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), visitFunctionBody(node.body, visitor, context, nodeVisitor));
             case 172:
                 ts.Debug.type(node);
-                return factory.updateIndexSignature(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), nodesVisitor(node.parameters, visitor, ts.isParameterDeclaration), nodeVisitor(node.type, visitor, ts.isTypeNode));
+                return factory.updateCallSignature(node, nodesVisitor(node.typeParameters, visitor, ts.isTypeParameterDeclaration), nodesVisitor(node.parameters, visitor, ts.isParameterDeclaration), nodeVisitor(node.type, visitor, ts.isTypeNode));
             case 173:
                 ts.Debug.type(node);
-                return factory.updateTypePredicateNode(node, nodeVisitor(node.assertsModifier, visitor, ts.isAssertsKeyword), nodeVisitor(node.parameterName, visitor, ts.isIdentifierOrThisTypeNode), nodeVisitor(node.type, visitor, ts.isTypeNode));
+                return factory.updateConstructSignature(node, nodesVisitor(node.typeParameters, visitor, ts.isTypeParameterDeclaration), nodesVisitor(node.parameters, visitor, ts.isParameterDeclaration), nodeVisitor(node.type, visitor, ts.isTypeNode));
             case 174:
                 ts.Debug.type(node);
-                return factory.updateTypeReferenceNode(node, nodeVisitor(node.typeName, visitor, ts.isEntityName), nodesVisitor(node.typeArguments, visitor, ts.isTypeNode));
+                return factory.updateIndexSignature(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), nodesVisitor(node.parameters, visitor, ts.isParameterDeclaration), nodeVisitor(node.type, visitor, ts.isTypeNode));
             case 175:
                 ts.Debug.type(node);
-                return factory.updateFunctionTypeNode(node, nodesVisitor(node.typeParameters, visitor, ts.isTypeParameterDeclaration), nodesVisitor(node.parameters, visitor, ts.isParameterDeclaration), nodeVisitor(node.type, visitor, ts.isTypeNode));
+                return factory.updateTypePredicateNode(node, nodeVisitor(node.assertsModifier, visitor, ts.isAssertsKeyword), nodeVisitor(node.parameterName, visitor, ts.isIdentifierOrThisTypeNode), nodeVisitor(node.type, visitor, ts.isTypeNode));
             case 176:
                 ts.Debug.type(node);
-                return factory.updateConstructorTypeNode(node, nodesVisitor(node.modifiers, visitor, ts.isModifier), nodesVisitor(node.typeParameters, visitor, ts.isTypeParameterDeclaration), nodesVisitor(node.parameters, visitor, ts.isParameterDeclaration), nodeVisitor(node.type, visitor, ts.isTypeNode));
+                return factory.updateTypeReferenceNode(node, nodeVisitor(node.typeName, visitor, ts.isEntityName), nodesVisitor(node.typeArguments, visitor, ts.isTypeNode));
             case 177:
                 ts.Debug.type(node);
-                return factory.updateTypeQueryNode(node, nodeVisitor(node.exprName, visitor, ts.isEntityName));
+                return factory.updateFunctionTypeNode(node, nodesVisitor(node.typeParameters, visitor, ts.isTypeParameterDeclaration), nodesVisitor(node.parameters, visitor, ts.isParameterDeclaration), nodeVisitor(node.type, visitor, ts.isTypeNode));
             case 178:
                 ts.Debug.type(node);
-                return factory.updateTypeLiteralNode(node, nodesVisitor(node.members, visitor, ts.isTypeElement));
+                return factory.updateConstructorTypeNode(node, nodesVisitor(node.modifiers, visitor, ts.isModifier), nodesVisitor(node.typeParameters, visitor, ts.isTypeParameterDeclaration), nodesVisitor(node.parameters, visitor, ts.isParameterDeclaration), nodeVisitor(node.type, visitor, ts.isTypeNode));
             case 179:
                 ts.Debug.type(node);
-                return factory.updateArrayTypeNode(node, nodeVisitor(node.elementType, visitor, ts.isTypeNode));
+                return factory.updateTypeQueryNode(node, nodeVisitor(node.exprName, visitor, ts.isEntityName));
             case 180:
                 ts.Debug.type(node);
-                return factory.updateTupleTypeNode(node, nodesVisitor(node.elements, visitor, ts.isTypeNode));
+                return factory.updateTypeLiteralNode(node, nodesVisitor(node.members, visitor, ts.isTypeElement));
             case 181:
                 ts.Debug.type(node);
-                return factory.updateOptionalTypeNode(node, nodeVisitor(node.type, visitor, ts.isTypeNode));
+                return factory.updateArrayTypeNode(node, nodeVisitor(node.elementType, visitor, ts.isTypeNode));
             case 182:
                 ts.Debug.type(node);
-                return factory.updateRestTypeNode(node, nodeVisitor(node.type, visitor, ts.isTypeNode));
+                return factory.updateTupleTypeNode(node, nodesVisitor(node.elements, visitor, ts.isTypeNode));
             case 183:
                 ts.Debug.type(node);
-                return factory.updateUnionTypeNode(node, nodesVisitor(node.types, visitor, ts.isTypeNode));
+                return factory.updateOptionalTypeNode(node, nodeVisitor(node.type, visitor, ts.isTypeNode));
             case 184:
                 ts.Debug.type(node);
-                return factory.updateIntersectionTypeNode(node, nodesVisitor(node.types, visitor, ts.isTypeNode));
+                return factory.updateRestTypeNode(node, nodeVisitor(node.type, visitor, ts.isTypeNode));
             case 185:
                 ts.Debug.type(node);
-                return factory.updateConditionalTypeNode(node, nodeVisitor(node.checkType, visitor, ts.isTypeNode), nodeVisitor(node.extendsType, visitor, ts.isTypeNode), nodeVisitor(node.trueType, visitor, ts.isTypeNode), nodeVisitor(node.falseType, visitor, ts.isTypeNode));
+                return factory.updateUnionTypeNode(node, nodesVisitor(node.types, visitor, ts.isTypeNode));
             case 186:
                 ts.Debug.type(node);
-                return factory.updateInferTypeNode(node, nodeVisitor(node.typeParameter, visitor, ts.isTypeParameterDeclaration));
-            case 196:
-                ts.Debug.type(node);
-                return factory.updateImportTypeNode(node, nodeVisitor(node.argument, visitor, ts.isTypeNode), nodeVisitor(node.qualifier, visitor, ts.isEntityName), visitNodes(node.typeArguments, visitor, ts.isTypeNode), node.isTypeOf);
-            case 193:
-                ts.Debug.type(node);
-                return factory.updateNamedTupleMember(node, visitNode(node.dotDotDotToken, visitor, ts.isDotDotDotToken), visitNode(node.name, visitor, ts.isIdentifier), visitNode(node.questionToken, visitor, ts.isQuestionToken), visitNode(node.type, visitor, ts.isTypeNode));
+                return factory.updateIntersectionTypeNode(node, nodesVisitor(node.types, visitor, ts.isTypeNode));
             case 187:
                 ts.Debug.type(node);
-                return factory.updateParenthesizedType(node, nodeVisitor(node.type, visitor, ts.isTypeNode));
-            case 189:
+                return factory.updateConditionalTypeNode(node, nodeVisitor(node.checkType, visitor, ts.isTypeNode), nodeVisitor(node.extendsType, visitor, ts.isTypeNode), nodeVisitor(node.trueType, visitor, ts.isTypeNode), nodeVisitor(node.falseType, visitor, ts.isTypeNode));
+            case 188:
                 ts.Debug.type(node);
-                return factory.updateTypeOperatorNode(node, nodeVisitor(node.type, visitor, ts.isTypeNode));
-            case 190:
-                ts.Debug.type(node);
-                return factory.updateIndexedAccessTypeNode(node, nodeVisitor(node.objectType, visitor, ts.isTypeNode), nodeVisitor(node.indexType, visitor, ts.isTypeNode));
-            case 191:
-                ts.Debug.type(node);
-                return factory.updateMappedTypeNode(node, nodeVisitor(node.readonlyToken, tokenVisitor, ts.isReadonlyKeywordOrPlusOrMinusToken), nodeVisitor(node.typeParameter, visitor, ts.isTypeParameterDeclaration), nodeVisitor(node.nameType, visitor, ts.isTypeNode), nodeVisitor(node.questionToken, tokenVisitor, ts.isQuestionOrPlusOrMinusToken), nodeVisitor(node.type, visitor, ts.isTypeNode));
-            case 192:
-                ts.Debug.type(node);
-                return factory.updateLiteralTypeNode(node, nodeVisitor(node.literal, visitor, ts.isExpression));
-            case 194:
-                ts.Debug.type(node);
-                return factory.updateTemplateLiteralType(node, nodeVisitor(node.head, visitor, ts.isTemplateHead), nodesVisitor(node.templateSpans, visitor, ts.isTemplateLiteralTypeSpan));
-            case 195:
-                ts.Debug.type(node);
-                return factory.updateTemplateLiteralTypeSpan(node, nodeVisitor(node.type, visitor, ts.isTypeNode), nodeVisitor(node.literal, visitor, ts.isTemplateMiddleOrTemplateTail));
-            case 197:
-                ts.Debug.type(node);
-                return factory.updateObjectBindingPattern(node, nodesVisitor(node.elements, visitor, ts.isBindingElement));
+                return factory.updateInferTypeNode(node, nodeVisitor(node.typeParameter, visitor, ts.isTypeParameterDeclaration));
             case 198:
                 ts.Debug.type(node);
-                return factory.updateArrayBindingPattern(node, nodesVisitor(node.elements, visitor, ts.isArrayBindingElement));
+                return factory.updateImportTypeNode(node, nodeVisitor(node.argument, visitor, ts.isTypeNode), nodeVisitor(node.qualifier, visitor, ts.isEntityName), visitNodes(node.typeArguments, visitor, ts.isTypeNode), node.isTypeOf);
+            case 195:
+                ts.Debug.type(node);
+                return factory.updateNamedTupleMember(node, visitNode(node.dotDotDotToken, visitor, ts.isDotDotDotToken), visitNode(node.name, visitor, ts.isIdentifier), visitNode(node.questionToken, visitor, ts.isQuestionToken), visitNode(node.type, visitor, ts.isTypeNode));
+            case 189:
+                ts.Debug.type(node);
+                return factory.updateParenthesizedType(node, nodeVisitor(node.type, visitor, ts.isTypeNode));
+            case 191:
+                ts.Debug.type(node);
+                return factory.updateTypeOperatorNode(node, nodeVisitor(node.type, visitor, ts.isTypeNode));
+            case 192:
+                ts.Debug.type(node);
+                return factory.updateIndexedAccessTypeNode(node, nodeVisitor(node.objectType, visitor, ts.isTypeNode), nodeVisitor(node.indexType, visitor, ts.isTypeNode));
+            case 193:
+                ts.Debug.type(node);
+                return factory.updateMappedTypeNode(node, nodeVisitor(node.readonlyToken, tokenVisitor, ts.isReadonlyKeywordOrPlusOrMinusToken), nodeVisitor(node.typeParameter, visitor, ts.isTypeParameterDeclaration), nodeVisitor(node.nameType, visitor, ts.isTypeNode), nodeVisitor(node.questionToken, tokenVisitor, ts.isQuestionOrPlusOrMinusToken), nodeVisitor(node.type, visitor, ts.isTypeNode));
+            case 194:
+                ts.Debug.type(node);
+                return factory.updateLiteralTypeNode(node, nodeVisitor(node.literal, visitor, ts.isExpression));
+            case 196:
+                ts.Debug.type(node);
+                return factory.updateTemplateLiteralType(node, nodeVisitor(node.head, visitor, ts.isTemplateHead), nodesVisitor(node.templateSpans, visitor, ts.isTemplateLiteralTypeSpan));
+            case 197:
+                ts.Debug.type(node);
+                return factory.updateTemplateLiteralTypeSpan(node, nodeVisitor(node.type, visitor, ts.isTypeNode), nodeVisitor(node.literal, visitor, ts.isTemplateMiddleOrTemplateTail));
             case 199:
                 ts.Debug.type(node);
-                return factory.updateBindingElement(node, nodeVisitor(node.dotDotDotToken, tokenVisitor, ts.isDotDotDotToken), nodeVisitor(node.propertyName, visitor, ts.isPropertyName), nodeVisitor(node.name, visitor, ts.isBindingName), nodeVisitor(node.initializer, visitor, ts.isExpression));
+                return factory.updateObjectBindingPattern(node, nodesVisitor(node.elements, visitor, ts.isBindingElement));
             case 200:
                 ts.Debug.type(node);
-                return factory.updateArrayLiteralExpression(node, nodesVisitor(node.elements, visitor, ts.isExpression));
+                return factory.updateArrayBindingPattern(node, nodesVisitor(node.elements, visitor, ts.isArrayBindingElement));
             case 201:
                 ts.Debug.type(node);
-                return factory.updateObjectLiteralExpression(node, nodesVisitor(node.properties, visitor, ts.isObjectLiteralElementLike));
+                return factory.updateBindingElement(node, nodeVisitor(node.dotDotDotToken, tokenVisitor, ts.isDotDotDotToken), nodeVisitor(node.propertyName, visitor, ts.isPropertyName), nodeVisitor(node.name, visitor, ts.isBindingName), nodeVisitor(node.initializer, visitor, ts.isExpression));
             case 202:
+                ts.Debug.type(node);
+                return factory.updateArrayLiteralExpression(node, nodesVisitor(node.elements, visitor, ts.isExpression));
+            case 203:
+                ts.Debug.type(node);
+                return factory.updateObjectLiteralExpression(node, nodesVisitor(node.properties, visitor, ts.isObjectLiteralElementLike));
+            case 204:
                 if (node.flags & 32) {
                     ts.Debug.type(node);
                     return factory.updatePropertyAccessChain(node, nodeVisitor(node.expression, visitor, ts.isExpression), nodeVisitor(node.questionDotToken, tokenVisitor, ts.isQuestionDotToken), nodeVisitor(node.name, visitor, ts.isMemberName));
                 }
                 ts.Debug.type(node);
                 return factory.updatePropertyAccessExpression(node, nodeVisitor(node.expression, visitor, ts.isExpression), nodeVisitor(node.name, visitor, ts.isMemberName));
-            case 203:
+            case 205:
                 if (node.flags & 32) {
                     ts.Debug.type(node);
                     return factory.updateElementAccessChain(node, nodeVisitor(node.expression, visitor, ts.isExpression), nodeVisitor(node.questionDotToken, tokenVisitor, ts.isQuestionDotToken), nodeVisitor(node.argumentExpression, visitor, ts.isExpression));
                 }
                 ts.Debug.type(node);
                 return factory.updateElementAccessExpression(node, nodeVisitor(node.expression, visitor, ts.isExpression), nodeVisitor(node.argumentExpression, visitor, ts.isExpression));
-            case 204:
+            case 206:
                 if (node.flags & 32) {
                     ts.Debug.type(node);
                     return factory.updateCallChain(node, nodeVisitor(node.expression, visitor, ts.isExpression), nodeVisitor(node.questionDotToken, tokenVisitor, ts.isQuestionDotToken), nodesVisitor(node.typeArguments, visitor, ts.isTypeNode), nodesVisitor(node.arguments, visitor, ts.isExpression));
                 }
                 ts.Debug.type(node);
                 return factory.updateCallExpression(node, nodeVisitor(node.expression, visitor, ts.isExpression), nodesVisitor(node.typeArguments, visitor, ts.isTypeNode), nodesVisitor(node.arguments, visitor, ts.isExpression));
-            case 205:
-                ts.Debug.type(node);
-                return factory.updateNewExpression(node, nodeVisitor(node.expression, visitor, ts.isExpression), nodesVisitor(node.typeArguments, visitor, ts.isTypeNode), nodesVisitor(node.arguments, visitor, ts.isExpression));
-            case 206:
-                ts.Debug.type(node);
-                return factory.updateTaggedTemplateExpression(node, nodeVisitor(node.tag, visitor, ts.isExpression), visitNodes(node.typeArguments, visitor, ts.isTypeNode), nodeVisitor(node.template, visitor, ts.isTemplateLiteral));
             case 207:
                 ts.Debug.type(node);
-                return factory.updateTypeAssertion(node, nodeVisitor(node.type, visitor, ts.isTypeNode), nodeVisitor(node.expression, visitor, ts.isExpression));
+                return factory.updateNewExpression(node, nodeVisitor(node.expression, visitor, ts.isExpression), nodesVisitor(node.typeArguments, visitor, ts.isTypeNode), nodesVisitor(node.arguments, visitor, ts.isExpression));
             case 208:
                 ts.Debug.type(node);
-                return factory.updateParenthesizedExpression(node, nodeVisitor(node.expression, visitor, ts.isExpression));
+                return factory.updateTaggedTemplateExpression(node, nodeVisitor(node.tag, visitor, ts.isExpression), visitNodes(node.typeArguments, visitor, ts.isTypeNode), nodeVisitor(node.template, visitor, ts.isTemplateLiteral));
             case 209:
                 ts.Debug.type(node);
-                return factory.updateFunctionExpression(node, nodesVisitor(node.modifiers, visitor, ts.isModifier), nodeVisitor(node.asteriskToken, tokenVisitor, ts.isAsteriskToken), nodeVisitor(node.name, visitor, ts.isIdentifier), nodesVisitor(node.typeParameters, visitor, ts.isTypeParameterDeclaration), visitParameterList(node.parameters, visitor, context, nodesVisitor), nodeVisitor(node.type, visitor, ts.isTypeNode), visitFunctionBody(node.body, visitor, context, nodeVisitor));
+                return factory.updateTypeAssertion(node, nodeVisitor(node.type, visitor, ts.isTypeNode), nodeVisitor(node.expression, visitor, ts.isExpression));
             case 210:
                 ts.Debug.type(node);
-                return factory.updateArrowFunction(node, nodesVisitor(node.modifiers, visitor, ts.isModifier), nodesVisitor(node.typeParameters, visitor, ts.isTypeParameterDeclaration), visitParameterList(node.parameters, visitor, context, nodesVisitor), nodeVisitor(node.type, visitor, ts.isTypeNode), nodeVisitor(node.equalsGreaterThanToken, tokenVisitor, ts.isEqualsGreaterThanToken), visitFunctionBody(node.body, visitor, context, nodeVisitor));
+                return factory.updateParenthesizedExpression(node, nodeVisitor(node.expression, visitor, ts.isExpression));
             case 211:
                 ts.Debug.type(node);
-                return factory.updateDeleteExpression(node, nodeVisitor(node.expression, visitor, ts.isExpression));
+                return factory.updateFunctionExpression(node, nodesVisitor(node.modifiers, visitor, ts.isModifier), nodeVisitor(node.asteriskToken, tokenVisitor, ts.isAsteriskToken), nodeVisitor(node.name, visitor, ts.isIdentifier), nodesVisitor(node.typeParameters, visitor, ts.isTypeParameterDeclaration), visitParameterList(node.parameters, visitor, context, nodesVisitor), nodeVisitor(node.type, visitor, ts.isTypeNode), visitFunctionBody(node.body, visitor, context, nodeVisitor));
             case 212:
                 ts.Debug.type(node);
-                return factory.updateTypeOfExpression(node, nodeVisitor(node.expression, visitor, ts.isExpression));
+                return factory.updateArrowFunction(node, nodesVisitor(node.modifiers, visitor, ts.isModifier), nodesVisitor(node.typeParameters, visitor, ts.isTypeParameterDeclaration), visitParameterList(node.parameters, visitor, context, nodesVisitor), nodeVisitor(node.type, visitor, ts.isTypeNode), nodeVisitor(node.equalsGreaterThanToken, tokenVisitor, ts.isEqualsGreaterThanToken), visitFunctionBody(node.body, visitor, context, nodeVisitor));
             case 213:
                 ts.Debug.type(node);
-                return factory.updateVoidExpression(node, nodeVisitor(node.expression, visitor, ts.isExpression));
+                return factory.updateDeleteExpression(node, nodeVisitor(node.expression, visitor, ts.isExpression));
             case 214:
                 ts.Debug.type(node);
-                return factory.updateAwaitExpression(node, nodeVisitor(node.expression, visitor, ts.isExpression));
+                return factory.updateTypeOfExpression(node, nodeVisitor(node.expression, visitor, ts.isExpression));
             case 215:
                 ts.Debug.type(node);
-                return factory.updatePrefixUnaryExpression(node, nodeVisitor(node.operand, visitor, ts.isExpression));
+                return factory.updateVoidExpression(node, nodeVisitor(node.expression, visitor, ts.isExpression));
             case 216:
                 ts.Debug.type(node);
-                return factory.updatePostfixUnaryExpression(node, nodeVisitor(node.operand, visitor, ts.isExpression));
+                return factory.updateAwaitExpression(node, nodeVisitor(node.expression, visitor, ts.isExpression));
             case 217:
                 ts.Debug.type(node);
-                return factory.updateBinaryExpression(node, nodeVisitor(node.left, visitor, ts.isExpression), nodeVisitor(node.operatorToken, tokenVisitor, ts.isBinaryOperatorToken), nodeVisitor(node.right, visitor, ts.isExpression));
+                return factory.updatePrefixUnaryExpression(node, nodeVisitor(node.operand, visitor, ts.isExpression));
             case 218:
                 ts.Debug.type(node);
-                return factory.updateConditionalExpression(node, nodeVisitor(node.condition, visitor, ts.isExpression), nodeVisitor(node.questionToken, tokenVisitor, ts.isQuestionToken), nodeVisitor(node.whenTrue, visitor, ts.isExpression), nodeVisitor(node.colonToken, tokenVisitor, ts.isColonToken), nodeVisitor(node.whenFalse, visitor, ts.isExpression));
+                return factory.updatePostfixUnaryExpression(node, nodeVisitor(node.operand, visitor, ts.isExpression));
             case 219:
                 ts.Debug.type(node);
-                return factory.updateTemplateExpression(node, nodeVisitor(node.head, visitor, ts.isTemplateHead), nodesVisitor(node.templateSpans, visitor, ts.isTemplateSpan));
+                return factory.updateBinaryExpression(node, nodeVisitor(node.left, visitor, ts.isExpression), nodeVisitor(node.operatorToken, tokenVisitor, ts.isBinaryOperatorToken), nodeVisitor(node.right, visitor, ts.isExpression));
             case 220:
                 ts.Debug.type(node);
-                return factory.updateYieldExpression(node, nodeVisitor(node.asteriskToken, tokenVisitor, ts.isAsteriskToken), nodeVisitor(node.expression, visitor, ts.isExpression));
+                return factory.updateConditionalExpression(node, nodeVisitor(node.condition, visitor, ts.isExpression), nodeVisitor(node.questionToken, tokenVisitor, ts.isQuestionToken), nodeVisitor(node.whenTrue, visitor, ts.isExpression), nodeVisitor(node.colonToken, tokenVisitor, ts.isColonToken), nodeVisitor(node.whenFalse, visitor, ts.isExpression));
             case 221:
                 ts.Debug.type(node);
-                return factory.updateSpreadElement(node, nodeVisitor(node.expression, visitor, ts.isExpression));
+                return factory.updateTemplateExpression(node, nodeVisitor(node.head, visitor, ts.isTemplateHead), nodesVisitor(node.templateSpans, visitor, ts.isTemplateSpan));
             case 222:
                 ts.Debug.type(node);
-                return factory.updateClassExpression(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), nodeVisitor(node.name, visitor, ts.isIdentifier), nodesVisitor(node.typeParameters, visitor, ts.isTypeParameterDeclaration), nodesVisitor(node.heritageClauses, visitor, ts.isHeritageClause), nodesVisitor(node.members, visitor, ts.isClassElement));
+                return factory.updateYieldExpression(node, nodeVisitor(node.asteriskToken, tokenVisitor, ts.isAsteriskToken), nodeVisitor(node.expression, visitor, ts.isExpression));
+            case 223:
+                ts.Debug.type(node);
+                return factory.updateSpreadElement(node, nodeVisitor(node.expression, visitor, ts.isExpression));
             case 224:
                 ts.Debug.type(node);
+                return factory.updateClassExpression(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), nodeVisitor(node.name, visitor, ts.isIdentifier), nodesVisitor(node.typeParameters, visitor, ts.isTypeParameterDeclaration), nodesVisitor(node.heritageClauses, visitor, ts.isHeritageClause), nodesVisitor(node.members, visitor, ts.isClassElement));
+            case 226:
+                ts.Debug.type(node);
                 return factory.updateExpressionWithTypeArguments(node, nodeVisitor(node.expression, visitor, ts.isExpression), nodesVisitor(node.typeArguments, visitor, ts.isTypeNode));
-            case 225:
+            case 227:
                 ts.Debug.type(node);
                 return factory.updateAsExpression(node, nodeVisitor(node.expression, visitor, ts.isExpression), nodeVisitor(node.type, visitor, ts.isTypeNode));
-            case 226:
+            case 228:
                 if (node.flags & 32) {
                     ts.Debug.type(node);
                     return factory.updateNonNullChain(node, nodeVisitor(node.expression, visitor, ts.isExpression));
                 }
                 ts.Debug.type(node);
                 return factory.updateNonNullExpression(node, nodeVisitor(node.expression, visitor, ts.isExpression));
-            case 227:
-                ts.Debug.type(node);
-                return factory.updateMetaProperty(node, nodeVisitor(node.name, visitor, ts.isIdentifier));
             case 229:
                 ts.Debug.type(node);
-                return factory.updateTemplateSpan(node, nodeVisitor(node.expression, visitor, ts.isExpression), nodeVisitor(node.literal, visitor, ts.isTemplateMiddleOrTemplateTail));
+                return factory.updateMetaProperty(node, nodeVisitor(node.name, visitor, ts.isIdentifier));
             case 231:
                 ts.Debug.type(node);
-                return factory.updateBlock(node, nodesVisitor(node.statements, visitor, ts.isStatement));
+                return factory.updateTemplateSpan(node, nodeVisitor(node.expression, visitor, ts.isExpression), nodeVisitor(node.literal, visitor, ts.isTemplateMiddleOrTemplateTail));
             case 233:
                 ts.Debug.type(node);
-                return factory.updateVariableStatement(node, nodesVisitor(node.modifiers, visitor, ts.isModifier), nodeVisitor(node.declarationList, visitor, ts.isVariableDeclarationList));
-            case 234:
-                ts.Debug.type(node);
-                return factory.updateExpressionStatement(node, nodeVisitor(node.expression, visitor, ts.isExpression));
+                return factory.updateBlock(node, nodesVisitor(node.statements, visitor, ts.isStatement));
             case 235:
                 ts.Debug.type(node);
-                return factory.updateIfStatement(node, nodeVisitor(node.expression, visitor, ts.isExpression), nodeVisitor(node.thenStatement, visitor, ts.isStatement, factory.liftToBlock), nodeVisitor(node.elseStatement, visitor, ts.isStatement, factory.liftToBlock));
+                return factory.updateVariableStatement(node, nodesVisitor(node.modifiers, visitor, ts.isModifier), nodeVisitor(node.declarationList, visitor, ts.isVariableDeclarationList));
             case 236:
                 ts.Debug.type(node);
-                return factory.updateDoStatement(node, visitIterationBody(node.statement, visitor, context), nodeVisitor(node.expression, visitor, ts.isExpression));
+                return factory.updateExpressionStatement(node, nodeVisitor(node.expression, visitor, ts.isExpression));
             case 237:
                 ts.Debug.type(node);
-                return factory.updateWhileStatement(node, nodeVisitor(node.expression, visitor, ts.isExpression), visitIterationBody(node.statement, visitor, context));
+                return factory.updateIfStatement(node, nodeVisitor(node.expression, visitor, ts.isExpression), nodeVisitor(node.thenStatement, visitor, ts.isStatement, factory.liftToBlock), nodeVisitor(node.elseStatement, visitor, ts.isStatement, factory.liftToBlock));
             case 238:
                 ts.Debug.type(node);
-                return factory.updateForStatement(node, nodeVisitor(node.initializer, visitor, ts.isForInitializer), nodeVisitor(node.condition, visitor, ts.isExpression), nodeVisitor(node.incrementor, visitor, ts.isExpression), visitIterationBody(node.statement, visitor, context));
+                return factory.updateDoStatement(node, visitIterationBody(node.statement, visitor, context), nodeVisitor(node.expression, visitor, ts.isExpression));
             case 239:
                 ts.Debug.type(node);
-                return factory.updateForInStatement(node, nodeVisitor(node.initializer, visitor, ts.isForInitializer), nodeVisitor(node.expression, visitor, ts.isExpression), visitIterationBody(node.statement, visitor, context));
+                return factory.updateWhileStatement(node, nodeVisitor(node.expression, visitor, ts.isExpression), visitIterationBody(node.statement, visitor, context));
             case 240:
                 ts.Debug.type(node);
-                return factory.updateForOfStatement(node, nodeVisitor(node.awaitModifier, tokenVisitor, ts.isAwaitKeyword), nodeVisitor(node.initializer, visitor, ts.isForInitializer), nodeVisitor(node.expression, visitor, ts.isExpression), visitIterationBody(node.statement, visitor, context));
+                return factory.updateForStatement(node, nodeVisitor(node.initializer, visitor, ts.isForInitializer), nodeVisitor(node.condition, visitor, ts.isExpression), nodeVisitor(node.incrementor, visitor, ts.isExpression), visitIterationBody(node.statement, visitor, context));
             case 241:
                 ts.Debug.type(node);
-                return factory.updateContinueStatement(node, nodeVisitor(node.label, visitor, ts.isIdentifier));
+                return factory.updateForInStatement(node, nodeVisitor(node.initializer, visitor, ts.isForInitializer), nodeVisitor(node.expression, visitor, ts.isExpression), visitIterationBody(node.statement, visitor, context));
             case 242:
                 ts.Debug.type(node);
-                return factory.updateBreakStatement(node, nodeVisitor(node.label, visitor, ts.isIdentifier));
+                return factory.updateForOfStatement(node, nodeVisitor(node.awaitModifier, tokenVisitor, ts.isAwaitKeyword), nodeVisitor(node.initializer, visitor, ts.isForInitializer), nodeVisitor(node.expression, visitor, ts.isExpression), visitIterationBody(node.statement, visitor, context));
             case 243:
                 ts.Debug.type(node);
-                return factory.updateReturnStatement(node, nodeVisitor(node.expression, visitor, ts.isExpression));
+                return factory.updateContinueStatement(node, nodeVisitor(node.label, visitor, ts.isIdentifier));
             case 244:
                 ts.Debug.type(node);
-                return factory.updateWithStatement(node, nodeVisitor(node.expression, visitor, ts.isExpression), nodeVisitor(node.statement, visitor, ts.isStatement, factory.liftToBlock));
+                return factory.updateBreakStatement(node, nodeVisitor(node.label, visitor, ts.isIdentifier));
             case 245:
                 ts.Debug.type(node);
-                return factory.updateSwitchStatement(node, nodeVisitor(node.expression, visitor, ts.isExpression), nodeVisitor(node.caseBlock, visitor, ts.isCaseBlock));
+                return factory.updateReturnStatement(node, nodeVisitor(node.expression, visitor, ts.isExpression));
             case 246:
                 ts.Debug.type(node);
-                return factory.updateLabeledStatement(node, nodeVisitor(node.label, visitor, ts.isIdentifier), nodeVisitor(node.statement, visitor, ts.isStatement, factory.liftToBlock));
+                return factory.updateWithStatement(node, nodeVisitor(node.expression, visitor, ts.isExpression), nodeVisitor(node.statement, visitor, ts.isStatement, factory.liftToBlock));
             case 247:
                 ts.Debug.type(node);
-                return factory.updateThrowStatement(node, nodeVisitor(node.expression, visitor, ts.isExpression));
+                return factory.updateSwitchStatement(node, nodeVisitor(node.expression, visitor, ts.isExpression), nodeVisitor(node.caseBlock, visitor, ts.isCaseBlock));
             case 248:
                 ts.Debug.type(node);
-                return factory.updateTryStatement(node, nodeVisitor(node.tryBlock, visitor, ts.isBlock), nodeVisitor(node.catchClause, visitor, ts.isCatchClause), nodeVisitor(node.finallyBlock, visitor, ts.isBlock));
+                return factory.updateLabeledStatement(node, nodeVisitor(node.label, visitor, ts.isIdentifier), nodeVisitor(node.statement, visitor, ts.isStatement, factory.liftToBlock));
+            case 249:
+                ts.Debug.type(node);
+                return factory.updateThrowStatement(node, nodeVisitor(node.expression, visitor, ts.isExpression));
             case 250:
                 ts.Debug.type(node);
-                return factory.updateVariableDeclaration(node, nodeVisitor(node.name, visitor, ts.isBindingName), nodeVisitor(node.exclamationToken, tokenVisitor, ts.isExclamationToken), nodeVisitor(node.type, visitor, ts.isTypeNode), nodeVisitor(node.initializer, visitor, ts.isExpression));
-            case 251:
-                ts.Debug.type(node);
-                return factory.updateVariableDeclarationList(node, nodesVisitor(node.declarations, visitor, ts.isVariableDeclaration));
+                return factory.updateTryStatement(node, nodeVisitor(node.tryBlock, visitor, ts.isBlock), nodeVisitor(node.catchClause, visitor, ts.isCatchClause), nodeVisitor(node.finallyBlock, visitor, ts.isBlock));
             case 252:
                 ts.Debug.type(node);
-                return factory.updateFunctionDeclaration(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), nodeVisitor(node.asteriskToken, tokenVisitor, ts.isAsteriskToken), nodeVisitor(node.name, visitor, ts.isIdentifier), nodesVisitor(node.typeParameters, visitor, ts.isTypeParameterDeclaration), visitParameterList(node.parameters, visitor, context, nodesVisitor), nodeVisitor(node.type, visitor, ts.isTypeNode), visitFunctionBody(node.body, visitor, context, nodeVisitor));
+                return factory.updateVariableDeclaration(node, nodeVisitor(node.name, visitor, ts.isBindingName), nodeVisitor(node.exclamationToken, tokenVisitor, ts.isExclamationToken), nodeVisitor(node.type, visitor, ts.isTypeNode), nodeVisitor(node.initializer, visitor, ts.isExpression));
             case 253:
                 ts.Debug.type(node);
-                return factory.updateClassDeclaration(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), nodeVisitor(node.name, visitor, ts.isIdentifier), nodesVisitor(node.typeParameters, visitor, ts.isTypeParameterDeclaration), nodesVisitor(node.heritageClauses, visitor, ts.isHeritageClause), nodesVisitor(node.members, visitor, ts.isClassElement));
+                return factory.updateVariableDeclarationList(node, nodesVisitor(node.declarations, visitor, ts.isVariableDeclaration));
             case 254:
                 ts.Debug.type(node);
-                return factory.updateInterfaceDeclaration(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), nodeVisitor(node.name, visitor, ts.isIdentifier), nodesVisitor(node.typeParameters, visitor, ts.isTypeParameterDeclaration), nodesVisitor(node.heritageClauses, visitor, ts.isHeritageClause), nodesVisitor(node.members, visitor, ts.isTypeElement));
+                return factory.updateFunctionDeclaration(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), nodeVisitor(node.asteriskToken, tokenVisitor, ts.isAsteriskToken), nodeVisitor(node.name, visitor, ts.isIdentifier), nodesVisitor(node.typeParameters, visitor, ts.isTypeParameterDeclaration), visitParameterList(node.parameters, visitor, context, nodesVisitor), nodeVisitor(node.type, visitor, ts.isTypeNode), visitFunctionBody(node.body, visitor, context, nodeVisitor));
             case 255:
                 ts.Debug.type(node);
-                return factory.updateTypeAliasDeclaration(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), nodeVisitor(node.name, visitor, ts.isIdentifier), nodesVisitor(node.typeParameters, visitor, ts.isTypeParameterDeclaration), nodeVisitor(node.type, visitor, ts.isTypeNode));
+                return factory.updateClassDeclaration(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), nodeVisitor(node.name, visitor, ts.isIdentifier), nodesVisitor(node.typeParameters, visitor, ts.isTypeParameterDeclaration), nodesVisitor(node.heritageClauses, visitor, ts.isHeritageClause), nodesVisitor(node.members, visitor, ts.isClassElement));
             case 256:
                 ts.Debug.type(node);
-                return factory.updateEnumDeclaration(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), nodeVisitor(node.name, visitor, ts.isIdentifier), nodesVisitor(node.members, visitor, ts.isEnumMember));
+                return factory.updateInterfaceDeclaration(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), nodeVisitor(node.name, visitor, ts.isIdentifier), nodesVisitor(node.typeParameters, visitor, ts.isTypeParameterDeclaration), nodesVisitor(node.heritageClauses, visitor, ts.isHeritageClause), nodesVisitor(node.members, visitor, ts.isTypeElement));
             case 257:
                 ts.Debug.type(node);
-                return factory.updateModuleDeclaration(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), nodeVisitor(node.name, visitor, ts.isModuleName), nodeVisitor(node.body, visitor, ts.isModuleBody));
+                return factory.updateTypeAliasDeclaration(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), nodeVisitor(node.name, visitor, ts.isIdentifier), nodesVisitor(node.typeParameters, visitor, ts.isTypeParameterDeclaration), nodeVisitor(node.type, visitor, ts.isTypeNode));
             case 258:
                 ts.Debug.type(node);
-                return factory.updateModuleBlock(node, nodesVisitor(node.statements, visitor, ts.isStatement));
+                return factory.updateEnumDeclaration(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), nodeVisitor(node.name, visitor, ts.isIdentifier), nodesVisitor(node.members, visitor, ts.isEnumMember));
             case 259:
                 ts.Debug.type(node);
-                return factory.updateCaseBlock(node, nodesVisitor(node.clauses, visitor, ts.isCaseOrDefaultClause));
+                return factory.updateModuleDeclaration(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), nodeVisitor(node.name, visitor, ts.isModuleName), nodeVisitor(node.body, visitor, ts.isModuleBody));
             case 260:
                 ts.Debug.type(node);
-                return factory.updateNamespaceExportDeclaration(node, nodeVisitor(node.name, visitor, ts.isIdentifier));
+                return factory.updateModuleBlock(node, nodesVisitor(node.statements, visitor, ts.isStatement));
             case 261:
                 ts.Debug.type(node);
-                return factory.updateImportEqualsDeclaration(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), node.isTypeOnly, nodeVisitor(node.name, visitor, ts.isIdentifier), nodeVisitor(node.moduleReference, visitor, ts.isModuleReference));
+                return factory.updateCaseBlock(node, nodesVisitor(node.clauses, visitor, ts.isCaseOrDefaultClause));
             case 262:
                 ts.Debug.type(node);
-                return factory.updateImportDeclaration(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), nodeVisitor(node.importClause, visitor, ts.isImportClause), nodeVisitor(node.moduleSpecifier, visitor, ts.isExpression));
+                return factory.updateNamespaceExportDeclaration(node, nodeVisitor(node.name, visitor, ts.isIdentifier));
             case 263:
                 ts.Debug.type(node);
-                return factory.updateImportClause(node, node.isTypeOnly, nodeVisitor(node.name, visitor, ts.isIdentifier), nodeVisitor(node.namedBindings, visitor, ts.isNamedImportBindings));
+                return factory.updateImportEqualsDeclaration(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), node.isTypeOnly, nodeVisitor(node.name, visitor, ts.isIdentifier), nodeVisitor(node.moduleReference, visitor, ts.isModuleReference));
             case 264:
                 ts.Debug.type(node);
-                return factory.updateNamespaceImport(node, nodeVisitor(node.name, visitor, ts.isIdentifier));
-            case 270:
-                ts.Debug.type(node);
-                return factory.updateNamespaceExport(node, nodeVisitor(node.name, visitor, ts.isIdentifier));
+                return factory.updateImportDeclaration(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), nodeVisitor(node.importClause, visitor, ts.isImportClause), nodeVisitor(node.moduleSpecifier, visitor, ts.isExpression));
             case 265:
                 ts.Debug.type(node);
-                return factory.updateNamedImports(node, nodesVisitor(node.elements, visitor, ts.isImportSpecifier));
+                return factory.updateImportClause(node, node.isTypeOnly, nodeVisitor(node.name, visitor, ts.isIdentifier), nodeVisitor(node.namedBindings, visitor, ts.isNamedImportBindings));
             case 266:
                 ts.Debug.type(node);
-                return factory.updateImportSpecifier(node, nodeVisitor(node.propertyName, visitor, ts.isIdentifier), nodeVisitor(node.name, visitor, ts.isIdentifier));
+                return factory.updateNamespaceImport(node, nodeVisitor(node.name, visitor, ts.isIdentifier));
+            case 272:
+                ts.Debug.type(node);
+                return factory.updateNamespaceExport(node, nodeVisitor(node.name, visitor, ts.isIdentifier));
             case 267:
                 ts.Debug.type(node);
-                return factory.updateExportAssignment(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), nodeVisitor(node.expression, visitor, ts.isExpression));
+                return factory.updateNamedImports(node, nodesVisitor(node.elements, visitor, ts.isImportSpecifier));
             case 268:
                 ts.Debug.type(node);
-                return factory.updateExportDeclaration(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), node.isTypeOnly, nodeVisitor(node.exportClause, visitor, ts.isNamedExportBindings), nodeVisitor(node.moduleSpecifier, visitor, ts.isExpression));
+                return factory.updateImportSpecifier(node, nodeVisitor(node.propertyName, visitor, ts.isIdentifier), nodeVisitor(node.name, visitor, ts.isIdentifier));
             case 269:
                 ts.Debug.type(node);
-                return factory.updateNamedExports(node, nodesVisitor(node.elements, visitor, ts.isExportSpecifier));
+                return factory.updateExportAssignment(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), nodeVisitor(node.expression, visitor, ts.isExpression));
+            case 270:
+                ts.Debug.type(node);
+                return factory.updateExportDeclaration(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), node.isTypeOnly, nodeVisitor(node.exportClause, visitor, ts.isNamedExportBindings), nodeVisitor(node.moduleSpecifier, visitor, ts.isExpression));
             case 271:
                 ts.Debug.type(node);
-                return factory.updateExportSpecifier(node, nodeVisitor(node.propertyName, visitor, ts.isIdentifier), nodeVisitor(node.name, visitor, ts.isIdentifier));
+                return factory.updateNamedExports(node, nodesVisitor(node.elements, visitor, ts.isExportSpecifier));
             case 273:
                 ts.Debug.type(node);
-                return factory.updateExternalModuleReference(node, nodeVisitor(node.expression, visitor, ts.isExpression));
-            case 274:
-                ts.Debug.type(node);
-                return factory.updateJsxElement(node, nodeVisitor(node.openingElement, visitor, ts.isJsxOpeningElement), nodesVisitor(node.children, visitor, ts.isJsxChild), nodeVisitor(node.closingElement, visitor, ts.isJsxClosingElement));
+                return factory.updateExportSpecifier(node, nodeVisitor(node.propertyName, visitor, ts.isIdentifier), nodeVisitor(node.name, visitor, ts.isIdentifier));
             case 275:
                 ts.Debug.type(node);
-                return factory.updateJsxSelfClosingElement(node, nodeVisitor(node.tagName, visitor, ts.isJsxTagNameExpression), nodesVisitor(node.typeArguments, visitor, ts.isTypeNode), nodeVisitor(node.attributes, visitor, ts.isJsxAttributes));
+                return factory.updateExternalModuleReference(node, nodeVisitor(node.expression, visitor, ts.isExpression));
             case 276:
                 ts.Debug.type(node);
-                return factory.updateJsxOpeningElement(node, nodeVisitor(node.tagName, visitor, ts.isJsxTagNameExpression), nodesVisitor(node.typeArguments, visitor, ts.isTypeNode), nodeVisitor(node.attributes, visitor, ts.isJsxAttributes));
+                return factory.updateJsxElement(node, nodeVisitor(node.openingElement, visitor, ts.isJsxOpeningElement), nodesVisitor(node.children, visitor, ts.isJsxChild), nodeVisitor(node.closingElement, visitor, ts.isJsxClosingElement));
             case 277:
                 ts.Debug.type(node);
-                return factory.updateJsxClosingElement(node, nodeVisitor(node.tagName, visitor, ts.isJsxTagNameExpression));
+                return factory.updateJsxSelfClosingElement(node, nodeVisitor(node.tagName, visitor, ts.isJsxTagNameExpression), nodesVisitor(node.typeArguments, visitor, ts.isTypeNode), nodeVisitor(node.attributes, visitor, ts.isJsxAttributes));
             case 278:
                 ts.Debug.type(node);
+                return factory.updateJsxOpeningElement(node, nodeVisitor(node.tagName, visitor, ts.isJsxTagNameExpression), nodesVisitor(node.typeArguments, visitor, ts.isTypeNode), nodeVisitor(node.attributes, visitor, ts.isJsxAttributes));
+            case 279:
+                ts.Debug.type(node);
+                return factory.updateJsxClosingElement(node, nodeVisitor(node.tagName, visitor, ts.isJsxTagNameExpression));
+            case 280:
+                ts.Debug.type(node);
                 return factory.updateJsxFragment(node, nodeVisitor(node.openingFragment, visitor, ts.isJsxOpeningFragment), nodesVisitor(node.children, visitor, ts.isJsxChild), nodeVisitor(node.closingFragment, visitor, ts.isJsxClosingFragment));
-            case 281:
-                ts.Debug.type(node);
-                return factory.updateJsxAttribute(node, nodeVisitor(node.name, visitor, ts.isIdentifier), nodeVisitor(node.initializer, visitor, ts.isStringLiteralOrJsxExpression));
-            case 282:
-                ts.Debug.type(node);
-                return factory.updateJsxAttributes(node, nodesVisitor(node.properties, visitor, ts.isJsxAttributeLike));
             case 283:
                 ts.Debug.type(node);
-                return factory.updateJsxSpreadAttribute(node, nodeVisitor(node.expression, visitor, ts.isExpression));
+                return factory.updateJsxAttribute(node, nodeVisitor(node.name, visitor, ts.isIdentifier), nodeVisitor(node.initializer, visitor, ts.isStringLiteralOrJsxExpression));
             case 284:
                 ts.Debug.type(node);
-                return factory.updateJsxExpression(node, nodeVisitor(node.expression, visitor, ts.isExpression));
+                return factory.updateJsxAttributes(node, nodesVisitor(node.properties, visitor, ts.isJsxAttributeLike));
             case 285:
                 ts.Debug.type(node);
-                return factory.updateCaseClause(node, nodeVisitor(node.expression, visitor, ts.isExpression), nodesVisitor(node.statements, visitor, ts.isStatement));
+                return factory.updateJsxSpreadAttribute(node, nodeVisitor(node.expression, visitor, ts.isExpression));
             case 286:
                 ts.Debug.type(node);
-                return factory.updateDefaultClause(node, nodesVisitor(node.statements, visitor, ts.isStatement));
+                return factory.updateJsxExpression(node, nodeVisitor(node.expression, visitor, ts.isExpression));
             case 287:
                 ts.Debug.type(node);
-                return factory.updateHeritageClause(node, nodesVisitor(node.types, visitor, ts.isExpressionWithTypeArguments));
+                return factory.updateCaseClause(node, nodeVisitor(node.expression, visitor, ts.isExpression), nodesVisitor(node.statements, visitor, ts.isStatement));
             case 288:
                 ts.Debug.type(node);
-                return factory.updateCatchClause(node, nodeVisitor(node.variableDeclaration, visitor, ts.isVariableDeclaration), nodeVisitor(node.block, visitor, ts.isBlock));
+                return factory.updateDefaultClause(node, nodesVisitor(node.statements, visitor, ts.isStatement));
             case 289:
                 ts.Debug.type(node);
-                return factory.updatePropertyAssignment(node, nodeVisitor(node.name, visitor, ts.isPropertyName), nodeVisitor(node.initializer, visitor, ts.isExpression));
+                return factory.updateHeritageClause(node, nodesVisitor(node.types, visitor, ts.isExpressionWithTypeArguments));
             case 290:
                 ts.Debug.type(node);
-                return factory.updateShorthandPropertyAssignment(node, nodeVisitor(node.name, visitor, ts.isIdentifier), nodeVisitor(node.objectAssignmentInitializer, visitor, ts.isExpression));
+                return factory.updateCatchClause(node, nodeVisitor(node.variableDeclaration, visitor, ts.isVariableDeclaration), nodeVisitor(node.block, visitor, ts.isBlock));
             case 291:
                 ts.Debug.type(node);
-                return factory.updateSpreadAssignment(node, nodeVisitor(node.expression, visitor, ts.isExpression));
+                return factory.updatePropertyAssignment(node, nodeVisitor(node.name, visitor, ts.isPropertyName), nodeVisitor(node.initializer, visitor, ts.isExpression));
             case 292:
                 ts.Debug.type(node);
+                return factory.updateShorthandPropertyAssignment(node, nodeVisitor(node.name, visitor, ts.isIdentifier), nodeVisitor(node.objectAssignmentInitializer, visitor, ts.isExpression));
+            case 293:
+                ts.Debug.type(node);
+                return factory.updateSpreadAssignment(node, nodeVisitor(node.expression, visitor, ts.isExpression));
+            case 294:
+                ts.Debug.type(node);
                 return factory.updateEnumMember(node, nodeVisitor(node.name, visitor, ts.isPropertyName), nodeVisitor(node.initializer, visitor, ts.isExpression));
-            case 298:
+            case 300:
                 ts.Debug.type(node);
                 return factory.updateSourceFile(node, visitLexicalEnvironment(node.statements, visitor, context));
-            case 340:
+            case 345:
                 ts.Debug.type(node);
                 return factory.updatePartiallyEmittedExpression(node, nodeVisitor(node.expression, visitor, ts.isExpression));
-            case 341:
+            case 346:
                 ts.Debug.type(node);
                 return factory.updateCommaListExpression(node, nodesVisitor(node.elements, visitor, ts.isExpression));
             default:
@@ -70696,6 +72077,7 @@
         var sourcesContent;
         var names = [];
         var nameToNameIndexMap;
+        var mappingCharCodes = [];
         var mappings = "";
         var lastGeneratedLine = 0;
         var lastGeneratedCharacter = 0;
@@ -70862,6 +72244,12 @@
                 || lastSourceCharacter !== pendingSourceCharacter
                 || lastNameIndex !== pendingNameIndex;
         }
+        function appendMappingCharCode(charCode) {
+            mappingCharCodes.push(charCode);
+            if (mappingCharCodes.length >= 1024) {
+                flushMappingBuffer();
+            }
+        }
         function commitPendingMapping() {
             if (!hasPending || !shouldCommitMapping()) {
                 return;
@@ -70869,36 +72257,43 @@
             enter();
             if (lastGeneratedLine < pendingGeneratedLine) {
                 do {
-                    mappings += ";";
+                    appendMappingCharCode(59);
                     lastGeneratedLine++;
-                    lastGeneratedCharacter = 0;
                 } while (lastGeneratedLine < pendingGeneratedLine);
+                lastGeneratedCharacter = 0;
             }
             else {
                 ts.Debug.assertEqual(lastGeneratedLine, pendingGeneratedLine, "generatedLine cannot backtrack");
                 if (hasLast) {
-                    mappings += ",";
+                    appendMappingCharCode(44);
                 }
             }
-            mappings += base64VLQFormatEncode(pendingGeneratedCharacter - lastGeneratedCharacter);
+            appendBase64VLQ(pendingGeneratedCharacter - lastGeneratedCharacter);
             lastGeneratedCharacter = pendingGeneratedCharacter;
             if (hasPendingSource) {
-                mappings += base64VLQFormatEncode(pendingSourceIndex - lastSourceIndex);
+                appendBase64VLQ(pendingSourceIndex - lastSourceIndex);
                 lastSourceIndex = pendingSourceIndex;
-                mappings += base64VLQFormatEncode(pendingSourceLine - lastSourceLine);
+                appendBase64VLQ(pendingSourceLine - lastSourceLine);
                 lastSourceLine = pendingSourceLine;
-                mappings += base64VLQFormatEncode(pendingSourceCharacter - lastSourceCharacter);
+                appendBase64VLQ(pendingSourceCharacter - lastSourceCharacter);
                 lastSourceCharacter = pendingSourceCharacter;
                 if (hasPendingName) {
-                    mappings += base64VLQFormatEncode(pendingNameIndex - lastNameIndex);
+                    appendBase64VLQ(pendingNameIndex - lastNameIndex);
                     lastNameIndex = pendingNameIndex;
                 }
             }
             hasLast = true;
             exit();
         }
+        function flushMappingBuffer() {
+            if (mappingCharCodes.length > 0) {
+                mappings += String.fromCharCode.apply(undefined, mappingCharCodes);
+                mappingCharCodes.length = 0;
+            }
+        }
         function toJSON() {
             commitPendingMapping();
+            flushMappingBuffer();
             return {
                 version: 3,
                 file: file,
@@ -70909,9 +72304,25 @@
                 sourcesContent: sourcesContent,
             };
         }
+        function appendBase64VLQ(inValue) {
+            if (inValue < 0) {
+                inValue = ((-inValue) << 1) + 1;
+            }
+            else {
+                inValue = inValue << 1;
+            }
+            do {
+                var currentDigit = inValue & 31;
+                inValue = inValue >> 5;
+                if (inValue > 0) {
+                    currentDigit = currentDigit | 32;
+                }
+                appendMappingCharCode(base64FormatEncode(currentDigit));
+            } while (inValue > 0);
+        }
     }
     ts.createSourceMapGenerator = createSourceMapGenerator;
-    var sourceMapCommentRegExp = /^\/\/[@#] source[M]appingURL=(.+)\s*$/;
+    var sourceMapCommentRegExp = /^\/\/[@#] source[M]appingURL=(.+)$/;
     var whitespaceOrMapCommentRegExp = /^\s*(\/\/[@#] .*)?$/;
     function getLineInfo(text, lineStarts) {
         return {
@@ -70925,7 +72336,7 @@
             var line = lineInfo.getLineText(index);
             var comment = sourceMapCommentRegExp.exec(line);
             if (comment) {
-                return comment[1];
+                return ts.trimStringEnd(comment[1]);
             }
             else if (!line.match(whitespaceOrMapCommentRegExp)) {
                 break;
@@ -71119,24 +72530,6 @@
                         ch === 47 ? 63 :
                             -1;
     }
-    function base64VLQFormatEncode(inValue) {
-        if (inValue < 0) {
-            inValue = ((-inValue) << 1) + 1;
-        }
-        else {
-            inValue = inValue << 1;
-        }
-        var encodedStr = "";
-        do {
-            var currentDigit = inValue & 31;
-            inValue = inValue >> 5;
-            if (inValue > 0) {
-                currentDigit = currentDigit | 32;
-            }
-            encodedStr = encodedStr + String.fromCharCode(base64FormatEncode(currentDigit));
-        } while (inValue > 0);
-        return encodedStr;
-    }
     function isSourceMappedPosition(value) {
         return value.sourceIndex !== undefined
             && value.sourcePosition !== undefined;
@@ -71295,7 +72688,7 @@
     function chainBundle(context, transformSourceFile) {
         return transformSourceFileOrBundle;
         function transformSourceFileOrBundle(node) {
-            return node.kind === 298 ? transformSourceFile(node) : transformBundle(node);
+            return node.kind === 300 ? transformSourceFile(node) : transformBundle(node);
         }
         function transformBundle(node) {
             return context.factory.createBundle(ts.map(node.sourceFiles, transformSourceFile), node.prepends);
@@ -71344,7 +72737,7 @@
         for (var _i = 0, _a = sourceFile.statements; _i < _a.length; _i++) {
             var node = _a[_i];
             switch (node.kind) {
-                case 262:
+                case 264:
                     externalImports.push(node);
                     if (!hasImportStar && getImportNeedsImportStarHelper(node)) {
                         hasImportStar = true;
@@ -71353,12 +72746,12 @@
                         hasImportDefault = true;
                     }
                     break;
-                case 261:
-                    if (node.moduleReference.kind === 273) {
+                case 263:
+                    if (node.moduleReference.kind === 275) {
                         externalImports.push(node);
                     }
                     break;
-                case 268:
+                case 270:
                     if (node.moduleSpecifier) {
                         if (!node.exportClause) {
                             externalImports.push(node);
@@ -71384,12 +72777,12 @@
                         addExportedNamesForExportDeclaration(node);
                     }
                     break;
-                case 267:
+                case 269:
                     if (node.isExportEquals && !exportEquals) {
                         exportEquals = node;
                     }
                     break;
-                case 233:
+                case 235:
                     if (ts.hasSyntacticModifier(node, 1)) {
                         for (var _b = 0, _c = node.declarationList.declarations; _b < _c.length; _b++) {
                             var decl = _c[_b];
@@ -71397,7 +72790,7 @@
                         }
                     }
                     break;
-                case 252:
+                case 254:
                     if (ts.hasSyntacticModifier(node, 1)) {
                         if (ts.hasSyntacticModifier(node, 512)) {
                             if (!hasExportDefault) {
@@ -71415,7 +72808,7 @@
                         }
                     }
                     break;
-                case 253:
+                case 255:
                     if (ts.hasSyntacticModifier(node, 1)) {
                         if (ts.hasSyntacticModifier(node, 512)) {
                             if (!hasExportDefault) {
@@ -71500,27 +72893,27 @@
     }
     ts.isSimpleInlineableExpression = isSimpleInlineableExpression;
     function isCompoundAssignment(kind) {
-        return kind >= 63
-            && kind <= 77;
+        return kind >= 64
+            && kind <= 78;
     }
     ts.isCompoundAssignment = isCompoundAssignment;
     function getNonAssignmentOperatorForCompoundAssignment(kind) {
         switch (kind) {
-            case 63: return 39;
-            case 64: return 40;
-            case 65: return 41;
-            case 66: return 42;
-            case 67: return 43;
-            case 68: return 44;
-            case 69: return 47;
-            case 70: return 48;
-            case 71: return 49;
-            case 72: return 50;
-            case 73: return 51;
-            case 77: return 52;
-            case 74: return 56;
-            case 75: return 55;
-            case 76: return 60;
+            case 64: return 39;
+            case 65: return 40;
+            case 66: return 41;
+            case 67: return 42;
+            case 68: return 43;
+            case 69: return 44;
+            case 70: return 47;
+            case 71: return 48;
+            case 72: return 49;
+            case 73: return 50;
+            case 74: return 51;
+            case 78: return 52;
+            case 75: return 56;
+            case 76: return 55;
+            case 77: return 60;
         }
     }
     ts.getNonAssignmentOperatorForCompoundAssignment = getNonAssignmentOperatorForCompoundAssignment;
@@ -71547,18 +72940,28 @@
         return ts.filter(node.members, function (m) { return isInitializedOrStaticProperty(m, requireInitializer, isStatic); });
     }
     ts.getProperties = getProperties;
+    function isStaticPropertyDeclarationOrClassStaticBlockDeclaration(element) {
+        return isStaticPropertyDeclaration(element) || ts.isClassStaticBlockDeclaration(element);
+    }
+    function getStaticPropertiesAndClassStaticBlock(node) {
+        return ts.filter(node.members, isStaticPropertyDeclarationOrClassStaticBlockDeclaration);
+    }
+    ts.getStaticPropertiesAndClassStaticBlock = getStaticPropertiesAndClassStaticBlock;
     function isInitializedOrStaticProperty(member, requireInitializer, isStatic) {
         return ts.isPropertyDeclaration(member)
             && (!!member.initializer || !requireInitializer)
             && ts.hasStaticModifier(member) === isStatic;
     }
+    function isStaticPropertyDeclaration(member) {
+        return ts.isPropertyDeclaration(member) && ts.hasStaticModifier(member);
+    }
     function isInitializedProperty(member) {
-        return member.kind === 164
+        return member.kind === 165
             && member.initializer !== undefined;
     }
     ts.isInitializedProperty = isInitializedProperty;
     function isNonStaticMethodOrAccessorWithPrivateName(member) {
-        return !ts.hasStaticModifier(member) && ts.isMethodOrAccessor(member) && ts.isPrivateIdentifier(member.name);
+        return !ts.isStatic(member) && ts.isMethodOrAccessor(member) && ts.isPrivateIdentifier(member.name);
     }
     ts.isNonStaticMethodOrAccessorWithPrivateName = isNonStaticMethodOrAccessorWithPrivateName;
 })(ts || (ts = {}));
@@ -71962,6 +73365,7 @@
     function getRawLiteral(node, currentSourceFile) {
         var text = node.rawText;
         if (text === undefined) {
+            ts.Debug.assertIsDefined(currentSourceFile, "Template literal node is missing 'rawText' and does not have a source file. Possibly bad transform.");
             text = ts.getSourceTextOfNodeFromSourceFile(currentSourceFile, node);
             var isLast = node.kind === 14 || node.kind === 17;
             text = text.substring(1, text.length - (isLast ? 1 : 2));
@@ -71984,8 +73388,8 @@
         var previousOnSubstituteNode = context.onSubstituteNode;
         context.onEmitNode = onEmitNode;
         context.onSubstituteNode = onSubstituteNode;
-        context.enableSubstitution(202);
-        context.enableSubstitution(203);
+        context.enableSubstitution(204);
+        context.enableSubstitution(205);
         var currentSourceFile;
         var currentNamespace;
         var currentNamespaceContainerName;
@@ -71998,14 +73402,14 @@
         var applicableSubstitutions;
         return transformSourceFileOrBundle;
         function transformSourceFileOrBundle(node) {
-            if (node.kind === 299) {
+            if (node.kind === 301) {
                 return transformBundle(node);
             }
             return transformSourceFile(node);
         }
         function transformBundle(node) {
             return factory.createBundle(node.sourceFiles.map(transformSourceFile), ts.mapDefined(node.prepends, function (prepend) {
-                if (prepend.kind === 301) {
+                if (prepend.kind === 303) {
                     return ts.createUnparsedSourceFile(prepend, "js");
                 }
                 return prepend;
@@ -72038,16 +73442,16 @@
         }
         function onBeforeVisitNode(node) {
             switch (node.kind) {
-                case 298:
-                case 259:
-                case 258:
-                case 231:
+                case 300:
+                case 261:
+                case 260:
+                case 233:
                     currentLexicalScope = node;
                     currentNameScope = undefined;
                     currentScopeFirstDeclarationsOfName = undefined;
                     break;
-                case 253:
-                case 252:
+                case 255:
+                case 254:
                     if (ts.hasSyntacticModifier(node, 2)) {
                         break;
                     }
@@ -72055,7 +73459,7 @@
                         recordEmittedDeclarationInScope(node);
                     }
                     else {
-                        ts.Debug.assert(node.kind === 253 || ts.hasSyntacticModifier(node, 512));
+                        ts.Debug.assert(node.kind === 255 || ts.hasSyntacticModifier(node, 512));
                     }
                     if (ts.isClassDeclaration(node)) {
                         currentNameScope = node;
@@ -72077,10 +73481,10 @@
         }
         function sourceElementVisitorWorker(node) {
             switch (node.kind) {
-                case 262:
-                case 261:
-                case 267:
-                case 268:
+                case 264:
+                case 263:
+                case 269:
+                case 270:
                     return visitElidableStatement(node);
                 default:
                     return visitorWorker(node);
@@ -72095,13 +73499,13 @@
                 return node;
             }
             switch (node.kind) {
-                case 262:
+                case 264:
                     return visitImportDeclaration(node);
-                case 261:
+                case 263:
                     return visitImportEqualsDeclaration(node);
-                case 267:
+                case 269:
                     return visitExportAssignment(node);
-                case 268:
+                case 270:
                     return visitExportDeclaration(node);
                 default:
                     ts.Debug.fail("Unhandled ellided statement");
@@ -72111,11 +73515,11 @@
             return saveStateAndInvoke(node, namespaceElementVisitorWorker);
         }
         function namespaceElementVisitorWorker(node) {
-            if (node.kind === 268 ||
-                node.kind === 262 ||
-                node.kind === 263 ||
-                (node.kind === 261 &&
-                    node.moduleReference.kind === 273)) {
+            if (node.kind === 270 ||
+                node.kind === 264 ||
+                node.kind === 265 ||
+                (node.kind === 263 &&
+                    node.moduleReference.kind === 275)) {
                 return undefined;
             }
             else if (node.transformFlags & 1 || ts.hasSyntacticModifier(node, 1)) {
@@ -72128,16 +73532,17 @@
         }
         function classElementVisitorWorker(node) {
             switch (node.kind) {
-                case 167:
-                    return visitConstructor(node);
-                case 164:
-                    return visitPropertyDeclaration(node);
-                case 172:
-                case 168:
                 case 169:
-                case 166:
+                    return visitConstructor(node);
+                case 165:
+                    return visitPropertyDeclaration(node);
+                case 174:
+                case 170:
+                case 171:
+                case 167:
+                case 168:
                     return visitorWorker(node);
-                case 230:
+                case 232:
                     return node;
                 default:
                     return ts.Debug.failBadSyntaxKind(node);
@@ -72147,7 +73552,7 @@
             if (ts.modifierToFlag(node.kind) & 18654) {
                 return undefined;
             }
-            else if (currentNamespace && node.kind === 92) {
+            else if (currentNamespace && node.kind === 93) {
                 return undefined;
             }
             return node;
@@ -72157,105 +73562,106 @@
                 return factory.createNotEmittedStatement(node);
             }
             switch (node.kind) {
-                case 92:
-                case 87:
+                case 93:
+                case 88:
                     return currentNamespace ? undefined : node;
-                case 122:
-                case 120:
+                case 123:
                 case 121:
-                case 125:
-                case 156:
-                case 84:
-                case 133:
-                case 142:
-                case 179:
-                case 180:
+                case 122:
+                case 126:
+                case 157:
+                case 85:
+                case 134:
+                case 143:
                 case 181:
                 case 182:
-                case 178:
-                case 173:
-                case 160:
-                case 128:
-                case 152:
-                case 131:
-                case 147:
-                case 144:
-                case 141:
-                case 113:
-                case 148:
-                case 176:
-                case 175:
-                case 177:
-                case 174:
                 case 183:
                 case 184:
+                case 180:
+                case 175:
+                case 161:
+                case 129:
+                case 153:
+                case 132:
+                case 148:
+                case 145:
+                case 142:
+                case 114:
+                case 149:
+                case 178:
+                case 177:
+                case 179:
+                case 176:
                 case 185:
+                case 186:
                 case 187:
-                case 188:
                 case 189:
                 case 190:
                 case 191:
                 case 192:
-                case 172:
-                case 162:
-                case 255:
+                case 193:
+                case 194:
+                case 174:
+                case 163:
                     return undefined;
-                case 164:
-                    return visitPropertyDeclaration(node);
-                case 260:
-                    return undefined;
-                case 167:
-                    return visitConstructor(node);
-                case 254:
-                    return factory.createNotEmittedStatement(node);
-                case 253:
-                    return visitClassDeclaration(node);
-                case 222:
-                    return visitClassExpression(node);
-                case 287:
-                    return visitHeritageClause(node);
-                case 224:
-                    return visitExpressionWithTypeArguments(node);
-                case 166:
-                    return visitMethodDeclaration(node);
-                case 168:
-                    return visitGetAccessor(node);
-                case 169:
-                    return visitSetAccessor(node);
-                case 252:
-                    return visitFunctionDeclaration(node);
-                case 209:
-                    return visitFunctionExpression(node);
-                case 210:
-                    return visitArrowFunction(node);
-                case 161:
-                    return visitParameter(node);
-                case 208:
-                    return visitParenthesizedExpression(node);
-                case 207:
-                case 225:
-                    return visitAssertionExpression(node);
-                case 204:
-                    return visitCallExpression(node);
-                case 205:
-                    return visitNewExpression(node);
-                case 206:
-                    return visitTaggedTemplateExpression(node);
-                case 226:
-                    return visitNonNullExpression(node);
-                case 256:
-                    return visitEnumDeclaration(node);
-                case 233:
-                    return visitVariableStatement(node);
-                case 250:
-                    return visitVariableDeclaration(node);
                 case 257:
+                    return factory.createNotEmittedStatement(node);
+                case 165:
+                    return visitPropertyDeclaration(node);
+                case 262:
+                    return undefined;
+                case 169:
+                    return visitConstructor(node);
+                case 256:
+                    return factory.createNotEmittedStatement(node);
+                case 255:
+                    return visitClassDeclaration(node);
+                case 224:
+                    return visitClassExpression(node);
+                case 289:
+                    return visitHeritageClause(node);
+                case 226:
+                    return visitExpressionWithTypeArguments(node);
+                case 167:
+                    return visitMethodDeclaration(node);
+                case 170:
+                    return visitGetAccessor(node);
+                case 171:
+                    return visitSetAccessor(node);
+                case 254:
+                    return visitFunctionDeclaration(node);
+                case 211:
+                    return visitFunctionExpression(node);
+                case 212:
+                    return visitArrowFunction(node);
+                case 162:
+                    return visitParameter(node);
+                case 210:
+                    return visitParenthesizedExpression(node);
+                case 209:
+                case 227:
+                    return visitAssertionExpression(node);
+                case 206:
+                    return visitCallExpression(node);
+                case 207:
+                    return visitNewExpression(node);
+                case 208:
+                    return visitTaggedTemplateExpression(node);
+                case 228:
+                    return visitNonNullExpression(node);
+                case 258:
+                    return visitEnumDeclaration(node);
+                case 235:
+                    return visitVariableStatement(node);
+                case 252:
+                    return visitVariableDeclaration(node);
+                case 259:
                     return visitModuleDeclaration(node);
-                case 261:
+                case 263:
                     return visitImportEqualsDeclaration(node);
-                case 275:
+                case 277:
                     return visitJsxSelfClosingElement(node);
-                case 276:
+                case 278:
                     return visitJsxJsxOpeningElement(node);
                 default:
                     return ts.visitEachChild(node, visitor, context);
@@ -72267,27 +73673,14 @@
                 !ts.isJsonSourceFile(node);
             return factory.updateSourceFile(node, ts.visitLexicalEnvironment(node.statements, sourceElementVisitor, context, 0, alwaysStrict));
         }
-        function shouldEmitDecorateCallForClass(node) {
-            if (node.decorators && node.decorators.length > 0) {
-                return true;
-            }
-            var constructor = ts.getFirstConstructorWithBody(node);
-            if (constructor) {
-                return ts.forEach(constructor.parameters, shouldEmitDecorateCallForParameter);
-            }
-            return false;
-        }
-        function shouldEmitDecorateCallForParameter(parameter) {
-            return parameter.decorators !== undefined && parameter.decorators.length > 0;
-        }
         function getClassFacts(node, staticProperties) {
             var facts = 0;
             if (ts.some(staticProperties))
                 facts |= 1;
             var extendsClauseElement = ts.getEffectiveBaseTypeNode(node);
-            if (extendsClauseElement && ts.skipOuterExpressions(extendsClauseElement.expression).kind !== 103)
+            if (extendsClauseElement && ts.skipOuterExpressions(extendsClauseElement.expression).kind !== 104)
                 facts |= 64;
-            if (shouldEmitDecorateCallForClass(node))
+            if (ts.classOrConstructorParameterIsDecorated(node))
                 facts |= 2;
             if (ts.childIsDecorated(node))
                 facts |= 4;
@@ -72383,7 +73776,9 @@
         function createClassDeclarationHeadWithDecorators(node, name) {
             var location = ts.moveRangePastDecorators(node);
             var classAlias = getClassAliasIfNeeded(node);
-            var declName = factory.getLocalName(node, false, true);
+            var declName = languageVersion <= 2 ?
+                factory.getInternalName(node, false, true) :
+                factory.getLocalName(node, false, true);
             var heritageClauses = ts.visitNodes(node.heritageClauses, visitor, ts.isHeritageClause);
             var members = transformClassMembers(node);
             var classExpression = factory.createClassExpression(undefined, undefined, name, undefined, heritageClauses, members);
@@ -72431,9 +73826,9 @@
         function isInstanceDecoratedClassElement(member, parent) {
             return isDecoratedClassElement(member, false, parent);
         }
-        function isDecoratedClassElement(member, isStatic, parent) {
+        function isDecoratedClassElement(member, isStaticElement, parent) {
             return ts.nodeOrChildIsDecorated(member, parent)
-                && isStatic === ts.hasSyntacticModifier(member, 32);
+                && isStaticElement === ts.isStatic(member);
         }
         function getDecoratorsOfParameters(node) {
             var decorators;
@@ -72467,12 +73862,12 @@
         }
         function getAllDecoratorsOfClassElement(node, member) {
             switch (member.kind) {
-                case 168:
-                case 169:
+                case 170:
+                case 171:
                     return getAllDecoratorsOfAccessors(node, member);
-                case 166:
+                case 167:
                     return getAllDecoratorsOfMethod(member);
-                case 164:
+                case 165:
                     return getAllDecoratorsOfProperty(member);
                 default:
                     return undefined;
@@ -72551,7 +73946,7 @@
             var prefix = getClassMemberPrefix(node, member);
             var memberName = getExpressionForPropertyName(member, true);
             var descriptor = languageVersion > 0
-                ? member.kind === 164
+                ? member.kind === 165
                     ? factory.createVoidZero()
                     : factory.createNull()
                 : undefined;
@@ -72573,7 +73968,9 @@
                 return undefined;
             }
             var classAlias = classAliases && classAliases[ts.getOriginalNodeId(node)];
-            var localName = factory.getLocalName(node, false, true);
+            var localName = languageVersion <= 2 ?
+                factory.getInternalName(node, false, true) :
+                factory.getLocalName(node, false, true);
             var decorate = emitHelpers().createDecorateHelper(decoratorExpressions, localName);
             var expression = factory.createAssignment(localName, classAlias ? factory.createAssignment(classAlias, decorate) : decorate);
             ts.setEmitFlags(expression, 1536);
@@ -72637,22 +74034,22 @@
         }
         function shouldAddTypeMetadata(node) {
             var kind = node.kind;
-            return kind === 166
-                || kind === 168
-                || kind === 169
-                || kind === 164;
+            return kind === 167
+                || kind === 170
+                || kind === 171
+                || kind === 165;
         }
         function shouldAddReturnTypeMetadata(node) {
-            return node.kind === 166;
+            return node.kind === 167;
         }
         function shouldAddParamTypesMetadata(node) {
             switch (node.kind) {
-                case 253:
-                case 222:
+                case 255:
+                case 224:
                     return ts.getFirstConstructorWithBody(node) !== undefined;
-                case 166:
-                case 168:
-                case 169:
+                case 167:
+                case 170:
+                case 171:
                     return true;
             }
             return false;
@@ -72664,15 +74061,15 @@
         }
         function serializeTypeOfNode(node) {
             switch (node.kind) {
-                case 164:
-                case 161:
+                case 165:
+                case 162:
                     return serializeTypeNode(node.type);
-                case 169:
-                case 168:
+                case 171:
+                case 170:
                     return serializeTypeNode(getAccessorTypeNode(node));
-                case 253:
-                case 222:
-                case 166:
+                case 255:
+                case 224:
+                case 167:
                     return factory.createIdentifier("Function");
                 default:
                     return factory.createVoidZero();
@@ -72704,7 +74101,7 @@
             return factory.createArrayLiteralExpression(expressions);
         }
         function getParametersOfDecoratedDeclaration(node, container) {
-            if (container && node.kind === 168) {
+            if (container && node.kind === 170) {
                 var setAccessor = ts.getAllAccessorDeclarations(container.members, node).setAccessor;
                 if (setAccessor) {
                     return setAccessor.parameters;
@@ -72726,81 +74123,81 @@
                 return factory.createIdentifier("Object");
             }
             switch (node.kind) {
-                case 113:
-                case 150:
-                case 141:
+                case 114:
+                case 151:
+                case 142:
                     return factory.createVoidZero();
-                case 187:
+                case 189:
                     return serializeTypeNode(node.type);
-                case 175:
-                case 176:
+                case 177:
+                case 178:
                     return factory.createIdentifier("Function");
-                case 179:
-                case 180:
+                case 181:
+                case 182:
                     return factory.createIdentifier("Array");
-                case 173:
-                case 131:
+                case 175:
+                case 132:
                     return factory.createIdentifier("Boolean");
-                case 147:
+                case 148:
                     return factory.createIdentifier("String");
-                case 145:
+                case 146:
                     return factory.createIdentifier("Object");
-                case 192:
+                case 194:
                     switch (node.literal.kind) {
                         case 10:
                         case 14:
                             return factory.createIdentifier("String");
-                        case 215:
+                        case 217:
                         case 8:
                             return factory.createIdentifier("Number");
                         case 9:
                             return getGlobalBigIntNameWithFallback();
-                        case 109:
-                        case 94:
+                        case 110:
+                        case 95:
                             return factory.createIdentifier("Boolean");
-                        case 103:
+                        case 104:
                             return factory.createVoidZero();
                         default:
                             return ts.Debug.failBadSyntaxKind(node.literal);
                     }
-                case 144:
+                case 145:
                     return factory.createIdentifier("Number");
-                case 155:
+                case 156:
                     return getGlobalBigIntNameWithFallback();
-                case 148:
+                case 149:
                     return languageVersion < 2
                         ? getGlobalSymbolNameWithFallback()
                         : factory.createIdentifier("Symbol");
-                case 174:
+                case 176:
                     return serializeTypeReferenceNode(node);
-                case 184:
-                case 183:
-                    return serializeTypeList(node.types);
+                case 186:
                 case 185:
+                    return serializeTypeList(node.types);
+                case 187:
                     return serializeTypeList([node.trueType, node.falseType]);
-                case 189:
-                    if (node.operator === 142) {
+                case 191:
+                    if (node.operator === 143) {
                         return serializeTypeNode(node.type);
                     }
                     break;
-                case 177:
+                case 179:
+                case 192:
+                case 193:
+                case 180:
+                case 129:
+                case 153:
                 case 190:
-                case 191:
-                case 178:
-                case 128:
-                case 152:
-                case 188:
-                case 196:
+                case 198:
                     break;
-                case 304:
-                case 305:
+                case 307:
+                case 308:
+                case 312:
+                case 313:
+                case 314:
+                    break;
                 case 309:
                 case 310:
                 case 311:
-                    break;
-                case 306:
-                case 307:
-                case 308:
                     return serializeTypeNode(node.type);
                 default:
                     return ts.Debug.failBadSyntaxKind(node);
@@ -72809,15 +74206,15 @@
         }
         function serializeTypeList(types) {
             var serializedUnion;
-            for (var _i = 0, types_24 = types; _i < types_24.length; _i++) {
-                var typeNode = types_24[_i];
-                while (typeNode.kind === 187) {
+            for (var _i = 0, types_23 = types; _i < types_23.length; _i++) {
+                var typeNode = types_23[_i];
+                while (typeNode.kind === 189) {
                     typeNode = typeNode.type;
                 }
-                if (typeNode.kind === 141) {
+                if (typeNode.kind === 142) {
                     continue;
                 }
-                if (!strictNullChecks && (typeNode.kind === 192 && typeNode.literal.kind === 103 || typeNode.kind === 150)) {
+                if (!strictNullChecks && (typeNode.kind === 194 && typeNode.literal.kind === 104 || typeNode.kind === 151)) {
                     continue;
                 }
                 var serializedIndividual = serializeTypeNode(typeNode);
@@ -72879,11 +74276,11 @@
             return factory.createLogicalAnd(factory.createStrictInequality(factory.createTypeOfExpression(left), factory.createStringLiteral("undefined")), right);
         }
         function serializeEntityNameAsExpressionFallback(node) {
-            if (node.kind === 78) {
+            if (node.kind === 79) {
                 var copied = serializeEntityNameAsExpression(node);
                 return createCheckedValue(copied, copied);
             }
-            if (node.left.kind === 78) {
+            if (node.left.kind === 79) {
                 return createCheckedValue(serializeEntityNameAsExpression(node.left), serializeEntityNameAsExpression(node));
             }
             var left = serializeEntityNameAsExpressionFallback(node.left);
@@ -72892,12 +74289,12 @@
         }
         function serializeEntityNameAsExpression(node) {
             switch (node.kind) {
-                case 78:
+                case 79:
                     var name = ts.setParent(ts.setTextRange(ts.parseNodeFactory.cloneNode(node), node), node.parent);
                     name.original = undefined;
                     ts.setParent(name, ts.getParseTreeNode(currentLexicalScope));
                     return name;
-                case 158:
+                case 159:
                     return serializeQualifiedNameAsExpression(node);
             }
         }
@@ -72943,7 +74340,7 @@
             return ts.visitNode(name, visitor, ts.isPropertyName);
         }
         function visitHeritageClause(node) {
-            if (node.token === 116) {
+            if (node.token === 117) {
                 return undefined;
             }
             return ts.visitEachChild(node, visitor, context);
@@ -73241,11 +74638,11 @@
         function addVarForEnumOrModuleDeclaration(statements, node) {
             var statement = factory.createVariableStatement(ts.visitNodes(node.modifiers, modifierVisitor, ts.isModifier), factory.createVariableDeclarationList([
                 factory.createVariableDeclaration(factory.getLocalName(node, false, true))
-            ], currentLexicalScope.kind === 298 ? 0 : 1));
+            ], currentLexicalScope.kind === 300 ? 0 : 1));
             ts.setOriginalNode(statement, node);
             recordEmittedDeclarationInScope(node);
             if (isFirstEmittedDeclarationInScope(node)) {
-                if (node.kind === 256) {
+                if (node.kind === 258) {
                     ts.setSourceMapRange(statement.declarationList, node);
                 }
                 else {
@@ -73311,7 +74708,7 @@
             var statementsLocation;
             var blockLocation;
             if (node.body) {
-                if (node.body.kind === 258) {
+                if (node.body.kind === 260) {
                     saveStateAndInvoke(node.body, function (body) { return ts.addRange(statements, ts.visitNodes(body.statements, namespaceElementVisitor, ts.isStatement)); });
                     statementsLocation = node.body.statements;
                     blockLocation = node.body;
@@ -73336,13 +74733,13 @@
             currentScopeFirstDeclarationsOfName = savedCurrentScopeFirstDeclarationsOfName;
             var block = factory.createBlock(ts.setTextRange(factory.createNodeArray(statements), statementsLocation), true);
             ts.setTextRange(block, blockLocation);
-            if (!node.body || node.body.kind !== 258) {
+            if (!node.body || node.body.kind !== 260) {
                 ts.setEmitFlags(block, ts.getEmitFlags(block) | 1536);
             }
             return block;
         }
         function getInnerMostModuleDeclarationFromDottedModule(moduleDeclaration) {
-            if (moduleDeclaration.body.kind === 257) {
+            if (moduleDeclaration.body.kind === 259) {
                 var recursiveInnerModule = getInnerMostModuleDeclarationFromDottedModule(moduleDeclaration.body);
                 return recursiveInnerModule || moduleDeclaration.body;
             }
@@ -73370,7 +74767,7 @@
             return (name || namedBindings) ? factory.updateImportClause(node, false, name, namedBindings) : undefined;
         }
         function visitNamedImportBindings(node) {
-            if (node.kind === 264) {
+            if (node.kind === 266) {
                 return resolver.isReferencedAliasDeclaration(node) ? node : undefined;
             }
             else {
@@ -73498,36 +74895,36 @@
             return factory.createPropertyAccessExpression(factory.getDeclarationName(node), "prototype");
         }
         function getClassMemberPrefix(node, member) {
-            return ts.hasSyntacticModifier(member, 32)
+            return ts.isStatic(member)
                 ? factory.getDeclarationName(node)
                 : getClassPrototype(node);
         }
         function enableSubstitutionForNonQualifiedEnumMembers() {
             if ((enabledSubstitutions & 8) === 0) {
                 enabledSubstitutions |= 8;
-                context.enableSubstitution(78);
+                context.enableSubstitution(79);
             }
         }
         function enableSubstitutionForClassAliases() {
             if ((enabledSubstitutions & 1) === 0) {
                 enabledSubstitutions |= 1;
-                context.enableSubstitution(78);
+                context.enableSubstitution(79);
                 classAliases = [];
             }
         }
         function enableSubstitutionForNamespaceExports() {
             if ((enabledSubstitutions & 2) === 0) {
                 enabledSubstitutions |= 2;
-                context.enableSubstitution(78);
-                context.enableSubstitution(290);
-                context.enableEmitNotification(257);
+                context.enableSubstitution(79);
+                context.enableSubstitution(292);
+                context.enableEmitNotification(259);
             }
         }
         function isTransformedModuleDeclaration(node) {
-            return ts.getOriginalNode(node).kind === 257;
+            return ts.getOriginalNode(node).kind === 259;
         }
         function isTransformedEnumDeclaration(node) {
-            return ts.getOriginalNode(node).kind === 256;
+            return ts.getOriginalNode(node).kind === 258;
         }
         function onEmitNode(hint, node, emitCallback) {
             var savedApplicableSubstitutions = applicableSubstitutions;
@@ -73571,11 +74968,11 @@
         }
         function substituteExpression(node) {
             switch (node.kind) {
-                case 78:
+                case 79:
                     return substituteExpressionIdentifier(node);
-                case 202:
+                case 204:
                     return substitutePropertyAccessExpression(node);
-                case 203:
+                case 205:
                     return substituteElementAccessExpression(node);
             }
             return node;
@@ -73605,9 +75002,9 @@
         function trySubstituteNamespaceExportedName(node) {
             if (enabledSubstitutions & applicableSubstitutions && !ts.isGeneratedIdentifier(node) && !ts.isLocalName(node)) {
                 var container = resolver.getReferencedExportContainer(node, false);
-                if (container && container.kind !== 298) {
-                    var substitute = (applicableSubstitutions & 2 && container.kind === 257) ||
-                        (applicableSubstitutions & 8 && container.kind === 256);
+                if (container && container.kind !== 300) {
+                    var substitute = (applicableSubstitutions & 2 && container.kind === 259) ||
+                        (applicableSubstitutions & 8 && container.kind === 258);
                     if (substitute) {
                         return ts.setTextRange(factory.createPropertyAccessExpression(factory.getGeneratedNameForNode(container), node), node);
                     }
@@ -73649,20 +75046,27 @@
 var ts;
 (function (ts) {
     function transformClassFields(context) {
-        var factory = context.factory, hoistVariableDeclaration = context.hoistVariableDeclaration, endLexicalEnvironment = context.endLexicalEnvironment, resumeLexicalEnvironment = context.resumeLexicalEnvironment, addBlockScopedVariable = context.addBlockScopedVariable;
+        var factory = context.factory, hoistVariableDeclaration = context.hoistVariableDeclaration, endLexicalEnvironment = context.endLexicalEnvironment, startLexicalEnvironment = context.startLexicalEnvironment, resumeLexicalEnvironment = context.resumeLexicalEnvironment, addBlockScopedVariable = context.addBlockScopedVariable;
         var resolver = context.getEmitResolver();
         var compilerOptions = context.getCompilerOptions();
         var languageVersion = ts.getEmitScriptTarget(compilerOptions);
         var useDefineForClassFields = ts.getUseDefineForClassFields(compilerOptions);
-        var shouldTransformPrivateElements = languageVersion < 99;
+        var shouldTransformPrivateElementsOrClassStaticBlocks = languageVersion < 99;
+        var shouldTransformSuperInStaticInitializers = (languageVersion <= 8 || !useDefineForClassFields) && languageVersion >= 2;
+        var shouldTransformThisInStaticInitializers = languageVersion <= 8 || !useDefineForClassFields;
         var previousOnSubstituteNode = context.onSubstituteNode;
         context.onSubstituteNode = onSubstituteNode;
+        var previousOnEmitNode = context.onEmitNode;
+        context.onEmitNode = onEmitNode;
         var enabledSubstitutions;
         var classAliases;
         var pendingExpressions;
         var pendingStatements;
-        var privateIdentifierEnvironmentStack = [];
-        var currentPrivateIdentifierEnvironment;
+        var classLexicalEnvironmentStack = [];
+        var classLexicalEnvironmentMap = new ts.Map();
+        var currentClassLexicalEnvironment;
+        var currentComputedPropertyNameClassLexicalEnvironment;
+        var currentStaticPropertyDeclarationOrStaticBlock;
         return ts.chainBundle(context, transformSourceFile);
         function transformSourceFile(node) {
             var options = context.getCompilerOptions();
@@ -73674,66 +75078,104 @@
             ts.addEmitHelpers(visited, context.readEmitHelpers());
             return visited;
         }
-        function visitor(node) {
-            if (!(node.transformFlags & 8388608))
-                return node;
-            switch (node.kind) {
-                case 222:
-                case 253:
-                    return visitClassLike(node);
-                case 164:
-                    return visitPropertyDeclaration(node);
-                case 233:
-                    return visitVariableStatement(node);
-                case 202:
-                    return visitPropertyAccessExpression(node);
-                case 215:
-                    return visitPrefixUnaryExpression(node);
-                case 216:
-                    return visitPostfixUnaryExpression(node, false);
-                case 204:
-                    return visitCallExpression(node);
-                case 217:
-                    return visitBinaryExpression(node);
-                case 79:
-                    return visitPrivateIdentifier(node);
-                case 234:
-                    return visitExpressionStatement(node);
-                case 238:
-                    return visitForStatement(node);
-                case 206:
-                    return visitTaggedTemplateExpression(node);
+        function visitorWorker(node, valueIsDiscarded) {
+            if (node.transformFlags & 8388608) {
+                switch (node.kind) {
+                    case 224:
+                    case 255:
+                        return visitClassLike(node);
+                    case 165:
+                        return visitPropertyDeclaration(node);
+                    case 235:
+                        return visitVariableStatement(node);
+                    case 80:
+                        return visitPrivateIdentifier(node);
+                    case 168:
+                        return visitClassStaticBlockDeclaration(node);
+                }
+            }
+            if (node.transformFlags & 8388608 ||
+                node.transformFlags & 33554432 &&
+                    shouldTransformSuperInStaticInitializers &&
+                    currentStaticPropertyDeclarationOrStaticBlock &&
+                    currentClassLexicalEnvironment) {
+                switch (node.kind) {
+                    case 217:
+                    case 218:
+                        return visitPreOrPostfixUnaryExpression(node, valueIsDiscarded);
+                    case 219:
+                        return visitBinaryExpression(node, valueIsDiscarded);
+                    case 206:
+                        return visitCallExpression(node);
+                    case 208:
+                        return visitTaggedTemplateExpression(node);
+                    case 204:
+                        return visitPropertyAccessExpression(node);
+                    case 205:
+                        return visitElementAccessExpression(node);
+                    case 236:
+                        return visitExpressionStatement(node);
+                    case 240:
+                        return visitForStatement(node);
+                    case 254:
+                    case 211:
+                    case 169:
+                    case 167:
+                    case 170:
+                    case 171: {
+                        var savedCurrentStaticPropertyDeclarationOrStaticBlock = currentStaticPropertyDeclarationOrStaticBlock;
+                        currentStaticPropertyDeclarationOrStaticBlock = undefined;
+                        var result = ts.visitEachChild(node, visitor, context);
+                        currentStaticPropertyDeclarationOrStaticBlock = savedCurrentStaticPropertyDeclarationOrStaticBlock;
+                        return result;
+                    }
+                }
             }
             return ts.visitEachChild(node, visitor, context);
         }
+        function discardedValueVisitor(node) {
+            return visitorWorker(node, true);
+        }
+        function visitor(node) {
+            return visitorWorker(node, false);
+        }
+        function heritageClauseVisitor(node) {
+            switch (node.kind) {
+                case 289:
+                    return ts.visitEachChild(node, heritageClauseVisitor, context);
+                case 226:
+                    return visitExpressionWithTypeArguments(node);
+            }
+            return visitor(node);
+        }
         function visitorDestructuringTarget(node) {
             switch (node.kind) {
-                case 201:
-                case 200:
+                case 203:
+                case 202:
                     return visitAssignmentPattern(node);
                 default:
                     return visitor(node);
             }
         }
         function visitPrivateIdentifier(node) {
-            if (!shouldTransformPrivateElements) {
+            if (!shouldTransformPrivateElementsOrClassStaticBlocks) {
                 return node;
             }
             return ts.setOriginalNode(factory.createIdentifier(""), node);
         }
         function classElementVisitor(node) {
             switch (node.kind) {
-                case 167:
-                    return undefined;
-                case 168:
                 case 169:
-                case 166:
+                    return undefined;
+                case 170:
+                case 171:
+                case 167:
                     return visitMethodOrAccessorDeclaration(node);
-                case 164:
+                case 165:
                     return visitPropertyDeclaration(node);
-                case 159:
+                case 160:
                     return visitComputedPropertyName(node);
-                case 230:
+                case 232:
                     return node;
                 default:
                     return visitor(node);
@@ -73743,7 +75185,7 @@
             var savedPendingStatements = pendingStatements;
             pendingStatements = [];
             var visitedNode = ts.visitEachChild(node, visitor, context);
-            var statement = ts.some(pendingStatements) ? __spreadArray([visitedNode], pendingStatements) :
+            var statement = ts.some(pendingStatements) ? __spreadArray([visitedNode], pendingStatements, true) :
                 visitedNode;
             pendingStatements = savedPendingStatements;
             return statement;
@@ -73760,7 +75202,7 @@
         }
         function visitMethodOrAccessorDeclaration(node) {
             ts.Debug.assert(!ts.some(node.decorators));
-            if (!shouldTransformPrivateElements || !ts.isPrivateIdentifier(node.name)) {
+            if (!shouldTransformPrivateElementsOrClassStaticBlocks || !ts.isPrivateIdentifier(node.name)) {
                 return ts.visitEachChild(node, classElementVisitor, context);
             }
             var info = accessPrivateIdentifier(node.name);
@@ -73793,7 +75235,7 @@
         function visitPropertyDeclaration(node) {
             ts.Debug.assert(!ts.some(node.decorators));
             if (ts.isPrivateIdentifier(node.name)) {
-                if (!shouldTransformPrivateElements) {
+                if (!shouldTransformPrivateElementsOrClassStaticBlocks) {
                     return factory.updatePropertyDeclaration(node, undefined, ts.visitNodes(node.modifiers, visitor, ts.isModifier), node.name, undefined, undefined, undefined);
                 }
                 var info = accessPrivateIdentifier(node.name);
@@ -73825,59 +75267,120 @@
             }
         }
         function visitPropertyAccessExpression(node) {
-            if (shouldTransformPrivateElements && ts.isPrivateIdentifier(node.name)) {
+            if (shouldTransformPrivateElementsOrClassStaticBlocks && ts.isPrivateIdentifier(node.name)) {
                 var privateIdentifierInfo = accessPrivateIdentifier(node.name);
                 if (privateIdentifierInfo) {
                     return ts.setTextRange(ts.setOriginalNode(createPrivateIdentifierAccess(privateIdentifierInfo, node.expression), node), node);
                 }
             }
-            return ts.visitEachChild(node, visitor, context);
-        }
-        function visitPrefixUnaryExpression(node) {
-            if (shouldTransformPrivateElements && ts.isPrivateIdentifierPropertyAccessExpression(node.operand)) {
-                var operator = node.operator === 45 ?
-                    39 : node.operator === 46 ?
-                    40 : undefined;
-                var info = void 0;
-                if (operator && (info = accessPrivateIdentifier(node.operand.name))) {
-                    var receiver = ts.visitNode(node.operand.expression, visitor, ts.isExpression);
-                    var _a = createCopiableReceiverExpr(receiver), readExpression = _a.readExpression, initializeExpression = _a.initializeExpression;
-                    var existingValue = factory.createPrefixUnaryExpression(39, createPrivateIdentifierAccess(info, readExpression));
-                    return ts.setOriginalNode(createPrivateIdentifierAssignment(info, initializeExpression || readExpression, factory.createBinaryExpression(existingValue, operator, factory.createNumericLiteral(1)), 62), node);
+            if (shouldTransformSuperInStaticInitializers &&
+                ts.isSuperProperty(node) &&
+                ts.isIdentifier(node.name) &&
+                currentStaticPropertyDeclarationOrStaticBlock &&
+                currentClassLexicalEnvironment) {
+                var classConstructor = currentClassLexicalEnvironment.classConstructor, superClassReference = currentClassLexicalEnvironment.superClassReference, facts = currentClassLexicalEnvironment.facts;
+                if (facts & 1) {
+                    return visitInvalidSuperProperty(node);
+                }
+                if (classConstructor && superClassReference) {
+                    var superProperty = factory.createReflectGetCall(superClassReference, factory.createStringLiteralFromNode(node.name), classConstructor);
+                    ts.setOriginalNode(superProperty, node.expression);
+                    ts.setTextRange(superProperty, node.expression);
+                    return superProperty;
                 }
             }
             return ts.visitEachChild(node, visitor, context);
         }
-        function visitPostfixUnaryExpression(node, valueIsDiscarded) {
-            if (shouldTransformPrivateElements && ts.isPrivateIdentifierPropertyAccessExpression(node.operand)) {
-                var operator = node.operator === 45 ?
-                    39 : node.operator === 46 ?
-                    40 : undefined;
-                var info = void 0;
-                if (operator && (info = accessPrivateIdentifier(node.operand.name))) {
-                    var receiver = ts.visitNode(node.operand.expression, visitor, ts.isExpression);
-                    var _a = createCopiableReceiverExpr(receiver), readExpression = _a.readExpression, initializeExpression = _a.initializeExpression;
-                    var existingValue = factory.createPrefixUnaryExpression(39, createPrivateIdentifierAccess(info, readExpression));
-                    var returnValue = valueIsDiscarded ? undefined : factory.createTempVariable(hoistVariableDeclaration);
-                    return ts.setOriginalNode(factory.inlineExpressions(ts.compact([
-                        createPrivateIdentifierAssignment(info, initializeExpression || readExpression, factory.createBinaryExpression(returnValue ? factory.createAssignment(returnValue, existingValue) : existingValue, operator, factory.createNumericLiteral(1)), 62),
-                        returnValue
-                    ])), node);
+        function visitElementAccessExpression(node) {
+            if (shouldTransformSuperInStaticInitializers &&
+                ts.isSuperProperty(node) &&
+                currentStaticPropertyDeclarationOrStaticBlock &&
+                currentClassLexicalEnvironment) {
+                var classConstructor = currentClassLexicalEnvironment.classConstructor, superClassReference = currentClassLexicalEnvironment.superClassReference, facts = currentClassLexicalEnvironment.facts;
+                if (facts & 1) {
+                    return visitInvalidSuperProperty(node);
+                }
+                if (classConstructor && superClassReference) {
+                    var superProperty = factory.createReflectGetCall(superClassReference, ts.visitNode(node.argumentExpression, visitor, ts.isExpression), classConstructor);
+                    ts.setOriginalNode(superProperty, node.expression);
+                    ts.setTextRange(superProperty, node.expression);
+                    return superProperty;
+                }
+            }
+            return ts.visitEachChild(node, visitor, context);
+        }
+        function visitPreOrPostfixUnaryExpression(node, valueIsDiscarded) {
+            if (node.operator === 45 || node.operator === 46) {
+                if (shouldTransformPrivateElementsOrClassStaticBlocks && ts.isPrivateIdentifierPropertyAccessExpression(node.operand)) {
+                    var info = void 0;
+                    if (info = accessPrivateIdentifier(node.operand.name)) {
+                        var receiver = ts.visitNode(node.operand.expression, visitor, ts.isExpression);
+                        var _a = createCopiableReceiverExpr(receiver), readExpression = _a.readExpression, initializeExpression = _a.initializeExpression;
+                        var expression = createPrivateIdentifierAccess(info, readExpression);
+                        var temp = ts.isPrefixUnaryExpression(node) || valueIsDiscarded ? undefined : factory.createTempVariable(hoistVariableDeclaration);
+                        expression = ts.expandPreOrPostfixIncrementOrDecrementExpression(factory, node, expression, hoistVariableDeclaration, temp);
+                        expression = createPrivateIdentifierAssignment(info, initializeExpression || readExpression, expression, 63);
+                        ts.setOriginalNode(expression, node);
+                        ts.setTextRange(expression, node);
+                        if (temp) {
+                            expression = factory.createComma(expression, temp);
+                            ts.setTextRange(expression, node);
+                        }
+                        return expression;
+                    }
+                }
+                else if (shouldTransformSuperInStaticInitializers &&
+                    ts.isSuperProperty(node.operand) &&
+                    currentStaticPropertyDeclarationOrStaticBlock &&
+                    currentClassLexicalEnvironment) {
+                    var classConstructor = currentClassLexicalEnvironment.classConstructor, superClassReference = currentClassLexicalEnvironment.superClassReference, facts = currentClassLexicalEnvironment.facts;
+                    if (facts & 1) {
+                        var operand = visitInvalidSuperProperty(node.operand);
+                        return ts.isPrefixUnaryExpression(node) ?
+                            factory.updatePrefixUnaryExpression(node, operand) :
+                            factory.updatePostfixUnaryExpression(node, operand);
+                    }
+                    if (classConstructor && superClassReference) {
+                        var setterName = void 0;
+                        var getterName = void 0;
+                        if (ts.isPropertyAccessExpression(node.operand)) {
+                            if (ts.isIdentifier(node.operand.name)) {
+                                getterName = setterName = factory.createStringLiteralFromNode(node.operand.name);
+                            }
+                        }
+                        else {
+                            if (ts.isSimpleInlineableExpression(node.operand.argumentExpression)) {
+                                getterName = setterName = node.operand.argumentExpression;
+                            }
+                            else {
+                                getterName = factory.createTempVariable(hoistVariableDeclaration);
+                                setterName = factory.createAssignment(getterName, ts.visitNode(node.operand.argumentExpression, visitor, ts.isExpression));
+                            }
+                        }
+                        if (setterName && getterName) {
+                            var expression = factory.createReflectGetCall(superClassReference, getterName, classConstructor);
+                            ts.setTextRange(expression, node.operand);
+                            var temp = valueIsDiscarded ? undefined : factory.createTempVariable(hoistVariableDeclaration);
+                            expression = ts.expandPreOrPostfixIncrementOrDecrementExpression(factory, node, expression, hoistVariableDeclaration, temp);
+                            expression = factory.createReflectSetCall(superClassReference, setterName, expression, classConstructor);
+                            ts.setOriginalNode(expression, node);
+                            ts.setTextRange(expression, node);
+                            if (temp) {
+                                expression = factory.createComma(expression, temp);
+                                ts.setTextRange(expression, node);
+                            }
+                            return expression;
+                        }
+                    }
                 }
             }
             return ts.visitEachChild(node, visitor, context);
         }
         function visitForStatement(node) {
-            if (node.incrementor && ts.isPostfixUnaryExpression(node.incrementor)) {
-                return factory.updateForStatement(node, ts.visitNode(node.initializer, visitor, ts.isForInitializer), ts.visitNode(node.condition, visitor, ts.isExpression), visitPostfixUnaryExpression(node.incrementor, true), ts.visitIterationBody(node.statement, visitor, context));
-            }
-            return ts.visitEachChild(node, visitor, context);
+            return factory.updateForStatement(node, ts.visitNode(node.initializer, discardedValueVisitor, ts.isForInitializer), ts.visitNode(node.condition, visitor, ts.isExpression), ts.visitNode(node.incrementor, discardedValueVisitor, ts.isExpression), ts.visitIterationBody(node.statement, visitor, context));
         }
         function visitExpressionStatement(node) {
-            if (ts.isPostfixUnaryExpression(node.expression)) {
-                return factory.updateExpressionStatement(node, visitPostfixUnaryExpression(node.expression, true));
-            }
-            return ts.visitEachChild(node, visitor, context);
+            return factory.updateExpressionStatement(node, ts.visitNode(node.expression, discardedValueVisitor, ts.isExpression));
         }
         function createCopiableReceiverExpr(receiver) {
             var clone = ts.nodeIsSynthesized(receiver) ? receiver : factory.cloneNode(receiver);
@@ -73889,40 +75392,118 @@
             return { readExpression: readExpression, initializeExpression: initializeExpression };
         }
         function visitCallExpression(node) {
-            if (shouldTransformPrivateElements && ts.isPrivateIdentifierPropertyAccessExpression(node.expression)) {
+            if (shouldTransformPrivateElementsOrClassStaticBlocks && ts.isPrivateIdentifierPropertyAccessExpression(node.expression)) {
                 var _a = factory.createCallBinding(node.expression, hoistVariableDeclaration, languageVersion), thisArg = _a.thisArg, target = _a.target;
                 if (ts.isCallChain(node)) {
-                    return factory.updateCallChain(node, factory.createPropertyAccessChain(ts.visitNode(target, visitor), node.questionDotToken, "call"), undefined, undefined, __spreadArray([ts.visitNode(thisArg, visitor, ts.isExpression)], ts.visitNodes(node.arguments, visitor, ts.isExpression)));
+                    return factory.updateCallChain(node, factory.createPropertyAccessChain(ts.visitNode(target, visitor), node.questionDotToken, "call"), undefined, undefined, __spreadArray([ts.visitNode(thisArg, visitor, ts.isExpression)], ts.visitNodes(node.arguments, visitor, ts.isExpression), true));
                 }
-                return factory.updateCallExpression(node, factory.createPropertyAccessExpression(ts.visitNode(target, visitor), "call"), undefined, __spreadArray([ts.visitNode(thisArg, visitor, ts.isExpression)], ts.visitNodes(node.arguments, visitor, ts.isExpression)));
+                return factory.updateCallExpression(node, factory.createPropertyAccessExpression(ts.visitNode(target, visitor), "call"), undefined, __spreadArray([ts.visitNode(thisArg, visitor, ts.isExpression)], ts.visitNodes(node.arguments, visitor, ts.isExpression), true));
+            }
+            if (shouldTransformSuperInStaticInitializers &&
+                ts.isSuperProperty(node.expression) &&
+                currentStaticPropertyDeclarationOrStaticBlock &&
+                (currentClassLexicalEnvironment === null || currentClassLexicalEnvironment === void 0 ? void 0 : currentClassLexicalEnvironment.classConstructor)) {
+                var invocation = factory.createFunctionCallCall(ts.visitNode(node.expression, visitor, ts.isExpression), currentClassLexicalEnvironment.classConstructor, ts.visitNodes(node.arguments, visitor, ts.isExpression));
+                ts.setOriginalNode(invocation, node);
+                ts.setTextRange(invocation, node);
+                return invocation;
             }
             return ts.visitEachChild(node, visitor, context);
         }
         function visitTaggedTemplateExpression(node) {
-            if (shouldTransformPrivateElements && ts.isPrivateIdentifierPropertyAccessExpression(node.tag)) {
+            if (shouldTransformPrivateElementsOrClassStaticBlocks && ts.isPrivateIdentifierPropertyAccessExpression(node.tag)) {
                 var _a = factory.createCallBinding(node.tag, hoistVariableDeclaration, languageVersion), thisArg = _a.thisArg, target = _a.target;
                 return factory.updateTaggedTemplateExpression(node, factory.createCallExpression(factory.createPropertyAccessExpression(ts.visitNode(target, visitor), "bind"), undefined, [ts.visitNode(thisArg, visitor, ts.isExpression)]), undefined, ts.visitNode(node.template, visitor, ts.isTemplateLiteral));
             }
+            if (shouldTransformSuperInStaticInitializers &&
+                ts.isSuperProperty(node.tag) &&
+                currentStaticPropertyDeclarationOrStaticBlock &&
+                (currentClassLexicalEnvironment === null || currentClassLexicalEnvironment === void 0 ? void 0 : currentClassLexicalEnvironment.classConstructor)) {
+                var invocation = factory.createFunctionBindCall(ts.visitNode(node.tag, visitor, ts.isExpression), currentClassLexicalEnvironment.classConstructor, []);
+                ts.setOriginalNode(invocation, node);
+                ts.setTextRange(invocation, node);
+                return factory.updateTaggedTemplateExpression(node, invocation, undefined, ts.visitNode(node.template, visitor, ts.isTemplateLiteral));
+            }
             return ts.visitEachChild(node, visitor, context);
         }
-        function visitBinaryExpression(node) {
-            if (shouldTransformPrivateElements) {
-                if (ts.isDestructuringAssignment(node)) {
-                    var savedPendingExpressions = pendingExpressions;
-                    pendingExpressions = undefined;
-                    node = factory.updateBinaryExpression(node, ts.visitNode(node.left, visitorDestructuringTarget), node.operatorToken, ts.visitNode(node.right, visitor));
-                    var expr = ts.some(pendingExpressions) ?
-                        factory.inlineExpressions(ts.compact(__spreadArray(__spreadArray([], pendingExpressions), [node]))) :
-                        node;
-                    pendingExpressions = savedPendingExpressions;
-                    return expr;
+        function transformClassStaticBlockDeclaration(node) {
+            if (shouldTransformPrivateElementsOrClassStaticBlocks) {
+                if (currentClassLexicalEnvironment) {
+                    classLexicalEnvironmentMap.set(ts.getOriginalNodeId(node), currentClassLexicalEnvironment);
                 }
-                if (ts.isAssignmentExpression(node) && ts.isPrivateIdentifierPropertyAccessExpression(node.left)) {
+                startLexicalEnvironment();
+                var savedCurrentStaticPropertyDeclarationOrStaticBlock = currentStaticPropertyDeclarationOrStaticBlock;
+                currentStaticPropertyDeclarationOrStaticBlock = node;
+                var statements = ts.visitNodes(node.body.statements, visitor, ts.isStatement);
+                statements = factory.mergeLexicalEnvironment(statements, endLexicalEnvironment());
+                currentStaticPropertyDeclarationOrStaticBlock = savedCurrentStaticPropertyDeclarationOrStaticBlock;
+                var iife = factory.createImmediatelyInvokedArrowFunction(statements);
+                ts.setOriginalNode(iife, node);
+                ts.setTextRange(iife, node);
+                ts.addEmitFlags(iife, 2);
+                return iife;
+            }
+        }
+        function visitBinaryExpression(node, valueIsDiscarded) {
+            if (ts.isDestructuringAssignment(node)) {
+                var savedPendingExpressions = pendingExpressions;
+                pendingExpressions = undefined;
+                node = factory.updateBinaryExpression(node, ts.visitNode(node.left, visitorDestructuringTarget), node.operatorToken, ts.visitNode(node.right, visitor));
+                var expr = ts.some(pendingExpressions) ?
+                    factory.inlineExpressions(ts.compact(__spreadArray(__spreadArray([], pendingExpressions, true), [node], false))) :
+                    node;
+                pendingExpressions = savedPendingExpressions;
+                return expr;
+            }
+            if (ts.isAssignmentExpression(node)) {
+                if (shouldTransformPrivateElementsOrClassStaticBlocks && ts.isPrivateIdentifierPropertyAccessExpression(node.left)) {
                     var info = accessPrivateIdentifier(node.left.name);
                     if (info) {
                         return ts.setTextRange(ts.setOriginalNode(createPrivateIdentifierAssignment(info, node.left.expression, node.right, node.operatorToken.kind), node), node);
                     }
                 }
+                else if (shouldTransformSuperInStaticInitializers &&
+                    ts.isSuperProperty(node.left) &&
+                    currentStaticPropertyDeclarationOrStaticBlock &&
+                    currentClassLexicalEnvironment) {
+                    var classConstructor = currentClassLexicalEnvironment.classConstructor, superClassReference = currentClassLexicalEnvironment.superClassReference, facts = currentClassLexicalEnvironment.facts;
+                    if (facts & 1) {
+                        return factory.updateBinaryExpression(node, visitInvalidSuperProperty(node.left), node.operatorToken, ts.visitNode(node.right, visitor, ts.isExpression));
+                    }
+                    if (classConstructor && superClassReference) {
+                        var setterName = ts.isElementAccessExpression(node.left) ? ts.visitNode(node.left.argumentExpression, visitor, ts.isExpression) :
+                            ts.isIdentifier(node.left.name) ? factory.createStringLiteralFromNode(node.left.name) :
+                                undefined;
+                        if (setterName) {
+                            var expression = ts.visitNode(node.right, visitor, ts.isExpression);
+                            if (ts.isCompoundAssignment(node.operatorToken.kind)) {
+                                var getterName = setterName;
+                                if (!ts.isSimpleInlineableExpression(setterName)) {
+                                    getterName = factory.createTempVariable(hoistVariableDeclaration);
+                                    setterName = factory.createAssignment(getterName, setterName);
+                                }
+                                var superPropertyGet = factory.createReflectGetCall(superClassReference, getterName, classConstructor);
+                                ts.setOriginalNode(superPropertyGet, node.left);
+                                ts.setTextRange(superPropertyGet, node.left);
+                                expression = factory.createBinaryExpression(superPropertyGet, ts.getNonAssignmentOperatorForCompoundAssignment(node.operatorToken.kind), expression);
+                                ts.setTextRange(expression, node);
+                            }
+                            var temp = valueIsDiscarded ? undefined : factory.createTempVariable(hoistVariableDeclaration);
+                            if (temp) {
+                                expression = factory.createAssignment(temp, expression);
+                                ts.setTextRange(temp, node);
+                            }
+                            expression = factory.createReflectSetCall(superClassReference, setterName, expression, classConstructor);
+                            ts.setOriginalNode(expression, node);
+                            ts.setTextRange(expression, node);
+                            if (temp) {
+                                expression = factory.createComma(expression, temp);
+                                ts.setTextRange(expression, node);
+                            }
+                            return expression;
+                        }
+                    }
+                }
             }
             return ts.visitEachChild(node, visitor, context);
         }
@@ -73947,10 +75528,13 @@
             }
         }
         function visitClassLike(node) {
+            if (!ts.forEach(node.members, doesClassElementNeedTransform)) {
+                return ts.visitEachChild(node, visitor, context);
+            }
             var savedPendingExpressions = pendingExpressions;
             pendingExpressions = undefined;
-            if (shouldTransformPrivateElements) {
-                startPrivateIdentifierEnvironment();
+            startClassLexicalEnvironment();
+            if (shouldTransformPrivateElementsOrClassStaticBlocks) {
                 var name = ts.getNameOfDeclaration(node);
                 if (name && ts.isIdentifier(name)) {
                     getPrivateIdentifierEnvironment().className = ts.idText(name);
@@ -73963,53 +75547,97 @@
             var result = ts.isClassDeclaration(node) ?
                 visitClassDeclaration(node) :
                 visitClassExpression(node);
-            if (shouldTransformPrivateElements) {
-                endPrivateIdentifierEnvironment();
-            }
+            endClassLexicalEnvironment();
             pendingExpressions = savedPendingExpressions;
             return result;
         }
         function doesClassElementNeedTransform(node) {
-            return ts.isPropertyDeclaration(node) || (shouldTransformPrivateElements && node.name && ts.isPrivateIdentifier(node.name));
+            return ts.isPropertyDeclaration(node) || ts.isClassStaticBlockDeclaration(node) || (shouldTransformPrivateElementsOrClassStaticBlocks && node.name && ts.isPrivateIdentifier(node.name));
         }
         function getPrivateInstanceMethodsAndAccessors(node) {
             return ts.filter(node.members, ts.isNonStaticMethodOrAccessorWithPrivateName);
         }
-        function visitClassDeclaration(node) {
-            if (!ts.forEach(node.members, doesClassElementNeedTransform)) {
-                return ts.visitEachChild(node, visitor, context);
+        function getClassFacts(node) {
+            var facts = 0;
+            var original = ts.getOriginalNode(node);
+            if (ts.isClassDeclaration(original) && ts.classOrConstructorParameterIsDecorated(original)) {
+                facts |= 1;
             }
-            var staticProperties = ts.getProperties(node, false, true);
-            var pendingPrivateStateAssignment;
-            if (shouldTransformPrivateElements && ts.some(node.members, function (m) { return ts.hasStaticModifier(m) && !!m.name && ts.isPrivateIdentifier(m.name); })) {
+            for (var _i = 0, _a = node.members; _i < _a.length; _i++) {
+                var member = _a[_i];
+                if (!ts.isStatic(member))
+                    continue;
+                if (member.name && ts.isPrivateIdentifier(member.name) && shouldTransformPrivateElementsOrClassStaticBlocks) {
+                    facts |= 2;
+                }
+                if (ts.isPropertyDeclaration(member) || ts.isClassStaticBlockDeclaration(member)) {
+                    if (shouldTransformThisInStaticInitializers && member.transformFlags & 8192) {
+                        facts |= 8;
+                        if (!(facts & 1)) {
+                            facts |= 2;
+                        }
+                    }
+                    if (shouldTransformSuperInStaticInitializers && member.transformFlags & 33554432) {
+                        if (!(facts & 1)) {
+                            facts |= 2 | 4;
+                        }
+                    }
+                }
+            }
+            return facts;
+        }
+        function visitExpressionWithTypeArguments(node) {
+            var facts = (currentClassLexicalEnvironment === null || currentClassLexicalEnvironment === void 0 ? void 0 : currentClassLexicalEnvironment.facts) || 0;
+            if (facts & 4) {
                 var temp = factory.createTempVariable(hoistVariableDeclaration, true);
-                getPrivateIdentifierEnvironment().classConstructor = factory.cloneNode(temp);
-                pendingPrivateStateAssignment = factory.createAssignment(temp, factory.getInternalName(node));
+                getClassLexicalEnvironment().superClassReference = temp;
+                return factory.updateExpressionWithTypeArguments(node, factory.createAssignment(temp, ts.visitNode(node.expression, visitor, ts.isExpression)), undefined);
+            }
+            return ts.visitEachChild(node, visitor, context);
+        }
+        function visitClassDeclaration(node) {
+            var facts = getClassFacts(node);
+            if (facts) {
+                getClassLexicalEnvironment().facts = facts;
+            }
+            if (facts & 8) {
+                enableSubstitutionForClassStaticThisOrSuperReference();
+            }
+            var staticProperties = ts.getStaticPropertiesAndClassStaticBlock(node);
+            var pendingClassReferenceAssignment;
+            if (facts & 2) {
+                var temp = factory.createTempVariable(hoistVariableDeclaration, true);
+                getClassLexicalEnvironment().classConstructor = factory.cloneNode(temp);
+                pendingClassReferenceAssignment = factory.createAssignment(temp, factory.getInternalName(node));
             }
             var extendsClauseElement = ts.getEffectiveBaseTypeNode(node);
-            var isDerivedClass = !!(extendsClauseElement && ts.skipOuterExpressions(extendsClauseElement.expression).kind !== 103);
+            var isDerivedClass = !!(extendsClauseElement && ts.skipOuterExpressions(extendsClauseElement.expression).kind !== 104);
             var statements = [
-                factory.updateClassDeclaration(node, undefined, node.modifiers, node.name, undefined, ts.visitNodes(node.heritageClauses, visitor, ts.isHeritageClause), transformClassMembers(node, isDerivedClass))
+                factory.updateClassDeclaration(node, undefined, node.modifiers, node.name, undefined, ts.visitNodes(node.heritageClauses, heritageClauseVisitor, ts.isHeritageClause), transformClassMembers(node, isDerivedClass))
             ];
-            if (pendingPrivateStateAssignment) {
-                getPendingExpressions().unshift(pendingPrivateStateAssignment);
+            if (pendingClassReferenceAssignment) {
+                getPendingExpressions().unshift(pendingClassReferenceAssignment);
             }
             if (ts.some(pendingExpressions)) {
                 statements.push(factory.createExpressionStatement(factory.inlineExpressions(pendingExpressions)));
             }
             if (ts.some(staticProperties)) {
-                addPropertyStatements(statements, staticProperties, factory.getInternalName(node));
+                addPropertyOrClassStaticBlockStatements(statements, staticProperties, factory.getInternalName(node));
             }
             return statements;
         }
         function visitClassExpression(node) {
-            if (!ts.forEach(node.members, doesClassElementNeedTransform)) {
-                return ts.visitEachChild(node, visitor, context);
+            var facts = getClassFacts(node);
+            if (facts) {
+                getClassLexicalEnvironment().facts = facts;
             }
-            var isDecoratedClassDeclaration = ts.isClassDeclaration(ts.getOriginalNode(node));
-            var staticProperties = ts.getProperties(node, false, true);
+            if (facts & 8) {
+                enableSubstitutionForClassStaticThisOrSuperReference();
+            }
+            var isDecoratedClassDeclaration = !!(facts & 1);
+            var staticPropertiesOrClassStaticBlocks = ts.getStaticPropertiesAndClassStaticBlock(node);
             var extendsClauseElement = ts.getEffectiveBaseTypeNode(node);
-            var isDerivedClass = !!(extendsClauseElement && ts.skipOuterExpressions(extendsClauseElement.expression).kind !== 103);
+            var isDerivedClass = !!(extendsClauseElement && ts.skipOuterExpressions(extendsClauseElement.expression).kind !== 104);
             var isClassWithConstructorReference = resolver.getNodeCheckFlags(node) & 16777216;
             var temp;
             function createClassTempVar() {
@@ -74018,20 +75646,20 @@
                 var requiresBlockScopedVar = classCheckFlags & 524288;
                 return factory.createTempVariable(requiresBlockScopedVar ? addBlockScopedVariable : hoistVariableDeclaration, !!isClassWithConstructorReference);
             }
-            if (shouldTransformPrivateElements && ts.some(node.members, function (m) { return ts.hasStaticModifier(m) && !!m.name && ts.isPrivateIdentifier(m.name); })) {
+            if (facts & 2) {
                 temp = createClassTempVar();
-                getPrivateIdentifierEnvironment().classConstructor = factory.cloneNode(temp);
+                getClassLexicalEnvironment().classConstructor = factory.cloneNode(temp);
             }
-            var classExpression = factory.updateClassExpression(node, ts.visitNodes(node.decorators, visitor, ts.isDecorator), node.modifiers, node.name, undefined, ts.visitNodes(node.heritageClauses, visitor, ts.isHeritageClause), transformClassMembers(node, isDerivedClass));
-            var hasTransformableStatics = ts.some(staticProperties, function (p) { return !!p.initializer || (shouldTransformPrivateElements && ts.isPrivateIdentifier(p.name)); });
+            var classExpression = factory.updateClassExpression(node, ts.visitNodes(node.decorators, visitor, ts.isDecorator), node.modifiers, node.name, undefined, ts.visitNodes(node.heritageClauses, heritageClauseVisitor, ts.isHeritageClause), transformClassMembers(node, isDerivedClass));
+            var hasTransformableStatics = ts.some(staticPropertiesOrClassStaticBlocks, function (p) { return ts.isClassStaticBlockDeclaration(p) || !!p.initializer || (shouldTransformPrivateElementsOrClassStaticBlocks && ts.isPrivateIdentifier(p.name)); });
             if (hasTransformableStatics || ts.some(pendingExpressions)) {
                 if (isDecoratedClassDeclaration) {
                     ts.Debug.assertIsDefined(pendingStatements, "Decorated classes transformed by TypeScript are expected to be within a variable declaration.");
                     if (pendingStatements && pendingExpressions && ts.some(pendingExpressions)) {
                         pendingStatements.push(factory.createExpressionStatement(factory.inlineExpressions(pendingExpressions)));
                     }
-                    if (pendingStatements && ts.some(staticProperties)) {
-                        addPropertyStatements(pendingStatements, staticProperties, factory.getInternalName(node));
+                    if (pendingStatements && ts.some(staticPropertiesOrClassStaticBlocks)) {
+                        addPropertyOrClassStaticBlockStatements(pendingStatements, staticPropertiesOrClassStaticBlocks, factory.getInternalName(node));
                     }
                     if (temp) {
                         return factory.inlineExpressions([factory.createAssignment(temp, classExpression), temp]);
@@ -74050,15 +75678,21 @@
                     ts.setEmitFlags(classExpression, 65536 | ts.getEmitFlags(classExpression));
                     expressions.push(ts.startOnNewLine(factory.createAssignment(temp, classExpression)));
                     ts.addRange(expressions, ts.map(pendingExpressions, ts.startOnNewLine));
-                    ts.addRange(expressions, generateInitializedPropertyExpressions(staticProperties, temp));
+                    ts.addRange(expressions, generateInitializedPropertyExpressionsOrClassStaticBlock(staticPropertiesOrClassStaticBlocks, temp));
                     expressions.push(ts.startOnNewLine(temp));
                     return factory.inlineExpressions(expressions);
                 }
             }
             return classExpression;
         }
+        function visitClassStaticBlockDeclaration(node) {
+            if (!shouldTransformPrivateElementsOrClassStaticBlocks) {
+                return ts.visitEachChild(node, classElementVisitor, context);
+            }
+            return undefined;
+        }
         function transformClassMembers(node, isDerivedClass) {
-            if (shouldTransformPrivateElements) {
+            if (shouldTransformPrivateElementsOrClassStaticBlocks) {
                 for (var _i = 0, _a = node.members; _i < _a.length; _i++) {
                     var member = _a[_i];
                     if (ts.isPrivateIdentifierClassElementDeclaration(member)) {
@@ -74083,13 +75717,13 @@
             getPendingExpressions().push(factory.createAssignment(weakSetName, factory.createNewExpression(factory.createIdentifier("WeakSet"), undefined, [])));
         }
         function isClassElementThatRequiresConstructorStatement(member) {
-            if (ts.hasStaticModifier(member) || ts.hasSyntacticModifier(ts.getOriginalNode(member), 128)) {
+            if (ts.isStatic(member) || ts.hasSyntacticModifier(ts.getOriginalNode(member), 128)) {
                 return false;
             }
             if (useDefineForClassFields) {
                 return languageVersion < 99;
             }
-            return ts.isInitializedProperty(member) || shouldTransformPrivateElements && ts.isPrivateIdentifierClassElementDeclaration(member);
+            return ts.isInitializedProperty(member) || shouldTransformPrivateElementsOrClassStaticBlocks && ts.isPrivateIdentifierClassElementDeclaration(member);
         }
         function transformConstructor(node, isDerivedClass) {
             var constructor = ts.visitNode(ts.getFirstConstructorWithBody(node), visitor, ts.isConstructorDeclaration);
@@ -74137,17 +75771,19 @@
             }
             var receiver = factory.createThis();
             addMethodStatements(statements, privateMethodsAndAccessors, receiver);
-            addPropertyStatements(statements, properties, receiver);
+            addPropertyOrClassStaticBlockStatements(statements, properties, receiver);
             if (constructor) {
                 ts.addRange(statements, ts.visitNodes(constructor.body.statements, visitor, ts.isStatement, indexOfFirstStatement));
             }
             statements = factory.mergeLexicalEnvironment(statements, endLexicalEnvironment());
             return ts.setTextRange(factory.createBlock(ts.setTextRange(factory.createNodeArray(statements), constructor ? constructor.body.statements : node.members), true), constructor ? constructor.body : undefined);
         }
-        function addPropertyStatements(statements, properties, receiver) {
+        function addPropertyOrClassStaticBlockStatements(statements, properties, receiver) {
             for (var _i = 0, properties_7 = properties; _i < properties_7.length; _i++) {
                 var property = properties_7[_i];
-                var expression = transformProperty(property, receiver);
+                var expression = ts.isClassStaticBlockDeclaration(property) ?
+                    transformClassStaticBlockDeclaration(property) :
+                    transformProperty(property, receiver);
                 if (!expression) {
                     continue;
                 }
@@ -74158,11 +75794,11 @@
                 statements.push(statement);
             }
         }
-        function generateInitializedPropertyExpressions(properties, receiver) {
+        function generateInitializedPropertyExpressionsOrClassStaticBlock(propertiesOrClassStaticBlocks, receiver) {
             var expressions = [];
-            for (var _i = 0, properties_8 = properties; _i < properties_8.length; _i++) {
-                var property = properties_8[_i];
-                var expression = transformProperty(property, receiver);
+            for (var _i = 0, propertiesOrClassStaticBlocks_1 = propertiesOrClassStaticBlocks; _i < propertiesOrClassStaticBlocks_1.length; _i++) {
+                var property = propertiesOrClassStaticBlocks_1[_i];
+                var expression = ts.isClassStaticBlockDeclaration(property) ? transformClassStaticBlockDeclaration(property) : transformProperty(property, receiver);
                 if (!expression) {
                     continue;
                 }
@@ -74175,12 +75811,26 @@
             return expressions;
         }
         function transformProperty(property, receiver) {
+            var savedCurrentStaticPropertyDeclarationOrStaticBlock = currentStaticPropertyDeclarationOrStaticBlock;
+            var transformed = transformPropertyWorker(property, receiver);
+            if (transformed && ts.hasStaticModifier(property) && (currentClassLexicalEnvironment === null || currentClassLexicalEnvironment === void 0 ? void 0 : currentClassLexicalEnvironment.facts)) {
+                ts.setOriginalNode(transformed, property);
+                ts.addEmitFlags(transformed, 2);
+                classLexicalEnvironmentMap.set(ts.getOriginalNodeId(transformed), currentClassLexicalEnvironment);
+            }
+            currentStaticPropertyDeclarationOrStaticBlock = savedCurrentStaticPropertyDeclarationOrStaticBlock;
+            return transformed;
+        }
+        function transformPropertyWorker(property, receiver) {
             var _a;
             var emitAssignment = !useDefineForClassFields;
             var propertyName = ts.isComputedPropertyName(property.name) && !ts.isSimpleInlineableExpression(property.name.expression)
                 ? factory.updateComputedPropertyName(property.name, factory.getGeneratedNameForNode(property.name))
                 : property.name;
-            if (shouldTransformPrivateElements && ts.isPrivateIdentifier(propertyName)) {
+            if (ts.hasStaticModifier(property)) {
+                currentStaticPropertyDeclarationOrStaticBlock = property;
+            }
+            if (shouldTransformPrivateElementsOrClassStaticBlocks && ts.isPrivateIdentifier(propertyName)) {
                 var privateIdentifierInfo = accessPrivateIdentifier(propertyName);
                 if (privateIdentifierInfo) {
                     if (privateIdentifierInfo.kind === "f") {
@@ -74224,18 +75874,94 @@
         function enableSubstitutionForClassAliases() {
             if ((enabledSubstitutions & 1) === 0) {
                 enabledSubstitutions |= 1;
-                context.enableSubstitution(78);
+                context.enableSubstitution(79);
                 classAliases = [];
             }
         }
+        function enableSubstitutionForClassStaticThisOrSuperReference() {
+            if ((enabledSubstitutions & 2) === 0) {
+                enabledSubstitutions |= 2;
+                context.enableSubstitution(108);
+                context.enableEmitNotification(254);
+                context.enableEmitNotification(211);
+                context.enableEmitNotification(169);
+                context.enableEmitNotification(170);
+                context.enableEmitNotification(171);
+                context.enableEmitNotification(167);
+                context.enableEmitNotification(165);
+                context.enableEmitNotification(160);
+            }
+        }
         function addMethodStatements(statements, methods, receiver) {
-            if (!shouldTransformPrivateElements || !ts.some(methods)) {
+            if (!shouldTransformPrivateElementsOrClassStaticBlocks || !ts.some(methods)) {
                 return;
             }
             var weakSetName = getPrivateIdentifierEnvironment().weakSetName;
             ts.Debug.assert(weakSetName, "weakSetName should be set in private identifier environment");
             statements.push(factory.createExpressionStatement(createPrivateInstanceMethodInitializer(receiver, weakSetName)));
         }
+        function visitInvalidSuperProperty(node) {
+            return ts.isPropertyAccessExpression(node) ?
+                factory.updatePropertyAccessExpression(node, factory.createVoidZero(), node.name) :
+                factory.updateElementAccessExpression(node, factory.createVoidZero(), ts.visitNode(node.argumentExpression, visitor, ts.isExpression));
+        }
+        function onEmitNode(hint, node, emitCallback) {
+            var original = ts.getOriginalNode(node);
+            if (original.id) {
+                var classLexicalEnvironment = classLexicalEnvironmentMap.get(original.id);
+                if (classLexicalEnvironment) {
+                    var savedClassLexicalEnvironment = currentClassLexicalEnvironment;
+                    var savedCurrentComputedPropertyNameClassLexicalEnvironment = currentComputedPropertyNameClassLexicalEnvironment;
+                    currentClassLexicalEnvironment = classLexicalEnvironment;
+                    currentComputedPropertyNameClassLexicalEnvironment = classLexicalEnvironment;
+                    previousOnEmitNode(hint, node, emitCallback);
+                    currentClassLexicalEnvironment = savedClassLexicalEnvironment;
+                    currentComputedPropertyNameClassLexicalEnvironment = savedCurrentComputedPropertyNameClassLexicalEnvironment;
+                    return;
+                }
+            }
+            switch (node.kind) {
+                case 211:
+                    if (ts.isArrowFunction(original) || ts.getEmitFlags(node) & 262144) {
+                        break;
+                    }
+                case 254:
+                case 169: {
+                    var savedClassLexicalEnvironment = currentClassLexicalEnvironment;
+                    var savedCurrentComputedPropertyNameClassLexicalEnvironment = currentComputedPropertyNameClassLexicalEnvironment;
+                    currentClassLexicalEnvironment = undefined;
+                    currentComputedPropertyNameClassLexicalEnvironment = undefined;
+                    previousOnEmitNode(hint, node, emitCallback);
+                    currentClassLexicalEnvironment = savedClassLexicalEnvironment;
+                    currentComputedPropertyNameClassLexicalEnvironment = savedCurrentComputedPropertyNameClassLexicalEnvironment;
+                    return;
+                }
+                case 170:
+                case 171:
+                case 167:
+                case 165: {
+                    var savedClassLexicalEnvironment = currentClassLexicalEnvironment;
+                    var savedCurrentComputedPropertyNameClassLexicalEnvironment = currentComputedPropertyNameClassLexicalEnvironment;
+                    currentComputedPropertyNameClassLexicalEnvironment = currentClassLexicalEnvironment;
+                    currentClassLexicalEnvironment = undefined;
+                    previousOnEmitNode(hint, node, emitCallback);
+                    currentClassLexicalEnvironment = savedClassLexicalEnvironment;
+                    currentComputedPropertyNameClassLexicalEnvironment = savedCurrentComputedPropertyNameClassLexicalEnvironment;
+                    return;
+                }
+                case 160: {
+                    var savedClassLexicalEnvironment = currentClassLexicalEnvironment;
+                    var savedCurrentComputedPropertyNameClassLexicalEnvironment = currentComputedPropertyNameClassLexicalEnvironment;
+                    currentClassLexicalEnvironment = currentComputedPropertyNameClassLexicalEnvironment;
+                    currentComputedPropertyNameClassLexicalEnvironment = undefined;
+                    previousOnEmitNode(hint, node, emitCallback);
+                    currentClassLexicalEnvironment = savedClassLexicalEnvironment;
+                    currentComputedPropertyNameClassLexicalEnvironment = savedCurrentComputedPropertyNameClassLexicalEnvironment;
+                    return;
+                }
+            }
+            previousOnEmitNode(hint, node, emitCallback);
+        }
         function onSubstituteNode(hint, node) {
             node = previousOnSubstituteNode(hint, node);
             if (hint === 1) {
@@ -74245,8 +75971,22 @@
         }
         function substituteExpression(node) {
             switch (node.kind) {
-                case 78:
+                case 79:
                     return substituteExpressionIdentifier(node);
+                case 108:
+                    return substituteThisExpression(node);
+            }
+            return node;
+        }
+        function substituteThisExpression(node) {
+            if (enabledSubstitutions & 2 && currentClassLexicalEnvironment) {
+                var facts = currentClassLexicalEnvironment.facts, classConstructor = currentClassLexicalEnvironment.classConstructor;
+                if (facts & 1) {
+                    return factory.createParenthesizedExpression(factory.createVoidZero());
+                }
+                if (classConstructor) {
+                    return ts.setTextRange(ts.setOriginalNode(factory.cloneNode(classConstructor), node), node);
+                }
             }
             return node;
         }
@@ -74289,21 +76029,28 @@
                 return (inlinable || ts.isIdentifier(innerExpression)) ? undefined : expression;
             }
         }
-        function startPrivateIdentifierEnvironment() {
-            privateIdentifierEnvironmentStack.push(currentPrivateIdentifierEnvironment);
-            currentPrivateIdentifierEnvironment = undefined;
+        function startClassLexicalEnvironment() {
+            classLexicalEnvironmentStack.push(currentClassLexicalEnvironment);
+            currentClassLexicalEnvironment = undefined;
         }
-        function endPrivateIdentifierEnvironment() {
-            currentPrivateIdentifierEnvironment = privateIdentifierEnvironmentStack.pop();
+        function endClassLexicalEnvironment() {
+            currentClassLexicalEnvironment = classLexicalEnvironmentStack.pop();
+        }
+        function getClassLexicalEnvironment() {
+            return currentClassLexicalEnvironment || (currentClassLexicalEnvironment = {
+                facts: 0,
+                classConstructor: undefined,
+                superClassReference: undefined,
+                privateIdentifierEnvironment: undefined,
+            });
         }
         function getPrivateIdentifierEnvironment() {
-            if (!currentPrivateIdentifierEnvironment) {
-                currentPrivateIdentifierEnvironment = {
-                    className: "",
-                    identifiers: new ts.Map()
-                };
-            }
-            return currentPrivateIdentifierEnvironment;
+            var lex = getClassLexicalEnvironment();
+            lex.privateIdentifierEnvironment || (lex.privateIdentifierEnvironment = {
+                className: "",
+                identifiers: new ts.Map()
+            });
+            return lex.privateIdentifierEnvironment;
         }
         function getPendingExpressions() {
             return pendingExpressions || (pendingExpressions = []);
@@ -74311,17 +76058,19 @@
         function addPrivateIdentifierToEnvironment(node) {
             var _a;
             var text = ts.getTextOfPropertyName(node.name);
-            var env = getPrivateIdentifierEnvironment();
-            var weakSetName = env.weakSetName, classConstructor = env.classConstructor;
+            var lex = getClassLexicalEnvironment();
+            var classConstructor = lex.classConstructor;
+            var privateEnv = getPrivateIdentifierEnvironment();
+            var weakSetName = privateEnv.weakSetName;
             var assignmentExpressions = [];
             var privateName = node.name.escapedText;
-            var previousInfo = env.identifiers.get(privateName);
+            var previousInfo = privateEnv.identifiers.get(privateName);
             var isValid = !isReservedPrivateName(node.name) && previousInfo === undefined;
             if (ts.hasStaticModifier(node)) {
                 ts.Debug.assert(classConstructor, "weakSetName should be set in private identifier environment");
                 if (ts.isPropertyDeclaration(node)) {
                     var variableName = createHoistedVariableForPrivateName(text, node);
-                    env.identifiers.set(privateName, {
+                    privateEnv.identifiers.set(privateName, {
                         kind: "f",
                         variableName: variableName,
                         brandCheckIdentifier: classConstructor,
@@ -74331,7 +76080,7 @@
                 }
                 else if (ts.isMethodDeclaration(node)) {
                     var functionName = createHoistedVariableForPrivateName(text, node);
-                    env.identifiers.set(privateName, {
+                    privateEnv.identifiers.set(privateName, {
                         kind: "m",
                         methodName: functionName,
                         brandCheckIdentifier: classConstructor,
@@ -74345,7 +76094,7 @@
                         previousInfo.getterName = getterName;
                     }
                     else {
-                        env.identifiers.set(privateName, {
+                        privateEnv.identifiers.set(privateName, {
                             kind: "a",
                             getterName: getterName,
                             setterName: undefined,
@@ -74361,7 +76110,7 @@
                         previousInfo.setterName = setterName;
                     }
                     else {
-                        env.identifiers.set(privateName, {
+                        privateEnv.identifiers.set(privateName, {
                             kind: "a",
                             getterName: undefined,
                             setterName: setterName,
@@ -74377,7 +76126,7 @@
             }
             else if (ts.isPropertyDeclaration(node)) {
                 var weakMapName = createHoistedVariableForPrivateName(text, node);
-                env.identifiers.set(privateName, {
+                privateEnv.identifiers.set(privateName, {
                     kind: "f",
                     brandCheckIdentifier: weakMapName,
                     isStatic: false,
@@ -74388,7 +76137,7 @@
             }
             else if (ts.isMethodDeclaration(node)) {
                 ts.Debug.assert(weakSetName, "weakSetName should be set in private identifier environment");
-                env.identifiers.set(privateName, {
+                privateEnv.identifiers.set(privateName, {
                     kind: "m",
                     methodName: createHoistedVariableForPrivateName(text, node),
                     brandCheckIdentifier: weakSetName,
@@ -74404,7 +76153,7 @@
                         previousInfo.getterName = getterName;
                     }
                     else {
-                        env.identifiers.set(privateName, {
+                        privateEnv.identifiers.set(privateName, {
                             kind: "a",
                             getterName: getterName,
                             setterName: undefined,
@@ -74420,7 +76169,7 @@
                         previousInfo.setterName = setterName;
                     }
                     else {
-                        env.identifiers.set(privateName, {
+                        privateEnv.identifiers.set(privateName, {
                             kind: "a",
                             getterName: undefined,
                             setterName: setterName,
@@ -74452,18 +76201,19 @@
             return createHoistedVariableForClass(privateName.substring(1), node.name);
         }
         function accessPrivateIdentifier(name) {
-            if (currentPrivateIdentifierEnvironment) {
-                var info = currentPrivateIdentifierEnvironment.identifiers.get(name.escapedText);
+            var _a;
+            if (currentClassLexicalEnvironment === null || currentClassLexicalEnvironment === void 0 ? void 0 : currentClassLexicalEnvironment.privateIdentifierEnvironment) {
+                var info = currentClassLexicalEnvironment.privateIdentifierEnvironment.identifiers.get(name.escapedText);
                 if (info) {
                     return info;
                 }
             }
-            for (var i = privateIdentifierEnvironmentStack.length - 1; i >= 0; --i) {
-                var env = privateIdentifierEnvironmentStack[i];
+            for (var i = classLexicalEnvironmentStack.length - 1; i >= 0; --i) {
+                var env = classLexicalEnvironmentStack[i];
                 if (!env) {
                     continue;
                 }
-                var info = env.identifiers.get(name.escapedText);
+                var info = (_a = env.privateIdentifierEnvironment) === null || _a === void 0 ? void 0 : _a.identifiers.get(name.escapedText);
                 if (info) {
                     return info;
                 }
@@ -74479,37 +76229,86 @@
             var receiver = node.expression;
             if (ts.isThisProperty(node) || ts.isSuperProperty(node) || !ts.isSimpleCopiableExpression(node.expression)) {
                 receiver = factory.createTempVariable(hoistVariableDeclaration, true);
-                getPendingExpressions().push(factory.createBinaryExpression(receiver, 62, node.expression));
+                getPendingExpressions().push(factory.createBinaryExpression(receiver, 63, ts.visitNode(node.expression, visitor, ts.isExpression)));
             }
-            return factory.createPropertyAccessExpression(factory.createParenthesizedExpression(factory.createObjectLiteralExpression([
-                factory.createSetAccessorDeclaration(undefined, undefined, "value", [factory.createParameterDeclaration(undefined, undefined, undefined, parameter, undefined, undefined, undefined)], factory.createBlock([factory.createExpressionStatement(createPrivateIdentifierAssignment(info, receiver, parameter, 62))]))
-            ])), "value");
+            return factory.createAssignmentTargetWrapper(parameter, createPrivateIdentifierAssignment(info, receiver, parameter, 63));
         }
         function visitArrayAssignmentTarget(node) {
             var target = ts.getTargetOfBindingOrAssignmentElement(node);
-            if (target && ts.isPrivateIdentifierPropertyAccessExpression(target)) {
-                var wrapped = wrapPrivateIdentifierForDestructuringTarget(target);
-                if (ts.isAssignmentExpression(node)) {
-                    return factory.updateBinaryExpression(node, wrapped, node.operatorToken, ts.visitNode(node.right, visitor, ts.isExpression));
+            if (target) {
+                var wrapped = void 0;
+                if (ts.isPrivateIdentifierPropertyAccessExpression(target)) {
+                    wrapped = wrapPrivateIdentifierForDestructuringTarget(target);
                 }
-                else if (ts.isSpreadElement(node)) {
-                    return factory.updateSpreadElement(node, wrapped);
+                else if (shouldTransformSuperInStaticInitializers &&
+                    ts.isSuperProperty(target) &&
+                    currentStaticPropertyDeclarationOrStaticBlock &&
+                    currentClassLexicalEnvironment) {
+                    var classConstructor = currentClassLexicalEnvironment.classConstructor, superClassReference = currentClassLexicalEnvironment.superClassReference, facts = currentClassLexicalEnvironment.facts;
+                    if (facts & 1) {
+                        wrapped = visitInvalidSuperProperty(target);
+                    }
+                    else if (classConstructor && superClassReference) {
+                        var name = ts.isElementAccessExpression(target) ? ts.visitNode(target.argumentExpression, visitor, ts.isExpression) :
+                            ts.isIdentifier(target.name) ? factory.createStringLiteralFromNode(target.name) :
+                                undefined;
+                        if (name) {
+                            var temp = factory.createTempVariable(undefined);
+                            wrapped = factory.createAssignmentTargetWrapper(temp, factory.createReflectSetCall(superClassReference, name, temp, classConstructor));
+                        }
+                    }
                 }
-                else {
-                    return wrapped;
+                if (wrapped) {
+                    if (ts.isAssignmentExpression(node)) {
+                        return factory.updateBinaryExpression(node, wrapped, node.operatorToken, ts.visitNode(node.right, visitor, ts.isExpression));
+                    }
+                    else if (ts.isSpreadElement(node)) {
+                        return factory.updateSpreadElement(node, wrapped);
+                    }
+                    else {
+                        return wrapped;
+                    }
                 }
             }
             return ts.visitNode(node, visitorDestructuringTarget);
         }
         function visitObjectAssignmentTarget(node) {
-            if (ts.isPropertyAssignment(node)) {
+            if (ts.isObjectBindingOrAssignmentElement(node) && !ts.isShorthandPropertyAssignment(node)) {
                 var target = ts.getTargetOfBindingOrAssignmentElement(node);
-                if (target && ts.isPrivateIdentifierPropertyAccessExpression(target)) {
-                    var initializer = ts.getInitializerOfBindingOrAssignmentElement(node);
-                    var wrapped = wrapPrivateIdentifierForDestructuringTarget(target);
-                    return factory.updatePropertyAssignment(node, ts.visitNode(node.name, visitor), initializer ? factory.createAssignment(wrapped, ts.visitNode(initializer, visitor)) : wrapped);
+                var wrapped = void 0;
+                if (target) {
+                    if (ts.isPrivateIdentifierPropertyAccessExpression(target)) {
+                        wrapped = wrapPrivateIdentifierForDestructuringTarget(target);
+                    }
+                    else if (shouldTransformSuperInStaticInitializers &&
+                        ts.isSuperProperty(target) &&
+                        currentStaticPropertyDeclarationOrStaticBlock &&
+                        currentClassLexicalEnvironment) {
+                        var classConstructor = currentClassLexicalEnvironment.classConstructor, superClassReference = currentClassLexicalEnvironment.superClassReference, facts = currentClassLexicalEnvironment.facts;
+                        if (facts & 1) {
+                            wrapped = visitInvalidSuperProperty(target);
+                        }
+                        else if (classConstructor && superClassReference) {
+                            var name = ts.isElementAccessExpression(target) ? ts.visitNode(target.argumentExpression, visitor, ts.isExpression) :
+                                ts.isIdentifier(target.name) ? factory.createStringLiteralFromNode(target.name) :
+                                    undefined;
+                            if (name) {
+                                var temp = factory.createTempVariable(undefined);
+                                wrapped = factory.createAssignmentTargetWrapper(temp, factory.createReflectSetCall(superClassReference, name, temp, classConstructor));
+                            }
+                        }
+                    }
                 }
-                return factory.updatePropertyAssignment(node, ts.visitNode(node.name, visitor), ts.visitNode(node.initializer, visitorDestructuringTarget));
+                if (ts.isPropertyAssignment(node)) {
+                    var initializer = ts.getInitializerOfBindingOrAssignmentElement(node);
+                    return factory.updatePropertyAssignment(node, ts.visitNode(node.name, visitor, ts.isPropertyName), wrapped ?
+                        initializer ? factory.createAssignment(wrapped, ts.visitNode(initializer, visitor)) : wrapped :
+                        ts.visitNode(node.initializer, visitorDestructuringTarget, ts.isExpression));
+                }
+                if (ts.isSpreadAssignment(node)) {
+                    return factory.updateSpreadAssignment(node, wrapped || ts.visitNode(node.expression, visitorDestructuringTarget, ts.isExpression));
+                }
+                ts.Debug.assert(wrapped === undefined, "Should not have generated a wrapped target");
             }
             return ts.visitNode(node, visitor);
         }
@@ -74597,33 +76396,33 @@
                 return node;
             }
             switch (node.kind) {
-                case 129:
+                case 130:
                     return undefined;
-                case 214:
+                case 216:
                     return visitAwaitExpression(node);
-                case 166:
+                case 167:
                     return doWithContext(1 | 2, visitMethodDeclaration, node);
-                case 252:
+                case 254:
                     return doWithContext(1 | 2, visitFunctionDeclaration, node);
-                case 209:
+                case 211:
                     return doWithContext(1 | 2, visitFunctionExpression, node);
-                case 210:
+                case 212:
                     return doWithContext(1, visitArrowFunction, node);
-                case 202:
-                    if (capturedSuperProperties && ts.isPropertyAccessExpression(node) && node.expression.kind === 105) {
+                case 204:
+                    if (capturedSuperProperties && ts.isPropertyAccessExpression(node) && node.expression.kind === 106) {
                         capturedSuperProperties.add(node.name.escapedText);
                     }
                     return ts.visitEachChild(node, visitor, context);
-                case 203:
-                    if (capturedSuperProperties && node.expression.kind === 105) {
+                case 205:
+                    if (capturedSuperProperties && node.expression.kind === 106) {
                         hasSuperElementAccess = true;
                     }
                     return ts.visitEachChild(node, visitor, context);
-                case 168:
+                case 170:
+                case 171:
                 case 169:
-                case 167:
-                case 253:
-                case 222:
+                case 255:
+                case 224:
                     return doWithContext(1 | 2, visitDefault, node);
                 default:
                     return ts.visitEachChild(node, visitor, context);
@@ -74632,27 +76431,27 @@
         function asyncBodyVisitor(node) {
             if (ts.isNodeWithPossibleHoistedDeclaration(node)) {
                 switch (node.kind) {
-                    case 233:
-                        return visitVariableStatementInAsyncBody(node);
-                    case 238:
-                        return visitForStatementInAsyncBody(node);
-                    case 239:
-                        return visitForInStatementInAsyncBody(node);
-                    case 240:
-                        return visitForOfStatementInAsyncBody(node);
-                    case 288:
-                        return visitCatchClauseInAsyncBody(node);
-                    case 231:
-                    case 245:
-                    case 259:
-                    case 285:
-                    case 286:
-                    case 248:
-                    case 236:
-                    case 237:
                     case 235:
-                    case 244:
+                        return visitVariableStatementInAsyncBody(node);
+                    case 240:
+                        return visitForStatementInAsyncBody(node);
+                    case 241:
+                        return visitForInStatementInAsyncBody(node);
+                    case 242:
+                        return visitForOfStatementInAsyncBody(node);
+                    case 290:
+                        return visitCatchClauseInAsyncBody(node);
+                    case 233:
+                    case 247:
+                    case 261:
+                    case 287:
+                    case 288:
+                    case 250:
+                    case 238:
+                    case 239:
+                    case 237:
                     case 246:
+                    case 248:
                         return ts.visitEachChild(node, asyncBodyVisitor, context);
                     default:
                         return ts.Debug.assertNever(node, "Unhandled node.");
@@ -74804,7 +76603,7 @@
             var original = ts.getOriginalNode(node, ts.isFunctionLike);
             var nodeType = original.type;
             var promiseConstructor = languageVersion < 2 ? getPromiseConstructor(nodeType) : undefined;
-            var isArrowFunction = node.kind === 210;
+            var isArrowFunction = node.kind === 212;
             var hasLexicalArguments = (resolver.getNodeCheckFlags(node) & 8192) !== 0;
             var savedEnclosingFunctionParameterNames = enclosingFunctionParameterNames;
             enclosingFunctionParameterNames = new ts.Set();
@@ -74885,15 +76684,15 @@
         function enableSubstitutionForAsyncMethodsWithSuper() {
             if ((enabledSubstitutions & 1) === 0) {
                 enabledSubstitutions |= 1;
+                context.enableSubstitution(206);
                 context.enableSubstitution(204);
-                context.enableSubstitution(202);
-                context.enableSubstitution(203);
-                context.enableEmitNotification(253);
-                context.enableEmitNotification(166);
-                context.enableEmitNotification(168);
-                context.enableEmitNotification(169);
+                context.enableSubstitution(205);
+                context.enableEmitNotification(255);
                 context.enableEmitNotification(167);
-                context.enableEmitNotification(233);
+                context.enableEmitNotification(170);
+                context.enableEmitNotification(171);
+                context.enableEmitNotification(169);
+                context.enableEmitNotification(235);
             }
         }
         function onEmitNode(hint, node, emitCallback) {
@@ -74925,23 +76724,23 @@
         }
         function substituteExpression(node) {
             switch (node.kind) {
-                case 202:
-                    return substitutePropertyAccessExpression(node);
-                case 203:
-                    return substituteElementAccessExpression(node);
                 case 204:
+                    return substitutePropertyAccessExpression(node);
+                case 205:
+                    return substituteElementAccessExpression(node);
+                case 206:
                     return substituteCallExpression(node);
             }
             return node;
         }
         function substitutePropertyAccessExpression(node) {
-            if (node.expression.kind === 105) {
+            if (node.expression.kind === 106) {
                 return ts.setTextRange(factory.createPropertyAccessExpression(factory.createUniqueName("_super", 16 | 32), node.name), node);
             }
             return node;
         }
         function substituteElementAccessExpression(node) {
-            if (node.expression.kind === 105) {
+            if (node.expression.kind === 106) {
                 return createSuperElementAccessInAsyncMethod(node.argumentExpression, node);
             }
             return node;
@@ -74954,17 +76753,17 @@
                     : substituteElementAccessExpression(expression);
                 return factory.createCallExpression(factory.createPropertyAccessExpression(argumentExpression, "call"), undefined, __spreadArray([
                     factory.createThis()
-                ], node.arguments));
+                ], node.arguments, true));
             }
             return node;
         }
         function isSuperContainer(node) {
             var kind = node.kind;
-            return kind === 253
+            return kind === 255
+                || kind === 169
                 || kind === 167
-                || kind === 166
-                || kind === 168
-                || kind === 169;
+                || kind === 170
+                || kind === 171;
         }
         function createSuperElementAccessInAsyncMethod(argumentExpression, location) {
             if (enclosingSuperContainerFlags & 4096) {
@@ -75053,7 +76852,7 @@
             return visitorWorker(node, true);
         }
         function visitorNoAsyncModifier(node) {
-            if (node.kind === 129) {
+            if (node.kind === 130) {
                 return undefined;
             }
             return node;
@@ -75075,70 +76874,70 @@
                 return node;
             }
             switch (node.kind) {
-                case 214:
+                case 216:
                     return visitAwaitExpression(node);
-                case 220:
+                case 222:
                     return visitYieldExpression(node);
-                case 243:
+                case 245:
                     return visitReturnStatement(node);
-                case 246:
+                case 248:
                     return visitLabeledStatement(node);
-                case 201:
+                case 203:
                     return visitObjectLiteralExpression(node);
-                case 217:
+                case 219:
                     return visitBinaryExpression(node, expressionResultIsUnused);
-                case 341:
+                case 346:
                     return visitCommaListExpression(node, expressionResultIsUnused);
-                case 288:
+                case 290:
                     return visitCatchClause(node);
-                case 233:
+                case 235:
                     return visitVariableStatement(node);
-                case 250:
-                    return visitVariableDeclaration(node);
-                case 236:
-                case 237:
-                case 239:
-                    return doWithHierarchyFacts(visitDefault, node, 0, 2);
-                case 240:
-                    return visitForOfStatement(node, undefined);
-                case 238:
-                    return doWithHierarchyFacts(visitForStatement, node, 0, 2);
-                case 213:
-                    return visitVoidExpression(node);
-                case 167:
-                    return doWithHierarchyFacts(visitConstructorDeclaration, node, 2, 1);
-                case 166:
-                    return doWithHierarchyFacts(visitMethodDeclaration, node, 2, 1);
-                case 168:
-                    return doWithHierarchyFacts(visitGetAccessorDeclaration, node, 2, 1);
-                case 169:
-                    return doWithHierarchyFacts(visitSetAccessorDeclaration, node, 2, 1);
                 case 252:
+                    return visitVariableDeclaration(node);
+                case 238:
+                case 239:
+                case 241:
+                    return doWithHierarchyFacts(visitDefault, node, 0, 2);
+                case 242:
+                    return visitForOfStatement(node, undefined);
+                case 240:
+                    return doWithHierarchyFacts(visitForStatement, node, 0, 2);
+                case 215:
+                    return visitVoidExpression(node);
+                case 169:
+                    return doWithHierarchyFacts(visitConstructorDeclaration, node, 2, 1);
+                case 167:
+                    return doWithHierarchyFacts(visitMethodDeclaration, node, 2, 1);
+                case 170:
+                    return doWithHierarchyFacts(visitGetAccessorDeclaration, node, 2, 1);
+                case 171:
+                    return doWithHierarchyFacts(visitSetAccessorDeclaration, node, 2, 1);
+                case 254:
                     return doWithHierarchyFacts(visitFunctionDeclaration, node, 2, 1);
-                case 209:
+                case 211:
                     return doWithHierarchyFacts(visitFunctionExpression, node, 2, 1);
-                case 210:
+                case 212:
                     return doWithHierarchyFacts(visitArrowFunction, node, 2, 0);
-                case 161:
+                case 162:
                     return visitParameter(node);
-                case 234:
+                case 236:
                     return visitExpressionStatement(node);
-                case 208:
+                case 210:
                     return visitParenthesizedExpression(node, expressionResultIsUnused);
-                case 206:
+                case 208:
                     return visitTaggedTemplateExpression(node);
-                case 202:
-                    if (capturedSuperProperties && ts.isPropertyAccessExpression(node) && node.expression.kind === 105) {
+                case 204:
+                    if (capturedSuperProperties && ts.isPropertyAccessExpression(node) && node.expression.kind === 106) {
                         capturedSuperProperties.add(node.name.escapedText);
                     }
                     return ts.visitEachChild(node, visitor, context);
-                case 203:
-                    if (capturedSuperProperties && node.expression.kind === 105) {
+                case 205:
+                    if (capturedSuperProperties && node.expression.kind === 106) {
                         hasSuperElementAccess = true;
                     }
                     return ts.visitEachChild(node, visitor, context);
-                case 253:
-                case 222:
+                case 255:
+                case 224:
                     return doWithHierarchyFacts(visitDefault, node, 2, 1);
                 default:
                     return ts.visitEachChild(node, visitor, context);
@@ -75171,7 +76970,7 @@
         function visitLabeledStatement(node) {
             if (enclosingFunctionFlags & 2) {
                 var statement = ts.unwrapInnermostStatementOfLabel(node);
-                if (statement.kind === 240 && statement.awaitModifier) {
+                if (statement.kind === 242 && statement.awaitModifier) {
                     return visitForOfStatement(statement, node);
                 }
                 return factory.restoreEnclosingLabel(ts.visitNode(statement, visitor, ts.isStatement, factory.liftToBlock), node);
@@ -75183,7 +76982,7 @@
             var objects = [];
             for (var _i = 0, elements_4 = elements; _i < elements_4.length; _i++) {
                 var e = elements_4[_i];
-                if (e.kind === 291) {
+                if (e.kind === 293) {
                     if (chunkObject) {
                         objects.push(factory.createObjectLiteralExpression(chunkObject));
                         chunkObject = undefined;
@@ -75192,7 +76991,7 @@
                     objects.push(ts.visitNode(target, visitor, ts.isExpression));
                 }
                 else {
-                    chunkObject = ts.append(chunkObject, e.kind === 289
+                    chunkObject = ts.append(chunkObject, e.kind === 291
                         ? factory.createPropertyAssignment(e.name, ts.visitNode(e.initializer, visitor, ts.isExpression))
                         : ts.visitNode(e, visitor, ts.isObjectLiteralElementLike));
                 }
@@ -75205,7 +77004,7 @@
         function visitObjectLiteralExpression(node) {
             if (node.transformFlags & 32768) {
                 var objects = chunkObjectLiteralElements(node.properties);
-                if (objects.length && objects[0].kind !== 201) {
+                if (objects.length && objects[0].kind !== 203) {
                     objects.unshift(factory.createObjectLiteralExpression());
                 }
                 var expression = objects[0];
@@ -75279,7 +77078,7 @@
                 if (ts.some(visitedBindings)) {
                     block = factory.updateBlock(block, __spreadArray([
                         factory.createVariableStatement(undefined, visitedBindings)
-                    ], block.statements));
+                    ], block.statements, true));
                 }
                 return factory.updateCatchClause(node, factory.updateVariableDeclaration(node.variableDeclaration, name, undefined, undefined, undefined), block);
             }
@@ -75549,15 +77348,15 @@
         function enableSubstitutionForAsyncMethodsWithSuper() {
             if ((enabledSubstitutions & 1) === 0) {
                 enabledSubstitutions |= 1;
+                context.enableSubstitution(206);
                 context.enableSubstitution(204);
-                context.enableSubstitution(202);
-                context.enableSubstitution(203);
-                context.enableEmitNotification(253);
-                context.enableEmitNotification(166);
-                context.enableEmitNotification(168);
-                context.enableEmitNotification(169);
+                context.enableSubstitution(205);
+                context.enableEmitNotification(255);
                 context.enableEmitNotification(167);
-                context.enableEmitNotification(233);
+                context.enableEmitNotification(170);
+                context.enableEmitNotification(171);
+                context.enableEmitNotification(169);
+                context.enableEmitNotification(235);
             }
         }
         function onEmitNode(hint, node, emitCallback) {
@@ -75589,23 +77388,23 @@
         }
         function substituteExpression(node) {
             switch (node.kind) {
-                case 202:
-                    return substitutePropertyAccessExpression(node);
-                case 203:
-                    return substituteElementAccessExpression(node);
                 case 204:
+                    return substitutePropertyAccessExpression(node);
+                case 205:
+                    return substituteElementAccessExpression(node);
+                case 206:
                     return substituteCallExpression(node);
             }
             return node;
         }
         function substitutePropertyAccessExpression(node) {
-            if (node.expression.kind === 105) {
+            if (node.expression.kind === 106) {
                 return ts.setTextRange(factory.createPropertyAccessExpression(factory.createUniqueName("_super", 16 | 32), node.name), node);
             }
             return node;
         }
         function substituteElementAccessExpression(node) {
-            if (node.expression.kind === 105) {
+            if (node.expression.kind === 106) {
                 return createSuperElementAccessInAsyncMethod(node.argumentExpression, node);
             }
             return node;
@@ -75618,17 +77417,17 @@
                     : substituteElementAccessExpression(expression);
                 return factory.createCallExpression(factory.createPropertyAccessExpression(argumentExpression, "call"), undefined, __spreadArray([
                     factory.createThis()
-                ], node.arguments));
+                ], node.arguments, true));
             }
             return node;
         }
         function isSuperContainer(node) {
             var kind = node.kind;
-            return kind === 253
+            return kind === 255
+                || kind === 169
                 || kind === 167
-                || kind === 166
-                || kind === 168
-                || kind === 169;
+                || kind === 170
+                || kind === 171;
         }
         function createSuperElementAccessInAsyncMethod(argumentExpression, location) {
             if (enclosingSuperContainerFlags & 4096) {
@@ -75657,7 +77456,7 @@
                 return node;
             }
             switch (node.kind) {
-                case 288:
+                case 290:
                     return visitCatchClause(node);
                 default:
                     return ts.visitEachChild(node, visitor, context);
@@ -75688,25 +77487,25 @@
                 return node;
             }
             switch (node.kind) {
-                case 204: {
+                case 206: {
                     var updated = visitNonOptionalCallExpression(node, false);
                     ts.Debug.assertNotNode(updated, ts.isSyntheticReference);
                     return updated;
                 }
-                case 202:
-                case 203:
+                case 204:
+                case 205:
                     if (ts.isOptionalChain(node)) {
                         var updated = visitOptionalExpression(node, false, false);
                         ts.Debug.assertNotNode(updated, ts.isSyntheticReference);
                         return updated;
                     }
                     return ts.visitEachChild(node, visitor, context);
-                case 217:
+                case 219:
                     if (node.operatorToken.kind === 60) {
                         return transformNullishCoalescingExpression(node);
                     }
                     return ts.visitEachChild(node, visitor, context);
-                case 211:
+                case 213:
                     return visitDeleteExpression(node);
                 default:
                     return ts.visitEachChild(node, visitor, context);
@@ -75745,7 +77544,7 @@
                     thisArg = expression;
                 }
             }
-            expression = node.kind === 202
+            expression = node.kind === 204
                 ? factory.updatePropertyAccessExpression(node, expression, ts.visitNode(node.name, visitor, ts.isIdentifier))
                 : factory.updateElementAccessExpression(node, expression, ts.visitNode(node.argumentExpression, visitor, ts.isExpression));
             return thisArg ? factory.createSyntheticReferenceExpression(expression, thisArg) : expression;
@@ -75766,10 +77565,10 @@
         }
         function visitNonOptionalExpression(node, captureThisArg, isDelete) {
             switch (node.kind) {
-                case 208: return visitNonOptionalParenthesizedExpression(node, captureThisArg, isDelete);
-                case 202:
-                case 203: return visitNonOptionalPropertyOrElementAccessExpression(node, captureThisArg, isDelete);
-                case 204: return visitNonOptionalCallExpression(node, captureThisArg);
+                case 210: return visitNonOptionalParenthesizedExpression(node, captureThisArg, isDelete);
+                case 204:
+                case 205: return visitNonOptionalPropertyOrElementAccessExpression(node, captureThisArg, isDelete);
+                case 206: return visitNonOptionalCallExpression(node, captureThisArg);
                 default: return ts.visitNode(node, visitor, ts.isExpression);
             }
         }
@@ -75788,8 +77587,8 @@
             for (var i = 0; i < chain.length; i++) {
                 var segment = chain[i];
                 switch (segment.kind) {
-                    case 202:
-                    case 203:
+                    case 204:
+                    case 205:
                         if (i === chain.length - 1 && captureThisArg) {
                             if (!ts.isSimpleCopiableExpression(rightExpression)) {
                                 thisArg = factory.createTempVariable(hoistVariableDeclaration);
@@ -75799,13 +77598,13 @@
                                 thisArg = rightExpression;
                             }
                         }
-                        rightExpression = segment.kind === 202
+                        rightExpression = segment.kind === 204
                             ? factory.createPropertyAccessExpression(rightExpression, ts.visitNode(segment.name, visitor, ts.isIdentifier))
                             : factory.createElementAccessExpression(rightExpression, ts.visitNode(segment.argumentExpression, visitor, ts.isExpression));
                         break;
-                    case 204:
+                    case 206:
                         if (i === 0 && leftThisArg) {
-                            rightExpression = factory.createFunctionCallCall(rightExpression, leftThisArg.kind === 105 ? factory.createThis() : leftThisArg, ts.visitNodes(segment.arguments, visitor, ts.isExpression));
+                            rightExpression = factory.createFunctionCallCall(rightExpression, leftThisArg.kind === 106 ? factory.createThis() : leftThisArg, ts.visitNodes(segment.arguments, visitor, ts.isExpression));
                         }
                         else {
                             rightExpression = factory.createCallExpression(rightExpression, undefined, ts.visitNodes(segment.arguments, visitor, ts.isExpression));
@@ -75856,7 +77655,7 @@
                 return node;
             }
             switch (node.kind) {
-                case 217:
+                case 219:
                     var binaryExpression = node;
                     if (ts.isLogicalOrCoalescingAssignmentExpression(binaryExpression)) {
                         return transformLogicalAssignment(binaryExpression);
@@ -76012,13 +77811,13 @@
         }
         function visitorWorker(node) {
             switch (node.kind) {
-                case 274:
+                case 276:
                     return visitJsxElement(node, false);
-                case 275:
+                case 277:
                     return visitJsxSelfClosingElement(node, false);
-                case 278:
+                case 280:
                     return visitJsxFragment(node, false);
-                case 284:
+                case 286:
                     return visitJsxExpression(node);
                 default:
                     return ts.visitEachChild(node, visitor, context);
@@ -76028,13 +77827,13 @@
             switch (node.kind) {
                 case 11:
                     return visitJsxText(node);
-                case 284:
+                case 286:
                     return visitJsxExpression(node);
-                case 274:
+                case 276:
                     return visitJsxElement(node, true);
-                case 275:
+                case 277:
                     return visitJsxSelfClosingElement(node, true);
-                case 278:
+                case 280:
                     return visitJsxFragment(node, true);
                 default:
                     return ts.Debug.failBadSyntaxKind(node);
@@ -76071,9 +77870,9 @@
         function convertJsxChildrenToChildrenPropObject(children) {
             var nonWhitespaceChildren = ts.getSemanticJsxChildren(children);
             if (ts.length(nonWhitespaceChildren) === 1) {
-                var result_14 = transformJsxChildToExpression(nonWhitespaceChildren[0]);
-                return result_14 && factory.createObjectLiteralExpression([
-                    factory.createPropertyAssignment("children", result_14)
+                var result_13 = transformJsxChildToExpression(nonWhitespaceChildren[0]);
+                return result_13 && factory.createObjectLiteralExpression([
+                    factory.createPropertyAssignment("children", result_13)
                 ]);
             }
             var result = ts.mapDefined(children, transformJsxChildToExpression);
@@ -76203,7 +78002,7 @@
                 var literal = factory.createStringLiteral(tryDecodeEntities(node.text) || node.text, singleQuote);
                 return ts.setTextRange(literal, node);
             }
-            else if (node.kind === 284) {
+            else if (node.kind === 286) {
                 if (node.expression === undefined) {
                     return factory.createTrue();
                 }
@@ -76263,7 +78062,7 @@
             return decoded === text ? undefined : decoded;
         }
         function getTagName(node) {
-            if (node.kind === 274) {
+            if (node.kind === 276) {
                 return getTagName(node.openingElement);
             }
             else {
@@ -76563,7 +78362,7 @@
                 return node;
             }
             switch (node.kind) {
-                case 217:
+                case 219:
                     return visitBinaryExpression(node);
                 default:
                     return ts.visitEachChild(node, visitor, context);
@@ -76571,7 +78370,7 @@
         }
         function visitBinaryExpression(node) {
             switch (node.operatorToken.kind) {
-                case 66:
+                case 67:
                     return visitExponentiationAssignmentExpression(node);
                 case 42:
                     return visitExponentiationExpression(node);
@@ -76611,6 +78410,9 @@
 })(ts || (ts = {}));
 var ts;
 (function (ts) {
+    function createSpreadSegment(kind, expression) {
+        return { kind: kind, expression: expression };
+    }
     function transformES2015(context) {
         var factory = context.factory, emitHelpers = context.getEmitHelperFactory, startLexicalEnvironment = context.startLexicalEnvironment, resumeLexicalEnvironment = context.resumeLexicalEnvironment, endLexicalEnvironment = context.endLexicalEnvironment, hoistVariableDeclaration = context.hoistVariableDeclaration;
         var compilerOptions = context.getCompilerOptions();
@@ -76645,15 +78447,15 @@
         }
         function enterSubtree(excludeFacts, includeFacts) {
             var ancestorFacts = hierarchyFacts;
-            hierarchyFacts = (hierarchyFacts & ~excludeFacts | includeFacts) & 16383;
+            hierarchyFacts = (hierarchyFacts & ~excludeFacts | includeFacts) & 32767;
             return ancestorFacts;
         }
         function exitSubtree(ancestorFacts, excludeFacts, includeFacts) {
-            hierarchyFacts = (hierarchyFacts & ~excludeFacts | includeFacts) & -16384 | ancestorFacts;
+            hierarchyFacts = (hierarchyFacts & ~excludeFacts | includeFacts) & -32768 | ancestorFacts;
         }
         function isReturnVoidStatementInConstructorWithCapturedSuper(node) {
             return (hierarchyFacts & 8192) !== 0
-                && node.kind === 243
+                && node.kind === 245
                 && !node.expression;
         }
         function isOrMayContainReturnCompletion(node) {
@@ -76684,75 +78486,88 @@
         function visitorWithUnusedExpressionResult(node) {
             return shouldVisitNode(node) ? visitorWorker(node, true) : node;
         }
+        function classWrapperStatementVisitor(node) {
+            if (shouldVisitNode(node)) {
+                var original = ts.getOriginalNode(node);
+                if (ts.isPropertyDeclaration(original) && ts.hasStaticModifier(original)) {
+                    var ancestorFacts = enterSubtree(32670, 16449);
+                    var result = visitorWorker(node, false);
+                    exitSubtree(ancestorFacts, 98304, 0);
+                    return result;
+                }
+                return visitorWorker(node, false);
+            }
+            return node;
+        }
         function callExpressionVisitor(node) {
-            if (node.kind === 105) {
+            if (node.kind === 106) {
                 return visitSuperKeyword(true);
             }
             return visitor(node);
         }
         function visitorWorker(node, expressionResultIsUnused) {
             switch (node.kind) {
-                case 123:
+                case 124:
                     return undefined;
-                case 253:
+                case 255:
                     return visitClassDeclaration(node);
-                case 222:
+                case 224:
                     return visitClassExpression(node);
-                case 161:
+                case 162:
                     return visitParameter(node);
-                case 252:
+                case 254:
                     return visitFunctionDeclaration(node);
-                case 210:
+                case 212:
                     return visitArrowFunction(node);
-                case 209:
+                case 211:
                     return visitFunctionExpression(node);
-                case 250:
+                case 252:
                     return visitVariableDeclaration(node);
-                case 78:
+                case 79:
                     return visitIdentifier(node);
-                case 251:
+                case 253:
                     return visitVariableDeclarationList(node);
-                case 245:
+                case 247:
                     return visitSwitchStatement(node);
-                case 259:
+                case 261:
                     return visitCaseBlock(node);
-                case 231:
+                case 233:
                     return visitBlock(node, false);
-                case 242:
-                case 241:
+                case 244:
+                case 243:
                     return visitBreakOrContinueStatement(node);
-                case 246:
+                case 248:
                     return visitLabeledStatement(node);
-                case 236:
-                case 237:
-                    return visitDoOrWhileStatement(node, undefined);
                 case 238:
-                    return visitForStatement(node, undefined);
                 case 239:
-                    return visitForInStatement(node, undefined);
+                    return visitDoOrWhileStatement(node, undefined);
                 case 240:
+                    return visitForStatement(node, undefined);
+                case 241:
+                    return visitForInStatement(node, undefined);
+                case 242:
                     return visitForOfStatement(node, undefined);
-                case 234:
+                case 236:
                     return visitExpressionStatement(node);
-                case 201:
+                case 203:
                     return visitObjectLiteralExpression(node);
-                case 288:
-                    return visitCatchClause(node);
                 case 290:
+                    return visitCatchClause(node);
+                case 292:
                     return visitShorthandPropertyAssignment(node);
-                case 159:
+                case 160:
                     return visitComputedPropertyName(node);
-                case 200:
+                case 202:
                     return visitArrayLiteralExpression(node);
-                case 204:
+                case 206:
                     return visitCallExpression(node);
-                case 205:
+                case 207:
                     return visitNewExpression(node);
-                case 208:
+                case 210:
                     return visitParenthesizedExpression(node, expressionResultIsUnused);
-                case 217:
+                case 219:
                     return visitBinaryExpression(node, expressionResultIsUnused);
-                case 341:
+                case 346:
                     return visitCommaListExpression(node, expressionResultIsUnused);
                 case 14:
                 case 15:
@@ -76763,30 +78578,30 @@
                     return visitStringLiteral(node);
                 case 8:
                     return visitNumericLiteral(node);
-                case 206:
+                case 208:
                     return visitTaggedTemplateExpression(node);
-                case 219:
-                    return visitTemplateExpression(node);
-                case 220:
-                    return visitYieldExpression(node);
                 case 221:
+                    return visitTemplateExpression(node);
+                case 222:
+                    return visitYieldExpression(node);
+                case 223:
                     return visitSpreadElement(node);
-                case 105:
+                case 106:
                     return visitSuperKeyword(false);
-                case 107:
+                case 108:
                     return visitThisKeyword(node);
-                case 227:
+                case 229:
                     return visitMetaProperty(node);
-                case 166:
+                case 167:
                     return visitMethodDeclaration(node);
-                case 168:
-                case 169:
+                case 170:
+                case 171:
                     return visitAccessorDeclaration(node);
-                case 233:
+                case 235:
                     return visitVariableStatement(node);
-                case 243:
+                case 245:
                     return visitReturnStatement(node);
-                case 213:
+                case 215:
                     return visitVoidExpression(node);
                 default:
                     return ts.visitEachChild(node, visitor, context);
@@ -76844,8 +78659,8 @@
             return ts.visitEachChild(node, visitor, context);
         }
         function visitThisKeyword(node) {
-            if (hierarchyFacts & 2) {
-                hierarchyFacts |= 32768;
+            if (hierarchyFacts & 2 && !(hierarchyFacts & 16384)) {
+                hierarchyFacts |= 65536;
             }
             if (convertedLoopState) {
                 if (hierarchyFacts & 2) {
@@ -76870,14 +78685,14 @@
         }
         function visitBreakOrContinueStatement(node) {
             if (convertedLoopState) {
-                var jump = node.kind === 242 ? 2 : 4;
+                var jump = node.kind === 244 ? 2 : 4;
                 var canUseBreakOrContinue = (node.label && convertedLoopState.labels && convertedLoopState.labels.get(ts.idText(node.label))) ||
                     (!node.label && (convertedLoopState.allowedNonLabeledJumps & jump));
                 if (!canUseBreakOrContinue) {
                     var labelMarker = void 0;
                     var label = node.label;
                     if (!label) {
-                        if (node.kind === 242) {
+                        if (node.kind === 244) {
                             convertedLoopState.nonLocalJumps |= 2;
                             labelMarker = "break";
                         }
@@ -76887,7 +78702,7 @@
                         }
                     }
                     else {
-                        if (node.kind === 242) {
+                        if (node.kind === 244) {
                             labelMarker = "break-" + label.escapedText;
                             setLabeledJump(convertedLoopState, true, ts.idText(label), labelMarker);
                         }
@@ -76990,7 +78805,7 @@
         function addConstructor(statements, node, name, extendsClauseElement) {
             var savedConvertedLoopState = convertedLoopState;
             convertedLoopState = undefined;
-            var ancestorFacts = enterSubtree(16278, 73);
+            var ancestorFacts = enterSubtree(32662, 73);
             var constructor = ts.getFirstConstructorWithBody(node);
             var hasSynthesizedSuper = hasSynthesizedDefaultSuperCall(constructor, extendsClauseElement !== undefined);
             var constructorFunction = factory.createFunctionDeclaration(undefined, undefined, undefined, name, undefined, transformConstructorParameters(constructor, hasSynthesizedSuper), undefined, transformConstructorBody(constructor, node, extendsClauseElement, hasSynthesizedSuper));
@@ -76999,7 +78814,7 @@
                 ts.setEmitFlags(constructorFunction, 8);
             }
             statements.push(constructorFunction);
-            exitSubtree(ancestorFacts, 49152, 0);
+            exitSubtree(ancestorFacts, 98304, 0);
             convertedLoopState = savedConvertedLoopState;
         }
         function transformConstructorParameters(constructor, hasSynthesizedSuper) {
@@ -77021,7 +78836,7 @@
             return block;
         }
         function transformConstructorBody(constructor, node, extendsClauseElement, hasSynthesizedSuper) {
-            var isDerivedClass = !!extendsClauseElement && ts.skipOuterExpressions(extendsClauseElement.expression).kind !== 103;
+            var isDerivedClass = !!extendsClauseElement && ts.skipOuterExpressions(extendsClauseElement.expression).kind !== 104;
             if (!constructor)
                 return createDefaultConstructorBody(node, isDerivedClass);
             var prologue = [];
@@ -77074,17 +78889,17 @@
             return block;
         }
         function isSufficientlyCoveredByReturnStatements(statement) {
-            if (statement.kind === 243) {
+            if (statement.kind === 245) {
                 return true;
             }
-            else if (statement.kind === 235) {
+            else if (statement.kind === 237) {
                 var ifStatement = statement;
                 if (ifStatement.elseStatement) {
                     return isSufficientlyCoveredByReturnStatements(ifStatement.thenStatement) &&
                         isSufficientlyCoveredByReturnStatements(ifStatement.elseStatement);
                 }
             }
-            else if (statement.kind === 231) {
+            else if (statement.kind === 233) {
                 var lastStatement = ts.lastOrUndefined(statement.statements);
                 if (lastStatement && isSufficientlyCoveredByReturnStatements(lastStatement)) {
                     return true;
@@ -77167,9 +78982,9 @@
             if (!shouldAddRestParameter(parameter, inConstructorWithSynthesizedSuper)) {
                 return false;
             }
-            var declarationName = parameter.name.kind === 78 ? ts.setParent(ts.setTextRange(factory.cloneNode(parameter.name), parameter.name), parameter.name.parent) : factory.createTempVariable(undefined);
+            var declarationName = parameter.name.kind === 79 ? ts.setParent(ts.setTextRange(factory.cloneNode(parameter.name), parameter.name), parameter.name.parent) : factory.createTempVariable(undefined);
             ts.setEmitFlags(declarationName, 48);
-            var expressionName = parameter.name.kind === 78 ? factory.cloneNode(parameter.name) : declarationName;
+            var expressionName = parameter.name.kind === 79 ? factory.cloneNode(parameter.name) : declarationName;
             var restIndex = node.parameters.length - 1;
             var temp = factory.createLoopVariable();
             prologueStatements.push(ts.setEmitFlags(ts.setTextRange(factory.createVariableStatement(undefined, factory.createVariableDeclarationList([
@@ -77185,14 +79000,14 @@
             ts.setEmitFlags(forStatement, 1048576);
             ts.startOnNewLine(forStatement);
             prologueStatements.push(forStatement);
-            if (parameter.name.kind !== 78) {
+            if (parameter.name.kind !== 79) {
                 prologueStatements.push(ts.setEmitFlags(ts.setTextRange(factory.createVariableStatement(undefined, factory.createVariableDeclarationList(ts.flattenDestructuringBinding(parameter, visitor, context, 0, expressionName))), parameter), 1048576));
             }
             ts.insertStatementsAfterCustomPrologue(statements, prologueStatements);
             return true;
         }
         function insertCaptureThisForNodeIfNeeded(statements, node) {
-            if (hierarchyFacts & 32768 && node.kind !== 210) {
+            if (hierarchyFacts & 65536 && node.kind !== 212) {
                 insertCaptureThisForNode(statements, node, factory.createThis());
                 return true;
             }
@@ -77208,22 +79023,22 @@
             ts.insertStatementAfterCustomPrologue(statements, captureThisStatement);
         }
         function insertCaptureNewTargetIfNeeded(statements, node, copyOnWrite) {
-            if (hierarchyFacts & 16384) {
+            if (hierarchyFacts & 32768) {
                 var newTarget = void 0;
                 switch (node.kind) {
-                    case 210:
+                    case 212:
                         return statements;
-                    case 166:
-                    case 168:
-                    case 169:
+                    case 167:
+                    case 170:
+                    case 171:
                         newTarget = factory.createVoidZero();
                         break;
-                    case 167:
+                    case 169:
                         newTarget = factory.createPropertyAccessExpression(ts.setEmitFlags(factory.createThis(), 4), "constructor");
                         break;
-                    case 252:
-                    case 209:
-                        newTarget = factory.createConditionalExpression(factory.createLogicalAnd(ts.setEmitFlags(factory.createThis(), 4), factory.createBinaryExpression(ts.setEmitFlags(factory.createThis(), 4), 101, factory.getLocalName(node))), undefined, factory.createPropertyAccessExpression(ts.setEmitFlags(factory.createThis(), 4), "constructor"), undefined, factory.createVoidZero());
+                    case 254:
+                    case 211:
+                        newTarget = factory.createConditionalExpression(factory.createLogicalAnd(ts.setEmitFlags(factory.createThis(), 4), factory.createBinaryExpression(ts.setEmitFlags(factory.createThis(), 4), 102, factory.getLocalName(node))), undefined, factory.createPropertyAccessExpression(ts.setEmitFlags(factory.createThis(), 4), "constructor"), undefined, factory.createVoidZero());
                         break;
                     default:
                         return ts.Debug.failBadSyntaxKind(node);
@@ -77243,20 +79058,21 @@
             for (var _i = 0, _a = node.members; _i < _a.length; _i++) {
                 var member = _a[_i];
                 switch (member.kind) {
-                    case 230:
+                    case 232:
                         statements.push(transformSemicolonClassElementToStatement(member));
                         break;
-                    case 166:
+                    case 167:
                         statements.push(transformClassMethodDeclarationToStatement(getClassMemberPrefix(node, member), member, node));
                         break;
-                    case 168:
-                    case 169:
+                    case 170:
+                    case 171:
                         var accessors = ts.getAllAccessorDeclarations(node.members, member);
                         if (member === accessors.firstAccessor) {
                             statements.push(transformAccessorsToStatement(getClassMemberPrefix(node, member), accessors, node));
                         }
                         break;
-                    case 167:
+                    case 169:
+                    case 168:
                         break;
                     default:
                         ts.Debug.failBadSyntaxKind(member, currentSourceFile && currentSourceFile.fileName);
@@ -77338,8 +79154,8 @@
             return call;
         }
         function visitArrowFunction(node) {
-            if (node.transformFlags & 8192) {
-                hierarchyFacts |= 32768;
+            if (node.transformFlags & 8192 && !(hierarchyFacts & 16384)) {
+                hierarchyFacts |= 65536;
             }
             var savedConvertedLoopState = convertedLoopState;
             convertedLoopState = undefined;
@@ -77348,53 +79164,50 @@
             ts.setTextRange(func, node);
             ts.setOriginalNode(func, node);
             ts.setEmitFlags(func, 8);
-            if (hierarchyFacts & 32768) {
-                enableSubstitutionsForCapturedThis();
-            }
             exitSubtree(ancestorFacts, 0, 0);
             convertedLoopState = savedConvertedLoopState;
             return func;
         }
         function visitFunctionExpression(node) {
             var ancestorFacts = ts.getEmitFlags(node) & 262144
-                ? enterSubtree(16278, 69)
-                : enterSubtree(16286, 65);
+                ? enterSubtree(32662, 69)
+                : enterSubtree(32670, 65);
             var savedConvertedLoopState = convertedLoopState;
             convertedLoopState = undefined;
             var parameters = ts.visitParameterList(node.parameters, visitor, context);
             var body = transformFunctionBody(node);
-            var name = hierarchyFacts & 16384
+            var name = hierarchyFacts & 32768
                 ? factory.getLocalName(node)
                 : node.name;
-            exitSubtree(ancestorFacts, 49152, 0);
+            exitSubtree(ancestorFacts, 98304, 0);
             convertedLoopState = savedConvertedLoopState;
             return factory.updateFunctionExpression(node, undefined, node.asteriskToken, name, undefined, parameters, undefined, body);
         }
         function visitFunctionDeclaration(node) {
             var savedConvertedLoopState = convertedLoopState;
             convertedLoopState = undefined;
-            var ancestorFacts = enterSubtree(16286, 65);
+            var ancestorFacts = enterSubtree(32670, 65);
             var parameters = ts.visitParameterList(node.parameters, visitor, context);
             var body = transformFunctionBody(node);
-            var name = hierarchyFacts & 16384
+            var name = hierarchyFacts & 32768
                 ? factory.getLocalName(node)
                 : node.name;
-            exitSubtree(ancestorFacts, 49152, 0);
+            exitSubtree(ancestorFacts, 98304, 0);
             convertedLoopState = savedConvertedLoopState;
             return factory.updateFunctionDeclaration(node, undefined, ts.visitNodes(node.modifiers, visitor, ts.isModifier), node.asteriskToken, name, undefined, parameters, undefined, body);
         }
         function transformFunctionLikeToExpression(node, location, name, container) {
             var savedConvertedLoopState = convertedLoopState;
             convertedLoopState = undefined;
-            var ancestorFacts = container && ts.isClassLike(container) && !ts.hasSyntacticModifier(node, 32)
-                ? enterSubtree(16286, 65 | 8)
-                : enterSubtree(16286, 65);
+            var ancestorFacts = container && ts.isClassLike(container) && !ts.isStatic(node)
+                ? enterSubtree(32670, 65 | 8)
+                : enterSubtree(32670, 65);
             var parameters = ts.visitParameterList(node.parameters, visitor, context);
             var body = transformFunctionBody(node);
-            if (hierarchyFacts & 16384 && !name && (node.kind === 252 || node.kind === 209)) {
+            if (hierarchyFacts & 32768 && !name && (node.kind === 254 || node.kind === 211)) {
                 name = factory.getGeneratedNameForNode(node);
             }
-            exitSubtree(ancestorFacts, 49152, 0);
+            exitSubtree(ancestorFacts, 98304, 0);
             convertedLoopState = savedConvertedLoopState;
             return ts.setOriginalNode(ts.setTextRange(factory.createFunctionExpression(undefined, node.asteriskToken, name, undefined, parameters, undefined, body), location), node);
         }
@@ -77424,7 +79237,7 @@
                 }
             }
             else {
-                ts.Debug.assert(node.kind === 210);
+                ts.Debug.assert(node.kind === 212);
                 statementsLocation = ts.moveRangeEnd(body, -1);
                 var equalsGreaterThanToken = node.equalsGreaterThanToken;
                 if (!ts.nodeIsSynthesized(equalsGreaterThanToken) && !ts.nodeIsSynthesized(body)) {
@@ -77525,7 +79338,7 @@
                             assignment = ts.flattenDestructuringAssignment(decl, visitor, context, 0);
                         }
                         else {
-                            assignment = factory.createBinaryExpression(decl.name, 62, ts.visitNode(decl.initializer, visitor, ts.isExpression));
+                            assignment = factory.createBinaryExpression(decl.name, 63, ts.visitNode(decl.initializer, visitor, ts.isExpression));
                             ts.setTextRange(assignment, decl);
                         }
                         assignments = ts.append(assignments, assignment);
@@ -77628,14 +79441,14 @@
         }
         function visitIterationStatement(node, outermostLabeledStatement) {
             switch (node.kind) {
-                case 236:
-                case 237:
-                    return visitDoOrWhileStatement(node, outermostLabeledStatement);
                 case 238:
-                    return visitForStatement(node, outermostLabeledStatement);
                 case 239:
-                    return visitForInStatement(node, outermostLabeledStatement);
+                    return visitDoOrWhileStatement(node, outermostLabeledStatement);
                 case 240:
+                    return visitForStatement(node, outermostLabeledStatement);
+                case 241:
+                    return visitForInStatement(node, outermostLabeledStatement);
+                case 242:
                     return visitForOfStatement(node, outermostLabeledStatement);
             }
         }
@@ -77760,7 +79573,7 @@
                 var property = properties[i];
                 if ((property.transformFlags & 524288 &&
                     hierarchyFacts & 4)
-                    || (hasComputed = ts.Debug.checkDefined(property.name).kind === 159)) {
+                    || (hasComputed = ts.Debug.checkDefined(property.name).kind === 160)) {
                     numInitialProperties = i;
                     break;
                 }
@@ -77804,7 +79617,7 @@
             }
             visit(node.name);
             function visit(node) {
-                if (node.kind === 78) {
+                if (node.kind === 79) {
                     state.hoistedLocalVariables.push(node);
                 }
                 else {
@@ -77866,11 +79679,11 @@
         }
         function convertIterationStatementCore(node, initializerFunction, convertedLoopBody) {
             switch (node.kind) {
-                case 238: return convertForStatement(node, initializerFunction, convertedLoopBody);
-                case 239: return convertForInStatement(node, convertedLoopBody);
-                case 240: return convertForOfStatement(node, convertedLoopBody);
-                case 236: return convertDoStatement(node, convertedLoopBody);
-                case 237: return convertWhileStatement(node, convertedLoopBody);
+                case 240: return convertForStatement(node, initializerFunction, convertedLoopBody);
+                case 241: return convertForInStatement(node, convertedLoopBody);
+                case 242: return convertForOfStatement(node, convertedLoopBody);
+                case 238: return convertDoStatement(node, convertedLoopBody);
+                case 239: return convertWhileStatement(node, convertedLoopBody);
                 default: return ts.Debug.failBadSyntaxKind(node, "IterationStatement expected");
             }
         }
@@ -77894,11 +79707,11 @@
         function createConvertedLoopState(node) {
             var loopInitializer;
             switch (node.kind) {
-                case 238:
-                case 239:
                 case 240:
+                case 241:
+                case 242:
                     var initializer = node.initializer;
-                    if (initializer && initializer.kind === 251) {
+                    if (initializer && initializer.kind === 253) {
                         loopInitializer = initializer;
                     }
                     break;
@@ -78041,7 +79854,7 @@
         function copyOutParameter(outParam, copyDirection) {
             var source = copyDirection === 0 ? outParam.outParamName : outParam.originalName;
             var target = copyDirection === 0 ? outParam.originalName : outParam.outParamName;
-            return factory.createBinaryExpression(target, 62, source);
+            return factory.createBinaryExpression(target, 63, source);
         }
         function copyOutParameters(outParams, partFlags, copyDirection, statements) {
             for (var _i = 0, outParams_1 = outParams; _i < outParams_1.length; _i++) {
@@ -78162,20 +79975,20 @@
             for (var i = start; i < numProperties; i++) {
                 var property = properties[i];
                 switch (property.kind) {
-                    case 168:
-                    case 169:
+                    case 170:
+                    case 171:
                         var accessors = ts.getAllAccessorDeclarations(node.properties, property);
                         if (property === accessors.firstAccessor) {
                             expressions.push(transformAccessorsToExpression(receiver, accessors, node, !!node.multiLine));
                         }
                         break;
-                    case 166:
+                    case 167:
                         expressions.push(transformObjectLiteralMethodDeclarationToExpression(property, receiver, node, node.multiLine));
                         break;
-                    case 289:
+                    case 291:
                         expressions.push(transformPropertyAssignmentToExpression(property, receiver, node.multiLine));
                         break;
-                    case 290:
+                    case 292:
                         expressions.push(transformShorthandPropertyAssignmentToExpression(property, receiver, node.multiLine));
                         break;
                     default:
@@ -78230,7 +80043,7 @@
         }
         function addStatementToStartOfBlock(block, statement) {
             var transformedStatements = ts.visitNodes(block.statements, visitor, ts.isStatement);
-            return factory.updateBlock(block, __spreadArray([statement], transformedStatements));
+            return factory.updateBlock(block, __spreadArray([statement], transformedStatements, true));
         }
         function visitMethodDeclaration(node) {
             ts.Debug.assert(!ts.isComputedPropertyName(node.name));
@@ -78242,17 +80055,17 @@
             ts.Debug.assert(!ts.isComputedPropertyName(node.name));
             var savedConvertedLoopState = convertedLoopState;
             convertedLoopState = undefined;
-            var ancestorFacts = enterSubtree(16286, 65);
+            var ancestorFacts = enterSubtree(32670, 65);
             var updated;
             var parameters = ts.visitParameterList(node.parameters, visitor, context);
             var body = transformFunctionBody(node);
-            if (node.kind === 168) {
+            if (node.kind === 170) {
                 updated = factory.updateGetAccessorDeclaration(node, node.decorators, node.modifiers, node.name, parameters, node.type, body);
             }
             else {
                 updated = factory.updateSetAccessorDeclaration(node, node.decorators, node.modifiers, node.name, parameters, body);
             }
-            exitSubtree(ancestorFacts, 49152, 0);
+            exitSubtree(ancestorFacts, 98304, 0);
             convertedLoopState = savedConvertedLoopState;
             return updated;
         }
@@ -78267,7 +80080,7 @@
         }
         function visitArrayLiteralExpression(node) {
             if (ts.some(node.elements, ts.isSpreadElement)) {
-                return transformAndSpreadElements(node.elements, true, !!node.multiLine, !!node.elements.hasTrailingComma);
+                return transformAndSpreadElements(node.elements, false, !!node.multiLine, !!node.elements.hasTrailingComma);
             }
             return ts.visitEachChild(node, visitor, context);
         }
@@ -78276,7 +80089,7 @@
                 return visitTypeScriptClassWrapper(node);
             }
             var expression = ts.skipOuterExpressions(node.expression);
-            if (expression.kind === 105 ||
+            if (expression.kind === 106 ||
                 ts.isSuperProperty(expression) ||
                 ts.some(node.arguments, ts.isSpreadElement)) {
                 return visitCallExpressionWithPotentialCapturedThisAssignment(node, true);
@@ -78288,7 +80101,7 @@
             var isVariableStatementWithInitializer = function (stmt) { return ts.isVariableStatement(stmt) && !!ts.first(stmt.declarationList.declarations).initializer; };
             var savedConvertedLoopState = convertedLoopState;
             convertedLoopState = undefined;
-            var bodyStatements = ts.visitNodes(body.statements, visitor, ts.isStatement);
+            var bodyStatements = ts.visitNodes(body.statements, classWrapperStatementVisitor, ts.isStatement);
             convertedLoopState = savedConvertedLoopState;
             var classStatements = ts.filter(bodyStatements, isVariableStatementWithInitializer);
             var remainingStatements = ts.filter(bodyStatements, function (stmt) { return !isVariableStatementWithInitializer(stmt); });
@@ -78296,6 +80109,9 @@
             var variable = varStatement.declarationList.declarations[0];
             var initializer = ts.skipOuterExpressions(variable.initializer);
             var aliasAssignment = ts.tryCast(initializer, ts.isAssignmentExpression);
+            if (!aliasAssignment && ts.isBinaryExpression(initializer) && initializer.operatorToken.kind === 27) {
+                aliasAssignment = ts.tryCast(initializer.left, ts.isAssignmentExpression);
+            }
             var call = ts.cast(aliasAssignment ? ts.skipOuterExpressions(aliasAssignment.right) : initializer, ts.isCallExpression);
             var func = ts.cast(ts.skipOuterExpressions(call.expression), ts.isFunctionExpression);
             var funcStatements = func.body.statements;
@@ -78328,20 +80144,20 @@
         }
         function visitCallExpressionWithPotentialCapturedThisAssignment(node, assignToCapturedThis) {
             if (node.transformFlags & 16384 ||
-                node.expression.kind === 105 ||
+                node.expression.kind === 106 ||
                 ts.isSuperProperty(ts.skipOuterExpressions(node.expression))) {
                 var _a = factory.createCallBinding(node.expression, hoistVariableDeclaration), target = _a.target, thisArg = _a.thisArg;
-                if (node.expression.kind === 105) {
+                if (node.expression.kind === 106) {
                     ts.setEmitFlags(thisArg, 4);
                 }
                 var resultingCall = void 0;
                 if (node.transformFlags & 16384) {
-                    resultingCall = factory.createFunctionApplyCall(ts.visitNode(target, callExpressionVisitor, ts.isExpression), node.expression.kind === 105 ? thisArg : ts.visitNode(thisArg, visitor, ts.isExpression), transformAndSpreadElements(node.arguments, false, false, false));
+                    resultingCall = factory.createFunctionApplyCall(ts.visitNode(target, callExpressionVisitor, ts.isExpression), node.expression.kind === 106 ? thisArg : ts.visitNode(thisArg, visitor, ts.isExpression), transformAndSpreadElements(node.arguments, true, false, false));
                 }
                 else {
-                    resultingCall = ts.setTextRange(factory.createFunctionCallCall(ts.visitNode(target, callExpressionVisitor, ts.isExpression), node.expression.kind === 105 ? thisArg : ts.visitNode(thisArg, visitor, ts.isExpression), ts.visitNodes(node.arguments, visitor, ts.isExpression)), node);
+                    resultingCall = ts.setTextRange(factory.createFunctionCallCall(ts.visitNode(target, callExpressionVisitor, ts.isExpression), node.expression.kind === 106 ? thisArg : ts.visitNode(thisArg, visitor, ts.isExpression), ts.visitNodes(node.arguments, visitor, ts.isExpression)), node);
                 }
-                if (node.expression.kind === 105) {
+                if (node.expression.kind === 106) {
                     var initializer = factory.createLogicalOr(resultingCall, createActualThis());
                     resultingCall = assignToCapturedThis
                         ? factory.createAssignment(factory.createUniqueName("_this", 16 | 32), initializer)
@@ -78354,31 +80170,30 @@
         function visitNewExpression(node) {
             if (ts.some(node.arguments, ts.isSpreadElement)) {
                 var _a = factory.createCallBinding(factory.createPropertyAccessExpression(node.expression, "bind"), hoistVariableDeclaration), target = _a.target, thisArg = _a.thisArg;
-                return factory.createNewExpression(factory.createFunctionApplyCall(ts.visitNode(target, visitor, ts.isExpression), thisArg, transformAndSpreadElements(factory.createNodeArray(__spreadArray([factory.createVoidZero()], node.arguments)), false, false, false)), undefined, []);
+                return factory.createNewExpression(factory.createFunctionApplyCall(ts.visitNode(target, visitor, ts.isExpression), thisArg, transformAndSpreadElements(factory.createNodeArray(__spreadArray([factory.createVoidZero()], node.arguments, true)), true, false, false)), undefined, []);
             }
             return ts.visitEachChild(node, visitor, context);
         }
-        function transformAndSpreadElements(elements, needsUniqueCopy, multiLine, hasTrailingComma) {
+        function transformAndSpreadElements(elements, isArgumentList, multiLine, hasTrailingComma) {
             var numElements = elements.length;
             var segments = ts.flatten(ts.spanMap(elements, partitionSpread, function (partition, visitPartition, _start, end) {
                 return visitPartition(partition, multiLine, hasTrailingComma && end === numElements);
             }));
             if (segments.length === 1) {
                 var firstSegment = segments[0];
-                if (!needsUniqueCopy && !compilerOptions.downlevelIteration
-                    || ts.isPackedArrayLiteral(firstSegment)
-                    || ts.isCallToHelper(firstSegment, "___spreadArray")) {
-                    return segments[0];
+                if (isArgumentList && !compilerOptions.downlevelIteration
+                    || ts.isPackedArrayLiteral(firstSegment.expression)
+                    || ts.isCallToHelper(firstSegment.expression, "___spreadArray")) {
+                    return firstSegment.expression;
                 }
             }
             var helpers = emitHelpers();
-            var startsWithSpread = ts.isSpreadElement(elements[0]);
+            var startsWithSpread = segments[0].kind !== 0;
             var expression = startsWithSpread ? factory.createArrayLiteralExpression() :
-                segments[0];
+                segments[0].expression;
             for (var i = startsWithSpread ? 0 : 1; i < segments.length; i++) {
-                expression = helpers.createSpreadArrayHelper(expression, compilerOptions.downlevelIteration && !ts.isPackedArrayLiteral(segments[i]) ?
-                    helpers.createReadHelper(segments[i], undefined) :
-                    segments[i]);
+                var segment = segments[i];
+                expression = helpers.createSpreadArrayHelper(expression, segment.expression, segment.kind === 1 && !isArgumentList);
             }
             return expression;
         }
@@ -78390,15 +80205,23 @@
         function visitSpanOfSpreads(chunk) {
             return ts.map(chunk, visitExpressionOfSpread);
         }
+        function visitExpressionOfSpread(node) {
+            var expression = ts.visitNode(node.expression, visitor, ts.isExpression);
+            var isCallToReadHelper = ts.isCallToHelper(expression, "___read");
+            var kind = isCallToReadHelper || ts.isPackedArrayLiteral(expression) ? 2 : 1;
+            if (compilerOptions.downlevelIteration && kind === 1 && !ts.isArrayLiteralExpression(expression) && !isCallToReadHelper) {
+                expression = emitHelpers().createReadHelper(expression, undefined);
+                kind = 2;
+            }
+            return createSpreadSegment(kind, expression);
+        }
         function visitSpanOfNonSpreads(chunk, multiLine, hasTrailingComma) {
-            return factory.createArrayLiteralExpression(ts.visitNodes(factory.createNodeArray(chunk, hasTrailingComma), visitor, ts.isExpression), multiLine);
+            var expression = factory.createArrayLiteralExpression(ts.visitNodes(factory.createNodeArray(chunk, hasTrailingComma), visitor, ts.isExpression), multiLine);
+            return createSpreadSegment(0, expression);
         }
         function visitSpreadElement(node) {
             return ts.visitNode(node.expression, visitor, ts.isExpression);
         }
-        function visitExpressionOfSpread(node) {
-            return ts.visitNode(node.expression, visitor, ts.isExpression);
-        }
         function visitTemplateLiteral(node) {
             return ts.setTextRange(factory.createStringLiteral(node.text), node);
         }
@@ -78453,15 +80276,15 @@
                 : factory.createUniqueName("_super", 16 | 32);
         }
         function visitMetaProperty(node) {
-            if (node.keywordToken === 102 && node.name.escapedText === "target") {
-                hierarchyFacts |= 16384;
+            if (node.keywordToken === 103 && node.name.escapedText === "target") {
+                hierarchyFacts |= 32768;
                 return factory.createUniqueName("_newTarget", 16 | 32);
             }
             return node;
         }
         function onEmitNode(hint, node, emitCallback) {
             if (enabledSubstitutions & 1 && ts.isFunctionLike(node)) {
-                var ancestorFacts = enterSubtree(16286, ts.getEmitFlags(node) & 8
+                var ancestorFacts = enterSubtree(32670, ts.getEmitFlags(node) & 8
                     ? 65 | 16
                     : 65);
                 previousOnEmitNode(hint, node, emitCallback);
@@ -78473,20 +80296,20 @@
         function enableSubstitutionsForBlockScopedBindings() {
             if ((enabledSubstitutions & 2) === 0) {
                 enabledSubstitutions |= 2;
-                context.enableSubstitution(78);
+                context.enableSubstitution(79);
             }
         }
         function enableSubstitutionsForCapturedThis() {
             if ((enabledSubstitutions & 1) === 0) {
                 enabledSubstitutions |= 1;
-                context.enableSubstitution(107);
-                context.enableEmitNotification(167);
-                context.enableEmitNotification(166);
-                context.enableEmitNotification(168);
+                context.enableSubstitution(108);
                 context.enableEmitNotification(169);
-                context.enableEmitNotification(210);
-                context.enableEmitNotification(209);
-                context.enableEmitNotification(252);
+                context.enableEmitNotification(167);
+                context.enableEmitNotification(170);
+                context.enableEmitNotification(171);
+                context.enableEmitNotification(212);
+                context.enableEmitNotification(211);
+                context.enableEmitNotification(254);
             }
         }
         function onSubstituteNode(hint, node) {
@@ -78510,10 +80333,10 @@
         }
         function isNameOfDeclarationWithCollidingName(node) {
             switch (node.parent.kind) {
-                case 199:
-                case 253:
-                case 256:
-                case 250:
+                case 201:
+                case 255:
+                case 258:
+                case 252:
                     return node.parent.name === node
                         && resolver.isDeclarationWithCollidingName(node.parent);
             }
@@ -78521,9 +80344,9 @@
         }
         function substituteExpression(node) {
             switch (node.kind) {
-                case 78:
+                case 79:
                     return substituteExpressionIdentifier(node);
-                case 107:
+                case 108:
                     return substituteThisKeyword(node);
             }
             return node;
@@ -78562,7 +80385,7 @@
             return node;
         }
         function getClassMemberPrefix(node, member) {
-            return ts.hasSyntacticModifier(member, 32)
+            return ts.isStatic(member)
                 ? factory.getInternalName(node)
                 : factory.createPropertyAccessExpression(factory.getInternalName(node), "prototype");
         }
@@ -78574,19 +80397,19 @@
                 return false;
             }
             var statement = ts.firstOrUndefined(constructor.body.statements);
-            if (!statement || !ts.nodeIsSynthesized(statement) || statement.kind !== 234) {
+            if (!statement || !ts.nodeIsSynthesized(statement) || statement.kind !== 236) {
                 return false;
             }
             var statementExpression = statement.expression;
-            if (!ts.nodeIsSynthesized(statementExpression) || statementExpression.kind !== 204) {
+            if (!ts.nodeIsSynthesized(statementExpression) || statementExpression.kind !== 206) {
                 return false;
             }
             var callTarget = statementExpression.expression;
-            if (!ts.nodeIsSynthesized(callTarget) || callTarget.kind !== 105) {
+            if (!ts.nodeIsSynthesized(callTarget) || callTarget.kind !== 106) {
                 return false;
             }
             var callArgument = ts.singleOrUndefined(statementExpression.arguments);
-            if (!callArgument || !ts.nodeIsSynthesized(callArgument) || callArgument.kind !== 221) {
+            if (!callArgument || !ts.nodeIsSynthesized(callArgument) || callArgument.kind !== 223) {
                 return false;
             }
             var expression = callArgument.expression;
@@ -78605,24 +80428,24 @@
         if (compilerOptions.jsx === 1 || compilerOptions.jsx === 3) {
             previousOnEmitNode = context.onEmitNode;
             context.onEmitNode = onEmitNode;
-            context.enableEmitNotification(276);
+            context.enableEmitNotification(278);
+            context.enableEmitNotification(279);
             context.enableEmitNotification(277);
-            context.enableEmitNotification(275);
             noSubstitution = [];
         }
         var previousOnSubstituteNode = context.onSubstituteNode;
         context.onSubstituteNode = onSubstituteNode;
-        context.enableSubstitution(202);
-        context.enableSubstitution(289);
+        context.enableSubstitution(204);
+        context.enableSubstitution(291);
         return ts.chainBundle(context, transformSourceFile);
         function transformSourceFile(node) {
             return node;
         }
         function onEmitNode(hint, node, emitCallback) {
             switch (node.kind) {
-                case 276:
+                case 278:
+                case 279:
                 case 277:
-                case 275:
                     var tagName = node.tagName;
                     noSubstitution[ts.getOriginalNodeId(tagName)] = true;
                     break;
@@ -78661,7 +80484,7 @@
         }
         function trySubstituteReservedName(name) {
             var token = name.originalKeywordKind || (ts.nodeIsSynthesized(name) ? ts.stringToToken(ts.idText(name)) : undefined);
-            if (token !== undefined && token >= 80 && token <= 115) {
+            if (token !== undefined && token >= 81 && token <= 116) {
                 return ts.setTextRange(factory.createStringLiteralFromNode(name), name);
             }
             return undefined;
@@ -78742,13 +80565,13 @@
         }
         function visitJavaScriptInStatementContainingYield(node) {
             switch (node.kind) {
-                case 236:
+                case 238:
                     return visitDoStatement(node);
-                case 237:
+                case 239:
                     return visitWhileStatement(node);
-                case 245:
+                case 247:
                     return visitSwitchStatement(node);
-                case 246:
+                case 248:
                     return visitLabeledStatement(node);
                 default:
                     return visitJavaScriptInGeneratorFunctionBody(node);
@@ -78756,24 +80579,24 @@
         }
         function visitJavaScriptInGeneratorFunctionBody(node) {
             switch (node.kind) {
-                case 252:
+                case 254:
                     return visitFunctionDeclaration(node);
-                case 209:
+                case 211:
                     return visitFunctionExpression(node);
-                case 168:
-                case 169:
+                case 170:
+                case 171:
                     return visitAccessorDeclaration(node);
-                case 233:
+                case 235:
                     return visitVariableStatement(node);
-                case 238:
+                case 240:
                     return visitForStatement(node);
-                case 239:
-                    return visitForInStatement(node);
-                case 242:
-                    return visitBreakStatement(node);
                 case 241:
-                    return visitContinueStatement(node);
+                    return visitForInStatement(node);
+                case 244:
+                    return visitBreakStatement(node);
                 case 243:
+                    return visitContinueStatement(node);
+                case 245:
                     return visitReturnStatement(node);
                 default:
                     if (node.transformFlags & 524288) {
@@ -78789,23 +80612,23 @@
         }
         function visitJavaScriptContainingYield(node) {
             switch (node.kind) {
-                case 217:
+                case 219:
                     return visitBinaryExpression(node);
-                case 341:
+                case 346:
                     return visitCommaListExpression(node);
-                case 218:
-                    return visitConditionalExpression(node);
                 case 220:
+                    return visitConditionalExpression(node);
+                case 222:
                     return visitYieldExpression(node);
-                case 200:
+                case 202:
                     return visitArrayLiteralExpression(node);
-                case 201:
-                    return visitObjectLiteralExpression(node);
                 case 203:
-                    return visitElementAccessExpression(node);
-                case 204:
-                    return visitCallExpression(node);
+                    return visitObjectLiteralExpression(node);
                 case 205:
+                    return visitElementAccessExpression(node);
+                case 206:
+                    return visitCallExpression(node);
+                case 207:
                     return visitNewExpression(node);
                 default:
                     return ts.visitEachChild(node, visitor, context);
@@ -78813,9 +80636,9 @@
         }
         function visitGenerator(node) {
             switch (node.kind) {
-                case 252:
+                case 254:
                     return visitFunctionDeclaration(node);
-                case 209:
+                case 211:
                     return visitFunctionExpression(node);
                 default:
                     return ts.Debug.failBadSyntaxKind(node);
@@ -78952,10 +80775,10 @@
             if (containsYield(right)) {
                 var target = void 0;
                 switch (left.kind) {
-                    case 202:
+                    case 204:
                         target = factory.updatePropertyAccessExpression(left, cacheExpression(ts.visitNode(left.expression, visitor, ts.isLeftHandSideExpression)), left.name);
                         break;
-                    case 203:
+                    case 205:
                         target = factory.updateElementAccessExpression(left, cacheExpression(ts.visitNode(left.expression, visitor, ts.isLeftHandSideExpression)), cacheExpression(ts.visitNode(left.argumentExpression, visitor, ts.isExpression)));
                         break;
                     default:
@@ -79074,13 +80897,13 @@
                 temp = declareLocal();
                 var initialElements = ts.visitNodes(elements, visitor, ts.isExpression, 0, numInitialElements);
                 emitAssignment(temp, factory.createArrayLiteralExpression(leadingElement
-                    ? __spreadArray([leadingElement], initialElements) : initialElements));
+                    ? __spreadArray([leadingElement], initialElements, true) : initialElements));
                 leadingElement = undefined;
             }
             var expressions = ts.reduceLeft(elements, reduceElement, [], numInitialElements);
             return temp
                 ? factory.createArrayConcatCall(temp, [factory.createArrayLiteralExpression(expressions, multiLine)])
-                : ts.setTextRange(factory.createArrayLiteralExpression(leadingElement ? __spreadArray([leadingElement], expressions) : expressions, multiLine), location);
+                : ts.setTextRange(factory.createArrayLiteralExpression(leadingElement ? __spreadArray([leadingElement], expressions, true) : expressions, multiLine), location);
             function reduceElement(expressions, element) {
                 if (containsYield(element) && expressions.length > 0) {
                     var hasAssignedTemp = temp !== undefined;
@@ -79089,7 +80912,7 @@
                     }
                     emitAssignment(temp, hasAssignedTemp
                         ? factory.createArrayConcatCall(temp, [factory.createArrayLiteralExpression(expressions, multiLine)])
-                        : factory.createArrayLiteralExpression(leadingElement ? __spreadArray([leadingElement], expressions) : expressions, multiLine));
+                        : factory.createArrayLiteralExpression(leadingElement ? __spreadArray([leadingElement], expressions, true) : expressions, multiLine));
                     leadingElement = undefined;
                     expressions = [];
                 }
@@ -79167,35 +80990,35 @@
         }
         function transformAndEmitStatementWorker(node) {
             switch (node.kind) {
-                case 231:
+                case 233:
                     return transformAndEmitBlock(node);
-                case 234:
-                    return transformAndEmitExpressionStatement(node);
-                case 235:
-                    return transformAndEmitIfStatement(node);
                 case 236:
-                    return transformAndEmitDoStatement(node);
+                    return transformAndEmitExpressionStatement(node);
                 case 237:
-                    return transformAndEmitWhileStatement(node);
+                    return transformAndEmitIfStatement(node);
                 case 238:
-                    return transformAndEmitForStatement(node);
+                    return transformAndEmitDoStatement(node);
                 case 239:
-                    return transformAndEmitForInStatement(node);
+                    return transformAndEmitWhileStatement(node);
+                case 240:
+                    return transformAndEmitForStatement(node);
                 case 241:
-                    return transformAndEmitContinueStatement(node);
-                case 242:
-                    return transformAndEmitBreakStatement(node);
+                    return transformAndEmitForInStatement(node);
                 case 243:
-                    return transformAndEmitReturnStatement(node);
+                    return transformAndEmitContinueStatement(node);
                 case 244:
-                    return transformAndEmitWithStatement(node);
+                    return transformAndEmitBreakStatement(node);
                 case 245:
-                    return transformAndEmitSwitchStatement(node);
+                    return transformAndEmitReturnStatement(node);
                 case 246:
-                    return transformAndEmitLabeledStatement(node);
+                    return transformAndEmitWithStatement(node);
                 case 247:
-                    return transformAndEmitThrowStatement(node);
+                    return transformAndEmitSwitchStatement(node);
                 case 248:
+                    return transformAndEmitLabeledStatement(node);
+                case 249:
+                    return transformAndEmitThrowStatement(node);
+                case 250:
                     return transformAndEmitTryStatement(node);
                 default:
                     return emitStatement(ts.visitNode(node, visitor, ts.isStatement));
@@ -79489,7 +81312,7 @@
                 for (var i = 0; i < numClauses; i++) {
                     var clause = caseBlock.clauses[i];
                     clauseLabels.push(defineLabel());
-                    if (clause.kind === 286 && defaultClauseIndex === -1) {
+                    if (clause.kind === 288 && defaultClauseIndex === -1) {
                         defaultClauseIndex = i;
                     }
                 }
@@ -79499,7 +81322,7 @@
                     var defaultClausesSkipped = 0;
                     for (var i = clausesWritten; i < numClauses; i++) {
                         var clause = caseBlock.clauses[i];
-                        if (clause.kind === 285) {
+                        if (clause.kind === 287) {
                             if (containsYield(clause.expression) && pendingClauses.length > 0) {
                                 break;
                             }
@@ -79734,7 +81557,7 @@
                 if (!renamedCatchVariables) {
                     renamedCatchVariables = new ts.Map();
                     renamedCatchVariableDeclarations = [];
-                    context.enableSubstitution(78);
+                    context.enableSubstitution(79);
                 }
                 renamedCatchVariables.set(text, true);
                 renamedCatchVariableDeclarations[ts.getOriginalNodeId(variable)] = name;
@@ -80304,17 +82127,17 @@
         var previousOnEmitNode = context.onEmitNode;
         context.onSubstituteNode = onSubstituteNode;
         context.onEmitNode = onEmitNode;
-        context.enableSubstitution(78);
-        context.enableSubstitution(217);
-        context.enableSubstitution(215);
-        context.enableSubstitution(216);
-        context.enableSubstitution(290);
-        context.enableEmitNotification(298);
+        context.enableSubstitution(206);
+        context.enableSubstitution(208);
+        context.enableSubstitution(79);
+        context.enableSubstitution(219);
+        context.enableSubstitution(292);
+        context.enableEmitNotification(300);
         var moduleInfoMap = [];
         var deferredExports = [];
         var currentSourceFile;
         var currentModuleInfo;
-        var noSubstitution;
+        var noSubstitution = [];
         var needUMDDynamicImportHelper;
         return ts.chainBundle(context, transformSourceFile);
         function transformSourceFile(node) {
@@ -80344,7 +82167,7 @@
             startLexicalEnvironment();
             var statements = [];
             var ensureUseStrict = ts.getStrictOptionValue(compilerOptions, "alwaysStrict") || (!compilerOptions.noImplicitUseStrict && ts.isExternalModule(currentSourceFile));
-            var statementOffset = factory.copyPrologue(node.statements, statements, ensureUseStrict && !ts.isJsonSourceFile(node), sourceElementVisitor);
+            var statementOffset = factory.copyPrologue(node.statements, statements, ensureUseStrict && !ts.isJsonSourceFile(node), topLevelVisitor);
             if (shouldEmitUnderscoreUnderscoreESModule()) {
                 ts.append(statements, createUnderscoreUnderscoreESModule());
             }
@@ -80354,8 +82177,8 @@
                     ts.append(statements, factory.createExpressionStatement(ts.reduceLeft(currentModuleInfo.exportedNames.slice(i, i + chunkSize), function (prev, nextId) { return factory.createAssignment(factory.createPropertyAccessExpression(factory.createIdentifier("exports"), factory.createIdentifier(ts.idText(nextId))), prev); }, factory.createVoidZero())));
                 }
             }
-            ts.append(statements, ts.visitNode(currentModuleInfo.externalHelpersImportDeclaration, sourceElementVisitor, ts.isStatement));
-            ts.addRange(statements, ts.visitNodes(node.statements, sourceElementVisitor, ts.isStatement, statementOffset));
+            ts.append(statements, ts.visitNode(currentModuleInfo.externalHelpersImportDeclaration, topLevelVisitor, ts.isStatement));
+            ts.addRange(statements, ts.visitNodes(node.statements, topLevelVisitor, ts.isStatement, statementOffset));
             addExportEqualsIfNeeded(statements, false);
             ts.insertStatementsAfterStandardPrologue(statements, endLexicalEnvironment());
             var updated = factory.updateSourceFile(node, ts.setTextRange(factory.createNodeArray(statements), node.statements));
@@ -80368,18 +82191,18 @@
             var jsonSourceFile = ts.isJsonSourceFile(node) && node;
             var _a = collectAsynchronousDependencies(node, true), aliasedModuleNames = _a.aliasedModuleNames, unaliasedModuleNames = _a.unaliasedModuleNames, importAliasNames = _a.importAliasNames;
             var updated = factory.updateSourceFile(node, ts.setTextRange(factory.createNodeArray([
-                factory.createExpressionStatement(factory.createCallExpression(define, undefined, __spreadArray(__spreadArray([], (moduleName ? [moduleName] : [])), [
+                factory.createExpressionStatement(factory.createCallExpression(define, undefined, __spreadArray(__spreadArray([], (moduleName ? [moduleName] : []), true), [
                     factory.createArrayLiteralExpression(jsonSourceFile ? ts.emptyArray : __spreadArray(__spreadArray([
                         factory.createStringLiteral("require"),
                         factory.createStringLiteral("exports")
-                    ], aliasedModuleNames), unaliasedModuleNames)),
+                    ], aliasedModuleNames, true), unaliasedModuleNames, true)),
                     jsonSourceFile ?
                         jsonSourceFile.statements.length ? jsonSourceFile.statements[0].expression : factory.createObjectLiteralExpression() :
                         factory.createFunctionExpression(undefined, undefined, undefined, undefined, __spreadArray([
                             factory.createParameterDeclaration(undefined, undefined, undefined, "require"),
                             factory.createParameterDeclaration(undefined, undefined, undefined, "exports")
-                        ], importAliasNames), undefined, transformAsynchronousModuleBody(node))
-                ])))
+                        ], importAliasNames, true), undefined, transformAsynchronousModuleBody(node))
+                ], false)))
             ]), node.statements));
             ts.addEmitHelpers(updated, context.readEmitHelpers());
             return updated;
@@ -80397,13 +82220,13 @@
                     ]),
                     ts.setEmitFlags(factory.createIfStatement(factory.createStrictInequality(factory.createIdentifier("v"), factory.createIdentifier("undefined")), factory.createExpressionStatement(factory.createAssignment(factory.createPropertyAccessExpression(factory.createIdentifier("module"), "exports"), factory.createIdentifier("v")))), 1)
                 ]), factory.createIfStatement(factory.createLogicalAnd(factory.createTypeCheck(factory.createIdentifier("define"), "function"), factory.createPropertyAccessExpression(factory.createIdentifier("define"), "amd")), factory.createBlock([
-                    factory.createExpressionStatement(factory.createCallExpression(factory.createIdentifier("define"), undefined, __spreadArray(__spreadArray([], (moduleName ? [moduleName] : [])), [
+                    factory.createExpressionStatement(factory.createCallExpression(factory.createIdentifier("define"), undefined, __spreadArray(__spreadArray([], (moduleName ? [moduleName] : []), true), [
                         factory.createArrayLiteralExpression(__spreadArray(__spreadArray([
                             factory.createStringLiteral("require"),
                             factory.createStringLiteral("exports")
-                        ], aliasedModuleNames), unaliasedModuleNames)),
+                        ], aliasedModuleNames, true), unaliasedModuleNames, true)),
                         factory.createIdentifier("factory")
-                    ])))
+                    ], false)))
                 ])))
             ], true), undefined));
             var updated = factory.updateSourceFile(node, ts.setTextRange(factory.createNodeArray([
@@ -80411,7 +82234,7 @@
                     factory.createFunctionExpression(undefined, undefined, undefined, undefined, __spreadArray([
                         factory.createParameterDeclaration(undefined, undefined, undefined, "require"),
                         factory.createParameterDeclaration(undefined, undefined, undefined, "exports")
-                    ], importAliasNames), undefined, transformAsynchronousModuleBody(node))
+                    ], importAliasNames, true), undefined, transformAsynchronousModuleBody(node))
                 ]))
             ]), node.statements));
             ts.addEmitHelpers(updated, context.readEmitHelpers());
@@ -80462,18 +82285,18 @@
         function transformAsynchronousModuleBody(node) {
             startLexicalEnvironment();
             var statements = [];
-            var statementOffset = factory.copyPrologue(node.statements, statements, !compilerOptions.noImplicitUseStrict, sourceElementVisitor);
+            var statementOffset = factory.copyPrologue(node.statements, statements, !compilerOptions.noImplicitUseStrict, topLevelVisitor);
             if (shouldEmitUnderscoreUnderscoreESModule()) {
                 ts.append(statements, createUnderscoreUnderscoreESModule());
             }
             if (ts.length(currentModuleInfo.exportedNames)) {
                 ts.append(statements, factory.createExpressionStatement(ts.reduceLeft(currentModuleInfo.exportedNames, function (prev, nextId) { return factory.createAssignment(factory.createPropertyAccessExpression(factory.createIdentifier("exports"), factory.createIdentifier(ts.idText(nextId))), prev); }, factory.createVoidZero())));
             }
-            ts.append(statements, ts.visitNode(currentModuleInfo.externalHelpersImportDeclaration, sourceElementVisitor, ts.isStatement));
+            ts.append(statements, ts.visitNode(currentModuleInfo.externalHelpersImportDeclaration, topLevelVisitor, ts.isStatement));
             if (moduleKind === ts.ModuleKind.AMD) {
                 ts.addRange(statements, ts.mapDefined(currentModuleInfo.externalImports, getAMDImportExpressionForImport));
             }
-            ts.addRange(statements, ts.visitNodes(node.statements, sourceElementVisitor, ts.isStatement, statementOffset));
+            ts.addRange(statements, ts.visitNodes(node.statements, topLevelVisitor, ts.isStatement, statementOffset));
             addExportEqualsIfNeeded(statements, true);
             ts.insertStatementsAfterStandardPrologue(statements, endLexicalEnvironment());
             var body = factory.createBlock(statements, true);
@@ -80484,7 +82307,7 @@
         }
         function addExportEqualsIfNeeded(statements, emitAsReturn) {
             if (currentModuleInfo.exportEquals) {
-                var expressionResult = ts.visitNode(currentModuleInfo.exportEquals.expression, moduleExpressionElementVisitor);
+                var expressionResult = ts.visitNode(currentModuleInfo.exportEquals.expression, visitor);
                 if (expressionResult) {
                     if (emitAsReturn) {
                         var statement = factory.createReturnStatement(expressionResult);
@@ -80501,67 +82324,88 @@
                 }
             }
         }
-        function sourceElementVisitor(node) {
+        function topLevelVisitor(node) {
             switch (node.kind) {
-                case 262:
+                case 264:
                     return visitImportDeclaration(node);
-                case 261:
+                case 263:
                     return visitImportEqualsDeclaration(node);
-                case 268:
+                case 270:
                     return visitExportDeclaration(node);
-                case 267:
+                case 269:
                     return visitExportAssignment(node);
-                case 233:
+                case 235:
                     return visitVariableStatement(node);
-                case 252:
+                case 254:
                     return visitFunctionDeclaration(node);
-                case 253:
+                case 255:
                     return visitClassDeclaration(node);
-                case 342:
+                case 347:
                     return visitMergeDeclarationMarker(node);
-                case 343:
+                case 348:
                     return visitEndOfDeclarationMarker(node);
                 default:
-                    return ts.visitEachChild(node, moduleExpressionElementVisitor, context);
+                    return visitor(node);
             }
         }
-        function moduleExpressionElementVisitor(node) {
-            if (!(node.transformFlags & 4194304) && !(node.transformFlags & 2048)) {
+        function visitorWorker(node, valueIsDiscarded) {
+            if (!(node.transformFlags & (4194304 | 2048 | 67108864))) {
                 return node;
             }
-            if (ts.isImportCall(node)) {
-                return visitImportCallExpression(node);
+            switch (node.kind) {
+                case 240:
+                    return visitForStatement(node);
+                case 236:
+                    return visitExpressionStatement(node);
+                case 210:
+                    return visitParenthesizedExpression(node, valueIsDiscarded);
+                case 345:
+                    return visitPartiallyEmittedExpression(node, valueIsDiscarded);
+                case 206:
+                    if (ts.isImportCall(node)) {
+                        return visitImportCallExpression(node);
+                    }
+                    break;
+                case 219:
+                    if (ts.isDestructuringAssignment(node)) {
+                        return visitDestructuringAssignment(node, valueIsDiscarded);
+                    }
+                    break;
+                case 217:
+                case 218:
+                    return visitPreOrPostfixUnaryExpression(node, valueIsDiscarded);
             }
-            else if (ts.isDestructuringAssignment(node)) {
-                return visitDestructuringAssignment(node);
-            }
-            else {
-                return ts.visitEachChild(node, moduleExpressionElementVisitor, context);
-            }
+            return ts.visitEachChild(node, visitor, context);
+        }
+        function visitor(node) {
+            return visitorWorker(node, false);
+        }
+        function discardedValueVisitor(node) {
+            return visitorWorker(node, true);
         }
         function destructuringNeedsFlattening(node) {
             if (ts.isObjectLiteralExpression(node)) {
                 for (var _i = 0, _a = node.properties; _i < _a.length; _i++) {
                     var elem = _a[_i];
                     switch (elem.kind) {
-                        case 289:
+                        case 291:
                             if (destructuringNeedsFlattening(elem.initializer)) {
                                 return true;
                             }
                             break;
-                        case 290:
+                        case 292:
                             if (destructuringNeedsFlattening(elem.name)) {
                                 return true;
                             }
                             break;
-                        case 291:
+                        case 293:
                             if (destructuringNeedsFlattening(elem.expression)) {
                                 return true;
                             }
                             break;
-                        case 166:
-                        case 168:
-                        case 169:
+                        case 167:
+                        case 170:
+                        case 171:
                             return false;
                         default: ts.Debug.assertNever(elem, "Unhandled object member kind");
                     }
@@ -80585,15 +82429,66 @@
             }
             return false;
         }
-        function visitDestructuringAssignment(node) {
+        function visitDestructuringAssignment(node, valueIsDiscarded) {
             if (destructuringNeedsFlattening(node.left)) {
-                return ts.flattenDestructuringAssignment(node, moduleExpressionElementVisitor, context, 0, false, createAllExportExpressions);
+                return ts.flattenDestructuringAssignment(node, visitor, context, 0, !valueIsDiscarded, createAllExportExpressions);
             }
-            return ts.visitEachChild(node, moduleExpressionElementVisitor, context);
+            return ts.visitEachChild(node, visitor, context);
+        }
+        function visitForStatement(node) {
+            return factory.updateForStatement(node, ts.visitNode(node.initializer, discardedValueVisitor, ts.isForInitializer), ts.visitNode(node.condition, visitor, ts.isExpression), ts.visitNode(node.incrementor, discardedValueVisitor, ts.isExpression), ts.visitIterationBody(node.statement, visitor, context));
+        }
+        function visitExpressionStatement(node) {
+            return factory.updateExpressionStatement(node, ts.visitNode(node.expression, discardedValueVisitor, ts.isExpression));
+        }
+        function visitParenthesizedExpression(node, valueIsDiscarded) {
+            return factory.updateParenthesizedExpression(node, ts.visitNode(node.expression, valueIsDiscarded ? discardedValueVisitor : visitor, ts.isExpression));
+        }
+        function visitPartiallyEmittedExpression(node, valueIsDiscarded) {
+            return factory.updatePartiallyEmittedExpression(node, ts.visitNode(node.expression, valueIsDiscarded ? discardedValueVisitor : visitor, ts.isExpression));
+        }
+        function visitPreOrPostfixUnaryExpression(node, valueIsDiscarded) {
+            if ((node.operator === 45 || node.operator === 46)
+                && ts.isIdentifier(node.operand)
+                && !ts.isGeneratedIdentifier(node.operand)
+                && !ts.isLocalName(node.operand)
+                && !ts.isDeclarationNameOfEnumOrNamespace(node.operand)) {
+                var exportedNames = getExports(node.operand);
+                if (exportedNames) {
+                    var temp = void 0;
+                    var expression = ts.visitNode(node.operand, visitor, ts.isExpression);
+                    if (ts.isPrefixUnaryExpression(node)) {
+                        expression = factory.updatePrefixUnaryExpression(node, expression);
+                    }
+                    else {
+                        expression = factory.updatePostfixUnaryExpression(node, expression);
+                        if (!valueIsDiscarded) {
+                            temp = factory.createTempVariable(hoistVariableDeclaration);
+                            expression = factory.createAssignment(temp, expression);
+                            ts.setTextRange(expression, node);
+                        }
+                        expression = factory.createComma(expression, factory.cloneNode(node.operand));
+                        ts.setTextRange(expression, node);
+                    }
+                    for (var _i = 0, exportedNames_1 = exportedNames; _i < exportedNames_1.length; _i++) {
+                        var exportName = exportedNames_1[_i];
+                        noSubstitution[ts.getNodeId(expression)] = true;
+                        expression = createExportExpression(exportName, expression);
+                        ts.setTextRange(expression, node);
+                    }
+                    if (temp) {
+                        noSubstitution[ts.getNodeId(expression)] = true;
+                        expression = factory.createComma(expression, temp);
+                        ts.setTextRange(expression, node);
+                    }
+                    return expression;
+                }
+            }
+            return ts.visitEachChild(node, visitor, context);
         }
         function visitImportCallExpression(node) {
             var externalModuleName = ts.getExternalModuleNameLiteral(factory, node, currentSourceFile, host, resolver, compilerOptions);
-            var firstArgument = ts.visitNode(ts.firstOrUndefined(node.arguments), moduleExpressionElementVisitor);
+            var firstArgument = ts.visitNode(ts.firstOrUndefined(node.arguments), visitor);
             var argument = externalModuleName && (!firstArgument || !ts.isStringLiteral(firstArgument) || firstArgument.text !== externalModuleName.text) ? externalModuleName : firstArgument;
             var containsLexicalThis = !!(node.transformFlags & 8192);
             switch (compilerOptions.module) {
@@ -80799,20 +82694,20 @@
             var original = node.original;
             if (original && hasAssociatedEndOfDeclarationMarker(original)) {
                 var id = ts.getOriginalNodeId(node);
-                deferredExports[id] = appendExportStatement(deferredExports[id], factory.createIdentifier("default"), ts.visitNode(node.expression, moduleExpressionElementVisitor), node, true);
+                deferredExports[id] = appendExportStatement(deferredExports[id], factory.createIdentifier("default"), ts.visitNode(node.expression, visitor), node, true);
             }
             else {
-                statements = appendExportStatement(statements, factory.createIdentifier("default"), ts.visitNode(node.expression, moduleExpressionElementVisitor), node, true);
+                statements = appendExportStatement(statements, factory.createIdentifier("default"), ts.visitNode(node.expression, visitor), node, true);
             }
             return ts.singleOrMany(statements);
         }
         function visitFunctionDeclaration(node) {
             var statements;
             if (ts.hasSyntacticModifier(node, 1)) {
-                statements = ts.append(statements, ts.setOriginalNode(ts.setTextRange(factory.createFunctionDeclaration(undefined, ts.visitNodes(node.modifiers, modifierVisitor, ts.isModifier), node.asteriskToken, factory.getDeclarationName(node, true, true), undefined, ts.visitNodes(node.parameters, moduleExpressionElementVisitor), undefined, ts.visitEachChild(node.body, moduleExpressionElementVisitor, context)), node), node));
+                statements = ts.append(statements, ts.setOriginalNode(ts.setTextRange(factory.createFunctionDeclaration(undefined, ts.visitNodes(node.modifiers, modifierVisitor, ts.isModifier), node.asteriskToken, factory.getDeclarationName(node, true, true), undefined, ts.visitNodes(node.parameters, visitor), undefined, ts.visitEachChild(node.body, visitor, context)), node), node));
             }
             else {
-                statements = ts.append(statements, ts.visitEachChild(node, moduleExpressionElementVisitor, context));
+                statements = ts.append(statements, ts.visitEachChild(node, visitor, context));
             }
             if (hasAssociatedEndOfDeclarationMarker(node)) {
                 var id = ts.getOriginalNodeId(node);
@@ -80826,10 +82721,10 @@
         function visitClassDeclaration(node) {
             var statements;
             if (ts.hasSyntacticModifier(node, 1)) {
-                statements = ts.append(statements, ts.setOriginalNode(ts.setTextRange(factory.createClassDeclaration(undefined, ts.visitNodes(node.modifiers, modifierVisitor, ts.isModifier), factory.getDeclarationName(node, true, true), undefined, ts.visitNodes(node.heritageClauses, moduleExpressionElementVisitor), ts.visitNodes(node.members, moduleExpressionElementVisitor)), node), node));
+                statements = ts.append(statements, ts.setOriginalNode(ts.setTextRange(factory.createClassDeclaration(undefined, ts.visitNodes(node.modifiers, modifierVisitor, ts.isModifier), factory.getDeclarationName(node, true, true), undefined, ts.visitNodes(node.heritageClauses, visitor), ts.visitNodes(node.members, visitor)), node), node));
             }
             else {
-                statements = ts.append(statements, ts.visitEachChild(node, moduleExpressionElementVisitor, context));
+                statements = ts.append(statements, ts.visitEachChild(node, visitor, context));
             }
             if (hasAssociatedEndOfDeclarationMarker(node)) {
                 var id = ts.getOriginalNodeId(node);
@@ -80858,7 +82753,7 @@
                     else if (variable.initializer) {
                         if (!ts.isBindingPattern(variable.name) && (ts.isArrowFunction(variable.initializer) || ts.isFunctionExpression(variable.initializer) || ts.isClassExpression(variable.initializer))) {
                             var expression = factory.createAssignment(ts.setTextRange(factory.createPropertyAccessExpression(factory.createIdentifier("exports"), variable.name), variable.name), factory.createIdentifier(ts.getTextOfIdentifierOrLiteral(variable.name)));
-                            var updatedVariable = factory.createVariableDeclaration(variable.name, variable.exclamationToken, variable.type, ts.visitNode(variable.initializer, moduleExpressionElementVisitor));
+                            var updatedVariable = factory.createVariableDeclaration(variable.name, variable.exclamationToken, variable.type, ts.visitNode(variable.initializer, visitor));
                             variables = ts.append(variables, updatedVariable);
                             expressions = ts.append(expressions, expression);
                             removeCommentsOnExpressions = true;
@@ -80880,7 +82775,7 @@
                 }
             }
             else {
-                statements = ts.append(statements, ts.visitEachChild(node, moduleExpressionElementVisitor, context));
+                statements = ts.append(statements, ts.visitEachChild(node, visitor, context));
             }
             if (hasAssociatedEndOfDeclarationMarker(node)) {
                 var id = ts.getOriginalNodeId(node);
@@ -80895,8 +82790,8 @@
             var exportedNames = getExports(name);
             if (exportedNames) {
                 var expression = ts.isExportName(name) ? value : factory.createAssignment(name, value);
-                for (var _i = 0, exportedNames_1 = exportedNames; _i < exportedNames_1.length; _i++) {
-                    var exportName = exportedNames_1[_i];
+                for (var _i = 0, exportedNames_2 = exportedNames; _i < exportedNames_2.length; _i++) {
+                    var exportName = exportedNames_2[_i];
                     ts.setEmitFlags(expression, 4);
                     expression = createExportExpression(exportName, expression, location);
                 }
@@ -80906,14 +82801,14 @@
         }
         function transformInitializedVariable(node) {
             if (ts.isBindingPattern(node.name)) {
-                return ts.flattenDestructuringAssignment(ts.visitNode(node, moduleExpressionElementVisitor), undefined, context, 0, false, createAllExportExpressions);
+                return ts.flattenDestructuringAssignment(ts.visitNode(node, visitor), undefined, context, 0, false, createAllExportExpressions);
             }
             else {
-                return factory.createAssignment(ts.setTextRange(factory.createPropertyAccessExpression(factory.createIdentifier("exports"), node.name), node.name), node.initializer ? ts.visitNode(node.initializer, moduleExpressionElementVisitor) : factory.createVoidZero());
+                return factory.createAssignment(ts.setTextRange(factory.createPropertyAccessExpression(factory.createIdentifier("exports"), node.name), node.name), node.initializer ? ts.visitNode(node.initializer, visitor) : factory.createVoidZero());
             }
         }
         function visitMergeDeclarationMarker(node) {
-            if (hasAssociatedEndOfDeclarationMarker(node) && node.original.kind === 233) {
+            if (hasAssociatedEndOfDeclarationMarker(node) && node.original.kind === 235) {
                 var id = ts.getOriginalNodeId(node);
                 deferredExports[id] = appendExportsOfVariableStatement(deferredExports[id], node.original);
             }
@@ -80945,10 +82840,10 @@
             var namedBindings = importClause.namedBindings;
             if (namedBindings) {
                 switch (namedBindings.kind) {
-                    case 264:
+                    case 266:
                         statements = appendExportsOfDeclaration(statements, namedBindings);
                         break;
-                    case 265:
+                    case 267:
                         for (var _i = 0, _a = namedBindings.elements; _i < _a.length; _i++) {
                             var importBinding = _a[_i];
                             statements = appendExportsOfDeclaration(statements, importBinding, true);
@@ -81056,21 +82951,19 @@
         }
         function modifierVisitor(node) {
             switch (node.kind) {
-                case 92:
-                case 87:
+                case 93:
+                case 88:
                     return undefined;
             }
             return node;
         }
         function onEmitNode(hint, node, emitCallback) {
-            if (node.kind === 298) {
+            if (node.kind === 300) {
                 currentSourceFile = node;
                 currentModuleInfo = moduleInfoMap[ts.getOriginalNodeId(currentSourceFile)];
-                noSubstitution = [];
                 previousOnEmitNode(hint, node, emitCallback);
                 currentSourceFile = undefined;
                 currentModuleInfo = undefined;
-                noSubstitution = undefined;
             }
             else {
                 previousOnEmitNode(hint, node, emitCallback);
@@ -81103,13 +82996,34 @@
         }
         function substituteExpression(node) {
             switch (node.kind) {
-                case 78:
+                case 79:
                     return substituteExpressionIdentifier(node);
-                case 217:
+                case 206:
+                    return substituteCallExpression(node);
+                case 208:
+                    return substituteTaggedTemplateExpression(node);
+                case 219:
                     return substituteBinaryExpression(node);
-                case 216:
-                case 215:
-                    return substituteUnaryExpression(node);
+            }
+            return node;
+        }
+        function substituteCallExpression(node) {
+            if (ts.isIdentifier(node.expression)) {
+                var expression = substituteExpressionIdentifier(node.expression);
+                noSubstitution[ts.getNodeId(expression)] = true;
+                if (!ts.isIdentifier(expression)) {
+                    return ts.addEmitFlags(factory.updateCallExpression(node, expression, undefined, node.arguments), 536870912);
+                }
+            }
+            return node;
+        }
+        function substituteTaggedTemplateExpression(node) {
+            if (ts.isIdentifier(node.tag)) {
+                var tag = substituteExpressionIdentifier(node.tag);
+                noSubstitution[ts.getNodeId(tag)] = true;
+                if (!ts.isIdentifier(tag)) {
+                    return ts.addEmitFlags(factory.updateTaggedTemplateExpression(node, tag, undefined, node.template), 536870912);
+                }
             }
             return node;
         }
@@ -81124,7 +83038,7 @@
             }
             else if (!(ts.isGeneratedIdentifier(node) && !(node.autoGenerateFlags & 64)) && !ts.isLocalName(node)) {
                 var exportContainer = resolver.getReferencedExportContainer(node, ts.isExportName(node));
-                if (exportContainer && exportContainer.kind === 298) {
+                if (exportContainer && exportContainer.kind === 300) {
                     return ts.setTextRange(factory.createPropertyAccessExpression(factory.createIdentifier("exports"), factory.cloneNode(node)), node);
                 }
                 var importDeclaration = resolver.getReferencedImportDeclaration(node);
@@ -81149,37 +83063,10 @@
                 var exportedNames = getExports(node.left);
                 if (exportedNames) {
                     var expression = node;
-                    for (var _i = 0, exportedNames_2 = exportedNames; _i < exportedNames_2.length; _i++) {
-                        var exportName = exportedNames_2[_i];
-                        noSubstitution[ts.getNodeId(expression)] = true;
-                        expression = createExportExpression(exportName, expression, node);
-                    }
-                    return expression;
-                }
-            }
-            return node;
-        }
-        function substituteUnaryExpression(node) {
-            if ((node.operator === 45 || node.operator === 46)
-                && ts.isIdentifier(node.operand)
-                && !ts.isGeneratedIdentifier(node.operand)
-                && !ts.isLocalName(node.operand)
-                && !ts.isDeclarationNameOfEnumOrNamespace(node.operand)) {
-                var exportedNames = getExports(node.operand);
-                if (exportedNames) {
-                    var expression = node.kind === 216
-                        ? ts.setTextRange(factory.createPrefixUnaryExpression(node.operator, node.operand), node)
-                        : node;
                     for (var _i = 0, exportedNames_3 = exportedNames; _i < exportedNames_3.length; _i++) {
                         var exportName = exportedNames_3[_i];
                         noSubstitution[ts.getNodeId(expression)] = true;
-                        expression = createExportExpression(exportName, expression);
-                    }
-                    if (node.kind === 216) {
-                        noSubstitution[ts.getNodeId(expression)] = true;
-                        expression = node.operator === 45
-                            ? factory.createSubtract(expression, factory.createNumericLiteral(1))
-                            : factory.createAdd(expression, factory.createNumericLiteral(1));
+                        expression = createExportExpression(exportName, expression, node);
                     }
                     return expression;
                 }
@@ -81215,13 +83102,11 @@
         var previousOnEmitNode = context.onEmitNode;
         context.onSubstituteNode = onSubstituteNode;
         context.onEmitNode = onEmitNode;
-        context.enableSubstitution(78);
-        context.enableSubstitution(290);
-        context.enableSubstitution(217);
-        context.enableSubstitution(215);
-        context.enableSubstitution(216);
-        context.enableSubstitution(227);
-        context.enableEmitNotification(298);
+        context.enableSubstitution(79);
+        context.enableSubstitution(292);
+        context.enableSubstitution(219);
+        context.enableSubstitution(229);
+        context.enableEmitNotification(300);
         var moduleInfoMap = [];
         var deferredExports = [];
         var exportFunctionsMap = [];
@@ -81301,12 +83186,12 @@
             var statements = [];
             startLexicalEnvironment();
             var ensureUseStrict = ts.getStrictOptionValue(compilerOptions, "alwaysStrict") || (!compilerOptions.noImplicitUseStrict && ts.isExternalModule(currentSourceFile));
-            var statementOffset = factory.copyPrologue(node.statements, statements, ensureUseStrict, sourceElementVisitor);
+            var statementOffset = factory.copyPrologue(node.statements, statements, ensureUseStrict, topLevelVisitor);
             statements.push(factory.createVariableStatement(undefined, factory.createVariableDeclarationList([
                 factory.createVariableDeclaration("__moduleName", undefined, undefined, factory.createLogicalAnd(contextObject, factory.createPropertyAccessExpression(contextObject, "id")))
             ])));
-            ts.visitNode(moduleInfo.externalHelpersImportDeclaration, sourceElementVisitor, ts.isStatement);
-            var executeStatements = ts.visitNodes(node.statements, sourceElementVisitor, ts.isStatement, statementOffset);
+            ts.visitNode(moduleInfo.externalHelpersImportDeclaration, topLevelVisitor, ts.isStatement);
+            var executeStatements = ts.visitNodes(node.statements, topLevelVisitor, ts.isStatement, statementOffset);
             ts.addRange(statements, hoistedStatements);
             ts.insertStatementsAfterStandardPrologue(statements, endLexicalEnvironment());
             var exportStarFunction = addExportStarIfNeeded(statements);
@@ -81328,7 +83213,7 @@
                 var hasExportDeclarationWithExportClause = false;
                 for (var _i = 0, _a = moduleInfo.externalImports; _i < _a.length; _i++) {
                     var externalImport = _a[_i];
-                    if (externalImport.kind === 268 && externalImport.exportClause) {
+                    if (externalImport.kind === 270 && externalImport.exportClause) {
                         hasExportDeclarationWithExportClause = true;
                         break;
                     }
@@ -81389,15 +83274,15 @@
                     var entry = _b[_a];
                     var importVariableName = ts.getLocalNameForExternalImport(factory, entry, currentSourceFile);
                     switch (entry.kind) {
-                        case 262:
+                        case 264:
                             if (!entry.importClause) {
                                 break;
                             }
-                        case 261:
+                        case 263:
                             ts.Debug.assert(importVariableName !== undefined);
                             statements.push(factory.createExpressionStatement(factory.createAssignment(importVariableName, parameterName)));
                             break;
-                        case 268:
+                        case 270:
                             ts.Debug.assert(importVariableName !== undefined);
                             if (entry.exportClause) {
                                 if (ts.isNamedExports(entry.exportClause)) {
@@ -81425,18 +83310,18 @@
             }
             return factory.createArrayLiteralExpression(setters, true);
         }
-        function sourceElementVisitor(node) {
+        function topLevelVisitor(node) {
             switch (node.kind) {
-                case 262:
+                case 264:
                     return visitImportDeclaration(node);
-                case 261:
+                case 263:
                     return visitImportEqualsDeclaration(node);
-                case 268:
+                case 270:
                     return visitExportDeclaration(node);
-                case 267:
+                case 269:
                     return visitExportAssignment(node);
                 default:
-                    return nestedElementVisitor(node);
+                    return topLevelNestedVisitor(node);
             }
         }
         function visitImportDeclaration(node) {
@@ -81474,7 +83359,7 @@
             if (node.isExportEquals) {
                 return undefined;
             }
-            var expression = ts.visitNode(node.expression, destructuringAndImportCallVisitor, ts.isExpression);
+            var expression = ts.visitNode(node.expression, visitor, ts.isExpression);
             var original = node.original;
             if (original && hasAssociatedEndOfDeclarationMarker(original)) {
                 var id = ts.getOriginalNodeId(node);
@@ -81486,10 +83371,10 @@
         }
         function visitFunctionDeclaration(node) {
             if (ts.hasSyntacticModifier(node, 1)) {
-                hoistedStatements = ts.append(hoistedStatements, factory.updateFunctionDeclaration(node, node.decorators, ts.visitNodes(node.modifiers, modifierVisitor, ts.isModifier), node.asteriskToken, factory.getDeclarationName(node, true, true), undefined, ts.visitNodes(node.parameters, destructuringAndImportCallVisitor, ts.isParameterDeclaration), undefined, ts.visitNode(node.body, destructuringAndImportCallVisitor, ts.isBlock)));
+                hoistedStatements = ts.append(hoistedStatements, factory.updateFunctionDeclaration(node, node.decorators, ts.visitNodes(node.modifiers, modifierVisitor, ts.isModifier), node.asteriskToken, factory.getDeclarationName(node, true, true), undefined, ts.visitNodes(node.parameters, visitor, ts.isParameterDeclaration), undefined, ts.visitNode(node.body, visitor, ts.isBlock)));
             }
             else {
-                hoistedStatements = ts.append(hoistedStatements, ts.visitEachChild(node, destructuringAndImportCallVisitor, context));
+                hoistedStatements = ts.append(hoistedStatements, ts.visitEachChild(node, visitor, context));
             }
             if (hasAssociatedEndOfDeclarationMarker(node)) {
                 var id = ts.getOriginalNodeId(node);
@@ -81504,7 +83389,7 @@
             var statements;
             var name = factory.getLocalName(node);
             hoistVariableDeclaration(name);
-            statements = ts.append(statements, ts.setTextRange(factory.createExpressionStatement(factory.createAssignment(name, ts.setTextRange(factory.createClassExpression(ts.visitNodes(node.decorators, destructuringAndImportCallVisitor, ts.isDecorator), undefined, node.name, undefined, ts.visitNodes(node.heritageClauses, destructuringAndImportCallVisitor, ts.isHeritageClause), ts.visitNodes(node.members, destructuringAndImportCallVisitor, ts.isClassElement)), node))), node));
+            statements = ts.append(statements, ts.setTextRange(factory.createExpressionStatement(factory.createAssignment(name, ts.setTextRange(factory.createClassExpression(ts.visitNodes(node.decorators, visitor, ts.isDecorator), undefined, node.name, undefined, ts.visitNodes(node.heritageClauses, visitor, ts.isHeritageClause), ts.visitNodes(node.members, visitor, ts.isClassElement)), node))), node));
             if (hasAssociatedEndOfDeclarationMarker(node)) {
                 var id = ts.getOriginalNodeId(node);
                 deferredExports[id] = appendExportsOfHoistedDeclaration(deferredExports[id], node);
@@ -81516,7 +83401,7 @@
         }
         function visitVariableStatement(node) {
             if (!shouldHoistVariableDeclarationList(node.declarationList)) {
-                return ts.visitNode(node, destructuringAndImportCallVisitor, ts.isStatement);
+                return ts.visitNode(node, visitor, ts.isStatement);
             }
             var expressions;
             var isExportedDeclaration = ts.hasSyntacticModifier(node, 1);
@@ -81558,14 +83443,14 @@
         }
         function shouldHoistVariableDeclarationList(node) {
             return (ts.getEmitFlags(node) & 2097152) === 0
-                && (enclosingBlockScopedContainer.kind === 298
+                && (enclosingBlockScopedContainer.kind === 300
                     || (ts.getOriginalNode(node).flags & 3) === 0);
         }
         function transformInitializedVariable(node, isExportedDeclaration) {
             var createAssignment = isExportedDeclaration ? createExportedVariableAssignment : createNonExportedVariableAssignment;
             return ts.isBindingPattern(node.name)
-                ? ts.flattenDestructuringAssignment(node, destructuringAndImportCallVisitor, context, 0, false, createAssignment)
-                : node.initializer ? createAssignment(node.name, ts.visitNode(node.initializer, destructuringAndImportCallVisitor, ts.isExpression)) : node.name;
+                ? ts.flattenDestructuringAssignment(node, visitor, context, 0, false, createAssignment)
+                : node.initializer ? createAssignment(node.name, ts.visitNode(node.initializer, visitor, ts.isExpression)) : node.name;
         }
         function createExportedVariableAssignment(name, value, location) {
             return createVariableAssignment(name, value, location, true);
@@ -81580,7 +83465,7 @@
                 : preventSubstitution(ts.setTextRange(factory.createAssignment(name, value), location));
         }
         function visitMergeDeclarationMarker(node) {
-            if (hasAssociatedEndOfDeclarationMarker(node) && node.original.kind === 233) {
+            if (hasAssociatedEndOfDeclarationMarker(node) && node.original.kind === 235) {
                 var id = ts.getOriginalNodeId(node);
                 var isExportedDeclaration = ts.hasSyntacticModifier(node.original, 1);
                 deferredExports[id] = appendExportsOfVariableStatement(deferredExports[id], node.original, isExportedDeclaration);
@@ -81619,10 +83504,10 @@
             var namedBindings = importClause.namedBindings;
             if (namedBindings) {
                 switch (namedBindings.kind) {
-                    case 264:
+                    case 266:
                         statements = appendExportsOfDeclaration(statements, namedBindings);
                         break;
-                    case 265:
+                    case 267:
                         for (var _i = 0, _a = namedBindings.elements; _i < _a.length; _i++) {
                             var importBinding = _a[_i];
                             statements = appendExportsOfDeclaration(statements, importBinding);
@@ -81720,68 +83605,68 @@
             ts.setEmitFlags(value, ts.getEmitFlags(value) | 1536);
             return ts.setCommentRange(factory.createCallExpression(exportFunction, undefined, [exportName, value]), value);
         }
-        function nestedElementVisitor(node) {
+        function topLevelNestedVisitor(node) {
             switch (node.kind) {
-                case 233:
+                case 235:
                     return visitVariableStatement(node);
-                case 252:
+                case 254:
                     return visitFunctionDeclaration(node);
-                case 253:
+                case 255:
                     return visitClassDeclaration(node);
-                case 238:
-                    return visitForStatement(node);
-                case 239:
-                    return visitForInStatement(node);
                 case 240:
+                    return visitForStatement(node, true);
+                case 241:
+                    return visitForInStatement(node);
+                case 242:
                     return visitForOfStatement(node);
-                case 236:
+                case 238:
                     return visitDoStatement(node);
-                case 237:
+                case 239:
                     return visitWhileStatement(node);
-                case 246:
-                    return visitLabeledStatement(node);
-                case 244:
-                    return visitWithStatement(node);
-                case 245:
-                    return visitSwitchStatement(node);
-                case 259:
-                    return visitCaseBlock(node);
-                case 285:
-                    return visitCaseClause(node);
-                case 286:
-                    return visitDefaultClause(node);
                 case 248:
-                    return visitTryStatement(node);
+                    return visitLabeledStatement(node);
+                case 246:
+                    return visitWithStatement(node);
+                case 247:
+                    return visitSwitchStatement(node);
+                case 261:
+                    return visitCaseBlock(node);
+                case 287:
+                    return visitCaseClause(node);
                 case 288:
+                    return visitDefaultClause(node);
+                case 250:
+                    return visitTryStatement(node);
+                case 290:
                     return visitCatchClause(node);
-                case 231:
+                case 233:
                     return visitBlock(node);
-                case 342:
+                case 347:
                     return visitMergeDeclarationMarker(node);
-                case 343:
+                case 348:
                     return visitEndOfDeclarationMarker(node);
                 default:
-                    return destructuringAndImportCallVisitor(node);
+                    return visitor(node);
             }
         }
-        function visitForStatement(node) {
+        function visitForStatement(node, isTopLevel) {
             var savedEnclosingBlockScopedContainer = enclosingBlockScopedContainer;
             enclosingBlockScopedContainer = node;
-            node = factory.updateForStatement(node, node.initializer && visitForInitializer(node.initializer), ts.visitNode(node.condition, destructuringAndImportCallVisitor, ts.isExpression), ts.visitNode(node.incrementor, destructuringAndImportCallVisitor, ts.isExpression), ts.visitIterationBody(node.statement, nestedElementVisitor, context));
+            node = factory.updateForStatement(node, ts.visitNode(node.initializer, isTopLevel ? visitForInitializer : discardedValueVisitor, ts.isForInitializer), ts.visitNode(node.condition, visitor, ts.isExpression), ts.visitNode(node.incrementor, discardedValueVisitor, ts.isExpression), ts.visitIterationBody(node.statement, isTopLevel ? topLevelNestedVisitor : visitor, context));
             enclosingBlockScopedContainer = savedEnclosingBlockScopedContainer;
             return node;
         }
         function visitForInStatement(node) {
             var savedEnclosingBlockScopedContainer = enclosingBlockScopedContainer;
             enclosingBlockScopedContainer = node;
-            node = factory.updateForInStatement(node, visitForInitializer(node.initializer), ts.visitNode(node.expression, destructuringAndImportCallVisitor, ts.isExpression), ts.visitIterationBody(node.statement, nestedElementVisitor, context));
+            node = factory.updateForInStatement(node, visitForInitializer(node.initializer), ts.visitNode(node.expression, visitor, ts.isExpression), ts.visitIterationBody(node.statement, topLevelNestedVisitor, context));
             enclosingBlockScopedContainer = savedEnclosingBlockScopedContainer;
             return node;
         }
         function visitForOfStatement(node) {
             var savedEnclosingBlockScopedContainer = enclosingBlockScopedContainer;
             enclosingBlockScopedContainer = node;
-            node = factory.updateForOfStatement(node, node.awaitModifier, visitForInitializer(node.initializer), ts.visitNode(node.expression, destructuringAndImportCallVisitor, ts.isExpression), ts.visitIterationBody(node.statement, nestedElementVisitor, context));
+            node = factory.updateForOfStatement(node, node.awaitModifier, visitForInitializer(node.initializer), ts.visitNode(node.expression, visitor, ts.isExpression), ts.visitIterationBody(node.statement, topLevelNestedVisitor, context));
             enclosingBlockScopedContainer = savedEnclosingBlockScopedContainer;
             return node;
         }
@@ -81802,79 +83687,109 @@
                 return expressions ? factory.inlineExpressions(expressions) : factory.createOmittedExpression();
             }
             else {
-                return ts.visitEachChild(node, nestedElementVisitor, context);
+                return ts.visitNode(node, discardedValueVisitor, ts.isExpression);
             }
         }
         function visitDoStatement(node) {
-            return factory.updateDoStatement(node, ts.visitIterationBody(node.statement, nestedElementVisitor, context), ts.visitNode(node.expression, destructuringAndImportCallVisitor, ts.isExpression));
+            return factory.updateDoStatement(node, ts.visitIterationBody(node.statement, topLevelNestedVisitor, context), ts.visitNode(node.expression, visitor, ts.isExpression));
         }
         function visitWhileStatement(node) {
-            return factory.updateWhileStatement(node, ts.visitNode(node.expression, destructuringAndImportCallVisitor, ts.isExpression), ts.visitIterationBody(node.statement, nestedElementVisitor, context));
+            return factory.updateWhileStatement(node, ts.visitNode(node.expression, visitor, ts.isExpression), ts.visitIterationBody(node.statement, topLevelNestedVisitor, context));
         }
         function visitLabeledStatement(node) {
-            return factory.updateLabeledStatement(node, node.label, ts.visitNode(node.statement, nestedElementVisitor, ts.isStatement, factory.liftToBlock));
+            return factory.updateLabeledStatement(node, node.label, ts.visitNode(node.statement, topLevelNestedVisitor, ts.isStatement, factory.liftToBlock));
         }
         function visitWithStatement(node) {
-            return factory.updateWithStatement(node, ts.visitNode(node.expression, destructuringAndImportCallVisitor, ts.isExpression), ts.visitNode(node.statement, nestedElementVisitor, ts.isStatement, factory.liftToBlock));
+            return factory.updateWithStatement(node, ts.visitNode(node.expression, visitor, ts.isExpression), ts.visitNode(node.statement, topLevelNestedVisitor, ts.isStatement, factory.liftToBlock));
         }
         function visitSwitchStatement(node) {
-            return factory.updateSwitchStatement(node, ts.visitNode(node.expression, destructuringAndImportCallVisitor, ts.isExpression), ts.visitNode(node.caseBlock, nestedElementVisitor, ts.isCaseBlock));
+            return factory.updateSwitchStatement(node, ts.visitNode(node.expression, visitor, ts.isExpression), ts.visitNode(node.caseBlock, topLevelNestedVisitor, ts.isCaseBlock));
         }
         function visitCaseBlock(node) {
             var savedEnclosingBlockScopedContainer = enclosingBlockScopedContainer;
             enclosingBlockScopedContainer = node;
-            node = factory.updateCaseBlock(node, ts.visitNodes(node.clauses, nestedElementVisitor, ts.isCaseOrDefaultClause));
+            node = factory.updateCaseBlock(node, ts.visitNodes(node.clauses, topLevelNestedVisitor, ts.isCaseOrDefaultClause));
             enclosingBlockScopedContainer = savedEnclosingBlockScopedContainer;
             return node;
         }
         function visitCaseClause(node) {
-            return factory.updateCaseClause(node, ts.visitNode(node.expression, destructuringAndImportCallVisitor, ts.isExpression), ts.visitNodes(node.statements, nestedElementVisitor, ts.isStatement));
+            return factory.updateCaseClause(node, ts.visitNode(node.expression, visitor, ts.isExpression), ts.visitNodes(node.statements, topLevelNestedVisitor, ts.isStatement));
         }
         function visitDefaultClause(node) {
-            return ts.visitEachChild(node, nestedElementVisitor, context);
+            return ts.visitEachChild(node, topLevelNestedVisitor, context);
         }
         function visitTryStatement(node) {
-            return ts.visitEachChild(node, nestedElementVisitor, context);
+            return ts.visitEachChild(node, topLevelNestedVisitor, context);
         }
         function visitCatchClause(node) {
             var savedEnclosingBlockScopedContainer = enclosingBlockScopedContainer;
             enclosingBlockScopedContainer = node;
-            node = factory.updateCatchClause(node, node.variableDeclaration, ts.visitNode(node.block, nestedElementVisitor, ts.isBlock));
+            node = factory.updateCatchClause(node, node.variableDeclaration, ts.visitNode(node.block, topLevelNestedVisitor, ts.isBlock));
             enclosingBlockScopedContainer = savedEnclosingBlockScopedContainer;
             return node;
         }
         function visitBlock(node) {
             var savedEnclosingBlockScopedContainer = enclosingBlockScopedContainer;
             enclosingBlockScopedContainer = node;
-            node = ts.visitEachChild(node, nestedElementVisitor, context);
+            node = ts.visitEachChild(node, topLevelNestedVisitor, context);
             enclosingBlockScopedContainer = savedEnclosingBlockScopedContainer;
             return node;
         }
-        function destructuringAndImportCallVisitor(node) {
-            if (ts.isDestructuringAssignment(node)) {
-                return visitDestructuringAssignment(node);
-            }
-            else if (ts.isImportCall(node)) {
-                return visitImportCallExpression(node);
-            }
-            else if ((node.transformFlags & 2048) || (node.transformFlags & 4194304)) {
-                return ts.visitEachChild(node, destructuringAndImportCallVisitor, context);
-            }
-            else {
+        function visitorWorker(node, valueIsDiscarded) {
+            if (!(node.transformFlags & (2048 | 4194304 | 67108864))) {
                 return node;
             }
+            switch (node.kind) {
+                case 240:
+                    return visitForStatement(node, false);
+                case 236:
+                    return visitExpressionStatement(node);
+                case 210:
+                    return visitParenthesizedExpression(node, valueIsDiscarded);
+                case 345:
+                    return visitPartiallyEmittedExpression(node, valueIsDiscarded);
+                case 219:
+                    if (ts.isDestructuringAssignment(node)) {
+                        return visitDestructuringAssignment(node, valueIsDiscarded);
+                    }
+                    break;
+                case 206:
+                    if (ts.isImportCall(node)) {
+                        return visitImportCallExpression(node);
+                    }
+                    break;
+                case 217:
+                case 218:
+                    return visitPrefixOrPostfixUnaryExpression(node, valueIsDiscarded);
+            }
+            return ts.visitEachChild(node, visitor, context);
+        }
+        function visitor(node) {
+            return visitorWorker(node, false);
+        }
+        function discardedValueVisitor(node) {
+            return visitorWorker(node, true);
+        }
+        function visitExpressionStatement(node) {
+            return factory.updateExpressionStatement(node, ts.visitNode(node.expression, discardedValueVisitor, ts.isExpression));
+        }
+        function visitParenthesizedExpression(node, valueIsDiscarded) {
+            return factory.updateParenthesizedExpression(node, ts.visitNode(node.expression, valueIsDiscarded ? discardedValueVisitor : visitor, ts.isExpression));
+        }
+        function visitPartiallyEmittedExpression(node, valueIsDiscarded) {
+            return factory.updatePartiallyEmittedExpression(node, ts.visitNode(node.expression, valueIsDiscarded ? discardedValueVisitor : visitor, ts.isExpression));
         }
         function visitImportCallExpression(node) {
             var externalModuleName = ts.getExternalModuleNameLiteral(factory, node, currentSourceFile, host, resolver, compilerOptions);
-            var firstArgument = ts.visitNode(ts.firstOrUndefined(node.arguments), destructuringAndImportCallVisitor);
+            var firstArgument = ts.visitNode(ts.firstOrUndefined(node.arguments), visitor);
             var argument = externalModuleName && (!firstArgument || !ts.isStringLiteral(firstArgument) || firstArgument.text !== externalModuleName.text) ? externalModuleName : firstArgument;
             return factory.createCallExpression(factory.createPropertyAccessExpression(contextObject, factory.createIdentifier("import")), undefined, argument ? [argument] : []);
         }
-        function visitDestructuringAssignment(node) {
+        function visitDestructuringAssignment(node, valueIsDiscarded) {
             if (hasExportedReferenceInDestructuringTarget(node.left)) {
-                return ts.flattenDestructuringAssignment(node, destructuringAndImportCallVisitor, context, 0, true);
+                return ts.flattenDestructuringAssignment(node, visitor, context, 0, !valueIsDiscarded);
             }
-            return ts.visitEachChild(node, destructuringAndImportCallVisitor, context);
+            return ts.visitEachChild(node, visitor, context);
         }
         function hasExportedReferenceInDestructuringTarget(node) {
             if (ts.isAssignmentExpression(node, true)) {
@@ -81897,22 +83812,58 @@
             }
             else if (ts.isIdentifier(node)) {
                 var container = resolver.getReferencedExportContainer(node);
-                return container !== undefined && container.kind === 298;
+                return container !== undefined && container.kind === 300;
             }
             else {
                 return false;
             }
         }
+        function visitPrefixOrPostfixUnaryExpression(node, valueIsDiscarded) {
+            if ((node.operator === 45 || node.operator === 46)
+                && ts.isIdentifier(node.operand)
+                && !ts.isGeneratedIdentifier(node.operand)
+                && !ts.isLocalName(node.operand)
+                && !ts.isDeclarationNameOfEnumOrNamespace(node.operand)) {
+                var exportedNames = getExports(node.operand);
+                if (exportedNames) {
+                    var temp = void 0;
+                    var expression = ts.visitNode(node.operand, visitor, ts.isExpression);
+                    if (ts.isPrefixUnaryExpression(node)) {
+                        expression = factory.updatePrefixUnaryExpression(node, expression);
+                    }
+                    else {
+                        expression = factory.updatePostfixUnaryExpression(node, expression);
+                        if (!valueIsDiscarded) {
+                            temp = factory.createTempVariable(hoistVariableDeclaration);
+                            expression = factory.createAssignment(temp, expression);
+                            ts.setTextRange(expression, node);
+                        }
+                        expression = factory.createComma(expression, factory.cloneNode(node.operand));
+                        ts.setTextRange(expression, node);
+                    }
+                    for (var _i = 0, exportedNames_4 = exportedNames; _i < exportedNames_4.length; _i++) {
+                        var exportName = exportedNames_4[_i];
+                        expression = createExportExpression(exportName, preventSubstitution(expression));
+                    }
+                    if (temp) {
+                        expression = factory.createComma(expression, temp);
+                        ts.setTextRange(expression, node);
+                    }
+                    return expression;
+                }
+            }
+            return ts.visitEachChild(node, visitor, context);
+        }
         function modifierVisitor(node) {
             switch (node.kind) {
-                case 92:
-                case 87:
+                case 93:
+                case 88:
                     return undefined;
             }
             return node;
         }
         function onEmitNode(hint, node, emitCallback) {
-            if (node.kind === 298) {
+            if (node.kind === 300) {
                 var id = ts.getOriginalNodeId(node);
                 currentSourceFile = node;
                 moduleInfo = moduleInfoMap[id];
@@ -81948,7 +83899,7 @@
         }
         function substituteUnspecified(node) {
             switch (node.kind) {
-                case 290:
+                case 292:
                     return substituteShorthandPropertyAssignment(node);
             }
             return node;
@@ -81971,14 +83922,11 @@
         }
         function substituteExpression(node) {
             switch (node.kind) {
-                case 78:
+                case 79:
                     return substituteExpressionIdentifier(node);
-                case 217:
+                case 219:
                     return substituteBinaryExpression(node);
-                case 215:
-                case 216:
-                    return substituteUnaryExpression(node);
-                case 227:
+                case 229:
                     return substituteMetaProperty(node);
             }
             return node;
@@ -82014,35 +83962,10 @@
                 var exportedNames = getExports(node.left);
                 if (exportedNames) {
                     var expression = node;
-                    for (var _i = 0, exportedNames_4 = exportedNames; _i < exportedNames_4.length; _i++) {
-                        var exportName = exportedNames_4[_i];
-                        expression = createExportExpression(exportName, preventSubstitution(expression));
-                    }
-                    return expression;
-                }
-            }
-            return node;
-        }
-        function substituteUnaryExpression(node) {
-            if ((node.operator === 45 || node.operator === 46)
-                && ts.isIdentifier(node.operand)
-                && !ts.isGeneratedIdentifier(node.operand)
-                && !ts.isLocalName(node.operand)
-                && !ts.isDeclarationNameOfEnumOrNamespace(node.operand)) {
-                var exportedNames = getExports(node.operand);
-                if (exportedNames) {
-                    var expression = node.kind === 216
-                        ? ts.setTextRange(factory.createPrefixUnaryExpression(node.operator, node.operand), node)
-                        : node;
                     for (var _i = 0, exportedNames_5 = exportedNames; _i < exportedNames_5.length; _i++) {
                         var exportName = exportedNames_5[_i];
                         expression = createExportExpression(exportName, preventSubstitution(expression));
                     }
-                    if (node.kind === 216) {
-                        expression = node.operator === 45
-                            ? factory.createSubtract(preventSubstitution(expression), factory.createNumericLiteral(1))
-                            : factory.createAdd(preventSubstitution(expression), factory.createNumericLiteral(1));
-                    }
                     return expression;
                 }
             }
@@ -82061,7 +83984,7 @@
                     || resolver.getReferencedValueDeclaration(name);
                 if (valueDeclaration) {
                     var exportContainer = resolver.getReferencedExportContainer(name, false);
-                    if (exportContainer && exportContainer.kind === 298) {
+                    if (exportContainer && exportContainer.kind === 300) {
                         exportedNames = ts.append(exportedNames, factory.getDeclarationName(valueDeclaration));
                     }
                     exportedNames = ts.addRange(exportedNames, moduleInfo && moduleInfo.exportedBindings[ts.getOriginalNodeId(valueDeclaration)]);
@@ -82090,8 +84013,8 @@
         var previousOnSubstituteNode = context.onSubstituteNode;
         context.onEmitNode = onEmitNode;
         context.onSubstituteNode = onSubstituteNode;
-        context.enableEmitNotification(298);
-        context.enableSubstitution(78);
+        context.enableEmitNotification(300);
+        context.enableSubstitution(79);
         var helperNameSubstitutions;
         return ts.chainBundle(context, transformSourceFile);
         function transformSourceFile(node) {
@@ -82103,7 +84026,7 @@
                 if (!ts.isExternalModule(node) || ts.some(result.statements, ts.isExternalModuleIndicator)) {
                     return result;
                 }
-                return factory.updateSourceFile(result, ts.setTextRange(factory.createNodeArray(__spreadArray(__spreadArray([], result.statements), [ts.createEmptyExports(factory)])), result.statements));
+                return factory.updateSourceFile(result, ts.setTextRange(factory.createNodeArray(__spreadArray(__spreadArray([], result.statements, true), [ts.createEmptyExports(factory)], false)), result.statements));
             }
             return node;
         }
@@ -82122,11 +84045,11 @@
         }
         function visitor(node) {
             switch (node.kind) {
-                case 261:
+                case 263:
                     return undefined;
-                case 267:
+                case 269:
                     return visitExportAssignment(node);
-                case 268:
+                case 270:
                     var exportDecl = node;
                     return visitExportDeclaration(exportDecl);
             }
@@ -82224,14 +84147,14 @@
             } : undefined;
         }
         function getAccessorNameVisibilityDiagnosticMessage(symbolAccessibilityResult) {
-            if (ts.hasSyntacticModifier(node, 32)) {
+            if (ts.isStatic(node)) {
                 return symbolAccessibilityResult.errorModuleName ?
                     symbolAccessibilityResult.accessibility === 2 ?
                         ts.Diagnostics.Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named :
                         ts.Diagnostics.Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2 :
                     ts.Diagnostics.Public_static_property_0_of_exported_class_has_or_is_using_private_name_1;
             }
-            else if (node.parent.kind === 253) {
+            else if (node.parent.kind === 255) {
                 return symbolAccessibilityResult.errorModuleName ?
                     symbolAccessibilityResult.accessibility === 2 ?
                         ts.Diagnostics.Public_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named :
@@ -82253,14 +84176,14 @@
             } : undefined;
         }
         function getMethodNameVisibilityDiagnosticMessage(symbolAccessibilityResult) {
-            if (ts.hasSyntacticModifier(node, 32)) {
+            if (ts.isStatic(node)) {
                 return symbolAccessibilityResult.errorModuleName ?
                     symbolAccessibilityResult.accessibility === 2 ?
                         ts.Diagnostics.Public_static_method_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named :
                         ts.Diagnostics.Public_static_method_0_of_exported_class_has_or_is_using_name_1_from_private_module_2 :
                     ts.Diagnostics.Public_static_method_0_of_exported_class_has_or_is_using_private_name_1;
             }
-            else if (node.parent.kind === 253) {
+            else if (node.parent.kind === 255) {
                 return symbolAccessibilityResult.errorModuleName ?
                     symbolAccessibilityResult.accessibility === 2 ?
                         ts.Diagnostics.Public_method_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named :
@@ -82307,23 +84230,23 @@
             return ts.Debug.assertNever(node, "Attempted to set a declaration diagnostic context for unhandled node kind: " + ts.SyntaxKind[node.kind]);
         }
         function getVariableDeclarationTypeVisibilityDiagnosticMessage(symbolAccessibilityResult) {
-            if (node.kind === 250 || node.kind === 199) {
+            if (node.kind === 252 || node.kind === 201) {
                 return symbolAccessibilityResult.errorModuleName ?
                     symbolAccessibilityResult.accessibility === 2 ?
                         ts.Diagnostics.Exported_variable_0_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named :
                         ts.Diagnostics.Exported_variable_0_has_or_is_using_name_1_from_private_module_2 :
                     ts.Diagnostics.Exported_variable_0_has_or_is_using_private_name_1;
             }
-            else if (node.kind === 164 || node.kind === 202 || node.kind === 163 ||
-                (node.kind === 161 && ts.hasSyntacticModifier(node.parent, 8))) {
-                if (ts.hasSyntacticModifier(node, 32)) {
+            else if (node.kind === 165 || node.kind === 204 || node.kind === 164 ||
+                (node.kind === 162 && ts.hasSyntacticModifier(node.parent, 8))) {
+                if (ts.isStatic(node)) {
                     return symbolAccessibilityResult.errorModuleName ?
                         symbolAccessibilityResult.accessibility === 2 ?
                             ts.Diagnostics.Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named :
                             ts.Diagnostics.Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2 :
                         ts.Diagnostics.Public_static_property_0_of_exported_class_has_or_is_using_private_name_1;
                 }
-                else if (node.parent.kind === 253 || node.kind === 161) {
+                else if (node.parent.kind === 255 || node.kind === 162) {
                     return symbolAccessibilityResult.errorModuleName ?
                         symbolAccessibilityResult.accessibility === 2 ?
                             ts.Diagnostics.Public_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named :
@@ -82347,8 +84270,8 @@
         }
         function getAccessorDeclarationTypeVisibilityError(symbolAccessibilityResult) {
             var diagnosticMessage;
-            if (node.kind === 169) {
-                if (ts.hasSyntacticModifier(node, 32)) {
+            if (node.kind === 171) {
+                if (ts.isStatic(node)) {
                     diagnosticMessage = symbolAccessibilityResult.errorModuleName ?
                         ts.Diagnostics.Parameter_type_of_public_static_setter_0_from_exported_class_has_or_is_using_name_1_from_private_module_2 :
                         ts.Diagnostics.Parameter_type_of_public_static_setter_0_from_exported_class_has_or_is_using_private_name_1;
@@ -82360,7 +84283,7 @@
                 }
             }
             else {
-                if (ts.hasSyntacticModifier(node, 32)) {
+                if (ts.isStatic(node)) {
                     diagnosticMessage = symbolAccessibilityResult.errorModuleName ?
                         symbolAccessibilityResult.accessibility === 2 ?
                             ts.Diagnostics.Return_type_of_public_static_getter_0_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named :
@@ -82384,31 +84307,31 @@
         function getReturnTypeVisibilityError(symbolAccessibilityResult) {
             var diagnosticMessage;
             switch (node.kind) {
-                case 171:
+                case 173:
                     diagnosticMessage = symbolAccessibilityResult.errorModuleName ?
                         ts.Diagnostics.Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1 :
                         ts.Diagnostics.Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_0;
                     break;
-                case 170:
+                case 172:
                     diagnosticMessage = symbolAccessibilityResult.errorModuleName ?
                         ts.Diagnostics.Return_type_of_call_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1 :
                         ts.Diagnostics.Return_type_of_call_signature_from_exported_interface_has_or_is_using_private_name_0;
                     break;
-                case 172:
+                case 174:
                     diagnosticMessage = symbolAccessibilityResult.errorModuleName ?
                         ts.Diagnostics.Return_type_of_index_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1 :
                         ts.Diagnostics.Return_type_of_index_signature_from_exported_interface_has_or_is_using_private_name_0;
                     break;
+                case 167:
                 case 166:
-                case 165:
-                    if (ts.hasSyntacticModifier(node, 32)) {
+                    if (ts.isStatic(node)) {
                         diagnosticMessage = symbolAccessibilityResult.errorModuleName ?
                             symbolAccessibilityResult.accessibility === 2 ?
                                 ts.Diagnostics.Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named :
                                 ts.Diagnostics.Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_private_module_1 :
                             ts.Diagnostics.Return_type_of_public_static_method_from_exported_class_has_or_is_using_private_name_0;
                     }
-                    else if (node.parent.kind === 253) {
+                    else if (node.parent.kind === 255) {
                         diagnosticMessage = symbolAccessibilityResult.errorModuleName ?
                             symbolAccessibilityResult.accessibility === 2 ?
                                 ts.Diagnostics.Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named :
@@ -82421,7 +84344,7 @@
                             ts.Diagnostics.Return_type_of_method_from_exported_interface_has_or_is_using_private_name_0;
                     }
                     break;
-                case 252:
+                case 254:
                     diagnosticMessage = symbolAccessibilityResult.errorModuleName ?
                         symbolAccessibilityResult.accessibility === 2 ?
                             ts.Diagnostics.Return_type_of_exported_function_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named :
@@ -82446,35 +84369,35 @@
         }
         function getParameterDeclarationTypeVisibilityDiagnosticMessage(symbolAccessibilityResult) {
             switch (node.parent.kind) {
-                case 167:
+                case 169:
                     return symbolAccessibilityResult.errorModuleName ?
                         symbolAccessibilityResult.accessibility === 2 ?
                             ts.Diagnostics.Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named :
                             ts.Diagnostics.Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_private_module_2 :
                         ts.Diagnostics.Parameter_0_of_constructor_from_exported_class_has_or_is_using_private_name_1;
-                case 171:
-                case 176:
+                case 173:
+                case 178:
                     return symbolAccessibilityResult.errorModuleName ?
                         ts.Diagnostics.Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2 :
                         ts.Diagnostics.Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1;
-                case 170:
+                case 172:
                     return symbolAccessibilityResult.errorModuleName ?
                         ts.Diagnostics.Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2 :
                         ts.Diagnostics.Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1;
-                case 172:
+                case 174:
                     return symbolAccessibilityResult.errorModuleName ?
                         ts.Diagnostics.Parameter_0_of_index_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2 :
                         ts.Diagnostics.Parameter_0_of_index_signature_from_exported_interface_has_or_is_using_private_name_1;
+                case 167:
                 case 166:
-                case 165:
-                    if (ts.hasSyntacticModifier(node.parent, 32)) {
+                    if (ts.isStatic(node.parent)) {
                         return symbolAccessibilityResult.errorModuleName ?
                             symbolAccessibilityResult.accessibility === 2 ?
                                 ts.Diagnostics.Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named :
                                 ts.Diagnostics.Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_private_module_2 :
                             ts.Diagnostics.Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1;
                     }
-                    else if (node.parent.parent.kind === 253) {
+                    else if (node.parent.parent.kind === 255) {
                         return symbolAccessibilityResult.errorModuleName ?
                             symbolAccessibilityResult.accessibility === 2 ?
                                 ts.Diagnostics.Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named :
@@ -82486,15 +84409,15 @@
                             ts.Diagnostics.Parameter_0_of_method_from_exported_interface_has_or_is_using_name_1_from_private_module_2 :
                             ts.Diagnostics.Parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1;
                     }
-                case 252:
-                case 175:
+                case 254:
+                case 177:
                     return symbolAccessibilityResult.errorModuleName ?
                         symbolAccessibilityResult.accessibility === 2 ?
                             ts.Diagnostics.Parameter_0_of_exported_function_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named :
                             ts.Diagnostics.Parameter_0_of_exported_function_has_or_is_using_name_1_from_private_module_2 :
                         ts.Diagnostics.Parameter_0_of_exported_function_has_or_is_using_private_name_1;
-                case 169:
-                case 168:
+                case 171:
+                case 170:
                     return symbolAccessibilityResult.errorModuleName ?
                         symbolAccessibilityResult.accessibility === 2 ?
                             ts.Diagnostics.Parameter_0_of_accessor_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named :
@@ -82507,39 +84430,39 @@
         function getTypeParameterConstraintVisibilityError() {
             var diagnosticMessage;
             switch (node.parent.kind) {
-                case 253:
+                case 255:
                     diagnosticMessage = ts.Diagnostics.Type_parameter_0_of_exported_class_has_or_is_using_private_name_1;
                     break;
-                case 254:
+                case 256:
                     diagnosticMessage = ts.Diagnostics.Type_parameter_0_of_exported_interface_has_or_is_using_private_name_1;
                     break;
-                case 191:
+                case 193:
                     diagnosticMessage = ts.Diagnostics.Type_parameter_0_of_exported_mapped_object_type_is_using_private_name_1;
                     break;
-                case 176:
-                case 171:
+                case 178:
+                case 173:
                     diagnosticMessage = ts.Diagnostics.Type_parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1;
                     break;
-                case 170:
+                case 172:
                     diagnosticMessage = ts.Diagnostics.Type_parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1;
                     break;
+                case 167:
                 case 166:
-                case 165:
-                    if (ts.hasSyntacticModifier(node.parent, 32)) {
+                    if (ts.isStatic(node.parent)) {
                         diagnosticMessage = ts.Diagnostics.Type_parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1;
                     }
-                    else if (node.parent.parent.kind === 253) {
+                    else if (node.parent.parent.kind === 255) {
                         diagnosticMessage = ts.Diagnostics.Type_parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1;
                     }
                     else {
                         diagnosticMessage = ts.Diagnostics.Type_parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1;
                     }
                     break;
-                case 175:
-                case 252:
+                case 177:
+                case 254:
                     diagnosticMessage = ts.Diagnostics.Type_parameter_0_of_exported_function_has_or_is_using_private_name_1;
                     break;
-                case 255:
+                case 257:
                     diagnosticMessage = ts.Diagnostics.Type_parameter_0_of_exported_type_alias_has_or_is_using_private_name_1;
                     break;
                 default:
@@ -82554,7 +84477,7 @@
         function getHeritageClauseVisibilityError() {
             var diagnosticMessage;
             if (ts.isClassDeclaration(node.parent.parent)) {
-                diagnosticMessage = ts.isHeritageClause(node.parent) && node.parent.token === 116 ?
+                diagnosticMessage = ts.isHeritageClause(node.parent) && node.parent.token === 117 ?
                     ts.Diagnostics.Implements_clause_of_exported_class_0_has_or_is_using_private_name_1 :
                     node.parent.parent.name ? ts.Diagnostics.extends_clause_of_exported_class_0_has_or_is_using_private_name_1 :
                         ts.Diagnostics.extends_clause_of_exported_class_has_or_is_using_private_name_0;
@@ -82601,7 +84524,7 @@
     }
     function isInternalDeclaration(node, currentSourceFile) {
         var parseTreeNode = ts.getParseTreeNode(node);
-        if (parseTreeNode && parseTreeNode.kind === 161) {
+        if (parseTreeNode && parseTreeNode.kind === 162) {
             var paramIdx = parseTreeNode.parent.parameters.indexOf(parseTreeNode);
             var previousSibling = paramIdx > 0 ? parseTreeNode.parent.parameters[paramIdx - 1] : undefined;
             var text = currentSourceFile.text;
@@ -82650,7 +84573,8 @@
             moduleResolverHost: host,
             trackReferencedAmbientModule: trackReferencedAmbientModule,
             trackExternalModuleSymbolOfImportTypeNode: trackExternalModuleSymbolOfImportTypeNode,
-            reportNonlocalAugmentation: reportNonlocalAugmentation
+            reportNonlocalAugmentation: reportNonlocalAugmentation,
+            reportNonSerializableProperty: reportNonSerializableProperty
         };
         var errorNameNode;
         var errorFallbackNode;
@@ -82703,8 +84627,10 @@
                     else {
                         context.addDiagnostic(ts.createDiagnosticForNode(symbolAccessibilityResult.errorNode || errorInfo.errorNode, errorInfo.diagnosticMessage, symbolAccessibilityResult.errorSymbolName, symbolAccessibilityResult.errorModuleName));
                     }
+                    return true;
                 }
             }
+            return false;
         }
         function trackExternalModuleSymbolOfImportTypeNode(symbol) {
             if (!isBundledEmit) {
@@ -82713,33 +84639,40 @@
         }
         function trackSymbol(symbol, enclosingDeclaration, meaning) {
             if (symbol.flags & 262144)
-                return;
-            handleSymbolAccessibilityError(resolver.isSymbolAccessible(symbol, enclosingDeclaration, meaning, true));
+                return false;
+            var issuedDiagnostic = handleSymbolAccessibilityError(resolver.isSymbolAccessible(symbol, enclosingDeclaration, meaning, true));
             recordTypeReferenceDirectivesIfNecessary(resolver.getTypeReferenceDirectivesForSymbol(symbol, meaning));
+            return issuedDiagnostic;
         }
         function reportPrivateInBaseOfClassExpression(propertyName) {
             if (errorNameNode || errorFallbackNode) {
                 context.addDiagnostic(ts.createDiagnosticForNode((errorNameNode || errorFallbackNode), ts.Diagnostics.Property_0_of_exported_class_expression_may_not_be_private_or_protected, propertyName));
             }
         }
+        function errorDeclarationNameWithFallback() {
+            return errorNameNode ? ts.declarationNameToString(errorNameNode) :
+                errorFallbackNode && ts.getNameOfDeclaration(errorFallbackNode) ? ts.declarationNameToString(ts.getNameOfDeclaration(errorFallbackNode)) :
+                    errorFallbackNode && ts.isExportAssignment(errorFallbackNode) ? errorFallbackNode.isExportEquals ? "export=" : "default" :
+                        "(Missing)";
+        }
         function reportInaccessibleUniqueSymbolError() {
-            if (errorNameNode) {
-                context.addDiagnostic(ts.createDiagnosticForNode(errorNameNode, ts.Diagnostics.The_inferred_type_of_0_references_an_inaccessible_1_type_A_type_annotation_is_necessary, ts.declarationNameToString(errorNameNode), "unique symbol"));
+            if (errorNameNode || errorFallbackNode) {
+                context.addDiagnostic(ts.createDiagnosticForNode((errorNameNode || errorFallbackNode), ts.Diagnostics.The_inferred_type_of_0_references_an_inaccessible_1_type_A_type_annotation_is_necessary, errorDeclarationNameWithFallback(), "unique symbol"));
             }
         }
         function reportCyclicStructureError() {
-            if (errorNameNode) {
-                context.addDiagnostic(ts.createDiagnosticForNode(errorNameNode, ts.Diagnostics.The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialized_A_type_annotation_is_necessary, ts.declarationNameToString(errorNameNode)));
+            if (errorNameNode || errorFallbackNode) {
+                context.addDiagnostic(ts.createDiagnosticForNode((errorNameNode || errorFallbackNode), ts.Diagnostics.The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialized_A_type_annotation_is_necessary, errorDeclarationNameWithFallback()));
             }
         }
         function reportInaccessibleThisError() {
-            if (errorNameNode) {
-                context.addDiagnostic(ts.createDiagnosticForNode(errorNameNode, ts.Diagnostics.The_inferred_type_of_0_references_an_inaccessible_1_type_A_type_annotation_is_necessary, ts.declarationNameToString(errorNameNode), "this"));
+            if (errorNameNode || errorFallbackNode) {
+                context.addDiagnostic(ts.createDiagnosticForNode((errorNameNode || errorFallbackNode), ts.Diagnostics.The_inferred_type_of_0_references_an_inaccessible_1_type_A_type_annotation_is_necessary, errorDeclarationNameWithFallback(), "this"));
             }
         }
         function reportLikelyUnsafeImportRequiredError(specifier) {
-            if (errorNameNode) {
-                context.addDiagnostic(ts.createDiagnosticForNode(errorNameNode, ts.Diagnostics.The_inferred_type_of_0_cannot_be_named_without_a_reference_to_1_This_is_likely_not_portable_A_type_annotation_is_necessary, ts.declarationNameToString(errorNameNode), specifier));
+            if (errorNameNode || errorFallbackNode) {
+                context.addDiagnostic(ts.createDiagnosticForNode((errorNameNode || errorFallbackNode), ts.Diagnostics.The_inferred_type_of_0_cannot_be_named_without_a_reference_to_1_This_is_likely_not_portable_A_type_annotation_is_necessary, errorDeclarationNameWithFallback(), specifier));
             }
         }
         function reportTruncationError() {
@@ -82758,6 +84691,11 @@
                 }
             }
         }
+        function reportNonSerializableProperty(propertyName) {
+            if (errorNameNode || errorFallbackNode) {
+                context.addDiagnostic(ts.createDiagnosticForNode((errorNameNode || errorFallbackNode), ts.Diagnostics.The_type_of_this_node_cannot_be_serialized_because_its_property_0_cannot_be_serialized, propertyName));
+            }
+        }
         function transformDeclarationsForJS(sourceFile, bundled) {
             var oldDiag = getSymbolAccessibilityDiagnostic;
             getSymbolAccessibilityDiagnostic = function (s) { return (s.errorNode && ts.canProduceDiagnostics(s.errorNode) ? ts.createGetSymbolAccessibilityDiagnosticForNode(s.errorNode)(s) : ({
@@ -82771,10 +84709,10 @@
             return result;
         }
         function transformRoot(node) {
-            if (node.kind === 298 && node.isDeclarationFile) {
+            if (node.kind === 300 && node.isDeclarationFile) {
                 return node;
             }
-            if (node.kind === 299) {
+            if (node.kind === 301) {
                 isBundledEmit = true;
                 refs = new ts.Map();
                 libs = new ts.Map();
@@ -82797,14 +84735,14 @@
                         resultHasExternalModuleIndicator = false;
                         needsDeclare = false;
                         var statements = ts.isSourceFileJS(sourceFile) ? factory.createNodeArray(transformDeclarationsForJS(sourceFile, true)) : ts.visitNodes(sourceFile.statements, visitDeclarationStatements);
-                        var newFile = factory.updateSourceFile(sourceFile, [factory.createModuleDeclaration([], [factory.createModifier(133)], factory.createStringLiteral(ts.getResolvedExternalModuleName(context.getEmitHost(), sourceFile)), factory.createModuleBlock(ts.setTextRange(factory.createNodeArray(transformAndReplaceLatePaintedStatements(statements)), sourceFile.statements)))], true, [], [], false, []);
+                        var newFile = factory.updateSourceFile(sourceFile, [factory.createModuleDeclaration([], [factory.createModifier(134)], factory.createStringLiteral(ts.getResolvedExternalModuleName(context.getEmitHost(), sourceFile)), factory.createModuleBlock(ts.setTextRange(factory.createNodeArray(transformAndReplaceLatePaintedStatements(statements)), sourceFile.statements)))], true, [], [], false, []);
                         return newFile;
                     }
                     needsDeclare = true;
                     var updated = ts.isSourceFileJS(sourceFile) ? factory.createNodeArray(transformDeclarationsForJS(sourceFile)) : ts.visitNodes(sourceFile.statements, visitDeclarationStatements);
                     return factory.updateSourceFile(sourceFile, transformAndReplaceLatePaintedStatements(updated), true, [], [], false, []);
                 }), ts.mapDefined(node.prepends, function (prepend) {
-                    if (prepend.kind === 301) {
+                    if (prepend.kind === 303) {
                         var sourceFile = ts.createUnparsedSourceFile(prepend, "dts", stripInternal);
                         hasNoDefaultLib_1 = hasNoDefaultLib_1 || !!sourceFile.hasNoDefaultLib;
                         collectReferences(sourceFile, refs);
@@ -82852,7 +84790,7 @@
                 refs.forEach(referenceVisitor);
                 emittedImports = ts.filter(combinedStatements, ts.isAnyImportSyntax);
                 if (ts.isExternalModule(node) && (!resultHasExternalModuleIndicator || (needsScopeFixMarker && !resultHasScopeMarker))) {
-                    combinedStatements = ts.setTextRange(factory.createNodeArray(__spreadArray(__spreadArray([], combinedStatements), [ts.createEmptyExports(factory)])), combinedStatements);
+                    combinedStatements = ts.setTextRange(factory.createNodeArray(__spreadArray(__spreadArray([], combinedStatements, true), [ts.createEmptyExports(factory)], false)), combinedStatements);
                 }
             }
             var updated = factory.updateSourceFile(node, combinedStatements, true, references, getFileReferencesForUsedTypeReferences(), node.hasNoDefaultLib, getLibReferences());
@@ -82894,7 +84832,7 @@
                         declFileName = paths.declarationFilePath || paths.jsFilePath || file.fileName;
                     }
                     if (declFileName) {
-                        var specifier = ts.moduleSpecifiers.getModuleSpecifier(options, currentSourceFile, ts.toPath(outputFilePath, host.getCurrentDirectory(), host.getCanonicalFileName), ts.toPath(declFileName, host.getCurrentDirectory(), host.getCanonicalFileName), host, undefined);
+                        var specifier = ts.moduleSpecifiers.getModuleSpecifier(options, currentSourceFile, ts.toPath(outputFilePath, host.getCurrentDirectory(), host.getCanonicalFileName), ts.toPath(declFileName, host.getCurrentDirectory(), host.getCanonicalFileName), host);
                         if (!ts.pathIsRelative(specifier)) {
                             recordTypeReferenceDirectivesIfNecessary([specifier]);
                             return;
@@ -82932,11 +84870,11 @@
             return ret;
         }
         function filterBindingPatternInitializers(name) {
-            if (name.kind === 78) {
+            if (name.kind === 79) {
                 return name;
             }
             else {
-                if (name.kind === 198) {
+                if (name.kind === 200) {
                     return factory.updateArrayBindingPattern(name, ts.visitNodes(name.elements, visitBindingElement));
                 }
                 else {
@@ -82944,7 +84882,7 @@
                 }
             }
             function visitBindingElement(elem) {
-                if (elem.kind === 223) {
+                if (elem.kind === 225) {
                     return elem;
                 }
                 return factory.updateBindingElement(elem, elem.dotDotDotToken, elem.propertyName, filterBindingPatternInitializers(elem.name), shouldPrintWithInitializer(elem) ? elem.initializer : undefined);
@@ -82978,17 +84916,17 @@
             if (shouldPrintWithInitializer(node)) {
                 return;
             }
-            var shouldUseResolverType = node.kind === 161 &&
+            var shouldUseResolverType = node.kind === 162 &&
                 (resolver.isRequiredInitializedParameter(node) ||
                     resolver.isOptionalUninitializedParameterProperty(node));
             if (type && !shouldUseResolverType) {
                 return ts.visitNode(type, visitDeclarationSubtree);
             }
             if (!ts.getParseTreeNode(node)) {
-                return type ? ts.visitNode(type, visitDeclarationSubtree) : factory.createKeywordTypeNode(128);
+                return type ? ts.visitNode(type, visitDeclarationSubtree) : factory.createKeywordTypeNode(129);
             }
-            if (node.kind === 169) {
-                return factory.createKeywordTypeNode(128);
+            if (node.kind === 171) {
+                return factory.createKeywordTypeNode(129);
             }
             errorNameNode = node.name;
             var oldDiag;
@@ -82996,12 +84934,12 @@
                 oldDiag = getSymbolAccessibilityDiagnostic;
                 getSymbolAccessibilityDiagnostic = ts.createGetSymbolAccessibilityDiagnosticForNode(node);
             }
-            if (node.kind === 250 || node.kind === 199) {
+            if (node.kind === 252 || node.kind === 201) {
                 return cleanup(resolver.createTypeOfDeclaration(node, enclosingDeclaration, declarationEmitNodeBuilderFlags, symbolTracker));
             }
-            if (node.kind === 161
-                || node.kind === 164
-                || node.kind === 163) {
+            if (node.kind === 162
+                || node.kind === 165
+                || node.kind === 164) {
                 if (!node.initializer)
                     return cleanup(resolver.createTypeOfDeclaration(node, enclosingDeclaration, declarationEmitNodeBuilderFlags, symbolTracker, shouldUseResolverType));
                 return cleanup(resolver.createTypeOfDeclaration(node, enclosingDeclaration, declarationEmitNodeBuilderFlags, symbolTracker, shouldUseResolverType) || resolver.createTypeOfExpression(node.initializer, enclosingDeclaration, declarationEmitNodeBuilderFlags, symbolTracker));
@@ -83012,29 +84950,39 @@
                 if (!suppressNewDiagnosticContexts) {
                     getSymbolAccessibilityDiagnostic = oldDiag;
                 }
-                return returnValue || factory.createKeywordTypeNode(128);
+                return returnValue || factory.createKeywordTypeNode(129);
             }
         }
         function isDeclarationAndNotVisible(node) {
             node = ts.getParseTreeNode(node);
             switch (node.kind) {
-                case 252:
-                case 257:
                 case 254:
-                case 253:
-                case 255:
+                case 259:
                 case 256:
+                case 255:
+                case 257:
+                case 258:
                     return !resolver.isDeclarationVisible(node);
-                case 250:
+                case 252:
                     return !getBindingNameVisible(node);
-                case 261:
-                case 262:
-                case 268:
-                case 267:
+                case 263:
+                case 264:
+                case 270:
+                case 269:
                     return false;
+                case 168:
+                    return true;
             }
             return false;
         }
+        function shouldEmitFunctionProperties(input) {
+            var _a;
+            if (input.body) {
+                return true;
+            }
+            var overloadSignatures = (_a = input.symbol.declarations) === null || _a === void 0 ? void 0 : _a.filter(function (decl) { return ts.isFunctionDeclaration(decl) && !decl.body; });
+            return !overloadSignatures || overloadSignatures.indexOf(input) === overloadSignatures.length - 1;
+        }
         function getBindingNameVisible(elem) {
             if (ts.isOmittedExpression(elem)) {
                 return false;
@@ -83107,7 +85055,7 @@
         function rewriteModuleSpecifier(parent, input) {
             if (!input)
                 return undefined;
-            resultHasExternalModuleIndicator = resultHasExternalModuleIndicator || (parent.kind !== 257 && parent.kind !== 196);
+            resultHasExternalModuleIndicator = resultHasExternalModuleIndicator || (parent.kind !== 259 && parent.kind !== 198);
             if (ts.isStringLiteralLike(input)) {
                 if (isBundledEmit) {
                     var newName = ts.getExternalModuleNameFromDeclaration(context.getEmitHost(), resolver, parent);
@@ -83127,7 +85075,7 @@
         function transformImportEqualsDeclaration(decl) {
             if (!resolver.isDeclarationVisible(decl))
                 return;
-            if (decl.moduleReference.kind === 273) {
+            if (decl.moduleReference.kind === 275) {
                 var specifier = ts.getExternalModuleImportEqualsDeclarationExpression(decl);
                 return factory.updateImportEqualsDeclaration(decl, undefined, decl.modifiers, decl.isTypeOnly, decl.name, factory.updateExternalModuleReference(decl.moduleReference, rewriteModuleSpecifier(decl, specifier)));
             }
@@ -83147,7 +85095,7 @@
             if (!decl.importClause.namedBindings) {
                 return visibleDefaultBinding && factory.updateImportDeclaration(decl, undefined, decl.modifiers, factory.updateImportClause(decl.importClause, decl.importClause.isTypeOnly, visibleDefaultBinding, undefined), rewriteModuleSpecifier(decl, decl.moduleSpecifier));
             }
-            if (decl.importClause.namedBindings.kind === 264) {
+            if (decl.importClause.namedBindings.kind === 266) {
                 var namedBindings = resolver.isDeclarationVisible(decl.importClause.namedBindings) ? decl.importClause.namedBindings : undefined;
                 return visibleDefaultBinding || namedBindings ? factory.updateImportDeclaration(decl, undefined, decl.modifiers, factory.updateImportClause(decl.importClause, decl.importClause.isTypeOnly, visibleDefaultBinding, namedBindings), rewriteModuleSpecifier(decl, decl.moduleSpecifier)) : undefined;
             }
@@ -83214,7 +85162,7 @@
             var oldDiag = getSymbolAccessibilityDiagnostic;
             var canProduceDiagnostic = ts.canProduceDiagnostics(input);
             var oldWithinObjectLiteralType = suppressNewDiagnosticContexts;
-            var shouldEnterSuppressNewDiagnosticsContextContext = ((input.kind === 178 || input.kind === 191) && input.parent.kind !== 255);
+            var shouldEnterSuppressNewDiagnosticsContextContext = ((input.kind === 180 || input.kind === 193) && input.parent.kind !== 257);
             if (ts.isMethodDeclaration(input) || ts.isMethodSignature(input)) {
                 if (ts.hasEffectiveModifier(input, 8)) {
                     if (input.symbol && input.symbol.declarations && input.symbol.declarations[0] !== input)
@@ -83233,67 +85181,67 @@
             }
             if (isProcessedComponent(input)) {
                 switch (input.kind) {
-                    case 224: {
+                    case 226: {
                         if ((ts.isEntityName(input.expression) || ts.isEntityNameExpression(input.expression))) {
                             checkEntityNameVisibility(input.expression, enclosingDeclaration);
                         }
                         var node = ts.visitEachChild(input, visitDeclarationSubtree, context);
                         return cleanup(factory.updateExpressionWithTypeArguments(node, node.expression, node.typeArguments));
                     }
-                    case 174: {
+                    case 176: {
                         checkEntityNameVisibility(input.typeName, enclosingDeclaration);
                         var node = ts.visitEachChild(input, visitDeclarationSubtree, context);
                         return cleanup(factory.updateTypeReferenceNode(node, node.typeName, node.typeArguments));
                     }
-                    case 171:
+                    case 173:
                         return cleanup(factory.updateConstructSignature(input, ensureTypeParams(input, input.typeParameters), updateParamsList(input, input.parameters), ensureType(input, input.type)));
-                    case 167: {
+                    case 169: {
                         var ctor = factory.createConstructorDeclaration(undefined, ensureModifiers(input), updateParamsList(input, input.parameters, 0), undefined);
                         return cleanup(ctor);
                     }
-                    case 166: {
+                    case 167: {
                         if (ts.isPrivateIdentifier(input.name)) {
                             return cleanup(undefined);
                         }
                         var sig = factory.createMethodDeclaration(undefined, ensureModifiers(input), undefined, input.name, input.questionToken, ensureTypeParams(input, input.typeParameters), updateParamsList(input, input.parameters), ensureType(input, input.type), undefined);
                         return cleanup(sig);
                     }
-                    case 168: {
+                    case 170: {
                         if (ts.isPrivateIdentifier(input.name)) {
                             return cleanup(undefined);
                         }
                         var accessorType = getTypeAnnotationFromAllAccessorDeclarations(input, resolver.getAllAccessorDeclarations(input));
                         return cleanup(factory.updateGetAccessorDeclaration(input, undefined, ensureModifiers(input), input.name, updateAccessorParamsList(input, ts.hasEffectiveModifier(input, 8)), ensureType(input, accessorType), undefined));
                     }
-                    case 169: {
+                    case 171: {
                         if (ts.isPrivateIdentifier(input.name)) {
                             return cleanup(undefined);
                         }
                         return cleanup(factory.updateSetAccessorDeclaration(input, undefined, ensureModifiers(input), input.name, updateAccessorParamsList(input, ts.hasEffectiveModifier(input, 8)), undefined));
                     }
-                    case 164:
+                    case 165:
                         if (ts.isPrivateIdentifier(input.name)) {
                             return cleanup(undefined);
                         }
                         return cleanup(factory.updatePropertyDeclaration(input, undefined, ensureModifiers(input), input.name, input.questionToken, ensureType(input, input.type), ensureNoInitializer(input)));
-                    case 163:
+                    case 164:
                         if (ts.isPrivateIdentifier(input.name)) {
                             return cleanup(undefined);
                         }
                         return cleanup(factory.updatePropertySignature(input, ensureModifiers(input), input.name, input.questionToken, ensureType(input, input.type)));
-                    case 165: {
+                    case 166: {
                         if (ts.isPrivateIdentifier(input.name)) {
                             return cleanup(undefined);
                         }
                         return cleanup(factory.updateMethodSignature(input, ensureModifiers(input), input.name, input.questionToken, ensureTypeParams(input, input.typeParameters), updateParamsList(input, input.parameters), ensureType(input, input.type)));
                     }
-                    case 170: {
+                    case 172: {
                         return cleanup(factory.updateCallSignature(input, ensureTypeParams(input, input.typeParameters), updateParamsList(input, input.parameters), ensureType(input, input.type)));
                     }
-                    case 172: {
-                        return cleanup(factory.updateIndexSignature(input, undefined, ensureModifiers(input), updateParamsList(input, input.parameters), ts.visitNode(input.type, visitDeclarationSubtree) || factory.createKeywordTypeNode(128)));
+                    case 174: {
+                        return cleanup(factory.updateIndexSignature(input, undefined, ensureModifiers(input), updateParamsList(input, input.parameters), ts.visitNode(input.type, visitDeclarationSubtree) || factory.createKeywordTypeNode(129)));
                     }
-                    case 250: {
+                    case 252: {
                         if (ts.isBindingPattern(input.name)) {
                             return recreateBindingPattern(input.name);
                         }
@@ -83301,13 +85249,13 @@
                         suppressNewDiagnosticContexts = true;
                         return cleanup(factory.updateVariableDeclaration(input, input.name, undefined, ensureType(input, input.type), ensureNoInitializer(input)));
                     }
-                    case 160: {
+                    case 161: {
                         if (isPrivateMethodTypeParameter(input) && (input.default || input.constraint)) {
                             return cleanup(factory.updateTypeParameterDeclaration(input, input.name, undefined, undefined));
                         }
                         return cleanup(ts.visitEachChild(input, visitDeclarationSubtree, context));
                     }
-                    case 185: {
+                    case 187: {
                         var checkType = ts.visitNode(input.checkType, visitDeclarationSubtree);
                         var extendsType = ts.visitNode(input.extendsType, visitDeclarationSubtree);
                         var oldEnclosingDecl = enclosingDeclaration;
@@ -83317,13 +85265,13 @@
                         var falseType = ts.visitNode(input.falseType, visitDeclarationSubtree);
                         return cleanup(factory.updateConditionalTypeNode(input, checkType, extendsType, trueType, falseType));
                     }
-                    case 175: {
+                    case 177: {
                         return cleanup(factory.updateFunctionTypeNode(input, ts.visitNodes(input.typeParameters, visitDeclarationSubtree), updateParamsList(input, input.parameters), ts.visitNode(input.type, visitDeclarationSubtree)));
                     }
-                    case 176: {
+                    case 178: {
                         return cleanup(factory.updateConstructorTypeNode(input, ensureModifiers(input), ts.visitNodes(input.typeParameters, visitDeclarationSubtree), updateParamsList(input, input.parameters), ts.visitNode(input.type, visitDeclarationSubtree)));
                     }
-                    case 196: {
+                    case 198: {
                         if (!ts.isLiteralImportTypeNode(input))
                             return cleanup(input);
                         return cleanup(factory.updateImportTypeNode(input, factory.updateLiteralTypeNode(input.argument, rewriteModuleSpecifier(input, input.argument.literal)), input.qualifier, ts.visitNodes(input.typeArguments, visitDeclarationSubtree, ts.isTypeNode), input.isTypeOf));
@@ -83355,7 +85303,7 @@
             }
         }
         function isPrivateMethodTypeParameter(node) {
-            return node.parent.kind === 166 && ts.hasEffectiveModifier(node.parent, 8);
+            return node.parent.kind === 167 && ts.hasEffectiveModifier(node.parent, 8);
         }
         function visitDeclarationStatements(input) {
             if (!isPreservedDeclarationStatement(input)) {
@@ -83364,19 +85312,19 @@
             if (shouldStripInternal(input))
                 return;
             switch (input.kind) {
-                case 268: {
+                case 270: {
                     if (ts.isSourceFile(input.parent)) {
                         resultHasExternalModuleIndicator = true;
                     }
                     resultHasScopeMarker = true;
                     return factory.updateExportDeclaration(input, undefined, input.modifiers, input.isTypeOnly, input.exportClause, rewriteModuleSpecifier(input, input.moduleSpecifier));
                 }
-                case 267: {
+                case 269: {
                     if (ts.isSourceFile(input.parent)) {
                         resultHasExternalModuleIndicator = true;
                     }
                     resultHasScopeMarker = true;
-                    if (input.expression.kind === 78) {
+                    if (input.expression.kind === 79) {
                         return input;
                     }
                     else {
@@ -83388,7 +85336,7 @@
                         errorFallbackNode = input;
                         var varDecl = factory.createVariableDeclaration(newId, undefined, resolver.createTypeOfExpression(input.expression, input, declarationEmitNodeBuilderFlags, symbolTracker), undefined);
                         errorFallbackNode = undefined;
-                        var statement = factory.createVariableStatement(needsDeclare ? [factory.createModifier(133)] : [], factory.createVariableDeclarationList([varDecl], 2));
+                        var statement = factory.createVariableStatement(needsDeclare ? [factory.createModifier(134)] : [], factory.createVariableDeclarationList([varDecl], 2));
                         return [statement, factory.updateExportAssignment(input, input.decorators, input.modifiers, newId)];
                     }
                 }
@@ -83408,10 +85356,10 @@
             if (shouldStripInternal(input))
                 return;
             switch (input.kind) {
-                case 261: {
+                case 263: {
                     return transformImportEqualsDeclaration(input);
                 }
-                case 262: {
+                case 264: {
                     return transformImportDeclaration(input);
                 }
             }
@@ -83431,14 +85379,14 @@
             }
             var previousNeedsDeclare = needsDeclare;
             switch (input.kind) {
-                case 255:
+                case 257:
                     return cleanup(factory.updateTypeAliasDeclaration(input, undefined, ensureModifiers(input), input.name, ts.visitNodes(input.typeParameters, visitDeclarationSubtree, ts.isTypeParameterDeclaration), ts.visitNode(input.type, visitDeclarationSubtree, ts.isTypeNode)));
-                case 254: {
+                case 256: {
                     return cleanup(factory.updateInterfaceDeclaration(input, undefined, ensureModifiers(input), input.name, ensureTypeParams(input, input.typeParameters), transformHeritageClauses(input.heritageClauses), ts.visitNodes(input.members, visitDeclarationSubtree)));
                 }
-                case 252: {
+                case 254: {
                     var clean = cleanup(factory.updateFunctionDeclaration(input, undefined, ensureModifiers(input), undefined, input.name, ensureTypeParams(input, input.typeParameters), updateParamsList(input, input.parameters), ensureType(input, input.type), undefined));
-                    if (clean && resolver.isExpandoFunctionDeclaration(input)) {
+                    if (clean && resolver.isExpandoFunctionDeclaration(input) && shouldEmitFunctionProperties(input)) {
                         var props = resolver.getPropertiesOfContainerFunction(input);
                         var fakespace_1 = ts.parseNodeFactory.createModuleDeclaration(undefined, undefined, clean.name || factory.createIdentifier("_default"), factory.createModuleBlock([]), 16);
                         ts.setParent(fakespace_1, enclosingDeclaration);
@@ -83459,7 +85407,7 @@
                                 exportMappings_1.push([name, nameStr]);
                             }
                             var varDecl = factory.createVariableDeclaration(name, undefined, type, undefined);
-                            return factory.createVariableStatement(isNonContextualKeywordName ? undefined : [factory.createToken(92)], factory.createVariableDeclarationList([varDecl]));
+                            return factory.createVariableStatement(isNonContextualKeywordName ? undefined : [factory.createToken(93)], factory.createVariableDeclarationList([varDecl]));
                         });
                         if (!exportMappings_1.length) {
                             declarations = ts.mapDefined(declarations, function (declaration) { return factory.updateModifiers(declaration, 0); });
@@ -83488,10 +85436,10 @@
                         return clean;
                     }
                 }
-                case 257: {
+                case 259: {
                     needsDeclare = false;
                     var inner = input.body;
-                    if (inner && inner.kind === 258) {
+                    if (inner && inner.kind === 260) {
                         var oldNeedsScopeFix = needsScopeFixMarker;
                         var oldHasScopeFix = resultHasScopeMarker;
                         resultHasScopeMarker = false;
@@ -83503,7 +85451,7 @@
                         }
                         if (!ts.isGlobalScopeAugmentation(input) && !hasScopeMarker(lateStatements) && !resultHasScopeMarker) {
                             if (needsScopeFixMarker) {
-                                lateStatements = factory.createNodeArray(__spreadArray(__spreadArray([], lateStatements), [ts.createEmptyExports(factory)]));
+                                lateStatements = factory.createNodeArray(__spreadArray(__spreadArray([], lateStatements, true), [ts.createEmptyExports(factory)], false));
                             }
                             else {
                                 lateStatements = ts.visitNodes(lateStatements, stripExportModifiers);
@@ -83527,7 +85475,7 @@
                         return cleanup(factory.updateModuleDeclaration(input, undefined, mods, input.name, body));
                     }
                 }
-                case 253: {
+                case 255: {
                     errorNameNode = input.name;
                     errorFallbackNode = input;
                     var modifiers = factory.createNodeArray(ensureModifiers(input));
@@ -83540,7 +85488,7 @@
                             if (!ts.hasSyntacticModifier(param, 16476) || shouldStripInternal(param))
                                 return;
                             getSymbolAccessibilityDiagnostic = ts.createGetSymbolAccessibilityDiagnosticForNode(param);
-                            if (param.name.kind === 78) {
+                            if (param.name.kind === 79) {
                                 return preserveJsDoc(factory.createPropertyDeclaration(undefined, ensureModifiers(param), param.name, param.questionToken, ensureType(param, param.type), ensureNoInitializer(param)), param);
                             }
                             else {
@@ -83570,7 +85518,7 @@
                     var memberNodes = ts.concatenate(ts.concatenate(privateIdentifier, parameterProperties), ts.visitNodes(input.members, visitDeclarationSubtree));
                     var members = factory.createNodeArray(memberNodes);
                     var extendsClause_1 = ts.getEffectiveBaseTypeNode(input);
-                    if (extendsClause_1 && !ts.isEntityNameExpression(extendsClause_1.expression) && extendsClause_1.expression.kind !== 103) {
+                    if (extendsClause_1 && !ts.isEntityNameExpression(extendsClause_1.expression) && extendsClause_1.expression.kind !== 104) {
                         var oldId = input.name ? ts.unescapeLeadingUnderscores(input.name.escapedText) : "default";
                         var newId_1 = factory.createUniqueName(oldId + "_base", 16);
                         getSymbolAccessibilityDiagnostic = function () { return ({
@@ -83579,16 +85527,16 @@
                             typeName: input.name
                         }); };
                         var varDecl = factory.createVariableDeclaration(newId_1, undefined, resolver.createTypeOfExpression(extendsClause_1.expression, input, declarationEmitNodeBuilderFlags, symbolTracker), undefined);
-                        var statement = factory.createVariableStatement(needsDeclare ? [factory.createModifier(133)] : [], factory.createVariableDeclarationList([varDecl], 2));
+                        var statement = factory.createVariableStatement(needsDeclare ? [factory.createModifier(134)] : [], factory.createVariableDeclarationList([varDecl], 2));
                         var heritageClauses = factory.createNodeArray(ts.map(input.heritageClauses, function (clause) {
-                            if (clause.token === 93) {
+                            if (clause.token === 94) {
                                 var oldDiag_2 = getSymbolAccessibilityDiagnostic;
                                 getSymbolAccessibilityDiagnostic = ts.createGetSymbolAccessibilityDiagnosticForNode(clause.types[0]);
                                 var newClause = factory.updateHeritageClause(clause, ts.map(clause.types, function (t) { return factory.updateExpressionWithTypeArguments(t, newId_1, ts.visitNodes(t.typeArguments, visitDeclarationSubtree)); }));
                                 getSymbolAccessibilityDiagnostic = oldDiag_2;
                                 return newClause;
                             }
-                            return factory.updateHeritageClause(clause, ts.visitNodes(factory.createNodeArray(ts.filter(clause.types, function (t) { return ts.isEntityNameExpression(t.expression) || t.expression.kind === 103; })), visitDeclarationSubtree));
+                            return factory.updateHeritageClause(clause, ts.visitNodes(factory.createNodeArray(ts.filter(clause.types, function (t) { return ts.isEntityNameExpression(t.expression) || t.expression.kind === 104; })), visitDeclarationSubtree));
                         }));
                         return [statement, cleanup(factory.updateClassDeclaration(input, undefined, modifiers, input.name, typeParameters, heritageClauses, members))];
                     }
@@ -83597,10 +85545,10 @@
                         return cleanup(factory.updateClassDeclaration(input, undefined, modifiers, input.name, typeParameters, heritageClauses, members));
                     }
                 }
-                case 233: {
+                case 235: {
                     return cleanup(transformVariableStatement(input));
                 }
-                case 256: {
+                case 258: {
                     return cleanup(factory.updateEnumDeclaration(input, undefined, factory.createNodeArray(ensureModifiers(input)), input.name, factory.createNodeArray(ts.mapDefined(input.members, function (m) {
                         if (shouldStripInternal(m))
                             return;
@@ -83617,7 +85565,7 @@
                 if (canProdiceDiagnostic) {
                     getSymbolAccessibilityDiagnostic = oldDiag;
                 }
-                if (input.kind === 257) {
+                if (input.kind === 259) {
                     needsDeclare = previousNeedsDeclare;
                 }
                 if (node === input) {
@@ -83640,7 +85588,7 @@
             return ts.flatten(ts.mapDefined(d.elements, function (e) { return recreateBindingElement(e); }));
         }
         function recreateBindingElement(e) {
-            if (e.kind === 223) {
+            if (e.kind === 225) {
                 return;
             }
             if (e.name) {
@@ -83690,7 +85638,7 @@
         function ensureModifierFlags(node) {
             var mask = 27647 ^ (4 | 256 | 16384);
             var additions = (needsDeclare && !isAlwaysType(node)) ? 2 : 0;
-            var parentIsFile = node.parent.kind === 298;
+            var parentIsFile = node.parent.kind === 300;
             if (!parentIsFile || (isBundledEmit && parentIsFile && ts.isExternalModule(node.parent))) {
                 mask ^= 2;
                 additions = 0;
@@ -83711,13 +85659,13 @@
         }
         function transformHeritageClauses(nodes) {
             return factory.createNodeArray(ts.filter(ts.map(nodes, function (clause) { return factory.updateHeritageClause(clause, ts.visitNodes(factory.createNodeArray(ts.filter(clause.types, function (t) {
-                return ts.isEntityNameExpression(t.expression) || (clause.token === 93 && t.expression.kind === 103);
+                return ts.isEntityNameExpression(t.expression) || (clause.token === 94 && t.expression.kind === 104);
             })), visitDeclarationSubtree)); }), function (clause) { return clause.types && !!clause.types.length; }));
         }
     }
     ts.transformDeclarations = transformDeclarations;
     function isAlwaysType(node) {
-        if (node.kind === 254) {
+        if (node.kind === 256) {
             return true;
         }
         return false;
@@ -83739,7 +85687,7 @@
     }
     function getTypeAnnotationFromAccessor(accessor) {
         if (accessor) {
-            return accessor.kind === 168
+            return accessor.kind === 170
                 ? accessor.type
                 : accessor.parameters.length > 0
                     ? accessor.parameters[0].type
@@ -83748,52 +85696,52 @@
     }
     function canHaveLiteralInitializer(node) {
         switch (node.kind) {
+            case 165:
             case 164:
-            case 163:
                 return !ts.hasEffectiveModifier(node, 8);
-            case 161:
-            case 250:
+            case 162:
+            case 252:
                 return true;
         }
         return false;
     }
     function isPreservedDeclarationStatement(node) {
         switch (node.kind) {
-            case 252:
-            case 257:
-            case 261:
             case 254:
-            case 253:
-            case 255:
+            case 259:
+            case 263:
             case 256:
-            case 233:
-            case 262:
-            case 268:
-            case 267:
+            case 255:
+            case 257:
+            case 258:
+            case 235:
+            case 264:
+            case 270:
+            case 269:
                 return true;
         }
         return false;
     }
     function isProcessedComponent(node) {
         switch (node.kind) {
-            case 171:
-            case 167:
-            case 166:
-            case 168:
+            case 173:
             case 169:
-            case 164:
-            case 163:
-            case 165:
+            case 167:
             case 170:
+            case 171:
+            case 165:
+            case 164:
+            case 166:
             case 172:
-            case 250:
-            case 160:
-            case 224:
             case 174:
-            case 185:
-            case 175:
+            case 252:
+            case 161:
+            case 226:
             case 176:
-            case 196:
+            case 187:
+            case 177:
+            case 178:
+            case 198:
                 return true;
         }
         return false;
@@ -83897,7 +85845,7 @@
     }
     ts.noEmitNotification = noEmitNotification;
     function transformNodes(resolver, host, factory, options, nodes, transformers, allowDtsFiles) {
-        var enabledSyntaxKindFeatures = new Array(345);
+        var enabledSyntaxKindFeatures = new Array(350);
         var lexicalEnvironmentVariableDeclarations;
         var lexicalEnvironmentFunctionDeclarations;
         var lexicalEnvironmentStatements;
@@ -83973,7 +85921,7 @@
         var transformed = [];
         for (var _a = 0, nodes_3 = nodes; _a < nodes_3.length; _a++) {
             var node = nodes_3[_a];
-            ts.tracing === null || ts.tracing === void 0 ? void 0 : ts.tracing.push("emit", "transformNodes", node.kind === 298 ? { path: node.path } : { kind: node.kind, pos: node.pos, end: node.end });
+            ts.tracing === null || ts.tracing === void 0 ? void 0 : ts.tracing.push("emit", "transformNodes", node.kind === 300 ? { path: node.path } : { kind: node.kind, pos: node.pos, end: node.end });
             transformed.push((allowDtsFiles ? transformation : transformRoot)(node));
             ts.tracing === null || ts.tracing === void 0 ? void 0 : ts.tracing.pop();
         }
@@ -84093,7 +86041,7 @@
                 lexicalEnvironmentFunctionDeclarations ||
                 lexicalEnvironmentStatements) {
                 if (lexicalEnvironmentFunctionDeclarations) {
-                    statements = __spreadArray([], lexicalEnvironmentFunctionDeclarations);
+                    statements = __spreadArray([], lexicalEnvironmentFunctionDeclarations, true);
                 }
                 if (lexicalEnvironmentVariableDeclarations) {
                     var statement = factory.createVariableStatement(undefined, factory.createVariableDeclarationList(lexicalEnvironmentVariableDeclarations));
@@ -84107,10 +86055,10 @@
                 }
                 if (lexicalEnvironmentStatements) {
                     if (!statements) {
-                        statements = __spreadArray([], lexicalEnvironmentStatements);
+                        statements = __spreadArray([], lexicalEnvironmentStatements, true);
                     }
                     else {
-                        statements = __spreadArray(__spreadArray([], statements), lexicalEnvironmentStatements);
+                        statements = __spreadArray(__spreadArray([], statements, true), lexicalEnvironmentStatements, true);
                     }
                 }
             }
@@ -84301,7 +86249,7 @@
     ts.getOutputPathsForBundle = getOutputPathsForBundle;
     function getOutputPathsFor(sourceFile, host, forceDtsPaths) {
         var options = host.getCompilerOptions();
-        if (sourceFile.kind === 299) {
+        if (sourceFile.kind === 301) {
             return getOutputPathsForBundle(options, forceDtsPaths);
         }
         else {
@@ -84636,7 +86584,7 @@
                     mapRoot: compilerOptions.mapRoot,
                     extendedDiagnostics: compilerOptions.extendedDiagnostics,
                 });
-                if (forceDtsEmit && declarationTransform.transformed[0].kind === 298) {
+                if (forceDtsEmit && declarationTransform.transformed[0].kind === 300) {
                     var sourceFile = declarationTransform.transformed[0];
                     exportedModulesFromDeclarationEmit = sourceFile.exportedModulesFromDeclarationEmit;
                 }
@@ -84647,7 +86595,7 @@
         }
         function collectLinkedAliases(node) {
             if (ts.isExportAssignment(node)) {
-                if (node.expression.kind === 78) {
+                if (node.expression.kind === 79) {
                     resolver.collectLinkedAliases(node.expression, true);
                 }
                 return;
@@ -84659,8 +86607,8 @@
             ts.forEachChild(node, collectLinkedAliases);
         }
         function printSourceFileOrBundle(jsFilePath, sourceMapFilePath, sourceFileOrBundle, printer, mapOptions) {
-            var bundle = sourceFileOrBundle.kind === 299 ? sourceFileOrBundle : undefined;
-            var sourceFile = sourceFileOrBundle.kind === 298 ? sourceFileOrBundle : undefined;
+            var bundle = sourceFileOrBundle.kind === 301 ? sourceFileOrBundle : undefined;
+            var sourceFile = sourceFileOrBundle.kind === 300 ? sourceFileOrBundle : undefined;
             var sourceFiles = bundle ? bundle.sourceFiles : [sourceFile];
             var sourceMapGenerator;
             if (shouldEmitSourceMaps(mapOptions, sourceFileOrBundle)) {
@@ -84698,7 +86646,7 @@
         }
         function shouldEmitSourceMaps(mapOptions, sourceFileOrBundle) {
             return (mapOptions.sourceMap || mapOptions.inlineSourceMap)
-                && (sourceFileOrBundle.kind !== 298 || !ts.fileExtensionIs(sourceFileOrBundle.fileName, ".json"));
+                && (sourceFileOrBundle.kind !== 300 || !ts.fileExtensionIs(sourceFileOrBundle.fileName, ".json"));
         }
         function getSourceRoot(mapOptions) {
             var sourceRoot = ts.normalizeSlashes(mapOptions.sourceRoot || "");
@@ -84843,7 +86791,7 @@
         var prependNodes = ts.createPrependNodes(config.projectReferences, getCommandLine, function (f) { return host.readFile(f); });
         var sourceFilesForJsEmit = createSourceFilesFromBundleBuildInfo(buildInfo.bundle, buildInfoDirectory, host);
         var emitHost = {
-            getPrependNodes: ts.memoize(function () { return __spreadArray(__spreadArray([], prependNodes), [ownPrependInput]); }),
+            getPrependNodes: ts.memoize(function () { return __spreadArray(__spreadArray([], prependNodes, true), [ownPrependInput], false); }),
             getCanonicalFileName: host.getCanonicalFileName,
             getCommonSourceDirectory: function () { return ts.getNormalizedAbsolutePath(buildInfo.bundle.commonSourceDirectory, buildInfoDirectory); },
             getCompilerOptions: function () { return config.options; },
@@ -84974,9 +86922,9 @@
                     break;
             }
             switch (node.kind) {
-                case 298: return printFile(node);
-                case 299: return printBundle(node);
-                case 300: return printUnparsedSource(node);
+                case 300: return printFile(node);
+                case 301: return printBundle(node);
+                case 302: return printUnparsedSource(node);
             }
             writeNode(hint, node, sourceFile, beginPrint());
             return endPrint();
@@ -85287,292 +87235,294 @@
                     case 16:
                     case 17:
                         return emitLiteral(node, false);
-                    case 78:
-                        return emitIdentifier(node);
                     case 79:
+                        return emitIdentifier(node);
+                    case 80:
                         return emitPrivateIdentifier(node);
-                    case 158:
-                        return emitQualifiedName(node);
                     case 159:
-                        return emitComputedPropertyName(node);
+                        return emitQualifiedName(node);
                     case 160:
-                        return emitTypeParameter(node);
+                        return emitComputedPropertyName(node);
                     case 161:
-                        return emitParameter(node);
+                        return emitTypeParameter(node);
                     case 162:
-                        return emitDecorator(node);
+                        return emitParameter(node);
                     case 163:
-                        return emitPropertySignature(node);
+                        return emitDecorator(node);
                     case 164:
-                        return emitPropertyDeclaration(node);
+                        return emitPropertySignature(node);
                     case 165:
-                        return emitMethodSignature(node);
+                        return emitPropertyDeclaration(node);
                     case 166:
-                        return emitMethodDeclaration(node);
+                        return emitMethodSignature(node);
                     case 167:
-                        return emitConstructor(node);
+                        return emitMethodDeclaration(node);
                     case 168:
+                        return emitClassStaticBlockDeclaration(node);
                     case 169:
-                        return emitAccessorDeclaration(node);
+                        return emitConstructor(node);
                     case 170:
-                        return emitCallSignature(node);
                     case 171:
-                        return emitConstructSignature(node);
+                        return emitAccessorDeclaration(node);
                     case 172:
-                        return emitIndexSignature(node);
+                        return emitCallSignature(node);
                     case 173:
-                        return emitTypePredicate(node);
+                        return emitConstructSignature(node);
                     case 174:
-                        return emitTypeReference(node);
+                        return emitIndexSignature(node);
                     case 175:
-                        return emitFunctionType(node);
+                        return emitTypePredicate(node);
                     case 176:
-                        return emitConstructorType(node);
+                        return emitTypeReference(node);
                     case 177:
-                        return emitTypeQuery(node);
+                        return emitFunctionType(node);
                     case 178:
-                        return emitTypeLiteral(node);
+                        return emitConstructorType(node);
                     case 179:
-                        return emitArrayType(node);
+                        return emitTypeQuery(node);
                     case 180:
-                        return emitTupleType(node);
+                        return emitTypeLiteral(node);
                     case 181:
-                        return emitOptionalType(node);
+                        return emitArrayType(node);
+                    case 182:
+                        return emitTupleType(node);
                     case 183:
-                        return emitUnionType(node);
-                    case 184:
-                        return emitIntersectionType(node);
+                        return emitOptionalType(node);
                     case 185:
-                        return emitConditionalType(node);
+                        return emitUnionType(node);
                     case 186:
-                        return emitInferType(node);
+                        return emitIntersectionType(node);
                     case 187:
-                        return emitParenthesizedType(node);
-                    case 224:
-                        return emitExpressionWithTypeArguments(node);
+                        return emitConditionalType(node);
                     case 188:
-                        return emitThisType();
+                        return emitInferType(node);
                     case 189:
-                        return emitTypeOperator(node);
+                        return emitParenthesizedType(node);
+                    case 226:
+                        return emitExpressionWithTypeArguments(node);
                     case 190:
-                        return emitIndexedAccessType(node);
+                        return emitThisType();
                     case 191:
-                        return emitMappedType(node);
+                        return emitTypeOperator(node);
                     case 192:
-                        return emitLiteralType(node);
+                        return emitIndexedAccessType(node);
                     case 193:
-                        return emitNamedTupleMember(node);
+                        return emitMappedType(node);
                     case 194:
-                        return emitTemplateType(node);
+                        return emitLiteralType(node);
                     case 195:
-                        return emitTemplateTypeSpan(node);
+                        return emitNamedTupleMember(node);
                     case 196:
-                        return emitImportTypeNode(node);
+                        return emitTemplateType(node);
                     case 197:
-                        return emitObjectBindingPattern(node);
+                        return emitTemplateTypeSpan(node);
                     case 198:
-                        return emitArrayBindingPattern(node);
+                        return emitImportTypeNode(node);
                     case 199:
+                        return emitObjectBindingPattern(node);
+                    case 200:
+                        return emitArrayBindingPattern(node);
+                    case 201:
                         return emitBindingElement(node);
-                    case 229:
-                        return emitTemplateSpan(node);
-                    case 230:
-                        return emitSemicolonClassElement();
                     case 231:
-                        return emitBlock(node);
-                    case 233:
-                        return emitVariableStatement(node);
+                        return emitTemplateSpan(node);
                     case 232:
-                        return emitEmptyStatement(false);
-                    case 234:
-                        return emitExpressionStatement(node);
+                        return emitSemicolonClassElement();
+                    case 233:
+                        return emitBlock(node);
                     case 235:
-                        return emitIfStatement(node);
+                        return emitVariableStatement(node);
+                    case 234:
+                        return emitEmptyStatement(false);
                     case 236:
-                        return emitDoStatement(node);
+                        return emitExpressionStatement(node);
                     case 237:
-                        return emitWhileStatement(node);
+                        return emitIfStatement(node);
                     case 238:
-                        return emitForStatement(node);
+                        return emitDoStatement(node);
                     case 239:
-                        return emitForInStatement(node);
+                        return emitWhileStatement(node);
                     case 240:
-                        return emitForOfStatement(node);
+                        return emitForStatement(node);
                     case 241:
-                        return emitContinueStatement(node);
+                        return emitForInStatement(node);
                     case 242:
-                        return emitBreakStatement(node);
+                        return emitForOfStatement(node);
                     case 243:
-                        return emitReturnStatement(node);
+                        return emitContinueStatement(node);
                     case 244:
-                        return emitWithStatement(node);
+                        return emitBreakStatement(node);
                     case 245:
-                        return emitSwitchStatement(node);
+                        return emitReturnStatement(node);
                     case 246:
-                        return emitLabeledStatement(node);
+                        return emitWithStatement(node);
                     case 247:
-                        return emitThrowStatement(node);
+                        return emitSwitchStatement(node);
                     case 248:
-                        return emitTryStatement(node);
+                        return emitLabeledStatement(node);
                     case 249:
-                        return emitDebuggerStatement(node);
+                        return emitThrowStatement(node);
                     case 250:
-                        return emitVariableDeclaration(node);
+                        return emitTryStatement(node);
                     case 251:
-                        return emitVariableDeclarationList(node);
+                        return emitDebuggerStatement(node);
                     case 252:
-                        return emitFunctionDeclaration(node);
+                        return emitVariableDeclaration(node);
                     case 253:
-                        return emitClassDeclaration(node);
+                        return emitVariableDeclarationList(node);
                     case 254:
-                        return emitInterfaceDeclaration(node);
+                        return emitFunctionDeclaration(node);
                     case 255:
-                        return emitTypeAliasDeclaration(node);
+                        return emitClassDeclaration(node);
                     case 256:
-                        return emitEnumDeclaration(node);
+                        return emitInterfaceDeclaration(node);
                     case 257:
-                        return emitModuleDeclaration(node);
+                        return emitTypeAliasDeclaration(node);
                     case 258:
-                        return emitModuleBlock(node);
+                        return emitEnumDeclaration(node);
                     case 259:
-                        return emitCaseBlock(node);
+                        return emitModuleDeclaration(node);
                     case 260:
-                        return emitNamespaceExportDeclaration(node);
+                        return emitModuleBlock(node);
                     case 261:
-                        return emitImportEqualsDeclaration(node);
+                        return emitCaseBlock(node);
                     case 262:
-                        return emitImportDeclaration(node);
+                        return emitNamespaceExportDeclaration(node);
                     case 263:
-                        return emitImportClause(node);
+                        return emitImportEqualsDeclaration(node);
                     case 264:
-                        return emitNamespaceImport(node);
-                    case 270:
-                        return emitNamespaceExport(node);
+                        return emitImportDeclaration(node);
                     case 265:
-                        return emitNamedImports(node);
+                        return emitImportClause(node);
                     case 266:
-                        return emitImportSpecifier(node);
-                    case 267:
-                        return emitExportAssignment(node);
-                    case 268:
-                        return emitExportDeclaration(node);
-                    case 269:
-                        return emitNamedExports(node);
-                    case 271:
-                        return emitExportSpecifier(node);
+                        return emitNamespaceImport(node);
                     case 272:
-                        return;
+                        return emitNamespaceExport(node);
+                    case 267:
+                        return emitNamedImports(node);
+                    case 268:
+                        return emitImportSpecifier(node);
+                    case 269:
+                        return emitExportAssignment(node);
+                    case 270:
+                        return emitExportDeclaration(node);
+                    case 271:
+                        return emitNamedExports(node);
                     case 273:
+                        return emitExportSpecifier(node);
+                    case 274:
+                        return;
+                    case 275:
                         return emitExternalModuleReference(node);
                     case 11:
                         return emitJsxText(node);
-                    case 276:
-                    case 279:
-                        return emitJsxOpeningElementOrFragment(node);
-                    case 277:
-                    case 280:
-                        return emitJsxClosingElementOrFragment(node);
+                    case 278:
                     case 281:
-                        return emitJsxAttribute(node);
+                        return emitJsxOpeningElementOrFragment(node);
+                    case 279:
                     case 282:
-                        return emitJsxAttributes(node);
+                        return emitJsxClosingElementOrFragment(node);
                     case 283:
-                        return emitJsxSpreadAttribute(node);
+                        return emitJsxAttribute(node);
                     case 284:
-                        return emitJsxExpression(node);
+                        return emitJsxAttributes(node);
                     case 285:
-                        return emitCaseClause(node);
+                        return emitJsxSpreadAttribute(node);
                     case 286:
-                        return emitDefaultClause(node);
+                        return emitJsxExpression(node);
                     case 287:
-                        return emitHeritageClause(node);
+                        return emitCaseClause(node);
                     case 288:
-                        return emitCatchClause(node);
+                        return emitDefaultClause(node);
                     case 289:
-                        return emitPropertyAssignment(node);
+                        return emitHeritageClause(node);
                     case 290:
-                        return emitShorthandPropertyAssignment(node);
+                        return emitCatchClause(node);
                     case 291:
-                        return emitSpreadAssignment(node);
+                        return emitPropertyAssignment(node);
                     case 292:
-                        return emitEnumMember(node);
+                        return emitShorthandPropertyAssignment(node);
                     case 293:
-                        return writeUnparsedNode(node);
-                    case 300:
+                        return emitSpreadAssignment(node);
                     case 294:
-                        return emitUnparsedSourceOrPrepend(node);
+                        return emitEnumMember(node);
                     case 295:
-                    case 296:
-                        return emitUnparsedTextLike(node);
-                    case 297:
-                        return emitUnparsedSyntheticReference(node);
-                    case 298:
-                        return emitSourceFile(node);
-                    case 299:
-                        return ts.Debug.fail("Bundles should be printed using printBundle");
-                    case 301:
-                        return ts.Debug.fail("InputFiles should not be printed");
+                        return writeUnparsedNode(node);
                     case 302:
-                        return emitJSDocTypeExpression(node);
+                    case 296:
+                        return emitUnparsedSourceOrPrepend(node);
+                    case 297:
+                    case 298:
+                        return emitUnparsedTextLike(node);
+                    case 299:
+                        return emitUnparsedSyntheticReference(node);
+                    case 300:
+                        return emitSourceFile(node);
+                    case 301:
+                        return ts.Debug.fail("Bundles should be printed using printBundle");
                     case 303:
-                        return emitJSDocNameReference(node);
+                        return ts.Debug.fail("InputFiles should not be printed");
                     case 304:
-                        return writePunctuation("*");
+                        return emitJSDocTypeExpression(node);
                     case 305:
-                        return writePunctuation("?");
-                    case 306:
-                        return emitJSDocNullableType(node);
+                        return emitJSDocNameReference(node);
                     case 307:
-                        return emitJSDocNonNullableType(node);
+                        return writePunctuation("*");
                     case 308:
-                        return emitJSDocOptionalType(node);
+                        return writePunctuation("?");
                     case 309:
-                        return emitJSDocFunctionType(node);
-                    case 182:
+                        return emitJSDocNullableType(node);
                     case 310:
-                        return emitRestOrJSDocVariadicType(node);
+                        return emitJSDocNonNullableType(node);
                     case 311:
-                        return;
+                        return emitJSDocOptionalType(node);
                     case 312:
-                        return emitJSDoc(node);
+                        return emitJSDocFunctionType(node);
+                    case 184:
+                    case 313:
+                        return emitRestOrJSDocVariadicType(node);
                     case 314:
-                        return emitJSDocTypeLiteral(node);
-                    case 315:
-                        return emitJSDocSignature(node);
-                    case 317:
-                    case 322:
-                        return emitJSDocSimpleTag(node);
-                    case 318:
-                    case 319:
-                        return emitJSDocHeritageTag(node);
-                    case 320:
-                    case 321:
                         return;
+                    case 315:
+                        return emitJSDoc(node);
+                    case 317:
+                        return emitJSDocTypeLiteral(node);
+                    case 318:
+                        return emitJSDocSignature(node);
+                    case 322:
+                    case 327:
+                        return emitJSDocSimpleTag(node);
                     case 323:
                     case 324:
+                        return emitJSDocHeritageTag(node);
                     case 325:
                     case 326:
-                    case 327:
                         return;
                     case 328:
-                        return emitJSDocCallbackTag(node);
-                    case 330:
-                    case 337:
-                        return emitJSDocPropertyLikeTag(node);
                     case 329:
+                    case 330:
                     case 331:
                     case 332:
+                        return;
                     case 333:
-                        return emitJSDocSimpleTypedTag(node);
-                    case 334:
-                        return emitJSDocTemplateTag(node);
+                        return emitJSDocCallbackTag(node);
                     case 335:
-                        return emitJSDocTypedefTag(node);
-                    case 336:
-                        return emitJSDocSeeTag(node);
-                    case 339:
-                    case 343:
                     case 342:
+                        return emitJSDocPropertyLikeTag(node);
+                    case 334:
+                    case 336:
+                    case 337:
+                    case 338:
+                        return emitJSDocSimpleTypedTag(node);
+                    case 339:
+                        return emitJSDocTemplateTag(node);
+                    case 340:
+                        return emitJSDocTypedefTag(node);
+                    case 341:
+                        return emitJSDocSeeTag(node);
+                    case 344:
+                    case 348:
+                    case 347:
                         return;
                 }
                 if (ts.isExpression(node)) {
@@ -85597,82 +87547,82 @@
                     case 13:
                     case 14:
                         return emitLiteral(node, false);
-                    case 78:
+                    case 79:
                         return emitIdentifier(node);
-                    case 200:
-                        return emitArrayLiteralExpression(node);
-                    case 201:
-                        return emitObjectLiteralExpression(node);
                     case 202:
-                        return emitPropertyAccessExpression(node);
+                        return emitArrayLiteralExpression(node);
                     case 203:
-                        return emitElementAccessExpression(node);
+                        return emitObjectLiteralExpression(node);
                     case 204:
-                        return emitCallExpression(node);
+                        return emitPropertyAccessExpression(node);
                     case 205:
-                        return emitNewExpression(node);
+                        return emitElementAccessExpression(node);
                     case 206:
-                        return emitTaggedTemplateExpression(node);
+                        return emitCallExpression(node);
                     case 207:
-                        return emitTypeAssertionExpression(node);
+                        return emitNewExpression(node);
                     case 208:
-                        return emitParenthesizedExpression(node);
+                        return emitTaggedTemplateExpression(node);
                     case 209:
-                        return emitFunctionExpression(node);
+                        return emitTypeAssertionExpression(node);
                     case 210:
-                        return emitArrowFunction(node);
+                        return emitParenthesizedExpression(node);
                     case 211:
-                        return emitDeleteExpression(node);
+                        return emitFunctionExpression(node);
                     case 212:
-                        return emitTypeOfExpression(node);
+                        return emitArrowFunction(node);
                     case 213:
-                        return emitVoidExpression(node);
+                        return emitDeleteExpression(node);
                     case 214:
-                        return emitAwaitExpression(node);
+                        return emitTypeOfExpression(node);
                     case 215:
-                        return emitPrefixUnaryExpression(node);
+                        return emitVoidExpression(node);
                     case 216:
-                        return emitPostfixUnaryExpression(node);
+                        return emitAwaitExpression(node);
                     case 217:
-                        return emitBinaryExpression(node);
+                        return emitPrefixUnaryExpression(node);
                     case 218:
-                        return emitConditionalExpression(node);
+                        return emitPostfixUnaryExpression(node);
                     case 219:
-                        return emitTemplateExpression(node);
+                        return emitBinaryExpression(node);
                     case 220:
-                        return emitYieldExpression(node);
+                        return emitConditionalExpression(node);
                     case 221:
-                        return emitSpreadElement(node);
+                        return emitTemplateExpression(node);
                     case 222:
-                        return emitClassExpression(node);
+                        return emitYieldExpression(node);
                     case 223:
-                        return;
+                        return emitSpreadElement(node);
+                    case 224:
+                        return emitClassExpression(node);
                     case 225:
-                        return emitAsExpression(node);
-                    case 226:
-                        return emitNonNullExpression(node);
+                        return;
                     case 227:
-                        return emitMetaProperty(node);
+                        return emitAsExpression(node);
                     case 228:
+                        return emitNonNullExpression(node);
+                    case 229:
+                        return emitMetaProperty(node);
+                    case 230:
                         return ts.Debug.fail("SyntheticExpression should never be printed.");
-                    case 274:
+                    case 276:
                         return emitJsxElement(node);
-                    case 275:
+                    case 277:
                         return emitJsxSelfClosingElement(node);
-                    case 278:
+                    case 280:
                         return emitJsxFragment(node);
-                    case 338:
-                        return ts.Debug.fail("SyntaxList should not be printed");
-                    case 339:
-                        return;
-                    case 340:
-                        return emitPartiallyEmittedExpression(node);
-                    case 341:
-                        return emitCommaList(node);
-                    case 342:
                     case 343:
-                        return;
+                        return ts.Debug.fail("SyntaxList should not be printed");
                     case 344:
+                        return;
+                    case 345:
+                        return emitPartiallyEmittedExpression(node);
+                    case 346:
+                        return emitCommaList(node);
+                    case 347:
+                    case 348:
+                        return;
+                    case 349:
                         return ts.Debug.fail("SyntheticReferenceExpression should not be printed");
                 }
             }
@@ -85720,7 +87670,7 @@
         }
         function emitHelpers(node) {
             var helpersEmitted = false;
-            var bundle = node.kind === 299 ? node : undefined;
+            var bundle = node.kind === 301 ? node : undefined;
             if (bundle && moduleKind === ts.ModuleKind.None) {
                 return;
             }
@@ -85794,7 +87744,7 @@
             var pos = getTextPosWithWriteLine();
             writeUnparsedNode(unparsed);
             if (bundleFileInfo) {
-                updateOrPushBundleFileTextLike(pos, writer.getTextPos(), unparsed.kind === 295 ?
+                updateOrPushBundleFileTextLike(pos, writer.getTextPos(), unparsed.kind === 297 ?
                     "text" :
                     "internal");
             }
@@ -85824,7 +87774,7 @@
             emit(node.right);
         }
         function emitEntityName(node) {
-            if (node.kind === 78) {
+            if (node.kind === 79) {
                 emitExpression(node);
             }
             else {
@@ -85857,7 +87807,7 @@
             emit(node.dotDotDotToken);
             emitNodeWithWriter(node.name, writeParameter);
             emit(node.questionToken);
-            if (node.parent && node.parent.kind === 309 && !node.name) {
+            if (node.parent && node.parent.kind === 312 && !node.name) {
                 emit(node.type);
             }
             else {
@@ -85907,6 +87857,12 @@
             emit(node.questionToken);
             emitSignatureAndBody(node, emitSignatureHead);
         }
+        function emitClassStaticBlockDeclaration(node) {
+            emitDecorators(node, node.decorators);
+            emitModifiers(node, node.modifiers);
+            writeKeyword("static");
+            emitBlockFunctionBody(node.body);
+        }
         function emitConstructor(node) {
             emitModifiers(node, node.modifiers);
             writeKeyword("constructor");
@@ -85915,7 +87871,7 @@
         function emitAccessorDeclaration(node) {
             emitDecorators(node, node.decorators);
             emitModifiers(node, node.modifiers);
-            writeKeyword(node.kind === 168 ? "get" : "set");
+            writeKeyword(node.kind === 170 ? "get" : "set");
             writeSpace();
             emit(node.name);
             emitSignatureAndBody(node, emitSignatureHead);
@@ -86109,7 +88065,7 @@
             }
             if (node.readonlyToken) {
                 emit(node.readonlyToken);
-                if (node.readonlyToken.kind !== 142) {
+                if (node.readonlyToken.kind !== 143) {
                     writeKeyword("readonly");
                 }
                 writeSpace();
@@ -86245,20 +88201,40 @@
             emitTokenWithComment(23, node.argumentExpression.end, writePunctuation, node);
         }
         function emitCallExpression(node) {
+            var indirectCall = ts.getEmitFlags(node) & 536870912;
+            if (indirectCall) {
+                writePunctuation("(");
+                writeLiteral("0");
+                writePunctuation(",");
+                writeSpace();
+            }
             emitExpression(node.expression, parenthesizer.parenthesizeLeftSideOfAccess);
+            if (indirectCall) {
+                writePunctuation(")");
+            }
             emit(node.questionDotToken);
             emitTypeArguments(node, node.typeArguments);
             emitExpressionList(node, node.arguments, 2576, parenthesizer.parenthesizeExpressionForDisallowedComma);
         }
         function emitNewExpression(node) {
-            emitTokenWithComment(102, node.pos, writeKeyword, node);
+            emitTokenWithComment(103, node.pos, writeKeyword, node);
             writeSpace();
             emitExpression(node.expression, parenthesizer.parenthesizeExpressionOfNew);
             emitTypeArguments(node, node.typeArguments);
             emitExpressionList(node, node.arguments, 18960, parenthesizer.parenthesizeExpressionForDisallowedComma);
         }
         function emitTaggedTemplateExpression(node) {
+            var indirectCall = ts.getEmitFlags(node) & 536870912;
+            if (indirectCall) {
+                writePunctuation("(");
+                writeLiteral("0");
+                writePunctuation(",");
+                writeSpace();
+            }
             emitExpression(node.tag, parenthesizer.parenthesizeLeftSideOfAccess);
+            if (indirectCall) {
+                writePunctuation(")");
+            }
             emitTypeArguments(node, node.typeArguments);
             writeSpace();
             emitExpression(node.template);
@@ -86294,22 +88270,22 @@
             emit(node.equalsGreaterThanToken);
         }
         function emitDeleteExpression(node) {
-            emitTokenWithComment(88, node.pos, writeKeyword, node);
+            emitTokenWithComment(89, node.pos, writeKeyword, node);
             writeSpace();
             emitExpression(node.expression, parenthesizer.parenthesizeOperandOfPrefixUnary);
         }
         function emitTypeOfExpression(node) {
-            emitTokenWithComment(111, node.pos, writeKeyword, node);
+            emitTokenWithComment(112, node.pos, writeKeyword, node);
             writeSpace();
             emitExpression(node.expression, parenthesizer.parenthesizeOperandOfPrefixUnary);
         }
         function emitVoidExpression(node) {
-            emitTokenWithComment(113, node.pos, writeKeyword, node);
+            emitTokenWithComment(114, node.pos, writeKeyword, node);
             writeSpace();
             emitExpression(node.expression, parenthesizer.parenthesizeOperandOfPrefixUnary);
         }
         function emitAwaitExpression(node) {
-            emitTokenWithComment(130, node.pos, writeKeyword, node);
+            emitTokenWithComment(131, node.pos, writeKeyword, node);
             writeSpace();
             emitExpression(node.expression, parenthesizer.parenthesizeOperandOfPrefixUnary);
         }
@@ -86322,7 +88298,7 @@
         }
         function shouldEmitWhitespaceBeforeOperand(node) {
             var operand = node.operand;
-            return operand.kind === 215
+            return operand.kind === 217
                 && ((node.operator === 39 && (operand.operator === 39 || operand.operator === 45))
                     || (node.operator === 40 && (operand.operator === 40 || operand.operator === 46)));
         }
@@ -86370,7 +88346,7 @@
                 var linesAfterOperator = getLinesBetweenNodes(node, operatorToken, node.right);
                 writeLinesAndIndent(linesBeforeOperator, isCommaOperator);
                 emitLeadingCommentsOfPosition(operatorToken.pos);
-                writeTokenNode(operatorToken, operatorToken.kind === 100 ? writeKeyword : writeOperator);
+                writeTokenNode(operatorToken, operatorToken.kind === 101 ? writeKeyword : writeOperator);
                 emitTrailingCommentsOfPosition(operatorToken.end, true);
                 writeLinesAndIndent(linesAfterOperator, true);
             }
@@ -86441,7 +88417,7 @@
             emitList(node, node.templateSpans, 262144);
         }
         function emitYieldExpression(node) {
-            emitTokenWithComment(124, node.pos, writeKeyword, node);
+            emitTokenWithComment(125, node.pos, writeKeyword, node);
             emit(node.asteriskToken);
             emitExpressionWithLeadingSpace(node.expression, parenthesizer.parenthesizeExpressionForDisallowedComma);
         }
@@ -86508,7 +88484,7 @@
             }
         }
         function emitIfStatement(node) {
-            var openParenPos = emitTokenWithComment(98, node.pos, writeKeyword, node);
+            var openParenPos = emitTokenWithComment(99, node.pos, writeKeyword, node);
             writeSpace();
             emitTokenWithComment(20, openParenPos, writePunctuation, node);
             emitExpression(node.expression);
@@ -86516,8 +88492,8 @@
             emitEmbeddedStatement(node, node.thenStatement);
             if (node.elseStatement) {
                 writeLineOrSpace(node, node.thenStatement, node.elseStatement);
-                emitTokenWithComment(90, node.thenStatement.end, writeKeyword, node);
-                if (node.elseStatement.kind === 235) {
+                emitTokenWithComment(91, node.thenStatement.end, writeKeyword, node);
+                if (node.elseStatement.kind === 237) {
                     writeSpace();
                     emit(node.elseStatement);
                 }
@@ -86527,14 +88503,14 @@
             }
         }
         function emitWhileClause(node, startPos) {
-            var openParenPos = emitTokenWithComment(114, startPos, writeKeyword, node);
+            var openParenPos = emitTokenWithComment(115, startPos, writeKeyword, node);
             writeSpace();
             emitTokenWithComment(20, openParenPos, writePunctuation, node);
             emitExpression(node.expression);
             emitTokenWithComment(21, node.expression.end, writePunctuation, node);
         }
         function emitDoStatement(node) {
-            emitTokenWithComment(89, node.pos, writeKeyword, node);
+            emitTokenWithComment(90, node.pos, writeKeyword, node);
             emitEmbeddedStatement(node, node.statement);
             if (ts.isBlock(node.statement) && !preserveSourceNewlines) {
                 writeSpace();
@@ -86550,7 +88526,7 @@
             emitEmbeddedStatement(node, node.statement);
         }
         function emitForStatement(node) {
-            var openParenPos = emitTokenWithComment(96, node.pos, writeKeyword, node);
+            var openParenPos = emitTokenWithComment(97, node.pos, writeKeyword, node);
             writeSpace();
             var pos = emitTokenWithComment(20, openParenPos, writePunctuation, node);
             emitForBinding(node.initializer);
@@ -86562,25 +88538,25 @@
             emitEmbeddedStatement(node, node.statement);
         }
         function emitForInStatement(node) {
-            var openParenPos = emitTokenWithComment(96, node.pos, writeKeyword, node);
+            var openParenPos = emitTokenWithComment(97, node.pos, writeKeyword, node);
             writeSpace();
             emitTokenWithComment(20, openParenPos, writePunctuation, node);
             emitForBinding(node.initializer);
             writeSpace();
-            emitTokenWithComment(100, node.initializer.end, writeKeyword, node);
+            emitTokenWithComment(101, node.initializer.end, writeKeyword, node);
             writeSpace();
             emitExpression(node.expression);
             emitTokenWithComment(21, node.expression.end, writePunctuation, node);
             emitEmbeddedStatement(node, node.statement);
         }
         function emitForOfStatement(node) {
-            var openParenPos = emitTokenWithComment(96, node.pos, writeKeyword, node);
+            var openParenPos = emitTokenWithComment(97, node.pos, writeKeyword, node);
             writeSpace();
             emitWithTrailingSpace(node.awaitModifier);
             emitTokenWithComment(20, openParenPos, writePunctuation, node);
             emitForBinding(node.initializer);
             writeSpace();
-            emitTokenWithComment(157, node.initializer.end, writeKeyword, node);
+            emitTokenWithComment(158, node.initializer.end, writeKeyword, node);
             writeSpace();
             emitExpression(node.expression);
             emitTokenWithComment(21, node.expression.end, writePunctuation, node);
@@ -86588,7 +88564,7 @@
         }
         function emitForBinding(node) {
             if (node !== undefined) {
-                if (node.kind === 251) {
+                if (node.kind === 253) {
                     emit(node);
                 }
                 else {
@@ -86597,12 +88573,12 @@
             }
         }
         function emitContinueStatement(node) {
-            emitTokenWithComment(85, node.pos, writeKeyword, node);
+            emitTokenWithComment(86, node.pos, writeKeyword, node);
             emitWithLeadingSpace(node.label);
             writeTrailingSemicolon();
         }
         function emitBreakStatement(node) {
-            emitTokenWithComment(80, node.pos, writeKeyword, node);
+            emitTokenWithComment(81, node.pos, writeKeyword, node);
             emitWithLeadingSpace(node.label);
             writeTrailingSemicolon();
         }
@@ -86625,18 +88601,18 @@
             }
             pos = writeTokenText(token, writer, pos);
             if (isSimilarNode && contextNode.end !== pos) {
-                var isJsxExprContext = contextNode.kind === 284;
+                var isJsxExprContext = contextNode.kind === 286;
                 emitTrailingCommentsOfPosition(pos, !isJsxExprContext, isJsxExprContext);
             }
             return pos;
         }
         function emitReturnStatement(node) {
-            emitTokenWithComment(104, node.pos, writeKeyword, node);
+            emitTokenWithComment(105, node.pos, writeKeyword, node);
             emitExpressionWithLeadingSpace(node.expression);
             writeTrailingSemicolon();
         }
         function emitWithStatement(node) {
-            var openParenPos = emitTokenWithComment(115, node.pos, writeKeyword, node);
+            var openParenPos = emitTokenWithComment(116, node.pos, writeKeyword, node);
             writeSpace();
             emitTokenWithComment(20, openParenPos, writePunctuation, node);
             emitExpression(node.expression);
@@ -86644,7 +88620,7 @@
             emitEmbeddedStatement(node, node.statement);
         }
         function emitSwitchStatement(node) {
-            var openParenPos = emitTokenWithComment(106, node.pos, writeKeyword, node);
+            var openParenPos = emitTokenWithComment(107, node.pos, writeKeyword, node);
             writeSpace();
             emitTokenWithComment(20, openParenPos, writePunctuation, node);
             emitExpression(node.expression);
@@ -86659,12 +88635,12 @@
             emit(node.statement);
         }
         function emitThrowStatement(node) {
-            emitTokenWithComment(108, node.pos, writeKeyword, node);
+            emitTokenWithComment(109, node.pos, writeKeyword, node);
             emitExpressionWithLeadingSpace(node.expression);
             writeTrailingSemicolon();
         }
         function emitTryStatement(node) {
-            emitTokenWithComment(110, node.pos, writeKeyword, node);
+            emitTokenWithComment(111, node.pos, writeKeyword, node);
             writeSpace();
             emit(node.tryBlock);
             if (node.catchClause) {
@@ -86673,13 +88649,13 @@
             }
             if (node.finallyBlock) {
                 writeLineOrSpace(node, node.catchClause || node.tryBlock, node.finallyBlock);
-                emitTokenWithComment(95, (node.catchClause || node.tryBlock).end, writeKeyword, node);
+                emitTokenWithComment(96, (node.catchClause || node.tryBlock).end, writeKeyword, node);
                 writeSpace();
                 emit(node.finallyBlock);
             }
         }
         function emitDebuggerStatement(node) {
-            writeToken(86, node.pos, writeKeyword);
+            writeToken(87, node.pos, writeKeyword);
             writeTrailingSemicolon();
         }
         function emitVariableDeclaration(node) {
@@ -86890,21 +88866,21 @@
         }
         function emitImportEqualsDeclaration(node) {
             emitModifiers(node, node.modifiers);
-            emitTokenWithComment(99, node.modifiers ? node.modifiers.end : node.pos, writeKeyword, node);
+            emitTokenWithComment(100, node.modifiers ? node.modifiers.end : node.pos, writeKeyword, node);
             writeSpace();
             if (node.isTypeOnly) {
-                emitTokenWithComment(149, node.pos, writeKeyword, node);
+                emitTokenWithComment(150, node.pos, writeKeyword, node);
                 writeSpace();
             }
             emit(node.name);
             writeSpace();
-            emitTokenWithComment(62, node.name.end, writePunctuation, node);
+            emitTokenWithComment(63, node.name.end, writePunctuation, node);
             writeSpace();
             emitModuleReference(node.moduleReference);
             writeTrailingSemicolon();
         }
         function emitModuleReference(node) {
-            if (node.kind === 78) {
+            if (node.kind === 79) {
                 emitExpression(node);
             }
             else {
@@ -86913,12 +88889,12 @@
         }
         function emitImportDeclaration(node) {
             emitModifiers(node, node.modifiers);
-            emitTokenWithComment(99, node.modifiers ? node.modifiers.end : node.pos, writeKeyword, node);
+            emitTokenWithComment(100, node.modifiers ? node.modifiers.end : node.pos, writeKeyword, node);
             writeSpace();
             if (node.importClause) {
                 emit(node.importClause);
                 writeSpace();
-                emitTokenWithComment(153, node.importClause.end, writeKeyword, node);
+                emitTokenWithComment(154, node.importClause.end, writeKeyword, node);
                 writeSpace();
             }
             emitExpression(node.moduleSpecifier);
@@ -86926,7 +88902,7 @@
         }
         function emitImportClause(node) {
             if (node.isTypeOnly) {
-                emitTokenWithComment(149, node.pos, writeKeyword, node);
+                emitTokenWithComment(150, node.pos, writeKeyword, node);
                 writeSpace();
             }
             emit(node.name);
@@ -86939,7 +88915,7 @@
         function emitNamespaceImport(node) {
             var asPos = emitTokenWithComment(41, node.pos, writePunctuation, node);
             writeSpace();
-            emitTokenWithComment(126, asPos, writeKeyword, node);
+            emitTokenWithComment(127, asPos, writeKeyword, node);
             writeSpace();
             emit(node.name);
         }
@@ -86950,25 +88926,25 @@
             emitImportOrExportSpecifier(node);
         }
         function emitExportAssignment(node) {
-            var nextPos = emitTokenWithComment(92, node.pos, writeKeyword, node);
+            var nextPos = emitTokenWithComment(93, node.pos, writeKeyword, node);
             writeSpace();
             if (node.isExportEquals) {
-                emitTokenWithComment(62, nextPos, writeOperator, node);
+                emitTokenWithComment(63, nextPos, writeOperator, node);
             }
             else {
-                emitTokenWithComment(87, nextPos, writeKeyword, node);
+                emitTokenWithComment(88, nextPos, writeKeyword, node);
             }
             writeSpace();
             emitExpression(node.expression, node.isExportEquals ?
-                parenthesizer.getParenthesizeRightSideOfBinaryForOperator(62) :
+                parenthesizer.getParenthesizeRightSideOfBinaryForOperator(63) :
                 parenthesizer.parenthesizeExpressionOfExportDefault);
             writeTrailingSemicolon();
         }
         function emitExportDeclaration(node) {
-            var nextPos = emitTokenWithComment(92, node.pos, writeKeyword, node);
+            var nextPos = emitTokenWithComment(93, node.pos, writeKeyword, node);
             writeSpace();
             if (node.isTypeOnly) {
-                nextPos = emitTokenWithComment(149, nextPos, writeKeyword, node);
+                nextPos = emitTokenWithComment(150, nextPos, writeKeyword, node);
                 writeSpace();
             }
             if (node.exportClause) {
@@ -86980,18 +88956,18 @@
             if (node.moduleSpecifier) {
                 writeSpace();
                 var fromPos = node.exportClause ? node.exportClause.end : nextPos;
-                emitTokenWithComment(153, fromPos, writeKeyword, node);
+                emitTokenWithComment(154, fromPos, writeKeyword, node);
                 writeSpace();
                 emitExpression(node.moduleSpecifier);
             }
             writeTrailingSemicolon();
         }
         function emitNamespaceExportDeclaration(node) {
-            var nextPos = emitTokenWithComment(92, node.pos, writeKeyword, node);
+            var nextPos = emitTokenWithComment(93, node.pos, writeKeyword, node);
             writeSpace();
-            nextPos = emitTokenWithComment(126, nextPos, writeKeyword, node);
+            nextPos = emitTokenWithComment(127, nextPos, writeKeyword, node);
             writeSpace();
-            nextPos = emitTokenWithComment(140, nextPos, writeKeyword, node);
+            nextPos = emitTokenWithComment(141, nextPos, writeKeyword, node);
             writeSpace();
             emit(node.name);
             writeTrailingSemicolon();
@@ -86999,7 +88975,7 @@
         function emitNamespaceExport(node) {
             var asPos = emitTokenWithComment(41, node.pos, writePunctuation, node);
             writeSpace();
-            emitTokenWithComment(126, asPos, writeKeyword, node);
+            emitTokenWithComment(127, asPos, writeKeyword, node);
             writeSpace();
             emit(node.name);
         }
@@ -87018,7 +88994,7 @@
             if (node.propertyName) {
                 emit(node.propertyName);
                 writeSpace();
-                emitTokenWithComment(126, node.propertyName.end, writeKeyword, node);
+                emitTokenWithComment(127, node.propertyName.end, writeKeyword, node);
                 writeSpace();
             }
             emit(node.name);
@@ -87114,7 +89090,7 @@
             }
         }
         function emitJsxTagName(node) {
-            if (node.kind === 78) {
+            if (node.kind === 79) {
                 emitExpression(node);
             }
             else {
@@ -87122,13 +89098,13 @@
             }
         }
         function emitCaseClause(node) {
-            emitTokenWithComment(81, node.pos, writeKeyword, node);
+            emitTokenWithComment(82, node.pos, writeKeyword, node);
             writeSpace();
             emitExpression(node.expression, parenthesizer.parenthesizeExpressionForDisallowedComma);
             emitCaseOrDefaultClauseRest(node, node.statements, node.expression.end);
         }
         function emitDefaultClause(node) {
-            var pos = emitTokenWithComment(87, node.pos, writeKeyword, node);
+            var pos = emitTokenWithComment(88, node.pos, writeKeyword, node);
             emitCaseOrDefaultClauseRest(node, node.statements, pos);
         }
         function emitCaseOrDefaultClauseRest(parentNode, statements, colonPos) {
@@ -87154,7 +89130,7 @@
             emitList(node, node.types, 528);
         }
         function emitCatchClause(node) {
-            var openParenPos = emitTokenWithComment(82, node.pos, writeKeyword, node);
+            var openParenPos = emitTokenWithComment(83, node.pos, writeKeyword, node);
             writeSpace();
             if (node.variableDeclaration) {
                 emitTokenWithComment(20, openParenPos, writePunctuation, node);
@@ -87211,7 +89187,7 @@
                 }
             }
             if (node.tags) {
-                if (node.tags.length === 1 && node.tags[0].kind === 333 && !node.comment) {
+                if (node.tags.length === 1 && node.tags[0].kind === 338 && !node.comment) {
                     writeSpace();
                     emit(node.tags[0]);
                 }
@@ -87256,7 +89232,7 @@
         function emitJSDocTypedefTag(tag) {
             emitJSDocTagName(tag.tagName);
             if (tag.typeExpression) {
-                if (tag.typeExpression.kind === 302) {
+                if (tag.typeExpression.kind === 304) {
                     emitJSDocTypeExpression(tag.typeExpression);
                 }
                 else {
@@ -87275,7 +89251,7 @@
                 emit(tag.fullName);
             }
             emitJSDocComment(tag.comment);
-            if (tag.typeExpression && tag.typeExpression.kind === 314) {
+            if (tag.typeExpression && tag.typeExpression.kind === 317) {
                 emitJSDocTypeLiteral(tag.typeExpression);
             }
         }
@@ -87397,16 +89373,16 @@
                     writeLine();
                 }
             }
-            for (var _c = 0, files_1 = files; _c < files_1.length; _c++) {
-                var directive = files_1[_c];
+            for (var _c = 0, files_2 = files; _c < files_2.length; _c++) {
+                var directive = files_2[_c];
                 var pos = writer.getTextPos();
                 writeComment("/// <reference path=\"" + directive.fileName + "\" />");
                 if (bundleFileInfo)
                     bundleFileInfo.sections.push({ pos: pos, end: writer.getTextPos(), kind: "reference", data: directive.fileName });
                 writeLine();
             }
-            for (var _d = 0, types_25 = types; _d < types_25.length; _d++) {
-                var directive = types_25[_d];
+            for (var _d = 0, types_24 = types; _d < types_24.length; _d++) {
+                var directive = types_24[_d];
                 var pos = writer.getTextPos();
                 writeComment("/// <reference types=\"" + directive.fileName + "\" />");
                 if (bundleFileInfo)
@@ -87576,7 +89552,7 @@
         function emitInitializer(node, equalCommentStartPos, container, parenthesizerRule) {
             if (node) {
                 writeSpace();
-                emitTokenWithComment(62, equalCommentStartPos, writeOperator, container);
+                emitTokenWithComment(63, equalCommentStartPos, writeOperator, container);
                 writeSpace();
                 emitExpression(node, parenthesizerRule);
             }
@@ -88077,7 +90053,7 @@
                 && ts.rangeEndIsOnSameLineAsRangeStart(block, block, currentSourceFile);
         }
         function skipSynthesizedParentheses(node) {
-            while (node.kind === 208 && ts.nodeIsSynthesized(node)) {
+            while (node.kind === 210 && ts.nodeIsSynthesized(node)) {
                 node = node.expression;
             }
             return node;
@@ -88141,84 +90117,84 @@
             if (!node)
                 return;
             switch (node.kind) {
-                case 231:
-                    ts.forEach(node.statements, generateNames);
-                    break;
-                case 246:
-                case 244:
-                case 236:
-                case 237:
-                    generateNames(node.statement);
-                    break;
-                case 235:
-                    generateNames(node.thenStatement);
-                    generateNames(node.elseStatement);
-                    break;
-                case 238:
-                case 240:
-                case 239:
-                    generateNames(node.initializer);
-                    generateNames(node.statement);
-                    break;
-                case 245:
-                    generateNames(node.caseBlock);
-                    break;
-                case 259:
-                    ts.forEach(node.clauses, generateNames);
-                    break;
-                case 285:
-                case 286:
+                case 233:
                     ts.forEach(node.statements, generateNames);
                     break;
                 case 248:
+                case 246:
+                case 238:
+                case 239:
+                    generateNames(node.statement);
+                    break;
+                case 237:
+                    generateNames(node.thenStatement);
+                    generateNames(node.elseStatement);
+                    break;
+                case 240:
+                case 242:
+                case 241:
+                    generateNames(node.initializer);
+                    generateNames(node.statement);
+                    break;
+                case 247:
+                    generateNames(node.caseBlock);
+                    break;
+                case 261:
+                    ts.forEach(node.clauses, generateNames);
+                    break;
+                case 287:
+                case 288:
+                    ts.forEach(node.statements, generateNames);
+                    break;
+                case 250:
                     generateNames(node.tryBlock);
                     generateNames(node.catchClause);
                     generateNames(node.finallyBlock);
                     break;
-                case 288:
+                case 290:
                     generateNames(node.variableDeclaration);
                     generateNames(node.block);
                     break;
-                case 233:
+                case 235:
                     generateNames(node.declarationList);
                     break;
-                case 251:
+                case 253:
                     ts.forEach(node.declarations, generateNames);
                     break;
-                case 250:
-                case 161:
-                case 199:
-                case 253:
+                case 252:
+                case 162:
+                case 201:
+                case 255:
                     generateNameIfNeeded(node.name);
                     break;
-                case 252:
+                case 254:
                     generateNameIfNeeded(node.name);
                     if (ts.getEmitFlags(node) & 524288) {
                         ts.forEach(node.parameters, generateNames);
                         generateNames(node.body);
                     }
                     break;
-                case 197:
-                case 198:
+                case 199:
+                case 200:
                     ts.forEach(node.elements, generateNames);
                     break;
-                case 262:
+                case 264:
                     generateNames(node.importClause);
                     break;
-                case 263:
+                case 265:
                     generateNameIfNeeded(node.name);
                     generateNames(node.namedBindings);
                     break;
-                case 264:
+                case 266:
                     generateNameIfNeeded(node.name);
                     break;
-                case 270:
+                case 272:
                     generateNameIfNeeded(node.name);
                     break;
-                case 265:
+                case 267:
                     ts.forEach(node.elements, generateNames);
                     break;
-                case 266:
+                case 268:
                     generateNameIfNeeded(node.propertyName || node.name);
                     break;
             }
@@ -88227,12 +90203,12 @@
             if (!node)
                 return;
             switch (node.kind) {
-                case 289:
-                case 290:
-                case 164:
-                case 166:
-                case 168:
-                case 169:
+                case 291:
+                case 292:
+                case 165:
+                case 167:
+                case 170:
+                case 171:
                     generateNameIfNeeded(node.name);
                     break;
             }
@@ -88364,25 +90340,25 @@
         }
         function generateNameForNode(node, flags) {
             switch (node.kind) {
-                case 78:
+                case 79:
                     return makeUniqueName(getTextOfNode(node), isUniqueName, !!(flags & 16), !!(flags & 8));
-                case 257:
-                case 256:
+                case 259:
+                case 258:
                     return generateNameForModuleOrEnum(node);
-                case 262:
-                case 268:
+                case 264:
+                case 270:
                     return generateNameForImportOrExportDeclaration(node);
-                case 252:
-                case 253:
-                case 267:
+                case 254:
+                case 255:
+                case 269:
                     return generateNameForExportDefault();
-                case 222:
+                case 224:
                     return generateNameForClassExpression();
-                case 166:
-                case 168:
-                case 169:
+                case 167:
+                case 170:
+                case 171:
                     return generateNameForMethodOrAccessor(node);
-                case 159:
+                case 160:
                     return makeTempVariableName(0, true);
                 default:
                     return makeTempVariableName(0);
@@ -88446,14 +90422,14 @@
             var skipTrailingComments = end < 0 || (emitFlags & 1024) !== 0 || node.kind === 11;
             if ((pos > 0 || end > 0) && pos !== end) {
                 if (!skipLeadingComments) {
-                    emitLeadingComments(pos, node.kind !== 339);
+                    emitLeadingComments(pos, node.kind !== 344);
                 }
                 if (!skipLeadingComments || (pos >= 0 && (emitFlags & 512) !== 0)) {
                     containerPos = pos;
                 }
                 if (!skipTrailingComments || (end >= 0 && (emitFlags & 1024) !== 0)) {
                     containerEnd = end;
-                    if (node.kind === 251) {
+                    if (node.kind === 253) {
                         declarationListContainerEnd = end;
                     }
                 }
@@ -88469,7 +90445,7 @@
                 containerPos = savedContainerPos;
                 containerEnd = savedContainerEnd;
                 declarationListContainerEnd = savedDeclarationListContainerEnd;
-                if (!skipTrailingComments && node.kind !== 339) {
+                if (!skipTrailingComments && node.kind !== 344) {
                     emitTrailingComments(end);
                 }
             }
@@ -88720,7 +90696,7 @@
             }
             else {
                 var source = sourceMapRange.source || sourceMapSource;
-                if (node.kind !== 339
+                if (node.kind !== 344
                     && (emitFlags & 16) === 0
                     && sourceMapRange.pos >= 0) {
                     emitSourcePos(sourceMapRange.source || sourceMapSource, skipSourceTrivia(source, sourceMapRange.pos));
@@ -88737,7 +90713,7 @@
                 if (emitFlags & 64) {
                     sourceMapsDisabled = false;
                 }
-                if (node.kind !== 339
+                if (node.kind !== 344
                     && (emitFlags & 32) === 0
                     && sourceMapRange.end >= 0) {
                     emitSourcePos(sourceMapRange.source || sourceMapSource, sourceMapRange.end);
@@ -88949,7 +90925,7 @@
             var rootResult = tryReadDirectory(rootDir, rootDirPath);
             var rootSymLinkResult;
             if (rootResult !== undefined) {
-                return ts.matchFiles(rootDir, extensions, excludes, includes, useCaseSensitiveFileNames, currentDirectory, depth, getFileSystemEntries, realpath);
+                return ts.matchFiles(rootDir, extensions, excludes, includes, useCaseSensitiveFileNames, currentDirectory, depth, getFileSystemEntries, realpath, directoryExists);
             }
             return host.readDirectory(rootDir, extensions, excludes, includes, depth);
             function getFileSystemEntries(dir) {
@@ -89076,6 +91052,14 @@
         });
     }
     ts.cleanExtendedConfigCache = cleanExtendedConfigCache;
+    function updatePackageJsonWatch(lookups, packageJsonWatches, createPackageJsonWatch) {
+        var newMap = new ts.Map(lookups);
+        ts.mutateMap(packageJsonWatches, newMap, {
+            createNewValue: createPackageJsonWatch,
+            onDeleteValue: ts.closeFileWatcher
+        });
+    }
+    ts.updatePackageJsonWatch = updatePackageJsonWatch;
     function updateMissingFilePathsWatch(program, missingFileWatches, createMissingFileWatch) {
         var missingFilePaths = program.getMissingFilePaths();
         var newMissingFilePathMap = ts.arrayToMap(missingFilePaths, ts.identity, ts.returnTrue);
@@ -89126,7 +91110,7 @@
         }
         if (!program)
             return false;
-        if (options.outFile || options.outDir)
+        if (ts.outFile(options) || options.outDir)
             return false;
         if (ts.fileExtensionIs(fileOrDirectoryPath, ".d.ts")) {
             if (options.declarationDir)
@@ -89250,7 +91234,7 @@
                 var triggerredInfo = (key === "watchFile" ? "FileWatcher" : "DirectoryWatcher") + ":: Triggered with " + args[0] + " " + (args[1] !== undefined ? args[1] : "") + ":: " + getWatchInfo(file, flags, options, detailInfo1, detailInfo2, getDetailWatchInfo);
                 log(triggerredInfo);
                 var start = ts.timestamp();
-                cb.call.apply(cb, __spreadArray([undefined], args));
+                cb.call.apply(cb, __spreadArray([undefined], args, false));
                 var elapsed = ts.timestamp() - start;
                 log("Elapsed:: " + elapsed + "ms " + triggerredInfo);
             }, flags, options, detailInfo1, detailInfo2); };
@@ -89601,7 +91585,7 @@
             var lineStart = ts.getPositionOfLineAndCharacter(file, i, 0);
             var lineEnd = i < lastLineInFile ? ts.getPositionOfLineAndCharacter(file, i + 1, 0) : file.text.length;
             var lineContent = file.text.slice(lineStart, lineEnd);
-            lineContent = lineContent.replace(/\s+$/g, "");
+            lineContent = ts.trimStringEnd(lineContent);
             lineContent = lineContent.replace(/\t/g, " ");
             context += indent + formatColorAndReset(ts.padLeft(i + 1 + "", gutterWidth), gutterStyleSequence) + gutterSeparator;
             context += lineContent + host.getNewLine();
@@ -89841,17 +91825,14 @@
     }
     ts.isProgramUptoDate = isProgramUptoDate;
     function getConfigFileParsingDiagnostics(configFileParseResult) {
-        return configFileParseResult.options.configFile ? __spreadArray(__spreadArray([], configFileParseResult.options.configFile.parseDiagnostics), configFileParseResult.errors) :
+        return configFileParseResult.options.configFile ? __spreadArray(__spreadArray([], configFileParseResult.options.configFile.parseDiagnostics, true), configFileParseResult.errors, true) :
             configFileParseResult.errors;
     }
     ts.getConfigFileParsingDiagnostics = getConfigFileParsingDiagnostics;
     function shouldProgramCreateNewSourceFiles(program, newOptions) {
         if (!program)
             return false;
-        var oldOptions = program.getCompilerOptions();
-        return !!ts.sourceFileAffectingCompilerOptions.some(function (option) {
-            return !ts.isJsonEqual(ts.getCompilerOptionValue(oldOptions, option), ts.getCompilerOptionValue(newOptions, option));
-        });
+        return ts.optionsHaveChanges(program.getCompilerOptions(), newOptions, ts.sourceFileAffectingCompilerOptions);
     }
     function createCreateProgramOptions(rootNames, options, host, oldProgram, configFileParsingDiagnostics) {
         return {
@@ -89929,6 +91910,7 @@
         var packageIdToSourceFile = new ts.Map();
         var sourceFileToPackageName = new ts.Map();
         var redirectTargetsMap = ts.createMultiMap();
+        var usesUriStyleNodeCoreModules = false;
         var filesByName = new ts.Map();
         var missingFilePaths;
         var filesByNameIgnoreCase = host.useCaseSensitiveFileNames() ? new ts.Map() : undefined;
@@ -90060,6 +92042,7 @@
             getSourceFileByPath: getSourceFileByPath,
             getSourceFiles: function () { return files; },
             getMissingFilePaths: function () { return missingFilePaths; },
+            getModuleResolutionCache: function () { return moduleResolutionCache; },
             getFilesByNameMap: function () { return filesByName; },
             getCompilerOptions: function () { return options; },
             getSyntacticDiagnostics: getSyntacticDiagnostics,
@@ -90092,6 +92075,7 @@
             getLibFileFromReference: getLibFileFromReference,
             sourceFileToPackageName: sourceFileToPackageName,
             redirectTargetsMap: redirectTargetsMap,
+            usesUriStyleNodeCoreModules: usesUriStyleNodeCoreModules,
             isEmittedFile: isEmittedFile,
             getConfigFileParsingDiagnostics: getConfigFileParsingDiagnostics,
             getResolvedModuleWithFailedLookupLocationsFromCache: getResolvedModuleWithFailedLookupLocationsFromCache,
@@ -90118,7 +92102,7 @@
                     return programDiagnostics.add(createDiagnosticExplainingFile(diagnostic.file && getSourceFileByPath(diagnostic.file), diagnostic.fileProcessingReason, diagnostic.diagnostic, diagnostic.args || ts.emptyArray));
                 case 0:
                     var _a = getReferencedFileLocation(getSourceFileByPath, diagnostic.reason), file = _a.file, pos = _a.pos, end = _a.end;
-                    return programDiagnostics.add(ts.createFileDiagnostic.apply(void 0, __spreadArray([file, ts.Debug.checkDefined(pos), ts.Debug.checkDefined(end) - pos, diagnostic.diagnostic], diagnostic.args || ts.emptyArray)));
+                    return programDiagnostics.add(ts.createFileDiagnostic.apply(void 0, __spreadArray([file, ts.Debug.checkDefined(pos), ts.Debug.checkDefined(end) - pos, diagnostic.diagnostic], diagnostic.args || ts.emptyArray, false)));
                 default:
                     ts.Debug.assertNever(diagnostic);
             }
@@ -90213,8 +92197,8 @@
             if (!classifiableNames) {
                 getTypeChecker();
                 classifiableNames = new ts.Set();
-                for (var _i = 0, files_2 = files; _i < files_2.length; _i++) {
-                    var sourceFile = files_2[_i];
+                for (var _i = 0, files_3 = files; _i < files_3.length; _i++) {
+                    var sourceFile = files_3[_i];
                     (_a = sourceFile.classifiableNames) === null || _a === void 0 ? void 0 : _a.forEach(function (value) { return classifiableNames.add(value); });
                 }
             }
@@ -90226,13 +92210,13 @@
             }
             var oldSourceFile = oldProgram && oldProgram.getSourceFile(file.fileName);
             if (oldSourceFile !== file && file.resolvedModules) {
-                var result_15 = [];
+                var result_14 = [];
                 for (var _i = 0, moduleNames_1 = moduleNames; _i < moduleNames_1.length; _i++) {
                     var moduleName = moduleNames_1[_i];
                     var resolvedModule = file.resolvedModules.get(moduleName);
-                    result_15.push(resolvedModule);
+                    result_14.push(resolvedModule);
                 }
-                return result_15;
+                return result_14;
             }
             var unknownModuleNames;
             var result;
@@ -90244,7 +92228,9 @@
                     var oldResolvedModule = ts.getResolvedModule(oldSourceFile, moduleName);
                     if (oldResolvedModule) {
                         if (ts.isTraceEnabled(options, host)) {
-                            ts.trace(host, ts.Diagnostics.Reusing_resolution_of_module_0_to_file_1_from_old_program, moduleName, ts.getNormalizedAbsolutePath(file.originalFileName, currentDirectory));
+                            ts.trace(host, oldResolvedModule.packageId ?
+                                ts.Diagnostics.Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2_with_Package_ID_3 :
+                                ts.Diagnostics.Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2, moduleName, ts.getNormalizedAbsolutePath(file.originalFileName, currentDirectory), oldResolvedModule.resolvedFileName, oldResolvedModule.packageId && ts.packageIdToString(oldResolvedModule.packageId));
                         }
                         (result || (result = new Array(moduleNames.length)))[i] = oldResolvedModule;
                         (reusedNames || (reusedNames = [])).push(moduleName);
@@ -90335,9 +92321,6 @@
             if (!ts.arrayIsEqualTo(oldRootNames, rootNames)) {
                 return 0;
             }
-            if (!ts.arrayIsEqualTo(options.types, oldOptions.types)) {
-                return 0;
-            }
             if (!canReuseProjectReferences()) {
                 return 0;
             }
@@ -90393,7 +92376,7 @@
                 }
                 if (fileChanged) {
                     if (!ts.arrayIsEqualTo(oldSourceFile.libReferenceDirectives, newSourceFile.libReferenceDirectives, fileReferenceIsEqualTo)) {
-                        return 0;
+                        structureIsReused = 1;
                     }
                     if (oldSourceFile.hasNoDefaultLib !== newSourceFile.hasNoDefaultLib) {
                         structureIsReused = 1;
@@ -90461,7 +92444,7 @@
             if (structureIsReused !== 2) {
                 return structureIsReused;
             }
-            if ((_a = host.hasChangedAutomaticTypeDirectiveNames) === null || _a === void 0 ? void 0 : _a.call(host)) {
+            if (ts.changesAffectingProgramStructure(oldOptions, options) || ((_a = host.hasChangedAutomaticTypeDirectiveNames) === null || _a === void 0 ? void 0 : _a.call(host))) {
                 return 1;
             }
             missingFilePaths = oldProgram.getMissingFilePaths();
@@ -90490,6 +92473,7 @@
             resolvedTypeReferenceDirectives = oldProgram.getResolvedTypeReferenceDirectives();
             sourceFileToPackageName = oldProgram.sourceFileToPackageName;
             redirectTargetsMap = oldProgram.redirectTargetsMap;
+            usesUriStyleNodeCoreModules = oldProgram.usesUriStyleNodeCoreModules;
             return 2;
         }
         function getEmitHost(writeFileCallback) {
@@ -90673,7 +92657,7 @@
             }
         }
         function getSemanticDiagnosticsForFile(sourceFile, cancellationToken) {
-            return ts.concatenate(filterSemanticDiagnotics(getBindAndCheckDiagnosticsForFile(sourceFile, cancellationToken), options), getProgramDiagnostics(sourceFile));
+            return ts.concatenate(filterSemanticDiagnostics(getBindAndCheckDiagnosticsForFile(sourceFile, cancellationToken), options), getProgramDiagnostics(sourceFile));
         }
         function getBindAndCheckDiagnosticsForFile(sourceFile, cancellationToken) {
             return getAndCacheDiagnostics(sourceFile, cancellationToken, cachedBindAndCheckDiagnosticsForFile, getBindAndCheckDiagnosticsForFileNoCache);
@@ -90687,8 +92671,8 @@
                 ts.Debug.assert(!!sourceFile.bindDiagnostics);
                 var isCheckJs = ts.isCheckJsEnabledForFile(sourceFile, options);
                 var isTsNoCheck = !!sourceFile.checkJsDirective && sourceFile.checkJsDirective.enabled === false;
-                var includeBindAndCheckDiagnostics = !isTsNoCheck && (sourceFile.scriptKind === 3 || sourceFile.scriptKind === 4 ||
-                    sourceFile.scriptKind === 5 || isCheckJs || sourceFile.scriptKind === 7);
+                var includeBindAndCheckDiagnostics = !isTsNoCheck && (sourceFile.scriptKind === 3 || sourceFile.scriptKind === 4
+                    || sourceFile.scriptKind === 5 || isCheckJs || sourceFile.scriptKind === 7);
                 var bindDiagnostics = includeBindAndCheckDiagnostics ? sourceFile.bindDiagnostics : ts.emptyArray;
                 var checkDiagnostics = includeBindAndCheckDiagnostics ? typeChecker.getDiagnostics(sourceFile, cancellationToken) : ts.emptyArray;
                 return getMergedBindAndCheckDiagnostics(sourceFile, includeBindAndCheckDiagnostics, bindDiagnostics, checkDiagnostics, isCheckJs ? sourceFile.jsDocDiagnostics : undefined);
@@ -90748,79 +92732,79 @@
                 return diagnostics;
                 function walk(node, parent) {
                     switch (parent.kind) {
-                        case 161:
-                        case 164:
-                        case 166:
+                        case 162:
+                        case 165:
+                        case 167:
                             if (parent.questionToken === node) {
                                 diagnostics.push(createDiagnosticForNode(node, ts.Diagnostics.The_0_modifier_can_only_be_used_in_TypeScript_files, "?"));
                                 return "skip";
                             }
-                        case 165:
-                        case 167:
-                        case 168:
+                        case 166:
                         case 169:
-                        case 209:
+                        case 170:
+                        case 171:
+                        case 211:
+                        case 254:
+                        case 212:
                         case 252:
-                        case 210:
-                        case 250:
                             if (parent.type === node) {
                                 diagnostics.push(createDiagnosticForNode(node, ts.Diagnostics.Type_annotations_can_only_be_used_in_TypeScript_files));
                                 return "skip";
                             }
                     }
                     switch (node.kind) {
-                        case 263:
+                        case 265:
                             if (node.isTypeOnly) {
                                 diagnostics.push(createDiagnosticForNode(parent, ts.Diagnostics._0_declarations_can_only_be_used_in_TypeScript_files, "import type"));
                                 return "skip";
                             }
                             break;
-                        case 268:
+                        case 270:
                             if (node.isTypeOnly) {
                                 diagnostics.push(createDiagnosticForNode(node, ts.Diagnostics._0_declarations_can_only_be_used_in_TypeScript_files, "export type"));
                                 return "skip";
                             }
                             break;
-                        case 261:
+                        case 263:
                             diagnostics.push(createDiagnosticForNode(node, ts.Diagnostics.import_can_only_be_used_in_TypeScript_files));
                             return "skip";
-                        case 267:
+                        case 269:
                             if (node.isExportEquals) {
                                 diagnostics.push(createDiagnosticForNode(node, ts.Diagnostics.export_can_only_be_used_in_TypeScript_files));
                                 return "skip";
                             }
                             break;
-                        case 287:
+                        case 289:
                             var heritageClause = node;
-                            if (heritageClause.token === 116) {
+                            if (heritageClause.token === 117) {
                                 diagnostics.push(createDiagnosticForNode(node, ts.Diagnostics.implements_clauses_can_only_be_used_in_TypeScript_files));
                                 return "skip";
                             }
                             break;
-                        case 254:
-                            var interfaceKeyword = ts.tokenToString(117);
+                        case 256:
+                            var interfaceKeyword = ts.tokenToString(118);
                             ts.Debug.assertIsDefined(interfaceKeyword);
                             diagnostics.push(createDiagnosticForNode(node, ts.Diagnostics._0_declarations_can_only_be_used_in_TypeScript_files, interfaceKeyword));
                             return "skip";
-                        case 257:
-                            var moduleKeyword = node.flags & 16 ? ts.tokenToString(140) : ts.tokenToString(139);
+                        case 259:
+                            var moduleKeyword = node.flags & 16 ? ts.tokenToString(141) : ts.tokenToString(140);
                             ts.Debug.assertIsDefined(moduleKeyword);
                             diagnostics.push(createDiagnosticForNode(node, ts.Diagnostics._0_declarations_can_only_be_used_in_TypeScript_files, moduleKeyword));
                             return "skip";
-                        case 255:
+                        case 257:
                             diagnostics.push(createDiagnosticForNode(node, ts.Diagnostics.Type_aliases_can_only_be_used_in_TypeScript_files));
                             return "skip";
-                        case 256:
-                            var enumKeyword = ts.Debug.checkDefined(ts.tokenToString(91));
+                        case 258:
+                            var enumKeyword = ts.Debug.checkDefined(ts.tokenToString(92));
                             diagnostics.push(createDiagnosticForNode(node, ts.Diagnostics._0_declarations_can_only_be_used_in_TypeScript_files, enumKeyword));
                             return "skip";
-                        case 226:
+                        case 228:
                             diagnostics.push(createDiagnosticForNode(node, ts.Diagnostics.Non_null_assertions_can_only_be_used_in_TypeScript_files));
                             return "skip";
-                        case 225:
+                        case 227:
                             diagnostics.push(createDiagnosticForNode(node.type, ts.Diagnostics.Type_assertion_expressions_can_only_be_used_in_TypeScript_files));
                             return "skip";
-                        case 207:
+                        case 209:
                             ts.Debug.fail();
                     }
                 }
@@ -90829,48 +92813,48 @@
                         diagnostics.push(createDiagnosticForNode(parent, ts.Diagnostics.Experimental_support_for_decorators_is_a_feature_that_is_subject_to_change_in_a_future_release_Set_the_experimentalDecorators_option_in_your_tsconfig_or_jsconfig_to_remove_this_warning));
                     }
                     switch (parent.kind) {
-                        case 253:
-                        case 222:
-                        case 166:
+                        case 255:
+                        case 224:
                         case 167:
-                        case 168:
                         case 169:
-                        case 209:
-                        case 252:
-                        case 210:
+                        case 170:
+                        case 171:
+                        case 211:
+                        case 254:
+                        case 212:
                             if (nodes === parent.typeParameters) {
                                 diagnostics.push(createDiagnosticForNodeArray(nodes, ts.Diagnostics.Type_parameter_declarations_can_only_be_used_in_TypeScript_files));
                                 return "skip";
                             }
-                        case 233:
+                        case 235:
                             if (nodes === parent.modifiers) {
-                                checkModifiers(parent.modifiers, parent.kind === 233);
+                                checkModifiers(parent.modifiers, parent.kind === 235);
                                 return "skip";
                             }
                             break;
-                        case 164:
+                        case 165:
                             if (nodes === parent.modifiers) {
                                 for (var _i = 0, _a = nodes; _i < _a.length; _i++) {
                                     var modifier = _a[_i];
-                                    if (modifier.kind !== 123) {
+                                    if (modifier.kind !== 124) {
                                         diagnostics.push(createDiagnosticForNode(modifier, ts.Diagnostics.The_0_modifier_can_only_be_used_in_TypeScript_files, ts.tokenToString(modifier.kind)));
                                     }
                                 }
                                 return "skip";
                             }
                             break;
-                        case 161:
+                        case 162:
                             if (nodes === parent.modifiers) {
                                 diagnostics.push(createDiagnosticForNodeArray(nodes, ts.Diagnostics.Parameter_modifiers_can_only_be_used_in_TypeScript_files));
                                 return "skip";
                             }
                             break;
-                        case 204:
-                        case 205:
-                        case 224:
-                        case 275:
-                        case 276:
                         case 206:
+                        case 207:
+                        case 226:
+                        case 277:
+                        case 278:
+                        case 208:
                             if (nodes === parent.typeArguments) {
                                 diagnostics.push(createDiagnosticForNodeArray(nodes, ts.Diagnostics.Type_arguments_can_only_be_used_in_TypeScript_files));
                                 return "skip";
@@ -90882,22 +92866,22 @@
                     for (var _i = 0, modifiers_2 = modifiers; _i < modifiers_2.length; _i++) {
                         var modifier = modifiers_2[_i];
                         switch (modifier.kind) {
-                            case 84:
+                            case 85:
                                 if (isConstValid) {
                                     continue;
                                 }
-                            case 122:
-                            case 120:
+                            case 123:
                             case 121:
-                            case 142:
-                            case 133:
-                            case 125:
-                            case 156:
+                            case 122:
+                            case 143:
+                            case 134:
+                            case 126:
+                            case 157:
                                 diagnostics.push(createDiagnosticForNode(modifier, ts.Diagnostics.The_0_modifier_can_only_be_used_in_TypeScript_files, ts.tokenToString(modifier.kind)));
                                 break;
-                            case 123:
-                            case 92:
-                            case 87:
+                            case 124:
+                            case 93:
+                            case 88:
                         }
                     }
                 }
@@ -90965,8 +92949,8 @@
             return a.fileName === b.fileName;
         }
         function moduleNameIsEqualTo(a, b) {
-            return a.kind === 78
-                ? b.kind === 78 && a.escapedText === b.escapedText
+            return a.kind === 79
+                ? b.kind === 79 && a.escapedText === b.escapedText
                 : b.kind === 10 && a.text === b.text;
         }
         function createSyntheticImport(text, file) {
@@ -91014,6 +92998,9 @@
                     var moduleNameExpr = ts.getExternalModuleName(node);
                     if (moduleNameExpr && ts.isStringLiteral(moduleNameExpr) && moduleNameExpr.text && (!inAmbientModule || !ts.isExternalModuleNameRelative(moduleNameExpr.text))) {
                         imports = ts.append(imports, moduleNameExpr);
+                        if (!usesUriStyleNodeCoreModules && currentNodeModulesDepth === 0 && !file.isDeclarationFile) {
+                            usesUriStyleNodeCoreModules = ts.startsWith(moduleNameExpr.text, "node:");
+                        }
                     }
                 }
                 else if (ts.isModuleDeclaration(node)) {
@@ -91568,6 +93555,9 @@
             if (options.strictPropertyInitialization && !ts.getStrictOptionValue(options, "strictNullChecks")) {
                 createDiagnosticForOptionName(ts.Diagnostics.Option_0_cannot_be_specified_without_specifying_option_1, "strictPropertyInitialization", "strictNullChecks");
             }
+            if (options.exactOptionalPropertyTypes && !ts.getStrictOptionValue(options, "strictNullChecks")) {
+                createDiagnosticForOptionName(ts.Diagnostics.Option_0_cannot_be_specified_without_specifying_option_1, "exactOptionalPropertyTypes", "strictNullChecks");
+            }
             if (options.isolatedModules) {
                 if (options.out) {
                     createDiagnosticForOptionName(ts.Diagnostics.Option_0_cannot_be_specified_with_option_1, "out", "isolatedModules");
@@ -91604,8 +93594,8 @@
             verifyProjectReferences();
             if (options.composite) {
                 var rootPaths = new ts.Set(rootNames.map(toPath));
-                for (var _i = 0, files_3 = files; _i < files_3.length; _i++) {
-                    var file = files_3[_i];
+                for (var _i = 0, files_4 = files; _i < files_4.length; _i++) {
+                    var file = files_4[_i];
                     if (ts.sourceFileMayBeEmitted(file, program) && !rootPaths.has(file.path)) {
                         addProgramDiagnosticExplainingFile(file, ts.Diagnostics.File_0_is_not_listed_within_the_file_list_of_project_1_Projects_must_list_all_files_or_use_an_include_pattern, [file.fileName, options.configFilePath || ""]);
                     }
@@ -91819,7 +93809,7 @@
             var location = locationReason && getReferencedFileLocation(getSourceFileByPath, locationReason);
             var fileIncludeReasonDetails = fileIncludeReasons && ts.chainDiagnosticMessages(fileIncludeReasons, ts.Diagnostics.The_file_is_in_the_program_because_Colon);
             var redirectInfo = file && ts.explainIfFileIsRedirect(file);
-            var chain = ts.chainDiagnosticMessages.apply(void 0, __spreadArray([redirectInfo ? fileIncludeReasonDetails ? __spreadArray([fileIncludeReasonDetails], redirectInfo) : redirectInfo : fileIncludeReasonDetails, diagnostic], args || ts.emptyArray));
+            var chain = ts.chainDiagnosticMessages.apply(void 0, __spreadArray([redirectInfo ? fileIncludeReasonDetails ? __spreadArray([fileIncludeReasonDetails], redirectInfo, true) : redirectInfo : fileIncludeReasonDetails, diagnostic], args || ts.emptyArray, false));
             return location && isReferenceFileLocation(location) ?
                 ts.createFileDiagnosticFromMessageChain(location.file, location.pos, location.end - location.pos, chain, relatedInfo) :
                 ts.createCompilerDiagnosticFromMessageChain(chain, relatedInfo);
@@ -92094,7 +94084,13 @@
             if (host.getSymlinkCache) {
                 return host.getSymlinkCache();
             }
-            return symlinks || (symlinks = ts.discoverProbableSymlinks(files, getCanonicalFileName, host.getCurrentDirectory()));
+            if (!symlinks) {
+                symlinks = ts.createSymlinkCache(currentDirectory, getCanonicalFileName);
+            }
+            if (files && resolvedTypeReferenceDirectives && !symlinks.hasProcessedResolutions()) {
+                symlinks.setSymlinksFromResolutions(files, resolvedTypeReferenceDirectives);
+            }
+            return symlinks;
         }
     }
     ts.createProgram = createProgram;
@@ -92239,7 +94235,7 @@
         }
         if (!options.noEmitOnError)
             return undefined;
-        var diagnostics = __spreadArray(__spreadArray(__spreadArray(__spreadArray([], program.getOptionsDiagnostics(cancellationToken)), program.getSyntacticDiagnostics(sourceFile, cancellationToken)), program.getGlobalDiagnostics(cancellationToken)), program.getSemanticDiagnostics(sourceFile, cancellationToken));
+        var diagnostics = __spreadArray(__spreadArray(__spreadArray(__spreadArray([], program.getOptionsDiagnostics(cancellationToken), true), program.getSyntacticDiagnostics(sourceFile, cancellationToken), true), program.getGlobalDiagnostics(cancellationToken), true), program.getSemanticDiagnostics(sourceFile, cancellationToken), true);
         if (diagnostics.length === 0 && ts.getEmitDeclarations(program.getCompilerOptions())) {
             diagnostics = program.getDeclarationDiagnostics(undefined, cancellationToken);
         }
@@ -92249,16 +94245,16 @@
         if (!sourceFile && !ts.outFile(options)) {
             var emitResult = program.emitBuildInfo(writeFile, cancellationToken);
             if (emitResult.diagnostics)
-                diagnostics = __spreadArray(__spreadArray([], diagnostics), emitResult.diagnostics);
+                diagnostics = __spreadArray(__spreadArray([], diagnostics, true), emitResult.diagnostics, true);
             emittedFiles = emitResult.emittedFiles;
         }
         return { diagnostics: diagnostics, sourceMaps: undefined, emittedFiles: emittedFiles, emitSkipped: true };
     }
     ts.handleNoEmitOptions = handleNoEmitOptions;
-    function filterSemanticDiagnotics(diagnostic, option) {
+    function filterSemanticDiagnostics(diagnostic, option) {
         return ts.filter(diagnostic, function (d) { return !d.skippedOn || !option[d.skippedOn]; });
     }
-    ts.filterSemanticDiagnotics = filterSemanticDiagnotics;
+    ts.filterSemanticDiagnostics = filterSemanticDiagnostics;
     function parseConfigHostFromCompilerHostLike(host, directoryStructureHost) {
         if (directoryStructureHost === void 0) { directoryStructureHost = host; }
         return {
@@ -92366,15 +94362,83 @@
     ts.getFileEmitOutput = getFileEmitOutput;
     var BuilderState;
     (function (BuilderState) {
-        function getReferencedFileFromImportedModuleSymbol(symbol) {
-            if (symbol.declarations && symbol.declarations[0]) {
-                var declarationSourceFile = ts.getSourceFileOfNode(symbol.declarations[0]);
-                return declarationSourceFile && declarationSourceFile.resolvedPath;
+        var manyToManyPathMapCount = 0;
+        function createManyToManyPathMap() {
+            function create(forward, reverse, deleted) {
+                var version = 0;
+                var map = {
+                    id: manyToManyPathMapCount++,
+                    version: function () { return version; },
+                    clone: function () { return create(new ts.Map(forward), new ts.Map(reverse), deleted && new ts.Set(deleted)); },
+                    forEach: function (fn) { return forward.forEach(fn); },
+                    getKeys: function (v) { return reverse.get(v); },
+                    getValues: function (k) { return forward.get(k); },
+                    hasKey: function (k) { return forward.has(k); },
+                    keys: function () { return forward.keys(); },
+                    deletedKeys: function () { return deleted; },
+                    deleteKey: function (k) {
+                        (deleted || (deleted = new ts.Set())).add(k);
+                        var set = forward.get(k);
+                        if (!set) {
+                            return false;
+                        }
+                        set.forEach(function (v) { return deleteFromMultimap(reverse, v, k); });
+                        forward.delete(k);
+                        version++;
+                        return true;
+                    },
+                    set: function (k, vSet) {
+                        var changed = !!(deleted === null || deleted === void 0 ? void 0 : deleted.delete(k));
+                        var existingVSet = forward.get(k);
+                        forward.set(k, vSet);
+                        existingVSet === null || existingVSet === void 0 ? void 0 : existingVSet.forEach(function (v) {
+                            if (!vSet.has(v)) {
+                                changed = true;
+                                deleteFromMultimap(reverse, v, k);
+                            }
+                        });
+                        vSet.forEach(function (v) {
+                            if (!(existingVSet === null || existingVSet === void 0 ? void 0 : existingVSet.has(v))) {
+                                changed = true;
+                                addToMultimap(reverse, v, k);
+                            }
+                        });
+                        if (changed) {
+                            version++;
+                        }
+                        return map;
+                    },
+                };
+                return map;
             }
+            return create(new ts.Map(), new ts.Map(), undefined);
         }
-        function getReferencedFileFromImportLiteral(checker, importName) {
+        BuilderState.createManyToManyPathMap = createManyToManyPathMap;
+        function addToMultimap(map, k, v) {
+            var set = map.get(k);
+            if (!set) {
+                set = new ts.Set();
+                map.set(k, set);
+            }
+            set.add(v);
+        }
+        function deleteFromMultimap(map, k, v, removeEmpty) {
+            if (removeEmpty === void 0) { removeEmpty = true; }
+            var set = map.get(k);
+            if (set === null || set === void 0 ? void 0 : set.delete(v)) {
+                if (removeEmpty && !set.size) {
+                    map.delete(k);
+                }
+                return true;
+            }
+            return false;
+        }
+        function getReferencedFilesFromImportedModuleSymbol(symbol) {
+            return ts.mapDefined(symbol.declarations, function (declaration) { var _a; return (_a = ts.getSourceFileOfNode(declaration)) === null || _a === void 0 ? void 0 : _a.resolvedPath; });
+        }
+        function getReferencedFilesFromImportLiteral(checker, importName) {
             var symbol = checker.getSymbolAtLocation(importName);
-            return symbol && getReferencedFileFromImportedModuleSymbol(symbol);
+            return symbol && getReferencedFilesFromImportedModuleSymbol(symbol);
         }
         function getReferencedFileFromFileName(program, fileName, sourceFileDirectory, getCanonicalFileName) {
             return ts.toPath(program.getProjectReferenceRedirect(fileName) || fileName, sourceFileDirectory, getCanonicalFileName);
@@ -92385,10 +94449,8 @@
                 var checker = program.getTypeChecker();
                 for (var _i = 0, _a = sourceFile.imports; _i < _a.length; _i++) {
                     var importName = _a[_i];
-                    var declarationSourceFilePath = getReferencedFileFromImportLiteral(checker, importName);
-                    if (declarationSourceFilePath) {
-                        addReferencedFile(declarationSourceFilePath);
-                    }
+                    var declarationSourceFilePaths = getReferencedFilesFromImportLiteral(checker, importName);
+                    declarationSourceFilePaths === null || declarationSourceFilePaths === void 0 ? void 0 : declarationSourceFilePaths.forEach(addReferencedFile);
                 }
             }
             var sourceFileDirectory = ts.getDirectoryPath(sourceFile.resolvedPath);
@@ -92453,8 +94515,8 @@
         BuilderState.canReuseOldState = canReuseOldState;
         function create(newProgram, getCanonicalFileName, oldState, disableUseFileVersionAsSignature) {
             var fileInfos = new ts.Map();
-            var referencedMap = newProgram.getCompilerOptions().module !== ts.ModuleKind.None ? new ts.Map() : undefined;
-            var exportedModulesMap = referencedMap ? new ts.Map() : undefined;
+            var referencedMap = newProgram.getCompilerOptions().module !== ts.ModuleKind.None ? createManyToManyPathMap() : undefined;
+            var exportedModulesMap = referencedMap ? createManyToManyPathMap() : undefined;
             var hasCalledUpdateShapeSignature = new ts.Set();
             var useOldState = canReuseOldState(referencedMap, oldState);
             newProgram.getTypeChecker();
@@ -92468,7 +94530,7 @@
                         referencedMap.set(sourceFile.resolvedPath, newReferences);
                     }
                     if (useOldState) {
-                        var exportedModules = oldState.exportedModulesMap.get(sourceFile.resolvedPath);
+                        var exportedModules = oldState.exportedModulesMap.getValues(sourceFile.resolvedPath);
                         if (exportedModules) {
                             exportedModulesMap.set(sourceFile.resolvedPath, exportedModules);
                         }
@@ -92491,10 +94553,11 @@
         }
         BuilderState.releaseCache = releaseCache;
         function clone(state) {
+            var _a, _b;
             return {
                 fileInfos: new ts.Map(state.fileInfos),
-                referencedMap: state.referencedMap && new ts.Map(state.referencedMap),
-                exportedModulesMap: state.exportedModulesMap && new ts.Map(state.exportedModulesMap),
+                referencedMap: (_a = state.referencedMap) === null || _a === void 0 ? void 0 : _a.clone(),
+                exportedModulesMap: (_b = state.exportedModulesMap) === null || _b === void 0 ? void 0 : _b.clone(),
                 hasCalledUpdateShapeSignature: new ts.Set(state.hasCalledUpdateShapeSignature),
                 useFileVersionAsSignature: state.useFileVersionAsSignature,
             };
@@ -92525,7 +94588,8 @@
             state.hasCalledUpdateShapeSignature.add(path);
         }
         BuilderState.updateSignatureOfFile = updateSignatureOfFile;
-        function updateShapeSignature(state, programOfThisState, sourceFile, cacheToUpdateSignature, cancellationToken, computeHash, exportedModulesMapCache) {
+        function updateShapeSignature(state, programOfThisState, sourceFile, cacheToUpdateSignature, cancellationToken, computeHash, exportedModulesMapCache, useFileVersionAsSignature) {
+            if (useFileVersionAsSignature === void 0) { useFileVersionAsSignature = state.useFileVersionAsSignature; }
             ts.Debug.assert(!!sourceFile);
             ts.Debug.assert(!exportedModulesMapCache || !!state.exportedModulesMap, "Compute visible to outside map only if visibleToOutsideReferencedMap present in the state");
             if (state.hasCalledUpdateShapeSignature.has(sourceFile.resolvedPath) || cacheToUpdateSignature.has(sourceFile.resolvedPath)) {
@@ -92536,7 +94600,7 @@
                 return ts.Debug.fail();
             var prevSignature = info.signature;
             var latestSignature;
-            if (!sourceFile.isDeclarationFile && !state.useFileVersionAsSignature) {
+            if (!sourceFile.isDeclarationFile && !useFileVersionAsSignature) {
                 var emitOutput_1 = getFileEmitOutput(programOfThisState, sourceFile, true, cancellationToken, undefined, true);
                 var firstDts_1 = ts.firstOrUndefined(emitOutput_1.outputFiles);
                 if (firstDts_1) {
@@ -92550,8 +94614,13 @@
             if (latestSignature === undefined) {
                 latestSignature = sourceFile.version;
                 if (exportedModulesMapCache && latestSignature !== prevSignature) {
-                    var references = state.referencedMap ? state.referencedMap.get(sourceFile.resolvedPath) : undefined;
-                    exportedModulesMapCache.set(sourceFile.resolvedPath, references || false);
+                    var references = state.referencedMap ? state.referencedMap.getValues(sourceFile.resolvedPath) : undefined;
+                    if (references) {
+                        exportedModulesMapCache.set(sourceFile.resolvedPath, references);
+                    }
+                    else {
+                        exportedModulesMapCache.deleteKey(sourceFile.resolvedPath);
+                    }
                 }
             }
             cacheToUpdateSignature.set(sourceFile.resolvedPath, latestSignature);
@@ -92560,32 +94629,44 @@
         BuilderState.updateShapeSignature = updateShapeSignature;
         function updateExportedModules(sourceFile, exportedModulesFromDeclarationEmit, exportedModulesMapCache) {
             if (!exportedModulesFromDeclarationEmit) {
-                exportedModulesMapCache.set(sourceFile.resolvedPath, false);
+                exportedModulesMapCache.deleteKey(sourceFile.resolvedPath);
                 return;
             }
             var exportedModules;
-            exportedModulesFromDeclarationEmit.forEach(function (symbol) { return addExportedModule(getReferencedFileFromImportedModuleSymbol(symbol)); });
-            exportedModulesMapCache.set(sourceFile.resolvedPath, exportedModules || false);
-            function addExportedModule(exportedModulePath) {
-                if (exportedModulePath) {
+            exportedModulesFromDeclarationEmit.forEach(function (symbol) { return addExportedModule(getReferencedFilesFromImportedModuleSymbol(symbol)); });
+            if (exportedModules) {
+                exportedModulesMapCache.set(sourceFile.resolvedPath, exportedModules);
+            }
+            else {
+                exportedModulesMapCache.deleteKey(sourceFile.resolvedPath);
+            }
+            function addExportedModule(exportedModulePaths) {
+                if (exportedModulePaths === null || exportedModulePaths === void 0 ? void 0 : exportedModulePaths.length) {
                     if (!exportedModules) {
                         exportedModules = new ts.Set();
                     }
-                    exportedModules.add(exportedModulePath);
+                    exportedModulePaths.forEach(function (path) { return exportedModules.add(path); });
                 }
             }
         }
         function updateExportedFilesMapFromCache(state, exportedModulesMapCache) {
+            var _a;
             if (exportedModulesMapCache) {
                 ts.Debug.assert(!!state.exportedModulesMap);
-                exportedModulesMapCache.forEach(function (exportedModules, path) {
-                    if (exportedModules) {
-                        state.exportedModulesMap.set(path, exportedModules);
+                var cacheId = exportedModulesMapCache.id;
+                var cacheVersion = exportedModulesMapCache.version();
+                if (state.previousCache) {
+                    if (state.previousCache.id === cacheId && state.previousCache.version === cacheVersion) {
+                        return;
                     }
-                    else {
-                        state.exportedModulesMap.delete(path);
-                    }
-                });
+                    state.previousCache.id = cacheId;
+                    state.previousCache.version = cacheVersion;
+                }
+                else {
+                    state.previousCache = { id: cacheId, version: cacheVersion };
+                }
+                (_a = exportedModulesMapCache.deletedKeys()) === null || _a === void 0 ? void 0 : _a.forEach(function (path) { return state.exportedModulesMap.deleteKey(path); });
+                exportedModulesMapCache.forEach(function (exportedModules, path) { return state.exportedModulesMap.set(path, exportedModules); });
             }
         }
         BuilderState.updateExportedFilesMapFromCache = updateExportedFilesMapFromCache;
@@ -92603,7 +94684,7 @@
                 var path = queue.pop();
                 if (!seenMap.has(path)) {
                     seenMap.add(path);
-                    var references = state.referencedMap.get(path);
+                    var references = state.referencedMap.getValues(path);
                     if (references) {
                         var iterator = references.keys();
                         for (var iterResult = iterator.next(); !iterResult.done; iterResult = iterator.next()) {
@@ -92623,10 +94704,8 @@
             return state.allFileNames;
         }
         function getReferencedByPaths(state, referencedFilePath) {
-            return ts.arrayFrom(ts.mapDefinedIterator(state.referencedMap.entries(), function (_a) {
-                var filePath = _a[0], referencesInFile = _a[1];
-                return referencesInFile.has(referencedFilePath) ? filePath : undefined;
-            }));
+            var keys = state.referencedMap.getKeys(referencedFilePath);
+            return keys ? ts.arrayFrom(keys.keys()) : [];
         }
         BuilderState.getReferencedByPaths = getReferencedByPaths;
         function containsOnlyAmbientModules(sourceFile) {
@@ -92643,7 +94722,7 @@
         }
         function isFileAffectingGlobalScope(sourceFile) {
             return containsGlobalScopeAugmentation(sourceFile) ||
-                !ts.isExternalOrCommonJsModule(sourceFile) && !containsOnlyAmbientModules(sourceFile);
+                !ts.isExternalOrCommonJsModule(sourceFile) && !ts.isJsonSourceFile(sourceFile) && !containsOnlyAmbientModules(sourceFile);
         }
         function getAllFilesExcludingDefaultLibraryFile(state, programOfThisState, firstSourceFile) {
             if (state.allFilesExcludingDefaultLibraryFile) {
@@ -92744,7 +94823,7 @@
             if (!useOldState ||
                 !(oldInfo = oldState.fileInfos.get(sourceFilePath)) ||
                 oldInfo.version !== info.version ||
-                !hasSameKeys(newReferences = referencedMap && referencedMap.get(sourceFilePath), oldReferencedMap && oldReferencedMap.get(sourceFilePath)) ||
+                !hasSameKeys(newReferences = referencedMap && referencedMap.getValues(sourceFilePath), oldReferencedMap && oldReferencedMap.getValues(sourceFilePath)) ||
                 newReferences && ts.forEachKey(newReferences, function (path) { return !state.fileInfos.has(path) && oldState.fileInfos.has(path); })) {
                 state.changedFilesSet.add(sourceFilePath);
             }
@@ -92809,6 +94888,7 @@
         state.program = undefined;
     }
     function cloneBuilderProgramState(state) {
+        var _a;
         var newState = ts.BuilderState.clone(state);
         newState.semanticDiagnosticsPerFile = state.semanticDiagnosticsPerFile && new ts.Map(state.semanticDiagnosticsPerFile);
         newState.changedFilesSet = new ts.Set(state.changedFilesSet);
@@ -92816,7 +94896,7 @@
         newState.affectedFilesIndex = state.affectedFilesIndex;
         newState.currentChangedFilePath = state.currentChangedFilePath;
         newState.currentAffectedFilesSignatures = state.currentAffectedFilesSignatures && new ts.Map(state.currentAffectedFilesSignatures);
-        newState.currentAffectedFilesExportedModulesMap = state.currentAffectedFilesExportedModulesMap && new ts.Map(state.currentAffectedFilesExportedModulesMap);
+        newState.currentAffectedFilesExportedModulesMap = (_a = state.currentAffectedFilesExportedModulesMap) === null || _a === void 0 ? void 0 : _a.clone();
         newState.seenAffectedFiles = state.seenAffectedFiles && new ts.Set(state.seenAffectedFiles);
         newState.cleanedDiagnosticsOfLibFiles = state.cleanedDiagnosticsOfLibFiles;
         newState.semanticDiagnosticsFromOldState = state.semanticDiagnosticsFromOldState && new ts.Set(state.semanticDiagnosticsFromOldState);
@@ -92867,8 +94947,7 @@
             if (!state.currentAffectedFilesSignatures)
                 state.currentAffectedFilesSignatures = new ts.Map();
             if (state.exportedModulesMap) {
-                if (!state.currentAffectedFilesExportedModulesMap)
-                    state.currentAffectedFilesExportedModulesMap = new ts.Map();
+                state.currentAffectedFilesExportedModulesMap || (state.currentAffectedFilesExportedModulesMap = ts.BuilderState.createManyToManyPathMap());
             }
             state.affectedFiles = ts.BuilderState.getFilesAffectedBy(state, program, nextKey.value, cancellationToken, computeHash, state.currentAffectedFilesSignatures, state.currentAffectedFilesExportedModulesMap);
             state.currentChangedFilePath = nextKey.value;
@@ -92928,13 +95007,12 @@
             var program = ts.Debug.checkDefined(state.program);
             var sourceFile = program.getSourceFileByPath(path);
             if (sourceFile) {
-                ts.BuilderState.updateShapeSignature(state, program, sourceFile, ts.Debug.checkDefined(state.currentAffectedFilesSignatures), cancellationToken, computeHash, state.currentAffectedFilesExportedModulesMap);
+                ts.BuilderState.updateShapeSignature(state, program, sourceFile, ts.Debug.checkDefined(state.currentAffectedFilesSignatures), cancellationToken, computeHash, state.currentAffectedFilesExportedModulesMap, true);
                 if (ts.getEmitDeclarations(state.compilerOptions)) {
                     addToAffectedFilesPendingEmit(state, path, 0);
                 }
             }
         }
-        return false;
     }
     function removeSemanticDiagnosticsOf(state, path) {
         if (!state.semanticDiagnosticsFromOldState) {
@@ -92950,6 +95028,7 @@
         return newSignature !== oldSignature;
     }
     function forEachReferencingModulesOfExportOfAffectedFile(state, affectedFile, fn) {
+        var _a, _b;
         if (!state.exportedModulesMap || !state.changedFilesSet.has(affectedFile.resolvedPath)) {
             return;
         }
@@ -92963,8 +95042,8 @@
                 var currentPath = queue.pop();
                 if (!seenFileNamesMap.has(currentPath)) {
                     seenFileNamesMap.set(currentPath, true);
-                    var result = fn(state, currentPath);
-                    if (result && isChangedSignature(state, currentPath)) {
+                    fn(state, currentPath);
+                    if (isChangedSignature(state, currentPath)) {
                         var currentSourceFile = ts.Debug.checkDefined(state.program).getSourceFileByPath(currentPath);
                         queue.push.apply(queue, ts.BuilderState.getReferencedByPaths(state, currentSourceFile.resolvedPath));
                     }
@@ -92973,49 +95052,40 @@
         }
         ts.Debug.assert(!!state.currentAffectedFilesExportedModulesMap);
         var seenFileAndExportsOfFile = new ts.Set();
-        if (ts.forEachEntry(state.currentAffectedFilesExportedModulesMap, function (exportedModules, exportedFromPath) {
-            return exportedModules &&
-                exportedModules.has(affectedFile.resolvedPath) &&
-                forEachFilesReferencingPath(state, exportedFromPath, seenFileAndExportsOfFile, fn);
-        })) {
-            return;
-        }
-        ts.forEachEntry(state.exportedModulesMap, function (exportedModules, exportedFromPath) {
-            return !state.currentAffectedFilesExportedModulesMap.has(exportedFromPath) &&
-                exportedModules.has(affectedFile.resolvedPath) &&
+        (_a = state.currentAffectedFilesExportedModulesMap.getKeys(affectedFile.resolvedPath)) === null || _a === void 0 ? void 0 : _a.forEach(function (exportedFromPath) {
+            return forEachFilesReferencingPath(state, exportedFromPath, seenFileAndExportsOfFile, fn);
+        });
+        (_b = state.exportedModulesMap.getKeys(affectedFile.resolvedPath)) === null || _b === void 0 ? void 0 : _b.forEach(function (exportedFromPath) {
+            var _a;
+            return !state.currentAffectedFilesExportedModulesMap.hasKey(exportedFromPath) &&
+                !((_a = state.currentAffectedFilesExportedModulesMap.deletedKeys()) === null || _a === void 0 ? void 0 : _a.has(exportedFromPath)) &&
                 forEachFilesReferencingPath(state, exportedFromPath, seenFileAndExportsOfFile, fn);
         });
     }
     function forEachFilesReferencingPath(state, referencedPath, seenFileAndExportsOfFile, fn) {
-        return ts.forEachEntry(state.referencedMap, function (referencesInFile, filePath) {
-            return referencesInFile.has(referencedPath) && forEachFileAndExportsOfFile(state, filePath, seenFileAndExportsOfFile, fn);
+        var _a;
+        (_a = state.referencedMap.getKeys(referencedPath)) === null || _a === void 0 ? void 0 : _a.forEach(function (filePath) {
+            return forEachFileAndExportsOfFile(state, filePath, seenFileAndExportsOfFile, fn);
         });
     }
     function forEachFileAndExportsOfFile(state, filePath, seenFileAndExportsOfFile, fn) {
+        var _a, _b, _c;
         if (!ts.tryAddToSet(seenFileAndExportsOfFile, filePath)) {
-            return false;
+            return;
         }
-        if (fn(state, filePath)) {
-            return true;
-        }
+        fn(state, filePath);
         ts.Debug.assert(!!state.currentAffectedFilesExportedModulesMap);
-        if (ts.forEachEntry(state.currentAffectedFilesExportedModulesMap, function (exportedModules, exportedFromPath) {
-            return exportedModules &&
-                exportedModules.has(filePath) &&
+        (_a = state.currentAffectedFilesExportedModulesMap.getKeys(filePath)) === null || _a === void 0 ? void 0 : _a.forEach(function (exportedFromPath) {
+            return forEachFileAndExportsOfFile(state, exportedFromPath, seenFileAndExportsOfFile, fn);
+        });
+        (_b = state.exportedModulesMap.getKeys(filePath)) === null || _b === void 0 ? void 0 : _b.forEach(function (exportedFromPath) {
+            var _a;
+            return !state.currentAffectedFilesExportedModulesMap.hasKey(exportedFromPath) &&
+                !((_a = state.currentAffectedFilesExportedModulesMap.deletedKeys()) === null || _a === void 0 ? void 0 : _a.has(exportedFromPath)) &&
                 forEachFileAndExportsOfFile(state, exportedFromPath, seenFileAndExportsOfFile, fn);
-        })) {
-            return true;
-        }
-        if (ts.forEachEntry(state.exportedModulesMap, function (exportedModules, exportedFromPath) {
-            return !state.currentAffectedFilesExportedModulesMap.has(exportedFromPath) &&
-                exportedModules.has(filePath) &&
-                forEachFileAndExportsOfFile(state, exportedFromPath, seenFileAndExportsOfFile, fn);
-        })) {
-            return true;
-        }
-        return !!ts.forEachEntry(state.referencedMap, function (referencesInFile, referencingFilePath) {
-            return referencesInFile.has(filePath) &&
-                !seenFileAndExportsOfFile.has(referencingFilePath) &&
+        });
+        (_c = state.referencedMap.getKeys(filePath)) === null || _c === void 0 ? void 0 : _c.forEach(function (referencingFilePath) {
+            return !seenFileAndExportsOfFile.has(referencingFilePath) &&
                 fn(state, referencingFilePath);
         });
     }
@@ -93057,14 +95127,14 @@
         if (state.semanticDiagnosticsPerFile) {
             var cachedDiagnostics = state.semanticDiagnosticsPerFile.get(path);
             if (cachedDiagnostics) {
-                return ts.filterSemanticDiagnotics(cachedDiagnostics, state.compilerOptions);
+                return ts.filterSemanticDiagnostics(cachedDiagnostics, state.compilerOptions);
             }
         }
         var diagnostics = ts.Debug.checkDefined(state.program).getBindAndCheckDiagnostics(sourceFile, cancellationToken);
         if (state.semanticDiagnosticsPerFile) {
             state.semanticDiagnosticsPerFile.set(path, diagnostics);
         }
-        return ts.filterSemanticDiagnotics(diagnostics, state.compilerOptions);
+        return ts.filterSemanticDiagnostics(diagnostics, state.compilerOptions);
     }
     function getProgramBuildInfo(state, getCanonicalFileName) {
         if (ts.outFile(state.compilerOptions))
@@ -93095,17 +95165,23 @@
         if (state.referencedMap) {
             referencedMap = ts.arrayFrom(state.referencedMap.keys()).sort(ts.compareStringsCaseSensitive).map(function (key) { return [
                 toFileId(key),
-                toFileIdListId(state.referencedMap.get(key))
+                toFileIdListId(state.referencedMap.getValues(key))
             ]; });
         }
         var exportedModulesMap;
         if (state.exportedModulesMap) {
             exportedModulesMap = ts.mapDefined(ts.arrayFrom(state.exportedModulesMap.keys()).sort(ts.compareStringsCaseSensitive), function (key) {
-                var newValue = state.currentAffectedFilesExportedModulesMap && state.currentAffectedFilesExportedModulesMap.get(key);
-                if (newValue === undefined)
-                    return [toFileId(key), toFileIdListId(state.exportedModulesMap.get(key))];
-                else if (newValue)
-                    return [toFileId(key), toFileIdListId(newValue)];
+                var _a;
+                if (state.currentAffectedFilesExportedModulesMap) {
+                    if ((_a = state.currentAffectedFilesExportedModulesMap.deletedKeys()) === null || _a === void 0 ? void 0 : _a.has(key)) {
+                        return undefined;
+                    }
+                    var newValue = state.currentAffectedFilesExportedModulesMap.getValues(key);
+                    if (newValue) {
+                        return [toFileId(key), toFileIdListId(newValue)];
+                    }
+                }
+                return [toFileId(key), toFileIdListId(state.exportedModulesMap.getValues(key))];
             });
         }
         var semanticDiagnosticsPerFile;
@@ -93271,8 +95347,9 @@
         newProgram = undefined;
         oldProgram = undefined;
         oldState = undefined;
-        var builderProgram = createRedirectedBuilderProgram(state, configFileParsingDiagnostics);
-        builderProgram.getState = function () { return state; };
+        var getState = function () { return state; };
+        var builderProgram = createRedirectedBuilderProgram(getState, configFileParsingDiagnostics);
+        builderProgram.getState = getState;
         builderProgram.backupState = function () {
             ts.Debug.assert(backupState === undefined);
             backupState = cloneBuilderProgramState(state);
@@ -93452,8 +95529,8 @@
         var state = {
             fileInfos: fileInfos,
             compilerOptions: program.options ? ts.convertToOptionsWithAbsolutePaths(program.options, toAbsolutePath) : {},
-            referencedMap: toMapOfReferencedSet(program.referencedMap),
-            exportedModulesMap: toMapOfReferencedSet(program.exportedModulesMap),
+            referencedMap: toManyToManyPathMap(program.referencedMap),
+            exportedModulesMap: toManyToManyPathMap(program.exportedModulesMap),
             semanticDiagnosticsPerFile: program.semanticDiagnosticsPerFile && ts.arrayToMap(program.semanticDiagnosticsPerFile, function (value) { return toFilePath(ts.isNumber(value) ? value : value[0]); }, function (value) { return ts.isNumber(value) ? ts.emptyArray : value[1]; }),
             hasReusableDiagnostic: true,
             affectedFilesPendingEmit: ts.map(program.affectedFilesPendingEmit, function (value) { return toFilePath(value[0]); }),
@@ -93496,20 +95573,28 @@
         function toFilePathsSet(fileIdsListId) {
             return filePathsSetList[fileIdsListId - 1];
         }
-        function toMapOfReferencedSet(referenceMap) {
-            return referenceMap && ts.arrayToMap(referenceMap, function (value) { return toFilePath(value[0]); }, function (value) { return toFilePathsSet(value[1]); });
+        function toManyToManyPathMap(referenceMap) {
+            if (!referenceMap) {
+                return undefined;
+            }
+            var map = ts.BuilderState.createManyToManyPathMap();
+            referenceMap.forEach(function (_a) {
+                var fileId = _a[0], fileIdListId = _a[1];
+                return map.set(toFilePath(fileId), toFilePathsSet(fileIdListId));
+            });
+            return map;
         }
     }
     ts.createBuildProgramUsingProgramBuildInfo = createBuildProgramUsingProgramBuildInfo;
-    function createRedirectedBuilderProgram(state, configFileParsingDiagnostics) {
+    function createRedirectedBuilderProgram(getState, configFileParsingDiagnostics) {
         return {
             getState: ts.notImplemented,
             backupState: ts.noop,
             restoreState: ts.noop,
             getProgram: getProgram,
-            getProgramOrUndefined: function () { return state.program; },
-            releaseProgram: function () { return state.program = undefined; },
-            getCompilerOptions: function () { return state.compilerOptions; },
+            getProgramOrUndefined: function () { return getState().program; },
+            releaseProgram: function () { return getState().program = undefined; },
+            getCompilerOptions: function () { return getState().compilerOptions; },
             getSourceFile: function (fileName) { return getProgram().getSourceFile(fileName); },
             getSourceFiles: function () { return getProgram().getSourceFiles(); },
             getOptionsDiagnostics: function (cancellationToken) { return getProgram().getOptionsDiagnostics(cancellationToken); },
@@ -93525,7 +95610,7 @@
             close: ts.noop,
         };
         function getProgram() {
-            return ts.Debug.checkDefined(state.program);
+            return ts.Debug.checkDefined(getState().program);
         }
     }
     ts.createRedirectedBuilderProgram = createRedirectedBuilderProgram;
@@ -93542,7 +95627,7 @@
     ts.createEmitAndSemanticDiagnosticsBuilderProgram = createEmitAndSemanticDiagnosticsBuilderProgram;
     function createAbstractBuilder(newProgramOrRootNames, hostOrOptions, oldProgramOrHost, configFileParsingDiagnosticsOrOldProgram, configFileParsingDiagnostics, projectReferences) {
         var _a = ts.getBuilderCreationParameters(newProgramOrRootNames, hostOrOptions, oldProgramOrHost, configFileParsingDiagnosticsOrOldProgram, configFileParsingDiagnostics, projectReferences), newProgram = _a.newProgram, newConfigFileParsingDiagnostics = _a.configFileParsingDiagnostics;
-        return ts.createRedirectedBuilderProgram({ program: newProgram, compilerOptions: newProgram.getCompilerOptions() }, newConfigFileParsingDiagnostics);
+        return ts.createRedirectedBuilderProgram(function () { return ({ program: newProgram, compilerOptions: newProgram.getCompilerOptions() }); }, newConfigFileParsingDiagnostics);
     }
     ts.createAbstractBuilder = createAbstractBuilder;
 })(ts || (ts = {}));
@@ -93618,6 +95703,7 @@
         var rootSplitLength = rootPath !== undefined ? rootPath.split(ts.directorySeparator).length : 0;
         var typeRootsWatches = new ts.Map();
         return {
+            getModuleResolutionCache: function () { return moduleResolutionCache; },
             startRecordingFilesWithChangedResolutions: startRecordingFilesWithChangedResolutions,
             finishRecordingFilesWithChangedResolutions: finishRecordingFilesWithChangedResolutions,
             startCachingPerDirectoryResolution: clearPerDirectoryResolutions,
@@ -93728,7 +95814,7 @@
             return ts.resolveTypeReferenceDirective(typeReferenceDirectiveName, containingFile, options, host, redirectedReference, typeReferenceDirectiveResolutionCache);
         }
         function resolveNamesWithLocalCache(_a) {
-            var _b;
+            var _b, _c, _d;
             var names = _a.names, containingFile = _a.containingFile, redirectedReference = _a.redirectedReference, cache = _a.cache, perDirectoryCacheWithRedirects = _a.perDirectoryCacheWithRedirects, loader = _a.loader, getResolutionWithResolvedFileName = _a.getResolutionWithResolvedFileName, shouldRetryResolution = _a.shouldRetryResolution, reusedNames = _a.reusedNames, logChanges = _a.logChanges;
             var path = resolutionHost.toPath(containingFile);
             var resolutionsInFile = cache.get(path) || cache.set(path, new ts.Map()).get(path);
@@ -93758,9 +95844,24 @@
                     var resolutionInDirectory = perDirectoryResolution.get(name);
                     if (resolutionInDirectory) {
                         resolution = resolutionInDirectory;
+                        var host = ((_b = resolutionHost.getCompilerHost) === null || _b === void 0 ? void 0 : _b.call(resolutionHost)) || resolutionHost;
+                        if (ts.isTraceEnabled(compilerOptions, host)) {
+                            var resolved = getResolutionWithResolvedFileName(resolution);
+                            ts.trace(host, loader === resolveModuleName ?
+                                (resolved === null || resolved === void 0 ? void 0 : resolved.resolvedFileName) ?
+                                    resolved.packagetId ?
+                                        ts.Diagnostics.Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_3_with_Package_ID_4 :
+                                        ts.Diagnostics.Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_3 :
+                                    ts.Diagnostics.Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_not_resolved :
+                                (resolved === null || resolved === void 0 ? void 0 : resolved.resolvedFileName) ?
+                                    resolved.packagetId ?
+                                        ts.Diagnostics.Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_3_with_Package_ID_4 :
+                                        ts.Diagnostics.Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_3 :
+                                    ts.Diagnostics.Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_not_resolved, name, containingFile, ts.getDirectoryPath(containingFile), resolved === null || resolved === void 0 ? void 0 : resolved.resolvedFileName, (resolved === null || resolved === void 0 ? void 0 : resolved.packagetId) && ts.packageIdToString(resolved.packagetId));
+                        }
                     }
                     else {
-                        resolution = loader(name, containingFile, compilerOptions, ((_b = resolutionHost.getCompilerHost) === null || _b === void 0 ? void 0 : _b.call(resolutionHost)) || resolutionHost, redirectedReference);
+                        resolution = loader(name, containingFile, compilerOptions, ((_c = resolutionHost.getCompilerHost) === null || _c === void 0 ? void 0 : _c.call(resolutionHost)) || resolutionHost, redirectedReference);
                         perDirectoryResolution.set(name, resolution);
                     }
                     resolutionsInFile.set(name, resolution);
@@ -93773,6 +95874,23 @@
                         logChanges = false;
                     }
                 }
+                else {
+                    var host = ((_d = resolutionHost.getCompilerHost) === null || _d === void 0 ? void 0 : _d.call(resolutionHost)) || resolutionHost;
+                    if (ts.isTraceEnabled(compilerOptions, host) && !seenNamesInFile.has(name)) {
+                        var resolved = getResolutionWithResolvedFileName(resolution);
+                        ts.trace(host, loader === resolveModuleName ?
+                            (resolved === null || resolved === void 0 ? void 0 : resolved.resolvedFileName) ?
+                                resolved.packagetId ?
+                                    ts.Diagnostics.Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2_with_Package_ID_3 :
+                                    ts.Diagnostics.Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2 :
+                                ts.Diagnostics.Reusing_resolution_of_module_0_from_1_of_old_program_it_was_not_resolved :
+                            (resolved === null || resolved === void 0 ? void 0 : resolved.resolvedFileName) ?
+                                resolved.packagetId ?
+                                    ts.Diagnostics.Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved_to_2_with_Package_ID_3 :
+                                    ts.Diagnostics.Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved_to_2 :
+                                ts.Diagnostics.Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_not_resolved, name, containingFile, resolved === null || resolved === void 0 ? void 0 : resolved.resolvedFileName, (resolved === null || resolved === void 0 ? void 0 : resolved.packagetId) && ts.packageIdToString(resolved.packagetId));
+                    }
+                }
                 ts.Debug.assert(resolution !== undefined && !resolution.isInvalidated);
                 seenNamesInFile.set(name, true);
                 resolvedModules.push(getResolutionWithResolvedFileName(resolution));
@@ -94166,7 +96284,7 @@
 var ts;
 (function (ts) {
     var moduleSpecifiers;
-    (function (moduleSpecifiers) {
+    (function (moduleSpecifiers_1) {
         function getPreferences(_a, compilerOptions, importingSourceFile) {
             var importModuleSpecifierPreference = _a.importModuleSpecifierPreference, importModuleSpecifierEnding = _a.importModuleSpecifierEnding;
             return {
@@ -94195,39 +96313,65 @@
             };
         }
         function updateModuleSpecifier(compilerOptions, importingSourceFileName, toFileName, host, oldImportSpecifier) {
-            var res = getModuleSpecifierWorker(compilerOptions, importingSourceFileName, toFileName, host, getPreferencesForUpdate(compilerOptions, oldImportSpecifier));
+            var res = getModuleSpecifierWorker(compilerOptions, importingSourceFileName, toFileName, host, getPreferencesForUpdate(compilerOptions, oldImportSpecifier), {});
             if (res === oldImportSpecifier)
                 return undefined;
             return res;
         }
-        moduleSpecifiers.updateModuleSpecifier = updateModuleSpecifier;
-        function getModuleSpecifier(compilerOptions, importingSourceFile, importingSourceFileName, toFileName, host, preferences) {
-            if (preferences === void 0) { preferences = {}; }
-            return getModuleSpecifierWorker(compilerOptions, importingSourceFileName, toFileName, host, getPreferences(preferences, compilerOptions, importingSourceFile));
+        moduleSpecifiers_1.updateModuleSpecifier = updateModuleSpecifier;
+        function getModuleSpecifier(compilerOptions, importingSourceFile, importingSourceFileName, toFileName, host) {
+            return getModuleSpecifierWorker(compilerOptions, importingSourceFileName, toFileName, host, getPreferences({}, compilerOptions, importingSourceFile), {});
         }
-        moduleSpecifiers.getModuleSpecifier = getModuleSpecifier;
-        function getNodeModulesPackageName(compilerOptions, importingSourceFileName, nodeModulesFileName, host) {
+        moduleSpecifiers_1.getModuleSpecifier = getModuleSpecifier;
+        function getNodeModulesPackageName(compilerOptions, importingSourceFileName, nodeModulesFileName, host, preferences) {
             var info = getInfo(importingSourceFileName, host);
-            var modulePaths = getAllModulePaths(importingSourceFileName, nodeModulesFileName, host);
+            var modulePaths = getAllModulePaths(importingSourceFileName, nodeModulesFileName, host, preferences);
             return ts.firstDefined(modulePaths, function (modulePath) { return tryGetModuleNameAsNodeModule(modulePath, info, host, compilerOptions, true); });
         }
-        moduleSpecifiers.getNodeModulesPackageName = getNodeModulesPackageName;
-        function getModuleSpecifierWorker(compilerOptions, importingSourceFileName, toFileName, host, preferences) {
+        moduleSpecifiers_1.getNodeModulesPackageName = getNodeModulesPackageName;
+        function getModuleSpecifierWorker(compilerOptions, importingSourceFileName, toFileName, host, preferences, userPreferences) {
             var info = getInfo(importingSourceFileName, host);
-            var modulePaths = getAllModulePaths(importingSourceFileName, toFileName, host);
+            var modulePaths = getAllModulePaths(importingSourceFileName, toFileName, host, userPreferences);
             return ts.firstDefined(modulePaths, function (modulePath) { return tryGetModuleNameAsNodeModule(modulePath, info, host, compilerOptions); }) ||
                 getLocalModuleSpecifier(toFileName, info, compilerOptions, host, preferences);
         }
+        function tryGetModuleSpecifiersFromCache(moduleSymbol, importingSourceFile, host, userPreferences) {
+            return tryGetModuleSpecifiersFromCacheWorker(moduleSymbol, importingSourceFile, host, userPreferences)[0];
+        }
+        moduleSpecifiers_1.tryGetModuleSpecifiersFromCache = tryGetModuleSpecifiersFromCache;
+        function tryGetModuleSpecifiersFromCacheWorker(moduleSymbol, importingSourceFile, host, userPreferences) {
+            var _a;
+            var moduleSourceFile = ts.getSourceFileOfModule(moduleSymbol);
+            if (!moduleSourceFile) {
+                return ts.emptyArray;
+            }
+            var cache = (_a = host.getModuleSpecifierCache) === null || _a === void 0 ? void 0 : _a.call(host);
+            var cached = cache === null || cache === void 0 ? void 0 : cache.get(importingSourceFile.path, moduleSourceFile.path, userPreferences);
+            return [cached === null || cached === void 0 ? void 0 : cached.moduleSpecifiers, moduleSourceFile, cached === null || cached === void 0 ? void 0 : cached.modulePaths, cache];
+        }
         function getModuleSpecifiers(moduleSymbol, checker, compilerOptions, importingSourceFile, host, userPreferences) {
+            return getModuleSpecifiersWithCacheInfo(moduleSymbol, checker, compilerOptions, importingSourceFile, host, userPreferences).moduleSpecifiers;
+        }
+        moduleSpecifiers_1.getModuleSpecifiers = getModuleSpecifiers;
+        function getModuleSpecifiersWithCacheInfo(moduleSymbol, checker, compilerOptions, importingSourceFile, host, userPreferences) {
+            var computedWithoutCache = false;
             var ambient = tryGetModuleNameFromAmbientModule(moduleSymbol, checker);
             if (ambient)
-                return [ambient];
+                return { moduleSpecifiers: [ambient], computedWithoutCache: computedWithoutCache };
+            var _a = tryGetModuleSpecifiersFromCacheWorker(moduleSymbol, importingSourceFile, host, userPreferences), specifiers = _a[0], moduleSourceFile = _a[1], modulePaths = _a[2], cache = _a[3];
+            if (specifiers)
+                return { moduleSpecifiers: specifiers, computedWithoutCache: computedWithoutCache };
+            if (!moduleSourceFile)
+                return { moduleSpecifiers: ts.emptyArray, computedWithoutCache: computedWithoutCache };
+            computedWithoutCache = true;
+            modulePaths || (modulePaths = getAllModulePathsWorker(importingSourceFile.path, moduleSourceFile.originalFileName, host));
+            var result = computeModuleSpecifiers(modulePaths, compilerOptions, importingSourceFile, host, userPreferences);
+            cache === null || cache === void 0 ? void 0 : cache.set(importingSourceFile.path, moduleSourceFile.path, userPreferences, modulePaths, result);
+            return { moduleSpecifiers: result, computedWithoutCache: computedWithoutCache };
+        }
+        moduleSpecifiers_1.getModuleSpecifiersWithCacheInfo = getModuleSpecifiersWithCacheInfo;
+        function computeModuleSpecifiers(modulePaths, compilerOptions, importingSourceFile, host, userPreferences) {
             var info = getInfo(importingSourceFile.path, host);
-            var moduleSourceFile = ts.getSourceFileOfNode(moduleSymbol.valueDeclaration || ts.getNonAugmentationDeclaration(moduleSymbol));
-            if (!moduleSourceFile) {
-                return [];
-            }
-            var modulePaths = getAllModulePaths(importingSourceFile.path, moduleSourceFile.originalFileName, host);
             var preferences = getPreferences(userPreferences, compilerOptions, importingSourceFile);
             var existingSpecifier = ts.forEach(modulePaths, function (modulePath) { return ts.forEach(host.getFileIncludeReasons().get(ts.toPath(modulePath.path, host.getCurrentDirectory(), info.getCanonicalFileName)), function (reason) {
                 if (reason.kind !== ts.FileIncludeKind.Import || reason.file !== importingSourceFile.path)
@@ -94237,8 +96381,10 @@
                     specifier :
                     undefined;
             }); });
-            if (existingSpecifier)
-                return [existingSpecifier];
+            if (existingSpecifier) {
+                var moduleSpecifiers_2 = [existingSpecifier];
+                return moduleSpecifiers_2;
+            }
             var importedFileIsInNodeModules = ts.some(modulePaths, function (p) { return p.isInNodeModules; });
             var nodeModulesSpecifiers;
             var pathsSpecifiers;
@@ -94264,7 +96410,6 @@
                 (nodeModulesSpecifiers === null || nodeModulesSpecifiers === void 0 ? void 0 : nodeModulesSpecifiers.length) ? nodeModulesSpecifiers :
                     ts.Debug.checkDefined(relativeSpecifiers);
         }
-        moduleSpecifiers.getModuleSpecifiers = getModuleSpecifiers;
         function getInfo(importingSourceFileName, host) {
             var getCanonicalFileName = ts.createGetCanonicalFileName(host.useCaseSensitiveFileNames ? host.useCaseSensitiveFileNames() : true);
             var sourceDirectory = ts.getDirectoryPath(importingSourceFileName);
@@ -94322,7 +96467,7 @@
             }
             return count;
         }
-        moduleSpecifiers.countPathComponents = countPathComponents;
+        moduleSpecifiers_1.countPathComponents = countPathComponents;
         function usesJsExtensionOnImports(_a) {
             var imports = _a.imports;
             return ts.firstDefined(imports, function (_a) {
@@ -94342,23 +96487,21 @@
             });
         }
         function forEachFileNameOfModule(importingFileName, importedFileName, host, preferSymlinks, cb) {
+            var _a;
             var getCanonicalFileName = ts.hostGetCanonicalFileName(host);
             var cwd = host.getCurrentDirectory();
             var referenceRedirect = host.isSourceOfProjectReferenceRedirect(importedFileName) ? host.getProjectReferenceRedirect(importedFileName) : undefined;
             var importedPath = ts.toPath(importedFileName, cwd, getCanonicalFileName);
             var redirects = host.redirectTargetsMap.get(importedPath) || ts.emptyArray;
-            var importedFileNames = __spreadArray(__spreadArray(__spreadArray([], (referenceRedirect ? [referenceRedirect] : ts.emptyArray)), [importedFileName]), redirects);
+            var importedFileNames = __spreadArray(__spreadArray(__spreadArray([], (referenceRedirect ? [referenceRedirect] : ts.emptyArray), true), [importedFileName], false), redirects, true);
             var targets = importedFileNames.map(function (f) { return ts.getNormalizedAbsolutePath(f, cwd); });
             var shouldFilterIgnoredPaths = !ts.every(targets, ts.containsIgnoredPath);
             if (!preferSymlinks) {
-                var result_16 = ts.forEach(targets, function (p) { return !(shouldFilterIgnoredPaths && ts.containsIgnoredPath(p)) && cb(p, referenceRedirect === p); });
-                if (result_16)
-                    return result_16;
+                var result_15 = ts.forEach(targets, function (p) { return !(shouldFilterIgnoredPaths && ts.containsIgnoredPath(p)) && cb(p, referenceRedirect === p); });
+                if (result_15)
+                    return result_15;
             }
-            var links = host.getSymlinkCache
-                ? host.getSymlinkCache()
-                : ts.discoverProbableSymlinks(host.getSourceFiles(), getCanonicalFileName, cwd);
-            var symlinkedDirectories = links.getSymlinkedDirectoriesByRealpath();
+            var symlinkedDirectories = (_a = host.getSymlinkCache) === null || _a === void 0 ? void 0 : _a.call(host).getSymlinkedDirectoriesByRealpath();
             var fullImportedFileName = ts.getNormalizedAbsolutePath(importedFileName, cwd);
             var result = symlinkedDirectories && ts.forEachAncestorDirectory(ts.getDirectoryPath(fullImportedFileName), function (realPathDirectory) {
                 var symlinkDirectories = symlinkedDirectories.get(ts.ensureTrailingDirectorySeparator(ts.toPath(realPathDirectory, cwd, getCanonicalFileName)));
@@ -94375,10 +96518,10 @@
                     for (var _i = 0, symlinkDirectories_1 = symlinkDirectories; _i < symlinkDirectories_1.length; _i++) {
                         var symlinkDirectory = symlinkDirectories_1[_i];
                         var option = ts.resolvePath(symlinkDirectory, relative);
-                        var result_17 = cb(option, target === referenceRedirect);
+                        var result_16 = cb(option, target === referenceRedirect);
                         shouldFilterIgnoredPaths = true;
-                        if (result_17)
-                            return result_17;
+                        if (result_16)
+                            return result_16;
                     }
                 });
             });
@@ -94386,16 +96529,24 @@
                 ? ts.forEach(targets, function (p) { return shouldFilterIgnoredPaths && ts.containsIgnoredPath(p) ? undefined : cb(p, p === referenceRedirect); })
                 : undefined);
         }
-        moduleSpecifiers.forEachFileNameOfModule = forEachFileNameOfModule;
-        function getAllModulePaths(importingFileName, importedFileName, host) {
+        moduleSpecifiers_1.forEachFileNameOfModule = forEachFileNameOfModule;
+        function getAllModulePaths(importingFilePath, importedFileName, host, preferences, importedFilePath) {
             var _a;
+            if (importedFilePath === void 0) { importedFilePath = ts.toPath(importedFileName, host.getCurrentDirectory(), ts.hostGetCanonicalFileName(host)); }
             var cache = (_a = host.getModuleSpecifierCache) === null || _a === void 0 ? void 0 : _a.call(host);
-            var getCanonicalFileName = ts.hostGetCanonicalFileName(host);
             if (cache) {
-                var cached = cache.get(importingFileName, ts.toPath(importedFileName, host.getCurrentDirectory(), getCanonicalFileName));
-                if (typeof cached === "object")
-                    return cached;
+                var cached = cache.get(importingFilePath, importedFilePath, preferences);
+                if (cached === null || cached === void 0 ? void 0 : cached.modulePaths)
+                    return cached.modulePaths;
             }
+            var modulePaths = getAllModulePathsWorker(importingFilePath, importedFileName, host);
+            if (cache) {
+                cache.setModulePaths(importingFilePath, importedFilePath, preferences, modulePaths);
+            }
+            return modulePaths;
+        }
+        function getAllModulePathsWorker(importingFileName, importedFileName, host) {
+            var getCanonicalFileName = ts.hostGetCanonicalFileName(host);
             var allFileNames = new ts.Map();
             var importedFileFromNodeModules = false;
             forEachFileNameOfModule(importingFileName, importedFileName, host, true, function (path, isRedirect) {
@@ -94404,7 +96555,7 @@
                 importedFileFromNodeModules = importedFileFromNodeModules || isInNodeModules;
             });
             var sortedPaths = [];
-            var _loop_26 = function (directory) {
+            var _loop_31 = function (directory) {
                 var directoryStart = ts.ensureTrailingDirectorySeparator(directory);
                 var pathsInDirectory;
                 allFileNames.forEach(function (_a, fileName) {
@@ -94428,7 +96579,7 @@
             };
             var out_directory_1;
             for (var directory = ts.getDirectoryPath(importingFileName); allFileNames.size !== 0;) {
-                var state_9 = _loop_26(directory);
+                var state_9 = _loop_31(directory);
                 directory = out_directory_1;
                 if (state_9 === "break")
                     break;
@@ -94439,9 +96590,6 @@
                     remainingPaths.sort(comparePathsByRedirectAndNumberOfDirectorySeparators);
                 sortedPaths.push.apply(sortedPaths, remainingPaths);
             }
-            if (cache) {
-                cache.set(importingFileName, ts.toPath(importedFileName, host.getCurrentDirectory(), getCanonicalFileName), sortedPaths);
-            }
             return sortedPaths;
         }
         function tryGetModuleNameFromAmbientModule(moduleSymbol, checker) {
@@ -94665,7 +96813,11 @@
             }
         }
         function getJSExtensionForFile(fileName, options) {
-            var ext = ts.extensionFromPath(fileName);
+            var _a;
+            return (_a = tryGetJSExtensionForFile(fileName, options)) !== null && _a !== void 0 ? _a : ts.Debug.fail("Extension " + ts.extensionFromPath(fileName) + " is unsupported:: FileName:: " + fileName);
+        }
+        function tryGetJSExtensionForFile(fileName, options) {
+            var ext = ts.tryGetExtensionFromPath(fileName);
             switch (ext) {
                 case ".ts":
                 case ".d.ts":
@@ -94676,12 +96828,11 @@
                 case ".jsx":
                 case ".json":
                     return ext;
-                case ".tsbuildinfo":
-                    return ts.Debug.fail("Extension " + ".tsbuildinfo" + " is unsupported:: FileName:: " + fileName);
                 default:
-                    return ts.Debug.assertNever(ext);
+                    return undefined;
             }
         }
+        moduleSpecifiers_1.tryGetJSExtensionForFile = tryGetJSExtensionForFile;
         function getRelativePathIfInDirectory(path, directoryPath, getCanonicalFileName) {
             var relativePath = ts.getRelativePathToDirectoryOrUrl(directoryPath, path, directoryPath, getCanonicalFileName, false);
             return ts.isRootedDiskPath(relativePath) ? undefined : relativePath;
@@ -94699,7 +96850,7 @@
         getCanonicalFileName: ts.createGetCanonicalFileName(ts.sys.useCaseSensitiveFileNames)
     } : undefined;
     function createDiagnosticReporter(system, pretty) {
-        var host = system === ts.sys ? sysFormatDiagnosticsHost : {
+        var host = system === ts.sys && sysFormatDiagnosticsHost ? sysFormatDiagnosticsHost : {
             getCurrentDirectory: function () { return system.getCurrentDirectory(); },
             getNewLine: function () { return system.newLine; },
             getCanonicalFileName: ts.createGetCanonicalFileName(system.useCaseSensitiveFileNames),
@@ -95017,6 +97168,7 @@
         ConfigFileOfReferencedProject: "Config file of referened project",
         ExtendedConfigOfReferencedProject: "Extended config file of referenced project",
         WildcardDirectoryOfReferencedProject: "Wild card directory of referenced project",
+        PackageJson: "package.json file",
     };
     function createWatchFactory(host, options) {
         var watchLogLevel = host.trace ? options.extendedDiagnostics ? ts.WatchLogLevel.Verbose : options.diagnostics ? ts.WatchLogLevel.TriggerOnly : ts.WatchLogLevel.None : ts.WatchLogLevel.None;
@@ -95088,7 +97240,7 @@
             for (var _i = 0; _i < arguments.length; _i++) {
                 args[_i] = arguments[_i];
             }
-            var result = originalGetSourceFile.call.apply(originalGetSourceFile, __spreadArray([compilerHost], args));
+            var result = originalGetSourceFile.call.apply(originalGetSourceFile, __spreadArray([compilerHost], args, false));
             if (result) {
                 result.version = computeHash(result.text);
             }
@@ -95237,12 +97389,14 @@
         var builderProgram;
         var reloadLevel;
         var missingFilesMap;
+        var packageJsonMap;
         var watchedWildcardDirectories;
         var timerToUpdateProgram;
         var timerToInvalidateFailedLookupResolutions;
         var parsedConfigs;
         var sharedExtendedConfigFileWatchers;
         var extendedConfigCache = host.extendedConfigCache;
+        var changesAffectResolution = false;
         var sourceFilesCache = new ts.Map();
         var missingFilePathsRequestedForRelease;
         var hasChangedCompilerOptions = false;
@@ -95284,7 +97438,7 @@
             for (var _i = 1; _i < arguments.length; _i++) {
                 args[_i - 1] = arguments[_i];
             }
-            return getVersionedSourceFileByPath.apply(void 0, __spreadArray([fileName, toPath(fileName)], args));
+            return getVersionedSourceFileByPath.apply(void 0, __spreadArray([fileName, toPath(fileName)], args, false));
         };
         compilerHost.getSourceFileByPath = getVersionedSourceFileByPath;
         compilerHost.getNewLine = function () { return newLine; };
@@ -95385,11 +97539,11 @@
             var program = getCurrentBuilderProgram();
             if (hasChangedCompilerOptions) {
                 newLine = updateNewLine();
-                if (program && ts.changesAffectModuleResolution(program.getCompilerOptions(), compilerOptions)) {
+                if (program && (changesAffectResolution || ts.changesAffectModuleResolution(program.getCompilerOptions(), compilerOptions))) {
                     resolutionCache.clear();
                 }
             }
-            var hasInvalidatedResolution = resolutionCache.createHasInvalidatedResolution(userProvidedResolution);
+            var hasInvalidatedResolution = resolutionCache.createHasInvalidatedResolution(userProvidedResolution || changesAffectResolution);
             if (ts.isProgramUptoDate(getCurrentProgram(), rootFileNames, compilerOptions, getSourceVersion, fileExists, hasInvalidatedResolution, hasChangedAutomaticTypeDirectiveNames, getParsedCommandLine, projectReferences)) {
                 if (hasChangedConfigFileParsingErrors) {
                     builderProgram = createProgram(undefined, undefined, compilerHost, builderProgram, configFileParsingDiagnostics, projectReferences);
@@ -95399,6 +97553,7 @@
             else {
                 createNewProgram(hasInvalidatedResolution);
             }
+            changesAffectResolution = false;
             if (host.afterProgramCreate && program !== builderProgram) {
                 host.afterProgramCreate(builderProgram);
             }
@@ -95417,8 +97572,13 @@
             compilerHost.hasInvalidatedResolution = hasInvalidatedResolution;
             compilerHost.hasChangedAutomaticTypeDirectiveNames = hasChangedAutomaticTypeDirectiveNames;
             builderProgram = createProgram(rootFileNames, compilerOptions, compilerHost, builderProgram, configFileParsingDiagnostics, projectReferences);
+            var packageCacheEntries = ts.map(resolutionCache.getModuleResolutionCache().getPackageJsonInfoCache().entries(), function (_a) {
+                var path = _a[0], data = _a[1];
+                return [compilerHost.realpath ? toPath(compilerHost.realpath(path)) : path, data];
+            });
             resolutionCache.finishCachingPerDirectoryResolution();
             ts.updateMissingFilePathsWatch(builderProgram.getProgram(), missingFilesMap || (missingFilesMap = new ts.Map()), watchMissingFilePath);
+            ts.updatePackageJsonWatch(packageCacheEntries, packageJsonMap || (packageJsonMap = new ts.Map()), watchPackageJsonLookupPath);
             if (needsUpdateInTypeRootWatch) {
                 resolutionCache.updateTypeRootsWatch();
             }
@@ -95691,6 +97851,17 @@
                 ts.noopFileWatcher :
                 watchFilePath(missingFilePath, missingFilePath, onMissingFileChange, ts.PollingInterval.Medium, watchOptions, ts.WatchType.MissingFile);
         }
+        function watchPackageJsonLookupPath(packageJsonPath) {
+            return sourceFilesCache.has(packageJsonPath) ?
+                ts.noopFileWatcher :
+                watchFilePath(packageJsonPath, packageJsonPath, onPackageJsonChange, ts.PollingInterval.High, watchOptions, ts.WatchType.PackageJson);
+        }
+        function onPackageJsonChange(fileName, eventKind, path) {
+            updateCachedSystemWithFile(fileName, path, eventKind);
+            reloadLevel = ts.ConfigFileProgramReloadLevel.Full;
+            changesAffectResolution = true;
+            scheduleProgramUpdate();
+        }
         function onMissingFileChange(fileName, eventKind, missingFilePath) {
             updateCachedSystemWithFile(fileName, missingFilePath, eventKind);
             if (eventKind === ts.FileWatcherEventKind.Created && missingFilesMap.has(missingFilePath)) {
@@ -95988,6 +98159,8 @@
             allWatchedInputFiles: new ts.Map(),
             allWatchedConfigFiles: new ts.Map(),
             allWatchedExtendedConfigFiles: new ts.Map(),
+            allWatchedPackageJsonFiles: new ts.Map(),
+            lastCachedPackageJsonLookups: new ts.Map(),
             timerToBuildInvalidatedProject: undefined,
             reportFileChangeDetected: false,
             watchFile: watchFile,
@@ -96105,6 +98278,7 @@
             });
             ts.mutateMapSkippingNewValues(state.allWatchedWildcardDirectories, currentProjects, { onDeleteValue: function (existingMap) { return existingMap.forEach(ts.closeFileWatcherOf); } });
             ts.mutateMapSkippingNewValues(state.allWatchedInputFiles, currentProjects, { onDeleteValue: function (existingMap) { return existingMap.forEach(ts.closeFileWatcher); } });
+            ts.mutateMapSkippingNewValues(state.allWatchedPackageJsonFiles, currentProjects, { onDeleteValue: function (existingMap) { return existingMap.forEach(ts.closeFileWatcher); } });
         }
         return state.buildOrder = buildOrder;
     }
@@ -96137,7 +98311,7 @@
             for (var _i = 0; _i < arguments.length; _i++) {
                 args[_i] = arguments[_i];
             }
-            return originalGetSourceFile.call.apply(originalGetSourceFile, __spreadArray([compilerHost], args));
+            return originalGetSourceFile.call.apply(originalGetSourceFile, __spreadArray([compilerHost], args, false));
         }), originalReadFile = _a.originalReadFile, originalFileExists = _a.originalFileExists, originalDirectoryExists = _a.originalDirectoryExists, originalCreateDirectory = _a.originalCreateDirectory, originalWriteFile = _a.originalWriteFile, getSourceFileWithCache = _a.getSourceFileWithCache, readFileWithCache = _a.readFileWithCache;
         state.readFileWithCache = readFileWithCache;
         compilerHost.getSourceFile = getSourceFileWithCache;
@@ -96351,6 +98525,10 @@
             (_a = state.moduleResolutionCache) === null || _a === void 0 ? void 0 : _a.update(config.options);
             (_b = state.typeReferenceDirectiveResolutionCache) === null || _b === void 0 ? void 0 : _b.update(config.options);
             program = host.createProgram(config.fileNames, config.options, compilerHost, getOldProgram(state, projectPath, config), ts.getConfigFileParsingDiagnostics(config), config.projectReferences);
+            state.lastCachedPackageJsonLookups.set(projectPath, state.moduleResolutionCache && ts.map(state.moduleResolutionCache.getPackageJsonInfoCache().entries(), function (_a) {
+                var path = _a[0], data = _a[1];
+                return [state.host.realpath ? toPath(state, state.host.realpath(path)) : path, data];
+            }));
             if (state.watch) {
                 state.builderPrograms.set(projectPath, program);
             }
@@ -96367,7 +98545,7 @@
         }
         function getSyntaxDiagnostics(cancellationToken) {
             ts.Debug.assertIsDefined(program);
-            handleDiagnostics(__spreadArray(__spreadArray(__spreadArray(__spreadArray([], program.getConfigFileParsingDiagnostics()), program.getOptionsDiagnostics(cancellationToken)), program.getGlobalDiagnostics(cancellationToken)), program.getSyntacticDiagnostics(undefined, cancellationToken)), BuildResultFlags.SyntaxErrors, "Syntactic");
+            handleDiagnostics(__spreadArray(__spreadArray(__spreadArray(__spreadArray([], program.getConfigFileParsingDiagnostics(), true), program.getOptionsDiagnostics(cancellationToken), true), program.getGlobalDiagnostics(cancellationToken), true), program.getSyntacticDiagnostics(undefined, cancellationToken), true), BuildResultFlags.SyntaxErrors, "Syntactic");
         }
         function getSemanticDiagnostics(cancellationToken) {
             handleDiagnostics(ts.Debug.checkDefined(program).getSemanticDiagnostics(undefined, cancellationToken), BuildResultFlags.TypeErrors, "Semantic");
@@ -96423,7 +98601,7 @@
             var emitResult = program.emitBuildInfo(writeFileCallback, cancellationToken);
             if (emitResult.diagnostics.length) {
                 reportErrors(state, emitResult.diagnostics);
-                state.diagnostics.set(projectPath, __spreadArray(__spreadArray([], state.diagnostics.get(projectPath)), emitResult.diagnostics));
+                state.diagnostics.set(projectPath, __spreadArray(__spreadArray([], state.diagnostics.get(projectPath), true), emitResult.diagnostics, true));
                 buildResult = BuildResultFlags.EmitErrors & buildResult;
             }
             if (emitResult.emittedFiles && state.write) {
@@ -96568,11 +98746,13 @@
                 watchExtendedConfigFiles(state, projectPath, config);
                 watchWildCardDirectories(state, project, projectPath, config);
                 watchInputFiles(state, project, projectPath, config);
+                watchPackageJsonFiles(state, project, projectPath, config);
             }
             else if (reloadLevel === ts.ConfigFileProgramReloadLevel.Partial) {
                 config.fileNames = ts.getFileNamesFromConfigSpecs(config.options.configFile.configFileSpecs, ts.getDirectoryPath(project), config.options, state.parseConfigFileHost);
                 ts.updateErrorForNoInputFiles(config.fileNames, project, config.options.configFile.configFileSpecs, config.errors, ts.canJsonReportNoInputFiles(config.raw));
                 watchInputFiles(state, project, projectPath, config);
+                watchPackageJsonFiles(state, project, projectPath, config);
             }
             var status = getUpToDateStatus(state, config, projectPath);
             verboseReportProjectStatus(state, project, status);
@@ -96787,6 +98967,12 @@
             var extendedConfigStatus = ts.forEach(project.options.configFile.extendedSourceFiles || ts.emptyArray, function (configFile) { return checkConfigFileUpToDateStatus(state, configFile, oldestOutputFileTime, oldestOutputFileName); });
             if (extendedConfigStatus)
                 return extendedConfigStatus;
+            var dependentPackageFileStatus = ts.forEach(state.lastCachedPackageJsonLookups.get(resolvedPath) || ts.emptyArray, function (_a) {
+                var path = _a[0];
+                return checkConfigFileUpToDateStatus(state, path, oldestOutputFileTime, oldestOutputFileName);
+            });
+            if (dependentPackageFileStatus)
+                return dependentPackageFileStatus;
         }
         if (!force && !state.buildInfoChecked.has(resolvedPath)) {
             state.buildInfoChecked.set(resolvedPath, true);
@@ -96832,6 +99018,8 @@
         return actual;
     }
     function updateOutputTimestampsWorker(state, proj, priorNewestUpdateTime, verboseMessage, skipOutputs) {
+        if (proj.options.noEmit)
+            return priorNewestUpdateTime;
         var host = state.host;
         var outputs = ts.getAllProjectOutputs(proj, !host.useCaseSensitiveFileNames());
         if (!skipOutputs || outputs.length !== skipOutputs.size) {
@@ -97084,6 +99272,14 @@
             onDeleteValue: ts.closeFileWatcher,
         });
     }
+    function watchPackageJsonFiles(state, resolved, resolvedPath, parsed) {
+        if (!state.watch || !state.lastCachedPackageJsonLookups)
+            return;
+        ts.mutateMap(getOrCreateValueMapFromConfigFileMap(state.allWatchedPackageJsonFiles, resolvedPath), new ts.Map(state.lastCachedPackageJsonLookups.get(resolvedPath)), {
+            createNewValue: function (path, _input) { return state.watchFile(path, function () { return invalidateProjectAndScheduleBuilds(state, resolvedPath, ts.ConfigFileProgramReloadLevel.Full); }, ts.PollingInterval.High, parsed === null || parsed === void 0 ? void 0 : parsed.watchOptions, ts.WatchType.PackageJson, resolved); },
+            onDeleteValue: ts.closeFileWatcher,
+        });
+    }
     function startWatching(state, buildOrder) {
         if (!state.watchAllProjectsPending)
             return;
@@ -97097,6 +99293,7 @@
             if (cfg) {
                 watchWildCardDirectories(state, resolved, resolvedPath, cfg);
                 watchInputFiles(state, resolved, resolvedPath, cfg);
+                watchPackageJsonFiles(state, resolved, resolvedPath, cfg);
             }
         }
     }
@@ -97105,6 +99302,7 @@
         ts.clearMap(state.allWatchedExtendedConfigFiles, ts.closeFileWatcherOf);
         ts.clearMap(state.allWatchedWildcardDirectories, function (watchedWildcardDirectories) { return ts.clearMap(watchedWildcardDirectories, ts.closeFileWatcherOf); });
         ts.clearMap(state.allWatchedInputFiles, function (watchedWildcardDirectories) { return ts.clearMap(watchedWildcardDirectories, ts.closeFileWatcher); });
+        ts.clearMap(state.allWatchedPackageJsonFiles, function (watchedPacageJsonFiles) { return ts.clearMap(watchedPacageJsonFiles, ts.closeFileWatcher); });
     }
     function createSolutionBuilderWorker(watch, hostOrHostWithWatch, rootNames, options, baseWatchOptions) {
         var state = createSolutionBuilderState(watch, hostOrHostWithWatch, rootNames, options, baseWatchOptions);
@@ -97137,7 +99335,7 @@
         for (var _i = 2; _i < arguments.length; _i++) {
             args[_i - 2] = arguments[_i];
         }
-        state.host.reportSolutionBuilderStatus(ts.createCompilerDiagnostic.apply(void 0, __spreadArray([message], args)));
+        state.host.reportSolutionBuilderStatus(ts.createCompilerDiagnostic.apply(void 0, __spreadArray([message], args, false)));
     }
     function reportWatchStatus(state, message) {
         var _a, _b;
@@ -97145,7 +99343,7 @@
         for (var _i = 2; _i < arguments.length; _i++) {
             args[_i - 2] = arguments[_i];
         }
-        (_b = (_a = state.hostWithWatch).onWatchStatusChange) === null || _b === void 0 ? void 0 : _b.call(_a, ts.createCompilerDiagnostic.apply(void 0, __spreadArray([message], args)), state.host.getNewLine(), state.baseCompilerOptions);
+        (_b = (_a = state.hostWithWatch).onWatchStatusChange) === null || _b === void 0 ? void 0 : _b.call(_a, ts.createCompilerDiagnostic.apply(void 0, __spreadArray([message], args, false)), state.host.getNewLine(), state.baseCompilerOptions);
     }
     function reportErrors(_a, errors) {
         var host = _a.host;
@@ -97259,7 +99457,7 @@
         return counts;
     }
     function getCountsMap() {
-        var counts = ts.createMap();
+        var counts = new ts.Map();
         counts.set("Library", 0);
         counts.set("Definitions", 0);
         counts.set("TypeScript", 0);
@@ -97295,7 +99493,7 @@
             existing;
     }
     function defaultIsPretty(sys) {
-        return !!sys.writeOutputIsTTY && sys.writeOutputIsTTY();
+        return !!sys.writeOutputIsTTY && sys.writeOutputIsTTY() && !sys.getEnvironmentVariable("NO_COLOR");
     }
     function shouldBePretty(sys, options) {
         if (!options || typeof options.pretty === "undefined") {
@@ -97311,85 +99509,298 @@
     function printVersion(sys) {
         sys.write(ts.getDiagnosticText(ts.Diagnostics.Version_0, ts.version) + sys.newLine);
     }
-    function printHelp(sys, optionsList, syntaxPrefix) {
-        if (syntaxPrefix === void 0) { syntaxPrefix = ""; }
-        var output = [];
-        var syntaxLength = ts.getDiagnosticText(ts.Diagnostics.Syntax_Colon_0, "").length;
-        var examplesLength = ts.getDiagnosticText(ts.Diagnostics.Examples_Colon_0, "").length;
-        var marginLength = Math.max(syntaxLength, examplesLength);
-        var syntax = makePadding(marginLength - syntaxLength);
-        syntax += "tsc " + syntaxPrefix + "[" + ts.getDiagnosticText(ts.Diagnostics.options) + "] [" + ts.getDiagnosticText(ts.Diagnostics.file) + "...]";
-        output.push(ts.getDiagnosticText(ts.Diagnostics.Syntax_Colon_0, syntax));
-        output.push(sys.newLine + sys.newLine);
-        var padding = makePadding(marginLength);
-        output.push(ts.getDiagnosticText(ts.Diagnostics.Examples_Colon_0, makePadding(marginLength - examplesLength) + "tsc hello.ts") + sys.newLine);
-        output.push(padding + "tsc --outFile file.js file.ts" + sys.newLine);
-        output.push(padding + "tsc @args.txt" + sys.newLine);
-        output.push(padding + "tsc --build tsconfig.json" + sys.newLine);
-        output.push(sys.newLine);
-        output.push(ts.getDiagnosticText(ts.Diagnostics.Options_Colon) + sys.newLine);
-        marginLength = 0;
-        var usageColumn = [];
-        var descriptionColumn = [];
-        var optionsDescriptionMap = new ts.Map();
-        for (var _i = 0, optionsList_1 = optionsList; _i < optionsList_1.length; _i++) {
-            var option = optionsList_1[_i];
-            if (!option.description) {
-                continue;
+    function createColors(sys) {
+        var showColors = defaultIsPretty(sys);
+        if (!showColors) {
+            return {
+                bold: function (str) { return str; },
+                blue: function (str) { return str; },
+                blueBackground: function (str) { return str; },
+                brightWhite: function (str) { return str; }
+            };
+        }
+        function bold(str) {
+            return "\u001B[1m" + str + "\u001B[22m";
+        }
+        var isWindows = sys.getEnvironmentVariable("OS") && ts.stringContains(sys.getEnvironmentVariable("OS").toLowerCase(), "windows");
+        var isWindowsTerminal = sys.getEnvironmentVariable("WT_SESSION");
+        var isVSCode = sys.getEnvironmentVariable("TERM_PROGRAM") && sys.getEnvironmentVariable("TERM_PROGRAM") === "vscode";
+        function blue(str) {
+            if (isWindows && !isWindowsTerminal && !isVSCode) {
+                return brightWhite(str);
             }
-            var usageText_1 = " ";
-            if (option.shortName) {
-                usageText_1 += "-" + option.shortName;
-                usageText_1 += getParamType(option);
-                usageText_1 += ", ";
-            }
-            usageText_1 += "--" + option.name;
-            usageText_1 += getParamType(option);
-            usageColumn.push(usageText_1);
-            var description = void 0;
-            if (option.name === "lib") {
-                description = ts.getDiagnosticText(option.description);
-                var element = option.element;
-                var typeMap = element.type;
-                optionsDescriptionMap.set(description, ts.arrayFrom(typeMap.keys()).map(function (key) { return "'" + key + "'"; }));
+            return "\u001B[94m" + str + "\u001B[39m";
+        }
+        var supportsRicherColors = sys.getEnvironmentVariable("COLORTERM") === "truecolor" || sys.getEnvironmentVariable("TERM") === "xterm-256color";
+        function blueBackground(str) {
+            if (supportsRicherColors) {
+                return "\u001B[48;5;68m" + str + "\u001B[39;49m";
             }
             else {
+                return "\u001B[44m" + str + "\u001B[39;49m";
+            }
+        }
+        function brightWhite(str) {
+            return "\u001B[97m" + str + "\u001B[39m";
+        }
+        return {
+            bold: bold,
+            blue: blue,
+            brightWhite: brightWhite,
+            blueBackground: blueBackground
+        };
+    }
+    function getDisplayNameTextOfOption(option) {
+        return "--" + option.name + (option.shortName ? ", -" + option.shortName : "");
+    }
+    function generateOptionOutput(sys, option, rightAlignOfLeft, leftAlignOfRight) {
+        var _a, _b;
+        var text = [];
+        var colors = createColors(sys);
+        var name = getDisplayNameTextOfOption(option);
+        var valueCandidates = getValueCandidate(option);
+        var defaultValueDescription = typeof option.defaultValueDescription === "object" ? ts.getDiagnosticText(option.defaultValueDescription) : option.defaultValueDescription;
+        var terminalWidth = (_b = (_a = sys.getWidthOfTerminal) === null || _a === void 0 ? void 0 : _a.call(sys)) !== null && _b !== void 0 ? _b : 0;
+        if (terminalWidth >= 80) {
+            var description = "";
+            if (option.description) {
                 description = ts.getDiagnosticText(option.description);
             }
-            descriptionColumn.push(description);
-            marginLength = Math.max(usageText_1.length, marginLength);
-        }
-        var usageText = " @<" + ts.getDiagnosticText(ts.Diagnostics.file) + ">";
-        usageColumn.push(usageText);
-        descriptionColumn.push(ts.getDiagnosticText(ts.Diagnostics.Insert_command_line_options_and_files_from_a_file));
-        marginLength = Math.max(usageText.length, marginLength);
-        for (var i = 0; i < usageColumn.length; i++) {
-            var usage = usageColumn[i];
-            var description = descriptionColumn[i];
-            var kindsList = optionsDescriptionMap.get(description);
-            output.push(usage + makePadding(marginLength - usage.length + 2) + description + sys.newLine);
-            if (kindsList) {
-                output.push(makePadding(marginLength + 4));
-                for (var _a = 0, kindsList_1 = kindsList; _a < kindsList_1.length; _a++) {
-                    var kind = kindsList_1[_a];
-                    output.push(kind + " ");
+            text.push.apply(text, __spreadArray(__spreadArray([], getPrettyOutput(name, description, rightAlignOfLeft, leftAlignOfRight, terminalWidth, true), false), [sys.newLine], false));
+            if (showAdditionalInfoOutput(valueCandidates, option)) {
+                if (valueCandidates) {
+                    text.push.apply(text, __spreadArray(__spreadArray([], getPrettyOutput(valueCandidates.valueType, valueCandidates.possibleValues, rightAlignOfLeft, leftAlignOfRight, terminalWidth, false), false), [sys.newLine], false));
                 }
-                output.push(sys.newLine);
+                if (defaultValueDescription) {
+                    text.push.apply(text, __spreadArray(__spreadArray([], getPrettyOutput(ts.getDiagnosticText(ts.Diagnostics.default_Colon), defaultValueDescription, rightAlignOfLeft, leftAlignOfRight, terminalWidth, false), false), [sys.newLine], false));
+                }
+            }
+            text.push(sys.newLine);
+        }
+        else {
+            text.push(colors.blue(name), sys.newLine);
+            if (option.description) {
+                var description = ts.getDiagnosticText(option.description);
+                text.push(description);
+            }
+            text.push(sys.newLine);
+            if (showAdditionalInfoOutput(valueCandidates, option)) {
+                if (valueCandidates) {
+                    text.push(valueCandidates.valueType + " " + valueCandidates.possibleValues);
+                }
+                if (defaultValueDescription) {
+                    if (valueCandidates)
+                        text.push(sys.newLine);
+                    var diagType = ts.getDiagnosticText(ts.Diagnostics.default_Colon);
+                    text.push(diagType + " " + defaultValueDescription);
+                }
+                text.push(sys.newLine);
+            }
+            text.push(sys.newLine);
+        }
+        return text;
+        function showAdditionalInfoOutput(valueCandidates, option) {
+            var ignoreValues = ["string"];
+            var ignoredDescriptions = [undefined, "false", "n/a"];
+            var defaultValueDescription = option.defaultValueDescription;
+            if (option.category === ts.Diagnostics.Command_line_Options)
+                return false;
+            if (ts.contains(ignoreValues, valueCandidates === null || valueCandidates === void 0 ? void 0 : valueCandidates.possibleValues) && ts.contains(ignoredDescriptions, defaultValueDescription)) {
+                return false;
+            }
+            return true;
+        }
+        function getPrettyOutput(left, right, rightAlignOfLeft, leftAlignOfRight, terminalWidth, colorLeft) {
+            var res = [];
+            var isFirstLine = true;
+            var remainRight = right;
+            var rightCharacterNumber = terminalWidth - leftAlignOfRight;
+            while (remainRight.length > 0) {
+                var curLeft = "";
+                if (isFirstLine) {
+                    curLeft = ts.padLeft(left, rightAlignOfLeft);
+                    curLeft = ts.padRight(curLeft, leftAlignOfRight);
+                    curLeft = colorLeft ? colors.blue(curLeft) : curLeft;
+                }
+                else {
+                    curLeft = ts.padLeft("", leftAlignOfRight);
+                }
+                var curRight = remainRight.substr(0, rightCharacterNumber);
+                remainRight = remainRight.slice(rightCharacterNumber);
+                res.push("" + curLeft + curRight);
+                isFirstLine = false;
+            }
+            return res;
+        }
+        function getValueCandidate(option) {
+            if (option.type === "object") {
+                return undefined;
+            }
+            return {
+                valueType: getValueType(option),
+                possibleValues: getPossibleValues(option)
+            };
+            function getValueType(option) {
+                switch (option.type) {
+                    case "string":
+                    case "number":
+                    case "boolean":
+                        return ts.getDiagnosticText(ts.Diagnostics.type_Colon);
+                    case "list":
+                        return ts.getDiagnosticText(ts.Diagnostics.one_or_more_Colon);
+                    default:
+                        return ts.getDiagnosticText(ts.Diagnostics.one_of_Colon);
+                }
+            }
+            function getPossibleValues(option) {
+                var possibleValues;
+                switch (option.type) {
+                    case "string":
+                    case "number":
+                    case "boolean":
+                        possibleValues = option.type;
+                        break;
+                    case "list":
+                        possibleValues = getPossibleValues(option.element);
+                        break;
+                    case "object":
+                        possibleValues = "";
+                        break;
+                    default:
+                        var keys = ts.arrayFrom(option.type.keys());
+                        possibleValues = keys.join(", ");
+                }
+                return possibleValues;
             }
         }
-        for (var _b = 0, output_1 = output; _b < output_1.length; _b++) {
-            var line = output_1[_b];
+    }
+    function generateGroupOptionOutput(sys, optionsList) {
+        var maxLength = 0;
+        for (var _i = 0, optionsList_1 = optionsList; _i < optionsList_1.length; _i++) {
+            var option = optionsList_1[_i];
+            var curLength = getDisplayNameTextOfOption(option).length;
+            maxLength = maxLength > curLength ? maxLength : curLength;
+        }
+        var rightAlignOfLeftPart = maxLength + 2;
+        var leftAlignOfRightPart = rightAlignOfLeftPart + 2;
+        var lines = [];
+        for (var _a = 0, optionsList_2 = optionsList; _a < optionsList_2.length; _a++) {
+            var option = optionsList_2[_a];
+            var tmp = generateOptionOutput(sys, option, rightAlignOfLeftPart, leftAlignOfRightPart);
+            lines = __spreadArray(__spreadArray([], lines, true), tmp, true);
+        }
+        if (lines[lines.length - 2] !== sys.newLine) {
+            lines.push(sys.newLine);
+        }
+        return lines;
+    }
+    function generateSectionOptionsOutput(sys, sectionName, options, subCategory, beforeOptionsDescription, afterOptionsDescription) {
+        var _a;
+        var res = [];
+        res.push(createColors(sys).bold(sectionName) + sys.newLine + sys.newLine);
+        if (beforeOptionsDescription) {
+            res.push(beforeOptionsDescription + sys.newLine + sys.newLine);
+        }
+        if (!subCategory) {
+            res = __spreadArray(__spreadArray([], res, true), generateGroupOptionOutput(sys, options), true);
+            if (afterOptionsDescription) {
+                res.push(afterOptionsDescription + sys.newLine + sys.newLine);
+            }
+            return res;
+        }
+        var categoryMap = new ts.Map();
+        for (var _i = 0, options_1 = options; _i < options_1.length; _i++) {
+            var option = options_1[_i];
+            if (!option.category) {
+                continue;
+            }
+            var curCategory = ts.getDiagnosticText(option.category);
+            var optionsOfCurCategory = (_a = categoryMap.get(curCategory)) !== null && _a !== void 0 ? _a : [];
+            optionsOfCurCategory.push(option);
+            categoryMap.set(curCategory, optionsOfCurCategory);
+        }
+        categoryMap.forEach(function (value, key) {
+            res.push("### " + key + sys.newLine + sys.newLine);
+            res = __spreadArray(__spreadArray([], res, true), generateGroupOptionOutput(sys, value), true);
+        });
+        if (afterOptionsDescription) {
+            res.push(afterOptionsDescription + sys.newLine + sys.newLine);
+        }
+        return res;
+    }
+    function printEasyHelp(sys, simpleOptions) {
+        var colors = createColors(sys);
+        var output = __spreadArray([], getHelpHeader(sys), true);
+        output.push(colors.bold(ts.getDiagnosticText(ts.Diagnostics.COMMON_COMMANDS)) + sys.newLine + sys.newLine);
+        example("tsc", ts.Diagnostics.Compiles_the_current_project_tsconfig_json_in_the_working_directory);
+        example("tsc app.ts util.ts", ts.Diagnostics.Ignoring_tsconfig_json_compiles_the_specified_files_with_default_compiler_options);
+        example("tsc -b", ts.Diagnostics.Build_a_composite_project_in_the_working_directory);
+        example("tsc --init", ts.Diagnostics.Creates_a_tsconfig_json_with_the_recommended_settings_in_the_working_directory);
+        example("tsc -p ./path/to/tsconfig.json", ts.Diagnostics.Compiles_the_TypeScript_project_located_at_the_specified_path);
+        example("tsc --help --all", ts.Diagnostics.An_expanded_version_of_this_information_showing_all_possible_compiler_options);
+        example(["tsc --noEmit", "tsc --target esnext"], ts.Diagnostics.Compiles_the_current_project_with_additional_settings);
+        var cliCommands = simpleOptions.filter(function (opt) { return opt.isCommandLineOnly || opt.category === ts.Diagnostics.Command_line_Options; });
+        var configOpts = simpleOptions.filter(function (opt) { return !ts.contains(cliCommands, opt); });
+        output = __spreadArray(__spreadArray(__spreadArray([], output, true), generateSectionOptionsOutput(sys, ts.getDiagnosticText(ts.Diagnostics.COMMAND_LINE_FLAGS), cliCommands, false, undefined, undefined), true), generateSectionOptionsOutput(sys, ts.getDiagnosticText(ts.Diagnostics.COMMON_COMPILER_OPTIONS), configOpts, false, undefined, ts.formatMessage(undefined, ts.Diagnostics.You_can_learn_about_all_of_the_compiler_options_at_0, "https://aka.ms/tsconfig-reference")), true);
+        for (var _i = 0, output_1 = output; _i < output_1.length; _i++) {
+            var line = output_1[_i];
             sys.write(line);
         }
-        return;
-        function getParamType(option) {
-            if (option.paramType !== undefined) {
-                return " " + ts.getDiagnosticText(option.paramType);
+        function example(ex, desc) {
+            var examples = typeof ex === "string" ? [ex] : ex;
+            for (var _i = 0, examples_1 = examples; _i < examples_1.length; _i++) {
+                var example_1 = examples_1[_i];
+                output.push("  " + colors.blue(example_1) + sys.newLine);
             }
-            return "";
+            output.push("  " + ts.getDiagnosticText(desc) + sys.newLine + sys.newLine);
         }
-        function makePadding(paddingLength) {
-            return Array(paddingLength + 1).join(" ");
+    }
+    function printAllHelp(sys, compilerOptions, buildOptions, watchOptions) {
+        var output = __spreadArray([], getHelpHeader(sys), true);
+        output = __spreadArray(__spreadArray([], output, true), generateSectionOptionsOutput(sys, ts.getDiagnosticText(ts.Diagnostics.ALL_COMPILER_OPTIONS), compilerOptions, true, undefined, ts.formatMessage(undefined, ts.Diagnostics.You_can_learn_about_all_of_the_compiler_options_at_0, "https://aka.ms/tsconfig-reference")), true);
+        output = __spreadArray(__spreadArray([], output, true), generateSectionOptionsOutput(sys, ts.getDiagnosticText(ts.Diagnostics.WATCH_OPTIONS), watchOptions, false, ts.getDiagnosticText(ts.Diagnostics.Including_watch_w_will_start_watching_the_current_project_for_the_file_changes_Once_set_you_can_config_watch_mode_with_Colon)), true);
+        output = __spreadArray(__spreadArray([], output, true), generateSectionOptionsOutput(sys, ts.getDiagnosticText(ts.Diagnostics.BUILD_OPTIONS), buildOptions, false, ts.formatMessage(undefined, ts.Diagnostics.Using_build_b_will_make_tsc_behave_more_like_a_build_orchestrator_than_a_compiler_This_is_used_to_trigger_building_composite_projects_which_you_can_learn_more_about_at_0, "https://aka.ms/tsc-composite-builds")), true);
+        for (var _i = 0, output_2 = output; _i < output_2.length; _i++) {
+            var line = output_2[_i];
+            sys.write(line);
+        }
+    }
+    function printBuildHelp(sys, buildOptions) {
+        var output = __spreadArray([], getHelpHeader(sys), true);
+        output = __spreadArray(__spreadArray([], output, true), generateSectionOptionsOutput(sys, ts.getDiagnosticText(ts.Diagnostics.BUILD_OPTIONS), buildOptions, false, ts.formatMessage(undefined, ts.Diagnostics.Using_build_b_will_make_tsc_behave_more_like_a_build_orchestrator_than_a_compiler_This_is_used_to_trigger_building_composite_projects_which_you_can_learn_more_about_at_0, "https://aka.ms/tsc-composite-builds")), true);
+        for (var _i = 0, output_3 = output; _i < output_3.length; _i++) {
+            var line = output_3[_i];
+            sys.write(line);
+        }
+    }
+    function getHelpHeader(sys) {
+        var _a, _b;
+        var colors = createColors(sys);
+        var header = [];
+        var tscExplanation = ts.getDiagnosticText(ts.Diagnostics.tsc_Colon_The_TypeScript_Compiler) + " - " + ts.getDiagnosticText(ts.Diagnostics.Version_0, ts.version);
+        var terminalWidth = (_b = (_a = sys.getWidthOfTerminal) === null || _a === void 0 ? void 0 : _a.call(sys)) !== null && _b !== void 0 ? _b : 0;
+        ;
+        var tsIconLength = 5;
+        var tsIconFirstLine = colors.blueBackground(ts.padLeft("", tsIconLength));
+        var tsIconSecondLine = colors.blueBackground(colors.brightWhite(ts.padLeft("TS ", tsIconLength)));
+        if (terminalWidth >= tscExplanation.length + tsIconLength) {
+            var rightAlign = terminalWidth > 120 ? 120 : terminalWidth;
+            var leftAlign = rightAlign - tsIconLength;
+            header.push(ts.padRight(tscExplanation, leftAlign) + tsIconFirstLine + sys.newLine);
+            header.push(ts.padLeft("", leftAlign) + tsIconSecondLine + sys.newLine);
+        }
+        else {
+            header.push(tscExplanation + sys.newLine);
+            header.push(sys.newLine);
+        }
+        return header;
+    }
+    function printHelp(sys, commandLine) {
+        if (!commandLine.options.all) {
+            printEasyHelp(sys, getOptionsForHelp(commandLine));
+        }
+        else {
+            printAllHelp(sys, getOptionsForHelp(commandLine), ts.optionsForBuild, ts.optionsForWatch);
         }
     }
     function executeCommandLineWorker(sys, cb, commandLine) {
@@ -97415,8 +99826,7 @@
             return sys.exit(ts.ExitStatus.Success);
         }
         if (commandLine.options.help || commandLine.options.all) {
-            printVersion(sys);
-            printHelp(sys, getOptionsForHelp(commandLine));
+            printHelp(sys, commandLine);
             return sys.exit(ts.ExitStatus.Success);
         }
         if (commandLine.options.watch && commandLine.options.listFilesOnly) {
@@ -97454,7 +99864,7 @@
             }
             else {
                 printVersion(sys);
-                printHelp(sys, getOptionsForHelp(commandLine));
+                printHelp(sys, commandLine);
             }
             return sys.exit(ts.ExitStatus.DiagnosticsPresent_OutputsSkipped);
         }
@@ -97550,12 +99960,12 @@
         }
         if (buildOptions.help) {
             printVersion(sys);
-            printHelp(sys, ts.buildOpts, "--build ");
+            printBuildHelp(sys, ts.buildOpts);
             return sys.exit(ts.ExitStatus.Success);
         }
         if (projects.length === 0) {
             printVersion(sys);
-            printHelp(sys, ts.buildOpts, "--build ");
+            printBuildHelp(sys, ts.buildOpts);
             return sys.exit(ts.ExitStatus.Success);
         }
         if (!sys.getModifiedTime || !sys.setModifiedTime || (buildOptions.clean && !sys.deleteFile)) {
diff --git a/node_modules/typescript/lib/tsserver.js b/node_modules/typescript/lib/tsserver.js
index f9cc0bc..6e4ee30 100644
--- a/node_modules/typescript/lib/tsserver.js
+++ b/node_modules/typescript/lib/tsserver.js
@@ -15,10 +15,14 @@
 
 
 "use strict";
-var __spreadArray = (this && this.__spreadArray) || function (to, from) {
-    for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)
-        to[j] = from[i];
-    return to;
+var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
+    if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
+        if (ar || !(i in from)) {
+            if (!ar) ar = Array.prototype.slice.call(from, 0, i);
+            ar[i] = from[i];
+        }
+    }
+    return to.concat(ar || Array.prototype.slice.call(from));
 };
 var __assign = (this && this.__assign) || function () {
     __assign = Object.assign || function(t) {
@@ -92,11 +96,11 @@
 (function (ts) {
     // WARNING: The script `configurePrerelease.ts` uses a regexp to parse out these values.
     // If changing the text in this section, be sure to test `configurePrerelease` too.
-    ts.versionMajorMinor = "4.3";
+    ts.versionMajorMinor = "4.4";
     // The following is baselined as a literal template type without intervention
     /** The version of the TypeScript compiler release */
     // eslint-disable-next-line @typescript-eslint/no-inferrable-types
-    ts.version = "4.3.5";
+    ts.version = "4.4.2";
     /* @internal */
     var Comparison;
     (function (Comparison) {
@@ -781,7 +785,7 @@
             return array1;
         if (!some(array1))
             return array2;
-        return __spreadArray(__spreadArray([], array1), array2);
+        return __spreadArray(__spreadArray([], array1, true), array2, true);
     }
     ts.concatenate = concatenate;
     function selectIndex(_, i) {
@@ -1939,10 +1943,46 @@
      * Takes a string like "jquery-min.4.2.3" and returns "jquery"
      */
     function removeMinAndVersionNumbers(fileName) {
-        // Match a "." or "-" followed by a version number or 'min' at the end of the name
-        var trailingMinOrVersion = /[.-]((min)|(\d+(\.\d+)*))$/;
-        // The "min" or version may both be present, in either order, so try applying the above twice.
-        return fileName.replace(trailingMinOrVersion, "").replace(trailingMinOrVersion, "");
+        // We used to use the regex /[.-]((min)|(\d+(\.\d+)*))$/ and would just .replace it twice.
+        // Unfortunately, that regex has O(n^2) performance because v8 doesn't match from the end of the string.
+        // Instead, we now essentially scan the filename (backwards) ourselves.
+        var end = fileName.length;
+        for (var pos = end - 1; pos > 0; pos--) {
+            var ch = fileName.charCodeAt(pos);
+            if (ch >= 48 /* _0 */ && ch <= 57 /* _9 */) {
+                // Match a \d+ segment
+                do {
+                    --pos;
+                    ch = fileName.charCodeAt(pos);
+                } while (pos > 0 && ch >= 48 /* _0 */ && ch <= 57 /* _9 */);
+            }
+            else if (pos > 4 && (ch === 110 /* n */ || ch === 78 /* N */)) {
+                // Looking for "min" or "min"
+                // Already matched the 'n'
+                --pos;
+                ch = fileName.charCodeAt(pos);
+                if (ch !== 105 /* i */ && ch !== 73 /* I */) {
+                    break;
+                }
+                --pos;
+                ch = fileName.charCodeAt(pos);
+                if (ch !== 109 /* m */ && ch !== 77 /* M */) {
+                    break;
+                }
+                --pos;
+                ch = fileName.charCodeAt(pos);
+            }
+            else {
+                // This character is not part of either suffix pattern
+                break;
+            }
+            if (ch !== 45 /* minus */ && ch !== 46 /* dot */) {
+                break;
+            }
+            end = pos;
+        }
+        // end might be fileName.length, in which case this should internally no-op
+        return end === fileName.length ? fileName : fileName.slice(0, end);
     }
     ts.removeMinAndVersionNumbers = removeMinAndVersionNumbers;
     /** Remove an item from an array, moving everything to its right one space left. */
@@ -2183,6 +2223,33 @@
         return array.slice(0, index);
     }
     ts.takeWhile = takeWhile;
+    /**
+     * Removes the leading and trailing white space and line terminator characters from a string.
+     */
+    ts.trimString = !!String.prototype.trim ? (function (s) { return s.trim(); }) : function (s) { return ts.trimStringEnd(ts.trimStringStart(s)); };
+    /**
+     * Returns a copy with trailing whitespace removed.
+     */
+    ts.trimStringEnd = !!String.prototype.trimEnd ? (function (s) { return s.trimEnd(); }) : trimEndImpl;
+    /**
+     * Returns a copy with leading whitespace removed.
+     */
+    ts.trimStringStart = !!String.prototype.trimStart ? (function (s) { return s.trimStart(); }) : function (s) { return s.replace(/^\s+/g, ""); };
+    /**
+     * https://jsbench.me/gjkoxld4au/1
+     * The simple regex for this, /\s+$/g is O(n^2) in v8.
+     * The native .trimEnd method is by far best, but since that's technically ES2019,
+     * we provide a (still much faster than the simple regex) fallback.
+     */
+    function trimEndImpl(s) {
+        var end = s.length - 1;
+        while (end >= 0) {
+            if (!ts.isWhiteSpaceLike(s.charCodeAt(end)))
+                break;
+            end--;
+        }
+        return s.slice(0, end + 1);
+    }
 })(ts || (ts = {}));
 /* @internal */
 var ts;
@@ -2372,7 +2439,7 @@
         Debug.assertEachNode = assertEachNode;
         function assertNode(node, test, message, stackCrawlMark) {
             if (shouldAssertFunction(1 /* Normal */, "assertNode")) {
-                assert(node !== undefined && (test === undefined || test(node)), message || "Unexpected node.", function () { return "Node " + formatSyntaxKind(node.kind) + " did not pass test '" + getFunctionName(test) + "'."; }, stackCrawlMark || assertNode);
+                assert(node !== undefined && (test === undefined || test(node)), message || "Unexpected node.", function () { return "Node " + formatSyntaxKind(node === null || node === void 0 ? void 0 : node.kind) + " did not pass test '" + getFunctionName(test) + "'."; }, stackCrawlMark || assertNode);
             }
         }
         Debug.assertNode = assertNode;
@@ -2384,13 +2451,13 @@
         Debug.assertNotNode = assertNotNode;
         function assertOptionalNode(node, test, message, stackCrawlMark) {
             if (shouldAssertFunction(1 /* Normal */, "assertOptionalNode")) {
-                assert(test === undefined || node === undefined || test(node), message || "Unexpected node.", function () { return "Node " + formatSyntaxKind(node.kind) + " did not pass test '" + getFunctionName(test) + "'."; }, stackCrawlMark || assertOptionalNode);
+                assert(test === undefined || node === undefined || test(node), message || "Unexpected node.", function () { return "Node " + formatSyntaxKind(node === null || node === void 0 ? void 0 : node.kind) + " did not pass test '" + getFunctionName(test) + "'."; }, stackCrawlMark || assertOptionalNode);
             }
         }
         Debug.assertOptionalNode = assertOptionalNode;
         function assertOptionalToken(node, kind, message, stackCrawlMark) {
             if (shouldAssertFunction(1 /* Normal */, "assertOptionalToken")) {
-                assert(kind === undefined || node === undefined || node.kind === kind, message || "Unexpected node.", function () { return "Node " + formatSyntaxKind(node.kind) + " was not a '" + formatSyntaxKind(kind) + "' token."; }, stackCrawlMark || assertOptionalToken);
+                assert(kind === undefined || node === undefined || node.kind === kind, message || "Unexpected node.", function () { return "Node " + formatSyntaxKind(node === null || node === void 0 ? void 0 : node.kind) + " was not a '" + formatSyntaxKind(kind) + "' token."; }, stackCrawlMark || assertOptionalToken);
             }
         }
         Debug.assertOptionalToken = assertOptionalToken;
@@ -2579,6 +2646,9 @@
                             // An `Array` with extra properties is rendered as `[A, B, prop1: 1, prop2: 2]`. Most of
                             // these aren't immediately useful so we trim off the `prop1: ..., prop2: ...` part from the
                             // formatted string.
+                            // This regex can trigger slow backtracking because of overlapping potential captures.
+                            // We don't care, this is debug code that's only enabled with a debugger attached -
+                            // we're just taking note of it for anyone checking regex performance in the future.
                             defaultValue = String(defaultValue).replace(/(?:,[\s\w\d_]+:[^,]+)+\]$/, "]");
                             return "NodeArray " + defaultValue;
                         }
@@ -3027,7 +3097,7 @@
     // range-set    ::= range ( logical-or range ) *
     // range        ::= hyphen | simple ( ' ' simple ) * | ''
     // logical-or   ::= ( ' ' ) * '||' ( ' ' ) *
-    var logicalOrRegExp = /\s*\|\|\s*/g;
+    var logicalOrRegExp = /\|\|/g;
     var whitespaceRegExp = /\s+/g;
     // https://github.com/npm/node-semver#range-grammar
     //
@@ -3050,14 +3120,15 @@
     // primitive    ::= ( '<' | '>' | '>=' | '<=' | '=' ) partial
     // tilde        ::= '~' partial
     // caret        ::= '^' partial
-    var rangeRegExp = /^\s*(~|\^|<|<=|>|>=|=)?\s*([a-z0-9-+.*]+)$/i;
+    var rangeRegExp = /^(~|\^|<|<=|>|>=|=)?\s*([a-z0-9-+.*]+)$/i;
     function parseRange(text) {
         var alternatives = [];
-        for (var _i = 0, _a = text.trim().split(logicalOrRegExp); _i < _a.length; _i++) {
+        for (var _i = 0, _a = ts.trimString(text).split(logicalOrRegExp); _i < _a.length; _i++) {
             var range = _a[_i];
             if (!range)
                 continue;
             var comparators = [];
+            range = ts.trimString(range);
             var match = hyphenRegExp.exec(range);
             if (match) {
                 if (!parseHyphen(match[1], match[2], comparators))
@@ -3066,7 +3137,7 @@
             else {
                 for (var _b = 0, _c = range.split(whitespaceRegExp); _b < _c.length; _b++) {
                     var simple = _c[_b];
-                    var match_1 = rangeRegExp.exec(simple);
+                    var match_1 = rangeRegExp.exec(ts.trimString(simple));
                     if (!match_1 || !parseComparator(match_1[1], match_1[2], comparators))
                         return undefined;
                 }
@@ -3813,332 +3884,338 @@
         SyntaxKind[SyntaxKind["QuestionQuestionToken"] = 60] = "QuestionQuestionToken";
         /** Only the JSDoc scanner produces BacktickToken. The normal scanner produces NoSubstitutionTemplateLiteral and related kinds. */
         SyntaxKind[SyntaxKind["BacktickToken"] = 61] = "BacktickToken";
+        /** Only the JSDoc scanner produces HashToken. The normal scanner produces PrivateIdentifier. */
+        SyntaxKind[SyntaxKind["HashToken"] = 62] = "HashToken";
         // Assignments
-        SyntaxKind[SyntaxKind["EqualsToken"] = 62] = "EqualsToken";
-        SyntaxKind[SyntaxKind["PlusEqualsToken"] = 63] = "PlusEqualsToken";
-        SyntaxKind[SyntaxKind["MinusEqualsToken"] = 64] = "MinusEqualsToken";
-        SyntaxKind[SyntaxKind["AsteriskEqualsToken"] = 65] = "AsteriskEqualsToken";
-        SyntaxKind[SyntaxKind["AsteriskAsteriskEqualsToken"] = 66] = "AsteriskAsteriskEqualsToken";
-        SyntaxKind[SyntaxKind["SlashEqualsToken"] = 67] = "SlashEqualsToken";
-        SyntaxKind[SyntaxKind["PercentEqualsToken"] = 68] = "PercentEqualsToken";
-        SyntaxKind[SyntaxKind["LessThanLessThanEqualsToken"] = 69] = "LessThanLessThanEqualsToken";
-        SyntaxKind[SyntaxKind["GreaterThanGreaterThanEqualsToken"] = 70] = "GreaterThanGreaterThanEqualsToken";
-        SyntaxKind[SyntaxKind["GreaterThanGreaterThanGreaterThanEqualsToken"] = 71] = "GreaterThanGreaterThanGreaterThanEqualsToken";
-        SyntaxKind[SyntaxKind["AmpersandEqualsToken"] = 72] = "AmpersandEqualsToken";
-        SyntaxKind[SyntaxKind["BarEqualsToken"] = 73] = "BarEqualsToken";
-        SyntaxKind[SyntaxKind["BarBarEqualsToken"] = 74] = "BarBarEqualsToken";
-        SyntaxKind[SyntaxKind["AmpersandAmpersandEqualsToken"] = 75] = "AmpersandAmpersandEqualsToken";
-        SyntaxKind[SyntaxKind["QuestionQuestionEqualsToken"] = 76] = "QuestionQuestionEqualsToken";
-        SyntaxKind[SyntaxKind["CaretEqualsToken"] = 77] = "CaretEqualsToken";
+        SyntaxKind[SyntaxKind["EqualsToken"] = 63] = "EqualsToken";
+        SyntaxKind[SyntaxKind["PlusEqualsToken"] = 64] = "PlusEqualsToken";
+        SyntaxKind[SyntaxKind["MinusEqualsToken"] = 65] = "MinusEqualsToken";
+        SyntaxKind[SyntaxKind["AsteriskEqualsToken"] = 66] = "AsteriskEqualsToken";
+        SyntaxKind[SyntaxKind["AsteriskAsteriskEqualsToken"] = 67] = "AsteriskAsteriskEqualsToken";
+        SyntaxKind[SyntaxKind["SlashEqualsToken"] = 68] = "SlashEqualsToken";
+        SyntaxKind[SyntaxKind["PercentEqualsToken"] = 69] = "PercentEqualsToken";
+        SyntaxKind[SyntaxKind["LessThanLessThanEqualsToken"] = 70] = "LessThanLessThanEqualsToken";
+        SyntaxKind[SyntaxKind["GreaterThanGreaterThanEqualsToken"] = 71] = "GreaterThanGreaterThanEqualsToken";
+        SyntaxKind[SyntaxKind["GreaterThanGreaterThanGreaterThanEqualsToken"] = 72] = "GreaterThanGreaterThanGreaterThanEqualsToken";
+        SyntaxKind[SyntaxKind["AmpersandEqualsToken"] = 73] = "AmpersandEqualsToken";
+        SyntaxKind[SyntaxKind["BarEqualsToken"] = 74] = "BarEqualsToken";
+        SyntaxKind[SyntaxKind["BarBarEqualsToken"] = 75] = "BarBarEqualsToken";
+        SyntaxKind[SyntaxKind["AmpersandAmpersandEqualsToken"] = 76] = "AmpersandAmpersandEqualsToken";
+        SyntaxKind[SyntaxKind["QuestionQuestionEqualsToken"] = 77] = "QuestionQuestionEqualsToken";
+        SyntaxKind[SyntaxKind["CaretEqualsToken"] = 78] = "CaretEqualsToken";
         // Identifiers and PrivateIdentifiers
-        SyntaxKind[SyntaxKind["Identifier"] = 78] = "Identifier";
-        SyntaxKind[SyntaxKind["PrivateIdentifier"] = 79] = "PrivateIdentifier";
+        SyntaxKind[SyntaxKind["Identifier"] = 79] = "Identifier";
+        SyntaxKind[SyntaxKind["PrivateIdentifier"] = 80] = "PrivateIdentifier";
         // Reserved words
-        SyntaxKind[SyntaxKind["BreakKeyword"] = 80] = "BreakKeyword";
-        SyntaxKind[SyntaxKind["CaseKeyword"] = 81] = "CaseKeyword";
-        SyntaxKind[SyntaxKind["CatchKeyword"] = 82] = "CatchKeyword";
-        SyntaxKind[SyntaxKind["ClassKeyword"] = 83] = "ClassKeyword";
-        SyntaxKind[SyntaxKind["ConstKeyword"] = 84] = "ConstKeyword";
-        SyntaxKind[SyntaxKind["ContinueKeyword"] = 85] = "ContinueKeyword";
-        SyntaxKind[SyntaxKind["DebuggerKeyword"] = 86] = "DebuggerKeyword";
-        SyntaxKind[SyntaxKind["DefaultKeyword"] = 87] = "DefaultKeyword";
-        SyntaxKind[SyntaxKind["DeleteKeyword"] = 88] = "DeleteKeyword";
-        SyntaxKind[SyntaxKind["DoKeyword"] = 89] = "DoKeyword";
-        SyntaxKind[SyntaxKind["ElseKeyword"] = 90] = "ElseKeyword";
-        SyntaxKind[SyntaxKind["EnumKeyword"] = 91] = "EnumKeyword";
-        SyntaxKind[SyntaxKind["ExportKeyword"] = 92] = "ExportKeyword";
-        SyntaxKind[SyntaxKind["ExtendsKeyword"] = 93] = "ExtendsKeyword";
-        SyntaxKind[SyntaxKind["FalseKeyword"] = 94] = "FalseKeyword";
-        SyntaxKind[SyntaxKind["FinallyKeyword"] = 95] = "FinallyKeyword";
-        SyntaxKind[SyntaxKind["ForKeyword"] = 96] = "ForKeyword";
-        SyntaxKind[SyntaxKind["FunctionKeyword"] = 97] = "FunctionKeyword";
-        SyntaxKind[SyntaxKind["IfKeyword"] = 98] = "IfKeyword";
-        SyntaxKind[SyntaxKind["ImportKeyword"] = 99] = "ImportKeyword";
-        SyntaxKind[SyntaxKind["InKeyword"] = 100] = "InKeyword";
-        SyntaxKind[SyntaxKind["InstanceOfKeyword"] = 101] = "InstanceOfKeyword";
-        SyntaxKind[SyntaxKind["NewKeyword"] = 102] = "NewKeyword";
-        SyntaxKind[SyntaxKind["NullKeyword"] = 103] = "NullKeyword";
-        SyntaxKind[SyntaxKind["ReturnKeyword"] = 104] = "ReturnKeyword";
-        SyntaxKind[SyntaxKind["SuperKeyword"] = 105] = "SuperKeyword";
-        SyntaxKind[SyntaxKind["SwitchKeyword"] = 106] = "SwitchKeyword";
-        SyntaxKind[SyntaxKind["ThisKeyword"] = 107] = "ThisKeyword";
-        SyntaxKind[SyntaxKind["ThrowKeyword"] = 108] = "ThrowKeyword";
-        SyntaxKind[SyntaxKind["TrueKeyword"] = 109] = "TrueKeyword";
-        SyntaxKind[SyntaxKind["TryKeyword"] = 110] = "TryKeyword";
-        SyntaxKind[SyntaxKind["TypeOfKeyword"] = 111] = "TypeOfKeyword";
-        SyntaxKind[SyntaxKind["VarKeyword"] = 112] = "VarKeyword";
-        SyntaxKind[SyntaxKind["VoidKeyword"] = 113] = "VoidKeyword";
-        SyntaxKind[SyntaxKind["WhileKeyword"] = 114] = "WhileKeyword";
-        SyntaxKind[SyntaxKind["WithKeyword"] = 115] = "WithKeyword";
+        SyntaxKind[SyntaxKind["BreakKeyword"] = 81] = "BreakKeyword";
+        SyntaxKind[SyntaxKind["CaseKeyword"] = 82] = "CaseKeyword";
+        SyntaxKind[SyntaxKind["CatchKeyword"] = 83] = "CatchKeyword";
+        SyntaxKind[SyntaxKind["ClassKeyword"] = 84] = "ClassKeyword";
+        SyntaxKind[SyntaxKind["ConstKeyword"] = 85] = "ConstKeyword";
+        SyntaxKind[SyntaxKind["ContinueKeyword"] = 86] = "ContinueKeyword";
+        SyntaxKind[SyntaxKind["DebuggerKeyword"] = 87] = "DebuggerKeyword";
+        SyntaxKind[SyntaxKind["DefaultKeyword"] = 88] = "DefaultKeyword";
+        SyntaxKind[SyntaxKind["DeleteKeyword"] = 89] = "DeleteKeyword";
+        SyntaxKind[SyntaxKind["DoKeyword"] = 90] = "DoKeyword";
+        SyntaxKind[SyntaxKind["ElseKeyword"] = 91] = "ElseKeyword";
+        SyntaxKind[SyntaxKind["EnumKeyword"] = 92] = "EnumKeyword";
+        SyntaxKind[SyntaxKind["ExportKeyword"] = 93] = "ExportKeyword";
+        SyntaxKind[SyntaxKind["ExtendsKeyword"] = 94] = "ExtendsKeyword";
+        SyntaxKind[SyntaxKind["FalseKeyword"] = 95] = "FalseKeyword";
+        SyntaxKind[SyntaxKind["FinallyKeyword"] = 96] = "FinallyKeyword";
+        SyntaxKind[SyntaxKind["ForKeyword"] = 97] = "ForKeyword";
+        SyntaxKind[SyntaxKind["FunctionKeyword"] = 98] = "FunctionKeyword";
+        SyntaxKind[SyntaxKind["IfKeyword"] = 99] = "IfKeyword";
+        SyntaxKind[SyntaxKind["ImportKeyword"] = 100] = "ImportKeyword";
+        SyntaxKind[SyntaxKind["InKeyword"] = 101] = "InKeyword";
+        SyntaxKind[SyntaxKind["InstanceOfKeyword"] = 102] = "InstanceOfKeyword";
+        SyntaxKind[SyntaxKind["NewKeyword"] = 103] = "NewKeyword";
+        SyntaxKind[SyntaxKind["NullKeyword"] = 104] = "NullKeyword";
+        SyntaxKind[SyntaxKind["ReturnKeyword"] = 105] = "ReturnKeyword";
+        SyntaxKind[SyntaxKind["SuperKeyword"] = 106] = "SuperKeyword";
+        SyntaxKind[SyntaxKind["SwitchKeyword"] = 107] = "SwitchKeyword";
+        SyntaxKind[SyntaxKind["ThisKeyword"] = 108] = "ThisKeyword";
+        SyntaxKind[SyntaxKind["ThrowKeyword"] = 109] = "ThrowKeyword";
+        SyntaxKind[SyntaxKind["TrueKeyword"] = 110] = "TrueKeyword";
+        SyntaxKind[SyntaxKind["TryKeyword"] = 111] = "TryKeyword";
+        SyntaxKind[SyntaxKind["TypeOfKeyword"] = 112] = "TypeOfKeyword";
+        SyntaxKind[SyntaxKind["VarKeyword"] = 113] = "VarKeyword";
+        SyntaxKind[SyntaxKind["VoidKeyword"] = 114] = "VoidKeyword";
+        SyntaxKind[SyntaxKind["WhileKeyword"] = 115] = "WhileKeyword";
+        SyntaxKind[SyntaxKind["WithKeyword"] = 116] = "WithKeyword";
         // Strict mode reserved words
-        SyntaxKind[SyntaxKind["ImplementsKeyword"] = 116] = "ImplementsKeyword";
-        SyntaxKind[SyntaxKind["InterfaceKeyword"] = 117] = "InterfaceKeyword";
-        SyntaxKind[SyntaxKind["LetKeyword"] = 118] = "LetKeyword";
-        SyntaxKind[SyntaxKind["PackageKeyword"] = 119] = "PackageKeyword";
-        SyntaxKind[SyntaxKind["PrivateKeyword"] = 120] = "PrivateKeyword";
-        SyntaxKind[SyntaxKind["ProtectedKeyword"] = 121] = "ProtectedKeyword";
-        SyntaxKind[SyntaxKind["PublicKeyword"] = 122] = "PublicKeyword";
-        SyntaxKind[SyntaxKind["StaticKeyword"] = 123] = "StaticKeyword";
-        SyntaxKind[SyntaxKind["YieldKeyword"] = 124] = "YieldKeyword";
+        SyntaxKind[SyntaxKind["ImplementsKeyword"] = 117] = "ImplementsKeyword";
+        SyntaxKind[SyntaxKind["InterfaceKeyword"] = 118] = "InterfaceKeyword";
+        SyntaxKind[SyntaxKind["LetKeyword"] = 119] = "LetKeyword";
+        SyntaxKind[SyntaxKind["PackageKeyword"] = 120] = "PackageKeyword";
+        SyntaxKind[SyntaxKind["PrivateKeyword"] = 121] = "PrivateKeyword";
+        SyntaxKind[SyntaxKind["ProtectedKeyword"] = 122] = "ProtectedKeyword";
+        SyntaxKind[SyntaxKind["PublicKeyword"] = 123] = "PublicKeyword";
+        SyntaxKind[SyntaxKind["StaticKeyword"] = 124] = "StaticKeyword";
+        SyntaxKind[SyntaxKind["YieldKeyword"] = 125] = "YieldKeyword";
         // Contextual keywords
-        SyntaxKind[SyntaxKind["AbstractKeyword"] = 125] = "AbstractKeyword";
-        SyntaxKind[SyntaxKind["AsKeyword"] = 126] = "AsKeyword";
-        SyntaxKind[SyntaxKind["AssertsKeyword"] = 127] = "AssertsKeyword";
-        SyntaxKind[SyntaxKind["AnyKeyword"] = 128] = "AnyKeyword";
-        SyntaxKind[SyntaxKind["AsyncKeyword"] = 129] = "AsyncKeyword";
-        SyntaxKind[SyntaxKind["AwaitKeyword"] = 130] = "AwaitKeyword";
-        SyntaxKind[SyntaxKind["BooleanKeyword"] = 131] = "BooleanKeyword";
-        SyntaxKind[SyntaxKind["ConstructorKeyword"] = 132] = "ConstructorKeyword";
-        SyntaxKind[SyntaxKind["DeclareKeyword"] = 133] = "DeclareKeyword";
-        SyntaxKind[SyntaxKind["GetKeyword"] = 134] = "GetKeyword";
-        SyntaxKind[SyntaxKind["InferKeyword"] = 135] = "InferKeyword";
-        SyntaxKind[SyntaxKind["IntrinsicKeyword"] = 136] = "IntrinsicKeyword";
-        SyntaxKind[SyntaxKind["IsKeyword"] = 137] = "IsKeyword";
-        SyntaxKind[SyntaxKind["KeyOfKeyword"] = 138] = "KeyOfKeyword";
-        SyntaxKind[SyntaxKind["ModuleKeyword"] = 139] = "ModuleKeyword";
-        SyntaxKind[SyntaxKind["NamespaceKeyword"] = 140] = "NamespaceKeyword";
-        SyntaxKind[SyntaxKind["NeverKeyword"] = 141] = "NeverKeyword";
-        SyntaxKind[SyntaxKind["ReadonlyKeyword"] = 142] = "ReadonlyKeyword";
-        SyntaxKind[SyntaxKind["RequireKeyword"] = 143] = "RequireKeyword";
-        SyntaxKind[SyntaxKind["NumberKeyword"] = 144] = "NumberKeyword";
-        SyntaxKind[SyntaxKind["ObjectKeyword"] = 145] = "ObjectKeyword";
-        SyntaxKind[SyntaxKind["SetKeyword"] = 146] = "SetKeyword";
-        SyntaxKind[SyntaxKind["StringKeyword"] = 147] = "StringKeyword";
-        SyntaxKind[SyntaxKind["SymbolKeyword"] = 148] = "SymbolKeyword";
-        SyntaxKind[SyntaxKind["TypeKeyword"] = 149] = "TypeKeyword";
-        SyntaxKind[SyntaxKind["UndefinedKeyword"] = 150] = "UndefinedKeyword";
-        SyntaxKind[SyntaxKind["UniqueKeyword"] = 151] = "UniqueKeyword";
-        SyntaxKind[SyntaxKind["UnknownKeyword"] = 152] = "UnknownKeyword";
-        SyntaxKind[SyntaxKind["FromKeyword"] = 153] = "FromKeyword";
-        SyntaxKind[SyntaxKind["GlobalKeyword"] = 154] = "GlobalKeyword";
-        SyntaxKind[SyntaxKind["BigIntKeyword"] = 155] = "BigIntKeyword";
-        SyntaxKind[SyntaxKind["OverrideKeyword"] = 156] = "OverrideKeyword";
-        SyntaxKind[SyntaxKind["OfKeyword"] = 157] = "OfKeyword";
+        SyntaxKind[SyntaxKind["AbstractKeyword"] = 126] = "AbstractKeyword";
+        SyntaxKind[SyntaxKind["AsKeyword"] = 127] = "AsKeyword";
+        SyntaxKind[SyntaxKind["AssertsKeyword"] = 128] = "AssertsKeyword";
+        SyntaxKind[SyntaxKind["AnyKeyword"] = 129] = "AnyKeyword";
+        SyntaxKind[SyntaxKind["AsyncKeyword"] = 130] = "AsyncKeyword";
+        SyntaxKind[SyntaxKind["AwaitKeyword"] = 131] = "AwaitKeyword";
+        SyntaxKind[SyntaxKind["BooleanKeyword"] = 132] = "BooleanKeyword";
+        SyntaxKind[SyntaxKind["ConstructorKeyword"] = 133] = "ConstructorKeyword";
+        SyntaxKind[SyntaxKind["DeclareKeyword"] = 134] = "DeclareKeyword";
+        SyntaxKind[SyntaxKind["GetKeyword"] = 135] = "GetKeyword";
+        SyntaxKind[SyntaxKind["InferKeyword"] = 136] = "InferKeyword";
+        SyntaxKind[SyntaxKind["IntrinsicKeyword"] = 137] = "IntrinsicKeyword";
+        SyntaxKind[SyntaxKind["IsKeyword"] = 138] = "IsKeyword";
+        SyntaxKind[SyntaxKind["KeyOfKeyword"] = 139] = "KeyOfKeyword";
+        SyntaxKind[SyntaxKind["ModuleKeyword"] = 140] = "ModuleKeyword";
+        SyntaxKind[SyntaxKind["NamespaceKeyword"] = 141] = "NamespaceKeyword";
+        SyntaxKind[SyntaxKind["NeverKeyword"] = 142] = "NeverKeyword";
+        SyntaxKind[SyntaxKind["ReadonlyKeyword"] = 143] = "ReadonlyKeyword";
+        SyntaxKind[SyntaxKind["RequireKeyword"] = 144] = "RequireKeyword";
+        SyntaxKind[SyntaxKind["NumberKeyword"] = 145] = "NumberKeyword";
+        SyntaxKind[SyntaxKind["ObjectKeyword"] = 146] = "ObjectKeyword";
+        SyntaxKind[SyntaxKind["SetKeyword"] = 147] = "SetKeyword";
+        SyntaxKind[SyntaxKind["StringKeyword"] = 148] = "StringKeyword";
+        SyntaxKind[SyntaxKind["SymbolKeyword"] = 149] = "SymbolKeyword";
+        SyntaxKind[SyntaxKind["TypeKeyword"] = 150] = "TypeKeyword";
+        SyntaxKind[SyntaxKind["UndefinedKeyword"] = 151] = "UndefinedKeyword";
+        SyntaxKind[SyntaxKind["UniqueKeyword"] = 152] = "UniqueKeyword";
+        SyntaxKind[SyntaxKind["UnknownKeyword"] = 153] = "UnknownKeyword";
+        SyntaxKind[SyntaxKind["FromKeyword"] = 154] = "FromKeyword";
+        SyntaxKind[SyntaxKind["GlobalKeyword"] = 155] = "GlobalKeyword";
+        SyntaxKind[SyntaxKind["BigIntKeyword"] = 156] = "BigIntKeyword";
+        SyntaxKind[SyntaxKind["OverrideKeyword"] = 157] = "OverrideKeyword";
+        SyntaxKind[SyntaxKind["OfKeyword"] = 158] = "OfKeyword";
         // Parse tree nodes
         // Names
-        SyntaxKind[SyntaxKind["QualifiedName"] = 158] = "QualifiedName";
-        SyntaxKind[SyntaxKind["ComputedPropertyName"] = 159] = "ComputedPropertyName";
+        SyntaxKind[SyntaxKind["QualifiedName"] = 159] = "QualifiedName";
+        SyntaxKind[SyntaxKind["ComputedPropertyName"] = 160] = "ComputedPropertyName";
         // Signature elements
-        SyntaxKind[SyntaxKind["TypeParameter"] = 160] = "TypeParameter";
-        SyntaxKind[SyntaxKind["Parameter"] = 161] = "Parameter";
-        SyntaxKind[SyntaxKind["Decorator"] = 162] = "Decorator";
+        SyntaxKind[SyntaxKind["TypeParameter"] = 161] = "TypeParameter";
+        SyntaxKind[SyntaxKind["Parameter"] = 162] = "Parameter";
+        SyntaxKind[SyntaxKind["Decorator"] = 163] = "Decorator";
         // TypeMember
-        SyntaxKind[SyntaxKind["PropertySignature"] = 163] = "PropertySignature";
-        SyntaxKind[SyntaxKind["PropertyDeclaration"] = 164] = "PropertyDeclaration";
-        SyntaxKind[SyntaxKind["MethodSignature"] = 165] = "MethodSignature";
-        SyntaxKind[SyntaxKind["MethodDeclaration"] = 166] = "MethodDeclaration";
-        SyntaxKind[SyntaxKind["Constructor"] = 167] = "Constructor";
-        SyntaxKind[SyntaxKind["GetAccessor"] = 168] = "GetAccessor";
-        SyntaxKind[SyntaxKind["SetAccessor"] = 169] = "SetAccessor";
-        SyntaxKind[SyntaxKind["CallSignature"] = 170] = "CallSignature";
-        SyntaxKind[SyntaxKind["ConstructSignature"] = 171] = "ConstructSignature";
-        SyntaxKind[SyntaxKind["IndexSignature"] = 172] = "IndexSignature";
+        SyntaxKind[SyntaxKind["PropertySignature"] = 164] = "PropertySignature";
+        SyntaxKind[SyntaxKind["PropertyDeclaration"] = 165] = "PropertyDeclaration";
+        SyntaxKind[SyntaxKind["MethodSignature"] = 166] = "MethodSignature";
+        SyntaxKind[SyntaxKind["MethodDeclaration"] = 167] = "MethodDeclaration";
+        SyntaxKind[SyntaxKind["ClassStaticBlockDeclaration"] = 168] = "ClassStaticBlockDeclaration";
+        SyntaxKind[SyntaxKind["Constructor"] = 169] = "Constructor";
+        SyntaxKind[SyntaxKind["GetAccessor"] = 170] = "GetAccessor";
+        SyntaxKind[SyntaxKind["SetAccessor"] = 171] = "SetAccessor";
+        SyntaxKind[SyntaxKind["CallSignature"] = 172] = "CallSignature";
+        SyntaxKind[SyntaxKind["ConstructSignature"] = 173] = "ConstructSignature";
+        SyntaxKind[SyntaxKind["IndexSignature"] = 174] = "IndexSignature";
         // Type
-        SyntaxKind[SyntaxKind["TypePredicate"] = 173] = "TypePredicate";
-        SyntaxKind[SyntaxKind["TypeReference"] = 174] = "TypeReference";
-        SyntaxKind[SyntaxKind["FunctionType"] = 175] = "FunctionType";
-        SyntaxKind[SyntaxKind["ConstructorType"] = 176] = "ConstructorType";
-        SyntaxKind[SyntaxKind["TypeQuery"] = 177] = "TypeQuery";
-        SyntaxKind[SyntaxKind["TypeLiteral"] = 178] = "TypeLiteral";
-        SyntaxKind[SyntaxKind["ArrayType"] = 179] = "ArrayType";
-        SyntaxKind[SyntaxKind["TupleType"] = 180] = "TupleType";
-        SyntaxKind[SyntaxKind["OptionalType"] = 181] = "OptionalType";
-        SyntaxKind[SyntaxKind["RestType"] = 182] = "RestType";
-        SyntaxKind[SyntaxKind["UnionType"] = 183] = "UnionType";
-        SyntaxKind[SyntaxKind["IntersectionType"] = 184] = "IntersectionType";
-        SyntaxKind[SyntaxKind["ConditionalType"] = 185] = "ConditionalType";
-        SyntaxKind[SyntaxKind["InferType"] = 186] = "InferType";
-        SyntaxKind[SyntaxKind["ParenthesizedType"] = 187] = "ParenthesizedType";
-        SyntaxKind[SyntaxKind["ThisType"] = 188] = "ThisType";
-        SyntaxKind[SyntaxKind["TypeOperator"] = 189] = "TypeOperator";
-        SyntaxKind[SyntaxKind["IndexedAccessType"] = 190] = "IndexedAccessType";
-        SyntaxKind[SyntaxKind["MappedType"] = 191] = "MappedType";
-        SyntaxKind[SyntaxKind["LiteralType"] = 192] = "LiteralType";
-        SyntaxKind[SyntaxKind["NamedTupleMember"] = 193] = "NamedTupleMember";
-        SyntaxKind[SyntaxKind["TemplateLiteralType"] = 194] = "TemplateLiteralType";
-        SyntaxKind[SyntaxKind["TemplateLiteralTypeSpan"] = 195] = "TemplateLiteralTypeSpan";
-        SyntaxKind[SyntaxKind["ImportType"] = 196] = "ImportType";
+        SyntaxKind[SyntaxKind["TypePredicate"] = 175] = "TypePredicate";
+        SyntaxKind[SyntaxKind["TypeReference"] = 176] = "TypeReference";
+        SyntaxKind[SyntaxKind["FunctionType"] = 177] = "FunctionType";
+        SyntaxKind[SyntaxKind["ConstructorType"] = 178] = "ConstructorType";
+        SyntaxKind[SyntaxKind["TypeQuery"] = 179] = "TypeQuery";
+        SyntaxKind[SyntaxKind["TypeLiteral"] = 180] = "TypeLiteral";
+        SyntaxKind[SyntaxKind["ArrayType"] = 181] = "ArrayType";
+        SyntaxKind[SyntaxKind["TupleType"] = 182] = "TupleType";
+        SyntaxKind[SyntaxKind["OptionalType"] = 183] = "OptionalType";
+        SyntaxKind[SyntaxKind["RestType"] = 184] = "RestType";
+        SyntaxKind[SyntaxKind["UnionType"] = 185] = "UnionType";
+        SyntaxKind[SyntaxKind["IntersectionType"] = 186] = "IntersectionType";
+        SyntaxKind[SyntaxKind["ConditionalType"] = 187] = "ConditionalType";
+        SyntaxKind[SyntaxKind["InferType"] = 188] = "InferType";
+        SyntaxKind[SyntaxKind["ParenthesizedType"] = 189] = "ParenthesizedType";
+        SyntaxKind[SyntaxKind["ThisType"] = 190] = "ThisType";
+        SyntaxKind[SyntaxKind["TypeOperator"] = 191] = "TypeOperator";
+        SyntaxKind[SyntaxKind["IndexedAccessType"] = 192] = "IndexedAccessType";
+        SyntaxKind[SyntaxKind["MappedType"] = 193] = "MappedType";
+        SyntaxKind[SyntaxKind["LiteralType"] = 194] = "LiteralType";
+        SyntaxKind[SyntaxKind["NamedTupleMember"] = 195] = "NamedTupleMember";
+        SyntaxKind[SyntaxKind["TemplateLiteralType"] = 196] = "TemplateLiteralType";
+        SyntaxKind[SyntaxKind["TemplateLiteralTypeSpan"] = 197] = "TemplateLiteralTypeSpan";
+        SyntaxKind[SyntaxKind["ImportType"] = 198] = "ImportType";
         // Binding patterns
-        SyntaxKind[SyntaxKind["ObjectBindingPattern"] = 197] = "ObjectBindingPattern";
-        SyntaxKind[SyntaxKind["ArrayBindingPattern"] = 198] = "ArrayBindingPattern";
-        SyntaxKind[SyntaxKind["BindingElement"] = 199] = "BindingElement";
+        SyntaxKind[SyntaxKind["ObjectBindingPattern"] = 199] = "ObjectBindingPattern";
+        SyntaxKind[SyntaxKind["ArrayBindingPattern"] = 200] = "ArrayBindingPattern";
+        SyntaxKind[SyntaxKind["BindingElement"] = 201] = "BindingElement";
         // Expression
-        SyntaxKind[SyntaxKind["ArrayLiteralExpression"] = 200] = "ArrayLiteralExpression";
-        SyntaxKind[SyntaxKind["ObjectLiteralExpression"] = 201] = "ObjectLiteralExpression";
-        SyntaxKind[SyntaxKind["PropertyAccessExpression"] = 202] = "PropertyAccessExpression";
-        SyntaxKind[SyntaxKind["ElementAccessExpression"] = 203] = "ElementAccessExpression";
-        SyntaxKind[SyntaxKind["CallExpression"] = 204] = "CallExpression";
-        SyntaxKind[SyntaxKind["NewExpression"] = 205] = "NewExpression";
-        SyntaxKind[SyntaxKind["TaggedTemplateExpression"] = 206] = "TaggedTemplateExpression";
-        SyntaxKind[SyntaxKind["TypeAssertionExpression"] = 207] = "TypeAssertionExpression";
-        SyntaxKind[SyntaxKind["ParenthesizedExpression"] = 208] = "ParenthesizedExpression";
-        SyntaxKind[SyntaxKind["FunctionExpression"] = 209] = "FunctionExpression";
-        SyntaxKind[SyntaxKind["ArrowFunction"] = 210] = "ArrowFunction";
-        SyntaxKind[SyntaxKind["DeleteExpression"] = 211] = "DeleteExpression";
-        SyntaxKind[SyntaxKind["TypeOfExpression"] = 212] = "TypeOfExpression";
-        SyntaxKind[SyntaxKind["VoidExpression"] = 213] = "VoidExpression";
-        SyntaxKind[SyntaxKind["AwaitExpression"] = 214] = "AwaitExpression";
-        SyntaxKind[SyntaxKind["PrefixUnaryExpression"] = 215] = "PrefixUnaryExpression";
-        SyntaxKind[SyntaxKind["PostfixUnaryExpression"] = 216] = "PostfixUnaryExpression";
-        SyntaxKind[SyntaxKind["BinaryExpression"] = 217] = "BinaryExpression";
-        SyntaxKind[SyntaxKind["ConditionalExpression"] = 218] = "ConditionalExpression";
-        SyntaxKind[SyntaxKind["TemplateExpression"] = 219] = "TemplateExpression";
-        SyntaxKind[SyntaxKind["YieldExpression"] = 220] = "YieldExpression";
-        SyntaxKind[SyntaxKind["SpreadElement"] = 221] = "SpreadElement";
-        SyntaxKind[SyntaxKind["ClassExpression"] = 222] = "ClassExpression";
-        SyntaxKind[SyntaxKind["OmittedExpression"] = 223] = "OmittedExpression";
-        SyntaxKind[SyntaxKind["ExpressionWithTypeArguments"] = 224] = "ExpressionWithTypeArguments";
-        SyntaxKind[SyntaxKind["AsExpression"] = 225] = "AsExpression";
-        SyntaxKind[SyntaxKind["NonNullExpression"] = 226] = "NonNullExpression";
-        SyntaxKind[SyntaxKind["MetaProperty"] = 227] = "MetaProperty";
-        SyntaxKind[SyntaxKind["SyntheticExpression"] = 228] = "SyntheticExpression";
+        SyntaxKind[SyntaxKind["ArrayLiteralExpression"] = 202] = "ArrayLiteralExpression";
+        SyntaxKind[SyntaxKind["ObjectLiteralExpression"] = 203] = "ObjectLiteralExpression";
+        SyntaxKind[SyntaxKind["PropertyAccessExpression"] = 204] = "PropertyAccessExpression";
+        SyntaxKind[SyntaxKind["ElementAccessExpression"] = 205] = "ElementAccessExpression";
+        SyntaxKind[SyntaxKind["CallExpression"] = 206] = "CallExpression";
+        SyntaxKind[SyntaxKind["NewExpression"] = 207] = "NewExpression";
+        SyntaxKind[SyntaxKind["TaggedTemplateExpression"] = 208] = "TaggedTemplateExpression";
+        SyntaxKind[SyntaxKind["TypeAssertionExpression"] = 209] = "TypeAssertionExpression";
+        SyntaxKind[SyntaxKind["ParenthesizedExpression"] = 210] = "ParenthesizedExpression";
+        SyntaxKind[SyntaxKind["FunctionExpression"] = 211] = "FunctionExpression";
+        SyntaxKind[SyntaxKind["ArrowFunction"] = 212] = "ArrowFunction";
+        SyntaxKind[SyntaxKind["DeleteExpression"] = 213] = "DeleteExpression";
+        SyntaxKind[SyntaxKind["TypeOfExpression"] = 214] = "TypeOfExpression";
+        SyntaxKind[SyntaxKind["VoidExpression"] = 215] = "VoidExpression";
+        SyntaxKind[SyntaxKind["AwaitExpression"] = 216] = "AwaitExpression";
+        SyntaxKind[SyntaxKind["PrefixUnaryExpression"] = 217] = "PrefixUnaryExpression";
+        SyntaxKind[SyntaxKind["PostfixUnaryExpression"] = 218] = "PostfixUnaryExpression";
+        SyntaxKind[SyntaxKind["BinaryExpression"] = 219] = "BinaryExpression";
+        SyntaxKind[SyntaxKind["ConditionalExpression"] = 220] = "ConditionalExpression";
+        SyntaxKind[SyntaxKind["TemplateExpression"] = 221] = "TemplateExpression";
+        SyntaxKind[SyntaxKind["YieldExpression"] = 222] = "YieldExpression";
+        SyntaxKind[SyntaxKind["SpreadElement"] = 223] = "SpreadElement";
+        SyntaxKind[SyntaxKind["ClassExpression"] = 224] = "ClassExpression";
+        SyntaxKind[SyntaxKind["OmittedExpression"] = 225] = "OmittedExpression";
+        SyntaxKind[SyntaxKind["ExpressionWithTypeArguments"] = 226] = "ExpressionWithTypeArguments";
+        SyntaxKind[SyntaxKind["AsExpression"] = 227] = "AsExpression";
+        SyntaxKind[SyntaxKind["NonNullExpression"] = 228] = "NonNullExpression";
+        SyntaxKind[SyntaxKind["MetaProperty"] = 229] = "MetaProperty";
+        SyntaxKind[SyntaxKind["SyntheticExpression"] = 230] = "SyntheticExpression";
         // Misc
-        SyntaxKind[SyntaxKind["TemplateSpan"] = 229] = "TemplateSpan";
-        SyntaxKind[SyntaxKind["SemicolonClassElement"] = 230] = "SemicolonClassElement";
+        SyntaxKind[SyntaxKind["TemplateSpan"] = 231] = "TemplateSpan";
+        SyntaxKind[SyntaxKind["SemicolonClassElement"] = 232] = "SemicolonClassElement";
         // Element
-        SyntaxKind[SyntaxKind["Block"] = 231] = "Block";
-        SyntaxKind[SyntaxKind["EmptyStatement"] = 232] = "EmptyStatement";
-        SyntaxKind[SyntaxKind["VariableStatement"] = 233] = "VariableStatement";
-        SyntaxKind[SyntaxKind["ExpressionStatement"] = 234] = "ExpressionStatement";
-        SyntaxKind[SyntaxKind["IfStatement"] = 235] = "IfStatement";
-        SyntaxKind[SyntaxKind["DoStatement"] = 236] = "DoStatement";
-        SyntaxKind[SyntaxKind["WhileStatement"] = 237] = "WhileStatement";
-        SyntaxKind[SyntaxKind["ForStatement"] = 238] = "ForStatement";
-        SyntaxKind[SyntaxKind["ForInStatement"] = 239] = "ForInStatement";
-        SyntaxKind[SyntaxKind["ForOfStatement"] = 240] = "ForOfStatement";
-        SyntaxKind[SyntaxKind["ContinueStatement"] = 241] = "ContinueStatement";
-        SyntaxKind[SyntaxKind["BreakStatement"] = 242] = "BreakStatement";
-        SyntaxKind[SyntaxKind["ReturnStatement"] = 243] = "ReturnStatement";
-        SyntaxKind[SyntaxKind["WithStatement"] = 244] = "WithStatement";
-        SyntaxKind[SyntaxKind["SwitchStatement"] = 245] = "SwitchStatement";
-        SyntaxKind[SyntaxKind["LabeledStatement"] = 246] = "LabeledStatement";
-        SyntaxKind[SyntaxKind["ThrowStatement"] = 247] = "ThrowStatement";
-        SyntaxKind[SyntaxKind["TryStatement"] = 248] = "TryStatement";
-        SyntaxKind[SyntaxKind["DebuggerStatement"] = 249] = "DebuggerStatement";
-        SyntaxKind[SyntaxKind["VariableDeclaration"] = 250] = "VariableDeclaration";
-        SyntaxKind[SyntaxKind["VariableDeclarationList"] = 251] = "VariableDeclarationList";
-        SyntaxKind[SyntaxKind["FunctionDeclaration"] = 252] = "FunctionDeclaration";
-        SyntaxKind[SyntaxKind["ClassDeclaration"] = 253] = "ClassDeclaration";
-        SyntaxKind[SyntaxKind["InterfaceDeclaration"] = 254] = "InterfaceDeclaration";
-        SyntaxKind[SyntaxKind["TypeAliasDeclaration"] = 255] = "TypeAliasDeclaration";
-        SyntaxKind[SyntaxKind["EnumDeclaration"] = 256] = "EnumDeclaration";
-        SyntaxKind[SyntaxKind["ModuleDeclaration"] = 257] = "ModuleDeclaration";
-        SyntaxKind[SyntaxKind["ModuleBlock"] = 258] = "ModuleBlock";
-        SyntaxKind[SyntaxKind["CaseBlock"] = 259] = "CaseBlock";
-        SyntaxKind[SyntaxKind["NamespaceExportDeclaration"] = 260] = "NamespaceExportDeclaration";
-        SyntaxKind[SyntaxKind["ImportEqualsDeclaration"] = 261] = "ImportEqualsDeclaration";
-        SyntaxKind[SyntaxKind["ImportDeclaration"] = 262] = "ImportDeclaration";
-        SyntaxKind[SyntaxKind["ImportClause"] = 263] = "ImportClause";
-        SyntaxKind[SyntaxKind["NamespaceImport"] = 264] = "NamespaceImport";
-        SyntaxKind[SyntaxKind["NamedImports"] = 265] = "NamedImports";
-        SyntaxKind[SyntaxKind["ImportSpecifier"] = 266] = "ImportSpecifier";
-        SyntaxKind[SyntaxKind["ExportAssignment"] = 267] = "ExportAssignment";
-        SyntaxKind[SyntaxKind["ExportDeclaration"] = 268] = "ExportDeclaration";
-        SyntaxKind[SyntaxKind["NamedExports"] = 269] = "NamedExports";
-        SyntaxKind[SyntaxKind["NamespaceExport"] = 270] = "NamespaceExport";
-        SyntaxKind[SyntaxKind["ExportSpecifier"] = 271] = "ExportSpecifier";
-        SyntaxKind[SyntaxKind["MissingDeclaration"] = 272] = "MissingDeclaration";
+        SyntaxKind[SyntaxKind["Block"] = 233] = "Block";
+        SyntaxKind[SyntaxKind["EmptyStatement"] = 234] = "EmptyStatement";
+        SyntaxKind[SyntaxKind["VariableStatement"] = 235] = "VariableStatement";
+        SyntaxKind[SyntaxKind["ExpressionStatement"] = 236] = "ExpressionStatement";
+        SyntaxKind[SyntaxKind["IfStatement"] = 237] = "IfStatement";
+        SyntaxKind[SyntaxKind["DoStatement"] = 238] = "DoStatement";
+        SyntaxKind[SyntaxKind["WhileStatement"] = 239] = "WhileStatement";
+        SyntaxKind[SyntaxKind["ForStatement"] = 240] = "ForStatement";
+        SyntaxKind[SyntaxKind["ForInStatement"] = 241] = "ForInStatement";
+        SyntaxKind[SyntaxKind["ForOfStatement"] = 242] = "ForOfStatement";
+        SyntaxKind[SyntaxKind["ContinueStatement"] = 243] = "ContinueStatement";
+        SyntaxKind[SyntaxKind["BreakStatement"] = 244] = "BreakStatement";
+        SyntaxKind[SyntaxKind["ReturnStatement"] = 245] = "ReturnStatement";
+        SyntaxKind[SyntaxKind["WithStatement"] = 246] = "WithStatement";
+        SyntaxKind[SyntaxKind["SwitchStatement"] = 247] = "SwitchStatement";
+        SyntaxKind[SyntaxKind["LabeledStatement"] = 248] = "LabeledStatement";
+        SyntaxKind[SyntaxKind["ThrowStatement"] = 249] = "ThrowStatement";
+        SyntaxKind[SyntaxKind["TryStatement"] = 250] = "TryStatement";
+        SyntaxKind[SyntaxKind["DebuggerStatement"] = 251] = "DebuggerStatement";
+        SyntaxKind[SyntaxKind["VariableDeclaration"] = 252] = "VariableDeclaration";
+        SyntaxKind[SyntaxKind["VariableDeclarationList"] = 253] = "VariableDeclarationList";
+        SyntaxKind[SyntaxKind["FunctionDeclaration"] = 254] = "FunctionDeclaration";
+        SyntaxKind[SyntaxKind["ClassDeclaration"] = 255] = "ClassDeclaration";
+        SyntaxKind[SyntaxKind["InterfaceDeclaration"] = 256] = "InterfaceDeclaration";
+        SyntaxKind[SyntaxKind["TypeAliasDeclaration"] = 257] = "TypeAliasDeclaration";
+        SyntaxKind[SyntaxKind["EnumDeclaration"] = 258] = "EnumDeclaration";
+        SyntaxKind[SyntaxKind["ModuleDeclaration"] = 259] = "ModuleDeclaration";
+        SyntaxKind[SyntaxKind["ModuleBlock"] = 260] = "ModuleBlock";
+        SyntaxKind[SyntaxKind["CaseBlock"] = 261] = "CaseBlock";
+        SyntaxKind[SyntaxKind["NamespaceExportDeclaration"] = 262] = "NamespaceExportDeclaration";
+        SyntaxKind[SyntaxKind["ImportEqualsDeclaration"] = 263] = "ImportEqualsDeclaration";
+        SyntaxKind[SyntaxKind["ImportDeclaration"] = 264] = "ImportDeclaration";
+        SyntaxKind[SyntaxKind["ImportClause"] = 265] = "ImportClause";
+        SyntaxKind[SyntaxKind["NamespaceImport"] = 266] = "NamespaceImport";
+        SyntaxKind[SyntaxKind["NamedImports"] = 267] = "NamedImports";
+        SyntaxKind[SyntaxKind["ImportSpecifier"] = 268] = "ImportSpecifier";
+        SyntaxKind[SyntaxKind["ExportAssignment"] = 269] = "ExportAssignment";
+        SyntaxKind[SyntaxKind["ExportDeclaration"] = 270] = "ExportDeclaration";
+        SyntaxKind[SyntaxKind["NamedExports"] = 271] = "NamedExports";
+        SyntaxKind[SyntaxKind["NamespaceExport"] = 272] = "NamespaceExport";
+        SyntaxKind[SyntaxKind["ExportSpecifier"] = 273] = "ExportSpecifier";
+        SyntaxKind[SyntaxKind["MissingDeclaration"] = 274] = "MissingDeclaration";
         // Module references
-        SyntaxKind[SyntaxKind["ExternalModuleReference"] = 273] = "ExternalModuleReference";
+        SyntaxKind[SyntaxKind["ExternalModuleReference"] = 275] = "ExternalModuleReference";
         // JSX
-        SyntaxKind[SyntaxKind["JsxElement"] = 274] = "JsxElement";
-        SyntaxKind[SyntaxKind["JsxSelfClosingElement"] = 275] = "JsxSelfClosingElement";
-        SyntaxKind[SyntaxKind["JsxOpeningElement"] = 276] = "JsxOpeningElement";
-        SyntaxKind[SyntaxKind["JsxClosingElement"] = 277] = "JsxClosingElement";
-        SyntaxKind[SyntaxKind["JsxFragment"] = 278] = "JsxFragment";
-        SyntaxKind[SyntaxKind["JsxOpeningFragment"] = 279] = "JsxOpeningFragment";
-        SyntaxKind[SyntaxKind["JsxClosingFragment"] = 280] = "JsxClosingFragment";
-        SyntaxKind[SyntaxKind["JsxAttribute"] = 281] = "JsxAttribute";
-        SyntaxKind[SyntaxKind["JsxAttributes"] = 282] = "JsxAttributes";
-        SyntaxKind[SyntaxKind["JsxSpreadAttribute"] = 283] = "JsxSpreadAttribute";
-        SyntaxKind[SyntaxKind["JsxExpression"] = 284] = "JsxExpression";
+        SyntaxKind[SyntaxKind["JsxElement"] = 276] = "JsxElement";
+        SyntaxKind[SyntaxKind["JsxSelfClosingElement"] = 277] = "JsxSelfClosingElement";
+        SyntaxKind[SyntaxKind["JsxOpeningElement"] = 278] = "JsxOpeningElement";
+        SyntaxKind[SyntaxKind["JsxClosingElement"] = 279] = "JsxClosingElement";
+        SyntaxKind[SyntaxKind["JsxFragment"] = 280] = "JsxFragment";
+        SyntaxKind[SyntaxKind["JsxOpeningFragment"] = 281] = "JsxOpeningFragment";
+        SyntaxKind[SyntaxKind["JsxClosingFragment"] = 282] = "JsxClosingFragment";
+        SyntaxKind[SyntaxKind["JsxAttribute"] = 283] = "JsxAttribute";
+        SyntaxKind[SyntaxKind["JsxAttributes"] = 284] = "JsxAttributes";
+        SyntaxKind[SyntaxKind["JsxSpreadAttribute"] = 285] = "JsxSpreadAttribute";
+        SyntaxKind[SyntaxKind["JsxExpression"] = 286] = "JsxExpression";
         // Clauses
-        SyntaxKind[SyntaxKind["CaseClause"] = 285] = "CaseClause";
-        SyntaxKind[SyntaxKind["DefaultClause"] = 286] = "DefaultClause";
-        SyntaxKind[SyntaxKind["HeritageClause"] = 287] = "HeritageClause";
-        SyntaxKind[SyntaxKind["CatchClause"] = 288] = "CatchClause";
+        SyntaxKind[SyntaxKind["CaseClause"] = 287] = "CaseClause";
+        SyntaxKind[SyntaxKind["DefaultClause"] = 288] = "DefaultClause";
+        SyntaxKind[SyntaxKind["HeritageClause"] = 289] = "HeritageClause";
+        SyntaxKind[SyntaxKind["CatchClause"] = 290] = "CatchClause";
         // Property assignments
-        SyntaxKind[SyntaxKind["PropertyAssignment"] = 289] = "PropertyAssignment";
-        SyntaxKind[SyntaxKind["ShorthandPropertyAssignment"] = 290] = "ShorthandPropertyAssignment";
-        SyntaxKind[SyntaxKind["SpreadAssignment"] = 291] = "SpreadAssignment";
+        SyntaxKind[SyntaxKind["PropertyAssignment"] = 291] = "PropertyAssignment";
+        SyntaxKind[SyntaxKind["ShorthandPropertyAssignment"] = 292] = "ShorthandPropertyAssignment";
+        SyntaxKind[SyntaxKind["SpreadAssignment"] = 293] = "SpreadAssignment";
         // Enum
-        SyntaxKind[SyntaxKind["EnumMember"] = 292] = "EnumMember";
+        SyntaxKind[SyntaxKind["EnumMember"] = 294] = "EnumMember";
         // Unparsed
-        SyntaxKind[SyntaxKind["UnparsedPrologue"] = 293] = "UnparsedPrologue";
-        SyntaxKind[SyntaxKind["UnparsedPrepend"] = 294] = "UnparsedPrepend";
-        SyntaxKind[SyntaxKind["UnparsedText"] = 295] = "UnparsedText";
-        SyntaxKind[SyntaxKind["UnparsedInternalText"] = 296] = "UnparsedInternalText";
-        SyntaxKind[SyntaxKind["UnparsedSyntheticReference"] = 297] = "UnparsedSyntheticReference";
+        SyntaxKind[SyntaxKind["UnparsedPrologue"] = 295] = "UnparsedPrologue";
+        SyntaxKind[SyntaxKind["UnparsedPrepend"] = 296] = "UnparsedPrepend";
+        SyntaxKind[SyntaxKind["UnparsedText"] = 297] = "UnparsedText";
+        SyntaxKind[SyntaxKind["UnparsedInternalText"] = 298] = "UnparsedInternalText";
+        SyntaxKind[SyntaxKind["UnparsedSyntheticReference"] = 299] = "UnparsedSyntheticReference";
         // Top-level nodes
-        SyntaxKind[SyntaxKind["SourceFile"] = 298] = "SourceFile";
-        SyntaxKind[SyntaxKind["Bundle"] = 299] = "Bundle";
-        SyntaxKind[SyntaxKind["UnparsedSource"] = 300] = "UnparsedSource";
-        SyntaxKind[SyntaxKind["InputFiles"] = 301] = "InputFiles";
+        SyntaxKind[SyntaxKind["SourceFile"] = 300] = "SourceFile";
+        SyntaxKind[SyntaxKind["Bundle"] = 301] = "Bundle";
+        SyntaxKind[SyntaxKind["UnparsedSource"] = 302] = "UnparsedSource";
+        SyntaxKind[SyntaxKind["InputFiles"] = 303] = "InputFiles";
         // JSDoc nodes
-        SyntaxKind[SyntaxKind["JSDocTypeExpression"] = 302] = "JSDocTypeExpression";
-        SyntaxKind[SyntaxKind["JSDocNameReference"] = 303] = "JSDocNameReference";
-        SyntaxKind[SyntaxKind["JSDocAllType"] = 304] = "JSDocAllType";
-        SyntaxKind[SyntaxKind["JSDocUnknownType"] = 305] = "JSDocUnknownType";
-        SyntaxKind[SyntaxKind["JSDocNullableType"] = 306] = "JSDocNullableType";
-        SyntaxKind[SyntaxKind["JSDocNonNullableType"] = 307] = "JSDocNonNullableType";
-        SyntaxKind[SyntaxKind["JSDocOptionalType"] = 308] = "JSDocOptionalType";
-        SyntaxKind[SyntaxKind["JSDocFunctionType"] = 309] = "JSDocFunctionType";
-        SyntaxKind[SyntaxKind["JSDocVariadicType"] = 310] = "JSDocVariadicType";
-        SyntaxKind[SyntaxKind["JSDocNamepathType"] = 311] = "JSDocNamepathType";
-        SyntaxKind[SyntaxKind["JSDocComment"] = 312] = "JSDocComment";
-        SyntaxKind[SyntaxKind["JSDocText"] = 313] = "JSDocText";
-        SyntaxKind[SyntaxKind["JSDocTypeLiteral"] = 314] = "JSDocTypeLiteral";
-        SyntaxKind[SyntaxKind["JSDocSignature"] = 315] = "JSDocSignature";
-        SyntaxKind[SyntaxKind["JSDocLink"] = 316] = "JSDocLink";
-        SyntaxKind[SyntaxKind["JSDocTag"] = 317] = "JSDocTag";
-        SyntaxKind[SyntaxKind["JSDocAugmentsTag"] = 318] = "JSDocAugmentsTag";
-        SyntaxKind[SyntaxKind["JSDocImplementsTag"] = 319] = "JSDocImplementsTag";
-        SyntaxKind[SyntaxKind["JSDocAuthorTag"] = 320] = "JSDocAuthorTag";
-        SyntaxKind[SyntaxKind["JSDocDeprecatedTag"] = 321] = "JSDocDeprecatedTag";
-        SyntaxKind[SyntaxKind["JSDocClassTag"] = 322] = "JSDocClassTag";
-        SyntaxKind[SyntaxKind["JSDocPublicTag"] = 323] = "JSDocPublicTag";
-        SyntaxKind[SyntaxKind["JSDocPrivateTag"] = 324] = "JSDocPrivateTag";
-        SyntaxKind[SyntaxKind["JSDocProtectedTag"] = 325] = "JSDocProtectedTag";
-        SyntaxKind[SyntaxKind["JSDocReadonlyTag"] = 326] = "JSDocReadonlyTag";
-        SyntaxKind[SyntaxKind["JSDocOverrideTag"] = 327] = "JSDocOverrideTag";
-        SyntaxKind[SyntaxKind["JSDocCallbackTag"] = 328] = "JSDocCallbackTag";
-        SyntaxKind[SyntaxKind["JSDocEnumTag"] = 329] = "JSDocEnumTag";
-        SyntaxKind[SyntaxKind["JSDocParameterTag"] = 330] = "JSDocParameterTag";
-        SyntaxKind[SyntaxKind["JSDocReturnTag"] = 331] = "JSDocReturnTag";
-        SyntaxKind[SyntaxKind["JSDocThisTag"] = 332] = "JSDocThisTag";
-        SyntaxKind[SyntaxKind["JSDocTypeTag"] = 333] = "JSDocTypeTag";
-        SyntaxKind[SyntaxKind["JSDocTemplateTag"] = 334] = "JSDocTemplateTag";
-        SyntaxKind[SyntaxKind["JSDocTypedefTag"] = 335] = "JSDocTypedefTag";
-        SyntaxKind[SyntaxKind["JSDocSeeTag"] = 336] = "JSDocSeeTag";
-        SyntaxKind[SyntaxKind["JSDocPropertyTag"] = 337] = "JSDocPropertyTag";
+        SyntaxKind[SyntaxKind["JSDocTypeExpression"] = 304] = "JSDocTypeExpression";
+        SyntaxKind[SyntaxKind["JSDocNameReference"] = 305] = "JSDocNameReference";
+        SyntaxKind[SyntaxKind["JSDocMemberName"] = 306] = "JSDocMemberName";
+        SyntaxKind[SyntaxKind["JSDocAllType"] = 307] = "JSDocAllType";
+        SyntaxKind[SyntaxKind["JSDocUnknownType"] = 308] = "JSDocUnknownType";
+        SyntaxKind[SyntaxKind["JSDocNullableType"] = 309] = "JSDocNullableType";
+        SyntaxKind[SyntaxKind["JSDocNonNullableType"] = 310] = "JSDocNonNullableType";
+        SyntaxKind[SyntaxKind["JSDocOptionalType"] = 311] = "JSDocOptionalType";
+        SyntaxKind[SyntaxKind["JSDocFunctionType"] = 312] = "JSDocFunctionType";
+        SyntaxKind[SyntaxKind["JSDocVariadicType"] = 313] = "JSDocVariadicType";
+        SyntaxKind[SyntaxKind["JSDocNamepathType"] = 314] = "JSDocNamepathType";
+        SyntaxKind[SyntaxKind["JSDocComment"] = 315] = "JSDocComment";
+        SyntaxKind[SyntaxKind["JSDocText"] = 316] = "JSDocText";
+        SyntaxKind[SyntaxKind["JSDocTypeLiteral"] = 317] = "JSDocTypeLiteral";
+        SyntaxKind[SyntaxKind["JSDocSignature"] = 318] = "JSDocSignature";
+        SyntaxKind[SyntaxKind["JSDocLink"] = 319] = "JSDocLink";
+        SyntaxKind[SyntaxKind["JSDocLinkCode"] = 320] = "JSDocLinkCode";
+        SyntaxKind[SyntaxKind["JSDocLinkPlain"] = 321] = "JSDocLinkPlain";
+        SyntaxKind[SyntaxKind["JSDocTag"] = 322] = "JSDocTag";
+        SyntaxKind[SyntaxKind["JSDocAugmentsTag"] = 323] = "JSDocAugmentsTag";
+        SyntaxKind[SyntaxKind["JSDocImplementsTag"] = 324] = "JSDocImplementsTag";
+        SyntaxKind[SyntaxKind["JSDocAuthorTag"] = 325] = "JSDocAuthorTag";
+        SyntaxKind[SyntaxKind["JSDocDeprecatedTag"] = 326] = "JSDocDeprecatedTag";
+        SyntaxKind[SyntaxKind["JSDocClassTag"] = 327] = "JSDocClassTag";
+        SyntaxKind[SyntaxKind["JSDocPublicTag"] = 328] = "JSDocPublicTag";
+        SyntaxKind[SyntaxKind["JSDocPrivateTag"] = 329] = "JSDocPrivateTag";
+        SyntaxKind[SyntaxKind["JSDocProtectedTag"] = 330] = "JSDocProtectedTag";
+        SyntaxKind[SyntaxKind["JSDocReadonlyTag"] = 331] = "JSDocReadonlyTag";
+        SyntaxKind[SyntaxKind["JSDocOverrideTag"] = 332] = "JSDocOverrideTag";
+        SyntaxKind[SyntaxKind["JSDocCallbackTag"] = 333] = "JSDocCallbackTag";
+        SyntaxKind[SyntaxKind["JSDocEnumTag"] = 334] = "JSDocEnumTag";
+        SyntaxKind[SyntaxKind["JSDocParameterTag"] = 335] = "JSDocParameterTag";
+        SyntaxKind[SyntaxKind["JSDocReturnTag"] = 336] = "JSDocReturnTag";
+        SyntaxKind[SyntaxKind["JSDocThisTag"] = 337] = "JSDocThisTag";
+        SyntaxKind[SyntaxKind["JSDocTypeTag"] = 338] = "JSDocTypeTag";
+        SyntaxKind[SyntaxKind["JSDocTemplateTag"] = 339] = "JSDocTemplateTag";
+        SyntaxKind[SyntaxKind["JSDocTypedefTag"] = 340] = "JSDocTypedefTag";
+        SyntaxKind[SyntaxKind["JSDocSeeTag"] = 341] = "JSDocSeeTag";
+        SyntaxKind[SyntaxKind["JSDocPropertyTag"] = 342] = "JSDocPropertyTag";
         // Synthesized list
-        SyntaxKind[SyntaxKind["SyntaxList"] = 338] = "SyntaxList";
+        SyntaxKind[SyntaxKind["SyntaxList"] = 343] = "SyntaxList";
         // Transformation nodes
-        SyntaxKind[SyntaxKind["NotEmittedStatement"] = 339] = "NotEmittedStatement";
-        SyntaxKind[SyntaxKind["PartiallyEmittedExpression"] = 340] = "PartiallyEmittedExpression";
-        SyntaxKind[SyntaxKind["CommaListExpression"] = 341] = "CommaListExpression";
-        SyntaxKind[SyntaxKind["MergeDeclarationMarker"] = 342] = "MergeDeclarationMarker";
-        SyntaxKind[SyntaxKind["EndOfDeclarationMarker"] = 343] = "EndOfDeclarationMarker";
-        SyntaxKind[SyntaxKind["SyntheticReferenceExpression"] = 344] = "SyntheticReferenceExpression";
+        SyntaxKind[SyntaxKind["NotEmittedStatement"] = 344] = "NotEmittedStatement";
+        SyntaxKind[SyntaxKind["PartiallyEmittedExpression"] = 345] = "PartiallyEmittedExpression";
+        SyntaxKind[SyntaxKind["CommaListExpression"] = 346] = "CommaListExpression";
+        SyntaxKind[SyntaxKind["MergeDeclarationMarker"] = 347] = "MergeDeclarationMarker";
+        SyntaxKind[SyntaxKind["EndOfDeclarationMarker"] = 348] = "EndOfDeclarationMarker";
+        SyntaxKind[SyntaxKind["SyntheticReferenceExpression"] = 349] = "SyntheticReferenceExpression";
         // Enum value count
-        SyntaxKind[SyntaxKind["Count"] = 345] = "Count";
+        SyntaxKind[SyntaxKind["Count"] = 350] = "Count";
         // Markers
-        SyntaxKind[SyntaxKind["FirstAssignment"] = 62] = "FirstAssignment";
-        SyntaxKind[SyntaxKind["LastAssignment"] = 77] = "LastAssignment";
-        SyntaxKind[SyntaxKind["FirstCompoundAssignment"] = 63] = "FirstCompoundAssignment";
-        SyntaxKind[SyntaxKind["LastCompoundAssignment"] = 77] = "LastCompoundAssignment";
-        SyntaxKind[SyntaxKind["FirstReservedWord"] = 80] = "FirstReservedWord";
-        SyntaxKind[SyntaxKind["LastReservedWord"] = 115] = "LastReservedWord";
-        SyntaxKind[SyntaxKind["FirstKeyword"] = 80] = "FirstKeyword";
-        SyntaxKind[SyntaxKind["LastKeyword"] = 157] = "LastKeyword";
-        SyntaxKind[SyntaxKind["FirstFutureReservedWord"] = 116] = "FirstFutureReservedWord";
-        SyntaxKind[SyntaxKind["LastFutureReservedWord"] = 124] = "LastFutureReservedWord";
-        SyntaxKind[SyntaxKind["FirstTypeNode"] = 173] = "FirstTypeNode";
-        SyntaxKind[SyntaxKind["LastTypeNode"] = 196] = "LastTypeNode";
+        SyntaxKind[SyntaxKind["FirstAssignment"] = 63] = "FirstAssignment";
+        SyntaxKind[SyntaxKind["LastAssignment"] = 78] = "LastAssignment";
+        SyntaxKind[SyntaxKind["FirstCompoundAssignment"] = 64] = "FirstCompoundAssignment";
+        SyntaxKind[SyntaxKind["LastCompoundAssignment"] = 78] = "LastCompoundAssignment";
+        SyntaxKind[SyntaxKind["FirstReservedWord"] = 81] = "FirstReservedWord";
+        SyntaxKind[SyntaxKind["LastReservedWord"] = 116] = "LastReservedWord";
+        SyntaxKind[SyntaxKind["FirstKeyword"] = 81] = "FirstKeyword";
+        SyntaxKind[SyntaxKind["LastKeyword"] = 158] = "LastKeyword";
+        SyntaxKind[SyntaxKind["FirstFutureReservedWord"] = 117] = "FirstFutureReservedWord";
+        SyntaxKind[SyntaxKind["LastFutureReservedWord"] = 125] = "LastFutureReservedWord";
+        SyntaxKind[SyntaxKind["FirstTypeNode"] = 175] = "FirstTypeNode";
+        SyntaxKind[SyntaxKind["LastTypeNode"] = 198] = "LastTypeNode";
         SyntaxKind[SyntaxKind["FirstPunctuation"] = 18] = "FirstPunctuation";
-        SyntaxKind[SyntaxKind["LastPunctuation"] = 77] = "LastPunctuation";
+        SyntaxKind[SyntaxKind["LastPunctuation"] = 78] = "LastPunctuation";
         SyntaxKind[SyntaxKind["FirstToken"] = 0] = "FirstToken";
-        SyntaxKind[SyntaxKind["LastToken"] = 157] = "LastToken";
+        SyntaxKind[SyntaxKind["LastToken"] = 158] = "LastToken";
         SyntaxKind[SyntaxKind["FirstTriviaToken"] = 2] = "FirstTriviaToken";
         SyntaxKind[SyntaxKind["LastTriviaToken"] = 7] = "LastTriviaToken";
         SyntaxKind[SyntaxKind["FirstLiteralToken"] = 8] = "FirstLiteralToken";
@@ -4146,16 +4223,16 @@
         SyntaxKind[SyntaxKind["FirstTemplateToken"] = 14] = "FirstTemplateToken";
         SyntaxKind[SyntaxKind["LastTemplateToken"] = 17] = "LastTemplateToken";
         SyntaxKind[SyntaxKind["FirstBinaryOperator"] = 29] = "FirstBinaryOperator";
-        SyntaxKind[SyntaxKind["LastBinaryOperator"] = 77] = "LastBinaryOperator";
-        SyntaxKind[SyntaxKind["FirstStatement"] = 233] = "FirstStatement";
-        SyntaxKind[SyntaxKind["LastStatement"] = 249] = "LastStatement";
-        SyntaxKind[SyntaxKind["FirstNode"] = 158] = "FirstNode";
-        SyntaxKind[SyntaxKind["FirstJSDocNode"] = 302] = "FirstJSDocNode";
-        SyntaxKind[SyntaxKind["LastJSDocNode"] = 337] = "LastJSDocNode";
-        SyntaxKind[SyntaxKind["FirstJSDocTagNode"] = 317] = "FirstJSDocTagNode";
-        SyntaxKind[SyntaxKind["LastJSDocTagNode"] = 337] = "LastJSDocTagNode";
-        /* @internal */ SyntaxKind[SyntaxKind["FirstContextualKeyword"] = 125] = "FirstContextualKeyword";
-        /* @internal */ SyntaxKind[SyntaxKind["LastContextualKeyword"] = 157] = "LastContextualKeyword";
+        SyntaxKind[SyntaxKind["LastBinaryOperator"] = 78] = "LastBinaryOperator";
+        SyntaxKind[SyntaxKind["FirstStatement"] = 235] = "FirstStatement";
+        SyntaxKind[SyntaxKind["LastStatement"] = 251] = "LastStatement";
+        SyntaxKind[SyntaxKind["FirstNode"] = 159] = "FirstNode";
+        SyntaxKind[SyntaxKind["FirstJSDocNode"] = 304] = "FirstJSDocNode";
+        SyntaxKind[SyntaxKind["LastJSDocNode"] = 342] = "LastJSDocNode";
+        SyntaxKind[SyntaxKind["FirstJSDocTagNode"] = 322] = "FirstJSDocTagNode";
+        SyntaxKind[SyntaxKind["LastJSDocTagNode"] = 342] = "LastJSDocTagNode";
+        /* @internal */ SyntaxKind[SyntaxKind["FirstContextualKeyword"] = 126] = "FirstContextualKeyword";
+        /* @internal */ SyntaxKind[SyntaxKind["LastContextualKeyword"] = 158] = "LastContextualKeyword";
     })(SyntaxKind = ts.SyntaxKind || (ts.SyntaxKind = {}));
     var NodeFlags;
     (function (NodeFlags) {
@@ -4694,6 +4771,7 @@
         NodeCheckFlags[NodeCheckFlags["ClassWithConstructorReference"] = 16777216] = "ClassWithConstructorReference";
         NodeCheckFlags[NodeCheckFlags["ConstructorReferenceInClass"] = 33554432] = "ConstructorReferenceInClass";
         NodeCheckFlags[NodeCheckFlags["ContainsClassWithPrivateIdentifiers"] = 67108864] = "ContainsClassWithPrivateIdentifiers";
+        NodeCheckFlags[NodeCheckFlags["ContainsSuperPropertyInStaticInitializer"] = 134217728] = "ContainsSuperPropertyInStaticInitializer";
     })(NodeCheckFlags = ts.NodeCheckFlags || (ts.NodeCheckFlags = {}));
     var TypeFlags;
     (function (TypeFlags) {
@@ -4763,7 +4841,7 @@
         /* @internal */
         TypeFlags[TypeFlags["Simplifiable"] = 25165824] = "Simplifiable";
         /* @internal */
-        TypeFlags[TypeFlags["Substructure"] = 469237760] = "Substructure";
+        TypeFlags[TypeFlags["Singleton"] = 67358815] = "Singleton";
         // 'Narrowable' types are types where narrowing actually narrows.
         // This *should* be every type other than null, undefined, void, and never
         TypeFlags[TypeFlags["Narrowable"] = 536624127] = "Narrowable";
@@ -4835,21 +4913,21 @@
         ObjectFlags[ObjectFlags["IdenticalBaseTypeExists"] = 67108864] = "IdenticalBaseTypeExists";
         // Flags that require TypeFlags.UnionOrIntersection or TypeFlags.Substitution
         /* @internal */
-        ObjectFlags[ObjectFlags["IsGenericObjectTypeComputed"] = 4194304] = "IsGenericObjectTypeComputed";
+        ObjectFlags[ObjectFlags["IsGenericTypeComputed"] = 4194304] = "IsGenericTypeComputed";
         /* @internal */
         ObjectFlags[ObjectFlags["IsGenericObjectType"] = 8388608] = "IsGenericObjectType";
         /* @internal */
-        ObjectFlags[ObjectFlags["IsGenericIndexTypeComputed"] = 16777216] = "IsGenericIndexTypeComputed";
+        ObjectFlags[ObjectFlags["IsGenericIndexType"] = 16777216] = "IsGenericIndexType";
         /* @internal */
-        ObjectFlags[ObjectFlags["IsGenericIndexType"] = 33554432] = "IsGenericIndexType";
+        ObjectFlags[ObjectFlags["IsGenericType"] = 25165824] = "IsGenericType";
         // Flags that require TypeFlags.Union
         /* @internal */
-        ObjectFlags[ObjectFlags["ContainsIntersections"] = 67108864] = "ContainsIntersections";
+        ObjectFlags[ObjectFlags["ContainsIntersections"] = 33554432] = "ContainsIntersections";
         // Flags that require TypeFlags.Intersection
         /* @internal */
-        ObjectFlags[ObjectFlags["IsNeverIntersectionComputed"] = 67108864] = "IsNeverIntersectionComputed";
+        ObjectFlags[ObjectFlags["IsNeverIntersectionComputed"] = 33554432] = "IsNeverIntersectionComputed";
         /* @internal */
-        ObjectFlags[ObjectFlags["IsNeverIntersection"] = 134217728] = "IsNeverIntersection";
+        ObjectFlags[ObjectFlags["IsNeverIntersection"] = 67108864] = "IsNeverIntersection";
     })(ObjectFlags = ts.ObjectFlags || (ts.ObjectFlags = {}));
     /* @internal */
     var VarianceFlags;
@@ -4876,6 +4954,21 @@
         ElementFlags[ElementFlags["NonRest"] = 11] = "NonRest";
     })(ElementFlags = ts.ElementFlags || (ts.ElementFlags = {}));
     /* @internal */
+    var AccessFlags;
+    (function (AccessFlags) {
+        AccessFlags[AccessFlags["None"] = 0] = "None";
+        AccessFlags[AccessFlags["IncludeUndefined"] = 1] = "IncludeUndefined";
+        AccessFlags[AccessFlags["NoIndexSignatures"] = 2] = "NoIndexSignatures";
+        AccessFlags[AccessFlags["Writing"] = 4] = "Writing";
+        AccessFlags[AccessFlags["CacheSymbol"] = 8] = "CacheSymbol";
+        AccessFlags[AccessFlags["NoTupleBoundsCheck"] = 16] = "NoTupleBoundsCheck";
+        AccessFlags[AccessFlags["ExpressionPosition"] = 32] = "ExpressionPosition";
+        AccessFlags[AccessFlags["ReportDeprecated"] = 64] = "ReportDeprecated";
+        AccessFlags[AccessFlags["SuppressNoImplicitAnyError"] = 128] = "SuppressNoImplicitAnyError";
+        AccessFlags[AccessFlags["Contextual"] = 256] = "Contextual";
+        AccessFlags[AccessFlags["Persistent"] = 1] = "Persistent";
+    })(AccessFlags = ts.AccessFlags || (ts.AccessFlags = {}));
+    /* @internal */
     var JsxReferenceKind;
     (function (JsxReferenceKind) {
         JsxReferenceKind[JsxReferenceKind["Component"] = 0] = "Component";
@@ -5275,6 +5368,8 @@
         TransformFlags[TransformFlags["ContainsDynamicImport"] = 4194304] = "ContainsDynamicImport";
         TransformFlags[TransformFlags["ContainsClassFields"] = 8388608] = "ContainsClassFields";
         TransformFlags[TransformFlags["ContainsPossibleTopLevelAwait"] = 16777216] = "ContainsPossibleTopLevelAwait";
+        TransformFlags[TransformFlags["ContainsLexicalSuper"] = 33554432] = "ContainsLexicalSuper";
+        TransformFlags[TransformFlags["ContainsUpdateExpressionForIdentifier"] = 67108864] = "ContainsUpdateExpressionForIdentifier";
         // Please leave this as 1 << 29.
         // It is the maximum bit we can set before we outgrow the size of a v8 small integer (SMI) on an x86 system.
         // It is a good reminder of how much room we have left
@@ -5300,12 +5395,12 @@
         TransformFlags[TransformFlags["PropertyAccessExcludes"] = 536870912] = "PropertyAccessExcludes";
         TransformFlags[TransformFlags["NodeExcludes"] = 536870912] = "NodeExcludes";
         TransformFlags[TransformFlags["ArrowFunctionExcludes"] = 557748224] = "ArrowFunctionExcludes";
-        TransformFlags[TransformFlags["FunctionExcludes"] = 557756416] = "FunctionExcludes";
-        TransformFlags[TransformFlags["ConstructorExcludes"] = 557752320] = "ConstructorExcludes";
-        TransformFlags[TransformFlags["MethodOrAccessorExcludes"] = 540975104] = "MethodOrAccessorExcludes";
-        TransformFlags[TransformFlags["PropertyExcludes"] = 536879104] = "PropertyExcludes";
+        TransformFlags[TransformFlags["FunctionExcludes"] = 591310848] = "FunctionExcludes";
+        TransformFlags[TransformFlags["ConstructorExcludes"] = 591306752] = "ConstructorExcludes";
+        TransformFlags[TransformFlags["MethodOrAccessorExcludes"] = 574529536] = "MethodOrAccessorExcludes";
+        TransformFlags[TransformFlags["PropertyExcludes"] = 570433536] = "PropertyExcludes";
         TransformFlags[TransformFlags["ClassExcludes"] = 536940544] = "ClassExcludes";
-        TransformFlags[TransformFlags["ModuleExcludes"] = 555888640] = "ModuleExcludes";
+        TransformFlags[TransformFlags["ModuleExcludes"] = 589443072] = "ModuleExcludes";
         TransformFlags[TransformFlags["TypeExcludes"] = -2] = "TypeExcludes";
         TransformFlags[TransformFlags["ObjectLiteralExcludes"] = 536973312] = "ObjectLiteralExcludes";
         TransformFlags[TransformFlags["ArrayLiteralOrCallOrNewExcludes"] = 536887296] = "ArrayLiteralOrCallOrNewExcludes";
@@ -5313,9 +5408,10 @@
         TransformFlags[TransformFlags["ParameterExcludes"] = 536870912] = "ParameterExcludes";
         TransformFlags[TransformFlags["CatchClauseExcludes"] = 536903680] = "CatchClauseExcludes";
         TransformFlags[TransformFlags["BindingPatternExcludes"] = 536887296] = "BindingPatternExcludes";
+        TransformFlags[TransformFlags["ContainsLexicalThisOrSuper"] = 33562624] = "ContainsLexicalThisOrSuper";
         // Propagating flags
         // - Bitmasks for flags that should propagate from a child
-        TransformFlags[TransformFlags["PropertyNamePropagatingFlags"] = 8192] = "PropertyNamePropagatingFlags";
+        TransformFlags[TransformFlags["PropertyNamePropagatingFlags"] = 33562624] = "PropertyNamePropagatingFlags";
         // Masks
         // - Additional bitmasks
     })(TransformFlags = ts.TransformFlags || (ts.TransformFlags = {}));
@@ -5353,6 +5449,8 @@
         /*@internal*/ EmitFlags[EmitFlags["TypeScriptClassWrapper"] = 33554432] = "TypeScriptClassWrapper";
         /*@internal*/ EmitFlags[EmitFlags["NeverApplyImportHelper"] = 67108864] = "NeverApplyImportHelper";
         /*@internal*/ EmitFlags[EmitFlags["IgnoreSourceNewlines"] = 134217728] = "IgnoreSourceNewlines";
+        /*@internal*/ EmitFlags[EmitFlags["Immutable"] = 268435456] = "Immutable";
+        /*@internal*/ EmitFlags[EmitFlags["IndirectCall"] = 536870912] = "IndirectCall";
     })(EmitFlags = ts.EmitFlags || (ts.EmitFlags = {}));
     /**
      * Used by the checker, this enum keeps track of external emit helpers that should be type
@@ -5854,7 +5952,7 @@
         var rest = path.substring(rootLength).split(ts.directorySeparator);
         if (rest.length && !ts.lastOrUndefined(rest))
             rest.pop();
-        return __spreadArray([root], rest);
+        return __spreadArray([root], rest, true);
     }
     /**
      * Parse a path into an array containing a root component (at index 0) and zero or more path
@@ -5913,6 +6011,11 @@
      * Normalize path separators, converting `\` into `/`.
      */
     function normalizeSlashes(path) {
+        var index = path.indexOf("\\");
+        if (index === -1) {
+            return path;
+        }
+        backslashRegExp.lastIndex = index; // prime regex with known position
         return path.replace(backslashRegExp, ts.directorySeparator);
     }
     ts.normalizeSlashes = normalizeSlashes;
@@ -6000,7 +6103,7 @@
         for (var _i = 1; _i < arguments.length; _i++) {
             paths[_i - 1] = arguments[_i];
         }
-        return normalizePath(ts.some(paths) ? combinePaths.apply(void 0, __spreadArray([path], paths)) : normalizeSlashes(path));
+        return normalizePath(ts.some(paths) ? combinePaths.apply(void 0, __spreadArray([path], paths, false)) : normalizeSlashes(path));
     }
     ts.resolvePath = resolvePath;
     /**
@@ -6023,6 +6126,19 @@
     ts.getNormalizedAbsolutePath = getNormalizedAbsolutePath;
     function normalizePath(path) {
         path = normalizeSlashes(path);
+        // Most paths don't require normalization
+        if (!relativePathSegmentRegExp.test(path)) {
+            return path;
+        }
+        // Some paths only require cleanup of `/./` or leading `./`
+        var simplified = path.replace(/\/\.\//g, "/").replace(/^\.\//, "");
+        if (simplified !== path) {
+            path = simplified;
+            if (!relativePathSegmentRegExp.test(path)) {
+                return path;
+            }
+        }
+        // Other paths require full normalization
         var normalized = getPathFromPathComponents(reducePathComponents(getPathComponents(path)));
         return normalized && hasTrailingDirectorySeparator(path) ? ensureTrailingDirectorySeparator(normalized) : normalized;
     }
@@ -6091,7 +6207,7 @@
     ts.changeAnyExtension = changeAnyExtension;
     //// Path Comparisons
     // check path for these segments: '', '.'. '..'
-    var relativePathSegmentRegExp = /(^|\/)\.{0,2}($|\/)/;
+    var relativePathSegmentRegExp = /(?:\/\/)|(?:^|\/)\.\.?(?:$|\/)/;
     function comparePathsWorker(a, b, componentComparer) {
         if (a === b)
             return 0 /* EqualTo */;
@@ -6211,7 +6327,7 @@
         for (; start < fromComponents.length; start++) {
             relative.push("..");
         }
-        return __spreadArray(__spreadArray([""], relative), components);
+        return __spreadArray(__spreadArray([""], relative, true), components, true);
     }
     ts.getPathComponentsRelativeTo = getPathComponentsRelativeTo;
     function getRelativePathFromDirectory(fromDirectory, to, getCanonicalFileNameOrIgnoreCase) {
@@ -7106,6 +7222,7 @@
             }
             var activeSession;
             var profilePath = "./profile.cpuprofile";
+            var hitSystemWatcherLimit = false;
             var Buffer = require("buffer").Buffer;
             var nodeVersion = getNodeMajorVersion();
             var isNode4OrLater = nodeVersion >= 4;
@@ -7142,6 +7259,9 @@
                 write: function (s) {
                     process.stdout.write(s);
                 },
+                getWidthOfTerminal: function () {
+                    return process.stdout.columns;
+                },
                 writeOutputIsTTY: function () {
                     return process.stdout.isTTY;
                 },
@@ -7431,6 +7551,10 @@
                             options = { persistent: true };
                         }
                     }
+                    if (hitSystemWatcherLimit) {
+                        ts.sysLog("sysLog:: " + fileOrDirectory + ":: Defaulting to fsWatchFile");
+                        return watchPresentFileSystemEntryWithFsWatchFile();
+                    }
                     try {
                         var presentWatcher = _fs.watch(fileOrDirectory, options, isLinuxOrMacOs ?
                             callbackChangingToMissingFileSystemEntry :
@@ -7443,6 +7567,8 @@
                         // Catch the exception and use polling instead
                         // Eg. on linux the number of watches are limited and one could easily exhaust watches and the exception ENOSPC is thrown when creating watcher at that point
                         // so instead of throwing error, use fs.watchFile
+                        hitSystemWatcherLimit || (hitSystemWatcherLimit = e.code === "ENOSPC");
+                        ts.sysLog("sysLog:: " + fileOrDirectory + ":: Changing to fsWatchFile");
                         return watchPresentFileSystemEntryWithFsWatchFile();
                     }
                 }
@@ -7462,7 +7588,6 @@
                  * Eg. on linux the number of watches are limited and one could easily exhaust watches and the exception ENOSPC is thrown when creating watcher at that point
                  */
                 function watchPresentFileSystemEntryWithFsWatchFile() {
-                    ts.sysLog("sysLog:: " + fileOrDirectory + ":: Changing to fsWatchFile");
                     return watchFile(fileOrDirectory, createFileWatcherCallback(callback), fallbackPollingInterval, fallbackOptions);
                 }
                 /**
@@ -7581,7 +7706,7 @@
                 }
             }
             function readDirectory(path, extensions, excludes, includes, depth) {
-                return ts.matchFiles(path, extensions, excludes, includes, useCaseSensitiveFileNames, process.cwd(), depth, getAccessibleFileSystemEntries, realpath);
+                return ts.matchFiles(path, extensions, excludes, includes, useCaseSensitiveFileNames, process.cwd(), depth, getAccessibleFileSystemEntries, realpath, directoryExists);
             }
             function fileSystemEntryExists(path, entryKind) {
                 // Since the error thrown by fs.statSync isn't used, we can avoid collecting a stack trace to improve
@@ -7704,7 +7829,6 @@
         An_index_signature_parameter_cannot_have_an_initializer: diag(1020, ts.DiagnosticCategory.Error, "An_index_signature_parameter_cannot_have_an_initializer_1020", "An index signature parameter cannot have an initializer."),
         An_index_signature_must_have_a_type_annotation: diag(1021, ts.DiagnosticCategory.Error, "An_index_signature_must_have_a_type_annotation_1021", "An index signature must have a type annotation."),
         An_index_signature_parameter_must_have_a_type_annotation: diag(1022, ts.DiagnosticCategory.Error, "An_index_signature_parameter_must_have_a_type_annotation_1022", "An index signature parameter must have a type annotation."),
-        An_index_signature_parameter_type_must_be_either_string_or_number: diag(1023, ts.DiagnosticCategory.Error, "An_index_signature_parameter_type_must_be_either_string_or_number_1023", "An index signature parameter type must be either 'string' or 'number'."),
         readonly_modifier_can_only_appear_on_a_property_declaration_or_index_signature: diag(1024, ts.DiagnosticCategory.Error, "readonly_modifier_can_only_appear_on_a_property_declaration_or_index_signature_1024", "'readonly' modifier can only appear on a property declaration or index signature."),
         An_index_signature_cannot_have_a_trailing_comma: diag(1025, ts.DiagnosticCategory.Error, "An_index_signature_cannot_have_a_trailing_comma_1025", "An index signature cannot have a trailing comma."),
         Accessibility_modifier_already_seen: diag(1028, ts.DiagnosticCategory.Error, "Accessibility_modifier_already_seen_1028", "Accessibility modifier already seen."),
@@ -7765,6 +7889,7 @@
         for_await_loops_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules: diag(1103, ts.DiagnosticCategory.Error, "for_await_loops_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_1103", "'for await' loops are only allowed within async functions and at the top levels of modules."),
         A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement: diag(1104, ts.DiagnosticCategory.Error, "A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement_1104", "A 'continue' statement can only be used within an enclosing iteration statement."),
         A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement: diag(1105, ts.DiagnosticCategory.Error, "A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement_1105", "A 'break' statement can only be used within an enclosing iteration or switch statement."),
+        The_left_hand_side_of_a_for_of_statement_may_not_be_async: diag(1106, ts.DiagnosticCategory.Error, "The_left_hand_side_of_a_for_of_statement_may_not_be_async_1106", "The left-hand side of a 'for...of' statement may not be 'async'."),
         Jump_target_cannot_cross_function_boundary: diag(1107, ts.DiagnosticCategory.Error, "Jump_target_cannot_cross_function_boundary_1107", "Jump target cannot cross function boundary."),
         A_return_statement_can_only_be_used_within_a_function_body: diag(1108, ts.DiagnosticCategory.Error, "A_return_statement_can_only_be_used_within_a_function_body_1108", "A 'return' statement can only be used within a function body."),
         Expression_expected: diag(1109, ts.DiagnosticCategory.Error, "Expression_expected_1109", "Expression expected."),
@@ -7851,7 +7976,7 @@
         Decorators_are_not_valid_here: diag(1206, ts.DiagnosticCategory.Error, "Decorators_are_not_valid_here_1206", "Decorators are not valid here."),
         Decorators_cannot_be_applied_to_multiple_get_Slashset_accessors_of_the_same_name: diag(1207, ts.DiagnosticCategory.Error, "Decorators_cannot_be_applied_to_multiple_get_Slashset_accessors_of_the_same_name_1207", "Decorators cannot be applied to multiple get/set accessors of the same name."),
         _0_cannot_be_compiled_under_isolatedModules_because_it_is_considered_a_global_script_file_Add_an_import_export_or_an_empty_export_statement_to_make_it_a_module: diag(1208, ts.DiagnosticCategory.Error, "_0_cannot_be_compiled_under_isolatedModules_because_it_is_considered_a_global_script_file_Add_an_imp_1208", "'{0}' cannot be compiled under '--isolatedModules' because it is considered a global script file. Add an import, export, or an empty 'export {}' statement to make it a module."),
-        Invalid_use_of_0_Class_definitions_are_automatically_in_strict_mode: diag(1210, ts.DiagnosticCategory.Error, "Invalid_use_of_0_Class_definitions_are_automatically_in_strict_mode_1210", "Invalid use of '{0}'. Class definitions are automatically in strict mode."),
+        Code_contained_in_a_class_is_evaluated_in_JavaScript_s_strict_mode_which_does_not_allow_this_use_of_0_For_more_information_see_https_Colon_Slash_Slashdeveloper_mozilla_org_Slashen_US_Slashdocs_SlashWeb_SlashJavaScript_SlashReference_SlashStrict_mode: diag(1210, ts.DiagnosticCategory.Error, "Code_contained_in_a_class_is_evaluated_in_JavaScript_s_strict_mode_which_does_not_allow_this_use_of__1210", "Code contained in a class is evaluated in JavaScript's strict mode which does not allow this use of '{0}'. For more information, see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Strict_mode."),
         A_class_declaration_without_the_default_modifier_must_have_a_name: diag(1211, ts.DiagnosticCategory.Error, "A_class_declaration_without_the_default_modifier_must_have_a_name_1211", "A class declaration without the 'default' modifier must have a name."),
         Identifier_expected_0_is_a_reserved_word_in_strict_mode: diag(1212, ts.DiagnosticCategory.Error, "Identifier_expected_0_is_a_reserved_word_in_strict_mode_1212", "Identifier expected. '{0}' is a reserved word in strict mode."),
         Identifier_expected_0_is_a_reserved_word_in_strict_mode_Class_definitions_are_automatically_in_strict_mode: diag(1213, ts.DiagnosticCategory.Error, "Identifier_expected_0_is_a_reserved_word_in_strict_mode_Class_definitions_are_automatically_in_stric_1213", "Identifier expected. '{0}' is a reserved word in strict mode. Class definitions are automatically in strict mode."),
@@ -7906,6 +8031,8 @@
         Declarations_with_definite_assignment_assertions_must_also_have_type_annotations: diag(1264, ts.DiagnosticCategory.Error, "Declarations_with_definite_assignment_assertions_must_also_have_type_annotations_1264", "Declarations with definite assignment assertions must also have type annotations."),
         A_rest_element_cannot_follow_another_rest_element: diag(1265, ts.DiagnosticCategory.Error, "A_rest_element_cannot_follow_another_rest_element_1265", "A rest element cannot follow another rest element."),
         An_optional_element_cannot_follow_a_rest_element: diag(1266, ts.DiagnosticCategory.Error, "An_optional_element_cannot_follow_a_rest_element_1266", "An optional element cannot follow a rest element."),
+        Property_0_cannot_have_an_initializer_because_it_is_marked_abstract: diag(1267, ts.DiagnosticCategory.Error, "Property_0_cannot_have_an_initializer_because_it_is_marked_abstract_1267", "Property '{0}' cannot have an initializer because it is marked abstract."),
+        An_index_signature_parameter_type_must_be_string_number_symbol_or_a_template_literal_type: diag(1268, ts.DiagnosticCategory.Error, "An_index_signature_parameter_type_must_be_string_number_symbol_or_a_template_literal_type_1268", "An index signature parameter type must be 'string', 'number', 'symbol', or a template literal type."),
         with_statements_are_not_allowed_in_an_async_function_block: diag(1300, ts.DiagnosticCategory.Error, "with_statements_are_not_allowed_in_an_async_function_block_1300", "'with' statements are not allowed in an async function block."),
         await_expressions_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules: diag(1308, ts.DiagnosticCategory.Error, "await_expressions_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_1308", "'await' expressions are only allowed within async functions and at the top levels of modules."),
         Did_you_mean_to_use_a_Colon_An_can_only_follow_a_property_name_when_the_containing_object_literal_is_part_of_a_destructuring_pattern: diag(1312, ts.DiagnosticCategory.Error, "Did_you_mean_to_use_a_Colon_An_can_only_follow_a_property_name_when_the_containing_object_literal_is_1312", "Did you mean to use a ':'? An '=' can only follow a property name when the containing object literal is part of a destructuring pattern."),
@@ -7932,8 +8059,7 @@
         unique_symbol_types_may_not_be_used_on_a_variable_declaration_with_a_binding_name: diag(1333, ts.DiagnosticCategory.Error, "unique_symbol_types_may_not_be_used_on_a_variable_declaration_with_a_binding_name_1333", "'unique symbol' types may not be used on a variable declaration with a binding name."),
         unique_symbol_types_are_only_allowed_on_variables_in_a_variable_statement: diag(1334, ts.DiagnosticCategory.Error, "unique_symbol_types_are_only_allowed_on_variables_in_a_variable_statement_1334", "'unique symbol' types are only allowed on variables in a variable statement."),
         unique_symbol_types_are_not_allowed_here: diag(1335, ts.DiagnosticCategory.Error, "unique_symbol_types_are_not_allowed_here_1335", "'unique symbol' types are not allowed here."),
-        An_index_signature_parameter_type_cannot_be_a_type_alias_Consider_writing_0_Colon_1_Colon_2_instead: diag(1336, ts.DiagnosticCategory.Error, "An_index_signature_parameter_type_cannot_be_a_type_alias_Consider_writing_0_Colon_1_Colon_2_instead_1336", "An index signature parameter type cannot be a type alias. Consider writing '[{0}: {1}]: {2}' instead."),
-        An_index_signature_parameter_type_cannot_be_a_union_type_Consider_using_a_mapped_object_type_instead: diag(1337, ts.DiagnosticCategory.Error, "An_index_signature_parameter_type_cannot_be_a_union_type_Consider_using_a_mapped_object_type_instead_1337", "An index signature parameter type cannot be a union type. Consider using a mapped object type instead."),
+        An_index_signature_parameter_type_cannot_be_a_literal_type_or_generic_type_Consider_using_a_mapped_object_type_instead: diag(1337, ts.DiagnosticCategory.Error, "An_index_signature_parameter_type_cannot_be_a_literal_type_or_generic_type_Consider_using_a_mapped_o_1337", "An index signature parameter type cannot be a literal type or generic type. Consider using a mapped object type instead."),
         infer_declarations_are_only_permitted_in_the_extends_clause_of_a_conditional_type: diag(1338, ts.DiagnosticCategory.Error, "infer_declarations_are_only_permitted_in_the_extends_clause_of_a_conditional_type_1338", "'infer' declarations are only permitted in the 'extends' clause of a conditional type."),
         Module_0_does_not_refer_to_a_value_but_is_used_as_a_value_here: diag(1339, ts.DiagnosticCategory.Error, "Module_0_does_not_refer_to_a_value_but_is_used_as_a_value_here_1339", "Module '{0}' does not refer to a value, but is used as a value here."),
         Module_0_does_not_refer_to_a_type_but_is_used_as_a_type_here_Did_you_mean_typeof_import_0: diag(1340, ts.DiagnosticCategory.Error, "Module_0_does_not_refer_to_a_type_but_is_used_as_a_type_here_Did_you_mean_typeof_import_0_1340", "Module '{0}' does not refer to a type, but is used as a type here. Did you mean 'typeof import('{0}')'?"),
@@ -7963,7 +8089,6 @@
         Convert_all_re_exported_types_to_type_only_exports: diag(1365, ts.DiagnosticCategory.Message, "Convert_all_re_exported_types_to_type_only_exports_1365", "Convert all re-exported types to type-only exports"),
         Split_into_two_separate_import_declarations: diag(1366, ts.DiagnosticCategory.Message, "Split_into_two_separate_import_declarations_1366", "Split into two separate import declarations"),
         Split_all_invalid_type_only_imports: diag(1367, ts.DiagnosticCategory.Message, "Split_all_invalid_type_only_imports_1367", "Split all invalid type-only imports"),
-        Specify_emit_Slashchecking_behavior_for_imports_that_are_only_used_for_types: diag(1368, ts.DiagnosticCategory.Message, "Specify_emit_Slashchecking_behavior_for_imports_that_are_only_used_for_types_1368", "Specify emit/checking behavior for imports that are only used for types"),
         Did_you_mean_0: diag(1369, ts.DiagnosticCategory.Message, "Did_you_mean_0_1369", "Did you mean '{0}'?"),
         This_import_is_never_used_as_a_value_and_must_use_import_type_because_importsNotUsedAsValues_is_set_to_error: diag(1371, ts.DiagnosticCategory.Error, "This_import_is_never_used_as_a_value_and_must_use_import_type_because_importsNotUsedAsValues_is_set__1371", "This import is never used as a value and must use 'import type' because 'importsNotUsedAsValues' is set to 'error'."),
         Convert_to_type_only_import: diag(1373, ts.DiagnosticCategory.Message, "Convert_to_type_only_import_1373", "Convert to type-only import"),
@@ -8027,6 +8152,16 @@
         for_await_loops_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_file_has_no_imports_or_exports_Consider_adding_an_empty_export_to_make_this_file_a_module: diag(1431, ts.DiagnosticCategory.Error, "for_await_loops_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_file_1431", "'for await' loops are only allowed at the top level of a file when that file is a module, but this file has no imports or exports. Consider adding an empty 'export {}' to make this file a module."),
         Top_level_for_await_loops_are_only_allowed_when_the_module_option_is_set_to_esnext_or_system_and_the_target_option_is_set_to_es2017_or_higher: diag(1432, ts.DiagnosticCategory.Error, "Top_level_for_await_loops_are_only_allowed_when_the_module_option_is_set_to_esnext_or_system_and_the_1432", "Top-level 'for await' loops are only allowed when the 'module' option is set to 'esnext' or 'system', and the 'target' option is set to 'es2017' or higher."),
         Decorators_may_not_be_applied_to_this_parameters: diag(1433, ts.DiagnosticCategory.Error, "Decorators_may_not_be_applied_to_this_parameters_1433", "Decorators may not be applied to 'this' parameters."),
+        Unexpected_keyword_or_identifier: diag(1434, ts.DiagnosticCategory.Error, "Unexpected_keyword_or_identifier_1434", "Unexpected keyword or identifier."),
+        Unknown_keyword_or_identifier_Did_you_mean_0: diag(1435, ts.DiagnosticCategory.Error, "Unknown_keyword_or_identifier_Did_you_mean_0_1435", "Unknown keyword or identifier. Did you mean '{0}'?"),
+        Decorators_must_precede_the_name_and_all_keywords_of_property_declarations: diag(1436, ts.DiagnosticCategory.Error, "Decorators_must_precede_the_name_and_all_keywords_of_property_declarations_1436", "Decorators must precede the name and all keywords of property declarations."),
+        Namespace_must_be_given_a_name: diag(1437, ts.DiagnosticCategory.Error, "Namespace_must_be_given_a_name_1437", "Namespace must be given a name."),
+        Interface_must_be_given_a_name: diag(1438, ts.DiagnosticCategory.Error, "Interface_must_be_given_a_name_1438", "Interface must be given a name."),
+        Type_alias_must_be_given_a_name: diag(1439, ts.DiagnosticCategory.Error, "Type_alias_must_be_given_a_name_1439", "Type alias must be given a name."),
+        Variable_declaration_not_allowed_at_this_location: diag(1440, ts.DiagnosticCategory.Error, "Variable_declaration_not_allowed_at_this_location_1440", "Variable declaration not allowed at this location."),
+        Cannot_start_a_function_call_in_a_type_annotation: diag(1441, ts.DiagnosticCategory.Error, "Cannot_start_a_function_call_in_a_type_annotation_1441", "Cannot start a function call in a type annotation."),
+        Expected_for_property_initializer: diag(1442, ts.DiagnosticCategory.Error, "Expected_for_property_initializer_1442", "Expected '=' for property initializer."),
+        Module_declaration_names_may_only_use_or_quoted_strings: diag(1443, ts.DiagnosticCategory.Error, "Module_declaration_names_may_only_use_or_quoted_strings_1443", "Module declaration names may only use ' or \" quoted strings."),
         The_types_of_0_are_incompatible_between_these_types: diag(2200, ts.DiagnosticCategory.Error, "The_types_of_0_are_incompatible_between_these_types_2200", "The types of '{0}' are incompatible between these types."),
         The_types_returned_by_0_are_incompatible_between_these_types: diag(2201, ts.DiagnosticCategory.Error, "The_types_returned_by_0_are_incompatible_between_these_types_2201", "The types returned by '{0}' are incompatible between these types."),
         Call_signature_return_types_0_and_1_are_incompatible: diag(2202, ts.DiagnosticCategory.Error, "Call_signature_return_types_0_and_1_are_incompatible_2202", "Call signature return types '{0}' and '{1}' are incompatible.", /*reportsUnnecessary*/ undefined, /*elidedInCompatabilityPyramid*/ true),
@@ -8062,8 +8197,8 @@
         Types_of_property_0_are_incompatible: diag(2326, ts.DiagnosticCategory.Error, "Types_of_property_0_are_incompatible_2326", "Types of property '{0}' are incompatible."),
         Property_0_is_optional_in_type_1_but_required_in_type_2: diag(2327, ts.DiagnosticCategory.Error, "Property_0_is_optional_in_type_1_but_required_in_type_2_2327", "Property '{0}' is optional in type '{1}' but required in type '{2}'."),
         Types_of_parameters_0_and_1_are_incompatible: diag(2328, ts.DiagnosticCategory.Error, "Types_of_parameters_0_and_1_are_incompatible_2328", "Types of parameters '{0}' and '{1}' are incompatible."),
-        Index_signature_is_missing_in_type_0: diag(2329, ts.DiagnosticCategory.Error, "Index_signature_is_missing_in_type_0_2329", "Index signature is missing in type '{0}'."),
-        Index_signatures_are_incompatible: diag(2330, ts.DiagnosticCategory.Error, "Index_signatures_are_incompatible_2330", "Index signatures are incompatible."),
+        Index_signature_for_type_0_is_missing_in_type_1: diag(2329, ts.DiagnosticCategory.Error, "Index_signature_for_type_0_is_missing_in_type_1_2329", "Index signature for type '{0}' is missing in type '{1}'."),
+        _0_and_1_index_signatures_are_incompatible: diag(2330, ts.DiagnosticCategory.Error, "_0_and_1_index_signatures_are_incompatible_2330", "'{0}' and '{1}' index signatures are incompatible."),
         this_cannot_be_referenced_in_a_module_or_namespace_body: diag(2331, ts.DiagnosticCategory.Error, "this_cannot_be_referenced_in_a_module_or_namespace_body_2331", "'this' cannot be referenced in a module or namespace body."),
         this_cannot_be_referenced_in_current_location: diag(2332, ts.DiagnosticCategory.Error, "this_cannot_be_referenced_in_current_location_2332", "'this' cannot be referenced in current location."),
         this_cannot_be_referenced_in_constructor_arguments: diag(2333, ts.DiagnosticCategory.Error, "this_cannot_be_referenced_in_constructor_arguments_2333", "'this' cannot be referenced in constructor arguments."),
@@ -8107,8 +8242,7 @@
         A_parameter_initializer_is_only_allowed_in_a_function_or_constructor_implementation: diag(2371, ts.DiagnosticCategory.Error, "A_parameter_initializer_is_only_allowed_in_a_function_or_constructor_implementation_2371", "A parameter initializer is only allowed in a function or constructor implementation."),
         Parameter_0_cannot_reference_itself: diag(2372, ts.DiagnosticCategory.Error, "Parameter_0_cannot_reference_itself_2372", "Parameter '{0}' cannot reference itself."),
         Parameter_0_cannot_reference_identifier_1_declared_after_it: diag(2373, ts.DiagnosticCategory.Error, "Parameter_0_cannot_reference_identifier_1_declared_after_it_2373", "Parameter '{0}' cannot reference identifier '{1}' declared after it."),
-        Duplicate_string_index_signature: diag(2374, ts.DiagnosticCategory.Error, "Duplicate_string_index_signature_2374", "Duplicate string index signature."),
-        Duplicate_number_index_signature: diag(2375, ts.DiagnosticCategory.Error, "Duplicate_number_index_signature_2375", "Duplicate number index signature."),
+        Duplicate_index_signature_for_type_0: diag(2374, ts.DiagnosticCategory.Error, "Duplicate_index_signature_for_type_0_2374", "Duplicate index signature for type '{0}'."),
         A_super_call_must_be_the_first_statement_in_the_constructor_when_a_class_contains_initialized_properties_parameter_properties_or_private_identifiers: diag(2376, ts.DiagnosticCategory.Error, "A_super_call_must_be_the_first_statement_in_the_constructor_when_a_class_contains_initialized_proper_2376", "A 'super' call must be the first statement in the constructor when a class contains initialized properties, parameter properties, or private identifiers."),
         Constructors_for_derived_classes_must_contain_a_super_call: diag(2377, ts.DiagnosticCategory.Error, "Constructors_for_derived_classes_must_contain_a_super_call_2377", "Constructors for derived classes must contain a 'super' call."),
         A_get_accessor_must_return_a_value: diag(2378, ts.DiagnosticCategory.Error, "A_get_accessor_must_return_a_value_2378", "A 'get' accessor must return a value."),
@@ -8143,9 +8277,8 @@
         Setters_cannot_return_a_value: diag(2408, ts.DiagnosticCategory.Error, "Setters_cannot_return_a_value_2408", "Setters cannot return a value."),
         Return_type_of_constructor_signature_must_be_assignable_to_the_instance_type_of_the_class: diag(2409, ts.DiagnosticCategory.Error, "Return_type_of_constructor_signature_must_be_assignable_to_the_instance_type_of_the_class_2409", "Return type of constructor signature must be assignable to the instance type of the class."),
         The_with_statement_is_not_supported_All_symbols_in_a_with_block_will_have_type_any: diag(2410, ts.DiagnosticCategory.Error, "The_with_statement_is_not_supported_All_symbols_in_a_with_block_will_have_type_any_2410", "The 'with' statement is not supported. All symbols in a 'with' block will have type 'any'."),
-        Property_0_of_type_1_is_not_assignable_to_string_index_type_2: diag(2411, ts.DiagnosticCategory.Error, "Property_0_of_type_1_is_not_assignable_to_string_index_type_2_2411", "Property '{0}' of type '{1}' is not assignable to string index type '{2}'."),
-        Property_0_of_type_1_is_not_assignable_to_numeric_index_type_2: diag(2412, ts.DiagnosticCategory.Error, "Property_0_of_type_1_is_not_assignable_to_numeric_index_type_2_2412", "Property '{0}' of type '{1}' is not assignable to numeric index type '{2}'."),
-        Numeric_index_type_0_is_not_assignable_to_string_index_type_1: diag(2413, ts.DiagnosticCategory.Error, "Numeric_index_type_0_is_not_assignable_to_string_index_type_1_2413", "Numeric index type '{0}' is not assignable to string index type '{1}'."),
+        Property_0_of_type_1_is_not_assignable_to_2_index_type_3: diag(2411, ts.DiagnosticCategory.Error, "Property_0_of_type_1_is_not_assignable_to_2_index_type_3_2411", "Property '{0}' of type '{1}' is not assignable to '{2}' index type '{3}'."),
+        _0_index_type_1_is_not_assignable_to_2_index_type_3: diag(2413, ts.DiagnosticCategory.Error, "_0_index_type_1_is_not_assignable_to_2_index_type_3_2413", "'{0}' index type '{1}' is not assignable to '{2}' index type '{3}'."),
         Class_name_cannot_be_0: diag(2414, ts.DiagnosticCategory.Error, "Class_name_cannot_be_0_2414", "Class name cannot be '{0}'."),
         Class_0_incorrectly_extends_base_class_1: diag(2415, ts.DiagnosticCategory.Error, "Class_0_incorrectly_extends_base_class_1_2415", "Class '{0}' incorrectly extends base class '{1}'."),
         Property_0_in_type_1_is_not_assignable_to_the_same_property_in_base_type_2: diag(2416, ts.DiagnosticCategory.Error, "Property_0_in_type_1_is_not_assignable_to_the_same_property_in_base_type_2_2416", "Property '{0}' in type '{1}' is not assignable to the same property in base type '{2}'."),
@@ -8292,7 +8425,9 @@
         Property_0_is_used_before_being_assigned: diag(2565, ts.DiagnosticCategory.Error, "Property_0_is_used_before_being_assigned_2565", "Property '{0}' is used before being assigned."),
         A_rest_element_cannot_have_a_property_name: diag(2566, ts.DiagnosticCategory.Error, "A_rest_element_cannot_have_a_property_name_2566", "A rest element cannot have a property name."),
         Enum_declarations_can_only_merge_with_namespace_or_other_enum_declarations: diag(2567, ts.DiagnosticCategory.Error, "Enum_declarations_can_only_merge_with_namespace_or_other_enum_declarations_2567", "Enum declarations can only merge with namespace or other enum declarations."),
+        Property_0_may_not_exist_on_type_1_Did_you_mean_2: diag(2568, ts.DiagnosticCategory.Error, "Property_0_may_not_exist_on_type_1_Did_you_mean_2_2568", "Property '{0}' may not exist on type '{1}'. Did you mean '{2}'?"),
         Type_0_is_not_an_array_type_or_a_string_type_Use_compiler_option_downlevelIteration_to_allow_iterating_of_iterators: diag(2569, ts.DiagnosticCategory.Error, "Type_0_is_not_an_array_type_or_a_string_type_Use_compiler_option_downlevelIteration_to_allow_iterati_2569", "Type '{0}' is not an array type or a string type. Use compiler option '--downlevelIteration' to allow iterating of iterators."),
+        Could_not_find_name_0_Did_you_mean_1: diag(2570, ts.DiagnosticCategory.Error, "Could_not_find_name_0_Did_you_mean_1_2570", "Could not find name '{0}'. Did you mean '{1}'?"),
         Object_is_of_type_unknown: diag(2571, ts.DiagnosticCategory.Error, "Object_is_of_type_unknown_2571", "Object is of type 'unknown'."),
         Rest_signatures_are_incompatible: diag(2572, ts.DiagnosticCategory.Error, "Rest_signatures_are_incompatible_2572", "Rest signatures are incompatible."),
         Property_0_is_incompatible_with_rest_element_type: diag(2573, ts.DiagnosticCategory.Error, "Property_0_is_incompatible_with_rest_element_type_2573", "Property '{0}' is incompatible with rest element type."),
@@ -8353,6 +8488,7 @@
         Cannot_assign_to_0_because_it_is_a_namespace: diag(2631, ts.DiagnosticCategory.Error, "Cannot_assign_to_0_because_it_is_a_namespace_2631", "Cannot assign to '{0}' because it is a namespace."),
         Cannot_assign_to_0_because_it_is_an_import: diag(2632, ts.DiagnosticCategory.Error, "Cannot_assign_to_0_because_it_is_an_import_2632", "Cannot assign to '{0}' because it is an import."),
         JSX_property_access_expressions_cannot_include_JSX_namespace_names: diag(2633, ts.DiagnosticCategory.Error, "JSX_property_access_expressions_cannot_include_JSX_namespace_names_2633", "JSX property access expressions cannot include JSX namespace names"),
+        _0_index_signatures_are_incompatible: diag(2634, ts.DiagnosticCategory.Error, "_0_index_signatures_are_incompatible_2634", "'{0}' index signatures are incompatible."),
         Cannot_augment_module_0_with_value_exports_because_it_resolves_to_a_non_module_entity: diag(2649, ts.DiagnosticCategory.Error, "Cannot_augment_module_0_with_value_exports_because_it_resolves_to_a_non_module_entity_2649", "Cannot augment module '{0}' with value exports because it resolves to a non-module entity."),
         A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_members_defined_in_other_enums: diag(2651, ts.DiagnosticCategory.Error, "A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_memb_2651", "A member initializer in a enum declaration cannot reference members declared after it, including members defined in other enums."),
         Merged_declaration_0_cannot_include_a_default_export_declaration_Consider_adding_a_separate_export_default_0_declaration_instead: diag(2652, ts.DiagnosticCategory.Error, "Merged_declaration_0_cannot_include_a_default_export_declaration_Consider_adding_a_separate_export_d_2652", "Merged declaration '{0}' cannot include a default export declaration. Consider adding a separate 'export default {0}' declaration instead."),
@@ -8515,6 +8651,13 @@
         Property_0_may_not_be_used_in_a_static_property_s_initializer_in_the_same_class_when_target_is_esnext_and_useDefineForClassFields_is_false: diag(2810, ts.DiagnosticCategory.Error, "Property_0_may_not_be_used_in_a_static_property_s_initializer_in_the_same_class_when_target_is_esnex_2810", "Property '{0}' may not be used in a static property's initializer in the same class when 'target' is 'esnext' and 'useDefineForClassFields' is 'false'."),
         Initializer_for_property_0: diag(2811, ts.DiagnosticCategory.Error, "Initializer_for_property_0_2811", "Initializer for property '{0}'"),
         Property_0_does_not_exist_on_type_1_Try_changing_the_lib_compiler_option_to_include_dom: diag(2812, ts.DiagnosticCategory.Error, "Property_0_does_not_exist_on_type_1_Try_changing_the_lib_compiler_option_to_include_dom_2812", "Property '{0}' does not exist on type '{1}'. Try changing the 'lib' compiler option to include 'dom'."),
+        Class_declaration_cannot_implement_overload_list_for_0: diag(2813, ts.DiagnosticCategory.Error, "Class_declaration_cannot_implement_overload_list_for_0_2813", "Class declaration cannot implement overload list for '{0}'."),
+        Function_with_bodies_can_only_merge_with_classes_that_are_ambient: diag(2814, ts.DiagnosticCategory.Error, "Function_with_bodies_can_only_merge_with_classes_that_are_ambient_2814", "Function with bodies can only merge with classes that are ambient."),
+        arguments_cannot_be_referenced_in_property_initializers: diag(2815, ts.DiagnosticCategory.Error, "arguments_cannot_be_referenced_in_property_initializers_2815", "'arguments' cannot be referenced in property initializers."),
+        Cannot_use_this_in_a_static_property_initializer_of_a_decorated_class: diag(2816, ts.DiagnosticCategory.Error, "Cannot_use_this_in_a_static_property_initializer_of_a_decorated_class_2816", "Cannot use 'this' in a static property initializer of a decorated class."),
+        Property_0_has_no_initializer_and_is_not_definitely_assigned_in_a_class_static_block: diag(2817, ts.DiagnosticCategory.Error, "Property_0_has_no_initializer_and_is_not_definitely_assigned_in_a_class_static_block_2817", "Property '{0}' has no initializer and is not definitely assigned in a class static block."),
+        Duplicate_identifier_0_Compiler_reserves_name_1_when_emitting_super_references_in_static_initializers: diag(2818, ts.DiagnosticCategory.Error, "Duplicate_identifier_0_Compiler_reserves_name_1_when_emitting_super_references_in_static_initializer_2818", "Duplicate identifier '{0}'. Compiler reserves name '{1}' when emitting 'super' references in static initializers."),
+        Namespace_name_cannot_be_0: diag(2819, ts.DiagnosticCategory.Error, "Namespace_name_cannot_be_0_2819", "Namespace name cannot be '{0}'."),
         Import_declaration_0_is_using_private_name_1: diag(4000, ts.DiagnosticCategory.Error, "Import_declaration_0_is_using_private_name_1_4000", "Import declaration '{0}' is using private name '{1}'."),
         Type_parameter_0_of_exported_class_has_or_is_using_private_name_1: diag(4002, ts.DiagnosticCategory.Error, "Type_parameter_0_of_exported_class_has_or_is_using_private_name_1_4002", "Type parameter '{0}' of exported class has or is using private name '{1}'."),
         Type_parameter_0_of_exported_interface_has_or_is_using_private_name_1: diag(4004, ts.DiagnosticCategory.Error, "Type_parameter_0_of_exported_interface_has_or_is_using_private_name_1_4004", "Type parameter '{0}' of exported interface has or is using private name '{1}'."),
@@ -8614,6 +8757,8 @@
         This_member_must_have_an_override_modifier_because_it_overrides_a_member_in_the_base_class_0: diag(4114, ts.DiagnosticCategory.Error, "This_member_must_have_an_override_modifier_because_it_overrides_a_member_in_the_base_class_0_4114", "This member must have an 'override' modifier because it overrides a member in the base class '{0}'."),
         This_parameter_property_must_have_an_override_modifier_because_it_overrides_a_member_in_base_class_0: diag(4115, ts.DiagnosticCategory.Error, "This_parameter_property_must_have_an_override_modifier_because_it_overrides_a_member_in_base_class_0_4115", "This parameter property must have an 'override' modifier because it overrides a member in base class '{0}'."),
         This_member_must_have_an_override_modifier_because_it_overrides_an_abstract_method_that_is_declared_in_the_base_class_0: diag(4116, ts.DiagnosticCategory.Error, "This_member_must_have_an_override_modifier_because_it_overrides_an_abstract_method_that_is_declared__4116", "This member must have an 'override' modifier because it overrides an abstract method that is declared in the base class '{0}'."),
+        This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0_Did_you_mean_1: diag(4117, ts.DiagnosticCategory.Error, "This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0_Did_you__4117", "This member cannot have an 'override' modifier because it is not declared in the base class '{0}'. Did you mean '{1}'?"),
+        The_type_of_this_node_cannot_be_serialized_because_its_property_0_cannot_be_serialized: diag(4118, ts.DiagnosticCategory.Error, "The_type_of_this_node_cannot_be_serialized_because_its_property_0_cannot_be_serialized_4118", "The type of this node cannot be serialized because its property '{0}' cannot be serialized."),
         The_current_host_does_not_support_the_0_option: diag(5001, ts.DiagnosticCategory.Error, "The_current_host_does_not_support_the_0_option_5001", "The current host does not support the '{0}' option."),
         Cannot_find_the_common_subdirectory_path_for_the_input_files: diag(5009, ts.DiagnosticCategory.Error, "Cannot_find_the_common_subdirectory_path_for_the_input_files_5009", "Cannot find the common subdirectory path for the input files."),
         File_specification_cannot_end_in_a_recursive_directory_wildcard_Asterisk_Asterisk_Colon_0: diag(5010, ts.DiagnosticCategory.Error, "File_specification_cannot_end_in_a_recursive_directory_wildcard_Asterisk_Asterisk_Colon_0_5010", "File specification cannot end in a recursive directory wildcard ('**'): '{0}'."),
@@ -8672,7 +8817,7 @@
         Generates_a_sourcemap_for_each_corresponding_d_ts_file: diag(6000, ts.DiagnosticCategory.Message, "Generates_a_sourcemap_for_each_corresponding_d_ts_file_6000", "Generates a sourcemap for each corresponding '.d.ts' file."),
         Concatenate_and_emit_output_to_single_file: diag(6001, ts.DiagnosticCategory.Message, "Concatenate_and_emit_output_to_single_file_6001", "Concatenate and emit output to single file."),
         Generates_corresponding_d_ts_file: diag(6002, ts.DiagnosticCategory.Message, "Generates_corresponding_d_ts_file_6002", "Generates corresponding '.d.ts' file."),
-        Specify_the_location_where_debugger_should_locate_map_files_instead_of_generated_locations: diag(6003, ts.DiagnosticCategory.Message, "Specify_the_location_where_debugger_should_locate_map_files_instead_of_generated_locations_6003", "Specify the location where debugger should locate map files instead of generated locations."),
+        Specify_the_location_where_debugger_should_locate_map_files_instead_of_generated_locations: diag(6655, ts.DiagnosticCategory.Message, "Specify_the_location_where_debugger_should_locate_map_files_instead_of_generated_locations_6655", "Specify the location where debugger should locate map files instead of generated locations."),
         Specify_the_location_where_debugger_should_locate_TypeScript_files_instead_of_source_locations: diag(6004, ts.DiagnosticCategory.Message, "Specify_the_location_where_debugger_should_locate_TypeScript_files_instead_of_source_locations_6004", "Specify the location where debugger should locate TypeScript files instead of source locations."),
         Watch_input_files: diag(6005, ts.DiagnosticCategory.Message, "Watch_input_files_6005", "Watch input files."),
         Redirect_output_structure_to_the_directory: diag(6006, ts.DiagnosticCategory.Message, "Redirect_output_structure_to_the_directory_6006", "Redirect output structure to the directory."),
@@ -8684,8 +8829,8 @@
         Skip_type_checking_of_declaration_files: diag(6012, ts.DiagnosticCategory.Message, "Skip_type_checking_of_declaration_files_6012", "Skip type checking of declaration files."),
         Do_not_resolve_the_real_path_of_symlinks: diag(6013, ts.DiagnosticCategory.Message, "Do_not_resolve_the_real_path_of_symlinks_6013", "Do not resolve the real path of symlinks."),
         Only_emit_d_ts_declaration_files: diag(6014, ts.DiagnosticCategory.Message, "Only_emit_d_ts_declaration_files_6014", "Only emit '.d.ts' declaration files."),
-        Specify_ECMAScript_target_version_Colon_ES3_default_ES5_ES2015_ES2016_ES2017_ES2018_ES2019_ES2020_ES2021_or_ESNEXT: diag(6015, ts.DiagnosticCategory.Message, "Specify_ECMAScript_target_version_Colon_ES3_default_ES5_ES2015_ES2016_ES2017_ES2018_ES2019_ES2020_ES_6015", "Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019', 'ES2020', 'ES2021', or 'ESNEXT'."),
-        Specify_module_code_generation_Colon_none_commonjs_amd_system_umd_es2015_es2020_or_ESNext: diag(6016, ts.DiagnosticCategory.Message, "Specify_module_code_generation_Colon_none_commonjs_amd_system_umd_es2015_es2020_or_ESNext_6016", "Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', 'es2020', or 'ESNext'."),
+        Specify_ECMAScript_target_version: diag(6015, ts.DiagnosticCategory.Message, "Specify_ECMAScript_target_version_6015", "Specify ECMAScript target version."),
+        Specify_module_code_generation: diag(6016, ts.DiagnosticCategory.Message, "Specify_module_code_generation_6016", "Specify module code generation."),
         Print_this_message: diag(6017, ts.DiagnosticCategory.Message, "Print_this_message_6017", "Print this message."),
         Print_the_compiler_s_version: diag(6019, ts.DiagnosticCategory.Message, "Print_the_compiler_s_version_6019", "Print the compiler's version."),
         Compile_the_project_given_the_path_to_its_configuration_file_or_to_a_folder_with_a_tsconfig_json: diag(6020, ts.DiagnosticCategory.Message, "Compile_the_project_given_the_path_to_its_configuration_file_or_to_a_folder_with_a_tsconfig_json_6020", "Compile the project given the path to its configuration file, or to a folder with a 'tsconfig.json'."),
@@ -8737,7 +8882,7 @@
         Do_not_report_errors_on_unreachable_code: diag(6077, ts.DiagnosticCategory.Message, "Do_not_report_errors_on_unreachable_code_6077", "Do not report errors on unreachable code."),
         Disallow_inconsistently_cased_references_to_the_same_file: diag(6078, ts.DiagnosticCategory.Message, "Disallow_inconsistently_cased_references_to_the_same_file_6078", "Disallow inconsistently-cased references to the same file."),
         Specify_library_files_to_be_included_in_the_compilation: diag(6079, ts.DiagnosticCategory.Message, "Specify_library_files_to_be_included_in_the_compilation_6079", "Specify library files to be included in the compilation."),
-        Specify_JSX_code_generation_Colon_preserve_react_native_react_react_jsx_or_react_jsxdev: diag(6080, ts.DiagnosticCategory.Message, "Specify_JSX_code_generation_Colon_preserve_react_native_react_react_jsx_or_react_jsxdev_6080", "Specify JSX code generation: 'preserve', 'react-native', 'react', 'react-jsx' or 'react-jsxdev'."),
+        Specify_JSX_code_generation: diag(6080, ts.DiagnosticCategory.Message, "Specify_JSX_code_generation_6080", "Specify JSX code generation."),
         File_0_has_an_unsupported_extension_so_skipping_it: diag(6081, ts.DiagnosticCategory.Message, "File_0_has_an_unsupported_extension_so_skipping_it_6081", "File '{0}' has an unsupported extension, so skipping it."),
         Only_amd_and_system_modules_are_supported_alongside_0: diag(6082, ts.DiagnosticCategory.Error, "Only_amd_and_system_modules_are_supported_alongside_0_6082", "Only 'amd' and 'system' modules are supported alongside --{0}."),
         Base_directory_to_resolve_non_absolute_module_names: diag(6083, ts.DiagnosticCategory.Message, "Base_directory_to_resolve_non_absolute_module_names_6083", "Base directory to resolve non-absolute module names."),
@@ -8819,7 +8964,7 @@
         List_of_folders_to_include_type_definitions_from: diag(6161, ts.DiagnosticCategory.Message, "List_of_folders_to_include_type_definitions_from_6161", "List of folders to include type definitions from."),
         Disable_size_limitations_on_JavaScript_projects: diag(6162, ts.DiagnosticCategory.Message, "Disable_size_limitations_on_JavaScript_projects_6162", "Disable size limitations on JavaScript projects."),
         The_character_set_of_the_input_files: diag(6163, ts.DiagnosticCategory.Message, "The_character_set_of_the_input_files_6163", "The character set of the input files."),
-        Emit_a_UTF_8_Byte_Order_Mark_BOM_in_the_beginning_of_output_files: diag(6164, ts.DiagnosticCategory.Message, "Emit_a_UTF_8_Byte_Order_Mark_BOM_in_the_beginning_of_output_files_6164", "Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files."),
+        Emit_a_UTF_8_Byte_Order_Mark_BOM_in_the_beginning_of_output_files: diag(6622, ts.DiagnosticCategory.Message, "Emit_a_UTF_8_Byte_Order_Mark_BOM_in_the_beginning_of_output_files_6622", "Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files."),
         Do_not_truncate_error_messages: diag(6165, ts.DiagnosticCategory.Message, "Do_not_truncate_error_messages_6165", "Do not truncate error messages."),
         Output_directory_for_generated_declaration_files: diag(6166, ts.DiagnosticCategory.Message, "Output_directory_for_generated_declaration_files_6166", "Output directory for generated declaration files."),
         A_series_of_entries_which_re_map_imports_to_lookup_locations_relative_to_the_baseUrl: diag(6167, ts.DiagnosticCategory.Message, "A_series_of_entries_which_re_map_imports_to_lookup_locations_relative_to_the_baseUrl_6167", "A series of entries which re-map imports to lookup locations relative to the 'baseUrl'."),
@@ -8827,20 +8972,12 @@
         Show_all_compiler_options: diag(6169, ts.DiagnosticCategory.Message, "Show_all_compiler_options_6169", "Show all compiler options."),
         Deprecated_Use_outFile_instead_Concatenate_and_emit_output_to_single_file: diag(6170, ts.DiagnosticCategory.Message, "Deprecated_Use_outFile_instead_Concatenate_and_emit_output_to_single_file_6170", "[Deprecated] Use '--outFile' instead. Concatenate and emit output to single file"),
         Command_line_Options: diag(6171, ts.DiagnosticCategory.Message, "Command_line_Options_6171", "Command-line Options"),
-        Basic_Options: diag(6172, ts.DiagnosticCategory.Message, "Basic_Options_6172", "Basic Options"),
-        Strict_Type_Checking_Options: diag(6173, ts.DiagnosticCategory.Message, "Strict_Type_Checking_Options_6173", "Strict Type-Checking Options"),
-        Module_Resolution_Options: diag(6174, ts.DiagnosticCategory.Message, "Module_Resolution_Options_6174", "Module Resolution Options"),
-        Source_Map_Options: diag(6175, ts.DiagnosticCategory.Message, "Source_Map_Options_6175", "Source Map Options"),
-        Additional_Checks: diag(6176, ts.DiagnosticCategory.Message, "Additional_Checks_6176", "Additional Checks"),
-        Experimental_Options: diag(6177, ts.DiagnosticCategory.Message, "Experimental_Options_6177", "Experimental Options"),
-        Advanced_Options: diag(6178, ts.DiagnosticCategory.Message, "Advanced_Options_6178", "Advanced Options"),
         Provide_full_support_for_iterables_in_for_of_spread_and_destructuring_when_targeting_ES5_or_ES3: diag(6179, ts.DiagnosticCategory.Message, "Provide_full_support_for_iterables_in_for_of_spread_and_destructuring_when_targeting_ES5_or_ES3_6179", "Provide full support for iterables in 'for-of', spread, and destructuring when targeting 'ES5' or 'ES3'."),
         Enable_all_strict_type_checking_options: diag(6180, ts.DiagnosticCategory.Message, "Enable_all_strict_type_checking_options_6180", "Enable all strict type-checking options."),
         List_of_language_service_plugins: diag(6181, ts.DiagnosticCategory.Message, "List_of_language_service_plugins_6181", "List of language service plugins."),
         Scoped_package_detected_looking_in_0: diag(6182, ts.DiagnosticCategory.Message, "Scoped_package_detected_looking_in_0_6182", "Scoped package detected, looking in '{0}'"),
-        Reusing_resolution_of_module_0_to_file_1_from_old_program: diag(6183, ts.DiagnosticCategory.Message, "Reusing_resolution_of_module_0_to_file_1_from_old_program_6183", "Reusing resolution of module '{0}' to file '{1}' from old program."),
-        Reusing_module_resolutions_originating_in_0_since_resolutions_are_unchanged_from_old_program: diag(6184, ts.DiagnosticCategory.Message, "Reusing_module_resolutions_originating_in_0_since_resolutions_are_unchanged_from_old_program_6184", "Reusing module resolutions originating in '{0}' since resolutions are unchanged from old program."),
-        Disable_strict_checking_of_generic_signatures_in_function_types: diag(6185, ts.DiagnosticCategory.Message, "Disable_strict_checking_of_generic_signatures_in_function_types_6185", "Disable strict checking of generic signatures in function types."),
+        Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2: diag(6183, ts.DiagnosticCategory.Message, "Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2_6183", "Reusing resolution of module '{0}' from '{1}' of old program, it was successfully resolved to '{2}'."),
+        Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2_with_Package_ID_3: diag(6184, ts.DiagnosticCategory.Message, "Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2_with_Package__6184", "Reusing resolution of module '{0}' from '{1}' of old program, it was successfully resolved to '{2}' with Package ID '{3}'."),
         Enable_strict_checking_of_function_types: diag(6186, ts.DiagnosticCategory.Message, "Enable_strict_checking_of_function_types_6186", "Enable strict checking of function types."),
         Enable_strict_checking_of_property_initialization_in_classes: diag(6187, ts.DiagnosticCategory.Message, "Enable_strict_checking_of_property_initialization_in_classes_6187", "Enable strict checking of property initialization in classes."),
         Numeric_separators_are_not_allowed_here: diag(6188, ts.DiagnosticCategory.Error, "Numeric_separators_are_not_allowed_here_6188", "Numeric separators are not allowed here."),
@@ -8882,7 +9019,6 @@
         Specify_strategy_for_watching_file_Colon_FixedPollingInterval_default_PriorityPollingInterval_DynamicPriorityPolling_FixedChunkSizePolling_UseFsEvents_UseFsEventsOnParentDirectory: diag(6225, ts.DiagnosticCategory.Message, "Specify_strategy_for_watching_file_Colon_FixedPollingInterval_default_PriorityPollingInterval_Dynami_6225", "Specify strategy for watching file: 'FixedPollingInterval' (default), 'PriorityPollingInterval', 'DynamicPriorityPolling', 'FixedChunkSizePolling', 'UseFsEvents', 'UseFsEventsOnParentDirectory'."),
         Specify_strategy_for_watching_directory_on_platforms_that_don_t_support_recursive_watching_natively_Colon_UseFsEvents_default_FixedPollingInterval_DynamicPriorityPolling_FixedChunkSizePolling: diag(6226, ts.DiagnosticCategory.Message, "Specify_strategy_for_watching_directory_on_platforms_that_don_t_support_recursive_watching_natively__6226", "Specify strategy for watching directory on platforms that don't support recursive watching natively: 'UseFsEvents' (default), 'FixedPollingInterval', 'DynamicPriorityPolling', 'FixedChunkSizePolling'."),
         Specify_strategy_for_creating_a_polling_watch_when_it_fails_to_create_using_file_system_events_Colon_FixedInterval_default_PriorityInterval_DynamicPriority_FixedChunkSize: diag(6227, ts.DiagnosticCategory.Message, "Specify_strategy_for_creating_a_polling_watch_when_it_fails_to_create_using_file_system_events_Colon_6227", "Specify strategy for creating a polling watch when it fails to create using file system events: 'FixedInterval' (default), 'PriorityInterval', 'DynamicPriority', 'FixedChunkSize'."),
-        Synchronously_call_callbacks_and_update_the_state_of_directory_watchers_on_platforms_that_don_t_support_recursive_watching_natively: diag(6228, ts.DiagnosticCategory.Message, "Synchronously_call_callbacks_and_update_the_state_of_directory_watchers_on_platforms_that_don_t_supp_6228", "Synchronously call callbacks and update the state of directory watchers on platforms that don't support recursive watching natively."),
         Tag_0_expects_at_least_1_arguments_but_the_JSX_factory_2_provides_at_most_3: diag(6229, ts.DiagnosticCategory.Error, "Tag_0_expects_at_least_1_arguments_but_the_JSX_factory_2_provides_at_most_3_6229", "Tag '{0}' expects at least '{1}' arguments, but the JSX factory '{2}' provides at most '{3}'."),
         Option_0_can_only_be_specified_in_tsconfig_json_file_or_set_to_false_or_null_on_command_line: diag(6230, ts.DiagnosticCategory.Error, "Option_0_can_only_be_specified_in_tsconfig_json_file_or_set_to_false_or_null_on_command_line_6230", "Option '{0}' can only be specified in 'tsconfig.json' file or set to 'false' or 'null' on command line."),
         Could_not_resolve_the_path_0_with_the_extensions_Colon_1: diag(6231, ts.DiagnosticCategory.Error, "Could_not_resolve_the_path_0_with_the_extensions_Colon_1_6231", "Could not resolve the path '{0}' with the extensions: {1}."),
@@ -8897,6 +9033,21 @@
         File_0_does_not_exist_according_to_earlier_cached_lookups: diag(6240, ts.DiagnosticCategory.Message, "File_0_does_not_exist_according_to_earlier_cached_lookups_6240", "File '{0}' does not exist according to earlier cached lookups."),
         Resolution_for_type_reference_directive_0_was_found_in_cache_from_location_1: diag(6241, ts.DiagnosticCategory.Message, "Resolution_for_type_reference_directive_0_was_found_in_cache_from_location_1_6241", "Resolution for type reference directive '{0}' was found in cache from location '{1}'."),
         Resolving_type_reference_directive_0_containing_file_1: diag(6242, ts.DiagnosticCategory.Message, "Resolving_type_reference_directive_0_containing_file_1_6242", "======== Resolving type reference directive '{0}', containing file '{1}'. ========"),
+        Interpret_optional_property_types_as_written_rather_than_adding_undefined: diag(6243, ts.DiagnosticCategory.Message, "Interpret_optional_property_types_as_written_rather_than_adding_undefined_6243", "Interpret optional property types as written, rather than adding 'undefined'."),
+        Modules: diag(6244, ts.DiagnosticCategory.Message, "Modules_6244", "Modules"),
+        File_Management: diag(6245, ts.DiagnosticCategory.Message, "File_Management_6245", "File Management"),
+        Emit: diag(6246, ts.DiagnosticCategory.Message, "Emit_6246", "Emit"),
+        JavaScript_Support: diag(6247, ts.DiagnosticCategory.Message, "JavaScript_Support_6247", "JavaScript Support"),
+        Type_Checking: diag(6248, ts.DiagnosticCategory.Message, "Type_Checking_6248", "Type Checking"),
+        Editor_Support: diag(6249, ts.DiagnosticCategory.Message, "Editor_Support_6249", "Editor Support"),
+        Watch_and_Build_Modes: diag(6250, ts.DiagnosticCategory.Message, "Watch_and_Build_Modes_6250", "Watch and Build Modes"),
+        Compiler_Diagnostics: diag(6251, ts.DiagnosticCategory.Message, "Compiler_Diagnostics_6251", "Compiler Diagnostics"),
+        Interop_Constraints: diag(6252, ts.DiagnosticCategory.Message, "Interop_Constraints_6252", "Interop Constraints"),
+        Backwards_Compatibility: diag(6253, ts.DiagnosticCategory.Message, "Backwards_Compatibility_6253", "Backwards Compatibility"),
+        Language_and_Environment: diag(6254, ts.DiagnosticCategory.Message, "Language_and_Environment_6254", "Language and Environment"),
+        Projects: diag(6255, ts.DiagnosticCategory.Message, "Projects_6255", "Projects"),
+        Output_Formatting: diag(6256, ts.DiagnosticCategory.Message, "Output_Formatting_6256", "Output Formatting"),
+        Completeness: diag(6257, ts.DiagnosticCategory.Message, "Completeness_6257", "Completeness"),
         Projects_to_reference: diag(6300, ts.DiagnosticCategory.Message, "Projects_to_reference_6300", "Projects to reference"),
         Enable_project_compilation: diag(6302, ts.DiagnosticCategory.Message, "Enable_project_compilation_6302", "Enable project compilation"),
         Composite_projects_may_not_disable_declaration_emit: diag(6304, ts.DiagnosticCategory.Error, "Composite_projects_may_not_disable_declaration_emit_6304", "Composite projects may not disable declaration emit."),
@@ -8922,9 +9073,7 @@
         Project_0_can_t_be_built_because_its_dependency_1_has_errors: diag(6363, ts.DiagnosticCategory.Message, "Project_0_can_t_be_built_because_its_dependency_1_has_errors_6363", "Project '{0}' can't be built because its dependency '{1}' has errors"),
         Build_one_or_more_projects_and_their_dependencies_if_out_of_date: diag(6364, ts.DiagnosticCategory.Message, "Build_one_or_more_projects_and_their_dependencies_if_out_of_date_6364", "Build one or more projects and their dependencies, if out of date"),
         Delete_the_outputs_of_all_projects: diag(6365, ts.DiagnosticCategory.Message, "Delete_the_outputs_of_all_projects_6365", "Delete the outputs of all projects"),
-        Enable_verbose_logging: diag(6366, ts.DiagnosticCategory.Message, "Enable_verbose_logging_6366", "Enable verbose logging"),
         Show_what_would_be_built_or_deleted_if_specified_with_clean: diag(6367, ts.DiagnosticCategory.Message, "Show_what_would_be_built_or_deleted_if_specified_with_clean_6367", "Show what would be built (or deleted, if specified with '--clean')"),
-        Build_all_projects_including_those_that_appear_to_be_up_to_date: diag(6368, ts.DiagnosticCategory.Message, "Build_all_projects_including_those_that_appear_to_be_up_to_date_6368", "Build all projects, including those that appear to be up to date"),
         Option_build_must_be_the_first_command_line_argument: diag(6369, ts.DiagnosticCategory.Error, "Option_build_must_be_the_first_command_line_argument_6369", "Option '--build' must be the first command line argument."),
         Options_0_and_1_cannot_be_combined: diag(6370, ts.DiagnosticCategory.Error, "Options_0_and_1_cannot_be_combined_6370", "Options '{0}' and '{1}' cannot be combined."),
         Updating_unchanged_output_timestamps_of_project_0: diag(6371, ts.DiagnosticCategory.Message, "Updating_unchanged_output_timestamps_of_project_0_6371", "Updating unchanged output timestamps of project '{0}'..."),
@@ -8945,15 +9094,167 @@
         Performance_timings_for_diagnostics_or_extendedDiagnostics_are_not_available_in_this_session_A_native_implementation_of_the_Web_Performance_API_could_not_be_found: diag(6386, ts.DiagnosticCategory.Message, "Performance_timings_for_diagnostics_or_extendedDiagnostics_are_not_available_in_this_session_A_nativ_6386", "Performance timings for '--diagnostics' or '--extendedDiagnostics' are not available in this session. A native implementation of the Web Performance API could not be found."),
         The_signature_0_of_1_is_deprecated: diag(6387, ts.DiagnosticCategory.Suggestion, "The_signature_0_of_1_is_deprecated_6387", "The signature '{0}' of '{1}' is deprecated.", /*reportsUnnecessary*/ undefined, /*elidedInCompatabilityPyramid*/ undefined, /*reportsDeprecated*/ true),
         Project_0_is_being_forcibly_rebuilt: diag(6388, ts.DiagnosticCategory.Message, "Project_0_is_being_forcibly_rebuilt_6388", "Project '{0}' is being forcibly rebuilt"),
+        Reusing_resolution_of_module_0_from_1_of_old_program_it_was_not_resolved: diag(6389, ts.DiagnosticCategory.Message, "Reusing_resolution_of_module_0_from_1_of_old_program_it_was_not_resolved_6389", "Reusing resolution of module '{0}' from '{1}' of old program, it was not resolved."),
+        Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved_to_2: diag(6390, ts.DiagnosticCategory.Message, "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved__6390", "Reusing resolution of type reference directive '{0}' from '{1}' of old program, it was successfully resolved to '{2}'."),
+        Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved_to_2_with_Package_ID_3: diag(6391, ts.DiagnosticCategory.Message, "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved__6391", "Reusing resolution of type reference directive '{0}' from '{1}' of old program, it was successfully resolved to '{2}' with Package ID '{3}'."),
+        Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_not_resolved: diag(6392, ts.DiagnosticCategory.Message, "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_not_resolved_6392", "Reusing resolution of type reference directive '{0}' from '{1}' of old program, it was not resolved."),
+        Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_3: diag(6393, ts.DiagnosticCategory.Message, "Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_6393", "Reusing resolution of module '{0}' from '{1}' found in cache from location '{2}', it was successfully resolved to '{3}'."),
+        Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_3_with_Package_ID_4: diag(6394, ts.DiagnosticCategory.Message, "Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_6394", "Reusing resolution of module '{0}' from '{1}' found in cache from location '{2}', it was successfully resolved to '{3}' with Package ID '{4}'."),
+        Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_not_resolved: diag(6395, ts.DiagnosticCategory.Message, "Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_not_resolved_6395", "Reusing resolution of module '{0}' from '{1}' found in cache from location '{2}', it was not resolved."),
+        Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_3: diag(6396, ts.DiagnosticCategory.Message, "Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_succes_6396", "Reusing resolution of type reference directive '{0}' from '{1}' found in cache from location '{2}', it was successfully resolved to '{3}'."),
+        Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_3_with_Package_ID_4: diag(6397, ts.DiagnosticCategory.Message, "Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_succes_6397", "Reusing resolution of type reference directive '{0}' from '{1}' found in cache from location '{2}', it was successfully resolved to '{3}' with Package ID '{4}'."),
+        Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_not_resolved: diag(6398, ts.DiagnosticCategory.Message, "Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_not_re_6398", "Reusing resolution of type reference directive '{0}' from '{1}' found in cache from location '{2}', it was not resolved."),
         The_expected_type_comes_from_property_0_which_is_declared_here_on_type_1: diag(6500, ts.DiagnosticCategory.Message, "The_expected_type_comes_from_property_0_which_is_declared_here_on_type_1_6500", "The expected type comes from property '{0}' which is declared here on type '{1}'"),
         The_expected_type_comes_from_this_index_signature: diag(6501, ts.DiagnosticCategory.Message, "The_expected_type_comes_from_this_index_signature_6501", "The expected type comes from this index signature."),
         The_expected_type_comes_from_the_return_type_of_this_signature: diag(6502, ts.DiagnosticCategory.Message, "The_expected_type_comes_from_the_return_type_of_this_signature_6502", "The expected type comes from the return type of this signature."),
         Print_names_of_files_that_are_part_of_the_compilation_and_then_stop_processing: diag(6503, ts.DiagnosticCategory.Message, "Print_names_of_files_that_are_part_of_the_compilation_and_then_stop_processing_6503", "Print names of files that are part of the compilation and then stop processing."),
         File_0_is_a_JavaScript_file_Did_you_mean_to_enable_the_allowJs_option: diag(6504, ts.DiagnosticCategory.Error, "File_0_is_a_JavaScript_file_Did_you_mean_to_enable_the_allowJs_option_6504", "File '{0}' is a JavaScript file. Did you mean to enable the 'allowJs' option?"),
         Print_names_of_files_and_the_reason_they_are_part_of_the_compilation: diag(6505, ts.DiagnosticCategory.Message, "Print_names_of_files_and_the_reason_they_are_part_of_the_compilation_6505", "Print names of files and the reason they are part of the compilation."),
-        Include_undefined_in_index_signature_results: diag(6800, ts.DiagnosticCategory.Message, "Include_undefined_in_index_signature_results_6800", "Include 'undefined' in index signature results"),
-        Ensure_overriding_members_in_derived_classes_are_marked_with_an_override_modifier: diag(6801, ts.DiagnosticCategory.Message, "Ensure_overriding_members_in_derived_classes_are_marked_with_an_override_modifier_6801", "Ensure overriding members in derived classes are marked with an 'override' modifier."),
-        Require_undeclared_properties_from_index_signatures_to_use_element_accesses: diag(6802, ts.DiagnosticCategory.Message, "Require_undeclared_properties_from_index_signatures_to_use_element_accesses_6802", "Require undeclared properties from index signatures to use element accesses."),
+        Consider_adding_a_declare_modifier_to_this_class: diag(6506, ts.DiagnosticCategory.Message, "Consider_adding_a_declare_modifier_to_this_class_6506", "Consider adding a 'declare' modifier to this class."),
+        Allow_JavaScript_files_to_be_a_part_of_your_program_Use_the_checkJS_option_to_get_errors_from_these_files: diag(6600, ts.DiagnosticCategory.Message, "Allow_JavaScript_files_to_be_a_part_of_your_program_Use_the_checkJS_option_to_get_errors_from_these__6600", "Allow JavaScript files to be a part of your program. Use the `checkJS` option to get errors from these files."),
+        Allow_import_x_from_y_when_a_module_doesn_t_have_a_default_export: diag(6601, ts.DiagnosticCategory.Message, "Allow_import_x_from_y_when_a_module_doesn_t_have_a_default_export_6601", "Allow 'import x from y' when a module doesn't have a default export."),
+        Allow_accessing_UMD_globals_from_modules: diag(6602, ts.DiagnosticCategory.Message, "Allow_accessing_UMD_globals_from_modules_6602", "Allow accessing UMD globals from modules."),
+        Disable_error_reporting_for_unreachable_code: diag(6603, ts.DiagnosticCategory.Message, "Disable_error_reporting_for_unreachable_code_6603", "Disable error reporting for unreachable code."),
+        Disable_error_reporting_for_unused_labels: diag(6604, ts.DiagnosticCategory.Message, "Disable_error_reporting_for_unused_labels_6604", "Disable error reporting for unused labels."),
+        Ensure_use_strict_is_always_emitted: diag(6605, ts.DiagnosticCategory.Message, "Ensure_use_strict_is_always_emitted_6605", "Ensure 'use strict' is always emitted."),
+        Have_recompiles_in_projects_that_use_incremental_and_watch_mode_assume_that_changes_within_a_file_will_only_affect_files_directly_depending_on_it: diag(6606, ts.DiagnosticCategory.Message, "Have_recompiles_in_projects_that_use_incremental_and_watch_mode_assume_that_changes_within_a_file_wi_6606", "Have recompiles in projects that use `incremental` and `watch` mode assume that changes within a file will only affect files directly depending on it."),
+        Specify_the_base_directory_to_resolve_non_relative_module_names: diag(6607, ts.DiagnosticCategory.Message, "Specify_the_base_directory_to_resolve_non_relative_module_names_6607", "Specify the base directory to resolve non-relative module names."),
+        No_longer_supported_In_early_versions_manually_set_the_text_encoding_for_reading_files: diag(6608, ts.DiagnosticCategory.Message, "No_longer_supported_In_early_versions_manually_set_the_text_encoding_for_reading_files_6608", "No longer supported. In early versions, manually set the text encoding for reading files."),
+        Enable_error_reporting_in_type_checked_JavaScript_files: diag(6609, ts.DiagnosticCategory.Message, "Enable_error_reporting_in_type_checked_JavaScript_files_6609", "Enable error reporting in type-checked JavaScript files."),
+        Enable_constraints_that_allow_a_TypeScript_project_to_be_used_with_project_references: diag(6611, ts.DiagnosticCategory.Message, "Enable_constraints_that_allow_a_TypeScript_project_to_be_used_with_project_references_6611", "Enable constraints that allow a TypeScript project to be used with project references."),
+        Generate_d_ts_files_from_TypeScript_and_JavaScript_files_in_your_project: diag(6612, ts.DiagnosticCategory.Message, "Generate_d_ts_files_from_TypeScript_and_JavaScript_files_in_your_project_6612", "Generate .d.ts files from TypeScript and JavaScript files in your project."),
+        Specify_the_output_directory_for_generated_declaration_files: diag(6613, ts.DiagnosticCategory.Message, "Specify_the_output_directory_for_generated_declaration_files_6613", "Specify the output directory for generated declaration files."),
+        Create_sourcemaps_for_d_ts_files: diag(6614, ts.DiagnosticCategory.Message, "Create_sourcemaps_for_d_ts_files_6614", "Create sourcemaps for d.ts files."),
+        Output_compiler_performance_information_after_building: diag(6615, ts.DiagnosticCategory.Message, "Output_compiler_performance_information_after_building_6615", "Output compiler performance information after building."),
+        Disables_inference_for_type_acquisition_by_looking_at_filenames_in_a_project: diag(6616, ts.DiagnosticCategory.Message, "Disables_inference_for_type_acquisition_by_looking_at_filenames_in_a_project_6616", "Disables inference for type acquisition by looking at filenames in a project."),
+        Reduce_the_number_of_projects_loaded_automatically_by_TypeScript: diag(6617, ts.DiagnosticCategory.Message, "Reduce_the_number_of_projects_loaded_automatically_by_TypeScript_6617", "Reduce the number of projects loaded automatically by TypeScript."),
+        Remove_the_20mb_cap_on_total_source_code_size_for_JavaScript_files_in_the_TypeScript_language_server: diag(6618, ts.DiagnosticCategory.Message, "Remove_the_20mb_cap_on_total_source_code_size_for_JavaScript_files_in_the_TypeScript_language_server_6618", "Remove the 20mb cap on total source code size for JavaScript files in the TypeScript language server."),
+        Opt_a_project_out_of_multi_project_reference_checking_when_editing: diag(6619, ts.DiagnosticCategory.Message, "Opt_a_project_out_of_multi_project_reference_checking_when_editing_6619", "Opt a project out of multi-project reference checking when editing."),
+        Disable_preferring_source_files_instead_of_declaration_files_when_referencing_composite_projects: diag(6620, ts.DiagnosticCategory.Message, "Disable_preferring_source_files_instead_of_declaration_files_when_referencing_composite_projects_6620", "Disable preferring source files instead of declaration files when referencing composite projects"),
+        Emit_more_compliant_but_verbose_and_less_performant_JavaScript_for_iteration: diag(6621, ts.DiagnosticCategory.Message, "Emit_more_compliant_but_verbose_and_less_performant_JavaScript_for_iteration_6621", "Emit more compliant, but verbose and less performant JavaScript for iteration."),
+        Only_output_d_ts_files_and_not_JavaScript_files: diag(6623, ts.DiagnosticCategory.Message, "Only_output_d_ts_files_and_not_JavaScript_files_6623", "Only output d.ts files and not JavaScript files."),
+        Emit_design_type_metadata_for_decorated_declarations_in_source_files: diag(6624, ts.DiagnosticCategory.Message, "Emit_design_type_metadata_for_decorated_declarations_in_source_files_6624", "Emit design-type metadata for decorated declarations in source files."),
+        Disable_the_type_acquisition_for_JavaScript_projects: diag(6625, ts.DiagnosticCategory.Message, "Disable_the_type_acquisition_for_JavaScript_projects_6625", "Disable the type acquisition for JavaScript projects"),
+        Emit_additional_JavaScript_to_ease_support_for_importing_CommonJS_modules_This_enables_allowSyntheticDefaultImports_for_type_compatibility: diag(6626, ts.DiagnosticCategory.Message, "Emit_additional_JavaScript_to_ease_support_for_importing_CommonJS_modules_This_enables_allowSyntheti_6626", "Emit additional JavaScript to ease support for importing CommonJS modules. This enables `allowSyntheticDefaultImports` for type compatibility."),
+        Filters_results_from_the_include_option: diag(6627, ts.DiagnosticCategory.Message, "Filters_results_from_the_include_option_6627", "Filters results from the `include` option."),
+        Remove_a_list_of_directories_from_the_watch_process: diag(6628, ts.DiagnosticCategory.Message, "Remove_a_list_of_directories_from_the_watch_process_6628", "Remove a list of directories from the watch process."),
+        Remove_a_list_of_files_from_the_watch_mode_s_processing: diag(6629, ts.DiagnosticCategory.Message, "Remove_a_list_of_files_from_the_watch_mode_s_processing_6629", "Remove a list of files from the watch mode's processing."),
+        Enable_experimental_support_for_TC39_stage_2_draft_decorators: diag(6630, ts.DiagnosticCategory.Message, "Enable_experimental_support_for_TC39_stage_2_draft_decorators_6630", "Enable experimental support for TC39 stage 2 draft decorators."),
+        Print_files_read_during_the_compilation_including_why_it_was_included: diag(6631, ts.DiagnosticCategory.Message, "Print_files_read_during_the_compilation_including_why_it_was_included_6631", "Print files read during the compilation including why it was included."),
+        Output_more_detailed_compiler_performance_information_after_building: diag(6632, ts.DiagnosticCategory.Message, "Output_more_detailed_compiler_performance_information_after_building_6632", "Output more detailed compiler performance information after building."),
+        Specify_one_or_more_path_or_node_module_references_to_base_configuration_files_from_which_settings_are_inherited: diag(6633, ts.DiagnosticCategory.Message, "Specify_one_or_more_path_or_node_module_references_to_base_configuration_files_from_which_settings_a_6633", "Specify one or more path or node module references to base configuration files from which settings are inherited."),
+        Specify_what_approach_the_watcher_should_use_if_the_system_runs_out_of_native_file_watchers: diag(6634, ts.DiagnosticCategory.Message, "Specify_what_approach_the_watcher_should_use_if_the_system_runs_out_of_native_file_watchers_6634", "Specify what approach the watcher should use if the system runs out of native file watchers."),
+        Include_a_list_of_files_This_does_not_support_glob_patterns_as_opposed_to_include: diag(6635, ts.DiagnosticCategory.Message, "Include_a_list_of_files_This_does_not_support_glob_patterns_as_opposed_to_include_6635", "Include a list of files. This does not support glob patterns, as opposed to `include`."),
+        Build_all_projects_including_those_that_appear_to_be_up_to_date: diag(6636, ts.DiagnosticCategory.Message, "Build_all_projects_including_those_that_appear_to_be_up_to_date_6636", "Build all projects, including those that appear to be up to date"),
+        Ensure_that_casing_is_correct_in_imports: diag(6637, ts.DiagnosticCategory.Message, "Ensure_that_casing_is_correct_in_imports_6637", "Ensure that casing is correct in imports."),
+        Emit_a_v8_CPU_profile_of_the_compiler_run_for_debugging: diag(6638, ts.DiagnosticCategory.Message, "Emit_a_v8_CPU_profile_of_the_compiler_run_for_debugging_6638", "Emit a v8 CPU profile of the compiler run for debugging."),
+        Allow_importing_helper_functions_from_tslib_once_per_project_instead_of_including_them_per_file: diag(6639, ts.DiagnosticCategory.Message, "Allow_importing_helper_functions_from_tslib_once_per_project_instead_of_including_them_per_file_6639", "Allow importing helper functions from tslib once per project, instead of including them per-file."),
+        Specify_a_list_of_glob_patterns_that_match_files_to_be_included_in_compilation: diag(6641, ts.DiagnosticCategory.Message, "Specify_a_list_of_glob_patterns_that_match_files_to_be_included_in_compilation_6641", "Specify a list of glob patterns that match files to be included in compilation."),
+        Save_tsbuildinfo_files_to_allow_for_incremental_compilation_of_projects: diag(6642, ts.DiagnosticCategory.Message, "Save_tsbuildinfo_files_to_allow_for_incremental_compilation_of_projects_6642", "Save .tsbuildinfo files to allow for incremental compilation of projects."),
+        Include_sourcemap_files_inside_the_emitted_JavaScript: diag(6643, ts.DiagnosticCategory.Message, "Include_sourcemap_files_inside_the_emitted_JavaScript_6643", "Include sourcemap files inside the emitted JavaScript."),
+        Include_source_code_in_the_sourcemaps_inside_the_emitted_JavaScript: diag(6644, ts.DiagnosticCategory.Message, "Include_source_code_in_the_sourcemaps_inside_the_emitted_JavaScript_6644", "Include source code in the sourcemaps inside the emitted JavaScript."),
+        Ensure_that_each_file_can_be_safely_transpiled_without_relying_on_other_imports: diag(6645, ts.DiagnosticCategory.Message, "Ensure_that_each_file_can_be_safely_transpiled_without_relying_on_other_imports_6645", "Ensure that each file can be safely transpiled without relying on other imports."),
+        Specify_what_JSX_code_is_generated: diag(6646, ts.DiagnosticCategory.Message, "Specify_what_JSX_code_is_generated_6646", "Specify what JSX code is generated."),
+        Specify_the_JSX_factory_function_used_when_targeting_React_JSX_emit_e_g_React_createElement_or_h: diag(6647, ts.DiagnosticCategory.Message, "Specify_the_JSX_factory_function_used_when_targeting_React_JSX_emit_e_g_React_createElement_or_h_6647", "Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'"),
+        Specify_the_JSX_Fragment_reference_used_for_fragments_when_targeting_React_JSX_emit_e_g_React_Fragment_or_Fragment: diag(6648, ts.DiagnosticCategory.Message, "Specify_the_JSX_Fragment_reference_used_for_fragments_when_targeting_React_JSX_emit_e_g_React_Fragme_6648", "Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'."),
+        Specify_module_specifier_used_to_import_the_JSX_factory_functions_when_using_jsx_Colon_react_jsx_Asterisk: diag(6649, ts.DiagnosticCategory.Message, "Specify_module_specifier_used_to_import_the_JSX_factory_functions_when_using_jsx_Colon_react_jsx_Ast_6649", "Specify module specifier used to import the JSX factory functions when using `jsx: react-jsx*`.`"),
+        Make_keyof_only_return_strings_instead_of_string_numbers_or_symbols_Legacy_option: diag(6650, ts.DiagnosticCategory.Message, "Make_keyof_only_return_strings_instead_of_string_numbers_or_symbols_Legacy_option_6650", "Make keyof only return strings instead of string, numbers or symbols. Legacy option."),
+        Specify_a_set_of_bundled_library_declaration_files_that_describe_the_target_runtime_environment: diag(6651, ts.DiagnosticCategory.Message, "Specify_a_set_of_bundled_library_declaration_files_that_describe_the_target_runtime_environment_6651", "Specify a set of bundled library declaration files that describe the target runtime environment."),
+        Print_the_names_of_emitted_files_after_a_compilation: diag(6652, ts.DiagnosticCategory.Message, "Print_the_names_of_emitted_files_after_a_compilation_6652", "Print the names of emitted files after a compilation."),
+        Print_all_of_the_files_read_during_the_compilation: diag(6653, ts.DiagnosticCategory.Message, "Print_all_of_the_files_read_during_the_compilation_6653", "Print all of the files read during the compilation."),
+        Set_the_language_of_the_messaging_from_TypeScript_This_does_not_affect_emit: diag(6654, ts.DiagnosticCategory.Message, "Set_the_language_of_the_messaging_from_TypeScript_This_does_not_affect_emit_6654", "Set the language of the messaging from TypeScript. This does not affect emit."),
+        Specify_the_maximum_folder_depth_used_for_checking_JavaScript_files_from_node_modules_Only_applicable_with_allowJs: diag(6656, ts.DiagnosticCategory.Message, "Specify_the_maximum_folder_depth_used_for_checking_JavaScript_files_from_node_modules_Only_applicabl_6656", "Specify the maximum folder depth used for checking JavaScript files from `node_modules`. Only applicable with `allowJs`."),
+        Specify_what_module_code_is_generated: diag(6657, ts.DiagnosticCategory.Message, "Specify_what_module_code_is_generated_6657", "Specify what module code is generated."),
+        Specify_how_TypeScript_looks_up_a_file_from_a_given_module_specifier: diag(6658, ts.DiagnosticCategory.Message, "Specify_how_TypeScript_looks_up_a_file_from_a_given_module_specifier_6658", "Specify how TypeScript looks up a file from a given module specifier."),
+        Set_the_newline_character_for_emitting_files: diag(6659, ts.DiagnosticCategory.Message, "Set_the_newline_character_for_emitting_files_6659", "Set the newline character for emitting files."),
+        Disable_emitting_files_from_a_compilation: diag(6660, ts.DiagnosticCategory.Message, "Disable_emitting_files_from_a_compilation_6660", "Disable emitting files from a compilation."),
+        Disable_generating_custom_helper_functions_like_extends_in_compiled_output: diag(6661, ts.DiagnosticCategory.Message, "Disable_generating_custom_helper_functions_like_extends_in_compiled_output_6661", "Disable generating custom helper functions like `__extends` in compiled output."),
+        Disable_emitting_files_if_any_type_checking_errors_are_reported: diag(6662, ts.DiagnosticCategory.Message, "Disable_emitting_files_if_any_type_checking_errors_are_reported_6662", "Disable emitting files if any type checking errors are reported."),
+        Disable_truncating_types_in_error_messages: diag(6663, ts.DiagnosticCategory.Message, "Disable_truncating_types_in_error_messages_6663", "Disable truncating types in error messages."),
+        Enable_error_reporting_for_fallthrough_cases_in_switch_statements: diag(6664, ts.DiagnosticCategory.Message, "Enable_error_reporting_for_fallthrough_cases_in_switch_statements_6664", "Enable error reporting for fallthrough cases in switch statements."),
+        Enable_error_reporting_for_expressions_and_declarations_with_an_implied_any_type: diag(6665, ts.DiagnosticCategory.Message, "Enable_error_reporting_for_expressions_and_declarations_with_an_implied_any_type_6665", "Enable error reporting for expressions and declarations with an implied `any` type.."),
+        Ensure_overriding_members_in_derived_classes_are_marked_with_an_override_modifier: diag(6666, ts.DiagnosticCategory.Message, "Ensure_overriding_members_in_derived_classes_are_marked_with_an_override_modifier_6666", "Ensure overriding members in derived classes are marked with an override modifier."),
+        Enable_error_reporting_for_codepaths_that_do_not_explicitly_return_in_a_function: diag(6667, ts.DiagnosticCategory.Message, "Enable_error_reporting_for_codepaths_that_do_not_explicitly_return_in_a_function_6667", "Enable error reporting for codepaths that do not explicitly return in a function."),
+        Enable_error_reporting_when_this_is_given_the_type_any: diag(6668, ts.DiagnosticCategory.Message, "Enable_error_reporting_when_this_is_given_the_type_any_6668", "Enable error reporting when `this` is given the type `any`."),
+        Disable_adding_use_strict_directives_in_emitted_JavaScript_files: diag(6669, ts.DiagnosticCategory.Message, "Disable_adding_use_strict_directives_in_emitted_JavaScript_files_6669", "Disable adding 'use strict' directives in emitted JavaScript files."),
+        Disable_including_any_library_files_including_the_default_lib_d_ts: diag(6670, ts.DiagnosticCategory.Message, "Disable_including_any_library_files_including_the_default_lib_d_ts_6670", "Disable including any library files, including the default lib.d.ts."),
+        Enforces_using_indexed_accessors_for_keys_declared_using_an_indexed_type: diag(6671, ts.DiagnosticCategory.Message, "Enforces_using_indexed_accessors_for_keys_declared_using_an_indexed_type_6671", "Enforces using indexed accessors for keys declared using an indexed type"),
+        Disallow_import_s_require_s_or_reference_s_from_expanding_the_number_of_files_TypeScript_should_add_to_a_project: diag(6672, ts.DiagnosticCategory.Message, "Disallow_import_s_require_s_or_reference_s_from_expanding_the_number_of_files_TypeScript_should_add__6672", "Disallow `import`s, `require`s or `<reference>`s from expanding the number of files TypeScript should add to a project."),
+        Disable_strict_checking_of_generic_signatures_in_function_types: diag(6673, ts.DiagnosticCategory.Message, "Disable_strict_checking_of_generic_signatures_in_function_types_6673", "Disable strict checking of generic signatures in function types."),
+        Add_undefined_to_a_type_when_accessed_using_an_index: diag(6674, ts.DiagnosticCategory.Message, "Add_undefined_to_a_type_when_accessed_using_an_index_6674", "Add `undefined` to a type when accessed using an index."),
+        Enable_error_reporting_when_a_local_variables_aren_t_read: diag(6675, ts.DiagnosticCategory.Message, "Enable_error_reporting_when_a_local_variables_aren_t_read_6675", "Enable error reporting when a local variables aren't read."),
+        Raise_an_error_when_a_function_parameter_isn_t_read: diag(6676, ts.DiagnosticCategory.Message, "Raise_an_error_when_a_function_parameter_isn_t_read_6676", "Raise an error when a function parameter isn't read"),
+        Deprecated_setting_Use_outFile_instead: diag(6677, ts.DiagnosticCategory.Message, "Deprecated_setting_Use_outFile_instead_6677", "Deprecated setting. Use `outFile` instead."),
+        Specify_an_output_folder_for_all_emitted_files: diag(6678, ts.DiagnosticCategory.Message, "Specify_an_output_folder_for_all_emitted_files_6678", "Specify an output folder for all emitted files."),
+        Specify_a_file_that_bundles_all_outputs_into_one_JavaScript_file_If_declaration_is_true_also_designates_a_file_that_bundles_all_d_ts_output: diag(6679, ts.DiagnosticCategory.Message, "Specify_a_file_that_bundles_all_outputs_into_one_JavaScript_file_If_declaration_is_true_also_designa_6679", "Specify a file that bundles all outputs into one JavaScript file. If `declaration` is true, also designates a file that bundles all .d.ts output."),
+        Specify_a_set_of_entries_that_re_map_imports_to_additional_lookup_locations: diag(6680, ts.DiagnosticCategory.Message, "Specify_a_set_of_entries_that_re_map_imports_to_additional_lookup_locations_6680", "Specify a set of entries that re-map imports to additional lookup locations."),
+        Specify_a_list_of_language_service_plugins_to_include: diag(6681, ts.DiagnosticCategory.Message, "Specify_a_list_of_language_service_plugins_to_include_6681", "Specify a list of language service plugins to include."),
+        Disable_erasing_const_enum_declarations_in_generated_code: diag(6682, ts.DiagnosticCategory.Message, "Disable_erasing_const_enum_declarations_in_generated_code_6682", "Disable erasing `const enum` declarations in generated code."),
+        Disable_resolving_symlinks_to_their_realpath_This_correlates_to_the_same_flag_in_node: diag(6683, ts.DiagnosticCategory.Message, "Disable_resolving_symlinks_to_their_realpath_This_correlates_to_the_same_flag_in_node_6683", "Disable resolving symlinks to their realpath. This correlates to the same flag in node."),
+        Disable_wiping_the_console_in_watch_mode: diag(6684, ts.DiagnosticCategory.Message, "Disable_wiping_the_console_in_watch_mode_6684", "Disable wiping the console in watch mode"),
+        Enable_color_and_formatting_in_TypeScript_s_output_to_make_compiler_errors_easier_to_read: diag(6685, ts.DiagnosticCategory.Message, "Enable_color_and_formatting_in_TypeScript_s_output_to_make_compiler_errors_easier_to_read_6685", "Enable color and formatting in TypeScript's output to make compiler errors easier to read"),
+        Specify_the_object_invoked_for_createElement_This_only_applies_when_targeting_react_JSX_emit: diag(6686, ts.DiagnosticCategory.Message, "Specify_the_object_invoked_for_createElement_This_only_applies_when_targeting_react_JSX_emit_6686", "Specify the object invoked for `createElement`. This only applies when targeting `react` JSX emit."),
+        Specify_an_array_of_objects_that_specify_paths_for_projects_Used_in_project_references: diag(6687, ts.DiagnosticCategory.Message, "Specify_an_array_of_objects_that_specify_paths_for_projects_Used_in_project_references_6687", "Specify an array of objects that specify paths for projects. Used in project references."),
+        Disable_emitting_comments: diag(6688, ts.DiagnosticCategory.Message, "Disable_emitting_comments_6688", "Disable emitting comments."),
+        Enable_importing_json_files: diag(6689, ts.DiagnosticCategory.Message, "Enable_importing_json_files_6689", "Enable importing .json files"),
+        Specify_the_root_folder_within_your_source_files: diag(6690, ts.DiagnosticCategory.Message, "Specify_the_root_folder_within_your_source_files_6690", "Specify the root folder within your source files."),
+        Allow_multiple_folders_to_be_treated_as_one_when_resolving_modules: diag(6691, ts.DiagnosticCategory.Message, "Allow_multiple_folders_to_be_treated_as_one_when_resolving_modules_6691", "Allow multiple folders to be treated as one when resolving modules."),
+        Skip_type_checking_d_ts_files_that_are_included_with_TypeScript: diag(6692, ts.DiagnosticCategory.Message, "Skip_type_checking_d_ts_files_that_are_included_with_TypeScript_6692", "Skip type checking .d.ts files that are included with TypeScript."),
+        Skip_type_checking_all_d_ts_files: diag(6693, ts.DiagnosticCategory.Message, "Skip_type_checking_all_d_ts_files_6693", "Skip type checking all .d.ts files."),
+        Create_source_map_files_for_emitted_JavaScript_files: diag(6694, ts.DiagnosticCategory.Message, "Create_source_map_files_for_emitted_JavaScript_files_6694", "Create source map files for emitted JavaScript files."),
+        Specify_the_root_path_for_debuggers_to_find_the_reference_source_code: diag(6695, ts.DiagnosticCategory.Message, "Specify_the_root_path_for_debuggers_to_find_the_reference_source_code_6695", "Specify the root path for debuggers to find the reference source code."),
+        Check_that_the_arguments_for_bind_call_and_apply_methods_match_the_original_function: diag(6697, ts.DiagnosticCategory.Message, "Check_that_the_arguments_for_bind_call_and_apply_methods_match_the_original_function_6697", "Check that the arguments for `bind`, `call`, and `apply` methods match the original function."),
+        When_assigning_functions_check_to_ensure_parameters_and_the_return_values_are_subtype_compatible: diag(6698, ts.DiagnosticCategory.Message, "When_assigning_functions_check_to_ensure_parameters_and_the_return_values_are_subtype_compatible_6698", "When assigning functions, check to ensure parameters and the return values are subtype-compatible."),
+        When_type_checking_take_into_account_null_and_undefined: diag(6699, ts.DiagnosticCategory.Message, "When_type_checking_take_into_account_null_and_undefined_6699", "When type checking, take into account `null` and `undefined`."),
+        Check_for_class_properties_that_are_declared_but_not_set_in_the_constructor: diag(6700, ts.DiagnosticCategory.Message, "Check_for_class_properties_that_are_declared_but_not_set_in_the_constructor_6700", "Check for class properties that are declared but not set in the constructor."),
+        Disable_emitting_declarations_that_have_internal_in_their_JSDoc_comments: diag(6701, ts.DiagnosticCategory.Message, "Disable_emitting_declarations_that_have_internal_in_their_JSDoc_comments_6701", "Disable emitting declarations that have `@internal` in their JSDoc comments."),
+        Disable_reporting_of_excess_property_errors_during_the_creation_of_object_literals: diag(6702, ts.DiagnosticCategory.Message, "Disable_reporting_of_excess_property_errors_during_the_creation_of_object_literals_6702", "Disable reporting of excess property errors during the creation of object literals."),
+        Suppress_noImplicitAny_errors_when_indexing_objects_that_lack_index_signatures: diag(6703, ts.DiagnosticCategory.Message, "Suppress_noImplicitAny_errors_when_indexing_objects_that_lack_index_signatures_6703", "Suppress `noImplicitAny` errors when indexing objects that lack index signatures."),
+        Synchronously_call_callbacks_and_update_the_state_of_directory_watchers_on_platforms_that_don_t_support_recursive_watching_natively: diag(6704, ts.DiagnosticCategory.Message, "Synchronously_call_callbacks_and_update_the_state_of_directory_watchers_on_platforms_that_don_t_supp_6704", "Synchronously call callbacks and update the state of directory watchers on platforms that don`t support recursive watching natively."),
+        Set_the_JavaScript_language_version_for_emitted_JavaScript_and_include_compatible_library_declarations: diag(6705, ts.DiagnosticCategory.Message, "Set_the_JavaScript_language_version_for_emitted_JavaScript_and_include_compatible_library_declaratio_6705", "Set the JavaScript language version for emitted JavaScript and include compatible library declarations."),
+        Log_paths_used_during_the_moduleResolution_process: diag(6706, ts.DiagnosticCategory.Message, "Log_paths_used_during_the_moduleResolution_process_6706", "Log paths used during the `moduleResolution` process."),
+        Specify_the_folder_for_tsbuildinfo_incremental_compilation_files: diag(6707, ts.DiagnosticCategory.Message, "Specify_the_folder_for_tsbuildinfo_incremental_compilation_files_6707", "Specify the folder for .tsbuildinfo incremental compilation files."),
+        Specify_options_for_automatic_acquisition_of_declaration_files: diag(6709, ts.DiagnosticCategory.Message, "Specify_options_for_automatic_acquisition_of_declaration_files_6709", "Specify options for automatic acquisition of declaration files."),
+        Specify_multiple_folders_that_act_like_Slashnode_modules_Slash_types: diag(6710, ts.DiagnosticCategory.Message, "Specify_multiple_folders_that_act_like_Slashnode_modules_Slash_types_6710", "Specify multiple folders that act like `./node_modules/@types`."),
+        Specify_type_package_names_to_be_included_without_being_referenced_in_a_source_file: diag(6711, ts.DiagnosticCategory.Message, "Specify_type_package_names_to_be_included_without_being_referenced_in_a_source_file_6711", "Specify type package names to be included without being referenced in a source file."),
+        Emit_ECMAScript_standard_compliant_class_fields: diag(6712, ts.DiagnosticCategory.Message, "Emit_ECMAScript_standard_compliant_class_fields_6712", "Emit ECMAScript-standard-compliant class fields."),
+        Enable_verbose_logging: diag(6713, ts.DiagnosticCategory.Message, "Enable_verbose_logging_6713", "Enable verbose logging"),
+        Specify_how_directories_are_watched_on_systems_that_lack_recursive_file_watching_functionality: diag(6714, ts.DiagnosticCategory.Message, "Specify_how_directories_are_watched_on_systems_that_lack_recursive_file_watching_functionality_6714", "Specify how directories are watched on systems that lack recursive file-watching functionality."),
+        Specify_how_the_TypeScript_watch_mode_works: diag(6715, ts.DiagnosticCategory.Message, "Specify_how_the_TypeScript_watch_mode_works_6715", "Specify how the TypeScript watch mode works."),
+        Include_undefined_in_index_signature_results: diag(6716, ts.DiagnosticCategory.Message, "Include_undefined_in_index_signature_results_6716", "Include 'undefined' in index signature results"),
+        Require_undeclared_properties_from_index_signatures_to_use_element_accesses: diag(6717, ts.DiagnosticCategory.Message, "Require_undeclared_properties_from_index_signatures_to_use_element_accesses_6717", "Require undeclared properties from index signatures to use element accesses."),
+        Specify_emit_Slashchecking_behavior_for_imports_that_are_only_used_for_types: diag(6718, ts.DiagnosticCategory.Message, "Specify_emit_Slashchecking_behavior_for_imports_that_are_only_used_for_types_6718", "Specify emit/checking behavior for imports that are only used for types"),
+        Type_catch_clause_variables_as_unknown_instead_of_any: diag(6803, ts.DiagnosticCategory.Message, "Type_catch_clause_variables_as_unknown_instead_of_any_6803", "Type catch clause variables as 'unknown' instead of 'any'."),
+        one_of_Colon: diag(6900, ts.DiagnosticCategory.Message, "one_of_Colon_6900", "one of:"),
+        one_or_more_Colon: diag(6901, ts.DiagnosticCategory.Message, "one_or_more_Colon_6901", "one or more:"),
+        type_Colon: diag(6902, ts.DiagnosticCategory.Message, "type_Colon_6902", "type:"),
+        default_Colon: diag(6903, ts.DiagnosticCategory.Message, "default_Colon_6903", "default:"),
+        module_system_or_esModuleInterop: diag(6904, ts.DiagnosticCategory.Message, "module_system_or_esModuleInterop_6904", "module === \"system\" or esModuleInterop"),
+        false_unless_strict_is_set: diag(6905, ts.DiagnosticCategory.Message, "false_unless_strict_is_set_6905", "`false`, unless `strict` is set"),
+        false_unless_composite_is_set: diag(6906, ts.DiagnosticCategory.Message, "false_unless_composite_is_set_6906", "`false`, unless `composite` is set"),
+        node_modules_bower_components_jspm_packages_plus_the_value_of_outDir_if_one_is_specified: diag(6907, ts.DiagnosticCategory.Message, "node_modules_bower_components_jspm_packages_plus_the_value_of_outDir_if_one_is_specified_6907", "`[\"node_modules\", \"bower_components\", \"jspm_packages\"]`, plus the value of `outDir` if one is specified."),
+        if_files_is_specified_otherwise_Asterisk_Asterisk_Slash_Asterisk: diag(6908, ts.DiagnosticCategory.Message, "if_files_is_specified_otherwise_Asterisk_Asterisk_Slash_Asterisk_6908", "`[]` if `files` is specified, otherwise `[\"**/*\"]`"),
+        true_if_composite_false_otherwise: diag(6909, ts.DiagnosticCategory.Message, "true_if_composite_false_otherwise_6909", "`true` if `composite`, `false` otherwise"),
+        module_AMD_or_UMD_or_System_or_ES6_then_Classic_Otherwise_Node: diag(69010, ts.DiagnosticCategory.Message, "module_AMD_or_UMD_or_System_or_ES6_then_Classic_Otherwise_Node_69010", "module === `AMD` or `UMD` or `System` or `ES6`, then `Classic`, Otherwise `Node`"),
+        Computed_from_the_list_of_input_files: diag(6911, ts.DiagnosticCategory.Message, "Computed_from_the_list_of_input_files_6911", "Computed from the list of input files"),
+        Platform_specific: diag(6912, ts.DiagnosticCategory.Message, "Platform_specific_6912", "Platform specific"),
+        You_can_learn_about_all_of_the_compiler_options_at_0: diag(6913, ts.DiagnosticCategory.Message, "You_can_learn_about_all_of_the_compiler_options_at_0_6913", "You can learn about all of the compiler options at {0}"),
+        Including_watch_w_will_start_watching_the_current_project_for_the_file_changes_Once_set_you_can_config_watch_mode_with_Colon: diag(6914, ts.DiagnosticCategory.Message, "Including_watch_w_will_start_watching_the_current_project_for_the_file_changes_Once_set_you_can_conf_6914", "Including --watch, -w will start watching the current project for the file changes. Once set, you can config watch mode with:"),
+        Using_build_b_will_make_tsc_behave_more_like_a_build_orchestrator_than_a_compiler_This_is_used_to_trigger_building_composite_projects_which_you_can_learn_more_about_at_0: diag(6915, ts.DiagnosticCategory.Message, "Using_build_b_will_make_tsc_behave_more_like_a_build_orchestrator_than_a_compiler_This_is_used_to_tr_6915", "Using --build, -b will make tsc behave more like a build orchestrator than a compiler. This is used to trigger building composite projects which you can learn more about at {0}"),
+        COMMON_COMMANDS: diag(6916, ts.DiagnosticCategory.Message, "COMMON_COMMANDS_6916", "COMMON COMMANDS"),
+        ALL_COMPILER_OPTIONS: diag(6917, ts.DiagnosticCategory.Message, "ALL_COMPILER_OPTIONS_6917", "ALL COMPILER OPTIONS"),
+        WATCH_OPTIONS: diag(6918, ts.DiagnosticCategory.Message, "WATCH_OPTIONS_6918", "WATCH OPTIONS"),
+        BUILD_OPTIONS: diag(6919, ts.DiagnosticCategory.Message, "BUILD_OPTIONS_6919", "BUILD OPTIONS"),
+        COMMON_COMPILER_OPTIONS: diag(6920, ts.DiagnosticCategory.Message, "COMMON_COMPILER_OPTIONS_6920", "COMMON COMPILER OPTIONS"),
+        COMMAND_LINE_FLAGS: diag(6921, ts.DiagnosticCategory.Message, "COMMAND_LINE_FLAGS_6921", "COMMAND LINE FLAGS"),
+        tsc_Colon_The_TypeScript_Compiler: diag(6922, ts.DiagnosticCategory.Message, "tsc_Colon_The_TypeScript_Compiler_6922", "tsc: The TypeScript Compiler"),
+        Compiles_the_current_project_tsconfig_json_in_the_working_directory: diag(6923, ts.DiagnosticCategory.Message, "Compiles_the_current_project_tsconfig_json_in_the_working_directory_6923", "Compiles the current project (tsconfig.json in the working directory.)"),
+        Ignoring_tsconfig_json_compiles_the_specified_files_with_default_compiler_options: diag(6924, ts.DiagnosticCategory.Message, "Ignoring_tsconfig_json_compiles_the_specified_files_with_default_compiler_options_6924", "Ignoring tsconfig.json, compiles the specified files with default compiler options."),
+        Build_a_composite_project_in_the_working_directory: diag(6925, ts.DiagnosticCategory.Message, "Build_a_composite_project_in_the_working_directory_6925", "Build a composite project in the working directory."),
+        Creates_a_tsconfig_json_with_the_recommended_settings_in_the_working_directory: diag(6926, ts.DiagnosticCategory.Message, "Creates_a_tsconfig_json_with_the_recommended_settings_in_the_working_directory_6926", "Creates a tsconfig.json with the recommended settings in the working directory."),
+        Compiles_the_TypeScript_project_located_at_the_specified_path: diag(6927, ts.DiagnosticCategory.Message, "Compiles_the_TypeScript_project_located_at_the_specified_path_6927", "Compiles the TypeScript project located at the specified path."),
+        An_expanded_version_of_this_information_showing_all_possible_compiler_options: diag(6928, ts.DiagnosticCategory.Message, "An_expanded_version_of_this_information_showing_all_possible_compiler_options_6928", "An expanded version of this information, showing all possible compiler options"),
+        Compiles_the_current_project_with_additional_settings: diag(6929, ts.DiagnosticCategory.Message, "Compiles_the_current_project_with_additional_settings_6929", "Compiles the current project, with additional settings."),
         Variable_0_implicitly_has_an_1_type: diag(7005, ts.DiagnosticCategory.Error, "Variable_0_implicitly_has_an_1_type_7005", "Variable '{0}' implicitly has an '{1}' type."),
         Parameter_0_implicitly_has_an_1_type: diag(7006, ts.DiagnosticCategory.Error, "Parameter_0_implicitly_has_an_1_type_7006", "Parameter '{0}' implicitly has an '{1}' type."),
         Member_0_implicitly_has_an_1_type: diag(7008, ts.DiagnosticCategory.Error, "Member_0_implicitly_has_an_1_type_7008", "Member '{0}' implicitly has an '{1}' type."),
@@ -9187,7 +9488,6 @@
         Add_names_to_all_parameters_without_names: diag(95073, ts.DiagnosticCategory.Message, "Add_names_to_all_parameters_without_names_95073", "Add names to all parameters without names"),
         Enable_the_experimentalDecorators_option_in_your_configuration_file: diag(95074, ts.DiagnosticCategory.Message, "Enable_the_experimentalDecorators_option_in_your_configuration_file_95074", "Enable the 'experimentalDecorators' option in your configuration file"),
         Convert_parameters_to_destructured_object: diag(95075, ts.DiagnosticCategory.Message, "Convert_parameters_to_destructured_object_95075", "Convert parameters to destructured object"),
-        Allow_accessing_UMD_globals_from_modules: diag(95076, ts.DiagnosticCategory.Message, "Allow_accessing_UMD_globals_from_modules_95076", "Allow accessing UMD globals from modules."),
         Extract_type: diag(95077, ts.DiagnosticCategory.Message, "Extract_type_95077", "Extract type"),
         Extract_to_type_alias: diag(95078, ts.DiagnosticCategory.Message, "Extract_to_type_alias_95078", "Extract to type alias"),
         Extract_to_typedef: diag(95079, ts.DiagnosticCategory.Message, "Extract_to_typedef_95079", "Extract to typedef"),
@@ -9275,6 +9575,11 @@
         Remove_override_modifier: diag(95161, ts.DiagnosticCategory.Message, "Remove_override_modifier_95161", "Remove 'override' modifier"),
         Add_all_missing_override_modifiers: diag(95162, ts.DiagnosticCategory.Message, "Add_all_missing_override_modifiers_95162", "Add all missing 'override' modifiers"),
         Remove_all_unnecessary_override_modifiers: diag(95163, ts.DiagnosticCategory.Message, "Remove_all_unnecessary_override_modifiers_95163", "Remove all unnecessary 'override' modifiers"),
+        Can_only_convert_named_export: diag(95164, ts.DiagnosticCategory.Message, "Can_only_convert_named_export_95164", "Can only convert named export"),
+        Add_missing_properties: diag(95165, ts.DiagnosticCategory.Message, "Add_missing_properties_95165", "Add missing properties"),
+        Add_all_missing_properties: diag(95166, ts.DiagnosticCategory.Message, "Add_all_missing_properties_95166", "Add all missing properties"),
+        Add_missing_attributes: diag(95167, ts.DiagnosticCategory.Message, "Add_missing_attributes_95167", "Add missing attributes"),
+        Add_all_missing_attributes: diag(95168, ts.DiagnosticCategory.Message, "Add_all_missing_attributes_95168", "Add all missing attributes"),
         No_value_exists_in_scope_for_the_shorthand_property_0_Either_declare_one_or_provide_an_initializer: diag(18004, ts.DiagnosticCategory.Error, "No_value_exists_in_scope_for_the_shorthand_property_0_Either_declare_one_or_provide_an_initializer_18004", "No value exists in scope for the shorthand property '{0}'. Either declare one or provide an initializer."),
         Classes_may_not_have_a_field_named_constructor: diag(18006, ts.DiagnosticCategory.Error, "Classes_may_not_have_a_field_named_constructor_18006", "Classes may not have a field named 'constructor'."),
         JSX_expressions_may_not_use_the_comma_operator_Did_you_mean_to_write_an_array: diag(18007, ts.DiagnosticCategory.Error, "JSX_expressions_may_not_use_the_comma_operator_Did_you_mean_to_write_an_array_18007", "JSX expressions may not use the comma operator. Did you mean to write an array?"),
@@ -9301,6 +9606,10 @@
         Specify_the_JSX_fragment_factory_function_to_use_when_targeting_react_JSX_emit_with_jsxFactory_compiler_option_is_specified_e_g_Fragment: diag(18034, ts.DiagnosticCategory.Message, "Specify_the_JSX_fragment_factory_function_to_use_when_targeting_react_JSX_emit_with_jsxFactory_compi_18034", "Specify the JSX fragment factory function to use when targeting 'react' JSX emit with 'jsxFactory' compiler option is specified, e.g. 'Fragment'."),
         Invalid_value_for_jsxFragmentFactory_0_is_not_a_valid_identifier_or_qualified_name: diag(18035, ts.DiagnosticCategory.Error, "Invalid_value_for_jsxFragmentFactory_0_is_not_a_valid_identifier_or_qualified_name_18035", "Invalid value for 'jsxFragmentFactory'. '{0}' is not a valid identifier or qualified-name."),
         Class_decorators_can_t_be_used_with_static_private_identifier_Consider_removing_the_experimental_decorator: diag(18036, ts.DiagnosticCategory.Error, "Class_decorators_can_t_be_used_with_static_private_identifier_Consider_removing_the_experimental_dec_18036", "Class decorators can't be used with static private identifier. Consider removing the experimental decorator."),
+        Await_expression_cannot_be_used_inside_a_class_static_block: diag(18037, ts.DiagnosticCategory.Error, "Await_expression_cannot_be_used_inside_a_class_static_block_18037", "Await expression cannot be used inside a class static block."),
+        For_await_loops_cannot_be_used_inside_a_class_static_block: diag(18038, ts.DiagnosticCategory.Error, "For_await_loops_cannot_be_used_inside_a_class_static_block_18038", "'For await' loops cannot be used inside a class static block."),
+        Invalid_use_of_0_It_cannot_be_used_inside_a_class_static_block: diag(18039, ts.DiagnosticCategory.Error, "Invalid_use_of_0_It_cannot_be_used_inside_a_class_static_block_18039", "Invalid use of '{0}'. It cannot be used inside a class static block."),
+        A_return_statement_cannot_be_used_inside_a_class_static_block: diag(18041, ts.DiagnosticCategory.Error, "A_return_statement_cannot_be_used_inside_a_class_static_block_18041", "A 'return' statement cannot be used inside a class static block."),
     };
 })(ts || (ts = {}));
 var ts;
@@ -9308,7 +9617,7 @@
     var _a;
     /* @internal */
     function tokenIsIdentifierOrKeyword(token) {
-        return token >= 78 /* Identifier */;
+        return token >= 79 /* Identifier */;
     }
     ts.tokenIsIdentifierOrKeyword = tokenIsIdentifierOrKeyword;
     /* @internal */
@@ -9316,89 +9625,90 @@
         return token === 31 /* GreaterThanToken */ || tokenIsIdentifierOrKeyword(token);
     }
     ts.tokenIsIdentifierOrKeywordOrGreaterThan = tokenIsIdentifierOrKeywordOrGreaterThan;
-    var textToKeywordObj = (_a = {
-            abstract: 125 /* AbstractKeyword */,
-            any: 128 /* AnyKeyword */,
-            as: 126 /* AsKeyword */,
-            asserts: 127 /* AssertsKeyword */,
-            bigint: 155 /* BigIntKeyword */,
-            boolean: 131 /* BooleanKeyword */,
-            break: 80 /* BreakKeyword */,
-            case: 81 /* CaseKeyword */,
-            catch: 82 /* CatchKeyword */,
-            class: 83 /* ClassKeyword */,
-            continue: 85 /* ContinueKeyword */,
-            const: 84 /* ConstKeyword */
+    /** @internal */
+    ts.textToKeywordObj = (_a = {
+            abstract: 126 /* AbstractKeyword */,
+            any: 129 /* AnyKeyword */,
+            as: 127 /* AsKeyword */,
+            asserts: 128 /* AssertsKeyword */,
+            bigint: 156 /* BigIntKeyword */,
+            boolean: 132 /* BooleanKeyword */,
+            break: 81 /* BreakKeyword */,
+            case: 82 /* CaseKeyword */,
+            catch: 83 /* CatchKeyword */,
+            class: 84 /* ClassKeyword */,
+            continue: 86 /* ContinueKeyword */,
+            const: 85 /* ConstKeyword */
         },
-        _a["" + "constructor"] = 132 /* ConstructorKeyword */,
-        _a.debugger = 86 /* DebuggerKeyword */,
-        _a.declare = 133 /* DeclareKeyword */,
-        _a.default = 87 /* DefaultKeyword */,
-        _a.delete = 88 /* DeleteKeyword */,
-        _a.do = 89 /* DoKeyword */,
-        _a.else = 90 /* ElseKeyword */,
-        _a.enum = 91 /* EnumKeyword */,
-        _a.export = 92 /* ExportKeyword */,
-        _a.extends = 93 /* ExtendsKeyword */,
-        _a.false = 94 /* FalseKeyword */,
-        _a.finally = 95 /* FinallyKeyword */,
-        _a.for = 96 /* ForKeyword */,
-        _a.from = 153 /* FromKeyword */,
-        _a.function = 97 /* FunctionKeyword */,
-        _a.get = 134 /* GetKeyword */,
-        _a.if = 98 /* IfKeyword */,
-        _a.implements = 116 /* ImplementsKeyword */,
-        _a.import = 99 /* ImportKeyword */,
-        _a.in = 100 /* InKeyword */,
-        _a.infer = 135 /* InferKeyword */,
-        _a.instanceof = 101 /* InstanceOfKeyword */,
-        _a.interface = 117 /* InterfaceKeyword */,
-        _a.intrinsic = 136 /* IntrinsicKeyword */,
-        _a.is = 137 /* IsKeyword */,
-        _a.keyof = 138 /* KeyOfKeyword */,
-        _a.let = 118 /* LetKeyword */,
-        _a.module = 139 /* ModuleKeyword */,
-        _a.namespace = 140 /* NamespaceKeyword */,
-        _a.never = 141 /* NeverKeyword */,
-        _a.new = 102 /* NewKeyword */,
-        _a.null = 103 /* NullKeyword */,
-        _a.number = 144 /* NumberKeyword */,
-        _a.object = 145 /* ObjectKeyword */,
-        _a.package = 119 /* PackageKeyword */,
-        _a.private = 120 /* PrivateKeyword */,
-        _a.protected = 121 /* ProtectedKeyword */,
-        _a.public = 122 /* PublicKeyword */,
-        _a.override = 156 /* OverrideKeyword */,
-        _a.readonly = 142 /* ReadonlyKeyword */,
-        _a.require = 143 /* RequireKeyword */,
-        _a.global = 154 /* GlobalKeyword */,
-        _a.return = 104 /* ReturnKeyword */,
-        _a.set = 146 /* SetKeyword */,
-        _a.static = 123 /* StaticKeyword */,
-        _a.string = 147 /* StringKeyword */,
-        _a.super = 105 /* SuperKeyword */,
-        _a.switch = 106 /* SwitchKeyword */,
-        _a.symbol = 148 /* SymbolKeyword */,
-        _a.this = 107 /* ThisKeyword */,
-        _a.throw = 108 /* ThrowKeyword */,
-        _a.true = 109 /* TrueKeyword */,
-        _a.try = 110 /* TryKeyword */,
-        _a.type = 149 /* TypeKeyword */,
-        _a.typeof = 111 /* TypeOfKeyword */,
-        _a.undefined = 150 /* UndefinedKeyword */,
-        _a.unique = 151 /* UniqueKeyword */,
-        _a.unknown = 152 /* UnknownKeyword */,
-        _a.var = 112 /* VarKeyword */,
-        _a.void = 113 /* VoidKeyword */,
-        _a.while = 114 /* WhileKeyword */,
-        _a.with = 115 /* WithKeyword */,
-        _a.yield = 124 /* YieldKeyword */,
-        _a.async = 129 /* AsyncKeyword */,
-        _a.await = 130 /* AwaitKeyword */,
-        _a.of = 157 /* OfKeyword */,
+        _a["" + "constructor"] = 133 /* ConstructorKeyword */,
+        _a.debugger = 87 /* DebuggerKeyword */,
+        _a.declare = 134 /* DeclareKeyword */,
+        _a.default = 88 /* DefaultKeyword */,
+        _a.delete = 89 /* DeleteKeyword */,
+        _a.do = 90 /* DoKeyword */,
+        _a.else = 91 /* ElseKeyword */,
+        _a.enum = 92 /* EnumKeyword */,
+        _a.export = 93 /* ExportKeyword */,
+        _a.extends = 94 /* ExtendsKeyword */,
+        _a.false = 95 /* FalseKeyword */,
+        _a.finally = 96 /* FinallyKeyword */,
+        _a.for = 97 /* ForKeyword */,
+        _a.from = 154 /* FromKeyword */,
+        _a.function = 98 /* FunctionKeyword */,
+        _a.get = 135 /* GetKeyword */,
+        _a.if = 99 /* IfKeyword */,
+        _a.implements = 117 /* ImplementsKeyword */,
+        _a.import = 100 /* ImportKeyword */,
+        _a.in = 101 /* InKeyword */,
+        _a.infer = 136 /* InferKeyword */,
+        _a.instanceof = 102 /* InstanceOfKeyword */,
+        _a.interface = 118 /* InterfaceKeyword */,
+        _a.intrinsic = 137 /* IntrinsicKeyword */,
+        _a.is = 138 /* IsKeyword */,
+        _a.keyof = 139 /* KeyOfKeyword */,
+        _a.let = 119 /* LetKeyword */,
+        _a.module = 140 /* ModuleKeyword */,
+        _a.namespace = 141 /* NamespaceKeyword */,
+        _a.never = 142 /* NeverKeyword */,
+        _a.new = 103 /* NewKeyword */,
+        _a.null = 104 /* NullKeyword */,
+        _a.number = 145 /* NumberKeyword */,
+        _a.object = 146 /* ObjectKeyword */,
+        _a.package = 120 /* PackageKeyword */,
+        _a.private = 121 /* PrivateKeyword */,
+        _a.protected = 122 /* ProtectedKeyword */,
+        _a.public = 123 /* PublicKeyword */,
+        _a.override = 157 /* OverrideKeyword */,
+        _a.readonly = 143 /* ReadonlyKeyword */,
+        _a.require = 144 /* RequireKeyword */,
+        _a.global = 155 /* GlobalKeyword */,
+        _a.return = 105 /* ReturnKeyword */,
+        _a.set = 147 /* SetKeyword */,
+        _a.static = 124 /* StaticKeyword */,
+        _a.string = 148 /* StringKeyword */,
+        _a.super = 106 /* SuperKeyword */,
+        _a.switch = 107 /* SwitchKeyword */,
+        _a.symbol = 149 /* SymbolKeyword */,
+        _a.this = 108 /* ThisKeyword */,
+        _a.throw = 109 /* ThrowKeyword */,
+        _a.true = 110 /* TrueKeyword */,
+        _a.try = 111 /* TryKeyword */,
+        _a.type = 150 /* TypeKeyword */,
+        _a.typeof = 112 /* TypeOfKeyword */,
+        _a.undefined = 151 /* UndefinedKeyword */,
+        _a.unique = 152 /* UniqueKeyword */,
+        _a.unknown = 153 /* UnknownKeyword */,
+        _a.var = 113 /* VarKeyword */,
+        _a.void = 114 /* VoidKeyword */,
+        _a.while = 115 /* WhileKeyword */,
+        _a.with = 116 /* WithKeyword */,
+        _a.yield = 125 /* YieldKeyword */,
+        _a.async = 130 /* AsyncKeyword */,
+        _a.await = 131 /* AwaitKeyword */,
+        _a.of = 158 /* OfKeyword */,
         _a);
-    var textToKeyword = new ts.Map(ts.getEntries(textToKeywordObj));
-    var textToToken = new ts.Map(ts.getEntries(__assign(__assign({}, textToKeywordObj), { "{": 18 /* OpenBraceToken */, "}": 19 /* CloseBraceToken */, "(": 20 /* OpenParenToken */, ")": 21 /* CloseParenToken */, "[": 22 /* OpenBracketToken */, "]": 23 /* CloseBracketToken */, ".": 24 /* DotToken */, "...": 25 /* DotDotDotToken */, ";": 26 /* SemicolonToken */, ",": 27 /* CommaToken */, "<": 29 /* LessThanToken */, ">": 31 /* GreaterThanToken */, "<=": 32 /* LessThanEqualsToken */, ">=": 33 /* GreaterThanEqualsToken */, "==": 34 /* EqualsEqualsToken */, "!=": 35 /* ExclamationEqualsToken */, "===": 36 /* EqualsEqualsEqualsToken */, "!==": 37 /* ExclamationEqualsEqualsToken */, "=>": 38 /* EqualsGreaterThanToken */, "+": 39 /* PlusToken */, "-": 40 /* MinusToken */, "**": 42 /* AsteriskAsteriskToken */, "*": 41 /* AsteriskToken */, "/": 43 /* SlashToken */, "%": 44 /* PercentToken */, "++": 45 /* PlusPlusToken */, "--": 46 /* MinusMinusToken */, "<<": 47 /* LessThanLessThanToken */, "</": 30 /* LessThanSlashToken */, ">>": 48 /* GreaterThanGreaterThanToken */, ">>>": 49 /* GreaterThanGreaterThanGreaterThanToken */, "&": 50 /* AmpersandToken */, "|": 51 /* BarToken */, "^": 52 /* CaretToken */, "!": 53 /* ExclamationToken */, "~": 54 /* TildeToken */, "&&": 55 /* AmpersandAmpersandToken */, "||": 56 /* BarBarToken */, "?": 57 /* QuestionToken */, "??": 60 /* QuestionQuestionToken */, "?.": 28 /* QuestionDotToken */, ":": 58 /* ColonToken */, "=": 62 /* EqualsToken */, "+=": 63 /* PlusEqualsToken */, "-=": 64 /* MinusEqualsToken */, "*=": 65 /* AsteriskEqualsToken */, "**=": 66 /* AsteriskAsteriskEqualsToken */, "/=": 67 /* SlashEqualsToken */, "%=": 68 /* PercentEqualsToken */, "<<=": 69 /* LessThanLessThanEqualsToken */, ">>=": 70 /* GreaterThanGreaterThanEqualsToken */, ">>>=": 71 /* GreaterThanGreaterThanGreaterThanEqualsToken */, "&=": 72 /* AmpersandEqualsToken */, "|=": 73 /* BarEqualsToken */, "^=": 77 /* CaretEqualsToken */, "||=": 74 /* BarBarEqualsToken */, "&&=": 75 /* AmpersandAmpersandEqualsToken */, "??=": 76 /* QuestionQuestionEqualsToken */, "@": 59 /* AtToken */, "`": 61 /* BacktickToken */ })));
+    var textToKeyword = new ts.Map(ts.getEntries(ts.textToKeywordObj));
+    var textToToken = new ts.Map(ts.getEntries(__assign(__assign({}, ts.textToKeywordObj), { "{": 18 /* OpenBraceToken */, "}": 19 /* CloseBraceToken */, "(": 20 /* OpenParenToken */, ")": 21 /* CloseParenToken */, "[": 22 /* OpenBracketToken */, "]": 23 /* CloseBracketToken */, ".": 24 /* DotToken */, "...": 25 /* DotDotDotToken */, ";": 26 /* SemicolonToken */, ",": 27 /* CommaToken */, "<": 29 /* LessThanToken */, ">": 31 /* GreaterThanToken */, "<=": 32 /* LessThanEqualsToken */, ">=": 33 /* GreaterThanEqualsToken */, "==": 34 /* EqualsEqualsToken */, "!=": 35 /* ExclamationEqualsToken */, "===": 36 /* EqualsEqualsEqualsToken */, "!==": 37 /* ExclamationEqualsEqualsToken */, "=>": 38 /* EqualsGreaterThanToken */, "+": 39 /* PlusToken */, "-": 40 /* MinusToken */, "**": 42 /* AsteriskAsteriskToken */, "*": 41 /* AsteriskToken */, "/": 43 /* SlashToken */, "%": 44 /* PercentToken */, "++": 45 /* PlusPlusToken */, "--": 46 /* MinusMinusToken */, "<<": 47 /* LessThanLessThanToken */, "</": 30 /* LessThanSlashToken */, ">>": 48 /* GreaterThanGreaterThanToken */, ">>>": 49 /* GreaterThanGreaterThanGreaterThanToken */, "&": 50 /* AmpersandToken */, "|": 51 /* BarToken */, "^": 52 /* CaretToken */, "!": 53 /* ExclamationToken */, "~": 54 /* TildeToken */, "&&": 55 /* AmpersandAmpersandToken */, "||": 56 /* BarBarToken */, "?": 57 /* QuestionToken */, "??": 60 /* QuestionQuestionToken */, "?.": 28 /* QuestionDotToken */, ":": 58 /* ColonToken */, "=": 63 /* EqualsToken */, "+=": 64 /* PlusEqualsToken */, "-=": 65 /* MinusEqualsToken */, "*=": 66 /* AsteriskEqualsToken */, "**=": 67 /* AsteriskAsteriskEqualsToken */, "/=": 68 /* SlashEqualsToken */, "%=": 69 /* PercentEqualsToken */, "<<=": 70 /* LessThanLessThanEqualsToken */, ">>=": 71 /* GreaterThanGreaterThanEqualsToken */, ">>>=": 72 /* GreaterThanGreaterThanGreaterThanEqualsToken */, "&=": 73 /* AmpersandEqualsToken */, "|=": 74 /* BarEqualsToken */, "^=": 78 /* CaretEqualsToken */, "||=": 75 /* BarBarEqualsToken */, "&&=": 76 /* AmpersandAmpersandEqualsToken */, "??=": 77 /* QuestionQuestionEqualsToken */, "@": 59 /* AtToken */, "#": 62 /* HashToken */, "`": 61 /* BacktickToken */ })));
     /*
         As per ECMAScript Language Specification 3th Edition, Section 7.6: Identifiers
         IdentifierStart ::
@@ -9454,13 +9764,13 @@
     var unicodeESNextIdentifierStart = [65, 90, 97, 122, 170, 170, 181, 181, 186, 186, 192, 214, 216, 246, 248, 705, 710, 721, 736, 740, 748, 748, 750, 750, 880, 884, 886, 887, 890, 893, 895, 895, 902, 902, 904, 906, 908, 908, 910, 929, 931, 1013, 1015, 1153, 1162, 1327, 1329, 1366, 1369, 1369, 1376, 1416, 1488, 1514, 1519, 1522, 1568, 1610, 1646, 1647, 1649, 1747, 1749, 1749, 1765, 1766, 1774, 1775, 1786, 1788, 1791, 1791, 1808, 1808, 1810, 1839, 1869, 1957, 1969, 1969, 1994, 2026, 2036, 2037, 2042, 2042, 2048, 2069, 2074, 2074, 2084, 2084, 2088, 2088, 2112, 2136, 2144, 2154, 2208, 2228, 2230, 2237, 2308, 2361, 2365, 2365, 2384, 2384, 2392, 2401, 2417, 2432, 2437, 2444, 2447, 2448, 2451, 2472, 2474, 2480, 2482, 2482, 2486, 2489, 2493, 2493, 2510, 2510, 2524, 2525, 2527, 2529, 2544, 2545, 2556, 2556, 2565, 2570, 2575, 2576, 2579, 2600, 2602, 2608, 2610, 2611, 2613, 2614, 2616, 2617, 2649, 2652, 2654, 2654, 2674, 2676, 2693, 2701, 2703, 2705, 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2749, 2749, 2768, 2768, 2784, 2785, 2809, 2809, 2821, 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2869, 2873, 2877, 2877, 2908, 2909, 2911, 2913, 2929, 2929, 2947, 2947, 2949, 2954, 2958, 2960, 2962, 2965, 2969, 2970, 2972, 2972, 2974, 2975, 2979, 2980, 2984, 2986, 2990, 3001, 3024, 3024, 3077, 3084, 3086, 3088, 3090, 3112, 3114, 3129, 3133, 3133, 3160, 3162, 3168, 3169, 3200, 3200, 3205, 3212, 3214, 3216, 3218, 3240, 3242, 3251, 3253, 3257, 3261, 3261, 3294, 3294, 3296, 3297, 3313, 3314, 3333, 3340, 3342, 3344, 3346, 3386, 3389, 3389, 3406, 3406, 3412, 3414, 3423, 3425, 3450, 3455, 3461, 3478, 3482, 3505, 3507, 3515, 3517, 3517, 3520, 3526, 3585, 3632, 3634, 3635, 3648, 3654, 3713, 3714, 3716, 3716, 3718, 3722, 3724, 3747, 3749, 3749, 3751, 3760, 3762, 3763, 3773, 3773, 3776, 3780, 3782, 3782, 3804, 3807, 3840, 3840, 3904, 3911, 3913, 3948, 3976, 3980, 4096, 4138, 4159, 4159, 4176, 4181, 4186, 4189, 4193, 4193, 4197, 4198, 4206, 4208, 4213, 4225, 4238, 4238, 4256, 4293, 4295, 4295, 4301, 4301, 4304, 4346, 4348, 4680, 4682, 4685, 4688, 4694, 4696, 4696, 4698, 4701, 4704, 4744, 4746, 4749, 4752, 4784, 4786, 4789, 4792, 4798, 4800, 4800, 4802, 4805, 4808, 4822, 4824, 4880, 4882, 4885, 4888, 4954, 4992, 5007, 5024, 5109, 5112, 5117, 5121, 5740, 5743, 5759, 5761, 5786, 5792, 5866, 5870, 5880, 5888, 5900, 5902, 5905, 5920, 5937, 5952, 5969, 5984, 5996, 5998, 6000, 6016, 6067, 6103, 6103, 6108, 6108, 6176, 6264, 6272, 6312, 6314, 6314, 6320, 6389, 6400, 6430, 6480, 6509, 6512, 6516, 6528, 6571, 6576, 6601, 6656, 6678, 6688, 6740, 6823, 6823, 6917, 6963, 6981, 6987, 7043, 7072, 7086, 7087, 7098, 7141, 7168, 7203, 7245, 7247, 7258, 7293, 7296, 7304, 7312, 7354, 7357, 7359, 7401, 7404, 7406, 7411, 7413, 7414, 7418, 7418, 7424, 7615, 7680, 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025, 8027, 8027, 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130, 8132, 8134, 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188, 8305, 8305, 8319, 8319, 8336, 8348, 8450, 8450, 8455, 8455, 8458, 8467, 8469, 8469, 8472, 8477, 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8505, 8508, 8511, 8517, 8521, 8526, 8526, 8544, 8584, 11264, 11310, 11312, 11358, 11360, 11492, 11499, 11502, 11506, 11507, 11520, 11557, 11559, 11559, 11565, 11565, 11568, 11623, 11631, 11631, 11648, 11670, 11680, 11686, 11688, 11694, 11696, 11702, 11704, 11710, 11712, 11718, 11720, 11726, 11728, 11734, 11736, 11742, 12293, 12295, 12321, 12329, 12337, 12341, 12344, 12348, 12353, 12438, 12443, 12447, 12449, 12538, 12540, 12543, 12549, 12591, 12593, 12686, 12704, 12730, 12784, 12799, 13312, 19893, 19968, 40943, 40960, 42124, 42192, 42237, 42240, 42508, 42512, 42527, 42538, 42539, 42560, 42606, 42623, 42653, 42656, 42735, 42775, 42783, 42786, 42888, 42891, 42943, 42946, 42950, 42999, 43009, 43011, 43013, 43015, 43018, 43020, 43042, 43072, 43123, 43138, 43187, 43250, 43255, 43259, 43259, 43261, 43262, 43274, 43301, 43312, 43334, 43360, 43388, 43396, 43442, 43471, 43471, 43488, 43492, 43494, 43503, 43514, 43518, 43520, 43560, 43584, 43586, 43588, 43595, 43616, 43638, 43642, 43642, 43646, 43695, 43697, 43697, 43701, 43702, 43705, 43709, 43712, 43712, 43714, 43714, 43739, 43741, 43744, 43754, 43762, 43764, 43777, 43782, 43785, 43790, 43793, 43798, 43808, 43814, 43816, 43822, 43824, 43866, 43868, 43879, 43888, 44002, 44032, 55203, 55216, 55238, 55243, 55291, 63744, 64109, 64112, 64217, 64256, 64262, 64275, 64279, 64285, 64285, 64287, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321, 64323, 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008, 65019, 65136, 65140, 65142, 65276, 65313, 65338, 65345, 65370, 65382, 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500, 65536, 65547, 65549, 65574, 65576, 65594, 65596, 65597, 65599, 65613, 65616, 65629, 65664, 65786, 65856, 65908, 66176, 66204, 66208, 66256, 66304, 66335, 66349, 66378, 66384, 66421, 66432, 66461, 66464, 66499, 66504, 66511, 66513, 66517, 66560, 66717, 66736, 66771, 66776, 66811, 66816, 66855, 66864, 66915, 67072, 67382, 67392, 67413, 67424, 67431, 67584, 67589, 67592, 67592, 67594, 67637, 67639, 67640, 67644, 67644, 67647, 67669, 67680, 67702, 67712, 67742, 67808, 67826, 67828, 67829, 67840, 67861, 67872, 67897, 67968, 68023, 68030, 68031, 68096, 68096, 68112, 68115, 68117, 68119, 68121, 68149, 68192, 68220, 68224, 68252, 68288, 68295, 68297, 68324, 68352, 68405, 68416, 68437, 68448, 68466, 68480, 68497, 68608, 68680, 68736, 68786, 68800, 68850, 68864, 68899, 69376, 69404, 69415, 69415, 69424, 69445, 69600, 69622, 69635, 69687, 69763, 69807, 69840, 69864, 69891, 69926, 69956, 69956, 69968, 70002, 70006, 70006, 70019, 70066, 70081, 70084, 70106, 70106, 70108, 70108, 70144, 70161, 70163, 70187, 70272, 70278, 70280, 70280, 70282, 70285, 70287, 70301, 70303, 70312, 70320, 70366, 70405, 70412, 70415, 70416, 70419, 70440, 70442, 70448, 70450, 70451, 70453, 70457, 70461, 70461, 70480, 70480, 70493, 70497, 70656, 70708, 70727, 70730, 70751, 70751, 70784, 70831, 70852, 70853, 70855, 70855, 71040, 71086, 71128, 71131, 71168, 71215, 71236, 71236, 71296, 71338, 71352, 71352, 71424, 71450, 71680, 71723, 71840, 71903, 71935, 71935, 72096, 72103, 72106, 72144, 72161, 72161, 72163, 72163, 72192, 72192, 72203, 72242, 72250, 72250, 72272, 72272, 72284, 72329, 72349, 72349, 72384, 72440, 72704, 72712, 72714, 72750, 72768, 72768, 72818, 72847, 72960, 72966, 72968, 72969, 72971, 73008, 73030, 73030, 73056, 73061, 73063, 73064, 73066, 73097, 73112, 73112, 73440, 73458, 73728, 74649, 74752, 74862, 74880, 75075, 77824, 78894, 82944, 83526, 92160, 92728, 92736, 92766, 92880, 92909, 92928, 92975, 92992, 92995, 93027, 93047, 93053, 93071, 93760, 93823, 93952, 94026, 94032, 94032, 94099, 94111, 94176, 94177, 94179, 94179, 94208, 100343, 100352, 101106, 110592, 110878, 110928, 110930, 110948, 110951, 110960, 111355, 113664, 113770, 113776, 113788, 113792, 113800, 113808, 113817, 119808, 119892, 119894, 119964, 119966, 119967, 119970, 119970, 119973, 119974, 119977, 119980, 119982, 119993, 119995, 119995, 119997, 120003, 120005, 120069, 120071, 120074, 120077, 120084, 120086, 120092, 120094, 120121, 120123, 120126, 120128, 120132, 120134, 120134, 120138, 120144, 120146, 120485, 120488, 120512, 120514, 120538, 120540, 120570, 120572, 120596, 120598, 120628, 120630, 120654, 120656, 120686, 120688, 120712, 120714, 120744, 120746, 120770, 120772, 120779, 123136, 123180, 123191, 123197, 123214, 123214, 123584, 123627, 124928, 125124, 125184, 125251, 125259, 125259, 126464, 126467, 126469, 126495, 126497, 126498, 126500, 126500, 126503, 126503, 126505, 126514, 126516, 126519, 126521, 126521, 126523, 126523, 126530, 126530, 126535, 126535, 126537, 126537, 126539, 126539, 126541, 126543, 126545, 126546, 126548, 126548, 126551, 126551, 126553, 126553, 126555, 126555, 126557, 126557, 126559, 126559, 126561, 126562, 126564, 126564, 126567, 126570, 126572, 126578, 126580, 126583, 126585, 126588, 126590, 126590, 126592, 126601, 126603, 126619, 126625, 126627, 126629, 126633, 126635, 126651, 131072, 173782, 173824, 177972, 177984, 178205, 178208, 183969, 183984, 191456, 194560, 195101];
     var unicodeESNextIdentifierPart = [48, 57, 65, 90, 95, 95, 97, 122, 170, 170, 181, 181, 183, 183, 186, 186, 192, 214, 216, 246, 248, 705, 710, 721, 736, 740, 748, 748, 750, 750, 768, 884, 886, 887, 890, 893, 895, 895, 902, 906, 908, 908, 910, 929, 931, 1013, 1015, 1153, 1155, 1159, 1162, 1327, 1329, 1366, 1369, 1369, 1376, 1416, 1425, 1469, 1471, 1471, 1473, 1474, 1476, 1477, 1479, 1479, 1488, 1514, 1519, 1522, 1552, 1562, 1568, 1641, 1646, 1747, 1749, 1756, 1759, 1768, 1770, 1788, 1791, 1791, 1808, 1866, 1869, 1969, 1984, 2037, 2042, 2042, 2045, 2045, 2048, 2093, 2112, 2139, 2144, 2154, 2208, 2228, 2230, 2237, 2259, 2273, 2275, 2403, 2406, 2415, 2417, 2435, 2437, 2444, 2447, 2448, 2451, 2472, 2474, 2480, 2482, 2482, 2486, 2489, 2492, 2500, 2503, 2504, 2507, 2510, 2519, 2519, 2524, 2525, 2527, 2531, 2534, 2545, 2556, 2556, 2558, 2558, 2561, 2563, 2565, 2570, 2575, 2576, 2579, 2600, 2602, 2608, 2610, 2611, 2613, 2614, 2616, 2617, 2620, 2620, 2622, 2626, 2631, 2632, 2635, 2637, 2641, 2641, 2649, 2652, 2654, 2654, 2662, 2677, 2689, 2691, 2693, 2701, 2703, 2705, 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2748, 2757, 2759, 2761, 2763, 2765, 2768, 2768, 2784, 2787, 2790, 2799, 2809, 2815, 2817, 2819, 2821, 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2869, 2873, 2876, 2884, 2887, 2888, 2891, 2893, 2902, 2903, 2908, 2909, 2911, 2915, 2918, 2927, 2929, 2929, 2946, 2947, 2949, 2954, 2958, 2960, 2962, 2965, 2969, 2970, 2972, 2972, 2974, 2975, 2979, 2980, 2984, 2986, 2990, 3001, 3006, 3010, 3014, 3016, 3018, 3021, 3024, 3024, 3031, 3031, 3046, 3055, 3072, 3084, 3086, 3088, 3090, 3112, 3114, 3129, 3133, 3140, 3142, 3144, 3146, 3149, 3157, 3158, 3160, 3162, 3168, 3171, 3174, 3183, 3200, 3203, 3205, 3212, 3214, 3216, 3218, 3240, 3242, 3251, 3253, 3257, 3260, 3268, 3270, 3272, 3274, 3277, 3285, 3286, 3294, 3294, 3296, 3299, 3302, 3311, 3313, 3314, 3328, 3331, 3333, 3340, 3342, 3344, 3346, 3396, 3398, 3400, 3402, 3406, 3412, 3415, 3423, 3427, 3430, 3439, 3450, 3455, 3458, 3459, 3461, 3478, 3482, 3505, 3507, 3515, 3517, 3517, 3520, 3526, 3530, 3530, 3535, 3540, 3542, 3542, 3544, 3551, 3558, 3567, 3570, 3571, 3585, 3642, 3648, 3662, 3664, 3673, 3713, 3714, 3716, 3716, 3718, 3722, 3724, 3747, 3749, 3749, 3751, 3773, 3776, 3780, 3782, 3782, 3784, 3789, 3792, 3801, 3804, 3807, 3840, 3840, 3864, 3865, 3872, 3881, 3893, 3893, 3895, 3895, 3897, 3897, 3902, 3911, 3913, 3948, 3953, 3972, 3974, 3991, 3993, 4028, 4038, 4038, 4096, 4169, 4176, 4253, 4256, 4293, 4295, 4295, 4301, 4301, 4304, 4346, 4348, 4680, 4682, 4685, 4688, 4694, 4696, 4696, 4698, 4701, 4704, 4744, 4746, 4749, 4752, 4784, 4786, 4789, 4792, 4798, 4800, 4800, 4802, 4805, 4808, 4822, 4824, 4880, 4882, 4885, 4888, 4954, 4957, 4959, 4969, 4977, 4992, 5007, 5024, 5109, 5112, 5117, 5121, 5740, 5743, 5759, 5761, 5786, 5792, 5866, 5870, 5880, 5888, 5900, 5902, 5908, 5920, 5940, 5952, 5971, 5984, 5996, 5998, 6000, 6002, 6003, 6016, 6099, 6103, 6103, 6108, 6109, 6112, 6121, 6155, 6157, 6160, 6169, 6176, 6264, 6272, 6314, 6320, 6389, 6400, 6430, 6432, 6443, 6448, 6459, 6470, 6509, 6512, 6516, 6528, 6571, 6576, 6601, 6608, 6618, 6656, 6683, 6688, 6750, 6752, 6780, 6783, 6793, 6800, 6809, 6823, 6823, 6832, 6845, 6912, 6987, 6992, 7001, 7019, 7027, 7040, 7155, 7168, 7223, 7232, 7241, 7245, 7293, 7296, 7304, 7312, 7354, 7357, 7359, 7376, 7378, 7380, 7418, 7424, 7673, 7675, 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025, 8027, 8027, 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130, 8132, 8134, 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188, 8255, 8256, 8276, 8276, 8305, 8305, 8319, 8319, 8336, 8348, 8400, 8412, 8417, 8417, 8421, 8432, 8450, 8450, 8455, 8455, 8458, 8467, 8469, 8469, 8472, 8477, 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8505, 8508, 8511, 8517, 8521, 8526, 8526, 8544, 8584, 11264, 11310, 11312, 11358, 11360, 11492, 11499, 11507, 11520, 11557, 11559, 11559, 11565, 11565, 11568, 11623, 11631, 11631, 11647, 11670, 11680, 11686, 11688, 11694, 11696, 11702, 11704, 11710, 11712, 11718, 11720, 11726, 11728, 11734, 11736, 11742, 11744, 11775, 12293, 12295, 12321, 12335, 12337, 12341, 12344, 12348, 12353, 12438, 12441, 12447, 12449, 12538, 12540, 12543, 12549, 12591, 12593, 12686, 12704, 12730, 12784, 12799, 13312, 19893, 19968, 40943, 40960, 42124, 42192, 42237, 42240, 42508, 42512, 42539, 42560, 42607, 42612, 42621, 42623, 42737, 42775, 42783, 42786, 42888, 42891, 42943, 42946, 42950, 42999, 43047, 43072, 43123, 43136, 43205, 43216, 43225, 43232, 43255, 43259, 43259, 43261, 43309, 43312, 43347, 43360, 43388, 43392, 43456, 43471, 43481, 43488, 43518, 43520, 43574, 43584, 43597, 43600, 43609, 43616, 43638, 43642, 43714, 43739, 43741, 43744, 43759, 43762, 43766, 43777, 43782, 43785, 43790, 43793, 43798, 43808, 43814, 43816, 43822, 43824, 43866, 43868, 43879, 43888, 44010, 44012, 44013, 44016, 44025, 44032, 55203, 55216, 55238, 55243, 55291, 63744, 64109, 64112, 64217, 64256, 64262, 64275, 64279, 64285, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321, 64323, 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008, 65019, 65024, 65039, 65056, 65071, 65075, 65076, 65101, 65103, 65136, 65140, 65142, 65276, 65296, 65305, 65313, 65338, 65343, 65343, 65345, 65370, 65382, 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500, 65536, 65547, 65549, 65574, 65576, 65594, 65596, 65597, 65599, 65613, 65616, 65629, 65664, 65786, 65856, 65908, 66045, 66045, 66176, 66204, 66208, 66256, 66272, 66272, 66304, 66335, 66349, 66378, 66384, 66426, 66432, 66461, 66464, 66499, 66504, 66511, 66513, 66517, 66560, 66717, 66720, 66729, 66736, 66771, 66776, 66811, 66816, 66855, 66864, 66915, 67072, 67382, 67392, 67413, 67424, 67431, 67584, 67589, 67592, 67592, 67594, 67637, 67639, 67640, 67644, 67644, 67647, 67669, 67680, 67702, 67712, 67742, 67808, 67826, 67828, 67829, 67840, 67861, 67872, 67897, 67968, 68023, 68030, 68031, 68096, 68099, 68101, 68102, 68108, 68115, 68117, 68119, 68121, 68149, 68152, 68154, 68159, 68159, 68192, 68220, 68224, 68252, 68288, 68295, 68297, 68326, 68352, 68405, 68416, 68437, 68448, 68466, 68480, 68497, 68608, 68680, 68736, 68786, 68800, 68850, 68864, 68903, 68912, 68921, 69376, 69404, 69415, 69415, 69424, 69456, 69600, 69622, 69632, 69702, 69734, 69743, 69759, 69818, 69840, 69864, 69872, 69881, 69888, 69940, 69942, 69951, 69956, 69958, 69968, 70003, 70006, 70006, 70016, 70084, 70089, 70092, 70096, 70106, 70108, 70108, 70144, 70161, 70163, 70199, 70206, 70206, 70272, 70278, 70280, 70280, 70282, 70285, 70287, 70301, 70303, 70312, 70320, 70378, 70384, 70393, 70400, 70403, 70405, 70412, 70415, 70416, 70419, 70440, 70442, 70448, 70450, 70451, 70453, 70457, 70459, 70468, 70471, 70472, 70475, 70477, 70480, 70480, 70487, 70487, 70493, 70499, 70502, 70508, 70512, 70516, 70656, 70730, 70736, 70745, 70750, 70751, 70784, 70853, 70855, 70855, 70864, 70873, 71040, 71093, 71096, 71104, 71128, 71133, 71168, 71232, 71236, 71236, 71248, 71257, 71296, 71352, 71360, 71369, 71424, 71450, 71453, 71467, 71472, 71481, 71680, 71738, 71840, 71913, 71935, 71935, 72096, 72103, 72106, 72151, 72154, 72161, 72163, 72164, 72192, 72254, 72263, 72263, 72272, 72345, 72349, 72349, 72384, 72440, 72704, 72712, 72714, 72758, 72760, 72768, 72784, 72793, 72818, 72847, 72850, 72871, 72873, 72886, 72960, 72966, 72968, 72969, 72971, 73014, 73018, 73018, 73020, 73021, 73023, 73031, 73040, 73049, 73056, 73061, 73063, 73064, 73066, 73102, 73104, 73105, 73107, 73112, 73120, 73129, 73440, 73462, 73728, 74649, 74752, 74862, 74880, 75075, 77824, 78894, 82944, 83526, 92160, 92728, 92736, 92766, 92768, 92777, 92880, 92909, 92912, 92916, 92928, 92982, 92992, 92995, 93008, 93017, 93027, 93047, 93053, 93071, 93760, 93823, 93952, 94026, 94031, 94087, 94095, 94111, 94176, 94177, 94179, 94179, 94208, 100343, 100352, 101106, 110592, 110878, 110928, 110930, 110948, 110951, 110960, 111355, 113664, 113770, 113776, 113788, 113792, 113800, 113808, 113817, 113821, 113822, 119141, 119145, 119149, 119154, 119163, 119170, 119173, 119179, 119210, 119213, 119362, 119364, 119808, 119892, 119894, 119964, 119966, 119967, 119970, 119970, 119973, 119974, 119977, 119980, 119982, 119993, 119995, 119995, 119997, 120003, 120005, 120069, 120071, 120074, 120077, 120084, 120086, 120092, 120094, 120121, 120123, 120126, 120128, 120132, 120134, 120134, 120138, 120144, 120146, 120485, 120488, 120512, 120514, 120538, 120540, 120570, 120572, 120596, 120598, 120628, 120630, 120654, 120656, 120686, 120688, 120712, 120714, 120744, 120746, 120770, 120772, 120779, 120782, 120831, 121344, 121398, 121403, 121452, 121461, 121461, 121476, 121476, 121499, 121503, 121505, 121519, 122880, 122886, 122888, 122904, 122907, 122913, 122915, 122916, 122918, 122922, 123136, 123180, 123184, 123197, 123200, 123209, 123214, 123214, 123584, 123641, 124928, 125124, 125136, 125142, 125184, 125259, 125264, 125273, 126464, 126467, 126469, 126495, 126497, 126498, 126500, 126500, 126503, 126503, 126505, 126514, 126516, 126519, 126521, 126521, 126523, 126523, 126530, 126530, 126535, 126535, 126537, 126537, 126539, 126539, 126541, 126543, 126545, 126546, 126548, 126548, 126551, 126551, 126553, 126553, 126555, 126555, 126557, 126557, 126559, 126559, 126561, 126562, 126564, 126564, 126567, 126570, 126572, 126578, 126580, 126583, 126585, 126588, 126590, 126590, 126592, 126601, 126603, 126619, 126625, 126627, 126629, 126633, 126635, 126651, 131072, 173782, 173824, 177972, 177984, 178205, 178208, 183969, 183984, 191456, 194560, 195101, 917760, 917999];
     /**
-     * Test for whether a single line comment's text contains a directive.
+     * Test for whether a single line comment with leading whitespace trimmed's text contains a directive.
      */
-    var commentDirectiveRegExSingleLine = /^\s*\/\/\/?\s*@(ts-expect-error|ts-ignore)/;
+    var commentDirectiveRegExSingleLine = /^\/\/\/?\s*@(ts-expect-error|ts-ignore)/;
     /**
-     * Test for whether a multi-line comment's last line contains a directive.
+     * Test for whether a multi-line comment with leading whitespace trimmed's last line contains a directive.
      */
-    var commentDirectiveRegExMultiLine = /^\s*(?:\/|\*)*\s*@(ts-expect-error|ts-ignore)/;
+    var commentDirectiveRegExMultiLine = /^(?:\/|\*)*\s*@(ts-expect-error|ts-ignore)/;
     function lookupInUnicodeMap(code, map) {
         // Bail out quickly if it couldn't possibly be in the map.
         if (code < map[0]) {
@@ -10074,8 +10384,8 @@
             hasExtendedUnicodeEscape: function () { return (tokenFlags & 8 /* ExtendedUnicodeEscape */) !== 0; },
             hasPrecedingLineBreak: function () { return (tokenFlags & 1 /* PrecedingLineBreak */) !== 0; },
             hasPrecedingJSDocComment: function () { return (tokenFlags & 2 /* PrecedingJSDocComment */) !== 0; },
-            isIdentifier: function () { return token === 78 /* Identifier */ || token > 115 /* LastReservedWord */; },
-            isReservedWord: function () { return token >= 80 /* FirstReservedWord */ && token <= 115 /* LastReservedWord */; },
+            isIdentifier: function () { return token === 79 /* Identifier */ || token > 116 /* LastReservedWord */; },
+            isReservedWord: function () { return token >= 81 /* FirstReservedWord */ && token <= 116 /* LastReservedWord */; },
             isUnterminated: function () { return (tokenFlags & 4 /* Unterminated */) !== 0; },
             getCommentDirectives: function () { return commentDirectives; },
             getNumericLiteralFlags: function () { return tokenFlags & 1008 /* NumericLiteralFlags */; },
@@ -10090,6 +10400,7 @@
             reScanJsxAttributeValue: reScanJsxAttributeValue,
             reScanJsxToken: reScanJsxToken,
             reScanLessThanToken: reScanLessThanToken,
+            reScanHashToken: reScanHashToken,
             reScanQuestionToken: reScanQuestionToken,
             reScanInvalidIdentifier: reScanInvalidIdentifier,
             scanJsxToken: scanJsxToken,
@@ -10600,7 +10911,7 @@
                     }
                 }
             }
-            return token = 78 /* Identifier */;
+            return token = 79 /* Identifier */;
         }
         function scanBinaryOrOctalDigits(base) {
             var value = "";
@@ -10749,19 +11060,19 @@
                         return token = scanTemplateAndSetTokenValue(/* isTaggedTemplate */ false);
                     case 37 /* percent */:
                         if (text.charCodeAt(pos + 1) === 61 /* equals */) {
-                            return pos += 2, token = 68 /* PercentEqualsToken */;
+                            return pos += 2, token = 69 /* PercentEqualsToken */;
                         }
                         pos++;
                         return token = 44 /* PercentToken */;
                     case 38 /* ampersand */:
                         if (text.charCodeAt(pos + 1) === 38 /* ampersand */) {
                             if (text.charCodeAt(pos + 2) === 61 /* equals */) {
-                                return pos += 3, token = 75 /* AmpersandAmpersandEqualsToken */;
+                                return pos += 3, token = 76 /* AmpersandAmpersandEqualsToken */;
                             }
                             return pos += 2, token = 55 /* AmpersandAmpersandToken */;
                         }
                         if (text.charCodeAt(pos + 1) === 61 /* equals */) {
-                            return pos += 2, token = 72 /* AmpersandEqualsToken */;
+                            return pos += 2, token = 73 /* AmpersandEqualsToken */;
                         }
                         pos++;
                         return token = 50 /* AmpersandToken */;
@@ -10773,11 +11084,11 @@
                         return token = 21 /* CloseParenToken */;
                     case 42 /* asterisk */:
                         if (text.charCodeAt(pos + 1) === 61 /* equals */) {
-                            return pos += 2, token = 65 /* AsteriskEqualsToken */;
+                            return pos += 2, token = 66 /* AsteriskEqualsToken */;
                         }
                         if (text.charCodeAt(pos + 1) === 42 /* asterisk */) {
                             if (text.charCodeAt(pos + 2) === 61 /* equals */) {
-                                return pos += 3, token = 66 /* AsteriskAsteriskEqualsToken */;
+                                return pos += 3, token = 67 /* AsteriskAsteriskEqualsToken */;
                             }
                             return pos += 2, token = 42 /* AsteriskAsteriskToken */;
                         }
@@ -10793,7 +11104,7 @@
                             return pos += 2, token = 45 /* PlusPlusToken */;
                         }
                         if (text.charCodeAt(pos + 1) === 61 /* equals */) {
-                            return pos += 2, token = 63 /* PlusEqualsToken */;
+                            return pos += 2, token = 64 /* PlusEqualsToken */;
                         }
                         pos++;
                         return token = 39 /* PlusToken */;
@@ -10805,7 +11116,7 @@
                             return pos += 2, token = 46 /* MinusMinusToken */;
                         }
                         if (text.charCodeAt(pos + 1) === 61 /* equals */) {
-                            return pos += 2, token = 64 /* MinusEqualsToken */;
+                            return pos += 2, token = 65 /* MinusEqualsToken */;
                         }
                         pos++;
                         return token = 40 /* MinusToken */;
@@ -10873,7 +11184,7 @@
                             }
                         }
                         if (text.charCodeAt(pos + 1) === 61 /* equals */) {
-                            return pos += 2, token = 67 /* SlashEqualsToken */;
+                            return pos += 2, token = 68 /* SlashEqualsToken */;
                         }
                         pos++;
                         return token = 43 /* SlashToken */;
@@ -10950,7 +11261,7 @@
                         }
                         if (text.charCodeAt(pos + 1) === 60 /* lessThan */) {
                             if (text.charCodeAt(pos + 2) === 61 /* equals */) {
-                                return pos += 3, token = 69 /* LessThanLessThanEqualsToken */;
+                                return pos += 3, token = 70 /* LessThanLessThanEqualsToken */;
                             }
                             return pos += 2, token = 47 /* LessThanLessThanToken */;
                         }
@@ -10984,7 +11295,7 @@
                             return pos += 2, token = 38 /* EqualsGreaterThanToken */;
                         }
                         pos++;
-                        return token = 62 /* EqualsToken */;
+                        return token = 63 /* EqualsToken */;
                     case 62 /* greaterThan */:
                         if (isConflictMarkerTrivia(text, pos)) {
                             pos = scanConflictMarkerTrivia(text, pos, error);
@@ -11003,7 +11314,7 @@
                         }
                         if (text.charCodeAt(pos + 1) === 63 /* question */) {
                             if (text.charCodeAt(pos + 2) === 61 /* equals */) {
-                                return pos += 3, token = 76 /* QuestionQuestionEqualsToken */;
+                                return pos += 3, token = 77 /* QuestionQuestionEqualsToken */;
                             }
                             return pos += 2, token = 60 /* QuestionQuestionToken */;
                         }
@@ -11017,7 +11328,7 @@
                         return token = 23 /* CloseBracketToken */;
                     case 94 /* caret */:
                         if (text.charCodeAt(pos + 1) === 61 /* equals */) {
-                            return pos += 2, token = 77 /* CaretEqualsToken */;
+                            return pos += 2, token = 78 /* CaretEqualsToken */;
                         }
                         pos++;
                         return token = 52 /* CaretToken */;
@@ -11036,12 +11347,12 @@
                         }
                         if (text.charCodeAt(pos + 1) === 124 /* bar */) {
                             if (text.charCodeAt(pos + 2) === 61 /* equals */) {
-                                return pos += 3, token = 74 /* BarBarEqualsToken */;
+                                return pos += 3, token = 75 /* BarBarEqualsToken */;
                             }
                             return pos += 2, token = 56 /* BarBarToken */;
                         }
                         if (text.charCodeAt(pos + 1) === 61 /* equals */) {
-                            return pos += 2, token = 73 /* BarEqualsToken */;
+                            return pos += 2, token = 74 /* BarEqualsToken */;
                         }
                         pos++;
                         return token = 51 /* BarToken */;
@@ -11078,21 +11389,15 @@
                             pos++;
                             return token = 0 /* Unknown */;
                         }
-                        pos++;
-                        if (isIdentifierStart(ch = text.charCodeAt(pos), languageVersion)) {
+                        if (isIdentifierStart(codePointAt(text, pos + 1), languageVersion)) {
                             pos++;
-                            while (pos < end && isIdentifierPart(ch = text.charCodeAt(pos), languageVersion))
-                                pos++;
-                            tokenValue = text.substring(tokenPos, pos);
-                            if (ch === 92 /* backslash */) {
-                                tokenValue += scanIdentifierParts();
-                            }
+                            scanIdentifier(codePointAt(text, pos), languageVersion);
                         }
                         else {
-                            tokenValue = "#";
-                            error(ts.Diagnostics.Invalid_character);
+                            tokenValue = String.fromCharCode(codePointAt(text, pos));
+                            error(ts.Diagnostics.Invalid_character, pos++, charSize(ch));
                         }
-                        return token = 79 /* PrivateIdentifier */;
+                        return token = 80 /* PrivateIdentifier */;
                     default:
                         var identifierKind = scanIdentifier(ch, languageVersion);
                         if (identifierKind) {
@@ -11107,8 +11412,9 @@
                             pos += charSize(ch);
                             continue;
                         }
-                        error(ts.Diagnostics.Invalid_character);
-                        pos += charSize(ch);
+                        var size = charSize(ch);
+                        error(ts.Diagnostics.Invalid_character, pos, size);
+                        pos += size;
                         return token = 0 /* Unknown */;
                 }
             }
@@ -11143,12 +11449,12 @@
                 if (text.charCodeAt(pos) === 62 /* greaterThan */) {
                     if (text.charCodeAt(pos + 1) === 62 /* greaterThan */) {
                         if (text.charCodeAt(pos + 2) === 61 /* equals */) {
-                            return pos += 3, token = 71 /* GreaterThanGreaterThanGreaterThanEqualsToken */;
+                            return pos += 3, token = 72 /* GreaterThanGreaterThanGreaterThanEqualsToken */;
                         }
                         return pos += 2, token = 49 /* GreaterThanGreaterThanGreaterThanToken */;
                     }
                     if (text.charCodeAt(pos + 1) === 61 /* equals */) {
-                        return pos += 2, token = 70 /* GreaterThanGreaterThanEqualsToken */;
+                        return pos += 2, token = 71 /* GreaterThanGreaterThanEqualsToken */;
                     }
                     pos++;
                     return token = 48 /* GreaterThanGreaterThanToken */;
@@ -11161,12 +11467,12 @@
             return token;
         }
         function reScanAsteriskEqualsToken() {
-            ts.Debug.assert(token === 65 /* AsteriskEqualsToken */, "'reScanAsteriskEqualsToken' should only be called on a '*='");
+            ts.Debug.assert(token === 66 /* AsteriskEqualsToken */, "'reScanAsteriskEqualsToken' should only be called on a '*='");
             pos = tokenPos + 1;
-            return token = 62 /* EqualsToken */;
+            return token = 63 /* EqualsToken */;
         }
         function reScanSlashToken() {
-            if (token === 43 /* SlashToken */ || token === 67 /* SlashEqualsToken */) {
+            if (token === 43 /* SlashToken */ || token === 68 /* SlashEqualsToken */) {
                 var p = tokenPos + 1;
                 var inEscape = false;
                 var inCharacterClass = false;
@@ -11216,7 +11522,7 @@
             return token;
         }
         function appendIfCommentDirective(commentDirectives, text, commentDirectiveRegEx, lineStart) {
-            var type = getDirectiveFromComment(text, commentDirectiveRegEx);
+            var type = getDirectiveFromComment(ts.trimStringStart(text), commentDirectiveRegEx);
             if (type === undefined) {
                 return commentDirectives;
             }
@@ -11262,6 +11568,13 @@
             }
             return token;
         }
+        function reScanHashToken() {
+            if (token === 80 /* PrivateIdentifier */) {
+                pos = tokenPos + 1;
+                return token = 62 /* HashToken */;
+            }
+            return token;
+        }
         function reScanQuestionToken() {
             ts.Debug.assert(token === 60 /* QuestionQuestionToken */, "'reScanQuestionToken' should only be called on a '??'");
             pos = tokenPos + 1;
@@ -11350,7 +11663,7 @@
                         tokenValue += ":";
                         pos++;
                         namespaceSeparator = true;
-                        token = 78 /* Identifier */; // swap from keyword kind to identifier kind
+                        token = 79 /* Identifier */; // swap from keyword kind to identifier kind
                         continue;
                     }
                     var oldPos = pos;
@@ -11425,13 +11738,15 @@
                 case 62 /* greaterThan */:
                     return token = 31 /* GreaterThanToken */;
                 case 61 /* equals */:
-                    return token = 62 /* EqualsToken */;
+                    return token = 63 /* EqualsToken */;
                 case 44 /* comma */:
                     return token = 27 /* CommaToken */;
                 case 46 /* dot */:
                     return token = 24 /* DotToken */;
                 case 96 /* backtick */:
                     return token = 61 /* BacktickToken */;
+                case 35 /* hash */:
+                    return token = 62 /* HashToken */;
                 case 92 /* backslash */:
                     pos--;
                     var extendedCookedChar = peekExtendedUnicodeEscape();
@@ -11827,9 +12142,9 @@
     }
     ts.collapseTextChangeRangesAcrossMultipleVersions = collapseTextChangeRangesAcrossMultipleVersions;
     function getTypeParameterOwner(d) {
-        if (d && d.kind === 160 /* TypeParameter */) {
+        if (d && d.kind === 161 /* TypeParameter */) {
             for (var current = d; current; current = current.parent) {
-                if (isFunctionLike(current) || isClassLike(current) || current.kind === 254 /* InterfaceDeclaration */) {
+                if (isFunctionLike(current) || isClassLike(current) || current.kind === 256 /* InterfaceDeclaration */) {
                     return current;
                 }
             }
@@ -11837,7 +12152,7 @@
     }
     ts.getTypeParameterOwner = getTypeParameterOwner;
     function isParameterPropertyDeclaration(node, parent) {
-        return ts.hasSyntacticModifier(node, 16476 /* ParameterPropertyModifier */) && parent.kind === 167 /* Constructor */;
+        return ts.hasSyntacticModifier(node, 16476 /* ParameterPropertyModifier */) && parent.kind === 169 /* Constructor */;
     }
     ts.isParameterPropertyDeclaration = isParameterPropertyDeclaration;
     function isEmptyBindingPattern(node) {
@@ -11867,14 +12182,14 @@
             node = walkUpBindingElementsAndPatterns(node);
         }
         var flags = getFlags(node);
-        if (node.kind === 250 /* VariableDeclaration */) {
+        if (node.kind === 252 /* VariableDeclaration */) {
             node = node.parent;
         }
-        if (node && node.kind === 251 /* VariableDeclarationList */) {
+        if (node && node.kind === 253 /* VariableDeclarationList */) {
             flags |= getFlags(node);
             node = node.parent;
         }
-        if (node && node.kind === 233 /* VariableStatement */) {
+        if (node && node.kind === 235 /* VariableStatement */) {
             flags |= getFlags(node);
         }
         return flags;
@@ -12047,30 +12362,30 @@
         }
         // Covers remaining cases (returning undefined if none match).
         switch (hostNode.kind) {
-            case 233 /* VariableStatement */:
+            case 235 /* VariableStatement */:
                 if (hostNode.declarationList && hostNode.declarationList.declarations[0]) {
                     return getDeclarationIdentifier(hostNode.declarationList.declarations[0]);
                 }
                 break;
-            case 234 /* ExpressionStatement */:
+            case 236 /* ExpressionStatement */:
                 var expr = hostNode.expression;
-                if (expr.kind === 217 /* BinaryExpression */ && expr.operatorToken.kind === 62 /* EqualsToken */) {
+                if (expr.kind === 219 /* BinaryExpression */ && expr.operatorToken.kind === 63 /* EqualsToken */) {
                     expr = expr.left;
                 }
                 switch (expr.kind) {
-                    case 202 /* PropertyAccessExpression */:
+                    case 204 /* PropertyAccessExpression */:
                         return expr.name;
-                    case 203 /* ElementAccessExpression */:
+                    case 205 /* ElementAccessExpression */:
                         var arg = expr.argumentExpression;
                         if (ts.isIdentifier(arg)) {
                             return arg;
                         }
                 }
                 break;
-            case 208 /* ParenthesizedExpression */: {
+            case 210 /* ParenthesizedExpression */: {
                 return getDeclarationIdentifier(hostNode.expression);
             }
-            case 246 /* LabeledStatement */: {
+            case 248 /* LabeledStatement */: {
                 if (isDeclaration(hostNode.statement) || isExpression(hostNode.statement)) {
                     return getDeclarationIdentifier(hostNode.statement);
                 }
@@ -12105,18 +12420,18 @@
     /** @internal */
     function getNonAssignedNameOfDeclaration(declaration) {
         switch (declaration.kind) {
-            case 78 /* Identifier */:
+            case 79 /* Identifier */:
                 return declaration;
-            case 337 /* JSDocPropertyTag */:
-            case 330 /* JSDocParameterTag */: {
+            case 342 /* JSDocPropertyTag */:
+            case 335 /* JSDocParameterTag */: {
                 var name = declaration.name;
-                if (name.kind === 158 /* QualifiedName */) {
+                if (name.kind === 159 /* QualifiedName */) {
                     return name.right;
                 }
                 break;
             }
-            case 204 /* CallExpression */:
-            case 217 /* BinaryExpression */: {
+            case 206 /* CallExpression */:
+            case 219 /* BinaryExpression */: {
                 var expr_1 = declaration;
                 switch (ts.getAssignmentDeclarationKind(expr_1)) {
                     case 1 /* ExportsProperty */:
@@ -12132,15 +12447,15 @@
                         return undefined;
                 }
             }
-            case 335 /* JSDocTypedefTag */:
+            case 340 /* JSDocTypedefTag */:
                 return getNameOfJSDocTypedef(declaration);
-            case 329 /* JSDocEnumTag */:
+            case 334 /* JSDocEnumTag */:
                 return nameForNamelessJSDocTypedef(declaration);
-            case 267 /* ExportAssignment */: {
+            case 269 /* ExportAssignment */: {
                 var expression = declaration.expression;
                 return ts.isIdentifier(expression) ? expression : undefined;
             }
-            case 203 /* ElementAccessExpression */:
+            case 205 /* ElementAccessExpression */:
                 var expr = declaration;
                 if (ts.isBindableStaticElementAccessExpression(expr)) {
                     return expr.argumentExpression;
@@ -12434,7 +12749,8 @@
     function getTextOfJSDocComment(comment) {
         return typeof comment === "string" ? comment
             : comment === null || comment === void 0 ? void 0 : comment.map(function (c) {
-                return c.kind === 313 /* JSDocText */ ? c.text : "{@link " + (c.name ? ts.entityNameToString(c.name) + " " : "") + c.text + "}";
+                // TODO: Other kinds here
+                return c.kind === 316 /* JSDocText */ ? c.text : "{@link " + (c.name ? ts.entityNameToString(c.name) + " " : "") + c.text + "}";
             }).join("");
     }
     ts.getTextOfJSDocComment = getTextOfJSDocComment;
@@ -12447,7 +12763,7 @@
             return ts.emptyArray;
         }
         if (ts.isJSDocTypeAlias(node)) {
-            ts.Debug.assert(node.parent.kind === 312 /* JSDocComment */);
+            ts.Debug.assert(node.parent.kind === 315 /* JSDocComment */);
             return ts.flatMap(node.parent.tags, function (tag) { return ts.isJSDocTemplateTag(tag) ? tag.typeParameters : undefined; });
         }
         if (node.typeParameters) {
@@ -12474,12 +12790,12 @@
     ts.getEffectiveConstraintOfTypeParameter = getEffectiveConstraintOfTypeParameter;
     // #region
     function isMemberName(node) {
-        return node.kind === 78 /* Identifier */ || node.kind === 79 /* PrivateIdentifier */;
+        return node.kind === 79 /* Identifier */ || node.kind === 80 /* PrivateIdentifier */;
     }
     ts.isMemberName = isMemberName;
     /* @internal */
     function isGetOrSetAccessorDeclaration(node) {
-        return node.kind === 169 /* SetAccessor */ || node.kind === 168 /* GetAccessor */;
+        return node.kind === 171 /* SetAccessor */ || node.kind === 170 /* GetAccessor */;
     }
     ts.isGetOrSetAccessorDeclaration = isGetOrSetAccessorDeclaration;
     function isPropertyAccessChain(node) {
@@ -12497,10 +12813,10 @@
     function isOptionalChain(node) {
         var kind = node.kind;
         return !!(node.flags & 32 /* OptionalChain */) &&
-            (kind === 202 /* PropertyAccessExpression */
-                || kind === 203 /* ElementAccessExpression */
-                || kind === 204 /* CallExpression */
-                || kind === 226 /* NonNullExpression */);
+            (kind === 204 /* PropertyAccessExpression */
+                || kind === 205 /* ElementAccessExpression */
+                || kind === 206 /* CallExpression */
+                || kind === 228 /* NonNullExpression */);
     }
     ts.isOptionalChain = isOptionalChain;
     /* @internal */
@@ -12535,7 +12851,7 @@
     }
     ts.isOutermostOptionalChain = isOutermostOptionalChain;
     function isNullishCoalesce(node) {
-        return node.kind === 217 /* BinaryExpression */ && node.operatorToken.kind === 60 /* QuestionQuestionToken */;
+        return node.kind === 219 /* BinaryExpression */ && node.operatorToken.kind === 60 /* QuestionQuestionToken */;
     }
     ts.isNullishCoalesce = isNullishCoalesce;
     function isConstTypeReference(node) {
@@ -12552,17 +12868,17 @@
     }
     ts.isNonNullChain = isNonNullChain;
     function isBreakOrContinueStatement(node) {
-        return node.kind === 242 /* BreakStatement */ || node.kind === 241 /* ContinueStatement */;
+        return node.kind === 244 /* BreakStatement */ || node.kind === 243 /* ContinueStatement */;
     }
     ts.isBreakOrContinueStatement = isBreakOrContinueStatement;
     function isNamedExportBindings(node) {
-        return node.kind === 270 /* NamespaceExport */ || node.kind === 269 /* NamedExports */;
+        return node.kind === 272 /* NamespaceExport */ || node.kind === 271 /* NamedExports */;
     }
     ts.isNamedExportBindings = isNamedExportBindings;
     function isUnparsedTextLike(node) {
         switch (node.kind) {
-            case 295 /* UnparsedText */:
-            case 296 /* UnparsedInternalText */:
+            case 297 /* UnparsedText */:
+            case 298 /* UnparsedInternalText */:
                 return true;
             default:
                 return false;
@@ -12571,12 +12887,12 @@
     ts.isUnparsedTextLike = isUnparsedTextLike;
     function isUnparsedNode(node) {
         return isUnparsedTextLike(node) ||
-            node.kind === 293 /* UnparsedPrologue */ ||
-            node.kind === 297 /* UnparsedSyntheticReference */;
+            node.kind === 295 /* UnparsedPrologue */ ||
+            node.kind === 299 /* UnparsedSyntheticReference */;
     }
     ts.isUnparsedNode = isUnparsedNode;
     function isJSDocPropertyLikeTag(node) {
-        return node.kind === 337 /* JSDocPropertyTag */ || node.kind === 330 /* JSDocParameterTag */;
+        return node.kind === 342 /* JSDocPropertyTag */ || node.kind === 335 /* JSDocParameterTag */;
     }
     ts.isJSDocPropertyLikeTag = isJSDocPropertyLikeTag;
     // #endregion
@@ -12592,7 +12908,7 @@
     ts.isNode = isNode;
     /* @internal */
     function isNodeKind(kind) {
-        return kind >= 158 /* FirstNode */;
+        return kind >= 159 /* FirstNode */;
     }
     ts.isNodeKind = isNodeKind;
     /**
@@ -12601,7 +12917,7 @@
      * Literals are considered tokens, except TemplateLiteral, but does include TemplateHead/Middle/Tail.
      */
     function isTokenKind(kind) {
-        return kind >= 0 /* FirstToken */ && kind <= 157 /* LastToken */;
+        return kind >= 0 /* FirstToken */ && kind <= 158 /* LastToken */;
     }
     ts.isTokenKind = isTokenKind;
     /**
@@ -12651,13 +12967,13 @@
     ts.isImportOrExportSpecifier = isImportOrExportSpecifier;
     function isTypeOnlyImportOrExportDeclaration(node) {
         switch (node.kind) {
-            case 266 /* ImportSpecifier */:
-            case 271 /* ExportSpecifier */:
+            case 268 /* ImportSpecifier */:
+            case 273 /* ExportSpecifier */:
                 return node.parent.parent.isTypeOnly;
-            case 264 /* NamespaceImport */:
+            case 266 /* NamespaceImport */:
                 return node.parent.isTypeOnly;
-            case 263 /* ImportClause */:
-            case 261 /* ImportEqualsDeclaration */:
+            case 265 /* ImportClause */:
+            case 263 /* ImportEqualsDeclaration */:
                 return node.isTypeOnly;
             default:
                 return false;
@@ -12689,18 +13005,18 @@
     /* @internal */
     function isModifierKind(token) {
         switch (token) {
-            case 125 /* AbstractKeyword */:
-            case 129 /* AsyncKeyword */:
-            case 84 /* ConstKeyword */:
-            case 133 /* DeclareKeyword */:
-            case 87 /* DefaultKeyword */:
-            case 92 /* ExportKeyword */:
-            case 122 /* PublicKeyword */:
-            case 120 /* PrivateKeyword */:
-            case 121 /* ProtectedKeyword */:
-            case 142 /* ReadonlyKeyword */:
-            case 123 /* StaticKeyword */:
-            case 156 /* OverrideKeyword */:
+            case 126 /* AbstractKeyword */:
+            case 130 /* AsyncKeyword */:
+            case 85 /* ConstKeyword */:
+            case 134 /* DeclareKeyword */:
+            case 88 /* DefaultKeyword */:
+            case 93 /* ExportKeyword */:
+            case 123 /* PublicKeyword */:
+            case 121 /* PrivateKeyword */:
+            case 122 /* ProtectedKeyword */:
+            case 143 /* ReadonlyKeyword */:
+            case 124 /* StaticKeyword */:
+            case 157 /* OverrideKeyword */:
                 return true;
         }
         return false;
@@ -12713,7 +13029,7 @@
     ts.isParameterPropertyModifier = isParameterPropertyModifier;
     /* @internal */
     function isClassMemberModifier(idToken) {
-        return isParameterPropertyModifier(idToken) || idToken === 123 /* StaticKeyword */ || idToken === 156 /* OverrideKeyword */;
+        return isParameterPropertyModifier(idToken) || idToken === 124 /* StaticKeyword */ || idToken === 157 /* OverrideKeyword */;
     }
     ts.isClassMemberModifier = isClassMemberModifier;
     function isModifier(node) {
@@ -12722,24 +13038,24 @@
     ts.isModifier = isModifier;
     function isEntityName(node) {
         var kind = node.kind;
-        return kind === 158 /* QualifiedName */
-            || kind === 78 /* Identifier */;
+        return kind === 159 /* QualifiedName */
+            || kind === 79 /* Identifier */;
     }
     ts.isEntityName = isEntityName;
     function isPropertyName(node) {
         var kind = node.kind;
-        return kind === 78 /* Identifier */
-            || kind === 79 /* PrivateIdentifier */
+        return kind === 79 /* Identifier */
+            || kind === 80 /* PrivateIdentifier */
             || kind === 10 /* StringLiteral */
             || kind === 8 /* NumericLiteral */
-            || kind === 159 /* ComputedPropertyName */;
+            || kind === 160 /* ComputedPropertyName */;
     }
     ts.isPropertyName = isPropertyName;
     function isBindingName(node) {
         var kind = node.kind;
-        return kind === 78 /* Identifier */
-            || kind === 197 /* ObjectBindingPattern */
-            || kind === 198 /* ArrayBindingPattern */;
+        return kind === 79 /* Identifier */
+            || kind === 199 /* ObjectBindingPattern */
+            || kind === 200 /* ArrayBindingPattern */;
     }
     ts.isBindingName = isBindingName;
     // Functions
@@ -12748,19 +13064,29 @@
     }
     ts.isFunctionLike = isFunctionLike;
     /* @internal */
+    function isFunctionLikeOrClassStaticBlockDeclaration(node) {
+        return !!node && (isFunctionLikeKind(node.kind) || ts.isClassStaticBlockDeclaration(node));
+    }
+    ts.isFunctionLikeOrClassStaticBlockDeclaration = isFunctionLikeOrClassStaticBlockDeclaration;
+    /* @internal */
     function isFunctionLikeDeclaration(node) {
         return node && isFunctionLikeDeclarationKind(node.kind);
     }
     ts.isFunctionLikeDeclaration = isFunctionLikeDeclaration;
+    /* @internal */
+    function isBooleanLiteral(node) {
+        return node.kind === 110 /* TrueKeyword */ || node.kind === 95 /* FalseKeyword */;
+    }
+    ts.isBooleanLiteral = isBooleanLiteral;
     function isFunctionLikeDeclarationKind(kind) {
         switch (kind) {
-            case 252 /* FunctionDeclaration */:
-            case 166 /* MethodDeclaration */:
-            case 167 /* Constructor */:
-            case 168 /* GetAccessor */:
-            case 169 /* SetAccessor */:
-            case 209 /* FunctionExpression */:
-            case 210 /* ArrowFunction */:
+            case 254 /* FunctionDeclaration */:
+            case 167 /* MethodDeclaration */:
+            case 169 /* Constructor */:
+            case 170 /* GetAccessor */:
+            case 171 /* SetAccessor */:
+            case 211 /* FunctionExpression */:
+            case 212 /* ArrowFunction */:
                 return true;
             default:
                 return false;
@@ -12769,14 +13095,14 @@
     /* @internal */
     function isFunctionLikeKind(kind) {
         switch (kind) {
-            case 165 /* MethodSignature */:
-            case 170 /* CallSignature */:
-            case 315 /* JSDocSignature */:
-            case 171 /* ConstructSignature */:
-            case 172 /* IndexSignature */:
-            case 175 /* FunctionType */:
-            case 309 /* JSDocFunctionType */:
-            case 176 /* ConstructorType */:
+            case 166 /* MethodSignature */:
+            case 172 /* CallSignature */:
+            case 318 /* JSDocSignature */:
+            case 173 /* ConstructSignature */:
+            case 174 /* IndexSignature */:
+            case 177 /* FunctionType */:
+            case 312 /* JSDocFunctionType */:
+            case 178 /* ConstructorType */:
                 return true;
             default:
                 return isFunctionLikeDeclarationKind(kind);
@@ -12791,29 +13117,30 @@
     // Classes
     function isClassElement(node) {
         var kind = node.kind;
-        return kind === 167 /* Constructor */
-            || kind === 164 /* PropertyDeclaration */
-            || kind === 166 /* MethodDeclaration */
-            || kind === 168 /* GetAccessor */
-            || kind === 169 /* SetAccessor */
-            || kind === 172 /* IndexSignature */
-            || kind === 230 /* SemicolonClassElement */;
+        return kind === 169 /* Constructor */
+            || kind === 165 /* PropertyDeclaration */
+            || kind === 167 /* MethodDeclaration */
+            || kind === 170 /* GetAccessor */
+            || kind === 171 /* SetAccessor */
+            || kind === 174 /* IndexSignature */
+            || kind === 168 /* ClassStaticBlockDeclaration */
+            || kind === 232 /* SemicolonClassElement */;
     }
     ts.isClassElement = isClassElement;
     function isClassLike(node) {
-        return node && (node.kind === 253 /* ClassDeclaration */ || node.kind === 222 /* ClassExpression */);
+        return node && (node.kind === 255 /* ClassDeclaration */ || node.kind === 224 /* ClassExpression */);
     }
     ts.isClassLike = isClassLike;
     function isAccessor(node) {
-        return node && (node.kind === 168 /* GetAccessor */ || node.kind === 169 /* SetAccessor */);
+        return node && (node.kind === 170 /* GetAccessor */ || node.kind === 171 /* SetAccessor */);
     }
     ts.isAccessor = isAccessor;
     /* @internal */
     function isMethodOrAccessor(node) {
         switch (node.kind) {
-            case 166 /* MethodDeclaration */:
-            case 168 /* GetAccessor */:
-            case 169 /* SetAccessor */:
+            case 167 /* MethodDeclaration */:
+            case 170 /* GetAccessor */:
+            case 171 /* SetAccessor */:
                 return true;
             default:
                 return false;
@@ -12823,11 +13150,11 @@
     // Type members
     function isTypeElement(node) {
         var kind = node.kind;
-        return kind === 171 /* ConstructSignature */
-            || kind === 170 /* CallSignature */
-            || kind === 163 /* PropertySignature */
-            || kind === 165 /* MethodSignature */
-            || kind === 172 /* IndexSignature */;
+        return kind === 173 /* ConstructSignature */
+            || kind === 172 /* CallSignature */
+            || kind === 164 /* PropertySignature */
+            || kind === 166 /* MethodSignature */
+            || kind === 174 /* IndexSignature */;
     }
     ts.isTypeElement = isTypeElement;
     function isClassOrTypeElement(node) {
@@ -12836,12 +13163,12 @@
     ts.isClassOrTypeElement = isClassOrTypeElement;
     function isObjectLiteralElementLike(node) {
         var kind = node.kind;
-        return kind === 289 /* PropertyAssignment */
-            || kind === 290 /* ShorthandPropertyAssignment */
-            || kind === 291 /* SpreadAssignment */
-            || kind === 166 /* MethodDeclaration */
-            || kind === 168 /* GetAccessor */
-            || kind === 169 /* SetAccessor */;
+        return kind === 291 /* PropertyAssignment */
+            || kind === 292 /* ShorthandPropertyAssignment */
+            || kind === 293 /* SpreadAssignment */
+            || kind === 167 /* MethodDeclaration */
+            || kind === 170 /* GetAccessor */
+            || kind === 171 /* SetAccessor */;
     }
     ts.isObjectLiteralElementLike = isObjectLiteralElementLike;
     // Type
@@ -12856,8 +13183,8 @@
     ts.isTypeNode = isTypeNode;
     function isFunctionOrConstructorTypeNode(node) {
         switch (node.kind) {
-            case 175 /* FunctionType */:
-            case 176 /* ConstructorType */:
+            case 177 /* FunctionType */:
+            case 178 /* ConstructorType */:
                 return true;
         }
         return false;
@@ -12868,8 +13195,8 @@
     function isBindingPattern(node) {
         if (node) {
             var kind = node.kind;
-            return kind === 198 /* ArrayBindingPattern */
-                || kind === 197 /* ObjectBindingPattern */;
+            return kind === 200 /* ArrayBindingPattern */
+                || kind === 199 /* ObjectBindingPattern */;
         }
         return false;
     }
@@ -12877,15 +13204,15 @@
     /* @internal */
     function isAssignmentPattern(node) {
         var kind = node.kind;
-        return kind === 200 /* ArrayLiteralExpression */
-            || kind === 201 /* ObjectLiteralExpression */;
+        return kind === 202 /* ArrayLiteralExpression */
+            || kind === 203 /* ObjectLiteralExpression */;
     }
     ts.isAssignmentPattern = isAssignmentPattern;
     /* @internal */
     function isArrayBindingElement(node) {
         var kind = node.kind;
-        return kind === 199 /* BindingElement */
-            || kind === 223 /* OmittedExpression */;
+        return kind === 201 /* BindingElement */
+            || kind === 225 /* OmittedExpression */;
     }
     ts.isArrayBindingElement = isArrayBindingElement;
     /**
@@ -12894,9 +13221,9 @@
     /* @internal */
     function isDeclarationBindingElement(bindingElement) {
         switch (bindingElement.kind) {
-            case 250 /* VariableDeclaration */:
-            case 161 /* Parameter */:
-            case 199 /* BindingElement */:
+            case 252 /* VariableDeclaration */:
+            case 162 /* Parameter */:
+            case 201 /* BindingElement */:
                 return true;
         }
         return false;
@@ -12917,21 +13244,33 @@
     /* @internal */
     function isObjectBindingOrAssignmentPattern(node) {
         switch (node.kind) {
-            case 197 /* ObjectBindingPattern */:
-            case 201 /* ObjectLiteralExpression */:
+            case 199 /* ObjectBindingPattern */:
+            case 203 /* ObjectLiteralExpression */:
                 return true;
         }
         return false;
     }
     ts.isObjectBindingOrAssignmentPattern = isObjectBindingOrAssignmentPattern;
+    /* @internal */
+    function isObjectBindingOrAssignmentElement(node) {
+        switch (node.kind) {
+            case 201 /* BindingElement */:
+            case 291 /* PropertyAssignment */: // AssignmentProperty
+            case 292 /* ShorthandPropertyAssignment */: // AssignmentProperty
+            case 293 /* SpreadAssignment */: // AssignmentRestProperty
+                return true;
+        }
+        return false;
+    }
+    ts.isObjectBindingOrAssignmentElement = isObjectBindingOrAssignmentElement;
     /**
      * Determines whether a node is an ArrayBindingOrAssignmentPattern
      */
     /* @internal */
     function isArrayBindingOrAssignmentPattern(node) {
         switch (node.kind) {
-            case 198 /* ArrayBindingPattern */:
-            case 200 /* ArrayLiteralExpression */:
+            case 200 /* ArrayBindingPattern */:
+            case 202 /* ArrayLiteralExpression */:
                 return true;
         }
         return false;
@@ -12940,26 +13279,26 @@
     /* @internal */
     function isPropertyAccessOrQualifiedNameOrImportTypeNode(node) {
         var kind = node.kind;
-        return kind === 202 /* PropertyAccessExpression */
-            || kind === 158 /* QualifiedName */
-            || kind === 196 /* ImportType */;
+        return kind === 204 /* PropertyAccessExpression */
+            || kind === 159 /* QualifiedName */
+            || kind === 198 /* ImportType */;
     }
     ts.isPropertyAccessOrQualifiedNameOrImportTypeNode = isPropertyAccessOrQualifiedNameOrImportTypeNode;
     // Expression
     function isPropertyAccessOrQualifiedName(node) {
         var kind = node.kind;
-        return kind === 202 /* PropertyAccessExpression */
-            || kind === 158 /* QualifiedName */;
+        return kind === 204 /* PropertyAccessExpression */
+            || kind === 159 /* QualifiedName */;
     }
     ts.isPropertyAccessOrQualifiedName = isPropertyAccessOrQualifiedName;
     function isCallLikeExpression(node) {
         switch (node.kind) {
-            case 276 /* JsxOpeningElement */:
-            case 275 /* JsxSelfClosingElement */:
-            case 204 /* CallExpression */:
-            case 205 /* NewExpression */:
-            case 206 /* TaggedTemplateExpression */:
-            case 162 /* Decorator */:
+            case 278 /* JsxOpeningElement */:
+            case 277 /* JsxSelfClosingElement */:
+            case 206 /* CallExpression */:
+            case 207 /* NewExpression */:
+            case 208 /* TaggedTemplateExpression */:
+            case 163 /* Decorator */:
                 return true;
             default:
                 return false;
@@ -12967,12 +13306,12 @@
     }
     ts.isCallLikeExpression = isCallLikeExpression;
     function isCallOrNewExpression(node) {
-        return node.kind === 204 /* CallExpression */ || node.kind === 205 /* NewExpression */;
+        return node.kind === 206 /* CallExpression */ || node.kind === 207 /* NewExpression */;
     }
     ts.isCallOrNewExpression = isCallOrNewExpression;
     function isTemplateLiteral(node) {
         var kind = node.kind;
-        return kind === 219 /* TemplateExpression */
+        return kind === 221 /* TemplateExpression */
             || kind === 14 /* NoSubstitutionTemplateLiteral */;
     }
     ts.isTemplateLiteral = isTemplateLiteral;
@@ -12983,34 +13322,34 @@
     ts.isLeftHandSideExpression = isLeftHandSideExpression;
     function isLeftHandSideExpressionKind(kind) {
         switch (kind) {
-            case 202 /* PropertyAccessExpression */:
-            case 203 /* ElementAccessExpression */:
-            case 205 /* NewExpression */:
-            case 204 /* CallExpression */:
-            case 274 /* JsxElement */:
-            case 275 /* JsxSelfClosingElement */:
-            case 278 /* JsxFragment */:
-            case 206 /* TaggedTemplateExpression */:
-            case 200 /* ArrayLiteralExpression */:
-            case 208 /* ParenthesizedExpression */:
-            case 201 /* ObjectLiteralExpression */:
-            case 222 /* ClassExpression */:
-            case 209 /* FunctionExpression */:
-            case 78 /* Identifier */:
+            case 204 /* PropertyAccessExpression */:
+            case 205 /* ElementAccessExpression */:
+            case 207 /* NewExpression */:
+            case 206 /* CallExpression */:
+            case 276 /* JsxElement */:
+            case 277 /* JsxSelfClosingElement */:
+            case 280 /* JsxFragment */:
+            case 208 /* TaggedTemplateExpression */:
+            case 202 /* ArrayLiteralExpression */:
+            case 210 /* ParenthesizedExpression */:
+            case 203 /* ObjectLiteralExpression */:
+            case 224 /* ClassExpression */:
+            case 211 /* FunctionExpression */:
+            case 79 /* Identifier */:
             case 13 /* RegularExpressionLiteral */:
             case 8 /* NumericLiteral */:
             case 9 /* BigIntLiteral */:
             case 10 /* StringLiteral */:
             case 14 /* NoSubstitutionTemplateLiteral */:
-            case 219 /* TemplateExpression */:
-            case 94 /* FalseKeyword */:
-            case 103 /* NullKeyword */:
-            case 107 /* ThisKeyword */:
-            case 109 /* TrueKeyword */:
-            case 105 /* SuperKeyword */:
-            case 226 /* NonNullExpression */:
-            case 227 /* MetaProperty */:
-            case 99 /* ImportKeyword */: // technically this is only an Expression if it's in a CallExpression
+            case 221 /* TemplateExpression */:
+            case 95 /* FalseKeyword */:
+            case 104 /* NullKeyword */:
+            case 108 /* ThisKeyword */:
+            case 110 /* TrueKeyword */:
+            case 106 /* SuperKeyword */:
+            case 228 /* NonNullExpression */:
+            case 229 /* MetaProperty */:
+            case 100 /* ImportKeyword */: // technically this is only an Expression if it's in a CallExpression
                 return true;
             default:
                 return false;
@@ -13023,13 +13362,13 @@
     ts.isUnaryExpression = isUnaryExpression;
     function isUnaryExpressionKind(kind) {
         switch (kind) {
-            case 215 /* PrefixUnaryExpression */:
-            case 216 /* PostfixUnaryExpression */:
-            case 211 /* DeleteExpression */:
-            case 212 /* TypeOfExpression */:
-            case 213 /* VoidExpression */:
-            case 214 /* AwaitExpression */:
-            case 207 /* TypeAssertionExpression */:
+            case 217 /* PrefixUnaryExpression */:
+            case 218 /* PostfixUnaryExpression */:
+            case 213 /* DeleteExpression */:
+            case 214 /* TypeOfExpression */:
+            case 215 /* VoidExpression */:
+            case 216 /* AwaitExpression */:
+            case 209 /* TypeAssertionExpression */:
                 return true;
             default:
                 return isLeftHandSideExpressionKind(kind);
@@ -13038,9 +13377,9 @@
     /* @internal */
     function isUnaryExpressionWithWrite(expr) {
         switch (expr.kind) {
-            case 216 /* PostfixUnaryExpression */:
+            case 218 /* PostfixUnaryExpression */:
                 return true;
-            case 215 /* PrefixUnaryExpression */:
+            case 217 /* PrefixUnaryExpression */:
                 return expr.operator === 45 /* PlusPlusToken */ ||
                     expr.operator === 46 /* MinusMinusToken */;
             default:
@@ -13059,15 +13398,15 @@
     ts.isExpression = isExpression;
     function isExpressionKind(kind) {
         switch (kind) {
-            case 218 /* ConditionalExpression */:
-            case 220 /* YieldExpression */:
-            case 210 /* ArrowFunction */:
-            case 217 /* BinaryExpression */:
-            case 221 /* SpreadElement */:
-            case 225 /* AsExpression */:
-            case 223 /* OmittedExpression */:
-            case 341 /* CommaListExpression */:
-            case 340 /* PartiallyEmittedExpression */:
+            case 220 /* ConditionalExpression */:
+            case 222 /* YieldExpression */:
+            case 212 /* ArrowFunction */:
+            case 219 /* BinaryExpression */:
+            case 223 /* SpreadElement */:
+            case 227 /* AsExpression */:
+            case 225 /* OmittedExpression */:
+            case 346 /* CommaListExpression */:
+            case 345 /* PartiallyEmittedExpression */:
                 return true;
             default:
                 return isUnaryExpressionKind(kind);
@@ -13075,8 +13414,8 @@
     }
     function isAssertionExpression(node) {
         var kind = node.kind;
-        return kind === 207 /* TypeAssertionExpression */
-            || kind === 225 /* AsExpression */;
+        return kind === 209 /* TypeAssertionExpression */
+            || kind === 227 /* AsExpression */;
     }
     ts.isAssertionExpression = isAssertionExpression;
     /* @internal */
@@ -13087,13 +13426,13 @@
     ts.isNotEmittedOrPartiallyEmittedNode = isNotEmittedOrPartiallyEmittedNode;
     function isIterationStatement(node, lookInLabeledStatements) {
         switch (node.kind) {
-            case 238 /* ForStatement */:
-            case 239 /* ForInStatement */:
-            case 240 /* ForOfStatement */:
-            case 236 /* DoStatement */:
-            case 237 /* WhileStatement */:
+            case 240 /* ForStatement */:
+            case 241 /* ForInStatement */:
+            case 242 /* ForOfStatement */:
+            case 238 /* DoStatement */:
+            case 239 /* WhileStatement */:
                 return true;
-            case 246 /* LabeledStatement */:
+            case 248 /* LabeledStatement */:
                 return lookInLabeledStatements && isIterationStatement(node.statement, lookInLabeledStatements);
         }
         return false;
@@ -13122,7 +13461,7 @@
     ts.isExternalModuleIndicator = isExternalModuleIndicator;
     /* @internal */
     function isForInOrOfStatement(node) {
-        return node.kind === 239 /* ForInStatement */ || node.kind === 240 /* ForOfStatement */;
+        return node.kind === 241 /* ForInStatement */ || node.kind === 242 /* ForOfStatement */;
     }
     ts.isForInOrOfStatement = isForInOrOfStatement;
     // Element
@@ -13146,114 +13485,115 @@
     /* @internal */
     function isModuleBody(node) {
         var kind = node.kind;
-        return kind === 258 /* ModuleBlock */
-            || kind === 257 /* ModuleDeclaration */
-            || kind === 78 /* Identifier */;
+        return kind === 260 /* ModuleBlock */
+            || kind === 259 /* ModuleDeclaration */
+            || kind === 79 /* Identifier */;
     }
     ts.isModuleBody = isModuleBody;
     /* @internal */
     function isNamespaceBody(node) {
         var kind = node.kind;
-        return kind === 258 /* ModuleBlock */
-            || kind === 257 /* ModuleDeclaration */;
+        return kind === 260 /* ModuleBlock */
+            || kind === 259 /* ModuleDeclaration */;
     }
     ts.isNamespaceBody = isNamespaceBody;
     /* @internal */
     function isJSDocNamespaceBody(node) {
         var kind = node.kind;
-        return kind === 78 /* Identifier */
-            || kind === 257 /* ModuleDeclaration */;
+        return kind === 79 /* Identifier */
+            || kind === 259 /* ModuleDeclaration */;
     }
     ts.isJSDocNamespaceBody = isJSDocNamespaceBody;
     /* @internal */
     function isNamedImportBindings(node) {
         var kind = node.kind;
-        return kind === 265 /* NamedImports */
-            || kind === 264 /* NamespaceImport */;
+        return kind === 267 /* NamedImports */
+            || kind === 266 /* NamespaceImport */;
     }
     ts.isNamedImportBindings = isNamedImportBindings;
     /* @internal */
     function isModuleOrEnumDeclaration(node) {
-        return node.kind === 257 /* ModuleDeclaration */ || node.kind === 256 /* EnumDeclaration */;
+        return node.kind === 259 /* ModuleDeclaration */ || node.kind === 258 /* EnumDeclaration */;
     }
     ts.isModuleOrEnumDeclaration = isModuleOrEnumDeclaration;
     function isDeclarationKind(kind) {
-        return kind === 210 /* ArrowFunction */
-            || kind === 199 /* BindingElement */
-            || kind === 253 /* ClassDeclaration */
-            || kind === 222 /* ClassExpression */
-            || kind === 167 /* Constructor */
-            || kind === 256 /* EnumDeclaration */
-            || kind === 292 /* EnumMember */
-            || kind === 271 /* ExportSpecifier */
-            || kind === 252 /* FunctionDeclaration */
-            || kind === 209 /* FunctionExpression */
-            || kind === 168 /* GetAccessor */
-            || kind === 263 /* ImportClause */
-            || kind === 261 /* ImportEqualsDeclaration */
-            || kind === 266 /* ImportSpecifier */
-            || kind === 254 /* InterfaceDeclaration */
-            || kind === 281 /* JsxAttribute */
-            || kind === 166 /* MethodDeclaration */
-            || kind === 165 /* MethodSignature */
-            || kind === 257 /* ModuleDeclaration */
-            || kind === 260 /* NamespaceExportDeclaration */
-            || kind === 264 /* NamespaceImport */
-            || kind === 270 /* NamespaceExport */
-            || kind === 161 /* Parameter */
-            || kind === 289 /* PropertyAssignment */
-            || kind === 164 /* PropertyDeclaration */
-            || kind === 163 /* PropertySignature */
-            || kind === 169 /* SetAccessor */
-            || kind === 290 /* ShorthandPropertyAssignment */
-            || kind === 255 /* TypeAliasDeclaration */
-            || kind === 160 /* TypeParameter */
-            || kind === 250 /* VariableDeclaration */
-            || kind === 335 /* JSDocTypedefTag */
-            || kind === 328 /* JSDocCallbackTag */
-            || kind === 337 /* JSDocPropertyTag */;
+        return kind === 212 /* ArrowFunction */
+            || kind === 201 /* BindingElement */
+            || kind === 255 /* ClassDeclaration */
+            || kind === 224 /* ClassExpression */
+            || kind === 168 /* ClassStaticBlockDeclaration */
+            || kind === 169 /* Constructor */
+            || kind === 258 /* EnumDeclaration */
+            || kind === 294 /* EnumMember */
+            || kind === 273 /* ExportSpecifier */
+            || kind === 254 /* FunctionDeclaration */
+            || kind === 211 /* FunctionExpression */
+            || kind === 170 /* GetAccessor */
+            || kind === 265 /* ImportClause */
+            || kind === 263 /* ImportEqualsDeclaration */
+            || kind === 268 /* ImportSpecifier */
+            || kind === 256 /* InterfaceDeclaration */
+            || kind === 283 /* JsxAttribute */
+            || kind === 167 /* MethodDeclaration */
+            || kind === 166 /* MethodSignature */
+            || kind === 259 /* ModuleDeclaration */
+            || kind === 262 /* NamespaceExportDeclaration */
+            || kind === 266 /* NamespaceImport */
+            || kind === 272 /* NamespaceExport */
+            || kind === 162 /* Parameter */
+            || kind === 291 /* PropertyAssignment */
+            || kind === 165 /* PropertyDeclaration */
+            || kind === 164 /* PropertySignature */
+            || kind === 171 /* SetAccessor */
+            || kind === 292 /* ShorthandPropertyAssignment */
+            || kind === 257 /* TypeAliasDeclaration */
+            || kind === 161 /* TypeParameter */
+            || kind === 252 /* VariableDeclaration */
+            || kind === 340 /* JSDocTypedefTag */
+            || kind === 333 /* JSDocCallbackTag */
+            || kind === 342 /* JSDocPropertyTag */;
     }
     function isDeclarationStatementKind(kind) {
-        return kind === 252 /* FunctionDeclaration */
-            || kind === 272 /* MissingDeclaration */
-            || kind === 253 /* ClassDeclaration */
-            || kind === 254 /* InterfaceDeclaration */
-            || kind === 255 /* TypeAliasDeclaration */
-            || kind === 256 /* EnumDeclaration */
-            || kind === 257 /* ModuleDeclaration */
-            || kind === 262 /* ImportDeclaration */
-            || kind === 261 /* ImportEqualsDeclaration */
-            || kind === 268 /* ExportDeclaration */
-            || kind === 267 /* ExportAssignment */
-            || kind === 260 /* NamespaceExportDeclaration */;
+        return kind === 254 /* FunctionDeclaration */
+            || kind === 274 /* MissingDeclaration */
+            || kind === 255 /* ClassDeclaration */
+            || kind === 256 /* InterfaceDeclaration */
+            || kind === 257 /* TypeAliasDeclaration */
+            || kind === 258 /* EnumDeclaration */
+            || kind === 259 /* ModuleDeclaration */
+            || kind === 264 /* ImportDeclaration */
+            || kind === 263 /* ImportEqualsDeclaration */
+            || kind === 270 /* ExportDeclaration */
+            || kind === 269 /* ExportAssignment */
+            || kind === 262 /* NamespaceExportDeclaration */;
     }
     function isStatementKindButNotDeclarationKind(kind) {
-        return kind === 242 /* BreakStatement */
-            || kind === 241 /* ContinueStatement */
-            || kind === 249 /* DebuggerStatement */
-            || kind === 236 /* DoStatement */
-            || kind === 234 /* ExpressionStatement */
-            || kind === 232 /* EmptyStatement */
-            || kind === 239 /* ForInStatement */
-            || kind === 240 /* ForOfStatement */
-            || kind === 238 /* ForStatement */
-            || kind === 235 /* IfStatement */
-            || kind === 246 /* LabeledStatement */
-            || kind === 243 /* ReturnStatement */
-            || kind === 245 /* SwitchStatement */
-            || kind === 247 /* ThrowStatement */
-            || kind === 248 /* TryStatement */
-            || kind === 233 /* VariableStatement */
-            || kind === 237 /* WhileStatement */
-            || kind === 244 /* WithStatement */
-            || kind === 339 /* NotEmittedStatement */
-            || kind === 343 /* EndOfDeclarationMarker */
-            || kind === 342 /* MergeDeclarationMarker */;
+        return kind === 244 /* BreakStatement */
+            || kind === 243 /* ContinueStatement */
+            || kind === 251 /* DebuggerStatement */
+            || kind === 238 /* DoStatement */
+            || kind === 236 /* ExpressionStatement */
+            || kind === 234 /* EmptyStatement */
+            || kind === 241 /* ForInStatement */
+            || kind === 242 /* ForOfStatement */
+            || kind === 240 /* ForStatement */
+            || kind === 237 /* IfStatement */
+            || kind === 248 /* LabeledStatement */
+            || kind === 245 /* ReturnStatement */
+            || kind === 247 /* SwitchStatement */
+            || kind === 249 /* ThrowStatement */
+            || kind === 250 /* TryStatement */
+            || kind === 235 /* VariableStatement */
+            || kind === 239 /* WhileStatement */
+            || kind === 246 /* WithStatement */
+            || kind === 344 /* NotEmittedStatement */
+            || kind === 348 /* EndOfDeclarationMarker */
+            || kind === 347 /* MergeDeclarationMarker */;
     }
     /* @internal */
     function isDeclaration(node) {
-        if (node.kind === 160 /* TypeParameter */) {
-            return (node.parent && node.parent.kind !== 334 /* JSDocTemplateTag */) || ts.isInJSFile(node);
+        if (node.kind === 161 /* TypeParameter */) {
+            return (node.parent && node.parent.kind !== 339 /* JSDocTemplateTag */) || ts.isInJSFile(node);
         }
         return isDeclarationKind(node.kind);
     }
@@ -13280,10 +13620,10 @@
     }
     ts.isStatement = isStatement;
     function isBlockStatement(node) {
-        if (node.kind !== 231 /* Block */)
+        if (node.kind !== 233 /* Block */)
             return false;
         if (node.parent !== undefined) {
-            if (node.parent.kind === 248 /* TryStatement */ || node.parent.kind === 288 /* CatchClause */) {
+            if (node.parent.kind === 250 /* TryStatement */ || node.parent.kind === 290 /* CatchClause */) {
                 return false;
             }
         }
@@ -13297,77 +13637,77 @@
         var kind = node.kind;
         return isStatementKindButNotDeclarationKind(kind)
             || isDeclarationStatementKind(kind)
-            || kind === 231 /* Block */;
+            || kind === 233 /* Block */;
     }
     ts.isStatementOrBlock = isStatementOrBlock;
     // Module references
     /* @internal */
     function isModuleReference(node) {
         var kind = node.kind;
-        return kind === 273 /* ExternalModuleReference */
-            || kind === 158 /* QualifiedName */
-            || kind === 78 /* Identifier */;
+        return kind === 275 /* ExternalModuleReference */
+            || kind === 159 /* QualifiedName */
+            || kind === 79 /* Identifier */;
     }
     ts.isModuleReference = isModuleReference;
     // JSX
     /* @internal */
     function isJsxTagNameExpression(node) {
         var kind = node.kind;
-        return kind === 107 /* ThisKeyword */
-            || kind === 78 /* Identifier */
-            || kind === 202 /* PropertyAccessExpression */;
+        return kind === 108 /* ThisKeyword */
+            || kind === 79 /* Identifier */
+            || kind === 204 /* PropertyAccessExpression */;
     }
     ts.isJsxTagNameExpression = isJsxTagNameExpression;
     /* @internal */
     function isJsxChild(node) {
         var kind = node.kind;
-        return kind === 274 /* JsxElement */
-            || kind === 284 /* JsxExpression */
-            || kind === 275 /* JsxSelfClosingElement */
+        return kind === 276 /* JsxElement */
+            || kind === 286 /* JsxExpression */
+            || kind === 277 /* JsxSelfClosingElement */
             || kind === 11 /* JsxText */
-            || kind === 278 /* JsxFragment */;
+            || kind === 280 /* JsxFragment */;
     }
     ts.isJsxChild = isJsxChild;
     /* @internal */
     function isJsxAttributeLike(node) {
         var kind = node.kind;
-        return kind === 281 /* JsxAttribute */
-            || kind === 283 /* JsxSpreadAttribute */;
+        return kind === 283 /* JsxAttribute */
+            || kind === 285 /* JsxSpreadAttribute */;
     }
     ts.isJsxAttributeLike = isJsxAttributeLike;
     /* @internal */
     function isStringLiteralOrJsxExpression(node) {
         var kind = node.kind;
         return kind === 10 /* StringLiteral */
-            || kind === 284 /* JsxExpression */;
+            || kind === 286 /* JsxExpression */;
     }
     ts.isStringLiteralOrJsxExpression = isStringLiteralOrJsxExpression;
     function isJsxOpeningLikeElement(node) {
         var kind = node.kind;
-        return kind === 276 /* JsxOpeningElement */
-            || kind === 275 /* JsxSelfClosingElement */;
+        return kind === 278 /* JsxOpeningElement */
+            || kind === 277 /* JsxSelfClosingElement */;
     }
     ts.isJsxOpeningLikeElement = isJsxOpeningLikeElement;
     // Clauses
     function isCaseOrDefaultClause(node) {
         var kind = node.kind;
-        return kind === 285 /* CaseClause */
-            || kind === 286 /* DefaultClause */;
+        return kind === 287 /* CaseClause */
+            || kind === 288 /* DefaultClause */;
     }
     ts.isCaseOrDefaultClause = isCaseOrDefaultClause;
     // JSDoc
     /** True if node is of some JSDoc syntax kind. */
     /* @internal */
     function isJSDocNode(node) {
-        return node.kind >= 302 /* FirstJSDocNode */ && node.kind <= 337 /* LastJSDocNode */;
+        return node.kind >= 304 /* FirstJSDocNode */ && node.kind <= 342 /* LastJSDocNode */;
     }
     ts.isJSDocNode = isJSDocNode;
     /** True if node is of a kind that may contain comment text. */
     function isJSDocCommentContainingNode(node) {
-        return node.kind === 312 /* JSDocComment */
-            || node.kind === 311 /* JSDocNamepathType */
-            || node.kind === 313 /* JSDocText */
-            || node.kind === 316 /* JSDocLink */
+        return node.kind === 315 /* JSDocComment */
+            || node.kind === 314 /* JSDocNamepathType */
+            || node.kind === 316 /* JSDocText */
+            || isJSDocLinkLike(node)
             || isJSDocTag(node)
             || ts.isJSDocTypeLiteral(node)
             || ts.isJSDocSignature(node);
@@ -13376,15 +13716,15 @@
     // TODO: determine what this does before making it public.
     /* @internal */
     function isJSDocTag(node) {
-        return node.kind >= 317 /* FirstJSDocTagNode */ && node.kind <= 337 /* LastJSDocTagNode */;
+        return node.kind >= 322 /* FirstJSDocTagNode */ && node.kind <= 342 /* LastJSDocTagNode */;
     }
     ts.isJSDocTag = isJSDocTag;
     function isSetAccessor(node) {
-        return node.kind === 169 /* SetAccessor */;
+        return node.kind === 171 /* SetAccessor */;
     }
     ts.isSetAccessor = isSetAccessor;
     function isGetAccessor(node) {
-        return node.kind === 168 /* GetAccessor */;
+        return node.kind === 170 /* GetAccessor */;
     }
     ts.isGetAccessor = isGetAccessor;
     /** True if has jsdoc nodes attached to it. */
@@ -13410,13 +13750,13 @@
     /** True if has initializer node attached to it. */
     function hasOnlyExpressionInitializer(node) {
         switch (node.kind) {
-            case 250 /* VariableDeclaration */:
-            case 161 /* Parameter */:
-            case 199 /* BindingElement */:
-            case 163 /* PropertySignature */:
-            case 164 /* PropertyDeclaration */:
-            case 289 /* PropertyAssignment */:
-            case 292 /* EnumMember */:
+            case 252 /* VariableDeclaration */:
+            case 162 /* Parameter */:
+            case 201 /* BindingElement */:
+            case 164 /* PropertySignature */:
+            case 165 /* PropertyDeclaration */:
+            case 291 /* PropertyAssignment */:
+            case 294 /* EnumMember */:
                 return true;
             default:
                 return false;
@@ -13424,12 +13764,12 @@
     }
     ts.hasOnlyExpressionInitializer = hasOnlyExpressionInitializer;
     function isObjectLiteralElement(node) {
-        return node.kind === 281 /* JsxAttribute */ || node.kind === 283 /* JsxSpreadAttribute */ || isObjectLiteralElementLike(node);
+        return node.kind === 283 /* JsxAttribute */ || node.kind === 285 /* JsxSpreadAttribute */ || isObjectLiteralElementLike(node);
     }
     ts.isObjectLiteralElement = isObjectLiteralElement;
     /* @internal */
     function isTypeReferenceType(node) {
-        return node.kind === 174 /* TypeReference */ || node.kind === 224 /* ExpressionWithTypeArguments */;
+        return node.kind === 176 /* TypeReference */ || node.kind === 226 /* ExpressionWithTypeArguments */;
     }
     ts.isTypeReferenceType = isTypeReferenceType;
     var MAX_SMI_X86 = 1073741823;
@@ -13461,6 +13801,10 @@
         return node.kind === 10 /* StringLiteral */ || node.kind === 14 /* NoSubstitutionTemplateLiteral */;
     }
     ts.isStringLiteralLike = isStringLiteralLike;
+    function isJSDocLinkLike(node) {
+        return node.kind === 319 /* JSDocLink */ || node.kind === 320 /* JSDocLinkCode */ || node.kind === 321 /* JSDocLinkPlain */;
+    }
+    ts.isJSDocLinkLike = isJSDocLinkLike;
     // #endregion
 })(ts || (ts = {}));
 /* @internal */
@@ -13545,7 +13889,7 @@
             increaseIndent: ts.noop,
             decreaseIndent: ts.noop,
             clear: function () { return str = ""; },
-            trackSymbol: ts.noop,
+            trackSymbol: function () { return false; },
             reportInaccessibleThisError: ts.noop,
             reportInaccessibleUniqueSymbolError: ts.noop,
             reportPrivateInBaseOfClassExpression: ts.noop,
@@ -13557,11 +13901,19 @@
     }
     ts.changesAffectModuleResolution = changesAffectModuleResolution;
     function optionsHaveModuleResolutionChanges(oldOptions, newOptions) {
-        return ts.moduleResolutionOptionDeclarations.some(function (o) {
+        return optionsHaveChanges(oldOptions, newOptions, ts.moduleResolutionOptionDeclarations);
+    }
+    ts.optionsHaveModuleResolutionChanges = optionsHaveModuleResolutionChanges;
+    function changesAffectingProgramStructure(oldOptions, newOptions) {
+        return optionsHaveChanges(oldOptions, newOptions, ts.optionsAffectingProgramStructure);
+    }
+    ts.changesAffectingProgramStructure = changesAffectingProgramStructure;
+    function optionsHaveChanges(oldOptions, newOptions, optionDeclarations) {
+        return oldOptions !== newOptions && optionDeclarations.some(function (o) {
             return !isJsonEqual(getCompilerOptionValue(oldOptions, o), getCompilerOptionValue(newOptions, o));
         });
     }
-    ts.optionsHaveModuleResolutionChanges = optionsHaveModuleResolutionChanges;
+    ts.optionsHaveChanges = optionsHaveChanges;
     function forEachAncestor(node, callback) {
         while (true) {
             var res = callback(node);
@@ -13712,19 +14064,23 @@
         }
     }
     function getSourceFileOfNode(node) {
-        while (node && node.kind !== 298 /* SourceFile */) {
+        while (node && node.kind !== 300 /* SourceFile */) {
             node = node.parent;
         }
         return node;
     }
     ts.getSourceFileOfNode = getSourceFileOfNode;
+    function getSourceFileOfModule(module) {
+        return getSourceFileOfNode(module.valueDeclaration || getNonAugmentationDeclaration(module));
+    }
+    ts.getSourceFileOfModule = getSourceFileOfModule;
     function isStatementWithLocals(node) {
         switch (node.kind) {
-            case 231 /* Block */:
-            case 259 /* CaseBlock */:
-            case 238 /* ForStatement */:
-            case 239 /* ForInStatement */:
-            case 240 /* ForOfStatement */:
+            case 233 /* Block */:
+            case 261 /* CaseBlock */:
+            case 240 /* ForStatement */:
+            case 241 /* ForInStatement */:
+            case 242 /* ForOfStatement */:
                 return true;
         }
         return false;
@@ -13809,7 +14165,7 @@
                 break;
             }
         }
-        to.splice.apply(to, __spreadArray([statementIndex, 0], from));
+        to.splice.apply(to, __spreadArray([statementIndex, 0], from, false));
         return to;
     }
     function insertStatementAfterPrologue(to, statement, isPrologueDirective) {
@@ -13862,10 +14218,10 @@
             commentPos + 2 < commentEnd &&
             text.charCodeAt(commentPos + 2) === 47 /* slash */) {
             var textSubStr = text.substring(commentPos, commentEnd);
-            return textSubStr.match(ts.fullTripleSlashReferencePathRegEx) ||
-                textSubStr.match(ts.fullTripleSlashAMDReferencePathRegEx) ||
-                textSubStr.match(fullTripleSlashReferenceTypeReferenceDirectiveRegEx) ||
-                textSubStr.match(defaultLibReferenceRegEx) ?
+            return ts.fullTripleSlashReferencePathRegEx.test(textSubStr) ||
+                ts.fullTripleSlashAMDReferencePathRegEx.test(textSubStr) ||
+                fullTripleSlashReferenceTypeReferenceDirectiveRegEx.test(textSubStr) ||
+                defaultLibReferenceRegEx.test(textSubStr) ?
                 true : false;
         }
         return false;
@@ -13920,7 +14276,7 @@
         // the syntax list itself considers them as normal trivia. Therefore if we simply skip
         // trivia for the list, we may have skipped the JSDocComment as well. So we should process its
         // first child to determine the actual position of its first token.
-        if (node.kind === 338 /* SyntaxList */ && node._children.length > 0) {
+        if (node.kind === 343 /* SyntaxList */ && node._children.length > 0) {
             return getTokenPosOfNode(node._children[0], sourceFile, includeJsDoc);
         }
         return ts.skipTrivia((sourceFile || getSourceFileOfNode(node)).text, node.pos, 
@@ -13955,7 +14311,7 @@
         var text = sourceText.substring(includeTrivia ? node.pos : ts.skipTrivia(sourceText, node.pos), node.end);
         if (isJSDocTypeExpressionOrChild(node)) {
             // strip space + asterisk at line start
-            text = text.replace(/(^|\r?\n|\r)\s*\*\s*/g, "$1");
+            text = text.split(/\r\n|\n|\r/).map(function (line) { return ts.trimStringStart(line.replace(/^\s*\*/, "")); }).join("\n");
         }
         return text;
     }
@@ -14063,6 +14419,7 @@
         GetLiteralTextFlags[GetLiteralTextFlags["AllowNumericSeparator"] = 8] = "AllowNumericSeparator";
     })(GetLiteralTextFlags = ts.GetLiteralTextFlags || (ts.GetLiteralTextFlags = {}));
     function getLiteralText(node, sourceFile, flags) {
+        var _a;
         // If we don't need to downlevel and we can reach the original source text using
         // the node's parent reference, then simply get the text as it was originally written.
         if (canUseOriginalText(node, flags)) {
@@ -14090,7 +14447,7 @@
                 // had to include a backslash: `not \${a} substitution`.
                 var escapeText = flags & 1 /* NeverAsciiEscape */ || (getEmitFlags(node) & 16777216 /* NoAsciiEscaping */) ? escapeString :
                     escapeNonAsciiString;
-                var rawText = node.rawText || escapeTemplateSubstitution(escapeText(node.text, 96 /* backtick */));
+                var rawText = (_a = node.rawText) !== null && _a !== void 0 ? _a : escapeTemplateSubstitution(escapeText(node.text, 96 /* backtick */));
                 switch (node.kind) {
                     case 14 /* NoSubstitutionTemplateLiteral */:
                         return "`" + rawText + "`";
@@ -14141,7 +14498,7 @@
     ts.isBlockOrCatchScoped = isBlockOrCatchScoped;
     function isCatchClauseVariableDeclarationOrBindingElement(declaration) {
         var node = getRootDeclaration(declaration);
-        return node.kind === 250 /* VariableDeclaration */ && node.parent.kind === 288 /* CatchClause */;
+        return node.kind === 252 /* VariableDeclaration */ && node.parent.kind === 290 /* CatchClause */;
     }
     ts.isCatchClauseVariableDeclarationOrBindingElement = isCatchClauseVariableDeclarationOrBindingElement;
     function isAmbientModule(node) {
@@ -14173,12 +14530,12 @@
     ts.isShorthandAmbientModuleSymbol = isShorthandAmbientModuleSymbol;
     function isShorthandAmbientModule(node) {
         // The only kind of module that can be missing a body is a shorthand ambient module.
-        return !!node && node.kind === 257 /* ModuleDeclaration */ && (!node.body);
+        return !!node && node.kind === 259 /* ModuleDeclaration */ && (!node.body);
     }
     function isBlockScopedContainerTopLevel(node) {
-        return node.kind === 298 /* SourceFile */ ||
-            node.kind === 257 /* ModuleDeclaration */ ||
-            ts.isFunctionLike(node);
+        return node.kind === 300 /* SourceFile */ ||
+            node.kind === 259 /* ModuleDeclaration */ ||
+            ts.isFunctionLikeOrClassStaticBlockDeclaration(node);
     }
     ts.isBlockScopedContainerTopLevel = isBlockScopedContainerTopLevel;
     function isGlobalScopeAugmentation(module) {
@@ -14194,9 +14551,9 @@
         // - defined in the top level scope and source file is an external module
         // - defined inside ambient module declaration located in the top level scope and source file not an external module
         switch (node.parent.kind) {
-            case 298 /* SourceFile */:
+            case 300 /* SourceFile */:
                 return ts.isExternalModule(node.parent);
-            case 258 /* ModuleBlock */:
+            case 260 /* ModuleBlock */:
                 return isAmbientModule(node.parent.parent) && ts.isSourceFile(node.parent.parent.parent) && !ts.isExternalModule(node.parent.parent.parent);
         }
         return false;
@@ -14250,34 +14607,36 @@
     ts.isEffectiveStrictModeSourceFile = isEffectiveStrictModeSourceFile;
     function isBlockScope(node, parentNode) {
         switch (node.kind) {
-            case 298 /* SourceFile */:
-            case 259 /* CaseBlock */:
-            case 288 /* CatchClause */:
-            case 257 /* ModuleDeclaration */:
-            case 238 /* ForStatement */:
-            case 239 /* ForInStatement */:
-            case 240 /* ForOfStatement */:
-            case 167 /* Constructor */:
-            case 166 /* MethodDeclaration */:
-            case 168 /* GetAccessor */:
-            case 169 /* SetAccessor */:
-            case 252 /* FunctionDeclaration */:
-            case 209 /* FunctionExpression */:
-            case 210 /* ArrowFunction */:
+            case 300 /* SourceFile */:
+            case 261 /* CaseBlock */:
+            case 290 /* CatchClause */:
+            case 259 /* ModuleDeclaration */:
+            case 240 /* ForStatement */:
+            case 241 /* ForInStatement */:
+            case 242 /* ForOfStatement */:
+            case 169 /* Constructor */:
+            case 167 /* MethodDeclaration */:
+            case 170 /* GetAccessor */:
+            case 171 /* SetAccessor */:
+            case 254 /* FunctionDeclaration */:
+            case 211 /* FunctionExpression */:
+            case 212 /* ArrowFunction */:
+            case 165 /* PropertyDeclaration */:
+            case 168 /* ClassStaticBlockDeclaration */:
                 return true;
-            case 231 /* Block */:
+            case 233 /* Block */:
                 // function block is not considered block-scope container
                 // see comment in binder.ts: bind(...), case for SyntaxKind.Block
-                return !ts.isFunctionLike(parentNode);
+                return !ts.isFunctionLikeOrClassStaticBlockDeclaration(parentNode);
         }
         return false;
     }
     ts.isBlockScope = isBlockScope;
     function isDeclarationWithTypeParameters(node) {
         switch (node.kind) {
-            case 328 /* JSDocCallbackTag */:
-            case 335 /* JSDocTypedefTag */:
-            case 315 /* JSDocSignature */:
+            case 333 /* JSDocCallbackTag */:
+            case 340 /* JSDocTypedefTag */:
+            case 318 /* JSDocSignature */:
                 return true;
             default:
                 ts.assertType(node);
@@ -14287,25 +14646,25 @@
     ts.isDeclarationWithTypeParameters = isDeclarationWithTypeParameters;
     function isDeclarationWithTypeParameterChildren(node) {
         switch (node.kind) {
-            case 170 /* CallSignature */:
-            case 171 /* ConstructSignature */:
-            case 165 /* MethodSignature */:
-            case 172 /* IndexSignature */:
-            case 175 /* FunctionType */:
-            case 176 /* ConstructorType */:
-            case 309 /* JSDocFunctionType */:
-            case 253 /* ClassDeclaration */:
-            case 222 /* ClassExpression */:
-            case 254 /* InterfaceDeclaration */:
-            case 255 /* TypeAliasDeclaration */:
-            case 334 /* JSDocTemplateTag */:
-            case 252 /* FunctionDeclaration */:
-            case 166 /* MethodDeclaration */:
-            case 167 /* Constructor */:
-            case 168 /* GetAccessor */:
-            case 169 /* SetAccessor */:
-            case 209 /* FunctionExpression */:
-            case 210 /* ArrowFunction */:
+            case 172 /* CallSignature */:
+            case 173 /* ConstructSignature */:
+            case 166 /* MethodSignature */:
+            case 174 /* IndexSignature */:
+            case 177 /* FunctionType */:
+            case 178 /* ConstructorType */:
+            case 312 /* JSDocFunctionType */:
+            case 255 /* ClassDeclaration */:
+            case 224 /* ClassExpression */:
+            case 256 /* InterfaceDeclaration */:
+            case 257 /* TypeAliasDeclaration */:
+            case 339 /* JSDocTemplateTag */:
+            case 254 /* FunctionDeclaration */:
+            case 167 /* MethodDeclaration */:
+            case 169 /* Constructor */:
+            case 170 /* GetAccessor */:
+            case 171 /* SetAccessor */:
+            case 211 /* FunctionExpression */:
+            case 212 /* ArrowFunction */:
                 return true;
             default:
                 ts.assertType(node);
@@ -14315,8 +14674,8 @@
     ts.isDeclarationWithTypeParameterChildren = isDeclarationWithTypeParameterChildren;
     function isAnyImportSyntax(node) {
         switch (node.kind) {
-            case 262 /* ImportDeclaration */:
-            case 261 /* ImportEqualsDeclaration */:
+            case 264 /* ImportDeclaration */:
+            case 263 /* ImportEqualsDeclaration */:
                 return true;
             default:
                 return false;
@@ -14325,15 +14684,15 @@
     ts.isAnyImportSyntax = isAnyImportSyntax;
     function isLateVisibilityPaintedStatement(node) {
         switch (node.kind) {
-            case 262 /* ImportDeclaration */:
-            case 261 /* ImportEqualsDeclaration */:
-            case 233 /* VariableStatement */:
-            case 253 /* ClassDeclaration */:
-            case 252 /* FunctionDeclaration */:
-            case 257 /* ModuleDeclaration */:
-            case 255 /* TypeAliasDeclaration */:
-            case 254 /* InterfaceDeclaration */:
-            case 256 /* EnumDeclaration */:
+            case 264 /* ImportDeclaration */:
+            case 263 /* ImportEqualsDeclaration */:
+            case 235 /* VariableStatement */:
+            case 255 /* ClassDeclaration */:
+            case 254 /* FunctionDeclaration */:
+            case 259 /* ModuleDeclaration */:
+            case 257 /* TypeAliasDeclaration */:
+            case 256 /* InterfaceDeclaration */:
+            case 258 /* EnumDeclaration */:
                 return true;
             default:
                 return false;
@@ -14354,6 +14713,14 @@
         return ts.findAncestor(node.parent, function (current) { return isBlockScope(current, current.parent); });
     }
     ts.getEnclosingBlockScopeContainer = getEnclosingBlockScopeContainer;
+    function forEachEnclosingBlockScopeContainer(node, cb) {
+        var container = getEnclosingBlockScopeContainer(node);
+        while (container) {
+            cb(container);
+            container = getEnclosingBlockScopeContainer(container);
+        }
+    }
+    ts.forEachEnclosingBlockScopeContainer = forEachEnclosingBlockScopeContainer;
     // Return display name of an identifier
     // Computed property names will just be emitted as "[<expr>]", where <expr> is the source
     // text of the expression in the computed property.
@@ -14366,19 +14733,19 @@
     }
     ts.getNameFromIndexInfo = getNameFromIndexInfo;
     function isComputedNonLiteralName(name) {
-        return name.kind === 159 /* ComputedPropertyName */ && !isStringOrNumericLiteralLike(name.expression);
+        return name.kind === 160 /* ComputedPropertyName */ && !isStringOrNumericLiteralLike(name.expression);
     }
     ts.isComputedNonLiteralName = isComputedNonLiteralName;
     function getTextOfPropertyName(name) {
         switch (name.kind) {
-            case 78 /* Identifier */:
-            case 79 /* PrivateIdentifier */:
+            case 79 /* Identifier */:
+            case 80 /* PrivateIdentifier */:
                 return name.escapedText;
             case 10 /* StringLiteral */:
             case 8 /* NumericLiteral */:
             case 14 /* NoSubstitutionTemplateLiteral */:
                 return ts.escapeLeadingUnderscores(name.text);
-            case 159 /* ComputedPropertyName */:
+            case 160 /* ComputedPropertyName */:
                 if (isStringOrNumericLiteralLike(name.expression))
                     return ts.escapeLeadingUnderscores(name.expression.text);
                 return ts.Debug.fail("Text of property name cannot be read from non-literal-valued ComputedPropertyNames");
@@ -14389,20 +14756,22 @@
     ts.getTextOfPropertyName = getTextOfPropertyName;
     function entityNameToString(name) {
         switch (name.kind) {
-            case 107 /* ThisKeyword */:
+            case 108 /* ThisKeyword */:
                 return "this";
-            case 79 /* PrivateIdentifier */:
-            case 78 /* Identifier */:
+            case 80 /* PrivateIdentifier */:
+            case 79 /* Identifier */:
                 return getFullWidth(name) === 0 ? ts.idText(name) : getTextOfNode(name);
-            case 158 /* QualifiedName */:
+            case 159 /* QualifiedName */:
                 return entityNameToString(name.left) + "." + entityNameToString(name.right);
-            case 202 /* PropertyAccessExpression */:
+            case 204 /* PropertyAccessExpression */:
                 if (ts.isIdentifier(name.name) || ts.isPrivateIdentifier(name.name)) {
                     return entityNameToString(name.expression) + "." + entityNameToString(name.name);
                 }
                 else {
                     return ts.Debug.assertNever(name.name);
                 }
+            case 306 /* JSDocMemberName */:
+                return entityNameToString(name.left) + entityNameToString(name.right);
             default:
                 return ts.Debug.assertNever(name);
         }
@@ -14482,7 +14851,7 @@
     ts.getSpanOfTokenAtPosition = getSpanOfTokenAtPosition;
     function getErrorSpanForArrowFunction(sourceFile, node) {
         var pos = ts.skipTrivia(sourceFile.text, node.pos);
-        if (node.body && node.body.kind === 231 /* Block */) {
+        if (node.body && node.body.kind === 233 /* Block */) {
             var startLine = ts.getLineAndCharacterOfPosition(sourceFile, node.body.pos).line;
             var endLine = ts.getLineAndCharacterOfPosition(sourceFile, node.body.end).line;
             if (startLine < endLine) {
@@ -14496,7 +14865,7 @@
     function getErrorSpanForNode(sourceFile, node) {
         var errorNode = node;
         switch (node.kind) {
-            case 298 /* SourceFile */:
+            case 300 /* SourceFile */:
                 var pos_1 = ts.skipTrivia(sourceFile.text, 0, /*stopAfterLineBreak*/ false);
                 if (pos_1 === sourceFile.text.length) {
                     // file is empty - return span for the beginning of the file
@@ -14505,28 +14874,29 @@
                 return getSpanOfTokenAtPosition(sourceFile, pos_1);
             // This list is a work in progress. Add missing node kinds to improve their error
             // spans.
-            case 250 /* VariableDeclaration */:
-            case 199 /* BindingElement */:
-            case 253 /* ClassDeclaration */:
-            case 222 /* ClassExpression */:
-            case 254 /* InterfaceDeclaration */:
-            case 257 /* ModuleDeclaration */:
-            case 256 /* EnumDeclaration */:
-            case 292 /* EnumMember */:
-            case 252 /* FunctionDeclaration */:
-            case 209 /* FunctionExpression */:
-            case 166 /* MethodDeclaration */:
-            case 168 /* GetAccessor */:
-            case 169 /* SetAccessor */:
-            case 255 /* TypeAliasDeclaration */:
-            case 164 /* PropertyDeclaration */:
-            case 163 /* PropertySignature */:
+            case 252 /* VariableDeclaration */:
+            case 201 /* BindingElement */:
+            case 255 /* ClassDeclaration */:
+            case 224 /* ClassExpression */:
+            case 256 /* InterfaceDeclaration */:
+            case 259 /* ModuleDeclaration */:
+            case 258 /* EnumDeclaration */:
+            case 294 /* EnumMember */:
+            case 254 /* FunctionDeclaration */:
+            case 211 /* FunctionExpression */:
+            case 167 /* MethodDeclaration */:
+            case 170 /* GetAccessor */:
+            case 171 /* SetAccessor */:
+            case 257 /* TypeAliasDeclaration */:
+            case 165 /* PropertyDeclaration */:
+            case 164 /* PropertySignature */:
+            case 266 /* NamespaceImport */:
                 errorNode = node.name;
                 break;
-            case 210 /* ArrowFunction */:
+            case 212 /* ArrowFunction */:
                 return getErrorSpanForArrowFunction(sourceFile, node);
-            case 285 /* CaseClause */:
-            case 286 /* DefaultClause */:
+            case 287 /* CaseClause */:
+            case 288 /* DefaultClause */:
                 var start = ts.skipTrivia(sourceFile.text, node.pos);
                 var end = node.statements.length > 0 ? node.statements[0].pos : node.end;
                 return ts.createTextSpanFromBounds(start, end);
@@ -14578,16 +14948,16 @@
     }
     ts.isLet = isLet;
     function isSuperCall(n) {
-        return n.kind === 204 /* CallExpression */ && n.expression.kind === 105 /* SuperKeyword */;
+        return n.kind === 206 /* CallExpression */ && n.expression.kind === 106 /* SuperKeyword */;
     }
     ts.isSuperCall = isSuperCall;
     function isImportCall(n) {
-        return n.kind === 204 /* CallExpression */ && n.expression.kind === 99 /* ImportKeyword */;
+        return n.kind === 206 /* CallExpression */ && n.expression.kind === 100 /* ImportKeyword */;
     }
     ts.isImportCall = isImportCall;
     function isImportMeta(n) {
         return ts.isMetaProperty(n)
-            && n.keywordToken === 99 /* ImportKeyword */
+            && n.keywordToken === 100 /* ImportKeyword */
             && n.name.escapedText === "meta";
     }
     ts.isImportMeta = isImportMeta;
@@ -14596,7 +14966,7 @@
     }
     ts.isLiteralImportTypeNode = isLiteralImportTypeNode;
     function isPrologueDirective(node) {
-        return node.kind === 234 /* ExpressionStatement */
+        return node.kind === 236 /* ExpressionStatement */
             && node.expression.kind === 10 /* StringLiteral */;
     }
     ts.isPrologueDirective = isPrologueDirective;
@@ -14624,12 +14994,12 @@
     }
     ts.getLeadingCommentRangesOfNode = getLeadingCommentRangesOfNode;
     function getJSDocCommentRanges(node, text) {
-        var commentRanges = (node.kind === 161 /* Parameter */ ||
-            node.kind === 160 /* TypeParameter */ ||
-            node.kind === 209 /* FunctionExpression */ ||
-            node.kind === 210 /* ArrowFunction */ ||
-            node.kind === 208 /* ParenthesizedExpression */ ||
-            node.kind === 250 /* VariableDeclaration */) ?
+        var commentRanges = (node.kind === 162 /* Parameter */ ||
+            node.kind === 161 /* TypeParameter */ ||
+            node.kind === 211 /* FunctionExpression */ ||
+            node.kind === 212 /* ArrowFunction */ ||
+            node.kind === 210 /* ParenthesizedExpression */ ||
+            node.kind === 252 /* VariableDeclaration */) ?
             ts.concatenate(ts.getTrailingCommentRanges(text, node.pos), ts.getLeadingCommentRanges(text, node.pos)) :
             ts.getLeadingCommentRanges(text, node.pos);
         // True if the comment starts with '/**' but not if it is '/**/'
@@ -14640,53 +15010,53 @@
         });
     }
     ts.getJSDocCommentRanges = getJSDocCommentRanges;
-    ts.fullTripleSlashReferencePathRegEx = /^(\/\/\/\s*<reference\s+path\s*=\s*)('|")(.+?)\2.*?\/>/;
-    var fullTripleSlashReferenceTypeReferenceDirectiveRegEx = /^(\/\/\/\s*<reference\s+types\s*=\s*)('|")(.+?)\2.*?\/>/;
-    ts.fullTripleSlashAMDReferencePathRegEx = /^(\/\/\/\s*<amd-dependency\s+path\s*=\s*)('|")(.+?)\2.*?\/>/;
-    var defaultLibReferenceRegEx = /^(\/\/\/\s*<reference\s+no-default-lib\s*=\s*)('|")(.+?)\2\s*\/>/;
+    ts.fullTripleSlashReferencePathRegEx = /^(\/\/\/\s*<reference\s+path\s*=\s*)(('[^']*')|("[^"]*")).*?\/>/;
+    var fullTripleSlashReferenceTypeReferenceDirectiveRegEx = /^(\/\/\/\s*<reference\s+types\s*=\s*)(('[^']*')|("[^"]*")).*?\/>/;
+    ts.fullTripleSlashAMDReferencePathRegEx = /^(\/\/\/\s*<amd-dependency\s+path\s*=\s*)(('[^']*')|("[^"]*")).*?\/>/;
+    var defaultLibReferenceRegEx = /^(\/\/\/\s*<reference\s+no-default-lib\s*=\s*)(('[^']*')|("[^"]*"))\s*\/>/;
     function isPartOfTypeNode(node) {
-        if (173 /* FirstTypeNode */ <= node.kind && node.kind <= 196 /* LastTypeNode */) {
+        if (175 /* FirstTypeNode */ <= node.kind && node.kind <= 198 /* LastTypeNode */) {
             return true;
         }
         switch (node.kind) {
-            case 128 /* AnyKeyword */:
-            case 152 /* UnknownKeyword */:
-            case 144 /* NumberKeyword */:
-            case 155 /* BigIntKeyword */:
-            case 147 /* StringKeyword */:
-            case 131 /* BooleanKeyword */:
-            case 148 /* SymbolKeyword */:
-            case 145 /* ObjectKeyword */:
-            case 150 /* UndefinedKeyword */:
-            case 141 /* NeverKeyword */:
+            case 129 /* AnyKeyword */:
+            case 153 /* UnknownKeyword */:
+            case 145 /* NumberKeyword */:
+            case 156 /* BigIntKeyword */:
+            case 148 /* StringKeyword */:
+            case 132 /* BooleanKeyword */:
+            case 149 /* SymbolKeyword */:
+            case 146 /* ObjectKeyword */:
+            case 151 /* UndefinedKeyword */:
+            case 142 /* NeverKeyword */:
                 return true;
-            case 113 /* VoidKeyword */:
-                return node.parent.kind !== 213 /* VoidExpression */;
-            case 224 /* ExpressionWithTypeArguments */:
+            case 114 /* VoidKeyword */:
+                return node.parent.kind !== 215 /* VoidExpression */;
+            case 226 /* ExpressionWithTypeArguments */:
                 return !isExpressionWithTypeArgumentsInClassExtendsClause(node);
-            case 160 /* TypeParameter */:
-                return node.parent.kind === 191 /* MappedType */ || node.parent.kind === 186 /* InferType */;
+            case 161 /* TypeParameter */:
+                return node.parent.kind === 193 /* MappedType */ || node.parent.kind === 188 /* InferType */;
             // Identifiers and qualified names may be type nodes, depending on their context. Climb
             // above them to find the lowest container
-            case 78 /* Identifier */:
+            case 79 /* Identifier */:
                 // If the identifier is the RHS of a qualified name, then it's a type iff its parent is.
-                if (node.parent.kind === 158 /* QualifiedName */ && node.parent.right === node) {
+                if (node.parent.kind === 159 /* QualifiedName */ && node.parent.right === node) {
                     node = node.parent;
                 }
-                else if (node.parent.kind === 202 /* PropertyAccessExpression */ && node.parent.name === node) {
+                else if (node.parent.kind === 204 /* PropertyAccessExpression */ && node.parent.name === node) {
                     node = node.parent;
                 }
                 // At this point, node is either a qualified name or an identifier
-                ts.Debug.assert(node.kind === 78 /* Identifier */ || node.kind === 158 /* QualifiedName */ || node.kind === 202 /* PropertyAccessExpression */, "'node' was expected to be a qualified name, identifier or property access in 'isPartOfTypeNode'.");
+                ts.Debug.assert(node.kind === 79 /* Identifier */ || node.kind === 159 /* QualifiedName */ || node.kind === 204 /* PropertyAccessExpression */, "'node' was expected to be a qualified name, identifier or property access in 'isPartOfTypeNode'.");
             // falls through
-            case 158 /* QualifiedName */:
-            case 202 /* PropertyAccessExpression */:
-            case 107 /* ThisKeyword */: {
+            case 159 /* QualifiedName */:
+            case 204 /* PropertyAccessExpression */:
+            case 108 /* ThisKeyword */: {
                 var parent = node.parent;
-                if (parent.kind === 177 /* TypeQuery */) {
+                if (parent.kind === 179 /* TypeQuery */) {
                     return false;
                 }
-                if (parent.kind === 196 /* ImportType */) {
+                if (parent.kind === 198 /* ImportType */) {
                     return !parent.isTypeOf;
                 }
                 // Do not recursively call isPartOfTypeNode on the parent. In the example:
@@ -14695,40 +15065,40 @@
                 //
                 // Calling isPartOfTypeNode would consider the qualified name A.B a type node.
                 // Only C and A.B.C are type nodes.
-                if (173 /* FirstTypeNode */ <= parent.kind && parent.kind <= 196 /* LastTypeNode */) {
+                if (175 /* FirstTypeNode */ <= parent.kind && parent.kind <= 198 /* LastTypeNode */) {
                     return true;
                 }
                 switch (parent.kind) {
-                    case 224 /* ExpressionWithTypeArguments */:
+                    case 226 /* ExpressionWithTypeArguments */:
                         return !isExpressionWithTypeArgumentsInClassExtendsClause(parent);
-                    case 160 /* TypeParameter */:
+                    case 161 /* TypeParameter */:
                         return node === parent.constraint;
-                    case 334 /* JSDocTemplateTag */:
+                    case 339 /* JSDocTemplateTag */:
                         return node === parent.constraint;
-                    case 164 /* PropertyDeclaration */:
-                    case 163 /* PropertySignature */:
-                    case 161 /* Parameter */:
-                    case 250 /* VariableDeclaration */:
+                    case 165 /* PropertyDeclaration */:
+                    case 164 /* PropertySignature */:
+                    case 162 /* Parameter */:
+                    case 252 /* VariableDeclaration */:
                         return node === parent.type;
-                    case 252 /* FunctionDeclaration */:
-                    case 209 /* FunctionExpression */:
-                    case 210 /* ArrowFunction */:
-                    case 167 /* Constructor */:
-                    case 166 /* MethodDeclaration */:
-                    case 165 /* MethodSignature */:
-                    case 168 /* GetAccessor */:
-                    case 169 /* SetAccessor */:
+                    case 254 /* FunctionDeclaration */:
+                    case 211 /* FunctionExpression */:
+                    case 212 /* ArrowFunction */:
+                    case 169 /* Constructor */:
+                    case 167 /* MethodDeclaration */:
+                    case 166 /* MethodSignature */:
+                    case 170 /* GetAccessor */:
+                    case 171 /* SetAccessor */:
                         return node === parent.type;
-                    case 170 /* CallSignature */:
-                    case 171 /* ConstructSignature */:
-                    case 172 /* IndexSignature */:
+                    case 172 /* CallSignature */:
+                    case 173 /* ConstructSignature */:
+                    case 174 /* IndexSignature */:
                         return node === parent.type;
-                    case 207 /* TypeAssertionExpression */:
+                    case 209 /* TypeAssertionExpression */:
                         return node === parent.type;
-                    case 204 /* CallExpression */:
-                    case 205 /* NewExpression */:
+                    case 206 /* CallExpression */:
+                    case 207 /* NewExpression */:
                         return ts.contains(parent.typeArguments, node);
-                    case 206 /* TaggedTemplateExpression */:
+                    case 208 /* TaggedTemplateExpression */:
                         // TODO (drosen): TaggedTemplateExpressions may eventually support type arguments.
                         return false;
                 }
@@ -14753,23 +15123,23 @@
         return traverse(body);
         function traverse(node) {
             switch (node.kind) {
-                case 243 /* ReturnStatement */:
+                case 245 /* ReturnStatement */:
                     return visitor(node);
-                case 259 /* CaseBlock */:
-                case 231 /* Block */:
-                case 235 /* IfStatement */:
-                case 236 /* DoStatement */:
-                case 237 /* WhileStatement */:
-                case 238 /* ForStatement */:
-                case 239 /* ForInStatement */:
-                case 240 /* ForOfStatement */:
-                case 244 /* WithStatement */:
-                case 245 /* SwitchStatement */:
-                case 285 /* CaseClause */:
-                case 286 /* DefaultClause */:
-                case 246 /* LabeledStatement */:
-                case 248 /* TryStatement */:
-                case 288 /* CatchClause */:
+                case 261 /* CaseBlock */:
+                case 233 /* Block */:
+                case 237 /* IfStatement */:
+                case 238 /* DoStatement */:
+                case 239 /* WhileStatement */:
+                case 240 /* ForStatement */:
+                case 241 /* ForInStatement */:
+                case 242 /* ForOfStatement */:
+                case 246 /* WithStatement */:
+                case 247 /* SwitchStatement */:
+                case 287 /* CaseClause */:
+                case 288 /* DefaultClause */:
+                case 248 /* LabeledStatement */:
+                case 250 /* TryStatement */:
+                case 290 /* CatchClause */:
                     return ts.forEachChild(node, traverse);
             }
         }
@@ -14779,23 +15149,23 @@
         return traverse(body);
         function traverse(node) {
             switch (node.kind) {
-                case 220 /* YieldExpression */:
+                case 222 /* YieldExpression */:
                     visitor(node);
                     var operand = node.expression;
                     if (operand) {
                         traverse(operand);
                     }
                     return;
-                case 256 /* EnumDeclaration */:
-                case 254 /* InterfaceDeclaration */:
-                case 257 /* ModuleDeclaration */:
-                case 255 /* TypeAliasDeclaration */:
+                case 258 /* EnumDeclaration */:
+                case 256 /* InterfaceDeclaration */:
+                case 259 /* ModuleDeclaration */:
+                case 257 /* TypeAliasDeclaration */:
                     // These are not allowed inside a generator now, but eventually they may be allowed
                     // as local types. Regardless, skip them to avoid the work.
                     return;
                 default:
                     if (ts.isFunctionLike(node)) {
-                        if (node.name && node.name.kind === 159 /* ComputedPropertyName */) {
+                        if (node.name && node.name.kind === 160 /* ComputedPropertyName */) {
                             // Note that we will not include methods/accessors of a class because they would require
                             // first descending into the class. This is by design.
                             traverse(node.name.expression);
@@ -14818,10 +15188,10 @@
      * @param node The type node.
      */
     function getRestParameterElementType(node) {
-        if (node && node.kind === 179 /* ArrayType */) {
+        if (node && node.kind === 181 /* ArrayType */) {
             return node.elementType;
         }
-        else if (node && node.kind === 174 /* TypeReference */) {
+        else if (node && node.kind === 176 /* TypeReference */) {
             return ts.singleOrUndefined(node.typeArguments);
         }
         else {
@@ -14831,12 +15201,12 @@
     ts.getRestParameterElementType = getRestParameterElementType;
     function getMembersOfDeclaration(node) {
         switch (node.kind) {
-            case 254 /* InterfaceDeclaration */:
-            case 253 /* ClassDeclaration */:
-            case 222 /* ClassExpression */:
-            case 178 /* TypeLiteral */:
+            case 256 /* InterfaceDeclaration */:
+            case 255 /* ClassDeclaration */:
+            case 224 /* ClassExpression */:
+            case 180 /* TypeLiteral */:
                 return node.members;
-            case 201 /* ObjectLiteralExpression */:
+            case 203 /* ObjectLiteralExpression */:
                 return node.properties;
         }
     }
@@ -14844,14 +15214,14 @@
     function isVariableLike(node) {
         if (node) {
             switch (node.kind) {
-                case 199 /* BindingElement */:
-                case 292 /* EnumMember */:
-                case 161 /* Parameter */:
-                case 289 /* PropertyAssignment */:
-                case 164 /* PropertyDeclaration */:
-                case 163 /* PropertySignature */:
-                case 290 /* ShorthandPropertyAssignment */:
-                case 250 /* VariableDeclaration */:
+                case 201 /* BindingElement */:
+                case 294 /* EnumMember */:
+                case 162 /* Parameter */:
+                case 291 /* PropertyAssignment */:
+                case 165 /* PropertyDeclaration */:
+                case 164 /* PropertySignature */:
+                case 292 /* ShorthandPropertyAssignment */:
+                case 252 /* VariableDeclaration */:
                     return true;
             }
         }
@@ -14863,8 +15233,8 @@
     }
     ts.isVariableLikeOrAccessor = isVariableLikeOrAccessor;
     function isVariableDeclarationInVariableStatement(node) {
-        return node.parent.kind === 251 /* VariableDeclarationList */
-            && node.parent.parent.kind === 233 /* VariableStatement */;
+        return node.parent.kind === 253 /* VariableDeclarationList */
+            && node.parent.parent.kind === 235 /* VariableStatement */;
     }
     ts.isVariableDeclarationInVariableStatement = isVariableDeclarationInVariableStatement;
     function isValidESSymbolDeclaration(node) {
@@ -14875,13 +15245,13 @@
     ts.isValidESSymbolDeclaration = isValidESSymbolDeclaration;
     function introducesArgumentsExoticObject(node) {
         switch (node.kind) {
-            case 166 /* MethodDeclaration */:
-            case 165 /* MethodSignature */:
-            case 167 /* Constructor */:
-            case 168 /* GetAccessor */:
-            case 169 /* SetAccessor */:
-            case 252 /* FunctionDeclaration */:
-            case 209 /* FunctionExpression */:
+            case 167 /* MethodDeclaration */:
+            case 166 /* MethodSignature */:
+            case 169 /* Constructor */:
+            case 170 /* GetAccessor */:
+            case 171 /* SetAccessor */:
+            case 254 /* FunctionDeclaration */:
+            case 211 /* FunctionExpression */:
                 return true;
         }
         return false;
@@ -14892,7 +15262,7 @@
             if (beforeUnwrapLabelCallback) {
                 beforeUnwrapLabelCallback(node);
             }
-            if (node.statement.kind !== 246 /* LabeledStatement */) {
+            if (node.statement.kind !== 248 /* LabeledStatement */) {
                 return node.statement;
             }
             node = node.statement;
@@ -14900,17 +15270,17 @@
     }
     ts.unwrapInnermostStatementOfLabel = unwrapInnermostStatementOfLabel;
     function isFunctionBlock(node) {
-        return node && node.kind === 231 /* Block */ && ts.isFunctionLike(node.parent);
+        return node && node.kind === 233 /* Block */ && ts.isFunctionLike(node.parent);
     }
     ts.isFunctionBlock = isFunctionBlock;
     function isObjectLiteralMethod(node) {
-        return node && node.kind === 166 /* MethodDeclaration */ && node.parent.kind === 201 /* ObjectLiteralExpression */;
+        return node && node.kind === 167 /* MethodDeclaration */ && node.parent.kind === 203 /* ObjectLiteralExpression */;
     }
     ts.isObjectLiteralMethod = isObjectLiteralMethod;
     function isObjectLiteralOrClassExpressionMethod(node) {
-        return node.kind === 166 /* MethodDeclaration */ &&
-            (node.parent.kind === 201 /* ObjectLiteralExpression */ ||
-                node.parent.kind === 222 /* ClassExpression */);
+        return node.kind === 167 /* MethodDeclaration */ &&
+            (node.parent.kind === 203 /* ObjectLiteralExpression */ ||
+                node.parent.kind === 224 /* ClassExpression */);
     }
     ts.isObjectLiteralOrClassExpressionMethod = isObjectLiteralOrClassExpressionMethod;
     function isIdentifierTypePredicate(predicate) {
@@ -14923,7 +15293,7 @@
     ts.isThisTypePredicate = isThisTypePredicate;
     function getPropertyAssignment(objectLiteral, key, key2) {
         return objectLiteral.properties.filter(function (property) {
-            if (property.kind === 289 /* PropertyAssignment */) {
+            if (property.kind === 291 /* PropertyAssignment */) {
                 var propName = getTextOfPropertyName(property.name);
                 return key === propName || (!!key2 && key2 === propName);
             }
@@ -14971,15 +15341,28 @@
         return ts.findAncestor(node.parent, ts.isClassLike);
     }
     ts.getContainingClass = getContainingClass;
+    function getContainingClassStaticBlock(node) {
+        return ts.findAncestor(node.parent, function (n) {
+            if (ts.isClassLike(n) || ts.isFunctionLike(n)) {
+                return "quit";
+            }
+            return ts.isClassStaticBlockDeclaration(n);
+        });
+    }
+    ts.getContainingClassStaticBlock = getContainingClassStaticBlock;
+    function getContainingFunctionOrClassStaticBlock(node) {
+        return ts.findAncestor(node.parent, ts.isFunctionLikeOrClassStaticBlockDeclaration);
+    }
+    ts.getContainingFunctionOrClassStaticBlock = getContainingFunctionOrClassStaticBlock;
     function getThisContainer(node, includeArrowFunctions) {
-        ts.Debug.assert(node.kind !== 298 /* SourceFile */);
+        ts.Debug.assert(node.kind !== 300 /* SourceFile */);
         while (true) {
             node = node.parent;
             if (!node) {
                 return ts.Debug.fail(); // If we never pass in a SourceFile, this should be unreachable, since we'll stop when we reach that.
             }
             switch (node.kind) {
-                case 159 /* ComputedPropertyName */:
+                case 160 /* ComputedPropertyName */:
                     // If the grandparent node is an object literal (as opposed to a class),
                     // then the computed property is not a 'this' container.
                     // A computed property name in a class needs to be a this container
@@ -14994,9 +15377,9 @@
                     // the *body* of the container.
                     node = node.parent;
                     break;
-                case 162 /* Decorator */:
+                case 163 /* Decorator */:
                     // Decorators are always applied outside of the body of a class or method.
-                    if (node.parent.kind === 161 /* Parameter */ && ts.isClassElement(node.parent.parent)) {
+                    if (node.parent.kind === 162 /* Parameter */ && ts.isClassElement(node.parent.parent)) {
                         // If the decorator's parent is a Parameter, we resolve the this container from
                         // the grandparent class declaration.
                         node = node.parent.parent;
@@ -15007,26 +15390,27 @@
                         node = node.parent;
                     }
                     break;
-                case 210 /* ArrowFunction */:
+                case 212 /* ArrowFunction */:
                     if (!includeArrowFunctions) {
                         continue;
                     }
                 // falls through
-                case 252 /* FunctionDeclaration */:
-                case 209 /* FunctionExpression */:
-                case 257 /* ModuleDeclaration */:
-                case 164 /* PropertyDeclaration */:
-                case 163 /* PropertySignature */:
-                case 166 /* MethodDeclaration */:
-                case 165 /* MethodSignature */:
-                case 167 /* Constructor */:
-                case 168 /* GetAccessor */:
-                case 169 /* SetAccessor */:
-                case 170 /* CallSignature */:
-                case 171 /* ConstructSignature */:
-                case 172 /* IndexSignature */:
-                case 256 /* EnumDeclaration */:
-                case 298 /* SourceFile */:
+                case 254 /* FunctionDeclaration */:
+                case 211 /* FunctionExpression */:
+                case 259 /* ModuleDeclaration */:
+                case 168 /* ClassStaticBlockDeclaration */:
+                case 165 /* PropertyDeclaration */:
+                case 164 /* PropertySignature */:
+                case 167 /* MethodDeclaration */:
+                case 166 /* MethodSignature */:
+                case 169 /* Constructor */:
+                case 170 /* GetAccessor */:
+                case 171 /* SetAccessor */:
+                case 172 /* CallSignature */:
+                case 173 /* ConstructSignature */:
+                case 174 /* IndexSignature */:
+                case 258 /* EnumDeclaration */:
+                case 300 /* SourceFile */:
                     return node;
             }
         }
@@ -15045,9 +15429,9 @@
         var container = getThisContainer(node, /*includeArrowFunctions*/ false);
         if (container) {
             switch (container.kind) {
-                case 167 /* Constructor */:
-                case 252 /* FunctionDeclaration */:
-                case 209 /* FunctionExpression */:
+                case 169 /* Constructor */:
+                case 254 /* FunctionDeclaration */:
+                case 211 /* FunctionExpression */:
                     return container;
             }
         }
@@ -15069,27 +15453,28 @@
                 return node;
             }
             switch (node.kind) {
-                case 159 /* ComputedPropertyName */:
+                case 160 /* ComputedPropertyName */:
                     node = node.parent;
                     break;
-                case 252 /* FunctionDeclaration */:
-                case 209 /* FunctionExpression */:
-                case 210 /* ArrowFunction */:
+                case 254 /* FunctionDeclaration */:
+                case 211 /* FunctionExpression */:
+                case 212 /* ArrowFunction */:
                     if (!stopOnFunctions) {
                         continue;
                     }
                 // falls through
-                case 164 /* PropertyDeclaration */:
-                case 163 /* PropertySignature */:
-                case 166 /* MethodDeclaration */:
-                case 165 /* MethodSignature */:
-                case 167 /* Constructor */:
-                case 168 /* GetAccessor */:
-                case 169 /* SetAccessor */:
+                case 165 /* PropertyDeclaration */:
+                case 164 /* PropertySignature */:
+                case 167 /* MethodDeclaration */:
+                case 166 /* MethodSignature */:
+                case 169 /* Constructor */:
+                case 170 /* GetAccessor */:
+                case 171 /* SetAccessor */:
+                case 168 /* ClassStaticBlockDeclaration */:
                     return node;
-                case 162 /* Decorator */:
+                case 163 /* Decorator */:
                     // Decorators are always applied outside of the body of a class or method.
-                    if (node.parent.kind === 161 /* Parameter */ && ts.isClassElement(node.parent.parent)) {
+                    if (node.parent.kind === 162 /* Parameter */ && ts.isClassElement(node.parent.parent)) {
                         // If the decorator's parent is a Parameter, we resolve the this container from
                         // the grandparent class declaration.
                         node = node.parent.parent;
@@ -15105,21 +15490,21 @@
     }
     ts.getSuperContainer = getSuperContainer;
     function getImmediatelyInvokedFunctionExpression(func) {
-        if (func.kind === 209 /* FunctionExpression */ || func.kind === 210 /* ArrowFunction */) {
+        if (func.kind === 211 /* FunctionExpression */ || func.kind === 212 /* ArrowFunction */) {
             var prev = func;
             var parent = func.parent;
-            while (parent.kind === 208 /* ParenthesizedExpression */) {
+            while (parent.kind === 210 /* ParenthesizedExpression */) {
                 prev = parent;
                 parent = parent.parent;
             }
-            if (parent.kind === 204 /* CallExpression */ && parent.expression === prev) {
+            if (parent.kind === 206 /* CallExpression */ && parent.expression === prev) {
                 return parent;
             }
         }
     }
     ts.getImmediatelyInvokedFunctionExpression = getImmediatelyInvokedFunctionExpression;
     function isSuperOrSuperProperty(node) {
-        return node.kind === 105 /* SuperKeyword */
+        return node.kind === 106 /* SuperKeyword */
             || isSuperProperty(node);
     }
     ts.isSuperOrSuperProperty = isSuperOrSuperProperty;
@@ -15128,8 +15513,8 @@
      */
     function isSuperProperty(node) {
         var kind = node.kind;
-        return (kind === 202 /* PropertyAccessExpression */ || kind === 203 /* ElementAccessExpression */)
-            && node.expression.kind === 105 /* SuperKeyword */;
+        return (kind === 204 /* PropertyAccessExpression */ || kind === 205 /* ElementAccessExpression */)
+            && node.expression.kind === 106 /* SuperKeyword */;
     }
     ts.isSuperProperty = isSuperProperty;
     /**
@@ -15137,34 +15522,34 @@
      */
     function isThisProperty(node) {
         var kind = node.kind;
-        return (kind === 202 /* PropertyAccessExpression */ || kind === 203 /* ElementAccessExpression */)
-            && node.expression.kind === 107 /* ThisKeyword */;
+        return (kind === 204 /* PropertyAccessExpression */ || kind === 205 /* ElementAccessExpression */)
+            && node.expression.kind === 108 /* ThisKeyword */;
     }
     ts.isThisProperty = isThisProperty;
     function isThisInitializedDeclaration(node) {
         var _a;
-        return !!node && ts.isVariableDeclaration(node) && ((_a = node.initializer) === null || _a === void 0 ? void 0 : _a.kind) === 107 /* ThisKeyword */;
+        return !!node && ts.isVariableDeclaration(node) && ((_a = node.initializer) === null || _a === void 0 ? void 0 : _a.kind) === 108 /* ThisKeyword */;
     }
     ts.isThisInitializedDeclaration = isThisInitializedDeclaration;
     function isThisInitializedObjectBindingExpression(node) {
         return !!node
             && (ts.isShorthandPropertyAssignment(node) || ts.isPropertyAssignment(node))
             && ts.isBinaryExpression(node.parent.parent)
-            && node.parent.parent.operatorToken.kind === 62 /* EqualsToken */
-            && node.parent.parent.right.kind === 107 /* ThisKeyword */;
+            && node.parent.parent.operatorToken.kind === 63 /* EqualsToken */
+            && node.parent.parent.right.kind === 108 /* ThisKeyword */;
     }
     ts.isThisInitializedObjectBindingExpression = isThisInitializedObjectBindingExpression;
     function getEntityNameFromTypeNode(node) {
         switch (node.kind) {
-            case 174 /* TypeReference */:
+            case 176 /* TypeReference */:
                 return node.typeName;
-            case 224 /* ExpressionWithTypeArguments */:
+            case 226 /* ExpressionWithTypeArguments */:
                 return isEntityNameExpression(node.expression)
                     ? node.expression
                     : undefined;
             // TODO(rbuckton): These aren't valid TypeNodes, but we treat them as such because of `isPartOfTypeNode`, which returns `true` for things that aren't `TypeNode`s.
-            case 78 /* Identifier */:
-            case 158 /* QualifiedName */:
+            case 79 /* Identifier */:
+            case 159 /* QualifiedName */:
                 return node;
         }
         return undefined;
@@ -15172,10 +15557,10 @@
     ts.getEntityNameFromTypeNode = getEntityNameFromTypeNode;
     function getInvokedExpression(node) {
         switch (node.kind) {
-            case 206 /* TaggedTemplateExpression */:
+            case 208 /* TaggedTemplateExpression */:
                 return node.tag;
-            case 276 /* JsxOpeningElement */:
-            case 275 /* JsxSelfClosingElement */:
+            case 278 /* JsxOpeningElement */:
+            case 277 /* JsxSelfClosingElement */:
                 return node.tagName;
             default:
                 return node.expression;
@@ -15188,25 +15573,25 @@
             return false;
         }
         switch (node.kind) {
-            case 253 /* ClassDeclaration */:
+            case 255 /* ClassDeclaration */:
                 // classes are valid targets
                 return true;
-            case 164 /* PropertyDeclaration */:
+            case 165 /* PropertyDeclaration */:
                 // property declarations are valid if their parent is a class declaration.
-                return parent.kind === 253 /* ClassDeclaration */;
-            case 168 /* GetAccessor */:
-            case 169 /* SetAccessor */:
-            case 166 /* MethodDeclaration */:
+                return parent.kind === 255 /* ClassDeclaration */;
+            case 170 /* GetAccessor */:
+            case 171 /* SetAccessor */:
+            case 167 /* MethodDeclaration */:
                 // if this method has a body and its parent is a class declaration, this is a valid target.
                 return node.body !== undefined
-                    && parent.kind === 253 /* ClassDeclaration */;
-            case 161 /* Parameter */:
+                    && parent.kind === 255 /* ClassDeclaration */;
+            case 162 /* Parameter */:
                 // if the parameter's parent has a body and its grandparent is a class declaration, this is a valid target;
                 return parent.body !== undefined
-                    && (parent.kind === 167 /* Constructor */
-                        || parent.kind === 166 /* MethodDeclaration */
-                        || parent.kind === 169 /* SetAccessor */)
-                    && grandparent.kind === 253 /* ClassDeclaration */;
+                    && (parent.kind === 169 /* Constructor */
+                        || parent.kind === 167 /* MethodDeclaration */
+                        || parent.kind === 171 /* SetAccessor */)
+                    && grandparent.kind === 255 /* ClassDeclaration */;
         }
         return false;
     }
@@ -15222,21 +15607,29 @@
     ts.nodeOrChildIsDecorated = nodeOrChildIsDecorated;
     function childIsDecorated(node, parent) {
         switch (node.kind) {
-            case 253 /* ClassDeclaration */:
+            case 255 /* ClassDeclaration */:
                 return ts.some(node.members, function (m) { return nodeOrChildIsDecorated(m, node, parent); }); // TODO: GH#18217
-            case 166 /* MethodDeclaration */:
-            case 169 /* SetAccessor */:
+            case 167 /* MethodDeclaration */:
+            case 171 /* SetAccessor */:
+            case 169 /* Constructor */:
                 return ts.some(node.parameters, function (p) { return nodeIsDecorated(p, node, parent); }); // TODO: GH#18217
             default:
                 return false;
         }
     }
     ts.childIsDecorated = childIsDecorated;
+    function classOrConstructorParameterIsDecorated(node) {
+        if (nodeIsDecorated(node))
+            return true;
+        var constructor = getFirstConstructorWithBody(node);
+        return !!constructor && childIsDecorated(constructor, node);
+    }
+    ts.classOrConstructorParameterIsDecorated = classOrConstructorParameterIsDecorated;
     function isJSXTagName(node) {
         var parent = node.parent;
-        if (parent.kind === 276 /* JsxOpeningElement */ ||
-            parent.kind === 275 /* JsxSelfClosingElement */ ||
-            parent.kind === 277 /* JsxClosingElement */) {
+        if (parent.kind === 278 /* JsxOpeningElement */ ||
+            parent.kind === 277 /* JsxSelfClosingElement */ ||
+            parent.kind === 279 /* JsxClosingElement */) {
             return parent.tagName === node;
         }
         return false;
@@ -15244,49 +15637,54 @@
     ts.isJSXTagName = isJSXTagName;
     function isExpressionNode(node) {
         switch (node.kind) {
-            case 105 /* SuperKeyword */:
-            case 103 /* NullKeyword */:
-            case 109 /* TrueKeyword */:
-            case 94 /* FalseKeyword */:
+            case 106 /* SuperKeyword */:
+            case 104 /* NullKeyword */:
+            case 110 /* TrueKeyword */:
+            case 95 /* FalseKeyword */:
             case 13 /* RegularExpressionLiteral */:
-            case 200 /* ArrayLiteralExpression */:
-            case 201 /* ObjectLiteralExpression */:
-            case 202 /* PropertyAccessExpression */:
-            case 203 /* ElementAccessExpression */:
-            case 204 /* CallExpression */:
-            case 205 /* NewExpression */:
-            case 206 /* TaggedTemplateExpression */:
-            case 225 /* AsExpression */:
-            case 207 /* TypeAssertionExpression */:
-            case 226 /* NonNullExpression */:
-            case 208 /* ParenthesizedExpression */:
-            case 209 /* FunctionExpression */:
-            case 222 /* ClassExpression */:
-            case 210 /* ArrowFunction */:
-            case 213 /* VoidExpression */:
-            case 211 /* DeleteExpression */:
-            case 212 /* TypeOfExpression */:
-            case 215 /* PrefixUnaryExpression */:
-            case 216 /* PostfixUnaryExpression */:
-            case 217 /* BinaryExpression */:
-            case 218 /* ConditionalExpression */:
-            case 221 /* SpreadElement */:
-            case 219 /* TemplateExpression */:
-            case 223 /* OmittedExpression */:
-            case 274 /* JsxElement */:
-            case 275 /* JsxSelfClosingElement */:
-            case 278 /* JsxFragment */:
-            case 220 /* YieldExpression */:
-            case 214 /* AwaitExpression */:
-            case 227 /* MetaProperty */:
+            case 202 /* ArrayLiteralExpression */:
+            case 203 /* ObjectLiteralExpression */:
+            case 204 /* PropertyAccessExpression */:
+            case 205 /* ElementAccessExpression */:
+            case 206 /* CallExpression */:
+            case 207 /* NewExpression */:
+            case 208 /* TaggedTemplateExpression */:
+            case 227 /* AsExpression */:
+            case 209 /* TypeAssertionExpression */:
+            case 228 /* NonNullExpression */:
+            case 210 /* ParenthesizedExpression */:
+            case 211 /* FunctionExpression */:
+            case 224 /* ClassExpression */:
+            case 212 /* ArrowFunction */:
+            case 215 /* VoidExpression */:
+            case 213 /* DeleteExpression */:
+            case 214 /* TypeOfExpression */:
+            case 217 /* PrefixUnaryExpression */:
+            case 218 /* PostfixUnaryExpression */:
+            case 219 /* BinaryExpression */:
+            case 220 /* ConditionalExpression */:
+            case 223 /* SpreadElement */:
+            case 221 /* TemplateExpression */:
+            case 225 /* OmittedExpression */:
+            case 276 /* JsxElement */:
+            case 277 /* JsxSelfClosingElement */:
+            case 280 /* JsxFragment */:
+            case 222 /* YieldExpression */:
+            case 216 /* AwaitExpression */:
+            case 229 /* MetaProperty */:
                 return true;
-            case 158 /* QualifiedName */:
-                while (node.parent.kind === 158 /* QualifiedName */) {
+            case 159 /* QualifiedName */:
+                while (node.parent.kind === 159 /* QualifiedName */) {
                     node = node.parent;
                 }
-                return node.parent.kind === 177 /* TypeQuery */ || isJSXTagName(node);
-            case 78 /* Identifier */:
-                if (node.parent.kind === 177 /* TypeQuery */ || isJSXTagName(node)) {
+                return node.parent.kind === 179 /* TypeQuery */ || ts.isJSDocLinkLike(node.parent) || ts.isJSDocNameReference(node.parent) || ts.isJSDocMemberName(node.parent) || isJSXTagName(node);
+            case 306 /* JSDocMemberName */:
+                while (ts.isJSDocMemberName(node.parent)) {
+                    node = node.parent;
+                }
+                return node.parent.kind === 179 /* TypeQuery */ || ts.isJSDocLinkLike(node.parent) || ts.isJSDocNameReference(node.parent) || ts.isJSDocMemberName(node.parent) || isJSXTagName(node);
+            case 79 /* Identifier */:
+                if (node.parent.kind === 179 /* TypeQuery */ || ts.isJSDocLinkLike(node.parent) || ts.isJSDocNameReference(node.parent) || ts.isJSDocMemberName(node.parent) || isJSXTagName(node)) {
                     return true;
                 }
             // falls through
@@ -15294,7 +15692,7 @@
             case 9 /* BigIntLiteral */:
             case 10 /* StringLiteral */:
             case 14 /* NoSubstitutionTemplateLiteral */:
-            case 107 /* ThisKeyword */:
+            case 108 /* ThisKeyword */:
                 return isInExpressionContext(node);
             default:
                 return false;
@@ -15304,49 +15702,49 @@
     function isInExpressionContext(node) {
         var parent = node.parent;
         switch (parent.kind) {
-            case 250 /* VariableDeclaration */:
-            case 161 /* Parameter */:
-            case 164 /* PropertyDeclaration */:
-            case 163 /* PropertySignature */:
-            case 292 /* EnumMember */:
-            case 289 /* PropertyAssignment */:
-            case 199 /* BindingElement */:
+            case 252 /* VariableDeclaration */:
+            case 162 /* Parameter */:
+            case 165 /* PropertyDeclaration */:
+            case 164 /* PropertySignature */:
+            case 294 /* EnumMember */:
+            case 291 /* PropertyAssignment */:
+            case 201 /* BindingElement */:
                 return parent.initializer === node;
-            case 234 /* ExpressionStatement */:
-            case 235 /* IfStatement */:
-            case 236 /* DoStatement */:
-            case 237 /* WhileStatement */:
-            case 243 /* ReturnStatement */:
-            case 244 /* WithStatement */:
-            case 245 /* SwitchStatement */:
-            case 285 /* CaseClause */:
-            case 247 /* ThrowStatement */:
+            case 236 /* ExpressionStatement */:
+            case 237 /* IfStatement */:
+            case 238 /* DoStatement */:
+            case 239 /* WhileStatement */:
+            case 245 /* ReturnStatement */:
+            case 246 /* WithStatement */:
+            case 247 /* SwitchStatement */:
+            case 287 /* CaseClause */:
+            case 249 /* ThrowStatement */:
                 return parent.expression === node;
-            case 238 /* ForStatement */:
+            case 240 /* ForStatement */:
                 var forStatement = parent;
-                return (forStatement.initializer === node && forStatement.initializer.kind !== 251 /* VariableDeclarationList */) ||
+                return (forStatement.initializer === node && forStatement.initializer.kind !== 253 /* VariableDeclarationList */) ||
                     forStatement.condition === node ||
                     forStatement.incrementor === node;
-            case 239 /* ForInStatement */:
-            case 240 /* ForOfStatement */:
+            case 241 /* ForInStatement */:
+            case 242 /* ForOfStatement */:
                 var forInStatement = parent;
-                return (forInStatement.initializer === node && forInStatement.initializer.kind !== 251 /* VariableDeclarationList */) ||
+                return (forInStatement.initializer === node && forInStatement.initializer.kind !== 253 /* VariableDeclarationList */) ||
                     forInStatement.expression === node;
-            case 207 /* TypeAssertionExpression */:
-            case 225 /* AsExpression */:
+            case 209 /* TypeAssertionExpression */:
+            case 227 /* AsExpression */:
                 return node === parent.expression;
-            case 229 /* TemplateSpan */:
+            case 231 /* TemplateSpan */:
                 return node === parent.expression;
-            case 159 /* ComputedPropertyName */:
+            case 160 /* ComputedPropertyName */:
                 return node === parent.expression;
-            case 162 /* Decorator */:
-            case 284 /* JsxExpression */:
-            case 283 /* JsxSpreadAttribute */:
-            case 291 /* SpreadAssignment */:
+            case 163 /* Decorator */:
+            case 286 /* JsxExpression */:
+            case 285 /* JsxSpreadAttribute */:
+            case 293 /* SpreadAssignment */:
                 return true;
-            case 224 /* ExpressionWithTypeArguments */:
+            case 226 /* ExpressionWithTypeArguments */:
                 return parent.expression === node && isExpressionWithTypeArgumentsInClassExtendsClause(parent);
-            case 290 /* ShorthandPropertyAssignment */:
+            case 292 /* ShorthandPropertyAssignment */:
                 return parent.objectAssignmentInitializer === node;
             default:
                 return isExpressionNode(parent);
@@ -15354,10 +15752,10 @@
     }
     ts.isInExpressionContext = isInExpressionContext;
     function isPartOfTypeQuery(node) {
-        while (node.kind === 158 /* QualifiedName */ || node.kind === 78 /* Identifier */) {
+        while (node.kind === 159 /* QualifiedName */ || node.kind === 79 /* Identifier */) {
             node = node.parent;
         }
-        return node.kind === 177 /* TypeQuery */;
+        return node.kind === 179 /* TypeQuery */;
     }
     ts.isPartOfTypeQuery = isPartOfTypeQuery;
     function isNamespaceReexportDeclaration(node) {
@@ -15365,7 +15763,7 @@
     }
     ts.isNamespaceReexportDeclaration = isNamespaceReexportDeclaration;
     function isExternalModuleImportEqualsDeclaration(node) {
-        return node.kind === 261 /* ImportEqualsDeclaration */ && node.moduleReference.kind === 273 /* ExternalModuleReference */;
+        return node.kind === 263 /* ImportEqualsDeclaration */ && node.moduleReference.kind === 275 /* ExternalModuleReference */;
     }
     ts.isExternalModuleImportEqualsDeclaration = isExternalModuleImportEqualsDeclaration;
     function getExternalModuleImportEqualsDeclarationExpression(node) {
@@ -15378,7 +15776,7 @@
     }
     ts.getExternalModuleRequireArgument = getExternalModuleRequireArgument;
     function isInternalModuleImportEqualsDeclaration(node) {
-        return node.kind === 261 /* ImportEqualsDeclaration */ && node.moduleReference.kind !== 273 /* ExternalModuleReference */;
+        return node.kind === 263 /* ImportEqualsDeclaration */ && node.moduleReference.kind !== 275 /* ExternalModuleReference */;
     }
     ts.isInternalModuleImportEqualsDeclaration = isInternalModuleImportEqualsDeclaration;
     function isSourceFileJS(file) {
@@ -15410,15 +15808,15 @@
             ts.isIdentifier(node.typeName) &&
             node.typeName.escapedText === "Object" &&
             node.typeArguments && node.typeArguments.length === 2 &&
-            (node.typeArguments[0].kind === 147 /* StringKeyword */ || node.typeArguments[0].kind === 144 /* NumberKeyword */);
+            (node.typeArguments[0].kind === 148 /* StringKeyword */ || node.typeArguments[0].kind === 145 /* NumberKeyword */);
     }
     ts.isJSDocIndexSignature = isJSDocIndexSignature;
     function isRequireCall(callExpression, requireStringLiteralLikeArgument) {
-        if (callExpression.kind !== 204 /* CallExpression */) {
+        if (callExpression.kind !== 206 /* CallExpression */) {
             return false;
         }
         var _a = callExpression, expression = _a.expression, args = _a.arguments;
-        if (expression.kind !== 78 /* Identifier */ || expression.escapedText !== "require") {
+        if (expression.kind !== 79 /* Identifier */ || expression.escapedText !== "require") {
             return false;
         }
         if (args.length !== 1) {
@@ -15433,7 +15831,7 @@
      * This function does not test if the node is in a JavaScript file or not.
      */
     function isRequireVariableDeclaration(node) {
-        if (node.kind === 199 /* BindingElement */) {
+        if (node.kind === 201 /* BindingElement */) {
             node = node.parent.parent;
         }
         return ts.isVariableDeclaration(node) && !!node.initializer && isRequireCall(getLeftmostAccessExpression(node.initializer), /*requireStringLiteralLikeArgument*/ true);
@@ -15488,7 +15886,7 @@
      * We treat the right hand side of assignments with container-like initializers as declarations.
      */
     function getAssignedExpandoInitializer(node) {
-        if (node && node.parent && ts.isBinaryExpression(node.parent) && node.parent.operatorToken.kind === 62 /* EqualsToken */) {
+        if (node && node.parent && ts.isBinaryExpression(node.parent) && node.parent.operatorToken.kind === 63 /* EqualsToken */) {
             var isPrototypeAssignment = isPrototypeAccess(node.parent.left);
             return getExpandoInitializer(node.parent.right, isPrototypeAssignment) ||
                 getDefaultedExpandoInitializer(node.parent.left, node.parent.right, isPrototypeAssignment);
@@ -15514,11 +15912,11 @@
     function getExpandoInitializer(initializer, isPrototypeAssignment) {
         if (ts.isCallExpression(initializer)) {
             var e = skipParentheses(initializer.expression);
-            return e.kind === 209 /* FunctionExpression */ || e.kind === 210 /* ArrowFunction */ ? initializer : undefined;
+            return e.kind === 211 /* FunctionExpression */ || e.kind === 212 /* ArrowFunction */ ? initializer : undefined;
         }
-        if (initializer.kind === 209 /* FunctionExpression */ ||
-            initializer.kind === 222 /* ClassExpression */ ||
-            initializer.kind === 210 /* ArrowFunction */) {
+        if (initializer.kind === 211 /* FunctionExpression */ ||
+            initializer.kind === 224 /* ClassExpression */ ||
+            initializer.kind === 212 /* ArrowFunction */) {
             return initializer;
         }
         if (ts.isObjectLiteralExpression(initializer) && (initializer.properties.length === 0 || isPrototypeAssignment)) {
@@ -15544,7 +15942,7 @@
     }
     function isDefaultedExpandoInitializer(node) {
         var name = ts.isVariableDeclaration(node.parent) ? node.parent.name :
-            ts.isBinaryExpression(node.parent) && node.parent.operatorToken.kind === 62 /* EqualsToken */ ? node.parent.left :
+            ts.isBinaryExpression(node.parent) && node.parent.operatorToken.kind === 63 /* EqualsToken */ ? node.parent.left :
                 undefined;
         return name && getExpandoInitializer(node.right, isPrototypeAccess(name)) && isEntityNameExpression(name) && isSameEntityName(name, node.left);
     }
@@ -15553,7 +15951,7 @@
     function getNameOfExpando(node) {
         if (ts.isBinaryExpression(node.parent)) {
             var parent = ((node.parent.operatorToken.kind === 56 /* BarBarToken */ || node.parent.operatorToken.kind === 60 /* QuestionQuestionToken */) && ts.isBinaryExpression(node.parent.parent)) ? node.parent.parent : node.parent;
-            if (parent.operatorToken.kind === 62 /* EqualsToken */ && ts.isIdentifier(parent.left)) {
+            if (parent.operatorToken.kind === 63 /* EqualsToken */ && ts.isIdentifier(parent.left)) {
                 return parent.left;
             }
         }
@@ -15576,7 +15974,7 @@
             return getTextOfIdentifierOrLiteral(name) === getTextOfIdentifierOrLiteral(initializer);
         }
         if (ts.isIdentifier(name) && isLiteralLikeAccess(initializer) &&
-            (initializer.expression.kind === 107 /* ThisKeyword */ ||
+            (initializer.expression.kind === 108 /* ThisKeyword */ ||
                 ts.isIdentifier(initializer.expression) &&
                     (initializer.expression.escapedText === "window" ||
                         initializer.expression.escapedText === "self" ||
@@ -15644,14 +16042,14 @@
     ts.isLiteralLikeElementAccess = isLiteralLikeElementAccess;
     /** Any series of property and element accesses. */
     function isBindableStaticAccessExpression(node, excludeThisKeyword) {
-        return ts.isPropertyAccessExpression(node) && (!excludeThisKeyword && node.expression.kind === 107 /* ThisKeyword */ || ts.isIdentifier(node.name) && isBindableStaticNameExpression(node.expression, /*excludeThisKeyword*/ true))
+        return ts.isPropertyAccessExpression(node) && (!excludeThisKeyword && node.expression.kind === 108 /* ThisKeyword */ || ts.isIdentifier(node.name) && isBindableStaticNameExpression(node.expression, /*excludeThisKeyword*/ true))
             || isBindableStaticElementAccessExpression(node, excludeThisKeyword);
     }
     ts.isBindableStaticAccessExpression = isBindableStaticAccessExpression;
     /** Any series of property and element accesses, ending in a literal element access */
     function isBindableStaticElementAccessExpression(node, excludeThisKeyword) {
         return isLiteralLikeElementAccess(node)
-            && ((!excludeThisKeyword && node.expression.kind === 107 /* ThisKeyword */) ||
+            && ((!excludeThisKeyword && node.expression.kind === 108 /* ThisKeyword */) ||
                 isEntityNameExpression(node.expression) ||
                 isBindableStaticAccessExpression(node.expression, /*excludeThisKeyword*/ true));
     }
@@ -15681,7 +16079,7 @@
             }
             return 7 /* ObjectDefinePropertyValue */;
         }
-        if (expr.operatorToken.kind !== 62 /* EqualsToken */ || !isAccessExpression(expr.left) || isVoidZero(getRightMostAssignedExpression(expr))) {
+        if (expr.operatorToken.kind !== 63 /* EqualsToken */ || !isAccessExpression(expr.left) || isVoidZero(getRightMostAssignedExpression(expr))) {
             return 0 /* None */;
         }
         if (isBindableStaticNameExpression(expr.left.expression, /*excludeThisKeyword*/ true) && getElementOrPropertyAccessName(expr.left) === "prototype" && ts.isObjectLiteralExpression(getInitializerOfBinaryExpression(expr))) {
@@ -15723,7 +16121,7 @@
     }
     ts.getElementOrPropertyAccessName = getElementOrPropertyAccessName;
     function getAssignmentDeclarationPropertyAccessKind(lhs) {
-        if (lhs.expression.kind === 107 /* ThisKeyword */) {
+        if (lhs.expression.kind === 108 /* ThisKeyword */) {
             return 4 /* ThisProperty */;
         }
         else if (isModuleExportsAccessExpression(lhs)) {
@@ -15768,7 +16166,7 @@
     ts.isPrototypePropertyAssignment = isPrototypePropertyAssignment;
     function isSpecialPropertyDeclaration(expr) {
         return isInJSFile(expr) &&
-            expr.parent && expr.parent.kind === 234 /* ExpressionStatement */ &&
+            expr.parent && expr.parent.kind === 236 /* ExpressionStatement */ &&
             (!ts.isElementAccessExpression(expr) || isLiteralLikeElementAccess(expr)) &&
             !!ts.getJSDocTypeTag(expr.parent);
     }
@@ -15789,17 +16187,17 @@
             return false;
         }
         var decl = symbol.valueDeclaration;
-        return decl.kind === 252 /* FunctionDeclaration */ || ts.isVariableDeclaration(decl) && decl.initializer && ts.isFunctionLike(decl.initializer);
+        return decl.kind === 254 /* FunctionDeclaration */ || ts.isVariableDeclaration(decl) && decl.initializer && ts.isFunctionLike(decl.initializer);
     }
     ts.isFunctionSymbol = isFunctionSymbol;
     function tryGetModuleSpecifierFromDeclaration(node) {
         var _a, _b, _c;
         switch (node.kind) {
-            case 250 /* VariableDeclaration */:
+            case 252 /* VariableDeclaration */:
                 return node.initializer.arguments[0].text;
-            case 262 /* ImportDeclaration */:
+            case 264 /* ImportDeclaration */:
                 return (_a = ts.tryCast(node.moduleSpecifier, ts.isStringLiteralLike)) === null || _a === void 0 ? void 0 : _a.text;
-            case 261 /* ImportEqualsDeclaration */:
+            case 263 /* ImportEqualsDeclaration */:
                 return (_c = ts.tryCast((_b = ts.tryCast(node.moduleReference, ts.isExternalModuleReference)) === null || _b === void 0 ? void 0 : _b.expression, ts.isStringLiteralLike)) === null || _c === void 0 ? void 0 : _c.text;
             default:
                 ts.Debug.assertNever(node);
@@ -15812,14 +16210,14 @@
     ts.importFromModuleSpecifier = importFromModuleSpecifier;
     function tryGetImportFromModuleSpecifier(node) {
         switch (node.parent.kind) {
-            case 262 /* ImportDeclaration */:
-            case 268 /* ExportDeclaration */:
+            case 264 /* ImportDeclaration */:
+            case 270 /* ExportDeclaration */:
                 return node.parent;
-            case 273 /* ExternalModuleReference */:
+            case 275 /* ExternalModuleReference */:
                 return node.parent.parent;
-            case 204 /* CallExpression */:
+            case 206 /* CallExpression */:
                 return isImportCall(node.parent) || isRequireCall(node.parent, /*checkArg*/ false) ? node.parent : undefined;
-            case 192 /* LiteralType */:
+            case 194 /* LiteralType */:
                 ts.Debug.assert(ts.isStringLiteral(node));
                 return ts.tryCast(node.parent.parent, ts.isImportTypeNode);
             default:
@@ -15829,16 +16227,16 @@
     ts.tryGetImportFromModuleSpecifier = tryGetImportFromModuleSpecifier;
     function getExternalModuleName(node) {
         switch (node.kind) {
-            case 262 /* ImportDeclaration */:
-            case 268 /* ExportDeclaration */:
+            case 264 /* ImportDeclaration */:
+            case 270 /* ExportDeclaration */:
                 return node.moduleSpecifier;
-            case 261 /* ImportEqualsDeclaration */:
-                return node.moduleReference.kind === 273 /* ExternalModuleReference */ ? node.moduleReference.expression : undefined;
-            case 196 /* ImportType */:
+            case 263 /* ImportEqualsDeclaration */:
+                return node.moduleReference.kind === 275 /* ExternalModuleReference */ ? node.moduleReference.expression : undefined;
+            case 198 /* ImportType */:
                 return isLiteralImportTypeNode(node) ? node.argument.literal : undefined;
-            case 204 /* CallExpression */:
+            case 206 /* CallExpression */:
                 return node.arguments[0];
-            case 257 /* ModuleDeclaration */:
+            case 259 /* ModuleDeclaration */:
                 return node.name.kind === 10 /* StringLiteral */ ? node.name : undefined;
             default:
                 return ts.Debug.assertNever(node);
@@ -15847,11 +16245,11 @@
     ts.getExternalModuleName = getExternalModuleName;
     function getNamespaceDeclarationNode(node) {
         switch (node.kind) {
-            case 262 /* ImportDeclaration */:
+            case 264 /* ImportDeclaration */:
                 return node.importClause && ts.tryCast(node.importClause.namedBindings, ts.isNamespaceImport);
-            case 261 /* ImportEqualsDeclaration */:
+            case 263 /* ImportEqualsDeclaration */:
                 return node;
-            case 268 /* ExportDeclaration */:
+            case 270 /* ExportDeclaration */:
                 return node.exportClause && ts.tryCast(node.exportClause, ts.isNamespaceExport);
             default:
                 return ts.Debug.assertNever(node);
@@ -15859,7 +16257,7 @@
     }
     ts.getNamespaceDeclarationNode = getNamespaceDeclarationNode;
     function isDefaultImport(node) {
-        return node.kind === 262 /* ImportDeclaration */ && !!node.importClause && !!node.importClause.name;
+        return node.kind === 264 /* ImportDeclaration */ && !!node.importClause && !!node.importClause.name;
     }
     ts.isDefaultImport = isDefaultImport;
     function forEachImportClauseDeclaration(node, action) {
@@ -15880,13 +16278,13 @@
     function hasQuestionToken(node) {
         if (node) {
             switch (node.kind) {
-                case 161 /* Parameter */:
-                case 166 /* MethodDeclaration */:
-                case 165 /* MethodSignature */:
-                case 290 /* ShorthandPropertyAssignment */:
-                case 289 /* PropertyAssignment */:
-                case 164 /* PropertyDeclaration */:
-                case 163 /* PropertySignature */:
+                case 162 /* Parameter */:
+                case 167 /* MethodDeclaration */:
+                case 166 /* MethodSignature */:
+                case 292 /* ShorthandPropertyAssignment */:
+                case 291 /* PropertyAssignment */:
+                case 165 /* PropertyDeclaration */:
+                case 164 /* PropertySignature */:
                     return node.questionToken !== undefined;
             }
         }
@@ -15900,7 +16298,7 @@
     }
     ts.isJSDocConstructSignature = isJSDocConstructSignature;
     function isJSDocTypeAlias(node) {
-        return node.kind === 335 /* JSDocTypedefTag */ || node.kind === 328 /* JSDocCallbackTag */ || node.kind === 329 /* JSDocEnumTag */;
+        return node.kind === 340 /* JSDocTypedefTag */ || node.kind === 333 /* JSDocCallbackTag */ || node.kind === 334 /* JSDocEnumTag */;
     }
     ts.isJSDocTypeAlias = isJSDocTypeAlias;
     function isTypeAlias(node) {
@@ -15910,7 +16308,7 @@
     function getSourceOfAssignment(node) {
         return ts.isExpressionStatement(node) &&
             ts.isBinaryExpression(node.expression) &&
-            node.expression.operatorToken.kind === 62 /* EqualsToken */
+            node.expression.operatorToken.kind === 63 /* EqualsToken */
             ? getRightMostAssignedExpression(node.expression)
             : undefined;
     }
@@ -15925,12 +16323,12 @@
     }
     function getSingleInitializerOfVariableStatementOrPropertyDeclaration(node) {
         switch (node.kind) {
-            case 233 /* VariableStatement */:
+            case 235 /* VariableStatement */:
                 var v = getSingleVariableOfVariableStatement(node);
                 return v && v.initializer;
-            case 164 /* PropertyDeclaration */:
+            case 165 /* PropertyDeclaration */:
                 return node.initializer;
-            case 289 /* PropertyAssignment */:
+            case 291 /* PropertyAssignment */:
                 return node.initializer;
         }
     }
@@ -15942,7 +16340,7 @@
     function getNestedModuleDeclaration(node) {
         return ts.isModuleDeclaration(node) &&
             node.body &&
-            node.body.kind === 257 /* ModuleDeclaration */
+            node.body.kind === 259 /* ModuleDeclaration */
             ? node.body
             : undefined;
     }
@@ -15957,11 +16355,11 @@
             if (ts.hasJSDocNodes(node)) {
                 result = ts.append(result, ts.last(node.jsDoc));
             }
-            if (node.kind === 161 /* Parameter */) {
+            if (node.kind === 162 /* Parameter */) {
                 result = ts.addRange(result, (noCache ? ts.getJSDocParameterTagsNoCache : ts.getJSDocParameterTags)(node));
                 break;
             }
-            if (node.kind === 160 /* TypeParameter */) {
+            if (node.kind === 161 /* TypeParameter */) {
                 result = ts.addRange(result, (noCache ? ts.getJSDocTypeParameterTagsNoCache : ts.getJSDocTypeParameterTags)(node));
                 break;
             }
@@ -15972,13 +16370,13 @@
     ts.getJSDocCommentsAndTags = getJSDocCommentsAndTags;
     function getNextJSDocCommentLocation(node) {
         var parent = node.parent;
-        if (parent.kind === 289 /* PropertyAssignment */ ||
-            parent.kind === 267 /* ExportAssignment */ ||
-            parent.kind === 164 /* PropertyDeclaration */ ||
-            parent.kind === 234 /* ExpressionStatement */ && node.kind === 202 /* PropertyAccessExpression */ ||
-            parent.kind === 243 /* ReturnStatement */ ||
+        if (parent.kind === 291 /* PropertyAssignment */ ||
+            parent.kind === 269 /* ExportAssignment */ ||
+            parent.kind === 165 /* PropertyDeclaration */ ||
+            parent.kind === 236 /* ExpressionStatement */ && node.kind === 204 /* PropertyAccessExpression */ ||
+            parent.kind === 245 /* ReturnStatement */ ||
             getNestedModuleDeclaration(parent) ||
-            ts.isBinaryExpression(node) && node.operatorToken.kind === 62 /* EqualsToken */) {
+            ts.isBinaryExpression(node) && node.operatorToken.kind === 63 /* EqualsToken */) {
             return parent;
         }
         // Try to recognize this pattern when node is initializer of variable declaration and JSDoc comments are on containing variable statement.
@@ -15989,7 +16387,7 @@
         // var x = function(name) { return name.length; }
         else if (parent.parent &&
             (getSingleVariableOfVariableStatement(parent.parent) === node ||
-                ts.isBinaryExpression(parent) && parent.operatorToken.kind === 62 /* EqualsToken */)) {
+                ts.isBinaryExpression(parent) && parent.operatorToken.kind === 63 /* EqualsToken */)) {
             return parent.parent;
         }
         else if (parent.parent && parent.parent.parent &&
@@ -16013,7 +16411,7 @@
         if (!decl) {
             return undefined;
         }
-        var parameter = ts.find(decl.parameters, function (p) { return p.name.kind === 78 /* Identifier */ && p.name.escapedText === name; });
+        var parameter = ts.find(decl.parameters, function (p) { return p.name.kind === 79 /* Identifier */ && p.name.escapedText === name; });
         return parameter && parameter.symbol;
     }
     ts.getParameterSymbolFromJSDoc = getParameterSymbolFromJSDoc;
@@ -16063,7 +16461,7 @@
     ts.hasRestParameter = hasRestParameter;
     function isRestParameter(node) {
         var type = ts.isJSDocParameterTag(node) ? (node.typeExpression && node.typeExpression.type) : node.type;
-        return node.dotDotDotToken !== undefined || !!type && type.kind === 310 /* JSDocVariadicType */;
+        return node.dotDotDotToken !== undefined || !!type && type.kind === 313 /* JSDocVariadicType */;
     }
     ts.isRestParameter = isRestParameter;
     function hasTypeArguments(node) {
@@ -16080,34 +16478,34 @@
         var parent = node.parent;
         while (true) {
             switch (parent.kind) {
-                case 217 /* BinaryExpression */:
+                case 219 /* BinaryExpression */:
                     var binaryOperator = parent.operatorToken.kind;
                     return isAssignmentOperator(binaryOperator) && parent.left === node ?
-                        binaryOperator === 62 /* EqualsToken */ || isLogicalOrCoalescingAssignmentOperator(binaryOperator) ? 1 /* Definite */ : 2 /* Compound */ :
+                        binaryOperator === 63 /* EqualsToken */ || isLogicalOrCoalescingAssignmentOperator(binaryOperator) ? 1 /* Definite */ : 2 /* Compound */ :
                         0 /* None */;
-                case 215 /* PrefixUnaryExpression */:
-                case 216 /* PostfixUnaryExpression */:
+                case 217 /* PrefixUnaryExpression */:
+                case 218 /* PostfixUnaryExpression */:
                     var unaryOperator = parent.operator;
                     return unaryOperator === 45 /* PlusPlusToken */ || unaryOperator === 46 /* MinusMinusToken */ ? 2 /* Compound */ : 0 /* None */;
-                case 239 /* ForInStatement */:
-                case 240 /* ForOfStatement */:
+                case 241 /* ForInStatement */:
+                case 242 /* ForOfStatement */:
                     return parent.initializer === node ? 1 /* Definite */ : 0 /* None */;
-                case 208 /* ParenthesizedExpression */:
-                case 200 /* ArrayLiteralExpression */:
-                case 221 /* SpreadElement */:
-                case 226 /* NonNullExpression */:
+                case 210 /* ParenthesizedExpression */:
+                case 202 /* ArrayLiteralExpression */:
+                case 223 /* SpreadElement */:
+                case 228 /* NonNullExpression */:
                     node = parent;
                     break;
-                case 291 /* SpreadAssignment */:
+                case 293 /* SpreadAssignment */:
                     node = parent.parent;
                     break;
-                case 290 /* ShorthandPropertyAssignment */:
+                case 292 /* ShorthandPropertyAssignment */:
                     if (parent.name !== node) {
                         return 0 /* None */;
                     }
                     node = parent.parent;
                     break;
-                case 289 /* PropertyAssignment */:
+                case 291 /* PropertyAssignment */:
                     if (parent.name === node) {
                         return 0 /* None */;
                     }
@@ -16134,22 +16532,22 @@
      */
     function isNodeWithPossibleHoistedDeclaration(node) {
         switch (node.kind) {
-            case 231 /* Block */:
-            case 233 /* VariableStatement */:
-            case 244 /* WithStatement */:
-            case 235 /* IfStatement */:
-            case 245 /* SwitchStatement */:
-            case 259 /* CaseBlock */:
-            case 285 /* CaseClause */:
-            case 286 /* DefaultClause */:
-            case 246 /* LabeledStatement */:
-            case 238 /* ForStatement */:
-            case 239 /* ForInStatement */:
-            case 240 /* ForOfStatement */:
-            case 236 /* DoStatement */:
-            case 237 /* WhileStatement */:
-            case 248 /* TryStatement */:
-            case 288 /* CatchClause */:
+            case 233 /* Block */:
+            case 235 /* VariableStatement */:
+            case 246 /* WithStatement */:
+            case 237 /* IfStatement */:
+            case 247 /* SwitchStatement */:
+            case 261 /* CaseBlock */:
+            case 287 /* CaseClause */:
+            case 288 /* DefaultClause */:
+            case 248 /* LabeledStatement */:
+            case 240 /* ForStatement */:
+            case 241 /* ForInStatement */:
+            case 242 /* ForOfStatement */:
+            case 238 /* DoStatement */:
+            case 239 /* WhileStatement */:
+            case 250 /* TryStatement */:
+            case 290 /* CatchClause */:
                 return true;
         }
         return false;
@@ -16166,11 +16564,11 @@
         return node;
     }
     function walkUpParenthesizedTypes(node) {
-        return walkUp(node, 187 /* ParenthesizedType */);
+        return walkUp(node, 189 /* ParenthesizedType */);
     }
     ts.walkUpParenthesizedTypes = walkUpParenthesizedTypes;
     function walkUpParenthesizedExpressions(node) {
-        return walkUp(node, 208 /* ParenthesizedExpression */);
+        return walkUp(node, 210 /* ParenthesizedExpression */);
     }
     ts.walkUpParenthesizedExpressions = walkUpParenthesizedExpressions;
     /**
@@ -16180,7 +16578,7 @@
      */
     function walkUpParenthesizedTypesAndGetParentAndChild(node) {
         var child;
-        while (node && node.kind === 187 /* ParenthesizedType */) {
+        while (node && node.kind === 189 /* ParenthesizedType */) {
             child = node;
             node = node.parent;
         }
@@ -16191,19 +16589,13 @@
         return ts.skipOuterExpressions(node, 1 /* Parentheses */);
     }
     ts.skipParentheses = skipParentheses;
-    function skipParenthesesUp(node) {
-        while (node.kind === 208 /* ParenthesizedExpression */) {
-            node = node.parent;
-        }
-        return node;
-    }
     // a node is delete target iff. it is PropertyAccessExpression/ElementAccessExpression with parentheses skipped
     function isDeleteTarget(node) {
-        if (node.kind !== 202 /* PropertyAccessExpression */ && node.kind !== 203 /* ElementAccessExpression */) {
+        if (node.kind !== 204 /* PropertyAccessExpression */ && node.kind !== 205 /* ElementAccessExpression */) {
             return false;
         }
         node = walkUpParenthesizedExpressions(node.parent);
-        return node && node.kind === 211 /* DeleteExpression */;
+        return node && node.kind === 213 /* DeleteExpression */;
     }
     ts.isDeleteTarget = isDeleteTarget;
     function isNodeDescendantOf(node, ancestor) {
@@ -16230,7 +16622,7 @@
                 if (ts.isComputedPropertyName(parent))
                     return parent.parent;
             // falls through
-            case 78 /* Identifier */:
+            case 79 /* Identifier */:
                 if (ts.isDeclaration(parent)) {
                     return parent.name === name ? parent : undefined;
                 }
@@ -16247,7 +16639,7 @@
                         ? binExp
                         : undefined;
                 }
-            case 79 /* PrivateIdentifier */:
+            case 80 /* PrivateIdentifier */:
                 return ts.isDeclaration(parent) && parent.name === name ? parent : undefined;
             default:
                 return undefined;
@@ -16256,7 +16648,7 @@
     ts.getDeclarationFromName = getDeclarationFromName;
     function isLiteralComputedPropertyDeclarationName(node) {
         return isStringOrNumericLiteralLike(node) &&
-            node.parent.kind === 159 /* ComputedPropertyName */ &&
+            node.parent.kind === 160 /* ComputedPropertyName */ &&
             ts.isDeclaration(node.parent.parent);
     }
     ts.isLiteralComputedPropertyDeclarationName = isLiteralComputedPropertyDeclarationName;
@@ -16264,26 +16656,26 @@
     function isIdentifierName(node) {
         var parent = node.parent;
         switch (parent.kind) {
-            case 164 /* PropertyDeclaration */:
-            case 163 /* PropertySignature */:
-            case 166 /* MethodDeclaration */:
-            case 165 /* MethodSignature */:
-            case 168 /* GetAccessor */:
-            case 169 /* SetAccessor */:
-            case 292 /* EnumMember */:
-            case 289 /* PropertyAssignment */:
-            case 202 /* PropertyAccessExpression */:
+            case 165 /* PropertyDeclaration */:
+            case 164 /* PropertySignature */:
+            case 167 /* MethodDeclaration */:
+            case 166 /* MethodSignature */:
+            case 170 /* GetAccessor */:
+            case 171 /* SetAccessor */:
+            case 294 /* EnumMember */:
+            case 291 /* PropertyAssignment */:
+            case 204 /* PropertyAccessExpression */:
                 // Name in member declaration or property name in property access
                 return parent.name === node;
-            case 158 /* QualifiedName */:
+            case 159 /* QualifiedName */:
                 // Name on right hand side of dot in a type query or type reference
                 return parent.right === node;
-            case 199 /* BindingElement */:
-            case 266 /* ImportSpecifier */:
+            case 201 /* BindingElement */:
+            case 268 /* ImportSpecifier */:
                 // Property name in binding element or import specifier
                 return parent.propertyName === node;
-            case 271 /* ExportSpecifier */:
-            case 281 /* JsxAttribute */:
+            case 273 /* ExportSpecifier */:
+            case 283 /* JsxAttribute */:
                 // Any name in an export specifier or JSX Attribute
                 return true;
         }
@@ -16303,33 +16695,33 @@
     // {<Identifier>}
     // {name: <EntityNameExpression>}
     function isAliasSymbolDeclaration(node) {
-        return node.kind === 261 /* ImportEqualsDeclaration */ ||
-            node.kind === 260 /* NamespaceExportDeclaration */ ||
-            node.kind === 263 /* ImportClause */ && !!node.name ||
-            node.kind === 264 /* NamespaceImport */ ||
-            node.kind === 270 /* NamespaceExport */ ||
-            node.kind === 266 /* ImportSpecifier */ ||
-            node.kind === 271 /* ExportSpecifier */ ||
-            node.kind === 267 /* ExportAssignment */ && exportAssignmentIsAlias(node) ||
+        return node.kind === 263 /* ImportEqualsDeclaration */ ||
+            node.kind === 262 /* NamespaceExportDeclaration */ ||
+            node.kind === 265 /* ImportClause */ && !!node.name ||
+            node.kind === 266 /* NamespaceImport */ ||
+            node.kind === 272 /* NamespaceExport */ ||
+            node.kind === 268 /* ImportSpecifier */ ||
+            node.kind === 273 /* ExportSpecifier */ ||
+            node.kind === 269 /* ExportAssignment */ && exportAssignmentIsAlias(node) ||
             ts.isBinaryExpression(node) && getAssignmentDeclarationKind(node) === 2 /* ModuleExports */ && exportAssignmentIsAlias(node) ||
-            ts.isPropertyAccessExpression(node) && ts.isBinaryExpression(node.parent) && node.parent.left === node && node.parent.operatorToken.kind === 62 /* EqualsToken */ && isAliasableExpression(node.parent.right) ||
-            node.kind === 290 /* ShorthandPropertyAssignment */ ||
-            node.kind === 289 /* PropertyAssignment */ && isAliasableExpression(node.initializer);
+            ts.isPropertyAccessExpression(node) && ts.isBinaryExpression(node.parent) && node.parent.left === node && node.parent.operatorToken.kind === 63 /* EqualsToken */ && isAliasableExpression(node.parent.right) ||
+            node.kind === 292 /* ShorthandPropertyAssignment */ ||
+            node.kind === 291 /* PropertyAssignment */ && isAliasableExpression(node.initializer);
     }
     ts.isAliasSymbolDeclaration = isAliasSymbolDeclaration;
     function getAliasDeclarationFromName(node) {
         switch (node.parent.kind) {
-            case 263 /* ImportClause */:
-            case 266 /* ImportSpecifier */:
-            case 264 /* NamespaceImport */:
-            case 271 /* ExportSpecifier */:
-            case 267 /* ExportAssignment */:
-            case 261 /* ImportEqualsDeclaration */:
+            case 265 /* ImportClause */:
+            case 268 /* ImportSpecifier */:
+            case 266 /* NamespaceImport */:
+            case 273 /* ExportSpecifier */:
+            case 269 /* ExportAssignment */:
+            case 263 /* ImportEqualsDeclaration */:
                 return node.parent;
-            case 158 /* QualifiedName */:
+            case 159 /* QualifiedName */:
                 do {
                     node = node.parent;
-                } while (node.parent.kind === 158 /* QualifiedName */);
+                } while (node.parent.kind === 159 /* QualifiedName */);
                 return getAliasDeclarationFromName(node);
         }
     }
@@ -16348,7 +16740,7 @@
     }
     ts.getExportAssignmentExpression = getExportAssignmentExpression;
     function getPropertyAssignmentAliasLikeExpression(node) {
-        return node.kind === 290 /* ShorthandPropertyAssignment */ ? node.name : node.kind === 289 /* PropertyAssignment */ ? node.initializer :
+        return node.kind === 292 /* ShorthandPropertyAssignment */ ? node.name : node.kind === 291 /* PropertyAssignment */ ? node.initializer :
             node.parent.right;
     }
     ts.getPropertyAssignmentAliasLikeExpression = getPropertyAssignmentAliasLikeExpression;
@@ -16365,7 +16757,7 @@
     }
     ts.getEffectiveBaseTypeNode = getEffectiveBaseTypeNode;
     function getClassExtendsHeritageElement(node) {
-        var heritageClause = getHeritageClause(node.heritageClauses, 93 /* ExtendsKeyword */);
+        var heritageClause = getHeritageClause(node.heritageClauses, 94 /* ExtendsKeyword */);
         return heritageClause && heritageClause.types.length > 0 ? heritageClause.types[0] : undefined;
     }
     ts.getClassExtendsHeritageElement = getClassExtendsHeritageElement;
@@ -16374,7 +16766,7 @@
             return ts.getJSDocImplementsTags(node).map(function (n) { return n.class; });
         }
         else {
-            var heritageClause = getHeritageClause(node.heritageClauses, 116 /* ImplementsKeyword */);
+            var heritageClause = getHeritageClause(node.heritageClauses, 117 /* ImplementsKeyword */);
             return heritageClause === null || heritageClause === void 0 ? void 0 : heritageClause.types;
         }
     }
@@ -16387,7 +16779,7 @@
     }
     ts.getAllSuperTypeNodes = getAllSuperTypeNodes;
     function getInterfaceBaseTypeNodes(node) {
-        var heritageClause = getHeritageClause(node.heritageClauses, 93 /* ExtendsKeyword */);
+        var heritageClause = getHeritageClause(node.heritageClauses, 94 /* ExtendsKeyword */);
         return heritageClause ? heritageClause.types : undefined;
     }
     ts.getInterfaceBaseTypeNodes = getInterfaceBaseTypeNodes;
@@ -16414,11 +16806,11 @@
     }
     ts.getAncestor = getAncestor;
     function isKeyword(token) {
-        return 80 /* FirstKeyword */ <= token && token <= 157 /* LastKeyword */;
+        return 81 /* FirstKeyword */ <= token && token <= 158 /* LastKeyword */;
     }
     ts.isKeyword = isKeyword;
     function isContextualKeyword(token) {
-        return 125 /* FirstContextualKeyword */ <= token && token <= 157 /* LastContextualKeyword */;
+        return 126 /* FirstContextualKeyword */ <= token && token <= 158 /* LastContextualKeyword */;
     }
     ts.isContextualKeyword = isContextualKeyword;
     function isNonContextualKeyword(token) {
@@ -16426,7 +16818,7 @@
     }
     ts.isNonContextualKeyword = isNonContextualKeyword;
     function isFutureReservedKeyword(token) {
-        return 116 /* FirstFutureReservedWord */ <= token && token <= 124 /* LastFutureReservedWord */;
+        return 117 /* FirstFutureReservedWord */ <= token && token <= 125 /* LastFutureReservedWord */;
     }
     ts.isFutureReservedKeyword = isFutureReservedKeyword;
     function isStringANonContextualKeyword(name) {
@@ -16462,14 +16854,14 @@
         }
         var flags = 0 /* Normal */;
         switch (node.kind) {
-            case 252 /* FunctionDeclaration */:
-            case 209 /* FunctionExpression */:
-            case 166 /* MethodDeclaration */:
+            case 254 /* FunctionDeclaration */:
+            case 211 /* FunctionExpression */:
+            case 167 /* MethodDeclaration */:
                 if (node.asteriskToken) {
                     flags |= 1 /* Generator */;
                 }
             // falls through
-            case 210 /* ArrowFunction */:
+            case 212 /* ArrowFunction */:
                 if (hasSyntacticModifier(node, 256 /* Async */)) {
                     flags |= 2 /* Async */;
                 }
@@ -16483,10 +16875,10 @@
     ts.getFunctionFlags = getFunctionFlags;
     function isAsyncFunction(node) {
         switch (node.kind) {
-            case 252 /* FunctionDeclaration */:
-            case 209 /* FunctionExpression */:
-            case 210 /* ArrowFunction */:
-            case 166 /* MethodDeclaration */:
+            case 254 /* FunctionDeclaration */:
+            case 211 /* FunctionExpression */:
+            case 212 /* ArrowFunction */:
+            case 167 /* MethodDeclaration */:
                 return node.body !== undefined
                     && node.asteriskToken === undefined
                     && hasSyntacticModifier(node, 256 /* Async */);
@@ -16516,7 +16908,7 @@
     }
     ts.hasDynamicName = hasDynamicName;
     function isDynamicName(name) {
-        if (!(name.kind === 159 /* ComputedPropertyName */ || name.kind === 203 /* ElementAccessExpression */)) {
+        if (!(name.kind === 160 /* ComputedPropertyName */ || name.kind === 205 /* ElementAccessExpression */)) {
             return false;
         }
         var expr = ts.isElementAccessExpression(name) ? skipParentheses(name.argumentExpression) : name.expression;
@@ -16526,13 +16918,13 @@
     ts.isDynamicName = isDynamicName;
     function getPropertyNameForPropertyNameNode(name) {
         switch (name.kind) {
-            case 78 /* Identifier */:
-            case 79 /* PrivateIdentifier */:
+            case 79 /* Identifier */:
+            case 80 /* PrivateIdentifier */:
                 return name.escapedText;
             case 10 /* StringLiteral */:
             case 8 /* NumericLiteral */:
                 return ts.escapeLeadingUnderscores(name.text);
-            case 159 /* ComputedPropertyName */:
+            case 160 /* ComputedPropertyName */:
                 var nameExpression = name.expression;
                 if (isStringOrNumericLiteralLike(nameExpression)) {
                     return ts.escapeLeadingUnderscores(nameExpression.text);
@@ -16551,7 +16943,7 @@
     ts.getPropertyNameForPropertyNameNode = getPropertyNameForPropertyNameNode;
     function isPropertyNameLiteral(node) {
         switch (node.kind) {
-            case 78 /* Identifier */:
+            case 79 /* Identifier */:
             case 10 /* StringLiteral */:
             case 14 /* NoSubstitutionTemplateLiteral */:
             case 8 /* NumericLiteral */:
@@ -16581,11 +16973,15 @@
         return ts.startsWith(symbol.escapedName, "__@");
     }
     ts.isKnownSymbol = isKnownSymbol;
+    function isPrivateIdentifierSymbol(symbol) {
+        return ts.startsWith(symbol.escapedName, "__#");
+    }
+    ts.isPrivateIdentifierSymbol = isPrivateIdentifierSymbol;
     /**
      * Includes the word "Symbol" with unicode escapes
      */
     function isESSymbolIdentifier(node) {
-        return node.kind === 78 /* Identifier */ && node.escapedText === "Symbol";
+        return node.kind === 79 /* Identifier */ && node.escapedText === "Symbol";
     }
     ts.isESSymbolIdentifier = isESSymbolIdentifier;
     function isPushOrUnshiftIdentifier(node) {
@@ -16594,11 +16990,11 @@
     ts.isPushOrUnshiftIdentifier = isPushOrUnshiftIdentifier;
     function isParameterDeclaration(node) {
         var root = getRootDeclaration(node);
-        return root.kind === 161 /* Parameter */;
+        return root.kind === 162 /* Parameter */;
     }
     ts.isParameterDeclaration = isParameterDeclaration;
     function getRootDeclaration(node) {
-        while (node.kind === 199 /* BindingElement */) {
+        while (node.kind === 201 /* BindingElement */) {
             node = node.parent.parent;
         }
         return node;
@@ -16606,15 +17002,15 @@
     ts.getRootDeclaration = getRootDeclaration;
     function nodeStartsNewLexicalEnvironment(node) {
         var kind = node.kind;
-        return kind === 167 /* Constructor */
-            || kind === 209 /* FunctionExpression */
-            || kind === 252 /* FunctionDeclaration */
-            || kind === 210 /* ArrowFunction */
-            || kind === 166 /* MethodDeclaration */
-            || kind === 168 /* GetAccessor */
-            || kind === 169 /* SetAccessor */
-            || kind === 257 /* ModuleDeclaration */
-            || kind === 298 /* SourceFile */;
+        return kind === 169 /* Constructor */
+            || kind === 211 /* FunctionExpression */
+            || kind === 254 /* FunctionDeclaration */
+            || kind === 212 /* ArrowFunction */
+            || kind === 167 /* MethodDeclaration */
+            || kind === 170 /* GetAccessor */
+            || kind === 171 /* SetAccessor */
+            || kind === 259 /* ModuleDeclaration */
+            || kind === 300 /* SourceFile */;
     }
     ts.nodeStartsNewLexicalEnvironment = nodeStartsNewLexicalEnvironment;
     function nodeIsSynthesized(range) {
@@ -16633,41 +17029,41 @@
     })(Associativity = ts.Associativity || (ts.Associativity = {}));
     function getExpressionAssociativity(expression) {
         var operator = getOperator(expression);
-        var hasArguments = expression.kind === 205 /* NewExpression */ && expression.arguments !== undefined;
+        var hasArguments = expression.kind === 207 /* NewExpression */ && expression.arguments !== undefined;
         return getOperatorAssociativity(expression.kind, operator, hasArguments);
     }
     ts.getExpressionAssociativity = getExpressionAssociativity;
     function getOperatorAssociativity(kind, operator, hasArguments) {
         switch (kind) {
-            case 205 /* NewExpression */:
+            case 207 /* NewExpression */:
                 return hasArguments ? 0 /* Left */ : 1 /* Right */;
-            case 215 /* PrefixUnaryExpression */:
-            case 212 /* TypeOfExpression */:
-            case 213 /* VoidExpression */:
-            case 211 /* DeleteExpression */:
-            case 214 /* AwaitExpression */:
-            case 218 /* ConditionalExpression */:
-            case 220 /* YieldExpression */:
+            case 217 /* PrefixUnaryExpression */:
+            case 214 /* TypeOfExpression */:
+            case 215 /* VoidExpression */:
+            case 213 /* DeleteExpression */:
+            case 216 /* AwaitExpression */:
+            case 220 /* ConditionalExpression */:
+            case 222 /* YieldExpression */:
                 return 1 /* Right */;
-            case 217 /* BinaryExpression */:
+            case 219 /* BinaryExpression */:
                 switch (operator) {
                     case 42 /* AsteriskAsteriskToken */:
-                    case 62 /* EqualsToken */:
-                    case 63 /* PlusEqualsToken */:
-                    case 64 /* MinusEqualsToken */:
-                    case 66 /* AsteriskAsteriskEqualsToken */:
-                    case 65 /* AsteriskEqualsToken */:
-                    case 67 /* SlashEqualsToken */:
-                    case 68 /* PercentEqualsToken */:
-                    case 69 /* LessThanLessThanEqualsToken */:
-                    case 70 /* GreaterThanGreaterThanEqualsToken */:
-                    case 71 /* GreaterThanGreaterThanGreaterThanEqualsToken */:
-                    case 72 /* AmpersandEqualsToken */:
-                    case 77 /* CaretEqualsToken */:
-                    case 73 /* BarEqualsToken */:
-                    case 74 /* BarBarEqualsToken */:
-                    case 75 /* AmpersandAmpersandEqualsToken */:
-                    case 76 /* QuestionQuestionEqualsToken */:
+                    case 63 /* EqualsToken */:
+                    case 64 /* PlusEqualsToken */:
+                    case 65 /* MinusEqualsToken */:
+                    case 67 /* AsteriskAsteriskEqualsToken */:
+                    case 66 /* AsteriskEqualsToken */:
+                    case 68 /* SlashEqualsToken */:
+                    case 69 /* PercentEqualsToken */:
+                    case 70 /* LessThanLessThanEqualsToken */:
+                    case 71 /* GreaterThanGreaterThanEqualsToken */:
+                    case 72 /* GreaterThanGreaterThanGreaterThanEqualsToken */:
+                    case 73 /* AmpersandEqualsToken */:
+                    case 78 /* CaretEqualsToken */:
+                    case 74 /* BarEqualsToken */:
+                    case 75 /* BarBarEqualsToken */:
+                    case 76 /* AmpersandAmpersandEqualsToken */:
+                    case 77 /* QuestionQuestionEqualsToken */:
                         return 1 /* Right */;
                 }
         }
@@ -16676,15 +17072,15 @@
     ts.getOperatorAssociativity = getOperatorAssociativity;
     function getExpressionPrecedence(expression) {
         var operator = getOperator(expression);
-        var hasArguments = expression.kind === 205 /* NewExpression */ && expression.arguments !== undefined;
+        var hasArguments = expression.kind === 207 /* NewExpression */ && expression.arguments !== undefined;
         return getOperatorPrecedence(expression.kind, operator, hasArguments);
     }
     ts.getExpressionPrecedence = getExpressionPrecedence;
     function getOperator(expression) {
-        if (expression.kind === 217 /* BinaryExpression */) {
+        if (expression.kind === 219 /* BinaryExpression */) {
             return expression.operatorToken.kind;
         }
-        else if (expression.kind === 215 /* PrefixUnaryExpression */ || expression.kind === 216 /* PostfixUnaryExpression */) {
+        else if (expression.kind === 217 /* PrefixUnaryExpression */ || expression.kind === 218 /* PostfixUnaryExpression */) {
             return expression.operator;
         }
         else {
@@ -16863,82 +17259,82 @@
     })(OperatorPrecedence = ts.OperatorPrecedence || (ts.OperatorPrecedence = {}));
     function getOperatorPrecedence(nodeKind, operatorKind, hasArguments) {
         switch (nodeKind) {
-            case 341 /* CommaListExpression */:
+            case 346 /* CommaListExpression */:
                 return 0 /* Comma */;
-            case 221 /* SpreadElement */:
+            case 223 /* SpreadElement */:
                 return 1 /* Spread */;
-            case 220 /* YieldExpression */:
+            case 222 /* YieldExpression */:
                 return 2 /* Yield */;
-            case 218 /* ConditionalExpression */:
+            case 220 /* ConditionalExpression */:
                 return 4 /* Conditional */;
-            case 217 /* BinaryExpression */:
+            case 219 /* BinaryExpression */:
                 switch (operatorKind) {
                     case 27 /* CommaToken */:
                         return 0 /* Comma */;
-                    case 62 /* EqualsToken */:
-                    case 63 /* PlusEqualsToken */:
-                    case 64 /* MinusEqualsToken */:
-                    case 66 /* AsteriskAsteriskEqualsToken */:
-                    case 65 /* AsteriskEqualsToken */:
-                    case 67 /* SlashEqualsToken */:
-                    case 68 /* PercentEqualsToken */:
-                    case 69 /* LessThanLessThanEqualsToken */:
-                    case 70 /* GreaterThanGreaterThanEqualsToken */:
-                    case 71 /* GreaterThanGreaterThanGreaterThanEqualsToken */:
-                    case 72 /* AmpersandEqualsToken */:
-                    case 77 /* CaretEqualsToken */:
-                    case 73 /* BarEqualsToken */:
-                    case 74 /* BarBarEqualsToken */:
-                    case 75 /* AmpersandAmpersandEqualsToken */:
-                    case 76 /* QuestionQuestionEqualsToken */:
+                    case 63 /* EqualsToken */:
+                    case 64 /* PlusEqualsToken */:
+                    case 65 /* MinusEqualsToken */:
+                    case 67 /* AsteriskAsteriskEqualsToken */:
+                    case 66 /* AsteriskEqualsToken */:
+                    case 68 /* SlashEqualsToken */:
+                    case 69 /* PercentEqualsToken */:
+                    case 70 /* LessThanLessThanEqualsToken */:
+                    case 71 /* GreaterThanGreaterThanEqualsToken */:
+                    case 72 /* GreaterThanGreaterThanGreaterThanEqualsToken */:
+                    case 73 /* AmpersandEqualsToken */:
+                    case 78 /* CaretEqualsToken */:
+                    case 74 /* BarEqualsToken */:
+                    case 75 /* BarBarEqualsToken */:
+                    case 76 /* AmpersandAmpersandEqualsToken */:
+                    case 77 /* QuestionQuestionEqualsToken */:
                         return 3 /* Assignment */;
                     default:
                         return getBinaryOperatorPrecedence(operatorKind);
                 }
             // TODO: Should prefix `++` and `--` be moved to the `Update` precedence?
-            case 207 /* TypeAssertionExpression */:
-            case 226 /* NonNullExpression */:
-            case 215 /* PrefixUnaryExpression */:
-            case 212 /* TypeOfExpression */:
-            case 213 /* VoidExpression */:
-            case 211 /* DeleteExpression */:
-            case 214 /* AwaitExpression */:
+            case 209 /* TypeAssertionExpression */:
+            case 228 /* NonNullExpression */:
+            case 217 /* PrefixUnaryExpression */:
+            case 214 /* TypeOfExpression */:
+            case 215 /* VoidExpression */:
+            case 213 /* DeleteExpression */:
+            case 216 /* AwaitExpression */:
                 return 16 /* Unary */;
-            case 216 /* PostfixUnaryExpression */:
+            case 218 /* PostfixUnaryExpression */:
                 return 17 /* Update */;
-            case 204 /* CallExpression */:
+            case 206 /* CallExpression */:
                 return 18 /* LeftHandSide */;
-            case 205 /* NewExpression */:
+            case 207 /* NewExpression */:
                 return hasArguments ? 19 /* Member */ : 18 /* LeftHandSide */;
-            case 206 /* TaggedTemplateExpression */:
-            case 202 /* PropertyAccessExpression */:
-            case 203 /* ElementAccessExpression */:
-            case 227 /* MetaProperty */:
+            case 208 /* TaggedTemplateExpression */:
+            case 204 /* PropertyAccessExpression */:
+            case 205 /* ElementAccessExpression */:
+            case 229 /* MetaProperty */:
                 return 19 /* Member */;
-            case 225 /* AsExpression */:
+            case 227 /* AsExpression */:
                 return 11 /* Relational */;
-            case 107 /* ThisKeyword */:
-            case 105 /* SuperKeyword */:
-            case 78 /* Identifier */:
-            case 103 /* NullKeyword */:
-            case 109 /* TrueKeyword */:
-            case 94 /* FalseKeyword */:
+            case 108 /* ThisKeyword */:
+            case 106 /* SuperKeyword */:
+            case 79 /* Identifier */:
+            case 104 /* NullKeyword */:
+            case 110 /* TrueKeyword */:
+            case 95 /* FalseKeyword */:
             case 8 /* NumericLiteral */:
             case 9 /* BigIntLiteral */:
             case 10 /* StringLiteral */:
-            case 200 /* ArrayLiteralExpression */:
-            case 201 /* ObjectLiteralExpression */:
-            case 209 /* FunctionExpression */:
-            case 210 /* ArrowFunction */:
-            case 222 /* ClassExpression */:
+            case 202 /* ArrayLiteralExpression */:
+            case 203 /* ObjectLiteralExpression */:
+            case 211 /* FunctionExpression */:
+            case 212 /* ArrowFunction */:
+            case 224 /* ClassExpression */:
             case 13 /* RegularExpressionLiteral */:
             case 14 /* NoSubstitutionTemplateLiteral */:
-            case 219 /* TemplateExpression */:
-            case 208 /* ParenthesizedExpression */:
-            case 223 /* OmittedExpression */:
-            case 274 /* JsxElement */:
-            case 275 /* JsxSelfClosingElement */:
-            case 278 /* JsxFragment */:
+            case 221 /* TemplateExpression */:
+            case 210 /* ParenthesizedExpression */:
+            case 225 /* OmittedExpression */:
+            case 276 /* JsxElement */:
+            case 277 /* JsxSelfClosingElement */:
+            case 280 /* JsxFragment */:
                 return 20 /* Primary */;
             default:
                 return -1 /* Invalid */;
@@ -16968,9 +17364,9 @@
             case 31 /* GreaterThanToken */:
             case 32 /* LessThanEqualsToken */:
             case 33 /* GreaterThanEqualsToken */:
-            case 101 /* InstanceOfKeyword */:
-            case 100 /* InKeyword */:
-            case 126 /* AsKeyword */:
+            case 102 /* InstanceOfKeyword */:
+            case 101 /* InKeyword */:
+            case 127 /* AsKeyword */:
                 return 11 /* Relational */;
             case 47 /* LessThanLessThanToken */:
             case 48 /* GreaterThanGreaterThanToken */:
@@ -16994,7 +17390,7 @@
     function getSemanticJsxChildren(children) {
         return ts.filter(children, function (i) {
             switch (i.kind) {
-                case 284 /* JsxExpression */:
+                case 286 /* JsxExpression */:
                     return !!i.expression;
                 case 11 /* JsxText */:
                     return !i.containsOnlyTriviaWhiteSpaces;
@@ -17087,8 +17483,8 @@
     // There is no reason for this other than that JSON.stringify does not handle it either.
     var doubleQuoteEscapedCharsRegExp = /[\\\"\u0000-\u001f\t\v\f\b\r\n\u2028\u2029\u0085]/g;
     var singleQuoteEscapedCharsRegExp = /[\\\'\u0000-\u001f\t\v\f\b\r\n\u2028\u2029\u0085]/g;
-    // Template strings should be preserved as much as possible
-    var backtickQuoteEscapedCharsRegExp = /[\\`]/g;
+    // Template strings preserve simple LF newlines, still encode CRLF (or CR)
+    var backtickQuoteEscapedCharsRegExp = /\r\n|[\\\`\u0000-\u001f\t\v\f\b\r\u2028\u2029\u0085]/g;
     var escapedCharsMap = new ts.Map(ts.getEntries({
         "\t": "\\t",
         "\v": "\\v",
@@ -17102,7 +17498,8 @@
         "\`": "\\\`",
         "\u2028": "\\u2028",
         "\u2029": "\\u2029",
-        "\u0085": "\\u0085" // nextLine
+        "\u0085": "\\u0085",
+        "\r\n": "\\r\\n", // special case for CRLFs in backticks
     }));
     function encodeUtf16EscapeSequence(charCode) {
         var hexCharCode = charCode.toString(16).toUpperCase();
@@ -17296,7 +17693,7 @@
             reportInaccessibleThisError: ts.noop,
             reportPrivateInBaseOfClassExpression: ts.noop,
             reportInaccessibleUniqueSymbolError: ts.noop,
-            trackSymbol: ts.noop,
+            trackSymbol: function () { return false; },
             writeKeyword: write,
             writeOperator: write,
             writeParameter: write,
@@ -17553,11 +17950,21 @@
     }
     ts.parameterIsThisKeyword = parameterIsThisKeyword;
     function isThisIdentifier(node) {
-        return !!node && node.kind === 78 /* Identifier */ && identifierIsThisKeyword(node);
+        return !!node && node.kind === 79 /* Identifier */ && identifierIsThisKeyword(node);
     }
     ts.isThisIdentifier = isThisIdentifier;
+    function isThisInTypeQuery(node) {
+        if (!isThisIdentifier(node)) {
+            return false;
+        }
+        while (ts.isQualifiedName(node.parent) && node.parent.left === node) {
+            node = node.parent;
+        }
+        return node.parent.kind === 179 /* TypeQuery */;
+    }
+    ts.isThisInTypeQuery = isThisInTypeQuery;
     function identifierIsThisKeyword(id) {
-        return id.originalKeywordKind === 107 /* ThisKeyword */;
+        return id.originalKeywordKind === 108 /* ThisKeyword */;
     }
     ts.identifierIsThisKeyword = identifierIsThisKeyword;
     function getAllAccessorDeclarations(declarations, accessor) {
@@ -17568,10 +17975,10 @@
         var setAccessor;
         if (hasDynamicName(accessor)) {
             firstAccessor = accessor;
-            if (accessor.kind === 168 /* GetAccessor */) {
+            if (accessor.kind === 170 /* GetAccessor */) {
                 getAccessor = accessor;
             }
-            else if (accessor.kind === 169 /* SetAccessor */) {
+            else if (accessor.kind === 171 /* SetAccessor */) {
                 setAccessor = accessor;
             }
             else {
@@ -17581,7 +17988,7 @@
         else {
             ts.forEach(declarations, function (member) {
                 if (ts.isAccessor(member)
-                    && hasSyntacticModifier(member, 32 /* Static */) === hasSyntacticModifier(accessor, 32 /* Static */)) {
+                    && isStatic(member) === isStatic(accessor)) {
                     var memberName = getPropertyNameForPropertyNameNode(member.name);
                     var accessorName = getPropertyNameForPropertyNameNode(accessor.name);
                     if (memberName === accessorName) {
@@ -17591,10 +17998,10 @@
                         else if (!secondAccessor) {
                             secondAccessor = member;
                         }
-                        if (member.kind === 168 /* GetAccessor */ && !getAccessor) {
+                        if (member.kind === 170 /* GetAccessor */ && !getAccessor) {
                             getAccessor = member;
                         }
-                        if (member.kind === 169 /* SetAccessor */ && !setAccessor) {
+                        if (member.kind === 171 /* SetAccessor */ && !setAccessor) {
                             setAccessor = member;
                         }
                     }
@@ -17643,7 +18050,7 @@
     ts.getJSDocTypeParameterDeclarations = getJSDocTypeParameterDeclarations;
     /** template tags are only available when a typedef isn't already using them */
     function isNonTypeAliasTemplate(tag) {
-        return ts.isJSDocTemplateTag(tag) && !(tag.parent.kind === 312 /* JSDocComment */ && tag.parent.tags.some(isJSDocTypeAlias));
+        return ts.isJSDocTemplateTag(tag) && !(tag.parent.kind === 315 /* JSDocComment */ && tag.parent.tags.some(isJSDocTypeAlias));
     }
     /**
      * Gets the effective type annotation of the value parameter of a set accessor. If the node
@@ -17819,7 +18226,7 @@
     ts.writeCommentRange = writeCommentRange;
     function writeTrimmedCurrentLine(text, commentEnd, writer, newLine, pos, nextLineStart) {
         var end = Math.min(commentEnd, nextLineStart - 1);
-        var currentLineText = text.substring(pos, end).replace(/^\s+|\s+$/g, "");
+        var currentLineText = ts.trimString(text.substring(pos, end));
         if (currentLineText) {
             // trimmed forward and ending spaces text
             writer.writeComment(currentLineText);
@@ -17862,6 +18269,11 @@
         return !!getSelectedSyntacticModifierFlags(node, flags);
     }
     ts.hasSyntacticModifier = hasSyntacticModifier;
+    function isStatic(node) {
+        // https://tc39.es/ecma262/#sec-static-semantics-isstatic
+        return ts.isClassElement(node) && hasStaticModifier(node) || ts.isClassStaticBlockDeclaration(node);
+    }
+    ts.isStatic = isStatic;
     function hasStaticModifier(node) {
         return hasSyntacticModifier(node, 32 /* Static */);
     }
@@ -17891,7 +18303,7 @@
     }
     ts.getSelectedSyntacticModifierFlags = getSelectedSyntacticModifierFlags;
     function getModifierFlagsWorker(node, includeJSDoc, alwaysIncludeJSDoc) {
-        if (node.kind >= 0 /* FirstToken */ && node.kind <= 157 /* LastToken */) {
+        if (node.kind >= 0 /* FirstToken */ && node.kind <= 158 /* LastToken */) {
             return 0 /* None */;
         }
         if (!(node.modifierFlagsCache & 536870912 /* HasComputedFlags */)) {
@@ -17960,7 +18372,7 @@
      */
     function getSyntacticModifierFlagsNoCache(node) {
         var flags = modifiersToFlags(node.modifiers);
-        if (node.flags & 4 /* NestedNamespace */ || (node.kind === 78 /* Identifier */ && node.isInJSDocNamespace)) {
+        if (node.flags & 4 /* NestedNamespace */ || (node.kind === 79 /* Identifier */ && node.isInJSDocNamespace)) {
             flags |= 1 /* Export */;
         }
         return flags;
@@ -17979,18 +18391,18 @@
     ts.modifiersToFlags = modifiersToFlags;
     function modifierToFlag(token) {
         switch (token) {
-            case 123 /* StaticKeyword */: return 32 /* Static */;
-            case 122 /* PublicKeyword */: return 4 /* Public */;
-            case 121 /* ProtectedKeyword */: return 16 /* Protected */;
-            case 120 /* PrivateKeyword */: return 8 /* Private */;
-            case 125 /* AbstractKeyword */: return 128 /* Abstract */;
-            case 92 /* ExportKeyword */: return 1 /* Export */;
-            case 133 /* DeclareKeyword */: return 2 /* Ambient */;
-            case 84 /* ConstKeyword */: return 2048 /* Const */;
-            case 87 /* DefaultKeyword */: return 512 /* Default */;
-            case 129 /* AsyncKeyword */: return 256 /* Async */;
-            case 142 /* ReadonlyKeyword */: return 64 /* Readonly */;
-            case 156 /* OverrideKeyword */: return 16384 /* Override */;
+            case 124 /* StaticKeyword */: return 32 /* Static */;
+            case 123 /* PublicKeyword */: return 4 /* Public */;
+            case 122 /* ProtectedKeyword */: return 16 /* Protected */;
+            case 121 /* PrivateKeyword */: return 8 /* Private */;
+            case 126 /* AbstractKeyword */: return 128 /* Abstract */;
+            case 93 /* ExportKeyword */: return 1 /* Export */;
+            case 134 /* DeclareKeyword */: return 2 /* Ambient */;
+            case 85 /* ConstKeyword */: return 2048 /* Const */;
+            case 88 /* DefaultKeyword */: return 512 /* Default */;
+            case 130 /* AsyncKeyword */: return 256 /* Async */;
+            case 143 /* ReadonlyKeyword */: return 64 /* Readonly */;
+            case 157 /* OverrideKeyword */: return 16384 /* Override */;
         }
         return 0 /* None */;
     }
@@ -18006,9 +18418,9 @@
     }
     ts.isLogicalOperator = isLogicalOperator;
     function isLogicalOrCoalescingAssignmentOperator(token) {
-        return token === 74 /* BarBarEqualsToken */
-            || token === 75 /* AmpersandAmpersandEqualsToken */
-            || token === 76 /* QuestionQuestionEqualsToken */;
+        return token === 75 /* BarBarEqualsToken */
+            || token === 76 /* AmpersandAmpersandEqualsToken */
+            || token === 77 /* QuestionQuestionEqualsToken */;
     }
     ts.isLogicalOrCoalescingAssignmentOperator = isLogicalOrCoalescingAssignmentOperator;
     function isLogicalOrCoalescingAssignmentExpression(expr) {
@@ -18016,7 +18428,7 @@
     }
     ts.isLogicalOrCoalescingAssignmentExpression = isLogicalOrCoalescingAssignmentExpression;
     function isAssignmentOperator(token) {
-        return token >= 62 /* FirstAssignment */ && token <= 77 /* LastAssignment */;
+        return token >= 63 /* FirstAssignment */ && token <= 78 /* LastAssignment */;
     }
     ts.isAssignmentOperator = isAssignmentOperator;
     /** Get `C` given `N` if `N` is in the position `class C extends N` where `N` is an ExpressionWithTypeArguments. */
@@ -18029,14 +18441,14 @@
         return ts.isExpressionWithTypeArguments(node)
             && ts.isHeritageClause(node.parent)
             && ts.isClassLike(node.parent.parent)
-            ? { class: node.parent.parent, isImplements: node.parent.token === 116 /* ImplementsKeyword */ }
+            ? { class: node.parent.parent, isImplements: node.parent.token === 117 /* ImplementsKeyword */ }
             : undefined;
     }
     ts.tryGetClassImplementingOrExtendingExpressionWithTypeArguments = tryGetClassImplementingOrExtendingExpressionWithTypeArguments;
     function isAssignmentExpression(node, excludeCompoundAssignment) {
         return ts.isBinaryExpression(node)
             && (excludeCompoundAssignment
-                ? node.operatorToken.kind === 62 /* EqualsToken */
+                ? node.operatorToken.kind === 63 /* EqualsToken */
                 : isAssignmentOperator(node.operatorToken.kind))
             && ts.isLeftHandSideExpression(node.left);
     }
@@ -18048,8 +18460,8 @@
     function isDestructuringAssignment(node) {
         if (isAssignmentExpression(node, /*excludeCompoundAssignment*/ true)) {
             var kind = node.left.kind;
-            return kind === 201 /* ObjectLiteralExpression */
-                || kind === 200 /* ArrayLiteralExpression */;
+            return kind === 203 /* ObjectLiteralExpression */
+                || kind === 202 /* ArrayLiteralExpression */;
         }
         return false;
     }
@@ -18059,33 +18471,33 @@
     }
     ts.isExpressionWithTypeArgumentsInClassExtendsClause = isExpressionWithTypeArgumentsInClassExtendsClause;
     function isEntityNameExpression(node) {
-        return node.kind === 78 /* Identifier */ || isPropertyAccessEntityNameExpression(node);
+        return node.kind === 79 /* Identifier */ || isPropertyAccessEntityNameExpression(node);
     }
     ts.isEntityNameExpression = isEntityNameExpression;
     function getFirstIdentifier(node) {
         switch (node.kind) {
-            case 78 /* Identifier */:
+            case 79 /* Identifier */:
                 return node;
-            case 158 /* QualifiedName */:
+            case 159 /* QualifiedName */:
                 do {
                     node = node.left;
-                } while (node.kind !== 78 /* Identifier */);
+                } while (node.kind !== 79 /* Identifier */);
                 return node;
-            case 202 /* PropertyAccessExpression */:
+            case 204 /* PropertyAccessExpression */:
                 do {
                     node = node.expression;
-                } while (node.kind !== 78 /* Identifier */);
+                } while (node.kind !== 79 /* Identifier */);
                 return node;
         }
     }
     ts.getFirstIdentifier = getFirstIdentifier;
     function isDottedName(node) {
-        return node.kind === 78 /* Identifier */
-            || node.kind === 107 /* ThisKeyword */
-            || node.kind === 105 /* SuperKeyword */
-            || node.kind === 227 /* MetaProperty */
-            || node.kind === 202 /* PropertyAccessExpression */ && isDottedName(node.expression)
-            || node.kind === 208 /* ParenthesizedExpression */ && isDottedName(node.expression);
+        return node.kind === 79 /* Identifier */
+            || node.kind === 108 /* ThisKeyword */
+            || node.kind === 106 /* SuperKeyword */
+            || node.kind === 229 /* MetaProperty */
+            || node.kind === 204 /* PropertyAccessExpression */ && isDottedName(node.expression)
+            || node.kind === 210 /* ParenthesizedExpression */ && isDottedName(node.expression);
     }
     ts.isDottedName = isDottedName;
     function isPropertyAccessEntityNameExpression(node) {
@@ -18116,17 +18528,23 @@
     }
     ts.isPrototypeAccess = isPrototypeAccess;
     function isRightSideOfQualifiedNameOrPropertyAccess(node) {
-        return (node.parent.kind === 158 /* QualifiedName */ && node.parent.right === node) ||
-            (node.parent.kind === 202 /* PropertyAccessExpression */ && node.parent.name === node);
+        return (node.parent.kind === 159 /* QualifiedName */ && node.parent.right === node) ||
+            (node.parent.kind === 204 /* PropertyAccessExpression */ && node.parent.name === node);
     }
     ts.isRightSideOfQualifiedNameOrPropertyAccess = isRightSideOfQualifiedNameOrPropertyAccess;
+    function isRightSideOfQualifiedNameOrPropertyAccessOrJSDocMemberName(node) {
+        return ts.isQualifiedName(node.parent) && node.parent.right === node
+            || ts.isPropertyAccessExpression(node.parent) && node.parent.name === node
+            || ts.isJSDocMemberName(node.parent) && node.parent.right === node;
+    }
+    ts.isRightSideOfQualifiedNameOrPropertyAccessOrJSDocMemberName = isRightSideOfQualifiedNameOrPropertyAccessOrJSDocMemberName;
     function isEmptyObjectLiteral(expression) {
-        return expression.kind === 201 /* ObjectLiteralExpression */ &&
+        return expression.kind === 203 /* ObjectLiteralExpression */ &&
             expression.properties.length === 0;
     }
     ts.isEmptyObjectLiteral = isEmptyObjectLiteral;
     function isEmptyArrayLiteral(expression) {
-        return expression.kind === 200 /* ArrayLiteralExpression */ &&
+        return expression.kind === 202 /* ArrayLiteralExpression */ &&
             expression.elements.length === 0;
     }
     ts.isEmptyArrayLiteral = isEmptyArrayLiteral;
@@ -18458,8 +18876,8 @@
         var parseNode = ts.getParseTreeNode(node);
         if (parseNode) {
             switch (parseNode.parent.kind) {
-                case 256 /* EnumDeclaration */:
-                case 257 /* ModuleDeclaration */:
+                case 258 /* EnumDeclaration */:
+                case 259 /* ModuleDeclaration */:
                     return parseNode === parseNode.parent.name;
             }
         }
@@ -18489,7 +18907,7 @@
     function getDeclarationModifierFlagsFromSymbol(s, isWrite) {
         if (isWrite === void 0) { isWrite = false; }
         if (s.valueDeclaration) {
-            var declaration = (isWrite && s.declarations && ts.find(s.declarations, function (d) { return d.kind === 169 /* SetAccessor */; })) || s.valueDeclaration;
+            var declaration = (isWrite && s.declarations && ts.find(s.declarations, function (d) { return d.kind === 171 /* SetAccessor */; })) || s.valueDeclaration;
             var flags = ts.getCombinedModifierFlags(declaration);
             return s.parent && s.parent.flags & 32 /* Class */ ? flags : flags & ~28 /* AccessibilityModifier */;
         }
@@ -18538,35 +18956,35 @@
         if (!parent)
             return 0 /* Read */;
         switch (parent.kind) {
-            case 208 /* ParenthesizedExpression */:
+            case 210 /* ParenthesizedExpression */:
                 return accessKind(parent);
-            case 216 /* PostfixUnaryExpression */:
-            case 215 /* PrefixUnaryExpression */:
+            case 218 /* PostfixUnaryExpression */:
+            case 217 /* PrefixUnaryExpression */:
                 var operator = parent.operator;
                 return operator === 45 /* PlusPlusToken */ || operator === 46 /* MinusMinusToken */ ? writeOrReadWrite() : 0 /* Read */;
-            case 217 /* BinaryExpression */:
+            case 219 /* BinaryExpression */:
                 var _a = parent, left = _a.left, operatorToken = _a.operatorToken;
                 return left === node && isAssignmentOperator(operatorToken.kind) ?
-                    operatorToken.kind === 62 /* EqualsToken */ ? 1 /* Write */ : writeOrReadWrite()
+                    operatorToken.kind === 63 /* EqualsToken */ ? 1 /* Write */ : writeOrReadWrite()
                     : 0 /* Read */;
-            case 202 /* PropertyAccessExpression */:
+            case 204 /* PropertyAccessExpression */:
                 return parent.name !== node ? 0 /* Read */ : accessKind(parent);
-            case 289 /* PropertyAssignment */: {
+            case 291 /* PropertyAssignment */: {
                 var parentAccess = accessKind(parent.parent);
                 // In `({ x: varname }) = { x: 1 }`, the left `x` is a read, the right `x` is a write.
                 return node === parent.name ? reverseAccessKind(parentAccess) : parentAccess;
             }
-            case 290 /* ShorthandPropertyAssignment */:
+            case 292 /* ShorthandPropertyAssignment */:
                 // Assume it's the local variable being accessed, since we don't check public properties for --noUnusedLocals.
                 return node === parent.objectAssignmentInitializer ? 0 /* Read */ : accessKind(parent.parent);
-            case 200 /* ArrayLiteralExpression */:
+            case 202 /* ArrayLiteralExpression */:
                 return accessKind(parent);
             default:
                 return 0 /* Read */;
         }
         function writeOrReadWrite() {
             // If grandparent is not an ExpressionStatement, this is used as an expression in addition to having a side effect.
-            return parent.parent && skipParenthesesUp(parent.parent).kind === 234 /* ExpressionStatement */ ? 1 /* Write */ : 2 /* ReadWrite */;
+            return parent.parent && walkUpParenthesizedExpressions(parent.parent).kind === 236 /* ExpressionStatement */ ? 1 /* Write */ : 2 /* ReadWrite */;
         }
     }
     function reverseAccessKind(a) {
@@ -18710,37 +19128,37 @@
     }
     ts.isObjectTypeDeclaration = isObjectTypeDeclaration;
     function isTypeNodeKind(kind) {
-        return (kind >= 173 /* FirstTypeNode */ && kind <= 196 /* LastTypeNode */)
-            || kind === 128 /* AnyKeyword */
-            || kind === 152 /* UnknownKeyword */
-            || kind === 144 /* NumberKeyword */
-            || kind === 155 /* BigIntKeyword */
-            || kind === 145 /* ObjectKeyword */
-            || kind === 131 /* BooleanKeyword */
-            || kind === 147 /* StringKeyword */
-            || kind === 148 /* SymbolKeyword */
-            || kind === 113 /* VoidKeyword */
-            || kind === 150 /* UndefinedKeyword */
-            || kind === 141 /* NeverKeyword */
-            || kind === 224 /* ExpressionWithTypeArguments */
-            || kind === 304 /* JSDocAllType */
-            || kind === 305 /* JSDocUnknownType */
-            || kind === 306 /* JSDocNullableType */
-            || kind === 307 /* JSDocNonNullableType */
-            || kind === 308 /* JSDocOptionalType */
-            || kind === 309 /* JSDocFunctionType */
-            || kind === 310 /* JSDocVariadicType */;
+        return (kind >= 175 /* FirstTypeNode */ && kind <= 198 /* LastTypeNode */)
+            || kind === 129 /* AnyKeyword */
+            || kind === 153 /* UnknownKeyword */
+            || kind === 145 /* NumberKeyword */
+            || kind === 156 /* BigIntKeyword */
+            || kind === 146 /* ObjectKeyword */
+            || kind === 132 /* BooleanKeyword */
+            || kind === 148 /* StringKeyword */
+            || kind === 149 /* SymbolKeyword */
+            || kind === 114 /* VoidKeyword */
+            || kind === 151 /* UndefinedKeyword */
+            || kind === 142 /* NeverKeyword */
+            || kind === 226 /* ExpressionWithTypeArguments */
+            || kind === 307 /* JSDocAllType */
+            || kind === 308 /* JSDocUnknownType */
+            || kind === 309 /* JSDocNullableType */
+            || kind === 310 /* JSDocNonNullableType */
+            || kind === 311 /* JSDocOptionalType */
+            || kind === 312 /* JSDocFunctionType */
+            || kind === 313 /* JSDocVariadicType */;
     }
     ts.isTypeNodeKind = isTypeNodeKind;
     function isAccessExpression(node) {
-        return node.kind === 202 /* PropertyAccessExpression */ || node.kind === 203 /* ElementAccessExpression */;
+        return node.kind === 204 /* PropertyAccessExpression */ || node.kind === 205 /* ElementAccessExpression */;
     }
     ts.isAccessExpression = isAccessExpression;
     function getNameOfAccessExpression(node) {
-        if (node.kind === 202 /* PropertyAccessExpression */) {
+        if (node.kind === 204 /* PropertyAccessExpression */) {
             return node.name;
         }
-        ts.Debug.assert(node.kind === 203 /* ElementAccessExpression */);
+        ts.Debug.assert(node.kind === 205 /* ElementAccessExpression */);
         return node.argumentExpression;
     }
     ts.getNameOfAccessExpression = getNameOfAccessExpression;
@@ -18755,7 +19173,7 @@
     }
     ts.isBundleFileTextLike = isBundleFileTextLike;
     function isNamedImportsOrExports(node) {
-        return node.kind === 265 /* NamedImports */ || node.kind === 269 /* NamedExports */;
+        return node.kind === 267 /* NamedImports */ || node.kind === 271 /* NamedExports */;
     }
     ts.isNamedImportsOrExports = isNamedImportsOrExports;
     function getLeftmostAccessExpression(expr) {
@@ -18768,28 +19186,28 @@
     function getLeftmostExpression(node, stopAtCallExpressions) {
         while (true) {
             switch (node.kind) {
-                case 216 /* PostfixUnaryExpression */:
+                case 218 /* PostfixUnaryExpression */:
                     node = node.operand;
                     continue;
-                case 217 /* BinaryExpression */:
+                case 219 /* BinaryExpression */:
                     node = node.left;
                     continue;
-                case 218 /* ConditionalExpression */:
+                case 220 /* ConditionalExpression */:
                     node = node.condition;
                     continue;
-                case 206 /* TaggedTemplateExpression */:
+                case 208 /* TaggedTemplateExpression */:
                     node = node.tag;
                     continue;
-                case 204 /* CallExpression */:
+                case 206 /* CallExpression */:
                     if (stopAtCallExpressions) {
                         return node;
                     }
                 // falls through
-                case 225 /* AsExpression */:
-                case 203 /* ElementAccessExpression */:
-                case 202 /* PropertyAccessExpression */:
-                case 226 /* NonNullExpression */:
-                case 340 /* PartiallyEmittedExpression */:
+                case 227 /* AsExpression */:
+                case 205 /* ElementAccessExpression */:
+                case 204 /* PropertyAccessExpression */:
+                case 228 /* NonNullExpression */:
+                case 345 /* PartiallyEmittedExpression */:
                     node = node.expression;
                     continue;
             }
@@ -19173,13 +19591,11 @@
     }
     ts.getUseDefineForClassFields = getUseDefineForClassFields;
     function compilerOptionsAffectSemanticDiagnostics(newOptions, oldOptions) {
-        return oldOptions !== newOptions &&
-            ts.semanticDiagnosticsOptionDeclarations.some(function (option) { return !isJsonEqual(getCompilerOptionValue(oldOptions, option), getCompilerOptionValue(newOptions, option)); });
+        return optionsHaveChanges(oldOptions, newOptions, ts.semanticDiagnosticsOptionDeclarations);
     }
     ts.compilerOptionsAffectSemanticDiagnostics = compilerOptionsAffectSemanticDiagnostics;
     function compilerOptionsAffectEmit(newOptions, oldOptions) {
-        return oldOptions !== newOptions &&
-            ts.affectsEmitOptionDeclarations.some(function (option) { return !isJsonEqual(getCompilerOptionValue(oldOptions, option), getCompilerOptionValue(newOptions, option)); });
+        return optionsHaveChanges(oldOptions, newOptions, ts.affectsEmitOptionDeclarations);
     }
     ts.compilerOptionsAffectEmit = compilerOptionsAffectEmit;
     function getCompilerOptionValue(options, option) {
@@ -19226,6 +19642,7 @@
         var symlinkedDirectories;
         var symlinkedDirectoriesByRealpath;
         var symlinkedFiles;
+        var hasProcessedResolutions = false;
         return {
             getSymlinkedFiles: function () { return symlinkedFiles; },
             getSymlinkedDirectories: function () { return symlinkedDirectories; },
@@ -19254,30 +19671,31 @@
                     });
                 }
             },
+            setSymlinksFromResolutions: function (files, typeReferenceDirectives) {
+                var _this = this;
+                var _a;
+                ts.Debug.assert(!hasProcessedResolutions);
+                hasProcessedResolutions = true;
+                for (var _i = 0, files_1 = files; _i < files_1.length; _i++) {
+                    var file = files_1[_i];
+                    (_a = file.resolvedModules) === null || _a === void 0 ? void 0 : _a.forEach(function (resolution) { return processResolution(_this, resolution); });
+                }
+                typeReferenceDirectives === null || typeReferenceDirectives === void 0 ? void 0 : typeReferenceDirectives.forEach(function (resolution) { return processResolution(_this, resolution); });
+            },
+            hasProcessedResolutions: function () { return hasProcessedResolutions; },
         };
-    }
-    ts.createSymlinkCache = createSymlinkCache;
-    function discoverProbableSymlinks(files, getCanonicalFileName, cwd) {
-        var cache = createSymlinkCache(cwd, getCanonicalFileName);
-        var symlinks = ts.flatMap(files, function (sf) {
-            var pairs = sf.resolvedModules && ts.arrayFrom(ts.mapDefinedIterator(sf.resolvedModules.values(), function (res) {
-                return (res === null || res === void 0 ? void 0 : res.originalPath) ? [res.resolvedFileName, res.originalPath] : undefined;
-            }));
-            return ts.concatenate(pairs, sf.resolvedTypeReferenceDirectiveNames && ts.arrayFrom(ts.mapDefinedIterator(sf.resolvedTypeReferenceDirectiveNames.values(), function (res) {
-                return (res === null || res === void 0 ? void 0 : res.originalPath) && res.resolvedFileName ? [res.resolvedFileName, res.originalPath] : undefined;
-            })));
-        });
-        for (var _i = 0, symlinks_1 = symlinks; _i < symlinks_1.length; _i++) {
-            var _a = symlinks_1[_i], resolvedPath = _a[0], originalPath = _a[1];
-            cache.setSymlinkedFile(ts.toPath(originalPath, cwd, getCanonicalFileName), resolvedPath);
-            var _b = guessDirectorySymlink(resolvedPath, originalPath, cwd, getCanonicalFileName) || ts.emptyArray, commonResolved = _b[0], commonOriginal = _b[1];
+        function processResolution(cache, resolution) {
+            if (!resolution || !resolution.originalPath || !resolution.resolvedFileName)
+                return;
+            var resolvedFileName = resolution.resolvedFileName, originalPath = resolution.originalPath;
+            cache.setSymlinkedFile(ts.toPath(originalPath, cwd, getCanonicalFileName), resolvedFileName);
+            var _a = guessDirectorySymlink(resolvedFileName, originalPath, cwd, getCanonicalFileName) || ts.emptyArray, commonResolved = _a[0], commonOriginal = _a[1];
             if (commonResolved && commonOriginal) {
                 cache.setSymlinkedDirectory(commonOriginal, { real: commonResolved, realPath: ts.toPath(commonResolved, cwd, getCanonicalFileName) });
             }
         }
-        return cache;
     }
-    ts.discoverProbableSymlinks = discoverProbableSymlinks;
+    ts.createSymlinkCache = createSymlinkCache;
     function guessDirectorySymlink(a, b, cwd, getCanonicalFileName) {
         var aParts = ts.getPathComponents(ts.getNormalizedAbsolutePath(a, cwd));
         var bParts = ts.getPathComponents(ts.getNormalizedAbsolutePath(b, cwd));
@@ -19473,7 +19891,7 @@
     }
     ts.getRegexFromPattern = getRegexFromPattern;
     /** @param path directory of the tsconfig.json */
-    function matchFiles(path, extensions, excludes, includes, useCaseSensitiveFileNames, currentDirectory, depth, getFileSystemEntries, realpath) {
+    function matchFiles(path, extensions, excludes, includes, useCaseSensitiveFileNames, currentDirectory, depth, getFileSystemEntries, realpath, directoryExists) {
         path = ts.normalizePath(path);
         currentDirectory = ts.normalizePath(currentDirectory);
         var patterns = getFileMatcherPatterns(path, excludes, includes, useCaseSensitiveFileNames, currentDirectory);
@@ -19487,7 +19905,9 @@
         var toCanonical = ts.createGetCanonicalFileName(useCaseSensitiveFileNames);
         for (var _i = 0, _a = patterns.basePaths; _i < _a.length; _i++) {
             var basePath = _a[_i];
-            visitDirectory(basePath, ts.combinePaths(currentDirectory, basePath), depth);
+            if (directoryExists(basePath)) {
+                visitDirectory(basePath, ts.combinePaths(currentDirectory, basePath), depth);
+            }
         }
         return ts.flatten(results);
         function visitDirectory(path, absolutePath, depth) {
@@ -19615,14 +20035,14 @@
     ts.supportedTSExtensionsForExtractExtension = [".d.ts" /* Dts */, ".ts" /* Ts */, ".tsx" /* Tsx */];
     ts.supportedJSExtensions = [".js" /* Js */, ".jsx" /* Jsx */];
     ts.supportedJSAndJsonExtensions = [".js" /* Js */, ".jsx" /* Jsx */, ".json" /* Json */];
-    var allSupportedExtensions = __spreadArray(__spreadArray([], ts.supportedTSExtensions), ts.supportedJSExtensions);
-    var allSupportedExtensionsWithJson = __spreadArray(__spreadArray(__spreadArray([], ts.supportedTSExtensions), ts.supportedJSExtensions), [".json" /* Json */]);
+    var allSupportedExtensions = __spreadArray(__spreadArray([], ts.supportedTSExtensions, true), ts.supportedJSExtensions, true);
+    var allSupportedExtensionsWithJson = __spreadArray(__spreadArray(__spreadArray([], ts.supportedTSExtensions, true), ts.supportedJSExtensions, true), [".json" /* Json */], false);
     function getSupportedExtensions(options, extraFileExtensions) {
         var needJsExtensions = options && getAllowJSCompilerOption(options);
         if (!extraFileExtensions || extraFileExtensions.length === 0) {
             return needJsExtensions ? allSupportedExtensions : ts.supportedTSExtensions;
         }
-        var extensions = __spreadArray(__spreadArray([], needJsExtensions ? allSupportedExtensions : ts.supportedTSExtensions), ts.mapDefined(extraFileExtensions, function (x) { return x.scriptKind === 7 /* Deferred */ || needJsExtensions && isJSLike(x.scriptKind) ? x.extension : undefined; }));
+        var extensions = __spreadArray(__spreadArray([], needJsExtensions ? allSupportedExtensions : ts.supportedTSExtensions, true), ts.mapDefined(extraFileExtensions, function (x) { return x.scriptKind === 7 /* Deferred */ || needJsExtensions && isJSLike(x.scriptKind) ? x.extension : undefined; }), true);
         return ts.deduplicate(extensions, ts.equateStringsCaseSensitive, ts.compareStringsCaseSensitive);
     }
     ts.getSupportedExtensions = getSupportedExtensions;
@@ -19636,7 +20056,7 @@
         if (supportedExtensions === ts.supportedTSExtensions) {
             return ts.supportedTSExtensionsWithJson;
         }
-        return __spreadArray(__spreadArray([], supportedExtensions), [".json" /* Json */]);
+        return __spreadArray(__spreadArray([], supportedExtensions, true), [".json" /* Json */], false);
     }
     ts.getSuppoertedExtensionsWithJsonIfResolveJsonModule = getSuppoertedExtensionsWithJsonIfResolveJsonModule;
     function isJSLike(scriptKind) {
@@ -19746,16 +20166,27 @@
         return ts.changeAnyExtension(path, newExtension, extensionsToRemove, /*ignoreCase*/ false);
     }
     ts.changeExtension = changeExtension;
+    /**
+     * Returns the input if there are no stars, a pattern if there is exactly one,
+     * and undefined if there are more.
+     */
     function tryParsePattern(pattern) {
-        // This should be verified outside of here and a proper error thrown.
-        ts.Debug.assert(hasZeroOrOneAsteriskCharacter(pattern));
         var indexOfStar = pattern.indexOf("*");
-        return indexOfStar === -1 ? undefined : {
-            prefix: pattern.substr(0, indexOfStar),
-            suffix: pattern.substr(indexOfStar + 1)
-        };
+        if (indexOfStar === -1) {
+            return pattern;
+        }
+        return pattern.indexOf("*", indexOfStar + 1) !== -1
+            ? undefined
+            : {
+                prefix: pattern.substr(0, indexOfStar),
+                suffix: pattern.substr(indexOfStar + 1)
+            };
     }
     ts.tryParsePattern = tryParsePattern;
+    function tryParsePatterns(paths) {
+        return ts.mapDefined(ts.getOwnKeys(paths), function (path) { return tryParsePattern(path); });
+    }
+    ts.tryParsePatterns = tryParsePatterns;
     function positionIsSynthesized(pos) {
         // This is a fast way of testing the following conditions:
         //  pos === undefined || pos === null || isNaN(pos) || pos < 0;
@@ -19797,23 +20228,19 @@
         directories: ts.emptyArray
     };
     /**
-     * patternStrings contains both pattern strings (containing "*") and regular strings.
+     * patternOrStrings contains both patterns (containing "*") and regular strings.
      * Return an exact match if possible, or a pattern match, or undefined.
      * (These are verified by verifyCompilerOptions to have 0 or 1 "*" characters.)
      */
-    function matchPatternOrExact(patternStrings, candidate) {
+    function matchPatternOrExact(patternOrStrings, candidate) {
         var patterns = [];
-        for (var _i = 0, patternStrings_1 = patternStrings; _i < patternStrings_1.length; _i++) {
-            var patternString = patternStrings_1[_i];
-            if (!hasZeroOrOneAsteriskCharacter(patternString))
-                continue;
-            var pattern = tryParsePattern(patternString);
-            if (pattern) {
-                patterns.push(pattern);
+        for (var _i = 0, patternOrStrings_1 = patternOrStrings; _i < patternOrStrings_1.length; _i++) {
+            var patternOrString = patternOrStrings_1[_i];
+            if (patternOrString === candidate) {
+                return candidate;
             }
-            else if (patternString === candidate) {
-                // pattern was matched as is - no need to search further
-                return patternString;
+            if (!ts.isString(patternOrString)) {
+                patterns.push(patternOrString);
             }
         }
         return ts.findBestPatternMatch(patterns, function (_) { return _; }, candidate);
@@ -19964,42 +20391,45 @@
             || isPartOfTypeQuery(useSite)
             || isIdentifierInNonEmittingHeritageClause(useSite)
             || isPartOfPossiblyValidTypeOrAbstractComputedPropertyName(useSite)
-            || !isExpressionNode(useSite);
+            || !(isExpressionNode(useSite) || isShorthandPropertyNameUseSite(useSite));
     }
     ts.isValidTypeOnlyAliasUseSite = isValidTypeOnlyAliasUseSite;
     function typeOnlyDeclarationIsExport(typeOnlyDeclaration) {
-        return typeOnlyDeclaration.kind === 271 /* ExportSpecifier */;
+        return typeOnlyDeclaration.kind === 273 /* ExportSpecifier */;
     }
     ts.typeOnlyDeclarationIsExport = typeOnlyDeclarationIsExport;
+    function isShorthandPropertyNameUseSite(useSite) {
+        return ts.isIdentifier(useSite) && ts.isShorthandPropertyAssignment(useSite.parent) && useSite.parent.name === useSite;
+    }
     function isPartOfPossiblyValidTypeOrAbstractComputedPropertyName(node) {
-        while (node.kind === 78 /* Identifier */ || node.kind === 202 /* PropertyAccessExpression */) {
+        while (node.kind === 79 /* Identifier */ || node.kind === 204 /* PropertyAccessExpression */) {
             node = node.parent;
         }
-        if (node.kind !== 159 /* ComputedPropertyName */) {
+        if (node.kind !== 160 /* ComputedPropertyName */) {
             return false;
         }
         if (hasSyntacticModifier(node.parent, 128 /* Abstract */)) {
             return true;
         }
         var containerKind = node.parent.parent.kind;
-        return containerKind === 254 /* InterfaceDeclaration */ || containerKind === 178 /* TypeLiteral */;
+        return containerKind === 256 /* InterfaceDeclaration */ || containerKind === 180 /* TypeLiteral */;
     }
     /** Returns true for an identifier in 1) an `implements` clause, and 2) an `extends` clause of an interface. */
     function isIdentifierInNonEmittingHeritageClause(node) {
-        if (node.kind !== 78 /* Identifier */)
+        if (node.kind !== 79 /* Identifier */)
             return false;
         var heritageClause = ts.findAncestor(node.parent, function (parent) {
             switch (parent.kind) {
-                case 287 /* HeritageClause */:
+                case 289 /* HeritageClause */:
                     return true;
-                case 202 /* PropertyAccessExpression */:
-                case 224 /* ExpressionWithTypeArguments */:
+                case 204 /* PropertyAccessExpression */:
+                case 226 /* ExpressionWithTypeArguments */:
                     return false;
                 default:
                     return "quit";
             }
         });
-        return (heritageClause === null || heritageClause === void 0 ? void 0 : heritageClause.token) === 116 /* ImplementsKeyword */ || (heritageClause === null || heritageClause === void 0 ? void 0 : heritageClause.parent.kind) === 254 /* InterfaceDeclaration */;
+        return (heritageClause === null || heritageClause === void 0 ? void 0 : heritageClause.token) === 117 /* ImplementsKeyword */ || (heritageClause === null || heritageClause === void 0 ? void 0 : heritageClause.parent.kind) === 256 /* InterfaceDeclaration */;
     }
     function isIdentifierTypeReference(node) {
         return ts.isTypeReferenceNode(node) && ts.isIdentifier(node.typeName);
@@ -20160,18 +20590,18 @@
         if (!node.parent)
             return undefined;
         switch (node.kind) {
-            case 160 /* TypeParameter */:
+            case 161 /* TypeParameter */:
                 var parent_1 = node.parent;
-                return parent_1.kind === 186 /* InferType */ ? undefined : parent_1.typeParameters;
-            case 161 /* Parameter */:
+                return parent_1.kind === 188 /* InferType */ ? undefined : parent_1.typeParameters;
+            case 162 /* Parameter */:
                 return node.parent.parameters;
-            case 195 /* TemplateLiteralTypeSpan */:
+            case 197 /* TemplateLiteralTypeSpan */:
                 return node.parent.templateSpans;
-            case 229 /* TemplateSpan */:
+            case 231 /* TemplateSpan */:
                 return node.parent.templateSpans;
-            case 162 /* Decorator */:
+            case 163 /* Decorator */:
                 return node.parent.decorators;
-            case 287 /* HeritageClause */:
+            case 289 /* HeritageClause */:
                 return node.parent.heritageClauses;
         }
         var parent = node.parent;
@@ -20179,49 +20609,73 @@
             return ts.isJSDocTypeLiteral(node.parent) ? undefined : node.parent.tags;
         }
         switch (parent.kind) {
-            case 178 /* TypeLiteral */:
-            case 254 /* InterfaceDeclaration */:
+            case 180 /* TypeLiteral */:
+            case 256 /* InterfaceDeclaration */:
                 return ts.isTypeElement(node) ? parent.members : undefined;
-            case 183 /* UnionType */:
-            case 184 /* IntersectionType */:
+            case 185 /* UnionType */:
+            case 186 /* IntersectionType */:
                 return parent.types;
-            case 180 /* TupleType */:
-            case 200 /* ArrayLiteralExpression */:
-            case 341 /* CommaListExpression */:
-            case 265 /* NamedImports */:
-            case 269 /* NamedExports */:
+            case 182 /* TupleType */:
+            case 202 /* ArrayLiteralExpression */:
+            case 346 /* CommaListExpression */:
+            case 267 /* NamedImports */:
+            case 271 /* NamedExports */:
                 return parent.elements;
-            case 201 /* ObjectLiteralExpression */:
-            case 282 /* JsxAttributes */:
+            case 203 /* ObjectLiteralExpression */:
+            case 284 /* JsxAttributes */:
                 return parent.properties;
-            case 204 /* CallExpression */:
-            case 205 /* NewExpression */:
+            case 206 /* CallExpression */:
+            case 207 /* NewExpression */:
                 return ts.isTypeNode(node) ? parent.typeArguments :
                     parent.expression === node ? undefined :
                         parent.arguments;
-            case 274 /* JsxElement */:
-            case 278 /* JsxFragment */:
+            case 276 /* JsxElement */:
+            case 280 /* JsxFragment */:
                 return ts.isJsxChild(node) ? parent.children : undefined;
-            case 276 /* JsxOpeningElement */:
-            case 275 /* JsxSelfClosingElement */:
+            case 278 /* JsxOpeningElement */:
+            case 277 /* JsxSelfClosingElement */:
                 return ts.isTypeNode(node) ? parent.typeArguments : undefined;
-            case 231 /* Block */:
-            case 285 /* CaseClause */:
-            case 286 /* DefaultClause */:
-            case 258 /* ModuleBlock */:
+            case 233 /* Block */:
+            case 287 /* CaseClause */:
+            case 288 /* DefaultClause */:
+            case 260 /* ModuleBlock */:
                 return parent.statements;
-            case 259 /* CaseBlock */:
+            case 261 /* CaseBlock */:
                 return parent.clauses;
-            case 253 /* ClassDeclaration */:
-            case 222 /* ClassExpression */:
+            case 255 /* ClassDeclaration */:
+            case 224 /* ClassExpression */:
                 return ts.isClassElement(node) ? parent.members : undefined;
-            case 256 /* EnumDeclaration */:
+            case 258 /* EnumDeclaration */:
                 return ts.isEnumMember(node) ? parent.members : undefined;
-            case 298 /* SourceFile */:
+            case 300 /* SourceFile */:
                 return parent.statements;
         }
     }
     ts.getContainingNodeArray = getContainingNodeArray;
+    function hasContextSensitiveParameters(node) {
+        // Functions with type parameters are not context sensitive.
+        if (!node.typeParameters) {
+            // Functions with any parameters that lack type annotations are context sensitive.
+            if (ts.some(node.parameters, function (p) { return !getEffectiveTypeAnnotationNode(p); })) {
+                return true;
+            }
+            if (node.kind !== 212 /* ArrowFunction */) {
+                // If the first parameter is not an explicit 'this' parameter, then the function has
+                // an implicit 'this' parameter which is subject to contextual typing.
+                var parameter = ts.firstOrUndefined(node.parameters);
+                if (!(parameter && parameterIsThisKeyword(parameter))) {
+                    return true;
+                }
+            }
+        }
+        return false;
+    }
+    ts.hasContextSensitiveParameters = hasContextSensitiveParameters;
+    /* @internal */
+    function isInfinityOrNaNString(name) {
+        return name === "Infinity" || name === "-Infinity" || name === "NaN";
+    }
+    ts.isInfinityOrNaNString = isInfinityOrNaNString;
 })(ts || (ts = {}));
 /* @internal */
 var ts;
@@ -20335,10 +20789,10 @@
             //
             // If `a ** d` is on the left of operator `**`, we need to parenthesize to preserve
             // the intended order of operations: `(a ** b) ** c`
-            var binaryOperatorPrecedence = ts.getOperatorPrecedence(217 /* BinaryExpression */, binaryOperator);
-            var binaryOperatorAssociativity = ts.getOperatorAssociativity(217 /* BinaryExpression */, binaryOperator);
+            var binaryOperatorPrecedence = ts.getOperatorPrecedence(219 /* BinaryExpression */, binaryOperator);
+            var binaryOperatorAssociativity = ts.getOperatorAssociativity(219 /* BinaryExpression */, binaryOperator);
             var emittedOperand = ts.skipPartiallyEmittedExpressions(operand);
-            if (!isLeftSideOfBinary && operand.kind === 210 /* ArrowFunction */ && binaryOperatorPrecedence > 3 /* Assignment */) {
+            if (!isLeftSideOfBinary && operand.kind === 212 /* ArrowFunction */ && binaryOperatorPrecedence > 3 /* Assignment */) {
                 // We need to parenthesize arrow functions on the right side to avoid it being
                 // parsed as parenthesized expression: `a && (() => {})`
                 return true;
@@ -20350,7 +20804,7 @@
                     // and is a yield expression, then we do not need parentheses.
                     if (!isLeftSideOfBinary
                         && binaryOperatorAssociativity === 1 /* Right */
-                        && operand.kind === 220 /* YieldExpression */) {
+                        && operand.kind === 222 /* YieldExpression */) {
                         return false;
                     }
                     return true;
@@ -20438,7 +20892,7 @@
             if (ts.isLiteralKind(node.kind)) {
                 return node.kind;
             }
-            if (node.kind === 217 /* BinaryExpression */ && node.operatorToken.kind === 39 /* PlusToken */) {
+            if (node.kind === 219 /* BinaryExpression */ && node.operatorToken.kind === 39 /* PlusToken */) {
                 if (node.cachedLiteralKind !== undefined) {
                     return node.cachedLiteralKind;
                 }
@@ -20464,7 +20918,7 @@
         function parenthesizeBinaryOperand(binaryOperator, operand, isLeftSideOfBinary, leftOperand) {
             var skipped = ts.skipPartiallyEmittedExpressions(operand);
             // If the resulting expression is already parenthesized, we do not need to do any further processing.
-            if (skipped.kind === 208 /* ParenthesizedExpression */) {
+            if (skipped.kind === 210 /* ParenthesizedExpression */) {
                 return operand;
             }
             return binaryOperandNeedsParentheses(binaryOperator, operand, isLeftSideOfBinary, leftOperand)
@@ -20481,7 +20935,7 @@
             return ts.isCommaSequence(expression) ? factory.createParenthesizedExpression(expression) : expression;
         }
         function parenthesizeConditionOfConditionalExpression(condition) {
-            var conditionalPrecedence = ts.getOperatorPrecedence(218 /* ConditionalExpression */, 57 /* QuestionToken */);
+            var conditionalPrecedence = ts.getOperatorPrecedence(220 /* ConditionalExpression */, 57 /* QuestionToken */);
             var emittedCondition = ts.skipPartiallyEmittedExpressions(condition);
             var conditionPrecedence = ts.getExpressionPrecedence(emittedCondition);
             if (ts.compareValues(conditionPrecedence, conditionalPrecedence) !== 1 /* GreaterThan */) {
@@ -20514,8 +20968,8 @@
             var needsParens = ts.isCommaSequence(check);
             if (!needsParens) {
                 switch (ts.getLeftmostExpression(check, /*stopAtCallExpression*/ false).kind) {
-                    case 222 /* ClassExpression */:
-                    case 209 /* FunctionExpression */:
+                    case 224 /* ClassExpression */:
+                    case 211 /* FunctionExpression */:
                         needsParens = true;
                 }
             }
@@ -20528,9 +20982,9 @@
         function parenthesizeExpressionOfNew(expression) {
             var leftmostExpr = ts.getLeftmostExpression(expression, /*stopAtCallExpressions*/ true);
             switch (leftmostExpr.kind) {
-                case 204 /* CallExpression */:
+                case 206 /* CallExpression */:
                     return factory.createParenthesizedExpression(expression);
-                case 205 /* NewExpression */:
+                case 207 /* NewExpression */:
                     return !leftmostExpr.arguments
                         ? factory.createParenthesizedExpression(expression)
                         : expression; // TODO(rbuckton): Verify this assertion holds
@@ -20550,7 +21004,7 @@
             //
             var emittedExpression = ts.skipPartiallyEmittedExpressions(expression);
             if (ts.isLeftHandSideExpression(emittedExpression)
-                && (emittedExpression.kind !== 205 /* NewExpression */ || emittedExpression.arguments)) {
+                && (emittedExpression.kind !== 207 /* NewExpression */ || emittedExpression.arguments)) {
                 // TODO(rbuckton): Verify whether this assertion holds.
                 return expression;
             }
@@ -20572,7 +21026,7 @@
         function parenthesizeExpressionForDisallowedComma(expression) {
             var emittedExpression = ts.skipPartiallyEmittedExpressions(expression);
             var expressionPrecedence = ts.getExpressionPrecedence(emittedExpression);
-            var commaPrecedence = ts.getOperatorPrecedence(217 /* BinaryExpression */, 27 /* CommaToken */);
+            var commaPrecedence = ts.getOperatorPrecedence(219 /* BinaryExpression */, 27 /* CommaToken */);
             // TODO(rbuckton): Verifiy whether `setTextRange` is needed.
             return expressionPrecedence > commaPrecedence ? expression : ts.setTextRange(factory.createParenthesizedExpression(expression), expression);
         }
@@ -20581,44 +21035,44 @@
             if (ts.isCallExpression(emittedExpression)) {
                 var callee = emittedExpression.expression;
                 var kind = ts.skipPartiallyEmittedExpressions(callee).kind;
-                if (kind === 209 /* FunctionExpression */ || kind === 210 /* ArrowFunction */) {
+                if (kind === 211 /* FunctionExpression */ || kind === 212 /* ArrowFunction */) {
                     // TODO(rbuckton): Verifiy whether `setTextRange` is needed.
                     var updated = factory.updateCallExpression(emittedExpression, ts.setTextRange(factory.createParenthesizedExpression(callee), callee), emittedExpression.typeArguments, emittedExpression.arguments);
                     return factory.restoreOuterExpressions(expression, updated, 8 /* PartiallyEmittedExpressions */);
                 }
             }
             var leftmostExpressionKind = ts.getLeftmostExpression(emittedExpression, /*stopAtCallExpressions*/ false).kind;
-            if (leftmostExpressionKind === 201 /* ObjectLiteralExpression */ || leftmostExpressionKind === 209 /* FunctionExpression */) {
+            if (leftmostExpressionKind === 203 /* ObjectLiteralExpression */ || leftmostExpressionKind === 211 /* FunctionExpression */) {
                 // TODO(rbuckton): Verifiy whether `setTextRange` is needed.
                 return ts.setTextRange(factory.createParenthesizedExpression(expression), expression);
             }
             return expression;
         }
         function parenthesizeConciseBodyOfArrowFunction(body) {
-            if (!ts.isBlock(body) && (ts.isCommaSequence(body) || ts.getLeftmostExpression(body, /*stopAtCallExpressions*/ false).kind === 201 /* ObjectLiteralExpression */)) {
+            if (!ts.isBlock(body) && (ts.isCommaSequence(body) || ts.getLeftmostExpression(body, /*stopAtCallExpressions*/ false).kind === 203 /* ObjectLiteralExpression */)) {
                 // TODO(rbuckton): Verifiy whether `setTextRange` is needed.
                 return ts.setTextRange(factory.createParenthesizedExpression(body), body);
             }
             return body;
         }
         function parenthesizeMemberOfConditionalType(member) {
-            return member.kind === 185 /* ConditionalType */ ? factory.createParenthesizedType(member) : member;
+            return member.kind === 187 /* ConditionalType */ ? factory.createParenthesizedType(member) : member;
         }
         function parenthesizeMemberOfElementType(member) {
             switch (member.kind) {
-                case 183 /* UnionType */:
-                case 184 /* IntersectionType */:
-                case 175 /* FunctionType */:
-                case 176 /* ConstructorType */:
+                case 185 /* UnionType */:
+                case 186 /* IntersectionType */:
+                case 177 /* FunctionType */:
+                case 178 /* ConstructorType */:
                     return factory.createParenthesizedType(member);
             }
             return parenthesizeMemberOfConditionalType(member);
         }
         function parenthesizeElementTypeOfArrayType(member) {
             switch (member.kind) {
-                case 177 /* TypeQuery */:
-                case 189 /* TypeOperator */:
-                case 186 /* InferType */:
+                case 179 /* TypeQuery */:
+                case 191 /* TypeOperator */:
+                case 188 /* InferType */:
                     return factory.createParenthesizedType(member);
             }
             return parenthesizeMemberOfElementType(member);
@@ -20724,11 +21178,11 @@
         }
         function convertToAssignmentPattern(node) {
             switch (node.kind) {
-                case 198 /* ArrayBindingPattern */:
-                case 200 /* ArrayLiteralExpression */:
+                case 200 /* ArrayBindingPattern */:
+                case 202 /* ArrayLiteralExpression */:
                     return convertToArrayAssignmentPattern(node);
-                case 197 /* ObjectBindingPattern */:
-                case 201 /* ObjectLiteralExpression */:
+                case 199 /* ObjectBindingPattern */:
+                case 203 /* ObjectLiteralExpression */:
                     return convertToObjectAssignmentPattern(node);
             }
         }
@@ -20856,6 +21310,8 @@
             updateConstructSignature: updateConstructSignature,
             createIndexSignature: createIndexSignature,
             updateIndexSignature: updateIndexSignature,
+            createClassStaticBlockDeclaration: createClassStaticBlockDeclaration,
+            updateClassStaticBlockDeclaration: updateClassStaticBlockDeclaration,
             createTemplateLiteralTypeSpan: createTemplateLiteralTypeSpan,
             updateTemplateLiteralTypeSpan: updateTemplateLiteralTypeSpan,
             createKeywordTypeNode: createKeywordTypeNode,
@@ -21069,18 +21525,18 @@
             createExternalModuleReference: createExternalModuleReference,
             updateExternalModuleReference: updateExternalModuleReference,
             // lazily load factory members for JSDoc types with similar structure
-            get createJSDocAllType() { return getJSDocPrimaryTypeCreateFunction(304 /* JSDocAllType */); },
-            get createJSDocUnknownType() { return getJSDocPrimaryTypeCreateFunction(305 /* JSDocUnknownType */); },
-            get createJSDocNonNullableType() { return getJSDocUnaryTypeCreateFunction(307 /* JSDocNonNullableType */); },
-            get updateJSDocNonNullableType() { return getJSDocUnaryTypeUpdateFunction(307 /* JSDocNonNullableType */); },
-            get createJSDocNullableType() { return getJSDocUnaryTypeCreateFunction(306 /* JSDocNullableType */); },
-            get updateJSDocNullableType() { return getJSDocUnaryTypeUpdateFunction(306 /* JSDocNullableType */); },
-            get createJSDocOptionalType() { return getJSDocUnaryTypeCreateFunction(308 /* JSDocOptionalType */); },
-            get updateJSDocOptionalType() { return getJSDocUnaryTypeUpdateFunction(308 /* JSDocOptionalType */); },
-            get createJSDocVariadicType() { return getJSDocUnaryTypeCreateFunction(310 /* JSDocVariadicType */); },
-            get updateJSDocVariadicType() { return getJSDocUnaryTypeUpdateFunction(310 /* JSDocVariadicType */); },
-            get createJSDocNamepathType() { return getJSDocUnaryTypeCreateFunction(311 /* JSDocNamepathType */); },
-            get updateJSDocNamepathType() { return getJSDocUnaryTypeUpdateFunction(311 /* JSDocNamepathType */); },
+            get createJSDocAllType() { return getJSDocPrimaryTypeCreateFunction(307 /* JSDocAllType */); },
+            get createJSDocUnknownType() { return getJSDocPrimaryTypeCreateFunction(308 /* JSDocUnknownType */); },
+            get createJSDocNonNullableType() { return getJSDocUnaryTypeCreateFunction(310 /* JSDocNonNullableType */); },
+            get updateJSDocNonNullableType() { return getJSDocUnaryTypeUpdateFunction(310 /* JSDocNonNullableType */); },
+            get createJSDocNullableType() { return getJSDocUnaryTypeCreateFunction(309 /* JSDocNullableType */); },
+            get updateJSDocNullableType() { return getJSDocUnaryTypeUpdateFunction(309 /* JSDocNullableType */); },
+            get createJSDocOptionalType() { return getJSDocUnaryTypeCreateFunction(311 /* JSDocOptionalType */); },
+            get updateJSDocOptionalType() { return getJSDocUnaryTypeUpdateFunction(311 /* JSDocOptionalType */); },
+            get createJSDocVariadicType() { return getJSDocUnaryTypeCreateFunction(313 /* JSDocVariadicType */); },
+            get updateJSDocVariadicType() { return getJSDocUnaryTypeUpdateFunction(313 /* JSDocVariadicType */); },
+            get createJSDocNamepathType() { return getJSDocUnaryTypeCreateFunction(314 /* JSDocNamepathType */); },
+            get updateJSDocNamepathType() { return getJSDocUnaryTypeUpdateFunction(314 /* JSDocNamepathType */); },
             createJSDocFunctionType: createJSDocFunctionType,
             updateJSDocFunctionType: updateJSDocFunctionType,
             createJSDocTypeLiteral: createJSDocTypeLiteral,
@@ -21107,33 +21563,39 @@
             updateJSDocSeeTag: updateJSDocSeeTag,
             createJSDocNameReference: createJSDocNameReference,
             updateJSDocNameReference: updateJSDocNameReference,
+            createJSDocMemberName: createJSDocMemberName,
+            updateJSDocMemberName: updateJSDocMemberName,
             createJSDocLink: createJSDocLink,
             updateJSDocLink: updateJSDocLink,
+            createJSDocLinkCode: createJSDocLinkCode,
+            updateJSDocLinkCode: updateJSDocLinkCode,
+            createJSDocLinkPlain: createJSDocLinkPlain,
+            updateJSDocLinkPlain: updateJSDocLinkPlain,
             // lazily load factory members for JSDoc tags with similar structure
-            get createJSDocTypeTag() { return getJSDocTypeLikeTagCreateFunction(333 /* JSDocTypeTag */); },
-            get updateJSDocTypeTag() { return getJSDocTypeLikeTagUpdateFunction(333 /* JSDocTypeTag */); },
-            get createJSDocReturnTag() { return getJSDocTypeLikeTagCreateFunction(331 /* JSDocReturnTag */); },
-            get updateJSDocReturnTag() { return getJSDocTypeLikeTagUpdateFunction(331 /* JSDocReturnTag */); },
-            get createJSDocThisTag() { return getJSDocTypeLikeTagCreateFunction(332 /* JSDocThisTag */); },
-            get updateJSDocThisTag() { return getJSDocTypeLikeTagUpdateFunction(332 /* JSDocThisTag */); },
-            get createJSDocEnumTag() { return getJSDocTypeLikeTagCreateFunction(329 /* JSDocEnumTag */); },
-            get updateJSDocEnumTag() { return getJSDocTypeLikeTagUpdateFunction(329 /* JSDocEnumTag */); },
-            get createJSDocAuthorTag() { return getJSDocSimpleTagCreateFunction(320 /* JSDocAuthorTag */); },
-            get updateJSDocAuthorTag() { return getJSDocSimpleTagUpdateFunction(320 /* JSDocAuthorTag */); },
-            get createJSDocClassTag() { return getJSDocSimpleTagCreateFunction(322 /* JSDocClassTag */); },
-            get updateJSDocClassTag() { return getJSDocSimpleTagUpdateFunction(322 /* JSDocClassTag */); },
-            get createJSDocPublicTag() { return getJSDocSimpleTagCreateFunction(323 /* JSDocPublicTag */); },
-            get updateJSDocPublicTag() { return getJSDocSimpleTagUpdateFunction(323 /* JSDocPublicTag */); },
-            get createJSDocPrivateTag() { return getJSDocSimpleTagCreateFunction(324 /* JSDocPrivateTag */); },
-            get updateJSDocPrivateTag() { return getJSDocSimpleTagUpdateFunction(324 /* JSDocPrivateTag */); },
-            get createJSDocProtectedTag() { return getJSDocSimpleTagCreateFunction(325 /* JSDocProtectedTag */); },
-            get updateJSDocProtectedTag() { return getJSDocSimpleTagUpdateFunction(325 /* JSDocProtectedTag */); },
-            get createJSDocReadonlyTag() { return getJSDocSimpleTagCreateFunction(326 /* JSDocReadonlyTag */); },
-            get updateJSDocReadonlyTag() { return getJSDocSimpleTagUpdateFunction(326 /* JSDocReadonlyTag */); },
-            get createJSDocOverrideTag() { return getJSDocSimpleTagCreateFunction(327 /* JSDocOverrideTag */); },
-            get updateJSDocOverrideTag() { return getJSDocSimpleTagUpdateFunction(327 /* JSDocOverrideTag */); },
-            get createJSDocDeprecatedTag() { return getJSDocSimpleTagCreateFunction(321 /* JSDocDeprecatedTag */); },
-            get updateJSDocDeprecatedTag() { return getJSDocSimpleTagUpdateFunction(321 /* JSDocDeprecatedTag */); },
+            get createJSDocTypeTag() { return getJSDocTypeLikeTagCreateFunction(338 /* JSDocTypeTag */); },
+            get updateJSDocTypeTag() { return getJSDocTypeLikeTagUpdateFunction(338 /* JSDocTypeTag */); },
+            get createJSDocReturnTag() { return getJSDocTypeLikeTagCreateFunction(336 /* JSDocReturnTag */); },
+            get updateJSDocReturnTag() { return getJSDocTypeLikeTagUpdateFunction(336 /* JSDocReturnTag */); },
+            get createJSDocThisTag() { return getJSDocTypeLikeTagCreateFunction(337 /* JSDocThisTag */); },
+            get updateJSDocThisTag() { return getJSDocTypeLikeTagUpdateFunction(337 /* JSDocThisTag */); },
+            get createJSDocEnumTag() { return getJSDocTypeLikeTagCreateFunction(334 /* JSDocEnumTag */); },
+            get updateJSDocEnumTag() { return getJSDocTypeLikeTagUpdateFunction(334 /* JSDocEnumTag */); },
+            get createJSDocAuthorTag() { return getJSDocSimpleTagCreateFunction(325 /* JSDocAuthorTag */); },
+            get updateJSDocAuthorTag() { return getJSDocSimpleTagUpdateFunction(325 /* JSDocAuthorTag */); },
+            get createJSDocClassTag() { return getJSDocSimpleTagCreateFunction(327 /* JSDocClassTag */); },
+            get updateJSDocClassTag() { return getJSDocSimpleTagUpdateFunction(327 /* JSDocClassTag */); },
+            get createJSDocPublicTag() { return getJSDocSimpleTagCreateFunction(328 /* JSDocPublicTag */); },
+            get updateJSDocPublicTag() { return getJSDocSimpleTagUpdateFunction(328 /* JSDocPublicTag */); },
+            get createJSDocPrivateTag() { return getJSDocSimpleTagCreateFunction(329 /* JSDocPrivateTag */); },
+            get updateJSDocPrivateTag() { return getJSDocSimpleTagUpdateFunction(329 /* JSDocPrivateTag */); },
+            get createJSDocProtectedTag() { return getJSDocSimpleTagCreateFunction(330 /* JSDocProtectedTag */); },
+            get updateJSDocProtectedTag() { return getJSDocSimpleTagUpdateFunction(330 /* JSDocProtectedTag */); },
+            get createJSDocReadonlyTag() { return getJSDocSimpleTagCreateFunction(331 /* JSDocReadonlyTag */); },
+            get updateJSDocReadonlyTag() { return getJSDocSimpleTagUpdateFunction(331 /* JSDocReadonlyTag */); },
+            get createJSDocOverrideTag() { return getJSDocSimpleTagCreateFunction(332 /* JSDocOverrideTag */); },
+            get updateJSDocOverrideTag() { return getJSDocSimpleTagUpdateFunction(332 /* JSDocOverrideTag */); },
+            get createJSDocDeprecatedTag() { return getJSDocSimpleTagCreateFunction(326 /* JSDocDeprecatedTag */); },
+            get updateJSDocDeprecatedTag() { return getJSDocSimpleTagUpdateFunction(326 /* JSDocDeprecatedTag */); },
             createJSDocUnknownTag: createJSDocUnknownTag,
             updateJSDocUnknownTag: updateJSDocUnknownTag,
             createJSDocText: createJSDocText,
@@ -21202,7 +21664,7 @@
             cloneNode: cloneNode,
             // Lazily load factory methods for common operator factories and utilities
             get createComma() { return getBinaryCreateFunction(27 /* CommaToken */); },
-            get createAssignment() { return getBinaryCreateFunction(62 /* EqualsToken */); },
+            get createAssignment() { return getBinaryCreateFunction(63 /* EqualsToken */); },
             get createLogicalOr() { return getBinaryCreateFunction(56 /* BarBarToken */); },
             get createLogicalAnd() { return getBinaryCreateFunction(55 /* AmpersandAmpersandToken */); },
             get createBitwiseOr() { return getBinaryCreateFunction(51 /* BarToken */); },
@@ -21248,8 +21710,11 @@
             createArraySliceCall: createArraySliceCall,
             createArrayConcatCall: createArrayConcatCall,
             createObjectDefinePropertyCall: createObjectDefinePropertyCall,
+            createReflectGetCall: createReflectGetCall,
+            createReflectSetCall: createReflectSetCall,
             createPropertyDescriptor: createPropertyDescriptor,
             createCallBinding: createCallBinding,
+            createAssignmentTargetWrapper: createAssignmentTargetWrapper,
             // Utilities
             inlineExpressions: inlineExpressions,
             getInternalName: getInternalName,
@@ -21276,12 +21741,24 @@
                 elements = [];
             }
             else if (ts.isNodeArray(elements)) {
-                // Ensure the transform flags have been aggregated for this NodeArray
-                if (elements.transformFlags === undefined) {
-                    aggregateChildrenFlags(elements);
+                if (hasTrailingComma === undefined || elements.hasTrailingComma === hasTrailingComma) {
+                    // Ensure the transform flags have been aggregated for this NodeArray
+                    if (elements.transformFlags === undefined) {
+                        aggregateChildrenFlags(elements);
+                    }
+                    ts.Debug.attachNodeArrayDebugInfo(elements);
+                    return elements;
                 }
-                ts.Debug.attachNodeArrayDebugInfo(elements);
-                return elements;
+                // This *was* a `NodeArray`, but the `hasTrailingComma` option differs. Recreate the
+                // array with the same elements, text range, and transform flags but with the updated
+                // value for `hasTrailingComma`
+                var array_8 = elements.slice();
+                array_8.pos = elements.pos;
+                array_8.end = elements.end;
+                array_8.hasTrailingComma = hasTrailingComma;
+                array_8.transformFlags = elements.transformFlags;
+                ts.Debug.attachNodeArrayDebugInfo(array_8);
+                return array_8;
             }
             // Since the element list of a node array is typically created by starting with an empty array and
             // repeatedly calling push(), the list may not have the optimal memory layout. We invoke slice() for
@@ -21321,11 +21798,11 @@
             // don't propagate child flags.
             if (name) {
                 switch (node.kind) {
-                    case 166 /* MethodDeclaration */:
-                    case 168 /* GetAccessor */:
-                    case 169 /* SetAccessor */:
-                    case 164 /* PropertyDeclaration */:
-                    case 289 /* PropertyAssignment */:
+                    case 167 /* MethodDeclaration */:
+                    case 170 /* GetAccessor */:
+                    case 171 /* SetAccessor */:
+                    case 165 /* PropertyDeclaration */:
+                    case 291 /* PropertyAssignment */:
                         if (ts.isIdentifier(name)) {
                             node.transformFlags |= propagateIdentifierNameFlags(name);
                             break;
@@ -21471,10 +21948,10 @@
             if (originalKeywordKind === undefined && text) {
                 originalKeywordKind = ts.stringToToken(text);
             }
-            if (originalKeywordKind === 78 /* Identifier */) {
+            if (originalKeywordKind === 79 /* Identifier */) {
                 originalKeywordKind = undefined;
             }
-            var node = baseFactory.createBaseIdentifierNode(78 /* Identifier */);
+            var node = baseFactory.createBaseIdentifierNode(79 /* Identifier */);
             node.originalKeywordKind = originalKeywordKind;
             node.escapedText = ts.escapeLeadingUnderscores(text);
             return node;
@@ -21493,7 +21970,7 @@
                 // NOTE: we do not use `setChildren` here because typeArguments in an identifier do not contribute to transformations
                 node.typeArguments = createNodeArray(typeArguments);
             }
-            if (node.originalKeywordKind === 130 /* AwaitKeyword */) {
+            if (node.originalKeywordKind === 131 /* AwaitKeyword */) {
                 node.transformFlags |= 16777216 /* ContainsPossibleTopLevelAwait */;
             }
             return node;
@@ -21544,7 +22021,7 @@
         function createPrivateIdentifier(text) {
             if (!ts.startsWith(text, "#"))
                 ts.Debug.fail("First character of private identifier must be #: " + text);
-            var node = baseFactory.createBasePrivateIdentifierNode(79 /* PrivateIdentifier */);
+            var node = baseFactory.createBasePrivateIdentifierNode(80 /* PrivateIdentifier */);
             node.escapedText = ts.escapeLeadingUnderscores(text);
             node.transformFlags |= 8388608 /* ContainsClassFields */;
             return node;
@@ -21556,45 +22033,47 @@
             return baseFactory.createBaseTokenNode(kind);
         }
         function createToken(token) {
-            ts.Debug.assert(token >= 0 /* FirstToken */ && token <= 157 /* LastToken */, "Invalid token");
+            ts.Debug.assert(token >= 0 /* FirstToken */ && token <= 158 /* LastToken */, "Invalid token");
             ts.Debug.assert(token <= 14 /* FirstTemplateToken */ || token >= 17 /* LastTemplateToken */, "Invalid token. Use 'createTemplateLiteralLikeNode' to create template literals.");
             ts.Debug.assert(token <= 8 /* FirstLiteralToken */ || token >= 14 /* LastLiteralToken */, "Invalid token. Use 'createLiteralLikeNode' to create literals.");
-            ts.Debug.assert(token !== 78 /* Identifier */, "Invalid token. Use 'createIdentifier' to create identifiers");
+            ts.Debug.assert(token !== 79 /* Identifier */, "Invalid token. Use 'createIdentifier' to create identifiers");
             var node = createBaseToken(token);
             var transformFlags = 0 /* None */;
             switch (token) {
-                case 129 /* AsyncKeyword */:
+                case 130 /* AsyncKeyword */:
                     // 'async' modifier is ES2017 (async functions) or ES2018 (async generators)
                     transformFlags =
                         128 /* ContainsES2017 */ |
                             64 /* ContainsES2018 */;
                     break;
-                case 122 /* PublicKeyword */:
-                case 120 /* PrivateKeyword */:
-                case 121 /* ProtectedKeyword */:
-                case 142 /* ReadonlyKeyword */:
-                case 125 /* AbstractKeyword */:
-                case 133 /* DeclareKeyword */:
-                case 84 /* ConstKeyword */:
-                case 128 /* AnyKeyword */:
-                case 144 /* NumberKeyword */:
-                case 155 /* BigIntKeyword */:
-                case 141 /* NeverKeyword */:
-                case 145 /* ObjectKeyword */:
-                case 156 /* OverrideKeyword */:
-                case 147 /* StringKeyword */:
-                case 131 /* BooleanKeyword */:
-                case 148 /* SymbolKeyword */:
-                case 113 /* VoidKeyword */:
-                case 152 /* UnknownKeyword */:
-                case 150 /* UndefinedKeyword */: // `undefined` is an Identifier in the expression case.
+                case 123 /* PublicKeyword */:
+                case 121 /* PrivateKeyword */:
+                case 122 /* ProtectedKeyword */:
+                case 143 /* ReadonlyKeyword */:
+                case 126 /* AbstractKeyword */:
+                case 134 /* DeclareKeyword */:
+                case 85 /* ConstKeyword */:
+                case 129 /* AnyKeyword */:
+                case 145 /* NumberKeyword */:
+                case 156 /* BigIntKeyword */:
+                case 142 /* NeverKeyword */:
+                case 146 /* ObjectKeyword */:
+                case 157 /* OverrideKeyword */:
+                case 148 /* StringKeyword */:
+                case 132 /* BooleanKeyword */:
+                case 149 /* SymbolKeyword */:
+                case 114 /* VoidKeyword */:
+                case 153 /* UnknownKeyword */:
+                case 151 /* UndefinedKeyword */: // `undefined` is an Identifier in the expression case.
                     transformFlags = 1 /* ContainsTypeScript */;
                     break;
-                case 123 /* StaticKeyword */:
-                case 105 /* SuperKeyword */:
+                case 106 /* SuperKeyword */:
+                    transformFlags = 512 /* ContainsES2015 */ | 33554432 /* ContainsLexicalSuper */;
+                    break;
+                case 124 /* StaticKeyword */:
                     transformFlags = 512 /* ContainsES2015 */;
                     break;
-                case 107 /* ThisKeyword */:
+                case 108 /* ThisKeyword */:
                     // 'this' indicates a lexical 'this'
                     transformFlags = 8192 /* ContainsLexicalThis */;
                     break;
@@ -21609,23 +22088,23 @@
         //
         // @api
         function createSuper() {
-            return createToken(105 /* SuperKeyword */);
+            return createToken(106 /* SuperKeyword */);
         }
         // @api
         function createThis() {
-            return createToken(107 /* ThisKeyword */);
+            return createToken(108 /* ThisKeyword */);
         }
         // @api
         function createNull() {
-            return createToken(103 /* NullKeyword */);
+            return createToken(104 /* NullKeyword */);
         }
         // @api
         function createTrue() {
-            return createToken(109 /* TrueKeyword */);
+            return createToken(110 /* TrueKeyword */);
         }
         // @api
         function createFalse() {
-            return createToken(94 /* FalseKeyword */);
+            return createToken(95 /* FalseKeyword */);
         }
         //
         // Modifiers
@@ -21638,40 +22117,40 @@
         function createModifiersFromModifierFlags(flags) {
             var result = [];
             if (flags & 1 /* Export */) {
-                result.push(createModifier(92 /* ExportKeyword */));
+                result.push(createModifier(93 /* ExportKeyword */));
             }
             if (flags & 2 /* Ambient */) {
-                result.push(createModifier(133 /* DeclareKeyword */));
+                result.push(createModifier(134 /* DeclareKeyword */));
             }
             if (flags & 512 /* Default */) {
-                result.push(createModifier(87 /* DefaultKeyword */));
+                result.push(createModifier(88 /* DefaultKeyword */));
             }
             if (flags & 2048 /* Const */) {
-                result.push(createModifier(84 /* ConstKeyword */));
+                result.push(createModifier(85 /* ConstKeyword */));
             }
             if (flags & 4 /* Public */) {
-                result.push(createModifier(122 /* PublicKeyword */));
+                result.push(createModifier(123 /* PublicKeyword */));
             }
             if (flags & 8 /* Private */) {
-                result.push(createModifier(120 /* PrivateKeyword */));
+                result.push(createModifier(121 /* PrivateKeyword */));
             }
             if (flags & 16 /* Protected */) {
-                result.push(createModifier(121 /* ProtectedKeyword */));
+                result.push(createModifier(122 /* ProtectedKeyword */));
             }
             if (flags & 128 /* Abstract */) {
-                result.push(createModifier(125 /* AbstractKeyword */));
+                result.push(createModifier(126 /* AbstractKeyword */));
             }
             if (flags & 32 /* Static */) {
-                result.push(createModifier(123 /* StaticKeyword */));
+                result.push(createModifier(124 /* StaticKeyword */));
             }
             if (flags & 16384 /* Override */) {
-                result.push(createModifier(156 /* OverrideKeyword */));
+                result.push(createModifier(157 /* OverrideKeyword */));
             }
             if (flags & 64 /* Readonly */) {
-                result.push(createModifier(142 /* ReadonlyKeyword */));
+                result.push(createModifier(143 /* ReadonlyKeyword */));
             }
             if (flags & 256 /* Async */) {
-                result.push(createModifier(129 /* AsyncKeyword */));
+                result.push(createModifier(130 /* AsyncKeyword */));
             }
             return result;
         }
@@ -21680,7 +22159,7 @@
         //
         // @api
         function createQualifiedName(left, right) {
-            var node = createBaseNode(158 /* QualifiedName */);
+            var node = createBaseNode(159 /* QualifiedName */);
             node.left = left;
             node.right = asName(right);
             node.transformFlags |=
@@ -21697,7 +22176,7 @@
         }
         // @api
         function createComputedPropertyName(expression) {
-            var node = createBaseNode(159 /* ComputedPropertyName */);
+            var node = createBaseNode(160 /* ComputedPropertyName */);
             node.expression = parenthesizerRules().parenthesizeExpressionOfComputedPropertyName(expression);
             node.transformFlags |=
                 propagateChildFlags(node.expression) |
@@ -21716,7 +22195,7 @@
         //
         // @api
         function createTypeParameterDeclaration(name, constraint, defaultType) {
-            var node = createBaseNamedDeclaration(160 /* TypeParameter */, 
+            var node = createBaseNamedDeclaration(161 /* TypeParameter */, 
             /*decorators*/ undefined, 
             /*modifiers*/ undefined, name);
             node.constraint = constraint;
@@ -21734,7 +22213,7 @@
         }
         // @api
         function createParameterDeclaration(decorators, modifiers, dotDotDotToken, name, questionToken, type, initializer) {
-            var node = createBaseVariableLikeDeclaration(161 /* Parameter */, decorators, modifiers, name, type, initializer && parenthesizerRules().parenthesizeExpressionForDisallowedComma(initializer));
+            var node = createBaseVariableLikeDeclaration(162 /* Parameter */, decorators, modifiers, name, type, initializer && parenthesizerRules().parenthesizeExpressionForDisallowedComma(initializer));
             node.dotDotDotToken = dotDotDotToken;
             node.questionToken = questionToken;
             if (ts.isThisIdentifier(node.name)) {
@@ -21767,7 +22246,7 @@
         }
         // @api
         function createDecorator(expression) {
-            var node = createBaseNode(162 /* Decorator */);
+            var node = createBaseNode(163 /* Decorator */);
             node.expression = parenthesizerRules().parenthesizeLeftSideOfAccess(expression);
             node.transformFlags |=
                 propagateChildFlags(node.expression) |
@@ -21786,7 +22265,7 @@
         //
         // @api
         function createPropertySignature(modifiers, name, questionToken, type) {
-            var node = createBaseNamedDeclaration(163 /* PropertySignature */, 
+            var node = createBaseNamedDeclaration(164 /* PropertySignature */, 
             /*decorators*/ undefined, modifiers, name);
             node.type = type;
             node.questionToken = questionToken;
@@ -21804,7 +22283,7 @@
         }
         // @api
         function createPropertyDeclaration(decorators, modifiers, name, questionOrExclamationToken, type, initializer) {
-            var node = createBaseVariableLikeDeclaration(164 /* PropertyDeclaration */, decorators, modifiers, name, type, initializer);
+            var node = createBaseVariableLikeDeclaration(165 /* PropertyDeclaration */, decorators, modifiers, name, type, initializer);
             node.questionToken = questionOrExclamationToken && ts.isQuestionToken(questionOrExclamationToken) ? questionOrExclamationToken : undefined;
             node.exclamationToken = questionOrExclamationToken && ts.isExclamationToken(questionOrExclamationToken) ? questionOrExclamationToken : undefined;
             node.transformFlags |=
@@ -21833,7 +22312,7 @@
         }
         // @api
         function createMethodSignature(modifiers, name, questionToken, typeParameters, parameters, type) {
-            var node = createBaseSignatureDeclaration(165 /* MethodSignature */, 
+            var node = createBaseSignatureDeclaration(166 /* MethodSignature */, 
             /*decorators*/ undefined, modifiers, name, typeParameters, parameters, type);
             node.questionToken = questionToken;
             node.transformFlags = 1 /* ContainsTypeScript */;
@@ -21852,7 +22331,7 @@
         }
         // @api
         function createMethodDeclaration(decorators, modifiers, asteriskToken, name, questionToken, typeParameters, parameters, type, body) {
-            var node = createBaseFunctionLikeDeclaration(166 /* MethodDeclaration */, decorators, modifiers, name, typeParameters, parameters, type, body);
+            var node = createBaseFunctionLikeDeclaration(167 /* MethodDeclaration */, decorators, modifiers, name, typeParameters, parameters, type, body);
             node.asteriskToken = asteriskToken;
             node.questionToken = questionToken;
             node.transformFlags |=
@@ -21890,8 +22369,25 @@
                 : node;
         }
         // @api
+        function createClassStaticBlockDeclaration(decorators, modifiers, body) {
+            var node = createBaseGenericNamedDeclaration(168 /* ClassStaticBlockDeclaration */, decorators, modifiers, 
+            /*name*/ undefined, 
+            /*typeParameters*/ undefined);
+            node.body = body;
+            node.transformFlags = propagateChildFlags(body) | 8388608 /* ContainsClassFields */;
+            return node;
+        }
+        // @api
+        function updateClassStaticBlockDeclaration(node, decorators, modifiers, body) {
+            return node.decorators !== decorators
+                || node.modifier !== modifiers
+                || node.body !== body
+                ? update(createClassStaticBlockDeclaration(decorators, modifiers, body), node)
+                : node;
+        }
+        // @api
         function createConstructorDeclaration(decorators, modifiers, parameters, body) {
-            var node = createBaseFunctionLikeDeclaration(167 /* Constructor */, decorators, modifiers, 
+            var node = createBaseFunctionLikeDeclaration(169 /* Constructor */, decorators, modifiers, 
             /*name*/ undefined, 
             /*typeParameters*/ undefined, parameters, 
             /*type*/ undefined, body);
@@ -21909,7 +22405,7 @@
         }
         // @api
         function createGetAccessorDeclaration(decorators, modifiers, name, parameters, type, body) {
-            return createBaseFunctionLikeDeclaration(168 /* GetAccessor */, decorators, modifiers, name, 
+            return createBaseFunctionLikeDeclaration(170 /* GetAccessor */, decorators, modifiers, name, 
             /*typeParameters*/ undefined, parameters, type, body);
         }
         // @api
@@ -21925,7 +22421,7 @@
         }
         // @api
         function createSetAccessorDeclaration(decorators, modifiers, name, parameters, body) {
-            return createBaseFunctionLikeDeclaration(169 /* SetAccessor */, decorators, modifiers, name, 
+            return createBaseFunctionLikeDeclaration(171 /* SetAccessor */, decorators, modifiers, name, 
             /*typeParameters*/ undefined, parameters, 
             /*type*/ undefined, body);
         }
@@ -21941,7 +22437,7 @@
         }
         // @api
         function createCallSignature(typeParameters, parameters, type) {
-            var node = createBaseSignatureDeclaration(170 /* CallSignature */, 
+            var node = createBaseSignatureDeclaration(172 /* CallSignature */, 
             /*decorators*/ undefined, 
             /*modifiers*/ undefined, 
             /*name*/ undefined, typeParameters, parameters, type);
@@ -21958,7 +22454,7 @@
         }
         // @api
         function createConstructSignature(typeParameters, parameters, type) {
-            var node = createBaseSignatureDeclaration(171 /* ConstructSignature */, 
+            var node = createBaseSignatureDeclaration(173 /* ConstructSignature */, 
             /*decorators*/ undefined, 
             /*modifiers*/ undefined, 
             /*name*/ undefined, typeParameters, parameters, type);
@@ -21975,7 +22471,7 @@
         }
         // @api
         function createIndexSignature(decorators, modifiers, parameters, type) {
-            var node = createBaseSignatureDeclaration(172 /* IndexSignature */, decorators, modifiers, 
+            var node = createBaseSignatureDeclaration(174 /* IndexSignature */, decorators, modifiers, 
             /*name*/ undefined, 
             /*typeParameters*/ undefined, parameters, type);
             node.transformFlags = 1 /* ContainsTypeScript */;
@@ -21992,7 +22488,7 @@
         }
         // @api
         function createTemplateLiteralTypeSpan(type, literal) {
-            var node = createBaseNode(195 /* TemplateLiteralTypeSpan */);
+            var node = createBaseNode(197 /* TemplateLiteralTypeSpan */);
             node.type = type;
             node.literal = literal;
             node.transformFlags = 1 /* ContainsTypeScript */;
@@ -22014,7 +22510,7 @@
         }
         // @api
         function createTypePredicateNode(assertsModifier, parameterName, type) {
-            var node = createBaseNode(173 /* TypePredicate */);
+            var node = createBaseNode(175 /* TypePredicate */);
             node.assertsModifier = assertsModifier;
             node.parameterName = asName(parameterName);
             node.type = type;
@@ -22031,7 +22527,7 @@
         }
         // @api
         function createTypeReferenceNode(typeName, typeArguments) {
-            var node = createBaseNode(174 /* TypeReference */);
+            var node = createBaseNode(176 /* TypeReference */);
             node.typeName = asName(typeName);
             node.typeArguments = typeArguments && parenthesizerRules().parenthesizeTypeArguments(createNodeArray(typeArguments));
             node.transformFlags = 1 /* ContainsTypeScript */;
@@ -22046,7 +22542,7 @@
         }
         // @api
         function createFunctionTypeNode(typeParameters, parameters, type) {
-            var node = createBaseSignatureDeclaration(175 /* FunctionType */, 
+            var node = createBaseSignatureDeclaration(177 /* FunctionType */, 
             /*decorators*/ undefined, 
             /*modifiers*/ undefined, 
             /*name*/ undefined, typeParameters, parameters, type);
@@ -22072,7 +22568,7 @@
                     ts.Debug.fail("Incorrect number of arguments specified.");
         }
         function createConstructorTypeNode1(modifiers, typeParameters, parameters, type) {
-            var node = createBaseSignatureDeclaration(176 /* ConstructorType */, 
+            var node = createBaseSignatureDeclaration(178 /* ConstructorType */, 
             /*decorators*/ undefined, modifiers, 
             /*name*/ undefined, typeParameters, parameters, type);
             node.transformFlags = 1 /* ContainsTypeScript */;
@@ -22106,7 +22602,7 @@
         }
         // @api
         function createTypeQueryNode(exprName) {
-            var node = createBaseNode(177 /* TypeQuery */);
+            var node = createBaseNode(179 /* TypeQuery */);
             node.exprName = exprName;
             node.transformFlags = 1 /* ContainsTypeScript */;
             return node;
@@ -22119,7 +22615,7 @@
         }
         // @api
         function createTypeLiteralNode(members) {
-            var node = createBaseNode(178 /* TypeLiteral */);
+            var node = createBaseNode(180 /* TypeLiteral */);
             node.members = createNodeArray(members);
             node.transformFlags = 1 /* ContainsTypeScript */;
             return node;
@@ -22132,7 +22628,7 @@
         }
         // @api
         function createArrayTypeNode(elementType) {
-            var node = createBaseNode(179 /* ArrayType */);
+            var node = createBaseNode(181 /* ArrayType */);
             node.elementType = parenthesizerRules().parenthesizeElementTypeOfArrayType(elementType);
             node.transformFlags = 1 /* ContainsTypeScript */;
             return node;
@@ -22145,7 +22641,7 @@
         }
         // @api
         function createTupleTypeNode(elements) {
-            var node = createBaseNode(180 /* TupleType */);
+            var node = createBaseNode(182 /* TupleType */);
             node.elements = createNodeArray(elements);
             node.transformFlags = 1 /* ContainsTypeScript */;
             return node;
@@ -22158,7 +22654,7 @@
         }
         // @api
         function createNamedTupleMember(dotDotDotToken, name, questionToken, type) {
-            var node = createBaseNode(193 /* NamedTupleMember */);
+            var node = createBaseNode(195 /* NamedTupleMember */);
             node.dotDotDotToken = dotDotDotToken;
             node.name = name;
             node.questionToken = questionToken;
@@ -22177,7 +22673,7 @@
         }
         // @api
         function createOptionalTypeNode(type) {
-            var node = createBaseNode(181 /* OptionalType */);
+            var node = createBaseNode(183 /* OptionalType */);
             node.type = parenthesizerRules().parenthesizeElementTypeOfArrayType(type);
             node.transformFlags = 1 /* ContainsTypeScript */;
             return node;
@@ -22190,7 +22686,7 @@
         }
         // @api
         function createRestTypeNode(type) {
-            var node = createBaseNode(182 /* RestType */);
+            var node = createBaseNode(184 /* RestType */);
             node.type = type;
             node.transformFlags = 1 /* ContainsTypeScript */;
             return node;
@@ -22214,7 +22710,7 @@
         }
         // @api
         function createUnionTypeNode(types) {
-            return createUnionOrIntersectionTypeNode(183 /* UnionType */, types);
+            return createUnionOrIntersectionTypeNode(185 /* UnionType */, types);
         }
         // @api
         function updateUnionTypeNode(node, types) {
@@ -22222,7 +22718,7 @@
         }
         // @api
         function createIntersectionTypeNode(types) {
-            return createUnionOrIntersectionTypeNode(184 /* IntersectionType */, types);
+            return createUnionOrIntersectionTypeNode(186 /* IntersectionType */, types);
         }
         // @api
         function updateIntersectionTypeNode(node, types) {
@@ -22230,7 +22726,7 @@
         }
         // @api
         function createConditionalTypeNode(checkType, extendsType, trueType, falseType) {
-            var node = createBaseNode(185 /* ConditionalType */);
+            var node = createBaseNode(187 /* ConditionalType */);
             node.checkType = parenthesizerRules().parenthesizeMemberOfConditionalType(checkType);
             node.extendsType = parenthesizerRules().parenthesizeMemberOfConditionalType(extendsType);
             node.trueType = trueType;
@@ -22249,7 +22745,7 @@
         }
         // @api
         function createInferTypeNode(typeParameter) {
-            var node = createBaseNode(186 /* InferType */);
+            var node = createBaseNode(188 /* InferType */);
             node.typeParameter = typeParameter;
             node.transformFlags = 1 /* ContainsTypeScript */;
             return node;
@@ -22262,7 +22758,7 @@
         }
         // @api
         function createTemplateLiteralType(head, templateSpans) {
-            var node = createBaseNode(194 /* TemplateLiteralType */);
+            var node = createBaseNode(196 /* TemplateLiteralType */);
             node.head = head;
             node.templateSpans = createNodeArray(templateSpans);
             node.transformFlags = 1 /* ContainsTypeScript */;
@@ -22278,7 +22774,7 @@
         // @api
         function createImportTypeNode(argument, qualifier, typeArguments, isTypeOf) {
             if (isTypeOf === void 0) { isTypeOf = false; }
-            var node = createBaseNode(196 /* ImportType */);
+            var node = createBaseNode(198 /* ImportType */);
             node.argument = argument;
             node.qualifier = qualifier;
             node.typeArguments = typeArguments && parenthesizerRules().parenthesizeTypeArguments(typeArguments);
@@ -22298,7 +22794,7 @@
         }
         // @api
         function createParenthesizedType(type) {
-            var node = createBaseNode(187 /* ParenthesizedType */);
+            var node = createBaseNode(189 /* ParenthesizedType */);
             node.type = type;
             node.transformFlags = 1 /* ContainsTypeScript */;
             return node;
@@ -22311,13 +22807,13 @@
         }
         // @api
         function createThisTypeNode() {
-            var node = createBaseNode(188 /* ThisType */);
+            var node = createBaseNode(190 /* ThisType */);
             node.transformFlags = 1 /* ContainsTypeScript */;
             return node;
         }
         // @api
         function createTypeOperatorNode(operator, type) {
-            var node = createBaseNode(189 /* TypeOperator */);
+            var node = createBaseNode(191 /* TypeOperator */);
             node.operator = operator;
             node.type = parenthesizerRules().parenthesizeMemberOfElementType(type);
             node.transformFlags = 1 /* ContainsTypeScript */;
@@ -22331,7 +22827,7 @@
         }
         // @api
         function createIndexedAccessTypeNode(objectType, indexType) {
-            var node = createBaseNode(190 /* IndexedAccessType */);
+            var node = createBaseNode(192 /* IndexedAccessType */);
             node.objectType = parenthesizerRules().parenthesizeMemberOfElementType(objectType);
             node.indexType = indexType;
             node.transformFlags = 1 /* ContainsTypeScript */;
@@ -22346,7 +22842,7 @@
         }
         // @api
         function createMappedTypeNode(readonlyToken, typeParameter, nameType, questionToken, type) {
-            var node = createBaseNode(191 /* MappedType */);
+            var node = createBaseNode(193 /* MappedType */);
             node.readonlyToken = readonlyToken;
             node.typeParameter = typeParameter;
             node.nameType = nameType;
@@ -22367,7 +22863,7 @@
         }
         // @api
         function createLiteralTypeNode(literal) {
-            var node = createBaseNode(192 /* LiteralType */);
+            var node = createBaseNode(194 /* LiteralType */);
             node.literal = literal;
             node.transformFlags = 1 /* ContainsTypeScript */;
             return node;
@@ -22383,7 +22879,7 @@
         //
         // @api
         function createObjectBindingPattern(elements) {
-            var node = createBaseNode(197 /* ObjectBindingPattern */);
+            var node = createBaseNode(199 /* ObjectBindingPattern */);
             node.elements = createNodeArray(elements);
             node.transformFlags |=
                 propagateChildrenFlags(node.elements) |
@@ -22404,7 +22900,7 @@
         }
         // @api
         function createArrayBindingPattern(elements) {
-            var node = createBaseNode(198 /* ArrayBindingPattern */);
+            var node = createBaseNode(200 /* ArrayBindingPattern */);
             node.elements = createNodeArray(elements);
             node.transformFlags |=
                 propagateChildrenFlags(node.elements) |
@@ -22420,7 +22916,7 @@
         }
         // @api
         function createBindingElement(dotDotDotToken, propertyName, name, initializer) {
-            var node = createBaseBindingLikeDeclaration(199 /* BindingElement */, 
+            var node = createBaseBindingLikeDeclaration(201 /* BindingElement */, 
             /*decorators*/ undefined, 
             /*modifiers*/ undefined, name, initializer && parenthesizerRules().parenthesizeExpressionForDisallowedComma(initializer));
             node.propertyName = asName(propertyName);
@@ -22456,8 +22952,13 @@
         }
         // @api
         function createArrayLiteralExpression(elements, multiLine) {
-            var node = createBaseExpression(200 /* ArrayLiteralExpression */);
-            node.elements = parenthesizerRules().parenthesizeExpressionsOfCommaDelimitedList(createNodeArray(elements));
+            var node = createBaseExpression(202 /* ArrayLiteralExpression */);
+            // Ensure we add a trailing comma for something like `[NumericLiteral(1), NumericLiteral(2), OmittedExpresion]` so that
+            // we end up with `[1, 2, ,]` instead of `[1, 2, ]` otherwise the `OmittedExpression` will just end up being treated like
+            // a trailing comma.
+            var lastElement = elements && ts.lastOrUndefined(elements);
+            var elementsArray = createNodeArray(elements, lastElement && ts.isOmittedExpression(lastElement) ? true : undefined);
+            node.elements = parenthesizerRules().parenthesizeExpressionsOfCommaDelimitedList(elementsArray);
             node.multiLine = multiLine;
             node.transformFlags |= propagateChildrenFlags(node.elements);
             return node;
@@ -22470,7 +22971,7 @@
         }
         // @api
         function createObjectLiteralExpression(properties, multiLine) {
-            var node = createBaseExpression(201 /* ObjectLiteralExpression */);
+            var node = createBaseExpression(203 /* ObjectLiteralExpression */);
             node.properties = createNodeArray(properties);
             node.multiLine = multiLine;
             node.transformFlags |= propagateChildrenFlags(node.properties);
@@ -22484,7 +22985,7 @@
         }
         // @api
         function createPropertyAccessExpression(expression, name) {
-            var node = createBaseExpression(202 /* PropertyAccessExpression */);
+            var node = createBaseExpression(204 /* PropertyAccessExpression */);
             node.expression = parenthesizerRules().parenthesizeLeftSideOfAccess(expression);
             node.name = asName(name);
             node.transformFlags =
@@ -22513,7 +23014,7 @@
         }
         // @api
         function createPropertyAccessChain(expression, questionDotToken, name) {
-            var node = createBaseExpression(202 /* PropertyAccessExpression */);
+            var node = createBaseExpression(204 /* PropertyAccessExpression */);
             node.flags |= 32 /* OptionalChain */;
             node.expression = parenthesizerRules().parenthesizeLeftSideOfAccess(expression);
             node.questionDotToken = questionDotToken;
@@ -22540,7 +23041,7 @@
         }
         // @api
         function createElementAccessExpression(expression, index) {
-            var node = createBaseExpression(203 /* ElementAccessExpression */);
+            var node = createBaseExpression(205 /* ElementAccessExpression */);
             node.expression = parenthesizerRules().parenthesizeLeftSideOfAccess(expression);
             node.argumentExpression = asExpression(index);
             node.transformFlags |=
@@ -22567,7 +23068,7 @@
         }
         // @api
         function createElementAccessChain(expression, questionDotToken, index) {
-            var node = createBaseExpression(203 /* ElementAccessExpression */);
+            var node = createBaseExpression(205 /* ElementAccessExpression */);
             node.flags |= 32 /* OptionalChain */;
             node.expression = parenthesizerRules().parenthesizeLeftSideOfAccess(expression);
             node.questionDotToken = questionDotToken;
@@ -22592,7 +23093,7 @@
         }
         // @api
         function createCallExpression(expression, typeArguments, argumentsArray) {
-            var node = createBaseExpression(204 /* CallExpression */);
+            var node = createBaseExpression(206 /* CallExpression */);
             node.expression = parenthesizerRules().parenthesizeLeftSideOfAccess(expression);
             node.typeArguments = asNodeArray(typeArguments);
             node.arguments = parenthesizerRules().parenthesizeExpressionsOfCommaDelimitedList(createNodeArray(argumentsArray));
@@ -22624,7 +23125,7 @@
         }
         // @api
         function createCallChain(expression, questionDotToken, typeArguments, argumentsArray) {
-            var node = createBaseExpression(204 /* CallExpression */);
+            var node = createBaseExpression(206 /* CallExpression */);
             node.flags |= 32 /* OptionalChain */;
             node.expression = parenthesizerRules().parenthesizeLeftSideOfAccess(expression);
             node.questionDotToken = questionDotToken;
@@ -22656,7 +23157,7 @@
         }
         // @api
         function createNewExpression(expression, typeArguments, argumentsArray) {
-            var node = createBaseExpression(205 /* NewExpression */);
+            var node = createBaseExpression(207 /* NewExpression */);
             node.expression = parenthesizerRules().parenthesizeExpressionOfNew(expression);
             node.typeArguments = asNodeArray(typeArguments);
             node.arguments = argumentsArray ? parenthesizerRules().parenthesizeExpressionsOfCommaDelimitedList(argumentsArray) : undefined;
@@ -22680,7 +23181,7 @@
         }
         // @api
         function createTaggedTemplateExpression(tag, typeArguments, template) {
-            var node = createBaseExpression(206 /* TaggedTemplateExpression */);
+            var node = createBaseExpression(208 /* TaggedTemplateExpression */);
             node.tag = parenthesizerRules().parenthesizeLeftSideOfAccess(tag);
             node.typeArguments = asNodeArray(typeArguments);
             node.template = template;
@@ -22707,7 +23208,7 @@
         }
         // @api
         function createTypeAssertion(type, expression) {
-            var node = createBaseExpression(207 /* TypeAssertionExpression */);
+            var node = createBaseExpression(209 /* TypeAssertionExpression */);
             node.expression = parenthesizerRules().parenthesizeOperandOfPrefixUnary(expression);
             node.type = type;
             node.transformFlags |=
@@ -22725,7 +23226,7 @@
         }
         // @api
         function createParenthesizedExpression(expression) {
-            var node = createBaseExpression(208 /* ParenthesizedExpression */);
+            var node = createBaseExpression(210 /* ParenthesizedExpression */);
             node.expression = expression;
             node.transformFlags = propagateChildFlags(node.expression);
             return node;
@@ -22738,7 +23239,7 @@
         }
         // @api
         function createFunctionExpression(modifiers, asteriskToken, name, typeParameters, parameters, type, body) {
-            var node = createBaseFunctionLikeDeclaration(209 /* FunctionExpression */, 
+            var node = createBaseFunctionLikeDeclaration(211 /* FunctionExpression */, 
             /*decorators*/ undefined, modifiers, name, typeParameters, parameters, type, body);
             node.asteriskToken = asteriskToken;
             node.transformFlags |= propagateChildFlags(node.asteriskToken);
@@ -22772,7 +23273,7 @@
         }
         // @api
         function createArrowFunction(modifiers, typeParameters, parameters, type, equalsGreaterThanToken, body) {
-            var node = createBaseFunctionLikeDeclaration(210 /* ArrowFunction */, 
+            var node = createBaseFunctionLikeDeclaration(212 /* ArrowFunction */, 
             /*decorators*/ undefined, modifiers, 
             /*name*/ undefined, typeParameters, parameters, type, parenthesizerRules().parenthesizeConciseBodyOfArrowFunction(body));
             node.equalsGreaterThanToken = equalsGreaterThanToken !== null && equalsGreaterThanToken !== void 0 ? equalsGreaterThanToken : createToken(38 /* EqualsGreaterThanToken */);
@@ -22780,7 +23281,7 @@
                 propagateChildFlags(node.equalsGreaterThanToken) |
                     512 /* ContainsES2015 */;
             if (ts.modifiersToFlags(node.modifiers) & 256 /* Async */) {
-                node.transformFlags |= 128 /* ContainsES2017 */;
+                node.transformFlags |= 128 /* ContainsES2017 */ | 8192 /* ContainsLexicalThis */;
             }
             return node;
         }
@@ -22797,7 +23298,7 @@
         }
         // @api
         function createDeleteExpression(expression) {
-            var node = createBaseExpression(211 /* DeleteExpression */);
+            var node = createBaseExpression(213 /* DeleteExpression */);
             node.expression = parenthesizerRules().parenthesizeOperandOfPrefixUnary(expression);
             node.transformFlags |= propagateChildFlags(node.expression);
             return node;
@@ -22810,7 +23311,7 @@
         }
         // @api
         function createTypeOfExpression(expression) {
-            var node = createBaseExpression(212 /* TypeOfExpression */);
+            var node = createBaseExpression(214 /* TypeOfExpression */);
             node.expression = parenthesizerRules().parenthesizeOperandOfPrefixUnary(expression);
             node.transformFlags |= propagateChildFlags(node.expression);
             return node;
@@ -22823,7 +23324,7 @@
         }
         // @api
         function createVoidExpression(expression) {
-            var node = createBaseExpression(213 /* VoidExpression */);
+            var node = createBaseExpression(215 /* VoidExpression */);
             node.expression = parenthesizerRules().parenthesizeOperandOfPrefixUnary(expression);
             node.transformFlags |= propagateChildFlags(node.expression);
             return node;
@@ -22836,7 +23337,7 @@
         }
         // @api
         function createAwaitExpression(expression) {
-            var node = createBaseExpression(214 /* AwaitExpression */);
+            var node = createBaseExpression(216 /* AwaitExpression */);
             node.expression = parenthesizerRules().parenthesizeOperandOfPrefixUnary(expression);
             node.transformFlags |=
                 propagateChildFlags(node.expression) |
@@ -22853,10 +23354,18 @@
         }
         // @api
         function createPrefixUnaryExpression(operator, operand) {
-            var node = createBaseExpression(215 /* PrefixUnaryExpression */);
+            var node = createBaseExpression(217 /* PrefixUnaryExpression */);
             node.operator = operator;
             node.operand = parenthesizerRules().parenthesizeOperandOfPrefixUnary(operand);
             node.transformFlags |= propagateChildFlags(node.operand);
+            // Only set this flag for non-generated identifiers and non-"local" names. See the
+            // comment in `visitPreOrPostfixUnaryExpression` in module.ts
+            if ((operator === 45 /* PlusPlusToken */ || operator === 46 /* MinusMinusToken */) &&
+                ts.isIdentifier(node.operand) &&
+                !ts.isGeneratedIdentifier(node.operand) &&
+                !ts.isLocalName(node.operand)) {
+                node.transformFlags |= 67108864 /* ContainsUpdateExpressionForIdentifier */;
+            }
             return node;
         }
         // @api
@@ -22867,10 +23376,17 @@
         }
         // @api
         function createPostfixUnaryExpression(operand, operator) {
-            var node = createBaseExpression(216 /* PostfixUnaryExpression */);
+            var node = createBaseExpression(218 /* PostfixUnaryExpression */);
             node.operator = operator;
             node.operand = parenthesizerRules().parenthesizeOperandOfPostfixUnary(operand);
-            node.transformFlags = propagateChildFlags(node.operand);
+            node.transformFlags |= propagateChildFlags(node.operand);
+            // Only set this flag for non-generated identifiers and non-"local" names. See the
+            // comment in `visitPreOrPostfixUnaryExpression` in module.ts
+            if (ts.isIdentifier(node.operand) &&
+                !ts.isGeneratedIdentifier(node.operand) &&
+                !ts.isLocalName(node.operand)) {
+                node.transformFlags |= 67108864 /* ContainsUpdateExpressionForIdentifier */;
+            }
             return node;
         }
         // @api
@@ -22881,7 +23397,7 @@
         }
         // @api
         function createBinaryExpression(left, operator, right) {
-            var node = createBaseExpression(217 /* BinaryExpression */);
+            var node = createBaseExpression(219 /* BinaryExpression */);
             var operatorToken = asToken(operator);
             var operatorKind = operatorToken.kind;
             node.left = parenthesizerRules().parenthesizeLeftSideOfBinary(operatorKind, left);
@@ -22894,7 +23410,7 @@
             if (operatorKind === 60 /* QuestionQuestionToken */) {
                 node.transformFlags |= 16 /* ContainsES2020 */;
             }
-            else if (operatorKind === 62 /* EqualsToken */) {
+            else if (operatorKind === 63 /* EqualsToken */) {
                 if (ts.isObjectLiteralExpression(node.left)) {
                     node.transformFlags |=
                         512 /* ContainsES2015 */ |
@@ -22909,7 +23425,7 @@
                             propagateAssignmentPatternFlags(node.left);
                 }
             }
-            else if (operatorKind === 42 /* AsteriskAsteriskToken */ || operatorKind === 66 /* AsteriskAsteriskEqualsToken */) {
+            else if (operatorKind === 42 /* AsteriskAsteriskToken */ || operatorKind === 67 /* AsteriskAsteriskEqualsToken */) {
                 node.transformFlags |= 256 /* ContainsES2016 */;
             }
             else if (ts.isLogicalOrCoalescingAssignmentOperator(operatorKind)) {
@@ -22950,7 +23466,7 @@
         }
         // @api
         function createConditionalExpression(condition, questionToken, whenTrue, colonToken, whenFalse) {
-            var node = createBaseExpression(218 /* ConditionalExpression */);
+            var node = createBaseExpression(220 /* ConditionalExpression */);
             node.condition = parenthesizerRules().parenthesizeConditionOfConditionalExpression(condition);
             node.questionToken = questionToken !== null && questionToken !== void 0 ? questionToken : createToken(57 /* QuestionToken */);
             node.whenTrue = parenthesizerRules().parenthesizeBranchOfConditionalExpression(whenTrue);
@@ -22976,7 +23492,7 @@
         }
         // @api
         function createTemplateExpression(head, templateSpans) {
-            var node = createBaseExpression(219 /* TemplateExpression */);
+            var node = createBaseExpression(221 /* TemplateExpression */);
             node.head = head;
             node.templateSpans = createNodeArray(templateSpans);
             node.transformFlags |=
@@ -23046,7 +23562,7 @@
         // @api
         function createYieldExpression(asteriskToken, expression) {
             ts.Debug.assert(!asteriskToken || !!expression, "A `YieldExpression` with an asteriskToken must have an expression.");
-            var node = createBaseExpression(220 /* YieldExpression */);
+            var node = createBaseExpression(222 /* YieldExpression */);
             node.expression = expression && parenthesizerRules().parenthesizeExpressionForDisallowedComma(expression);
             node.asteriskToken = asteriskToken;
             node.transformFlags |=
@@ -23066,7 +23582,7 @@
         }
         // @api
         function createSpreadElement(expression) {
-            var node = createBaseExpression(221 /* SpreadElement */);
+            var node = createBaseExpression(223 /* SpreadElement */);
             node.expression = parenthesizerRules().parenthesizeExpressionForDisallowedComma(expression);
             node.transformFlags |=
                 propagateChildFlags(node.expression) |
@@ -23082,7 +23598,7 @@
         }
         // @api
         function createClassExpression(decorators, modifiers, name, typeParameters, heritageClauses, members) {
-            var node = createBaseClassLikeDeclaration(222 /* ClassExpression */, decorators, modifiers, name, typeParameters, heritageClauses, members);
+            var node = createBaseClassLikeDeclaration(224 /* ClassExpression */, decorators, modifiers, name, typeParameters, heritageClauses, members);
             node.transformFlags |= 512 /* ContainsES2015 */;
             return node;
         }
@@ -23099,11 +23615,11 @@
         }
         // @api
         function createOmittedExpression() {
-            return createBaseExpression(223 /* OmittedExpression */);
+            return createBaseExpression(225 /* OmittedExpression */);
         }
         // @api
         function createExpressionWithTypeArguments(expression, typeArguments) {
-            var node = createBaseNode(224 /* ExpressionWithTypeArguments */);
+            var node = createBaseNode(226 /* ExpressionWithTypeArguments */);
             node.expression = parenthesizerRules().parenthesizeLeftSideOfAccess(expression);
             node.typeArguments = typeArguments && parenthesizerRules().parenthesizeTypeArguments(typeArguments);
             node.transformFlags |=
@@ -23121,7 +23637,7 @@
         }
         // @api
         function createAsExpression(expression, type) {
-            var node = createBaseExpression(225 /* AsExpression */);
+            var node = createBaseExpression(227 /* AsExpression */);
             node.expression = expression;
             node.type = type;
             node.transformFlags |=
@@ -23139,7 +23655,7 @@
         }
         // @api
         function createNonNullExpression(expression) {
-            var node = createBaseExpression(226 /* NonNullExpression */);
+            var node = createBaseExpression(228 /* NonNullExpression */);
             node.expression = parenthesizerRules().parenthesizeLeftSideOfAccess(expression);
             node.transformFlags |=
                 propagateChildFlags(node.expression) |
@@ -23157,7 +23673,7 @@
         }
         // @api
         function createNonNullChain(expression) {
-            var node = createBaseExpression(226 /* NonNullExpression */);
+            var node = createBaseExpression(228 /* NonNullExpression */);
             node.flags |= 32 /* OptionalChain */;
             node.expression = parenthesizerRules().parenthesizeLeftSideOfAccess(expression);
             node.transformFlags |=
@@ -23174,15 +23690,15 @@
         }
         // @api
         function createMetaProperty(keywordToken, name) {
-            var node = createBaseExpression(227 /* MetaProperty */);
+            var node = createBaseExpression(229 /* MetaProperty */);
             node.keywordToken = keywordToken;
             node.name = name;
             node.transformFlags |= propagateChildFlags(node.name);
             switch (keywordToken) {
-                case 102 /* NewKeyword */:
+                case 103 /* NewKeyword */:
                     node.transformFlags |= 512 /* ContainsES2015 */;
                     break;
-                case 99 /* ImportKeyword */:
+                case 100 /* ImportKeyword */:
                     node.transformFlags |= 4 /* ContainsESNext */;
                     break;
                 default:
@@ -23201,7 +23717,7 @@
         //
         // @api
         function createTemplateSpan(expression, literal) {
-            var node = createBaseNode(229 /* TemplateSpan */);
+            var node = createBaseNode(231 /* TemplateSpan */);
             node.expression = expression;
             node.literal = literal;
             node.transformFlags |=
@@ -23219,7 +23735,7 @@
         }
         // @api
         function createSemicolonClassElement() {
-            var node = createBaseNode(230 /* SemicolonClassElement */);
+            var node = createBaseNode(232 /* SemicolonClassElement */);
             node.transformFlags |= 512 /* ContainsES2015 */;
             return node;
         }
@@ -23228,7 +23744,7 @@
         //
         // @api
         function createBlock(statements, multiLine) {
-            var node = createBaseNode(231 /* Block */);
+            var node = createBaseNode(233 /* Block */);
             node.statements = createNodeArray(statements);
             node.multiLine = multiLine;
             node.transformFlags |= propagateChildrenFlags(node.statements);
@@ -23242,7 +23758,7 @@
         }
         // @api
         function createVariableStatement(modifiers, declarationList) {
-            var node = createBaseDeclaration(233 /* VariableStatement */, /*decorators*/ undefined, modifiers);
+            var node = createBaseDeclaration(235 /* VariableStatement */, /*decorators*/ undefined, modifiers);
             node.declarationList = ts.isArray(declarationList) ? createVariableDeclarationList(declarationList) : declarationList;
             node.transformFlags |=
                 propagateChildFlags(node.declarationList);
@@ -23260,11 +23776,11 @@
         }
         // @api
         function createEmptyStatement() {
-            return createBaseNode(232 /* EmptyStatement */);
+            return createBaseNode(234 /* EmptyStatement */);
         }
         // @api
         function createExpressionStatement(expression) {
-            var node = createBaseNode(234 /* ExpressionStatement */);
+            var node = createBaseNode(236 /* ExpressionStatement */);
             node.expression = parenthesizerRules().parenthesizeExpressionOfExpressionStatement(expression);
             node.transformFlags |= propagateChildFlags(node.expression);
             return node;
@@ -23277,7 +23793,7 @@
         }
         // @api
         function createIfStatement(expression, thenStatement, elseStatement) {
-            var node = createBaseNode(235 /* IfStatement */);
+            var node = createBaseNode(237 /* IfStatement */);
             node.expression = expression;
             node.thenStatement = asEmbeddedStatement(thenStatement);
             node.elseStatement = asEmbeddedStatement(elseStatement);
@@ -23297,7 +23813,7 @@
         }
         // @api
         function createDoStatement(statement, expression) {
-            var node = createBaseNode(236 /* DoStatement */);
+            var node = createBaseNode(238 /* DoStatement */);
             node.statement = asEmbeddedStatement(statement);
             node.expression = expression;
             node.transformFlags |=
@@ -23314,7 +23830,7 @@
         }
         // @api
         function createWhileStatement(expression, statement) {
-            var node = createBaseNode(237 /* WhileStatement */);
+            var node = createBaseNode(239 /* WhileStatement */);
             node.expression = expression;
             node.statement = asEmbeddedStatement(statement);
             node.transformFlags |=
@@ -23331,7 +23847,7 @@
         }
         // @api
         function createForStatement(initializer, condition, incrementor, statement) {
-            var node = createBaseNode(238 /* ForStatement */);
+            var node = createBaseNode(240 /* ForStatement */);
             node.initializer = initializer;
             node.condition = condition;
             node.incrementor = incrementor;
@@ -23354,7 +23870,7 @@
         }
         // @api
         function createForInStatement(initializer, expression, statement) {
-            var node = createBaseNode(239 /* ForInStatement */);
+            var node = createBaseNode(241 /* ForInStatement */);
             node.initializer = initializer;
             node.expression = expression;
             node.statement = asEmbeddedStatement(statement);
@@ -23374,7 +23890,7 @@
         }
         // @api
         function createForOfStatement(awaitModifier, initializer, expression, statement) {
-            var node = createBaseNode(240 /* ForOfStatement */);
+            var node = createBaseNode(242 /* ForOfStatement */);
             node.awaitModifier = awaitModifier;
             node.initializer = initializer;
             node.expression = parenthesizerRules().parenthesizeExpressionForDisallowedComma(expression);
@@ -23400,7 +23916,7 @@
         }
         // @api
         function createContinueStatement(label) {
-            var node = createBaseNode(241 /* ContinueStatement */);
+            var node = createBaseNode(243 /* ContinueStatement */);
             node.label = asName(label);
             node.transformFlags |=
                 propagateChildFlags(node.label) |
@@ -23415,7 +23931,7 @@
         }
         // @api
         function createBreakStatement(label) {
-            var node = createBaseNode(242 /* BreakStatement */);
+            var node = createBaseNode(244 /* BreakStatement */);
             node.label = asName(label);
             node.transformFlags |=
                 propagateChildFlags(node.label) |
@@ -23430,7 +23946,7 @@
         }
         // @api
         function createReturnStatement(expression) {
-            var node = createBaseNode(243 /* ReturnStatement */);
+            var node = createBaseNode(245 /* ReturnStatement */);
             node.expression = expression;
             // return in an ES2018 async generator must be awaited
             node.transformFlags |=
@@ -23447,7 +23963,7 @@
         }
         // @api
         function createWithStatement(expression, statement) {
-            var node = createBaseNode(244 /* WithStatement */);
+            var node = createBaseNode(246 /* WithStatement */);
             node.expression = expression;
             node.statement = asEmbeddedStatement(statement);
             node.transformFlags |=
@@ -23464,7 +23980,7 @@
         }
         // @api
         function createSwitchStatement(expression, caseBlock) {
-            var node = createBaseNode(245 /* SwitchStatement */);
+            var node = createBaseNode(247 /* SwitchStatement */);
             node.expression = parenthesizerRules().parenthesizeExpressionForDisallowedComma(expression);
             node.caseBlock = caseBlock;
             node.transformFlags |=
@@ -23481,7 +23997,7 @@
         }
         // @api
         function createLabeledStatement(label, statement) {
-            var node = createBaseNode(246 /* LabeledStatement */);
+            var node = createBaseNode(248 /* LabeledStatement */);
             node.label = asName(label);
             node.statement = asEmbeddedStatement(statement);
             node.transformFlags |=
@@ -23498,7 +24014,7 @@
         }
         // @api
         function createThrowStatement(expression) {
-            var node = createBaseNode(247 /* ThrowStatement */);
+            var node = createBaseNode(249 /* ThrowStatement */);
             node.expression = expression;
             node.transformFlags |= propagateChildFlags(node.expression);
             return node;
@@ -23511,7 +24027,7 @@
         }
         // @api
         function createTryStatement(tryBlock, catchClause, finallyBlock) {
-            var node = createBaseNode(248 /* TryStatement */);
+            var node = createBaseNode(250 /* TryStatement */);
             node.tryBlock = tryBlock;
             node.catchClause = catchClause;
             node.finallyBlock = finallyBlock;
@@ -23531,11 +24047,11 @@
         }
         // @api
         function createDebuggerStatement() {
-            return createBaseNode(249 /* DebuggerStatement */);
+            return createBaseNode(251 /* DebuggerStatement */);
         }
         // @api
         function createVariableDeclaration(name, exclamationToken, type, initializer) {
-            var node = createBaseVariableLikeDeclaration(250 /* VariableDeclaration */, 
+            var node = createBaseVariableLikeDeclaration(252 /* VariableDeclaration */, 
             /*decorators*/ undefined, 
             /*modifiers*/ undefined, name, type, initializer && parenthesizerRules().parenthesizeExpressionForDisallowedComma(initializer));
             node.exclamationToken = exclamationToken;
@@ -23557,7 +24073,7 @@
         // @api
         function createVariableDeclarationList(declarations, flags) {
             if (flags === void 0) { flags = 0 /* None */; }
-            var node = createBaseNode(251 /* VariableDeclarationList */);
+            var node = createBaseNode(253 /* VariableDeclarationList */);
             node.flags |= flags & 3 /* BlockScoped */;
             node.declarations = createNodeArray(declarations);
             node.transformFlags |=
@@ -23578,7 +24094,7 @@
         }
         // @api
         function createFunctionDeclaration(decorators, modifiers, asteriskToken, name, typeParameters, parameters, type, body) {
-            var node = createBaseFunctionLikeDeclaration(252 /* FunctionDeclaration */, decorators, modifiers, name, typeParameters, parameters, type, body);
+            var node = createBaseFunctionLikeDeclaration(254 /* FunctionDeclaration */, decorators, modifiers, name, typeParameters, parameters, type, body);
             node.asteriskToken = asteriskToken;
             if (!node.body || ts.modifiersToFlags(node.modifiers) & 2 /* Ambient */) {
                 node.transformFlags = 1 /* ContainsTypeScript */;
@@ -23616,7 +24132,7 @@
         }
         // @api
         function createClassDeclaration(decorators, modifiers, name, typeParameters, heritageClauses, members) {
-            var node = createBaseClassLikeDeclaration(253 /* ClassDeclaration */, decorators, modifiers, name, typeParameters, heritageClauses, members);
+            var node = createBaseClassLikeDeclaration(255 /* ClassDeclaration */, decorators, modifiers, name, typeParameters, heritageClauses, members);
             if (ts.modifiersToFlags(node.modifiers) & 2 /* Ambient */) {
                 node.transformFlags = 1 /* ContainsTypeScript */;
             }
@@ -23641,7 +24157,7 @@
         }
         // @api
         function createInterfaceDeclaration(decorators, modifiers, name, typeParameters, heritageClauses, members) {
-            var node = createBaseInterfaceOrClassLikeDeclaration(254 /* InterfaceDeclaration */, decorators, modifiers, name, typeParameters, heritageClauses);
+            var node = createBaseInterfaceOrClassLikeDeclaration(256 /* InterfaceDeclaration */, decorators, modifiers, name, typeParameters, heritageClauses);
             node.members = createNodeArray(members);
             node.transformFlags = 1 /* ContainsTypeScript */;
             return node;
@@ -23659,7 +24175,7 @@
         }
         // @api
         function createTypeAliasDeclaration(decorators, modifiers, name, typeParameters, type) {
-            var node = createBaseGenericNamedDeclaration(255 /* TypeAliasDeclaration */, decorators, modifiers, name, typeParameters);
+            var node = createBaseGenericNamedDeclaration(257 /* TypeAliasDeclaration */, decorators, modifiers, name, typeParameters);
             node.type = type;
             node.transformFlags = 1 /* ContainsTypeScript */;
             return node;
@@ -23676,7 +24192,7 @@
         }
         // @api
         function createEnumDeclaration(decorators, modifiers, name, members) {
-            var node = createBaseNamedDeclaration(256 /* EnumDeclaration */, decorators, modifiers, name);
+            var node = createBaseNamedDeclaration(258 /* EnumDeclaration */, decorators, modifiers, name);
             node.members = createNodeArray(members);
             node.transformFlags |=
                 propagateChildrenFlags(node.members) |
@@ -23696,7 +24212,7 @@
         // @api
         function createModuleDeclaration(decorators, modifiers, name, body, flags) {
             if (flags === void 0) { flags = 0 /* None */; }
-            var node = createBaseDeclaration(257 /* ModuleDeclaration */, decorators, modifiers);
+            var node = createBaseDeclaration(259 /* ModuleDeclaration */, decorators, modifiers);
             node.flags |= flags & (16 /* Namespace */ | 4 /* NestedNamespace */ | 1024 /* GlobalAugmentation */);
             node.name = name;
             node.body = body;
@@ -23723,7 +24239,7 @@
         }
         // @api
         function createModuleBlock(statements) {
-            var node = createBaseNode(258 /* ModuleBlock */);
+            var node = createBaseNode(260 /* ModuleBlock */);
             node.statements = createNodeArray(statements);
             node.transformFlags |= propagateChildrenFlags(node.statements);
             return node;
@@ -23736,7 +24252,7 @@
         }
         // @api
         function createCaseBlock(clauses) {
-            var node = createBaseNode(259 /* CaseBlock */);
+            var node = createBaseNode(261 /* CaseBlock */);
             node.clauses = createNodeArray(clauses);
             node.transformFlags |= propagateChildrenFlags(node.clauses);
             return node;
@@ -23749,7 +24265,7 @@
         }
         // @api
         function createNamespaceExportDeclaration(name) {
-            var node = createBaseNamedDeclaration(260 /* NamespaceExportDeclaration */, 
+            var node = createBaseNamedDeclaration(262 /* NamespaceExportDeclaration */, 
             /*decorators*/ undefined, 
             /*modifiers*/ undefined, name);
             node.transformFlags = 1 /* ContainsTypeScript */;
@@ -23763,7 +24279,7 @@
         }
         // @api
         function createImportEqualsDeclaration(decorators, modifiers, isTypeOnly, name, moduleReference) {
-            var node = createBaseNamedDeclaration(261 /* ImportEqualsDeclaration */, decorators, modifiers, name);
+            var node = createBaseNamedDeclaration(263 /* ImportEqualsDeclaration */, decorators, modifiers, name);
             node.isTypeOnly = isTypeOnly;
             node.moduleReference = moduleReference;
             node.transformFlags |= propagateChildFlags(node.moduleReference);
@@ -23784,7 +24300,7 @@
         }
         // @api
         function createImportDeclaration(decorators, modifiers, importClause, moduleSpecifier) {
-            var node = createBaseDeclaration(262 /* ImportDeclaration */, decorators, modifiers);
+            var node = createBaseDeclaration(264 /* ImportDeclaration */, decorators, modifiers);
             node.importClause = importClause;
             node.moduleSpecifier = moduleSpecifier;
             node.transformFlags |=
@@ -23804,7 +24320,7 @@
         }
         // @api
         function createImportClause(isTypeOnly, name, namedBindings) {
-            var node = createBaseNode(263 /* ImportClause */);
+            var node = createBaseNode(265 /* ImportClause */);
             node.isTypeOnly = isTypeOnly;
             node.name = name;
             node.namedBindings = namedBindings;
@@ -23827,7 +24343,7 @@
         }
         // @api
         function createNamespaceImport(name) {
-            var node = createBaseNode(264 /* NamespaceImport */);
+            var node = createBaseNode(266 /* NamespaceImport */);
             node.name = name;
             node.transformFlags |= propagateChildFlags(node.name);
             node.transformFlags &= ~16777216 /* ContainsPossibleTopLevelAwait */; // always parsed in an Await context
@@ -23841,7 +24357,7 @@
         }
         // @api
         function createNamespaceExport(name) {
-            var node = createBaseNode(270 /* NamespaceExport */);
+            var node = createBaseNode(272 /* NamespaceExport */);
             node.name = name;
             node.transformFlags |=
                 propagateChildFlags(node.name) |
@@ -23857,7 +24373,7 @@
         }
         // @api
         function createNamedImports(elements) {
-            var node = createBaseNode(265 /* NamedImports */);
+            var node = createBaseNode(267 /* NamedImports */);
             node.elements = createNodeArray(elements);
             node.transformFlags |= propagateChildrenFlags(node.elements);
             node.transformFlags &= ~16777216 /* ContainsPossibleTopLevelAwait */; // always parsed in an Await context
@@ -23871,7 +24387,7 @@
         }
         // @api
         function createImportSpecifier(propertyName, name) {
-            var node = createBaseNode(266 /* ImportSpecifier */);
+            var node = createBaseNode(268 /* ImportSpecifier */);
             node.propertyName = propertyName;
             node.name = name;
             node.transformFlags |=
@@ -23889,10 +24405,10 @@
         }
         // @api
         function createExportAssignment(decorators, modifiers, isExportEquals, expression) {
-            var node = createBaseDeclaration(267 /* ExportAssignment */, decorators, modifiers);
+            var node = createBaseDeclaration(269 /* ExportAssignment */, decorators, modifiers);
             node.isExportEquals = isExportEquals;
             node.expression = isExportEquals
-                ? parenthesizerRules().parenthesizeRightSideOfBinary(62 /* EqualsToken */, /*leftSide*/ undefined, expression)
+                ? parenthesizerRules().parenthesizeRightSideOfBinary(63 /* EqualsToken */, /*leftSide*/ undefined, expression)
                 : parenthesizerRules().parenthesizeExpressionOfExportDefault(expression);
             node.transformFlags |= propagateChildFlags(node.expression);
             node.transformFlags &= ~16777216 /* ContainsPossibleTopLevelAwait */; // always parsed in an Await context
@@ -23908,7 +24424,7 @@
         }
         // @api
         function createExportDeclaration(decorators, modifiers, isTypeOnly, exportClause, moduleSpecifier) {
-            var node = createBaseDeclaration(268 /* ExportDeclaration */, decorators, modifiers);
+            var node = createBaseDeclaration(270 /* ExportDeclaration */, decorators, modifiers);
             node.isTypeOnly = isTypeOnly;
             node.exportClause = exportClause;
             node.moduleSpecifier = moduleSpecifier;
@@ -23930,7 +24446,7 @@
         }
         // @api
         function createNamedExports(elements) {
-            var node = createBaseNode(269 /* NamedExports */);
+            var node = createBaseNode(271 /* NamedExports */);
             node.elements = createNodeArray(elements);
             node.transformFlags |= propagateChildrenFlags(node.elements);
             node.transformFlags &= ~16777216 /* ContainsPossibleTopLevelAwait */; // always parsed in an Await context
@@ -23944,7 +24460,7 @@
         }
         // @api
         function createExportSpecifier(propertyName, name) {
-            var node = createBaseNode(271 /* ExportSpecifier */);
+            var node = createBaseNode(273 /* ExportSpecifier */);
             node.propertyName = asName(propertyName);
             node.name = asName(name);
             node.transformFlags |=
@@ -23962,7 +24478,7 @@
         }
         // @api
         function createMissingDeclaration() {
-            var node = createBaseDeclaration(272 /* MissingDeclaration */, 
+            var node = createBaseDeclaration(274 /* MissingDeclaration */, 
             /*decorators*/ undefined, 
             /*modifiers*/ undefined);
             return node;
@@ -23972,7 +24488,7 @@
         //
         // @api
         function createExternalModuleReference(expression) {
-            var node = createBaseNode(273 /* ExternalModuleReference */);
+            var node = createBaseNode(275 /* ExternalModuleReference */);
             node.expression = expression;
             node.transformFlags |= propagateChildFlags(node.expression);
             node.transformFlags &= ~16777216 /* ContainsPossibleTopLevelAwait */; // always parsed in an Await context
@@ -24017,7 +24533,7 @@
         }
         // @api
         function createJSDocFunctionType(parameters, type) {
-            var node = createBaseSignatureDeclaration(309 /* JSDocFunctionType */, 
+            var node = createBaseSignatureDeclaration(312 /* JSDocFunctionType */, 
             /*decorators*/ undefined, 
             /*modifiers*/ undefined, 
             /*name*/ undefined, 
@@ -24034,7 +24550,7 @@
         // @api
         function createJSDocTypeLiteral(propertyTags, isArrayType) {
             if (isArrayType === void 0) { isArrayType = false; }
-            var node = createBaseNode(314 /* JSDocTypeLiteral */);
+            var node = createBaseNode(317 /* JSDocTypeLiteral */);
             node.jsDocPropertyTags = asNodeArray(propertyTags);
             node.isArrayType = isArrayType;
             return node;
@@ -24048,7 +24564,7 @@
         }
         // @api
         function createJSDocTypeExpression(type) {
-            var node = createBaseNode(302 /* JSDocTypeExpression */);
+            var node = createBaseNode(304 /* JSDocTypeExpression */);
             node.type = type;
             return node;
         }
@@ -24060,7 +24576,7 @@
         }
         // @api
         function createJSDocSignature(typeParameters, parameters, type) {
-            var node = createBaseNode(315 /* JSDocSignature */);
+            var node = createBaseNode(318 /* JSDocSignature */);
             node.typeParameters = asNodeArray(typeParameters);
             node.parameters = createNodeArray(parameters);
             node.type = type;
@@ -24089,7 +24605,7 @@
         }
         // @api
         function createJSDocTemplateTag(tagName, constraint, typeParameters, comment) {
-            var node = createBaseJSDocTag(334 /* JSDocTemplateTag */, tagName !== null && tagName !== void 0 ? tagName : createIdentifier("template"), comment);
+            var node = createBaseJSDocTag(339 /* JSDocTemplateTag */, tagName !== null && tagName !== void 0 ? tagName : createIdentifier("template"), comment);
             node.constraint = constraint;
             node.typeParameters = createNodeArray(typeParameters);
             return node;
@@ -24106,7 +24622,7 @@
         }
         // @api
         function createJSDocTypedefTag(tagName, typeExpression, fullName, comment) {
-            var node = createBaseJSDocTag(335 /* JSDocTypedefTag */, tagName !== null && tagName !== void 0 ? tagName : createIdentifier("typedef"), comment);
+            var node = createBaseJSDocTag(340 /* JSDocTypedefTag */, tagName !== null && tagName !== void 0 ? tagName : createIdentifier("typedef"), comment);
             node.typeExpression = typeExpression;
             node.fullName = fullName;
             node.name = ts.getJSDocTypeAliasName(fullName);
@@ -24124,7 +24640,7 @@
         }
         // @api
         function createJSDocParameterTag(tagName, name, isBracketed, typeExpression, isNameFirst, comment) {
-            var node = createBaseJSDocTag(330 /* JSDocParameterTag */, tagName !== null && tagName !== void 0 ? tagName : createIdentifier("param"), comment);
+            var node = createBaseJSDocTag(335 /* JSDocParameterTag */, tagName !== null && tagName !== void 0 ? tagName : createIdentifier("param"), comment);
             node.typeExpression = typeExpression;
             node.name = name;
             node.isNameFirst = !!isNameFirst;
@@ -24145,7 +24661,7 @@
         }
         // @api
         function createJSDocPropertyTag(tagName, name, isBracketed, typeExpression, isNameFirst, comment) {
-            var node = createBaseJSDocTag(337 /* JSDocPropertyTag */, tagName !== null && tagName !== void 0 ? tagName : createIdentifier("prop"), comment);
+            var node = createBaseJSDocTag(342 /* JSDocPropertyTag */, tagName !== null && tagName !== void 0 ? tagName : createIdentifier("prop"), comment);
             node.typeExpression = typeExpression;
             node.name = name;
             node.isNameFirst = !!isNameFirst;
@@ -24166,7 +24682,7 @@
         }
         // @api
         function createJSDocCallbackTag(tagName, typeExpression, fullName, comment) {
-            var node = createBaseJSDocTag(328 /* JSDocCallbackTag */, tagName !== null && tagName !== void 0 ? tagName : createIdentifier("callback"), comment);
+            var node = createBaseJSDocTag(333 /* JSDocCallbackTag */, tagName !== null && tagName !== void 0 ? tagName : createIdentifier("callback"), comment);
             node.typeExpression = typeExpression;
             node.fullName = fullName;
             node.name = ts.getJSDocTypeAliasName(fullName);
@@ -24184,7 +24700,7 @@
         }
         // @api
         function createJSDocAugmentsTag(tagName, className, comment) {
-            var node = createBaseJSDocTag(318 /* JSDocAugmentsTag */, tagName !== null && tagName !== void 0 ? tagName : createIdentifier("augments"), comment);
+            var node = createBaseJSDocTag(323 /* JSDocAugmentsTag */, tagName !== null && tagName !== void 0 ? tagName : createIdentifier("augments"), comment);
             node.class = className;
             return node;
         }
@@ -24199,13 +24715,13 @@
         }
         // @api
         function createJSDocImplementsTag(tagName, className, comment) {
-            var node = createBaseJSDocTag(319 /* JSDocImplementsTag */, tagName !== null && tagName !== void 0 ? tagName : createIdentifier("implements"), comment);
+            var node = createBaseJSDocTag(324 /* JSDocImplementsTag */, tagName !== null && tagName !== void 0 ? tagName : createIdentifier("implements"), comment);
             node.class = className;
             return node;
         }
         // @api
         function createJSDocSeeTag(tagName, name, comment) {
-            var node = createBaseJSDocTag(336 /* JSDocSeeTag */, tagName !== null && tagName !== void 0 ? tagName : createIdentifier("see"), comment);
+            var node = createBaseJSDocTag(341 /* JSDocSeeTag */, tagName !== null && tagName !== void 0 ? tagName : createIdentifier("see"), comment);
             node.name = name;
             return node;
         }
@@ -24219,7 +24735,7 @@
         }
         // @api
         function createJSDocNameReference(name) {
-            var node = createBaseNode(303 /* JSDocNameReference */);
+            var node = createBaseNode(305 /* JSDocNameReference */);
             node.name = name;
             return node;
         }
@@ -24230,8 +24746,25 @@
                 : node;
         }
         // @api
+        function createJSDocMemberName(left, right) {
+            var node = createBaseNode(306 /* JSDocMemberName */);
+            node.left = left;
+            node.right = right;
+            node.transformFlags |=
+                propagateChildFlags(node.left) |
+                    propagateChildFlags(node.right);
+            return node;
+        }
+        // @api
+        function updateJSDocMemberName(node, left, right) {
+            return node.left !== left
+                || node.right !== right
+                ? update(createJSDocMemberName(left, right), node)
+                : node;
+        }
+        // @api
         function createJSDocLink(name, text) {
-            var node = createBaseNode(316 /* JSDocLink */);
+            var node = createBaseNode(319 /* JSDocLink */);
             node.name = name;
             node.text = text;
             return node;
@@ -24243,6 +24776,32 @@
                 : node;
         }
         // @api
+        function createJSDocLinkCode(name, text) {
+            var node = createBaseNode(320 /* JSDocLinkCode */);
+            node.name = name;
+            node.text = text;
+            return node;
+        }
+        // @api
+        function updateJSDocLinkCode(node, name, text) {
+            return node.name !== name
+                ? update(createJSDocLinkCode(name, text), node)
+                : node;
+        }
+        // @api
+        function createJSDocLinkPlain(name, text) {
+            var node = createBaseNode(321 /* JSDocLinkPlain */);
+            node.name = name;
+            node.text = text;
+            return node;
+        }
+        // @api
+        function updateJSDocLinkPlain(node, name, text) {
+            return node.name !== name
+                ? update(createJSDocLinkPlain(name, text), node)
+                : node;
+        }
+        // @api
         function updateJSDocImplementsTag(node, tagName, className, comment) {
             if (tagName === void 0) { tagName = getDefaultTagName(node); }
             return node.tagName !== tagName
@@ -24303,7 +24862,7 @@
         }
         // @api
         function createJSDocUnknownTag(tagName, comment) {
-            var node = createBaseJSDocTag(317 /* JSDocTag */, tagName, comment);
+            var node = createBaseJSDocTag(322 /* JSDocTag */, tagName, comment);
             return node;
         }
         // @api
@@ -24315,7 +24874,7 @@
         }
         // @api
         function createJSDocText(text) {
-            var node = createBaseNode(313 /* JSDocText */);
+            var node = createBaseNode(316 /* JSDocText */);
             node.text = text;
             return node;
         }
@@ -24327,7 +24886,7 @@
         }
         // @api
         function createJSDocComment(comment, tags) {
-            var node = createBaseNode(312 /* JSDocComment */);
+            var node = createBaseNode(315 /* JSDocComment */);
             node.comment = comment;
             node.tags = asNodeArray(tags);
             return node;
@@ -24344,7 +24903,7 @@
         //
         // @api
         function createJsxElement(openingElement, children, closingElement) {
-            var node = createBaseNode(274 /* JsxElement */);
+            var node = createBaseNode(276 /* JsxElement */);
             node.openingElement = openingElement;
             node.children = createNodeArray(children);
             node.closingElement = closingElement;
@@ -24365,7 +24924,7 @@
         }
         // @api
         function createJsxSelfClosingElement(tagName, typeArguments, attributes) {
-            var node = createBaseNode(275 /* JsxSelfClosingElement */);
+            var node = createBaseNode(277 /* JsxSelfClosingElement */);
             node.tagName = tagName;
             node.typeArguments = asNodeArray(typeArguments);
             node.attributes = attributes;
@@ -24389,7 +24948,7 @@
         }
         // @api
         function createJsxOpeningElement(tagName, typeArguments, attributes) {
-            var node = createBaseNode(276 /* JsxOpeningElement */);
+            var node = createBaseNode(278 /* JsxOpeningElement */);
             node.tagName = tagName;
             node.typeArguments = asNodeArray(typeArguments);
             node.attributes = attributes;
@@ -24413,7 +24972,7 @@
         }
         // @api
         function createJsxClosingElement(tagName) {
-            var node = createBaseNode(277 /* JsxClosingElement */);
+            var node = createBaseNode(279 /* JsxClosingElement */);
             node.tagName = tagName;
             node.transformFlags |=
                 propagateChildFlags(node.tagName) |
@@ -24428,7 +24987,7 @@
         }
         // @api
         function createJsxFragment(openingFragment, children, closingFragment) {
-            var node = createBaseNode(278 /* JsxFragment */);
+            var node = createBaseNode(280 /* JsxFragment */);
             node.openingFragment = openingFragment;
             node.children = createNodeArray(children);
             node.closingFragment = closingFragment;
@@ -24464,19 +25023,19 @@
         }
         // @api
         function createJsxOpeningFragment() {
-            var node = createBaseNode(279 /* JsxOpeningFragment */);
+            var node = createBaseNode(281 /* JsxOpeningFragment */);
             node.transformFlags |= 2 /* ContainsJsx */;
             return node;
         }
         // @api
         function createJsxJsxClosingFragment() {
-            var node = createBaseNode(280 /* JsxClosingFragment */);
+            var node = createBaseNode(282 /* JsxClosingFragment */);
             node.transformFlags |= 2 /* ContainsJsx */;
             return node;
         }
         // @api
         function createJsxAttribute(name, initializer) {
-            var node = createBaseNode(281 /* JsxAttribute */);
+            var node = createBaseNode(283 /* JsxAttribute */);
             node.name = name;
             node.initializer = initializer;
             node.transformFlags |=
@@ -24494,7 +25053,7 @@
         }
         // @api
         function createJsxAttributes(properties) {
-            var node = createBaseNode(282 /* JsxAttributes */);
+            var node = createBaseNode(284 /* JsxAttributes */);
             node.properties = createNodeArray(properties);
             node.transformFlags |=
                 propagateChildrenFlags(node.properties) |
@@ -24509,7 +25068,7 @@
         }
         // @api
         function createJsxSpreadAttribute(expression) {
-            var node = createBaseNode(283 /* JsxSpreadAttribute */);
+            var node = createBaseNode(285 /* JsxSpreadAttribute */);
             node.expression = expression;
             node.transformFlags |=
                 propagateChildFlags(node.expression) |
@@ -24524,7 +25083,7 @@
         }
         // @api
         function createJsxExpression(dotDotDotToken, expression) {
-            var node = createBaseNode(284 /* JsxExpression */);
+            var node = createBaseNode(286 /* JsxExpression */);
             node.dotDotDotToken = dotDotDotToken;
             node.expression = expression;
             node.transformFlags |=
@@ -24544,7 +25103,7 @@
         //
         // @api
         function createCaseClause(expression, statements) {
-            var node = createBaseNode(285 /* CaseClause */);
+            var node = createBaseNode(287 /* CaseClause */);
             node.expression = parenthesizerRules().parenthesizeExpressionForDisallowedComma(expression);
             node.statements = createNodeArray(statements);
             node.transformFlags |=
@@ -24561,7 +25120,7 @@
         }
         // @api
         function createDefaultClause(statements) {
-            var node = createBaseNode(286 /* DefaultClause */);
+            var node = createBaseNode(288 /* DefaultClause */);
             node.statements = createNodeArray(statements);
             node.transformFlags = propagateChildrenFlags(node.statements);
             return node;
@@ -24574,15 +25133,15 @@
         }
         // @api
         function createHeritageClause(token, types) {
-            var node = createBaseNode(287 /* HeritageClause */);
+            var node = createBaseNode(289 /* HeritageClause */);
             node.token = token;
             node.types = createNodeArray(types);
             node.transformFlags |= propagateChildrenFlags(node.types);
             switch (token) {
-                case 93 /* ExtendsKeyword */:
+                case 94 /* ExtendsKeyword */:
                     node.transformFlags |= 512 /* ContainsES2015 */;
                     break;
-                case 116 /* ImplementsKeyword */:
+                case 117 /* ImplementsKeyword */:
                     node.transformFlags |= 1 /* ContainsTypeScript */;
                     break;
                 default:
@@ -24598,7 +25157,7 @@
         }
         // @api
         function createCatchClause(variableDeclaration, block) {
-            var node = createBaseNode(288 /* CatchClause */);
+            var node = createBaseNode(290 /* CatchClause */);
             variableDeclaration = !ts.isString(variableDeclaration) ? variableDeclaration : createVariableDeclaration(variableDeclaration, 
             /*exclamationToken*/ undefined, 
             /*type*/ undefined, 
@@ -24624,7 +25183,7 @@
         //
         // @api
         function createPropertyAssignment(name, initializer) {
-            var node = createBaseNamedDeclaration(289 /* PropertyAssignment */, 
+            var node = createBaseNamedDeclaration(291 /* PropertyAssignment */, 
             /*decorators*/ undefined, 
             /*modifiers*/ undefined, name);
             node.initializer = parenthesizerRules().parenthesizeExpressionForDisallowedComma(initializer);
@@ -24654,7 +25213,7 @@
         }
         // @api
         function createShorthandPropertyAssignment(name, objectAssignmentInitializer) {
-            var node = createBaseNamedDeclaration(290 /* ShorthandPropertyAssignment */, 
+            var node = createBaseNamedDeclaration(292 /* ShorthandPropertyAssignment */, 
             /*decorators*/ undefined, 
             /*modifiers*/ undefined, name);
             node.objectAssignmentInitializer = objectAssignmentInitializer && parenthesizerRules().parenthesizeExpressionForDisallowedComma(objectAssignmentInitializer);
@@ -24686,7 +25245,7 @@
         }
         // @api
         function createSpreadAssignment(expression) {
-            var node = createBaseNode(291 /* SpreadAssignment */);
+            var node = createBaseNode(293 /* SpreadAssignment */);
             node.expression = parenthesizerRules().parenthesizeExpressionForDisallowedComma(expression);
             node.transformFlags |=
                 propagateChildFlags(node.expression) |
@@ -24705,7 +25264,7 @@
         //
         // @api
         function createEnumMember(name, initializer) {
-            var node = createBaseNode(292 /* EnumMember */);
+            var node = createBaseNode(294 /* EnumMember */);
             node.name = asName(name);
             node.initializer = initializer && parenthesizerRules().parenthesizeExpressionForDisallowedComma(initializer);
             node.transformFlags |=
@@ -24726,7 +25285,7 @@
         //
         // @api
         function createSourceFile(statements, endOfFileToken, flags) {
-            var node = baseFactory.createBaseSourceFileNode(298 /* SourceFile */);
+            var node = baseFactory.createBaseSourceFileNode(300 /* SourceFile */);
             node.statements = createNodeArray(statements);
             node.endOfFileToken = endOfFileToken;
             node.flags |= flags;
@@ -24743,7 +25302,7 @@
             return node;
         }
         function cloneSourceFileWithChanges(source, statements, isDeclarationFile, referencedFiles, typeReferences, hasNoDefaultLib, libReferences) {
-            var node = baseFactory.createBaseSourceFileNode(298 /* SourceFile */);
+            var node = baseFactory.createBaseSourceFileNode(300 /* SourceFile */);
             for (var p in source) {
                 if (p === "emitNode" || ts.hasProperty(node, p) || !ts.hasProperty(source, p))
                     continue;
@@ -24781,7 +25340,7 @@
         // @api
         function createBundle(sourceFiles, prepends) {
             if (prepends === void 0) { prepends = ts.emptyArray; }
-            var node = createBaseNode(299 /* Bundle */);
+            var node = createBaseNode(301 /* Bundle */);
             node.prepends = prepends;
             node.sourceFiles = sourceFiles;
             return node;
@@ -24796,7 +25355,7 @@
         }
         // @api
         function createUnparsedSource(prologues, syntheticReferences, texts) {
-            var node = createBaseNode(300 /* UnparsedSource */);
+            var node = createBaseNode(302 /* UnparsedSource */);
             node.prologues = prologues;
             node.syntheticReferences = syntheticReferences;
             node.texts = texts;
@@ -24814,28 +25373,28 @@
         }
         // @api
         function createUnparsedPrologue(data) {
-            return createBaseUnparsedNode(293 /* UnparsedPrologue */, data);
+            return createBaseUnparsedNode(295 /* UnparsedPrologue */, data);
         }
         // @api
         function createUnparsedPrepend(data, texts) {
-            var node = createBaseUnparsedNode(294 /* UnparsedPrepend */, data);
+            var node = createBaseUnparsedNode(296 /* UnparsedPrepend */, data);
             node.texts = texts;
             return node;
         }
         // @api
         function createUnparsedTextLike(data, internal) {
-            return createBaseUnparsedNode(internal ? 296 /* UnparsedInternalText */ : 295 /* UnparsedText */, data);
+            return createBaseUnparsedNode(internal ? 298 /* UnparsedInternalText */ : 297 /* UnparsedText */, data);
         }
         // @api
         function createUnparsedSyntheticReference(section) {
-            var node = createBaseNode(297 /* UnparsedSyntheticReference */);
+            var node = createBaseNode(299 /* UnparsedSyntheticReference */);
             node.data = section.data;
             node.section = section;
             return node;
         }
         // @api
         function createInputFiles() {
-            var node = createBaseNode(301 /* InputFiles */);
+            var node = createBaseNode(303 /* InputFiles */);
             node.javascriptText = "";
             node.declarationText = "";
             return node;
@@ -24846,7 +25405,7 @@
         // @api
         function createSyntheticExpression(type, isSpread, tupleNameSource) {
             if (isSpread === void 0) { isSpread = false; }
-            var node = createBaseNode(228 /* SyntheticExpression */);
+            var node = createBaseNode(230 /* SyntheticExpression */);
             node.type = type;
             node.isSpread = isSpread;
             node.tupleNameSource = tupleNameSource;
@@ -24854,7 +25413,7 @@
         }
         // @api
         function createSyntaxList(children) {
-            var node = createBaseNode(338 /* SyntaxList */);
+            var node = createBaseNode(343 /* SyntaxList */);
             node._children = children;
             return node;
         }
@@ -24869,7 +25428,7 @@
          */
         // @api
         function createNotEmittedStatement(original) {
-            var node = createBaseNode(339 /* NotEmittedStatement */);
+            var node = createBaseNode(344 /* NotEmittedStatement */);
             node.original = original;
             ts.setTextRange(node, original);
             return node;
@@ -24883,7 +25442,7 @@
          */
         // @api
         function createPartiallyEmittedExpression(expression, original) {
-            var node = createBaseNode(340 /* PartiallyEmittedExpression */);
+            var node = createBaseNode(345 /* PartiallyEmittedExpression */);
             node.expression = expression;
             node.original = original;
             node.transformFlags |=
@@ -24911,7 +25470,7 @@
         }
         // @api
         function createCommaListExpression(elements) {
-            var node = createBaseNode(341 /* CommaListExpression */);
+            var node = createBaseNode(346 /* CommaListExpression */);
             node.elements = createNodeArray(ts.sameFlatMap(elements, flattenCommaElements));
             node.transformFlags |= propagateChildrenFlags(node.elements);
             return node;
@@ -24928,7 +25487,7 @@
          */
         // @api
         function createEndOfDeclarationMarker(original) {
-            var node = createBaseNode(343 /* EndOfDeclarationMarker */);
+            var node = createBaseNode(348 /* EndOfDeclarationMarker */);
             node.emitNode = {};
             node.original = original;
             return node;
@@ -24939,14 +25498,14 @@
          */
         // @api
         function createMergeDeclarationMarker(original) {
-            var node = createBaseNode(342 /* MergeDeclarationMarker */);
+            var node = createBaseNode(347 /* MergeDeclarationMarker */);
             node.emitNode = {};
             node.original = original;
             return node;
         }
         // @api
         function createSyntheticReferenceExpression(expression, thisArg) {
-            var node = createBaseNode(344 /* SyntheticReferenceExpression */);
+            var node = createBaseNode(349 /* SyntheticReferenceExpression */);
             node.expression = expression;
             node.thisArg = thisArg;
             node.transformFlags |=
@@ -24968,9 +25527,9 @@
             if (node === undefined) {
                 return node;
             }
-            var clone = ts.isSourceFile(node) ? baseFactory.createBaseSourceFileNode(298 /* SourceFile */) :
-                ts.isIdentifier(node) ? baseFactory.createBaseIdentifierNode(78 /* Identifier */) :
-                    ts.isPrivateIdentifier(node) ? baseFactory.createBasePrivateIdentifierNode(79 /* PrivateIdentifier */) :
+            var clone = ts.isSourceFile(node) ? baseFactory.createBaseSourceFileNode(300 /* SourceFile */) :
+                ts.isIdentifier(node) ? baseFactory.createBaseIdentifierNode(79 /* Identifier */) :
+                    ts.isPrivateIdentifier(node) ? baseFactory.createBasePrivateIdentifierNode(80 /* PrivateIdentifier */) :
                         !ts.isNodeKind(node.kind) ? baseFactory.createBaseTokenNode(node.kind) :
                             baseFactory.createBaseNode(node.kind);
             clone.flags |= (node.flags & ~8 /* Synthesized */);
@@ -25031,14 +25590,20 @@
                 : factory.createStrictEquality(createTypeOfExpression(value), createStringLiteral(tag));
         }
         function createMethodCall(object, methodName, argumentsList) {
+            // Preserve the optionality of `object`.
+            if (ts.isCallChain(object)) {
+                return createCallChain(createPropertyAccessChain(object, /*questionDotToken*/ undefined, methodName), 
+                /*questionDotToken*/ undefined, 
+                /*typeArguments*/ undefined, argumentsList);
+            }
             return createCallExpression(createPropertyAccessExpression(object, methodName), 
             /*typeArguments*/ undefined, argumentsList);
         }
         function createFunctionBindCall(target, thisArg, argumentsList) {
-            return createMethodCall(target, "bind", __spreadArray([thisArg], argumentsList));
+            return createMethodCall(target, "bind", __spreadArray([thisArg], argumentsList, true));
         }
         function createFunctionCallCall(target, thisArg, argumentsList) {
-            return createMethodCall(target, "call", __spreadArray([thisArg], argumentsList));
+            return createMethodCall(target, "call", __spreadArray([thisArg], argumentsList, true));
         }
         function createFunctionApplyCall(target, thisArg, argumentsExpression) {
             return createMethodCall(target, "apply", [thisArg, argumentsExpression]);
@@ -25055,6 +25620,12 @@
         function createObjectDefinePropertyCall(target, propertyName, attributes) {
             return createGlobalMethodCall("Object", "defineProperty", [target, asExpression(propertyName), attributes]);
         }
+        function createReflectGetCall(target, propertyKey, receiver) {
+            return createGlobalMethodCall("Reflect", "get", receiver ? [target, propertyKey, receiver] : [target, propertyKey]);
+        }
+        function createReflectSetCall(target, propertyKey, value, receiver) {
+            return createGlobalMethodCall("Reflect", "set", receiver ? [target, propertyKey, value, receiver] : [target, propertyKey, value]);
+        }
         function tryAddPropertyAssignment(properties, propertyName, expression) {
             if (expression) {
                 properties.push(createPropertyAssignment(propertyName, expression));
@@ -25075,11 +25646,11 @@
         }
         function updateOuterExpression(outerExpression, expression) {
             switch (outerExpression.kind) {
-                case 208 /* ParenthesizedExpression */: return updateParenthesizedExpression(outerExpression, expression);
-                case 207 /* TypeAssertionExpression */: return updateTypeAssertion(outerExpression, outerExpression.type, expression);
-                case 225 /* AsExpression */: return updateAsExpression(outerExpression, expression, outerExpression.type);
-                case 226 /* NonNullExpression */: return updateNonNullExpression(outerExpression, expression);
-                case 340 /* PartiallyEmittedExpression */: return updatePartiallyEmittedExpression(outerExpression, expression);
+                case 210 /* ParenthesizedExpression */: return updateParenthesizedExpression(outerExpression, expression);
+                case 209 /* TypeAssertionExpression */: return updateTypeAssertion(outerExpression, outerExpression.type, expression);
+                case 227 /* AsExpression */: return updateAsExpression(outerExpression, expression, outerExpression.type);
+                case 228 /* NonNullExpression */: return updateNonNullExpression(outerExpression, expression);
+                case 345 /* PartiallyEmittedExpression */: return updatePartiallyEmittedExpression(outerExpression, expression);
             }
         }
         /**
@@ -25126,20 +25697,20 @@
         function shouldBeCapturedInTempVariable(node, cacheIdentifiers) {
             var target = ts.skipParentheses(node);
             switch (target.kind) {
-                case 78 /* Identifier */:
+                case 79 /* Identifier */:
                     return cacheIdentifiers;
-                case 107 /* ThisKeyword */:
+                case 108 /* ThisKeyword */:
                 case 8 /* NumericLiteral */:
                 case 9 /* BigIntLiteral */:
                 case 10 /* StringLiteral */:
                     return false;
-                case 200 /* ArrayLiteralExpression */:
+                case 202 /* ArrayLiteralExpression */:
                     var elements = target.elements;
                     if (elements.length === 0) {
                         return false;
                     }
                     return true;
-                case 201 /* ObjectLiteralExpression */:
+                case 203 /* ObjectLiteralExpression */:
                     return target.properties.length > 0;
                 default:
                     return true;
@@ -25195,6 +25766,23 @@
             }
             return { target: target, thisArg: thisArg };
         }
+        function createAssignmentTargetWrapper(paramName, expression) {
+            return createPropertyAccessExpression(
+            // Explicit parens required because of v8 regression (https://bugs.chromium.org/p/v8/issues/detail?id=9560)
+            createParenthesizedExpression(createObjectLiteralExpression([
+                createSetAccessorDeclaration(
+                /*decorators*/ undefined, 
+                /*modifiers*/ undefined, "value", [createParameterDeclaration(
+                    /*decorators*/ undefined, 
+                    /*modifiers*/ undefined, 
+                    /*dotDotDotToken*/ undefined, paramName, 
+                    /*questionToken*/ undefined, 
+                    /*type*/ undefined, 
+                    /*initializer*/ undefined)], createBlock([
+                    createExpressionStatement(expression)
+                ]))
+            ])), "value");
+        }
         function inlineExpressions(expressions) {
             // Avoid deeply nested comma expressions as traversing them during emit can result in "Maximum call
             // stack size exceeded" errors.
@@ -25375,7 +25963,7 @@
         function ensureUseStrict(statements) {
             var foundUseStrict = ts.findUseStrictPrologue(statements);
             if (!foundUseStrict) {
-                return ts.setTextRange(createNodeArray(__spreadArray([createUseStrictPrologue()], statements)), statements);
+                return ts.setTextRange(createNodeArray(__spreadArray([createUseStrictPrologue()], statements, true)), statements);
             }
             return statements;
         }
@@ -25442,20 +26030,20 @@
             var left = ts.isNodeArray(statements) ? statements.slice() : statements;
             // splice other custom prologues from right into left
             if (rightCustomPrologueEnd > rightHoistedVariablesEnd) {
-                left.splice.apply(left, __spreadArray([leftHoistedVariablesEnd, 0], declarations.slice(rightHoistedVariablesEnd, rightCustomPrologueEnd)));
+                left.splice.apply(left, __spreadArray([leftHoistedVariablesEnd, 0], declarations.slice(rightHoistedVariablesEnd, rightCustomPrologueEnd), false));
             }
             // splice hoisted variables from right into left
             if (rightHoistedVariablesEnd > rightHoistedFunctionsEnd) {
-                left.splice.apply(left, __spreadArray([leftHoistedFunctionsEnd, 0], declarations.slice(rightHoistedFunctionsEnd, rightHoistedVariablesEnd)));
+                left.splice.apply(left, __spreadArray([leftHoistedFunctionsEnd, 0], declarations.slice(rightHoistedFunctionsEnd, rightHoistedVariablesEnd), false));
             }
             // splice hoisted functions from right into left
             if (rightHoistedFunctionsEnd > rightStandardPrologueEnd) {
-                left.splice.apply(left, __spreadArray([leftStandardPrologueEnd, 0], declarations.slice(rightStandardPrologueEnd, rightHoistedFunctionsEnd)));
+                left.splice.apply(left, __spreadArray([leftStandardPrologueEnd, 0], declarations.slice(rightStandardPrologueEnd, rightHoistedFunctionsEnd), false));
             }
             // splice standard prologues from right into left (that are not already in left)
             if (rightStandardPrologueEnd > 0) {
                 if (leftStandardPrologueEnd === 0) {
-                    left.splice.apply(left, __spreadArray([0, 0], declarations.slice(0, rightStandardPrologueEnd)));
+                    left.splice.apply(left, __spreadArray([0, 0], declarations.slice(0, rightStandardPrologueEnd), false));
                 }
                 else {
                     var leftPrologues = new ts.Map();
@@ -25542,24 +26130,24 @@
     }
     function getDefaultTagNameForKind(kind) {
         switch (kind) {
-            case 333 /* JSDocTypeTag */: return "type";
-            case 331 /* JSDocReturnTag */: return "returns";
-            case 332 /* JSDocThisTag */: return "this";
-            case 329 /* JSDocEnumTag */: return "enum";
-            case 320 /* JSDocAuthorTag */: return "author";
-            case 322 /* JSDocClassTag */: return "class";
-            case 323 /* JSDocPublicTag */: return "public";
-            case 324 /* JSDocPrivateTag */: return "private";
-            case 325 /* JSDocProtectedTag */: return "protected";
-            case 326 /* JSDocReadonlyTag */: return "readonly";
-            case 327 /* JSDocOverrideTag */: return "override";
-            case 334 /* JSDocTemplateTag */: return "template";
-            case 335 /* JSDocTypedefTag */: return "typedef";
-            case 330 /* JSDocParameterTag */: return "param";
-            case 337 /* JSDocPropertyTag */: return "prop";
-            case 328 /* JSDocCallbackTag */: return "callback";
-            case 318 /* JSDocAugmentsTag */: return "augments";
-            case 319 /* JSDocImplementsTag */: return "implements";
+            case 338 /* JSDocTypeTag */: return "type";
+            case 336 /* JSDocReturnTag */: return "returns";
+            case 337 /* JSDocThisTag */: return "this";
+            case 334 /* JSDocEnumTag */: return "enum";
+            case 325 /* JSDocAuthorTag */: return "author";
+            case 327 /* JSDocClassTag */: return "class";
+            case 328 /* JSDocPublicTag */: return "public";
+            case 329 /* JSDocPrivateTag */: return "private";
+            case 330 /* JSDocProtectedTag */: return "protected";
+            case 331 /* JSDocReadonlyTag */: return "readonly";
+            case 332 /* JSDocOverrideTag */: return "override";
+            case 339 /* JSDocTemplateTag */: return "template";
+            case 340 /* JSDocTypedefTag */: return "typedef";
+            case 335 /* JSDocParameterTag */: return "param";
+            case 342 /* JSDocPropertyTag */: return "prop";
+            case 333 /* JSDocCallbackTag */: return "callback";
+            case 323 /* JSDocAugmentsTag */: return "augments";
+            case 324 /* JSDocImplementsTag */: return "implements";
             default:
                 return ts.Debug.fail("Unsupported kind: " + ts.Debug.formatSyntaxKind(kind));
         }
@@ -25587,7 +26175,7 @@
                 break;
         }
         var token = rawTextScanner.scan();
-        if (token === 23 /* CloseBracketToken */) {
+        if (token === 19 /* CloseBraceToken */) {
             token = rawTextScanner.reScanTemplateToken(/*isTaggedTemplate*/ false);
         }
         if (rawTextScanner.isUnterminated()) {
@@ -25615,7 +26203,7 @@
         return propagateChildFlags(node) & ~16777216 /* ContainsPossibleTopLevelAwait */;
     }
     function propagatePropertyNameFlagsOfChild(node, transformFlags) {
-        return transformFlags | (node.transformFlags & 8192 /* PropertyNamePropagatingFlags */);
+        return transformFlags | (node.transformFlags & 33562624 /* PropertyNamePropagatingFlags */);
     }
     function propagateChildFlags(child) {
         if (!child)
@@ -25639,69 +26227,69 @@
      */
     /* @internal */
     function getTransformFlagsSubtreeExclusions(kind) {
-        if (kind >= 173 /* FirstTypeNode */ && kind <= 196 /* LastTypeNode */) {
+        if (kind >= 175 /* FirstTypeNode */ && kind <= 198 /* LastTypeNode */) {
             return -2 /* TypeExcludes */;
         }
         switch (kind) {
-            case 204 /* CallExpression */:
-            case 205 /* NewExpression */:
-            case 200 /* ArrayLiteralExpression */:
+            case 206 /* CallExpression */:
+            case 207 /* NewExpression */:
+            case 202 /* ArrayLiteralExpression */:
                 return 536887296 /* ArrayLiteralOrCallOrNewExcludes */;
-            case 257 /* ModuleDeclaration */:
-                return 555888640 /* ModuleExcludes */;
-            case 161 /* Parameter */:
+            case 259 /* ModuleDeclaration */:
+                return 589443072 /* ModuleExcludes */;
+            case 162 /* Parameter */:
                 return 536870912 /* ParameterExcludes */;
-            case 210 /* ArrowFunction */:
+            case 212 /* ArrowFunction */:
                 return 557748224 /* ArrowFunctionExcludes */;
-            case 209 /* FunctionExpression */:
-            case 252 /* FunctionDeclaration */:
-                return 557756416 /* FunctionExcludes */;
-            case 251 /* VariableDeclarationList */:
+            case 211 /* FunctionExpression */:
+            case 254 /* FunctionDeclaration */:
+                return 591310848 /* FunctionExcludes */;
+            case 253 /* VariableDeclarationList */:
                 return 537165824 /* VariableDeclarationListExcludes */;
-            case 253 /* ClassDeclaration */:
-            case 222 /* ClassExpression */:
+            case 255 /* ClassDeclaration */:
+            case 224 /* ClassExpression */:
                 return 536940544 /* ClassExcludes */;
-            case 167 /* Constructor */:
-                return 557752320 /* ConstructorExcludes */;
-            case 164 /* PropertyDeclaration */:
-                return 536879104 /* PropertyExcludes */;
-            case 166 /* MethodDeclaration */:
-            case 168 /* GetAccessor */:
-            case 169 /* SetAccessor */:
-                return 540975104 /* MethodOrAccessorExcludes */;
-            case 128 /* AnyKeyword */:
-            case 144 /* NumberKeyword */:
-            case 155 /* BigIntKeyword */:
-            case 141 /* NeverKeyword */:
-            case 147 /* StringKeyword */:
-            case 145 /* ObjectKeyword */:
-            case 131 /* BooleanKeyword */:
-            case 148 /* SymbolKeyword */:
-            case 113 /* VoidKeyword */:
-            case 160 /* TypeParameter */:
-            case 163 /* PropertySignature */:
-            case 165 /* MethodSignature */:
-            case 170 /* CallSignature */:
-            case 171 /* ConstructSignature */:
-            case 172 /* IndexSignature */:
-            case 254 /* InterfaceDeclaration */:
-            case 255 /* TypeAliasDeclaration */:
+            case 169 /* Constructor */:
+                return 591306752 /* ConstructorExcludes */;
+            case 165 /* PropertyDeclaration */:
+                return 570433536 /* PropertyExcludes */;
+            case 167 /* MethodDeclaration */:
+            case 170 /* GetAccessor */:
+            case 171 /* SetAccessor */:
+                return 574529536 /* MethodOrAccessorExcludes */;
+            case 129 /* AnyKeyword */:
+            case 145 /* NumberKeyword */:
+            case 156 /* BigIntKeyword */:
+            case 142 /* NeverKeyword */:
+            case 148 /* StringKeyword */:
+            case 146 /* ObjectKeyword */:
+            case 132 /* BooleanKeyword */:
+            case 149 /* SymbolKeyword */:
+            case 114 /* VoidKeyword */:
+            case 161 /* TypeParameter */:
+            case 164 /* PropertySignature */:
+            case 166 /* MethodSignature */:
+            case 172 /* CallSignature */:
+            case 173 /* ConstructSignature */:
+            case 174 /* IndexSignature */:
+            case 256 /* InterfaceDeclaration */:
+            case 257 /* TypeAliasDeclaration */:
                 return -2 /* TypeExcludes */;
-            case 201 /* ObjectLiteralExpression */:
+            case 203 /* ObjectLiteralExpression */:
                 return 536973312 /* ObjectLiteralExcludes */;
-            case 288 /* CatchClause */:
+            case 290 /* CatchClause */:
                 return 536903680 /* CatchClauseExcludes */;
-            case 197 /* ObjectBindingPattern */:
-            case 198 /* ArrayBindingPattern */:
+            case 199 /* ObjectBindingPattern */:
+            case 200 /* ArrayBindingPattern */:
                 return 536887296 /* BindingPatternExcludes */;
-            case 207 /* TypeAssertionExpression */:
-            case 225 /* AsExpression */:
-            case 340 /* PartiallyEmittedExpression */:
-            case 208 /* ParenthesizedExpression */:
-            case 105 /* SuperKeyword */:
+            case 209 /* TypeAssertionExpression */:
+            case 227 /* AsExpression */:
+            case 345 /* PartiallyEmittedExpression */:
+            case 210 /* ParenthesizedExpression */:
+            case 106 /* SuperKeyword */:
                 return 536870912 /* OuterExpressionExcludes */;
-            case 202 /* PropertyAccessExpression */:
-            case 203 /* ElementAccessExpression */:
+            case 204 /* PropertyAccessExpression */:
+            case 205 /* ElementAccessExpression */:
                 return 536870912 /* PropertyAccessExcludes */;
             default:
                 return 536870912 /* NodeExcludes */;
@@ -25958,7 +26546,7 @@
         if (trailingComments)
             destEmitNode.trailingComments = ts.addRange(trailingComments.slice(), destEmitNode.trailingComments);
         if (flags)
-            destEmitNode.flags = flags;
+            destEmitNode.flags = flags & ~268435456 /* Immutable */;
         if (commentRange)
             destEmitNode.commentRange = commentRange;
         if (sourceMapRange)
@@ -26000,7 +26588,7 @@
                 // To avoid holding onto transformation artifacts, we keep track of any
                 // parse tree node we are annotating. This allows us to clean them up after
                 // all transformations have completed.
-                if (node.kind === 298 /* SourceFile */) {
+                if (node.kind === 300 /* SourceFile */) {
                     return node.emitNode = { annotatedNodes: [node] };
                 }
                 var sourceFile = (_a = ts.getSourceFileOfNode(ts.getParseTreeNode(ts.getSourceFileOfNode(node)))) !== null && _a !== void 0 ? _a : ts.Debug.fail("Could not determine parsed source file.");
@@ -26008,6 +26596,9 @@
             }
             node.emitNode = {};
         }
+        else {
+            ts.Debug.assert(!(node.emitNode.flags & 268435456 /* Immutable */), "Invalid attempt to mutate an immutable node.");
+        }
         return node.emitNode;
     }
     ts.getOrCreateEmitNode = getOrCreateEmitNode;
@@ -26265,6 +26856,8 @@
 (function (ts) {
     function createEmitHelperFactory(context) {
         var factory = context.factory;
+        var immutableTrue = ts.memoize(function () { return ts.setEmitFlags(factory.createTrue(), 268435456 /* Immutable */); });
+        var immutableFalse = ts.memoize(function () { return ts.setEmitFlags(factory.createFalse(), 268435456 /* Immutable */); });
         return {
             getUnscopedHelperName: getUnscopedHelperName,
             // TypeScript Helpers
@@ -26435,10 +27028,10 @@
             return factory.createCallExpression(getUnscopedHelperName("__makeTemplateObject"), 
             /*typeArguments*/ undefined, [cooked, raw]);
         }
-        function createSpreadArrayHelper(to, from) {
+        function createSpreadArrayHelper(to, from, packFrom) {
             context.requestEmitHelper(ts.spreadArrayHelper);
             return factory.createCallExpression(getUnscopedHelperName("__spreadArray"), 
-            /*typeArguments*/ undefined, [to, from]);
+            /*typeArguments*/ undefined, [to, from, packFrom ? immutableTrue() : immutableFalse()]);
         }
         // ES2015 Destructuring Helpers
         function createValuesHelper(expression) {
@@ -26463,7 +27056,7 @@
         function createCreateBindingHelper(module, inputName, outputName) {
             context.requestEmitHelper(ts.createBindingHelper);
             return factory.createCallExpression(getUnscopedHelperName("__createBinding"), 
-            /*typeArguments*/ undefined, __spreadArray([factory.createIdentifier("exports"), module, inputName], (outputName ? [outputName] : [])));
+            /*typeArguments*/ undefined, __spreadArray([factory.createIdentifier("exports"), module, inputName], (outputName ? [outputName] : []), true));
         }
         function createImportStarHelper(expression) {
             context.requestEmitHelper(ts.importStarHelper);
@@ -26640,7 +27233,7 @@
         name: "typescript:spreadArray",
         importName: "__spreadArray",
         scoped: false,
-        text: "\n            var __spreadArray = (this && this.__spreadArray) || function (to, from) {\n                for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)\n                    to[j] = from[i];\n                return to;\n            };"
+        text: "\n            var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {\n                if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n                    if (ar || !(i in from)) {\n                        if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n                        ar[i] = from[i];\n                    }\n                }\n                return to.concat(ar || Array.prototype.slice.call(from));\n            };"
     };
     // ES2015 Destructuring Helpers
     ts.valuesHelper = {
@@ -26908,7 +27501,7 @@
     function isCallToHelper(firstSegment, helperName) {
         return ts.isCallExpression(firstSegment)
             && ts.isIdentifier(firstSegment.expression)
-            && (ts.getEmitFlags(firstSegment.expression) & 4096 /* HelperName */)
+            && (ts.getEmitFlags(firstSegment.expression) & 4096 /* HelperName */) !== 0
             && firstSegment.expression.escapedText === helperName;
     }
     ts.isCallToHelper = isCallToHelper;
@@ -27002,639 +27595,648 @@
     ts.isEqualsGreaterThanToken = isEqualsGreaterThanToken;
     // Identifiers
     function isIdentifier(node) {
-        return node.kind === 78 /* Identifier */;
+        return node.kind === 79 /* Identifier */;
     }
     ts.isIdentifier = isIdentifier;
     function isPrivateIdentifier(node) {
-        return node.kind === 79 /* PrivateIdentifier */;
+        return node.kind === 80 /* PrivateIdentifier */;
     }
     ts.isPrivateIdentifier = isPrivateIdentifier;
     // Reserved Words
     /* @internal */
     function isExportModifier(node) {
-        return node.kind === 92 /* ExportKeyword */;
+        return node.kind === 93 /* ExportKeyword */;
     }
     ts.isExportModifier = isExportModifier;
     /* @internal */
     function isAsyncModifier(node) {
-        return node.kind === 129 /* AsyncKeyword */;
+        return node.kind === 130 /* AsyncKeyword */;
     }
     ts.isAsyncModifier = isAsyncModifier;
     /* @internal */
     function isAssertsKeyword(node) {
-        return node.kind === 127 /* AssertsKeyword */;
+        return node.kind === 128 /* AssertsKeyword */;
     }
     ts.isAssertsKeyword = isAssertsKeyword;
     /* @internal */
     function isAwaitKeyword(node) {
-        return node.kind === 130 /* AwaitKeyword */;
+        return node.kind === 131 /* AwaitKeyword */;
     }
     ts.isAwaitKeyword = isAwaitKeyword;
     /* @internal */
     function isReadonlyKeyword(node) {
-        return node.kind === 142 /* ReadonlyKeyword */;
+        return node.kind === 143 /* ReadonlyKeyword */;
     }
     ts.isReadonlyKeyword = isReadonlyKeyword;
     /* @internal */
     function isStaticModifier(node) {
-        return node.kind === 123 /* StaticKeyword */;
+        return node.kind === 124 /* StaticKeyword */;
     }
     ts.isStaticModifier = isStaticModifier;
+    /* @internal */
+    function isAbstractModifier(node) {
+        return node.kind === 126 /* AbstractKeyword */;
+    }
+    ts.isAbstractModifier = isAbstractModifier;
     /*@internal*/
     function isSuperKeyword(node) {
-        return node.kind === 105 /* SuperKeyword */;
+        return node.kind === 106 /* SuperKeyword */;
     }
     ts.isSuperKeyword = isSuperKeyword;
     /*@internal*/
     function isImportKeyword(node) {
-        return node.kind === 99 /* ImportKeyword */;
+        return node.kind === 100 /* ImportKeyword */;
     }
     ts.isImportKeyword = isImportKeyword;
     // Names
     function isQualifiedName(node) {
-        return node.kind === 158 /* QualifiedName */;
+        return node.kind === 159 /* QualifiedName */;
     }
     ts.isQualifiedName = isQualifiedName;
     function isComputedPropertyName(node) {
-        return node.kind === 159 /* ComputedPropertyName */;
+        return node.kind === 160 /* ComputedPropertyName */;
     }
     ts.isComputedPropertyName = isComputedPropertyName;
     // Signature elements
     function isTypeParameterDeclaration(node) {
-        return node.kind === 160 /* TypeParameter */;
+        return node.kind === 161 /* TypeParameter */;
     }
     ts.isTypeParameterDeclaration = isTypeParameterDeclaration;
     // TODO(rbuckton): Rename to 'isParameterDeclaration'
     function isParameter(node) {
-        return node.kind === 161 /* Parameter */;
+        return node.kind === 162 /* Parameter */;
     }
     ts.isParameter = isParameter;
     function isDecorator(node) {
-        return node.kind === 162 /* Decorator */;
+        return node.kind === 163 /* Decorator */;
     }
     ts.isDecorator = isDecorator;
     // TypeMember
     function isPropertySignature(node) {
-        return node.kind === 163 /* PropertySignature */;
+        return node.kind === 164 /* PropertySignature */;
     }
     ts.isPropertySignature = isPropertySignature;
     function isPropertyDeclaration(node) {
-        return node.kind === 164 /* PropertyDeclaration */;
+        return node.kind === 165 /* PropertyDeclaration */;
     }
     ts.isPropertyDeclaration = isPropertyDeclaration;
     function isMethodSignature(node) {
-        return node.kind === 165 /* MethodSignature */;
+        return node.kind === 166 /* MethodSignature */;
     }
     ts.isMethodSignature = isMethodSignature;
     function isMethodDeclaration(node) {
-        return node.kind === 166 /* MethodDeclaration */;
+        return node.kind === 167 /* MethodDeclaration */;
     }
     ts.isMethodDeclaration = isMethodDeclaration;
+    function isClassStaticBlockDeclaration(node) {
+        return node.kind === 168 /* ClassStaticBlockDeclaration */;
+    }
+    ts.isClassStaticBlockDeclaration = isClassStaticBlockDeclaration;
     function isConstructorDeclaration(node) {
-        return node.kind === 167 /* Constructor */;
+        return node.kind === 169 /* Constructor */;
     }
     ts.isConstructorDeclaration = isConstructorDeclaration;
     function isGetAccessorDeclaration(node) {
-        return node.kind === 168 /* GetAccessor */;
+        return node.kind === 170 /* GetAccessor */;
     }
     ts.isGetAccessorDeclaration = isGetAccessorDeclaration;
     function isSetAccessorDeclaration(node) {
-        return node.kind === 169 /* SetAccessor */;
+        return node.kind === 171 /* SetAccessor */;
     }
     ts.isSetAccessorDeclaration = isSetAccessorDeclaration;
     function isCallSignatureDeclaration(node) {
-        return node.kind === 170 /* CallSignature */;
+        return node.kind === 172 /* CallSignature */;
     }
     ts.isCallSignatureDeclaration = isCallSignatureDeclaration;
     function isConstructSignatureDeclaration(node) {
-        return node.kind === 171 /* ConstructSignature */;
+        return node.kind === 173 /* ConstructSignature */;
     }
     ts.isConstructSignatureDeclaration = isConstructSignatureDeclaration;
     function isIndexSignatureDeclaration(node) {
-        return node.kind === 172 /* IndexSignature */;
+        return node.kind === 174 /* IndexSignature */;
     }
     ts.isIndexSignatureDeclaration = isIndexSignatureDeclaration;
     // Type
     function isTypePredicateNode(node) {
-        return node.kind === 173 /* TypePredicate */;
+        return node.kind === 175 /* TypePredicate */;
     }
     ts.isTypePredicateNode = isTypePredicateNode;
     function isTypeReferenceNode(node) {
-        return node.kind === 174 /* TypeReference */;
+        return node.kind === 176 /* TypeReference */;
     }
     ts.isTypeReferenceNode = isTypeReferenceNode;
     function isFunctionTypeNode(node) {
-        return node.kind === 175 /* FunctionType */;
+        return node.kind === 177 /* FunctionType */;
     }
     ts.isFunctionTypeNode = isFunctionTypeNode;
     function isConstructorTypeNode(node) {
-        return node.kind === 176 /* ConstructorType */;
+        return node.kind === 178 /* ConstructorType */;
     }
     ts.isConstructorTypeNode = isConstructorTypeNode;
     function isTypeQueryNode(node) {
-        return node.kind === 177 /* TypeQuery */;
+        return node.kind === 179 /* TypeQuery */;
     }
     ts.isTypeQueryNode = isTypeQueryNode;
     function isTypeLiteralNode(node) {
-        return node.kind === 178 /* TypeLiteral */;
+        return node.kind === 180 /* TypeLiteral */;
     }
     ts.isTypeLiteralNode = isTypeLiteralNode;
     function isArrayTypeNode(node) {
-        return node.kind === 179 /* ArrayType */;
+        return node.kind === 181 /* ArrayType */;
     }
     ts.isArrayTypeNode = isArrayTypeNode;
     function isTupleTypeNode(node) {
-        return node.kind === 180 /* TupleType */;
+        return node.kind === 182 /* TupleType */;
     }
     ts.isTupleTypeNode = isTupleTypeNode;
     function isNamedTupleMember(node) {
-        return node.kind === 193 /* NamedTupleMember */;
+        return node.kind === 195 /* NamedTupleMember */;
     }
     ts.isNamedTupleMember = isNamedTupleMember;
     function isOptionalTypeNode(node) {
-        return node.kind === 181 /* OptionalType */;
+        return node.kind === 183 /* OptionalType */;
     }
     ts.isOptionalTypeNode = isOptionalTypeNode;
     function isRestTypeNode(node) {
-        return node.kind === 182 /* RestType */;
+        return node.kind === 184 /* RestType */;
     }
     ts.isRestTypeNode = isRestTypeNode;
     function isUnionTypeNode(node) {
-        return node.kind === 183 /* UnionType */;
+        return node.kind === 185 /* UnionType */;
     }
     ts.isUnionTypeNode = isUnionTypeNode;
     function isIntersectionTypeNode(node) {
-        return node.kind === 184 /* IntersectionType */;
+        return node.kind === 186 /* IntersectionType */;
     }
     ts.isIntersectionTypeNode = isIntersectionTypeNode;
     function isConditionalTypeNode(node) {
-        return node.kind === 185 /* ConditionalType */;
+        return node.kind === 187 /* ConditionalType */;
     }
     ts.isConditionalTypeNode = isConditionalTypeNode;
     function isInferTypeNode(node) {
-        return node.kind === 186 /* InferType */;
+        return node.kind === 188 /* InferType */;
     }
     ts.isInferTypeNode = isInferTypeNode;
     function isParenthesizedTypeNode(node) {
-        return node.kind === 187 /* ParenthesizedType */;
+        return node.kind === 189 /* ParenthesizedType */;
     }
     ts.isParenthesizedTypeNode = isParenthesizedTypeNode;
     function isThisTypeNode(node) {
-        return node.kind === 188 /* ThisType */;
+        return node.kind === 190 /* ThisType */;
     }
     ts.isThisTypeNode = isThisTypeNode;
     function isTypeOperatorNode(node) {
-        return node.kind === 189 /* TypeOperator */;
+        return node.kind === 191 /* TypeOperator */;
     }
     ts.isTypeOperatorNode = isTypeOperatorNode;
     function isIndexedAccessTypeNode(node) {
-        return node.kind === 190 /* IndexedAccessType */;
+        return node.kind === 192 /* IndexedAccessType */;
     }
     ts.isIndexedAccessTypeNode = isIndexedAccessTypeNode;
     function isMappedTypeNode(node) {
-        return node.kind === 191 /* MappedType */;
+        return node.kind === 193 /* MappedType */;
     }
     ts.isMappedTypeNode = isMappedTypeNode;
     function isLiteralTypeNode(node) {
-        return node.kind === 192 /* LiteralType */;
+        return node.kind === 194 /* LiteralType */;
     }
     ts.isLiteralTypeNode = isLiteralTypeNode;
     function isImportTypeNode(node) {
-        return node.kind === 196 /* ImportType */;
+        return node.kind === 198 /* ImportType */;
     }
     ts.isImportTypeNode = isImportTypeNode;
     function isTemplateLiteralTypeSpan(node) {
-        return node.kind === 195 /* TemplateLiteralTypeSpan */;
+        return node.kind === 197 /* TemplateLiteralTypeSpan */;
     }
     ts.isTemplateLiteralTypeSpan = isTemplateLiteralTypeSpan;
     function isTemplateLiteralTypeNode(node) {
-        return node.kind === 194 /* TemplateLiteralType */;
+        return node.kind === 196 /* TemplateLiteralType */;
     }
     ts.isTemplateLiteralTypeNode = isTemplateLiteralTypeNode;
     // Binding patterns
     function isObjectBindingPattern(node) {
-        return node.kind === 197 /* ObjectBindingPattern */;
+        return node.kind === 199 /* ObjectBindingPattern */;
     }
     ts.isObjectBindingPattern = isObjectBindingPattern;
     function isArrayBindingPattern(node) {
-        return node.kind === 198 /* ArrayBindingPattern */;
+        return node.kind === 200 /* ArrayBindingPattern */;
     }
     ts.isArrayBindingPattern = isArrayBindingPattern;
     function isBindingElement(node) {
-        return node.kind === 199 /* BindingElement */;
+        return node.kind === 201 /* BindingElement */;
     }
     ts.isBindingElement = isBindingElement;
     // Expression
     function isArrayLiteralExpression(node) {
-        return node.kind === 200 /* ArrayLiteralExpression */;
+        return node.kind === 202 /* ArrayLiteralExpression */;
     }
     ts.isArrayLiteralExpression = isArrayLiteralExpression;
     function isObjectLiteralExpression(node) {
-        return node.kind === 201 /* ObjectLiteralExpression */;
+        return node.kind === 203 /* ObjectLiteralExpression */;
     }
     ts.isObjectLiteralExpression = isObjectLiteralExpression;
     function isPropertyAccessExpression(node) {
-        return node.kind === 202 /* PropertyAccessExpression */;
+        return node.kind === 204 /* PropertyAccessExpression */;
     }
     ts.isPropertyAccessExpression = isPropertyAccessExpression;
     function isElementAccessExpression(node) {
-        return node.kind === 203 /* ElementAccessExpression */;
+        return node.kind === 205 /* ElementAccessExpression */;
     }
     ts.isElementAccessExpression = isElementAccessExpression;
     function isCallExpression(node) {
-        return node.kind === 204 /* CallExpression */;
+        return node.kind === 206 /* CallExpression */;
     }
     ts.isCallExpression = isCallExpression;
     function isNewExpression(node) {
-        return node.kind === 205 /* NewExpression */;
+        return node.kind === 207 /* NewExpression */;
     }
     ts.isNewExpression = isNewExpression;
     function isTaggedTemplateExpression(node) {
-        return node.kind === 206 /* TaggedTemplateExpression */;
+        return node.kind === 208 /* TaggedTemplateExpression */;
     }
     ts.isTaggedTemplateExpression = isTaggedTemplateExpression;
     function isTypeAssertionExpression(node) {
-        return node.kind === 207 /* TypeAssertionExpression */;
+        return node.kind === 209 /* TypeAssertionExpression */;
     }
     ts.isTypeAssertionExpression = isTypeAssertionExpression;
     function isParenthesizedExpression(node) {
-        return node.kind === 208 /* ParenthesizedExpression */;
+        return node.kind === 210 /* ParenthesizedExpression */;
     }
     ts.isParenthesizedExpression = isParenthesizedExpression;
     function isFunctionExpression(node) {
-        return node.kind === 209 /* FunctionExpression */;
+        return node.kind === 211 /* FunctionExpression */;
     }
     ts.isFunctionExpression = isFunctionExpression;
     function isArrowFunction(node) {
-        return node.kind === 210 /* ArrowFunction */;
+        return node.kind === 212 /* ArrowFunction */;
     }
     ts.isArrowFunction = isArrowFunction;
     function isDeleteExpression(node) {
-        return node.kind === 211 /* DeleteExpression */;
+        return node.kind === 213 /* DeleteExpression */;
     }
     ts.isDeleteExpression = isDeleteExpression;
     function isTypeOfExpression(node) {
-        return node.kind === 212 /* TypeOfExpression */;
+        return node.kind === 214 /* TypeOfExpression */;
     }
     ts.isTypeOfExpression = isTypeOfExpression;
     function isVoidExpression(node) {
-        return node.kind === 213 /* VoidExpression */;
+        return node.kind === 215 /* VoidExpression */;
     }
     ts.isVoidExpression = isVoidExpression;
     function isAwaitExpression(node) {
-        return node.kind === 214 /* AwaitExpression */;
+        return node.kind === 216 /* AwaitExpression */;
     }
     ts.isAwaitExpression = isAwaitExpression;
     function isPrefixUnaryExpression(node) {
-        return node.kind === 215 /* PrefixUnaryExpression */;
+        return node.kind === 217 /* PrefixUnaryExpression */;
     }
     ts.isPrefixUnaryExpression = isPrefixUnaryExpression;
     function isPostfixUnaryExpression(node) {
-        return node.kind === 216 /* PostfixUnaryExpression */;
+        return node.kind === 218 /* PostfixUnaryExpression */;
     }
     ts.isPostfixUnaryExpression = isPostfixUnaryExpression;
     function isBinaryExpression(node) {
-        return node.kind === 217 /* BinaryExpression */;
+        return node.kind === 219 /* BinaryExpression */;
     }
     ts.isBinaryExpression = isBinaryExpression;
     function isConditionalExpression(node) {
-        return node.kind === 218 /* ConditionalExpression */;
+        return node.kind === 220 /* ConditionalExpression */;
     }
     ts.isConditionalExpression = isConditionalExpression;
     function isTemplateExpression(node) {
-        return node.kind === 219 /* TemplateExpression */;
+        return node.kind === 221 /* TemplateExpression */;
     }
     ts.isTemplateExpression = isTemplateExpression;
     function isYieldExpression(node) {
-        return node.kind === 220 /* YieldExpression */;
+        return node.kind === 222 /* YieldExpression */;
     }
     ts.isYieldExpression = isYieldExpression;
     function isSpreadElement(node) {
-        return node.kind === 221 /* SpreadElement */;
+        return node.kind === 223 /* SpreadElement */;
     }
     ts.isSpreadElement = isSpreadElement;
     function isClassExpression(node) {
-        return node.kind === 222 /* ClassExpression */;
+        return node.kind === 224 /* ClassExpression */;
     }
     ts.isClassExpression = isClassExpression;
     function isOmittedExpression(node) {
-        return node.kind === 223 /* OmittedExpression */;
+        return node.kind === 225 /* OmittedExpression */;
     }
     ts.isOmittedExpression = isOmittedExpression;
     function isExpressionWithTypeArguments(node) {
-        return node.kind === 224 /* ExpressionWithTypeArguments */;
+        return node.kind === 226 /* ExpressionWithTypeArguments */;
     }
     ts.isExpressionWithTypeArguments = isExpressionWithTypeArguments;
     function isAsExpression(node) {
-        return node.kind === 225 /* AsExpression */;
+        return node.kind === 227 /* AsExpression */;
     }
     ts.isAsExpression = isAsExpression;
     function isNonNullExpression(node) {
-        return node.kind === 226 /* NonNullExpression */;
+        return node.kind === 228 /* NonNullExpression */;
     }
     ts.isNonNullExpression = isNonNullExpression;
     function isMetaProperty(node) {
-        return node.kind === 227 /* MetaProperty */;
+        return node.kind === 229 /* MetaProperty */;
     }
     ts.isMetaProperty = isMetaProperty;
     function isSyntheticExpression(node) {
-        return node.kind === 228 /* SyntheticExpression */;
+        return node.kind === 230 /* SyntheticExpression */;
     }
     ts.isSyntheticExpression = isSyntheticExpression;
     function isPartiallyEmittedExpression(node) {
-        return node.kind === 340 /* PartiallyEmittedExpression */;
+        return node.kind === 345 /* PartiallyEmittedExpression */;
     }
     ts.isPartiallyEmittedExpression = isPartiallyEmittedExpression;
     function isCommaListExpression(node) {
-        return node.kind === 341 /* CommaListExpression */;
+        return node.kind === 346 /* CommaListExpression */;
     }
     ts.isCommaListExpression = isCommaListExpression;
     // Misc
     function isTemplateSpan(node) {
-        return node.kind === 229 /* TemplateSpan */;
+        return node.kind === 231 /* TemplateSpan */;
     }
     ts.isTemplateSpan = isTemplateSpan;
     function isSemicolonClassElement(node) {
-        return node.kind === 230 /* SemicolonClassElement */;
+        return node.kind === 232 /* SemicolonClassElement */;
     }
     ts.isSemicolonClassElement = isSemicolonClassElement;
     // Elements
     function isBlock(node) {
-        return node.kind === 231 /* Block */;
+        return node.kind === 233 /* Block */;
     }
     ts.isBlock = isBlock;
     function isVariableStatement(node) {
-        return node.kind === 233 /* VariableStatement */;
+        return node.kind === 235 /* VariableStatement */;
     }
     ts.isVariableStatement = isVariableStatement;
     function isEmptyStatement(node) {
-        return node.kind === 232 /* EmptyStatement */;
+        return node.kind === 234 /* EmptyStatement */;
     }
     ts.isEmptyStatement = isEmptyStatement;
     function isExpressionStatement(node) {
-        return node.kind === 234 /* ExpressionStatement */;
+        return node.kind === 236 /* ExpressionStatement */;
     }
     ts.isExpressionStatement = isExpressionStatement;
     function isIfStatement(node) {
-        return node.kind === 235 /* IfStatement */;
+        return node.kind === 237 /* IfStatement */;
     }
     ts.isIfStatement = isIfStatement;
     function isDoStatement(node) {
-        return node.kind === 236 /* DoStatement */;
+        return node.kind === 238 /* DoStatement */;
     }
     ts.isDoStatement = isDoStatement;
     function isWhileStatement(node) {
-        return node.kind === 237 /* WhileStatement */;
+        return node.kind === 239 /* WhileStatement */;
     }
     ts.isWhileStatement = isWhileStatement;
     function isForStatement(node) {
-        return node.kind === 238 /* ForStatement */;
+        return node.kind === 240 /* ForStatement */;
     }
     ts.isForStatement = isForStatement;
     function isForInStatement(node) {
-        return node.kind === 239 /* ForInStatement */;
+        return node.kind === 241 /* ForInStatement */;
     }
     ts.isForInStatement = isForInStatement;
     function isForOfStatement(node) {
-        return node.kind === 240 /* ForOfStatement */;
+        return node.kind === 242 /* ForOfStatement */;
     }
     ts.isForOfStatement = isForOfStatement;
     function isContinueStatement(node) {
-        return node.kind === 241 /* ContinueStatement */;
+        return node.kind === 243 /* ContinueStatement */;
     }
     ts.isContinueStatement = isContinueStatement;
     function isBreakStatement(node) {
-        return node.kind === 242 /* BreakStatement */;
+        return node.kind === 244 /* BreakStatement */;
     }
     ts.isBreakStatement = isBreakStatement;
     function isReturnStatement(node) {
-        return node.kind === 243 /* ReturnStatement */;
+        return node.kind === 245 /* ReturnStatement */;
     }
     ts.isReturnStatement = isReturnStatement;
     function isWithStatement(node) {
-        return node.kind === 244 /* WithStatement */;
+        return node.kind === 246 /* WithStatement */;
     }
     ts.isWithStatement = isWithStatement;
     function isSwitchStatement(node) {
-        return node.kind === 245 /* SwitchStatement */;
+        return node.kind === 247 /* SwitchStatement */;
     }
     ts.isSwitchStatement = isSwitchStatement;
     function isLabeledStatement(node) {
-        return node.kind === 246 /* LabeledStatement */;
+        return node.kind === 248 /* LabeledStatement */;
     }
     ts.isLabeledStatement = isLabeledStatement;
     function isThrowStatement(node) {
-        return node.kind === 247 /* ThrowStatement */;
+        return node.kind === 249 /* ThrowStatement */;
     }
     ts.isThrowStatement = isThrowStatement;
     function isTryStatement(node) {
-        return node.kind === 248 /* TryStatement */;
+        return node.kind === 250 /* TryStatement */;
     }
     ts.isTryStatement = isTryStatement;
     function isDebuggerStatement(node) {
-        return node.kind === 249 /* DebuggerStatement */;
+        return node.kind === 251 /* DebuggerStatement */;
     }
     ts.isDebuggerStatement = isDebuggerStatement;
     function isVariableDeclaration(node) {
-        return node.kind === 250 /* VariableDeclaration */;
+        return node.kind === 252 /* VariableDeclaration */;
     }
     ts.isVariableDeclaration = isVariableDeclaration;
     function isVariableDeclarationList(node) {
-        return node.kind === 251 /* VariableDeclarationList */;
+        return node.kind === 253 /* VariableDeclarationList */;
     }
     ts.isVariableDeclarationList = isVariableDeclarationList;
     function isFunctionDeclaration(node) {
-        return node.kind === 252 /* FunctionDeclaration */;
+        return node.kind === 254 /* FunctionDeclaration */;
     }
     ts.isFunctionDeclaration = isFunctionDeclaration;
     function isClassDeclaration(node) {
-        return node.kind === 253 /* ClassDeclaration */;
+        return node.kind === 255 /* ClassDeclaration */;
     }
     ts.isClassDeclaration = isClassDeclaration;
     function isInterfaceDeclaration(node) {
-        return node.kind === 254 /* InterfaceDeclaration */;
+        return node.kind === 256 /* InterfaceDeclaration */;
     }
     ts.isInterfaceDeclaration = isInterfaceDeclaration;
     function isTypeAliasDeclaration(node) {
-        return node.kind === 255 /* TypeAliasDeclaration */;
+        return node.kind === 257 /* TypeAliasDeclaration */;
     }
     ts.isTypeAliasDeclaration = isTypeAliasDeclaration;
     function isEnumDeclaration(node) {
-        return node.kind === 256 /* EnumDeclaration */;
+        return node.kind === 258 /* EnumDeclaration */;
     }
     ts.isEnumDeclaration = isEnumDeclaration;
     function isModuleDeclaration(node) {
-        return node.kind === 257 /* ModuleDeclaration */;
+        return node.kind === 259 /* ModuleDeclaration */;
     }
     ts.isModuleDeclaration = isModuleDeclaration;
     function isModuleBlock(node) {
-        return node.kind === 258 /* ModuleBlock */;
+        return node.kind === 260 /* ModuleBlock */;
     }
     ts.isModuleBlock = isModuleBlock;
     function isCaseBlock(node) {
-        return node.kind === 259 /* CaseBlock */;
+        return node.kind === 261 /* CaseBlock */;
     }
     ts.isCaseBlock = isCaseBlock;
     function isNamespaceExportDeclaration(node) {
-        return node.kind === 260 /* NamespaceExportDeclaration */;
+        return node.kind === 262 /* NamespaceExportDeclaration */;
     }
     ts.isNamespaceExportDeclaration = isNamespaceExportDeclaration;
     function isImportEqualsDeclaration(node) {
-        return node.kind === 261 /* ImportEqualsDeclaration */;
+        return node.kind === 263 /* ImportEqualsDeclaration */;
     }
     ts.isImportEqualsDeclaration = isImportEqualsDeclaration;
     function isImportDeclaration(node) {
-        return node.kind === 262 /* ImportDeclaration */;
+        return node.kind === 264 /* ImportDeclaration */;
     }
     ts.isImportDeclaration = isImportDeclaration;
     function isImportClause(node) {
-        return node.kind === 263 /* ImportClause */;
+        return node.kind === 265 /* ImportClause */;
     }
     ts.isImportClause = isImportClause;
     function isNamespaceImport(node) {
-        return node.kind === 264 /* NamespaceImport */;
+        return node.kind === 266 /* NamespaceImport */;
     }
     ts.isNamespaceImport = isNamespaceImport;
     function isNamespaceExport(node) {
-        return node.kind === 270 /* NamespaceExport */;
+        return node.kind === 272 /* NamespaceExport */;
     }
     ts.isNamespaceExport = isNamespaceExport;
     function isNamedImports(node) {
-        return node.kind === 265 /* NamedImports */;
+        return node.kind === 267 /* NamedImports */;
     }
     ts.isNamedImports = isNamedImports;
     function isImportSpecifier(node) {
-        return node.kind === 266 /* ImportSpecifier */;
+        return node.kind === 268 /* ImportSpecifier */;
     }
     ts.isImportSpecifier = isImportSpecifier;
     function isExportAssignment(node) {
-        return node.kind === 267 /* ExportAssignment */;
+        return node.kind === 269 /* ExportAssignment */;
     }
     ts.isExportAssignment = isExportAssignment;
     function isExportDeclaration(node) {
-        return node.kind === 268 /* ExportDeclaration */;
+        return node.kind === 270 /* ExportDeclaration */;
     }
     ts.isExportDeclaration = isExportDeclaration;
     function isNamedExports(node) {
-        return node.kind === 269 /* NamedExports */;
+        return node.kind === 271 /* NamedExports */;
     }
     ts.isNamedExports = isNamedExports;
     function isExportSpecifier(node) {
-        return node.kind === 271 /* ExportSpecifier */;
+        return node.kind === 273 /* ExportSpecifier */;
     }
     ts.isExportSpecifier = isExportSpecifier;
     function isMissingDeclaration(node) {
-        return node.kind === 272 /* MissingDeclaration */;
+        return node.kind === 274 /* MissingDeclaration */;
     }
     ts.isMissingDeclaration = isMissingDeclaration;
     function isNotEmittedStatement(node) {
-        return node.kind === 339 /* NotEmittedStatement */;
+        return node.kind === 344 /* NotEmittedStatement */;
     }
     ts.isNotEmittedStatement = isNotEmittedStatement;
     /* @internal */
     function isSyntheticReference(node) {
-        return node.kind === 344 /* SyntheticReferenceExpression */;
+        return node.kind === 349 /* SyntheticReferenceExpression */;
     }
     ts.isSyntheticReference = isSyntheticReference;
     /* @internal */
     function isMergeDeclarationMarker(node) {
-        return node.kind === 342 /* MergeDeclarationMarker */;
+        return node.kind === 347 /* MergeDeclarationMarker */;
     }
     ts.isMergeDeclarationMarker = isMergeDeclarationMarker;
     /* @internal */
     function isEndOfDeclarationMarker(node) {
-        return node.kind === 343 /* EndOfDeclarationMarker */;
+        return node.kind === 348 /* EndOfDeclarationMarker */;
     }
     ts.isEndOfDeclarationMarker = isEndOfDeclarationMarker;
     // Module References
     function isExternalModuleReference(node) {
-        return node.kind === 273 /* ExternalModuleReference */;
+        return node.kind === 275 /* ExternalModuleReference */;
     }
     ts.isExternalModuleReference = isExternalModuleReference;
     // JSX
     function isJsxElement(node) {
-        return node.kind === 274 /* JsxElement */;
+        return node.kind === 276 /* JsxElement */;
     }
     ts.isJsxElement = isJsxElement;
     function isJsxSelfClosingElement(node) {
-        return node.kind === 275 /* JsxSelfClosingElement */;
+        return node.kind === 277 /* JsxSelfClosingElement */;
     }
     ts.isJsxSelfClosingElement = isJsxSelfClosingElement;
     function isJsxOpeningElement(node) {
-        return node.kind === 276 /* JsxOpeningElement */;
+        return node.kind === 278 /* JsxOpeningElement */;
     }
     ts.isJsxOpeningElement = isJsxOpeningElement;
     function isJsxClosingElement(node) {
-        return node.kind === 277 /* JsxClosingElement */;
+        return node.kind === 279 /* JsxClosingElement */;
     }
     ts.isJsxClosingElement = isJsxClosingElement;
     function isJsxFragment(node) {
-        return node.kind === 278 /* JsxFragment */;
+        return node.kind === 280 /* JsxFragment */;
     }
     ts.isJsxFragment = isJsxFragment;
     function isJsxOpeningFragment(node) {
-        return node.kind === 279 /* JsxOpeningFragment */;
+        return node.kind === 281 /* JsxOpeningFragment */;
     }
     ts.isJsxOpeningFragment = isJsxOpeningFragment;
     function isJsxClosingFragment(node) {
-        return node.kind === 280 /* JsxClosingFragment */;
+        return node.kind === 282 /* JsxClosingFragment */;
     }
     ts.isJsxClosingFragment = isJsxClosingFragment;
     function isJsxAttribute(node) {
-        return node.kind === 281 /* JsxAttribute */;
+        return node.kind === 283 /* JsxAttribute */;
     }
     ts.isJsxAttribute = isJsxAttribute;
     function isJsxAttributes(node) {
-        return node.kind === 282 /* JsxAttributes */;
+        return node.kind === 284 /* JsxAttributes */;
     }
     ts.isJsxAttributes = isJsxAttributes;
     function isJsxSpreadAttribute(node) {
-        return node.kind === 283 /* JsxSpreadAttribute */;
+        return node.kind === 285 /* JsxSpreadAttribute */;
     }
     ts.isJsxSpreadAttribute = isJsxSpreadAttribute;
     function isJsxExpression(node) {
-        return node.kind === 284 /* JsxExpression */;
+        return node.kind === 286 /* JsxExpression */;
     }
     ts.isJsxExpression = isJsxExpression;
     // Clauses
     function isCaseClause(node) {
-        return node.kind === 285 /* CaseClause */;
+        return node.kind === 287 /* CaseClause */;
     }
     ts.isCaseClause = isCaseClause;
     function isDefaultClause(node) {
-        return node.kind === 286 /* DefaultClause */;
+        return node.kind === 288 /* DefaultClause */;
     }
     ts.isDefaultClause = isDefaultClause;
     function isHeritageClause(node) {
-        return node.kind === 287 /* HeritageClause */;
+        return node.kind === 289 /* HeritageClause */;
     }
     ts.isHeritageClause = isHeritageClause;
     function isCatchClause(node) {
-        return node.kind === 288 /* CatchClause */;
+        return node.kind === 290 /* CatchClause */;
     }
     ts.isCatchClause = isCatchClause;
     // Property assignments
     function isPropertyAssignment(node) {
-        return node.kind === 289 /* PropertyAssignment */;
+        return node.kind === 291 /* PropertyAssignment */;
     }
     ts.isPropertyAssignment = isPropertyAssignment;
     function isShorthandPropertyAssignment(node) {
-        return node.kind === 290 /* ShorthandPropertyAssignment */;
+        return node.kind === 292 /* ShorthandPropertyAssignment */;
     }
     ts.isShorthandPropertyAssignment = isShorthandPropertyAssignment;
     function isSpreadAssignment(node) {
-        return node.kind === 291 /* SpreadAssignment */;
+        return node.kind === 293 /* SpreadAssignment */;
     }
     ts.isSpreadAssignment = isSpreadAssignment;
     // Enum
     function isEnumMember(node) {
-        return node.kind === 292 /* EnumMember */;
+        return node.kind === 294 /* EnumMember */;
     }
     ts.isEnumMember = isEnumMember;
     // Unparsed
     // TODO(rbuckton): isUnparsedPrologue
     function isUnparsedPrepend(node) {
-        return node.kind === 294 /* UnparsedPrepend */;
+        return node.kind === 296 /* UnparsedPrepend */;
     }
     ts.isUnparsedPrepend = isUnparsedPrepend;
     // TODO(rbuckton): isUnparsedText
@@ -27642,164 +28244,176 @@
     // TODO(rbuckton): isUnparsedSyntheticReference
     // Top-level nodes
     function isSourceFile(node) {
-        return node.kind === 298 /* SourceFile */;
+        return node.kind === 300 /* SourceFile */;
     }
     ts.isSourceFile = isSourceFile;
     function isBundle(node) {
-        return node.kind === 299 /* Bundle */;
+        return node.kind === 301 /* Bundle */;
     }
     ts.isBundle = isBundle;
     function isUnparsedSource(node) {
-        return node.kind === 300 /* UnparsedSource */;
+        return node.kind === 302 /* UnparsedSource */;
     }
     ts.isUnparsedSource = isUnparsedSource;
     // TODO(rbuckton): isInputFiles
     // JSDoc Elements
     function isJSDocTypeExpression(node) {
-        return node.kind === 302 /* JSDocTypeExpression */;
+        return node.kind === 304 /* JSDocTypeExpression */;
     }
     ts.isJSDocTypeExpression = isJSDocTypeExpression;
     function isJSDocNameReference(node) {
-        return node.kind === 303 /* JSDocNameReference */;
+        return node.kind === 305 /* JSDocNameReference */;
     }
     ts.isJSDocNameReference = isJSDocNameReference;
+    function isJSDocMemberName(node) {
+        return node.kind === 306 /* JSDocMemberName */;
+    }
+    ts.isJSDocMemberName = isJSDocMemberName;
     function isJSDocLink(node) {
-        return node.kind === 316 /* JSDocLink */;
+        return node.kind === 319 /* JSDocLink */;
     }
     ts.isJSDocLink = isJSDocLink;
+    function isJSDocLinkCode(node) {
+        return node.kind === 320 /* JSDocLinkCode */;
+    }
+    ts.isJSDocLinkCode = isJSDocLinkCode;
+    function isJSDocLinkPlain(node) {
+        return node.kind === 321 /* JSDocLinkPlain */;
+    }
+    ts.isJSDocLinkPlain = isJSDocLinkPlain;
     function isJSDocAllType(node) {
-        return node.kind === 304 /* JSDocAllType */;
+        return node.kind === 307 /* JSDocAllType */;
     }
     ts.isJSDocAllType = isJSDocAllType;
     function isJSDocUnknownType(node) {
-        return node.kind === 305 /* JSDocUnknownType */;
+        return node.kind === 308 /* JSDocUnknownType */;
     }
     ts.isJSDocUnknownType = isJSDocUnknownType;
     function isJSDocNullableType(node) {
-        return node.kind === 306 /* JSDocNullableType */;
+        return node.kind === 309 /* JSDocNullableType */;
     }
     ts.isJSDocNullableType = isJSDocNullableType;
     function isJSDocNonNullableType(node) {
-        return node.kind === 307 /* JSDocNonNullableType */;
+        return node.kind === 310 /* JSDocNonNullableType */;
     }
     ts.isJSDocNonNullableType = isJSDocNonNullableType;
     function isJSDocOptionalType(node) {
-        return node.kind === 308 /* JSDocOptionalType */;
+        return node.kind === 311 /* JSDocOptionalType */;
     }
     ts.isJSDocOptionalType = isJSDocOptionalType;
     function isJSDocFunctionType(node) {
-        return node.kind === 309 /* JSDocFunctionType */;
+        return node.kind === 312 /* JSDocFunctionType */;
     }
     ts.isJSDocFunctionType = isJSDocFunctionType;
     function isJSDocVariadicType(node) {
-        return node.kind === 310 /* JSDocVariadicType */;
+        return node.kind === 313 /* JSDocVariadicType */;
     }
     ts.isJSDocVariadicType = isJSDocVariadicType;
     function isJSDocNamepathType(node) {
-        return node.kind === 311 /* JSDocNamepathType */;
+        return node.kind === 314 /* JSDocNamepathType */;
     }
     ts.isJSDocNamepathType = isJSDocNamepathType;
     function isJSDoc(node) {
-        return node.kind === 312 /* JSDocComment */;
+        return node.kind === 315 /* JSDocComment */;
     }
     ts.isJSDoc = isJSDoc;
     function isJSDocTypeLiteral(node) {
-        return node.kind === 314 /* JSDocTypeLiteral */;
+        return node.kind === 317 /* JSDocTypeLiteral */;
     }
     ts.isJSDocTypeLiteral = isJSDocTypeLiteral;
     function isJSDocSignature(node) {
-        return node.kind === 315 /* JSDocSignature */;
+        return node.kind === 318 /* JSDocSignature */;
     }
     ts.isJSDocSignature = isJSDocSignature;
     // JSDoc Tags
     function isJSDocAugmentsTag(node) {
-        return node.kind === 318 /* JSDocAugmentsTag */;
+        return node.kind === 323 /* JSDocAugmentsTag */;
     }
     ts.isJSDocAugmentsTag = isJSDocAugmentsTag;
     function isJSDocAuthorTag(node) {
-        return node.kind === 320 /* JSDocAuthorTag */;
+        return node.kind === 325 /* JSDocAuthorTag */;
     }
     ts.isJSDocAuthorTag = isJSDocAuthorTag;
     function isJSDocClassTag(node) {
-        return node.kind === 322 /* JSDocClassTag */;
+        return node.kind === 327 /* JSDocClassTag */;
     }
     ts.isJSDocClassTag = isJSDocClassTag;
     function isJSDocCallbackTag(node) {
-        return node.kind === 328 /* JSDocCallbackTag */;
+        return node.kind === 333 /* JSDocCallbackTag */;
     }
     ts.isJSDocCallbackTag = isJSDocCallbackTag;
     function isJSDocPublicTag(node) {
-        return node.kind === 323 /* JSDocPublicTag */;
+        return node.kind === 328 /* JSDocPublicTag */;
     }
     ts.isJSDocPublicTag = isJSDocPublicTag;
     function isJSDocPrivateTag(node) {
-        return node.kind === 324 /* JSDocPrivateTag */;
+        return node.kind === 329 /* JSDocPrivateTag */;
     }
     ts.isJSDocPrivateTag = isJSDocPrivateTag;
     function isJSDocProtectedTag(node) {
-        return node.kind === 325 /* JSDocProtectedTag */;
+        return node.kind === 330 /* JSDocProtectedTag */;
     }
     ts.isJSDocProtectedTag = isJSDocProtectedTag;
     function isJSDocReadonlyTag(node) {
-        return node.kind === 326 /* JSDocReadonlyTag */;
+        return node.kind === 331 /* JSDocReadonlyTag */;
     }
     ts.isJSDocReadonlyTag = isJSDocReadonlyTag;
     function isJSDocOverrideTag(node) {
-        return node.kind === 327 /* JSDocOverrideTag */;
+        return node.kind === 332 /* JSDocOverrideTag */;
     }
     ts.isJSDocOverrideTag = isJSDocOverrideTag;
     function isJSDocDeprecatedTag(node) {
-        return node.kind === 321 /* JSDocDeprecatedTag */;
+        return node.kind === 326 /* JSDocDeprecatedTag */;
     }
     ts.isJSDocDeprecatedTag = isJSDocDeprecatedTag;
     function isJSDocSeeTag(node) {
-        return node.kind === 336 /* JSDocSeeTag */;
+        return node.kind === 341 /* JSDocSeeTag */;
     }
     ts.isJSDocSeeTag = isJSDocSeeTag;
     function isJSDocEnumTag(node) {
-        return node.kind === 329 /* JSDocEnumTag */;
+        return node.kind === 334 /* JSDocEnumTag */;
     }
     ts.isJSDocEnumTag = isJSDocEnumTag;
     function isJSDocParameterTag(node) {
-        return node.kind === 330 /* JSDocParameterTag */;
+        return node.kind === 335 /* JSDocParameterTag */;
     }
     ts.isJSDocParameterTag = isJSDocParameterTag;
     function isJSDocReturnTag(node) {
-        return node.kind === 331 /* JSDocReturnTag */;
+        return node.kind === 336 /* JSDocReturnTag */;
     }
     ts.isJSDocReturnTag = isJSDocReturnTag;
     function isJSDocThisTag(node) {
-        return node.kind === 332 /* JSDocThisTag */;
+        return node.kind === 337 /* JSDocThisTag */;
     }
     ts.isJSDocThisTag = isJSDocThisTag;
     function isJSDocTypeTag(node) {
-        return node.kind === 333 /* JSDocTypeTag */;
+        return node.kind === 338 /* JSDocTypeTag */;
     }
     ts.isJSDocTypeTag = isJSDocTypeTag;
     function isJSDocTemplateTag(node) {
-        return node.kind === 334 /* JSDocTemplateTag */;
+        return node.kind === 339 /* JSDocTemplateTag */;
     }
     ts.isJSDocTemplateTag = isJSDocTemplateTag;
     function isJSDocTypedefTag(node) {
-        return node.kind === 335 /* JSDocTypedefTag */;
+        return node.kind === 340 /* JSDocTypedefTag */;
     }
     ts.isJSDocTypedefTag = isJSDocTypedefTag;
     function isJSDocUnknownTag(node) {
-        return node.kind === 317 /* JSDocTag */;
+        return node.kind === 322 /* JSDocTag */;
     }
     ts.isJSDocUnknownTag = isJSDocUnknownTag;
     function isJSDocPropertyTag(node) {
-        return node.kind === 337 /* JSDocPropertyTag */;
+        return node.kind === 342 /* JSDocPropertyTag */;
     }
     ts.isJSDocPropertyTag = isJSDocPropertyTag;
     function isJSDocImplementsTag(node) {
-        return node.kind === 319 /* JSDocImplementsTag */;
+        return node.kind === 324 /* JSDocImplementsTag */;
     }
     ts.isJSDocImplementsTag = isJSDocImplementsTag;
     // Synthesized list
     /* @internal */
     function isSyntaxList(n) {
-        return n.kind === 338 /* SyntaxList */;
+        return n.kind === 343 /* SyntaxList */;
     }
     ts.isSyntaxList = isSyntaxList;
 })(ts || (ts = {}));
@@ -27918,7 +28532,7 @@
     ts.createForOfBindingStatement = createForOfBindingStatement;
     function insertLeadingStatement(factory, dest, source) {
         if (ts.isBlock(dest)) {
-            return factory.updateBlock(dest, ts.setTextRange(factory.createNodeArray(__spreadArray([source], dest.statements)), dest.statements));
+            return factory.updateBlock(dest, ts.setTextRange(factory.createNodeArray(__spreadArray([source], dest.statements, true)), dest.statements));
         }
         else {
             return factory.createBlock(factory.createNodeArray([dest, source]), /*multiLine*/ true);
@@ -27998,19 +28612,74 @@
             ts.Debug.failBadSyntaxKind(property.name, "Private identifiers are not allowed in object literals.");
         }
         switch (property.kind) {
-            case 168 /* GetAccessor */:
-            case 169 /* SetAccessor */:
+            case 170 /* GetAccessor */:
+            case 171 /* SetAccessor */:
                 return createExpressionForAccessorDeclaration(factory, node.properties, property, receiver, !!node.multiLine);
-            case 289 /* PropertyAssignment */:
+            case 291 /* PropertyAssignment */:
                 return createExpressionForPropertyAssignment(factory, property, receiver);
-            case 290 /* ShorthandPropertyAssignment */:
+            case 292 /* ShorthandPropertyAssignment */:
                 return createExpressionForShorthandPropertyAssignment(factory, property, receiver);
-            case 166 /* MethodDeclaration */:
+            case 167 /* MethodDeclaration */:
                 return createExpressionForMethodDeclaration(factory, property, receiver);
         }
     }
     ts.createExpressionForObjectLiteralElementLike = createExpressionForObjectLiteralElementLike;
     /**
+     * Expand the read and increment/decrement operations a pre- or post-increment or pre- or post-decrement expression.
+     *
+     * ```ts
+     * // input
+     * <expression>++
+     * // output (if result is not discarded)
+     * var <temp>;
+     * (<temp> = <expression>, <resultVariable> = <temp>++, <temp>)
+     * // output (if result is discarded)
+     * var <temp>;
+     * (<temp> = <expression>, <temp>++, <temp>)
+     *
+     * // input
+     * ++<expression>
+     * // output (if result is not discarded)
+     * var <temp>;
+     * (<temp> = <expression>, <resultVariable> = ++<temp>)
+     * // output (if result is discarded)
+     * var <temp>;
+     * (<temp> = <expression>, ++<temp>)
+     * ```
+     *
+     * It is up to the caller to supply a temporary variable for `<resultVariable>` if one is needed.
+     * The temporary variable `<temp>` is injected so that `++` and `--` work uniformly with `number` and `bigint`.
+     * The result of the expression is always the final result of incrementing or decrementing the expression, so that it can be used for storage.
+     *
+     * @param factory {@link NodeFactory} used to create the expanded representation.
+     * @param node The original prefix or postfix unary node.
+     * @param expression The expression to use as the value to increment or decrement
+     * @param resultVariable A temporary variable in which to store the result. Pass `undefined` if the result is discarded, or if the value of `<temp>` is the expected result.
+     */
+    function expandPreOrPostfixIncrementOrDecrementExpression(factory, node, expression, recordTempVariable, resultVariable) {
+        var operator = node.operator;
+        ts.Debug.assert(operator === 45 /* PlusPlusToken */ || operator === 46 /* MinusMinusToken */, "Expected 'node' to be a pre- or post-increment or pre- or post-decrement expression");
+        var temp = factory.createTempVariable(recordTempVariable);
+        expression = factory.createAssignment(temp, expression);
+        ts.setTextRange(expression, node.operand);
+        var operation = ts.isPrefixUnaryExpression(node) ?
+            factory.createPrefixUnaryExpression(operator, temp) :
+            factory.createPostfixUnaryExpression(temp, operator);
+        ts.setTextRange(operation, node);
+        if (resultVariable) {
+            operation = factory.createAssignment(resultVariable, operation);
+            ts.setTextRange(operation, node);
+        }
+        expression = factory.createComma(expression, operation);
+        ts.setTextRange(expression, node);
+        if (ts.isPostfixUnaryExpression(node)) {
+            expression = factory.createComma(expression, temp);
+            ts.setTextRange(expression, node);
+        }
+        return expression;
+    }
+    ts.expandPreOrPostfixIncrementOrDecrementExpression = expandPreOrPostfixIncrementOrDecrementExpression;
+    /**
      * Gets whether an identifier should only be referred to by its internal name.
      */
     function isInternalName(node) {
@@ -28058,21 +28727,21 @@
     }
     ts.startsWithUseStrict = startsWithUseStrict;
     function isCommaSequence(node) {
-        return node.kind === 217 /* BinaryExpression */ && node.operatorToken.kind === 27 /* CommaToken */ ||
-            node.kind === 341 /* CommaListExpression */;
+        return node.kind === 219 /* BinaryExpression */ && node.operatorToken.kind === 27 /* CommaToken */ ||
+            node.kind === 346 /* CommaListExpression */;
     }
     ts.isCommaSequence = isCommaSequence;
     function isOuterExpression(node, kinds) {
         if (kinds === void 0) { kinds = 15 /* All */; }
         switch (node.kind) {
-            case 208 /* ParenthesizedExpression */:
+            case 210 /* ParenthesizedExpression */:
                 return (kinds & 1 /* Parentheses */) !== 0;
-            case 207 /* TypeAssertionExpression */:
-            case 225 /* AsExpression */:
+            case 209 /* TypeAssertionExpression */:
+            case 227 /* AsExpression */:
                 return (kinds & 2 /* TypeAssertions */) !== 0;
-            case 226 /* NonNullExpression */:
+            case 228 /* NonNullExpression */:
                 return (kinds & 4 /* NonNullAssertions */) !== 0;
-            case 340 /* PartiallyEmittedExpression */:
+            case 345 /* PartiallyEmittedExpression */:
                 return (kinds & 8 /* PartiallyEmittedExpressions */) !== 0;
         }
         return false;
@@ -28193,10 +28862,10 @@
             var name = namespaceDeclaration.name;
             return ts.isGeneratedIdentifier(name) ? name : factory.createIdentifier(ts.getSourceTextOfNodeFromSourceFile(sourceFile, name) || ts.idText(name));
         }
-        if (node.kind === 262 /* ImportDeclaration */ && node.importClause) {
+        if (node.kind === 264 /* ImportDeclaration */ && node.importClause) {
             return factory.getGeneratedNameForNode(node);
         }
-        if (node.kind === 268 /* ExportDeclaration */ && node.moduleSpecifier) {
+        if (node.kind === 270 /* ExportDeclaration */ && node.moduleSpecifier) {
             return factory.getGeneratedNameForNode(node);
         }
         return undefined;
@@ -28315,7 +28984,7 @@
         }
         if (ts.isObjectLiteralElementLike(bindingElement)) {
             switch (bindingElement.kind) {
-                case 289 /* PropertyAssignment */:
+                case 291 /* PropertyAssignment */:
                     // `b` in `({ a: b } = ...)`
                     // `b` in `({ a: b = 1 } = ...)`
                     // `{b}` in `({ a: {b} } = ...)`
@@ -28327,11 +28996,11 @@
                     // `b[0]` in `({ a: b[0] } = ...)`
                     // `b[0]` in `({ a: b[0] = 1 } = ...)`
                     return getTargetOfBindingOrAssignmentElement(bindingElement.initializer);
-                case 290 /* ShorthandPropertyAssignment */:
+                case 292 /* ShorthandPropertyAssignment */:
                     // `a` in `({ a } = ...)`
                     // `a` in `({ a = 1 } = ...)`
                     return bindingElement.name;
-                case 291 /* SpreadAssignment */:
+                case 293 /* SpreadAssignment */:
                     // `a` in `({ ...a } = ...)`
                     return getTargetOfBindingOrAssignmentElement(bindingElement.expression);
             }
@@ -28363,12 +29032,12 @@
      */
     function getRestIndicatorOfBindingOrAssignmentElement(bindingElement) {
         switch (bindingElement.kind) {
-            case 161 /* Parameter */:
-            case 199 /* BindingElement */:
+            case 162 /* Parameter */:
+            case 201 /* BindingElement */:
                 // `...` in `let [...a] = ...`
                 return bindingElement.dotDotDotToken;
-            case 221 /* SpreadElement */:
-            case 291 /* SpreadAssignment */:
+            case 223 /* SpreadElement */:
+            case 293 /* SpreadAssignment */:
                 // `...` in `[...a] = ...`
                 return bindingElement;
         }
@@ -28386,7 +29055,7 @@
     ts.getPropertyNameOfBindingOrAssignmentElement = getPropertyNameOfBindingOrAssignmentElement;
     function tryGetPropertyNameOfBindingOrAssignmentElement(bindingElement) {
         switch (bindingElement.kind) {
-            case 199 /* BindingElement */:
+            case 201 /* BindingElement */:
                 // `a` in `let { a: b } = ...`
                 // `[a]` in `let { [a]: b } = ...`
                 // `"a"` in `let { "a": b } = ...`
@@ -28401,7 +29070,7 @@
                         : propertyName;
                 }
                 break;
-            case 289 /* PropertyAssignment */:
+            case 291 /* PropertyAssignment */:
                 // `a` in `({ a: b } = ...)`
                 // `[a]` in `({ [a]: b } = ...)`
                 // `"a"` in `({ "a": b } = ...)`
@@ -28416,7 +29085,7 @@
                         : propertyName;
                 }
                 break;
-            case 291 /* SpreadAssignment */:
+            case 293 /* SpreadAssignment */:
                 // `a` in `({ ...a } = ...)`
                 if (bindingElement.name && ts.isPrivateIdentifier(bindingElement.name)) {
                     return ts.Debug.failBadSyntaxKind(bindingElement.name);
@@ -28439,13 +29108,13 @@
      */
     function getElementsOfBindingOrAssignmentPattern(name) {
         switch (name.kind) {
-            case 197 /* ObjectBindingPattern */:
-            case 198 /* ArrayBindingPattern */:
-            case 200 /* ArrayLiteralExpression */:
+            case 199 /* ObjectBindingPattern */:
+            case 200 /* ArrayBindingPattern */:
+            case 202 /* ArrayLiteralExpression */:
                 // `a` in `{a}`
                 // `a` in `[a]`
                 return name.elements;
-            case 201 /* ObjectLiteralExpression */:
+            case 203 /* ObjectLiteralExpression */:
                 // `a` in `{a}`
                 return name.properties;
         }
@@ -28466,29 +29135,29 @@
     ts.getJSDocTypeAliasName = getJSDocTypeAliasName;
     function canHaveModifiers(node) {
         var kind = node.kind;
-        return kind === 161 /* Parameter */
-            || kind === 163 /* PropertySignature */
-            || kind === 164 /* PropertyDeclaration */
-            || kind === 165 /* MethodSignature */
-            || kind === 166 /* MethodDeclaration */
-            || kind === 167 /* Constructor */
-            || kind === 168 /* GetAccessor */
-            || kind === 169 /* SetAccessor */
-            || kind === 172 /* IndexSignature */
-            || kind === 209 /* FunctionExpression */
-            || kind === 210 /* ArrowFunction */
-            || kind === 222 /* ClassExpression */
-            || kind === 233 /* VariableStatement */
-            || kind === 252 /* FunctionDeclaration */
-            || kind === 253 /* ClassDeclaration */
-            || kind === 254 /* InterfaceDeclaration */
-            || kind === 255 /* TypeAliasDeclaration */
-            || kind === 256 /* EnumDeclaration */
-            || kind === 257 /* ModuleDeclaration */
-            || kind === 261 /* ImportEqualsDeclaration */
-            || kind === 262 /* ImportDeclaration */
-            || kind === 267 /* ExportAssignment */
-            || kind === 268 /* ExportDeclaration */;
+        return kind === 162 /* Parameter */
+            || kind === 164 /* PropertySignature */
+            || kind === 165 /* PropertyDeclaration */
+            || kind === 166 /* MethodSignature */
+            || kind === 167 /* MethodDeclaration */
+            || kind === 169 /* Constructor */
+            || kind === 170 /* GetAccessor */
+            || kind === 171 /* SetAccessor */
+            || kind === 174 /* IndexSignature */
+            || kind === 211 /* FunctionExpression */
+            || kind === 212 /* ArrowFunction */
+            || kind === 224 /* ClassExpression */
+            || kind === 235 /* VariableStatement */
+            || kind === 254 /* FunctionDeclaration */
+            || kind === 255 /* ClassDeclaration */
+            || kind === 256 /* InterfaceDeclaration */
+            || kind === 257 /* TypeAliasDeclaration */
+            || kind === 258 /* EnumDeclaration */
+            || kind === 259 /* ModuleDeclaration */
+            || kind === 263 /* ImportEqualsDeclaration */
+            || kind === 264 /* ImportDeclaration */
+            || kind === 269 /* ExportAssignment */
+            || kind === 270 /* ExportDeclaration */;
     }
     ts.canHaveModifiers = canHaveModifiers;
     ts.isTypeNodeOrTypeParameterDeclaration = ts.or(ts.isTypeNode, ts.isTypeParameterDeclaration);
@@ -28499,9 +29168,9 @@
     ts.isModuleName = ts.or(ts.isIdentifier, ts.isStringLiteral);
     function isLiteralTypeLikeExpression(node) {
         var kind = node.kind;
-        return kind === 103 /* NullKeyword */
-            || kind === 109 /* TrueKeyword */
-            || kind === 94 /* FalseKeyword */
+        return kind === 104 /* NullKeyword */
+            || kind === 110 /* TrueKeyword */
+            || kind === 95 /* FalseKeyword */
             || ts.isLiteralExpression(node)
             || ts.isPrefixUnaryExpression(node);
     }
@@ -28540,8 +29209,8 @@
             || kind === 32 /* LessThanEqualsToken */
             || kind === 31 /* GreaterThanToken */
             || kind === 33 /* GreaterThanEqualsToken */
-            || kind === 101 /* InstanceOfKeyword */
-            || kind === 100 /* InKeyword */;
+            || kind === 102 /* InstanceOfKeyword */
+            || kind === 101 /* InKeyword */;
     }
     function isRelationalOperatorOrHigher(kind) {
         return isRelationalOperator(kind)
@@ -28835,19 +29504,19 @@
      * that they appear in the source code. The language service depends on this property to locate nodes by position.
      */
     function forEachChild(node, cbNode, cbNodes) {
-        if (!node || node.kind <= 157 /* LastToken */) {
+        if (!node || node.kind <= 158 /* LastToken */) {
             return;
         }
         switch (node.kind) {
-            case 158 /* QualifiedName */:
+            case 159 /* QualifiedName */:
                 return visitNode(cbNode, node.left) ||
                     visitNode(cbNode, node.right);
-            case 160 /* TypeParameter */:
+            case 161 /* TypeParameter */:
                 return visitNode(cbNode, node.name) ||
                     visitNode(cbNode, node.constraint) ||
                     visitNode(cbNode, node.default) ||
                     visitNode(cbNode, node.expression);
-            case 290 /* ShorthandPropertyAssignment */:
+            case 292 /* ShorthandPropertyAssignment */:
                 return visitNodes(cbNode, cbNodes, node.decorators) ||
                     visitNodes(cbNode, cbNodes, node.modifiers) ||
                     visitNode(cbNode, node.name) ||
@@ -28855,9 +29524,9 @@
                     visitNode(cbNode, node.exclamationToken) ||
                     visitNode(cbNode, node.equalsToken) ||
                     visitNode(cbNode, node.objectAssignmentInitializer);
-            case 291 /* SpreadAssignment */:
+            case 293 /* SpreadAssignment */:
                 return visitNode(cbNode, node.expression);
-            case 161 /* Parameter */:
+            case 162 /* Parameter */:
                 return visitNodes(cbNode, cbNodes, node.decorators) ||
                     visitNodes(cbNode, cbNodes, node.modifiers) ||
                     visitNode(cbNode, node.dotDotDotToken) ||
@@ -28865,7 +29534,7 @@
                     visitNode(cbNode, node.questionToken) ||
                     visitNode(cbNode, node.type) ||
                     visitNode(cbNode, node.initializer);
-            case 164 /* PropertyDeclaration */:
+            case 165 /* PropertyDeclaration */:
                 return visitNodes(cbNode, cbNodes, node.decorators) ||
                     visitNodes(cbNode, cbNodes, node.modifiers) ||
                     visitNode(cbNode, node.name) ||
@@ -28873,51 +29542,51 @@
                     visitNode(cbNode, node.exclamationToken) ||
                     visitNode(cbNode, node.type) ||
                     visitNode(cbNode, node.initializer);
-            case 163 /* PropertySignature */:
+            case 164 /* PropertySignature */:
                 return visitNodes(cbNode, cbNodes, node.decorators) ||
                     visitNodes(cbNode, cbNodes, node.modifiers) ||
                     visitNode(cbNode, node.name) ||
                     visitNode(cbNode, node.questionToken) ||
                     visitNode(cbNode, node.type) ||
                     visitNode(cbNode, node.initializer);
-            case 289 /* PropertyAssignment */:
+            case 291 /* PropertyAssignment */:
                 return visitNodes(cbNode, cbNodes, node.decorators) ||
                     visitNodes(cbNode, cbNodes, node.modifiers) ||
                     visitNode(cbNode, node.name) ||
                     visitNode(cbNode, node.questionToken) ||
                     visitNode(cbNode, node.initializer);
-            case 250 /* VariableDeclaration */:
+            case 252 /* VariableDeclaration */:
                 return visitNodes(cbNode, cbNodes, node.decorators) ||
                     visitNodes(cbNode, cbNodes, node.modifiers) ||
                     visitNode(cbNode, node.name) ||
                     visitNode(cbNode, node.exclamationToken) ||
                     visitNode(cbNode, node.type) ||
                     visitNode(cbNode, node.initializer);
-            case 199 /* BindingElement */:
+            case 201 /* BindingElement */:
                 return visitNodes(cbNode, cbNodes, node.decorators) ||
                     visitNodes(cbNode, cbNodes, node.modifiers) ||
                     visitNode(cbNode, node.dotDotDotToken) ||
                     visitNode(cbNode, node.propertyName) ||
                     visitNode(cbNode, node.name) ||
                     visitNode(cbNode, node.initializer);
-            case 175 /* FunctionType */:
-            case 176 /* ConstructorType */:
-            case 170 /* CallSignature */:
-            case 171 /* ConstructSignature */:
-            case 172 /* IndexSignature */:
+            case 177 /* FunctionType */:
+            case 178 /* ConstructorType */:
+            case 172 /* CallSignature */:
+            case 173 /* ConstructSignature */:
+            case 174 /* IndexSignature */:
                 return visitNodes(cbNode, cbNodes, node.decorators) ||
                     visitNodes(cbNode, cbNodes, node.modifiers) ||
                     visitNodes(cbNode, cbNodes, node.typeParameters) ||
                     visitNodes(cbNode, cbNodes, node.parameters) ||
                     visitNode(cbNode, node.type);
-            case 166 /* MethodDeclaration */:
-            case 165 /* MethodSignature */:
-            case 167 /* Constructor */:
-            case 168 /* GetAccessor */:
-            case 169 /* SetAccessor */:
-            case 209 /* FunctionExpression */:
-            case 252 /* FunctionDeclaration */:
-            case 210 /* ArrowFunction */:
+            case 167 /* MethodDeclaration */:
+            case 166 /* MethodSignature */:
+            case 169 /* Constructor */:
+            case 170 /* GetAccessor */:
+            case 171 /* SetAccessor */:
+            case 211 /* FunctionExpression */:
+            case 254 /* FunctionDeclaration */:
+            case 212 /* ArrowFunction */:
                 return visitNodes(cbNode, cbNodes, node.decorators) ||
                     visitNodes(cbNode, cbNodes, node.modifiers) ||
                     visitNode(cbNode, node.asteriskToken) ||
@@ -28929,326 +29598,333 @@
                     visitNode(cbNode, node.type) ||
                     visitNode(cbNode, node.equalsGreaterThanToken) ||
                     visitNode(cbNode, node.body);
-            case 174 /* TypeReference */:
+            case 168 /* ClassStaticBlockDeclaration */:
+                return visitNodes(cbNode, cbNodes, node.decorators) ||
+                    visitNodes(cbNode, cbNodes, node.modifiers) ||
+                    visitNode(cbNode, node.body);
+            case 176 /* TypeReference */:
                 return visitNode(cbNode, node.typeName) ||
                     visitNodes(cbNode, cbNodes, node.typeArguments);
-            case 173 /* TypePredicate */:
+            case 175 /* TypePredicate */:
                 return visitNode(cbNode, node.assertsModifier) ||
                     visitNode(cbNode, node.parameterName) ||
                     visitNode(cbNode, node.type);
-            case 177 /* TypeQuery */:
+            case 179 /* TypeQuery */:
                 return visitNode(cbNode, node.exprName);
-            case 178 /* TypeLiteral */:
+            case 180 /* TypeLiteral */:
                 return visitNodes(cbNode, cbNodes, node.members);
-            case 179 /* ArrayType */:
+            case 181 /* ArrayType */:
                 return visitNode(cbNode, node.elementType);
-            case 180 /* TupleType */:
+            case 182 /* TupleType */:
                 return visitNodes(cbNode, cbNodes, node.elements);
-            case 183 /* UnionType */:
-            case 184 /* IntersectionType */:
+            case 185 /* UnionType */:
+            case 186 /* IntersectionType */:
                 return visitNodes(cbNode, cbNodes, node.types);
-            case 185 /* ConditionalType */:
+            case 187 /* ConditionalType */:
                 return visitNode(cbNode, node.checkType) ||
                     visitNode(cbNode, node.extendsType) ||
                     visitNode(cbNode, node.trueType) ||
                     visitNode(cbNode, node.falseType);
-            case 186 /* InferType */:
+            case 188 /* InferType */:
                 return visitNode(cbNode, node.typeParameter);
-            case 196 /* ImportType */:
+            case 198 /* ImportType */:
                 return visitNode(cbNode, node.argument) ||
                     visitNode(cbNode, node.qualifier) ||
                     visitNodes(cbNode, cbNodes, node.typeArguments);
-            case 187 /* ParenthesizedType */:
-            case 189 /* TypeOperator */:
+            case 189 /* ParenthesizedType */:
+            case 191 /* TypeOperator */:
                 return visitNode(cbNode, node.type);
-            case 190 /* IndexedAccessType */:
+            case 192 /* IndexedAccessType */:
                 return visitNode(cbNode, node.objectType) ||
                     visitNode(cbNode, node.indexType);
-            case 191 /* MappedType */:
+            case 193 /* MappedType */:
                 return visitNode(cbNode, node.readonlyToken) ||
                     visitNode(cbNode, node.typeParameter) ||
                     visitNode(cbNode, node.nameType) ||
                     visitNode(cbNode, node.questionToken) ||
                     visitNode(cbNode, node.type);
-            case 192 /* LiteralType */:
+            case 194 /* LiteralType */:
                 return visitNode(cbNode, node.literal);
-            case 193 /* NamedTupleMember */:
+            case 195 /* NamedTupleMember */:
                 return visitNode(cbNode, node.dotDotDotToken) ||
                     visitNode(cbNode, node.name) ||
                     visitNode(cbNode, node.questionToken) ||
                     visitNode(cbNode, node.type);
-            case 197 /* ObjectBindingPattern */:
-            case 198 /* ArrayBindingPattern */:
+            case 199 /* ObjectBindingPattern */:
+            case 200 /* ArrayBindingPattern */:
                 return visitNodes(cbNode, cbNodes, node.elements);
-            case 200 /* ArrayLiteralExpression */:
+            case 202 /* ArrayLiteralExpression */:
                 return visitNodes(cbNode, cbNodes, node.elements);
-            case 201 /* ObjectLiteralExpression */:
+            case 203 /* ObjectLiteralExpression */:
                 return visitNodes(cbNode, cbNodes, node.properties);
-            case 202 /* PropertyAccessExpression */:
+            case 204 /* PropertyAccessExpression */:
                 return visitNode(cbNode, node.expression) ||
                     visitNode(cbNode, node.questionDotToken) ||
                     visitNode(cbNode, node.name);
-            case 203 /* ElementAccessExpression */:
+            case 205 /* ElementAccessExpression */:
                 return visitNode(cbNode, node.expression) ||
                     visitNode(cbNode, node.questionDotToken) ||
                     visitNode(cbNode, node.argumentExpression);
-            case 204 /* CallExpression */:
-            case 205 /* NewExpression */:
+            case 206 /* CallExpression */:
+            case 207 /* NewExpression */:
                 return visitNode(cbNode, node.expression) ||
                     visitNode(cbNode, node.questionDotToken) ||
                     visitNodes(cbNode, cbNodes, node.typeArguments) ||
                     visitNodes(cbNode, cbNodes, node.arguments);
-            case 206 /* TaggedTemplateExpression */:
+            case 208 /* TaggedTemplateExpression */:
                 return visitNode(cbNode, node.tag) ||
                     visitNode(cbNode, node.questionDotToken) ||
                     visitNodes(cbNode, cbNodes, node.typeArguments) ||
                     visitNode(cbNode, node.template);
-            case 207 /* TypeAssertionExpression */:
+            case 209 /* TypeAssertionExpression */:
                 return visitNode(cbNode, node.type) ||
                     visitNode(cbNode, node.expression);
-            case 208 /* ParenthesizedExpression */:
+            case 210 /* ParenthesizedExpression */:
                 return visitNode(cbNode, node.expression);
-            case 211 /* DeleteExpression */:
+            case 213 /* DeleteExpression */:
                 return visitNode(cbNode, node.expression);
-            case 212 /* TypeOfExpression */:
+            case 214 /* TypeOfExpression */:
                 return visitNode(cbNode, node.expression);
-            case 213 /* VoidExpression */:
+            case 215 /* VoidExpression */:
                 return visitNode(cbNode, node.expression);
-            case 215 /* PrefixUnaryExpression */:
+            case 217 /* PrefixUnaryExpression */:
                 return visitNode(cbNode, node.operand);
-            case 220 /* YieldExpression */:
+            case 222 /* YieldExpression */:
                 return visitNode(cbNode, node.asteriskToken) ||
                     visitNode(cbNode, node.expression);
-            case 214 /* AwaitExpression */:
+            case 216 /* AwaitExpression */:
                 return visitNode(cbNode, node.expression);
-            case 216 /* PostfixUnaryExpression */:
+            case 218 /* PostfixUnaryExpression */:
                 return visitNode(cbNode, node.operand);
-            case 217 /* BinaryExpression */:
+            case 219 /* BinaryExpression */:
                 return visitNode(cbNode, node.left) ||
                     visitNode(cbNode, node.operatorToken) ||
                     visitNode(cbNode, node.right);
-            case 225 /* AsExpression */:
+            case 227 /* AsExpression */:
                 return visitNode(cbNode, node.expression) ||
                     visitNode(cbNode, node.type);
-            case 226 /* NonNullExpression */:
+            case 228 /* NonNullExpression */:
                 return visitNode(cbNode, node.expression);
-            case 227 /* MetaProperty */:
+            case 229 /* MetaProperty */:
                 return visitNode(cbNode, node.name);
-            case 218 /* ConditionalExpression */:
+            case 220 /* ConditionalExpression */:
                 return visitNode(cbNode, node.condition) ||
                     visitNode(cbNode, node.questionToken) ||
                     visitNode(cbNode, node.whenTrue) ||
                     visitNode(cbNode, node.colonToken) ||
                     visitNode(cbNode, node.whenFalse);
-            case 221 /* SpreadElement */:
+            case 223 /* SpreadElement */:
                 return visitNode(cbNode, node.expression);
-            case 231 /* Block */:
-            case 258 /* ModuleBlock */:
+            case 233 /* Block */:
+            case 260 /* ModuleBlock */:
                 return visitNodes(cbNode, cbNodes, node.statements);
-            case 298 /* SourceFile */:
+            case 300 /* SourceFile */:
                 return visitNodes(cbNode, cbNodes, node.statements) ||
                     visitNode(cbNode, node.endOfFileToken);
-            case 233 /* VariableStatement */:
+            case 235 /* VariableStatement */:
                 return visitNodes(cbNode, cbNodes, node.decorators) ||
                     visitNodes(cbNode, cbNodes, node.modifiers) ||
                     visitNode(cbNode, node.declarationList);
-            case 251 /* VariableDeclarationList */:
+            case 253 /* VariableDeclarationList */:
                 return visitNodes(cbNode, cbNodes, node.declarations);
-            case 234 /* ExpressionStatement */:
+            case 236 /* ExpressionStatement */:
                 return visitNode(cbNode, node.expression);
-            case 235 /* IfStatement */:
+            case 237 /* IfStatement */:
                 return visitNode(cbNode, node.expression) ||
                     visitNode(cbNode, node.thenStatement) ||
                     visitNode(cbNode, node.elseStatement);
-            case 236 /* DoStatement */:
+            case 238 /* DoStatement */:
                 return visitNode(cbNode, node.statement) ||
                     visitNode(cbNode, node.expression);
-            case 237 /* WhileStatement */:
+            case 239 /* WhileStatement */:
                 return visitNode(cbNode, node.expression) ||
                     visitNode(cbNode, node.statement);
-            case 238 /* ForStatement */:
+            case 240 /* ForStatement */:
                 return visitNode(cbNode, node.initializer) ||
                     visitNode(cbNode, node.condition) ||
                     visitNode(cbNode, node.incrementor) ||
                     visitNode(cbNode, node.statement);
-            case 239 /* ForInStatement */:
+            case 241 /* ForInStatement */:
                 return visitNode(cbNode, node.initializer) ||
                     visitNode(cbNode, node.expression) ||
                     visitNode(cbNode, node.statement);
-            case 240 /* ForOfStatement */:
+            case 242 /* ForOfStatement */:
                 return visitNode(cbNode, node.awaitModifier) ||
                     visitNode(cbNode, node.initializer) ||
                     visitNode(cbNode, node.expression) ||
                     visitNode(cbNode, node.statement);
-            case 241 /* ContinueStatement */:
-            case 242 /* BreakStatement */:
+            case 243 /* ContinueStatement */:
+            case 244 /* BreakStatement */:
                 return visitNode(cbNode, node.label);
-            case 243 /* ReturnStatement */:
+            case 245 /* ReturnStatement */:
                 return visitNode(cbNode, node.expression);
-            case 244 /* WithStatement */:
+            case 246 /* WithStatement */:
                 return visitNode(cbNode, node.expression) ||
                     visitNode(cbNode, node.statement);
-            case 245 /* SwitchStatement */:
+            case 247 /* SwitchStatement */:
                 return visitNode(cbNode, node.expression) ||
                     visitNode(cbNode, node.caseBlock);
-            case 259 /* CaseBlock */:
+            case 261 /* CaseBlock */:
                 return visitNodes(cbNode, cbNodes, node.clauses);
-            case 285 /* CaseClause */:
+            case 287 /* CaseClause */:
                 return visitNode(cbNode, node.expression) ||
                     visitNodes(cbNode, cbNodes, node.statements);
-            case 286 /* DefaultClause */:
+            case 288 /* DefaultClause */:
                 return visitNodes(cbNode, cbNodes, node.statements);
-            case 246 /* LabeledStatement */:
+            case 248 /* LabeledStatement */:
                 return visitNode(cbNode, node.label) ||
                     visitNode(cbNode, node.statement);
-            case 247 /* ThrowStatement */:
+            case 249 /* ThrowStatement */:
                 return visitNode(cbNode, node.expression);
-            case 248 /* TryStatement */:
+            case 250 /* TryStatement */:
                 return visitNode(cbNode, node.tryBlock) ||
                     visitNode(cbNode, node.catchClause) ||
                     visitNode(cbNode, node.finallyBlock);
-            case 288 /* CatchClause */:
+            case 290 /* CatchClause */:
                 return visitNode(cbNode, node.variableDeclaration) ||
                     visitNode(cbNode, node.block);
-            case 162 /* Decorator */:
+            case 163 /* Decorator */:
                 return visitNode(cbNode, node.expression);
-            case 253 /* ClassDeclaration */:
-            case 222 /* ClassExpression */:
+            case 255 /* ClassDeclaration */:
+            case 224 /* ClassExpression */:
                 return visitNodes(cbNode, cbNodes, node.decorators) ||
                     visitNodes(cbNode, cbNodes, node.modifiers) ||
                     visitNode(cbNode, node.name) ||
                     visitNodes(cbNode, cbNodes, node.typeParameters) ||
                     visitNodes(cbNode, cbNodes, node.heritageClauses) ||
                     visitNodes(cbNode, cbNodes, node.members);
-            case 254 /* InterfaceDeclaration */:
+            case 256 /* InterfaceDeclaration */:
                 return visitNodes(cbNode, cbNodes, node.decorators) ||
                     visitNodes(cbNode, cbNodes, node.modifiers) ||
                     visitNode(cbNode, node.name) ||
                     visitNodes(cbNode, cbNodes, node.typeParameters) ||
                     visitNodes(cbNode, cbNodes, node.heritageClauses) ||
                     visitNodes(cbNode, cbNodes, node.members);
-            case 255 /* TypeAliasDeclaration */:
+            case 257 /* TypeAliasDeclaration */:
                 return visitNodes(cbNode, cbNodes, node.decorators) ||
                     visitNodes(cbNode, cbNodes, node.modifiers) ||
                     visitNode(cbNode, node.name) ||
                     visitNodes(cbNode, cbNodes, node.typeParameters) ||
                     visitNode(cbNode, node.type);
-            case 256 /* EnumDeclaration */:
+            case 258 /* EnumDeclaration */:
                 return visitNodes(cbNode, cbNodes, node.decorators) ||
                     visitNodes(cbNode, cbNodes, node.modifiers) ||
                     visitNode(cbNode, node.name) ||
                     visitNodes(cbNode, cbNodes, node.members);
-            case 292 /* EnumMember */:
+            case 294 /* EnumMember */:
                 return visitNode(cbNode, node.name) ||
                     visitNode(cbNode, node.initializer);
-            case 257 /* ModuleDeclaration */:
+            case 259 /* ModuleDeclaration */:
                 return visitNodes(cbNode, cbNodes, node.decorators) ||
                     visitNodes(cbNode, cbNodes, node.modifiers) ||
                     visitNode(cbNode, node.name) ||
                     visitNode(cbNode, node.body);
-            case 261 /* ImportEqualsDeclaration */:
+            case 263 /* ImportEqualsDeclaration */:
                 return visitNodes(cbNode, cbNodes, node.decorators) ||
                     visitNodes(cbNode, cbNodes, node.modifiers) ||
                     visitNode(cbNode, node.name) ||
                     visitNode(cbNode, node.moduleReference);
-            case 262 /* ImportDeclaration */:
+            case 264 /* ImportDeclaration */:
                 return visitNodes(cbNode, cbNodes, node.decorators) ||
                     visitNodes(cbNode, cbNodes, node.modifiers) ||
                     visitNode(cbNode, node.importClause) ||
                     visitNode(cbNode, node.moduleSpecifier);
-            case 263 /* ImportClause */:
+            case 265 /* ImportClause */:
                 return visitNode(cbNode, node.name) ||
                     visitNode(cbNode, node.namedBindings);
-            case 260 /* NamespaceExportDeclaration */:
+            case 262 /* NamespaceExportDeclaration */:
                 return visitNode(cbNode, node.name);
-            case 264 /* NamespaceImport */:
+            case 266 /* NamespaceImport */:
                 return visitNode(cbNode, node.name);
-            case 270 /* NamespaceExport */:
+            case 272 /* NamespaceExport */:
                 return visitNode(cbNode, node.name);
-            case 265 /* NamedImports */:
-            case 269 /* NamedExports */:
+            case 267 /* NamedImports */:
+            case 271 /* NamedExports */:
                 return visitNodes(cbNode, cbNodes, node.elements);
-            case 268 /* ExportDeclaration */:
+            case 270 /* ExportDeclaration */:
                 return visitNodes(cbNode, cbNodes, node.decorators) ||
                     visitNodes(cbNode, cbNodes, node.modifiers) ||
                     visitNode(cbNode, node.exportClause) ||
                     visitNode(cbNode, node.moduleSpecifier);
-            case 266 /* ImportSpecifier */:
-            case 271 /* ExportSpecifier */:
+            case 268 /* ImportSpecifier */:
+            case 273 /* ExportSpecifier */:
                 return visitNode(cbNode, node.propertyName) ||
                     visitNode(cbNode, node.name);
-            case 267 /* ExportAssignment */:
+            case 269 /* ExportAssignment */:
                 return visitNodes(cbNode, cbNodes, node.decorators) ||
                     visitNodes(cbNode, cbNodes, node.modifiers) ||
                     visitNode(cbNode, node.expression);
-            case 219 /* TemplateExpression */:
+            case 221 /* TemplateExpression */:
                 return visitNode(cbNode, node.head) || visitNodes(cbNode, cbNodes, node.templateSpans);
-            case 229 /* TemplateSpan */:
+            case 231 /* TemplateSpan */:
                 return visitNode(cbNode, node.expression) || visitNode(cbNode, node.literal);
-            case 194 /* TemplateLiteralType */:
+            case 196 /* TemplateLiteralType */:
                 return visitNode(cbNode, node.head) || visitNodes(cbNode, cbNodes, node.templateSpans);
-            case 195 /* TemplateLiteralTypeSpan */:
+            case 197 /* TemplateLiteralTypeSpan */:
                 return visitNode(cbNode, node.type) || visitNode(cbNode, node.literal);
-            case 159 /* ComputedPropertyName */:
+            case 160 /* ComputedPropertyName */:
                 return visitNode(cbNode, node.expression);
-            case 287 /* HeritageClause */:
+            case 289 /* HeritageClause */:
                 return visitNodes(cbNode, cbNodes, node.types);
-            case 224 /* ExpressionWithTypeArguments */:
+            case 226 /* ExpressionWithTypeArguments */:
                 return visitNode(cbNode, node.expression) ||
                     visitNodes(cbNode, cbNodes, node.typeArguments);
-            case 273 /* ExternalModuleReference */:
+            case 275 /* ExternalModuleReference */:
                 return visitNode(cbNode, node.expression);
-            case 272 /* MissingDeclaration */:
+            case 274 /* MissingDeclaration */:
                 return visitNodes(cbNode, cbNodes, node.decorators);
-            case 341 /* CommaListExpression */:
+            case 346 /* CommaListExpression */:
                 return visitNodes(cbNode, cbNodes, node.elements);
-            case 274 /* JsxElement */:
+            case 276 /* JsxElement */:
                 return visitNode(cbNode, node.openingElement) ||
                     visitNodes(cbNode, cbNodes, node.children) ||
                     visitNode(cbNode, node.closingElement);
-            case 278 /* JsxFragment */:
+            case 280 /* JsxFragment */:
                 return visitNode(cbNode, node.openingFragment) ||
                     visitNodes(cbNode, cbNodes, node.children) ||
                     visitNode(cbNode, node.closingFragment);
-            case 275 /* JsxSelfClosingElement */:
-            case 276 /* JsxOpeningElement */:
+            case 277 /* JsxSelfClosingElement */:
+            case 278 /* JsxOpeningElement */:
                 return visitNode(cbNode, node.tagName) ||
                     visitNodes(cbNode, cbNodes, node.typeArguments) ||
                     visitNode(cbNode, node.attributes);
-            case 282 /* JsxAttributes */:
+            case 284 /* JsxAttributes */:
                 return visitNodes(cbNode, cbNodes, node.properties);
-            case 281 /* JsxAttribute */:
+            case 283 /* JsxAttribute */:
                 return visitNode(cbNode, node.name) ||
                     visitNode(cbNode, node.initializer);
-            case 283 /* JsxSpreadAttribute */:
+            case 285 /* JsxSpreadAttribute */:
                 return visitNode(cbNode, node.expression);
-            case 284 /* JsxExpression */:
+            case 286 /* JsxExpression */:
                 return visitNode(cbNode, node.dotDotDotToken) ||
                     visitNode(cbNode, node.expression);
-            case 277 /* JsxClosingElement */:
+            case 279 /* JsxClosingElement */:
                 return visitNode(cbNode, node.tagName);
-            case 181 /* OptionalType */:
-            case 182 /* RestType */:
-            case 302 /* JSDocTypeExpression */:
-            case 307 /* JSDocNonNullableType */:
-            case 306 /* JSDocNullableType */:
-            case 308 /* JSDocOptionalType */:
-            case 310 /* JSDocVariadicType */:
+            case 183 /* OptionalType */:
+            case 184 /* RestType */:
+            case 304 /* JSDocTypeExpression */:
+            case 310 /* JSDocNonNullableType */:
+            case 309 /* JSDocNullableType */:
+            case 311 /* JSDocOptionalType */:
+            case 313 /* JSDocVariadicType */:
                 return visitNode(cbNode, node.type);
-            case 309 /* JSDocFunctionType */:
+            case 312 /* JSDocFunctionType */:
                 return visitNodes(cbNode, cbNodes, node.parameters) ||
                     visitNode(cbNode, node.type);
-            case 312 /* JSDocComment */:
+            case 315 /* JSDocComment */:
                 return (typeof node.comment === "string" ? undefined : visitNodes(cbNode, cbNodes, node.comment))
                     || visitNodes(cbNode, cbNodes, node.tags);
-            case 336 /* JSDocSeeTag */:
+            case 341 /* JSDocSeeTag */:
                 return visitNode(cbNode, node.tagName) ||
                     visitNode(cbNode, node.name) ||
                     (typeof node.comment === "string" ? undefined : visitNodes(cbNode, cbNodes, node.comment));
-            case 303 /* JSDocNameReference */:
+            case 305 /* JSDocNameReference */:
                 return visitNode(cbNode, node.name);
-            case 330 /* JSDocParameterTag */:
-            case 337 /* JSDocPropertyTag */:
+            case 306 /* JSDocMemberName */:
+                return visitNode(cbNode, node.left) ||
+                    visitNode(cbNode, node.right);
+            case 335 /* JSDocParameterTag */:
+            case 342 /* JSDocPropertyTag */:
                 return visitNode(cbNode, node.tagName) ||
                     (node.isNameFirst
                         ? visitNode(cbNode, node.name) ||
@@ -29257,62 +29933,64 @@
                         : visitNode(cbNode, node.typeExpression) ||
                             visitNode(cbNode, node.name) ||
                             (typeof node.comment === "string" ? undefined : visitNodes(cbNode, cbNodes, node.comment)));
-            case 320 /* JSDocAuthorTag */:
+            case 325 /* JSDocAuthorTag */:
                 return visitNode(cbNode, node.tagName) ||
                     (typeof node.comment === "string" ? undefined : visitNodes(cbNode, cbNodes, node.comment));
-            case 319 /* JSDocImplementsTag */:
+            case 324 /* JSDocImplementsTag */:
                 return visitNode(cbNode, node.tagName) ||
                     visitNode(cbNode, node.class) ||
                     (typeof node.comment === "string" ? undefined : visitNodes(cbNode, cbNodes, node.comment));
-            case 318 /* JSDocAugmentsTag */:
+            case 323 /* JSDocAugmentsTag */:
                 return visitNode(cbNode, node.tagName) ||
                     visitNode(cbNode, node.class) ||
                     (typeof node.comment === "string" ? undefined : visitNodes(cbNode, cbNodes, node.comment));
-            case 334 /* JSDocTemplateTag */:
+            case 339 /* JSDocTemplateTag */:
                 return visitNode(cbNode, node.tagName) ||
                     visitNode(cbNode, node.constraint) ||
                     visitNodes(cbNode, cbNodes, node.typeParameters) ||
                     (typeof node.comment === "string" ? undefined : visitNodes(cbNode, cbNodes, node.comment));
-            case 335 /* JSDocTypedefTag */:
+            case 340 /* JSDocTypedefTag */:
                 return visitNode(cbNode, node.tagName) ||
                     (node.typeExpression &&
-                        node.typeExpression.kind === 302 /* JSDocTypeExpression */
+                        node.typeExpression.kind === 304 /* JSDocTypeExpression */
                         ? visitNode(cbNode, node.typeExpression) ||
                             visitNode(cbNode, node.fullName) ||
                             (typeof node.comment === "string" ? undefined : visitNodes(cbNode, cbNodes, node.comment))
                         : visitNode(cbNode, node.fullName) ||
-                            visitNode(cbNode, node.typeExpression)) ||
-                    (typeof node.comment === "string" ? undefined : visitNodes(cbNode, cbNodes, node.comment));
-            case 328 /* JSDocCallbackTag */:
+                            visitNode(cbNode, node.typeExpression) ||
+                            (typeof node.comment === "string" ? undefined : visitNodes(cbNode, cbNodes, node.comment)));
+            case 333 /* JSDocCallbackTag */:
                 return visitNode(cbNode, node.tagName) ||
                     visitNode(cbNode, node.fullName) ||
                     visitNode(cbNode, node.typeExpression) ||
                     (typeof node.comment === "string" ? undefined : visitNodes(cbNode, cbNodes, node.comment));
-            case 331 /* JSDocReturnTag */:
-            case 333 /* JSDocTypeTag */:
-            case 332 /* JSDocThisTag */:
-            case 329 /* JSDocEnumTag */:
+            case 336 /* JSDocReturnTag */:
+            case 338 /* JSDocTypeTag */:
+            case 337 /* JSDocThisTag */:
+            case 334 /* JSDocEnumTag */:
                 return visitNode(cbNode, node.tagName) ||
                     visitNode(cbNode, node.typeExpression) ||
                     (typeof node.comment === "string" ? undefined : visitNodes(cbNode, cbNodes, node.comment));
-            case 315 /* JSDocSignature */:
+            case 318 /* JSDocSignature */:
                 return ts.forEach(node.typeParameters, cbNode) ||
                     ts.forEach(node.parameters, cbNode) ||
                     visitNode(cbNode, node.type);
-            case 316 /* JSDocLink */:
+            case 319 /* JSDocLink */:
+            case 320 /* JSDocLinkCode */:
+            case 321 /* JSDocLinkPlain */:
                 return visitNode(cbNode, node.name);
-            case 314 /* JSDocTypeLiteral */:
+            case 317 /* JSDocTypeLiteral */:
                 return ts.forEach(node.jsDocPropertyTags, cbNode);
-            case 317 /* JSDocTag */:
-            case 322 /* JSDocClassTag */:
-            case 323 /* JSDocPublicTag */:
-            case 324 /* JSDocPrivateTag */:
-            case 325 /* JSDocProtectedTag */:
-            case 326 /* JSDocReadonlyTag */:
-            case 321 /* JSDocDeprecatedTag */:
+            case 322 /* JSDocTag */:
+            case 327 /* JSDocClassTag */:
+            case 328 /* JSDocPublicTag */:
+            case 329 /* JSDocPrivateTag */:
+            case 330 /* JSDocProtectedTag */:
+            case 331 /* JSDocReadonlyTag */:
+            case 326 /* JSDocDeprecatedTag */:
                 return visitNode(cbNode, node.tagName)
                     || (typeof node.comment === "string" ? undefined : visitNodes(cbNode, cbNodes, node.comment));
-            case 340 /* PartiallyEmittedExpression */:
+            case 345 /* PartiallyEmittedExpression */:
                 return visitNode(cbNode, node.expression);
         }
     }
@@ -29361,7 +30039,7 @@
                         continue;
                     return res;
                 }
-                if (current.kind >= 158 /* FirstNode */) {
+                if (current.kind >= 159 /* FirstNode */) {
                     // add children in reverse order to the queue, so popping gives the first child
                     for (var _i = 0, _a = gatherPossibleChildren(current); _i < _a.length; _i++) {
                         var child = _a[_i];
@@ -29632,9 +30310,9 @@
                         case 22 /* OpenBracketToken */:
                             expression_1 = parseArrayLiteralExpression();
                             break;
-                        case 109 /* TrueKeyword */:
-                        case 94 /* FalseKeyword */:
-                        case 103 /* NullKeyword */:
+                        case 110 /* TrueKeyword */:
+                        case 95 /* FalseKeyword */:
+                        case 104 /* NullKeyword */:
                             expression_1 = parseTokenNode();
                             break;
                         case 40 /* MinusToken */:
@@ -30086,6 +30764,9 @@
         function reScanLessThanToken() {
             return currentToken = scanner.reScanLessThanToken();
         }
+        function reScanHashToken() {
+            return currentToken = scanner.reScanHashToken();
+        }
         function scanJsxIdentifier() {
             return currentToken = scanner.scanJsxIdentifier();
         }
@@ -30140,27 +30821,28 @@
             return speculationHelper(callback, 0 /* TryParse */);
         }
         function isBindingIdentifier() {
-            if (token() === 78 /* Identifier */) {
+            if (token() === 79 /* Identifier */) {
                 return true;
             }
-            return token() > 115 /* LastReservedWord */;
+            // `let await`/`let yield` in [Yield] or [Await] are allowed here and disallowed in the binder.
+            return token() > 116 /* LastReservedWord */;
         }
         // Ignore strict mode flag because we will report an error in type checker instead.
         function isIdentifier() {
-            if (token() === 78 /* Identifier */) {
+            if (token() === 79 /* Identifier */) {
                 return true;
             }
             // If we have a 'yield' keyword, and we're in the [yield] context, then 'yield' is
             // considered a keyword and is not an identifier.
-            if (token() === 124 /* YieldKeyword */ && inYieldContext()) {
+            if (token() === 125 /* YieldKeyword */ && inYieldContext()) {
                 return false;
             }
             // If we have a 'await' keyword, and we're in the [Await] context, then 'await' is
             // considered a keyword and is not an identifier.
-            if (token() === 130 /* AwaitKeyword */ && inAwaitContext()) {
+            if (token() === 131 /* AwaitKeyword */ && inAwaitContext()) {
                 return false;
             }
-            return token() > 115 /* LastReservedWord */;
+            return token() > 116 /* LastReservedWord */;
         }
         function parseExpected(kind, diagnosticMessage, shouldAdvance) {
             if (shouldAdvance === void 0) { shouldAdvance = true; }
@@ -30179,6 +30861,128 @@
             }
             return false;
         }
+        var viableKeywordSuggestions = Object.keys(ts.textToKeywordObj).filter(function (keyword) { return keyword.length > 2; });
+        /**
+         * Provides a better error message than the generic "';' expected" if possible for
+         * known common variants of a missing semicolon, such as from a mispelled names.
+         *
+         * @param node Node preceding the expected semicolon location.
+         */
+        function parseErrorForMissingSemicolonAfter(node) {
+            var _a;
+            // Tagged template literals are sometimes used in places where only simple strings are allowed, i.e.:
+            //   module `M1` {
+            //   ^^^^^^^^^^^ This block is parsed as a template literal like module`M1`.
+            if (ts.isTaggedTemplateExpression(node)) {
+                parseErrorAt(ts.skipTrivia(sourceText, node.template.pos), node.template.end, ts.Diagnostics.Module_declaration_names_may_only_use_or_quoted_strings);
+                return;
+            }
+            // Otherwise, if this isn't a well-known keyword-like identifier, give the generic fallback message.
+            var expressionText = ts.isIdentifier(node) ? ts.idText(node) : undefined;
+            if (!expressionText || !ts.isIdentifierText(expressionText, languageVersion)) {
+                parseErrorAtCurrentToken(ts.Diagnostics._0_expected, ts.tokenToString(26 /* SemicolonToken */));
+                return;
+            }
+            var pos = ts.skipTrivia(sourceText, node.pos);
+            // Some known keywords are likely signs of syntax being used improperly.
+            switch (expressionText) {
+                case "const":
+                case "let":
+                case "var":
+                    parseErrorAt(pos, node.end, ts.Diagnostics.Variable_declaration_not_allowed_at_this_location);
+                    return;
+                case "declare":
+                    // If a declared node failed to parse, it would have emitted a diagnostic already.
+                    return;
+                case "interface":
+                    parseErrorForInvalidName(ts.Diagnostics.Interface_name_cannot_be_0, ts.Diagnostics.Interface_must_be_given_a_name, 18 /* OpenBraceToken */);
+                    return;
+                case "is":
+                    parseErrorAt(pos, scanner.getTextPos(), ts.Diagnostics.A_type_predicate_is_only_allowed_in_return_type_position_for_functions_and_methods);
+                    return;
+                case "module":
+                case "namespace":
+                    parseErrorForInvalidName(ts.Diagnostics.Namespace_name_cannot_be_0, ts.Diagnostics.Namespace_must_be_given_a_name, 18 /* OpenBraceToken */);
+                    return;
+                case "type":
+                    parseErrorForInvalidName(ts.Diagnostics.Type_alias_name_cannot_be_0, ts.Diagnostics.Type_alias_must_be_given_a_name, 63 /* EqualsToken */);
+                    return;
+            }
+            // The user alternatively might have misspelled or forgotten to add a space after a common keyword.
+            var suggestion = (_a = ts.getSpellingSuggestion(expressionText, viableKeywordSuggestions, function (n) { return n; })) !== null && _a !== void 0 ? _a : getSpaceSuggestion(expressionText);
+            if (suggestion) {
+                parseErrorAt(pos, node.end, ts.Diagnostics.Unknown_keyword_or_identifier_Did_you_mean_0, suggestion);
+                return;
+            }
+            // Unknown tokens are handled with their own errors in the scanner
+            if (token() === 0 /* Unknown */) {
+                return;
+            }
+            // Otherwise, we know this some kind of unknown word, not just a missing expected semicolon.
+            parseErrorAt(pos, node.end, ts.Diagnostics.Unexpected_keyword_or_identifier);
+        }
+        /**
+         * Reports a diagnostic error for the current token being an invalid name.
+         *
+         * @param blankDiagnostic Diagnostic to report for the case of the name being blank (matched tokenIfBlankName).
+         * @param nameDiagnostic Diagnostic to report for all other cases.
+         * @param tokenIfBlankName Current token if the name was invalid for being blank (not provided / skipped).
+         */
+        function parseErrorForInvalidName(nameDiagnostic, blankDiagnostic, tokenIfBlankName) {
+            if (token() === tokenIfBlankName) {
+                parseErrorAtCurrentToken(blankDiagnostic);
+            }
+            else {
+                parseErrorAtCurrentToken(nameDiagnostic, ts.tokenToString(token()));
+            }
+        }
+        function getSpaceSuggestion(expressionText) {
+            for (var _i = 0, viableKeywordSuggestions_1 = viableKeywordSuggestions; _i < viableKeywordSuggestions_1.length; _i++) {
+                var keyword = viableKeywordSuggestions_1[_i];
+                if (expressionText.length > keyword.length + 2 && ts.startsWith(expressionText, keyword)) {
+                    return keyword + " " + expressionText.slice(keyword.length);
+                }
+            }
+            return undefined;
+        }
+        function parseSemicolonAfterPropertyName(name, type, initializer) {
+            if (token() === 59 /* AtToken */ && !scanner.hasPrecedingLineBreak()) {
+                parseErrorAtCurrentToken(ts.Diagnostics.Decorators_must_precede_the_name_and_all_keywords_of_property_declarations);
+                return;
+            }
+            if (token() === 20 /* OpenParenToken */) {
+                parseErrorAtCurrentToken(ts.Diagnostics.Cannot_start_a_function_call_in_a_type_annotation);
+                nextToken();
+                return;
+            }
+            if (type && !canParseSemicolon()) {
+                if (initializer) {
+                    parseErrorAtCurrentToken(ts.Diagnostics._0_expected, ts.tokenToString(26 /* SemicolonToken */));
+                }
+                else {
+                    parseErrorAtCurrentToken(ts.Diagnostics.Expected_for_property_initializer);
+                }
+                return;
+            }
+            if (tryParseSemicolon()) {
+                return;
+            }
+            // If an initializer was parsed but there is still an error in finding the next semicolon,
+            // we generally know there was an error already reported in the initializer...
+            //   class Example { a = new Map([), ) }
+            //                                ~
+            if (initializer) {
+                // ...unless we've found the start of a block after a property declaration, in which
+                // case we can know that regardless of the initializer we should complain on the block.
+                //   class Example { a = 0 {} }
+                //                         ~
+                if (token() === 18 /* OpenBraceToken */) {
+                    parseErrorAtCurrentToken(ts.Diagnostics._0_expected, ts.tokenToString(26 /* SemicolonToken */));
+                }
+                return;
+            }
+            parseErrorForMissingSemicolonAfter(name);
+        }
         function parseExpectedJSDoc(kind) {
             if (token() === kind) {
                 nextTokenJSDoc();
@@ -30234,17 +31038,18 @@
             // We can parse out an optional semicolon in ASI cases in the following cases.
             return token() === 19 /* CloseBraceToken */ || token() === 1 /* EndOfFileToken */ || scanner.hasPrecedingLineBreak();
         }
+        function tryParseSemicolon() {
+            if (!canParseSemicolon()) {
+                return false;
+            }
+            if (token() === 26 /* SemicolonToken */) {
+                // consume the semicolon if it was explicitly provided.
+                nextToken();
+            }
+            return true;
+        }
         function parseSemicolon() {
-            if (canParseSemicolon()) {
-                if (token() === 26 /* SemicolonToken */) {
-                    // consume the semicolon if it was explicitly provided.
-                    nextToken();
-                }
-                return true;
-            }
-            else {
-                return parseExpected(26 /* SemicolonToken */);
-            }
+            return tryParseSemicolon() || parseExpected(26 /* SemicolonToken */);
         }
         function createNodeArray(elements, pos, end, hasTrailingComma) {
             var array = factory.createNodeArray(elements, hasTrailingComma);
@@ -30273,11 +31078,11 @@
                 parseErrorAtCurrentToken(diagnosticMessage, arg0);
             }
             var pos = getNodePos();
-            var result = kind === 78 /* Identifier */ ? factory.createIdentifier("", /*typeArguments*/ undefined, /*originalKeywordKind*/ undefined) :
+            var result = kind === 79 /* Identifier */ ? factory.createIdentifier("", /*typeArguments*/ undefined, /*originalKeywordKind*/ undefined) :
                 ts.isTemplateLiteralKind(kind) ? factory.createTemplateLiteralLikeNode(kind, "", "", /*templateFlags*/ undefined) :
                     kind === 8 /* NumericLiteral */ ? factory.createNumericLiteral("", /*numericLiteralFlags*/ undefined) :
                         kind === 10 /* StringLiteral */ ? factory.createStringLiteral("", /*isSingleQuote*/ undefined) :
-                            kind === 272 /* MissingDeclaration */ ? factory.createMissingDeclaration() :
+                            kind === 274 /* MissingDeclaration */ ? factory.createMissingDeclaration() :
                                 factory.createToken(kind);
             return finishNode(result, pos);
         }
@@ -30301,11 +31106,11 @@
                 nextTokenWithoutCheck();
                 return finishNode(factory.createIdentifier(text, /*typeArguments*/ undefined, originalKeywordKind), pos);
             }
-            if (token() === 79 /* PrivateIdentifier */) {
+            if (token() === 80 /* PrivateIdentifier */) {
                 parseErrorAtCurrentToken(privateIdentifierDiagnosticMessage || ts.Diagnostics.Private_identifiers_are_not_allowed_outside_class_bodies);
                 return createIdentifier(/*isIdentifier*/ true);
             }
-            if (token() === 0 /* Unknown */ && scanner.tryScan(function () { return scanner.reScanInvalidIdentifier() === 78 /* Identifier */; })) {
+            if (token() === 0 /* Unknown */ && scanner.tryScan(function () { return scanner.reScanInvalidIdentifier() === 79 /* Identifier */; })) {
                 // Scanner has already recorded an 'Invalid character' error, so no need to add another from the parser.
                 return createIdentifier(/*isIdentifier*/ true);
             }
@@ -30317,7 +31122,7 @@
             var defaultMessage = isReservedWord ?
                 ts.Diagnostics.Identifier_expected_0_is_a_reserved_word_that_cannot_be_used_here :
                 ts.Diagnostics.Identifier_expected;
-            return createMissingNode(78 /* Identifier */, reportAtCurrentPosition, diagnosticMessage || defaultMessage, msgArg);
+            return createMissingNode(79 /* Identifier */, reportAtCurrentPosition, diagnosticMessage || defaultMessage, msgArg);
         }
         function parseBindingIdentifier(privateIdentifierDiagnosticMessage) {
             return createIdentifier(isBindingIdentifier(), /*diagnosticMessage*/ undefined, privateIdentifierDiagnosticMessage);
@@ -30342,7 +31147,7 @@
             if (allowComputedPropertyNames && token() === 22 /* OpenBracketToken */) {
                 return parseComputedPropertyName();
             }
-            if (token() === 79 /* PrivateIdentifier */) {
+            if (token() === 80 /* PrivateIdentifier */) {
                 return parsePrivateIdentifier();
             }
             return parseIdentifierName();
@@ -30388,24 +31193,24 @@
         }
         function nextTokenCanFollowModifier() {
             switch (token()) {
-                case 84 /* ConstKeyword */:
+                case 85 /* ConstKeyword */:
                     // 'const' is only a modifier if followed by 'enum'.
-                    return nextToken() === 91 /* EnumKeyword */;
-                case 92 /* ExportKeyword */:
+                    return nextToken() === 92 /* EnumKeyword */;
+                case 93 /* ExportKeyword */:
                     nextToken();
-                    if (token() === 87 /* DefaultKeyword */) {
+                    if (token() === 88 /* DefaultKeyword */) {
                         return lookAhead(nextTokenCanFollowDefaultKeyword);
                     }
-                    if (token() === 149 /* TypeKeyword */) {
+                    if (token() === 150 /* TypeKeyword */) {
                         return lookAhead(nextTokenCanFollowExportModifier);
                     }
                     return canFollowExportModifier();
-                case 87 /* DefaultKeyword */:
+                case 88 /* DefaultKeyword */:
                     return nextTokenCanFollowDefaultKeyword();
-                case 123 /* StaticKeyword */:
+                case 124 /* StaticKeyword */:
                     return nextTokenIsOnSameLineAndCanFollowModifier();
-                case 134 /* GetKeyword */:
-                case 146 /* SetKeyword */:
+                case 135 /* GetKeyword */:
+                case 147 /* SetKeyword */:
                     nextToken();
                     return canFollowModifier();
                 default:
@@ -30414,7 +31219,7 @@
         }
         function canFollowExportModifier() {
             return token() !== 41 /* AsteriskToken */
-                && token() !== 126 /* AsKeyword */
+                && token() !== 127 /* AsKeyword */
                 && token() !== 18 /* OpenBraceToken */
                 && canFollowModifier();
         }
@@ -30434,10 +31239,10 @@
         }
         function nextTokenCanFollowDefaultKeyword() {
             nextToken();
-            return token() === 83 /* ClassKeyword */ || token() === 97 /* FunctionKeyword */ ||
-                token() === 117 /* InterfaceKeyword */ ||
-                (token() === 125 /* AbstractKeyword */ && lookAhead(nextTokenIsClassKeywordOnSameLine)) ||
-                (token() === 129 /* AsyncKeyword */ && lookAhead(nextTokenIsFunctionKeywordOnSameLine));
+            return token() === 84 /* ClassKeyword */ || token() === 98 /* FunctionKeyword */ ||
+                token() === 118 /* InterfaceKeyword */ ||
+                (token() === 126 /* AbstractKeyword */ && lookAhead(nextTokenIsClassKeywordOnSameLine)) ||
+                (token() === 130 /* AsyncKeyword */ && lookAhead(nextTokenIsFunctionKeywordOnSameLine));
         }
         // True if positioned at the start of a list element
         function isListElement(parsingContext, inErrorRecovery) {
@@ -30457,7 +31262,7 @@
                     // outer module.  We just want to consume and move on.
                     return !(token() === 26 /* SemicolonToken */ && inErrorRecovery) && isStartOfStatement();
                 case 2 /* SwitchClauses */:
-                    return token() === 81 /* CaseKeyword */ || token() === 87 /* DefaultKeyword */;
+                    return token() === 82 /* CaseKeyword */ || token() === 88 /* DefaultKeyword */;
                 case 4 /* TypeMembers */:
                     return lookAhead(isTypeMemberStart);
                 case 5 /* ClassMembers */:
@@ -30543,7 +31348,7 @@
                 //      extends {} extends
                 //      extends {} implements
                 var next = nextToken();
-                return next === 27 /* CommaToken */ || next === 18 /* OpenBraceToken */ || next === 93 /* ExtendsKeyword */ || next === 116 /* ImplementsKeyword */;
+                return next === 27 /* CommaToken */ || next === 18 /* OpenBraceToken */ || next === 94 /* ExtendsKeyword */ || next === 117 /* ImplementsKeyword */;
             }
             return true;
         }
@@ -30560,8 +31365,8 @@
             return ts.tokenIsIdentifierOrKeywordOrGreaterThan(token());
         }
         function isHeritageClauseExtendsOrImplementsKeyword() {
-            if (token() === 116 /* ImplementsKeyword */ ||
-                token() === 93 /* ExtendsKeyword */) {
+            if (token() === 117 /* ImplementsKeyword */ ||
+                token() === 94 /* ExtendsKeyword */) {
                 return lookAhead(nextTokenIsStartOfExpression);
             }
             return false;
@@ -30591,14 +31396,14 @@
                 case 23 /* ImportOrExportSpecifiers */:
                     return token() === 19 /* CloseBraceToken */;
                 case 3 /* SwitchClauseStatements */:
-                    return token() === 19 /* CloseBraceToken */ || token() === 81 /* CaseKeyword */ || token() === 87 /* DefaultKeyword */;
+                    return token() === 19 /* CloseBraceToken */ || token() === 82 /* CaseKeyword */ || token() === 88 /* DefaultKeyword */;
                 case 7 /* HeritageClauseElement */:
-                    return token() === 18 /* OpenBraceToken */ || token() === 93 /* ExtendsKeyword */ || token() === 116 /* ImplementsKeyword */;
+                    return token() === 18 /* OpenBraceToken */ || token() === 94 /* ExtendsKeyword */ || token() === 117 /* ImplementsKeyword */;
                 case 8 /* VariableDeclarations */:
                     return isVariableDeclaratorListTerminator();
                 case 19 /* TypeParameters */:
                     // Tokens other than '>' are here for better error recovery
-                    return token() === 31 /* GreaterThanToken */ || token() === 20 /* OpenParenToken */ || token() === 18 /* OpenBraceToken */ || token() === 93 /* ExtendsKeyword */ || token() === 116 /* ImplementsKeyword */;
+                    return token() === 31 /* GreaterThanToken */ || token() === 20 /* OpenParenToken */ || token() === 18 /* OpenBraceToken */ || token() === 94 /* ExtendsKeyword */ || token() === 117 /* ImplementsKeyword */;
                 case 11 /* ArgumentExpressions */:
                     // Tokens other than ')' are here for better error recovery
                     return token() === 21 /* CloseParenToken */ || token() === 26 /* SemicolonToken */;
@@ -30814,20 +31619,20 @@
         function isReusableClassMember(node) {
             if (node) {
                 switch (node.kind) {
-                    case 167 /* Constructor */:
-                    case 172 /* IndexSignature */:
-                    case 168 /* GetAccessor */:
-                    case 169 /* SetAccessor */:
-                    case 164 /* PropertyDeclaration */:
-                    case 230 /* SemicolonClassElement */:
+                    case 169 /* Constructor */:
+                    case 174 /* IndexSignature */:
+                    case 170 /* GetAccessor */:
+                    case 171 /* SetAccessor */:
+                    case 165 /* PropertyDeclaration */:
+                    case 232 /* SemicolonClassElement */:
                         return true;
-                    case 166 /* MethodDeclaration */:
+                    case 167 /* MethodDeclaration */:
                         // Method declarations are not necessarily reusable.  An object-literal
                         // may have a method calls "constructor(...)" and we must reparse that
                         // into an actual .ConstructorDeclaration.
                         var methodDeclaration = node;
-                        var nameIsConstructor = methodDeclaration.name.kind === 78 /* Identifier */ &&
-                            methodDeclaration.name.originalKeywordKind === 132 /* ConstructorKeyword */;
+                        var nameIsConstructor = methodDeclaration.name.kind === 79 /* Identifier */ &&
+                            methodDeclaration.name.originalKeywordKind === 133 /* ConstructorKeyword */;
                         return !nameIsConstructor;
                 }
             }
@@ -30836,8 +31641,8 @@
         function isReusableSwitchClause(node) {
             if (node) {
                 switch (node.kind) {
-                    case 285 /* CaseClause */:
-                    case 286 /* DefaultClause */:
+                    case 287 /* CaseClause */:
+                    case 288 /* DefaultClause */:
                         return true;
                 }
             }
@@ -30846,58 +31651,58 @@
         function isReusableStatement(node) {
             if (node) {
                 switch (node.kind) {
-                    case 252 /* FunctionDeclaration */:
-                    case 233 /* VariableStatement */:
-                    case 231 /* Block */:
-                    case 235 /* IfStatement */:
-                    case 234 /* ExpressionStatement */:
-                    case 247 /* ThrowStatement */:
-                    case 243 /* ReturnStatement */:
-                    case 245 /* SwitchStatement */:
-                    case 242 /* BreakStatement */:
-                    case 241 /* ContinueStatement */:
-                    case 239 /* ForInStatement */:
-                    case 240 /* ForOfStatement */:
-                    case 238 /* ForStatement */:
-                    case 237 /* WhileStatement */:
-                    case 244 /* WithStatement */:
-                    case 232 /* EmptyStatement */:
-                    case 248 /* TryStatement */:
-                    case 246 /* LabeledStatement */:
-                    case 236 /* DoStatement */:
-                    case 249 /* DebuggerStatement */:
-                    case 262 /* ImportDeclaration */:
-                    case 261 /* ImportEqualsDeclaration */:
-                    case 268 /* ExportDeclaration */:
-                    case 267 /* ExportAssignment */:
-                    case 257 /* ModuleDeclaration */:
-                    case 253 /* ClassDeclaration */:
-                    case 254 /* InterfaceDeclaration */:
-                    case 256 /* EnumDeclaration */:
-                    case 255 /* TypeAliasDeclaration */:
+                    case 254 /* FunctionDeclaration */:
+                    case 235 /* VariableStatement */:
+                    case 233 /* Block */:
+                    case 237 /* IfStatement */:
+                    case 236 /* ExpressionStatement */:
+                    case 249 /* ThrowStatement */:
+                    case 245 /* ReturnStatement */:
+                    case 247 /* SwitchStatement */:
+                    case 244 /* BreakStatement */:
+                    case 243 /* ContinueStatement */:
+                    case 241 /* ForInStatement */:
+                    case 242 /* ForOfStatement */:
+                    case 240 /* ForStatement */:
+                    case 239 /* WhileStatement */:
+                    case 246 /* WithStatement */:
+                    case 234 /* EmptyStatement */:
+                    case 250 /* TryStatement */:
+                    case 248 /* LabeledStatement */:
+                    case 238 /* DoStatement */:
+                    case 251 /* DebuggerStatement */:
+                    case 264 /* ImportDeclaration */:
+                    case 263 /* ImportEqualsDeclaration */:
+                    case 270 /* ExportDeclaration */:
+                    case 269 /* ExportAssignment */:
+                    case 259 /* ModuleDeclaration */:
+                    case 255 /* ClassDeclaration */:
+                    case 256 /* InterfaceDeclaration */:
+                    case 258 /* EnumDeclaration */:
+                    case 257 /* TypeAliasDeclaration */:
                         return true;
                 }
             }
             return false;
         }
         function isReusableEnumMember(node) {
-            return node.kind === 292 /* EnumMember */;
+            return node.kind === 294 /* EnumMember */;
         }
         function isReusableTypeMember(node) {
             if (node) {
                 switch (node.kind) {
-                    case 171 /* ConstructSignature */:
-                    case 165 /* MethodSignature */:
-                    case 172 /* IndexSignature */:
-                    case 163 /* PropertySignature */:
-                    case 170 /* CallSignature */:
+                    case 173 /* ConstructSignature */:
+                    case 166 /* MethodSignature */:
+                    case 174 /* IndexSignature */:
+                    case 164 /* PropertySignature */:
+                    case 172 /* CallSignature */:
                         return true;
                 }
             }
             return false;
         }
         function isReusableVariableDeclaration(node) {
-            if (node.kind !== 250 /* VariableDeclaration */) {
+            if (node.kind !== 252 /* VariableDeclaration */) {
                 return false;
             }
             // Very subtle incremental parsing bug.  Consider the following code:
@@ -30918,7 +31723,7 @@
             return variableDeclarator.initializer === undefined;
         }
         function isReusableParameter(node) {
-            if (node.kind !== 161 /* Parameter */) {
+            if (node.kind !== 162 /* Parameter */) {
                 return false;
             }
             // See the comment in isReusableVariableDeclaration for why we do this.
@@ -30936,7 +31741,10 @@
         }
         function parsingContextErrors(context) {
             switch (context) {
-                case 0 /* SourceElements */: return parseErrorAtCurrentToken(ts.Diagnostics.Declaration_or_statement_expected);
+                case 0 /* SourceElements */:
+                    return token() === 88 /* DefaultKeyword */
+                        ? parseErrorAtCurrentToken(ts.Diagnostics._0_expected, ts.tokenToString(93 /* ExportKeyword */))
+                        : parseErrorAtCurrentToken(ts.Diagnostics.Declaration_or_statement_expected);
                 case 1 /* BlockStatements */: return parseErrorAtCurrentToken(ts.Diagnostics.Declaration_or_statement_expected);
                 case 2 /* SwitchClauses */: return parseErrorAtCurrentToken(ts.Diagnostics.case_or_default_expected);
                 case 3 /* SwitchClauseStatements */: return parseErrorAtCurrentToken(ts.Diagnostics.Statement_expected);
@@ -31085,12 +31893,12 @@
                     // Report that we need an identifier.  However, report it right after the dot,
                     // and not on the next token.  This is because the next token might actually
                     // be an identifier and the error would be quite confusing.
-                    return createMissingNode(78 /* Identifier */, /*reportAtCurrentPosition*/ true, ts.Diagnostics.Identifier_expected);
+                    return createMissingNode(79 /* Identifier */, /*reportAtCurrentPosition*/ true, ts.Diagnostics.Identifier_expected);
                 }
             }
-            if (token() === 79 /* PrivateIdentifier */) {
+            if (token() === 80 /* PrivateIdentifier */) {
                 var node = parsePrivateIdentifier();
-                return allowPrivateIdentifiers ? node : createMissingNode(78 /* Identifier */, /*reportAtCurrentPosition*/ true, ts.Diagnostics.Identifier_expected);
+                return allowPrivateIdentifiers ? node : createMissingNode(79 /* Identifier */, /*reportAtCurrentPosition*/ true, ts.Diagnostics.Identifier_expected);
             }
             return allowIdentifierNames ? parseIdentifierName() : parseIdentifier();
         }
@@ -31199,14 +32007,14 @@
         // If true, we should abort parsing an error function.
         function typeHasArrowFunctionBlockingParseError(node) {
             switch (node.kind) {
-                case 174 /* TypeReference */:
+                case 176 /* TypeReference */:
                     return ts.nodeIsMissing(node.typeName);
-                case 175 /* FunctionType */:
-                case 176 /* ConstructorType */: {
+                case 177 /* FunctionType */:
+                case 178 /* ConstructorType */: {
                     var _a = node, parameters = _a.parameters, type = _a.type;
                     return isMissingList(parameters) || typeHasArrowFunctionBlockingParseError(type);
                 }
-                case 187 /* ParenthesizedType */:
+                case 189 /* ParenthesizedType */:
                     return typeHasArrowFunctionBlockingParseError(node.type);
                 default:
                     return false;
@@ -31248,7 +32056,7 @@
                 token() === 19 /* CloseBraceToken */ ||
                 token() === 21 /* CloseParenToken */ ||
                 token() === 31 /* GreaterThanToken */ ||
-                token() === 62 /* EqualsToken */ ||
+                token() === 63 /* EqualsToken */ ||
                 token() === 51 /* BarToken */) {
                 return finishNode(factory.createJSDocUnknownType(), pos);
             }
@@ -31270,7 +32078,7 @@
         function parseJSDocParameter() {
             var pos = getNodePos();
             var name;
-            if (token() === 107 /* ThisKeyword */ || token() === 102 /* NewKeyword */) {
+            if (token() === 108 /* ThisKeyword */ || token() === 103 /* NewKeyword */) {
                 name = parseIdentifierName();
                 parseExpected(58 /* ColonToken */);
             }
@@ -31286,7 +32094,7 @@
         function parseJSDocType() {
             scanner.setInJSDocType(true);
             var pos = getNodePos();
-            if (parseOptional(139 /* ModuleKeyword */)) {
+            if (parseOptional(140 /* ModuleKeyword */)) {
                 // TODO(rbuckton): We never set the type for a JSDocNamepathType. What should we put here?
                 var moduleTag = factory.createJSDocNamepathType(/*type*/ undefined);
                 terminate: while (true) {
@@ -31309,7 +32117,7 @@
             if (hasDotDotDot) {
                 type = finishNode(factory.createJSDocVariadicType(type), pos);
             }
-            if (token() === 62 /* EqualsToken */) {
+            if (token() === 63 /* EqualsToken */) {
                 nextToken();
                 return finishNode(factory.createJSDocOptionalType(type), pos);
             }
@@ -31317,7 +32125,7 @@
         }
         function parseTypeQuery() {
             var pos = getNodePos();
-            parseExpected(111 /* TypeOfKeyword */);
+            parseExpected(112 /* TypeOfKeyword */);
             return finishNode(factory.createTypeQueryNode(parseEntityName(/*allowReservedWords*/ true)), pos);
         }
         function parseTypeParameter() {
@@ -31325,7 +32133,7 @@
             var name = parseIdentifier();
             var constraint;
             var expression;
-            if (parseOptional(93 /* ExtendsKeyword */)) {
+            if (parseOptional(94 /* ExtendsKeyword */)) {
                 // It's not uncommon for people to write improper constraints to a generic.  If the
                 // user writes a constraint that is an expression and not an actual type, then parse
                 // it out as an expression (so we can recover well), but report that a type is needed
@@ -31344,7 +32152,7 @@
                     expression = parseUnaryExpressionOrHigher();
                 }
             }
-            var defaultType = parseOptional(62 /* EqualsToken */) ? parseType() : undefined;
+            var defaultType = parseOptional(63 /* EqualsToken */) ? parseType() : undefined;
             var node = factory.createTypeParameterDeclaration(name, constraint, defaultType);
             node.expression = expression;
             return finishNode(node, pos);
@@ -31391,7 +32199,7 @@
             //      BindingElement[?Yield,?Await]
             // Decorators are parsed in the outer [Await] context, the rest of the parameter is parsed in the function's [Await] context.
             var decorators = inOuterAwaitContext ? doInAwaitContext(parseDecorators) : parseDecorators();
-            if (token() === 107 /* ThisKeyword */) {
+            if (token() === 108 /* ThisKeyword */) {
                 var node_1 = factory.createParameterDeclaration(decorators, 
                 /*modifiers*/ undefined, 
                 /*dotDotDotToken*/ undefined, createIdentifier(/*isIdentifier*/ true), 
@@ -31488,14 +32296,14 @@
         function parseSignatureMember(kind) {
             var pos = getNodePos();
             var hasJSDoc = hasPrecedingJSDocComment();
-            if (kind === 171 /* ConstructSignature */) {
-                parseExpected(102 /* NewKeyword */);
+            if (kind === 173 /* ConstructSignature */) {
+                parseExpected(103 /* NewKeyword */);
             }
             var typeParameters = parseTypeParameters();
             var parameters = parseParameters(4 /* Type */);
             var type = parseReturnType(58 /* ColonToken */, /*isType*/ true);
             parseTypeMemberSemicolon();
-            var node = kind === 170 /* CallSignature */
+            var node = kind === 172 /* CallSignature */
                 ? factory.createCallSignature(typeParameters, parameters, type)
                 : factory.createConstructSignature(typeParameters, parameters, type);
             return withJSDoc(finishNode(node, pos), hasJSDoc);
@@ -31578,7 +32386,7 @@
                 // Although type literal properties cannot not have initializers, we attempt
                 // to parse an initializer so we can report in the checker that an interface
                 // property or type literal property cannot have an initializer.
-                if (token() === 62 /* EqualsToken */)
+                if (token() === 63 /* EqualsToken */)
                     node.initializer = parseInitializer();
             }
             parseTypeMemberSemicolon();
@@ -31588,8 +32396,8 @@
             // Return true if we have the start of a signature member
             if (token() === 20 /* OpenParenToken */ ||
                 token() === 29 /* LessThanToken */ ||
-                token() === 134 /* GetKeyword */ ||
-                token() === 146 /* SetKeyword */) {
+                token() === 135 /* GetKeyword */ ||
+                token() === 147 /* SetKeyword */) {
                 return true;
             }
             var idToken = false;
@@ -31621,19 +32429,19 @@
         }
         function parseTypeMember() {
             if (token() === 20 /* OpenParenToken */ || token() === 29 /* LessThanToken */) {
-                return parseSignatureMember(170 /* CallSignature */);
+                return parseSignatureMember(172 /* CallSignature */);
             }
-            if (token() === 102 /* NewKeyword */ && lookAhead(nextTokenIsOpenParenOrLessThan)) {
-                return parseSignatureMember(171 /* ConstructSignature */);
+            if (token() === 103 /* NewKeyword */ && lookAhead(nextTokenIsOpenParenOrLessThan)) {
+                return parseSignatureMember(173 /* ConstructSignature */);
             }
             var pos = getNodePos();
             var hasJSDoc = hasPrecedingJSDocComment();
             var modifiers = parseModifiers();
-            if (parseContextualModifier(134 /* GetKeyword */)) {
-                return parseAccessorDeclaration(pos, hasJSDoc, /*decorators*/ undefined, modifiers, 168 /* GetAccessor */);
+            if (parseContextualModifier(135 /* GetKeyword */)) {
+                return parseAccessorDeclaration(pos, hasJSDoc, /*decorators*/ undefined, modifiers, 170 /* GetAccessor */);
             }
-            if (parseContextualModifier(146 /* SetKeyword */)) {
-                return parseAccessorDeclaration(pos, hasJSDoc, /*decorators*/ undefined, modifiers, 169 /* SetAccessor */);
+            if (parseContextualModifier(147 /* SetKeyword */)) {
+                return parseAccessorDeclaration(pos, hasJSDoc, /*decorators*/ undefined, modifiers, 171 /* SetAccessor */);
             }
             if (isIndexSignature()) {
                 return parseIndexSignatureDeclaration(pos, hasJSDoc, /*decorators*/ undefined, modifiers);
@@ -31674,17 +32482,17 @@
         function isStartOfMappedType() {
             nextToken();
             if (token() === 39 /* PlusToken */ || token() === 40 /* MinusToken */) {
-                return nextToken() === 142 /* ReadonlyKeyword */;
+                return nextToken() === 143 /* ReadonlyKeyword */;
             }
-            if (token() === 142 /* ReadonlyKeyword */) {
+            if (token() === 143 /* ReadonlyKeyword */) {
                 nextToken();
             }
-            return token() === 22 /* OpenBracketToken */ && nextTokenIsIdentifier() && nextToken() === 100 /* InKeyword */;
+            return token() === 22 /* OpenBracketToken */ && nextTokenIsIdentifier() && nextToken() === 101 /* InKeyword */;
         }
         function parseMappedTypeParameter() {
             var pos = getNodePos();
             var name = parseIdentifierName();
-            parseExpected(100 /* InKeyword */);
+            parseExpected(101 /* InKeyword */);
             var type = parseType();
             return finishNode(factory.createTypeParameterDeclaration(name, type, /*defaultType*/ undefined), pos);
         }
@@ -31692,15 +32500,15 @@
             var pos = getNodePos();
             parseExpected(18 /* OpenBraceToken */);
             var readonlyToken;
-            if (token() === 142 /* ReadonlyKeyword */ || token() === 39 /* PlusToken */ || token() === 40 /* MinusToken */) {
+            if (token() === 143 /* ReadonlyKeyword */ || token() === 39 /* PlusToken */ || token() === 40 /* MinusToken */) {
                 readonlyToken = parseTokenNode();
-                if (readonlyToken.kind !== 142 /* ReadonlyKeyword */) {
-                    parseExpected(142 /* ReadonlyKeyword */);
+                if (readonlyToken.kind !== 143 /* ReadonlyKeyword */) {
+                    parseExpected(143 /* ReadonlyKeyword */);
                 }
             }
             parseExpected(22 /* OpenBracketToken */);
             var typeParameter = parseMappedTypeParameter();
-            var nameType = parseOptional(126 /* AsKeyword */) ? parseType() : undefined;
+            var nameType = parseOptional(127 /* AsKeyword */) ? parseType() : undefined;
             parseExpected(23 /* CloseBracketToken */);
             var questionToken;
             if (token() === 57 /* QuestionToken */ || token() === 39 /* PlusToken */ || token() === 40 /* MinusToken */) {
@@ -31764,10 +32572,10 @@
         }
         function parseModifiersForConstructorType() {
             var modifiers;
-            if (token() === 125 /* AbstractKeyword */) {
+            if (token() === 126 /* AbstractKeyword */) {
                 var pos = getNodePos();
                 nextToken();
-                var modifier = finishNode(factory.createToken(125 /* AbstractKeyword */), pos);
+                var modifier = finishNode(factory.createToken(126 /* AbstractKeyword */), pos);
                 modifiers = createNodeArray([modifier], pos);
             }
             return modifiers;
@@ -31776,7 +32584,7 @@
             var pos = getNodePos();
             var hasJSDoc = hasPrecedingJSDocComment();
             var modifiers = parseModifiersForConstructorType();
-            var isConstructorType = parseOptional(102 /* NewKeyword */);
+            var isConstructorType = parseOptional(103 /* NewKeyword */);
             var typeParameters = parseTypeParameters();
             var parameters = parseParameters(4 /* Type */);
             var type = parseReturnType(38 /* EqualsGreaterThanToken */, /*isType*/ false);
@@ -31796,7 +32604,7 @@
             if (negative) {
                 nextToken();
             }
-            var expression = token() === 109 /* TrueKeyword */ || token() === 94 /* FalseKeyword */ || token() === 103 /* NullKeyword */ ?
+            var expression = token() === 110 /* TrueKeyword */ || token() === 95 /* FalseKeyword */ || token() === 104 /* NullKeyword */ ?
                 parseTokenNode() :
                 parseLiteralLikeNode(token());
             if (negative) {
@@ -31806,13 +32614,13 @@
         }
         function isStartOfTypeOfImportType() {
             nextToken();
-            return token() === 99 /* ImportKeyword */;
+            return token() === 100 /* ImportKeyword */;
         }
         function parseImportType() {
             sourceFlags |= 1048576 /* PossiblyContainsDynamicImport */;
             var pos = getNodePos();
-            var isTypeOf = parseOptional(111 /* TypeOfKeyword */);
-            parseExpected(99 /* ImportKeyword */);
+            var isTypeOf = parseOptional(112 /* TypeOfKeyword */);
+            parseExpected(100 /* ImportKeyword */);
             parseExpected(20 /* OpenParenToken */);
             var type = parseType();
             parseExpected(21 /* CloseParenToken */);
@@ -31826,19 +32634,19 @@
         }
         function parseNonArrayType() {
             switch (token()) {
-                case 128 /* AnyKeyword */:
-                case 152 /* UnknownKeyword */:
-                case 147 /* StringKeyword */:
-                case 144 /* NumberKeyword */:
-                case 155 /* BigIntKeyword */:
-                case 148 /* SymbolKeyword */:
-                case 131 /* BooleanKeyword */:
-                case 150 /* UndefinedKeyword */:
-                case 141 /* NeverKeyword */:
-                case 145 /* ObjectKeyword */:
+                case 129 /* AnyKeyword */:
+                case 153 /* UnknownKeyword */:
+                case 148 /* StringKeyword */:
+                case 145 /* NumberKeyword */:
+                case 156 /* BigIntKeyword */:
+                case 149 /* SymbolKeyword */:
+                case 132 /* BooleanKeyword */:
+                case 151 /* UndefinedKeyword */:
+                case 142 /* NeverKeyword */:
+                case 146 /* ObjectKeyword */:
                     // If these are followed by a dot, then parse these out as a dotted type reference instead.
                     return tryParse(parseKeywordAndNoDot) || parseTypeReference();
-                case 65 /* AsteriskEqualsToken */:
+                case 66 /* AsteriskEqualsToken */:
                     // If there is '*=', treat it as * followed by postfix =
                     scanner.reScanAsteriskEqualsToken();
                 // falls through
@@ -31850,7 +32658,7 @@
                 // falls through
                 case 57 /* QuestionToken */:
                     return parseJSDocUnknownOrNullableType();
-                case 97 /* FunctionKeyword */:
+                case 98 /* FunctionKeyword */:
                     return parseJSDocFunctionType();
                 case 53 /* ExclamationToken */:
                     return parseJSDocNonNullableType();
@@ -31858,24 +32666,24 @@
                 case 10 /* StringLiteral */:
                 case 8 /* NumericLiteral */:
                 case 9 /* BigIntLiteral */:
-                case 109 /* TrueKeyword */:
-                case 94 /* FalseKeyword */:
-                case 103 /* NullKeyword */:
+                case 110 /* TrueKeyword */:
+                case 95 /* FalseKeyword */:
+                case 104 /* NullKeyword */:
                     return parseLiteralTypeNode();
                 case 40 /* MinusToken */:
                     return lookAhead(nextTokenIsNumericOrBigIntLiteral) ? parseLiteralTypeNode(/*negative*/ true) : parseTypeReference();
-                case 113 /* VoidKeyword */:
+                case 114 /* VoidKeyword */:
                     return parseTokenNode();
-                case 107 /* ThisKeyword */: {
+                case 108 /* ThisKeyword */: {
                     var thisKeyword = parseThisTypeNode();
-                    if (token() === 137 /* IsKeyword */ && !scanner.hasPrecedingLineBreak()) {
+                    if (token() === 138 /* IsKeyword */ && !scanner.hasPrecedingLineBreak()) {
                         return parseThisTypePredicate(thisKeyword);
                     }
                     else {
                         return thisKeyword;
                     }
                 }
-                case 111 /* TypeOfKeyword */:
+                case 112 /* TypeOfKeyword */:
                     return lookAhead(isStartOfTypeOfImportType) ? parseImportType() : parseTypeQuery();
                 case 18 /* OpenBraceToken */:
                     return lookAhead(isStartOfMappedType) ? parseMappedType() : parseTypeLiteral();
@@ -31883,9 +32691,9 @@
                     return parseTupleType();
                 case 20 /* OpenParenToken */:
                     return parseParenthesizedType();
-                case 99 /* ImportKeyword */:
+                case 100 /* ImportKeyword */:
                     return parseImportType();
-                case 127 /* AssertsKeyword */:
+                case 128 /* AssertsKeyword */:
                     return lookAhead(nextTokenIsIdentifierOrKeywordOnSameLine) ? parseAssertsTypePredicate() : parseTypeReference();
                 case 15 /* TemplateHead */:
                     return parseTemplateType();
@@ -31895,44 +32703,44 @@
         }
         function isStartOfType(inStartOfParameter) {
             switch (token()) {
-                case 128 /* AnyKeyword */:
-                case 152 /* UnknownKeyword */:
-                case 147 /* StringKeyword */:
-                case 144 /* NumberKeyword */:
-                case 155 /* BigIntKeyword */:
-                case 131 /* BooleanKeyword */:
-                case 142 /* ReadonlyKeyword */:
-                case 148 /* SymbolKeyword */:
-                case 151 /* UniqueKeyword */:
-                case 113 /* VoidKeyword */:
-                case 150 /* UndefinedKeyword */:
-                case 103 /* NullKeyword */:
-                case 107 /* ThisKeyword */:
-                case 111 /* TypeOfKeyword */:
-                case 141 /* NeverKeyword */:
+                case 129 /* AnyKeyword */:
+                case 153 /* UnknownKeyword */:
+                case 148 /* StringKeyword */:
+                case 145 /* NumberKeyword */:
+                case 156 /* BigIntKeyword */:
+                case 132 /* BooleanKeyword */:
+                case 143 /* ReadonlyKeyword */:
+                case 149 /* SymbolKeyword */:
+                case 152 /* UniqueKeyword */:
+                case 114 /* VoidKeyword */:
+                case 151 /* UndefinedKeyword */:
+                case 104 /* NullKeyword */:
+                case 108 /* ThisKeyword */:
+                case 112 /* TypeOfKeyword */:
+                case 142 /* NeverKeyword */:
                 case 18 /* OpenBraceToken */:
                 case 22 /* OpenBracketToken */:
                 case 29 /* LessThanToken */:
                 case 51 /* BarToken */:
                 case 50 /* AmpersandToken */:
-                case 102 /* NewKeyword */:
+                case 103 /* NewKeyword */:
                 case 10 /* StringLiteral */:
                 case 8 /* NumericLiteral */:
                 case 9 /* BigIntLiteral */:
-                case 109 /* TrueKeyword */:
-                case 94 /* FalseKeyword */:
-                case 145 /* ObjectKeyword */:
+                case 110 /* TrueKeyword */:
+                case 95 /* FalseKeyword */:
+                case 146 /* ObjectKeyword */:
                 case 41 /* AsteriskToken */:
                 case 57 /* QuestionToken */:
                 case 53 /* ExclamationToken */:
                 case 25 /* DotDotDotToken */:
-                case 135 /* InferKeyword */:
-                case 99 /* ImportKeyword */:
-                case 127 /* AssertsKeyword */:
+                case 136 /* InferKeyword */:
+                case 100 /* ImportKeyword */:
+                case 128 /* AssertsKeyword */:
                 case 14 /* NoSubstitutionTemplateLiteral */:
                 case 15 /* TemplateHead */:
                     return true;
-                case 97 /* FunctionKeyword */:
+                case 98 /* FunctionKeyword */:
                     return !inStartOfParameter;
                 case 40 /* MinusToken */:
                     return !inStartOfParameter && lookAhead(nextTokenIsNumericOrBigIntLiteral);
@@ -31996,17 +32804,17 @@
         }
         function parseInferType() {
             var pos = getNodePos();
-            parseExpected(135 /* InferKeyword */);
+            parseExpected(136 /* InferKeyword */);
             return finishNode(factory.createInferTypeNode(parseTypeParameterOfInferType()), pos);
         }
         function parseTypeOperatorOrHigher() {
             var operator = token();
             switch (operator) {
-                case 138 /* KeyOfKeyword */:
-                case 151 /* UniqueKeyword */:
-                case 142 /* ReadonlyKeyword */:
+                case 139 /* KeyOfKeyword */:
+                case 152 /* UniqueKeyword */:
+                case 143 /* ReadonlyKeyword */:
                     return parseTypeOperator(operator);
-                case 135 /* InferKeyword */:
+                case 136 /* InferKeyword */:
                     return parseInferType();
             }
             return parsePostfixTypeOrHigher();
@@ -32056,7 +32864,7 @@
         }
         function nextTokenIsNewKeyword() {
             nextToken();
-            return token() === 102 /* NewKeyword */;
+            return token() === 103 /* NewKeyword */;
         }
         function isStartOfFunctionTypeOrConstructorType() {
             if (token() === 29 /* LessThanToken */) {
@@ -32065,15 +32873,15 @@
             if (token() === 20 /* OpenParenToken */ && lookAhead(isUnambiguouslyStartOfFunctionType)) {
                 return true;
             }
-            return token() === 102 /* NewKeyword */ ||
-                token() === 125 /* AbstractKeyword */ && lookAhead(nextTokenIsNewKeyword);
+            return token() === 103 /* NewKeyword */ ||
+                token() === 126 /* AbstractKeyword */ && lookAhead(nextTokenIsNewKeyword);
         }
         function skipParameterStart() {
             if (ts.isModifierKind(token())) {
                 // Skip modifiers
                 parseModifiers();
             }
-            if (isIdentifier() || token() === 107 /* ThisKeyword */) {
+            if (isIdentifier() || token() === 108 /* ThisKeyword */) {
                 nextToken();
                 return true;
             }
@@ -32096,7 +32904,7 @@
                 // We successfully skipped modifiers (if any) and an identifier or binding pattern,
                 // now see if we have something that indicates a parameter declaration
                 if (token() === 58 /* ColonToken */ || token() === 27 /* CommaToken */ ||
-                    token() === 57 /* QuestionToken */ || token() === 62 /* EqualsToken */) {
+                    token() === 57 /* QuestionToken */ || token() === 63 /* EqualsToken */) {
                     // ( xxx :
                     // ( xxx ,
                     // ( xxx ?
@@ -32126,16 +32934,16 @@
         }
         function parseTypePredicatePrefix() {
             var id = parseIdentifier();
-            if (token() === 137 /* IsKeyword */ && !scanner.hasPrecedingLineBreak()) {
+            if (token() === 138 /* IsKeyword */ && !scanner.hasPrecedingLineBreak()) {
                 nextToken();
                 return id;
             }
         }
         function parseAssertsTypePredicate() {
             var pos = getNodePos();
-            var assertsModifier = parseExpectedToken(127 /* AssertsKeyword */);
-            var parameterName = token() === 107 /* ThisKeyword */ ? parseThisTypeNode() : parseIdentifier();
-            var type = parseOptional(137 /* IsKeyword */) ? parseType() : undefined;
+            var assertsModifier = parseExpectedToken(128 /* AssertsKeyword */);
+            var parameterName = token() === 108 /* ThisKeyword */ ? parseThisTypeNode() : parseIdentifier();
+            var type = parseOptional(138 /* IsKeyword */) ? parseType() : undefined;
             return finishNode(factory.createTypePredicateNode(assertsModifier, parameterName, type), pos);
         }
         function parseType() {
@@ -32149,7 +32957,7 @@
             }
             var pos = getNodePos();
             var type = parseUnionTypeOrHigher();
-            if (!noConditionalTypes && !scanner.hasPrecedingLineBreak() && parseOptional(93 /* ExtendsKeyword */)) {
+            if (!noConditionalTypes && !scanner.hasPrecedingLineBreak() && parseOptional(94 /* ExtendsKeyword */)) {
                 // The type following 'extends' is not permitted to be another conditional type
                 var extendsType = parseTypeWorker(/*noConditionalTypes*/ true);
                 parseExpected(57 /* QuestionToken */);
@@ -32166,11 +32974,11 @@
         // EXPRESSIONS
         function isStartOfLeftHandSideExpression() {
             switch (token()) {
-                case 107 /* ThisKeyword */:
-                case 105 /* SuperKeyword */:
-                case 103 /* NullKeyword */:
-                case 109 /* TrueKeyword */:
-                case 94 /* FalseKeyword */:
+                case 108 /* ThisKeyword */:
+                case 106 /* SuperKeyword */:
+                case 104 /* NullKeyword */:
+                case 110 /* TrueKeyword */:
+                case 95 /* FalseKeyword */:
                 case 8 /* NumericLiteral */:
                 case 9 /* BigIntLiteral */:
                 case 10 /* StringLiteral */:
@@ -32179,14 +32987,14 @@
                 case 20 /* OpenParenToken */:
                 case 22 /* OpenBracketToken */:
                 case 18 /* OpenBraceToken */:
-                case 97 /* FunctionKeyword */:
-                case 83 /* ClassKeyword */:
-                case 102 /* NewKeyword */:
+                case 98 /* FunctionKeyword */:
+                case 84 /* ClassKeyword */:
+                case 103 /* NewKeyword */:
                 case 43 /* SlashToken */:
-                case 67 /* SlashEqualsToken */:
-                case 78 /* Identifier */:
+                case 68 /* SlashEqualsToken */:
+                case 79 /* Identifier */:
                     return true;
-                case 99 /* ImportKeyword */:
+                case 100 /* ImportKeyword */:
                     return lookAhead(nextTokenIsOpenParenOrLessThanOrDot);
                 default:
                     return isIdentifier();
@@ -32201,15 +33009,15 @@
                 case 40 /* MinusToken */:
                 case 54 /* TildeToken */:
                 case 53 /* ExclamationToken */:
-                case 88 /* DeleteKeyword */:
-                case 111 /* TypeOfKeyword */:
-                case 113 /* VoidKeyword */:
+                case 89 /* DeleteKeyword */:
+                case 112 /* TypeOfKeyword */:
+                case 114 /* VoidKeyword */:
                 case 45 /* PlusPlusToken */:
                 case 46 /* MinusMinusToken */:
                 case 29 /* LessThanToken */:
-                case 130 /* AwaitKeyword */:
-                case 124 /* YieldKeyword */:
-                case 79 /* PrivateIdentifier */:
+                case 131 /* AwaitKeyword */:
+                case 125 /* YieldKeyword */:
+                case 80 /* PrivateIdentifier */:
                     // Yield/await always starts an expression.  Either it is an identifier (in which case
                     // it is definitely an expression).  Or it's a keyword (either because we're in
                     // a generator or async function, or in strict mode (or both)) and it started a yield or await expression.
@@ -32228,8 +33036,8 @@
         function isStartOfExpressionStatement() {
             // As per the grammar, none of '{' or 'function' or 'class' can start an expression statement.
             return token() !== 18 /* OpenBraceToken */ &&
-                token() !== 97 /* FunctionKeyword */ &&
-                token() !== 83 /* ClassKeyword */ &&
+                token() !== 98 /* FunctionKeyword */ &&
+                token() !== 84 /* ClassKeyword */ &&
                 token() !== 59 /* AtToken */ &&
                 isStartOfExpression();
         }
@@ -32254,7 +33062,7 @@
             return expr;
         }
         function parseInitializer() {
-            return parseOptional(62 /* EqualsToken */) ? parseAssignmentExpressionOrHigher() : undefined;
+            return parseOptional(63 /* EqualsToken */) ? parseAssignmentExpressionOrHigher() : undefined;
         }
         function parseAssignmentExpressionOrHigher() {
             //  AssignmentExpression[in,yield]:
@@ -32300,7 +33108,7 @@
             // To avoid a look-ahead, we did not handle the case of an arrow function with a single un-parenthesized
             // parameter ('x => ...') above. We handle it here by checking if the parsed expression was a single
             // identifier and the current token is an arrow.
-            if (expr.kind === 78 /* Identifier */ && token() === 38 /* EqualsGreaterThanToken */) {
+            if (expr.kind === 79 /* Identifier */ && token() === 38 /* EqualsGreaterThanToken */) {
                 return parseSimpleArrowFunctionExpression(pos, expr, /*asyncModifier*/ undefined);
             }
             // Now see if we might be in cases '2' or '3'.
@@ -32316,7 +33124,7 @@
             return parseConditionalExpressionRest(expr, pos);
         }
         function isYieldExpression() {
-            if (token() === 124 /* YieldKeyword */) {
+            if (token() === 125 /* YieldKeyword */) {
                 // If we have a 'yield' keyword, and this is a context where yield expressions are
                 // allowed, then definitely parse out a yield expression.
                 if (inYieldContext()) {
@@ -32396,7 +33204,7 @@
         //  Unknown     -> There *might* be a parenthesized arrow function here.
         //                 Speculatively look ahead to be sure, and rollback if not.
         function isParenthesizedArrowFunctionExpression() {
-            if (token() === 20 /* OpenParenToken */ || token() === 29 /* LessThanToken */ || token() === 129 /* AsyncKeyword */) {
+            if (token() === 20 /* OpenParenToken */ || token() === 29 /* LessThanToken */ || token() === 130 /* AsyncKeyword */) {
                 return lookAhead(isParenthesizedArrowFunctionExpressionWorker);
             }
             if (token() === 38 /* EqualsGreaterThanToken */) {
@@ -32409,7 +33217,7 @@
             return 0 /* False */;
         }
         function isParenthesizedArrowFunctionExpressionWorker() {
-            if (token() === 129 /* AsyncKeyword */) {
+            if (token() === 130 /* AsyncKeyword */) {
                 nextToken();
                 if (scanner.hasPrecedingLineBreak()) {
                     return 0 /* False */;
@@ -32453,13 +33261,13 @@
                 // Check for "(xxx yyy", where xxx is a modifier and yyy is an identifier. This
                 // isn't actually allowed, but we want to treat it as a lambda so we can provide
                 // a good error message.
-                if (ts.isModifierKind(second) && second !== 129 /* AsyncKeyword */ && lookAhead(nextTokenIsIdentifier)) {
+                if (ts.isModifierKind(second) && second !== 130 /* AsyncKeyword */ && lookAhead(nextTokenIsIdentifier)) {
                     return 1 /* True */;
                 }
                 // If we had "(" followed by something that's not an identifier,
                 // then this definitely doesn't look like a lambda.  "this" is not
                 // valid, but we want to parse it and then give a semantic error.
-                if (!isIdentifier() && second !== 107 /* ThisKeyword */) {
+                if (!isIdentifier() && second !== 108 /* ThisKeyword */) {
                     return 0 /* False */;
                 }
                 switch (nextToken()) {
@@ -32470,13 +33278,13 @@
                     case 57 /* QuestionToken */:
                         nextToken();
                         // If we have "(a?:" or "(a?," or "(a?=" or "(a?)" then it is definitely a lambda.
-                        if (token() === 58 /* ColonToken */ || token() === 27 /* CommaToken */ || token() === 62 /* EqualsToken */ || token() === 21 /* CloseParenToken */) {
+                        if (token() === 58 /* ColonToken */ || token() === 27 /* CommaToken */ || token() === 63 /* EqualsToken */ || token() === 21 /* CloseParenToken */) {
                             return 1 /* True */;
                         }
                         // Otherwise it is definitely not a lambda.
                         return 0 /* False */;
                     case 27 /* CommaToken */:
-                    case 62 /* EqualsToken */:
+                    case 63 /* EqualsToken */:
                     case 21 /* CloseParenToken */:
                         // If we have "(a," or "(a=" or "(a)" this *could* be an arrow function
                         return 2 /* Unknown */;
@@ -32495,10 +33303,10 @@
                 if (languageVariant === 1 /* JSX */) {
                     var isArrowFunctionInJsx = lookAhead(function () {
                         var third = nextToken();
-                        if (third === 93 /* ExtendsKeyword */) {
+                        if (third === 94 /* ExtendsKeyword */) {
                             var fourth = nextToken();
                             switch (fourth) {
-                                case 62 /* EqualsToken */:
+                                case 63 /* EqualsToken */:
                                 case 31 /* GreaterThanToken */:
                                     return false;
                                 default:
@@ -32532,7 +33340,7 @@
         }
         function tryParseAsyncSimpleArrowFunctionExpression() {
             // We do a check here so that we won't be doing unnecessarily call to "lookAhead"
-            if (token() === 129 /* AsyncKeyword */) {
+            if (token() === 130 /* AsyncKeyword */) {
                 if (lookAhead(isUnParenthesizedAsyncArrowFunctionWorker) === 1 /* True */) {
                     var pos = getNodePos();
                     var asyncModifier = parseModifiersForArrowFunction();
@@ -32546,7 +33354,7 @@
             // AsyncArrowFunctionExpression:
             //      1) async[no LineTerminator here]AsyncArrowBindingIdentifier[?Yield][no LineTerminator here]=>AsyncConciseBody[?In]
             //      2) CoverCallExpressionAndAsyncArrowHead[?Yield, ?Await][no LineTerminator here]=>AsyncConciseBody[?In]
-            if (token() === 129 /* AsyncKeyword */) {
+            if (token() === 130 /* AsyncKeyword */) {
                 nextToken();
                 // If the "async" is followed by "=>" token then it is not a beginning of an async arrow-function
                 // but instead a simple arrow-function which will be parsed inside "parseAssignmentExpressionOrHigher"
@@ -32555,7 +33363,7 @@
                 }
                 // Check for un-parenthesized AsyncArrowFunction
                 var expr = parseBinaryExpressionOrHigher(0 /* Lowest */);
-                if (!scanner.hasPrecedingLineBreak() && expr.kind === 78 /* Identifier */ && token() === 38 /* EqualsGreaterThanToken */) {
+                if (!scanner.hasPrecedingLineBreak() && expr.kind === 79 /* Identifier */ && token() === 38 /* EqualsGreaterThanToken */) {
                     return 1 /* True */;
                 }
             }
@@ -32620,8 +33428,8 @@
                 return parseFunctionBlock(isAsync ? 2 /* Await */ : 0 /* None */);
             }
             if (token() !== 26 /* SemicolonToken */ &&
-                token() !== 97 /* FunctionKeyword */ &&
-                token() !== 83 /* ClassKeyword */ &&
+                token() !== 98 /* FunctionKeyword */ &&
+                token() !== 84 /* ClassKeyword */ &&
                 isStartOfStatement() &&
                 !isStartOfExpressionStatement()) {
                 // Check if we got a plain statement (i.e. no expression-statements, no function/class expressions/declarations)
@@ -32659,7 +33467,7 @@
             var colonToken;
             return finishNode(factory.createConditionalExpression(leftOperand, questionToken, doOutsideOfContext(disallowInAndDecoratorContext, parseAssignmentExpressionOrHigher), colonToken = parseExpectedToken(58 /* ColonToken */), ts.nodeIsPresent(colonToken)
                 ? parseAssignmentExpressionOrHigher()
-                : createMissingNode(78 /* Identifier */, /*reportAtCurrentPosition*/ false, ts.Diagnostics._0_expected, ts.tokenToString(58 /* ColonToken */))), pos);
+                : createMissingNode(79 /* Identifier */, /*reportAtCurrentPosition*/ false, ts.Diagnostics._0_expected, ts.tokenToString(58 /* ColonToken */))), pos);
         }
         function parseBinaryExpressionOrHigher(precedence) {
             var pos = getNodePos();
@@ -32667,7 +33475,7 @@
             return parseBinaryExpressionRest(precedence, leftOperand, pos);
         }
         function isInOrOfKeyword(t) {
-            return t === 100 /* InKeyword */ || t === 157 /* OfKeyword */;
+            return t === 101 /* InKeyword */ || t === 158 /* OfKeyword */;
         }
         function parseBinaryExpressionRest(precedence, leftOperand, pos) {
             while (true) {
@@ -32702,10 +33510,10 @@
                 if (!consumeCurrentOperator) {
                     break;
                 }
-                if (token() === 100 /* InKeyword */ && inDisallowInContext()) {
+                if (token() === 101 /* InKeyword */ && inDisallowInContext()) {
                     break;
                 }
-                if (token() === 126 /* AsKeyword */) {
+                if (token() === 127 /* AsKeyword */) {
                     // Make sure we *do* perform ASI for constructs like this:
                     //    var x = foo
                     //    as (Bar)
@@ -32726,7 +33534,7 @@
             return leftOperand;
         }
         function isBinaryOperator() {
-            if (inDisallowInContext() && token() === 100 /* InKeyword */) {
+            if (inDisallowInContext() && token() === 101 /* InKeyword */) {
                 return false;
             }
             return ts.getBinaryOperatorPrecedence(token()) > 0;
@@ -32754,7 +33562,7 @@
             return finishNode(factory.createVoidExpression(nextTokenAnd(parseSimpleUnaryExpression)), pos);
         }
         function isAwaitExpression() {
-            if (token() === 130 /* AwaitKeyword */) {
+            if (token() === 131 /* AwaitKeyword */) {
                 if (inAwaitContext()) {
                     return true;
                 }
@@ -32807,7 +33615,7 @@
             if (token() === 42 /* AsteriskAsteriskToken */) {
                 var pos = ts.skipTrivia(sourceText, simpleUnaryExpression.pos);
                 var end = simpleUnaryExpression.end;
-                if (simpleUnaryExpression.kind === 207 /* TypeAssertionExpression */) {
+                if (simpleUnaryExpression.kind === 209 /* TypeAssertionExpression */) {
                     parseErrorAt(pos, end, ts.Diagnostics.A_type_assertion_expression_is_not_allowed_in_the_left_hand_side_of_an_exponentiation_expression_Consider_enclosing_the_expression_in_parentheses);
                 }
                 else {
@@ -32837,18 +33645,18 @@
                 case 54 /* TildeToken */:
                 case 53 /* ExclamationToken */:
                     return parsePrefixUnaryExpression();
-                case 88 /* DeleteKeyword */:
+                case 89 /* DeleteKeyword */:
                     return parseDeleteExpression();
-                case 111 /* TypeOfKeyword */:
+                case 112 /* TypeOfKeyword */:
                     return parseTypeOfExpression();
-                case 113 /* VoidKeyword */:
+                case 114 /* VoidKeyword */:
                     return parseVoidExpression();
                 case 29 /* LessThanToken */:
                     // This is modified UnaryExpression grammar in TypeScript
                     //  UnaryExpression (modified):
                     //      < type > UnaryExpression
                     return parseTypeAssertion();
-                case 130 /* AwaitKeyword */:
+                case 131 /* AwaitKeyword */:
                     if (isAwaitExpression()) {
                         return parseAwaitExpression();
                     }
@@ -32875,10 +33683,10 @@
                 case 40 /* MinusToken */:
                 case 54 /* TildeToken */:
                 case 53 /* ExclamationToken */:
-                case 88 /* DeleteKeyword */:
-                case 111 /* TypeOfKeyword */:
-                case 113 /* VoidKeyword */:
-                case 130 /* AwaitKeyword */:
+                case 89 /* DeleteKeyword */:
+                case 112 /* TypeOfKeyword */:
+                case 114 /* VoidKeyword */:
+                case 131 /* AwaitKeyword */:
                     return false;
                 case 29 /* LessThanToken */:
                     // If we are not in JSX context, we are parsing TypeAssertion which is an UnaryExpression
@@ -32954,7 +33762,7 @@
             // or starts the beginning of the first four CallExpression productions.
             var pos = getNodePos();
             var expression;
-            if (token() === 99 /* ImportKeyword */) {
+            if (token() === 100 /* ImportKeyword */) {
                 if (lookAhead(nextTokenIsOpenParenOrLessThan)) {
                     // We don't want to eagerly consume all import keyword as import call expression so we look ahead to find "("
                     // For example:
@@ -32968,7 +33776,7 @@
                     // This is an 'import.*' metaproperty (i.e. 'import.meta')
                     nextToken(); // advance past the 'import'
                     nextToken(); // advance past the dot
-                    expression = finishNode(factory.createMetaProperty(99 /* ImportKeyword */, parseIdentifierName()), pos);
+                    expression = finishNode(factory.createMetaProperty(100 /* ImportKeyword */, parseIdentifierName()), pos);
                     sourceFlags |= 2097152 /* PossiblyContainsImportMeta */;
                 }
                 else {
@@ -32976,7 +33784,7 @@
                 }
             }
             else {
-                expression = token() === 105 /* SuperKeyword */ ? parseSuperExpression() : parseMemberExpressionOrHigher();
+                expression = token() === 106 /* SuperKeyword */ ? parseSuperExpression() : parseMemberExpressionOrHigher();
             }
             // Now, we *may* be complete.  However, we might have consumed the start of a
             // CallExpression or OptionalExpression.  As such, we need to consume the rest
@@ -33054,23 +33862,45 @@
             // private names will never work with `super` (`super.#foo`), but that's a semantic error, not syntactic
             return finishNode(factory.createPropertyAccessExpression(expression, parseRightSideOfDot(/*allowIdentifierNames*/ true, /*allowPrivateIdentifiers*/ true)), pos);
         }
-        function parseJsxElementOrSelfClosingElementOrFragment(inExpressionContext, topInvalidNodePosition) {
+        function parseJsxElementOrSelfClosingElementOrFragment(inExpressionContext, topInvalidNodePosition, openingTag) {
             var pos = getNodePos();
             var opening = parseJsxOpeningOrSelfClosingElementOrOpeningFragment(inExpressionContext);
             var result;
-            if (opening.kind === 276 /* JsxOpeningElement */) {
+            if (opening.kind === 278 /* JsxOpeningElement */) {
                 var children = parseJsxChildren(opening);
-                var closingElement = parseJsxClosingElement(inExpressionContext);
-                if (!tagNamesAreEquivalent(opening.tagName, closingElement.tagName)) {
-                    parseErrorAtRange(closingElement, ts.Diagnostics.Expected_corresponding_JSX_closing_tag_for_0, ts.getTextOfNodeFromSourceText(sourceText, opening.tagName));
+                var closingElement = void 0;
+                var lastChild = children[children.length - 1];
+                if ((lastChild === null || lastChild === void 0 ? void 0 : lastChild.kind) === 276 /* JsxElement */
+                    && !tagNamesAreEquivalent(lastChild.openingElement.tagName, lastChild.closingElement.tagName)
+                    && tagNamesAreEquivalent(opening.tagName, lastChild.closingElement.tagName)) {
+                    // when an unclosed JsxOpeningElement incorrectly parses its parent's JsxClosingElement,
+                    // restructure (<div>(...<span></div>)) --> (<div>(...<span></span>)</div>)
+                    // (no need to error; the parent will error)
+                    var end = lastChild.openingElement.end; // newly-created children and closing are both zero-width end/end
+                    var newLast = finishNode(factory.createJsxElement(lastChild.openingElement, createNodeArray([], end, end), finishNode(factory.createJsxClosingElement(finishNode(factory.createIdentifier(""), end, end)), end, end)), lastChild.openingElement.pos, end);
+                    children = createNodeArray(__spreadArray(__spreadArray([], children.slice(0, children.length - 1), true), [newLast], false), children.pos, end);
+                    closingElement = lastChild.closingElement;
+                }
+                else {
+                    closingElement = parseJsxClosingElement(opening, inExpressionContext);
+                    if (!tagNamesAreEquivalent(opening.tagName, closingElement.tagName)) {
+                        if (openingTag && ts.isJsxOpeningElement(openingTag) && tagNamesAreEquivalent(closingElement.tagName, openingTag.tagName)) {
+                            // opening incorrectly matched with its parent's closing -- put error on opening
+                            parseErrorAtRange(opening.tagName, ts.Diagnostics.JSX_element_0_has_no_corresponding_closing_tag, ts.getTextOfNodeFromSourceText(sourceText, opening.tagName));
+                        }
+                        else {
+                            // other opening/closing mismatches -- put error on closing
+                            parseErrorAtRange(closingElement.tagName, ts.Diagnostics.Expected_corresponding_JSX_closing_tag_for_0, ts.getTextOfNodeFromSourceText(sourceText, opening.tagName));
+                        }
+                    }
                 }
                 result = finishNode(factory.createJsxElement(opening, children, closingElement), pos);
             }
-            else if (opening.kind === 279 /* JsxOpeningFragment */) {
+            else if (opening.kind === 281 /* JsxOpeningFragment */) {
                 result = finishNode(factory.createJsxFragment(opening, parseJsxChildren(opening), parseJsxClosingFragment(inExpressionContext)), pos);
             }
             else {
-                ts.Debug.assert(opening.kind === 275 /* JsxSelfClosingElement */);
+                ts.Debug.assert(opening.kind === 277 /* JsxSelfClosingElement */);
                 // Nothing else to do for self-closing elements
                 result = opening;
             }
@@ -33124,7 +33954,7 @@
                 case 18 /* OpenBraceToken */:
                     return parseJsxExpression(/*inExpressionContext*/ false);
                 case 29 /* LessThanToken */:
-                    return parseJsxElementOrSelfClosingElementOrFragment(/*inExpressionContext*/ false);
+                    return parseJsxElementOrSelfClosingElementOrFragment(/*inExpressionContext*/ false, /*topInvalidNodePosition*/ undefined, openingTag);
                 default:
                     return ts.Debug.assertNever(token);
             }
@@ -33139,6 +33969,13 @@
                 if (!child)
                     break;
                 list.push(child);
+                if (ts.isJsxOpeningElement(openingTag)
+                    && (child === null || child === void 0 ? void 0 : child.kind) === 276 /* JsxElement */
+                    && !tagNamesAreEquivalent(child.openingElement.tagName, child.closingElement.tagName)
+                    && tagNamesAreEquivalent(openingTag.tagName, child.closingElement.tagName)) {
+                    // stop after parsing a mismatched child like <div>...(<span></div>) in order to reattach the </div> higher
+                    break;
+                }
             }
             parsingContext = saveParsingContext;
             return createNodeArray(list, listPos);
@@ -33168,12 +34005,14 @@
             }
             else {
                 parseExpected(43 /* SlashToken */);
-                if (inExpressionContext) {
-                    parseExpected(31 /* GreaterThanToken */);
-                }
-                else {
-                    parseExpected(31 /* GreaterThanToken */, /*diagnostic*/ undefined, /*shouldAdvance*/ false);
-                    scanJsxText();
+                if (parseExpected(31 /* GreaterThanToken */, /*diagnostic*/ undefined, /*shouldAdvance*/ false)) {
+                    // manually advance the scanner in order to look for jsx text inside jsx
+                    if (inExpressionContext) {
+                        nextToken();
+                    }
+                    else {
+                        scanJsxText();
+                    }
                 }
                 node = factory.createJsxSelfClosingElement(tagName, typeArguments, attributes);
             }
@@ -33187,7 +34026,7 @@
             //      primaryExpression in the form of an identifier and "this" keyword
             // We can't just simply use parseLeftHandSideExpressionOrHigher because then we will start consider class,function etc as a keyword
             // We only want to consider "this" as a primaryExpression
-            var expression = token() === 107 /* ThisKeyword */ ?
+            var expression = token() === 108 /* ThisKeyword */ ?
                 parseTokenNode() : parseIdentifierName();
             while (parseOptional(24 /* DotToken */)) {
                 expression = finishNode(factory.createPropertyAccessExpression(expression, parseRightSideOfDot(/*allowIdentifierNames*/ true, /*allowPrivateIdentifiers*/ false)), pos);
@@ -33224,7 +34063,7 @@
             }
             scanJsxIdentifier();
             var pos = getNodePos();
-            return finishNode(factory.createJsxAttribute(parseIdentifierName(), token() !== 62 /* EqualsToken */ ? undefined :
+            return finishNode(factory.createJsxAttribute(parseIdentifierName(), token() !== 63 /* EqualsToken */ ? undefined :
                 scanJsxAttributeValue() === 10 /* StringLiteral */ ? parseLiteralNode() :
                     parseJsxExpression(/*inExpressionContext*/ true)), pos);
         }
@@ -33236,16 +34075,18 @@
             parseExpected(19 /* CloseBraceToken */);
             return finishNode(factory.createJsxSpreadAttribute(expression), pos);
         }
-        function parseJsxClosingElement(inExpressionContext) {
+        function parseJsxClosingElement(open, inExpressionContext) {
             var pos = getNodePos();
             parseExpected(30 /* LessThanSlashToken */);
             var tagName = parseJsxElementName();
-            if (inExpressionContext) {
-                parseExpected(31 /* GreaterThanToken */);
-            }
-            else {
-                parseExpected(31 /* GreaterThanToken */, /*diagnostic*/ undefined, /*shouldAdvance*/ false);
-                scanJsxText();
+            if (parseExpected(31 /* GreaterThanToken */, /*diagnostic*/ undefined, /*shouldAdvance*/ false)) {
+                // manually advance the scanner in order to look for jsx text inside jsx
+                if (inExpressionContext || !tagNamesAreEquivalent(open.tagName, tagName)) {
+                    nextToken();
+                }
+                else {
+                    scanJsxText();
+                }
             }
             return finishNode(factory.createJsxClosingElement(tagName), pos);
         }
@@ -33255,12 +34096,14 @@
             if (ts.tokenIsIdentifierOrKeyword(token())) {
                 parseErrorAtRange(parseJsxElementName(), ts.Diagnostics.Expected_corresponding_closing_tag_for_JSX_fragment);
             }
-            if (inExpressionContext) {
-                parseExpected(31 /* GreaterThanToken */);
-            }
-            else {
-                parseExpected(31 /* GreaterThanToken */, /*diagnostic*/ undefined, /*shouldAdvance*/ false);
-                scanJsxText();
+            if (parseExpected(31 /* GreaterThanToken */, /*diagnostic*/ undefined, /*shouldAdvance*/ false)) {
+                // manually advance the scanner in order to look for jsx text inside jsx
+                if (inExpressionContext) {
+                    nextToken();
+                }
+                else {
+                    scanJsxText();
+                }
             }
             return finishNode(factory.createJsxJsxClosingFragment(), pos);
         }
@@ -33317,7 +34160,7 @@
         function parseElementAccessExpressionRest(pos, expression, questionDotToken) {
             var argumentExpression;
             if (token() === 23 /* CloseBracketToken */) {
-                argumentExpression = createMissingNode(78 /* Identifier */, /*reportAtCurrentPosition*/ true, ts.Diagnostics.An_element_access_expression_should_take_an_argument);
+                argumentExpression = createMissingNode(79 /* Identifier */, /*reportAtCurrentPosition*/ true, ts.Diagnostics.An_element_access_expression_should_take_an_argument);
             }
             else {
                 var argument = allowInAnd(parseExpression);
@@ -33412,7 +34255,7 @@
                 }
                 if (questionDotToken) {
                     // We failed to parse anything, so report a missing identifier here.
-                    var name = createMissingNode(78 /* Identifier */, /*reportAtCurrentPosition*/ false, ts.Diagnostics.Identifier_expected);
+                    var name = createMissingNode(79 /* Identifier */, /*reportAtCurrentPosition*/ false, ts.Diagnostics.Identifier_expected);
                     expression = finishNode(factory.createPropertyAccessChain(expression, questionDotToken, name), pos);
                 }
                 break;
@@ -33493,11 +34336,11 @@
                 case 10 /* StringLiteral */:
                 case 14 /* NoSubstitutionTemplateLiteral */:
                     return parseLiteralNode();
-                case 107 /* ThisKeyword */:
-                case 105 /* SuperKeyword */:
-                case 103 /* NullKeyword */:
-                case 109 /* TrueKeyword */:
-                case 94 /* FalseKeyword */:
+                case 108 /* ThisKeyword */:
+                case 106 /* SuperKeyword */:
+                case 104 /* NullKeyword */:
+                case 110 /* TrueKeyword */:
+                case 95 /* FalseKeyword */:
                     return parseTokenNode();
                 case 20 /* OpenParenToken */:
                     return parseParenthesizedExpression();
@@ -33505,7 +34348,7 @@
                     return parseArrayLiteralExpression();
                 case 18 /* OpenBraceToken */:
                     return parseObjectLiteralExpression();
-                case 129 /* AsyncKeyword */:
+                case 130 /* AsyncKeyword */:
                     // Async arrow functions are parsed earlier in parseAssignmentExpressionOrHigher.
                     // If we encounter `async [no LineTerminator here] function` then this is an async
                     // function; otherwise, its an identifier.
@@ -33513,14 +34356,14 @@
                         break;
                     }
                     return parseFunctionExpression();
-                case 83 /* ClassKeyword */:
+                case 84 /* ClassKeyword */:
                     return parseClassExpression();
-                case 97 /* FunctionKeyword */:
+                case 98 /* FunctionKeyword */:
                     return parseFunctionExpression();
-                case 102 /* NewKeyword */:
+                case 103 /* NewKeyword */:
                     return parseNewExpressionOrNewDotTarget();
                 case 43 /* SlashToken */:
-                case 67 /* SlashEqualsToken */:
+                case 68 /* SlashEqualsToken */:
                     if (reScanSlashToken() === 13 /* RegularExpressionLiteral */) {
                         return parseLiteralNode();
                     }
@@ -33569,11 +34412,11 @@
             }
             var decorators = parseDecorators();
             var modifiers = parseModifiers();
-            if (parseContextualModifier(134 /* GetKeyword */)) {
-                return parseAccessorDeclaration(pos, hasJSDoc, decorators, modifiers, 168 /* GetAccessor */);
+            if (parseContextualModifier(135 /* GetKeyword */)) {
+                return parseAccessorDeclaration(pos, hasJSDoc, decorators, modifiers, 170 /* GetAccessor */);
             }
-            if (parseContextualModifier(146 /* SetKeyword */)) {
-                return parseAccessorDeclaration(pos, hasJSDoc, decorators, modifiers, 169 /* SetAccessor */);
+            if (parseContextualModifier(147 /* SetKeyword */)) {
+                return parseAccessorDeclaration(pos, hasJSDoc, decorators, modifiers, 171 /* SetAccessor */);
             }
             var asteriskToken = parseOptionalToken(41 /* AsteriskToken */);
             var tokenIsIdentifier = isIdentifier();
@@ -33592,7 +34435,7 @@
             var node;
             var isShorthandPropertyAssignment = tokenIsIdentifier && (token() !== 58 /* ColonToken */);
             if (isShorthandPropertyAssignment) {
-                var equalsToken = parseOptionalToken(62 /* EqualsToken */);
+                var equalsToken = parseOptionalToken(63 /* EqualsToken */);
                 var objectAssignmentInitializer = equalsToken ? allowInAnd(parseAssignmentExpressionOrHigher) : undefined;
                 node = factory.createShorthandPropertyAssignment(name, objectAssignmentInitializer);
                 // Save equals token for error reporting.
@@ -33631,14 +34474,12 @@
             //
             // FunctionExpression:
             //      function BindingIdentifier[opt](FormalParameters){ FunctionBody }
-            var saveDecoratorContext = inDecoratorContext();
-            if (saveDecoratorContext) {
-                setDecoratorContext(/*val*/ false);
-            }
+            var savedDecoratorContext = inDecoratorContext();
+            setDecoratorContext(/*val*/ false);
             var pos = getNodePos();
             var hasJSDoc = hasPrecedingJSDocComment();
             var modifiers = parseModifiers();
-            parseExpected(97 /* FunctionKeyword */);
+            parseExpected(98 /* FunctionKeyword */);
             var asteriskToken = parseOptionalToken(41 /* AsteriskToken */);
             var isGenerator = asteriskToken ? 1 /* Yield */ : 0 /* None */;
             var isAsync = ts.some(modifiers, ts.isAsyncModifier) ? 2 /* Await */ : 0 /* None */;
@@ -33650,9 +34491,7 @@
             var parameters = parseParameters(isGenerator | isAsync);
             var type = parseReturnType(58 /* ColonToken */, /*isType*/ false);
             var body = parseFunctionBlock(isGenerator | isAsync);
-            if (saveDecoratorContext) {
-                setDecoratorContext(/*val*/ true);
-            }
+            setDecoratorContext(savedDecoratorContext);
             var node = factory.createFunctionExpression(modifiers, asteriskToken, name, typeParameters, parameters, type, body);
             return withJSDoc(finishNode(node, pos), hasJSDoc);
         }
@@ -33661,10 +34500,10 @@
         }
         function parseNewExpressionOrNewDotTarget() {
             var pos = getNodePos();
-            parseExpected(102 /* NewKeyword */);
+            parseExpected(103 /* NewKeyword */);
             if (parseOptional(24 /* DotToken */)) {
                 var name = parseIdentifierName();
-                return finishNode(factory.createMetaProperty(102 /* NewKeyword */, name), pos);
+                return finishNode(factory.createMetaProperty(103 /* NewKeyword */, name), pos);
             }
             var expressionPos = getNodePos();
             var expression = parsePrimaryExpression();
@@ -33703,7 +34542,7 @@
                     }
                 }
                 var result = withJSDoc(finishNode(factory.createBlock(statements, multiLine), pos), hasJSDoc);
-                if (token() === 62 /* EqualsToken */) {
+                if (token() === 63 /* EqualsToken */) {
                     parseErrorAtCurrentToken(ts.Diagnostics.Declaration_or_statement_expected_This_follows_a_block_of_statements_so_if_you_intended_to_write_a_destructuring_assignment_you_might_need_to_wrap_the_the_whole_assignment_in_parentheses);
                     nextToken();
                 }
@@ -33745,20 +34584,20 @@
         function parseIfStatement() {
             var pos = getNodePos();
             var hasJSDoc = hasPrecedingJSDocComment();
-            parseExpected(98 /* IfKeyword */);
+            parseExpected(99 /* IfKeyword */);
             parseExpected(20 /* OpenParenToken */);
             var expression = allowInAnd(parseExpression);
             parseExpected(21 /* CloseParenToken */);
             var thenStatement = parseStatement();
-            var elseStatement = parseOptional(90 /* ElseKeyword */) ? parseStatement() : undefined;
+            var elseStatement = parseOptional(91 /* ElseKeyword */) ? parseStatement() : undefined;
             return withJSDoc(finishNode(factory.createIfStatement(expression, thenStatement, elseStatement), pos), hasJSDoc);
         }
         function parseDoStatement() {
             var pos = getNodePos();
             var hasJSDoc = hasPrecedingJSDocComment();
-            parseExpected(89 /* DoKeyword */);
+            parseExpected(90 /* DoKeyword */);
             var statement = parseStatement();
-            parseExpected(114 /* WhileKeyword */);
+            parseExpected(115 /* WhileKeyword */);
             parseExpected(20 /* OpenParenToken */);
             var expression = allowInAnd(parseExpression);
             parseExpected(21 /* CloseParenToken */);
@@ -33772,7 +34611,7 @@
         function parseWhileStatement() {
             var pos = getNodePos();
             var hasJSDoc = hasPrecedingJSDocComment();
-            parseExpected(114 /* WhileKeyword */);
+            parseExpected(115 /* WhileKeyword */);
             parseExpected(20 /* OpenParenToken */);
             var expression = allowInAnd(parseExpression);
             parseExpected(21 /* CloseParenToken */);
@@ -33782,12 +34621,12 @@
         function parseForOrForInOrForOfStatement() {
             var pos = getNodePos();
             var hasJSDoc = hasPrecedingJSDocComment();
-            parseExpected(96 /* ForKeyword */);
-            var awaitToken = parseOptionalToken(130 /* AwaitKeyword */);
+            parseExpected(97 /* ForKeyword */);
+            var awaitToken = parseOptionalToken(131 /* AwaitKeyword */);
             parseExpected(20 /* OpenParenToken */);
             var initializer;
             if (token() !== 26 /* SemicolonToken */) {
-                if (token() === 112 /* VarKeyword */ || token() === 118 /* LetKeyword */ || token() === 84 /* ConstKeyword */) {
+                if (token() === 113 /* VarKeyword */ || token() === 119 /* LetKeyword */ || token() === 85 /* ConstKeyword */) {
                     initializer = parseVariableDeclarationList(/*inForStatementInitializer*/ true);
                 }
                 else {
@@ -33795,12 +34634,12 @@
                 }
             }
             var node;
-            if (awaitToken ? parseExpected(157 /* OfKeyword */) : parseOptional(157 /* OfKeyword */)) {
+            if (awaitToken ? parseExpected(158 /* OfKeyword */) : parseOptional(158 /* OfKeyword */)) {
                 var expression = allowInAnd(parseAssignmentExpressionOrHigher);
                 parseExpected(21 /* CloseParenToken */);
                 node = factory.createForOfStatement(awaitToken, initializer, expression, parseStatement());
             }
-            else if (parseOptional(100 /* InKeyword */)) {
+            else if (parseOptional(101 /* InKeyword */)) {
                 var expression = allowInAnd(parseExpression);
                 parseExpected(21 /* CloseParenToken */);
                 node = factory.createForInStatement(initializer, expression, parseStatement());
@@ -33822,10 +34661,10 @@
         function parseBreakOrContinueStatement(kind) {
             var pos = getNodePos();
             var hasJSDoc = hasPrecedingJSDocComment();
-            parseExpected(kind === 242 /* BreakStatement */ ? 80 /* BreakKeyword */ : 85 /* ContinueKeyword */);
+            parseExpected(kind === 244 /* BreakStatement */ ? 81 /* BreakKeyword */ : 86 /* ContinueKeyword */);
             var label = canParseSemicolon() ? undefined : parseIdentifier();
             parseSemicolon();
-            var node = kind === 242 /* BreakStatement */
+            var node = kind === 244 /* BreakStatement */
                 ? factory.createBreakStatement(label)
                 : factory.createContinueStatement(label);
             return withJSDoc(finishNode(node, pos), hasJSDoc);
@@ -33833,7 +34672,7 @@
         function parseReturnStatement() {
             var pos = getNodePos();
             var hasJSDoc = hasPrecedingJSDocComment();
-            parseExpected(104 /* ReturnKeyword */);
+            parseExpected(105 /* ReturnKeyword */);
             var expression = canParseSemicolon() ? undefined : allowInAnd(parseExpression);
             parseSemicolon();
             return withJSDoc(finishNode(factory.createReturnStatement(expression), pos), hasJSDoc);
@@ -33841,7 +34680,7 @@
         function parseWithStatement() {
             var pos = getNodePos();
             var hasJSDoc = hasPrecedingJSDocComment();
-            parseExpected(115 /* WithKeyword */);
+            parseExpected(116 /* WithKeyword */);
             parseExpected(20 /* OpenParenToken */);
             var expression = allowInAnd(parseExpression);
             parseExpected(21 /* CloseParenToken */);
@@ -33850,7 +34689,7 @@
         }
         function parseCaseClause() {
             var pos = getNodePos();
-            parseExpected(81 /* CaseKeyword */);
+            parseExpected(82 /* CaseKeyword */);
             var expression = allowInAnd(parseExpression);
             parseExpected(58 /* ColonToken */);
             var statements = parseList(3 /* SwitchClauseStatements */, parseStatement);
@@ -33858,13 +34697,13 @@
         }
         function parseDefaultClause() {
             var pos = getNodePos();
-            parseExpected(87 /* DefaultKeyword */);
+            parseExpected(88 /* DefaultKeyword */);
             parseExpected(58 /* ColonToken */);
             var statements = parseList(3 /* SwitchClauseStatements */, parseStatement);
             return finishNode(factory.createDefaultClause(statements), pos);
         }
         function parseCaseOrDefaultClause() {
-            return token() === 81 /* CaseKeyword */ ? parseCaseClause() : parseDefaultClause();
+            return token() === 82 /* CaseKeyword */ ? parseCaseClause() : parseDefaultClause();
         }
         function parseCaseBlock() {
             var pos = getNodePos();
@@ -33876,7 +34715,7 @@
         function parseSwitchStatement() {
             var pos = getNodePos();
             var hasJSDoc = hasPrecedingJSDocComment();
-            parseExpected(106 /* SwitchKeyword */);
+            parseExpected(107 /* SwitchKeyword */);
             parseExpected(20 /* OpenParenToken */);
             var expression = allowInAnd(parseExpression);
             parseExpected(21 /* CloseParenToken */);
@@ -33888,7 +34727,7 @@
             //      throw [no LineTerminator here]Expression[In, ?Yield];
             var pos = getNodePos();
             var hasJSDoc = hasPrecedingJSDocComment();
-            parseExpected(108 /* ThrowKeyword */);
+            parseExpected(109 /* ThrowKeyword */);
             // Because of automatic semicolon insertion, we need to report error if this
             // throw could be terminated with a semicolon.  Note: we can't call 'parseExpression'
             // directly as that might consume an expression on the following line.
@@ -33899,28 +34738,30 @@
                 identifierCount++;
                 expression = finishNode(factory.createIdentifier(""), getNodePos());
             }
-            parseSemicolon();
+            if (!tryParseSemicolon()) {
+                parseErrorForMissingSemicolonAfter(expression);
+            }
             return withJSDoc(finishNode(factory.createThrowStatement(expression), pos), hasJSDoc);
         }
         // TODO: Review for error recovery
         function parseTryStatement() {
             var pos = getNodePos();
             var hasJSDoc = hasPrecedingJSDocComment();
-            parseExpected(110 /* TryKeyword */);
+            parseExpected(111 /* TryKeyword */);
             var tryBlock = parseBlock(/*ignoreMissingOpenBrace*/ false);
-            var catchClause = token() === 82 /* CatchKeyword */ ? parseCatchClause() : undefined;
+            var catchClause = token() === 83 /* CatchKeyword */ ? parseCatchClause() : undefined;
             // If we don't have a catch clause, then we must have a finally clause.  Try to parse
             // one out no matter what.
             var finallyBlock;
-            if (!catchClause || token() === 95 /* FinallyKeyword */) {
-                parseExpected(95 /* FinallyKeyword */);
+            if (!catchClause || token() === 96 /* FinallyKeyword */) {
+                parseExpected(96 /* FinallyKeyword */);
                 finallyBlock = parseBlock(/*ignoreMissingOpenBrace*/ false);
             }
             return withJSDoc(finishNode(factory.createTryStatement(tryBlock, catchClause, finallyBlock), pos), hasJSDoc);
         }
         function parseCatchClause() {
             var pos = getNodePos();
-            parseExpected(82 /* CatchKeyword */);
+            parseExpected(83 /* CatchKeyword */);
             var variableDeclaration;
             if (parseOptional(20 /* OpenParenToken */)) {
                 variableDeclaration = parseVariableDeclaration();
@@ -33936,7 +34777,7 @@
         function parseDebuggerStatement() {
             var pos = getNodePos();
             var hasJSDoc = hasPrecedingJSDocComment();
-            parseExpected(86 /* DebuggerKeyword */);
+            parseExpected(87 /* DebuggerKeyword */);
             parseSemicolon();
             return withJSDoc(finishNode(factory.createDebuggerStatement(), pos), hasJSDoc);
         }
@@ -33953,7 +34794,9 @@
                 node = factory.createLabeledStatement(expression, parseStatement());
             }
             else {
-                parseSemicolon();
+                if (!tryParseSemicolon()) {
+                    parseErrorForMissingSemicolonAfter(expression);
+                }
                 node = factory.createExpressionStatement(expression);
                 if (hasParen) {
                     // do not parse the same jsdoc twice
@@ -33968,11 +34811,11 @@
         }
         function nextTokenIsClassKeywordOnSameLine() {
             nextToken();
-            return token() === 83 /* ClassKeyword */ && !scanner.hasPrecedingLineBreak();
+            return token() === 84 /* ClassKeyword */ && !scanner.hasPrecedingLineBreak();
         }
         function nextTokenIsFunctionKeywordOnSameLine() {
             nextToken();
-            return token() === 97 /* FunctionKeyword */ && !scanner.hasPrecedingLineBreak();
+            return token() === 98 /* FunctionKeyword */ && !scanner.hasPrecedingLineBreak();
         }
         function nextTokenIsIdentifierOrKeywordOrLiteralOnSameLine() {
             nextToken();
@@ -33981,12 +34824,12 @@
         function isDeclaration() {
             while (true) {
                 switch (token()) {
-                    case 112 /* VarKeyword */:
-                    case 118 /* LetKeyword */:
-                    case 84 /* ConstKeyword */:
-                    case 97 /* FunctionKeyword */:
-                    case 83 /* ClassKeyword */:
-                    case 91 /* EnumKeyword */:
+                    case 113 /* VarKeyword */:
+                    case 119 /* LetKeyword */:
+                    case 85 /* ConstKeyword */:
+                    case 98 /* FunctionKeyword */:
+                    case 84 /* ClassKeyword */:
+                    case 92 /* EnumKeyword */:
                         return true;
                     // 'declare', 'module', 'namespace', 'interface'* and 'type' are all legal JavaScript identifiers;
                     // however, an identifier cannot be followed by another identifier on the same line. This is what we
@@ -34009,44 +34852,44 @@
                     //   I {}
                     //
                     // could be legal, it would add complexity for very little gain.
-                    case 117 /* InterfaceKeyword */:
-                    case 149 /* TypeKeyword */:
+                    case 118 /* InterfaceKeyword */:
+                    case 150 /* TypeKeyword */:
                         return nextTokenIsIdentifierOnSameLine();
-                    case 139 /* ModuleKeyword */:
-                    case 140 /* NamespaceKeyword */:
+                    case 140 /* ModuleKeyword */:
+                    case 141 /* NamespaceKeyword */:
                         return nextTokenIsIdentifierOrStringLiteralOnSameLine();
-                    case 125 /* AbstractKeyword */:
-                    case 129 /* AsyncKeyword */:
-                    case 133 /* DeclareKeyword */:
-                    case 120 /* PrivateKeyword */:
-                    case 121 /* ProtectedKeyword */:
-                    case 122 /* PublicKeyword */:
-                    case 142 /* ReadonlyKeyword */:
+                    case 126 /* AbstractKeyword */:
+                    case 130 /* AsyncKeyword */:
+                    case 134 /* DeclareKeyword */:
+                    case 121 /* PrivateKeyword */:
+                    case 122 /* ProtectedKeyword */:
+                    case 123 /* PublicKeyword */:
+                    case 143 /* ReadonlyKeyword */:
                         nextToken();
                         // ASI takes effect for this modifier.
                         if (scanner.hasPrecedingLineBreak()) {
                             return false;
                         }
                         continue;
-                    case 154 /* GlobalKeyword */:
+                    case 155 /* GlobalKeyword */:
                         nextToken();
-                        return token() === 18 /* OpenBraceToken */ || token() === 78 /* Identifier */ || token() === 92 /* ExportKeyword */;
-                    case 99 /* ImportKeyword */:
+                        return token() === 18 /* OpenBraceToken */ || token() === 79 /* Identifier */ || token() === 93 /* ExportKeyword */;
+                    case 100 /* ImportKeyword */:
                         nextToken();
                         return token() === 10 /* StringLiteral */ || token() === 41 /* AsteriskToken */ ||
                             token() === 18 /* OpenBraceToken */ || ts.tokenIsIdentifierOrKeyword(token());
-                    case 92 /* ExportKeyword */:
+                    case 93 /* ExportKeyword */:
                         var currentToken_1 = nextToken();
-                        if (currentToken_1 === 149 /* TypeKeyword */) {
+                        if (currentToken_1 === 150 /* TypeKeyword */) {
                             currentToken_1 = lookAhead(nextToken);
                         }
-                        if (currentToken_1 === 62 /* EqualsToken */ || currentToken_1 === 41 /* AsteriskToken */ ||
-                            currentToken_1 === 18 /* OpenBraceToken */ || currentToken_1 === 87 /* DefaultKeyword */ ||
-                            currentToken_1 === 126 /* AsKeyword */) {
+                        if (currentToken_1 === 63 /* EqualsToken */ || currentToken_1 === 41 /* AsteriskToken */ ||
+                            currentToken_1 === 18 /* OpenBraceToken */ || currentToken_1 === 88 /* DefaultKeyword */ ||
+                            currentToken_1 === 127 /* AsKeyword */) {
                             return true;
                         }
                         continue;
-                    case 123 /* StaticKeyword */:
+                    case 124 /* StaticKeyword */:
                         nextToken();
                         continue;
                     default:
@@ -34062,48 +34905,48 @@
                 case 59 /* AtToken */:
                 case 26 /* SemicolonToken */:
                 case 18 /* OpenBraceToken */:
-                case 112 /* VarKeyword */:
-                case 118 /* LetKeyword */:
-                case 97 /* FunctionKeyword */:
-                case 83 /* ClassKeyword */:
-                case 91 /* EnumKeyword */:
-                case 98 /* IfKeyword */:
-                case 89 /* DoKeyword */:
-                case 114 /* WhileKeyword */:
-                case 96 /* ForKeyword */:
-                case 85 /* ContinueKeyword */:
-                case 80 /* BreakKeyword */:
-                case 104 /* ReturnKeyword */:
-                case 115 /* WithKeyword */:
-                case 106 /* SwitchKeyword */:
-                case 108 /* ThrowKeyword */:
-                case 110 /* TryKeyword */:
-                case 86 /* DebuggerKeyword */:
+                case 113 /* VarKeyword */:
+                case 119 /* LetKeyword */:
+                case 98 /* FunctionKeyword */:
+                case 84 /* ClassKeyword */:
+                case 92 /* EnumKeyword */:
+                case 99 /* IfKeyword */:
+                case 90 /* DoKeyword */:
+                case 115 /* WhileKeyword */:
+                case 97 /* ForKeyword */:
+                case 86 /* ContinueKeyword */:
+                case 81 /* BreakKeyword */:
+                case 105 /* ReturnKeyword */:
+                case 116 /* WithKeyword */:
+                case 107 /* SwitchKeyword */:
+                case 109 /* ThrowKeyword */:
+                case 111 /* TryKeyword */:
+                case 87 /* DebuggerKeyword */:
                 // 'catch' and 'finally' do not actually indicate that the code is part of a statement,
                 // however, we say they are here so that we may gracefully parse them and error later.
                 // falls through
-                case 82 /* CatchKeyword */:
-                case 95 /* FinallyKeyword */:
+                case 83 /* CatchKeyword */:
+                case 96 /* FinallyKeyword */:
                     return true;
-                case 99 /* ImportKeyword */:
+                case 100 /* ImportKeyword */:
                     return isStartOfDeclaration() || lookAhead(nextTokenIsOpenParenOrLessThanOrDot);
-                case 84 /* ConstKeyword */:
-                case 92 /* ExportKeyword */:
+                case 85 /* ConstKeyword */:
+                case 93 /* ExportKeyword */:
                     return isStartOfDeclaration();
-                case 129 /* AsyncKeyword */:
-                case 133 /* DeclareKeyword */:
-                case 117 /* InterfaceKeyword */:
-                case 139 /* ModuleKeyword */:
-                case 140 /* NamespaceKeyword */:
-                case 149 /* TypeKeyword */:
-                case 154 /* GlobalKeyword */:
+                case 130 /* AsyncKeyword */:
+                case 134 /* DeclareKeyword */:
+                case 118 /* InterfaceKeyword */:
+                case 140 /* ModuleKeyword */:
+                case 141 /* NamespaceKeyword */:
+                case 150 /* TypeKeyword */:
+                case 155 /* GlobalKeyword */:
                     // When these don't start a declaration, they're an identifier in an expression statement
                     return true;
-                case 122 /* PublicKeyword */:
-                case 120 /* PrivateKeyword */:
-                case 121 /* ProtectedKeyword */:
-                case 123 /* StaticKeyword */:
-                case 142 /* ReadonlyKeyword */:
+                case 123 /* PublicKeyword */:
+                case 121 /* PrivateKeyword */:
+                case 122 /* ProtectedKeyword */:
+                case 124 /* StaticKeyword */:
+                case 143 /* ReadonlyKeyword */:
                     // When these don't start a declaration, they may be the start of a class member if an identifier
                     // immediately follows. Otherwise they're an identifier in an expression statement.
                     return isStartOfDeclaration() || !lookAhead(nextTokenIsIdentifierOrKeywordOnSameLine);
@@ -34111,14 +34954,14 @@
                     return isStartOfExpression();
             }
         }
-        function nextTokenIsIdentifierOrStartOfDestructuring() {
+        function nextTokenIsBindingIdentifierOrStartOfDestructuring() {
             nextToken();
-            return isIdentifier() || token() === 18 /* OpenBraceToken */ || token() === 22 /* OpenBracketToken */;
+            return isBindingIdentifier() || token() === 18 /* OpenBraceToken */ || token() === 22 /* OpenBracketToken */;
         }
         function isLetDeclaration() {
             // In ES6 'let' always starts a lexical declaration if followed by an identifier or {
             // or [.
-            return lookAhead(nextTokenIsIdentifierOrStartOfDestructuring);
+            return lookAhead(nextTokenIsBindingIdentifierOrStartOfDestructuring);
         }
         function parseStatement() {
             switch (token()) {
@@ -34126,64 +34969,64 @@
                     return parseEmptyStatement();
                 case 18 /* OpenBraceToken */:
                     return parseBlock(/*ignoreMissingOpenBrace*/ false);
-                case 112 /* VarKeyword */:
+                case 113 /* VarKeyword */:
                     return parseVariableStatement(getNodePos(), hasPrecedingJSDocComment(), /*decorators*/ undefined, /*modifiers*/ undefined);
-                case 118 /* LetKeyword */:
+                case 119 /* LetKeyword */:
                     if (isLetDeclaration()) {
                         return parseVariableStatement(getNodePos(), hasPrecedingJSDocComment(), /*decorators*/ undefined, /*modifiers*/ undefined);
                     }
                     break;
-                case 97 /* FunctionKeyword */:
+                case 98 /* FunctionKeyword */:
                     return parseFunctionDeclaration(getNodePos(), hasPrecedingJSDocComment(), /*decorators*/ undefined, /*modifiers*/ undefined);
-                case 83 /* ClassKeyword */:
+                case 84 /* ClassKeyword */:
                     return parseClassDeclaration(getNodePos(), hasPrecedingJSDocComment(), /*decorators*/ undefined, /*modifiers*/ undefined);
-                case 98 /* IfKeyword */:
+                case 99 /* IfKeyword */:
                     return parseIfStatement();
-                case 89 /* DoKeyword */:
+                case 90 /* DoKeyword */:
                     return parseDoStatement();
-                case 114 /* WhileKeyword */:
+                case 115 /* WhileKeyword */:
                     return parseWhileStatement();
-                case 96 /* ForKeyword */:
+                case 97 /* ForKeyword */:
                     return parseForOrForInOrForOfStatement();
-                case 85 /* ContinueKeyword */:
-                    return parseBreakOrContinueStatement(241 /* ContinueStatement */);
-                case 80 /* BreakKeyword */:
-                    return parseBreakOrContinueStatement(242 /* BreakStatement */);
-                case 104 /* ReturnKeyword */:
+                case 86 /* ContinueKeyword */:
+                    return parseBreakOrContinueStatement(243 /* ContinueStatement */);
+                case 81 /* BreakKeyword */:
+                    return parseBreakOrContinueStatement(244 /* BreakStatement */);
+                case 105 /* ReturnKeyword */:
                     return parseReturnStatement();
-                case 115 /* WithKeyword */:
+                case 116 /* WithKeyword */:
                     return parseWithStatement();
-                case 106 /* SwitchKeyword */:
+                case 107 /* SwitchKeyword */:
                     return parseSwitchStatement();
-                case 108 /* ThrowKeyword */:
+                case 109 /* ThrowKeyword */:
                     return parseThrowStatement();
-                case 110 /* TryKeyword */:
+                case 111 /* TryKeyword */:
                 // Include 'catch' and 'finally' for error recovery.
                 // falls through
-                case 82 /* CatchKeyword */:
-                case 95 /* FinallyKeyword */:
+                case 83 /* CatchKeyword */:
+                case 96 /* FinallyKeyword */:
                     return parseTryStatement();
-                case 86 /* DebuggerKeyword */:
+                case 87 /* DebuggerKeyword */:
                     return parseDebuggerStatement();
                 case 59 /* AtToken */:
                     return parseDeclaration();
-                case 129 /* AsyncKeyword */:
-                case 117 /* InterfaceKeyword */:
-                case 149 /* TypeKeyword */:
-                case 139 /* ModuleKeyword */:
-                case 140 /* NamespaceKeyword */:
-                case 133 /* DeclareKeyword */:
-                case 84 /* ConstKeyword */:
-                case 91 /* EnumKeyword */:
-                case 92 /* ExportKeyword */:
-                case 99 /* ImportKeyword */:
-                case 120 /* PrivateKeyword */:
-                case 121 /* ProtectedKeyword */:
-                case 122 /* PublicKeyword */:
-                case 125 /* AbstractKeyword */:
-                case 123 /* StaticKeyword */:
-                case 142 /* ReadonlyKeyword */:
-                case 154 /* GlobalKeyword */:
+                case 130 /* AsyncKeyword */:
+                case 118 /* InterfaceKeyword */:
+                case 150 /* TypeKeyword */:
+                case 140 /* ModuleKeyword */:
+                case 141 /* NamespaceKeyword */:
+                case 134 /* DeclareKeyword */:
+                case 85 /* ConstKeyword */:
+                case 92 /* EnumKeyword */:
+                case 93 /* ExportKeyword */:
+                case 100 /* ImportKeyword */:
+                case 121 /* PrivateKeyword */:
+                case 122 /* ProtectedKeyword */:
+                case 123 /* PublicKeyword */:
+                case 126 /* AbstractKeyword */:
+                case 124 /* StaticKeyword */:
+                case 143 /* ReadonlyKeyword */:
+                case 155 /* GlobalKeyword */:
                     if (isStartOfDeclaration()) {
                         return parseDeclaration();
                     }
@@ -34192,7 +35035,7 @@
             return parseExpressionOrLabeledStatement();
         }
         function isDeclareModifier(modifier) {
-            return modifier.kind === 133 /* DeclareKeyword */;
+            return modifier.kind === 134 /* DeclareKeyword */;
         }
         function parseDeclaration() {
             // TODO: Can we hold onto the parsed decorators/modifiers and advance the scanner
@@ -34233,33 +35076,33 @@
         }
         function parseDeclarationWorker(pos, hasJSDoc, decorators, modifiers) {
             switch (token()) {
-                case 112 /* VarKeyword */:
-                case 118 /* LetKeyword */:
-                case 84 /* ConstKeyword */:
+                case 113 /* VarKeyword */:
+                case 119 /* LetKeyword */:
+                case 85 /* ConstKeyword */:
                     return parseVariableStatement(pos, hasJSDoc, decorators, modifiers);
-                case 97 /* FunctionKeyword */:
+                case 98 /* FunctionKeyword */:
                     return parseFunctionDeclaration(pos, hasJSDoc, decorators, modifiers);
-                case 83 /* ClassKeyword */:
+                case 84 /* ClassKeyword */:
                     return parseClassDeclaration(pos, hasJSDoc, decorators, modifiers);
-                case 117 /* InterfaceKeyword */:
+                case 118 /* InterfaceKeyword */:
                     return parseInterfaceDeclaration(pos, hasJSDoc, decorators, modifiers);
-                case 149 /* TypeKeyword */:
+                case 150 /* TypeKeyword */:
                     return parseTypeAliasDeclaration(pos, hasJSDoc, decorators, modifiers);
-                case 91 /* EnumKeyword */:
+                case 92 /* EnumKeyword */:
                     return parseEnumDeclaration(pos, hasJSDoc, decorators, modifiers);
-                case 154 /* GlobalKeyword */:
-                case 139 /* ModuleKeyword */:
-                case 140 /* NamespaceKeyword */:
+                case 155 /* GlobalKeyword */:
+                case 140 /* ModuleKeyword */:
+                case 141 /* NamespaceKeyword */:
                     return parseModuleDeclaration(pos, hasJSDoc, decorators, modifiers);
-                case 99 /* ImportKeyword */:
+                case 100 /* ImportKeyword */:
                     return parseImportDeclarationOrImportEqualsDeclaration(pos, hasJSDoc, decorators, modifiers);
-                case 92 /* ExportKeyword */:
+                case 93 /* ExportKeyword */:
                     nextToken();
                     switch (token()) {
-                        case 87 /* DefaultKeyword */:
-                        case 62 /* EqualsToken */:
+                        case 88 /* DefaultKeyword */:
+                        case 63 /* EqualsToken */:
                             return parseExportAssignment(pos, hasJSDoc, decorators, modifiers);
-                        case 126 /* AsKeyword */:
+                        case 127 /* AsKeyword */:
                             return parseNamespaceExportDeclaration(pos, hasJSDoc, decorators, modifiers);
                         default:
                             return parseExportDeclaration(pos, hasJSDoc, decorators, modifiers);
@@ -34268,7 +35111,7 @@
                     if (decorators || modifiers) {
                         // We reached this point because we encountered decorators and/or modifiers and assumed a declaration
                         // would follow. For recovery and error reporting purposes, return an incomplete declaration.
-                        var missing = createMissingNode(272 /* MissingDeclaration */, /*reportAtCurrentPosition*/ true, ts.Diagnostics.Declaration_expected);
+                        var missing = createMissingNode(274 /* MissingDeclaration */, /*reportAtCurrentPosition*/ true, ts.Diagnostics.Declaration_expected);
                         ts.setTextRangePos(missing, pos);
                         missing.decorators = decorators;
                         missing.modifiers = modifiers;
@@ -34333,7 +35176,7 @@
         function isBindingIdentifierOrPrivateIdentifierOrPattern() {
             return token() === 18 /* OpenBraceToken */
                 || token() === 22 /* OpenBracketToken */
-                || token() === 79 /* PrivateIdentifier */
+                || token() === 80 /* PrivateIdentifier */
                 || isBindingIdentifier();
         }
         function parseIdentifierOrPattern(privateIdentifierDiagnosticMessage) {
@@ -34353,7 +35196,7 @@
             var hasJSDoc = hasPrecedingJSDocComment();
             var name = parseIdentifierOrPattern(ts.Diagnostics.Private_identifiers_are_not_allowed_in_variable_declarations);
             var exclamationToken;
-            if (allowExclamation && name.kind === 78 /* Identifier */ &&
+            if (allowExclamation && name.kind === 79 /* Identifier */ &&
                 token() === 53 /* ExclamationToken */ && !scanner.hasPrecedingLineBreak()) {
                 exclamationToken = parseTokenNode();
             }
@@ -34366,12 +35209,12 @@
             var pos = getNodePos();
             var flags = 0;
             switch (token()) {
-                case 112 /* VarKeyword */:
+                case 113 /* VarKeyword */:
                     break;
-                case 118 /* LetKeyword */:
+                case 119 /* LetKeyword */:
                     flags |= 1 /* Let */;
                     break;
-                case 84 /* ConstKeyword */:
+                case 85 /* ConstKeyword */:
                     flags |= 2 /* Const */;
                     break;
                 default:
@@ -34388,7 +35231,7 @@
             // this context.
             // The checker will then give an error that there is an empty declaration list.
             var declarations;
-            if (token() === 157 /* OfKeyword */ && lookAhead(canFollowContextualOfKeyword)) {
+            if (token() === 158 /* OfKeyword */ && lookAhead(canFollowContextualOfKeyword)) {
                 declarations = createMissingList();
             }
             else {
@@ -34413,7 +35256,7 @@
         function parseFunctionDeclaration(pos, hasJSDoc, decorators, modifiers) {
             var savedAwaitContext = inAwaitContext();
             var modifierFlags = ts.modifiersToFlags(modifiers);
-            parseExpected(97 /* FunctionKeyword */);
+            parseExpected(98 /* FunctionKeyword */);
             var asteriskToken = parseOptionalToken(41 /* AsteriskToken */);
             // We don't parse the name here in await context, instead we will report a grammar error in the checker.
             var name = modifierFlags & 512 /* Default */ ? parseOptionalBindingIdentifier() : parseBindingIdentifier();
@@ -34430,8 +35273,8 @@
             return withJSDoc(finishNode(node, pos), hasJSDoc);
         }
         function parseConstructorName() {
-            if (token() === 132 /* ConstructorKeyword */) {
-                return parseExpected(132 /* ConstructorKeyword */);
+            if (token() === 133 /* ConstructorKeyword */) {
+                return parseExpected(133 /* ConstructorKeyword */);
             }
             if (token() === 10 /* StringLiteral */ && lookAhead(nextToken) === 20 /* OpenParenToken */) {
                 return tryParse(function () {
@@ -34471,7 +35314,7 @@
             var exclamationToken = !questionToken && !scanner.hasPrecedingLineBreak() ? parseOptionalToken(53 /* ExclamationToken */) : undefined;
             var type = parseTypeAnnotation();
             var initializer = doOutsideOfContext(8192 /* YieldContext */ | 32768 /* AwaitContext */ | 4096 /* DisallowInContext */, parseInitializer);
-            parseSemicolon();
+            parseSemicolonAfterPropertyName(name, type, initializer);
             var node = factory.createPropertyDeclaration(decorators, modifiers, name, questionToken || exclamationToken, type, initializer);
             return withJSDoc(finishNode(node, pos), hasJSDoc);
         }
@@ -34492,12 +35335,12 @@
             var parameters = parseParameters(0 /* None */);
             var type = parseReturnType(58 /* ColonToken */, /*isType*/ false);
             var body = parseFunctionBlockOrSemicolon(0 /* None */);
-            var node = kind === 168 /* GetAccessor */
+            var node = kind === 170 /* GetAccessor */
                 ? factory.createGetAccessorDeclaration(decorators, modifiers, name, parameters, type, body)
                 : factory.createSetAccessorDeclaration(decorators, modifiers, name, parameters, body);
             // Keep track of `typeParameters` (for both) and `type` (for setters) if they were parsed those indicate grammar errors
             node.typeParameters = typeParameters;
-            if (type && node.kind === 169 /* SetAccessor */)
+            if (type && node.kind === 171 /* SetAccessor */)
                 node.type = type;
             return withJSDoc(finishNode(node, pos), hasJSDoc);
         }
@@ -34536,7 +35379,7 @@
             // If we were able to get any potential identifier...
             if (idToken !== undefined) {
                 // If we have a non-keyword identifier, or if we have an accessor, then it's safe to parse.
-                if (!ts.isKeyword(idToken) || idToken === 146 /* SetKeyword */ || idToken === 134 /* GetKeyword */) {
+                if (!ts.isKeyword(idToken) || idToken === 147 /* SetKeyword */ || idToken === 135 /* GetKeyword */) {
                     return true;
                 }
                 // If it *is* a keyword, but not an accessor, check a little farther along
@@ -34546,7 +35389,7 @@
                     case 29 /* LessThanToken */: // Generic Method declaration
                     case 53 /* ExclamationToken */: // Non-null assertion on property name
                     case 58 /* ColonToken */: // Type Annotation for declaration
-                    case 62 /* EqualsToken */: // Initializer for declaration
+                    case 63 /* EqualsToken */: // Initializer for declaration
                     case 57 /* QuestionToken */: // Not valid, but permitted so that it gets caught later on.
                         return true;
                     default:
@@ -34560,8 +35403,23 @@
             }
             return false;
         }
+        function parseClassStaticBlockDeclaration(pos, hasJSDoc, decorators, modifiers) {
+            parseExpectedToken(124 /* StaticKeyword */);
+            var body = parseClassStaticBlockBody();
+            return withJSDoc(finishNode(factory.createClassStaticBlockDeclaration(decorators, modifiers, body), pos), hasJSDoc);
+        }
+        function parseClassStaticBlockBody() {
+            var savedYieldContext = inYieldContext();
+            var savedAwaitContext = inAwaitContext();
+            setYieldContext(false);
+            setAwaitContext(true);
+            var body = parseBlock(/*ignoreMissingOpenBrace*/ false);
+            setYieldContext(savedYieldContext);
+            setAwaitContext(savedAwaitContext);
+            return body;
+        }
         function parseDecoratorExpression() {
-            if (inAwaitContext() && token() === 130 /* AwaitKeyword */) {
+            if (inAwaitContext() && token() === 131 /* AwaitKeyword */) {
                 // `@await` is is disallowed in an [Await] context, but can cause parsing to go off the rails
                 // This simply parses the missing identifier and moves on.
                 var pos = getNodePos();
@@ -34588,16 +35446,19 @@
             }
             return list && createNodeArray(list, pos);
         }
-        function tryParseModifier(permitInvalidConstAsModifier) {
+        function tryParseModifier(permitInvalidConstAsModifier, stopOnStartOfClassStaticBlock) {
             var pos = getNodePos();
             var kind = token();
-            if (token() === 84 /* ConstKeyword */ && permitInvalidConstAsModifier) {
+            if (token() === 85 /* ConstKeyword */ && permitInvalidConstAsModifier) {
                 // We need to ensure that any subsequent modifiers appear on the same line
                 // so that when 'const' is a standalone declaration, we don't issue an error.
                 if (!tryParse(nextTokenIsOnSameLineAndCanFollowModifier)) {
                     return undefined;
                 }
             }
+            else if (stopOnStartOfClassStaticBlock && token() === 124 /* StaticKeyword */ && lookAhead(nextTokenIsOpenBrace)) {
+                return undefined;
+            }
             else {
                 if (!parseAnyContextualModifier()) {
                     return undefined;
@@ -34612,20 +35473,20 @@
          *
          * In such situations, 'permitInvalidConstAsModifier' should be set to true.
          */
-        function parseModifiers(permitInvalidConstAsModifier) {
+        function parseModifiers(permitInvalidConstAsModifier, stopOnStartOfClassStaticBlock) {
             var pos = getNodePos();
             var list, modifier;
-            while (modifier = tryParseModifier(permitInvalidConstAsModifier)) {
+            while (modifier = tryParseModifier(permitInvalidConstAsModifier, stopOnStartOfClassStaticBlock)) {
                 list = ts.append(list, modifier);
             }
             return list && createNodeArray(list, pos);
         }
         function parseModifiersForArrowFunction() {
             var modifiers;
-            if (token() === 129 /* AsyncKeyword */) {
+            if (token() === 130 /* AsyncKeyword */) {
                 var pos = getNodePos();
                 nextToken();
-                var modifier = finishNode(factory.createToken(129 /* AsyncKeyword */), pos);
+                var modifier = finishNode(factory.createToken(130 /* AsyncKeyword */), pos);
                 modifiers = createNodeArray([modifier], pos);
             }
             return modifiers;
@@ -34638,14 +35499,17 @@
             }
             var hasJSDoc = hasPrecedingJSDocComment();
             var decorators = parseDecorators();
-            var modifiers = parseModifiers(/*permitInvalidConstAsModifier*/ true);
-            if (parseContextualModifier(134 /* GetKeyword */)) {
-                return parseAccessorDeclaration(pos, hasJSDoc, decorators, modifiers, 168 /* GetAccessor */);
+            var modifiers = parseModifiers(/*permitInvalidConstAsModifier*/ true, /*stopOnStartOfClassStaticBlock*/ true);
+            if (token() === 124 /* StaticKeyword */ && lookAhead(nextTokenIsOpenBrace)) {
+                return parseClassStaticBlockDeclaration(pos, hasJSDoc, decorators, modifiers);
             }
-            if (parseContextualModifier(146 /* SetKeyword */)) {
-                return parseAccessorDeclaration(pos, hasJSDoc, decorators, modifiers, 169 /* SetAccessor */);
+            if (parseContextualModifier(135 /* GetKeyword */)) {
+                return parseAccessorDeclaration(pos, hasJSDoc, decorators, modifiers, 170 /* GetAccessor */);
             }
-            if (token() === 132 /* ConstructorKeyword */ || token() === 10 /* StringLiteral */) {
+            if (parseContextualModifier(147 /* SetKeyword */)) {
+                return parseAccessorDeclaration(pos, hasJSDoc, decorators, modifiers, 171 /* SetAccessor */);
+            }
+            if (token() === 133 /* ConstructorKeyword */ || token() === 10 /* StringLiteral */) {
                 var constructorDeclaration = tryParseConstructorDeclaration(pos, hasJSDoc, decorators, modifiers);
                 if (constructorDeclaration) {
                     return constructorDeclaration;
@@ -34675,21 +35539,21 @@
             }
             if (decorators || modifiers) {
                 // treat this as a property declaration with a missing name.
-                var name = createMissingNode(78 /* Identifier */, /*reportAtCurrentPosition*/ true, ts.Diagnostics.Declaration_expected);
+                var name = createMissingNode(79 /* Identifier */, /*reportAtCurrentPosition*/ true, ts.Diagnostics.Declaration_expected);
                 return parsePropertyDeclaration(pos, hasJSDoc, decorators, modifiers, name, /*questionToken*/ undefined);
             }
             // 'isClassMemberStart' should have hinted not to attempt parsing.
             return ts.Debug.fail("Should not have attempted to parse class member declaration.");
         }
         function parseClassExpression() {
-            return parseClassDeclarationOrExpression(getNodePos(), hasPrecedingJSDocComment(), /*decorators*/ undefined, /*modifiers*/ undefined, 222 /* ClassExpression */);
+            return parseClassDeclarationOrExpression(getNodePos(), hasPrecedingJSDocComment(), /*decorators*/ undefined, /*modifiers*/ undefined, 224 /* ClassExpression */);
         }
         function parseClassDeclaration(pos, hasJSDoc, decorators, modifiers) {
-            return parseClassDeclarationOrExpression(pos, hasJSDoc, decorators, modifiers, 253 /* ClassDeclaration */);
+            return parseClassDeclarationOrExpression(pos, hasJSDoc, decorators, modifiers, 255 /* ClassDeclaration */);
         }
         function parseClassDeclarationOrExpression(pos, hasJSDoc, decorators, modifiers, kind) {
             var savedAwaitContext = inAwaitContext();
-            parseExpected(83 /* ClassKeyword */);
+            parseExpected(84 /* ClassKeyword */);
             // We don't parse the name here in await context, instead we will report a grammar error in the checker.
             var name = parseNameOfClassDeclarationOrExpression();
             var typeParameters = parseTypeParameters();
@@ -34707,7 +35571,7 @@
                 members = createMissingList();
             }
             setAwaitContext(savedAwaitContext);
-            var node = kind === 253 /* ClassDeclaration */
+            var node = kind === 255 /* ClassDeclaration */
                 ? factory.createClassDeclaration(decorators, modifiers, name, typeParameters, heritageClauses, members)
                 : factory.createClassExpression(decorators, modifiers, name, typeParameters, heritageClauses, members);
             return withJSDoc(finishNode(node, pos), hasJSDoc);
@@ -34723,7 +35587,7 @@
                 : undefined;
         }
         function isImplementsClause() {
-            return token() === 116 /* ImplementsKeyword */ && lookAhead(nextTokenIsIdentifierOrKeyword);
+            return token() === 117 /* ImplementsKeyword */ && lookAhead(nextTokenIsIdentifierOrKeyword);
         }
         function parseHeritageClauses() {
             // ClassTail[Yield,Await] : (Modified) See 14.5
@@ -34736,7 +35600,7 @@
         function parseHeritageClause() {
             var pos = getNodePos();
             var tok = token();
-            ts.Debug.assert(tok === 93 /* ExtendsKeyword */ || tok === 116 /* ImplementsKeyword */); // isListElement() should ensure this.
+            ts.Debug.assert(tok === 94 /* ExtendsKeyword */ || tok === 117 /* ImplementsKeyword */); // isListElement() should ensure this.
             nextToken();
             var types = parseDelimitedList(7 /* HeritageClauseElement */, parseExpressionWithTypeArguments);
             return finishNode(factory.createHeritageClause(tok, types), pos);
@@ -34752,13 +35616,13 @@
                 parseBracketedList(20 /* TypeArguments */, parseType, 29 /* LessThanToken */, 31 /* GreaterThanToken */) : undefined;
         }
         function isHeritageClause() {
-            return token() === 93 /* ExtendsKeyword */ || token() === 116 /* ImplementsKeyword */;
+            return token() === 94 /* ExtendsKeyword */ || token() === 117 /* ImplementsKeyword */;
         }
         function parseClassMembers() {
             return parseList(5 /* ClassMembers */, parseClassElement);
         }
         function parseInterfaceDeclaration(pos, hasJSDoc, decorators, modifiers) {
-            parseExpected(117 /* InterfaceKeyword */);
+            parseExpected(118 /* InterfaceKeyword */);
             var name = parseIdentifier();
             var typeParameters = parseTypeParameters();
             var heritageClauses = parseHeritageClauses();
@@ -34767,11 +35631,11 @@
             return withJSDoc(finishNode(node, pos), hasJSDoc);
         }
         function parseTypeAliasDeclaration(pos, hasJSDoc, decorators, modifiers) {
-            parseExpected(149 /* TypeKeyword */);
+            parseExpected(150 /* TypeKeyword */);
             var name = parseIdentifier();
             var typeParameters = parseTypeParameters();
-            parseExpected(62 /* EqualsToken */);
-            var type = token() === 136 /* IntrinsicKeyword */ && tryParse(parseKeywordAndNoDot) || parseType();
+            parseExpected(63 /* EqualsToken */);
+            var type = token() === 137 /* IntrinsicKeyword */ && tryParse(parseKeywordAndNoDot) || parseType();
             parseSemicolon();
             var node = factory.createTypeAliasDeclaration(decorators, modifiers, name, typeParameters, type);
             return withJSDoc(finishNode(node, pos), hasJSDoc);
@@ -34788,7 +35652,7 @@
             return withJSDoc(finishNode(factory.createEnumMember(name, initializer), pos), hasJSDoc);
         }
         function parseEnumDeclaration(pos, hasJSDoc, decorators, modifiers) {
-            parseExpected(91 /* EnumKeyword */);
+            parseExpected(92 /* EnumKeyword */);
             var name = parseIdentifier();
             var members;
             if (parseExpected(18 /* OpenBraceToken */)) {
@@ -34827,7 +35691,7 @@
         function parseAmbientExternalModuleDeclaration(pos, hasJSDoc, decorators, modifiers) {
             var flags = 0;
             var name;
-            if (token() === 154 /* GlobalKeyword */) {
+            if (token() === 155 /* GlobalKeyword */) {
                 // parse 'global' as name of global scope augmentation
                 name = parseIdentifier();
                 flags |= 1024 /* GlobalAugmentation */;
@@ -34848,15 +35712,15 @@
         }
         function parseModuleDeclaration(pos, hasJSDoc, decorators, modifiers) {
             var flags = 0;
-            if (token() === 154 /* GlobalKeyword */) {
+            if (token() === 155 /* GlobalKeyword */) {
                 // global augmentation
                 return parseAmbientExternalModuleDeclaration(pos, hasJSDoc, decorators, modifiers);
             }
-            else if (parseOptional(140 /* NamespaceKeyword */)) {
+            else if (parseOptional(141 /* NamespaceKeyword */)) {
                 flags |= 16 /* Namespace */;
             }
             else {
-                parseExpected(139 /* ModuleKeyword */);
+                parseExpected(140 /* ModuleKeyword */);
                 if (token() === 10 /* StringLiteral */) {
                     return parseAmbientExternalModuleDeclaration(pos, hasJSDoc, decorators, modifiers);
                 }
@@ -34864,18 +35728,21 @@
             return parseModuleOrNamespaceDeclaration(pos, hasJSDoc, decorators, modifiers, flags);
         }
         function isExternalModuleReference() {
-            return token() === 143 /* RequireKeyword */ &&
+            return token() === 144 /* RequireKeyword */ &&
                 lookAhead(nextTokenIsOpenParen);
         }
         function nextTokenIsOpenParen() {
             return nextToken() === 20 /* OpenParenToken */;
         }
+        function nextTokenIsOpenBrace() {
+            return nextToken() === 18 /* OpenBraceToken */;
+        }
         function nextTokenIsSlash() {
             return nextToken() === 43 /* SlashToken */;
         }
         function parseNamespaceExportDeclaration(pos, hasJSDoc, decorators, modifiers) {
-            parseExpected(126 /* AsKeyword */);
-            parseExpected(140 /* NamespaceKeyword */);
+            parseExpected(127 /* AsKeyword */);
+            parseExpected(141 /* NamespaceKeyword */);
             var name = parseIdentifier();
             parseSemicolon();
             var node = factory.createNamespaceExportDeclaration(name);
@@ -34885,7 +35752,7 @@
             return withJSDoc(finishNode(node, pos), hasJSDoc);
         }
         function parseImportDeclarationOrImportEqualsDeclaration(pos, hasJSDoc, decorators, modifiers) {
-            parseExpected(99 /* ImportKeyword */);
+            parseExpected(100 /* ImportKeyword */);
             var afterImportPos = scanner.getStartPos();
             // We don't parse the identifier here in await context, instead we will report a grammar error in the checker.
             var identifier;
@@ -34893,7 +35760,7 @@
                 identifier = parseIdentifier();
             }
             var isTypeOnly = false;
-            if (token() !== 153 /* FromKeyword */ &&
+            if (token() !== 154 /* FromKeyword */ &&
                 (identifier === null || identifier === void 0 ? void 0 : identifier.escapedText) === "type" &&
                 (isIdentifier() || tokenAfterImportDefinitelyProducesImportDeclaration())) {
                 isTypeOnly = true;
@@ -34911,7 +35778,7 @@
                 token() === 18 /* OpenBraceToken */ // import {
             ) {
                 importClause = parseImportClause(identifier, afterImportPos, isTypeOnly);
-                parseExpected(153 /* FromKeyword */);
+                parseExpected(154 /* FromKeyword */);
             }
             var moduleSpecifier = parseModuleSpecifier();
             parseSemicolon();
@@ -34924,10 +35791,10 @@
         function tokenAfterImportedIdentifierDefinitelyProducesImportDeclaration() {
             // In `import id ___`, the current token decides whether to produce
             // an ImportDeclaration or ImportEqualsDeclaration.
-            return token() === 27 /* CommaToken */ || token() === 153 /* FromKeyword */;
+            return token() === 27 /* CommaToken */ || token() === 154 /* FromKeyword */;
         }
         function parseImportEqualsDeclaration(pos, hasJSDoc, decorators, modifiers, identifier, isTypeOnly) {
-            parseExpected(62 /* EqualsToken */);
+            parseExpected(63 /* EqualsToken */);
             var moduleReference = parseModuleReference();
             parseSemicolon();
             var node = factory.createImportEqualsDeclaration(decorators, modifiers, isTypeOnly, identifier, moduleReference);
@@ -34946,7 +35813,7 @@
             var namedBindings;
             if (!identifier ||
                 parseOptional(27 /* CommaToken */)) {
-                namedBindings = token() === 41 /* AsteriskToken */ ? parseNamespaceImport() : parseNamedImportsOrExports(265 /* NamedImports */);
+                namedBindings = token() === 41 /* AsteriskToken */ ? parseNamespaceImport() : parseNamedImportsOrExports(267 /* NamedImports */);
             }
             return finishNode(factory.createImportClause(isTypeOnly, identifier, namedBindings), pos);
         }
@@ -34957,7 +35824,7 @@
         }
         function parseExternalModuleReference() {
             var pos = getNodePos();
-            parseExpected(143 /* RequireKeyword */);
+            parseExpected(144 /* RequireKeyword */);
             parseExpected(20 /* OpenParenToken */);
             var expression = parseModuleSpecifier();
             parseExpected(21 /* CloseParenToken */);
@@ -34981,7 +35848,7 @@
             //  * as ImportedBinding
             var pos = getNodePos();
             parseExpected(41 /* AsteriskToken */);
-            parseExpected(126 /* AsKeyword */);
+            parseExpected(127 /* AsKeyword */);
             var name = parseIdentifier();
             return finishNode(factory.createNamespaceImport(name), pos);
         }
@@ -34994,16 +35861,16 @@
             // ImportsList:
             //  ImportSpecifier
             //  ImportsList, ImportSpecifier
-            var node = kind === 265 /* NamedImports */
+            var node = kind === 267 /* NamedImports */
                 ? factory.createNamedImports(parseBracketedList(23 /* ImportOrExportSpecifiers */, parseImportSpecifier, 18 /* OpenBraceToken */, 19 /* CloseBraceToken */))
                 : factory.createNamedExports(parseBracketedList(23 /* ImportOrExportSpecifiers */, parseExportSpecifier, 18 /* OpenBraceToken */, 19 /* CloseBraceToken */));
             return finishNode(node, pos);
         }
         function parseExportSpecifier() {
-            return parseImportOrExportSpecifier(271 /* ExportSpecifier */);
+            return parseImportOrExportSpecifier(273 /* ExportSpecifier */);
         }
         function parseImportSpecifier() {
-            return parseImportOrExportSpecifier(266 /* ImportSpecifier */);
+            return parseImportOrExportSpecifier(268 /* ImportSpecifier */);
         }
         function parseImportOrExportSpecifier(kind) {
             var pos = getNodePos();
@@ -35019,9 +35886,9 @@
             var identifierName = parseIdentifierName();
             var propertyName;
             var name;
-            if (token() === 126 /* AsKeyword */) {
+            if (token() === 127 /* AsKeyword */) {
                 propertyName = identifierName;
-                parseExpected(126 /* AsKeyword */);
+                parseExpected(127 /* AsKeyword */);
                 checkIdentifierIsKeyword = ts.isKeyword(token()) && !isIdentifier();
                 checkIdentifierStart = scanner.getTokenPos();
                 checkIdentifierEnd = scanner.getTextPos();
@@ -35030,10 +35897,10 @@
             else {
                 name = identifierName;
             }
-            if (kind === 266 /* ImportSpecifier */ && checkIdentifierIsKeyword) {
+            if (kind === 268 /* ImportSpecifier */ && checkIdentifierIsKeyword) {
                 parseErrorAt(checkIdentifierStart, checkIdentifierEnd, ts.Diagnostics.Identifier_expected);
             }
-            var node = kind === 266 /* ImportSpecifier */
+            var node = kind === 268 /* ImportSpecifier */
                 ? factory.createImportSpecifier(propertyName, name)
                 : factory.createExportSpecifier(propertyName, name);
             return finishNode(node, pos);
@@ -35046,22 +35913,22 @@
             setAwaitContext(/*value*/ true);
             var exportClause;
             var moduleSpecifier;
-            var isTypeOnly = parseOptional(149 /* TypeKeyword */);
+            var isTypeOnly = parseOptional(150 /* TypeKeyword */);
             var namespaceExportPos = getNodePos();
             if (parseOptional(41 /* AsteriskToken */)) {
-                if (parseOptional(126 /* AsKeyword */)) {
+                if (parseOptional(127 /* AsKeyword */)) {
                     exportClause = parseNamespaceExport(namespaceExportPos);
                 }
-                parseExpected(153 /* FromKeyword */);
+                parseExpected(154 /* FromKeyword */);
                 moduleSpecifier = parseModuleSpecifier();
             }
             else {
-                exportClause = parseNamedImportsOrExports(269 /* NamedExports */);
+                exportClause = parseNamedImportsOrExports(271 /* NamedExports */);
                 // It is not uncommon to accidentally omit the 'from' keyword. Additionally, in editing scenarios,
                 // the 'from' keyword can be parsed as a named export when the export clause is unterminated (i.e. `export { from "moduleName";`)
                 // If we don't have a 'from' keyword, see if we have a string literal such that ASI won't take effect.
-                if (token() === 153 /* FromKeyword */ || (token() === 10 /* StringLiteral */ && !scanner.hasPrecedingLineBreak())) {
-                    parseExpected(153 /* FromKeyword */);
+                if (token() === 154 /* FromKeyword */ || (token() === 10 /* StringLiteral */ && !scanner.hasPrecedingLineBreak())) {
+                    parseExpected(154 /* FromKeyword */);
                     moduleSpecifier = parseModuleSpecifier();
                 }
             }
@@ -35074,11 +35941,11 @@
             var savedAwaitContext = inAwaitContext();
             setAwaitContext(/*value*/ true);
             var isExportEquals;
-            if (parseOptional(62 /* EqualsToken */)) {
+            if (parseOptional(63 /* EqualsToken */)) {
                 isExportEquals = true;
             }
             else {
-                parseExpected(87 /* DefaultKeyword */);
+                parseExpected(88 /* DefaultKeyword */);
             }
             var expression = parseAssignmentExpressionOrHigher();
             parseSemicolon();
@@ -35094,7 +35961,7 @@
                     getImportMetaIfNecessary(sourceFile);
         }
         function isAnExternalModuleIndicatorNode(node) {
-            return hasModifierOfKind(node, 92 /* ExportKeyword */)
+            return hasModifierOfKind(node, 93 /* ExportKeyword */)
                 || ts.isImportEqualsDeclaration(node) && ts.isExternalModuleReference(node.moduleReference)
                 || ts.isImportDeclaration(node)
                 || ts.isExportAssignment(node)
@@ -35113,7 +35980,7 @@
             return ts.some(node.modifiers, function (m) { return m.kind === kind; });
         }
         function isImportMeta(node) {
-            return ts.isMetaProperty(node) && node.keywordToken === 99 /* ImportKeyword */ && node.name.escapedText === "meta";
+            return ts.isMetaProperty(node) && node.keywordToken === 100 /* ImportKeyword */ && node.name.escapedText === "meta";
         }
         var ParsingContext;
         (function (ParsingContext) {
@@ -35181,7 +36048,13 @@
             function parseJSDocNameReference() {
                 var pos = getNodePos();
                 var hasBrace = parseOptional(18 /* OpenBraceToken */);
+                var p2 = getNodePos();
                 var entityName = parseEntityName(/* allowReservedWords*/ false);
+                while (token() === 80 /* PrivateIdentifier */) {
+                    reScanHashToken(); // rescan #id as # id
+                    nextTokenJSDoc(); // then skip the #
+                    entityName = finishNode(factory.createJSDocMemberName(entityName, parseIdentifier()), p2);
+                }
                 if (hasBrace) {
                     parseExpectedJSDoc(19 /* CloseBraceToken */);
                 }
@@ -35610,28 +36483,44 @@
                     return next === 5 /* WhitespaceTrivia */ || next === 4 /* NewLineTrivia */;
                 }
                 function parseJSDocLink(start) {
-                    if (!tryParse(parseJSDocLinkPrefix)) {
+                    var linkType = tryParse(parseJSDocLinkPrefix);
+                    if (!linkType) {
                         return undefined;
                     }
                     nextTokenJSDoc(); // start at token after link, then skip any whitespace
                     skipWhitespace();
                     // parseEntityName logs an error for non-identifier, so create a MissingNode ourselves to avoid the error
+                    var p2 = getNodePos();
                     var name = ts.tokenIsIdentifierOrKeyword(token())
                         ? parseEntityName(/*allowReservedWords*/ true)
                         : undefined;
+                    if (name) {
+                        while (token() === 80 /* PrivateIdentifier */) {
+                            reScanHashToken(); // rescan #id as # id
+                            nextTokenJSDoc(); // then skip the #
+                            name = finishNode(factory.createJSDocMemberName(name, parseIdentifier()), p2);
+                        }
+                    }
                     var text = [];
                     while (token() !== 19 /* CloseBraceToken */ && token() !== 4 /* NewLineTrivia */ && token() !== 1 /* EndOfFileToken */) {
                         text.push(scanner.getTokenText());
                         nextTokenJSDoc();
                     }
-                    return finishNode(factory.createJSDocLink(name, text.join("")), start, scanner.getTextPos());
+                    var create = linkType === "link" ? factory.createJSDocLink
+                        : linkType === "linkcode" ? factory.createJSDocLinkCode
+                            : factory.createJSDocLinkPlain;
+                    return finishNode(create(name, text.join("")), start, scanner.getTextPos());
                 }
                 function parseJSDocLinkPrefix() {
                     skipWhitespaceOrAsterisk();
-                    return token() === 18 /* OpenBraceToken */
+                    if (token() === 18 /* OpenBraceToken */
                         && nextTokenJSDoc() === 59 /* AtToken */
-                        && ts.tokenIsIdentifierOrKeyword(nextTokenJSDoc())
-                        && scanner.getTokenValue() === "link";
+                        && ts.tokenIsIdentifierOrKeyword(nextTokenJSDoc())) {
+                        var kind = scanner.getTokenValue();
+                        if (kind === "link" || kind === "linkcode" || kind === "linkplain") {
+                            return kind;
+                        }
+                    }
                 }
                 function parseUnknownTag(start, tagName, indent, indentText) {
                     return finishNode(factory.createJSDocUnknownTag(tagName, parseTrailingTagComments(start, getNodePos(), indent, indentText)), start);
@@ -35668,7 +36557,7 @@
                     if (isBracketed) {
                         skipWhitespace();
                         // May have an optional default, e.g. '[foo = 42]'
-                        if (parseOptionalToken(62 /* EqualsToken */)) {
+                        if (parseOptionalToken(63 /* EqualsToken */)) {
                             parseExpression();
                         }
                         parseExpected(23 /* CloseBracketToken */);
@@ -35677,9 +36566,9 @@
                 }
                 function isObjectOrObjectArrayTypeReference(node) {
                     switch (node.kind) {
-                        case 145 /* ObjectKeyword */:
+                        case 146 /* ObjectKeyword */:
                             return true;
-                        case 179 /* ArrayType */:
+                        case 181 /* ArrayType */:
                             return isObjectOrObjectArrayTypeReference(node.elementType);
                         default:
                             return ts.isTypeReferenceNode(node) && ts.isIdentifier(node.typeName) && node.typeName.escapedText === "Object" && !node.typeArguments;
@@ -35711,12 +36600,12 @@
                         var child = void 0;
                         var children = void 0;
                         while (child = tryParse(function () { return parseChildParameterOrPropertyTag(target, indent, name); })) {
-                            if (child.kind === 330 /* JSDocParameterTag */ || child.kind === 337 /* JSDocPropertyTag */) {
+                            if (child.kind === 335 /* JSDocParameterTag */ || child.kind === 342 /* JSDocPropertyTag */) {
                                 children = ts.append(children, child);
                             }
                         }
                         if (children) {
-                            var literal = finishNode(factory.createJSDocTypeLiteral(children, typeExpression.type.kind === 179 /* ArrayType */), pos);
+                            var literal = finishNode(factory.createJSDocTypeLiteral(children, typeExpression.type.kind === 181 /* ArrayType */), pos);
                             return finishNode(factory.createJSDocTypeExpression(literal), pos);
                         }
                     }
@@ -35833,7 +36722,7 @@
                         var hasChildren = false;
                         while (child = tryParse(function () { return parseChildPropertyTag(indent); })) {
                             hasChildren = true;
-                            if (child.kind === 333 /* JSDocTypeTag */) {
+                            if (child.kind === 338 /* JSDocTypeTag */) {
                                 if (childTypeTag) {
                                     parseErrorAtCurrentToken(ts.Diagnostics.A_JSDoc_typedef_comment_may_not_contain_multiple_type_tags);
                                     var lastError = ts.lastOrUndefined(parseDiagnostics);
@@ -35851,7 +36740,7 @@
                             }
                         }
                         if (hasChildren) {
-                            var isArrayType = typeExpression && typeExpression.type.kind === 179 /* ArrayType */;
+                            var isArrayType = typeExpression && typeExpression.type.kind === 181 /* ArrayType */;
                             var jsdocTypeLiteral = factory.createJSDocTypeLiteral(jsDocPropertyTags, isArrayType);
                             typeExpression = childTypeTag && childTypeTag.typeExpression && !isObjectOrObjectArrayTypeReference(childTypeTag.typeExpression.type) ?
                                 childTypeTag.typeExpression :
@@ -35904,7 +36793,7 @@
                     var returnTag = tryParse(function () {
                         if (parseOptionalJsdoc(59 /* AtToken */)) {
                             var tag = parseTag(indent);
-                            if (tag && tag.kind === 331 /* JSDocReturnTag */) {
+                            if (tag && tag.kind === 336 /* JSDocReturnTag */) {
                                 return tag;
                             }
                         }
@@ -35938,7 +36827,7 @@
                             case 59 /* AtToken */:
                                 if (canParseTag) {
                                     var child = tryParseChildTag(target, indent);
-                                    if (child && (child.kind === 330 /* JSDocParameterTag */ || child.kind === 337 /* JSDocPropertyTag */) &&
+                                    if (child && (child.kind === 335 /* JSDocParameterTag */ || child.kind === 342 /* JSDocPropertyTag */) &&
                                         target !== 4 /* CallbackParameter */ &&
                                         name && (ts.isIdentifier(child.name) || !escapedTextsEqual(name, child.name.left))) {
                                         return false;
@@ -35957,7 +36846,7 @@
                                 }
                                 seenAsterisk = true;
                                 break;
-                            case 78 /* Identifier */:
+                            case 79 /* Identifier */:
                                 canParseTag = false;
                                 break;
                             case 1 /* EndOfFileToken */:
@@ -36055,7 +36944,7 @@
                 }
                 function parseJSDocIdentifierName(message) {
                     if (!ts.tokenIsIdentifierOrKeyword(token())) {
-                        return createMissingNode(78 /* Identifier */, /*reportAtCurrentPosition*/ !message, message || ts.Diagnostics.Identifier_expected);
+                        return createMissingNode(79 /* Identifier */, /*reportAtCurrentPosition*/ !message, message || ts.Diagnostics.Identifier_expected);
                     }
                     identifierCount++;
                     var pos = scanner.getTokenPos();
@@ -36218,8 +37107,8 @@
             function visitArray(array) {
                 array._children = undefined;
                 ts.setTextRangePosEnd(array, array.pos + delta, array.end + delta);
-                for (var _i = 0, array_8 = array; _i < array_8.length; _i++) {
-                    var node = array_8[_i];
+                for (var _i = 0, array_9 = array; _i < array_9.length; _i++) {
+                    var node = array_9[_i];
                     visitNode(node);
                 }
             }
@@ -36228,7 +37117,7 @@
             switch (node.kind) {
                 case 10 /* StringLiteral */:
                 case 8 /* NumericLiteral */:
-                case 78 /* Identifier */:
+                case 79 /* Identifier */:
                     return true;
             }
             return false;
@@ -36367,8 +37256,8 @@
                     array._children = undefined;
                     // Adjust the pos or end (or both) of the intersecting array accordingly.
                     adjustIntersectingElement(array, changeStart, changeRangeOldEnd, changeRangeNewEnd, delta);
-                    for (var _i = 0, array_9 = array; _i < array_9.length; _i++) {
-                        var node = array_9[_i];
+                    for (var _i = 0, array_10 = array; _i < array_10.length; _i++) {
+                        var node = array_10[_i];
                         visitNode(node);
                     }
                     return;
@@ -36702,7 +37591,7 @@
         if (namedArgRegExCache.has(name)) {
             return namedArgRegExCache.get(name);
         }
-        var result = new RegExp("(\\s" + name + "\\s*=\\s*)('|\")(.+?)\\2", "im");
+        var result = new RegExp("(\\s" + name + "\\s*=\\s*)(?:(?:'([^']*)')|(?:\"([^\"]*)\"))", "im");
         namedArgRegExCache.set(name, result);
         return result;
     }
@@ -36726,16 +37615,17 @@
                         return; // Missing required argument, don't parse
                     }
                     else if (matchResult) {
+                        var value = matchResult[2] || matchResult[3];
                         if (arg.captureSpan) {
-                            var startPos = range.pos + matchResult.index + matchResult[1].length + matchResult[2].length;
+                            var startPos = range.pos + matchResult.index + matchResult[1].length + 1;
                             argument[arg.name] = {
-                                value: matchResult[3],
+                                value: value,
                                 pos: startPos,
-                                end: startPos + matchResult[3].length
+                                end: startPos + value.length
                             };
                         }
                         else {
-                            argument[arg.name] = matchResult[3];
+                            argument[arg.name] = value;
                         }
                     }
                 }
@@ -36751,7 +37641,7 @@
             return addPragmaForMatch(pragmas, range, 2 /* SingleLine */, singleLine);
         }
         if (range.kind === 3 /* MultiLineCommentTrivia */) {
-            var multiLinePragmaRegEx = /\s*@(\S+)\s*(.*)\s*$/gim; // Defined inline since it uses the "g" flag, which keeps a persistent index (for iterating)
+            var multiLinePragmaRegEx = /@(\S+)(\s+.*)?$/gim; // Defined inline since it uses the "g" flag, which keeps a persistent index (for iterating)
             var multiLineMatch = void 0;
             while (multiLineMatch = multiLinePragmaRegEx.exec(text)) {
                 addPragmaForMatch(pragmas, range, 4 /* MultiLine */, multiLineMatch);
@@ -36778,7 +37668,7 @@
             return {};
         if (!pragma.args)
             return {};
-        var args = text.split(/\s+/);
+        var args = ts.trimString(text).split(/\s+/);
         var argMap = {};
         for (var i = 0; i < pragma.args.length; i++) {
             var argument = pragma.args[i];
@@ -36797,10 +37687,10 @@
         if (lhs.kind !== rhs.kind) {
             return false;
         }
-        if (lhs.kind === 78 /* Identifier */) {
+        if (lhs.kind === 79 /* Identifier */) {
             return lhs.escapedText === rhs.escapedText;
         }
-        if (lhs.kind === 107 /* ThisKeyword */) {
+        if (lhs.kind === 108 /* ThisKeyword */) {
             return true;
         }
         // If we are at this statement then we must have PropertyAccessExpression and because tag name in Jsx element can only
@@ -36920,8 +37810,8 @@
                 usefsevents: ts.WatchFileKind.UseFsEvents,
                 usefseventsonparentdirectory: ts.WatchFileKind.UseFsEventsOnParentDirectory,
             })),
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Specify_strategy_for_watching_file_Colon_FixedPollingInterval_default_PriorityPollingInterval_DynamicPriorityPolling_FixedChunkSizePolling_UseFsEvents_UseFsEventsOnParentDirectory,
+            category: ts.Diagnostics.Watch_and_Build_Modes,
+            description: ts.Diagnostics.Specify_how_the_TypeScript_watch_mode_works,
         },
         {
             name: "watchDirectory",
@@ -36931,8 +37821,8 @@
                 dynamicprioritypolling: ts.WatchDirectoryKind.DynamicPriorityPolling,
                 fixedchunksizepolling: ts.WatchDirectoryKind.FixedChunkSizePolling,
             })),
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Specify_strategy_for_watching_directory_on_platforms_that_don_t_support_recursive_watching_natively_Colon_UseFsEvents_default_FixedPollingInterval_DynamicPriorityPolling_FixedChunkSizePolling,
+            category: ts.Diagnostics.Watch_and_Build_Modes,
+            description: ts.Diagnostics.Specify_how_directories_are_watched_on_systems_that_lack_recursive_file_watching_functionality,
         },
         {
             name: "fallbackPolling",
@@ -36942,13 +37832,13 @@
                 dynamicpriority: ts.PollingWatchKind.DynamicPriority,
                 fixedchunksize: ts.PollingWatchKind.FixedChunkSize,
             })),
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Specify_strategy_for_creating_a_polling_watch_when_it_fails_to_create_using_file_system_events_Colon_FixedInterval_default_PriorityInterval_DynamicPriority_FixedChunkSize,
+            category: ts.Diagnostics.Watch_and_Build_Modes,
+            description: ts.Diagnostics.Specify_what_approach_the_watcher_should_use_if_the_system_runs_out_of_native_file_watchers,
         },
         {
             name: "synchronousWatchDirectory",
             type: "boolean",
-            category: ts.Diagnostics.Advanced_Options,
+            category: ts.Diagnostics.Watch_and_Build_Modes,
             description: ts.Diagnostics.Synchronously_call_callbacks_and_update_the_state_of_directory_watchers_on_platforms_that_don_t_support_recursive_watching_natively,
         },
         {
@@ -36960,8 +37850,8 @@
                 isFilePath: true,
                 extraValidation: specToDiagnostic
             },
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Synchronously_call_callbacks_and_update_the_state_of_directory_watchers_on_platforms_that_don_t_support_recursive_watching_natively,
+            category: ts.Diagnostics.Watch_and_Build_Modes,
+            description: ts.Diagnostics.Remove_a_list_of_directories_from_the_watch_process,
         },
         {
             name: "excludeFiles",
@@ -36972,8 +37862,8 @@
                 isFilePath: true,
                 extraValidation: specToDiagnostic
             },
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Synchronously_call_callbacks_and_update_the_state_of_directory_watchers_on_platforms_that_don_t_support_recursive_watching_natively,
+            category: ts.Diagnostics.Watch_and_Build_Modes,
+            description: ts.Diagnostics.Remove_a_list_of_files_from_the_watch_mode_s_processing,
         },
     ];
     /* @internal */
@@ -36996,6 +37886,7 @@
             shortName: "w",
             type: "boolean",
             showInSimplifiedHelpView: true,
+            isCommandLineOnly: true,
             category: ts.Diagnostics.Command_line_Options,
             description: ts.Diagnostics.Watch_input_files,
         },
@@ -37003,58 +37894,67 @@
             name: "preserveWatchOutput",
             type: "boolean",
             showInSimplifiedHelpView: false,
-            category: ts.Diagnostics.Command_line_Options,
-            description: ts.Diagnostics.Whether_to_keep_outdated_console_output_in_watch_mode_instead_of_clearing_the_screen,
+            category: ts.Diagnostics.Output_Formatting,
+            description: ts.Diagnostics.Disable_wiping_the_console_in_watch_mode,
+            defaultValueDescription: "n/a"
         },
         {
             name: "listFiles",
             type: "boolean",
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Print_names_of_files_part_of_the_compilation
+            category: ts.Diagnostics.Compiler_Diagnostics,
+            description: ts.Diagnostics.Print_all_of_the_files_read_during_the_compilation,
+            defaultValueDescription: "false"
         },
         {
             name: "explainFiles",
             type: "boolean",
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Print_names_of_files_and_the_reason_they_are_part_of_the_compilation
-        }, {
+            category: ts.Diagnostics.Compiler_Diagnostics,
+            description: ts.Diagnostics.Print_files_read_during_the_compilation_including_why_it_was_included
+        },
+        {
             name: "listEmittedFiles",
             type: "boolean",
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Print_names_of_generated_files_part_of_the_compilation
+            category: ts.Diagnostics.Compiler_Diagnostics,
+            description: ts.Diagnostics.Print_the_names_of_emitted_files_after_a_compilation,
+            defaultValueDescription: "false"
         },
         {
             name: "pretty",
             type: "boolean",
             showInSimplifiedHelpView: true,
-            category: ts.Diagnostics.Command_line_Options,
-            description: ts.Diagnostics.Stylize_errors_and_messages_using_color_and_context_experimental
+            category: ts.Diagnostics.Output_Formatting,
+            description: ts.Diagnostics.Enable_color_and_formatting_in_TypeScript_s_output_to_make_compiler_errors_easier_to_read,
+            defaultValueDescription: "true"
         },
         {
             name: "traceResolution",
             type: "boolean",
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Enable_tracing_of_the_name_resolution_process
+            category: ts.Diagnostics.Compiler_Diagnostics,
+            description: ts.Diagnostics.Log_paths_used_during_the_moduleResolution_process,
+            defaultValueDescription: "false"
         },
         {
             name: "diagnostics",
             type: "boolean",
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Show_diagnostic_information
+            category: ts.Diagnostics.Compiler_Diagnostics,
+            description: ts.Diagnostics.Output_compiler_performance_information_after_building,
+            defaultValueDescription: "false"
         },
         {
             name: "extendedDiagnostics",
             type: "boolean",
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Show_verbose_diagnostic_information
+            category: ts.Diagnostics.Compiler_Diagnostics,
+            description: ts.Diagnostics.Output_more_detailed_compiler_performance_information_after_building,
+            defaultValueDescription: "false"
         },
         {
             name: "generateCpuProfile",
             type: "string",
             isFilePath: true,
             paramType: ts.Diagnostics.FILE_OR_DIRECTORY,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Generates_a_CPU_profile
+            category: ts.Diagnostics.Compiler_Diagnostics,
+            description: ts.Diagnostics.Emit_a_v8_CPU_profile_of_the_compiler_run_for_debugging,
+            defaultValueDescription: "profile.cpuprofile"
         },
         {
             name: "generateTrace",
@@ -37062,30 +37962,33 @@
             isFilePath: true,
             isCommandLineOnly: true,
             paramType: ts.Diagnostics.DIRECTORY,
-            category: ts.Diagnostics.Advanced_Options,
+            category: ts.Diagnostics.Compiler_Diagnostics,
             description: ts.Diagnostics.Generates_an_event_trace_and_a_list_of_types
         },
         {
             name: "incremental",
             shortName: "i",
             type: "boolean",
-            category: ts.Diagnostics.Basic_Options,
+            category: ts.Diagnostics.Projects,
             description: ts.Diagnostics.Enable_incremental_compilation,
-            transpileOptionValue: undefined
+            transpileOptionValue: undefined,
+            defaultValueDescription: ts.Diagnostics.false_unless_composite_is_set
         },
         {
             name: "assumeChangesOnlyAffectDirectDependencies",
             type: "boolean",
             affectsSemanticDiagnostics: true,
             affectsEmit: true,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Have_recompiles_in_incremental_and_watch_assume_that_changes_within_a_file_will_only_affect_files_directly_depending_on_it
+            category: ts.Diagnostics.Watch_and_Build_Modes,
+            description: ts.Diagnostics.Have_recompiles_in_projects_that_use_incremental_and_watch_mode_assume_that_changes_within_a_file_will_only_affect_files_directly_depending_on_it
         },
         {
             name: "locale",
             type: "string",
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.The_locale_used_when_displaying_messages_to_the_user_e_g_en_us
+            category: ts.Diagnostics.Command_line_Options,
+            isCommandLineOnly: true,
+            description: ts.Diagnostics.Set_the_language_of_the_messaging_from_TypeScript_This_does_not_affect_emit,
+            defaultValueDescription: ts.Diagnostics.Platform_specific
         },
     ];
     /* @internal */
@@ -37110,8 +38013,9 @@
         affectsEmit: true,
         paramType: ts.Diagnostics.VERSION,
         showInSimplifiedHelpView: true,
-        category: ts.Diagnostics.Basic_Options,
-        description: ts.Diagnostics.Specify_ECMAScript_target_version_Colon_ES3_default_ES5_ES2015_ES2016_ES2017_ES2018_ES2019_ES2020_ES2021_or_ESNEXT,
+        category: ts.Diagnostics.Language_and_Environment,
+        description: ts.Diagnostics.Set_the_JavaScript_language_version_for_emitted_JavaScript_and_include_compatible_library_declarations,
+        defaultValueDescription: "ES3"
     };
     var commandOptionsWithoutBuild = [
         // CommandLine only options
@@ -37158,6 +38062,7 @@
         {
             name: "showConfig",
             type: "boolean",
+            showInSimplifiedHelpView: true,
             category: ts.Diagnostics.Command_line_Options,
             isCommandLineOnly: true,
             description: ts.Diagnostics.Print_the_final_configuration_instead_of_building
@@ -37191,8 +38096,8 @@
             affectsEmit: true,
             paramType: ts.Diagnostics.KIND,
             showInSimplifiedHelpView: true,
-            category: ts.Diagnostics.Basic_Options,
-            description: ts.Diagnostics.Specify_module_code_generation_Colon_none_commonjs_amd_system_umd_es2015_es2020_or_ESNext,
+            category: ts.Diagnostics.Modules,
+            description: ts.Diagnostics.Specify_what_module_code_is_generated,
         },
         {
             name: "lib",
@@ -37201,10 +38106,10 @@
                 name: "lib",
                 type: ts.libMap
             },
-            affectsModuleResolution: true,
+            affectsProgramStructure: true,
             showInSimplifiedHelpView: true,
-            category: ts.Diagnostics.Basic_Options,
-            description: ts.Diagnostics.Specify_library_files_to_be_included_in_the_compilation,
+            category: ts.Diagnostics.Language_and_Environment,
+            description: ts.Diagnostics.Specify_a_set_of_bundled_library_declaration_files_that_describe_the_target_runtime_environment,
             transpileOptionValue: undefined
         },
         {
@@ -37212,14 +38117,17 @@
             type: "boolean",
             affectsModuleResolution: true,
             showInSimplifiedHelpView: true,
-            category: ts.Diagnostics.Basic_Options,
-            description: ts.Diagnostics.Allow_javascript_files_to_be_compiled
+            category: ts.Diagnostics.JavaScript_Support,
+            description: ts.Diagnostics.Allow_JavaScript_files_to_be_a_part_of_your_program_Use_the_checkJS_option_to_get_errors_from_these_files,
+            defaultValueDescription: "false"
         },
         {
             name: "checkJs",
             type: "boolean",
-            category: ts.Diagnostics.Basic_Options,
-            description: ts.Diagnostics.Report_errors_in_js_files
+            showInSimplifiedHelpView: true,
+            category: ts.Diagnostics.JavaScript_Support,
+            description: ts.Diagnostics.Enable_error_reporting_in_type_checked_JavaScript_files,
+            defaultValueDescription: "false"
         },
         {
             name: "jsx",
@@ -37229,8 +38137,9 @@
             affectsModuleResolution: true,
             paramType: ts.Diagnostics.KIND,
             showInSimplifiedHelpView: true,
-            category: ts.Diagnostics.Basic_Options,
-            description: ts.Diagnostics.Specify_JSX_code_generation_Colon_preserve_react_native_react_react_jsx_or_react_jsxdev,
+            category: ts.Diagnostics.Language_and_Environment,
+            description: ts.Diagnostics.Specify_what_JSX_code_is_generated,
+            defaultValueDescription: "undefined"
         },
         {
             name: "declaration",
@@ -37238,34 +38147,39 @@
             type: "boolean",
             affectsEmit: true,
             showInSimplifiedHelpView: true,
-            category: ts.Diagnostics.Basic_Options,
-            description: ts.Diagnostics.Generates_corresponding_d_ts_file,
-            transpileOptionValue: undefined
+            category: ts.Diagnostics.Emit,
+            transpileOptionValue: undefined,
+            description: ts.Diagnostics.Generate_d_ts_files_from_TypeScript_and_JavaScript_files_in_your_project,
+            defaultValueDescription: ts.Diagnostics.false_unless_composite_is_set,
         },
         {
             name: "declarationMap",
             type: "boolean",
             affectsEmit: true,
             showInSimplifiedHelpView: true,
-            category: ts.Diagnostics.Basic_Options,
-            description: ts.Diagnostics.Generates_a_sourcemap_for_each_corresponding_d_ts_file,
-            transpileOptionValue: undefined
+            category: ts.Diagnostics.Emit,
+            transpileOptionValue: undefined,
+            defaultValueDescription: "false",
+            description: ts.Diagnostics.Create_sourcemaps_for_d_ts_files
         },
         {
             name: "emitDeclarationOnly",
             type: "boolean",
             affectsEmit: true,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Only_emit_d_ts_declaration_files,
-            transpileOptionValue: undefined
+            showInSimplifiedHelpView: true,
+            category: ts.Diagnostics.Emit,
+            description: ts.Diagnostics.Only_output_d_ts_files_and_not_JavaScript_files,
+            transpileOptionValue: undefined,
+            defaultValueDescription: "false",
         },
         {
             name: "sourceMap",
             type: "boolean",
             affectsEmit: true,
             showInSimplifiedHelpView: true,
-            category: ts.Diagnostics.Basic_Options,
-            description: ts.Diagnostics.Generates_corresponding_map_file,
+            category: ts.Diagnostics.Emit,
+            defaultValueDescription: "false",
+            description: ts.Diagnostics.Create_source_map_files_for_emitted_JavaScript_files,
         },
         {
             name: "outFile",
@@ -37274,9 +38188,10 @@
             isFilePath: true,
             paramType: ts.Diagnostics.FILE,
             showInSimplifiedHelpView: true,
-            category: ts.Diagnostics.Basic_Options,
-            description: ts.Diagnostics.Concatenate_and_emit_output_to_single_file,
-            transpileOptionValue: undefined
+            category: ts.Diagnostics.Emit,
+            description: ts.Diagnostics.Specify_a_file_that_bundles_all_outputs_into_one_JavaScript_file_If_declaration_is_true_also_designates_a_file_that_bundles_all_d_ts_output,
+            transpileOptionValue: undefined,
+            defaultValueDescription: "n/a"
         },
         {
             name: "outDir",
@@ -37285,8 +38200,9 @@
             isFilePath: true,
             paramType: ts.Diagnostics.DIRECTORY,
             showInSimplifiedHelpView: true,
-            category: ts.Diagnostics.Basic_Options,
-            description: ts.Diagnostics.Redirect_output_structure_to_the_directory,
+            category: ts.Diagnostics.Emit,
+            description: ts.Diagnostics.Specify_an_output_folder_for_all_emitted_files,
+            defaultValueDescription: "n/a"
         },
         {
             name: "rootDir",
@@ -37294,17 +38210,19 @@
             affectsEmit: true,
             isFilePath: true,
             paramType: ts.Diagnostics.LOCATION,
-            category: ts.Diagnostics.Basic_Options,
-            description: ts.Diagnostics.Specify_the_root_directory_of_input_files_Use_to_control_the_output_directory_structure_with_outDir,
+            category: ts.Diagnostics.Modules,
+            description: ts.Diagnostics.Specify_the_root_folder_within_your_source_files,
+            defaultValueDescription: ts.Diagnostics.Computed_from_the_list_of_input_files
         },
         {
             name: "composite",
             type: "boolean",
             affectsEmit: true,
             isTSConfigOnly: true,
-            category: ts.Diagnostics.Basic_Options,
-            description: ts.Diagnostics.Enable_project_compilation,
-            transpileOptionValue: undefined
+            category: ts.Diagnostics.Projects,
+            transpileOptionValue: undefined,
+            defaultValueDescription: "false",
+            description: ts.Diagnostics.Enable_constraints_that_allow_a_TypeScript_project_to_be_used_with_project_references,
         },
         {
             name: "tsBuildInfoFile",
@@ -37312,32 +38230,36 @@
             affectsEmit: true,
             isFilePath: true,
             paramType: ts.Diagnostics.FILE,
-            category: ts.Diagnostics.Basic_Options,
-            description: ts.Diagnostics.Specify_file_to_store_incremental_compilation_information,
-            transpileOptionValue: undefined
+            category: ts.Diagnostics.Projects,
+            transpileOptionValue: undefined,
+            defaultValueDescription: ".tsbuildinfo",
+            description: ts.Diagnostics.Specify_the_folder_for_tsbuildinfo_incremental_compilation_files,
         },
         {
             name: "removeComments",
             type: "boolean",
             affectsEmit: true,
             showInSimplifiedHelpView: true,
-            category: ts.Diagnostics.Basic_Options,
-            description: ts.Diagnostics.Do_not_emit_comments_to_output,
+            category: ts.Diagnostics.Emit,
+            defaultValueDescription: "false",
+            description: ts.Diagnostics.Disable_emitting_comments,
         },
         {
             name: "noEmit",
             type: "boolean",
             showInSimplifiedHelpView: true,
-            category: ts.Diagnostics.Basic_Options,
-            description: ts.Diagnostics.Do_not_emit_outputs,
-            transpileOptionValue: undefined
+            category: ts.Diagnostics.Emit,
+            description: ts.Diagnostics.Disable_emitting_files_from_a_compilation,
+            transpileOptionValue: undefined,
+            defaultValueDescription: "false"
         },
         {
             name: "importHelpers",
             type: "boolean",
             affectsEmit: true,
-            category: ts.Diagnostics.Basic_Options,
-            description: ts.Diagnostics.Import_emit_helpers_from_tslib
+            category: ts.Diagnostics.Emit,
+            description: ts.Diagnostics.Allow_importing_helper_functions_from_tslib_once_per_project_instead_of_including_them_per_file,
+            defaultValueDescription: "false"
         },
         {
             name: "importsNotUsedAsValues",
@@ -37348,22 +38270,24 @@
             })),
             affectsEmit: true,
             affectsSemanticDiagnostics: true,
-            category: ts.Diagnostics.Advanced_Options,
+            category: ts.Diagnostics.Emit,
             description: ts.Diagnostics.Specify_emit_Slashchecking_behavior_for_imports_that_are_only_used_for_types
         },
         {
             name: "downlevelIteration",
             type: "boolean",
             affectsEmit: true,
-            category: ts.Diagnostics.Basic_Options,
-            description: ts.Diagnostics.Provide_full_support_for_iterables_in_for_of_spread_and_destructuring_when_targeting_ES5_or_ES3
+            category: ts.Diagnostics.Emit,
+            description: ts.Diagnostics.Emit_more_compliant_but_verbose_and_less_performant_JavaScript_for_iteration,
+            defaultValueDescription: "false"
         },
         {
             name: "isolatedModules",
             type: "boolean",
-            category: ts.Diagnostics.Basic_Options,
-            description: ts.Diagnostics.Transpile_each_file_as_a_separate_module_similar_to_ts_transpileModule,
-            transpileOptionValue: true
+            category: ts.Diagnostics.Interop_Constraints,
+            description: ts.Diagnostics.Ensure_that_each_file_can_be_safely_transpiled_without_relying_on_other_imports,
+            transpileOptionValue: true,
+            defaultValueDescription: "false"
         },
         // Strict Type Checks
         {
@@ -37372,127 +38296,140 @@
             // Though this affects semantic diagnostics, affectsSemanticDiagnostics is not set here
             // The value of each strictFlag depends on own strictFlag value or this and never accessed directly.
             showInSimplifiedHelpView: true,
-            category: ts.Diagnostics.Strict_Type_Checking_Options,
-            description: ts.Diagnostics.Enable_all_strict_type_checking_options
+            category: ts.Diagnostics.Type_Checking,
+            description: ts.Diagnostics.Enable_all_strict_type_checking_options,
+            defaultValueDescription: "false"
         },
         {
             name: "noImplicitAny",
             type: "boolean",
             affectsSemanticDiagnostics: true,
             strictFlag: true,
-            showInSimplifiedHelpView: true,
-            category: ts.Diagnostics.Strict_Type_Checking_Options,
-            description: ts.Diagnostics.Raise_error_on_expressions_and_declarations_with_an_implied_any_type
+            category: ts.Diagnostics.Type_Checking,
+            description: ts.Diagnostics.Enable_error_reporting_for_expressions_and_declarations_with_an_implied_any_type,
+            defaultValueDescription: ts.Diagnostics.false_unless_strict_is_set
         },
         {
             name: "strictNullChecks",
             type: "boolean",
             affectsSemanticDiagnostics: true,
             strictFlag: true,
-            showInSimplifiedHelpView: true,
-            category: ts.Diagnostics.Strict_Type_Checking_Options,
-            description: ts.Diagnostics.Enable_strict_null_checks
+            category: ts.Diagnostics.Type_Checking,
+            description: ts.Diagnostics.When_type_checking_take_into_account_null_and_undefined,
+            defaultValueDescription: ts.Diagnostics.false_unless_strict_is_set
         },
         {
             name: "strictFunctionTypes",
             type: "boolean",
-            affectsSemanticDiagnostics: true,
             strictFlag: true,
-            showInSimplifiedHelpView: true,
-            category: ts.Diagnostics.Strict_Type_Checking_Options,
-            description: ts.Diagnostics.Enable_strict_checking_of_function_types
+            category: ts.Diagnostics.Type_Checking,
+            description: ts.Diagnostics.When_assigning_functions_check_to_ensure_parameters_and_the_return_values_are_subtype_compatible,
+            defaultValueDescription: ts.Diagnostics.false_unless_strict_is_set
         },
         {
             name: "strictBindCallApply",
             type: "boolean",
             strictFlag: true,
-            showInSimplifiedHelpView: true,
-            category: ts.Diagnostics.Strict_Type_Checking_Options,
-            description: ts.Diagnostics.Enable_strict_bind_call_and_apply_methods_on_functions
+            category: ts.Diagnostics.Type_Checking,
+            description: ts.Diagnostics.Check_that_the_arguments_for_bind_call_and_apply_methods_match_the_original_function,
+            defaultValueDescription: ts.Diagnostics.false_unless_strict_is_set
         },
         {
             name: "strictPropertyInitialization",
             type: "boolean",
             affectsSemanticDiagnostics: true,
             strictFlag: true,
-            showInSimplifiedHelpView: true,
-            category: ts.Diagnostics.Strict_Type_Checking_Options,
-            description: ts.Diagnostics.Enable_strict_checking_of_property_initialization_in_classes
+            category: ts.Diagnostics.Type_Checking,
+            description: ts.Diagnostics.Check_for_class_properties_that_are_declared_but_not_set_in_the_constructor,
+            defaultValueDescription: ts.Diagnostics.false_unless_strict_is_set
         },
         {
             name: "noImplicitThis",
             type: "boolean",
             affectsSemanticDiagnostics: true,
             strictFlag: true,
-            showInSimplifiedHelpView: true,
-            category: ts.Diagnostics.Strict_Type_Checking_Options,
-            description: ts.Diagnostics.Raise_error_on_this_expressions_with_an_implied_any_type,
+            category: ts.Diagnostics.Type_Checking,
+            description: ts.Diagnostics.Enable_error_reporting_when_this_is_given_the_type_any,
+            defaultValueDescription: ts.Diagnostics.false_unless_strict_is_set
+        },
+        {
+            name: "useUnknownInCatchVariables",
+            type: "boolean",
+            affectsSemanticDiagnostics: true,
+            strictFlag: true,
+            category: ts.Diagnostics.Type_Checking,
+            description: ts.Diagnostics.Type_catch_clause_variables_as_unknown_instead_of_any,
         },
         {
             name: "alwaysStrict",
             type: "boolean",
             affectsSourceFile: true,
             strictFlag: true,
-            showInSimplifiedHelpView: true,
-            category: ts.Diagnostics.Strict_Type_Checking_Options,
-            description: ts.Diagnostics.Parse_in_strict_mode_and_emit_use_strict_for_each_source_file
+            category: ts.Diagnostics.Type_Checking,
+            description: ts.Diagnostics.Ensure_use_strict_is_always_emitted,
+            defaultValueDescription: ts.Diagnostics.false_unless_strict_is_set
         },
         // Additional Checks
         {
             name: "noUnusedLocals",
             type: "boolean",
             affectsSemanticDiagnostics: true,
-            showInSimplifiedHelpView: true,
-            category: ts.Diagnostics.Additional_Checks,
-            description: ts.Diagnostics.Report_errors_on_unused_locals,
+            category: ts.Diagnostics.Type_Checking,
+            description: ts.Diagnostics.Enable_error_reporting_when_a_local_variables_aren_t_read,
+            defaultValueDescription: "false"
         },
         {
             name: "noUnusedParameters",
             type: "boolean",
             affectsSemanticDiagnostics: true,
-            showInSimplifiedHelpView: true,
-            category: ts.Diagnostics.Additional_Checks,
-            description: ts.Diagnostics.Report_errors_on_unused_parameters,
+            category: ts.Diagnostics.Type_Checking,
+            description: ts.Diagnostics.Raise_an_error_when_a_function_parameter_isn_t_read,
+            defaultValueDescription: "false"
+        },
+        {
+            name: "exactOptionalPropertyTypes",
+            type: "boolean",
+            affectsSemanticDiagnostics: true,
+            category: ts.Diagnostics.Type_Checking,
+            description: ts.Diagnostics.Interpret_optional_property_types_as_written_rather_than_adding_undefined
         },
         {
             name: "noImplicitReturns",
             type: "boolean",
             affectsSemanticDiagnostics: true,
-            showInSimplifiedHelpView: true,
-            category: ts.Diagnostics.Additional_Checks,
-            description: ts.Diagnostics.Report_error_when_not_all_code_paths_in_function_return_a_value
+            category: ts.Diagnostics.Type_Checking,
+            description: ts.Diagnostics.Enable_error_reporting_for_codepaths_that_do_not_explicitly_return_in_a_function,
+            defaultValueDescription: "false"
         },
         {
             name: "noFallthroughCasesInSwitch",
             type: "boolean",
             affectsBindDiagnostics: true,
             affectsSemanticDiagnostics: true,
-            showInSimplifiedHelpView: true,
-            category: ts.Diagnostics.Additional_Checks,
-            description: ts.Diagnostics.Report_errors_for_fallthrough_cases_in_switch_statement
+            category: ts.Diagnostics.Type_Checking,
+            description: ts.Diagnostics.Enable_error_reporting_for_fallthrough_cases_in_switch_statements
         },
         {
             name: "noUncheckedIndexedAccess",
             type: "boolean",
             affectsSemanticDiagnostics: true,
-            showInSimplifiedHelpView: false,
-            category: ts.Diagnostics.Additional_Checks,
+            category: ts.Diagnostics.Type_Checking,
             description: ts.Diagnostics.Include_undefined_in_index_signature_results
         },
         {
             name: "noImplicitOverride",
             type: "boolean",
             affectsSemanticDiagnostics: true,
-            showInSimplifiedHelpView: false,
-            category: ts.Diagnostics.Additional_Checks,
+            category: ts.Diagnostics.Type_Checking,
             description: ts.Diagnostics.Ensure_overriding_members_in_derived_classes_are_marked_with_an_override_modifier
         },
         {
             name: "noPropertyAccessFromIndexSignature",
             type: "boolean",
             showInSimplifiedHelpView: false,
-            category: ts.Diagnostics.Additional_Checks,
-            description: ts.Diagnostics.Require_undeclared_properties_from_index_signatures_to_use_element_accesses
+            category: ts.Diagnostics.Type_Checking,
+            description: ts.Diagnostics.Enforces_using_indexed_accessors_for_keys_declared_using_an_indexed_type,
+            defaultValueDescription: "false"
         },
         // Module Resolution
         {
@@ -37503,16 +38440,17 @@
             })),
             affectsModuleResolution: true,
             paramType: ts.Diagnostics.STRATEGY,
-            category: ts.Diagnostics.Module_Resolution_Options,
-            description: ts.Diagnostics.Specify_module_resolution_strategy_Colon_node_Node_js_or_classic_TypeScript_pre_1_6,
+            category: ts.Diagnostics.Modules,
+            description: ts.Diagnostics.Specify_how_TypeScript_looks_up_a_file_from_a_given_module_specifier,
+            defaultValueDescription: ts.Diagnostics.module_AMD_or_UMD_or_System_or_ES6_then_Classic_Otherwise_Node
         },
         {
             name: "baseUrl",
             type: "string",
             affectsModuleResolution: true,
             isFilePath: true,
-            category: ts.Diagnostics.Module_Resolution_Options,
-            description: ts.Diagnostics.Base_directory_to_resolve_non_absolute_module_names
+            category: ts.Diagnostics.Modules,
+            description: ts.Diagnostics.Specify_the_base_directory_to_resolve_non_relative_module_names
         },
         {
             // this option can only be specified in tsconfig.json
@@ -37521,8 +38459,8 @@
             type: "object",
             affectsModuleResolution: true,
             isTSConfigOnly: true,
-            category: ts.Diagnostics.Module_Resolution_Options,
-            description: ts.Diagnostics.A_series_of_entries_which_re_map_imports_to_lookup_locations_relative_to_the_baseUrl,
+            category: ts.Diagnostics.Modules,
+            description: ts.Diagnostics.Specify_a_set_of_entries_that_re_map_imports_to_additional_lookup_locations,
             transpileOptionValue: undefined
         },
         {
@@ -37537,9 +38475,10 @@
                 isFilePath: true
             },
             affectsModuleResolution: true,
-            category: ts.Diagnostics.Module_Resolution_Options,
-            description: ts.Diagnostics.List_of_root_folders_whose_combined_content_represents_the_structure_of_the_project_at_runtime,
-            transpileOptionValue: undefined
+            category: ts.Diagnostics.Modules,
+            description: ts.Diagnostics.Allow_multiple_folders_to_be_treated_as_one_when_resolving_modules,
+            transpileOptionValue: undefined,
+            defaultValueDescription: ts.Diagnostics.Computed_from_the_list_of_input_files
         },
         {
             name: "typeRoots",
@@ -37550,8 +38489,8 @@
                 isFilePath: true
             },
             affectsModuleResolution: true,
-            category: ts.Diagnostics.Module_Resolution_Options,
-            description: ts.Diagnostics.List_of_folders_to_include_type_definitions_from
+            category: ts.Diagnostics.Modules,
+            description: ts.Diagnostics.Specify_multiple_folders_that_act_like_Slashnode_modules_Slash_types
         },
         {
             name: "types",
@@ -37560,18 +38499,19 @@
                 name: "types",
                 type: "string"
             },
-            affectsModuleResolution: true,
+            affectsProgramStructure: true,
             showInSimplifiedHelpView: true,
-            category: ts.Diagnostics.Module_Resolution_Options,
-            description: ts.Diagnostics.Type_declaration_files_to_be_included_in_compilation,
+            category: ts.Diagnostics.Modules,
+            description: ts.Diagnostics.Specify_type_package_names_to_be_included_without_being_referenced_in_a_source_file,
             transpileOptionValue: undefined
         },
         {
             name: "allowSyntheticDefaultImports",
             type: "boolean",
             affectsSemanticDiagnostics: true,
-            category: ts.Diagnostics.Module_Resolution_Options,
-            description: ts.Diagnostics.Allow_default_imports_from_modules_with_no_default_export_This_does_not_affect_code_emit_just_typechecking
+            category: ts.Diagnostics.Interop_Constraints,
+            description: ts.Diagnostics.Allow_import_x_from_y_when_a_module_doesn_t_have_a_default_export,
+            defaultValueDescription: ts.Diagnostics.module_system_or_esModuleInterop
         },
         {
             name: "esModuleInterop",
@@ -37579,21 +38519,24 @@
             affectsSemanticDiagnostics: true,
             affectsEmit: true,
             showInSimplifiedHelpView: true,
-            category: ts.Diagnostics.Module_Resolution_Options,
-            description: ts.Diagnostics.Enables_emit_interoperability_between_CommonJS_and_ES_Modules_via_creation_of_namespace_objects_for_all_imports_Implies_allowSyntheticDefaultImports
+            category: ts.Diagnostics.Interop_Constraints,
+            description: ts.Diagnostics.Emit_additional_JavaScript_to_ease_support_for_importing_CommonJS_modules_This_enables_allowSyntheticDefaultImports_for_type_compatibility,
+            defaultValueDescription: "false"
         },
         {
             name: "preserveSymlinks",
             type: "boolean",
-            category: ts.Diagnostics.Module_Resolution_Options,
-            description: ts.Diagnostics.Do_not_resolve_the_real_path_of_symlinks,
+            category: ts.Diagnostics.Interop_Constraints,
+            description: ts.Diagnostics.Disable_resolving_symlinks_to_their_realpath_This_correlates_to_the_same_flag_in_node,
+            defaultValueDescription: "n/a"
         },
         {
             name: "allowUmdGlobalAccess",
             type: "boolean",
             affectsSemanticDiagnostics: true,
-            category: ts.Diagnostics.Module_Resolution_Options,
+            category: ts.Diagnostics.Modules,
             description: ts.Diagnostics.Allow_accessing_UMD_globals_from_modules,
+            defaultValueDescription: "false"
         },
         // Source Maps
         {
@@ -37601,59 +38544,62 @@
             type: "string",
             affectsEmit: true,
             paramType: ts.Diagnostics.LOCATION,
-            category: ts.Diagnostics.Source_Map_Options,
-            description: ts.Diagnostics.Specify_the_location_where_debugger_should_locate_TypeScript_files_instead_of_source_locations,
+            category: ts.Diagnostics.Emit,
+            description: ts.Diagnostics.Specify_the_root_path_for_debuggers_to_find_the_reference_source_code,
         },
         {
             name: "mapRoot",
             type: "string",
             affectsEmit: true,
             paramType: ts.Diagnostics.LOCATION,
-            category: ts.Diagnostics.Source_Map_Options,
+            category: ts.Diagnostics.Emit,
             description: ts.Diagnostics.Specify_the_location_where_debugger_should_locate_map_files_instead_of_generated_locations,
         },
         {
             name: "inlineSourceMap",
             type: "boolean",
             affectsEmit: true,
-            category: ts.Diagnostics.Source_Map_Options,
-            description: ts.Diagnostics.Emit_a_single_file_with_source_maps_instead_of_having_a_separate_file
+            category: ts.Diagnostics.Emit,
+            description: ts.Diagnostics.Include_sourcemap_files_inside_the_emitted_JavaScript,
+            defaultValueDescription: "false"
         },
         {
             name: "inlineSources",
             type: "boolean",
             affectsEmit: true,
-            category: ts.Diagnostics.Source_Map_Options,
-            description: ts.Diagnostics.Emit_the_source_alongside_the_sourcemaps_within_a_single_file_requires_inlineSourceMap_or_sourceMap_to_be_set
+            category: ts.Diagnostics.Emit,
+            description: ts.Diagnostics.Include_source_code_in_the_sourcemaps_inside_the_emitted_JavaScript,
+            defaultValueDescription: "false"
         },
         // Experimental
         {
             name: "experimentalDecorators",
             type: "boolean",
             affectsSemanticDiagnostics: true,
-            category: ts.Diagnostics.Experimental_Options,
-            description: ts.Diagnostics.Enables_experimental_support_for_ES7_decorators
+            category: ts.Diagnostics.Language_and_Environment,
+            description: ts.Diagnostics.Enable_experimental_support_for_TC39_stage_2_draft_decorators
         },
         {
             name: "emitDecoratorMetadata",
             type: "boolean",
             affectsSemanticDiagnostics: true,
             affectsEmit: true,
-            category: ts.Diagnostics.Experimental_Options,
-            description: ts.Diagnostics.Enables_experimental_support_for_emitting_type_metadata_for_decorators
+            category: ts.Diagnostics.Language_and_Environment,
+            description: ts.Diagnostics.Emit_design_type_metadata_for_decorated_declarations_in_source_files
         },
         // Advanced
         {
             name: "jsxFactory",
             type: "string",
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Specify_the_JSX_factory_function_to_use_when_targeting_react_JSX_emit_e_g_React_createElement_or_h
+            category: ts.Diagnostics.Language_and_Environment,
+            description: ts.Diagnostics.Specify_the_JSX_factory_function_used_when_targeting_React_JSX_emit_e_g_React_createElement_or_h,
+            defaultValueDescription: "`React.createElement`"
         },
         {
             name: "jsxFragmentFactory",
             type: "string",
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Specify_the_JSX_fragment_factory_function_to_use_when_targeting_react_JSX_emit_with_jsxFactory_compiler_option_is_specified_e_g_Fragment
+            category: ts.Diagnostics.Language_and_Environment,
+            description: ts.Diagnostics.Specify_the_JSX_Fragment_reference_used_for_fragments_when_targeting_React_JSX_emit_e_g_React_Fragment_or_Fragment
         },
         {
             name: "jsxImportSource",
@@ -37661,15 +38607,17 @@
             affectsSemanticDiagnostics: true,
             affectsEmit: true,
             affectsModuleResolution: true,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Specify_the_module_specifier_to_be_used_to_import_the_jsx_and_jsxs_factory_functions_from_eg_react
+            category: ts.Diagnostics.Language_and_Environment,
+            description: ts.Diagnostics.Specify_module_specifier_used_to_import_the_JSX_factory_functions_when_using_jsx_Colon_react_jsx_Asterisk,
+            defaultValueDescription: "react"
         },
         {
             name: "resolveJsonModule",
             type: "boolean",
             affectsModuleResolution: true,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Include_modules_imported_with_json_extension
+            category: ts.Diagnostics.Modules,
+            description: ts.Diagnostics.Enable_importing_json_files,
+            defaultValueDescription: "false"
         },
         {
             name: "out",
@@ -37677,36 +38625,41 @@
             affectsEmit: true,
             isFilePath: false,
             // for correct behaviour, please use outFile
-            category: ts.Diagnostics.Advanced_Options,
+            category: ts.Diagnostics.Backwards_Compatibility,
             paramType: ts.Diagnostics.FILE,
-            description: ts.Diagnostics.Deprecated_Use_outFile_instead_Concatenate_and_emit_output_to_single_file,
-            transpileOptionValue: undefined
+            transpileOptionValue: undefined,
+            defaultValueDescription: "n/a",
+            description: ts.Diagnostics.Deprecated_setting_Use_outFile_instead,
         },
         {
             name: "reactNamespace",
             type: "string",
             affectsEmit: true,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Deprecated_Use_jsxFactory_instead_Specify_the_object_invoked_for_createElement_when_targeting_react_JSX_emit
+            category: ts.Diagnostics.Language_and_Environment,
+            description: ts.Diagnostics.Specify_the_object_invoked_for_createElement_This_only_applies_when_targeting_react_JSX_emit,
+            defaultValueDescription: "`React`",
         },
         {
             name: "skipDefaultLibCheck",
             type: "boolean",
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Deprecated_Use_skipLibCheck_instead_Skip_type_checking_of_default_library_declaration_files
+            category: ts.Diagnostics.Completeness,
+            description: ts.Diagnostics.Skip_type_checking_d_ts_files_that_are_included_with_TypeScript,
+            defaultValueDescription: "false",
         },
         {
             name: "charset",
             type: "string",
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.The_character_set_of_the_input_files
+            category: ts.Diagnostics.Backwards_Compatibility,
+            description: ts.Diagnostics.No_longer_supported_In_early_versions_manually_set_the_text_encoding_for_reading_files,
+            defaultValueDescription: "utf8"
         },
         {
             name: "emitBOM",
             type: "boolean",
             affectsEmit: true,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Emit_a_UTF_8_Byte_Order_Mark_BOM_in_the_beginning_of_output_files
+            category: ts.Diagnostics.Emit,
+            description: ts.Diagnostics.Emit_a_UTF_8_Byte_Order_Mark_BOM_in_the_beginning_of_output_files,
+            defaultValueDescription: "false"
         },
         {
             name: "newLine",
@@ -37716,99 +38669,108 @@
             })),
             affectsEmit: true,
             paramType: ts.Diagnostics.NEWLINE,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Specify_the_end_of_line_sequence_to_be_used_when_emitting_files_Colon_CRLF_dos_or_LF_unix,
+            category: ts.Diagnostics.Emit,
+            description: ts.Diagnostics.Set_the_newline_character_for_emitting_files,
+            defaultValueDescription: ts.Diagnostics.Platform_specific
         },
         {
             name: "noErrorTruncation",
             type: "boolean",
             affectsSemanticDiagnostics: true,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Do_not_truncate_error_messages
+            category: ts.Diagnostics.Output_Formatting,
+            description: ts.Diagnostics.Disable_truncating_types_in_error_messages,
+            defaultValueDescription: "false"
         },
         {
             name: "noLib",
             type: "boolean",
-            affectsModuleResolution: true,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Do_not_include_the_default_library_file_lib_d_ts,
+            category: ts.Diagnostics.Language_and_Environment,
+            affectsProgramStructure: true,
+            description: ts.Diagnostics.Disable_including_any_library_files_including_the_default_lib_d_ts,
             // We are not returning a sourceFile for lib file when asked by the program,
             // so pass --noLib to avoid reporting a file not found error.
-            transpileOptionValue: true
+            transpileOptionValue: true,
+            defaultValueDescription: "false"
         },
         {
             name: "noResolve",
             type: "boolean",
             affectsModuleResolution: true,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Do_not_add_triple_slash_references_or_imported_modules_to_the_list_of_compiled_files,
+            category: ts.Diagnostics.Modules,
+            description: ts.Diagnostics.Disallow_import_s_require_s_or_reference_s_from_expanding_the_number_of_files_TypeScript_should_add_to_a_project,
             // We are not doing a full typecheck, we are not resolving the whole context,
             // so pass --noResolve to avoid reporting missing file errors.
-            transpileOptionValue: true
+            transpileOptionValue: true,
+            defaultValueDescription: "false"
         },
         {
             name: "stripInternal",
             type: "boolean",
             affectsEmit: true,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Do_not_emit_declarations_for_code_that_has_an_internal_annotation,
+            category: ts.Diagnostics.Emit,
+            description: ts.Diagnostics.Disable_emitting_declarations_that_have_internal_in_their_JSDoc_comments,
         },
         {
             name: "disableSizeLimit",
             type: "boolean",
-            affectsSourceFile: true,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Disable_size_limitations_on_JavaScript_projects
+            affectsProgramStructure: true,
+            category: ts.Diagnostics.Editor_Support,
+            description: ts.Diagnostics.Remove_the_20mb_cap_on_total_source_code_size_for_JavaScript_files_in_the_TypeScript_language_server,
+            defaultValueDescription: "false"
         },
         {
             name: "disableSourceOfProjectReferenceRedirect",
             type: "boolean",
             isTSConfigOnly: true,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Disable_use_of_source_files_instead_of_declaration_files_from_referenced_projects
+            category: ts.Diagnostics.Projects,
+            description: ts.Diagnostics.Disable_preferring_source_files_instead_of_declaration_files_when_referencing_composite_projects
         },
         {
             name: "disableSolutionSearching",
             type: "boolean",
             isTSConfigOnly: true,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Disable_solution_searching_for_this_project
+            category: ts.Diagnostics.Projects,
+            description: ts.Diagnostics.Opt_a_project_out_of_multi_project_reference_checking_when_editing
         },
         {
             name: "disableReferencedProjectLoad",
             type: "boolean",
             isTSConfigOnly: true,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Disable_loading_referenced_projects
+            category: ts.Diagnostics.Projects,
+            description: ts.Diagnostics.Reduce_the_number_of_projects_loaded_automatically_by_TypeScript
         },
         {
             name: "noImplicitUseStrict",
             type: "boolean",
             affectsSemanticDiagnostics: true,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Do_not_emit_use_strict_directives_in_module_output
+            category: ts.Diagnostics.Backwards_Compatibility,
+            description: ts.Diagnostics.Disable_adding_use_strict_directives_in_emitted_JavaScript_files,
+            defaultValueDescription: "false"
         },
         {
             name: "noEmitHelpers",
             type: "boolean",
             affectsEmit: true,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Do_not_generate_custom_helper_functions_like_extends_in_compiled_output
+            category: ts.Diagnostics.Emit,
+            description: ts.Diagnostics.Disable_generating_custom_helper_functions_like_extends_in_compiled_output,
+            defaultValueDescription: "false"
         },
         {
             name: "noEmitOnError",
             type: "boolean",
             affectsEmit: true,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Do_not_emit_outputs_if_any_errors_were_reported,
-            transpileOptionValue: undefined
+            category: ts.Diagnostics.Emit,
+            transpileOptionValue: undefined,
+            description: ts.Diagnostics.Disable_emitting_files_if_any_type_checking_errors_are_reported,
+            defaultValueDescription: "false"
         },
         {
             name: "preserveConstEnums",
             type: "boolean",
             affectsEmit: true,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Do_not_erase_const_enum_declarations_in_generated_code
+            category: ts.Diagnostics.Emit,
+            description: ts.Diagnostics.Disable_erasing_const_enum_declarations_in_generated_code,
+            defaultValueDescription: "n/a"
         },
         {
             name: "declarationDir",
@@ -37816,80 +38778,91 @@
             affectsEmit: true,
             isFilePath: true,
             paramType: ts.Diagnostics.DIRECTORY,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Output_directory_for_generated_declaration_files,
-            transpileOptionValue: undefined
+            category: ts.Diagnostics.Emit,
+            transpileOptionValue: undefined,
+            description: ts.Diagnostics.Specify_the_output_directory_for_generated_declaration_files,
+            defaultValueDescription: "n/a"
         },
         {
             name: "skipLibCheck",
             type: "boolean",
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Skip_type_checking_of_declaration_files,
+            category: ts.Diagnostics.Completeness,
+            description: ts.Diagnostics.Skip_type_checking_all_d_ts_files,
+            defaultValueDescription: "false"
         },
         {
             name: "allowUnusedLabels",
             type: "boolean",
             affectsBindDiagnostics: true,
             affectsSemanticDiagnostics: true,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Do_not_report_errors_on_unused_labels
+            category: ts.Diagnostics.Type_Checking,
+            description: ts.Diagnostics.Disable_error_reporting_for_unused_labels,
+            defaultValueDescription: "undefined"
         },
         {
             name: "allowUnreachableCode",
             type: "boolean",
             affectsBindDiagnostics: true,
             affectsSemanticDiagnostics: true,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Do_not_report_errors_on_unreachable_code
+            category: ts.Diagnostics.Type_Checking,
+            description: ts.Diagnostics.Disable_error_reporting_for_unreachable_code,
+            defaultValueDescription: "undefined"
         },
         {
             name: "suppressExcessPropertyErrors",
             type: "boolean",
             affectsSemanticDiagnostics: true,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Suppress_excess_property_checks_for_object_literals,
+            category: ts.Diagnostics.Backwards_Compatibility,
+            description: ts.Diagnostics.Disable_reporting_of_excess_property_errors_during_the_creation_of_object_literals,
+            defaultValueDescription: "false"
         },
         {
             name: "suppressImplicitAnyIndexErrors",
             type: "boolean",
             affectsSemanticDiagnostics: true,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Suppress_noImplicitAny_errors_for_indexing_objects_lacking_index_signatures,
+            category: ts.Diagnostics.Backwards_Compatibility,
+            description: ts.Diagnostics.Suppress_noImplicitAny_errors_when_indexing_objects_that_lack_index_signatures,
+            defaultValueDescription: "false"
         },
         {
             name: "forceConsistentCasingInFileNames",
             type: "boolean",
             affectsModuleResolution: true,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Disallow_inconsistently_cased_references_to_the_same_file
+            category: ts.Diagnostics.Interop_Constraints,
+            description: ts.Diagnostics.Ensure_that_casing_is_correct_in_imports,
+            defaultValueDescription: "false"
         },
         {
             name: "maxNodeModuleJsDepth",
             type: "number",
             affectsModuleResolution: true,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.The_maximum_dependency_depth_to_search_under_node_modules_and_load_JavaScript_files
+            category: ts.Diagnostics.JavaScript_Support,
+            description: ts.Diagnostics.Specify_the_maximum_folder_depth_used_for_checking_JavaScript_files_from_node_modules_Only_applicable_with_allowJs,
+            defaultValueDescription: "0"
         },
         {
             name: "noStrictGenericChecks",
             type: "boolean",
             affectsSemanticDiagnostics: true,
-            category: ts.Diagnostics.Advanced_Options,
+            category: ts.Diagnostics.Backwards_Compatibility,
             description: ts.Diagnostics.Disable_strict_checking_of_generic_signatures_in_function_types,
+            defaultValueDescription: "false"
         },
         {
             name: "useDefineForClassFields",
             type: "boolean",
             affectsSemanticDiagnostics: true,
             affectsEmit: true,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Emit_class_fields_with_Define_instead_of_Set,
+            category: ts.Diagnostics.Language_and_Environment,
+            description: ts.Diagnostics.Emit_ECMAScript_standard_compliant_class_fields,
+            defaultValueDescription: "false"
         },
         {
             name: "keyofStringsOnly",
             type: "boolean",
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Resolve_keyof_to_string_valued_property_names_only_no_numbers_or_symbols,
+            category: ts.Diagnostics.Backwards_Compatibility,
+            description: ts.Diagnostics.Make_keyof_only_return_strings_instead_of_string_numbers_or_symbols_Legacy_option,
+            defaultValueDescription: "false"
         },
         {
             // A list of plugins to load in the language service
@@ -37900,11 +38873,12 @@
                 name: "plugin",
                 type: "object"
             },
-            description: ts.Diagnostics.List_of_language_service_plugins
+            description: ts.Diagnostics.List_of_language_service_plugins,
+            category: ts.Diagnostics.Editor_Support,
         },
     ];
     /* @internal */
-    ts.optionDeclarations = __spreadArray(__spreadArray([], ts.commonOptionsWithBuild), commandOptionsWithoutBuild);
+    ts.optionDeclarations = __spreadArray(__spreadArray([], ts.commonOptionsWithBuild, true), commandOptionsWithoutBuild, true);
     /* @internal */
     ts.semanticDiagnosticsOptionDeclarations = ts.optionDeclarations.filter(function (option) { return !!option.affectsSemanticDiagnostics; });
     /* @internal */
@@ -37916,10 +38890,14 @@
         return !!option.affectsSourceFile || !!option.affectsModuleResolution || !!option.affectsBindDiagnostics;
     });
     /* @internal */
+    ts.optionsAffectingProgramStructure = ts.optionDeclarations.filter(function (option) { return !!option.affectsProgramStructure; });
+    /* @internal */
     ts.transpileOptionValueCompilerOptions = ts.optionDeclarations.filter(function (option) {
         return ts.hasProperty(option, "transpileOptionValue");
     });
-    var commandOptionsOnlyBuild = [
+    // Build related options
+    /* @internal */
+    ts.optionsForBuild = [
         {
             name: "verbose",
             shortName: "v",
@@ -37949,7 +38927,7 @@
         }
     ];
     /* @internal */
-    ts.buildOpts = __spreadArray(__spreadArray([], ts.commonOptionsWithBuild), commandOptionsOnlyBuild);
+    ts.buildOpts = __spreadArray(__spreadArray([], ts.commonOptionsWithBuild, true), ts.optionsForBuild, true);
     /* @internal */
     ts.typeAcquisitionDeclarations = [
         {
@@ -38040,13 +39018,13 @@
     }
     /* @internal */
     function parseCustomTypeOption(opt, value, errors) {
-        return convertJsonOptionOfCustomType(opt, trimString(value || ""), errors);
+        return convertJsonOptionOfCustomType(opt, ts.trimString(value || ""), errors);
     }
     ts.parseCustomTypeOption = parseCustomTypeOption;
     /* @internal */
     function parseListTypeOption(opt, value, errors) {
         if (value === void 0) { value = ""; }
-        value = trimString(value);
+        value = ts.trimString(value);
         if (ts.startsWith(value, "-")) {
             return undefined;
         }
@@ -38430,7 +39408,8 @@
                     },
                     {
                         name: "extends",
-                        type: "string"
+                        type: "string",
+                        category: ts.Diagnostics.File_Management,
                     },
                     {
                         name: "references",
@@ -38438,7 +39417,8 @@
                         element: {
                             name: "references",
                             type: "object"
-                        }
+                        },
+                        category: ts.Diagnostics.Projects,
                     },
                     {
                         name: "files",
@@ -38446,7 +39426,8 @@
                         element: {
                             name: "files",
                             type: "string"
-                        }
+                        },
+                        category: ts.Diagnostics.File_Management,
                     },
                     {
                         name: "include",
@@ -38454,7 +39435,9 @@
                         element: {
                             name: "include",
                             type: "string"
-                        }
+                        },
+                        category: ts.Diagnostics.File_Management,
+                        defaultValueDescription: ts.Diagnostics.if_files_is_specified_otherwise_Asterisk_Asterisk_Slash_Asterisk
                     },
                     {
                         name: "exclude",
@@ -38462,7 +39445,9 @@
                         element: {
                             name: "exclude",
                             type: "string"
-                        }
+                        },
+                        category: ts.Diagnostics.File_Management,
+                        defaultValueDescription: ts.Diagnostics.node_modules_bower_components_jspm_packages_plus_the_value_of_outDir_if_one_is_specified
                     },
                     ts.compileOnSaveCommandLineOption
                 ])
@@ -38474,7 +39459,7 @@
         var _a;
         var rootExpression = (_a = sourceFile.statements[0]) === null || _a === void 0 ? void 0 : _a.expression;
         var knownRootOptions = reportOptionsErrors ? getTsconfigRootOptionsMap() : undefined;
-        if (rootExpression && rootExpression.kind !== 201 /* ObjectLiteralExpression */) {
+        if (rootExpression && rootExpression.kind !== 203 /* ObjectLiteralExpression */) {
             errors.push(ts.createDiagnosticForNodeInSourceFile(sourceFile, rootExpression, ts.Diagnostics.The_root_value_of_a_0_file_must_be_an_object, ts.getBaseFileName(sourceFile.fileName) === "jsconfig.json" ? "jsconfig.json" : "tsconfig.json"));
             // Last-ditch error recovery. Somewhat useful because the JSON parser will recover from some parse errors by
             // synthesizing a top-level array literal expression. There's a reasonable chance the first element of that
@@ -38514,7 +39499,7 @@
         function convertObjectLiteralExpressionToJson(node, knownOptions, extraKeyDiagnostics, parentOption) {
             var result = returnValue ? {} : undefined;
             var _loop_4 = function (element) {
-                if (element.kind !== 289 /* PropertyAssignment */) {
+                if (element.kind !== 291 /* PropertyAssignment */) {
                     errors.push(ts.createDiagnosticForNodeInSourceFile(sourceFile, element, ts.Diagnostics.Property_assignment_expected));
                     return "continue";
                 }
@@ -38581,13 +39566,13 @@
         function convertPropertyValueToJson(valueExpression, option) {
             var invalidReported;
             switch (valueExpression.kind) {
-                case 109 /* TrueKeyword */:
+                case 110 /* TrueKeyword */:
                     reportInvalidOptionValue(option && option.type !== "boolean");
                     return validateValue(/*value*/ true);
-                case 94 /* FalseKeyword */:
+                case 95 /* FalseKeyword */:
                     reportInvalidOptionValue(option && option.type !== "boolean");
                     return validateValue(/*value*/ false);
-                case 103 /* NullKeyword */:
+                case 104 /* NullKeyword */:
                     reportInvalidOptionValue(option && option.name === "extends"); // "extends" is the only option we don't allow null/undefined for
                     return validateValue(/*value*/ null); // eslint-disable-line no-null/no-null
                 case 10 /* StringLiteral */:
@@ -38608,13 +39593,13 @@
                 case 8 /* NumericLiteral */:
                     reportInvalidOptionValue(option && option.type !== "number");
                     return validateValue(Number(valueExpression.text));
-                case 215 /* PrefixUnaryExpression */:
+                case 217 /* PrefixUnaryExpression */:
                     if (valueExpression.operator !== 40 /* MinusToken */ || valueExpression.operand.kind !== 8 /* NumericLiteral */) {
                         break; // not valid JSON syntax
                     }
                     reportInvalidOptionValue(option && option.type !== "number");
                     return validateValue(-Number(valueExpression.operand.text));
-                case 201 /* ObjectLiteralExpression */:
+                case 203 /* ObjectLiteralExpression */:
                     reportInvalidOptionValue(option && option.type !== "object");
                     var objectLiteralExpression = valueExpression;
                     // Currently having element option declaration in the tsconfig with type "object"
@@ -38631,7 +39616,7 @@
                         return validateValue(convertObjectLiteralExpressionToJson(objectLiteralExpression, /* knownOptions*/ undefined, 
                         /*extraKeyDiagnosticMessage */ undefined, /*parentOption*/ undefined));
                     }
-                case 200 /* ArrayLiteralExpression */:
+                case 202 /* ArrayLiteralExpression */:
                     reportInvalidOptionValue(option && option.type !== "list");
                     return validateValue(convertArrayLiteralExpressionToJson(valueExpression.elements, option && option.element));
             }
@@ -38648,7 +39633,7 @@
                 if (!invalidReported) {
                     var diagnostic = (_a = option === null || option === void 0 ? void 0 : option.extraValidation) === null || _a === void 0 ? void 0 : _a.call(option, value);
                     if (diagnostic) {
-                        errors.push(ts.createDiagnosticForNodeInSourceFile.apply(void 0, __spreadArray([sourceFile, valueExpression], diagnostic)));
+                        errors.push(ts.createDiagnosticForNodeInSourceFile.apply(void 0, __spreadArray([sourceFile, valueExpression], diagnostic, false)));
                         return undefined;
                     }
                 }
@@ -38769,7 +39754,7 @@
             if (ts.hasProperty(options, name)) {
                 // tsconfig only options cannot be specified via command line,
                 // so we can assume that only types that can appear here string | number | boolean
-                if (optionsNameMap.has(name) && optionsNameMap.get(name).category === ts.Diagnostics.Command_line_Options) {
+                if (optionsNameMap.has(name) && (optionsNameMap.get(name).category === ts.Diagnostics.Command_line_Options || optionsNameMap.get(name).category === ts.Diagnostics.Output_Formatting)) {
                     return "continue";
                 }
                 var value = options[name];
@@ -38835,13 +39820,11 @@
         function makePadding(paddingLength) {
             return Array(paddingLength + 1).join(" ");
         }
-        function isAllowedOption(_a) {
-            var category = _a.category, name = _a.name;
-            // Skip options which do not have a category or have category `Command_line_Options`
-            // Exclude all possible `Advanced_Options` in tsconfig.json which were NOT defined in command line
-            return category !== undefined
-                && category !== ts.Diagnostics.Command_line_Options
-                && (category !== ts.Diagnostics.Advanced_Options || compilerOptionsMap.has(name));
+        function isAllowedOptionForOutput(_a) {
+            var category = _a.category, name = _a.name, isCommandLineOnly = _a.isCommandLineOnly;
+            // Skip options which do not have a category or have categories which are more niche
+            var categoriesToSkip = [ts.Diagnostics.Command_line_Options, ts.Diagnostics.Editor_Support, ts.Diagnostics.Compiler_Diagnostics, ts.Diagnostics.Backwards_Compatibility, ts.Diagnostics.Watch_and_Build_Modes, ts.Diagnostics.Output_Formatting];
+            return !isCommandLineOnly && category !== undefined && (!categoriesToSkip.includes(category) || compilerOptionsMap.has(name));
         }
         function writeConfigurations() {
             // Filter applicable options to place in the file
@@ -38849,7 +39832,7 @@
             for (var _i = 0, optionDeclarations_1 = ts.optionDeclarations; _i < optionDeclarations_1.length; _i++) {
                 var option = optionDeclarations_1[_i];
                 var category = option.category;
-                if (isAllowedOption(option)) {
+                if (isAllowedOptionForOutput(option)) {
                     categorizedOptions.add(ts.getLocaleSpecificMessage(category), option);
                 }
             }
@@ -39066,6 +40049,7 @@
                 validatedFilesSpec: ts.filter(filesSpecs, ts.isString),
                 validatedIncludeSpecs: validatedIncludeSpecs,
                 validatedExcludeSpecs: validatedExcludeSpecs,
+                pathPatterns: undefined, // Initialized on first use
             };
         }
         function getFileNames(basePath) {
@@ -39163,7 +40147,7 @@
         basePath = ts.normalizeSlashes(basePath);
         var resolvedPath = ts.getNormalizedAbsolutePath(configFileName || "", basePath);
         if (resolutionStack.indexOf(resolvedPath) >= 0) {
-            errors.push(ts.createCompilerDiagnostic(ts.Diagnostics.Circularity_detected_while_resolving_configuration_Colon_0, __spreadArray(__spreadArray([], resolutionStack), [resolvedPath]).join(" -> ")));
+            errors.push(ts.createCompilerDiagnostic(ts.Diagnostics.Circularity_detected_while_resolving_configuration_Colon_0, __spreadArray(__spreadArray([], resolutionStack, true), [resolvedPath], false).join(" -> ")));
             return { raw: json || convertToObject(sourceFile, errors) };
         }
         var ownConfig = json ?
@@ -39463,9 +40447,6 @@
     function convertJsonOptionOfListType(option, values, basePath, errors) {
         return ts.filter(ts.map(values, function (v) { return convertJsonOption(option.element, v, basePath, errors); }), function (v) { return !!v; });
     }
-    function trimString(s) {
-        return typeof s.trim === "function" ? s.trim() : s.replace(/^[\s]+|[\s]+$/g, "");
-    }
     /**
      * Tests for a path that ends in a recursive directory wildcard.
      * Matches **, \**, **\, and \**\, but not a**b.
@@ -39479,34 +40460,6 @@
      */
     var invalidTrailingRecursionPattern = /(^|\/)\*\*\/?$/;
     /**
-     * Tests for a path where .. appears after a recursive directory wildcard.
-     * Matches **\..\*, **\a\..\*, and **\.., but not ..\**\*
-     *
-     * NOTE: used \ in place of / above to avoid issues with multiline comments.
-     *
-     * Breakdown:
-     *  (^|\/)      # matches either the beginning of the string or a directory separator.
-     *  \*\*\/      # matches a recursive directory wildcard "**" followed by a directory separator.
-     *  (.*\/)?     # optionally matches any number of characters followed by a directory separator.
-     *  \.\.        # matches a parent directory path component ".."
-     *  ($|\/)      # matches either the end of the string or a directory separator.
-     */
-    var invalidDotDotAfterRecursiveWildcardPattern = /(^|\/)\*\*\/(.*\/)?\.\.($|\/)/;
-    /**
-     * Tests for a path containing a wildcard character in a directory component of the path.
-     * Matches \*\, \?\, and \a*b\, but not \a\ or \a\*.
-     *
-     * NOTE: used \ in place of / above to avoid issues with multiline comments.
-     *
-     * Breakdown:
-     *  \/          # matches a directory separator.
-     *  [^/]*?      # matches any number of characters excluding directory separators (non-greedy).
-     *  [*?]        # matches either a wildcard character (* or ?)
-     *  [^/]*       # matches any number of characters excluding directory separators (greedy).
-     *  \/          # matches a directory separator.
-     */
-    var watchRecursivePattern = /\/[^/]*?[*?][^/]*\//;
-    /**
      * Matches the portion of a wildcard path that does not contain wildcards.
      * Matches \a of \a\*, or \a\b\c of \a\b\c\?\d.
      *
@@ -39546,7 +40499,7 @@
         // via wildcard of *.json kind
         var wildCardJsonFileMap = new ts.Map();
         var validatedFilesSpec = configFileSpecs.validatedFilesSpec, validatedIncludeSpecs = configFileSpecs.validatedIncludeSpecs, validatedExcludeSpecs = configFileSpecs.validatedExcludeSpecs;
-        // Rather than requery this for each file and filespec, we query the supported extensions
+        // Rather than re-query this for each file and filespec, we query the supported extensions
         // once and store it on the expansion context.
         var supportedExtensions = ts.getSupportedExtensions(options, extraFileExtensions);
         var supportedExtensionsWithJsonIfResolveJsonModule = ts.getSuppoertedExtensionsWithJsonIfResolveJsonModule(options, supportedExtensions);
@@ -39624,9 +40577,22 @@
         return matchesExcludeWorker(pathToCheck, validatedExcludeSpecs, useCaseSensitiveFileNames, currentDirectory, basePath);
     }
     ts.isExcludedFile = isExcludedFile;
+    function invalidDotDotAfterRecursiveWildcard(s) {
+        // We used to use the regex /(^|\/)\*\*\/(.*\/)?\.\.($|\/)/ to check for this case, but
+        // in v8, that has polynomial performance because the recursive wildcard match - **/ -
+        // can be matched in many arbitrary positions when multiple are present, resulting
+        // in bad backtracking (and we don't care which is matched - just that some /.. segment
+        // comes after some **/ segment).
+        var wildcardIndex = ts.startsWith(s, "**/") ? 0 : s.indexOf("/**/");
+        if (wildcardIndex === -1) {
+            return false;
+        }
+        var lastDotIndex = ts.endsWith(s, "/..") ? s.length : s.lastIndexOf("/../");
+        return lastDotIndex > wildcardIndex;
+    }
     /* @internal */
     function matchesExclude(pathToCheck, excludeSpecs, useCaseSensitiveFileNames, currentDirectory) {
-        return matchesExcludeWorker(pathToCheck, ts.filter(excludeSpecs, function (spec) { return !invalidDotDotAfterRecursiveWildcardPattern.test(spec); }), useCaseSensitiveFileNames, currentDirectory);
+        return matchesExcludeWorker(pathToCheck, ts.filter(excludeSpecs, function (spec) { return !invalidDotDotAfterRecursiveWildcard(spec); }), useCaseSensitiveFileNames, currentDirectory);
     }
     ts.matchesExclude = matchesExclude;
     function matchesExcludeWorker(pathToCheck, excludeSpecs, useCaseSensitiveFileNames, currentDirectory, basePath) {
@@ -39659,7 +40625,7 @@
         if (disallowTrailingRecursion && invalidTrailingRecursionPattern.test(spec)) {
             return [ts.Diagnostics.File_specification_cannot_end_in_a_recursive_directory_wildcard_Asterisk_Asterisk_Colon_0, spec];
         }
-        else if (invalidDotDotAfterRecursiveWildcardPattern.test(spec)) {
+        else if (invalidDotDotAfterRecursiveWildcard(spec)) {
             return [ts.Diagnostics.File_specification_cannot_contain_a_parent_directory_that_appears_after_a_recursive_directory_wildcard_Asterisk_Asterisk_Colon_0, spec];
         }
     }
@@ -39720,9 +40686,18 @@
     function getWildcardDirectoryFromSpec(spec, useCaseSensitiveFileNames) {
         var match = wildcardDirectoryPattern.exec(spec);
         if (match) {
+            // We check this with a few `indexOf` calls because 3 `indexOf`/`lastIndexOf` calls is
+            // less algorithmically complex (roughly O(3n) worst-case) than the regex we used to use,
+            // \/[^/]*?[*?][^/]*\/ which was polynominal in v8, since arbitrary sequences of wildcard
+            // characters could match any of the central patterns, resulting in bad backtracking.
+            var questionWildcardIndex = spec.indexOf("?");
+            var starWildcardIndex = spec.indexOf("*");
+            var lastDirectorySeperatorIndex = spec.lastIndexOf(ts.directorySeparator);
             return {
                 key: useCaseSensitiveFileNames ? match[0] : ts.toFileNameLowerCase(match[0]),
-                flags: watchRecursivePattern.test(spec) ? 1 /* Recursive */ : 0 /* None */
+                flags: (questionWildcardIndex !== -1 && questionWildcardIndex < lastDirectorySeperatorIndex)
+                    || (starWildcardIndex !== -1 && starWildcardIndex < lastDirectorySeperatorIndex)
+                    ? 1 /* Recursive */ : 0 /* None */
             };
         }
         if (ts.isImplicitGlob(spec)) {
@@ -40227,7 +41202,7 @@
     ts.createCacheWithRedirects = createCacheWithRedirects;
     function createPackageJsonInfoCache(currentDirectory, getCanonicalFileName) {
         var cache;
-        return { getPackageJsonInfo: getPackageJsonInfo, setPackageJsonInfo: setPackageJsonInfo, clear: clear };
+        return { getPackageJsonInfo: getPackageJsonInfo, setPackageJsonInfo: setPackageJsonInfo, clear: clear, entries: entries };
         function getPackageJsonInfo(packageJsonPath) {
             return cache === null || cache === void 0 ? void 0 : cache.get(ts.toPath(packageJsonPath, currentDirectory, getCanonicalFileName));
         }
@@ -40237,6 +41212,10 @@
         function clear() {
             cache = undefined;
         }
+        function entries() {
+            var iter = cache === null || cache === void 0 ? void 0 : cache.entries();
+            return iter ? ts.arrayFrom(iter) : [];
+        }
     }
     function getOrCreateCache(cacheWithRedirects, redirectedReference, key, create) {
         var cache = cacheWithRedirects.getOrCreateMapOfCacheRedirects(redirectedReference);
@@ -40530,7 +41509,8 @@
         }
     }
     function tryLoadModuleUsingPathsIfEligible(extensions, moduleName, loader, state) {
-        var _a = state.compilerOptions, baseUrl = _a.baseUrl, paths = _a.paths;
+        var _a;
+        var _b = state.compilerOptions, baseUrl = _b.baseUrl, paths = _b.paths, configFile = _b.configFile;
         if (paths && !ts.pathIsRelative(moduleName)) {
             if (state.traceEnabled) {
                 if (baseUrl) {
@@ -40539,7 +41519,8 @@
                 trace(state.host, ts.Diagnostics.paths_option_is_specified_looking_for_a_pattern_to_match_module_name_0, moduleName);
             }
             var baseDirectory = ts.getPathsBasePath(state.compilerOptions, state.host); // Always defined when 'paths' is defined
-            return tryLoadModuleUsingPaths(extensions, moduleName, baseDirectory, paths, loader, /*onlyRecordFailures*/ false, state);
+            var pathPatterns = (configFile === null || configFile === void 0 ? void 0 : configFile.configFileSpecs) ? (_a = configFile.configFileSpecs).pathPatterns || (_a.pathPatterns = ts.tryParsePatterns(paths)) : undefined;
+            return tryLoadModuleUsingPaths(extensions, moduleName, baseDirectory, paths, pathPatterns, loader, /*onlyRecordFailures*/ false, state);
         }
     }
     function tryLoadModuleUsingRootDirs(extensions, moduleName, containingDirectory, loader, state) {
@@ -40646,7 +41627,7 @@
     ts.tryResolveJSModule = tryResolveJSModule;
     var jsOnlyExtensions = [Extensions.JavaScript];
     var tsExtensions = [Extensions.TypeScript, Extensions.JavaScript];
-    var tsPlusJsonExtensions = __spreadArray(__spreadArray([], tsExtensions), [Extensions.Json]);
+    var tsPlusJsonExtensions = __spreadArray(__spreadArray([], tsExtensions, true), [Extensions.Json], false);
     var tsconfigExtensions = [Extensions.TSConfig];
     function tryResolveJSModuleWorker(moduleName, initialDir, host) {
         return nodeModuleNameResolverWorker(moduleName, initialDir, { moduleResolution: ts.ModuleResolutionKind.NodeJs, allowJs: true }, host, /*cache*/ undefined, jsOnlyExtensions, /*redirectedReferences*/ undefined);
@@ -40937,7 +41918,7 @@
             if (state.traceEnabled) {
                 trace(state.host, ts.Diagnostics.package_json_has_a_typesVersions_entry_0_that_matches_compiler_version_1_looking_for_a_pattern_to_match_module_name_2, versionPaths.version, ts.version, moduleName);
             }
-            var result = tryLoadModuleUsingPaths(extensions, moduleName, candidate, versionPaths.paths, loader, onlyRecordFailuresForPackageFile || onlyRecordFailuresForIndex, state);
+            var result = tryLoadModuleUsingPaths(extensions, moduleName, candidate, versionPaths.paths, /*pathPatterns*/ undefined, loader, onlyRecordFailuresForPackageFile || onlyRecordFailuresForIndex, state);
             if (result) {
                 return removeIgnoredPackageId(result.value);
             }
@@ -41044,7 +42025,7 @@
                     trace(state.host, ts.Diagnostics.package_json_has_a_typesVersions_entry_0_that_matches_compiler_version_1_looking_for_a_pattern_to_match_module_name_2, packageInfo.versionPaths.version, ts.version, rest);
                 }
                 var packageDirectoryExists = nodeModulesDirectoryExists && ts.directoryProbablyExists(packageDirectory, state.host);
-                var fromPaths = tryLoadModuleUsingPaths(extensions, rest, packageDirectory, packageInfo.versionPaths.paths, loader, !packageDirectoryExists, state);
+                var fromPaths = tryLoadModuleUsingPaths(extensions, rest, packageDirectory, packageInfo.versionPaths.paths, /*pathPatterns*/ undefined, loader, !packageDirectoryExists, state);
                 if (fromPaths) {
                     return fromPaths.value;
                 }
@@ -41052,8 +42033,9 @@
         }
         return loader(extensions, candidate, !nodeModulesDirectoryExists, state);
     }
-    function tryLoadModuleUsingPaths(extensions, moduleName, baseDirectory, paths, loader, onlyRecordFailures, state) {
-        var matchedPattern = ts.matchPatternOrExact(ts.getOwnKeys(paths), moduleName);
+    function tryLoadModuleUsingPaths(extensions, moduleName, baseDirectory, paths, pathPatterns, loader, onlyRecordFailures, state) {
+        pathPatterns || (pathPatterns = ts.tryParsePatterns(paths));
+        var matchedPattern = ts.matchPatternOrExact(pathPatterns, moduleName);
         if (matchedPattern) {
             var matchedStar_1 = ts.isString(matchedPattern) ? undefined : ts.matchedText(matchedPattern, moduleName);
             var matchedPatternText = ts.isString(matchedPattern) ? matchedPattern : ts.patternText(matchedPattern);
@@ -41228,26 +42210,26 @@
         // A module is uninstantiated if it contains only
         switch (node.kind) {
             // 1. interface declarations, type alias declarations
-            case 254 /* InterfaceDeclaration */:
-            case 255 /* TypeAliasDeclaration */:
+            case 256 /* InterfaceDeclaration */:
+            case 257 /* TypeAliasDeclaration */:
                 return 0 /* NonInstantiated */;
             // 2. const enum declarations
-            case 256 /* EnumDeclaration */:
+            case 258 /* EnumDeclaration */:
                 if (ts.isEnumConst(node)) {
                     return 2 /* ConstEnumOnly */;
                 }
                 break;
             // 3. non-exported import declarations
-            case 262 /* ImportDeclaration */:
-            case 261 /* ImportEqualsDeclaration */:
+            case 264 /* ImportDeclaration */:
+            case 263 /* ImportEqualsDeclaration */:
                 if (!(ts.hasSyntacticModifier(node, 1 /* Export */))) {
                     return 0 /* NonInstantiated */;
                 }
                 break;
             // 4. Export alias declarations pointing at only uninstantiated modules or things uninstantiated modules contain
-            case 268 /* ExportDeclaration */:
+            case 270 /* ExportDeclaration */:
                 var exportDeclaration = node;
-                if (!exportDeclaration.moduleSpecifier && exportDeclaration.exportClause && exportDeclaration.exportClause.kind === 269 /* NamedExports */) {
+                if (!exportDeclaration.moduleSpecifier && exportDeclaration.exportClause && exportDeclaration.exportClause.kind === 271 /* NamedExports */) {
                     var state = 0 /* NonInstantiated */;
                     for (var _i = 0, _a = exportDeclaration.exportClause.elements; _i < _a.length; _i++) {
                         var specifier = _a[_i];
@@ -41263,7 +42245,7 @@
                 }
                 break;
             // 5. other uninstantiated module declarations.
-            case 258 /* ModuleBlock */: {
+            case 260 /* ModuleBlock */: {
                 var state_1 = 0 /* NonInstantiated */;
                 ts.forEachChild(node, function (n) {
                     var childState = getModuleInstanceStateCached(n, visited);
@@ -41285,9 +42267,9 @@
                 });
                 return state_1;
             }
-            case 257 /* ModuleDeclaration */:
+            case 259 /* ModuleDeclaration */:
                 return getModuleInstanceState(node, visited);
-            case 78 /* Identifier */:
+            case 79 /* Identifier */:
                 // Only jsdoc typedef definition can exist in jsdoc namespace, and it should
                 // be considered the same as type alias
                 if (node.isInJSDocNamespace) {
@@ -41486,7 +42468,7 @@
         // Should not be called on a declaration with a computed property name,
         // unless it is a well known Symbol.
         function getDeclarationName(node) {
-            if (node.kind === 267 /* ExportAssignment */) {
+            if (node.kind === 269 /* ExportAssignment */) {
                 return node.isExportEquals ? "export=" /* ExportEquals */ : "default" /* Default */;
             }
             var name = ts.getNameOfDeclaration(node);
@@ -41495,7 +42477,7 @@
                     var moduleName = ts.getTextOfIdentifierOrLiteral(name);
                     return (ts.isGlobalScopeAugmentation(node) ? "__global" : "\"" + moduleName + "\"");
                 }
-                if (name.kind === 159 /* ComputedPropertyName */) {
+                if (name.kind === 160 /* ComputedPropertyName */) {
                     var nameExpression = name.expression;
                     // treat computed property names where expression is string/numeric literal as just string/numeric literal
                     if (ts.isStringOrNumericLiteralLike(nameExpression)) {
@@ -41521,36 +42503,36 @@
                 return ts.isPropertyNameLiteral(name) ? ts.getEscapedTextOfIdentifierOrLiteral(name) : undefined;
             }
             switch (node.kind) {
-                case 167 /* Constructor */:
+                case 169 /* Constructor */:
                     return "__constructor" /* Constructor */;
-                case 175 /* FunctionType */:
-                case 170 /* CallSignature */:
-                case 315 /* JSDocSignature */:
+                case 177 /* FunctionType */:
+                case 172 /* CallSignature */:
+                case 318 /* JSDocSignature */:
                     return "__call" /* Call */;
-                case 176 /* ConstructorType */:
-                case 171 /* ConstructSignature */:
+                case 178 /* ConstructorType */:
+                case 173 /* ConstructSignature */:
                     return "__new" /* New */;
-                case 172 /* IndexSignature */:
+                case 174 /* IndexSignature */:
                     return "__index" /* Index */;
-                case 268 /* ExportDeclaration */:
+                case 270 /* ExportDeclaration */:
                     return "__export" /* ExportStar */;
-                case 298 /* SourceFile */:
+                case 300 /* SourceFile */:
                     // json file should behave as
                     // module.exports = ...
                     return "export=" /* ExportEquals */;
-                case 217 /* BinaryExpression */:
+                case 219 /* BinaryExpression */:
                     if (ts.getAssignmentDeclarationKind(node) === 2 /* ModuleExports */) {
                         // module.exports = ...
                         return "export=" /* ExportEquals */;
                     }
                     ts.Debug.fail("Unknown binary declaration kind");
                     break;
-                case 309 /* JSDocFunctionType */:
+                case 312 /* JSDocFunctionType */:
                     return (ts.isJSDocConstructSignature(node) ? "__new" /* New */ : "__call" /* Call */);
-                case 161 /* Parameter */:
+                case 162 /* Parameter */:
                     // Parameters with names are handled at the top of this function.  Parameters
                     // without names can only come from JSDocFunctionTypes.
-                    ts.Debug.assert(node.parent.kind === 309 /* JSDocFunctionType */, "Impossible parameter parent kind", function () { return "parent is: " + (ts.SyntaxKind ? ts.SyntaxKind[node.parent.kind] : node.parent.kind) + ", expected JSDocFunctionType"; });
+                    ts.Debug.assert(node.parent.kind === 312 /* JSDocFunctionType */, "Impossible parameter parent kind", function () { return "parent is: " + (ts.SyntaxKind ? ts.SyntaxKind[node.parent.kind] : node.parent.kind) + ", expected JSDocFunctionType"; });
                     var functionType = node.parent;
                     var index = functionType.parameters.indexOf(node);
                     return "arg" + index;
@@ -41567,11 +42549,13 @@
          * @param includes - The SymbolFlags that node has in addition to its declaration type (eg: export, ambient, etc.)
          * @param excludes - The flags which node cannot be declared alongside in a symbol table. Used to report forbidden declarations.
          */
-        function declareSymbol(symbolTable, parent, node, includes, excludes, isReplaceableByMethod) {
-            ts.Debug.assert(!ts.hasDynamicName(node));
+        function declareSymbol(symbolTable, parent, node, includes, excludes, isReplaceableByMethod, isComputedName) {
+            ts.Debug.assert(isComputedName || !ts.hasDynamicName(node));
             var isDefaultExport = ts.hasSyntacticModifier(node, 512 /* Default */) || ts.isExportSpecifier(node) && node.name.escapedText === "default";
             // The exported symbol for an export default function/class node is always named "default"
-            var name = isDefaultExport && parent ? "default" /* Default */ : getDeclarationName(node);
+            var name = isComputedName ? "__computed" /* Computed */
+                : isDefaultExport && parent ? "default" /* Default */
+                    : getDeclarationName(node);
             var symbol;
             if (name === undefined) {
                 symbol = createSymbol(0 /* None */, "__missing" /* Missing */);
@@ -41650,7 +42634,7 @@
                                 // 1. multiple export default of class declaration or function declaration by checking NodeFlags.Default
                                 // 2. multiple export default of export assignment. This one doesn't have NodeFlags.Default on (as export default doesn't considered as modifiers)
                                 if (symbol.declarations && symbol.declarations.length &&
-                                    (node.kind === 267 /* ExportAssignment */ && !node.isExportEquals)) {
+                                    (node.kind === 269 /* ExportAssignment */ && !node.isExportEquals)) {
                                     message_1 = ts.Diagnostics.A_module_cannot_have_multiple_default_exports;
                                     messageNeedsName_1 = false;
                                     multipleDefaultExports_1 = true;
@@ -41672,7 +42656,7 @@
                             }
                         });
                         var diag = createDiagnosticForNode(declarationName_1, message_1, messageNeedsName_1 ? getDisplayName(node) : undefined);
-                        file.bindDiagnostics.push(ts.addRelatedInfo.apply(void 0, __spreadArray([diag], relatedInformation_1)));
+                        file.bindDiagnostics.push(ts.addRelatedInfo.apply(void 0, __spreadArray([diag], relatedInformation_1, false)));
                         symbol = createSymbol(0 /* None */, name);
                     }
                 }
@@ -41689,7 +42673,7 @@
         function declareModuleMember(node, symbolFlags, symbolExcludes) {
             var hasExportModifier = !!(ts.getCombinedModifierFlags(node) & 1 /* Export */) || jsdocTreatAsExported(node);
             if (symbolFlags & 2097152 /* Alias */) {
-                if (node.kind === 271 /* ExportSpecifier */ || (node.kind === 261 /* ImportEqualsDeclaration */ && hasExportModifier)) {
+                if (node.kind === 273 /* ExportSpecifier */ || (node.kind === 263 /* ImportEqualsDeclaration */ && hasExportModifier)) {
                     return declareSymbol(container.symbol.exports, container.symbol, node, symbolFlags, symbolExcludes);
                 }
                 else {
@@ -41778,7 +42762,7 @@
             // for it.  We must clear this so we don't accidentally move any stale data forward from
             // a previous compilation.
             if (containerFlags & 1 /* IsContainer */) {
-                if (node.kind !== 210 /* ArrowFunction */) {
+                if (node.kind !== 212 /* ArrowFunction */) {
                     thisParentContainer = container;
                 }
                 container = blockScopeContainer = node;
@@ -41811,7 +42795,7 @@
                 }
                 // We create a return control flow graph for IIFEs and constructors. For constructors
                 // we use the return control flow graph in strict property initialization checks.
-                currentReturnTarget = isIIFE || node.kind === 167 /* Constructor */ || (ts.isInJSFile(node) && (node.kind === 252 /* FunctionDeclaration */ || node.kind === 209 /* FunctionExpression */)) ? createBranchLabel() : undefined;
+                currentReturnTarget = isIIFE || node.kind === 169 /* Constructor */ || node.kind === 168 /* ClassStaticBlockDeclaration */ || (ts.isInJSFile(node) && (node.kind === 254 /* FunctionDeclaration */ || node.kind === 211 /* FunctionExpression */)) ? createBranchLabel() : undefined;
                 currentExceptionTarget = undefined;
                 currentBreakTarget = undefined;
                 currentContinueTarget = undefined;
@@ -41826,14 +42810,14 @@
                         node.flags |= 512 /* HasExplicitReturn */;
                     node.endFlowNode = currentFlow;
                 }
-                if (node.kind === 298 /* SourceFile */) {
+                if (node.kind === 300 /* SourceFile */) {
                     node.flags |= emitFlags;
                     node.endFlowNode = currentFlow;
                 }
                 if (currentReturnTarget) {
                     addAntecedent(currentReturnTarget, currentFlow);
                     currentFlow = finishFlowLabel(currentReturnTarget);
-                    if (node.kind === 167 /* Constructor */ || (ts.isInJSFile(node) && (node.kind === 252 /* FunctionDeclaration */ || node.kind === 209 /* FunctionExpression */))) {
+                    if (node.kind === 169 /* Constructor */ || node.kind === 168 /* ClassStaticBlockDeclaration */ || (ts.isInJSFile(node) && (node.kind === 254 /* FunctionDeclaration */ || node.kind === 211 /* FunctionExpression */))) {
                         node.returnFlowNode = currentFlow;
                     }
                 }
@@ -41860,8 +42844,8 @@
             blockScopeContainer = savedBlockScopeContainer;
         }
         function bindEachFunctionsFirst(nodes) {
-            bindEach(nodes, function (n) { return n.kind === 252 /* FunctionDeclaration */ ? bind(n) : undefined; });
-            bindEach(nodes, function (n) { return n.kind !== 252 /* FunctionDeclaration */ ? bind(n) : undefined; });
+            bindEach(nodes, function (n) { return n.kind === 254 /* FunctionDeclaration */ ? bind(n) : undefined; });
+            bindEach(nodes, function (n) { return n.kind !== 254 /* FunctionDeclaration */ ? bind(n) : undefined; });
         }
         function bindEach(nodes, bindFunction) {
             if (bindFunction === void 0) { bindFunction = bind; }
@@ -41884,59 +42868,59 @@
                 inAssignmentPattern = saveInAssignmentPattern;
                 return;
             }
-            if (node.kind >= 233 /* FirstStatement */ && node.kind <= 249 /* LastStatement */ && !options.allowUnreachableCode) {
+            if (node.kind >= 235 /* FirstStatement */ && node.kind <= 251 /* LastStatement */ && !options.allowUnreachableCode) {
                 node.flowNode = currentFlow;
             }
             switch (node.kind) {
-                case 237 /* WhileStatement */:
+                case 239 /* WhileStatement */:
                     bindWhileStatement(node);
                     break;
-                case 236 /* DoStatement */:
+                case 238 /* DoStatement */:
                     bindDoStatement(node);
                     break;
-                case 238 /* ForStatement */:
+                case 240 /* ForStatement */:
                     bindForStatement(node);
                     break;
-                case 239 /* ForInStatement */:
-                case 240 /* ForOfStatement */:
+                case 241 /* ForInStatement */:
+                case 242 /* ForOfStatement */:
                     bindForInOrForOfStatement(node);
                     break;
-                case 235 /* IfStatement */:
+                case 237 /* IfStatement */:
                     bindIfStatement(node);
                     break;
-                case 243 /* ReturnStatement */:
-                case 247 /* ThrowStatement */:
+                case 245 /* ReturnStatement */:
+                case 249 /* ThrowStatement */:
                     bindReturnOrThrow(node);
                     break;
-                case 242 /* BreakStatement */:
-                case 241 /* ContinueStatement */:
+                case 244 /* BreakStatement */:
+                case 243 /* ContinueStatement */:
                     bindBreakOrContinueStatement(node);
                     break;
-                case 248 /* TryStatement */:
+                case 250 /* TryStatement */:
                     bindTryStatement(node);
                     break;
-                case 245 /* SwitchStatement */:
+                case 247 /* SwitchStatement */:
                     bindSwitchStatement(node);
                     break;
-                case 259 /* CaseBlock */:
+                case 261 /* CaseBlock */:
                     bindCaseBlock(node);
                     break;
-                case 285 /* CaseClause */:
+                case 287 /* CaseClause */:
                     bindCaseClause(node);
                     break;
-                case 234 /* ExpressionStatement */:
+                case 236 /* ExpressionStatement */:
                     bindExpressionStatement(node);
                     break;
-                case 246 /* LabeledStatement */:
+                case 248 /* LabeledStatement */:
                     bindLabeledStatement(node);
                     break;
-                case 215 /* PrefixUnaryExpression */:
+                case 217 /* PrefixUnaryExpression */:
                     bindPrefixUnaryExpressionFlow(node);
                     break;
-                case 216 /* PostfixUnaryExpression */:
+                case 218 /* PostfixUnaryExpression */:
                     bindPostfixUnaryExpressionFlow(node);
                     break;
-                case 217 /* BinaryExpression */:
+                case 219 /* BinaryExpression */:
                     if (ts.isDestructuringAssignment(node)) {
                         // Carry over whether we are in an assignment pattern to
                         // binary expressions that could actually be an initializer
@@ -41946,47 +42930,47 @@
                     }
                     bindBinaryExpressionFlow(node);
                     break;
-                case 211 /* DeleteExpression */:
+                case 213 /* DeleteExpression */:
                     bindDeleteExpressionFlow(node);
                     break;
-                case 218 /* ConditionalExpression */:
+                case 220 /* ConditionalExpression */:
                     bindConditionalExpressionFlow(node);
                     break;
-                case 250 /* VariableDeclaration */:
+                case 252 /* VariableDeclaration */:
                     bindVariableDeclarationFlow(node);
                     break;
-                case 202 /* PropertyAccessExpression */:
-                case 203 /* ElementAccessExpression */:
+                case 204 /* PropertyAccessExpression */:
+                case 205 /* ElementAccessExpression */:
                     bindAccessExpressionFlow(node);
                     break;
-                case 204 /* CallExpression */:
+                case 206 /* CallExpression */:
                     bindCallExpressionFlow(node);
                     break;
-                case 226 /* NonNullExpression */:
+                case 228 /* NonNullExpression */:
                     bindNonNullExpressionFlow(node);
                     break;
-                case 335 /* JSDocTypedefTag */:
-                case 328 /* JSDocCallbackTag */:
-                case 329 /* JSDocEnumTag */:
+                case 340 /* JSDocTypedefTag */:
+                case 333 /* JSDocCallbackTag */:
+                case 334 /* JSDocEnumTag */:
                     bindJSDocTypeAlias(node);
                     break;
                 // In source files and blocks, bind functions first to match hoisting that occurs at runtime
-                case 298 /* SourceFile */: {
+                case 300 /* SourceFile */: {
                     bindEachFunctionsFirst(node.statements);
                     bind(node.endOfFileToken);
                     break;
                 }
-                case 231 /* Block */:
-                case 258 /* ModuleBlock */:
+                case 233 /* Block */:
+                case 260 /* ModuleBlock */:
                     bindEachFunctionsFirst(node.statements);
                     break;
-                case 199 /* BindingElement */:
+                case 201 /* BindingElement */:
                     bindBindingElementFlow(node);
                     break;
-                case 201 /* ObjectLiteralExpression */:
-                case 200 /* ArrayLiteralExpression */:
-                case 289 /* PropertyAssignment */:
-                case 221 /* SpreadElement */:
+                case 203 /* ObjectLiteralExpression */:
+                case 202 /* ArrayLiteralExpression */:
+                case 291 /* PropertyAssignment */:
+                case 223 /* SpreadElement */:
                     // Carry over whether we are in an assignment pattern of Object and Array literals
                     // as well as their children that are valid assignment targets.
                     inAssignmentPattern = saveInAssignmentPattern;
@@ -42000,22 +42984,22 @@
         }
         function isNarrowingExpression(expr) {
             switch (expr.kind) {
-                case 78 /* Identifier */:
-                case 79 /* PrivateIdentifier */:
-                case 107 /* ThisKeyword */:
-                case 202 /* PropertyAccessExpression */:
-                case 203 /* ElementAccessExpression */:
+                case 79 /* Identifier */:
+                case 80 /* PrivateIdentifier */:
+                case 108 /* ThisKeyword */:
+                case 204 /* PropertyAccessExpression */:
+                case 205 /* ElementAccessExpression */:
                     return containsNarrowableReference(expr);
-                case 204 /* CallExpression */:
+                case 206 /* CallExpression */:
                     return hasNarrowableArgument(expr);
-                case 208 /* ParenthesizedExpression */:
-                case 226 /* NonNullExpression */:
+                case 210 /* ParenthesizedExpression */:
+                case 228 /* NonNullExpression */:
                     return isNarrowingExpression(expr.expression);
-                case 217 /* BinaryExpression */:
+                case 219 /* BinaryExpression */:
                     return isNarrowingBinaryExpression(expr);
-                case 215 /* PrefixUnaryExpression */:
+                case 217 /* PrefixUnaryExpression */:
                     return expr.operator === 53 /* ExclamationToken */ && isNarrowingExpression(expr.operand);
-                case 212 /* TypeOfExpression */:
+                case 214 /* TypeOfExpression */:
                     return isNarrowingExpression(expr.expression);
             }
             return false;
@@ -42039,7 +43023,7 @@
                     }
                 }
             }
-            if (expr.expression.kind === 202 /* PropertyAccessExpression */ &&
+            if (expr.expression.kind === 204 /* PropertyAccessExpression */ &&
                 containsNarrowableReference(expr.expression.expression)) {
                 return true;
             }
@@ -42048,15 +43032,12 @@
         function isNarrowingTypeofOperands(expr1, expr2) {
             return ts.isTypeOfExpression(expr1) && isNarrowableOperand(expr1.expression) && ts.isStringLiteralLike(expr2);
         }
-        function isNarrowableInOperands(left, right) {
-            return ts.isStringLiteralLike(left) && isNarrowingExpression(right);
-        }
         function isNarrowingBinaryExpression(expr) {
             switch (expr.operatorToken.kind) {
-                case 62 /* EqualsToken */:
-                case 74 /* BarBarEqualsToken */:
-                case 75 /* AmpersandAmpersandEqualsToken */:
-                case 76 /* QuestionQuestionEqualsToken */:
+                case 63 /* EqualsToken */:
+                case 75 /* BarBarEqualsToken */:
+                case 76 /* AmpersandAmpersandEqualsToken */:
+                case 77 /* QuestionQuestionEqualsToken */:
                     return containsNarrowableReference(expr.left);
                 case 34 /* EqualsEqualsToken */:
                 case 35 /* ExclamationEqualsToken */:
@@ -42064,10 +43045,10 @@
                 case 37 /* ExclamationEqualsEqualsToken */:
                     return isNarrowableOperand(expr.left) || isNarrowableOperand(expr.right) ||
                         isNarrowingTypeofOperands(expr.right, expr.left) || isNarrowingTypeofOperands(expr.left, expr.right);
-                case 101 /* InstanceOfKeyword */:
+                case 102 /* InstanceOfKeyword */:
                     return isNarrowableOperand(expr.left);
-                case 100 /* InKeyword */:
-                    return isNarrowableInOperands(expr.left, expr.right);
+                case 101 /* InKeyword */:
+                    return isNarrowingExpression(expr.right);
                 case 27 /* CommaToken */:
                     return isNarrowingExpression(expr.right);
             }
@@ -42075,11 +43056,11 @@
         }
         function isNarrowableOperand(expr) {
             switch (expr.kind) {
-                case 208 /* ParenthesizedExpression */:
+                case 210 /* ParenthesizedExpression */:
                     return isNarrowableOperand(expr.expression);
-                case 217 /* BinaryExpression */:
+                case 219 /* BinaryExpression */:
                     switch (expr.operatorToken.kind) {
-                        case 62 /* EqualsToken */:
+                        case 63 /* EqualsToken */:
                             return isNarrowableOperand(expr.left);
                         case 27 /* CommaToken */:
                             return isNarrowableOperand(expr.right);
@@ -42113,8 +43094,8 @@
             if (!expression) {
                 return flags & 32 /* TrueCondition */ ? antecedent : unreachableFlow;
             }
-            if ((expression.kind === 109 /* TrueKeyword */ && flags & 64 /* FalseCondition */ ||
-                expression.kind === 94 /* FalseKeyword */ && flags & 32 /* TrueCondition */) &&
+            if ((expression.kind === 110 /* TrueKeyword */ && flags & 64 /* FalseCondition */ ||
+                expression.kind === 95 /* FalseKeyword */ && flags & 32 /* TrueCondition */) &&
                 !ts.isExpressionOfOptionalChainRoot(expression) && !ts.isNullishCoalesce(expression.parent)) {
                 return unreachableFlow;
             }
@@ -42153,26 +43134,26 @@
         function isStatementCondition(node) {
             var parent = node.parent;
             switch (parent.kind) {
-                case 235 /* IfStatement */:
-                case 237 /* WhileStatement */:
-                case 236 /* DoStatement */:
+                case 237 /* IfStatement */:
+                case 239 /* WhileStatement */:
+                case 238 /* DoStatement */:
                     return parent.expression === node;
-                case 238 /* ForStatement */:
-                case 218 /* ConditionalExpression */:
+                case 240 /* ForStatement */:
+                case 220 /* ConditionalExpression */:
                     return parent.condition === node;
             }
             return false;
         }
         function isLogicalExpression(node) {
             while (true) {
-                if (node.kind === 208 /* ParenthesizedExpression */) {
+                if (node.kind === 210 /* ParenthesizedExpression */) {
                     node = node.expression;
                 }
-                else if (node.kind === 215 /* PrefixUnaryExpression */ && node.operator === 53 /* ExclamationToken */) {
+                else if (node.kind === 217 /* PrefixUnaryExpression */ && node.operator === 53 /* ExclamationToken */) {
                     node = node.operand;
                 }
                 else {
-                    return node.kind === 217 /* BinaryExpression */ && (node.operatorToken.kind === 55 /* AmpersandAmpersandToken */ ||
+                    return node.kind === 219 /* BinaryExpression */ && (node.operatorToken.kind === 55 /* AmpersandAmpersandToken */ ||
                         node.operatorToken.kind === 56 /* BarBarToken */ ||
                         node.operatorToken.kind === 60 /* QuestionQuestionToken */);
                 }
@@ -42219,7 +43200,7 @@
         }
         function setContinueTarget(node, target) {
             var label = activeLabelList;
-            while (label && node.parent.kind === 246 /* LabeledStatement */) {
+            while (label && node.parent.kind === 248 /* LabeledStatement */) {
                 label.continueTarget = target;
                 label = label.next;
                 node = node.parent;
@@ -42270,12 +43251,12 @@
             bind(node.expression);
             addAntecedent(preLoopLabel, currentFlow);
             currentFlow = preLoopLabel;
-            if (node.kind === 240 /* ForOfStatement */) {
+            if (node.kind === 242 /* ForOfStatement */) {
                 bind(node.awaitModifier);
             }
             addAntecedent(postLoopLabel, currentFlow);
             bind(node.initializer);
-            if (node.initializer.kind !== 251 /* VariableDeclarationList */) {
+            if (node.initializer.kind !== 253 /* VariableDeclarationList */) {
                 bindAssignmentTargetFlow(node.initializer);
             }
             bindIterativeStatement(node.statement, postLoopLabel, preLoopLabel);
@@ -42297,7 +43278,7 @@
         }
         function bindReturnOrThrow(node) {
             bind(node.expression);
-            if (node.kind === 243 /* ReturnStatement */) {
+            if (node.kind === 245 /* ReturnStatement */) {
                 hasExplicitReturn = true;
                 if (currentReturnTarget) {
                     addAntecedent(currentReturnTarget, currentFlow);
@@ -42314,7 +43295,7 @@
             return undefined;
         }
         function bindBreakOrContinueFlow(node, breakTarget, continueTarget) {
-            var flowLabel = node.kind === 242 /* BreakStatement */ ? breakTarget : continueTarget;
+            var flowLabel = node.kind === 244 /* BreakStatement */ ? breakTarget : continueTarget;
             if (flowLabel) {
                 addAntecedent(flowLabel, currentFlow);
                 currentFlow = unreachableFlow;
@@ -42419,7 +43400,7 @@
             preSwitchCaseFlow = currentFlow;
             bind(node.caseBlock);
             addAntecedent(postSwitchLabel, currentFlow);
-            var hasDefault = ts.forEach(node.caseBlock.clauses, function (c) { return c.kind === 286 /* DefaultClause */; });
+            var hasDefault = ts.forEach(node.caseBlock.clauses, function (c) { return c.kind === 288 /* DefaultClause */; });
             // We mark a switch statement as possibly exhaustive if it has no default clause and if all
             // case clauses have unreachable end points (e.g. they all return). Note, we no longer need
             // this property in control flow analysis, it's there only for backwards compatibility.
@@ -42467,9 +43448,9 @@
         function maybeBindExpressionFlowIfCall(node) {
             // A top level or LHS of comma expression call expression with a dotted function name and at least one argument
             // is potentially an assertion and is therefore included in the control flow.
-            if (node.kind === 204 /* CallExpression */) {
+            if (node.kind === 206 /* CallExpression */) {
                 var call = node;
-                if (call.expression.kind !== 105 /* SuperKeyword */ && ts.isDottedName(call.expression)) {
+                if (call.expression.kind !== 106 /* SuperKeyword */ && ts.isDottedName(call.expression)) {
                     currentFlow = createFlowCall(currentFlow, call);
                 }
             }
@@ -42493,7 +43474,7 @@
             currentFlow = finishFlowLabel(postStatementLabel);
         }
         function bindDestructuringTargetFlow(node) {
-            if (node.kind === 217 /* BinaryExpression */ && node.operatorToken.kind === 62 /* EqualsToken */) {
+            if (node.kind === 219 /* BinaryExpression */ && node.operatorToken.kind === 63 /* EqualsToken */) {
                 bindAssignmentTargetFlow(node.left);
             }
             else {
@@ -42504,10 +43485,10 @@
             if (isNarrowableReference(node)) {
                 currentFlow = createFlowMutation(16 /* Assignment */, currentFlow, node);
             }
-            else if (node.kind === 200 /* ArrayLiteralExpression */) {
+            else if (node.kind === 202 /* ArrayLiteralExpression */) {
                 for (var _i = 0, _a = node.elements; _i < _a.length; _i++) {
                     var e = _a[_i];
-                    if (e.kind === 221 /* SpreadElement */) {
+                    if (e.kind === 223 /* SpreadElement */) {
                         bindAssignmentTargetFlow(e.expression);
                     }
                     else {
@@ -42515,16 +43496,16 @@
                     }
                 }
             }
-            else if (node.kind === 201 /* ObjectLiteralExpression */) {
+            else if (node.kind === 203 /* ObjectLiteralExpression */) {
                 for (var _b = 0, _c = node.properties; _b < _c.length; _b++) {
                     var p = _c[_b];
-                    if (p.kind === 289 /* PropertyAssignment */) {
+                    if (p.kind === 291 /* PropertyAssignment */) {
                         bindDestructuringTargetFlow(p.initializer);
                     }
-                    else if (p.kind === 290 /* ShorthandPropertyAssignment */) {
+                    else if (p.kind === 292 /* ShorthandPropertyAssignment */) {
                         bindAssignmentTargetFlow(p.name);
                     }
-                    else if (p.kind === 291 /* SpreadAssignment */) {
+                    else if (p.kind === 293 /* SpreadAssignment */) {
                         bindAssignmentTargetFlow(p.expression);
                     }
                 }
@@ -42532,7 +43513,7 @@
         }
         function bindLogicalLikeExpression(node, trueTarget, falseTarget) {
             var preRightLabel = createBranchLabel();
-            if (node.operatorToken.kind === 55 /* AmpersandAmpersandToken */ || node.operatorToken.kind === 75 /* AmpersandAmpersandEqualsToken */) {
+            if (node.operatorToken.kind === 55 /* AmpersandAmpersandToken */ || node.operatorToken.kind === 76 /* AmpersandAmpersandEqualsToken */) {
                 bindCondition(node.left, preRightLabel, falseTarget);
             }
             else {
@@ -42656,7 +43637,7 @@
                     var operator = node.operatorToken.kind;
                     if (ts.isAssignmentOperator(operator) && !ts.isAssignmentTarget(node)) {
                         bindAssignmentTargetFlow(node.left);
-                        if (operator === 62 /* EqualsToken */ && node.left.kind === 203 /* ElementAccessExpression */) {
+                        if (operator === 63 /* EqualsToken */ && node.left.kind === 205 /* ElementAccessExpression */) {
                             var elementAccess = node.left;
                             if (isNarrowableOperand(elementAccess.expression)) {
                                 currentFlow = createFlowMutation(256 /* ArrayMutation */, currentFlow, node);
@@ -42684,7 +43665,7 @@
         }
         function bindDeleteExpressionFlow(node) {
             bindEachChild(node);
-            if (node.expression.kind === 202 /* PropertyAccessExpression */) {
+            if (node.expression.kind === 204 /* PropertyAccessExpression */) {
                 bindAssignmentTargetFlow(node.expression);
             }
         }
@@ -42740,16 +43721,20 @@
             }
         }
         function bindJSDocTypeAlias(node) {
-            ts.setParent(node.tagName, node);
-            if (node.kind !== 329 /* JSDocEnumTag */ && node.fullName) {
+            bind(node.tagName);
+            if (node.kind !== 334 /* JSDocEnumTag */ && node.fullName) {
+                // don't bind the type name yet; that's delayed until delayedBindJSDocTypedefTag
                 ts.setParent(node.fullName, node);
                 ts.setParentRecursive(node.fullName, /*incremental*/ false);
             }
+            if (typeof node.comment !== "string") {
+                bindEach(node.comment);
+            }
         }
         function bindJSDocClassTag(node) {
             bindEachChild(node);
             var host = ts.getHostSignatureFromJSDoc(node);
-            if (host && host.kind !== 166 /* MethodDeclaration */) {
+            if (host && host.kind !== 167 /* MethodDeclaration */) {
                 addDeclarationToSymbol(host.symbol, host, 32 /* Class */);
             }
         }
@@ -42762,15 +43747,15 @@
         }
         function bindOptionalChainRest(node) {
             switch (node.kind) {
-                case 202 /* PropertyAccessExpression */:
+                case 204 /* PropertyAccessExpression */:
                     bind(node.questionDotToken);
                     bind(node.name);
                     break;
-                case 203 /* ElementAccessExpression */:
+                case 205 /* ElementAccessExpression */:
                     bind(node.questionDotToken);
                     bind(node.argumentExpression);
                     break;
-                case 204 /* CallExpression */:
+                case 206 /* CallExpression */:
                     bind(node.questionDotToken);
                     bindEach(node.typeArguments);
                     bindEach(node.arguments);
@@ -42835,19 +43820,19 @@
                 // an immediately invoked function expression (IIFE). Initialize the flowNode property to
                 // the current control flow (which includes evaluation of the IIFE arguments).
                 var expr = ts.skipParentheses(node.expression);
-                if (expr.kind === 209 /* FunctionExpression */ || expr.kind === 210 /* ArrowFunction */) {
+                if (expr.kind === 211 /* FunctionExpression */ || expr.kind === 212 /* ArrowFunction */) {
                     bindEach(node.typeArguments);
                     bindEach(node.arguments);
                     bind(node.expression);
                 }
                 else {
                     bindEachChild(node);
-                    if (node.expression.kind === 105 /* SuperKeyword */) {
+                    if (node.expression.kind === 106 /* SuperKeyword */) {
                         currentFlow = createFlowCall(currentFlow, node);
                     }
                 }
             }
-            if (node.expression.kind === 202 /* PropertyAccessExpression */) {
+            if (node.expression.kind === 204 /* PropertyAccessExpression */) {
                 var propertyAccess = node.expression;
                 if (ts.isIdentifier(propertyAccess.name) && isNarrowableOperand(propertyAccess.expression) && ts.isPushOrUnshiftIdentifier(propertyAccess.name)) {
                     currentFlow = createFlowMutation(256 /* ArrayMutation */, currentFlow, node);
@@ -42856,54 +43841,55 @@
         }
         function getContainerFlags(node) {
             switch (node.kind) {
-                case 222 /* ClassExpression */:
-                case 253 /* ClassDeclaration */:
-                case 256 /* EnumDeclaration */:
-                case 201 /* ObjectLiteralExpression */:
-                case 178 /* TypeLiteral */:
-                case 314 /* JSDocTypeLiteral */:
-                case 282 /* JsxAttributes */:
+                case 224 /* ClassExpression */:
+                case 255 /* ClassDeclaration */:
+                case 258 /* EnumDeclaration */:
+                case 203 /* ObjectLiteralExpression */:
+                case 180 /* TypeLiteral */:
+                case 317 /* JSDocTypeLiteral */:
+                case 284 /* JsxAttributes */:
                     return 1 /* IsContainer */;
-                case 254 /* InterfaceDeclaration */:
+                case 256 /* InterfaceDeclaration */:
                     return 1 /* IsContainer */ | 64 /* IsInterface */;
-                case 257 /* ModuleDeclaration */:
-                case 255 /* TypeAliasDeclaration */:
-                case 191 /* MappedType */:
+                case 259 /* ModuleDeclaration */:
+                case 257 /* TypeAliasDeclaration */:
+                case 193 /* MappedType */:
                     return 1 /* IsContainer */ | 32 /* HasLocals */;
-                case 298 /* SourceFile */:
+                case 300 /* SourceFile */:
                     return 1 /* IsContainer */ | 4 /* IsControlFlowContainer */ | 32 /* HasLocals */;
-                case 166 /* MethodDeclaration */:
+                case 167 /* MethodDeclaration */:
                     if (ts.isObjectLiteralOrClassExpressionMethod(node)) {
                         return 1 /* IsContainer */ | 4 /* IsControlFlowContainer */ | 32 /* HasLocals */ | 8 /* IsFunctionLike */ | 128 /* IsObjectLiteralOrClassExpressionMethod */;
                     }
                 // falls through
-                case 167 /* Constructor */:
-                case 252 /* FunctionDeclaration */:
-                case 165 /* MethodSignature */:
-                case 168 /* GetAccessor */:
-                case 169 /* SetAccessor */:
-                case 170 /* CallSignature */:
-                case 315 /* JSDocSignature */:
-                case 309 /* JSDocFunctionType */:
-                case 175 /* FunctionType */:
-                case 171 /* ConstructSignature */:
-                case 172 /* IndexSignature */:
-                case 176 /* ConstructorType */:
+                case 169 /* Constructor */:
+                case 254 /* FunctionDeclaration */:
+                case 166 /* MethodSignature */:
+                case 170 /* GetAccessor */:
+                case 171 /* SetAccessor */:
+                case 172 /* CallSignature */:
+                case 318 /* JSDocSignature */:
+                case 312 /* JSDocFunctionType */:
+                case 177 /* FunctionType */:
+                case 173 /* ConstructSignature */:
+                case 174 /* IndexSignature */:
+                case 178 /* ConstructorType */:
+                case 168 /* ClassStaticBlockDeclaration */:
                     return 1 /* IsContainer */ | 4 /* IsControlFlowContainer */ | 32 /* HasLocals */ | 8 /* IsFunctionLike */;
-                case 209 /* FunctionExpression */:
-                case 210 /* ArrowFunction */:
+                case 211 /* FunctionExpression */:
+                case 212 /* ArrowFunction */:
                     return 1 /* IsContainer */ | 4 /* IsControlFlowContainer */ | 32 /* HasLocals */ | 8 /* IsFunctionLike */ | 16 /* IsFunctionExpression */;
-                case 258 /* ModuleBlock */:
+                case 260 /* ModuleBlock */:
                     return 4 /* IsControlFlowContainer */;
-                case 164 /* PropertyDeclaration */:
+                case 165 /* PropertyDeclaration */:
                     return node.initializer ? 4 /* IsControlFlowContainer */ : 0;
-                case 288 /* CatchClause */:
-                case 238 /* ForStatement */:
-                case 239 /* ForInStatement */:
-                case 240 /* ForOfStatement */:
-                case 259 /* CaseBlock */:
+                case 290 /* CatchClause */:
+                case 240 /* ForStatement */:
+                case 241 /* ForInStatement */:
+                case 242 /* ForOfStatement */:
+                case 261 /* CaseBlock */:
                     return 2 /* IsBlockScopedContainer */;
-                case 231 /* Block */:
+                case 233 /* Block */:
                     // do not treat blocks directly inside a function as a block-scoped-container.
                     // Locals that reside in this block should go to the function locals. Otherwise 'x'
                     // would not appear to be a redeclaration of a block scoped local in the following
@@ -42920,7 +43906,7 @@
                     // By not creating a new block-scoped-container here, we ensure that both 'var x'
                     // and 'let x' go into the Function-container's locals, and we do get a collision
                     // conflict.
-                    return ts.isFunctionLike(node.parent) ? 0 /* None */ : 2 /* IsBlockScopedContainer */;
+                    return ts.isFunctionLike(node.parent) || ts.isClassStaticBlockDeclaration(node.parent) ? 0 /* None */ : 2 /* IsBlockScopedContainer */;
             }
             return 0 /* None */;
         }
@@ -42936,45 +43922,46 @@
                 // members are declared (for example, a member of a class will go into a specific
                 // symbol table depending on if it is static or not). We defer to specialized
                 // handlers to take care of declaring these child members.
-                case 257 /* ModuleDeclaration */:
+                case 259 /* ModuleDeclaration */:
                     return declareModuleMember(node, symbolFlags, symbolExcludes);
-                case 298 /* SourceFile */:
+                case 300 /* SourceFile */:
                     return declareSourceFileMember(node, symbolFlags, symbolExcludes);
-                case 222 /* ClassExpression */:
-                case 253 /* ClassDeclaration */:
+                case 224 /* ClassExpression */:
+                case 255 /* ClassDeclaration */:
                     return declareClassMember(node, symbolFlags, symbolExcludes);
-                case 256 /* EnumDeclaration */:
+                case 258 /* EnumDeclaration */:
                     return declareSymbol(container.symbol.exports, container.symbol, node, symbolFlags, symbolExcludes);
-                case 178 /* TypeLiteral */:
-                case 314 /* JSDocTypeLiteral */:
-                case 201 /* ObjectLiteralExpression */:
-                case 254 /* InterfaceDeclaration */:
-                case 282 /* JsxAttributes */:
+                case 180 /* TypeLiteral */:
+                case 317 /* JSDocTypeLiteral */:
+                case 203 /* ObjectLiteralExpression */:
+                case 256 /* InterfaceDeclaration */:
+                case 284 /* JsxAttributes */:
                     // Interface/Object-types always have their children added to the 'members' of
                     // their container. They are only accessible through an instance of their
                     // container, and are never in scope otherwise (even inside the body of the
                     // object / type / interface declaring them). An exception is type parameters,
                     // which are in scope without qualification (similar to 'locals').
                     return declareSymbol(container.symbol.members, container.symbol, node, symbolFlags, symbolExcludes);
-                case 175 /* FunctionType */:
-                case 176 /* ConstructorType */:
-                case 170 /* CallSignature */:
-                case 171 /* ConstructSignature */:
-                case 315 /* JSDocSignature */:
-                case 172 /* IndexSignature */:
-                case 166 /* MethodDeclaration */:
-                case 165 /* MethodSignature */:
-                case 167 /* Constructor */:
-                case 168 /* GetAccessor */:
-                case 169 /* SetAccessor */:
-                case 252 /* FunctionDeclaration */:
-                case 209 /* FunctionExpression */:
-                case 210 /* ArrowFunction */:
-                case 309 /* JSDocFunctionType */:
-                case 335 /* JSDocTypedefTag */:
-                case 328 /* JSDocCallbackTag */:
-                case 255 /* TypeAliasDeclaration */:
-                case 191 /* MappedType */:
+                case 177 /* FunctionType */:
+                case 178 /* ConstructorType */:
+                case 172 /* CallSignature */:
+                case 173 /* ConstructSignature */:
+                case 318 /* JSDocSignature */:
+                case 174 /* IndexSignature */:
+                case 167 /* MethodDeclaration */:
+                case 166 /* MethodSignature */:
+                case 169 /* Constructor */:
+                case 170 /* GetAccessor */:
+                case 171 /* SetAccessor */:
+                case 254 /* FunctionDeclaration */:
+                case 211 /* FunctionExpression */:
+                case 212 /* ArrowFunction */:
+                case 312 /* JSDocFunctionType */:
+                case 340 /* JSDocTypedefTag */:
+                case 333 /* JSDocCallbackTag */:
+                case 168 /* ClassStaticBlockDeclaration */:
+                case 257 /* TypeAliasDeclaration */:
+                case 193 /* MappedType */:
                     // All the children of these container types are never visible through another
                     // symbol (i.e. through another symbol's 'exports' or 'members').  Instead,
                     // they're only accessed 'lexically' (i.e. from code that exists underneath
@@ -42985,7 +43972,7 @@
             }
         }
         function declareClassMember(node, symbolFlags, symbolExcludes) {
-            return ts.hasSyntacticModifier(node, 32 /* Static */)
+            return ts.isStatic(node)
                 ? declareSymbol(container.symbol.exports, container.symbol, node, symbolFlags, symbolExcludes)
                 : declareSymbol(container.symbol.members, container.symbol, node, symbolFlags, symbolExcludes);
         }
@@ -43021,15 +44008,13 @@
                     var pattern = void 0;
                     if (node.name.kind === 10 /* StringLiteral */) {
                         var text = node.name.text;
-                        if (ts.hasZeroOrOneAsteriskCharacter(text)) {
-                            pattern = ts.tryParsePattern(text);
-                        }
-                        else {
+                        pattern = ts.tryParsePattern(text);
+                        if (pattern === undefined) {
                             errorOnFirstToken(node.name, ts.Diagnostics.Pattern_0_can_have_at_most_one_Asterisk_character, text);
                         }
                     }
                     var symbol = declareSymbolAndAddToSymbolTable(node, 512 /* ValueModule */, 110735 /* ValueModuleExcludes */);
-                    file.patternAmbientModules = ts.append(file.patternAmbientModules, pattern && { pattern: pattern, symbol: symbol });
+                    file.patternAmbientModules = ts.append(file.patternAmbientModules, pattern && !ts.isString(pattern) ? { pattern: pattern, symbol: symbol } : undefined);
                 }
             }
             else {
@@ -43075,7 +44060,7 @@
                 var seen = new ts.Map();
                 for (var _i = 0, _a = node.properties; _i < _a.length; _i++) {
                     var prop = _a[_i];
-                    if (prop.kind === 291 /* SpreadAssignment */ || prop.name.kind !== 78 /* Identifier */) {
+                    if (prop.kind === 293 /* SpreadAssignment */ || prop.name.kind !== 79 /* Identifier */) {
                         continue;
                     }
                     var identifier = prop.name;
@@ -43087,7 +44072,7 @@
                     //    c.IsAccessorDescriptor(previous) is true and IsDataDescriptor(propId.descriptor) is true.
                     //    d.IsAccessorDescriptor(previous) is true and IsAccessorDescriptor(propId.descriptor) is true
                     // and either both previous and propId.descriptor have[[Get]] fields or both previous and propId.descriptor have[[Set]] fields
-                    var currentKind = prop.kind === 289 /* PropertyAssignment */ || prop.kind === 290 /* ShorthandPropertyAssignment */ || prop.kind === 166 /* MethodDeclaration */
+                    var currentKind = prop.kind === 291 /* PropertyAssignment */ || prop.kind === 292 /* ShorthandPropertyAssignment */ || prop.kind === 167 /* MethodDeclaration */
                         ? 1 /* Property */
                         : 2 /* Accessor */;
                     var existingKind = seen.get(identifier.escapedText);
@@ -43119,10 +44104,10 @@
         }
         function bindBlockScopedDeclaration(node, symbolFlags, symbolExcludes) {
             switch (blockScopeContainer.kind) {
-                case 257 /* ModuleDeclaration */:
+                case 259 /* ModuleDeclaration */:
                     declareModuleMember(node, symbolFlags, symbolExcludes);
                     break;
-                case 298 /* SourceFile */:
+                case 300 /* SourceFile */:
                     if (ts.isExternalOrCommonJsModule(container)) {
                         declareModuleMember(node, symbolFlags, symbolExcludes);
                         break;
@@ -43190,7 +44175,7 @@
                         container = oldContainer;
                     }
                 }
-                else if (ts.isJSDocEnumTag(typeAlias) || !typeAlias.fullName || typeAlias.fullName.kind === 78 /* Identifier */) {
+                else if (ts.isJSDocEnumTag(typeAlias) || !typeAlias.fullName || typeAlias.fullName.kind === 79 /* Identifier */) {
                     parent = typeAlias.parent;
                     bindBlockScopedDeclaration(typeAlias, 524288 /* TypeAlias */, 788968 /* TypeAliasExcludes */);
                 }
@@ -43215,11 +44200,11 @@
                 !ts.isIdentifierName(node)) {
                 // strict mode identifiers
                 if (inStrictMode &&
-                    node.originalKeywordKind >= 116 /* FirstFutureReservedWord */ &&
-                    node.originalKeywordKind <= 124 /* LastFutureReservedWord */) {
+                    node.originalKeywordKind >= 117 /* FirstFutureReservedWord */ &&
+                    node.originalKeywordKind <= 125 /* LastFutureReservedWord */) {
                     file.bindDiagnostics.push(createDiagnosticForNode(node, getStrictModeIdentifierMessage(node), ts.declarationNameToString(node)));
                 }
-                else if (node.originalKeywordKind === 130 /* AwaitKeyword */) {
+                else if (node.originalKeywordKind === 131 /* AwaitKeyword */) {
                     if (ts.isExternalModule(file) && ts.isInTopLevelContext(node)) {
                         file.bindDiagnostics.push(createDiagnosticForNode(node, ts.Diagnostics.Identifier_expected_0_is_a_reserved_word_at_the_top_level_of_a_module, ts.declarationNameToString(node)));
                     }
@@ -43227,7 +44212,7 @@
                         file.bindDiagnostics.push(createDiagnosticForNode(node, ts.Diagnostics.Identifier_expected_0_is_a_reserved_word_that_cannot_be_used_here, ts.declarationNameToString(node)));
                     }
                 }
-                else if (node.originalKeywordKind === 124 /* YieldKeyword */ && node.flags & 8192 /* YieldContext */) {
+                else if (node.originalKeywordKind === 125 /* YieldKeyword */ && node.flags & 8192 /* YieldContext */) {
                     file.bindDiagnostics.push(createDiagnosticForNode(node, ts.Diagnostics.Identifier_expected_0_is_a_reserved_word_that_cannot_be_used_here, ts.declarationNameToString(node)));
                 }
             }
@@ -43269,7 +44254,7 @@
         }
         function checkStrictModeDeleteExpression(node) {
             // Grammar checking
-            if (inStrictMode && node.expression.kind === 78 /* Identifier */) {
+            if (inStrictMode && node.expression.kind === 79 /* Identifier */) {
                 // When a delete operator occurs within strict mode code, a SyntaxError is thrown if its
                 // UnaryExpression is a direct reference to a variable, function argument, or function name
                 var span = ts.getErrorSpanForNode(file, node.expression);
@@ -43280,7 +44265,7 @@
             return ts.isIdentifier(node) && (node.escapedText === "eval" || node.escapedText === "arguments");
         }
         function checkStrictModeEvalOrArguments(contextNode, name) {
-            if (name && name.kind === 78 /* Identifier */) {
+            if (name && name.kind === 79 /* Identifier */) {
                 var identifier = name;
                 if (isEvalOrArgumentsIdentifier(identifier)) {
                     // We check first if the name is inside class declaration or class expression; if so give explicit message
@@ -43294,7 +44279,7 @@
             // Provide specialized messages to help the user understand why we think they're in
             // strict mode.
             if (ts.getContainingClass(node)) {
-                return ts.Diagnostics.Invalid_use_of_0_Class_definitions_are_automatically_in_strict_mode;
+                return ts.Diagnostics.Code_contained_in_a_class_is_evaluated_in_JavaScript_s_strict_mode_which_does_not_allow_this_use_of_0_For_more_information_see_https_Colon_Slash_Slashdeveloper_mozilla_org_Slashen_US_Slashdocs_SlashWeb_SlashJavaScript_SlashReference_SlashStrict_mode;
             }
             if (file.externalModuleIndicator) {
                 return ts.Diagnostics.Invalid_use_of_0_Modules_are_automatically_in_strict_mode;
@@ -43321,9 +44306,9 @@
         function checkStrictModeFunctionDeclaration(node) {
             if (languageVersion < 2 /* ES2015 */) {
                 // Report error if function is not top level function declaration
-                if (blockScopeContainer.kind !== 298 /* SourceFile */ &&
-                    blockScopeContainer.kind !== 257 /* ModuleDeclaration */ &&
-                    !ts.isFunctionLike(blockScopeContainer)) {
+                if (blockScopeContainer.kind !== 300 /* SourceFile */ &&
+                    blockScopeContainer.kind !== 259 /* ModuleDeclaration */ &&
+                    !ts.isFunctionLikeOrClassStaticBlockDeclaration(blockScopeContainer)) {
                     // We check first if the name is inside class declaration or class expression; if so give explicit message
                     // otherwise report generic error message.
                     var errorSpan = ts.getErrorSpanForNode(file, node);
@@ -43417,7 +44402,7 @@
             // the current 'container' node when it changes. This helps us know which symbol table
             // a local should go into for example. Since terminal nodes are known not to have
             // children, as an optimization we don't process those.
-            if (node.kind > 157 /* LastToken */) {
+            if (node.kind > 158 /* LastToken */) {
                 var saveParent = parent;
                 parent = node;
                 var containerFlags = getContainerFlags(node);
@@ -43479,7 +44464,7 @@
         function bindWorker(node) {
             switch (node.kind) {
                 /* Strict mode checks */
-                case 78 /* Identifier */:
+                case 79 /* Identifier */:
                     // for typedef type names with namespaces, bind the new jsdoc type symbol here
                     // because it requires all containing namespaces to be in effect, namely the
                     // current "blockScopeContainer" needs to be set to its immediate namespace parent.
@@ -43492,24 +44477,24 @@
                         break;
                     }
                 // falls through
-                case 107 /* ThisKeyword */:
-                    if (currentFlow && (ts.isExpression(node) || parent.kind === 290 /* ShorthandPropertyAssignment */)) {
+                case 108 /* ThisKeyword */:
+                    if (currentFlow && (ts.isExpression(node) || parent.kind === 292 /* ShorthandPropertyAssignment */)) {
                         node.flowNode = currentFlow;
                     }
                     return checkContextualIdentifier(node);
-                case 158 /* QualifiedName */:
-                    if (currentFlow && parent.kind === 177 /* TypeQuery */) {
+                case 159 /* QualifiedName */:
+                    if (currentFlow && ts.isPartOfTypeQuery(node)) {
                         node.flowNode = currentFlow;
                     }
                     break;
-                case 227 /* MetaProperty */:
-                case 105 /* SuperKeyword */:
+                case 229 /* MetaProperty */:
+                case 106 /* SuperKeyword */:
                     node.flowNode = currentFlow;
                     break;
-                case 79 /* PrivateIdentifier */:
+                case 80 /* PrivateIdentifier */:
                     return checkPrivateIdentifier(node);
-                case 202 /* PropertyAccessExpression */:
-                case 203 /* ElementAccessExpression */:
+                case 204 /* PropertyAccessExpression */:
+                case 205 /* ElementAccessExpression */:
                     var expr = node;
                     if (currentFlow && isNarrowableReference(expr)) {
                         expr.flowNode = currentFlow;
@@ -43524,7 +44509,7 @@
                         declareSymbol(file.locals, /*parent*/ undefined, expr.expression, 1 /* FunctionScopedVariable */ | 134217728 /* ModuleExports */, 111550 /* FunctionScopedVariableExcludes */);
                     }
                     break;
-                case 217 /* BinaryExpression */:
+                case 219 /* BinaryExpression */:
                     var specialKind = ts.getAssignmentDeclarationKind(node);
                     switch (specialKind) {
                         case 1 /* ExportsProperty */:
@@ -43560,78 +44545,78 @@
                             ts.Debug.fail("Unknown binary expression special property assignment kind");
                     }
                     return checkStrictModeBinaryExpression(node);
-                case 288 /* CatchClause */:
+                case 290 /* CatchClause */:
                     return checkStrictModeCatchClause(node);
-                case 211 /* DeleteExpression */:
+                case 213 /* DeleteExpression */:
                     return checkStrictModeDeleteExpression(node);
                 case 8 /* NumericLiteral */:
                     return checkStrictModeNumericLiteral(node);
-                case 216 /* PostfixUnaryExpression */:
+                case 218 /* PostfixUnaryExpression */:
                     return checkStrictModePostfixUnaryExpression(node);
-                case 215 /* PrefixUnaryExpression */:
+                case 217 /* PrefixUnaryExpression */:
                     return checkStrictModePrefixUnaryExpression(node);
-                case 244 /* WithStatement */:
+                case 246 /* WithStatement */:
                     return checkStrictModeWithStatement(node);
-                case 246 /* LabeledStatement */:
+                case 248 /* LabeledStatement */:
                     return checkStrictModeLabeledStatement(node);
-                case 188 /* ThisType */:
+                case 190 /* ThisType */:
                     seenThisKeyword = true;
                     return;
-                case 173 /* TypePredicate */:
+                case 175 /* TypePredicate */:
                     break; // Binding the children will handle everything
-                case 160 /* TypeParameter */:
+                case 161 /* TypeParameter */:
                     return bindTypeParameter(node);
-                case 161 /* Parameter */:
+                case 162 /* Parameter */:
                     return bindParameter(node);
-                case 250 /* VariableDeclaration */:
+                case 252 /* VariableDeclaration */:
                     return bindVariableDeclarationOrBindingElement(node);
-                case 199 /* BindingElement */:
+                case 201 /* BindingElement */:
                     node.flowNode = currentFlow;
                     return bindVariableDeclarationOrBindingElement(node);
-                case 164 /* PropertyDeclaration */:
-                case 163 /* PropertySignature */:
+                case 165 /* PropertyDeclaration */:
+                case 164 /* PropertySignature */:
                     return bindPropertyWorker(node);
-                case 289 /* PropertyAssignment */:
-                case 290 /* ShorthandPropertyAssignment */:
+                case 291 /* PropertyAssignment */:
+                case 292 /* ShorthandPropertyAssignment */:
                     return bindPropertyOrMethodOrAccessor(node, 4 /* Property */, 0 /* PropertyExcludes */);
-                case 292 /* EnumMember */:
+                case 294 /* EnumMember */:
                     return bindPropertyOrMethodOrAccessor(node, 8 /* EnumMember */, 900095 /* EnumMemberExcludes */);
-                case 170 /* CallSignature */:
-                case 171 /* ConstructSignature */:
-                case 172 /* IndexSignature */:
+                case 172 /* CallSignature */:
+                case 173 /* ConstructSignature */:
+                case 174 /* IndexSignature */:
                     return declareSymbolAndAddToSymbolTable(node, 131072 /* Signature */, 0 /* None */);
-                case 166 /* MethodDeclaration */:
-                case 165 /* MethodSignature */:
+                case 167 /* MethodDeclaration */:
+                case 166 /* MethodSignature */:
                     // If this is an ObjectLiteralExpression method, then it sits in the same space
                     // as other properties in the object literal.  So we use SymbolFlags.PropertyExcludes
                     // so that it will conflict with any other object literal members with the same
                     // name.
                     return bindPropertyOrMethodOrAccessor(node, 8192 /* Method */ | (node.questionToken ? 16777216 /* Optional */ : 0 /* None */), ts.isObjectLiteralMethod(node) ? 0 /* PropertyExcludes */ : 103359 /* MethodExcludes */);
-                case 252 /* FunctionDeclaration */:
+                case 254 /* FunctionDeclaration */:
                     return bindFunctionDeclaration(node);
-                case 167 /* Constructor */:
+                case 169 /* Constructor */:
                     return declareSymbolAndAddToSymbolTable(node, 16384 /* Constructor */, /*symbolExcludes:*/ 0 /* None */);
-                case 168 /* GetAccessor */:
+                case 170 /* GetAccessor */:
                     return bindPropertyOrMethodOrAccessor(node, 32768 /* GetAccessor */, 46015 /* GetAccessorExcludes */);
-                case 169 /* SetAccessor */:
+                case 171 /* SetAccessor */:
                     return bindPropertyOrMethodOrAccessor(node, 65536 /* SetAccessor */, 78783 /* SetAccessorExcludes */);
-                case 175 /* FunctionType */:
-                case 309 /* JSDocFunctionType */:
-                case 315 /* JSDocSignature */:
-                case 176 /* ConstructorType */:
+                case 177 /* FunctionType */:
+                case 312 /* JSDocFunctionType */:
+                case 318 /* JSDocSignature */:
+                case 178 /* ConstructorType */:
                     return bindFunctionOrConstructorType(node);
-                case 178 /* TypeLiteral */:
-                case 314 /* JSDocTypeLiteral */:
-                case 191 /* MappedType */:
+                case 180 /* TypeLiteral */:
+                case 317 /* JSDocTypeLiteral */:
+                case 193 /* MappedType */:
                     return bindAnonymousTypeWorker(node);
-                case 322 /* JSDocClassTag */:
+                case 327 /* JSDocClassTag */:
                     return bindJSDocClassTag(node);
-                case 201 /* ObjectLiteralExpression */:
+                case 203 /* ObjectLiteralExpression */:
                     return bindObjectLiteralExpression(node);
-                case 209 /* FunctionExpression */:
-                case 210 /* ArrowFunction */:
+                case 211 /* FunctionExpression */:
+                case 212 /* ArrowFunction */:
                     return bindFunctionExpression(node);
-                case 204 /* CallExpression */:
+                case 206 /* CallExpression */:
                     var assignmentKind = ts.getAssignmentDeclarationKind(node);
                     switch (assignmentKind) {
                         case 7 /* ObjectDefinePropertyValue */:
@@ -43650,65 +44635,65 @@
                     }
                     break;
                 // Members of classes, interfaces, and modules
-                case 222 /* ClassExpression */:
-                case 253 /* ClassDeclaration */:
+                case 224 /* ClassExpression */:
+                case 255 /* ClassDeclaration */:
                     // All classes are automatically in strict mode in ES6.
                     inStrictMode = true;
                     return bindClassLikeDeclaration(node);
-                case 254 /* InterfaceDeclaration */:
+                case 256 /* InterfaceDeclaration */:
                     return bindBlockScopedDeclaration(node, 64 /* Interface */, 788872 /* InterfaceExcludes */);
-                case 255 /* TypeAliasDeclaration */:
+                case 257 /* TypeAliasDeclaration */:
                     return bindBlockScopedDeclaration(node, 524288 /* TypeAlias */, 788968 /* TypeAliasExcludes */);
-                case 256 /* EnumDeclaration */:
+                case 258 /* EnumDeclaration */:
                     return bindEnumDeclaration(node);
-                case 257 /* ModuleDeclaration */:
+                case 259 /* ModuleDeclaration */:
                     return bindModuleDeclaration(node);
                 // Jsx-attributes
-                case 282 /* JsxAttributes */:
+                case 284 /* JsxAttributes */:
                     return bindJsxAttributes(node);
-                case 281 /* JsxAttribute */:
+                case 283 /* JsxAttribute */:
                     return bindJsxAttribute(node, 4 /* Property */, 0 /* PropertyExcludes */);
                 // Imports and exports
-                case 261 /* ImportEqualsDeclaration */:
-                case 264 /* NamespaceImport */:
-                case 266 /* ImportSpecifier */:
-                case 271 /* ExportSpecifier */:
+                case 263 /* ImportEqualsDeclaration */:
+                case 266 /* NamespaceImport */:
+                case 268 /* ImportSpecifier */:
+                case 273 /* ExportSpecifier */:
                     return declareSymbolAndAddToSymbolTable(node, 2097152 /* Alias */, 2097152 /* AliasExcludes */);
-                case 260 /* NamespaceExportDeclaration */:
+                case 262 /* NamespaceExportDeclaration */:
                     return bindNamespaceExportDeclaration(node);
-                case 263 /* ImportClause */:
+                case 265 /* ImportClause */:
                     return bindImportClause(node);
-                case 268 /* ExportDeclaration */:
+                case 270 /* ExportDeclaration */:
                     return bindExportDeclaration(node);
-                case 267 /* ExportAssignment */:
+                case 269 /* ExportAssignment */:
                     return bindExportAssignment(node);
-                case 298 /* SourceFile */:
+                case 300 /* SourceFile */:
                     updateStrictModeStatementList(node.statements);
                     return bindSourceFileIfExternalModule();
-                case 231 /* Block */:
-                    if (!ts.isFunctionLike(node.parent)) {
+                case 233 /* Block */:
+                    if (!ts.isFunctionLikeOrClassStaticBlockDeclaration(node.parent)) {
                         return;
                     }
                 // falls through
-                case 258 /* ModuleBlock */:
+                case 260 /* ModuleBlock */:
                     return updateStrictModeStatementList(node.statements);
-                case 330 /* JSDocParameterTag */:
-                    if (node.parent.kind === 315 /* JSDocSignature */) {
+                case 335 /* JSDocParameterTag */:
+                    if (node.parent.kind === 318 /* JSDocSignature */) {
                         return bindParameter(node);
                     }
-                    if (node.parent.kind !== 314 /* JSDocTypeLiteral */) {
+                    if (node.parent.kind !== 317 /* JSDocTypeLiteral */) {
                         break;
                     }
                 // falls through
-                case 337 /* JSDocPropertyTag */:
+                case 342 /* JSDocPropertyTag */:
                     var propTag = node;
-                    var flags = propTag.isBracketed || propTag.typeExpression && propTag.typeExpression.type.kind === 308 /* JSDocOptionalType */ ?
+                    var flags = propTag.isBracketed || propTag.typeExpression && propTag.typeExpression.type.kind === 311 /* JSDocOptionalType */ ?
                         4 /* Property */ | 16777216 /* Optional */ :
                         4 /* Property */;
                     return declareSymbolAndAddToSymbolTable(propTag, flags, 0 /* PropertyExcludes */);
-                case 335 /* JSDocTypedefTag */:
-                case 328 /* JSDocCallbackTag */:
-                case 329 /* JSDocEnumTag */:
+                case 340 /* JSDocTypedefTag */:
+                case 333 /* JSDocCallbackTag */:
+                case 334 /* JSDocEnumTag */:
                     return (delayedTypeAliases || (delayedTypeAliases = [])).push(node);
             }
         }
@@ -43871,11 +44856,11 @@
             }
             var thisContainer = ts.getThisContainer(node, /*includeArrowFunctions*/ false);
             switch (thisContainer.kind) {
-                case 252 /* FunctionDeclaration */:
-                case 209 /* FunctionExpression */:
+                case 254 /* FunctionDeclaration */:
+                case 211 /* FunctionExpression */:
                     var constructorSymbol = thisContainer.symbol;
                     // For `f.prototype.m = function() { this.x = 0; }`, `this.x = 0` should modify `f`'s members, not the function expression.
-                    if (ts.isBinaryExpression(thisContainer.parent) && thisContainer.parent.operatorToken.kind === 62 /* EqualsToken */) {
+                    if (ts.isBinaryExpression(thisContainer.parent) && thisContainer.parent.operatorToken.kind === 63 /* EqualsToken */) {
                         var l = thisContainer.parent.left;
                         if (ts.isBindableStaticAccessExpression(l) && ts.isPrototypeAccess(l.expression)) {
                             constructorSymbol = lookupSymbolForPropertyAccess(l.expression.expression, thisParentContainer);
@@ -43886,7 +44871,7 @@
                         constructorSymbol.members = constructorSymbol.members || ts.createSymbolTable();
                         // It's acceptable for multiple 'this' assignments of the same identifier to occur
                         if (ts.hasDynamicName(node)) {
-                            bindDynamicallyNamedThisPropertyAssignment(node, constructorSymbol);
+                            bindDynamicallyNamedThisPropertyAssignment(node, constructorSymbol, constructorSymbol.members);
                         }
                         else {
                             declareSymbol(constructorSymbol.members, constructorSymbol, node, 4 /* Property */ | 67108864 /* Assignment */, 0 /* PropertyExcludes */ & ~4 /* Property */);
@@ -43894,23 +44879,23 @@
                         addDeclarationToSymbol(constructorSymbol, constructorSymbol.valueDeclaration, 32 /* Class */);
                     }
                     break;
-                case 167 /* Constructor */:
-                case 164 /* PropertyDeclaration */:
-                case 166 /* MethodDeclaration */:
-                case 168 /* GetAccessor */:
-                case 169 /* SetAccessor */:
+                case 169 /* Constructor */:
+                case 165 /* PropertyDeclaration */:
+                case 167 /* MethodDeclaration */:
+                case 170 /* GetAccessor */:
+                case 171 /* SetAccessor */:
                     // this.foo assignment in a JavaScript class
                     // Bind this property to the containing class
                     var containingClass = thisContainer.parent;
-                    var symbolTable = ts.hasSyntacticModifier(thisContainer, 32 /* Static */) ? containingClass.symbol.exports : containingClass.symbol.members;
+                    var symbolTable = ts.isStatic(thisContainer) ? containingClass.symbol.exports : containingClass.symbol.members;
                     if (ts.hasDynamicName(node)) {
-                        bindDynamicallyNamedThisPropertyAssignment(node, containingClass.symbol);
+                        bindDynamicallyNamedThisPropertyAssignment(node, containingClass.symbol, symbolTable);
                     }
                     else {
                         declareSymbol(symbolTable, containingClass.symbol, node, 4 /* Property */ | 67108864 /* Assignment */, 0 /* None */, /*isReplaceableByMethod*/ true);
                     }
                     break;
-                case 298 /* SourceFile */:
+                case 300 /* SourceFile */:
                     // this.property = assignment in a source file -- declare symbol in exports for a module, in locals for a script
                     if (ts.hasDynamicName(node)) {
                         break;
@@ -43926,8 +44911,8 @@
                     ts.Debug.failBadSyntaxKind(thisContainer);
             }
         }
-        function bindDynamicallyNamedThisPropertyAssignment(node, symbol) {
-            bindAnonymousDeclaration(node, 4 /* Property */, "__computed" /* Computed */);
+        function bindDynamicallyNamedThisPropertyAssignment(node, symbol, symbolTable) {
+            declareSymbol(symbolTable, symbol, node, 4 /* Property */, 0 /* None */, /*isReplaceableByMethod*/ true, /*isComputedName*/ true);
             addLateBoundAssignmentDeclarationToSymbol(node, symbol);
         }
         function addLateBoundAssignmentDeclarationToSymbol(node, symbol) {
@@ -43936,10 +44921,10 @@
             }
         }
         function bindSpecialPropertyDeclaration(node) {
-            if (node.expression.kind === 107 /* ThisKeyword */) {
+            if (node.expression.kind === 108 /* ThisKeyword */) {
                 bindThisPropertyAssignment(node);
             }
-            else if (ts.isBindableStaticAccessExpression(node) && node.parent.parent.kind === 298 /* SourceFile */) {
+            else if (ts.isBindableStaticAccessExpression(node) && node.parent.parent.kind === 300 /* SourceFile */) {
                 if (ts.isPrototypeAccess(node.expression)) {
                     bindPrototypePropertyAssignment(node, node.parent);
                 }
@@ -43979,7 +44964,7 @@
         }
         function bindObjectDefinePropertyAssignment(node) {
             var namespaceSymbol = lookupSymbolForPropertyAccess(node.arguments[0]);
-            var isToplevel = node.parent.parent.kind === 298 /* SourceFile */;
+            var isToplevel = node.parent.parent.kind === 300 /* SourceFile */;
             namespaceSymbol = bindPotentiallyMissingNamespaces(namespaceSymbol, node.arguments[0], isToplevel, /*isPrototypeProperty*/ false, /*containerIsClass*/ false);
             bindPotentiallyNewExpandoMemberToNamespace(node, namespaceSymbol, /*isPrototypeProperty*/ false);
         }
@@ -44088,8 +45073,8 @@
         }
         function isTopLevelNamespaceAssignment(propertyAccess) {
             return ts.isBinaryExpression(propertyAccess.parent)
-                ? getParentOfBinaryExpression(propertyAccess.parent).parent.kind === 298 /* SourceFile */
-                : propertyAccess.parent.parent.kind === 298 /* SourceFile */;
+                ? getParentOfBinaryExpression(propertyAccess.parent).parent.kind === 300 /* SourceFile */
+                : propertyAccess.parent.parent.kind === 300 /* SourceFile */;
         }
         function bindPropertyAssignment(name, propertyAccess, isPrototypeProperty, containerIsClass) {
             var namespaceSymbol = lookupSymbolForPropertyAccess(name, container) || lookupSymbolForPropertyAccess(name, blockScopeContainer);
@@ -44168,7 +45153,7 @@
             }
         }
         function bindClassLikeDeclaration(node) {
-            if (node.kind === 253 /* ClassDeclaration */) {
+            if (node.kind === 255 /* ClassDeclaration */) {
                 bindBlockScopedDeclaration(node, 32 /* Class */, 899503 /* ClassExcludes */);
             }
             else {
@@ -44234,7 +45219,7 @@
             }
         }
         function bindParameter(node) {
-            if (node.kind === 330 /* JSDocParameterTag */ && container.kind !== 315 /* JSDocSignature */) {
+            if (node.kind === 335 /* JSDocParameterTag */ && container.kind !== 318 /* JSDocSignature */) {
                 return;
             }
             if (inStrictMode && !(node.flags & 8388608 /* Ambient */)) {
@@ -44311,7 +45296,7 @@
                     declareSymbolAndAddToSymbolTable(node, 262144 /* TypeParameter */, 526824 /* TypeParameterExcludes */);
                 }
             }
-            else if (node.parent.kind === 186 /* InferType */) {
+            else if (node.parent.kind === 188 /* InferType */) {
                 var container_2 = getInferTypeContainer(node.parent);
                 if (container_2) {
                     if (!container_2.locals) {
@@ -44339,11 +45324,11 @@
             if (currentFlow === unreachableFlow) {
                 var reportError = 
                 // report error on all statements except empty ones
-                (ts.isStatementButNotDeclaration(node) && node.kind !== 232 /* EmptyStatement */) ||
+                (ts.isStatementButNotDeclaration(node) && node.kind !== 234 /* EmptyStatement */) ||
                     // report error on class declarations
-                    node.kind === 253 /* ClassDeclaration */ ||
+                    node.kind === 255 /* ClassDeclaration */ ||
                     // report error on instantiated modules or const-enums only modules if preserveConstEnums is set
-                    (node.kind === 257 /* ModuleDeclaration */ && shouldReportErrorOnModuleDeclaration(node));
+                    (node.kind === 259 /* ModuleDeclaration */ && shouldReportErrorOnModuleDeclaration(node));
                 if (reportError) {
                     currentFlow = reportedUnreachableFlow;
                     if (!options.allowUnreachableCode) {
@@ -44387,12 +45372,12 @@
     }
     function isPurelyTypeDeclaration(s) {
         switch (s.kind) {
-            case 254 /* InterfaceDeclaration */:
-            case 255 /* TypeAliasDeclaration */:
+            case 256 /* InterfaceDeclaration */:
+            case 257 /* TypeAliasDeclaration */:
                 return true;
-            case 257 /* ModuleDeclaration */:
+            case 259 /* ModuleDeclaration */:
                 return getModuleInstanceState(s) !== 1 /* Instantiated */;
-            case 256 /* EnumDeclaration */:
+            case 258 /* EnumDeclaration */:
                 return ts.hasSyntacticModifier(s, 2048 /* Const */);
             default:
                 return false;
@@ -44436,7 +45421,7 @@
 /** @internal */
 var ts;
 (function (ts) {
-    function createGetSymbolWalker(getRestTypeOfSignature, getTypePredicateOfSignature, getReturnTypeOfSignature, getBaseTypes, resolveStructuredTypeMembers, getTypeOfSymbol, getResolvedSymbol, getIndexTypeOfStructuredType, getConstraintOfTypeParameter, getFirstIdentifier, getTypeArguments) {
+    function createGetSymbolWalker(getRestTypeOfSignature, getTypePredicateOfSignature, getReturnTypeOfSignature, getBaseTypes, resolveStructuredTypeMembers, getTypeOfSymbol, getResolvedSymbol, getConstraintOfTypeParameter, getFirstIdentifier, getTypeArguments) {
         return getSymbolWalker;
         function getSymbolWalker(accept) {
             if (accept === void 0) { accept = function () { return true; }; }
@@ -44551,22 +45536,22 @@
                 visitType(interfaceT.thisType);
             }
             function visitObjectType(type) {
-                var stringIndexType = getIndexTypeOfStructuredType(type, 0 /* String */);
-                visitType(stringIndexType);
-                var numberIndexType = getIndexTypeOfStructuredType(type, 1 /* Number */);
-                visitType(numberIndexType);
-                // The two checks above *should* have already resolved the type (if needed), so this should be cached
                 var resolved = resolveStructuredTypeMembers(type);
-                for (var _i = 0, _a = resolved.callSignatures; _i < _a.length; _i++) {
-                    var signature = _a[_i];
-                    visitSignature(signature);
+                for (var _i = 0, _a = resolved.indexInfos; _i < _a.length; _i++) {
+                    var info = _a[_i];
+                    visitType(info.keyType);
+                    visitType(info.type);
                 }
-                for (var _b = 0, _c = resolved.constructSignatures; _b < _c.length; _b++) {
+                for (var _b = 0, _c = resolved.callSignatures; _b < _c.length; _b++) {
                     var signature = _c[_b];
                     visitSignature(signature);
                 }
-                for (var _d = 0, _e = resolved.properties; _d < _e.length; _d++) {
-                    var p = _e[_d];
+                for (var _d = 0, _e = resolved.constructSignatures; _d < _e.length; _d++) {
+                    var signature = _e[_d];
+                    visitSignature(signature);
+                }
+                for (var _f = 0, _g = resolved.properties; _f < _g.length; _f++) {
+                    var p = _g[_f];
                     visitSymbol(p);
                 }
             }
@@ -44592,7 +45577,7 @@
                     //  (their type resolved directly to the member deeply referenced)
                     // So to get the intervening symbols, we need to check if there's a type
                     // query node on any of the symbol's declarations and get symbols there
-                    if (d.type && d.type.kind === 177 /* TypeQuery */) {
+                    if (d.type && d.type.kind === 179 /* TypeQuery */) {
                         var query = d.type;
                         var entity = getResolvedSymbol(getFirstIdentifier(query.exprName));
                         visitSymbol(entity);
@@ -44762,15 +45747,6 @@
         CheckMode[CheckMode["SkipGenericFunctions"] = 8] = "SkipGenericFunctions";
         CheckMode[CheckMode["IsForSignatureHelp"] = 16] = "IsForSignatureHelp";
     })(CheckMode || (CheckMode = {}));
-    var AccessFlags;
-    (function (AccessFlags) {
-        AccessFlags[AccessFlags["None"] = 0] = "None";
-        AccessFlags[AccessFlags["NoIndexSignatures"] = 1] = "NoIndexSignatures";
-        AccessFlags[AccessFlags["Writing"] = 2] = "Writing";
-        AccessFlags[AccessFlags["CacheSymbol"] = 4] = "CacheSymbol";
-        AccessFlags[AccessFlags["NoTupleBoundsCheck"] = 8] = "NoTupleBoundsCheck";
-        AccessFlags[AccessFlags["ExpressionPosition"] = 16] = "ExpressionPosition";
-    })(AccessFlags || (AccessFlags = {}));
     var SignatureCheckMode;
     (function (SignatureCheckMode) {
         SignatureCheckMode[SignatureCheckMode["BivariantCallback"] = 1] = "BivariantCallback";
@@ -44924,8 +45900,10 @@
         var strictPropertyInitialization = ts.getStrictOptionValue(compilerOptions, "strictPropertyInitialization");
         var noImplicitAny = ts.getStrictOptionValue(compilerOptions, "noImplicitAny");
         var noImplicitThis = ts.getStrictOptionValue(compilerOptions, "noImplicitThis");
+        var useUnknownInCatchVariables = ts.getStrictOptionValue(compilerOptions, "useUnknownInCatchVariables");
         var keyofStringsOnly = !!compilerOptions.keyofStringsOnly;
         var freshObjectLiteralFlag = compilerOptions.suppressExcessPropertyErrors ? 0 : 16384 /* FreshLiteral */;
+        var exactOptionalPropertyTypes = compilerOptions.exactOptionalPropertyTypes;
         var checkBinaryExpression = createCheckBinaryExpression();
         var emitResolver = createResolver();
         var nodeBuilder = createNodeBuilder();
@@ -44964,6 +45942,7 @@
             getDiagnostics: getDiagnostics,
             getGlobalDiagnostics: getGlobalDiagnostics,
             getRecursionIdentity: getRecursionIdentity,
+            getUnmatchedProperties: getUnmatchedProperties,
             getTypeOfSymbolAtLocation: function (symbol, locationIn) {
                 var location = ts.getParseTreeNode(locationIn);
                 return location ? getTypeOfSymbolAtLocation(symbol, location) : errorType;
@@ -44987,9 +45966,10 @@
                 return lexicallyScopedIdentifier ? getPrivateIdentifierPropertyOfType(leftType, lexicallyScopedIdentifier) : undefined;
             },
             getTypeOfPropertyOfType: function (type, name) { return getTypeOfPropertyOfType(type, ts.escapeLeadingUnderscores(name)); },
-            getIndexInfoOfType: getIndexInfoOfType,
+            getIndexInfoOfType: function (type, kind) { return getIndexInfoOfType(type, kind === 0 /* String */ ? stringType : numberType); },
+            getIndexInfosOfType: getIndexInfosOfType,
             getSignaturesOfType: getSignaturesOfType,
-            getIndexTypeOfType: getIndexTypeOfType,
+            getIndexTypeOfType: function (type, kind) { return getIndexTypeOfType(type, kind === 0 /* String */ ? stringType : numberType); },
             getBaseTypes: getBaseTypes,
             getBaseTypeOfLiteralType: getBaseTypeOfLiteralType,
             getWidenedType: getWidenedType,
@@ -44998,6 +45978,7 @@
                 return node ? getTypeFromTypeNode(node) : errorType;
             },
             getParameterType: getTypeAtPosition,
+            getParameterIdentifierNameAtPosition: getParameterIdentifierNameAtPosition,
             getPromisedTypeOfPromise: getPromisedTypeOfPromise,
             getAwaitedType: function (type) { return getAwaitedType(type); },
             getReturnTypeOfSignature: getReturnTypeOfSignature,
@@ -45023,6 +46004,10 @@
                 // set ignoreErrors: true because any lookups invoked by the API shouldn't cause any new errors
                 return node ? getSymbolAtLocation(node, /*ignoreErrors*/ true) : undefined;
             },
+            getIndexInfosAtLocation: function (nodeIn) {
+                var node = ts.getParseTreeNode(nodeIn);
+                return node ? getIndexInfosAtLocation(node) : undefined;
+            },
             getShorthandAssignmentValueSymbol: function (nodeIn) {
                 var node = ts.getParseTreeNode(nodeIn);
                 return node ? getShorthandAssignmentValueSymbol(node) : undefined;
@@ -45122,6 +46107,7 @@
             },
             getExpandedParameters: getExpandedParameters,
             hasEffectiveRestParameter: hasEffectiveRestParameter,
+            containsArgumentsReference: containsArgumentsReference,
             getConstantValue: function (nodeIn) {
                 var node = ts.getParseTreeNode(nodeIn, canHaveConstantValue);
                 return node ? getConstantValue(node) : undefined;
@@ -45147,7 +46133,8 @@
             getEmitResolver: getEmitResolver,
             getExportsOfModule: getExportsOfModuleAsArray,
             getExportsAndPropertiesOfModule: getExportsAndPropertiesOfModule,
-            getSymbolWalker: ts.createGetSymbolWalker(getRestTypeOfSignature, getTypePredicateOfSignature, getReturnTypeOfSignature, getBaseTypes, resolveStructuredTypeMembers, getTypeOfSymbol, getResolvedSymbol, getIndexTypeOfStructuredType, getConstraintOfTypeParameter, ts.getFirstIdentifier, getTypeArguments),
+            forEachExportAndPropertyOfModule: forEachExportAndPropertyOfModule,
+            getSymbolWalker: ts.createGetSymbolWalker(getRestTypeOfSignature, getTypePredicateOfSignature, getReturnTypeOfSignature, getBaseTypes, resolveStructuredTypeMembers, getTypeOfSymbol, getResolvedSymbol, getConstraintOfTypeParameter, ts.getFirstIdentifier, getTypeArguments),
             getAmbientModules: getAmbientModules,
             getJsxIntrinsicTagNamesAt: getJsxIntrinsicTagNamesAt,
             isOptionalParameter: function (nodeIn) {
@@ -45197,6 +46184,7 @@
             getSuggestionForNonexistentSymbol: function (location, name, meaning) { return getSuggestionForNonexistentSymbol(location, ts.escapeLeadingUnderscores(name), meaning); },
             getSuggestedSymbolForNonexistentModule: getSuggestedSymbolForNonexistentModule,
             getSuggestionForNonexistentExport: getSuggestionForNonexistentExport,
+            getSuggestedSymbolForNonexistentClassMember: getSuggestedSymbolForNonexistentClassMember,
             getBaseConstraintOfType: getBaseConstraintOfType,
             getDefaultFromTypeParameter: function (type) { return type && type.flags & 262144 /* TypeParameter */ ? getDefaultFromTypeParameter(type) : undefined; },
             resolveName: function (name, location, meaning, excludeGlobals) {
@@ -45270,7 +46258,10 @@
         var tupleTypes = new ts.Map();
         var unionTypes = new ts.Map();
         var intersectionTypes = new ts.Map();
-        var literalTypes = new ts.Map();
+        var stringLiteralTypes = new ts.Map();
+        var numberLiteralTypes = new ts.Map();
+        var bigIntLiteralTypes = new ts.Map();
+        var enumLiteralTypes = new ts.Map();
         var indexedAccessTypes = new ts.Map();
         var templateLiteralTypes = new ts.Map();
         var stringMappingTypes = new ts.Map();
@@ -45290,6 +46281,7 @@
         var undefinedType = createIntrinsicType(32768 /* Undefined */, "undefined");
         var undefinedWideningType = strictNullChecks ? undefinedType : createIntrinsicType(32768 /* Undefined */, "undefined", 131072 /* ContainsWideningType */);
         var optionalType = createIntrinsicType(32768 /* Undefined */, "undefined");
+        var missingType = exactOptionalPropertyTypes ? createIntrinsicType(32768 /* Undefined */, "undefined") : undefinedType;
         var nullType = createIntrinsicType(65536 /* Null */, "null");
         var nullWideningType = strictNullChecks ? nullType : createIntrinsicType(65536 /* Null */, "null", 131072 /* ContainsWideningType */);
         var stringType = createIntrinsicType(4 /* String */, "string");
@@ -45307,12 +46299,7 @@
         falseType.freshType = falseType;
         regularFalseType.regularType = regularFalseType;
         regularFalseType.freshType = falseType;
-        var booleanType = createBooleanType([regularFalseType, regularTrueType]);
-        // Also mark all combinations of fresh/regular booleans as "Boolean" so they print as `boolean` instead of `true | false`
-        // (The union is cached, so simply doing the marking here is sufficient)
-        createBooleanType([regularFalseType, trueType]);
-        createBooleanType([falseType, regularTrueType]);
-        createBooleanType([falseType, trueType]);
+        var booleanType = getUnionType([regularFalseType, regularTrueType]);
         var esSymbolType = createIntrinsicType(4096 /* ESSymbol */, "symbol");
         var voidType = createIntrinsicType(16384 /* Void */, "void");
         var neverType = createIntrinsicType(131072 /* Never */, "never");
@@ -45321,27 +46308,28 @@
         var implicitNeverType = createIntrinsicType(131072 /* Never */, "never");
         var unreachableNeverType = createIntrinsicType(131072 /* Never */, "never");
         var nonPrimitiveType = createIntrinsicType(67108864 /* NonPrimitive */, "object");
+        var stringOrNumberType = getUnionType([stringType, numberType]);
         var stringNumberSymbolType = getUnionType([stringType, numberType, esSymbolType]);
         var keyofConstraintType = keyofStringsOnly ? stringType : stringNumberSymbolType;
         var numberOrBigIntType = getUnionType([numberType, bigintType]);
         var templateConstraintType = getUnionType([stringType, numberType, booleanType, bigintType, nullType, undefinedType]);
         var restrictiveMapper = makeFunctionTypeMapper(function (t) { return t.flags & 262144 /* TypeParameter */ ? getRestrictiveTypeParameter(t) : t; });
         var permissiveMapper = makeFunctionTypeMapper(function (t) { return t.flags & 262144 /* TypeParameter */ ? wildcardType : t; });
-        var emptyObjectType = createAnonymousType(undefined, emptySymbols, ts.emptyArray, ts.emptyArray, undefined, undefined);
-        var emptyJsxObjectType = createAnonymousType(undefined, emptySymbols, ts.emptyArray, ts.emptyArray, undefined, undefined);
+        var emptyObjectType = createAnonymousType(undefined, emptySymbols, ts.emptyArray, ts.emptyArray, ts.emptyArray);
+        var emptyJsxObjectType = createAnonymousType(undefined, emptySymbols, ts.emptyArray, ts.emptyArray, ts.emptyArray);
         emptyJsxObjectType.objectFlags |= 2048 /* JsxAttributes */;
         var emptyTypeLiteralSymbol = createSymbol(2048 /* TypeLiteral */, "__type" /* Type */);
         emptyTypeLiteralSymbol.members = ts.createSymbolTable();
-        var emptyTypeLiteralType = createAnonymousType(emptyTypeLiteralSymbol, emptySymbols, ts.emptyArray, ts.emptyArray, undefined, undefined);
-        var emptyGenericType = createAnonymousType(undefined, emptySymbols, ts.emptyArray, ts.emptyArray, undefined, undefined);
+        var emptyTypeLiteralType = createAnonymousType(emptyTypeLiteralSymbol, emptySymbols, ts.emptyArray, ts.emptyArray, ts.emptyArray);
+        var emptyGenericType = createAnonymousType(undefined, emptySymbols, ts.emptyArray, ts.emptyArray, ts.emptyArray);
         emptyGenericType.instantiations = new ts.Map();
-        var anyFunctionType = createAnonymousType(undefined, emptySymbols, ts.emptyArray, ts.emptyArray, undefined, undefined);
+        var anyFunctionType = createAnonymousType(undefined, emptySymbols, ts.emptyArray, ts.emptyArray, ts.emptyArray);
         // The anyFunctionType contains the anyFunctionType by definition. The flag is further propagated
         // in getPropagatingFlagsOfTypes, and it is checked in inferFromTypes.
         anyFunctionType.objectFlags |= 524288 /* NonInferrableType */;
-        var noConstraintType = createAnonymousType(undefined, emptySymbols, ts.emptyArray, ts.emptyArray, undefined, undefined);
-        var circularConstraintType = createAnonymousType(undefined, emptySymbols, ts.emptyArray, ts.emptyArray, undefined, undefined);
-        var resolvingDefaultType = createAnonymousType(undefined, emptySymbols, ts.emptyArray, ts.emptyArray, undefined, undefined);
+        var noConstraintType = createAnonymousType(undefined, emptySymbols, ts.emptyArray, ts.emptyArray, ts.emptyArray);
+        var circularConstraintType = createAnonymousType(undefined, emptySymbols, ts.emptyArray, ts.emptyArray, ts.emptyArray);
+        var resolvingDefaultType = createAnonymousType(undefined, emptySymbols, ts.emptyArray, ts.emptyArray, ts.emptyArray);
         var markerSuperType = createTypeParameter();
         var markerSubType = createTypeParameter();
         markerSubType.constraint = markerSuperType;
@@ -45351,7 +46339,7 @@
         var unknownSignature = createSignature(undefined, undefined, undefined, ts.emptyArray, errorType, /*resolvedTypePredicate*/ undefined, 0, 0 /* None */);
         var resolvingSignature = createSignature(undefined, undefined, undefined, ts.emptyArray, anyType, /*resolvedTypePredicate*/ undefined, 0, 0 /* None */);
         var silentNeverSignature = createSignature(undefined, undefined, undefined, ts.emptyArray, silentNeverType, /*resolvedTypePredicate*/ undefined, 0, 0 /* None */);
-        var enumNumberIndexInfo = createIndexInfo(stringType, /*isReadonly*/ true);
+        var enumNumberIndexInfo = createIndexInfo(numberType, stringType, /*isReadonly*/ true);
         var iterationTypesCache = new ts.Map(); // cache for common IterationTypes instances
         var noIterationTypes = {
             get yieldType() { return ts.Debug.fail("Not supported"); },
@@ -45437,6 +46425,7 @@
         var deferredGlobalAsyncGeneratorType;
         var deferredGlobalTemplateStringsArrayType;
         var deferredGlobalImportMetaType;
+        var deferredGlobalImportMetaExpressionType;
         var deferredGlobalExtractSymbol;
         var deferredGlobalOmitSymbol;
         var deferredGlobalBigIntType;
@@ -45449,9 +46438,9 @@
         var lastFlowNode;
         var lastFlowNodeReachable;
         var flowTypeCache;
-        var emptyStringType = getLiteralType("");
-        var zeroType = getLiteralType(0);
-        var zeroBigIntType = getLiteralType({ negative: false, base10Value: "0" });
+        var emptyStringType = getStringLiteralType("");
+        var zeroType = getNumberLiteralType(0);
+        var zeroBigIntType = getBigIntLiteralType({ negative: false, base10Value: "0" });
         var resolutionTargets = [];
         var resolutionResults = [];
         var resolutionPropertyNames = [];
@@ -45471,6 +46460,7 @@
         var potentialThisCollisions = [];
         var potentialNewTargetCollisions = [];
         var potentialWeakMapSetCollisions = [];
+        var potentialReflectCollisions = [];
         var awaitedTypeStack = [];
         var diagnostics = ts.createDiagnosticCollection();
         var suggestionDiagnostics = ts.createDiagnosticCollection();
@@ -45581,10 +46571,13 @@
             diagnostic.skippedOn = key;
             return diagnostic;
         }
-        function error(location, message, arg0, arg1, arg2, arg3) {
-            var diagnostic = location
+        function createError(location, message, arg0, arg1, arg2, arg3) {
+            return location
                 ? ts.createDiagnosticForNode(location, message, arg0, arg1, arg2, arg3)
                 : ts.createCompilerDiagnostic(message, arg0, arg1, arg2, arg3);
+        }
+        function error(location, message, arg0, arg1, arg2, arg3) {
+            var diagnostic = createError(location, message, arg0, arg1, arg2, arg3);
             diagnostics.add(diagnostic);
             return diagnostic;
         }
@@ -45638,7 +46631,7 @@
         }
         function createSymbol(flags, name, checkFlags) {
             symbolCount++;
-            var symbol = (new Symbol(flags | 33554432 /* Transient */, name));
+            var symbol = new Symbol(flags | 33554432 /* Transient */, name);
             symbol.checkFlags = checkFlags || 0;
             return symbol;
         }
@@ -45917,7 +46910,7 @@
             return nodeLinks[nodeId] || (nodeLinks[nodeId] = new NodeLinks());
         }
         function isGlobalSourceFile(node) {
-            return node.kind === 298 /* SourceFile */ && !ts.isExternalOrCommonJsModule(node);
+            return node.kind === 300 /* SourceFile */ && !ts.isExternalOrCommonJsModule(node);
         }
         function getSymbol(symbols, name, meaning) {
             if (meaning) {
@@ -45976,17 +46969,17 @@
             }
             if (declaration.pos <= usage.pos && !(ts.isPropertyDeclaration(declaration) && ts.isThisProperty(usage.parent) && !declaration.initializer && !declaration.exclamationToken)) {
                 // declaration is before usage
-                if (declaration.kind === 199 /* BindingElement */) {
+                if (declaration.kind === 201 /* BindingElement */) {
                     // still might be illegal if declaration and usage are both binding elements (eg var [a = b, b = b] = [1, 2])
-                    var errorBindingElement = ts.getAncestor(usage, 199 /* BindingElement */);
+                    var errorBindingElement = ts.getAncestor(usage, 201 /* BindingElement */);
                     if (errorBindingElement) {
                         return ts.findAncestor(errorBindingElement, ts.isBindingElement) !== ts.findAncestor(declaration, ts.isBindingElement) ||
                             declaration.pos < errorBindingElement.pos;
                     }
                     // or it might be illegal if usage happens before parent variable is declared (eg var [a] = a)
-                    return isBlockScopedNameDeclaredBeforeUse(ts.getAncestor(declaration, 250 /* VariableDeclaration */), usage);
+                    return isBlockScopedNameDeclaredBeforeUse(ts.getAncestor(declaration, 252 /* VariableDeclaration */), usage);
                 }
-                else if (declaration.kind === 250 /* VariableDeclaration */) {
+                else if (declaration.kind === 252 /* VariableDeclaration */) {
                     // still might be illegal if usage is in the initializer of the variable declaration (eg var a = a)
                     return !isImmediatelyUsedInInitializerOfBlockScopedVariable(declaration, usage);
                 }
@@ -46016,12 +47009,12 @@
             // or if usage is in a type context:
             // 1. inside a type query (typeof in type position)
             // 2. inside a jsdoc comment
-            if (usage.parent.kind === 271 /* ExportSpecifier */ || (usage.parent.kind === 267 /* ExportAssignment */ && usage.parent.isExportEquals)) {
+            if (usage.parent.kind === 273 /* ExportSpecifier */ || (usage.parent.kind === 269 /* ExportAssignment */ && usage.parent.isExportEquals)) {
                 // export specifiers do not use the variable, they only make it available for use
                 return true;
             }
             // When resolving symbols for exports, the `usage` location passed in can be the export site directly
-            if (usage.kind === 267 /* ExportAssignment */ && usage.isExportEquals) {
+            if (usage.kind === 269 /* ExportAssignment */ && usage.isExportEquals) {
                 return true;
             }
             if (!!(usage.flags & 4194304 /* JSDoc */) || isInTypeQuery(usage) || usageInTypeDeclaration()) {
@@ -46043,9 +47036,9 @@
             }
             function isImmediatelyUsedInInitializerOfBlockScopedVariable(declaration, usage) {
                 switch (declaration.parent.parent.kind) {
-                    case 233 /* VariableStatement */:
-                    case 238 /* ForStatement */:
-                    case 240 /* ForOfStatement */:
+                    case 235 /* VariableStatement */:
+                    case 240 /* ForStatement */:
+                    case 242 /* ForOfStatement */:
                         // variable statement/for/for-of statement case,
                         // use site should not be inside variable declaration (initializer of declaration or binding element)
                         if (isSameScopeDescendentOf(usage, declaration, declContainer)) {
@@ -46065,19 +47058,33 @@
                     if (ts.isFunctionLike(current)) {
                         return true;
                     }
-                    var initializerOfProperty = current.parent &&
-                        current.parent.kind === 164 /* PropertyDeclaration */ &&
-                        current.parent.initializer === current;
-                    if (initializerOfProperty) {
-                        if (ts.hasSyntacticModifier(current.parent, 32 /* Static */)) {
-                            if (declaration.kind === 166 /* MethodDeclaration */) {
-                                return true;
+                    if (ts.isClassStaticBlockDeclaration(current)) {
+                        return declaration.pos < usage.pos;
+                    }
+                    var propertyDeclaration = ts.tryCast(current.parent, ts.isPropertyDeclaration);
+                    if (propertyDeclaration) {
+                        var initializerOfProperty = propertyDeclaration.initializer === current;
+                        if (initializerOfProperty) {
+                            if (ts.isStatic(current.parent)) {
+                                if (declaration.kind === 167 /* MethodDeclaration */) {
+                                    return true;
+                                }
+                                if (ts.isPropertyDeclaration(declaration) && ts.getContainingClass(usage) === ts.getContainingClass(declaration)) {
+                                    var propName = declaration.name;
+                                    if (ts.isIdentifier(propName) || ts.isPrivateIdentifier(propName)) {
+                                        var type = getTypeOfSymbol(getSymbolOfNode(declaration));
+                                        var staticBlocks = ts.filter(declaration.parent.members, ts.isClassStaticBlockDeclaration);
+                                        if (isPropertyInitializedInStaticBlocks(propName, type, staticBlocks, declaration.parent.pos, current.pos)) {
+                                            return true;
+                                        }
+                                    }
+                                }
                             }
-                        }
-                        else {
-                            var isDeclarationInstanceProperty = declaration.kind === 164 /* PropertyDeclaration */ && !ts.hasSyntacticModifier(declaration, 32 /* Static */);
-                            if (!isDeclarationInstanceProperty || ts.getContainingClass(usage) !== ts.getContainingClass(declaration)) {
-                                return true;
+                            else {
+                                var isDeclarationInstanceProperty = declaration.kind === 165 /* PropertyDeclaration */ && !ts.isStatic(declaration);
+                                if (!isDeclarationInstanceProperty || ts.getContainingClass(usage) !== ts.getContainingClass(declaration)) {
+                                    return true;
+                                }
                             }
                         }
                     }
@@ -46097,19 +47104,19 @@
                         return "quit";
                     }
                     switch (node.kind) {
-                        case 210 /* ArrowFunction */:
+                        case 212 /* ArrowFunction */:
                             return true;
-                        case 164 /* PropertyDeclaration */:
+                        case 165 /* PropertyDeclaration */:
                             // even when stopping at any property declaration, they need to come from the same class
                             return stopAtAnyPropertyDeclaration &&
                                 (ts.isPropertyDeclaration(declaration) && node.parent === declaration.parent
                                     || ts.isParameterPropertyDeclaration(declaration, declaration.parent) && node.parent === declaration.parent.parent)
                                 ? "quit" : true;
-                        case 231 /* Block */:
+                        case 233 /* Block */:
                             switch (node.parent.kind) {
-                                case 168 /* GetAccessor */:
-                                case 166 /* MethodDeclaration */:
-                                case 169 /* SetAccessor */:
+                                case 170 /* GetAccessor */:
+                                case 167 /* MethodDeclaration */:
+                                case 171 /* SetAccessor */:
                                     return true;
                                 default:
                                     return false;
@@ -46149,18 +47156,18 @@
             }
             function requiresScopeChangeWorker(node) {
                 switch (node.kind) {
-                    case 210 /* ArrowFunction */:
-                    case 209 /* FunctionExpression */:
-                    case 252 /* FunctionDeclaration */:
-                    case 167 /* Constructor */:
+                    case 212 /* ArrowFunction */:
+                    case 211 /* FunctionExpression */:
+                    case 254 /* FunctionDeclaration */:
+                    case 169 /* Constructor */:
                         // do not descend into these
                         return false;
-                    case 166 /* MethodDeclaration */:
-                    case 168 /* GetAccessor */:
-                    case 169 /* SetAccessor */:
-                    case 289 /* PropertyAssignment */:
+                    case 167 /* MethodDeclaration */:
+                    case 170 /* GetAccessor */:
+                    case 171 /* SetAccessor */:
+                    case 291 /* PropertyAssignment */:
                         return requiresScopeChangeWorker(node.name);
-                    case 164 /* PropertyDeclaration */:
+                    case 165 /* PropertyDeclaration */:
                         // static properties in classes introduce temporary variables
                         if (ts.hasStaticModifier(node)) {
                             return target < 99 /* ESNext */ || !useDefineForClassFields;
@@ -46187,11 +47194,11 @@
          *
          * @param isUse If true, this will count towards --noUnusedLocals / --noUnusedParameters.
          */
-        function resolveName(location, name, meaning, nameNotFoundMessage, nameArg, isUse, excludeGlobals, suggestedNameNotFoundMessage) {
+        function resolveName(location, name, meaning, nameNotFoundMessage, nameArg, isUse, excludeGlobals, issueSuggestions) {
             if (excludeGlobals === void 0) { excludeGlobals = false; }
-            return resolveNameHelper(location, name, meaning, nameNotFoundMessage, nameArg, isUse, excludeGlobals, getSymbol, suggestedNameNotFoundMessage);
+            return resolveNameHelper(location, name, meaning, nameNotFoundMessage, nameArg, isUse, excludeGlobals, getSymbol, issueSuggestions);
         }
-        function resolveNameHelper(location, name, meaning, nameNotFoundMessage, nameArg, isUse, excludeGlobals, lookup, suggestedNameNotFoundMessage) {
+        function resolveNameHelper(location, name, meaning, nameNotFoundMessage, nameArg, isUse, excludeGlobals, lookup, issueSuggestions) {
             var _a;
             var originalLocation = location; // needed for did-you-mean error reporting, which gathers candidates starting from the original location
             var result;
@@ -46215,12 +47222,12 @@
                             // - parameters are only in the scope of function body
                             // This restriction does not apply to JSDoc comment types because they are parented
                             // at a higher level than type parameters would normally be
-                            if (meaning & result.flags & 788968 /* Type */ && lastLocation.kind !== 312 /* JSDocComment */) {
+                            if (meaning & result.flags & 788968 /* Type */ && lastLocation.kind !== 315 /* JSDocComment */) {
                                 useResult = result.flags & 262144 /* TypeParameter */
                                     // type parameters are visible in parameter list, return type and type parameter list
                                     ? lastLocation === location.type ||
-                                        lastLocation.kind === 161 /* Parameter */ ||
-                                        lastLocation.kind === 160 /* TypeParameter */
+                                        lastLocation.kind === 162 /* Parameter */ ||
+                                        lastLocation.kind === 161 /* TypeParameter */
                                     // local types not visible outside the function body
                                     : false;
                             }
@@ -46235,13 +47242,13 @@
                                     // however it is detected separately when checking initializers of parameters
                                     // to make sure that they reference no variables declared after them.
                                     useResult =
-                                        lastLocation.kind === 161 /* Parameter */ ||
+                                        lastLocation.kind === 162 /* Parameter */ ||
                                             (lastLocation === location.type &&
                                                 !!ts.findAncestor(result.valueDeclaration, ts.isParameter));
                                 }
                             }
                         }
-                        else if (location.kind === 185 /* ConditionalType */) {
+                        else if (location.kind === 187 /* ConditionalType */) {
                             // A type parameter declared using 'infer T' in a conditional type is visible only in
                             // the true branch of the conditional type.
                             useResult = lastLocation === location.trueType;
@@ -46256,14 +47263,14 @@
                 }
                 withinDeferredContext = withinDeferredContext || getIsDeferredContext(location, lastLocation);
                 switch (location.kind) {
-                    case 298 /* SourceFile */:
+                    case 300 /* SourceFile */:
                         if (!ts.isExternalOrCommonJsModule(location))
                             break;
                         isInExternalModule = true;
                     // falls through
-                    case 257 /* ModuleDeclaration */:
+                    case 259 /* ModuleDeclaration */:
                         var moduleExports = getSymbolOfNode(location).exports || emptySymbols;
-                        if (location.kind === 298 /* SourceFile */ || (ts.isModuleDeclaration(location) && location.flags & 8388608 /* Ambient */ && !ts.isGlobalScopeAugmentation(location))) {
+                        if (location.kind === 300 /* SourceFile */ || (ts.isModuleDeclaration(location) && location.flags & 8388608 /* Ambient */ && !ts.isGlobalScopeAugmentation(location))) {
                             // It's an external module. First see if the module has an export default and if the local
                             // name of that export default matches.
                             if (result = moduleExports.get("default" /* Default */)) {
@@ -46287,7 +47294,7 @@
                             var moduleExport = moduleExports.get(name);
                             if (moduleExport &&
                                 moduleExport.flags === 2097152 /* Alias */ &&
-                                (ts.getDeclarationOfKind(moduleExport, 271 /* ExportSpecifier */) || ts.getDeclarationOfKind(moduleExport, 270 /* NamespaceExport */))) {
+                                (ts.getDeclarationOfKind(moduleExport, 273 /* ExportSpecifier */) || ts.getDeclarationOfKind(moduleExport, 272 /* NamespaceExport */))) {
                                 break;
                             }
                         }
@@ -46301,19 +47308,19 @@
                             }
                         }
                         break;
-                    case 256 /* EnumDeclaration */:
+                    case 258 /* EnumDeclaration */:
                         if (result = lookup(getSymbolOfNode(location).exports, name, meaning & 8 /* EnumMember */)) {
                             break loop;
                         }
                         break;
-                    case 164 /* PropertyDeclaration */:
+                    case 165 /* PropertyDeclaration */:
                         // TypeScript 1.0 spec (April 2014): 8.4.1
                         // Initializer expressions for instance member variables are evaluated in the scope
                         // of the class constructor body but are not permitted to reference parameters or
                         // local variables of the constructor. This effectively means that entities from outer scopes
                         // by the same name as a constructor parameter or local variable are inaccessible
                         // in initializer expressions for instance member variables.
-                        if (!ts.hasSyntacticModifier(location, 32 /* Static */)) {
+                        if (!ts.isStatic(location)) {
                             var ctor = findConstructorDeclaration(location.parent);
                             if (ctor && ctor.locals) {
                                 if (lookup(ctor.locals, name, meaning & 111551 /* Value */)) {
@@ -46323,9 +47330,9 @@
                             }
                         }
                         break;
-                    case 253 /* ClassDeclaration */:
-                    case 222 /* ClassExpression */:
-                    case 254 /* InterfaceDeclaration */:
+                    case 255 /* ClassDeclaration */:
+                    case 224 /* ClassExpression */:
+                    case 256 /* InterfaceDeclaration */:
                         // The below is used to lookup type parameters within a class or interface, as they are added to the class/interface locals
                         // These can never be latebound, so the symbol's raw members are sufficient. `getMembersOfNode` cannot be used, as it would
                         // trigger resolving late-bound names, which we may already be in the process of doing while we're here!
@@ -46335,7 +47342,7 @@
                                 result = undefined;
                                 break;
                             }
-                            if (lastLocation && ts.hasSyntacticModifier(lastLocation, 32 /* Static */)) {
+                            if (lastLocation && ts.isStatic(lastLocation)) {
                                 // TypeScript 1.0 spec (April 2014): 3.4.1
                                 // The scope of a type parameter extends over the entire declaration with which the type
                                 // parameter list is associated, with the exception of static member declarations in classes.
@@ -46344,7 +47351,7 @@
                             }
                             break loop;
                         }
-                        if (location.kind === 222 /* ClassExpression */ && meaning & 32 /* Class */) {
+                        if (location.kind === 224 /* ClassExpression */ && meaning & 32 /* Class */) {
                             var className = location.name;
                             if (className && name === className.escapedText) {
                                 result = location.symbol;
@@ -46352,9 +47359,9 @@
                             }
                         }
                         break;
-                    case 224 /* ExpressionWithTypeArguments */:
+                    case 226 /* ExpressionWithTypeArguments */:
                         // The type parameters of a class are not in scope in the base class expression.
-                        if (lastLocation === location.expression && location.parent.token === 93 /* ExtendsKeyword */) {
+                        if (lastLocation === location.expression && location.parent.token === 94 /* ExtendsKeyword */) {
                             var container = location.parent.parent;
                             if (ts.isClassLike(container) && (result = lookup(getSymbolOfNode(container).members, name, meaning & 788968 /* Type */))) {
                                 if (nameNotFoundMessage) {
@@ -46372,9 +47379,9 @@
                     //       [foo<T>()]() { } // <-- Reference to T from class's own computed property
                     //   }
                     //
-                    case 159 /* ComputedPropertyName */:
+                    case 160 /* ComputedPropertyName */:
                         grandparent = location.parent.parent;
-                        if (ts.isClassLike(grandparent) || grandparent.kind === 254 /* InterfaceDeclaration */) {
+                        if (ts.isClassLike(grandparent) || grandparent.kind === 256 /* InterfaceDeclaration */) {
                             // A reference to this grandparent's type parameters would be an error
                             if (result = lookup(getSymbolOfNode(grandparent).members, name, meaning & 788968 /* Type */)) {
                                 error(errorLocation, ts.Diagnostics.A_computed_property_name_cannot_reference_a_type_parameter_from_its_containing_type);
@@ -46382,24 +47389,24 @@
                             }
                         }
                         break;
-                    case 210 /* ArrowFunction */:
+                    case 212 /* ArrowFunction */:
                         // when targeting ES6 or higher there is no 'arguments' in an arrow function
                         // for lower compile targets the resolved symbol is used to emit an error
                         if (compilerOptions.target >= 2 /* ES2015 */) {
                             break;
                         }
                     // falls through
-                    case 166 /* MethodDeclaration */:
-                    case 167 /* Constructor */:
-                    case 168 /* GetAccessor */:
-                    case 169 /* SetAccessor */:
-                    case 252 /* FunctionDeclaration */:
+                    case 167 /* MethodDeclaration */:
+                    case 169 /* Constructor */:
+                    case 170 /* GetAccessor */:
+                    case 171 /* SetAccessor */:
+                    case 254 /* FunctionDeclaration */:
                         if (meaning & 3 /* Variable */ && name === "arguments") {
                             result = argumentsSymbol;
                             break loop;
                         }
                         break;
-                    case 209 /* FunctionExpression */:
+                    case 211 /* FunctionExpression */:
                         if (meaning & 3 /* Variable */ && name === "arguments") {
                             result = argumentsSymbol;
                             break loop;
@@ -46412,7 +47419,7 @@
                             }
                         }
                         break;
-                    case 162 /* Decorator */:
+                    case 163 /* Decorator */:
                         // Decorators are resolved at the class declaration. Resolving at the parameter
                         // or member would result in looking up locals in the method.
                         //
@@ -46421,7 +47428,7 @@
                         //       method(@y x, y) {} // <-- decorator y should be resolved at the class declaration, not the parameter.
                         //   }
                         //
-                        if (location.parent && location.parent.kind === 161 /* Parameter */) {
+                        if (location.parent && location.parent.kind === 162 /* Parameter */) {
                             location = location.parent;
                         }
                         //
@@ -46436,20 +47443,20 @@
                         //   declare function y(x: T): any;
                         //   @param(1 as T) // <-- T should resolve to the type alias outside of class C
                         //   class C<T> {}
-                        if (location.parent && (ts.isClassElement(location.parent) || location.parent.kind === 253 /* ClassDeclaration */)) {
+                        if (location.parent && (ts.isClassElement(location.parent) || location.parent.kind === 255 /* ClassDeclaration */)) {
                             location = location.parent;
                         }
                         break;
-                    case 335 /* JSDocTypedefTag */:
-                    case 328 /* JSDocCallbackTag */:
-                    case 329 /* JSDocEnumTag */:
+                    case 340 /* JSDocTypedefTag */:
+                    case 333 /* JSDocCallbackTag */:
+                    case 334 /* JSDocEnumTag */:
                         // js type aliases do not resolve names from their host, so skip past it
                         var root = ts.getJSDocRoot(location);
                         if (root) {
                             location = root.parent;
                         }
                         break;
-                    case 161 /* Parameter */:
+                    case 162 /* Parameter */:
                         if (lastLocation && (lastLocation === location.initializer ||
                             lastLocation === location.name && ts.isBindingPattern(lastLocation))) {
                             if (!associatedDeclarationForContainingInitializerOrBindingName) {
@@ -46457,7 +47464,7 @@
                             }
                         }
                         break;
-                    case 199 /* BindingElement */:
+                    case 201 /* BindingElement */:
                         if (lastLocation && (lastLocation === location.initializer ||
                             lastLocation === location.name && ts.isBindingPattern(lastLocation))) {
                             if (ts.isParameterDeclaration(location) && !associatedDeclarationForContainingInitializerOrBindingName) {
@@ -46465,7 +47472,7 @@
                             }
                         }
                         break;
-                    case 186 /* InferType */:
+                    case 188 /* InferType */:
                         if (meaning & 262144 /* TypeParameter */) {
                             var parameterName = location.typeParameter.name;
                             if (parameterName && name === parameterName.escapedText) {
@@ -46489,7 +47496,7 @@
             }
             if (!result) {
                 if (lastLocation) {
-                    ts.Debug.assert(lastLocation.kind === 298 /* SourceFile */);
+                    ts.Debug.assert(lastLocation.kind === 300 /* SourceFile */);
                     if (lastLocation.commonJsModuleIndicator && name === "exports" && meaning & lastLocation.symbol.flags) {
                         return lastLocation.symbol;
                     }
@@ -46516,15 +47523,18 @@
                             !checkAndReportErrorForUsingNamespaceModuleAsValue(errorLocation, name, meaning) &&
                             !checkAndReportErrorForUsingValueAsType(errorLocation, name, meaning)) {
                         var suggestion = void 0;
-                        if (suggestedNameNotFoundMessage && suggestionCount < maximumSuggestionCount) {
+                        if (issueSuggestions && suggestionCount < maximumSuggestionCount) {
                             suggestion = getSuggestedSymbolForNonexistentSymbol(originalLocation, name, meaning);
-                            var isGlobalScopeAugmentationDeclaration = suggestion && suggestion.valueDeclaration && ts.isAmbientModule(suggestion.valueDeclaration) && ts.isGlobalScopeAugmentation(suggestion.valueDeclaration);
+                            var isGlobalScopeAugmentationDeclaration = (suggestion === null || suggestion === void 0 ? void 0 : suggestion.valueDeclaration) && ts.isAmbientModule(suggestion.valueDeclaration) && ts.isGlobalScopeAugmentation(suggestion.valueDeclaration);
                             if (isGlobalScopeAugmentationDeclaration) {
                                 suggestion = undefined;
                             }
                             if (suggestion) {
                                 var suggestionName = symbolToString(suggestion);
-                                var diagnostic = error(errorLocation, suggestedNameNotFoundMessage, diagnosticName(nameArg), suggestionName);
+                                var isUncheckedJS = isUncheckedJSSuggestion(originalLocation, suggestion, /*excludeClasses*/ false);
+                                var message = isUncheckedJS ? ts.Diagnostics.Could_not_find_name_0_Did_you_mean_1 : ts.Diagnostics.Cannot_find_name_0_Did_you_mean_1;
+                                var diagnostic = createError(errorLocation, message, diagnosticName(nameArg), suggestionName);
+                                addErrorOrSuggestion(!isUncheckedJS, diagnostic);
                                 if (suggestion.valueDeclaration) {
                                     ts.addRelatedInfo(diagnostic, ts.createDiagnosticForNode(suggestion.valueDeclaration, ts.Diagnostics._0_is_declared_here, suggestionName));
                                 }
@@ -46618,10 +47628,10 @@
             }
         }
         function getIsDeferredContext(location, lastLocation) {
-            if (location.kind !== 210 /* ArrowFunction */ && location.kind !== 209 /* FunctionExpression */) {
+            if (location.kind !== 212 /* ArrowFunction */ && location.kind !== 211 /* FunctionExpression */) {
                 // initializers in instance property declaration of class like entities are executed in constructor and thus deferred
                 return ts.isTypeQueryNode(location) || ((ts.isFunctionLikeDeclaration(location) ||
-                    (location.kind === 164 /* PropertyDeclaration */ && !ts.hasSyntacticModifier(location, 32 /* Static */))) && (!lastLocation || lastLocation !== location.name)); // A name is evaluated within the enclosing scope - so it shouldn't count as deferred
+                    (location.kind === 165 /* PropertyDeclaration */ && !ts.isStatic(location))) && (!lastLocation || lastLocation !== location.name)); // A name is evaluated within the enclosing scope - so it shouldn't count as deferred
             }
             if (lastLocation && lastLocation === location.name) {
                 return false;
@@ -46634,12 +47644,12 @@
         }
         function isSelfReferenceLocation(node) {
             switch (node.kind) {
-                case 252 /* FunctionDeclaration */:
-                case 253 /* ClassDeclaration */:
-                case 254 /* InterfaceDeclaration */:
-                case 256 /* EnumDeclaration */:
-                case 255 /* TypeAliasDeclaration */:
-                case 257 /* ModuleDeclaration */: // For `namespace N { N; }`
+                case 254 /* FunctionDeclaration */:
+                case 255 /* ClassDeclaration */:
+                case 256 /* InterfaceDeclaration */:
+                case 258 /* EnumDeclaration */:
+                case 257 /* TypeAliasDeclaration */:
+                case 259 /* ModuleDeclaration */: // For `namespace N { N; }`
                     return true;
                 default:
                     return false;
@@ -46652,7 +47662,7 @@
             if (symbol.declarations) {
                 for (var _i = 0, _a = symbol.declarations; _i < _a.length; _i++) {
                     var decl = _a[_i];
-                    if (decl.kind === 160 /* TypeParameter */) {
+                    if (decl.kind === 161 /* TypeParameter */) {
                         var parent = ts.isJSDocTemplateTag(decl.parent) ? ts.getJSDocHost(decl.parent) : decl.parent;
                         if (parent === container) {
                             return !(ts.isJSDocTemplateTag(decl.parent) && ts.find(decl.parent.parent.tags, ts.isJSDocTypeAlias)); // TODO: GH#18217
@@ -46682,7 +47692,7 @@
                     }
                     // No static member is present.
                     // Check if we're in an instance method and look for a relevant instance member.
-                    if (location === container && !ts.hasSyntacticModifier(location, 32 /* Static */)) {
+                    if (location === container && !ts.isStatic(location)) {
                         var instanceType = getDeclaredTypeOfSymbol(classSymbol).thisType; // TODO: GH#18217
                         if (getPropertyOfType(instanceType, name)) {
                             error(errorLocation, ts.Diagnostics.Cannot_find_name_0_Did_you_mean_the_instance_member_this_0, diagnosticName(nameArg));
@@ -46708,10 +47718,10 @@
          */
         function getEntityNameForExtendingInterface(node) {
             switch (node.kind) {
-                case 78 /* Identifier */:
-                case 202 /* PropertyAccessExpression */:
+                case 79 /* Identifier */:
+                case 204 /* PropertyAccessExpression */:
                     return node.parent ? getEntityNameForExtendingInterface(node.parent) : undefined;
-                case 224 /* ExpressionWithTypeArguments */:
+                case 226 /* ExpressionWithTypeArguments */:
                     if (ts.isEntityNameExpression(node.expression)) {
                         return node.expression;
                     }
@@ -46755,7 +47765,7 @@
             return name === "any" || name === "string" || name === "number" || name === "boolean" || name === "never" || name === "unknown";
         }
         function checkAndReportErrorForExportingPrimitiveType(errorLocation, name) {
-            if (isPrimitiveTypeName(name) && errorLocation.parent.kind === 271 /* ExportSpecifier */) {
+            if (isPrimitiveTypeName(name) && errorLocation.parent.kind === 273 /* ExportSpecifier */) {
                 error(errorLocation, ts.Diagnostics.Cannot_export_0_Only_local_declarations_can_be_exported_from_a_module, name);
                 return true;
             }
@@ -46831,7 +47841,7 @@
                 return;
             }
             // Block-scoped variables cannot be used before their definition
-            var declaration = (_a = result.declarations) === null || _a === void 0 ? void 0 : _a.find(function (d) { return ts.isBlockOrCatchScoped(d) || ts.isClassLike(d) || (d.kind === 256 /* EnumDeclaration */); });
+            var declaration = (_a = result.declarations) === null || _a === void 0 ? void 0 : _a.find(function (d) { return ts.isBlockOrCatchScoped(d) || ts.isClassLike(d) || (d.kind === 258 /* EnumDeclaration */); });
             if (declaration === undefined)
                 return ts.Debug.fail("checkResolvedBlockScopedVariable could not find block-scoped declaration");
             if (!(declaration.flags & 8388608 /* Ambient */) && !isBlockScopedNameDeclaredBeforeUse(declaration, errorLocation)) {
@@ -46866,13 +47876,13 @@
         }
         function getAnyImportSyntax(node) {
             switch (node.kind) {
-                case 261 /* ImportEqualsDeclaration */:
+                case 263 /* ImportEqualsDeclaration */:
                     return node;
-                case 263 /* ImportClause */:
+                case 265 /* ImportClause */:
                     return node.parent;
-                case 264 /* NamespaceImport */:
+                case 266 /* NamespaceImport */:
                     return node.parent.parent;
-                case 266 /* ImportSpecifier */:
+                case 268 /* ImportSpecifier */:
                     return node.parent.parent.parent;
                 default:
                     return undefined;
@@ -46897,22 +47907,22 @@
          * const { x } = require ...
          */
         function isAliasSymbolDeclaration(node) {
-            return node.kind === 261 /* ImportEqualsDeclaration */
-                || node.kind === 260 /* NamespaceExportDeclaration */
-                || node.kind === 263 /* ImportClause */ && !!node.name
-                || node.kind === 264 /* NamespaceImport */
-                || node.kind === 270 /* NamespaceExport */
-                || node.kind === 266 /* ImportSpecifier */
-                || node.kind === 271 /* ExportSpecifier */
-                || node.kind === 267 /* ExportAssignment */ && ts.exportAssignmentIsAlias(node)
+            return node.kind === 263 /* ImportEqualsDeclaration */
+                || node.kind === 262 /* NamespaceExportDeclaration */
+                || node.kind === 265 /* ImportClause */ && !!node.name
+                || node.kind === 266 /* NamespaceImport */
+                || node.kind === 272 /* NamespaceExport */
+                || node.kind === 268 /* ImportSpecifier */
+                || node.kind === 273 /* ExportSpecifier */
+                || node.kind === 269 /* ExportAssignment */ && ts.exportAssignmentIsAlias(node)
                 || ts.isBinaryExpression(node) && ts.getAssignmentDeclarationKind(node) === 2 /* ModuleExports */ && ts.exportAssignmentIsAlias(node)
                 || ts.isAccessExpression(node)
                     && ts.isBinaryExpression(node.parent)
                     && node.parent.left === node
-                    && node.parent.operatorToken.kind === 62 /* EqualsToken */
+                    && node.parent.operatorToken.kind === 63 /* EqualsToken */
                     && isAliasableOrJsExpression(node.parent.right)
-                || node.kind === 290 /* ShorthandPropertyAssignment */
-                || node.kind === 289 /* PropertyAssignment */ && isAliasableOrJsExpression(node.initializer)
+                || node.kind === 292 /* ShorthandPropertyAssignment */
+                || node.kind === 291 /* PropertyAssignment */ && isAliasableOrJsExpression(node.initializer)
                 || ts.isRequireVariableDeclaration(node);
         }
         function isAliasableOrJsExpression(e) {
@@ -46926,7 +47936,7 @@
                     ? resolveSymbol(getPropertyOfType(resolveExternalModuleTypeByLiteral(name), commonJSPropertyAccess.name.escapedText))
                     : undefined;
             }
-            if (ts.isVariableDeclaration(node) || node.moduleReference.kind === 273 /* ExternalModuleReference */) {
+            if (ts.isVariableDeclaration(node) || node.moduleReference.kind === 275 /* ExternalModuleReference */) {
                 var immediate = resolveExternalModuleName(node, ts.getExternalModuleRequireArgument(node) || ts.getExternalModuleImportEqualsDeclarationExpression(node));
                 var resolved_4 = resolveExternalModuleSymbol(immediate);
                 markSymbolOfAliasDeclarationIfTypeOnly(node, immediate, resolved_4, /*overwriteEmpty*/ false);
@@ -47192,7 +48202,7 @@
                     if (localSymbol.declarations) {
                         ts.addRelatedInfo.apply(void 0, __spreadArray([diagnostic], ts.map(localSymbol.declarations, function (decl, index) {
                             return ts.createDiagnosticForNode(decl, index === 0 ? ts.Diagnostics._0_is_declared_here : ts.Diagnostics.and_here, declarationName);
-                        })));
+                        }), false));
                     }
                 }
             }
@@ -47272,7 +48282,7 @@
             return getTargetOfAliasLikeExpression(expression, dontRecursivelyResolve);
         }
         function getTargetOfAccessExpression(node, dontRecursivelyResolve) {
-            if (!(ts.isBinaryExpression(node.parent) && node.parent.left === node && node.parent.operatorToken.kind === 62 /* EqualsToken */)) {
+            if (!(ts.isBinaryExpression(node.parent) && node.parent.left === node && node.parent.operatorToken.kind === 63 /* EqualsToken */)) {
                 return undefined;
             }
             return getTargetOfAliasLikeExpression(node.parent.right, dontRecursivelyResolve);
@@ -47280,31 +48290,31 @@
         function getTargetOfAliasDeclaration(node, dontRecursivelyResolve) {
             if (dontRecursivelyResolve === void 0) { dontRecursivelyResolve = false; }
             switch (node.kind) {
-                case 261 /* ImportEqualsDeclaration */:
-                case 250 /* VariableDeclaration */:
+                case 263 /* ImportEqualsDeclaration */:
+                case 252 /* VariableDeclaration */:
                     return getTargetOfImportEqualsDeclaration(node, dontRecursivelyResolve);
-                case 263 /* ImportClause */:
+                case 265 /* ImportClause */:
                     return getTargetOfImportClause(node, dontRecursivelyResolve);
-                case 264 /* NamespaceImport */:
+                case 266 /* NamespaceImport */:
                     return getTargetOfNamespaceImport(node, dontRecursivelyResolve);
-                case 270 /* NamespaceExport */:
+                case 272 /* NamespaceExport */:
                     return getTargetOfNamespaceExport(node, dontRecursivelyResolve);
-                case 266 /* ImportSpecifier */:
-                case 199 /* BindingElement */:
+                case 268 /* ImportSpecifier */:
+                case 201 /* BindingElement */:
                     return getTargetOfImportSpecifier(node, dontRecursivelyResolve);
-                case 271 /* ExportSpecifier */:
+                case 273 /* ExportSpecifier */:
                     return getTargetOfExportSpecifier(node, 111551 /* Value */ | 788968 /* Type */ | 1920 /* Namespace */, dontRecursivelyResolve);
-                case 267 /* ExportAssignment */:
-                case 217 /* BinaryExpression */:
+                case 269 /* ExportAssignment */:
+                case 219 /* BinaryExpression */:
                     return getTargetOfExportAssignment(node, dontRecursivelyResolve);
-                case 260 /* NamespaceExportDeclaration */:
+                case 262 /* NamespaceExportDeclaration */:
                     return getTargetOfNamespaceExportDeclaration(node, dontRecursivelyResolve);
-                case 290 /* ShorthandPropertyAssignment */:
+                case 292 /* ShorthandPropertyAssignment */:
                     return resolveEntityName(node.name, 111551 /* Value */ | 788968 /* Type */ | 1920 /* Namespace */, /*ignoreErrors*/ true, dontRecursivelyResolve);
-                case 289 /* PropertyAssignment */:
+                case 291 /* PropertyAssignment */:
                     return getTargetOfPropertyAssignment(node, dontRecursivelyResolve);
-                case 203 /* ElementAccessExpression */:
-                case 202 /* PropertyAccessExpression */:
+                case 205 /* ElementAccessExpression */:
+                case 204 /* PropertyAccessExpression */:
                     return getTargetOfAccessExpression(node, dontRecursivelyResolve);
                 default:
                     return ts.Debug.fail();
@@ -47452,17 +48462,17 @@
             //     import a = |b|; // Namespace
             //     import a = |b.c|; // Value, type, namespace
             //     import a = |b.c|.d; // Namespace
-            if (entityName.kind === 78 /* Identifier */ && ts.isRightSideOfQualifiedNameOrPropertyAccess(entityName)) {
+            if (entityName.kind === 79 /* Identifier */ && ts.isRightSideOfQualifiedNameOrPropertyAccess(entityName)) {
                 entityName = entityName.parent;
             }
             // Check for case 1 and 3 in the above example
-            if (entityName.kind === 78 /* Identifier */ || entityName.parent.kind === 158 /* QualifiedName */) {
+            if (entityName.kind === 79 /* Identifier */ || entityName.parent.kind === 159 /* QualifiedName */) {
                 return resolveEntityName(entityName, 1920 /* Namespace */, /*ignoreErrors*/ false, dontResolveAlias);
             }
             else {
                 // Case 2 in above example
                 // entityName.kind could be a QualifiedName or a Missing identifier
-                ts.Debug.assert(entityName.parent.kind === 261 /* ImportEqualsDeclaration */);
+                ts.Debug.assert(entityName.parent.kind === 263 /* ImportEqualsDeclaration */);
                 return resolveEntityName(entityName, 111551 /* Value */ | 788968 /* Type */ | 1920 /* Namespace */, /*ignoreErrors*/ false, dontResolveAlias);
             }
         }
@@ -47478,7 +48488,7 @@
             }
             var namespaceMeaning = 1920 /* Namespace */ | (ts.isInJSFile(name) ? meaning & 111551 /* Value */ : 0);
             var symbol;
-            if (name.kind === 78 /* Identifier */) {
+            if (name.kind === 79 /* Identifier */) {
                 var message = meaning === namespaceMeaning || ts.nodeIsSynthesized(name) ? ts.Diagnostics.Cannot_find_namespace_0 : getCannotFindNameDiagnosticForName(ts.getFirstIdentifier(name));
                 var symbolFromJSPrototype = ts.isInJSFile(name) && !ts.nodeIsSynthesized(name) ? resolveEntityNameFromAssignmentDeclaration(name, meaning) : undefined;
                 symbol = getMergedSymbol(resolveName(location || name, name.escapedText, meaning, ignoreErrors || symbolFromJSPrototype ? undefined : message, name, /*isUse*/ true));
@@ -47486,9 +48496,9 @@
                     return getMergedSymbol(symbolFromJSPrototype);
                 }
             }
-            else if (name.kind === 158 /* QualifiedName */ || name.kind === 202 /* PropertyAccessExpression */) {
-                var left = name.kind === 158 /* QualifiedName */ ? name.left : name.expression;
-                var right = name.kind === 158 /* QualifiedName */ ? name.right : name.name;
+            else if (name.kind === 159 /* QualifiedName */ || name.kind === 204 /* PropertyAccessExpression */) {
+                var left = name.kind === 159 /* QualifiedName */ ? name.left : name.expression;
+                var right = name.kind === 159 /* QualifiedName */ ? name.right : name.name;
                 var namespace = resolveEntityName(left, namespaceMeaning, ignoreErrors, /*dontResolveAlias*/ false, location);
                 if (!namespace || ts.nodeIsMissing(right)) {
                     return undefined;
@@ -47527,7 +48537,7 @@
                 throw ts.Debug.assertNever(name, "Unknown entity name kind.");
             }
             ts.Debug.assert((ts.getCheckFlags(symbol) & 1 /* Instantiated */) === 0, "Should never get an instantiated symbol here.");
-            if (!ts.nodeIsSynthesized(name) && ts.isEntityName(name) && (symbol.flags & 2097152 /* Alias */ || name.parent.kind === 267 /* ExportAssignment */)) {
+            if (!ts.nodeIsSynthesized(name) && ts.isEntityName(name) && (symbol.flags & 2097152 /* Alias */ || name.parent.kind === 269 /* ExportAssignment */)) {
                 markSymbolOfAliasDeclarationIfTypeOnly(ts.getAliasDeclarationFromName(name), symbol, /*finalTarget*/ undefined, /*overwriteEmpty*/ true);
             }
             return (symbol.flags & meaning) || dontResolveAlias ? symbol : resolveAlias(symbol);
@@ -47764,7 +48774,7 @@
         function resolveESModuleSymbol(moduleSymbol, referencingLocation, dontResolveAlias, suppressInteropError) {
             var symbol = resolveExternalModuleSymbol(moduleSymbol, dontResolveAlias);
             if (!dontResolveAlias && symbol) {
-                if (!suppressInteropError && !(symbol.flags & (1536 /* Module */ | 3 /* Variable */)) && !ts.getDeclarationOfKind(symbol, 298 /* SourceFile */)) {
+                if (!suppressInteropError && !(symbol.flags & (1536 /* Module */ | 3 /* Variable */)) && !ts.getDeclarationOfKind(symbol, 300 /* SourceFile */)) {
                     var compilerOptionName = moduleKind >= ts.ModuleKind.ES2015
                         ? "allowSyntheticDefaultImports"
                         : "esModuleInterop";
@@ -47797,7 +48807,7 @@
                             if (symbol.exports)
                                 result.exports = new ts.Map(symbol.exports);
                             var resolvedModuleType = resolveStructuredTypeMembers(moduleType); // Should already be resolved from the signature checks above
-                            result.type = createAnonymousType(result, resolvedModuleType.members, ts.emptyArray, ts.emptyArray, resolvedModuleType.stringIndexInfo, resolvedModuleType.numberIndexInfo);
+                            result.type = createAnonymousType(result, resolvedModuleType.members, ts.emptyArray, ts.emptyArray, resolvedModuleType.indexInfos);
                             return result;
                         }
                     }
@@ -47822,6 +48832,23 @@
             }
             return exports;
         }
+        function forEachExportAndPropertyOfModule(moduleSymbol, cb) {
+            var exports = getExportsOfModule(moduleSymbol);
+            exports.forEach(function (symbol, key) {
+                if (!isReservedMemberName(key)) {
+                    cb(symbol, key);
+                }
+            });
+            var exportEquals = resolveExternalModuleSymbol(moduleSymbol);
+            if (exportEquals !== moduleSymbol) {
+                var type = getTypeOfSymbol(exportEquals);
+                if (shouldTreatPropertiesOfExternalModuleAsExports(type)) {
+                    getPropertiesOfType(type).forEach(function (symbol) {
+                        cb(symbol, symbol.escapedName);
+                    });
+                }
+            }
+        }
         function tryGetMemberInModuleExports(memberName, moduleSymbol) {
             var symbolTable = getExportsOfModule(moduleSymbol);
             if (symbolTable) {
@@ -48010,7 +49037,7 @@
                             }
                         });
                     }) : undefined;
-                var res = firstVariableMatch ? __spreadArray(__spreadArray([firstVariableMatch], additionalContainers), [container]) : __spreadArray(__spreadArray([], additionalContainers), [container]);
+                var res = firstVariableMatch ? __spreadArray(__spreadArray([firstVariableMatch], additionalContainers, true), [container], false) : __spreadArray(__spreadArray([], additionalContainers, true), [container], false);
                 res = ts.append(res, objectLiteralContainer);
                 res = ts.addRange(res, reexportContainers);
                 return res;
@@ -48019,7 +49046,7 @@
                 if (!ts.isAmbientModule(d) && d.parent && hasNonGlobalAugmentationExternalModuleSymbol(d.parent)) {
                     return getSymbolOfNode(d.parent);
                 }
-                if (ts.isClassExpression(d) && ts.isBinaryExpression(d.parent) && d.parent.operatorToken.kind === 62 /* EqualsToken */ && ts.isAccessExpression(d.parent.left) && ts.isEntityNameExpression(d.parent.left.expression)) {
+                if (ts.isClassExpression(d) && ts.isBinaryExpression(d.parent) && d.parent.operatorToken.kind === 63 /* EqualsToken */ && ts.isAccessExpression(d.parent.left) && ts.isEntityNameExpression(d.parent.left.expression)) {
                     if (ts.isModuleExportsAccessExpression(d.parent.left) || ts.isExportsIdentifier(d.parent.left.expression)) {
                         return getSymbolOfNode(ts.getSourceFileOfNode(d));
                     }
@@ -48091,7 +49118,7 @@
             var members = node.members;
             for (var _i = 0, members_3 = members; _i < members_3.length; _i++) {
                 var member = members_3[_i];
-                if (member.kind === 167 /* Constructor */ && ts.nodeIsPresent(member.body)) {
+                if (member.kind === 169 /* Constructor */ && ts.nodeIsPresent(member.body)) {
                     return member;
                 }
             }
@@ -48115,12 +49142,6 @@
             type.objectFlags = objectFlags;
             return type;
         }
-        function createBooleanType(trueFalseTypes) {
-            var type = getUnionType(trueFalseTypes);
-            type.flags |= 16 /* Boolean */;
-            type.intrinsicName = "boolean";
-            return type;
-        }
         function createObjectType(objectFlags, symbol) {
             var type = createType(524288 /* Object */);
             type.objectFlags = objectFlags;
@@ -48129,12 +49150,11 @@
             type.properties = undefined;
             type.callSignatures = undefined;
             type.constructSignatures = undefined;
-            type.stringIndexInfo = undefined;
-            type.numberIndexInfo = undefined;
+            type.indexInfos = undefined;
             return type;
         }
         function createTypeofType() {
-            return getUnionType(ts.arrayFrom(typeofEQFacts.keys(), getLiteralType));
+            return getUnionType(ts.arrayFrom(typeofEQFacts.keys(), getStringLiteralType));
         }
         function createTypeParameter(symbol) {
             var type = createType(262144 /* TypeParameter */);
@@ -48167,21 +49187,20 @@
             var index = getIndexSymbolFromSymbolTable(members);
             return index ? ts.concatenate(result, [index]) : result;
         }
-        function setStructuredTypeMembers(type, members, callSignatures, constructSignatures, stringIndexInfo, numberIndexInfo) {
+        function setStructuredTypeMembers(type, members, callSignatures, constructSignatures, indexInfos) {
             var resolved = type;
             resolved.members = members;
             resolved.properties = ts.emptyArray;
             resolved.callSignatures = callSignatures;
             resolved.constructSignatures = constructSignatures;
-            resolved.stringIndexInfo = stringIndexInfo;
-            resolved.numberIndexInfo = numberIndexInfo;
+            resolved.indexInfos = indexInfos;
             // This can loop back to getPropertyOfType() which would crash if `callSignatures` & `constructSignatures` are not initialized.
             if (members !== emptySymbols)
                 resolved.properties = getNamedMembers(members);
             return resolved;
         }
-        function createAnonymousType(symbol, members, callSignatures, constructSignatures, stringIndexInfo, numberIndexInfo) {
-            return setStructuredTypeMembers(createObjectType(16 /* Anonymous */, symbol), members, callSignatures, constructSignatures, stringIndexInfo, numberIndexInfo);
+        function createAnonymousType(symbol, members, callSignatures, constructSignatures, indexInfos) {
+            return setStructuredTypeMembers(createObjectType(16 /* Anonymous */, symbol), members, callSignatures, constructSignatures, indexInfos);
         }
         function getResolvedTypeWithoutAbstractConstructSignatures(type) {
             if (type.constructSignatures.length === 0)
@@ -48191,7 +49210,7 @@
             var constructSignatures = ts.filter(type.constructSignatures, function (signature) { return !(signature.flags & 4 /* Abstract */); });
             if (type.constructSignatures === constructSignatures)
                 return type;
-            var typeCopy = createAnonymousType(type.symbol, type.members, type.callSignatures, ts.some(constructSignatures) ? constructSignatures : ts.emptyArray, type.stringIndexInfo, type.numberIndexInfo);
+            var typeCopy = createAnonymousType(type.symbol, type.members, type.callSignatures, ts.some(constructSignatures) ? constructSignatures : ts.emptyArray, type.indexInfos);
             type.objectTypeWithoutAbstractConstructSignatures = typeCopy;
             typeCopy.objectTypeWithoutAbstractConstructSignatures = typeCopy;
             return typeCopy;
@@ -48201,28 +49220,28 @@
             var _loop_8 = function (location) {
                 // Locals of a source file are not in scope (because they get merged into the global symbol table)
                 if (location.locals && !isGlobalSourceFile(location)) {
-                    if (result = callback(location.locals, /*ignoreQualification*/ undefined, /*isLocalNameLookup*/ true)) {
+                    if (result = callback(location.locals, /*ignoreQualification*/ undefined, /*isLocalNameLookup*/ true, location)) {
                         return { value: result };
                     }
                 }
                 switch (location.kind) {
-                    case 298 /* SourceFile */:
+                    case 300 /* SourceFile */:
                         if (!ts.isExternalOrCommonJsModule(location)) {
                             break;
                         }
                     // falls through
-                    case 257 /* ModuleDeclaration */:
+                    case 259 /* ModuleDeclaration */:
                         var sym = getSymbolOfNode(location);
                         // `sym` may not have exports if this module declaration is backed by the symbol for a `const` that's being rewritten
                         // into a namespace - in such cases, it's best to just let the namespace appear empty (the const members couldn't have referred
                         // to one another anyway)
-                        if (result = callback((sym === null || sym === void 0 ? void 0 : sym.exports) || emptySymbols, /*ignoreQualification*/ undefined, /*isLocalNameLookup*/ true)) {
+                        if (result = callback((sym === null || sym === void 0 ? void 0 : sym.exports) || emptySymbols, /*ignoreQualification*/ undefined, /*isLocalNameLookup*/ true, location)) {
                             return { value: result };
                         }
                         break;
-                    case 253 /* ClassDeclaration */:
-                    case 222 /* ClassExpression */:
-                    case 254 /* InterfaceDeclaration */:
+                    case 255 /* ClassDeclaration */:
+                    case 224 /* ClassExpression */:
+                    case 256 /* InterfaceDeclaration */:
                         // Type parameters are bound into `members` lists so they can merge across declarations
                         // This is troublesome, since in all other respects, they behave like locals :cries:
                         // TODO: the below is shared with similar code in `resolveName` - in fact, rephrasing all this symbol
@@ -48237,7 +49256,7 @@
                                 (table_1 || (table_1 = ts.createSymbolTable())).set(key, memberSymbol);
                             }
                         });
-                        if (table_1 && (result = callback(table_1))) {
+                        if (table_1 && (result = callback(table_1, /*ignoreQualification*/ undefined, /*isLocalNameLookup*/ false, location))) {
                             return { value: result };
                         }
                         break;
@@ -48259,12 +49278,22 @@
             if (!(symbol && !isPropertyOrMethodDeclarationSymbol(symbol))) {
                 return undefined;
             }
+            var links = getSymbolLinks(symbol);
+            var cache = (links.accessibleChainCache || (links.accessibleChainCache = new ts.Map()));
+            // Go from enclosingDeclaration to the first scope we check, so the cache is keyed off the scope and thus shared more
+            var firstRelevantLocation = forEachSymbolTableInScope(enclosingDeclaration, function (_, __, ___, node) { return node; });
+            var key = (useOnlyExternalAliasing ? 0 : 1) + "|" + (firstRelevantLocation && getNodeId(firstRelevantLocation)) + "|" + meaning;
+            if (cache.has(key)) {
+                return cache.get(key);
+            }
             var id = getSymbolId(symbol);
             var visitedSymbolTables = visitedSymbolTablesMap.get(id);
             if (!visitedSymbolTables) {
                 visitedSymbolTablesMap.set(id, visitedSymbolTables = []);
             }
-            return forEachSymbolTableInScope(enclosingDeclaration, getAccessibleSymbolChainFromSymbolTable);
+            var result = forEachSymbolTableInScope(enclosingDeclaration, getAccessibleSymbolChainFromSymbolTable);
+            cache.set(key, result);
+            return result;
             /**
              * @param {ignoreQualification} boolean Set when a symbol is being looked for through the exports of another symbol (meaning we have a route to qualify it already)
              */
@@ -48307,7 +49336,7 @@
                         && (isLocalNameLookup ? !ts.some(symbolFromSymbolTable.declarations, ts.isNamespaceReexportDeclaration) : true)
                         // While exports are generally considered to be in scope, export-specifier declared symbols are _not_
                         // See similar comment in `resolveName` for details
-                        && (ignoreQualification || !ts.getDeclarationOfKind(symbolFromSymbolTable, 271 /* ExportSpecifier */))) {
+                        && (ignoreQualification || !ts.getDeclarationOfKind(symbolFromSymbolTable, 273 /* ExportSpecifier */))) {
                         var resolvedImportedSymbol = resolveAlias(symbolFromSymbolTable);
                         var candidate = getCandidateListForSymbol(symbolFromSymbolTable, resolvedImportedSymbol, ignoreQualification);
                         if (candidate) {
@@ -48351,7 +49380,7 @@
                     return true;
                 }
                 // Qualify if the symbol from symbol table has same meaning as expected
-                symbolFromSymbolTable = (symbolFromSymbolTable.flags & 2097152 /* Alias */ && !ts.getDeclarationOfKind(symbolFromSymbolTable, 271 /* ExportSpecifier */)) ? resolveAlias(symbolFromSymbolTable) : symbolFromSymbolTable;
+                symbolFromSymbolTable = (symbolFromSymbolTable.flags & 2097152 /* Alias */ && !ts.getDeclarationOfKind(symbolFromSymbolTable, 273 /* ExportSpecifier */)) ? resolveAlias(symbolFromSymbolTable) : symbolFromSymbolTable;
                 if (symbolFromSymbolTable.flags & meaning) {
                     qualify = true;
                     return true;
@@ -48366,10 +49395,10 @@
                 for (var _i = 0, _a = symbol.declarations; _i < _a.length; _i++) {
                     var declaration = _a[_i];
                     switch (declaration.kind) {
-                        case 164 /* PropertyDeclaration */:
-                        case 166 /* MethodDeclaration */:
-                        case 168 /* GetAccessor */:
-                        case 169 /* SetAccessor */:
+                        case 165 /* PropertyDeclaration */:
+                        case 167 /* MethodDeclaration */:
+                        case 170 /* GetAccessor */:
+                        case 171 /* SetAccessor */:
                             continue;
                         default:
                             return false;
@@ -48499,14 +49528,14 @@
             return node && getSymbolOfNode(node);
         }
         function hasExternalModuleSymbol(declaration) {
-            return ts.isAmbientModule(declaration) || (declaration.kind === 298 /* SourceFile */ && ts.isExternalOrCommonJsModule(declaration));
+            return ts.isAmbientModule(declaration) || (declaration.kind === 300 /* SourceFile */ && ts.isExternalOrCommonJsModule(declaration));
         }
         function hasNonGlobalAugmentationExternalModuleSymbol(declaration) {
-            return ts.isModuleWithStringLiteralName(declaration) || (declaration.kind === 298 /* SourceFile */ && ts.isExternalOrCommonJsModule(declaration));
+            return ts.isModuleWithStringLiteralName(declaration) || (declaration.kind === 300 /* SourceFile */ && ts.isExternalOrCommonJsModule(declaration));
         }
         function hasVisibleDeclarations(symbol, shouldComputeAliasToMakeVisible) {
             var aliasesToMakeVisible;
-            if (!ts.every(ts.filter(symbol.declarations, function (d) { return d.kind !== 78 /* Identifier */; }), getIsDeclarationVisible)) {
+            if (!ts.every(ts.filter(symbol.declarations, function (d) { return d.kind !== 79 /* Identifier */; }), getIsDeclarationVisible)) {
                 return undefined;
             }
             return { accessibility: 0 /* Accessible */, aliasesToMakeVisible: aliasesToMakeVisible };
@@ -48558,14 +49587,14 @@
         function isEntityNameVisible(entityName, enclosingDeclaration) {
             // get symbol of the first identifier of the entityName
             var meaning;
-            if (entityName.parent.kind === 177 /* TypeQuery */ ||
+            if (entityName.parent.kind === 179 /* TypeQuery */ ||
                 ts.isExpressionWithTypeArgumentsInClassExtendsClause(entityName.parent) ||
-                entityName.parent.kind === 159 /* ComputedPropertyName */) {
+                entityName.parent.kind === 160 /* ComputedPropertyName */) {
                 // Typeof value
                 meaning = 111551 /* Value */ | 1048576 /* ExportValue */;
             }
-            else if (entityName.kind === 158 /* QualifiedName */ || entityName.kind === 202 /* PropertyAccessExpression */ ||
-                entityName.parent.kind === 261 /* ImportEqualsDeclaration */) {
+            else if (entityName.kind === 159 /* QualifiedName */ || entityName.kind === 204 /* PropertyAccessExpression */ ||
+                entityName.parent.kind === 263 /* ImportEqualsDeclaration */) {
                 // Left identifier from type reference or TypeAlias
                 // Entity name of the import declaration
                 meaning = 1920 /* Namespace */;
@@ -48606,7 +49635,7 @@
             function symbolToStringWorker(writer) {
                 var entity = builder(symbol, meaning, enclosingDeclaration, nodeFlags); // TODO: GH#18217
                 // add neverAsciiEscape for GH#39027
-                var printer = (enclosingDeclaration === null || enclosingDeclaration === void 0 ? void 0 : enclosingDeclaration.kind) === 298 /* SourceFile */ ? ts.createPrinter({ removeComments: true, neverAsciiEscape: true }) : ts.createPrinter({ removeComments: true });
+                var printer = (enclosingDeclaration === null || enclosingDeclaration === void 0 ? void 0 : enclosingDeclaration.kind) === 300 /* SourceFile */ ? ts.createPrinter({ removeComments: true, neverAsciiEscape: true }) : ts.createPrinter({ removeComments: true });
                 var sourceFile = enclosingDeclaration && ts.getSourceFileOfNode(enclosingDeclaration);
                 printer.writeNode(4 /* Unspecified */, entity, /*sourceFile*/ sourceFile, writer);
                 return writer;
@@ -48618,10 +49647,10 @@
             function signatureToStringWorker(writer) {
                 var sigOutput;
                 if (flags & 262144 /* WriteArrowStyleSignature */) {
-                    sigOutput = kind === 1 /* Construct */ ? 176 /* ConstructorType */ : 175 /* FunctionType */;
+                    sigOutput = kind === 1 /* Construct */ ? 178 /* ConstructorType */ : 177 /* FunctionType */;
                 }
                 else {
-                    sigOutput = kind === 1 /* Construct */ ? 171 /* ConstructSignature */ : 170 /* CallSignature */;
+                    sigOutput = kind === 1 /* Construct */ ? 173 /* ConstructSignature */ : 172 /* CallSignature */;
                 }
                 var sig = nodeBuilder.signatureToSignatureDeclaration(signature, sigOutput, enclosingDeclaration, toNodeBuilderFlags(flags) | 70221824 /* IgnoreErrors */ | 512 /* WriteTypeParametersInQualifiedName */);
                 var printer = ts.createPrinter({ removeComments: true, omitTrailingSemicolon: true });
@@ -48675,8 +49704,8 @@
                 typeToTypeNode: function (type, enclosingDeclaration, flags, tracker) {
                     return withContext(enclosingDeclaration, flags, tracker, function (context) { return typeToTypeNodeHelper(type, context); });
                 },
-                indexInfoToIndexSignatureDeclaration: function (indexInfo, kind, enclosingDeclaration, flags, tracker) {
-                    return withContext(enclosingDeclaration, flags, tracker, function (context) { return indexInfoToIndexSignatureDeclarationHelper(indexInfo, kind, context, /*typeNode*/ undefined); });
+                indexInfoToIndexSignatureDeclaration: function (indexInfo, enclosingDeclaration, flags, tracker) {
+                    return withContext(enclosingDeclaration, flags, tracker, function (context) { return indexInfoToIndexSignatureDeclarationHelper(indexInfo, context, /*typeNode*/ undefined); });
                 },
                 signatureToSignatureDeclaration: function (signature, kind, enclosingDeclaration, flags, tracker) {
                     return withContext(enclosingDeclaration, flags, tracker, function (context) { return signatureToSignatureDeclarationHelper(signature, kind, context); });
@@ -48707,9 +49736,8 @@
                     enclosingDeclaration: enclosingDeclaration,
                     flags: flags || 0 /* None */,
                     // If no full tracker is provided, fake up a dummy one with a basic limited-functionality moduleResolverHost
-                    tracker: tracker && tracker.trackSymbol ? tracker : { trackSymbol: ts.noop, moduleResolverHost: flags & 134217728 /* DoNotIncludeSymbolChain */ ? {
+                    tracker: tracker && tracker.trackSymbol ? tracker : { trackSymbol: function () { return false; }, moduleResolverHost: flags & 134217728 /* DoNotIncludeSymbolChain */ ? {
                             getCommonSourceDirectory: !!host.getCommonSourceDirectory ? function () { return host.getCommonSourceDirectory(); } : function () { return ""; },
-                            getSourceFiles: function () { return host.getSourceFiles(); },
                             getCurrentDirectory: function () { return host.getCurrentDirectory(); },
                             getSymlinkCache: ts.maybeBind(host, host.getSymlinkCache),
                             useCaseSensitiveFileNames: ts.maybeBind(host, host.useCaseSensitiveFileNames),
@@ -48720,17 +49748,46 @@
                             getFileIncludeReasons: function () { return host.getFileIncludeReasons(); },
                         } : undefined },
                     encounteredError: false,
+                    reportedDiagnostic: false,
                     visitedTypes: undefined,
                     symbolDepth: undefined,
                     inferTypeParameters: undefined,
                     approximateLength: 0
                 };
+                context.tracker = wrapSymbolTrackerToReportForContext(context, context.tracker);
                 var resultingNode = cb(context);
                 if (context.truncating && context.flags & 1 /* NoTruncation */) {
                     (_b = (_a = context.tracker) === null || _a === void 0 ? void 0 : _a.reportTruncationError) === null || _b === void 0 ? void 0 : _b.call(_a);
                 }
                 return context.encounteredError ? undefined : resultingNode;
             }
+            function wrapSymbolTrackerToReportForContext(context, tracker) {
+                var oldTrackSymbol = tracker.trackSymbol;
+                return __assign(__assign({}, tracker), { reportCyclicStructureError: wrapReportedDiagnostic(tracker.reportCyclicStructureError), reportInaccessibleThisError: wrapReportedDiagnostic(tracker.reportInaccessibleThisError), reportInaccessibleUniqueSymbolError: wrapReportedDiagnostic(tracker.reportInaccessibleUniqueSymbolError), reportLikelyUnsafeImportRequiredError: wrapReportedDiagnostic(tracker.reportLikelyUnsafeImportRequiredError), reportNonlocalAugmentation: wrapReportedDiagnostic(tracker.reportNonlocalAugmentation), reportPrivateInBaseOfClassExpression: wrapReportedDiagnostic(tracker.reportPrivateInBaseOfClassExpression), reportNonSerializableProperty: wrapReportedDiagnostic(tracker.reportNonSerializableProperty), trackSymbol: oldTrackSymbol && (function () {
+                        var args = [];
+                        for (var _i = 0; _i < arguments.length; _i++) {
+                            args[_i] = arguments[_i];
+                        }
+                        var result = oldTrackSymbol.apply(void 0, args);
+                        if (result) {
+                            context.reportedDiagnostic = true;
+                        }
+                        return result;
+                    }) });
+                function wrapReportedDiagnostic(method) {
+                    if (!method) {
+                        return method;
+                    }
+                    return (function () {
+                        var args = [];
+                        for (var _i = 0; _i < arguments.length; _i++) {
+                            args[_i] = arguments[_i];
+                        }
+                        context.reportedDiagnostic = true;
+                        return method.apply(void 0, args);
+                    });
+                }
+            }
             function checkTruncationLength(context) {
                 if (context.truncating)
                     return context.truncating;
@@ -48748,33 +49805,33 @@
                         return undefined; // TODO: GH#18217
                     }
                     context.approximateLength += 3;
-                    return ts.factory.createKeywordTypeNode(128 /* AnyKeyword */);
+                    return ts.factory.createKeywordTypeNode(129 /* AnyKeyword */);
                 }
                 if (!(context.flags & 536870912 /* NoTypeReduction */)) {
                     type = getReducedType(type);
                 }
                 if (type.flags & 1 /* Any */) {
                     context.approximateLength += 3;
-                    return ts.factory.createKeywordTypeNode(type === intrinsicMarkerType ? 136 /* IntrinsicKeyword */ : 128 /* AnyKeyword */);
+                    return ts.factory.createKeywordTypeNode(type === intrinsicMarkerType ? 137 /* IntrinsicKeyword */ : 129 /* AnyKeyword */);
                 }
                 if (type.flags & 2 /* Unknown */) {
-                    return ts.factory.createKeywordTypeNode(152 /* UnknownKeyword */);
+                    return ts.factory.createKeywordTypeNode(153 /* UnknownKeyword */);
                 }
                 if (type.flags & 4 /* String */) {
                     context.approximateLength += 6;
-                    return ts.factory.createKeywordTypeNode(147 /* StringKeyword */);
+                    return ts.factory.createKeywordTypeNode(148 /* StringKeyword */);
                 }
                 if (type.flags & 8 /* Number */) {
                     context.approximateLength += 6;
-                    return ts.factory.createKeywordTypeNode(144 /* NumberKeyword */);
+                    return ts.factory.createKeywordTypeNode(145 /* NumberKeyword */);
                 }
                 if (type.flags & 64 /* BigInt */) {
                     context.approximateLength += 6;
-                    return ts.factory.createKeywordTypeNode(155 /* BigIntKeyword */);
+                    return ts.factory.createKeywordTypeNode(156 /* BigIntKeyword */);
                 }
-                if (type.flags & 16 /* Boolean */) {
+                if (type.flags & 16 /* Boolean */ && !type.aliasSymbol) {
                     context.approximateLength += 7;
-                    return ts.factory.createKeywordTypeNode(131 /* BooleanKeyword */);
+                    return ts.factory.createKeywordTypeNode(132 /* BooleanKeyword */);
                 }
                 if (type.flags & 1024 /* EnumLiteral */ && !(type.flags & 1048576 /* Union */)) {
                     var parentSymbol = getParentOfSymbol(type.symbol);
@@ -48828,15 +49885,15 @@
                         }
                     }
                     context.approximateLength += 13;
-                    return ts.factory.createTypeOperatorNode(151 /* UniqueKeyword */, ts.factory.createKeywordTypeNode(148 /* SymbolKeyword */));
+                    return ts.factory.createTypeOperatorNode(152 /* UniqueKeyword */, ts.factory.createKeywordTypeNode(149 /* SymbolKeyword */));
                 }
                 if (type.flags & 16384 /* Void */) {
                     context.approximateLength += 4;
-                    return ts.factory.createKeywordTypeNode(113 /* VoidKeyword */);
+                    return ts.factory.createKeywordTypeNode(114 /* VoidKeyword */);
                 }
                 if (type.flags & 32768 /* Undefined */) {
                     context.approximateLength += 9;
-                    return ts.factory.createKeywordTypeNode(150 /* UndefinedKeyword */);
+                    return ts.factory.createKeywordTypeNode(151 /* UndefinedKeyword */);
                 }
                 if (type.flags & 65536 /* Null */) {
                     context.approximateLength += 4;
@@ -48844,15 +49901,15 @@
                 }
                 if (type.flags & 131072 /* Never */) {
                     context.approximateLength += 5;
-                    return ts.factory.createKeywordTypeNode(141 /* NeverKeyword */);
+                    return ts.factory.createKeywordTypeNode(142 /* NeverKeyword */);
                 }
                 if (type.flags & 4096 /* ESSymbol */) {
                     context.approximateLength += 6;
-                    return ts.factory.createKeywordTypeNode(148 /* SymbolKeyword */);
+                    return ts.factory.createKeywordTypeNode(149 /* SymbolKeyword */);
                 }
                 if (type.flags & 67108864 /* NonPrimitive */) {
                     context.approximateLength += 6;
-                    return ts.factory.createKeywordTypeNode(145 /* ObjectKeyword */);
+                    return ts.factory.createKeywordTypeNode(146 /* ObjectKeyword */);
                 }
                 if (isThisTypeParameter(type)) {
                     if (context.flags & 4194304 /* InObjectTypeLiteral */) {
@@ -48922,7 +49979,7 @@
                     var indexedType = type.type;
                     context.approximateLength += 6;
                     var indexTypeNode = typeToTypeNodeHelper(indexedType, context);
-                    return ts.factory.createTypeOperatorNode(138 /* KeyOfKeyword */, indexTypeNode);
+                    return ts.factory.createTypeOperatorNode(139 /* KeyOfKeyword */, indexTypeNode);
                 }
                 if (type.flags & 134217728 /* TemplateLiteral */) {
                     var texts_1 = type.texts;
@@ -48943,6 +50000,13 @@
                     return ts.factory.createIndexedAccessTypeNode(objectTypeNode, indexTypeNode);
                 }
                 if (type.flags & 16777216 /* Conditional */) {
+                    return visitAndTransformType(type, function (type) { return conditionalTypeToTypeNode(type); });
+                }
+                if (type.flags & 33554432 /* Substitution */) {
+                    return typeToTypeNodeHelper(type.baseType, context);
+                }
+                return ts.Debug.fail("Should be unreachable.");
+                function conditionalTypeToTypeNode(type) {
                     var checkTypeNode = typeToTypeNodeHelper(type.checkType, context);
                     var saveInferTypeParameters = context.inferTypeParameters;
                     context.inferTypeParameters = type.root.inferTypeParameters;
@@ -48953,10 +50017,6 @@
                     context.approximateLength += 15;
                     return ts.factory.createConditionalTypeNode(checkTypeNode, extendsTypeNode, trueTypeNode, falseTypeNode);
                 }
-                if (type.flags & 33554432 /* Substitution */) {
-                    return typeToTypeNodeHelper(type.baseType, context);
-                }
-                return ts.Debug.fail("Should be unreachable.");
                 function typeToTypeNodeOrCircularityElision(type) {
                     var _a, _b, _c;
                     if (type.flags & 1048576 /* Union */) {
@@ -48979,14 +50039,14 @@
                     if (isMappedTypeWithKeyofConstraintDeclaration(type)) {
                         // We have a { [P in keyof T]: X }
                         // We do this to ensure we retain the toplevel keyof-ness of the type which may be lost due to keyof distribution during `getConstraintTypeFromMappedType`
-                        appropriateConstraintTypeNode = ts.factory.createTypeOperatorNode(138 /* KeyOfKeyword */, typeToTypeNodeHelper(getModifiersTypeFromMappedType(type), context));
+                        appropriateConstraintTypeNode = ts.factory.createTypeOperatorNode(139 /* KeyOfKeyword */, typeToTypeNodeHelper(getModifiersTypeFromMappedType(type), context));
                     }
                     else {
                         appropriateConstraintTypeNode = typeToTypeNodeHelper(getConstraintTypeFromMappedType(type), context);
                     }
                     var typeParameterNode = typeParameterToDeclarationWithConstraint(getTypeParameterFromMappedType(type), context, appropriateConstraintTypeNode);
                     var nameTypeNode = type.declaration.nameType ? typeToTypeNodeHelper(getNameTypeFromMappedType(type), context) : undefined;
-                    var templateTypeNode = typeToTypeNodeHelper(getTemplateTypeFromMappedType(type), context);
+                    var templateTypeNode = typeToTypeNodeHelper(removeMissingType(getTemplateTypeFromMappedType(type), !!(getMappedTypeModifiers(type) & 4 /* IncludeOptional */)), context);
                     var mappedTypeNode = ts.factory.createMappedTypeNode(readonlyToken, typeParameterNode, nameTypeNode, questionToken, templateTypeNode);
                     context.approximateLength += 10;
                     return ts.setEmitFlags(mappedTypeNode, 1 /* SingleLine */);
@@ -49004,7 +50064,7 @@
                         // Always use 'typeof T' for type of class, enum, and module objects
                         else if (symbol.flags & 32 /* Class */
                             && !getBaseTypeVariableOfClass(symbol)
-                            && !(symbol.valueDeclaration && symbol.valueDeclaration.kind === 222 /* ClassExpression */ && context.flags & 2048 /* WriteClassExpressionAsTypeLiteral */) ||
+                            && !(symbol.valueDeclaration && symbol.valueDeclaration.kind === 224 /* ClassExpression */ && context.flags & 2048 /* WriteClassExpressionAsTypeLiteral */) ||
                             symbol.flags & (384 /* Enum */ | 512 /* ValueModule */) ||
                             shouldWriteTypeOfFunctionSymbol()) {
                             return symbolToTypeNode(symbol, context, isInstanceType);
@@ -49031,11 +50091,11 @@
                     function shouldWriteTypeOfFunctionSymbol() {
                         var _a;
                         var isStaticMethodSymbol = !!(symbol.flags & 8192 /* Method */) && // typeof static method
-                            ts.some(symbol.declarations, function (declaration) { return ts.hasSyntacticModifier(declaration, 32 /* Static */); });
+                            ts.some(symbol.declarations, function (declaration) { return ts.isStatic(declaration); });
                         var isNonLocalFunctionSymbol = !!(symbol.flags & 16 /* Function */) &&
                             (symbol.parent || // is exported function symbol
                                 ts.forEach(symbol.declarations, function (declaration) {
-                                    return declaration.parent.kind === 298 /* SourceFile */ || declaration.parent.kind === 258 /* ModuleBlock */;
+                                    return declaration.parent.kind === 300 /* SourceFile */ || declaration.parent.kind === 260 /* ModuleBlock */;
                                 }));
                         if (isStaticMethodSymbol || isNonLocalFunctionSymbol) {
                             // typeof is allowed only for static/non local functions
@@ -49045,11 +50105,13 @@
                     }
                 }
                 function visitAndTransformType(type, transform) {
+                    var _a, _b;
                     var typeId = type.id;
                     var isConstructorObject = ts.getObjectFlags(type) & 16 /* Anonymous */ && type.symbol && type.symbol.flags & 32 /* Class */;
                     var id = ts.getObjectFlags(type) & 4 /* Reference */ && type.node ? "N" + getNodeId(type.node) :
-                        type.symbol ? (isConstructorObject ? "+" : "") + getSymbolId(type.symbol) :
-                            undefined;
+                        type.flags & 16777216 /* Conditional */ ? "N" + getNodeId(type.root.node) :
+                            type.symbol ? (isConstructorObject ? "+" : "") + getSymbolId(type.symbol) :
+                                undefined;
                     // Since instantiations of the same anonymous type have the same symbol, tracking symbols instead
                     // of types allows us to catch circular references to instantiations of the same anonymous type
                     if (!context.visitedTypes) {
@@ -49058,6 +50120,19 @@
                     if (id && !context.symbolDepth) {
                         context.symbolDepth = new ts.Map();
                     }
+                    var links = context.enclosingDeclaration && getNodeLinks(context.enclosingDeclaration);
+                    var key = getTypeId(type) + "|" + context.flags;
+                    if (links) {
+                        links.serializedTypes || (links.serializedTypes = new ts.Map());
+                    }
+                    var cachedResult = (_a = links === null || links === void 0 ? void 0 : links.serializedTypes) === null || _a === void 0 ? void 0 : _a.get(key);
+                    if (cachedResult) {
+                        if (cachedResult.truncating) {
+                            context.truncating = true;
+                        }
+                        context.approximateLength += cachedResult.addedLength;
+                        return deepCloneOrReuseNode(cachedResult);
+                    }
                     var depth;
                     if (id) {
                         depth = context.symbolDepth.get(id) || 0;
@@ -49067,31 +50142,46 @@
                         context.symbolDepth.set(id, depth + 1);
                     }
                     context.visitedTypes.add(typeId);
+                    var startLength = context.approximateLength;
                     var result = transform(type);
+                    var addedLength = context.approximateLength - startLength;
+                    if (!context.reportedDiagnostic && !context.encounteredError) {
+                        if (context.truncating) {
+                            result.truncating = true;
+                        }
+                        result.addedLength = addedLength;
+                        (_b = links === null || links === void 0 ? void 0 : links.serializedTypes) === null || _b === void 0 ? void 0 : _b.set(key, result);
+                    }
                     context.visitedTypes.delete(typeId);
                     if (id) {
                         context.symbolDepth.set(id, depth);
                     }
                     return result;
+                    function deepCloneOrReuseNode(node) {
+                        if (!ts.nodeIsSynthesized(node) && ts.getParseTreeNode(node) === node) {
+                            return node;
+                        }
+                        return ts.setTextRange(ts.factory.cloneNode(ts.visitEachChild(node, deepCloneOrReuseNode, ts.nullTransformationContext)), node);
+                    }
                 }
                 function createTypeNodeFromObjectType(type) {
                     if (isGenericMappedType(type) || type.containsError) {
                         return createMappedTypeNodeFromType(type);
                     }
                     var resolved = resolveStructuredTypeMembers(type);
-                    if (!resolved.properties.length && !resolved.stringIndexInfo && !resolved.numberIndexInfo) {
+                    if (!resolved.properties.length && !resolved.indexInfos.length) {
                         if (!resolved.callSignatures.length && !resolved.constructSignatures.length) {
                             context.approximateLength += 2;
                             return ts.setEmitFlags(ts.factory.createTypeLiteralNode(/*members*/ undefined), 1 /* SingleLine */);
                         }
                         if (resolved.callSignatures.length === 1 && !resolved.constructSignatures.length) {
                             var signature = resolved.callSignatures[0];
-                            var signatureNode = signatureToSignatureDeclarationHelper(signature, 175 /* FunctionType */, context);
+                            var signatureNode = signatureToSignatureDeclarationHelper(signature, 177 /* FunctionType */, context);
                             return signatureNode;
                         }
                         if (resolved.constructSignatures.length === 1 && !resolved.callSignatures.length) {
                             var signature = resolved.constructSignatures[0];
-                            var signatureNode = signatureToSignatureDeclarationHelper(signature, 176 /* ConstructorType */, context);
+                            var signatureNode = signatureToSignatureDeclarationHelper(signature, 178 /* ConstructorType */, context);
                             return signatureNode;
                         }
                     }
@@ -49101,8 +50191,7 @@
                         // count the number of type elements excluding abstract constructors
                         var typeElementCount = resolved.callSignatures.length +
                             (resolved.constructSignatures.length - abstractSignatures.length) +
-                            (resolved.stringIndexInfo ? 1 : 0) +
-                            (resolved.numberIndexInfo ? 1 : 0) +
+                            resolved.indexInfos.length +
                             // exclude `prototype` when writing a class expression as a type literal, as per
                             // the logic in `createTypeNodesFromResolvedType`.
                             (context.flags & 2048 /* WriteClassExpressionAsTypeLiteral */ ?
@@ -49135,9 +50224,10 @@
                         }
                         var elementType = typeToTypeNodeHelper(typeArguments[0], context);
                         var arrayType = ts.factory.createArrayTypeNode(elementType);
-                        return type.target === globalArrayType ? arrayType : ts.factory.createTypeOperatorNode(142 /* ReadonlyKeyword */, arrayType);
+                        return type.target === globalArrayType ? arrayType : ts.factory.createTypeOperatorNode(143 /* ReadonlyKeyword */, arrayType);
                     }
                     else if (type.target.objectFlags & 8 /* Tuple */) {
+                        typeArguments = ts.sameMap(typeArguments, function (t, i) { return removeMissingType(t, !!(type.target.elementFlags[i] & 2 /* Optional */)); });
                         if (typeArguments.length > 0) {
                             var arity = getTypeReferenceArity(type);
                             var tupleConstituentNodes = mapToTypeNodes(typeArguments.slice(0, arity), context);
@@ -49159,12 +50249,12 @@
                                     }
                                 }
                                 var tupleTypeNode = ts.setEmitFlags(ts.factory.createTupleTypeNode(tupleConstituentNodes), 1 /* SingleLine */);
-                                return type.target.readonly ? ts.factory.createTypeOperatorNode(142 /* ReadonlyKeyword */, tupleTypeNode) : tupleTypeNode;
+                                return type.target.readonly ? ts.factory.createTypeOperatorNode(143 /* ReadonlyKeyword */, tupleTypeNode) : tupleTypeNode;
                             }
                         }
                         if (context.encounteredError || (context.flags & 524288 /* AllowEmptyTuple */)) {
                             var tupleTypeNode = ts.setEmitFlags(ts.factory.createTupleTypeNode([]), 1 /* SingleLine */);
-                            return type.target.readonly ? ts.factory.createTypeOperatorNode(142 /* ReadonlyKeyword */, tupleTypeNode) : tupleTypeNode;
+                            return type.target.readonly ? ts.factory.createTypeOperatorNode(143 /* ReadonlyKeyword */, tupleTypeNode) : tupleTypeNode;
                         }
                         context.encounteredError = true;
                         return undefined; // TODO: GH#18217
@@ -49271,34 +50361,25 @@
                     var typeElements = [];
                     for (var _i = 0, _a = resolvedType.callSignatures; _i < _a.length; _i++) {
                         var signature = _a[_i];
-                        typeElements.push(signatureToSignatureDeclarationHelper(signature, 170 /* CallSignature */, context));
+                        typeElements.push(signatureToSignatureDeclarationHelper(signature, 172 /* CallSignature */, context));
                     }
                     for (var _b = 0, _c = resolvedType.constructSignatures; _b < _c.length; _b++) {
                         var signature = _c[_b];
                         if (signature.flags & 4 /* Abstract */)
                             continue;
-                        typeElements.push(signatureToSignatureDeclarationHelper(signature, 171 /* ConstructSignature */, context));
+                        typeElements.push(signatureToSignatureDeclarationHelper(signature, 173 /* ConstructSignature */, context));
                     }
-                    if (resolvedType.stringIndexInfo) {
-                        var indexSignature = void 0;
-                        if (resolvedType.objectFlags & 1024 /* ReverseMapped */) {
-                            indexSignature = indexInfoToIndexSignatureDeclarationHelper(createIndexInfo(anyType, resolvedType.stringIndexInfo.isReadonly, resolvedType.stringIndexInfo.declaration), 0 /* String */, context, createElidedInformationPlaceholder(context));
-                        }
-                        else {
-                            indexSignature = indexInfoToIndexSignatureDeclarationHelper(resolvedType.stringIndexInfo, 0 /* String */, context, /*typeNode*/ undefined);
-                        }
-                        typeElements.push(indexSignature);
-                    }
-                    if (resolvedType.numberIndexInfo) {
-                        typeElements.push(indexInfoToIndexSignatureDeclarationHelper(resolvedType.numberIndexInfo, 1 /* Number */, context, /*typeNode*/ undefined));
+                    for (var _d = 0, _e = resolvedType.indexInfos; _d < _e.length; _d++) {
+                        var info = _e[_d];
+                        typeElements.push(indexInfoToIndexSignatureDeclarationHelper(info, context, resolvedType.objectFlags & 1024 /* ReverseMapped */ ? createElidedInformationPlaceholder(context) : undefined));
                     }
                     var properties = resolvedType.properties;
                     if (!properties) {
                         return typeElements;
                     }
                     var i = 0;
-                    for (var _d = 0, properties_1 = properties; _d < properties_1.length; _d++) {
-                        var propertySymbol = properties_1[_d];
+                    for (var _f = 0, properties_1 = properties; _f < properties_1.length; _f++) {
+                        var propertySymbol = properties_1[_f];
                         i++;
                         if (context.flags & 2048 /* WriteClassExpressionAsTypeLiteral */) {
                             if (propertySymbol.flags & 4194304 /* Prototype */) {
@@ -49323,7 +50404,7 @@
                 if (!(context.flags & 1 /* NoTruncation */)) {
                     return ts.factory.createTypeReferenceNode(ts.factory.createIdentifier("..."), /*typeArguments*/ undefined);
                 }
-                return ts.factory.createKeywordTypeNode(128 /* AnyKeyword */);
+                return ts.factory.createKeywordTypeNode(129 /* AnyKeyword */);
             }
             function shouldUsePlaceholderForProperty(propertySymbol, context) {
                 var _a;
@@ -49339,27 +50420,32 @@
                             && !(ts.getObjectFlags(ts.last(context.reverseMappedStack).propertyType) & 16 /* Anonymous */)));
             }
             function addPropertyToElementList(propertySymbol, context, typeElements) {
-                var _a;
+                var _a, _b;
                 var propertyIsReverseMapped = !!(ts.getCheckFlags(propertySymbol) & 8192 /* ReverseMapped */);
                 var propertyType = shouldUsePlaceholderForProperty(propertySymbol, context) ?
-                    anyType : getTypeOfSymbol(propertySymbol);
+                    anyType : getNonMissingTypeOfSymbol(propertySymbol);
                 var saveEnclosingDeclaration = context.enclosingDeclaration;
                 context.enclosingDeclaration = undefined;
                 if (context.tracker.trackSymbol && ts.getCheckFlags(propertySymbol) & 4096 /* Late */ && isLateBoundName(propertySymbol.escapedName)) {
-                    var decl = ts.first(propertySymbol.declarations);
-                    if (propertySymbol.declarations && hasLateBindableName(decl)) {
-                        if (ts.isBinaryExpression(decl)) {
-                            var name = ts.getNameOfDeclaration(decl);
-                            if (name && ts.isElementAccessExpression(name) && ts.isPropertyAccessEntityNameExpression(name.argumentExpression)) {
-                                trackComputedName(name.argumentExpression, saveEnclosingDeclaration, context);
+                    if (propertySymbol.declarations) {
+                        var decl = ts.first(propertySymbol.declarations);
+                        if (hasLateBindableName(decl)) {
+                            if (ts.isBinaryExpression(decl)) {
+                                var name = ts.getNameOfDeclaration(decl);
+                                if (name && ts.isElementAccessExpression(name) && ts.isPropertyAccessEntityNameExpression(name.argumentExpression)) {
+                                    trackComputedName(name.argumentExpression, saveEnclosingDeclaration, context);
+                                }
+                            }
+                            else {
+                                trackComputedName(decl.name.expression, saveEnclosingDeclaration, context);
                             }
                         }
-                        else {
-                            trackComputedName(decl.name.expression, saveEnclosingDeclaration, context);
-                        }
+                    }
+                    else if ((_a = context.tracker) === null || _a === void 0 ? void 0 : _a.reportNonSerializableProperty) {
+                        context.tracker.reportNonSerializableProperty(symbolToString(propertySymbol));
                     }
                 }
-                context.enclosingDeclaration = propertySymbol.valueDeclaration || ((_a = propertySymbol.declarations) === null || _a === void 0 ? void 0 : _a[0]) || saveEnclosingDeclaration;
+                context.enclosingDeclaration = propertySymbol.valueDeclaration || ((_b = propertySymbol.declarations) === null || _b === void 0 ? void 0 : _b[0]) || saveEnclosingDeclaration;
                 var propertyName = getPropertyNameNodeForSymbol(propertySymbol, context);
                 context.enclosingDeclaration = saveEnclosingDeclaration;
                 context.approximateLength += (ts.symbolName(propertySymbol).length + 1);
@@ -49368,7 +50454,7 @@
                     var signatures = getSignaturesOfType(filterType(propertyType, function (t) { return !(t.flags & 32768 /* Undefined */); }), 0 /* Call */);
                     for (var _i = 0, signatures_1 = signatures; _i < signatures_1.length; _i++) {
                         var signature = signatures_1[_i];
-                        var methodDeclaration = signatureToSignatureDeclarationHelper(signature, 165 /* MethodSignature */, context, { name: propertyName, questionToken: optionalToken });
+                        var methodDeclaration = signatureToSignatureDeclarationHelper(signature, 166 /* MethodSignature */, context, { name: propertyName, questionToken: optionalToken });
                         typeElements.push(preserveCommentsOn(methodDeclaration));
                     }
                 }
@@ -49382,12 +50468,12 @@
                             context.reverseMappedStack || (context.reverseMappedStack = []);
                             context.reverseMappedStack.push(propertySymbol);
                         }
-                        propertyTypeNode = propertyType ? serializeTypeForDeclaration(context, propertyType, propertySymbol, saveEnclosingDeclaration) : ts.factory.createKeywordTypeNode(128 /* AnyKeyword */);
+                        propertyTypeNode = propertyType ? serializeTypeForDeclaration(context, propertyType, propertySymbol, saveEnclosingDeclaration) : ts.factory.createKeywordTypeNode(129 /* AnyKeyword */);
                         if (propertyIsReverseMapped) {
                             context.reverseMappedStack.pop();
                         }
                     }
-                    var modifiers = isReadonlySymbol(propertySymbol) ? [ts.factory.createToken(142 /* ReadonlyKeyword */)] : undefined;
+                    var modifiers = isReadonlySymbol(propertySymbol) ? [ts.factory.createToken(143 /* ReadonlyKeyword */)] : undefined;
                     if (modifiers) {
                         context.approximateLength += 9;
                     }
@@ -49396,8 +50482,8 @@
                 }
                 function preserveCommentsOn(node) {
                     var _a;
-                    if (ts.some(propertySymbol.declarations, function (d) { return d.kind === 337 /* JSDocPropertyTag */; })) {
-                        var d = (_a = propertySymbol.declarations) === null || _a === void 0 ? void 0 : _a.find(function (d) { return d.kind === 337 /* JSDocPropertyTag */; });
+                    if (ts.some(propertySymbol.declarations, function (d) { return d.kind === 342 /* JSDocPropertyTag */; })) {
+                        var d = (_a = propertySymbol.declarations) === null || _a === void 0 ? void 0 : _a.find(function (d) { return d.kind === 342 /* JSDocPropertyTag */; });
                         var commentText = ts.getTextOfJSDocComment(d.comment);
                         if (commentText) {
                             ts.setSyntheticLeadingComments(node, [{ kind: 3 /* MultiLineCommentTrivia */, text: "*\n * " + commentText.replace(/\n/g, "\n * ") + "\n ", pos: -1, end: -1, hasTrailingNewLine: true }]);
@@ -49481,9 +50567,9 @@
                     || !!a.symbol && a.symbol === b.symbol
                     || !!a.aliasSymbol && a.aliasSymbol === b.aliasSymbol;
             }
-            function indexInfoToIndexSignatureDeclarationHelper(indexInfo, kind, context, typeNode) {
+            function indexInfoToIndexSignatureDeclarationHelper(indexInfo, context, typeNode) {
                 var name = ts.getNameFromIndexInfo(indexInfo) || "x";
-                var indexerTypeNode = ts.factory.createKeywordTypeNode(kind === 0 /* String */ ? 147 /* StringKeyword */ : 144 /* NumberKeyword */);
+                var indexerTypeNode = typeToTypeNodeHelper(indexInfo.keyType, context);
                 var indexingParameter = ts.factory.createParameterDeclaration(
                 /*decorators*/ undefined, 
                 /*modifiers*/ undefined, 
@@ -49498,13 +50584,14 @@
                 }
                 context.approximateLength += (name.length + 4);
                 return ts.factory.createIndexSignature(
-                /*decorators*/ undefined, indexInfo.isReadonly ? [ts.factory.createToken(142 /* ReadonlyKeyword */)] : undefined, [indexingParameter], typeNode);
+                /*decorators*/ undefined, indexInfo.isReadonly ? [ts.factory.createToken(143 /* ReadonlyKeyword */)] : undefined, [indexingParameter], typeNode);
             }
             function signatureToSignatureDeclarationHelper(signature, kind, context, options) {
                 var _a, _b, _c, _d;
                 var suppressAny = context.flags & 256 /* SuppressAnyReturnType */;
                 if (suppressAny)
                     context.flags &= ~256 /* SuppressAnyReturnType */; // suppress only toplevel `any`s
+                context.approximateLength += 3; // Usually a signature contributes a few more characters than this, but 3 is the minimum
                 var typeParameters;
                 var typeArguments;
                 if (context.flags & 32 /* WriteTypeArgumentsOfSignature */ && signature.target && signature.mapper && signature.target.typeParameters) {
@@ -49515,7 +50602,7 @@
                 }
                 var expandedParams = getExpandedParameters(signature, /*skipUnionExpanding*/ true)[0];
                 // If the expanded parameter list had a variadic in a non-trailing position, don't expand it
-                var parameters = (ts.some(expandedParams, function (p) { return p !== expandedParams[expandedParams.length - 1] && !!(ts.getCheckFlags(p) & 32768 /* RestParameter */); }) ? signature.parameters : expandedParams).map(function (parameter) { return symbolToParameterDeclaration(parameter, context, kind === 167 /* Constructor */, options === null || options === void 0 ? void 0 : options.privateSymbolVisitor, options === null || options === void 0 ? void 0 : options.bundledImports); });
+                var parameters = (ts.some(expandedParams, function (p) { return p !== expandedParams[expandedParams.length - 1] && !!(ts.getCheckFlags(p) & 32768 /* RestParameter */); }) ? signature.parameters : expandedParams).map(function (parameter) { return symbolToParameterDeclaration(parameter, context, kind === 169 /* Constructor */, options === null || options === void 0 ? void 0 : options.privateSymbolVisitor, options === null || options === void 0 ? void 0 : options.bundledImports); });
                 if (signature.thisParameter) {
                     var thisParameter = symbolToParameterDeclaration(signature.thisParameter, context);
                     parameters.unshift(thisParameter);
@@ -49524,7 +50611,7 @@
                 var typePredicate = getTypePredicateOfSignature(signature);
                 if (typePredicate) {
                     var assertsModifier = typePredicate.kind === 2 /* AssertsThis */ || typePredicate.kind === 3 /* AssertsIdentifier */ ?
-                        ts.factory.createToken(127 /* AssertsKeyword */) :
+                        ts.factory.createToken(128 /* AssertsKeyword */) :
                         undefined;
                     var parameterName = typePredicate.kind === 1 /* Identifier */ || typePredicate.kind === 3 /* AssertsIdentifier */ ?
                         ts.setEmitFlags(ts.factory.createIdentifier(typePredicate.parameterName), 16777216 /* NoAsciiEscaping */) :
@@ -49538,29 +50625,28 @@
                         returnTypeNode = serializeReturnTypeForSignature(context, returnType, signature, options === null || options === void 0 ? void 0 : options.privateSymbolVisitor, options === null || options === void 0 ? void 0 : options.bundledImports);
                     }
                     else if (!suppressAny) {
-                        returnTypeNode = ts.factory.createKeywordTypeNode(128 /* AnyKeyword */);
+                        returnTypeNode = ts.factory.createKeywordTypeNode(129 /* AnyKeyword */);
                     }
                 }
                 var modifiers = options === null || options === void 0 ? void 0 : options.modifiers;
-                if ((kind === 176 /* ConstructorType */) && signature.flags & 4 /* Abstract */) {
+                if ((kind === 178 /* ConstructorType */) && signature.flags & 4 /* Abstract */) {
                     var flags = ts.modifiersToFlags(modifiers);
                     modifiers = ts.factory.createModifiersFromModifierFlags(flags | 128 /* Abstract */);
                 }
-                context.approximateLength += 3; // Usually a signature contributes a few more characters than this, but 3 is the minimum
-                var node = kind === 170 /* CallSignature */ ? ts.factory.createCallSignature(typeParameters, parameters, returnTypeNode) :
-                    kind === 171 /* ConstructSignature */ ? ts.factory.createConstructSignature(typeParameters, parameters, returnTypeNode) :
-                        kind === 165 /* MethodSignature */ ? ts.factory.createMethodSignature(modifiers, (_a = options === null || options === void 0 ? void 0 : options.name) !== null && _a !== void 0 ? _a : ts.factory.createIdentifier(""), options === null || options === void 0 ? void 0 : options.questionToken, typeParameters, parameters, returnTypeNode) :
-                            kind === 166 /* MethodDeclaration */ ? ts.factory.createMethodDeclaration(/*decorators*/ undefined, modifiers, /*asteriskToken*/ undefined, (_b = options === null || options === void 0 ? void 0 : options.name) !== null && _b !== void 0 ? _b : ts.factory.createIdentifier(""), /*questionToken*/ undefined, typeParameters, parameters, returnTypeNode, /*body*/ undefined) :
-                                kind === 167 /* Constructor */ ? ts.factory.createConstructorDeclaration(/*decorators*/ undefined, modifiers, parameters, /*body*/ undefined) :
-                                    kind === 168 /* GetAccessor */ ? ts.factory.createGetAccessorDeclaration(/*decorators*/ undefined, modifiers, (_c = options === null || options === void 0 ? void 0 : options.name) !== null && _c !== void 0 ? _c : ts.factory.createIdentifier(""), parameters, returnTypeNode, /*body*/ undefined) :
-                                        kind === 169 /* SetAccessor */ ? ts.factory.createSetAccessorDeclaration(/*decorators*/ undefined, modifiers, (_d = options === null || options === void 0 ? void 0 : options.name) !== null && _d !== void 0 ? _d : ts.factory.createIdentifier(""), parameters, /*body*/ undefined) :
-                                            kind === 172 /* IndexSignature */ ? ts.factory.createIndexSignature(/*decorators*/ undefined, modifiers, parameters, returnTypeNode) :
-                                                kind === 309 /* JSDocFunctionType */ ? ts.factory.createJSDocFunctionType(parameters, returnTypeNode) :
-                                                    kind === 175 /* FunctionType */ ? ts.factory.createFunctionTypeNode(typeParameters, parameters, returnTypeNode !== null && returnTypeNode !== void 0 ? returnTypeNode : ts.factory.createTypeReferenceNode(ts.factory.createIdentifier(""))) :
-                                                        kind === 176 /* ConstructorType */ ? ts.factory.createConstructorTypeNode(modifiers, typeParameters, parameters, returnTypeNode !== null && returnTypeNode !== void 0 ? returnTypeNode : ts.factory.createTypeReferenceNode(ts.factory.createIdentifier(""))) :
-                                                            kind === 252 /* FunctionDeclaration */ ? ts.factory.createFunctionDeclaration(/*decorators*/ undefined, modifiers, /*asteriskToken*/ undefined, (options === null || options === void 0 ? void 0 : options.name) ? ts.cast(options.name, ts.isIdentifier) : ts.factory.createIdentifier(""), typeParameters, parameters, returnTypeNode, /*body*/ undefined) :
-                                                                kind === 209 /* FunctionExpression */ ? ts.factory.createFunctionExpression(modifiers, /*asteriskToken*/ undefined, (options === null || options === void 0 ? void 0 : options.name) ? ts.cast(options.name, ts.isIdentifier) : ts.factory.createIdentifier(""), typeParameters, parameters, returnTypeNode, ts.factory.createBlock([])) :
-                                                                    kind === 210 /* ArrowFunction */ ? ts.factory.createArrowFunction(modifiers, typeParameters, parameters, returnTypeNode, /*equalsGreaterThanToken*/ undefined, ts.factory.createBlock([])) :
+                var node = kind === 172 /* CallSignature */ ? ts.factory.createCallSignature(typeParameters, parameters, returnTypeNode) :
+                    kind === 173 /* ConstructSignature */ ? ts.factory.createConstructSignature(typeParameters, parameters, returnTypeNode) :
+                        kind === 166 /* MethodSignature */ ? ts.factory.createMethodSignature(modifiers, (_a = options === null || options === void 0 ? void 0 : options.name) !== null && _a !== void 0 ? _a : ts.factory.createIdentifier(""), options === null || options === void 0 ? void 0 : options.questionToken, typeParameters, parameters, returnTypeNode) :
+                            kind === 167 /* MethodDeclaration */ ? ts.factory.createMethodDeclaration(/*decorators*/ undefined, modifiers, /*asteriskToken*/ undefined, (_b = options === null || options === void 0 ? void 0 : options.name) !== null && _b !== void 0 ? _b : ts.factory.createIdentifier(""), /*questionToken*/ undefined, typeParameters, parameters, returnTypeNode, /*body*/ undefined) :
+                                kind === 169 /* Constructor */ ? ts.factory.createConstructorDeclaration(/*decorators*/ undefined, modifiers, parameters, /*body*/ undefined) :
+                                    kind === 170 /* GetAccessor */ ? ts.factory.createGetAccessorDeclaration(/*decorators*/ undefined, modifiers, (_c = options === null || options === void 0 ? void 0 : options.name) !== null && _c !== void 0 ? _c : ts.factory.createIdentifier(""), parameters, returnTypeNode, /*body*/ undefined) :
+                                        kind === 171 /* SetAccessor */ ? ts.factory.createSetAccessorDeclaration(/*decorators*/ undefined, modifiers, (_d = options === null || options === void 0 ? void 0 : options.name) !== null && _d !== void 0 ? _d : ts.factory.createIdentifier(""), parameters, /*body*/ undefined) :
+                                            kind === 174 /* IndexSignature */ ? ts.factory.createIndexSignature(/*decorators*/ undefined, modifiers, parameters, returnTypeNode) :
+                                                kind === 312 /* JSDocFunctionType */ ? ts.factory.createJSDocFunctionType(parameters, returnTypeNode) :
+                                                    kind === 177 /* FunctionType */ ? ts.factory.createFunctionTypeNode(typeParameters, parameters, returnTypeNode !== null && returnTypeNode !== void 0 ? returnTypeNode : ts.factory.createTypeReferenceNode(ts.factory.createIdentifier(""))) :
+                                                        kind === 178 /* ConstructorType */ ? ts.factory.createConstructorTypeNode(modifiers, typeParameters, parameters, returnTypeNode !== null && returnTypeNode !== void 0 ? returnTypeNode : ts.factory.createTypeReferenceNode(ts.factory.createIdentifier(""))) :
+                                                            kind === 254 /* FunctionDeclaration */ ? ts.factory.createFunctionDeclaration(/*decorators*/ undefined, modifiers, /*asteriskToken*/ undefined, (options === null || options === void 0 ? void 0 : options.name) ? ts.cast(options.name, ts.isIdentifier) : ts.factory.createIdentifier(""), typeParameters, parameters, returnTypeNode, /*body*/ undefined) :
+                                                                kind === 211 /* FunctionExpression */ ? ts.factory.createFunctionExpression(modifiers, /*asteriskToken*/ undefined, (options === null || options === void 0 ? void 0 : options.name) ? ts.cast(options.name, ts.isIdentifier) : ts.factory.createIdentifier(""), typeParameters, parameters, returnTypeNode, ts.factory.createBlock([])) :
+                                                                    kind === 212 /* ArrowFunction */ ? ts.factory.createArrowFunction(modifiers, typeParameters, parameters, returnTypeNode, /*equalsGreaterThanToken*/ undefined, ts.factory.createBlock([])) :
                                                                         ts.Debug.assertNever(kind);
                 if (typeArguments) {
                     node.typeArguments = ts.factory.createNodeArray(typeArguments);
@@ -49582,9 +50668,9 @@
                 return typeParameterToDeclarationWithConstraint(type, context, constraintNode);
             }
             function symbolToParameterDeclaration(parameterSymbol, context, preserveModifierFlags, privateSymbolVisitor, bundledImports) {
-                var parameterDeclaration = ts.getDeclarationOfKind(parameterSymbol, 161 /* Parameter */);
+                var parameterDeclaration = ts.getDeclarationOfKind(parameterSymbol, 162 /* Parameter */);
                 if (!parameterDeclaration && !ts.isTransientSymbol(parameterSymbol)) {
-                    parameterDeclaration = ts.getDeclarationOfKind(parameterSymbol, 330 /* JSDocParameterTag */);
+                    parameterDeclaration = ts.getDeclarationOfKind(parameterSymbol, 335 /* JSDocParameterTag */);
                 }
                 var parameterType = getTypeOfSymbol(parameterSymbol);
                 if (parameterDeclaration && isRequiredInitializedParameter(parameterDeclaration)) {
@@ -49598,8 +50684,8 @@
                 var isRest = parameterDeclaration && ts.isRestParameter(parameterDeclaration) || ts.getCheckFlags(parameterSymbol) & 32768 /* RestParameter */;
                 var dotDotDotToken = isRest ? ts.factory.createToken(25 /* DotDotDotToken */) : undefined;
                 var name = parameterDeclaration ? parameterDeclaration.name ?
-                    parameterDeclaration.name.kind === 78 /* Identifier */ ? ts.setEmitFlags(ts.factory.cloneNode(parameterDeclaration.name), 16777216 /* NoAsciiEscaping */) :
-                        parameterDeclaration.name.kind === 158 /* QualifiedName */ ? ts.setEmitFlags(ts.factory.cloneNode(parameterDeclaration.name.right), 16777216 /* NoAsciiEscaping */) :
+                    parameterDeclaration.name.kind === 79 /* Identifier */ ? ts.setEmitFlags(ts.factory.cloneNode(parameterDeclaration.name), 16777216 /* NoAsciiEscaping */) :
+                        parameterDeclaration.name.kind === 159 /* QualifiedName */ ? ts.setEmitFlags(ts.factory.cloneNode(parameterDeclaration.name.right), 16777216 /* NoAsciiEscaping */) :
                             cloneBindingName(parameterDeclaration.name) :
                     ts.symbolName(parameterSymbol) :
                     ts.symbolName(parameterSymbol);
@@ -49764,11 +50850,11 @@
             }
             function getSpecifierForModuleSymbol(symbol, context) {
                 var _a;
-                var file = ts.getDeclarationOfKind(symbol, 298 /* SourceFile */);
+                var file = ts.getDeclarationOfKind(symbol, 300 /* SourceFile */);
                 if (!file) {
                     var equivalentFileSymbol = ts.firstDefined(symbol.declarations, function (d) { return getFileSymbolIfFileSymbolExportEqualsContainer(d, symbol); });
                     if (equivalentFileSymbol) {
-                        file = ts.getDeclarationOfKind(equivalentFileSymbol, 298 /* SourceFile */);
+                        file = ts.getDeclarationOfKind(equivalentFileSymbol, 300 /* SourceFile */);
                     }
                 }
                 if (file && file.moduleName !== undefined) {
@@ -49920,7 +51006,7 @@
                 return false;
             }
             function typeParameterToName(type, context) {
-                var _a;
+                var _a, _b;
                 if (context.flags & 4 /* GenerateNamesForShadowedTypeParams */ && context.typeParameterNames) {
                     var cached = context.typeParameterNames.get(getTypeId(type));
                     if (cached) {
@@ -49928,22 +51014,25 @@
                     }
                 }
                 var result = symbolToName(type.symbol, context, 788968 /* Type */, /*expectsIdentifier*/ true);
-                if (!(result.kind & 78 /* Identifier */)) {
+                if (!(result.kind & 79 /* Identifier */)) {
                     return ts.factory.createIdentifier("(Missing type parameter)");
                 }
                 if (context.flags & 4 /* GenerateNamesForShadowedTypeParams */) {
                     var rawtext = result.escapedText;
-                    var i = 0;
+                    var i = ((_a = context.typeParameterNamesByTextNextNameCount) === null || _a === void 0 ? void 0 : _a.get(rawtext)) || 0;
                     var text = rawtext;
-                    while (((_a = context.typeParameterNamesByText) === null || _a === void 0 ? void 0 : _a.has(text)) || typeParameterShadowsNameInScope(text, context, type)) {
+                    while (((_b = context.typeParameterNamesByText) === null || _b === void 0 ? void 0 : _b.has(text)) || typeParameterShadowsNameInScope(text, context, type)) {
                         i++;
                         text = rawtext + "_" + i;
                     }
                     if (text !== rawtext) {
                         result = ts.factory.createIdentifier(text, result.typeArguments);
                     }
+                    // avoiding iterations of the above loop turns out to be worth it when `i` starts to get large, so we cache the max
+                    // `i` we've used thus far, to save work later
+                    (context.typeParameterNamesByTextNextNameCount || (context.typeParameterNamesByTextNextNameCount = new ts.Map())).set(rawtext, i);
                     (context.typeParameterNames || (context.typeParameterNames = new ts.Map())).set(getTypeId(type), result);
-                    (context.typeParameterNamesByText || (context.typeParameterNamesByText = new ts.Set())).add(result.escapedText);
+                    (context.typeParameterNamesByText || (context.typeParameterNamesByText = new ts.Set())).add(rawtext);
                 }
                 return result;
             }
@@ -50082,6 +51171,7 @@
                 if (initial.typeParameterSymbolList) {
                     initial.typeParameterSymbolList = new ts.Set(initial.typeParameterSymbolList);
                 }
+                initial.tracker = wrapSymbolTrackerToReportForContext(initial, initial.tracker);
                 return initial;
             }
             function getDeclarationWithTypeAnnotation(symbol, enclosingDeclaration) {
@@ -50171,17 +51261,17 @@
                 return transformed === existing ? ts.setTextRange(ts.factory.cloneNode(existing), existing) : transformed;
                 function visitExistingNodeTreeSymbols(node) {
                     // We don't _actually_ support jsdoc namepath types, emit `any` instead
-                    if (ts.isJSDocAllType(node) || node.kind === 311 /* JSDocNamepathType */) {
-                        return ts.factory.createKeywordTypeNode(128 /* AnyKeyword */);
+                    if (ts.isJSDocAllType(node) || node.kind === 314 /* JSDocNamepathType */) {
+                        return ts.factory.createKeywordTypeNode(129 /* AnyKeyword */);
                     }
                     if (ts.isJSDocUnknownType(node)) {
-                        return ts.factory.createKeywordTypeNode(152 /* UnknownKeyword */);
+                        return ts.factory.createKeywordTypeNode(153 /* UnknownKeyword */);
                     }
                     if (ts.isJSDocNullableType(node)) {
                         return ts.factory.createUnionTypeNode([ts.visitNode(node.type, visitExistingNodeTreeSymbols), ts.factory.createLiteralTypeNode(ts.factory.createNull())]);
                     }
                     if (ts.isJSDocOptionalType(node)) {
-                        return ts.factory.createUnionTypeNode([ts.visitNode(node.type, visitExistingNodeTreeSymbols), ts.factory.createKeywordTypeNode(150 /* UndefinedKeyword */)]);
+                        return ts.factory.createUnionTypeNode([ts.visitNode(node.type, visitExistingNodeTreeSymbols), ts.factory.createKeywordTypeNode(151 /* UndefinedKeyword */)]);
                     }
                     if (ts.isJSDocNonNullableType(node)) {
                         return ts.visitNode(node.type, visitExistingNodeTreeSymbols);
@@ -50195,11 +51285,11 @@
                             var typeViaParent = getTypeOfPropertyOfType(getTypeFromTypeNode(node), name.escapedText);
                             var overrideTypeNode = typeViaParent && t.typeExpression && getTypeFromTypeNode(t.typeExpression.type) !== typeViaParent ? typeToTypeNodeHelper(typeViaParent, context) : undefined;
                             return ts.factory.createPropertySignature(
-                            /*modifiers*/ undefined, name, t.isBracketed || t.typeExpression && ts.isJSDocOptionalType(t.typeExpression.type) ? ts.factory.createToken(57 /* QuestionToken */) : undefined, overrideTypeNode || (t.typeExpression && ts.visitNode(t.typeExpression.type, visitExistingNodeTreeSymbols)) || ts.factory.createKeywordTypeNode(128 /* AnyKeyword */));
+                            /*modifiers*/ undefined, name, t.isBracketed || t.typeExpression && ts.isJSDocOptionalType(t.typeExpression.type) ? ts.factory.createToken(57 /* QuestionToken */) : undefined, overrideTypeNode || (t.typeExpression && ts.visitNode(t.typeExpression.type, visitExistingNodeTreeSymbols)) || ts.factory.createKeywordTypeNode(129 /* AnyKeyword */));
                         }));
                     }
                     if (ts.isTypeReferenceNode(node) && ts.isIdentifier(node.typeName) && node.typeName.escapedText === "") {
-                        return ts.setOriginalNode(ts.factory.createKeywordTypeNode(128 /* AnyKeyword */), node);
+                        return ts.setOriginalNode(ts.factory.createKeywordTypeNode(129 /* AnyKeyword */), node);
                     }
                     if ((ts.isExpressionWithTypeArguments(node) || ts.isTypeReferenceNode(node)) && ts.isJSDocIndexSignature(node)) {
                         return ts.factory.createTypeLiteralNode([ts.factory.createIndexSignature(
@@ -50216,13 +51306,13 @@
                             return ts.factory.createConstructorTypeNode(node.modifiers, ts.visitNodes(node.typeParameters, visitExistingNodeTreeSymbols), ts.mapDefined(node.parameters, function (p, i) { return p.name && ts.isIdentifier(p.name) && p.name.escapedText === "new" ? (newTypeNode_1 = p.type, undefined) : ts.factory.createParameterDeclaration(
                             /*decorators*/ undefined, 
                             /*modifiers*/ undefined, getEffectiveDotDotDotForParameter(p), getNameForJSDocFunctionParameter(p, i), p.questionToken, ts.visitNode(p.type, visitExistingNodeTreeSymbols), 
-                            /*initializer*/ undefined); }), ts.visitNode(newTypeNode_1 || node.type, visitExistingNodeTreeSymbols) || ts.factory.createKeywordTypeNode(128 /* AnyKeyword */));
+                            /*initializer*/ undefined); }), ts.visitNode(newTypeNode_1 || node.type, visitExistingNodeTreeSymbols) || ts.factory.createKeywordTypeNode(129 /* AnyKeyword */));
                         }
                         else {
                             return ts.factory.createFunctionTypeNode(ts.visitNodes(node.typeParameters, visitExistingNodeTreeSymbols), ts.map(node.parameters, function (p, i) { return ts.factory.createParameterDeclaration(
                             /*decorators*/ undefined, 
                             /*modifiers*/ undefined, getEffectiveDotDotDotForParameter(p), getNameForJSDocFunctionParameter(p, i), p.questionToken, ts.visitNode(p.type, visitExistingNodeTreeSymbols), 
-                            /*initializer*/ undefined); }), ts.visitNode(node.type, visitExistingNodeTreeSymbols) || ts.factory.createKeywordTypeNode(128 /* AnyKeyword */));
+                            /*initializer*/ undefined); }), ts.visitNode(node.type, visitExistingNodeTreeSymbols) || ts.factory.createKeywordTypeNode(129 /* AnyKeyword */));
                         }
                     }
                     if (ts.isTypeReferenceNode(node) && ts.isInJSDoc(node) && (!existingTypeNodeIsNotReferenceOrIsReferenceWithCompatibleTypeArgumentCount(node, getTypeFromTypeNode(node)) || getIntendedTypeFromJSDocTypeReference(node) || unknownSymbol === resolveTypeReferenceName(getTypeReferenceName(node), 788968 /* Type */, /*ignoreErrors*/ true))) {
@@ -50290,8 +51380,8 @@
                 }
             }
             function symbolTableToDeclarationStatements(symbolTable, context, bundled) {
-                var serializePropertySymbolForClass = makeSerializePropertySymbol(ts.factory.createPropertyDeclaration, 166 /* MethodDeclaration */, /*useAcessors*/ true);
-                var serializePropertySymbolForInterfaceWorker = makeSerializePropertySymbol(function (_decorators, mods, name, question, type) { return ts.factory.createPropertySignature(mods, name, question, type); }, 165 /* MethodSignature */, /*useAcessors*/ false);
+                var serializePropertySymbolForClass = makeSerializePropertySymbol(ts.factory.createPropertyDeclaration, 167 /* MethodDeclaration */, /*useAcessors*/ true);
+                var serializePropertySymbolForInterfaceWorker = makeSerializePropertySymbol(function (_decorators, mods, name, question, type) { return ts.factory.createPropertySignature(mods, name, question, type); }, 166 /* MethodSignature */, /*useAcessors*/ false);
                 // TODO: Use `setOriginalNode` on original declaration names where possible so these declarations see some kind of
                 // declaration mapping
                 // We save the enclosing declaration off here so it's not adjusted by well-meaning declaration
@@ -50312,9 +51402,11 @@
                                 }
                             }
                             else if (oldcontext.tracker && oldcontext.tracker.trackSymbol) {
-                                oldcontext.tracker.trackSymbol(sym, decl, meaning);
+                                return oldcontext.tracker.trackSymbol(sym, decl, meaning);
                             }
+                            return false;
                         } }) });
+                context.tracker = wrapSymbolTrackerToReportForContext(context, context.tracker);
                 ts.forEachEntry(symbolTable, function (symbol, name) {
                     var baseName = ts.unescapeLeadingUnderscores(name);
                     void getInternalSymbolName(symbol, baseName); // Called to cache values into `usedSymbolNames` and `remappedSymbolNames`
@@ -50329,7 +51421,7 @@
                 visitSymbolTable(symbolTable);
                 return mergeRedundantStatements(results);
                 function isIdentifierAndNotUndefined(node) {
-                    return !!node && node.kind === 78 /* Identifier */;
+                    return !!node && node.kind === 79 /* Identifier */;
                 }
                 function getNamesOfDeclaration(statement) {
                     if (ts.isVariableStatement(statement)) {
@@ -50350,12 +51442,12 @@
                         var name_2 = ns.name;
                         var body = ns.body;
                         if (ts.length(excessExports)) {
-                            ns = ts.factory.updateModuleDeclaration(ns, ns.decorators, ns.modifiers, ns.name, body = ts.factory.updateModuleBlock(body, ts.factory.createNodeArray(__spreadArray(__spreadArray([], ns.body.statements), [ts.factory.createExportDeclaration(
+                            ns = ts.factory.updateModuleDeclaration(ns, ns.decorators, ns.modifiers, ns.name, body = ts.factory.updateModuleBlock(body, ts.factory.createNodeArray(__spreadArray(__spreadArray([], ns.body.statements, true), [ts.factory.createExportDeclaration(
                                 /*decorators*/ undefined, 
                                 /*modifiers*/ undefined, 
                                 /*isTypeOnly*/ false, ts.factory.createNamedExports(ts.map(ts.flatMap(excessExports, function (e) { return getNamesOfDeclaration(e); }), function (id) { return ts.factory.createExportSpecifier(/*alias*/ undefined, id); })), 
-                                /*moduleSpecifier*/ undefined)]))));
-                            statements = __spreadArray(__spreadArray(__spreadArray([], statements.slice(0, nsIndex)), [ns]), statements.slice(nsIndex + 1));
+                                /*moduleSpecifier*/ undefined)], false))));
+                            statements = __spreadArray(__spreadArray(__spreadArray([], statements.slice(0, nsIndex), true), [ns], false), statements.slice(nsIndex + 1), true);
                         }
                         // Pass 1: Flatten `export namespace _exports {} export = _exports;` so long as the `export=` only points at a single namespace declaration
                         if (!ts.find(statements, function (s) { return s !== ns && ts.nodeHasName(s, name_2); })) {
@@ -50366,7 +51458,7 @@
                             ts.forEach(body.statements, function (s) {
                                 addResult(s, mixinExportFlag_1 ? 1 /* Export */ : 0 /* None */); // Recalculates the ambient (and export, if applicable from above) flag
                             });
-                            statements = __spreadArray(__spreadArray([], ts.filter(statements, function (s) { return s !== ns && s !== exportAssignment; })), results);
+                            statements = __spreadArray(__spreadArray([], ts.filter(statements, function (s) { return s !== ns && s !== exportAssignment; }), true), results, true);
                         }
                     }
                     return statements;
@@ -50376,11 +51468,11 @@
                     var exports = ts.filter(statements, function (d) { return ts.isExportDeclaration(d) && !d.moduleSpecifier && !!d.exportClause && ts.isNamedExports(d.exportClause); });
                     if (ts.length(exports) > 1) {
                         var nonExports = ts.filter(statements, function (d) { return !ts.isExportDeclaration(d) || !!d.moduleSpecifier || !d.exportClause; });
-                        statements = __spreadArray(__spreadArray([], nonExports), [ts.factory.createExportDeclaration(
+                        statements = __spreadArray(__spreadArray([], nonExports, true), [ts.factory.createExportDeclaration(
                             /*decorators*/ undefined, 
                             /*modifiers*/ undefined, 
                             /*isTypeOnly*/ false, ts.factory.createNamedExports(ts.flatMap(exports, function (e) { return ts.cast(e.exportClause, ts.isNamedExports).elements; })), 
-                            /*moduleSpecifier*/ undefined)]);
+                            /*moduleSpecifier*/ undefined)], false);
                     }
                     // Pass 2b: Also combine all `export {} from "..."` declarations as needed
                     var reexports = ts.filter(statements, function (d) { return ts.isExportDeclaration(d) && !!d.moduleSpecifier && !!d.exportClause && ts.isNamedExports(d.exportClause); });
@@ -50390,12 +51482,12 @@
                             var _loop_9 = function (group_1) {
                                 if (group_1.length > 1) {
                                     // remove group members from statements and then merge group members and add back to statements
-                                    statements = __spreadArray(__spreadArray([], ts.filter(statements, function (s) { return group_1.indexOf(s) === -1; })), [
+                                    statements = __spreadArray(__spreadArray([], ts.filter(statements, function (s) { return group_1.indexOf(s) === -1; }), true), [
                                         ts.factory.createExportDeclaration(
                                         /*decorators*/ undefined, 
                                         /*modifiers*/ undefined, 
                                         /*isTypeOnly*/ false, ts.factory.createNamedExports(ts.flatMap(group_1, function (e) { return ts.cast(e.exportClause, ts.isNamedExports).elements; })), group_1[0].moduleSpecifier)
-                                    ]);
+                                    ], false);
                                 }
                             };
                             for (var _i = 0, groups_1 = groups; _i < groups_1.length; _i++) {
@@ -50498,6 +51590,9 @@
                         var oldContext = context;
                         context = cloneNodeBuilderContext(context);
                         var result = serializeSymbolWorker(symbol, isPrivate, propertyAsAlias);
+                        if (context.reportedDiagnostic) {
+                            oldcontext.reportedDiagnostic = context.reportedDiagnostic; // hoist diagnostic result into outer context
+                        }
                         context = oldContext;
                         return result;
                     }
@@ -50746,13 +51841,13 @@
                     var baseTypes = getBaseTypes(interfaceType);
                     var baseType = ts.length(baseTypes) ? getIntersectionType(baseTypes) : undefined;
                     var members = ts.flatMap(getPropertiesOfType(interfaceType), function (p) { return serializePropertySymbolForInterface(p, baseType); });
-                    var callSignatures = serializeSignatures(0 /* Call */, interfaceType, baseType, 170 /* CallSignature */);
-                    var constructSignatures = serializeSignatures(1 /* Construct */, interfaceType, baseType, 171 /* ConstructSignature */);
+                    var callSignatures = serializeSignatures(0 /* Call */, interfaceType, baseType, 172 /* CallSignature */);
+                    var constructSignatures = serializeSignatures(1 /* Construct */, interfaceType, baseType, 173 /* ConstructSignature */);
                     var indexSignatures = serializeIndexSignatures(interfaceType, baseType);
-                    var heritageClauses = !ts.length(baseTypes) ? undefined : [ts.factory.createHeritageClause(93 /* ExtendsKeyword */, ts.mapDefined(baseTypes, function (b) { return trySerializeAsTypeReference(b, 111551 /* Value */); }))];
+                    var heritageClauses = !ts.length(baseTypes) ? undefined : [ts.factory.createHeritageClause(94 /* ExtendsKeyword */, ts.mapDefined(baseTypes, function (b) { return trySerializeAsTypeReference(b, 111551 /* Value */); }))];
                     addResult(ts.factory.createInterfaceDeclaration(
                     /*decorators*/ undefined, 
-                    /*modifiers*/ undefined, getInternalSymbolName(symbol, symbolName), typeParamDecls, heritageClauses, __spreadArray(__spreadArray(__spreadArray(__spreadArray([], indexSignatures), constructSignatures), callSignatures), members)), modifierFlags);
+                    /*modifiers*/ undefined, getInternalSymbolName(symbol, symbolName), typeParamDecls, heritageClauses, __spreadArray(__spreadArray(__spreadArray(__spreadArray([], indexSignatures, true), constructSignatures, true), callSignatures, true), members, true)), modifierFlags);
                 }
                 function getNamespaceMembersForSerialization(symbol) {
                     return !symbol.exports ? [] : ts.filter(ts.arrayFrom(symbol.exports.values()), isNamespaceMember);
@@ -50816,7 +51911,7 @@
                     for (var _i = 0, signatures_2 = signatures; _i < signatures_2.length; _i++) {
                         var sig = signatures_2[_i];
                         // Each overload becomes a separate function declaration, in order
-                        var decl = signatureToSignatureDeclarationHelper(sig, 252 /* FunctionDeclaration */, context, { name: ts.factory.createIdentifier(localName), privateSymbolVisitor: includePrivateSymbol, bundledImports: bundled });
+                        var decl = signatureToSignatureDeclarationHelper(sig, 254 /* FunctionDeclaration */, context, { name: ts.factory.createIdentifier(localName), privateSymbolVisitor: includePrivateSymbol, bundledImports: bundled });
                         addResult(ts.setTextRange(decl, getSignatureTextRangeLocation(sig)), modifierFlags);
                     }
                     // Module symbol emit will take care of module-y members, provided it has exports
@@ -50890,7 +51985,7 @@
                 }
                 function isNamespaceMember(p) {
                     return !!(p.flags & (788968 /* Type */ | 1920 /* Namespace */ | 2097152 /* Alias */)) ||
-                        !(p.flags & 4194304 /* Prototype */ || p.escapedName === "prototype" || p.valueDeclaration && ts.getEffectiveModifierFlags(p.valueDeclaration) & 32 /* Static */ && ts.isClassLike(p.valueDeclaration.parent));
+                        !(p.flags & 4194304 /* Prototype */ || p.escapedName === "prototype" || p.valueDeclaration && ts.isStatic(p.valueDeclaration) && ts.isClassLike(p.valueDeclaration.parent));
                 }
                 function sanitizeJSDocImplements(clauses) {
                     var result = ts.mapDefined(clauses, function (e) {
@@ -50939,7 +52034,7 @@
                     var staticBaseType = isClass
                         ? getBaseConstructorTypeOfClass(staticType)
                         : anyType;
-                    var heritageClauses = __spreadArray(__spreadArray([], !ts.length(baseTypes) ? [] : [ts.factory.createHeritageClause(93 /* ExtendsKeyword */, ts.map(baseTypes, function (b) { return serializeBaseType(b, staticBaseType, localName); }))]), !ts.length(implementsExpressions) ? [] : [ts.factory.createHeritageClause(116 /* ImplementsKeyword */, implementsExpressions)]);
+                    var heritageClauses = __spreadArray(__spreadArray([], !ts.length(baseTypes) ? [] : [ts.factory.createHeritageClause(94 /* ExtendsKeyword */, ts.map(baseTypes, function (b) { return serializeBaseType(b, staticBaseType, localName); }))], true), !ts.length(implementsExpressions) ? [] : [ts.factory.createHeritageClause(117 /* ImplementsKeyword */, implementsExpressions)], true);
                     var symbolProps = getNonInterhitedProperties(classType, baseTypes, getPropertiesOfType(classType));
                     var publicSymbolProps = ts.filter(symbolProps, function (s) {
                         // `valueDeclaration` could be undefined if inherited from
@@ -50976,12 +52071,12 @@
                         !ts.some(getSignaturesOfType(staticType, 1 /* Construct */));
                     var constructors = isNonConstructableClassLikeInJsFile ?
                         [ts.factory.createConstructorDeclaration(/*decorators*/ undefined, ts.factory.createModifiersFromModifierFlags(8 /* Private */), [], /*body*/ undefined)] :
-                        serializeSignatures(1 /* Construct */, staticType, staticBaseType, 167 /* Constructor */);
+                        serializeSignatures(1 /* Construct */, staticType, staticBaseType, 169 /* Constructor */);
                     var indexSignatures = serializeIndexSignatures(classType, baseTypes[0]);
                     context.enclosingDeclaration = oldEnclosing;
                     addResult(ts.setTextRange(ts.factory.createClassDeclaration(
                     /*decorators*/ undefined, 
-                    /*modifiers*/ undefined, localName, typeParamDecls, heritageClauses, __spreadArray(__spreadArray(__spreadArray(__spreadArray(__spreadArray([], indexSignatures), staticMembers), constructors), publicProperties), privateProperties)), symbol.declarations && ts.filter(symbol.declarations, function (d) { return ts.isClassDeclaration(d) || ts.isClassExpression(d); })[0]), modifierFlags);
+                    /*modifiers*/ undefined, localName, typeParamDecls, heritageClauses, __spreadArray(__spreadArray(__spreadArray(__spreadArray(__spreadArray([], indexSignatures, true), staticMembers, true), constructors, true), publicProperties, true), privateProperties, true)), symbol.declarations && ts.filter(symbol.declarations, function (d) { return ts.isClassDeclaration(d) || ts.isClassExpression(d); })[0]), modifierFlags);
                 }
                 function serializeAsAlias(symbol, localName, modifierFlags) {
                     var _a, _b, _c, _d, _e;
@@ -51003,8 +52098,8 @@
                     var targetName = getInternalSymbolName(target, verbatimTargetName);
                     includePrivateSymbol(target); // the target may be within the same scope - attempt to serialize it first
                     switch (node.kind) {
-                        case 199 /* BindingElement */:
-                            if (((_b = (_a = node.parent) === null || _a === void 0 ? void 0 : _a.parent) === null || _b === void 0 ? void 0 : _b.kind) === 250 /* VariableDeclaration */) {
+                        case 201 /* BindingElement */:
+                            if (((_b = (_a = node.parent) === null || _a === void 0 ? void 0 : _a.parent) === null || _b === void 0 ? void 0 : _b.kind) === 252 /* VariableDeclaration */) {
                                 // const { SomeClass } = require('./lib');
                                 var specifier_1 = getSpecifierForModuleSymbol(target.parent || target, context); // './lib'
                                 var propertyName = node.propertyName;
@@ -51016,13 +52111,13 @@
                             // We don't know how to serialize this (nested?) binding element
                             ts.Debug.failBadSyntaxKind(((_c = node.parent) === null || _c === void 0 ? void 0 : _c.parent) || node, "Unhandled binding element grandparent kind in declaration serialization");
                             break;
-                        case 290 /* ShorthandPropertyAssignment */:
-                            if (((_e = (_d = node.parent) === null || _d === void 0 ? void 0 : _d.parent) === null || _e === void 0 ? void 0 : _e.kind) === 217 /* BinaryExpression */) {
+                        case 292 /* ShorthandPropertyAssignment */:
+                            if (((_e = (_d = node.parent) === null || _d === void 0 ? void 0 : _d.parent) === null || _e === void 0 ? void 0 : _e.kind) === 219 /* BinaryExpression */) {
                                 // module.exports = { SomeClass }
                                 serializeExportSpecifier(ts.unescapeLeadingUnderscores(symbol.escapedName), targetName);
                             }
                             break;
-                        case 250 /* VariableDeclaration */:
+                        case 252 /* VariableDeclaration */:
                             // commonjs require: const x = require('y')
                             if (ts.isPropertyAccessExpression(node.initializer)) {
                                 // const x = require('y').z
@@ -51042,7 +52137,7 @@
                                 break;
                             }
                         // else fall through and treat commonjs require just like import=
-                        case 261 /* ImportEqualsDeclaration */:
+                        case 263 /* ImportEqualsDeclaration */:
                             // This _specifically_ only exists to handle json declarations - where we make aliases, but since
                             // we emit no declarations for the json document, must not refer to it in the declarations
                             if (target.escapedName === "export=" /* ExportEquals */ && ts.some(target.declarations, ts.isJsonSourceFile)) {
@@ -51059,13 +52154,13 @@
                                 ? symbolToName(target, context, 67108863 /* All */, /*expectsIdentifier*/ false)
                                 : ts.factory.createExternalModuleReference(ts.factory.createStringLiteral(getSpecifierForModuleSymbol(target, context)))), isLocalImport ? modifierFlags : 0 /* None */);
                             break;
-                        case 260 /* NamespaceExportDeclaration */:
+                        case 262 /* NamespaceExportDeclaration */:
                             // export as namespace foo
                             // TODO: Not part of a file's local or export symbol tables
                             // Is bound into file.symbol.globalExports instead, which we don't currently traverse
                             addResult(ts.factory.createNamespaceExportDeclaration(ts.idText(node.name)), 0 /* None */);
                             break;
-                        case 263 /* ImportClause */:
+                        case 265 /* ImportClause */:
                             addResult(ts.factory.createImportDeclaration(
                             /*decorators*/ undefined, 
                             /*modifiers*/ undefined, ts.factory.createImportClause(/*isTypeOnly*/ false, ts.factory.createIdentifier(localName), /*namedBindings*/ undefined), 
@@ -51074,18 +52169,18 @@
                             // In such cases, the `target` refers to the module itself already
                             ts.factory.createStringLiteral(getSpecifierForModuleSymbol(target.parent || target, context))), 0 /* None */);
                             break;
-                        case 264 /* NamespaceImport */:
+                        case 266 /* NamespaceImport */:
                             addResult(ts.factory.createImportDeclaration(
                             /*decorators*/ undefined, 
                             /*modifiers*/ undefined, ts.factory.createImportClause(/*isTypeOnly*/ false, /*importClause*/ undefined, ts.factory.createNamespaceImport(ts.factory.createIdentifier(localName))), ts.factory.createStringLiteral(getSpecifierForModuleSymbol(target, context))), 0 /* None */);
                             break;
-                        case 270 /* NamespaceExport */:
+                        case 272 /* NamespaceExport */:
                             addResult(ts.factory.createExportDeclaration(
                             /*decorators*/ undefined, 
                             /*modifiers*/ undefined, 
                             /*isTypeOnly*/ false, ts.factory.createNamespaceExport(ts.factory.createIdentifier(localName)), ts.factory.createStringLiteral(getSpecifierForModuleSymbol(target, context))), 0 /* None */);
                             break;
-                        case 266 /* ImportSpecifier */:
+                        case 268 /* ImportSpecifier */:
                             addResult(ts.factory.createImportDeclaration(
                             /*decorators*/ undefined, 
                             /*modifiers*/ undefined, ts.factory.createImportClause(
@@ -51094,7 +52189,7 @@
                                 ts.factory.createImportSpecifier(localName !== verbatimTargetName ? ts.factory.createIdentifier(verbatimTargetName) : undefined, ts.factory.createIdentifier(localName))
                             ])), ts.factory.createStringLiteral(getSpecifierForModuleSymbol(target.parent || target, context))), 0 /* None */);
                             break;
-                        case 271 /* ExportSpecifier */:
+                        case 273 /* ExportSpecifier */:
                             // does not use localName because the symbol name in this case refers to the name in the exports table,
                             // which we must exactly preserve
                             var specifier = node.parent.parent.moduleSpecifier;
@@ -51102,12 +52197,12 @@
                             // another file
                             serializeExportSpecifier(ts.unescapeLeadingUnderscores(symbol.escapedName), specifier ? verbatimTargetName : targetName, specifier && ts.isStringLiteralLike(specifier) ? ts.factory.createStringLiteral(specifier.text) : undefined);
                             break;
-                        case 267 /* ExportAssignment */:
+                        case 269 /* ExportAssignment */:
                             serializeMaybeAliasAssignment(symbol);
                             break;
-                        case 217 /* BinaryExpression */:
-                        case 202 /* PropertyAccessExpression */:
-                        case 203 /* ElementAccessExpression */:
+                        case 219 /* BinaryExpression */:
+                        case 204 /* PropertyAccessExpression */:
+                        case 205 /* ElementAccessExpression */:
                             // Could be best encoded as though an export specifier or as though an export assignment
                             // If name is default or export=, do an export assignment
                             // Otherwise do an export specifier
@@ -51162,7 +52257,7 @@
                         // a visibility error here (as they're not visible within any scope), but we want to hoist them
                         // into the containing scope anyway, so we want to skip the visibility checks.
                         var oldTrack = context.tracker.trackSymbol;
-                        context.tracker.trackSymbol = ts.noop;
+                        context.tracker.trackSymbol = function () { return false; };
                         if (isExportAssignmentCompatibleSymbolName) {
                             results.push(ts.factory.createExportAssignment(
                             /*decorators*/ undefined, 
@@ -51228,8 +52323,7 @@
                     // whose input is not type annotated (if the input symbol has an annotation we can reuse, we should prefer it)
                     var ctxSrc = ts.getSourceFileOfNode(context.enclosingDeclaration);
                     return ts.getObjectFlags(typeToSerialize) & (16 /* Anonymous */ | 32 /* Mapped */) &&
-                        !getIndexInfoOfType(typeToSerialize, 0 /* String */) &&
-                        !getIndexInfoOfType(typeToSerialize, 1 /* Number */) &&
+                        !ts.length(getIndexInfosOfType(typeToSerialize)) &&
                         !isClassInstanceSide(typeToSerialize) && // While a class instance is potentially representable as a NS, prefer printing a reference to the instance type and serializing the class
                         !!(ts.length(ts.filter(getPropertiesOfType(typeToSerialize), isNamespaceMember)) || ts.length(getSignaturesOfType(typeToSerialize, 0 /* Call */))) &&
                         !ts.length(getSignaturesOfType(typeToSerialize, 1 /* Construct */)) && // TODO: could probably serialize as function + ns + class, now that that's OK
@@ -51367,20 +52461,17 @@
                 }
                 function serializeIndexSignatures(input, baseType) {
                     var results = [];
-                    for (var _i = 0, _a = [0 /* String */, 1 /* Number */]; _i < _a.length; _i++) {
-                        var type = _a[_i];
-                        var info = getIndexInfoOfType(input, type);
-                        if (info) {
-                            if (baseType) {
-                                var baseInfo = getIndexInfoOfType(baseType, type);
-                                if (baseInfo) {
-                                    if (isTypeIdenticalTo(info.type, baseInfo.type)) {
-                                        continue; // elide identical index signatures
-                                    }
+                    for (var _i = 0, _a = getIndexInfosOfType(input); _i < _a.length; _i++) {
+                        var info = _a[_i];
+                        if (baseType) {
+                            var baseInfo = getIndexInfoOfType(baseType, info.keyType);
+                            if (baseInfo) {
+                                if (isTypeIdenticalTo(info.type, baseInfo.type)) {
+                                    continue; // elide identical index signatures
                                 }
                             }
-                            results.push(indexInfoToIndexSignatureDeclarationHelper(info, type, context, /*typeNode*/ undefined));
                         }
+                        results.push(indexInfoToIndexSignatureDeclarationHelper(info, context, /*typeNode*/ undefined));
                     }
                     return results;
                 }
@@ -51477,7 +52568,7 @@
             if (flags === void 0) { flags = 16384 /* UseAliasDefinedOutsideCurrentScope */; }
             return writer ? typePredicateToStringWorker(writer).getText() : ts.usingSingleLineStringWriter(typePredicateToStringWorker);
             function typePredicateToStringWorker(writer) {
-                var predicate = ts.factory.createTypePredicateNode(typePredicate.kind === 2 /* AssertsThis */ || typePredicate.kind === 3 /* AssertsIdentifier */ ? ts.factory.createToken(127 /* AssertsKeyword */) : undefined, typePredicate.kind === 1 /* Identifier */ || typePredicate.kind === 3 /* AssertsIdentifier */ ? ts.factory.createIdentifier(typePredicate.parameterName) : ts.factory.createThisTypeNode(), typePredicate.type && nodeBuilder.typeToTypeNode(typePredicate.type, enclosingDeclaration, toNodeBuilderFlags(flags) | 70221824 /* IgnoreErrors */ | 512 /* WriteTypeParametersInQualifiedName */) // TODO: GH#18217
+                var predicate = ts.factory.createTypePredicateNode(typePredicate.kind === 2 /* AssertsThis */ || typePredicate.kind === 3 /* AssertsIdentifier */ ? ts.factory.createToken(128 /* AssertsKeyword */) : undefined, typePredicate.kind === 1 /* Identifier */ || typePredicate.kind === 3 /* AssertsIdentifier */ ? ts.factory.createIdentifier(typePredicate.parameterName) : ts.factory.createThisTypeNode(), typePredicate.type && nodeBuilder.typeToTypeNode(typePredicate.type, enclosingDeclaration, toNodeBuilderFlags(flags) | 70221824 /* IgnoreErrors */ | 512 /* WriteTypeParametersInQualifiedName */) // TODO: GH#18217
                 );
                 var printer = ts.createPrinter({ removeComments: true });
                 var sourceFile = enclosingDeclaration && ts.getSourceFileOfNode(enclosingDeclaration);
@@ -51524,7 +52615,7 @@
         function getTypeAliasForTypeLiteral(type) {
             if (type.symbol && type.symbol.flags & 2048 /* TypeLiteral */ && type.symbol.declarations) {
                 var node = ts.walkUpParenthesizedTypes(type.symbol.declarations[0].parent);
-                if (node.kind === 255 /* TypeAliasDeclaration */) {
+                if (node.kind === 257 /* TypeAliasDeclaration */) {
                     return getSymbolOfNode(node);
                 }
             }
@@ -51532,11 +52623,11 @@
         }
         function isTopLevelInExternalModuleAugmentation(node) {
             return node && node.parent &&
-                node.parent.kind === 258 /* ModuleBlock */ &&
+                node.parent.kind === 260 /* ModuleBlock */ &&
                 ts.isExternalModuleAugmentation(node.parent.parent);
         }
         function isDefaultBindingContext(location) {
-            return location.kind === 298 /* SourceFile */ || ts.isAmbientModule(location);
+            return location.kind === 300 /* SourceFile */ || ts.isAmbientModule(location);
         }
         function getNameOfSymbolFromNameType(symbol, context) {
             var nameType = getSymbolLinks(symbol).nameType;
@@ -51595,17 +52686,17 @@
                 if (!declaration) {
                     declaration = symbol.declarations[0]; // Declaration may be nameless, but we'll try anyway
                 }
-                if (declaration.parent && declaration.parent.kind === 250 /* VariableDeclaration */) {
+                if (declaration.parent && declaration.parent.kind === 252 /* VariableDeclaration */) {
                     return ts.declarationNameToString(declaration.parent.name);
                 }
                 switch (declaration.kind) {
-                    case 222 /* ClassExpression */:
-                    case 209 /* FunctionExpression */:
-                    case 210 /* ArrowFunction */:
+                    case 224 /* ClassExpression */:
+                    case 211 /* FunctionExpression */:
+                    case 212 /* ArrowFunction */:
                         if (context && !context.encounteredError && !(context.flags & 131072 /* AllowAnonymousIdentifier */)) {
                             context.encounteredError = true;
                         }
-                        return declaration.kind === 222 /* ClassExpression */ ? "(Anonymous class)" : "(Anonymous function)";
+                        return declaration.kind === 224 /* ClassExpression */ ? "(Anonymous class)" : "(Anonymous function)";
                 }
             }
             var name = getNameOfSymbolFromNameType(symbol, context);
@@ -51622,28 +52713,28 @@
             return false;
             function determineIfDeclarationIsVisible() {
                 switch (node.kind) {
-                    case 328 /* JSDocCallbackTag */:
-                    case 335 /* JSDocTypedefTag */:
-                    case 329 /* JSDocEnumTag */:
+                    case 333 /* JSDocCallbackTag */:
+                    case 340 /* JSDocTypedefTag */:
+                    case 334 /* JSDocEnumTag */:
                         // Top-level jsdoc type aliases are considered exported
                         // First parent is comment node, second is hosting declaration or token; we only care about those tokens or declarations whose parent is a source file
                         return !!(node.parent && node.parent.parent && node.parent.parent.parent && ts.isSourceFile(node.parent.parent.parent));
-                    case 199 /* BindingElement */:
+                    case 201 /* BindingElement */:
                         return isDeclarationVisible(node.parent.parent);
-                    case 250 /* VariableDeclaration */:
+                    case 252 /* VariableDeclaration */:
                         if (ts.isBindingPattern(node.name) &&
                             !node.name.elements.length) {
                             // If the binding pattern is empty, this variable declaration is not visible
                             return false;
                         }
                     // falls through
-                    case 257 /* ModuleDeclaration */:
-                    case 253 /* ClassDeclaration */:
-                    case 254 /* InterfaceDeclaration */:
-                    case 255 /* TypeAliasDeclaration */:
-                    case 252 /* FunctionDeclaration */:
-                    case 256 /* EnumDeclaration */:
-                    case 261 /* ImportEqualsDeclaration */:
+                    case 259 /* ModuleDeclaration */:
+                    case 255 /* ClassDeclaration */:
+                    case 256 /* InterfaceDeclaration */:
+                    case 257 /* TypeAliasDeclaration */:
+                    case 254 /* FunctionDeclaration */:
+                    case 258 /* EnumDeclaration */:
+                    case 263 /* ImportEqualsDeclaration */:
                         // external module augmentation is always visible
                         if (ts.isExternalModuleAugmentation(node)) {
                             return true;
@@ -51651,55 +52742,55 @@
                         var parent = getDeclarationContainer(node);
                         // If the node is not exported or it is not ambient module element (except import declaration)
                         if (!(ts.getCombinedModifierFlags(node) & 1 /* Export */) &&
-                            !(node.kind !== 261 /* ImportEqualsDeclaration */ && parent.kind !== 298 /* SourceFile */ && parent.flags & 8388608 /* Ambient */)) {
+                            !(node.kind !== 263 /* ImportEqualsDeclaration */ && parent.kind !== 300 /* SourceFile */ && parent.flags & 8388608 /* Ambient */)) {
                             return isGlobalSourceFile(parent);
                         }
                         // Exported members/ambient module elements (exception import declaration) are visible if parent is visible
                         return isDeclarationVisible(parent);
-                    case 164 /* PropertyDeclaration */:
-                    case 163 /* PropertySignature */:
-                    case 168 /* GetAccessor */:
-                    case 169 /* SetAccessor */:
-                    case 166 /* MethodDeclaration */:
-                    case 165 /* MethodSignature */:
+                    case 165 /* PropertyDeclaration */:
+                    case 164 /* PropertySignature */:
+                    case 170 /* GetAccessor */:
+                    case 171 /* SetAccessor */:
+                    case 167 /* MethodDeclaration */:
+                    case 166 /* MethodSignature */:
                         if (ts.hasEffectiveModifier(node, 8 /* Private */ | 16 /* Protected */)) {
                             // Private/protected properties/methods are not visible
                             return false;
                         }
                     // Public properties/methods are visible if its parents are visible, so:
                     // falls through
-                    case 167 /* Constructor */:
-                    case 171 /* ConstructSignature */:
-                    case 170 /* CallSignature */:
-                    case 172 /* IndexSignature */:
-                    case 161 /* Parameter */:
-                    case 258 /* ModuleBlock */:
-                    case 175 /* FunctionType */:
-                    case 176 /* ConstructorType */:
-                    case 178 /* TypeLiteral */:
-                    case 174 /* TypeReference */:
-                    case 179 /* ArrayType */:
-                    case 180 /* TupleType */:
-                    case 183 /* UnionType */:
-                    case 184 /* IntersectionType */:
-                    case 187 /* ParenthesizedType */:
-                    case 193 /* NamedTupleMember */:
+                    case 169 /* Constructor */:
+                    case 173 /* ConstructSignature */:
+                    case 172 /* CallSignature */:
+                    case 174 /* IndexSignature */:
+                    case 162 /* Parameter */:
+                    case 260 /* ModuleBlock */:
+                    case 177 /* FunctionType */:
+                    case 178 /* ConstructorType */:
+                    case 180 /* TypeLiteral */:
+                    case 176 /* TypeReference */:
+                    case 181 /* ArrayType */:
+                    case 182 /* TupleType */:
+                    case 185 /* UnionType */:
+                    case 186 /* IntersectionType */:
+                    case 189 /* ParenthesizedType */:
+                    case 195 /* NamedTupleMember */:
                         return isDeclarationVisible(node.parent);
                     // Default binding, import specifier and namespace import is visible
                     // only on demand so by default it is not visible
-                    case 263 /* ImportClause */:
-                    case 264 /* NamespaceImport */:
-                    case 266 /* ImportSpecifier */:
+                    case 265 /* ImportClause */:
+                    case 266 /* NamespaceImport */:
+                    case 268 /* ImportSpecifier */:
                         return false;
                     // Type parameters are always visible
-                    case 160 /* TypeParameter */:
+                    case 161 /* TypeParameter */:
                     // Source file and namespace export are always visible
                     // falls through
-                    case 298 /* SourceFile */:
-                    case 260 /* NamespaceExportDeclaration */:
+                    case 300 /* SourceFile */:
+                    case 262 /* NamespaceExportDeclaration */:
                         return true;
                     // Export assignments do not create name bindings outside the module
-                    case 267 /* ExportAssignment */:
+                    case 269 /* ExportAssignment */:
                         return false;
                     default:
                         return false;
@@ -51708,10 +52799,10 @@
         }
         function collectLinkedAliases(node, setVisibility) {
             var exportSymbol;
-            if (node.parent && node.parent.kind === 267 /* ExportAssignment */) {
+            if (node.parent && node.parent.kind === 269 /* ExportAssignment */) {
                 exportSymbol = resolveName(node, node.escapedText, 111551 /* Value */ | 788968 /* Type */ | 1920 /* Namespace */ | 2097152 /* Alias */, /*nameNotFoundMessage*/ undefined, node, /*isUse*/ false);
             }
-            else if (node.parent.kind === 271 /* ExportSpecifier */) {
+            else if (node.parent.kind === 273 /* ExportSpecifier */) {
                 exportSymbol = getTargetOfExportSpecifier(node.parent, 111551 /* Value */ | 788968 /* Type */ | 1920 /* Namespace */ | 2097152 /* Alias */);
             }
             var result;
@@ -51816,12 +52907,12 @@
         function getDeclarationContainer(node) {
             return ts.findAncestor(ts.getRootDeclaration(node), function (node) {
                 switch (node.kind) {
-                    case 250 /* VariableDeclaration */:
-                    case 251 /* VariableDeclarationList */:
-                    case 266 /* ImportSpecifier */:
-                    case 265 /* NamedImports */:
-                    case 264 /* NamespaceImport */:
-                    case 263 /* ImportClause */:
+                    case 252 /* VariableDeclaration */:
+                    case 253 /* VariableDeclarationList */:
+                    case 268 /* ImportSpecifier */:
+                    case 267 /* NamedImports */:
+                    case 266 /* NamespaceImport */:
+                    case 265 /* ImportClause */:
                         return false;
                     default:
                         return true;
@@ -51842,7 +52933,8 @@
             return prop ? getTypeOfSymbol(prop) : undefined;
         }
         function getTypeOfPropertyOrIndexSignature(type, name) {
-            return getTypeOfPropertyOfType(type, name) || isNumericLiteralName(name) && getIndexTypeOfType(type, 1 /* Number */) || getIndexTypeOfType(type, 0 /* String */) || unknownType;
+            var _a;
+            return getTypeOfPropertyOfType(type, name) || ((_a = getApplicableIndexInfoForName(type, name)) === null || _a === void 0 ? void 0 : _a.type) || unknownType;
         }
         function isTypeAny(type) {
             return type && (type.flags & 1 /* Any */) !== 0;
@@ -51881,9 +52973,7 @@
                     members.set(prop.escapedName, getSpreadSymbol(prop, /*readonly*/ false));
                 }
             }
-            var stringIndexInfo = getIndexInfoOfType(source, 0 /* String */);
-            var numberIndexInfo = getIndexInfoOfType(source, 1 /* Number */);
-            var result = createAnonymousType(symbol, members, ts.emptyArray, ts.emptyArray, stringIndexInfo, numberIndexInfo);
+            var result = createAnonymousType(symbol, members, ts.emptyArray, ts.emptyArray, getIndexInfosOfType(source));
             result.objectFlags |= 8388608 /* ObjectRestType */;
             return result;
         }
@@ -51928,23 +53018,23 @@
         function getParentElementAccess(node) {
             var ancestor = node.parent.parent;
             switch (ancestor.kind) {
-                case 199 /* BindingElement */:
-                case 289 /* PropertyAssignment */:
+                case 201 /* BindingElement */:
+                case 291 /* PropertyAssignment */:
                     return getSyntheticElementAccess(ancestor);
-                case 200 /* ArrayLiteralExpression */:
+                case 202 /* ArrayLiteralExpression */:
                     return getSyntheticElementAccess(node.parent);
-                case 250 /* VariableDeclaration */:
+                case 252 /* VariableDeclaration */:
                     return ancestor.initializer;
-                case 217 /* BinaryExpression */:
+                case 219 /* BinaryExpression */:
                     return ancestor.right;
             }
         }
         function getDestructuringPropertyName(node) {
             var parent = node.parent;
-            if (node.kind === 199 /* BindingElement */ && parent.kind === 197 /* ObjectBindingPattern */) {
+            if (node.kind === 201 /* BindingElement */ && parent.kind === 199 /* ObjectBindingPattern */) {
                 return getLiteralPropertyNameText(node.propertyName || node.name);
             }
-            if (node.kind === 289 /* PropertyAssignment */ || node.kind === 290 /* ShorthandPropertyAssignment */) {
+            if (node.kind === 291 /* PropertyAssignment */ || node.kind === 292 /* ShorthandPropertyAssignment */) {
                 return getLiteralPropertyNameText(node.name);
             }
             return "" + parent.elements.indexOf(node);
@@ -51970,7 +53060,7 @@
                 parentType = getTypeWithFacts(parentType, 524288 /* NEUndefined */);
             }
             var type;
-            if (pattern.kind === 197 /* ObjectBindingPattern */) {
+            if (pattern.kind === 199 /* ObjectBindingPattern */) {
                 if (declaration.dotDotDotToken) {
                     parentType = getReducedType(parentType);
                     if (parentType.flags & 2 /* Unknown */ || !isValidSpreadType(parentType)) {
@@ -51990,7 +53080,7 @@
                     // Use explicitly specified property name ({ p: xxx } form), or otherwise the implied name ({ p } form)
                     var name = declaration.propertyName || declaration.name;
                     var indexType = getLiteralTypeFromPropertyName(name);
-                    var declaredType = getIndexedAccessType(parentType, indexType, /*noUncheckedIndexedAccessCandidate*/ undefined, name, /*aliasSymbol*/ undefined, /*aliasTypeArguments*/ undefined, 16 /* ExpressionPosition */);
+                    var declaredType = getIndexedAccessType(parentType, indexType, 32 /* ExpressionPosition */, name);
                     type = getFlowTypeOfDestructuring(declaration, declaredType);
                 }
             }
@@ -52009,9 +53099,9 @@
                         createArrayType(elementType);
                 }
                 else if (isArrayLikeType(parentType)) {
-                    var indexType = getLiteralType(index_2);
-                    var accessFlags = hasDefaultValue(declaration) ? 8 /* NoTupleBoundsCheck */ : 0;
-                    var declaredType = getIndexedAccessTypeOrUndefined(parentType, indexType, /*noUncheckedIndexedAccessCandidate*/ undefined, declaration.name, accessFlags | 16 /* ExpressionPosition */) || errorType;
+                    var indexType = getNumberLiteralType(index_2);
+                    var accessFlags = 32 /* ExpressionPosition */ | (hasDefaultValue(declaration) ? 16 /* NoTupleBoundsCheck */ : 0);
+                    var declaredType = getIndexedAccessTypeOrUndefined(parentType, indexType, accessFlags, declaration.name) || errorType;
                     type = getFlowTypeOfDestructuring(declaration, declaredType);
                 }
                 else {
@@ -52037,25 +53127,26 @@
         }
         function isNullOrUndefined(node) {
             var expr = ts.skipParentheses(node);
-            return expr.kind === 103 /* NullKeyword */ || expr.kind === 78 /* Identifier */ && getResolvedSymbol(expr) === undefinedSymbol;
+            return expr.kind === 104 /* NullKeyword */ || expr.kind === 79 /* Identifier */ && getResolvedSymbol(expr) === undefinedSymbol;
         }
         function isEmptyArrayLiteral(node) {
             var expr = ts.skipParentheses(node);
-            return expr.kind === 200 /* ArrayLiteralExpression */ && expr.elements.length === 0;
+            return expr.kind === 202 /* ArrayLiteralExpression */ && expr.elements.length === 0;
         }
-        function addOptionality(type, optional) {
-            if (optional === void 0) { optional = true; }
-            return strictNullChecks && optional ? getOptionalType(type) : type;
+        function addOptionality(type, isProperty, isOptional) {
+            if (isProperty === void 0) { isProperty = false; }
+            if (isOptional === void 0) { isOptional = true; }
+            return strictNullChecks && isOptional ? getOptionalType(type, isProperty) : type;
         }
         // Return the inferred type for a variable, parameter, or property declaration
         function getTypeForVariableLikeDeclaration(declaration, includeOptionality) {
             // A variable declared in a for..in statement is of type string, or of type keyof T when the
             // right hand expression is of a type parameter type.
-            if (ts.isVariableDeclaration(declaration) && declaration.parent.parent.kind === 239 /* ForInStatement */) {
+            if (ts.isVariableDeclaration(declaration) && declaration.parent.parent.kind === 241 /* ForInStatement */) {
                 var indexType = getIndexType(getNonNullableTypeIfNeeded(checkExpression(declaration.parent.parent.expression)));
                 return indexType.flags & (262144 /* TypeParameter */ | 4194304 /* Index */) ? getExtractStringType(indexType) : stringType;
             }
-            if (ts.isVariableDeclaration(declaration) && declaration.parent.parent.kind === 240 /* ForOfStatement */) {
+            if (ts.isVariableDeclaration(declaration) && declaration.parent.parent.kind === 242 /* ForOfStatement */) {
                 // checkRightHandSideOfForOf will return undefined if the for-of expression type was
                 // missing properties/signatures required to get its iteratedType (like
                 // [Symbol.iterator] or next). This may be because we accessed properties from anyType,
@@ -52066,13 +53157,14 @@
             if (ts.isBindingPattern(declaration.parent)) {
                 return getTypeForBindingElement(declaration);
             }
-            var isOptional = includeOptionality && (ts.isParameter(declaration) && isJSDocOptionalParameter(declaration)
-                || isOptionalJSDocPropertyLikeTag(declaration)
-                || !ts.isBindingElement(declaration) && !ts.isVariableDeclaration(declaration) && !!declaration.questionToken);
+            var isProperty = ts.isPropertyDeclaration(declaration) || ts.isPropertySignature(declaration);
+            var isOptional = includeOptionality && (isProperty && !!declaration.questionToken ||
+                ts.isParameter(declaration) && (!!declaration.questionToken || isJSDocOptionalParameter(declaration)) ||
+                isOptionalJSDocPropertyLikeTag(declaration));
             // Use type from type annotation if one is present
             var declaredType = tryGetTypeFromEffectiveTypeNode(declaration);
             if (declaredType) {
-                return addOptionality(declaredType, isOptional);
+                return addOptionality(declaredType, isProperty, isOptional);
             }
             if ((noImplicitAny || ts.isInJSFile(declaration)) &&
                 ts.isVariableDeclaration(declaration) && !ts.isBindingPattern(declaration.name) &&
@@ -52092,8 +53184,8 @@
             if (ts.isParameter(declaration)) {
                 var func = declaration.parent;
                 // For a parameter of a set accessor, use the type of the get accessor if one is present
-                if (func.kind === 169 /* SetAccessor */ && hasBindableName(func)) {
-                    var getter = ts.getDeclarationOfKind(getSymbolOfNode(declaration.parent), 168 /* GetAccessor */);
+                if (func.kind === 171 /* SetAccessor */ && hasBindableName(func)) {
+                    var getter = ts.getDeclarationOfKind(getSymbolOfNode(declaration.parent), 170 /* GetAccessor */);
                     if (getter) {
                         var getterSignature = getSignatureFromDeclaration(getter);
                         var thisParameter = getAccessorThisParameter(func);
@@ -52116,7 +53208,7 @@
                 // Use contextual parameter type if one is available
                 var type = declaration.symbol.escapedName === "this" /* This */ ? getContextualThisParameterType(func) : getContextuallyTypedParameterType(declaration);
                 if (type) {
-                    return addOptionality(type, isOptional);
+                    return addOptionality(type, /*isProperty*/ false, isOptional);
                 }
             }
             // Use the type of the initializer expression if one is present and the declaration is
@@ -52129,16 +53221,25 @@
                     }
                 }
                 var type = widenTypeInferredFromInitializer(declaration, checkDeclarationInitializer(declaration));
-                return addOptionality(type, isOptional);
+                return addOptionality(type, isProperty, isOptional);
             }
-            if (ts.isPropertyDeclaration(declaration) && !ts.hasStaticModifier(declaration) && (noImplicitAny || ts.isInJSFile(declaration))) {
+            if (ts.isPropertyDeclaration(declaration) && (noImplicitAny || ts.isInJSFile(declaration))) {
                 // We have a property declaration with no type annotation or initializer, in noImplicitAny mode or a .js file.
-                // Use control flow analysis of this.xxx assignments in the constructor to determine the type of the property.
-                var constructor = findConstructorDeclaration(declaration.parent);
-                var type = constructor ? getFlowTypeInConstructor(declaration.symbol, constructor) :
-                    ts.getEffectiveModifierFlags(declaration) & 2 /* Ambient */ ? getTypeOfPropertyInBaseClass(declaration.symbol) :
-                        undefined;
-                return type && addOptionality(type, isOptional);
+                // Use control flow analysis of this.xxx assignments in the constructor or static block to determine the type of the property.
+                if (!ts.hasStaticModifier(declaration)) {
+                    var constructor = findConstructorDeclaration(declaration.parent);
+                    var type = constructor ? getFlowTypeInConstructor(declaration.symbol, constructor) :
+                        ts.getEffectiveModifierFlags(declaration) & 2 /* Ambient */ ? getTypeOfPropertyInBaseClass(declaration.symbol) :
+                            undefined;
+                    return type && addOptionality(type, /*isProperty*/ true, isOptional);
+                }
+                else {
+                    var staticBlocks = ts.filter(declaration.parent.members, ts.isClassStaticBlockDeclaration);
+                    var type = staticBlocks.length ? getFlowTypeInStaticBlocks(declaration.symbol, staticBlocks) :
+                        ts.getEffectiveModifierFlags(declaration) & 2 /* Ambient */ ? getTypeOfPropertyInBaseClass(declaration.symbol) :
+                            undefined;
+                    return type && addOptionality(type, /*isProperty*/ true, isOptional);
+                }
             }
             if (ts.isJsxAttribute(declaration)) {
                 // if JSX attribute doesn't have initializer, by default the attribute will have boolean value of true.
@@ -52164,7 +53265,7 @@
                     links.isConstructorDeclaredProperty = !!getDeclaringConstructor(symbol) && ts.every(symbol.declarations, function (declaration) {
                         return ts.isBinaryExpression(declaration) &&
                             isPossiblyAliasedThisProperty(declaration) &&
-                            (declaration.left.kind !== 203 /* ElementAccessExpression */ || ts.isStringOrNumericLiteralLike(declaration.left.argumentExpression)) &&
+                            (declaration.left.kind !== 205 /* ElementAccessExpression */ || ts.isStringOrNumericLiteralLike(declaration.left.argumentExpression)) &&
                             !getAnnotatedTypeForAssignmentDeclaration(/*declaredType*/ undefined, declaration, symbol, declaration);
                     });
                 }
@@ -52186,7 +53287,7 @@
             for (var _i = 0, _a = symbol.declarations; _i < _a.length; _i++) {
                 var declaration = _a[_i];
                 var container = ts.getThisContainer(declaration, /*includeArrowFunctions*/ false);
-                if (container && (container.kind === 167 /* Constructor */ || isJSConstructor(container))) {
+                if (container && (container.kind === 169 /* Constructor */ || isJSConstructor(container))) {
                     return container;
                 }
             }
@@ -52208,6 +53309,27 @@
             reference.flowNode = file.endFlowNode;
             return getFlowTypeOfReference(reference, autoType, undefinedType);
         }
+        function getFlowTypeInStaticBlocks(symbol, staticBlocks) {
+            var accessName = ts.startsWith(symbol.escapedName, "__#")
+                ? ts.factory.createPrivateIdentifier(symbol.escapedName.split("@")[1])
+                : ts.unescapeLeadingUnderscores(symbol.escapedName);
+            for (var _i = 0, staticBlocks_1 = staticBlocks; _i < staticBlocks_1.length; _i++) {
+                var staticBlock = staticBlocks_1[_i];
+                var reference = ts.factory.createPropertyAccessExpression(ts.factory.createThis(), accessName);
+                ts.setParent(reference.expression, reference);
+                ts.setParent(reference, staticBlock);
+                reference.flowNode = staticBlock.returnFlowNode;
+                var flowType = getFlowTypeOfProperty(reference, symbol);
+                if (noImplicitAny && (flowType === autoType || flowType === autoArrayType)) {
+                    error(symbol.valueDeclaration, ts.Diagnostics.Member_0_implicitly_has_an_1_type, symbolToString(symbol), typeToString(flowType));
+                }
+                // We don't infer a type if assignments are only null or undefined.
+                if (everyType(flowType, isNullableType)) {
+                    continue;
+                }
+                return convertAutoToAny(flowType);
+            }
+        }
         function getFlowTypeInConstructor(symbol, constructor) {
             var accessName = ts.startsWith(symbol.escapedName, "__#")
                 ? ts.factory.createPrivateIdentifier(symbol.escapedName.split("@")[1])
@@ -52298,7 +53420,7 @@
                     type = getUnionType(sourceTypes, 2 /* Subtype */);
                 }
             }
-            var widened = getWidenedType(addOptionality(type, definedInMethod && !definedInConstructor));
+            var widened = getWidenedType(addOptionality(type, /*isProperty*/ false, definedInMethod && !definedInConstructor));
             if (symbol.valueDeclaration && filterType(widened, function (t) { return !!(t.flags & ~98304 /* Nullable */); }) === neverType) {
                 reportImplicitAny(symbol.valueDeclaration, anyType);
                 return anyType;
@@ -52322,7 +53444,7 @@
             if ((_b = s === null || s === void 0 ? void 0 : s.exports) === null || _b === void 0 ? void 0 : _b.size) {
                 mergeSymbolTable(exports, s.exports);
             }
-            var type = createAnonymousType(symbol, exports, ts.emptyArray, ts.emptyArray, undefined, undefined);
+            var type = createAnonymousType(symbol, exports, ts.emptyArray, ts.emptyArray, ts.emptyArray);
             type.objectFlags |= 8192 /* JSLiteral */;
             return type;
         }
@@ -52341,7 +53463,10 @@
             if ((_a = symbol.parent) === null || _a === void 0 ? void 0 : _a.valueDeclaration) {
                 var typeNode_2 = ts.getEffectiveTypeAnnotationNode(symbol.parent.valueDeclaration);
                 if (typeNode_2) {
-                    return getTypeOfPropertyOfType(getTypeFromTypeNode(typeNode_2), symbol.escapedName);
+                    var annotationSymbol = getPropertyOfType(getTypeFromTypeNode(typeNode_2), symbol.escapedName);
+                    if (annotationSymbol) {
+                        return getNonMissingTypeOfSymbol(annotationSymbol);
+                    }
                 }
             }
             return declaredType;
@@ -52423,7 +53548,7 @@
                     }
                 });
                 var result = createAnonymousType(initialSize !== members_4.size ? undefined : exportedType.symbol, // Only set the type's symbol if it looks to be the same as the original type
-                members_4, exportedType.callSignatures, exportedType.constructSignatures, exportedType.stringIndexInfo, exportedType.numberIndexInfo);
+                members_4, exportedType.callSignatures, exportedType.constructSignatures, exportedType.indexInfos);
                 result.objectFlags |= (ts.getObjectFlags(type) & 8192 /* JSLiteral */); // Propagate JSLiteral flag
                 if (result.symbol && result.symbol.flags & 32 /* Class */ && type === getDeclaredTypeOfClassOrInterface(result.symbol)) {
                     result.objectFlags |= 16777216 /* IsClassInstanceClone */; // Propagate the knowledge that this type is equivalent to the symbol's class instance type
@@ -52438,16 +53563,16 @@
         }
         function containsSameNamedThisProperty(thisProperty, expression) {
             return ts.isPropertyAccessExpression(thisProperty)
-                && thisProperty.expression.kind === 107 /* ThisKeyword */
+                && thisProperty.expression.kind === 108 /* ThisKeyword */
                 && ts.forEachChildRecursively(expression, function (n) { return isMatchingReference(thisProperty, n); });
         }
         function isDeclarationInConstructor(expression) {
             var thisContainer = ts.getThisContainer(expression, /*includeArrowFunctions*/ false);
             // Properties defined in a constructor (or base constructor, or javascript constructor function) don't get undefined added.
             // Function expressions that are assigned to the prototype count as methods.
-            return thisContainer.kind === 167 /* Constructor */ ||
-                thisContainer.kind === 252 /* FunctionDeclaration */ ||
-                (thisContainer.kind === 209 /* FunctionExpression */ && !ts.isPrototypePropertyAssignment(thisContainer.parent));
+            return thisContainer.kind === 169 /* Constructor */ ||
+                thisContainer.kind === 254 /* FunctionDeclaration */ ||
+                (thisContainer.kind === 211 /* FunctionExpression */ && !ts.isPrototypePropertyAssignment(thisContainer.parent));
         }
         function getConstructorDefinedThisAssignmentTypes(types, declarations) {
             ts.Debug.assert(types.length === declarations.length);
@@ -52489,7 +53614,7 @@
             ts.forEach(pattern.elements, function (e) {
                 var name = e.propertyName || e.name;
                 if (e.dotDotDotToken) {
-                    stringIndexInfo = createIndexInfo(anyType, /*isReadonly*/ false);
+                    stringIndexInfo = createIndexInfo(stringType, anyType, /*isReadonly*/ false);
                     return;
                 }
                 var exprType = getLiteralTypeFromPropertyName(name);
@@ -52505,7 +53630,7 @@
                 symbol.bindingElement = e;
                 members.set(symbol.escapedName, symbol);
             });
-            var result = createAnonymousType(undefined, members, ts.emptyArray, ts.emptyArray, stringIndexInfo, undefined);
+            var result = createAnonymousType(undefined, members, ts.emptyArray, ts.emptyArray, stringIndexInfo ? [stringIndexInfo] : ts.emptyArray);
             result.objectFlags |= objectFlags;
             if (includePatternInType) {
                 result.pattern = pattern;
@@ -52517,7 +53642,7 @@
         function getTypeFromArrayBindingPattern(pattern, includePatternInType, reportErrors) {
             var elements = pattern.elements;
             var lastElement = ts.lastOrUndefined(elements);
-            var restElement = lastElement && lastElement.kind === 199 /* BindingElement */ && lastElement.dotDotDotToken ? lastElement : undefined;
+            var restElement = lastElement && lastElement.kind === 201 /* BindingElement */ && lastElement.dotDotDotToken ? lastElement : undefined;
             if (elements.length === 0 || elements.length === 1 && restElement) {
                 return languageVersion >= 2 /* ES2015 */ ? createIterableType(anyType) : anyArrayType;
             }
@@ -52542,7 +53667,7 @@
         function getTypeFromBindingPattern(pattern, includePatternInType, reportErrors) {
             if (includePatternInType === void 0) { includePatternInType = false; }
             if (reportErrors === void 0) { reportErrors = false; }
-            return pattern.kind === 197 /* ObjectBindingPattern */
+            return pattern.kind === 199 /* ObjectBindingPattern */
                 ? getTypeFromObjectBindingPattern(pattern, includePatternInType, reportErrors)
                 : getTypeFromArrayBindingPattern(pattern, includePatternInType, reportErrors);
         }
@@ -52590,7 +53715,7 @@
         }
         function declarationBelongsToPrivateAmbientMember(declaration) {
             var root = ts.getRootDeclaration(declaration);
-            var memberDeclaration = root.kind === 161 /* Parameter */ ? root.parent : root;
+            var memberDeclaration = root.kind === 162 /* Parameter */ ? root.parent : root;
             return isPrivateWithinAmbient(memberDeclaration);
         }
         function tryGetTypeFromEffectiveTypeNode(declaration) {
@@ -52635,7 +53760,7 @@
                     result.exports = new ts.Map(fileSymbol.exports);
                 var members = ts.createSymbolTable();
                 members.set("exports", result);
-                return createAnonymousType(symbol, members, ts.emptyArray, ts.emptyArray, undefined, undefined);
+                return createAnonymousType(symbol, members, ts.emptyArray, ts.emptyArray, ts.emptyArray);
             }
             // Handle catch clause variables
             ts.Debug.assertIsDefined(symbol.valueDeclaration);
@@ -52643,7 +53768,7 @@
             if (ts.isCatchClauseVariableDeclarationOrBindingElement(declaration)) {
                 var typeNode = ts.getEffectiveTypeAnnotationNode(declaration);
                 if (typeNode === undefined) {
-                    return anyType;
+                    return useUnknownInCatchVariables ? unknownType : anyType;
                 }
                 var type_1 = getTypeOfNode(typeNode);
                 // an errorType will make `checkTryStatement` issue an error
@@ -52665,7 +53790,7 @@
                 return reportCircularityError(symbol);
             }
             var type;
-            if (declaration.kind === 267 /* ExportAssignment */) {
+            if (declaration.kind === 269 /* ExportAssignment */) {
                 type = widenTypeForVariableLikeDeclaration(checkExpressionCached(declaration.expression), declaration);
             }
             else if (ts.isBinaryExpression(declaration) ||
@@ -52736,7 +53861,7 @@
         }
         function getAnnotatedAccessorTypeNode(accessor) {
             if (accessor) {
-                if (accessor.kind === 168 /* GetAccessor */) {
+                if (accessor.kind === 170 /* GetAccessor */) {
                     var getterTypeAnnotation = ts.getEffectiveReturnTypeNode(accessor);
                     return getterTypeAnnotation;
                 }
@@ -52775,7 +53900,7 @@
             if (!popTypeResolution()) {
                 type = anyType;
                 if (noImplicitAny) {
-                    var getter = ts.getDeclarationOfKind(symbol, 168 /* GetAccessor */);
+                    var getter = ts.getDeclarationOfKind(symbol, 170 /* GetAccessor */);
                     error(getter, ts.Diagnostics._0_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_referenced_directly_or_indirectly_in_one_of_its_return_expressions, symbolToString(symbol));
                 }
             }
@@ -52783,8 +53908,8 @@
         }
         function resolveTypeOfAccessors(symbol, writing) {
             if (writing === void 0) { writing = false; }
-            var getter = ts.getDeclarationOfKind(symbol, 168 /* GetAccessor */);
-            var setter = ts.getDeclarationOfKind(symbol, 169 /* SetAccessor */);
+            var getter = ts.getDeclarationOfKind(symbol, 170 /* GetAccessor */);
+            var setter = ts.getDeclarationOfKind(symbol, 171 /* SetAccessor */);
             var setterType = getAnnotatedAccessorType(setter);
             // For write operations, prioritize type annotations on the setter
             if (writing && setterType) {
@@ -52861,9 +53986,9 @@
             if (symbol.flags & 1536 /* Module */ && ts.isShorthandAmbientModuleSymbol(symbol)) {
                 return anyType;
             }
-            else if (declaration && (declaration.kind === 217 /* BinaryExpression */ ||
+            else if (declaration && (declaration.kind === 219 /* BinaryExpression */ ||
                 ts.isAccessExpression(declaration) &&
-                    declaration.parent.kind === 217 /* BinaryExpression */)) {
+                    declaration.parent.kind === 219 /* BinaryExpression */)) {
                 return getWidenedTypeForAssignmentDeclaration(symbol);
             }
             else if (symbol.flags & 512 /* ValueModule */ && declaration && ts.isSourceFile(declaration) && declaration.commonJsModuleIndicator) {
@@ -52932,7 +54057,7 @@
                 return errorType;
             }
             // Check if variable has initializer that circularly references the variable itself
-            if (noImplicitAny && (declaration.kind !== 161 /* Parameter */ || declaration.initializer)) {
+            if (noImplicitAny && (declaration.kind !== 162 /* Parameter */ || declaration.initializer)) {
                 error(symbol.valueDeclaration, ts.Diagnostics._0_implicitly_has_type_any_because_it_does_not_have_a_type_annotation_and_is_referenced_directly_or_indirectly_in_its_own_initializer, symbolToString(symbol));
             }
             // Circularities could also result from parameters in function expressions that end up
@@ -52989,6 +54114,9 @@
             }
             return errorType;
         }
+        function getNonMissingTypeOfSymbol(symbol) {
+            return removeMissingType(getTypeOfSymbol(symbol), !!(symbol.flags & 16777216 /* Optional */));
+        }
         function isReferenceToType(type, target) {
             return type !== undefined
                 && target !== undefined
@@ -53040,46 +54168,46 @@
                     return undefined;
                 }
                 switch (node.kind) {
-                    case 253 /* ClassDeclaration */:
-                    case 222 /* ClassExpression */:
-                    case 254 /* InterfaceDeclaration */:
-                    case 170 /* CallSignature */:
-                    case 171 /* ConstructSignature */:
-                    case 165 /* MethodSignature */:
-                    case 175 /* FunctionType */:
-                    case 176 /* ConstructorType */:
-                    case 309 /* JSDocFunctionType */:
-                    case 252 /* FunctionDeclaration */:
-                    case 166 /* MethodDeclaration */:
-                    case 209 /* FunctionExpression */:
-                    case 210 /* ArrowFunction */:
-                    case 255 /* TypeAliasDeclaration */:
-                    case 334 /* JSDocTemplateTag */:
-                    case 335 /* JSDocTypedefTag */:
-                    case 329 /* JSDocEnumTag */:
-                    case 328 /* JSDocCallbackTag */:
-                    case 191 /* MappedType */:
-                    case 185 /* ConditionalType */: {
+                    case 255 /* ClassDeclaration */:
+                    case 224 /* ClassExpression */:
+                    case 256 /* InterfaceDeclaration */:
+                    case 172 /* CallSignature */:
+                    case 173 /* ConstructSignature */:
+                    case 166 /* MethodSignature */:
+                    case 177 /* FunctionType */:
+                    case 178 /* ConstructorType */:
+                    case 312 /* JSDocFunctionType */:
+                    case 254 /* FunctionDeclaration */:
+                    case 167 /* MethodDeclaration */:
+                    case 211 /* FunctionExpression */:
+                    case 212 /* ArrowFunction */:
+                    case 257 /* TypeAliasDeclaration */:
+                    case 339 /* JSDocTemplateTag */:
+                    case 340 /* JSDocTypedefTag */:
+                    case 334 /* JSDocEnumTag */:
+                    case 333 /* JSDocCallbackTag */:
+                    case 193 /* MappedType */:
+                    case 187 /* ConditionalType */: {
                         var outerTypeParameters = getOuterTypeParameters(node, includeThisTypes);
-                        if (node.kind === 191 /* MappedType */) {
+                        if (node.kind === 193 /* MappedType */) {
                             return ts.append(outerTypeParameters, getDeclaredTypeOfTypeParameter(getSymbolOfNode(node.typeParameter)));
                         }
-                        else if (node.kind === 185 /* ConditionalType */) {
+                        else if (node.kind === 187 /* ConditionalType */) {
                             return ts.concatenate(outerTypeParameters, getInferTypeParameters(node));
                         }
                         var outerAndOwnTypeParameters = appendTypeParameters(outerTypeParameters, ts.getEffectiveTypeParameterDeclarations(node));
                         var thisType = includeThisTypes &&
-                            (node.kind === 253 /* ClassDeclaration */ || node.kind === 222 /* ClassExpression */ || node.kind === 254 /* InterfaceDeclaration */ || isJSConstructor(node)) &&
+                            (node.kind === 255 /* ClassDeclaration */ || node.kind === 224 /* ClassExpression */ || node.kind === 256 /* InterfaceDeclaration */ || isJSConstructor(node)) &&
                             getDeclaredTypeOfClassOrInterface(getSymbolOfNode(node)).thisType;
                         return thisType ? ts.append(outerAndOwnTypeParameters, thisType) : outerAndOwnTypeParameters;
                     }
-                    case 330 /* JSDocParameterTag */:
+                    case 335 /* JSDocParameterTag */:
                         var paramSymbol = ts.getParameterSymbolFromJSDoc(node);
                         if (paramSymbol) {
                             node = paramSymbol.valueDeclaration;
                         }
                         break;
-                    case 312 /* JSDocComment */: {
+                    case 315 /* JSDocComment */: {
                         var outerTypeParameters = getOuterTypeParameters(node, includeThisTypes);
                         return node.tags
                             ? appendTypeParameters(outerTypeParameters, ts.flatMap(node.tags, function (t) { return ts.isJSDocTemplateTag(t) ? t.typeParameters : undefined; }))
@@ -53090,7 +54218,7 @@
         }
         // The outer type parameters are those defined by enclosing generic classes, methods, or functions.
         function getOuterTypeParametersOfClassOrInterface(symbol) {
-            var declaration = symbol.flags & 32 /* Class */ ? symbol.valueDeclaration : ts.getDeclarationOfKind(symbol, 254 /* InterfaceDeclaration */);
+            var declaration = symbol.flags & 32 /* Class */ ? symbol.valueDeclaration : ts.getDeclarationOfKind(symbol, 256 /* InterfaceDeclaration */);
             ts.Debug.assert(!!declaration, "Class was missing valueDeclaration -OR- non-class had no interface declarations");
             return getOuterTypeParameters(declaration);
         }
@@ -53103,9 +54231,9 @@
             var result;
             for (var _i = 0, _a = symbol.declarations; _i < _a.length; _i++) {
                 var node = _a[_i];
-                if (node.kind === 254 /* InterfaceDeclaration */ ||
-                    node.kind === 253 /* ClassDeclaration */ ||
-                    node.kind === 222 /* ClassExpression */ ||
+                if (node.kind === 256 /* InterfaceDeclaration */ ||
+                    node.kind === 255 /* ClassDeclaration */ ||
+                    node.kind === 224 /* ClassExpression */ ||
                     isJSConstructor(node) ||
                     ts.isTypeAlias(node)) {
                     var declaration = node;
@@ -53256,7 +54384,7 @@
                     if (!popTypeResolution() && type.symbol.declarations) {
                         for (var _i = 0, _a = type.symbol.declarations; _i < _a.length; _i++) {
                             var declaration = _a[_i];
-                            if (declaration.kind === 253 /* ClassDeclaration */ || declaration.kind === 254 /* InterfaceDeclaration */) {
+                            if (declaration.kind === 255 /* ClassDeclaration */ || declaration.kind === 256 /* InterfaceDeclaration */) {
                                 reportCircularBaseType(declaration, type);
                             }
                         }
@@ -53352,7 +54480,7 @@
             if (type.symbol.declarations) {
                 for (var _i = 0, _a = type.symbol.declarations; _i < _a.length; _i++) {
                     var declaration = _a[_i];
-                    if (declaration.kind === 254 /* InterfaceDeclaration */ && ts.getInterfaceBaseTypeNodes(declaration)) {
+                    if (declaration.kind === 256 /* InterfaceDeclaration */ && ts.getInterfaceBaseTypeNodes(declaration)) {
                         for (var _b = 0, _c = ts.getInterfaceBaseTypeNodes(declaration); _b < _c.length; _b++) {
                             var node = _c[_b];
                             var baseType = getReducedType(getTypeFromTypeNode(node));
@@ -53392,7 +54520,7 @@
             }
             for (var _i = 0, _a = symbol.declarations; _i < _a.length; _i++) {
                 var declaration = _a[_i];
-                if (declaration.kind === 254 /* InterfaceDeclaration */) {
+                if (declaration.kind === 256 /* InterfaceDeclaration */) {
                     if (declaration.flags & 128 /* ContainsThis */) {
                         return false;
                     }
@@ -53471,7 +54599,12 @@
                 }
                 else {
                     type = errorType;
-                    error(ts.isNamedDeclaration(declaration) ? declaration.name : declaration || declaration, ts.Diagnostics.Type_alias_0_circularly_references_itself, symbolToString(symbol));
+                    if (declaration.kind === 334 /* JSDocEnumTag */) {
+                        error(declaration.typeExpression.type, ts.Diagnostics.Type_alias_0_circularly_references_itself, symbolToString(symbol));
+                    }
+                    else {
+                        error(ts.isNamedDeclaration(declaration) ? declaration.name : declaration || declaration, ts.Diagnostics.Type_alias_0_circularly_references_itself, symbolToString(symbol));
+                    }
                 }
                 links.declaredType = type;
             }
@@ -53481,7 +54614,7 @@
             if (ts.isStringLiteralLike(expr)) {
                 return true;
             }
-            else if (expr.kind === 217 /* BinaryExpression */) {
+            else if (expr.kind === 219 /* BinaryExpression */) {
                 return isStringConcatExpression(expr.left) && isStringConcatExpression(expr.right);
             }
             return false;
@@ -53496,12 +54629,12 @@
                 case 8 /* NumericLiteral */:
                 case 14 /* NoSubstitutionTemplateLiteral */:
                     return true;
-                case 215 /* PrefixUnaryExpression */:
+                case 217 /* PrefixUnaryExpression */:
                     return expr.operator === 40 /* MinusToken */ &&
                         expr.operand.kind === 8 /* NumericLiteral */;
-                case 78 /* Identifier */:
+                case 79 /* Identifier */:
                     return ts.nodeIsMissing(expr) || !!getSymbolOfNode(member.parent).exports.get(expr.escapedText);
-                case 217 /* BinaryExpression */:
+                case 219 /* BinaryExpression */:
                     return isStringConcatExpression(expr);
                 default:
                     return false;
@@ -53516,7 +54649,7 @@
             if (symbol.declarations) {
                 for (var _i = 0, _a = symbol.declarations; _i < _a.length; _i++) {
                     var declaration = _a[_i];
-                    if (declaration.kind === 256 /* EnumDeclaration */) {
+                    if (declaration.kind === 258 /* EnumDeclaration */) {
                         for (var _b = 0, _c = declaration.members; _b < _c.length; _b++) {
                             var member = _c[_b];
                             if (member.initializer && ts.isStringLiteralLike(member.initializer)) {
@@ -53545,11 +54678,11 @@
                 if (symbol.declarations) {
                     for (var _i = 0, _a = symbol.declarations; _i < _a.length; _i++) {
                         var declaration = _a[_i];
-                        if (declaration.kind === 256 /* EnumDeclaration */) {
+                        if (declaration.kind === 258 /* EnumDeclaration */) {
                             for (var _b = 0, _c = declaration.members; _b < _c.length; _b++) {
                                 var member = _c[_b];
                                 var value = getEnumMemberValue(member);
-                                var memberType = getFreshTypeOfLiteralType(getLiteralType(value !== undefined ? value : 0, enumCount, getSymbolOfNode(member)));
+                                var memberType = getFreshTypeOfLiteralType(getEnumLiteralType(value !== undefined ? value : 0, enumCount, getSymbolOfNode(member)));
                                 getSymbolLinks(getSymbolOfNode(member)).declaredType = memberType;
                                 memberTypeList.push(getRegularTypeOfLiteralType(memberType));
                             }
@@ -53618,22 +54751,22 @@
          */
         function isThislessType(node) {
             switch (node.kind) {
-                case 128 /* AnyKeyword */:
-                case 152 /* UnknownKeyword */:
-                case 147 /* StringKeyword */:
-                case 144 /* NumberKeyword */:
-                case 155 /* BigIntKeyword */:
-                case 131 /* BooleanKeyword */:
-                case 148 /* SymbolKeyword */:
-                case 145 /* ObjectKeyword */:
-                case 113 /* VoidKeyword */:
-                case 150 /* UndefinedKeyword */:
-                case 141 /* NeverKeyword */:
-                case 192 /* LiteralType */:
+                case 129 /* AnyKeyword */:
+                case 153 /* UnknownKeyword */:
+                case 148 /* StringKeyword */:
+                case 145 /* NumberKeyword */:
+                case 156 /* BigIntKeyword */:
+                case 132 /* BooleanKeyword */:
+                case 149 /* SymbolKeyword */:
+                case 146 /* ObjectKeyword */:
+                case 114 /* VoidKeyword */:
+                case 151 /* UndefinedKeyword */:
+                case 142 /* NeverKeyword */:
+                case 194 /* LiteralType */:
                     return true;
-                case 179 /* ArrayType */:
+                case 181 /* ArrayType */:
                     return isThislessType(node.elementType);
-                case 174 /* TypeReference */:
+                case 176 /* TypeReference */:
                     return !node.typeArguments || node.typeArguments.every(isThislessType);
             }
             return false;
@@ -53659,7 +54792,7 @@
         function isThislessFunctionLikeDeclaration(node) {
             var returnType = ts.getEffectiveReturnTypeNode(node);
             var typeParameters = ts.getEffectiveTypeParameterDeclarations(node);
-            return (node.kind === 167 /* Constructor */ || (!!returnType && isThislessType(returnType))) &&
+            return (node.kind === 169 /* Constructor */ || (!!returnType && isThislessType(returnType))) &&
                 node.parameters.every(isThislessVariableLikeDeclaration) &&
                 typeParameters.every(isThislessTypeParameter);
         }
@@ -53675,14 +54808,14 @@
                 var declaration = symbol.declarations[0];
                 if (declaration) {
                     switch (declaration.kind) {
-                        case 164 /* PropertyDeclaration */:
-                        case 163 /* PropertySignature */:
+                        case 165 /* PropertyDeclaration */:
+                        case 164 /* PropertySignature */:
                             return isThislessVariableLikeDeclaration(declaration);
-                        case 166 /* MethodDeclaration */:
-                        case 165 /* MethodSignature */:
-                        case 167 /* Constructor */:
-                        case 168 /* GetAccessor */:
-                        case 169 /* SetAccessor */:
+                        case 167 /* MethodDeclaration */:
+                        case 166 /* MethodSignature */:
+                        case 169 /* Constructor */:
+                        case 170 /* GetAccessor */:
+                        case 171 /* SetAccessor */:
                             return isThislessFunctionLikeDeclaration(declaration);
                     }
                 }
@@ -53708,7 +54841,7 @@
             }
         }
         function isStaticPrivateIdentifierProperty(s) {
-            return !!s.valueDeclaration && ts.isPrivateIdentifierClassElementDeclaration(s.valueDeclaration) && ts.hasSyntacticModifier(s.valueDeclaration, 32 /* Static */);
+            return !!s.valueDeclaration && ts.isPrivateIdentifierClassElementDeclaration(s.valueDeclaration) && ts.isStatic(s.valueDeclaration);
         }
         function resolveDeclaredMembers(type) {
             if (!type.declaredProperties) {
@@ -53718,10 +54851,10 @@
                 // Start with signatures at empty array in case of recursive types
                 type.declaredCallSignatures = ts.emptyArray;
                 type.declaredConstructSignatures = ts.emptyArray;
+                type.declaredIndexInfos = ts.emptyArray;
                 type.declaredCallSignatures = getSignaturesOfSymbol(members.get("__call" /* Call */));
                 type.declaredConstructSignatures = getSignaturesOfSymbol(members.get("__new" /* New */));
-                type.declaredStringIndexInfo = getIndexInfoOfSymbol(symbol, 0 /* String */);
-                type.declaredNumberIndexInfo = getIndexInfoOfSymbol(symbol, 1 /* Number */);
+                type.declaredIndexInfos = getIndexInfosOfSymbol(symbol);
             }
             return type;
         }
@@ -53795,7 +54928,7 @@
             if (!symbol.declarations) {
                 symbol.declarations = [member];
             }
-            else {
+            else if (!member.symbol.isReplaceableByMethod) {
                 symbol.declarations.push(member);
             }
             if (symbolFlags & 111551 /* Value */) {
@@ -53877,8 +55010,8 @@
         function getResolvedMembersOrExportsOfSymbol(symbol, resolutionKind) {
             var links = getSymbolLinks(symbol);
             if (!links[resolutionKind]) {
-                var isStatic = resolutionKind === "resolvedExports" /* resolvedExports */;
-                var earlySymbols = !isStatic ? symbol.members :
+                var isStatic_1 = resolutionKind === "resolvedExports" /* resolvedExports */;
+                var earlySymbols = !isStatic_1 ? symbol.members :
                     symbol.flags & 1536 /* Module */ ? getExportsOfModuleWorker(symbol) :
                         symbol.exports;
                 // In the event we recursively resolve the members/exports of the symbol, we
@@ -53893,7 +55026,7 @@
                     if (members) {
                         for (var _b = 0, members_5 = members; _b < members_5.length; _b++) {
                             var member = members_5[_b];
-                            if (isStatic === ts.hasStaticModifier(member) && hasLateBindableName(member)) {
+                            if (isStatic_1 === ts.hasStaticModifier(member) && hasLateBindableName(member)) {
                                 lateBindMember(symbol, earlySymbols, lateSymbols, member);
                             }
                         }
@@ -53909,7 +55042,7 @@
                             || ts.isBinaryExpression(member) && isPossiblyAliasedThisProperty(member, assignmentKind)
                             || assignmentKind === 9 /* ObjectDefinePrototypeProperty */
                             || assignmentKind === 6 /* Prototype */; // A straight `Prototype` assignment probably can never have a computed name
-                        if (isStatic === !isInstanceMember && hasLateBindableName(member)) {
+                        if (isStatic_1 === !isInstanceMember && hasLateBindableName(member)) {
                             lateBindMember(symbol, earlySymbols, lateSymbols, member);
                         }
                     }
@@ -53971,29 +55104,26 @@
             var members;
             var callSignatures;
             var constructSignatures;
-            var stringIndexInfo;
-            var numberIndexInfo;
+            var indexInfos;
             if (ts.rangeEquals(typeParameters, typeArguments, 0, typeParameters.length)) {
                 members = source.symbol ? getMembersOfSymbol(source.symbol) : ts.createSymbolTable(source.declaredProperties);
                 callSignatures = source.declaredCallSignatures;
                 constructSignatures = source.declaredConstructSignatures;
-                stringIndexInfo = source.declaredStringIndexInfo;
-                numberIndexInfo = source.declaredNumberIndexInfo;
+                indexInfos = source.declaredIndexInfos;
             }
             else {
                 mapper = createTypeMapper(typeParameters, typeArguments);
                 members = createInstantiatedSymbolTable(source.declaredProperties, mapper, /*mappingThisOnly*/ typeParameters.length === 1);
                 callSignatures = instantiateSignatures(source.declaredCallSignatures, mapper);
                 constructSignatures = instantiateSignatures(source.declaredConstructSignatures, mapper);
-                stringIndexInfo = instantiateIndexInfo(source.declaredStringIndexInfo, mapper);
-                numberIndexInfo = instantiateIndexInfo(source.declaredNumberIndexInfo, mapper);
+                indexInfos = instantiateIndexInfos(source.declaredIndexInfos, mapper);
             }
             var baseTypes = getBaseTypes(source);
             if (baseTypes.length) {
                 if (source.symbol && members === getMembersOfSymbol(source.symbol)) {
                     members = ts.createSymbolTable(source.declaredProperties);
                 }
-                setStructuredTypeMembers(type, members, callSignatures, constructSignatures, stringIndexInfo, numberIndexInfo);
+                setStructuredTypeMembers(type, members, callSignatures, constructSignatures, indexInfos);
                 var thisArgument = ts.lastOrUndefined(typeArguments);
                 for (var _i = 0, baseTypes_1 = baseTypes; _i < baseTypes_1.length; _i++) {
                     var baseType = baseTypes_1[_i];
@@ -54001,15 +55131,11 @@
                     addInheritedMembers(members, getPropertiesOfType(instantiatedBaseType));
                     callSignatures = ts.concatenate(callSignatures, getSignaturesOfType(instantiatedBaseType, 0 /* Call */));
                     constructSignatures = ts.concatenate(constructSignatures, getSignaturesOfType(instantiatedBaseType, 1 /* Construct */));
-                    if (!stringIndexInfo) {
-                        stringIndexInfo = instantiatedBaseType === anyType ?
-                            createIndexInfo(anyType, /*isReadonly*/ false) :
-                            getIndexInfoOfType(instantiatedBaseType, 0 /* String */);
-                    }
-                    numberIndexInfo = numberIndexInfo || getIndexInfoOfType(instantiatedBaseType, 1 /* Number */);
+                    var inheritedIndexInfos = instantiatedBaseType !== anyType ? getIndexInfosOfType(instantiatedBaseType) : [createIndexInfo(stringType, anyType, /*isReadonly*/ false)];
+                    indexInfos = ts.concatenate(indexInfos, ts.filter(inheritedIndexInfos, function (info) { return !findIndexInfo(indexInfos, info.keyType); }));
                 }
             }
-            setStructuredTypeMembers(type, members, callSignatures, constructSignatures, stringIndexInfo, numberIndexInfo);
+            setStructuredTypeMembers(type, members, callSignatures, constructSignatures, indexInfos);
         }
         function resolveClassOrInterfaceMembers(type) {
             resolveObjectTypeMembers(type, resolveDeclaredMembers(type), ts.emptyArray, ts.emptyArray);
@@ -54319,38 +55445,35 @@
             }
             return result;
         }
-        function getUnionIndexInfo(types, kind) {
-            var indexTypes = [];
-            var isAnyReadonly = false;
-            for (var _i = 0, types_4 = types; _i < types_4.length; _i++) {
-                var type = types_4[_i];
-                var indexInfo = getIndexInfoOfType(getApparentType(type), kind);
-                if (!indexInfo) {
-                    return undefined;
+        function getUnionIndexInfos(types) {
+            var sourceInfos = getIndexInfosOfType(types[0]);
+            if (sourceInfos) {
+                var result = [];
+                var _loop_11 = function (info) {
+                    var indexType = info.keyType;
+                    if (ts.every(types, function (t) { return !!getIndexInfoOfType(t, indexType); })) {
+                        result.push(createIndexInfo(indexType, getUnionType(ts.map(types, function (t) { return getIndexTypeOfType(t, indexType); })), ts.some(types, function (t) { return getIndexInfoOfType(t, indexType).isReadonly; })));
+                    }
+                };
+                for (var _i = 0, sourceInfos_1 = sourceInfos; _i < sourceInfos_1.length; _i++) {
+                    var info = sourceInfos_1[_i];
+                    _loop_11(info);
                 }
-                indexTypes.push(indexInfo.type);
-                isAnyReadonly = isAnyReadonly || indexInfo.isReadonly;
+                return result;
             }
-            return createIndexInfo(getUnionType(indexTypes, 2 /* Subtype */), isAnyReadonly);
+            return ts.emptyArray;
         }
         function resolveUnionTypeMembers(type) {
             // The members and properties collections are empty for union types. To get all properties of a union
             // type use getPropertiesOfType (only the language service uses this).
             var callSignatures = getUnionSignatures(ts.map(type.types, function (t) { return t === globalFunctionType ? [unknownSignature] : getSignaturesOfType(t, 0 /* Call */); }));
             var constructSignatures = getUnionSignatures(ts.map(type.types, function (t) { return getSignaturesOfType(t, 1 /* Construct */); }));
-            var stringIndexInfo = getUnionIndexInfo(type.types, 0 /* String */);
-            var numberIndexInfo = getUnionIndexInfo(type.types, 1 /* Number */);
-            setStructuredTypeMembers(type, emptySymbols, callSignatures, constructSignatures, stringIndexInfo, numberIndexInfo);
+            var indexInfos = getUnionIndexInfos(type.types);
+            setStructuredTypeMembers(type, emptySymbols, callSignatures, constructSignatures, indexInfos);
         }
         function intersectTypes(type1, type2) {
             return !type1 ? type2 : !type2 ? type1 : getIntersectionType([type1, type2]);
         }
-        function intersectIndexInfos(info1, info2) {
-            return !info1 ? info2 : !info2 ? info1 : createIndexInfo(getIntersectionType([info1.type, info2.type]), info1.isReadonly && info2.isReadonly);
-        }
-        function unionSpreadIndexInfos(info1, info2) {
-            return info1 && info2 && createIndexInfo(getUnionType([info1.type, info2.type]), info1.isReadonly || info2.isReadonly);
-        }
         function findMixins(types) {
             var constructorTypeCount = ts.countWhere(types, function (t) { return getSignaturesOfType(t, 1 /* Construct */).length > 0; });
             var mixinFlags = ts.map(types, isMixinConstructorType);
@@ -54377,12 +55500,11 @@
             // intersection type use getPropertiesOfType (only the language service uses this).
             var callSignatures;
             var constructSignatures;
-            var stringIndexInfo;
-            var numberIndexInfo;
+            var indexInfos;
             var types = type.types;
             var mixinFlags = findMixins(types);
             var mixinCount = ts.countWhere(mixinFlags, function (b) { return b; });
-            var _loop_11 = function (i) {
+            var _loop_12 = function (i) {
                 var t = type.types[i];
                 // When an intersection type contains mixin constructor types, the construct signatures from
                 // those types are discarded and their return types are mixed into the return types of all
@@ -54401,54 +55523,62 @@
                     constructSignatures = appendSignatures(constructSignatures, signatures);
                 }
                 callSignatures = appendSignatures(callSignatures, getSignaturesOfType(t, 0 /* Call */));
-                stringIndexInfo = intersectIndexInfos(stringIndexInfo, getIndexInfoOfType(t, 0 /* String */));
-                numberIndexInfo = intersectIndexInfos(numberIndexInfo, getIndexInfoOfType(t, 1 /* Number */));
+                indexInfos = ts.reduceLeft(getIndexInfosOfType(t), function (infos, newInfo) { return appendIndexInfo(infos, newInfo, /*union*/ false); }, indexInfos);
             };
             for (var i = 0; i < types.length; i++) {
-                _loop_11(i);
+                _loop_12(i);
             }
-            setStructuredTypeMembers(type, emptySymbols, callSignatures || ts.emptyArray, constructSignatures || ts.emptyArray, stringIndexInfo, numberIndexInfo);
+            setStructuredTypeMembers(type, emptySymbols, callSignatures || ts.emptyArray, constructSignatures || ts.emptyArray, indexInfos || ts.emptyArray);
         }
         function appendSignatures(signatures, newSignatures) {
-            var _loop_12 = function (sig) {
+            var _loop_13 = function (sig) {
                 if (!signatures || ts.every(signatures, function (s) { return !compareSignaturesIdentical(s, sig, /*partialMatch*/ false, /*ignoreThisTypes*/ false, /*ignoreReturnTypes*/ false, compareTypesIdentical); })) {
                     signatures = ts.append(signatures, sig);
                 }
             };
             for (var _i = 0, newSignatures_1 = newSignatures; _i < newSignatures_1.length; _i++) {
                 var sig = newSignatures_1[_i];
-                _loop_12(sig);
+                _loop_13(sig);
             }
             return signatures;
         }
+        function appendIndexInfo(indexInfos, newInfo, union) {
+            if (indexInfos) {
+                for (var i = 0; i < indexInfos.length; i++) {
+                    var info = indexInfos[i];
+                    if (info.keyType === newInfo.keyType) {
+                        indexInfos[i] = createIndexInfo(info.keyType, union ? getUnionType([info.type, newInfo.type]) : getIntersectionType([info.type, newInfo.type]), union ? info.isReadonly || newInfo.isReadonly : info.isReadonly && newInfo.isReadonly);
+                        return indexInfos;
+                    }
+                }
+            }
+            return ts.append(indexInfos, newInfo);
+        }
         /**
          * Converts an AnonymousType to a ResolvedType.
          */
         function resolveAnonymousTypeMembers(type) {
             var symbol = getMergedSymbol(type.symbol);
             if (type.target) {
-                setStructuredTypeMembers(type, emptySymbols, ts.emptyArray, ts.emptyArray, undefined, undefined);
+                setStructuredTypeMembers(type, emptySymbols, ts.emptyArray, ts.emptyArray, ts.emptyArray);
                 var members = createInstantiatedSymbolTable(getPropertiesOfObjectType(type.target), type.mapper, /*mappingThisOnly*/ false);
                 var callSignatures = instantiateSignatures(getSignaturesOfType(type.target, 0 /* Call */), type.mapper);
                 var constructSignatures = instantiateSignatures(getSignaturesOfType(type.target, 1 /* Construct */), type.mapper);
-                var stringIndexInfo = instantiateIndexInfo(getIndexInfoOfType(type.target, 0 /* String */), type.mapper);
-                var numberIndexInfo = instantiateIndexInfo(getIndexInfoOfType(type.target, 1 /* Number */), type.mapper);
-                setStructuredTypeMembers(type, members, callSignatures, constructSignatures, stringIndexInfo, numberIndexInfo);
+                var indexInfos = instantiateIndexInfos(getIndexInfosOfType(type.target), type.mapper);
+                setStructuredTypeMembers(type, members, callSignatures, constructSignatures, indexInfos);
             }
             else if (symbol.flags & 2048 /* TypeLiteral */) {
-                setStructuredTypeMembers(type, emptySymbols, ts.emptyArray, ts.emptyArray, undefined, undefined);
+                setStructuredTypeMembers(type, emptySymbols, ts.emptyArray, ts.emptyArray, ts.emptyArray);
                 var members = getMembersOfSymbol(symbol);
                 var callSignatures = getSignaturesOfSymbol(members.get("__call" /* Call */));
                 var constructSignatures = getSignaturesOfSymbol(members.get("__new" /* New */));
-                var stringIndexInfo = getIndexInfoOfSymbol(symbol, 0 /* String */);
-                var numberIndexInfo = getIndexInfoOfSymbol(symbol, 1 /* Number */);
-                setStructuredTypeMembers(type, members, callSignatures, constructSignatures, stringIndexInfo, numberIndexInfo);
+                var indexInfos = getIndexInfosOfSymbol(symbol);
+                setStructuredTypeMembers(type, members, callSignatures, constructSignatures, indexInfos);
             }
             else {
                 // Combinations of function, class, enum and module
                 var members = emptySymbols;
-                var stringIndexInfo = void 0;
-                var numberIndexInfo = void 0;
+                var indexInfos = void 0;
                 if (symbol.exports) {
                     members = getExportsOfSymbol(symbol);
                     if (symbol === globalThisSymbol) {
@@ -54462,7 +55592,7 @@
                     }
                 }
                 var baseConstructorIndexInfo = void 0;
-                setStructuredTypeMembers(type, members, ts.emptyArray, ts.emptyArray, undefined, undefined);
+                setStructuredTypeMembers(type, members, ts.emptyArray, ts.emptyArray, ts.emptyArray);
                 if (symbol.flags & 32 /* Class */) {
                     var classType = getDeclaredTypeOfClassOrInterface(symbol);
                     var baseConstructorType = getBaseConstructorTypeOfClass(classType);
@@ -54471,22 +55601,23 @@
                         addInheritedMembers(members, getPropertiesOfType(baseConstructorType));
                     }
                     else if (baseConstructorType === anyType) {
-                        baseConstructorIndexInfo = createIndexInfo(anyType, /*isReadonly*/ false);
+                        baseConstructorIndexInfo = createIndexInfo(stringType, anyType, /*isReadonly*/ false);
                     }
                 }
                 var indexSymbol = getIndexSymbolFromSymbolTable(members);
                 if (indexSymbol) {
-                    stringIndexInfo = getIndexInfoOfIndexSymbol(indexSymbol, 0 /* String */);
-                    numberIndexInfo = getIndexInfoOfIndexSymbol(indexSymbol, 1 /* Number */);
+                    indexInfos = getIndexInfosOfIndexSymbol(indexSymbol);
                 }
                 else {
-                    stringIndexInfo = baseConstructorIndexInfo;
+                    if (baseConstructorIndexInfo) {
+                        indexInfos = ts.append(indexInfos, baseConstructorIndexInfo);
+                    }
                     if (symbol.flags & 384 /* Enum */ && (getDeclaredTypeOfSymbol(symbol).flags & 32 /* Enum */ ||
                         ts.some(type.properties, function (prop) { return !!(getTypeOfSymbol(prop).flags & 296 /* NumberLike */); }))) {
-                        numberIndexInfo = enumNumberIndexInfo;
+                        indexInfos = ts.append(indexInfos, enumNumberIndexInfo);
                     }
                 }
-                setStructuredTypeMembers(type, members, ts.emptyArray, ts.emptyArray, stringIndexInfo, numberIndexInfo);
+                setStructuredTypeMembers(type, members, ts.emptyArray, ts.emptyArray, indexInfos || ts.emptyArray);
                 // We resolve the members before computing the signatures because a signature may use
                 // typeof with a qualified name expression that circularly references the type we are
                 // in the process of resolving (see issue #6072). The temporarily empty signature list
@@ -54514,20 +55645,14 @@
             // map type.indexType to 0
             // map type.objectType to `[TReplacement]`
             // thus making the indexed access `[TReplacement][0]` or `TReplacement`
-            return instantiateType(instantiable, createTypeMapper([type.indexType, type.objectType], [getLiteralType(0), createTupleType([replacement])]));
-        }
-        function getIndexInfoOfIndexSymbol(indexSymbol, indexKind) {
-            var declaration = getIndexDeclarationOfIndexSymbol(indexSymbol, indexKind);
-            if (!declaration)
-                return undefined;
-            return createIndexInfo(declaration.type ? getTypeFromTypeNode(declaration.type) : anyType, ts.hasEffectiveModifier(declaration, 64 /* Readonly */), declaration);
+            return instantiateType(instantiable, createTypeMapper([type.indexType, type.objectType], [getNumberLiteralType(0), createTupleType([replacement])]));
         }
         function resolveReverseMappedTypeMembers(type) {
-            var indexInfo = getIndexInfoOfType(type.source, 0 /* String */);
+            var indexInfo = getIndexInfoOfType(type.source, stringType);
             var modifiers = getMappedTypeModifiers(type.mappedType);
             var readonlyMask = modifiers & 1 /* IncludeReadonly */ ? false : true;
             var optionalMask = modifiers & 4 /* IncludeOptional */ ? 0 : 16777216 /* Optional */;
-            var stringIndexInfo = indexInfo && createIndexInfo(inferReverseMappedType(indexInfo.type, type.mappedType, type.constraintType), readonlyMask && indexInfo.isReadonly);
+            var indexInfos = indexInfo ? [createIndexInfo(stringType, inferReverseMappedType(indexInfo.type, type.mappedType, type.constraintType), readonlyMask && indexInfo.isReadonly)] : ts.emptyArray;
             var members = ts.createSymbolTable();
             for (var _i = 0, _a = getPropertiesOfType(type.source); _i < _a.length; _i++) {
                 var prop = _a[_i];
@@ -54553,7 +55678,7 @@
                 }
                 members.set(prop.escapedName, inferredProp);
             }
-            setStructuredTypeMembers(type, members, ts.emptyArray, ts.emptyArray, stringIndexInfo, undefined);
+            setStructuredTypeMembers(type, members, ts.emptyArray, ts.emptyArray, indexInfos);
         }
         // Return the lower bound of the key type in a mapped type. Intuitively, the lower
         // bound includes those keys that are known to always be present, for example because
@@ -54587,10 +55712,9 @@
         /** Resolve the members of a mapped type { [P in K]: T } */
         function resolveMappedTypeMembers(type) {
             var members = ts.createSymbolTable();
-            var stringIndexInfo;
-            var numberIndexInfo;
+            var indexInfos;
             // Resolve upfront such that recursive references see an empty object type.
-            setStructuredTypeMembers(type, emptySymbols, ts.emptyArray, ts.emptyArray, undefined, undefined);
+            setStructuredTypeMembers(type, emptySymbols, ts.emptyArray, ts.emptyArray, ts.emptyArray);
             // In { [P in K]: T }, we refer to P as the type parameter type, K as the constraint type,
             // and T as the template type.
             var typeParameter = getTypeParameterFromMappedType(type);
@@ -54606,17 +55730,22 @@
                     var prop = _a[_i];
                     addMemberForKeyType(getLiteralTypeFromProperty(prop, include));
                 }
-                if (modifiersType.flags & 1 /* Any */ || getIndexInfoOfType(modifiersType, 0 /* String */)) {
+                if (modifiersType.flags & 1 /* Any */) {
                     addMemberForKeyType(stringType);
                 }
-                if (!keyofStringsOnly && getIndexInfoOfType(modifiersType, 1 /* Number */)) {
-                    addMemberForKeyType(numberType);
+                else {
+                    for (var _b = 0, _c = getIndexInfosOfType(modifiersType); _b < _c.length; _b++) {
+                        var info = _c[_b];
+                        if (!keyofStringsOnly || info.keyType.flags & (4 /* String */ | 134217728 /* TemplateLiteral */)) {
+                            addMemberForKeyType(info.keyType);
+                        }
+                    }
                 }
             }
             else {
                 forEachType(getLowerBoundOfKeyType(constraintType), addMemberForKeyType);
             }
-            setStructuredTypeMembers(type, members, ts.emptyArray, ts.emptyArray, stringIndexInfo, numberIndexInfo);
+            setStructuredTypeMembers(type, members, ts.emptyArray, ts.emptyArray, indexInfos || ts.emptyArray);
             function addMemberForKeyType(keyType) {
                 var propNameType = nameType ? instantiateType(nameType, appendTypeMapping(type.mapper, typeParameter, keyType)) : keyType;
                 forEachType(propNameType, function (t) { return addMemberForKeyTypeWorker(keyType, t); });
@@ -54648,19 +55777,20 @@
                         prop.keyType = keyType;
                         if (modifiersProp) {
                             prop.syntheticOrigin = modifiersProp;
-                            prop.declarations = modifiersProp.declarations;
+                            // If the mapped type has an `as XXX` clause, the property name likely won't match the declaration name and
+                            // multiple properties may map to the same name. Thus, we attach no declarations to the symbol.
+                            prop.declarations = nameType ? undefined : modifiersProp.declarations;
                         }
                         members.set(propName, prop);
                     }
                 }
-                else if (propNameType.flags & (1 /* Any */ | 4 /* String */ | 8 /* Number */ | 32 /* Enum */)) {
+                else if (isValidIndexKeyType(propNameType) || propNameType.flags & (1 /* Any */ | 32 /* Enum */)) {
+                    var indexKeyType = propNameType.flags & (1 /* Any */ | 4 /* String */) ? stringType :
+                        propNameType.flags & (8 /* Number */ | 32 /* Enum */) ? numberType :
+                            propNameType;
                     var propType = instantiateType(templateType, appendTypeMapping(type.mapper, typeParameter, keyType));
-                    if (propNameType.flags & (1 /* Any */ | 4 /* String */)) {
-                        stringIndexInfo = createIndexInfo(stringIndexInfo ? getUnionType([stringIndexInfo.type, propType]) : propType, !!(templateModifiers & 1 /* IncludeReadonly */));
-                    }
-                    else {
-                        numberIndexInfo = createIndexInfo(numberIndexInfo ? getUnionType([numberIndexInfo.type, propType]) : propType, !!(templateModifiers & 1 /* IncludeReadonly */));
-                    }
+                    var indexInfo = createIndexInfo(indexKeyType, propType, !!(templateModifiers & 1 /* IncludeReadonly */));
+                    indexInfos = appendIndexInfo(indexInfos, indexInfo, /*union*/ true);
                 }
             }
         }
@@ -54677,8 +55807,8 @@
                 // When creating an optional property in strictNullChecks mode, if 'undefined' isn't assignable to the
                 // type, we include 'undefined' in the type. Similarly, when creating a non-optional property in strictNullChecks
                 // mode, if the underlying property is optional we remove 'undefined' from the type.
-                var type = strictNullChecks && symbol.flags & 16777216 /* Optional */ && !maybeTypeOfKind(propType, 32768 /* Undefined */ | 16384 /* Void */) ? getOptionalType(propType) :
-                    symbol.checkFlags & 524288 /* StripOptional */ ? getTypeWithFacts(propType, 524288 /* NEUndefined */) :
+                var type = strictNullChecks && symbol.flags & 16777216 /* Optional */ && !maybeTypeOfKind(propType, 32768 /* Undefined */ | 16384 /* Void */) ? getOptionalType(propType, /*isProperty*/ true) :
+                    symbol.checkFlags & 524288 /* StripOptional */ ? removeMissingOrUndefinedType(propType) :
                         propType;
                 if (!popTypeResolution()) {
                     error(currentNode, ts.Diagnostics.Type_of_property_0_circularly_references_itself_in_mapped_type_1, symbolToString(symbol), typeToString(mappedType));
@@ -54704,7 +55834,7 @@
         function getTemplateTypeFromMappedType(type) {
             return type.templateType ||
                 (type.templateType = type.declaration.type ?
-                    instantiateType(addOptionality(getTypeFromTypeNode(type.declaration.type), !!(getMappedTypeModifiers(type) & 4 /* IncludeOptional */)), type.mapper) :
+                    instantiateType(addOptionality(getTypeFromTypeNode(type.declaration.type), /*isProperty*/ true, !!(getMappedTypeModifiers(type) & 4 /* IncludeOptional */)), type.mapper) :
                     errorType);
         }
         function getConstraintDeclarationForMappedType(type) {
@@ -54712,8 +55842,8 @@
         }
         function isMappedTypeWithKeyofConstraintDeclaration(type) {
             var constraintDeclaration = getConstraintDeclarationForMappedType(type); // TODO: GH#18217
-            return constraintDeclaration.kind === 189 /* TypeOperator */ &&
-                constraintDeclaration.operator === 138 /* KeyOfKeyword */;
+            return constraintDeclaration.kind === 191 /* TypeOperator */ &&
+                constraintDeclaration.operator === 139 /* KeyOfKeyword */;
         }
         function getModifiersTypeFromMappedType(type) {
             if (!type.modifiersType) {
@@ -54818,7 +55948,7 @@
                     }
                     // The properties of a union type are those that are present in all constituent types, so
                     // we only need to check the properties of the first type without index signature
-                    if (type.flags & 1048576 /* Union */ && !getIndexInfoOfType(current, 0 /* String */) && !getIndexInfoOfType(current, 1 /* Number */)) {
+                    if (type.flags & 1048576 /* Union */ && getIndexInfosOfType(current).length === 0) {
                         break;
                     }
                 }
@@ -54847,8 +55977,8 @@
                 return getAugmentedPropertiesOfType(unionType);
             }
             var props = ts.createSymbolTable();
-            for (var _i = 0, types_5 = types; _i < types_5.length; _i++) {
-                var memberType = types_5[_i];
+            for (var _i = 0, types_4 = types; _i < types_4.length; _i++) {
+                var memberType = types_4[_i];
                 for (var _a = 0, _b = getAugmentedPropertiesOfType(memberType); _a < _b.length; _a++) {
                     var escapedName = _b[_a].escapedName;
                     if (!props.has(escapedName)) {
@@ -54880,14 +56010,14 @@
         function getConstraintFromIndexedAccess(type) {
             var indexConstraint = getSimplifiedTypeOrConstraint(type.indexType);
             if (indexConstraint && indexConstraint !== type.indexType) {
-                var indexedAccess = getIndexedAccessTypeOrUndefined(type.objectType, indexConstraint, type.noUncheckedIndexedAccessCandidate);
+                var indexedAccess = getIndexedAccessTypeOrUndefined(type.objectType, indexConstraint, type.accessFlags);
                 if (indexedAccess) {
                     return indexedAccess;
                 }
             }
             var objectConstraint = getSimplifiedTypeOrConstraint(type.objectType);
             if (objectConstraint && objectConstraint !== type.objectType) {
-                return getIndexedAccessTypeOrUndefined(objectConstraint, type.indexType, type.noUncheckedIndexedAccessCandidate);
+                return getIndexedAccessTypeOrUndefined(objectConstraint, type.indexType, type.accessFlags);
             }
             return undefined;
         }
@@ -54936,8 +56066,8 @@
         function getEffectiveConstraintOfIntersection(types, targetIsUnion) {
             var constraints;
             var hasDisjointDomainType = false;
-            for (var _i = 0, types_6 = types; _i < types_6.length; _i++) {
-                var t = types_6[_i];
+            for (var _i = 0, types_5 = types; _i < types_5.length; _i++) {
+                var t = types_5[_i];
                 if (t.flags & 465829888 /* Instantiable */) {
                     // We keep following constraints as long as we have an instantiable type that is known
                     // not to be circular or infinite (hence we stop on index access types).
@@ -54962,8 +56092,8 @@
                 if (hasDisjointDomainType) {
                     // We add any types belong to one of the disjoint domains because they might cause the final
                     // intersection operation to reduce the union constraints.
-                    for (var _a = 0, types_7 = types; _a < types_7.length; _a++) {
-                        var t = types_7[_a];
+                    for (var _a = 0, types_6 = types; _a < types_6.length; _a++) {
+                        var t = types_6[_a];
                         if (t.flags & 469892092 /* DisjointDomains */) {
                             constraints = ts.append(constraints, t);
                         }
@@ -55049,8 +56179,8 @@
                     var types = t.types;
                     var baseTypes = [];
                     var different = false;
-                    for (var _i = 0, types_8 = types; _i < types_8.length; _i++) {
-                        var type_3 = types_8[_i];
+                    for (var _i = 0, types_7 = types; _i < types_7.length; _i++) {
+                        var type_3 = types_7[_i];
                         var baseType = getBaseConstraint(type_3);
                         if (baseType) {
                             if (baseType !== type_3) {
@@ -55084,7 +56214,7 @@
                 if (t.flags & 8388608 /* IndexedAccess */) {
                     var baseObjectType = getBaseConstraint(t.objectType);
                     var baseIndexType = getBaseConstraint(t.indexType);
-                    var baseIndexedAccess = baseObjectType && baseIndexType && getIndexedAccessTypeOrUndefined(baseObjectType, baseIndexType, t.noUncheckedIndexedAccessCandidate);
+                    var baseIndexedAccess = baseObjectType && baseIndexType && getIndexedAccessTypeOrUndefined(baseObjectType, baseIndexType, t.accessFlags);
                     return baseIndexedAccess && getBaseConstraint(baseIndexedAccess);
                 }
                 if (t.flags & 16777216 /* Conditional */) {
@@ -55241,7 +56371,7 @@
                         }
                     }
                     else if (isUnion) {
-                        var indexInfo = !isLateBoundName(name) && (isNumericLiteralName(name) && getIndexInfoOfType(type, 1 /* Number */) || getIndexInfoOfType(type, 0 /* String */));
+                        var indexInfo = !isLateBoundName(name) && getApplicableIndexInfoForName(type, name);
                         if (indexInfo) {
                             checkFlags |= 32 /* WritePartial */ | (indexInfo.isReadonly ? 8 /* Readonly */ : 0);
                             indexTypes = ts.append(indexTypes, isTupleType(type) ? getRestTypeOfTupleType(type) || undefinedType : indexInfo.type);
@@ -55361,15 +56491,15 @@
          * no constituent property has type 'never', but the intersection of the constituent property types is 'never'.
          */
         function getReducedType(type) {
-            if (type.flags & 1048576 /* Union */ && type.objectFlags & 67108864 /* ContainsIntersections */) {
+            if (type.flags & 1048576 /* Union */ && type.objectFlags & 33554432 /* ContainsIntersections */) {
                 return type.resolvedReducedType || (type.resolvedReducedType = getReducedUnionType(type));
             }
             else if (type.flags & 2097152 /* Intersection */) {
-                if (!(type.objectFlags & 67108864 /* IsNeverIntersectionComputed */)) {
-                    type.objectFlags |= 67108864 /* IsNeverIntersectionComputed */ |
-                        (ts.some(getPropertiesOfUnionOrIntersectionType(type), isNeverReducedProperty) ? 134217728 /* IsNeverIntersection */ : 0);
+                if (!(type.objectFlags & 33554432 /* IsNeverIntersectionComputed */)) {
+                    type.objectFlags |= 33554432 /* IsNeverIntersectionComputed */ |
+                        (ts.some(getPropertiesOfUnionOrIntersectionType(type), isNeverReducedProperty) ? 67108864 /* IsNeverIntersection */ : 0);
                 }
-                return type.objectFlags & 134217728 /* IsNeverIntersection */ ? neverType : type;
+                return type.objectFlags & 67108864 /* IsNeverIntersection */ ? neverType : type;
             }
             return type;
         }
@@ -55399,7 +56529,7 @@
             return !prop.valueDeclaration && !!(ts.getCheckFlags(prop) & 1024 /* ContainsPrivate */);
         }
         function elaborateNeverIntersection(errorInfo, type) {
-            if (type.flags & 2097152 /* Intersection */ && ts.getObjectFlags(type) & 134217728 /* IsNeverIntersection */) {
+            if (type.flags & 2097152 /* Intersection */ && ts.getObjectFlags(type) & 67108864 /* IsNeverIntersection */) {
                 var neverProp = ts.find(getPropertiesOfUnionOrIntersectionType(type), isDiscriminantWithNeverType);
                 if (neverProp) {
                     return ts.chainDiagnosticMessages(errorInfo, ts.Diagnostics.The_intersection_0_was_reduced_to_never_because_property_1_has_conflicting_types_in_some_constituents, typeToString(type, /*enclosingDeclaration*/ undefined, 536870912 /* NoTypeReduction */), symbolToString(neverProp));
@@ -55460,44 +56590,72 @@
         function getSignaturesOfType(type, kind) {
             return getSignaturesOfStructuredType(getReducedApparentType(type), kind);
         }
-        function getIndexInfoOfStructuredType(type, kind) {
+        function findIndexInfo(indexInfos, keyType) {
+            return ts.find(indexInfos, function (info) { return info.keyType === keyType; });
+        }
+        function findApplicableIndexInfo(indexInfos, keyType) {
+            // Index signatures for type 'string' are considered only when no other index signatures apply.
+            var stringIndexInfo;
+            var applicableInfo;
+            var applicableInfos;
+            for (var _i = 0, indexInfos_1 = indexInfos; _i < indexInfos_1.length; _i++) {
+                var info = indexInfos_1[_i];
+                if (info.keyType === stringType) {
+                    stringIndexInfo = info;
+                }
+                else if (isApplicableIndexType(keyType, info.keyType)) {
+                    if (!applicableInfo) {
+                        applicableInfo = info;
+                    }
+                    else {
+                        (applicableInfos || (applicableInfos = [applicableInfo])).push(info);
+                    }
+                }
+            }
+            // When more than one index signature is applicable we create a synthetic IndexInfo. Instead of computing
+            // the intersected key type, we just use unknownType for the key type as nothing actually depends on the
+            // keyType property of the returned IndexInfo.
+            return applicableInfos ? createIndexInfo(unknownType, getIntersectionType(ts.map(applicableInfos, function (info) { return info.type; })), ts.reduceLeft(applicableInfos, function (isReadonly, info) { return isReadonly && info.isReadonly; }, /*initial*/ true)) :
+                applicableInfo ? applicableInfo :
+                    stringIndexInfo && isApplicableIndexType(keyType, stringType) ? stringIndexInfo :
+                        undefined;
+        }
+        function isApplicableIndexType(source, target) {
+            // A 'string' index signature applies to types assignable to 'string' or 'number', and a 'number' index
+            // signature applies to types assignable to 'number' and numeric string literal types.
+            return isTypeAssignableTo(source, target) ||
+                target === stringType && isTypeAssignableTo(source, numberType) ||
+                target === numberType && !!(source.flags & 128 /* StringLiteral */) && isNumericLiteralName(source.value);
+        }
+        function getIndexInfosOfStructuredType(type) {
             if (type.flags & 3670016 /* StructuredType */) {
                 var resolved = resolveStructuredTypeMembers(type);
-                return kind === 0 /* String */ ? resolved.stringIndexInfo : resolved.numberIndexInfo;
+                return resolved.indexInfos;
             }
+            return ts.emptyArray;
         }
-        function getIndexTypeOfStructuredType(type, kind) {
-            var info = getIndexInfoOfStructuredType(type, kind);
-            return info && info.type;
+        function getIndexInfosOfType(type) {
+            return getIndexInfosOfStructuredType(getReducedApparentType(type));
         }
         // Return the indexing info of the given kind in the given type. Creates synthetic union index types when necessary and
         // maps primitive types and type parameters are to their apparent types.
-        function getIndexInfoOfType(type, kind) {
-            return getIndexInfoOfStructuredType(getReducedApparentType(type), kind);
+        function getIndexInfoOfType(type, keyType) {
+            return findIndexInfo(getIndexInfosOfType(type), keyType);
         }
         // Return the index type of the given kind in the given type. Creates synthetic union index types when necessary and
         // maps primitive types and type parameters are to their apparent types.
-        function getIndexTypeOfType(type, kind) {
-            return getIndexTypeOfStructuredType(getReducedApparentType(type), kind);
+        function getIndexTypeOfType(type, keyType) {
+            var _a;
+            return (_a = getIndexInfoOfType(type, keyType)) === null || _a === void 0 ? void 0 : _a.type;
         }
-        function getImplicitIndexTypeOfType(type, kind) {
-            if (isObjectTypeWithInferableIndex(type)) {
-                var propTypes = [];
-                for (var _i = 0, _a = getPropertiesOfType(type); _i < _a.length; _i++) {
-                    var prop = _a[_i];
-                    if (kind === 0 /* String */ || isNumericLiteralName(prop.escapedName)) {
-                        var propType = getTypeOfSymbol(prop);
-                        propTypes.push(prop.flags & 16777216 /* Optional */ ? getTypeWithFacts(propType, 524288 /* NEUndefined */) : propType);
-                    }
-                }
-                if (kind === 0 /* String */) {
-                    ts.append(propTypes, getIndexTypeOfType(type, 1 /* Number */));
-                }
-                if (propTypes.length) {
-                    return getUnionType(propTypes);
-                }
-            }
-            return undefined;
+        function getApplicableIndexInfos(type, keyType) {
+            return getIndexInfosOfType(type).filter(function (info) { return isApplicableIndexType(keyType, info.keyType); });
+        }
+        function getApplicableIndexInfo(type, keyType) {
+            return findApplicableIndexInfo(getIndexInfosOfType(type), keyType);
+        }
+        function getApplicableIndexInfoForName(type, name) {
+            return getApplicableIndexInfo(type, isLateBoundName(name) ? esSymbolType : getStringLiteralType(ts.unescapeLeadingUnderscores(name)));
         }
         // Return list of type parameters with duplicates removed (duplicate identifier errors are generated in the actual
         // type checking functions).
@@ -55521,10 +56679,10 @@
         function isJSDocOptionalParameter(node) {
             return ts.isInJSFile(node) && (
             // node.type should only be a JSDocOptionalType when node is a parameter of a JSDocFunctionType
-            node.type && node.type.kind === 308 /* JSDocOptionalType */
+            node.type && node.type.kind === 311 /* JSDocOptionalType */
                 || ts.getJSDocParameterTags(node).some(function (_a) {
                     var isBracketed = _a.isBracketed, typeExpression = _a.typeExpression;
-                    return isBracketed || !!typeExpression && typeExpression.type.kind === 308 /* JSDocOptionalType */;
+                    return isBracketed || !!typeExpression && typeExpression.type.kind === 311 /* JSDocOptionalType */;
                 }));
         }
         function tryFindAmbientModule(moduleName, withAugmentations) {
@@ -55564,7 +56722,7 @@
                 return false;
             }
             var isBracketed = node.isBracketed, typeExpression = node.typeExpression;
-            return isBracketed || !!typeExpression && typeExpression.type.kind === 308 /* JSDocOptionalType */;
+            return isBracketed || !!typeExpression && typeExpression.type.kind === 311 /* JSDocOptionalType */;
         }
         function createTypePredicate(kind, parameterName, parameterIndex, type) {
             return { kind: kind, parameterName: parameterName, parameterIndex: parameterIndex, type: type };
@@ -55646,12 +56804,12 @@
                     else {
                         parameters.push(paramSymbol);
                     }
-                    if (type && type.kind === 192 /* LiteralType */) {
+                    if (type && type.kind === 194 /* LiteralType */) {
                         flags |= 2 /* HasLiteralTypes */;
                     }
                     // Record a new minimum argument count if this is not an optional parameter
                     var isOptionalParameter_1 = isOptionalJSDocPropertyLikeTag(param) ||
-                        param.initializer || param.questionToken || param.dotDotDotToken ||
+                        param.initializer || param.questionToken || ts.isRestParameter(param) ||
                         iife && parameters.length > iife.arguments.length && !type ||
                         isJSDocOptionalParameter(param);
                     if (!isOptionalParameter_1) {
@@ -55659,16 +56817,16 @@
                     }
                 }
                 // If only one accessor includes a this-type annotation, the other behaves as if it had the same type annotation
-                if ((declaration.kind === 168 /* GetAccessor */ || declaration.kind === 169 /* SetAccessor */) &&
+                if ((declaration.kind === 170 /* GetAccessor */ || declaration.kind === 171 /* SetAccessor */) &&
                     hasBindableName(declaration) &&
                     (!hasThisParameter || !thisParameter)) {
-                    var otherKind = declaration.kind === 168 /* GetAccessor */ ? 169 /* SetAccessor */ : 168 /* GetAccessor */;
+                    var otherKind = declaration.kind === 170 /* GetAccessor */ ? 171 /* SetAccessor */ : 170 /* GetAccessor */;
                     var other = ts.getDeclarationOfKind(getSymbolOfNode(declaration), otherKind);
                     if (other) {
                         thisParameter = getAnnotatedAccessorThisParameter(other);
                     }
                 }
-                var classType = declaration.kind === 167 /* Constructor */ ?
+                var classType = declaration.kind === 169 /* Constructor */ ?
                     getDeclaredTypeOfClassOrInterface(getMergedSymbol(declaration.parent.symbol))
                     : undefined;
                 var typeParameters = classType ? classType.localTypeParameters : getTypeParametersFromDeclaration(declaration);
@@ -55734,16 +56892,16 @@
                 if (!node)
                     return false;
                 switch (node.kind) {
-                    case 78 /* Identifier */:
+                    case 79 /* Identifier */:
                         return node.escapedText === argumentsSymbol.escapedName && getResolvedSymbol(node) === argumentsSymbol;
-                    case 164 /* PropertyDeclaration */:
-                    case 166 /* MethodDeclaration */:
-                    case 168 /* GetAccessor */:
-                    case 169 /* SetAccessor */:
-                        return node.name.kind === 159 /* ComputedPropertyName */
+                    case 165 /* PropertyDeclaration */:
+                    case 167 /* MethodDeclaration */:
+                    case 170 /* GetAccessor */:
+                    case 171 /* SetAccessor */:
+                        return node.name.kind === 160 /* ComputedPropertyName */
                             && traverse(node.name);
-                    case 202 /* PropertyAccessExpression */:
-                    case 203 /* ElementAccessExpression */:
+                    case 204 /* PropertyAccessExpression */:
+                    case 205 /* ElementAccessExpression */:
                         return traverse(node.expression);
                     default:
                         return !ts.nodeStartsNewLexicalEnvironment(node) && !ts.isPartOfTypeNode(node) && !!ts.forEachChild(node, traverse);
@@ -55815,7 +56973,7 @@
         function createTypePredicateFromTypePredicateNode(node, signature) {
             var parameterName = node.parameterName;
             var type = node.type && getTypeFromTypeNode(node.type);
-            return parameterName.kind === 188 /* ThisType */ ?
+            return parameterName.kind === 190 /* ThisType */ ?
                 createTypePredicate(node.assertsModifier ? 2 /* AssertsThis */ : 0 /* This */, /*parameterName*/ undefined, /*parameterIndex*/ undefined, type) :
                 createTypePredicate(node.assertsModifier ? 3 /* AssertsIdentifier */ : 1 /* Identifier */, parameterName.escapedText, ts.findIndex(signature.parameters, function (p) { return p.escapedName === parameterName.escapedText; }), type);
         }
@@ -55861,7 +57019,7 @@
             return signature.resolvedReturnType;
         }
         function getReturnTypeFromAnnotation(declaration) {
-            if (declaration.kind === 167 /* Constructor */) {
+            if (declaration.kind === 169 /* Constructor */) {
                 return getDeclaredTypeOfClassOrInterface(getMergedSymbol(declaration.parent.symbol));
             }
             if (ts.isJSDocConstructSignature(declaration)) {
@@ -55871,12 +57029,12 @@
             if (typeNode) {
                 return getTypeFromTypeNode(typeNode);
             }
-            if (declaration.kind === 168 /* GetAccessor */ && hasBindableName(declaration)) {
+            if (declaration.kind === 170 /* GetAccessor */ && hasBindableName(declaration)) {
                 var jsDocType = ts.isInJSFile(declaration) && getTypeForDeclarationFromJSDocComment(declaration);
                 if (jsDocType) {
                     return jsDocType;
                 }
-                var setter = ts.getDeclarationOfKind(getSymbolOfNode(declaration), 169 /* SetAccessor */);
+                var setter = ts.getDeclarationOfKind(getSymbolOfNode(declaration), 171 /* SetAccessor */);
                 var setterType = getAnnotatedAccessorType(setter);
                 if (setterType) {
                     return setterType;
@@ -55894,7 +57052,7 @@
             if (signatureHasRestParameter(signature)) {
                 var sigRestType = getTypeOfSymbol(signature.parameters[signature.parameters.length - 1]);
                 var restType = isTupleType(sigRestType) ? getRestTypeOfTupleType(sigRestType) : sigRestType;
-                return restType && getIndexTypeOfType(restType, 1 /* Number */);
+                return restType && getIndexTypeOfType(restType, numberType);
             }
             return undefined;
         }
@@ -55977,12 +57135,13 @@
             // will result in a different declaration kind.
             if (!signature.isolatedSignatureType) {
                 var kind = signature.declaration ? signature.declaration.kind : 0 /* Unknown */;
-                var isConstructor = kind === 167 /* Constructor */ || kind === 171 /* ConstructSignature */ || kind === 176 /* ConstructorType */;
+                var isConstructor = kind === 169 /* Constructor */ || kind === 173 /* ConstructSignature */ || kind === 178 /* ConstructorType */;
                 var type = createObjectType(16 /* Anonymous */);
                 type.members = emptySymbols;
                 type.properties = ts.emptyArray;
                 type.callSignatures = !isConstructor ? [signature] : ts.emptyArray;
                 type.constructSignatures = isConstructor ? [signature] : ts.emptyArray;
+                type.indexInfos = ts.emptyArray;
                 signature.isolatedSignatureType = type;
             }
             return signature.isolatedSignatureType;
@@ -55993,39 +57152,39 @@
         function getIndexSymbolFromSymbolTable(symbolTable) {
             return symbolTable.get("__index" /* Index */);
         }
-        function getIndexDeclarationOfSymbol(symbol, kind) {
-            var indexSymbol = symbol && getIndexSymbol(symbol);
-            return indexSymbol && getIndexDeclarationOfIndexSymbol(indexSymbol, kind);
+        function createIndexInfo(keyType, type, isReadonly, declaration) {
+            return { keyType: keyType, type: type, isReadonly: isReadonly, declaration: declaration };
         }
-        function getIndexDeclarationOfSymbolTable(symbolTable, kind) {
-            var indexSymbol = symbolTable && getIndexSymbolFromSymbolTable(symbolTable);
-            return indexSymbol && getIndexDeclarationOfIndexSymbol(indexSymbol, kind);
+        function getIndexInfosOfSymbol(symbol) {
+            var indexSymbol = getIndexSymbol(symbol);
+            return indexSymbol ? getIndexInfosOfIndexSymbol(indexSymbol) : ts.emptyArray;
         }
-        function getIndexDeclarationOfIndexSymbol(indexSymbol, kind) {
-            var syntaxKind = kind === 1 /* Number */ ? 144 /* NumberKeyword */ : 147 /* StringKeyword */;
-            if (indexSymbol === null || indexSymbol === void 0 ? void 0 : indexSymbol.declarations) {
-                for (var _i = 0, _a = indexSymbol.declarations; _i < _a.length; _i++) {
-                    var decl = _a[_i];
-                    var node = ts.cast(decl, ts.isIndexSignatureDeclaration);
-                    if (node.parameters.length === 1) {
-                        var parameter = node.parameters[0];
-                        if (parameter.type && parameter.type.kind === syntaxKind) {
-                            return node;
+        function getIndexInfosOfIndexSymbol(indexSymbol) {
+            if (indexSymbol.declarations) {
+                var indexInfos_2 = [];
+                var _loop_14 = function (declaration) {
+                    if (declaration.parameters.length === 1) {
+                        var parameter = declaration.parameters[0];
+                        if (parameter.type) {
+                            forEachType(getTypeFromTypeNode(parameter.type), function (keyType) {
+                                if (isValidIndexKeyType(keyType) && !findIndexInfo(indexInfos_2, keyType)) {
+                                    indexInfos_2.push(createIndexInfo(keyType, declaration.type ? getTypeFromTypeNode(declaration.type) : anyType, ts.hasEffectiveModifier(declaration, 64 /* Readonly */), declaration));
+                                }
+                            });
                         }
                     }
+                };
+                for (var _i = 0, _a = indexSymbol.declarations; _i < _a.length; _i++) {
+                    var declaration = _a[_i];
+                    _loop_14(declaration);
                 }
+                return indexInfos_2;
             }
-            return undefined;
+            return ts.emptyArray;
         }
-        function createIndexInfo(type, isReadonly, declaration) {
-            return { type: type, isReadonly: isReadonly, declaration: declaration };
-        }
-        function getIndexInfoOfSymbol(symbol, kind) {
-            var declaration = getIndexDeclarationOfSymbol(symbol, kind);
-            if (declaration) {
-                return createIndexInfo(declaration.type ? getTypeFromTypeNode(declaration.type) : anyType, ts.hasEffectiveModifier(declaration, 64 /* Readonly */), declaration);
-            }
-            return undefined;
+        function isValidIndexKeyType(type) {
+            return !!(type.flags & (4 /* String */ | 8 /* Number */ | 4096 /* ESSymbol */)) || isPatternLiteralType(type) ||
+                !!(type.flags & 2097152 /* Intersection */) && !isGenericIndexType(type) && !isGenericObjectType(type) && ts.some(type.types, isValidIndexKeyType);
         }
         function getConstraintDeclaration(type) {
             return ts.mapDefined(ts.filter(type.symbol && type.symbol.declarations, ts.isTypeParameterDeclaration), ts.getEffectiveConstraintOfTypeParameter)[0];
@@ -56036,13 +57195,13 @@
             if ((_a = typeParameter.symbol) === null || _a === void 0 ? void 0 : _a.declarations) {
                 for (var _i = 0, _b = typeParameter.symbol.declarations; _i < _b.length; _i++) {
                     var declaration = _b[_i];
-                    if (declaration.parent.kind === 186 /* InferType */) {
+                    if (declaration.parent.kind === 188 /* InferType */) {
                         // When an 'infer T' declaration is immediately contained in a type reference node
                         // (such as 'Foo<infer T>'), T's constraint is inferred from the constraint of the
                         // corresponding type parameter in 'Foo'. When multiple 'infer T' declarations are
                         // present, we form an intersection of the inferred constraint types.
                         var _c = ts.walkUpParenthesizedTypesAndGetParentAndChild(declaration.parent.parent), _d = _c[0], childTypeParameter = _d === void 0 ? declaration.parent : _d, grandParent = _c[1];
-                        if (grandParent.kind === 174 /* TypeReference */) {
+                        if (grandParent.kind === 176 /* TypeReference */) {
                             var typeReference = grandParent;
                             var typeParameters = getTypeParametersForTypeReference(typeReference);
                             if (typeParameters) {
@@ -56067,27 +57226,27 @@
                         }
                         // When an 'infer T' declaration is immediately contained in a rest parameter declaration, a rest type
                         // or a named rest tuple element, we infer an 'unknown[]' constraint.
-                        else if (grandParent.kind === 161 /* Parameter */ && grandParent.dotDotDotToken ||
-                            grandParent.kind === 182 /* RestType */ ||
-                            grandParent.kind === 193 /* NamedTupleMember */ && grandParent.dotDotDotToken) {
+                        else if (grandParent.kind === 162 /* Parameter */ && grandParent.dotDotDotToken ||
+                            grandParent.kind === 184 /* RestType */ ||
+                            grandParent.kind === 195 /* NamedTupleMember */ && grandParent.dotDotDotToken) {
                             inferences = ts.append(inferences, createArrayType(unknownType));
                         }
                         // When an 'infer T' declaration is immediately contained in a string template type, we infer a 'string'
                         // constraint.
-                        else if (grandParent.kind === 195 /* TemplateLiteralTypeSpan */) {
+                        else if (grandParent.kind === 197 /* TemplateLiteralTypeSpan */) {
                             inferences = ts.append(inferences, stringType);
                         }
                         // When an 'infer T' declaration is in the constraint position of a mapped type, we infer a 'keyof any'
                         // constraint.
-                        else if (grandParent.kind === 160 /* TypeParameter */ && grandParent.parent.kind === 191 /* MappedType */) {
+                        else if (grandParent.kind === 161 /* TypeParameter */ && grandParent.parent.kind === 193 /* MappedType */) {
                             inferences = ts.append(inferences, keyofConstraintType);
                         }
                         // When an 'infer T' declaration is the template of a mapped type, and that mapped type is the extends
                         // clause of a conditional whose check type is also a mapped type, give it a constraint equal to the template
                         // of the check type's mapped type
-                        else if (grandParent.kind === 191 /* MappedType */ && grandParent.type &&
-                            ts.skipParentheses(grandParent.type) === declaration.parent && grandParent.parent.kind === 185 /* ConditionalType */ &&
-                            grandParent.parent.extendsType === grandParent && grandParent.parent.checkType.kind === 191 /* MappedType */ &&
+                        else if (grandParent.kind === 193 /* MappedType */ && grandParent.type &&
+                            ts.skipParentheses(grandParent.type) === declaration.parent && grandParent.parent.kind === 187 /* ConditionalType */ &&
+                            grandParent.parent.extendsType === grandParent && grandParent.parent.checkType.kind === 193 /* MappedType */ &&
                             grandParent.parent.checkType.type) {
                             var checkMappedType_1 = grandParent.parent.checkType;
                             var nodeType = getTypeFromTypeNode(checkMappedType_1.type);
@@ -56115,7 +57274,7 @@
                         if (type.flags & 1 /* Any */ && type !== errorType) { // Allow errorType to propegate to keep downstream errors suppressed
                             // use keyofConstraintType as the base constraint for mapped type key constraints (unknown isn;t assignable to that, but `any` was),
                             // use unknown otherwise
-                            type = constraintDeclaration.parent.parent.kind === 191 /* MappedType */ ? keyofConstraintType : unknownType;
+                            type = constraintDeclaration.parent.parent.kind === 193 /* MappedType */ ? keyofConstraintType : unknownType;
                         }
                         typeParameter.constraint = type;
                     }
@@ -56124,7 +57283,7 @@
             return typeParameter.constraint === noConstraintType ? undefined : typeParameter.constraint;
         }
         function getParentSymbolOfTypeParameter(typeParameter) {
-            var tp = ts.getDeclarationOfKind(typeParameter.symbol, 160 /* TypeParameter */);
+            var tp = ts.getDeclarationOfKind(typeParameter.symbol, 161 /* TypeParameter */);
             var host = ts.isJSDocTemplateTag(tp.parent) ? ts.getHostSignatureFromJSDoc(tp.parent) : tp.parent;
             return host && getSymbolOfNode(host);
         }
@@ -56160,8 +57319,8 @@
         // that care about the presence of such types at arbitrary depth in a containing type.
         function getPropagatingFlagsOfTypes(types, excludeKinds) {
             var result = 0;
-            for (var _i = 0, types_9 = types; _i < types_9.length; _i++) {
-                var type = types_9[_i];
+            for (var _i = 0, types_8 = types; _i < types_8.length; _i++) {
+                var type = types_8[_i];
                 if (!(type.flags & excludeKinds)) {
                     result |= ts.getObjectFlags(type);
                 }
@@ -56210,8 +57369,8 @@
                 }
                 var node = type.node;
                 var typeArguments = !node ? ts.emptyArray :
-                    node.kind === 174 /* TypeReference */ ? ts.concatenate(type.target.outerTypeParameters, getEffectiveTypeArguments(node, type.target.localTypeParameters)) :
-                        node.kind === 179 /* ArrayType */ ? [getTypeFromTypeNode(node.elementType)] :
+                    node.kind === 176 /* TypeReference */ ? ts.concatenate(type.target.outerTypeParameters, getEffectiveTypeArguments(node, type.target.localTypeParameters)) :
+                        node.kind === 181 /* ArrayType */ ? [getTypeFromTypeNode(node.elementType)] :
                             ts.map(node.elements, getTypeFromTypeNode);
                 if (popTypeResolution()) {
                     type.resolvedTypeArguments = type.mapper ? instantiateTypes(typeArguments, type.mapper) : typeArguments;
@@ -56253,7 +57412,7 @@
                         return errorType;
                     }
                 }
-                if (node.kind === 174 /* TypeReference */ && isDeferredTypeReferenceNode(node, ts.length(node.typeArguments) !== typeParameters.length)) {
+                if (node.kind === 176 /* TypeReference */ && isDeferredTypeReferenceNode(node, ts.length(node.typeArguments) !== typeParameters.length)) {
                     return createDeferredTypeReference(type, node, /*mapper*/ undefined);
                 }
                 // In a type reference, the outer type parameters of the referenced class or interface are automatically
@@ -56312,9 +57471,9 @@
         }
         function getTypeReferenceName(node) {
             switch (node.kind) {
-                case 174 /* TypeReference */:
+                case 176 /* TypeReference */:
                     return node.typeName;
-                case 224 /* ExpressionWithTypeArguments */:
+                case 226 /* ExpressionWithTypeArguments */:
                     // We only support expressions that are simple qualified names. For other
                     // expressions this produces undefined.
                     var expr = node.expression;
@@ -56370,7 +57529,7 @@
                 var valueType = getTypeOfSymbol(symbol);
                 var typeType = valueType;
                 if (symbol.valueDeclaration) {
-                    var isImportTypeWithQualifier = node.kind === 196 /* ImportType */ && node.qualifier;
+                    var isImportTypeWithQualifier = node.kind === 198 /* ImportType */ && node.qualifier;
                     // valueType might not have a symbol, eg, {import('./b').STRING_LITERAL}
                     if (valueType.symbol && valueType.symbol !== symbol && isImportTypeWithQualifier) {
                         typeType = getTypeReferenceType(node, valueType.symbol);
@@ -56396,7 +57555,7 @@
             return result;
         }
         function isUnaryTupleTypeNode(node) {
-            return node.kind === 180 /* TupleType */ && node.elements.length === 1;
+            return node.kind === 182 /* TupleType */ && node.elements.length === 1;
         }
         function getImpliedConstraint(type, checkNode, extendsNode) {
             return isUnaryTupleTypeNode(checkNode) && isUnaryTupleTypeNode(extendsNode) ? getImpliedConstraint(type, checkNode.elements[0], extendsNode.elements[0]) :
@@ -56406,16 +57565,16 @@
         function getConditionalFlowTypeOfType(type, node) {
             var constraints;
             var covariant = true;
-            while (node && !ts.isStatement(node) && node.kind !== 312 /* JSDocComment */) {
+            while (node && !ts.isStatement(node) && node.kind !== 315 /* JSDocComment */) {
                 var parent = node.parent;
                 // only consider variance flipped by parameter locations - `keyof` types would usually be considered variance inverting, but
                 // often get used in indexed accesses where they behave sortof invariantly, but our checking is lax
-                if (parent.kind === 161 /* Parameter */) {
+                if (parent.kind === 162 /* Parameter */) {
                     covariant = !covariant;
                 }
                 // Always substitute on type parameters, regardless of variance, since even
                 // in contravariant positions, they may rely on substituted constraints to be valid
-                if ((covariant || type.flags & 8650752 /* TypeVariable */) && parent.kind === 185 /* ConditionalType */ && node === parent.trueType) {
+                if ((covariant || type.flags & 8650752 /* TypeVariable */) && parent.kind === 187 /* ConditionalType */ && node === parent.trueType) {
                     var constraint = getImpliedConstraint(type, parent.checkType, parent.extendsType);
                     if (constraint) {
                         constraints = ts.append(constraints, constraint);
@@ -56426,7 +57585,7 @@
             return constraints ? getSubstitutionType(type, getIntersectionType(ts.append(constraints, type))) : type;
         }
         function isJSDocTypeReference(node) {
-            return !!(node.flags & 4194304 /* JSDoc */) && (node.kind === 174 /* TypeReference */ || node.kind === 196 /* ImportType */);
+            return !!(node.flags & 4194304 /* JSDoc */) && (node.kind === 176 /* TypeReference */ || node.kind === 198 /* ImportType */);
         }
         function checkNoTypeArguments(node, symbol) {
             if (node.typeArguments) {
@@ -56470,8 +57629,8 @@
                             if (ts.isJSDocIndexSignature(node)) {
                                 var indexed = getTypeFromTypeNode(typeArgs[0]);
                                 var target = getTypeFromTypeNode(typeArgs[1]);
-                                var index = createIndexInfo(target, /*isReadonly*/ false);
-                                return createAnonymousType(undefined, emptySymbols, ts.emptyArray, ts.emptyArray, indexed === stringType ? index : undefined, indexed === numberType ? index : undefined);
+                                var indexInfo = indexed === stringType || indexed === numberType ? [createIndexInfo(indexed, target, /*isReadonly*/ false)] : ts.emptyArray;
+                                return createAnonymousType(undefined, emptySymbols, ts.emptyArray, ts.emptyArray, indexInfo);
                             }
                             return anyType;
                         }
@@ -56529,7 +57688,8 @@
                 // The expression is processed as an identifier expression (section 4.3)
                 // or property access expression(section 4.10),
                 // the widened type(section 3.9) of which becomes the result.
-                links.resolvedType = getRegularTypeOfLiteralType(getWidenedType(checkExpression(node.exprName)));
+                var type = ts.isThisIdentifier(node.exprName) ? checkThisExpression(node.exprName) : checkExpression(node.exprName);
+                links.resolvedType = getRegularTypeOfLiteralType(getWidenedType(type));
             }
             return links.resolvedType;
         }
@@ -56540,9 +57700,9 @@
                     for (var _i = 0, declarations_3 = declarations; _i < declarations_3.length; _i++) {
                         var declaration = declarations_3[_i];
                         switch (declaration.kind) {
-                            case 253 /* ClassDeclaration */:
-                            case 254 /* InterfaceDeclaration */:
-                            case 256 /* EnumDeclaration */:
+                            case 255 /* ClassDeclaration */:
+                            case 256 /* InterfaceDeclaration */:
+                            case 258 /* EnumDeclaration */:
                                 return declaration;
                         }
                     }
@@ -56585,6 +57745,20 @@
         function getGlobalImportMetaType() {
             return deferredGlobalImportMetaType || (deferredGlobalImportMetaType = getGlobalType("ImportMeta", /*arity*/ 0, /*reportErrors*/ true)) || emptyObjectType;
         }
+        function getGlobalImportMetaExpressionType() {
+            if (!deferredGlobalImportMetaExpressionType) {
+                // Create a synthetic type `ImportMetaExpression { meta: MetaProperty }`
+                var symbol = createSymbol(0 /* None */, "ImportMetaExpression");
+                var importMetaType = getGlobalImportMetaType();
+                var metaPropertySymbol = createSymbol(4 /* Property */, "meta", 8 /* Readonly */);
+                metaPropertySymbol.parent = symbol;
+                metaPropertySymbol.type = importMetaType;
+                var members = ts.createSymbolTable([metaPropertySymbol]);
+                symbol.members = members;
+                deferredGlobalImportMetaExpressionType = createAnonymousType(symbol, members, ts.emptyArray, ts.emptyArray, ts.emptyArray);
+            }
+            return deferredGlobalImportMetaExpressionType;
+        }
         function getGlobalESSymbolConstructorSymbol(reportErrors) {
             return deferredGlobalESSymbolConstructorSymbol || (deferredGlobalESSymbolConstructorSymbol = getGlobalValueSymbol("Symbol", reportErrors));
         }
@@ -56667,11 +57841,11 @@
         }
         function getTupleElementFlags(node) {
             switch (node.kind) {
-                case 181 /* OptionalType */:
+                case 183 /* OptionalType */:
                     return 2 /* Optional */;
-                case 182 /* RestType */:
+                case 184 /* RestType */:
                     return getRestTypeElementFlags(node);
-                case 193 /* NamedTupleMember */:
+                case 195 /* NamedTupleMember */:
                     return node.questionToken ? 2 /* Optional */ :
                         node.dotDotDotToken ? getRestTypeElementFlags(node) :
                             1 /* Required */;
@@ -56689,14 +57863,14 @@
                 return readonly ? globalReadonlyArrayType : globalArrayType;
             }
             var elementFlags = ts.map(node.elements, getTupleElementFlags);
-            var missingName = ts.some(node.elements, function (e) { return e.kind !== 193 /* NamedTupleMember */; });
+            var missingName = ts.some(node.elements, function (e) { return e.kind !== 195 /* NamedTupleMember */; });
             return getTupleTargetType(elementFlags, readonly, /*associatedNames*/ missingName ? undefined : node.elements);
         }
         // Return true if the given type reference node is directly aliased or if it needs to be deferred
         // because it is possibly contained in a circular chain of eagerly resolved types.
         function isDeferredTypeReferenceNode(node, hasDefaultTypeArguments) {
-            return !!getAliasSymbolForTypeNode(node) || isResolvedByTypeAlias(node) && (node.kind === 179 /* ArrayType */ ? mayResolveTypeAlias(node.elementType) :
-                node.kind === 180 /* TupleType */ ? ts.some(node.elements, mayResolveTypeAlias) :
+            return !!getAliasSymbolForTypeNode(node) || isResolvedByTypeAlias(node) && (node.kind === 181 /* ArrayType */ ? mayResolveTypeAlias(node.elementType) :
+                node.kind === 182 /* TupleType */ ? ts.some(node.elements, mayResolveTypeAlias) :
                     hasDefaultTypeArguments || ts.some(node.typeArguments, mayResolveTypeAlias));
         }
         // Return true when the given node is transitively contained in type constructs that eagerly
@@ -56705,18 +57879,18 @@
         function isResolvedByTypeAlias(node) {
             var parent = node.parent;
             switch (parent.kind) {
-                case 187 /* ParenthesizedType */:
-                case 193 /* NamedTupleMember */:
-                case 174 /* TypeReference */:
-                case 183 /* UnionType */:
-                case 184 /* IntersectionType */:
-                case 190 /* IndexedAccessType */:
-                case 185 /* ConditionalType */:
-                case 189 /* TypeOperator */:
-                case 179 /* ArrayType */:
-                case 180 /* TupleType */:
+                case 189 /* ParenthesizedType */:
+                case 195 /* NamedTupleMember */:
+                case 176 /* TypeReference */:
+                case 185 /* UnionType */:
+                case 186 /* IntersectionType */:
+                case 192 /* IndexedAccessType */:
+                case 187 /* ConditionalType */:
+                case 191 /* TypeOperator */:
+                case 181 /* ArrayType */:
+                case 182 /* TupleType */:
                     return isResolvedByTypeAlias(parent);
-                case 255 /* TypeAliasDeclaration */:
+                case 257 /* TypeAliasDeclaration */:
                     return true;
             }
             return false;
@@ -56725,28 +57899,28 @@
         // of a type alias.
         function mayResolveTypeAlias(node) {
             switch (node.kind) {
-                case 174 /* TypeReference */:
+                case 176 /* TypeReference */:
                     return isJSDocTypeReference(node) || !!(resolveTypeReferenceName(node.typeName, 788968 /* Type */).flags & 524288 /* TypeAlias */);
-                case 177 /* TypeQuery */:
+                case 179 /* TypeQuery */:
                     return true;
-                case 189 /* TypeOperator */:
-                    return node.operator !== 151 /* UniqueKeyword */ && mayResolveTypeAlias(node.type);
-                case 187 /* ParenthesizedType */:
-                case 181 /* OptionalType */:
-                case 193 /* NamedTupleMember */:
-                case 308 /* JSDocOptionalType */:
-                case 306 /* JSDocNullableType */:
-                case 307 /* JSDocNonNullableType */:
-                case 302 /* JSDocTypeExpression */:
+                case 191 /* TypeOperator */:
+                    return node.operator !== 152 /* UniqueKeyword */ && mayResolveTypeAlias(node.type);
+                case 189 /* ParenthesizedType */:
+                case 183 /* OptionalType */:
+                case 195 /* NamedTupleMember */:
+                case 311 /* JSDocOptionalType */:
+                case 309 /* JSDocNullableType */:
+                case 310 /* JSDocNonNullableType */:
+                case 304 /* JSDocTypeExpression */:
                     return mayResolveTypeAlias(node.type);
-                case 182 /* RestType */:
-                    return node.type.kind !== 179 /* ArrayType */ || mayResolveTypeAlias(node.type.elementType);
-                case 183 /* UnionType */:
-                case 184 /* IntersectionType */:
+                case 184 /* RestType */:
+                    return node.type.kind !== 181 /* ArrayType */ || mayResolveTypeAlias(node.type.elementType);
+                case 185 /* UnionType */:
+                case 186 /* IntersectionType */:
                     return ts.some(node.types, mayResolveTypeAlias);
-                case 190 /* IndexedAccessType */:
+                case 192 /* IndexedAccessType */:
                     return mayResolveTypeAlias(node.objectType) || mayResolveTypeAlias(node.indexType);
-                case 185 /* ConditionalType */:
+                case 187 /* ConditionalType */:
                     return mayResolveTypeAlias(node.checkType) || mayResolveTypeAlias(node.extendsType) ||
                         mayResolveTypeAlias(node.trueType) || mayResolveTypeAlias(node.falseType);
             }
@@ -56759,19 +57933,19 @@
                 if (target === emptyGenericType) {
                     links.resolvedType = emptyObjectType;
                 }
-                else if (!(node.kind === 180 /* TupleType */ && ts.some(node.elements, function (e) { return !!(getTupleElementFlags(e) & 8 /* Variadic */); })) && isDeferredTypeReferenceNode(node)) {
-                    links.resolvedType = node.kind === 180 /* TupleType */ && node.elements.length === 0 ? target :
+                else if (!(node.kind === 182 /* TupleType */ && ts.some(node.elements, function (e) { return !!(getTupleElementFlags(e) & 8 /* Variadic */); })) && isDeferredTypeReferenceNode(node)) {
+                    links.resolvedType = node.kind === 182 /* TupleType */ && node.elements.length === 0 ? target :
                         createDeferredTypeReference(target, node, /*mapper*/ undefined);
                 }
                 else {
-                    var elementTypes = node.kind === 179 /* ArrayType */ ? [getTypeFromTypeNode(node.elementType)] : ts.map(node.elements, getTypeFromTypeNode);
+                    var elementTypes = node.kind === 181 /* ArrayType */ ? [getTypeFromTypeNode(node.elementType)] : ts.map(node.elements, getTypeFromTypeNode);
                     links.resolvedType = createNormalizedTypeReference(target, elementTypes);
                 }
             }
             return links.resolvedType;
         }
         function isReadonlyTypeOperator(node) {
-            return ts.isTypeOperatorNode(node) && node.operator === 142 /* ReadonlyKeyword */;
+            return ts.isTypeOperatorNode(node) && node.operator === 143 /* ReadonlyKeyword */;
         }
         function createTupleType(elementTypes, elementFlags, readonly, namedMemberDeclarations) {
             if (readonly === void 0) { readonly = false; }
@@ -56827,10 +58001,10 @@
                 lengthSymbol.type = numberType;
             }
             else {
-                var literalTypes_1 = [];
+                var literalTypes = [];
                 for (var i = minLength; i <= arity; i++)
-                    literalTypes_1.push(getLiteralType(i));
-                lengthSymbol.type = getUnionType(literalTypes_1);
+                    literalTypes.push(getNumberLiteralType(i));
+                lengthSymbol.type = getUnionType(literalTypes);
             }
             properties.push(lengthSymbol);
             var type = createObjectType(8 /* Tuple */ | 4 /* Reference */);
@@ -56847,8 +58021,7 @@
             type.declaredProperties = properties;
             type.declaredCallSignatures = ts.emptyArray;
             type.declaredConstructSignatures = ts.emptyArray;
-            type.declaredStringIndexInfo = undefined;
-            type.declaredNumberIndexInfo = undefined;
+            type.declaredIndexInfos = ts.emptyArray;
             type.elementFlags = elementFlags;
             type.minLength = minLength;
             type.fixedLength = fixedLength;
@@ -56887,7 +58060,7 @@
             var lastRequiredIndex = -1;
             var firstRestIndex = -1;
             var lastOptionalOrRestIndex = -1;
-            var _loop_13 = function (i) {
+            var _loop_15 = function (i) {
                 var type = elementTypes[i];
                 var flags = target.elementFlags[i];
                 if (flags & 8 /* Variadic */) {
@@ -56908,7 +58081,7 @@
                     }
                     else {
                         // Treat everything else as an array type and create a rest element.
-                        addElement(isArrayLikeType(type) && getIndexTypeOfType(type, 1 /* Number */) || errorType, 4 /* Rest */, (_b = target.labeledElementDeclarations) === null || _b === void 0 ? void 0 : _b[i]);
+                        addElement(isArrayLikeType(type) && getIndexTypeOfType(type, numberType) || errorType, 4 /* Rest */, (_b = target.labeledElementDeclarations) === null || _b === void 0 ? void 0 : _b[i]);
                     }
                 }
                 else {
@@ -56917,7 +58090,7 @@
                 }
             };
             for (var i = 0; i < elementTypes.length; i++) {
-                var state_4 = _loop_13(i);
+                var state_4 = _loop_15(i);
                 if (typeof state_4 === "object")
                     return state_4.value;
             }
@@ -56966,7 +58139,7 @@
                 /*readonly*/ false, target.labeledElementDeclarations && target.labeledElementDeclarations.slice(index, endIndex));
         }
         function getKnownKeysOfTupleType(type) {
-            return getUnionType(ts.append(ts.arrayOf(type.target.fixedLength, function (i) { return getLiteralType("" + i); }), getIndexType(type.target.readonly ? globalReadonlyArrayType : globalArrayType)));
+            return getUnionType(ts.append(ts.arrayOf(type.target.fixedLength, function (i) { return getStringLiteralType("" + i); }), getIndexType(type.target.readonly ? globalReadonlyArrayType : globalArrayType)));
         }
         // Return count of starting consecutive tuple elements of the given kind(s)
         function getStartElementCount(type, flags) {
@@ -56978,8 +58151,7 @@
             return type.elementFlags.length - ts.findLastIndex(type.elementFlags, function (f) { return !(f & flags); }) - 1;
         }
         function getTypeFromOptionalTypeNode(node) {
-            var type = getTypeFromTypeNode(node.type);
-            return strictNullChecks ? getOptionalType(type) : type;
+            return addOptionality(getTypeFromTypeNode(node.type), /*isProperty*/ true);
         }
         function getTypeId(type) {
             return type.id;
@@ -57024,8 +58196,8 @@
         // Add the given types to the given type set. Order is preserved, duplicates are removed,
         // and nested types of the given kind are flattened into the set.
         function addTypesToUnion(typeSet, includes, types) {
-            for (var _i = 0, types_10 = types; _i < types_10.length; _i++) {
-                var type = types_10[_i];
+            for (var _i = 0, types_9 = types; _i < types_9.length; _i++) {
+                var type = types_9[_i];
                 includes = addTypeToUnion(typeSet, includes, type);
             }
             return includes;
@@ -57054,8 +58226,8 @@
                         ts.find(getPropertiesOfType(source), function (p) { return isUnitType(getTypeOfSymbol(p)); }) :
                         undefined;
                     var keyPropertyType = keyProperty && getRegularTypeOfLiteralType(getTypeOfSymbol(keyProperty));
-                    for (var _i = 0, types_11 = types; _i < types_11.length; _i++) {
-                        var target = types_11[_i];
+                    for (var _i = 0, types_10 = types; _i < types_10.length; _i++) {
+                        var target = types_10[_i];
                         if (source !== target) {
                             if (count === 100000) {
                                 // After 100000 subtype checks we estimate the remaining amount of work by assuming the
@@ -57095,7 +58267,7 @@
                 i--;
                 var t = types[i];
                 var flags = t.flags;
-                var remove = flags & 128 /* StringLiteral */ && includes & 4 /* String */ ||
+                var remove = flags & (128 /* StringLiteral */ | 134217728 /* TemplateLiteral */ | 268435456 /* StringMapping */) && includes & 4 /* String */ ||
                     flags & 256 /* NumberLiteral */ && includes & 8 /* Number */ ||
                     flags & 2048 /* BigIntLiteral */ && includes & 64 /* BigInt */ ||
                     flags & 8192 /* UniqueESSymbol */ && includes & 4096 /* ESSymbol */ ||
@@ -57110,7 +58282,7 @@
             var templates = ts.filter(types, isPatternLiteralType);
             if (templates.length) {
                 var i = types.length;
-                var _loop_14 = function () {
+                var _loop_16 = function () {
                     i--;
                     var t = types[i];
                     if (t.flags & 128 /* StringLiteral */ && ts.some(templates, function (template) { return isTypeSubtypeOf(t, template); })) {
@@ -57118,7 +58290,7 @@
                     }
                 };
                 while (i > 0) {
-                    _loop_14();
+                    _loop_16();
                 }
             }
         }
@@ -57126,8 +58298,8 @@
             return !!(type.flags & 1048576 /* Union */ && (type.aliasSymbol || type.origin));
         }
         function addNamedUnions(namedUnions, types) {
-            for (var _i = 0, types_12 = types; _i < types_12.length; _i++) {
-                var t = types_12[_i];
+            for (var _i = 0, types_11 = types; _i < types_11.length; _i++) {
+                var t = types_11[_i];
                 if (t.flags & 1048576 /* Union */) {
                     var origin = t.origin;
                     if (t.aliasSymbol || origin && !(origin.flags & 1048576 /* Union */)) {
@@ -57165,7 +58337,13 @@
                 if (includes & 3 /* AnyOrUnknown */) {
                     return includes & 1 /* Any */ ? includes & 8388608 /* IncludesWildcard */ ? wildcardType : anyType : unknownType;
                 }
-                if (includes & (2944 /* Literal */ | 8192 /* UniqueESSymbol */) || includes & 16384 /* Void */ && includes & 32768 /* Undefined */) {
+                if (exactOptionalPropertyTypes && includes & 32768 /* Undefined */) {
+                    var missingIndex = ts.binarySearch(typeSet, missingType, getTypeId, ts.compareValues);
+                    if (missingIndex >= 0 && containsType(typeSet, undefinedType)) {
+                        ts.orderedRemoveItemAt(typeSet, missingIndex);
+                    }
+                }
+                if (includes & (2944 /* Literal */ | 8192 /* UniqueESSymbol */ | 134217728 /* TemplateLiteral */ | 268435456 /* StringMapping */) || includes & 16384 /* Void */ && includes & 32768 /* Undefined */) {
                     removeRedundantLiteralTypes(typeSet, includes, !!(unionReduction & 2 /* Subtype */));
                 }
                 if (includes & 128 /* StringLiteral */ && includes & 134217728 /* TemplateLiteral */) {
@@ -57187,14 +58365,14 @@
                 var namedUnions = [];
                 addNamedUnions(namedUnions, types);
                 var reducedTypes = [];
-                var _loop_15 = function (t) {
+                var _loop_17 = function (t) {
                     if (!ts.some(namedUnions, function (union) { return containsType(union.types, t); })) {
                         reducedTypes.push(t);
                     }
                 };
                 for (var _i = 0, typeSet_1 = typeSet; _i < typeSet_1.length; _i++) {
                     var t = typeSet_1[_i];
-                    _loop_15(t);
+                    _loop_17(t);
                 }
                 if (!aliasSymbol && namedUnions.length === 1 && reducedTypes.length === 0) {
                     return namedUnions[0];
@@ -57211,7 +58389,7 @@
                 }
             }
             var objectFlags = (includes & 468598819 /* NotPrimitiveUnion */ ? 0 : 65536 /* PrimitiveUnion */) |
-                (includes & 2097152 /* Intersection */ ? 67108864 /* ContainsIntersections */ : 0);
+                (includes & 2097152 /* Intersection */ ? 33554432 /* ContainsIntersections */ : 0);
             return getUnionTypeFromSortedList(typeSet, objectFlags, aliasSymbol, aliasTypeArguments, origin);
         }
         function getUnionOrIntersectionTypePredicate(signatures, kind) {
@@ -57249,15 +58427,6 @@
         function typePredicateKindsMatch(a, b) {
             return a.kind === b.kind && a.parameterIndex === b.parameterIndex;
         }
-        function createUnionType(types, aliasSymbol, aliasTypeArguments, origin) {
-            var result = createType(1048576 /* Union */);
-            result.objectFlags = getPropagatingFlagsOfTypes(types, /*excludeKinds*/ 98304 /* Nullable */);
-            result.types = types;
-            result.origin = origin;
-            result.aliasSymbol = aliasSymbol;
-            result.aliasTypeArguments = aliasTypeArguments;
-            return result;
-        }
         // This function assumes the constituent type list is sorted and deduplicated.
         function getUnionTypeFromSortedList(types, objectFlags, aliasSymbol, aliasTypeArguments, origin) {
             if (types.length === 0) {
@@ -57273,8 +58442,16 @@
             var id = typeKey + getAliasId(aliasSymbol, aliasTypeArguments);
             var type = unionTypes.get(id);
             if (!type) {
-                type = createUnionType(types, aliasSymbol, aliasTypeArguments, origin);
-                type.objectFlags |= objectFlags;
+                type = createType(1048576 /* Union */);
+                type.objectFlags = objectFlags | getPropagatingFlagsOfTypes(types, /*excludeKinds*/ 98304 /* Nullable */);
+                type.types = types;
+                type.origin = origin;
+                type.aliasSymbol = aliasSymbol;
+                type.aliasTypeArguments = aliasTypeArguments;
+                if (types.length === 2 && types[0].flags & 512 /* BooleanLiteral */ && types[1].flags & 512 /* BooleanLiteral */) {
+                    type.flags |= 16 /* Boolean */;
+                    type.intrinsicName = "boolean";
+                }
                 unionTypes.set(id, type);
             }
             return type;
@@ -57318,8 +58495,8 @@
         // Add the given types to the given type set. Order is preserved, freshness is removed from literal
         // types, duplicates are removed, and nested types of the given kind are flattened into the set.
         function addTypesToIntersection(typeSet, includes, types) {
-            for (var _i = 0, types_13 = types; _i < types_13.length; _i++) {
-                var type = types_13[_i];
+            for (var _i = 0, types_12 = types; _i < types_12.length; _i++) {
+                var type = types_12[_i];
                 includes = addTypeToIntersection(typeSet, includes, getRegularTypeOfLiteralType(type));
             }
             return includes;
@@ -57468,8 +58645,10 @@
             // a symbol-like type and a type known to be non-symbol-like, or
             // a void-like type and a type known to be non-void-like, or
             // a non-primitive type and a type known to be primitive.
-            if (includes & 131072 /* Never */ ||
-                strictNullChecks && includes & 98304 /* Nullable */ && includes & (524288 /* Object */ | 67108864 /* NonPrimitive */ | 16777216 /* IncludesEmptyObject */) ||
+            if (includes & 131072 /* Never */) {
+                return ts.contains(typeSet, silentNeverType) ? silentNeverType : neverType;
+            }
+            if (strictNullChecks && includes & 98304 /* Nullable */ && includes & (524288 /* Object */ | 67108864 /* NonPrimitive */ | 16777216 /* IncludesEmptyObject */) ||
                 includes & 67108864 /* NonPrimitive */ && includes & (469892092 /* DisjointDomains */ & ~67108864 /* NonPrimitive */) ||
                 includes & 402653316 /* StringLike */ && includes & (469892092 /* DisjointDomains */ & ~402653316 /* StringLike */) ||
                 includes & 296 /* NumberLike */ && includes & (469892092 /* DisjointDomains */ & ~296 /* NumberLike */) ||
@@ -57609,40 +58788,37 @@
                 constraint;
         }
         // Ordinarily we reduce a keyof M, where M is a mapped type { [P in K as N<P>]: X }, to simply N<K>. This however presumes
-        // that N distributes over union types, i.e. that N<A | B | C> is equivalent to N<A> | N<B> | N<C>. That presumption may not
-        // be true when N is a non-distributive conditional type or an instantiable type with a non-distributive conditional type as
-        // a constituent. In those cases, we cannot reduce keyof M and need to preserve it as is.
-        function maybeNonDistributiveNameType(type) {
-            return !!(type && (type.flags & 16777216 /* Conditional */ && (!type.root.isDistributive || maybeNonDistributiveNameType(type.checkType)) ||
-                type.flags & (3145728 /* UnionOrIntersection */ | 134217728 /* TemplateLiteral */) && ts.some(type.types, maybeNonDistributiveNameType) ||
-                type.flags & (4194304 /* Index */ | 268435456 /* StringMapping */) && maybeNonDistributiveNameType(type.type) ||
-                type.flags & 8388608 /* IndexedAccess */ && maybeNonDistributiveNameType(type.indexType) ||
-                type.flags & 33554432 /* Substitution */ && maybeNonDistributiveNameType(type.substitute)));
+        // that N distributes over union types, i.e. that N<A | B | C> is equivalent to N<A> | N<B> | N<C>. Specifically, we only
+        // want to perform the reduction when the name type of a mapped type is distributive with respect to the type variable
+        // introduced by the 'in' clause of the mapped type. Note that non-generic types are considered to be distributive because
+        // they're the same type regardless of what's being distributed over.
+        function hasDistributiveNameType(mappedType) {
+            var typeVariable = getTypeParameterFromMappedType(mappedType);
+            return isDistributive(getNameTypeFromMappedType(mappedType) || typeVariable);
+            function isDistributive(type) {
+                return type.flags & (3 /* AnyOrUnknown */ | 131068 /* Primitive */ | 131072 /* Never */ | 262144 /* TypeParameter */ | 524288 /* Object */ | 67108864 /* NonPrimitive */) ? true :
+                    type.flags & 16777216 /* Conditional */ ? type.root.isDistributive && type.checkType === typeVariable :
+                        type.flags & (3145728 /* UnionOrIntersection */ | 134217728 /* TemplateLiteral */) ? ts.every(type.types, isDistributive) :
+                            type.flags & 8388608 /* IndexedAccess */ ? isDistributive(type.objectType) && isDistributive(type.indexType) :
+                                type.flags & 33554432 /* Substitution */ ? isDistributive(type.substitute) :
+                                    type.flags & 268435456 /* StringMapping */ ? isDistributive(type.type) :
+                                        false;
+            }
         }
         function getLiteralTypeFromPropertyName(name) {
             if (ts.isPrivateIdentifier(name)) {
                 return neverType;
             }
-            return ts.isIdentifier(name) ? getLiteralType(ts.unescapeLeadingUnderscores(name.escapedText)) :
+            return ts.isIdentifier(name) ? getStringLiteralType(ts.unescapeLeadingUnderscores(name.escapedText)) :
                 getRegularTypeOfLiteralType(ts.isComputedPropertyName(name) ? checkComputedPropertyName(name) : checkExpression(name));
         }
-        function getBigIntLiteralType(node) {
-            return getLiteralType({
-                negative: false,
-                base10Value: ts.parsePseudoBigInt(node.text)
-            });
-        }
-        function getLiteralTypeFromProperty(prop, include) {
-            if (!(ts.getDeclarationModifierFlagsFromSymbol(prop) & 24 /* NonPublicAccessibilityModifier */)) {
+        function getLiteralTypeFromProperty(prop, include, includeNonPublic) {
+            if (includeNonPublic || !(ts.getDeclarationModifierFlagsFromSymbol(prop) & 24 /* NonPublicAccessibilityModifier */)) {
                 var type = getSymbolLinks(getLateBoundSymbol(prop)).nameType;
                 if (!type) {
-                    if (prop.escapedName === "default" /* Default */) {
-                        type = getLiteralType("default");
-                    }
-                    else {
-                        var name = prop.valueDeclaration && ts.getNameOfDeclaration(prop.valueDeclaration);
-                        type = name && getLiteralTypeFromPropertyName(name) || (!ts.isKnownSymbol(prop) ? getLiteralType(ts.symbolName(prop)) : undefined);
-                    }
+                    var name = ts.getNameOfDeclaration(prop.valueDeclaration);
+                    type = prop.escapedName === "default" /* Default */ ? getStringLiteralType("default") :
+                        name && getLiteralTypeFromPropertyName(name) || (!ts.isKnownSymbol(prop) ? getStringLiteralType(ts.symbolName(prop)) : undefined);
                 }
                 if (type && type.flags & include) {
                     return type;
@@ -57652,28 +58828,23 @@
         }
         function getLiteralTypeFromProperties(type, include, includeOrigin) {
             var origin = includeOrigin && (ts.getObjectFlags(type) & (3 /* ClassOrInterface */ | 4 /* Reference */) || type.aliasSymbol) ? createOriginIndexType(type) : undefined;
-            return getUnionType(ts.map(getPropertiesOfType(type), function (p) { return getLiteralTypeFromProperty(p, include); }), 1 /* Literal */, 
+            var propertyTypes = ts.map(getPropertiesOfType(type), function (prop) { return getLiteralTypeFromProperty(prop, include); });
+            var indexKeyTypes = ts.map(getIndexInfosOfType(type), function (info) { return info !== enumNumberIndexInfo && info.keyType.flags & include ?
+                info.keyType === stringType && include & 8 /* Number */ ? stringOrNumberType : info.keyType : neverType; });
+            return getUnionType(ts.concatenate(propertyTypes, indexKeyTypes), 1 /* Literal */, 
             /*aliasSymbol*/ undefined, /*aliasTypeArguments*/ undefined, origin);
         }
-        function getNonEnumNumberIndexInfo(type) {
-            var numberIndexInfo = getIndexInfoOfType(type, 1 /* Number */);
-            return numberIndexInfo !== enumNumberIndexInfo ? numberIndexInfo : undefined;
-        }
         function getIndexType(type, stringsOnly, noIndexSignatures) {
             if (stringsOnly === void 0) { stringsOnly = keyofStringsOnly; }
-            var includeOrigin = stringsOnly === keyofStringsOnly && !noIndexSignatures;
             type = getReducedType(type);
             return type.flags & 1048576 /* Union */ ? getIntersectionType(ts.map(type.types, function (t) { return getIndexType(t, stringsOnly, noIndexSignatures); })) :
                 type.flags & 2097152 /* Intersection */ ? getUnionType(ts.map(type.types, function (t) { return getIndexType(t, stringsOnly, noIndexSignatures); })) :
-                    type.flags & 58982400 /* InstantiableNonPrimitive */ || isGenericTupleType(type) || isGenericMappedType(type) && maybeNonDistributiveNameType(getNameTypeFromMappedType(type)) ? getIndexTypeForGenericType(type, stringsOnly) :
+                    type.flags & 58982400 /* InstantiableNonPrimitive */ || isGenericTupleType(type) || isGenericMappedType(type) && !hasDistributiveNameType(type) ? getIndexTypeForGenericType(type, stringsOnly) :
                         ts.getObjectFlags(type) & 32 /* Mapped */ ? getIndexTypeForMappedType(type, noIndexSignatures) :
                             type === wildcardType ? wildcardType :
                                 type.flags & 2 /* Unknown */ ? neverType :
                                     type.flags & (1 /* Any */ | 131072 /* Never */) ? keyofConstraintType :
-                                        stringsOnly ? !noIndexSignatures && getIndexInfoOfType(type, 0 /* String */) ? stringType : getLiteralTypeFromProperties(type, 128 /* StringLiteral */, includeOrigin) :
-                                            !noIndexSignatures && getIndexInfoOfType(type, 0 /* String */) ? getUnionType([stringType, numberType, getLiteralTypeFromProperties(type, 8192 /* UniqueESSymbol */, includeOrigin)]) :
-                                                getNonEnumNumberIndexInfo(type) ? getUnionType([numberType, getLiteralTypeFromProperties(type, 128 /* StringLiteral */ | 8192 /* UniqueESSymbol */, includeOrigin)]) :
-                                                    getLiteralTypeFromProperties(type, 8576 /* StringOrNumberLiteralOrUnique */, includeOrigin);
+                                        getLiteralTypeFromProperties(type, (noIndexSignatures ? 128 /* StringLiteral */ : 402653316 /* StringLike */) | (stringsOnly ? 0 : 296 /* NumberLike */ | 12288 /* ESSymbolLike */), stringsOnly === keyofStringsOnly && !noIndexSignatures);
         }
         function getExtractStringType(type) {
             if (keyofStringsOnly) {
@@ -57690,15 +58861,15 @@
             var links = getNodeLinks(node);
             if (!links.resolvedType) {
                 switch (node.operator) {
-                    case 138 /* KeyOfKeyword */:
+                    case 139 /* KeyOfKeyword */:
                         links.resolvedType = getIndexType(getTypeFromTypeNode(node.type));
                         break;
-                    case 151 /* UniqueKeyword */:
-                        links.resolvedType = node.type.kind === 148 /* SymbolKeyword */
+                    case 152 /* UniqueKeyword */:
+                        links.resolvedType = node.type.kind === 149 /* SymbolKeyword */
                             ? getESSymbolLikeTypeForNode(ts.walkUpParenthesizedTypes(node.parent))
                             : errorType;
                         break;
-                    case 142 /* ReadonlyKeyword */:
+                    case 143 /* ReadonlyKeyword */:
                         links.resolvedType = getTypeFromTypeNode(node.type);
                         break;
                     default:
@@ -57710,7 +58881,7 @@
         function getTypeFromTemplateTypeNode(node) {
             var links = getNodeLinks(node);
             if (!links.resolvedType) {
-                links.resolvedType = getTemplateLiteralType(__spreadArray([node.head.text], ts.map(node.templateSpans, function (span) { return span.literal.text; })), ts.map(node.templateSpans, function (span) { return getTypeFromTypeNode(span.type); }));
+                links.resolvedType = getTemplateLiteralType(__spreadArray([node.head.text], ts.map(node.templateSpans, function (span) { return span.literal.text; }), true), ts.map(node.templateSpans, function (span) { return getTypeFromTypeNode(span.type); }));
             }
             return links.resolvedType;
         }
@@ -57731,7 +58902,7 @@
                 return stringType;
             }
             if (newTypes.length === 0) {
-                return getLiteralType(text);
+                return getStringLiteralType(text);
             }
             newTexts.push(text);
             if (ts.every(newTexts, function (t) { return t === ""; }) && ts.every(newTypes, function (t) { return !!(t.flags & 4 /* String */); })) {
@@ -57784,7 +58955,7 @@
         function getStringMappingType(symbol, type) {
             return type.flags & (1048576 /* Union */ | 131072 /* Never */) ? mapType(type, function (t) { return getStringMappingType(symbol, t); }) :
                 isGenericIndexType(type) ? getStringMappingTypeForGenericType(symbol, type) :
-                    type.flags & 128 /* StringLiteral */ ? getLiteralType(applyStringMapping(symbol, type.value)) :
+                    type.flags & 128 /* StringLiteral */ ? getStringLiteralType(applyStringMapping(symbol, type.value)) :
                         type;
         }
         function applyStringMapping(symbol, str) {
@@ -57810,13 +58981,13 @@
             result.type = type;
             return result;
         }
-        function createIndexedAccessType(objectType, indexType, aliasSymbol, aliasTypeArguments, shouldIncludeUndefined) {
+        function createIndexedAccessType(objectType, indexType, accessFlags, aliasSymbol, aliasTypeArguments) {
             var type = createType(8388608 /* IndexedAccess */);
             type.objectType = objectType;
             type.indexType = indexType;
+            type.accessFlags = accessFlags;
             type.aliasSymbol = aliasSymbol;
             type.aliasTypeArguments = aliasTypeArguments;
-            type.noUncheckedIndexedAccessCandidate = shouldIncludeUndefined;
             return type;
         }
         /**
@@ -57865,14 +59036,17 @@
             }
             return true;
         }
-        function getPropertyTypeForIndexType(originalObjectType, objectType, indexType, fullIndexType, suppressNoImplicitAnyError, accessNode, accessFlags, noUncheckedIndexedAccessCandidate, reportDeprecated) {
+        function getPropertyTypeForIndexType(originalObjectType, objectType, indexType, fullIndexType, accessNode, accessFlags) {
             var _a;
-            var accessExpression = accessNode && accessNode.kind === 203 /* ElementAccessExpression */ ? accessNode : undefined;
+            var accessExpression = accessNode && accessNode.kind === 205 /* ElementAccessExpression */ ? accessNode : undefined;
             var propName = accessNode && ts.isPrivateIdentifier(accessNode) ? undefined : getPropertyNameFromIndex(indexType, accessNode);
             if (propName !== undefined) {
+                if (accessFlags & 256 /* Contextual */) {
+                    return getTypeOfPropertyOfContextualType(objectType, propName) || anyType;
+                }
                 var prop = getPropertyOfType(objectType, propName);
                 if (prop) {
-                    if (reportDeprecated && accessNode && prop.declarations && getDeclarationNodeFlagsFromSymbol(prop) & 134217728 /* Deprecated */ && isUncalledFunctionReference(accessNode, prop)) {
+                    if (accessFlags & 64 /* ReportDeprecated */ && accessNode && prop.declarations && getDeclarationNodeFlagsFromSymbol(prop) & 134217728 /* Deprecated */ && isUncalledFunctionReference(accessNode, prop)) {
                         var deprecatedNode = (_a = accessExpression === null || accessExpression === void 0 ? void 0 : accessExpression.argumentExpression) !== null && _a !== void 0 ? _a : (ts.isIndexedAccessTypeNode(accessNode) ? accessNode.indexType : accessNode);
                         addDeprecatedSuggestion(deprecatedNode, prop.declarations, propName);
                     }
@@ -57882,7 +59056,7 @@
                             error(accessExpression.argumentExpression, ts.Diagnostics.Cannot_assign_to_0_because_it_is_a_read_only_property, symbolToString(prop));
                             return undefined;
                         }
-                        if (accessFlags & 4 /* CacheSymbol */) {
+                        if (accessFlags & 8 /* CacheSymbol */) {
                             getNodeLinks(accessNode).resolvedSymbol = prop;
                         }
                         if (isThisPropertyAccessInConstructor(accessExpression, prop)) {
@@ -57895,7 +59069,7 @@
                         propType;
                 }
                 if (everyType(objectType, isTupleType) && isNumericLiteralName(propName) && +propName >= 0) {
-                    if (accessNode && everyType(objectType, function (t) { return !t.target.hasRestElement; }) && !(accessFlags & 8 /* NoTupleBoundsCheck */)) {
+                    if (accessNode && everyType(objectType, function (t) { return !t.target.hasRestElement; }) && !(accessFlags & 16 /* NoTupleBoundsCheck */)) {
                         var indexNode = getIndexNodeForAccessExpression(accessNode);
                         if (isTupleType(objectType)) {
                             error(indexNode, ts.Diagnostics.Tuple_type_0_of_length_1_has_no_element_at_index_2, typeToString(objectType), getTypeReferenceArity(objectType), ts.unescapeLeadingUnderscores(propName));
@@ -57904,10 +59078,10 @@
                             error(indexNode, ts.Diagnostics.Property_0_does_not_exist_on_type_1, ts.unescapeLeadingUnderscores(propName), typeToString(objectType));
                         }
                     }
-                    errorIfWritingToReadonlyIndex(getIndexInfoOfType(objectType, 1 /* Number */));
+                    errorIfWritingToReadonlyIndex(getIndexInfoOfType(objectType, numberType));
                     return mapType(objectType, function (t) {
                         var restType = getRestTypeOfTupleType(t) || undefinedType;
-                        return noUncheckedIndexedAccessCandidate ? getUnionType([restType, undefinedType]) : restType;
+                        return accessFlags & 1 /* IncludeUndefined */ ? getUnionType([restType, undefinedType]) : restType;
                     });
                 }
             }
@@ -57915,22 +59089,23 @@
                 if (objectType.flags & (1 /* Any */ | 131072 /* Never */)) {
                     return objectType;
                 }
-                var stringIndexInfo = getIndexInfoOfType(objectType, 0 /* String */);
-                var indexInfo = isTypeAssignableToKind(indexType, 296 /* NumberLike */) && getIndexInfoOfType(objectType, 1 /* Number */) || stringIndexInfo;
+                // If no index signature is applicable, we default to the string index signature. In effect, this means the string
+                // index signature applies even when accessing with a symbol-like type.
+                var indexInfo = getApplicableIndexInfo(objectType, indexType) || getIndexInfoOfType(objectType, stringType);
                 if (indexInfo) {
-                    if (accessFlags & 1 /* NoIndexSignatures */ && indexInfo === stringIndexInfo) {
+                    if (accessFlags & 2 /* NoIndexSignatures */ && indexInfo.keyType !== numberType) {
                         if (accessExpression) {
                             error(accessExpression, ts.Diagnostics.Type_0_cannot_be_used_to_index_type_1, typeToString(indexType), typeToString(originalObjectType));
                         }
                         return undefined;
                     }
-                    if (accessNode && !isTypeAssignableToKind(indexType, 4 /* String */ | 8 /* Number */)) {
+                    if (accessNode && indexInfo.keyType === stringType && !isTypeAssignableToKind(indexType, 4 /* String */ | 8 /* Number */)) {
                         var indexNode = getIndexNodeForAccessExpression(accessNode);
                         error(indexNode, ts.Diagnostics.Type_0_cannot_be_used_as_an_index_type, typeToString(indexType));
-                        return noUncheckedIndexedAccessCandidate ? getUnionType([indexInfo.type, undefinedType]) : indexInfo.type;
+                        return accessFlags & 1 /* IncludeUndefined */ ? getUnionType([indexInfo.type, undefinedType]) : indexInfo.type;
                     }
                     errorIfWritingToReadonlyIndex(indexInfo);
-                    return noUncheckedIndexedAccessCandidate ? getUnionType([indexInfo.type, undefinedType]) : indexInfo.type;
+                    return accessFlags & 1 /* IncludeUndefined */ ? getUnionType([indexInfo.type, undefinedType]) : indexInfo.type;
                 }
                 if (indexType.flags & 131072 /* Never */) {
                     return neverType;
@@ -57954,12 +59129,12 @@
                     if (objectType.symbol === globalThisSymbol && propName !== undefined && globalThisSymbol.exports.has(propName) && (globalThisSymbol.exports.get(propName).flags & 418 /* BlockScoped */)) {
                         error(accessExpression, ts.Diagnostics.Property_0_does_not_exist_on_type_1, ts.unescapeLeadingUnderscores(propName), typeToString(objectType));
                     }
-                    else if (noImplicitAny && !compilerOptions.suppressImplicitAnyIndexErrors && !suppressNoImplicitAnyError) {
+                    else if (noImplicitAny && !compilerOptions.suppressImplicitAnyIndexErrors && !(accessFlags & 128 /* SuppressNoImplicitAnyError */)) {
                         if (propName !== undefined && typeHasStaticProperty(propName, objectType)) {
                             var typeName = typeToString(objectType);
                             error(accessExpression, ts.Diagnostics.Property_0_does_not_exist_on_type_1_Did_you_mean_to_access_the_static_member_2_instead, propName, typeName, typeName + "[" + ts.getTextOfNode(accessExpression.argumentExpression) + "]");
                         }
-                        else if (getIndexTypeOfType(objectType, 1 /* Number */)) {
+                        else if (getIndexTypeOfType(objectType, numberType)) {
                             error(accessExpression.argumentExpression, ts.Diagnostics.Element_implicitly_has_an_any_type_because_index_expression_is_not_of_type_number);
                         }
                         else {
@@ -58027,9 +59202,9 @@
             }
         }
         function getIndexNodeForAccessExpression(accessNode) {
-            return accessNode.kind === 203 /* ElementAccessExpression */ ? accessNode.argumentExpression :
-                accessNode.kind === 190 /* IndexedAccessType */ ? accessNode.indexType :
-                    accessNode.kind === 159 /* ComputedPropertyName */ ? accessNode.expression :
+            return accessNode.kind === 205 /* ElementAccessExpression */ ? accessNode.argumentExpression :
+                accessNode.kind === 192 /* IndexedAccessType */ ? accessNode.indexType :
+                    accessNode.kind === 160 /* ComputedPropertyName */ ? accessNode.expression :
                         accessNode;
         }
         function isPatternLiteralPlaceholderType(type) {
@@ -58038,39 +59213,32 @@
         function isPatternLiteralType(type) {
             return !!(type.flags & 134217728 /* TemplateLiteral */) && ts.every(type.types, isPatternLiteralPlaceholderType);
         }
+        function isGenericType(type) {
+            return !!getGenericObjectFlags(type);
+        }
         function isGenericObjectType(type) {
-            if (type.flags & 3145728 /* UnionOrIntersection */) {
-                if (!(type.objectFlags & 4194304 /* IsGenericObjectTypeComputed */)) {
-                    type.objectFlags |= 4194304 /* IsGenericObjectTypeComputed */ |
-                        (ts.some(type.types, isGenericObjectType) ? 8388608 /* IsGenericObjectType */ : 0);
-                }
-                return !!(type.objectFlags & 8388608 /* IsGenericObjectType */);
-            }
-            if (type.flags & 33554432 /* Substitution */) {
-                if (!(type.objectFlags & 4194304 /* IsGenericObjectTypeComputed */)) {
-                    type.objectFlags |= 4194304 /* IsGenericObjectTypeComputed */ |
-                        (isGenericObjectType(type.substitute) || isGenericObjectType(type.baseType) ? 8388608 /* IsGenericObjectType */ : 0);
-                }
-                return !!(type.objectFlags & 8388608 /* IsGenericObjectType */);
-            }
-            return !!(type.flags & 58982400 /* InstantiableNonPrimitive */) || isGenericMappedType(type) || isGenericTupleType(type);
+            return !!(getGenericObjectFlags(type) & 8388608 /* IsGenericObjectType */);
         }
         function isGenericIndexType(type) {
+            return !!(getGenericObjectFlags(type) & 16777216 /* IsGenericIndexType */);
+        }
+        function getGenericObjectFlags(type) {
             if (type.flags & 3145728 /* UnionOrIntersection */) {
-                if (!(type.objectFlags & 16777216 /* IsGenericIndexTypeComputed */)) {
-                    type.objectFlags |= 16777216 /* IsGenericIndexTypeComputed */ |
-                        (ts.some(type.types, isGenericIndexType) ? 33554432 /* IsGenericIndexType */ : 0);
+                if (!(type.objectFlags & 4194304 /* IsGenericTypeComputed */)) {
+                    type.objectFlags |= 4194304 /* IsGenericTypeComputed */ |
+                        ts.reduceLeft(type.types, function (flags, t) { return flags | getGenericObjectFlags(t); }, 0);
                 }
-                return !!(type.objectFlags & 33554432 /* IsGenericIndexType */);
+                return type.objectFlags & 25165824 /* IsGenericType */;
             }
             if (type.flags & 33554432 /* Substitution */) {
-                if (!(type.objectFlags & 16777216 /* IsGenericIndexTypeComputed */)) {
-                    type.objectFlags |= 16777216 /* IsGenericIndexTypeComputed */ |
-                        (isGenericIndexType(type.substitute) || isGenericIndexType(type.baseType) ? 33554432 /* IsGenericIndexType */ : 0);
+                if (!(type.objectFlags & 4194304 /* IsGenericTypeComputed */)) {
+                    type.objectFlags |= 4194304 /* IsGenericTypeComputed */ |
+                        getGenericObjectFlags(type.substitute) | getGenericObjectFlags(type.baseType);
                 }
-                return !!(type.objectFlags & 33554432 /* IsGenericIndexType */);
+                return type.objectFlags & 25165824 /* IsGenericType */;
             }
-            return !!(type.flags & (58982400 /* InstantiableNonPrimitive */ | 4194304 /* Index */ | 134217728 /* TemplateLiteral */ | 268435456 /* StringMapping */)) && !isPatternLiteralType(type);
+            return (type.flags & 58982400 /* InstantiableNonPrimitive */ || isGenericMappedType(type) || isGenericTupleType(type) ? 8388608 /* IsGenericObjectType */ : 0) |
+                (type.flags & (58982400 /* InstantiableNonPrimitive */ | 4194304 /* Index */ | 134217728 /* TemplateLiteral */ | 268435456 /* StringMapping */) && !isPatternLiteralType(type) ? 16777216 /* IsGenericIndexType */ : 0);
         }
         function isThisTypeParameter(type) {
             return !!(type.flags & 262144 /* TypeParameter */ && type.isThisType);
@@ -58186,9 +59354,9 @@
             var templateMapper = combineTypeMappers(objectType.mapper, mapper);
             return instantiateType(getTemplateTypeFromMappedType(objectType), templateMapper);
         }
-        function getIndexedAccessType(objectType, indexType, noUncheckedIndexedAccessCandidate, accessNode, aliasSymbol, aliasTypeArguments, accessFlags) {
+        function getIndexedAccessType(objectType, indexType, accessFlags, accessNode, aliasSymbol, aliasTypeArguments) {
             if (accessFlags === void 0) { accessFlags = 0 /* None */; }
-            return getIndexedAccessTypeOrUndefined(objectType, indexType, noUncheckedIndexedAccessCandidate, accessNode, accessFlags, aliasSymbol, aliasTypeArguments) || (accessNode ? errorType : unknownType);
+            return getIndexedAccessTypeOrUndefined(objectType, indexType, accessFlags, accessNode, aliasSymbol, aliasTypeArguments) || (accessNode ? errorType : unknownType);
         }
         function indexTypeLessThan(indexType, limit) {
             return everyType(indexType, function (t) {
@@ -58202,36 +59370,38 @@
                 return false;
             });
         }
-        function getIndexedAccessTypeOrUndefined(objectType, indexType, noUncheckedIndexedAccessCandidate, accessNode, accessFlags, aliasSymbol, aliasTypeArguments) {
+        function getIndexedAccessTypeOrUndefined(objectType, indexType, accessFlags, accessNode, aliasSymbol, aliasTypeArguments) {
             if (accessFlags === void 0) { accessFlags = 0 /* None */; }
             if (objectType === wildcardType || indexType === wildcardType) {
                 return wildcardType;
             }
-            var shouldIncludeUndefined = noUncheckedIndexedAccessCandidate ||
-                (!!compilerOptions.noUncheckedIndexedAccess &&
-                    (accessFlags & (2 /* Writing */ | 16 /* ExpressionPosition */)) === 16 /* ExpressionPosition */);
             // If the object type has a string index signature and no other members we know that the result will
             // always be the type of that index signature and we can simplify accordingly.
             if (isStringIndexSignatureOnlyType(objectType) && !(indexType.flags & 98304 /* Nullable */) && isTypeAssignableToKind(indexType, 4 /* String */ | 8 /* Number */)) {
                 indexType = stringType;
             }
+            // In noUncheckedIndexedAccess mode, indexed access operations that occur in an expression in a read position and resolve to
+            // an index signature have 'undefined' included in their type.
+            if (compilerOptions.noUncheckedIndexedAccess && accessFlags & 32 /* ExpressionPosition */)
+                accessFlags |= 1 /* IncludeUndefined */;
             // If the index type is generic, or if the object type is generic and doesn't originate in an expression and
             // the operation isn't exclusively indexing the fixed (non-variadic) portion of a tuple type, we are performing
             // a higher-order index access where we cannot meaningfully access the properties of the object type. Note that
             // for a generic T and a non-generic K, we eagerly resolve T[K] if it originates in an expression. This is to
             // preserve backwards compatibility. For example, an element access 'this["foo"]' has always been resolved
             // eagerly using the constraint type of 'this' at the given location.
-            if (isGenericIndexType(indexType) || (accessNode && accessNode.kind !== 190 /* IndexedAccessType */ ?
+            if (isGenericIndexType(indexType) || (accessNode && accessNode.kind !== 192 /* IndexedAccessType */ ?
                 isGenericTupleType(objectType) && !indexTypeLessThan(indexType, objectType.target.fixedLength) :
                 isGenericObjectType(objectType) && !(isTupleType(objectType) && indexTypeLessThan(indexType, objectType.target.fixedLength)))) {
                 if (objectType.flags & 3 /* AnyOrUnknown */) {
                     return objectType;
                 }
                 // Defer the operation by creating an indexed access type.
-                var id = objectType.id + "," + indexType.id + (shouldIncludeUndefined ? "?" : "") + getAliasId(aliasSymbol, aliasTypeArguments);
+                var persistentAccessFlags = accessFlags & 1 /* Persistent */;
+                var id = objectType.id + "," + indexType.id + "," + persistentAccessFlags + getAliasId(aliasSymbol, aliasTypeArguments);
                 var type = indexedAccessTypes.get(id);
                 if (!type) {
-                    indexedAccessTypes.set(id, type = createIndexedAccessType(objectType, indexType, aliasSymbol, aliasTypeArguments, shouldIncludeUndefined));
+                    indexedAccessTypes.set(id, type = createIndexedAccessType(objectType, indexType, persistentAccessFlags, aliasSymbol, aliasTypeArguments));
                 }
                 return type;
             }
@@ -58244,7 +59414,7 @@
                 var wasMissingProp = false;
                 for (var _i = 0, _a = indexType.types; _i < _a.length; _i++) {
                     var t = _a[_i];
-                    var propType = getPropertyTypeForIndexType(objectType, apparentObjectType, t, indexType, wasMissingProp, accessNode, accessFlags, shouldIncludeUndefined);
+                    var propType = getPropertyTypeForIndexType(objectType, apparentObjectType, t, indexType, accessNode, accessFlags | (wasMissingProp ? 128 /* SuppressNoImplicitAnyError */ : 0));
                     if (propType) {
                         propTypes.push(propType);
                     }
@@ -58260,11 +59430,11 @@
                 if (wasMissingProp) {
                     return undefined;
                 }
-                return accessFlags & 2 /* Writing */
+                return accessFlags & 4 /* Writing */
                     ? getIntersectionType(propTypes, aliasSymbol, aliasTypeArguments)
                     : getUnionType(propTypes, 1 /* Literal */, aliasSymbol, aliasTypeArguments);
             }
-            return getPropertyTypeForIndexType(objectType, apparentObjectType, indexType, indexType, /* supressNoImplicitAnyError */ false, accessNode, accessFlags | 4 /* CacheSymbol */, shouldIncludeUndefined, /* reportDeprecated */ true);
+            return getPropertyTypeForIndexType(objectType, apparentObjectType, indexType, indexType, accessNode, accessFlags | 8 /* CacheSymbol */ | 64 /* ReportDeprecated */);
         }
         function getTypeFromIndexedAccessTypeNode(node) {
             var links = getNodeLinks(node);
@@ -58272,7 +59442,7 @@
                 var objectType = getTypeFromTypeNode(node.objectType);
                 var indexType = getTypeFromTypeNode(node.indexType);
                 var potentialAlias = getAliasSymbolForTypeNode(node);
-                var resolved = getIndexedAccessType(objectType, indexType, /*noUncheckedIndexedAccessCandidate*/ undefined, node, potentialAlias, getTypeArgumentsForAliasSymbol(potentialAlias));
+                var resolved = getIndexedAccessType(objectType, indexType, 0 /* None */, node, potentialAlias, getTypeArgumentsForAliasSymbol(potentialAlias));
                 links.resolvedType = resolved.flags & 8388608 /* IndexedAccess */ &&
                     resolved.objectType === objectType &&
                     resolved.indexType === indexType ?
@@ -58305,11 +59475,10 @@
             return type;
         }
         function isTypicalNondistributiveConditional(root) {
-            return !root.isDistributive
-                && root.node.checkType.kind === 180 /* TupleType */
-                && ts.length(root.node.checkType.elements) === 1
-                && root.node.extendsType.kind === 180 /* TupleType */
-                && ts.length(root.node.extendsType.elements) === 1;
+            return !root.isDistributive && isSingletonTupleType(root.node.checkType) && isSingletonTupleType(root.node.extendsType);
+        }
+        function isSingletonTupleType(node) {
+            return ts.isTupleTypeNode(node) && ts.length(node.elements) === 1 && !ts.isOptionalTypeNode(node.elements[0]) && !ts.isRestTypeNode(node.elements[0]);
         }
         /**
          * We syntactually check for common nondistributive conditional shapes and unwrap them into
@@ -58324,11 +59493,11 @@
             var extraTypes;
             // We loop here for an immediately nested conditional type in the false position, effectively treating
             // types of the form 'A extends B ? X : C extends D ? Y : E extends F ? Z : ...' as a single construct for
-            // purposes of resolution. This means such types aren't subject to the instatiation depth limiter.
+            // purposes of resolution. This means such types aren't subject to the instantiation depth limiter.
             while (true) {
                 var isUnwrapped = isTypicalNondistributiveConditional(root);
                 var checkType = instantiateType(unwrapNondistributiveConditionalTuple(root, getActualTypeVariable(root.checkType)), mapper);
-                var checkTypeInstantiable = isGenericObjectType(checkType) || isGenericIndexType(checkType);
+                var checkTypeInstantiable = isGenericType(checkType);
                 var extendsType = instantiateType(unwrapNondistributiveConditionalTuple(root, root.extendsType), mapper);
                 if (checkType === wildcardType || extendsType === wildcardType) {
                     return wildcardType;
@@ -58350,7 +59519,7 @@
                 // Instantiate the extends type including inferences for 'infer T' type parameters
                 var inferredExtendsType = combinedMapper ? instantiateType(unwrapNondistributiveConditionalTuple(root, root.extendsType), combinedMapper) : extendsType;
                 // We attempt to resolve the conditional type only when the check and extends types are non-generic
-                if (!checkTypeInstantiable && !isGenericObjectType(inferredExtendsType) && !isGenericIndexType(inferredExtendsType)) {
+                if (!checkTypeInstantiable && !isGenericType(inferredExtendsType)) {
                     // Return falseType for a definitely false extends check. We check an instantiations of the two
                     // types with type parameters mapped to the wildcard type, the most permissive instantiations
                     // possible (the wildcard type is assignable to and from all types). If those are not related,
@@ -58550,7 +59719,7 @@
         }
         function getAliasSymbolForTypeNode(node) {
             var host = node.parent;
-            while (ts.isParenthesizedTypeNode(host) || ts.isJSDocTypeExpression(host) || ts.isTypeOperatorNode(host) && host.operator === 142 /* ReadonlyKeyword */) {
+            while (ts.isParenthesizedTypeNode(host) || ts.isJSDocTypeExpression(host) || ts.isTypeOperatorNode(host) && host.operator === 143 /* ReadonlyKeyword */) {
                 host = host.parent;
             }
             return ts.isTypeAlias(host) ? getSymbolOfNode(host) : undefined;
@@ -58565,16 +59734,19 @@
             return isEmptyObjectType(type) || !!(type.flags & (65536 /* Null */ | 32768 /* Undefined */ | 528 /* BooleanLike */ | 296 /* NumberLike */ | 2112 /* BigIntLike */ | 402653316 /* StringLike */ | 1056 /* EnumLike */ | 67108864 /* NonPrimitive */ | 4194304 /* Index */));
         }
         function tryMergeUnionOfObjectTypeAndEmptyObject(type, readonly) {
+            if (!(type.flags & 1048576 /* Union */)) {
+                return type;
+            }
             if (ts.every(type.types, isEmptyObjectTypeOrSpreadsIntoEmptyObject)) {
                 return ts.find(type.types, isEmptyObjectType) || emptyObjectType;
             }
             var firstType = ts.find(type.types, function (t) { return !isEmptyObjectTypeOrSpreadsIntoEmptyObject(t); });
             if (!firstType) {
-                return undefined;
+                return type;
             }
-            var secondType = firstType && ts.find(type.types, function (t) { return t !== firstType && !isEmptyObjectTypeOrSpreadsIntoEmptyObject(t); });
+            var secondType = ts.find(type.types, function (t) { return t !== firstType && !isEmptyObjectTypeOrSpreadsIntoEmptyObject(t); });
             if (secondType) {
-                return undefined;
+                return type;
             }
             return getAnonymousPartialType(firstType);
             function getAnonymousPartialType(type) {
@@ -58589,14 +59761,14 @@
                         var isSetonlyAccessor = prop.flags & 65536 /* SetAccessor */ && !(prop.flags & 32768 /* GetAccessor */);
                         var flags = 4 /* Property */ | 16777216 /* Optional */;
                         var result = createSymbol(flags, prop.escapedName, getIsLateCheckFlag(prop) | (readonly ? 8 /* Readonly */ : 0));
-                        result.type = isSetonlyAccessor ? undefinedType : getUnionType([getTypeOfSymbol(prop), undefinedType]);
+                        result.type = isSetonlyAccessor ? undefinedType : addOptionality(getTypeOfSymbol(prop), /*isProperty*/ true);
                         result.declarations = prop.declarations;
                         result.nameType = getSymbolLinks(prop).nameType;
                         result.syntheticOrigin = prop;
                         members.set(prop.escapedName, result);
                     }
                 }
-                var spread = createAnonymousType(type.symbol, members, ts.emptyArray, ts.emptyArray, getIndexInfoOfType(type, 0 /* String */), getIndexInfoOfType(type, 1 /* Number */));
+                var spread = createAnonymousType(type.symbol, members, ts.emptyArray, ts.emptyArray, getIndexInfosOfType(type));
                 spread.objectFlags |= 128 /* ObjectLiteral */ | 262144 /* ContainsObjectOrArrayLiteral */;
                 return spread;
             }
@@ -58619,20 +59791,14 @@
             if (right.flags & 131072 /* Never */) {
                 return left;
             }
+            left = tryMergeUnionOfObjectTypeAndEmptyObject(left, readonly);
             if (left.flags & 1048576 /* Union */) {
-                var merged = tryMergeUnionOfObjectTypeAndEmptyObject(left, readonly);
-                if (merged) {
-                    return getSpreadType(merged, right, symbol, objectFlags, readonly);
-                }
                 return checkCrossProductUnion([left, right])
                     ? mapType(left, function (t) { return getSpreadType(t, right, symbol, objectFlags, readonly); })
                     : errorType;
             }
+            right = tryMergeUnionOfObjectTypeAndEmptyObject(right, readonly);
             if (right.flags & 1048576 /* Union */) {
-                var merged = tryMergeUnionOfObjectTypeAndEmptyObject(right, readonly);
-                if (merged) {
-                    return getSpreadType(left, merged, symbol, objectFlags, readonly);
-                }
                 return checkCrossProductUnion([left, right])
                     ? mapType(right, function (t) { return getSpreadType(left, t, symbol, objectFlags, readonly); })
                     : errorType;
@@ -58658,17 +59824,7 @@
             }
             var members = ts.createSymbolTable();
             var skippedPrivateMembers = new ts.Set();
-            var stringIndexInfo;
-            var numberIndexInfo;
-            if (left === emptyObjectType) {
-                // for the first spread element, left === emptyObjectType, so take the right's string indexer
-                stringIndexInfo = getIndexInfoOfType(right, 0 /* String */);
-                numberIndexInfo = getIndexInfoOfType(right, 1 /* Number */);
-            }
-            else {
-                stringIndexInfo = unionSpreadIndexInfos(getIndexInfoOfType(left, 0 /* String */), getIndexInfoOfType(right, 0 /* String */));
-                numberIndexInfo = unionSpreadIndexInfos(getIndexInfoOfType(left, 1 /* Number */), getIndexInfoOfType(right, 1 /* Number */));
-            }
+            var indexInfos = left === emptyObjectType ? getIndexInfosOfType(right) : getUnionIndexInfos([left, right]);
             for (var _i = 0, _a = getPropertiesOfType(right); _i < _a.length; _i++) {
                 var rightProp = _a[_i];
                 if (ts.getDeclarationModifierFlagsFromSymbol(rightProp) & (8 /* Private */ | 16 /* Protected */)) {
@@ -58690,7 +59846,7 @@
                         var declarations = ts.concatenate(leftProp.declarations, rightProp.declarations);
                         var flags = 4 /* Property */ | (leftProp.flags & 16777216 /* Optional */);
                         var result = createSymbol(flags, leftProp.escapedName);
-                        result.type = getUnionType([getTypeOfSymbol(leftProp), getTypeWithFacts(rightType, 524288 /* NEUndefined */)]);
+                        result.type = getUnionType([getTypeOfSymbol(leftProp), removeMissingOrUndefinedType(rightType)]);
                         result.leftSpread = leftProp;
                         result.rightSpread = rightProp;
                         result.declarations = declarations;
@@ -58702,7 +59858,7 @@
                     members.set(leftProp.escapedName, getSpreadSymbol(leftProp, readonly));
                 }
             }
-            var spread = createAnonymousType(symbol, members, ts.emptyArray, ts.emptyArray, getIndexInfoWithReadonly(stringIndexInfo, readonly), getIndexInfoWithReadonly(numberIndexInfo, readonly));
+            var spread = createAnonymousType(symbol, members, ts.emptyArray, ts.emptyArray, ts.sameMap(indexInfos, function (info) { return getIndexInfoWithReadonly(info, readonly); }));
             spread.objectFlags |= 128 /* ObjectLiteral */ | 262144 /* ContainsObjectOrArrayLiteral */ | 4194304 /* ContainsSpread */ | objectFlags;
             return spread;
         }
@@ -58727,19 +59883,19 @@
             return result;
         }
         function getIndexInfoWithReadonly(info, readonly) {
-            return info && info.isReadonly !== readonly ? createIndexInfo(info.type, readonly, info.declaration) : info;
+            return info.isReadonly !== readonly ? createIndexInfo(info.keyType, info.type, readonly, info.declaration) : info;
         }
-        function createLiteralType(flags, value, symbol) {
+        function createLiteralType(flags, value, symbol, regularType) {
             var type = createType(flags);
             type.symbol = symbol;
             type.value = value;
+            type.regularType = regularType || type;
             return type;
         }
         function getFreshTypeOfLiteralType(type) {
             if (type.flags & 2944 /* Literal */) {
                 if (!type.freshType) {
-                    var freshType = createLiteralType(type.flags, type.value, type.symbol);
-                    freshType.regularType = type;
+                    var freshType = createLiteralType(type.flags, type.value, type.symbol, type);
                     freshType.freshType = freshType;
                     type.freshType = freshType;
                 }
@@ -58755,25 +59911,32 @@
         function isFreshLiteralType(type) {
             return !!(type.flags & 2944 /* Literal */) && type.freshType === type;
         }
-        function getLiteralType(value, enumId, symbol) {
-            // We store all literal types in a single map with keys of the form '#NNN' and '@SSS',
-            // where NNN is the text representation of a numeric literal and SSS are the characters
-            // of a string literal. For literal enum members we use 'EEE#NNN' and 'EEE@SSS', where
-            // EEE is a unique id for the containing enum type.
-            var qualifier = typeof value === "number" ? "#" : typeof value === "string" ? "@" : "n";
-            var key = (enumId ? enumId : "") + qualifier + (typeof value === "object" ? ts.pseudoBigIntToString(value) : value);
-            var type = literalTypes.get(key);
-            if (!type) {
-                var flags = (typeof value === "number" ? 256 /* NumberLiteral */ :
-                    typeof value === "string" ? 128 /* StringLiteral */ : 2048 /* BigIntLiteral */) |
-                    (enumId ? 1024 /* EnumLiteral */ : 0);
-                literalTypes.set(key, type = createLiteralType(flags, value, symbol));
-                type.regularType = type;
-            }
-            return type;
+        function getStringLiteralType(value) {
+            var type;
+            return stringLiteralTypes.get(value) ||
+                (stringLiteralTypes.set(value, type = createLiteralType(128 /* StringLiteral */, value)), type);
+        }
+        function getNumberLiteralType(value) {
+            var type;
+            return numberLiteralTypes.get(value) ||
+                (numberLiteralTypes.set(value, type = createLiteralType(256 /* NumberLiteral */, value)), type);
+        }
+        function getBigIntLiteralType(value) {
+            var type;
+            var key = ts.pseudoBigIntToString(value);
+            return bigIntLiteralTypes.get(key) ||
+                (bigIntLiteralTypes.set(key, type = createLiteralType(2048 /* BigIntLiteral */, value)), type);
+        }
+        function getEnumLiteralType(value, enumId, symbol) {
+            var type;
+            var qualifier = typeof value === "string" ? "@" : "#";
+            var key = enumId + qualifier + value;
+            var flags = 1024 /* EnumLiteral */ | (typeof value === "string" ? 128 /* StringLiteral */ : 256 /* NumberLiteral */);
+            return enumLiteralTypes.get(key) ||
+                (enumLiteralTypes.set(key, type = createLiteralType(flags, value, symbol)), type);
         }
         function getTypeFromLiteralTypeNode(node) {
-            if (node.literal.kind === 103 /* NullKeyword */) {
+            if (node.literal.kind === 104 /* NullKeyword */) {
                 return nullType;
             }
             var links = getNodeLinks(node);
@@ -58799,8 +59962,8 @@
         function getThisType(node) {
             var container = ts.getThisContainer(node, /*includeArrowFunctions*/ false);
             var parent = container && container.parent;
-            if (parent && (ts.isClassLike(parent) || parent.kind === 254 /* InterfaceDeclaration */)) {
-                if (!ts.hasSyntacticModifier(container, 32 /* Static */) &&
+            if (parent && (ts.isClassLike(parent) || parent.kind === 256 /* InterfaceDeclaration */)) {
+                if (!ts.isStatic(container) &&
                     (!ts.isConstructorDeclaration(container) || ts.isNodeDescendantOf(node, container.body))) {
                     return getDeclaredTypeOfClassOrInterface(getSymbolOfNode(parent)).thisType;
                 }
@@ -58834,17 +59997,17 @@
         }
         function getArrayElementTypeNode(node) {
             switch (node.kind) {
-                case 187 /* ParenthesizedType */:
+                case 189 /* ParenthesizedType */:
                     return getArrayElementTypeNode(node.type);
-                case 180 /* TupleType */:
+                case 182 /* TupleType */:
                     if (node.elements.length === 1) {
                         node = node.elements[0];
-                        if (node.kind === 182 /* RestType */ || node.kind === 193 /* NamedTupleMember */ && node.dotDotDotToken) {
+                        if (node.kind === 184 /* RestType */ || node.kind === 195 /* NamedTupleMember */ && node.dotDotDotToken) {
                             return getArrayElementTypeNode(node.type);
                         }
                     }
                     break;
-                case 179 /* ArrayType */:
+                case 181 /* ArrayType */:
                     return node.elementType;
             }
             return undefined;
@@ -58853,107 +60016,106 @@
             var links = getNodeLinks(node);
             return links.resolvedType || (links.resolvedType =
                 node.dotDotDotToken ? getTypeFromRestTypeNode(node) :
-                    node.questionToken && strictNullChecks ? getOptionalType(getTypeFromTypeNode(node.type)) :
-                        getTypeFromTypeNode(node.type));
+                    addOptionality(getTypeFromTypeNode(node.type), /*isProperty*/ true, !!node.questionToken));
         }
         function getTypeFromTypeNode(node) {
             return getConditionalFlowTypeOfType(getTypeFromTypeNodeWorker(node), node);
         }
         function getTypeFromTypeNodeWorker(node) {
             switch (node.kind) {
-                case 128 /* AnyKeyword */:
-                case 304 /* JSDocAllType */:
-                case 305 /* JSDocUnknownType */:
+                case 129 /* AnyKeyword */:
+                case 307 /* JSDocAllType */:
+                case 308 /* JSDocUnknownType */:
                     return anyType;
-                case 152 /* UnknownKeyword */:
+                case 153 /* UnknownKeyword */:
                     return unknownType;
-                case 147 /* StringKeyword */:
+                case 148 /* StringKeyword */:
                     return stringType;
-                case 144 /* NumberKeyword */:
+                case 145 /* NumberKeyword */:
                     return numberType;
-                case 155 /* BigIntKeyword */:
+                case 156 /* BigIntKeyword */:
                     return bigintType;
-                case 131 /* BooleanKeyword */:
+                case 132 /* BooleanKeyword */:
                     return booleanType;
-                case 148 /* SymbolKeyword */:
+                case 149 /* SymbolKeyword */:
                     return esSymbolType;
-                case 113 /* VoidKeyword */:
+                case 114 /* VoidKeyword */:
                     return voidType;
-                case 150 /* UndefinedKeyword */:
+                case 151 /* UndefinedKeyword */:
                     return undefinedType;
-                case 103 /* NullKeyword */:
+                case 104 /* NullKeyword */:
                     // TODO(rbuckton): `NullKeyword` is no longer a `TypeNode`, but we defensively allow it here because of incorrect casts in the Language Service.
                     return nullType;
-                case 141 /* NeverKeyword */:
+                case 142 /* NeverKeyword */:
                     return neverType;
-                case 145 /* ObjectKeyword */:
+                case 146 /* ObjectKeyword */:
                     return node.flags & 131072 /* JavaScriptFile */ && !noImplicitAny ? anyType : nonPrimitiveType;
-                case 136 /* IntrinsicKeyword */:
+                case 137 /* IntrinsicKeyword */:
                     return intrinsicMarkerType;
-                case 188 /* ThisType */:
-                case 107 /* ThisKeyword */:
+                case 190 /* ThisType */:
+                case 108 /* ThisKeyword */:
                     // TODO(rbuckton): `ThisKeyword` is no longer a `TypeNode`, but we defensively allow it here because of incorrect casts in the Language Service and because of `isPartOfTypeNode`.
                     return getTypeFromThisTypeNode(node);
-                case 192 /* LiteralType */:
+                case 194 /* LiteralType */:
                     return getTypeFromLiteralTypeNode(node);
-                case 174 /* TypeReference */:
+                case 176 /* TypeReference */:
                     return getTypeFromTypeReference(node);
-                case 173 /* TypePredicate */:
+                case 175 /* TypePredicate */:
                     return node.assertsModifier ? voidType : booleanType;
-                case 224 /* ExpressionWithTypeArguments */:
+                case 226 /* ExpressionWithTypeArguments */:
                     return getTypeFromTypeReference(node);
-                case 177 /* TypeQuery */:
+                case 179 /* TypeQuery */:
                     return getTypeFromTypeQueryNode(node);
-                case 179 /* ArrayType */:
-                case 180 /* TupleType */:
+                case 181 /* ArrayType */:
+                case 182 /* TupleType */:
                     return getTypeFromArrayOrTupleTypeNode(node);
-                case 181 /* OptionalType */:
+                case 183 /* OptionalType */:
                     return getTypeFromOptionalTypeNode(node);
-                case 183 /* UnionType */:
+                case 185 /* UnionType */:
                     return getTypeFromUnionTypeNode(node);
-                case 184 /* IntersectionType */:
+                case 186 /* IntersectionType */:
                     return getTypeFromIntersectionTypeNode(node);
-                case 306 /* JSDocNullableType */:
+                case 309 /* JSDocNullableType */:
                     return getTypeFromJSDocNullableTypeNode(node);
-                case 308 /* JSDocOptionalType */:
+                case 311 /* JSDocOptionalType */:
                     return addOptionality(getTypeFromTypeNode(node.type));
-                case 193 /* NamedTupleMember */:
+                case 195 /* NamedTupleMember */:
                     return getTypeFromNamedTupleTypeNode(node);
-                case 187 /* ParenthesizedType */:
-                case 307 /* JSDocNonNullableType */:
-                case 302 /* JSDocTypeExpression */:
+                case 189 /* ParenthesizedType */:
+                case 310 /* JSDocNonNullableType */:
+                case 304 /* JSDocTypeExpression */:
                     return getTypeFromTypeNode(node.type);
-                case 182 /* RestType */:
+                case 184 /* RestType */:
                     return getTypeFromRestTypeNode(node);
-                case 310 /* JSDocVariadicType */:
+                case 313 /* JSDocVariadicType */:
                     return getTypeFromJSDocVariadicType(node);
-                case 175 /* FunctionType */:
-                case 176 /* ConstructorType */:
-                case 178 /* TypeLiteral */:
-                case 314 /* JSDocTypeLiteral */:
-                case 309 /* JSDocFunctionType */:
-                case 315 /* JSDocSignature */:
+                case 177 /* FunctionType */:
+                case 178 /* ConstructorType */:
+                case 180 /* TypeLiteral */:
+                case 317 /* JSDocTypeLiteral */:
+                case 312 /* JSDocFunctionType */:
+                case 318 /* JSDocSignature */:
                     return getTypeFromTypeLiteralOrFunctionOrConstructorTypeNode(node);
-                case 189 /* TypeOperator */:
+                case 191 /* TypeOperator */:
                     return getTypeFromTypeOperatorNode(node);
-                case 190 /* IndexedAccessType */:
+                case 192 /* IndexedAccessType */:
                     return getTypeFromIndexedAccessTypeNode(node);
-                case 191 /* MappedType */:
+                case 193 /* MappedType */:
                     return getTypeFromMappedTypeNode(node);
-                case 185 /* ConditionalType */:
+                case 187 /* ConditionalType */:
                     return getTypeFromConditionalTypeNode(node);
-                case 186 /* InferType */:
+                case 188 /* InferType */:
                     return getTypeFromInferTypeNode(node);
-                case 194 /* TemplateLiteralType */:
+                case 196 /* TemplateLiteralType */:
                     return getTypeFromTemplateTypeNode(node);
-                case 196 /* ImportType */:
+                case 198 /* ImportType */:
                     return getTypeFromImportTypeNode(node);
                 // This function assumes that an identifier, qualified name, or property access expression is a type expression
                 // Callers should first ensure this by calling `isPartOfTypeNode`
                 // TODO(rbuckton): These aren't valid TypeNodes, but we treat them as such because of `isPartOfTypeNode`, which returns `true` for things that aren't `TypeNode`s.
-                case 78 /* Identifier */:
-                case 158 /* QualifiedName */:
-                case 202 /* PropertyAccessExpression */:
+                case 79 /* Identifier */:
+                case 159 /* QualifiedName */:
+                case 204 /* PropertyAccessExpression */:
                     var symbol = getSymbolAtLocation(node);
                     return symbol ? getDeclaredTypeOfSymbol(symbol) : errorType;
                 default:
@@ -58983,6 +60145,9 @@
         function instantiateSignatures(signatures, mapper) {
             return instantiateList(signatures, mapper, instantiateSignature);
         }
+        function instantiateIndexInfos(indexInfos, mapper) {
+            return instantiateList(indexInfos, mapper, instantiateIndexInfo);
+        }
         function createTypeMapper(sources, targets) {
             return sources.length === 1 ? makeUnaryTypeMapper(sources[0], targets ? targets[0] : anyType) : makeArrayTypeMapper(sources, targets);
         }
@@ -59155,8 +60320,8 @@
             return type;
         }
         function maybeTypeParameterReference(node) {
-            return !(node.parent.kind === 174 /* TypeReference */ && node.parent.typeArguments && node === node.parent.typeName ||
-                node.parent.kind === 196 /* ImportType */ && node.parent.typeArguments && node === node.parent.qualifier);
+            return !(node.parent.kind === 176 /* TypeReference */ && node.parent.typeArguments && node === node.parent.typeName ||
+                node.parent.kind === 198 /* ImportType */ && node.parent.typeArguments && node === node.parent.qualifier);
         }
         function isTypeParameterPossiblyReferenced(tp, node) {
             // If the type parameter doesn't have exactly one declaration, if there are invening statement blocks
@@ -59165,7 +60330,7 @@
             if (tp.symbol && tp.symbol.declarations && tp.symbol.declarations.length === 1) {
                 var container = tp.symbol.declarations[0].parent;
                 for (var n = node; n !== container; n = n.parent) {
-                    if (!n || n.kind === 231 /* Block */ || n.kind === 185 /* ConditionalType */ && ts.forEachChild(n.extendsType, containsReference)) {
+                    if (!n || n.kind === 233 /* Block */ || n.kind === 187 /* ConditionalType */ && ts.forEachChild(n.extendsType, containsReference)) {
                         return true;
                     }
                 }
@@ -59174,15 +60339,15 @@
             return true;
             function containsReference(node) {
                 switch (node.kind) {
-                    case 188 /* ThisType */:
+                    case 190 /* ThisType */:
                         return !!tp.isThisType;
-                    case 78 /* Identifier */:
+                    case 79 /* Identifier */:
                         return !tp.isThisType && ts.isPartOfTypeNode(node) && maybeTypeParameterReference(node) &&
                             getTypeFromTypeNodeWorker(node) === tp; // use worker because we're looking for === equality
-                    case 177 /* TypeQuery */:
+                    case 179 /* TypeQuery */:
                         return true;
-                    case 166 /* MethodDeclaration */:
-                    case 165 /* MethodSignature */:
+                    case 167 /* MethodDeclaration */:
+                    case 166 /* MethodSignature */:
                         return !node.type && !!node.body ||
                             ts.some(node.typeParameters, containsReference) ||
                             ts.some(node.parameters, containsReference) ||
@@ -59265,7 +60430,7 @@
         function instantiateMappedTupleType(tupleType, mappedType, mapper) {
             var elementFlags = tupleType.target.elementFlags;
             var elementTypes = ts.map(getTypeArguments(tupleType), function (_, i) {
-                return instantiateMappedTypeTemplate(mappedType, getLiteralType("" + i), !!(elementFlags[i] & 2 /* Optional */), mapper);
+                return instantiateMappedTypeTemplate(mappedType, getStringLiteralType("" + i), !!(elementFlags[i] & 2 /* Optional */), mapper);
             });
             var modifiers = getMappedTypeModifiers(mappedType);
             var newTupleModifiers = modifiers & 4 /* IncludeOptional */ ? ts.map(elementFlags, function (f) { return f & 1 /* Required */ ? 2 /* Optional */ : f; }) :
@@ -59279,7 +60444,7 @@
             var templateMapper = appendTypeMapping(mapper, getTypeParameterFromMappedType(type), key);
             var propType = instantiateType(getTemplateTypeFromMappedType(type.target || type), templateMapper);
             var modifiers = getMappedTypeModifiers(type);
-            return strictNullChecks && modifiers & 4 /* IncludeOptional */ && !maybeTypeOfKind(propType, 32768 /* Undefined */ | 16384 /* Void */) ? getOptionalType(propType) :
+            return strictNullChecks && modifiers & 4 /* IncludeOptional */ && !maybeTypeOfKind(propType, 32768 /* Undefined */ | 16384 /* Void */) ? getOptionalType(propType, /*isProperty*/ true) :
                 strictNullChecks && modifiers & 8 /* ExcludeOptional */ && isOptional ? getTypeWithFacts(propType, 524288 /* NEUndefined */) :
                     propType;
         }
@@ -59398,7 +60563,7 @@
             if (flags & 8388608 /* IndexedAccess */) {
                 var newAliasSymbol = aliasSymbol || type.aliasSymbol;
                 var newAliasTypeArguments = aliasSymbol ? aliasTypeArguments : instantiateTypes(type.aliasTypeArguments, mapper);
-                return getIndexedAccessType(instantiateType(type.objectType, mapper), instantiateType(type.indexType, mapper), type.noUncheckedIndexedAccessCandidate, /*accessNode*/ undefined, newAliasSymbol, newAliasTypeArguments);
+                return getIndexedAccessType(instantiateType(type.objectType, mapper), instantiateType(type.indexType, mapper), type.accessFlags, /*accessNode*/ undefined, newAliasSymbol, newAliasTypeArguments);
             }
             if (flags & 16777216 /* Conditional */) {
                 return getConditionalTypeInstantiation(type, combineTypeMappers(type.mapper, mapper), aliasSymbol, aliasTypeArguments);
@@ -59454,40 +60619,40 @@
             return type.restrictiveInstantiation;
         }
         function instantiateIndexInfo(info, mapper) {
-            return info && createIndexInfo(instantiateType(info.type, mapper), info.isReadonly, info.declaration);
+            return createIndexInfo(info.keyType, instantiateType(info.type, mapper), info.isReadonly, info.declaration);
         }
         // Returns true if the given expression contains (at any level of nesting) a function or arrow expression
         // that is subject to contextual typing.
         function isContextSensitive(node) {
-            ts.Debug.assert(node.kind !== 166 /* MethodDeclaration */ || ts.isObjectLiteralMethod(node));
+            ts.Debug.assert(node.kind !== 167 /* MethodDeclaration */ || ts.isObjectLiteralMethod(node));
             switch (node.kind) {
-                case 209 /* FunctionExpression */:
-                case 210 /* ArrowFunction */:
-                case 166 /* MethodDeclaration */:
-                case 252 /* FunctionDeclaration */: // Function declarations can have context when annotated with a jsdoc @type
+                case 211 /* FunctionExpression */:
+                case 212 /* ArrowFunction */:
+                case 167 /* MethodDeclaration */:
+                case 254 /* FunctionDeclaration */: // Function declarations can have context when annotated with a jsdoc @type
                     return isContextSensitiveFunctionLikeDeclaration(node);
-                case 201 /* ObjectLiteralExpression */:
+                case 203 /* ObjectLiteralExpression */:
                     return ts.some(node.properties, isContextSensitive);
-                case 200 /* ArrayLiteralExpression */:
+                case 202 /* ArrayLiteralExpression */:
                     return ts.some(node.elements, isContextSensitive);
-                case 218 /* ConditionalExpression */:
+                case 220 /* ConditionalExpression */:
                     return isContextSensitive(node.whenTrue) ||
                         isContextSensitive(node.whenFalse);
-                case 217 /* BinaryExpression */:
+                case 219 /* BinaryExpression */:
                     return (node.operatorToken.kind === 56 /* BarBarToken */ || node.operatorToken.kind === 60 /* QuestionQuestionToken */) &&
                         (isContextSensitive(node.left) || isContextSensitive(node.right));
-                case 289 /* PropertyAssignment */:
+                case 291 /* PropertyAssignment */:
                     return isContextSensitive(node.initializer);
-                case 208 /* ParenthesizedExpression */:
+                case 210 /* ParenthesizedExpression */:
                     return isContextSensitive(node.expression);
-                case 282 /* JsxAttributes */:
+                case 284 /* JsxAttributes */:
                     return ts.some(node.properties, isContextSensitive) || ts.isJsxOpeningElement(node.parent) && ts.some(node.parent.parent.children, isContextSensitive);
-                case 281 /* JsxAttribute */: {
+                case 283 /* JsxAttribute */: {
                     // If there is no initializer, JSX attribute has a boolean value of true which is not context sensitive.
                     var initializer = node.initializer;
                     return !!initializer && isContextSensitive(initializer);
                 }
-                case 284 /* JsxExpression */: {
+                case 286 /* JsxExpression */: {
                     // It is possible to that node.expression is undefined (e.g <div x={} />)
                     var expression = node.expression;
                     return !!expression && isContextSensitive(expression);
@@ -59497,29 +60662,11 @@
         }
         function isContextSensitiveFunctionLikeDeclaration(node) {
             return (!ts.isFunctionDeclaration(node) || ts.isInJSFile(node) && !!getTypeForDeclarationFromJSDocComment(node)) &&
-                (hasContextSensitiveParameters(node) || hasContextSensitiveReturnExpression(node));
-        }
-        function hasContextSensitiveParameters(node) {
-            // Functions with type parameters are not context sensitive.
-            if (!node.typeParameters) {
-                // Functions with any parameters that lack type annotations are context sensitive.
-                if (ts.some(node.parameters, function (p) { return !ts.getEffectiveTypeAnnotationNode(p); })) {
-                    return true;
-                }
-                if (node.kind !== 210 /* ArrowFunction */) {
-                    // If the first parameter is not an explicit 'this' parameter, then the function has
-                    // an implicit 'this' parameter which is subject to contextual typing.
-                    var parameter = ts.firstOrUndefined(node.parameters);
-                    if (!(parameter && ts.parameterIsThisKeyword(parameter))) {
-                        return true;
-                    }
-                }
-            }
-            return false;
+                (ts.hasContextSensitiveParameters(node) || hasContextSensitiveReturnExpression(node));
         }
         function hasContextSensitiveReturnExpression(node) {
             // TODO(anhans): A block should be context-sensitive if it has a context-sensitive return value.
-            return !node.typeParameters && !ts.getEffectiveReturnTypeNode(node) && !!node.body && node.body.kind !== 231 /* Block */ && isContextSensitive(node.body);
+            return !node.typeParameters && !ts.getEffectiveReturnTypeNode(node) && !!node.body && node.body.kind !== 233 /* Block */ && isContextSensitive(node.body);
         }
         function isContextSensitiveFunctionOrObjectLiteralMethod(func) {
             return (ts.isInJSFile(func) && ts.isFunctionDeclaration(func) || isFunctionExpressionOrArrowFunction(func) || ts.isObjectLiteralMethod(func)) &&
@@ -59534,6 +60681,7 @@
                     result.properties = resolved.properties;
                     result.callSignatures = ts.emptyArray;
                     result.constructSignatures = ts.emptyArray;
+                    result.indexInfos = ts.emptyArray;
                     return result;
                 }
             }
@@ -59622,23 +60770,23 @@
                 return true;
             }
             switch (node.kind) {
-                case 284 /* JsxExpression */:
-                case 208 /* ParenthesizedExpression */:
+                case 286 /* JsxExpression */:
+                case 210 /* ParenthesizedExpression */:
                     return elaborateError(node.expression, source, target, relation, headMessage, containingMessageChain, errorOutputContainer);
-                case 217 /* BinaryExpression */:
+                case 219 /* BinaryExpression */:
                     switch (node.operatorToken.kind) {
-                        case 62 /* EqualsToken */:
+                        case 63 /* EqualsToken */:
                         case 27 /* CommaToken */:
                             return elaborateError(node.right, source, target, relation, headMessage, containingMessageChain, errorOutputContainer);
                     }
                     break;
-                case 201 /* ObjectLiteralExpression */:
+                case 203 /* ObjectLiteralExpression */:
                     return elaborateObjectLiteral(node, source, target, relation, containingMessageChain, errorOutputContainer);
-                case 200 /* ArrayLiteralExpression */:
+                case 202 /* ArrayLiteralExpression */:
                     return elaborateArrayLiteral(node, source, target, relation, containingMessageChain, errorOutputContainer);
-                case 282 /* JsxAttributes */:
+                case 284 /* JsxAttributes */:
                     return elaborateJsxComponents(node, source, target, relation, containingMessageChain, errorOutputContainer);
-                case 210 /* ArrowFunction */:
+                case 212 /* ArrowFunction */:
                     return elaborateArrowFunction(node, source, target, relation, containingMessageChain, errorOutputContainer);
             }
             return false;
@@ -59739,7 +60887,14 @@
                 if (!targetPropType || targetPropType.flags & 8388608 /* IndexedAccess */)
                     continue; // Don't elaborate on indexes on generic variables
                 var sourcePropType = getIndexedAccessTypeOrUndefined(source, nameType);
-                if (sourcePropType && !checkTypeRelatedTo(sourcePropType, targetPropType, relation, /*errorNode*/ undefined)) {
+                if (!sourcePropType)
+                    continue;
+                var propName = getPropertyNameFromIndex(nameType, /*accessNode*/ undefined);
+                var targetIsOptional = !!(propName && (getPropertyOfType(target, propName) || unknownSymbol).flags & 16777216 /* Optional */);
+                var sourceIsOptional = !!(propName && (getPropertyOfType(source, propName) || unknownSymbol).flags & 16777216 /* Optional */);
+                targetPropType = removeMissingType(targetPropType, targetIsOptional);
+                sourcePropType = removeMissingType(sourcePropType, targetIsOptional && sourceIsOptional);
+                if (!checkTypeRelatedTo(sourcePropType, targetPropType, relation, /*errorNode*/ undefined)) {
                     var elaborated = next && elaborateError(next, sourcePropType, targetPropType, relation, /*headMessage*/ undefined, containingMessageChain, errorOutputContainer);
                     if (elaborated) {
                         reportedError = true;
@@ -59760,9 +60915,7 @@
                             var targetProp = propertyName !== undefined ? getPropertyOfType(target, propertyName) : undefined;
                             var issuedElaboration = false;
                             if (!targetProp) {
-                                var indexInfo = isTypeAssignableToKind(nameType, 296 /* NumberLike */) && getIndexInfoOfType(target, 1 /* Number */) ||
-                                    getIndexInfoOfType(target, 0 /* String */) ||
-                                    undefined;
+                                var indexInfo = getApplicableIndexInfo(target, nameType);
                                 if (indexInfo && indexInfo.declaration && !ts.getSourceFileOfNode(indexInfo.declaration).hasNoDefaultLib) {
                                     issuedElaboration = true;
                                     ts.addRelatedInfo(reportedDiag, ts.createDiagnosticForNode(indexInfo.declaration, ts.Diagnostics.The_expected_type_comes_from_this_index_signature));
@@ -59793,9 +60946,9 @@
                     case 1:
                         if (!(_i < _a.length)) return [3 /*break*/, 4];
                         prop = _a[_i];
-                        if (ts.isJsxSpreadAttribute(prop))
+                        if (ts.isJsxSpreadAttribute(prop) || isHyphenatedJsxName(ts.idText(prop.name)))
                             return [3 /*break*/, 3];
-                        return [4 /*yield*/, { errorNode: prop.name, innerExpression: prop.initializer, nameType: getLiteralType(ts.idText(prop.name)) }];
+                        return [4 /*yield*/, { errorNode: prop.name, innerExpression: prop.initializer, nameType: getStringLiteralType(ts.idText(prop.name)) }];
                     case 2:
                         _b.sent();
                         _b.label = 3;
@@ -59819,7 +60972,7 @@
                     case 1:
                         if (!(i < node.children.length)) return [3 /*break*/, 5];
                         child = node.children[i];
-                        nameType = getLiteralType(i - memberOffset);
+                        nameType = getNumberLiteralType(i - memberOffset);
                         elem = getElaborationElementForJsxChild(child, nameType, getInvalidTextDiagnostic);
                         if (!elem) return [3 /*break*/, 3];
                         return [4 /*yield*/, elem];
@@ -59838,7 +60991,7 @@
         }
         function getElaborationElementForJsxChild(child, nameType, getInvalidTextDiagnostic) {
             switch (child.kind) {
-                case 284 /* JsxExpression */:
+                case 286 /* JsxExpression */:
                     // child is of the type of the expression
                     return { errorNode: child, innerExpression: child.expression, nameType: nameType };
                 case 11 /* JsxText */:
@@ -59847,9 +61000,9 @@
                     }
                     // child is a string
                     return { errorNode: child, innerExpression: undefined, nameType: nameType, errorMessage: getInvalidTextDiagnostic() };
-                case 274 /* JsxElement */:
-                case 275 /* JsxSelfClosingElement */:
-                case 278 /* JsxFragment */:
+                case 276 /* JsxElement */:
+                case 277 /* JsxSelfClosingElement */:
+                case 280 /* JsxFragment */:
                     // child is of type JSX.Element
                     return { errorNode: child, innerExpression: child, nameType: nameType };
                 default:
@@ -59863,7 +61016,7 @@
                 var containingElement = node.parent.parent;
                 var childPropName = getJsxElementChildrenPropertyName(getJsxNamespaceAt(node));
                 var childrenPropName = childPropName === undefined ? "children" : ts.unescapeLeadingUnderscores(childPropName);
-                var childrenNameType = getLiteralType(childrenPropName);
+                var childrenNameType = getStringLiteralType(childrenPropName);
                 var childrenTargetType = getIndexedAccessType(target, childrenNameType);
                 var validChildren = ts.getSemanticJsxChildren(containingElement.children);
                 if (!ts.length(validChildren)) {
@@ -59918,7 +61071,7 @@
                     var tagNameText = ts.getTextOfNode(node.parent.tagName);
                     var childPropName = getJsxElementChildrenPropertyName(getJsxNamespaceAt(node));
                     var childrenPropName = childPropName === undefined ? "children" : ts.unescapeLeadingUnderscores(childPropName);
-                    var childrenTargetType = getIndexedAccessType(target, getLiteralType(childrenPropName));
+                    var childrenTargetType = getIndexedAccessType(target, getStringLiteralType(childrenPropName));
                     var diagnostic = ts.Diagnostics._0_components_don_t_accept_text_as_child_elements_Text_in_JSX_has_the_type_string_but_the_expected_type_of_1_is_2;
                     invalidTextDiagnostic = __assign(__assign({}, diagnostic), { key: "!!ALREADY FORMATTED!!", message: ts.formatMessage(/*_dummy*/ undefined, diagnostic, tagNameText, childrenPropName, typeToString(childrenTargetType)) });
                 }
@@ -59943,7 +61096,7 @@
                         elem = node.elements[i];
                         if (ts.isOmittedExpression(elem))
                             return [3 /*break*/, 3];
-                        nameType = getLiteralType(i);
+                        nameType = getNumberLiteralType(i);
                         return [4 /*yield*/, { errorNode: elem, innerExpression: elem, nameType: nameType }];
                     case 2:
                         _a.sent();
@@ -59997,11 +61150,11 @@
                         }
                         _b = prop.kind;
                         switch (_b) {
-                            case 169 /* SetAccessor */: return [3 /*break*/, 2];
-                            case 168 /* GetAccessor */: return [3 /*break*/, 2];
-                            case 166 /* MethodDeclaration */: return [3 /*break*/, 2];
-                            case 290 /* ShorthandPropertyAssignment */: return [3 /*break*/, 2];
-                            case 289 /* PropertyAssignment */: return [3 /*break*/, 4];
+                            case 171 /* SetAccessor */: return [3 /*break*/, 2];
+                            case 170 /* GetAccessor */: return [3 /*break*/, 2];
+                            case 167 /* MethodDeclaration */: return [3 /*break*/, 2];
+                            case 292 /* ShorthandPropertyAssignment */: return [3 /*break*/, 2];
+                            case 291 /* PropertyAssignment */: return [3 /*break*/, 4];
                         }
                         return [3 /*break*/, 6];
                     case 2: return [4 /*yield*/, { errorNode: prop.name, innerExpression: undefined, nameType: type }];
@@ -60078,8 +61231,8 @@
                 return 0 /* False */;
             }
             var kind = target.declaration ? target.declaration.kind : 0 /* Unknown */;
-            var strictVariance = !(checkMode & 3 /* Callback */) && strictFunctionTypes && kind !== 166 /* MethodDeclaration */ &&
-                kind !== 165 /* MethodSignature */ && kind !== 167 /* Constructor */;
+            var strictVariance = !(checkMode & 3 /* Callback */) && strictFunctionTypes && kind !== 167 /* MethodDeclaration */ &&
+                kind !== 166 /* MethodSignature */ && kind !== 169 /* Constructor */;
             var result = -1 /* True */;
             var sourceThisType = getThisTypeOfSignature(source);
             if (sourceThisType && sourceThisType !== voidType) {
@@ -60213,8 +61366,7 @@
                 t.properties.length === 0 &&
                 t.callSignatures.length === 0 &&
                 t.constructSignatures.length === 0 &&
-                !t.stringIndexInfo &&
-                !t.numberIndexInfo;
+                t.indexInfos.length === 0;
         }
         function isEmptyObjectType(type) {
             return type.flags & 524288 /* Object */ ? !isGenericMappedType(type) && isEmptyResolvedType(resolveStructuredTypeMembers(type)) :
@@ -60228,7 +61380,7 @@
                 type.symbol && type.symbol.flags & 2048 /* TypeLiteral */ && getMembersOfSymbol(type.symbol).size === 0));
         }
         function isStringIndexSignatureOnlyType(type) {
-            return type.flags & 524288 /* Object */ && !isGenericMappedType(type) && getPropertiesOfType(type).length === 0 && getIndexInfoOfType(type, 0 /* String */) && !getIndexInfoOfType(type, 1 /* Number */) ||
+            return type.flags & 524288 /* Object */ && !isGenericMappedType(type) && getPropertiesOfType(type).length === 0 && getIndexInfosOfType(type).length === 1 && !!getIndexInfoOfType(type, stringType) ||
                 type.flags & 3145728 /* UnionOrIntersection */ && ts.every(type.types, isStringIndexSignatureOnlyType) ||
                 false;
         }
@@ -60333,9 +61485,10 @@
                 }
             }
             else {
-                if (!(source.flags & 3145728 /* UnionOrIntersection */) && !(target.flags & 3145728 /* UnionOrIntersection */) &&
-                    source.flags !== target.flags && !(source.flags & 469237760 /* Substructure */))
+                if (source.flags !== target.flags)
                     return false;
+                if (source.flags & 67358815 /* Singleton */)
+                    return true;
             }
             if (source.flags & 524288 /* Object */ && target.flags & 524288 /* Object */) {
                 var related = relation.get(getRelationKey(source, target, 0 /* None */, relation));
@@ -60349,7 +61502,7 @@
             return false;
         }
         function isIgnoredJsxProperty(source, sourceProp) {
-            return ts.getObjectFlags(source) & 2048 /* JsxAttributes */ && !isUnhyphenatedJsxName(sourceProp.escapedName);
+            return ts.getObjectFlags(source) & 2048 /* JsxAttributes */ && isHyphenatedJsxName(sourceProp.escapedName);
         }
         function getNormalizedType(type, writing) {
             while (true) {
@@ -60426,7 +61579,7 @@
                 }
                 var diag = ts.createDiagnosticForNodeFromMessageChain(errorNode, errorInfo, relatedInformation);
                 if (relatedInfo) {
-                    ts.addRelatedInfo.apply(void 0, __spreadArray([diag], relatedInfo));
+                    ts.addRelatedInfo.apply(void 0, __spreadArray([diag], relatedInfo, false));
                 }
                 if (errorOutputContainer) {
                     (errorOutputContainer.errors || (errorOutputContainer.errors = [])).push(diag);
@@ -60469,7 +61622,7 @@
                     reportError.apply(void 0, stack[0]);
                     if (info) {
                         // Actually do the last relation error
-                        reportRelationError.apply(void 0, __spreadArray([/*headMessage*/ undefined], info));
+                        reportRelationError.apply(void 0, __spreadArray([/*headMessage*/ undefined], info, false));
                     }
                     return;
                 }
@@ -60558,12 +61711,12 @@
                     var _b = secondaryRootErrors_1[_i], msg = _b[0], args = _b.slice(1);
                     var originalValue = msg.elidedInCompatabilityPyramid;
                     msg.elidedInCompatabilityPyramid = false; // Temporarily override elision to ensure error is reported
-                    reportError.apply(void 0, __spreadArray([msg], args));
+                    reportError.apply(void 0, __spreadArray([msg], args, false));
                     msg.elidedInCompatabilityPyramid = originalValue;
                 }
                 if (info) {
                     // Actually do the last relation error
-                    reportRelationError.apply(void 0, __spreadArray([/*headMessage*/ undefined], info));
+                    reportRelationError.apply(void 0, __spreadArray([/*headMessage*/ undefined], info, false));
                 }
             }
             function reportError(message, arg0, arg1, arg2, arg3) {
@@ -60884,12 +62037,12 @@
                 }
             }
             function isIdenticalTo(source, target) {
-                var flags = source.flags & target.flags;
-                if (!(flags & 469237760 /* Substructure */)) {
+                if (source.flags !== target.flags)
                     return 0 /* False */;
-                }
+                if (source.flags & 67358815 /* Singleton */)
+                    return -1 /* True */;
                 traceUnionsOrIntersectionsTooLarge(source, target);
-                if (flags & 3145728 /* UnionOrIntersection */) {
+                if (source.flags & 3145728 /* UnionOrIntersection */) {
                     var result_7 = eachTypeRelatedToSomeType(source, target);
                     if (result_7) {
                         result_7 &= eachTypeRelatedToSomeType(target, source);
@@ -60900,9 +62053,10 @@
             }
             function getTypeOfPropertyInTypes(types, name) {
                 var appendPropType = function (propTypes, type) {
+                    var _a;
                     type = getApparentType(type);
                     var prop = type.flags & 3145728 /* UnionOrIntersection */ ? getPropertyOfUnionOrIntersectionType(type, name) : getPropertyOfObjectType(type, name);
-                    var propType = prop && getTypeOfSymbol(prop) || isNumericLiteralName(name) && getIndexTypeOfType(type, 1 /* Number */) || getIndexTypeOfType(type, 0 /* String */) || undefinedType;
+                    var propType = prop && getTypeOfSymbol(prop) || ((_a = getApplicableIndexInfoForName(type, name)) === null || _a === void 0 ? void 0 : _a.type) || undefinedType;
                     return ts.append(propTypes, propType);
                 };
                 return getUnionType(ts.reduceLeft(types, appendPropType, /*initial*/ undefined) || ts.emptyArray);
@@ -60923,7 +62077,7 @@
                     reducedTarget = findMatchingDiscriminantType(source, target, isRelatedTo) || filterPrimitivesIfContainsNonPrimitive(target);
                     checkTypes = reducedTarget.flags & 1048576 /* Union */ ? reducedTarget.types : [reducedTarget];
                 }
-                var _loop_16 = function (prop) {
+                var _loop_18 = function (prop) {
                     if (shouldCheckAsExcessProperty(prop, source.symbol) && !isIgnoredJsxProperty(source, prop)) {
                         if (!isKnownProperty(reducedTarget, prop.escapedName, isComparingJsxAttributes)) {
                             if (reportErrors) {
@@ -60986,7 +62140,7 @@
                 };
                 for (var _i = 0, _b = getPropertiesOfType(source); _i < _b.length; _i++) {
                     var prop = _b[_i];
-                    var state_5 = _loop_16(prop);
+                    var state_5 = _loop_18(prop);
                     if (typeof state_5 === "object")
                         return state_5.value;
                 }
@@ -61298,7 +62452,7 @@
                     // parameter 'T extends 1 | 2', the intersection 'T & 1' should be reduced to '1' such that it doesn't
                     // appear to be comparable to '2'.
                     if (relation === comparableRelation && target.flags & 131068 /* Primitive */) {
-                        var constraints = ts.sameMap(source.types, function (t) { return t.flags & 131068 /* Primitive */ ? t : getBaseConstraintOfType(t) || unknownType; });
+                        var constraints = ts.sameMap(source.types, getBaseConstraintOrType);
                         if (constraints !== source.types) {
                             source = getIntersectionType(constraints);
                             if (!(source.flags & 2097152 /* Intersection */)) {
@@ -61442,8 +62596,8 @@
                         var baseObjectType = getBaseConstraintOfType(objectType) || objectType;
                         var baseIndexType = getBaseConstraintOfType(indexType) || indexType;
                         if (!isGenericObjectType(baseObjectType) && !isGenericIndexType(baseIndexType)) {
-                            var accessFlags = 2 /* Writing */ | (baseObjectType !== objectType ? 1 /* NoIndexSignatures */ : 0);
-                            var constraint = getIndexedAccessTypeOrUndefined(baseObjectType, baseIndexType, target.noUncheckedIndexedAccessCandidate, /*accessNode*/ undefined, accessFlags);
+                            var accessFlags = 4 /* Writing */ | (baseObjectType !== objectType ? 2 /* NoIndexSignatures */ : 0);
+                            var constraint = getIndexedAccessTypeOrUndefined(baseObjectType, baseIndexType, accessFlags);
                             if (constraint) {
                                 if (reportErrors && originalErrorInfo) {
                                     // create a new chain for the constraint error
@@ -61667,7 +62821,7 @@
                         return 0 /* False */;
                     }
                     if (ts.getObjectFlags(source) & 4 /* Reference */ && ts.getObjectFlags(target) & 4 /* Reference */ && source.target === target.target &&
-                        !(ts.getObjectFlags(source) & 4096 /* MarkerType */ || ts.getObjectFlags(target) & 4096 /* MarkerType */)) {
+                        !isTupleType(source) && !(ts.getObjectFlags(source) & 4096 /* MarkerType */ || ts.getObjectFlags(target) & 4096 /* MarkerType */)) {
                         // We have type references to the same generic type, and the type references are not marker
                         // type references (which are intended by be compared structurally). Obtain the variance
                         // information for the type parameters and relate the type arguments accordingly.
@@ -61685,7 +62839,7 @@
                     }
                     else if (isReadonlyArrayType(target) ? isArrayType(source) || isTupleType(source) : isArrayType(target) && isTupleType(source) && !source.target.readonly) {
                         if (relation !== identityRelation) {
-                            return isRelatedTo(getIndexTypeOfType(source, 1 /* Number */) || anyType, getIndexTypeOfType(target, 1 /* Number */) || anyType, reportErrors);
+                            return isRelatedTo(getIndexTypeOfType(source, numberType) || anyType, getIndexTypeOfType(target, numberType) || anyType, reportErrors);
                         }
                         else {
                             // By flags alone, we know that the `target` is a readonly array while the source is a normal array or tuple
@@ -61712,10 +62866,7 @@
                             if (result) {
                                 result &= signaturesRelatedTo(source, target, 1 /* Construct */, reportStructuralErrors);
                                 if (result) {
-                                    result &= indexTypesRelatedTo(source, target, 0 /* String */, sourceIsPrimitive, reportStructuralErrors, intersectionState);
-                                    if (result) {
-                                        result &= indexTypesRelatedTo(source, target, 1 /* Number */, sourceIsPrimitive, reportStructuralErrors, intersectionState);
-                                    }
+                                    result &= indexSignaturesRelatedTo(source, target, sourceIsPrimitive, reportStructuralErrors, intersectionState);
                                 }
                             }
                         }
@@ -61841,7 +62992,7 @@
                 var numCombinations = 1;
                 for (var _i = 0, sourcePropertiesFiltered_1 = sourcePropertiesFiltered; _i < sourcePropertiesFiltered_1.length; _i++) {
                     var sourceProperty = sourcePropertiesFiltered_1[_i];
-                    numCombinations *= countTypes(getTypeOfSymbol(sourceProperty));
+                    numCombinations *= countTypes(getNonMissingTypeOfSymbol(sourceProperty));
                     if (numCombinations > 25) {
                         // We've reached the complexity limit.
                         ts.tracing === null || ts.tracing === void 0 ? void 0 : ts.tracing.instant("checkTypes" /* CheckTypes */, "typeRelatedToDiscriminatedType_DepthLimit", { sourceId: source.id, targetId: target.id, numCombinations: numCombinations });
@@ -61853,7 +63004,7 @@
                 var excludedProperties = new ts.Set();
                 for (var i = 0; i < sourcePropertiesFiltered.length; i++) {
                     var sourceProperty = sourcePropertiesFiltered[i];
-                    var sourcePropertyType = getTypeOfSymbol(sourceProperty);
+                    var sourcePropertyType = getNonMissingTypeOfSymbol(sourceProperty);
                     sourceDiscriminantTypes[i] = sourcePropertyType.flags & 1048576 /* Union */
                         ? sourcePropertyType.types
                         : [sourcePropertyType];
@@ -61863,11 +63014,11 @@
                 // constituents of 'target'. If any combination does not have a match then 'source' is not relatable.
                 var discriminantCombinations = ts.cartesianProduct(sourceDiscriminantTypes);
                 var matchingTypes = [];
-                var _loop_17 = function (combination) {
+                var _loop_19 = function (combination) {
                     var hasMatch = false;
                     outer: for (var _c = 0, _d = target.types; _c < _d.length; _c++) {
                         var type = _d[_c];
-                        var _loop_18 = function (i) {
+                        var _loop_20 = function (i) {
                             var sourceProperty = sourcePropertiesFiltered[i];
                             var targetProperty = getPropertyOfType(type, sourceProperty.escapedName);
                             if (!targetProperty)
@@ -61883,7 +63034,7 @@
                             }
                         };
                         for (var i = 0; i < sourcePropertiesFiltered.length; i++) {
-                            var state_7 = _loop_18(i);
+                            var state_7 = _loop_20(i);
                             switch (state_7) {
                                 case "continue-outer": continue outer;
                             }
@@ -61897,7 +63048,7 @@
                 };
                 for (var _a = 0, discriminantCombinations_1 = discriminantCombinations; _a < discriminantCombinations_1.length; _a++) {
                     var combination = discriminantCombinations_1[_a];
-                    var state_6 = _loop_17(combination);
+                    var state_6 = _loop_19(combination);
                     if (typeof state_6 === "object")
                         return state_6.value;
                 }
@@ -61910,15 +63061,12 @@
                         result &= signaturesRelatedTo(source, type, 0 /* Call */, /*reportStructuralErrors*/ false);
                         if (result) {
                             result &= signaturesRelatedTo(source, type, 1 /* Construct */, /*reportStructuralErrors*/ false);
-                            if (result) {
-                                result &= indexTypesRelatedTo(source, type, 0 /* String */, /*sourceIsPrimitive*/ false, /*reportStructuralErrors*/ false, 0 /* None */);
+                            if (result && !(isTupleType(source) && isTupleType(type))) {
                                 // Comparing numeric index types when both `source` and `type` are tuples is unnecessary as the
                                 // element types should be sufficiently covered by `propertiesRelatedTo`. It also causes problems
                                 // with index type assignability as the types for the excluded discriminants are still included
                                 // in the index type.
-                                if (result && !(isTupleType(source) && isTupleType(type))) {
-                                    result &= indexTypesRelatedTo(source, type, 1 /* Number */, /*sourceIsPrimitive*/ false, /*reportStructuralErrors*/ false, 0 /* None */);
-                                }
+                                result &= indexSignaturesRelatedTo(source, type, /*sourceIsPrimitive*/ false, /*reportStructuralErrors*/ false, 0 /* None */);
                             }
                         }
                     }
@@ -61946,46 +63094,9 @@
             }
             function isPropertySymbolTypeRelated(sourceProp, targetProp, getTypeOfSourceProperty, reportErrors, intersectionState) {
                 var targetIsOptional = strictNullChecks && !!(ts.getCheckFlags(targetProp) & 48 /* Partial */);
-                var source = getTypeOfSourceProperty(sourceProp);
-                if (ts.getCheckFlags(targetProp) & 65536 /* DeferredType */ && !getSymbolLinks(targetProp).type) {
-                    // Rather than resolving (and normalizing) the type, relate constituent-by-constituent without performing normalization or seconadary passes
-                    var links = getSymbolLinks(targetProp);
-                    ts.Debug.assertIsDefined(links.deferralParent);
-                    ts.Debug.assertIsDefined(links.deferralConstituents);
-                    var unionParent = !!(links.deferralParent.flags & 1048576 /* Union */);
-                    var result_12 = unionParent ? 0 /* False */ : -1 /* True */;
-                    var targetTypes = links.deferralConstituents;
-                    for (var _i = 0, targetTypes_3 = targetTypes; _i < targetTypes_3.length; _i++) {
-                        var targetType = targetTypes_3[_i];
-                        var related = isRelatedTo(source, targetType, /*reportErrors*/ false, /*headMessage*/ undefined, unionParent ? 0 : 2 /* Target */);
-                        if (!unionParent) {
-                            if (!related) {
-                                // Can't assign to a target individually - have to fallback to assigning to the _whole_ intersection (which forces normalization)
-                                return isRelatedTo(source, addOptionality(getTypeOfSymbol(targetProp), targetIsOptional), reportErrors);
-                            }
-                            result_12 &= related;
-                        }
-                        else {
-                            if (related) {
-                                return related;
-                            }
-                        }
-                    }
-                    if (unionParent && !result_12 && targetIsOptional) {
-                        result_12 = isRelatedTo(source, undefinedType);
-                    }
-                    if (unionParent && !result_12 && reportErrors) {
-                        // The easiest way to get the right errors here is to un-defer (which may be costly)
-                        // If it turns out this is too costly too often, we can replicate the error handling logic within
-                        // typeRelatedToSomeType without the discriminatable type branch (as that requires a manifest union
-                        // type on which to hand discriminable properties, which we are expressly trying to avoid here)
-                        return isRelatedTo(source, addOptionality(getTypeOfSymbol(targetProp), targetIsOptional), reportErrors);
-                    }
-                    return result_12;
-                }
-                else {
-                    return isRelatedTo(source, addOptionality(getTypeOfSymbol(targetProp), targetIsOptional), reportErrors, /*headMessage*/ undefined, intersectionState);
-                }
+                var effectiveTarget = addOptionality(getNonMissingTypeOfSymbol(targetProp), /*isProperty*/ false, targetIsOptional);
+                var effectiveSource = getTypeOfSourceProperty(sourceProp);
+                return isRelatedTo(effectiveSource, effectiveTarget, reportErrors, /*headMessage*/ undefined, intersectionState);
             }
             function propertyRelatedTo(source, target, sourceProp, targetProp, getTypeOfSourceProperty, reportErrors, intersectionState, skipOptional) {
                 var sourcePropFlags = ts.getDeclarationModifierFlagsFromSymbol(sourceProp);
@@ -62065,7 +63176,7 @@
                 }
                 if (props.length === 1) {
                     var propName = symbolToString(unmatchedProperty);
-                    reportError.apply(void 0, __spreadArray([ts.Diagnostics.Property_0_is_missing_in_type_1_but_required_in_type_2, propName], getTypeNamesForErrorDisplay(source, target)));
+                    reportError.apply(void 0, __spreadArray([ts.Diagnostics.Property_0_is_missing_in_type_1_but_required_in_type_2, propName], getTypeNamesForErrorDisplay(source, target), false));
                     if (ts.length(unmatchedProperty.declarations)) {
                         associateRelatedInfo(ts.createDiagnosticForNode(unmatchedProperty.declarations[0], ts.Diagnostics._0_is_declared_here, propName));
                     }
@@ -62114,7 +63225,7 @@
                             }
                             return 0 /* False */;
                         }
-                        if (!targetRestFlag && sourceRestFlag) {
+                        if (!targetRestFlag && (sourceRestFlag || targetArity < sourceArity)) {
                             if (reportErrors) {
                                 if (sourceMinLength < targetMinLength) {
                                     reportError(ts.Diagnostics.Target_requires_0_element_s_but_source_may_have_fewer, targetMinLength);
@@ -62162,13 +63273,14 @@
                                 }
                             }
                             var sourceType = !isTupleType(source) ? sourceTypeArguments[0] :
-                                i < startCount || i >= targetArity - endCount ? sourceTypeArguments[sourceIndex] :
+                                i < startCount || i >= targetArity - endCount ? removeMissingType(sourceTypeArguments[sourceIndex], !!(sourceFlags & targetFlags & 2 /* Optional */)) :
                                     getElementTypeOfSliceOfTupleType(source, startCount, endCount) || neverType;
                             var targetType = targetTypeArguments[i];
-                            var targetCheckType = sourceFlags & 8 /* Variadic */ && targetFlags & 4 /* Rest */ ? createArrayType(targetType) : targetType;
+                            var targetCheckType = sourceFlags & 8 /* Variadic */ && targetFlags & 4 /* Rest */ ? createArrayType(targetType) :
+                                removeMissingType(targetType, !!(targetFlags & 2 /* Optional */));
                             var related = isRelatedTo(sourceType, targetCheckType, reportErrors, /*headMessage*/ undefined, intersectionState);
                             if (!related) {
-                                if (reportErrors) {
+                                if (reportErrors && (targetArity > 1 || sourceArity > 1)) {
                                     if (i < startCount || i >= targetArity - endCount || sourceArity - startCount - endCount === 1) {
                                         reportIncompatibleError(ts.Diagnostics.Type_at_position_0_in_source_is_not_compatible_with_type_at_position_1_in_target, sourceIndex, i);
                                     }
@@ -62199,7 +63311,7 @@
                         var sourceProp = _a[_i];
                         if (!getPropertyOfObjectType(target, sourceProp.escapedName)) {
                             var sourceType = getTypeOfSymbol(sourceProp);
-                            if (!(sourceType === undefinedType || sourceType === undefinedWideningType || sourceType === optionalType)) {
+                            if (!(sourceType.flags & 32768 /* Undefined */)) {
                                 if (reportErrors) {
                                     reportError(ts.Diagnostics.Property_0_does_not_exist_on_type_1, symbolToString(sourceProp), typeToString(target));
                                 }
@@ -62218,7 +63330,7 @@
                     if (!(targetProp.flags & 4194304 /* Prototype */) && (!numericNamesOnly || isNumericLiteralName(name) || name === "length")) {
                         var sourceProp = getPropertyOfType(source, name);
                         if (sourceProp && sourceProp !== targetProp) {
-                            var related = propertyRelatedTo(source, target, sourceProp, targetProp, getTypeOfSymbol, reportErrors, intersectionState, relation === comparableRelation);
+                            var related = propertyRelatedTo(source, target, sourceProp, targetProp, getNonMissingTypeOfSymbol, reportErrors, intersectionState, relation === comparableRelation);
                             if (!related) {
                                 return 0 /* False */;
                             }
@@ -62312,7 +63424,7 @@
                     var targetSignature = ts.first(targetSignatures);
                     result = signatureRelatedTo(sourceSignature, targetSignature, eraseGenerics, reportErrors, incompatibleReporter(sourceSignature, targetSignature));
                     if (!result && reportErrors && kind === 1 /* Construct */ && (sourceObjectFlags & targetObjectFlags) &&
-                        (((_a = targetSignature.declaration) === null || _a === void 0 ? void 0 : _a.kind) === 167 /* Constructor */ || ((_b = sourceSignature.declaration) === null || _b === void 0 ? void 0 : _b.kind) === 167 /* Constructor */)) {
+                        (((_a = targetSignature.declaration) === null || _a === void 0 ? void 0 : _a.kind) === 169 /* Constructor */ || ((_b = sourceSignature.declaration) === null || _b === void 0 ? void 0 : _b.kind) === 169 /* Constructor */)) {
                         var constructSignatureToString = function (signature) {
                             return signatureToString(signature, /*enclosingDeclaration*/ undefined, 262144 /* WriteArrowStyleSignature */, kind);
                         };
@@ -62378,8 +63490,9 @@
                 }
                 return result;
             }
-            function eachPropertyRelatedTo(source, target, kind, reportErrors) {
+            function membersRelatedToIndexInfo(source, targetInfo, reportErrors) {
                 var result = -1 /* True */;
+                var keyType = targetInfo.keyType;
                 var props = source.flags & 2097152 /* Intersection */ ? getPropertiesOfUnionOrIntersectionType(source) : getPropertiesOfObjectType(source);
                 for (var _i = 0, props_2 = props; _i < props_2.length; _i++) {
                     var prop = props_2[_i];
@@ -62387,16 +63500,12 @@
                     if (isIgnoredJsxProperty(source, prop)) {
                         continue;
                     }
-                    var nameType = getSymbolLinks(prop).nameType;
-                    if (nameType && nameType.flags & 8192 /* UniqueESSymbol */) {
-                        continue;
-                    }
-                    if (kind === 0 /* String */ || isNumericLiteralName(prop.escapedName)) {
-                        var propType = getTypeOfSymbol(prop);
-                        var type = propType.flags & 32768 /* Undefined */ || !(kind === 0 /* String */ && prop.flags & 16777216 /* Optional */)
+                    if (isApplicableIndexType(getLiteralTypeFromProperty(prop, 8576 /* StringOrNumberLiteralOrUnique */), keyType)) {
+                        var propType = getNonMissingTypeOfSymbol(prop);
+                        var type = exactOptionalPropertyTypes || propType.flags & 32768 /* Undefined */ || keyType === numberType || !(prop.flags & 16777216 /* Optional */)
                             ? propType
                             : getTypeWithFacts(propType, 524288 /* NEUndefined */);
-                        var related = isRelatedTo(type, target, reportErrors);
+                        var related = isRelatedTo(type, targetInfo.type, reportErrors);
                         if (!related) {
                             if (reportErrors) {
                                 reportError(ts.Diagnostics.Property_0_is_incompatible_with_index_signature, symbolToString(prop));
@@ -62406,67 +63515,77 @@
                         result &= related;
                     }
                 }
+                for (var _a = 0, _b = getIndexInfosOfType(source); _a < _b.length; _a++) {
+                    var info = _b[_a];
+                    if (isApplicableIndexType(info.keyType, keyType)) {
+                        var related = indexInfoRelatedTo(info, targetInfo, reportErrors);
+                        if (!related) {
+                            return 0 /* False */;
+                        }
+                        result &= related;
+                    }
+                }
                 return result;
             }
-            function indexTypeRelatedTo(sourceType, targetType, reportErrors) {
-                var related = isRelatedTo(sourceType, targetType, reportErrors);
+            function indexInfoRelatedTo(sourceInfo, targetInfo, reportErrors) {
+                var related = isRelatedTo(sourceInfo.type, targetInfo.type, reportErrors);
                 if (!related && reportErrors) {
-                    reportError(ts.Diagnostics.Index_signatures_are_incompatible);
+                    if (sourceInfo.keyType === targetInfo.keyType) {
+                        reportError(ts.Diagnostics._0_index_signatures_are_incompatible, typeToString(sourceInfo.keyType));
+                    }
+                    else {
+                        reportError(ts.Diagnostics._0_and_1_index_signatures_are_incompatible, typeToString(sourceInfo.keyType), typeToString(targetInfo.keyType));
+                    }
                 }
                 return related;
             }
-            function indexTypesRelatedTo(source, target, kind, sourceIsPrimitive, reportErrors, intersectionState) {
+            function indexSignaturesRelatedTo(source, target, sourceIsPrimitive, reportErrors, intersectionState) {
                 if (relation === identityRelation) {
-                    return indexTypesIdenticalTo(source, target, kind);
+                    return indexSignaturesIdenticalTo(source, target);
                 }
-                var targetType = getIndexTypeOfType(target, kind);
-                if (!targetType) {
-                    return -1 /* True */;
-                }
-                if (targetType.flags & 1 /* Any */ && !sourceIsPrimitive) {
-                    // An index signature of type `any` permits assignment from everything but primitives,
-                    // provided that there is also a `string` index signature of type `any`.
-                    var stringIndexType = kind === 0 /* String */ ? targetType : getIndexTypeOfType(target, 0 /* String */);
-                    if (stringIndexType && stringIndexType.flags & 1 /* Any */) {
-                        return -1 /* True */;
+                var indexInfos = getIndexInfosOfType(target);
+                var targetHasStringIndex = ts.some(indexInfos, function (info) { return info.keyType === stringType; });
+                var result = -1 /* True */;
+                for (var _i = 0, indexInfos_3 = indexInfos; _i < indexInfos_3.length; _i++) {
+                    var targetInfo = indexInfos_3[_i];
+                    var related = !sourceIsPrimitive && targetHasStringIndex && targetInfo.type.flags & 1 /* Any */ ? -1 /* True */ :
+                        isGenericMappedType(source) && targetHasStringIndex ? isRelatedTo(getTemplateTypeFromMappedType(source), targetInfo.type, reportErrors) :
+                            typeRelatedToIndexInfo(source, targetInfo, reportErrors, intersectionState);
+                    if (!related) {
+                        return 0 /* False */;
                     }
+                    result &= related;
                 }
-                if (isGenericMappedType(source)) {
-                    // A generic mapped type { [P in K]: T } is related to a type with an index signature
-                    // { [x: string]: U }, and optionally with an index signature { [x: number]: V },
-                    // if T is related to U and V.
-                    return getIndexTypeOfType(target, 0 /* String */) ? isRelatedTo(getTemplateTypeFromMappedType(source), targetType, reportErrors) : 0 /* False */;
-                }
-                var indexType = getIndexTypeOfType(source, kind) || kind === 1 /* Number */ && getIndexTypeOfType(source, 0 /* String */);
-                if (indexType) {
-                    return indexTypeRelatedTo(indexType, targetType, reportErrors);
+                return result;
+            }
+            function typeRelatedToIndexInfo(source, targetInfo, reportErrors, intersectionState) {
+                var sourceInfo = getApplicableIndexInfo(source, targetInfo.keyType);
+                if (sourceInfo) {
+                    return indexInfoRelatedTo(sourceInfo, targetInfo, reportErrors);
                 }
                 if (!(intersectionState & 1 /* Source */) && isObjectTypeWithInferableIndex(source)) {
                     // Intersection constituents are never considered to have an inferred index signature
-                    var related = eachPropertyRelatedTo(source, targetType, kind, reportErrors);
-                    if (related && kind === 0 /* String */) {
-                        var numberIndexType = getIndexTypeOfType(source, 1 /* Number */);
-                        if (numberIndexType) {
-                            related &= indexTypeRelatedTo(numberIndexType, targetType, reportErrors);
-                        }
-                    }
-                    return related;
+                    return membersRelatedToIndexInfo(source, targetInfo, reportErrors);
                 }
                 if (reportErrors) {
-                    reportError(ts.Diagnostics.Index_signature_is_missing_in_type_0, typeToString(source));
+                    reportError(ts.Diagnostics.Index_signature_for_type_0_is_missing_in_type_1, typeToString(targetInfo.keyType), typeToString(source));
                 }
                 return 0 /* False */;
             }
-            function indexTypesIdenticalTo(source, target, indexKind) {
-                var targetInfo = getIndexInfoOfType(target, indexKind);
-                var sourceInfo = getIndexInfoOfType(source, indexKind);
-                if (!sourceInfo && !targetInfo) {
-                    return -1 /* True */;
+            function indexSignaturesIdenticalTo(source, target) {
+                var sourceInfos = getIndexInfosOfType(source);
+                var targetInfos = getIndexInfosOfType(target);
+                if (sourceInfos.length !== targetInfos.length) {
+                    return 0 /* False */;
                 }
-                if (sourceInfo && targetInfo && sourceInfo.isReadonly === targetInfo.isReadonly) {
-                    return isRelatedTo(sourceInfo.type, targetInfo.type);
+                for (var _i = 0, targetInfos_1 = targetInfos; _i < targetInfos_1.length; _i++) {
+                    var targetInfo = targetInfos_1[_i];
+                    var sourceInfo = getIndexInfoOfType(source, targetInfo.keyType);
+                    if (!(sourceInfo && isRelatedTo(sourceInfo.type, targetInfo.type) && sourceInfo.isReadonly === targetInfo.isReadonly)) {
+                        return 0 /* False */;
+                    }
                 }
-                return 0 /* False */;
+                return -1 /* True */;
             }
             function constructorVisibilitiesAreCompatible(sourceSignature, targetSignature, reportErrors) {
                 if (!sourceSignature.declaration || !targetSignature.declaration) {
@@ -62562,10 +63681,8 @@
         function isWeakType(type) {
             if (type.flags & 524288 /* Object */) {
                 var resolved = resolveStructuredTypeMembers(type);
-                return resolved.callSignatures.length === 0 && resolved.constructSignatures.length === 0 &&
-                    !resolved.stringIndexInfo && !resolved.numberIndexInfo &&
-                    resolved.properties.length > 0 &&
-                    ts.every(resolved.properties, function (p) { return !!(p.flags & 16777216 /* Optional */); });
+                return resolved.callSignatures.length === 0 && resolved.constructSignatures.length === 0 && resolved.indexInfos.length === 0 &&
+                    resolved.properties.length > 0 && ts.every(resolved.properties, function (p) { return !!(p.flags & 16777216 /* Optional */); });
             }
             if (type.flags & 2097152 /* Intersection */) {
                 return ts.every(type.types, isWeakType);
@@ -62610,7 +63727,7 @@
                 // The emptyArray singleton is used to signal a recursive invocation.
                 cache.variances = ts.emptyArray;
                 variances = [];
-                var _loop_19 = function (tp) {
+                var _loop_21 = function (tp) {
                     var unmeasurable = false;
                     var unreliable = false;
                     var oldHandler = outofbandVarianceMarkerHandler;
@@ -62642,7 +63759,7 @@
                 };
                 for (var _i = 0, typeParameters_1 = typeParameters; _i < typeParameters_1.length; _i++) {
                     var tp = typeParameters_1[_i];
-                    _loop_19(tp);
+                    _loop_21(tp);
                 }
                 cache.variances = variances;
                 ts.tracing === null || ts.tracing === void 0 ? void 0 : ts.tracing.pop();
@@ -62952,8 +64069,8 @@
         }
         function literalTypesWithSameBaseType(types) {
             var commonBaseType;
-            for (var _i = 0, types_14 = types; _i < types_14.length; _i++) {
-                var t = types_14[_i];
+            for (var _i = 0, types_13 = types; _i < types_13.length; _i++) {
+                var t = types_13[_i];
                 var baseType = getBaseTypeOfLiteralType(t);
                 if (!commonBaseType) {
                     commonBaseType = baseType;
@@ -63014,6 +64131,14 @@
             }
             type.objectFlags |= 33554432 /* IdenticalBaseTypeCalculated */;
             var target = type.target;
+            if (ts.getObjectFlags(target) & 1 /* Class */) {
+                var baseTypeNode = getBaseTypeNodeOfClass(target);
+                // A base type expression may circularly reference the class itself (e.g. as an argument to function call), so we only
+                // check for base types specified as simple qualified names.
+                if (baseTypeNode && baseTypeNode.expression.kind !== 79 /* Identifier */ && baseTypeNode.expression.kind !== 204 /* PropertyAccessExpression */) {
+                    return undefined;
+                }
+            }
             var bases = getBaseTypes(target);
             if (bases.length !== 1) {
                 return undefined;
@@ -63028,9 +64153,12 @@
             type.objectFlags |= 67108864 /* IdenticalBaseTypeExists */;
             return type.cachedEquivalentBaseType = instantiatedBase;
         }
+        function isEmptyLiteralType(type) {
+            return strictNullChecks ? type === implicitNeverType : type === undefinedWideningType;
+        }
         function isEmptyArrayLiteralType(type) {
             var elementType = getElementTypeOfArrayType(type);
-            return strictNullChecks ? elementType === implicitNeverType : elementType === undefinedWideningType;
+            return !!elementType && isEmptyLiteralType(elementType);
         }
         function isTupleLikeType(type) {
             return isTupleType(type) || !!getPropertyOfType(type, "0");
@@ -63157,8 +64285,8 @@
         }
         function getFalsyFlagsOfTypes(types) {
             var result = 0;
-            for (var _i = 0, types_15 = types; _i < types_15.length; _i++) {
-                var t = types_15[_i];
+            for (var _i = 0, types_14 = types; _i < types_14.length; _i++) {
+                var t = types_14[_i];
                 result |= getFalsyFlags(t);
             }
             return result;
@@ -63206,9 +64334,10 @@
                     missing === 65536 /* Null */ ? getUnionType([type, nullType]) :
                         getUnionType([type, undefinedType, nullType]);
         }
-        function getOptionalType(type) {
+        function getOptionalType(type, isProperty) {
+            if (isProperty === void 0) { isProperty = false; }
             ts.Debug.assert(strictNullChecks);
-            return type.flags & 32768 /* Undefined */ ? type : getUnionType([type, undefinedType]);
+            return type.flags & 32768 /* Undefined */ ? type : getUnionType([type, isProperty ? missingType : undefinedType]);
         }
         function getGlobalNonNullableTypeInstantiation(type) {
             // First reduce away any constituents that are assignable to 'undefined' or 'null'. This not only eliminates
@@ -63229,11 +64358,8 @@
         function addOptionalTypeMarker(type) {
             return strictNullChecks ? getUnionType([type, optionalType]) : type;
         }
-        function isNotOptionalTypeMarker(type) {
-            return type !== optionalType;
-        }
         function removeOptionalTypeMarker(type) {
-            return strictNullChecks ? filterType(type, isNotOptionalTypeMarker) : type;
+            return strictNullChecks ? removeType(type, optionalType) : type;
         }
         function propagateOptionalTypeMarker(type, node, wasOptional) {
             return wasOptional ? ts.isOutermostOptionalChain(node) ? getOptionalType(type) : addOptionalTypeMarker(type) : type;
@@ -63243,6 +64369,15 @@
                 ts.isOptionalChain(expression) ? removeOptionalTypeMarker(exprType) :
                     exprType;
         }
+        function removeMissingType(type, isOptional) {
+            return exactOptionalPropertyTypes && isOptional ? removeType(type, missingType) : type;
+        }
+        function containsMissingType(type) {
+            return exactOptionalPropertyTypes && (type === missingType || type.flags & 1048576 /* Union */ && containsType(type.types, missingType));
+        }
+        function removeMissingOrUndefinedType(type) {
+            return exactOptionalPropertyTypes ? removeType(type, missingType) : getTypeWithFacts(type, 524288 /* NEUndefined */);
+        }
         /**
          * Is source potentially coercible to target type under `==`.
          * Assumes that `source` is a constituent of a union, hence
@@ -63316,7 +64451,7 @@
             }
             var resolved = type;
             var members = transformTypeOfMembers(type, getRegularTypeOfObjectLiteral);
-            var regularNew = createAnonymousType(resolved.symbol, members, resolved.callSignatures, resolved.constructSignatures, resolved.stringIndexInfo, resolved.numberIndexInfo);
+            var regularNew = createAnonymousType(resolved.symbol, members, resolved.callSignatures, resolved.constructSignatures, resolved.indexInfos);
             regularNew.flags = resolved.flags;
             regularNew.objectFlags |= resolved.objectFlags & ~16384 /* FreshLiteral */;
             type.regularType = regularNew;
@@ -63375,7 +64510,7 @@
             if (cached) {
                 return cached;
             }
-            var result = createSymbolWithType(prop, undefinedType);
+            var result = createSymbolWithType(prop, missingType);
             result.flags |= 16777216 /* Optional */;
             undefinedProperties.set(prop.escapedName, result);
             return result;
@@ -63394,9 +64529,7 @@
                     }
                 }
             }
-            var stringIndexInfo = getIndexInfoOfType(type, 0 /* String */);
-            var numberIndexInfo = getIndexInfoOfType(type, 1 /* Number */);
-            var result = createAnonymousType(type.symbol, members, ts.emptyArray, ts.emptyArray, stringIndexInfo && createIndexInfo(getWidenedType(stringIndexInfo.type), stringIndexInfo.isReadonly), numberIndexInfo && createIndexInfo(getWidenedType(numberIndexInfo.type), numberIndexInfo.isReadonly));
+            var result = createAnonymousType(type.symbol, members, ts.emptyArray, ts.emptyArray, ts.sameMap(getIndexInfosOfType(type), function (info) { return createIndexInfo(info.keyType, getWidenedType(info.type), info.isReadonly); }));
             result.objectFlags |= (ts.getObjectFlags(type) & (8192 /* JSLiteral */ | 524288 /* NonInferrableType */)); // Retain js literal flag through widening
             return result;
         }
@@ -63494,12 +64627,12 @@
             }
             var diagnostic;
             switch (declaration.kind) {
-                case 217 /* BinaryExpression */:
-                case 164 /* PropertyDeclaration */:
-                case 163 /* PropertySignature */:
+                case 219 /* BinaryExpression */:
+                case 165 /* PropertyDeclaration */:
+                case 164 /* PropertySignature */:
                     diagnostic = noImplicitAny ? ts.Diagnostics.Member_0_implicitly_has_an_1_type : ts.Diagnostics.Member_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage;
                     break;
-                case 161 /* Parameter */:
+                case 162 /* Parameter */:
                     var param = declaration;
                     if (ts.isIdentifier(param.name) &&
                         (ts.isCallSignatureDeclaration(param.parent) || ts.isMethodSignature(param.parent) || ts.isFunctionTypeNode(param.parent)) &&
@@ -63514,23 +64647,23 @@
                         noImplicitAny ? ts.Diagnostics.Rest_parameter_0_implicitly_has_an_any_type : ts.Diagnostics.Rest_parameter_0_implicitly_has_an_any_type_but_a_better_type_may_be_inferred_from_usage :
                         noImplicitAny ? ts.Diagnostics.Parameter_0_implicitly_has_an_1_type : ts.Diagnostics.Parameter_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage;
                     break;
-                case 199 /* BindingElement */:
+                case 201 /* BindingElement */:
                     diagnostic = ts.Diagnostics.Binding_element_0_implicitly_has_an_1_type;
                     if (!noImplicitAny) {
                         // Don't issue a suggestion for binding elements since the codefix doesn't yet support them.
                         return;
                     }
                     break;
-                case 309 /* JSDocFunctionType */:
+                case 312 /* JSDocFunctionType */:
                     error(declaration, ts.Diagnostics.Function_type_which_lacks_return_type_annotation_implicitly_has_an_0_return_type, typeAsString);
                     return;
-                case 252 /* FunctionDeclaration */:
-                case 166 /* MethodDeclaration */:
-                case 165 /* MethodSignature */:
-                case 168 /* GetAccessor */:
-                case 169 /* SetAccessor */:
-                case 209 /* FunctionExpression */:
-                case 210 /* ArrowFunction */:
+                case 254 /* FunctionDeclaration */:
+                case 167 /* MethodDeclaration */:
+                case 166 /* MethodSignature */:
+                case 170 /* GetAccessor */:
+                case 171 /* SetAccessor */:
+                case 211 /* FunctionExpression */:
+                case 212 /* ArrowFunction */:
                     if (noImplicitAny && !declaration.name) {
                         if (wideningKind === 3 /* GeneratorYield */) {
                             error(declaration, ts.Diagnostics.Generator_implicitly_has_yield_type_0_because_it_does_not_yield_any_values_Consider_supplying_a_return_type_annotation, typeAsString);
@@ -63544,7 +64677,7 @@
                         wideningKind === 3 /* GeneratorYield */ ? ts.Diagnostics._0_which_lacks_return_type_annotation_implicitly_has_an_1_yield_type :
                             ts.Diagnostics._0_which_lacks_return_type_annotation_implicitly_has_an_1_return_type;
                     break;
-                case 191 /* MappedType */:
+                case 193 /* MappedType */:
                     if (noImplicitAny) {
                         error(declaration, ts.Diagnostics.Mapped_object_type_implicitly_has_an_any_template_type);
                     }
@@ -63686,8 +64819,8 @@
         }
         function isNonGenericTopLevelType(type) {
             if (type.aliasSymbol && !type.aliasTypeArguments) {
-                var declaration = ts.getDeclarationOfKind(type.aliasSymbol, 255 /* TypeAliasDeclaration */);
-                return !!(declaration && ts.findAncestor(declaration.parent, function (n) { return n.kind === 298 /* SourceFile */ ? true : n.kind === 257 /* ModuleDeclaration */ ? false : "quit"; }));
+                var declaration = ts.getDeclarationOfKind(type.aliasSymbol, 257 /* TypeAliasDeclaration */);
+                return !!(declaration && ts.findAncestor(declaration.parent, function (n) { return n.kind === 300 /* SourceFile */ ? true : n.kind === 259 /* ModuleDeclaration */ ? false : "quit"; }));
             }
             return false;
         }
@@ -63712,8 +64845,8 @@
                 }
                 members.set(name, literalProp);
             });
-            var indexInfo = type.flags & 4 /* String */ ? createIndexInfo(emptyObjectType, /*isReadonly*/ false) : undefined;
-            return createAnonymousType(undefined, members, ts.emptyArray, ts.emptyArray, indexInfo, undefined);
+            var indexInfos = type.flags & 4 /* String */ ? [createIndexInfo(stringType, emptyObjectType, /*isReadonly*/ false)] : ts.emptyArray;
+            return createAnonymousType(undefined, members, ts.emptyArray, ts.emptyArray, indexInfos);
         }
         /**
          * Infer a suitable input type for a homomorphic mapped type { [P in keyof T]: X }. We construct
@@ -63747,7 +64880,7 @@
         function createReverseMappedType(source, target, constraint) {
             // We consider a source type reverse mappable if it has a string index signature or if
             // it has one or more properties and is of a partially inferable type.
-            if (!(getIndexInfoOfType(source, 0 /* String */) || getPropertiesOfType(source).length !== 0 && isPartiallyInferableType(source))) {
+            if (!(getIndexInfoOfType(source, stringType) || getPropertiesOfType(source).length !== 0 && isPartiallyInferableType(source))) {
                 return undefined;
             }
             // For arrays and tuples we infer new arrays and tuples where the reverse mapping has been
@@ -63961,8 +65094,8 @@
             }
             function addMatch(s, p) {
                 var matchType = s === seg ?
-                    getLiteralType(getSourceText(s).slice(pos, p)) :
-                    getTemplateLiteralType(__spreadArray(__spreadArray([sourceTexts[seg].slice(pos)], sourceTexts.slice(seg + 1, s)), [getSourceText(s).slice(0, p)]), sourceTypes.slice(seg, s));
+                    getStringLiteralType(getSourceText(s).slice(pos, p)) :
+                    getTemplateLiteralType(__spreadArray(__spreadArray([sourceTexts[seg].slice(pos)], sourceTexts.slice(seg + 1, s), true), [getSourceText(s).slice(0, p)], false), sourceTypes.slice(seg, s));
                 matches.push(matchType);
                 seg = s;
                 pos = p;
@@ -64281,8 +65414,8 @@
             }
             function getSingleTypeVariableFromIntersectionTypes(types) {
                 var typeVariable;
-                for (var _i = 0, types_16 = types; _i < types_16.length; _i++) {
-                    var type = types_16[_i];
+                for (var _i = 0, types_15 = types; _i < types_15.length; _i++) {
+                    var type = types_15[_i];
                     var t = type.flags & 2097152 /* Intersection */ && ts.find(type.types, function (t) { return !!getInferenceInfoForType(t); });
                     if (!t || typeVariable && t !== typeVariable) {
                         return undefined;
@@ -64412,10 +65545,8 @@
                     // If no inferences can be made to K's constraint, infer from a union of the property types
                     // in the source to the template type X.
                     var propTypes = ts.map(getPropertiesOfType(source), getTypeOfSymbol);
-                    var stringIndexType = getIndexTypeOfType(source, 0 /* String */);
-                    var numberIndexInfo = getNonEnumNumberIndexInfo(source);
-                    var numberIndexType = numberIndexInfo && numberIndexInfo.type;
-                    inferFromTypes(getUnionType(ts.append(ts.append(propTypes, stringIndexType), numberIndexType)), getTemplateTypeFromMappedType(target));
+                    var indexTypes = ts.map(getIndexInfosOfType(source), function (info) { return info !== enumNumberIndexInfo ? info.type : neverType; });
+                    inferFromTypes(getUnionType(ts.concatenate(propTypes, indexTypes)), getTemplateTypeFromMappedType(target));
                     return true;
                 }
                 return false;
@@ -64562,7 +65693,7 @@
                     var saveBivariant = bivariant;
                     var kind = target.declaration ? target.declaration.kind : 0 /* Unknown */;
                     // Once we descend into a bivariant signature we remain bivariant for all nested inferences
-                    bivariant = bivariant || kind === 166 /* MethodDeclaration */ || kind === 165 /* MethodSignature */ || kind === 167 /* Constructor */;
+                    bivariant = bivariant || kind === 167 /* MethodDeclaration */ || kind === 166 /* MethodSignature */ || kind === 169 /* Constructor */;
                     applyToParameterTypes(source, target, inferFromContravariantTypes);
                     bivariant = saveBivariant;
                 }
@@ -64571,27 +65702,41 @@
             function inferFromIndexTypes(source, target) {
                 // Inferences across mapped type index signatures are pretty much the same a inferences to homomorphic variables
                 var priority = (ts.getObjectFlags(source) & ts.getObjectFlags(target) & 32 /* Mapped */) ? 8 /* HomomorphicMappedType */ : 0;
-                var targetStringIndexType = getIndexTypeOfType(target, 0 /* String */);
-                if (targetStringIndexType) {
-                    var sourceIndexType = getIndexTypeOfType(source, 0 /* String */) ||
-                        getImplicitIndexTypeOfType(source, 0 /* String */);
-                    if (sourceIndexType) {
-                        inferWithPriority(sourceIndexType, targetStringIndexType, priority);
+                var indexInfos = getIndexInfosOfType(target);
+                if (isObjectTypeWithInferableIndex(source)) {
+                    for (var _i = 0, indexInfos_4 = indexInfos; _i < indexInfos_4.length; _i++) {
+                        var targetInfo = indexInfos_4[_i];
+                        var propTypes = [];
+                        for (var _a = 0, _b = getPropertiesOfType(source); _a < _b.length; _a++) {
+                            var prop = _b[_a];
+                            if (isApplicableIndexType(getLiteralTypeFromProperty(prop, 8576 /* StringOrNumberLiteralOrUnique */), targetInfo.keyType)) {
+                                var propType = getTypeOfSymbol(prop);
+                                propTypes.push(prop.flags & 16777216 /* Optional */ ? removeMissingOrUndefinedType(propType) : propType);
+                            }
+                        }
+                        for (var _c = 0, _d = getIndexInfosOfType(source); _c < _d.length; _c++) {
+                            var info = _d[_c];
+                            if (isApplicableIndexType(info.keyType, targetInfo.keyType)) {
+                                propTypes.push(info.type);
+                            }
+                        }
+                        if (propTypes.length) {
+                            inferWithPriority(getUnionType(propTypes), targetInfo.type, priority);
+                        }
                     }
                 }
-                var targetNumberIndexType = getIndexTypeOfType(target, 1 /* Number */);
-                if (targetNumberIndexType) {
-                    var sourceIndexType = getIndexTypeOfType(source, 1 /* Number */) ||
-                        getIndexTypeOfType(source, 0 /* String */) ||
-                        getImplicitIndexTypeOfType(source, 1 /* Number */);
-                    if (sourceIndexType) {
-                        inferWithPriority(sourceIndexType, targetNumberIndexType, priority);
+                for (var _e = 0, indexInfos_5 = indexInfos; _e < indexInfos_5.length; _e++) {
+                    var targetInfo = indexInfos_5[_e];
+                    var sourceInfo = getApplicableIndexInfo(source, targetInfo.keyType);
+                    if (sourceInfo) {
+                        inferWithPriority(sourceInfo.type, targetInfo.type, priority);
                     }
                 }
             }
         }
         function isTypeOrBaseIdenticalTo(s, t) {
-            return isTypeIdenticalTo(s, t) || !!(t.flags & 4 /* String */ && s.flags & 128 /* StringLiteral */ || t.flags & 8 /* Number */ && s.flags & 256 /* NumberLiteral */);
+            return exactOptionalPropertyTypes && t === missingType ? s === t :
+                (isTypeIdenticalTo(s, t) || !!(t.flags & 4 /* String */ && s.flags & 128 /* StringLiteral */ || t.flags & 8 /* Number */ && s.flags & 256 /* NumberLiteral */));
         }
         function isTypeCloselyMatchedBy(s, t) {
             return !!(s.flags & 524288 /* Object */ && t.flags & 524288 /* Object */ && s.symbol && s.symbol === t.symbol ||
@@ -64744,7 +65889,7 @@
                 case "BigUint64Array":
                     return ts.Diagnostics.Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_1_or_later;
                 default:
-                    if (node.parent.kind === 290 /* ShorthandPropertyAssignment */) {
+                    if (node.parent.kind === 292 /* ShorthandPropertyAssignment */) {
                         return ts.Diagnostics.No_value_exists_in_scope_for_the_shorthand_property_0_Either_declare_one_or_provide_an_initializer;
                     }
                     else {
@@ -64757,7 +65902,8 @@
             if (!links.resolvedSymbol) {
                 links.resolvedSymbol = !ts.nodeIsMissing(node) &&
                     resolveName(node, node.escapedText, 111551 /* Value */ | 1048576 /* ExportValue */, getCannotFindNameDiagnosticForName(node), node, !ts.isWriteOnlyAccess(node), 
-                    /*excludeGlobals*/ false, ts.Diagnostics.Cannot_find_name_0_Did_you_mean_1) || unknownSymbol;
+                    /*excludeGlobals*/ false, 
+                    /*issueSuggestions*/ true) || unknownSymbol;
             }
             return links.resolvedSymbol;
         }
@@ -64765,7 +65911,7 @@
             // TypeScript 1.0 spec (April 2014): 3.6.3
             // A type query consists of the keyword typeof followed by an expression.
             // The expression is restricted to a single identifier or a sequence of identifiers separated by periods
-            return !!ts.findAncestor(node, function (n) { return n.kind === 177 /* TypeQuery */ ? true : n.kind === 78 /* Identifier */ || n.kind === 158 /* QualifiedName */ ? false : "quit"; });
+            return !!ts.findAncestor(node, function (n) { return n.kind === 179 /* TypeQuery */ ? true : n.kind === 79 /* Identifier */ || n.kind === 159 /* QualifiedName */ ? false : "quit"; });
         }
         // Return the flow cache key for a "dotted name" (i.e. a sequence of identifiers
         // separated by dots). The key consists of the id of the symbol referenced by the
@@ -64773,16 +65919,19 @@
         // The result is undefined if the reference isn't a dotted name.
         function getFlowCacheKey(node, declaredType, initialType, flowContainer) {
             switch (node.kind) {
-                case 78 /* Identifier */:
+                case 79 /* Identifier */:
                     var symbol = getResolvedSymbol(node);
                     return symbol !== unknownSymbol ? (flowContainer ? getNodeId(flowContainer) : "-1") + "|" + getTypeId(declaredType) + "|" + getTypeId(initialType) + "|" + getSymbolId(symbol) : undefined;
-                case 107 /* ThisKeyword */:
+                case 108 /* ThisKeyword */:
                     return "0|" + (flowContainer ? getNodeId(flowContainer) : "-1") + "|" + getTypeId(declaredType) + "|" + getTypeId(initialType);
-                case 226 /* NonNullExpression */:
-                case 208 /* ParenthesizedExpression */:
+                case 228 /* NonNullExpression */:
+                case 210 /* ParenthesizedExpression */:
                     return getFlowCacheKey(node.expression, declaredType, initialType, flowContainer);
-                case 202 /* PropertyAccessExpression */:
-                case 203 /* ElementAccessExpression */:
+                case 159 /* QualifiedName */:
+                    var left = getFlowCacheKey(node.left, declaredType, initialType, flowContainer);
+                    return left && left + "." + node.right.escapedText;
+                case 204 /* PropertyAccessExpression */:
+                case 205 /* ElementAccessExpression */:
                     var propName = getAccessedPropertyName(node);
                     if (propName !== undefined) {
                         var key = getFlowCacheKey(node.expression, declaredType, initialType, flowContainer);
@@ -64793,40 +65942,42 @@
         }
         function isMatchingReference(source, target) {
             switch (target.kind) {
-                case 208 /* ParenthesizedExpression */:
-                case 226 /* NonNullExpression */:
+                case 210 /* ParenthesizedExpression */:
+                case 228 /* NonNullExpression */:
                     return isMatchingReference(source, target.expression);
-                case 217 /* BinaryExpression */:
+                case 219 /* BinaryExpression */:
                     return (ts.isAssignmentExpression(target) && isMatchingReference(source, target.left)) ||
                         (ts.isBinaryExpression(target) && target.operatorToken.kind === 27 /* CommaToken */ && isMatchingReference(source, target.right));
             }
             switch (source.kind) {
-                case 227 /* MetaProperty */:
-                    return target.kind === 227 /* MetaProperty */
+                case 229 /* MetaProperty */:
+                    return target.kind === 229 /* MetaProperty */
                         && source.keywordToken === target.keywordToken
                         && source.name.escapedText === target.name.escapedText;
-                case 78 /* Identifier */:
-                case 79 /* PrivateIdentifier */:
-                    return target.kind === 78 /* Identifier */ && getResolvedSymbol(source) === getResolvedSymbol(target) ||
-                        (target.kind === 250 /* VariableDeclaration */ || target.kind === 199 /* BindingElement */) &&
-                            getExportSymbolOfValueSymbolIfExported(getResolvedSymbol(source)) === getSymbolOfNode(target);
-                case 107 /* ThisKeyword */:
-                    return target.kind === 107 /* ThisKeyword */;
-                case 105 /* SuperKeyword */:
-                    return target.kind === 105 /* SuperKeyword */;
-                case 226 /* NonNullExpression */:
-                case 208 /* ParenthesizedExpression */:
+                case 79 /* Identifier */:
+                case 80 /* PrivateIdentifier */:
+                    return ts.isThisInTypeQuery(source) ?
+                        target.kind === 108 /* ThisKeyword */ :
+                        target.kind === 79 /* Identifier */ && getResolvedSymbol(source) === getResolvedSymbol(target) ||
+                            (target.kind === 252 /* VariableDeclaration */ || target.kind === 201 /* BindingElement */) &&
+                                getExportSymbolOfValueSymbolIfExported(getResolvedSymbol(source)) === getSymbolOfNode(target);
+                case 108 /* ThisKeyword */:
+                    return target.kind === 108 /* ThisKeyword */;
+                case 106 /* SuperKeyword */:
+                    return target.kind === 106 /* SuperKeyword */;
+                case 228 /* NonNullExpression */:
+                case 210 /* ParenthesizedExpression */:
                     return isMatchingReference(source.expression, target);
-                case 202 /* PropertyAccessExpression */:
-                case 203 /* ElementAccessExpression */:
+                case 204 /* PropertyAccessExpression */:
+                case 205 /* ElementAccessExpression */:
                     return ts.isAccessExpression(target) &&
                         getAccessedPropertyName(source) === getAccessedPropertyName(target) &&
                         isMatchingReference(source.expression, target.expression);
-                case 158 /* QualifiedName */:
+                case 159 /* QualifiedName */:
                     return ts.isAccessExpression(target) &&
                         source.right.escapedText === getAccessedPropertyName(target) &&
                         isMatchingReference(source.left, target.expression);
-                case 217 /* BinaryExpression */:
+                case 219 /* BinaryExpression */:
                     return (ts.isBinaryExpression(source) && source.operatorToken.kind === 27 /* CommaToken */ && isMatchingReference(source.right, target));
             }
             return false;
@@ -64834,13 +65985,38 @@
         // Given a source x, check if target matches x or is an && operation with an operand that matches x.
         function containsTruthyCheck(source, target) {
             return isMatchingReference(source, target) ||
-                (target.kind === 217 /* BinaryExpression */ && target.operatorToken.kind === 55 /* AmpersandAmpersandToken */ &&
+                (target.kind === 219 /* BinaryExpression */ && target.operatorToken.kind === 55 /* AmpersandAmpersandToken */ &&
                     (containsTruthyCheck(source, target.left) || containsTruthyCheck(source, target.right)));
         }
+        function getPropertyAccess(expr) {
+            if (ts.isAccessExpression(expr)) {
+                return expr;
+            }
+            if (ts.isIdentifier(expr)) {
+                var symbol = getResolvedSymbol(expr);
+                if (isConstVariable(symbol)) {
+                    var declaration = symbol.valueDeclaration;
+                    // Given 'const x = obj.kind', allow 'x' as an alias for 'obj.kind'
+                    if (ts.isVariableDeclaration(declaration) && !declaration.type && declaration.initializer && ts.isAccessExpression(declaration.initializer)) {
+                        return declaration.initializer;
+                    }
+                    // Given 'const { kind: x } = obj', allow 'x' as an alias for 'obj.kind'
+                    if (ts.isBindingElement(declaration) && !declaration.initializer) {
+                        var parent = declaration.parent.parent;
+                        if (ts.isVariableDeclaration(parent) && !parent.type && parent.initializer && (ts.isIdentifier(parent.initializer) || ts.isAccessExpression(parent.initializer))) {
+                            return declaration;
+                        }
+                    }
+                }
+            }
+            return undefined;
+        }
         function getAccessedPropertyName(access) {
-            return access.kind === 202 /* PropertyAccessExpression */ ? access.name.escapedText :
-                ts.isStringOrNumericLiteralLike(access.argumentExpression) ? ts.escapeLeadingUnderscores(access.argumentExpression.text) :
-                    undefined;
+            var propertyName;
+            return access.kind === 204 /* PropertyAccessExpression */ ? access.name.escapedText :
+                access.kind === 205 /* ElementAccessExpression */ && ts.isStringOrNumericLiteralLike(access.argumentExpression) ? ts.escapeLeadingUnderscores(access.argumentExpression.text) :
+                    access.kind === 201 /* BindingElement */ && (propertyName = getDestructuringPropertyName(access)) ? ts.escapeLeadingUnderscores(propertyName) :
+                        undefined;
         }
         function containsMatchingReference(source, target) {
             while (ts.isAccessExpression(source)) {
@@ -64867,7 +66043,7 @@
                     if (prop.isDiscriminantProperty === undefined) {
                         prop.isDiscriminantProperty =
                             (prop.checkFlags & 192 /* Discriminant */) === 192 /* Discriminant */ &&
-                                !maybeTypeOfKind(getTypeOfSymbol(prop), 465829888 /* Instantiable */);
+                                !maybeTypeOfKind(getTypeOfSymbol(prop), 465829888 /* Instantiable */ & ~134217728 /* TemplateLiteral */);
                     }
                     return !!prop.isDiscriminantProperty;
                 }
@@ -64895,7 +66071,7 @@
         function mapTypesByKeyProperty(types, name) {
             var map = new ts.Map();
             var count = 0;
-            var _loop_20 = function (type) {
+            var _loop_22 = function (type) {
                 if (type.flags & (524288 /* Object */ | 2097152 /* Intersection */ | 58982400 /* InstantiableNonPrimitive */)) {
                     var discriminant = getTypeOfPropertyOfType(type, name);
                     if (discriminant) {
@@ -64919,9 +66095,9 @@
                     }
                 }
             };
-            for (var _i = 0, types_17 = types; _i < types_17.length; _i++) {
-                var type = types_17[_i];
-                var state_8 = _loop_20(type);
+            for (var _i = 0, types_16 = types; _i < types_16.length; _i++) {
+                var type = types_16[_i];
+                var state_8 = _loop_22(type);
                 if (typeof state_8 === "object")
                     return state_8.value;
             }
@@ -64963,7 +66139,7 @@
         }
         function getMatchingUnionConstituentForObjectLiteral(unionType, node) {
             var keyPropertyName = getKeyPropertyName(unionType);
-            var propNode = keyPropertyName && ts.find(node.properties, function (p) { return p.symbol && p.kind === 289 /* PropertyAssignment */ &&
+            var propNode = keyPropertyName && ts.find(node.properties, function (p) { return p.symbol && p.kind === 291 /* PropertyAssignment */ &&
                 p.symbol.escapedName === keyPropertyName && isPossiblyDiscriminantValue(p.initializer); });
             var propType = propNode && getTypeOfExpression(propNode.initializer);
             return propType && getConstituentTypeForKeyType(unionType, propType);
@@ -64980,7 +66156,7 @@
                     }
                 }
             }
-            if (expression.expression.kind === 202 /* PropertyAccessExpression */ &&
+            if (expression.expression.kind === 204 /* PropertyAccessExpression */ &&
                 isOrContainsMatchingReference(reference, expression.expression.expression)) {
                 return true;
             }
@@ -65118,14 +66294,12 @@
                 type;
         }
         function getTypeOfDestructuredProperty(type, name) {
+            var _a;
             var nameType = getLiteralTypeFromPropertyName(name);
             if (!isTypeUsableAsPropertyName(nameType))
                 return errorType;
             var text = getPropertyNameFromType(nameType);
-            return getTypeOfPropertyOfType(type, text) ||
-                isNumericLiteralName(text) && includeUndefinedInIndexSignature(getIndexTypeOfType(type, 1 /* Number */)) ||
-                includeUndefinedInIndexSignature(getIndexTypeOfType(type, 0 /* String */)) ||
-                errorType;
+            return getTypeOfPropertyOfType(type, text) || includeUndefinedInIndexSignature((_a = getApplicableIndexInfoForName(type, text)) === null || _a === void 0 ? void 0 : _a.type) || errorType;
         }
         function getTypeOfDestructuredArrayElement(type, index) {
             return everyType(type, isTupleLikeType) && getTupleElementType(type, index) ||
@@ -65143,15 +66317,15 @@
             return createArrayType(checkIteratedTypeOrElementType(65 /* Destructuring */, type, undefinedType, /*errorNode*/ undefined) || errorType);
         }
         function getAssignedTypeOfBinaryExpression(node) {
-            var isDestructuringDefaultAssignment = node.parent.kind === 200 /* ArrayLiteralExpression */ && isDestructuringAssignmentTarget(node.parent) ||
-                node.parent.kind === 289 /* PropertyAssignment */ && isDestructuringAssignmentTarget(node.parent.parent);
+            var isDestructuringDefaultAssignment = node.parent.kind === 202 /* ArrayLiteralExpression */ && isDestructuringAssignmentTarget(node.parent) ||
+                node.parent.kind === 291 /* PropertyAssignment */ && isDestructuringAssignmentTarget(node.parent.parent);
             return isDestructuringDefaultAssignment ?
                 getTypeWithDefault(getAssignedType(node), node.right) :
                 getTypeOfExpression(node.right);
         }
         function isDestructuringAssignmentTarget(parent) {
-            return parent.parent.kind === 217 /* BinaryExpression */ && parent.parent.left === parent ||
-                parent.parent.kind === 240 /* ForOfStatement */ && parent.parent.initializer === parent;
+            return parent.parent.kind === 219 /* BinaryExpression */ && parent.parent.left === parent ||
+                parent.parent.kind === 242 /* ForOfStatement */ && parent.parent.initializer === parent;
         }
         function getAssignedTypeOfArrayLiteralElement(node, element) {
             return getTypeOfDestructuredArrayElement(getAssignedType(node), node.elements.indexOf(element));
@@ -65168,21 +66342,21 @@
         function getAssignedType(node) {
             var parent = node.parent;
             switch (parent.kind) {
-                case 239 /* ForInStatement */:
+                case 241 /* ForInStatement */:
                     return stringType;
-                case 240 /* ForOfStatement */:
+                case 242 /* ForOfStatement */:
                     return checkRightHandSideOfForOf(parent) || errorType;
-                case 217 /* BinaryExpression */:
+                case 219 /* BinaryExpression */:
                     return getAssignedTypeOfBinaryExpression(parent);
-                case 211 /* DeleteExpression */:
+                case 213 /* DeleteExpression */:
                     return undefinedType;
-                case 200 /* ArrayLiteralExpression */:
+                case 202 /* ArrayLiteralExpression */:
                     return getAssignedTypeOfArrayLiteralElement(parent, node);
-                case 221 /* SpreadElement */:
+                case 223 /* SpreadElement */:
                     return getAssignedTypeOfSpreadExpression(parent);
-                case 289 /* PropertyAssignment */:
+                case 291 /* PropertyAssignment */:
                     return getAssignedTypeOfPropertyAssignment(parent);
-                case 290 /* ShorthandPropertyAssignment */:
+                case 292 /* ShorthandPropertyAssignment */:
                     return getAssignedTypeOfShorthandPropertyAssignment(parent);
             }
             return errorType;
@@ -65190,7 +66364,7 @@
         function getInitialTypeOfBindingElement(node) {
             var pattern = node.parent;
             var parentType = getInitialType(pattern.parent);
-            var type = pattern.kind === 197 /* ObjectBindingPattern */ ?
+            var type = pattern.kind === 199 /* ObjectBindingPattern */ ?
                 getTypeOfDestructuredProperty(parentType, node.propertyName || node.name) :
                 !node.dotDotDotToken ?
                     getTypeOfDestructuredArrayElement(parentType, pattern.elements.indexOf(node)) :
@@ -65208,35 +66382,35 @@
             if (node.initializer) {
                 return getTypeOfInitializer(node.initializer);
             }
-            if (node.parent.parent.kind === 239 /* ForInStatement */) {
+            if (node.parent.parent.kind === 241 /* ForInStatement */) {
                 return stringType;
             }
-            if (node.parent.parent.kind === 240 /* ForOfStatement */) {
+            if (node.parent.parent.kind === 242 /* ForOfStatement */) {
                 return checkRightHandSideOfForOf(node.parent.parent) || errorType;
             }
             return errorType;
         }
         function getInitialType(node) {
-            return node.kind === 250 /* VariableDeclaration */ ?
+            return node.kind === 252 /* VariableDeclaration */ ?
                 getInitialTypeOfVariableDeclaration(node) :
                 getInitialTypeOfBindingElement(node);
         }
         function isEmptyArrayAssignment(node) {
-            return node.kind === 250 /* VariableDeclaration */ && node.initializer &&
+            return node.kind === 252 /* VariableDeclaration */ && node.initializer &&
                 isEmptyArrayLiteral(node.initializer) ||
-                node.kind !== 199 /* BindingElement */ && node.parent.kind === 217 /* BinaryExpression */ &&
+                node.kind !== 201 /* BindingElement */ && node.parent.kind === 219 /* BinaryExpression */ &&
                     isEmptyArrayLiteral(node.parent.right);
         }
         function getReferenceCandidate(node) {
             switch (node.kind) {
-                case 208 /* ParenthesizedExpression */:
+                case 210 /* ParenthesizedExpression */:
                     return getReferenceCandidate(node.expression);
-                case 217 /* BinaryExpression */:
+                case 219 /* BinaryExpression */:
                     switch (node.operatorToken.kind) {
-                        case 62 /* EqualsToken */:
-                        case 74 /* BarBarEqualsToken */:
-                        case 75 /* AmpersandAmpersandEqualsToken */:
-                        case 76 /* QuestionQuestionEqualsToken */:
+                        case 63 /* EqualsToken */:
+                        case 75 /* BarBarEqualsToken */:
+                        case 76 /* AmpersandAmpersandEqualsToken */:
+                        case 77 /* QuestionQuestionEqualsToken */:
                             return getReferenceCandidate(node.left);
                         case 27 /* CommaToken */:
                             return getReferenceCandidate(node.right);
@@ -65246,13 +66420,13 @@
         }
         function getReferenceRoot(node) {
             var parent = node.parent;
-            return parent.kind === 208 /* ParenthesizedExpression */ ||
-                parent.kind === 217 /* BinaryExpression */ && parent.operatorToken.kind === 62 /* EqualsToken */ && parent.left === node ||
-                parent.kind === 217 /* BinaryExpression */ && parent.operatorToken.kind === 27 /* CommaToken */ && parent.right === node ?
+            return parent.kind === 210 /* ParenthesizedExpression */ ||
+                parent.kind === 219 /* BinaryExpression */ && parent.operatorToken.kind === 63 /* EqualsToken */ && parent.left === node ||
+                parent.kind === 219 /* BinaryExpression */ && parent.operatorToken.kind === 27 /* CommaToken */ && parent.right === node ?
                 getReferenceRoot(parent) : node;
         }
         function getTypeOfSwitchClause(clause) {
-            if (clause.kind === 285 /* CaseClause */) {
+            if (clause.kind === 287 /* CaseClause */) {
                 return getRegularTypeOfLiteralType(getTypeOfExpression(clause.expression));
             }
             return neverType;
@@ -65272,7 +66446,7 @@
             var witnesses = [];
             for (var _i = 0, _a = switchStatement.caseBlock.clauses; _i < _a.length; _i++) {
                 var clause = _a[_i];
-                if (clause.kind === 285 /* CaseClause */) {
+                if (clause.kind === 287 /* CaseClause */) {
                     if (ts.isStringLiteralLike(clause.expression)) {
                         witnesses.push(clause.expression.text);
                         continue;
@@ -65345,6 +66519,9 @@
             }
             return type.flags & 131072 /* Never */ || f(type) ? type : neverType;
         }
+        function removeType(type, targetType) {
+            return filterType(type, function (t) { return t !== targetType; });
+        }
         function countTypes(type) {
             return type.flags & 1048576 /* Union */ ? type.types.length : 1;
         }
@@ -65359,8 +66536,8 @@
             var types = origin && origin.flags & 1048576 /* Union */ ? origin.types : type.types;
             var mappedTypes;
             var changed = false;
-            for (var _i = 0, types_18 = types; _i < types_18.length; _i++) {
-                var t = types_18[_i];
+            for (var _i = 0, types_17 = types; _i < types_17.length; _i++) {
+                var t = types_17[_i];
                 var mapped = t.flags & 1048576 /* Union */ ? mapType(t, mapper, noReductions) : mapper(t);
                 changed || (changed = t !== mapped);
                 if (mapped) {
@@ -65447,8 +66624,8 @@
         }
         function isEvolvingArrayTypeList(types) {
             var hasEvolvingArrayType = false;
-            for (var _i = 0, types_19 = types; _i < types_19.length; _i++) {
-                var t = types_19[_i];
+            for (var _i = 0, types_18 = types; _i < types_18.length; _i++) {
+                var t = types_18[_i];
                 if (!(t.flags & 131072 /* Never */)) {
                     if (!(ts.getObjectFlags(t) & 256 /* EvolvingArray */)) {
                         return false;
@@ -65464,21 +66641,21 @@
             var root = getReferenceRoot(node);
             var parent = root.parent;
             var isLengthPushOrUnshift = ts.isPropertyAccessExpression(parent) && (parent.name.escapedText === "length" ||
-                parent.parent.kind === 204 /* CallExpression */
+                parent.parent.kind === 206 /* CallExpression */
                     && ts.isIdentifier(parent.name)
                     && ts.isPushOrUnshiftIdentifier(parent.name));
-            var isElementAssignment = parent.kind === 203 /* ElementAccessExpression */ &&
+            var isElementAssignment = parent.kind === 205 /* ElementAccessExpression */ &&
                 parent.expression === root &&
-                parent.parent.kind === 217 /* BinaryExpression */ &&
-                parent.parent.operatorToken.kind === 62 /* EqualsToken */ &&
+                parent.parent.kind === 219 /* BinaryExpression */ &&
+                parent.parent.operatorToken.kind === 63 /* EqualsToken */ &&
                 parent.parent.left === parent &&
                 !ts.isAssignmentTarget(parent.parent) &&
                 isTypeAssignableToKind(getTypeOfExpression(parent.argumentExpression), 296 /* NumberLike */);
             return isLengthPushOrUnshift || isElementAssignment;
         }
         function isDeclarationWithExplicitTypeAnnotation(declaration) {
-            return (declaration.kind === 250 /* VariableDeclaration */ || declaration.kind === 161 /* Parameter */ ||
-                declaration.kind === 164 /* PropertyDeclaration */ || declaration.kind === 163 /* PropertySignature */) &&
+            return (declaration.kind === 252 /* VariableDeclaration */ || declaration.kind === 162 /* Parameter */ ||
+                declaration.kind === 165 /* PropertyDeclaration */ || declaration.kind === 164 /* PropertySignature */) &&
                 !!ts.getEffectiveTypeAnnotationNode(declaration);
         }
         function getExplicitTypeOfSymbol(symbol, diagnostic) {
@@ -65497,7 +66674,7 @@
                     if (isDeclarationWithExplicitTypeAnnotation(declaration)) {
                         return getTypeOfSymbol(symbol);
                     }
-                    if (ts.isVariableDeclaration(declaration) && declaration.parent.parent.kind === 240 /* ForOfStatement */) {
+                    if (ts.isVariableDeclaration(declaration) && declaration.parent.parent.kind === 242 /* ForOfStatement */) {
                         var statement = declaration.parent.parent;
                         var expressionType = getTypeOfDottedName(statement.expression, /*diagnostic*/ undefined);
                         if (expressionType) {
@@ -65518,14 +66695,14 @@
         function getTypeOfDottedName(node, diagnostic) {
             if (!(node.flags & 16777216 /* InWithStatement */)) {
                 switch (node.kind) {
-                    case 78 /* Identifier */:
+                    case 79 /* Identifier */:
                         var symbol = getExportSymbolOfValueSymbolIfExported(getResolvedSymbol(node));
                         return getExplicitTypeOfSymbol(symbol.flags & 2097152 /* Alias */ ? resolveAlias(symbol) : symbol, diagnostic);
-                    case 107 /* ThisKeyword */:
+                    case 108 /* ThisKeyword */:
                         return getExplicitThisType(node);
-                    case 105 /* SuperKeyword */:
+                    case 106 /* SuperKeyword */:
                         return checkSuperExpression(node);
-                    case 202 /* PropertyAccessExpression */: {
+                    case 204 /* PropertyAccessExpression */: {
                         var type = getTypeOfDottedName(node.expression, diagnostic);
                         if (type) {
                             var name = node.name;
@@ -65543,7 +66720,7 @@
                         }
                         return undefined;
                     }
-                    case 208 /* ParenthesizedExpression */:
+                    case 210 /* ParenthesizedExpression */:
                         return getTypeOfDottedName(node.expression, diagnostic);
                 }
             }
@@ -65557,10 +66734,10 @@
                 // circularities in control flow analysis, we use getTypeOfDottedName when resolving the call
                 // target expression of an assertion.
                 var funcType = void 0;
-                if (node.parent.kind === 234 /* ExpressionStatement */) {
+                if (node.parent.kind === 236 /* ExpressionStatement */) {
                     funcType = getTypeOfDottedName(node.expression, /*diagnostic*/ undefined);
                 }
-                else if (node.expression.kind !== 105 /* SuperKeyword */) {
+                else if (node.expression.kind !== 106 /* SuperKeyword */) {
                     if (ts.isOptionalChain(node)) {
                         funcType = checkNonNullType(getOptionalExpressionType(checkExpression(node.expression), node.expression), node.expression);
                     }
@@ -65601,7 +66778,7 @@
         }
         function isFalseExpression(expr) {
             var node = ts.skipParentheses(expr);
-            return node.kind === 94 /* FalseKeyword */ || node.kind === 217 /* BinaryExpression */ && (node.operatorToken.kind === 55 /* AmpersandAmpersandToken */ && (isFalseExpression(node.left) || isFalseExpression(node.right)) ||
+            return node.kind === 95 /* FalseKeyword */ || node.kind === 219 /* BinaryExpression */ && (node.operatorToken.kind === 55 /* AmpersandAmpersandToken */ && (isFalseExpression(node.left) || isFalseExpression(node.right)) ||
                 node.operatorToken.kind === 56 /* BarBarToken */ && isFalseExpression(node.left) && isFalseExpression(node.right));
         }
         function isReachableFlowNodeWorker(flow, noCacheCheck) {
@@ -65689,7 +66866,7 @@
                     flow = flow.antecedent;
                 }
                 else if (flags & 512 /* Call */) {
-                    if (flow.node.expression.kind === 105 /* SuperKeyword */) {
+                    if (flow.node.expression.kind === 106 /* SuperKeyword */) {
                         return true;
                     }
                     flow = flow.antecedent;
@@ -65716,15 +66893,28 @@
                 }
             }
         }
-        function getFlowTypeOfReference(reference, declaredType, initialType, flowContainer, couldBeUninitialized) {
+        function isConstantReference(node) {
+            switch (node.kind) {
+                case 79 /* Identifier */:
+                    var symbol = getResolvedSymbol(node);
+                    return isConstVariable(symbol) || !!symbol.valueDeclaration && ts.getRootDeclaration(symbol.valueDeclaration).kind === 162 /* Parameter */ && !isParameterAssigned(symbol);
+                case 204 /* PropertyAccessExpression */:
+                case 205 /* ElementAccessExpression */:
+                    // The resolvedSymbol property is initialized by checkPropertyAccess or checkElementAccess before we get here.
+                    return isConstantReference(node.expression) && isReadonlySymbol(getNodeLinks(node).resolvedSymbol || unknownSymbol);
+            }
+            return false;
+        }
+        function getFlowTypeOfReference(reference, declaredType, initialType, flowContainer) {
             if (initialType === void 0) { initialType = declaredType; }
             var key;
             var isKeySet = false;
             var flowDepth = 0;
+            var inlineLevel = 0;
             if (flowAnalysisDisabled) {
                 return errorType;
             }
-            if (!reference.flowNode || !couldBeUninitialized && !(declaredType.flags & 536624127 /* Narrowable */)) {
+            if (!reference.flowNode) {
                 return declaredType;
             }
             flowInvocationCount++;
@@ -65736,7 +66926,7 @@
             // on empty arrays are possible without implicit any errors and new element types can be inferred without
             // type mismatch errors.
             var resultType = ts.getObjectFlags(evolvedType) & 256 /* EvolvingArray */ && isEvolvingArrayOperationTarget(reference) ? autoArrayType : finalizeEvolvingArrayType(evolvedType);
-            if (resultType === unreachableNeverType || reference.parent && reference.parent.kind === 226 /* NonNullExpression */ && !(resultType.flags & 131072 /* Never */) && getTypeWithFacts(resultType, 2097152 /* NEUndefinedOrNull */).flags & 131072 /* Never */) {
+            if (resultType === unreachableNeverType || reference.parent && reference.parent.kind === 228 /* NonNullExpression */ && !(resultType.flags & 131072 /* Never */) && getTypeWithFacts(resultType, 2097152 /* NEUndefinedOrNull */).flags & 131072 /* Never */) {
                 return declaredType;
             }
             return resultType;
@@ -65820,9 +67010,9 @@
                         // Check if we should continue with the control flow of the containing function.
                         var container = flow.node;
                         if (container && container !== flowContainer &&
-                            reference.kind !== 202 /* PropertyAccessExpression */ &&
-                            reference.kind !== 203 /* ElementAccessExpression */ &&
-                            reference.kind !== 107 /* ThisKeyword */) {
+                            reference.kind !== 204 /* PropertyAccessExpression */ &&
+                            reference.kind !== 205 /* ElementAccessExpression */ &&
+                            reference.kind !== 108 /* ThisKeyword */) {
                             flow = container.flowNode;
                             continue;
                         }
@@ -65846,7 +67036,7 @@
             }
             function getInitialOrAssignedType(flow) {
                 var node = flow.node;
-                return getNarrowableTypeForReference(node.kind === 250 /* VariableDeclaration */ || node.kind === 199 /* BindingElement */ ?
+                return getNarrowableTypeForReference(node.kind === 252 /* VariableDeclaration */ || node.kind === 201 /* BindingElement */ ?
                     getInitialType(node) :
                     getAssignedType(node), reference);
             }
@@ -65886,14 +67076,14 @@
                     // in which case we continue control flow analysis back to the function's declaration
                     if (ts.isVariableDeclaration(node) && (ts.isInJSFile(node) || ts.isVarConst(node))) {
                         var init = ts.getDeclaredExpandoInitializer(node);
-                        if (init && (init.kind === 209 /* FunctionExpression */ || init.kind === 210 /* ArrowFunction */)) {
+                        if (init && (init.kind === 211 /* FunctionExpression */ || init.kind === 212 /* ArrowFunction */)) {
                             return getTypeAtFlowNode(flow.antecedent);
                         }
                     }
                     return declaredType;
                 }
                 // for (const _ in ref) acts as a nonnull on ref
-                if (ts.isVariableDeclaration(node) && node.parent.parent.kind === 239 /* ForInStatement */ && isMatchingReference(reference, node.parent.parent.expression)) {
+                if (ts.isVariableDeclaration(node) && node.parent.parent.kind === 241 /* ForInStatement */ && isMatchingReference(reference, node.parent.parent.expression)) {
                     return getNonNullableTypeIfNeeded(getTypeFromFlowType(getTypeAtFlowNode(flow.antecedent)));
                 }
                 // Assignment doesn't affect reference
@@ -65901,10 +67091,10 @@
             }
             function narrowTypeByAssertion(type, expr) {
                 var node = ts.skipParentheses(expr);
-                if (node.kind === 94 /* FalseKeyword */) {
+                if (node.kind === 95 /* FalseKeyword */) {
                     return unreachableNeverType;
                 }
-                if (node.kind === 217 /* BinaryExpression */) {
+                if (node.kind === 219 /* BinaryExpression */) {
                     if (node.operatorToken.kind === 55 /* AmpersandAmpersandToken */) {
                         return narrowTypeByAssertion(narrowTypeByAssertion(type, node.left), node.right);
                     }
@@ -65935,7 +67125,7 @@
             function getTypeAtFlowArrayMutation(flow) {
                 if (declaredType === autoType || declaredType === autoArrayType) {
                     var node = flow.node;
-                    var expr = node.kind === 204 /* CallExpression */ ?
+                    var expr = node.kind === 206 /* CallExpression */ ?
                         node.expression.expression :
                         node.left.expression;
                     if (isMatchingReference(reference, getReferenceCandidate(expr))) {
@@ -65943,7 +67133,7 @@
                         var type = getTypeFromFlowType(flowType);
                         if (ts.getObjectFlags(type) & 256 /* EvolvingArray */) {
                             var evolvedType_1 = type;
-                            if (node.kind === 204 /* CallExpression */) {
+                            if (node.kind === 206 /* CallExpression */) {
                                 for (var _i = 0, _a = node.arguments; _i < _a.length; _i++) {
                                     var arg = _a[_i];
                                     evolvedType_1 = addEvolvingArrayElementType(evolvedType_1, arg);
@@ -65991,7 +67181,7 @@
                 if (isMatchingReference(reference, expr)) {
                     type = narrowTypeBySwitchOnDiscriminant(type, flow.switchStatement, flow.clauseStart, flow.clauseEnd);
                 }
-                else if (expr.kind === 212 /* TypeOfExpression */ && isMatchingReference(reference, expr.expression)) {
+                else if (expr.kind === 214 /* TypeOfExpression */ && isMatchingReference(reference, expr.expression)) {
                     type = narrowBySwitchOnTypeOf(type, flow.switchStatement, flow.clauseStart, flow.clauseEnd);
                 }
                 else {
@@ -65999,12 +67189,13 @@
                         if (optionalChainContainsReference(expr, reference)) {
                             type = narrowTypeBySwitchOptionalChainContainment(type, flow.switchStatement, flow.clauseStart, flow.clauseEnd, function (t) { return !(t.flags & (32768 /* Undefined */ | 131072 /* Never */)); });
                         }
-                        else if (expr.kind === 212 /* TypeOfExpression */ && optionalChainContainsReference(expr.expression, reference)) {
+                        else if (expr.kind === 214 /* TypeOfExpression */ && optionalChainContainsReference(expr.expression, reference)) {
                             type = narrowTypeBySwitchOptionalChainContainment(type, flow.switchStatement, flow.clauseStart, flow.clauseEnd, function (t) { return !(t.flags & 131072 /* Never */ || t.flags & 128 /* StringLiteral */ && t.value === "undefined"); });
                         }
                     }
-                    if (isMatchingReferenceDiscriminant(expr, type)) {
-                        type = narrowTypeBySwitchOnDiscriminantProperty(type, expr, flow.switchStatement, flow.clauseStart, flow.clauseEnd);
+                    var access = getDiscriminantPropertyAccess(expr, type);
+                    if (access) {
+                        type = narrowTypeBySwitchOnDiscriminantProperty(type, access, flow.switchStatement, flow.clauseStart, flow.clauseEnd);
                     }
                 }
                 return createFlowType(type, isIncomplete(flowType));
@@ -66159,16 +67350,13 @@
                 }
                 return result;
             }
-            function isMatchingReferenceDiscriminant(expr, computedType) {
+            function getDiscriminantPropertyAccess(expr, computedType) {
+                var access, name;
                 var type = declaredType.flags & 1048576 /* Union */ ? declaredType : computedType;
-                if (!(type.flags & 1048576 /* Union */) || !ts.isAccessExpression(expr)) {
-                    return false;
-                }
-                var name = getAccessedPropertyName(expr);
-                if (name === undefined) {
-                    return false;
-                }
-                return isMatchingReference(reference, expr.expression) && isDiscriminantProperty(type, name);
+                return type.flags & 1048576 /* Union */ && (access = getPropertyAccess(expr)) && (name = getAccessedPropertyName(access)) &&
+                    isMatchingReference(reference, ts.isAccessExpression(access) ? access.expression : access.parent.parent.initializer) &&
+                    isDiscriminantProperty(type, name) ?
+                    access : undefined;
             }
             function narrowTypeByDiscriminant(type, access, narrowType) {
                 var propName = getAccessedPropertyName(access);
@@ -66191,10 +67379,10 @@
                 if ((operator === 36 /* EqualsEqualsEqualsToken */ || operator === 37 /* ExclamationEqualsEqualsToken */) && type.flags & 1048576 /* Union */) {
                     var keyPropertyName = getKeyPropertyName(type);
                     if (keyPropertyName && keyPropertyName === getAccessedPropertyName(access)) {
-                        var candidate_2 = getConstituentTypeForKeyType(type, getTypeOfExpression(value));
-                        if (candidate_2) {
-                            return operator === (assumeTrue ? 36 /* EqualsEqualsEqualsToken */ : 37 /* ExclamationEqualsEqualsToken */) ? candidate_2 :
-                                isUnitType(getTypeOfPropertyOfType(candidate_2, keyPropertyName) || unknownType) ? filterType(type, function (t) { return t !== candidate_2; }) :
+                        var candidate = getConstituentTypeForKeyType(type, getTypeOfExpression(value));
+                        if (candidate) {
+                            return operator === (assumeTrue ? 36 /* EqualsEqualsEqualsToken */ : 37 /* ExclamationEqualsEqualsToken */) ? candidate :
+                                isUnitType(getTypeOfPropertyOfType(candidate, keyPropertyName) || unknownType) ? removeType(type, candidate) :
                                     type;
                         }
                     }
@@ -66218,37 +67406,34 @@
                 if (strictNullChecks && assumeTrue && optionalChainContainsReference(expr, reference)) {
                     type = getTypeWithFacts(type, 2097152 /* NEUndefinedOrNull */);
                 }
-                if (isMatchingReferenceDiscriminant(expr, type)) {
-                    return narrowTypeByDiscriminant(type, expr, function (t) { return getTypeWithFacts(t, assumeTrue ? 4194304 /* Truthy */ : 8388608 /* Falsy */); });
+                var access = getDiscriminantPropertyAccess(expr, type);
+                if (access) {
+                    return narrowTypeByDiscriminant(type, access, function (t) { return getTypeWithFacts(t, assumeTrue ? 4194304 /* Truthy */ : 8388608 /* Falsy */); });
                 }
                 return type;
             }
             function isTypePresencePossible(type, propName, assumeTrue) {
-                if (getIndexInfoOfType(type, 0 /* String */)) {
-                    return true;
-                }
                 var prop = getPropertyOfType(type, propName);
                 if (prop) {
                     return prop.flags & 16777216 /* Optional */ ? true : assumeTrue;
                 }
-                return !assumeTrue;
+                return getApplicableIndexInfoForName(type, propName) ? true : !assumeTrue;
             }
-            function narrowByInKeyword(type, literal, assumeTrue) {
+            function narrowByInKeyword(type, name, assumeTrue) {
                 if (type.flags & 1048576 /* Union */
                     || type.flags & 524288 /* Object */ && declaredType !== type
                     || isThisTypeParameter(type)
                     || type.flags & 2097152 /* Intersection */ && ts.every(type.types, function (t) { return t.symbol !== globalThisSymbol; })) {
-                    var propName_1 = ts.escapeLeadingUnderscores(literal.text);
-                    return filterType(type, function (t) { return isTypePresencePossible(t, propName_1, assumeTrue); });
+                    return filterType(type, function (t) { return isTypePresencePossible(t, name, assumeTrue); });
                 }
                 return type;
             }
             function narrowTypeByBinaryExpression(type, expr, assumeTrue) {
                 switch (expr.operatorToken.kind) {
-                    case 62 /* EqualsToken */:
-                    case 74 /* BarBarEqualsToken */:
-                    case 75 /* AmpersandAmpersandEqualsToken */:
-                    case 76 /* QuestionQuestionEqualsToken */:
+                    case 63 /* EqualsToken */:
+                    case 75 /* BarBarEqualsToken */:
+                    case 76 /* AmpersandAmpersandEqualsToken */:
+                    case 77 /* QuestionQuestionEqualsToken */:
                         return narrowTypeByTruthiness(narrowType(type, expr.right, assumeTrue), expr.left, assumeTrue);
                     case 34 /* EqualsEqualsToken */:
                     case 35 /* ExclamationEqualsToken */:
@@ -66257,10 +67442,10 @@
                         var operator = expr.operatorToken.kind;
                         var left = getReferenceCandidate(expr.left);
                         var right = getReferenceCandidate(expr.right);
-                        if (left.kind === 212 /* TypeOfExpression */ && ts.isStringLiteralLike(right)) {
+                        if (left.kind === 214 /* TypeOfExpression */ && ts.isStringLiteralLike(right)) {
                             return narrowTypeByTypeof(type, left, operator, right, assumeTrue);
                         }
-                        if (right.kind === 212 /* TypeOfExpression */ && ts.isStringLiteralLike(left)) {
+                        if (right.kind === 214 /* TypeOfExpression */ && ts.isStringLiteralLike(left)) {
                             return narrowTypeByTypeof(type, right, operator, left, assumeTrue);
                         }
                         if (isMatchingReference(reference, left)) {
@@ -66277,11 +67462,13 @@
                                 type = narrowTypeByOptionalChainContainment(type, operator, left, assumeTrue);
                             }
                         }
-                        if (isMatchingReferenceDiscriminant(left, type)) {
-                            return narrowTypeByDiscriminantProperty(type, left, operator, right, assumeTrue);
+                        var leftAccess = getDiscriminantPropertyAccess(left, type);
+                        if (leftAccess) {
+                            return narrowTypeByDiscriminantProperty(type, leftAccess, operator, right, assumeTrue);
                         }
-                        if (isMatchingReferenceDiscriminant(right, type)) {
-                            return narrowTypeByDiscriminantProperty(type, right, operator, left, assumeTrue);
+                        var rightAccess = getDiscriminantPropertyAccess(right, type);
+                        if (rightAccess) {
+                            return narrowTypeByDiscriminantProperty(type, rightAccess, operator, left, assumeTrue);
                         }
                         if (isMatchingConstructorReference(left)) {
                             return narrowTypeByConstructor(type, operator, right, assumeTrue);
@@ -66290,16 +67477,35 @@
                             return narrowTypeByConstructor(type, operator, left, assumeTrue);
                         }
                         break;
-                    case 101 /* InstanceOfKeyword */:
+                    case 102 /* InstanceOfKeyword */:
                         return narrowTypeByInstanceof(type, expr, assumeTrue);
-                    case 100 /* InKeyword */:
+                    case 101 /* InKeyword */:
                         var target = getReferenceCandidate(expr.right);
-                        if (ts.isStringLiteralLike(expr.left) && isMatchingReference(reference, target)) {
-                            return narrowByInKeyword(type, expr.left, assumeTrue);
+                        var leftType = getTypeOfNode(expr.left);
+                        if (leftType.flags & 128 /* StringLiteral */) {
+                            var name = ts.escapeLeadingUnderscores(leftType.value);
+                            if (containsMissingType(type) && ts.isAccessExpression(reference) && isMatchingReference(reference.expression, target) &&
+                                getAccessedPropertyName(reference) === name) {
+                                return getTypeWithFacts(type, assumeTrue ? 524288 /* NEUndefined */ : 65536 /* EQUndefined */);
+                            }
+                            if (isMatchingReference(reference, target)) {
+                                return narrowByInKeyword(type, name, assumeTrue);
+                            }
                         }
                         break;
                     case 27 /* CommaToken */:
                         return narrowType(type, expr.right, assumeTrue);
+                    // Ordinarily we won't see && and || expressions in control flow analysis because the Binder breaks those
+                    // expressions down to individual conditional control flows. However, we may encounter them when analyzing
+                    // aliased conditional expressions.
+                    case 55 /* AmpersandAmpersandToken */:
+                        return assumeTrue ?
+                            narrowType(narrowType(type, expr.left, /*assumeTrue*/ true), expr.right, /*assumeTrue*/ true) :
+                            getUnionType([narrowType(type, expr.left, /*assumeTrue*/ false), narrowType(type, expr.right, /*assumeTrue*/ false)]);
+                    case 56 /* BarBarToken */:
+                        return assumeTrue ?
+                            getUnionType([narrowType(type, expr.left, /*assumeTrue*/ true), narrowType(type, expr.right, /*assumeTrue*/ true)]) :
+                            narrowType(narrowType(type, expr.left, /*assumeTrue*/ false), expr.right, /*assumeTrue*/ false);
                 }
                 return type;
             }
@@ -66379,7 +67585,7 @@
                 if (assumeTrue && type.flags & 2 /* Unknown */ && literal.text === "object") {
                     // The pattern x && typeof x === 'object', where x is of type unknown, narrows x to type object. We don't
                     // need to check for the reverse typeof x === 'object' && x since that already narrows correctly.
-                    if (typeOfExpr.parent.parent.kind === 217 /* BinaryExpression */) {
+                    if (typeOfExpr.parent.parent.kind === 219 /* BinaryExpression */) {
                         var expr = typeOfExpr.parent.parent;
                         if (expr.operatorToken.kind === 55 /* AmpersandAmpersandToken */ && expr.right === typeOfExpr.parent && containsTruthyCheck(reference, expr.left)) {
                             return nonPrimitiveType;
@@ -66654,6 +67860,16 @@
                         return narrowTypeByTypePredicate(type, predicate, callExpression, assumeTrue);
                     }
                 }
+                if (containsMissingType(type) && ts.isAccessExpression(reference) && ts.isPropertyAccessExpression(callExpression.expression)) {
+                    var callAccess = callExpression.expression;
+                    if (isMatchingReference(reference.expression, getReferenceCandidate(callAccess.expression)) &&
+                        ts.isIdentifier(callAccess.name) && callAccess.name.escapedText === "hasOwnProperty" && callExpression.arguments.length === 1) {
+                        var argument = callExpression.arguments[0];
+                        if (ts.isStringLiteralLike(argument) && getAccessedPropertyName(reference) === ts.escapeLeadingUnderscores(argument.text)) {
+                            return getTypeWithFacts(type, assumeTrue ? 524288 /* NEUndefined */ : 65536 /* EQUndefined */);
+                        }
+                    }
+                }
                 return type;
             }
             function narrowTypeByTypePredicate(type, predicate, callExpression, assumeTrue) {
@@ -66668,8 +67884,9 @@
                             !(getTypeFacts(predicate.type) & 65536 /* EQUndefined */)) {
                             type = getTypeWithFacts(type, 2097152 /* NEUndefinedOrNull */);
                         }
-                        if (isMatchingReferenceDiscriminant(predicateArgument, type)) {
-                            return narrowTypeByDiscriminant(type, predicateArgument, function (t) { return getNarrowedType(t, predicate.type, assumeTrue, isTypeSubtypeOf); });
+                        var access = getDiscriminantPropertyAccess(predicateArgument, type);
+                        if (access) {
+                            return narrowTypeByDiscriminant(type, access, function (t) { return getNarrowedType(t, predicate.type, assumeTrue, isTypeSubtypeOf); });
                         }
                     }
                 }
@@ -66684,20 +67901,35 @@
                     return narrowTypeByOptionality(type, expr, assumeTrue);
                 }
                 switch (expr.kind) {
-                    case 78 /* Identifier */:
-                    case 107 /* ThisKeyword */:
-                    case 105 /* SuperKeyword */:
-                    case 202 /* PropertyAccessExpression */:
-                    case 203 /* ElementAccessExpression */:
+                    case 79 /* Identifier */:
+                        // When narrowing a reference to a const variable, non-assigned parameter, or readonly property, we inline
+                        // up to five levels of aliased conditional expressions that are themselves declared as const variables.
+                        if (!isMatchingReference(reference, expr) && inlineLevel < 5) {
+                            var symbol = getResolvedSymbol(expr);
+                            if (isConstVariable(symbol)) {
+                                var declaration = symbol.valueDeclaration;
+                                if (declaration && ts.isVariableDeclaration(declaration) && !declaration.type && declaration.initializer && isConstantReference(reference)) {
+                                    inlineLevel++;
+                                    var result = narrowType(type, declaration.initializer, assumeTrue);
+                                    inlineLevel--;
+                                    return result;
+                                }
+                            }
+                        }
+                    // falls through
+                    case 108 /* ThisKeyword */:
+                    case 106 /* SuperKeyword */:
+                    case 204 /* PropertyAccessExpression */:
+                    case 205 /* ElementAccessExpression */:
                         return narrowTypeByTruthiness(type, expr, assumeTrue);
-                    case 204 /* CallExpression */:
+                    case 206 /* CallExpression */:
                         return narrowTypeByCallExpression(type, expr, assumeTrue);
-                    case 208 /* ParenthesizedExpression */:
-                    case 226 /* NonNullExpression */:
+                    case 210 /* ParenthesizedExpression */:
+                    case 228 /* NonNullExpression */:
                         return narrowType(type, expr.expression, assumeTrue);
-                    case 217 /* BinaryExpression */:
+                    case 219 /* BinaryExpression */:
                         return narrowTypeByBinaryExpression(type, expr, assumeTrue);
-                    case 215 /* PrefixUnaryExpression */:
+                    case 217 /* PrefixUnaryExpression */:
                         if (expr.operator === 53 /* ExclamationToken */) {
                             return narrowType(type, expr.operand, !assumeTrue);
                         }
@@ -66709,8 +67941,9 @@
                 if (isMatchingReference(reference, expr)) {
                     return getTypeWithFacts(type, assumePresent ? 2097152 /* NEUndefinedOrNull */ : 262144 /* EQUndefinedOrNull */);
                 }
-                if (isMatchingReferenceDiscriminant(expr, type)) {
-                    return narrowTypeByDiscriminant(type, expr, function (t) { return getTypeWithFacts(t, assumePresent ? 2097152 /* NEUndefinedOrNull */ : 262144 /* EQUndefinedOrNull */); });
+                var access = getDiscriminantPropertyAccess(expr, type);
+                if (access) {
+                    return narrowTypeByDiscriminant(type, access, function (t) { return getTypeWithFacts(t, assumePresent ? 2097152 /* NEUndefinedOrNull */ : 262144 /* EQUndefinedOrNull */); });
                 }
                 return type;
             }
@@ -66721,7 +67954,7 @@
             // an dotted name expression, and if the location is not an assignment target, obtain the type
             // of the expression (which will reflect control flow analysis). If the expression indeed
             // resolved to the given symbol, return the narrowed type.
-            if (location.kind === 78 /* Identifier */ || location.kind === 79 /* PrivateIdentifier */) {
+            if (location.kind === 79 /* Identifier */ || location.kind === 80 /* PrivateIdentifier */) {
                 if (ts.isRightSideOfQualifiedNameOrPropertyAccess(location)) {
                     location = location.parent;
                 }
@@ -66740,14 +67973,14 @@
             // to it at the given location. Since we have no control flow information for the
             // hypothetical reference (control flow information is created and attached by the
             // binder), we simply return the declared type of the symbol.
-            return getTypeOfSymbol(symbol);
+            return getNonMissingTypeOfSymbol(symbol);
         }
         function getControlFlowContainer(node) {
             return ts.findAncestor(node.parent, function (node) {
                 return ts.isFunctionLike(node) && !ts.getImmediatelyInvokedFunctionExpression(node) ||
-                    node.kind === 258 /* ModuleBlock */ ||
-                    node.kind === 298 /* SourceFile */ ||
-                    node.kind === 164 /* PropertyDeclaration */;
+                    node.kind === 260 /* ModuleBlock */ ||
+                    node.kind === 300 /* SourceFile */ ||
+                    node.kind === 165 /* PropertyDeclaration */;
             });
         }
         // Check if a parameter is assigned anywhere within its declaring function.
@@ -66769,10 +68002,10 @@
             return !!ts.findAncestor(node.parent, function (node) { return ts.isFunctionLike(node) && !!(getNodeLinks(node).flags & 8388608 /* AssignmentsMarked */); });
         }
         function markParameterAssignments(node) {
-            if (node.kind === 78 /* Identifier */) {
+            if (node.kind === 79 /* Identifier */) {
                 if (ts.isAssignmentTarget(node)) {
                     var symbol = getResolvedSymbol(node);
-                    if (symbol.valueDeclaration && ts.getRootDeclaration(symbol.valueDeclaration).kind === 161 /* Parameter */) {
+                    if (symbol.valueDeclaration && ts.getRootDeclaration(symbol.valueDeclaration).kind === 162 /* Parameter */) {
                         symbol.isAssigned = true;
                     }
                 }
@@ -66782,13 +68015,13 @@
             }
         }
         function isConstVariable(symbol) {
-            return symbol.flags & 3 /* Variable */ && (getDeclarationNodeFlagsFromSymbol(symbol) & 2 /* Const */) !== 0 && getTypeOfSymbol(symbol) !== autoArrayType;
+            return symbol.flags & 3 /* Variable */ && (getDeclarationNodeFlagsFromSymbol(symbol) & 2 /* Const */) !== 0;
         }
         /** remove undefined from the annotated type of a parameter when there is an initializer (that doesn't include undefined) */
         function removeOptionalityFromDeclaredType(declaredType, declaration) {
             if (pushTypeResolution(declaration.symbol, 2 /* DeclaredType */)) {
                 var annotationIncludesUndefined = strictNullChecks &&
-                    declaration.kind === 161 /* Parameter */ &&
+                    declaration.kind === 162 /* Parameter */ &&
                     declaration.initializer &&
                     getFalsyFlags(declaredType) & 32768 /* Undefined */ &&
                     !(getFalsyFlags(checkExpression(declaration.initializer)) & 32768 /* Undefined */);
@@ -66800,29 +68033,29 @@
                 return declaredType;
             }
         }
-        function isConstraintPosition(node) {
+        function isConstraintPosition(type, node) {
             var parent = node.parent;
-            // In an element access obj[x], we consider obj to be in a constraint position only when x is not
-            // of a generic type. This is because when both obj and x are of generic types T and K, we want
-            // the resulting type to be T[K].
-            return parent.kind === 202 /* PropertyAccessExpression */ ||
-                parent.kind === 204 /* CallExpression */ && parent.expression === node ||
-                parent.kind === 203 /* ElementAccessExpression */ && parent.expression === node &&
-                    !isGenericIndexType(getTypeOfExpression(parent.argumentExpression));
+            // In an element access obj[x], we consider obj to be in a constraint position, except when obj is of
+            // a generic type without a nullable constraint and x is a generic type. This is because when both obj
+            // and x are of generic types T and K, we want the resulting type to be T[K].
+            return parent.kind === 204 /* PropertyAccessExpression */ ||
+                parent.kind === 206 /* CallExpression */ && parent.expression === node ||
+                parent.kind === 205 /* ElementAccessExpression */ && parent.expression === node &&
+                    !(isGenericTypeWithoutNullableConstraint(type) && isGenericIndexType(getTypeOfExpression(parent.argumentExpression)));
         }
         function isGenericTypeWithUnionConstraint(type) {
             return !!(type.flags & 465829888 /* Instantiable */ && getBaseConstraintOrType(type).flags & (98304 /* Nullable */ | 1048576 /* Union */));
         }
-        function containsGenericType(type) {
-            return !!(type.flags & 465829888 /* Instantiable */ || type.flags & 3145728 /* UnionOrIntersection */ && ts.some(type.types, containsGenericType));
+        function isGenericTypeWithoutNullableConstraint(type) {
+            return !!(type.flags & 465829888 /* Instantiable */ && !maybeTypeOfKind(getBaseConstraintOrType(type), 98304 /* Nullable */));
         }
-        function hasContextualTypeWithNoGenericTypes(node) {
+        function hasNonBindingPatternContextualTypeWithNoGenericTypes(node) {
             // Computing the contextual type for a child of a JSX element involves resolving the type of the
             // element's tag name, so we exclude that here to avoid circularities.
             var contextualType = (ts.isIdentifier(node) || ts.isPropertyAccessExpression(node) || ts.isElementAccessExpression(node)) &&
                 !((ts.isJsxOpeningElement(node.parent) || ts.isJsxSelfClosingElement(node.parent)) && node.parent.tagName === node) &&
-                getContextualType(node);
-            return contextualType && !someType(contextualType, containsGenericType);
+                getContextualType(node, 8 /* SkipBindingPatterns */);
+            return contextualType && !isGenericType(contextualType);
         }
         function getNarrowableTypeForReference(type, reference, checkMode) {
             // When the type of a reference is or contains an instantiable type with a union type constraint, and
@@ -66834,7 +68067,7 @@
             // 'string | undefined' to give control flow analysis the opportunity to narrow to type 'string'.
             var substituteConstraints = !(checkMode && checkMode & 2 /* Inferential */) &&
                 someType(type, isGenericTypeWithUnionConstraint) &&
-                (isConstraintPosition(reference) || hasContextualTypeWithNoGenericTypes(reference));
+                (isConstraintPosition(type, reference) || hasNonBindingPatternContextualTypeWithNoGenericTypes(reference));
             return substituteConstraints ? mapType(type, function (t) { return t.flags & 465829888 /* Instantiable */ ? getBaseConstraintOrType(t) : t; }) : type;
         }
         function isExportOrExportExpression(location) {
@@ -66870,9 +68103,13 @@
             // To avoid that we will give an error to users if they use arguments objects in arrow function so that they
             // can explicitly bound arguments objects
             if (symbol === argumentsSymbol) {
+                if (isInPropertyInitializerOrClassStaticBlock(node)) {
+                    error(node, ts.Diagnostics.arguments_cannot_be_referenced_in_property_initializers);
+                    return errorType;
+                }
                 var container = ts.getContainingFunction(node);
                 if (languageVersion < 2 /* ES2015 */) {
-                    if (container.kind === 210 /* ArrowFunction */) {
+                    if (container.kind === 212 /* ArrowFunction */) {
                         error(node, ts.Diagnostics.The_arguments_object_cannot_be_referenced_in_an_arrow_function_in_ES3_and_ES5_Consider_using_a_standard_function_expression);
                     }
                     else if (ts.hasSyntacticModifier(container, 256 /* Async */)) {
@@ -66897,7 +68134,7 @@
                 // Due to the emit for class decorators, any reference to the class from inside of the class body
                 // must instead be rewritten to point to a temporary variable to avoid issues with the double-bind
                 // behavior of class names in ES6.
-                if (declaration.kind === 253 /* ClassDeclaration */
+                if (declaration.kind === 255 /* ClassDeclaration */
                     && ts.nodeIsDecorated(declaration)) {
                     var container = ts.getContainingClass(node);
                     while (container !== undefined) {
@@ -66909,14 +68146,14 @@
                         container = ts.getContainingClass(container);
                     }
                 }
-                else if (declaration.kind === 222 /* ClassExpression */) {
+                else if (declaration.kind === 224 /* ClassExpression */) {
                     // When we emit a class expression with static members that contain a reference
                     // to the constructor in the initializer, we will need to substitute that
                     // binding with an alias as the class name is not in scope.
                     var container = ts.getThisContainer(node, /*includeArrowFunctions*/ false);
-                    while (container.kind !== 298 /* SourceFile */) {
+                    while (container.kind !== 300 /* SourceFile */) {
                         if (container.parent === declaration) {
-                            if (container.kind === 164 /* PropertyDeclaration */ && ts.hasSyntacticModifier(container, 32 /* Static */)) {
+                            if (ts.isPropertyDeclaration(container) && ts.isStatic(container) || ts.isClassStaticBlockDeclaration(container)) {
                                 getNodeLinks(declaration).flags |= 16777216 /* ClassWithConstructorReference */;
                                 getNodeLinks(node).flags |= 33554432 /* ConstructorReferenceInClass */;
                             }
@@ -66972,7 +68209,7 @@
             // The declaration container is the innermost function that encloses the declaration of the variable
             // or parameter. The flow container is the innermost function starting with which we analyze the control
             // flow graph to determine the control flow based type.
-            var isParameter = ts.getRootDeclaration(declaration).kind === 161 /* Parameter */;
+            var isParameter = ts.getRootDeclaration(declaration).kind === 162 /* Parameter */;
             var declarationContainer = getControlFlowContainer(declaration);
             var flowContainer = getControlFlowContainer(node);
             var isOuterVariable = flowContainer !== declarationContainer;
@@ -66981,9 +68218,9 @@
             // When the control flow originates in a function expression or arrow function and we are referencing
             // a const variable or parameter from an outer function, we extend the origin of the control flow
             // analysis to include the immediately enclosing function.
-            while (flowContainer !== declarationContainer && (flowContainer.kind === 209 /* FunctionExpression */ ||
-                flowContainer.kind === 210 /* ArrowFunction */ || ts.isObjectLiteralOrClassExpressionMethod(flowContainer)) &&
-                (isConstVariable(localOrExportSymbol) || isParameter && !isParameterAssigned(localOrExportSymbol))) {
+            while (flowContainer !== declarationContainer && (flowContainer.kind === 211 /* FunctionExpression */ ||
+                flowContainer.kind === 212 /* ArrowFunction */ || ts.isObjectLiteralOrClassExpressionMethod(flowContainer)) &&
+                (isConstVariable(localOrExportSymbol) && type !== autoArrayType || isParameter && !isParameterAssigned(localOrExportSymbol))) {
                 flowContainer = getControlFlowContainer(flowContainer);
             }
             // We only look for uninitialized variables in strict null checking mode, and only when we can analyze
@@ -66991,14 +68228,14 @@
             // declaration container are the same).
             var assumeInitialized = isParameter || isAlias || isOuterVariable || isSpreadDestructuringAssignmentTarget || isModuleExports || ts.isBindingElement(declaration) ||
                 type !== autoType && type !== autoArrayType && (!strictNullChecks || (type.flags & (3 /* AnyOrUnknown */ | 16384 /* Void */)) !== 0 ||
-                    isInTypeQuery(node) || node.parent.kind === 271 /* ExportSpecifier */) ||
-                node.parent.kind === 226 /* NonNullExpression */ ||
-                declaration.kind === 250 /* VariableDeclaration */ && declaration.exclamationToken ||
+                    isInTypeQuery(node) || node.parent.kind === 273 /* ExportSpecifier */) ||
+                node.parent.kind === 228 /* NonNullExpression */ ||
+                declaration.kind === 252 /* VariableDeclaration */ && declaration.exclamationToken ||
                 declaration.flags & 8388608 /* Ambient */;
             var initialType = assumeInitialized ? (isParameter ? removeOptionalityFromDeclaredType(type, declaration) : type) :
                 type === autoType || type === autoArrayType ? undefinedType :
                     getOptionalType(type);
-            var flowType = getFlowTypeOfReference(node, type, initialType, flowContainer, !assumeInitialized);
+            var flowType = getFlowTypeOfReference(node, type, initialType, flowContainer);
             // A variable is considered uninitialized when it is possible to analyze the entire control flow graph
             // from declaration to use, and when the variable's declared type doesn't include undefined but the
             // control flow based type does include undefined.
@@ -67032,7 +68269,7 @@
                 (symbol.flags & (2 /* BlockScopedVariable */ | 32 /* Class */)) === 0 ||
                 !symbol.valueDeclaration ||
                 ts.isSourceFile(symbol.valueDeclaration) ||
-                symbol.valueDeclaration.parent.kind === 288 /* CatchClause */) {
+                symbol.valueDeclaration.parent.kind === 290 /* CatchClause */) {
                 return;
             }
             // 1. walk from the use site up to the declaration and check
@@ -67047,7 +68284,7 @@
                     // mark iteration statement as containing block-scoped binding captured in some function
                     var capturesBlockScopeBindingInLoopBody = true;
                     if (ts.isForStatement(container)) {
-                        var varDeclList = ts.getAncestor(symbol.valueDeclaration, 251 /* VariableDeclarationList */);
+                        var varDeclList = ts.getAncestor(symbol.valueDeclaration, 253 /* VariableDeclarationList */);
                         if (varDeclList && varDeclList.parent === container) {
                             var part = getPartOfForStatementContainingNode(node.parent, container);
                             if (part) {
@@ -67068,7 +68305,7 @@
                 // mark variables that are declared in loop initializer and reassigned inside the body of ForStatement.
                 // if body of ForStatement will be converted to function then we'll need a extra machinery to propagate reassigned values back.
                 if (ts.isForStatement(container)) {
-                    var varDeclList = ts.getAncestor(symbol.valueDeclaration, 251 /* VariableDeclarationList */);
+                    var varDeclList = ts.getAncestor(symbol.valueDeclaration, 253 /* VariableDeclarationList */);
                     if (varDeclList && varDeclList.parent === container && isAssignedInBodyOfForStatement(node, container)) {
                         getNodeLinks(symbol.valueDeclaration).flags |= 4194304 /* NeedsLoopOutParameter */;
                     }
@@ -67087,7 +68324,7 @@
         function isAssignedInBodyOfForStatement(node, container) {
             // skip parenthesized nodes
             var current = node;
-            while (current.parent.kind === 208 /* ParenthesizedExpression */) {
+            while (current.parent.kind === 210 /* ParenthesizedExpression */) {
                 current = current.parent;
             }
             // check if node is used as LHS in some assignment expression
@@ -67095,7 +68332,7 @@
             if (ts.isAssignmentTarget(current)) {
                 isAssigned = true;
             }
-            else if ((current.parent.kind === 215 /* PrefixUnaryExpression */ || current.parent.kind === 216 /* PostfixUnaryExpression */)) {
+            else if ((current.parent.kind === 217 /* PrefixUnaryExpression */ || current.parent.kind === 218 /* PostfixUnaryExpression */)) {
                 var expr = current.parent;
                 isAssigned = expr.operator === 45 /* PlusPlusToken */ || expr.operator === 46 /* MinusMinusToken */;
             }
@@ -67108,7 +68345,7 @@
         }
         function captureLexicalThis(node, container) {
             getNodeLinks(node).flags |= 2 /* LexicalThis */;
-            if (container.kind === 164 /* PropertyDeclaration */ || container.kind === 167 /* Constructor */) {
+            if (container.kind === 165 /* PropertyDeclaration */ || container.kind === 169 /* Constructor */) {
                 var classNode = container.parent;
                 getNodeLinks(classNode).flags |= 4 /* CaptureThis */;
             }
@@ -67143,47 +68380,48 @@
                 }
             }
         }
+        function checkThisInStaticClassFieldInitializerInDecoratedClass(thisExpression, container) {
+            if (ts.isPropertyDeclaration(container) && ts.hasStaticModifier(container) &&
+                container.initializer && ts.textRangeContainsPositionInclusive(container.initializer, thisExpression.pos) && ts.length(container.parent.decorators)) {
+                error(thisExpression, ts.Diagnostics.Cannot_use_this_in_a_static_property_initializer_of_a_decorated_class);
+            }
+        }
         function checkThisExpression(node) {
+            var isNodeInTypeQuery = isInTypeQuery(node);
             // Stop at the first arrow function so that we can
             // tell whether 'this' needs to be captured.
             var container = ts.getThisContainer(node, /* includeArrowFunctions */ true);
             var capturedByArrowFunction = false;
-            if (container.kind === 167 /* Constructor */) {
+            if (container.kind === 169 /* Constructor */) {
                 checkThisBeforeSuper(node, container, ts.Diagnostics.super_must_be_called_before_accessing_this_in_the_constructor_of_a_derived_class);
             }
             // Now skip arrow functions to get the "real" owner of 'this'.
-            if (container.kind === 210 /* ArrowFunction */) {
+            if (container.kind === 212 /* ArrowFunction */) {
                 container = ts.getThisContainer(container, /* includeArrowFunctions */ false);
                 capturedByArrowFunction = true;
             }
+            checkThisInStaticClassFieldInitializerInDecoratedClass(node, container);
             switch (container.kind) {
-                case 257 /* ModuleDeclaration */:
+                case 259 /* ModuleDeclaration */:
                     error(node, ts.Diagnostics.this_cannot_be_referenced_in_a_module_or_namespace_body);
                     // do not return here so in case if lexical this is captured - it will be reflected in flags on NodeLinks
                     break;
-                case 256 /* EnumDeclaration */:
+                case 258 /* EnumDeclaration */:
                     error(node, ts.Diagnostics.this_cannot_be_referenced_in_current_location);
                     // do not return here so in case if lexical this is captured - it will be reflected in flags on NodeLinks
                     break;
-                case 167 /* Constructor */:
+                case 169 /* Constructor */:
                     if (isInConstructorArgumentInitializer(node, container)) {
                         error(node, ts.Diagnostics.this_cannot_be_referenced_in_constructor_arguments);
                         // do not return here so in case if lexical this is captured - it will be reflected in flags on NodeLinks
                     }
                     break;
-                case 164 /* PropertyDeclaration */:
-                case 163 /* PropertySignature */:
-                    if (ts.hasSyntacticModifier(container, 32 /* Static */) && !(compilerOptions.target === 99 /* ESNext */ && useDefineForClassFields)) {
-                        error(node, ts.Diagnostics.this_cannot_be_referenced_in_a_static_property_initializer);
-                        // do not return here so in case if lexical this is captured - it will be reflected in flags on NodeLinks
-                    }
-                    break;
-                case 159 /* ComputedPropertyName */:
+                case 160 /* ComputedPropertyName */:
                     error(node, ts.Diagnostics.this_cannot_be_referenced_in_a_computed_property_name);
                     break;
             }
             // When targeting es6, mark that we'll need to capture `this` in its lexically bound scope.
-            if (capturedByArrowFunction && languageVersion < 2 /* ES2015 */) {
+            if (!isNodeInTypeQuery && capturedByArrowFunction && languageVersion < 2 /* ES2015 */) {
                 captureLexicalThis(node, container);
             }
             var type = tryGetThisTypeAt(node, /*includeGlobalThis*/ true, container);
@@ -67233,7 +68471,7 @@
             }
             if (ts.isClassLike(container.parent)) {
                 var symbol = getSymbolOfNode(container.parent);
-                var type = ts.hasSyntacticModifier(container, 32 /* Static */) ? getTypeOfSymbol(symbol) : getDeclaredTypeOfSymbol(symbol).thisType;
+                var type = ts.isStatic(container) ? getTypeOfSymbol(symbol) : getDeclaredTypeOfSymbol(symbol).thisType;
                 return getFlowTypeOfReference(node, type);
             }
             if (ts.isSourceFile(container)) {
@@ -67261,12 +68499,12 @@
             }
             if (ts.isClassLike(container.parent)) {
                 var symbol = getSymbolOfNode(container.parent);
-                return ts.hasSyntacticModifier(container, 32 /* Static */) ? getTypeOfSymbol(symbol) : getDeclaredTypeOfSymbol(symbol).thisType;
+                return ts.isStatic(container) ? getTypeOfSymbol(symbol) : getDeclaredTypeOfSymbol(symbol).thisType;
             }
         }
         function getClassNameFromPrototypeMethod(container) {
             // Check if it's the RHS of a x.prototype.y = function [name]() { .... }
-            if (container.kind === 209 /* FunctionExpression */ &&
+            if (container.kind === 211 /* FunctionExpression */ &&
                 ts.isBinaryExpression(container.parent) &&
                 ts.getAssignmentDeclarationKind(container.parent) === 3 /* PrototypeProperty */) {
                 // Get the 'x' of 'x.prototype.y = container'
@@ -67276,16 +68514,16 @@
                     .expression; // x
             }
             // x.prototype = { method() { } }
-            else if (container.kind === 166 /* MethodDeclaration */ &&
-                container.parent.kind === 201 /* ObjectLiteralExpression */ &&
+            else if (container.kind === 167 /* MethodDeclaration */ &&
+                container.parent.kind === 203 /* ObjectLiteralExpression */ &&
                 ts.isBinaryExpression(container.parent.parent) &&
                 ts.getAssignmentDeclarationKind(container.parent.parent) === 6 /* Prototype */) {
                 return container.parent.parent.left.expression;
             }
             // x.prototype = { method: function() { } }
-            else if (container.kind === 209 /* FunctionExpression */ &&
-                container.parent.kind === 289 /* PropertyAssignment */ &&
-                container.parent.parent.kind === 201 /* ObjectLiteralExpression */ &&
+            else if (container.kind === 211 /* FunctionExpression */ &&
+                container.parent.kind === 291 /* PropertyAssignment */ &&
+                container.parent.parent.kind === 203 /* ObjectLiteralExpression */ &&
                 ts.isBinaryExpression(container.parent.parent.parent) &&
                 ts.getAssignmentDeclarationKind(container.parent.parent.parent) === 6 /* Prototype */) {
                 return container.parent.parent.parent.left.expression;
@@ -67293,7 +68531,7 @@
             // Object.defineProperty(x, "method", { value: function() { } });
             // Object.defineProperty(x, "method", { set: (x: () => void) => void });
             // Object.defineProperty(x, "method", { get: () => function() { }) });
-            else if (container.kind === 209 /* FunctionExpression */ &&
+            else if (container.kind === 211 /* FunctionExpression */ &&
                 ts.isPropertyAssignment(container.parent) &&
                 ts.isIdentifier(container.parent.name) &&
                 (container.parent.name.escapedText === "value" || container.parent.name.escapedText === "get" || container.parent.name.escapedText === "set") &&
@@ -67318,7 +68556,7 @@
         }
         function getTypeForThisExpressionFromJSDoc(node) {
             var jsdocType = ts.getJSDocType(node);
-            if (jsdocType && jsdocType.kind === 309 /* JSDocFunctionType */) {
+            if (jsdocType && jsdocType.kind === 312 /* JSDocFunctionType */) {
                 var jsDocFunctionType = jsdocType;
                 if (jsDocFunctionType.parameters.length > 0 &&
                     jsDocFunctionType.parameters[0].name &&
@@ -67332,16 +68570,16 @@
             }
         }
         function isInConstructorArgumentInitializer(node, constructorDecl) {
-            return !!ts.findAncestor(node, function (n) { return ts.isFunctionLikeDeclaration(n) ? "quit" : n.kind === 161 /* Parameter */ && n.parent === constructorDecl; });
+            return !!ts.findAncestor(node, function (n) { return ts.isFunctionLikeDeclaration(n) ? "quit" : n.kind === 162 /* Parameter */ && n.parent === constructorDecl; });
         }
         function checkSuperExpression(node) {
-            var isCallExpression = node.parent.kind === 204 /* CallExpression */ && node.parent.expression === node;
+            var isCallExpression = node.parent.kind === 206 /* CallExpression */ && node.parent.expression === node;
             var immediateContainer = ts.getSuperContainer(node, /*stopOnFunctions*/ true);
             var container = immediateContainer;
             var needToCaptureLexicalThis = false;
             // adjust the container reference in case if super is used inside arrow functions with arbitrarily deep nesting
             if (!isCallExpression) {
-                while (container && container.kind === 210 /* ArrowFunction */) {
+                while (container && container.kind === 212 /* ArrowFunction */) {
                     container = ts.getSuperContainer(container, /*stopOnFunctions*/ true);
                     needToCaptureLexicalThis = languageVersion < 2 /* ES2015 */;
                 }
@@ -67354,14 +68592,14 @@
                 // class B {
                 //     [super.foo()]() {}
                 // }
-                var current = ts.findAncestor(node, function (n) { return n === container ? "quit" : n.kind === 159 /* ComputedPropertyName */; });
-                if (current && current.kind === 159 /* ComputedPropertyName */) {
+                var current = ts.findAncestor(node, function (n) { return n === container ? "quit" : n.kind === 160 /* ComputedPropertyName */; });
+                if (current && current.kind === 160 /* ComputedPropertyName */) {
                     error(node, ts.Diagnostics.super_cannot_be_referenced_in_a_computed_property_name);
                 }
                 else if (isCallExpression) {
                     error(node, ts.Diagnostics.Super_calls_are_not_permitted_outside_constructors_or_in_nested_functions_inside_constructors);
                 }
-                else if (!container || !container.parent || !(ts.isClassLike(container.parent) || container.parent.kind === 201 /* ObjectLiteralExpression */)) {
+                else if (!container || !container.parent || !(ts.isClassLike(container.parent) || container.parent.kind === 203 /* ObjectLiteralExpression */)) {
                     error(node, ts.Diagnostics.super_can_only_be_referenced_in_members_of_derived_classes_or_object_literal_expressions);
                 }
                 else {
@@ -67369,11 +68607,23 @@
                 }
                 return errorType;
             }
-            if (!isCallExpression && immediateContainer.kind === 167 /* Constructor */) {
+            if (!isCallExpression && immediateContainer.kind === 169 /* Constructor */) {
                 checkThisBeforeSuper(node, container, ts.Diagnostics.super_must_be_called_before_accessing_a_property_of_super_in_the_constructor_of_a_derived_class);
             }
-            if (ts.hasSyntacticModifier(container, 32 /* Static */) || isCallExpression) {
+            if (ts.isStatic(container) || isCallExpression) {
                 nodeCheckFlag = 512 /* SuperStatic */;
+                if (!isCallExpression &&
+                    languageVersion >= 2 /* ES2015 */ && languageVersion <= 8 /* ES2021 */ &&
+                    (ts.isPropertyDeclaration(container) || ts.isClassStaticBlockDeclaration(container))) {
+                    // for `super.x` or `super[x]` in a static initializer, mark all enclosing
+                    // block scope containers so that we can report potential collisions with
+                    // `Reflect`.
+                    ts.forEachEnclosingBlockScopeContainer(node.parent, function (current) {
+                        if (!ts.isSourceFile(current) || ts.isExternalOrCommonJsModule(current)) {
+                            getNodeLinks(current).flags |= 134217728 /* ContainsSuperPropertyInStaticInitializer */;
+                        }
+                    });
+                }
             }
             else {
                 nodeCheckFlag = 256 /* SuperInstance */;
@@ -67438,7 +68688,7 @@
             // as a call expression cannot be used as the target of a destructuring assignment while a property access can.
             //
             // For element access expressions (`super[x]`), we emit a generic helper that forwards the element access in both situations.
-            if (container.kind === 166 /* MethodDeclaration */ && ts.hasSyntacticModifier(container, 256 /* Async */)) {
+            if (container.kind === 167 /* MethodDeclaration */ && ts.hasSyntacticModifier(container, 256 /* Async */)) {
                 if (ts.isSuperProperty(node.parent) && ts.isAssignmentTarget(node.parent)) {
                     getNodeLinks(container).flags |= 4096 /* AsyncMethodWithSuperBinding */;
                 }
@@ -67452,7 +68702,7 @@
                 // in this case they should also use correct lexical this
                 captureLexicalThis(node.parent, container);
             }
-            if (container.parent.kind === 201 /* ObjectLiteralExpression */) {
+            if (container.parent.kind === 203 /* ObjectLiteralExpression */) {
                 if (languageVersion < 2 /* ES2015 */) {
                     error(node, ts.Diagnostics.super_is_only_allowed_in_members_of_object_literal_expressions_when_option_target_is_ES2015_or_higher);
                     return errorType;
@@ -67473,7 +68723,7 @@
             if (!baseClassType) {
                 return errorType;
             }
-            if (container.kind === 167 /* Constructor */ && isInConstructorArgumentInitializer(node, container)) {
+            if (container.kind === 169 /* Constructor */ && isInConstructorArgumentInitializer(node, container)) {
                 // issue custom error message for super property access in constructor arguments (to be aligned with old compiler)
                 error(node, ts.Diagnostics.super_cannot_be_referenced_in_constructor_arguments);
                 return errorType;
@@ -67488,7 +68738,7 @@
                 if (isCallExpression) {
                     // TS 1.0 SPEC (April 2014): 4.8.1
                     // Super calls are only permitted in constructors of derived classes
-                    return container.kind === 167 /* Constructor */;
+                    return container.kind === 169 /* Constructor */;
                 }
                 else {
                     // TS 1.0 SPEC (April 2014)
@@ -67496,21 +68746,23 @@
                     // - In a constructor, instance member function, instance member accessor, or instance member variable initializer where this references a derived class instance
                     // - In a static member function or static member accessor
                     // topmost container must be something that is directly nested in the class declaration\object literal expression
-                    if (ts.isClassLike(container.parent) || container.parent.kind === 201 /* ObjectLiteralExpression */) {
-                        if (ts.hasSyntacticModifier(container, 32 /* Static */)) {
-                            return container.kind === 166 /* MethodDeclaration */ ||
-                                container.kind === 165 /* MethodSignature */ ||
-                                container.kind === 168 /* GetAccessor */ ||
-                                container.kind === 169 /* SetAccessor */;
+                    if (ts.isClassLike(container.parent) || container.parent.kind === 203 /* ObjectLiteralExpression */) {
+                        if (ts.isStatic(container)) {
+                            return container.kind === 167 /* MethodDeclaration */ ||
+                                container.kind === 166 /* MethodSignature */ ||
+                                container.kind === 170 /* GetAccessor */ ||
+                                container.kind === 171 /* SetAccessor */ ||
+                                container.kind === 165 /* PropertyDeclaration */ ||
+                                container.kind === 168 /* ClassStaticBlockDeclaration */;
                         }
                         else {
-                            return container.kind === 166 /* MethodDeclaration */ ||
-                                container.kind === 165 /* MethodSignature */ ||
-                                container.kind === 168 /* GetAccessor */ ||
-                                container.kind === 169 /* SetAccessor */ ||
-                                container.kind === 164 /* PropertyDeclaration */ ||
-                                container.kind === 163 /* PropertySignature */ ||
-                                container.kind === 167 /* Constructor */;
+                            return container.kind === 167 /* MethodDeclaration */ ||
+                                container.kind === 166 /* MethodSignature */ ||
+                                container.kind === 170 /* GetAccessor */ ||
+                                container.kind === 171 /* SetAccessor */ ||
+                                container.kind === 165 /* PropertyDeclaration */ ||
+                                container.kind === 164 /* PropertySignature */ ||
+                                container.kind === 169 /* Constructor */;
                         }
                     }
                 }
@@ -67518,10 +68770,10 @@
             }
         }
         function getContainingObjectLiteral(func) {
-            return (func.kind === 166 /* MethodDeclaration */ ||
-                func.kind === 168 /* GetAccessor */ ||
-                func.kind === 169 /* SetAccessor */) && func.parent.kind === 201 /* ObjectLiteralExpression */ ? func.parent :
-                func.kind === 209 /* FunctionExpression */ && func.parent.kind === 289 /* PropertyAssignment */ ? func.parent.parent :
+            return (func.kind === 167 /* MethodDeclaration */ ||
+                func.kind === 170 /* GetAccessor */ ||
+                func.kind === 171 /* SetAccessor */) && func.parent.kind === 203 /* ObjectLiteralExpression */ ? func.parent :
+                func.kind === 211 /* FunctionExpression */ && func.parent.kind === 291 /* PropertyAssignment */ ? func.parent.parent :
                     undefined;
         }
         function getThisTypeArgument(type) {
@@ -67533,7 +68785,7 @@
             });
         }
         function getContextualThisParameterType(func) {
-            if (func.kind === 210 /* ArrowFunction */) {
+            if (func.kind === 212 /* ArrowFunction */) {
                 return undefined;
             }
             if (isContextSensitiveFunctionOrObjectLiteralMethod(func)) {
@@ -67560,7 +68812,7 @@
                         if (thisType) {
                             return instantiateType(thisType, getMapperFromContext(getInferenceContext(containingLiteral)));
                         }
-                        if (literal.parent.kind !== 289 /* PropertyAssignment */) {
+                        if (literal.parent.kind !== 291 /* PropertyAssignment */) {
                             break;
                         }
                         literal = literal.parent.parent;
@@ -67574,7 +68826,7 @@
                 // In an assignment of the form 'obj.xxx = function(...)' or 'obj[xxx] = function(...)', the
                 // contextual type for 'this' is 'obj'.
                 var parent = ts.walkUpParenthesizedExpressions(func.parent);
-                if (parent.kind === 217 /* BinaryExpression */ && parent.operatorToken.kind === 62 /* EqualsToken */) {
+                if (parent.kind === 219 /* BinaryExpression */ && parent.operatorToken.kind === 63 /* EqualsToken */) {
                     var target = parent.left;
                     if (ts.isAccessExpression(target)) {
                         var expression = target.expression;
@@ -67627,12 +68879,12 @@
                 return getTypeFromTypeNode(typeNode);
             }
             switch (declaration.kind) {
-                case 161 /* Parameter */:
+                case 162 /* Parameter */:
                     return getContextuallyTypedParameterType(declaration);
-                case 199 /* BindingElement */:
+                case 201 /* BindingElement */:
                     return getContextualTypeForBindingElement(declaration);
-                case 164 /* PropertyDeclaration */:
-                    if (ts.hasSyntacticModifier(declaration, 32 /* Static */)) {
+                case 165 /* PropertyDeclaration */:
+                    if (ts.isStatic(declaration)) {
                         return getContextualTypeForStaticPropertyDeclaration(declaration);
                     }
                 // By default, do nothing and return undefined - only the above cases have context implied by a parent
@@ -67642,10 +68894,10 @@
             var parent = declaration.parent.parent;
             var name = declaration.propertyName || declaration.name;
             var parentType = getContextualTypeForVariableLikeDeclaration(parent) ||
-                parent.kind !== 199 /* BindingElement */ && parent.initializer && checkDeclarationInitializer(parent);
+                parent.kind !== 201 /* BindingElement */ && parent.initializer && checkDeclarationInitializer(parent);
             if (!parentType || ts.isBindingPattern(name) || ts.isComputedNonLiteralName(name))
                 return undefined;
-            if (parent.name.kind === 198 /* ArrayBindingPattern */) {
+            if (parent.name.kind === 200 /* ArrayBindingPattern */) {
                 var index = ts.indexOfNode(declaration.parent.elements, declaration);
                 if (index < 0)
                     return undefined;
@@ -67779,10 +69031,13 @@
             if (ts.isJsxOpeningLikeElement(callTarget) && argIndex === 0) {
                 return getEffectiveFirstArgumentForJsxSignature(signature, callTarget);
             }
-            return getTypeAtPosition(signature, argIndex);
+            var restIndex = signature.parameters.length - 1;
+            return signatureHasRestParameter(signature) && argIndex >= restIndex ?
+                getIndexedAccessType(getTypeOfSymbol(signature.parameters[restIndex]), getNumberLiteralType(argIndex - restIndex), 256 /* Contextual */) :
+                getTypeAtPosition(signature, argIndex);
         }
         function getContextualTypeForSubstitutionExpression(template, substitutionExpression) {
-            if (template.parent.kind === 206 /* TaggedTemplateExpression */) {
+            if (template.parent.kind === 208 /* TaggedTemplateExpression */) {
                 return getContextualTypeForArgument(template.parent, substitutionExpression);
             }
             return undefined;
@@ -67791,10 +69046,10 @@
             var binaryExpression = node.parent;
             var left = binaryExpression.left, operatorToken = binaryExpression.operatorToken, right = binaryExpression.right;
             switch (operatorToken.kind) {
-                case 62 /* EqualsToken */:
-                case 75 /* AmpersandAmpersandEqualsToken */:
-                case 74 /* BarBarEqualsToken */:
-                case 76 /* QuestionQuestionEqualsToken */:
+                case 63 /* EqualsToken */:
+                case 76 /* AmpersandAmpersandEqualsToken */:
+                case 75 /* BarBarEqualsToken */:
+                case 77 /* QuestionQuestionEqualsToken */:
                     return node === right ? getContextualTypeForAssignmentDeclaration(binaryExpression) : undefined;
                 case 56 /* BarBarToken */:
                 case 60 /* QuestionQuestionToken */:
@@ -67813,6 +69068,27 @@
                     return undefined;
             }
         }
+        /**
+         * Try to find a resolved symbol for an expression without also resolving its type, as
+         * getSymbolAtLocation would (as that could be reentrant into contextual typing)
+         */
+        function getSymbolForExpression(e) {
+            if (e.symbol) {
+                return e.symbol;
+            }
+            if (ts.isIdentifier(e)) {
+                return getResolvedSymbol(e);
+            }
+            if (ts.isPropertyAccessExpression(e)) {
+                var lhsType = getTypeOfExpression(e.expression);
+                return ts.isPrivateIdentifier(e.name) ? tryGetPrivateIdentifierPropertyOfType(lhsType, e.name) : getPropertyOfType(lhsType, e.name.escapedText);
+            }
+            return undefined;
+            function tryGetPrivateIdentifierPropertyOfType(type, id) {
+                var lexicallyScopedSymbol = lookupSymbolForPrivateIdentifierDeclaration(id.escapedText, id);
+                return lexicallyScopedSymbol && getPrivateIdentifierPropertyOfType(type, lexicallyScopedSymbol);
+            }
+        }
         // In an assignment expression, the right operand is contextually typed by the type of the left operand.
         // Don't do this for assignment declarations unless there is a type tag on the assignment, to avoid circularity from checking the right operand.
         function getContextualTypeForAssignmentDeclaration(binaryExpression) {
@@ -67820,8 +69096,19 @@
             var kind = ts.getAssignmentDeclarationKind(binaryExpression);
             switch (kind) {
                 case 0 /* None */:
-                    return getTypeOfExpression(binaryExpression.left);
                 case 4 /* ThisProperty */:
+                    var lhsSymbol = getSymbolForExpression(binaryExpression.left);
+                    var decl = lhsSymbol && lhsSymbol.valueDeclaration;
+                    // Unannotated, uninitialized property declarations have a type implied by their usage in the constructor.
+                    // We avoid calling back into `getTypeOfExpression` and reentering contextual typing to avoid a bogus circularity error in that case.
+                    if (decl && (ts.isPropertyDeclaration(decl) || ts.isPropertySignature(decl))) {
+                        var overallAnnotation = ts.getEffectiveTypeAnnotationNode(decl);
+                        return (overallAnnotation && instantiateType(getTypeFromTypeNode(overallAnnotation), getSymbolLinks(lhsSymbol).mapper)) ||
+                            (decl.initializer && getTypeOfExpression(binaryExpression.left));
+                    }
+                    if (kind === 0 /* None */) {
+                        return getTypeOfExpression(binaryExpression.left);
+                    }
                     return getContextualTypeForThisPropertyAssignment(binaryExpression);
                 case 5 /* Property */:
                     if (isPossiblyAliasedThisProperty(binaryExpression, kind)) {
@@ -67833,12 +69120,12 @@
                         return getTypeOfExpression(binaryExpression.left);
                     }
                     else {
-                        var decl = binaryExpression.left.symbol.valueDeclaration;
-                        if (!decl) {
+                        var decl_1 = binaryExpression.left.symbol.valueDeclaration;
+                        if (!decl_1) {
                             return undefined;
                         }
                         var lhs = ts.cast(binaryExpression.left, ts.isAccessExpression);
-                        var overallAnnotation = ts.getEffectiveTypeAnnotationNode(decl);
+                        var overallAnnotation = ts.getEffectiveTypeAnnotationNode(decl_1);
                         if (overallAnnotation) {
                             return getTypeFromTypeNode(overallAnnotation);
                         }
@@ -67856,7 +69143,7 @@
                                 return undefined;
                             }
                         }
-                        return ts.isInJSFile(decl) ? undefined : getTypeOfExpression(binaryExpression.left);
+                        return ts.isInJSFile(decl_1) ? undefined : getTypeOfExpression(binaryExpression.left);
                     }
                 case 1 /* ExportsProperty */:
                 case 6 /* Prototype */:
@@ -67912,10 +69199,11 @@
         }
         function getTypeOfPropertyOfContextualType(type, name) {
             return mapType(type, function (t) {
+                var _a;
                 if (isGenericMappedType(t)) {
                     var constraint = getConstraintTypeFromMappedType(t);
                     var constraintOfConstraint = getBaseConstraintOfType(constraint) || constraint;
-                    var propertyNameType = getLiteralType(ts.unescapeLeadingUnderscores(name));
+                    var propertyNameType = getStringLiteralType(ts.unescapeLeadingUnderscores(name));
                     if (isTypeAssignableTo(propertyNameType, constraintOfConstraint)) {
                         return substituteIndexedMappedType(t, propertyNameType);
                     }
@@ -67931,15 +69219,11 @@
                             return restType;
                         }
                     }
-                    return isNumericLiteralName(name) && getIndexTypeOfContextualType(t, 1 /* Number */) ||
-                        getIndexTypeOfContextualType(t, 0 /* String */);
+                    return (_a = findApplicableIndexInfo(getIndexInfosOfStructuredType(t), getStringLiteralType(ts.unescapeLeadingUnderscores(name)))) === null || _a === void 0 ? void 0 : _a.type;
                 }
                 return undefined;
             }, /*noReductions*/ true);
         }
-        function getIndexTypeOfContextualType(type, kind) {
-            return mapType(type, function (t) { return getIndexTypeOfStructuredType(t, kind); }, /*noReductions*/ true);
-        }
         // In an object literal contextually typed by a type T, the contextual type of a property assignment is the type of
         // the matching property in T, if one exists. Otherwise, it is the type of the numeric index signature in T, if one
         // exists. Otherwise, it is the type of the string index signature in T, if one exists.
@@ -67963,14 +69247,13 @@
                     // For a (non-symbol) computed property, there is no reason to look up the name
                     // in the type. It will just be "__computed", which does not appear in any
                     // SymbolTable.
-                    var symbolName_3 = getSymbolOfNode(element).escapedName;
-                    var propertyType = getTypeOfPropertyOfContextualType(type, symbolName_3);
-                    if (propertyType) {
-                        return propertyType;
-                    }
+                    return getTypeOfPropertyOfContextualType(type, getSymbolOfNode(element).escapedName);
                 }
-                return isNumericName(element.name) && getIndexTypeOfContextualType(type, 1 /* Number */) ||
-                    getIndexTypeOfContextualType(type, 0 /* String */);
+                if (element.name) {
+                    var nameType_1 = getLiteralTypeFromPropertyName(element.name);
+                    // We avoid calling getApplicableIndexInfo here because it performs potentially expensive intersection reduction.
+                    return mapType(type, function (t) { var _a; return (_a = findApplicableIndexInfo(getIndexInfosOfStructuredType(t), nameType_1)) === null || _a === void 0 ? void 0 : _a.type; }, /*noReductions*/ true);
+                }
             }
             return undefined;
         }
@@ -68000,7 +69283,7 @@
             var childFieldType = getTypeOfPropertyOfContextualType(attributesType, jsxChildrenPropertyName);
             return childFieldType && (realChildren.length === 1 ? childFieldType : mapType(childFieldType, function (t) {
                 if (isArrayLikeType(t)) {
-                    return getIndexedAccessType(t, getLiteralType(childIndex));
+                    return getIndexedAccessType(t, getNumberLiteralType(childIndex));
                 }
                 else {
                     return t;
@@ -68039,25 +69322,25 @@
                 case 8 /* NumericLiteral */:
                 case 9 /* BigIntLiteral */:
                 case 14 /* NoSubstitutionTemplateLiteral */:
-                case 109 /* TrueKeyword */:
-                case 94 /* FalseKeyword */:
-                case 103 /* NullKeyword */:
-                case 78 /* Identifier */:
-                case 150 /* UndefinedKeyword */:
+                case 110 /* TrueKeyword */:
+                case 95 /* FalseKeyword */:
+                case 104 /* NullKeyword */:
+                case 79 /* Identifier */:
+                case 151 /* UndefinedKeyword */:
                     return true;
-                case 202 /* PropertyAccessExpression */:
-                case 208 /* ParenthesizedExpression */:
+                case 204 /* PropertyAccessExpression */:
+                case 210 /* ParenthesizedExpression */:
                     return isPossiblyDiscriminantValue(node.expression);
-                case 284 /* JsxExpression */:
+                case 286 /* JsxExpression */:
                     return !node.expression || isPossiblyDiscriminantValue(node.expression);
             }
             return false;
         }
         function discriminateContextualTypeByObjectMembers(node, contextualType) {
-            return getMatchingUnionConstituentForObjectLiteral(contextualType, node) || discriminateTypeByDiscriminableItems(contextualType, ts.concatenate(ts.map(ts.filter(node.properties, function (p) { return !!p.symbol && p.kind === 289 /* PropertyAssignment */ && isPossiblyDiscriminantValue(p.initializer) && isDiscriminantProperty(contextualType, p.symbol.escapedName); }), function (prop) { return [function () { return getContextFreeTypeOfExpression(prop.initializer); }, prop.symbol.escapedName]; }), ts.map(ts.filter(getPropertiesOfType(contextualType), function (s) { var _a; return !!(s.flags & 16777216 /* Optional */) && !!((_a = node === null || node === void 0 ? void 0 : node.symbol) === null || _a === void 0 ? void 0 : _a.members) && !node.symbol.members.has(s.escapedName) && isDiscriminantProperty(contextualType, s.escapedName); }), function (s) { return [function () { return undefinedType; }, s.escapedName]; })), isTypeAssignableTo, contextualType);
+            return getMatchingUnionConstituentForObjectLiteral(contextualType, node) || discriminateTypeByDiscriminableItems(contextualType, ts.concatenate(ts.map(ts.filter(node.properties, function (p) { return !!p.symbol && p.kind === 291 /* PropertyAssignment */ && isPossiblyDiscriminantValue(p.initializer) && isDiscriminantProperty(contextualType, p.symbol.escapedName); }), function (prop) { return [function () { return getContextFreeTypeOfExpression(prop.initializer); }, prop.symbol.escapedName]; }), ts.map(ts.filter(getPropertiesOfType(contextualType), function (s) { var _a; return !!(s.flags & 16777216 /* Optional */) && !!((_a = node === null || node === void 0 ? void 0 : node.symbol) === null || _a === void 0 ? void 0 : _a.members) && !node.symbol.members.has(s.escapedName) && isDiscriminantProperty(contextualType, s.escapedName); }), function (s) { return [function () { return undefinedType; }, s.escapedName]; })), isTypeAssignableTo, contextualType);
         }
         function discriminateContextualTypeByJSXAttributes(node, contextualType) {
-            return discriminateTypeByDiscriminableItems(contextualType, ts.concatenate(ts.map(ts.filter(node.properties, function (p) { return !!p.symbol && p.kind === 281 /* JsxAttribute */ && isDiscriminantProperty(contextualType, p.symbol.escapedName) && (!p.initializer || isPossiblyDiscriminantValue(p.initializer)); }), function (prop) { return [!prop.initializer ? (function () { return trueType; }) : (function () { return checkExpression(prop.initializer); }), prop.symbol.escapedName]; }), ts.map(ts.filter(getPropertiesOfType(contextualType), function (s) { var _a; return !!(s.flags & 16777216 /* Optional */) && !!((_a = node === null || node === void 0 ? void 0 : node.symbol) === null || _a === void 0 ? void 0 : _a.members) && !node.symbol.members.has(s.escapedName) && isDiscriminantProperty(contextualType, s.escapedName); }), function (s) { return [function () { return undefinedType; }, s.escapedName]; })), isTypeAssignableTo, contextualType);
+            return discriminateTypeByDiscriminableItems(contextualType, ts.concatenate(ts.map(ts.filter(node.properties, function (p) { return !!p.symbol && p.kind === 283 /* JsxAttribute */ && isDiscriminantProperty(contextualType, p.symbol.escapedName) && (!p.initializer || isPossiblyDiscriminantValue(p.initializer)); }), function (prop) { return [!prop.initializer ? (function () { return trueType; }) : (function () { return checkExpression(prop.initializer); }), prop.symbol.escapedName]; }), ts.map(ts.filter(getPropertiesOfType(contextualType), function (s) { var _a; return !!(s.flags & 16777216 /* Optional */) && !!((_a = node === null || node === void 0 ? void 0 : node.symbol) === null || _a === void 0 ? void 0 : _a.members) && !node.symbol.members.has(s.escapedName) && isDiscriminantProperty(contextualType, s.escapedName); }), function (s) { return [function () { return undefinedType; }, s.escapedName]; })), isTypeAssignableTo, contextualType);
         }
         // Return the contextual type for a given expression node. During overload resolution, a contextual type may temporarily
         // be "pushed" onto a node using the contextualType property.
@@ -68137,60 +69420,60 @@
             }
             var parent = node.parent;
             switch (parent.kind) {
-                case 250 /* VariableDeclaration */:
-                case 161 /* Parameter */:
-                case 164 /* PropertyDeclaration */:
-                case 163 /* PropertySignature */:
-                case 199 /* BindingElement */:
+                case 252 /* VariableDeclaration */:
+                case 162 /* Parameter */:
+                case 165 /* PropertyDeclaration */:
+                case 164 /* PropertySignature */:
+                case 201 /* BindingElement */:
                     return getContextualTypeForInitializerExpression(node, contextFlags);
-                case 210 /* ArrowFunction */:
-                case 243 /* ReturnStatement */:
+                case 212 /* ArrowFunction */:
+                case 245 /* ReturnStatement */:
                     return getContextualTypeForReturnExpression(node);
-                case 220 /* YieldExpression */:
+                case 222 /* YieldExpression */:
                     return getContextualTypeForYieldOperand(parent);
-                case 214 /* AwaitExpression */:
+                case 216 /* AwaitExpression */:
                     return getContextualTypeForAwaitOperand(parent, contextFlags);
-                case 204 /* CallExpression */:
-                    if (parent.expression.kind === 99 /* ImportKeyword */) {
+                case 206 /* CallExpression */:
+                    if (parent.expression.kind === 100 /* ImportKeyword */) {
                         return stringType;
                     }
                 /* falls through */
-                case 205 /* NewExpression */:
+                case 207 /* NewExpression */:
                     return getContextualTypeForArgument(parent, node);
-                case 207 /* TypeAssertionExpression */:
-                case 225 /* AsExpression */:
+                case 209 /* TypeAssertionExpression */:
+                case 227 /* AsExpression */:
                     return ts.isConstTypeReference(parent.type) ? tryFindWhenConstTypeReference(parent) : getTypeFromTypeNode(parent.type);
-                case 217 /* BinaryExpression */:
+                case 219 /* BinaryExpression */:
                     return getContextualTypeForBinaryOperand(node, contextFlags);
-                case 289 /* PropertyAssignment */:
-                case 290 /* ShorthandPropertyAssignment */:
+                case 291 /* PropertyAssignment */:
+                case 292 /* ShorthandPropertyAssignment */:
                     return getContextualTypeForObjectLiteralElement(parent, contextFlags);
-                case 291 /* SpreadAssignment */:
+                case 293 /* SpreadAssignment */:
                     return getContextualType(parent.parent, contextFlags);
-                case 200 /* ArrayLiteralExpression */: {
+                case 202 /* ArrayLiteralExpression */: {
                     var arrayLiteral = parent;
                     var type = getApparentTypeOfContextualType(arrayLiteral, contextFlags);
                     return getContextualTypeForElementExpression(type, ts.indexOfNode(arrayLiteral.elements, node));
                 }
-                case 218 /* ConditionalExpression */:
+                case 220 /* ConditionalExpression */:
                     return getContextualTypeForConditionalOperand(node, contextFlags);
-                case 229 /* TemplateSpan */:
-                    ts.Debug.assert(parent.parent.kind === 219 /* TemplateExpression */);
+                case 231 /* TemplateSpan */:
+                    ts.Debug.assert(parent.parent.kind === 221 /* TemplateExpression */);
                     return getContextualTypeForSubstitutionExpression(parent.parent, node);
-                case 208 /* ParenthesizedExpression */: {
+                case 210 /* ParenthesizedExpression */: {
                     // Like in `checkParenthesizedExpression`, an `/** @type {xyz} */` comment before a parenthesized expression acts as a type cast.
                     var tag = ts.isInJSFile(parent) ? ts.getJSDocTypeTag(parent) : undefined;
                     return tag ? getTypeFromTypeNode(tag.typeExpression.type) : getContextualType(parent, contextFlags);
                 }
-                case 226 /* NonNullExpression */:
+                case 228 /* NonNullExpression */:
                     return getContextualType(parent, contextFlags);
-                case 284 /* JsxExpression */:
+                case 286 /* JsxExpression */:
                     return getContextualTypeForJsxExpression(parent);
-                case 281 /* JsxAttribute */:
-                case 283 /* JsxSpreadAttribute */:
+                case 283 /* JsxAttribute */:
+                case 285 /* JsxSpreadAttribute */:
                     return getContextualTypeForJsxAttribute(parent);
-                case 276 /* JsxOpeningElement */:
-                case 275 /* JsxSelfClosingElement */:
+                case 278 /* JsxOpeningElement */:
+                case 277 /* JsxSelfClosingElement */:
                     return getContextualJsxElementAttributesType(parent, contextFlags);
             }
             return undefined;
@@ -68430,7 +69713,7 @@
             return !hasEffectiveRestParameter(signature) && getParameterCount(signature) < targetParameterCount;
         }
         function isFunctionExpressionOrArrowFunction(node) {
-            return node.kind === 209 /* FunctionExpression */ || node.kind === 210 /* ArrowFunction */;
+            return node.kind === 211 /* FunctionExpression */ || node.kind === 212 /* ArrowFunction */;
         }
         function getContextualSignatureForFunctionLikeDeclaration(node) {
             // Only function expressions, arrow functions, and object literal methods are contextually typed.
@@ -68444,7 +69727,7 @@
         // all identical ignoring their return type, the result is same signature but with return type as
         // union type of return types from these signatures
         function getContextualSignature(node) {
-            ts.Debug.assert(node.kind !== 166 /* MethodDeclaration */ || ts.isObjectLiteralMethod(node));
+            ts.Debug.assert(node.kind !== 167 /* MethodDeclaration */ || ts.isObjectLiteralMethod(node));
             var typeTagSignature = getSignatureOfTypeTag(node);
             if (typeTagSignature) {
                 return typeTagSignature;
@@ -68458,8 +69741,8 @@
             }
             var signatureList;
             var types = type.types;
-            for (var _i = 0, types_20 = types; _i < types_20.length; _i++) {
-                var current = types_20[_i];
+            for (var _i = 0, types_19 = types; _i < types_19.length; _i++) {
+                var current = types_19[_i];
                 var signature = getContextualCallSignature(current, node);
                 if (signature) {
                     if (!signatureList) {
@@ -68492,8 +69775,8 @@
             return node.isSpread ? getIndexedAccessType(node.type, numberType) : node.type;
         }
         function hasDefaultValue(node) {
-            return (node.kind === 199 /* BindingElement */ && !!node.initializer) ||
-                (node.kind === 217 /* BinaryExpression */ && node.operatorToken.kind === 62 /* EqualsToken */);
+            return (node.kind === 201 /* BindingElement */ && !!node.initializer) ||
+                (node.kind === 219 /* BinaryExpression */ && node.operatorToken.kind === 63 /* EqualsToken */);
         }
         function checkArrayLiteral(node, checkMode, forceTuple) {
             var elements = node.elements;
@@ -68503,9 +69786,10 @@
             var contextualType = getApparentTypeOfContextualType(node);
             var inDestructuringPattern = ts.isAssignmentTarget(node);
             var inConstContext = isConstContext(node);
+            var hasOmittedExpression = false;
             for (var i = 0; i < elementCount; i++) {
                 var e = elements[i];
-                if (e.kind === 221 /* SpreadElement */) {
+                if (e.kind === 223 /* SpreadElement */) {
                     if (languageVersion < 2 /* ES2015 */) {
                         checkExternalEmitHelpers(e, compilerOptions.downlevelIteration ? 1536 /* SpreadIncludes */ : 1024 /* SpreadArray */);
                     }
@@ -68527,7 +69811,7 @@
                         // get the contextual element type from it. So we do something similar to
                         // getContextualTypeForElementExpression, which will crucially not error
                         // if there is no index type / iterated type.
-                        var restElementType = getIndexTypeOfType(spreadType, 1 /* Number */) ||
+                        var restElementType = getIndexTypeOfType(spreadType, numberType) ||
                             getIteratedTypeOrElementType(65 /* Destructuring */, spreadType, undefinedType, /*errorNode*/ undefined, /*checkAssignability*/ false) ||
                             unknownType;
                         elementTypes.push(restElementType);
@@ -68538,11 +69822,16 @@
                         elementFlags.push(4 /* Rest */);
                     }
                 }
+                else if (exactOptionalPropertyTypes && e.kind === 225 /* OmittedExpression */) {
+                    hasOmittedExpression = true;
+                    elementTypes.push(missingType);
+                    elementFlags.push(2 /* Optional */);
+                }
                 else {
                     var elementContextualType = getContextualTypeForElementExpression(contextualType, elementTypes.length);
                     var type = checkExpressionForMutableLocation(e, checkMode, elementContextualType, forceTuple);
-                    elementTypes.push(type);
-                    elementFlags.push(1 /* Required */);
+                    elementTypes.push(addOptionality(type, /*isProperty*/ true, hasOmittedExpression));
+                    elementFlags.push(hasOmittedExpression ? 2 /* Optional */ : 1 /* Required */);
                 }
             }
             if (inDestructuringPattern) {
@@ -68568,9 +69857,9 @@
         }
         function isNumericName(name) {
             switch (name.kind) {
-                case 159 /* ComputedPropertyName */:
+                case 160 /* ComputedPropertyName */:
                     return isNumericComputedName(name);
-                case 78 /* Identifier */:
+                case 79 /* Identifier */:
                     return isNumericLiteralName(name.escapedText);
                 case 8 /* NumericLiteral */:
                 case 10 /* StringLiteral */:
@@ -68584,9 +69873,6 @@
             // but this behavior is consistent with checkIndexedAccess
             return isTypeAssignableToKind(checkComputedPropertyName(name), 296 /* NumberLike */);
         }
-        function isInfinityOrNaNString(name) {
-            return name === "Infinity" || name === "-Infinity" || name === "NaN";
-        }
         function isNumericLiteralName(name) {
             // The intent of numeric names is that
             //     - they are names with text in a numeric form, and that
@@ -68644,15 +69930,24 @@
             var firstDecl = (_a = symbol.declarations) === null || _a === void 0 ? void 0 : _a[0];
             return isNumericLiteralName(symbol.escapedName) || (firstDecl && ts.isNamedDeclaration(firstDecl) && isNumericName(firstDecl.name));
         }
-        function getObjectLiteralIndexInfo(node, offset, properties, kind) {
+        function isSymbolWithSymbolName(symbol) {
+            var _a;
+            var firstDecl = (_a = symbol.declarations) === null || _a === void 0 ? void 0 : _a[0];
+            return ts.isKnownSymbol(symbol) || (firstDecl && ts.isNamedDeclaration(firstDecl) && ts.isComputedPropertyName(firstDecl.name) &&
+                isTypeAssignableToKind(checkComputedPropertyName(firstDecl.name), 4096 /* ESSymbol */));
+        }
+        function getObjectLiteralIndexInfo(node, offset, properties, keyType) {
             var propTypes = [];
             for (var i = offset; i < properties.length; i++) {
-                if (kind === 0 /* String */ || isSymbolWithNumericName(properties[i])) {
+                var prop = properties[i];
+                if (keyType === stringType && !isSymbolWithSymbolName(prop) ||
+                    keyType === numberType && isSymbolWithNumericName(prop) ||
+                    keyType === esSymbolType && isSymbolWithSymbolName(prop)) {
                     propTypes.push(getTypeOfSymbol(properties[i]));
                 }
             }
             var unionType = propTypes.length ? getUnionType(propTypes, 2 /* Subtype */) : undefinedType;
-            return createIndexInfo(unionType, isConstContext(node));
+            return createIndexInfo(keyType, unionType, isConstContext(node));
         }
         function getImmediateAliasedSymbol(symbol) {
             ts.Debug.assert((symbol.flags & 2097152 /* Alias */) !== 0, "Should only get Alias here.");
@@ -68675,7 +69970,7 @@
             var spread = emptyObjectType;
             var contextualType = getApparentTypeOfContextualType(node);
             var contextualTypeHasPattern = contextualType && contextualType.pattern &&
-                (contextualType.pattern.kind === 197 /* ObjectBindingPattern */ || contextualType.pattern.kind === 201 /* ObjectLiteralExpression */);
+                (contextualType.pattern.kind === 199 /* ObjectBindingPattern */ || contextualType.pattern.kind === 203 /* ObjectLiteralExpression */);
             var inConstContext = isConstContext(node);
             var checkFlags = inConstContext ? 8 /* Readonly */ : 0;
             var isInJavascript = ts.isInJSFile(node) && !ts.isInJsonFile(node);
@@ -68685,6 +69980,7 @@
             var patternWithComputedProperties = false;
             var hasComputedStringProperty = false;
             var hasComputedNumberProperty = false;
+            var hasComputedSymbolProperty = false;
             // Spreads may cause an early bail; ensure computed names are always checked (this is cached)
             // As otherwise they may not be checked until exports for the type at this position are retrieved,
             // which may never occur.
@@ -68698,16 +69994,16 @@
             for (var _b = 0, _c = node.properties; _b < _c.length; _b++) {
                 var memberDecl = _c[_b];
                 var member = getSymbolOfNode(memberDecl);
-                var computedNameType = memberDecl.name && memberDecl.name.kind === 159 /* ComputedPropertyName */ ?
+                var computedNameType = memberDecl.name && memberDecl.name.kind === 160 /* ComputedPropertyName */ ?
                     checkComputedPropertyName(memberDecl.name) : undefined;
-                if (memberDecl.kind === 289 /* PropertyAssignment */ ||
-                    memberDecl.kind === 290 /* ShorthandPropertyAssignment */ ||
+                if (memberDecl.kind === 291 /* PropertyAssignment */ ||
+                    memberDecl.kind === 292 /* ShorthandPropertyAssignment */ ||
                     ts.isObjectLiteralMethod(memberDecl)) {
-                    var type = memberDecl.kind === 289 /* PropertyAssignment */ ? checkPropertyAssignment(memberDecl, checkMode) :
+                    var type = memberDecl.kind === 291 /* PropertyAssignment */ ? checkPropertyAssignment(memberDecl, checkMode) :
                         // avoid resolving the left side of the ShorthandPropertyAssignment outside of the destructuring
                         // for error recovery purposes. For example, if a user wrote `{ a = 100 }` instead of `{ a: 100 }`.
                         // we don't want to say "could not find 'a'".
-                        memberDecl.kind === 290 /* ShorthandPropertyAssignment */ ? checkExpressionForMutableLocation(!inDestructuringPattern && memberDecl.objectAssignmentInitializer ? memberDecl.objectAssignmentInitializer : memberDecl.name, checkMode) :
+                        memberDecl.kind === 292 /* ShorthandPropertyAssignment */ ? checkExpressionForMutableLocation(!inDestructuringPattern && memberDecl.objectAssignmentInitializer ? memberDecl.objectAssignmentInitializer : memberDecl.name, checkMode) :
                             checkObjectLiteralMethod(memberDecl, checkMode);
                     if (isInJavascript) {
                         var jsDocType = getTypeForDeclarationFromJSDocComment(memberDecl);
@@ -68730,8 +70026,8 @@
                     if (inDestructuringPattern) {
                         // If object literal is an assignment pattern and if the assignment pattern specifies a default value
                         // for the property, make the property optional.
-                        var isOptional = (memberDecl.kind === 289 /* PropertyAssignment */ && hasDefaultValue(memberDecl.initializer)) ||
-                            (memberDecl.kind === 290 /* ShorthandPropertyAssignment */ && memberDecl.objectAssignmentInitializer);
+                        var isOptional = (memberDecl.kind === 291 /* PropertyAssignment */ && hasDefaultValue(memberDecl.initializer)) ||
+                            (memberDecl.kind === 292 /* ShorthandPropertyAssignment */ && memberDecl.objectAssignmentInitializer);
                         if (isOptional) {
                             prop.flags |= 16777216 /* Optional */;
                         }
@@ -68743,7 +70039,7 @@
                         if (impliedProp) {
                             prop.flags |= impliedProp.flags & 16777216 /* Optional */;
                         }
-                        else if (!compilerOptions.suppressExcessPropertyErrors && !getIndexInfoOfType(contextualType, 0 /* String */)) {
+                        else if (!compilerOptions.suppressExcessPropertyErrors && !getIndexInfoOfType(contextualType, stringType)) {
                             error(memberDecl.name, ts.Diagnostics.Object_literal_may_only_specify_known_properties_and_0_does_not_exist_in_type_1, symbolToString(member), typeToString(contextualType));
                         }
                     }
@@ -68757,7 +70053,7 @@
                     member = prop;
                     allPropertiesTable === null || allPropertiesTable === void 0 ? void 0 : allPropertiesTable.set(prop.escapedName, prop);
                 }
-                else if (memberDecl.kind === 291 /* SpreadAssignment */) {
+                else if (memberDecl.kind === 293 /* SpreadAssignment */) {
                     if (languageVersion < 2 /* ES2015 */) {
                         checkExternalEmitHelpers(memberDecl, 2 /* Assign */);
                     }
@@ -68767,17 +70063,19 @@
                         propertiesTable = ts.createSymbolTable();
                         hasComputedStringProperty = false;
                         hasComputedNumberProperty = false;
+                        hasComputedSymbolProperty = false;
                     }
                     var type = getReducedType(checkExpression(memberDecl.expression));
                     if (isValidSpreadType(type)) {
+                        var mergedType = tryMergeUnionOfObjectTypeAndEmptyObject(type, inConstContext);
                         if (allPropertiesTable) {
-                            checkSpreadPropOverrides(type, allPropertiesTable, memberDecl);
+                            checkSpreadPropOverrides(mergedType, allPropertiesTable, memberDecl);
                         }
                         offset = propertiesArray.length;
                         if (spread === errorType) {
                             continue;
                         }
-                        spread = getSpreadType(spread, type, node.symbol, objectFlags, inConstContext);
+                        spread = getSpreadType(spread, mergedType, node.symbol, objectFlags, inConstContext);
                     }
                     else {
                         error(memberDecl, ts.Diagnostics.Spread_types_may_only_be_created_from_object_types);
@@ -68791,7 +70089,7 @@
                     // an ordinary function declaration(section 6.1) with no parameters.
                     // A set accessor declaration is processed in the same manner
                     // as an ordinary function declaration with a single parameter and a Void return type.
-                    ts.Debug.assert(memberDecl.kind === 168 /* GetAccessor */ || memberDecl.kind === 169 /* SetAccessor */);
+                    ts.Debug.assert(memberDecl.kind === 170 /* GetAccessor */ || memberDecl.kind === 171 /* SetAccessor */);
                     checkNodeDeferred(memberDecl);
                 }
                 if (computedNameType && !(computedNameType.flags & 8576 /* StringOrNumberLiteralOrUnique */)) {
@@ -68799,6 +70097,9 @@
                         if (isTypeAssignableTo(computedNameType, numberType)) {
                             hasComputedNumberProperty = true;
                         }
+                        else if (isTypeAssignableTo(computedNameType, esSymbolType)) {
+                            hasComputedSymbolProperty = true;
+                        }
                         else {
                             hasComputedStringProperty = true;
                         }
@@ -68816,7 +70117,7 @@
             // type with those properties for which the binding pattern specifies a default value.
             // If the object literal is spread into another object literal, skip this step and let the top-level object
             // literal handle it instead.
-            if (contextualTypeHasPattern && node.parent.kind !== 291 /* SpreadAssignment */) {
+            if (contextualTypeHasPattern && node.parent.kind !== 293 /* SpreadAssignment */) {
                 for (var _d = 0, _e = getPropertiesOfType(contextualType); _d < _e.length; _d++) {
                     var prop = _e[_d];
                     if (!propertiesTable.get(prop.escapedName) && !getPropertyOfType(spread, prop.escapedName)) {
@@ -68844,9 +70145,14 @@
             }
             return createObjectLiteralType();
             function createObjectLiteralType() {
-                var stringIndexInfo = hasComputedStringProperty ? getObjectLiteralIndexInfo(node, offset, propertiesArray, 0 /* String */) : undefined;
-                var numberIndexInfo = hasComputedNumberProperty ? getObjectLiteralIndexInfo(node, offset, propertiesArray, 1 /* Number */) : undefined;
-                var result = createAnonymousType(node.symbol, propertiesTable, ts.emptyArray, ts.emptyArray, stringIndexInfo, numberIndexInfo);
+                var indexInfos = [];
+                if (hasComputedStringProperty)
+                    indexInfos.push(getObjectLiteralIndexInfo(node, offset, propertiesArray, stringType));
+                if (hasComputedNumberProperty)
+                    indexInfos.push(getObjectLiteralIndexInfo(node, offset, propertiesArray, numberType));
+                if (hasComputedSymbolProperty)
+                    indexInfos.push(getObjectLiteralIndexInfo(node, offset, propertiesArray, esSymbolType));
+                var result = createAnonymousType(node.symbol, propertiesTable, ts.emptyArray, ts.emptyArray, indexInfos);
                 result.objectFlags |= objectFlags | 128 /* ObjectLiteral */ | 262144 /* ContainsObjectOrArrayLiteral */;
                 if (isJSObjectLiteral) {
                     result.objectFlags |= 8192 /* JSLiteral */;
@@ -68908,14 +70214,14 @@
             checkJsxChildren(node);
             return getJsxElementTypeAt(node) || anyType;
         }
-        function isUnhyphenatedJsxName(name) {
-            return !ts.stringContains(name, "-");
+        function isHyphenatedJsxName(name) {
+            return ts.stringContains(name, "-");
         }
         /**
          * Returns true iff React would emit this tag name as a string rather than an identifier or qualified name
          */
         function isJsxIntrinsicIdentifier(tagName) {
-            return tagName.kind === 78 /* Identifier */ && ts.isIntrinsicJsxName(tagName.escapedText);
+            return tagName.kind === 79 /* Identifier */ && ts.isIntrinsicJsxName(tagName.escapedText);
         }
         function checkJsxAttribute(node, checkMode) {
             return node.initializer
@@ -68962,7 +70268,7 @@
                     }
                 }
                 else {
-                    ts.Debug.assert(attributeDecl.kind === 283 /* JsxSpreadAttribute */);
+                    ts.Debug.assert(attributeDecl.kind === 285 /* JsxSpreadAttribute */);
                     if (attributesTable.size > 0) {
                         spread = getSpreadType(spread, createJsxAttributesType(), attributes.symbol, objectFlags, /*readonly*/ false);
                         attributesTable = ts.createSymbolTable();
@@ -68988,7 +70294,7 @@
                 }
             }
             // Handle children attribute
-            var parent = openingLikeElement.parent.kind === 274 /* JsxElement */ ? openingLikeElement.parent : undefined;
+            var parent = openingLikeElement.parent.kind === 276 /* JsxElement */ ? openingLikeElement.parent : undefined;
             // We have to check that openingElement of the parent is the one we are visiting as this may not be true for selfClosingElement
             if (parent && parent.openingElement === openingLikeElement && parent.children.length > 0) {
                 var childrenTypes = checkJsxChildren(parent, checkMode);
@@ -69012,7 +70318,7 @@
                     childrenPropSymbol.valueDeclaration.symbol = childrenPropSymbol;
                     var childPropMap = ts.createSymbolTable();
                     childPropMap.set(jsxChildrenPropertyName, childrenPropSymbol);
-                    spread = getSpreadType(spread, createAnonymousType(attributes.symbol, childPropMap, ts.emptyArray, ts.emptyArray, /*stringIndexInfo*/ undefined, /*numberIndexInfo*/ undefined), attributes.symbol, objectFlags, /*readonly*/ false);
+                    spread = getSpreadType(spread, createAnonymousType(attributes.symbol, childPropMap, ts.emptyArray, ts.emptyArray, ts.emptyArray), attributes.symbol, objectFlags, /*readonly*/ false);
                 }
             }
             if (hasSpreadAnyType) {
@@ -69029,7 +70335,7 @@
              */
             function createJsxAttributesType() {
                 objectFlags |= freshObjectLiteralFlag;
-                var result = createAnonymousType(attributes.symbol, attributesTable, ts.emptyArray, ts.emptyArray, /*stringIndexInfo*/ undefined, /*numberIndexInfo*/ undefined);
+                var result = createAnonymousType(attributes.symbol, attributesTable, ts.emptyArray, ts.emptyArray, ts.emptyArray);
                 result.objectFlags |= objectFlags | 128 /* ObjectLiteral */ | 262144 /* ContainsObjectOrArrayLiteral */;
                 return result;
             }
@@ -69045,7 +70351,7 @@
                         childrenTypes.push(stringType);
                     }
                 }
-                else if (child.kind === 284 /* JsxExpression */ && !child.expression) {
+                else if (child.kind === 286 /* JsxExpression */ && !child.expression) {
                     continue; // empty jsx expressions don't *really* count as present children
                 }
                 else {
@@ -69057,11 +70363,12 @@
         function checkSpreadPropOverrides(type, props, spread) {
             for (var _i = 0, _a = getPropertiesOfType(type); _i < _a.length; _i++) {
                 var right = _a[_i];
-                var left = props.get(right.escapedName);
-                var rightType = getTypeOfSymbol(right);
-                if (left && !maybeTypeOfKind(rightType, 98304 /* Nullable */) && !(maybeTypeOfKind(rightType, 3 /* AnyOrUnknown */) && right.flags & 16777216 /* Optional */)) {
-                    var diagnostic = error(left.valueDeclaration, ts.Diagnostics._0_is_specified_more_than_once_so_this_usage_will_be_overwritten, ts.unescapeLeadingUnderscores(left.escapedName));
-                    ts.addRelatedInfo(diagnostic, ts.createDiagnosticForNode(spread, ts.Diagnostics.This_spread_always_overwrites_this_property));
+                if (!(right.flags & 16777216 /* Optional */)) {
+                    var left = props.get(right.escapedName);
+                    if (left) {
+                        var diagnostic = error(left.valueDeclaration, ts.Diagnostics._0_is_specified_more_than_once_so_this_usage_will_be_overwritten, ts.unescapeLeadingUnderscores(left.escapedName));
+                        ts.addRelatedInfo(diagnostic, ts.createDiagnosticForNode(spread, ts.Diagnostics.This_spread_always_overwrites_this_property));
+                    }
                 }
             }
         }
@@ -69099,7 +70406,7 @@
                         return links.resolvedSymbol = intrinsicProp;
                     }
                     // Intrinsic string indexer case
-                    var indexSignatureType = getIndexTypeOfType(intrinsicElementsType, 0 /* String */);
+                    var indexSignatureType = getIndexTypeOfType(intrinsicElementsType, stringType);
                     if (indexSignatureType) {
                         links.jsxFlags |= 2 /* IntrinsicIndexedElement */;
                         return links.resolvedSymbol = intrinsicElementsType.symbol;
@@ -69258,7 +70565,7 @@
                 if (intrinsicProp) {
                     return getTypeOfSymbol(intrinsicProp);
                 }
-                var indexSignatureType = getIndexTypeOfType(intrinsicElementsType, 0 /* String */);
+                var indexSignatureType = getIndexTypeOfType(intrinsicElementsType, stringType);
                 if (indexSignatureType) {
                     return indexSignatureType;
                 }
@@ -69310,7 +70617,7 @@
                 }
                 else if (links.jsxFlags & 2 /* IntrinsicIndexedElement */) {
                     return links.resolvedJsxElementAttributesType =
-                        getIndexTypeOfType(getJsxType(JsxNames.IntrinsicElements, node), 0 /* String */) || errorType;
+                        getIndexTypeOfType(getJsxType(JsxNames.IntrinsicElements, node), stringType) || errorType;
                 }
                 else {
                     return links.resolvedJsxElementAttributesType = errorType;
@@ -69400,11 +70707,13 @@
          */
         function isKnownProperty(targetType, name, isComparingJsxAttributes) {
             if (targetType.flags & 524288 /* Object */) {
-                var resolved = resolveStructuredTypeMembers(targetType);
-                if (resolved.stringIndexInfo ||
-                    resolved.numberIndexInfo && isNumericLiteralName(name) ||
-                    getPropertyOfObjectType(targetType, name) ||
-                    isComparingJsxAttributes && !isUnhyphenatedJsxName(name)) {
+                // For backwards compatibility a symbol-named property is satisfied by a string index signature. This
+                // is incorrect and inconsistent with element access expressions, where it is an error, so eventually
+                // we should remove this exception.
+                if (getPropertyOfObjectType(targetType, name) ||
+                    getApplicableIndexInfoForName(targetType, name) ||
+                    isLateBoundName(name) && getIndexInfoOfType(targetType, stringType) ||
+                    isComparingJsxAttributes && isHyphenatedJsxName(name)) {
                     // For JSXAttributes, if the attribute has a hyphenated name, consider that the attribute to be known.
                     return true;
                 }
@@ -69466,9 +70775,9 @@
         function checkPropertyAccessibility(node, isSuper, writing, type, prop, reportError) {
             if (reportError === void 0) { reportError = true; }
             var flags = ts.getDeclarationModifierFlagsFromSymbol(prop, writing);
-            var errorNode = node.kind === 158 /* QualifiedName */ ? node.right :
-                node.kind === 196 /* ImportType */ ? node :
-                    node.kind === 199 /* BindingElement */ && node.propertyName ? node.propertyName : node.name;
+            var errorNode = node.kind === 159 /* QualifiedName */ ? node.right :
+                node.kind === 198 /* ImportType */ ? node :
+                    node.kind === 201 /* BindingElement */ && node.propertyName ? node.propertyName : node.name;
             if (isSuper) {
                 // TS 1.0 spec (April 2014): 4.8.2
                 // - In a constructor, instance member function, instance member accessor, or
@@ -69625,10 +70934,11 @@
             return propagateOptionalTypeMarker(checkPropertyAccessExpressionOrQualifiedName(node, node.expression, checkNonNullType(nonOptionalType, node.expression), node.name, checkMode), node, nonOptionalType !== leftType);
         }
         function checkQualifiedName(node, checkMode) {
-            return checkPropertyAccessExpressionOrQualifiedName(node, node.left, checkNonNullExpression(node.left), node.right, checkMode);
+            var leftType = ts.isPartOfTypeQuery(node) && ts.isThisIdentifier(node.left) ? checkNonNullType(checkThisExpression(node.left), node.left) : checkNonNullExpression(node.left);
+            return checkPropertyAccessExpressionOrQualifiedName(node, node.left, leftType, node.right, checkMode);
         }
         function isMethodAccessForCall(node) {
-            while (node.parent.kind === 208 /* ParenthesizedExpression */) {
+            while (node.parent.kind === 210 /* ParenthesizedExpression */) {
                 node = node.parent;
             }
             return ts.isCallOrNewExpression(node.parent) && node.parent.expression === node;
@@ -69763,9 +71073,11 @@
             }
             var propType;
             if (!prop) {
-                var indexInfo = !ts.isPrivateIdentifier(right) && (assignmentKind === 0 /* None */ || !isGenericObjectType(leftType) || isThisTypeParameter(leftType)) ? getIndexInfoOfType(apparentType, 0 /* String */) : undefined;
+                var indexInfo = !ts.isPrivateIdentifier(right) && (assignmentKind === 0 /* None */ || !isGenericObjectType(leftType) || isThisTypeParameter(leftType)) ?
+                    getApplicableIndexInfoForName(apparentType, right.escapedText) : undefined;
                 if (!(indexInfo && indexInfo.type)) {
-                    if (isJSLiteralType(leftType)) {
+                    var isUncheckedJS = isUncheckedJSSuggestion(node, leftType.symbol, /*excludeClasses*/ true);
+                    if (!isUncheckedJS && isJSLiteralType(leftType)) {
                         return anyType;
                     }
                     if (leftType.symbol === globalThisSymbol) {
@@ -69778,7 +71090,7 @@
                         return anyType;
                     }
                     if (right.escapedText && !checkAndReportErrorForExtendingInterface(node)) {
-                        reportNonexistentProperty(right, isThisTypeParameter(leftType) ? apparentType : leftType);
+                        reportNonexistentProperty(right, isThisTypeParameter(leftType) ? apparentType : leftType, isUncheckedJS);
                     }
                     return errorType;
                 }
@@ -69798,7 +71110,7 @@
                 markPropertyAsReferenced(prop, node, isSelfTypeAccess(left, parentSymbol));
                 getNodeLinks(node).resolvedSymbol = prop;
                 var writing = ts.isWriteAccess(node);
-                checkPropertyAccessibility(node, left.kind === 105 /* SuperKeyword */, writing, apparentType, prop);
+                checkPropertyAccessibility(node, left.kind === 106 /* SuperKeyword */, writing, apparentType, prop);
                 if (isAssignmentToReadonlyEntity(node, prop, assignmentKind)) {
                     error(right, ts.Diagnostics.Cannot_assign_to_0_because_it_is_a_read_only_property, ts.idText(right));
                     return errorType;
@@ -69807,16 +71119,37 @@
             }
             return getFlowTypeOfAccessExpression(node, prop, propType, right, checkMode);
         }
+        /**
+         * Determines whether a did-you-mean error should be a suggestion in an unchecked JS file.
+         * Only applies to unchecked JS files without checkJS, // @ts-check or // @ts-nocheck
+         * It does not suggest when the suggestion:
+         * - Is from a global file that is different from the reference file, or
+         * - (optionally) Is a class, or is a this.x property access expression
+         */
+        function isUncheckedJSSuggestion(node, suggestion, excludeClasses) {
+            var file = ts.getSourceFileOfNode(node);
+            if (file) {
+                if (compilerOptions.checkJs === undefined && file.checkJsDirective === undefined && (file.scriptKind === 1 /* JS */ || file.scriptKind === 2 /* JSX */)) {
+                    var declarationFile = ts.forEach(suggestion === null || suggestion === void 0 ? void 0 : suggestion.declarations, ts.getSourceFileOfNode);
+                    return !(file !== declarationFile && !!declarationFile && isGlobalSourceFile(declarationFile))
+                        && !(excludeClasses && suggestion && suggestion.flags & 32 /* Class */)
+                        && !(!!node && excludeClasses && ts.isPropertyAccessExpression(node) && node.expression.kind === 108 /* ThisKeyword */);
+                }
+            }
+            return false;
+        }
         function getFlowTypeOfAccessExpression(node, prop, propType, errorNode, checkMode) {
             // Only compute control flow type if this is a property access expression that isn't an
             // assignment target, and the referenced property was declared as a variable, property,
             // accessor, or optional method.
             var assignmentKind = ts.getAssignmentTargetKind(node);
-            if (assignmentKind === 1 /* Definite */ ||
-                prop &&
-                    !(prop.flags & (3 /* Variable */ | 4 /* Property */ | 98304 /* Accessor */))
-                    && !(prop.flags & 8192 /* Method */ && propType.flags & 1048576 /* Union */)
-                    && !isDuplicatedCommonJSExport(prop.declarations)) {
+            if (assignmentKind === 1 /* Definite */) {
+                return removeMissingType(propType, !!(prop && prop.flags & 16777216 /* Optional */));
+            }
+            if (prop &&
+                !(prop.flags & (3 /* Variable */ | 4 /* Property */ | 98304 /* Accessor */))
+                && !(prop.flags & 8192 /* Method */ && propType.flags & 1048576 /* Union */)
+                && !isDuplicatedCommonJSExport(prop.declarations)) {
                 return propType;
             }
             if (propType === autoType) {
@@ -69828,12 +71161,14 @@
             // and if we are in a constructor of the same class as the property declaration, assume that
             // the property is uninitialized at the top of the control flow.
             var assumeUninitialized = false;
-            if (strictNullChecks && strictPropertyInitialization && ts.isAccessExpression(node) && node.expression.kind === 107 /* ThisKeyword */) {
+            if (strictNullChecks && strictPropertyInitialization && ts.isAccessExpression(node) && node.expression.kind === 108 /* ThisKeyword */) {
                 var declaration = prop && prop.valueDeclaration;
-                if (declaration && isInstancePropertyWithoutInitializer(declaration)) {
-                    var flowContainer = getControlFlowContainer(node);
-                    if (flowContainer.kind === 167 /* Constructor */ && flowContainer.parent === declaration.parent && !(declaration.flags & 8388608 /* Ambient */)) {
-                        assumeUninitialized = true;
+                if (declaration && isPropertyWithoutInitializer(declaration)) {
+                    if (!ts.isStatic(declaration)) {
+                        var flowContainer = getControlFlowContainer(node);
+                        if (flowContainer.kind === 169 /* Constructor */ && flowContainer.parent === declaration.parent && !(declaration.flags & 8388608 /* Ambient */)) {
+                            assumeUninitialized = true;
+                        }
                     }
                 }
             }
@@ -69858,15 +71193,15 @@
             }
             var diagnosticMessage;
             var declarationName = ts.idText(right);
-            if (isInPropertyInitializer(node)
+            if (isInPropertyInitializerOrClassStaticBlock(node)
                 && !isOptionalPropertyDeclaration(valueDeclaration)
                 && !(ts.isAccessExpression(node) && ts.isAccessExpression(node.expression))
                 && !isBlockScopedNameDeclaredBeforeUse(valueDeclaration, right)
                 && (compilerOptions.useDefineForClassFields || !isPropertyDeclaredInAncestorClass(prop))) {
                 diagnosticMessage = error(right, ts.Diagnostics.Property_0_is_used_before_its_initialization, declarationName);
             }
-            else if (valueDeclaration.kind === 253 /* ClassDeclaration */ &&
-                node.parent.kind !== 174 /* TypeReference */ &&
+            else if (valueDeclaration.kind === 255 /* ClassDeclaration */ &&
+                node.parent.kind !== 176 /* TypeReference */ &&
                 !(valueDeclaration.flags & 8388608 /* Ambient */) &&
                 !isBlockScopedNameDeclaredBeforeUse(valueDeclaration, right)) {
                 diagnosticMessage = error(right, ts.Diagnostics.Class_0_used_before_its_declaration, declarationName);
@@ -69875,26 +71210,29 @@
                 ts.addRelatedInfo(diagnosticMessage, ts.createDiagnosticForNode(valueDeclaration, ts.Diagnostics._0_is_declared_here, declarationName));
             }
         }
-        function isInPropertyInitializer(node) {
+        function isInPropertyInitializerOrClassStaticBlock(node) {
             return !!ts.findAncestor(node, function (node) {
                 switch (node.kind) {
-                    case 164 /* PropertyDeclaration */:
+                    case 165 /* PropertyDeclaration */:
                         return true;
-                    case 289 /* PropertyAssignment */:
-                    case 166 /* MethodDeclaration */:
-                    case 168 /* GetAccessor */:
-                    case 169 /* SetAccessor */:
-                    case 291 /* SpreadAssignment */:
-                    case 159 /* ComputedPropertyName */:
-                    case 229 /* TemplateSpan */:
-                    case 284 /* JsxExpression */:
-                    case 281 /* JsxAttribute */:
-                    case 282 /* JsxAttributes */:
-                    case 283 /* JsxSpreadAttribute */:
-                    case 276 /* JsxOpeningElement */:
-                    case 224 /* ExpressionWithTypeArguments */:
-                    case 287 /* HeritageClause */:
+                    case 291 /* PropertyAssignment */:
+                    case 167 /* MethodDeclaration */:
+                    case 170 /* GetAccessor */:
+                    case 171 /* SetAccessor */:
+                    case 293 /* SpreadAssignment */:
+                    case 160 /* ComputedPropertyName */:
+                    case 231 /* TemplateSpan */:
+                    case 286 /* JsxExpression */:
+                    case 283 /* JsxAttribute */:
+                    case 284 /* JsxAttributes */:
+                    case 285 /* JsxSpreadAttribute */:
+                    case 278 /* JsxOpeningElement */:
+                    case 226 /* ExpressionWithTypeArguments */:
+                    case 289 /* HeritageClause */:
                         return false;
+                    case 212 /* ArrowFunction */:
+                    case 236 /* ExpressionStatement */:
+                        return ts.isBlock(node.parent) && ts.isClassStaticBlockDeclaration(node.parent.parent) ? true : "quit";
                     default:
                         return ts.isExpressionNode(node) ? false : "quit";
                 }
@@ -69927,13 +71265,13 @@
             }
             return getIntersectionType(x);
         }
-        function reportNonexistentProperty(propNode, containingType) {
+        function reportNonexistentProperty(propNode, containingType, isUncheckedJS) {
             var errorInfo;
             var relatedInfo;
             if (!ts.isPrivateIdentifier(propNode) && containingType.flags & 1048576 /* Union */ && !(containingType.flags & 131068 /* Primitive */)) {
                 for (var _i = 0, _a = containingType.types; _i < _a.length; _i++) {
                     var subtype = _a[_i];
-                    if (!getPropertyOfType(subtype, propNode.escapedText) && !getIndexInfoOfType(subtype, 0 /* String */)) {
+                    if (!getPropertyOfType(subtype, propNode.escapedText) && !getApplicableIndexInfoForName(subtype, propNode.escapedText)) {
                         errorInfo = ts.chainDiagnosticMessages(errorInfo, ts.Diagnostics.Property_0_does_not_exist_on_type_1, ts.declarationNameToString(propNode), typeToString(subtype));
                         break;
                     }
@@ -69961,7 +71299,8 @@
                         var suggestion = getSuggestedSymbolForNonexistentProperty(propNode, containingType);
                         if (suggestion !== undefined) {
                             var suggestedName = ts.symbolName(suggestion);
-                            errorInfo = ts.chainDiagnosticMessages(errorInfo, ts.Diagnostics.Property_0_does_not_exist_on_type_1_Did_you_mean_2, missingProperty, container, suggestedName);
+                            var message = isUncheckedJS ? ts.Diagnostics.Property_0_may_not_exist_on_type_1_Did_you_mean_2 : ts.Diagnostics.Property_0_does_not_exist_on_type_1_Did_you_mean_2;
+                            errorInfo = ts.chainDiagnosticMessages(errorInfo, message, missingProperty, container, suggestedName);
                             relatedInfo = suggestion.valueDeclaration && ts.createDiagnosticForNode(suggestion.valueDeclaration, ts.Diagnostics._0_is_declared_here, suggestedName);
                         }
                         else {
@@ -69977,7 +71316,7 @@
             if (relatedInfo) {
                 ts.addRelatedInfo(resultDiagnostic, relatedInfo);
             }
-            diagnostics.add(resultDiagnostic);
+            addErrorOrSuggestion(!isUncheckedJS, resultDiagnostic);
         }
         function containerSeemsToBeEmptyDomElement(containingType) {
             return (compilerOptions.lib && !compilerOptions.lib.includes("dom")) &&
@@ -69986,7 +71325,7 @@
         }
         function typeHasStaticProperty(propName, containingType) {
             var prop = containingType.symbol && getPropertyOfType(getTypeOfSymbol(containingType.symbol), propName);
-            return prop !== undefined && !!prop.valueDeclaration && ts.hasSyntacticModifier(prop.valueDeclaration, 32 /* Static */);
+            return prop !== undefined && !!prop.valueDeclaration && ts.isStatic(prop.valueDeclaration);
         }
         function getSuggestedLibForNonExistentName(name) {
             var missingName = diagnosticName(name);
@@ -70016,6 +71355,9 @@
                 }
             }
         }
+        function getSuggestedSymbolForNonexistentClassMember(name, baseType) {
+            return getSpellingSuggestionForName(name, getPropertiesOfType(baseType), 106500 /* ClassMember */);
+        }
         function getSuggestedSymbolForNonexistentProperty(name, containingType) {
             var props = getPropertiesOfType(containingType);
             if (typeof name !== "string") {
@@ -70143,21 +71485,21 @@
             (ts.getCheckFlags(prop) & 1 /* Instantiated */ ? getSymbolLinks(prop).target : prop).isReferenced = 67108863 /* All */;
         }
         function isSelfTypeAccess(name, parent) {
-            return name.kind === 107 /* ThisKeyword */
+            return name.kind === 108 /* ThisKeyword */
                 || !!parent && ts.isEntityNameExpression(name) && parent === getResolvedSymbol(ts.getFirstIdentifier(name));
         }
         function isValidPropertyAccess(node, propertyName) {
             switch (node.kind) {
-                case 202 /* PropertyAccessExpression */:
-                    return isValidPropertyAccessWithType(node, node.expression.kind === 105 /* SuperKeyword */, propertyName, getWidenedType(checkExpression(node.expression)));
-                case 158 /* QualifiedName */:
+                case 204 /* PropertyAccessExpression */:
+                    return isValidPropertyAccessWithType(node, node.expression.kind === 106 /* SuperKeyword */, propertyName, getWidenedType(checkExpression(node.expression)));
+                case 159 /* QualifiedName */:
                     return isValidPropertyAccessWithType(node, /*isSuper*/ false, propertyName, getWidenedType(checkExpression(node.left)));
-                case 196 /* ImportType */:
+                case 198 /* ImportType */:
                     return isValidPropertyAccessWithType(node, /*isSuper*/ false, propertyName, getTypeFromTypeNode(node));
             }
         }
         function isValidPropertyAccessForCompletions(node, type, property) {
-            return isValidPropertyAccessWithType(node, node.kind === 202 /* PropertyAccessExpression */ && node.expression.kind === 105 /* SuperKeyword */, property.escapedName, type);
+            return isValidPropertyAccessWithType(node, node.kind === 204 /* PropertyAccessExpression */ && node.expression.kind === 106 /* SuperKeyword */, property.escapedName, type);
             // Previously we validated the 'this' type of methods but this adversely affected performance. See #31377 for more context.
         }
         function isValidPropertyAccessWithType(node, isSuper, propertyName, type) {
@@ -70180,13 +71522,13 @@
          */
         function getForInVariableSymbol(node) {
             var initializer = node.initializer;
-            if (initializer.kind === 251 /* VariableDeclarationList */) {
+            if (initializer.kind === 253 /* VariableDeclarationList */) {
                 var variable = initializer.declarations[0];
                 if (variable && !ts.isBindingPattern(variable.name)) {
                     return getSymbolOfNode(variable);
                 }
             }
-            else if (initializer.kind === 78 /* Identifier */) {
+            else if (initializer.kind === 79 /* Identifier */) {
                 return getResolvedSymbol(initializer);
             }
             return undefined;
@@ -70195,7 +71537,7 @@
          * Return true if the given type is considered to have numeric property names.
          */
         function hasNumericPropertyNames(type) {
-            return getIndexTypeOfType(type, 1 /* Number */) && !getIndexTypeOfType(type, 0 /* String */);
+            return getIndexInfosOfType(type).length === 1 && !!getIndexInfoOfType(type, numberType);
         }
         /**
          * Return true if given node is an expression consisting of an identifier (possibly parenthesized)
@@ -70203,13 +71545,13 @@
          */
         function isForInVariableForNumericPropertyNames(expr) {
             var e = ts.skipParentheses(expr);
-            if (e.kind === 78 /* Identifier */) {
+            if (e.kind === 79 /* Identifier */) {
                 var symbol = getResolvedSymbol(e);
                 if (symbol.flags & 3 /* Variable */) {
                     var child = expr;
                     var node = expr.parent;
                     while (node) {
-                        if (node.kind === 239 /* ForInStatement */ &&
+                        if (node.kind === 241 /* ForInStatement */ &&
                             child === node.statement &&
                             getForInVariableSymbol(node) === symbol &&
                             hasNumericPropertyNames(getTypeOfExpression(node.expression))) {
@@ -70244,9 +71586,9 @@
             }
             var effectiveIndexType = isForInVariableForNumericPropertyNames(indexExpression) ? numberType : indexType;
             var accessFlags = ts.isAssignmentTarget(node) ?
-                2 /* Writing */ | (isGenericObjectType(objectType) && !isThisTypeParameter(objectType) ? 1 /* NoIndexSignatures */ : 0) :
-                0 /* None */;
-            var indexedAccessType = getIndexedAccessTypeOrUndefined(objectType, effectiveIndexType, /*noUncheckedIndexedAccessCandidate*/ undefined, node, accessFlags | 16 /* ExpressionPosition */) || errorType;
+                4 /* Writing */ | (isGenericObjectType(objectType) && !isThisTypeParameter(objectType) ? 2 /* NoIndexSignatures */ : 0) :
+                32 /* ExpressionPosition */;
+            var indexedAccessType = getIndexedAccessTypeOrUndefined(objectType, effectiveIndexType, accessFlags, node) || errorType;
             return checkIndexedAccessIndexType(getFlowTypeOfAccessExpression(node, getNodeLinks(node).resolvedSymbol, indexedAccessType, indexExpression, checkMode), node);
         }
         function callLikeExpressionMayHaveTypeArguments(node) {
@@ -70258,13 +71600,13 @@
                 // This gets us diagnostics for the type arguments and marks them as referenced.
                 ts.forEach(node.typeArguments, checkSourceElement);
             }
-            if (node.kind === 206 /* TaggedTemplateExpression */) {
+            if (node.kind === 208 /* TaggedTemplateExpression */) {
                 checkExpression(node.template);
             }
             else if (ts.isJsxOpeningLikeElement(node)) {
                 checkExpression(node.attributes);
             }
-            else if (node.kind !== 162 /* Decorator */) {
+            else if (node.kind !== 163 /* Decorator */) {
                 ts.forEach(node.arguments, function (argument) {
                     checkExpression(argument);
                 });
@@ -70328,7 +71670,7 @@
             }
         }
         function isSpreadArgument(arg) {
-            return !!arg && (arg.kind === 221 /* SpreadElement */ || arg.kind === 228 /* SyntheticExpression */ && arg.isSpread);
+            return !!arg && (arg.kind === 223 /* SpreadElement */ || arg.kind === 230 /* SyntheticExpression */ && arg.isSpread);
         }
         function getSpreadArgumentIndex(args) {
             return ts.findIndex(args, isSpreadArgument);
@@ -70345,9 +71687,9 @@
             var callIsIncomplete = false; // In incomplete call we want to be lenient when we have too few arguments
             var effectiveParameterCount = getParameterCount(signature);
             var effectiveMinimumArguments = getMinArgumentCount(signature);
-            if (node.kind === 206 /* TaggedTemplateExpression */) {
+            if (node.kind === 208 /* TaggedTemplateExpression */) {
                 argCount = args.length;
-                if (node.template.kind === 219 /* TemplateExpression */) {
+                if (node.template.kind === 221 /* TemplateExpression */) {
                     // If a tagged template expression lacks a tail literal, the call is incomplete.
                     // Specifically, a template only can end in a TemplateTail or a Missing literal.
                     var lastSpan = ts.last(node.template.templateSpans); // we should always have at least one span.
@@ -70362,7 +71704,7 @@
                     callIsIncomplete = !!templateLiteral.isUnterminated;
                 }
             }
-            else if (node.kind === 162 /* Decorator */) {
+            else if (node.kind === 163 /* Decorator */) {
                 argCount = getDecoratorArgumentCount(node, signature);
             }
             else if (ts.isJsxOpeningLikeElement(node)) {
@@ -70376,7 +71718,7 @@
             }
             else if (!node.arguments) {
                 // This only happens when we have something of the form: 'new C'
-                ts.Debug.assert(node.kind === 205 /* NewExpression */);
+                ts.Debug.assert(node.kind === 207 /* NewExpression */);
                 return getMinArgumentCount(signature) === 0;
             }
             else {
@@ -70425,7 +71767,7 @@
         function getSingleSignature(type, kind, allowMembers) {
             if (type.flags & 524288 /* Object */) {
                 var resolved = resolveStructuredTypeMembers(type);
-                if (allowMembers || resolved.properties.length === 0 && !resolved.stringIndexInfo && !resolved.numberIndexInfo) {
+                if (allowMembers || resolved.properties.length === 0 && resolved.indexInfos.length === 0) {
                     if (kind === 0 /* Call */ && resolved.callSignatures.length === 1 && resolved.constructSignatures.length === 0) {
                         return resolved.callSignatures[0];
                     }
@@ -70479,7 +71821,7 @@
             // example, given a 'function wrap<T, U>(cb: (x: T) => U): (x: T) => U' and a call expression
             // 'let f: (x: string) => number = wrap(s => s.length)', we infer from the declared type of 'f' to the
             // return type of 'wrap'.
-            if (node.kind !== 162 /* Decorator */) {
+            if (node.kind !== 163 /* Decorator */) {
                 var contextualType = getContextualType(node, ts.every(signature.typeParameters, function (p) { return !!getDefaultFromTypeParameter(p); }) ? 8 /* SkipBindingPatterns */ : 0 /* None */);
                 if (contextualType) {
                     // We clone the inference context to avoid disturbing a resolution in progress for an
@@ -70527,7 +71869,7 @@
             }
             for (var i = 0; i < argCount; i++) {
                 var arg = args[i];
-                if (arg.kind !== 223 /* OmittedExpression */) {
+                if (arg.kind !== 225 /* OmittedExpression */) {
                     var paramType = getTypeAtPosition(signature, i);
                     var argType = checkExpressionWithContextualType(arg, paramType, context, checkMode);
                     inferTypes(context.inferences, argType, paramType);
@@ -70551,7 +71893,7 @@
                 if (isSpreadArgument(arg)) {
                     // We are inferring from a spread expression in the last argument position, i.e. both the parameter
                     // and the argument are ...x forms.
-                    return getMutableArrayOrTupleType(arg.kind === 228 /* SyntheticExpression */ ? arg.type :
+                    return getMutableArrayOrTupleType(arg.kind === 230 /* SyntheticExpression */ ? arg.type :
                         checkExpressionWithContextualType(arg.expression, restType, context, checkMode));
                 }
             }
@@ -70561,24 +71903,24 @@
             for (var i = index; i < argCount; i++) {
                 var arg = args[i];
                 if (isSpreadArgument(arg)) {
-                    var spreadType = arg.kind === 228 /* SyntheticExpression */ ? arg.type : checkExpression(arg.expression);
+                    var spreadType = arg.kind === 230 /* SyntheticExpression */ ? arg.type : checkExpression(arg.expression);
                     if (isArrayLikeType(spreadType)) {
                         types.push(spreadType);
                         flags.push(8 /* Variadic */);
                     }
                     else {
-                        types.push(checkIteratedTypeOrElementType(33 /* Spread */, spreadType, undefinedType, arg.kind === 221 /* SpreadElement */ ? arg.expression : arg));
+                        types.push(checkIteratedTypeOrElementType(33 /* Spread */, spreadType, undefinedType, arg.kind === 223 /* SpreadElement */ ? arg.expression : arg));
                         flags.push(4 /* Rest */);
                     }
                 }
                 else {
-                    var contextualType = getIndexedAccessType(restType, getLiteralType(i - index));
+                    var contextualType = getIndexedAccessType(restType, getNumberLiteralType(i - index), 256 /* Contextual */);
                     var argType = checkExpressionWithContextualType(arg, contextualType, context, checkMode);
                     var hasPrimitiveContextualType = maybeTypeOfKind(contextualType, 131068 /* Primitive */ | 4194304 /* Index */ | 134217728 /* TemplateLiteral */ | 268435456 /* StringMapping */);
                     types.push(hasPrimitiveContextualType ? getRegularTypeOfLiteralType(argType) : getWidenedLiteralType(argType));
                     flags.push(1 /* Required */);
                 }
-                if (arg.kind === 228 /* SyntheticExpression */ && arg.tupleNameSource) {
+                if (arg.kind === 230 /* SyntheticExpression */ && arg.tupleNameSource) {
                     names.push(arg.tupleNameSource);
                 }
             }
@@ -70722,7 +72064,7 @@
                 return undefined;
             }
             var thisType = getThisTypeOfSignature(signature);
-            if (thisType && thisType !== voidType && node.kind !== 205 /* NewExpression */) {
+            if (thisType && thisType !== voidType && node.kind !== 207 /* NewExpression */) {
                 // If the called expression is not of the form `x.f` or `x["f"]`, then sourceType = voidType
                 // If the signature's 'this' type is voidType, then the check is skipped -- anything is compatible.
                 // If the expression is a new expression, then the check is skipped.
@@ -70740,7 +72082,7 @@
             var argCount = restType ? Math.min(getParameterCount(signature) - 1, args.length) : args.length;
             for (var i = 0; i < argCount; i++) {
                 var arg = args[i];
-                if (arg.kind !== 223 /* OmittedExpression */) {
+                if (arg.kind !== 225 /* OmittedExpression */) {
                     var paramType = getTypeAtPosition(signature, i);
                     var argType = checkExpressionWithContextualType(arg, paramType, /*inferenceContext*/ undefined, checkMode);
                     // If one or more arguments are still excluded (as indicated by CheckMode.SkipContextSensitive),
@@ -70785,8 +72127,10 @@
          * Returns the this argument in calls like x.f(...) and x[f](...). Undefined otherwise.
          */
         function getThisArgumentOfCall(node) {
-            if (node.kind === 204 /* CallExpression */) {
-                var callee = ts.skipOuterExpressions(node.expression);
+            var expression = node.kind === 206 /* CallExpression */ ? node.expression :
+                node.kind === 208 /* TaggedTemplateExpression */ ? node.tag : undefined;
+            if (expression) {
+                var callee = ts.skipOuterExpressions(expression);
                 if (ts.isAccessExpression(callee)) {
                     return callee.expression;
                 }
@@ -70802,17 +72146,17 @@
          * Returns the effective arguments for an expression that works like a function invocation.
          */
         function getEffectiveCallArguments(node) {
-            if (node.kind === 206 /* TaggedTemplateExpression */) {
+            if (node.kind === 208 /* TaggedTemplateExpression */) {
                 var template = node.template;
                 var args_3 = [createSyntheticExpression(template, getGlobalTemplateStringsArrayType())];
-                if (template.kind === 219 /* TemplateExpression */) {
+                if (template.kind === 221 /* TemplateExpression */) {
                     ts.forEach(template.templateSpans, function (span) {
                         args_3.push(span.expression);
                     });
                 }
                 return args_3;
             }
-            if (node.kind === 162 /* Decorator */) {
+            if (node.kind === 163 /* Decorator */) {
                 return getEffectiveDecoratorArguments(node);
             }
             if (ts.isJsxOpeningLikeElement(node)) {
@@ -70823,10 +72167,10 @@
             if (spreadIndex >= 0) {
                 // Create synthetic arguments from spreads of tuple types.
                 var effectiveArgs_1 = args.slice(0, spreadIndex);
-                var _loop_21 = function (i) {
+                var _loop_23 = function (i) {
                     var arg = args[i];
                     // We can call checkExpressionCached because spread expressions never have a contextual type.
-                    var spreadType = arg.kind === 221 /* SpreadElement */ && (flowLoopCount ? checkExpression(arg.expression) : checkExpressionCached(arg.expression));
+                    var spreadType = arg.kind === 223 /* SpreadElement */ && (flowLoopCount ? checkExpression(arg.expression) : checkExpressionCached(arg.expression));
                     if (spreadType && isTupleType(spreadType)) {
                         ts.forEach(getTypeArguments(spreadType), function (t, i) {
                             var _a;
@@ -70840,7 +72184,7 @@
                     }
                 };
                 for (var i = spreadIndex; i < args.length; i++) {
-                    _loop_21(i);
+                    _loop_23(i);
                 }
                 return effectiveArgs_1;
             }
@@ -70853,30 +72197,30 @@
             var parent = node.parent;
             var expr = node.expression;
             switch (parent.kind) {
-                case 253 /* ClassDeclaration */:
-                case 222 /* ClassExpression */:
+                case 255 /* ClassDeclaration */:
+                case 224 /* ClassExpression */:
                     // For a class decorator, the `target` is the type of the class (e.g. the
                     // "static" or "constructor" side of the class).
                     return [
                         createSyntheticExpression(expr, getTypeOfSymbol(getSymbolOfNode(parent)))
                     ];
-                case 161 /* Parameter */:
+                case 162 /* Parameter */:
                     // A parameter declaration decorator will have three arguments (see
                     // `ParameterDecorator` in core.d.ts).
                     var func = parent.parent;
                     return [
-                        createSyntheticExpression(expr, parent.parent.kind === 167 /* Constructor */ ? getTypeOfSymbol(getSymbolOfNode(func)) : errorType),
+                        createSyntheticExpression(expr, parent.parent.kind === 169 /* Constructor */ ? getTypeOfSymbol(getSymbolOfNode(func)) : errorType),
                         createSyntheticExpression(expr, anyType),
                         createSyntheticExpression(expr, numberType)
                     ];
-                case 164 /* PropertyDeclaration */:
-                case 166 /* MethodDeclaration */:
-                case 168 /* GetAccessor */:
-                case 169 /* SetAccessor */:
+                case 165 /* PropertyDeclaration */:
+                case 167 /* MethodDeclaration */:
+                case 170 /* GetAccessor */:
+                case 171 /* SetAccessor */:
                     // A method or accessor declaration decorator will have two or three arguments (see
                     // `PropertyDecorator` and `MethodDecorator` in core.d.ts). If we are emitting decorators
                     // for ES3, we will only pass two arguments.
-                    var hasPropDesc = parent.kind !== 164 /* PropertyDeclaration */ && languageVersion !== 0 /* ES3 */;
+                    var hasPropDesc = parent.kind !== 165 /* PropertyDeclaration */ && languageVersion !== 0 /* ES3 */;
                     return [
                         createSyntheticExpression(expr, getParentTypeOfClassElement(parent)),
                         createSyntheticExpression(expr, getClassElementPropertyKeyType(parent)),
@@ -70890,17 +72234,17 @@
          */
         function getDecoratorArgumentCount(node, signature) {
             switch (node.parent.kind) {
-                case 253 /* ClassDeclaration */:
-                case 222 /* ClassExpression */:
+                case 255 /* ClassDeclaration */:
+                case 224 /* ClassExpression */:
                     return 1;
-                case 164 /* PropertyDeclaration */:
+                case 165 /* PropertyDeclaration */:
                     return 2;
-                case 166 /* MethodDeclaration */:
-                case 168 /* GetAccessor */:
-                case 169 /* SetAccessor */:
+                case 167 /* MethodDeclaration */:
+                case 170 /* GetAccessor */:
+                case 171 /* SetAccessor */:
                     // For ES3 or decorators with only two parameters we supply only two arguments
                     return languageVersion === 0 /* ES3 */ || signature.parameters.length <= 2 ? 2 : 3;
-                case 161 /* Parameter */:
+                case 162 /* Parameter */:
                     return 3;
                 default:
                     return ts.Debug.fail();
@@ -71036,15 +72380,15 @@
             return ts.createDiagnosticForNodeArray(ts.getSourceFileOfNode(node), typeArguments, ts.Diagnostics.Expected_0_type_arguments_but_got_1, belowArgCount === -Infinity ? aboveArgCount : belowArgCount, argCount);
         }
         function resolveCall(node, signatures, candidatesOutArray, checkMode, callChainFlags, fallbackError) {
-            var isTaggedTemplate = node.kind === 206 /* TaggedTemplateExpression */;
-            var isDecorator = node.kind === 162 /* Decorator */;
+            var isTaggedTemplate = node.kind === 208 /* TaggedTemplateExpression */;
+            var isDecorator = node.kind === 163 /* Decorator */;
             var isJsxOpeningOrSelfClosingElement = ts.isJsxOpeningLikeElement(node);
             var reportErrors = !candidatesOutArray && produceDiagnostics;
             var typeArguments;
             if (!isDecorator) {
                 typeArguments = node.typeArguments;
                 // We already perform checking on the type arguments on the class declaration itself.
-                if (isTaggedTemplate || isJsxOpeningOrSelfClosingElement || node.expression.kind !== 105 /* SuperKeyword */) {
+                if (isTaggedTemplate || isJsxOpeningOrSelfClosingElement || node.expression.kind !== 106 /* SuperKeyword */) {
                     ts.forEach(typeArguments, checkSourceElement);
                 }
             }
@@ -71099,7 +72443,7 @@
             var result;
             // If we are in signature help, a trailing comma indicates that we intend to provide another argument,
             // so we will only accept overloads with arity at least 1 higher than the current number of provided arguments.
-            var signatureHelpTrailingComma = !!(checkMode & 16 /* IsForSignatureHelp */) && node.kind === 204 /* CallExpression */ && node.arguments.hasTrailingComma;
+            var signatureHelpTrailingComma = !!(checkMode & 16 /* IsForSignatureHelp */) && node.kind === 206 /* CallExpression */ && node.arguments.hasTrailingComma;
             // Section 4.12.1:
             // if the candidate list contains one or more signatures for which the type of each argument
             // expression is a subtype of each corresponding parameter type, the return type of the first
@@ -71153,7 +72497,7 @@
                         var min_3 = Number.MAX_VALUE;
                         var minIndex = 0;
                         var i_1 = 0;
-                        var _loop_22 = function (c) {
+                        var _loop_24 = function (c) {
                             var chain_2 = function () { return ts.chainDiagnosticMessages(/*details*/ undefined, ts.Diagnostics.Overload_0_of_1_2_gave_the_following_error, i_1 + 1, candidates.length, signatureToString(c)); };
                             var diags_2 = getSignatureApplicabilityError(node, args, c, assignableRelation, 0 /* Normal */, /*reportErrors*/ true, chain_2);
                             if (diags_2) {
@@ -71171,14 +72515,14 @@
                         };
                         for (var _a = 0, candidatesForArgumentError_1 = candidatesForArgumentError; _a < candidatesForArgumentError_1.length; _a++) {
                             var c = candidatesForArgumentError_1[_a];
-                            _loop_22(c);
+                            _loop_24(c);
                         }
                         var diags_3 = max > 1 ? allDiagnostics[minIndex] : ts.flatten(allDiagnostics);
                         ts.Debug.assert(diags_3.length > 0, "No errors reported for 3 or fewer overload signatures");
                         var chain = ts.chainDiagnosticMessages(ts.map(diags_3, function (d) { return typeof d.messageText === "string" ? d : d.messageText; }), ts.Diagnostics.No_overload_matches_this_call);
                         // The below is a spread to guarantee we get a new (mutable) array - our `flatMap` helper tries to do "smart" optimizations where it reuses input
                         // arrays and the emptyArray singleton where possible, which is decidedly not what we want while we're still constructing this diagnostic
-                        var related = __spreadArray([], ts.flatMap(diags_3, function (d) { return d.relatedInformation; }));
+                        var related = __spreadArray([], ts.flatMap(diags_3, function (d) { return d.relatedInformation; }), true);
                         var diag = void 0;
                         if (ts.every(diags_3, function (d) { return d.start === diags_3[0].start && d.length === diags_3[0].length && d.file === diags_3[0].file; })) {
                             var _b = diags_3[0], file = _b.file, start = _b.start, length_7 = _b.length;
@@ -71329,7 +72673,7 @@
             }
             var _a = ts.minAndMax(candidates, getNumNonRestParameters), minArgumentCount = _a.min, maxNonRestParam = _a.max;
             var parameters = [];
-            var _loop_23 = function (i) {
+            var _loop_25 = function (i) {
                 var symbols = ts.mapDefined(candidates, function (s) { return signatureHasRestParameter(s) ?
                     i < s.parameters.length - 1 ? s.parameters[i] : ts.last(s.parameters) :
                     i < s.parameters.length ? s.parameters[i] : undefined; });
@@ -71337,7 +72681,7 @@
                 parameters.push(createCombinedSymbolFromTypes(symbols, ts.mapDefined(candidates, function (candidate) { return tryGetTypeAtPosition(candidate, i); })));
             };
             for (var i = 0; i < maxNonRestParam; i++) {
-                _loop_23(i);
+                _loop_25(i);
             }
             var restParameterSymbols = ts.mapDefined(candidates, function (c) { return signatureHasRestParameter(c) ? ts.last(c.parameters) : undefined; });
             var flags = 0 /* None */;
@@ -71418,7 +72762,7 @@
             return maxParamsIndex;
         }
         function resolveCallExpression(node, candidatesOutArray, checkMode) {
-            if (node.expression.kind === 105 /* SuperKeyword */) {
+            if (node.expression.kind === 106 /* SuperKeyword */) {
                 var superType = checkSuperExpression(node.expression);
                 if (isTypeAny(superType)) {
                     for (var _i = 0, _a = node.arguments; _i < _a.length; _i++) {
@@ -71644,7 +72988,7 @@
             var declaration = signature.declaration;
             var modifiers = ts.getSelectedEffectiveModifierFlags(declaration, 24 /* NonPublicAccessibilityModifier */);
             // (1) Public constructors and (2) constructor functions are always accessible.
-            if (!modifiers || declaration.kind !== 167 /* Constructor */) {
+            if (!modifiers || declaration.kind !== 169 /* Constructor */) {
                 return true;
             }
             var declaringClassDeclaration = ts.getClassLikeDeclarationOfSymbol(declaration.parent.symbol);
@@ -71676,8 +73020,8 @@
             if (apparentType.flags & 1048576 /* Union */) {
                 var types = apparentType.types;
                 var hasSignatures = false;
-                for (var _i = 0, types_21 = types; _i < types_21.length; _i++) {
-                    var constituent = types_21[_i];
+                for (var _i = 0, types_20 = types; _i < types_20.length; _i++) {
+                    var constituent = types_20[_i];
                     var signatures = getSignaturesOfType(constituent, kind);
                     if (signatures.length !== 0) {
                         hasSignatures = true;
@@ -71788,16 +73132,16 @@
          */
         function getDiagnosticHeadMessageForDecoratorResolution(node) {
             switch (node.parent.kind) {
-                case 253 /* ClassDeclaration */:
-                case 222 /* ClassExpression */:
+                case 255 /* ClassDeclaration */:
+                case 224 /* ClassExpression */:
                     return ts.Diagnostics.Unable_to_resolve_signature_of_class_decorator_when_called_as_an_expression;
-                case 161 /* Parameter */:
+                case 162 /* Parameter */:
                     return ts.Diagnostics.Unable_to_resolve_signature_of_parameter_decorator_when_called_as_an_expression;
-                case 164 /* PropertyDeclaration */:
+                case 165 /* PropertyDeclaration */:
                     return ts.Diagnostics.Unable_to_resolve_signature_of_property_decorator_when_called_as_an_expression;
-                case 166 /* MethodDeclaration */:
-                case 168 /* GetAccessor */:
-                case 169 /* SetAccessor */:
+                case 167 /* MethodDeclaration */:
+                case 170 /* GetAccessor */:
+                case 171 /* SetAccessor */:
                     return ts.Diagnostics.Unable_to_resolve_signature_of_method_decorator_when_called_as_an_expression;
                 default:
                     return ts.Debug.fail();
@@ -71843,7 +73187,7 @@
             // file would probably be preferable.
             var typeSymbol = exports && getSymbol(exports, JsxNames.Element, 788968 /* Type */);
             var returnNode = typeSymbol && nodeBuilder.symbolToEntityName(typeSymbol, 788968 /* Type */, node);
-            var declaration = ts.factory.createFunctionTypeNode(/*typeParameters*/ undefined, [ts.factory.createParameterDeclaration(/*decorators*/ undefined, /*modifiers*/ undefined, /*dotdotdot*/ undefined, "props", /*questionMark*/ undefined, nodeBuilder.typeToTypeNode(result, node))], returnNode ? ts.factory.createTypeReferenceNode(returnNode, /*typeArguments*/ undefined) : ts.factory.createKeywordTypeNode(128 /* AnyKeyword */));
+            var declaration = ts.factory.createFunctionTypeNode(/*typeParameters*/ undefined, [ts.factory.createParameterDeclaration(/*decorators*/ undefined, /*modifiers*/ undefined, /*dotdotdot*/ undefined, "props", /*questionMark*/ undefined, nodeBuilder.typeToTypeNode(result, node))], returnNode ? ts.factory.createTypeReferenceNode(returnNode, /*typeArguments*/ undefined) : ts.factory.createKeywordTypeNode(129 /* AnyKeyword */));
             var parameterSymbol = createSymbol(1 /* FunctionScopedVariable */, "props");
             parameterSymbol.type = result;
             return createSignature(declaration, 
@@ -71892,16 +73236,16 @@
         }
         function resolveSignature(node, candidatesOutArray, checkMode) {
             switch (node.kind) {
-                case 204 /* CallExpression */:
+                case 206 /* CallExpression */:
                     return resolveCallExpression(node, candidatesOutArray, checkMode);
-                case 205 /* NewExpression */:
+                case 207 /* NewExpression */:
                     return resolveNewExpression(node, candidatesOutArray, checkMode);
-                case 206 /* TaggedTemplateExpression */:
+                case 208 /* TaggedTemplateExpression */:
                     return resolveTaggedTemplateExpression(node, candidatesOutArray, checkMode);
-                case 162 /* Decorator */:
+                case 163 /* Decorator */:
                     return resolveDecorator(node, candidatesOutArray, checkMode);
-                case 276 /* JsxOpeningElement */:
-                case 275 /* JsxSelfClosingElement */:
+                case 278 /* JsxOpeningElement */:
+                case 277 /* JsxSelfClosingElement */:
                     return resolveJsxOpeningLikeElement(node, candidatesOutArray, checkMode);
             }
             throw ts.Debug.assertNever(node, "Branch in 'resolveSignature' should be unreachable.");
@@ -72001,7 +73345,7 @@
             else if (ts.isBinaryExpression(node.parent)) {
                 var parentNode = node.parent;
                 var parentNodeOperator = node.parent.operatorToken.kind;
-                if (parentNodeOperator === 62 /* EqualsToken */ && (allowDeclaration || parentNode.right === node)) {
+                if (parentNodeOperator === 63 /* EqualsToken */ && (allowDeclaration || parentNode.right === node)) {
                     name = parentNode.left;
                     decl = name;
                 }
@@ -72010,7 +73354,7 @@
                         name = parentNode.parent.name;
                         decl = parentNode.parent;
                     }
-                    else if (ts.isBinaryExpression(parentNode.parent) && parentNode.parent.operatorToken.kind === 62 /* EqualsToken */ && (allowDeclaration || parentNode.parent.right === parentNode)) {
+                    else if (ts.isBinaryExpression(parentNode.parent) && parentNode.parent.operatorToken.kind === 63 /* EqualsToken */ && (allowDeclaration || parentNode.parent.right === parentNode)) {
                         name = parentNode.parent.left;
                         decl = name;
                     }
@@ -72033,10 +73377,10 @@
                 return false;
             }
             var parent = node.parent;
-            while (parent && parent.kind === 202 /* PropertyAccessExpression */) {
+            while (parent && parent.kind === 204 /* PropertyAccessExpression */) {
                 parent = parent.parent;
             }
-            if (parent && ts.isBinaryExpression(parent) && ts.isPrototypeAccess(parent.left) && parent.operatorToken.kind === 62 /* EqualsToken */) {
+            if (parent && ts.isBinaryExpression(parent) && ts.isPrototypeAccess(parent.left) && parent.operatorToken.kind === 63 /* EqualsToken */) {
                 var right = ts.getInitializerOfBinaryExpression(parent);
                 return ts.isObjectLiteralExpression(right) && right;
             }
@@ -72057,15 +73401,15 @@
                 return nonInferrableType;
             }
             checkDeprecatedSignature(signature, node);
-            if (node.expression.kind === 105 /* SuperKeyword */) {
+            if (node.expression.kind === 106 /* SuperKeyword */) {
                 return voidType;
             }
-            if (node.kind === 205 /* NewExpression */) {
+            if (node.kind === 207 /* NewExpression */) {
                 var declaration = signature.declaration;
                 if (declaration &&
-                    declaration.kind !== 167 /* Constructor */ &&
-                    declaration.kind !== 171 /* ConstructSignature */ &&
-                    declaration.kind !== 176 /* ConstructorType */ &&
+                    declaration.kind !== 169 /* Constructor */ &&
+                    declaration.kind !== 173 /* ConstructSignature */ &&
+                    declaration.kind !== 178 /* ConstructorType */ &&
                     !ts.isJSDocConstructSignature(declaration) &&
                     !isJSConstructor(declaration)) {
                     // When resolved signature is a call signature (and not a construct signature) the result type is any
@@ -72085,7 +73429,7 @@
             if (returnType.flags & 12288 /* ESSymbolLike */ && isSymbolOrSymbolForCall(node)) {
                 return getESSymbolLikeTypeForNode(ts.walkUpParenthesizedExpressions(node.parent));
             }
-            if (node.kind === 204 /* CallExpression */ && !node.questionDotToken && node.parent.kind === 234 /* ExpressionStatement */ &&
+            if (node.kind === 206 /* CallExpression */ && !node.questionDotToken && node.parent.kind === 236 /* ExpressionStatement */ &&
                 returnType.flags & 16384 /* Void */ && getTypePredicateOfSignature(signature)) {
                 if (!ts.isDottedName(node.expression)) {
                     error(node.expression, ts.Diagnostics.Assertions_require_the_call_target_to_be_an_identifier_or_qualified_name);
@@ -72098,7 +73442,7 @@
             if (ts.isInJSFile(node)) {
                 var jsSymbol = getSymbolOfExpando(node, /*allowDeclaration*/ false);
                 if ((_a = jsSymbol === null || jsSymbol === void 0 ? void 0 : jsSymbol.exports) === null || _a === void 0 ? void 0 : _a.size) {
-                    var jsAssignmentType = createAnonymousType(jsSymbol, jsSymbol.exports, ts.emptyArray, ts.emptyArray, undefined, undefined);
+                    var jsAssignmentType = createAnonymousType(jsSymbol, jsSymbol.exports, ts.emptyArray, ts.emptyArray, ts.emptyArray);
                     jsAssignmentType.objectFlags |= 8192 /* JSLiteral */;
                     return getIntersectionType([returnType, jsAssignmentType]);
                 }
@@ -72115,20 +73459,20 @@
         function getDeprecatedSuggestionNode(node) {
             node = ts.skipParentheses(node);
             switch (node.kind) {
-                case 204 /* CallExpression */:
-                case 162 /* Decorator */:
-                case 205 /* NewExpression */:
+                case 206 /* CallExpression */:
+                case 163 /* Decorator */:
+                case 207 /* NewExpression */:
                     return getDeprecatedSuggestionNode(node.expression);
-                case 206 /* TaggedTemplateExpression */:
+                case 208 /* TaggedTemplateExpression */:
                     return getDeprecatedSuggestionNode(node.tag);
-                case 276 /* JsxOpeningElement */:
-                case 275 /* JsxSelfClosingElement */:
+                case 278 /* JsxOpeningElement */:
+                case 277 /* JsxSelfClosingElement */:
                     return getDeprecatedSuggestionNode(node.tagName);
-                case 203 /* ElementAccessExpression */:
+                case 205 /* ElementAccessExpression */:
                     return node.argumentExpression;
-                case 202 /* PropertyAccessExpression */:
+                case 204 /* PropertyAccessExpression */:
                     return node.name;
-                case 174 /* TypeReference */:
+                case 176 /* TypeReference */:
                     var typeReference = node;
                     return ts.isQualifiedName(typeReference.typeName) ? typeReference.typeName.right : typeReference;
                 default:
@@ -72189,11 +73533,11 @@
                         var memberTable = ts.createSymbolTable();
                         var newSymbol = createSymbol(2097152 /* Alias */, "default" /* Default */);
                         newSymbol.parent = originalSymbol;
-                        newSymbol.nameType = getLiteralType("default");
+                        newSymbol.nameType = getStringLiteralType("default");
                         newSymbol.target = resolveSymbol(symbol);
                         memberTable.set("default" /* Default */, newSymbol);
                         var anonymousSymbol = createSymbol(2048 /* TypeLiteral */, "__type" /* Type */);
-                        var defaultContainingObject = createAnonymousType(anonymousSymbol, memberTable, ts.emptyArray, ts.emptyArray, /*stringIndexInfo*/ undefined, /*numberIndexInfo*/ undefined);
+                        var defaultContainingObject = createAnonymousType(anonymousSymbol, memberTable, ts.emptyArray, ts.emptyArray, ts.emptyArray);
                         anonymousSymbol.type = defaultContainingObject;
                         synthType.syntheticType = isValidSpreadType(type) ? getSpreadType(type, defaultContainingObject, anonymousSymbol, /*objectFlags*/ 0, /*readonly*/ false) : defaultContainingObject;
                     }
@@ -72221,9 +73565,9 @@
                 return false;
             }
             var targetDeclarationKind = resolvedRequire.flags & 16 /* Function */
-                ? 252 /* FunctionDeclaration */
+                ? 254 /* FunctionDeclaration */
                 : resolvedRequire.flags & 3 /* Variable */
-                    ? 250 /* VariableDeclaration */
+                    ? 252 /* VariableDeclaration */
                     : 0 /* Unknown */;
             if (targetDeclarationKind !== 0 /* Unknown */) {
                 var decl = ts.getDeclarationOfKind(resolvedRequire, targetDeclarationKind);
@@ -72251,21 +73595,21 @@
                 case 14 /* NoSubstitutionTemplateLiteral */:
                 case 8 /* NumericLiteral */:
                 case 9 /* BigIntLiteral */:
-                case 109 /* TrueKeyword */:
-                case 94 /* FalseKeyword */:
-                case 200 /* ArrayLiteralExpression */:
-                case 201 /* ObjectLiteralExpression */:
-                case 219 /* TemplateExpression */:
+                case 110 /* TrueKeyword */:
+                case 95 /* FalseKeyword */:
+                case 202 /* ArrayLiteralExpression */:
+                case 203 /* ObjectLiteralExpression */:
+                case 221 /* TemplateExpression */:
                     return true;
-                case 208 /* ParenthesizedExpression */:
+                case 210 /* ParenthesizedExpression */:
                     return isValidConstAssertionArgument(node.expression);
-                case 215 /* PrefixUnaryExpression */:
+                case 217 /* PrefixUnaryExpression */:
                     var op = node.operator;
                     var arg = node.operand;
                     return op === 40 /* MinusToken */ && (arg.kind === 8 /* NumericLiteral */ || arg.kind === 9 /* BigIntLiteral */) ||
                         op === 39 /* PlusToken */ && arg.kind === 8 /* NumericLiteral */;
-                case 202 /* PropertyAccessExpression */:
-                case 203 /* ElementAccessExpression */:
+                case 204 /* PropertyAccessExpression */:
+                case 205 /* ElementAccessExpression */:
                     var expr = node.expression;
                     if (ts.isIdentifier(expr)) {
                         var symbol = getSymbolAtLocation(expr);
@@ -72307,21 +73651,32 @@
         }
         function checkMetaProperty(node) {
             checkGrammarMetaProperty(node);
-            if (node.keywordToken === 102 /* NewKeyword */) {
+            if (node.keywordToken === 103 /* NewKeyword */) {
                 return checkNewTargetMetaProperty(node);
             }
-            if (node.keywordToken === 99 /* ImportKeyword */) {
+            if (node.keywordToken === 100 /* ImportKeyword */) {
                 return checkImportMetaProperty(node);
             }
             return ts.Debug.assertNever(node.keywordToken);
         }
+        function checkMetaPropertyKeyword(node) {
+            switch (node.keywordToken) {
+                case 100 /* ImportKeyword */:
+                    return getGlobalImportMetaExpressionType();
+                case 103 /* NewKeyword */:
+                    var type = checkNewTargetMetaProperty(node);
+                    return type === errorType ? errorType : createNewTargetExpressionType(type);
+                default:
+                    ts.Debug.assertNever(node.keywordToken);
+            }
+        }
         function checkNewTargetMetaProperty(node) {
             var container = ts.getNewTargetContainer(node);
             if (!container) {
                 error(node, ts.Diagnostics.Meta_property_0_is_only_allowed_in_the_body_of_a_function_declaration_function_expression_or_constructor, "new.target");
                 return errorType;
             }
-            else if (container.kind === 167 /* Constructor */) {
+            else if (container.kind === 169 /* Constructor */) {
                 var symbol = getSymbolOfNode(container.parent);
                 return getTypeOfSymbol(symbol);
             }
@@ -72336,7 +73691,6 @@
             }
             var file = ts.getSourceFileOfNode(node);
             ts.Debug.assert(!!(file.flags & 2097152 /* PossiblyContainsImportMeta */), "Containing file is missing import meta node flag.");
-            ts.Debug.assert(!!file.externalModuleIndicator, "Containing file should be a module.");
             return node.name.escapedText === "meta" ? getGlobalImportMetaType() : errorType;
         }
         function getTypeOfParameter(symbol) {
@@ -72367,8 +73721,37 @@
             }
             return restParameter.escapedName;
         }
+        function getParameterIdentifierNameAtPosition(signature, pos) {
+            var paramCount = signature.parameters.length - (signatureHasRestParameter(signature) ? 1 : 0);
+            if (pos < paramCount) {
+                var param = signature.parameters[pos];
+                return isParameterDeclarationWithIdentifierName(param) ? [param.escapedName, false] : undefined;
+            }
+            var restParameter = signature.parameters[paramCount] || unknownSymbol;
+            if (!isParameterDeclarationWithIdentifierName(restParameter)) {
+                return undefined;
+            }
+            var restType = getTypeOfSymbol(restParameter);
+            if (isTupleType(restType)) {
+                var associatedNames = restType.target.labeledElementDeclarations;
+                var index = pos - paramCount;
+                var associatedName = associatedNames === null || associatedNames === void 0 ? void 0 : associatedNames[index];
+                var isRestTupleElement = !!(associatedName === null || associatedName === void 0 ? void 0 : associatedName.dotDotDotToken);
+                return associatedName ? [
+                    getTupleElementLabel(associatedName),
+                    isRestTupleElement
+                ] : undefined;
+            }
+            if (pos === paramCount) {
+                return [restParameter.escapedName, true];
+            }
+            return undefined;
+        }
+        function isParameterDeclarationWithIdentifierName(symbol) {
+            return symbol.valueDeclaration && ts.isParameter(symbol.valueDeclaration) && ts.isIdentifier(symbol.valueDeclaration.name);
+        }
         function isValidDeclarationForTupleLabel(d) {
-            return d.kind === 193 /* NamedTupleMember */ || (ts.isParameter(d) && d.name && ts.isIdentifier(d.name));
+            return d.kind === 195 /* NamedTupleMember */ || (ts.isParameter(d) && d.name && ts.isIdentifier(d.name));
         }
         function getNameableDeclarationAtPosition(signature, pos) {
             var paramCount = signature.parameters.length - (signatureHasRestParameter(signature) ? 1 : 0);
@@ -72400,7 +73783,7 @@
                 var restType = getTypeOfSymbol(signature.parameters[paramCount]);
                 var index = pos - paramCount;
                 if (!isTupleType(restType) || restType.target.hasRestElement || index < restType.target.fixedLength) {
-                    return getIndexedAccessType(restType, getLiteralType(index));
+                    return getIndexedAccessType(restType, getNumberLiteralType(index));
                 }
             }
             return undefined;
@@ -72581,7 +73964,7 @@
             if (!links.type) {
                 var declaration = parameter.valueDeclaration;
                 links.type = type || getWidenedTypeForVariableLikeDeclaration(declaration, /*includeOptionality*/ true);
-                if (declaration.name.kind !== 78 /* Identifier */) {
+                if (declaration.name.kind !== 79 /* Identifier */) {
                     // if inference didn't come up with anything but unknown, fall back to the binding pattern if present.
                     if (links.type === unknownType) {
                         links.type = getTypeFromBindingPattern(declaration.name);
@@ -72596,7 +73979,7 @@
             for (var _i = 0, _a = pattern.elements; _i < _a.length; _i++) {
                 var element = _a[_i];
                 if (!ts.isOmittedExpression(element)) {
-                    if (element.name.kind === 78 /* Identifier */) {
+                    if (element.name.kind === 79 /* Identifier */) {
                         getSymbolLinks(getSymbolOfNode(element)).type = getTypeForBindingElement(element);
                     }
                     else {
@@ -72640,6 +74023,16 @@
             }
             return promiseType;
         }
+        function createNewTargetExpressionType(targetType) {
+            // Create a synthetic type `NewTargetExpression { target: TargetType; }`
+            var symbol = createSymbol(0 /* None */, "NewTargetExpression");
+            var targetPropertySymbol = createSymbol(4 /* Property */, "target", 8 /* Readonly */);
+            targetPropertySymbol.parent = symbol;
+            targetPropertySymbol.type = targetType;
+            var members = ts.createSymbolTable([targetPropertySymbol]);
+            symbol.members = members;
+            return createAnonymousType(symbol, members, ts.emptyArray, ts.emptyArray, ts.emptyArray);
+        }
         function getReturnTypeFromBody(func, checkMode) {
             if (!func.body) {
                 return errorType;
@@ -72651,7 +74044,7 @@
             var yieldType;
             var nextType;
             var fallbackReturnType = voidType;
-            if (func.body.kind !== 231 /* Block */) { // Async or normal arrow function
+            if (func.body.kind !== 233 /* Block */) { // Async or normal arrow function
                 returnType = checkExpressionCached(func.body, checkMode && checkMode & ~8 /* SkipGenericFunctions */);
                 if (isAsync) {
                     // From within an async function you can return either a non-promise value or a promise. Any
@@ -72836,7 +74229,7 @@
             return links.isExhaustive !== undefined ? links.isExhaustive : (links.isExhaustive = computeExhaustiveSwitchStatement(node));
         }
         function computeExhaustiveSwitchStatement(node) {
-            if (node.expression.kind === 212 /* TypeOfExpression */) {
+            if (node.expression.kind === 214 /* TypeOfExpression */) {
                 var operandType = getTypeOfExpression(node.expression.expression);
                 var witnesses = getSwitchClauseTypeOfWitnesses(node, /*retainDefault*/ false);
                 // notEqualFacts states that the type of the switched value is not equal to every type in the switch.
@@ -72899,11 +74292,11 @@
         }
         function mayReturnNever(func) {
             switch (func.kind) {
-                case 209 /* FunctionExpression */:
-                case 210 /* ArrowFunction */:
+                case 211 /* FunctionExpression */:
+                case 212 /* ArrowFunction */:
                     return true;
-                case 166 /* MethodDeclaration */:
-                    return func.parent.kind === 201 /* ObjectLiteralExpression */;
+                case 167 /* MethodDeclaration */:
+                    return func.parent.kind === 203 /* ObjectLiteralExpression */;
                 default:
                     return false;
             }
@@ -72929,7 +74322,7 @@
             }
             // If all we have is a function signature, or an arrow function with an expression body, then there is nothing to check.
             // also if HasImplicitReturn flag is not set this means that all codepaths in function body end with return or throw
-            if (func.kind === 165 /* MethodSignature */ || ts.nodeIsMissing(func.body) || func.body.kind !== 231 /* Block */ || !functionHasImplicitReturn(func)) {
+            if (func.kind === 166 /* MethodSignature */ || ts.nodeIsMissing(func.body) || func.body.kind !== 233 /* Block */ || !functionHasImplicitReturn(func)) {
                 return;
             }
             var hasExplicitReturn = func.flags & 512 /* HasExplicitReturn */;
@@ -72962,12 +74355,15 @@
             }
         }
         function checkFunctionExpressionOrObjectLiteralMethod(node, checkMode) {
-            ts.Debug.assert(node.kind !== 166 /* MethodDeclaration */ || ts.isObjectLiteralMethod(node));
+            ts.Debug.assert(node.kind !== 167 /* MethodDeclaration */ || ts.isObjectLiteralMethod(node));
             checkNodeDeferred(node);
+            if (ts.isFunctionExpression(node)) {
+                checkCollisionsForDeclarationName(node, node.name);
+            }
             // The identityMapper object is used to indicate that function expressions are wildcards
             if (checkMode && checkMode & 4 /* SkipContextSensitive */ && isContextSensitive(node)) {
                 // Skip parameters, return signature with return type that retains noncontextual parts so inferences can still be drawn in an early stage
-                if (!ts.getEffectiveReturnTypeNode(node) && !hasContextSensitiveParameters(node)) {
+                if (!ts.getEffectiveReturnTypeNode(node) && !ts.hasContextSensitiveParameters(node)) {
                     // Return plain anyFunctionType if there is no possibility we'll make inferences from the return type
                     var contextualSignature = getContextualSignature(node);
                     if (contextualSignature && couldContainTypeVariables(getReturnTypeOfSignature(contextualSignature))) {
@@ -72977,7 +74373,7 @@
                         }
                         var returnType = getReturnTypeFromBody(node, checkMode);
                         var returnOnlySignature = createSignature(undefined, undefined, undefined, ts.emptyArray, returnType, /*resolvedTypePredicate*/ undefined, 0, 0 /* None */);
-                        var returnOnlyType = createAnonymousType(node.symbol, emptySymbols, [returnOnlySignature], ts.emptyArray, undefined, undefined);
+                        var returnOnlyType = createAnonymousType(node.symbol, emptySymbols, [returnOnlySignature], ts.emptyArray, ts.emptyArray);
                         returnOnlyType.objectFlags |= 524288 /* NonInferrableType */;
                         return links.contextFreeType = returnOnlyType;
                     }
@@ -72986,7 +74382,7 @@
             }
             // Grammar checking
             var hasGrammarError = checkGrammarFunctionLikeDeclaration(node);
-            if (!hasGrammarError && node.kind === 209 /* FunctionExpression */) {
+            if (!hasGrammarError && node.kind === 211 /* FunctionExpression */) {
                 checkGrammarForGenerator(node);
             }
             contextuallyCheckFunctionExpressionOrObjectLiteralMethod(node, checkMode);
@@ -73032,7 +74428,7 @@
             }
         }
         function checkFunctionExpressionOrObjectLiteralMethodDeferred(node) {
-            ts.Debug.assert(node.kind !== 166 /* MethodDeclaration */ || ts.isObjectLiteralMethod(node));
+            ts.Debug.assert(node.kind !== 167 /* MethodDeclaration */ || ts.isObjectLiteralMethod(node));
             var functionFlags = ts.getFunctionFlags(node);
             var returnType = getReturnTypeFromAnnotation(node);
             checkAllCodePathsInNonVoidFunctionReturnOrThrow(node, returnType);
@@ -73045,7 +74441,7 @@
                     // checkFunctionExpressionBodies). So it must be done now.
                     getReturnTypeOfSignature(getSignatureFromDeclaration(node));
                 }
-                if (node.body.kind === 231 /* Block */) {
+                if (node.body.kind === 233 /* Block */) {
                     checkSourceElement(node.body);
                 }
                 else {
@@ -73132,10 +74528,10 @@
                 // Allow assignments to readonly properties within constructors of the same class declaration.
                 if (symbol.flags & 4 /* Property */ &&
                     ts.isAccessExpression(expr) &&
-                    expr.expression.kind === 107 /* ThisKeyword */) {
+                    expr.expression.kind === 108 /* ThisKeyword */) {
                     // Look for if this is the constructor for the class that `symbol` is a property of.
                     var ctor = ts.getContainingFunction(expr);
-                    if (!(ctor && (ctor.kind === 167 /* Constructor */ || isJSConstructor(ctor)))) {
+                    if (!(ctor && (ctor.kind === 169 /* Constructor */ || isJSConstructor(ctor)))) {
                         return true;
                     }
                     if (symbol.valueDeclaration) {
@@ -73156,11 +74552,11 @@
             if (ts.isAccessExpression(expr)) {
                 // references through namespace import should be readonly
                 var node = ts.skipParentheses(expr.expression);
-                if (node.kind === 78 /* Identifier */) {
+                if (node.kind === 79 /* Identifier */) {
                     var symbol_2 = getNodeLinks(node).resolvedSymbol;
                     if (symbol_2.flags & 2097152 /* Alias */) {
                         var declaration = getDeclarationOfAliasSymbol(symbol_2);
-                        return !!declaration && declaration.kind === 264 /* NamespaceImport */;
+                        return !!declaration && declaration.kind === 266 /* NamespaceImport */;
                     }
                 }
             }
@@ -73169,7 +74565,7 @@
         function checkReferenceExpression(expr, invalidReferenceMessage, invalidOptionalChainMessage) {
             // References are combinations of identifiers, parentheses, and property accesses.
             var node = ts.skipOuterExpressions(expr, 6 /* Assertions */ | 1 /* Parentheses */);
-            if (node.kind !== 78 /* Identifier */ && !ts.isAccessExpression(node)) {
+            if (node.kind !== 79 /* Identifier */ && !ts.isAccessExpression(node)) {
                 error(expr, invalidReferenceMessage);
                 return false;
             }
@@ -73195,13 +74591,15 @@
                 if (isReadonlySymbol(symbol)) {
                     error(expr, ts.Diagnostics.The_operand_of_a_delete_operator_cannot_be_a_read_only_property);
                 }
-                checkDeleteExpressionMustBeOptional(expr, getTypeOfSymbol(symbol));
+                checkDeleteExpressionMustBeOptional(expr, symbol);
             }
             return booleanType;
         }
-        function checkDeleteExpressionMustBeOptional(expr, type) {
-            var AnyOrUnknownOrNeverFlags = 3 /* AnyOrUnknown */ | 131072 /* Never */;
-            if (strictNullChecks && !(type.flags & AnyOrUnknownOrNeverFlags) && !(getFalsyFlags(type) & 32768 /* Undefined */)) {
+        function checkDeleteExpressionMustBeOptional(expr, symbol) {
+            var type = getTypeOfSymbol(symbol);
+            if (strictNullChecks &&
+                !(type.flags & (3 /* AnyOrUnknown */ | 131072 /* Never */)) &&
+                !(exactOptionalPropertyTypes ? symbol.flags & 16777216 /* Optional */ : getFalsyFlags(type) & 32768 /* Undefined */)) {
                 error(expr, ts.Diagnostics.The_operand_of_a_delete_operator_must_be_optional);
             }
         }
@@ -73216,7 +74614,11 @@
         function checkAwaitExpression(node) {
             // Grammar checking
             if (produceDiagnostics) {
-                if (!(node.flags & 32768 /* AwaitContext */)) {
+                var container = ts.getContainingFunctionOrClassStaticBlock(node);
+                if (container && ts.isClassStaticBlockDeclaration(container)) {
+                    error(node, ts.Diagnostics.Await_expression_cannot_be_used_inside_a_class_static_block);
+                }
+                else if (!(node.flags & 32768 /* AwaitContext */)) {
                     if (ts.isInTopLevelContext(node)) {
                         var sourceFile = ts.getSourceFileOfNode(node);
                         if (!hasParseDiagnostics(sourceFile)) {
@@ -73240,9 +74642,8 @@
                         if (!hasParseDiagnostics(sourceFile)) {
                             var span = ts.getSpanOfTokenAtPosition(sourceFile, node.pos);
                             var diagnostic = ts.createFileDiagnostic(sourceFile, span.start, span.length, ts.Diagnostics.await_expressions_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules);
-                            var func = ts.getContainingFunction(node);
-                            if (func && func.kind !== 167 /* Constructor */ && (ts.getFunctionFlags(func) & 2 /* Async */) === 0) {
-                                var relatedInfo = ts.createDiagnosticForNode(func, ts.Diagnostics.Did_you_mean_to_mark_this_function_as_async);
+                            if (container && container.kind !== 169 /* Constructor */ && (ts.getFunctionFlags(container) & 2 /* Async */) === 0) {
+                                var relatedInfo = ts.createDiagnosticForNode(container, ts.Diagnostics.Did_you_mean_to_mark_this_function_as_async);
                                 ts.addRelatedInfo(diagnostic, relatedInfo);
                             }
                             diagnostics.add(diagnostic);
@@ -73269,14 +74670,14 @@
                 case 8 /* NumericLiteral */:
                     switch (node.operator) {
                         case 40 /* MinusToken */:
-                            return getFreshTypeOfLiteralType(getLiteralType(-node.operand.text));
+                            return getFreshTypeOfLiteralType(getNumberLiteralType(-node.operand.text));
                         case 39 /* PlusToken */:
-                            return getFreshTypeOfLiteralType(getLiteralType(+node.operand.text));
+                            return getFreshTypeOfLiteralType(getNumberLiteralType(+node.operand.text));
                     }
                     break;
                 case 9 /* BigIntLiteral */:
                     if (node.operator === 40 /* MinusToken */) {
-                        return getFreshTypeOfLiteralType(getLiteralType({
+                        return getFreshTypeOfLiteralType(getBigIntLiteralType({
                             negative: true,
                             base10Value: ts.parsePseudoBigInt(node.operand.text)
                         }));
@@ -73343,8 +74744,8 @@
             }
             if (type.flags & 3145728 /* UnionOrIntersection */) {
                 var types = type.types;
-                for (var _i = 0, types_22 = types; _i < types_22.length; _i++) {
-                    var t = types_22[_i];
+                for (var _i = 0, types_21 = types; _i < types_21.length; _i++) {
+                    var t = types_21[_i];
                     if (maybeTypeOfKind(t, kind)) {
                         return true;
                     }
@@ -73453,7 +74854,7 @@
             if (rightIsThis === void 0) { rightIsThis = false; }
             var properties = node.properties;
             var property = properties[propertyIndex];
-            if (property.kind === 289 /* PropertyAssignment */ || property.kind === 290 /* ShorthandPropertyAssignment */) {
+            if (property.kind === 291 /* PropertyAssignment */ || property.kind === 292 /* ShorthandPropertyAssignment */) {
                 var name = property.name;
                 var exprType = getLiteralTypeFromPropertyName(name);
                 if (isTypeUsableAsPropertyName(exprType)) {
@@ -73464,11 +74865,11 @@
                         checkPropertyAccessibility(property, /*isSuper*/ false, /*writing*/ true, objectLiteralType, prop);
                     }
                 }
-                var elementType = getIndexedAccessType(objectLiteralType, exprType, /*noUncheckedIndexedAccessCandidate*/ undefined, name, /*aliasSymbol*/ undefined, /*aliasTypeArguments*/ undefined, 16 /* ExpressionPosition */);
+                var elementType = getIndexedAccessType(objectLiteralType, exprType, 32 /* ExpressionPosition */, name);
                 var type = getFlowTypeOfDestructuring(property, elementType);
-                return checkDestructuringAssignment(property.kind === 290 /* ShorthandPropertyAssignment */ ? property : property.initializer, type);
+                return checkDestructuringAssignment(property.kind === 292 /* ShorthandPropertyAssignment */ ? property : property.initializer, type);
             }
-            else if (property.kind === 291 /* SpreadAssignment */) {
+            else if (property.kind === 293 /* SpreadAssignment */) {
                 if (propertyIndex < properties.length - 1) {
                     error(property, ts.Diagnostics.A_rest_element_must_be_last_in_a_destructuring_pattern);
                 }
@@ -73506,7 +74907,7 @@
             var inBoundsType = compilerOptions.noUncheckedIndexedAccess ? undefined : possiblyOutOfBoundsType;
             for (var i = 0; i < elements.length; i++) {
                 var type = possiblyOutOfBoundsType;
-                if (node.elements[i].kind === 221 /* SpreadElement */) {
+                if (node.elements[i].kind === 223 /* SpreadElement */) {
                     type = inBoundsType = inBoundsType !== null && inBoundsType !== void 0 ? inBoundsType : (checkIteratedTypeOrElementType(65 /* Destructuring */, sourceType, undefinedType, node) || errorType);
                 }
                 checkArrayLiteralDestructuringElementAssignment(node, sourceType, i, type, checkMode);
@@ -73516,14 +74917,14 @@
         function checkArrayLiteralDestructuringElementAssignment(node, sourceType, elementIndex, elementType, checkMode) {
             var elements = node.elements;
             var element = elements[elementIndex];
-            if (element.kind !== 223 /* OmittedExpression */) {
-                if (element.kind !== 221 /* SpreadElement */) {
-                    var indexType = getLiteralType(elementIndex);
+            if (element.kind !== 225 /* OmittedExpression */) {
+                if (element.kind !== 223 /* SpreadElement */) {
+                    var indexType = getNumberLiteralType(elementIndex);
                     if (isArrayLikeType(sourceType)) {
                         // We create a synthetic expression so that getIndexedAccessType doesn't get confused
                         // when the element is a SyntaxKind.ElementAccessExpression.
-                        var accessFlags = 16 /* ExpressionPosition */ | (hasDefaultValue(element) ? 8 /* NoTupleBoundsCheck */ : 0);
-                        var elementType_2 = getIndexedAccessTypeOrUndefined(sourceType, indexType, /*noUncheckedIndexedAccessCandidate*/ undefined, createSyntheticExpression(element, indexType), accessFlags) || errorType;
+                        var accessFlags = 32 /* ExpressionPosition */ | (hasDefaultValue(element) ? 16 /* NoTupleBoundsCheck */ : 0);
+                        var elementType_2 = getIndexedAccessTypeOrUndefined(sourceType, indexType, accessFlags, createSyntheticExpression(element, indexType)) || errorType;
                         var assignedType = hasDefaultValue(element) ? getTypeWithFacts(elementType_2, 524288 /* NEUndefined */) : elementType_2;
                         var type = getFlowTypeOfDestructuring(element, assignedType);
                         return checkDestructuringAssignment(element, type, checkMode);
@@ -73535,7 +74936,7 @@
                 }
                 else {
                     var restExpression = element.expression;
-                    if (restExpression.kind === 217 /* BinaryExpression */ && restExpression.operatorToken.kind === 62 /* EqualsToken */) {
+                    if (restExpression.kind === 219 /* BinaryExpression */ && restExpression.operatorToken.kind === 63 /* EqualsToken */) {
                         error(restExpression.operatorToken, ts.Diagnostics.A_rest_element_cannot_have_an_initializer);
                     }
                     else {
@@ -73551,7 +74952,7 @@
         }
         function checkDestructuringAssignment(exprOrAssignment, sourceType, checkMode, rightIsThis) {
             var target;
-            if (exprOrAssignment.kind === 290 /* ShorthandPropertyAssignment */) {
+            if (exprOrAssignment.kind === 292 /* ShorthandPropertyAssignment */) {
                 var prop = exprOrAssignment;
                 if (prop.objectAssignmentInitializer) {
                     // In strict null checking mode, if a default value of a non-undefined type is specified, remove
@@ -73567,24 +74968,24 @@
             else {
                 target = exprOrAssignment;
             }
-            if (target.kind === 217 /* BinaryExpression */ && target.operatorToken.kind === 62 /* EqualsToken */) {
+            if (target.kind === 219 /* BinaryExpression */ && target.operatorToken.kind === 63 /* EqualsToken */) {
                 checkBinaryExpression(target, checkMode);
                 target = target.left;
             }
-            if (target.kind === 201 /* ObjectLiteralExpression */) {
+            if (target.kind === 203 /* ObjectLiteralExpression */) {
                 return checkObjectLiteralAssignment(target, sourceType, rightIsThis);
             }
-            if (target.kind === 200 /* ArrayLiteralExpression */) {
+            if (target.kind === 202 /* ArrayLiteralExpression */) {
                 return checkArrayLiteralAssignment(target, sourceType, checkMode);
             }
             return checkReferenceAssignment(target, sourceType, checkMode);
         }
         function checkReferenceAssignment(target, sourceType, checkMode) {
             var targetType = checkExpression(target, checkMode);
-            var error = target.parent.kind === 291 /* SpreadAssignment */ ?
+            var error = target.parent.kind === 293 /* SpreadAssignment */ ?
                 ts.Diagnostics.The_target_of_an_object_rest_assignment_must_be_a_variable_or_a_property_access :
                 ts.Diagnostics.The_left_hand_side_of_an_assignment_expression_must_be_a_variable_or_a_property_access;
-            var optionalError = target.parent.kind === 291 /* SpreadAssignment */ ?
+            var optionalError = target.parent.kind === 293 /* SpreadAssignment */ ?
                 ts.Diagnostics.The_target_of_an_object_rest_assignment_may_not_be_an_optional_property_access :
                 ts.Diagnostics.The_left_hand_side_of_an_assignment_expression_may_not_be_an_optional_property_access;
             if (checkReferenceExpression(target, error, optionalError)) {
@@ -73606,39 +75007,39 @@
         function isSideEffectFree(node) {
             node = ts.skipParentheses(node);
             switch (node.kind) {
-                case 78 /* Identifier */:
+                case 79 /* Identifier */:
                 case 10 /* StringLiteral */:
                 case 13 /* RegularExpressionLiteral */:
-                case 206 /* TaggedTemplateExpression */:
-                case 219 /* TemplateExpression */:
+                case 208 /* TaggedTemplateExpression */:
+                case 221 /* TemplateExpression */:
                 case 14 /* NoSubstitutionTemplateLiteral */:
                 case 8 /* NumericLiteral */:
                 case 9 /* BigIntLiteral */:
-                case 109 /* TrueKeyword */:
-                case 94 /* FalseKeyword */:
-                case 103 /* NullKeyword */:
-                case 150 /* UndefinedKeyword */:
-                case 209 /* FunctionExpression */:
-                case 222 /* ClassExpression */:
-                case 210 /* ArrowFunction */:
-                case 200 /* ArrayLiteralExpression */:
-                case 201 /* ObjectLiteralExpression */:
-                case 212 /* TypeOfExpression */:
-                case 226 /* NonNullExpression */:
-                case 275 /* JsxSelfClosingElement */:
-                case 274 /* JsxElement */:
+                case 110 /* TrueKeyword */:
+                case 95 /* FalseKeyword */:
+                case 104 /* NullKeyword */:
+                case 151 /* UndefinedKeyword */:
+                case 211 /* FunctionExpression */:
+                case 224 /* ClassExpression */:
+                case 212 /* ArrowFunction */:
+                case 202 /* ArrayLiteralExpression */:
+                case 203 /* ObjectLiteralExpression */:
+                case 214 /* TypeOfExpression */:
+                case 228 /* NonNullExpression */:
+                case 277 /* JsxSelfClosingElement */:
+                case 276 /* JsxElement */:
                     return true;
-                case 218 /* ConditionalExpression */:
+                case 220 /* ConditionalExpression */:
                     return isSideEffectFree(node.whenTrue) &&
                         isSideEffectFree(node.whenFalse);
-                case 217 /* BinaryExpression */:
+                case 219 /* BinaryExpression */:
                     if (ts.isAssignmentOperator(node.operatorToken.kind)) {
                         return false;
                     }
                     return isSideEffectFree(node.left) &&
                         isSideEffectFree(node.right);
-                case 215 /* PrefixUnaryExpression */:
-                case 216 /* PostfixUnaryExpression */:
+                case 217 /* PrefixUnaryExpression */:
+                case 218 /* PostfixUnaryExpression */:
                     // Unary operators ~, !, +, and - have no side effects.
                     // The rest do.
                     switch (node.operator) {
@@ -73650,9 +75051,9 @@
                     }
                     return false;
                 // Some forms listed here for clarity
-                case 213 /* VoidExpression */: // Explicit opt-out
-                case 207 /* TypeAssertionExpression */: // Not SEF, but can produce useful type warnings
-                case 225 /* AsExpression */: // Not SEF, but can produce useful type warnings
+                case 215 /* VoidExpression */: // Explicit opt-out
+                case 209 /* TypeAssertionExpression */: // Not SEF, but can produce useful type warnings
+                case 227 /* AsExpression */: // Not SEF, but can produce useful type warnings
                 default:
                     return false;
             }
@@ -73689,9 +75090,9 @@
                 }
                 checkGrammarNullishCoalesceWithLogicalExpression(node);
                 var operator = node.operatorToken.kind;
-                if (operator === 62 /* EqualsToken */ && (node.left.kind === 201 /* ObjectLiteralExpression */ || node.left.kind === 200 /* ArrayLiteralExpression */)) {
+                if (operator === 63 /* EqualsToken */ && (node.left.kind === 203 /* ObjectLiteralExpression */ || node.left.kind === 202 /* ArrayLiteralExpression */)) {
                     state.skip = true;
-                    setLastResult(state, checkDestructuringAssignment(node.left, checkExpression(node.right, checkMode), checkMode, node.right.kind === 107 /* ThisKeyword */));
+                    setLastResult(state, checkDestructuringAssignment(node.left, checkExpression(node.right, checkMode), checkMode, node.right.kind === 108 /* ThisKeyword */));
                     return state;
                 }
                 return state;
@@ -73782,8 +75183,8 @@
         // expression-wide checks and does not use a work stack to fold nested binary expressions into the same callstack frame
         function checkBinaryLikeExpression(left, operatorToken, right, checkMode, errorNode) {
             var operator = operatorToken.kind;
-            if (operator === 62 /* EqualsToken */ && (left.kind === 201 /* ObjectLiteralExpression */ || left.kind === 200 /* ArrayLiteralExpression */)) {
-                return checkDestructuringAssignment(left, checkExpression(right, checkMode), checkMode, right.kind === 107 /* ThisKeyword */);
+            if (operator === 63 /* EqualsToken */ && (left.kind === 203 /* ObjectLiteralExpression */ || left.kind === 202 /* ArrayLiteralExpression */)) {
+                return checkDestructuringAssignment(left, checkExpression(right, checkMode), checkMode, right.kind === 108 /* ThisKeyword */);
             }
             var leftType;
             if (operator === 55 /* AmpersandAmpersandToken */ || operator === 56 /* BarBarToken */ || operator === 60 /* QuestionQuestionToken */) {
@@ -73800,26 +75201,26 @@
             switch (operator) {
                 case 41 /* AsteriskToken */:
                 case 42 /* AsteriskAsteriskToken */:
-                case 65 /* AsteriskEqualsToken */:
-                case 66 /* AsteriskAsteriskEqualsToken */:
+                case 66 /* AsteriskEqualsToken */:
+                case 67 /* AsteriskAsteriskEqualsToken */:
                 case 43 /* SlashToken */:
-                case 67 /* SlashEqualsToken */:
+                case 68 /* SlashEqualsToken */:
                 case 44 /* PercentToken */:
-                case 68 /* PercentEqualsToken */:
+                case 69 /* PercentEqualsToken */:
                 case 40 /* MinusToken */:
-                case 64 /* MinusEqualsToken */:
+                case 65 /* MinusEqualsToken */:
                 case 47 /* LessThanLessThanToken */:
-                case 69 /* LessThanLessThanEqualsToken */:
+                case 70 /* LessThanLessThanEqualsToken */:
                 case 48 /* GreaterThanGreaterThanToken */:
-                case 70 /* GreaterThanGreaterThanEqualsToken */:
+                case 71 /* GreaterThanGreaterThanEqualsToken */:
                 case 49 /* GreaterThanGreaterThanGreaterThanToken */:
-                case 71 /* GreaterThanGreaterThanGreaterThanEqualsToken */:
+                case 72 /* GreaterThanGreaterThanGreaterThanEqualsToken */:
                 case 51 /* BarToken */:
-                case 73 /* BarEqualsToken */:
+                case 74 /* BarEqualsToken */:
                 case 52 /* CaretToken */:
-                case 77 /* CaretEqualsToken */:
+                case 78 /* CaretEqualsToken */:
                 case 50 /* AmpersandToken */:
-                case 72 /* AmpersandEqualsToken */:
+                case 73 /* AmpersandEqualsToken */:
                     if (leftType === silentNeverType || rightType === silentNeverType) {
                         return silentNeverType;
                     }
@@ -73849,11 +75250,11 @@
                         else if (bothAreBigIntLike(leftType, rightType)) {
                             switch (operator) {
                                 case 49 /* GreaterThanGreaterThanGreaterThanToken */:
-                                case 71 /* GreaterThanGreaterThanGreaterThanEqualsToken */:
+                                case 72 /* GreaterThanGreaterThanGreaterThanEqualsToken */:
                                     reportOperatorError();
                                     break;
                                 case 42 /* AsteriskAsteriskToken */:
-                                case 66 /* AsteriskAsteriskEqualsToken */:
+                                case 67 /* AsteriskAsteriskEqualsToken */:
                                     if (languageVersion < 3 /* ES2016 */) {
                                         error(errorNode, ts.Diagnostics.Exponentiation_cannot_be_performed_on_bigint_values_unless_the_target_option_is_set_to_es2016_or_later);
                                     }
@@ -73871,7 +75272,7 @@
                         return resultType_1;
                     }
                 case 39 /* PlusToken */:
-                case 63 /* PlusEqualsToken */:
+                case 64 /* PlusEqualsToken */:
                     if (leftType === silentNeverType || rightType === silentNeverType) {
                         return silentNeverType;
                     }
@@ -73914,7 +75315,7 @@
                         });
                         return anyType;
                     }
-                    if (operator === 63 /* PlusEqualsToken */) {
+                    if (operator === 64 /* PlusEqualsToken */) {
                         checkAssignmentOperator(resultType);
                     }
                     return resultType;
@@ -73936,41 +75337,41 @@
                 case 37 /* ExclamationEqualsEqualsToken */:
                     reportOperatorErrorUnless(function (left, right) { return isTypeEqualityComparableTo(left, right) || isTypeEqualityComparableTo(right, left); });
                     return booleanType;
-                case 101 /* InstanceOfKeyword */:
+                case 102 /* InstanceOfKeyword */:
                     return checkInstanceOfExpression(left, right, leftType, rightType);
-                case 100 /* InKeyword */:
+                case 101 /* InKeyword */:
                     return checkInExpression(left, right, leftType, rightType);
                 case 55 /* AmpersandAmpersandToken */:
-                case 75 /* AmpersandAmpersandEqualsToken */: {
+                case 76 /* AmpersandAmpersandEqualsToken */: {
                     var resultType_2 = getTypeFacts(leftType) & 4194304 /* Truthy */ ?
                         getUnionType([extractDefinitelyFalsyTypes(strictNullChecks ? leftType : getBaseTypeOfLiteralType(rightType)), rightType]) :
                         leftType;
-                    if (operator === 75 /* AmpersandAmpersandEqualsToken */) {
+                    if (operator === 76 /* AmpersandAmpersandEqualsToken */) {
                         checkAssignmentOperator(rightType);
                     }
                     return resultType_2;
                 }
                 case 56 /* BarBarToken */:
-                case 74 /* BarBarEqualsToken */: {
+                case 75 /* BarBarEqualsToken */: {
                     var resultType_3 = getTypeFacts(leftType) & 8388608 /* Falsy */ ?
                         getUnionType([removeDefinitelyFalsyTypes(leftType), rightType], 2 /* Subtype */) :
                         leftType;
-                    if (operator === 74 /* BarBarEqualsToken */) {
+                    if (operator === 75 /* BarBarEqualsToken */) {
                         checkAssignmentOperator(rightType);
                     }
                     return resultType_3;
                 }
                 case 60 /* QuestionQuestionToken */:
-                case 76 /* QuestionQuestionEqualsToken */: {
+                case 77 /* QuestionQuestionEqualsToken */: {
                     var resultType_4 = getTypeFacts(leftType) & 262144 /* EQUndefinedOrNull */ ?
                         getUnionType([getNonNullableType(leftType), rightType], 2 /* Subtype */) :
                         leftType;
-                    if (operator === 76 /* QuestionQuestionEqualsToken */) {
+                    if (operator === 77 /* QuestionQuestionEqualsToken */) {
                         checkAssignmentOperator(rightType);
                     }
                     return resultType_4;
                 }
-                case 62 /* EqualsToken */:
+                case 63 /* EqualsToken */:
                     var declKind = ts.isBinaryExpression(left.parent) ? ts.getAssignmentDeclarationKind(left.parent) : 0 /* None */;
                     checkAssignmentDeclaration(declKind, rightType);
                     if (isAssignmentDeclaration(declKind)) {
@@ -74026,7 +75427,7 @@
                 }
             }
             function isEvalNode(node) {
-                return node.kind === 78 /* Identifier */ && node.escapedText === "eval";
+                return node.kind === 79 /* Identifier */ && node.escapedText === "eval";
             }
             // Return true if there was no error, false if there was an error.
             function checkForDisallowedESSymbolOperand(operator) {
@@ -74042,13 +75443,13 @@
             function getSuggestedBooleanOperator(operator) {
                 switch (operator) {
                     case 51 /* BarToken */:
-                    case 73 /* BarEqualsToken */:
+                    case 74 /* BarEqualsToken */:
                         return 56 /* BarBarToken */;
                     case 52 /* CaretToken */:
-                    case 77 /* CaretEqualsToken */:
+                    case 78 /* CaretEqualsToken */:
                         return 37 /* ExclamationEqualsEqualsToken */;
                     case 50 /* AmpersandToken */:
-                    case 72 /* AmpersandEqualsToken */:
+                    case 73 /* AmpersandEqualsToken */:
                         return 55 /* AmpersandAmpersandToken */;
                     default:
                         return undefined;
@@ -74217,6 +75618,11 @@
             var type2 = checkExpression(node.whenFalse, checkMode);
             return getUnionType([type1, type2], 2 /* Subtype */);
         }
+        function isTemplateLiteralContext(node) {
+            var parent = node.parent;
+            return ts.isParenthesizedExpression(parent) && isTemplateLiteralContext(parent) ||
+                ts.isElementAccessExpression(parent) && parent.argumentExpression === node;
+        }
         function checkTemplateExpression(node) {
             var texts = [node.head.text];
             var types = [];
@@ -74229,14 +75635,14 @@
                 texts.push(span.literal.text);
                 types.push(isTypeAssignableTo(type, templateConstraintType) ? type : stringType);
             }
-            return isConstContext(node) || someType(getContextualType(node) || unknownType, isTemplateLiteralContextualType) ? getTemplateLiteralType(texts, types) : stringType;
+            return isConstContext(node) || isTemplateLiteralContext(node) || someType(getContextualType(node) || unknownType, isTemplateLiteralContextualType) ? getTemplateLiteralType(texts, types) : stringType;
         }
         function isTemplateLiteralContextualType(type) {
             return !!(type.flags & (128 /* StringLiteral */ | 134217728 /* TemplateLiteral */) ||
                 type.flags & 58982400 /* InstantiableNonPrimitive */ && maybeTypeOfKind(getBaseConstraintOfType(type) || unknownType, 402653316 /* StringLike */));
         }
         function getContextNode(node) {
-            if (node.kind === 282 /* JsxAttributes */ && !ts.isJsxSelfClosingElement(node.parent)) {
+            if (node.kind === 284 /* JsxAttributes */ && !ts.isJsxSelfClosingElement(node.parent)) {
                 return node.parent.parent; // Needs to be the root JsxElement, so it encompasses the attributes _and_ the children (which are essentially part of the attributes)
             }
             return node;
@@ -74285,13 +75691,13 @@
         }
         function isTypeAssertion(node) {
             node = ts.skipParentheses(node);
-            return node.kind === 207 /* TypeAssertionExpression */ || node.kind === 225 /* AsExpression */;
+            return node.kind === 209 /* TypeAssertionExpression */ || node.kind === 227 /* AsExpression */;
         }
         function checkDeclarationInitializer(declaration, contextualType) {
             var initializer = ts.getEffectiveInitializer(declaration);
             var type = getQuickTypeOfExpression(initializer) ||
                 (contextualType ? checkExpressionWithContextualType(initializer, contextualType, /*inferenceContext*/ undefined, 0 /* Normal */) : checkExpressionCached(initializer));
-            return ts.isParameter(declaration) && declaration.name.kind === 198 /* ArrayBindingPattern */ &&
+            return ts.isParameter(declaration) && declaration.name.kind === 200 /* ArrayBindingPattern */ &&
                 isTupleType(type) && !type.target.hasRestElement && getTypeReferenceArity(type) < declaration.name.elements.length ?
                 padTupleType(type, declaration.name) : type;
         }
@@ -74301,7 +75707,7 @@
             var elementFlags = type.target.elementFlags.slice();
             for (var i = getTypeReferenceArity(type); i < patternElements.length; i++) {
                 var e = patternElements[i];
-                if (i < patternElements.length - 1 || !(e.kind === 199 /* BindingElement */ && e.dotDotDotToken)) {
+                if (i < patternElements.length - 1 || !(e.kind === 201 /* BindingElement */ && e.dotDotDotToken)) {
                     elementTypes.push(!ts.isOmittedExpression(e) && hasDefaultValue(e) ? getTypeFromBindingElement(e, /*includePatternInType*/ false, /*reportErrors*/ false) : anyType);
                     elementFlags.push(2 /* Optional */);
                     if (!ts.isOmittedExpression(e) && !hasDefaultValue(e)) {
@@ -74314,7 +75720,7 @@
         function widenTypeInferredFromInitializer(declaration, type) {
             var widened = ts.getCombinedNodeFlags(declaration) & 2 /* Const */ || ts.isDeclarationReadonly(declaration) ? type : getWidenedLiteralType(type);
             if (ts.isInJSFile(declaration)) {
-                if (widened.flags & 98304 /* Nullable */) {
+                if (isEmptyLiteralType(widened)) {
                     reportImplicitAny(declaration, anyType);
                     return anyType;
                 }
@@ -74368,7 +75774,7 @@
             // Do not use hasDynamicName here, because that returns false for well known symbols.
             // We want to perform checkComputedPropertyName for all computed properties, including
             // well known symbols.
-            if (node.name.kind === 159 /* ComputedPropertyName */) {
+            if (node.name.kind === 160 /* ComputedPropertyName */) {
                 checkComputedPropertyName(node.name);
             }
             return checkExpressionForMutableLocation(node.initializer, checkMode);
@@ -74379,7 +75785,7 @@
             // Do not use hasDynamicName here, because that returns false for well known symbols.
             // We want to perform checkComputedPropertyName for all computed properties, including
             // well known symbols.
-            if (node.name.kind === 159 /* ComputedPropertyName */) {
+            if (node.name.kind === 160 /* ComputedPropertyName */) {
                 checkComputedPropertyName(node.name);
             }
             var uninstantiatedType = checkFunctionExpressionOrObjectLiteralMethod(node, checkMode);
@@ -74506,7 +75912,7 @@
                 len--;
             var s = baseName.slice(0, len);
             for (var index = 1; true; index++) {
-                var augmentedName = (s + index);
+                var augmentedName = s + index;
                 if (!hasTypeParameterByName(typeParameters, augmentedName)) {
                     return augmentedName;
                 }
@@ -74555,7 +75961,7 @@
             var expr = ts.skipParentheses(node);
             // Optimize for the common case of a call to a function with a single non-generic call
             // signature where we can just fetch the return type without checking the arguments.
-            if (ts.isCallExpression(expr) && expr.expression.kind !== 105 /* SuperKeyword */ && !ts.isRequireCall(expr, /*checkArgumentIsStringLiteralLike*/ true) && !isSymbolOrSymbolForCall(expr)) {
+            if (ts.isCallExpression(expr) && expr.expression.kind !== 106 /* SuperKeyword */ && !ts.isRequireCall(expr, /*checkArgumentIsStringLiteralLike*/ true) && !isSymbolOrSymbolForCall(expr)) {
                 var type = ts.isCallChain(expr) ? getReturnTypeOfSingleNonGenericSignatureOfCallChain(expr) :
                     getReturnTypeOfSingleNonGenericCallSignature(checkNonNullExpression(expr.expression));
                 if (type) {
@@ -74566,7 +75972,7 @@
                 return getTypeFromTypeNode(expr.type);
             }
             else if (node.kind === 8 /* NumericLiteral */ || node.kind === 10 /* StringLiteral */ ||
-                node.kind === 109 /* TrueKeyword */ || node.kind === 94 /* FalseKeyword */) {
+                node.kind === 110 /* TrueKeyword */ || node.kind === 95 /* FalseKeyword */) {
                 return checkExpression(node);
             }
             return undefined;
@@ -74615,11 +76021,11 @@
             // - 'left' in property access
             // - 'object' in indexed access
             // - target in rhs of import statement
-            var ok = (node.parent.kind === 202 /* PropertyAccessExpression */ && node.parent.expression === node) ||
-                (node.parent.kind === 203 /* ElementAccessExpression */ && node.parent.expression === node) ||
-                ((node.kind === 78 /* Identifier */ || node.kind === 158 /* QualifiedName */) && isInRightSideOfImportOrExportAssignment(node) ||
-                    (node.parent.kind === 177 /* TypeQuery */ && node.parent.exprName === node)) ||
-                (node.parent.kind === 271 /* ExportSpecifier */); // We allow reexporting const enums
+            var ok = (node.parent.kind === 204 /* PropertyAccessExpression */ && node.parent.expression === node) ||
+                (node.parent.kind === 205 /* ElementAccessExpression */ && node.parent.expression === node) ||
+                ((node.kind === 79 /* Identifier */ || node.kind === 159 /* QualifiedName */) && isInRightSideOfImportOrExportAssignment(node) ||
+                    (node.parent.kind === 179 /* TypeQuery */ && node.parent.exprName === node)) ||
+                (node.parent.kind === 273 /* ExportSpecifier */); // We allow reexporting const enums
             if (!ok) {
                 error(node, ts.Diagnostics.const_enums_can_only_be_used_in_property_or_index_access_expressions_or_the_right_hand_side_of_an_import_declaration_or_export_assignment_or_type_query);
             }
@@ -74634,7 +76040,7 @@
         function checkParenthesizedExpression(node, checkMode) {
             var tag = ts.isInJSFile(node) ? ts.getJSDocTypeTag(node) : undefined;
             if (tag) {
-                return checkAssertionWorker(tag, tag.typeExpression.type, node.expression, checkMode);
+                return checkAssertionWorker(tag.typeExpression.type, tag.typeExpression.type, node.expression, checkMode);
             }
             return checkExpression(node.expression, checkMode);
         }
@@ -74644,106 +76050,109 @@
                 // Only bother checking on a few construct kinds.  We don't want to be excessively
                 // hitting the cancellation token on every node we check.
                 switch (kind) {
-                    case 222 /* ClassExpression */:
-                    case 209 /* FunctionExpression */:
-                    case 210 /* ArrowFunction */:
+                    case 224 /* ClassExpression */:
+                    case 211 /* FunctionExpression */:
+                    case 212 /* ArrowFunction */:
                         cancellationToken.throwIfCancellationRequested();
                 }
             }
             switch (kind) {
-                case 78 /* Identifier */:
+                case 79 /* Identifier */:
                     return checkIdentifier(node, checkMode);
-                case 107 /* ThisKeyword */:
+                case 108 /* ThisKeyword */:
                     return checkThisExpression(node);
-                case 105 /* SuperKeyword */:
+                case 106 /* SuperKeyword */:
                     return checkSuperExpression(node);
-                case 103 /* NullKeyword */:
+                case 104 /* NullKeyword */:
                     return nullWideningType;
                 case 14 /* NoSubstitutionTemplateLiteral */:
                 case 10 /* StringLiteral */:
-                    return getFreshTypeOfLiteralType(getLiteralType(node.text));
+                    return getFreshTypeOfLiteralType(getStringLiteralType(node.text));
                 case 8 /* NumericLiteral */:
                     checkGrammarNumericLiteral(node);
-                    return getFreshTypeOfLiteralType(getLiteralType(+node.text));
+                    return getFreshTypeOfLiteralType(getNumberLiteralType(+node.text));
                 case 9 /* BigIntLiteral */:
                     checkGrammarBigIntLiteral(node);
-                    return getFreshTypeOfLiteralType(getBigIntLiteralType(node));
-                case 109 /* TrueKeyword */:
+                    return getFreshTypeOfLiteralType(getBigIntLiteralType({
+                        negative: false,
+                        base10Value: ts.parsePseudoBigInt(node.text)
+                    }));
+                case 110 /* TrueKeyword */:
                     return trueType;
-                case 94 /* FalseKeyword */:
+                case 95 /* FalseKeyword */:
                     return falseType;
-                case 219 /* TemplateExpression */:
+                case 221 /* TemplateExpression */:
                     return checkTemplateExpression(node);
                 case 13 /* RegularExpressionLiteral */:
                     return globalRegExpType;
-                case 200 /* ArrayLiteralExpression */:
+                case 202 /* ArrayLiteralExpression */:
                     return checkArrayLiteral(node, checkMode, forceTuple);
-                case 201 /* ObjectLiteralExpression */:
+                case 203 /* ObjectLiteralExpression */:
                     return checkObjectLiteral(node, checkMode);
-                case 202 /* PropertyAccessExpression */:
+                case 204 /* PropertyAccessExpression */:
                     return checkPropertyAccessExpression(node, checkMode);
-                case 158 /* QualifiedName */:
+                case 159 /* QualifiedName */:
                     return checkQualifiedName(node, checkMode);
-                case 203 /* ElementAccessExpression */:
+                case 205 /* ElementAccessExpression */:
                     return checkIndexedAccess(node, checkMode);
-                case 204 /* CallExpression */:
-                    if (node.expression.kind === 99 /* ImportKeyword */) {
+                case 206 /* CallExpression */:
+                    if (node.expression.kind === 100 /* ImportKeyword */) {
                         return checkImportCallExpression(node);
                     }
                 // falls through
-                case 205 /* NewExpression */:
+                case 207 /* NewExpression */:
                     return checkCallExpression(node, checkMode);
-                case 206 /* TaggedTemplateExpression */:
+                case 208 /* TaggedTemplateExpression */:
                     return checkTaggedTemplateExpression(node);
-                case 208 /* ParenthesizedExpression */:
+                case 210 /* ParenthesizedExpression */:
                     return checkParenthesizedExpression(node, checkMode);
-                case 222 /* ClassExpression */:
+                case 224 /* ClassExpression */:
                     return checkClassExpression(node);
-                case 209 /* FunctionExpression */:
-                case 210 /* ArrowFunction */:
+                case 211 /* FunctionExpression */:
+                case 212 /* ArrowFunction */:
                     return checkFunctionExpressionOrObjectLiteralMethod(node, checkMode);
-                case 212 /* TypeOfExpression */:
+                case 214 /* TypeOfExpression */:
                     return checkTypeOfExpression(node);
-                case 207 /* TypeAssertionExpression */:
-                case 225 /* AsExpression */:
+                case 209 /* TypeAssertionExpression */:
+                case 227 /* AsExpression */:
                     return checkAssertion(node);
-                case 226 /* NonNullExpression */:
+                case 228 /* NonNullExpression */:
                     return checkNonNullAssertion(node);
-                case 227 /* MetaProperty */:
+                case 229 /* MetaProperty */:
                     return checkMetaProperty(node);
-                case 211 /* DeleteExpression */:
+                case 213 /* DeleteExpression */:
                     return checkDeleteExpression(node);
-                case 213 /* VoidExpression */:
+                case 215 /* VoidExpression */:
                     return checkVoidExpression(node);
-                case 214 /* AwaitExpression */:
+                case 216 /* AwaitExpression */:
                     return checkAwaitExpression(node);
-                case 215 /* PrefixUnaryExpression */:
+                case 217 /* PrefixUnaryExpression */:
                     return checkPrefixUnaryExpression(node);
-                case 216 /* PostfixUnaryExpression */:
+                case 218 /* PostfixUnaryExpression */:
                     return checkPostfixUnaryExpression(node);
-                case 217 /* BinaryExpression */:
+                case 219 /* BinaryExpression */:
                     return checkBinaryExpression(node, checkMode);
-                case 218 /* ConditionalExpression */:
+                case 220 /* ConditionalExpression */:
                     return checkConditionalExpression(node, checkMode);
-                case 221 /* SpreadElement */:
+                case 223 /* SpreadElement */:
                     return checkSpreadExpression(node, checkMode);
-                case 223 /* OmittedExpression */:
+                case 225 /* OmittedExpression */:
                     return undefinedWideningType;
-                case 220 /* YieldExpression */:
+                case 222 /* YieldExpression */:
                     return checkYieldExpression(node);
-                case 228 /* SyntheticExpression */:
+                case 230 /* SyntheticExpression */:
                     return checkSyntheticExpression(node);
-                case 284 /* JsxExpression */:
+                case 286 /* JsxExpression */:
                     return checkJsxExpression(node, checkMode);
-                case 274 /* JsxElement */:
+                case 276 /* JsxElement */:
                     return checkJsxElement(node, checkMode);
-                case 275 /* JsxSelfClosingElement */:
+                case 277 /* JsxSelfClosingElement */:
                     return checkJsxSelfClosingElement(node, checkMode);
-                case 278 /* JsxFragment */:
+                case 280 /* JsxFragment */:
                     return checkJsxFragment(node);
-                case 282 /* JsxAttributes */:
+                case 284 /* JsxAttributes */:
                     return checkJsxAttributes(node, checkMode);
-                case 276 /* JsxOpeningElement */:
+                case 278 /* JsxOpeningElement */:
                     ts.Debug.fail("Shouldn't ever directly check a JsxOpeningElement");
             }
             return errorType;
@@ -74780,10 +76189,10 @@
             checkVariableLikeDeclaration(node);
             var func = ts.getContainingFunction(node);
             if (ts.hasSyntacticModifier(node, 16476 /* ParameterPropertyModifier */)) {
-                if (!(func.kind === 167 /* Constructor */ && ts.nodeIsPresent(func.body))) {
+                if (!(func.kind === 169 /* Constructor */ && ts.nodeIsPresent(func.body))) {
                     error(node, ts.Diagnostics.A_parameter_property_is_only_allowed_in_a_constructor_implementation);
                 }
-                if (func.kind === 167 /* Constructor */ && ts.isIdentifier(node.name) && node.name.escapedText === "constructor") {
+                if (func.kind === 169 /* Constructor */ && ts.isIdentifier(node.name) && node.name.escapedText === "constructor") {
                     error(node.name, ts.Diagnostics.constructor_cannot_be_used_as_a_parameter_property_name);
                 }
             }
@@ -74794,13 +76203,13 @@
                 if (func.parameters.indexOf(node) !== 0) {
                     error(node, ts.Diagnostics.A_0_parameter_must_be_the_first_parameter, node.name.escapedText);
                 }
-                if (func.kind === 167 /* Constructor */ || func.kind === 171 /* ConstructSignature */ || func.kind === 176 /* ConstructorType */) {
+                if (func.kind === 169 /* Constructor */ || func.kind === 173 /* ConstructSignature */ || func.kind === 178 /* ConstructorType */) {
                     error(node, ts.Diagnostics.A_constructor_cannot_have_a_this_parameter);
                 }
-                if (func.kind === 210 /* ArrowFunction */) {
+                if (func.kind === 212 /* ArrowFunction */) {
                     error(node, ts.Diagnostics.An_arrow_function_cannot_have_a_this_parameter);
                 }
-                if (func.kind === 168 /* GetAccessor */ || func.kind === 169 /* SetAccessor */) {
+                if (func.kind === 170 /* GetAccessor */ || func.kind === 171 /* SetAccessor */) {
                     error(node, ts.Diagnostics.get_and_set_accessors_cannot_declare_this_parameters);
                 }
             }
@@ -74858,13 +76267,13 @@
         }
         function getTypePredicateParent(node) {
             switch (node.parent.kind) {
-                case 210 /* ArrowFunction */:
-                case 170 /* CallSignature */:
-                case 252 /* FunctionDeclaration */:
-                case 209 /* FunctionExpression */:
-                case 175 /* FunctionType */:
-                case 166 /* MethodDeclaration */:
-                case 165 /* MethodSignature */:
+                case 212 /* ArrowFunction */:
+                case 172 /* CallSignature */:
+                case 254 /* FunctionDeclaration */:
+                case 211 /* FunctionExpression */:
+                case 177 /* FunctionType */:
+                case 167 /* MethodDeclaration */:
+                case 166 /* MethodSignature */:
                     var parent = node.parent;
                     if (node === parent.type) {
                         return parent;
@@ -74878,11 +76287,11 @@
                     continue;
                 }
                 var name = element.name;
-                if (name.kind === 78 /* Identifier */ && name.escapedText === predicateVariableName) {
+                if (name.kind === 79 /* Identifier */ && name.escapedText === predicateVariableName) {
                     error(predicateVariableNode, ts.Diagnostics.A_type_predicate_cannot_reference_element_0_in_a_binding_pattern, predicateVariableName);
                     return true;
                 }
-                else if (name.kind === 198 /* ArrayBindingPattern */ || name.kind === 197 /* ObjectBindingPattern */) {
+                else if (name.kind === 200 /* ArrayBindingPattern */ || name.kind === 199 /* ObjectBindingPattern */) {
                     if (checkIfTypePredicateVariableIsDeclaredInBindingPattern(name, predicateVariableNode, predicateVariableName)) {
                         return true;
                     }
@@ -74891,13 +76300,13 @@
         }
         function checkSignatureDeclaration(node) {
             // Grammar checking
-            if (node.kind === 172 /* IndexSignature */) {
+            if (node.kind === 174 /* IndexSignature */) {
                 checkGrammarIndexSignature(node);
             }
             // TODO (yuisu): Remove this check in else-if when SyntaxKind.Construct is moved and ambient context is handled
-            else if (node.kind === 175 /* FunctionType */ || node.kind === 252 /* FunctionDeclaration */ || node.kind === 176 /* ConstructorType */ ||
-                node.kind === 170 /* CallSignature */ || node.kind === 167 /* Constructor */ ||
-                node.kind === 171 /* ConstructSignature */) {
+            else if (node.kind === 177 /* FunctionType */ || node.kind === 254 /* FunctionDeclaration */ || node.kind === 178 /* ConstructorType */ ||
+                node.kind === 172 /* CallSignature */ || node.kind === 169 /* Constructor */ ||
+                node.kind === 173 /* ConstructSignature */) {
                 checkGrammarFunctionLikeDeclaration(node);
             }
             var functionFlags = ts.getFunctionFlags(node);
@@ -74927,10 +76336,10 @@
                 var returnTypeNode = ts.getEffectiveReturnTypeNode(node);
                 if (noImplicitAny && !returnTypeNode) {
                     switch (node.kind) {
-                        case 171 /* ConstructSignature */:
+                        case 173 /* ConstructSignature */:
                             error(node, ts.Diagnostics.Construct_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type);
                             break;
-                        case 170 /* CallSignature */:
+                        case 172 /* CallSignature */:
                             error(node, ts.Diagnostics.Call_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type);
                             break;
                     }
@@ -74960,7 +76369,7 @@
                         checkAsyncFunctionReturnType(node, returnTypeNode);
                     }
                 }
-                if (node.kind !== 172 /* IndexSignature */ && node.kind !== 309 /* JSDocFunctionType */) {
+                if (node.kind !== 174 /* IndexSignature */ && node.kind !== 312 /* JSDocFunctionType */) {
                     registerForUnusedIdentifiersCheck(node);
                 }
             }
@@ -74972,7 +76381,7 @@
             var privateIdentifiers = new ts.Map();
             for (var _i = 0, _a = node.members; _i < _a.length; _i++) {
                 var member = _a[_i];
-                if (member.kind === 167 /* Constructor */) {
+                if (member.kind === 169 /* Constructor */) {
                     for (var _b = 0, _c = member.parameters; _b < _c.length; _b++) {
                         var param = _c[_b];
                         if (ts.isParameterPropertyDeclaration(param, member) && !ts.isBindingPattern(param.name)) {
@@ -74981,29 +76390,29 @@
                     }
                 }
                 else {
-                    var isStatic = ts.hasSyntacticModifier(member, 32 /* Static */);
+                    var isStaticMember = ts.isStatic(member);
                     var name = member.name;
                     if (!name) {
                         continue;
                     }
                     var isPrivate = ts.isPrivateIdentifier(name);
-                    var privateStaticFlags = isPrivate && isStatic ? 16 /* PrivateStatic */ : 0;
+                    var privateStaticFlags = isPrivate && isStaticMember ? 16 /* PrivateStatic */ : 0;
                     var names = isPrivate ? privateIdentifiers :
-                        isStatic ? staticNames :
+                        isStaticMember ? staticNames :
                             instanceNames;
                     var memberName = name && ts.getPropertyNameForPropertyNameNode(name);
                     if (memberName) {
                         switch (member.kind) {
-                            case 168 /* GetAccessor */:
+                            case 170 /* GetAccessor */:
                                 addName(names, name, memberName, 1 /* GetAccessor */ | privateStaticFlags);
                                 break;
-                            case 169 /* SetAccessor */:
+                            case 171 /* SetAccessor */:
                                 addName(names, name, memberName, 2 /* SetAccessor */ | privateStaticFlags);
                                 break;
-                            case 164 /* PropertyDeclaration */:
+                            case 165 /* PropertyDeclaration */:
                                 addName(names, name, memberName, 3 /* GetOrSetAccessor */ | privateStaticFlags);
                                 break;
-                            case 166 /* MethodDeclaration */:
+                            case 167 /* MethodDeclaration */:
                                 addName(names, name, memberName, 8 /* Method */ | privateStaticFlags);
                                 break;
                         }
@@ -75054,8 +76463,8 @@
             for (var _i = 0, _a = node.members; _i < _a.length; _i++) {
                 var member = _a[_i];
                 var memberNameNode = member.name;
-                var isStatic = ts.hasSyntacticModifier(member, 32 /* Static */);
-                if (isStatic && memberNameNode) {
+                var isStaticMember = ts.isStatic(member);
+                if (isStaticMember && memberNameNode) {
                     var memberName = ts.getPropertyNameForPropertyNameNode(memberNameNode);
                     switch (memberName) {
                         case "name":
@@ -75075,7 +76484,7 @@
             var names = new ts.Map();
             for (var _i = 0, _a = node.members; _i < _a.length; _i++) {
                 var member = _a[_i];
-                if (member.kind === 163 /* PropertySignature */) {
+                if (member.kind === 164 /* PropertySignature */) {
                     var memberName = void 0;
                     var name = member.name;
                     switch (name.kind) {
@@ -75083,7 +76492,7 @@
                         case 8 /* NumericLiteral */:
                             memberName = name.text;
                             break;
-                        case 78 /* Identifier */:
+                        case 79 /* Identifier */:
                             memberName = ts.idText(name);
                             break;
                         default:
@@ -75100,7 +76509,7 @@
             }
         }
         function checkTypeForDuplicateIndexSignatures(node) {
-            if (node.kind === 254 /* InterfaceDeclaration */) {
+            if (node.kind === 256 /* InterfaceDeclaration */) {
                 var nodeSymbol = getSymbolOfNode(node);
                 // in case of merging interface declaration it is possible that we'll enter this check procedure several times for every declaration
                 // to prevent this run check only for the first declaration of a given kind
@@ -75113,32 +76522,32 @@
             // 8.5: A class declaration can have at most one string index member declaration and one numeric index member declaration
             var indexSymbol = getIndexSymbol(getSymbolOfNode(node));
             if (indexSymbol === null || indexSymbol === void 0 ? void 0 : indexSymbol.declarations) {
-                var seenNumericIndexer = false;
-                var seenStringIndexer = false;
-                for (var _i = 0, _a = indexSymbol.declarations; _i < _a.length; _i++) {
-                    var decl = _a[_i];
-                    var declaration = decl;
+                var indexSignatureMap_1 = new ts.Map();
+                var _loop_26 = function (declaration) {
                     if (declaration.parameters.length === 1 && declaration.parameters[0].type) {
-                        switch (declaration.parameters[0].type.kind) {
-                            case 147 /* StringKeyword */:
-                                if (!seenStringIndexer) {
-                                    seenStringIndexer = true;
-                                }
-                                else {
-                                    error(declaration, ts.Diagnostics.Duplicate_string_index_signature);
-                                }
-                                break;
-                            case 144 /* NumberKeyword */:
-                                if (!seenNumericIndexer) {
-                                    seenNumericIndexer = true;
-                                }
-                                else {
-                                    error(declaration, ts.Diagnostics.Duplicate_number_index_signature);
-                                }
-                                break;
+                        forEachType(getTypeFromTypeNode(declaration.parameters[0].type), function (type) {
+                            var entry = indexSignatureMap_1.get(getTypeId(type));
+                            if (entry) {
+                                entry.declarations.push(declaration);
+                            }
+                            else {
+                                indexSignatureMap_1.set(getTypeId(type), { type: type, declarations: [declaration] });
+                            }
+                        });
+                    }
+                };
+                for (var _i = 0, _a = indexSymbol.declarations; _i < _a.length; _i++) {
+                    var declaration = _a[_i];
+                    _loop_26(declaration);
+                }
+                indexSignatureMap_1.forEach(function (entry) {
+                    if (entry.declarations.length > 1) {
+                        for (var _i = 0, _a = entry.declarations; _i < _a.length; _i++) {
+                            var declaration = _a[_i];
+                            error(declaration, ts.Diagnostics.Duplicate_index_signature_for_type_0, typeToString(entry.type));
                         }
                     }
-                }
+                });
             }
         }
         function checkPropertyDeclaration(node) {
@@ -75150,6 +76559,10 @@
             if (ts.isPrivateIdentifier(node.name) && ts.hasStaticModifier(node) && node.initializer && languageVersion === 99 /* ESNext */ && !compilerOptions.useDefineForClassFields) {
                 error(node.initializer, ts.Diagnostics.Static_fields_with_private_names_can_t_have_initializers_when_the_useDefineForClassFields_flag_is_not_specified_with_a_target_of_esnext_Consider_adding_the_useDefineForClassFields_flag);
             }
+            // property signatures already report "initializer not allowed in ambient context" elsewhere
+            if (ts.hasSyntacticModifier(node, 128 /* Abstract */) && node.kind === 165 /* PropertyDeclaration */ && node.initializer) {
+                error(node, ts.Diagnostics.Property_0_cannot_have_an_initializer_because_it_is_marked_abstract, ts.declarationNameToString(node.name));
+            }
         }
         function checkPropertySignature(node) {
             if (ts.isPrivateIdentifier(node.name)) {
@@ -75163,9 +76576,8 @@
                 checkGrammarComputedPropertyName(node.name);
             // Grammar checking for modifiers is done inside the function checkGrammarFunctionLikeDeclaration
             checkFunctionOrMethodDeclaration(node);
-            // Abstract methods cannot have an implementation.
-            // Extra checks are to avoid reporting multiple errors relating to the "abstractness" of the node.
-            if (ts.hasSyntacticModifier(node, 128 /* Abstract */) && node.kind === 166 /* MethodDeclaration */ && node.body) {
+            // method signatures already report "implementation not allowed in ambient context" elsewhere
+            if (ts.hasSyntacticModifier(node, 128 /* Abstract */) && node.kind === 167 /* MethodDeclaration */ && node.body) {
                 error(node, ts.Diagnostics.Method_0_cannot_have_an_implementation_because_it_is_marked_abstract, ts.declarationNameToString(node.name));
             }
             // Private named methods are only allowed in class declarations
@@ -75191,6 +76603,10 @@
                 }
             }
         }
+        function checkClassStaticBlockDeclaration(node) {
+            checkGrammarDecoratorsAndModifiers(node);
+            ts.forEachChild(node, checkSourceElement);
+        }
         function checkConstructorDeclaration(node) {
             // Grammar check on signature of constructor and modifier of the constructor is done in checkSignatureDeclaration function.
             checkSignatureDeclaration(node);
@@ -75215,8 +76631,8 @@
                 if (ts.isPrivateIdentifierClassElementDeclaration(n)) {
                     return true;
                 }
-                return n.kind === 164 /* PropertyDeclaration */ &&
-                    !ts.hasSyntacticModifier(n, 32 /* Static */) &&
+                return n.kind === 165 /* PropertyDeclaration */ &&
+                    !ts.isStatic(n) &&
                     !!n.initializer;
             }
             // TS 1.0 spec (April 2014): 8.3.2
@@ -75246,7 +76662,7 @@
                         var superCallStatement = void 0;
                         for (var _i = 0, statements_4 = statements; _i < statements_4.length; _i++) {
                             var statement = statements_4[_i];
-                            if (statement.kind === 234 /* ExpressionStatement */ && ts.isSuperCall(statement.expression)) {
+                            if (statement.kind === 236 /* ExpressionStatement */ && ts.isSuperCall(statement.expression)) {
                                 superCallStatement = statement;
                                 break;
                             }
@@ -75271,7 +76687,7 @@
                     checkGrammarComputedPropertyName(node.name);
                 checkDecorators(node);
                 checkSignatureDeclaration(node);
-                if (node.kind === 168 /* GetAccessor */) {
+                if (node.kind === 170 /* GetAccessor */) {
                     if (!(node.flags & 8388608 /* Ambient */) && ts.nodeIsPresent(node.body) && (node.flags & 256 /* HasImplicitReturn */)) {
                         if (!(node.flags & 512 /* HasExplicitReturn */)) {
                             error(node.name, ts.Diagnostics.A_get_accessor_must_return_a_value);
@@ -75281,15 +76697,15 @@
                 // Do not use hasDynamicName here, because that returns false for well known symbols.
                 // We want to perform checkComputedPropertyName for all computed properties, including
                 // well known symbols.
-                if (node.name.kind === 159 /* ComputedPropertyName */) {
+                if (node.name.kind === 160 /* ComputedPropertyName */) {
                     checkComputedPropertyName(node.name);
                 }
                 if (hasBindableName(node)) {
                     // TypeScript 1.0 spec (April 2014): 8.4.3
                     // Accessors for the same member name must specify the same accessibility.
                     var symbol = getSymbolOfNode(node);
-                    var getter = ts.getDeclarationOfKind(symbol, 168 /* GetAccessor */);
-                    var setter = ts.getDeclarationOfKind(symbol, 169 /* SetAccessor */);
+                    var getter = ts.getDeclarationOfKind(symbol, 170 /* GetAccessor */);
+                    var setter = ts.getDeclarationOfKind(symbol, 171 /* SetAccessor */);
                     if (getter && setter && !(getNodeCheckFlags(getter) & 1 /* TypeChecked */)) {
                         getNodeLinks(getter).flags |= 1 /* TypeChecked */;
                         var getterFlags = ts.getEffectiveModifierFlags(getter);
@@ -75311,7 +76727,7 @@
                     }
                 }
                 var returnType = getTypeOfAccessors(getSymbolOfNode(node));
-                if (node.kind === 168 /* GetAccessor */) {
+                if (node.kind === 170 /* GetAccessor */) {
                     checkAllCodePathsInNonVoidFunctionReturnOrThrow(node, returnType);
                 }
             }
@@ -75353,7 +76769,7 @@
         }
         function checkTypeReferenceNode(node) {
             checkGrammarTypeArguments(node, node.typeArguments);
-            if (node.kind === 174 /* TypeReference */ && node.typeName.jsdocDotPos !== undefined && !ts.isInJSFile(node) && !ts.isInJSDoc(node)) {
+            if (node.kind === 176 /* TypeReference */ && node.typeName.jsdocDotPos !== undefined && !ts.isInJSFile(node) && !ts.isInJSDoc(node)) {
                 grammarErrorAtPos(node, node.typeName.jsdocDotPos, 1, ts.Diagnostics.JSDoc_types_can_only_be_used_inside_documentation_comments);
             }
             ts.forEach(node.typeArguments, checkSourceElement);
@@ -75406,7 +76822,7 @@
             var hasNamedElement = ts.some(elementTypes, ts.isNamedTupleMember);
             for (var _i = 0, elementTypes_1 = elementTypes; _i < elementTypes_1.length; _i++) {
                 var e = elementTypes_1[_i];
-                if (e.kind !== 193 /* NamedTupleMember */ && hasNamedElement) {
+                if (e.kind !== 195 /* NamedTupleMember */ && hasNamedElement) {
                     grammarErrorOnNode(e, ts.Diagnostics.Tuple_members_must_all_have_names_or_all_not_have_names);
                     break;
                 }
@@ -75455,7 +76871,7 @@
             var objectType = type.objectType;
             var indexType = type.indexType;
             if (isTypeAssignableTo(indexType, getIndexType(objectType, /*stringsOnly*/ false))) {
-                if (accessNode.kind === 203 /* ElementAccessExpression */ && ts.isAssignmentTarget(accessNode) &&
+                if (accessNode.kind === 205 /* ElementAccessExpression */ && ts.isAssignmentTarget(accessNode) &&
                     ts.getObjectFlags(objectType) & 32 /* Mapped */ && getMappedTypeModifiers(objectType) & 1 /* IncludeReadonly */) {
                     error(accessNode, ts.Diagnostics.Index_signature_in_type_0_only_permits_reading, typeToString(objectType));
                 }
@@ -75464,7 +76880,7 @@
             // Check if we're indexing with a numeric type and if either object or index types
             // is a generic type with a constraint that has a numeric index signature.
             var apparentObjectType = getApparentType(objectType);
-            if (getIndexInfoOfType(apparentObjectType, 1 /* Number */) && isTypeAssignableToKind(indexType, 296 /* NumberLike */)) {
+            if (getIndexInfoOfType(apparentObjectType, numberType) && isTypeAssignableToKind(indexType, 296 /* NumberLike */)) {
                 return type;
             }
             if (isGenericObjectType(objectType)) {
@@ -75513,7 +76929,7 @@
             ts.forEachChild(node, checkSourceElement);
         }
         function checkInferType(node) {
-            if (!ts.findAncestor(node, function (n) { return n.parent && n.parent.kind === 185 /* ConditionalType */ && n.parent.extendsType === n; })) {
+            if (!ts.findAncestor(node, function (n) { return n.parent && n.parent.kind === 187 /* ConditionalType */ && n.parent.extendsType === n; })) {
                 grammarErrorOnNode(node, ts.Diagnostics.infer_declarations_are_only_permitted_in_the_extends_clause_of_a_conditional_type);
             }
             checkSourceElement(node.typeParameter);
@@ -75536,10 +76952,10 @@
             if (node.dotDotDotToken && node.questionToken) {
                 grammarErrorOnNode(node, ts.Diagnostics.A_tuple_member_cannot_be_both_optional_and_rest);
             }
-            if (node.type.kind === 181 /* OptionalType */) {
+            if (node.type.kind === 183 /* OptionalType */) {
                 grammarErrorOnNode(node.type, ts.Diagnostics.A_labeled_tuple_element_is_declared_as_optional_with_a_question_mark_after_the_name_and_before_the_colon_rather_than_after_the_type);
             }
-            if (node.type.kind === 182 /* RestType */) {
+            if (node.type.kind === 184 /* RestType */) {
                 grammarErrorOnNode(node.type, ts.Diagnostics.A_labeled_tuple_element_is_declared_as_rest_with_a_before_the_name_rather_than_before_the_type);
             }
             checkSourceElement(node.type);
@@ -75552,9 +76968,9 @@
             var flags = ts.getCombinedModifierFlags(n);
             // children of classes (even ambient classes) should not be marked as ambient or export
             // because those flags have no useful semantics there.
-            if (n.parent.kind !== 254 /* InterfaceDeclaration */ &&
-                n.parent.kind !== 253 /* ClassDeclaration */ &&
-                n.parent.kind !== 222 /* ClassExpression */ &&
+            if (n.parent.kind !== 256 /* InterfaceDeclaration */ &&
+                n.parent.kind !== 255 /* ClassDeclaration */ &&
+                n.parent.kind !== 224 /* ClassExpression */ &&
                 n.flags & 8388608 /* Ambient */) {
                 if (!(flags & 2 /* Ambient */) && !(ts.isModuleBlock(n.parent) && ts.isModuleDeclaration(n.parent.parent) && ts.isGlobalScopeAugmentation(n.parent.parent))) {
                     // It is nested in an ambient context, which means it is automatically exported
@@ -75650,14 +77066,14 @@
                             // Both are literal property names that are the same.
                             ts.isPropertyNameLiteral(node.name) && ts.isPropertyNameLiteral(subsequentName) &&
                                 ts.getEscapedTextOfIdentifierOrLiteral(node.name) === ts.getEscapedTextOfIdentifierOrLiteral(subsequentName))) {
-                            var reportError = (node.kind === 166 /* MethodDeclaration */ || node.kind === 165 /* MethodSignature */) &&
-                                ts.hasSyntacticModifier(node, 32 /* Static */) !== ts.hasSyntacticModifier(subsequentNode, 32 /* Static */);
+                            var reportError = (node.kind === 167 /* MethodDeclaration */ || node.kind === 166 /* MethodSignature */) &&
+                                ts.isStatic(node) !== ts.isStatic(subsequentNode);
                             // we can get here in two cases
                             // 1. mixed static and instance class members
                             // 2. something with the same name was defined before the set of overloads that prevents them from merging
                             // here we'll report error only for the first case since for second we should already report error in binder
                             if (reportError) {
-                                var diagnostic = ts.hasSyntacticModifier(node, 32 /* Static */) ? ts.Diagnostics.Function_overload_must_be_static : ts.Diagnostics.Function_overload_must_not_be_static;
+                                var diagnostic = ts.isStatic(node) ? ts.Diagnostics.Function_overload_must_be_static : ts.Diagnostics.Function_overload_must_not_be_static;
                                 error(errorNode_1, diagnostic);
                             }
                             return;
@@ -75692,7 +77108,7 @@
                     var current = declarations_4[_i];
                     var node = current;
                     var inAmbientContext = node.flags & 8388608 /* Ambient */;
-                    var inAmbientContextOrInterface = node.parent && (node.parent.kind === 254 /* InterfaceDeclaration */ || node.parent.kind === 178 /* TypeLiteral */) || inAmbientContext;
+                    var inAmbientContextOrInterface = node.parent && (node.parent.kind === 256 /* InterfaceDeclaration */ || node.parent.kind === 180 /* TypeLiteral */) || inAmbientContext;
                     if (inAmbientContextOrInterface) {
                         // check if declarations are consecutive only if they are non-ambient
                         // 1. ambient declarations can be interleaved
@@ -75703,10 +77119,10 @@
                         // 2. mixing ambient and non-ambient declarations is a separate error that will be reported - do not want to report an extra one
                         previousDeclaration = undefined;
                     }
-                    if ((node.kind === 253 /* ClassDeclaration */ || node.kind === 222 /* ClassExpression */) && !inAmbientContext) {
+                    if ((node.kind === 255 /* ClassDeclaration */ || node.kind === 224 /* ClassExpression */) && !inAmbientContext) {
                         hasNonAmbientClass = true;
                     }
-                    if (node.kind === 252 /* FunctionDeclaration */ || node.kind === 166 /* MethodDeclaration */ || node.kind === 165 /* MethodSignature */ || node.kind === 167 /* Constructor */) {
+                    if (node.kind === 254 /* FunctionDeclaration */ || node.kind === 167 /* MethodDeclaration */ || node.kind === 166 /* MethodSignature */ || node.kind === 169 /* Constructor */) {
                         functionDeclarations.push(node);
                         var currentNodeFlags = getEffectiveDeclarationFlags(node, flagsToCheck);
                         someNodeFlags |= currentNodeFlags;
@@ -75750,13 +77166,18 @@
                     error(ts.getNameOfDeclaration(declaration) || declaration, ts.Diagnostics.Duplicate_function_implementation);
                 });
             }
-            if (hasNonAmbientClass && !isConstructor && symbol.flags & 16 /* Function */) {
-                // A non-ambient class cannot be an implementation for a non-constructor function/class merge
-                // TODO: The below just replicates our older error from when classes and functions were
-                // entirely unable to merge - a more helpful message like "Class declaration cannot implement overload list"
-                // might be warranted. :shrug:
+            if (hasNonAmbientClass && !isConstructor && symbol.flags & 16 /* Function */ && declarations) {
+                var relatedDiagnostics_1 = ts.filter(declarations, function (d) { return d.kind === 255 /* ClassDeclaration */; })
+                    .map(function (d) { return ts.createDiagnosticForNode(d, ts.Diagnostics.Consider_adding_a_declare_modifier_to_this_class); });
                 ts.forEach(declarations, function (declaration) {
-                    addDuplicateDeclarationError(declaration, ts.Diagnostics.Duplicate_identifier_0, ts.symbolName(symbol), declarations);
+                    var diagnostic = declaration.kind === 255 /* ClassDeclaration */
+                        ? ts.Diagnostics.Class_declaration_cannot_implement_overload_list_for_0
+                        : declaration.kind === 254 /* FunctionDeclaration */
+                            ? ts.Diagnostics.Function_with_bodies_can_only_merge_with_classes_that_are_ambient
+                            : undefined;
+                    if (diagnostic) {
+                        ts.addRelatedInfo.apply(void 0, __spreadArray([error(ts.getNameOfDeclaration(declaration) || declaration, diagnostic, ts.symbolName(symbol))], relatedDiagnostics_1, false));
+                    }
                 });
             }
             // Abstract methods can't have an implementation -- in particular, they don't need one.
@@ -75842,26 +77263,26 @@
             function getDeclarationSpaces(decl) {
                 var d = decl;
                 switch (d.kind) {
-                    case 254 /* InterfaceDeclaration */:
-                    case 255 /* TypeAliasDeclaration */:
+                    case 256 /* InterfaceDeclaration */:
+                    case 257 /* TypeAliasDeclaration */:
                     // A jsdoc typedef and callback are, by definition, type aliases.
                     // falls through
-                    case 335 /* JSDocTypedefTag */:
-                    case 328 /* JSDocCallbackTag */:
-                    case 329 /* JSDocEnumTag */:
+                    case 340 /* JSDocTypedefTag */:
+                    case 333 /* JSDocCallbackTag */:
+                    case 334 /* JSDocEnumTag */:
                         return 2 /* ExportType */;
-                    case 257 /* ModuleDeclaration */:
+                    case 259 /* ModuleDeclaration */:
                         return ts.isAmbientModule(d) || ts.getModuleInstanceState(d) !== 0 /* NonInstantiated */
                             ? 4 /* ExportNamespace */ | 1 /* ExportValue */
                             : 4 /* ExportNamespace */;
-                    case 253 /* ClassDeclaration */:
-                    case 256 /* EnumDeclaration */:
-                    case 292 /* EnumMember */:
+                    case 255 /* ClassDeclaration */:
+                    case 258 /* EnumDeclaration */:
+                    case 294 /* EnumMember */:
                         return 2 /* ExportType */ | 1 /* ExportValue */;
-                    case 298 /* SourceFile */:
+                    case 300 /* SourceFile */:
                         return 2 /* ExportType */ | 1 /* ExportValue */ | 4 /* ExportNamespace */;
-                    case 267 /* ExportAssignment */:
-                    case 217 /* BinaryExpression */:
+                    case 269 /* ExportAssignment */:
+                    case 219 /* BinaryExpression */:
                         var node_2 = d;
                         var expression = ts.isExportAssignment(node_2) ? node_2.expression : node_2.right;
                         // Export assigned entity name expressions act as aliases and should fall through, otherwise they export values
@@ -75871,18 +77292,18 @@
                         d = expression;
                     // The below options all declare an Alias, which is allowed to merge with other values within the importing module.
                     // falls through
-                    case 261 /* ImportEqualsDeclaration */:
-                    case 264 /* NamespaceImport */:
-                    case 263 /* ImportClause */:
-                        var result_13 = 0 /* None */;
+                    case 263 /* ImportEqualsDeclaration */:
+                    case 266 /* NamespaceImport */:
+                    case 265 /* ImportClause */:
+                        var result_12 = 0 /* None */;
                         var target = resolveAlias(getSymbolOfNode(d));
-                        ts.forEach(target.declarations, function (d) { result_13 |= getDeclarationSpaces(d); });
-                        return result_13;
-                    case 250 /* VariableDeclaration */:
-                    case 199 /* BindingElement */:
-                    case 252 /* FunctionDeclaration */:
-                    case 266 /* ImportSpecifier */: // https://github.com/Microsoft/TypeScript/pull/7591
-                    case 78 /* Identifier */: // https://github.com/microsoft/TypeScript/issues/36098
+                        ts.forEach(target.declarations, function (d) { result_12 |= getDeclarationSpaces(d); });
+                        return result_12;
+                    case 252 /* VariableDeclaration */:
+                    case 201 /* BindingElement */:
+                    case 254 /* FunctionDeclaration */:
+                    case 268 /* ImportSpecifier */: // https://github.com/Microsoft/TypeScript/pull/7591
+                    case 79 /* Identifier */: // https://github.com/microsoft/TypeScript/issues/36098
                         // Identifiers are used as declarations of assignment declarations whose parents may be
                         // SyntaxKind.CallExpression - `Object.defineProperty(thing, "aField", {value: 42});`
                         // SyntaxKind.ElementAccessExpression - `thing["aField"] = 42;` or `thing["aField"];` (with a doc comment on it)
@@ -76134,7 +77555,7 @@
                 var promiseConstructorSymbol = resolveEntityName(promiseConstructorName, 111551 /* Value */, /*ignoreErrors*/ true);
                 var promiseConstructorType = promiseConstructorSymbol ? getTypeOfSymbol(promiseConstructorSymbol) : errorType;
                 if (promiseConstructorType === errorType) {
-                    if (promiseConstructorName.kind === 78 /* Identifier */ && promiseConstructorName.escapedText === "Promise" && getTargetType(returnType) === getGlobalPromiseType(/*reportErrors*/ false)) {
+                    if (promiseConstructorName.kind === 79 /* Identifier */ && promiseConstructorName.escapedText === "Promise" && getTargetType(returnType) === getGlobalPromiseType(/*reportErrors*/ false)) {
                         error(returnTypeNode, ts.Diagnostics.An_async_function_or_method_in_ES5_SlashES3_requires_the_Promise_constructor_Make_sure_you_have_a_declaration_for_the_Promise_constructor_or_include_ES2015_in_your_lib_option);
                     }
                     else {
@@ -76174,24 +77595,24 @@
             var headMessage = getDiagnosticHeadMessageForDecoratorResolution(node);
             var errorInfo;
             switch (node.parent.kind) {
-                case 253 /* ClassDeclaration */:
+                case 255 /* ClassDeclaration */:
                     var classSymbol = getSymbolOfNode(node.parent);
                     var classConstructorType = getTypeOfSymbol(classSymbol);
                     expectedReturnType = getUnionType([classConstructorType, voidType]);
                     break;
-                case 161 /* Parameter */:
+                case 162 /* Parameter */:
                     expectedReturnType = voidType;
                     errorInfo = ts.chainDiagnosticMessages(
                     /*details*/ undefined, ts.Diagnostics.The_return_type_of_a_parameter_decorator_function_must_be_either_void_or_any);
                     break;
-                case 164 /* PropertyDeclaration */:
+                case 165 /* PropertyDeclaration */:
                     expectedReturnType = voidType;
                     errorInfo = ts.chainDiagnosticMessages(
                     /*details*/ undefined, ts.Diagnostics.The_return_type_of_a_property_decorator_function_must_be_either_void_or_any);
                     break;
-                case 166 /* MethodDeclaration */:
-                case 168 /* GetAccessor */:
-                case 169 /* SetAccessor */:
+                case 167 /* MethodDeclaration */:
+                case 170 /* GetAccessor */:
+                case 171 /* SetAccessor */:
                     var methodType = getTypeOfNode(node.parent);
                     var descriptorType = createTypedPropertyDescriptorType(methodType);
                     expectedReturnType = getUnionType([descriptorType, voidType]);
@@ -76212,8 +77633,8 @@
             if (!typeName)
                 return;
             var rootName = ts.getFirstIdentifier(typeName);
-            var meaning = (typeName.kind === 78 /* Identifier */ ? 788968 /* Type */ : 1920 /* Namespace */) | 2097152 /* Alias */;
-            var rootSymbol = resolveName(rootName, rootName.escapedText, meaning, /*nameNotFoundMessage*/ undefined, /*nameArg*/ undefined, /*isRefernce*/ true);
+            var meaning = (typeName.kind === 79 /* Identifier */ ? 788968 /* Type */ : 1920 /* Namespace */) | 2097152 /* Alias */;
+            var rootSymbol = resolveName(rootName, rootName.escapedText, meaning, /*nameNotFoundMessage*/ undefined, /*nameArg*/ undefined, /*isReference*/ true);
             if (rootSymbol
                 && rootSymbol.flags & 2097152 /* Alias */
                 && symbolIsValue(rootSymbol)
@@ -76238,30 +77659,30 @@
         function getEntityNameForDecoratorMetadata(node) {
             if (node) {
                 switch (node.kind) {
-                    case 184 /* IntersectionType */:
-                    case 183 /* UnionType */:
+                    case 186 /* IntersectionType */:
+                    case 185 /* UnionType */:
                         return getEntityNameForDecoratorMetadataFromTypeList(node.types);
-                    case 185 /* ConditionalType */:
+                    case 187 /* ConditionalType */:
                         return getEntityNameForDecoratorMetadataFromTypeList([node.trueType, node.falseType]);
-                    case 187 /* ParenthesizedType */:
-                    case 193 /* NamedTupleMember */:
+                    case 189 /* ParenthesizedType */:
+                    case 195 /* NamedTupleMember */:
                         return getEntityNameForDecoratorMetadata(node.type);
-                    case 174 /* TypeReference */:
+                    case 176 /* TypeReference */:
                         return node.typeName;
                 }
             }
         }
         function getEntityNameForDecoratorMetadataFromTypeList(types) {
             var commonEntityName;
-            for (var _i = 0, types_23 = types; _i < types_23.length; _i++) {
-                var typeNode = types_23[_i];
-                while (typeNode.kind === 187 /* ParenthesizedType */ || typeNode.kind === 193 /* NamedTupleMember */) {
+            for (var _i = 0, types_22 = types; _i < types_22.length; _i++) {
+                var typeNode = types_22[_i];
+                while (typeNode.kind === 189 /* ParenthesizedType */ || typeNode.kind === 195 /* NamedTupleMember */) {
                     typeNode = typeNode.type; // Skip parens if need be
                 }
-                if (typeNode.kind === 141 /* NeverKeyword */) {
+                if (typeNode.kind === 142 /* NeverKeyword */) {
                     continue; // Always elide `never` from the union/intersection if possible
                 }
-                if (!strictNullChecks && (typeNode.kind === 192 /* LiteralType */ && typeNode.literal.kind === 103 /* NullKeyword */ || typeNode.kind === 150 /* UndefinedKeyword */)) {
+                if (!strictNullChecks && (typeNode.kind === 194 /* LiteralType */ && typeNode.literal.kind === 104 /* NullKeyword */ || typeNode.kind === 151 /* UndefinedKeyword */)) {
                     continue; // Elide null and undefined from unions for metadata, just like what we did prior to the implementation of strict null checks
                 }
                 var individualEntityName = getEntityNameForDecoratorMetadata(typeNode);
@@ -76307,14 +77728,14 @@
             }
             var firstDecorator = node.decorators[0];
             checkExternalEmitHelpers(firstDecorator, 8 /* Decorate */);
-            if (node.kind === 161 /* Parameter */) {
+            if (node.kind === 162 /* Parameter */) {
                 checkExternalEmitHelpers(firstDecorator, 32 /* Param */);
             }
             if (compilerOptions.emitDecoratorMetadata) {
                 checkExternalEmitHelpers(firstDecorator, 16 /* Metadata */);
                 // we only need to perform these checks if we are emitting serialized type metadata for the target of a decorator.
                 switch (node.kind) {
-                    case 253 /* ClassDeclaration */:
+                    case 255 /* ClassDeclaration */:
                         var constructor = ts.getFirstConstructorWithBody(node);
                         if (constructor) {
                             for (var _i = 0, _a = constructor.parameters; _i < _a.length; _i++) {
@@ -76323,23 +77744,23 @@
                             }
                         }
                         break;
-                    case 168 /* GetAccessor */:
-                    case 169 /* SetAccessor */:
-                        var otherKind = node.kind === 168 /* GetAccessor */ ? 169 /* SetAccessor */ : 168 /* GetAccessor */;
+                    case 170 /* GetAccessor */:
+                    case 171 /* SetAccessor */:
+                        var otherKind = node.kind === 170 /* GetAccessor */ ? 171 /* SetAccessor */ : 170 /* GetAccessor */;
                         var otherAccessor = ts.getDeclarationOfKind(getSymbolOfNode(node), otherKind);
                         markDecoratorMedataDataTypeNodeAsReferenced(getAnnotatedAccessorTypeNode(node) || otherAccessor && getAnnotatedAccessorTypeNode(otherAccessor));
                         break;
-                    case 166 /* MethodDeclaration */:
+                    case 167 /* MethodDeclaration */:
                         for (var _b = 0, _c = node.parameters; _b < _c.length; _b++) {
                             var parameter = _c[_b];
                             markDecoratorMedataDataTypeNodeAsReferenced(getParameterTypeNodeForDecoratorCheck(parameter));
                         }
                         markDecoratorMedataDataTypeNodeAsReferenced(ts.getEffectiveReturnTypeNode(node));
                         break;
-                    case 164 /* PropertyDeclaration */:
+                    case 165 /* PropertyDeclaration */:
                         markDecoratorMedataDataTypeNodeAsReferenced(ts.getEffectiveTypeAnnotationNode(node));
                         break;
-                    case 161 /* Parameter */:
+                    case 162 /* Parameter */:
                         markDecoratorMedataDataTypeNodeAsReferenced(getParameterTypeNodeForDecoratorCheck(node));
                         var containingSignature = node.parent;
                         for (var _d = 0, _e = containingSignature.parameters; _d < _e.length; _d++) {
@@ -76355,8 +77776,7 @@
             if (produceDiagnostics) {
                 checkFunctionOrMethodDeclaration(node);
                 checkGrammarForGenerator(node);
-                checkCollisionWithRequireExportsInGeneratedCode(node, node.name);
-                checkCollisionWithGlobalPromiseInGeneratedCode(node, node.name);
+                checkCollisionsForDeclarationName(node, node.name);
             }
         }
         function checkJSDocTypeAliasTag(node) {
@@ -76402,7 +77822,7 @@
                     else if (ts.findLast(ts.getJSDocTags(decl), ts.isJSDocParameterTag) === node &&
                         node.typeExpression && node.typeExpression.type &&
                         !isArrayType(getTypeFromTypeNode(node.typeExpression.type))) {
-                        error(node.name, ts.Diagnostics.JSDoc_param_tag_has_name_0_but_there_is_no_parameter_with_that_name_It_would_match_arguments_if_it_had_an_array_type, ts.idText(node.name.kind === 158 /* QualifiedName */ ? node.name.right : node.name));
+                        error(node.name, ts.Diagnostics.JSDoc_param_tag_has_name_0_but_there_is_no_parameter_with_that_name_It_would_match_arguments_if_it_had_an_array_type, ts.idText(node.name.kind === 159 /* QualifiedName */ ? node.name.right : node.name));
                     }
                 }
             }
@@ -76444,9 +77864,9 @@
         }
         function getIdentifierFromEntityNameExpression(node) {
             switch (node.kind) {
-                case 78 /* Identifier */:
+                case 79 /* Identifier */:
                     return node;
-                case 202 /* PropertyAccessExpression */:
+                case 204 /* PropertyAccessExpression */:
                     return node.name;
                 default:
                     return undefined;
@@ -76460,7 +77880,7 @@
             // Do not use hasDynamicName here, because that returns false for well known symbols.
             // We want to perform checkComputedPropertyName for all computed properties, including
             // well known symbols.
-            if (node.name && node.name.kind === 159 /* ComputedPropertyName */) {
+            if (node.name && node.name.kind === 160 /* ComputedPropertyName */) {
                 // This check will account for methods in class/interface declarations,
                 // as well as accessors in classes/object literals
                 checkComputedPropertyName(node.name);
@@ -76486,7 +77906,7 @@
                     checkFunctionOrConstructorSymbol(symbol);
                 }
             }
-            var body = node.kind === 165 /* MethodSignature */ ? undefined : node.body;
+            var body = node.kind === 166 /* MethodSignature */ ? undefined : node.body;
             checkSourceElement(body);
             checkAllCodePathsInNonVoidFunctionReturnOrThrow(node, getReturnTypeFromAnnotation(node));
             if (produceDiagnostics && !ts.getEffectiveReturnTypeNode(node)) {
@@ -76528,42 +77948,42 @@
             for (var _i = 0, potentiallyUnusedIdentifiers_1 = potentiallyUnusedIdentifiers; _i < potentiallyUnusedIdentifiers_1.length; _i++) {
                 var node = potentiallyUnusedIdentifiers_1[_i];
                 switch (node.kind) {
-                    case 253 /* ClassDeclaration */:
-                    case 222 /* ClassExpression */:
+                    case 255 /* ClassDeclaration */:
+                    case 224 /* ClassExpression */:
                         checkUnusedClassMembers(node, addDiagnostic);
                         checkUnusedTypeParameters(node, addDiagnostic);
                         break;
-                    case 298 /* SourceFile */:
-                    case 257 /* ModuleDeclaration */:
-                    case 231 /* Block */:
-                    case 259 /* CaseBlock */:
-                    case 238 /* ForStatement */:
-                    case 239 /* ForInStatement */:
-                    case 240 /* ForOfStatement */:
+                    case 300 /* SourceFile */:
+                    case 259 /* ModuleDeclaration */:
+                    case 233 /* Block */:
+                    case 261 /* CaseBlock */:
+                    case 240 /* ForStatement */:
+                    case 241 /* ForInStatement */:
+                    case 242 /* ForOfStatement */:
                         checkUnusedLocalsAndParameters(node, addDiagnostic);
                         break;
-                    case 167 /* Constructor */:
-                    case 209 /* FunctionExpression */:
-                    case 252 /* FunctionDeclaration */:
-                    case 210 /* ArrowFunction */:
-                    case 166 /* MethodDeclaration */:
-                    case 168 /* GetAccessor */:
-                    case 169 /* SetAccessor */:
+                    case 169 /* Constructor */:
+                    case 211 /* FunctionExpression */:
+                    case 254 /* FunctionDeclaration */:
+                    case 212 /* ArrowFunction */:
+                    case 167 /* MethodDeclaration */:
+                    case 170 /* GetAccessor */:
+                    case 171 /* SetAccessor */:
                         if (node.body) { // Don't report unused parameters in overloads
                             checkUnusedLocalsAndParameters(node, addDiagnostic);
                         }
                         checkUnusedTypeParameters(node, addDiagnostic);
                         break;
-                    case 165 /* MethodSignature */:
-                    case 170 /* CallSignature */:
-                    case 171 /* ConstructSignature */:
-                    case 175 /* FunctionType */:
-                    case 176 /* ConstructorType */:
-                    case 255 /* TypeAliasDeclaration */:
-                    case 254 /* InterfaceDeclaration */:
+                    case 166 /* MethodSignature */:
+                    case 172 /* CallSignature */:
+                    case 173 /* ConstructSignature */:
+                    case 177 /* FunctionType */:
+                    case 178 /* ConstructorType */:
+                    case 257 /* TypeAliasDeclaration */:
+                    case 256 /* InterfaceDeclaration */:
                         checkUnusedTypeParameters(node, addDiagnostic);
                         break;
-                    case 186 /* InferType */:
+                    case 188 /* InferType */:
                         checkUnusedInferTypeParameter(node, addDiagnostic);
                         break;
                     default:
@@ -76583,11 +78003,11 @@
             for (var _i = 0, _a = node.members; _i < _a.length; _i++) {
                 var member = _a[_i];
                 switch (member.kind) {
-                    case 166 /* MethodDeclaration */:
-                    case 164 /* PropertyDeclaration */:
-                    case 168 /* GetAccessor */:
-                    case 169 /* SetAccessor */:
-                        if (member.kind === 169 /* SetAccessor */ && member.symbol.flags & 32768 /* GetAccessor */) {
+                    case 167 /* MethodDeclaration */:
+                    case 165 /* PropertyDeclaration */:
+                    case 170 /* GetAccessor */:
+                    case 171 /* SetAccessor */:
+                        if (member.kind === 171 /* SetAccessor */ && member.symbol.flags & 32768 /* GetAccessor */) {
                             // Already would have reported an error on the getter.
                             break;
                         }
@@ -76598,7 +78018,7 @@
                             addDiagnostic(member, 0 /* Local */, ts.createDiagnosticForNode(member.name, ts.Diagnostics._0_is_declared_but_its_value_is_never_read, symbolToString(symbol)));
                         }
                         break;
-                    case 167 /* Constructor */:
+                    case 169 /* Constructor */:
                         for (var _b = 0, _c = member.parameters; _b < _c.length; _b++) {
                             var parameter = _c[_b];
                             if (!parameter.symbol.isReferenced && ts.hasSyntacticModifier(parameter, 8 /* Private */)) {
@@ -76606,12 +78026,13 @@
                             }
                         }
                         break;
-                    case 172 /* IndexSignature */:
-                    case 230 /* SemicolonClassElement */:
+                    case 174 /* IndexSignature */:
+                    case 232 /* SemicolonClassElement */:
+                    case 168 /* ClassStaticBlockDeclaration */:
                         // Can't be private
                         break;
                     default:
-                        ts.Debug.fail();
+                        ts.Debug.fail("Unexpected class member");
                 }
             }
         }
@@ -76635,7 +78056,7 @@
                     continue;
                 var name = ts.idText(typeParameter.name);
                 var parent = typeParameter.parent;
-                if (parent.kind !== 186 /* InferType */ && parent.typeParameters.every(isTypeParameterUnused)) {
+                if (parent.kind !== 188 /* InferType */ && parent.typeParameters.every(isTypeParameterUnused)) {
                     if (ts.tryAddToSet(seenParentsWithEveryUnused, parent)) {
                         var sourceFile = ts.getSourceFileOfNode(parent);
                         var range = ts.isJSDocTemplateTag(parent)
@@ -76644,12 +78065,14 @@
                             // Include the `<>` in the error message
                             : ts.rangeOfTypeParameters(sourceFile, parent.typeParameters);
                         var only = parent.typeParameters.length === 1;
+                        //TODO: following line is possible reason for bug #41974, unusedTypeParameters_TemplateTag
                         var message = only ? ts.Diagnostics._0_is_declared_but_its_value_is_never_read : ts.Diagnostics.All_type_parameters_are_unused;
                         var arg0 = only ? name : undefined;
                         addDiagnostic(typeParameter, 1 /* Parameter */, ts.createFileDiagnostic(sourceFile, range.pos, range.end - range.pos, message, arg0));
                     }
                 }
                 else {
+                    //TODO: following line is possible reason for bug #41974, unusedTypeParameters_TemplateTag
                     addDiagnostic(typeParameter, 1 /* Parameter */, ts.createDiagnosticForNode(typeParameter, ts.Diagnostics._0_is_declared_but_its_value_is_never_read, name));
                 }
             }
@@ -76739,7 +78162,7 @@
                 var importDecl = importClause.parent;
                 var nDeclarations = (importClause.name ? 1 : 0) +
                     (importClause.namedBindings ?
-                        (importClause.namedBindings.kind === 264 /* NamespaceImport */ ? 1 : importClause.namedBindings.elements.length)
+                        (importClause.namedBindings.kind === 266 /* NamespaceImport */ ? 1 : importClause.namedBindings.elements.length)
                         : 0);
                 if (nDeclarations === unuseds.length) {
                     addDiagnostic(importDecl, 0 /* Local */, unuseds.length === 1
@@ -76757,7 +78180,7 @@
                 var bindingPattern = _a[0], bindingElements = _a[1];
                 var kind = tryGetRootParameterDeclaration(bindingPattern.parent) ? 1 /* Parameter */ : 0 /* Local */;
                 if (bindingPattern.elements.length === bindingElements.length) {
-                    if (bindingElements.length === 1 && bindingPattern.parent.kind === 250 /* VariableDeclaration */ && bindingPattern.parent.parent.kind === 251 /* VariableDeclarationList */) {
+                    if (bindingElements.length === 1 && bindingPattern.parent.kind === 252 /* VariableDeclaration */ && bindingPattern.parent.parent.kind === 253 /* VariableDeclarationList */) {
                         addToGroup(unusedVariables, bindingPattern.parent.parent, bindingPattern.parent, getNodeId);
                     }
                     else {
@@ -76778,7 +78201,7 @@
                 if (declarationList.declarations.length === declarations.length) {
                     addDiagnostic(declarationList, 0 /* Local */, declarations.length === 1
                         ? ts.createDiagnosticForNode(ts.first(declarations).name, ts.Diagnostics._0_is_declared_but_its_value_is_never_read, bindingNameText(ts.first(declarations).name))
-                        : ts.createDiagnosticForNode(declarationList.parent.kind === 233 /* VariableStatement */ ? declarationList.parent : declarationList, ts.Diagnostics.All_variables_are_unused));
+                        : ts.createDiagnosticForNode(declarationList.parent.kind === 235 /* VariableStatement */ ? declarationList.parent : declarationList, ts.Diagnostics.All_variables_are_unused));
                 }
                 else {
                     for (var _i = 0, declarations_5 = declarations; _i < declarations_5.length; _i++) {
@@ -76790,24 +78213,24 @@
         }
         function bindingNameText(name) {
             switch (name.kind) {
-                case 78 /* Identifier */:
+                case 79 /* Identifier */:
                     return ts.idText(name);
-                case 198 /* ArrayBindingPattern */:
-                case 197 /* ObjectBindingPattern */:
+                case 200 /* ArrayBindingPattern */:
+                case 199 /* ObjectBindingPattern */:
                     return bindingNameText(ts.cast(ts.first(name.elements), ts.isBindingElement).name);
                 default:
                     return ts.Debug.assertNever(name);
             }
         }
         function isImportedDeclaration(node) {
-            return node.kind === 263 /* ImportClause */ || node.kind === 266 /* ImportSpecifier */ || node.kind === 264 /* NamespaceImport */;
+            return node.kind === 265 /* ImportClause */ || node.kind === 268 /* ImportSpecifier */ || node.kind === 266 /* NamespaceImport */;
         }
         function importClauseFromImported(decl) {
-            return decl.kind === 263 /* ImportClause */ ? decl : decl.kind === 264 /* NamespaceImport */ ? decl.parent : decl.parent.parent;
+            return decl.kind === 265 /* ImportClause */ ? decl : decl.kind === 266 /* NamespaceImport */ ? decl.parent : decl.parent.parent;
         }
         function checkBlock(node) {
             // Grammar checking for SyntaxKind.Block
-            if (node.kind === 231 /* Block */) {
+            if (node.kind === 233 /* Block */) {
                 checkGrammarStatementInAmbientContext(node);
             }
             if (ts.isFunctionOrModuleBlock(node)) {
@@ -76833,25 +78256,37 @@
                 }
             });
         }
+        /**
+         * Checks whether an {@link Identifier}, in the context of another {@link Node}, would collide with a runtime value
+         * of {@link name} in an outer scope. This is used to check for collisions for downlevel transformations that
+         * require names like `Object`, `Promise`, `Reflect`, `require`, `exports`, etc.
+         */
         function needCollisionCheckForIdentifier(node, identifier, name) {
-            if (!(identifier && identifier.escapedText === name)) {
+            if ((identifier === null || identifier === void 0 ? void 0 : identifier.escapedText) !== name) {
                 return false;
             }
-            if (node.kind === 164 /* PropertyDeclaration */ ||
-                node.kind === 163 /* PropertySignature */ ||
-                node.kind === 166 /* MethodDeclaration */ ||
-                node.kind === 165 /* MethodSignature */ ||
-                node.kind === 168 /* GetAccessor */ ||
-                node.kind === 169 /* SetAccessor */) {
-                // it is ok to have member named '_super' or '_this' - member access is always qualified
+            if (node.kind === 165 /* PropertyDeclaration */ ||
+                node.kind === 164 /* PropertySignature */ ||
+                node.kind === 167 /* MethodDeclaration */ ||
+                node.kind === 166 /* MethodSignature */ ||
+                node.kind === 170 /* GetAccessor */ ||
+                node.kind === 171 /* SetAccessor */ ||
+                node.kind === 291 /* PropertyAssignment */) {
+                // it is ok to have member named '_super', '_this', `Promise`, etc. - member access is always qualified
                 return false;
             }
             if (node.flags & 8388608 /* Ambient */) {
                 // ambient context - no codegen impact
                 return false;
             }
+            if (ts.isImportClause(node) || ts.isImportEqualsDeclaration(node) || ts.isImportSpecifier(node)) {
+                // type-only imports do not require collision checks against runtime values.
+                if (ts.isTypeOnlyImportOrExportDeclaration(node)) {
+                    return false;
+                }
+            }
             var root = ts.getRootDeclaration(node);
-            if (root.kind === 161 /* Parameter */ && ts.nodeIsMissing(root.parent.body)) {
+            if (ts.isParameter(root) && ts.nodeIsMissing(root.parent.body)) {
                 // just an overload - no codegen impact
                 return false;
             }
@@ -76861,7 +78296,7 @@
         function checkIfThisIsCapturedInEnclosingScope(node) {
             ts.findAncestor(node, function (current) {
                 if (getNodeCheckFlags(current) & 4 /* CaptureThis */) {
-                    var isDeclaration_1 = node.kind !== 78 /* Identifier */;
+                    var isDeclaration_1 = node.kind !== 79 /* Identifier */;
                     if (isDeclaration_1) {
                         error(ts.getNameOfDeclaration(node), ts.Diagnostics.Duplicate_identifier_this_Compiler_uses_variable_declaration_this_to_capture_this_reference);
                     }
@@ -76876,7 +78311,7 @@
         function checkIfNewTargetIsCapturedInEnclosingScope(node) {
             ts.findAncestor(node, function (current) {
                 if (getNodeCheckFlags(current) & 8 /* CaptureNewTarget */) {
-                    var isDeclaration_2 = node.kind !== 78 /* Identifier */;
+                    var isDeclaration_2 = node.kind !== 79 /* Identifier */;
                     if (isDeclaration_2) {
                         error(ts.getNameOfDeclaration(node), ts.Diagnostics.Duplicate_identifier_newTarget_Compiler_uses_variable_declaration_newTarget_to_capture_new_target_meta_property_reference);
                     }
@@ -76888,6 +78323,46 @@
                 return false;
             });
         }
+        function checkCollisionWithRequireExportsInGeneratedCode(node, name) {
+            // No need to check for require or exports for ES6 modules and later
+            if (moduleKind >= ts.ModuleKind.ES2015) {
+                return;
+            }
+            if (!name || !needCollisionCheckForIdentifier(node, name, "require") && !needCollisionCheckForIdentifier(node, name, "exports")) {
+                return;
+            }
+            // Uninstantiated modules shouldnt do this check
+            if (ts.isModuleDeclaration(node) && ts.getModuleInstanceState(node) !== 1 /* Instantiated */) {
+                return;
+            }
+            // In case of variable declaration, node.parent is variable statement so look at the variable statement's parent
+            var parent = getDeclarationContainer(node);
+            if (parent.kind === 300 /* SourceFile */ && ts.isExternalOrCommonJsModule(parent)) {
+                // If the declaration happens to be in external module, report error that require and exports are reserved keywords
+                errorSkippedOn("noEmit", name, ts.Diagnostics.Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module, ts.declarationNameToString(name), ts.declarationNameToString(name));
+            }
+        }
+        function checkCollisionWithGlobalPromiseInGeneratedCode(node, name) {
+            if (!name || languageVersion >= 4 /* ES2017 */ || !needCollisionCheckForIdentifier(node, name, "Promise")) {
+                return;
+            }
+            // Uninstantiated modules shouldnt do this check
+            if (ts.isModuleDeclaration(node) && ts.getModuleInstanceState(node) !== 1 /* Instantiated */) {
+                return;
+            }
+            // In case of variable declaration, node.parent is variable statement so look at the variable statement's parent
+            var parent = getDeclarationContainer(node);
+            if (parent.kind === 300 /* SourceFile */ && ts.isExternalOrCommonJsModule(parent) && parent.flags & 2048 /* HasAsyncFunctions */) {
+                // If the declaration happens to be in external module, report error that Promise is a reserved identifier.
+                errorSkippedOn("noEmit", name, ts.Diagnostics.Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module_containing_async_functions, ts.declarationNameToString(name), ts.declarationNameToString(name));
+            }
+        }
+        function recordPotentialCollisionWithWeakMapSetInGeneratedCode(node, name) {
+            if (languageVersion <= 8 /* ES2021 */
+                && (needCollisionCheckForIdentifier(node, name, "WeakMap") || needCollisionCheckForIdentifier(node, name, "WeakSet"))) {
+                potentialWeakMapSetCollisions.push(node);
+            }
+        }
         function checkWeakMapSetCollision(node) {
             var enclosingBlockScope = ts.getEnclosingBlockScopeContainer(node);
             if (getNodeCheckFlags(enclosingBlockScope) & 67108864 /* ContainsClassWithPrivateIdentifiers */) {
@@ -76895,38 +78370,56 @@
                 errorSkippedOn("noEmit", node, ts.Diagnostics.Compiler_reserves_name_0_when_emitting_private_identifier_downlevel, node.name.escapedText);
             }
         }
-        function checkCollisionWithRequireExportsInGeneratedCode(node, name) {
-            // No need to check for require or exports for ES6 modules and later
-            if (moduleKind >= ts.ModuleKind.ES2015) {
-                return;
-            }
-            if (!needCollisionCheckForIdentifier(node, name, "require") && !needCollisionCheckForIdentifier(node, name, "exports")) {
-                return;
-            }
-            // Uninstantiated modules shouldnt do this check
-            if (ts.isModuleDeclaration(node) && ts.getModuleInstanceState(node) !== 1 /* Instantiated */) {
-                return;
-            }
-            // In case of variable declaration, node.parent is variable statement so look at the variable statement's parent
-            var parent = getDeclarationContainer(node);
-            if (parent.kind === 298 /* SourceFile */ && ts.isExternalOrCommonJsModule(parent)) {
-                // If the declaration happens to be in external module, report error that require and exports are reserved keywords
-                errorSkippedOn("noEmit", name, ts.Diagnostics.Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module, ts.declarationNameToString(name), ts.declarationNameToString(name));
+        function recordPotentialCollisionWithReflectInGeneratedCode(node, name) {
+            if (name && languageVersion >= 2 /* ES2015 */ && languageVersion <= 8 /* ES2021 */
+                && needCollisionCheckForIdentifier(node, name, "Reflect")) {
+                potentialReflectCollisions.push(node);
             }
         }
-        function checkCollisionWithGlobalPromiseInGeneratedCode(node, name) {
-            if (languageVersion >= 4 /* ES2017 */ || !needCollisionCheckForIdentifier(node, name, "Promise")) {
-                return;
+        function checkReflectCollision(node) {
+            var hasCollision = false;
+            if (ts.isClassExpression(node)) {
+                // ClassExpression names don't contribute to their containers, but do matter for any of their block-scoped members.
+                for (var _i = 0, _a = node.members; _i < _a.length; _i++) {
+                    var member = _a[_i];
+                    if (getNodeCheckFlags(member) & 134217728 /* ContainsSuperPropertyInStaticInitializer */) {
+                        hasCollision = true;
+                        break;
+                    }
+                }
             }
-            // Uninstantiated modules shouldnt do this check
-            if (ts.isModuleDeclaration(node) && ts.getModuleInstanceState(node) !== 1 /* Instantiated */) {
-                return;
+            else if (ts.isFunctionExpression(node)) {
+                // FunctionExpression names don't contribute to their containers, but do matter for their contents
+                if (getNodeCheckFlags(node) & 134217728 /* ContainsSuperPropertyInStaticInitializer */) {
+                    hasCollision = true;
+                }
             }
-            // In case of variable declaration, node.parent is variable statement so look at the variable statement's parent
-            var parent = getDeclarationContainer(node);
-            if (parent.kind === 298 /* SourceFile */ && ts.isExternalOrCommonJsModule(parent) && parent.flags & 2048 /* HasAsyncFunctions */) {
-                // If the declaration happens to be in external module, report error that Promise is a reserved identifier.
-                errorSkippedOn("noEmit", name, ts.Diagnostics.Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module_containing_async_functions, ts.declarationNameToString(name), ts.declarationNameToString(name));
+            else {
+                var container = ts.getEnclosingBlockScopeContainer(node);
+                if (container && getNodeCheckFlags(container) & 134217728 /* ContainsSuperPropertyInStaticInitializer */) {
+                    hasCollision = true;
+                }
+            }
+            if (hasCollision) {
+                ts.Debug.assert(ts.isNamedDeclaration(node) && ts.isIdentifier(node.name), "The target of a Reflect collision check should be an identifier");
+                errorSkippedOn("noEmit", node, ts.Diagnostics.Duplicate_identifier_0_Compiler_reserves_name_1_when_emitting_super_references_in_static_initializers, ts.declarationNameToString(node.name), "Reflect");
+            }
+        }
+        function checkCollisionsForDeclarationName(node, name) {
+            if (!name)
+                return;
+            checkCollisionWithRequireExportsInGeneratedCode(node, name);
+            checkCollisionWithGlobalPromiseInGeneratedCode(node, name);
+            recordPotentialCollisionWithWeakMapSetInGeneratedCode(node, name);
+            recordPotentialCollisionWithReflectInGeneratedCode(node, name);
+            if (ts.isClassLike(node)) {
+                checkTypeNameIsReserved(name, ts.Diagnostics.Class_name_cannot_be_0);
+                if (!(node.flags & 8388608 /* Ambient */)) {
+                    checkClassNameCollisionWithObject(name);
+                }
+            }
+            else if (ts.isEnumDeclaration(node)) {
+                checkTypeNameIsReserved(name, ts.Diagnostics.Enum_name_cannot_be_0);
             }
         }
         function checkVarDeclaredNamesNotShadowed(node) {
@@ -76959,7 +78452,7 @@
             // skip variable declarations that don't have initializers
             // NOTE: in ES6 spec initializer is required in variable declarations where name is binding pattern
             // so we'll always treat binding elements as initialized
-            if (node.kind === 250 /* VariableDeclaration */ && !node.initializer) {
+            if (node.kind === 252 /* VariableDeclaration */ && !node.initializer) {
                 return;
             }
             var symbol = getSymbolOfNode(node);
@@ -76971,17 +78464,17 @@
                     localDeclarationSymbol !== symbol &&
                     localDeclarationSymbol.flags & 2 /* BlockScopedVariable */) {
                     if (getDeclarationNodeFlagsFromSymbol(localDeclarationSymbol) & 3 /* BlockScoped */) {
-                        var varDeclList = ts.getAncestor(localDeclarationSymbol.valueDeclaration, 251 /* VariableDeclarationList */);
-                        var container = varDeclList.parent.kind === 233 /* VariableStatement */ && varDeclList.parent.parent
+                        var varDeclList = ts.getAncestor(localDeclarationSymbol.valueDeclaration, 253 /* VariableDeclarationList */);
+                        var container = varDeclList.parent.kind === 235 /* VariableStatement */ && varDeclList.parent.parent
                             ? varDeclList.parent.parent
                             : undefined;
                         // names of block-scoped and function scoped variables can collide only
                         // if block scoped variable is defined in the function\module\source file scope (because of variable hoisting)
                         var namesShareScope = container &&
-                            (container.kind === 231 /* Block */ && ts.isFunctionLike(container.parent) ||
-                                container.kind === 258 /* ModuleBlock */ ||
-                                container.kind === 257 /* ModuleDeclaration */ ||
-                                container.kind === 298 /* SourceFile */);
+                            (container.kind === 233 /* Block */ && ts.isFunctionLike(container.parent) ||
+                                container.kind === 260 /* ModuleBlock */ ||
+                                container.kind === 259 /* ModuleDeclaration */ ||
+                                container.kind === 300 /* SourceFile */);
                         // here we know that function scoped variable is shadowed by block scoped one
                         // if they are defined in the same scope - binder has already reported redeclaration error
                         // otherwise if variable has an initializer - show error that initialization will fail
@@ -77012,7 +78505,7 @@
             // Do not use hasDynamicName here, because that returns false for well known symbols.
             // We want to perform checkComputedPropertyName for all computed properties, including
             // well known symbols.
-            if (node.name.kind === 159 /* ComputedPropertyName */) {
+            if (node.name.kind === 160 /* ComputedPropertyName */) {
                 checkComputedPropertyName(node.name);
                 if (node.initializer) {
                     checkExpressionCached(node.initializer);
@@ -77023,7 +78516,7 @@
                     checkExternalEmitHelpers(node, 4 /* Rest */);
                 }
                 // check computed properties inside property names of binding elements
-                if (node.propertyName && node.propertyName.kind === 159 /* ComputedPropertyName */) {
+                if (node.propertyName && node.propertyName.kind === 160 /* ComputedPropertyName */) {
                     checkComputedPropertyName(node.propertyName);
                 }
                 // check private/protected variable access
@@ -77037,14 +78530,14 @@
                         var property = getPropertyOfType(parentType, nameText);
                         if (property) {
                             markPropertyAsReferenced(property, /*nodeForCheckWriteOnly*/ undefined, /*isSelfTypeAccess*/ false); // A destructuring is never a write-only reference.
-                            checkPropertyAccessibility(node, !!parent.initializer && parent.initializer.kind === 105 /* SuperKeyword */, /*writing*/ false, parentType, property);
+                            checkPropertyAccessibility(node, !!parent.initializer && parent.initializer.kind === 106 /* SuperKeyword */, /*writing*/ false, parentType, property);
                         }
                     }
                 }
             }
             // For a binding pattern, check contained binding elements
             if (ts.isBindingPattern(node.name)) {
-                if (node.name.kind === 198 /* ArrayBindingPattern */ && languageVersion < 2 /* ES2015 */ && compilerOptions.downlevelIteration) {
+                if (node.name.kind === 200 /* ArrayBindingPattern */ && languageVersion < 2 /* ES2015 */ && compilerOptions.downlevelIteration) {
                     checkExternalEmitHelpers(node, 512 /* Read */);
                 }
                 ts.forEach(node.name.elements, checkSourceElement);
@@ -77056,7 +78549,7 @@
             }
             // For a binding pattern, validate the initializer and exit
             if (ts.isBindingPattern(node.name)) {
-                var needCheckInitializer = node.initializer && node.parent.parent.kind !== 239 /* ForInStatement */;
+                var needCheckInitializer = node.initializer && node.parent.parent.kind !== 241 /* ForInStatement */;
                 var needCheckWidenedType = node.name.elements.length === 0;
                 if (needCheckInitializer || needCheckWidenedType) {
                     // Don't validate for-in initializer as it is already an error
@@ -77098,7 +78591,7 @@
                         ts.isObjectLiteralExpression(initializer) &&
                         (initializer.properties.length === 0 || ts.isPrototypeAccess(node.name)) &&
                         !!((_a = symbol.exports) === null || _a === void 0 ? void 0 : _a.size);
-                    if (!isJSObjectLiteralInitializer && node.parent.parent.kind !== 239 /* ForInStatement */) {
+                    if (!isJSObjectLiteralInitializer && node.parent.parent.kind !== 241 /* ForInStatement */) {
                         checkTypeAssignableToAndOptionallyElaborate(checkExpressionCached(initializer), type, node, initializer, /*headMessage*/ undefined);
                     }
                 }
@@ -77124,23 +78617,18 @@
                     error(node.name, ts.Diagnostics.All_declarations_of_0_must_have_identical_modifiers, ts.declarationNameToString(node.name));
                 }
             }
-            if (node.kind !== 164 /* PropertyDeclaration */ && node.kind !== 163 /* PropertySignature */) {
+            if (node.kind !== 165 /* PropertyDeclaration */ && node.kind !== 164 /* PropertySignature */) {
                 // We know we don't have a binding pattern or computed name here
                 checkExportsOnMergedDeclarations(node);
-                if (node.kind === 250 /* VariableDeclaration */ || node.kind === 199 /* BindingElement */) {
+                if (node.kind === 252 /* VariableDeclaration */ || node.kind === 201 /* BindingElement */) {
                     checkVarDeclaredNamesNotShadowed(node);
                 }
-                checkCollisionWithRequireExportsInGeneratedCode(node, node.name);
-                checkCollisionWithGlobalPromiseInGeneratedCode(node, node.name);
-                if (languageVersion < 99 /* ESNext */
-                    && (needCollisionCheckForIdentifier(node, node.name, "WeakMap") || needCollisionCheckForIdentifier(node, node.name, "WeakSet"))) {
-                    potentialWeakMapSetCollisions.push(node);
-                }
+                checkCollisionsForDeclarationName(node, node.name);
             }
         }
         function errorNextVariableOrPropertyDeclarationMustHaveSameType(firstDeclaration, firstType, nextDeclaration, nextType) {
             var nextDeclarationName = ts.getNameOfDeclaration(nextDeclaration);
-            var message = nextDeclaration.kind === 164 /* PropertyDeclaration */ || nextDeclaration.kind === 163 /* PropertySignature */
+            var message = nextDeclaration.kind === 165 /* PropertyDeclaration */ || nextDeclaration.kind === 164 /* PropertySignature */
                 ? ts.Diagnostics.Subsequent_property_declarations_must_have_the_same_type_Property_0_must_be_of_type_1_but_here_has_type_2
                 : ts.Diagnostics.Subsequent_variable_declarations_must_have_the_same_type_Variable_0_must_be_of_type_1_but_here_has_type_2;
             var declName = ts.declarationNameToString(nextDeclarationName);
@@ -77150,8 +78638,8 @@
             }
         }
         function areDeclarationFlagsIdentical(left, right) {
-            if ((left.kind === 161 /* Parameter */ && right.kind === 250 /* VariableDeclaration */) ||
-                (left.kind === 250 /* VariableDeclaration */ && right.kind === 161 /* Parameter */)) {
+            if ((left.kind === 162 /* Parameter */ && right.kind === 252 /* VariableDeclaration */) ||
+                (left.kind === 252 /* VariableDeclaration */ && right.kind === 162 /* Parameter */)) {
                 // Differences in optionality between parameters and variables are allowed.
                 return true;
             }
@@ -77193,7 +78681,7 @@
             var type = checkTruthinessExpression(node.expression);
             checkTestingKnownTruthyCallableOrAwaitableType(node.expression, type, node.thenStatement);
             checkSourceElement(node.thenStatement);
-            if (node.thenStatement.kind === 232 /* EmptyStatement */) {
+            if (node.thenStatement.kind === 234 /* EmptyStatement */) {
                 error(node.thenStatement, ts.Diagnostics.The_body_of_an_if_statement_cannot_be_the_empty_statement);
             }
             checkSourceElement(node.elseStatement);
@@ -77204,15 +78692,13 @@
             if (getFalsyFlags(type))
                 return;
             var location = ts.isBinaryExpression(condExpr) ? condExpr.right : condExpr;
+            if (ts.isPropertyAccessExpression(location) && ts.isAssertionExpression(ts.skipParentheses(location.expression))) {
+                return;
+            }
             var testedNode = ts.isIdentifier(location) ? location
                 : ts.isPropertyAccessExpression(location) ? location.name
                     : ts.isBinaryExpression(location) && ts.isIdentifier(location.right) ? location.right
                         : undefined;
-            var isPropertyExpressionCast = ts.isPropertyAccessExpression(location)
-                && ts.isAssertionExpression(ts.skipParentheses(location.expression));
-            if (!testedNode || isPropertyExpressionCast) {
-                return;
-            }
             // While it technically should be invalid for any known-truthy value
             // to be tested, we de-scope to functions and Promises unreferenced in
             // the block as a heuristic to identify the most common bugs. There
@@ -77223,12 +78709,12 @@
             if (callSignatures.length === 0 && !isPromise) {
                 return;
             }
-            var testedSymbol = getSymbolAtLocation(testedNode);
-            if (!testedSymbol) {
+            var testedSymbol = testedNode && getSymbolAtLocation(testedNode);
+            if (!testedSymbol && !isPromise) {
                 return;
             }
-            var isUsed = ts.isBinaryExpression(condExpr.parent) && isSymbolUsedInBinaryExpressionChain(condExpr.parent, testedSymbol)
-                || body && isSymbolUsedInConditionBody(condExpr, body, testedNode, testedSymbol);
+            var isUsed = testedSymbol && ts.isBinaryExpression(condExpr.parent) && isSymbolUsedInBinaryExpressionChain(condExpr.parent, testedSymbol)
+                || testedSymbol && body && isSymbolUsedInConditionBody(condExpr, body, testedNode, testedSymbol);
             if (!isUsed) {
                 if (isPromise) {
                     errorAndMaybeSuggestAwait(location, 
@@ -77253,7 +78739,7 @@
                         var childExpression = childNode.parent;
                         while (testedExpression && childExpression) {
                             if (ts.isIdentifier(testedExpression) && ts.isIdentifier(childExpression) ||
-                                testedExpression.kind === 107 /* ThisKeyword */ && childExpression.kind === 107 /* ThisKeyword */) {
+                                testedExpression.kind === 108 /* ThisKeyword */ && childExpression.kind === 108 /* ThisKeyword */) {
                                 return getSymbolAtLocation(testedExpression) === getSymbolAtLocation(childExpression);
                             }
                             else if (ts.isPropertyAccessExpression(testedExpression) && ts.isPropertyAccessExpression(childExpression)) {
@@ -77318,12 +78804,12 @@
         function checkForStatement(node) {
             // Grammar checking
             if (!checkGrammarStatementInAmbientContext(node)) {
-                if (node.initializer && node.initializer.kind === 251 /* VariableDeclarationList */) {
+                if (node.initializer && node.initializer.kind === 253 /* VariableDeclarationList */) {
                     checkGrammarVariableDeclarationList(node.initializer);
                 }
             }
             if (node.initializer) {
-                if (node.initializer.kind === 251 /* VariableDeclarationList */) {
+                if (node.initializer.kind === 253 /* VariableDeclarationList */) {
                     ts.forEach(node.initializer.declarations, checkVariableDeclaration);
                 }
                 else {
@@ -77341,11 +78827,17 @@
         }
         function checkForOfStatement(node) {
             checkGrammarForInOrForOfStatement(node);
+            var container = ts.getContainingFunctionOrClassStaticBlock(node);
             if (node.awaitModifier) {
-                var functionFlags = ts.getFunctionFlags(ts.getContainingFunction(node));
-                if ((functionFlags & (4 /* Invalid */ | 2 /* Async */)) === 2 /* Async */ && languageVersion < 99 /* ESNext */) {
-                    // for..await..of in an async function or async generator function prior to ESNext requires the __asyncValues helper
-                    checkExternalEmitHelpers(node, 16384 /* ForAwaitOfIncludes */);
+                if (container && ts.isClassStaticBlockDeclaration(container)) {
+                    grammarErrorOnNode(node.awaitModifier, ts.Diagnostics.For_await_loops_cannot_be_used_inside_a_class_static_block);
+                }
+                else {
+                    var functionFlags = ts.getFunctionFlags(container);
+                    if ((functionFlags & (4 /* Invalid */ | 2 /* Async */)) === 2 /* Async */ && languageVersion < 99 /* ESNext */) {
+                        // for..await..of in an async function or async generator function prior to ESNext requires the __asyncValues helper
+                        checkExternalEmitHelpers(node, 16384 /* ForAwaitOfIncludes */);
+                    }
                 }
             }
             else if (compilerOptions.downlevelIteration && languageVersion < 2 /* ES2015 */) {
@@ -77357,14 +78849,14 @@
             // via checkRightHandSideOfForOf.
             // If the LHS is an expression, check the LHS, as a destructuring assignment or as a reference.
             // Then check that the RHS is assignable to it.
-            if (node.initializer.kind === 251 /* VariableDeclarationList */) {
+            if (node.initializer.kind === 253 /* VariableDeclarationList */) {
                 checkForInOrForOfVariableDeclaration(node);
             }
             else {
                 var varExpr = node.initializer;
                 var iteratedType = checkRightHandSideOfForOf(node);
                 // There may be a destructuring assignment on the left side
-                if (varExpr.kind === 200 /* ArrayLiteralExpression */ || varExpr.kind === 201 /* ObjectLiteralExpression */) {
+                if (varExpr.kind === 202 /* ArrayLiteralExpression */ || varExpr.kind === 203 /* ObjectLiteralExpression */) {
                     // iteratedType may be undefined. In this case, we still want to check the structure of
                     // varExpr, in particular making sure it's a valid LeftHandSideExpression. But we'd like
                     // to short circuit the type relation checking as much as possible, so we pass the unknownType.
@@ -77396,7 +78888,7 @@
             // for (let VarDecl in Expr) Statement
             //   VarDecl must be a variable declaration without a type annotation that declares a variable of type Any,
             //   and Expr must be an expression of type Any, an object type, or a type parameter type.
-            if (node.initializer.kind === 251 /* VariableDeclarationList */) {
+            if (node.initializer.kind === 253 /* VariableDeclarationList */) {
                 var variable = node.initializer.declarations[0];
                 if (variable && ts.isBindingPattern(variable.name)) {
                     error(variable.name, ts.Diagnostics.The_left_hand_side_of_a_for_in_statement_cannot_be_a_destructuring_pattern);
@@ -77410,7 +78902,7 @@
                 //   and Expr must be an expression of type Any, an object type, or a type parameter type.
                 var varExpr = node.initializer;
                 var leftType = checkExpression(varExpr);
-                if (varExpr.kind === 200 /* ArrayLiteralExpression */ || varExpr.kind === 201 /* ObjectLiteralExpression */) {
+                if (varExpr.kind === 202 /* ArrayLiteralExpression */ || varExpr.kind === 203 /* ObjectLiteralExpression */) {
                     error(varExpr, ts.Diagnostics.The_left_hand_side_of_a_for_in_statement_cannot_be_a_destructuring_pattern);
                 }
                 else if (!isTypeAssignableTo(getIndexTypeOrString(rightType), leftType)) {
@@ -77532,7 +79024,7 @@
                 }
                 return hasStringConstituent ? possibleOutOfBounds ? includeUndefinedInIndexSignature(stringType) : stringType : undefined;
             }
-            var arrayElementType = getIndexTypeOfType(arrayType, 1 /* Number */);
+            var arrayElementType = getIndexTypeOfType(arrayType, numberType);
             if (hasStringConstituent && arrayElementType) {
                 // This is just an optimization for the case where arrayOrStringType is string | string[]
                 if (arrayElementType.flags & 402653316 /* StringLike */ && !compilerOptions.noUncheckedIndexedAccess) {
@@ -77621,8 +79113,8 @@
             var yieldTypes;
             var returnTypes;
             var nextTypes;
-            for (var _i = 0, array_10 = array; _i < array_10.length; _i++) {
-                var iterationTypes = array_10[_i];
+            for (var _i = 0, array_11 = array; _i < array_11.length; _i++) {
+                var iterationTypes = array_11[_i];
                 if (iterationTypes === undefined || iterationTypes === noIterationTypes) {
                     continue;
                 }
@@ -78124,27 +79616,31 @@
             if (checkGrammarStatementInAmbientContext(node)) {
                 return;
             }
-            var func = ts.getContainingFunction(node);
-            if (!func) {
+            var container = ts.getContainingFunctionOrClassStaticBlock(node);
+            if (container && ts.isClassStaticBlockDeclaration(container)) {
+                grammarErrorOnFirstToken(node, ts.Diagnostics.A_return_statement_cannot_be_used_inside_a_class_static_block);
+                return;
+            }
+            if (!container) {
                 grammarErrorOnFirstToken(node, ts.Diagnostics.A_return_statement_can_only_be_used_within_a_function_body);
                 return;
             }
-            var signature = getSignatureFromDeclaration(func);
+            var signature = getSignatureFromDeclaration(container);
             var returnType = getReturnTypeOfSignature(signature);
-            var functionFlags = ts.getFunctionFlags(func);
+            var functionFlags = ts.getFunctionFlags(container);
             if (strictNullChecks || node.expression || returnType.flags & 131072 /* Never */) {
                 var exprType = node.expression ? checkExpressionCached(node.expression) : undefinedType;
-                if (func.kind === 169 /* SetAccessor */) {
+                if (container.kind === 171 /* SetAccessor */) {
                     if (node.expression) {
                         error(node, ts.Diagnostics.Setters_cannot_return_a_value);
                     }
                 }
-                else if (func.kind === 167 /* Constructor */) {
+                else if (container.kind === 169 /* Constructor */) {
                     if (node.expression && !checkTypeAssignableToAndOptionallyElaborate(exprType, returnType, node, node.expression)) {
                         error(node, ts.Diagnostics.Return_type_of_constructor_signature_must_be_assignable_to_the_instance_type_of_the_class);
                     }
                 }
-                else if (getReturnTypeFromAnnotation(func)) {
+                else if (getReturnTypeFromAnnotation(container)) {
                     var unwrappedReturnType = (_a = unwrapReturnType(returnType, functionFlags)) !== null && _a !== void 0 ? _a : returnType;
                     var unwrappedExprType = functionFlags & 2 /* Async */
                         ? checkAwaitedType(exprType, node, ts.Diagnostics.The_return_type_of_an_async_function_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member)
@@ -78157,7 +79653,7 @@
                     }
                 }
             }
-            else if (func.kind !== 167 /* Constructor */ && compilerOptions.noImplicitReturns && !isUnwrappedReturnTypeVoidOrAny(func, returnType)) {
+            else if (container.kind !== 169 /* Constructor */ && compilerOptions.noImplicitReturns && !isUnwrappedReturnTypeVoidOrAny(container, returnType)) {
                 // The function has a return type, but the return statement doesn't have an expression.
                 error(node, ts.Diagnostics.Not_all_code_paths_return_a_value);
             }
@@ -78186,7 +79682,7 @@
             var expressionIsLiteral = isLiteralType(expressionType);
             ts.forEach(node.caseBlock.clauses, function (clause) {
                 // Grammar check for duplicate default clauses, skip if we already report duplicate default clause
-                if (clause.kind === 286 /* DefaultClause */ && !hasDuplicateDefaultClause) {
+                if (clause.kind === 288 /* DefaultClause */ && !hasDuplicateDefaultClause) {
                     if (firstDefaultClause === undefined) {
                         firstDefaultClause = clause;
                     }
@@ -78195,7 +79691,7 @@
                         hasDuplicateDefaultClause = true;
                     }
                 }
-                if (produceDiagnostics && clause.kind === 285 /* CaseClause */) {
+                if (produceDiagnostics && clause.kind === 287 /* CaseClause */) {
                     // TypeScript 1.0 spec (April 2014): 5.9
                     // In a 'switch' statement, each 'case' expression must be of a type that is comparable
                     // to or from the type of the 'switch' expression.
@@ -78227,7 +79723,7 @@
                     if (ts.isFunctionLike(current)) {
                         return "quit";
                     }
-                    if (current.kind === 246 /* LabeledStatement */ && current.label.escapedText === node.label.escapedText) {
+                    if (current.kind === 248 /* LabeledStatement */ && current.label.escapedText === node.label.escapedText) {
                         grammarErrorOnNode(node.label, ts.Diagnostics.Duplicate_label_0, ts.getTextOfNode(node.label));
                         return true;
                     }
@@ -78285,87 +79781,83 @@
                 checkBlock(node.finallyBlock);
             }
         }
-        function checkIndexConstraints(type, isStatic) {
-            var _a, _b, _c, _d;
-            var declaredNumberIndexer = getIndexDeclarationOfSymbolTable(isStatic ? (_a = type.symbol) === null || _a === void 0 ? void 0 : _a.exports : (_b = type.symbol) === null || _b === void 0 ? void 0 : _b.members, 1 /* Number */);
-            var declaredStringIndexer = getIndexDeclarationOfSymbolTable(isStatic ? (_c = type.symbol) === null || _c === void 0 ? void 0 : _c.exports : (_d = type.symbol) === null || _d === void 0 ? void 0 : _d.members, 0 /* String */);
-            var stringIndexType = getIndexTypeOfType(type, 0 /* String */);
-            var numberIndexType = getIndexTypeOfType(type, 1 /* Number */);
-            if (stringIndexType || numberIndexType) {
-                ts.forEach(getPropertiesOfObjectType(type), function (prop) {
-                    if (isStatic && prop.flags & 4194304 /* Prototype */)
-                        return;
-                    var propType = getTypeOfSymbol(prop);
-                    checkIndexConstraintForProperty(prop, propType, type, declaredStringIndexer, stringIndexType, 0 /* String */);
-                    checkIndexConstraintForProperty(prop, propType, type, declaredNumberIndexer, numberIndexType, 1 /* Number */);
-                });
-                var classDeclaration = type.symbol.valueDeclaration;
-                if (ts.getObjectFlags(type) & 1 /* Class */ && classDeclaration && ts.isClassLike(classDeclaration)) {
-                    for (var _i = 0, _e = classDeclaration.members; _i < _e.length; _i++) {
-                        var member = _e[_i];
-                        // Only process instance properties with computed names here.
-                        // Static properties cannot be in conflict with indexers,
-                        // and properties with literal names were already checked.
-                        if (!ts.hasSyntacticModifier(member, 32 /* Static */) && !hasBindableName(member)) {
-                            var symbol = getSymbolOfNode(member);
-                            var propType = getTypeOfSymbol(symbol);
-                            checkIndexConstraintForProperty(symbol, propType, type, declaredStringIndexer, stringIndexType, 0 /* String */);
-                            checkIndexConstraintForProperty(symbol, propType, type, declaredNumberIndexer, numberIndexType, 1 /* Number */);
-                        }
+        function checkIndexConstraints(type, isStaticIndex) {
+            var indexInfos = getIndexInfosOfType(type);
+            if (indexInfos.length === 0) {
+                return;
+            }
+            for (var _i = 0, _a = getPropertiesOfObjectType(type); _i < _a.length; _i++) {
+                var prop = _a[_i];
+                if (!(isStaticIndex && prop.flags & 4194304 /* Prototype */)) {
+                    checkIndexConstraintForProperty(type, prop, getLiteralTypeFromProperty(prop, 8576 /* StringOrNumberLiteralOrUnique */, /*includeNonPublic*/ true), getNonMissingTypeOfSymbol(prop));
+                }
+            }
+            var typeDeclaration = type.symbol.valueDeclaration;
+            if (typeDeclaration && ts.isClassLike(typeDeclaration)) {
+                for (var _b = 0, _c = typeDeclaration.members; _b < _c.length; _b++) {
+                    var member = _c[_b];
+                    // Only process instance properties with computed names here. Static properties cannot be in conflict with indexers,
+                    // and properties with literal names were already checked.
+                    if (!ts.isStatic(member) && !hasBindableName(member)) {
+                        var symbol = getSymbolOfNode(member);
+                        checkIndexConstraintForProperty(type, symbol, getTypeOfExpression(member.name.expression), getNonMissingTypeOfSymbol(symbol));
                     }
                 }
             }
-            var errorNode;
-            if (stringIndexType && numberIndexType) {
-                errorNode = declaredNumberIndexer || declaredStringIndexer;
-                // condition 'errorNode === undefined' may appear if types does not declare nor string neither number indexer
-                if (!errorNode && (ts.getObjectFlags(type) & 2 /* Interface */)) {
-                    var someBaseTypeHasBothIndexers = ts.forEach(getBaseTypes(type), function (base) { return getIndexTypeOfType(base, 0 /* String */) && getIndexTypeOfType(base, 1 /* Number */); });
-                    errorNode = someBaseTypeHasBothIndexers || !type.symbol.declarations ? undefined : type.symbol.declarations[0];
+            if (indexInfos.length > 1) {
+                for (var _d = 0, indexInfos_6 = indexInfos; _d < indexInfos_6.length; _d++) {
+                    var info = indexInfos_6[_d];
+                    checkIndexConstraintForIndexSignature(type, info);
                 }
             }
-            if (errorNode && !isTypeAssignableTo(numberIndexType, stringIndexType)) { // TODO: GH#18217
-                error(errorNode, ts.Diagnostics.Numeric_index_type_0_is_not_assignable_to_string_index_type_1, typeToString(numberIndexType), typeToString(stringIndexType));
+        }
+        function checkIndexConstraintForProperty(type, prop, propNameType, propType) {
+            var declaration = prop.valueDeclaration;
+            var name = ts.getNameOfDeclaration(declaration);
+            if (name && ts.isPrivateIdentifier(name)) {
+                return;
             }
-            function checkIndexConstraintForProperty(prop, propertyType, containingType, indexDeclaration, indexType, indexKind) {
-                // ESSymbol properties apply to neither string nor numeric indexers.
-                if (!indexType || ts.isKnownSymbol(prop)) {
-                    return;
+            var indexInfos = getApplicableIndexInfos(type, propNameType);
+            var interfaceDeclaration = ts.getObjectFlags(type) & 2 /* Interface */ ? ts.getDeclarationOfKind(type.symbol, 256 /* InterfaceDeclaration */) : undefined;
+            var localPropDeclaration = declaration && declaration.kind === 219 /* BinaryExpression */ ||
+                name && name.kind === 160 /* ComputedPropertyName */ || getParentOfSymbol(prop) === type.symbol ? declaration : undefined;
+            var _loop_27 = function (info) {
+                var localIndexDeclaration = info.declaration && getParentOfSymbol(getSymbolOfNode(info.declaration)) === type.symbol ? info.declaration : undefined;
+                // We check only when (a) the property is declared in the containing type, or (b) the applicable index signature is declared
+                // in the containing type, or (c) the containing type is an interface and no base interface contains both the property and
+                // the index signature (i.e. property and index signature are declared in separate inherited interfaces).
+                var errorNode = localPropDeclaration || localIndexDeclaration ||
+                    (interfaceDeclaration && !ts.some(getBaseTypes(type), function (base) { return !!getPropertyOfObjectType(base, prop.escapedName) && !!getIndexTypeOfType(base, info.keyType); }) ? interfaceDeclaration : undefined);
+                if (errorNode && !isTypeAssignableTo(propType, info.type)) {
+                    error(errorNode, ts.Diagnostics.Property_0_of_type_1_is_not_assignable_to_2_index_type_3, symbolToString(prop), typeToString(propType), typeToString(info.keyType), typeToString(info.type));
                 }
-                var propDeclaration = prop.valueDeclaration;
-                var name = propDeclaration && ts.getNameOfDeclaration(propDeclaration);
-                if (name && ts.isPrivateIdentifier(name)) {
-                    return;
+            };
+            for (var _i = 0, indexInfos_7 = indexInfos; _i < indexInfos_7.length; _i++) {
+                var info = indexInfos_7[_i];
+                _loop_27(info);
+            }
+        }
+        function checkIndexConstraintForIndexSignature(type, checkInfo) {
+            var declaration = checkInfo.declaration;
+            var indexInfos = getApplicableIndexInfos(type, checkInfo.keyType);
+            var interfaceDeclaration = ts.getObjectFlags(type) & 2 /* Interface */ ? ts.getDeclarationOfKind(type.symbol, 256 /* InterfaceDeclaration */) : undefined;
+            var localCheckDeclaration = declaration && getParentOfSymbol(getSymbolOfNode(declaration)) === type.symbol ? declaration : undefined;
+            var _loop_28 = function (info) {
+                if (info === checkInfo)
+                    return "continue";
+                var localIndexDeclaration = info.declaration && getParentOfSymbol(getSymbolOfNode(info.declaration)) === type.symbol ? info.declaration : undefined;
+                // We check only when (a) the check index signature is declared in the containing type, or (b) the applicable index
+                // signature is declared in the containing type, or (c) the containing type is an interface and no base interface contains
+                // both index signatures (i.e. the index signatures are declared in separate inherited interfaces).
+                var errorNode = localCheckDeclaration || localIndexDeclaration ||
+                    (interfaceDeclaration && !ts.some(getBaseTypes(type), function (base) { return !!getIndexInfoOfType(base, checkInfo.keyType) && !!getIndexTypeOfType(base, info.keyType); }) ? interfaceDeclaration : undefined);
+                if (errorNode && !isTypeAssignableTo(checkInfo.type, info.type)) {
+                    error(errorNode, ts.Diagnostics._0_index_type_1_is_not_assignable_to_2_index_type_3, typeToString(checkInfo.keyType), typeToString(checkInfo.type), typeToString(info.keyType), typeToString(info.type));
                 }
-                // index is numeric and property name is not valid numeric literal
-                if (indexKind === 1 /* Number */ && !(name ? isNumericName(name) : isNumericLiteralName(prop.escapedName))) {
-                    return;
-                }
-                // perform property check if property or indexer is declared in 'type'
-                // this allows us to rule out cases when both property and indexer are inherited from the base class
-                var errorNode;
-                if (propDeclaration && name &&
-                    (propDeclaration.kind === 217 /* BinaryExpression */ ||
-                        name.kind === 159 /* ComputedPropertyName */ ||
-                        prop.parent === containingType.symbol)) {
-                    errorNode = propDeclaration;
-                }
-                else if (indexDeclaration) {
-                    errorNode = indexDeclaration;
-                }
-                else if (ts.getObjectFlags(containingType) & 2 /* Interface */) {
-                    // for interfaces property and indexer might be inherited from different bases
-                    // check if any base class already has both property and indexer.
-                    // check should be performed only if 'type' is the first type that brings property\indexer together
-                    var someBaseClassHasBothPropertyAndIndexer = ts.forEach(getBaseTypes(containingType), function (base) { return getPropertyOfObjectType(base, prop.escapedName) && getIndexTypeOfType(base, indexKind); });
-                    errorNode = someBaseClassHasBothPropertyAndIndexer || !containingType.symbol.declarations ? undefined : containingType.symbol.declarations[0];
-                }
-                if (errorNode && !isTypeAssignableTo(propertyType, indexType)) {
-                    var errorMessage = indexKind === 0 /* String */
-                        ? ts.Diagnostics.Property_0_of_type_1_is_not_assignable_to_string_index_type_2
-                        : ts.Diagnostics.Property_0_of_type_1_is_not_assignable_to_numeric_index_type_2;
-                    error(errorNode, errorMessage, symbolToString(prop), typeToString(propertyType), typeToString(indexType));
-                }
+            };
+            for (var _i = 0, indexInfos_8 = indexInfos; _i < indexInfos_8.length; _i++) {
+                var info = indexInfos_8[_i];
+                _loop_28(info);
             }
         }
         function checkTypeNameIsReserved(name, message) {
@@ -78424,7 +79916,7 @@
         function checkTypeParametersNotReferenced(root, typeParameters, index) {
             visit(root);
             function visit(node) {
-                if (node.kind === 174 /* TypeReference */) {
+                if (node.kind === 176 /* TypeReference */) {
                     var type = getTypeFromTypeReference(node);
                     if (type.flags & 262144 /* TypeParameter */) {
                         for (var i = index; i < typeParameters.length; i++) {
@@ -78523,14 +80015,7 @@
         function checkClassLikeDeclaration(node) {
             checkGrammarClassLikeDeclaration(node);
             checkDecorators(node);
-            if (node.name) {
-                checkTypeNameIsReserved(node.name, ts.Diagnostics.Class_name_cannot_be_0);
-                checkCollisionWithRequireExportsInGeneratedCode(node, node.name);
-                checkCollisionWithGlobalPromiseInGeneratedCode(node, node.name);
-                if (!(node.flags & 8388608 /* Ambient */)) {
-                    checkClassNameCollisionWithObject(node.name);
-                }
-            }
+            checkCollisionsForDeclarationName(node, node.name);
             checkTypeParameters(ts.getEffectiveTypeParameterDeclarations(node));
             checkExportsOnMergedDeclarations(node);
             var symbol = getSymbolOfNode(node);
@@ -78632,7 +80117,7 @@
             }
             if (produceDiagnostics) {
                 checkIndexConstraints(type);
-                checkIndexConstraints(staticType, /*isStatic*/ true);
+                checkIndexConstraints(staticType, /*isStaticIndex*/ true);
                 checkTypeForDuplicateIndexSignatures(node);
                 checkPropertyInitialization(node);
             }
@@ -78643,7 +80128,7 @@
             var baseTypes = baseTypeNode && getBaseTypes(type);
             var baseWithThis = (baseTypes === null || baseTypes === void 0 ? void 0 : baseTypes.length) ? getTypeWithThisArgument(ts.first(baseTypes), type.thisType) : undefined;
             var baseStaticType = getBaseConstructorTypeOfClass(type);
-            var _loop_24 = function (member) {
+            var _loop_29 = function (member) {
                 if (ts.hasAmbientModifier(member)) {
                     return "continue";
                 }
@@ -78658,11 +80143,11 @@
             };
             for (var _i = 0, _a = node.members; _i < _a.length; _i++) {
                 var member = _a[_i];
-                _loop_24(member);
+                _loop_29(member);
             }
             function checkClassMember(member, memberIsParameterProperty) {
                 var hasOverride = ts.hasOverrideModifier(member);
-                var hasStatic = ts.hasStaticModifier(member);
+                var hasStatic = ts.isStatic(member);
                 if (baseWithThis && (hasOverride || compilerOptions.noImplicitOverride)) {
                     var declaredProp = member.name && getSymbolAtLocation(member.name) || getSymbolAtLocation(member);
                     if (!declaredProp) {
@@ -78674,10 +80159,13 @@
                     var baseProp = getPropertyOfType(baseType, declaredProp.escapedName);
                     var baseClassName = typeToString(baseWithThis);
                     if (prop && !baseProp && hasOverride) {
-                        error(member, ts.Diagnostics.This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0, baseClassName);
+                        var suggestion = getSuggestedSymbolForNonexistentClassMember(ts.symbolName(declaredProp), baseType);
+                        suggestion ?
+                            error(member, ts.Diagnostics.This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0_Did_you_mean_1, baseClassName, symbolToString(suggestion)) :
+                            error(member, ts.Diagnostics.This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0, baseClassName);
                     }
-                    else if (prop && (baseProp === null || baseProp === void 0 ? void 0 : baseProp.valueDeclaration) && compilerOptions.noImplicitOverride && !nodeInAmbientContext) {
-                        var baseHasAbstract = ts.hasAbstractModifier(baseProp.valueDeclaration);
+                    else if (prop && (baseProp === null || baseProp === void 0 ? void 0 : baseProp.declarations) && compilerOptions.noImplicitOverride && !nodeInAmbientContext) {
+                        var baseHasAbstract = ts.some(baseProp.declarations, function (d) { return ts.hasAbstractModifier(d); });
                         if (hasOverride) {
                             return;
                         }
@@ -78701,8 +80189,8 @@
         function issueMemberSpecificError(node, typeWithThis, baseWithThis, broadDiag) {
             // iterate over all implemented properties and issue errors on each one which isn't compatible, rather than the class as a whole, if possible
             var issuedMemberError = false;
-            var _loop_25 = function (member) {
-                if (ts.hasStaticModifier(member)) {
+            var _loop_30 = function (member) {
+                if (ts.isStatic(member)) {
                     return "continue";
                 }
                 var declaredProp = member.name && getSymbolAtLocation(member.name) || getSymbolAtLocation(member);
@@ -78720,7 +80208,7 @@
             };
             for (var _i = 0, _a = node.members; _i < _a.length; _i++) {
                 var member = _a[_i];
-                _loop_25(member);
+                _loop_30(member);
             }
             if (!issuedMemberError) {
                 // check again with diagnostics to generate a less-specific error
@@ -78746,7 +80234,7 @@
         }
         function getClassOrInterfaceDeclarationsOfSymbol(symbol) {
             return ts.filter(symbol.declarations, function (d) {
-                return d.kind === 253 /* ClassDeclaration */ || d.kind === 254 /* InterfaceDeclaration */;
+                return d.kind === 255 /* ClassDeclaration */ || d.kind === 256 /* InterfaceDeclaration */;
             });
         }
         function checkKindsOfPropertyMemberOverrides(type, baseType) {
@@ -78802,7 +80290,7 @@
                                 continue basePropertyCheck;
                             }
                         }
-                        if (derivedClassDecl.kind === 222 /* ClassExpression */) {
+                        if (derivedClassDecl.kind === 224 /* ClassExpression */) {
                             error(derivedClassDecl, ts.Diagnostics.Non_abstract_class_expression_does_not_implement_inherited_abstract_member_0_from_class_1, symbolToString(baseProperty), typeToString(baseType));
                         }
                         else {
@@ -78823,7 +80311,7 @@
                     if (basePropertyFlags && derivedPropertyFlags) {
                         // property/accessor is overridden with property/accessor
                         if (baseDeclarationFlags & 128 /* Abstract */ && !(base.valueDeclaration && ts.isPropertyDeclaration(base.valueDeclaration) && base.valueDeclaration.initializer)
-                            || base.valueDeclaration && base.valueDeclaration.parent.kind === 254 /* InterfaceDeclaration */
+                            || base.valueDeclaration && base.valueDeclaration.parent.kind === 256 /* InterfaceDeclaration */
                             || derived.valueDeclaration && ts.isBinaryExpression(derived.valueDeclaration)) {
                             // when the base property is abstract or from an interface, base/derived flags don't need to match
                             // same when the derived property is from an assignment
@@ -78838,7 +80326,7 @@
                             error(ts.getNameOfDeclaration(derived.valueDeclaration) || derived.valueDeclaration, errorMessage_1, symbolToString(base), typeToString(baseType), typeToString(type));
                         }
                         else if (useDefineForClassFields) {
-                            var uninitialized = (_a = derived.declarations) === null || _a === void 0 ? void 0 : _a.find(function (d) { return d.kind === 164 /* PropertyDeclaration */ && !d.initializer; });
+                            var uninitialized = (_a = derived.declarations) === null || _a === void 0 ? void 0 : _a.find(function (d) { return d.kind === 165 /* PropertyDeclaration */ && !d.initializer; });
                             if (uninitialized
                                 && !(derived.flags & 33554432 /* Transient */)
                                 && !(baseDeclarationFlags & 128 /* Abstract */)
@@ -78940,7 +80428,7 @@
                 if (ts.getEffectiveModifierFlags(member) & 2 /* Ambient */) {
                     continue;
                 }
-                if (isInstancePropertyWithoutInitializer(member)) {
+                if (!ts.isStatic(member) && isPropertyWithoutInitializer(member)) {
                     var propName = member.name;
                     if (ts.isIdentifier(propName) || ts.isPrivateIdentifier(propName)) {
                         var type = getTypeOfSymbol(getSymbolOfNode(member));
@@ -78953,12 +80441,29 @@
                 }
             }
         }
-        function isInstancePropertyWithoutInitializer(node) {
-            return node.kind === 164 /* PropertyDeclaration */ &&
-                !ts.hasSyntacticModifier(node, 32 /* Static */ | 128 /* Abstract */) &&
+        function isPropertyWithoutInitializer(node) {
+            return node.kind === 165 /* PropertyDeclaration */ &&
+                !ts.hasAbstractModifier(node) &&
                 !node.exclamationToken &&
                 !node.initializer;
         }
+        function isPropertyInitializedInStaticBlocks(propName, propType, staticBlocks, startPos, endPos) {
+            for (var _i = 0, staticBlocks_2 = staticBlocks; _i < staticBlocks_2.length; _i++) {
+                var staticBlock = staticBlocks_2[_i];
+                // static block must be within the provided range as they are evaluated in document order (unlike constructors)
+                if (staticBlock.pos >= startPos && staticBlock.pos <= endPos) {
+                    var reference = ts.factory.createPropertyAccessExpression(ts.factory.createThis(), propName);
+                    ts.setParent(reference.expression, reference);
+                    ts.setParent(reference, staticBlock);
+                    reference.flowNode = staticBlock.returnFlowNode;
+                    var flowType = getFlowTypeOfReference(reference, propType, getOptionalType(propType));
+                    if (!(getFalsyFlags(flowType) & 32768 /* Undefined */)) {
+                        return true;
+                    }
+                }
+            }
+            return false;
+        }
         function isPropertyInitializedInConstructor(propName, propType, constructor) {
             var reference = ts.factory.createPropertyAccessExpression(ts.factory.createThis(), propName);
             ts.setParent(reference.expression, reference);
@@ -78978,7 +80483,7 @@
                 var symbol = getSymbolOfNode(node);
                 checkTypeParameterListsIdentical(symbol);
                 // Only check this symbol once
-                var firstInterfaceDecl = ts.getDeclarationOfKind(symbol, 254 /* InterfaceDeclaration */);
+                var firstInterfaceDecl = ts.getDeclarationOfKind(symbol, 256 /* InterfaceDeclaration */);
                 if (node === firstInterfaceDecl) {
                     var type = getDeclaredTypeOfSymbol(symbol);
                     var typeWithThis = getTypeWithThisArgument(type);
@@ -79011,7 +80516,7 @@
             checkTypeNameIsReserved(node.name, ts.Diagnostics.Type_alias_name_cannot_be_0);
             checkExportsOnMergedDeclarations(node);
             checkTypeParameters(node.typeParameters);
-            if (node.type.kind === 136 /* IntrinsicKeyword */) {
+            if (node.type.kind === 137 /* IntrinsicKeyword */) {
                 if (!intrinsicTypeKinds.has(node.name.escapedText) || ts.length(node.typeParameters) !== 1) {
                     error(node.type, ts.Diagnostics.The_intrinsic_keyword_can_only_be_used_to_declare_compiler_provided_intrinsic_types);
                 }
@@ -79040,7 +80545,7 @@
             }
             else {
                 var text = ts.getTextOfPropertyName(member.name);
-                if (isNumericLiteralName(text) && !isInfinityOrNaNString(text)) {
+                if (isNumericLiteralName(text) && !ts.isInfinityOrNaNString(text)) {
                     error(member.name, ts.Diagnostics.An_enum_member_cannot_have_a_numeric_name);
                 }
             }
@@ -79097,7 +80602,7 @@
             return value;
             function evaluate(expr) {
                 switch (expr.kind) {
-                    case 215 /* PrefixUnaryExpression */:
+                    case 217 /* PrefixUnaryExpression */:
                         var value_2 = evaluate(expr.operand);
                         if (typeof value_2 === "number") {
                             switch (expr.operator) {
@@ -79107,7 +80612,7 @@
                             }
                         }
                         break;
-                    case 217 /* BinaryExpression */:
+                    case 219 /* BinaryExpression */:
                         var left = evaluate(expr.left);
                         var right = evaluate(expr.right);
                         if (typeof left === "number" && typeof right === "number") {
@@ -79136,22 +80641,22 @@
                     case 8 /* NumericLiteral */:
                         checkGrammarNumericLiteral(expr);
                         return +expr.text;
-                    case 208 /* ParenthesizedExpression */:
+                    case 210 /* ParenthesizedExpression */:
                         return evaluate(expr.expression);
-                    case 78 /* Identifier */:
+                    case 79 /* Identifier */:
                         var identifier = expr;
-                        if (isInfinityOrNaNString(identifier.escapedText)) {
+                        if (ts.isInfinityOrNaNString(identifier.escapedText)) {
                             return +(identifier.escapedText);
                         }
                         return ts.nodeIsMissing(expr) ? 0 : evaluateEnumMember(expr, getSymbolOfNode(member.parent), identifier.escapedText);
-                    case 203 /* ElementAccessExpression */:
-                    case 202 /* PropertyAccessExpression */:
+                    case 205 /* ElementAccessExpression */:
+                    case 204 /* PropertyAccessExpression */:
                         var ex = expr;
                         if (isConstantMemberAccess(ex)) {
                             var type = getTypeOfExpression(ex.expression);
                             if (type.symbol && type.symbol.flags & 384 /* Enum */) {
                                 var name = void 0;
-                                if (ex.kind === 202 /* PropertyAccessExpression */) {
+                                if (ex.kind === 204 /* PropertyAccessExpression */) {
                                     name = ex.name.escapedText;
                                 }
                                 else {
@@ -79183,9 +80688,9 @@
             }
         }
         function isConstantMemberAccess(node) {
-            return node.kind === 78 /* Identifier */ ||
-                node.kind === 202 /* PropertyAccessExpression */ && isConstantMemberAccess(node.expression) ||
-                node.kind === 203 /* ElementAccessExpression */ && isConstantMemberAccess(node.expression) &&
+            return node.kind === 79 /* Identifier */ ||
+                node.kind === 204 /* PropertyAccessExpression */ && isConstantMemberAccess(node.expression) ||
+                node.kind === 205 /* ElementAccessExpression */ && isConstantMemberAccess(node.expression) &&
                     ts.isStringLiteralLike(node.argumentExpression);
         }
         function checkEnumDeclaration(node) {
@@ -79194,9 +80699,7 @@
             }
             // Grammar checking
             checkGrammarDecoratorsAndModifiers(node);
-            checkTypeNameIsReserved(node.name, ts.Diagnostics.Enum_name_cannot_be_0);
-            checkCollisionWithRequireExportsInGeneratedCode(node, node.name);
-            checkCollisionWithGlobalPromiseInGeneratedCode(node, node.name);
+            checkCollisionsForDeclarationName(node, node.name);
             checkExportsOnMergedDeclarations(node);
             node.members.forEach(checkEnumMember);
             computeEnumMemberValues(node);
@@ -79221,7 +80724,7 @@
                 var seenEnumMissingInitialInitializer_1 = false;
                 ts.forEach(enumSymbol.declarations, function (declaration) {
                     // return true if we hit a violation of the rule, false otherwise
-                    if (declaration.kind !== 256 /* EnumDeclaration */) {
+                    if (declaration.kind !== 258 /* EnumDeclaration */) {
                         return false;
                     }
                     var enumDeclaration = declaration;
@@ -79250,8 +80753,8 @@
             if (declarations) {
                 for (var _i = 0, declarations_8 = declarations; _i < declarations_8.length; _i++) {
                     var declaration = declarations_8[_i];
-                    if ((declaration.kind === 253 /* ClassDeclaration */ ||
-                        (declaration.kind === 252 /* FunctionDeclaration */ && ts.nodeIsPresent(declaration.body))) &&
+                    if ((declaration.kind === 255 /* ClassDeclaration */ ||
+                        (declaration.kind === 254 /* FunctionDeclaration */ && ts.nodeIsPresent(declaration.body))) &&
                         !(declaration.flags & 8388608 /* Ambient */)) {
                         return declaration;
                     }
@@ -79294,8 +80797,7 @@
                     }
                 }
                 if (ts.isIdentifier(node.name)) {
-                    checkCollisionWithRequireExportsInGeneratedCode(node, node.name);
-                    checkCollisionWithGlobalPromiseInGeneratedCode(node, node.name);
+                    checkCollisionsForDeclarationName(node, node.name);
                 }
                 checkExportsOnMergedDeclarations(node);
                 var symbol = getSymbolOfNode(node);
@@ -79316,7 +80818,7 @@
                     }
                     // if the module merges with a class declaration in the same lexical scope,
                     // we need to track this to ensure the correct emit.
-                    var mergedClass = ts.getDeclarationOfKind(symbol, 253 /* ClassDeclaration */);
+                    var mergedClass = ts.getDeclarationOfKind(symbol, 255 /* ClassDeclaration */);
                     if (mergedClass &&
                         inSameLexicalScope(node, mergedClass)) {
                         getNodeLinks(node).flags |= 32768 /* LexicalModuleMergesWithClass */;
@@ -79367,23 +80869,23 @@
         function checkModuleAugmentationElement(node, isGlobalAugmentation) {
             var _a;
             switch (node.kind) {
-                case 233 /* VariableStatement */:
+                case 235 /* VariableStatement */:
                     // error each individual name in variable statement instead of marking the entire variable statement
                     for (var _i = 0, _b = node.declarationList.declarations; _i < _b.length; _i++) {
                         var decl = _b[_i];
                         checkModuleAugmentationElement(decl, isGlobalAugmentation);
                     }
                     break;
-                case 267 /* ExportAssignment */:
-                case 268 /* ExportDeclaration */:
+                case 269 /* ExportAssignment */:
+                case 270 /* ExportDeclaration */:
                     grammarErrorOnFirstToken(node, ts.Diagnostics.Exports_and_export_assignments_are_not_permitted_in_module_augmentations);
                     break;
-                case 261 /* ImportEqualsDeclaration */:
-                case 262 /* ImportDeclaration */:
+                case 263 /* ImportEqualsDeclaration */:
+                case 264 /* ImportDeclaration */:
                     grammarErrorOnFirstToken(node, ts.Diagnostics.Imports_are_not_permitted_in_module_augmentations_Consider_moving_them_to_the_enclosing_external_module);
                     break;
-                case 199 /* BindingElement */:
-                case 250 /* VariableDeclaration */:
+                case 201 /* BindingElement */:
+                case 252 /* VariableDeclaration */:
                     var name = node.name;
                     if (ts.isBindingPattern(name)) {
                         for (var _c = 0, _d = name.elements; _c < _d.length; _c++) {
@@ -79394,12 +80896,12 @@
                         break;
                     }
                 // falls through
-                case 253 /* ClassDeclaration */:
-                case 256 /* EnumDeclaration */:
-                case 252 /* FunctionDeclaration */:
-                case 254 /* InterfaceDeclaration */:
-                case 257 /* ModuleDeclaration */:
-                case 255 /* TypeAliasDeclaration */:
+                case 255 /* ClassDeclaration */:
+                case 258 /* EnumDeclaration */:
+                case 254 /* FunctionDeclaration */:
+                case 256 /* InterfaceDeclaration */:
+                case 259 /* ModuleDeclaration */:
+                case 257 /* TypeAliasDeclaration */:
                     if (isGlobalAugmentation) {
                         return;
                     }
@@ -79420,20 +80922,20 @@
         }
         function getFirstNonModuleExportsIdentifier(node) {
             switch (node.kind) {
-                case 78 /* Identifier */:
+                case 79 /* Identifier */:
                     return node;
-                case 158 /* QualifiedName */:
+                case 159 /* QualifiedName */:
                     do {
                         node = node.left;
-                    } while (node.kind !== 78 /* Identifier */);
+                    } while (node.kind !== 79 /* Identifier */);
                     return node;
-                case 202 /* PropertyAccessExpression */:
+                case 204 /* PropertyAccessExpression */:
                     do {
                         if (ts.isModuleExportsAccessExpression(node.expression) && !ts.isPrivateIdentifier(node.name)) {
                             return node.name;
                         }
                         node = node.expression;
-                    } while (node.kind !== 78 /* Identifier */);
+                    } while (node.kind !== 79 /* Identifier */);
                     return node;
             }
         }
@@ -79447,9 +80949,9 @@
                 error(moduleName, ts.Diagnostics.String_literal_expected);
                 return false;
             }
-            var inAmbientExternalModule = node.parent.kind === 258 /* ModuleBlock */ && ts.isAmbientModule(node.parent.parent);
-            if (node.parent.kind !== 298 /* SourceFile */ && !inAmbientExternalModule) {
-                error(moduleName, node.kind === 268 /* ExportDeclaration */ ?
+            var inAmbientExternalModule = node.parent.kind === 260 /* ModuleBlock */ && ts.isAmbientModule(node.parent.parent);
+            if (node.parent.kind !== 300 /* SourceFile */ && !inAmbientExternalModule) {
+                error(moduleName, node.kind === 270 /* ExportDeclaration */ ?
                     ts.Diagnostics.Export_declarations_are_not_permitted_in_a_namespace :
                     ts.Diagnostics.Import_declarations_in_a_namespace_cannot_reference_a_module);
                 return false;
@@ -79484,14 +80986,14 @@
                     (symbol.flags & 788968 /* Type */ ? 788968 /* Type */ : 0) |
                     (symbol.flags & 1920 /* Namespace */ ? 1920 /* Namespace */ : 0);
                 if (target.flags & excludedMeanings) {
-                    var message = node.kind === 271 /* ExportSpecifier */ ?
+                    var message = node.kind === 273 /* ExportSpecifier */ ?
                         ts.Diagnostics.Export_declaration_conflicts_with_exported_declaration_of_0 :
                         ts.Diagnostics.Import_declaration_conflicts_with_local_declaration_of_0;
                     error(node, message, symbolToString(symbol));
                 }
                 // Don't allow to re-export something with no value side when `--isolatedModules` is set.
                 if (compilerOptions.isolatedModules
-                    && node.kind === 271 /* ExportSpecifier */
+                    && node.kind === 273 /* ExportSpecifier */
                     && !node.parent.parent.isTypeOnly
                     && !(target.flags & 111551 /* Value */)
                     && !(node.flags & 8388608 /* Ambient */)) {
@@ -79503,10 +81005,9 @@
             }
         }
         function checkImportBinding(node) {
-            checkCollisionWithRequireExportsInGeneratedCode(node, node.name);
-            checkCollisionWithGlobalPromiseInGeneratedCode(node, node.name);
+            checkCollisionsForDeclarationName(node, node.name);
             checkAliasSymbol(node);
-            if (node.kind === 266 /* ImportSpecifier */ &&
+            if (node.kind === 268 /* ImportSpecifier */ &&
                 ts.idText(node.propertyName || node.name) === "default" &&
                 compilerOptions.esModuleInterop &&
                 moduleKind !== ts.ModuleKind.System && moduleKind < ts.ModuleKind.ES2015) {
@@ -79528,7 +81029,7 @@
                         checkImportBinding(importClause);
                     }
                     if (importClause.namedBindings) {
-                        if (importClause.namedBindings.kind === 264 /* NamespaceImport */) {
+                        if (importClause.namedBindings.kind === 266 /* NamespaceImport */) {
                             checkImportBinding(importClause.namedBindings);
                             if (moduleKind !== ts.ModuleKind.System && moduleKind < ts.ModuleKind.ES2015 && compilerOptions.esModuleInterop) {
                                 // import * as ns from "foo";
@@ -79556,7 +81057,7 @@
                 if (ts.hasSyntacticModifier(node, 1 /* Export */)) {
                     markExportAsReferenced(node);
                 }
-                if (node.moduleReference.kind !== 273 /* ExternalModuleReference */) {
+                if (node.moduleReference.kind !== 275 /* ExternalModuleReference */) {
                     var target = resolveAlias(getSymbolOfNode(node));
                     if (target !== unknownSymbol) {
                         if (target.flags & 111551 /* Value */) {
@@ -79599,10 +81100,10 @@
                     // export { x, y }
                     // export { x, y } from "foo"
                     ts.forEach(node.exportClause.elements, checkExportSpecifier);
-                    var inAmbientExternalModule = node.parent.kind === 258 /* ModuleBlock */ && ts.isAmbientModule(node.parent.parent);
-                    var inAmbientNamespaceDeclaration = !inAmbientExternalModule && node.parent.kind === 258 /* ModuleBlock */ &&
+                    var inAmbientExternalModule = node.parent.kind === 260 /* ModuleBlock */ && ts.isAmbientModule(node.parent.parent);
+                    var inAmbientNamespaceDeclaration = !inAmbientExternalModule && node.parent.kind === 260 /* ModuleBlock */ &&
                         !node.moduleSpecifier && node.flags & 8388608 /* Ambient */;
-                    if (node.parent.kind !== 298 /* SourceFile */ && !inAmbientExternalModule && !inAmbientNamespaceDeclaration) {
+                    if (node.parent.kind !== 300 /* SourceFile */ && !inAmbientExternalModule && !inAmbientNamespaceDeclaration) {
                         error(node, ts.Diagnostics.Export_declarations_are_not_permitted_in_a_namespace);
                     }
                 }
@@ -79635,14 +81136,14 @@
         }
         function checkGrammarExportDeclaration(node) {
             var _a;
-            var isTypeOnlyExportStar = node.isTypeOnly && ((_a = node.exportClause) === null || _a === void 0 ? void 0 : _a.kind) !== 269 /* NamedExports */;
+            var isTypeOnlyExportStar = node.isTypeOnly && ((_a = node.exportClause) === null || _a === void 0 ? void 0 : _a.kind) !== 271 /* NamedExports */;
             if (isTypeOnlyExportStar) {
                 grammarErrorOnNode(node, ts.Diagnostics.Only_named_exports_may_use_export_type);
             }
             return !isTypeOnlyExportStar;
         }
         function checkGrammarModuleElementContext(node, errorMessage) {
-            var isInAppropriateContext = node.parent.kind === 298 /* SourceFile */ || node.parent.kind === 258 /* ModuleBlock */ || node.parent.kind === 257 /* ModuleDeclaration */;
+            var isInAppropriateContext = node.parent.kind === 300 /* SourceFile */ || node.parent.kind === 260 /* ModuleBlock */ || node.parent.kind === 259 /* ModuleDeclaration */;
             if (!isInAppropriateContext) {
                 grammarErrorOnFirstToken(node, errorMessage);
             }
@@ -79720,8 +81221,8 @@
                 // If we hit an export assignment in an illegal context, just bail out to avoid cascading errors.
                 return;
             }
-            var container = node.parent.kind === 298 /* SourceFile */ ? node.parent : node.parent.parent;
-            if (container.kind === 257 /* ModuleDeclaration */ && !ts.isAmbientModule(container)) {
+            var container = node.parent.kind === 300 /* SourceFile */ ? node.parent : node.parent.parent;
+            if (container.kind === 259 /* ModuleDeclaration */ && !ts.isAmbientModule(container)) {
                 if (node.isExportEquals) {
                     error(node, ts.Diagnostics.An_export_assignment_cannot_be_used_in_a_namespace);
                 }
@@ -79734,7 +81235,7 @@
             if (!checkGrammarDecoratorsAndModifiers(node) && ts.hasEffectiveModifiers(node)) {
                 grammarErrorOnFirstToken(node, ts.Diagnostics.An_export_assignment_cannot_have_modifiers);
             }
-            if (node.expression.kind === 78 /* Identifier */) {
+            if (node.expression.kind === 79 /* Identifier */) {
                 var id = node.expression;
                 var sym = resolveEntityName(id, 67108863 /* All */, /*ignoreErrors*/ true, /*dontResolveAlias*/ true, node);
                 if (sym) {
@@ -79845,171 +81346,173 @@
                 // Only bother checking on a few construct kinds.  We don't want to be excessively
                 // hitting the cancellation token on every node we check.
                 switch (kind) {
-                    case 257 /* ModuleDeclaration */:
-                    case 253 /* ClassDeclaration */:
-                    case 254 /* InterfaceDeclaration */:
-                    case 252 /* FunctionDeclaration */:
+                    case 259 /* ModuleDeclaration */:
+                    case 255 /* ClassDeclaration */:
+                    case 256 /* InterfaceDeclaration */:
+                    case 254 /* FunctionDeclaration */:
                         cancellationToken.throwIfCancellationRequested();
                 }
             }
-            if (kind >= 233 /* FirstStatement */ && kind <= 249 /* LastStatement */ && node.flowNode && !isReachableFlowNode(node.flowNode)) {
+            if (kind >= 235 /* FirstStatement */ && kind <= 251 /* LastStatement */ && node.flowNode && !isReachableFlowNode(node.flowNode)) {
                 errorOrSuggestion(compilerOptions.allowUnreachableCode === false, node, ts.Diagnostics.Unreachable_code_detected);
             }
             switch (kind) {
-                case 160 /* TypeParameter */:
+                case 161 /* TypeParameter */:
                     return checkTypeParameter(node);
-                case 161 /* Parameter */:
+                case 162 /* Parameter */:
                     return checkParameter(node);
-                case 164 /* PropertyDeclaration */:
+                case 165 /* PropertyDeclaration */:
                     return checkPropertyDeclaration(node);
-                case 163 /* PropertySignature */:
+                case 164 /* PropertySignature */:
                     return checkPropertySignature(node);
-                case 176 /* ConstructorType */:
-                case 175 /* FunctionType */:
-                case 170 /* CallSignature */:
-                case 171 /* ConstructSignature */:
-                case 172 /* IndexSignature */:
+                case 178 /* ConstructorType */:
+                case 177 /* FunctionType */:
+                case 172 /* CallSignature */:
+                case 173 /* ConstructSignature */:
+                case 174 /* IndexSignature */:
                     return checkSignatureDeclaration(node);
-                case 166 /* MethodDeclaration */:
-                case 165 /* MethodSignature */:
+                case 167 /* MethodDeclaration */:
+                case 166 /* MethodSignature */:
                     return checkMethodDeclaration(node);
-                case 167 /* Constructor */:
+                case 168 /* ClassStaticBlockDeclaration */:
+                    return checkClassStaticBlockDeclaration(node);
+                case 169 /* Constructor */:
                     return checkConstructorDeclaration(node);
-                case 168 /* GetAccessor */:
-                case 169 /* SetAccessor */:
+                case 170 /* GetAccessor */:
+                case 171 /* SetAccessor */:
                     return checkAccessorDeclaration(node);
-                case 174 /* TypeReference */:
+                case 176 /* TypeReference */:
                     return checkTypeReferenceNode(node);
-                case 173 /* TypePredicate */:
+                case 175 /* TypePredicate */:
                     return checkTypePredicate(node);
-                case 177 /* TypeQuery */:
+                case 179 /* TypeQuery */:
                     return checkTypeQuery(node);
-                case 178 /* TypeLiteral */:
+                case 180 /* TypeLiteral */:
                     return checkTypeLiteral(node);
-                case 179 /* ArrayType */:
+                case 181 /* ArrayType */:
                     return checkArrayType(node);
-                case 180 /* TupleType */:
+                case 182 /* TupleType */:
                     return checkTupleType(node);
-                case 183 /* UnionType */:
-                case 184 /* IntersectionType */:
+                case 185 /* UnionType */:
+                case 186 /* IntersectionType */:
                     return checkUnionOrIntersectionType(node);
-                case 187 /* ParenthesizedType */:
-                case 181 /* OptionalType */:
-                case 182 /* RestType */:
+                case 189 /* ParenthesizedType */:
+                case 183 /* OptionalType */:
+                case 184 /* RestType */:
                     return checkSourceElement(node.type);
-                case 188 /* ThisType */:
+                case 190 /* ThisType */:
                     return checkThisType(node);
-                case 189 /* TypeOperator */:
+                case 191 /* TypeOperator */:
                     return checkTypeOperator(node);
-                case 185 /* ConditionalType */:
+                case 187 /* ConditionalType */:
                     return checkConditionalType(node);
-                case 186 /* InferType */:
+                case 188 /* InferType */:
                     return checkInferType(node);
-                case 194 /* TemplateLiteralType */:
+                case 196 /* TemplateLiteralType */:
                     return checkTemplateLiteralType(node);
-                case 196 /* ImportType */:
+                case 198 /* ImportType */:
                     return checkImportType(node);
-                case 193 /* NamedTupleMember */:
+                case 195 /* NamedTupleMember */:
                     return checkNamedTupleMember(node);
-                case 318 /* JSDocAugmentsTag */:
+                case 323 /* JSDocAugmentsTag */:
                     return checkJSDocAugmentsTag(node);
-                case 319 /* JSDocImplementsTag */:
+                case 324 /* JSDocImplementsTag */:
                     return checkJSDocImplementsTag(node);
-                case 335 /* JSDocTypedefTag */:
-                case 328 /* JSDocCallbackTag */:
-                case 329 /* JSDocEnumTag */:
+                case 340 /* JSDocTypedefTag */:
+                case 333 /* JSDocCallbackTag */:
+                case 334 /* JSDocEnumTag */:
                     return checkJSDocTypeAliasTag(node);
-                case 334 /* JSDocTemplateTag */:
+                case 339 /* JSDocTemplateTag */:
                     return checkJSDocTemplateTag(node);
-                case 333 /* JSDocTypeTag */:
+                case 338 /* JSDocTypeTag */:
                     return checkJSDocTypeTag(node);
-                case 330 /* JSDocParameterTag */:
+                case 335 /* JSDocParameterTag */:
                     return checkJSDocParameterTag(node);
-                case 337 /* JSDocPropertyTag */:
+                case 342 /* JSDocPropertyTag */:
                     return checkJSDocPropertyTag(node);
-                case 309 /* JSDocFunctionType */:
+                case 312 /* JSDocFunctionType */:
                     checkJSDocFunctionType(node);
                 // falls through
-                case 307 /* JSDocNonNullableType */:
-                case 306 /* JSDocNullableType */:
-                case 304 /* JSDocAllType */:
-                case 305 /* JSDocUnknownType */:
-                case 314 /* JSDocTypeLiteral */:
+                case 310 /* JSDocNonNullableType */:
+                case 309 /* JSDocNullableType */:
+                case 307 /* JSDocAllType */:
+                case 308 /* JSDocUnknownType */:
+                case 317 /* JSDocTypeLiteral */:
                     checkJSDocTypeIsInJsFile(node);
                     ts.forEachChild(node, checkSourceElement);
                     return;
-                case 310 /* JSDocVariadicType */:
+                case 313 /* JSDocVariadicType */:
                     checkJSDocVariadicType(node);
                     return;
-                case 302 /* JSDocTypeExpression */:
+                case 304 /* JSDocTypeExpression */:
                     return checkSourceElement(node.type);
-                case 190 /* IndexedAccessType */:
+                case 192 /* IndexedAccessType */:
                     return checkIndexedAccessType(node);
-                case 191 /* MappedType */:
+                case 193 /* MappedType */:
                     return checkMappedType(node);
-                case 252 /* FunctionDeclaration */:
+                case 254 /* FunctionDeclaration */:
                     return checkFunctionDeclaration(node);
-                case 231 /* Block */:
-                case 258 /* ModuleBlock */:
+                case 233 /* Block */:
+                case 260 /* ModuleBlock */:
                     return checkBlock(node);
-                case 233 /* VariableStatement */:
+                case 235 /* VariableStatement */:
                     return checkVariableStatement(node);
-                case 234 /* ExpressionStatement */:
+                case 236 /* ExpressionStatement */:
                     return checkExpressionStatement(node);
-                case 235 /* IfStatement */:
+                case 237 /* IfStatement */:
                     return checkIfStatement(node);
-                case 236 /* DoStatement */:
+                case 238 /* DoStatement */:
                     return checkDoStatement(node);
-                case 237 /* WhileStatement */:
+                case 239 /* WhileStatement */:
                     return checkWhileStatement(node);
-                case 238 /* ForStatement */:
+                case 240 /* ForStatement */:
                     return checkForStatement(node);
-                case 239 /* ForInStatement */:
+                case 241 /* ForInStatement */:
                     return checkForInStatement(node);
-                case 240 /* ForOfStatement */:
+                case 242 /* ForOfStatement */:
                     return checkForOfStatement(node);
-                case 241 /* ContinueStatement */:
-                case 242 /* BreakStatement */:
+                case 243 /* ContinueStatement */:
+                case 244 /* BreakStatement */:
                     return checkBreakOrContinueStatement(node);
-                case 243 /* ReturnStatement */:
+                case 245 /* ReturnStatement */:
                     return checkReturnStatement(node);
-                case 244 /* WithStatement */:
+                case 246 /* WithStatement */:
                     return checkWithStatement(node);
-                case 245 /* SwitchStatement */:
+                case 247 /* SwitchStatement */:
                     return checkSwitchStatement(node);
-                case 246 /* LabeledStatement */:
+                case 248 /* LabeledStatement */:
                     return checkLabeledStatement(node);
-                case 247 /* ThrowStatement */:
+                case 249 /* ThrowStatement */:
                     return checkThrowStatement(node);
-                case 248 /* TryStatement */:
+                case 250 /* TryStatement */:
                     return checkTryStatement(node);
-                case 250 /* VariableDeclaration */:
+                case 252 /* VariableDeclaration */:
                     return checkVariableDeclaration(node);
-                case 199 /* BindingElement */:
+                case 201 /* BindingElement */:
                     return checkBindingElement(node);
-                case 253 /* ClassDeclaration */:
+                case 255 /* ClassDeclaration */:
                     return checkClassDeclaration(node);
-                case 254 /* InterfaceDeclaration */:
+                case 256 /* InterfaceDeclaration */:
                     return checkInterfaceDeclaration(node);
-                case 255 /* TypeAliasDeclaration */:
+                case 257 /* TypeAliasDeclaration */:
                     return checkTypeAliasDeclaration(node);
-                case 256 /* EnumDeclaration */:
+                case 258 /* EnumDeclaration */:
                     return checkEnumDeclaration(node);
-                case 257 /* ModuleDeclaration */:
+                case 259 /* ModuleDeclaration */:
                     return checkModuleDeclaration(node);
-                case 262 /* ImportDeclaration */:
+                case 264 /* ImportDeclaration */:
                     return checkImportDeclaration(node);
-                case 261 /* ImportEqualsDeclaration */:
+                case 263 /* ImportEqualsDeclaration */:
                     return checkImportEqualsDeclaration(node);
-                case 268 /* ExportDeclaration */:
+                case 270 /* ExportDeclaration */:
                     return checkExportDeclaration(node);
-                case 267 /* ExportAssignment */:
+                case 269 /* ExportAssignment */:
                     return checkExportAssignment(node);
-                case 232 /* EmptyStatement */:
-                case 249 /* DebuggerStatement */:
+                case 234 /* EmptyStatement */:
+                case 251 /* DebuggerStatement */:
                     checkGrammarStatementInAmbientContext(node);
                     return;
-                case 272 /* MissingDeclaration */:
+                case 274 /* MissingDeclaration */:
                     return checkMissingDeclaration(node);
             }
         }
@@ -80108,33 +81611,33 @@
             currentNode = node;
             instantiationCount = 0;
             switch (node.kind) {
-                case 204 /* CallExpression */:
-                case 205 /* NewExpression */:
-                case 206 /* TaggedTemplateExpression */:
-                case 162 /* Decorator */:
-                case 276 /* JsxOpeningElement */:
+                case 206 /* CallExpression */:
+                case 207 /* NewExpression */:
+                case 208 /* TaggedTemplateExpression */:
+                case 163 /* Decorator */:
+                case 278 /* JsxOpeningElement */:
                     // These node kinds are deferred checked when overload resolution fails
                     // To save on work, we ensure the arguments are checked just once, in
                     // a deferred way
                     resolveUntypedCall(node);
                     break;
-                case 209 /* FunctionExpression */:
-                case 210 /* ArrowFunction */:
-                case 166 /* MethodDeclaration */:
-                case 165 /* MethodSignature */:
+                case 211 /* FunctionExpression */:
+                case 212 /* ArrowFunction */:
+                case 167 /* MethodDeclaration */:
+                case 166 /* MethodSignature */:
                     checkFunctionExpressionOrObjectLiteralMethodDeferred(node);
                     break;
-                case 168 /* GetAccessor */:
-                case 169 /* SetAccessor */:
+                case 170 /* GetAccessor */:
+                case 171 /* SetAccessor */:
                     checkAccessorDeclaration(node);
                     break;
-                case 222 /* ClassExpression */:
+                case 224 /* ClassExpression */:
                     checkClassExpressionDeferred(node);
                     break;
-                case 275 /* JsxSelfClosingElement */:
+                case 277 /* JsxSelfClosingElement */:
                     checkJsxSelfClosingElementDeferred(node);
                     break;
-                case 274 /* JsxElement */:
+                case 276 /* JsxElement */:
                     checkJsxElementDeferred(node);
                     break;
             }
@@ -80177,6 +81680,7 @@
                 ts.clear(potentialThisCollisions);
                 ts.clear(potentialNewTargetCollisions);
                 ts.clear(potentialWeakMapSetCollisions);
+                ts.clear(potentialReflectCollisions);
                 ts.forEach(node.statements, checkSourceElement);
                 checkSourceElement(node.endOfFileToken);
                 checkDeferredNodes(node);
@@ -80210,6 +81714,10 @@
                     ts.forEach(potentialWeakMapSetCollisions, checkWeakMapSetCollision);
                     ts.clear(potentialWeakMapSetCollisions);
                 }
+                if (potentialReflectCollisions.length) {
+                    ts.forEach(potentialReflectCollisions, checkReflectCollision);
+                    ts.clear(potentialReflectCollisions);
+                }
                 links.flags |= 1 /* TypeChecked */;
             }
         }
@@ -80270,7 +81778,7 @@
                 return [];
             }
             var symbols = ts.createSymbolTable();
-            var isStatic = false;
+            var isStaticSymbol = false;
             populateSymbols();
             symbols.delete("this" /* This */); // Not a symbol, a keyword
             return symbolsToArray(symbols);
@@ -80280,17 +81788,17 @@
                         copySymbols(location.locals, meaning);
                     }
                     switch (location.kind) {
-                        case 298 /* SourceFile */:
+                        case 300 /* SourceFile */:
                             if (!ts.isExternalModule(location))
                                 break;
                         // falls through
-                        case 257 /* ModuleDeclaration */:
+                        case 259 /* ModuleDeclaration */:
                             copyLocallyVisibleExportSymbols(getSymbolOfNode(location).exports, meaning & 2623475 /* ModuleMember */);
                             break;
-                        case 256 /* EnumDeclaration */:
+                        case 258 /* EnumDeclaration */:
                             copySymbols(getSymbolOfNode(location).exports, meaning & 8 /* EnumMember */);
                             break;
-                        case 222 /* ClassExpression */:
+                        case 224 /* ClassExpression */:
                             var className = location.name;
                             if (className) {
                                 copySymbol(location.symbol, meaning);
@@ -80298,17 +81806,17 @@
                         // this fall-through is necessary because we would like to handle
                         // type parameter inside class expression similar to how we handle it in classDeclaration and interface Declaration.
                         // falls through
-                        case 253 /* ClassDeclaration */:
-                        case 254 /* InterfaceDeclaration */:
+                        case 255 /* ClassDeclaration */:
+                        case 256 /* InterfaceDeclaration */:
                             // If we didn't come from static member of class or interface,
                             // add the type parameters into the symbol table
                             // (type parameters of classDeclaration/classExpression and interface are in member property of the symbol.
                             // Note: that the memberFlags come from previous iteration.
-                            if (!isStatic) {
+                            if (!isStaticSymbol) {
                                 copySymbols(getMembersOfSymbol(getSymbolOfNode(location)), meaning & 788968 /* Type */);
                             }
                             break;
-                        case 209 /* FunctionExpression */:
+                        case 211 /* FunctionExpression */:
                             var funcName = location.name;
                             if (funcName) {
                                 copySymbol(location.symbol, meaning);
@@ -80318,7 +81826,7 @@
                     if (ts.introducesArgumentsExoticObject(location)) {
                         copySymbol(argumentsSymbol, meaning);
                     }
-                    isStatic = ts.hasSyntacticModifier(location, 32 /* Static */);
+                    isStaticSymbol = ts.isStatic(location);
                     location = location.parent;
                 }
                 copySymbols(globals, meaning);
@@ -80352,7 +81860,7 @@
                 if (meaning) {
                     source.forEach(function (symbol) {
                         // Similar condition as in `resolveNameHelper`
-                        if (!ts.getDeclarationOfKind(symbol, 271 /* ExportSpecifier */) && !ts.getDeclarationOfKind(symbol, 270 /* NamespaceExport */)) {
+                        if (!ts.getDeclarationOfKind(symbol, 273 /* ExportSpecifier */) && !ts.getDeclarationOfKind(symbol, 272 /* NamespaceExport */)) {
                             copySymbol(symbol, meaning);
                         }
                     });
@@ -80360,25 +81868,25 @@
             }
         }
         function isTypeDeclarationName(name) {
-            return name.kind === 78 /* Identifier */ &&
+            return name.kind === 79 /* Identifier */ &&
                 isTypeDeclaration(name.parent) &&
                 ts.getNameOfDeclaration(name.parent) === name;
         }
         function isTypeDeclaration(node) {
             switch (node.kind) {
-                case 160 /* TypeParameter */:
-                case 253 /* ClassDeclaration */:
-                case 254 /* InterfaceDeclaration */:
-                case 255 /* TypeAliasDeclaration */:
-                case 256 /* EnumDeclaration */:
-                case 335 /* JSDocTypedefTag */:
-                case 328 /* JSDocCallbackTag */:
-                case 329 /* JSDocEnumTag */:
+                case 161 /* TypeParameter */:
+                case 255 /* ClassDeclaration */:
+                case 256 /* InterfaceDeclaration */:
+                case 257 /* TypeAliasDeclaration */:
+                case 258 /* EnumDeclaration */:
+                case 340 /* JSDocTypedefTag */:
+                case 333 /* JSDocCallbackTag */:
+                case 334 /* JSDocEnumTag */:
                     return true;
-                case 263 /* ImportClause */:
+                case 265 /* ImportClause */:
                     return node.isTypeOnly;
-                case 266 /* ImportSpecifier */:
-                case 271 /* ExportSpecifier */:
+                case 268 /* ImportSpecifier */:
+                case 273 /* ExportSpecifier */:
                     return node.parent.parent.isTypeOnly;
                 default:
                     return false;
@@ -80386,25 +81894,16 @@
         }
         // True if the given identifier is part of a type reference
         function isTypeReferenceIdentifier(node) {
-            while (node.parent.kind === 158 /* QualifiedName */) {
+            while (node.parent.kind === 159 /* QualifiedName */) {
                 node = node.parent;
             }
-            return node.parent.kind === 174 /* TypeReference */;
+            return node.parent.kind === 176 /* TypeReference */;
         }
         function isHeritageClauseElementIdentifier(node) {
-            while (node.parent.kind === 202 /* PropertyAccessExpression */) {
+            while (node.parent.kind === 204 /* PropertyAccessExpression */) {
                 node = node.parent;
             }
-            return node.parent.kind === 224 /* ExpressionWithTypeArguments */;
-        }
-        function getJSDocEntryNameReference(node) {
-            while (node.parent.kind === 158 /* QualifiedName */) {
-                node = node.parent;
-            }
-            while (node.parent.kind === 202 /* PropertyAccessExpression */) {
-                node = node.parent;
-            }
-            return ts.isJSDocNameReference(node.parent) ? node.parent : undefined;
+            return node.parent.kind === 226 /* ExpressionWithTypeArguments */;
         }
         function forEachEnclosingClass(node, callback) {
             var result;
@@ -80432,13 +81931,13 @@
             return !!forEachEnclosingClass(node, function (n) { return n === classDeclaration; });
         }
         function getLeftSideOfImportEqualsOrExportAssignment(nodeOnRightSide) {
-            while (nodeOnRightSide.parent.kind === 158 /* QualifiedName */) {
+            while (nodeOnRightSide.parent.kind === 159 /* QualifiedName */) {
                 nodeOnRightSide = nodeOnRightSide.parent;
             }
-            if (nodeOnRightSide.parent.kind === 261 /* ImportEqualsDeclaration */) {
+            if (nodeOnRightSide.parent.kind === 263 /* ImportEqualsDeclaration */) {
                 return nodeOnRightSide.parent.moduleReference === nodeOnRightSide ? nodeOnRightSide.parent : undefined;
             }
-            if (nodeOnRightSide.parent.kind === 267 /* ExportAssignment */) {
+            if (nodeOnRightSide.parent.kind === 269 /* ExportAssignment */) {
                 return nodeOnRightSide.parent.expression === nodeOnRightSide ? nodeOnRightSide.parent : undefined;
             }
             return undefined;
@@ -80464,7 +81963,7 @@
                 node = parent;
                 parent = parent.parent;
             }
-            if (parent && parent.kind === 196 /* ImportType */ && parent.qualifier === node) {
+            if (parent && parent.kind === 198 /* ImportType */ && parent.qualifier === node) {
                 return parent;
             }
             return undefined;
@@ -80474,17 +81973,17 @@
                 return getSymbolOfNode(name.parent);
             }
             if (ts.isInJSFile(name) &&
-                name.parent.kind === 202 /* PropertyAccessExpression */ &&
+                name.parent.kind === 204 /* PropertyAccessExpression */ &&
                 name.parent === name.parent.parent.left) {
                 // Check if this is a special property assignment
-                if (!ts.isPrivateIdentifier(name)) {
+                if (!ts.isPrivateIdentifier(name) && !ts.isJSDocMemberName(name)) {
                     var specialPropertyAssignmentSymbol = getSpecialPropertyAssignmentSymbolFromEntityName(name);
                     if (specialPropertyAssignmentSymbol) {
                         return specialPropertyAssignmentSymbol;
                     }
                 }
             }
-            if (name.parent.kind === 267 /* ExportAssignment */ && ts.isEntityNameExpression(name)) {
+            if (name.parent.kind === 269 /* ExportAssignment */ && ts.isEntityNameExpression(name)) {
                 // Even an entity name expression that doesn't resolve as an entityname may still typecheck as a property access expression
                 var success = resolveEntityName(name, 
                 /*all meanings*/ 111551 /* Value */ | 788968 /* Type */ | 1920 /* Namespace */ | 2097152 /* Alias */, /*ignoreErrors*/ true);
@@ -80492,13 +81991,13 @@
                     return success;
                 }
             }
-            else if (!ts.isPropertyAccessExpression(name) && !ts.isPrivateIdentifier(name) && isInRightSideOfImportOrExportAssignment(name)) {
+            else if (ts.isEntityName(name) && isInRightSideOfImportOrExportAssignment(name)) {
                 // Since we already checked for ExportAssignment, this really could only be an Import
-                var importEqualsDeclaration = ts.getAncestor(name, 261 /* ImportEqualsDeclaration */);
+                var importEqualsDeclaration = ts.getAncestor(name, 263 /* ImportEqualsDeclaration */);
                 ts.Debug.assert(importEqualsDeclaration !== undefined);
                 return getSymbolOfPartOfRightHandSideOfImportEquals(name, /*dontResolveAlias*/ true);
             }
-            if (!ts.isPropertyAccessExpression(name) && !ts.isPrivateIdentifier(name)) {
+            if (ts.isEntityName(name)) {
                 var possibleImportNode = isImportTypeQualifierPart(name);
                 if (possibleImportNode) {
                     getTypeFromTypeNode(possibleImportNode);
@@ -80506,13 +82005,13 @@
                     return sym === unknownSymbol ? undefined : sym;
                 }
             }
-            while (ts.isRightSideOfQualifiedNameOrPropertyAccess(name)) {
+            while (ts.isRightSideOfQualifiedNameOrPropertyAccessOrJSDocMemberName(name)) {
                 name = name.parent;
             }
             if (isHeritageClauseElementIdentifier(name)) {
                 var meaning = 0 /* None */;
                 // In an interface or class, we're definitely interested in a type.
-                if (name.parent.kind === 224 /* ExpressionWithTypeArguments */) {
+                if (name.parent.kind === 226 /* ExpressionWithTypeArguments */) {
                     meaning = 788968 /* Type */;
                     // In a class 'extends' clause we are also looking for a value.
                     if (ts.isExpressionWithTypeArgumentsInClassExtendsClause(name.parent)) {
@@ -80528,10 +82027,10 @@
                     return entityNameSymbol;
                 }
             }
-            if (name.parent.kind === 330 /* JSDocParameterTag */) {
+            if (name.parent.kind === 335 /* JSDocParameterTag */) {
                 return ts.getParameterSymbolFromJSDoc(name.parent);
             }
-            if (name.parent.kind === 160 /* TypeParameter */ && name.parent.parent.kind === 334 /* JSDocTemplateTag */) {
+            if (name.parent.kind === 161 /* TypeParameter */ && name.parent.parent.kind === 339 /* JSDocTemplateTag */) {
                 ts.Debug.assert(!ts.isInJSFile(name)); // Otherwise `isDeclarationName` would have been true.
                 var typeParameter = ts.getTypeParameterFromJsDoc(name.parent);
                 return typeParameter && typeParameter.symbol;
@@ -80541,63 +82040,81 @@
                     // Missing entity name.
                     return undefined;
                 }
-                if (name.kind === 78 /* Identifier */) {
+                var isJSDoc_1 = ts.findAncestor(name, ts.or(ts.isJSDocLinkLike, ts.isJSDocNameReference, ts.isJSDocMemberName));
+                var meaning = isJSDoc_1 ? 788968 /* Type */ | 1920 /* Namespace */ | 111551 /* Value */ : 111551 /* Value */;
+                if (name.kind === 79 /* Identifier */) {
                     if (ts.isJSXTagName(name) && isJsxIntrinsicIdentifier(name)) {
                         var symbol = getIntrinsicTagSymbol(name.parent);
                         return symbol === unknownSymbol ? undefined : symbol;
                     }
-                    return resolveEntityName(name, 111551 /* Value */, /*ignoreErrors*/ false, /*dontResolveAlias*/ true);
+                    var result = resolveEntityName(name, meaning, /*ignoreErrors*/ false, /*dontResolveAlias*/ !isJSDoc_1, ts.getHostSignatureFromJSDoc(name));
+                    if (!result && isJSDoc_1) {
+                        var container = ts.findAncestor(name, ts.or(ts.isClassLike, ts.isInterfaceDeclaration));
+                        if (container) {
+                            return resolveJSDocMemberName(name, getSymbolOfNode(container));
+                        }
+                    }
+                    return result;
                 }
-                else if (name.kind === 202 /* PropertyAccessExpression */ || name.kind === 158 /* QualifiedName */) {
+                else if (name.kind === 204 /* PropertyAccessExpression */ || name.kind === 159 /* QualifiedName */) {
                     var links = getNodeLinks(name);
                     if (links.resolvedSymbol) {
                         return links.resolvedSymbol;
                     }
-                    if (name.kind === 202 /* PropertyAccessExpression */) {
+                    if (name.kind === 204 /* PropertyAccessExpression */) {
                         checkPropertyAccessExpression(name, 0 /* Normal */);
                     }
                     else {
                         checkQualifiedName(name, 0 /* Normal */);
                     }
+                    if (!links.resolvedSymbol && isJSDoc_1 && ts.isQualifiedName(name)) {
+                        return resolveJSDocMemberName(name);
+                    }
                     return links.resolvedSymbol;
                 }
+                else if (ts.isJSDocMemberName(name)) {
+                    return resolveJSDocMemberName(name);
+                }
             }
             else if (isTypeReferenceIdentifier(name)) {
-                var meaning = name.parent.kind === 174 /* TypeReference */ ? 788968 /* Type */ : 1920 /* Namespace */;
+                var meaning = name.parent.kind === 176 /* TypeReference */ ? 788968 /* Type */ : 1920 /* Namespace */;
                 return resolveEntityName(name, meaning, /*ignoreErrors*/ false, /*dontResolveAlias*/ true);
             }
-            var jsdocReference = getJSDocEntryNameReference(name);
-            if (jsdocReference || ts.isJSDocLink(name.parent)) {
-                var meaning = 788968 /* Type */ | 1920 /* Namespace */ | 111551 /* Value */;
-                var symbol = resolveEntityName(name, meaning, /*ignoreErrors*/ false, /*dontResolveAlias*/ false, ts.getHostSignatureFromJSDoc(name));
-                if (symbol) {
-                    return symbol;
-                }
-                else if (ts.isQualifiedName(name) && ts.isIdentifier(name.left)) {
-                    // resolve C.m as a static member first
-                    var links = getNodeLinks(name);
-                    if (links.resolvedSymbol) {
-                        return links.resolvedSymbol;
-                    }
-                    checkQualifiedName(name, 0 /* Normal */);
-                    if (links.resolvedSymbol) {
-                        return links.resolvedSymbol;
-                    }
-                    // then resolve it as an instance member
-                    var s = resolveEntityName(name.left, meaning, /*ignoreErrors*/ false);
-                    if (s) {
-                        var t = getDeclaredTypeOfSymbol(s);
-                        return getPropertyOfType(t, name.right.escapedText);
-                    }
-                }
-            }
-            if (name.parent.kind === 173 /* TypePredicate */) {
+            if (name.parent.kind === 175 /* TypePredicate */) {
                 return resolveEntityName(name, /*meaning*/ 1 /* FunctionScopedVariable */);
             }
             return undefined;
         }
+        /**
+         * Recursively resolve entity names and jsdoc instance references:
+         * 1. K#m as K.prototype.m for a class (or other value) K
+         * 2. K.m as K.prototype.m
+         * 3. I.m as I.m for a type I, or any other I.m that fails to resolve in (1) or (2)
+         *
+         * For unqualified names, a container K may be provided as a second argument.
+         */
+        function resolveJSDocMemberName(name, container) {
+            if (ts.isEntityName(name)) {
+                // resolve static values first
+                var meaning = 788968 /* Type */ | 1920 /* Namespace */ | 111551 /* Value */;
+                var symbol = resolveEntityName(name, meaning, /*ignoreErrors*/ false, /*dontResolveAlias*/ true, ts.getHostSignatureFromJSDoc(name));
+                if (!symbol && ts.isIdentifier(name) && container) {
+                    symbol = getMergedSymbol(getSymbol(getExportsOfSymbol(container), name.escapedText, meaning));
+                }
+                if (symbol) {
+                    return symbol;
+                }
+            }
+            var left = ts.isIdentifier(name) ? container : resolveJSDocMemberName(name.left);
+            var right = ts.isIdentifier(name) ? name.escapedText : name.right.escapedText;
+            if (left) {
+                var proto = left.flags & 111551 /* Value */ && getPropertyOfType(getTypeOfSymbol(left), "prototype");
+                var t = proto ? getTypeOfSymbol(proto) : getDeclaredTypeOfSymbol(left);
+                return getPropertyOfType(t, right);
+            }
+        }
         function getSymbolAtLocation(node, ignoreErrors) {
-            if (node.kind === 298 /* SourceFile */) {
+            if (node.kind === 300 /* SourceFile */) {
                 return ts.isExternalModule(node) ? getMergedSymbol(node.symbol) : undefined;
             }
             var parent = node.parent;
@@ -80616,12 +82133,12 @@
             else if (ts.isLiteralComputedPropertyDeclarationName(node)) {
                 return getSymbolOfNode(parent.parent);
             }
-            if (node.kind === 78 /* Identifier */) {
+            if (node.kind === 79 /* Identifier */) {
                 if (isInRightSideOfImportOrExportAssignment(node)) {
                     return getSymbolOfNameOrPropertyAccessExpression(node);
                 }
-                else if (parent.kind === 199 /* BindingElement */ &&
-                    grandParent.kind === 197 /* ObjectBindingPattern */ &&
+                else if (parent.kind === 201 /* BindingElement */ &&
+                    grandParent.kind === 199 /* ObjectBindingPattern */ &&
                     node === parent.propertyName) {
                     var typeOfPattern = getTypeOfNode(grandParent);
                     var propertyDeclaration = getPropertyOfType(typeOfPattern, node.escapedText);
@@ -80629,14 +82146,24 @@
                         return propertyDeclaration;
                     }
                 }
+                else if (ts.isMetaProperty(parent)) {
+                    var parentType = getTypeOfNode(parent);
+                    var propertyDeclaration = getPropertyOfType(parentType, node.escapedText);
+                    if (propertyDeclaration) {
+                        return propertyDeclaration;
+                    }
+                    if (parent.keywordToken === 103 /* NewKeyword */) {
+                        return checkNewTargetMetaProperty(parent).symbol;
+                    }
+                }
             }
             switch (node.kind) {
-                case 78 /* Identifier */:
-                case 79 /* PrivateIdentifier */:
-                case 202 /* PropertyAccessExpression */:
-                case 158 /* QualifiedName */:
+                case 79 /* Identifier */:
+                case 80 /* PrivateIdentifier */:
+                case 204 /* PropertyAccessExpression */:
+                case 159 /* QualifiedName */:
                     return getSymbolOfNameOrPropertyAccessExpression(node);
-                case 107 /* ThisKeyword */:
+                case 108 /* ThisKeyword */:
                     var container = ts.getThisContainer(node, /*includeArrowFunctions*/ false);
                     if (ts.isFunctionLike(container)) {
                         var sig = getSignatureFromDeclaration(container);
@@ -80648,14 +82175,14 @@
                         return checkExpression(node).symbol;
                     }
                 // falls through
-                case 188 /* ThisType */:
+                case 190 /* ThisType */:
                     return getTypeFromThisTypeNode(node).symbol;
-                case 105 /* SuperKeyword */:
+                case 106 /* SuperKeyword */:
                     return checkExpression(node).symbol;
-                case 132 /* ConstructorKeyword */:
+                case 133 /* ConstructorKeyword */:
                     // constructor keyword for an overload, should take us to the definition if it exist
                     var constructorDeclaration = node.parent;
-                    if (constructorDeclaration && constructorDeclaration.kind === 167 /* Constructor */) {
+                    if (constructorDeclaration && constructorDeclaration.kind === 169 /* Constructor */) {
                         return constructorDeclaration.parent.symbol;
                     }
                     return undefined;
@@ -80666,7 +82193,7 @@
                     // 3). Dynamic import call or require in javascript
                     // 4). type A = import("./f/*gotToDefinitionHere*/oo")
                     if ((ts.isExternalModuleImportEqualsDeclaration(node.parent.parent) && ts.getExternalModuleImportEqualsDeclarationExpression(node.parent.parent) === node) ||
-                        ((node.parent.kind === 262 /* ImportDeclaration */ || node.parent.kind === 268 /* ExportDeclaration */) && node.parent.moduleSpecifier === node) ||
+                        ((node.parent.kind === 264 /* ImportDeclaration */ || node.parent.kind === 270 /* ExportDeclaration */) && node.parent.moduleSpecifier === node) ||
                         ((ts.isInJSFile(node) && ts.isRequireCall(node.parent, /*checkArgumentIsStringLiteralLike*/ false)) || ts.isImportCall(node.parent)) ||
                         (ts.isLiteralTypeNode(node.parent) && ts.isLiteralImportTypeNode(node.parent.parent) && node.parent.parent.argument === node.parent)) {
                         return resolveExternalModuleName(node, node, ignoreErrors);
@@ -80683,21 +82210,35 @@
                             ? getTypeFromTypeNode(grandParent.objectType)
                             : undefined;
                     return objectType && getPropertyOfType(objectType, ts.escapeLeadingUnderscores(node.text));
-                case 87 /* DefaultKeyword */:
-                case 97 /* FunctionKeyword */:
+                case 88 /* DefaultKeyword */:
+                case 98 /* FunctionKeyword */:
                 case 38 /* EqualsGreaterThanToken */:
-                case 83 /* ClassKeyword */:
+                case 84 /* ClassKeyword */:
                     return getSymbolOfNode(node.parent);
-                case 196 /* ImportType */:
+                case 198 /* ImportType */:
                     return ts.isLiteralImportTypeNode(node) ? getSymbolAtLocation(node.argument.literal, ignoreErrors) : undefined;
-                case 92 /* ExportKeyword */:
+                case 93 /* ExportKeyword */:
                     return ts.isExportAssignment(node.parent) ? ts.Debug.checkDefined(node.parent.symbol) : undefined;
+                case 100 /* ImportKeyword */:
+                case 103 /* NewKeyword */:
+                    return ts.isMetaProperty(node.parent) ? checkMetaPropertyKeyword(node.parent).symbol : undefined;
+                case 229 /* MetaProperty */:
+                    return checkExpression(node).symbol;
                 default:
                     return undefined;
             }
         }
+        function getIndexInfosAtLocation(node) {
+            if (ts.isIdentifier(node) && ts.isPropertyAccessExpression(node.parent) && node.parent.name === node) {
+                var keyType_1 = getLiteralTypeFromPropertyName(node);
+                var objectType = getTypeOfExpression(node.parent.expression);
+                var objectTypes = objectType.flags & 1048576 /* Union */ ? objectType.types : [objectType];
+                return ts.flatMap(objectTypes, function (t) { return ts.filter(getIndexInfosOfType(t), function (info) { return isApplicableIndexType(keyType_1, info.keyType); }); });
+            }
+            return undefined;
+        }
         function getShorthandAssignmentValueSymbol(location) {
-            if (location && location.kind === 290 /* ShorthandPropertyAssignment */) {
+            if (location && location.kind === 292 /* ShorthandPropertyAssignment */) {
                 return resolveEntityName(location.name, 111551 /* Value */ | 2097152 /* Alias */);
             }
             return undefined;
@@ -80767,6 +82308,9 @@
                     return declaredType !== errorType ? declaredType : getTypeOfSymbol(symbol);
                 }
             }
+            if (ts.isMetaProperty(node.parent) && node.parent.keywordToken === node.kind) {
+                return checkMetaPropertyKeyword(node.parent);
+            }
             return errorType;
         }
         // Gets the type of object literal or array literal of destructuring assignment.
@@ -80776,23 +82320,23 @@
         // [ a ] from
         //     [a] = [ some array ...]
         function getTypeOfAssignmentPattern(expr) {
-            ts.Debug.assert(expr.kind === 201 /* ObjectLiteralExpression */ || expr.kind === 200 /* ArrayLiteralExpression */);
+            ts.Debug.assert(expr.kind === 203 /* ObjectLiteralExpression */ || expr.kind === 202 /* ArrayLiteralExpression */);
             // If this is from "for of"
             //     for ( { a } of elems) {
             //     }
-            if (expr.parent.kind === 240 /* ForOfStatement */) {
+            if (expr.parent.kind === 242 /* ForOfStatement */) {
                 var iteratedType = checkRightHandSideOfForOf(expr.parent);
                 return checkDestructuringAssignment(expr, iteratedType || errorType);
             }
             // If this is from "for" initializer
             //     for ({a } = elems[0];.....) { }
-            if (expr.parent.kind === 217 /* BinaryExpression */) {
+            if (expr.parent.kind === 219 /* BinaryExpression */) {
                 var iteratedType = getTypeOfExpression(expr.parent.right);
                 return checkDestructuringAssignment(expr, iteratedType || errorType);
             }
             // If this is from nested object binding pattern
             //     for ({ skills: { primary, secondary } } = multiRobot, i = 0; i < 1; i++) {
-            if (expr.parent.kind === 289 /* PropertyAssignment */) {
+            if (expr.parent.kind === 291 /* PropertyAssignment */) {
                 var node_3 = ts.cast(expr.parent.parent, ts.isObjectLiteralExpression);
                 var typeOfParentObjectLiteral = getTypeOfAssignmentPattern(node_3) || errorType;
                 var propertyIndex = ts.indexOfNode(node_3.properties, expr.parent);
@@ -80828,19 +82372,19 @@
          */
         function getParentTypeOfClassElement(node) {
             var classSymbol = getSymbolOfNode(node.parent);
-            return ts.hasSyntacticModifier(node, 32 /* Static */)
+            return ts.isStatic(node)
                 ? getTypeOfSymbol(classSymbol)
                 : getDeclaredTypeOfSymbol(classSymbol);
         }
         function getClassElementPropertyKeyType(element) {
             var name = element.name;
             switch (name.kind) {
-                case 78 /* Identifier */:
-                    return getLiteralType(ts.idText(name));
+                case 79 /* Identifier */:
+                    return getStringLiteralType(ts.idText(name));
                 case 8 /* NumericLiteral */:
                 case 10 /* StringLiteral */:
-                    return getLiteralType(name.text);
-                case 159 /* ComputedPropertyName */:
+                    return getStringLiteralType(name.text);
+                case 160 /* ComputedPropertyName */:
                     var nameType = checkComputedPropertyName(name);
                     return isTypeAssignableToKind(nameType, 12288 /* ESSymbolLike */) ? nameType : stringType;
                 default:
@@ -80958,7 +82502,7 @@
                     }
                     var parentSymbol_1 = getParentOfSymbol(symbol);
                     if (parentSymbol_1) {
-                        if (parentSymbol_1.flags & 512 /* ValueModule */ && ((_a = parentSymbol_1.valueDeclaration) === null || _a === void 0 ? void 0 : _a.kind) === 298 /* SourceFile */) {
+                        if (parentSymbol_1.flags & 512 /* ValueModule */ && ((_a = parentSymbol_1.valueDeclaration) === null || _a === void 0 ? void 0 : _a.kind) === 300 /* SourceFile */) {
                             var symbolFile = parentSymbol_1.valueDeclaration;
                             var referenceFile = ts.getSourceFileOfNode(node);
                             // If `node` accesses an export and that export isn't in the same file, then symbol is a namespace export, so return undefined.
@@ -80990,7 +82534,7 @@
         function isSymbolOfDestructuredElementOfCatchBinding(symbol) {
             return symbol.valueDeclaration
                 && ts.isBindingElement(symbol.valueDeclaration)
-                && ts.walkUpBindingElementsAndPatterns(symbol.valueDeclaration).parent.kind === 288 /* CatchClause */;
+                && ts.walkUpBindingElementsAndPatterns(symbol.valueDeclaration).parent.kind === 290 /* CatchClause */;
         }
         function isSymbolOfDeclarationWithCollidingName(symbol) {
             if (symbol.flags & 418 /* BlockScoped */ && symbol.valueDeclaration && !ts.isSourceFile(symbol.valueDeclaration)) {
@@ -81021,7 +82565,7 @@
                             //       they will not collide with anything
                             var isDeclaredInLoop = nodeLinks_1.flags & 524288 /* BlockScopedBindingInLoop */;
                             var inLoopInitializer = ts.isIterationStatement(container, /*lookInLabeledStatements*/ false);
-                            var inLoopBodyBlock = container.kind === 231 /* Block */ && ts.isIterationStatement(container.parent, /*lookInLabeledStatements*/ false);
+                            var inLoopBodyBlock = container.kind === 233 /* Block */ && ts.isIterationStatement(container.parent, /*lookInLabeledStatements*/ false);
                             links.isDeclarationWithCollidingName = !ts.isBlockScopedContainerTopLevel(container) && (!isDeclaredInLoop || (!inLoopInitializer && !inLoopBodyBlock));
                         }
                         else {
@@ -81062,20 +82606,20 @@
         }
         function isValueAliasDeclaration(node) {
             switch (node.kind) {
-                case 261 /* ImportEqualsDeclaration */:
+                case 263 /* ImportEqualsDeclaration */:
                     return isAliasResolvedToValue(getSymbolOfNode(node) || unknownSymbol);
-                case 263 /* ImportClause */:
-                case 264 /* NamespaceImport */:
-                case 266 /* ImportSpecifier */:
-                case 271 /* ExportSpecifier */:
+                case 265 /* ImportClause */:
+                case 266 /* NamespaceImport */:
+                case 268 /* ImportSpecifier */:
+                case 273 /* ExportSpecifier */:
                     var symbol = getSymbolOfNode(node) || unknownSymbol;
                     return isAliasResolvedToValue(symbol) && !getTypeOnlyAliasDeclaration(symbol);
-                case 268 /* ExportDeclaration */:
+                case 270 /* ExportDeclaration */:
                     var exportClause = node.exportClause;
                     return !!exportClause && (ts.isNamespaceExport(exportClause) ||
                         ts.some(exportClause.elements, isValueAliasDeclaration));
-                case 267 /* ExportAssignment */:
-                    return node.expression && node.expression.kind === 78 /* Identifier */ ?
+                case 269 /* ExportAssignment */:
+                    return node.expression && node.expression.kind === 79 /* Identifier */ ?
                         isAliasResolvedToValue(getSymbolOfNode(node) || unknownSymbol) :
                         true;
             }
@@ -81083,7 +82627,7 @@
         }
         function isTopLevelValueImportEqualsWithEntityName(nodeIn) {
             var node = ts.getParseTreeNode(nodeIn, ts.isImportEqualsDeclaration);
-            if (node === undefined || node.parent.kind !== 298 /* SourceFile */ || !ts.isInternalModuleImportEqualsDeclaration(node)) {
+            if (node === undefined || node.parent.kind !== 300 /* SourceFile */ || !ts.isInternalModuleImportEqualsDeclaration(node)) {
                 // parent is not source file or it is not reference to internal module
                 return false;
             }
@@ -81183,7 +82727,11 @@
             return symbol && getPropertiesOfType(getTypeOfSymbol(symbol)) || ts.emptyArray;
         }
         function getNodeCheckFlags(node) {
-            return getNodeLinks(node).flags || 0;
+            var _a;
+            var nodeId = node.id || 0;
+            if (nodeId < 0 || nodeId >= nodeLinks.length)
+                return 0;
+            return ((_a = nodeLinks[nodeId]) === null || _a === void 0 ? void 0 : _a.flags) || 0;
         }
         function getEnumMemberValue(node) {
             computeEnumMemberValues(node.parent);
@@ -81191,15 +82739,15 @@
         }
         function canHaveConstantValue(node) {
             switch (node.kind) {
-                case 292 /* EnumMember */:
-                case 202 /* PropertyAccessExpression */:
-                case 203 /* ElementAccessExpression */:
+                case 294 /* EnumMember */:
+                case 204 /* PropertyAccessExpression */:
+                case 205 /* ElementAccessExpression */:
                     return true;
             }
             return false;
         }
         function getConstantValue(node) {
-            if (node.kind === 292 /* EnumMember */) {
+            if (node.kind === 294 /* EnumMember */) {
                 return getEnumMemberValue(node);
             }
             var symbol = getNodeLinks(node).resolvedSymbol;
@@ -81216,7 +82764,7 @@
             return !!(type.flags & 524288 /* Object */) && getSignaturesOfType(type, 0 /* Call */).length > 0;
         }
         function getTypeReferenceSerializationKind(typeNameIn, location) {
-            var _a;
+            var _a, _b;
             // ensure both `typeName` and `location` are parse tree nodes.
             var typeName = ts.getParseTreeNode(typeNameIn, ts.isEntityName);
             if (!typeName)
@@ -81227,9 +82775,14 @@
                     return ts.TypeReferenceSerializationKind.Unknown;
             }
             // Resolve the symbol as a value to ensure the type can be reached at runtime during emit.
+            var isTypeOnly = false;
+            if (ts.isQualifiedName(typeName)) {
+                var rootValueSymbol = resolveEntityName(ts.getFirstIdentifier(typeName), 111551 /* Value */, /*ignoreErrors*/ true, /*dontResolveAlias*/ true, location);
+                isTypeOnly = !!((_a = rootValueSymbol === null || rootValueSymbol === void 0 ? void 0 : rootValueSymbol.declarations) === null || _a === void 0 ? void 0 : _a.every(ts.isTypeOnlyImportOrExportDeclaration));
+            }
             var valueSymbol = resolveEntityName(typeName, 111551 /* Value */, /*ignoreErrors*/ true, /*dontResolveAlias*/ true, location);
-            var isTypeOnly = ((_a = valueSymbol === null || valueSymbol === void 0 ? void 0 : valueSymbol.declarations) === null || _a === void 0 ? void 0 : _a.every(ts.isTypeOnlyImportOrExportDeclaration)) || false;
             var resolvedSymbol = valueSymbol && valueSymbol.flags & 2097152 /* Alias */ ? resolveAlias(valueSymbol) : valueSymbol;
+            isTypeOnly || (isTypeOnly = !!((_b = valueSymbol === null || valueSymbol === void 0 ? void 0 : valueSymbol.declarations) === null || _b === void 0 ? void 0 : _b.every(ts.isTypeOnlyImportOrExportDeclaration)));
             // Resolve the symbol as a type so that we can provide a more useful hint for the type serializer.
             var typeSymbol = resolveEntityName(typeName, 788968 /* Type */, /*ignoreErrors*/ true, /*dontResolveAlias*/ false, location);
             if (resolvedSymbol && resolvedSymbol === typeSymbol) {
@@ -81287,7 +82840,7 @@
         function createTypeOfDeclaration(declarationIn, enclosingDeclaration, flags, tracker, addUndefined) {
             var declaration = ts.getParseTreeNode(declarationIn, ts.isVariableLikeOrAccessor);
             if (!declaration) {
-                return ts.factory.createToken(128 /* AnyKeyword */);
+                return ts.factory.createToken(129 /* AnyKeyword */);
             }
             // Get type of the symbol if this is the valid symbol otherwise get type at location
             var symbol = getSymbolOfNode(declaration);
@@ -81306,7 +82859,7 @@
         function createReturnTypeOfSignatureDeclaration(signatureDeclarationIn, enclosingDeclaration, flags, tracker) {
             var signatureDeclaration = ts.getParseTreeNode(signatureDeclarationIn, ts.isFunctionLike);
             if (!signatureDeclaration) {
-                return ts.factory.createToken(128 /* AnyKeyword */);
+                return ts.factory.createToken(129 /* AnyKeyword */);
             }
             var signature = getSignatureFromDeclaration(signatureDeclaration);
             return nodeBuilder.typeToTypeNode(getReturnTypeOfSignature(signature), enclosingDeclaration, flags | 1024 /* MultilineObjectLiterals */, tracker);
@@ -81314,7 +82867,7 @@
         function createTypeOfExpression(exprIn, enclosingDeclaration, flags, tracker) {
             var expr = ts.getParseTreeNode(exprIn, ts.isExpression);
             if (!expr) {
-                return ts.factory.createToken(128 /* AnyKeyword */);
+                return ts.factory.createToken(129 /* AnyKeyword */);
             }
             var type = getWidenedType(getRegularTypeOfExpression(expr));
             return nodeBuilder.typeToTypeNode(type, enclosingDeclaration, flags | 1024 /* MultilineObjectLiterals */, tracker);
@@ -81471,12 +83024,12 @@
                 getJsxFragmentFactoryEntity: getJsxFragmentFactoryEntity,
                 getAllAccessorDeclarations: function (accessor) {
                     accessor = ts.getParseTreeNode(accessor, ts.isGetOrSetAccessorDeclaration); // TODO: GH#18217
-                    var otherKind = accessor.kind === 169 /* SetAccessor */ ? 168 /* GetAccessor */ : 169 /* SetAccessor */;
+                    var otherKind = accessor.kind === 171 /* SetAccessor */ ? 170 /* GetAccessor */ : 171 /* SetAccessor */;
                     var otherAccessor = ts.getDeclarationOfKind(getSymbolOfNode(accessor), otherKind);
                     var firstAccessor = otherAccessor && (otherAccessor.pos < accessor.pos) ? otherAccessor : accessor;
                     var secondAccessor = otherAccessor && (otherAccessor.pos < accessor.pos) ? accessor : otherAccessor;
-                    var setAccessor = accessor.kind === 169 /* SetAccessor */ ? accessor : otherAccessor;
-                    var getAccessor = accessor.kind === 168 /* GetAccessor */ ? accessor : otherAccessor;
+                    var setAccessor = accessor.kind === 171 /* SetAccessor */ ? accessor : otherAccessor;
+                    var getAccessor = accessor.kind === 170 /* GetAccessor */ ? accessor : otherAccessor;
                     return {
                         firstAccessor: firstAccessor,
                         secondAccessor: secondAccessor,
@@ -81492,7 +83045,7 @@
                 },
                 getDeclarationStatementsForSourceFile: function (node, flags, tracker, bundled) {
                     var n = ts.getParseTreeNode(node);
-                    ts.Debug.assert(n && n.kind === 298 /* SourceFile */, "Non-sourcefile node passed into getDeclarationsForSourceFile");
+                    ts.Debug.assert(n && n.kind === 300 /* SourceFile */, "Non-sourcefile node passed into getDeclarationsForSourceFile");
                     var sym = getSymbolOfNode(node);
                     if (!sym) {
                         return !node.locals ? [] : nodeBuilder.symbolTableToDeclarationStatements(node.locals, node, flags, tracker, bundled);
@@ -81529,7 +83082,7 @@
                 return false;
             }
             function isInHeritageClause(node) {
-                return node.parent && node.parent.kind === 224 /* ExpressionWithTypeArguments */ && node.parent.parent && node.parent.parent.kind === 287 /* HeritageClause */;
+                return node.parent && node.parent.kind === 226 /* ExpressionWithTypeArguments */ && node.parent.parent && node.parent.parent.kind === 289 /* HeritageClause */;
             }
             // defined here to avoid outer scope pollution
             function getTypeReferenceDirectivesForEntityName(node) {
@@ -81541,7 +83094,7 @@
                 // qualified names can only be used as types\namespaces
                 // identifiers are treated as values only if they appear in type queries
                 var meaning = 788968 /* Type */ | 1920 /* Namespace */;
-                if ((node.kind === 78 /* Identifier */ && isInTypeQuery(node)) || (node.kind === 202 /* PropertyAccessExpression */ && !isInHeritageClause(node))) {
+                if ((node.kind === 79 /* Identifier */ && isInTypeQuery(node)) || (node.kind === 204 /* PropertyAccessExpression */ && !isInHeritageClause(node))) {
                     meaning = 111551 /* Value */ | 1048576 /* ExportValue */;
                 }
                 var symbol = resolveEntityName(node, meaning, /*ignoreErrors*/ true);
@@ -81589,7 +83142,7 @@
                         break;
                     }
                 }
-                if (current.valueDeclaration && current.valueDeclaration.kind === 298 /* SourceFile */ && current.flags & 512 /* ValueModule */) {
+                if (current.valueDeclaration && current.valueDeclaration.kind === 300 /* SourceFile */ && current.flags & 512 /* ValueModule */) {
                     return false;
                 }
                 // check that at least one declaration of top level symbol originates from type declaration file
@@ -81617,12 +83170,12 @@
             }
         }
         function getExternalModuleFileFromDeclaration(declaration) {
-            var specifier = declaration.kind === 257 /* ModuleDeclaration */ ? ts.tryCast(declaration.name, ts.isStringLiteral) : ts.getExternalModuleName(declaration);
+            var specifier = declaration.kind === 259 /* ModuleDeclaration */ ? ts.tryCast(declaration.name, ts.isStringLiteral) : ts.getExternalModuleName(declaration);
             var moduleSymbol = resolveExternalModuleNameWorker(specifier, specifier, /*moduleNotFoundError*/ undefined); // TODO: GH#18217
             if (!moduleSymbol) {
                 return undefined;
             }
-            return ts.getDeclarationOfKind(moduleSymbol, 298 /* SourceFile */);
+            return ts.getDeclarationOfKind(moduleSymbol, 300 /* SourceFile */);
         }
         function initializeTypeChecker() {
             // Bind all source files and propagate errors
@@ -81708,7 +83261,7 @@
             autoArrayType = createArrayType(autoType);
             if (autoArrayType === emptyObjectType) {
                 // autoArrayType is used as a marker, so even if global Array type is not defined, it needs to be a unique type
-                autoArrayType = createAnonymousType(undefined, emptySymbols, ts.emptyArray, ts.emptyArray, undefined, undefined);
+                autoArrayType = createAnonymousType(undefined, emptySymbols, ts.emptyArray, ts.emptyArray, ts.emptyArray);
             }
             globalReadonlyArrayType = getGlobalTypeOrUndefined("ReadonlyArray", /*arity*/ 1) || globalArrayType;
             anyReadonlyArrayType = globalReadonlyArrayType ? createTypeFromGenericGlobalType(globalReadonlyArrayType, [anyType]) : anyArrayType;
@@ -81776,6 +83329,11 @@
                                         error(location, ts.Diagnostics.This_syntax_requires_an_imported_helper_named_1_with_2_parameters_which_is_not_compatible_with_the_one_in_0_Consider_upgrading_your_version_of_0, ts.externalHelpersModuleNameText, name, 5);
                                     }
                                 }
+                                else if (helper & 1024 /* SpreadArray */) {
+                                    if (!ts.some(getSignaturesOfSymbol(symbol), function (signature) { return getParameterCount(signature) > 2; })) {
+                                        error(location, ts.Diagnostics.This_syntax_requires_an_imported_helper_named_1_with_2_parameters_which_is_not_compatible_with_the_one_in_0_Consider_upgrading_your_version_of_0, ts.externalHelpersModuleNameText, name, 3);
+                                    }
+                                }
                             }
                         }
                     }
@@ -81825,14 +83383,14 @@
                 return false;
             }
             if (!ts.nodeCanBeDecorated(node, node.parent, node.parent.parent)) {
-                if (node.kind === 166 /* MethodDeclaration */ && !ts.nodeIsPresent(node.body)) {
+                if (node.kind === 167 /* MethodDeclaration */ && !ts.nodeIsPresent(node.body)) {
                     return grammarErrorOnFirstToken(node, ts.Diagnostics.A_decorator_can_only_decorate_a_method_implementation_not_an_overload);
                 }
                 else {
                     return grammarErrorOnFirstToken(node, ts.Diagnostics.Decorators_are_not_valid_here);
                 }
             }
-            else if (node.kind === 168 /* GetAccessor */ || node.kind === 169 /* SetAccessor */) {
+            else if (node.kind === 170 /* GetAccessor */ || node.kind === 171 /* SetAccessor */) {
                 var accessors = ts.getAllAccessorDeclarations(node.parent.members, node);
                 if (accessors.firstAccessor.decorators && node === accessors.secondAccessor) {
                     return grammarErrorOnFirstToken(node, ts.Diagnostics.Decorators_cannot_be_applied_to_multiple_get_Slashset_accessors_of_the_same_name);
@@ -81849,21 +83407,21 @@
             var flags = 0 /* None */;
             for (var _i = 0, _a = node.modifiers; _i < _a.length; _i++) {
                 var modifier = _a[_i];
-                if (modifier.kind !== 142 /* ReadonlyKeyword */) {
-                    if (node.kind === 163 /* PropertySignature */ || node.kind === 165 /* MethodSignature */) {
+                if (modifier.kind !== 143 /* ReadonlyKeyword */) {
+                    if (node.kind === 164 /* PropertySignature */ || node.kind === 166 /* MethodSignature */) {
                         return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_type_member, ts.tokenToString(modifier.kind));
                     }
-                    if (node.kind === 172 /* IndexSignature */ && (modifier.kind !== 123 /* StaticKeyword */ || !ts.isClassLike(node.parent))) {
+                    if (node.kind === 174 /* IndexSignature */ && (modifier.kind !== 124 /* StaticKeyword */ || !ts.isClassLike(node.parent))) {
                         return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_an_index_signature, ts.tokenToString(modifier.kind));
                     }
                 }
                 switch (modifier.kind) {
-                    case 84 /* ConstKeyword */:
-                        if (node.kind !== 256 /* EnumDeclaration */) {
-                            return grammarErrorOnNode(node, ts.Diagnostics.A_class_member_cannot_have_the_0_keyword, ts.tokenToString(84 /* ConstKeyword */));
+                    case 85 /* ConstKeyword */:
+                        if (node.kind !== 258 /* EnumDeclaration */) {
+                            return grammarErrorOnNode(node, ts.Diagnostics.A_class_member_cannot_have_the_0_keyword, ts.tokenToString(85 /* ConstKeyword */));
                         }
                         break;
-                    case 156 /* OverrideKeyword */:
+                    case 157 /* OverrideKeyword */:
                         // If node.kind === SyntaxKind.Parameter, checkParameter reports an error if it's not a parameter property.
                         if (flags & 16384 /* Override */) {
                             return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_already_seen, "override");
@@ -81880,9 +83438,9 @@
                         flags |= 16384 /* Override */;
                         lastOverride = modifier;
                         break;
-                    case 122 /* PublicKeyword */:
-                    case 121 /* ProtectedKeyword */:
-                    case 120 /* PrivateKeyword */:
+                    case 123 /* PublicKeyword */:
+                    case 122 /* ProtectedKeyword */:
+                    case 121 /* PrivateKeyword */:
                         var text = visibilityToString(ts.modifierToFlag(modifier.kind));
                         if (flags & 28 /* AccessibilityModifier */) {
                             return grammarErrorOnNode(modifier, ts.Diagnostics.Accessibility_modifier_already_seen);
@@ -81899,11 +83457,11 @@
                         else if (flags & 256 /* Async */) {
                             return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_must_precede_1_modifier, text, "async");
                         }
-                        else if (node.parent.kind === 258 /* ModuleBlock */ || node.parent.kind === 298 /* SourceFile */) {
+                        else if (node.parent.kind === 260 /* ModuleBlock */ || node.parent.kind === 300 /* SourceFile */) {
                             return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_module_or_namespace_element, text);
                         }
                         else if (flags & 128 /* Abstract */) {
-                            if (modifier.kind === 120 /* PrivateKeyword */) {
+                            if (modifier.kind === 121 /* PrivateKeyword */) {
                                 return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_be_used_with_1_modifier, text, "abstract");
                             }
                             else {
@@ -81915,7 +83473,7 @@
                         }
                         flags |= ts.modifierToFlag(modifier.kind);
                         break;
-                    case 123 /* StaticKeyword */:
+                    case 124 /* StaticKeyword */:
                         if (flags & 32 /* Static */) {
                             return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_already_seen, "static");
                         }
@@ -81925,10 +83483,10 @@
                         else if (flags & 256 /* Async */) {
                             return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_must_precede_1_modifier, "static", "async");
                         }
-                        else if (node.parent.kind === 258 /* ModuleBlock */ || node.parent.kind === 298 /* SourceFile */) {
+                        else if (node.parent.kind === 260 /* ModuleBlock */ || node.parent.kind === 300 /* SourceFile */) {
                             return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_module_or_namespace_element, "static");
                         }
-                        else if (node.kind === 161 /* Parameter */) {
+                        else if (node.kind === 162 /* Parameter */) {
                             return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_parameter, "static");
                         }
                         else if (flags & 128 /* Abstract */) {
@@ -81940,18 +83498,18 @@
                         flags |= 32 /* Static */;
                         lastStatic = modifier;
                         break;
-                    case 142 /* ReadonlyKeyword */:
+                    case 143 /* ReadonlyKeyword */:
                         if (flags & 64 /* Readonly */) {
                             return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_already_seen, "readonly");
                         }
-                        else if (node.kind !== 164 /* PropertyDeclaration */ && node.kind !== 163 /* PropertySignature */ && node.kind !== 172 /* IndexSignature */ && node.kind !== 161 /* Parameter */) {
+                        else if (node.kind !== 165 /* PropertyDeclaration */ && node.kind !== 164 /* PropertySignature */ && node.kind !== 174 /* IndexSignature */ && node.kind !== 162 /* Parameter */) {
                             // If node.kind === SyntaxKind.Parameter, checkParameter reports an error if it's not a parameter property.
                             return grammarErrorOnNode(modifier, ts.Diagnostics.readonly_modifier_can_only_appear_on_a_property_declaration_or_index_signature);
                         }
                         flags |= 64 /* Readonly */;
                         lastReadonly = modifier;
                         break;
-                    case 92 /* ExportKeyword */:
+                    case 93 /* ExportKeyword */:
                         if (flags & 1 /* Export */) {
                             return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_already_seen, "export");
                         }
@@ -81967,19 +83525,22 @@
                         else if (ts.isClassLike(node.parent)) {
                             return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_class_elements_of_this_kind, "export");
                         }
-                        else if (node.kind === 161 /* Parameter */) {
+                        else if (node.kind === 162 /* Parameter */) {
                             return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_parameter, "export");
                         }
                         flags |= 1 /* Export */;
                         break;
-                    case 87 /* DefaultKeyword */:
-                        var container = node.parent.kind === 298 /* SourceFile */ ? node.parent : node.parent.parent;
-                        if (container.kind === 257 /* ModuleDeclaration */ && !ts.isAmbientModule(container)) {
+                    case 88 /* DefaultKeyword */:
+                        var container = node.parent.kind === 300 /* SourceFile */ ? node.parent : node.parent.parent;
+                        if (container.kind === 259 /* ModuleDeclaration */ && !ts.isAmbientModule(container)) {
                             return grammarErrorOnNode(modifier, ts.Diagnostics.A_default_export_can_only_be_used_in_an_ECMAScript_style_module);
                         }
+                        else if (!(flags & 1 /* Export */)) {
+                            return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_must_precede_1_modifier, "export", "default");
+                        }
                         flags |= 512 /* Default */;
                         break;
-                    case 133 /* DeclareKeyword */:
+                    case 134 /* DeclareKeyword */:
                         if (flags & 2 /* Ambient */) {
                             return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_already_seen, "declare");
                         }
@@ -81992,10 +83553,10 @@
                         else if (ts.isClassLike(node.parent) && !ts.isPropertyDeclaration(node)) {
                             return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_class_elements_of_this_kind, "declare");
                         }
-                        else if (node.kind === 161 /* Parameter */) {
+                        else if (node.kind === 162 /* Parameter */) {
                             return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_parameter, "declare");
                         }
-                        else if ((node.parent.flags & 8388608 /* Ambient */) && node.parent.kind === 258 /* ModuleBlock */) {
+                        else if ((node.parent.flags & 8388608 /* Ambient */) && node.parent.kind === 260 /* ModuleBlock */) {
                             return grammarErrorOnNode(modifier, ts.Diagnostics.A_declare_modifier_cannot_be_used_in_an_already_ambient_context);
                         }
                         else if (ts.isPrivateIdentifierClassElementDeclaration(node)) {
@@ -82004,19 +83565,19 @@
                         flags |= 2 /* Ambient */;
                         lastDeclare = modifier;
                         break;
-                    case 125 /* AbstractKeyword */:
+                    case 126 /* AbstractKeyword */:
                         if (flags & 128 /* Abstract */) {
                             return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_already_seen, "abstract");
                         }
-                        if (node.kind !== 253 /* ClassDeclaration */ &&
-                            node.kind !== 176 /* ConstructorType */) {
-                            if (node.kind !== 166 /* MethodDeclaration */ &&
-                                node.kind !== 164 /* PropertyDeclaration */ &&
-                                node.kind !== 168 /* GetAccessor */ &&
-                                node.kind !== 169 /* SetAccessor */) {
+                        if (node.kind !== 255 /* ClassDeclaration */ &&
+                            node.kind !== 178 /* ConstructorType */) {
+                            if (node.kind !== 167 /* MethodDeclaration */ &&
+                                node.kind !== 165 /* PropertyDeclaration */ &&
+                                node.kind !== 170 /* GetAccessor */ &&
+                                node.kind !== 171 /* SetAccessor */) {
                                 return grammarErrorOnNode(modifier, ts.Diagnostics.abstract_modifier_can_only_appear_on_a_class_method_or_property_declaration);
                             }
-                            if (!(node.parent.kind === 253 /* ClassDeclaration */ && ts.hasSyntacticModifier(node.parent, 128 /* Abstract */))) {
+                            if (!(node.parent.kind === 255 /* ClassDeclaration */ && ts.hasSyntacticModifier(node.parent, 128 /* Abstract */))) {
                                 return grammarErrorOnNode(modifier, ts.Diagnostics.Abstract_methods_can_only_appear_within_an_abstract_class);
                             }
                             if (flags & 32 /* Static */) {
@@ -82032,19 +83593,19 @@
                                 return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_must_precede_1_modifier, "abstract", "override");
                             }
                         }
-                        if (ts.isNamedDeclaration(node) && node.name.kind === 79 /* PrivateIdentifier */) {
+                        if (ts.isNamedDeclaration(node) && node.name.kind === 80 /* PrivateIdentifier */) {
                             return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_be_used_with_a_private_identifier, "abstract");
                         }
                         flags |= 128 /* Abstract */;
                         break;
-                    case 129 /* AsyncKeyword */:
+                    case 130 /* AsyncKeyword */:
                         if (flags & 256 /* Async */) {
                             return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_already_seen, "async");
                         }
                         else if (flags & 2 /* Ambient */ || node.parent.flags & 8388608 /* Ambient */) {
                             return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_be_used_in_an_ambient_context, "async");
                         }
-                        else if (node.kind === 161 /* Parameter */) {
+                        else if (node.kind === 162 /* Parameter */) {
                             return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_parameter, "async");
                         }
                         if (flags & 128 /* Abstract */) {
@@ -82055,7 +83616,7 @@
                         break;
                 }
             }
-            if (node.kind === 167 /* Constructor */) {
+            if (node.kind === 169 /* Constructor */) {
                 if (flags & 32 /* Static */) {
                     return grammarErrorOnNode(lastStatic, ts.Diagnostics._0_modifier_cannot_appear_on_a_constructor_declaration, "static");
                 }
@@ -82073,13 +83634,13 @@
                 }
                 return false;
             }
-            else if ((node.kind === 262 /* ImportDeclaration */ || node.kind === 261 /* ImportEqualsDeclaration */) && flags & 2 /* Ambient */) {
+            else if ((node.kind === 264 /* ImportDeclaration */ || node.kind === 263 /* ImportEqualsDeclaration */) && flags & 2 /* Ambient */) {
                 return grammarErrorOnNode(lastDeclare, ts.Diagnostics.A_0_modifier_cannot_be_used_with_an_import_declaration, "declare");
             }
-            else if (node.kind === 161 /* Parameter */ && (flags & 16476 /* ParameterPropertyModifier */) && ts.isBindingPattern(node.name)) {
+            else if (node.kind === 162 /* Parameter */ && (flags & 16476 /* ParameterPropertyModifier */) && ts.isBindingPattern(node.name)) {
                 return grammarErrorOnNode(node, ts.Diagnostics.A_parameter_property_may_not_be_declared_using_a_binding_pattern);
             }
-            else if (node.kind === 161 /* Parameter */ && (flags & 16476 /* ParameterPropertyModifier */) && node.dotDotDotToken) {
+            else if (node.kind === 162 /* Parameter */ && (flags & 16476 /* ParameterPropertyModifier */) && node.dotDotDotToken) {
                 return grammarErrorOnNode(node, ts.Diagnostics.A_parameter_property_cannot_be_declared_using_a_rest_parameter);
             }
             if (flags & 256 /* Async */) {
@@ -82100,39 +83661,40 @@
         }
         function shouldReportBadModifier(node) {
             switch (node.kind) {
-                case 168 /* GetAccessor */:
-                case 169 /* SetAccessor */:
-                case 167 /* Constructor */:
-                case 164 /* PropertyDeclaration */:
-                case 163 /* PropertySignature */:
-                case 166 /* MethodDeclaration */:
-                case 165 /* MethodSignature */:
-                case 172 /* IndexSignature */:
-                case 257 /* ModuleDeclaration */:
-                case 262 /* ImportDeclaration */:
-                case 261 /* ImportEqualsDeclaration */:
-                case 268 /* ExportDeclaration */:
-                case 267 /* ExportAssignment */:
-                case 209 /* FunctionExpression */:
-                case 210 /* ArrowFunction */:
-                case 161 /* Parameter */:
+                case 170 /* GetAccessor */:
+                case 171 /* SetAccessor */:
+                case 169 /* Constructor */:
+                case 165 /* PropertyDeclaration */:
+                case 164 /* PropertySignature */:
+                case 167 /* MethodDeclaration */:
+                case 166 /* MethodSignature */:
+                case 174 /* IndexSignature */:
+                case 259 /* ModuleDeclaration */:
+                case 264 /* ImportDeclaration */:
+                case 263 /* ImportEqualsDeclaration */:
+                case 270 /* ExportDeclaration */:
+                case 269 /* ExportAssignment */:
+                case 211 /* FunctionExpression */:
+                case 212 /* ArrowFunction */:
+                case 162 /* Parameter */:
                     return false;
                 default:
-                    if (node.parent.kind === 258 /* ModuleBlock */ || node.parent.kind === 298 /* SourceFile */) {
+                    if (node.parent.kind === 260 /* ModuleBlock */ || node.parent.kind === 300 /* SourceFile */) {
                         return false;
                     }
                     switch (node.kind) {
-                        case 252 /* FunctionDeclaration */:
-                            return nodeHasAnyModifiersExcept(node, 129 /* AsyncKeyword */);
-                        case 253 /* ClassDeclaration */:
-                        case 176 /* ConstructorType */:
-                            return nodeHasAnyModifiersExcept(node, 125 /* AbstractKeyword */);
-                        case 254 /* InterfaceDeclaration */:
-                        case 233 /* VariableStatement */:
-                        case 255 /* TypeAliasDeclaration */:
+                        case 254 /* FunctionDeclaration */:
+                            return nodeHasAnyModifiersExcept(node, 130 /* AsyncKeyword */);
+                        case 255 /* ClassDeclaration */:
+                        case 178 /* ConstructorType */:
+                            return nodeHasAnyModifiersExcept(node, 126 /* AbstractKeyword */);
+                        case 256 /* InterfaceDeclaration */:
+                        case 235 /* VariableStatement */:
+                        case 257 /* TypeAliasDeclaration */:
+                        case 168 /* ClassStaticBlockDeclaration */:
                             return true;
-                        case 256 /* EnumDeclaration */:
-                            return nodeHasAnyModifiersExcept(node, 84 /* ConstKeyword */);
+                        case 258 /* EnumDeclaration */:
+                            return nodeHasAnyModifiersExcept(node, 85 /* ConstKeyword */);
                         default:
                             ts.Debug.fail();
                     }
@@ -82143,10 +83705,10 @@
         }
         function checkGrammarAsyncModifier(node, asyncModifier) {
             switch (node.kind) {
-                case 166 /* MethodDeclaration */:
-                case 252 /* FunctionDeclaration */:
-                case 209 /* FunctionExpression */:
-                case 210 /* ArrowFunction */:
+                case 167 /* MethodDeclaration */:
+                case 254 /* FunctionDeclaration */:
+                case 211 /* FunctionExpression */:
+                case 212 /* ArrowFunction */:
                     return false;
             }
             return grammarErrorOnNode(asyncModifier, ts.Diagnostics._0_modifier_cannot_be_used_here, "async");
@@ -82209,7 +83771,7 @@
                             ts.addRelatedInfo(error(parameter, ts.Diagnostics.This_parameter_is_not_allowed_with_use_strict_directive), ts.createDiagnosticForNode(useStrictDirective_1, ts.Diagnostics.use_strict_directive_used_here));
                         });
                         var diagnostics_2 = nonSimpleParameters.map(function (parameter, index) { return (index === 0 ? ts.createDiagnosticForNode(parameter, ts.Diagnostics.Non_simple_parameter_declared_here) : ts.createDiagnosticForNode(parameter, ts.Diagnostics.and_here)); });
-                        ts.addRelatedInfo.apply(void 0, __spreadArray([error(useStrictDirective_1, ts.Diagnostics.use_strict_directive_cannot_be_used_with_non_simple_parameter_list)], diagnostics_2));
+                        ts.addRelatedInfo.apply(void 0, __spreadArray([error(useStrictDirective_1, ts.Diagnostics.use_strict_directive_cannot_be_used_with_non_simple_parameter_list)], diagnostics_2, false));
                         return true;
                     }
                 }
@@ -82265,15 +83827,12 @@
             if (!parameter.type) {
                 return grammarErrorOnNode(parameter.name, ts.Diagnostics.An_index_signature_parameter_must_have_a_type_annotation);
             }
-            if (parameter.type.kind !== 147 /* StringKeyword */ && parameter.type.kind !== 144 /* NumberKeyword */) {
-                var type = getTypeFromTypeNode(parameter.type);
-                if (type.flags & 4 /* String */ || type.flags & 8 /* Number */) {
-                    return grammarErrorOnNode(parameter.name, ts.Diagnostics.An_index_signature_parameter_type_cannot_be_a_type_alias_Consider_writing_0_Colon_1_Colon_2_instead, ts.getTextOfNode(parameter.name), typeToString(type), typeToString(node.type ? getTypeFromTypeNode(node.type) : anyType));
-                }
-                if (type.flags & 1048576 /* Union */ && allTypesAssignableToKind(type, 384 /* StringOrNumberLiteral */, /*strict*/ true)) {
-                    return grammarErrorOnNode(parameter.name, ts.Diagnostics.An_index_signature_parameter_type_cannot_be_a_union_type_Consider_using_a_mapped_object_type_instead);
-                }
-                return grammarErrorOnNode(parameter.name, ts.Diagnostics.An_index_signature_parameter_type_must_be_either_string_or_number);
+            var type = getTypeFromTypeNode(parameter.type);
+            if (someType(type, function (t) { return !!(t.flags & 8576 /* StringOrNumberLiteralOrUnique */); }) || isGenericType(type)) {
+                return grammarErrorOnNode(parameter.name, ts.Diagnostics.An_index_signature_parameter_type_cannot_be_a_literal_type_or_generic_type_Consider_using_a_mapped_object_type_instead);
+            }
+            if (!everyType(type, isValidIndexKeyType)) {
+                return grammarErrorOnNode(parameter.name, ts.Diagnostics.An_index_signature_parameter_type_must_be_string_number_symbol_or_a_template_literal_type);
             }
             if (!node.type) {
                 return grammarErrorOnNode(node, ts.Diagnostics.An_index_signature_must_have_a_type_annotation);
@@ -82307,7 +83866,7 @@
             if (args) {
                 for (var _i = 0, args_4 = args; _i < args_4.length; _i++) {
                     var arg = args_4[_i];
-                    if (arg.kind === 223 /* OmittedExpression */) {
+                    if (arg.kind === 225 /* OmittedExpression */) {
                         return grammarErrorAtPos(arg, arg.pos, 0, ts.Diagnostics.Argument_expression_expected);
                     }
                 }
@@ -82337,7 +83896,7 @@
             if (!checkGrammarDecoratorsAndModifiers(node) && node.heritageClauses) {
                 for (var _i = 0, _a = node.heritageClauses; _i < _a.length; _i++) {
                     var heritageClause = _a[_i];
-                    if (heritageClause.token === 93 /* ExtendsKeyword */) {
+                    if (heritageClause.token === 94 /* ExtendsKeyword */) {
                         if (seenExtendsClause) {
                             return grammarErrorOnFirstToken(heritageClause, ts.Diagnostics.extends_clause_already_seen);
                         }
@@ -82350,7 +83909,7 @@
                         seenExtendsClause = true;
                     }
                     else {
-                        ts.Debug.assert(heritageClause.token === 116 /* ImplementsKeyword */);
+                        ts.Debug.assert(heritageClause.token === 117 /* ImplementsKeyword */);
                         if (seenImplementsClause) {
                             return grammarErrorOnFirstToken(heritageClause, ts.Diagnostics.implements_clause_already_seen);
                         }
@@ -82366,14 +83925,14 @@
             if (node.heritageClauses) {
                 for (var _i = 0, _a = node.heritageClauses; _i < _a.length; _i++) {
                     var heritageClause = _a[_i];
-                    if (heritageClause.token === 93 /* ExtendsKeyword */) {
+                    if (heritageClause.token === 94 /* ExtendsKeyword */) {
                         if (seenExtendsClause) {
                             return grammarErrorOnFirstToken(heritageClause, ts.Diagnostics.extends_clause_already_seen);
                         }
                         seenExtendsClause = true;
                     }
                     else {
-                        ts.Debug.assert(heritageClause.token === 116 /* ImplementsKeyword */);
+                        ts.Debug.assert(heritageClause.token === 117 /* ImplementsKeyword */);
                         return grammarErrorOnFirstToken(heritageClause, ts.Diagnostics.Interface_declaration_cannot_have_implements_clause);
                     }
                     // Grammar checking heritageClause inside class declaration
@@ -82384,20 +83943,20 @@
         }
         function checkGrammarComputedPropertyName(node) {
             // If node is not a computedPropertyName, just skip the grammar checking
-            if (node.kind !== 159 /* ComputedPropertyName */) {
+            if (node.kind !== 160 /* ComputedPropertyName */) {
                 return false;
             }
             var computedPropertyName = node;
-            if (computedPropertyName.expression.kind === 217 /* BinaryExpression */ && computedPropertyName.expression.operatorToken.kind === 27 /* CommaToken */) {
+            if (computedPropertyName.expression.kind === 219 /* BinaryExpression */ && computedPropertyName.expression.operatorToken.kind === 27 /* CommaToken */) {
                 return grammarErrorOnNode(computedPropertyName.expression, ts.Diagnostics.A_comma_expression_is_not_allowed_in_a_computed_property_name);
             }
             return false;
         }
         function checkGrammarForGenerator(node) {
             if (node.asteriskToken) {
-                ts.Debug.assert(node.kind === 252 /* FunctionDeclaration */ ||
-                    node.kind === 209 /* FunctionExpression */ ||
-                    node.kind === 166 /* MethodDeclaration */);
+                ts.Debug.assert(node.kind === 254 /* FunctionDeclaration */ ||
+                    node.kind === 211 /* FunctionExpression */ ||
+                    node.kind === 167 /* MethodDeclaration */);
                 if (node.flags & 8388608 /* Ambient */) {
                     return grammarErrorOnNode(node.asteriskToken, ts.Diagnostics.Generators_are_not_allowed_in_an_ambient_context);
                 }
@@ -82416,7 +83975,7 @@
             var seen = new ts.Map();
             for (var _i = 0, _a = node.properties; _i < _a.length; _i++) {
                 var prop = _a[_i];
-                if (prop.kind === 291 /* SpreadAssignment */) {
+                if (prop.kind === 293 /* SpreadAssignment */) {
                     if (inDestructuring) {
                         // a rest property cannot be destructured any further
                         var expression = ts.skipParentheses(prop.expression);
@@ -82427,16 +83986,16 @@
                     continue;
                 }
                 var name = prop.name;
-                if (name.kind === 159 /* ComputedPropertyName */) {
+                if (name.kind === 160 /* ComputedPropertyName */) {
                     // If the name is not a ComputedPropertyName, the grammar checking will skip it
                     checkGrammarComputedPropertyName(name);
                 }
-                if (prop.kind === 290 /* ShorthandPropertyAssignment */ && !inDestructuring && prop.objectAssignmentInitializer) {
+                if (prop.kind === 292 /* ShorthandPropertyAssignment */ && !inDestructuring && prop.objectAssignmentInitializer) {
                     // having objectAssignmentInitializer is only valid in ObjectAssignmentPattern
                     // outside of destructuring it is a syntax error
                     return grammarErrorOnNode(prop.equalsToken, ts.Diagnostics.Did_you_mean_to_use_a_Colon_An_can_only_follow_a_property_name_when_the_containing_object_literal_is_part_of_a_destructuring_pattern);
                 }
-                if (name.kind === 79 /* PrivateIdentifier */) {
+                if (name.kind === 80 /* PrivateIdentifier */) {
                     grammarErrorOnNode(name, ts.Diagnostics.Private_identifiers_are_not_allowed_outside_class_bodies);
                 }
                 // Modifiers are never allowed on properties except for 'async' on a method declaration
@@ -82444,7 +84003,7 @@
                     // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion
                     for (var _b = 0, _c = prop.modifiers; _b < _c.length; _b++) { // TODO: GH#19955
                         var mod = _c[_b];
-                        if (mod.kind !== 129 /* AsyncKeyword */ || prop.kind !== 166 /* MethodDeclaration */) {
+                        if (mod.kind !== 130 /* AsyncKeyword */ || prop.kind !== 167 /* MethodDeclaration */) {
                             grammarErrorOnNode(mod, ts.Diagnostics._0_modifier_cannot_be_used_here, ts.getTextOfNode(mod));
                         }
                     }
@@ -82459,10 +84018,10 @@
                 // and either both previous and propId.descriptor have[[Get]] fields or both previous and propId.descriptor have[[Set]] fields
                 var currentKind = void 0;
                 switch (prop.kind) {
-                    case 290 /* ShorthandPropertyAssignment */:
+                    case 292 /* ShorthandPropertyAssignment */:
                         checkGrammarForInvalidExclamationToken(prop.exclamationToken, ts.Diagnostics.A_definite_assignment_assertion_is_not_permitted_in_this_context);
                     // falls through
-                    case 289 /* PropertyAssignment */:
+                    case 291 /* PropertyAssignment */:
                         // Grammar checking for computedPropertyName and shorthandPropertyAssignment
                         checkGrammarForInvalidQuestionMark(prop.questionToken, ts.Diagnostics.An_object_member_cannot_be_declared_optional);
                         if (name.kind === 8 /* NumericLiteral */) {
@@ -82470,13 +84029,13 @@
                         }
                         currentKind = 4 /* PropertyAssignment */;
                         break;
-                    case 166 /* MethodDeclaration */:
+                    case 167 /* MethodDeclaration */:
                         currentKind = 8 /* Method */;
                         break;
-                    case 168 /* GetAccessor */:
+                    case 170 /* GetAccessor */:
                         currentKind = 1 /* GetAccessor */;
                         break;
-                    case 169 /* SetAccessor */:
+                    case 171 /* SetAccessor */:
                         currentKind = 2 /* SetAccessor */;
                         break;
                     default:
@@ -82516,7 +84075,7 @@
             var seen = new ts.Map();
             for (var _i = 0, _a = node.attributes.properties; _i < _a.length; _i++) {
                 var attr = _a[_i];
-                if (attr.kind === 283 /* JsxSpreadAttribute */) {
+                if (attr.kind === 285 /* JsxSpreadAttribute */) {
                     continue;
                 }
                 var name = attr.name, initializer = attr.initializer;
@@ -82526,7 +84085,7 @@
                 else {
                     return grammarErrorOnNode(name, ts.Diagnostics.JSX_elements_cannot_have_multiple_attributes_with_the_same_name);
                 }
-                if (initializer && initializer.kind === 284 /* JsxExpression */ && !initializer.expression) {
+                if (initializer && initializer.kind === 286 /* JsxExpression */ && !initializer.expression) {
                     return grammarErrorOnNode(initializer, ts.Diagnostics.JSX_attributes_must_only_be_assigned_a_non_empty_expression);
                 }
             }
@@ -82561,7 +84120,7 @@
             if (checkGrammarStatementInAmbientContext(forInOrOfStatement)) {
                 return true;
             }
-            if (forInOrOfStatement.kind === 240 /* ForOfStatement */ && forInOrOfStatement.awaitModifier) {
+            if (forInOrOfStatement.kind === 242 /* ForOfStatement */ && forInOrOfStatement.awaitModifier) {
                 if (!(forInOrOfStatement.flags & 32768 /* AwaitContext */)) {
                     var sourceFile = ts.getSourceFileOfNode(forInOrOfStatement);
                     if (ts.isInTopLevelContext(forInOrOfStatement)) {
@@ -82579,7 +84138,7 @@
                         if (!hasParseDiagnostics(sourceFile)) {
                             var diagnostic = ts.createDiagnosticForNode(forInOrOfStatement.awaitModifier, ts.Diagnostics.for_await_loops_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules);
                             var func = ts.getContainingFunction(forInOrOfStatement);
-                            if (func && func.kind !== 167 /* Constructor */) {
+                            if (func && func.kind !== 169 /* Constructor */) {
                                 ts.Debug.assert((ts.getFunctionFlags(func) & 2 /* Async */) === 0, "Enclosing function should never be an async function.");
                                 var relatedInfo = ts.createDiagnosticForNode(func, ts.Diagnostics.Did_you_mean_to_mark_this_function_as_async);
                                 ts.addRelatedInfo(diagnostic, relatedInfo);
@@ -82591,7 +84150,12 @@
                     return false;
                 }
             }
-            if (forInOrOfStatement.initializer.kind === 251 /* VariableDeclarationList */) {
+            if (ts.isForOfStatement(forInOrOfStatement) && !(forInOrOfStatement.flags & 32768 /* AwaitContext */) &&
+                ts.isIdentifier(forInOrOfStatement.initializer) && forInOrOfStatement.initializer.escapedText === "async") {
+                grammarErrorOnNode(forInOrOfStatement.initializer, ts.Diagnostics.The_left_hand_side_of_a_for_of_statement_may_not_be_async);
+                return false;
+            }
+            if (forInOrOfStatement.initializer.kind === 253 /* VariableDeclarationList */) {
                 var variableList = forInOrOfStatement.initializer;
                 if (!checkGrammarVariableDeclarationList(variableList)) {
                     var declarations = variableList.declarations;
@@ -82606,20 +84170,20 @@
                         return false;
                     }
                     if (declarations.length > 1) {
-                        var diagnostic = forInOrOfStatement.kind === 239 /* ForInStatement */
+                        var diagnostic = forInOrOfStatement.kind === 241 /* ForInStatement */
                             ? ts.Diagnostics.Only_a_single_variable_declaration_is_allowed_in_a_for_in_statement
                             : ts.Diagnostics.Only_a_single_variable_declaration_is_allowed_in_a_for_of_statement;
                         return grammarErrorOnFirstToken(variableList.declarations[1], diagnostic);
                     }
                     var firstDeclaration = declarations[0];
                     if (firstDeclaration.initializer) {
-                        var diagnostic = forInOrOfStatement.kind === 239 /* ForInStatement */
+                        var diagnostic = forInOrOfStatement.kind === 241 /* ForInStatement */
                             ? ts.Diagnostics.The_variable_declaration_of_a_for_in_statement_cannot_have_an_initializer
                             : ts.Diagnostics.The_variable_declaration_of_a_for_of_statement_cannot_have_an_initializer;
                         return grammarErrorOnNode(firstDeclaration.name, diagnostic);
                     }
                     if (firstDeclaration.type) {
-                        var diagnostic = forInOrOfStatement.kind === 239 /* ForInStatement */
+                        var diagnostic = forInOrOfStatement.kind === 241 /* ForInStatement */
                             ? ts.Diagnostics.The_left_hand_side_of_a_for_in_statement_cannot_use_a_type_annotation
                             : ts.Diagnostics.The_left_hand_side_of_a_for_of_statement_cannot_use_a_type_annotation;
                         return grammarErrorOnNode(firstDeclaration, diagnostic);
@@ -82629,7 +84193,7 @@
             return false;
         }
         function checkGrammarAccessor(accessor) {
-            if (!(accessor.flags & 8388608 /* Ambient */) && (accessor.parent.kind !== 178 /* TypeLiteral */) && (accessor.parent.kind !== 254 /* InterfaceDeclaration */)) {
+            if (!(accessor.flags & 8388608 /* Ambient */) && (accessor.parent.kind !== 180 /* TypeLiteral */) && (accessor.parent.kind !== 256 /* InterfaceDeclaration */)) {
                 if (languageVersion < 1 /* ES5 */) {
                     return grammarErrorOnNode(accessor.name, ts.Diagnostics.Accessors_are_only_available_when_targeting_ECMAScript_5_and_higher);
                 }
@@ -82644,7 +84208,7 @@
                 if (ts.hasSyntacticModifier(accessor, 128 /* Abstract */)) {
                     return grammarErrorOnNode(accessor, ts.Diagnostics.An_abstract_accessor_cannot_have_an_implementation);
                 }
-                if (accessor.parent.kind === 178 /* TypeLiteral */ || accessor.parent.kind === 254 /* InterfaceDeclaration */) {
+                if (accessor.parent.kind === 180 /* TypeLiteral */ || accessor.parent.kind === 256 /* InterfaceDeclaration */) {
                     return grammarErrorOnNode(accessor.body, ts.Diagnostics.An_implementation_cannot_be_declared_in_ambient_contexts);
                 }
             }
@@ -82652,11 +84216,11 @@
                 return grammarErrorOnNode(accessor.name, ts.Diagnostics.An_accessor_cannot_have_type_parameters);
             }
             if (!doesAccessorHaveCorrectParameterCount(accessor)) {
-                return grammarErrorOnNode(accessor.name, accessor.kind === 168 /* GetAccessor */ ?
+                return grammarErrorOnNode(accessor.name, accessor.kind === 170 /* GetAccessor */ ?
                     ts.Diagnostics.A_get_accessor_cannot_have_parameters :
                     ts.Diagnostics.A_set_accessor_must_have_exactly_one_parameter);
             }
-            if (accessor.kind === 169 /* SetAccessor */) {
+            if (accessor.kind === 171 /* SetAccessor */) {
                 if (accessor.type) {
                     return grammarErrorOnNode(accessor.name, ts.Diagnostics.A_set_accessor_cannot_have_a_return_type_annotation);
                 }
@@ -82678,17 +84242,17 @@
          * A set accessor has one parameter or a `this` parameter and one more parameter.
          */
         function doesAccessorHaveCorrectParameterCount(accessor) {
-            return getAccessorThisParameter(accessor) || accessor.parameters.length === (accessor.kind === 168 /* GetAccessor */ ? 0 : 1);
+            return getAccessorThisParameter(accessor) || accessor.parameters.length === (accessor.kind === 170 /* GetAccessor */ ? 0 : 1);
         }
         function getAccessorThisParameter(accessor) {
-            if (accessor.parameters.length === (accessor.kind === 168 /* GetAccessor */ ? 1 : 2)) {
+            if (accessor.parameters.length === (accessor.kind === 170 /* GetAccessor */ ? 1 : 2)) {
                 return ts.getThisParameter(accessor);
             }
         }
         function checkGrammarTypeOperatorNode(node) {
-            if (node.operator === 151 /* UniqueKeyword */) {
-                if (node.type.kind !== 148 /* SymbolKeyword */) {
-                    return grammarErrorOnNode(node.type, ts.Diagnostics._0_expected, ts.tokenToString(148 /* SymbolKeyword */));
+            if (node.operator === 152 /* UniqueKeyword */) {
+                if (node.type.kind !== 149 /* SymbolKeyword */) {
+                    return grammarErrorOnNode(node.type, ts.Diagnostics._0_expected, ts.tokenToString(149 /* SymbolKeyword */));
                 }
                 var parent = ts.walkUpParenthesizedTypes(node.parent);
                 if (ts.isInJSFile(parent) && ts.isJSDocTypeExpression(parent)) {
@@ -82699,9 +84263,9 @@
                     }
                 }
                 switch (parent.kind) {
-                    case 250 /* VariableDeclaration */:
+                    case 252 /* VariableDeclaration */:
                         var decl = parent;
-                        if (decl.name.kind !== 78 /* Identifier */) {
+                        if (decl.name.kind !== 79 /* Identifier */) {
                             return grammarErrorOnNode(node, ts.Diagnostics.unique_symbol_types_may_not_be_used_on_a_variable_declaration_with_a_binding_name);
                         }
                         if (!ts.isVariableDeclarationInVariableStatement(decl)) {
@@ -82711,13 +84275,13 @@
                             return grammarErrorOnNode(parent.name, ts.Diagnostics.A_variable_whose_type_is_a_unique_symbol_type_must_be_const);
                         }
                         break;
-                    case 164 /* PropertyDeclaration */:
-                        if (!ts.hasSyntacticModifier(parent, 32 /* Static */) ||
-                            !ts.hasEffectiveModifier(parent, 64 /* Readonly */)) {
+                    case 165 /* PropertyDeclaration */:
+                        if (!ts.isStatic(parent) ||
+                            !ts.hasEffectiveReadonlyModifier(parent)) {
                             return grammarErrorOnNode(parent.name, ts.Diagnostics.A_property_of_a_class_whose_type_is_a_unique_symbol_type_must_be_both_static_and_readonly);
                         }
                         break;
-                    case 163 /* PropertySignature */:
+                    case 164 /* PropertySignature */:
                         if (!ts.hasSyntacticModifier(parent, 64 /* Readonly */)) {
                             return grammarErrorOnNode(parent.name, ts.Diagnostics.A_property_of_an_interface_or_type_literal_whose_type_is_a_unique_symbol_type_must_be_readonly);
                         }
@@ -82726,9 +84290,9 @@
                         return grammarErrorOnNode(node, ts.Diagnostics.unique_symbol_types_are_not_allowed_here);
                 }
             }
-            else if (node.operator === 142 /* ReadonlyKeyword */) {
-                if (node.type.kind !== 179 /* ArrayType */ && node.type.kind !== 180 /* TupleType */) {
-                    return grammarErrorOnFirstToken(node, ts.Diagnostics.readonly_type_modifier_is_only_permitted_on_array_and_tuple_literal_types, ts.tokenToString(148 /* SymbolKeyword */));
+            else if (node.operator === 143 /* ReadonlyKeyword */) {
+                if (node.type.kind !== 181 /* ArrayType */ && node.type.kind !== 182 /* TupleType */) {
+                    return grammarErrorOnFirstToken(node, ts.Diagnostics.readonly_type_modifier_is_only_permitted_on_array_and_tuple_literal_types, ts.tokenToString(149 /* SymbolKeyword */));
                 }
             }
         }
@@ -82741,10 +84305,10 @@
             if (checkGrammarFunctionLikeDeclaration(node)) {
                 return true;
             }
-            if (node.kind === 166 /* MethodDeclaration */) {
-                if (node.parent.kind === 201 /* ObjectLiteralExpression */) {
+            if (node.kind === 167 /* MethodDeclaration */) {
+                if (node.parent.kind === 203 /* ObjectLiteralExpression */) {
                     // We only disallow modifier on a method declaration if it is a property of object-literal-expression
-                    if (node.modifiers && !(node.modifiers.length === 1 && ts.first(node.modifiers).kind === 129 /* AsyncKeyword */)) {
+                    if (node.modifiers && !(node.modifiers.length === 1 && ts.first(node.modifiers).kind === 130 /* AsyncKeyword */)) {
                         return grammarErrorOnFirstToken(node, ts.Diagnostics.Modifiers_cannot_appear_here);
                     }
                     else if (checkGrammarForInvalidQuestionMark(node.questionToken, ts.Diagnostics.An_object_member_cannot_be_declared_optional)) {
@@ -82773,29 +84337,29 @@
                 if (node.flags & 8388608 /* Ambient */) {
                     return checkGrammarForInvalidDynamicName(node.name, ts.Diagnostics.A_computed_property_name_in_an_ambient_context_must_refer_to_an_expression_whose_type_is_a_literal_type_or_a_unique_symbol_type);
                 }
-                else if (node.kind === 166 /* MethodDeclaration */ && !node.body) {
+                else if (node.kind === 167 /* MethodDeclaration */ && !node.body) {
                     return checkGrammarForInvalidDynamicName(node.name, ts.Diagnostics.A_computed_property_name_in_a_method_overload_must_refer_to_an_expression_whose_type_is_a_literal_type_or_a_unique_symbol_type);
                 }
             }
-            else if (node.parent.kind === 254 /* InterfaceDeclaration */) {
+            else if (node.parent.kind === 256 /* InterfaceDeclaration */) {
                 return checkGrammarForInvalidDynamicName(node.name, ts.Diagnostics.A_computed_property_name_in_an_interface_must_refer_to_an_expression_whose_type_is_a_literal_type_or_a_unique_symbol_type);
             }
-            else if (node.parent.kind === 178 /* TypeLiteral */) {
+            else if (node.parent.kind === 180 /* TypeLiteral */) {
                 return checkGrammarForInvalidDynamicName(node.name, ts.Diagnostics.A_computed_property_name_in_a_type_literal_must_refer_to_an_expression_whose_type_is_a_literal_type_or_a_unique_symbol_type);
             }
         }
         function checkGrammarBreakOrContinueStatement(node) {
             var current = node;
             while (current) {
-                if (ts.isFunctionLike(current)) {
+                if (ts.isFunctionLikeOrClassStaticBlockDeclaration(current)) {
                     return grammarErrorOnNode(node, ts.Diagnostics.Jump_target_cannot_cross_function_boundary);
                 }
                 switch (current.kind) {
-                    case 246 /* LabeledStatement */:
+                    case 248 /* LabeledStatement */:
                         if (node.label && current.label.escapedText === node.label.escapedText) {
                             // found matching label - verify that label usage is correct
                             // continue can only target labels that are on iteration statements
-                            var isMisplacedContinueLabel = node.kind === 241 /* ContinueStatement */
+                            var isMisplacedContinueLabel = node.kind === 243 /* ContinueStatement */
                                 && !ts.isIterationStatement(current.statement, /*lookInLabeledStatement*/ true);
                             if (isMisplacedContinueLabel) {
                                 return grammarErrorOnNode(node, ts.Diagnostics.A_continue_statement_can_only_jump_to_a_label_of_an_enclosing_iteration_statement);
@@ -82803,8 +84367,8 @@
                             return false;
                         }
                         break;
-                    case 245 /* SwitchStatement */:
-                        if (node.kind === 242 /* BreakStatement */ && !node.label) {
+                    case 247 /* SwitchStatement */:
+                        if (node.kind === 244 /* BreakStatement */ && !node.label) {
                             // unlabeled break within switch statement - ok
                             return false;
                         }
@@ -82819,13 +84383,13 @@
                 current = current.parent;
             }
             if (node.label) {
-                var message = node.kind === 242 /* BreakStatement */
+                var message = node.kind === 244 /* BreakStatement */
                     ? ts.Diagnostics.A_break_statement_can_only_jump_to_a_label_of_an_enclosing_statement
                     : ts.Diagnostics.A_continue_statement_can_only_jump_to_a_label_of_an_enclosing_iteration_statement;
                 return grammarErrorOnNode(node, message);
             }
             else {
-                var message = node.kind === 242 /* BreakStatement */
+                var message = node.kind === 244 /* BreakStatement */
                     ? ts.Diagnostics.A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement
                     : ts.Diagnostics.A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement;
                 return grammarErrorOnNode(node, message);
@@ -82849,12 +84413,12 @@
         }
         function isStringOrNumberLiteralExpression(expr) {
             return ts.isStringOrNumericLiteralLike(expr) ||
-                expr.kind === 215 /* PrefixUnaryExpression */ && expr.operator === 40 /* MinusToken */ &&
+                expr.kind === 217 /* PrefixUnaryExpression */ && expr.operator === 40 /* MinusToken */ &&
                     expr.operand.kind === 8 /* NumericLiteral */;
         }
         function isBigIntLiteralExpression(expr) {
             return expr.kind === 9 /* BigIntLiteral */ ||
-                expr.kind === 215 /* PrefixUnaryExpression */ && expr.operator === 40 /* MinusToken */ &&
+                expr.kind === 217 /* PrefixUnaryExpression */ && expr.operator === 40 /* MinusToken */ &&
                     expr.operand.kind === 9 /* BigIntLiteral */;
         }
         function isSimpleLiteralEnumReference(expr) {
@@ -82868,7 +84432,7 @@
             if (initializer) {
                 var isInvalidInitializer = !(isStringOrNumberLiteralExpression(initializer) ||
                     isSimpleLiteralEnumReference(initializer) ||
-                    initializer.kind === 109 /* TrueKeyword */ || initializer.kind === 94 /* FalseKeyword */ ||
+                    initializer.kind === 110 /* TrueKeyword */ || initializer.kind === 95 /* FalseKeyword */ ||
                     isBigIntLiteralExpression(initializer));
                 var isConstOrReadonly = ts.isDeclarationReadonly(node) || ts.isVariableDeclaration(node) && ts.isVarConst(node);
                 if (isConstOrReadonly && !node.type) {
@@ -82885,7 +84449,7 @@
             }
         }
         function checkGrammarVariableDeclaration(node) {
-            if (node.parent.parent.kind !== 239 /* ForInStatement */ && node.parent.parent.kind !== 240 /* ForOfStatement */) {
+            if (node.parent.parent.kind !== 241 /* ForInStatement */ && node.parent.parent.kind !== 242 /* ForOfStatement */) {
                 if (node.flags & 8388608 /* Ambient */) {
                     checkAmbientInitializer(node);
                 }
@@ -82898,7 +84462,7 @@
                     }
                 }
             }
-            if (node.exclamationToken && (node.parent.parent.kind !== 233 /* VariableStatement */ || !node.type || node.initializer || node.flags & 8388608 /* Ambient */)) {
+            if (node.exclamationToken && (node.parent.parent.kind !== 235 /* VariableStatement */ || !node.type || node.initializer || node.flags & 8388608 /* Ambient */)) {
                 var message = node.initializer
                     ? ts.Diagnostics.Declarations_with_initializers_cannot_also_have_definite_assignment_assertions
                     : !node.type
@@ -82921,7 +84485,7 @@
             return checkLetConstNames && checkGrammarNameInLetOrConstDeclarations(node.name);
         }
         function checkESModuleMarker(name) {
-            if (name.kind === 78 /* Identifier */) {
+            if (name.kind === 79 /* Identifier */) {
                 if (ts.idText(name) === "__esModule") {
                     return grammarErrorOnNodeSkippedOn("noEmit", name, ts.Diagnostics.Identifier_expected_esModule_is_reserved_as_an_exported_marker_when_transforming_ECMAScript_modules);
                 }
@@ -82938,8 +84502,8 @@
             return false;
         }
         function checkGrammarNameInLetOrConstDeclarations(name) {
-            if (name.kind === 78 /* Identifier */) {
-                if (name.originalKeywordKind === 118 /* LetKeyword */) {
+            if (name.kind === 79 /* Identifier */) {
+                if (name.originalKeywordKind === 119 /* LetKeyword */) {
                     return grammarErrorOnNode(name, ts.Diagnostics.let_is_not_allowed_to_be_used_as_a_name_in_let_or_const_declarations);
                 }
             }
@@ -82966,15 +84530,15 @@
         }
         function allowLetAndConstDeclarations(parent) {
             switch (parent.kind) {
-                case 235 /* IfStatement */:
-                case 236 /* DoStatement */:
-                case 237 /* WhileStatement */:
-                case 244 /* WithStatement */:
-                case 238 /* ForStatement */:
-                case 239 /* ForInStatement */:
-                case 240 /* ForOfStatement */:
+                case 237 /* IfStatement */:
+                case 238 /* DoStatement */:
+                case 239 /* WhileStatement */:
+                case 246 /* WithStatement */:
+                case 240 /* ForStatement */:
+                case 241 /* ForInStatement */:
+                case 242 /* ForOfStatement */:
                     return false;
-                case 246 /* LabeledStatement */:
+                case 248 /* LabeledStatement */:
                     return allowLetAndConstDeclarations(parent.parent);
             }
             return true;
@@ -82992,12 +84556,12 @@
         function checkGrammarMetaProperty(node) {
             var escapedText = node.name.escapedText;
             switch (node.keywordToken) {
-                case 102 /* NewKeyword */:
+                case 103 /* NewKeyword */:
                     if (escapedText !== "target") {
                         return grammarErrorOnNode(node.name, ts.Diagnostics._0_is_not_a_valid_meta_property_for_keyword_1_Did_you_mean_2, node.name.escapedText, ts.tokenToString(node.keywordToken), "target");
                     }
                     break;
-                case 99 /* ImportKeyword */:
+                case 100 /* ImportKeyword */:
                     if (escapedText !== "meta") {
                         return grammarErrorOnNode(node.name, ts.Diagnostics._0_is_not_a_valid_meta_property_for_keyword_1_Did_you_mean_2, node.name.escapedText, ts.tokenToString(node.keywordToken), "meta");
                     }
@@ -83066,7 +84630,7 @@
                     return grammarErrorOnNode(node.name, ts.Diagnostics.Private_identifiers_are_only_available_when_targeting_ECMAScript_2015_and_higher);
                 }
             }
-            else if (node.parent.kind === 254 /* InterfaceDeclaration */) {
+            else if (node.parent.kind === 256 /* InterfaceDeclaration */) {
                 if (checkGrammarForInvalidDynamicName(node.name, ts.Diagnostics.A_computed_property_name_in_an_interface_must_refer_to_an_expression_whose_type_is_a_literal_type_or_a_unique_symbol_type)) {
                     return true;
                 }
@@ -83074,7 +84638,7 @@
                     return grammarErrorOnNode(node.initializer, ts.Diagnostics.An_interface_property_cannot_have_an_initializer);
                 }
             }
-            else if (node.parent.kind === 178 /* TypeLiteral */) {
+            else if (node.parent.kind === 180 /* TypeLiteral */) {
                 if (checkGrammarForInvalidDynamicName(node.name, ts.Diagnostics.A_computed_property_name_in_a_type_literal_must_refer_to_an_expression_whose_type_is_a_literal_type_or_a_unique_symbol_type)) {
                     return true;
                 }
@@ -83086,7 +84650,7 @@
                 checkAmbientInitializer(node);
             }
             if (ts.isPropertyDeclaration(node) && node.exclamationToken && (!ts.isClassLike(node.parent) || !node.type || node.initializer ||
-                node.flags & 8388608 /* Ambient */ || ts.hasSyntacticModifier(node, 32 /* Static */ | 128 /* Abstract */))) {
+                node.flags & 8388608 /* Ambient */ || ts.isStatic(node) || ts.hasAbstractModifier(node))) {
                 var message = node.initializer
                     ? ts.Diagnostics.Declarations_with_initializers_cannot_also_have_definite_assignment_assertions
                     : !node.type
@@ -83108,13 +84672,13 @@
             //     export_opt   AmbientDeclaration
             //
             // TODO: The spec needs to be amended to reflect this grammar.
-            if (node.kind === 254 /* InterfaceDeclaration */ ||
-                node.kind === 255 /* TypeAliasDeclaration */ ||
-                node.kind === 262 /* ImportDeclaration */ ||
-                node.kind === 261 /* ImportEqualsDeclaration */ ||
-                node.kind === 268 /* ExportDeclaration */ ||
-                node.kind === 267 /* ExportAssignment */ ||
-                node.kind === 260 /* NamespaceExportDeclaration */ ||
+            if (node.kind === 256 /* InterfaceDeclaration */ ||
+                node.kind === 257 /* TypeAliasDeclaration */ ||
+                node.kind === 264 /* ImportDeclaration */ ||
+                node.kind === 263 /* ImportEqualsDeclaration */ ||
+                node.kind === 270 /* ExportDeclaration */ ||
+                node.kind === 269 /* ExportAssignment */ ||
+                node.kind === 262 /* NamespaceExportDeclaration */ ||
                 ts.hasSyntacticModifier(node, 2 /* Ambient */ | 1 /* Export */ | 512 /* Default */)) {
                 return false;
             }
@@ -83123,7 +84687,7 @@
         function checkGrammarTopLevelElementsForRequiredDeclareModifier(file) {
             for (var _i = 0, _a = file.statements; _i < _a.length; _i++) {
                 var decl = _a[_i];
-                if (ts.isDeclaration(decl) || decl.kind === 233 /* VariableStatement */) {
+                if (ts.isDeclaration(decl) || decl.kind === 235 /* VariableStatement */) {
                     if (checkGrammarTopLevelElementForRequiredDeclareModifier(decl)) {
                         return true;
                     }
@@ -83146,7 +84710,7 @@
                 // to prevent noisiness.  So use a bit on the block to indicate if
                 // this has already been reported, and don't report if it has.
                 //
-                if (node.parent.kind === 231 /* Block */ || node.parent.kind === 258 /* ModuleBlock */ || node.parent.kind === 298 /* SourceFile */) {
+                if (node.parent.kind === 233 /* Block */ || node.parent.kind === 260 /* ModuleBlock */ || node.parent.kind === 300 /* SourceFile */) {
                     var links_2 = getNodeLinks(node.parent);
                     // Check if the containing block ever report this error
                     if (!links_2.hasReportedStatementInAmbientContext) {
@@ -83168,10 +84732,10 @@
                 if (languageVersion >= 1 /* ES5 */) {
                     diagnosticMessage = ts.Diagnostics.Octal_literals_are_not_available_when_targeting_ECMAScript_5_and_higher_Use_the_syntax_0;
                 }
-                else if (ts.isChildOfNodeWithKind(node, 192 /* LiteralType */)) {
+                else if (ts.isChildOfNodeWithKind(node, 194 /* LiteralType */)) {
                     diagnosticMessage = ts.Diagnostics.Octal_literal_types_must_use_ES2015_syntax_Use_the_syntax_0;
                 }
-                else if (ts.isChildOfNodeWithKind(node, 292 /* EnumMember */)) {
+                else if (ts.isChildOfNodeWithKind(node, 294 /* EnumMember */)) {
                     diagnosticMessage = ts.Diagnostics.Octal_literals_are_not_allowed_in_enums_members_initializer_Use_the_syntax_0;
                 }
                 if (diagnosticMessage) {
@@ -83350,14 +84914,14 @@
         return !ts.isAccessor(declaration);
     }
     function isNotOverload(declaration) {
-        return (declaration.kind !== 252 /* FunctionDeclaration */ && declaration.kind !== 166 /* MethodDeclaration */) ||
+        return (declaration.kind !== 254 /* FunctionDeclaration */ && declaration.kind !== 167 /* MethodDeclaration */) ||
             !!declaration.body;
     }
     /** Like 'isDeclarationName', but returns true for LHS of `import { x as y }` or `export { x as y }`. */
     function isDeclarationNameOrImportPropertyName(name) {
         switch (name.parent.kind) {
-            case 266 /* ImportSpecifier */:
-            case 271 /* ExportSpecifier */:
+            case 268 /* ImportSpecifier */:
+            case 273 /* ExportSpecifier */:
                 return ts.isIdentifier(name);
             default:
                 return ts.isDeclarationName(name);
@@ -83607,432 +85171,437 @@
         }
         var kind = node.kind;
         // No need to visit nodes with no children.
-        if ((kind > 0 /* FirstToken */ && kind <= 157 /* LastToken */) || kind === 188 /* ThisType */) {
+        if ((kind > 0 /* FirstToken */ && kind <= 158 /* LastToken */) || kind === 190 /* ThisType */) {
             return node;
         }
         var factory = context.factory;
         switch (kind) {
             // Names
-            case 78 /* Identifier */:
+            case 79 /* Identifier */:
                 ts.Debug.type(node);
                 return factory.updateIdentifier(node, nodesVisitor(node.typeArguments, visitor, ts.isTypeNodeOrTypeParameterDeclaration));
-            case 158 /* QualifiedName */:
+            case 159 /* QualifiedName */:
                 ts.Debug.type(node);
                 return factory.updateQualifiedName(node, nodeVisitor(node.left, visitor, ts.isEntityName), nodeVisitor(node.right, visitor, ts.isIdentifier));
-            case 159 /* ComputedPropertyName */:
+            case 160 /* ComputedPropertyName */:
                 ts.Debug.type(node);
                 return factory.updateComputedPropertyName(node, nodeVisitor(node.expression, visitor, ts.isExpression));
             // Signature elements
-            case 160 /* TypeParameter */:
+            case 161 /* TypeParameter */:
                 ts.Debug.type(node);
                 return factory.updateTypeParameterDeclaration(node, nodeVisitor(node.name, visitor, ts.isIdentifier), nodeVisitor(node.constraint, visitor, ts.isTypeNode), nodeVisitor(node.default, visitor, ts.isTypeNode));
-            case 161 /* Parameter */:
+            case 162 /* Parameter */:
                 ts.Debug.type(node);
                 return factory.updateParameterDeclaration(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), nodeVisitor(node.dotDotDotToken, tokenVisitor, ts.isDotDotDotToken), nodeVisitor(node.name, visitor, ts.isBindingName), nodeVisitor(node.questionToken, tokenVisitor, ts.isQuestionToken), nodeVisitor(node.type, visitor, ts.isTypeNode), nodeVisitor(node.initializer, visitor, ts.isExpression));
-            case 162 /* Decorator */:
+            case 163 /* Decorator */:
                 ts.Debug.type(node);
                 return factory.updateDecorator(node, nodeVisitor(node.expression, visitor, ts.isExpression));
             // Type elements
-            case 163 /* PropertySignature */:
+            case 164 /* PropertySignature */:
                 ts.Debug.type(node);
                 return factory.updatePropertySignature(node, nodesVisitor(node.modifiers, visitor, ts.isModifier), nodeVisitor(node.name, visitor, ts.isPropertyName), nodeVisitor(node.questionToken, tokenVisitor, ts.isToken), nodeVisitor(node.type, visitor, ts.isTypeNode));
-            case 164 /* PropertyDeclaration */:
+            case 165 /* PropertyDeclaration */:
                 ts.Debug.type(node);
                 return factory.updatePropertyDeclaration(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), nodeVisitor(node.name, visitor, ts.isPropertyName), 
                 // QuestionToken and ExclamationToken is uniqued in Property Declaration and the signature of 'updateProperty' is that too
                 nodeVisitor(node.questionToken || node.exclamationToken, tokenVisitor, ts.isQuestionOrExclamationToken), nodeVisitor(node.type, visitor, ts.isTypeNode), nodeVisitor(node.initializer, visitor, ts.isExpression));
-            case 165 /* MethodSignature */:
+            case 166 /* MethodSignature */:
                 ts.Debug.type(node);
                 return factory.updateMethodSignature(node, nodesVisitor(node.modifiers, visitor, ts.isModifier), nodeVisitor(node.name, visitor, ts.isPropertyName), nodeVisitor(node.questionToken, tokenVisitor, ts.isQuestionToken), nodesVisitor(node.typeParameters, visitor, ts.isTypeParameterDeclaration), nodesVisitor(node.parameters, visitor, ts.isParameterDeclaration), nodeVisitor(node.type, visitor, ts.isTypeNode));
-            case 166 /* MethodDeclaration */:
+            case 167 /* MethodDeclaration */:
                 ts.Debug.type(node);
                 return factory.updateMethodDeclaration(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), nodeVisitor(node.asteriskToken, tokenVisitor, ts.isAsteriskToken), nodeVisitor(node.name, visitor, ts.isPropertyName), nodeVisitor(node.questionToken, tokenVisitor, ts.isQuestionToken), nodesVisitor(node.typeParameters, visitor, ts.isTypeParameterDeclaration), visitParameterList(node.parameters, visitor, context, nodesVisitor), nodeVisitor(node.type, visitor, ts.isTypeNode), visitFunctionBody(node.body, visitor, context, nodeVisitor));
-            case 167 /* Constructor */:
+            case 169 /* Constructor */:
                 ts.Debug.type(node);
                 return factory.updateConstructorDeclaration(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), visitParameterList(node.parameters, visitor, context, nodesVisitor), visitFunctionBody(node.body, visitor, context, nodeVisitor));
-            case 168 /* GetAccessor */:
+            case 170 /* GetAccessor */:
                 ts.Debug.type(node);
                 return factory.updateGetAccessorDeclaration(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), nodeVisitor(node.name, visitor, ts.isPropertyName), visitParameterList(node.parameters, visitor, context, nodesVisitor), nodeVisitor(node.type, visitor, ts.isTypeNode), visitFunctionBody(node.body, visitor, context, nodeVisitor));
-            case 169 /* SetAccessor */:
+            case 171 /* SetAccessor */:
                 ts.Debug.type(node);
                 return factory.updateSetAccessorDeclaration(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), nodeVisitor(node.name, visitor, ts.isPropertyName), visitParameterList(node.parameters, visitor, context, nodesVisitor), visitFunctionBody(node.body, visitor, context, nodeVisitor));
-            case 170 /* CallSignature */:
+            case 168 /* ClassStaticBlockDeclaration */:
+                ts.Debug.type(node);
+                context.startLexicalEnvironment();
+                context.suspendLexicalEnvironment();
+                return factory.updateClassStaticBlockDeclaration(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), visitFunctionBody(node.body, visitor, context, nodeVisitor));
+            case 172 /* CallSignature */:
                 ts.Debug.type(node);
                 return factory.updateCallSignature(node, nodesVisitor(node.typeParameters, visitor, ts.isTypeParameterDeclaration), nodesVisitor(node.parameters, visitor, ts.isParameterDeclaration), nodeVisitor(node.type, visitor, ts.isTypeNode));
-            case 171 /* ConstructSignature */:
+            case 173 /* ConstructSignature */:
                 ts.Debug.type(node);
                 return factory.updateConstructSignature(node, nodesVisitor(node.typeParameters, visitor, ts.isTypeParameterDeclaration), nodesVisitor(node.parameters, visitor, ts.isParameterDeclaration), nodeVisitor(node.type, visitor, ts.isTypeNode));
-            case 172 /* IndexSignature */:
+            case 174 /* IndexSignature */:
                 ts.Debug.type(node);
                 return factory.updateIndexSignature(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), nodesVisitor(node.parameters, visitor, ts.isParameterDeclaration), nodeVisitor(node.type, visitor, ts.isTypeNode));
             // Types
-            case 173 /* TypePredicate */:
+            case 175 /* TypePredicate */:
                 ts.Debug.type(node);
                 return factory.updateTypePredicateNode(node, nodeVisitor(node.assertsModifier, visitor, ts.isAssertsKeyword), nodeVisitor(node.parameterName, visitor, ts.isIdentifierOrThisTypeNode), nodeVisitor(node.type, visitor, ts.isTypeNode));
-            case 174 /* TypeReference */:
+            case 176 /* TypeReference */:
                 ts.Debug.type(node);
                 return factory.updateTypeReferenceNode(node, nodeVisitor(node.typeName, visitor, ts.isEntityName), nodesVisitor(node.typeArguments, visitor, ts.isTypeNode));
-            case 175 /* FunctionType */:
+            case 177 /* FunctionType */:
                 ts.Debug.type(node);
                 return factory.updateFunctionTypeNode(node, nodesVisitor(node.typeParameters, visitor, ts.isTypeParameterDeclaration), nodesVisitor(node.parameters, visitor, ts.isParameterDeclaration), nodeVisitor(node.type, visitor, ts.isTypeNode));
-            case 176 /* ConstructorType */:
+            case 178 /* ConstructorType */:
                 ts.Debug.type(node);
                 return factory.updateConstructorTypeNode(node, nodesVisitor(node.modifiers, visitor, ts.isModifier), nodesVisitor(node.typeParameters, visitor, ts.isTypeParameterDeclaration), nodesVisitor(node.parameters, visitor, ts.isParameterDeclaration), nodeVisitor(node.type, visitor, ts.isTypeNode));
-            case 177 /* TypeQuery */:
+            case 179 /* TypeQuery */:
                 ts.Debug.type(node);
                 return factory.updateTypeQueryNode(node, nodeVisitor(node.exprName, visitor, ts.isEntityName));
-            case 178 /* TypeLiteral */:
+            case 180 /* TypeLiteral */:
                 ts.Debug.type(node);
                 return factory.updateTypeLiteralNode(node, nodesVisitor(node.members, visitor, ts.isTypeElement));
-            case 179 /* ArrayType */:
+            case 181 /* ArrayType */:
                 ts.Debug.type(node);
                 return factory.updateArrayTypeNode(node, nodeVisitor(node.elementType, visitor, ts.isTypeNode));
-            case 180 /* TupleType */:
+            case 182 /* TupleType */:
                 ts.Debug.type(node);
                 return factory.updateTupleTypeNode(node, nodesVisitor(node.elements, visitor, ts.isTypeNode));
-            case 181 /* OptionalType */:
+            case 183 /* OptionalType */:
                 ts.Debug.type(node);
                 return factory.updateOptionalTypeNode(node, nodeVisitor(node.type, visitor, ts.isTypeNode));
-            case 182 /* RestType */:
+            case 184 /* RestType */:
                 ts.Debug.type(node);
                 return factory.updateRestTypeNode(node, nodeVisitor(node.type, visitor, ts.isTypeNode));
-            case 183 /* UnionType */:
+            case 185 /* UnionType */:
                 ts.Debug.type(node);
                 return factory.updateUnionTypeNode(node, nodesVisitor(node.types, visitor, ts.isTypeNode));
-            case 184 /* IntersectionType */:
+            case 186 /* IntersectionType */:
                 ts.Debug.type(node);
                 return factory.updateIntersectionTypeNode(node, nodesVisitor(node.types, visitor, ts.isTypeNode));
-            case 185 /* ConditionalType */:
+            case 187 /* ConditionalType */:
                 ts.Debug.type(node);
                 return factory.updateConditionalTypeNode(node, nodeVisitor(node.checkType, visitor, ts.isTypeNode), nodeVisitor(node.extendsType, visitor, ts.isTypeNode), nodeVisitor(node.trueType, visitor, ts.isTypeNode), nodeVisitor(node.falseType, visitor, ts.isTypeNode));
-            case 186 /* InferType */:
+            case 188 /* InferType */:
                 ts.Debug.type(node);
                 return factory.updateInferTypeNode(node, nodeVisitor(node.typeParameter, visitor, ts.isTypeParameterDeclaration));
-            case 196 /* ImportType */:
+            case 198 /* ImportType */:
                 ts.Debug.type(node);
                 return factory.updateImportTypeNode(node, nodeVisitor(node.argument, visitor, ts.isTypeNode), nodeVisitor(node.qualifier, visitor, ts.isEntityName), visitNodes(node.typeArguments, visitor, ts.isTypeNode), node.isTypeOf);
-            case 193 /* NamedTupleMember */:
+            case 195 /* NamedTupleMember */:
                 ts.Debug.type(node);
                 return factory.updateNamedTupleMember(node, visitNode(node.dotDotDotToken, visitor, ts.isDotDotDotToken), visitNode(node.name, visitor, ts.isIdentifier), visitNode(node.questionToken, visitor, ts.isQuestionToken), visitNode(node.type, visitor, ts.isTypeNode));
-            case 187 /* ParenthesizedType */:
+            case 189 /* ParenthesizedType */:
                 ts.Debug.type(node);
                 return factory.updateParenthesizedType(node, nodeVisitor(node.type, visitor, ts.isTypeNode));
-            case 189 /* TypeOperator */:
+            case 191 /* TypeOperator */:
                 ts.Debug.type(node);
                 return factory.updateTypeOperatorNode(node, nodeVisitor(node.type, visitor, ts.isTypeNode));
-            case 190 /* IndexedAccessType */:
+            case 192 /* IndexedAccessType */:
                 ts.Debug.type(node);
                 return factory.updateIndexedAccessTypeNode(node, nodeVisitor(node.objectType, visitor, ts.isTypeNode), nodeVisitor(node.indexType, visitor, ts.isTypeNode));
-            case 191 /* MappedType */:
+            case 193 /* MappedType */:
                 ts.Debug.type(node);
                 return factory.updateMappedTypeNode(node, nodeVisitor(node.readonlyToken, tokenVisitor, ts.isReadonlyKeywordOrPlusOrMinusToken), nodeVisitor(node.typeParameter, visitor, ts.isTypeParameterDeclaration), nodeVisitor(node.nameType, visitor, ts.isTypeNode), nodeVisitor(node.questionToken, tokenVisitor, ts.isQuestionOrPlusOrMinusToken), nodeVisitor(node.type, visitor, ts.isTypeNode));
-            case 192 /* LiteralType */:
+            case 194 /* LiteralType */:
                 ts.Debug.type(node);
                 return factory.updateLiteralTypeNode(node, nodeVisitor(node.literal, visitor, ts.isExpression));
-            case 194 /* TemplateLiteralType */:
+            case 196 /* TemplateLiteralType */:
                 ts.Debug.type(node);
                 return factory.updateTemplateLiteralType(node, nodeVisitor(node.head, visitor, ts.isTemplateHead), nodesVisitor(node.templateSpans, visitor, ts.isTemplateLiteralTypeSpan));
-            case 195 /* TemplateLiteralTypeSpan */:
+            case 197 /* TemplateLiteralTypeSpan */:
                 ts.Debug.type(node);
                 return factory.updateTemplateLiteralTypeSpan(node, nodeVisitor(node.type, visitor, ts.isTypeNode), nodeVisitor(node.literal, visitor, ts.isTemplateMiddleOrTemplateTail));
             // Binding patterns
-            case 197 /* ObjectBindingPattern */:
+            case 199 /* ObjectBindingPattern */:
                 ts.Debug.type(node);
                 return factory.updateObjectBindingPattern(node, nodesVisitor(node.elements, visitor, ts.isBindingElement));
-            case 198 /* ArrayBindingPattern */:
+            case 200 /* ArrayBindingPattern */:
                 ts.Debug.type(node);
                 return factory.updateArrayBindingPattern(node, nodesVisitor(node.elements, visitor, ts.isArrayBindingElement));
-            case 199 /* BindingElement */:
+            case 201 /* BindingElement */:
                 ts.Debug.type(node);
                 return factory.updateBindingElement(node, nodeVisitor(node.dotDotDotToken, tokenVisitor, ts.isDotDotDotToken), nodeVisitor(node.propertyName, visitor, ts.isPropertyName), nodeVisitor(node.name, visitor, ts.isBindingName), nodeVisitor(node.initializer, visitor, ts.isExpression));
             // Expression
-            case 200 /* ArrayLiteralExpression */:
+            case 202 /* ArrayLiteralExpression */:
                 ts.Debug.type(node);
                 return factory.updateArrayLiteralExpression(node, nodesVisitor(node.elements, visitor, ts.isExpression));
-            case 201 /* ObjectLiteralExpression */:
+            case 203 /* ObjectLiteralExpression */:
                 ts.Debug.type(node);
                 return factory.updateObjectLiteralExpression(node, nodesVisitor(node.properties, visitor, ts.isObjectLiteralElementLike));
-            case 202 /* PropertyAccessExpression */:
+            case 204 /* PropertyAccessExpression */:
                 if (node.flags & 32 /* OptionalChain */) {
                     ts.Debug.type(node);
                     return factory.updatePropertyAccessChain(node, nodeVisitor(node.expression, visitor, ts.isExpression), nodeVisitor(node.questionDotToken, tokenVisitor, ts.isQuestionDotToken), nodeVisitor(node.name, visitor, ts.isMemberName));
                 }
                 ts.Debug.type(node);
                 return factory.updatePropertyAccessExpression(node, nodeVisitor(node.expression, visitor, ts.isExpression), nodeVisitor(node.name, visitor, ts.isMemberName));
-            case 203 /* ElementAccessExpression */:
+            case 205 /* ElementAccessExpression */:
                 if (node.flags & 32 /* OptionalChain */) {
                     ts.Debug.type(node);
                     return factory.updateElementAccessChain(node, nodeVisitor(node.expression, visitor, ts.isExpression), nodeVisitor(node.questionDotToken, tokenVisitor, ts.isQuestionDotToken), nodeVisitor(node.argumentExpression, visitor, ts.isExpression));
                 }
                 ts.Debug.type(node);
                 return factory.updateElementAccessExpression(node, nodeVisitor(node.expression, visitor, ts.isExpression), nodeVisitor(node.argumentExpression, visitor, ts.isExpression));
-            case 204 /* CallExpression */:
+            case 206 /* CallExpression */:
                 if (node.flags & 32 /* OptionalChain */) {
                     ts.Debug.type(node);
                     return factory.updateCallChain(node, nodeVisitor(node.expression, visitor, ts.isExpression), nodeVisitor(node.questionDotToken, tokenVisitor, ts.isQuestionDotToken), nodesVisitor(node.typeArguments, visitor, ts.isTypeNode), nodesVisitor(node.arguments, visitor, ts.isExpression));
                 }
                 ts.Debug.type(node);
                 return factory.updateCallExpression(node, nodeVisitor(node.expression, visitor, ts.isExpression), nodesVisitor(node.typeArguments, visitor, ts.isTypeNode), nodesVisitor(node.arguments, visitor, ts.isExpression));
-            case 205 /* NewExpression */:
+            case 207 /* NewExpression */:
                 ts.Debug.type(node);
                 return factory.updateNewExpression(node, nodeVisitor(node.expression, visitor, ts.isExpression), nodesVisitor(node.typeArguments, visitor, ts.isTypeNode), nodesVisitor(node.arguments, visitor, ts.isExpression));
-            case 206 /* TaggedTemplateExpression */:
+            case 208 /* TaggedTemplateExpression */:
                 ts.Debug.type(node);
                 return factory.updateTaggedTemplateExpression(node, nodeVisitor(node.tag, visitor, ts.isExpression), visitNodes(node.typeArguments, visitor, ts.isTypeNode), nodeVisitor(node.template, visitor, ts.isTemplateLiteral));
-            case 207 /* TypeAssertionExpression */:
+            case 209 /* TypeAssertionExpression */:
                 ts.Debug.type(node);
                 return factory.updateTypeAssertion(node, nodeVisitor(node.type, visitor, ts.isTypeNode), nodeVisitor(node.expression, visitor, ts.isExpression));
-            case 208 /* ParenthesizedExpression */:
+            case 210 /* ParenthesizedExpression */:
                 ts.Debug.type(node);
                 return factory.updateParenthesizedExpression(node, nodeVisitor(node.expression, visitor, ts.isExpression));
-            case 209 /* FunctionExpression */:
+            case 211 /* FunctionExpression */:
                 ts.Debug.type(node);
                 return factory.updateFunctionExpression(node, nodesVisitor(node.modifiers, visitor, ts.isModifier), nodeVisitor(node.asteriskToken, tokenVisitor, ts.isAsteriskToken), nodeVisitor(node.name, visitor, ts.isIdentifier), nodesVisitor(node.typeParameters, visitor, ts.isTypeParameterDeclaration), visitParameterList(node.parameters, visitor, context, nodesVisitor), nodeVisitor(node.type, visitor, ts.isTypeNode), visitFunctionBody(node.body, visitor, context, nodeVisitor));
-            case 210 /* ArrowFunction */:
+            case 212 /* ArrowFunction */:
                 ts.Debug.type(node);
                 return factory.updateArrowFunction(node, nodesVisitor(node.modifiers, visitor, ts.isModifier), nodesVisitor(node.typeParameters, visitor, ts.isTypeParameterDeclaration), visitParameterList(node.parameters, visitor, context, nodesVisitor), nodeVisitor(node.type, visitor, ts.isTypeNode), nodeVisitor(node.equalsGreaterThanToken, tokenVisitor, ts.isEqualsGreaterThanToken), visitFunctionBody(node.body, visitor, context, nodeVisitor));
-            case 211 /* DeleteExpression */:
+            case 213 /* DeleteExpression */:
                 ts.Debug.type(node);
                 return factory.updateDeleteExpression(node, nodeVisitor(node.expression, visitor, ts.isExpression));
-            case 212 /* TypeOfExpression */:
+            case 214 /* TypeOfExpression */:
                 ts.Debug.type(node);
                 return factory.updateTypeOfExpression(node, nodeVisitor(node.expression, visitor, ts.isExpression));
-            case 213 /* VoidExpression */:
+            case 215 /* VoidExpression */:
                 ts.Debug.type(node);
                 return factory.updateVoidExpression(node, nodeVisitor(node.expression, visitor, ts.isExpression));
-            case 214 /* AwaitExpression */:
+            case 216 /* AwaitExpression */:
                 ts.Debug.type(node);
                 return factory.updateAwaitExpression(node, nodeVisitor(node.expression, visitor, ts.isExpression));
-            case 215 /* PrefixUnaryExpression */:
+            case 217 /* PrefixUnaryExpression */:
                 ts.Debug.type(node);
                 return factory.updatePrefixUnaryExpression(node, nodeVisitor(node.operand, visitor, ts.isExpression));
-            case 216 /* PostfixUnaryExpression */:
+            case 218 /* PostfixUnaryExpression */:
                 ts.Debug.type(node);
                 return factory.updatePostfixUnaryExpression(node, nodeVisitor(node.operand, visitor, ts.isExpression));
-            case 217 /* BinaryExpression */:
+            case 219 /* BinaryExpression */:
                 ts.Debug.type(node);
                 return factory.updateBinaryExpression(node, nodeVisitor(node.left, visitor, ts.isExpression), nodeVisitor(node.operatorToken, tokenVisitor, ts.isBinaryOperatorToken), nodeVisitor(node.right, visitor, ts.isExpression));
-            case 218 /* ConditionalExpression */:
+            case 220 /* ConditionalExpression */:
                 ts.Debug.type(node);
                 return factory.updateConditionalExpression(node, nodeVisitor(node.condition, visitor, ts.isExpression), nodeVisitor(node.questionToken, tokenVisitor, ts.isQuestionToken), nodeVisitor(node.whenTrue, visitor, ts.isExpression), nodeVisitor(node.colonToken, tokenVisitor, ts.isColonToken), nodeVisitor(node.whenFalse, visitor, ts.isExpression));
-            case 219 /* TemplateExpression */:
+            case 221 /* TemplateExpression */:
                 ts.Debug.type(node);
                 return factory.updateTemplateExpression(node, nodeVisitor(node.head, visitor, ts.isTemplateHead), nodesVisitor(node.templateSpans, visitor, ts.isTemplateSpan));
-            case 220 /* YieldExpression */:
+            case 222 /* YieldExpression */:
                 ts.Debug.type(node);
                 return factory.updateYieldExpression(node, nodeVisitor(node.asteriskToken, tokenVisitor, ts.isAsteriskToken), nodeVisitor(node.expression, visitor, ts.isExpression));
-            case 221 /* SpreadElement */:
+            case 223 /* SpreadElement */:
                 ts.Debug.type(node);
                 return factory.updateSpreadElement(node, nodeVisitor(node.expression, visitor, ts.isExpression));
-            case 222 /* ClassExpression */:
+            case 224 /* ClassExpression */:
                 ts.Debug.type(node);
                 return factory.updateClassExpression(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), nodeVisitor(node.name, visitor, ts.isIdentifier), nodesVisitor(node.typeParameters, visitor, ts.isTypeParameterDeclaration), nodesVisitor(node.heritageClauses, visitor, ts.isHeritageClause), nodesVisitor(node.members, visitor, ts.isClassElement));
-            case 224 /* ExpressionWithTypeArguments */:
+            case 226 /* ExpressionWithTypeArguments */:
                 ts.Debug.type(node);
                 return factory.updateExpressionWithTypeArguments(node, nodeVisitor(node.expression, visitor, ts.isExpression), nodesVisitor(node.typeArguments, visitor, ts.isTypeNode));
-            case 225 /* AsExpression */:
+            case 227 /* AsExpression */:
                 ts.Debug.type(node);
                 return factory.updateAsExpression(node, nodeVisitor(node.expression, visitor, ts.isExpression), nodeVisitor(node.type, visitor, ts.isTypeNode));
-            case 226 /* NonNullExpression */:
+            case 228 /* NonNullExpression */:
                 if (node.flags & 32 /* OptionalChain */) {
                     ts.Debug.type(node);
                     return factory.updateNonNullChain(node, nodeVisitor(node.expression, visitor, ts.isExpression));
                 }
                 ts.Debug.type(node);
                 return factory.updateNonNullExpression(node, nodeVisitor(node.expression, visitor, ts.isExpression));
-            case 227 /* MetaProperty */:
+            case 229 /* MetaProperty */:
                 ts.Debug.type(node);
                 return factory.updateMetaProperty(node, nodeVisitor(node.name, visitor, ts.isIdentifier));
             // Misc
-            case 229 /* TemplateSpan */:
+            case 231 /* TemplateSpan */:
                 ts.Debug.type(node);
                 return factory.updateTemplateSpan(node, nodeVisitor(node.expression, visitor, ts.isExpression), nodeVisitor(node.literal, visitor, ts.isTemplateMiddleOrTemplateTail));
             // Element
-            case 231 /* Block */:
+            case 233 /* Block */:
                 ts.Debug.type(node);
                 return factory.updateBlock(node, nodesVisitor(node.statements, visitor, ts.isStatement));
-            case 233 /* VariableStatement */:
+            case 235 /* VariableStatement */:
                 ts.Debug.type(node);
                 return factory.updateVariableStatement(node, nodesVisitor(node.modifiers, visitor, ts.isModifier), nodeVisitor(node.declarationList, visitor, ts.isVariableDeclarationList));
-            case 234 /* ExpressionStatement */:
+            case 236 /* ExpressionStatement */:
                 ts.Debug.type(node);
                 return factory.updateExpressionStatement(node, nodeVisitor(node.expression, visitor, ts.isExpression));
-            case 235 /* IfStatement */:
+            case 237 /* IfStatement */:
                 ts.Debug.type(node);
                 return factory.updateIfStatement(node, nodeVisitor(node.expression, visitor, ts.isExpression), nodeVisitor(node.thenStatement, visitor, ts.isStatement, factory.liftToBlock), nodeVisitor(node.elseStatement, visitor, ts.isStatement, factory.liftToBlock));
-            case 236 /* DoStatement */:
+            case 238 /* DoStatement */:
                 ts.Debug.type(node);
                 return factory.updateDoStatement(node, visitIterationBody(node.statement, visitor, context), nodeVisitor(node.expression, visitor, ts.isExpression));
-            case 237 /* WhileStatement */:
+            case 239 /* WhileStatement */:
                 ts.Debug.type(node);
                 return factory.updateWhileStatement(node, nodeVisitor(node.expression, visitor, ts.isExpression), visitIterationBody(node.statement, visitor, context));
-            case 238 /* ForStatement */:
+            case 240 /* ForStatement */:
                 ts.Debug.type(node);
                 return factory.updateForStatement(node, nodeVisitor(node.initializer, visitor, ts.isForInitializer), nodeVisitor(node.condition, visitor, ts.isExpression), nodeVisitor(node.incrementor, visitor, ts.isExpression), visitIterationBody(node.statement, visitor, context));
-            case 239 /* ForInStatement */:
+            case 241 /* ForInStatement */:
                 ts.Debug.type(node);
                 return factory.updateForInStatement(node, nodeVisitor(node.initializer, visitor, ts.isForInitializer), nodeVisitor(node.expression, visitor, ts.isExpression), visitIterationBody(node.statement, visitor, context));
-            case 240 /* ForOfStatement */:
+            case 242 /* ForOfStatement */:
                 ts.Debug.type(node);
                 return factory.updateForOfStatement(node, nodeVisitor(node.awaitModifier, tokenVisitor, ts.isAwaitKeyword), nodeVisitor(node.initializer, visitor, ts.isForInitializer), nodeVisitor(node.expression, visitor, ts.isExpression), visitIterationBody(node.statement, visitor, context));
-            case 241 /* ContinueStatement */:
+            case 243 /* ContinueStatement */:
                 ts.Debug.type(node);
                 return factory.updateContinueStatement(node, nodeVisitor(node.label, visitor, ts.isIdentifier));
-            case 242 /* BreakStatement */:
+            case 244 /* BreakStatement */:
                 ts.Debug.type(node);
                 return factory.updateBreakStatement(node, nodeVisitor(node.label, visitor, ts.isIdentifier));
-            case 243 /* ReturnStatement */:
+            case 245 /* ReturnStatement */:
                 ts.Debug.type(node);
                 return factory.updateReturnStatement(node, nodeVisitor(node.expression, visitor, ts.isExpression));
-            case 244 /* WithStatement */:
+            case 246 /* WithStatement */:
                 ts.Debug.type(node);
                 return factory.updateWithStatement(node, nodeVisitor(node.expression, visitor, ts.isExpression), nodeVisitor(node.statement, visitor, ts.isStatement, factory.liftToBlock));
-            case 245 /* SwitchStatement */:
+            case 247 /* SwitchStatement */:
                 ts.Debug.type(node);
                 return factory.updateSwitchStatement(node, nodeVisitor(node.expression, visitor, ts.isExpression), nodeVisitor(node.caseBlock, visitor, ts.isCaseBlock));
-            case 246 /* LabeledStatement */:
+            case 248 /* LabeledStatement */:
                 ts.Debug.type(node);
                 return factory.updateLabeledStatement(node, nodeVisitor(node.label, visitor, ts.isIdentifier), nodeVisitor(node.statement, visitor, ts.isStatement, factory.liftToBlock));
-            case 247 /* ThrowStatement */:
+            case 249 /* ThrowStatement */:
                 ts.Debug.type(node);
                 return factory.updateThrowStatement(node, nodeVisitor(node.expression, visitor, ts.isExpression));
-            case 248 /* TryStatement */:
+            case 250 /* TryStatement */:
                 ts.Debug.type(node);
                 return factory.updateTryStatement(node, nodeVisitor(node.tryBlock, visitor, ts.isBlock), nodeVisitor(node.catchClause, visitor, ts.isCatchClause), nodeVisitor(node.finallyBlock, visitor, ts.isBlock));
-            case 250 /* VariableDeclaration */:
+            case 252 /* VariableDeclaration */:
                 ts.Debug.type(node);
                 return factory.updateVariableDeclaration(node, nodeVisitor(node.name, visitor, ts.isBindingName), nodeVisitor(node.exclamationToken, tokenVisitor, ts.isExclamationToken), nodeVisitor(node.type, visitor, ts.isTypeNode), nodeVisitor(node.initializer, visitor, ts.isExpression));
-            case 251 /* VariableDeclarationList */:
+            case 253 /* VariableDeclarationList */:
                 ts.Debug.type(node);
                 return factory.updateVariableDeclarationList(node, nodesVisitor(node.declarations, visitor, ts.isVariableDeclaration));
-            case 252 /* FunctionDeclaration */:
+            case 254 /* FunctionDeclaration */:
                 ts.Debug.type(node);
                 return factory.updateFunctionDeclaration(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), nodeVisitor(node.asteriskToken, tokenVisitor, ts.isAsteriskToken), nodeVisitor(node.name, visitor, ts.isIdentifier), nodesVisitor(node.typeParameters, visitor, ts.isTypeParameterDeclaration), visitParameterList(node.parameters, visitor, context, nodesVisitor), nodeVisitor(node.type, visitor, ts.isTypeNode), visitFunctionBody(node.body, visitor, context, nodeVisitor));
-            case 253 /* ClassDeclaration */:
+            case 255 /* ClassDeclaration */:
                 ts.Debug.type(node);
                 return factory.updateClassDeclaration(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), nodeVisitor(node.name, visitor, ts.isIdentifier), nodesVisitor(node.typeParameters, visitor, ts.isTypeParameterDeclaration), nodesVisitor(node.heritageClauses, visitor, ts.isHeritageClause), nodesVisitor(node.members, visitor, ts.isClassElement));
-            case 254 /* InterfaceDeclaration */:
+            case 256 /* InterfaceDeclaration */:
                 ts.Debug.type(node);
                 return factory.updateInterfaceDeclaration(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), nodeVisitor(node.name, visitor, ts.isIdentifier), nodesVisitor(node.typeParameters, visitor, ts.isTypeParameterDeclaration), nodesVisitor(node.heritageClauses, visitor, ts.isHeritageClause), nodesVisitor(node.members, visitor, ts.isTypeElement));
-            case 255 /* TypeAliasDeclaration */:
+            case 257 /* TypeAliasDeclaration */:
                 ts.Debug.type(node);
                 return factory.updateTypeAliasDeclaration(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), nodeVisitor(node.name, visitor, ts.isIdentifier), nodesVisitor(node.typeParameters, visitor, ts.isTypeParameterDeclaration), nodeVisitor(node.type, visitor, ts.isTypeNode));
-            case 256 /* EnumDeclaration */:
+            case 258 /* EnumDeclaration */:
                 ts.Debug.type(node);
                 return factory.updateEnumDeclaration(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), nodeVisitor(node.name, visitor, ts.isIdentifier), nodesVisitor(node.members, visitor, ts.isEnumMember));
-            case 257 /* ModuleDeclaration */:
+            case 259 /* ModuleDeclaration */:
                 ts.Debug.type(node);
                 return factory.updateModuleDeclaration(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), nodeVisitor(node.name, visitor, ts.isModuleName), nodeVisitor(node.body, visitor, ts.isModuleBody));
-            case 258 /* ModuleBlock */:
+            case 260 /* ModuleBlock */:
                 ts.Debug.type(node);
                 return factory.updateModuleBlock(node, nodesVisitor(node.statements, visitor, ts.isStatement));
-            case 259 /* CaseBlock */:
+            case 261 /* CaseBlock */:
                 ts.Debug.type(node);
                 return factory.updateCaseBlock(node, nodesVisitor(node.clauses, visitor, ts.isCaseOrDefaultClause));
-            case 260 /* NamespaceExportDeclaration */:
+            case 262 /* NamespaceExportDeclaration */:
                 ts.Debug.type(node);
                 return factory.updateNamespaceExportDeclaration(node, nodeVisitor(node.name, visitor, ts.isIdentifier));
-            case 261 /* ImportEqualsDeclaration */:
+            case 263 /* ImportEqualsDeclaration */:
                 ts.Debug.type(node);
                 return factory.updateImportEqualsDeclaration(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), node.isTypeOnly, nodeVisitor(node.name, visitor, ts.isIdentifier), nodeVisitor(node.moduleReference, visitor, ts.isModuleReference));
-            case 262 /* ImportDeclaration */:
+            case 264 /* ImportDeclaration */:
                 ts.Debug.type(node);
                 return factory.updateImportDeclaration(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), nodeVisitor(node.importClause, visitor, ts.isImportClause), nodeVisitor(node.moduleSpecifier, visitor, ts.isExpression));
-            case 263 /* ImportClause */:
+            case 265 /* ImportClause */:
                 ts.Debug.type(node);
                 return factory.updateImportClause(node, node.isTypeOnly, nodeVisitor(node.name, visitor, ts.isIdentifier), nodeVisitor(node.namedBindings, visitor, ts.isNamedImportBindings));
-            case 264 /* NamespaceImport */:
+            case 266 /* NamespaceImport */:
                 ts.Debug.type(node);
                 return factory.updateNamespaceImport(node, nodeVisitor(node.name, visitor, ts.isIdentifier));
-            case 270 /* NamespaceExport */:
+            case 272 /* NamespaceExport */:
                 ts.Debug.type(node);
                 return factory.updateNamespaceExport(node, nodeVisitor(node.name, visitor, ts.isIdentifier));
-            case 265 /* NamedImports */:
+            case 267 /* NamedImports */:
                 ts.Debug.type(node);
                 return factory.updateNamedImports(node, nodesVisitor(node.elements, visitor, ts.isImportSpecifier));
-            case 266 /* ImportSpecifier */:
+            case 268 /* ImportSpecifier */:
                 ts.Debug.type(node);
                 return factory.updateImportSpecifier(node, nodeVisitor(node.propertyName, visitor, ts.isIdentifier), nodeVisitor(node.name, visitor, ts.isIdentifier));
-            case 267 /* ExportAssignment */:
+            case 269 /* ExportAssignment */:
                 ts.Debug.type(node);
                 return factory.updateExportAssignment(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), nodeVisitor(node.expression, visitor, ts.isExpression));
-            case 268 /* ExportDeclaration */:
+            case 270 /* ExportDeclaration */:
                 ts.Debug.type(node);
                 return factory.updateExportDeclaration(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), node.isTypeOnly, nodeVisitor(node.exportClause, visitor, ts.isNamedExportBindings), nodeVisitor(node.moduleSpecifier, visitor, ts.isExpression));
-            case 269 /* NamedExports */:
+            case 271 /* NamedExports */:
                 ts.Debug.type(node);
                 return factory.updateNamedExports(node, nodesVisitor(node.elements, visitor, ts.isExportSpecifier));
-            case 271 /* ExportSpecifier */:
+            case 273 /* ExportSpecifier */:
                 ts.Debug.type(node);
                 return factory.updateExportSpecifier(node, nodeVisitor(node.propertyName, visitor, ts.isIdentifier), nodeVisitor(node.name, visitor, ts.isIdentifier));
             // Module references
-            case 273 /* ExternalModuleReference */:
+            case 275 /* ExternalModuleReference */:
                 ts.Debug.type(node);
                 return factory.updateExternalModuleReference(node, nodeVisitor(node.expression, visitor, ts.isExpression));
             // JSX
-            case 274 /* JsxElement */:
+            case 276 /* JsxElement */:
                 ts.Debug.type(node);
                 return factory.updateJsxElement(node, nodeVisitor(node.openingElement, visitor, ts.isJsxOpeningElement), nodesVisitor(node.children, visitor, ts.isJsxChild), nodeVisitor(node.closingElement, visitor, ts.isJsxClosingElement));
-            case 275 /* JsxSelfClosingElement */:
+            case 277 /* JsxSelfClosingElement */:
                 ts.Debug.type(node);
                 return factory.updateJsxSelfClosingElement(node, nodeVisitor(node.tagName, visitor, ts.isJsxTagNameExpression), nodesVisitor(node.typeArguments, visitor, ts.isTypeNode), nodeVisitor(node.attributes, visitor, ts.isJsxAttributes));
-            case 276 /* JsxOpeningElement */:
+            case 278 /* JsxOpeningElement */:
                 ts.Debug.type(node);
                 return factory.updateJsxOpeningElement(node, nodeVisitor(node.tagName, visitor, ts.isJsxTagNameExpression), nodesVisitor(node.typeArguments, visitor, ts.isTypeNode), nodeVisitor(node.attributes, visitor, ts.isJsxAttributes));
-            case 277 /* JsxClosingElement */:
+            case 279 /* JsxClosingElement */:
                 ts.Debug.type(node);
                 return factory.updateJsxClosingElement(node, nodeVisitor(node.tagName, visitor, ts.isJsxTagNameExpression));
-            case 278 /* JsxFragment */:
+            case 280 /* JsxFragment */:
                 ts.Debug.type(node);
                 return factory.updateJsxFragment(node, nodeVisitor(node.openingFragment, visitor, ts.isJsxOpeningFragment), nodesVisitor(node.children, visitor, ts.isJsxChild), nodeVisitor(node.closingFragment, visitor, ts.isJsxClosingFragment));
-            case 281 /* JsxAttribute */:
+            case 283 /* JsxAttribute */:
                 ts.Debug.type(node);
                 return factory.updateJsxAttribute(node, nodeVisitor(node.name, visitor, ts.isIdentifier), nodeVisitor(node.initializer, visitor, ts.isStringLiteralOrJsxExpression));
-            case 282 /* JsxAttributes */:
+            case 284 /* JsxAttributes */:
                 ts.Debug.type(node);
                 return factory.updateJsxAttributes(node, nodesVisitor(node.properties, visitor, ts.isJsxAttributeLike));
-            case 283 /* JsxSpreadAttribute */:
+            case 285 /* JsxSpreadAttribute */:
                 ts.Debug.type(node);
                 return factory.updateJsxSpreadAttribute(node, nodeVisitor(node.expression, visitor, ts.isExpression));
-            case 284 /* JsxExpression */:
+            case 286 /* JsxExpression */:
                 ts.Debug.type(node);
                 return factory.updateJsxExpression(node, nodeVisitor(node.expression, visitor, ts.isExpression));
             // Clauses
-            case 285 /* CaseClause */:
+            case 287 /* CaseClause */:
                 ts.Debug.type(node);
                 return factory.updateCaseClause(node, nodeVisitor(node.expression, visitor, ts.isExpression), nodesVisitor(node.statements, visitor, ts.isStatement));
-            case 286 /* DefaultClause */:
+            case 288 /* DefaultClause */:
                 ts.Debug.type(node);
                 return factory.updateDefaultClause(node, nodesVisitor(node.statements, visitor, ts.isStatement));
-            case 287 /* HeritageClause */:
+            case 289 /* HeritageClause */:
                 ts.Debug.type(node);
                 return factory.updateHeritageClause(node, nodesVisitor(node.types, visitor, ts.isExpressionWithTypeArguments));
-            case 288 /* CatchClause */:
+            case 290 /* CatchClause */:
                 ts.Debug.type(node);
                 return factory.updateCatchClause(node, nodeVisitor(node.variableDeclaration, visitor, ts.isVariableDeclaration), nodeVisitor(node.block, visitor, ts.isBlock));
             // Property assignments
-            case 289 /* PropertyAssignment */:
+            case 291 /* PropertyAssignment */:
                 ts.Debug.type(node);
                 return factory.updatePropertyAssignment(node, nodeVisitor(node.name, visitor, ts.isPropertyName), nodeVisitor(node.initializer, visitor, ts.isExpression));
-            case 290 /* ShorthandPropertyAssignment */:
+            case 292 /* ShorthandPropertyAssignment */:
                 ts.Debug.type(node);
                 return factory.updateShorthandPropertyAssignment(node, nodeVisitor(node.name, visitor, ts.isIdentifier), nodeVisitor(node.objectAssignmentInitializer, visitor, ts.isExpression));
-            case 291 /* SpreadAssignment */:
+            case 293 /* SpreadAssignment */:
                 ts.Debug.type(node);
                 return factory.updateSpreadAssignment(node, nodeVisitor(node.expression, visitor, ts.isExpression));
             // Enum
-            case 292 /* EnumMember */:
+            case 294 /* EnumMember */:
                 ts.Debug.type(node);
                 return factory.updateEnumMember(node, nodeVisitor(node.name, visitor, ts.isPropertyName), nodeVisitor(node.initializer, visitor, ts.isExpression));
             // Top-level nodes
-            case 298 /* SourceFile */:
+            case 300 /* SourceFile */:
                 ts.Debug.type(node);
                 return factory.updateSourceFile(node, visitLexicalEnvironment(node.statements, visitor, context));
             // Transformation nodes
-            case 340 /* PartiallyEmittedExpression */:
+            case 345 /* PartiallyEmittedExpression */:
                 ts.Debug.type(node);
                 return factory.updatePartiallyEmittedExpression(node, nodeVisitor(node.expression, visitor, ts.isExpression));
-            case 341 /* CommaListExpression */:
+            case 346 /* CommaListExpression */:
                 ts.Debug.type(node);
                 return factory.updateCommaListExpression(node, nodesVisitor(node.elements, visitor, ts.isExpression));
             default:
@@ -84065,6 +85634,7 @@
         var sourcesContent;
         var names = [];
         var nameToNameIndexMap;
+        var mappingCharCodes = [];
         var mappings = "";
         // Last recorded and encoded mappings
         var lastGeneratedLine = 0;
@@ -84239,6 +85809,14 @@
                 || lastSourceCharacter !== pendingSourceCharacter
                 || lastNameIndex !== pendingNameIndex;
         }
+        function appendMappingCharCode(charCode) {
+            mappingCharCodes.push(charCode);
+            // String.fromCharCode accepts its arguments on the stack, so we have to chunk the input,
+            // otherwise we can get stack overflows for large source maps
+            if (mappingCharCodes.length >= 1024) {
+                flushMappingBuffer();
+            }
+        }
         function commitPendingMapping() {
             if (!hasPending || !shouldCommitMapping()) {
                 return;
@@ -84248,42 +85826,50 @@
             if (lastGeneratedLine < pendingGeneratedLine) {
                 // Emit line delimiters
                 do {
-                    mappings += ";";
+                    appendMappingCharCode(59 /* semicolon */);
                     lastGeneratedLine++;
-                    lastGeneratedCharacter = 0;
                 } while (lastGeneratedLine < pendingGeneratedLine);
+                // Only need to set this once
+                lastGeneratedCharacter = 0;
             }
             else {
                 ts.Debug.assertEqual(lastGeneratedLine, pendingGeneratedLine, "generatedLine cannot backtrack");
                 // Emit comma to separate the entry
                 if (hasLast) {
-                    mappings += ",";
+                    appendMappingCharCode(44 /* comma */);
                 }
             }
             // 1. Relative generated character
-            mappings += base64VLQFormatEncode(pendingGeneratedCharacter - lastGeneratedCharacter);
+            appendBase64VLQ(pendingGeneratedCharacter - lastGeneratedCharacter);
             lastGeneratedCharacter = pendingGeneratedCharacter;
             if (hasPendingSource) {
                 // 2. Relative sourceIndex
-                mappings += base64VLQFormatEncode(pendingSourceIndex - lastSourceIndex);
+                appendBase64VLQ(pendingSourceIndex - lastSourceIndex);
                 lastSourceIndex = pendingSourceIndex;
                 // 3. Relative source line
-                mappings += base64VLQFormatEncode(pendingSourceLine - lastSourceLine);
+                appendBase64VLQ(pendingSourceLine - lastSourceLine);
                 lastSourceLine = pendingSourceLine;
                 // 4. Relative source character
-                mappings += base64VLQFormatEncode(pendingSourceCharacter - lastSourceCharacter);
+                appendBase64VLQ(pendingSourceCharacter - lastSourceCharacter);
                 lastSourceCharacter = pendingSourceCharacter;
                 if (hasPendingName) {
                     // 5. Relative nameIndex
-                    mappings += base64VLQFormatEncode(pendingNameIndex - lastNameIndex);
+                    appendBase64VLQ(pendingNameIndex - lastNameIndex);
                     lastNameIndex = pendingNameIndex;
                 }
             }
             hasLast = true;
             exit();
         }
+        function flushMappingBuffer() {
+            if (mappingCharCodes.length > 0) {
+                mappings += String.fromCharCode.apply(undefined, mappingCharCodes);
+                mappingCharCodes.length = 0;
+            }
+        }
         function toJSON() {
             commitPendingMapping();
+            flushMappingBuffer();
             return {
                 version: 3,
                 file: file,
@@ -84294,10 +85880,33 @@
                 sourcesContent: sourcesContent,
             };
         }
+        function appendBase64VLQ(inValue) {
+            // Add a new least significant bit that has the sign of the value.
+            // if negative number the least significant bit that gets added to the number has value 1
+            // else least significant bit value that gets added is 0
+            // eg. -1 changes to binary : 01 [1] => 3
+            //     +1 changes to binary : 01 [0] => 2
+            if (inValue < 0) {
+                inValue = ((-inValue) << 1) + 1;
+            }
+            else {
+                inValue = inValue << 1;
+            }
+            // Encode 5 bits at a time starting from least significant bits
+            do {
+                var currentDigit = inValue & 31; // 11111
+                inValue = inValue >> 5;
+                if (inValue > 0) {
+                    // There are still more digits to decode, set the msb (6th bit)
+                    currentDigit = currentDigit | 32;
+                }
+                appendMappingCharCode(base64FormatEncode(currentDigit));
+            } while (inValue > 0);
+        }
     }
     ts.createSourceMapGenerator = createSourceMapGenerator;
     // Sometimes tools can see the following line as a source mapping url comment, so we mangle it a bit (the [M])
-    var sourceMapCommentRegExp = /^\/\/[@#] source[M]appingURL=(.+)\s*$/;
+    var sourceMapCommentRegExp = /^\/\/[@#] source[M]appingURL=(.+)$/;
     var whitespaceOrMapCommentRegExp = /^\s*(\/\/[@#] .*)?$/;
     function getLineInfo(text, lineStarts) {
         return {
@@ -84314,7 +85923,7 @@
             var line = lineInfo.getLineText(index);
             var comment = sourceMapCommentRegExp.exec(line);
             if (comment) {
-                return comment[1];
+                return ts.trimStringEnd(comment[1]);
             }
             // If we see a non-whitespace/map comment-like line, break, to avoid scanning up the entire file
             else if (!line.match(whitespaceOrMapCommentRegExp)) {
@@ -84520,31 +86129,6 @@
                         ch === 47 /* slash */ ? 63 :
                             -1;
     }
-    function base64VLQFormatEncode(inValue) {
-        // Add a new least significant bit that has the sign of the value.
-        // if negative number the least significant bit that gets added to the number has value 1
-        // else least significant bit value that gets added is 0
-        // eg. -1 changes to binary : 01 [1] => 3
-        //     +1 changes to binary : 01 [0] => 2
-        if (inValue < 0) {
-            inValue = ((-inValue) << 1) + 1;
-        }
-        else {
-            inValue = inValue << 1;
-        }
-        // Encode 5 bits at a time starting from least significant bits
-        var encodedStr = "";
-        do {
-            var currentDigit = inValue & 31; // 11111
-            inValue = inValue >> 5;
-            if (inValue > 0) {
-                // There are still more digits to decode, set the msb (6th bit)
-                currentDigit = currentDigit | 32;
-            }
-            encodedStr = encodedStr + String.fromCharCode(base64FormatEncode(currentDigit));
-        } while (inValue > 0);
-        return encodedStr;
-    }
     function isSourceMappedPosition(value) {
         return value.sourceIndex !== undefined
             && value.sourcePosition !== undefined;
@@ -84708,7 +86292,7 @@
     function chainBundle(context, transformSourceFile) {
         return transformSourceFileOrBundle;
         function transformSourceFileOrBundle(node) {
-            return node.kind === 298 /* SourceFile */ ? transformSourceFile(node) : transformBundle(node);
+            return node.kind === 300 /* SourceFile */ ? transformSourceFile(node) : transformBundle(node);
         }
         function transformBundle(node) {
             return context.factory.createBundle(ts.map(node.sourceFiles, transformSourceFile), node.prepends);
@@ -84759,7 +86343,7 @@
         for (var _i = 0, _a = sourceFile.statements; _i < _a.length; _i++) {
             var node = _a[_i];
             switch (node.kind) {
-                case 262 /* ImportDeclaration */:
+                case 264 /* ImportDeclaration */:
                     // import "mod"
                     // import x from "mod"
                     // import * as x from "mod"
@@ -84772,13 +86356,13 @@
                         hasImportDefault = true;
                     }
                     break;
-                case 261 /* ImportEqualsDeclaration */:
-                    if (node.moduleReference.kind === 273 /* ExternalModuleReference */) {
+                case 263 /* ImportEqualsDeclaration */:
+                    if (node.moduleReference.kind === 275 /* ExternalModuleReference */) {
                         // import x = require("mod")
                         externalImports.push(node);
                     }
                     break;
-                case 268 /* ExportDeclaration */:
+                case 270 /* ExportDeclaration */:
                     if (node.moduleSpecifier) {
                         if (!node.exportClause) {
                             // export * from "mod"
@@ -84809,13 +86393,13 @@
                         addExportedNamesForExportDeclaration(node);
                     }
                     break;
-                case 267 /* ExportAssignment */:
+                case 269 /* ExportAssignment */:
                     if (node.isExportEquals && !exportEquals) {
                         // export = x
                         exportEquals = node;
                     }
                     break;
-                case 233 /* VariableStatement */:
+                case 235 /* VariableStatement */:
                     if (ts.hasSyntacticModifier(node, 1 /* Export */)) {
                         for (var _b = 0, _c = node.declarationList.declarations; _b < _c.length; _b++) {
                             var decl = _c[_b];
@@ -84823,7 +86407,7 @@
                         }
                     }
                     break;
-                case 252 /* FunctionDeclaration */:
+                case 254 /* FunctionDeclaration */:
                     if (ts.hasSyntacticModifier(node, 1 /* Export */)) {
                         if (ts.hasSyntacticModifier(node, 512 /* Default */)) {
                             // export default function() { }
@@ -84843,7 +86427,7 @@
                         }
                     }
                     break;
-                case 253 /* ClassDeclaration */:
+                case 255 /* ClassDeclaration */:
                     if (ts.hasSyntacticModifier(node, 1 /* Export */)) {
                         if (ts.hasSyntacticModifier(node, 512 /* Default */)) {
                             // export default class { }
@@ -84941,27 +86525,27 @@
     }
     ts.isSimpleInlineableExpression = isSimpleInlineableExpression;
     function isCompoundAssignment(kind) {
-        return kind >= 63 /* FirstCompoundAssignment */
-            && kind <= 77 /* LastCompoundAssignment */;
+        return kind >= 64 /* FirstCompoundAssignment */
+            && kind <= 78 /* LastCompoundAssignment */;
     }
     ts.isCompoundAssignment = isCompoundAssignment;
     function getNonAssignmentOperatorForCompoundAssignment(kind) {
         switch (kind) {
-            case 63 /* PlusEqualsToken */: return 39 /* PlusToken */;
-            case 64 /* MinusEqualsToken */: return 40 /* MinusToken */;
-            case 65 /* AsteriskEqualsToken */: return 41 /* AsteriskToken */;
-            case 66 /* AsteriskAsteriskEqualsToken */: return 42 /* AsteriskAsteriskToken */;
-            case 67 /* SlashEqualsToken */: return 43 /* SlashToken */;
-            case 68 /* PercentEqualsToken */: return 44 /* PercentToken */;
-            case 69 /* LessThanLessThanEqualsToken */: return 47 /* LessThanLessThanToken */;
-            case 70 /* GreaterThanGreaterThanEqualsToken */: return 48 /* GreaterThanGreaterThanToken */;
-            case 71 /* GreaterThanGreaterThanGreaterThanEqualsToken */: return 49 /* GreaterThanGreaterThanGreaterThanToken */;
-            case 72 /* AmpersandEqualsToken */: return 50 /* AmpersandToken */;
-            case 73 /* BarEqualsToken */: return 51 /* BarToken */;
-            case 77 /* CaretEqualsToken */: return 52 /* CaretToken */;
-            case 74 /* BarBarEqualsToken */: return 56 /* BarBarToken */;
-            case 75 /* AmpersandAmpersandEqualsToken */: return 55 /* AmpersandAmpersandToken */;
-            case 76 /* QuestionQuestionEqualsToken */: return 60 /* QuestionQuestionToken */;
+            case 64 /* PlusEqualsToken */: return 39 /* PlusToken */;
+            case 65 /* MinusEqualsToken */: return 40 /* MinusToken */;
+            case 66 /* AsteriskEqualsToken */: return 41 /* AsteriskToken */;
+            case 67 /* AsteriskAsteriskEqualsToken */: return 42 /* AsteriskAsteriskToken */;
+            case 68 /* SlashEqualsToken */: return 43 /* SlashToken */;
+            case 69 /* PercentEqualsToken */: return 44 /* PercentToken */;
+            case 70 /* LessThanLessThanEqualsToken */: return 47 /* LessThanLessThanToken */;
+            case 71 /* GreaterThanGreaterThanEqualsToken */: return 48 /* GreaterThanGreaterThanToken */;
+            case 72 /* GreaterThanGreaterThanGreaterThanEqualsToken */: return 49 /* GreaterThanGreaterThanGreaterThanToken */;
+            case 73 /* AmpersandEqualsToken */: return 50 /* AmpersandToken */;
+            case 74 /* BarEqualsToken */: return 51 /* BarToken */;
+            case 78 /* CaretEqualsToken */: return 52 /* CaretToken */;
+            case 75 /* BarBarEqualsToken */: return 56 /* BarBarToken */;
+            case 76 /* AmpersandAmpersandEqualsToken */: return 55 /* AmpersandAmpersandToken */;
+            case 77 /* QuestionQuestionEqualsToken */: return 60 /* QuestionQuestionToken */;
         }
     }
     ts.getNonAssignmentOperatorForCompoundAssignment = getNonAssignmentOperatorForCompoundAssignment;
@@ -84998,6 +86582,13 @@
         return ts.filter(node.members, function (m) { return isInitializedOrStaticProperty(m, requireInitializer, isStatic); });
     }
     ts.getProperties = getProperties;
+    function isStaticPropertyDeclarationOrClassStaticBlockDeclaration(element) {
+        return isStaticPropertyDeclaration(element) || ts.isClassStaticBlockDeclaration(element);
+    }
+    function getStaticPropertiesAndClassStaticBlock(node) {
+        return ts.filter(node.members, isStaticPropertyDeclarationOrClassStaticBlockDeclaration);
+    }
+    ts.getStaticPropertiesAndClassStaticBlock = getStaticPropertiesAndClassStaticBlock;
     /**
      * Is a class element either a static or an instance property declaration with an initializer?
      *
@@ -85009,6 +86600,9 @@
             && (!!member.initializer || !requireInitializer)
             && ts.hasStaticModifier(member) === isStatic;
     }
+    function isStaticPropertyDeclaration(member) {
+        return ts.isPropertyDeclaration(member) && ts.hasStaticModifier(member);
+    }
     /**
      * Gets a value indicating whether a class element is either a static or an instance property declaration with an initializer.
      *
@@ -85016,7 +86610,7 @@
      * @param isStatic A value indicating whether the member should be a static or instance member.
      */
     function isInitializedProperty(member) {
-        return member.kind === 164 /* PropertyDeclaration */
+        return member.kind === 165 /* PropertyDeclaration */
             && member.initializer !== undefined;
     }
     ts.isInitializedProperty = isInitializedProperty;
@@ -85026,7 +86620,7 @@
      * @param member The class element node.
      */
     function isNonStaticMethodOrAccessorWithPrivateName(member) {
-        return !ts.hasStaticModifier(member) && ts.isMethodOrAccessor(member) && ts.isPrivateIdentifier(member.name);
+        return !ts.isStatic(member) && ts.isMethodOrAccessor(member) && ts.isPrivateIdentifier(member.name);
     }
     ts.isNonStaticMethodOrAccessorWithPrivateName = isNonStaticMethodOrAccessorWithPrivateName;
 })(ts || (ts = {}));
@@ -85566,6 +87160,7 @@
         // Examples: `\n` is converted to "\\n", a template string with a newline to "\n".
         var text = node.rawText;
         if (text === undefined) {
+            ts.Debug.assertIsDefined(currentSourceFile, "Template literal node is missing 'rawText' and does not have a source file. Possibly bad transform.");
             text = ts.getSourceTextOfNodeFromSourceFile(currentSourceFile, node);
             // text contains the original source, it will also contain quotes ("`"), dolar signs and braces ("${" and "}"),
             // thus we need to remove those characters.
@@ -85627,8 +87222,8 @@
         context.onEmitNode = onEmitNode;
         context.onSubstituteNode = onSubstituteNode;
         // Enable substitution for property/element access to emit const enum values.
-        context.enableSubstitution(202 /* PropertyAccessExpression */);
-        context.enableSubstitution(203 /* ElementAccessExpression */);
+        context.enableSubstitution(204 /* PropertyAccessExpression */);
+        context.enableSubstitution(205 /* ElementAccessExpression */);
         // These variables contain state that changes as we descend into the tree.
         var currentSourceFile;
         var currentNamespace;
@@ -85654,14 +87249,14 @@
         var applicableSubstitutions;
         return transformSourceFileOrBundle;
         function transformSourceFileOrBundle(node) {
-            if (node.kind === 299 /* Bundle */) {
+            if (node.kind === 301 /* Bundle */) {
                 return transformBundle(node);
             }
             return transformSourceFile(node);
         }
         function transformBundle(node) {
             return factory.createBundle(node.sourceFiles.map(transformSourceFile), ts.mapDefined(node.prepends, function (prepend) {
-                if (prepend.kind === 301 /* InputFiles */) {
+                if (prepend.kind === 303 /* InputFiles */) {
                     return ts.createUnparsedSourceFile(prepend, "js");
                 }
                 return prepend;
@@ -85712,16 +87307,16 @@
          */
         function onBeforeVisitNode(node) {
             switch (node.kind) {
-                case 298 /* SourceFile */:
-                case 259 /* CaseBlock */:
-                case 258 /* ModuleBlock */:
-                case 231 /* Block */:
+                case 300 /* SourceFile */:
+                case 261 /* CaseBlock */:
+                case 260 /* ModuleBlock */:
+                case 233 /* Block */:
                     currentLexicalScope = node;
                     currentNameScope = undefined;
                     currentScopeFirstDeclarationsOfName = undefined;
                     break;
-                case 253 /* ClassDeclaration */:
-                case 252 /* FunctionDeclaration */:
+                case 255 /* ClassDeclaration */:
+                case 254 /* FunctionDeclaration */:
                     if (ts.hasSyntacticModifier(node, 2 /* Ambient */)) {
                         break;
                     }
@@ -85733,7 +87328,7 @@
                         // These nodes should always have names unless they are default-exports;
                         // however, class declaration parsing allows for undefined names, so syntactically invalid
                         // programs may also have an undefined name.
-                        ts.Debug.assert(node.kind === 253 /* ClassDeclaration */ || ts.hasSyntacticModifier(node, 512 /* Default */));
+                        ts.Debug.assert(node.kind === 255 /* ClassDeclaration */ || ts.hasSyntacticModifier(node, 512 /* Default */));
                     }
                     if (ts.isClassDeclaration(node)) {
                         // XXX: should probably also cover interfaces and type aliases that can have type variables?
@@ -85776,10 +87371,10 @@
          */
         function sourceElementVisitorWorker(node) {
             switch (node.kind) {
-                case 262 /* ImportDeclaration */:
-                case 261 /* ImportEqualsDeclaration */:
-                case 267 /* ExportAssignment */:
-                case 268 /* ExportDeclaration */:
+                case 264 /* ImportDeclaration */:
+                case 263 /* ImportEqualsDeclaration */:
+                case 269 /* ExportAssignment */:
+                case 270 /* ExportDeclaration */:
                     return visitElidableStatement(node);
                 default:
                     return visitorWorker(node);
@@ -85800,13 +87395,13 @@
                 return node;
             }
             switch (node.kind) {
-                case 262 /* ImportDeclaration */:
+                case 264 /* ImportDeclaration */:
                     return visitImportDeclaration(node);
-                case 261 /* ImportEqualsDeclaration */:
+                case 263 /* ImportEqualsDeclaration */:
                     return visitImportEqualsDeclaration(node);
-                case 267 /* ExportAssignment */:
+                case 269 /* ExportAssignment */:
                     return visitExportAssignment(node);
-                case 268 /* ExportDeclaration */:
+                case 270 /* ExportDeclaration */:
                     return visitExportDeclaration(node);
                 default:
                     ts.Debug.fail("Unhandled ellided statement");
@@ -85826,11 +87421,11 @@
          * @param node The node to visit.
          */
         function namespaceElementVisitorWorker(node) {
-            if (node.kind === 268 /* ExportDeclaration */ ||
-                node.kind === 262 /* ImportDeclaration */ ||
-                node.kind === 263 /* ImportClause */ ||
-                (node.kind === 261 /* ImportEqualsDeclaration */ &&
-                    node.moduleReference.kind === 273 /* ExternalModuleReference */)) {
+            if (node.kind === 270 /* ExportDeclaration */ ||
+                node.kind === 264 /* ImportDeclaration */ ||
+                node.kind === 265 /* ImportClause */ ||
+                (node.kind === 263 /* ImportEqualsDeclaration */ &&
+                    node.moduleReference.kind === 275 /* ExternalModuleReference */)) {
                 // do not emit ES6 imports and exports since they are illegal inside a namespace
                 return undefined;
             }
@@ -85854,19 +87449,20 @@
          */
         function classElementVisitorWorker(node) {
             switch (node.kind) {
-                case 167 /* Constructor */:
+                case 169 /* Constructor */:
                     return visitConstructor(node);
-                case 164 /* PropertyDeclaration */:
+                case 165 /* PropertyDeclaration */:
                     // Property declarations are not TypeScript syntax, but they must be visited
                     // for the decorator transformation.
                     return visitPropertyDeclaration(node);
-                case 172 /* IndexSignature */:
-                case 168 /* GetAccessor */:
-                case 169 /* SetAccessor */:
-                case 166 /* MethodDeclaration */:
+                case 174 /* IndexSignature */:
+                case 170 /* GetAccessor */:
+                case 171 /* SetAccessor */:
+                case 167 /* MethodDeclaration */:
+                case 168 /* ClassStaticBlockDeclaration */:
                     // Fallback to the default visit behavior.
                     return visitorWorker(node);
-                case 230 /* SemicolonClassElement */:
+                case 232 /* SemicolonClassElement */:
                     return node;
                 default:
                     return ts.Debug.failBadSyntaxKind(node);
@@ -85876,7 +87472,7 @@
             if (ts.modifierToFlag(node.kind) & 18654 /* TypeScriptModifier */) {
                 return undefined;
             }
-            else if (currentNamespace && node.kind === 92 /* ExportKeyword */) {
+            else if (currentNamespace && node.kind === 93 /* ExportKeyword */) {
                 return undefined;
             }
             return node;
@@ -85893,72 +87489,72 @@
                 return factory.createNotEmittedStatement(node);
             }
             switch (node.kind) {
-                case 92 /* ExportKeyword */:
-                case 87 /* DefaultKeyword */:
+                case 93 /* ExportKeyword */:
+                case 88 /* DefaultKeyword */:
                     // ES6 export and default modifiers are elided when inside a namespace.
                     return currentNamespace ? undefined : node;
-                case 122 /* PublicKeyword */:
-                case 120 /* PrivateKeyword */:
-                case 121 /* ProtectedKeyword */:
-                case 125 /* AbstractKeyword */:
-                case 156 /* OverrideKeyword */:
-                case 84 /* ConstKeyword */:
-                case 133 /* DeclareKeyword */:
-                case 142 /* ReadonlyKeyword */:
+                case 123 /* PublicKeyword */:
+                case 121 /* PrivateKeyword */:
+                case 122 /* ProtectedKeyword */:
+                case 126 /* AbstractKeyword */:
+                case 157 /* OverrideKeyword */:
+                case 85 /* ConstKeyword */:
+                case 134 /* DeclareKeyword */:
+                case 143 /* ReadonlyKeyword */:
                 // TypeScript accessibility and readonly modifiers are elided
                 // falls through
-                case 179 /* ArrayType */:
-                case 180 /* TupleType */:
-                case 181 /* OptionalType */:
-                case 182 /* RestType */:
-                case 178 /* TypeLiteral */:
-                case 173 /* TypePredicate */:
-                case 160 /* TypeParameter */:
-                case 128 /* AnyKeyword */:
-                case 152 /* UnknownKeyword */:
-                case 131 /* BooleanKeyword */:
-                case 147 /* StringKeyword */:
-                case 144 /* NumberKeyword */:
-                case 141 /* NeverKeyword */:
-                case 113 /* VoidKeyword */:
-                case 148 /* SymbolKeyword */:
-                case 176 /* ConstructorType */:
-                case 175 /* FunctionType */:
-                case 177 /* TypeQuery */:
-                case 174 /* TypeReference */:
-                case 183 /* UnionType */:
-                case 184 /* IntersectionType */:
-                case 185 /* ConditionalType */:
-                case 187 /* ParenthesizedType */:
-                case 188 /* ThisType */:
-                case 189 /* TypeOperator */:
-                case 190 /* IndexedAccessType */:
-                case 191 /* MappedType */:
-                case 192 /* LiteralType */:
+                case 181 /* ArrayType */:
+                case 182 /* TupleType */:
+                case 183 /* OptionalType */:
+                case 184 /* RestType */:
+                case 180 /* TypeLiteral */:
+                case 175 /* TypePredicate */:
+                case 161 /* TypeParameter */:
+                case 129 /* AnyKeyword */:
+                case 153 /* UnknownKeyword */:
+                case 132 /* BooleanKeyword */:
+                case 148 /* StringKeyword */:
+                case 145 /* NumberKeyword */:
+                case 142 /* NeverKeyword */:
+                case 114 /* VoidKeyword */:
+                case 149 /* SymbolKeyword */:
+                case 178 /* ConstructorType */:
+                case 177 /* FunctionType */:
+                case 179 /* TypeQuery */:
+                case 176 /* TypeReference */:
+                case 185 /* UnionType */:
+                case 186 /* IntersectionType */:
+                case 187 /* ConditionalType */:
+                case 189 /* ParenthesizedType */:
+                case 190 /* ThisType */:
+                case 191 /* TypeOperator */:
+                case 192 /* IndexedAccessType */:
+                case 193 /* MappedType */:
+                case 194 /* LiteralType */:
                 // TypeScript type nodes are elided.
                 // falls through
-                case 172 /* IndexSignature */:
+                case 174 /* IndexSignature */:
                 // TypeScript index signatures are elided.
                 // falls through
-                case 162 /* Decorator */:
-                // TypeScript decorators are elided. They will be emitted as part of visitClassDeclaration.
-                // falls through
-                case 255 /* TypeAliasDeclaration */:
-                    // TypeScript type-only declarations are elided.
+                case 163 /* Decorator */:
+                    // TypeScript decorators are elided. They will be emitted as part of visitClassDeclaration.
                     return undefined;
-                case 164 /* PropertyDeclaration */:
+                case 257 /* TypeAliasDeclaration */:
+                    // TypeScript type-only declarations are elided.
+                    return factory.createNotEmittedStatement(node);
+                case 165 /* PropertyDeclaration */:
                     // TypeScript property declarations are elided. However their names are still visited, and can potentially be retained if they could have sideeffects
                     return visitPropertyDeclaration(node);
-                case 260 /* NamespaceExportDeclaration */:
+                case 262 /* NamespaceExportDeclaration */:
                     // TypeScript namespace export declarations are elided.
                     return undefined;
-                case 167 /* Constructor */:
+                case 169 /* Constructor */:
                     return visitConstructor(node);
-                case 254 /* InterfaceDeclaration */:
+                case 256 /* InterfaceDeclaration */:
                     // TypeScript interfaces are elided, but some comments may be preserved.
                     // See the implementation of `getLeadingComments` in comments.ts for more details.
                     return factory.createNotEmittedStatement(node);
-                case 253 /* ClassDeclaration */:
+                case 255 /* ClassDeclaration */:
                     // This may be a class declaration with TypeScript syntax extensions.
                     //
                     // TypeScript class syntax extensions include:
@@ -85968,7 +87564,7 @@
                     // - index signatures
                     // - method overload signatures
                     return visitClassDeclaration(node);
-                case 222 /* ClassExpression */:
+                case 224 /* ClassExpression */:
                     // This may be a class expression with TypeScript syntax extensions.
                     //
                     // TypeScript class syntax extensions include:
@@ -85978,35 +87574,35 @@
                     // - index signatures
                     // - method overload signatures
                     return visitClassExpression(node);
-                case 287 /* HeritageClause */:
+                case 289 /* HeritageClause */:
                     // This may be a heritage clause with TypeScript syntax extensions.
                     //
                     // TypeScript heritage clause extensions include:
                     // - `implements` clause
                     return visitHeritageClause(node);
-                case 224 /* ExpressionWithTypeArguments */:
+                case 226 /* ExpressionWithTypeArguments */:
                     // TypeScript supports type arguments on an expression in an `extends` heritage clause.
                     return visitExpressionWithTypeArguments(node);
-                case 166 /* MethodDeclaration */:
+                case 167 /* MethodDeclaration */:
                     // TypeScript method declarations may have decorators, modifiers
                     // or type annotations.
                     return visitMethodDeclaration(node);
-                case 168 /* GetAccessor */:
+                case 170 /* GetAccessor */:
                     // Get Accessors can have TypeScript modifiers, decorators, and type annotations.
                     return visitGetAccessor(node);
-                case 169 /* SetAccessor */:
+                case 171 /* SetAccessor */:
                     // Set Accessors can have TypeScript modifiers and type annotations.
                     return visitSetAccessor(node);
-                case 252 /* FunctionDeclaration */:
+                case 254 /* FunctionDeclaration */:
                     // Typescript function declarations can have modifiers, decorators, and type annotations.
                     return visitFunctionDeclaration(node);
-                case 209 /* FunctionExpression */:
+                case 211 /* FunctionExpression */:
                     // TypeScript function expressions can have modifiers and type annotations.
                     return visitFunctionExpression(node);
-                case 210 /* ArrowFunction */:
+                case 212 /* ArrowFunction */:
                     // TypeScript arrow functions can have modifiers and type annotations.
                     return visitArrowFunction(node);
-                case 161 /* Parameter */:
+                case 162 /* Parameter */:
                     // This may be a parameter declaration with TypeScript syntax extensions.
                     //
                     // TypeScript parameter declaration syntax extensions include:
@@ -86016,40 +87612,40 @@
                     // - type annotations
                     // - this parameters
                     return visitParameter(node);
-                case 208 /* ParenthesizedExpression */:
+                case 210 /* ParenthesizedExpression */:
                     // ParenthesizedExpressions are TypeScript if their expression is a
                     // TypeAssertion or AsExpression
                     return visitParenthesizedExpression(node);
-                case 207 /* TypeAssertionExpression */:
-                case 225 /* AsExpression */:
+                case 209 /* TypeAssertionExpression */:
+                case 227 /* AsExpression */:
                     // TypeScript type assertions are removed, but their subtrees are preserved.
                     return visitAssertionExpression(node);
-                case 204 /* CallExpression */:
+                case 206 /* CallExpression */:
                     return visitCallExpression(node);
-                case 205 /* NewExpression */:
+                case 207 /* NewExpression */:
                     return visitNewExpression(node);
-                case 206 /* TaggedTemplateExpression */:
+                case 208 /* TaggedTemplateExpression */:
                     return visitTaggedTemplateExpression(node);
-                case 226 /* NonNullExpression */:
+                case 228 /* NonNullExpression */:
                     // TypeScript non-null expressions are removed, but their subtrees are preserved.
                     return visitNonNullExpression(node);
-                case 256 /* EnumDeclaration */:
+                case 258 /* EnumDeclaration */:
                     // TypeScript enum declarations do not exist in ES6 and must be rewritten.
                     return visitEnumDeclaration(node);
-                case 233 /* VariableStatement */:
+                case 235 /* VariableStatement */:
                     // TypeScript namespace exports for variable statements must be transformed.
                     return visitVariableStatement(node);
-                case 250 /* VariableDeclaration */:
+                case 252 /* VariableDeclaration */:
                     return visitVariableDeclaration(node);
-                case 257 /* ModuleDeclaration */:
+                case 259 /* ModuleDeclaration */:
                     // TypeScript namespace declarations must be transformed.
                     return visitModuleDeclaration(node);
-                case 261 /* ImportEqualsDeclaration */:
+                case 263 /* ImportEqualsDeclaration */:
                     // TypeScript namespace or external module import.
                     return visitImportEqualsDeclaration(node);
-                case 275 /* JsxSelfClosingElement */:
+                case 277 /* JsxSelfClosingElement */:
                     return visitJsxSelfClosingElement(node);
-                case 276 /* JsxOpeningElement */:
+                case 278 /* JsxOpeningElement */:
                     return visitJsxJsxOpeningElement(node);
                 default:
                     // node contains some other TypeScript syntax
@@ -86062,33 +87658,14 @@
                 !ts.isJsonSourceFile(node);
             return factory.updateSourceFile(node, ts.visitLexicalEnvironment(node.statements, sourceElementVisitor, context, /*start*/ 0, alwaysStrict));
         }
-        /**
-         * Tests whether we should emit a __decorate call for a class declaration.
-         */
-        function shouldEmitDecorateCallForClass(node) {
-            if (node.decorators && node.decorators.length > 0) {
-                return true;
-            }
-            var constructor = ts.getFirstConstructorWithBody(node);
-            if (constructor) {
-                return ts.forEach(constructor.parameters, shouldEmitDecorateCallForParameter);
-            }
-            return false;
-        }
-        /**
-         * Tests whether we should emit a __decorate call for a parameter declaration.
-         */
-        function shouldEmitDecorateCallForParameter(parameter) {
-            return parameter.decorators !== undefined && parameter.decorators.length > 0;
-        }
         function getClassFacts(node, staticProperties) {
             var facts = 0 /* None */;
             if (ts.some(staticProperties))
                 facts |= 1 /* HasStaticInitializedProperties */;
             var extendsClauseElement = ts.getEffectiveBaseTypeNode(node);
-            if (extendsClauseElement && ts.skipOuterExpressions(extendsClauseElement.expression).kind !== 103 /* NullKeyword */)
+            if (extendsClauseElement && ts.skipOuterExpressions(extendsClauseElement.expression).kind !== 104 /* NullKeyword */)
                 facts |= 64 /* IsDerivedClass */;
-            if (shouldEmitDecorateCallForClass(node))
+            if (ts.classOrConstructorParameterIsDecorated(node))
                 facts |= 2 /* HasConstructorDecorators */;
             if (ts.childIsDecorated(node))
                 facts |= 4 /* HasMemberDecorators */;
@@ -86309,7 +87886,11 @@
             //
             var location = ts.moveRangePastDecorators(node);
             var classAlias = getClassAliasIfNeeded(node);
-            var declName = factory.getLocalName(node, /*allowComments*/ false, /*allowSourceMaps*/ true);
+            // When we transform to ES5/3 this will be moved inside an IIFE and should reference the name
+            // without any block-scoped variable collision handling
+            var declName = languageVersion <= 2 /* ES2015 */ ?
+                factory.getInternalName(node, /*allowComments*/ false, /*allowSourceMaps*/ true) :
+                factory.getLocalName(node, /*allowComments*/ false, /*allowSourceMaps*/ true);
             //  ... = class ${name} ${heritageClauses} {
             //      ${members}
             //  }
@@ -86387,7 +87968,7 @@
          * @param member The class member.
          */
         function isStaticDecoratedClassElement(member, parent) {
-            return isDecoratedClassElement(member, /*isStatic*/ true, parent);
+            return isDecoratedClassElement(member, /*isStaticElement*/ true, parent);
         }
         /**
          * Determines whether a class member is an instance member of a class that is decorated,
@@ -86396,7 +87977,7 @@
          * @param member The class member.
          */
         function isInstanceDecoratedClassElement(member, parent) {
-            return isDecoratedClassElement(member, /*isStatic*/ false, parent);
+            return isDecoratedClassElement(member, /*isStaticElement*/ false, parent);
         }
         /**
          * Determines whether a class member is either a static or an instance member of a class
@@ -86404,9 +87985,9 @@
          *
          * @param member The class member.
          */
-        function isDecoratedClassElement(member, isStatic, parent) {
+        function isDecoratedClassElement(member, isStaticElement, parent) {
             return ts.nodeOrChildIsDecorated(member, parent)
-                && isStatic === ts.hasSyntacticModifier(member, 32 /* Static */);
+                && isStaticElement === ts.isStatic(member);
         }
         /**
          * Gets an array of arrays of decorators for the parameters of a function-like node.
@@ -86458,12 +88039,12 @@
          */
         function getAllDecoratorsOfClassElement(node, member) {
             switch (member.kind) {
-                case 168 /* GetAccessor */:
-                case 169 /* SetAccessor */:
+                case 170 /* GetAccessor */:
+                case 171 /* SetAccessor */:
                     return getAllDecoratorsOfAccessors(node, member);
-                case 166 /* MethodDeclaration */:
+                case 167 /* MethodDeclaration */:
                     return getAllDecoratorsOfMethod(member);
-                case 164 /* PropertyDeclaration */:
+                case 165 /* PropertyDeclaration */:
                     return getAllDecoratorsOfProperty(member);
                 default:
                     return undefined;
@@ -86616,7 +88197,7 @@
             var prefix = getClassMemberPrefix(node, member);
             var memberName = getExpressionForPropertyName(member, /*generateNameForComputedPropertyName*/ true);
             var descriptor = languageVersion > 0 /* ES3 */
-                ? member.kind === 164 /* PropertyDeclaration */
+                ? member.kind === 165 /* PropertyDeclaration */
                     // We emit `void 0` here to indicate to `__decorate` that it can invoke `Object.defineProperty` directly, but that it
                     // should not invoke `Object.getOwnPropertyDescriptor`.
                     ? factory.createVoidZero()
@@ -86652,7 +88233,11 @@
                 return undefined;
             }
             var classAlias = classAliases && classAliases[ts.getOriginalNodeId(node)];
-            var localName = factory.getLocalName(node, /*allowComments*/ false, /*allowSourceMaps*/ true);
+            // When we transform to ES5/3 this will be moved inside an IIFE and should reference the name
+            // without any block-scoped variable collision handling
+            var localName = languageVersion <= 2 /* ES2015 */ ?
+                factory.getInternalName(node, /*allowComments*/ false, /*allowSourceMaps*/ true) :
+                factory.getLocalName(node, /*allowComments*/ false, /*allowSourceMaps*/ true);
             var decorate = emitHelpers().createDecorateHelper(decoratorExpressions, localName);
             var expression = factory.createAssignment(localName, classAlias ? factory.createAssignment(classAlias, decorate) : decorate);
             ts.setEmitFlags(expression, 1536 /* NoComments */);
@@ -86740,10 +88325,10 @@
          */
         function shouldAddTypeMetadata(node) {
             var kind = node.kind;
-            return kind === 166 /* MethodDeclaration */
-                || kind === 168 /* GetAccessor */
-                || kind === 169 /* SetAccessor */
-                || kind === 164 /* PropertyDeclaration */;
+            return kind === 167 /* MethodDeclaration */
+                || kind === 170 /* GetAccessor */
+                || kind === 171 /* SetAccessor */
+                || kind === 165 /* PropertyDeclaration */;
         }
         /**
          * Determines whether to emit the "design:returntype" metadata based on the node's kind.
@@ -86753,7 +88338,7 @@
          * @param node The node to test.
          */
         function shouldAddReturnTypeMetadata(node) {
-            return node.kind === 166 /* MethodDeclaration */;
+            return node.kind === 167 /* MethodDeclaration */;
         }
         /**
          * Determines whether to emit the "design:paramtypes" metadata based on the node's kind.
@@ -86764,12 +88349,12 @@
          */
         function shouldAddParamTypesMetadata(node) {
             switch (node.kind) {
-                case 253 /* ClassDeclaration */:
-                case 222 /* ClassExpression */:
+                case 255 /* ClassDeclaration */:
+                case 224 /* ClassExpression */:
                     return ts.getFirstConstructorWithBody(node) !== undefined;
-                case 166 /* MethodDeclaration */:
-                case 168 /* GetAccessor */:
-                case 169 /* SetAccessor */:
+                case 167 /* MethodDeclaration */:
+                case 170 /* GetAccessor */:
+                case 171 /* SetAccessor */:
                     return true;
             }
             return false;
@@ -86786,15 +88371,15 @@
          */
         function serializeTypeOfNode(node) {
             switch (node.kind) {
-                case 164 /* PropertyDeclaration */:
-                case 161 /* Parameter */:
+                case 165 /* PropertyDeclaration */:
+                case 162 /* Parameter */:
                     return serializeTypeNode(node.type);
-                case 169 /* SetAccessor */:
-                case 168 /* GetAccessor */:
+                case 171 /* SetAccessor */:
+                case 170 /* GetAccessor */:
                     return serializeTypeNode(getAccessorTypeNode(node));
-                case 253 /* ClassDeclaration */:
-                case 222 /* ClassExpression */:
-                case 166 /* MethodDeclaration */:
+                case 255 /* ClassDeclaration */:
+                case 224 /* ClassExpression */:
+                case 167 /* MethodDeclaration */:
                     return factory.createIdentifier("Function");
                 default:
                     return factory.createVoidZero();
@@ -86831,7 +88416,7 @@
             return factory.createArrayLiteralExpression(expressions);
         }
         function getParametersOfDecoratedDeclaration(node, container) {
-            if (container && node.kind === 168 /* GetAccessor */) {
+            if (container && node.kind === 170 /* GetAccessor */) {
                 var setAccessor = ts.getAllAccessorDeclarations(container.members, node).setAccessor;
                 if (setAccessor) {
                     return setAccessor.parameters;
@@ -86876,82 +88461,82 @@
                 return factory.createIdentifier("Object");
             }
             switch (node.kind) {
-                case 113 /* VoidKeyword */:
-                case 150 /* UndefinedKeyword */:
-                case 141 /* NeverKeyword */:
+                case 114 /* VoidKeyword */:
+                case 151 /* UndefinedKeyword */:
+                case 142 /* NeverKeyword */:
                     return factory.createVoidZero();
-                case 187 /* ParenthesizedType */:
+                case 189 /* ParenthesizedType */:
                     return serializeTypeNode(node.type);
-                case 175 /* FunctionType */:
-                case 176 /* ConstructorType */:
+                case 177 /* FunctionType */:
+                case 178 /* ConstructorType */:
                     return factory.createIdentifier("Function");
-                case 179 /* ArrayType */:
-                case 180 /* TupleType */:
+                case 181 /* ArrayType */:
+                case 182 /* TupleType */:
                     return factory.createIdentifier("Array");
-                case 173 /* TypePredicate */:
-                case 131 /* BooleanKeyword */:
+                case 175 /* TypePredicate */:
+                case 132 /* BooleanKeyword */:
                     return factory.createIdentifier("Boolean");
-                case 147 /* StringKeyword */:
+                case 148 /* StringKeyword */:
                     return factory.createIdentifier("String");
-                case 145 /* ObjectKeyword */:
+                case 146 /* ObjectKeyword */:
                     return factory.createIdentifier("Object");
-                case 192 /* LiteralType */:
+                case 194 /* LiteralType */:
                     switch (node.literal.kind) {
                         case 10 /* StringLiteral */:
                         case 14 /* NoSubstitutionTemplateLiteral */:
                             return factory.createIdentifier("String");
-                        case 215 /* PrefixUnaryExpression */:
+                        case 217 /* PrefixUnaryExpression */:
                         case 8 /* NumericLiteral */:
                             return factory.createIdentifier("Number");
                         case 9 /* BigIntLiteral */:
                             return getGlobalBigIntNameWithFallback();
-                        case 109 /* TrueKeyword */:
-                        case 94 /* FalseKeyword */:
+                        case 110 /* TrueKeyword */:
+                        case 95 /* FalseKeyword */:
                             return factory.createIdentifier("Boolean");
-                        case 103 /* NullKeyword */:
+                        case 104 /* NullKeyword */:
                             return factory.createVoidZero();
                         default:
                             return ts.Debug.failBadSyntaxKind(node.literal);
                     }
-                case 144 /* NumberKeyword */:
+                case 145 /* NumberKeyword */:
                     return factory.createIdentifier("Number");
-                case 155 /* BigIntKeyword */:
+                case 156 /* BigIntKeyword */:
                     return getGlobalBigIntNameWithFallback();
-                case 148 /* SymbolKeyword */:
+                case 149 /* SymbolKeyword */:
                     return languageVersion < 2 /* ES2015 */
                         ? getGlobalSymbolNameWithFallback()
                         : factory.createIdentifier("Symbol");
-                case 174 /* TypeReference */:
+                case 176 /* TypeReference */:
                     return serializeTypeReferenceNode(node);
-                case 184 /* IntersectionType */:
-                case 183 /* UnionType */:
+                case 186 /* IntersectionType */:
+                case 185 /* UnionType */:
                     return serializeTypeList(node.types);
-                case 185 /* ConditionalType */:
+                case 187 /* ConditionalType */:
                     return serializeTypeList([node.trueType, node.falseType]);
-                case 189 /* TypeOperator */:
-                    if (node.operator === 142 /* ReadonlyKeyword */) {
+                case 191 /* TypeOperator */:
+                    if (node.operator === 143 /* ReadonlyKeyword */) {
                         return serializeTypeNode(node.type);
                     }
                     break;
-                case 177 /* TypeQuery */:
-                case 190 /* IndexedAccessType */:
-                case 191 /* MappedType */:
-                case 178 /* TypeLiteral */:
-                case 128 /* AnyKeyword */:
-                case 152 /* UnknownKeyword */:
-                case 188 /* ThisType */:
-                case 196 /* ImportType */:
+                case 179 /* TypeQuery */:
+                case 192 /* IndexedAccessType */:
+                case 193 /* MappedType */:
+                case 180 /* TypeLiteral */:
+                case 129 /* AnyKeyword */:
+                case 153 /* UnknownKeyword */:
+                case 190 /* ThisType */:
+                case 198 /* ImportType */:
                     break;
                 // handle JSDoc types from an invalid parse
-                case 304 /* JSDocAllType */:
-                case 305 /* JSDocUnknownType */:
-                case 309 /* JSDocFunctionType */:
-                case 310 /* JSDocVariadicType */:
-                case 311 /* JSDocNamepathType */:
+                case 307 /* JSDocAllType */:
+                case 308 /* JSDocUnknownType */:
+                case 312 /* JSDocFunctionType */:
+                case 313 /* JSDocVariadicType */:
+                case 314 /* JSDocNamepathType */:
                     break;
-                case 306 /* JSDocNullableType */:
-                case 307 /* JSDocNonNullableType */:
-                case 308 /* JSDocOptionalType */:
+                case 309 /* JSDocNullableType */:
+                case 310 /* JSDocNonNullableType */:
+                case 311 /* JSDocOptionalType */:
                     return serializeTypeNode(node.type);
                 default:
                     return ts.Debug.failBadSyntaxKind(node);
@@ -86962,15 +88547,15 @@
             // Note when updating logic here also update getEntityNameForDecoratorMetadata
             // so that aliases can be marked as referenced
             var serializedUnion;
-            for (var _i = 0, types_24 = types; _i < types_24.length; _i++) {
-                var typeNode = types_24[_i];
-                while (typeNode.kind === 187 /* ParenthesizedType */) {
+            for (var _i = 0, types_23 = types; _i < types_23.length; _i++) {
+                var typeNode = types_23[_i];
+                while (typeNode.kind === 189 /* ParenthesizedType */) {
                     typeNode = typeNode.type; // Skip parens if need be
                 }
-                if (typeNode.kind === 141 /* NeverKeyword */) {
+                if (typeNode.kind === 142 /* NeverKeyword */) {
                     continue; // Always elide `never` from the union/intersection if possible
                 }
-                if (!strictNullChecks && (typeNode.kind === 192 /* LiteralType */ && typeNode.literal.kind === 103 /* NullKeyword */ || typeNode.kind === 150 /* UndefinedKeyword */)) {
+                if (!strictNullChecks && (typeNode.kind === 194 /* LiteralType */ && typeNode.literal.kind === 104 /* NullKeyword */ || typeNode.kind === 151 /* UndefinedKeyword */)) {
                     continue; // Elide null and undefined from unions for metadata, just like what we did prior to the implementation of strict null checks
                 }
                 var serializedIndividual = serializeTypeNode(typeNode);
@@ -87052,12 +88637,12 @@
          * @param node The entity name to serialize.
          */
         function serializeEntityNameAsExpressionFallback(node) {
-            if (node.kind === 78 /* Identifier */) {
+            if (node.kind === 79 /* Identifier */) {
                 // A -> typeof A !== undefined && A
                 var copied = serializeEntityNameAsExpression(node);
                 return createCheckedValue(copied, copied);
             }
-            if (node.left.kind === 78 /* Identifier */) {
+            if (node.left.kind === 79 /* Identifier */) {
                 // A.B -> typeof A !== undefined && A.B
                 return createCheckedValue(serializeEntityNameAsExpression(node.left), serializeEntityNameAsExpression(node));
             }
@@ -87073,14 +88658,14 @@
          */
         function serializeEntityNameAsExpression(node) {
             switch (node.kind) {
-                case 78 /* Identifier */:
+                case 79 /* Identifier */:
                     // Create a clone of the name with a new parent, and treat it as if it were
                     // a source tree node for the purposes of the checker.
                     var name = ts.setParent(ts.setTextRange(ts.parseNodeFactory.cloneNode(node), node), node.parent);
                     name.original = undefined;
                     ts.setParent(name, ts.getParseTreeNode(currentLexicalScope)); // ensure the parent is set to a parse tree node.
                     return name;
-                case 158 /* QualifiedName */:
+                case 159 /* QualifiedName */:
                     return serializeQualifiedNameAsExpression(node);
             }
         }
@@ -87171,7 +88756,7 @@
          * @param node The HeritageClause to transform.
          */
         function visitHeritageClause(node) {
-            if (node.token === 116 /* ImplementsKeyword */) {
+            if (node.token === 117 /* ImplementsKeyword */) {
                 // implements clauses are elided
                 return undefined;
             }
@@ -87653,12 +89238,12 @@
             // enums in any other scope are emitted as a `let` declaration.
             var statement = factory.createVariableStatement(ts.visitNodes(node.modifiers, modifierVisitor, ts.isModifier), factory.createVariableDeclarationList([
                 factory.createVariableDeclaration(factory.getLocalName(node, /*allowComments*/ false, /*allowSourceMaps*/ true))
-            ], currentLexicalScope.kind === 298 /* SourceFile */ ? 0 /* None */ : 1 /* Let */));
+            ], currentLexicalScope.kind === 300 /* SourceFile */ ? 0 /* None */ : 1 /* Let */));
             ts.setOriginalNode(statement, node);
             recordEmittedDeclarationInScope(node);
             if (isFirstEmittedDeclarationInScope(node)) {
                 // Adjust the source map emit to match the old emitter.
-                if (node.kind === 256 /* EnumDeclaration */) {
+                if (node.kind === 258 /* EnumDeclaration */) {
                     ts.setSourceMapRange(statement.declarationList, node);
                 }
                 else {
@@ -87783,7 +89368,7 @@
             var statementsLocation;
             var blockLocation;
             if (node.body) {
-                if (node.body.kind === 258 /* ModuleBlock */) {
+                if (node.body.kind === 260 /* ModuleBlock */) {
                     saveStateAndInvoke(node.body, function (body) { return ts.addRange(statements, ts.visitNodes(body.statements, namespaceElementVisitor, ts.isStatement)); });
                     statementsLocation = node.body.statements;
                     blockLocation = node.body;
@@ -87830,13 +89415,13 @@
             //     })(hi = hello.hi || (hello.hi = {}));
             // })(hello || (hello = {}));
             // We only want to emit comment on the namespace which contains block body itself, not the containing namespaces.
-            if (!node.body || node.body.kind !== 258 /* ModuleBlock */) {
+            if (!node.body || node.body.kind !== 260 /* ModuleBlock */) {
                 ts.setEmitFlags(block, ts.getEmitFlags(block) | 1536 /* NoComments */);
             }
             return block;
         }
         function getInnerMostModuleDeclarationFromDottedModule(moduleDeclaration) {
-            if (moduleDeclaration.body.kind === 257 /* ModuleDeclaration */) {
+            if (moduleDeclaration.body.kind === 259 /* ModuleDeclaration */) {
                 var recursiveInnerModule = getInnerMostModuleDeclarationFromDottedModule(moduleDeclaration.body);
                 return recursiveInnerModule || moduleDeclaration.body;
             }
@@ -87886,7 +89471,7 @@
          * @param node The named import bindings node.
          */
         function visitNamedImportBindings(node) {
-            if (node.kind === 264 /* NamespaceImport */) {
+            if (node.kind === 266 /* NamespaceImport */) {
                 // Elide a namespace import if it is not referenced.
                 return resolver.isReferencedAliasDeclaration(node) ? node : undefined;
             }
@@ -88113,14 +89698,14 @@
             return factory.createPropertyAccessExpression(factory.getDeclarationName(node), "prototype");
         }
         function getClassMemberPrefix(node, member) {
-            return ts.hasSyntacticModifier(member, 32 /* Static */)
+            return ts.isStatic(member)
                 ? factory.getDeclarationName(node)
                 : getClassPrototype(node);
         }
         function enableSubstitutionForNonQualifiedEnumMembers() {
             if ((enabledSubstitutions & 8 /* NonQualifiedEnumMembers */) === 0) {
                 enabledSubstitutions |= 8 /* NonQualifiedEnumMembers */;
-                context.enableSubstitution(78 /* Identifier */);
+                context.enableSubstitution(79 /* Identifier */);
             }
         }
         function enableSubstitutionForClassAliases() {
@@ -88128,7 +89713,7 @@
                 enabledSubstitutions |= 1 /* ClassAliases */;
                 // We need to enable substitutions for identifiers. This allows us to
                 // substitute class names inside of a class declaration.
-                context.enableSubstitution(78 /* Identifier */);
+                context.enableSubstitution(79 /* Identifier */);
                 // Keep track of class aliases.
                 classAliases = [];
             }
@@ -88138,17 +89723,17 @@
                 enabledSubstitutions |= 2 /* NamespaceExports */;
                 // We need to enable substitutions for identifiers and shorthand property assignments. This allows us to
                 // substitute the names of exported members of a namespace.
-                context.enableSubstitution(78 /* Identifier */);
-                context.enableSubstitution(290 /* ShorthandPropertyAssignment */);
+                context.enableSubstitution(79 /* Identifier */);
+                context.enableSubstitution(292 /* ShorthandPropertyAssignment */);
                 // We need to be notified when entering and exiting namespaces.
-                context.enableEmitNotification(257 /* ModuleDeclaration */);
+                context.enableEmitNotification(259 /* ModuleDeclaration */);
             }
         }
         function isTransformedModuleDeclaration(node) {
-            return ts.getOriginalNode(node).kind === 257 /* ModuleDeclaration */;
+            return ts.getOriginalNode(node).kind === 259 /* ModuleDeclaration */;
         }
         function isTransformedEnumDeclaration(node) {
-            return ts.getOriginalNode(node).kind === 256 /* EnumDeclaration */;
+            return ts.getOriginalNode(node).kind === 258 /* EnumDeclaration */;
         }
         /**
          * Hook for node emit.
@@ -88207,11 +89792,11 @@
         }
         function substituteExpression(node) {
             switch (node.kind) {
-                case 78 /* Identifier */:
+                case 79 /* Identifier */:
                     return substituteExpressionIdentifier(node);
-                case 202 /* PropertyAccessExpression */:
+                case 204 /* PropertyAccessExpression */:
                     return substitutePropertyAccessExpression(node);
-                case 203 /* ElementAccessExpression */:
+                case 205 /* ElementAccessExpression */:
                     return substituteElementAccessExpression(node);
             }
             return node;
@@ -88249,9 +89834,9 @@
                 // If we are nested within a namespace declaration, we may need to qualifiy
                 // an identifier that is exported from a merged namespace.
                 var container = resolver.getReferencedExportContainer(node, /*prefixLocals*/ false);
-                if (container && container.kind !== 298 /* SourceFile */) {
-                    var substitute = (applicableSubstitutions & 2 /* NamespaceExports */ && container.kind === 257 /* ModuleDeclaration */) ||
-                        (applicableSubstitutions & 8 /* NonQualifiedEnumMembers */ && container.kind === 256 /* EnumDeclaration */);
+                if (container && container.kind !== 300 /* SourceFile */) {
+                    var substitute = (applicableSubstitutions & 2 /* NamespaceExports */ && container.kind === 259 /* ModuleDeclaration */) ||
+                        (applicableSubstitutions & 8 /* NonQualifiedEnumMembers */ && container.kind === 258 /* EnumDeclaration */);
                     if (substitute) {
                         return ts.setTextRange(factory.createPropertyAccessExpression(factory.getGeneratedNameForNode(container), node), 
                         /*location*/ node);
@@ -88302,6 +89887,11 @@
          * which have initializers that reference the class name.
          */
         ClassPropertySubstitutionFlags[ClassPropertySubstitutionFlags["ClassAliases"] = 1] = "ClassAliases";
+        /**
+         * Enables substitutions for class expressions with static fields
+         * which have initializers that reference the 'this' or 'super'.
+         */
+        ClassPropertySubstitutionFlags[ClassPropertySubstitutionFlags["ClassStaticThisOrSuperReference"] = 2] = "ClassStaticThisOrSuperReference";
     })(ClassPropertySubstitutionFlags || (ClassPropertySubstitutionFlags = {}));
     var PrivateIdentifierKind;
     (function (PrivateIdentifierKind) {
@@ -88309,6 +89899,14 @@
         PrivateIdentifierKind["Method"] = "m";
         PrivateIdentifierKind["Accessor"] = "a";
     })(PrivateIdentifierKind = ts.PrivateIdentifierKind || (ts.PrivateIdentifierKind = {}));
+    var ClassFacts;
+    (function (ClassFacts) {
+        ClassFacts[ClassFacts["None"] = 0] = "None";
+        ClassFacts[ClassFacts["ClassWasDecorated"] = 1] = "ClassWasDecorated";
+        ClassFacts[ClassFacts["NeedsClassConstructorReference"] = 2] = "NeedsClassConstructorReference";
+        ClassFacts[ClassFacts["NeedsClassSuperReference"] = 4] = "NeedsClassSuperReference";
+        ClassFacts[ClassFacts["NeedsSubstitutionForThisInClassStaticField"] = 8] = "NeedsSubstitutionForThisInClassStaticField";
+    })(ClassFacts || (ClassFacts = {}));
     /**
      * Transforms ECMAScript Class Syntax.
      * TypeScript parameter property syntax is transformed in the TypeScript transformer.
@@ -88317,14 +89915,20 @@
      * When --useDefineForClassFields is on, this transforms to ECMAScript semantics, with Object.defineProperty.
      */
     function transformClassFields(context) {
-        var factory = context.factory, hoistVariableDeclaration = context.hoistVariableDeclaration, endLexicalEnvironment = context.endLexicalEnvironment, resumeLexicalEnvironment = context.resumeLexicalEnvironment, addBlockScopedVariable = context.addBlockScopedVariable;
+        var factory = context.factory, hoistVariableDeclaration = context.hoistVariableDeclaration, endLexicalEnvironment = context.endLexicalEnvironment, startLexicalEnvironment = context.startLexicalEnvironment, resumeLexicalEnvironment = context.resumeLexicalEnvironment, addBlockScopedVariable = context.addBlockScopedVariable;
         var resolver = context.getEmitResolver();
         var compilerOptions = context.getCompilerOptions();
         var languageVersion = ts.getEmitScriptTarget(compilerOptions);
         var useDefineForClassFields = ts.getUseDefineForClassFields(compilerOptions);
-        var shouldTransformPrivateElements = languageVersion < 99 /* ESNext */;
+        var shouldTransformPrivateElementsOrClassStaticBlocks = languageVersion < 99 /* ESNext */;
+        // We don't need to transform `super` property access when targeting ES5, ES3 because
+        // the es2015 transformation handles those.
+        var shouldTransformSuperInStaticInitializers = (languageVersion <= 8 /* ES2021 */ || !useDefineForClassFields) && languageVersion >= 2 /* ES2015 */;
+        var shouldTransformThisInStaticInitializers = languageVersion <= 8 /* ES2021 */ || !useDefineForClassFields;
         var previousOnSubstituteNode = context.onSubstituteNode;
         context.onSubstituteNode = onSubstituteNode;
+        var previousOnEmitNode = context.onEmitNode;
+        context.onEmitNode = onEmitNode;
         var enabledSubstitutions;
         var classAliases;
         /**
@@ -88337,8 +89941,11 @@
          * emitted at the next execution site, in document order (for decorated classes).
          */
         var pendingStatements;
-        var privateIdentifierEnvironmentStack = [];
-        var currentPrivateIdentifierEnvironment;
+        var classLexicalEnvironmentStack = [];
+        var classLexicalEnvironmentMap = new ts.Map();
+        var currentClassLexicalEnvironment;
+        var currentComputedPropertyNameClassLexicalEnvironment;
+        var currentStaticPropertyDeclarationOrStaticBlock;
         return ts.chainBundle(context, transformSourceFile);
         function transformSourceFile(node) {
             var options = context.getCompilerOptions();
@@ -88350,42 +89957,80 @@
             ts.addEmitHelpers(visited, context.readEmitHelpers());
             return visited;
         }
-        function visitor(node) {
-            if (!(node.transformFlags & 8388608 /* ContainsClassFields */))
-                return node;
-            switch (node.kind) {
-                case 222 /* ClassExpression */:
-                case 253 /* ClassDeclaration */:
-                    return visitClassLike(node);
-                case 164 /* PropertyDeclaration */:
-                    return visitPropertyDeclaration(node);
-                case 233 /* VariableStatement */:
-                    return visitVariableStatement(node);
-                case 202 /* PropertyAccessExpression */:
-                    return visitPropertyAccessExpression(node);
-                case 215 /* PrefixUnaryExpression */:
-                    return visitPrefixUnaryExpression(node);
-                case 216 /* PostfixUnaryExpression */:
-                    return visitPostfixUnaryExpression(node, /*valueIsDiscarded*/ false);
-                case 204 /* CallExpression */:
-                    return visitCallExpression(node);
-                case 217 /* BinaryExpression */:
-                    return visitBinaryExpression(node);
-                case 79 /* PrivateIdentifier */:
-                    return visitPrivateIdentifier(node);
-                case 234 /* ExpressionStatement */:
-                    return visitExpressionStatement(node);
-                case 238 /* ForStatement */:
-                    return visitForStatement(node);
-                case 206 /* TaggedTemplateExpression */:
-                    return visitTaggedTemplateExpression(node);
+        function visitorWorker(node, valueIsDiscarded) {
+            if (node.transformFlags & 8388608 /* ContainsClassFields */) {
+                switch (node.kind) {
+                    case 224 /* ClassExpression */:
+                    case 255 /* ClassDeclaration */:
+                        return visitClassLike(node);
+                    case 165 /* PropertyDeclaration */:
+                        return visitPropertyDeclaration(node);
+                    case 235 /* VariableStatement */:
+                        return visitVariableStatement(node);
+                    case 80 /* PrivateIdentifier */:
+                        return visitPrivateIdentifier(node);
+                    case 168 /* ClassStaticBlockDeclaration */:
+                        return visitClassStaticBlockDeclaration(node);
+                }
+            }
+            if (node.transformFlags & 8388608 /* ContainsClassFields */ ||
+                node.transformFlags & 33554432 /* ContainsLexicalSuper */ &&
+                    shouldTransformSuperInStaticInitializers &&
+                    currentStaticPropertyDeclarationOrStaticBlock &&
+                    currentClassLexicalEnvironment) {
+                switch (node.kind) {
+                    case 217 /* PrefixUnaryExpression */:
+                    case 218 /* PostfixUnaryExpression */:
+                        return visitPreOrPostfixUnaryExpression(node, valueIsDiscarded);
+                    case 219 /* BinaryExpression */:
+                        return visitBinaryExpression(node, valueIsDiscarded);
+                    case 206 /* CallExpression */:
+                        return visitCallExpression(node);
+                    case 208 /* TaggedTemplateExpression */:
+                        return visitTaggedTemplateExpression(node);
+                    case 204 /* PropertyAccessExpression */:
+                        return visitPropertyAccessExpression(node);
+                    case 205 /* ElementAccessExpression */:
+                        return visitElementAccessExpression(node);
+                    case 236 /* ExpressionStatement */:
+                        return visitExpressionStatement(node);
+                    case 240 /* ForStatement */:
+                        return visitForStatement(node);
+                    case 254 /* FunctionDeclaration */:
+                    case 211 /* FunctionExpression */:
+                    case 169 /* Constructor */:
+                    case 167 /* MethodDeclaration */:
+                    case 170 /* GetAccessor */:
+                    case 171 /* SetAccessor */: {
+                        var savedCurrentStaticPropertyDeclarationOrStaticBlock = currentStaticPropertyDeclarationOrStaticBlock;
+                        currentStaticPropertyDeclarationOrStaticBlock = undefined;
+                        var result = ts.visitEachChild(node, visitor, context);
+                        currentStaticPropertyDeclarationOrStaticBlock = savedCurrentStaticPropertyDeclarationOrStaticBlock;
+                        return result;
+                    }
+                }
             }
             return ts.visitEachChild(node, visitor, context);
         }
+        function discardedValueVisitor(node) {
+            return visitorWorker(node, /*valueIsDiscarded*/ true);
+        }
+        function visitor(node) {
+            return visitorWorker(node, /*valueIsDiscarded*/ false);
+        }
+        function heritageClauseVisitor(node) {
+            switch (node.kind) {
+                case 289 /* HeritageClause */:
+                    return ts.visitEachChild(node, heritageClauseVisitor, context);
+                case 226 /* ExpressionWithTypeArguments */:
+                    return visitExpressionWithTypeArguments(node);
+            }
+            return visitor(node);
+        }
         function visitorDestructuringTarget(node) {
             switch (node.kind) {
-                case 201 /* ObjectLiteralExpression */:
-                case 200 /* ArrayLiteralExpression */:
+                case 203 /* ObjectLiteralExpression */:
+                case 202 /* ArrayLiteralExpression */:
                     return visitAssignmentPattern(node);
                 default:
                     return visitor(node);
@@ -88396,7 +90041,7 @@
          * Replace it with an empty identifier to indicate a problem with the code.
          */
         function visitPrivateIdentifier(node) {
-            if (!shouldTransformPrivateElements) {
+            if (!shouldTransformPrivateElementsOrClassStaticBlocks) {
                 return node;
             }
             return ts.setOriginalNode(factory.createIdentifier(""), node);
@@ -88408,19 +90053,19 @@
          */
         function classElementVisitor(node) {
             switch (node.kind) {
-                case 167 /* Constructor */:
+                case 169 /* Constructor */:
                     // Constructors for classes using class fields are transformed in
                     // `visitClassDeclaration` or `visitClassExpression`.
                     return undefined;
-                case 168 /* GetAccessor */:
-                case 169 /* SetAccessor */:
-                case 166 /* MethodDeclaration */:
+                case 170 /* GetAccessor */:
+                case 171 /* SetAccessor */:
+                case 167 /* MethodDeclaration */:
                     return visitMethodOrAccessorDeclaration(node);
-                case 164 /* PropertyDeclaration */:
+                case 165 /* PropertyDeclaration */:
                     return visitPropertyDeclaration(node);
-                case 159 /* ComputedPropertyName */:
+                case 160 /* ComputedPropertyName */:
                     return visitComputedPropertyName(node);
-                case 230 /* SemicolonClassElement */:
+                case 232 /* SemicolonClassElement */:
                     return node;
                 default:
                     return visitor(node);
@@ -88430,7 +90075,7 @@
             var savedPendingStatements = pendingStatements;
             pendingStatements = [];
             var visitedNode = ts.visitEachChild(node, visitor, context);
-            var statement = ts.some(pendingStatements) ? __spreadArray([visitedNode], pendingStatements) :
+            var statement = ts.some(pendingStatements) ? __spreadArray([visitedNode], pendingStatements, true) :
                 visitedNode;
             pendingStatements = savedPendingStatements;
             return statement;
@@ -88447,7 +90092,7 @@
         }
         function visitMethodOrAccessorDeclaration(node) {
             ts.Debug.assert(!ts.some(node.decorators));
-            if (!shouldTransformPrivateElements || !ts.isPrivateIdentifier(node.name)) {
+            if (!shouldTransformPrivateElementsOrClassStaticBlocks || !ts.isPrivateIdentifier(node.name)) {
                 return ts.visitEachChild(node, classElementVisitor, context);
             }
             // leave invalid code untransformed
@@ -88484,7 +90129,7 @@
         function visitPropertyDeclaration(node) {
             ts.Debug.assert(!ts.some(node.decorators));
             if (ts.isPrivateIdentifier(node.name)) {
-                if (!shouldTransformPrivateElements) {
+                if (!shouldTransformPrivateElementsOrClassStaticBlocks) {
                     // Initializer is elided as the field is initialized in transformConstructor.
                     return factory.updatePropertyDeclaration(node, 
                     /*decorators*/ undefined, ts.visitNodes(node.modifiers, visitor, ts.isModifier), node.name, 
@@ -88525,60 +90170,130 @@
             }
         }
         function visitPropertyAccessExpression(node) {
-            if (shouldTransformPrivateElements && ts.isPrivateIdentifier(node.name)) {
+            if (shouldTransformPrivateElementsOrClassStaticBlocks && ts.isPrivateIdentifier(node.name)) {
                 var privateIdentifierInfo = accessPrivateIdentifier(node.name);
                 if (privateIdentifierInfo) {
                     return ts.setTextRange(ts.setOriginalNode(createPrivateIdentifierAccess(privateIdentifierInfo, node.expression), node), node);
                 }
             }
-            return ts.visitEachChild(node, visitor, context);
-        }
-        function visitPrefixUnaryExpression(node) {
-            if (shouldTransformPrivateElements && ts.isPrivateIdentifierPropertyAccessExpression(node.operand)) {
-                var operator = node.operator === 45 /* PlusPlusToken */ ?
-                    39 /* PlusToken */ : node.operator === 46 /* MinusMinusToken */ ?
-                    40 /* MinusToken */ : undefined;
-                var info = void 0;
-                if (operator && (info = accessPrivateIdentifier(node.operand.name))) {
-                    var receiver = ts.visitNode(node.operand.expression, visitor, ts.isExpression);
-                    var _a = createCopiableReceiverExpr(receiver), readExpression = _a.readExpression, initializeExpression = _a.initializeExpression;
-                    var existingValue = factory.createPrefixUnaryExpression(39 /* PlusToken */, createPrivateIdentifierAccess(info, readExpression));
-                    return ts.setOriginalNode(createPrivateIdentifierAssignment(info, initializeExpression || readExpression, factory.createBinaryExpression(existingValue, operator, factory.createNumericLiteral(1)), 62 /* EqualsToken */), node);
+            if (shouldTransformSuperInStaticInitializers &&
+                ts.isSuperProperty(node) &&
+                ts.isIdentifier(node.name) &&
+                currentStaticPropertyDeclarationOrStaticBlock &&
+                currentClassLexicalEnvironment) {
+                var classConstructor = currentClassLexicalEnvironment.classConstructor, superClassReference = currentClassLexicalEnvironment.superClassReference, facts = currentClassLexicalEnvironment.facts;
+                if (facts & 1 /* ClassWasDecorated */) {
+                    return visitInvalidSuperProperty(node);
+                }
+                if (classConstructor && superClassReference) {
+                    // converts `super.x` into `Reflect.get(_baseTemp, "x", _classTemp)`
+                    var superProperty = factory.createReflectGetCall(superClassReference, factory.createStringLiteralFromNode(node.name), classConstructor);
+                    ts.setOriginalNode(superProperty, node.expression);
+                    ts.setTextRange(superProperty, node.expression);
+                    return superProperty;
                 }
             }
             return ts.visitEachChild(node, visitor, context);
         }
-        function visitPostfixUnaryExpression(node, valueIsDiscarded) {
-            if (shouldTransformPrivateElements && ts.isPrivateIdentifierPropertyAccessExpression(node.operand)) {
-                var operator = node.operator === 45 /* PlusPlusToken */ ?
-                    39 /* PlusToken */ : node.operator === 46 /* MinusMinusToken */ ?
-                    40 /* MinusToken */ : undefined;
-                var info = void 0;
-                if (operator && (info = accessPrivateIdentifier(node.operand.name))) {
-                    var receiver = ts.visitNode(node.operand.expression, visitor, ts.isExpression);
-                    var _a = createCopiableReceiverExpr(receiver), readExpression = _a.readExpression, initializeExpression = _a.initializeExpression;
-                    var existingValue = factory.createPrefixUnaryExpression(39 /* PlusToken */, createPrivateIdentifierAccess(info, readExpression));
-                    // Create a temporary variable to store the value returned by the expression.
-                    var returnValue = valueIsDiscarded ? undefined : factory.createTempVariable(hoistVariableDeclaration);
-                    return ts.setOriginalNode(factory.inlineExpressions(ts.compact([
-                        createPrivateIdentifierAssignment(info, initializeExpression || readExpression, factory.createBinaryExpression(returnValue ? factory.createAssignment(returnValue, existingValue) : existingValue, operator, factory.createNumericLiteral(1)), 62 /* EqualsToken */),
-                        returnValue
-                    ])), node);
+        function visitElementAccessExpression(node) {
+            if (shouldTransformSuperInStaticInitializers &&
+                ts.isSuperProperty(node) &&
+                currentStaticPropertyDeclarationOrStaticBlock &&
+                currentClassLexicalEnvironment) {
+                var classConstructor = currentClassLexicalEnvironment.classConstructor, superClassReference = currentClassLexicalEnvironment.superClassReference, facts = currentClassLexicalEnvironment.facts;
+                if (facts & 1 /* ClassWasDecorated */) {
+                    return visitInvalidSuperProperty(node);
+                }
+                if (classConstructor && superClassReference) {
+                    // converts `super[x]` into `Reflect.get(_baseTemp, x, _classTemp)`
+                    var superProperty = factory.createReflectGetCall(superClassReference, ts.visitNode(node.argumentExpression, visitor, ts.isExpression), classConstructor);
+                    ts.setOriginalNode(superProperty, node.expression);
+                    ts.setTextRange(superProperty, node.expression);
+                    return superProperty;
+                }
+            }
+            return ts.visitEachChild(node, visitor, context);
+        }
+        function visitPreOrPostfixUnaryExpression(node, valueIsDiscarded) {
+            if (node.operator === 45 /* PlusPlusToken */ || node.operator === 46 /* MinusMinusToken */) {
+                if (shouldTransformPrivateElementsOrClassStaticBlocks && ts.isPrivateIdentifierPropertyAccessExpression(node.operand)) {
+                    var info = void 0;
+                    if (info = accessPrivateIdentifier(node.operand.name)) {
+                        var receiver = ts.visitNode(node.operand.expression, visitor, ts.isExpression);
+                        var _a = createCopiableReceiverExpr(receiver), readExpression = _a.readExpression, initializeExpression = _a.initializeExpression;
+                        var expression = createPrivateIdentifierAccess(info, readExpression);
+                        var temp = ts.isPrefixUnaryExpression(node) || valueIsDiscarded ? undefined : factory.createTempVariable(hoistVariableDeclaration);
+                        expression = ts.expandPreOrPostfixIncrementOrDecrementExpression(factory, node, expression, hoistVariableDeclaration, temp);
+                        expression = createPrivateIdentifierAssignment(info, initializeExpression || readExpression, expression, 63 /* EqualsToken */);
+                        ts.setOriginalNode(expression, node);
+                        ts.setTextRange(expression, node);
+                        if (temp) {
+                            expression = factory.createComma(expression, temp);
+                            ts.setTextRange(expression, node);
+                        }
+                        return expression;
+                    }
+                }
+                else if (shouldTransformSuperInStaticInitializers &&
+                    ts.isSuperProperty(node.operand) &&
+                    currentStaticPropertyDeclarationOrStaticBlock &&
+                    currentClassLexicalEnvironment) {
+                    // converts `++super.a` into `(Reflect.set(_baseTemp, "a", (_a = Reflect.get(_baseTemp, "a", _classTemp), _b = ++_a), _classTemp), _b)`
+                    // converts `++super[f()]` into `(Reflect.set(_baseTemp, _a = f(), (_b = Reflect.get(_baseTemp, _a, _classTemp), _c = ++_b), _classTemp), _c)`
+                    // converts `--super.a` into `(Reflect.set(_baseTemp, "a", (_a = Reflect.get(_baseTemp, "a", _classTemp), _b = --_a), _classTemp), _b)`
+                    // converts `--super[f()]` into `(Reflect.set(_baseTemp, _a = f(), (_b = Reflect.get(_baseTemp, _a, _classTemp), _c = --_b), _classTemp), _c)`
+                    // converts `super.a++` into `(Reflect.set(_baseTemp, "a", (_a = Reflect.get(_baseTemp, "a", _classTemp), _b = _a++), _classTemp), _b)`
+                    // converts `super[f()]++` into `(Reflect.set(_baseTemp, _a = f(), (_b = Reflect.get(_baseTemp, _a, _classTemp), _c = _b++), _classTemp), _c)`
+                    // converts `super.a--` into `(Reflect.set(_baseTemp, "a", (_a = Reflect.get(_baseTemp, "a", _classTemp), _b = _a--), _classTemp), _b)`
+                    // converts `super[f()]--` into `(Reflect.set(_baseTemp, _a = f(), (_b = Reflect.get(_baseTemp, _a, _classTemp), _c = _b--), _classTemp), _c)`
+                    var classConstructor = currentClassLexicalEnvironment.classConstructor, superClassReference = currentClassLexicalEnvironment.superClassReference, facts = currentClassLexicalEnvironment.facts;
+                    if (facts & 1 /* ClassWasDecorated */) {
+                        var operand = visitInvalidSuperProperty(node.operand);
+                        return ts.isPrefixUnaryExpression(node) ?
+                            factory.updatePrefixUnaryExpression(node, operand) :
+                            factory.updatePostfixUnaryExpression(node, operand);
+                    }
+                    if (classConstructor && superClassReference) {
+                        var setterName = void 0;
+                        var getterName = void 0;
+                        if (ts.isPropertyAccessExpression(node.operand)) {
+                            if (ts.isIdentifier(node.operand.name)) {
+                                getterName = setterName = factory.createStringLiteralFromNode(node.operand.name);
+                            }
+                        }
+                        else {
+                            if (ts.isSimpleInlineableExpression(node.operand.argumentExpression)) {
+                                getterName = setterName = node.operand.argumentExpression;
+                            }
+                            else {
+                                getterName = factory.createTempVariable(hoistVariableDeclaration);
+                                setterName = factory.createAssignment(getterName, ts.visitNode(node.operand.argumentExpression, visitor, ts.isExpression));
+                            }
+                        }
+                        if (setterName && getterName) {
+                            var expression = factory.createReflectGetCall(superClassReference, getterName, classConstructor);
+                            ts.setTextRange(expression, node.operand);
+                            var temp = valueIsDiscarded ? undefined : factory.createTempVariable(hoistVariableDeclaration);
+                            expression = ts.expandPreOrPostfixIncrementOrDecrementExpression(factory, node, expression, hoistVariableDeclaration, temp);
+                            expression = factory.createReflectSetCall(superClassReference, setterName, expression, classConstructor);
+                            ts.setOriginalNode(expression, node);
+                            ts.setTextRange(expression, node);
+                            if (temp) {
+                                expression = factory.createComma(expression, temp);
+                                ts.setTextRange(expression, node);
+                            }
+                            return expression;
+                        }
+                    }
                 }
             }
             return ts.visitEachChild(node, visitor, context);
         }
         function visitForStatement(node) {
-            if (node.incrementor && ts.isPostfixUnaryExpression(node.incrementor)) {
-                return factory.updateForStatement(node, ts.visitNode(node.initializer, visitor, ts.isForInitializer), ts.visitNode(node.condition, visitor, ts.isExpression), visitPostfixUnaryExpression(node.incrementor, /*valueIsDiscarded*/ true), ts.visitIterationBody(node.statement, visitor, context));
-            }
-            return ts.visitEachChild(node, visitor, context);
+            return factory.updateForStatement(node, ts.visitNode(node.initializer, discardedValueVisitor, ts.isForInitializer), ts.visitNode(node.condition, visitor, ts.isExpression), ts.visitNode(node.incrementor, discardedValueVisitor, ts.isExpression), ts.visitIterationBody(node.statement, visitor, context));
         }
         function visitExpressionStatement(node) {
-            if (ts.isPostfixUnaryExpression(node.expression)) {
-                return factory.updateExpressionStatement(node, visitPostfixUnaryExpression(node.expression, /*valueIsDiscarded*/ true));
-            }
-            return ts.visitEachChild(node, visitor, context);
+            return factory.updateExpressionStatement(node, ts.visitNode(node.expression, discardedValueVisitor, ts.isExpression));
         }
         function createCopiableReceiverExpr(receiver) {
             var clone = ts.nodeIsSynthesized(receiver) ? receiver : factory.cloneNode(receiver);
@@ -88590,47 +90305,132 @@
             return { readExpression: readExpression, initializeExpression: initializeExpression };
         }
         function visitCallExpression(node) {
-            if (shouldTransformPrivateElements && ts.isPrivateIdentifierPropertyAccessExpression(node.expression)) {
+            if (shouldTransformPrivateElementsOrClassStaticBlocks && ts.isPrivateIdentifierPropertyAccessExpression(node.expression)) {
                 // Transform call expressions of private names to properly bind the `this` parameter.
                 var _a = factory.createCallBinding(node.expression, hoistVariableDeclaration, languageVersion), thisArg = _a.thisArg, target = _a.target;
                 if (ts.isCallChain(node)) {
                     return factory.updateCallChain(node, factory.createPropertyAccessChain(ts.visitNode(target, visitor), node.questionDotToken, "call"), 
                     /*questionDotToken*/ undefined, 
-                    /*typeArguments*/ undefined, __spreadArray([ts.visitNode(thisArg, visitor, ts.isExpression)], ts.visitNodes(node.arguments, visitor, ts.isExpression)));
+                    /*typeArguments*/ undefined, __spreadArray([ts.visitNode(thisArg, visitor, ts.isExpression)], ts.visitNodes(node.arguments, visitor, ts.isExpression), true));
                 }
                 return factory.updateCallExpression(node, factory.createPropertyAccessExpression(ts.visitNode(target, visitor), "call"), 
-                /*typeArguments*/ undefined, __spreadArray([ts.visitNode(thisArg, visitor, ts.isExpression)], ts.visitNodes(node.arguments, visitor, ts.isExpression)));
+                /*typeArguments*/ undefined, __spreadArray([ts.visitNode(thisArg, visitor, ts.isExpression)], ts.visitNodes(node.arguments, visitor, ts.isExpression), true));
+            }
+            if (shouldTransformSuperInStaticInitializers &&
+                ts.isSuperProperty(node.expression) &&
+                currentStaticPropertyDeclarationOrStaticBlock &&
+                (currentClassLexicalEnvironment === null || currentClassLexicalEnvironment === void 0 ? void 0 : currentClassLexicalEnvironment.classConstructor)) {
+                // converts `super.f(...)` into `Reflect.get(_baseTemp, "f", _classTemp).call(_classTemp, ...)`
+                var invocation = factory.createFunctionCallCall(ts.visitNode(node.expression, visitor, ts.isExpression), currentClassLexicalEnvironment.classConstructor, ts.visitNodes(node.arguments, visitor, ts.isExpression));
+                ts.setOriginalNode(invocation, node);
+                ts.setTextRange(invocation, node);
+                return invocation;
             }
             return ts.visitEachChild(node, visitor, context);
         }
         function visitTaggedTemplateExpression(node) {
-            if (shouldTransformPrivateElements && ts.isPrivateIdentifierPropertyAccessExpression(node.tag)) {
+            if (shouldTransformPrivateElementsOrClassStaticBlocks && ts.isPrivateIdentifierPropertyAccessExpression(node.tag)) {
                 // Bind the `this` correctly for tagged template literals when the tag is a private identifier property access.
                 var _a = factory.createCallBinding(node.tag, hoistVariableDeclaration, languageVersion), thisArg = _a.thisArg, target = _a.target;
                 return factory.updateTaggedTemplateExpression(node, factory.createCallExpression(factory.createPropertyAccessExpression(ts.visitNode(target, visitor), "bind"), 
                 /*typeArguments*/ undefined, [ts.visitNode(thisArg, visitor, ts.isExpression)]), 
                 /*typeArguments*/ undefined, ts.visitNode(node.template, visitor, ts.isTemplateLiteral));
             }
+            if (shouldTransformSuperInStaticInitializers &&
+                ts.isSuperProperty(node.tag) &&
+                currentStaticPropertyDeclarationOrStaticBlock &&
+                (currentClassLexicalEnvironment === null || currentClassLexicalEnvironment === void 0 ? void 0 : currentClassLexicalEnvironment.classConstructor)) {
+                // converts `` super.f`x` `` into `` Reflect.get(_baseTemp, "f", _classTemp).bind(_classTemp)`x` ``
+                var invocation = factory.createFunctionBindCall(ts.visitNode(node.tag, visitor, ts.isExpression), currentClassLexicalEnvironment.classConstructor, []);
+                ts.setOriginalNode(invocation, node);
+                ts.setTextRange(invocation, node);
+                return factory.updateTaggedTemplateExpression(node, invocation, 
+                /*typeArguments*/ undefined, ts.visitNode(node.template, visitor, ts.isTemplateLiteral));
+            }
             return ts.visitEachChild(node, visitor, context);
         }
-        function visitBinaryExpression(node) {
-            if (shouldTransformPrivateElements) {
-                if (ts.isDestructuringAssignment(node)) {
-                    var savedPendingExpressions = pendingExpressions;
-                    pendingExpressions = undefined;
-                    node = factory.updateBinaryExpression(node, ts.visitNode(node.left, visitorDestructuringTarget), node.operatorToken, ts.visitNode(node.right, visitor));
-                    var expr = ts.some(pendingExpressions) ?
-                        factory.inlineExpressions(ts.compact(__spreadArray(__spreadArray([], pendingExpressions), [node]))) :
-                        node;
-                    pendingExpressions = savedPendingExpressions;
-                    return expr;
+        function transformClassStaticBlockDeclaration(node) {
+            if (shouldTransformPrivateElementsOrClassStaticBlocks) {
+                if (currentClassLexicalEnvironment) {
+                    classLexicalEnvironmentMap.set(ts.getOriginalNodeId(node), currentClassLexicalEnvironment);
                 }
-                if (ts.isAssignmentExpression(node) && ts.isPrivateIdentifierPropertyAccessExpression(node.left)) {
+                startLexicalEnvironment();
+                var savedCurrentStaticPropertyDeclarationOrStaticBlock = currentStaticPropertyDeclarationOrStaticBlock;
+                currentStaticPropertyDeclarationOrStaticBlock = node;
+                var statements = ts.visitNodes(node.body.statements, visitor, ts.isStatement);
+                statements = factory.mergeLexicalEnvironment(statements, endLexicalEnvironment());
+                currentStaticPropertyDeclarationOrStaticBlock = savedCurrentStaticPropertyDeclarationOrStaticBlock;
+                var iife = factory.createImmediatelyInvokedArrowFunction(statements);
+                ts.setOriginalNode(iife, node);
+                ts.setTextRange(iife, node);
+                ts.addEmitFlags(iife, 2 /* AdviseOnEmitNode */);
+                return iife;
+            }
+        }
+        function visitBinaryExpression(node, valueIsDiscarded) {
+            if (ts.isDestructuringAssignment(node)) {
+                var savedPendingExpressions = pendingExpressions;
+                pendingExpressions = undefined;
+                node = factory.updateBinaryExpression(node, ts.visitNode(node.left, visitorDestructuringTarget), node.operatorToken, ts.visitNode(node.right, visitor));
+                var expr = ts.some(pendingExpressions) ?
+                    factory.inlineExpressions(ts.compact(__spreadArray(__spreadArray([], pendingExpressions, true), [node], false))) :
+                    node;
+                pendingExpressions = savedPendingExpressions;
+                return expr;
+            }
+            if (ts.isAssignmentExpression(node)) {
+                if (shouldTransformPrivateElementsOrClassStaticBlocks && ts.isPrivateIdentifierPropertyAccessExpression(node.left)) {
                     var info = accessPrivateIdentifier(node.left.name);
                     if (info) {
                         return ts.setTextRange(ts.setOriginalNode(createPrivateIdentifierAssignment(info, node.left.expression, node.right, node.operatorToken.kind), node), node);
                     }
                 }
+                else if (shouldTransformSuperInStaticInitializers &&
+                    ts.isSuperProperty(node.left) &&
+                    currentStaticPropertyDeclarationOrStaticBlock &&
+                    currentClassLexicalEnvironment) {
+                    var classConstructor = currentClassLexicalEnvironment.classConstructor, superClassReference = currentClassLexicalEnvironment.superClassReference, facts = currentClassLexicalEnvironment.facts;
+                    if (facts & 1 /* ClassWasDecorated */) {
+                        return factory.updateBinaryExpression(node, visitInvalidSuperProperty(node.left), node.operatorToken, ts.visitNode(node.right, visitor, ts.isExpression));
+                    }
+                    if (classConstructor && superClassReference) {
+                        var setterName = ts.isElementAccessExpression(node.left) ? ts.visitNode(node.left.argumentExpression, visitor, ts.isExpression) :
+                            ts.isIdentifier(node.left.name) ? factory.createStringLiteralFromNode(node.left.name) :
+                                undefined;
+                        if (setterName) {
+                            // converts `super.x = 1` into `(Reflect.set(_baseTemp, "x", _a = 1, _classTemp), _a)`
+                            // converts `super[f()] = 1` into `(Reflect.set(_baseTemp, f(), _a = 1, _classTemp), _a)`
+                            // converts `super.x += 1` into `(Reflect.set(_baseTemp, "x", _a = Reflect.get(_baseTemp, "x", _classtemp) + 1, _classTemp), _a)`
+                            // converts `super[f()] += 1` into `(Reflect.set(_baseTemp, _a = f(), _b = Reflect.get(_baseTemp, _a, _classtemp) + 1, _classTemp), _b)`
+                            var expression = ts.visitNode(node.right, visitor, ts.isExpression);
+                            if (ts.isCompoundAssignment(node.operatorToken.kind)) {
+                                var getterName = setterName;
+                                if (!ts.isSimpleInlineableExpression(setterName)) {
+                                    getterName = factory.createTempVariable(hoistVariableDeclaration);
+                                    setterName = factory.createAssignment(getterName, setterName);
+                                }
+                                var superPropertyGet = factory.createReflectGetCall(superClassReference, getterName, classConstructor);
+                                ts.setOriginalNode(superPropertyGet, node.left);
+                                ts.setTextRange(superPropertyGet, node.left);
+                                expression = factory.createBinaryExpression(superPropertyGet, ts.getNonAssignmentOperatorForCompoundAssignment(node.operatorToken.kind), expression);
+                                ts.setTextRange(expression, node);
+                            }
+                            var temp = valueIsDiscarded ? undefined : factory.createTempVariable(hoistVariableDeclaration);
+                            if (temp) {
+                                expression = factory.createAssignment(temp, expression);
+                                ts.setTextRange(temp, node);
+                            }
+                            expression = factory.createReflectSetCall(superClassReference, setterName, expression, classConstructor);
+                            ts.setOriginalNode(expression, node);
+                            ts.setTextRange(expression, node);
+                            if (temp) {
+                                expression = factory.createComma(expression, temp);
+                                ts.setTextRange(expression, node);
+                            }
+                            return expression;
+                        }
+                    }
+                }
             }
             return ts.visitEachChild(node, visitor, context);
         }
@@ -88659,10 +90459,13 @@
          * Set up the environment for a class.
          */
         function visitClassLike(node) {
+            if (!ts.forEach(node.members, doesClassElementNeedTransform)) {
+                return ts.visitEachChild(node, visitor, context);
+            }
             var savedPendingExpressions = pendingExpressions;
             pendingExpressions = undefined;
-            if (shouldTransformPrivateElements) {
-                startPrivateIdentifierEnvironment();
+            startClassLexicalEnvironment();
+            if (shouldTransformPrivateElementsOrClassStaticBlocks) {
                 var name = ts.getNameOfDeclaration(node);
                 if (name && ts.isIdentifier(name)) {
                     getPrivateIdentifierEnvironment().className = ts.idText(name);
@@ -88675,38 +90478,81 @@
             var result = ts.isClassDeclaration(node) ?
                 visitClassDeclaration(node) :
                 visitClassExpression(node);
-            if (shouldTransformPrivateElements) {
-                endPrivateIdentifierEnvironment();
-            }
+            endClassLexicalEnvironment();
             pendingExpressions = savedPendingExpressions;
             return result;
         }
         function doesClassElementNeedTransform(node) {
-            return ts.isPropertyDeclaration(node) || (shouldTransformPrivateElements && node.name && ts.isPrivateIdentifier(node.name));
+            return ts.isPropertyDeclaration(node) || ts.isClassStaticBlockDeclaration(node) || (shouldTransformPrivateElementsOrClassStaticBlocks && node.name && ts.isPrivateIdentifier(node.name));
         }
         function getPrivateInstanceMethodsAndAccessors(node) {
             return ts.filter(node.members, ts.isNonStaticMethodOrAccessorWithPrivateName);
         }
-        function visitClassDeclaration(node) {
-            if (!ts.forEach(node.members, doesClassElementNeedTransform)) {
-                return ts.visitEachChild(node, visitor, context);
+        function getClassFacts(node) {
+            var facts = 0 /* None */;
+            var original = ts.getOriginalNode(node);
+            if (ts.isClassDeclaration(original) && ts.classOrConstructorParameterIsDecorated(original)) {
+                facts |= 1 /* ClassWasDecorated */;
             }
-            var staticProperties = ts.getProperties(node, /*requireInitializer*/ false, /*isStatic*/ true);
-            var pendingPrivateStateAssignment;
-            if (shouldTransformPrivateElements && ts.some(node.members, function (m) { return ts.hasStaticModifier(m) && !!m.name && ts.isPrivateIdentifier(m.name); })) {
-                var temp = factory.createTempVariable(hoistVariableDeclaration, /* reservedInNestedScopes */ true);
-                getPrivateIdentifierEnvironment().classConstructor = factory.cloneNode(temp);
-                pendingPrivateStateAssignment = factory.createAssignment(temp, factory.getInternalName(node));
+            for (var _i = 0, _a = node.members; _i < _a.length; _i++) {
+                var member = _a[_i];
+                if (!ts.isStatic(member))
+                    continue;
+                if (member.name && ts.isPrivateIdentifier(member.name) && shouldTransformPrivateElementsOrClassStaticBlocks) {
+                    facts |= 2 /* NeedsClassConstructorReference */;
+                }
+                if (ts.isPropertyDeclaration(member) || ts.isClassStaticBlockDeclaration(member)) {
+                    if (shouldTransformThisInStaticInitializers && member.transformFlags & 8192 /* ContainsLexicalThis */) {
+                        facts |= 8 /* NeedsSubstitutionForThisInClassStaticField */;
+                        if (!(facts & 1 /* ClassWasDecorated */)) {
+                            facts |= 2 /* NeedsClassConstructorReference */;
+                        }
+                    }
+                    if (shouldTransformSuperInStaticInitializers && member.transformFlags & 33554432 /* ContainsLexicalSuper */) {
+                        if (!(facts & 1 /* ClassWasDecorated */)) {
+                            facts |= 2 /* NeedsClassConstructorReference */ | 4 /* NeedsClassSuperReference */;
+                        }
+                    }
+                }
+            }
+            return facts;
+        }
+        function visitExpressionWithTypeArguments(node) {
+            var facts = (currentClassLexicalEnvironment === null || currentClassLexicalEnvironment === void 0 ? void 0 : currentClassLexicalEnvironment.facts) || 0 /* None */;
+            if (facts & 4 /* NeedsClassSuperReference */) {
+                var temp = factory.createTempVariable(hoistVariableDeclaration, /*reserveInNestedScopes*/ true);
+                getClassLexicalEnvironment().superClassReference = temp;
+                return factory.updateExpressionWithTypeArguments(node, factory.createAssignment(temp, ts.visitNode(node.expression, visitor, ts.isExpression)), 
+                /*typeArguments*/ undefined);
+            }
+            return ts.visitEachChild(node, visitor, context);
+        }
+        function visitClassDeclaration(node) {
+            var facts = getClassFacts(node);
+            if (facts) {
+                getClassLexicalEnvironment().facts = facts;
+            }
+            if (facts & 8 /* NeedsSubstitutionForThisInClassStaticField */) {
+                enableSubstitutionForClassStaticThisOrSuperReference();
+            }
+            var staticProperties = ts.getStaticPropertiesAndClassStaticBlock(node);
+            // If a class has private static fields, or a static field has a `this` or `super` reference,
+            // then we need to allocate a temp variable to hold on to that reference.
+            var pendingClassReferenceAssignment;
+            if (facts & 2 /* NeedsClassConstructorReference */) {
+                var temp = factory.createTempVariable(hoistVariableDeclaration, /*reservedInNestedScopes*/ true);
+                getClassLexicalEnvironment().classConstructor = factory.cloneNode(temp);
+                pendingClassReferenceAssignment = factory.createAssignment(temp, factory.getInternalName(node));
             }
             var extendsClauseElement = ts.getEffectiveBaseTypeNode(node);
-            var isDerivedClass = !!(extendsClauseElement && ts.skipOuterExpressions(extendsClauseElement.expression).kind !== 103 /* NullKeyword */);
+            var isDerivedClass = !!(extendsClauseElement && ts.skipOuterExpressions(extendsClauseElement.expression).kind !== 104 /* NullKeyword */);
             var statements = [
                 factory.updateClassDeclaration(node, 
                 /*decorators*/ undefined, node.modifiers, node.name, 
-                /*typeParameters*/ undefined, ts.visitNodes(node.heritageClauses, visitor, ts.isHeritageClause), transformClassMembers(node, isDerivedClass))
+                /*typeParameters*/ undefined, ts.visitNodes(node.heritageClauses, heritageClauseVisitor, ts.isHeritageClause), transformClassMembers(node, isDerivedClass))
             ];
-            if (pendingPrivateStateAssignment) {
-                getPendingExpressions().unshift(pendingPrivateStateAssignment);
+            if (pendingClassReferenceAssignment) {
+                getPendingExpressions().unshift(pendingClassReferenceAssignment);
             }
             // Write any pending expressions from elided or moved computed property names
             if (ts.some(pendingExpressions)) {
@@ -88718,13 +90564,17 @@
             //      HasLexicalDeclaration (N) : Determines if the argument identifier has a binding in this environment record that was created using
             //                                  a lexical declaration such as a LexicalDeclaration or a ClassDeclaration.
             if (ts.some(staticProperties)) {
-                addPropertyStatements(statements, staticProperties, factory.getInternalName(node));
+                addPropertyOrClassStaticBlockStatements(statements, staticProperties, factory.getInternalName(node));
             }
             return statements;
         }
         function visitClassExpression(node) {
-            if (!ts.forEach(node.members, doesClassElementNeedTransform)) {
-                return ts.visitEachChild(node, visitor, context);
+            var facts = getClassFacts(node);
+            if (facts) {
+                getClassLexicalEnvironment().facts = facts;
+            }
+            if (facts & 8 /* NeedsSubstitutionForThisInClassStaticField */) {
+                enableSubstitutionForClassStaticThisOrSuperReference();
             }
             // If this class expression is a transformation of a decorated class declaration,
             // then we want to output the pendingExpressions as statements, not as inlined
@@ -88733,10 +90583,10 @@
             // In this case, we use pendingStatements to produce the same output as the
             // class declaration transformation. The VariableStatement visitor will insert
             // these statements after the class expression variable statement.
-            var isDecoratedClassDeclaration = ts.isClassDeclaration(ts.getOriginalNode(node));
-            var staticProperties = ts.getProperties(node, /*requireInitializer*/ false, /*isStatic*/ true);
+            var isDecoratedClassDeclaration = !!(facts & 1 /* ClassWasDecorated */);
+            var staticPropertiesOrClassStaticBlocks = ts.getStaticPropertiesAndClassStaticBlock(node);
             var extendsClauseElement = ts.getEffectiveBaseTypeNode(node);
-            var isDerivedClass = !!(extendsClauseElement && ts.skipOuterExpressions(extendsClauseElement.expression).kind !== 103 /* NullKeyword */);
+            var isDerivedClass = !!(extendsClauseElement && ts.skipOuterExpressions(extendsClauseElement.expression).kind !== 104 /* NullKeyword */);
             var isClassWithConstructorReference = resolver.getNodeCheckFlags(node) & 16777216 /* ClassWithConstructorReference */;
             var temp;
             function createClassTempVar() {
@@ -88745,13 +90595,13 @@
                 var requiresBlockScopedVar = classCheckFlags & 524288 /* BlockScopedBindingInLoop */;
                 return factory.createTempVariable(requiresBlockScopedVar ? addBlockScopedVariable : hoistVariableDeclaration, !!isClassWithConstructorReference);
             }
-            if (shouldTransformPrivateElements && ts.some(node.members, function (m) { return ts.hasStaticModifier(m) && !!m.name && ts.isPrivateIdentifier(m.name); })) {
+            if (facts & 2 /* NeedsClassConstructorReference */) {
                 temp = createClassTempVar();
-                getPrivateIdentifierEnvironment().classConstructor = factory.cloneNode(temp);
+                getClassLexicalEnvironment().classConstructor = factory.cloneNode(temp);
             }
             var classExpression = factory.updateClassExpression(node, ts.visitNodes(node.decorators, visitor, ts.isDecorator), node.modifiers, node.name, 
-            /*typeParameters*/ undefined, ts.visitNodes(node.heritageClauses, visitor, ts.isHeritageClause), transformClassMembers(node, isDerivedClass));
-            var hasTransformableStatics = ts.some(staticProperties, function (p) { return !!p.initializer || (shouldTransformPrivateElements && ts.isPrivateIdentifier(p.name)); });
+            /*typeParameters*/ undefined, ts.visitNodes(node.heritageClauses, heritageClauseVisitor, ts.isHeritageClause), transformClassMembers(node, isDerivedClass));
+            var hasTransformableStatics = ts.some(staticPropertiesOrClassStaticBlocks, function (p) { return ts.isClassStaticBlockDeclaration(p) || !!p.initializer || (shouldTransformPrivateElementsOrClassStaticBlocks && ts.isPrivateIdentifier(p.name)); });
             if (hasTransformableStatics || ts.some(pendingExpressions)) {
                 if (isDecoratedClassDeclaration) {
                     ts.Debug.assertIsDefined(pendingStatements, "Decorated classes transformed by TypeScript are expected to be within a variable declaration.");
@@ -88759,8 +90609,8 @@
                     if (pendingStatements && pendingExpressions && ts.some(pendingExpressions)) {
                         pendingStatements.push(factory.createExpressionStatement(factory.inlineExpressions(pendingExpressions)));
                     }
-                    if (pendingStatements && ts.some(staticProperties)) {
-                        addPropertyStatements(pendingStatements, staticProperties, factory.getInternalName(node));
+                    if (pendingStatements && ts.some(staticPropertiesOrClassStaticBlocks)) {
+                        addPropertyOrClassStaticBlockStatements(pendingStatements, staticPropertiesOrClassStaticBlocks, factory.getInternalName(node));
                     }
                     if (temp) {
                         return factory.inlineExpressions([factory.createAssignment(temp, classExpression), temp]);
@@ -88783,15 +90633,22 @@
                     expressions.push(ts.startOnNewLine(factory.createAssignment(temp, classExpression)));
                     // Add any pending expressions leftover from elided or relocated computed property names
                     ts.addRange(expressions, ts.map(pendingExpressions, ts.startOnNewLine));
-                    ts.addRange(expressions, generateInitializedPropertyExpressions(staticProperties, temp));
+                    ts.addRange(expressions, generateInitializedPropertyExpressionsOrClassStaticBlock(staticPropertiesOrClassStaticBlocks, temp));
                     expressions.push(ts.startOnNewLine(temp));
                     return factory.inlineExpressions(expressions);
                 }
             }
             return classExpression;
         }
+        function visitClassStaticBlockDeclaration(node) {
+            if (!shouldTransformPrivateElementsOrClassStaticBlocks) {
+                return ts.visitEachChild(node, classElementVisitor, context);
+            }
+            // ClassStaticBlockDeclaration for classes are transformed in `visitClassDeclaration` or `visitClassExpression`.
+            return undefined;
+        }
         function transformClassMembers(node, isDerivedClass) {
-            if (shouldTransformPrivateElements) {
+            if (shouldTransformPrivateElementsOrClassStaticBlocks) {
                 // Declare private names.
                 for (var _i = 0, _a = node.members; _i < _a.length; _i++) {
                     var member = _a[_i];
@@ -88818,7 +90675,7 @@
             /*typeArguments*/ undefined, [])));
         }
         function isClassElementThatRequiresConstructorStatement(member) {
-            if (ts.hasStaticModifier(member) || ts.hasSyntacticModifier(ts.getOriginalNode(member), 128 /* Abstract */)) {
+            if (ts.isStatic(member) || ts.hasSyntacticModifier(ts.getOriginalNode(member), 128 /* Abstract */)) {
                 return false;
             }
             if (useDefineForClassFields) {
@@ -88826,7 +90683,7 @@
                 // then we don't need to transform any class properties.
                 return languageVersion < 99 /* ESNext */;
             }
-            return ts.isInitializedProperty(member) || shouldTransformPrivateElements && ts.isPrivateIdentifierClassElementDeclaration(member);
+            return ts.isInitializedProperty(member) || shouldTransformPrivateElementsOrClassStaticBlocks && ts.isPrivateIdentifierClassElementDeclaration(member);
         }
         function transformConstructor(node, isDerivedClass) {
             var constructor = ts.visitNode(ts.getFirstConstructorWithBody(node), visitor, ts.isConstructorDeclaration);
@@ -88893,7 +90750,7 @@
             var receiver = factory.createThis();
             // private methods can be called in property initializers, they should execute first.
             addMethodStatements(statements, privateMethodsAndAccessors, receiver);
-            addPropertyStatements(statements, properties, receiver);
+            addPropertyOrClassStaticBlockStatements(statements, properties, receiver);
             // Add existing statements, skipping the initial super call.
             if (constructor) {
                 ts.addRange(statements, ts.visitNodes(constructor.body.statements, visitor, ts.isStatement, indexOfFirstStatement));
@@ -88910,10 +90767,12 @@
          * @param properties An array of property declarations to transform.
          * @param receiver The receiver on which each property should be assigned.
          */
-        function addPropertyStatements(statements, properties, receiver) {
+        function addPropertyOrClassStaticBlockStatements(statements, properties, receiver) {
             for (var _i = 0, properties_7 = properties; _i < properties_7.length; _i++) {
                 var property = properties_7[_i];
-                var expression = transformProperty(property, receiver);
+                var expression = ts.isClassStaticBlockDeclaration(property) ?
+                    transformClassStaticBlockDeclaration(property) :
+                    transformProperty(property, receiver);
                 if (!expression) {
                     continue;
                 }
@@ -88927,14 +90786,14 @@
         /**
          * Generates assignment expressions for property initializers.
          *
-         * @param properties An array of property declarations to transform.
+         * @param propertiesOrClassStaticBlocks An array of property declarations to transform.
          * @param receiver The receiver on which each property should be assigned.
          */
-        function generateInitializedPropertyExpressions(properties, receiver) {
+        function generateInitializedPropertyExpressionsOrClassStaticBlock(propertiesOrClassStaticBlocks, receiver) {
             var expressions = [];
-            for (var _i = 0, properties_8 = properties; _i < properties_8.length; _i++) {
-                var property = properties_8[_i];
-                var expression = transformProperty(property, receiver);
+            for (var _i = 0, propertiesOrClassStaticBlocks_1 = propertiesOrClassStaticBlocks; _i < propertiesOrClassStaticBlocks_1.length; _i++) {
+                var property = propertiesOrClassStaticBlocks_1[_i];
+                var expression = ts.isClassStaticBlockDeclaration(property) ? transformClassStaticBlockDeclaration(property) : transformProperty(property, receiver);
                 if (!expression) {
                     continue;
                 }
@@ -88953,13 +90812,28 @@
          * @param receiver The object receiving the property assignment.
          */
         function transformProperty(property, receiver) {
+            var savedCurrentStaticPropertyDeclarationOrStaticBlock = currentStaticPropertyDeclarationOrStaticBlock;
+            var transformed = transformPropertyWorker(property, receiver);
+            if (transformed && ts.hasStaticModifier(property) && (currentClassLexicalEnvironment === null || currentClassLexicalEnvironment === void 0 ? void 0 : currentClassLexicalEnvironment.facts)) {
+                // capture the lexical environment for the member
+                ts.setOriginalNode(transformed, property);
+                ts.addEmitFlags(transformed, 2 /* AdviseOnEmitNode */);
+                classLexicalEnvironmentMap.set(ts.getOriginalNodeId(transformed), currentClassLexicalEnvironment);
+            }
+            currentStaticPropertyDeclarationOrStaticBlock = savedCurrentStaticPropertyDeclarationOrStaticBlock;
+            return transformed;
+        }
+        function transformPropertyWorker(property, receiver) {
             var _a;
             // We generate a name here in order to reuse the value cached by the relocated computed name expression (which uses the same generated name)
             var emitAssignment = !useDefineForClassFields;
             var propertyName = ts.isComputedPropertyName(property.name) && !ts.isSimpleInlineableExpression(property.name.expression)
                 ? factory.updateComputedPropertyName(property.name, factory.getGeneratedNameForNode(property.name))
                 : property.name;
-            if (shouldTransformPrivateElements && ts.isPrivateIdentifier(propertyName)) {
+            if (ts.hasStaticModifier(property)) {
+                currentStaticPropertyDeclarationOrStaticBlock = property;
+            }
+            if (shouldTransformPrivateElementsOrClassStaticBlocks && ts.isPrivateIdentifier(propertyName)) {
                 var privateIdentifierInfo = accessPrivateIdentifier(propertyName);
                 if (privateIdentifierInfo) {
                     if (privateIdentifierInfo.kind === "f" /* Field */) {
@@ -89005,11 +90879,30 @@
                 enabledSubstitutions |= 1 /* ClassAliases */;
                 // We need to enable substitutions for identifiers. This allows us to
                 // substitute class names inside of a class declaration.
-                context.enableSubstitution(78 /* Identifier */);
+                context.enableSubstitution(79 /* Identifier */);
                 // Keep track of class aliases.
                 classAliases = [];
             }
         }
+        function enableSubstitutionForClassStaticThisOrSuperReference() {
+            if ((enabledSubstitutions & 2 /* ClassStaticThisOrSuperReference */) === 0) {
+                enabledSubstitutions |= 2 /* ClassStaticThisOrSuperReference */;
+                // substitute `this` in a static field initializer
+                context.enableSubstitution(108 /* ThisKeyword */);
+                // these push a new lexical environment that is not the class lexical environment
+                context.enableEmitNotification(254 /* FunctionDeclaration */);
+                context.enableEmitNotification(211 /* FunctionExpression */);
+                context.enableEmitNotification(169 /* Constructor */);
+                // these push a new lexical environment that is not the class lexical environment, except
+                // when they have a computed property name
+                context.enableEmitNotification(170 /* GetAccessor */);
+                context.enableEmitNotification(171 /* SetAccessor */);
+                context.enableEmitNotification(167 /* MethodDeclaration */);
+                context.enableEmitNotification(165 /* PropertyDeclaration */);
+                // class lexical environments are restored when entering a computed property name
+                context.enableEmitNotification(160 /* ComputedPropertyName */);
+            }
+        }
         /**
          * Generates brand-check initializer for private methods.
          *
@@ -89018,13 +90911,76 @@
          * @param receiver The receiver on which each method should be assigned.
          */
         function addMethodStatements(statements, methods, receiver) {
-            if (!shouldTransformPrivateElements || !ts.some(methods)) {
+            if (!shouldTransformPrivateElementsOrClassStaticBlocks || !ts.some(methods)) {
                 return;
             }
             var weakSetName = getPrivateIdentifierEnvironment().weakSetName;
             ts.Debug.assert(weakSetName, "weakSetName should be set in private identifier environment");
             statements.push(factory.createExpressionStatement(createPrivateInstanceMethodInitializer(receiver, weakSetName)));
         }
+        function visitInvalidSuperProperty(node) {
+            return ts.isPropertyAccessExpression(node) ?
+                factory.updatePropertyAccessExpression(node, factory.createVoidZero(), node.name) :
+                factory.updateElementAccessExpression(node, factory.createVoidZero(), ts.visitNode(node.argumentExpression, visitor, ts.isExpression));
+        }
+        function onEmitNode(hint, node, emitCallback) {
+            var original = ts.getOriginalNode(node);
+            if (original.id) {
+                var classLexicalEnvironment = classLexicalEnvironmentMap.get(original.id);
+                if (classLexicalEnvironment) {
+                    var savedClassLexicalEnvironment = currentClassLexicalEnvironment;
+                    var savedCurrentComputedPropertyNameClassLexicalEnvironment = currentComputedPropertyNameClassLexicalEnvironment;
+                    currentClassLexicalEnvironment = classLexicalEnvironment;
+                    currentComputedPropertyNameClassLexicalEnvironment = classLexicalEnvironment;
+                    previousOnEmitNode(hint, node, emitCallback);
+                    currentClassLexicalEnvironment = savedClassLexicalEnvironment;
+                    currentComputedPropertyNameClassLexicalEnvironment = savedCurrentComputedPropertyNameClassLexicalEnvironment;
+                    return;
+                }
+            }
+            switch (node.kind) {
+                case 211 /* FunctionExpression */:
+                    if (ts.isArrowFunction(original) || ts.getEmitFlags(node) & 262144 /* AsyncFunctionBody */) {
+                        break;
+                    }
+                // falls through
+                case 254 /* FunctionDeclaration */:
+                case 169 /* Constructor */: {
+                    var savedClassLexicalEnvironment = currentClassLexicalEnvironment;
+                    var savedCurrentComputedPropertyNameClassLexicalEnvironment = currentComputedPropertyNameClassLexicalEnvironment;
+                    currentClassLexicalEnvironment = undefined;
+                    currentComputedPropertyNameClassLexicalEnvironment = undefined;
+                    previousOnEmitNode(hint, node, emitCallback);
+                    currentClassLexicalEnvironment = savedClassLexicalEnvironment;
+                    currentComputedPropertyNameClassLexicalEnvironment = savedCurrentComputedPropertyNameClassLexicalEnvironment;
+                    return;
+                }
+                case 170 /* GetAccessor */:
+                case 171 /* SetAccessor */:
+                case 167 /* MethodDeclaration */:
+                case 165 /* PropertyDeclaration */: {
+                    var savedClassLexicalEnvironment = currentClassLexicalEnvironment;
+                    var savedCurrentComputedPropertyNameClassLexicalEnvironment = currentComputedPropertyNameClassLexicalEnvironment;
+                    currentComputedPropertyNameClassLexicalEnvironment = currentClassLexicalEnvironment;
+                    currentClassLexicalEnvironment = undefined;
+                    previousOnEmitNode(hint, node, emitCallback);
+                    currentClassLexicalEnvironment = savedClassLexicalEnvironment;
+                    currentComputedPropertyNameClassLexicalEnvironment = savedCurrentComputedPropertyNameClassLexicalEnvironment;
+                    return;
+                }
+                case 160 /* ComputedPropertyName */: {
+                    var savedClassLexicalEnvironment = currentClassLexicalEnvironment;
+                    var savedCurrentComputedPropertyNameClassLexicalEnvironment = currentComputedPropertyNameClassLexicalEnvironment;
+                    currentClassLexicalEnvironment = currentComputedPropertyNameClassLexicalEnvironment;
+                    currentComputedPropertyNameClassLexicalEnvironment = undefined;
+                    previousOnEmitNode(hint, node, emitCallback);
+                    currentClassLexicalEnvironment = savedClassLexicalEnvironment;
+                    currentComputedPropertyNameClassLexicalEnvironment = savedCurrentComputedPropertyNameClassLexicalEnvironment;
+                    return;
+                }
+            }
+            previousOnEmitNode(hint, node, emitCallback);
+        }
         /**
          * Hooks node substitutions.
          *
@@ -89040,8 +90996,22 @@
         }
         function substituteExpression(node) {
             switch (node.kind) {
-                case 78 /* Identifier */:
+                case 79 /* Identifier */:
                     return substituteExpressionIdentifier(node);
+                case 108 /* ThisKeyword */:
+                    return substituteThisExpression(node);
+            }
+            return node;
+        }
+        function substituteThisExpression(node) {
+            if (enabledSubstitutions & 2 /* ClassStaticThisOrSuperReference */ && currentClassLexicalEnvironment) {
+                var facts = currentClassLexicalEnvironment.facts, classConstructor = currentClassLexicalEnvironment.classConstructor;
+                if (facts & 1 /* ClassWasDecorated */) {
+                    return factory.createParenthesizedExpression(factory.createVoidZero());
+                }
+                if (classConstructor) {
+                    return ts.setTextRange(ts.setOriginalNode(factory.cloneNode(classConstructor), node), node);
+                }
             }
             return node;
         }
@@ -89094,21 +91064,28 @@
                 return (inlinable || ts.isIdentifier(innerExpression)) ? undefined : expression;
             }
         }
-        function startPrivateIdentifierEnvironment() {
-            privateIdentifierEnvironmentStack.push(currentPrivateIdentifierEnvironment);
-            currentPrivateIdentifierEnvironment = undefined;
+        function startClassLexicalEnvironment() {
+            classLexicalEnvironmentStack.push(currentClassLexicalEnvironment);
+            currentClassLexicalEnvironment = undefined;
         }
-        function endPrivateIdentifierEnvironment() {
-            currentPrivateIdentifierEnvironment = privateIdentifierEnvironmentStack.pop();
+        function endClassLexicalEnvironment() {
+            currentClassLexicalEnvironment = classLexicalEnvironmentStack.pop();
+        }
+        function getClassLexicalEnvironment() {
+            return currentClassLexicalEnvironment || (currentClassLexicalEnvironment = {
+                facts: 0 /* None */,
+                classConstructor: undefined,
+                superClassReference: undefined,
+                privateIdentifierEnvironment: undefined,
+            });
         }
         function getPrivateIdentifierEnvironment() {
-            if (!currentPrivateIdentifierEnvironment) {
-                currentPrivateIdentifierEnvironment = {
-                    className: "",
-                    identifiers: new ts.Map()
-                };
-            }
-            return currentPrivateIdentifierEnvironment;
+            var lex = getClassLexicalEnvironment();
+            lex.privateIdentifierEnvironment || (lex.privateIdentifierEnvironment = {
+                className: "",
+                identifiers: new ts.Map()
+            });
+            return lex.privateIdentifierEnvironment;
         }
         function getPendingExpressions() {
             return pendingExpressions || (pendingExpressions = []);
@@ -89116,17 +91093,19 @@
         function addPrivateIdentifierToEnvironment(node) {
             var _a;
             var text = ts.getTextOfPropertyName(node.name);
-            var env = getPrivateIdentifierEnvironment();
-            var weakSetName = env.weakSetName, classConstructor = env.classConstructor;
+            var lex = getClassLexicalEnvironment();
+            var classConstructor = lex.classConstructor;
+            var privateEnv = getPrivateIdentifierEnvironment();
+            var weakSetName = privateEnv.weakSetName;
             var assignmentExpressions = [];
             var privateName = node.name.escapedText;
-            var previousInfo = env.identifiers.get(privateName);
+            var previousInfo = privateEnv.identifiers.get(privateName);
             var isValid = !isReservedPrivateName(node.name) && previousInfo === undefined;
             if (ts.hasStaticModifier(node)) {
                 ts.Debug.assert(classConstructor, "weakSetName should be set in private identifier environment");
                 if (ts.isPropertyDeclaration(node)) {
                     var variableName = createHoistedVariableForPrivateName(text, node);
-                    env.identifiers.set(privateName, {
+                    privateEnv.identifiers.set(privateName, {
                         kind: "f" /* Field */,
                         variableName: variableName,
                         brandCheckIdentifier: classConstructor,
@@ -89136,7 +91115,7 @@
                 }
                 else if (ts.isMethodDeclaration(node)) {
                     var functionName = createHoistedVariableForPrivateName(text, node);
-                    env.identifiers.set(privateName, {
+                    privateEnv.identifiers.set(privateName, {
                         kind: "m" /* Method */,
                         methodName: functionName,
                         brandCheckIdentifier: classConstructor,
@@ -89150,7 +91129,7 @@
                         previousInfo.getterName = getterName;
                     }
                     else {
-                        env.identifiers.set(privateName, {
+                        privateEnv.identifiers.set(privateName, {
                             kind: "a" /* Accessor */,
                             getterName: getterName,
                             setterName: undefined,
@@ -89166,7 +91145,7 @@
                         previousInfo.setterName = setterName;
                     }
                     else {
-                        env.identifiers.set(privateName, {
+                        privateEnv.identifiers.set(privateName, {
                             kind: "a" /* Accessor */,
                             getterName: undefined,
                             setterName: setterName,
@@ -89182,7 +91161,7 @@
             }
             else if (ts.isPropertyDeclaration(node)) {
                 var weakMapName = createHoistedVariableForPrivateName(text, node);
-                env.identifiers.set(privateName, {
+                privateEnv.identifiers.set(privateName, {
                     kind: "f" /* Field */,
                     brandCheckIdentifier: weakMapName,
                     isStatic: false,
@@ -89194,7 +91173,7 @@
             }
             else if (ts.isMethodDeclaration(node)) {
                 ts.Debug.assert(weakSetName, "weakSetName should be set in private identifier environment");
-                env.identifiers.set(privateName, {
+                privateEnv.identifiers.set(privateName, {
                     kind: "m" /* Method */,
                     methodName: createHoistedVariableForPrivateName(text, node),
                     brandCheckIdentifier: weakSetName,
@@ -89210,7 +91189,7 @@
                         previousInfo.getterName = getterName;
                     }
                     else {
-                        env.identifiers.set(privateName, {
+                        privateEnv.identifiers.set(privateName, {
                             kind: "a" /* Accessor */,
                             getterName: getterName,
                             setterName: undefined,
@@ -89226,7 +91205,7 @@
                         previousInfo.setterName = setterName;
                     }
                     else {
-                        env.identifiers.set(privateName, {
+                        privateEnv.identifiers.set(privateName, {
                             kind: "a" /* Accessor */,
                             getterName: undefined,
                             setterName: setterName,
@@ -89258,18 +91237,19 @@
             return createHoistedVariableForClass(privateName.substring(1), node.name);
         }
         function accessPrivateIdentifier(name) {
-            if (currentPrivateIdentifierEnvironment) {
-                var info = currentPrivateIdentifierEnvironment.identifiers.get(name.escapedText);
+            var _a;
+            if (currentClassLexicalEnvironment === null || currentClassLexicalEnvironment === void 0 ? void 0 : currentClassLexicalEnvironment.privateIdentifierEnvironment) {
+                var info = currentClassLexicalEnvironment.privateIdentifierEnvironment.identifiers.get(name.escapedText);
                 if (info) {
                     return info;
                 }
             }
-            for (var i = privateIdentifierEnvironmentStack.length - 1; i >= 0; --i) {
-                var env = privateIdentifierEnvironmentStack[i];
+            for (var i = classLexicalEnvironmentStack.length - 1; i >= 0; --i) {
+                var env = classLexicalEnvironmentStack[i];
                 if (!env) {
                     continue;
                 }
-                var info = env.identifiers.get(name.escapedText);
+                var info = (_a = env.privateIdentifierEnvironment) === null || _a === void 0 ? void 0 : _a.identifiers.get(name.escapedText);
                 if (info) {
                     return info;
                 }
@@ -89287,53 +91267,93 @@
             // differently inside the function.
             if (ts.isThisProperty(node) || ts.isSuperProperty(node) || !ts.isSimpleCopiableExpression(node.expression)) {
                 receiver = factory.createTempVariable(hoistVariableDeclaration, /*reservedInNestedScopes*/ true);
-                getPendingExpressions().push(factory.createBinaryExpression(receiver, 62 /* EqualsToken */, node.expression));
+                getPendingExpressions().push(factory.createBinaryExpression(receiver, 63 /* EqualsToken */, ts.visitNode(node.expression, visitor, ts.isExpression)));
             }
-            return factory.createPropertyAccessExpression(
-            // Explicit parens required because of v8 regression (https://bugs.chromium.org/p/v8/issues/detail?id=9560)
-            factory.createParenthesizedExpression(factory.createObjectLiteralExpression([
-                factory.createSetAccessorDeclaration(
-                /*decorators*/ undefined, 
-                /*modifiers*/ undefined, "value", [factory.createParameterDeclaration(
-                    /*decorators*/ undefined, 
-                    /*modifiers*/ undefined, 
-                    /*dotDotDotToken*/ undefined, parameter, 
-                    /*questionToken*/ undefined, 
-                    /*type*/ undefined, 
-                    /*initializer*/ undefined)], factory.createBlock([factory.createExpressionStatement(createPrivateIdentifierAssignment(info, receiver, parameter, 62 /* EqualsToken */))]))
-            ])), "value");
+            return factory.createAssignmentTargetWrapper(parameter, createPrivateIdentifierAssignment(info, receiver, parameter, 63 /* EqualsToken */));
         }
         function visitArrayAssignmentTarget(node) {
             var target = ts.getTargetOfBindingOrAssignmentElement(node);
-            if (target && ts.isPrivateIdentifierPropertyAccessExpression(target)) {
-                var wrapped = wrapPrivateIdentifierForDestructuringTarget(target);
-                if (ts.isAssignmentExpression(node)) {
-                    return factory.updateBinaryExpression(node, wrapped, node.operatorToken, ts.visitNode(node.right, visitor, ts.isExpression));
+            if (target) {
+                var wrapped = void 0;
+                if (ts.isPrivateIdentifierPropertyAccessExpression(target)) {
+                    wrapped = wrapPrivateIdentifierForDestructuringTarget(target);
                 }
-                else if (ts.isSpreadElement(node)) {
-                    return factory.updateSpreadElement(node, wrapped);
+                else if (shouldTransformSuperInStaticInitializers &&
+                    ts.isSuperProperty(target) &&
+                    currentStaticPropertyDeclarationOrStaticBlock &&
+                    currentClassLexicalEnvironment) {
+                    var classConstructor = currentClassLexicalEnvironment.classConstructor, superClassReference = currentClassLexicalEnvironment.superClassReference, facts = currentClassLexicalEnvironment.facts;
+                    if (facts & 1 /* ClassWasDecorated */) {
+                        wrapped = visitInvalidSuperProperty(target);
+                    }
+                    else if (classConstructor && superClassReference) {
+                        var name = ts.isElementAccessExpression(target) ? ts.visitNode(target.argumentExpression, visitor, ts.isExpression) :
+                            ts.isIdentifier(target.name) ? factory.createStringLiteralFromNode(target.name) :
+                                undefined;
+                        if (name) {
+                            var temp = factory.createTempVariable(/*recordTempVariable*/ undefined);
+                            wrapped = factory.createAssignmentTargetWrapper(temp, factory.createReflectSetCall(superClassReference, name, temp, classConstructor));
+                        }
+                    }
                 }
-                else {
-                    return wrapped;
+                if (wrapped) {
+                    if (ts.isAssignmentExpression(node)) {
+                        return factory.updateBinaryExpression(node, wrapped, node.operatorToken, ts.visitNode(node.right, visitor, ts.isExpression));
+                    }
+                    else if (ts.isSpreadElement(node)) {
+                        return factory.updateSpreadElement(node, wrapped);
+                    }
+                    else {
+                        return wrapped;
+                    }
                 }
             }
             return ts.visitNode(node, visitorDestructuringTarget);
         }
         function visitObjectAssignmentTarget(node) {
-            if (ts.isPropertyAssignment(node)) {
+            if (ts.isObjectBindingOrAssignmentElement(node) && !ts.isShorthandPropertyAssignment(node)) {
                 var target = ts.getTargetOfBindingOrAssignmentElement(node);
-                if (target && ts.isPrivateIdentifierPropertyAccessExpression(target)) {
-                    var initializer = ts.getInitializerOfBindingOrAssignmentElement(node);
-                    var wrapped = wrapPrivateIdentifierForDestructuringTarget(target);
-                    return factory.updatePropertyAssignment(node, ts.visitNode(node.name, visitor), initializer ? factory.createAssignment(wrapped, ts.visitNode(initializer, visitor)) : wrapped);
+                var wrapped = void 0;
+                if (target) {
+                    if (ts.isPrivateIdentifierPropertyAccessExpression(target)) {
+                        wrapped = wrapPrivateIdentifierForDestructuringTarget(target);
+                    }
+                    else if (shouldTransformSuperInStaticInitializers &&
+                        ts.isSuperProperty(target) &&
+                        currentStaticPropertyDeclarationOrStaticBlock &&
+                        currentClassLexicalEnvironment) {
+                        var classConstructor = currentClassLexicalEnvironment.classConstructor, superClassReference = currentClassLexicalEnvironment.superClassReference, facts = currentClassLexicalEnvironment.facts;
+                        if (facts & 1 /* ClassWasDecorated */) {
+                            wrapped = visitInvalidSuperProperty(target);
+                        }
+                        else if (classConstructor && superClassReference) {
+                            var name = ts.isElementAccessExpression(target) ? ts.visitNode(target.argumentExpression, visitor, ts.isExpression) :
+                                ts.isIdentifier(target.name) ? factory.createStringLiteralFromNode(target.name) :
+                                    undefined;
+                            if (name) {
+                                var temp = factory.createTempVariable(/*recordTempVariable*/ undefined);
+                                wrapped = factory.createAssignmentTargetWrapper(temp, factory.createReflectSetCall(superClassReference, name, temp, classConstructor));
+                            }
+                        }
+                    }
                 }
-                return factory.updatePropertyAssignment(node, ts.visitNode(node.name, visitor), ts.visitNode(node.initializer, visitorDestructuringTarget));
+                if (ts.isPropertyAssignment(node)) {
+                    var initializer = ts.getInitializerOfBindingOrAssignmentElement(node);
+                    return factory.updatePropertyAssignment(node, ts.visitNode(node.name, visitor, ts.isPropertyName), wrapped ?
+                        initializer ? factory.createAssignment(wrapped, ts.visitNode(initializer, visitor)) : wrapped :
+                        ts.visitNode(node.initializer, visitorDestructuringTarget, ts.isExpression));
+                }
+                if (ts.isSpreadAssignment(node)) {
+                    return factory.updateSpreadAssignment(node, wrapped || ts.visitNode(node.expression, visitorDestructuringTarget, ts.isExpression));
+                }
+                ts.Debug.assert(wrapped === undefined, "Should not have generated a wrapped target");
             }
             return ts.visitNode(node, visitor);
         }
         function visitAssignmentPattern(node) {
             if (ts.isArrayLiteralExpression(node)) {
                 // Transforms private names in destructuring assignment array bindings.
+                // Transforms SuperProperty assignments in destructuring assignment array bindings in static initializers.
                 //
                 // Source:
                 // ([ this.#myProp ] = [ "hello" ]);
@@ -89344,6 +91364,7 @@
             }
             else {
                 // Transforms private names in destructuring assignment object bindings.
+                // Transforms SuperProperty assignments in destructuring assignment object bindings in static initializers.
                 //
                 // Source:
                 // ({ stringProperty: this.#myProp } = { stringProperty: "hello" });
@@ -89457,34 +91478,34 @@
                 return node;
             }
             switch (node.kind) {
-                case 129 /* AsyncKeyword */:
+                case 130 /* AsyncKeyword */:
                     // ES2017 async modifier should be elided for targets < ES2017
                     return undefined;
-                case 214 /* AwaitExpression */:
+                case 216 /* AwaitExpression */:
                     return visitAwaitExpression(node);
-                case 166 /* MethodDeclaration */:
+                case 167 /* MethodDeclaration */:
                     return doWithContext(1 /* NonTopLevel */ | 2 /* HasLexicalThis */, visitMethodDeclaration, node);
-                case 252 /* FunctionDeclaration */:
+                case 254 /* FunctionDeclaration */:
                     return doWithContext(1 /* NonTopLevel */ | 2 /* HasLexicalThis */, visitFunctionDeclaration, node);
-                case 209 /* FunctionExpression */:
+                case 211 /* FunctionExpression */:
                     return doWithContext(1 /* NonTopLevel */ | 2 /* HasLexicalThis */, visitFunctionExpression, node);
-                case 210 /* ArrowFunction */:
+                case 212 /* ArrowFunction */:
                     return doWithContext(1 /* NonTopLevel */, visitArrowFunction, node);
-                case 202 /* PropertyAccessExpression */:
-                    if (capturedSuperProperties && ts.isPropertyAccessExpression(node) && node.expression.kind === 105 /* SuperKeyword */) {
+                case 204 /* PropertyAccessExpression */:
+                    if (capturedSuperProperties && ts.isPropertyAccessExpression(node) && node.expression.kind === 106 /* SuperKeyword */) {
                         capturedSuperProperties.add(node.name.escapedText);
                     }
                     return ts.visitEachChild(node, visitor, context);
-                case 203 /* ElementAccessExpression */:
-                    if (capturedSuperProperties && node.expression.kind === 105 /* SuperKeyword */) {
+                case 205 /* ElementAccessExpression */:
+                    if (capturedSuperProperties && node.expression.kind === 106 /* SuperKeyword */) {
                         hasSuperElementAccess = true;
                     }
                     return ts.visitEachChild(node, visitor, context);
-                case 168 /* GetAccessor */:
-                case 169 /* SetAccessor */:
-                case 167 /* Constructor */:
-                case 253 /* ClassDeclaration */:
-                case 222 /* ClassExpression */:
+                case 170 /* GetAccessor */:
+                case 171 /* SetAccessor */:
+                case 169 /* Constructor */:
+                case 255 /* ClassDeclaration */:
+                case 224 /* ClassExpression */:
                     return doWithContext(1 /* NonTopLevel */ | 2 /* HasLexicalThis */, visitDefault, node);
                 default:
                     return ts.visitEachChild(node, visitor, context);
@@ -89493,27 +91514,27 @@
         function asyncBodyVisitor(node) {
             if (ts.isNodeWithPossibleHoistedDeclaration(node)) {
                 switch (node.kind) {
-                    case 233 /* VariableStatement */:
+                    case 235 /* VariableStatement */:
                         return visitVariableStatementInAsyncBody(node);
-                    case 238 /* ForStatement */:
+                    case 240 /* ForStatement */:
                         return visitForStatementInAsyncBody(node);
-                    case 239 /* ForInStatement */:
+                    case 241 /* ForInStatement */:
                         return visitForInStatementInAsyncBody(node);
-                    case 240 /* ForOfStatement */:
+                    case 242 /* ForOfStatement */:
                         return visitForOfStatementInAsyncBody(node);
-                    case 288 /* CatchClause */:
+                    case 290 /* CatchClause */:
                         return visitCatchClauseInAsyncBody(node);
-                    case 231 /* Block */:
-                    case 245 /* SwitchStatement */:
-                    case 259 /* CaseBlock */:
-                    case 285 /* CaseClause */:
-                    case 286 /* DefaultClause */:
-                    case 248 /* TryStatement */:
-                    case 236 /* DoStatement */:
-                    case 237 /* WhileStatement */:
-                    case 235 /* IfStatement */:
-                    case 244 /* WithStatement */:
-                    case 246 /* LabeledStatement */:
+                    case 233 /* Block */:
+                    case 247 /* SwitchStatement */:
+                    case 261 /* CaseBlock */:
+                    case 287 /* CaseClause */:
+                    case 288 /* DefaultClause */:
+                    case 250 /* TryStatement */:
+                    case 238 /* DoStatement */:
+                    case 239 /* WhileStatement */:
+                    case 237 /* IfStatement */:
+                    case 246 /* WithStatement */:
+                    case 248 /* LabeledStatement */:
                         return ts.visitEachChild(node, asyncBodyVisitor, context);
                     default:
                         return ts.Debug.assertNever(node, "Unhandled node.");
@@ -89718,7 +91739,7 @@
             var original = ts.getOriginalNode(node, ts.isFunctionLike);
             var nodeType = original.type;
             var promiseConstructor = languageVersion < 2 /* ES2015 */ ? getPromiseConstructor(nodeType) : undefined;
-            var isArrowFunction = node.kind === 210 /* ArrowFunction */;
+            var isArrowFunction = node.kind === 212 /* ArrowFunction */;
             var hasLexicalArguments = (resolver.getNodeCheckFlags(node) & 8192 /* CaptureArguments */) !== 0;
             // An async function is emit as an outer function that calls an inner
             // generator function. To preserve lexical bindings, we pass the current
@@ -89809,17 +91830,17 @@
                 enabledSubstitutions |= 1 /* AsyncMethodsWithSuper */;
                 // We need to enable substitutions for call, property access, and element access
                 // if we need to rewrite super calls.
-                context.enableSubstitution(204 /* CallExpression */);
-                context.enableSubstitution(202 /* PropertyAccessExpression */);
-                context.enableSubstitution(203 /* ElementAccessExpression */);
+                context.enableSubstitution(206 /* CallExpression */);
+                context.enableSubstitution(204 /* PropertyAccessExpression */);
+                context.enableSubstitution(205 /* ElementAccessExpression */);
                 // We need to be notified when entering and exiting declarations that bind super.
-                context.enableEmitNotification(253 /* ClassDeclaration */);
-                context.enableEmitNotification(166 /* MethodDeclaration */);
-                context.enableEmitNotification(168 /* GetAccessor */);
-                context.enableEmitNotification(169 /* SetAccessor */);
-                context.enableEmitNotification(167 /* Constructor */);
+                context.enableEmitNotification(255 /* ClassDeclaration */);
+                context.enableEmitNotification(167 /* MethodDeclaration */);
+                context.enableEmitNotification(170 /* GetAccessor */);
+                context.enableEmitNotification(171 /* SetAccessor */);
+                context.enableEmitNotification(169 /* Constructor */);
                 // We need to be notified when entering the generated accessor arrow functions.
-                context.enableEmitNotification(233 /* VariableStatement */);
+                context.enableEmitNotification(235 /* VariableStatement */);
             }
         }
         /**
@@ -89867,23 +91888,23 @@
         }
         function substituteExpression(node) {
             switch (node.kind) {
-                case 202 /* PropertyAccessExpression */:
+                case 204 /* PropertyAccessExpression */:
                     return substitutePropertyAccessExpression(node);
-                case 203 /* ElementAccessExpression */:
+                case 205 /* ElementAccessExpression */:
                     return substituteElementAccessExpression(node);
-                case 204 /* CallExpression */:
+                case 206 /* CallExpression */:
                     return substituteCallExpression(node);
             }
             return node;
         }
         function substitutePropertyAccessExpression(node) {
-            if (node.expression.kind === 105 /* SuperKeyword */) {
+            if (node.expression.kind === 106 /* SuperKeyword */) {
                 return ts.setTextRange(factory.createPropertyAccessExpression(factory.createUniqueName("_super", 16 /* Optimistic */ | 32 /* FileLevel */), node.name), node);
             }
             return node;
         }
         function substituteElementAccessExpression(node) {
-            if (node.expression.kind === 105 /* SuperKeyword */) {
+            if (node.expression.kind === 106 /* SuperKeyword */) {
                 return createSuperElementAccessInAsyncMethod(node.argumentExpression, node);
             }
             return node;
@@ -89897,17 +91918,17 @@
                 return factory.createCallExpression(factory.createPropertyAccessExpression(argumentExpression, "call"), 
                 /*typeArguments*/ undefined, __spreadArray([
                     factory.createThis()
-                ], node.arguments));
+                ], node.arguments, true));
             }
             return node;
         }
         function isSuperContainer(node) {
             var kind = node.kind;
-            return kind === 253 /* ClassDeclaration */
-                || kind === 167 /* Constructor */
-                || kind === 166 /* MethodDeclaration */
-                || kind === 168 /* GetAccessor */
-                || kind === 169 /* SetAccessor */;
+            return kind === 255 /* ClassDeclaration */
+                || kind === 169 /* Constructor */
+                || kind === 167 /* MethodDeclaration */
+                || kind === 170 /* GetAccessor */
+                || kind === 171 /* SetAccessor */;
         }
         function createSuperElementAccessInAsyncMethod(argumentExpression, location) {
             if (enclosingSuperContainerFlags & 4096 /* AsyncMethodWithSuperBinding */) {
@@ -90064,7 +92085,7 @@
             return visitorWorker(node, /*expressionResultIsUnused*/ true);
         }
         function visitorNoAsyncModifier(node) {
-            if (node.kind === 129 /* AsyncKeyword */) {
+            if (node.kind === 130 /* AsyncKeyword */) {
                 return undefined;
             }
             return node;
@@ -90090,70 +92111,70 @@
                 return node;
             }
             switch (node.kind) {
-                case 214 /* AwaitExpression */:
+                case 216 /* AwaitExpression */:
                     return visitAwaitExpression(node);
-                case 220 /* YieldExpression */:
+                case 222 /* YieldExpression */:
                     return visitYieldExpression(node);
-                case 243 /* ReturnStatement */:
+                case 245 /* ReturnStatement */:
                     return visitReturnStatement(node);
-                case 246 /* LabeledStatement */:
+                case 248 /* LabeledStatement */:
                     return visitLabeledStatement(node);
-                case 201 /* ObjectLiteralExpression */:
+                case 203 /* ObjectLiteralExpression */:
                     return visitObjectLiteralExpression(node);
-                case 217 /* BinaryExpression */:
+                case 219 /* BinaryExpression */:
                     return visitBinaryExpression(node, expressionResultIsUnused);
-                case 341 /* CommaListExpression */:
+                case 346 /* CommaListExpression */:
                     return visitCommaListExpression(node, expressionResultIsUnused);
-                case 288 /* CatchClause */:
+                case 290 /* CatchClause */:
                     return visitCatchClause(node);
-                case 233 /* VariableStatement */:
+                case 235 /* VariableStatement */:
                     return visitVariableStatement(node);
-                case 250 /* VariableDeclaration */:
+                case 252 /* VariableDeclaration */:
                     return visitVariableDeclaration(node);
-                case 236 /* DoStatement */:
-                case 237 /* WhileStatement */:
-                case 239 /* ForInStatement */:
+                case 238 /* DoStatement */:
+                case 239 /* WhileStatement */:
+                case 241 /* ForInStatement */:
                     return doWithHierarchyFacts(visitDefault, node, 0 /* IterationStatementExcludes */, 2 /* IterationStatementIncludes */);
-                case 240 /* ForOfStatement */:
+                case 242 /* ForOfStatement */:
                     return visitForOfStatement(node, /*outermostLabeledStatement*/ undefined);
-                case 238 /* ForStatement */:
+                case 240 /* ForStatement */:
                     return doWithHierarchyFacts(visitForStatement, node, 0 /* IterationStatementExcludes */, 2 /* IterationStatementIncludes */);
-                case 213 /* VoidExpression */:
+                case 215 /* VoidExpression */:
                     return visitVoidExpression(node);
-                case 167 /* Constructor */:
+                case 169 /* Constructor */:
                     return doWithHierarchyFacts(visitConstructorDeclaration, node, 2 /* ClassOrFunctionExcludes */, 1 /* ClassOrFunctionIncludes */);
-                case 166 /* MethodDeclaration */:
+                case 167 /* MethodDeclaration */:
                     return doWithHierarchyFacts(visitMethodDeclaration, node, 2 /* ClassOrFunctionExcludes */, 1 /* ClassOrFunctionIncludes */);
-                case 168 /* GetAccessor */:
+                case 170 /* GetAccessor */:
                     return doWithHierarchyFacts(visitGetAccessorDeclaration, node, 2 /* ClassOrFunctionExcludes */, 1 /* ClassOrFunctionIncludes */);
-                case 169 /* SetAccessor */:
+                case 171 /* SetAccessor */:
                     return doWithHierarchyFacts(visitSetAccessorDeclaration, node, 2 /* ClassOrFunctionExcludes */, 1 /* ClassOrFunctionIncludes */);
-                case 252 /* FunctionDeclaration */:
+                case 254 /* FunctionDeclaration */:
                     return doWithHierarchyFacts(visitFunctionDeclaration, node, 2 /* ClassOrFunctionExcludes */, 1 /* ClassOrFunctionIncludes */);
-                case 209 /* FunctionExpression */:
+                case 211 /* FunctionExpression */:
                     return doWithHierarchyFacts(visitFunctionExpression, node, 2 /* ClassOrFunctionExcludes */, 1 /* ClassOrFunctionIncludes */);
-                case 210 /* ArrowFunction */:
+                case 212 /* ArrowFunction */:
                     return doWithHierarchyFacts(visitArrowFunction, node, 2 /* ArrowFunctionExcludes */, 0 /* ArrowFunctionIncludes */);
-                case 161 /* Parameter */:
+                case 162 /* Parameter */:
                     return visitParameter(node);
-                case 234 /* ExpressionStatement */:
+                case 236 /* ExpressionStatement */:
                     return visitExpressionStatement(node);
-                case 208 /* ParenthesizedExpression */:
+                case 210 /* ParenthesizedExpression */:
                     return visitParenthesizedExpression(node, expressionResultIsUnused);
-                case 206 /* TaggedTemplateExpression */:
+                case 208 /* TaggedTemplateExpression */:
                     return visitTaggedTemplateExpression(node);
-                case 202 /* PropertyAccessExpression */:
-                    if (capturedSuperProperties && ts.isPropertyAccessExpression(node) && node.expression.kind === 105 /* SuperKeyword */) {
+                case 204 /* PropertyAccessExpression */:
+                    if (capturedSuperProperties && ts.isPropertyAccessExpression(node) && node.expression.kind === 106 /* SuperKeyword */) {
                         capturedSuperProperties.add(node.name.escapedText);
                     }
                     return ts.visitEachChild(node, visitor, context);
-                case 203 /* ElementAccessExpression */:
-                    if (capturedSuperProperties && node.expression.kind === 105 /* SuperKeyword */) {
+                case 205 /* ElementAccessExpression */:
+                    if (capturedSuperProperties && node.expression.kind === 106 /* SuperKeyword */) {
                         hasSuperElementAccess = true;
                     }
                     return ts.visitEachChild(node, visitor, context);
-                case 253 /* ClassDeclaration */:
-                case 222 /* ClassExpression */:
+                case 255 /* ClassDeclaration */:
+                case 224 /* ClassExpression */:
                     return doWithHierarchyFacts(visitDefault, node, 2 /* ClassOrFunctionExcludes */, 1 /* ClassOrFunctionIncludes */);
                 default:
                     return ts.visitEachChild(node, visitor, context);
@@ -90189,7 +92210,7 @@
         function visitLabeledStatement(node) {
             if (enclosingFunctionFlags & 2 /* Async */) {
                 var statement = ts.unwrapInnermostStatementOfLabel(node);
-                if (statement.kind === 240 /* ForOfStatement */ && statement.awaitModifier) {
+                if (statement.kind === 242 /* ForOfStatement */ && statement.awaitModifier) {
                     return visitForOfStatement(statement, node);
                 }
                 return factory.restoreEnclosingLabel(ts.visitNode(statement, visitor, ts.isStatement, factory.liftToBlock), node);
@@ -90201,7 +92222,7 @@
             var objects = [];
             for (var _i = 0, elements_4 = elements; _i < elements_4.length; _i++) {
                 var e = elements_4[_i];
-                if (e.kind === 291 /* SpreadAssignment */) {
+                if (e.kind === 293 /* SpreadAssignment */) {
                     if (chunkObject) {
                         objects.push(factory.createObjectLiteralExpression(chunkObject));
                         chunkObject = undefined;
@@ -90210,7 +92231,7 @@
                     objects.push(ts.visitNode(target, visitor, ts.isExpression));
                 }
                 else {
-                    chunkObject = ts.append(chunkObject, e.kind === 289 /* PropertyAssignment */
+                    chunkObject = ts.append(chunkObject, e.kind === 291 /* PropertyAssignment */
                         ? factory.createPropertyAssignment(e.name, ts.visitNode(e.initializer, visitor, ts.isExpression))
                         : ts.visitNode(e, visitor, ts.isObjectLiteralElementLike));
                 }
@@ -90244,7 +92265,7 @@
                 // If we translate the above to `__assign({}, k, l)`, the `l` will evaluate before `k` is spread and we
                 // end up with `{ a: 1, b: 2, c: 3 }`
                 var objects = chunkObjectLiteralElements(node.properties);
-                if (objects.length && objects[0].kind !== 201 /* ObjectLiteralExpression */) {
+                if (objects.length && objects[0].kind !== 203 /* ObjectLiteralExpression */) {
                     objects.unshift(factory.createObjectLiteralExpression());
                 }
                 var expression = objects[0];
@@ -90333,7 +92354,7 @@
                 if (ts.some(visitedBindings)) {
                     block = factory.updateBlock(block, __spreadArray([
                         factory.createVariableStatement(/*modifiers*/ undefined, visitedBindings)
-                    ], block.statements));
+                    ], block.statements, true));
                 }
                 return factory.updateCatchClause(node, factory.updateVariableDeclaration(node.variableDeclaration, name, /*exclamationToken*/ undefined, /*type*/ undefined, /*initializer*/ undefined), block);
             }
@@ -90657,17 +92678,17 @@
                 enabledSubstitutions |= 1 /* AsyncMethodsWithSuper */;
                 // We need to enable substitutions for call, property access, and element access
                 // if we need to rewrite super calls.
-                context.enableSubstitution(204 /* CallExpression */);
-                context.enableSubstitution(202 /* PropertyAccessExpression */);
-                context.enableSubstitution(203 /* ElementAccessExpression */);
+                context.enableSubstitution(206 /* CallExpression */);
+                context.enableSubstitution(204 /* PropertyAccessExpression */);
+                context.enableSubstitution(205 /* ElementAccessExpression */);
                 // We need to be notified when entering and exiting declarations that bind super.
-                context.enableEmitNotification(253 /* ClassDeclaration */);
-                context.enableEmitNotification(166 /* MethodDeclaration */);
-                context.enableEmitNotification(168 /* GetAccessor */);
-                context.enableEmitNotification(169 /* SetAccessor */);
-                context.enableEmitNotification(167 /* Constructor */);
+                context.enableEmitNotification(255 /* ClassDeclaration */);
+                context.enableEmitNotification(167 /* MethodDeclaration */);
+                context.enableEmitNotification(170 /* GetAccessor */);
+                context.enableEmitNotification(171 /* SetAccessor */);
+                context.enableEmitNotification(169 /* Constructor */);
                 // We need to be notified when entering the generated accessor arrow functions.
-                context.enableEmitNotification(233 /* VariableStatement */);
+                context.enableEmitNotification(235 /* VariableStatement */);
             }
         }
         /**
@@ -90715,23 +92736,23 @@
         }
         function substituteExpression(node) {
             switch (node.kind) {
-                case 202 /* PropertyAccessExpression */:
+                case 204 /* PropertyAccessExpression */:
                     return substitutePropertyAccessExpression(node);
-                case 203 /* ElementAccessExpression */:
+                case 205 /* ElementAccessExpression */:
                     return substituteElementAccessExpression(node);
-                case 204 /* CallExpression */:
+                case 206 /* CallExpression */:
                     return substituteCallExpression(node);
             }
             return node;
         }
         function substitutePropertyAccessExpression(node) {
-            if (node.expression.kind === 105 /* SuperKeyword */) {
+            if (node.expression.kind === 106 /* SuperKeyword */) {
                 return ts.setTextRange(factory.createPropertyAccessExpression(factory.createUniqueName("_super", 16 /* Optimistic */ | 32 /* FileLevel */), node.name), node);
             }
             return node;
         }
         function substituteElementAccessExpression(node) {
-            if (node.expression.kind === 105 /* SuperKeyword */) {
+            if (node.expression.kind === 106 /* SuperKeyword */) {
                 return createSuperElementAccessInAsyncMethod(node.argumentExpression, node);
             }
             return node;
@@ -90745,17 +92766,17 @@
                 return factory.createCallExpression(factory.createPropertyAccessExpression(argumentExpression, "call"), 
                 /*typeArguments*/ undefined, __spreadArray([
                     factory.createThis()
-                ], node.arguments));
+                ], node.arguments, true));
             }
             return node;
         }
         function isSuperContainer(node) {
             var kind = node.kind;
-            return kind === 253 /* ClassDeclaration */
-                || kind === 167 /* Constructor */
-                || kind === 166 /* MethodDeclaration */
-                || kind === 168 /* GetAccessor */
-                || kind === 169 /* SetAccessor */;
+            return kind === 255 /* ClassDeclaration */
+                || kind === 169 /* Constructor */
+                || kind === 167 /* MethodDeclaration */
+                || kind === 170 /* GetAccessor */
+                || kind === 171 /* SetAccessor */;
         }
         function createSuperElementAccessInAsyncMethod(argumentExpression, location) {
             if (enclosingSuperContainerFlags & 4096 /* AsyncMethodWithSuperBinding */) {
@@ -90787,7 +92808,7 @@
                 return node;
             }
             switch (node.kind) {
-                case 288 /* CatchClause */:
+                case 290 /* CatchClause */:
                     return visitCatchClause(node);
                 default:
                     return ts.visitEachChild(node, visitor, context);
@@ -90819,25 +92840,25 @@
                 return node;
             }
             switch (node.kind) {
-                case 204 /* CallExpression */: {
+                case 206 /* CallExpression */: {
                     var updated = visitNonOptionalCallExpression(node, /*captureThisArg*/ false);
                     ts.Debug.assertNotNode(updated, ts.isSyntheticReference);
                     return updated;
                 }
-                case 202 /* PropertyAccessExpression */:
-                case 203 /* ElementAccessExpression */:
+                case 204 /* PropertyAccessExpression */:
+                case 205 /* ElementAccessExpression */:
                     if (ts.isOptionalChain(node)) {
                         var updated = visitOptionalExpression(node, /*captureThisArg*/ false, /*isDelete*/ false);
                         ts.Debug.assertNotNode(updated, ts.isSyntheticReference);
                         return updated;
                     }
                     return ts.visitEachChild(node, visitor, context);
-                case 217 /* BinaryExpression */:
+                case 219 /* BinaryExpression */:
                     if (node.operatorToken.kind === 60 /* QuestionQuestionToken */) {
                         return transformNullishCoalescingExpression(node);
                     }
                     return ts.visitEachChild(node, visitor, context);
-                case 211 /* DeleteExpression */:
+                case 213 /* DeleteExpression */:
                     return visitDeleteExpression(node);
                 default:
                     return ts.visitEachChild(node, visitor, context);
@@ -90879,7 +92900,7 @@
                     thisArg = expression;
                 }
             }
-            expression = node.kind === 202 /* PropertyAccessExpression */
+            expression = node.kind === 204 /* PropertyAccessExpression */
                 ? factory.updatePropertyAccessExpression(node, expression, ts.visitNode(node.name, visitor, ts.isIdentifier))
                 : factory.updateElementAccessExpression(node, expression, ts.visitNode(node.argumentExpression, visitor, ts.isExpression));
             return thisArg ? factory.createSyntheticReferenceExpression(expression, thisArg) : expression;
@@ -90902,10 +92923,10 @@
         }
         function visitNonOptionalExpression(node, captureThisArg, isDelete) {
             switch (node.kind) {
-                case 208 /* ParenthesizedExpression */: return visitNonOptionalParenthesizedExpression(node, captureThisArg, isDelete);
-                case 202 /* PropertyAccessExpression */:
-                case 203 /* ElementAccessExpression */: return visitNonOptionalPropertyOrElementAccessExpression(node, captureThisArg, isDelete);
-                case 204 /* CallExpression */: return visitNonOptionalCallExpression(node, captureThisArg);
+                case 210 /* ParenthesizedExpression */: return visitNonOptionalParenthesizedExpression(node, captureThisArg, isDelete);
+                case 204 /* PropertyAccessExpression */:
+                case 205 /* ElementAccessExpression */: return visitNonOptionalPropertyOrElementAccessExpression(node, captureThisArg, isDelete);
+                case 206 /* CallExpression */: return visitNonOptionalCallExpression(node, captureThisArg);
                 default: return ts.visitNode(node, visitor, ts.isExpression);
             }
         }
@@ -90924,8 +92945,8 @@
             for (var i = 0; i < chain.length; i++) {
                 var segment = chain[i];
                 switch (segment.kind) {
-                    case 202 /* PropertyAccessExpression */:
-                    case 203 /* ElementAccessExpression */:
+                    case 204 /* PropertyAccessExpression */:
+                    case 205 /* ElementAccessExpression */:
                         if (i === chain.length - 1 && captureThisArg) {
                             if (!ts.isSimpleCopiableExpression(rightExpression)) {
                                 thisArg = factory.createTempVariable(hoistVariableDeclaration);
@@ -90935,13 +92956,13 @@
                                 thisArg = rightExpression;
                             }
                         }
-                        rightExpression = segment.kind === 202 /* PropertyAccessExpression */
+                        rightExpression = segment.kind === 204 /* PropertyAccessExpression */
                             ? factory.createPropertyAccessExpression(rightExpression, ts.visitNode(segment.name, visitor, ts.isIdentifier))
                             : factory.createElementAccessExpression(rightExpression, ts.visitNode(segment.argumentExpression, visitor, ts.isExpression));
                         break;
-                    case 204 /* CallExpression */:
+                    case 206 /* CallExpression */:
                         if (i === 0 && leftThisArg) {
-                            rightExpression = factory.createFunctionCallCall(rightExpression, leftThisArg.kind === 105 /* SuperKeyword */ ? factory.createThis() : leftThisArg, ts.visitNodes(segment.arguments, visitor, ts.isExpression));
+                            rightExpression = factory.createFunctionCallCall(rightExpression, leftThisArg.kind === 106 /* SuperKeyword */ ? factory.createThis() : leftThisArg, ts.visitNodes(segment.arguments, visitor, ts.isExpression));
                         }
                         else {
                             rightExpression = factory.createCallExpression(rightExpression, 
@@ -90996,7 +93017,7 @@
                 return node;
             }
             switch (node.kind) {
-                case 217 /* BinaryExpression */:
+                case 219 /* BinaryExpression */:
                     var binaryExpression = node;
                     if (ts.isLogicalOrCoalescingAssignmentExpression(binaryExpression)) {
                         return transformLogicalAssignment(binaryExpression);
@@ -91165,13 +93186,13 @@
         }
         function visitorWorker(node) {
             switch (node.kind) {
-                case 274 /* JsxElement */:
+                case 276 /* JsxElement */:
                     return visitJsxElement(node, /*isChild*/ false);
-                case 275 /* JsxSelfClosingElement */:
+                case 277 /* JsxSelfClosingElement */:
                     return visitJsxSelfClosingElement(node, /*isChild*/ false);
-                case 278 /* JsxFragment */:
+                case 280 /* JsxFragment */:
                     return visitJsxFragment(node, /*isChild*/ false);
-                case 284 /* JsxExpression */:
+                case 286 /* JsxExpression */:
                     return visitJsxExpression(node);
                 default:
                     return ts.visitEachChild(node, visitor, context);
@@ -91181,13 +93202,13 @@
             switch (node.kind) {
                 case 11 /* JsxText */:
                     return visitJsxText(node);
-                case 284 /* JsxExpression */:
+                case 286 /* JsxExpression */:
                     return visitJsxExpression(node);
-                case 274 /* JsxElement */:
+                case 276 /* JsxElement */:
                     return visitJsxElement(node, /*isChild*/ true);
-                case 275 /* JsxSelfClosingElement */:
+                case 277 /* JsxSelfClosingElement */:
                     return visitJsxSelfClosingElement(node, /*isChild*/ true);
-                case 278 /* JsxFragment */:
+                case 280 /* JsxFragment */:
                     return visitJsxFragment(node, /*isChild*/ true);
                 default:
                     return ts.Debug.failBadSyntaxKind(node);
@@ -91227,9 +93248,9 @@
         function convertJsxChildrenToChildrenPropObject(children) {
             var nonWhitespaceChildren = ts.getSemanticJsxChildren(children);
             if (ts.length(nonWhitespaceChildren) === 1) {
-                var result_14 = transformJsxChildToExpression(nonWhitespaceChildren[0]);
-                return result_14 && factory.createObjectLiteralExpression([
-                    factory.createPropertyAssignment("children", result_14)
+                var result_13 = transformJsxChildToExpression(nonWhitespaceChildren[0]);
+                return result_13 && factory.createObjectLiteralExpression([
+                    factory.createPropertyAssignment("children", result_13)
                 ]);
             }
             var result = ts.mapDefined(children, transformJsxChildToExpression);
@@ -91381,7 +93402,7 @@
                 var literal = factory.createStringLiteral(tryDecodeEntities(node.text) || node.text, singleQuote);
                 return ts.setTextRange(literal, node);
             }
-            else if (node.kind === 284 /* JsxExpression */) {
+            else if (node.kind === 286 /* JsxExpression */) {
                 if (node.expression === undefined) {
                     return factory.createTrue();
                 }
@@ -91475,7 +93496,7 @@
             return decoded === text ? undefined : decoded;
         }
         function getTagName(node) {
-            if (node.kind === 274 /* JsxElement */) {
+            if (node.kind === 276 /* JsxElement */) {
                 return getTagName(node.openingElement);
             }
             else {
@@ -91781,7 +93802,7 @@
                 return node;
             }
             switch (node.kind) {
-                case 217 /* BinaryExpression */:
+                case 219 /* BinaryExpression */:
                     return visitBinaryExpression(node);
                 default:
                     return ts.visitEachChild(node, visitor, context);
@@ -91789,7 +93810,7 @@
         }
         function visitBinaryExpression(node) {
             switch (node.operatorToken.kind) {
-                case 66 /* AsteriskAsteriskEqualsToken */:
+                case 67 /* AsteriskAsteriskEqualsToken */:
                     return visitExponentiationAssignmentExpression(node);
                 case 42 /* AsteriskAsteriskToken */:
                     return visitExponentiationExpression(node);
@@ -91878,12 +93899,13 @@
         HierarchyFacts[HierarchyFacts["ForStatement"] = 2048] = "ForStatement";
         HierarchyFacts[HierarchyFacts["ForInOrForOfStatement"] = 4096] = "ForInOrForOfStatement";
         HierarchyFacts[HierarchyFacts["ConstructorWithCapturedSuper"] = 8192] = "ConstructorWithCapturedSuper";
+        HierarchyFacts[HierarchyFacts["StaticInitializer"] = 16384] = "StaticInitializer";
         // NOTE: do not add more ancestor flags without also updating AncestorFactsMask below.
         // NOTE: when adding a new ancestor flag, be sure to update the subtree flags below.
         //
         // Ancestor masks
         //
-        HierarchyFacts[HierarchyFacts["AncestorFactsMask"] = 16383] = "AncestorFactsMask";
+        HierarchyFacts[HierarchyFacts["AncestorFactsMask"] = 32767] = "AncestorFactsMask";
         // We are always in *some* kind of block scope, but only specific block-scope containers are
         // top-level or Blocks.
         HierarchyFacts[HierarchyFacts["BlockScopeIncludes"] = 0] = "BlockScopeIncludes";
@@ -91893,16 +93915,16 @@
         HierarchyFacts[HierarchyFacts["SourceFileExcludes"] = 8064] = "SourceFileExcludes";
         // Functions, methods, and accessors are both new lexical scopes and new block scopes.
         HierarchyFacts[HierarchyFacts["FunctionIncludes"] = 65] = "FunctionIncludes";
-        HierarchyFacts[HierarchyFacts["FunctionExcludes"] = 16286] = "FunctionExcludes";
+        HierarchyFacts[HierarchyFacts["FunctionExcludes"] = 32670] = "FunctionExcludes";
         HierarchyFacts[HierarchyFacts["AsyncFunctionBodyIncludes"] = 69] = "AsyncFunctionBodyIncludes";
-        HierarchyFacts[HierarchyFacts["AsyncFunctionBodyExcludes"] = 16278] = "AsyncFunctionBodyExcludes";
+        HierarchyFacts[HierarchyFacts["AsyncFunctionBodyExcludes"] = 32662] = "AsyncFunctionBodyExcludes";
         // Arrow functions are lexically scoped to their container, but are new block scopes.
         HierarchyFacts[HierarchyFacts["ArrowFunctionIncludes"] = 66] = "ArrowFunctionIncludes";
         HierarchyFacts[HierarchyFacts["ArrowFunctionExcludes"] = 15232] = "ArrowFunctionExcludes";
         // Constructors are both new lexical scopes and new block scopes. Constructors are also
         // always considered non-static members of a class.
         HierarchyFacts[HierarchyFacts["ConstructorIncludes"] = 73] = "ConstructorIncludes";
-        HierarchyFacts[HierarchyFacts["ConstructorExcludes"] = 16278] = "ConstructorExcludes";
+        HierarchyFacts[HierarchyFacts["ConstructorExcludes"] = 32662] = "ConstructorExcludes";
         // 'do' and 'while' statements are not block scopes. We track that the subtree is contained
         // within an IterationStatement to indicate whether the embedded statement is an
         // IterationStatementBlock.
@@ -91920,18 +93942,29 @@
         HierarchyFacts[HierarchyFacts["BlockExcludes"] = 6976] = "BlockExcludes";
         HierarchyFacts[HierarchyFacts["IterationStatementBlockIncludes"] = 512] = "IterationStatementBlockIncludes";
         HierarchyFacts[HierarchyFacts["IterationStatementBlockExcludes"] = 7104] = "IterationStatementBlockExcludes";
+        HierarchyFacts[HierarchyFacts["StaticInitializerIncludes"] = 16449] = "StaticInitializerIncludes";
+        HierarchyFacts[HierarchyFacts["StaticInitializerExcludes"] = 32670] = "StaticInitializerExcludes";
         //
         // Subtree facts
         //
-        HierarchyFacts[HierarchyFacts["NewTarget"] = 16384] = "NewTarget";
-        HierarchyFacts[HierarchyFacts["CapturedLexicalThis"] = 32768] = "CapturedLexicalThis";
+        HierarchyFacts[HierarchyFacts["NewTarget"] = 32768] = "NewTarget";
+        HierarchyFacts[HierarchyFacts["CapturedLexicalThis"] = 65536] = "CapturedLexicalThis";
         //
         // Subtree masks
         //
-        HierarchyFacts[HierarchyFacts["SubtreeFactsMask"] = -16384] = "SubtreeFactsMask";
+        HierarchyFacts[HierarchyFacts["SubtreeFactsMask"] = -32768] = "SubtreeFactsMask";
         HierarchyFacts[HierarchyFacts["ArrowFunctionSubtreeExcludes"] = 0] = "ArrowFunctionSubtreeExcludes";
-        HierarchyFacts[HierarchyFacts["FunctionSubtreeExcludes"] = 49152] = "FunctionSubtreeExcludes";
+        HierarchyFacts[HierarchyFacts["FunctionSubtreeExcludes"] = 98304] = "FunctionSubtreeExcludes";
     })(HierarchyFacts || (HierarchyFacts = {}));
+    var SpreadSegmentKind;
+    (function (SpreadSegmentKind) {
+        SpreadSegmentKind[SpreadSegmentKind["None"] = 0] = "None";
+        SpreadSegmentKind[SpreadSegmentKind["UnpackedSpread"] = 1] = "UnpackedSpread";
+        SpreadSegmentKind[SpreadSegmentKind["PackedSpread"] = 2] = "PackedSpread";
+    })(SpreadSegmentKind || (SpreadSegmentKind = {}));
+    function createSpreadSegment(kind, expression) {
+        return { kind: kind, expression: expression };
+    }
     function transformES2015(context) {
         var factory = context.factory, emitHelpers = context.getEmitHelperFactory, startLexicalEnvironment = context.startLexicalEnvironment, resumeLexicalEnvironment = context.resumeLexicalEnvironment, endLexicalEnvironment = context.endLexicalEnvironment, hoistVariableDeclaration = context.hoistVariableDeclaration;
         var compilerOptions = context.getCompilerOptions();
@@ -91979,7 +94012,7 @@
          */
         function enterSubtree(excludeFacts, includeFacts) {
             var ancestorFacts = hierarchyFacts;
-            hierarchyFacts = (hierarchyFacts & ~excludeFacts | includeFacts) & 16383 /* AncestorFactsMask */;
+            hierarchyFacts = (hierarchyFacts & ~excludeFacts | includeFacts) & 32767 /* AncestorFactsMask */;
             return ancestorFacts;
         }
         /**
@@ -91990,11 +94023,11 @@
          * @param includeFacts The new `HierarchyFacts` of the subtree that should be propagated.
          */
         function exitSubtree(ancestorFacts, excludeFacts, includeFacts) {
-            hierarchyFacts = (hierarchyFacts & ~excludeFacts | includeFacts) & -16384 /* SubtreeFactsMask */ | ancestorFacts;
+            hierarchyFacts = (hierarchyFacts & ~excludeFacts | includeFacts) & -32768 /* SubtreeFactsMask */ | ancestorFacts;
         }
         function isReturnVoidStatementInConstructorWithCapturedSuper(node) {
             return (hierarchyFacts & 8192 /* ConstructorWithCapturedSuper */) !== 0
-                && node.kind === 243 /* ReturnStatement */
+                && node.kind === 245 /* ReturnStatement */
                 && !node.expression;
         }
         function isOrMayContainReturnCompletion(node) {
@@ -92025,75 +94058,88 @@
         function visitorWithUnusedExpressionResult(node) {
             return shouldVisitNode(node) ? visitorWorker(node, /*expressionResultIsUnused*/ true) : node;
         }
+        function classWrapperStatementVisitor(node) {
+            if (shouldVisitNode(node)) {
+                var original = ts.getOriginalNode(node);
+                if (ts.isPropertyDeclaration(original) && ts.hasStaticModifier(original)) {
+                    var ancestorFacts = enterSubtree(32670 /* StaticInitializerExcludes */, 16449 /* StaticInitializerIncludes */);
+                    var result = visitorWorker(node, /*expressionResultIsUnused*/ false);
+                    exitSubtree(ancestorFacts, 98304 /* FunctionSubtreeExcludes */, 0 /* None */);
+                    return result;
+                }
+                return visitorWorker(node, /*expressionResultIsUnused*/ false);
+            }
+            return node;
+        }
         function callExpressionVisitor(node) {
-            if (node.kind === 105 /* SuperKeyword */) {
+            if (node.kind === 106 /* SuperKeyword */) {
                 return visitSuperKeyword(/*isExpressionOfCall*/ true);
             }
             return visitor(node);
         }
         function visitorWorker(node, expressionResultIsUnused) {
             switch (node.kind) {
-                case 123 /* StaticKeyword */:
+                case 124 /* StaticKeyword */:
                     return undefined; // elide static keyword
-                case 253 /* ClassDeclaration */:
+                case 255 /* ClassDeclaration */:
                     return visitClassDeclaration(node);
-                case 222 /* ClassExpression */:
+                case 224 /* ClassExpression */:
                     return visitClassExpression(node);
-                case 161 /* Parameter */:
+                case 162 /* Parameter */:
                     return visitParameter(node);
-                case 252 /* FunctionDeclaration */:
+                case 254 /* FunctionDeclaration */:
                     return visitFunctionDeclaration(node);
-                case 210 /* ArrowFunction */:
+                case 212 /* ArrowFunction */:
                     return visitArrowFunction(node);
-                case 209 /* FunctionExpression */:
+                case 211 /* FunctionExpression */:
                     return visitFunctionExpression(node);
-                case 250 /* VariableDeclaration */:
+                case 252 /* VariableDeclaration */:
                     return visitVariableDeclaration(node);
-                case 78 /* Identifier */:
+                case 79 /* Identifier */:
                     return visitIdentifier(node);
-                case 251 /* VariableDeclarationList */:
+                case 253 /* VariableDeclarationList */:
                     return visitVariableDeclarationList(node);
-                case 245 /* SwitchStatement */:
+                case 247 /* SwitchStatement */:
                     return visitSwitchStatement(node);
-                case 259 /* CaseBlock */:
+                case 261 /* CaseBlock */:
                     return visitCaseBlock(node);
-                case 231 /* Block */:
+                case 233 /* Block */:
                     return visitBlock(node, /*isFunctionBody*/ false);
-                case 242 /* BreakStatement */:
-                case 241 /* ContinueStatement */:
+                case 244 /* BreakStatement */:
+                case 243 /* ContinueStatement */:
                     return visitBreakOrContinueStatement(node);
-                case 246 /* LabeledStatement */:
+                case 248 /* LabeledStatement */:
                     return visitLabeledStatement(node);
-                case 236 /* DoStatement */:
-                case 237 /* WhileStatement */:
+                case 238 /* DoStatement */:
+                case 239 /* WhileStatement */:
                     return visitDoOrWhileStatement(node, /*outermostLabeledStatement*/ undefined);
-                case 238 /* ForStatement */:
+                case 240 /* ForStatement */:
                     return visitForStatement(node, /*outermostLabeledStatement*/ undefined);
-                case 239 /* ForInStatement */:
+                case 241 /* ForInStatement */:
                     return visitForInStatement(node, /*outermostLabeledStatement*/ undefined);
-                case 240 /* ForOfStatement */:
+                case 242 /* ForOfStatement */:
                     return visitForOfStatement(node, /*outermostLabeledStatement*/ undefined);
-                case 234 /* ExpressionStatement */:
+                case 236 /* ExpressionStatement */:
                     return visitExpressionStatement(node);
-                case 201 /* ObjectLiteralExpression */:
+                case 203 /* ObjectLiteralExpression */:
                     return visitObjectLiteralExpression(node);
-                case 288 /* CatchClause */:
+                case 290 /* CatchClause */:
                     return visitCatchClause(node);
-                case 290 /* ShorthandPropertyAssignment */:
+                case 292 /* ShorthandPropertyAssignment */:
                     return visitShorthandPropertyAssignment(node);
-                case 159 /* ComputedPropertyName */:
+                case 160 /* ComputedPropertyName */:
                     return visitComputedPropertyName(node);
-                case 200 /* ArrayLiteralExpression */:
+                case 202 /* ArrayLiteralExpression */:
                     return visitArrayLiteralExpression(node);
-                case 204 /* CallExpression */:
+                case 206 /* CallExpression */:
                     return visitCallExpression(node);
-                case 205 /* NewExpression */:
+                case 207 /* NewExpression */:
                     return visitNewExpression(node);
-                case 208 /* ParenthesizedExpression */:
+                case 210 /* ParenthesizedExpression */:
                     return visitParenthesizedExpression(node, expressionResultIsUnused);
-                case 217 /* BinaryExpression */:
+                case 219 /* BinaryExpression */:
                     return visitBinaryExpression(node, expressionResultIsUnused);
-                case 341 /* CommaListExpression */:
+                case 346 /* CommaListExpression */:
                     return visitCommaListExpression(node, expressionResultIsUnused);
                 case 14 /* NoSubstitutionTemplateLiteral */:
                 case 15 /* TemplateHead */:
@@ -92104,30 +94150,30 @@
                     return visitStringLiteral(node);
                 case 8 /* NumericLiteral */:
                     return visitNumericLiteral(node);
-                case 206 /* TaggedTemplateExpression */:
+                case 208 /* TaggedTemplateExpression */:
                     return visitTaggedTemplateExpression(node);
-                case 219 /* TemplateExpression */:
+                case 221 /* TemplateExpression */:
                     return visitTemplateExpression(node);
-                case 220 /* YieldExpression */:
+                case 222 /* YieldExpression */:
                     return visitYieldExpression(node);
-                case 221 /* SpreadElement */:
+                case 223 /* SpreadElement */:
                     return visitSpreadElement(node);
-                case 105 /* SuperKeyword */:
+                case 106 /* SuperKeyword */:
                     return visitSuperKeyword(/*isExpressionOfCall*/ false);
-                case 107 /* ThisKeyword */:
+                case 108 /* ThisKeyword */:
                     return visitThisKeyword(node);
-                case 227 /* MetaProperty */:
+                case 229 /* MetaProperty */:
                     return visitMetaProperty(node);
-                case 166 /* MethodDeclaration */:
+                case 167 /* MethodDeclaration */:
                     return visitMethodDeclaration(node);
-                case 168 /* GetAccessor */:
-                case 169 /* SetAccessor */:
+                case 170 /* GetAccessor */:
+                case 171 /* SetAccessor */:
                     return visitAccessorDeclaration(node);
-                case 233 /* VariableStatement */:
+                case 235 /* VariableStatement */:
                     return visitVariableStatement(node);
-                case 243 /* ReturnStatement */:
+                case 245 /* ReturnStatement */:
                     return visitReturnStatement(node);
-                case 213 /* VoidExpression */:
+                case 215 /* VoidExpression */:
                     return visitVoidExpression(node);
                 default:
                     return ts.visitEachChild(node, visitor, context);
@@ -92186,8 +94232,8 @@
             return ts.visitEachChild(node, visitor, context);
         }
         function visitThisKeyword(node) {
-            if (hierarchyFacts & 2 /* ArrowFunction */) {
-                hierarchyFacts |= 32768 /* CapturedLexicalThis */;
+            if (hierarchyFacts & 2 /* ArrowFunction */ && !(hierarchyFacts & 16384 /* StaticInitializer */)) {
+                hierarchyFacts |= 65536 /* CapturedLexicalThis */;
             }
             if (convertedLoopState) {
                 if (hierarchyFacts & 2 /* ArrowFunction */) {
@@ -92217,14 +94263,14 @@
                 // it is possible if either
                 //   - break/continue is labeled and label is located inside the converted loop
                 //   - break/continue is non-labeled and located in non-converted loop/switch statement
-                var jump = node.kind === 242 /* BreakStatement */ ? 2 /* Break */ : 4 /* Continue */;
+                var jump = node.kind === 244 /* BreakStatement */ ? 2 /* Break */ : 4 /* Continue */;
                 var canUseBreakOrContinue = (node.label && convertedLoopState.labels && convertedLoopState.labels.get(ts.idText(node.label))) ||
                     (!node.label && (convertedLoopState.allowedNonLabeledJumps & jump));
                 if (!canUseBreakOrContinue) {
                     var labelMarker = void 0;
                     var label = node.label;
                     if (!label) {
-                        if (node.kind === 242 /* BreakStatement */) {
+                        if (node.kind === 244 /* BreakStatement */) {
                             convertedLoopState.nonLocalJumps |= 2 /* Break */;
                             labelMarker = "break";
                         }
@@ -92235,7 +94281,7 @@
                         }
                     }
                     else {
-                        if (node.kind === 242 /* BreakStatement */) {
+                        if (node.kind === 244 /* BreakStatement */) {
                             labelMarker = "break-" + label.escapedText;
                             setLabeledJump(convertedLoopState, /*isBreak*/ true, ts.idText(label), labelMarker);
                         }
@@ -92432,7 +94478,7 @@
         function addConstructor(statements, node, name, extendsClauseElement) {
             var savedConvertedLoopState = convertedLoopState;
             convertedLoopState = undefined;
-            var ancestorFacts = enterSubtree(16278 /* ConstructorExcludes */, 73 /* ConstructorIncludes */);
+            var ancestorFacts = enterSubtree(32662 /* ConstructorExcludes */, 73 /* ConstructorIncludes */);
             var constructor = ts.getFirstConstructorWithBody(node);
             var hasSynthesizedSuper = hasSynthesizedDefaultSuperCall(constructor, extendsClauseElement !== undefined);
             var constructorFunction = factory.createFunctionDeclaration(
@@ -92446,7 +94492,7 @@
                 ts.setEmitFlags(constructorFunction, 8 /* CapturesThis */);
             }
             statements.push(constructorFunction);
-            exitSubtree(ancestorFacts, 49152 /* FunctionSubtreeExcludes */, 0 /* None */);
+            exitSubtree(ancestorFacts, 98304 /* FunctionSubtreeExcludes */, 0 /* None */);
             convertedLoopState = savedConvertedLoopState;
         }
         /**
@@ -92495,7 +94541,7 @@
         function transformConstructorBody(constructor, node, extendsClauseElement, hasSynthesizedSuper) {
             // determine whether the class is known syntactically to be a derived class (e.g. a
             // class that extends a value that is not syntactically known to be `null`).
-            var isDerivedClass = !!extendsClauseElement && ts.skipOuterExpressions(extendsClauseElement.expression).kind !== 103 /* NullKeyword */;
+            var isDerivedClass = !!extendsClauseElement && ts.skipOuterExpressions(extendsClauseElement.expression).kind !== 104 /* NullKeyword */;
             // When the subclass does not have a constructor, we synthesize a *default* constructor using the following
             // representation:
             //
@@ -92633,11 +94679,11 @@
          */
         function isSufficientlyCoveredByReturnStatements(statement) {
             // A return statement is considered covered.
-            if (statement.kind === 243 /* ReturnStatement */) {
+            if (statement.kind === 245 /* ReturnStatement */) {
                 return true;
             }
             // An if-statement with two covered branches is covered.
-            else if (statement.kind === 235 /* IfStatement */) {
+            else if (statement.kind === 237 /* IfStatement */) {
                 var ifStatement = statement;
                 if (ifStatement.elseStatement) {
                     return isSufficientlyCoveredByReturnStatements(ifStatement.thenStatement) &&
@@ -92645,7 +94691,7 @@
                 }
             }
             // A block is covered if it has a last statement which is covered.
-            else if (statement.kind === 231 /* Block */) {
+            else if (statement.kind === 233 /* Block */) {
                 var lastStatement = ts.lastOrUndefined(statement.statements);
                 if (lastStatement && isSufficientlyCoveredByReturnStatements(lastStatement)) {
                     return true;
@@ -92803,10 +94849,10 @@
             }
             // `declarationName` is the name of the local declaration for the parameter.
             // TODO(rbuckton): Does this need to be parented?
-            var declarationName = parameter.name.kind === 78 /* Identifier */ ? ts.setParent(ts.setTextRange(factory.cloneNode(parameter.name), parameter.name), parameter.name.parent) : factory.createTempVariable(/*recordTempVariable*/ undefined);
+            var declarationName = parameter.name.kind === 79 /* Identifier */ ? ts.setParent(ts.setTextRange(factory.cloneNode(parameter.name), parameter.name), parameter.name.parent) : factory.createTempVariable(/*recordTempVariable*/ undefined);
             ts.setEmitFlags(declarationName, 48 /* NoSourceMap */);
             // `expressionName` is the name of the parameter used in expressions.
-            var expressionName = parameter.name.kind === 78 /* Identifier */ ? factory.cloneNode(parameter.name) : declarationName;
+            var expressionName = parameter.name.kind === 79 /* Identifier */ ? factory.cloneNode(parameter.name) : declarationName;
             var restIndex = node.parameters.length - 1;
             var temp = factory.createLoopVariable();
             // var param = [];
@@ -92831,7 +94877,7 @@
             ts.setEmitFlags(forStatement, 1048576 /* CustomPrologue */);
             ts.startOnNewLine(forStatement);
             prologueStatements.push(forStatement);
-            if (parameter.name.kind !== 78 /* Identifier */) {
+            if (parameter.name.kind !== 79 /* Identifier */) {
                 // do the actual destructuring of the rest parameter if necessary
                 prologueStatements.push(ts.setEmitFlags(ts.setTextRange(factory.createVariableStatement(
                 /*modifiers*/ undefined, factory.createVariableDeclarationList(ts.flattenDestructuringBinding(parameter, visitor, context, 0 /* All */, expressionName))), parameter), 1048576 /* CustomPrologue */));
@@ -92847,7 +94893,7 @@
          * @param node A node.
          */
         function insertCaptureThisForNodeIfNeeded(statements, node) {
-            if (hierarchyFacts & 32768 /* CapturedLexicalThis */ && node.kind !== 210 /* ArrowFunction */) {
+            if (hierarchyFacts & 65536 /* CapturedLexicalThis */ && node.kind !== 212 /* ArrowFunction */) {
                 insertCaptureThisForNode(statements, node, factory.createThis());
                 return true;
             }
@@ -92866,28 +94912,28 @@
             ts.insertStatementAfterCustomPrologue(statements, captureThisStatement);
         }
         function insertCaptureNewTargetIfNeeded(statements, node, copyOnWrite) {
-            if (hierarchyFacts & 16384 /* NewTarget */) {
+            if (hierarchyFacts & 32768 /* NewTarget */) {
                 var newTarget = void 0;
                 switch (node.kind) {
-                    case 210 /* ArrowFunction */:
+                    case 212 /* ArrowFunction */:
                         return statements;
-                    case 166 /* MethodDeclaration */:
-                    case 168 /* GetAccessor */:
-                    case 169 /* SetAccessor */:
+                    case 167 /* MethodDeclaration */:
+                    case 170 /* GetAccessor */:
+                    case 171 /* SetAccessor */:
                         // Methods and accessors cannot be constructors, so 'new.target' will
                         // always return 'undefined'.
                         newTarget = factory.createVoidZero();
                         break;
-                    case 167 /* Constructor */:
+                    case 169 /* Constructor */:
                         // Class constructors can only be called with `new`, so `this.constructor`
                         // should be relatively safe to use.
                         newTarget = factory.createPropertyAccessExpression(ts.setEmitFlags(factory.createThis(), 4 /* NoSubstitution */), "constructor");
                         break;
-                    case 252 /* FunctionDeclaration */:
-                    case 209 /* FunctionExpression */:
+                    case 254 /* FunctionDeclaration */:
+                    case 211 /* FunctionExpression */:
                         // Functions can be called or constructed, and may have a `this` due to
                         // being a member or when calling an imported function via `other_1.f()`.
-                        newTarget = factory.createConditionalExpression(factory.createLogicalAnd(ts.setEmitFlags(factory.createThis(), 4 /* NoSubstitution */), factory.createBinaryExpression(ts.setEmitFlags(factory.createThis(), 4 /* NoSubstitution */), 101 /* InstanceOfKeyword */, factory.getLocalName(node))), 
+                        newTarget = factory.createConditionalExpression(factory.createLogicalAnd(ts.setEmitFlags(factory.createThis(), 4 /* NoSubstitution */), factory.createBinaryExpression(ts.setEmitFlags(factory.createThis(), 4 /* NoSubstitution */), 102 /* InstanceOfKeyword */, factory.getLocalName(node))), 
                         /*questionToken*/ undefined, factory.createPropertyAccessExpression(ts.setEmitFlags(factory.createThis(), 4 /* NoSubstitution */), "constructor"), 
                         /*colonToken*/ undefined, factory.createVoidZero());
                         break;
@@ -92919,20 +94965,21 @@
             for (var _i = 0, _a = node.members; _i < _a.length; _i++) {
                 var member = _a[_i];
                 switch (member.kind) {
-                    case 230 /* SemicolonClassElement */:
+                    case 232 /* SemicolonClassElement */:
                         statements.push(transformSemicolonClassElementToStatement(member));
                         break;
-                    case 166 /* MethodDeclaration */:
+                    case 167 /* MethodDeclaration */:
                         statements.push(transformClassMethodDeclarationToStatement(getClassMemberPrefix(node, member), member, node));
                         break;
-                    case 168 /* GetAccessor */:
-                    case 169 /* SetAccessor */:
+                    case 170 /* GetAccessor */:
+                    case 171 /* SetAccessor */:
                         var accessors = ts.getAllAccessorDeclarations(node.members, member);
                         if (member === accessors.firstAccessor) {
                             statements.push(transformAccessorsToStatement(getClassMemberPrefix(node, member), accessors, node));
                         }
                         break;
-                    case 167 /* Constructor */:
+                    case 169 /* Constructor */:
+                    case 168 /* ClassStaticBlockDeclaration */:
                         // Constructors are handled in visitClassExpression/visitClassDeclaration
                         break;
                     default:
@@ -93053,8 +95100,8 @@
          * @param node An ArrowFunction node.
          */
         function visitArrowFunction(node) {
-            if (node.transformFlags & 8192 /* ContainsLexicalThis */) {
-                hierarchyFacts |= 32768 /* CapturedLexicalThis */;
+            if (node.transformFlags & 8192 /* ContainsLexicalThis */ && !(hierarchyFacts & 16384 /* StaticInitializer */)) {
+                hierarchyFacts |= 65536 /* CapturedLexicalThis */;
             }
             var savedConvertedLoopState = convertedLoopState;
             convertedLoopState = undefined;
@@ -93068,9 +95115,6 @@
             ts.setTextRange(func, node);
             ts.setOriginalNode(func, node);
             ts.setEmitFlags(func, 8 /* CapturesThis */);
-            if (hierarchyFacts & 32768 /* CapturedLexicalThis */) {
-                enableSubstitutionsForCapturedThis();
-            }
             // If an arrow function contains
             exitSubtree(ancestorFacts, 0 /* ArrowFunctionSubtreeExcludes */, 0 /* None */);
             convertedLoopState = savedConvertedLoopState;
@@ -93083,16 +95127,16 @@
          */
         function visitFunctionExpression(node) {
             var ancestorFacts = ts.getEmitFlags(node) & 262144 /* AsyncFunctionBody */
-                ? enterSubtree(16278 /* AsyncFunctionBodyExcludes */, 69 /* AsyncFunctionBodyIncludes */)
-                : enterSubtree(16286 /* FunctionExcludes */, 65 /* FunctionIncludes */);
+                ? enterSubtree(32662 /* AsyncFunctionBodyExcludes */, 69 /* AsyncFunctionBodyIncludes */)
+                : enterSubtree(32670 /* FunctionExcludes */, 65 /* FunctionIncludes */);
             var savedConvertedLoopState = convertedLoopState;
             convertedLoopState = undefined;
             var parameters = ts.visitParameterList(node.parameters, visitor, context);
             var body = transformFunctionBody(node);
-            var name = hierarchyFacts & 16384 /* NewTarget */
+            var name = hierarchyFacts & 32768 /* NewTarget */
                 ? factory.getLocalName(node)
                 : node.name;
-            exitSubtree(ancestorFacts, 49152 /* FunctionSubtreeExcludes */, 0 /* None */);
+            exitSubtree(ancestorFacts, 98304 /* FunctionSubtreeExcludes */, 0 /* None */);
             convertedLoopState = savedConvertedLoopState;
             return factory.updateFunctionExpression(node, 
             /*modifiers*/ undefined, node.asteriskToken, name, 
@@ -93107,13 +95151,13 @@
         function visitFunctionDeclaration(node) {
             var savedConvertedLoopState = convertedLoopState;
             convertedLoopState = undefined;
-            var ancestorFacts = enterSubtree(16286 /* FunctionExcludes */, 65 /* FunctionIncludes */);
+            var ancestorFacts = enterSubtree(32670 /* FunctionExcludes */, 65 /* FunctionIncludes */);
             var parameters = ts.visitParameterList(node.parameters, visitor, context);
             var body = transformFunctionBody(node);
-            var name = hierarchyFacts & 16384 /* NewTarget */
+            var name = hierarchyFacts & 32768 /* NewTarget */
                 ? factory.getLocalName(node)
                 : node.name;
-            exitSubtree(ancestorFacts, 49152 /* FunctionSubtreeExcludes */, 0 /* None */);
+            exitSubtree(ancestorFacts, 98304 /* FunctionSubtreeExcludes */, 0 /* None */);
             convertedLoopState = savedConvertedLoopState;
             return factory.updateFunctionDeclaration(node, 
             /*decorators*/ undefined, ts.visitNodes(node.modifiers, visitor, ts.isModifier), node.asteriskToken, name, 
@@ -93130,15 +95174,15 @@
         function transformFunctionLikeToExpression(node, location, name, container) {
             var savedConvertedLoopState = convertedLoopState;
             convertedLoopState = undefined;
-            var ancestorFacts = container && ts.isClassLike(container) && !ts.hasSyntacticModifier(node, 32 /* Static */)
-                ? enterSubtree(16286 /* FunctionExcludes */, 65 /* FunctionIncludes */ | 8 /* NonStaticClassElement */)
-                : enterSubtree(16286 /* FunctionExcludes */, 65 /* FunctionIncludes */);
+            var ancestorFacts = container && ts.isClassLike(container) && !ts.isStatic(node)
+                ? enterSubtree(32670 /* FunctionExcludes */, 65 /* FunctionIncludes */ | 8 /* NonStaticClassElement */)
+                : enterSubtree(32670 /* FunctionExcludes */, 65 /* FunctionIncludes */);
             var parameters = ts.visitParameterList(node.parameters, visitor, context);
             var body = transformFunctionBody(node);
-            if (hierarchyFacts & 16384 /* NewTarget */ && !name && (node.kind === 252 /* FunctionDeclaration */ || node.kind === 209 /* FunctionExpression */)) {
+            if (hierarchyFacts & 32768 /* NewTarget */ && !name && (node.kind === 254 /* FunctionDeclaration */ || node.kind === 211 /* FunctionExpression */)) {
                 name = factory.getGeneratedNameForNode(node);
             }
-            exitSubtree(ancestorFacts, 49152 /* FunctionSubtreeExcludes */, 0 /* None */);
+            exitSubtree(ancestorFacts, 98304 /* FunctionSubtreeExcludes */, 0 /* None */);
             convertedLoopState = savedConvertedLoopState;
             return ts.setOriginalNode(ts.setTextRange(factory.createFunctionExpression(
             /*modifiers*/ undefined, node.asteriskToken, name, 
@@ -93181,7 +95225,7 @@
                 }
             }
             else {
-                ts.Debug.assert(node.kind === 210 /* ArrowFunction */);
+                ts.Debug.assert(node.kind === 212 /* ArrowFunction */);
                 // To align with the old emitter, we use a synthetic end position on the location
                 // for the statement list we synthesize when we down-level an arrow function with
                 // an expression function body. This prevents both comments and source maps from
@@ -93316,7 +95360,7 @@
                             assignment = ts.flattenDestructuringAssignment(decl, visitor, context, 0 /* All */);
                         }
                         else {
-                            assignment = factory.createBinaryExpression(decl.name, 62 /* EqualsToken */, ts.visitNode(decl.initializer, visitor, ts.isExpression));
+                            assignment = factory.createBinaryExpression(decl.name, 63 /* EqualsToken */, ts.visitNode(decl.initializer, visitor, ts.isExpression));
                             ts.setTextRange(assignment, decl);
                         }
                         assignments = ts.append(assignments, assignment);
@@ -93488,14 +95532,14 @@
         }
         function visitIterationStatement(node, outermostLabeledStatement) {
             switch (node.kind) {
-                case 236 /* DoStatement */:
-                case 237 /* WhileStatement */:
+                case 238 /* DoStatement */:
+                case 239 /* WhileStatement */:
                     return visitDoOrWhileStatement(node, outermostLabeledStatement);
-                case 238 /* ForStatement */:
+                case 240 /* ForStatement */:
                     return visitForStatement(node, outermostLabeledStatement);
-                case 239 /* ForInStatement */:
+                case 241 /* ForInStatement */:
                     return visitForInStatement(node, outermostLabeledStatement);
-                case 240 /* ForOfStatement */:
+                case 242 /* ForOfStatement */:
                     return visitForOfStatement(node, outermostLabeledStatement);
             }
         }
@@ -93681,7 +95725,7 @@
                 var property = properties[i];
                 if ((property.transformFlags & 524288 /* ContainsYield */ &&
                     hierarchyFacts & 4 /* AsyncFunctionBody */)
-                    || (hasComputed = ts.Debug.checkDefined(property.name).kind === 159 /* ComputedPropertyName */)) {
+                    || (hasComputed = ts.Debug.checkDefined(property.name).kind === 160 /* ComputedPropertyName */)) {
                     numInitialProperties = i;
                     break;
                 }
@@ -93733,7 +95777,7 @@
             }
             visit(node.name);
             function visit(node) {
-                if (node.kind === 78 /* Identifier */) {
+                if (node.kind === 79 /* Identifier */) {
                     state.hoistedLocalVariables.push(node);
                 }
                 else {
@@ -93797,11 +95841,11 @@
         }
         function convertIterationStatementCore(node, initializerFunction, convertedLoopBody) {
             switch (node.kind) {
-                case 238 /* ForStatement */: return convertForStatement(node, initializerFunction, convertedLoopBody);
-                case 239 /* ForInStatement */: return convertForInStatement(node, convertedLoopBody);
-                case 240 /* ForOfStatement */: return convertForOfStatement(node, convertedLoopBody);
-                case 236 /* DoStatement */: return convertDoStatement(node, convertedLoopBody);
-                case 237 /* WhileStatement */: return convertWhileStatement(node, convertedLoopBody);
+                case 240 /* ForStatement */: return convertForStatement(node, initializerFunction, convertedLoopBody);
+                case 241 /* ForInStatement */: return convertForInStatement(node, convertedLoopBody);
+                case 242 /* ForOfStatement */: return convertForOfStatement(node, convertedLoopBody);
+                case 238 /* DoStatement */: return convertDoStatement(node, convertedLoopBody);
+                case 239 /* WhileStatement */: return convertWhileStatement(node, convertedLoopBody);
                 default: return ts.Debug.failBadSyntaxKind(node, "IterationStatement expected");
             }
         }
@@ -93826,11 +95870,11 @@
         function createConvertedLoopState(node) {
             var loopInitializer;
             switch (node.kind) {
-                case 238 /* ForStatement */:
-                case 239 /* ForInStatement */:
-                case 240 /* ForOfStatement */:
+                case 240 /* ForStatement */:
+                case 241 /* ForInStatement */:
+                case 242 /* ForOfStatement */:
                     var initializer = node.initializer;
-                    if (initializer && initializer.kind === 251 /* VariableDeclarationList */) {
+                    if (initializer && initializer.kind === 253 /* VariableDeclarationList */) {
                         loopInitializer = initializer;
                     }
                     break;
@@ -94101,7 +96145,7 @@
         function copyOutParameter(outParam, copyDirection) {
             var source = copyDirection === 0 /* ToOriginal */ ? outParam.outParamName : outParam.originalName;
             var target = copyDirection === 0 /* ToOriginal */ ? outParam.originalName : outParam.outParamName;
-            return factory.createBinaryExpression(target, 62 /* EqualsToken */, source);
+            return factory.createBinaryExpression(target, 63 /* EqualsToken */, source);
         }
         function copyOutParameters(outParams, partFlags, copyDirection, statements) {
             for (var _i = 0, outParams_1 = outParams; _i < outParams_1.length; _i++) {
@@ -94238,20 +96282,20 @@
             for (var i = start; i < numProperties; i++) {
                 var property = properties[i];
                 switch (property.kind) {
-                    case 168 /* GetAccessor */:
-                    case 169 /* SetAccessor */:
+                    case 170 /* GetAccessor */:
+                    case 171 /* SetAccessor */:
                         var accessors = ts.getAllAccessorDeclarations(node.properties, property);
                         if (property === accessors.firstAccessor) {
                             expressions.push(transformAccessorsToExpression(receiver, accessors, node, !!node.multiLine));
                         }
                         break;
-                    case 166 /* MethodDeclaration */:
+                    case 167 /* MethodDeclaration */:
                         expressions.push(transformObjectLiteralMethodDeclarationToExpression(property, receiver, node, node.multiLine));
                         break;
-                    case 289 /* PropertyAssignment */:
+                    case 291 /* PropertyAssignment */:
                         expressions.push(transformPropertyAssignmentToExpression(property, receiver, node.multiLine));
                         break;
-                    case 290 /* ShorthandPropertyAssignment */:
+                    case 292 /* ShorthandPropertyAssignment */:
                         expressions.push(transformShorthandPropertyAssignmentToExpression(property, receiver, node.multiLine));
                         break;
                     default:
@@ -94327,7 +96371,7 @@
         }
         function addStatementToStartOfBlock(block, statement) {
             var transformedStatements = ts.visitNodes(block.statements, visitor, ts.isStatement);
-            return factory.updateBlock(block, __spreadArray([statement], transformedStatements));
+            return factory.updateBlock(block, __spreadArray([statement], transformedStatements, true));
         }
         /**
          * Visits a MethodDeclaration of an ObjectLiteralExpression and transforms it into a
@@ -94354,17 +96398,17 @@
             ts.Debug.assert(!ts.isComputedPropertyName(node.name));
             var savedConvertedLoopState = convertedLoopState;
             convertedLoopState = undefined;
-            var ancestorFacts = enterSubtree(16286 /* FunctionExcludes */, 65 /* FunctionIncludes */);
+            var ancestorFacts = enterSubtree(32670 /* FunctionExcludes */, 65 /* FunctionIncludes */);
             var updated;
             var parameters = ts.visitParameterList(node.parameters, visitor, context);
             var body = transformFunctionBody(node);
-            if (node.kind === 168 /* GetAccessor */) {
+            if (node.kind === 170 /* GetAccessor */) {
                 updated = factory.updateGetAccessorDeclaration(node, node.decorators, node.modifiers, node.name, parameters, node.type, body);
             }
             else {
                 updated = factory.updateSetAccessorDeclaration(node, node.decorators, node.modifiers, node.name, parameters, body);
             }
-            exitSubtree(ancestorFacts, 49152 /* FunctionSubtreeExcludes */, 0 /* None */);
+            exitSubtree(ancestorFacts, 98304 /* FunctionSubtreeExcludes */, 0 /* None */);
             convertedLoopState = savedConvertedLoopState;
             return updated;
         }
@@ -94397,7 +96441,7 @@
         function visitArrayLiteralExpression(node) {
             if (ts.some(node.elements, ts.isSpreadElement)) {
                 // We are here because we contain a SpreadElementExpression.
-                return transformAndSpreadElements(node.elements, /*needsUniqueCopy*/ true, !!node.multiLine, /*hasTrailingComma*/ !!node.elements.hasTrailingComma);
+                return transformAndSpreadElements(node.elements, /*isArgumentList*/ false, !!node.multiLine, /*hasTrailingComma*/ !!node.elements.hasTrailingComma);
             }
             return ts.visitEachChild(node, visitor, context);
         }
@@ -94411,7 +96455,7 @@
                 return visitTypeScriptClassWrapper(node);
             }
             var expression = ts.skipOuterExpressions(node.expression);
-            if (expression.kind === 105 /* SuperKeyword */ ||
+            if (expression.kind === 106 /* SuperKeyword */ ||
                 ts.isSuperProperty(expression) ||
                 ts.some(node.arguments, ts.isSpreadElement)) {
                 return visitCallExpressionWithPotentialCapturedThisAssignment(node, /*assignToCapturedThis*/ true);
@@ -94459,7 +96503,7 @@
             // visit the class body statements outside of any converted loop body.
             var savedConvertedLoopState = convertedLoopState;
             convertedLoopState = undefined;
-            var bodyStatements = ts.visitNodes(body.statements, visitor, ts.isStatement);
+            var bodyStatements = ts.visitNodes(body.statements, classWrapperStatementVisitor, ts.isStatement);
             convertedLoopState = savedConvertedLoopState;
             var classStatements = ts.filter(bodyStatements, isVariableStatementWithInitializer);
             var remainingStatements = ts.filter(bodyStatements, function (stmt) { return !isVariableStatementWithInitializer(stmt); });
@@ -94484,6 +96528,9 @@
             //  }())
             //
             var aliasAssignment = ts.tryCast(initializer, ts.isAssignmentExpression);
+            if (!aliasAssignment && ts.isBinaryExpression(initializer) && initializer.operatorToken.kind === 27 /* CommaToken */) {
+                aliasAssignment = ts.tryCast(initializer.left, ts.isAssignmentExpression);
+            }
             // The underlying call (3) is another IIFE that may contain a '_super' argument.
             var call = ts.cast(aliasAssignment ? ts.skipOuterExpressions(aliasAssignment.right) : initializer, ts.isCallExpression);
             var func = ts.cast(ts.skipOuterExpressions(call.expression), ts.isFunctionExpression);
@@ -94539,10 +96586,10 @@
             // We are here either because SuperKeyword was used somewhere in the expression, or
             // because we contain a SpreadElementExpression.
             if (node.transformFlags & 16384 /* ContainsRestOrSpread */ ||
-                node.expression.kind === 105 /* SuperKeyword */ ||
+                node.expression.kind === 106 /* SuperKeyword */ ||
                 ts.isSuperProperty(ts.skipOuterExpressions(node.expression))) {
                 var _a = factory.createCallBinding(node.expression, hoistVariableDeclaration), target = _a.target, thisArg = _a.thisArg;
-                if (node.expression.kind === 105 /* SuperKeyword */) {
+                if (node.expression.kind === 106 /* SuperKeyword */) {
                     ts.setEmitFlags(thisArg, 4 /* NoSubstitution */);
                 }
                 var resultingCall = void 0;
@@ -94560,7 +96607,7 @@
                     //      _super.apply(this, a.concat([b]))
                     //      _super.m.apply(this, a.concat([b]))
                     //      _super.prototype.m.apply(this, a.concat([b]))
-                    resultingCall = factory.createFunctionApplyCall(ts.visitNode(target, callExpressionVisitor, ts.isExpression), node.expression.kind === 105 /* SuperKeyword */ ? thisArg : ts.visitNode(thisArg, visitor, ts.isExpression), transformAndSpreadElements(node.arguments, /*needsUniqueCopy*/ false, /*multiLine*/ false, /*hasTrailingComma*/ false));
+                    resultingCall = factory.createFunctionApplyCall(ts.visitNode(target, callExpressionVisitor, ts.isExpression), node.expression.kind === 106 /* SuperKeyword */ ? thisArg : ts.visitNode(thisArg, visitor, ts.isExpression), transformAndSpreadElements(node.arguments, /*isArgumentList*/ true, /*multiLine*/ false, /*hasTrailingComma*/ false));
                 }
                 else {
                     // [source]
@@ -94572,9 +96619,9 @@
                     //      _super.call(this, a)
                     //      _super.m.call(this, a)
                     //      _super.prototype.m.call(this, a)
-                    resultingCall = ts.setTextRange(factory.createFunctionCallCall(ts.visitNode(target, callExpressionVisitor, ts.isExpression), node.expression.kind === 105 /* SuperKeyword */ ? thisArg : ts.visitNode(thisArg, visitor, ts.isExpression), ts.visitNodes(node.arguments, visitor, ts.isExpression)), node);
+                    resultingCall = ts.setTextRange(factory.createFunctionCallCall(ts.visitNode(target, callExpressionVisitor, ts.isExpression), node.expression.kind === 106 /* SuperKeyword */ ? thisArg : ts.visitNode(thisArg, visitor, ts.isExpression), ts.visitNodes(node.arguments, visitor, ts.isExpression)), node);
                 }
-                if (node.expression.kind === 105 /* SuperKeyword */) {
+                if (node.expression.kind === 106 /* SuperKeyword */) {
                     var initializer = factory.createLogicalOr(resultingCall, createActualThis());
                     resultingCall = assignToCapturedThis
                         ? factory.createAssignment(factory.createUniqueName("_this", 16 /* Optimistic */ | 32 /* FileLevel */), initializer)
@@ -94598,7 +96645,7 @@
                 // [output]
                 //      new ((_a = C).bind.apply(_a, [void 0].concat(a)))()
                 var _a = factory.createCallBinding(factory.createPropertyAccessExpression(node.expression, "bind"), hoistVariableDeclaration), target = _a.target, thisArg = _a.thisArg;
-                return factory.createNewExpression(factory.createFunctionApplyCall(ts.visitNode(target, visitor, ts.isExpression), thisArg, transformAndSpreadElements(factory.createNodeArray(__spreadArray([factory.createVoidZero()], node.arguments)), /*needsUniqueCopy*/ false, /*multiLine*/ false, /*hasTrailingComma*/ false)), 
+                return factory.createNewExpression(factory.createFunctionApplyCall(ts.visitNode(target, visitor, ts.isExpression), thisArg, transformAndSpreadElements(factory.createNodeArray(__spreadArray([factory.createVoidZero()], node.arguments, true)), /*isArgumentList*/ true, /*multiLine*/ false, /*hasTrailingComma*/ false)), 
                 /*typeArguments*/ undefined, []);
             }
             return ts.visitEachChild(node, visitor, context);
@@ -94607,12 +96654,12 @@
          * Transforms an array of Expression nodes that contains a SpreadExpression.
          *
          * @param elements The array of Expression nodes.
-         * @param needsUniqueCopy A value indicating whether to ensure that the result is a fresh array.
-         * This should be `true` when spreading into an `ArrayLiteral`, and `false` when spreading into an
+         * @param isArgumentList A value indicating whether to ensure that the result is a fresh array.
+         * This should be `false` when spreading into an `ArrayLiteral`, and `true` when spreading into an
          * argument list.
          * @param multiLine A value indicating whether the result should be emitted on multiple lines.
          */
-        function transformAndSpreadElements(elements, needsUniqueCopy, multiLine, hasTrailingComma) {
+        function transformAndSpreadElements(elements, isArgumentList, multiLine, hasTrailingComma) {
             // When there is no leading SpreadElement:
             //
             // [source]
@@ -94646,7 +96693,11 @@
             // Map spans of spread expressions into their expressions and spans of other
             // expressions into an array literal.
             var numElements = elements.length;
-            var segments = ts.flatten(ts.spanMap(elements, partitionSpread, function (partition, visitPartition, _start, end) {
+            var segments = ts.flatten(
+            // As we visit each element, we return one of two functions to use as the "key":
+            // - `visitSpanOfSpreads` for one or more contiguous `...` spread expressions, i.e. `...a, ...b` in `[1, 2, ...a, ...b]`
+            // - `visitSpanOfNonSpreads` for one or more contiguous non-spread elements, i.e. `1, 2`, in `[1, 2, ...a, ...b]`
+            ts.spanMap(elements, partitionSpread, function (partition, visitPartition, _start, end) {
                 return visitPartition(partition, multiLine, hasTrailingComma && end === numElements);
             }));
             if (segments.length === 1) {
@@ -94655,20 +96706,20 @@
                 // a CallExpression or NewExpression. When using `--downlevelIteration`, we need
                 // to coerce this into an array for use with `apply`, so we will use the code path
                 // that follows instead.
-                if (!needsUniqueCopy && !compilerOptions.downlevelIteration
-                    || ts.isPackedArrayLiteral(firstSegment) // see NOTE (above)
-                    || ts.isCallToHelper(firstSegment, "___spreadArray")) {
-                    return segments[0];
+                if (isArgumentList && !compilerOptions.downlevelIteration
+                    || ts.isPackedArrayLiteral(firstSegment.expression) // see NOTE (above)
+                    || ts.isCallToHelper(firstSegment.expression, "___spreadArray")) {
+                    return firstSegment.expression;
                 }
             }
             var helpers = emitHelpers();
-            var startsWithSpread = ts.isSpreadElement(elements[0]);
+            var startsWithSpread = segments[0].kind !== 0 /* None */;
             var expression = startsWithSpread ? factory.createArrayLiteralExpression() :
-                segments[0];
+                segments[0].expression;
             for (var i = startsWithSpread ? 0 : 1; i < segments.length; i++) {
-                expression = helpers.createSpreadArrayHelper(expression, compilerOptions.downlevelIteration && !ts.isPackedArrayLiteral(segments[i]) ? // see NOTE (above)
-                    helpers.createReadHelper(segments[i], /*count*/ undefined) :
-                    segments[i]);
+                var segment = segments[i];
+                // If this is for an argument list, it doesn't matter if the array is packed or sparse
+                expression = helpers.createSpreadArrayHelper(expression, segment.expression, segment.kind === 1 /* UnpackedSpread */ && !isArgumentList);
             }
             return expression;
         }
@@ -94680,21 +96731,29 @@
         function visitSpanOfSpreads(chunk) {
             return ts.map(chunk, visitExpressionOfSpread);
         }
+        function visitExpressionOfSpread(node) {
+            var expression = ts.visitNode(node.expression, visitor, ts.isExpression);
+            // We don't need to pack already packed array literals, or existing calls to the `__read` helper.
+            var isCallToReadHelper = ts.isCallToHelper(expression, "___read");
+            var kind = isCallToReadHelper || ts.isPackedArrayLiteral(expression) ? 2 /* PackedSpread */ : 1 /* UnpackedSpread */;
+            // We don't need the `__read` helper for array literals. Array packing will be performed by `__spreadArray`.
+            if (compilerOptions.downlevelIteration && kind === 1 /* UnpackedSpread */ && !ts.isArrayLiteralExpression(expression) && !isCallToReadHelper) {
+                expression = emitHelpers().createReadHelper(expression, /*count*/ undefined);
+                // the `__read` helper returns a packed array, so we don't need to ensure a packed array
+                kind = 2 /* PackedSpread */;
+            }
+            return createSpreadSegment(kind, expression);
+        }
         function visitSpanOfNonSpreads(chunk, multiLine, hasTrailingComma) {
-            return factory.createArrayLiteralExpression(ts.visitNodes(factory.createNodeArray(chunk, hasTrailingComma), visitor, ts.isExpression), multiLine);
+            var expression = factory.createArrayLiteralExpression(ts.visitNodes(factory.createNodeArray(chunk, hasTrailingComma), visitor, ts.isExpression), multiLine);
+            // We do not pack non-spread segments, this is so that `[1, , ...[2, , 3], , 4]` is properly downleveled to
+            // `[1, , 2, undefined, 3, , 4]`. See the NOTE in `transformAndSpreadElements`
+            return createSpreadSegment(0 /* None */, expression);
         }
         function visitSpreadElement(node) {
             return ts.visitNode(node.expression, visitor, ts.isExpression);
         }
         /**
-         * Transforms the expression of a SpreadExpression node.
-         *
-         * @param node A SpreadExpression node.
-         */
-        function visitExpressionOfSpread(node) {
-            return ts.visitNode(node.expression, visitor, ts.isExpression);
-        }
-        /**
          * Visits a template literal.
          *
          * @param node A template literal.
@@ -94821,8 +96880,8 @@
                 : factory.createUniqueName("_super", 16 /* Optimistic */ | 32 /* FileLevel */);
         }
         function visitMetaProperty(node) {
-            if (node.keywordToken === 102 /* NewKeyword */ && node.name.escapedText === "target") {
-                hierarchyFacts |= 16384 /* NewTarget */;
+            if (node.keywordToken === 103 /* NewKeyword */ && node.name.escapedText === "target") {
+                hierarchyFacts |= 32768 /* NewTarget */;
                 return factory.createUniqueName("_newTarget", 16 /* Optimistic */ | 32 /* FileLevel */);
             }
             return node;
@@ -94837,7 +96896,7 @@
         function onEmitNode(hint, node, emitCallback) {
             if (enabledSubstitutions & 1 /* CapturedThis */ && ts.isFunctionLike(node)) {
                 // If we are tracking a captured `this`, keep track of the enclosing function.
-                var ancestorFacts = enterSubtree(16286 /* FunctionExcludes */, ts.getEmitFlags(node) & 8 /* CapturesThis */
+                var ancestorFacts = enterSubtree(32670 /* FunctionExcludes */, ts.getEmitFlags(node) & 8 /* CapturesThis */
                     ? 65 /* FunctionIncludes */ | 16 /* CapturesThis */
                     : 65 /* FunctionIncludes */);
                 previousOnEmitNode(hint, node, emitCallback);
@@ -94853,7 +96912,7 @@
         function enableSubstitutionsForBlockScopedBindings() {
             if ((enabledSubstitutions & 2 /* BlockScopedBindings */) === 0) {
                 enabledSubstitutions |= 2 /* BlockScopedBindings */;
-                context.enableSubstitution(78 /* Identifier */);
+                context.enableSubstitution(79 /* Identifier */);
             }
         }
         /**
@@ -94863,14 +96922,14 @@
         function enableSubstitutionsForCapturedThis() {
             if ((enabledSubstitutions & 1 /* CapturedThis */) === 0) {
                 enabledSubstitutions |= 1 /* CapturedThis */;
-                context.enableSubstitution(107 /* ThisKeyword */);
-                context.enableEmitNotification(167 /* Constructor */);
-                context.enableEmitNotification(166 /* MethodDeclaration */);
-                context.enableEmitNotification(168 /* GetAccessor */);
-                context.enableEmitNotification(169 /* SetAccessor */);
-                context.enableEmitNotification(210 /* ArrowFunction */);
-                context.enableEmitNotification(209 /* FunctionExpression */);
-                context.enableEmitNotification(252 /* FunctionDeclaration */);
+                context.enableSubstitution(108 /* ThisKeyword */);
+                context.enableEmitNotification(169 /* Constructor */);
+                context.enableEmitNotification(167 /* MethodDeclaration */);
+                context.enableEmitNotification(170 /* GetAccessor */);
+                context.enableEmitNotification(171 /* SetAccessor */);
+                context.enableEmitNotification(212 /* ArrowFunction */);
+                context.enableEmitNotification(211 /* FunctionExpression */);
+                context.enableEmitNotification(254 /* FunctionDeclaration */);
             }
         }
         /**
@@ -94911,10 +96970,10 @@
          */
         function isNameOfDeclarationWithCollidingName(node) {
             switch (node.parent.kind) {
-                case 199 /* BindingElement */:
-                case 253 /* ClassDeclaration */:
-                case 256 /* EnumDeclaration */:
-                case 250 /* VariableDeclaration */:
+                case 201 /* BindingElement */:
+                case 255 /* ClassDeclaration */:
+                case 258 /* EnumDeclaration */:
+                case 252 /* VariableDeclaration */:
                     return node.parent.name === node
                         && resolver.isDeclarationWithCollidingName(node.parent);
             }
@@ -94927,9 +96986,9 @@
          */
         function substituteExpression(node) {
             switch (node.kind) {
-                case 78 /* Identifier */:
+                case 79 /* Identifier */:
                     return substituteExpressionIdentifier(node);
-                case 107 /* ThisKeyword */:
+                case 108 /* ThisKeyword */:
                     return substituteThisKeyword(node);
             }
             return node;
@@ -94984,7 +97043,7 @@
             return node;
         }
         function getClassMemberPrefix(node, member) {
-            return ts.hasSyntacticModifier(member, 32 /* Static */)
+            return ts.isStatic(member)
                 ? factory.getInternalName(node)
                 : factory.createPropertyAccessExpression(factory.getInternalName(node), "prototype");
         }
@@ -94996,19 +97055,19 @@
                 return false;
             }
             var statement = ts.firstOrUndefined(constructor.body.statements);
-            if (!statement || !ts.nodeIsSynthesized(statement) || statement.kind !== 234 /* ExpressionStatement */) {
+            if (!statement || !ts.nodeIsSynthesized(statement) || statement.kind !== 236 /* ExpressionStatement */) {
                 return false;
             }
             var statementExpression = statement.expression;
-            if (!ts.nodeIsSynthesized(statementExpression) || statementExpression.kind !== 204 /* CallExpression */) {
+            if (!ts.nodeIsSynthesized(statementExpression) || statementExpression.kind !== 206 /* CallExpression */) {
                 return false;
             }
             var callTarget = statementExpression.expression;
-            if (!ts.nodeIsSynthesized(callTarget) || callTarget.kind !== 105 /* SuperKeyword */) {
+            if (!ts.nodeIsSynthesized(callTarget) || callTarget.kind !== 106 /* SuperKeyword */) {
                 return false;
             }
             var callArgument = ts.singleOrUndefined(statementExpression.arguments);
-            if (!callArgument || !ts.nodeIsSynthesized(callArgument) || callArgument.kind !== 221 /* SpreadElement */) {
+            if (!callArgument || !ts.nodeIsSynthesized(callArgument) || callArgument.kind !== 223 /* SpreadElement */) {
                 return false;
             }
             var expression = callArgument.expression;
@@ -95034,15 +97093,15 @@
         if (compilerOptions.jsx === 1 /* Preserve */ || compilerOptions.jsx === 3 /* ReactNative */) {
             previousOnEmitNode = context.onEmitNode;
             context.onEmitNode = onEmitNode;
-            context.enableEmitNotification(276 /* JsxOpeningElement */);
-            context.enableEmitNotification(277 /* JsxClosingElement */);
-            context.enableEmitNotification(275 /* JsxSelfClosingElement */);
+            context.enableEmitNotification(278 /* JsxOpeningElement */);
+            context.enableEmitNotification(279 /* JsxClosingElement */);
+            context.enableEmitNotification(277 /* JsxSelfClosingElement */);
             noSubstitution = [];
         }
         var previousOnSubstituteNode = context.onSubstituteNode;
         context.onSubstituteNode = onSubstituteNode;
-        context.enableSubstitution(202 /* PropertyAccessExpression */);
-        context.enableSubstitution(289 /* PropertyAssignment */);
+        context.enableSubstitution(204 /* PropertyAccessExpression */);
+        context.enableSubstitution(291 /* PropertyAssignment */);
         return ts.chainBundle(context, transformSourceFile);
         /**
          * Transforms an ES5 source file to ES3.
@@ -95061,9 +97120,9 @@
          */
         function onEmitNode(hint, node, emitCallback) {
             switch (node.kind) {
-                case 276 /* JsxOpeningElement */:
-                case 277 /* JsxClosingElement */:
-                case 275 /* JsxSelfClosingElement */:
+                case 278 /* JsxOpeningElement */:
+                case 279 /* JsxClosingElement */:
+                case 277 /* JsxSelfClosingElement */:
                     var tagName = node.tagName;
                     noSubstitution[ts.getOriginalNodeId(tagName)] = true;
                     break;
@@ -95123,7 +97182,7 @@
          */
         function trySubstituteReservedName(name) {
             var token = name.originalKeywordKind || (ts.nodeIsSynthesized(name) ? ts.stringToToken(ts.idText(name)) : undefined);
-            if (token !== undefined && token >= 80 /* FirstReservedWord */ && token <= 115 /* LastReservedWord */) {
+            if (token !== undefined && token >= 81 /* FirstReservedWord */ && token <= 116 /* LastReservedWord */) {
                 return ts.setTextRange(factory.createStringLiteralFromNode(name), name);
             }
             return undefined;
@@ -95398,13 +97457,13 @@
          */
         function visitJavaScriptInStatementContainingYield(node) {
             switch (node.kind) {
-                case 236 /* DoStatement */:
+                case 238 /* DoStatement */:
                     return visitDoStatement(node);
-                case 237 /* WhileStatement */:
+                case 239 /* WhileStatement */:
                     return visitWhileStatement(node);
-                case 245 /* SwitchStatement */:
+                case 247 /* SwitchStatement */:
                     return visitSwitchStatement(node);
-                case 246 /* LabeledStatement */:
+                case 248 /* LabeledStatement */:
                     return visitLabeledStatement(node);
                 default:
                     return visitJavaScriptInGeneratorFunctionBody(node);
@@ -95417,24 +97476,24 @@
          */
         function visitJavaScriptInGeneratorFunctionBody(node) {
             switch (node.kind) {
-                case 252 /* FunctionDeclaration */:
+                case 254 /* FunctionDeclaration */:
                     return visitFunctionDeclaration(node);
-                case 209 /* FunctionExpression */:
+                case 211 /* FunctionExpression */:
                     return visitFunctionExpression(node);
-                case 168 /* GetAccessor */:
-                case 169 /* SetAccessor */:
+                case 170 /* GetAccessor */:
+                case 171 /* SetAccessor */:
                     return visitAccessorDeclaration(node);
-                case 233 /* VariableStatement */:
+                case 235 /* VariableStatement */:
                     return visitVariableStatement(node);
-                case 238 /* ForStatement */:
+                case 240 /* ForStatement */:
                     return visitForStatement(node);
-                case 239 /* ForInStatement */:
+                case 241 /* ForInStatement */:
                     return visitForInStatement(node);
-                case 242 /* BreakStatement */:
+                case 244 /* BreakStatement */:
                     return visitBreakStatement(node);
-                case 241 /* ContinueStatement */:
+                case 243 /* ContinueStatement */:
                     return visitContinueStatement(node);
-                case 243 /* ReturnStatement */:
+                case 245 /* ReturnStatement */:
                     return visitReturnStatement(node);
                 default:
                     if (node.transformFlags & 524288 /* ContainsYield */) {
@@ -95455,23 +97514,23 @@
          */
         function visitJavaScriptContainingYield(node) {
             switch (node.kind) {
-                case 217 /* BinaryExpression */:
+                case 219 /* BinaryExpression */:
                     return visitBinaryExpression(node);
-                case 341 /* CommaListExpression */:
+                case 346 /* CommaListExpression */:
                     return visitCommaListExpression(node);
-                case 218 /* ConditionalExpression */:
+                case 220 /* ConditionalExpression */:
                     return visitConditionalExpression(node);
-                case 220 /* YieldExpression */:
+                case 222 /* YieldExpression */:
                     return visitYieldExpression(node);
-                case 200 /* ArrayLiteralExpression */:
+                case 202 /* ArrayLiteralExpression */:
                     return visitArrayLiteralExpression(node);
-                case 201 /* ObjectLiteralExpression */:
+                case 203 /* ObjectLiteralExpression */:
                     return visitObjectLiteralExpression(node);
-                case 203 /* ElementAccessExpression */:
+                case 205 /* ElementAccessExpression */:
                     return visitElementAccessExpression(node);
-                case 204 /* CallExpression */:
+                case 206 /* CallExpression */:
                     return visitCallExpression(node);
-                case 205 /* NewExpression */:
+                case 207 /* NewExpression */:
                     return visitNewExpression(node);
                 default:
                     return ts.visitEachChild(node, visitor, context);
@@ -95484,9 +97543,9 @@
          */
         function visitGenerator(node) {
             switch (node.kind) {
-                case 252 /* FunctionDeclaration */:
+                case 254 /* FunctionDeclaration */:
                     return visitFunctionDeclaration(node);
-                case 209 /* FunctionExpression */:
+                case 211 /* FunctionExpression */:
                     return visitFunctionExpression(node);
                 default:
                     return ts.Debug.failBadSyntaxKind(node);
@@ -95694,7 +97753,7 @@
             if (containsYield(right)) {
                 var target = void 0;
                 switch (left.kind) {
-                    case 202 /* PropertyAccessExpression */:
+                    case 204 /* PropertyAccessExpression */:
                         // [source]
                         //      a.b = yield;
                         //
@@ -95706,7 +97765,7 @@
                         //      _a.b = %sent%;
                         target = factory.updatePropertyAccessExpression(left, cacheExpression(ts.visitNode(left.expression, visitor, ts.isLeftHandSideExpression)), left.name);
                         break;
-                    case 203 /* ElementAccessExpression */:
+                    case 205 /* ElementAccessExpression */:
                         // [source]
                         //      a[b] = yield;
                         //
@@ -95953,13 +98012,13 @@
                 temp = declareLocal();
                 var initialElements = ts.visitNodes(elements, visitor, ts.isExpression, 0, numInitialElements);
                 emitAssignment(temp, factory.createArrayLiteralExpression(leadingElement
-                    ? __spreadArray([leadingElement], initialElements) : initialElements));
+                    ? __spreadArray([leadingElement], initialElements, true) : initialElements));
                 leadingElement = undefined;
             }
             var expressions = ts.reduceLeft(elements, reduceElement, [], numInitialElements);
             return temp
                 ? factory.createArrayConcatCall(temp, [factory.createArrayLiteralExpression(expressions, multiLine)])
-                : ts.setTextRange(factory.createArrayLiteralExpression(leadingElement ? __spreadArray([leadingElement], expressions) : expressions, multiLine), location);
+                : ts.setTextRange(factory.createArrayLiteralExpression(leadingElement ? __spreadArray([leadingElement], expressions, true) : expressions, multiLine), location);
             function reduceElement(expressions, element) {
                 if (containsYield(element) && expressions.length > 0) {
                     var hasAssignedTemp = temp !== undefined;
@@ -95968,7 +98027,7 @@
                     }
                     emitAssignment(temp, hasAssignedTemp
                         ? factory.createArrayConcatCall(temp, [factory.createArrayLiteralExpression(expressions, multiLine)])
-                        : factory.createArrayLiteralExpression(leadingElement ? __spreadArray([leadingElement], expressions) : expressions, multiLine));
+                        : factory.createArrayLiteralExpression(leadingElement ? __spreadArray([leadingElement], expressions, true) : expressions, multiLine));
                     leadingElement = undefined;
                     expressions = [];
                 }
@@ -96100,35 +98159,35 @@
         }
         function transformAndEmitStatementWorker(node) {
             switch (node.kind) {
-                case 231 /* Block */:
+                case 233 /* Block */:
                     return transformAndEmitBlock(node);
-                case 234 /* ExpressionStatement */:
+                case 236 /* ExpressionStatement */:
                     return transformAndEmitExpressionStatement(node);
-                case 235 /* IfStatement */:
+                case 237 /* IfStatement */:
                     return transformAndEmitIfStatement(node);
-                case 236 /* DoStatement */:
+                case 238 /* DoStatement */:
                     return transformAndEmitDoStatement(node);
-                case 237 /* WhileStatement */:
+                case 239 /* WhileStatement */:
                     return transformAndEmitWhileStatement(node);
-                case 238 /* ForStatement */:
+                case 240 /* ForStatement */:
                     return transformAndEmitForStatement(node);
-                case 239 /* ForInStatement */:
+                case 241 /* ForInStatement */:
                     return transformAndEmitForInStatement(node);
-                case 241 /* ContinueStatement */:
+                case 243 /* ContinueStatement */:
                     return transformAndEmitContinueStatement(node);
-                case 242 /* BreakStatement */:
+                case 244 /* BreakStatement */:
                     return transformAndEmitBreakStatement(node);
-                case 243 /* ReturnStatement */:
+                case 245 /* ReturnStatement */:
                     return transformAndEmitReturnStatement(node);
-                case 244 /* WithStatement */:
+                case 246 /* WithStatement */:
                     return transformAndEmitWithStatement(node);
-                case 245 /* SwitchStatement */:
+                case 247 /* SwitchStatement */:
                     return transformAndEmitSwitchStatement(node);
-                case 246 /* LabeledStatement */:
+                case 248 /* LabeledStatement */:
                     return transformAndEmitLabeledStatement(node);
-                case 247 /* ThrowStatement */:
+                case 249 /* ThrowStatement */:
                     return transformAndEmitThrowStatement(node);
-                case 248 /* TryStatement */:
+                case 250 /* TryStatement */:
                     return transformAndEmitTryStatement(node);
                 default:
                     return emitStatement(ts.visitNode(node, visitor, ts.isStatement));
@@ -96558,7 +98617,7 @@
                 for (var i = 0; i < numClauses; i++) {
                     var clause = caseBlock.clauses[i];
                     clauseLabels.push(defineLabel());
-                    if (clause.kind === 286 /* DefaultClause */ && defaultClauseIndex === -1) {
+                    if (clause.kind === 288 /* DefaultClause */ && defaultClauseIndex === -1) {
                         defaultClauseIndex = i;
                     }
                 }
@@ -96571,7 +98630,7 @@
                     var defaultClausesSkipped = 0;
                     for (var i = clausesWritten; i < numClauses; i++) {
                         var clause = caseBlock.clauses[i];
-                        if (clause.kind === 285 /* CaseClause */) {
+                        if (clause.kind === 287 /* CaseClause */) {
                             if (containsYield(clause.expression) && pendingClauses.length > 0) {
                                 break;
                             }
@@ -96885,7 +98944,7 @@
                 if (!renamedCatchVariables) {
                     renamedCatchVariables = new ts.Map();
                     renamedCatchVariableDeclarations = [];
-                    context.enableSubstitution(78 /* Identifier */);
+                    context.enableSubstitution(79 /* Identifier */);
                 }
                 renamedCatchVariables.set(text, true);
                 renamedCatchVariableDeclarations[ts.getOriginalNodeId(variable)] = name;
@@ -97731,17 +99790,17 @@
         var previousOnEmitNode = context.onEmitNode;
         context.onSubstituteNode = onSubstituteNode;
         context.onEmitNode = onEmitNode;
-        context.enableSubstitution(78 /* Identifier */); // Substitutes expression identifiers with imported/exported symbols.
-        context.enableSubstitution(217 /* BinaryExpression */); // Substitutes assignments to exported symbols.
-        context.enableSubstitution(215 /* PrefixUnaryExpression */); // Substitutes updates to exported symbols.
-        context.enableSubstitution(216 /* PostfixUnaryExpression */); // Substitutes updates to exported symbols.
-        context.enableSubstitution(290 /* ShorthandPropertyAssignment */); // Substitutes shorthand property assignments for imported/exported symbols.
-        context.enableEmitNotification(298 /* SourceFile */); // Restore state when substituting nodes in a file.
+        context.enableSubstitution(206 /* CallExpression */); // Substitute calls to imported/exported symbols to avoid incorrect `this`.
+        context.enableSubstitution(208 /* TaggedTemplateExpression */); // Substitute calls to imported/exported symbols to avoid incorrect `this`.
+        context.enableSubstitution(79 /* Identifier */); // Substitutes expression identifiers with imported/exported symbols.
+        context.enableSubstitution(219 /* BinaryExpression */); // Substitutes assignments to exported symbols.
+        context.enableSubstitution(292 /* ShorthandPropertyAssignment */); // Substitutes shorthand property assignments for imported/exported symbols.
+        context.enableEmitNotification(300 /* SourceFile */); // Restore state when substituting nodes in a file.
         var moduleInfoMap = []; // The ExternalModuleInfo for each file.
         var deferredExports = []; // Exports to defer until an EndOfDeclarationMarker is found.
         var currentSourceFile; // The current file.
         var currentModuleInfo; // The ExternalModuleInfo for the current file.
-        var noSubstitution; // Set of nodes for which substitution rules should be ignored.
+        var noSubstitution = []; // Set of nodes for which substitution rules should be ignored.
         var needUMDDynamicImportHelper;
         return ts.chainBundle(context, transformSourceFile);
         /**
@@ -97782,7 +99841,7 @@
             startLexicalEnvironment();
             var statements = [];
             var ensureUseStrict = ts.getStrictOptionValue(compilerOptions, "alwaysStrict") || (!compilerOptions.noImplicitUseStrict && ts.isExternalModule(currentSourceFile));
-            var statementOffset = factory.copyPrologue(node.statements, statements, ensureUseStrict && !ts.isJsonSourceFile(node), sourceElementVisitor);
+            var statementOffset = factory.copyPrologue(node.statements, statements, ensureUseStrict && !ts.isJsonSourceFile(node), topLevelVisitor);
             if (shouldEmitUnderscoreUnderscoreESModule()) {
                 ts.append(statements, createUnderscoreUnderscoreESModule());
             }
@@ -97792,8 +99851,8 @@
                     ts.append(statements, factory.createExpressionStatement(ts.reduceLeft(currentModuleInfo.exportedNames.slice(i, i + chunkSize), function (prev, nextId) { return factory.createAssignment(factory.createPropertyAccessExpression(factory.createIdentifier("exports"), factory.createIdentifier(ts.idText(nextId))), prev); }, factory.createVoidZero())));
                 }
             }
-            ts.append(statements, ts.visitNode(currentModuleInfo.externalHelpersImportDeclaration, sourceElementVisitor, ts.isStatement));
-            ts.addRange(statements, ts.visitNodes(node.statements, sourceElementVisitor, ts.isStatement, statementOffset));
+            ts.append(statements, ts.visitNode(currentModuleInfo.externalHelpersImportDeclaration, topLevelVisitor, ts.isStatement));
+            ts.addRange(statements, ts.visitNodes(node.statements, topLevelVisitor, ts.isStatement, statementOffset));
             addExportEqualsIfNeeded(statements, /*emitAsReturn*/ false);
             ts.insertStatementsAfterStandardPrologue(statements, endLexicalEnvironment());
             var updated = factory.updateSourceFile(node, ts.setTextRange(factory.createNodeArray(statements), node.statements));
@@ -97835,14 +99894,14 @@
             //     define(mofactory.updateSourceFile", "module2"], function ...
             var updated = factory.updateSourceFile(node, ts.setTextRange(factory.createNodeArray([
                 factory.createExpressionStatement(factory.createCallExpression(define, 
-                /*typeArguments*/ undefined, __spreadArray(__spreadArray([], (moduleName ? [moduleName] : [])), [
+                /*typeArguments*/ undefined, __spreadArray(__spreadArray([], (moduleName ? [moduleName] : []), true), [
                     // Add the dependency array argument:
                     //
                     //     ["require", "exports", module1", "module2", ...]
                     factory.createArrayLiteralExpression(jsonSourceFile ? ts.emptyArray : __spreadArray(__spreadArray([
                         factory.createStringLiteral("require"),
                         factory.createStringLiteral("exports")
-                    ], aliasedModuleNames), unaliasedModuleNames)),
+                    ], aliasedModuleNames, true), unaliasedModuleNames, true)),
                     // Add the module body function argument:
                     //
                     //     function (require, exports, module1, module2) ...
@@ -97855,9 +99914,9 @@
                         /*typeParameters*/ undefined, __spreadArray([
                             factory.createParameterDeclaration(/*decorators*/ undefined, /*modifiers*/ undefined, /*dotDotDotToken*/ undefined, "require"),
                             factory.createParameterDeclaration(/*decorators*/ undefined, /*modifiers*/ undefined, /*dotDotDotToken*/ undefined, "exports")
-                        ], importAliasNames), 
+                        ], importAliasNames, true), 
                         /*type*/ undefined, transformAsynchronousModuleBody(node))
-                ])))
+                ], false)))
             ]), 
             /*location*/ node.statements));
             ts.addEmitHelpers(updated, context.readEmitHelpers());
@@ -97891,13 +99950,13 @@
                     ts.setEmitFlags(factory.createIfStatement(factory.createStrictInequality(factory.createIdentifier("v"), factory.createIdentifier("undefined")), factory.createExpressionStatement(factory.createAssignment(factory.createPropertyAccessExpression(factory.createIdentifier("module"), "exports"), factory.createIdentifier("v")))), 1 /* SingleLine */)
                 ]), factory.createIfStatement(factory.createLogicalAnd(factory.createTypeCheck(factory.createIdentifier("define"), "function"), factory.createPropertyAccessExpression(factory.createIdentifier("define"), "amd")), factory.createBlock([
                     factory.createExpressionStatement(factory.createCallExpression(factory.createIdentifier("define"), 
-                    /*typeArguments*/ undefined, __spreadArray(__spreadArray([], (moduleName ? [moduleName] : [])), [
+                    /*typeArguments*/ undefined, __spreadArray(__spreadArray([], (moduleName ? [moduleName] : []), true), [
                         factory.createArrayLiteralExpression(__spreadArray(__spreadArray([
                             factory.createStringLiteral("require"),
                             factory.createStringLiteral("exports")
-                        ], aliasedModuleNames), unaliasedModuleNames)),
+                        ], aliasedModuleNames, true), unaliasedModuleNames, true)),
                         factory.createIdentifier("factory")
-                    ])))
+                    ], false)))
                 ])))
             ], 
             /*multiLine*/ true), 
@@ -97926,7 +99985,7 @@
                     /*typeParameters*/ undefined, __spreadArray([
                         factory.createParameterDeclaration(/*decorators*/ undefined, /*modifiers*/ undefined, /*dotDotDotToken*/ undefined, "require"),
                         factory.createParameterDeclaration(/*decorators*/ undefined, /*modifiers*/ undefined, /*dotDotDotToken*/ undefined, "exports")
-                    ], importAliasNames), 
+                    ], importAliasNames, true), 
                     /*type*/ undefined, transformAsynchronousModuleBody(node))
                 ]))
             ]), 
@@ -98003,7 +100062,7 @@
         function transformAsynchronousModuleBody(node) {
             startLexicalEnvironment();
             var statements = [];
-            var statementOffset = factory.copyPrologue(node.statements, statements, /*ensureUseStrict*/ !compilerOptions.noImplicitUseStrict, sourceElementVisitor);
+            var statementOffset = factory.copyPrologue(node.statements, statements, /*ensureUseStrict*/ !compilerOptions.noImplicitUseStrict, topLevelVisitor);
             if (shouldEmitUnderscoreUnderscoreESModule()) {
                 ts.append(statements, createUnderscoreUnderscoreESModule());
             }
@@ -98011,11 +100070,11 @@
                 ts.append(statements, factory.createExpressionStatement(ts.reduceLeft(currentModuleInfo.exportedNames, function (prev, nextId) { return factory.createAssignment(factory.createPropertyAccessExpression(factory.createIdentifier("exports"), factory.createIdentifier(ts.idText(nextId))), prev); }, factory.createVoidZero())));
             }
             // Visit each statement of the module body.
-            ts.append(statements, ts.visitNode(currentModuleInfo.externalHelpersImportDeclaration, sourceElementVisitor, ts.isStatement));
+            ts.append(statements, ts.visitNode(currentModuleInfo.externalHelpersImportDeclaration, topLevelVisitor, ts.isStatement));
             if (moduleKind === ts.ModuleKind.AMD) {
                 ts.addRange(statements, ts.mapDefined(currentModuleInfo.externalImports, getAMDImportExpressionForImport));
             }
-            ts.addRange(statements, ts.visitNodes(node.statements, sourceElementVisitor, ts.isStatement, statementOffset));
+            ts.addRange(statements, ts.visitNodes(node.statements, topLevelVisitor, ts.isStatement, statementOffset));
             // Append the 'export =' statement if provided.
             addExportEqualsIfNeeded(statements, /*emitAsReturn*/ true);
             // End the lexical environment for the module body
@@ -98037,7 +100096,7 @@
          */
         function addExportEqualsIfNeeded(statements, emitAsReturn) {
             if (currentModuleInfo.exportEquals) {
-                var expressionResult = ts.visitNode(currentModuleInfo.exportEquals.expression, moduleExpressionElementVisitor);
+                var expressionResult = ts.visitNode(currentModuleInfo.exportEquals.expression, visitor);
                 if (expressionResult) {
                     if (emitAsReturn) {
                         var statement = factory.createReturnStatement(expressionResult);
@@ -98062,69 +100121,90 @@
          *
          * @param node The node to visit.
          */
-        function sourceElementVisitor(node) {
+        function topLevelVisitor(node) {
             switch (node.kind) {
-                case 262 /* ImportDeclaration */:
+                case 264 /* ImportDeclaration */:
                     return visitImportDeclaration(node);
-                case 261 /* ImportEqualsDeclaration */:
+                case 263 /* ImportEqualsDeclaration */:
                     return visitImportEqualsDeclaration(node);
-                case 268 /* ExportDeclaration */:
+                case 270 /* ExportDeclaration */:
                     return visitExportDeclaration(node);
-                case 267 /* ExportAssignment */:
+                case 269 /* ExportAssignment */:
                     return visitExportAssignment(node);
-                case 233 /* VariableStatement */:
+                case 235 /* VariableStatement */:
                     return visitVariableStatement(node);
-                case 252 /* FunctionDeclaration */:
+                case 254 /* FunctionDeclaration */:
                     return visitFunctionDeclaration(node);
-                case 253 /* ClassDeclaration */:
+                case 255 /* ClassDeclaration */:
                     return visitClassDeclaration(node);
-                case 342 /* MergeDeclarationMarker */:
+                case 347 /* MergeDeclarationMarker */:
                     return visitMergeDeclarationMarker(node);
-                case 343 /* EndOfDeclarationMarker */:
+                case 348 /* EndOfDeclarationMarker */:
                     return visitEndOfDeclarationMarker(node);
                 default:
-                    return ts.visitEachChild(node, moduleExpressionElementVisitor, context);
+                    return visitor(node);
             }
         }
-        function moduleExpressionElementVisitor(node) {
-            // This visitor does not need to descend into the tree if there is no dynamic import or destructuring assignment,
+        function visitorWorker(node, valueIsDiscarded) {
+            // This visitor does not need to descend into the tree if there is no dynamic import, destructuring assignment, or update expression
             // as export/import statements are only transformed at the top level of a file.
-            if (!(node.transformFlags & 4194304 /* ContainsDynamicImport */) && !(node.transformFlags & 2048 /* ContainsDestructuringAssignment */)) {
+            if (!(node.transformFlags & (4194304 /* ContainsDynamicImport */ | 2048 /* ContainsDestructuringAssignment */ | 67108864 /* ContainsUpdateExpressionForIdentifier */))) {
                 return node;
             }
-            if (ts.isImportCall(node)) {
-                return visitImportCallExpression(node);
+            switch (node.kind) {
+                case 240 /* ForStatement */:
+                    return visitForStatement(node);
+                case 236 /* ExpressionStatement */:
+                    return visitExpressionStatement(node);
+                case 210 /* ParenthesizedExpression */:
+                    return visitParenthesizedExpression(node, valueIsDiscarded);
+                case 345 /* PartiallyEmittedExpression */:
+                    return visitPartiallyEmittedExpression(node, valueIsDiscarded);
+                case 206 /* CallExpression */:
+                    if (ts.isImportCall(node)) {
+                        return visitImportCallExpression(node);
+                    }
+                    break;
+                case 219 /* BinaryExpression */:
+                    if (ts.isDestructuringAssignment(node)) {
+                        return visitDestructuringAssignment(node, valueIsDiscarded);
+                    }
+                    break;
+                case 217 /* PrefixUnaryExpression */:
+                case 218 /* PostfixUnaryExpression */:
+                    return visitPreOrPostfixUnaryExpression(node, valueIsDiscarded);
             }
-            else if (ts.isDestructuringAssignment(node)) {
-                return visitDestructuringAssignment(node);
-            }
-            else {
-                return ts.visitEachChild(node, moduleExpressionElementVisitor, context);
-            }
+            return ts.visitEachChild(node, visitor, context);
+        }
+        function visitor(node) {
+            return visitorWorker(node, /*valueIsDiscarded*/ false);
+        }
+        function discardedValueVisitor(node) {
+            return visitorWorker(node, /*valueIsDiscarded*/ true);
         }
         function destructuringNeedsFlattening(node) {
             if (ts.isObjectLiteralExpression(node)) {
                 for (var _i = 0, _a = node.properties; _i < _a.length; _i++) {
                     var elem = _a[_i];
                     switch (elem.kind) {
-                        case 289 /* PropertyAssignment */:
+                        case 291 /* PropertyAssignment */:
                             if (destructuringNeedsFlattening(elem.initializer)) {
                                 return true;
                             }
                             break;
-                        case 290 /* ShorthandPropertyAssignment */:
+                        case 292 /* ShorthandPropertyAssignment */:
                             if (destructuringNeedsFlattening(elem.name)) {
                                 return true;
                             }
                             break;
-                        case 291 /* SpreadAssignment */:
+                        case 293 /* SpreadAssignment */:
                             if (destructuringNeedsFlattening(elem.expression)) {
                                 return true;
                             }
                             break;
-                        case 166 /* MethodDeclaration */:
-                        case 168 /* GetAccessor */:
-                        case 169 /* SetAccessor */:
+                        case 167 /* MethodDeclaration */:
+                        case 170 /* GetAccessor */:
+                        case 171 /* SetAccessor */:
                             return false;
                         default: ts.Debug.assertNever(elem, "Unhandled object member kind");
                     }
@@ -98148,15 +100228,75 @@
             }
             return false;
         }
-        function visitDestructuringAssignment(node) {
+        function visitDestructuringAssignment(node, valueIsDiscarded) {
             if (destructuringNeedsFlattening(node.left)) {
-                return ts.flattenDestructuringAssignment(node, moduleExpressionElementVisitor, context, 0 /* All */, /*needsValue*/ false, createAllExportExpressions);
+                return ts.flattenDestructuringAssignment(node, visitor, context, 0 /* All */, !valueIsDiscarded, createAllExportExpressions);
             }
-            return ts.visitEachChild(node, moduleExpressionElementVisitor, context);
+            return ts.visitEachChild(node, visitor, context);
+        }
+        function visitForStatement(node) {
+            return factory.updateForStatement(node, ts.visitNode(node.initializer, discardedValueVisitor, ts.isForInitializer), ts.visitNode(node.condition, visitor, ts.isExpression), ts.visitNode(node.incrementor, discardedValueVisitor, ts.isExpression), ts.visitIterationBody(node.statement, visitor, context));
+        }
+        function visitExpressionStatement(node) {
+            return factory.updateExpressionStatement(node, ts.visitNode(node.expression, discardedValueVisitor, ts.isExpression));
+        }
+        function visitParenthesizedExpression(node, valueIsDiscarded) {
+            return factory.updateParenthesizedExpression(node, ts.visitNode(node.expression, valueIsDiscarded ? discardedValueVisitor : visitor, ts.isExpression));
+        }
+        function visitPartiallyEmittedExpression(node, valueIsDiscarded) {
+            return factory.updatePartiallyEmittedExpression(node, ts.visitNode(node.expression, valueIsDiscarded ? discardedValueVisitor : visitor, ts.isExpression));
+        }
+        function visitPreOrPostfixUnaryExpression(node, valueIsDiscarded) {
+            // When we see a prefix or postfix increment expression whose operand is an exported
+            // symbol, we should ensure all exports of that symbol are updated with the correct
+            // value.
+            //
+            // - We do not transform generated identifiers for any reason.
+            // - We do not transform identifiers tagged with the LocalName flag.
+            // - We do not transform identifiers that were originally the name of an enum or
+            //   namespace due to how they are transformed in TypeScript.
+            // - We only transform identifiers that are exported at the top level.
+            if ((node.operator === 45 /* PlusPlusToken */ || node.operator === 46 /* MinusMinusToken */)
+                && ts.isIdentifier(node.operand)
+                && !ts.isGeneratedIdentifier(node.operand)
+                && !ts.isLocalName(node.operand)
+                && !ts.isDeclarationNameOfEnumOrNamespace(node.operand)) {
+                var exportedNames = getExports(node.operand);
+                if (exportedNames) {
+                    var temp = void 0;
+                    var expression = ts.visitNode(node.operand, visitor, ts.isExpression);
+                    if (ts.isPrefixUnaryExpression(node)) {
+                        expression = factory.updatePrefixUnaryExpression(node, expression);
+                    }
+                    else {
+                        expression = factory.updatePostfixUnaryExpression(node, expression);
+                        if (!valueIsDiscarded) {
+                            temp = factory.createTempVariable(hoistVariableDeclaration);
+                            expression = factory.createAssignment(temp, expression);
+                            ts.setTextRange(expression, node);
+                        }
+                        expression = factory.createComma(expression, factory.cloneNode(node.operand));
+                        ts.setTextRange(expression, node);
+                    }
+                    for (var _i = 0, exportedNames_1 = exportedNames; _i < exportedNames_1.length; _i++) {
+                        var exportName = exportedNames_1[_i];
+                        noSubstitution[ts.getNodeId(expression)] = true;
+                        expression = createExportExpression(exportName, expression);
+                        ts.setTextRange(expression, node);
+                    }
+                    if (temp) {
+                        noSubstitution[ts.getNodeId(expression)] = true;
+                        expression = factory.createComma(expression, temp);
+                        ts.setTextRange(expression, node);
+                    }
+                    return expression;
+                }
+            }
+            return ts.visitEachChild(node, visitor, context);
         }
         function visitImportCallExpression(node) {
             var externalModuleName = ts.getExternalModuleNameLiteral(factory, node, currentSourceFile, host, resolver, compilerOptions);
-            var firstArgument = ts.visitNode(ts.firstOrUndefined(node.arguments), moduleExpressionElementVisitor);
+            var firstArgument = ts.visitNode(ts.firstOrUndefined(node.arguments), visitor);
             // Only use the external module name if it differs from the first argument. This allows us to preserve the quote style of the argument on output.
             var argument = externalModuleName && (!firstArgument || !ts.isStringLiteral(firstArgument) || firstArgument.text !== externalModuleName.text) ? externalModuleName : firstArgument;
             var containsLexicalThis = !!(node.transformFlags & 8192 /* ContainsLexicalThis */);
@@ -98488,10 +100628,10 @@
             if (original && hasAssociatedEndOfDeclarationMarker(original)) {
                 // Defer exports until we encounter an EndOfDeclarationMarker node
                 var id = ts.getOriginalNodeId(node);
-                deferredExports[id] = appendExportStatement(deferredExports[id], factory.createIdentifier("default"), ts.visitNode(node.expression, moduleExpressionElementVisitor), /*location*/ node, /*allowComments*/ true);
+                deferredExports[id] = appendExportStatement(deferredExports[id], factory.createIdentifier("default"), ts.visitNode(node.expression, visitor), /*location*/ node, /*allowComments*/ true);
             }
             else {
-                statements = appendExportStatement(statements, factory.createIdentifier("default"), ts.visitNode(node.expression, moduleExpressionElementVisitor), /*location*/ node, /*allowComments*/ true);
+                statements = appendExportStatement(statements, factory.createIdentifier("default"), ts.visitNode(node.expression, visitor), /*location*/ node, /*allowComments*/ true);
             }
             return ts.singleOrMany(statements);
         }
@@ -98505,13 +100645,13 @@
             if (ts.hasSyntacticModifier(node, 1 /* Export */)) {
                 statements = ts.append(statements, ts.setOriginalNode(ts.setTextRange(factory.createFunctionDeclaration(
                 /*decorators*/ undefined, ts.visitNodes(node.modifiers, modifierVisitor, ts.isModifier), node.asteriskToken, factory.getDeclarationName(node, /*allowComments*/ true, /*allowSourceMaps*/ true), 
-                /*typeParameters*/ undefined, ts.visitNodes(node.parameters, moduleExpressionElementVisitor), 
-                /*type*/ undefined, ts.visitEachChild(node.body, moduleExpressionElementVisitor, context)), 
+                /*typeParameters*/ undefined, ts.visitNodes(node.parameters, visitor), 
+                /*type*/ undefined, ts.visitEachChild(node.body, visitor, context)), 
                 /*location*/ node), 
                 /*original*/ node));
             }
             else {
-                statements = ts.append(statements, ts.visitEachChild(node, moduleExpressionElementVisitor, context));
+                statements = ts.append(statements, ts.visitEachChild(node, visitor, context));
             }
             if (hasAssociatedEndOfDeclarationMarker(node)) {
                 // Defer exports until we encounter an EndOfDeclarationMarker node
@@ -98533,10 +100673,10 @@
             if (ts.hasSyntacticModifier(node, 1 /* Export */)) {
                 statements = ts.append(statements, ts.setOriginalNode(ts.setTextRange(factory.createClassDeclaration(
                 /*decorators*/ undefined, ts.visitNodes(node.modifiers, modifierVisitor, ts.isModifier), factory.getDeclarationName(node, /*allowComments*/ true, /*allowSourceMaps*/ true), 
-                /*typeParameters*/ undefined, ts.visitNodes(node.heritageClauses, moduleExpressionElementVisitor), ts.visitNodes(node.members, moduleExpressionElementVisitor)), node), node));
+                /*typeParameters*/ undefined, ts.visitNodes(node.heritageClauses, visitor), ts.visitNodes(node.members, visitor)), node), node));
             }
             else {
-                statements = ts.append(statements, ts.visitEachChild(node, moduleExpressionElementVisitor, context));
+                statements = ts.append(statements, ts.visitEachChild(node, visitor, context));
             }
             if (hasAssociatedEndOfDeclarationMarker(node)) {
                 // Defer exports until we encounter an EndOfDeclarationMarker node
@@ -98573,7 +100713,7 @@
                         if (!ts.isBindingPattern(variable.name) && (ts.isArrowFunction(variable.initializer) || ts.isFunctionExpression(variable.initializer) || ts.isClassExpression(variable.initializer))) {
                             var expression = factory.createAssignment(ts.setTextRange(factory.createPropertyAccessExpression(factory.createIdentifier("exports"), variable.name), 
                             /*location*/ variable.name), factory.createIdentifier(ts.getTextOfIdentifierOrLiteral(variable.name)));
-                            var updatedVariable = factory.createVariableDeclaration(variable.name, variable.exclamationToken, variable.type, ts.visitNode(variable.initializer, moduleExpressionElementVisitor));
+                            var updatedVariable = factory.createVariableDeclaration(variable.name, variable.exclamationToken, variable.type, ts.visitNode(variable.initializer, visitor));
                             variables = ts.append(variables, updatedVariable);
                             expressions = ts.append(expressions, expression);
                             removeCommentsOnExpressions = true;
@@ -98595,7 +100735,7 @@
                 }
             }
             else {
-                statements = ts.append(statements, ts.visitEachChild(node, moduleExpressionElementVisitor, context));
+                statements = ts.append(statements, ts.visitEachChild(node, visitor, context));
             }
             if (hasAssociatedEndOfDeclarationMarker(node)) {
                 // Defer exports until we encounter an EndOfDeclarationMarker node
@@ -98612,8 +100752,8 @@
             if (exportedNames) {
                 // For each additional export of the declaration, apply an export assignment.
                 var expression = ts.isExportName(name) ? value : factory.createAssignment(name, value);
-                for (var _i = 0, exportedNames_1 = exportedNames; _i < exportedNames_1.length; _i++) {
-                    var exportName = exportedNames_1[_i];
+                for (var _i = 0, exportedNames_2 = exportedNames; _i < exportedNames_2.length; _i++) {
+                    var exportName = exportedNames_2[_i];
                     // Mark the node to prevent triggering substitution.
                     ts.setEmitFlags(expression, 4 /* NoSubstitution */);
                     expression = createExportExpression(exportName, expression, /*location*/ location);
@@ -98629,13 +100769,13 @@
          */
         function transformInitializedVariable(node) {
             if (ts.isBindingPattern(node.name)) {
-                return ts.flattenDestructuringAssignment(ts.visitNode(node, moduleExpressionElementVisitor), 
+                return ts.flattenDestructuringAssignment(ts.visitNode(node, visitor), 
                 /*visitor*/ undefined, context, 0 /* All */, 
                 /*needsValue*/ false, createAllExportExpressions);
             }
             else {
                 return factory.createAssignment(ts.setTextRange(factory.createPropertyAccessExpression(factory.createIdentifier("exports"), node.name), 
-                /*location*/ node.name), node.initializer ? ts.visitNode(node.initializer, moduleExpressionElementVisitor) : factory.createVoidZero());
+                /*location*/ node.name), node.initializer ? ts.visitNode(node.initializer, visitor) : factory.createVoidZero());
             }
         }
         /**
@@ -98652,7 +100792,7 @@
             //
             // To balance the declaration, add the exports of the elided variable
             // statement.
-            if (hasAssociatedEndOfDeclarationMarker(node) && node.original.kind === 233 /* VariableStatement */) {
+            if (hasAssociatedEndOfDeclarationMarker(node) && node.original.kind === 235 /* VariableStatement */) {
                 var id = ts.getOriginalNodeId(node);
                 deferredExports[id] = appendExportsOfVariableStatement(deferredExports[id], node.original);
             }
@@ -98707,10 +100847,10 @@
             var namedBindings = importClause.namedBindings;
             if (namedBindings) {
                 switch (namedBindings.kind) {
-                    case 264 /* NamespaceImport */:
+                    case 266 /* NamespaceImport */:
                         statements = appendExportsOfDeclaration(statements, namedBindings);
                         break;
-                    case 265 /* NamedImports */:
+                    case 267 /* NamedImports */:
                         for (var _i = 0, _a = namedBindings.elements; _i < _a.length; _i++) {
                             var importBinding = _a[_i];
                             statements = appendExportsOfDeclaration(statements, importBinding, /* liveBinding */ true);
@@ -98906,8 +101046,8 @@
         function modifierVisitor(node) {
             // Elide module-specific modifiers.
             switch (node.kind) {
-                case 92 /* ExportKeyword */:
-                case 87 /* DefaultKeyword */:
+                case 93 /* ExportKeyword */:
+                case 88 /* DefaultKeyword */:
                     return undefined;
             }
             return node;
@@ -98923,14 +101063,12 @@
          * @param emit A callback used to emit the node in the printer.
          */
         function onEmitNode(hint, node, emitCallback) {
-            if (node.kind === 298 /* SourceFile */) {
+            if (node.kind === 300 /* SourceFile */) {
                 currentSourceFile = node;
                 currentModuleInfo = moduleInfoMap[ts.getOriginalNodeId(currentSourceFile)];
-                noSubstitution = [];
                 previousOnEmitNode(hint, node, emitCallback);
                 currentSourceFile = undefined;
                 currentModuleInfo = undefined;
-                noSubstitution = undefined;
             }
             else {
                 previousOnEmitNode(hint, node, emitCallback);
@@ -98985,13 +101123,36 @@
          */
         function substituteExpression(node) {
             switch (node.kind) {
-                case 78 /* Identifier */:
+                case 79 /* Identifier */:
                     return substituteExpressionIdentifier(node);
-                case 217 /* BinaryExpression */:
+                case 206 /* CallExpression */:
+                    return substituteCallExpression(node);
+                case 208 /* TaggedTemplateExpression */:
+                    return substituteTaggedTemplateExpression(node);
+                case 219 /* BinaryExpression */:
                     return substituteBinaryExpression(node);
-                case 216 /* PostfixUnaryExpression */:
-                case 215 /* PrefixUnaryExpression */:
-                    return substituteUnaryExpression(node);
+            }
+            return node;
+        }
+        function substituteCallExpression(node) {
+            if (ts.isIdentifier(node.expression)) {
+                var expression = substituteExpressionIdentifier(node.expression);
+                noSubstitution[ts.getNodeId(expression)] = true;
+                if (!ts.isIdentifier(expression)) {
+                    return ts.addEmitFlags(factory.updateCallExpression(node, expression, 
+                    /*typeArguments*/ undefined, node.arguments), 536870912 /* IndirectCall */);
+                }
+            }
+            return node;
+        }
+        function substituteTaggedTemplateExpression(node) {
+            if (ts.isIdentifier(node.tag)) {
+                var tag = substituteExpressionIdentifier(node.tag);
+                noSubstitution[ts.getNodeId(tag)] = true;
+                if (!ts.isIdentifier(tag)) {
+                    return ts.addEmitFlags(factory.updateTaggedTemplateExpression(node, tag, 
+                    /*typeArguments*/ undefined, node.template), 536870912 /* IndirectCall */);
+                }
             }
             return node;
         }
@@ -99012,7 +101173,7 @@
             }
             else if (!(ts.isGeneratedIdentifier(node) && !(node.autoGenerateFlags & 64 /* AllowNameSubstitution */)) && !ts.isLocalName(node)) {
                 var exportContainer = resolver.getReferencedExportContainer(node, ts.isExportName(node));
-                if (exportContainer && exportContainer.kind === 298 /* SourceFile */) {
+                if (exportContainer && exportContainer.kind === 300 /* SourceFile */) {
                     return ts.setTextRange(factory.createPropertyAccessExpression(factory.createIdentifier("exports"), factory.cloneNode(node)), 
                     /*location*/ node);
                 }
@@ -99054,54 +101215,11 @@
                 if (exportedNames) {
                     // For each additional export of the declaration, apply an export assignment.
                     var expression = node;
-                    for (var _i = 0, exportedNames_2 = exportedNames; _i < exportedNames_2.length; _i++) {
-                        var exportName = exportedNames_2[_i];
-                        // Mark the node to prevent triggering this rule again.
-                        noSubstitution[ts.getNodeId(expression)] = true;
-                        expression = createExportExpression(exportName, expression, /*location*/ node);
-                    }
-                    return expression;
-                }
-            }
-            return node;
-        }
-        /**
-         * Substitution for a UnaryExpression that may contain an imported or exported symbol.
-         *
-         * @param node The node to substitute.
-         */
-        function substituteUnaryExpression(node) {
-            // When we see a prefix or postfix increment expression whose operand is an exported
-            // symbol, we should ensure all exports of that symbol are updated with the correct
-            // value.
-            //
-            // - We do not substitute generated identifiers for any reason.
-            // - We do not substitute identifiers tagged with the LocalName flag.
-            // - We do not substitute identifiers that were originally the name of an enum or
-            //   namespace due to how they are transformed in TypeScript.
-            // - We only substitute identifiers that are exported at the top level.
-            if ((node.operator === 45 /* PlusPlusToken */ || node.operator === 46 /* MinusMinusToken */)
-                && ts.isIdentifier(node.operand)
-                && !ts.isGeneratedIdentifier(node.operand)
-                && !ts.isLocalName(node.operand)
-                && !ts.isDeclarationNameOfEnumOrNamespace(node.operand)) {
-                var exportedNames = getExports(node.operand);
-                if (exportedNames) {
-                    var expression = node.kind === 216 /* PostfixUnaryExpression */
-                        ? ts.setTextRange(factory.createPrefixUnaryExpression(node.operator, node.operand), 
-                        /*location*/ node)
-                        : node;
                     for (var _i = 0, exportedNames_3 = exportedNames; _i < exportedNames_3.length; _i++) {
                         var exportName = exportedNames_3[_i];
                         // Mark the node to prevent triggering this rule again.
                         noSubstitution[ts.getNodeId(expression)] = true;
-                        expression = createExportExpression(exportName, expression);
-                    }
-                    if (node.kind === 216 /* PostfixUnaryExpression */) {
-                        noSubstitution[ts.getNodeId(expression)] = true;
-                        expression = node.operator === 45 /* PlusPlusToken */
-                            ? factory.createSubtract(expression, factory.createNumericLiteral(1))
-                            : factory.createAdd(expression, factory.createNumericLiteral(1));
+                        expression = createExportExpression(exportName, expression, /*location*/ node);
                     }
                     return expression;
                 }
@@ -99144,13 +101262,11 @@
         var previousOnEmitNode = context.onEmitNode;
         context.onSubstituteNode = onSubstituteNode;
         context.onEmitNode = onEmitNode;
-        context.enableSubstitution(78 /* Identifier */); // Substitutes expression identifiers for imported symbols.
-        context.enableSubstitution(290 /* ShorthandPropertyAssignment */); // Substitutes expression identifiers for imported symbols
-        context.enableSubstitution(217 /* BinaryExpression */); // Substitutes assignments to exported symbols.
-        context.enableSubstitution(215 /* PrefixUnaryExpression */); // Substitutes updates to exported symbols.
-        context.enableSubstitution(216 /* PostfixUnaryExpression */); // Substitutes updates to exported symbols.
-        context.enableSubstitution(227 /* MetaProperty */); // Substitutes 'import.meta'
-        context.enableEmitNotification(298 /* SourceFile */); // Restore state when substituting nodes in a file.
+        context.enableSubstitution(79 /* Identifier */); // Substitutes expression identifiers for imported symbols.
+        context.enableSubstitution(292 /* ShorthandPropertyAssignment */); // Substitutes expression identifiers for imported symbols
+        context.enableSubstitution(219 /* BinaryExpression */); // Substitutes assignments to exported symbols.
+        context.enableSubstitution(229 /* MetaProperty */); // Substitutes 'import.meta'
+        context.enableEmitNotification(300 /* SourceFile */); // Restore state when substituting nodes in a file.
         var moduleInfoMap = []; // The ExternalModuleInfo for each file.
         var deferredExports = []; // Exports to defer until an EndOfDeclarationMarker is found.
         var exportFunctionsMap = []; // The export function associated with a source file.
@@ -99316,7 +101432,7 @@
             startLexicalEnvironment();
             // Add any prologue directives.
             var ensureUseStrict = ts.getStrictOptionValue(compilerOptions, "alwaysStrict") || (!compilerOptions.noImplicitUseStrict && ts.isExternalModule(currentSourceFile));
-            var statementOffset = factory.copyPrologue(node.statements, statements, ensureUseStrict, sourceElementVisitor);
+            var statementOffset = factory.copyPrologue(node.statements, statements, ensureUseStrict, topLevelVisitor);
             // var __moduleName = context_1 && context_1.id;
             statements.push(factory.createVariableStatement(
             /*modifiers*/ undefined, factory.createVariableDeclarationList([
@@ -99325,13 +101441,13 @@
                 /*type*/ undefined, factory.createLogicalAnd(contextObject, factory.createPropertyAccessExpression(contextObject, "id")))
             ])));
             // Visit the synthetic external helpers import declaration if present
-            ts.visitNode(moduleInfo.externalHelpersImportDeclaration, sourceElementVisitor, ts.isStatement);
+            ts.visitNode(moduleInfo.externalHelpersImportDeclaration, topLevelVisitor, ts.isStatement);
             // Visit the statements of the source file, emitting any transformations into
             // the `executeStatements` array. We do this *before* we fill the `setters` array
             // as we both emit transformations as well as aggregate some data used when creating
             // setters. This allows us to reduce the number of times we need to loop through the
             // statements of the source file.
-            var executeStatements = ts.visitNodes(node.statements, sourceElementVisitor, ts.isStatement, statementOffset);
+            var executeStatements = ts.visitNodes(node.statements, topLevelVisitor, ts.isStatement, statementOffset);
             // Emit early exports for function declarations.
             ts.addRange(statements, hoistedStatements);
             // We emit hoisted variables early to align roughly with our previous emit output.
@@ -99374,7 +101490,7 @@
                 var hasExportDeclarationWithExportClause = false;
                 for (var _i = 0, _a = moduleInfo.externalImports; _i < _a.length; _i++) {
                     var externalImport = _a[_i];
-                    if (externalImport.kind === 268 /* ExportDeclaration */ && externalImport.exportClause) {
+                    if (externalImport.kind === 270 /* ExportDeclaration */ && externalImport.exportClause) {
                         hasExportDeclarationWithExportClause = true;
                         break;
                     }
@@ -99464,19 +101580,19 @@
                     var entry = _b[_a];
                     var importVariableName = ts.getLocalNameForExternalImport(factory, entry, currentSourceFile); // TODO: GH#18217
                     switch (entry.kind) {
-                        case 262 /* ImportDeclaration */:
+                        case 264 /* ImportDeclaration */:
                             if (!entry.importClause) {
                                 // 'import "..."' case
                                 // module is imported only for side-effects, no emit required
                                 break;
                             }
                         // falls through
-                        case 261 /* ImportEqualsDeclaration */:
+                        case 263 /* ImportEqualsDeclaration */:
                             ts.Debug.assert(importVariableName !== undefined);
                             // save import into the local
                             statements.push(factory.createExpressionStatement(factory.createAssignment(importVariableName, parameterName)));
                             break;
-                        case 268 /* ExportDeclaration */:
+                        case 270 /* ExportDeclaration */:
                             ts.Debug.assert(importVariableName !== undefined);
                             if (entry.exportClause) {
                                 if (ts.isNamedExports(entry.exportClause)) {
@@ -99533,18 +101649,18 @@
          *
          * @param node The node to visit.
          */
-        function sourceElementVisitor(node) {
+        function topLevelVisitor(node) {
             switch (node.kind) {
-                case 262 /* ImportDeclaration */:
+                case 264 /* ImportDeclaration */:
                     return visitImportDeclaration(node);
-                case 261 /* ImportEqualsDeclaration */:
+                case 263 /* ImportEqualsDeclaration */:
                     return visitImportEqualsDeclaration(node);
-                case 268 /* ExportDeclaration */:
+                case 270 /* ExportDeclaration */:
                     return visitExportDeclaration(node);
-                case 267 /* ExportAssignment */:
+                case 269 /* ExportAssignment */:
                     return visitExportAssignment(node);
                 default:
-                    return nestedElementVisitor(node);
+                    return topLevelNestedVisitor(node);
             }
         }
         /**
@@ -99600,7 +101716,7 @@
                 // Elide `export=` as it is illegal in a SystemJS module.
                 return undefined;
             }
-            var expression = ts.visitNode(node.expression, destructuringAndImportCallVisitor, ts.isExpression);
+            var expression = ts.visitNode(node.expression, visitor, ts.isExpression);
             var original = node.original;
             if (original && hasAssociatedEndOfDeclarationMarker(original)) {
                 // Defer exports until we encounter an EndOfDeclarationMarker node
@@ -99619,11 +101735,11 @@
         function visitFunctionDeclaration(node) {
             if (ts.hasSyntacticModifier(node, 1 /* Export */)) {
                 hoistedStatements = ts.append(hoistedStatements, factory.updateFunctionDeclaration(node, node.decorators, ts.visitNodes(node.modifiers, modifierVisitor, ts.isModifier), node.asteriskToken, factory.getDeclarationName(node, /*allowComments*/ true, /*allowSourceMaps*/ true), 
-                /*typeParameters*/ undefined, ts.visitNodes(node.parameters, destructuringAndImportCallVisitor, ts.isParameterDeclaration), 
-                /*type*/ undefined, ts.visitNode(node.body, destructuringAndImportCallVisitor, ts.isBlock)));
+                /*typeParameters*/ undefined, ts.visitNodes(node.parameters, visitor, ts.isParameterDeclaration), 
+                /*type*/ undefined, ts.visitNode(node.body, visitor, ts.isBlock)));
             }
             else {
-                hoistedStatements = ts.append(hoistedStatements, ts.visitEachChild(node, destructuringAndImportCallVisitor, context));
+                hoistedStatements = ts.append(hoistedStatements, ts.visitEachChild(node, visitor, context));
             }
             if (hasAssociatedEndOfDeclarationMarker(node)) {
                 // Defer exports until we encounter an EndOfDeclarationMarker node
@@ -99646,9 +101762,9 @@
             var name = factory.getLocalName(node);
             hoistVariableDeclaration(name);
             // Rewrite the class declaration into an assignment of a class expression.
-            statements = ts.append(statements, ts.setTextRange(factory.createExpressionStatement(factory.createAssignment(name, ts.setTextRange(factory.createClassExpression(ts.visitNodes(node.decorators, destructuringAndImportCallVisitor, ts.isDecorator), 
+            statements = ts.append(statements, ts.setTextRange(factory.createExpressionStatement(factory.createAssignment(name, ts.setTextRange(factory.createClassExpression(ts.visitNodes(node.decorators, visitor, ts.isDecorator), 
             /*modifiers*/ undefined, node.name, 
-            /*typeParameters*/ undefined, ts.visitNodes(node.heritageClauses, destructuringAndImportCallVisitor, ts.isHeritageClause), ts.visitNodes(node.members, destructuringAndImportCallVisitor, ts.isClassElement)), node))), node));
+            /*typeParameters*/ undefined, ts.visitNodes(node.heritageClauses, visitor, ts.isHeritageClause), ts.visitNodes(node.members, visitor, ts.isClassElement)), node))), node));
             if (hasAssociatedEndOfDeclarationMarker(node)) {
                 // Defer exports until we encounter an EndOfDeclarationMarker node
                 var id = ts.getOriginalNodeId(node);
@@ -99667,7 +101783,7 @@
          */
         function visitVariableStatement(node) {
             if (!shouldHoistVariableDeclarationList(node.declarationList)) {
-                return ts.visitNode(node, destructuringAndImportCallVisitor, ts.isStatement);
+                return ts.visitNode(node, visitor, ts.isStatement);
             }
             var expressions;
             var isExportedDeclaration = ts.hasSyntacticModifier(node, 1 /* Export */);
@@ -99721,7 +101837,7 @@
         function shouldHoistVariableDeclarationList(node) {
             // hoist only non-block scoped declarations or block scoped declarations parented by source file
             return (ts.getEmitFlags(node) & 2097152 /* NoHoisting */) === 0
-                && (enclosingBlockScopedContainer.kind === 298 /* SourceFile */
+                && (enclosingBlockScopedContainer.kind === 300 /* SourceFile */
                     || (ts.getOriginalNode(node).flags & 3 /* BlockScoped */) === 0);
         }
         /**
@@ -99733,9 +101849,9 @@
         function transformInitializedVariable(node, isExportedDeclaration) {
             var createAssignment = isExportedDeclaration ? createExportedVariableAssignment : createNonExportedVariableAssignment;
             return ts.isBindingPattern(node.name)
-                ? ts.flattenDestructuringAssignment(node, destructuringAndImportCallVisitor, context, 0 /* All */, 
+                ? ts.flattenDestructuringAssignment(node, visitor, context, 0 /* All */, 
                 /*needsValue*/ false, createAssignment)
-                : node.initializer ? createAssignment(node.name, ts.visitNode(node.initializer, destructuringAndImportCallVisitor, ts.isExpression)) : node.name;
+                : node.initializer ? createAssignment(node.name, ts.visitNode(node.initializer, visitor, ts.isExpression)) : node.name;
         }
         /**
          * Creates an assignment expression for an exported variable declaration.
@@ -99785,7 +101901,7 @@
             //
             // To balance the declaration, we defer the exports of the elided variable
             // statement until we visit this declaration's `EndOfDeclarationMarker`.
-            if (hasAssociatedEndOfDeclarationMarker(node) && node.original.kind === 233 /* VariableStatement */) {
+            if (hasAssociatedEndOfDeclarationMarker(node) && node.original.kind === 235 /* VariableStatement */) {
                 var id = ts.getOriginalNodeId(node);
                 var isExportedDeclaration = ts.hasSyntacticModifier(node.original, 1 /* Export */);
                 deferredExports[id] = appendExportsOfVariableStatement(deferredExports[id], node.original, isExportedDeclaration);
@@ -99847,10 +101963,10 @@
             var namedBindings = importClause.namedBindings;
             if (namedBindings) {
                 switch (namedBindings.kind) {
-                    case 264 /* NamespaceImport */:
+                    case 266 /* NamespaceImport */:
                         statements = appendExportsOfDeclaration(statements, namedBindings);
                         break;
-                    case 265 /* NamedImports */:
+                    case 267 /* NamedImports */:
                         for (var _i = 0, _a = namedBindings.elements; _i < _a.length; _i++) {
                             var importBinding = _a[_i];
                             statements = appendExportsOfDeclaration(statements, importBinding);
@@ -100028,48 +102144,48 @@
          *
          * @param node The node to visit.
          */
-        function nestedElementVisitor(node) {
+        function topLevelNestedVisitor(node) {
             switch (node.kind) {
-                case 233 /* VariableStatement */:
+                case 235 /* VariableStatement */:
                     return visitVariableStatement(node);
-                case 252 /* FunctionDeclaration */:
+                case 254 /* FunctionDeclaration */:
                     return visitFunctionDeclaration(node);
-                case 253 /* ClassDeclaration */:
+                case 255 /* ClassDeclaration */:
                     return visitClassDeclaration(node);
-                case 238 /* ForStatement */:
-                    return visitForStatement(node);
-                case 239 /* ForInStatement */:
+                case 240 /* ForStatement */:
+                    return visitForStatement(node, /*isTopLevel*/ true);
+                case 241 /* ForInStatement */:
                     return visitForInStatement(node);
-                case 240 /* ForOfStatement */:
+                case 242 /* ForOfStatement */:
                     return visitForOfStatement(node);
-                case 236 /* DoStatement */:
+                case 238 /* DoStatement */:
                     return visitDoStatement(node);
-                case 237 /* WhileStatement */:
+                case 239 /* WhileStatement */:
                     return visitWhileStatement(node);
-                case 246 /* LabeledStatement */:
+                case 248 /* LabeledStatement */:
                     return visitLabeledStatement(node);
-                case 244 /* WithStatement */:
+                case 246 /* WithStatement */:
                     return visitWithStatement(node);
-                case 245 /* SwitchStatement */:
+                case 247 /* SwitchStatement */:
                     return visitSwitchStatement(node);
-                case 259 /* CaseBlock */:
+                case 261 /* CaseBlock */:
                     return visitCaseBlock(node);
-                case 285 /* CaseClause */:
+                case 287 /* CaseClause */:
                     return visitCaseClause(node);
-                case 286 /* DefaultClause */:
+                case 288 /* DefaultClause */:
                     return visitDefaultClause(node);
-                case 248 /* TryStatement */:
+                case 250 /* TryStatement */:
                     return visitTryStatement(node);
-                case 288 /* CatchClause */:
+                case 290 /* CatchClause */:
                     return visitCatchClause(node);
-                case 231 /* Block */:
+                case 233 /* Block */:
                     return visitBlock(node);
-                case 342 /* MergeDeclarationMarker */:
+                case 347 /* MergeDeclarationMarker */:
                     return visitMergeDeclarationMarker(node);
-                case 343 /* EndOfDeclarationMarker */:
+                case 348 /* EndOfDeclarationMarker */:
                     return visitEndOfDeclarationMarker(node);
                 default:
-                    return destructuringAndImportCallVisitor(node);
+                    return visitor(node);
             }
         }
         /**
@@ -100077,10 +102193,10 @@
          *
          * @param node The node to visit.
          */
-        function visitForStatement(node) {
+        function visitForStatement(node, isTopLevel) {
             var savedEnclosingBlockScopedContainer = enclosingBlockScopedContainer;
             enclosingBlockScopedContainer = node;
-            node = factory.updateForStatement(node, node.initializer && visitForInitializer(node.initializer), ts.visitNode(node.condition, destructuringAndImportCallVisitor, ts.isExpression), ts.visitNode(node.incrementor, destructuringAndImportCallVisitor, ts.isExpression), ts.visitIterationBody(node.statement, nestedElementVisitor, context));
+            node = factory.updateForStatement(node, ts.visitNode(node.initializer, isTopLevel ? visitForInitializer : discardedValueVisitor, ts.isForInitializer), ts.visitNode(node.condition, visitor, ts.isExpression), ts.visitNode(node.incrementor, discardedValueVisitor, ts.isExpression), ts.visitIterationBody(node.statement, isTopLevel ? topLevelNestedVisitor : visitor, context));
             enclosingBlockScopedContainer = savedEnclosingBlockScopedContainer;
             return node;
         }
@@ -100092,7 +102208,7 @@
         function visitForInStatement(node) {
             var savedEnclosingBlockScopedContainer = enclosingBlockScopedContainer;
             enclosingBlockScopedContainer = node;
-            node = factory.updateForInStatement(node, visitForInitializer(node.initializer), ts.visitNode(node.expression, destructuringAndImportCallVisitor, ts.isExpression), ts.visitIterationBody(node.statement, nestedElementVisitor, context));
+            node = factory.updateForInStatement(node, visitForInitializer(node.initializer), ts.visitNode(node.expression, visitor, ts.isExpression), ts.visitIterationBody(node.statement, topLevelNestedVisitor, context));
             enclosingBlockScopedContainer = savedEnclosingBlockScopedContainer;
             return node;
         }
@@ -100104,7 +102220,7 @@
         function visitForOfStatement(node) {
             var savedEnclosingBlockScopedContainer = enclosingBlockScopedContainer;
             enclosingBlockScopedContainer = node;
-            node = factory.updateForOfStatement(node, node.awaitModifier, visitForInitializer(node.initializer), ts.visitNode(node.expression, destructuringAndImportCallVisitor, ts.isExpression), ts.visitIterationBody(node.statement, nestedElementVisitor, context));
+            node = factory.updateForOfStatement(node, node.awaitModifier, visitForInitializer(node.initializer), ts.visitNode(node.expression, visitor, ts.isExpression), ts.visitIterationBody(node.statement, topLevelNestedVisitor, context));
             enclosingBlockScopedContainer = savedEnclosingBlockScopedContainer;
             return node;
         }
@@ -100136,7 +102252,7 @@
                 return expressions ? factory.inlineExpressions(expressions) : factory.createOmittedExpression();
             }
             else {
-                return ts.visitEachChild(node, nestedElementVisitor, context);
+                return ts.visitNode(node, discardedValueVisitor, ts.isExpression);
             }
         }
         /**
@@ -100145,7 +102261,7 @@
          * @param node The node to visit.
          */
         function visitDoStatement(node) {
-            return factory.updateDoStatement(node, ts.visitIterationBody(node.statement, nestedElementVisitor, context), ts.visitNode(node.expression, destructuringAndImportCallVisitor, ts.isExpression));
+            return factory.updateDoStatement(node, ts.visitIterationBody(node.statement, topLevelNestedVisitor, context), ts.visitNode(node.expression, visitor, ts.isExpression));
         }
         /**
          * Visits the body of a WhileStatement to hoist declarations.
@@ -100153,7 +102269,7 @@
          * @param node The node to visit.
          */
         function visitWhileStatement(node) {
-            return factory.updateWhileStatement(node, ts.visitNode(node.expression, destructuringAndImportCallVisitor, ts.isExpression), ts.visitIterationBody(node.statement, nestedElementVisitor, context));
+            return factory.updateWhileStatement(node, ts.visitNode(node.expression, visitor, ts.isExpression), ts.visitIterationBody(node.statement, topLevelNestedVisitor, context));
         }
         /**
          * Visits the body of a LabeledStatement to hoist declarations.
@@ -100161,7 +102277,7 @@
          * @param node The node to visit.
          */
         function visitLabeledStatement(node) {
-            return factory.updateLabeledStatement(node, node.label, ts.visitNode(node.statement, nestedElementVisitor, ts.isStatement, factory.liftToBlock));
+            return factory.updateLabeledStatement(node, node.label, ts.visitNode(node.statement, topLevelNestedVisitor, ts.isStatement, factory.liftToBlock));
         }
         /**
          * Visits the body of a WithStatement to hoist declarations.
@@ -100169,7 +102285,7 @@
          * @param node The node to visit.
          */
         function visitWithStatement(node) {
-            return factory.updateWithStatement(node, ts.visitNode(node.expression, destructuringAndImportCallVisitor, ts.isExpression), ts.visitNode(node.statement, nestedElementVisitor, ts.isStatement, factory.liftToBlock));
+            return factory.updateWithStatement(node, ts.visitNode(node.expression, visitor, ts.isExpression), ts.visitNode(node.statement, topLevelNestedVisitor, ts.isStatement, factory.liftToBlock));
         }
         /**
          * Visits the body of a SwitchStatement to hoist declarations.
@@ -100177,7 +102293,7 @@
          * @param node The node to visit.
          */
         function visitSwitchStatement(node) {
-            return factory.updateSwitchStatement(node, ts.visitNode(node.expression, destructuringAndImportCallVisitor, ts.isExpression), ts.visitNode(node.caseBlock, nestedElementVisitor, ts.isCaseBlock));
+            return factory.updateSwitchStatement(node, ts.visitNode(node.expression, visitor, ts.isExpression), ts.visitNode(node.caseBlock, topLevelNestedVisitor, ts.isCaseBlock));
         }
         /**
          * Visits the body of a CaseBlock to hoist declarations.
@@ -100187,7 +102303,7 @@
         function visitCaseBlock(node) {
             var savedEnclosingBlockScopedContainer = enclosingBlockScopedContainer;
             enclosingBlockScopedContainer = node;
-            node = factory.updateCaseBlock(node, ts.visitNodes(node.clauses, nestedElementVisitor, ts.isCaseOrDefaultClause));
+            node = factory.updateCaseBlock(node, ts.visitNodes(node.clauses, topLevelNestedVisitor, ts.isCaseOrDefaultClause));
             enclosingBlockScopedContainer = savedEnclosingBlockScopedContainer;
             return node;
         }
@@ -100197,7 +102313,7 @@
          * @param node The node to visit.
          */
         function visitCaseClause(node) {
-            return factory.updateCaseClause(node, ts.visitNode(node.expression, destructuringAndImportCallVisitor, ts.isExpression), ts.visitNodes(node.statements, nestedElementVisitor, ts.isStatement));
+            return factory.updateCaseClause(node, ts.visitNode(node.expression, visitor, ts.isExpression), ts.visitNodes(node.statements, topLevelNestedVisitor, ts.isStatement));
         }
         /**
          * Visits the body of a DefaultClause to hoist declarations.
@@ -100205,7 +102321,7 @@
          * @param node The node to visit.
          */
         function visitDefaultClause(node) {
-            return ts.visitEachChild(node, nestedElementVisitor, context);
+            return ts.visitEachChild(node, topLevelNestedVisitor, context);
         }
         /**
          * Visits the body of a TryStatement to hoist declarations.
@@ -100213,7 +102329,7 @@
          * @param node The node to visit.
          */
         function visitTryStatement(node) {
-            return ts.visitEachChild(node, nestedElementVisitor, context);
+            return ts.visitEachChild(node, topLevelNestedVisitor, context);
         }
         /**
          * Visits the body of a CatchClause to hoist declarations.
@@ -100223,7 +102339,7 @@
         function visitCatchClause(node) {
             var savedEnclosingBlockScopedContainer = enclosingBlockScopedContainer;
             enclosingBlockScopedContainer = node;
-            node = factory.updateCatchClause(node, node.variableDeclaration, ts.visitNode(node.block, nestedElementVisitor, ts.isBlock));
+            node = factory.updateCatchClause(node, node.variableDeclaration, ts.visitNode(node.block, topLevelNestedVisitor, ts.isBlock));
             enclosingBlockScopedContainer = savedEnclosingBlockScopedContainer;
             return node;
         }
@@ -100235,7 +102351,7 @@
         function visitBlock(node) {
             var savedEnclosingBlockScopedContainer = enclosingBlockScopedContainer;
             enclosingBlockScopedContainer = node;
-            node = ts.visitEachChild(node, nestedElementVisitor, context);
+            node = ts.visitEachChild(node, topLevelNestedVisitor, context);
             enclosingBlockScopedContainer = savedEnclosingBlockScopedContainer;
             return node;
         }
@@ -100247,19 +102363,54 @@
          *
          * @param node The node to visit.
          */
-        function destructuringAndImportCallVisitor(node) {
-            if (ts.isDestructuringAssignment(node)) {
-                return visitDestructuringAssignment(node);
-            }
-            else if (ts.isImportCall(node)) {
-                return visitImportCallExpression(node);
-            }
-            else if ((node.transformFlags & 2048 /* ContainsDestructuringAssignment */) || (node.transformFlags & 4194304 /* ContainsDynamicImport */)) {
-                return ts.visitEachChild(node, destructuringAndImportCallVisitor, context);
-            }
-            else {
+        function visitorWorker(node, valueIsDiscarded) {
+            if (!(node.transformFlags & (2048 /* ContainsDestructuringAssignment */ | 4194304 /* ContainsDynamicImport */ | 67108864 /* ContainsUpdateExpressionForIdentifier */))) {
                 return node;
             }
+            switch (node.kind) {
+                case 240 /* ForStatement */:
+                    return visitForStatement(node, /*isTopLevel*/ false);
+                case 236 /* ExpressionStatement */:
+                    return visitExpressionStatement(node);
+                case 210 /* ParenthesizedExpression */:
+                    return visitParenthesizedExpression(node, valueIsDiscarded);
+                case 345 /* PartiallyEmittedExpression */:
+                    return visitPartiallyEmittedExpression(node, valueIsDiscarded);
+                case 219 /* BinaryExpression */:
+                    if (ts.isDestructuringAssignment(node)) {
+                        return visitDestructuringAssignment(node, valueIsDiscarded);
+                    }
+                    break;
+                case 206 /* CallExpression */:
+                    if (ts.isImportCall(node)) {
+                        return visitImportCallExpression(node);
+                    }
+                    break;
+                case 217 /* PrefixUnaryExpression */:
+                case 218 /* PostfixUnaryExpression */:
+                    return visitPrefixOrPostfixUnaryExpression(node, valueIsDiscarded);
+            }
+            return ts.visitEachChild(node, visitor, context);
+        }
+        /**
+         * Visit nodes to flatten destructuring assignments to exported symbols.
+         *
+         * @param node The node to visit.
+         */
+        function visitor(node) {
+            return visitorWorker(node, /*valueIsDiscarded*/ false);
+        }
+        function discardedValueVisitor(node) {
+            return visitorWorker(node, /*valueIsDiscarded*/ true);
+        }
+        function visitExpressionStatement(node) {
+            return factory.updateExpressionStatement(node, ts.visitNode(node.expression, discardedValueVisitor, ts.isExpression));
+        }
+        function visitParenthesizedExpression(node, valueIsDiscarded) {
+            return factory.updateParenthesizedExpression(node, ts.visitNode(node.expression, valueIsDiscarded ? discardedValueVisitor : visitor, ts.isExpression));
+        }
+        function visitPartiallyEmittedExpression(node, valueIsDiscarded) {
+            return factory.updatePartiallyEmittedExpression(node, ts.visitNode(node.expression, valueIsDiscarded ? discardedValueVisitor : visitor, ts.isExpression));
         }
         function visitImportCallExpression(node) {
             // import("./blah")
@@ -100273,7 +102424,7 @@
             //     };
             // });
             var externalModuleName = ts.getExternalModuleNameLiteral(factory, node, currentSourceFile, host, resolver, compilerOptions);
-            var firstArgument = ts.visitNode(ts.firstOrUndefined(node.arguments), destructuringAndImportCallVisitor);
+            var firstArgument = ts.visitNode(ts.firstOrUndefined(node.arguments), visitor);
             // Only use the external module name if it differs from the first argument. This allows us to preserve the quote style of the argument on output.
             var argument = externalModuleName && (!firstArgument || !ts.isStringLiteral(firstArgument) || firstArgument.text !== externalModuleName.text) ? externalModuleName : firstArgument;
             return factory.createCallExpression(factory.createPropertyAccessExpression(contextObject, factory.createIdentifier("import")), 
@@ -100284,12 +102435,11 @@
          *
          * @param node The node to visit.
          */
-        function visitDestructuringAssignment(node) {
+        function visitDestructuringAssignment(node, valueIsDiscarded) {
             if (hasExportedReferenceInDestructuringTarget(node.left)) {
-                return ts.flattenDestructuringAssignment(node, destructuringAndImportCallVisitor, context, 0 /* All */, 
-                /*needsValue*/ true);
+                return ts.flattenDestructuringAssignment(node, visitor, context, 0 /* All */, !valueIsDiscarded);
             }
-            return ts.visitEachChild(node, destructuringAndImportCallVisitor, context);
+            return ts.visitEachChild(node, visitor, context);
         }
         /**
          * Determines whether the target of a destructuring assignment refers to an exported symbol.
@@ -100317,12 +102467,57 @@
             }
             else if (ts.isIdentifier(node)) {
                 var container = resolver.getReferencedExportContainer(node);
-                return container !== undefined && container.kind === 298 /* SourceFile */;
+                return container !== undefined && container.kind === 300 /* SourceFile */;
             }
             else {
                 return false;
             }
         }
+        function visitPrefixOrPostfixUnaryExpression(node, valueIsDiscarded) {
+            // When we see a prefix or postfix increment expression whose operand is an exported
+            // symbol, we should ensure all exports of that symbol are updated with the correct
+            // value.
+            //
+            // - We do not transform generated identifiers for any reason.
+            // - We do not transform identifiers tagged with the LocalName flag.
+            // - We do not transform identifiers that were originally the name of an enum or
+            //   namespace due to how they are transformed in TypeScript.
+            // - We only transform identifiers that are exported at the top level.
+            if ((node.operator === 45 /* PlusPlusToken */ || node.operator === 46 /* MinusMinusToken */)
+                && ts.isIdentifier(node.operand)
+                && !ts.isGeneratedIdentifier(node.operand)
+                && !ts.isLocalName(node.operand)
+                && !ts.isDeclarationNameOfEnumOrNamespace(node.operand)) {
+                var exportedNames = getExports(node.operand);
+                if (exportedNames) {
+                    var temp = void 0;
+                    var expression = ts.visitNode(node.operand, visitor, ts.isExpression);
+                    if (ts.isPrefixUnaryExpression(node)) {
+                        expression = factory.updatePrefixUnaryExpression(node, expression);
+                    }
+                    else {
+                        expression = factory.updatePostfixUnaryExpression(node, expression);
+                        if (!valueIsDiscarded) {
+                            temp = factory.createTempVariable(hoistVariableDeclaration);
+                            expression = factory.createAssignment(temp, expression);
+                            ts.setTextRange(expression, node);
+                        }
+                        expression = factory.createComma(expression, factory.cloneNode(node.operand));
+                        ts.setTextRange(expression, node);
+                    }
+                    for (var _i = 0, exportedNames_4 = exportedNames; _i < exportedNames_4.length; _i++) {
+                        var exportName = exportedNames_4[_i];
+                        expression = createExportExpression(exportName, preventSubstitution(expression));
+                    }
+                    if (temp) {
+                        expression = factory.createComma(expression, temp);
+                        ts.setTextRange(expression, node);
+                    }
+                    return expression;
+                }
+            }
+            return ts.visitEachChild(node, visitor, context);
+        }
         //
         // Modifier Visitors
         //
@@ -100333,8 +102528,8 @@
          */
         function modifierVisitor(node) {
             switch (node.kind) {
-                case 92 /* ExportKeyword */:
-                case 87 /* DefaultKeyword */:
+                case 93 /* ExportKeyword */:
+                case 88 /* DefaultKeyword */:
                     return undefined;
             }
             return node;
@@ -100350,7 +102545,7 @@
          * @param emitCallback A callback used to emit the node in the printer.
          */
         function onEmitNode(hint, node, emitCallback) {
-            if (node.kind === 298 /* SourceFile */) {
+            if (node.kind === 300 /* SourceFile */) {
                 var id = ts.getOriginalNodeId(node);
                 currentSourceFile = node;
                 moduleInfo = moduleInfoMap[id];
@@ -100400,7 +102595,7 @@
          */
         function substituteUnspecified(node) {
             switch (node.kind) {
-                case 290 /* ShorthandPropertyAssignment */:
+                case 292 /* ShorthandPropertyAssignment */:
                     return substituteShorthandPropertyAssignment(node);
             }
             return node;
@@ -100435,14 +102630,11 @@
          */
         function substituteExpression(node) {
             switch (node.kind) {
-                case 78 /* Identifier */:
+                case 79 /* Identifier */:
                     return substituteExpressionIdentifier(node);
-                case 217 /* BinaryExpression */:
+                case 219 /* BinaryExpression */:
                     return substituteBinaryExpression(node);
-                case 215 /* PrefixUnaryExpression */:
-                case 216 /* PostfixUnaryExpression */:
-                    return substituteUnaryExpression(node);
-                case 227 /* MetaProperty */:
+                case 229 /* MetaProperty */:
                     return substituteMetaProperty(node);
             }
             return node;
@@ -100505,49 +102697,10 @@
                 if (exportedNames) {
                     // For each additional export of the declaration, apply an export assignment.
                     var expression = node;
-                    for (var _i = 0, exportedNames_4 = exportedNames; _i < exportedNames_4.length; _i++) {
-                        var exportName = exportedNames_4[_i];
-                        expression = createExportExpression(exportName, preventSubstitution(expression));
-                    }
-                    return expression;
-                }
-            }
-            return node;
-        }
-        /**
-         * Substitution for a UnaryExpression that may contain an imported or exported symbol.
-         *
-         * @param node The node to substitute.
-         */
-        function substituteUnaryExpression(node) {
-            // When we see a prefix or postfix increment expression whose operand is an exported
-            // symbol, we should ensure all exports of that symbol are updated with the correct
-            // value.
-            //
-            // - We do not substitute generated identifiers for any reason.
-            // - We do not substitute identifiers tagged with the LocalName flag.
-            // - We do not substitute identifiers that were originally the name of an enum or
-            //   namespace due to how they are transformed in TypeScript.
-            // - We only substitute identifiers that are exported at the top level.
-            if ((node.operator === 45 /* PlusPlusToken */ || node.operator === 46 /* MinusMinusToken */)
-                && ts.isIdentifier(node.operand)
-                && !ts.isGeneratedIdentifier(node.operand)
-                && !ts.isLocalName(node.operand)
-                && !ts.isDeclarationNameOfEnumOrNamespace(node.operand)) {
-                var exportedNames = getExports(node.operand);
-                if (exportedNames) {
-                    var expression = node.kind === 216 /* PostfixUnaryExpression */
-                        ? ts.setTextRange(factory.createPrefixUnaryExpression(node.operator, node.operand), node)
-                        : node;
                     for (var _i = 0, exportedNames_5 = exportedNames; _i < exportedNames_5.length; _i++) {
                         var exportName = exportedNames_5[_i];
                         expression = createExportExpression(exportName, preventSubstitution(expression));
                     }
-                    if (node.kind === 216 /* PostfixUnaryExpression */) {
-                        expression = node.operator === 45 /* PlusPlusToken */
-                            ? factory.createSubtract(preventSubstitution(expression), factory.createNumericLiteral(1))
-                            : factory.createAdd(preventSubstitution(expression), factory.createNumericLiteral(1));
-                    }
                     return expression;
                 }
             }
@@ -100571,7 +102724,7 @@
                     || resolver.getReferencedValueDeclaration(name);
                 if (valueDeclaration) {
                     var exportContainer = resolver.getReferencedExportContainer(name, /*prefixLocals*/ false);
-                    if (exportContainer && exportContainer.kind === 298 /* SourceFile */) {
+                    if (exportContainer && exportContainer.kind === 300 /* SourceFile */) {
                         exportedNames = ts.append(exportedNames, factory.getDeclarationName(valueDeclaration));
                     }
                     exportedNames = ts.addRange(exportedNames, moduleInfo && moduleInfo.exportedBindings[ts.getOriginalNodeId(valueDeclaration)]);
@@ -100611,8 +102764,8 @@
         var previousOnSubstituteNode = context.onSubstituteNode;
         context.onEmitNode = onEmitNode;
         context.onSubstituteNode = onSubstituteNode;
-        context.enableEmitNotification(298 /* SourceFile */);
-        context.enableSubstitution(78 /* Identifier */);
+        context.enableEmitNotification(300 /* SourceFile */);
+        context.enableSubstitution(79 /* Identifier */);
         var helperNameSubstitutions;
         return ts.chainBundle(context, transformSourceFile);
         function transformSourceFile(node) {
@@ -100624,7 +102777,7 @@
                 if (!ts.isExternalModule(node) || ts.some(result.statements, ts.isExternalModuleIndicator)) {
                     return result;
                 }
-                return factory.updateSourceFile(result, ts.setTextRange(factory.createNodeArray(__spreadArray(__spreadArray([], result.statements), [ts.createEmptyExports(factory)])), result.statements));
+                return factory.updateSourceFile(result, ts.setTextRange(factory.createNodeArray(__spreadArray(__spreadArray([], result.statements, true), [ts.createEmptyExports(factory)], false)), result.statements));
             }
             return node;
         }
@@ -100643,12 +102796,12 @@
         }
         function visitor(node) {
             switch (node.kind) {
-                case 261 /* ImportEqualsDeclaration */:
+                case 263 /* ImportEqualsDeclaration */:
                     // Elide `import=` as it is not legal with --module ES6
                     return undefined;
-                case 267 /* ExportAssignment */:
+                case 269 /* ExportAssignment */:
                     return visitExportAssignment(node);
-                case 268 /* ExportDeclaration */:
+                case 270 /* ExportDeclaration */:
                     var exportDecl = node;
                     return visitExportDeclaration(exportDecl);
             }
@@ -100776,14 +102929,14 @@
             } : undefined;
         }
         function getAccessorNameVisibilityDiagnosticMessage(symbolAccessibilityResult) {
-            if (ts.hasSyntacticModifier(node, 32 /* Static */)) {
+            if (ts.isStatic(node)) {
                 return symbolAccessibilityResult.errorModuleName ?
                     symbolAccessibilityResult.accessibility === 2 /* CannotBeNamed */ ?
                         ts.Diagnostics.Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named :
                         ts.Diagnostics.Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2 :
                     ts.Diagnostics.Public_static_property_0_of_exported_class_has_or_is_using_private_name_1;
             }
-            else if (node.parent.kind === 253 /* ClassDeclaration */) {
+            else if (node.parent.kind === 255 /* ClassDeclaration */) {
                 return symbolAccessibilityResult.errorModuleName ?
                     symbolAccessibilityResult.accessibility === 2 /* CannotBeNamed */ ?
                         ts.Diagnostics.Public_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named :
@@ -100805,14 +102958,14 @@
             } : undefined;
         }
         function getMethodNameVisibilityDiagnosticMessage(symbolAccessibilityResult) {
-            if (ts.hasSyntacticModifier(node, 32 /* Static */)) {
+            if (ts.isStatic(node)) {
                 return symbolAccessibilityResult.errorModuleName ?
                     symbolAccessibilityResult.accessibility === 2 /* CannotBeNamed */ ?
                         ts.Diagnostics.Public_static_method_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named :
                         ts.Diagnostics.Public_static_method_0_of_exported_class_has_or_is_using_name_1_from_private_module_2 :
                     ts.Diagnostics.Public_static_method_0_of_exported_class_has_or_is_using_private_name_1;
             }
-            else if (node.parent.kind === 253 /* ClassDeclaration */) {
+            else if (node.parent.kind === 255 /* ClassDeclaration */) {
                 return symbolAccessibilityResult.errorModuleName ?
                     symbolAccessibilityResult.accessibility === 2 /* CannotBeNamed */ ?
                         ts.Diagnostics.Public_method_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named :
@@ -100859,7 +103012,7 @@
             return ts.Debug.assertNever(node, "Attempted to set a declaration diagnostic context for unhandled node kind: " + ts.SyntaxKind[node.kind]);
         }
         function getVariableDeclarationTypeVisibilityDiagnosticMessage(symbolAccessibilityResult) {
-            if (node.kind === 250 /* VariableDeclaration */ || node.kind === 199 /* BindingElement */) {
+            if (node.kind === 252 /* VariableDeclaration */ || node.kind === 201 /* BindingElement */) {
                 return symbolAccessibilityResult.errorModuleName ?
                     symbolAccessibilityResult.accessibility === 2 /* CannotBeNamed */ ?
                         ts.Diagnostics.Exported_variable_0_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named :
@@ -100868,17 +103021,17 @@
             }
             // This check is to ensure we don't report error on constructor parameter property as that error would be reported during parameter emit
             // The only exception here is if the constructor was marked as private. we are not emitting the constructor parameters at all.
-            else if (node.kind === 164 /* PropertyDeclaration */ || node.kind === 202 /* PropertyAccessExpression */ || node.kind === 163 /* PropertySignature */ ||
-                (node.kind === 161 /* Parameter */ && ts.hasSyntacticModifier(node.parent, 8 /* Private */))) {
+            else if (node.kind === 165 /* PropertyDeclaration */ || node.kind === 204 /* PropertyAccessExpression */ || node.kind === 164 /* PropertySignature */ ||
+                (node.kind === 162 /* Parameter */ && ts.hasSyntacticModifier(node.parent, 8 /* Private */))) {
                 // TODO(jfreeman): Deal with computed properties in error reporting.
-                if (ts.hasSyntacticModifier(node, 32 /* Static */)) {
+                if (ts.isStatic(node)) {
                     return symbolAccessibilityResult.errorModuleName ?
                         symbolAccessibilityResult.accessibility === 2 /* CannotBeNamed */ ?
                             ts.Diagnostics.Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named :
                             ts.Diagnostics.Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2 :
                         ts.Diagnostics.Public_static_property_0_of_exported_class_has_or_is_using_private_name_1;
                 }
-                else if (node.parent.kind === 253 /* ClassDeclaration */ || node.kind === 161 /* Parameter */) {
+                else if (node.parent.kind === 255 /* ClassDeclaration */ || node.kind === 162 /* Parameter */) {
                     return symbolAccessibilityResult.errorModuleName ?
                         symbolAccessibilityResult.accessibility === 2 /* CannotBeNamed */ ?
                             ts.Diagnostics.Public_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named :
@@ -100903,10 +103056,10 @@
         }
         function getAccessorDeclarationTypeVisibilityError(symbolAccessibilityResult) {
             var diagnosticMessage;
-            if (node.kind === 169 /* SetAccessor */) {
+            if (node.kind === 171 /* SetAccessor */) {
                 // Getters can infer the return type from the returned expression, but setters cannot, so the
                 // "_from_external_module_1_but_cannot_be_named" case cannot occur.
-                if (ts.hasSyntacticModifier(node, 32 /* Static */)) {
+                if (ts.isStatic(node)) {
                     diagnosticMessage = symbolAccessibilityResult.errorModuleName ?
                         ts.Diagnostics.Parameter_type_of_public_static_setter_0_from_exported_class_has_or_is_using_name_1_from_private_module_2 :
                         ts.Diagnostics.Parameter_type_of_public_static_setter_0_from_exported_class_has_or_is_using_private_name_1;
@@ -100918,7 +103071,7 @@
                 }
             }
             else {
-                if (ts.hasSyntacticModifier(node, 32 /* Static */)) {
+                if (ts.isStatic(node)) {
                     diagnosticMessage = symbolAccessibilityResult.errorModuleName ?
                         symbolAccessibilityResult.accessibility === 2 /* CannotBeNamed */ ?
                             ts.Diagnostics.Return_type_of_public_static_getter_0_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named :
@@ -100942,34 +103095,34 @@
         function getReturnTypeVisibilityError(symbolAccessibilityResult) {
             var diagnosticMessage;
             switch (node.kind) {
-                case 171 /* ConstructSignature */:
+                case 173 /* ConstructSignature */:
                     // Interfaces cannot have return types that cannot be named
                     diagnosticMessage = symbolAccessibilityResult.errorModuleName ?
                         ts.Diagnostics.Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1 :
                         ts.Diagnostics.Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_0;
                     break;
-                case 170 /* CallSignature */:
+                case 172 /* CallSignature */:
                     // Interfaces cannot have return types that cannot be named
                     diagnosticMessage = symbolAccessibilityResult.errorModuleName ?
                         ts.Diagnostics.Return_type_of_call_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1 :
                         ts.Diagnostics.Return_type_of_call_signature_from_exported_interface_has_or_is_using_private_name_0;
                     break;
-                case 172 /* IndexSignature */:
+                case 174 /* IndexSignature */:
                     // Interfaces cannot have return types that cannot be named
                     diagnosticMessage = symbolAccessibilityResult.errorModuleName ?
                         ts.Diagnostics.Return_type_of_index_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1 :
                         ts.Diagnostics.Return_type_of_index_signature_from_exported_interface_has_or_is_using_private_name_0;
                     break;
-                case 166 /* MethodDeclaration */:
-                case 165 /* MethodSignature */:
-                    if (ts.hasSyntacticModifier(node, 32 /* Static */)) {
+                case 167 /* MethodDeclaration */:
+                case 166 /* MethodSignature */:
+                    if (ts.isStatic(node)) {
                         diagnosticMessage = symbolAccessibilityResult.errorModuleName ?
                             symbolAccessibilityResult.accessibility === 2 /* CannotBeNamed */ ?
                                 ts.Diagnostics.Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named :
                                 ts.Diagnostics.Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_private_module_1 :
                             ts.Diagnostics.Return_type_of_public_static_method_from_exported_class_has_or_is_using_private_name_0;
                     }
-                    else if (node.parent.kind === 253 /* ClassDeclaration */) {
+                    else if (node.parent.kind === 255 /* ClassDeclaration */) {
                         diagnosticMessage = symbolAccessibilityResult.errorModuleName ?
                             symbolAccessibilityResult.accessibility === 2 /* CannotBeNamed */ ?
                                 ts.Diagnostics.Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named :
@@ -100983,7 +103136,7 @@
                             ts.Diagnostics.Return_type_of_method_from_exported_interface_has_or_is_using_private_name_0;
                     }
                     break;
-                case 252 /* FunctionDeclaration */:
+                case 254 /* FunctionDeclaration */:
                     diagnosticMessage = symbolAccessibilityResult.errorModuleName ?
                         symbolAccessibilityResult.accessibility === 2 /* CannotBeNamed */ ?
                             ts.Diagnostics.Return_type_of_exported_function_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named :
@@ -101008,38 +103161,38 @@
         }
         function getParameterDeclarationTypeVisibilityDiagnosticMessage(symbolAccessibilityResult) {
             switch (node.parent.kind) {
-                case 167 /* Constructor */:
+                case 169 /* Constructor */:
                     return symbolAccessibilityResult.errorModuleName ?
                         symbolAccessibilityResult.accessibility === 2 /* CannotBeNamed */ ?
                             ts.Diagnostics.Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named :
                             ts.Diagnostics.Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_private_module_2 :
                         ts.Diagnostics.Parameter_0_of_constructor_from_exported_class_has_or_is_using_private_name_1;
-                case 171 /* ConstructSignature */:
-                case 176 /* ConstructorType */:
+                case 173 /* ConstructSignature */:
+                case 178 /* ConstructorType */:
                     // Interfaces cannot have parameter types that cannot be named
                     return symbolAccessibilityResult.errorModuleName ?
                         ts.Diagnostics.Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2 :
                         ts.Diagnostics.Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1;
-                case 170 /* CallSignature */:
+                case 172 /* CallSignature */:
                     // Interfaces cannot have parameter types that cannot be named
                     return symbolAccessibilityResult.errorModuleName ?
                         ts.Diagnostics.Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2 :
                         ts.Diagnostics.Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1;
-                case 172 /* IndexSignature */:
+                case 174 /* IndexSignature */:
                     // Interfaces cannot have parameter types that cannot be named
                     return symbolAccessibilityResult.errorModuleName ?
                         ts.Diagnostics.Parameter_0_of_index_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2 :
                         ts.Diagnostics.Parameter_0_of_index_signature_from_exported_interface_has_or_is_using_private_name_1;
-                case 166 /* MethodDeclaration */:
-                case 165 /* MethodSignature */:
-                    if (ts.hasSyntacticModifier(node.parent, 32 /* Static */)) {
+                case 167 /* MethodDeclaration */:
+                case 166 /* MethodSignature */:
+                    if (ts.isStatic(node.parent)) {
                         return symbolAccessibilityResult.errorModuleName ?
                             symbolAccessibilityResult.accessibility === 2 /* CannotBeNamed */ ?
                                 ts.Diagnostics.Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named :
                                 ts.Diagnostics.Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_private_module_2 :
                             ts.Diagnostics.Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1;
                     }
-                    else if (node.parent.parent.kind === 253 /* ClassDeclaration */) {
+                    else if (node.parent.parent.kind === 255 /* ClassDeclaration */) {
                         return symbolAccessibilityResult.errorModuleName ?
                             symbolAccessibilityResult.accessibility === 2 /* CannotBeNamed */ ?
                                 ts.Diagnostics.Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named :
@@ -101052,15 +103205,15 @@
                             ts.Diagnostics.Parameter_0_of_method_from_exported_interface_has_or_is_using_name_1_from_private_module_2 :
                             ts.Diagnostics.Parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1;
                     }
-                case 252 /* FunctionDeclaration */:
-                case 175 /* FunctionType */:
+                case 254 /* FunctionDeclaration */:
+                case 177 /* FunctionType */:
                     return symbolAccessibilityResult.errorModuleName ?
                         symbolAccessibilityResult.accessibility === 2 /* CannotBeNamed */ ?
                             ts.Diagnostics.Parameter_0_of_exported_function_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named :
                             ts.Diagnostics.Parameter_0_of_exported_function_has_or_is_using_name_1_from_private_module_2 :
                         ts.Diagnostics.Parameter_0_of_exported_function_has_or_is_using_private_name_1;
-                case 169 /* SetAccessor */:
-                case 168 /* GetAccessor */:
+                case 171 /* SetAccessor */:
+                case 170 /* GetAccessor */:
                     return symbolAccessibilityResult.errorModuleName ?
                         symbolAccessibilityResult.accessibility === 2 /* CannotBeNamed */ ?
                             ts.Diagnostics.Parameter_0_of_accessor_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named :
@@ -101074,39 +103227,39 @@
             // Type parameter constraints are named by user so we should always be able to name it
             var diagnosticMessage;
             switch (node.parent.kind) {
-                case 253 /* ClassDeclaration */:
+                case 255 /* ClassDeclaration */:
                     diagnosticMessage = ts.Diagnostics.Type_parameter_0_of_exported_class_has_or_is_using_private_name_1;
                     break;
-                case 254 /* InterfaceDeclaration */:
+                case 256 /* InterfaceDeclaration */:
                     diagnosticMessage = ts.Diagnostics.Type_parameter_0_of_exported_interface_has_or_is_using_private_name_1;
                     break;
-                case 191 /* MappedType */:
+                case 193 /* MappedType */:
                     diagnosticMessage = ts.Diagnostics.Type_parameter_0_of_exported_mapped_object_type_is_using_private_name_1;
                     break;
-                case 176 /* ConstructorType */:
-                case 171 /* ConstructSignature */:
+                case 178 /* ConstructorType */:
+                case 173 /* ConstructSignature */:
                     diagnosticMessage = ts.Diagnostics.Type_parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1;
                     break;
-                case 170 /* CallSignature */:
+                case 172 /* CallSignature */:
                     diagnosticMessage = ts.Diagnostics.Type_parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1;
                     break;
-                case 166 /* MethodDeclaration */:
-                case 165 /* MethodSignature */:
-                    if (ts.hasSyntacticModifier(node.parent, 32 /* Static */)) {
+                case 167 /* MethodDeclaration */:
+                case 166 /* MethodSignature */:
+                    if (ts.isStatic(node.parent)) {
                         diagnosticMessage = ts.Diagnostics.Type_parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1;
                     }
-                    else if (node.parent.parent.kind === 253 /* ClassDeclaration */) {
+                    else if (node.parent.parent.kind === 255 /* ClassDeclaration */) {
                         diagnosticMessage = ts.Diagnostics.Type_parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1;
                     }
                     else {
                         diagnosticMessage = ts.Diagnostics.Type_parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1;
                     }
                     break;
-                case 175 /* FunctionType */:
-                case 252 /* FunctionDeclaration */:
+                case 177 /* FunctionType */:
+                case 254 /* FunctionDeclaration */:
                     diagnosticMessage = ts.Diagnostics.Type_parameter_0_of_exported_function_has_or_is_using_private_name_1;
                     break;
-                case 255 /* TypeAliasDeclaration */:
+                case 257 /* TypeAliasDeclaration */:
                     diagnosticMessage = ts.Diagnostics.Type_parameter_0_of_exported_type_alias_has_or_is_using_private_name_1;
                     break;
                 default:
@@ -101123,7 +103276,7 @@
             // Heritage clause is written by user so it can always be named
             if (ts.isClassDeclaration(node.parent.parent)) {
                 // Class or Interface implemented/extended is inaccessible
-                diagnosticMessage = ts.isHeritageClause(node.parent) && node.parent.token === 116 /* ImplementsKeyword */ ?
+                diagnosticMessage = ts.isHeritageClause(node.parent) && node.parent.token === 117 /* ImplementsKeyword */ ?
                     ts.Diagnostics.Implements_clause_of_exported_class_0_has_or_is_using_private_name_1 :
                     node.parent.parent.name ? ts.Diagnostics.extends_clause_of_exported_class_0_has_or_is_using_private_name_1 :
                         ts.Diagnostics.extends_clause_of_exported_class_has_or_is_using_private_name_0;
@@ -101172,7 +103325,7 @@
     }
     function isInternalDeclaration(node, currentSourceFile) {
         var parseTreeNode = ts.getParseTreeNode(node);
-        if (parseTreeNode && parseTreeNode.kind === 161 /* Parameter */) {
+        if (parseTreeNode && parseTreeNode.kind === 162 /* Parameter */) {
             var paramIdx = parseTreeNode.parent.parameters.indexOf(parseTreeNode);
             var previousSibling = paramIdx > 0 ? parseTreeNode.parent.parameters[paramIdx - 1] : undefined;
             var text = currentSourceFile.text;
@@ -101231,7 +103384,8 @@
             moduleResolverHost: host,
             trackReferencedAmbientModule: trackReferencedAmbientModule,
             trackExternalModuleSymbolOfImportTypeNode: trackExternalModuleSymbolOfImportTypeNode,
-            reportNonlocalAugmentation: reportNonlocalAugmentation
+            reportNonlocalAugmentation: reportNonlocalAugmentation,
+            reportNonSerializableProperty: reportNonSerializableProperty
         };
         var errorNameNode;
         var errorFallbackNode;
@@ -101289,8 +103443,10 @@
                     else {
                         context.addDiagnostic(ts.createDiagnosticForNode(symbolAccessibilityResult.errorNode || errorInfo.errorNode, errorInfo.diagnosticMessage, symbolAccessibilityResult.errorSymbolName, symbolAccessibilityResult.errorModuleName));
                     }
+                    return true;
                 }
             }
+            return false;
         }
         function trackExternalModuleSymbolOfImportTypeNode(symbol) {
             if (!isBundledEmit) {
@@ -101299,33 +103455,40 @@
         }
         function trackSymbol(symbol, enclosingDeclaration, meaning) {
             if (symbol.flags & 262144 /* TypeParameter */)
-                return;
-            handleSymbolAccessibilityError(resolver.isSymbolAccessible(symbol, enclosingDeclaration, meaning, /*shouldComputeAliasesToMakeVisible*/ true));
+                return false;
+            var issuedDiagnostic = handleSymbolAccessibilityError(resolver.isSymbolAccessible(symbol, enclosingDeclaration, meaning, /*shouldComputeAliasesToMakeVisible*/ true));
             recordTypeReferenceDirectivesIfNecessary(resolver.getTypeReferenceDirectivesForSymbol(symbol, meaning));
+            return issuedDiagnostic;
         }
         function reportPrivateInBaseOfClassExpression(propertyName) {
             if (errorNameNode || errorFallbackNode) {
                 context.addDiagnostic(ts.createDiagnosticForNode((errorNameNode || errorFallbackNode), ts.Diagnostics.Property_0_of_exported_class_expression_may_not_be_private_or_protected, propertyName));
             }
         }
+        function errorDeclarationNameWithFallback() {
+            return errorNameNode ? ts.declarationNameToString(errorNameNode) :
+                errorFallbackNode && ts.getNameOfDeclaration(errorFallbackNode) ? ts.declarationNameToString(ts.getNameOfDeclaration(errorFallbackNode)) :
+                    errorFallbackNode && ts.isExportAssignment(errorFallbackNode) ? errorFallbackNode.isExportEquals ? "export=" : "default" :
+                        "(Missing)"; // same fallback declarationNameToString uses when node is zero-width (ie, nameless)
+        }
         function reportInaccessibleUniqueSymbolError() {
-            if (errorNameNode) {
-                context.addDiagnostic(ts.createDiagnosticForNode(errorNameNode, ts.Diagnostics.The_inferred_type_of_0_references_an_inaccessible_1_type_A_type_annotation_is_necessary, ts.declarationNameToString(errorNameNode), "unique symbol"));
+            if (errorNameNode || errorFallbackNode) {
+                context.addDiagnostic(ts.createDiagnosticForNode((errorNameNode || errorFallbackNode), ts.Diagnostics.The_inferred_type_of_0_references_an_inaccessible_1_type_A_type_annotation_is_necessary, errorDeclarationNameWithFallback(), "unique symbol"));
             }
         }
         function reportCyclicStructureError() {
-            if (errorNameNode) {
-                context.addDiagnostic(ts.createDiagnosticForNode(errorNameNode, ts.Diagnostics.The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialized_A_type_annotation_is_necessary, ts.declarationNameToString(errorNameNode)));
+            if (errorNameNode || errorFallbackNode) {
+                context.addDiagnostic(ts.createDiagnosticForNode((errorNameNode || errorFallbackNode), ts.Diagnostics.The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialized_A_type_annotation_is_necessary, errorDeclarationNameWithFallback()));
             }
         }
         function reportInaccessibleThisError() {
-            if (errorNameNode) {
-                context.addDiagnostic(ts.createDiagnosticForNode(errorNameNode, ts.Diagnostics.The_inferred_type_of_0_references_an_inaccessible_1_type_A_type_annotation_is_necessary, ts.declarationNameToString(errorNameNode), "this"));
+            if (errorNameNode || errorFallbackNode) {
+                context.addDiagnostic(ts.createDiagnosticForNode((errorNameNode || errorFallbackNode), ts.Diagnostics.The_inferred_type_of_0_references_an_inaccessible_1_type_A_type_annotation_is_necessary, errorDeclarationNameWithFallback(), "this"));
             }
         }
         function reportLikelyUnsafeImportRequiredError(specifier) {
-            if (errorNameNode) {
-                context.addDiagnostic(ts.createDiagnosticForNode(errorNameNode, ts.Diagnostics.The_inferred_type_of_0_cannot_be_named_without_a_reference_to_1_This_is_likely_not_portable_A_type_annotation_is_necessary, ts.declarationNameToString(errorNameNode), specifier));
+            if (errorNameNode || errorFallbackNode) {
+                context.addDiagnostic(ts.createDiagnosticForNode((errorNameNode || errorFallbackNode), ts.Diagnostics.The_inferred_type_of_0_cannot_be_named_without_a_reference_to_1_This_is_likely_not_portable_A_type_annotation_is_necessary, errorDeclarationNameWithFallback(), specifier));
             }
         }
         function reportTruncationError() {
@@ -101344,6 +103507,11 @@
                 }
             }
         }
+        function reportNonSerializableProperty(propertyName) {
+            if (errorNameNode || errorFallbackNode) {
+                context.addDiagnostic(ts.createDiagnosticForNode((errorNameNode || errorFallbackNode), ts.Diagnostics.The_type_of_this_node_cannot_be_serialized_because_its_property_0_cannot_be_serialized, propertyName));
+            }
+        }
         function transformDeclarationsForJS(sourceFile, bundled) {
             var oldDiag = getSymbolAccessibilityDiagnostic;
             getSymbolAccessibilityDiagnostic = function (s) { return (s.errorNode && ts.canProduceDiagnostics(s.errorNode) ? ts.createGetSymbolAccessibilityDiagnosticForNode(s.errorNode)(s) : ({
@@ -101357,10 +103525,10 @@
             return result;
         }
         function transformRoot(node) {
-            if (node.kind === 298 /* SourceFile */ && node.isDeclarationFile) {
+            if (node.kind === 300 /* SourceFile */ && node.isDeclarationFile) {
                 return node;
             }
-            if (node.kind === 299 /* Bundle */) {
+            if (node.kind === 301 /* Bundle */) {
                 isBundledEmit = true;
                 refs = new ts.Map();
                 libs = new ts.Map();
@@ -101383,14 +103551,14 @@
                         resultHasExternalModuleIndicator = false; // unused in external module bundle emit (all external modules are within module blocks, therefore are known to be modules)
                         needsDeclare = false;
                         var statements = ts.isSourceFileJS(sourceFile) ? factory.createNodeArray(transformDeclarationsForJS(sourceFile, /*bundled*/ true)) : ts.visitNodes(sourceFile.statements, visitDeclarationStatements);
-                        var newFile = factory.updateSourceFile(sourceFile, [factory.createModuleDeclaration([], [factory.createModifier(133 /* DeclareKeyword */)], factory.createStringLiteral(ts.getResolvedExternalModuleName(context.getEmitHost(), sourceFile)), factory.createModuleBlock(ts.setTextRange(factory.createNodeArray(transformAndReplaceLatePaintedStatements(statements)), sourceFile.statements)))], /*isDeclarationFile*/ true, /*referencedFiles*/ [], /*typeReferences*/ [], /*hasNoDefaultLib*/ false, /*libReferences*/ []);
+                        var newFile = factory.updateSourceFile(sourceFile, [factory.createModuleDeclaration([], [factory.createModifier(134 /* DeclareKeyword */)], factory.createStringLiteral(ts.getResolvedExternalModuleName(context.getEmitHost(), sourceFile)), factory.createModuleBlock(ts.setTextRange(factory.createNodeArray(transformAndReplaceLatePaintedStatements(statements)), sourceFile.statements)))], /*isDeclarationFile*/ true, /*referencedFiles*/ [], /*typeReferences*/ [], /*hasNoDefaultLib*/ false, /*libReferences*/ []);
                         return newFile;
                     }
                     needsDeclare = true;
                     var updated = ts.isSourceFileJS(sourceFile) ? factory.createNodeArray(transformDeclarationsForJS(sourceFile)) : ts.visitNodes(sourceFile.statements, visitDeclarationStatements);
                     return factory.updateSourceFile(sourceFile, transformAndReplaceLatePaintedStatements(updated), /*isDeclarationFile*/ true, /*referencedFiles*/ [], /*typeReferences*/ [], /*hasNoDefaultLib*/ false, /*libReferences*/ []);
                 }), ts.mapDefined(node.prepends, function (prepend) {
-                    if (prepend.kind === 301 /* InputFiles */) {
+                    if (prepend.kind === 303 /* InputFiles */) {
                         var sourceFile = ts.createUnparsedSourceFile(prepend, "dts", stripInternal);
                         hasNoDefaultLib_1 = hasNoDefaultLib_1 || !!sourceFile.hasNoDefaultLib;
                         collectReferences(sourceFile, refs);
@@ -101439,7 +103607,7 @@
                 refs.forEach(referenceVisitor);
                 emittedImports = ts.filter(combinedStatements, ts.isAnyImportSyntax);
                 if (ts.isExternalModule(node) && (!resultHasExternalModuleIndicator || (needsScopeFixMarker && !resultHasScopeMarker))) {
-                    combinedStatements = ts.setTextRange(factory.createNodeArray(__spreadArray(__spreadArray([], combinedStatements), [ts.createEmptyExports(factory)])), combinedStatements);
+                    combinedStatements = ts.setTextRange(factory.createNodeArray(__spreadArray(__spreadArray([], combinedStatements, true), [ts.createEmptyExports(factory)], false)), combinedStatements);
                 }
             }
             var updated = factory.updateSourceFile(node, combinedStatements, /*isDeclarationFile*/ true, references, getFileReferencesForUsedTypeReferences(), node.hasNoDefaultLib, getLibReferences());
@@ -101482,8 +103650,7 @@
                         declFileName = paths.declarationFilePath || paths.jsFilePath || file.fileName;
                     }
                     if (declFileName) {
-                        var specifier = ts.moduleSpecifiers.getModuleSpecifier(options, currentSourceFile, ts.toPath(outputFilePath, host.getCurrentDirectory(), host.getCanonicalFileName), ts.toPath(declFileName, host.getCurrentDirectory(), host.getCanonicalFileName), host, 
-                        /*preferences*/ undefined);
+                        var specifier = ts.moduleSpecifiers.getModuleSpecifier(options, currentSourceFile, ts.toPath(outputFilePath, host.getCurrentDirectory(), host.getCanonicalFileName), ts.toPath(declFileName, host.getCurrentDirectory(), host.getCanonicalFileName), host);
                         if (!ts.pathIsRelative(specifier)) {
                             // If some compiler option/symlink/whatever allows access to the file containing the ambient module declaration
                             // via a non-relative name, emit a type reference directive to that non-relative name, rather than
@@ -101527,11 +103694,11 @@
             return ret;
         }
         function filterBindingPatternInitializers(name) {
-            if (name.kind === 78 /* Identifier */) {
+            if (name.kind === 79 /* Identifier */) {
                 return name;
             }
             else {
-                if (name.kind === 198 /* ArrayBindingPattern */) {
+                if (name.kind === 200 /* ArrayBindingPattern */) {
                     return factory.updateArrayBindingPattern(name, ts.visitNodes(name.elements, visitBindingElement));
                 }
                 else {
@@ -101539,7 +103706,7 @@
                 }
             }
             function visitBindingElement(elem) {
-                if (elem.kind === 223 /* OmittedExpression */) {
+                if (elem.kind === 225 /* OmittedExpression */) {
                     return elem;
                 }
                 return factory.updateBindingElement(elem, elem.dotDotDotToken, elem.propertyName, filterBindingPatternInitializers(elem.name), shouldPrintWithInitializer(elem) ? elem.initializer : undefined);
@@ -101577,19 +103744,19 @@
                 // Literal const declarations will have an initializer ensured rather than a type
                 return;
             }
-            var shouldUseResolverType = node.kind === 161 /* Parameter */ &&
+            var shouldUseResolverType = node.kind === 162 /* Parameter */ &&
                 (resolver.isRequiredInitializedParameter(node) ||
                     resolver.isOptionalUninitializedParameterProperty(node));
             if (type && !shouldUseResolverType) {
                 return ts.visitNode(type, visitDeclarationSubtree);
             }
             if (!ts.getParseTreeNode(node)) {
-                return type ? ts.visitNode(type, visitDeclarationSubtree) : factory.createKeywordTypeNode(128 /* AnyKeyword */);
+                return type ? ts.visitNode(type, visitDeclarationSubtree) : factory.createKeywordTypeNode(129 /* AnyKeyword */);
             }
-            if (node.kind === 169 /* SetAccessor */) {
+            if (node.kind === 171 /* SetAccessor */) {
                 // Set accessors with no associated type node (from it's param or get accessor return) are `any` since they are never contextually typed right now
                 // (The inferred type here will be void, but the old declaration emitter printed `any`, so this replicates that)
-                return factory.createKeywordTypeNode(128 /* AnyKeyword */);
+                return factory.createKeywordTypeNode(129 /* AnyKeyword */);
             }
             errorNameNode = node.name;
             var oldDiag;
@@ -101597,12 +103764,12 @@
                 oldDiag = getSymbolAccessibilityDiagnostic;
                 getSymbolAccessibilityDiagnostic = ts.createGetSymbolAccessibilityDiagnosticForNode(node);
             }
-            if (node.kind === 250 /* VariableDeclaration */ || node.kind === 199 /* BindingElement */) {
+            if (node.kind === 252 /* VariableDeclaration */ || node.kind === 201 /* BindingElement */) {
                 return cleanup(resolver.createTypeOfDeclaration(node, enclosingDeclaration, declarationEmitNodeBuilderFlags, symbolTracker));
             }
-            if (node.kind === 161 /* Parameter */
-                || node.kind === 164 /* PropertyDeclaration */
-                || node.kind === 163 /* PropertySignature */) {
+            if (node.kind === 162 /* Parameter */
+                || node.kind === 165 /* PropertyDeclaration */
+                || node.kind === 164 /* PropertySignature */) {
                 if (!node.initializer)
                     return cleanup(resolver.createTypeOfDeclaration(node, enclosingDeclaration, declarationEmitNodeBuilderFlags, symbolTracker, shouldUseResolverType));
                 return cleanup(resolver.createTypeOfDeclaration(node, enclosingDeclaration, declarationEmitNodeBuilderFlags, symbolTracker, shouldUseResolverType) || resolver.createTypeOfExpression(node.initializer, enclosingDeclaration, declarationEmitNodeBuilderFlags, symbolTracker));
@@ -101613,30 +103780,41 @@
                 if (!suppressNewDiagnosticContexts) {
                     getSymbolAccessibilityDiagnostic = oldDiag;
                 }
-                return returnValue || factory.createKeywordTypeNode(128 /* AnyKeyword */);
+                return returnValue || factory.createKeywordTypeNode(129 /* AnyKeyword */);
             }
         }
         function isDeclarationAndNotVisible(node) {
             node = ts.getParseTreeNode(node);
             switch (node.kind) {
-                case 252 /* FunctionDeclaration */:
-                case 257 /* ModuleDeclaration */:
-                case 254 /* InterfaceDeclaration */:
-                case 253 /* ClassDeclaration */:
-                case 255 /* TypeAliasDeclaration */:
-                case 256 /* EnumDeclaration */:
+                case 254 /* FunctionDeclaration */:
+                case 259 /* ModuleDeclaration */:
+                case 256 /* InterfaceDeclaration */:
+                case 255 /* ClassDeclaration */:
+                case 257 /* TypeAliasDeclaration */:
+                case 258 /* EnumDeclaration */:
                     return !resolver.isDeclarationVisible(node);
                 // The following should be doing their own visibility checks based on filtering their members
-                case 250 /* VariableDeclaration */:
+                case 252 /* VariableDeclaration */:
                     return !getBindingNameVisible(node);
-                case 261 /* ImportEqualsDeclaration */:
-                case 262 /* ImportDeclaration */:
-                case 268 /* ExportDeclaration */:
-                case 267 /* ExportAssignment */:
+                case 263 /* ImportEqualsDeclaration */:
+                case 264 /* ImportDeclaration */:
+                case 270 /* ExportDeclaration */:
+                case 269 /* ExportAssignment */:
                     return false;
+                case 168 /* ClassStaticBlockDeclaration */:
+                    return true;
             }
             return false;
         }
+        // If the ExpandoFunctionDeclaration have multiple overloads, then we only need to emit properties for the last one.
+        function shouldEmitFunctionProperties(input) {
+            var _a;
+            if (input.body) {
+                return true;
+            }
+            var overloadSignatures = (_a = input.symbol.declarations) === null || _a === void 0 ? void 0 : _a.filter(function (decl) { return ts.isFunctionDeclaration(decl) && !decl.body; });
+            return !overloadSignatures || overloadSignatures.indexOf(input) === overloadSignatures.length - 1;
+        }
         function getBindingNameVisible(elem) {
             if (ts.isOmittedExpression(elem)) {
                 return false;
@@ -101713,7 +103891,7 @@
         function rewriteModuleSpecifier(parent, input) {
             if (!input)
                 return undefined; // TODO: GH#18217
-            resultHasExternalModuleIndicator = resultHasExternalModuleIndicator || (parent.kind !== 257 /* ModuleDeclaration */ && parent.kind !== 196 /* ImportType */);
+            resultHasExternalModuleIndicator = resultHasExternalModuleIndicator || (parent.kind !== 259 /* ModuleDeclaration */ && parent.kind !== 198 /* ImportType */);
             if (ts.isStringLiteralLike(input)) {
                 if (isBundledEmit) {
                     var newName = ts.getExternalModuleNameFromDeclaration(context.getEmitHost(), resolver, parent);
@@ -101733,7 +103911,7 @@
         function transformImportEqualsDeclaration(decl) {
             if (!resolver.isDeclarationVisible(decl))
                 return;
-            if (decl.moduleReference.kind === 273 /* ExternalModuleReference */) {
+            if (decl.moduleReference.kind === 275 /* ExternalModuleReference */) {
                 // Rewrite external module names if necessary
                 var specifier = ts.getExternalModuleImportEqualsDeclarationExpression(decl);
                 return factory.updateImportEqualsDeclaration(decl, 
@@ -101760,7 +103938,7 @@
                 return visibleDefaultBinding && factory.updateImportDeclaration(decl, /*decorators*/ undefined, decl.modifiers, factory.updateImportClause(decl.importClause, decl.importClause.isTypeOnly, visibleDefaultBinding, 
                 /*namedBindings*/ undefined), rewriteModuleSpecifier(decl, decl.moduleSpecifier));
             }
-            if (decl.importClause.namedBindings.kind === 264 /* NamespaceImport */) {
+            if (decl.importClause.namedBindings.kind === 266 /* NamespaceImport */) {
                 // Namespace import (optionally with visible default)
                 var namedBindings = resolver.isDeclarationVisible(decl.importClause.namedBindings) ? decl.importClause.namedBindings : /*namedBindings*/ undefined;
                 return visibleDefaultBinding || namedBindings ? factory.updateImportDeclaration(decl, /*decorators*/ undefined, decl.modifiers, factory.updateImportClause(decl.importClause, decl.importClause.isTypeOnly, visibleDefaultBinding, namedBindings), rewriteModuleSpecifier(decl, decl.moduleSpecifier)) : undefined;
@@ -101855,7 +104033,7 @@
             // We'd see a TDZ violation at runtime
             var canProduceDiagnostic = ts.canProduceDiagnostics(input);
             var oldWithinObjectLiteralType = suppressNewDiagnosticContexts;
-            var shouldEnterSuppressNewDiagnosticsContextContext = ((input.kind === 178 /* TypeLiteral */ || input.kind === 191 /* MappedType */) && input.parent.kind !== 255 /* TypeAliasDeclaration */);
+            var shouldEnterSuppressNewDiagnosticsContextContext = ((input.kind === 180 /* TypeLiteral */ || input.kind === 193 /* MappedType */) && input.parent.kind !== 257 /* TypeAliasDeclaration */);
             // Emit methods which are private as properties with no type information
             if (ts.isMethodDeclaration(input) || ts.isMethodSignature(input)) {
                 if (ts.hasEffectiveModifier(input, 8 /* Private */)) {
@@ -101876,21 +104054,21 @@
             }
             if (isProcessedComponent(input)) {
                 switch (input.kind) {
-                    case 224 /* ExpressionWithTypeArguments */: {
+                    case 226 /* ExpressionWithTypeArguments */: {
                         if ((ts.isEntityName(input.expression) || ts.isEntityNameExpression(input.expression))) {
                             checkEntityNameVisibility(input.expression, enclosingDeclaration);
                         }
                         var node = ts.visitEachChild(input, visitDeclarationSubtree, context);
                         return cleanup(factory.updateExpressionWithTypeArguments(node, node.expression, node.typeArguments));
                     }
-                    case 174 /* TypeReference */: {
+                    case 176 /* TypeReference */: {
                         checkEntityNameVisibility(input.typeName, enclosingDeclaration);
                         var node = ts.visitEachChild(input, visitDeclarationSubtree, context);
                         return cleanup(factory.updateTypeReferenceNode(node, node.typeName, node.typeArguments));
                     }
-                    case 171 /* ConstructSignature */:
+                    case 173 /* ConstructSignature */:
                         return cleanup(factory.updateConstructSignature(input, ensureTypeParams(input, input.typeParameters), updateParamsList(input, input.parameters), ensureType(input, input.type)));
-                    case 167 /* Constructor */: {
+                    case 169 /* Constructor */: {
                         // A constructor declaration may not have a type annotation
                         var ctor = factory.createConstructorDeclaration(
                         /*decorators*/ undefined, 
@@ -101898,7 +104076,7 @@
                         /*body*/ undefined);
                         return cleanup(ctor);
                     }
-                    case 166 /* MethodDeclaration */: {
+                    case 167 /* MethodDeclaration */: {
                         if (ts.isPrivateIdentifier(input.name)) {
                             return cleanup(/*returnValue*/ undefined);
                         }
@@ -101908,7 +104086,7 @@
                         /*body*/ undefined);
                         return cleanup(sig);
                     }
-                    case 168 /* GetAccessor */: {
+                    case 170 /* GetAccessor */: {
                         if (ts.isPrivateIdentifier(input.name)) {
                             return cleanup(/*returnValue*/ undefined);
                         }
@@ -101917,7 +104095,7 @@
                         /*decorators*/ undefined, ensureModifiers(input), input.name, updateAccessorParamsList(input, ts.hasEffectiveModifier(input, 8 /* Private */)), ensureType(input, accessorType), 
                         /*body*/ undefined));
                     }
-                    case 169 /* SetAccessor */: {
+                    case 171 /* SetAccessor */: {
                         if (ts.isPrivateIdentifier(input.name)) {
                             return cleanup(/*returnValue*/ undefined);
                         }
@@ -101925,31 +104103,31 @@
                         /*decorators*/ undefined, ensureModifiers(input), input.name, updateAccessorParamsList(input, ts.hasEffectiveModifier(input, 8 /* Private */)), 
                         /*body*/ undefined));
                     }
-                    case 164 /* PropertyDeclaration */:
+                    case 165 /* PropertyDeclaration */:
                         if (ts.isPrivateIdentifier(input.name)) {
                             return cleanup(/*returnValue*/ undefined);
                         }
                         return cleanup(factory.updatePropertyDeclaration(input, 
                         /*decorators*/ undefined, ensureModifiers(input), input.name, input.questionToken, ensureType(input, input.type), ensureNoInitializer(input)));
-                    case 163 /* PropertySignature */:
+                    case 164 /* PropertySignature */:
                         if (ts.isPrivateIdentifier(input.name)) {
                             return cleanup(/*returnValue*/ undefined);
                         }
                         return cleanup(factory.updatePropertySignature(input, ensureModifiers(input), input.name, input.questionToken, ensureType(input, input.type)));
-                    case 165 /* MethodSignature */: {
+                    case 166 /* MethodSignature */: {
                         if (ts.isPrivateIdentifier(input.name)) {
                             return cleanup(/*returnValue*/ undefined);
                         }
                         return cleanup(factory.updateMethodSignature(input, ensureModifiers(input), input.name, input.questionToken, ensureTypeParams(input, input.typeParameters), updateParamsList(input, input.parameters), ensureType(input, input.type)));
                     }
-                    case 170 /* CallSignature */: {
+                    case 172 /* CallSignature */: {
                         return cleanup(factory.updateCallSignature(input, ensureTypeParams(input, input.typeParameters), updateParamsList(input, input.parameters), ensureType(input, input.type)));
                     }
-                    case 172 /* IndexSignature */: {
+                    case 174 /* IndexSignature */: {
                         return cleanup(factory.updateIndexSignature(input, 
-                        /*decorators*/ undefined, ensureModifiers(input), updateParamsList(input, input.parameters), ts.visitNode(input.type, visitDeclarationSubtree) || factory.createKeywordTypeNode(128 /* AnyKeyword */)));
+                        /*decorators*/ undefined, ensureModifiers(input), updateParamsList(input, input.parameters), ts.visitNode(input.type, visitDeclarationSubtree) || factory.createKeywordTypeNode(129 /* AnyKeyword */)));
                     }
-                    case 250 /* VariableDeclaration */: {
+                    case 252 /* VariableDeclaration */: {
                         if (ts.isBindingPattern(input.name)) {
                             return recreateBindingPattern(input.name);
                         }
@@ -101957,13 +104135,13 @@
                         suppressNewDiagnosticContexts = true; // Variable declaration types also suppress new diagnostic contexts, provided the contexts wouldn't be made for binding pattern types
                         return cleanup(factory.updateVariableDeclaration(input, input.name, /*exclamationToken*/ undefined, ensureType(input, input.type), ensureNoInitializer(input)));
                     }
-                    case 160 /* TypeParameter */: {
+                    case 161 /* TypeParameter */: {
                         if (isPrivateMethodTypeParameter(input) && (input.default || input.constraint)) {
                             return cleanup(factory.updateTypeParameterDeclaration(input, input.name, /*constraint*/ undefined, /*defaultType*/ undefined));
                         }
                         return cleanup(ts.visitEachChild(input, visitDeclarationSubtree, context));
                     }
-                    case 185 /* ConditionalType */: {
+                    case 187 /* ConditionalType */: {
                         // We have to process conditional types in a special way because for visibility purposes we need to push a new enclosingDeclaration
                         // just for the `infer` types in the true branch. It's an implicit declaration scope that only applies to _part_ of the type.
                         var checkType = ts.visitNode(input.checkType, visitDeclarationSubtree);
@@ -101975,13 +104153,13 @@
                         var falseType = ts.visitNode(input.falseType, visitDeclarationSubtree);
                         return cleanup(factory.updateConditionalTypeNode(input, checkType, extendsType, trueType, falseType));
                     }
-                    case 175 /* FunctionType */: {
+                    case 177 /* FunctionType */: {
                         return cleanup(factory.updateFunctionTypeNode(input, ts.visitNodes(input.typeParameters, visitDeclarationSubtree), updateParamsList(input, input.parameters), ts.visitNode(input.type, visitDeclarationSubtree)));
                     }
-                    case 176 /* ConstructorType */: {
+                    case 178 /* ConstructorType */: {
                         return cleanup(factory.updateConstructorTypeNode(input, ensureModifiers(input), ts.visitNodes(input.typeParameters, visitDeclarationSubtree), updateParamsList(input, input.parameters), ts.visitNode(input.type, visitDeclarationSubtree)));
                     }
-                    case 196 /* ImportType */: {
+                    case 198 /* ImportType */: {
                         if (!ts.isLiteralImportTypeNode(input))
                             return cleanup(input);
                         return cleanup(factory.updateImportTypeNode(input, factory.updateLiteralTypeNode(input.argument, rewriteModuleSpecifier(input, input.argument.literal)), input.qualifier, ts.visitNodes(input.typeArguments, visitDeclarationSubtree, ts.isTypeNode), input.isTypeOf));
@@ -102013,7 +104191,7 @@
             }
         }
         function isPrivateMethodTypeParameter(node) {
-            return node.parent.kind === 166 /* MethodDeclaration */ && ts.hasEffectiveModifier(node.parent, 8 /* Private */);
+            return node.parent.kind === 167 /* MethodDeclaration */ && ts.hasEffectiveModifier(node.parent, 8 /* Private */);
         }
         function visitDeclarationStatements(input) {
             if (!isPreservedDeclarationStatement(input)) {
@@ -102023,7 +104201,7 @@
             if (shouldStripInternal(input))
                 return;
             switch (input.kind) {
-                case 268 /* ExportDeclaration */: {
+                case 270 /* ExportDeclaration */: {
                     if (ts.isSourceFile(input.parent)) {
                         resultHasExternalModuleIndicator = true;
                     }
@@ -102033,13 +104211,13 @@
                     return factory.updateExportDeclaration(input, 
                     /*decorators*/ undefined, input.modifiers, input.isTypeOnly, input.exportClause, rewriteModuleSpecifier(input, input.moduleSpecifier));
                 }
-                case 267 /* ExportAssignment */: {
+                case 269 /* ExportAssignment */: {
                     // Always visible if the parent node isn't dropped for being not visible
                     if (ts.isSourceFile(input.parent)) {
                         resultHasExternalModuleIndicator = true;
                     }
                     resultHasScopeMarker = true;
-                    if (input.expression.kind === 78 /* Identifier */) {
+                    if (input.expression.kind === 79 /* Identifier */) {
                         return input;
                     }
                     else {
@@ -102051,7 +104229,7 @@
                         errorFallbackNode = input;
                         var varDecl = factory.createVariableDeclaration(newId, /*exclamationToken*/ undefined, resolver.createTypeOfExpression(input.expression, input, declarationEmitNodeBuilderFlags, symbolTracker), /*initializer*/ undefined);
                         errorFallbackNode = undefined;
-                        var statement = factory.createVariableStatement(needsDeclare ? [factory.createModifier(133 /* DeclareKeyword */)] : [], factory.createVariableDeclarationList([varDecl], 2 /* Const */));
+                        var statement = factory.createVariableStatement(needsDeclare ? [factory.createModifier(134 /* DeclareKeyword */)] : [], factory.createVariableDeclarationList([varDecl], 2 /* Const */));
                         return [statement, factory.updateExportAssignment(input, input.decorators, input.modifiers, newId)];
                     }
                 }
@@ -102074,10 +104252,10 @@
             if (shouldStripInternal(input))
                 return;
             switch (input.kind) {
-                case 261 /* ImportEqualsDeclaration */: {
+                case 263 /* ImportEqualsDeclaration */: {
                     return transformImportEqualsDeclaration(input);
                 }
-                case 262 /* ImportDeclaration */: {
+                case 264 /* ImportDeclaration */: {
                     return transformImportDeclaration(input);
                 }
             }
@@ -102098,20 +104276,20 @@
             }
             var previousNeedsDeclare = needsDeclare;
             switch (input.kind) {
-                case 255 /* TypeAliasDeclaration */: // Type aliases get `declare`d if need be (for legacy support), but that's all
+                case 257 /* TypeAliasDeclaration */: // Type aliases get `declare`d if need be (for legacy support), but that's all
                     return cleanup(factory.updateTypeAliasDeclaration(input, 
                     /*decorators*/ undefined, ensureModifiers(input), input.name, ts.visitNodes(input.typeParameters, visitDeclarationSubtree, ts.isTypeParameterDeclaration), ts.visitNode(input.type, visitDeclarationSubtree, ts.isTypeNode)));
-                case 254 /* InterfaceDeclaration */: {
+                case 256 /* InterfaceDeclaration */: {
                     return cleanup(factory.updateInterfaceDeclaration(input, 
                     /*decorators*/ undefined, ensureModifiers(input), input.name, ensureTypeParams(input, input.typeParameters), transformHeritageClauses(input.heritageClauses), ts.visitNodes(input.members, visitDeclarationSubtree)));
                 }
-                case 252 /* FunctionDeclaration */: {
+                case 254 /* FunctionDeclaration */: {
                     // Generators lose their generator-ness, excepting their return type
                     var clean = cleanup(factory.updateFunctionDeclaration(input, 
                     /*decorators*/ undefined, ensureModifiers(input), 
                     /*asteriskToken*/ undefined, input.name, ensureTypeParams(input, input.typeParameters), updateParamsList(input, input.parameters), ensureType(input, input.type), 
                     /*body*/ undefined));
-                    if (clean && resolver.isExpandoFunctionDeclaration(input)) {
+                    if (clean && resolver.isExpandoFunctionDeclaration(input) && shouldEmitFunctionProperties(input)) {
                         var props = resolver.getPropertiesOfContainerFunction(input);
                         // Use parseNodeFactory so it is usable as an enclosing declaration
                         var fakespace_1 = ts.parseNodeFactory.createModuleDeclaration(/*decorators*/ undefined, /*modifiers*/ undefined, clean.name || factory.createIdentifier("_default"), factory.createModuleBlock([]), 16 /* Namespace */);
@@ -102133,7 +104311,7 @@
                                 exportMappings_1.push([name, nameStr]);
                             }
                             var varDecl = factory.createVariableDeclaration(name, /*exclamationToken*/ undefined, type, /*initializer*/ undefined);
-                            return factory.createVariableStatement(isNonContextualKeywordName ? undefined : [factory.createToken(92 /* ExportKeyword */)], factory.createVariableDeclarationList([varDecl]));
+                            return factory.createVariableStatement(isNonContextualKeywordName ? undefined : [factory.createToken(93 /* ExportKeyword */)], factory.createVariableDeclarationList([varDecl]));
                         });
                         if (!exportMappings_1.length) {
                             declarations = ts.mapDefined(declarations, function (declaration) { return factory.updateModifiers(declaration, 0 /* None */); });
@@ -102172,10 +104350,10 @@
                         return clean;
                     }
                 }
-                case 257 /* ModuleDeclaration */: {
+                case 259 /* ModuleDeclaration */: {
                     needsDeclare = false;
                     var inner = input.body;
-                    if (inner && inner.kind === 258 /* ModuleBlock */) {
+                    if (inner && inner.kind === 260 /* ModuleBlock */) {
                         var oldNeedsScopeFix = needsScopeFixMarker;
                         var oldHasScopeFix = resultHasScopeMarker;
                         resultHasScopeMarker = false;
@@ -102191,7 +104369,7 @@
                         // 3. Some things are exported, some are not, and there's no marker - add an empty marker
                         if (!ts.isGlobalScopeAugmentation(input) && !hasScopeMarker(lateStatements) && !resultHasScopeMarker) {
                             if (needsScopeFixMarker) {
-                                lateStatements = factory.createNodeArray(__spreadArray(__spreadArray([], lateStatements), [ts.createEmptyExports(factory)]));
+                                lateStatements = factory.createNodeArray(__spreadArray(__spreadArray([], lateStatements, true), [ts.createEmptyExports(factory)], false));
                             }
                             else {
                                 lateStatements = ts.visitNodes(lateStatements, stripExportModifiers);
@@ -102218,7 +104396,7 @@
                         /*decorators*/ undefined, mods, input.name, body));
                     }
                 }
-                case 253 /* ClassDeclaration */: {
+                case 255 /* ClassDeclaration */: {
                     errorNameNode = input.name;
                     errorFallbackNode = input;
                     var modifiers = factory.createNodeArray(ensureModifiers(input));
@@ -102231,7 +104409,7 @@
                             if (!ts.hasSyntacticModifier(param, 16476 /* ParameterPropertyModifier */) || shouldStripInternal(param))
                                 return;
                             getSymbolAccessibilityDiagnostic = ts.createGetSymbolAccessibilityDiagnosticForNode(param);
-                            if (param.name.kind === 78 /* Identifier */) {
+                            if (param.name.kind === 79 /* Identifier */) {
                                 return preserveJsDoc(factory.createPropertyDeclaration(
                                 /*decorators*/ undefined, ensureModifiers(param), param.name, param.questionToken, ensureType(param, param.type), ensureNoInitializer(param)), param);
                             }
@@ -102273,7 +104451,7 @@
                     var memberNodes = ts.concatenate(ts.concatenate(privateIdentifier, parameterProperties), ts.visitNodes(input.members, visitDeclarationSubtree));
                     var members = factory.createNodeArray(memberNodes);
                     var extendsClause_1 = ts.getEffectiveBaseTypeNode(input);
-                    if (extendsClause_1 && !ts.isEntityNameExpression(extendsClause_1.expression) && extendsClause_1.expression.kind !== 103 /* NullKeyword */) {
+                    if (extendsClause_1 && !ts.isEntityNameExpression(extendsClause_1.expression) && extendsClause_1.expression.kind !== 104 /* NullKeyword */) {
                         // We must add a temporary declaration for the extends clause expression
                         var oldId = input.name ? ts.unescapeLeadingUnderscores(input.name.escapedText) : "default";
                         var newId_1 = factory.createUniqueName(oldId + "_base", 16 /* Optimistic */);
@@ -102283,16 +104461,16 @@
                             typeName: input.name
                         }); };
                         var varDecl = factory.createVariableDeclaration(newId_1, /*exclamationToken*/ undefined, resolver.createTypeOfExpression(extendsClause_1.expression, input, declarationEmitNodeBuilderFlags, symbolTracker), /*initializer*/ undefined);
-                        var statement = factory.createVariableStatement(needsDeclare ? [factory.createModifier(133 /* DeclareKeyword */)] : [], factory.createVariableDeclarationList([varDecl], 2 /* Const */));
+                        var statement = factory.createVariableStatement(needsDeclare ? [factory.createModifier(134 /* DeclareKeyword */)] : [], factory.createVariableDeclarationList([varDecl], 2 /* Const */));
                         var heritageClauses = factory.createNodeArray(ts.map(input.heritageClauses, function (clause) {
-                            if (clause.token === 93 /* ExtendsKeyword */) {
+                            if (clause.token === 94 /* ExtendsKeyword */) {
                                 var oldDiag_2 = getSymbolAccessibilityDiagnostic;
                                 getSymbolAccessibilityDiagnostic = ts.createGetSymbolAccessibilityDiagnosticForNode(clause.types[0]);
                                 var newClause = factory.updateHeritageClause(clause, ts.map(clause.types, function (t) { return factory.updateExpressionWithTypeArguments(t, newId_1, ts.visitNodes(t.typeArguments, visitDeclarationSubtree)); }));
                                 getSymbolAccessibilityDiagnostic = oldDiag_2;
                                 return newClause;
                             }
-                            return factory.updateHeritageClause(clause, ts.visitNodes(factory.createNodeArray(ts.filter(clause.types, function (t) { return ts.isEntityNameExpression(t.expression) || t.expression.kind === 103 /* NullKeyword */; })), visitDeclarationSubtree));
+                            return factory.updateHeritageClause(clause, ts.visitNodes(factory.createNodeArray(ts.filter(clause.types, function (t) { return ts.isEntityNameExpression(t.expression) || t.expression.kind === 104 /* NullKeyword */; })), visitDeclarationSubtree));
                         }));
                         return [statement, cleanup(factory.updateClassDeclaration(input, 
                             /*decorators*/ undefined, modifiers, input.name, typeParameters, heritageClauses, members))]; // TODO: GH#18217
@@ -102303,10 +104481,10 @@
                         /*decorators*/ undefined, modifiers, input.name, typeParameters, heritageClauses, members));
                     }
                 }
-                case 233 /* VariableStatement */: {
+                case 235 /* VariableStatement */: {
                     return cleanup(transformVariableStatement(input));
                 }
-                case 256 /* EnumDeclaration */: {
+                case 258 /* EnumDeclaration */: {
                     return cleanup(factory.updateEnumDeclaration(input, /*decorators*/ undefined, factory.createNodeArray(ensureModifiers(input)), input.name, factory.createNodeArray(ts.mapDefined(input.members, function (m) {
                         if (shouldStripInternal(m))
                             return;
@@ -102325,7 +104503,7 @@
                 if (canProdiceDiagnostic) {
                     getSymbolAccessibilityDiagnostic = oldDiag;
                 }
-                if (input.kind === 257 /* ModuleDeclaration */) {
+                if (input.kind === 259 /* ModuleDeclaration */) {
                     needsDeclare = previousNeedsDeclare;
                 }
                 if (node === input) {
@@ -102348,7 +104526,7 @@
             return ts.flatten(ts.mapDefined(d.elements, function (e) { return recreateBindingElement(e); }));
         }
         function recreateBindingElement(e) {
-            if (e.kind === 223 /* OmittedExpression */) {
+            if (e.kind === 225 /* OmittedExpression */) {
                 return;
             }
             if (e.name) {
@@ -102398,7 +104576,7 @@
         function ensureModifierFlags(node) {
             var mask = 27647 /* All */ ^ (4 /* Public */ | 256 /* Async */ | 16384 /* Override */); // No async and override modifiers in declaration files
             var additions = (needsDeclare && !isAlwaysType(node)) ? 2 /* Ambient */ : 0 /* None */;
-            var parentIsFile = node.parent.kind === 298 /* SourceFile */;
+            var parentIsFile = node.parent.kind === 300 /* SourceFile */;
             if (!parentIsFile || (isBundledEmit && parentIsFile && ts.isExternalModule(node.parent))) {
                 mask ^= 2 /* Ambient */;
                 additions = 0 /* None */;
@@ -102421,13 +104599,13 @@
         }
         function transformHeritageClauses(nodes) {
             return factory.createNodeArray(ts.filter(ts.map(nodes, function (clause) { return factory.updateHeritageClause(clause, ts.visitNodes(factory.createNodeArray(ts.filter(clause.types, function (t) {
-                return ts.isEntityNameExpression(t.expression) || (clause.token === 93 /* ExtendsKeyword */ && t.expression.kind === 103 /* NullKeyword */);
+                return ts.isEntityNameExpression(t.expression) || (clause.token === 94 /* ExtendsKeyword */ && t.expression.kind === 104 /* NullKeyword */);
             })), visitDeclarationSubtree)); }), function (clause) { return clause.types && !!clause.types.length; }));
         }
     }
     ts.transformDeclarations = transformDeclarations;
     function isAlwaysType(node) {
-        if (node.kind === 254 /* InterfaceDeclaration */) {
+        if (node.kind === 256 /* InterfaceDeclaration */) {
             return true;
         }
         return false;
@@ -102452,7 +104630,7 @@
     }
     function getTypeAnnotationFromAccessor(accessor) {
         if (accessor) {
-            return accessor.kind === 168 /* GetAccessor */
+            return accessor.kind === 170 /* GetAccessor */
                 ? accessor.type // Getter - return type
                 : accessor.parameters.length > 0
                     ? accessor.parameters[0].type // Setter parameter type
@@ -102461,52 +104639,52 @@
     }
     function canHaveLiteralInitializer(node) {
         switch (node.kind) {
-            case 164 /* PropertyDeclaration */:
-            case 163 /* PropertySignature */:
+            case 165 /* PropertyDeclaration */:
+            case 164 /* PropertySignature */:
                 return !ts.hasEffectiveModifier(node, 8 /* Private */);
-            case 161 /* Parameter */:
-            case 250 /* VariableDeclaration */:
+            case 162 /* Parameter */:
+            case 252 /* VariableDeclaration */:
                 return true;
         }
         return false;
     }
     function isPreservedDeclarationStatement(node) {
         switch (node.kind) {
-            case 252 /* FunctionDeclaration */:
-            case 257 /* ModuleDeclaration */:
-            case 261 /* ImportEqualsDeclaration */:
-            case 254 /* InterfaceDeclaration */:
-            case 253 /* ClassDeclaration */:
-            case 255 /* TypeAliasDeclaration */:
-            case 256 /* EnumDeclaration */:
-            case 233 /* VariableStatement */:
-            case 262 /* ImportDeclaration */:
-            case 268 /* ExportDeclaration */:
-            case 267 /* ExportAssignment */:
+            case 254 /* FunctionDeclaration */:
+            case 259 /* ModuleDeclaration */:
+            case 263 /* ImportEqualsDeclaration */:
+            case 256 /* InterfaceDeclaration */:
+            case 255 /* ClassDeclaration */:
+            case 257 /* TypeAliasDeclaration */:
+            case 258 /* EnumDeclaration */:
+            case 235 /* VariableStatement */:
+            case 264 /* ImportDeclaration */:
+            case 270 /* ExportDeclaration */:
+            case 269 /* ExportAssignment */:
                 return true;
         }
         return false;
     }
     function isProcessedComponent(node) {
         switch (node.kind) {
-            case 171 /* ConstructSignature */:
-            case 167 /* Constructor */:
-            case 166 /* MethodDeclaration */:
-            case 168 /* GetAccessor */:
-            case 169 /* SetAccessor */:
-            case 164 /* PropertyDeclaration */:
-            case 163 /* PropertySignature */:
-            case 165 /* MethodSignature */:
-            case 170 /* CallSignature */:
-            case 172 /* IndexSignature */:
-            case 250 /* VariableDeclaration */:
-            case 160 /* TypeParameter */:
-            case 224 /* ExpressionWithTypeArguments */:
-            case 174 /* TypeReference */:
-            case 185 /* ConditionalType */:
-            case 175 /* FunctionType */:
-            case 176 /* ConstructorType */:
-            case 196 /* ImportType */:
+            case 173 /* ConstructSignature */:
+            case 169 /* Constructor */:
+            case 167 /* MethodDeclaration */:
+            case 170 /* GetAccessor */:
+            case 171 /* SetAccessor */:
+            case 165 /* PropertyDeclaration */:
+            case 164 /* PropertySignature */:
+            case 166 /* MethodSignature */:
+            case 172 /* CallSignature */:
+            case 174 /* IndexSignature */:
+            case 252 /* VariableDeclaration */:
+            case 161 /* TypeParameter */:
+            case 226 /* ExpressionWithTypeArguments */:
+            case 176 /* TypeReference */:
+            case 187 /* ConditionalType */:
+            case 177 /* FunctionType */:
+            case 178 /* ConstructorType */:
+            case 198 /* ImportType */:
                 return true;
         }
         return false;
@@ -102641,7 +104819,7 @@
      * @param allowDtsFiles A value indicating whether to allow the transformation of .d.ts files.
      */
     function transformNodes(resolver, host, factory, options, nodes, transformers, allowDtsFiles) {
-        var enabledSyntaxKindFeatures = new Array(345 /* Count */);
+        var enabledSyntaxKindFeatures = new Array(350 /* Count */);
         var lexicalEnvironmentVariableDeclarations;
         var lexicalEnvironmentFunctionDeclarations;
         var lexicalEnvironmentStatements;
@@ -102723,7 +104901,7 @@
         var transformed = [];
         for (var _a = 0, nodes_3 = nodes; _a < nodes_3.length; _a++) {
             var node = nodes_3[_a];
-            ts.tracing === null || ts.tracing === void 0 ? void 0 : ts.tracing.push("emit" /* Emit */, "transformNodes", node.kind === 298 /* SourceFile */ ? { path: node.path } : { kind: node.kind, pos: node.pos, end: node.end });
+            ts.tracing === null || ts.tracing === void 0 ? void 0 : ts.tracing.push("emit" /* Emit */, "transformNodes", node.kind === 300 /* SourceFile */ ? { path: node.path } : { kind: node.kind, pos: node.pos, end: node.end });
             transformed.push((allowDtsFiles ? transformation : transformRoot)(node));
             ts.tracing === null || ts.tracing === void 0 ? void 0 : ts.tracing.pop();
         }
@@ -102896,7 +105074,7 @@
                 lexicalEnvironmentFunctionDeclarations ||
                 lexicalEnvironmentStatements) {
                 if (lexicalEnvironmentFunctionDeclarations) {
-                    statements = __spreadArray([], lexicalEnvironmentFunctionDeclarations);
+                    statements = __spreadArray([], lexicalEnvironmentFunctionDeclarations, true);
                 }
                 if (lexicalEnvironmentVariableDeclarations) {
                     var statement = factory.createVariableStatement(
@@ -102911,10 +105089,10 @@
                 }
                 if (lexicalEnvironmentStatements) {
                     if (!statements) {
-                        statements = __spreadArray([], lexicalEnvironmentStatements);
+                        statements = __spreadArray([], lexicalEnvironmentStatements, true);
                     }
                     else {
-                        statements = __spreadArray(__spreadArray([], statements), lexicalEnvironmentStatements);
+                        statements = __spreadArray(__spreadArray([], statements, true), lexicalEnvironmentStatements, true);
                     }
                 }
             }
@@ -103129,7 +105307,7 @@
     /*@internal*/
     function getOutputPathsFor(sourceFile, host, forceDtsPaths) {
         var options = host.getCompilerOptions();
-        if (sourceFile.kind === 299 /* Bundle */) {
+        if (sourceFile.kind === 301 /* Bundle */) {
             return getOutputPathsForBundle(options, forceDtsPaths);
         }
         else {
@@ -103496,7 +105674,7 @@
                     extendedDiagnostics: compilerOptions.extendedDiagnostics,
                     // Explicitly do not passthru either `inline` option
                 });
-                if (forceDtsEmit && declarationTransform.transformed[0].kind === 298 /* SourceFile */) {
+                if (forceDtsEmit && declarationTransform.transformed[0].kind === 300 /* SourceFile */) {
                     var sourceFile = declarationTransform.transformed[0];
                     exportedModulesFromDeclarationEmit = sourceFile.exportedModulesFromDeclarationEmit;
                 }
@@ -103507,7 +105685,7 @@
         }
         function collectLinkedAliases(node) {
             if (ts.isExportAssignment(node)) {
-                if (node.expression.kind === 78 /* Identifier */) {
+                if (node.expression.kind === 79 /* Identifier */) {
                     resolver.collectLinkedAliases(node.expression, /*setVisibility*/ true);
                 }
                 return;
@@ -103519,8 +105697,8 @@
             ts.forEachChild(node, collectLinkedAliases);
         }
         function printSourceFileOrBundle(jsFilePath, sourceMapFilePath, sourceFileOrBundle, printer, mapOptions) {
-            var bundle = sourceFileOrBundle.kind === 299 /* Bundle */ ? sourceFileOrBundle : undefined;
-            var sourceFile = sourceFileOrBundle.kind === 298 /* SourceFile */ ? sourceFileOrBundle : undefined;
+            var bundle = sourceFileOrBundle.kind === 301 /* Bundle */ ? sourceFileOrBundle : undefined;
+            var sourceFile = sourceFileOrBundle.kind === 300 /* SourceFile */ ? sourceFileOrBundle : undefined;
             var sourceFiles = bundle ? bundle.sourceFiles : [sourceFile];
             var sourceMapGenerator;
             if (shouldEmitSourceMaps(mapOptions, sourceFileOrBundle)) {
@@ -103561,7 +105739,7 @@
         }
         function shouldEmitSourceMaps(mapOptions, sourceFileOrBundle) {
             return (mapOptions.sourceMap || mapOptions.inlineSourceMap)
-                && (sourceFileOrBundle.kind !== 298 /* SourceFile */ || !ts.fileExtensionIs(sourceFileOrBundle.fileName, ".json" /* Json */));
+                && (sourceFileOrBundle.kind !== 300 /* SourceFile */ || !ts.fileExtensionIs(sourceFileOrBundle.fileName, ".json" /* Json */));
         }
         function getSourceRoot(mapOptions) {
             // Normalize source root and make sure it has trailing "/" so that it can be used to combine paths with the
@@ -103727,7 +105905,7 @@
         var prependNodes = ts.createPrependNodes(config.projectReferences, getCommandLine, function (f) { return host.readFile(f); });
         var sourceFilesForJsEmit = createSourceFilesFromBundleBuildInfo(buildInfo.bundle, buildInfoDirectory, host);
         var emitHost = {
-            getPrependNodes: ts.memoize(function () { return __spreadArray(__spreadArray([], prependNodes), [ownPrependInput]); }),
+            getPrependNodes: ts.memoize(function () { return __spreadArray(__spreadArray([], prependNodes, true), [ownPrependInput], false); }),
             getCanonicalFileName: host.getCanonicalFileName,
             getCommonSourceDirectory: function () { return ts.getNormalizedAbsolutePath(buildInfo.bundle.commonSourceDirectory, buildInfoDirectory); },
             getCompilerOptions: function () { return config.options; },
@@ -103872,9 +106050,9 @@
                     break;
             }
             switch (node.kind) {
-                case 298 /* SourceFile */: return printFile(node);
-                case 299 /* Bundle */: return printBundle(node);
-                case 300 /* UnparsedSource */: return printUnparsedSource(node);
+                case 300 /* SourceFile */: return printFile(node);
+                case 301 /* Bundle */: return printBundle(node);
+                case 302 /* UnparsedSource */: return printUnparsedSource(node);
             }
             writeNode(hint, node, sourceFile, beginPrint());
             return endPrint();
@@ -104194,316 +106372,318 @@
                     case 17 /* TemplateTail */:
                         return emitLiteral(node, /*jsxAttributeEscape*/ false);
                     // Identifiers
-                    case 78 /* Identifier */:
+                    case 79 /* Identifier */:
                         return emitIdentifier(node);
                     // PrivateIdentifiers
-                    case 79 /* PrivateIdentifier */:
+                    case 80 /* PrivateIdentifier */:
                         return emitPrivateIdentifier(node);
                     // Parse tree nodes
                     // Names
-                    case 158 /* QualifiedName */:
+                    case 159 /* QualifiedName */:
                         return emitQualifiedName(node);
-                    case 159 /* ComputedPropertyName */:
+                    case 160 /* ComputedPropertyName */:
                         return emitComputedPropertyName(node);
                     // Signature elements
-                    case 160 /* TypeParameter */:
+                    case 161 /* TypeParameter */:
                         return emitTypeParameter(node);
-                    case 161 /* Parameter */:
+                    case 162 /* Parameter */:
                         return emitParameter(node);
-                    case 162 /* Decorator */:
+                    case 163 /* Decorator */:
                         return emitDecorator(node);
                     // Type members
-                    case 163 /* PropertySignature */:
+                    case 164 /* PropertySignature */:
                         return emitPropertySignature(node);
-                    case 164 /* PropertyDeclaration */:
+                    case 165 /* PropertyDeclaration */:
                         return emitPropertyDeclaration(node);
-                    case 165 /* MethodSignature */:
+                    case 166 /* MethodSignature */:
                         return emitMethodSignature(node);
-                    case 166 /* MethodDeclaration */:
+                    case 167 /* MethodDeclaration */:
                         return emitMethodDeclaration(node);
-                    case 167 /* Constructor */:
+                    case 168 /* ClassStaticBlockDeclaration */:
+                        return emitClassStaticBlockDeclaration(node);
+                    case 169 /* Constructor */:
                         return emitConstructor(node);
-                    case 168 /* GetAccessor */:
-                    case 169 /* SetAccessor */:
+                    case 170 /* GetAccessor */:
+                    case 171 /* SetAccessor */:
                         return emitAccessorDeclaration(node);
-                    case 170 /* CallSignature */:
+                    case 172 /* CallSignature */:
                         return emitCallSignature(node);
-                    case 171 /* ConstructSignature */:
+                    case 173 /* ConstructSignature */:
                         return emitConstructSignature(node);
-                    case 172 /* IndexSignature */:
+                    case 174 /* IndexSignature */:
                         return emitIndexSignature(node);
                     // Types
-                    case 173 /* TypePredicate */:
+                    case 175 /* TypePredicate */:
                         return emitTypePredicate(node);
-                    case 174 /* TypeReference */:
+                    case 176 /* TypeReference */:
                         return emitTypeReference(node);
-                    case 175 /* FunctionType */:
+                    case 177 /* FunctionType */:
                         return emitFunctionType(node);
-                    case 176 /* ConstructorType */:
+                    case 178 /* ConstructorType */:
                         return emitConstructorType(node);
-                    case 177 /* TypeQuery */:
+                    case 179 /* TypeQuery */:
                         return emitTypeQuery(node);
-                    case 178 /* TypeLiteral */:
+                    case 180 /* TypeLiteral */:
                         return emitTypeLiteral(node);
-                    case 179 /* ArrayType */:
+                    case 181 /* ArrayType */:
                         return emitArrayType(node);
-                    case 180 /* TupleType */:
+                    case 182 /* TupleType */:
                         return emitTupleType(node);
-                    case 181 /* OptionalType */:
+                    case 183 /* OptionalType */:
                         return emitOptionalType(node);
                     // SyntaxKind.RestType is handled below
-                    case 183 /* UnionType */:
+                    case 185 /* UnionType */:
                         return emitUnionType(node);
-                    case 184 /* IntersectionType */:
+                    case 186 /* IntersectionType */:
                         return emitIntersectionType(node);
-                    case 185 /* ConditionalType */:
+                    case 187 /* ConditionalType */:
                         return emitConditionalType(node);
-                    case 186 /* InferType */:
+                    case 188 /* InferType */:
                         return emitInferType(node);
-                    case 187 /* ParenthesizedType */:
+                    case 189 /* ParenthesizedType */:
                         return emitParenthesizedType(node);
-                    case 224 /* ExpressionWithTypeArguments */:
+                    case 226 /* ExpressionWithTypeArguments */:
                         return emitExpressionWithTypeArguments(node);
-                    case 188 /* ThisType */:
+                    case 190 /* ThisType */:
                         return emitThisType();
-                    case 189 /* TypeOperator */:
+                    case 191 /* TypeOperator */:
                         return emitTypeOperator(node);
-                    case 190 /* IndexedAccessType */:
+                    case 192 /* IndexedAccessType */:
                         return emitIndexedAccessType(node);
-                    case 191 /* MappedType */:
+                    case 193 /* MappedType */:
                         return emitMappedType(node);
-                    case 192 /* LiteralType */:
+                    case 194 /* LiteralType */:
                         return emitLiteralType(node);
-                    case 193 /* NamedTupleMember */:
+                    case 195 /* NamedTupleMember */:
                         return emitNamedTupleMember(node);
-                    case 194 /* TemplateLiteralType */:
+                    case 196 /* TemplateLiteralType */:
                         return emitTemplateType(node);
-                    case 195 /* TemplateLiteralTypeSpan */:
+                    case 197 /* TemplateLiteralTypeSpan */:
                         return emitTemplateTypeSpan(node);
-                    case 196 /* ImportType */:
+                    case 198 /* ImportType */:
                         return emitImportTypeNode(node);
                     // Binding patterns
-                    case 197 /* ObjectBindingPattern */:
+                    case 199 /* ObjectBindingPattern */:
                         return emitObjectBindingPattern(node);
-                    case 198 /* ArrayBindingPattern */:
+                    case 200 /* ArrayBindingPattern */:
                         return emitArrayBindingPattern(node);
-                    case 199 /* BindingElement */:
+                    case 201 /* BindingElement */:
                         return emitBindingElement(node);
                     // Misc
-                    case 229 /* TemplateSpan */:
+                    case 231 /* TemplateSpan */:
                         return emitTemplateSpan(node);
-                    case 230 /* SemicolonClassElement */:
+                    case 232 /* SemicolonClassElement */:
                         return emitSemicolonClassElement();
                     // Statements
-                    case 231 /* Block */:
+                    case 233 /* Block */:
                         return emitBlock(node);
-                    case 233 /* VariableStatement */:
+                    case 235 /* VariableStatement */:
                         return emitVariableStatement(node);
-                    case 232 /* EmptyStatement */:
+                    case 234 /* EmptyStatement */:
                         return emitEmptyStatement(/*isEmbeddedStatement*/ false);
-                    case 234 /* ExpressionStatement */:
+                    case 236 /* ExpressionStatement */:
                         return emitExpressionStatement(node);
-                    case 235 /* IfStatement */:
+                    case 237 /* IfStatement */:
                         return emitIfStatement(node);
-                    case 236 /* DoStatement */:
+                    case 238 /* DoStatement */:
                         return emitDoStatement(node);
-                    case 237 /* WhileStatement */:
+                    case 239 /* WhileStatement */:
                         return emitWhileStatement(node);
-                    case 238 /* ForStatement */:
+                    case 240 /* ForStatement */:
                         return emitForStatement(node);
-                    case 239 /* ForInStatement */:
+                    case 241 /* ForInStatement */:
                         return emitForInStatement(node);
-                    case 240 /* ForOfStatement */:
+                    case 242 /* ForOfStatement */:
                         return emitForOfStatement(node);
-                    case 241 /* ContinueStatement */:
+                    case 243 /* ContinueStatement */:
                         return emitContinueStatement(node);
-                    case 242 /* BreakStatement */:
+                    case 244 /* BreakStatement */:
                         return emitBreakStatement(node);
-                    case 243 /* ReturnStatement */:
+                    case 245 /* ReturnStatement */:
                         return emitReturnStatement(node);
-                    case 244 /* WithStatement */:
+                    case 246 /* WithStatement */:
                         return emitWithStatement(node);
-                    case 245 /* SwitchStatement */:
+                    case 247 /* SwitchStatement */:
                         return emitSwitchStatement(node);
-                    case 246 /* LabeledStatement */:
+                    case 248 /* LabeledStatement */:
                         return emitLabeledStatement(node);
-                    case 247 /* ThrowStatement */:
+                    case 249 /* ThrowStatement */:
                         return emitThrowStatement(node);
-                    case 248 /* TryStatement */:
+                    case 250 /* TryStatement */:
                         return emitTryStatement(node);
-                    case 249 /* DebuggerStatement */:
+                    case 251 /* DebuggerStatement */:
                         return emitDebuggerStatement(node);
                     // Declarations
-                    case 250 /* VariableDeclaration */:
+                    case 252 /* VariableDeclaration */:
                         return emitVariableDeclaration(node);
-                    case 251 /* VariableDeclarationList */:
+                    case 253 /* VariableDeclarationList */:
                         return emitVariableDeclarationList(node);
-                    case 252 /* FunctionDeclaration */:
+                    case 254 /* FunctionDeclaration */:
                         return emitFunctionDeclaration(node);
-                    case 253 /* ClassDeclaration */:
+                    case 255 /* ClassDeclaration */:
                         return emitClassDeclaration(node);
-                    case 254 /* InterfaceDeclaration */:
+                    case 256 /* InterfaceDeclaration */:
                         return emitInterfaceDeclaration(node);
-                    case 255 /* TypeAliasDeclaration */:
+                    case 257 /* TypeAliasDeclaration */:
                         return emitTypeAliasDeclaration(node);
-                    case 256 /* EnumDeclaration */:
+                    case 258 /* EnumDeclaration */:
                         return emitEnumDeclaration(node);
-                    case 257 /* ModuleDeclaration */:
+                    case 259 /* ModuleDeclaration */:
                         return emitModuleDeclaration(node);
-                    case 258 /* ModuleBlock */:
+                    case 260 /* ModuleBlock */:
                         return emitModuleBlock(node);
-                    case 259 /* CaseBlock */:
+                    case 261 /* CaseBlock */:
                         return emitCaseBlock(node);
-                    case 260 /* NamespaceExportDeclaration */:
+                    case 262 /* NamespaceExportDeclaration */:
                         return emitNamespaceExportDeclaration(node);
-                    case 261 /* ImportEqualsDeclaration */:
+                    case 263 /* ImportEqualsDeclaration */:
                         return emitImportEqualsDeclaration(node);
-                    case 262 /* ImportDeclaration */:
+                    case 264 /* ImportDeclaration */:
                         return emitImportDeclaration(node);
-                    case 263 /* ImportClause */:
+                    case 265 /* ImportClause */:
                         return emitImportClause(node);
-                    case 264 /* NamespaceImport */:
+                    case 266 /* NamespaceImport */:
                         return emitNamespaceImport(node);
-                    case 270 /* NamespaceExport */:
+                    case 272 /* NamespaceExport */:
                         return emitNamespaceExport(node);
-                    case 265 /* NamedImports */:
+                    case 267 /* NamedImports */:
                         return emitNamedImports(node);
-                    case 266 /* ImportSpecifier */:
+                    case 268 /* ImportSpecifier */:
                         return emitImportSpecifier(node);
-                    case 267 /* ExportAssignment */:
+                    case 269 /* ExportAssignment */:
                         return emitExportAssignment(node);
-                    case 268 /* ExportDeclaration */:
+                    case 270 /* ExportDeclaration */:
                         return emitExportDeclaration(node);
-                    case 269 /* NamedExports */:
+                    case 271 /* NamedExports */:
                         return emitNamedExports(node);
-                    case 271 /* ExportSpecifier */:
+                    case 273 /* ExportSpecifier */:
                         return emitExportSpecifier(node);
-                    case 272 /* MissingDeclaration */:
+                    case 274 /* MissingDeclaration */:
                         return;
                     // Module references
-                    case 273 /* ExternalModuleReference */:
+                    case 275 /* ExternalModuleReference */:
                         return emitExternalModuleReference(node);
                     // JSX (non-expression)
                     case 11 /* JsxText */:
                         return emitJsxText(node);
-                    case 276 /* JsxOpeningElement */:
-                    case 279 /* JsxOpeningFragment */:
+                    case 278 /* JsxOpeningElement */:
+                    case 281 /* JsxOpeningFragment */:
                         return emitJsxOpeningElementOrFragment(node);
-                    case 277 /* JsxClosingElement */:
-                    case 280 /* JsxClosingFragment */:
+                    case 279 /* JsxClosingElement */:
+                    case 282 /* JsxClosingFragment */:
                         return emitJsxClosingElementOrFragment(node);
-                    case 281 /* JsxAttribute */:
+                    case 283 /* JsxAttribute */:
                         return emitJsxAttribute(node);
-                    case 282 /* JsxAttributes */:
+                    case 284 /* JsxAttributes */:
                         return emitJsxAttributes(node);
-                    case 283 /* JsxSpreadAttribute */:
+                    case 285 /* JsxSpreadAttribute */:
                         return emitJsxSpreadAttribute(node);
-                    case 284 /* JsxExpression */:
+                    case 286 /* JsxExpression */:
                         return emitJsxExpression(node);
                     // Clauses
-                    case 285 /* CaseClause */:
+                    case 287 /* CaseClause */:
                         return emitCaseClause(node);
-                    case 286 /* DefaultClause */:
+                    case 288 /* DefaultClause */:
                         return emitDefaultClause(node);
-                    case 287 /* HeritageClause */:
+                    case 289 /* HeritageClause */:
                         return emitHeritageClause(node);
-                    case 288 /* CatchClause */:
+                    case 290 /* CatchClause */:
                         return emitCatchClause(node);
                     // Property assignments
-                    case 289 /* PropertyAssignment */:
+                    case 291 /* PropertyAssignment */:
                         return emitPropertyAssignment(node);
-                    case 290 /* ShorthandPropertyAssignment */:
+                    case 292 /* ShorthandPropertyAssignment */:
                         return emitShorthandPropertyAssignment(node);
-                    case 291 /* SpreadAssignment */:
+                    case 293 /* SpreadAssignment */:
                         return emitSpreadAssignment(node);
                     // Enum
-                    case 292 /* EnumMember */:
+                    case 294 /* EnumMember */:
                         return emitEnumMember(node);
                     // Unparsed
-                    case 293 /* UnparsedPrologue */:
+                    case 295 /* UnparsedPrologue */:
                         return writeUnparsedNode(node);
-                    case 300 /* UnparsedSource */:
-                    case 294 /* UnparsedPrepend */:
+                    case 302 /* UnparsedSource */:
+                    case 296 /* UnparsedPrepend */:
                         return emitUnparsedSourceOrPrepend(node);
-                    case 295 /* UnparsedText */:
-                    case 296 /* UnparsedInternalText */:
+                    case 297 /* UnparsedText */:
+                    case 298 /* UnparsedInternalText */:
                         return emitUnparsedTextLike(node);
-                    case 297 /* UnparsedSyntheticReference */:
+                    case 299 /* UnparsedSyntheticReference */:
                         return emitUnparsedSyntheticReference(node);
                     // Top-level nodes
-                    case 298 /* SourceFile */:
+                    case 300 /* SourceFile */:
                         return emitSourceFile(node);
-                    case 299 /* Bundle */:
+                    case 301 /* Bundle */:
                         return ts.Debug.fail("Bundles should be printed using printBundle");
                     // SyntaxKind.UnparsedSource (handled above)
-                    case 301 /* InputFiles */:
+                    case 303 /* InputFiles */:
                         return ts.Debug.fail("InputFiles should not be printed");
                     // JSDoc nodes (only used in codefixes currently)
-                    case 302 /* JSDocTypeExpression */:
+                    case 304 /* JSDocTypeExpression */:
                         return emitJSDocTypeExpression(node);
-                    case 303 /* JSDocNameReference */:
+                    case 305 /* JSDocNameReference */:
                         return emitJSDocNameReference(node);
-                    case 304 /* JSDocAllType */:
+                    case 307 /* JSDocAllType */:
                         return writePunctuation("*");
-                    case 305 /* JSDocUnknownType */:
+                    case 308 /* JSDocUnknownType */:
                         return writePunctuation("?");
-                    case 306 /* JSDocNullableType */:
+                    case 309 /* JSDocNullableType */:
                         return emitJSDocNullableType(node);
-                    case 307 /* JSDocNonNullableType */:
+                    case 310 /* JSDocNonNullableType */:
                         return emitJSDocNonNullableType(node);
-                    case 308 /* JSDocOptionalType */:
+                    case 311 /* JSDocOptionalType */:
                         return emitJSDocOptionalType(node);
-                    case 309 /* JSDocFunctionType */:
+                    case 312 /* JSDocFunctionType */:
                         return emitJSDocFunctionType(node);
-                    case 182 /* RestType */:
-                    case 310 /* JSDocVariadicType */:
+                    case 184 /* RestType */:
+                    case 313 /* JSDocVariadicType */:
                         return emitRestOrJSDocVariadicType(node);
-                    case 311 /* JSDocNamepathType */:
+                    case 314 /* JSDocNamepathType */:
                         return;
-                    case 312 /* JSDocComment */:
+                    case 315 /* JSDocComment */:
                         return emitJSDoc(node);
-                    case 314 /* JSDocTypeLiteral */:
+                    case 317 /* JSDocTypeLiteral */:
                         return emitJSDocTypeLiteral(node);
-                    case 315 /* JSDocSignature */:
+                    case 318 /* JSDocSignature */:
                         return emitJSDocSignature(node);
-                    case 317 /* JSDocTag */:
-                    case 322 /* JSDocClassTag */:
+                    case 322 /* JSDocTag */:
+                    case 327 /* JSDocClassTag */:
                         return emitJSDocSimpleTag(node);
-                    case 318 /* JSDocAugmentsTag */:
-                    case 319 /* JSDocImplementsTag */:
+                    case 323 /* JSDocAugmentsTag */:
+                    case 324 /* JSDocImplementsTag */:
                         return emitJSDocHeritageTag(node);
-                    case 320 /* JSDocAuthorTag */:
-                    case 321 /* JSDocDeprecatedTag */:
+                    case 325 /* JSDocAuthorTag */:
+                    case 326 /* JSDocDeprecatedTag */:
                         return;
                     // SyntaxKind.JSDocClassTag (see JSDocTag, above)
-                    case 323 /* JSDocPublicTag */:
-                    case 324 /* JSDocPrivateTag */:
-                    case 325 /* JSDocProtectedTag */:
-                    case 326 /* JSDocReadonlyTag */:
-                    case 327 /* JSDocOverrideTag */:
+                    case 328 /* JSDocPublicTag */:
+                    case 329 /* JSDocPrivateTag */:
+                    case 330 /* JSDocProtectedTag */:
+                    case 331 /* JSDocReadonlyTag */:
+                    case 332 /* JSDocOverrideTag */:
                         return;
-                    case 328 /* JSDocCallbackTag */:
+                    case 333 /* JSDocCallbackTag */:
                         return emitJSDocCallbackTag(node);
                     // SyntaxKind.JSDocEnumTag (see below)
-                    case 330 /* JSDocParameterTag */:
-                    case 337 /* JSDocPropertyTag */:
+                    case 335 /* JSDocParameterTag */:
+                    case 342 /* JSDocPropertyTag */:
                         return emitJSDocPropertyLikeTag(node);
-                    case 329 /* JSDocEnumTag */:
-                    case 331 /* JSDocReturnTag */:
-                    case 332 /* JSDocThisTag */:
-                    case 333 /* JSDocTypeTag */:
+                    case 334 /* JSDocEnumTag */:
+                    case 336 /* JSDocReturnTag */:
+                    case 337 /* JSDocThisTag */:
+                    case 338 /* JSDocTypeTag */:
                         return emitJSDocSimpleTypedTag(node);
-                    case 334 /* JSDocTemplateTag */:
+                    case 339 /* JSDocTemplateTag */:
                         return emitJSDocTemplateTag(node);
-                    case 335 /* JSDocTypedefTag */:
+                    case 340 /* JSDocTypedefTag */:
                         return emitJSDocTypedefTag(node);
-                    case 336 /* JSDocSeeTag */:
+                    case 341 /* JSDocSeeTag */:
                         return emitJSDocSeeTag(node);
                     // SyntaxKind.JSDocPropertyTag (see JSDocParameterTag, above)
                     // Transformation nodes
-                    case 339 /* NotEmittedStatement */:
-                    case 343 /* EndOfDeclarationMarker */:
-                    case 342 /* MergeDeclarationMarker */:
+                    case 344 /* NotEmittedStatement */:
+                    case 348 /* EndOfDeclarationMarker */:
+                    case 347 /* MergeDeclarationMarker */:
                         return;
                 }
                 if (ts.isExpression(node)) {
@@ -104530,86 +106710,86 @@
                     case 14 /* NoSubstitutionTemplateLiteral */:
                         return emitLiteral(node, /*jsxAttributeEscape*/ false);
                     // Identifiers
-                    case 78 /* Identifier */:
+                    case 79 /* Identifier */:
                         return emitIdentifier(node);
                     // Expressions
-                    case 200 /* ArrayLiteralExpression */:
+                    case 202 /* ArrayLiteralExpression */:
                         return emitArrayLiteralExpression(node);
-                    case 201 /* ObjectLiteralExpression */:
+                    case 203 /* ObjectLiteralExpression */:
                         return emitObjectLiteralExpression(node);
-                    case 202 /* PropertyAccessExpression */:
+                    case 204 /* PropertyAccessExpression */:
                         return emitPropertyAccessExpression(node);
-                    case 203 /* ElementAccessExpression */:
+                    case 205 /* ElementAccessExpression */:
                         return emitElementAccessExpression(node);
-                    case 204 /* CallExpression */:
+                    case 206 /* CallExpression */:
                         return emitCallExpression(node);
-                    case 205 /* NewExpression */:
+                    case 207 /* NewExpression */:
                         return emitNewExpression(node);
-                    case 206 /* TaggedTemplateExpression */:
+                    case 208 /* TaggedTemplateExpression */:
                         return emitTaggedTemplateExpression(node);
-                    case 207 /* TypeAssertionExpression */:
+                    case 209 /* TypeAssertionExpression */:
                         return emitTypeAssertionExpression(node);
-                    case 208 /* ParenthesizedExpression */:
+                    case 210 /* ParenthesizedExpression */:
                         return emitParenthesizedExpression(node);
-                    case 209 /* FunctionExpression */:
+                    case 211 /* FunctionExpression */:
                         return emitFunctionExpression(node);
-                    case 210 /* ArrowFunction */:
+                    case 212 /* ArrowFunction */:
                         return emitArrowFunction(node);
-                    case 211 /* DeleteExpression */:
+                    case 213 /* DeleteExpression */:
                         return emitDeleteExpression(node);
-                    case 212 /* TypeOfExpression */:
+                    case 214 /* TypeOfExpression */:
                         return emitTypeOfExpression(node);
-                    case 213 /* VoidExpression */:
+                    case 215 /* VoidExpression */:
                         return emitVoidExpression(node);
-                    case 214 /* AwaitExpression */:
+                    case 216 /* AwaitExpression */:
                         return emitAwaitExpression(node);
-                    case 215 /* PrefixUnaryExpression */:
+                    case 217 /* PrefixUnaryExpression */:
                         return emitPrefixUnaryExpression(node);
-                    case 216 /* PostfixUnaryExpression */:
+                    case 218 /* PostfixUnaryExpression */:
                         return emitPostfixUnaryExpression(node);
-                    case 217 /* BinaryExpression */:
+                    case 219 /* BinaryExpression */:
                         return emitBinaryExpression(node);
-                    case 218 /* ConditionalExpression */:
+                    case 220 /* ConditionalExpression */:
                         return emitConditionalExpression(node);
-                    case 219 /* TemplateExpression */:
+                    case 221 /* TemplateExpression */:
                         return emitTemplateExpression(node);
-                    case 220 /* YieldExpression */:
+                    case 222 /* YieldExpression */:
                         return emitYieldExpression(node);
-                    case 221 /* SpreadElement */:
+                    case 223 /* SpreadElement */:
                         return emitSpreadElement(node);
-                    case 222 /* ClassExpression */:
+                    case 224 /* ClassExpression */:
                         return emitClassExpression(node);
-                    case 223 /* OmittedExpression */:
+                    case 225 /* OmittedExpression */:
                         return;
-                    case 225 /* AsExpression */:
+                    case 227 /* AsExpression */:
                         return emitAsExpression(node);
-                    case 226 /* NonNullExpression */:
+                    case 228 /* NonNullExpression */:
                         return emitNonNullExpression(node);
-                    case 227 /* MetaProperty */:
+                    case 229 /* MetaProperty */:
                         return emitMetaProperty(node);
-                    case 228 /* SyntheticExpression */:
+                    case 230 /* SyntheticExpression */:
                         return ts.Debug.fail("SyntheticExpression should never be printed.");
                     // JSX
-                    case 274 /* JsxElement */:
+                    case 276 /* JsxElement */:
                         return emitJsxElement(node);
-                    case 275 /* JsxSelfClosingElement */:
+                    case 277 /* JsxSelfClosingElement */:
                         return emitJsxSelfClosingElement(node);
-                    case 278 /* JsxFragment */:
+                    case 280 /* JsxFragment */:
                         return emitJsxFragment(node);
                     // Synthesized list
-                    case 338 /* SyntaxList */:
+                    case 343 /* SyntaxList */:
                         return ts.Debug.fail("SyntaxList should not be printed");
                     // Transformation nodes
-                    case 339 /* NotEmittedStatement */:
+                    case 344 /* NotEmittedStatement */:
                         return;
-                    case 340 /* PartiallyEmittedExpression */:
+                    case 345 /* PartiallyEmittedExpression */:
                         return emitPartiallyEmittedExpression(node);
-                    case 341 /* CommaListExpression */:
+                    case 346 /* CommaListExpression */:
                         return emitCommaList(node);
-                    case 342 /* MergeDeclarationMarker */:
-                    case 343 /* EndOfDeclarationMarker */:
+                    case 347 /* MergeDeclarationMarker */:
+                    case 348 /* EndOfDeclarationMarker */:
                         return;
-                    case 344 /* SyntheticReferenceExpression */:
+                    case 349 /* SyntheticReferenceExpression */:
                         return ts.Debug.fail("SyntheticReferenceExpression should not be printed");
                 }
             }
@@ -104657,7 +106837,7 @@
         }
         function emitHelpers(node) {
             var helpersEmitted = false;
-            var bundle = node.kind === 299 /* Bundle */ ? node : undefined;
+            var bundle = node.kind === 301 /* Bundle */ ? node : undefined;
             if (bundle && moduleKind === ts.ModuleKind.None) {
                 return;
             }
@@ -104757,7 +106937,7 @@
             var pos = getTextPosWithWriteLine();
             writeUnparsedNode(unparsed);
             if (bundleFileInfo) {
-                updateOrPushBundleFileTextLike(pos, writer.getTextPos(), unparsed.kind === 295 /* UnparsedText */ ?
+                updateOrPushBundleFileTextLike(pos, writer.getTextPos(), unparsed.kind === 297 /* UnparsedText */ ?
                     "text" /* Text */ :
                     "internal" /* Internal */);
             }
@@ -104794,7 +106974,7 @@
             emit(node.right);
         }
         function emitEntityName(node) {
-            if (node.kind === 78 /* Identifier */) {
+            if (node.kind === 79 /* Identifier */) {
                 emitExpression(node);
             }
             else {
@@ -104830,7 +107010,7 @@
             emit(node.dotDotDotToken);
             emitNodeWithWriter(node.name, writeParameter);
             emit(node.questionToken);
-            if (node.parent && node.parent.kind === 309 /* JSDocFunctionType */ && !node.name) {
+            if (node.parent && node.parent.kind === 312 /* JSDocFunctionType */ && !node.name) {
                 emit(node.type);
             }
             else {
@@ -104884,6 +107064,12 @@
             emit(node.questionToken);
             emitSignatureAndBody(node, emitSignatureHead);
         }
+        function emitClassStaticBlockDeclaration(node) {
+            emitDecorators(node, node.decorators);
+            emitModifiers(node, node.modifiers);
+            writeKeyword("static");
+            emitBlockFunctionBody(node.body);
+        }
         function emitConstructor(node) {
             emitModifiers(node, node.modifiers);
             writeKeyword("constructor");
@@ -104892,7 +107078,7 @@
         function emitAccessorDeclaration(node) {
             emitDecorators(node, node.decorators);
             emitModifiers(node, node.modifiers);
-            writeKeyword(node.kind === 168 /* GetAccessor */ ? "get" : "set");
+            writeKeyword(node.kind === 170 /* GetAccessor */ ? "get" : "set");
             writeSpace();
             emit(node.name);
             emitSignatureAndBody(node, emitSignatureHead);
@@ -105089,7 +107275,7 @@
             }
             if (node.readonlyToken) {
                 emit(node.readonlyToken);
-                if (node.readonlyToken.kind !== 142 /* ReadonlyKeyword */) {
+                if (node.readonlyToken.kind !== 143 /* ReadonlyKeyword */) {
                     writeKeyword("readonly");
                 }
                 writeSpace();
@@ -105238,20 +107424,40 @@
             emitTokenWithComment(23 /* CloseBracketToken */, node.argumentExpression.end, writePunctuation, node);
         }
         function emitCallExpression(node) {
+            var indirectCall = ts.getEmitFlags(node) & 536870912 /* IndirectCall */;
+            if (indirectCall) {
+                writePunctuation("(");
+                writeLiteral("0");
+                writePunctuation(",");
+                writeSpace();
+            }
             emitExpression(node.expression, parenthesizer.parenthesizeLeftSideOfAccess);
+            if (indirectCall) {
+                writePunctuation(")");
+            }
             emit(node.questionDotToken);
             emitTypeArguments(node, node.typeArguments);
             emitExpressionList(node, node.arguments, 2576 /* CallExpressionArguments */, parenthesizer.parenthesizeExpressionForDisallowedComma);
         }
         function emitNewExpression(node) {
-            emitTokenWithComment(102 /* NewKeyword */, node.pos, writeKeyword, node);
+            emitTokenWithComment(103 /* NewKeyword */, node.pos, writeKeyword, node);
             writeSpace();
             emitExpression(node.expression, parenthesizer.parenthesizeExpressionOfNew);
             emitTypeArguments(node, node.typeArguments);
             emitExpressionList(node, node.arguments, 18960 /* NewExpressionArguments */, parenthesizer.parenthesizeExpressionForDisallowedComma);
         }
         function emitTaggedTemplateExpression(node) {
+            var indirectCall = ts.getEmitFlags(node) & 536870912 /* IndirectCall */;
+            if (indirectCall) {
+                writePunctuation("(");
+                writeLiteral("0");
+                writePunctuation(",");
+                writeSpace();
+            }
             emitExpression(node.tag, parenthesizer.parenthesizeLeftSideOfAccess);
+            if (indirectCall) {
+                writePunctuation(")");
+            }
             emitTypeArguments(node, node.typeArguments);
             writeSpace();
             emitExpression(node.template);
@@ -105287,22 +107493,22 @@
             emit(node.equalsGreaterThanToken);
         }
         function emitDeleteExpression(node) {
-            emitTokenWithComment(88 /* DeleteKeyword */, node.pos, writeKeyword, node);
+            emitTokenWithComment(89 /* DeleteKeyword */, node.pos, writeKeyword, node);
             writeSpace();
             emitExpression(node.expression, parenthesizer.parenthesizeOperandOfPrefixUnary);
         }
         function emitTypeOfExpression(node) {
-            emitTokenWithComment(111 /* TypeOfKeyword */, node.pos, writeKeyword, node);
+            emitTokenWithComment(112 /* TypeOfKeyword */, node.pos, writeKeyword, node);
             writeSpace();
             emitExpression(node.expression, parenthesizer.parenthesizeOperandOfPrefixUnary);
         }
         function emitVoidExpression(node) {
-            emitTokenWithComment(113 /* VoidKeyword */, node.pos, writeKeyword, node);
+            emitTokenWithComment(114 /* VoidKeyword */, node.pos, writeKeyword, node);
             writeSpace();
             emitExpression(node.expression, parenthesizer.parenthesizeOperandOfPrefixUnary);
         }
         function emitAwaitExpression(node) {
-            emitTokenWithComment(130 /* AwaitKeyword */, node.pos, writeKeyword, node);
+            emitTokenWithComment(131 /* AwaitKeyword */, node.pos, writeKeyword, node);
             writeSpace();
             emitExpression(node.expression, parenthesizer.parenthesizeOperandOfPrefixUnary);
         }
@@ -105327,7 +107533,7 @@
             // expression a prefix increment whose operand is a plus expression - (++(+x))
             // The same is true of minus of course.
             var operand = node.operand;
-            return operand.kind === 215 /* PrefixUnaryExpression */
+            return operand.kind === 217 /* PrefixUnaryExpression */
                 && ((node.operator === 39 /* PlusToken */ && (operand.operator === 39 /* PlusToken */ || operand.operator === 45 /* PlusPlusToken */))
                     || (node.operator === 40 /* MinusToken */ && (operand.operator === 40 /* MinusToken */ || operand.operator === 46 /* MinusMinusToken */)));
         }
@@ -105375,7 +107581,7 @@
                 var linesAfterOperator = getLinesBetweenNodes(node, operatorToken, node.right);
                 writeLinesAndIndent(linesBeforeOperator, isCommaOperator);
                 emitLeadingCommentsOfPosition(operatorToken.pos);
-                writeTokenNode(operatorToken, operatorToken.kind === 100 /* InKeyword */ ? writeKeyword : writeOperator);
+                writeTokenNode(operatorToken, operatorToken.kind === 101 /* InKeyword */ ? writeKeyword : writeOperator);
                 emitTrailingCommentsOfPosition(operatorToken.end, /*prefixSpace*/ true); // Binary operators should have a space before the comment starts
                 writeLinesAndIndent(linesAfterOperator, /*writeSpaceIfNotIndenting*/ true);
             }
@@ -105446,7 +107652,7 @@
             emitList(node, node.templateSpans, 262144 /* TemplateExpressionSpans */);
         }
         function emitYieldExpression(node) {
-            emitTokenWithComment(124 /* YieldKeyword */, node.pos, writeKeyword, node);
+            emitTokenWithComment(125 /* YieldKeyword */, node.pos, writeKeyword, node);
             emit(node.asteriskToken);
             emitExpressionWithLeadingSpace(node.expression, parenthesizer.parenthesizeExpressionForDisallowedComma);
         }
@@ -105523,7 +107729,7 @@
             }
         }
         function emitIfStatement(node) {
-            var openParenPos = emitTokenWithComment(98 /* IfKeyword */, node.pos, writeKeyword, node);
+            var openParenPos = emitTokenWithComment(99 /* IfKeyword */, node.pos, writeKeyword, node);
             writeSpace();
             emitTokenWithComment(20 /* OpenParenToken */, openParenPos, writePunctuation, node);
             emitExpression(node.expression);
@@ -105531,8 +107737,8 @@
             emitEmbeddedStatement(node, node.thenStatement);
             if (node.elseStatement) {
                 writeLineOrSpace(node, node.thenStatement, node.elseStatement);
-                emitTokenWithComment(90 /* ElseKeyword */, node.thenStatement.end, writeKeyword, node);
-                if (node.elseStatement.kind === 235 /* IfStatement */) {
+                emitTokenWithComment(91 /* ElseKeyword */, node.thenStatement.end, writeKeyword, node);
+                if (node.elseStatement.kind === 237 /* IfStatement */) {
                     writeSpace();
                     emit(node.elseStatement);
                 }
@@ -105542,14 +107748,14 @@
             }
         }
         function emitWhileClause(node, startPos) {
-            var openParenPos = emitTokenWithComment(114 /* WhileKeyword */, startPos, writeKeyword, node);
+            var openParenPos = emitTokenWithComment(115 /* WhileKeyword */, startPos, writeKeyword, node);
             writeSpace();
             emitTokenWithComment(20 /* OpenParenToken */, openParenPos, writePunctuation, node);
             emitExpression(node.expression);
             emitTokenWithComment(21 /* CloseParenToken */, node.expression.end, writePunctuation, node);
         }
         function emitDoStatement(node) {
-            emitTokenWithComment(89 /* DoKeyword */, node.pos, writeKeyword, node);
+            emitTokenWithComment(90 /* DoKeyword */, node.pos, writeKeyword, node);
             emitEmbeddedStatement(node, node.statement);
             if (ts.isBlock(node.statement) && !preserveSourceNewlines) {
                 writeSpace();
@@ -105565,7 +107771,7 @@
             emitEmbeddedStatement(node, node.statement);
         }
         function emitForStatement(node) {
-            var openParenPos = emitTokenWithComment(96 /* ForKeyword */, node.pos, writeKeyword, node);
+            var openParenPos = emitTokenWithComment(97 /* ForKeyword */, node.pos, writeKeyword, node);
             writeSpace();
             var pos = emitTokenWithComment(20 /* OpenParenToken */, openParenPos, writePunctuation, /*contextNode*/ node);
             emitForBinding(node.initializer);
@@ -105577,25 +107783,25 @@
             emitEmbeddedStatement(node, node.statement);
         }
         function emitForInStatement(node) {
-            var openParenPos = emitTokenWithComment(96 /* ForKeyword */, node.pos, writeKeyword, node);
+            var openParenPos = emitTokenWithComment(97 /* ForKeyword */, node.pos, writeKeyword, node);
             writeSpace();
             emitTokenWithComment(20 /* OpenParenToken */, openParenPos, writePunctuation, node);
             emitForBinding(node.initializer);
             writeSpace();
-            emitTokenWithComment(100 /* InKeyword */, node.initializer.end, writeKeyword, node);
+            emitTokenWithComment(101 /* InKeyword */, node.initializer.end, writeKeyword, node);
             writeSpace();
             emitExpression(node.expression);
             emitTokenWithComment(21 /* CloseParenToken */, node.expression.end, writePunctuation, node);
             emitEmbeddedStatement(node, node.statement);
         }
         function emitForOfStatement(node) {
-            var openParenPos = emitTokenWithComment(96 /* ForKeyword */, node.pos, writeKeyword, node);
+            var openParenPos = emitTokenWithComment(97 /* ForKeyword */, node.pos, writeKeyword, node);
             writeSpace();
             emitWithTrailingSpace(node.awaitModifier);
             emitTokenWithComment(20 /* OpenParenToken */, openParenPos, writePunctuation, node);
             emitForBinding(node.initializer);
             writeSpace();
-            emitTokenWithComment(157 /* OfKeyword */, node.initializer.end, writeKeyword, node);
+            emitTokenWithComment(158 /* OfKeyword */, node.initializer.end, writeKeyword, node);
             writeSpace();
             emitExpression(node.expression);
             emitTokenWithComment(21 /* CloseParenToken */, node.expression.end, writePunctuation, node);
@@ -105603,7 +107809,7 @@
         }
         function emitForBinding(node) {
             if (node !== undefined) {
-                if (node.kind === 251 /* VariableDeclarationList */) {
+                if (node.kind === 253 /* VariableDeclarationList */) {
                     emit(node);
                 }
                 else {
@@ -105612,12 +107818,12 @@
             }
         }
         function emitContinueStatement(node) {
-            emitTokenWithComment(85 /* ContinueKeyword */, node.pos, writeKeyword, node);
+            emitTokenWithComment(86 /* ContinueKeyword */, node.pos, writeKeyword, node);
             emitWithLeadingSpace(node.label);
             writeTrailingSemicolon();
         }
         function emitBreakStatement(node) {
-            emitTokenWithComment(80 /* BreakKeyword */, node.pos, writeKeyword, node);
+            emitTokenWithComment(81 /* BreakKeyword */, node.pos, writeKeyword, node);
             emitWithLeadingSpace(node.label);
             writeTrailingSemicolon();
         }
@@ -105640,18 +107846,18 @@
             }
             pos = writeTokenText(token, writer, pos);
             if (isSimilarNode && contextNode.end !== pos) {
-                var isJsxExprContext = contextNode.kind === 284 /* JsxExpression */;
+                var isJsxExprContext = contextNode.kind === 286 /* JsxExpression */;
                 emitTrailingCommentsOfPosition(pos, /*prefixSpace*/ !isJsxExprContext, /*forceNoNewline*/ isJsxExprContext);
             }
             return pos;
         }
         function emitReturnStatement(node) {
-            emitTokenWithComment(104 /* ReturnKeyword */, node.pos, writeKeyword, /*contextNode*/ node);
+            emitTokenWithComment(105 /* ReturnKeyword */, node.pos, writeKeyword, /*contextNode*/ node);
             emitExpressionWithLeadingSpace(node.expression);
             writeTrailingSemicolon();
         }
         function emitWithStatement(node) {
-            var openParenPos = emitTokenWithComment(115 /* WithKeyword */, node.pos, writeKeyword, node);
+            var openParenPos = emitTokenWithComment(116 /* WithKeyword */, node.pos, writeKeyword, node);
             writeSpace();
             emitTokenWithComment(20 /* OpenParenToken */, openParenPos, writePunctuation, node);
             emitExpression(node.expression);
@@ -105659,7 +107865,7 @@
             emitEmbeddedStatement(node, node.statement);
         }
         function emitSwitchStatement(node) {
-            var openParenPos = emitTokenWithComment(106 /* SwitchKeyword */, node.pos, writeKeyword, node);
+            var openParenPos = emitTokenWithComment(107 /* SwitchKeyword */, node.pos, writeKeyword, node);
             writeSpace();
             emitTokenWithComment(20 /* OpenParenToken */, openParenPos, writePunctuation, node);
             emitExpression(node.expression);
@@ -105674,12 +107880,12 @@
             emit(node.statement);
         }
         function emitThrowStatement(node) {
-            emitTokenWithComment(108 /* ThrowKeyword */, node.pos, writeKeyword, node);
+            emitTokenWithComment(109 /* ThrowKeyword */, node.pos, writeKeyword, node);
             emitExpressionWithLeadingSpace(node.expression);
             writeTrailingSemicolon();
         }
         function emitTryStatement(node) {
-            emitTokenWithComment(110 /* TryKeyword */, node.pos, writeKeyword, node);
+            emitTokenWithComment(111 /* TryKeyword */, node.pos, writeKeyword, node);
             writeSpace();
             emit(node.tryBlock);
             if (node.catchClause) {
@@ -105688,13 +107894,13 @@
             }
             if (node.finallyBlock) {
                 writeLineOrSpace(node, node.catchClause || node.tryBlock, node.finallyBlock);
-                emitTokenWithComment(95 /* FinallyKeyword */, (node.catchClause || node.tryBlock).end, writeKeyword, node);
+                emitTokenWithComment(96 /* FinallyKeyword */, (node.catchClause || node.tryBlock).end, writeKeyword, node);
                 writeSpace();
                 emit(node.finallyBlock);
             }
         }
         function emitDebuggerStatement(node) {
-            writeToken(86 /* DebuggerKeyword */, node.pos, writeKeyword);
+            writeToken(87 /* DebuggerKeyword */, node.pos, writeKeyword);
             writeTrailingSemicolon();
         }
         //
@@ -105915,21 +108121,21 @@
         }
         function emitImportEqualsDeclaration(node) {
             emitModifiers(node, node.modifiers);
-            emitTokenWithComment(99 /* ImportKeyword */, node.modifiers ? node.modifiers.end : node.pos, writeKeyword, node);
+            emitTokenWithComment(100 /* ImportKeyword */, node.modifiers ? node.modifiers.end : node.pos, writeKeyword, node);
             writeSpace();
             if (node.isTypeOnly) {
-                emitTokenWithComment(149 /* TypeKeyword */, node.pos, writeKeyword, node);
+                emitTokenWithComment(150 /* TypeKeyword */, node.pos, writeKeyword, node);
                 writeSpace();
             }
             emit(node.name);
             writeSpace();
-            emitTokenWithComment(62 /* EqualsToken */, node.name.end, writePunctuation, node);
+            emitTokenWithComment(63 /* EqualsToken */, node.name.end, writePunctuation, node);
             writeSpace();
             emitModuleReference(node.moduleReference);
             writeTrailingSemicolon();
         }
         function emitModuleReference(node) {
-            if (node.kind === 78 /* Identifier */) {
+            if (node.kind === 79 /* Identifier */) {
                 emitExpression(node);
             }
             else {
@@ -105938,12 +108144,12 @@
         }
         function emitImportDeclaration(node) {
             emitModifiers(node, node.modifiers);
-            emitTokenWithComment(99 /* ImportKeyword */, node.modifiers ? node.modifiers.end : node.pos, writeKeyword, node);
+            emitTokenWithComment(100 /* ImportKeyword */, node.modifiers ? node.modifiers.end : node.pos, writeKeyword, node);
             writeSpace();
             if (node.importClause) {
                 emit(node.importClause);
                 writeSpace();
-                emitTokenWithComment(153 /* FromKeyword */, node.importClause.end, writeKeyword, node);
+                emitTokenWithComment(154 /* FromKeyword */, node.importClause.end, writeKeyword, node);
                 writeSpace();
             }
             emitExpression(node.moduleSpecifier);
@@ -105951,7 +108157,7 @@
         }
         function emitImportClause(node) {
             if (node.isTypeOnly) {
-                emitTokenWithComment(149 /* TypeKeyword */, node.pos, writeKeyword, node);
+                emitTokenWithComment(150 /* TypeKeyword */, node.pos, writeKeyword, node);
                 writeSpace();
             }
             emit(node.name);
@@ -105964,7 +108170,7 @@
         function emitNamespaceImport(node) {
             var asPos = emitTokenWithComment(41 /* AsteriskToken */, node.pos, writePunctuation, node);
             writeSpace();
-            emitTokenWithComment(126 /* AsKeyword */, asPos, writeKeyword, node);
+            emitTokenWithComment(127 /* AsKeyword */, asPos, writeKeyword, node);
             writeSpace();
             emit(node.name);
         }
@@ -105975,25 +108181,25 @@
             emitImportOrExportSpecifier(node);
         }
         function emitExportAssignment(node) {
-            var nextPos = emitTokenWithComment(92 /* ExportKeyword */, node.pos, writeKeyword, node);
+            var nextPos = emitTokenWithComment(93 /* ExportKeyword */, node.pos, writeKeyword, node);
             writeSpace();
             if (node.isExportEquals) {
-                emitTokenWithComment(62 /* EqualsToken */, nextPos, writeOperator, node);
+                emitTokenWithComment(63 /* EqualsToken */, nextPos, writeOperator, node);
             }
             else {
-                emitTokenWithComment(87 /* DefaultKeyword */, nextPos, writeKeyword, node);
+                emitTokenWithComment(88 /* DefaultKeyword */, nextPos, writeKeyword, node);
             }
             writeSpace();
             emitExpression(node.expression, node.isExportEquals ?
-                parenthesizer.getParenthesizeRightSideOfBinaryForOperator(62 /* EqualsToken */) :
+                parenthesizer.getParenthesizeRightSideOfBinaryForOperator(63 /* EqualsToken */) :
                 parenthesizer.parenthesizeExpressionOfExportDefault);
             writeTrailingSemicolon();
         }
         function emitExportDeclaration(node) {
-            var nextPos = emitTokenWithComment(92 /* ExportKeyword */, node.pos, writeKeyword, node);
+            var nextPos = emitTokenWithComment(93 /* ExportKeyword */, node.pos, writeKeyword, node);
             writeSpace();
             if (node.isTypeOnly) {
-                nextPos = emitTokenWithComment(149 /* TypeKeyword */, nextPos, writeKeyword, node);
+                nextPos = emitTokenWithComment(150 /* TypeKeyword */, nextPos, writeKeyword, node);
                 writeSpace();
             }
             if (node.exportClause) {
@@ -106005,18 +108211,18 @@
             if (node.moduleSpecifier) {
                 writeSpace();
                 var fromPos = node.exportClause ? node.exportClause.end : nextPos;
-                emitTokenWithComment(153 /* FromKeyword */, fromPos, writeKeyword, node);
+                emitTokenWithComment(154 /* FromKeyword */, fromPos, writeKeyword, node);
                 writeSpace();
                 emitExpression(node.moduleSpecifier);
             }
             writeTrailingSemicolon();
         }
         function emitNamespaceExportDeclaration(node) {
-            var nextPos = emitTokenWithComment(92 /* ExportKeyword */, node.pos, writeKeyword, node);
+            var nextPos = emitTokenWithComment(93 /* ExportKeyword */, node.pos, writeKeyword, node);
             writeSpace();
-            nextPos = emitTokenWithComment(126 /* AsKeyword */, nextPos, writeKeyword, node);
+            nextPos = emitTokenWithComment(127 /* AsKeyword */, nextPos, writeKeyword, node);
             writeSpace();
-            nextPos = emitTokenWithComment(140 /* NamespaceKeyword */, nextPos, writeKeyword, node);
+            nextPos = emitTokenWithComment(141 /* NamespaceKeyword */, nextPos, writeKeyword, node);
             writeSpace();
             emit(node.name);
             writeTrailingSemicolon();
@@ -106024,7 +108230,7 @@
         function emitNamespaceExport(node) {
             var asPos = emitTokenWithComment(41 /* AsteriskToken */, node.pos, writePunctuation, node);
             writeSpace();
-            emitTokenWithComment(126 /* AsKeyword */, asPos, writeKeyword, node);
+            emitTokenWithComment(127 /* AsKeyword */, asPos, writeKeyword, node);
             writeSpace();
             emit(node.name);
         }
@@ -106043,7 +108249,7 @@
             if (node.propertyName) {
                 emit(node.propertyName);
                 writeSpace();
-                emitTokenWithComment(126 /* AsKeyword */, node.propertyName.end, writeKeyword, node);
+                emitTokenWithComment(127 /* AsKeyword */, node.propertyName.end, writeKeyword, node);
                 writeSpace();
             }
             emit(node.name);
@@ -106145,7 +108351,7 @@
             }
         }
         function emitJsxTagName(node) {
-            if (node.kind === 78 /* Identifier */) {
+            if (node.kind === 79 /* Identifier */) {
                 emitExpression(node);
             }
             else {
@@ -106156,13 +108362,13 @@
         // Clauses
         //
         function emitCaseClause(node) {
-            emitTokenWithComment(81 /* CaseKeyword */, node.pos, writeKeyword, node);
+            emitTokenWithComment(82 /* CaseKeyword */, node.pos, writeKeyword, node);
             writeSpace();
             emitExpression(node.expression, parenthesizer.parenthesizeExpressionForDisallowedComma);
             emitCaseOrDefaultClauseRest(node, node.statements, node.expression.end);
         }
         function emitDefaultClause(node) {
-            var pos = emitTokenWithComment(87 /* DefaultKeyword */, node.pos, writeKeyword, node);
+            var pos = emitTokenWithComment(88 /* DefaultKeyword */, node.pos, writeKeyword, node);
             emitCaseOrDefaultClauseRest(node, node.statements, pos);
         }
         function emitCaseOrDefaultClauseRest(parentNode, statements, colonPos) {
@@ -106190,7 +108396,7 @@
             emitList(node, node.types, 528 /* HeritageClauseTypes */);
         }
         function emitCatchClause(node) {
-            var openParenPos = emitTokenWithComment(82 /* CatchKeyword */, node.pos, writeKeyword, node);
+            var openParenPos = emitTokenWithComment(83 /* CatchKeyword */, node.pos, writeKeyword, node);
             writeSpace();
             if (node.variableDeclaration) {
                 emitTokenWithComment(20 /* OpenParenToken */, openParenPos, writePunctuation, node);
@@ -106263,7 +108469,7 @@
                 }
             }
             if (node.tags) {
-                if (node.tags.length === 1 && node.tags[0].kind === 333 /* JSDocTypeTag */ && !node.comment) {
+                if (node.tags.length === 1 && node.tags[0].kind === 338 /* JSDocTypeTag */ && !node.comment) {
                     writeSpace();
                     emit(node.tags[0]);
                 }
@@ -106308,7 +108514,7 @@
         function emitJSDocTypedefTag(tag) {
             emitJSDocTagName(tag.tagName);
             if (tag.typeExpression) {
-                if (tag.typeExpression.kind === 302 /* JSDocTypeExpression */) {
+                if (tag.typeExpression.kind === 304 /* JSDocTypeExpression */) {
                     emitJSDocTypeExpression(tag.typeExpression);
                 }
                 else {
@@ -106327,7 +108533,7 @@
                 emit(tag.fullName);
             }
             emitJSDocComment(tag.comment);
-            if (tag.typeExpression && tag.typeExpression.kind === 314 /* JSDocTypeLiteral */) {
+            if (tag.typeExpression && tag.typeExpression.kind === 317 /* JSDocTypeLiteral */) {
                 emitJSDocTypeLiteral(tag.typeExpression);
             }
         }
@@ -106454,16 +108660,16 @@
                     writeLine();
                 }
             }
-            for (var _c = 0, files_1 = files; _c < files_1.length; _c++) {
-                var directive = files_1[_c];
+            for (var _c = 0, files_2 = files; _c < files_2.length; _c++) {
+                var directive = files_2[_c];
                 var pos = writer.getTextPos();
                 writeComment("/// <reference path=\"" + directive.fileName + "\" />");
                 if (bundleFileInfo)
                     bundleFileInfo.sections.push({ pos: pos, end: writer.getTextPos(), kind: "reference" /* Reference */, data: directive.fileName });
                 writeLine();
             }
-            for (var _d = 0, types_25 = types; _d < types_25.length; _d++) {
-                var directive = types_25[_d];
+            for (var _d = 0, types_24 = types; _d < types_24.length; _d++) {
+                var directive = types_24[_d];
                 var pos = writer.getTextPos();
                 writeComment("/// <reference types=\"" + directive.fileName + "\" />");
                 if (bundleFileInfo)
@@ -106643,7 +108849,7 @@
         function emitInitializer(node, equalCommentStartPos, container, parenthesizerRule) {
             if (node) {
                 writeSpace();
-                emitTokenWithComment(62 /* EqualsToken */, equalCommentStartPos, writeOperator, container);
+                emitTokenWithComment(63 /* EqualsToken */, equalCommentStartPos, writeOperator, container);
                 writeSpace();
                 emitExpression(node, parenthesizerRule);
             }
@@ -107214,7 +109420,7 @@
                 && ts.rangeEndIsOnSameLineAsRangeStart(block, block, currentSourceFile);
         }
         function skipSynthesizedParentheses(node) {
-            while (node.kind === 208 /* ParenthesizedExpression */ && ts.nodeIsSynthesized(node)) {
+            while (node.kind === 210 /* ParenthesizedExpression */ && ts.nodeIsSynthesized(node)) {
                 node = node.expression;
             }
             return node;
@@ -107284,84 +109490,84 @@
             if (!node)
                 return;
             switch (node.kind) {
-                case 231 /* Block */:
+                case 233 /* Block */:
                     ts.forEach(node.statements, generateNames);
                     break;
-                case 246 /* LabeledStatement */:
-                case 244 /* WithStatement */:
-                case 236 /* DoStatement */:
-                case 237 /* WhileStatement */:
+                case 248 /* LabeledStatement */:
+                case 246 /* WithStatement */:
+                case 238 /* DoStatement */:
+                case 239 /* WhileStatement */:
                     generateNames(node.statement);
                     break;
-                case 235 /* IfStatement */:
+                case 237 /* IfStatement */:
                     generateNames(node.thenStatement);
                     generateNames(node.elseStatement);
                     break;
-                case 238 /* ForStatement */:
-                case 240 /* ForOfStatement */:
-                case 239 /* ForInStatement */:
+                case 240 /* ForStatement */:
+                case 242 /* ForOfStatement */:
+                case 241 /* ForInStatement */:
                     generateNames(node.initializer);
                     generateNames(node.statement);
                     break;
-                case 245 /* SwitchStatement */:
+                case 247 /* SwitchStatement */:
                     generateNames(node.caseBlock);
                     break;
-                case 259 /* CaseBlock */:
+                case 261 /* CaseBlock */:
                     ts.forEach(node.clauses, generateNames);
                     break;
-                case 285 /* CaseClause */:
-                case 286 /* DefaultClause */:
+                case 287 /* CaseClause */:
+                case 288 /* DefaultClause */:
                     ts.forEach(node.statements, generateNames);
                     break;
-                case 248 /* TryStatement */:
+                case 250 /* TryStatement */:
                     generateNames(node.tryBlock);
                     generateNames(node.catchClause);
                     generateNames(node.finallyBlock);
                     break;
-                case 288 /* CatchClause */:
+                case 290 /* CatchClause */:
                     generateNames(node.variableDeclaration);
                     generateNames(node.block);
                     break;
-                case 233 /* VariableStatement */:
+                case 235 /* VariableStatement */:
                     generateNames(node.declarationList);
                     break;
-                case 251 /* VariableDeclarationList */:
+                case 253 /* VariableDeclarationList */:
                     ts.forEach(node.declarations, generateNames);
                     break;
-                case 250 /* VariableDeclaration */:
-                case 161 /* Parameter */:
-                case 199 /* BindingElement */:
-                case 253 /* ClassDeclaration */:
+                case 252 /* VariableDeclaration */:
+                case 162 /* Parameter */:
+                case 201 /* BindingElement */:
+                case 255 /* ClassDeclaration */:
                     generateNameIfNeeded(node.name);
                     break;
-                case 252 /* FunctionDeclaration */:
+                case 254 /* FunctionDeclaration */:
                     generateNameIfNeeded(node.name);
                     if (ts.getEmitFlags(node) & 524288 /* ReuseTempVariableScope */) {
                         ts.forEach(node.parameters, generateNames);
                         generateNames(node.body);
                     }
                     break;
-                case 197 /* ObjectBindingPattern */:
-                case 198 /* ArrayBindingPattern */:
+                case 199 /* ObjectBindingPattern */:
+                case 200 /* ArrayBindingPattern */:
                     ts.forEach(node.elements, generateNames);
                     break;
-                case 262 /* ImportDeclaration */:
+                case 264 /* ImportDeclaration */:
                     generateNames(node.importClause);
                     break;
-                case 263 /* ImportClause */:
+                case 265 /* ImportClause */:
                     generateNameIfNeeded(node.name);
                     generateNames(node.namedBindings);
                     break;
-                case 264 /* NamespaceImport */:
+                case 266 /* NamespaceImport */:
                     generateNameIfNeeded(node.name);
                     break;
-                case 270 /* NamespaceExport */:
+                case 272 /* NamespaceExport */:
                     generateNameIfNeeded(node.name);
                     break;
-                case 265 /* NamedImports */:
+                case 267 /* NamedImports */:
                     ts.forEach(node.elements, generateNames);
                     break;
-                case 266 /* ImportSpecifier */:
+                case 268 /* ImportSpecifier */:
                     generateNameIfNeeded(node.propertyName || node.name);
                     break;
             }
@@ -107370,12 +109576,12 @@
             if (!node)
                 return;
             switch (node.kind) {
-                case 289 /* PropertyAssignment */:
-                case 290 /* ShorthandPropertyAssignment */:
-                case 164 /* PropertyDeclaration */:
-                case 166 /* MethodDeclaration */:
-                case 168 /* GetAccessor */:
-                case 169 /* SetAccessor */:
+                case 291 /* PropertyAssignment */:
+                case 292 /* ShorthandPropertyAssignment */:
+                case 165 /* PropertyDeclaration */:
+                case 167 /* MethodDeclaration */:
+                case 170 /* GetAccessor */:
+                case 171 /* SetAccessor */:
                     generateNameIfNeeded(node.name);
                     break;
             }
@@ -107555,25 +109761,25 @@
          */
         function generateNameForNode(node, flags) {
             switch (node.kind) {
-                case 78 /* Identifier */:
+                case 79 /* Identifier */:
                     return makeUniqueName(getTextOfNode(node), isUniqueName, !!(flags & 16 /* Optimistic */), !!(flags & 8 /* ReservedInNestedScopes */));
-                case 257 /* ModuleDeclaration */:
-                case 256 /* EnumDeclaration */:
+                case 259 /* ModuleDeclaration */:
+                case 258 /* EnumDeclaration */:
                     return generateNameForModuleOrEnum(node);
-                case 262 /* ImportDeclaration */:
-                case 268 /* ExportDeclaration */:
+                case 264 /* ImportDeclaration */:
+                case 270 /* ExportDeclaration */:
                     return generateNameForImportOrExportDeclaration(node);
-                case 252 /* FunctionDeclaration */:
-                case 253 /* ClassDeclaration */:
-                case 267 /* ExportAssignment */:
+                case 254 /* FunctionDeclaration */:
+                case 255 /* ClassDeclaration */:
+                case 269 /* ExportAssignment */:
                     return generateNameForExportDefault();
-                case 222 /* ClassExpression */:
+                case 224 /* ClassExpression */:
                     return generateNameForClassExpression();
-                case 166 /* MethodDeclaration */:
-                case 168 /* GetAccessor */:
-                case 169 /* SetAccessor */:
+                case 167 /* MethodDeclaration */:
+                case 170 /* GetAccessor */:
+                case 171 /* SetAccessor */:
                     return generateNameForMethodOrAccessor(node);
-                case 159 /* ComputedPropertyName */:
+                case 160 /* ComputedPropertyName */:
                     return makeTempVariableName(0 /* Auto */, /*reserveInNestedScopes*/ true);
                 default:
                     return makeTempVariableName(0 /* Auto */);
@@ -107654,7 +109860,7 @@
                 // Emit leading comments if the position is not synthesized and the node
                 // has not opted out from emitting leading comments.
                 if (!skipLeadingComments) {
-                    emitLeadingComments(pos, /*isEmittedNode*/ node.kind !== 339 /* NotEmittedStatement */);
+                    emitLeadingComments(pos, /*isEmittedNode*/ node.kind !== 344 /* NotEmittedStatement */);
                 }
                 if (!skipLeadingComments || (pos >= 0 && (emitFlags & 512 /* NoLeadingComments */) !== 0)) {
                     // Advance the container position if comments get emitted or if they've been disabled explicitly using NoLeadingComments.
@@ -107665,7 +109871,7 @@
                     containerEnd = end;
                     // To avoid invalid comment emit in a down-level binding pattern, we
                     // keep track of the last declaration list container's end
-                    if (node.kind === 251 /* VariableDeclarationList */) {
+                    if (node.kind === 253 /* VariableDeclarationList */) {
                         declarationListContainerEnd = end;
                     }
                 }
@@ -107684,7 +109890,7 @@
                 declarationListContainerEnd = savedDeclarationListContainerEnd;
                 // Emit trailing comments if the position is not synthesized and the node
                 // has not opted out from emitting leading comments and is an emitted node.
-                if (!skipTrailingComments && node.kind !== 339 /* NotEmittedStatement */) {
+                if (!skipTrailingComments && node.kind !== 344 /* NotEmittedStatement */) {
                     emitTrailingComments(end);
                 }
             }
@@ -107959,7 +110165,7 @@
             }
             else {
                 var source = sourceMapRange.source || sourceMapSource;
-                if (node.kind !== 339 /* NotEmittedStatement */
+                if (node.kind !== 344 /* NotEmittedStatement */
                     && (emitFlags & 16 /* NoLeadingSourceMap */) === 0
                     && sourceMapRange.pos >= 0) {
                     emitSourcePos(sourceMapRange.source || sourceMapSource, skipSourceTrivia(source, sourceMapRange.pos));
@@ -107977,7 +110183,7 @@
                 if (emitFlags & 64 /* NoNestedSourceMaps */) {
                     sourceMapsDisabled = false;
                 }
-                if (node.kind !== 339 /* NotEmittedStatement */
+                if (node.kind !== 344 /* NotEmittedStatement */
                     && (emitFlags & 32 /* NoTrailingSourceMap */) === 0
                     && sourceMapRange.end >= 0) {
                     emitSourcePos(sourceMapRange.source || sourceMapSource, sourceMapRange.end);
@@ -108227,7 +110433,7 @@
             var rootResult = tryReadDirectory(rootDir, rootDirPath);
             var rootSymLinkResult;
             if (rootResult !== undefined) {
-                return ts.matchFiles(rootDir, extensions, excludes, includes, useCaseSensitiveFileNames, currentDirectory, depth, getFileSystemEntries, realpath);
+                return ts.matchFiles(rootDir, extensions, excludes, includes, useCaseSensitiveFileNames, currentDirectory, depth, getFileSystemEntries, realpath, directoryExists);
             }
             return host.readDirectory(rootDir, extensions, excludes, includes, depth);
             function getFileSystemEntries(dir) {
@@ -108376,6 +110582,17 @@
     }
     ts.cleanExtendedConfigCache = cleanExtendedConfigCache;
     /**
+     * Updates watchers based on the package json files used in module resolution
+     */
+    function updatePackageJsonWatch(lookups, packageJsonWatches, createPackageJsonWatch) {
+        var newMap = new ts.Map(lookups);
+        ts.mutateMap(packageJsonWatches, newMap, {
+            createNewValue: createPackageJsonWatch,
+            onDeleteValue: ts.closeFileWatcher
+        });
+    }
+    ts.updatePackageJsonWatch = updatePackageJsonWatch;
+    /**
      * Updates the existing missing file watches with the new set of missing files after new program is created
      */
     function updateMissingFilePathsWatch(program, missingFileWatches, createMissingFileWatch) {
@@ -108449,7 +110666,7 @@
             return false;
         // We want to ignore emit file check if file is not going to be emitted next to source file
         // In that case we follow config file inclusion rules
-        if (options.outFile || options.outDir)
+        if (ts.outFile(options) || options.outDir)
             return false;
         // File if emitted next to input needs to be ignored
         if (ts.fileExtensionIs(fileOrDirectoryPath, ".d.ts" /* Dts */)) {
@@ -108576,7 +110793,7 @@
                 var triggerredInfo = (key === "watchFile" ? "FileWatcher" : "DirectoryWatcher") + ":: Triggered with " + args[0] + " " + (args[1] !== undefined ? args[1] : "") + ":: " + getWatchInfo(file, flags, options, detailInfo1, detailInfo2, getDetailWatchInfo);
                 log(triggerredInfo);
                 var start = ts.timestamp();
-                cb.call.apply(cb, __spreadArray([/*thisArg*/ undefined], args));
+                cb.call.apply(cb, __spreadArray([/*thisArg*/ undefined], args, false));
                 var elapsed = ts.timestamp() - start;
                 log("Elapsed:: " + elapsed + "ms " + triggerredInfo);
             }, flags, options, detailInfo1, detailInfo2); };
@@ -108948,7 +111165,7 @@
             var lineStart = ts.getPositionOfLineAndCharacter(file, i, 0);
             var lineEnd = i < lastLineInFile ? ts.getPositionOfLineAndCharacter(file, i + 1, 0) : file.text.length;
             var lineContent = file.text.slice(lineStart, lineEnd);
-            lineContent = lineContent.replace(/\s+$/g, ""); // trim from end
+            lineContent = ts.trimStringEnd(lineContent); // trim from end
             lineContent = lineContent.replace(/\t/g, " "); // convert tabs to single spaces
             // Output the gutter and the actual contents of the line.
             context += indent + formatColorAndReset(ts.padLeft(i + 1 + "", gutterWidth), gutterStyleSequence) + gutterSeparator;
@@ -109222,7 +111439,7 @@
     }
     ts.isProgramUptoDate = isProgramUptoDate;
     function getConfigFileParsingDiagnostics(configFileParseResult) {
-        return configFileParseResult.options.configFile ? __spreadArray(__spreadArray([], configFileParseResult.options.configFile.parseDiagnostics), configFileParseResult.errors) :
+        return configFileParseResult.options.configFile ? __spreadArray(__spreadArray([], configFileParseResult.options.configFile.parseDiagnostics, true), configFileParseResult.errors, true) :
             configFileParseResult.errors;
     }
     ts.getConfigFileParsingDiagnostics = getConfigFileParsingDiagnostics;
@@ -109234,10 +111451,7 @@
             return false;
         // If any compiler options change, we can't reuse old source file even if version match
         // The change in options like these could result in change in syntax tree or `sourceFile.bindDiagnostics`.
-        var oldOptions = program.getCompilerOptions();
-        return !!ts.sourceFileAffectingCompilerOptions.some(function (option) {
-            return !ts.isJsonEqual(ts.getCompilerOptionValue(oldOptions, option), ts.getCompilerOptionValue(newOptions, option));
-        });
+        return ts.optionsHaveChanges(program.getCompilerOptions(), newOptions, ts.sourceFileAffectingCompilerOptions);
     }
     function createCreateProgramOptions(rootNames, options, host, oldProgram, configFileParsingDiagnostics) {
         return {
@@ -109332,6 +111546,7 @@
         var sourceFileToPackageName = new ts.Map();
         // Key is a file name. Value is the (non-empty, or undefined) list of files that redirect to it.
         var redirectTargetsMap = ts.createMultiMap();
+        var usesUriStyleNodeCoreModules = false;
         /**
          * map with
          * - SourceFile if present
@@ -109487,6 +111702,7 @@
             getSourceFileByPath: getSourceFileByPath,
             getSourceFiles: function () { return files; },
             getMissingFilePaths: function () { return missingFilePaths; },
+            getModuleResolutionCache: function () { return moduleResolutionCache; },
             getFilesByNameMap: function () { return filesByName; },
             getCompilerOptions: function () { return options; },
             getSyntacticDiagnostics: getSyntacticDiagnostics,
@@ -109519,6 +111735,7 @@
             getLibFileFromReference: getLibFileFromReference,
             sourceFileToPackageName: sourceFileToPackageName,
             redirectTargetsMap: redirectTargetsMap,
+            usesUriStyleNodeCoreModules: usesUriStyleNodeCoreModules,
             isEmittedFile: isEmittedFile,
             getConfigFileParsingDiagnostics: getConfigFileParsingDiagnostics,
             getResolvedModuleWithFailedLookupLocationsFromCache: getResolvedModuleWithFailedLookupLocationsFromCache,
@@ -109546,7 +111763,7 @@
                     return programDiagnostics.add(createDiagnosticExplainingFile(diagnostic.file && getSourceFileByPath(diagnostic.file), diagnostic.fileProcessingReason, diagnostic.diagnostic, diagnostic.args || ts.emptyArray));
                 case 0 /* FilePreprocessingReferencedDiagnostic */:
                     var _a = getReferencedFileLocation(getSourceFileByPath, diagnostic.reason), file = _a.file, pos = _a.pos, end = _a.end;
-                    return programDiagnostics.add(ts.createFileDiagnostic.apply(void 0, __spreadArray([file, ts.Debug.checkDefined(pos), ts.Debug.checkDefined(end) - pos, diagnostic.diagnostic], diagnostic.args || ts.emptyArray)));
+                    return programDiagnostics.add(ts.createFileDiagnostic.apply(void 0, __spreadArray([file, ts.Debug.checkDefined(pos), ts.Debug.checkDefined(end) - pos, diagnostic.diagnostic], diagnostic.args || ts.emptyArray, false)));
                 default:
                     ts.Debug.assertNever(diagnostic);
             }
@@ -109649,8 +111866,8 @@
                 // Initialize a checker so that all our files are bound.
                 getTypeChecker();
                 classifiableNames = new ts.Set();
-                for (var _i = 0, files_2 = files; _i < files_2.length; _i++) {
-                    var sourceFile = files_2[_i];
+                for (var _i = 0, files_3 = files; _i < files_3.length; _i++) {
+                    var sourceFile = files_3[_i];
                     (_a = sourceFile.classifiableNames) === null || _a === void 0 ? void 0 : _a.forEach(function (value) { return classifiableNames.add(value); });
                 }
             }
@@ -109672,13 +111889,13 @@
                 // which per above occurred during the current program creation.
                 // Since we assume the filesystem does not change during program creation,
                 // it is safe to reuse resolutions from the earlier call.
-                var result_15 = [];
+                var result_14 = [];
                 for (var _i = 0, moduleNames_1 = moduleNames; _i < moduleNames_1.length; _i++) {
                     var moduleName = moduleNames_1[_i];
                     var resolvedModule = file.resolvedModules.get(moduleName);
-                    result_15.push(resolvedModule);
+                    result_14.push(resolvedModule);
                 }
-                return result_15;
+                return result_14;
             }
             // At this point, we know at least one of the following hold:
             // - file has local declarations for ambient modules
@@ -109706,7 +111923,9 @@
                     var oldResolvedModule = ts.getResolvedModule(oldSourceFile, moduleName);
                     if (oldResolvedModule) {
                         if (ts.isTraceEnabled(options, host)) {
-                            ts.trace(host, ts.Diagnostics.Reusing_resolution_of_module_0_to_file_1_from_old_program, moduleName, ts.getNormalizedAbsolutePath(file.originalFileName, currentDirectory));
+                            ts.trace(host, oldResolvedModule.packageId ?
+                                ts.Diagnostics.Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2_with_Package_ID_3 :
+                                ts.Diagnostics.Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2, moduleName, ts.getNormalizedAbsolutePath(file.originalFileName, currentDirectory), oldResolvedModule.resolvedFileName, oldResolvedModule.packageId && ts.packageIdToString(oldResolvedModule.packageId));
                         }
                         (result || (result = new Array(moduleNames.length)))[i] = oldResolvedModule;
                         (reusedNames || (reusedNames = [])).push(moduleName);
@@ -109819,9 +112038,6 @@
             if (!ts.arrayIsEqualTo(oldRootNames, rootNames)) {
                 return 0 /* Not */;
             }
-            if (!ts.arrayIsEqualTo(options.types, oldOptions.types)) {
-                return 0 /* Not */;
-            }
             // Check if any referenced project tsconfig files are different
             if (!canReuseProjectReferences()) {
                 return 0 /* Not */;
@@ -109896,7 +112112,7 @@
                     // The `newSourceFile` object was created for the new program.
                     if (!ts.arrayIsEqualTo(oldSourceFile.libReferenceDirectives, newSourceFile.libReferenceDirectives, fileReferenceIsEqualTo)) {
                         // 'lib' references has changed. Matches behavior in changesAffectModuleResolution
-                        return 0 /* Not */;
+                        structureIsReused = 1 /* SafeModules */;
                     }
                     if (oldSourceFile.hasNoDefaultLib !== newSourceFile.hasNoDefaultLib) {
                         // value of no-default-lib has changed
@@ -109981,7 +112197,7 @@
             if (structureIsReused !== 2 /* Completely */) {
                 return structureIsReused;
             }
-            if ((_a = host.hasChangedAutomaticTypeDirectiveNames) === null || _a === void 0 ? void 0 : _a.call(host)) {
+            if (ts.changesAffectingProgramStructure(oldOptions, options) || ((_a = host.hasChangedAutomaticTypeDirectiveNames) === null || _a === void 0 ? void 0 : _a.call(host))) {
                 return 1 /* SafeModules */;
             }
             missingFilePaths = oldProgram.getMissingFilePaths();
@@ -110012,6 +112228,7 @@
             resolvedTypeReferenceDirectives = oldProgram.getResolvedTypeReferenceDirectives();
             sourceFileToPackageName = oldProgram.sourceFileToPackageName;
             redirectTargetsMap = oldProgram.redirectTargetsMap;
+            usesUriStyleNodeCoreModules = oldProgram.usesUriStyleNodeCoreModules;
             return 2 /* Completely */;
         }
         function getEmitHost(writeFileCallback) {
@@ -110224,7 +112441,7 @@
             }
         }
         function getSemanticDiagnosticsForFile(sourceFile, cancellationToken) {
-            return ts.concatenate(filterSemanticDiagnotics(getBindAndCheckDiagnosticsForFile(sourceFile, cancellationToken), options), getProgramDiagnostics(sourceFile));
+            return ts.concatenate(filterSemanticDiagnostics(getBindAndCheckDiagnosticsForFile(sourceFile, cancellationToken), options), getProgramDiagnostics(sourceFile));
         }
         function getBindAndCheckDiagnosticsForFile(sourceFile, cancellationToken) {
             return getAndCacheDiagnostics(sourceFile, cancellationToken, cachedBindAndCheckDiagnosticsForFile, getBindAndCheckDiagnosticsForFileNoCache);
@@ -110239,8 +112456,8 @@
                 var isCheckJs = ts.isCheckJsEnabledForFile(sourceFile, options);
                 var isTsNoCheck = !!sourceFile.checkJsDirective && sourceFile.checkJsDirective.enabled === false;
                 // By default, only type-check .ts, .tsx, 'Deferred' and 'External' files (external files are added by plugins)
-                var includeBindAndCheckDiagnostics = !isTsNoCheck && (sourceFile.scriptKind === 3 /* TS */ || sourceFile.scriptKind === 4 /* TSX */ ||
-                    sourceFile.scriptKind === 5 /* External */ || isCheckJs || sourceFile.scriptKind === 7 /* Deferred */);
+                var includeBindAndCheckDiagnostics = !isTsNoCheck && (sourceFile.scriptKind === 3 /* TS */ || sourceFile.scriptKind === 4 /* TSX */
+                    || sourceFile.scriptKind === 5 /* External */ || isCheckJs || sourceFile.scriptKind === 7 /* Deferred */);
                 var bindDiagnostics = includeBindAndCheckDiagnostics ? sourceFile.bindDiagnostics : ts.emptyArray;
                 var checkDiagnostics = includeBindAndCheckDiagnostics ? typeChecker.getDiagnostics(sourceFile, cancellationToken) : ts.emptyArray;
                 return getMergedBindAndCheckDiagnostics(sourceFile, includeBindAndCheckDiagnostics, bindDiagnostics, checkDiagnostics, isCheckJs ? sourceFile.jsDocDiagnostics : undefined);
@@ -110314,22 +112531,22 @@
                     // Return directly from the case if the given node doesnt want to visit each child
                     // Otherwise break to visit each child
                     switch (parent.kind) {
-                        case 161 /* Parameter */:
-                        case 164 /* PropertyDeclaration */:
-                        case 166 /* MethodDeclaration */:
+                        case 162 /* Parameter */:
+                        case 165 /* PropertyDeclaration */:
+                        case 167 /* MethodDeclaration */:
                             if (parent.questionToken === node) {
                                 diagnostics.push(createDiagnosticForNode(node, ts.Diagnostics.The_0_modifier_can_only_be_used_in_TypeScript_files, "?"));
                                 return "skip";
                             }
                         // falls through
-                        case 165 /* MethodSignature */:
-                        case 167 /* Constructor */:
-                        case 168 /* GetAccessor */:
-                        case 169 /* SetAccessor */:
-                        case 209 /* FunctionExpression */:
-                        case 252 /* FunctionDeclaration */:
-                        case 210 /* ArrowFunction */:
-                        case 250 /* VariableDeclaration */:
+                        case 166 /* MethodSignature */:
+                        case 169 /* Constructor */:
+                        case 170 /* GetAccessor */:
+                        case 171 /* SetAccessor */:
+                        case 211 /* FunctionExpression */:
+                        case 254 /* FunctionDeclaration */:
+                        case 212 /* ArrowFunction */:
+                        case 252 /* VariableDeclaration */:
                             // type annotation
                             if (parent.type === node) {
                                 diagnostics.push(createDiagnosticForNode(node, ts.Diagnostics.Type_annotations_can_only_be_used_in_TypeScript_files));
@@ -110337,58 +112554,58 @@
                             }
                     }
                     switch (node.kind) {
-                        case 263 /* ImportClause */:
+                        case 265 /* ImportClause */:
                             if (node.isTypeOnly) {
                                 diagnostics.push(createDiagnosticForNode(parent, ts.Diagnostics._0_declarations_can_only_be_used_in_TypeScript_files, "import type"));
                                 return "skip";
                             }
                             break;
-                        case 268 /* ExportDeclaration */:
+                        case 270 /* ExportDeclaration */:
                             if (node.isTypeOnly) {
                                 diagnostics.push(createDiagnosticForNode(node, ts.Diagnostics._0_declarations_can_only_be_used_in_TypeScript_files, "export type"));
                                 return "skip";
                             }
                             break;
-                        case 261 /* ImportEqualsDeclaration */:
+                        case 263 /* ImportEqualsDeclaration */:
                             diagnostics.push(createDiagnosticForNode(node, ts.Diagnostics.import_can_only_be_used_in_TypeScript_files));
                             return "skip";
-                        case 267 /* ExportAssignment */:
+                        case 269 /* ExportAssignment */:
                             if (node.isExportEquals) {
                                 diagnostics.push(createDiagnosticForNode(node, ts.Diagnostics.export_can_only_be_used_in_TypeScript_files));
                                 return "skip";
                             }
                             break;
-                        case 287 /* HeritageClause */:
+                        case 289 /* HeritageClause */:
                             var heritageClause = node;
-                            if (heritageClause.token === 116 /* ImplementsKeyword */) {
+                            if (heritageClause.token === 117 /* ImplementsKeyword */) {
                                 diagnostics.push(createDiagnosticForNode(node, ts.Diagnostics.implements_clauses_can_only_be_used_in_TypeScript_files));
                                 return "skip";
                             }
                             break;
-                        case 254 /* InterfaceDeclaration */:
-                            var interfaceKeyword = ts.tokenToString(117 /* InterfaceKeyword */);
+                        case 256 /* InterfaceDeclaration */:
+                            var interfaceKeyword = ts.tokenToString(118 /* InterfaceKeyword */);
                             ts.Debug.assertIsDefined(interfaceKeyword);
                             diagnostics.push(createDiagnosticForNode(node, ts.Diagnostics._0_declarations_can_only_be_used_in_TypeScript_files, interfaceKeyword));
                             return "skip";
-                        case 257 /* ModuleDeclaration */:
-                            var moduleKeyword = node.flags & 16 /* Namespace */ ? ts.tokenToString(140 /* NamespaceKeyword */) : ts.tokenToString(139 /* ModuleKeyword */);
+                        case 259 /* ModuleDeclaration */:
+                            var moduleKeyword = node.flags & 16 /* Namespace */ ? ts.tokenToString(141 /* NamespaceKeyword */) : ts.tokenToString(140 /* ModuleKeyword */);
                             ts.Debug.assertIsDefined(moduleKeyword);
                             diagnostics.push(createDiagnosticForNode(node, ts.Diagnostics._0_declarations_can_only_be_used_in_TypeScript_files, moduleKeyword));
                             return "skip";
-                        case 255 /* TypeAliasDeclaration */:
+                        case 257 /* TypeAliasDeclaration */:
                             diagnostics.push(createDiagnosticForNode(node, ts.Diagnostics.Type_aliases_can_only_be_used_in_TypeScript_files));
                             return "skip";
-                        case 256 /* EnumDeclaration */:
-                            var enumKeyword = ts.Debug.checkDefined(ts.tokenToString(91 /* EnumKeyword */));
+                        case 258 /* EnumDeclaration */:
+                            var enumKeyword = ts.Debug.checkDefined(ts.tokenToString(92 /* EnumKeyword */));
                             diagnostics.push(createDiagnosticForNode(node, ts.Diagnostics._0_declarations_can_only_be_used_in_TypeScript_files, enumKeyword));
                             return "skip";
-                        case 226 /* NonNullExpression */:
+                        case 228 /* NonNullExpression */:
                             diagnostics.push(createDiagnosticForNode(node, ts.Diagnostics.Non_null_assertions_can_only_be_used_in_TypeScript_files));
                             return "skip";
-                        case 225 /* AsExpression */:
+                        case 227 /* AsExpression */:
                             diagnostics.push(createDiagnosticForNode(node.type, ts.Diagnostics.Type_assertion_expressions_can_only_be_used_in_TypeScript_files));
                             return "skip";
-                        case 207 /* TypeAssertionExpression */:
+                        case 209 /* TypeAssertionExpression */:
                             ts.Debug.fail(); // Won't parse these in a JS file anyway, as they are interpreted as JSX.
                     }
                 }
@@ -110397,53 +112614,53 @@
                         diagnostics.push(createDiagnosticForNode(parent, ts.Diagnostics.Experimental_support_for_decorators_is_a_feature_that_is_subject_to_change_in_a_future_release_Set_the_experimentalDecorators_option_in_your_tsconfig_or_jsconfig_to_remove_this_warning));
                     }
                     switch (parent.kind) {
-                        case 253 /* ClassDeclaration */:
-                        case 222 /* ClassExpression */:
-                        case 166 /* MethodDeclaration */:
-                        case 167 /* Constructor */:
-                        case 168 /* GetAccessor */:
-                        case 169 /* SetAccessor */:
-                        case 209 /* FunctionExpression */:
-                        case 252 /* FunctionDeclaration */:
-                        case 210 /* ArrowFunction */:
+                        case 255 /* ClassDeclaration */:
+                        case 224 /* ClassExpression */:
+                        case 167 /* MethodDeclaration */:
+                        case 169 /* Constructor */:
+                        case 170 /* GetAccessor */:
+                        case 171 /* SetAccessor */:
+                        case 211 /* FunctionExpression */:
+                        case 254 /* FunctionDeclaration */:
+                        case 212 /* ArrowFunction */:
                             // Check type parameters
                             if (nodes === parent.typeParameters) {
                                 diagnostics.push(createDiagnosticForNodeArray(nodes, ts.Diagnostics.Type_parameter_declarations_can_only_be_used_in_TypeScript_files));
                                 return "skip";
                             }
                         // falls through
-                        case 233 /* VariableStatement */:
+                        case 235 /* VariableStatement */:
                             // Check modifiers
                             if (nodes === parent.modifiers) {
-                                checkModifiers(parent.modifiers, parent.kind === 233 /* VariableStatement */);
+                                checkModifiers(parent.modifiers, parent.kind === 235 /* VariableStatement */);
                                 return "skip";
                             }
                             break;
-                        case 164 /* PropertyDeclaration */:
+                        case 165 /* PropertyDeclaration */:
                             // Check modifiers of property declaration
                             if (nodes === parent.modifiers) {
                                 for (var _i = 0, _a = nodes; _i < _a.length; _i++) {
                                     var modifier = _a[_i];
-                                    if (modifier.kind !== 123 /* StaticKeyword */) {
+                                    if (modifier.kind !== 124 /* StaticKeyword */) {
                                         diagnostics.push(createDiagnosticForNode(modifier, ts.Diagnostics.The_0_modifier_can_only_be_used_in_TypeScript_files, ts.tokenToString(modifier.kind)));
                                     }
                                 }
                                 return "skip";
                             }
                             break;
-                        case 161 /* Parameter */:
+                        case 162 /* Parameter */:
                             // Check modifiers of parameter declaration
                             if (nodes === parent.modifiers) {
                                 diagnostics.push(createDiagnosticForNodeArray(nodes, ts.Diagnostics.Parameter_modifiers_can_only_be_used_in_TypeScript_files));
                                 return "skip";
                             }
                             break;
-                        case 204 /* CallExpression */:
-                        case 205 /* NewExpression */:
-                        case 224 /* ExpressionWithTypeArguments */:
-                        case 275 /* JsxSelfClosingElement */:
-                        case 276 /* JsxOpeningElement */:
-                        case 206 /* TaggedTemplateExpression */:
+                        case 206 /* CallExpression */:
+                        case 207 /* NewExpression */:
+                        case 226 /* ExpressionWithTypeArguments */:
+                        case 277 /* JsxSelfClosingElement */:
+                        case 278 /* JsxOpeningElement */:
+                        case 208 /* TaggedTemplateExpression */:
                             // Check type arguments
                             if (nodes === parent.typeArguments) {
                                 diagnostics.push(createDiagnosticForNodeArray(nodes, ts.Diagnostics.Type_arguments_can_only_be_used_in_TypeScript_files));
@@ -110456,25 +112673,25 @@
                     for (var _i = 0, modifiers_2 = modifiers; _i < modifiers_2.length; _i++) {
                         var modifier = modifiers_2[_i];
                         switch (modifier.kind) {
-                            case 84 /* ConstKeyword */:
+                            case 85 /* ConstKeyword */:
                                 if (isConstValid) {
                                     continue;
                                 }
                             // to report error,
                             // falls through
-                            case 122 /* PublicKeyword */:
-                            case 120 /* PrivateKeyword */:
-                            case 121 /* ProtectedKeyword */:
-                            case 142 /* ReadonlyKeyword */:
-                            case 133 /* DeclareKeyword */:
-                            case 125 /* AbstractKeyword */:
-                            case 156 /* OverrideKeyword */:
+                            case 123 /* PublicKeyword */:
+                            case 121 /* PrivateKeyword */:
+                            case 122 /* ProtectedKeyword */:
+                            case 143 /* ReadonlyKeyword */:
+                            case 134 /* DeclareKeyword */:
+                            case 126 /* AbstractKeyword */:
+                            case 157 /* OverrideKeyword */:
                                 diagnostics.push(createDiagnosticForNode(modifier, ts.Diagnostics.The_0_modifier_can_only_be_used_in_TypeScript_files, ts.tokenToString(modifier.kind)));
                                 break;
                             // These are all legal modifiers.
-                            case 123 /* StaticKeyword */:
-                            case 92 /* ExportKeyword */:
-                            case 87 /* DefaultKeyword */:
+                            case 124 /* StaticKeyword */:
+                            case 93 /* ExportKeyword */:
+                            case 88 /* DefaultKeyword */:
                         }
                     }
                 }
@@ -110545,8 +112762,8 @@
             return a.fileName === b.fileName;
         }
         function moduleNameIsEqualTo(a, b) {
-            return a.kind === 78 /* Identifier */
-                ? b.kind === 78 /* Identifier */ && a.escapedText === b.escapedText
+            return a.kind === 79 /* Identifier */
+                ? b.kind === 79 /* Identifier */ && a.escapedText === b.escapedText
                 : b.kind === 10 /* StringLiteral */ && a.text === b.text;
         }
         function createSyntheticImport(text, file) {
@@ -110604,6 +112821,9 @@
                     // only through top - level external module names. Relative external module names are not permitted.
                     if (moduleNameExpr && ts.isStringLiteral(moduleNameExpr) && moduleNameExpr.text && (!inAmbientModule || !ts.isExternalModuleNameRelative(moduleNameExpr.text))) {
                         imports = ts.append(imports, moduleNameExpr);
+                        if (!usesUriStyleNodeCoreModules && currentNodeModulesDepth === 0 && !file.isDeclarationFile) {
+                            usesUriStyleNodeCoreModules = ts.startsWith(moduleNameExpr.text, "node:");
+                        }
                     }
                 }
                 else if (ts.isModuleDeclaration(node)) {
@@ -111230,6 +113450,9 @@
             if (options.strictPropertyInitialization && !ts.getStrictOptionValue(options, "strictNullChecks")) {
                 createDiagnosticForOptionName(ts.Diagnostics.Option_0_cannot_be_specified_without_specifying_option_1, "strictPropertyInitialization", "strictNullChecks");
             }
+            if (options.exactOptionalPropertyTypes && !ts.getStrictOptionValue(options, "strictNullChecks")) {
+                createDiagnosticForOptionName(ts.Diagnostics.Option_0_cannot_be_specified_without_specifying_option_1, "exactOptionalPropertyTypes", "strictNullChecks");
+            }
             if (options.isolatedModules) {
                 if (options.out) {
                     createDiagnosticForOptionName(ts.Diagnostics.Option_0_cannot_be_specified_with_option_1, "out", "isolatedModules");
@@ -111267,8 +113490,8 @@
             // List of collected files is complete; validate exhautiveness if this is a project with a file list
             if (options.composite) {
                 var rootPaths = new ts.Set(rootNames.map(toPath));
-                for (var _i = 0, files_3 = files; _i < files_3.length; _i++) {
-                    var file = files_3[_i];
+                for (var _i = 0, files_4 = files; _i < files_4.length; _i++) {
+                    var file = files_4[_i];
                     // Ignore file that is not emitted
                     if (ts.sourceFileMayBeEmitted(file, program) && !rootPaths.has(file.path)) {
                         addProgramDiagnosticExplainingFile(file, ts.Diagnostics.File_0_is_not_listed_within_the_file_list_of_project_1_Projects_must_list_all_files_or_use_an_include_pattern, [file.fileName, options.configFilePath || ""]);
@@ -111498,7 +113721,7 @@
             var location = locationReason && getReferencedFileLocation(getSourceFileByPath, locationReason);
             var fileIncludeReasonDetails = fileIncludeReasons && ts.chainDiagnosticMessages(fileIncludeReasons, ts.Diagnostics.The_file_is_in_the_program_because_Colon);
             var redirectInfo = file && ts.explainIfFileIsRedirect(file);
-            var chain = ts.chainDiagnosticMessages.apply(void 0, __spreadArray([redirectInfo ? fileIncludeReasonDetails ? __spreadArray([fileIncludeReasonDetails], redirectInfo) : redirectInfo : fileIncludeReasonDetails, diagnostic], args || ts.emptyArray));
+            var chain = ts.chainDiagnosticMessages.apply(void 0, __spreadArray([redirectInfo ? fileIncludeReasonDetails ? __spreadArray([fileIncludeReasonDetails], redirectInfo, true) : redirectInfo : fileIncludeReasonDetails, diagnostic], args || ts.emptyArray, false));
             return location && isReferenceFileLocation(location) ?
                 ts.createFileDiagnosticFromMessageChain(location.file, location.pos, location.end - location.pos, chain, relatedInfo) :
                 ts.createCompilerDiagnosticFromMessageChain(chain, relatedInfo);
@@ -111782,7 +114005,13 @@
             if (host.getSymlinkCache) {
                 return host.getSymlinkCache();
             }
-            return symlinks || (symlinks = ts.discoverProbableSymlinks(files, getCanonicalFileName, host.getCurrentDirectory()));
+            if (!symlinks) {
+                symlinks = ts.createSymlinkCache(currentDirectory, getCanonicalFileName);
+            }
+            if (files && resolvedTypeReferenceDirectives && !symlinks.hasProcessedResolutions()) {
+                symlinks.setSymlinksFromResolutions(files, resolvedTypeReferenceDirectives);
+            }
+            return symlinks;
         }
     }
     ts.createProgram = createProgram;
@@ -111952,7 +114181,7 @@
         // get any preEmit diagnostics, not just the ones
         if (!options.noEmitOnError)
             return undefined;
-        var diagnostics = __spreadArray(__spreadArray(__spreadArray(__spreadArray([], program.getOptionsDiagnostics(cancellationToken)), program.getSyntacticDiagnostics(sourceFile, cancellationToken)), program.getGlobalDiagnostics(cancellationToken)), program.getSemanticDiagnostics(sourceFile, cancellationToken));
+        var diagnostics = __spreadArray(__spreadArray(__spreadArray(__spreadArray([], program.getOptionsDiagnostics(cancellationToken), true), program.getSyntacticDiagnostics(sourceFile, cancellationToken), true), program.getGlobalDiagnostics(cancellationToken), true), program.getSemanticDiagnostics(sourceFile, cancellationToken), true);
         if (diagnostics.length === 0 && ts.getEmitDeclarations(program.getCompilerOptions())) {
             diagnostics = program.getDeclarationDiagnostics(/*sourceFile*/ undefined, cancellationToken);
         }
@@ -111962,17 +114191,17 @@
         if (!sourceFile && !ts.outFile(options)) {
             var emitResult = program.emitBuildInfo(writeFile, cancellationToken);
             if (emitResult.diagnostics)
-                diagnostics = __spreadArray(__spreadArray([], diagnostics), emitResult.diagnostics);
+                diagnostics = __spreadArray(__spreadArray([], diagnostics, true), emitResult.diagnostics, true);
             emittedFiles = emitResult.emittedFiles;
         }
         return { diagnostics: diagnostics, sourceMaps: undefined, emittedFiles: emittedFiles, emitSkipped: true };
     }
     ts.handleNoEmitOptions = handleNoEmitOptions;
     /*@internal*/
-    function filterSemanticDiagnotics(diagnostic, option) {
+    function filterSemanticDiagnostics(diagnostic, option) {
         return ts.filter(diagnostic, function (d) { return !d.skippedOn || !option[d.skippedOn]; });
     }
-    ts.filterSemanticDiagnotics = filterSemanticDiagnotics;
+    ts.filterSemanticDiagnostics = filterSemanticDiagnostics;
     /* @internal */
     function parseConfigHostFromCompilerHostLike(host, directoryStructureHost) {
         if (directoryStructureHost === void 0) { directoryStructureHost = host; }
@@ -112094,21 +114323,86 @@
     ts.getFileEmitOutput = getFileEmitOutput;
     var BuilderState;
     (function (BuilderState) {
-        /**
-         * Get the referencedFile from the imported module symbol
-         */
-        function getReferencedFileFromImportedModuleSymbol(symbol) {
-            if (symbol.declarations && symbol.declarations[0]) {
-                var declarationSourceFile = ts.getSourceFileOfNode(symbol.declarations[0]);
-                return declarationSourceFile && declarationSourceFile.resolvedPath;
+        var manyToManyPathMapCount = 0;
+        function createManyToManyPathMap() {
+            function create(forward, reverse, deleted) {
+                var version = 0;
+                var map = {
+                    id: manyToManyPathMapCount++,
+                    version: function () { return version; },
+                    clone: function () { return create(new ts.Map(forward), new ts.Map(reverse), deleted && new ts.Set(deleted)); },
+                    forEach: function (fn) { return forward.forEach(fn); },
+                    getKeys: function (v) { return reverse.get(v); },
+                    getValues: function (k) { return forward.get(k); },
+                    hasKey: function (k) { return forward.has(k); },
+                    keys: function () { return forward.keys(); },
+                    deletedKeys: function () { return deleted; },
+                    deleteKey: function (k) {
+                        (deleted || (deleted = new ts.Set())).add(k);
+                        var set = forward.get(k);
+                        if (!set) {
+                            return false;
+                        }
+                        set.forEach(function (v) { return deleteFromMultimap(reverse, v, k); });
+                        forward.delete(k);
+                        version++;
+                        return true;
+                    },
+                    set: function (k, vSet) {
+                        var changed = !!(deleted === null || deleted === void 0 ? void 0 : deleted.delete(k));
+                        var existingVSet = forward.get(k);
+                        forward.set(k, vSet);
+                        existingVSet === null || existingVSet === void 0 ? void 0 : existingVSet.forEach(function (v) {
+                            if (!vSet.has(v)) {
+                                changed = true;
+                                deleteFromMultimap(reverse, v, k);
+                            }
+                        });
+                        vSet.forEach(function (v) {
+                            if (!(existingVSet === null || existingVSet === void 0 ? void 0 : existingVSet.has(v))) {
+                                changed = true;
+                                addToMultimap(reverse, v, k);
+                            }
+                        });
+                        if (changed) {
+                            version++;
+                        }
+                        return map;
+                    },
+                };
+                return map;
             }
+            return create(new ts.Map(), new ts.Map(), /*deleted*/ undefined);
+        }
+        BuilderState.createManyToManyPathMap = createManyToManyPathMap;
+        function addToMultimap(map, k, v) {
+            var set = map.get(k);
+            if (!set) {
+                set = new ts.Set();
+                map.set(k, set);
+            }
+            set.add(v);
+        }
+        function deleteFromMultimap(map, k, v, removeEmpty) {
+            if (removeEmpty === void 0) { removeEmpty = true; }
+            var set = map.get(k);
+            if (set === null || set === void 0 ? void 0 : set.delete(v)) {
+                if (removeEmpty && !set.size) {
+                    map.delete(k);
+                }
+                return true;
+            }
+            return false;
+        }
+        function getReferencedFilesFromImportedModuleSymbol(symbol) {
+            return ts.mapDefined(symbol.declarations, function (declaration) { var _a; return (_a = ts.getSourceFileOfNode(declaration)) === null || _a === void 0 ? void 0 : _a.resolvedPath; });
         }
         /**
-         * Get the referencedFile from the import name node from file
+         * Get the module source file and all augmenting files from the import name node from file
          */
-        function getReferencedFileFromImportLiteral(checker, importName) {
+        function getReferencedFilesFromImportLiteral(checker, importName) {
             var symbol = checker.getSymbolAtLocation(importName);
-            return symbol && getReferencedFileFromImportedModuleSymbol(symbol);
+            return symbol && getReferencedFilesFromImportedModuleSymbol(symbol);
         }
         /**
          * Gets the path to reference file from file name, it could be resolvedPath if present otherwise path
@@ -112128,10 +114422,8 @@
                 var checker = program.getTypeChecker();
                 for (var _i = 0, _a = sourceFile.imports; _i < _a.length; _i++) {
                     var importName = _a[_i];
-                    var declarationSourceFilePath = getReferencedFileFromImportLiteral(checker, importName);
-                    if (declarationSourceFilePath) {
-                        addReferencedFile(declarationSourceFilePath);
-                    }
+                    var declarationSourceFilePaths = getReferencedFilesFromImportLiteral(checker, importName);
+                    declarationSourceFilePaths === null || declarationSourceFilePaths === void 0 ? void 0 : declarationSourceFilePaths.forEach(addReferencedFile);
                 }
             }
             var sourceFileDirectory = ts.getDirectoryPath(sourceFile.resolvedPath);
@@ -112208,8 +114500,8 @@
          */
         function create(newProgram, getCanonicalFileName, oldState, disableUseFileVersionAsSignature) {
             var fileInfos = new ts.Map();
-            var referencedMap = newProgram.getCompilerOptions().module !== ts.ModuleKind.None ? new ts.Map() : undefined;
-            var exportedModulesMap = referencedMap ? new ts.Map() : undefined;
+            var referencedMap = newProgram.getCompilerOptions().module !== ts.ModuleKind.None ? createManyToManyPathMap() : undefined;
+            var exportedModulesMap = referencedMap ? createManyToManyPathMap() : undefined;
             var hasCalledUpdateShapeSignature = new ts.Set();
             var useOldState = canReuseOldState(referencedMap, oldState);
             // Ensure source files have parent pointers set
@@ -112226,7 +114518,7 @@
                     }
                     // Copy old visible to outside files map
                     if (useOldState) {
-                        var exportedModules = oldState.exportedModulesMap.get(sourceFile.resolvedPath);
+                        var exportedModules = oldState.exportedModulesMap.getValues(sourceFile.resolvedPath);
                         if (exportedModules) {
                             exportedModulesMap.set(sourceFile.resolvedPath, exportedModules);
                         }
@@ -112255,11 +114547,12 @@
          * Creates a clone of the state
          */
         function clone(state) {
+            var _a, _b;
             // Dont need to backup allFiles info since its cache anyway
             return {
                 fileInfos: new ts.Map(state.fileInfos),
-                referencedMap: state.referencedMap && new ts.Map(state.referencedMap),
-                exportedModulesMap: state.exportedModulesMap && new ts.Map(state.exportedModulesMap),
+                referencedMap: (_a = state.referencedMap) === null || _a === void 0 ? void 0 : _a.clone(),
+                exportedModulesMap: (_b = state.exportedModulesMap) === null || _b === void 0 ? void 0 : _b.clone(),
                 hasCalledUpdateShapeSignature: new ts.Set(state.hasCalledUpdateShapeSignature),
                 useFileVersionAsSignature: state.useFileVersionAsSignature,
             };
@@ -112305,7 +114598,8 @@
         /**
          * Returns if the shape of the signature has changed since last emit
          */
-        function updateShapeSignature(state, programOfThisState, sourceFile, cacheToUpdateSignature, cancellationToken, computeHash, exportedModulesMapCache) {
+        function updateShapeSignature(state, programOfThisState, sourceFile, cacheToUpdateSignature, cancellationToken, computeHash, exportedModulesMapCache, useFileVersionAsSignature) {
+            if (useFileVersionAsSignature === void 0) { useFileVersionAsSignature = state.useFileVersionAsSignature; }
             ts.Debug.assert(!!sourceFile);
             ts.Debug.assert(!exportedModulesMapCache || !!state.exportedModulesMap, "Compute visible to outside map only if visibleToOutsideReferencedMap present in the state");
             // If we have cached the result for this file, that means hence forth we should assume file shape is uptodate
@@ -112317,7 +114611,7 @@
                 return ts.Debug.fail();
             var prevSignature = info.signature;
             var latestSignature;
-            if (!sourceFile.isDeclarationFile && !state.useFileVersionAsSignature) {
+            if (!sourceFile.isDeclarationFile && !useFileVersionAsSignature) {
                 var emitOutput_1 = getFileEmitOutput(programOfThisState, sourceFile, 
                 /*emitOnlyDtsFiles*/ true, cancellationToken, 
                 /*customTransformers*/ undefined, 
@@ -112336,8 +114630,13 @@
                 latestSignature = sourceFile.version;
                 if (exportedModulesMapCache && latestSignature !== prevSignature) {
                     // All the references in this file are exported
-                    var references = state.referencedMap ? state.referencedMap.get(sourceFile.resolvedPath) : undefined;
-                    exportedModulesMapCache.set(sourceFile.resolvedPath, references || false);
+                    var references = state.referencedMap ? state.referencedMap.getValues(sourceFile.resolvedPath) : undefined;
+                    if (references) {
+                        exportedModulesMapCache.set(sourceFile.resolvedPath, references);
+                    }
+                    else {
+                        exportedModulesMapCache.deleteKey(sourceFile.resolvedPath);
+                    }
                 }
             }
             cacheToUpdateSignature.set(sourceFile.resolvedPath, latestSignature);
@@ -112349,18 +114648,23 @@
          */
         function updateExportedModules(sourceFile, exportedModulesFromDeclarationEmit, exportedModulesMapCache) {
             if (!exportedModulesFromDeclarationEmit) {
-                exportedModulesMapCache.set(sourceFile.resolvedPath, false);
+                exportedModulesMapCache.deleteKey(sourceFile.resolvedPath);
                 return;
             }
             var exportedModules;
-            exportedModulesFromDeclarationEmit.forEach(function (symbol) { return addExportedModule(getReferencedFileFromImportedModuleSymbol(symbol)); });
-            exportedModulesMapCache.set(sourceFile.resolvedPath, exportedModules || false);
-            function addExportedModule(exportedModulePath) {
-                if (exportedModulePath) {
+            exportedModulesFromDeclarationEmit.forEach(function (symbol) { return addExportedModule(getReferencedFilesFromImportedModuleSymbol(symbol)); });
+            if (exportedModules) {
+                exportedModulesMapCache.set(sourceFile.resolvedPath, exportedModules);
+            }
+            else {
+                exportedModulesMapCache.deleteKey(sourceFile.resolvedPath);
+            }
+            function addExportedModule(exportedModulePaths) {
+                if (exportedModulePaths === null || exportedModulePaths === void 0 ? void 0 : exportedModulePaths.length) {
                     if (!exportedModules) {
                         exportedModules = new ts.Set();
                     }
-                    exportedModules.add(exportedModulePath);
+                    exportedModulePaths.forEach(function (path) { return exportedModules.add(path); });
                 }
             }
         }
@@ -112369,16 +114673,25 @@
          * This should be called whenever it is safe to commit the state of the builder
          */
         function updateExportedFilesMapFromCache(state, exportedModulesMapCache) {
+            var _a;
             if (exportedModulesMapCache) {
                 ts.Debug.assert(!!state.exportedModulesMap);
-                exportedModulesMapCache.forEach(function (exportedModules, path) {
-                    if (exportedModules) {
-                        state.exportedModulesMap.set(path, exportedModules);
+                var cacheId = exportedModulesMapCache.id;
+                var cacheVersion = exportedModulesMapCache.version();
+                if (state.previousCache) {
+                    if (state.previousCache.id === cacheId && state.previousCache.version === cacheVersion) {
+                        // If this is the same cache at the same version as last time this BuilderState
+                        // was updated, there's no need to update again
+                        return;
                     }
-                    else {
-                        state.exportedModulesMap.delete(path);
-                    }
-                });
+                    state.previousCache.id = cacheId;
+                    state.previousCache.version = cacheVersion;
+                }
+                else {
+                    state.previousCache = { id: cacheId, version: cacheVersion };
+                }
+                (_a = exportedModulesMapCache.deletedKeys()) === null || _a === void 0 ? void 0 : _a.forEach(function (path) { return state.exportedModulesMap.deleteKey(path); });
+                exportedModulesMapCache.forEach(function (exportedModules, path) { return state.exportedModulesMap.set(path, exportedModules); });
             }
         }
         BuilderState.updateExportedFilesMapFromCache = updateExportedFilesMapFromCache;
@@ -112402,7 +114715,7 @@
                 var path = queue.pop();
                 if (!seenMap.has(path)) {
                     seenMap.add(path);
-                    var references = state.referencedMap.get(path);
+                    var references = state.referencedMap.getValues(path);
                     if (references) {
                         var iterator = references.keys();
                         for (var iterResult = iterator.next(); !iterResult.done; iterResult = iterator.next()) {
@@ -112428,10 +114741,8 @@
          * Gets the files referenced by the the file path
          */
         function getReferencedByPaths(state, referencedFilePath) {
-            return ts.arrayFrom(ts.mapDefinedIterator(state.referencedMap.entries(), function (_a) {
-                var filePath = _a[0], referencesInFile = _a[1];
-                return referencesInFile.has(referencedFilePath) ? filePath : undefined;
-            }));
+            var keys = state.referencedMap.getKeys(referencedFilePath);
+            return keys ? ts.arrayFrom(keys.keys()) : [];
         }
         BuilderState.getReferencedByPaths = getReferencedByPaths;
         /**
@@ -112461,7 +114772,7 @@
          */
         function isFileAffectingGlobalScope(sourceFile) {
             return containsGlobalScopeAugmentation(sourceFile) ||
-                !ts.isExternalOrCommonJsModule(sourceFile) && !containsOnlyAmbientModules(sourceFile);
+                !ts.isExternalOrCommonJsModule(sourceFile) && !ts.isJsonSourceFile(sourceFile) && !containsOnlyAmbientModules(sourceFile);
         }
         /**
          * Gets all files of the program excluding the default library file
@@ -112597,7 +114908,7 @@
                 // versions dont match
                 oldInfo.version !== info.version ||
                 // Referenced files changed
-                !hasSameKeys(newReferences = referencedMap && referencedMap.get(sourceFilePath), oldReferencedMap && oldReferencedMap.get(sourceFilePath)) ||
+                !hasSameKeys(newReferences = referencedMap && referencedMap.getValues(sourceFilePath), oldReferencedMap && oldReferencedMap.getValues(sourceFilePath)) ||
                 // Referenced file was deleted in the new program
                 newReferences && ts.forEachKey(newReferences, function (path) { return !state.fileInfos.has(path) && oldState.fileInfos.has(path); })) {
                 // Register file as changed file and do not copy semantic diagnostics, since all changed files need to be re-evaluated
@@ -112673,6 +114984,7 @@
      * Creates a clone of the state
      */
     function cloneBuilderProgramState(state) {
+        var _a;
         var newState = ts.BuilderState.clone(state);
         newState.semanticDiagnosticsPerFile = state.semanticDiagnosticsPerFile && new ts.Map(state.semanticDiagnosticsPerFile);
         newState.changedFilesSet = new ts.Set(state.changedFilesSet);
@@ -112680,7 +114992,7 @@
         newState.affectedFilesIndex = state.affectedFilesIndex;
         newState.currentChangedFilePath = state.currentChangedFilePath;
         newState.currentAffectedFilesSignatures = state.currentAffectedFilesSignatures && new ts.Map(state.currentAffectedFilesSignatures);
-        newState.currentAffectedFilesExportedModulesMap = state.currentAffectedFilesExportedModulesMap && new ts.Map(state.currentAffectedFilesExportedModulesMap);
+        newState.currentAffectedFilesExportedModulesMap = (_a = state.currentAffectedFilesExportedModulesMap) === null || _a === void 0 ? void 0 : _a.clone();
         newState.seenAffectedFiles = state.seenAffectedFiles && new ts.Set(state.seenAffectedFiles);
         newState.cleanedDiagnosticsOfLibFiles = state.cleanedDiagnosticsOfLibFiles;
         newState.semanticDiagnosticsFromOldState = state.semanticDiagnosticsFromOldState && new ts.Set(state.semanticDiagnosticsFromOldState);
@@ -112748,8 +115060,7 @@
             if (!state.currentAffectedFilesSignatures)
                 state.currentAffectedFilesSignatures = new ts.Map();
             if (state.exportedModulesMap) {
-                if (!state.currentAffectedFilesExportedModulesMap)
-                    state.currentAffectedFilesExportedModulesMap = new ts.Map();
+                state.currentAffectedFilesExportedModulesMap || (state.currentAffectedFilesExportedModulesMap = ts.BuilderState.createManyToManyPathMap());
             }
             state.affectedFiles = ts.BuilderState.getFilesAffectedBy(state, program, nextKey.value, cancellationToken, computeHash, state.currentAffectedFilesSignatures, state.currentAffectedFilesExportedModulesMap);
             state.currentChangedFilePath = nextKey.value;
@@ -112829,14 +115140,15 @@
                 // we need to update the signature to reflect correctness of the signature(which is output d.ts emit) of this file
                 // This ensures that we dont later during incremental builds considering wrong signature.
                 // Eg where this also is needed to ensure that .tsbuildinfo generated by incremental build should be same as if it was first fresh build
-                ts.BuilderState.updateShapeSignature(state, program, sourceFile, ts.Debug.checkDefined(state.currentAffectedFilesSignatures), cancellationToken, computeHash, state.currentAffectedFilesExportedModulesMap);
+                // But we avoid expensive full shape computation, as using file version as shape is enough for correctness.
+                ts.BuilderState.updateShapeSignature(state, program, sourceFile, ts.Debug.checkDefined(state.currentAffectedFilesSignatures), cancellationToken, computeHash, state.currentAffectedFilesExportedModulesMap, 
+                /* useFileVersionAsSignature */ true);
                 // If not dts emit, nothing more to do
                 if (ts.getEmitDeclarations(state.compilerOptions)) {
                     addToAffectedFilesPendingEmit(state, path, 0 /* DtsOnly */);
                 }
             }
         }
-        return false;
     }
     /**
      * Removes semantic diagnostics for path and
@@ -112859,6 +115171,7 @@
      * Iterate on referencing modules that export entities from affected file
      */
     function forEachReferencingModulesOfExportOfAffectedFile(state, affectedFile, fn) {
+        var _a, _b;
         // If there was change in signature (dts output) for the changed file,
         // then only we need to handle pending file emit
         if (!state.exportedModulesMap || !state.changedFilesSet.has(affectedFile.resolvedPath)) {
@@ -112876,8 +115189,8 @@
                 var currentPath = queue.pop();
                 if (!seenFileNamesMap.has(currentPath)) {
                     seenFileNamesMap.set(currentPath, true);
-                    var result = fn(state, currentPath);
-                    if (result && isChangedSignature(state, currentPath)) {
+                    fn(state, currentPath);
+                    if (isChangedSignature(state, currentPath)) {
                         var currentSourceFile = ts.Debug.checkDefined(state.program).getSourceFileByPath(currentPath);
                         queue.push.apply(queue, ts.BuilderState.getReferencedByPaths(state, currentSourceFile.resolvedPath));
                     }
@@ -112888,17 +115201,15 @@
         var seenFileAndExportsOfFile = new ts.Set();
         // Go through exported modules from cache first
         // If exported modules has path, all files referencing file exported from are affected
-        if (ts.forEachEntry(state.currentAffectedFilesExportedModulesMap, function (exportedModules, exportedFromPath) {
-            return exportedModules &&
-                exportedModules.has(affectedFile.resolvedPath) &&
-                forEachFilesReferencingPath(state, exportedFromPath, seenFileAndExportsOfFile, fn);
-        })) {
-            return;
-        }
+        (_a = state.currentAffectedFilesExportedModulesMap.getKeys(affectedFile.resolvedPath)) === null || _a === void 0 ? void 0 : _a.forEach(function (exportedFromPath) {
+            return forEachFilesReferencingPath(state, exportedFromPath, seenFileAndExportsOfFile, fn);
+        });
         // If exported from path is not from cache and exported modules has path, all files referencing file exported from are affected
-        ts.forEachEntry(state.exportedModulesMap, function (exportedModules, exportedFromPath) {
-            return !state.currentAffectedFilesExportedModulesMap.has(exportedFromPath) && // If we already iterated this through cache, ignore it
-                exportedModules.has(affectedFile.resolvedPath) &&
+        (_b = state.exportedModulesMap.getKeys(affectedFile.resolvedPath)) === null || _b === void 0 ? void 0 : _b.forEach(function (exportedFromPath) {
+            var _a;
+            // If the cache had an updated value, skip
+            return !state.currentAffectedFilesExportedModulesMap.hasKey(exportedFromPath) &&
+                !((_a = state.currentAffectedFilesExportedModulesMap.deletedKeys()) === null || _a === void 0 ? void 0 : _a.has(exportedFromPath)) &&
                 forEachFilesReferencingPath(state, exportedFromPath, seenFileAndExportsOfFile, fn);
         });
     }
@@ -112906,43 +115217,37 @@
      * Iterate on files referencing referencedPath
      */
     function forEachFilesReferencingPath(state, referencedPath, seenFileAndExportsOfFile, fn) {
-        return ts.forEachEntry(state.referencedMap, function (referencesInFile, filePath) {
-            return referencesInFile.has(referencedPath) && forEachFileAndExportsOfFile(state, filePath, seenFileAndExportsOfFile, fn);
+        var _a;
+        (_a = state.referencedMap.getKeys(referencedPath)) === null || _a === void 0 ? void 0 : _a.forEach(function (filePath) {
+            return forEachFileAndExportsOfFile(state, filePath, seenFileAndExportsOfFile, fn);
         });
     }
     /**
      * fn on file and iterate on anything that exports this file
      */
     function forEachFileAndExportsOfFile(state, filePath, seenFileAndExportsOfFile, fn) {
+        var _a, _b, _c;
         if (!ts.tryAddToSet(seenFileAndExportsOfFile, filePath)) {
-            return false;
+            return;
         }
-        if (fn(state, filePath)) {
-            // If there are no more diagnostics from old cache, done
-            return true;
-        }
+        fn(state, filePath);
         ts.Debug.assert(!!state.currentAffectedFilesExportedModulesMap);
         // Go through exported modules from cache first
         // If exported modules has path, all files referencing file exported from are affected
-        if (ts.forEachEntry(state.currentAffectedFilesExportedModulesMap, function (exportedModules, exportedFromPath) {
-            return exportedModules &&
-                exportedModules.has(filePath) &&
-                forEachFileAndExportsOfFile(state, exportedFromPath, seenFileAndExportsOfFile, fn);
-        })) {
-            return true;
-        }
+        (_a = state.currentAffectedFilesExportedModulesMap.getKeys(filePath)) === null || _a === void 0 ? void 0 : _a.forEach(function (exportedFromPath) {
+            return forEachFileAndExportsOfFile(state, exportedFromPath, seenFileAndExportsOfFile, fn);
+        });
         // If exported from path is not from cache and exported modules has path, all files referencing file exported from are affected
-        if (ts.forEachEntry(state.exportedModulesMap, function (exportedModules, exportedFromPath) {
-            return !state.currentAffectedFilesExportedModulesMap.has(exportedFromPath) && // If we already iterated this through cache, ignore it
-                exportedModules.has(filePath) &&
+        (_b = state.exportedModulesMap.getKeys(filePath)) === null || _b === void 0 ? void 0 : _b.forEach(function (exportedFromPath) {
+            var _a;
+            // If the cache had an updated value, skip
+            return !state.currentAffectedFilesExportedModulesMap.hasKey(exportedFromPath) &&
+                !((_a = state.currentAffectedFilesExportedModulesMap.deletedKeys()) === null || _a === void 0 ? void 0 : _a.has(exportedFromPath)) &&
                 forEachFileAndExportsOfFile(state, exportedFromPath, seenFileAndExportsOfFile, fn);
-        })) {
-            return true;
-        }
+        });
         // Remove diagnostics of files that import this file (without going to exports of referencing files)
-        return !!ts.forEachEntry(state.referencedMap, function (referencesInFile, referencingFilePath) {
-            return referencesInFile.has(filePath) &&
-                !seenFileAndExportsOfFile.has(referencingFilePath) && // Not already removed diagnostic file
+        (_c = state.referencedMap.getKeys(filePath)) === null || _c === void 0 ? void 0 : _c.forEach(function (referencingFilePath) {
+            return !seenFileAndExportsOfFile.has(referencingFilePath) && // Not already removed diagnostic file
                 fn(state, referencingFilePath);
         } // Dont add to seen since this is not yet done with the export removal
         );
@@ -113004,7 +115309,7 @@
             var cachedDiagnostics = state.semanticDiagnosticsPerFile.get(path);
             // Report the bind and check diagnostics from the cache if we already have those diagnostics present
             if (cachedDiagnostics) {
-                return ts.filterSemanticDiagnotics(cachedDiagnostics, state.compilerOptions);
+                return ts.filterSemanticDiagnostics(cachedDiagnostics, state.compilerOptions);
             }
         }
         // Diagnostics werent cached, get them from program, and cache the result
@@ -113012,7 +115317,7 @@
         if (state.semanticDiagnosticsPerFile) {
             state.semanticDiagnosticsPerFile.set(path, diagnostics);
         }
-        return ts.filterSemanticDiagnotics(diagnostics, state.compilerOptions);
+        return ts.filterSemanticDiagnostics(diagnostics, state.compilerOptions);
     }
     /**
      * Gets the program information to be emitted in buildInfo so that we can use it to create new program
@@ -113047,19 +115352,24 @@
         if (state.referencedMap) {
             referencedMap = ts.arrayFrom(state.referencedMap.keys()).sort(ts.compareStringsCaseSensitive).map(function (key) { return [
                 toFileId(key),
-                toFileIdListId(state.referencedMap.get(key))
+                toFileIdListId(state.referencedMap.getValues(key))
             ]; });
         }
         var exportedModulesMap;
         if (state.exportedModulesMap) {
             exportedModulesMap = ts.mapDefined(ts.arrayFrom(state.exportedModulesMap.keys()).sort(ts.compareStringsCaseSensitive), function (key) {
-                var newValue = state.currentAffectedFilesExportedModulesMap && state.currentAffectedFilesExportedModulesMap.get(key);
+                var _a;
+                if (state.currentAffectedFilesExportedModulesMap) {
+                    if ((_a = state.currentAffectedFilesExportedModulesMap.deletedKeys()) === null || _a === void 0 ? void 0 : _a.has(key)) {
+                        return undefined;
+                    }
+                    var newValue = state.currentAffectedFilesExportedModulesMap.getValues(key);
+                    if (newValue) {
+                        return [toFileId(key), toFileIdListId(newValue)];
+                    }
+                }
                 // Not in temporary cache, use existing value
-                if (newValue === undefined)
-                    return [toFileId(key), toFileIdListId(state.exportedModulesMap.get(key))];
-                // Value in cache and has updated value map, use that
-                else if (newValue)
-                    return [toFileId(key), toFileIdListId(newValue)];
+                return [toFileId(key), toFileIdListId(state.exportedModulesMap.getValues(key))];
             });
         }
         var semanticDiagnosticsPerFile;
@@ -113236,8 +115546,9 @@
         newProgram = undefined; // TODO: GH#18217
         oldProgram = undefined;
         oldState = undefined;
-        var builderProgram = createRedirectedBuilderProgram(state, configFileParsingDiagnostics);
-        builderProgram.getState = function () { return state; };
+        var getState = function () { return state; };
+        var builderProgram = createRedirectedBuilderProgram(getState, configFileParsingDiagnostics);
+        builderProgram.getState = getState;
         builderProgram.backupState = function () {
             ts.Debug.assert(backupState === undefined);
             backupState = cloneBuilderProgramState(state);
@@ -113472,8 +115783,8 @@
         var state = {
             fileInfos: fileInfos,
             compilerOptions: program.options ? ts.convertToOptionsWithAbsolutePaths(program.options, toAbsolutePath) : {},
-            referencedMap: toMapOfReferencedSet(program.referencedMap),
-            exportedModulesMap: toMapOfReferencedSet(program.exportedModulesMap),
+            referencedMap: toManyToManyPathMap(program.referencedMap),
+            exportedModulesMap: toManyToManyPathMap(program.exportedModulesMap),
             semanticDiagnosticsPerFile: program.semanticDiagnosticsPerFile && ts.arrayToMap(program.semanticDiagnosticsPerFile, function (value) { return toFilePath(ts.isNumber(value) ? value : value[0]); }, function (value) { return ts.isNumber(value) ? ts.emptyArray : value[1]; }),
             hasReusableDiagnostic: true,
             affectedFilesPendingEmit: ts.map(program.affectedFilesPendingEmit, function (value) { return toFilePath(value[0]); }),
@@ -113516,20 +115827,28 @@
         function toFilePathsSet(fileIdsListId) {
             return filePathsSetList[fileIdsListId - 1];
         }
-        function toMapOfReferencedSet(referenceMap) {
-            return referenceMap && ts.arrayToMap(referenceMap, function (value) { return toFilePath(value[0]); }, function (value) { return toFilePathsSet(value[1]); });
+        function toManyToManyPathMap(referenceMap) {
+            if (!referenceMap) {
+                return undefined;
+            }
+            var map = ts.BuilderState.createManyToManyPathMap();
+            referenceMap.forEach(function (_a) {
+                var fileId = _a[0], fileIdListId = _a[1];
+                return map.set(toFilePath(fileId), toFilePathsSet(fileIdListId));
+            });
+            return map;
         }
     }
     ts.createBuildProgramUsingProgramBuildInfo = createBuildProgramUsingProgramBuildInfo;
-    function createRedirectedBuilderProgram(state, configFileParsingDiagnostics) {
+    function createRedirectedBuilderProgram(getState, configFileParsingDiagnostics) {
         return {
             getState: ts.notImplemented,
             backupState: ts.noop,
             restoreState: ts.noop,
             getProgram: getProgram,
-            getProgramOrUndefined: function () { return state.program; },
-            releaseProgram: function () { return state.program = undefined; },
-            getCompilerOptions: function () { return state.compilerOptions; },
+            getProgramOrUndefined: function () { return getState().program; },
+            releaseProgram: function () { return getState().program = undefined; },
+            getCompilerOptions: function () { return getState().compilerOptions; },
             getSourceFile: function (fileName) { return getProgram().getSourceFile(fileName); },
             getSourceFiles: function () { return getProgram().getSourceFiles(); },
             getOptionsDiagnostics: function (cancellationToken) { return getProgram().getOptionsDiagnostics(cancellationToken); },
@@ -113545,7 +115864,7 @@
             close: ts.noop,
         };
         function getProgram() {
-            return ts.Debug.checkDefined(state.program);
+            return ts.Debug.checkDefined(getState().program);
         }
     }
     ts.createRedirectedBuilderProgram = createRedirectedBuilderProgram;
@@ -113562,7 +115881,7 @@
     ts.createEmitAndSemanticDiagnosticsBuilderProgram = createEmitAndSemanticDiagnosticsBuilderProgram;
     function createAbstractBuilder(newProgramOrRootNames, hostOrOptions, oldProgramOrHost, configFileParsingDiagnosticsOrOldProgram, configFileParsingDiagnostics, projectReferences) {
         var _a = ts.getBuilderCreationParameters(newProgramOrRootNames, hostOrOptions, oldProgramOrHost, configFileParsingDiagnosticsOrOldProgram, configFileParsingDiagnostics, projectReferences), newProgram = _a.newProgram, newConfigFileParsingDiagnostics = _a.configFileParsingDiagnostics;
-        return ts.createRedirectedBuilderProgram({ program: newProgram, compilerOptions: newProgram.getCompilerOptions() }, newConfigFileParsingDiagnostics);
+        return ts.createRedirectedBuilderProgram(function () { return ({ program: newProgram, compilerOptions: newProgram.getCompilerOptions() }); }, newConfigFileParsingDiagnostics);
     }
     ts.createAbstractBuilder = createAbstractBuilder;
 })(ts || (ts = {}));
@@ -113663,6 +115982,7 @@
         // TypeRoot watches for the types that get added as part of getAutomaticTypeDirectiveNames
         var typeRootsWatches = new ts.Map();
         return {
+            getModuleResolutionCache: function () { return moduleResolutionCache; },
             startRecordingFilesWithChangedResolutions: startRecordingFilesWithChangedResolutions,
             finishRecordingFilesWithChangedResolutions: finishRecordingFilesWithChangedResolutions,
             // perDirectoryResolvedModuleNames and perDirectoryResolvedTypeReferenceDirectives could be non empty if there was exception during program update
@@ -113786,7 +116106,7 @@
             return ts.resolveTypeReferenceDirective(typeReferenceDirectiveName, containingFile, options, host, redirectedReference, typeReferenceDirectiveResolutionCache);
         }
         function resolveNamesWithLocalCache(_a) {
-            var _b;
+            var _b, _c, _d;
             var names = _a.names, containingFile = _a.containingFile, redirectedReference = _a.redirectedReference, cache = _a.cache, perDirectoryCacheWithRedirects = _a.perDirectoryCacheWithRedirects, loader = _a.loader, getResolutionWithResolvedFileName = _a.getResolutionWithResolvedFileName, shouldRetryResolution = _a.shouldRetryResolution, reusedNames = _a.reusedNames, logChanges = _a.logChanges;
             var path = resolutionHost.toPath(containingFile);
             var resolutionsInFile = cache.get(path) || cache.set(path, new ts.Map()).get(path);
@@ -113819,9 +116139,24 @@
                     var resolutionInDirectory = perDirectoryResolution.get(name);
                     if (resolutionInDirectory) {
                         resolution = resolutionInDirectory;
+                        var host = ((_b = resolutionHost.getCompilerHost) === null || _b === void 0 ? void 0 : _b.call(resolutionHost)) || resolutionHost;
+                        if (ts.isTraceEnabled(compilerOptions, host)) {
+                            var resolved = getResolutionWithResolvedFileName(resolution);
+                            ts.trace(host, loader === resolveModuleName ?
+                                (resolved === null || resolved === void 0 ? void 0 : resolved.resolvedFileName) ?
+                                    resolved.packagetId ?
+                                        ts.Diagnostics.Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_3_with_Package_ID_4 :
+                                        ts.Diagnostics.Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_3 :
+                                    ts.Diagnostics.Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_not_resolved :
+                                (resolved === null || resolved === void 0 ? void 0 : resolved.resolvedFileName) ?
+                                    resolved.packagetId ?
+                                        ts.Diagnostics.Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_3_with_Package_ID_4 :
+                                        ts.Diagnostics.Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_3 :
+                                    ts.Diagnostics.Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_not_resolved, name, containingFile, ts.getDirectoryPath(containingFile), resolved === null || resolved === void 0 ? void 0 : resolved.resolvedFileName, (resolved === null || resolved === void 0 ? void 0 : resolved.packagetId) && ts.packageIdToString(resolved.packagetId));
+                        }
                     }
                     else {
-                        resolution = loader(name, containingFile, compilerOptions, ((_b = resolutionHost.getCompilerHost) === null || _b === void 0 ? void 0 : _b.call(resolutionHost)) || resolutionHost, redirectedReference);
+                        resolution = loader(name, containingFile, compilerOptions, ((_c = resolutionHost.getCompilerHost) === null || _c === void 0 ? void 0 : _c.call(resolutionHost)) || resolutionHost, redirectedReference);
                         perDirectoryResolution.set(name, resolution);
                     }
                     resolutionsInFile.set(name, resolution);
@@ -113835,6 +116170,23 @@
                         logChanges = false;
                     }
                 }
+                else {
+                    var host = ((_d = resolutionHost.getCompilerHost) === null || _d === void 0 ? void 0 : _d.call(resolutionHost)) || resolutionHost;
+                    if (ts.isTraceEnabled(compilerOptions, host) && !seenNamesInFile.has(name)) {
+                        var resolved = getResolutionWithResolvedFileName(resolution);
+                        ts.trace(host, loader === resolveModuleName ?
+                            (resolved === null || resolved === void 0 ? void 0 : resolved.resolvedFileName) ?
+                                resolved.packagetId ?
+                                    ts.Diagnostics.Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2_with_Package_ID_3 :
+                                    ts.Diagnostics.Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2 :
+                                ts.Diagnostics.Reusing_resolution_of_module_0_from_1_of_old_program_it_was_not_resolved :
+                            (resolved === null || resolved === void 0 ? void 0 : resolved.resolvedFileName) ?
+                                resolved.packagetId ?
+                                    ts.Diagnostics.Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved_to_2_with_Package_ID_3 :
+                                    ts.Diagnostics.Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved_to_2 :
+                                ts.Diagnostics.Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_not_resolved, name, containingFile, resolved === null || resolved === void 0 ? void 0 : resolved.resolvedFileName, (resolved === null || resolved === void 0 ? void 0 : resolved.packagetId) && ts.packageIdToString(resolved.packagetId));
+                    }
+                }
                 ts.Debug.assert(resolution !== undefined && !resolution.isInvalidated);
                 seenNamesInFile.set(name, true);
                 resolvedModules.push(getResolutionWithResolvedFileName(resolution));
@@ -114280,7 +116632,7 @@
 var ts;
 (function (ts) {
     var moduleSpecifiers;
-    (function (moduleSpecifiers) {
+    (function (moduleSpecifiers_1) {
         var RelativePreference;
         (function (RelativePreference) {
             RelativePreference[RelativePreference["Relative"] = 0] = "Relative";
@@ -114323,41 +116675,68 @@
             };
         }
         function updateModuleSpecifier(compilerOptions, importingSourceFileName, toFileName, host, oldImportSpecifier) {
-            var res = getModuleSpecifierWorker(compilerOptions, importingSourceFileName, toFileName, host, getPreferencesForUpdate(compilerOptions, oldImportSpecifier));
+            var res = getModuleSpecifierWorker(compilerOptions, importingSourceFileName, toFileName, host, getPreferencesForUpdate(compilerOptions, oldImportSpecifier), {});
             if (res === oldImportSpecifier)
                 return undefined;
             return res;
         }
-        moduleSpecifiers.updateModuleSpecifier = updateModuleSpecifier;
+        moduleSpecifiers_1.updateModuleSpecifier = updateModuleSpecifier;
         // Note: importingSourceFile is just for usesJsExtensionOnImports
-        function getModuleSpecifier(compilerOptions, importingSourceFile, importingSourceFileName, toFileName, host, preferences) {
-            if (preferences === void 0) { preferences = {}; }
-            return getModuleSpecifierWorker(compilerOptions, importingSourceFileName, toFileName, host, getPreferences(preferences, compilerOptions, importingSourceFile));
+        function getModuleSpecifier(compilerOptions, importingSourceFile, importingSourceFileName, toFileName, host) {
+            return getModuleSpecifierWorker(compilerOptions, importingSourceFileName, toFileName, host, getPreferences({}, compilerOptions, importingSourceFile), {});
         }
-        moduleSpecifiers.getModuleSpecifier = getModuleSpecifier;
-        function getNodeModulesPackageName(compilerOptions, importingSourceFileName, nodeModulesFileName, host) {
+        moduleSpecifiers_1.getModuleSpecifier = getModuleSpecifier;
+        function getNodeModulesPackageName(compilerOptions, importingSourceFileName, nodeModulesFileName, host, preferences) {
             var info = getInfo(importingSourceFileName, host);
-            var modulePaths = getAllModulePaths(importingSourceFileName, nodeModulesFileName, host);
+            var modulePaths = getAllModulePaths(importingSourceFileName, nodeModulesFileName, host, preferences);
             return ts.firstDefined(modulePaths, function (modulePath) { return tryGetModuleNameAsNodeModule(modulePath, info, host, compilerOptions, /*packageNameOnly*/ true); });
         }
-        moduleSpecifiers.getNodeModulesPackageName = getNodeModulesPackageName;
-        function getModuleSpecifierWorker(compilerOptions, importingSourceFileName, toFileName, host, preferences) {
+        moduleSpecifiers_1.getNodeModulesPackageName = getNodeModulesPackageName;
+        function getModuleSpecifierWorker(compilerOptions, importingSourceFileName, toFileName, host, preferences, userPreferences) {
             var info = getInfo(importingSourceFileName, host);
-            var modulePaths = getAllModulePaths(importingSourceFileName, toFileName, host);
+            var modulePaths = getAllModulePaths(importingSourceFileName, toFileName, host, userPreferences);
             return ts.firstDefined(modulePaths, function (modulePath) { return tryGetModuleNameAsNodeModule(modulePath, info, host, compilerOptions); }) ||
                 getLocalModuleSpecifier(toFileName, info, compilerOptions, host, preferences);
         }
+        function tryGetModuleSpecifiersFromCache(moduleSymbol, importingSourceFile, host, userPreferences) {
+            return tryGetModuleSpecifiersFromCacheWorker(moduleSymbol, importingSourceFile, host, userPreferences)[0];
+        }
+        moduleSpecifiers_1.tryGetModuleSpecifiersFromCache = tryGetModuleSpecifiersFromCache;
+        function tryGetModuleSpecifiersFromCacheWorker(moduleSymbol, importingSourceFile, host, userPreferences) {
+            var _a;
+            var moduleSourceFile = ts.getSourceFileOfModule(moduleSymbol);
+            if (!moduleSourceFile) {
+                return ts.emptyArray;
+            }
+            var cache = (_a = host.getModuleSpecifierCache) === null || _a === void 0 ? void 0 : _a.call(host);
+            var cached = cache === null || cache === void 0 ? void 0 : cache.get(importingSourceFile.path, moduleSourceFile.path, userPreferences);
+            return [cached === null || cached === void 0 ? void 0 : cached.moduleSpecifiers, moduleSourceFile, cached === null || cached === void 0 ? void 0 : cached.modulePaths, cache];
+        }
         /** Returns an import for each symlink and for the realpath. */
         function getModuleSpecifiers(moduleSymbol, checker, compilerOptions, importingSourceFile, host, userPreferences) {
+            return getModuleSpecifiersWithCacheInfo(moduleSymbol, checker, compilerOptions, importingSourceFile, host, userPreferences).moduleSpecifiers;
+        }
+        moduleSpecifiers_1.getModuleSpecifiers = getModuleSpecifiers;
+        function getModuleSpecifiersWithCacheInfo(moduleSymbol, checker, compilerOptions, importingSourceFile, host, userPreferences) {
+            var computedWithoutCache = false;
             var ambient = tryGetModuleNameFromAmbientModule(moduleSymbol, checker);
             if (ambient)
-                return [ambient];
+                return { moduleSpecifiers: [ambient], computedWithoutCache: computedWithoutCache };
+            // eslint-disable-next-line prefer-const
+            var _a = tryGetModuleSpecifiersFromCacheWorker(moduleSymbol, importingSourceFile, host, userPreferences), specifiers = _a[0], moduleSourceFile = _a[1], modulePaths = _a[2], cache = _a[3];
+            if (specifiers)
+                return { moduleSpecifiers: specifiers, computedWithoutCache: computedWithoutCache };
+            if (!moduleSourceFile)
+                return { moduleSpecifiers: ts.emptyArray, computedWithoutCache: computedWithoutCache };
+            computedWithoutCache = true;
+            modulePaths || (modulePaths = getAllModulePathsWorker(importingSourceFile.path, moduleSourceFile.originalFileName, host));
+            var result = computeModuleSpecifiers(modulePaths, compilerOptions, importingSourceFile, host, userPreferences);
+            cache === null || cache === void 0 ? void 0 : cache.set(importingSourceFile.path, moduleSourceFile.path, userPreferences, modulePaths, result);
+            return { moduleSpecifiers: result, computedWithoutCache: computedWithoutCache };
+        }
+        moduleSpecifiers_1.getModuleSpecifiersWithCacheInfo = getModuleSpecifiersWithCacheInfo;
+        function computeModuleSpecifiers(modulePaths, compilerOptions, importingSourceFile, host, userPreferences) {
             var info = getInfo(importingSourceFile.path, host);
-            var moduleSourceFile = ts.getSourceFileOfNode(moduleSymbol.valueDeclaration || ts.getNonAugmentationDeclaration(moduleSymbol));
-            if (!moduleSourceFile) {
-                return [];
-            }
-            var modulePaths = getAllModulePaths(importingSourceFile.path, moduleSourceFile.originalFileName, host);
             var preferences = getPreferences(userPreferences, compilerOptions, importingSourceFile);
             var existingSpecifier = ts.forEach(modulePaths, function (modulePath) { return ts.forEach(host.getFileIncludeReasons().get(ts.toPath(modulePath.path, host.getCurrentDirectory(), info.getCanonicalFileName)), function (reason) {
                 if (reason.kind !== ts.FileIncludeKind.Import || reason.file !== importingSourceFile.path)
@@ -114368,8 +116747,10 @@
                     specifier :
                     undefined;
             }); });
-            if (existingSpecifier)
-                return [existingSpecifier];
+            if (existingSpecifier) {
+                var moduleSpecifiers_2 = [existingSpecifier];
+                return moduleSpecifiers_2;
+            }
             var importedFileIsInNodeModules = ts.some(modulePaths, function (p) { return p.isInNodeModules; });
             // Module specifier priority:
             //   1. "Bare package specifiers" (e.g. "@foo/bar") resulting from a path through node_modules to a package.json's "types" entry
@@ -114411,7 +116792,6 @@
                 (nodeModulesSpecifiers === null || nodeModulesSpecifiers === void 0 ? void 0 : nodeModulesSpecifiers.length) ? nodeModulesSpecifiers :
                     ts.Debug.checkDefined(relativeSpecifiers);
         }
-        moduleSpecifiers.getModuleSpecifiers = getModuleSpecifiers;
         // importingSourceFileName is separate because getEditsForFileRename may need to specify an updated path
         function getInfo(importingSourceFileName, host) {
             var getCanonicalFileName = ts.createGetCanonicalFileName(host.useCaseSensitiveFileNames ? host.useCaseSensitiveFileNames() : true);
@@ -114488,7 +116868,7 @@
             }
             return count;
         }
-        moduleSpecifiers.countPathComponents = countPathComponents;
+        moduleSpecifiers_1.countPathComponents = countPathComponents;
         function usesJsExtensionOnImports(_a) {
             var imports = _a.imports;
             return ts.firstDefined(imports, function (_a) {
@@ -114508,25 +116888,23 @@
             });
         }
         function forEachFileNameOfModule(importingFileName, importedFileName, host, preferSymlinks, cb) {
+            var _a;
             var getCanonicalFileName = ts.hostGetCanonicalFileName(host);
             var cwd = host.getCurrentDirectory();
             var referenceRedirect = host.isSourceOfProjectReferenceRedirect(importedFileName) ? host.getProjectReferenceRedirect(importedFileName) : undefined;
             var importedPath = ts.toPath(importedFileName, cwd, getCanonicalFileName);
             var redirects = host.redirectTargetsMap.get(importedPath) || ts.emptyArray;
-            var importedFileNames = __spreadArray(__spreadArray(__spreadArray([], (referenceRedirect ? [referenceRedirect] : ts.emptyArray)), [importedFileName]), redirects);
+            var importedFileNames = __spreadArray(__spreadArray(__spreadArray([], (referenceRedirect ? [referenceRedirect] : ts.emptyArray), true), [importedFileName], false), redirects, true);
             var targets = importedFileNames.map(function (f) { return ts.getNormalizedAbsolutePath(f, cwd); });
             var shouldFilterIgnoredPaths = !ts.every(targets, ts.containsIgnoredPath);
             if (!preferSymlinks) {
                 // Symlinks inside ignored paths are already filtered out of the symlink cache,
                 // so we only need to remove them from the realpath filenames.
-                var result_16 = ts.forEach(targets, function (p) { return !(shouldFilterIgnoredPaths && ts.containsIgnoredPath(p)) && cb(p, referenceRedirect === p); });
-                if (result_16)
-                    return result_16;
+                var result_15 = ts.forEach(targets, function (p) { return !(shouldFilterIgnoredPaths && ts.containsIgnoredPath(p)) && cb(p, referenceRedirect === p); });
+                if (result_15)
+                    return result_15;
             }
-            var links = host.getSymlinkCache
-                ? host.getSymlinkCache()
-                : ts.discoverProbableSymlinks(host.getSourceFiles(), getCanonicalFileName, cwd);
-            var symlinkedDirectories = links.getSymlinkedDirectoriesByRealpath();
+            var symlinkedDirectories = (_a = host.getSymlinkCache) === null || _a === void 0 ? void 0 : _a.call(host).getSymlinkedDirectoriesByRealpath();
             var fullImportedFileName = ts.getNormalizedAbsolutePath(importedFileName, cwd);
             var result = symlinkedDirectories && ts.forEachAncestorDirectory(ts.getDirectoryPath(fullImportedFileName), function (realPathDirectory) {
                 var symlinkDirectories = symlinkedDirectories.get(ts.ensureTrailingDirectorySeparator(ts.toPath(realPathDirectory, cwd, getCanonicalFileName)));
@@ -114544,10 +116922,10 @@
                     for (var _i = 0, symlinkDirectories_1 = symlinkDirectories; _i < symlinkDirectories_1.length; _i++) {
                         var symlinkDirectory = symlinkDirectories_1[_i];
                         var option = ts.resolvePath(symlinkDirectory, relative);
-                        var result_17 = cb(option, target === referenceRedirect);
+                        var result_16 = cb(option, target === referenceRedirect);
                         shouldFilterIgnoredPaths = true; // We found a non-ignored path in symlinks, so we can reject ignored-path realpaths
-                        if (result_17)
-                            return result_17;
+                        if (result_16)
+                            return result_16;
                     }
                 });
             });
@@ -114555,20 +116933,28 @@
                 ? ts.forEach(targets, function (p) { return shouldFilterIgnoredPaths && ts.containsIgnoredPath(p) ? undefined : cb(p, p === referenceRedirect); })
                 : undefined);
         }
-        moduleSpecifiers.forEachFileNameOfModule = forEachFileNameOfModule;
+        moduleSpecifiers_1.forEachFileNameOfModule = forEachFileNameOfModule;
         /**
          * Looks for existing imports that use symlinks to this module.
          * Symlinks will be returned first so they are preferred over the real path.
          */
-        function getAllModulePaths(importingFileName, importedFileName, host) {
+        function getAllModulePaths(importingFilePath, importedFileName, host, preferences, importedFilePath) {
             var _a;
+            if (importedFilePath === void 0) { importedFilePath = ts.toPath(importedFileName, host.getCurrentDirectory(), ts.hostGetCanonicalFileName(host)); }
             var cache = (_a = host.getModuleSpecifierCache) === null || _a === void 0 ? void 0 : _a.call(host);
-            var getCanonicalFileName = ts.hostGetCanonicalFileName(host);
             if (cache) {
-                var cached = cache.get(importingFileName, ts.toPath(importedFileName, host.getCurrentDirectory(), getCanonicalFileName));
-                if (typeof cached === "object")
-                    return cached;
+                var cached = cache.get(importingFilePath, importedFilePath, preferences);
+                if (cached === null || cached === void 0 ? void 0 : cached.modulePaths)
+                    return cached.modulePaths;
             }
+            var modulePaths = getAllModulePathsWorker(importingFilePath, importedFileName, host);
+            if (cache) {
+                cache.setModulePaths(importingFilePath, importedFilePath, preferences, modulePaths);
+            }
+            return modulePaths;
+        }
+        function getAllModulePathsWorker(importingFileName, importedFileName, host) {
+            var getCanonicalFileName = ts.hostGetCanonicalFileName(host);
             var allFileNames = new ts.Map();
             var importedFileFromNodeModules = false;
             forEachFileNameOfModule(importingFileName, importedFileName, host, 
@@ -114580,7 +116966,7 @@
             });
             // Sort by paths closest to importing file Name directory
             var sortedPaths = [];
-            var _loop_26 = function (directory) {
+            var _loop_31 = function (directory) {
                 var directoryStart = ts.ensureTrailingDirectorySeparator(directory);
                 var pathsInDirectory;
                 allFileNames.forEach(function (_a, fileName) {
@@ -114604,7 +116990,7 @@
             };
             var out_directory_1;
             for (var directory = ts.getDirectoryPath(importingFileName); allFileNames.size !== 0;) {
-                var state_9 = _loop_26(directory);
+                var state_9 = _loop_31(directory);
                 directory = out_directory_1;
                 if (state_9 === "break")
                     break;
@@ -114615,9 +117001,6 @@
                     remainingPaths.sort(comparePathsByRedirectAndNumberOfDirectorySeparators);
                 sortedPaths.push.apply(sortedPaths, remainingPaths);
             }
-            if (cache) {
-                cache.set(importingFileName, ts.toPath(importedFileName, host.getCurrentDirectory(), getCanonicalFileName), sortedPaths);
-            }
             return sortedPaths;
         }
         function tryGetModuleNameFromAmbientModule(moduleSymbol, checker) {
@@ -114873,7 +117256,11 @@
             }
         }
         function getJSExtensionForFile(fileName, options) {
-            var ext = ts.extensionFromPath(fileName);
+            var _a;
+            return (_a = tryGetJSExtensionForFile(fileName, options)) !== null && _a !== void 0 ? _a : ts.Debug.fail("Extension " + ts.extensionFromPath(fileName) + " is unsupported:: FileName:: " + fileName);
+        }
+        function tryGetJSExtensionForFile(fileName, options) {
+            var ext = ts.tryGetExtensionFromPath(fileName);
             switch (ext) {
                 case ".ts" /* Ts */:
                 case ".d.ts" /* Dts */:
@@ -114884,12 +117271,11 @@
                 case ".jsx" /* Jsx */:
                 case ".json" /* Json */:
                     return ext;
-                case ".tsbuildinfo" /* TsBuildInfo */:
-                    return ts.Debug.fail("Extension " + ".tsbuildinfo" /* TsBuildInfo */ + " is unsupported:: FileName:: " + fileName);
                 default:
-                    return ts.Debug.assertNever(ext);
+                    return undefined;
             }
         }
+        moduleSpecifiers_1.tryGetJSExtensionForFile = tryGetJSExtensionForFile;
         function getRelativePathIfInDirectory(path, directoryPath, getCanonicalFileName) {
             var relativePath = ts.getRelativePathToDirectoryOrUrl(directoryPath, path, directoryPath, getCanonicalFileName, /*isAbsolutePathAnUrl*/ false);
             return ts.isRootedDiskPath(relativePath) ? undefined : relativePath;
@@ -114906,12 +117292,12 @@
         getCurrentDirectory: function () { return ts.sys.getCurrentDirectory(); },
         getNewLine: function () { return ts.sys.newLine; },
         getCanonicalFileName: ts.createGetCanonicalFileName(ts.sys.useCaseSensitiveFileNames)
-    } : undefined; // TODO: GH#18217
+    } : undefined;
     /**
      * Create a function that reports error by writing to the system and handles the formating of the diagnostic
      */
     function createDiagnosticReporter(system, pretty) {
-        var host = system === ts.sys ? sysFormatDiagnosticsHost : {
+        var host = system === ts.sys && sysFormatDiagnosticsHost ? sysFormatDiagnosticsHost : {
             getCurrentDirectory: function () { return system.getCurrentDirectory(); },
             getNewLine: function () { return system.newLine; },
             getCanonicalFileName: ts.createGetCanonicalFileName(system.useCaseSensitiveFileNames),
@@ -115257,6 +117643,7 @@
         ConfigFileOfReferencedProject: "Config file of referened project",
         ExtendedConfigOfReferencedProject: "Extended config file of referenced project",
         WildcardDirectoryOfReferencedProject: "Wild card directory of referenced project",
+        PackageJson: "package.json file",
     };
     function createWatchFactory(host, options) {
         var watchLogLevel = host.trace ? options.extendedDiagnostics ? ts.WatchLogLevel.Verbose : options.diagnostics ? ts.WatchLogLevel.TriggerOnly : ts.WatchLogLevel.None : ts.WatchLogLevel.None;
@@ -115331,7 +117718,7 @@
             for (var _i = 0; _i < arguments.length; _i++) {
                 args[_i] = arguments[_i];
             }
-            var result = originalGetSourceFile.call.apply(originalGetSourceFile, __spreadArray([compilerHost], args));
+            var result = originalGetSourceFile.call.apply(originalGetSourceFile, __spreadArray([compilerHost], args, false));
             if (result) {
                 result.version = computeHash(result.text);
             }
@@ -115495,12 +117882,14 @@
         var builderProgram;
         var reloadLevel; // level to indicate if the program needs to be reloaded from config file/just filenames etc
         var missingFilesMap; // Map of file watchers for the missing files
+        var packageJsonMap; // map of watchers for package json files used in module resolution
         var watchedWildcardDirectories; // map of watchers for the wild card directories in the config file
         var timerToUpdateProgram; // timer callback to recompile the program
         var timerToInvalidateFailedLookupResolutions; // timer callback to invalidate resolutions for changes in failed lookup locations
         var parsedConfigs; // Parsed commandline and watching cached for referenced projects
         var sharedExtendedConfigFileWatchers; // Map of file watchers for extended files, shared between different referenced projects
         var extendedConfigCache = host.extendedConfigCache; // Cache for extended config evaluation
+        var changesAffectResolution = false; // Flag for indicating non-config changes affect module resolution
         var sourceFilesCache = new ts.Map(); // Cache that stores the source file and version info
         var missingFilePathsRequestedForRelease; // These paths are held temporarily so that we can remove the entry from source file cache if the file is not tracked by missing files
         var hasChangedCompilerOptions = false; // True if the compiler options have changed between compilations
@@ -115544,7 +117933,7 @@
             for (var _i = 1; _i < arguments.length; _i++) {
                 args[_i - 1] = arguments[_i];
             }
-            return getVersionedSourceFileByPath.apply(void 0, __spreadArray([fileName, toPath(fileName)], args));
+            return getVersionedSourceFileByPath.apply(void 0, __spreadArray([fileName, toPath(fileName)], args, false));
         };
         compilerHost.getSourceFileByPath = getVersionedSourceFileByPath;
         compilerHost.getNewLine = function () { return newLine; };
@@ -115651,12 +118040,12 @@
             var program = getCurrentBuilderProgram();
             if (hasChangedCompilerOptions) {
                 newLine = updateNewLine();
-                if (program && ts.changesAffectModuleResolution(program.getCompilerOptions(), compilerOptions)) {
+                if (program && (changesAffectResolution || ts.changesAffectModuleResolution(program.getCompilerOptions(), compilerOptions))) {
                     resolutionCache.clear();
                 }
             }
             // All resolutions are invalid if user provided resolutions
-            var hasInvalidatedResolution = resolutionCache.createHasInvalidatedResolution(userProvidedResolution);
+            var hasInvalidatedResolution = resolutionCache.createHasInvalidatedResolution(userProvidedResolution || changesAffectResolution);
             if (ts.isProgramUptoDate(getCurrentProgram(), rootFileNames, compilerOptions, getSourceVersion, fileExists, hasInvalidatedResolution, hasChangedAutomaticTypeDirectiveNames, getParsedCommandLine, projectReferences)) {
                 if (hasChangedConfigFileParsingErrors) {
                     builderProgram = createProgram(/*rootNames*/ undefined, /*options*/ undefined, compilerHost, builderProgram, configFileParsingDiagnostics, projectReferences);
@@ -115666,6 +118055,7 @@
             else {
                 createNewProgram(hasInvalidatedResolution);
             }
+            changesAffectResolution = false; // reset for next sync
             if (host.afterProgramCreate && program !== builderProgram) {
                 host.afterProgramCreate(builderProgram);
             }
@@ -115685,9 +118075,15 @@
             compilerHost.hasInvalidatedResolution = hasInvalidatedResolution;
             compilerHost.hasChangedAutomaticTypeDirectiveNames = hasChangedAutomaticTypeDirectiveNames;
             builderProgram = createProgram(rootFileNames, compilerOptions, compilerHost, builderProgram, configFileParsingDiagnostics, projectReferences);
+            // map package json cache entries to their realpaths so we don't try to watch across symlinks
+            var packageCacheEntries = ts.map(resolutionCache.getModuleResolutionCache().getPackageJsonInfoCache().entries(), function (_a) {
+                var path = _a[0], data = _a[1];
+                return [compilerHost.realpath ? toPath(compilerHost.realpath(path)) : path, data];
+            });
             resolutionCache.finishCachingPerDirectoryResolution();
             // Update watches
             ts.updateMissingFilePathsWatch(builderProgram.getProgram(), missingFilesMap || (missingFilesMap = new ts.Map()), watchMissingFilePath);
+            ts.updatePackageJsonWatch(packageCacheEntries, packageJsonMap || (packageJsonMap = new ts.Map()), watchPackageJsonLookupPath);
             if (needsUpdateInTypeRootWatch) {
                 resolutionCache.updateTypeRootsWatch();
             }
@@ -115989,6 +118385,21 @@
                 ts.noopFileWatcher :
                 watchFilePath(missingFilePath, missingFilePath, onMissingFileChange, ts.PollingInterval.Medium, watchOptions, ts.WatchType.MissingFile);
         }
+        function watchPackageJsonLookupPath(packageJsonPath) {
+            // If the package.json is pulled into the compilation itself (eg, via json imports), don't add a second watcher here
+            return sourceFilesCache.has(packageJsonPath) ?
+                ts.noopFileWatcher :
+                watchFilePath(packageJsonPath, packageJsonPath, onPackageJsonChange, ts.PollingInterval.High, watchOptions, ts.WatchType.PackageJson);
+        }
+        function onPackageJsonChange(fileName, eventKind, path) {
+            updateCachedSystemWithFile(fileName, path, eventKind);
+            // package.json changes invalidate module resolution and can change the set of loaded files
+            // so if we witness a change to one, we have to do a full reload
+            reloadLevel = ts.ConfigFileProgramReloadLevel.Full;
+            changesAffectResolution = true;
+            // Update the program
+            scheduleProgramUpdate();
+        }
         function onMissingFileChange(fileName, eventKind, missingFilePath) {
             updateCachedSystemWithFile(fileName, missingFilePath, eventKind);
             if (eventKind === ts.FileWatcherEventKind.Created && missingFilesMap.has(missingFilePath)) {
@@ -116332,6 +118743,8 @@
             allWatchedInputFiles: new ts.Map(),
             allWatchedConfigFiles: new ts.Map(),
             allWatchedExtendedConfigFiles: new ts.Map(),
+            allWatchedPackageJsonFiles: new ts.Map(),
+            lastCachedPackageJsonLookups: new ts.Map(),
             timerToBuildInvalidatedProject: undefined,
             reportFileChangeDetected: false,
             watchFile: watchFile,
@@ -116455,6 +118868,7 @@
             });
             ts.mutateMapSkippingNewValues(state.allWatchedWildcardDirectories, currentProjects, { onDeleteValue: function (existingMap) { return existingMap.forEach(ts.closeFileWatcherOf); } });
             ts.mutateMapSkippingNewValues(state.allWatchedInputFiles, currentProjects, { onDeleteValue: function (existingMap) { return existingMap.forEach(ts.closeFileWatcher); } });
+            ts.mutateMapSkippingNewValues(state.allWatchedPackageJsonFiles, currentProjects, { onDeleteValue: function (existingMap) { return existingMap.forEach(ts.closeFileWatcher); } });
         }
         return state.buildOrder = buildOrder;
     }
@@ -116487,7 +118901,7 @@
             for (var _i = 0; _i < arguments.length; _i++) {
                 args[_i] = arguments[_i];
             }
-            return originalGetSourceFile.call.apply(originalGetSourceFile, __spreadArray([compilerHost], args));
+            return originalGetSourceFile.call.apply(originalGetSourceFile, __spreadArray([compilerHost], args, false));
         }), originalReadFile = _a.originalReadFile, originalFileExists = _a.originalFileExists, originalDirectoryExists = _a.originalDirectoryExists, originalCreateDirectory = _a.originalCreateDirectory, originalWriteFile = _a.originalWriteFile, getSourceFileWithCache = _a.getSourceFileWithCache, readFileWithCache = _a.readFileWithCache;
         state.readFileWithCache = readFileWithCache;
         compilerHost.getSourceFile = getSourceFileWithCache;
@@ -116705,6 +119119,10 @@
             (_b = state.typeReferenceDirectiveResolutionCache) === null || _b === void 0 ? void 0 : _b.update(config.options);
             // Create program
             program = host.createProgram(config.fileNames, config.options, compilerHost, getOldProgram(state, projectPath, config), ts.getConfigFileParsingDiagnostics(config), config.projectReferences);
+            state.lastCachedPackageJsonLookups.set(projectPath, state.moduleResolutionCache && ts.map(state.moduleResolutionCache.getPackageJsonInfoCache().entries(), function (_a) {
+                var path = _a[0], data = _a[1];
+                return [state.host.realpath ? toPath(state, state.host.realpath(path)) : path, data];
+            }));
             if (state.watch) {
                 state.builderPrograms.set(projectPath, program);
             }
@@ -116721,7 +119139,7 @@
         }
         function getSyntaxDiagnostics(cancellationToken) {
             ts.Debug.assertIsDefined(program);
-            handleDiagnostics(__spreadArray(__spreadArray(__spreadArray(__spreadArray([], program.getConfigFileParsingDiagnostics()), program.getOptionsDiagnostics(cancellationToken)), program.getGlobalDiagnostics(cancellationToken)), program.getSyntacticDiagnostics(/*sourceFile*/ undefined, cancellationToken)), BuildResultFlags.SyntaxErrors, "Syntactic");
+            handleDiagnostics(__spreadArray(__spreadArray(__spreadArray(__spreadArray([], program.getConfigFileParsingDiagnostics(), true), program.getOptionsDiagnostics(cancellationToken), true), program.getGlobalDiagnostics(cancellationToken), true), program.getSyntacticDiagnostics(/*sourceFile*/ undefined, cancellationToken), true), BuildResultFlags.SyntaxErrors, "Syntactic");
         }
         function getSemanticDiagnostics(cancellationToken) {
             handleDiagnostics(ts.Debug.checkDefined(program).getSemanticDiagnostics(/*sourceFile*/ undefined, cancellationToken), BuildResultFlags.TypeErrors, "Semantic");
@@ -116785,7 +119203,7 @@
             var emitResult = program.emitBuildInfo(writeFileCallback, cancellationToken);
             if (emitResult.diagnostics.length) {
                 reportErrors(state, emitResult.diagnostics);
-                state.diagnostics.set(projectPath, __spreadArray(__spreadArray([], state.diagnostics.get(projectPath)), emitResult.diagnostics));
+                state.diagnostics.set(projectPath, __spreadArray(__spreadArray([], state.diagnostics.get(projectPath), true), emitResult.diagnostics, true));
                 buildResult = BuildResultFlags.EmitErrors & buildResult;
             }
             if (emitResult.emittedFiles && state.write) {
@@ -116936,12 +119354,14 @@
                 watchExtendedConfigFiles(state, projectPath, config);
                 watchWildCardDirectories(state, project, projectPath, config);
                 watchInputFiles(state, project, projectPath, config);
+                watchPackageJsonFiles(state, project, projectPath, config);
             }
             else if (reloadLevel === ts.ConfigFileProgramReloadLevel.Partial) {
                 // Update file names
                 config.fileNames = ts.getFileNamesFromConfigSpecs(config.options.configFile.configFileSpecs, ts.getDirectoryPath(project), config.options, state.parseConfigFileHost);
                 ts.updateErrorForNoInputFiles(config.fileNames, project, config.options.configFile.configFileSpecs, config.errors, ts.canJsonReportNoInputFiles(config.raw));
                 watchInputFiles(state, project, projectPath, config);
+                watchPackageJsonFiles(state, project, projectPath, config);
             }
             var status = getUpToDateStatus(state, config, projectPath);
             verboseReportProjectStatus(state, project, status);
@@ -117184,6 +119604,13 @@
             var extendedConfigStatus = ts.forEach(project.options.configFile.extendedSourceFiles || ts.emptyArray, function (configFile) { return checkConfigFileUpToDateStatus(state, configFile, oldestOutputFileTime, oldestOutputFileName); });
             if (extendedConfigStatus)
                 return extendedConfigStatus;
+            // Check package file time
+            var dependentPackageFileStatus = ts.forEach(state.lastCachedPackageJsonLookups.get(resolvedPath) || ts.emptyArray, function (_a) {
+                var path = _a[0];
+                return checkConfigFileUpToDateStatus(state, path, oldestOutputFileTime, oldestOutputFileName);
+            });
+            if (dependentPackageFileStatus)
+                return dependentPackageFileStatus;
         }
         if (!force && !state.buildInfoChecked.has(resolvedPath)) {
             state.buildInfoChecked.set(resolvedPath, true);
@@ -117230,6 +119657,8 @@
         return actual;
     }
     function updateOutputTimestampsWorker(state, proj, priorNewestUpdateTime, verboseMessage, skipOutputs) {
+        if (proj.options.noEmit)
+            return priorNewestUpdateTime;
         var host = state.host;
         var outputs = ts.getAllProjectOutputs(proj, !host.useCaseSensitiveFileNames());
         if (!skipOutputs || outputs.length !== skipOutputs.size) {
@@ -117493,6 +119922,14 @@
             onDeleteValue: ts.closeFileWatcher,
         });
     }
+    function watchPackageJsonFiles(state, resolved, resolvedPath, parsed) {
+        if (!state.watch || !state.lastCachedPackageJsonLookups)
+            return;
+        ts.mutateMap(getOrCreateValueMapFromConfigFileMap(state.allWatchedPackageJsonFiles, resolvedPath), new ts.Map(state.lastCachedPackageJsonLookups.get(resolvedPath)), {
+            createNewValue: function (path, _input) { return state.watchFile(path, function () { return invalidateProjectAndScheduleBuilds(state, resolvedPath, ts.ConfigFileProgramReloadLevel.Full); }, ts.PollingInterval.High, parsed === null || parsed === void 0 ? void 0 : parsed.watchOptions, ts.WatchType.PackageJson, resolved); },
+            onDeleteValue: ts.closeFileWatcher,
+        });
+    }
     function startWatching(state, buildOrder) {
         if (!state.watchAllProjectsPending)
             return;
@@ -117509,6 +119946,8 @@
                 watchWildCardDirectories(state, resolved, resolvedPath, cfg);
                 // Watch input files
                 watchInputFiles(state, resolved, resolvedPath, cfg);
+                // Watch package json files
+                watchPackageJsonFiles(state, resolved, resolvedPath, cfg);
             }
         }
     }
@@ -117517,6 +119956,7 @@
         ts.clearMap(state.allWatchedExtendedConfigFiles, ts.closeFileWatcherOf);
         ts.clearMap(state.allWatchedWildcardDirectories, function (watchedWildcardDirectories) { return ts.clearMap(watchedWildcardDirectories, ts.closeFileWatcherOf); });
         ts.clearMap(state.allWatchedInputFiles, function (watchedWildcardDirectories) { return ts.clearMap(watchedWildcardDirectories, ts.closeFileWatcher); });
+        ts.clearMap(state.allWatchedPackageJsonFiles, function (watchedPacageJsonFiles) { return ts.clearMap(watchedPacageJsonFiles, ts.closeFileWatcher); });
     }
     function createSolutionBuilderWorker(watch, hostOrHostWithWatch, rootNames, options, baseWatchOptions) {
         var state = createSolutionBuilderState(watch, hostOrHostWithWatch, rootNames, options, baseWatchOptions);
@@ -117549,7 +119989,7 @@
         for (var _i = 2; _i < arguments.length; _i++) {
             args[_i - 2] = arguments[_i];
         }
-        state.host.reportSolutionBuilderStatus(ts.createCompilerDiagnostic.apply(void 0, __spreadArray([message], args)));
+        state.host.reportSolutionBuilderStatus(ts.createCompilerDiagnostic.apply(void 0, __spreadArray([message], args, false)));
     }
     function reportWatchStatus(state, message) {
         var _a, _b;
@@ -117557,7 +119997,7 @@
         for (var _i = 2; _i < arguments.length; _i++) {
             args[_i - 2] = arguments[_i];
         }
-        (_b = (_a = state.hostWithWatch).onWatchStatusChange) === null || _b === void 0 ? void 0 : _b.call(_a, ts.createCompilerDiagnostic.apply(void 0, __spreadArray([message], args)), state.host.getNewLine(), state.baseCompilerOptions);
+        (_b = (_a = state.hostWithWatch).onWatchStatusChange) === null || _b === void 0 ? void 0 : _b.call(_a, ts.createCompilerDiagnostic.apply(void 0, __spreadArray([message], args, false)), state.host.getNewLine(), state.baseCompilerOptions);
     }
     function reportErrors(_a, errors) {
         var host = _a.host;
@@ -117719,6 +120159,21 @@
         SemanticClassificationFormat["Original"] = "original";
         SemanticClassificationFormat["TwentyTwenty"] = "2020";
     })(SemanticClassificationFormat = ts.SemanticClassificationFormat || (ts.SemanticClassificationFormat = {}));
+    var CompletionTriggerKind;
+    (function (CompletionTriggerKind) {
+        /** Completion was triggered by typing an identifier, manual invocation (e.g Ctrl+Space) or via API. */
+        CompletionTriggerKind[CompletionTriggerKind["Invoked"] = 1] = "Invoked";
+        /** Completion was triggered by a trigger character. */
+        CompletionTriggerKind[CompletionTriggerKind["TriggerCharacter"] = 2] = "TriggerCharacter";
+        /** Completion was re-triggered as the current completion list is incomplete. */
+        CompletionTriggerKind[CompletionTriggerKind["TriggerForIncompleteCompletions"] = 3] = "TriggerForIncompleteCompletions";
+    })(CompletionTriggerKind = ts.CompletionTriggerKind || (ts.CompletionTriggerKind = {}));
+    var InlayHintKind;
+    (function (InlayHintKind) {
+        InlayHintKind["Type"] = "Type";
+        InlayHintKind["Parameter"] = "Parameter";
+        InlayHintKind["Enum"] = "Enum";
+    })(InlayHintKind = ts.InlayHintKind || (ts.InlayHintKind = {}));
     var HighlightSpanKind;
     (function (HighlightSpanKind) {
         HighlightSpanKind["none"] = "none";
@@ -117879,7 +120334,10 @@
          * interface Y { foo:number; }
          */
         ScriptElementKind["memberVariableElement"] = "property";
-        /** class X { constructor() { } } */
+        /**
+         * class X { constructor() { } }
+         * class X { static { } }
+         */
         ScriptElementKind["constructorImplementationElement"] = "constructor";
         /** interface Y { ():number; } */
         ScriptElementKind["callSignatureElement"] = "call";
@@ -118001,37 +120459,37 @@
     })(SemanticMeaning = ts.SemanticMeaning || (ts.SemanticMeaning = {}));
     function getMeaningFromDeclaration(node) {
         switch (node.kind) {
-            case 250 /* VariableDeclaration */:
+            case 252 /* VariableDeclaration */:
                 return ts.isInJSFile(node) && ts.getJSDocEnumTag(node) ? 7 /* All */ : 1 /* Value */;
-            case 161 /* Parameter */:
-            case 199 /* BindingElement */:
-            case 164 /* PropertyDeclaration */:
-            case 163 /* PropertySignature */:
-            case 289 /* PropertyAssignment */:
-            case 290 /* ShorthandPropertyAssignment */:
-            case 166 /* MethodDeclaration */:
-            case 165 /* MethodSignature */:
-            case 167 /* Constructor */:
-            case 168 /* GetAccessor */:
-            case 169 /* SetAccessor */:
-            case 252 /* FunctionDeclaration */:
-            case 209 /* FunctionExpression */:
-            case 210 /* ArrowFunction */:
-            case 288 /* CatchClause */:
-            case 281 /* JsxAttribute */:
+            case 162 /* Parameter */:
+            case 201 /* BindingElement */:
+            case 165 /* PropertyDeclaration */:
+            case 164 /* PropertySignature */:
+            case 291 /* PropertyAssignment */:
+            case 292 /* ShorthandPropertyAssignment */:
+            case 167 /* MethodDeclaration */:
+            case 166 /* MethodSignature */:
+            case 169 /* Constructor */:
+            case 170 /* GetAccessor */:
+            case 171 /* SetAccessor */:
+            case 254 /* FunctionDeclaration */:
+            case 211 /* FunctionExpression */:
+            case 212 /* ArrowFunction */:
+            case 290 /* CatchClause */:
+            case 283 /* JsxAttribute */:
                 return 1 /* Value */;
-            case 160 /* TypeParameter */:
-            case 254 /* InterfaceDeclaration */:
-            case 255 /* TypeAliasDeclaration */:
-            case 178 /* TypeLiteral */:
+            case 161 /* TypeParameter */:
+            case 256 /* InterfaceDeclaration */:
+            case 257 /* TypeAliasDeclaration */:
+            case 180 /* TypeLiteral */:
                 return 2 /* Type */;
-            case 335 /* JSDocTypedefTag */:
+            case 340 /* JSDocTypedefTag */:
                 // If it has no name node, it shares the name with the value declaration below it.
                 return node.name === undefined ? 1 /* Value */ | 2 /* Type */ : 2 /* Type */;
-            case 292 /* EnumMember */:
-            case 253 /* ClassDeclaration */:
+            case 294 /* EnumMember */:
+            case 255 /* ClassDeclaration */:
                 return 1 /* Value */ | 2 /* Type */;
-            case 257 /* ModuleDeclaration */:
+            case 259 /* ModuleDeclaration */:
                 if (ts.isAmbientModule(node)) {
                     return 4 /* Namespace */ | 1 /* Value */;
                 }
@@ -118041,16 +120499,16 @@
                 else {
                     return 4 /* Namespace */;
                 }
-            case 256 /* EnumDeclaration */:
-            case 265 /* NamedImports */:
-            case 266 /* ImportSpecifier */:
-            case 261 /* ImportEqualsDeclaration */:
-            case 262 /* ImportDeclaration */:
-            case 267 /* ExportAssignment */:
-            case 268 /* ExportDeclaration */:
+            case 258 /* EnumDeclaration */:
+            case 267 /* NamedImports */:
+            case 268 /* ImportSpecifier */:
+            case 263 /* ImportEqualsDeclaration */:
+            case 264 /* ImportDeclaration */:
+            case 269 /* ExportAssignment */:
+            case 270 /* ExportDeclaration */:
                 return 7 /* All */;
             // An external module can be a Value
-            case 298 /* SourceFile */:
+            case 300 /* SourceFile */:
                 return 4 /* Namespace */ | 1 /* Value */;
         }
         return 7 /* All */;
@@ -118058,23 +120516,32 @@
     ts.getMeaningFromDeclaration = getMeaningFromDeclaration;
     function getMeaningFromLocation(node) {
         node = getAdjustedReferenceLocation(node);
-        if (node.kind === 298 /* SourceFile */) {
+        var parent = node.parent;
+        if (node.kind === 300 /* SourceFile */) {
             return 1 /* Value */;
         }
-        else if (node.parent.kind === 267 /* ExportAssignment */
-            || node.parent.kind === 273 /* ExternalModuleReference */
-            || node.parent.kind === 266 /* ImportSpecifier */
-            || node.parent.kind === 263 /* ImportClause */
-            || ts.isImportEqualsDeclaration(node.parent) && node === node.parent.name) {
+        else if (ts.isExportAssignment(parent)
+            || ts.isExportSpecifier(parent)
+            || ts.isExternalModuleReference(parent)
+            || ts.isImportSpecifier(parent)
+            || ts.isImportClause(parent)
+            || ts.isImportEqualsDeclaration(parent) && node === parent.name) {
+            var decl = parent;
+            while (decl) {
+                if (ts.isImportEqualsDeclaration(decl) || ts.isImportClause(decl) || ts.isExportDeclaration(decl)) {
+                    return decl.isTypeOnly ? 2 /* Type */ : 7 /* All */;
+                }
+                decl = decl.parent;
+            }
             return 7 /* All */;
         }
         else if (isInRightSideOfInternalImportEqualsDeclaration(node)) {
             return getMeaningFromRightHandSideOfImportEquals(node);
         }
         else if (ts.isDeclarationName(node)) {
-            return getMeaningFromDeclaration(node.parent);
+            return getMeaningFromDeclaration(parent);
         }
-        else if (ts.isEntityName(node) && (ts.isJSDocNameReference(node.parent) || ts.isJSDocLink(node.parent))) {
+        else if (ts.isEntityName(node) && ts.findAncestor(node, ts.or(ts.isJSDocNameReference, ts.isJSDocLinkLike, ts.isJSDocMemberName))) {
             return 7 /* All */;
         }
         else if (isTypeReference(node)) {
@@ -118083,11 +120550,11 @@
         else if (isNamespaceReference(node)) {
             return 4 /* Namespace */;
         }
-        else if (ts.isTypeParameterDeclaration(node.parent)) {
-            ts.Debug.assert(ts.isJSDocTemplateTag(node.parent.parent)); // Else would be handled by isDeclarationName
+        else if (ts.isTypeParameterDeclaration(parent)) {
+            ts.Debug.assert(ts.isJSDocTemplateTag(parent.parent)); // Else would be handled by isDeclarationName
             return 2 /* Type */;
         }
-        else if (ts.isLiteralTypeNode(node.parent)) {
+        else if (ts.isLiteralTypeNode(parent)) {
             // This might be T["name"], which is actually referencing a property and not a type. So allow both meanings.
             return 2 /* Type */ | 1 /* Value */;
         }
@@ -118100,11 +120567,11 @@
         //     import a = |b|; // Namespace
         //     import a = |b.c|; // Value, type, namespace
         //     import a = |b.c|.d; // Namespace
-        var name = node.kind === 158 /* QualifiedName */ ? node : ts.isQualifiedName(node.parent) && node.parent.right === node ? node.parent : undefined;
-        return name && name.parent.kind === 261 /* ImportEqualsDeclaration */ ? 7 /* All */ : 4 /* Namespace */;
+        var name = node.kind === 159 /* QualifiedName */ ? node : ts.isQualifiedName(node.parent) && node.parent.right === node ? node.parent : undefined;
+        return name && name.parent.kind === 263 /* ImportEqualsDeclaration */ ? 7 /* All */ : 4 /* Namespace */;
     }
     function isInRightSideOfInternalImportEqualsDeclaration(node) {
-        while (node.parent.kind === 158 /* QualifiedName */) {
+        while (node.parent.kind === 159 /* QualifiedName */) {
             node = node.parent;
         }
         return ts.isInternalModuleImportEqualsDeclaration(node.parent) && node.parent.moduleReference === node;
@@ -118116,27 +120583,27 @@
     function isQualifiedNameNamespaceReference(node) {
         var root = node;
         var isLastClause = true;
-        if (root.parent.kind === 158 /* QualifiedName */) {
-            while (root.parent && root.parent.kind === 158 /* QualifiedName */) {
+        if (root.parent.kind === 159 /* QualifiedName */) {
+            while (root.parent && root.parent.kind === 159 /* QualifiedName */) {
                 root = root.parent;
             }
             isLastClause = root.right === node;
         }
-        return root.parent.kind === 174 /* TypeReference */ && !isLastClause;
+        return root.parent.kind === 176 /* TypeReference */ && !isLastClause;
     }
     function isPropertyAccessNamespaceReference(node) {
         var root = node;
         var isLastClause = true;
-        if (root.parent.kind === 202 /* PropertyAccessExpression */) {
-            while (root.parent && root.parent.kind === 202 /* PropertyAccessExpression */) {
+        if (root.parent.kind === 204 /* PropertyAccessExpression */) {
+            while (root.parent && root.parent.kind === 204 /* PropertyAccessExpression */) {
                 root = root.parent;
             }
             isLastClause = root.name === node;
         }
-        if (!isLastClause && root.parent.kind === 224 /* ExpressionWithTypeArguments */ && root.parent.parent.kind === 287 /* HeritageClause */) {
+        if (!isLastClause && root.parent.kind === 226 /* ExpressionWithTypeArguments */ && root.parent.parent.kind === 289 /* HeritageClause */) {
             var decl = root.parent.parent.parent;
-            return (decl.kind === 253 /* ClassDeclaration */ && root.parent.parent.token === 116 /* ImplementsKeyword */) ||
-                (decl.kind === 254 /* InterfaceDeclaration */ && root.parent.parent.token === 93 /* ExtendsKeyword */);
+            return (decl.kind === 255 /* ClassDeclaration */ && root.parent.parent.token === 117 /* ImplementsKeyword */) ||
+                (decl.kind === 256 /* InterfaceDeclaration */ && root.parent.parent.token === 94 /* ExtendsKeyword */);
         }
         return false;
     }
@@ -118145,17 +120612,17 @@
             node = node.parent;
         }
         switch (node.kind) {
-            case 107 /* ThisKeyword */:
+            case 108 /* ThisKeyword */:
                 return !ts.isExpressionNode(node);
-            case 188 /* ThisType */:
+            case 190 /* ThisType */:
                 return true;
         }
         switch (node.parent.kind) {
-            case 174 /* TypeReference */:
+            case 176 /* TypeReference */:
                 return true;
-            case 196 /* ImportType */:
+            case 198 /* ImportType */:
                 return !node.parent.isTypeOf;
-            case 224 /* ExpressionWithTypeArguments */:
+            case 226 /* ExpressionWithTypeArguments */:
                 return !ts.isExpressionWithTypeArgumentsInClassExtendsClause(node.parent);
         }
         return false;
@@ -118222,7 +120689,7 @@
     ts.climbPastPropertyOrElementAccess = climbPastPropertyOrElementAccess;
     function getTargetLabel(referenceNode, labelName) {
         while (referenceNode) {
-            if (referenceNode.kind === 246 /* LabeledStatement */ && referenceNode.label.escapedText === labelName) {
+            if (referenceNode.kind === 248 /* LabeledStatement */ && referenceNode.label.escapedText === labelName) {
                 return referenceNode.label;
             }
             referenceNode = referenceNode.parent;
@@ -118283,22 +120750,22 @@
     ts.isNameOfFunctionDeclaration = isNameOfFunctionDeclaration;
     function isLiteralNameOfPropertyDeclarationOrIndexAccess(node) {
         switch (node.parent.kind) {
-            case 164 /* PropertyDeclaration */:
-            case 163 /* PropertySignature */:
-            case 289 /* PropertyAssignment */:
-            case 292 /* EnumMember */:
-            case 166 /* MethodDeclaration */:
-            case 165 /* MethodSignature */:
-            case 168 /* GetAccessor */:
-            case 169 /* SetAccessor */:
-            case 257 /* ModuleDeclaration */:
+            case 165 /* PropertyDeclaration */:
+            case 164 /* PropertySignature */:
+            case 291 /* PropertyAssignment */:
+            case 294 /* EnumMember */:
+            case 167 /* MethodDeclaration */:
+            case 166 /* MethodSignature */:
+            case 170 /* GetAccessor */:
+            case 171 /* SetAccessor */:
+            case 259 /* ModuleDeclaration */:
                 return ts.getNameOfDeclaration(node.parent) === node;
-            case 203 /* ElementAccessExpression */:
+            case 205 /* ElementAccessExpression */:
                 return node.parent.argumentExpression === node;
-            case 159 /* ComputedPropertyName */:
+            case 160 /* ComputedPropertyName */:
                 return true;
-            case 192 /* LiteralType */:
-                return node.parent.parent.kind === 190 /* IndexedAccessType */;
+            case 194 /* LiteralType */:
+                return node.parent.parent.kind === 192 /* IndexedAccessType */;
             default:
                 return false;
         }
@@ -118322,17 +120789,17 @@
                 return undefined;
             }
             switch (node.kind) {
-                case 298 /* SourceFile */:
-                case 166 /* MethodDeclaration */:
-                case 165 /* MethodSignature */:
-                case 252 /* FunctionDeclaration */:
-                case 209 /* FunctionExpression */:
-                case 168 /* GetAccessor */:
-                case 169 /* SetAccessor */:
-                case 253 /* ClassDeclaration */:
-                case 254 /* InterfaceDeclaration */:
-                case 256 /* EnumDeclaration */:
-                case 257 /* ModuleDeclaration */:
+                case 300 /* SourceFile */:
+                case 167 /* MethodDeclaration */:
+                case 166 /* MethodSignature */:
+                case 254 /* FunctionDeclaration */:
+                case 211 /* FunctionExpression */:
+                case 170 /* GetAccessor */:
+                case 171 /* SetAccessor */:
+                case 255 /* ClassDeclaration */:
+                case 256 /* InterfaceDeclaration */:
+                case 258 /* EnumDeclaration */:
+                case 259 /* ModuleDeclaration */:
                     return node;
             }
         }
@@ -118340,54 +120807,56 @@
     ts.getContainerNode = getContainerNode;
     function getNodeKind(node) {
         switch (node.kind) {
-            case 298 /* SourceFile */:
+            case 300 /* SourceFile */:
                 return ts.isExternalModule(node) ? "module" /* moduleElement */ : "script" /* scriptElement */;
-            case 257 /* ModuleDeclaration */:
+            case 259 /* ModuleDeclaration */:
                 return "module" /* moduleElement */;
-            case 253 /* ClassDeclaration */:
-            case 222 /* ClassExpression */:
+            case 255 /* ClassDeclaration */:
+            case 224 /* ClassExpression */:
                 return "class" /* classElement */;
-            case 254 /* InterfaceDeclaration */: return "interface" /* interfaceElement */;
-            case 255 /* TypeAliasDeclaration */:
-            case 328 /* JSDocCallbackTag */:
-            case 335 /* JSDocTypedefTag */:
+            case 256 /* InterfaceDeclaration */: return "interface" /* interfaceElement */;
+            case 257 /* TypeAliasDeclaration */:
+            case 333 /* JSDocCallbackTag */:
+            case 340 /* JSDocTypedefTag */:
                 return "type" /* typeElement */;
-            case 256 /* EnumDeclaration */: return "enum" /* enumElement */;
-            case 250 /* VariableDeclaration */:
+            case 258 /* EnumDeclaration */: return "enum" /* enumElement */;
+            case 252 /* VariableDeclaration */:
                 return getKindOfVariableDeclaration(node);
-            case 199 /* BindingElement */:
+            case 201 /* BindingElement */:
                 return getKindOfVariableDeclaration(ts.getRootDeclaration(node));
-            case 210 /* ArrowFunction */:
-            case 252 /* FunctionDeclaration */:
-            case 209 /* FunctionExpression */:
+            case 212 /* ArrowFunction */:
+            case 254 /* FunctionDeclaration */:
+            case 211 /* FunctionExpression */:
                 return "function" /* functionElement */;
-            case 168 /* GetAccessor */: return "getter" /* memberGetAccessorElement */;
-            case 169 /* SetAccessor */: return "setter" /* memberSetAccessorElement */;
-            case 166 /* MethodDeclaration */:
-            case 165 /* MethodSignature */:
+            case 170 /* GetAccessor */: return "getter" /* memberGetAccessorElement */;
+            case 171 /* SetAccessor */: return "setter" /* memberSetAccessorElement */;
+            case 167 /* MethodDeclaration */:
+            case 166 /* MethodSignature */:
                 return "method" /* memberFunctionElement */;
-            case 289 /* PropertyAssignment */:
+            case 291 /* PropertyAssignment */:
                 var initializer = node.initializer;
                 return ts.isFunctionLike(initializer) ? "method" /* memberFunctionElement */ : "property" /* memberVariableElement */;
-            case 164 /* PropertyDeclaration */:
-            case 163 /* PropertySignature */:
-            case 290 /* ShorthandPropertyAssignment */:
-            case 291 /* SpreadAssignment */:
+            case 165 /* PropertyDeclaration */:
+            case 164 /* PropertySignature */:
+            case 292 /* ShorthandPropertyAssignment */:
+            case 293 /* SpreadAssignment */:
                 return "property" /* memberVariableElement */;
-            case 172 /* IndexSignature */: return "index" /* indexSignatureElement */;
-            case 171 /* ConstructSignature */: return "construct" /* constructSignatureElement */;
-            case 170 /* CallSignature */: return "call" /* callSignatureElement */;
-            case 167 /* Constructor */: return "constructor" /* constructorImplementationElement */;
-            case 160 /* TypeParameter */: return "type parameter" /* typeParameterElement */;
-            case 292 /* EnumMember */: return "enum member" /* enumMemberElement */;
-            case 161 /* Parameter */: return ts.hasSyntacticModifier(node, 16476 /* ParameterPropertyModifier */) ? "property" /* memberVariableElement */ : "parameter" /* parameterElement */;
-            case 261 /* ImportEqualsDeclaration */:
-            case 266 /* ImportSpecifier */:
-            case 271 /* ExportSpecifier */:
-            case 264 /* NamespaceImport */:
-            case 270 /* NamespaceExport */:
+            case 174 /* IndexSignature */: return "index" /* indexSignatureElement */;
+            case 173 /* ConstructSignature */: return "construct" /* constructSignatureElement */;
+            case 172 /* CallSignature */: return "call" /* callSignatureElement */;
+            case 169 /* Constructor */:
+            case 168 /* ClassStaticBlockDeclaration */:
+                return "constructor" /* constructorImplementationElement */;
+            case 161 /* TypeParameter */: return "type parameter" /* typeParameterElement */;
+            case 294 /* EnumMember */: return "enum member" /* enumMemberElement */;
+            case 162 /* Parameter */: return ts.hasSyntacticModifier(node, 16476 /* ParameterPropertyModifier */) ? "property" /* memberVariableElement */ : "parameter" /* parameterElement */;
+            case 263 /* ImportEqualsDeclaration */:
+            case 268 /* ImportSpecifier */:
+            case 273 /* ExportSpecifier */:
+            case 266 /* NamespaceImport */:
+            case 272 /* NamespaceExport */:
                 return "alias" /* alias */;
-            case 217 /* BinaryExpression */:
+            case 219 /* BinaryExpression */:
                 var kind = ts.getAssignmentDeclarationKind(node);
                 var right = node.right;
                 switch (kind) {
@@ -118414,9 +120883,9 @@
                         return "" /* unknown */;
                     }
                 }
-            case 78 /* Identifier */:
+            case 79 /* Identifier */:
                 return ts.isImportClause(node.parent) ? "alias" /* alias */ : "" /* unknown */;
-            case 267 /* ExportAssignment */:
+            case 269 /* ExportAssignment */:
                 var scriptKind = getNodeKind(node.expression);
                 // If the expression didn't come back with something (like it does for an identifiers)
                 return scriptKind === "" /* unknown */ ? "const" /* constElement */ : scriptKind;
@@ -118434,12 +120903,12 @@
     ts.getNodeKind = getNodeKind;
     function isThis(node) {
         switch (node.kind) {
-            case 107 /* ThisKeyword */:
+            case 108 /* ThisKeyword */:
                 // case SyntaxKind.ThisType: TODO: GH#9267
                 return true;
-            case 78 /* Identifier */:
+            case 79 /* Identifier */:
                 // 'this' as a parameter
-                return ts.identifierIsThisKeyword(node) && node.parent.kind === 161 /* Parameter */;
+                return ts.identifierIsThisKeyword(node) && node.parent.kind === 162 /* Parameter */;
             default:
                 return false;
         }
@@ -118504,42 +120973,42 @@
             return false;
         }
         switch (n.kind) {
-            case 253 /* ClassDeclaration */:
-            case 254 /* InterfaceDeclaration */:
-            case 256 /* EnumDeclaration */:
-            case 201 /* ObjectLiteralExpression */:
-            case 197 /* ObjectBindingPattern */:
-            case 178 /* TypeLiteral */:
-            case 231 /* Block */:
-            case 258 /* ModuleBlock */:
-            case 259 /* CaseBlock */:
-            case 265 /* NamedImports */:
-            case 269 /* NamedExports */:
+            case 255 /* ClassDeclaration */:
+            case 256 /* InterfaceDeclaration */:
+            case 258 /* EnumDeclaration */:
+            case 203 /* ObjectLiteralExpression */:
+            case 199 /* ObjectBindingPattern */:
+            case 180 /* TypeLiteral */:
+            case 233 /* Block */:
+            case 260 /* ModuleBlock */:
+            case 261 /* CaseBlock */:
+            case 267 /* NamedImports */:
+            case 271 /* NamedExports */:
                 return nodeEndsWith(n, 19 /* CloseBraceToken */, sourceFile);
-            case 288 /* CatchClause */:
+            case 290 /* CatchClause */:
                 return isCompletedNode(n.block, sourceFile);
-            case 205 /* NewExpression */:
+            case 207 /* NewExpression */:
                 if (!n.arguments) {
                     return true;
                 }
             // falls through
-            case 204 /* CallExpression */:
-            case 208 /* ParenthesizedExpression */:
-            case 187 /* ParenthesizedType */:
+            case 206 /* CallExpression */:
+            case 210 /* ParenthesizedExpression */:
+            case 189 /* ParenthesizedType */:
                 return nodeEndsWith(n, 21 /* CloseParenToken */, sourceFile);
-            case 175 /* FunctionType */:
-            case 176 /* ConstructorType */:
+            case 177 /* FunctionType */:
+            case 178 /* ConstructorType */:
                 return isCompletedNode(n.type, sourceFile);
-            case 167 /* Constructor */:
-            case 168 /* GetAccessor */:
-            case 169 /* SetAccessor */:
-            case 252 /* FunctionDeclaration */:
-            case 209 /* FunctionExpression */:
-            case 166 /* MethodDeclaration */:
-            case 165 /* MethodSignature */:
-            case 171 /* ConstructSignature */:
-            case 170 /* CallSignature */:
-            case 210 /* ArrowFunction */:
+            case 169 /* Constructor */:
+            case 170 /* GetAccessor */:
+            case 171 /* SetAccessor */:
+            case 254 /* FunctionDeclaration */:
+            case 211 /* FunctionExpression */:
+            case 167 /* MethodDeclaration */:
+            case 166 /* MethodSignature */:
+            case 173 /* ConstructSignature */:
+            case 172 /* CallSignature */:
+            case 212 /* ArrowFunction */:
                 if (n.body) {
                     return isCompletedNode(n.body, sourceFile);
                 }
@@ -118549,65 +121018,65 @@
                 // Even though type parameters can be unclosed, we can get away with
                 // having at least a closing paren.
                 return hasChildOfKind(n, 21 /* CloseParenToken */, sourceFile);
-            case 257 /* ModuleDeclaration */:
+            case 259 /* ModuleDeclaration */:
                 return !!n.body && isCompletedNode(n.body, sourceFile);
-            case 235 /* IfStatement */:
+            case 237 /* IfStatement */:
                 if (n.elseStatement) {
                     return isCompletedNode(n.elseStatement, sourceFile);
                 }
                 return isCompletedNode(n.thenStatement, sourceFile);
-            case 234 /* ExpressionStatement */:
+            case 236 /* ExpressionStatement */:
                 return isCompletedNode(n.expression, sourceFile) ||
                     hasChildOfKind(n, 26 /* SemicolonToken */, sourceFile);
-            case 200 /* ArrayLiteralExpression */:
-            case 198 /* ArrayBindingPattern */:
-            case 203 /* ElementAccessExpression */:
-            case 159 /* ComputedPropertyName */:
-            case 180 /* TupleType */:
+            case 202 /* ArrayLiteralExpression */:
+            case 200 /* ArrayBindingPattern */:
+            case 205 /* ElementAccessExpression */:
+            case 160 /* ComputedPropertyName */:
+            case 182 /* TupleType */:
                 return nodeEndsWith(n, 23 /* CloseBracketToken */, sourceFile);
-            case 172 /* IndexSignature */:
+            case 174 /* IndexSignature */:
                 if (n.type) {
                     return isCompletedNode(n.type, sourceFile);
                 }
                 return hasChildOfKind(n, 23 /* CloseBracketToken */, sourceFile);
-            case 285 /* CaseClause */:
-            case 286 /* DefaultClause */:
+            case 287 /* CaseClause */:
+            case 288 /* DefaultClause */:
                 // there is no such thing as terminator token for CaseClause/DefaultClause so for simplicity always consider them non-completed
                 return false;
-            case 238 /* ForStatement */:
-            case 239 /* ForInStatement */:
-            case 240 /* ForOfStatement */:
-            case 237 /* WhileStatement */:
+            case 240 /* ForStatement */:
+            case 241 /* ForInStatement */:
+            case 242 /* ForOfStatement */:
+            case 239 /* WhileStatement */:
                 return isCompletedNode(n.statement, sourceFile);
-            case 236 /* DoStatement */:
+            case 238 /* DoStatement */:
                 // rough approximation: if DoStatement has While keyword - then if node is completed is checking the presence of ')';
-                return hasChildOfKind(n, 114 /* WhileKeyword */, sourceFile)
+                return hasChildOfKind(n, 115 /* WhileKeyword */, sourceFile)
                     ? nodeEndsWith(n, 21 /* CloseParenToken */, sourceFile)
                     : isCompletedNode(n.statement, sourceFile);
-            case 177 /* TypeQuery */:
+            case 179 /* TypeQuery */:
                 return isCompletedNode(n.exprName, sourceFile);
-            case 212 /* TypeOfExpression */:
-            case 211 /* DeleteExpression */:
-            case 213 /* VoidExpression */:
-            case 220 /* YieldExpression */:
-            case 221 /* SpreadElement */:
+            case 214 /* TypeOfExpression */:
+            case 213 /* DeleteExpression */:
+            case 215 /* VoidExpression */:
+            case 222 /* YieldExpression */:
+            case 223 /* SpreadElement */:
                 var unaryWordExpression = n;
                 return isCompletedNode(unaryWordExpression.expression, sourceFile);
-            case 206 /* TaggedTemplateExpression */:
+            case 208 /* TaggedTemplateExpression */:
                 return isCompletedNode(n.template, sourceFile);
-            case 219 /* TemplateExpression */:
+            case 221 /* TemplateExpression */:
                 var lastSpan = ts.lastOrUndefined(n.templateSpans);
                 return isCompletedNode(lastSpan, sourceFile);
-            case 229 /* TemplateSpan */:
+            case 231 /* TemplateSpan */:
                 return ts.nodeIsPresent(n.literal);
-            case 268 /* ExportDeclaration */:
-            case 262 /* ImportDeclaration */:
+            case 270 /* ExportDeclaration */:
+            case 264 /* ImportDeclaration */:
                 return ts.nodeIsPresent(n.moduleSpecifier);
-            case 215 /* PrefixUnaryExpression */:
+            case 217 /* PrefixUnaryExpression */:
                 return isCompletedNode(n.operand, sourceFile);
-            case 217 /* BinaryExpression */:
+            case 219 /* BinaryExpression */:
                 return isCompletedNode(n.right, sourceFile);
-            case 218 /* ConditionalExpression */:
+            case 220 /* ConditionalExpression */:
                 return isCompletedNode(n.whenFalse, sourceFile);
             default:
                 return true;
@@ -118667,13 +121136,13 @@
     }
     ts.findContainingList = findContainingList;
     function isDefaultModifier(node) {
-        return node.kind === 87 /* DefaultKeyword */;
+        return node.kind === 88 /* DefaultKeyword */;
     }
     function isClassKeyword(node) {
-        return node.kind === 83 /* ClassKeyword */;
+        return node.kind === 84 /* ClassKeyword */;
     }
     function isFunctionKeyword(node) {
-        return node.kind === 97 /* FunctionKeyword */;
+        return node.kind === 98 /* FunctionKeyword */;
     }
     function getAdjustedLocationForClass(node) {
         if (ts.isNamedDeclaration(node)) {
@@ -118682,7 +121151,7 @@
         if (ts.isClassDeclaration(node)) {
             // for class and function declarations, use the `default` modifier
             // when the declaration is unnamed.
-            var defaultModifier = ts.find(node.modifiers, isDefaultModifier);
+            var defaultModifier = node.modifiers && ts.find(node.modifiers, isDefaultModifier);
             if (defaultModifier)
                 return defaultModifier;
         }
@@ -118726,6 +121195,10 @@
         if (contextualType) {
             return contextualType;
         }
+        var parent = node.parent;
+        if (parent && ts.isBinaryExpression(parent) && isEqualityOperatorKind(parent.operatorToken.kind)) {
+            return checker.getTypeAtLocation(node === parent.left ? parent.right : parent.left);
+        }
         var ancestorTypeNode = getAncestorTypeNode(node);
         return ancestorTypeNode && checker.getTypeAtLocation(ancestorTypeNode);
     }
@@ -118733,11 +121206,11 @@
     function getAdjustedLocationForDeclaration(node, forRename) {
         if (!forRename) {
             switch (node.kind) {
-                case 253 /* ClassDeclaration */:
-                case 222 /* ClassExpression */:
+                case 255 /* ClassDeclaration */:
+                case 224 /* ClassExpression */:
                     return getAdjustedLocationForClass(node);
-                case 252 /* FunctionDeclaration */:
-                case 209 /* FunctionExpression */:
+                case 254 /* FunctionDeclaration */:
+                case 211 /* FunctionExpression */:
                     return getAdjustedLocationForFunction(node);
             }
         }
@@ -118827,30 +121300,30 @@
         //
         // NOTE: If the node is a modifier, we don't adjust its location if it is the `default` modifier as that is handled
         // specially by `getSymbolAtLocation`.
-        if (ts.isModifier(node) && (forRename || node.kind !== 87 /* DefaultKeyword */) ? ts.contains(parent.modifiers, node) :
-            node.kind === 83 /* ClassKeyword */ ? ts.isClassDeclaration(parent) || ts.isClassExpression(node) :
-                node.kind === 97 /* FunctionKeyword */ ? ts.isFunctionDeclaration(parent) || ts.isFunctionExpression(node) :
-                    node.kind === 117 /* InterfaceKeyword */ ? ts.isInterfaceDeclaration(parent) :
-                        node.kind === 91 /* EnumKeyword */ ? ts.isEnumDeclaration(parent) :
-                            node.kind === 149 /* TypeKeyword */ ? ts.isTypeAliasDeclaration(parent) :
-                                node.kind === 140 /* NamespaceKeyword */ || node.kind === 139 /* ModuleKeyword */ ? ts.isModuleDeclaration(parent) :
-                                    node.kind === 99 /* ImportKeyword */ ? ts.isImportEqualsDeclaration(parent) :
-                                        node.kind === 134 /* GetKeyword */ ? ts.isGetAccessorDeclaration(parent) :
-                                            node.kind === 146 /* SetKeyword */ && ts.isSetAccessorDeclaration(parent)) {
+        if (ts.isModifier(node) && (forRename || node.kind !== 88 /* DefaultKeyword */) ? ts.contains(parent.modifiers, node) :
+            node.kind === 84 /* ClassKeyword */ ? ts.isClassDeclaration(parent) || ts.isClassExpression(node) :
+                node.kind === 98 /* FunctionKeyword */ ? ts.isFunctionDeclaration(parent) || ts.isFunctionExpression(node) :
+                    node.kind === 118 /* InterfaceKeyword */ ? ts.isInterfaceDeclaration(parent) :
+                        node.kind === 92 /* EnumKeyword */ ? ts.isEnumDeclaration(parent) :
+                            node.kind === 150 /* TypeKeyword */ ? ts.isTypeAliasDeclaration(parent) :
+                                node.kind === 141 /* NamespaceKeyword */ || node.kind === 140 /* ModuleKeyword */ ? ts.isModuleDeclaration(parent) :
+                                    node.kind === 100 /* ImportKeyword */ ? ts.isImportEqualsDeclaration(parent) :
+                                        node.kind === 135 /* GetKeyword */ ? ts.isGetAccessorDeclaration(parent) :
+                                            node.kind === 147 /* SetKeyword */ && ts.isSetAccessorDeclaration(parent)) {
             var location = getAdjustedLocationForDeclaration(parent, forRename);
             if (location) {
                 return location;
             }
         }
         // /**/<var|let|const> [|name|] ...
-        if ((node.kind === 112 /* VarKeyword */ || node.kind === 84 /* ConstKeyword */ || node.kind === 118 /* LetKeyword */) &&
+        if ((node.kind === 113 /* VarKeyword */ || node.kind === 85 /* ConstKeyword */ || node.kind === 119 /* LetKeyword */) &&
             ts.isVariableDeclarationList(parent) && parent.declarations.length === 1) {
             var decl = parent.declarations[0];
             if (ts.isIdentifier(decl.name)) {
                 return decl.name;
             }
         }
-        if (node.kind === 149 /* TypeKeyword */) {
+        if (node.kind === 150 /* TypeKeyword */) {
             // import /**/type [|name|] from ...;
             // import /**/type { [|name|] } from ...;
             // import /**/type { propertyName as [|name|] } from ...;
@@ -118876,7 +121349,7 @@
         // import * /**/as [|name|] ...
         // export { propertyName /**/as [|name|] } ...
         // export * /**/as [|name|] ...
-        if (node.kind === 126 /* AsKeyword */) {
+        if (node.kind === 127 /* AsKeyword */) {
             if (ts.isImportSpecifier(parent) && parent.propertyName ||
                 ts.isExportSpecifier(parent) && parent.propertyName ||
                 ts.isNamespaceImport(parent) ||
@@ -118892,13 +121365,13 @@
         // /**/import { propertyName as [|name|] } from ...;
         // /**/import ... from "[|module|]";
         // /**/import "[|module|]";
-        if (node.kind === 99 /* ImportKeyword */ && ts.isImportDeclaration(parent)) {
+        if (node.kind === 100 /* ImportKeyword */ && ts.isImportDeclaration(parent)) {
             var location = getAdjustedLocationForImportDeclaration(parent, forRename);
             if (location) {
                 return location;
             }
         }
-        if (node.kind === 92 /* ExportKeyword */) {
+        if (node.kind === 93 /* ExportKeyword */) {
             // /**/export { [|name|] } ...;
             // /**/export { propertyName as [|name|] } ...;
             // /**/export * from "[|module|]";
@@ -118917,12 +121390,12 @@
             }
         }
         // import name = /**/require("[|module|]");
-        if (node.kind === 143 /* RequireKeyword */ && ts.isExternalModuleReference(parent)) {
+        if (node.kind === 144 /* RequireKeyword */ && ts.isExternalModuleReference(parent)) {
             return parent.expression;
         }
         // import ... /**/from "[|module|]";
         // export ... /**/from "[|module|]";
-        if (node.kind === 153 /* FromKeyword */ && (ts.isImportDeclaration(parent) || ts.isExportDeclaration(parent)) && parent.moduleSpecifier) {
+        if (node.kind === 154 /* FromKeyword */ && (ts.isImportDeclaration(parent) || ts.isExportDeclaration(parent)) && parent.moduleSpecifier) {
             return parent.moduleSpecifier;
         }
         // class ... /**/extends [|name|] ...
@@ -118930,13 +121403,13 @@
         // class ... /**/implements name1, name2 ...
         // interface ... /**/extends [|name|] ...
         // interface ... /**/extends name1, name2 ...
-        if ((node.kind === 93 /* ExtendsKeyword */ || node.kind === 116 /* ImplementsKeyword */) && ts.isHeritageClause(parent) && parent.token === node.kind) {
+        if ((node.kind === 94 /* ExtendsKeyword */ || node.kind === 117 /* ImplementsKeyword */) && ts.isHeritageClause(parent) && parent.token === node.kind) {
             var location = getAdjustedLocationForHeritageClause(parent);
             if (location) {
                 return location;
             }
         }
-        if (node.kind === 93 /* ExtendsKeyword */) {
+        if (node.kind === 94 /* ExtendsKeyword */) {
             // ... <T /**/extends [|U|]> ...
             if (ts.isTypeParameterDeclaration(parent) && parent.constraint && ts.isTypeReferenceNode(parent.constraint)) {
                 return parent.constraint.typeName;
@@ -118947,20 +121420,20 @@
             }
         }
         // ... T extends /**/infer [|U|] ? ...
-        if (node.kind === 135 /* InferKeyword */ && ts.isInferTypeNode(parent)) {
+        if (node.kind === 136 /* InferKeyword */ && ts.isInferTypeNode(parent)) {
             return parent.typeParameter.name;
         }
         // { [ [|K|] /**/in keyof T]: ... }
-        if (node.kind === 100 /* InKeyword */ && ts.isTypeParameterDeclaration(parent) && ts.isMappedTypeNode(parent.parent)) {
+        if (node.kind === 101 /* InKeyword */ && ts.isTypeParameterDeclaration(parent) && ts.isMappedTypeNode(parent.parent)) {
             return parent.name;
         }
         // /**/keyof [|T|]
-        if (node.kind === 138 /* KeyOfKeyword */ && ts.isTypeOperatorNode(parent) && parent.operator === 138 /* KeyOfKeyword */ &&
+        if (node.kind === 139 /* KeyOfKeyword */ && ts.isTypeOperatorNode(parent) && parent.operator === 139 /* KeyOfKeyword */ &&
             ts.isTypeReferenceNode(parent.type)) {
             return parent.type.typeName;
         }
         // /**/readonly [|name|][]
-        if (node.kind === 142 /* ReadonlyKeyword */ && ts.isTypeOperatorNode(parent) && parent.operator === 142 /* ReadonlyKeyword */ &&
+        if (node.kind === 143 /* ReadonlyKeyword */ && ts.isTypeOperatorNode(parent) && parent.operator === 143 /* ReadonlyKeyword */ &&
             ts.isArrayTypeNode(parent.type) && ts.isTypeReferenceNode(parent.type.elementType)) {
             return parent.type.elementType.typeName;
         }
@@ -118975,29 +121448,29 @@
             // /**/yield [|name|]
             // /**/yield obj.[|name|]
             // /**/delete obj.[|name|]
-            if (node.kind === 102 /* NewKeyword */ && ts.isNewExpression(parent) ||
-                node.kind === 113 /* VoidKeyword */ && ts.isVoidExpression(parent) ||
-                node.kind === 111 /* TypeOfKeyword */ && ts.isTypeOfExpression(parent) ||
-                node.kind === 130 /* AwaitKeyword */ && ts.isAwaitExpression(parent) ||
-                node.kind === 124 /* YieldKeyword */ && ts.isYieldExpression(parent) ||
-                node.kind === 88 /* DeleteKeyword */ && ts.isDeleteExpression(parent)) {
+            if (node.kind === 103 /* NewKeyword */ && ts.isNewExpression(parent) ||
+                node.kind === 114 /* VoidKeyword */ && ts.isVoidExpression(parent) ||
+                node.kind === 112 /* TypeOfKeyword */ && ts.isTypeOfExpression(parent) ||
+                node.kind === 131 /* AwaitKeyword */ && ts.isAwaitExpression(parent) ||
+                node.kind === 125 /* YieldKeyword */ && ts.isYieldExpression(parent) ||
+                node.kind === 89 /* DeleteKeyword */ && ts.isDeleteExpression(parent)) {
                 if (parent.expression) {
                     return ts.skipOuterExpressions(parent.expression);
                 }
             }
             // left /**/in [|name|]
             // left /**/instanceof [|name|]
-            if ((node.kind === 100 /* InKeyword */ || node.kind === 101 /* InstanceOfKeyword */) && ts.isBinaryExpression(parent) && parent.operatorToken === node) {
+            if ((node.kind === 101 /* InKeyword */ || node.kind === 102 /* InstanceOfKeyword */) && ts.isBinaryExpression(parent) && parent.operatorToken === node) {
                 return ts.skipOuterExpressions(parent.right);
             }
             // left /**/as [|name|]
-            if (node.kind === 126 /* AsKeyword */ && ts.isAsExpression(parent) && ts.isTypeReferenceNode(parent.type)) {
+            if (node.kind === 127 /* AsKeyword */ && ts.isAsExpression(parent) && ts.isTypeReferenceNode(parent.type)) {
                 return parent.type.typeName;
             }
             // for (... /**/in [|name|])
             // for (... /**/of [|name|])
-            if (node.kind === 100 /* InKeyword */ && ts.isForInStatement(parent) ||
-                node.kind === 157 /* OfKeyword */ && ts.isForOfStatement(parent)) {
+            if (node.kind === 101 /* InKeyword */ && ts.isForInStatement(parent) ||
+                node.kind === 158 /* OfKeyword */ && ts.isForOfStatement(parent)) {
                 return ts.skipOuterExpressions(parent.expression);
             }
         }
@@ -119167,7 +121640,7 @@
                     }
                 }
             }
-            ts.Debug.assert(startNode !== undefined || n.kind === 298 /* SourceFile */ || n.kind === 1 /* EndOfFileToken */ || ts.isJSDocCommentContainingNode(n));
+            ts.Debug.assert(startNode !== undefined || n.kind === 300 /* SourceFile */ || n.kind === 1 /* EndOfFileToken */ || ts.isJSDocCommentContainingNode(n));
             // Here we know that none of child token nodes embrace the position,
             // the only known case is when position is at the end of the file.
             // Try to find the rightmost token in the file without filtering.
@@ -119240,17 +121713,17 @@
             return true;
         }
         // <div> { | </div> or <div a={| </div>
-        if (token.kind === 29 /* LessThanToken */ && token.parent.kind === 284 /* JsxExpression */) {
+        if (token.kind === 29 /* LessThanToken */ && token.parent.kind === 286 /* JsxExpression */) {
             return true;
         }
         // <div> {
         // |
         // } < /div>
-        if (token && token.kind === 19 /* CloseBraceToken */ && token.parent.kind === 284 /* JsxExpression */) {
+        if (token && token.kind === 19 /* CloseBraceToken */ && token.parent.kind === 286 /* JsxExpression */) {
             return true;
         }
         // <div>|</div>
-        if (token.kind === 29 /* LessThanToken */ && token.parent.kind === 277 /* JsxClosingElement */) {
+        if (token.kind === 29 /* LessThanToken */ && token.parent.kind === 279 /* JsxClosingElement */) {
             return true;
         }
         return false;
@@ -119281,17 +121754,17 @@
     function isInsideJsxElement(sourceFile, position) {
         function isInsideJsxElementTraversal(node) {
             while (node) {
-                if (node.kind >= 275 /* JsxSelfClosingElement */ && node.kind <= 284 /* JsxExpression */
+                if (node.kind >= 277 /* JsxSelfClosingElement */ && node.kind <= 286 /* JsxExpression */
                     || node.kind === 11 /* JsxText */
                     || node.kind === 29 /* LessThanToken */
                     || node.kind === 31 /* GreaterThanToken */
-                    || node.kind === 78 /* Identifier */
+                    || node.kind === 79 /* Identifier */
                     || node.kind === 19 /* CloseBraceToken */
                     || node.kind === 18 /* OpenBraceToken */
                     || node.kind === 43 /* SlashToken */) {
                     node = node.parent;
                 }
-                else if (node.kind === 274 /* JsxElement */) {
+                else if (node.kind === 276 /* JsxElement */) {
                     if (position > node.getStart(sourceFile))
                         return true;
                     node = node.parent;
@@ -119430,16 +121903,16 @@
                     break;
                 case 38 /* EqualsGreaterThanToken */:
                 // falls through
-                case 78 /* Identifier */:
+                case 79 /* Identifier */:
                 case 10 /* StringLiteral */:
                 case 8 /* NumericLiteral */:
                 case 9 /* BigIntLiteral */:
-                case 109 /* TrueKeyword */:
-                case 94 /* FalseKeyword */:
+                case 110 /* TrueKeyword */:
+                case 95 /* FalseKeyword */:
                 // falls through
-                case 111 /* TypeOfKeyword */:
-                case 93 /* ExtendsKeyword */:
-                case 138 /* KeyOfKeyword */:
+                case 112 /* TypeOfKeyword */:
+                case 94 /* ExtendsKeyword */:
+                case 139 /* KeyOfKeyword */:
                 case 24 /* DotToken */:
                 case 51 /* BarToken */:
                 case 57 /* QuestionToken */:
@@ -119489,7 +121962,7 @@
             result.push("protected" /* protectedMemberModifier */);
         if (flags & 4 /* Public */)
             result.push("public" /* publicMemberModifier */);
-        if (flags & 32 /* Static */)
+        if (flags & 32 /* Static */ || ts.isClassStaticBlockDeclaration(node))
             result.push("static" /* staticModifier */);
         if (flags & 128 /* Abstract */)
             result.push("abstract" /* abstractModifier */);
@@ -119499,16 +121972,16 @@
             result.push("deprecated" /* deprecatedModifier */);
         if (node.flags & 8388608 /* Ambient */)
             result.push("declare" /* ambientModifier */);
-        if (node.kind === 267 /* ExportAssignment */)
+        if (node.kind === 269 /* ExportAssignment */)
             result.push("export" /* exportedModifier */);
         return result.length > 0 ? result.join(",") : "" /* none */;
     }
     ts.getNodeModifiers = getNodeModifiers;
     function getTypeArgumentOrTypeParameterList(node) {
-        if (node.kind === 174 /* TypeReference */ || node.kind === 204 /* CallExpression */) {
+        if (node.kind === 176 /* TypeReference */ || node.kind === 206 /* CallExpression */) {
             return node.typeArguments;
         }
-        if (ts.isFunctionLike(node) || node.kind === 253 /* ClassDeclaration */ || node.kind === 254 /* InterfaceDeclaration */) {
+        if (ts.isFunctionLike(node) || node.kind === 255 /* ClassDeclaration */ || node.kind === 256 /* InterfaceDeclaration */) {
             return node.typeParameters;
         }
         return undefined;
@@ -119528,7 +122001,7 @@
     }
     ts.isStringOrRegularExpressionOrTemplateLiteral = isStringOrRegularExpressionOrTemplateLiteral;
     function isPunctuation(kind) {
-        return 18 /* FirstPunctuation */ <= kind && kind <= 77 /* LastPunctuation */;
+        return 18 /* FirstPunctuation */ <= kind && kind <= 78 /* LastPunctuation */;
     }
     ts.isPunctuation = isPunctuation;
     function isInsideTemplateLiteral(node, position, sourceFile) {
@@ -119538,9 +122011,9 @@
     ts.isInsideTemplateLiteral = isInsideTemplateLiteral;
     function isAccessibilityModifier(kind) {
         switch (kind) {
-            case 122 /* PublicKeyword */:
-            case 120 /* PrivateKeyword */:
-            case 121 /* ProtectedKeyword */:
+            case 123 /* PublicKeyword */:
+            case 121 /* PrivateKeyword */:
+            case 122 /* ProtectedKeyword */:
                 return true;
         }
         return false;
@@ -119553,18 +122026,18 @@
     }
     ts.cloneCompilerOptions = cloneCompilerOptions;
     function isArrayLiteralOrObjectLiteralDestructuringPattern(node) {
-        if (node.kind === 200 /* ArrayLiteralExpression */ ||
-            node.kind === 201 /* ObjectLiteralExpression */) {
+        if (node.kind === 202 /* ArrayLiteralExpression */ ||
+            node.kind === 203 /* ObjectLiteralExpression */) {
             // [a,b,c] from:
             // [a, b, c] = someExpression;
-            if (node.parent.kind === 217 /* BinaryExpression */ &&
+            if (node.parent.kind === 219 /* BinaryExpression */ &&
                 node.parent.left === node &&
-                node.parent.operatorToken.kind === 62 /* EqualsToken */) {
+                node.parent.operatorToken.kind === 63 /* EqualsToken */) {
                 return true;
             }
             // [a, b, c] from:
             // for([a, b, c] of expression)
-            if (node.parent.kind === 240 /* ForOfStatement */ &&
+            if (node.parent.kind === 242 /* ForOfStatement */ &&
                 node.parent.initializer === node) {
                 return true;
             }
@@ -119572,7 +122045,7 @@
             // [x, [a, b, c] ] = someExpression
             // or
             // {x, a: {a, b, c} } = someExpression
-            if (isArrayLiteralOrObjectLiteralDestructuringPattern(node.parent.kind === 289 /* PropertyAssignment */ ? node.parent.parent : node.parent)) {
+            if (isArrayLiteralOrObjectLiteralDestructuringPattern(node.parent.kind === 291 /* PropertyAssignment */ ? node.parent.parent : node.parent)) {
                 return true;
             }
         }
@@ -119634,32 +122107,32 @@
     }
     ts.createTextChange = createTextChange;
     ts.typeKeywords = [
-        128 /* AnyKeyword */,
-        127 /* AssertsKeyword */,
-        155 /* BigIntKeyword */,
-        131 /* BooleanKeyword */,
-        94 /* FalseKeyword */,
-        135 /* InferKeyword */,
-        138 /* KeyOfKeyword */,
-        141 /* NeverKeyword */,
-        103 /* NullKeyword */,
-        144 /* NumberKeyword */,
-        145 /* ObjectKeyword */,
-        142 /* ReadonlyKeyword */,
-        147 /* StringKeyword */,
-        148 /* SymbolKeyword */,
-        109 /* TrueKeyword */,
-        113 /* VoidKeyword */,
-        150 /* UndefinedKeyword */,
-        151 /* UniqueKeyword */,
-        152 /* UnknownKeyword */,
+        129 /* AnyKeyword */,
+        128 /* AssertsKeyword */,
+        156 /* BigIntKeyword */,
+        132 /* BooleanKeyword */,
+        95 /* FalseKeyword */,
+        136 /* InferKeyword */,
+        139 /* KeyOfKeyword */,
+        142 /* NeverKeyword */,
+        104 /* NullKeyword */,
+        145 /* NumberKeyword */,
+        146 /* ObjectKeyword */,
+        143 /* ReadonlyKeyword */,
+        148 /* StringKeyword */,
+        149 /* SymbolKeyword */,
+        110 /* TrueKeyword */,
+        114 /* VoidKeyword */,
+        151 /* UndefinedKeyword */,
+        152 /* UniqueKeyword */,
+        153 /* UnknownKeyword */,
     ];
     function isTypeKeyword(kind) {
         return ts.contains(ts.typeKeywords, kind);
     }
     ts.isTypeKeyword = isTypeKeyword;
     function isTypeKeywordToken(node) {
-        return node.kind === 149 /* TypeKeyword */;
+        return node.kind === 150 /* TypeKeyword */;
     }
     ts.isTypeKeywordToken = isTypeKeywordToken;
     /** True if the symbol is for an external module, as opposed to a namespace. */
@@ -119692,7 +122165,7 @@
     }
     ts.skipConstraint = skipConstraint;
     function getNameFromPropertyName(name) {
-        return name.kind === 159 /* ComputedPropertyName */
+        return name.kind === 160 /* ComputedPropertyName */
             // treat computed property names where expression is string/numeric literal as just string/numeric literal
             ? ts.isStringOrNumericLiteralLike(name.expression) ? name.expression.text : undefined
             : ts.isPrivateIdentifier(name) ? ts.idText(name) : ts.getTextOfIdentifierOrLiteral(name);
@@ -119721,7 +122194,6 @@
             getSymlinkCache: ts.maybeBind(host, host.getSymlinkCache) || program.getSymlinkCache,
             getModuleSpecifierCache: ts.maybeBind(host, host.getModuleSpecifierCache),
             getGlobalTypingsCacheLocation: ts.maybeBind(host, host.getGlobalTypingsCacheLocation),
-            getSourceFiles: function () { return program.getSourceFiles(); },
             redirectTargetsMap: program.redirectTargetsMap,
             getProjectReferenceRedirect: function (fileName) { return program.getProjectReferenceRedirect(fileName); },
             isSourceOfProjectReferenceRedirect: function (fileName) { return program.isSourceOfProjectReferenceRedirect(fileName); },
@@ -119790,7 +122262,7 @@
         }
         return ts.firstDefined(symbol.declarations, function (decl) {
             var name = ts.getNameOfDeclaration(decl);
-            return name && name.kind === 78 /* Identifier */ ? name.escapedText : undefined;
+            return name && name.kind === 79 /* Identifier */ ? name.escapedText : undefined;
         });
     }
     ts.symbolEscapedNameNoDefault = symbolEscapedNameNoDefault;
@@ -119834,7 +122306,7 @@
     ts.findModifier = findModifier;
     function insertImports(changes, sourceFile, imports, blankLineBetween) {
         var decl = ts.isArray(imports) ? imports[0] : imports;
-        var importKindPredicate = decl.kind === 233 /* VariableStatement */ ? ts.isRequireVariableStatement : ts.isAnyImportSyntax;
+        var importKindPredicate = decl.kind === 235 /* VariableStatement */ ? ts.isRequireVariableStatement : ts.isAnyImportSyntax;
         var existingImportStatements = ts.filter(sourceFile.statements, importKindPredicate);
         var sortedNewImports = ts.isArray(imports) ? ts.stableSort(imports, ts.OrganizeImports.compareImportsOrRequireStatements) : [imports];
         if (!existingImportStatements.length) {
@@ -119912,7 +122384,7 @@
     // Display-part writer helpers
     // #region
     function isFirstDeclarationOfSymbolParameter(symbol) {
-        return symbol.declarations && symbol.declarations.length > 0 && symbol.declarations[0].kind === 161 /* Parameter */;
+        return symbol.declarations && symbol.declarations.length > 0 && symbol.declarations[0].kind === 162 /* Parameter */;
     }
     ts.isFirstDeclarationOfSymbolParameter = isFirstDeclarationOfSymbolParameter;
     var displayPartWriter = getDisplayPartWriter();
@@ -119960,7 +122432,7 @@
             increaseIndent: function () { indent++; },
             decreaseIndent: function () { indent--; },
             clear: resetWriter,
-            trackSymbol: ts.noop,
+            trackSymbol: function () { return false; },
             reportInaccessibleThisError: ts.noop,
             reportInaccessibleUniqueSymbolError: ts.noop,
             reportPrivateInBaseOfClassExpression: ts.noop,
@@ -120123,7 +122595,10 @@
     ts.linkPart = linkPart;
     function buildLinkParts(link, checker) {
         var _a;
-        var parts = [linkPart("{@link ")];
+        var prefix = ts.isJSDocLink(link) ? "link"
+            : ts.isJSDocLinkCode(link) ? "linkcode"
+                : "linkplain";
+        var parts = [linkPart("{@" + prefix + " ")];
         if (!link.name) {
             if (link.text) {
                 parts.push(linkTextPart(link.text));
@@ -120139,7 +122614,7 @@
                 }
             }
             else {
-                parts.push(linkTextPart(ts.getTextOfNode(link.name) + link.text));
+                parts.push(linkTextPart(ts.getTextOfNode(link.name) + " " + link.text));
             }
         }
         parts.push(linkPart("}"));
@@ -120268,9 +122743,13 @@
     }
     ts.getSynthesizedDeepCloneWithReplacements = getSynthesizedDeepCloneWithReplacements;
     function getSynthesizedDeepCloneWorker(node, replaceNode) {
-        var visited = replaceNode ?
-            ts.visitEachChild(node, function (n) { return getSynthesizedDeepCloneWithReplacements(n, /*includeTrivia*/ true, replaceNode); }, ts.nullTransformationContext) :
-            ts.visitEachChild(node, getSynthesizedDeepClone, ts.nullTransformationContext);
+        var nodeClone = replaceNode
+            ? function (n) { return getSynthesizedDeepCloneWithReplacements(n, /*includeTrivia*/ true, replaceNode); }
+            : getSynthesizedDeepClone;
+        var nodesClone = replaceNode
+            ? function (ns) { return ns && getSynthesizedDeepClonesWithReplacements(ns, /*includeTrivia*/ true, replaceNode); }
+            : function (ns) { return ns && getSynthesizedDeepClones(ns); };
+        var visited = ts.visitEachChild(node, nodeClone, ts.nullTransformationContext, nodesClone, nodeClone);
         if (visited === node) {
             // This only happens for leaf nodes - internal nodes always see their children change.
             var clone_1 = ts.isStringLiteral(node) ? ts.setOriginalNode(ts.factory.createStringLiteralFromNode(node), node) :
@@ -120278,8 +122757,8 @@
                     ts.factory.cloneNode(node);
             return ts.setTextRange(clone_1, node);
         }
-        // PERF: As an optimization, rather than calling getSynthesizedClone, we'll update
-        // the new node created by visitEachChild with the extra changes getSynthesizedClone
+        // PERF: As an optimization, rather than calling factory.cloneNode, we'll update
+        // the new node created by visitEachChild with the extra changes factory.cloneNode
         // would have made.
         visited.parent = undefined;
         return visited;
@@ -120439,15 +122918,15 @@
     function getContextualTypeFromParent(node, checker) {
         var parent = node.parent;
         switch (parent.kind) {
-            case 205 /* NewExpression */:
+            case 207 /* NewExpression */:
                 return checker.getContextualType(parent);
-            case 217 /* BinaryExpression */: {
+            case 219 /* BinaryExpression */: {
                 var _a = parent, left = _a.left, operatorToken = _a.operatorToken, right = _a.right;
                 return isEqualityOperatorKind(operatorToken.kind)
                     ? checker.getTypeAtLocation(node === right ? left : right)
                     : checker.getContextualType(node);
             }
-            case 285 /* CaseClause */:
+            case 287 /* CaseClause */:
                 return parent.expression === node ? getSwitchedType(parent, checker) : undefined;
             default:
                 return checker.getContextualType(node);
@@ -120477,8 +122956,8 @@
         switch (node.kind) {
             case 10 /* StringLiteral */:
             case 14 /* NoSubstitutionTemplateLiteral */:
-            case 219 /* TemplateExpression */:
-            case 206 /* TaggedTemplateExpression */:
+            case 221 /* TemplateExpression */:
+            case 208 /* TaggedTemplateExpression */:
                 return true;
             default:
                 return false;
@@ -120501,6 +122980,7 @@
         var res = checker.typeToTypeNode(type, enclosingScope, 1 /* NoTruncation */, {
             trackSymbol: function (symbol, declaration, meaning) {
                 typeIsAccessible = typeIsAccessible && checker.isSymbolAccessible(symbol, declaration, meaning, /*shouldComputeAliasToMarkVisible*/ false).accessibility === 0 /* Accessible */;
+                return !typeIsAccessible;
             },
             reportInaccessibleThisError: notAccessible,
             reportPrivateInBaseOfClassExpression: notAccessible,
@@ -120511,41 +122991,41 @@
     }
     ts.getTypeNodeIfAccessible = getTypeNodeIfAccessible;
     function syntaxRequiresTrailingCommaOrSemicolonOrASI(kind) {
-        return kind === 170 /* CallSignature */
-            || kind === 171 /* ConstructSignature */
-            || kind === 172 /* IndexSignature */
-            || kind === 163 /* PropertySignature */
-            || kind === 165 /* MethodSignature */;
+        return kind === 172 /* CallSignature */
+            || kind === 173 /* ConstructSignature */
+            || kind === 174 /* IndexSignature */
+            || kind === 164 /* PropertySignature */
+            || kind === 166 /* MethodSignature */;
     }
     ts.syntaxRequiresTrailingCommaOrSemicolonOrASI = syntaxRequiresTrailingCommaOrSemicolonOrASI;
     function syntaxRequiresTrailingFunctionBlockOrSemicolonOrASI(kind) {
-        return kind === 252 /* FunctionDeclaration */
-            || kind === 167 /* Constructor */
-            || kind === 166 /* MethodDeclaration */
-            || kind === 168 /* GetAccessor */
-            || kind === 169 /* SetAccessor */;
+        return kind === 254 /* FunctionDeclaration */
+            || kind === 169 /* Constructor */
+            || kind === 167 /* MethodDeclaration */
+            || kind === 170 /* GetAccessor */
+            || kind === 171 /* SetAccessor */;
     }
     ts.syntaxRequiresTrailingFunctionBlockOrSemicolonOrASI = syntaxRequiresTrailingFunctionBlockOrSemicolonOrASI;
     function syntaxRequiresTrailingModuleBlockOrSemicolonOrASI(kind) {
-        return kind === 257 /* ModuleDeclaration */;
+        return kind === 259 /* ModuleDeclaration */;
     }
     ts.syntaxRequiresTrailingModuleBlockOrSemicolonOrASI = syntaxRequiresTrailingModuleBlockOrSemicolonOrASI;
     function syntaxRequiresTrailingSemicolonOrASI(kind) {
-        return kind === 233 /* VariableStatement */
-            || kind === 234 /* ExpressionStatement */
-            || kind === 236 /* DoStatement */
-            || kind === 241 /* ContinueStatement */
-            || kind === 242 /* BreakStatement */
-            || kind === 243 /* ReturnStatement */
-            || kind === 247 /* ThrowStatement */
-            || kind === 249 /* DebuggerStatement */
-            || kind === 164 /* PropertyDeclaration */
-            || kind === 255 /* TypeAliasDeclaration */
-            || kind === 262 /* ImportDeclaration */
-            || kind === 261 /* ImportEqualsDeclaration */
-            || kind === 268 /* ExportDeclaration */
-            || kind === 260 /* NamespaceExportDeclaration */
-            || kind === 267 /* ExportAssignment */;
+        return kind === 235 /* VariableStatement */
+            || kind === 236 /* ExpressionStatement */
+            || kind === 238 /* DoStatement */
+            || kind === 243 /* ContinueStatement */
+            || kind === 244 /* BreakStatement */
+            || kind === 245 /* ReturnStatement */
+            || kind === 249 /* ThrowStatement */
+            || kind === 251 /* DebuggerStatement */
+            || kind === 165 /* PropertyDeclaration */
+            || kind === 257 /* TypeAliasDeclaration */
+            || kind === 264 /* ImportDeclaration */
+            || kind === 263 /* ImportEqualsDeclaration */
+            || kind === 270 /* ExportDeclaration */
+            || kind === 262 /* NamespaceExportDeclaration */
+            || kind === 269 /* ExportAssignment */;
     }
     ts.syntaxRequiresTrailingSemicolonOrASI = syntaxRequiresTrailingSemicolonOrASI;
     ts.syntaxMayBeASICandidate = ts.or(syntaxRequiresTrailingCommaOrSemicolonOrASI, syntaxRequiresTrailingFunctionBlockOrSemicolonOrASI, syntaxRequiresTrailingModuleBlockOrSemicolonOrASI, syntaxRequiresTrailingSemicolonOrASI);
@@ -120575,7 +123055,7 @@
             return false;
         }
         // See comment in parser’s `parseDoStatement`
-        if (node.kind === 236 /* DoStatement */) {
+        if (node.kind === 238 /* DoStatement */) {
             return true;
         }
         var topNode = ts.findAncestor(node, function (ancestor) { return !ancestor.parent; });
@@ -120747,7 +123227,7 @@
         }
     }
     ts.createPackageJsonInfo = createPackageJsonInfo;
-    function createPackageJsonImportFilter(fromFile, host) {
+    function createPackageJsonImportFilter(fromFile, preferences, host) {
         var packageJsons = ((host.getPackageJsonsVisibleToFile && host.getPackageJsonsVisibleToFile(fromFile.fileName)) || getPackageJsonsVisibleToFile(fromFile.fileName, host)).filter(function (p) { return p.parseable; });
         var usesNodeCoreModules;
         return { allowsImportingAmbientModule: allowsImportingAmbientModule, allowsImportingSourceFile: allowsImportingSourceFile, allowsImportingSpecifier: allowsImportingSpecifier };
@@ -120815,7 +123295,7 @@
             if (!ts.stringContains(importedFileName, "node_modules")) {
                 return undefined;
             }
-            var specifier = ts.moduleSpecifiers.getNodeModulesPackageName(host.getCompilationSettings(), fromFile.path, importedFileName, moduleSpecifierResolutionHost);
+            var specifier = ts.moduleSpecifiers.getNodeModulesPackageName(host.getCompilationSettings(), fromFile.path, importedFileName, moduleSpecifierResolutionHost, preferences);
             if (!specifier) {
                 return undefined;
             }
@@ -120977,6 +123457,24 @@
         return ts.isInJSFile(declaration) || !ts.findAncestor(declaration, ts.isGlobalScopeAugmentation);
     }
     ts.isNonGlobalDeclaration = isNonGlobalDeclaration;
+    function isDeprecatedDeclaration(decl) {
+        return !!(ts.getCombinedNodeFlagsAlwaysIncludeJSDoc(decl) & 8192 /* Deprecated */);
+    }
+    ts.isDeprecatedDeclaration = isDeprecatedDeclaration;
+    function shouldUseUriStyleNodeCoreModules(file, program) {
+        var decisionFromFile = ts.firstDefined(file.imports, function (node) {
+            if (ts.JsTyping.nodeCoreModules.has(node.text)) {
+                return ts.startsWith(node.text, "node:");
+            }
+        });
+        return decisionFromFile !== null && decisionFromFile !== void 0 ? decisionFromFile : program.usesUriStyleNodeCoreModules;
+    }
+    ts.shouldUseUriStyleNodeCoreModules = shouldUseUriStyleNodeCoreModules;
+    // #endregion
+})(ts || (ts = {}));
+/*@internal*/
+var ts;
+(function (ts) {
     var ImportKind;
     (function (ImportKind) {
         ImportKind[ImportKind["Named"] = 0] = "Named";
@@ -120991,49 +123489,68 @@
         ExportKind[ExportKind["ExportEquals"] = 2] = "ExportEquals";
         ExportKind[ExportKind["UMD"] = 3] = "UMD";
     })(ExportKind = ts.ExportKind || (ts.ExportKind = {}));
-    function createExportMapCache() {
-        var cache;
-        var projectVersion;
+    function createCacheableExportInfoMap(host) {
+        var exportInfoId = 1;
+        var exportInfo = ts.createMultiMap();
+        var symbols = new ts.Map();
         var usableByFileName;
-        var wrapped = {
-            isEmpty: function () {
-                return !cache;
-            },
+        var cache = {
+            isUsableByFile: function (importingFile) { return importingFile === usableByFileName; },
+            isEmpty: function () { return !exportInfo.size; },
             clear: function () {
-                cache = undefined;
-                projectVersion = undefined;
+                exportInfo.clear();
+                symbols.clear();
+                usableByFileName = undefined;
             },
-            set: function (suggestions, version) {
-                cache = suggestions;
-                if (version) {
-                    projectVersion = version;
+            add: function (importingFile, symbol, symbolTableKey, moduleSymbol, moduleFile, exportKind, isFromPackageJson, scriptTarget, checker) {
+                if (importingFile !== usableByFileName) {
+                    cache.clear();
+                    usableByFileName = importingFile;
                 }
-            },
-            get: function (file, checker, version) {
-                if (usableByFileName && file !== usableByFileName) {
-                    return undefined;
-                }
-                if (version && projectVersion === version) {
-                    return cache;
-                }
-                cache === null || cache === void 0 ? void 0 : cache.forEach(function (infos) {
-                    var _a, _b, _c;
-                    for (var _i = 0, infos_1 = infos; _i < infos_1.length; _i++) {
-                        var info = infos_1[_i];
-                        // If the symbol/moduleSymbol was a merged symbol, it will have a new identity
-                        // in the checker, even though the symbols to merge are the same (guaranteed by
-                        // cache invalidation in synchronizeHostData).
-                        if ((_a = info.symbol.declarations) === null || _a === void 0 ? void 0 : _a.length) {
-                            info.symbol = checker.getMergedSymbol(info.exportKind === 1 /* Default */
-                                ? (_b = info.symbol.declarations[0].localSymbol) !== null && _b !== void 0 ? _b : info.symbol.declarations[0].symbol
-                                : info.symbol.declarations[0].symbol);
-                        }
-                        if ((_c = info.moduleSymbol.declarations) === null || _c === void 0 ? void 0 : _c.length) {
-                            info.moduleSymbol = checker.getMergedSymbol(info.moduleSymbol.declarations[0].symbol);
-                        }
-                    }
+                var isDefault = exportKind === 1 /* Default */;
+                var namedSymbol = isDefault && ts.getLocalSymbolForExportDefault(symbol) || symbol;
+                // A re-export merged with an export from a module augmentation can result in `symbol`
+                // being an external module symbol; the name it is re-exported by will be `symbolTableKey`
+                // (which comes from the keys of `moduleSymbol.exports`.)
+                var importedName = ts.isExternalModuleSymbol(namedSymbol)
+                    ? ts.unescapeLeadingUnderscores(symbolTableKey)
+                    : ts.getNameForExportedSymbol(namedSymbol, scriptTarget);
+                var moduleName = ts.stripQuotes(moduleSymbol.name);
+                var id = exportInfoId++;
+                var storedSymbol = symbol.flags & 33554432 /* Transient */ ? undefined : symbol;
+                var storedModuleSymbol = moduleSymbol.flags & 33554432 /* Transient */ ? undefined : moduleSymbol;
+                if (!storedSymbol || !storedModuleSymbol)
+                    symbols.set(id, [symbol, moduleSymbol]);
+                exportInfo.add(key(importedName, symbol, moduleName, checker), {
+                    id: id,
+                    symbolTableKey: symbolTableKey,
+                    symbolName: importedName,
+                    moduleName: moduleName,
+                    moduleFile: moduleFile,
+                    moduleFileName: moduleFile === null || moduleFile === void 0 ? void 0 : moduleFile.fileName,
+                    exportKind: exportKind,
+                    targetFlags: ts.skipAlias(symbol, checker).flags,
+                    isFromPackageJson: isFromPackageJson,
+                    symbol: storedSymbol,
+                    moduleSymbol: storedModuleSymbol,
                 });
-                return cache;
+            },
+            get: function (importingFile, importedName, symbol, moduleName, checker) {
+                if (importingFile !== usableByFileName)
+                    return;
+                var result = exportInfo.get(key(importedName, symbol, moduleName, checker));
+                return result === null || result === void 0 ? void 0 : result.map(rehydrateCachedInfo);
+            },
+            forEach: function (importingFile, action) {
+                if (importingFile !== usableByFileName)
+                    return;
+                exportInfo.forEach(function (info, key) {
+                    var _a = parseKey(key), symbolName = _a.symbolName, ambientModuleName = _a.ambientModuleName;
+                    action(info.map(rehydrateCachedInfo), symbolName, !!ambientModuleName);
+                });
+            },
+            releaseSymbols: function () {
+                symbols.clear();
             },
             onFileChanged: function (oldSourceFile, newSourceFile, typeAcquisitionEnabled) {
                 if (fileIsGlobalOnly(oldSourceFile) && fileIsGlobalOnly(newSourceFile)) {
@@ -121043,13 +123560,13 @@
                 if (usableByFileName && usableByFileName !== newSourceFile.path ||
                     // If ATA is enabled, auto-imports uses existing imports to guess whether you want auto-imports from node.
                     // Adding or removing imports from node could change the outcome of that guess, so could change the suggestions list.
-                    typeAcquisitionEnabled && consumesNodeCoreModules(oldSourceFile) !== consumesNodeCoreModules(newSourceFile) ||
+                    typeAcquisitionEnabled && ts.consumesNodeCoreModules(oldSourceFile) !== ts.consumesNodeCoreModules(newSourceFile) ||
                     // Module agumentation and ambient module changes can add or remove exports available to be auto-imported.
                     // Changes elsewhere in the file can change the *type* of an export in a module augmentation,
                     // but type info is gathered in getCompletionEntryDetails, which doesn’t use the cache.
                     !ts.arrayIsEqualTo(oldSourceFile.moduleAugmentations, newSourceFile.moduleAugmentations) ||
                     !ambientModuleDeclarationsAreEqual(oldSourceFile, newSourceFile)) {
-                    this.clear();
+                    cache.clear();
                     return true;
                 }
                 usableByFileName = newSourceFile.path;
@@ -121057,9 +123574,63 @@
             },
         };
         if (ts.Debug.isDebugging) {
-            Object.defineProperty(wrapped, "__cache", { get: function () { return cache; } });
+            Object.defineProperty(cache, "__cache", { get: function () { return exportInfo; } });
         }
-        return wrapped;
+        return cache;
+        function rehydrateCachedInfo(info) {
+            if (info.symbol && info.moduleSymbol)
+                return info;
+            var id = info.id, exportKind = info.exportKind, targetFlags = info.targetFlags, isFromPackageJson = info.isFromPackageJson, moduleFileName = info.moduleFileName;
+            var _a = symbols.get(id) || ts.emptyArray, cachedSymbol = _a[0], cachedModuleSymbol = _a[1];
+            if (cachedSymbol && cachedModuleSymbol) {
+                return {
+                    symbol: cachedSymbol,
+                    moduleSymbol: cachedModuleSymbol,
+                    moduleFileName: moduleFileName,
+                    exportKind: exportKind,
+                    targetFlags: targetFlags,
+                    isFromPackageJson: isFromPackageJson,
+                };
+            }
+            var checker = (isFromPackageJson
+                ? host.getPackageJsonAutoImportProvider()
+                : host.getCurrentProgram()).getTypeChecker();
+            var moduleSymbol = info.moduleSymbol || cachedModuleSymbol || ts.Debug.checkDefined(info.moduleFile
+                ? checker.getMergedSymbol(info.moduleFile.symbol)
+                : checker.tryFindAmbientModule(info.moduleName));
+            var symbol = info.symbol || cachedSymbol || ts.Debug.checkDefined(exportKind === 2 /* ExportEquals */
+                ? checker.resolveExternalModuleSymbol(moduleSymbol)
+                : checker.tryGetMemberInModuleExportsAndProperties(ts.unescapeLeadingUnderscores(info.symbolTableKey), moduleSymbol), "Could not find symbol '" + info.symbolName + "' by key '" + info.symbolTableKey + "' in module " + moduleSymbol.name);
+            symbols.set(id, [symbol, moduleSymbol]);
+            return {
+                symbol: symbol,
+                moduleSymbol: moduleSymbol,
+                moduleFileName: moduleFileName,
+                exportKind: exportKind,
+                targetFlags: targetFlags,
+                isFromPackageJson: isFromPackageJson,
+            };
+        }
+        function key(importedName, symbol, moduleName, checker) {
+            var unquoted = ts.stripQuotes(moduleName);
+            var moduleKey = ts.isExternalModuleNameRelative(unquoted) ? "/" : unquoted;
+            var target = ts.skipAlias(symbol, checker);
+            return importedName + "|" + createSymbolKey(target) + "|" + moduleKey;
+        }
+        function parseKey(key) {
+            var symbolName = key.substring(0, key.indexOf("|"));
+            var moduleKey = key.substring(key.lastIndexOf("|") + 1);
+            var ambientModuleName = moduleKey === "/" ? undefined : moduleKey;
+            return { symbolName: symbolName, ambientModuleName: ambientModuleName };
+        }
+        function createSymbolKey(symbol) {
+            var key = symbol.name;
+            while (symbol.parent) {
+                key += "," + symbol.parent.name;
+                symbol = symbol.parent;
+            }
+            return key;
+        }
         function fileIsGlobalOnly(file) {
             return !file.commonJsModuleIndicator && !file.externalModuleIndicator && !file.moduleAugmentations && !file.ambientModuleNames;
         }
@@ -121086,44 +123657,14 @@
             return true;
         }
     }
-    ts.createExportMapCache = createExportMapCache;
-    function createModuleSpecifierCache() {
-        var cache;
-        var importingFileName;
-        var wrapped = {
-            get: function (fromFileName, toFileName) {
-                if (!cache || fromFileName !== importingFileName)
-                    return undefined;
-                return cache.get(toFileName);
-            },
-            set: function (fromFileName, toFileName, moduleSpecifiers) {
-                if (cache && fromFileName !== importingFileName) {
-                    cache.clear();
-                }
-                importingFileName = fromFileName;
-                (cache || (cache = new ts.Map())).set(toFileName, moduleSpecifiers);
-            },
-            clear: function () {
-                cache = undefined;
-                importingFileName = undefined;
-            },
-            count: function () {
-                return cache ? cache.size : 0;
-            }
-        };
-        if (ts.Debug.isDebugging) {
-            Object.defineProperty(wrapped, "__cache", { get: function () { return cache; } });
-        }
-        return wrapped;
-    }
-    ts.createModuleSpecifierCache = createModuleSpecifierCache;
-    function isImportableFile(program, from, to, packageJsonFilter, moduleSpecifierResolutionHost, moduleSpecifierCache) {
+    ts.createCacheableExportInfoMap = createCacheableExportInfoMap;
+    function isImportableFile(program, from, to, preferences, packageJsonFilter, moduleSpecifierResolutionHost, moduleSpecifierCache) {
         var _a;
         if (from === to)
             return false;
-        var cachedResult = moduleSpecifierCache === null || moduleSpecifierCache === void 0 ? void 0 : moduleSpecifierCache.get(from.path, to.path);
-        if (cachedResult !== undefined) {
-            return !!cachedResult;
+        var cachedResult = moduleSpecifierCache === null || moduleSpecifierCache === void 0 ? void 0 : moduleSpecifierCache.get(from.path, to.path, preferences);
+        if ((cachedResult === null || cachedResult === void 0 ? void 0 : cachedResult.isAutoImportable) !== undefined) {
+            return cachedResult.isAutoImportable;
         }
         var getCanonicalFileName = ts.hostGetCanonicalFileName(moduleSpecifierResolutionHost);
         var globalTypingsCache = (_a = moduleSpecifierResolutionHost.getGlobalTypingsCacheLocation) === null || _a === void 0 ? void 0 : _a.call(moduleSpecifierResolutionHost);
@@ -121136,9 +123677,9 @@
                 isImportablePath(from.fileName, toPath, getCanonicalFileName, globalTypingsCache);
         });
         if (packageJsonFilter) {
-            var isImportable = hasImportablePath && packageJsonFilter.allowsImportingSourceFile(to, moduleSpecifierResolutionHost);
-            moduleSpecifierCache === null || moduleSpecifierCache === void 0 ? void 0 : moduleSpecifierCache.set(from.path, to.path, isImportable);
-            return isImportable;
+            var isAutoImportable = hasImportablePath && packageJsonFilter.allowsImportingSourceFile(to, moduleSpecifierResolutionHost);
+            moduleSpecifierCache === null || moduleSpecifierCache === void 0 ? void 0 : moduleSpecifierCache.setIsAutoImportable(from.path, to.path, preferences, isAutoImportable);
+            return isAutoImportable;
         }
         return hasImportablePath;
     }
@@ -121155,7 +123696,126 @@
             || ts.startsWith(getCanonicalFileName(fromPath), toNodeModulesParent)
             || (!!globalCachePath && ts.startsWith(getCanonicalFileName(globalCachePath), toNodeModulesParent));
     }
-    // #endregion
+    function forEachExternalModuleToImportFrom(program, host, useAutoImportProvider, cb) {
+        var _a, _b;
+        forEachExternalModule(program.getTypeChecker(), program.getSourceFiles(), function (module, file) { return cb(module, file, program, /*isFromPackageJson*/ false); });
+        var autoImportProvider = useAutoImportProvider && ((_a = host.getPackageJsonAutoImportProvider) === null || _a === void 0 ? void 0 : _a.call(host));
+        if (autoImportProvider) {
+            var start = ts.timestamp();
+            forEachExternalModule(autoImportProvider.getTypeChecker(), autoImportProvider.getSourceFiles(), function (module, file) { return cb(module, file, autoImportProvider, /*isFromPackageJson*/ true); });
+            (_b = host.log) === null || _b === void 0 ? void 0 : _b.call(host, "forEachExternalModuleToImportFrom autoImportProvider: " + (ts.timestamp() - start));
+        }
+    }
+    ts.forEachExternalModuleToImportFrom = forEachExternalModuleToImportFrom;
+    function forEachExternalModule(checker, allSourceFiles, cb) {
+        for (var _i = 0, _a = checker.getAmbientModules(); _i < _a.length; _i++) {
+            var ambient = _a[_i];
+            if (!ts.stringContains(ambient.name, "*")) {
+                cb(ambient, /*sourceFile*/ undefined);
+            }
+        }
+        for (var _b = 0, allSourceFiles_1 = allSourceFiles; _b < allSourceFiles_1.length; _b++) {
+            var sourceFile = allSourceFiles_1[_b];
+            if (ts.isExternalOrCommonJsModule(sourceFile)) {
+                cb(checker.getMergedSymbol(sourceFile.symbol), sourceFile);
+            }
+        }
+    }
+    function getExportInfoMap(importingFile, host, program, cancellationToken) {
+        var _a, _b, _c, _d, _e;
+        var start = ts.timestamp();
+        // Pulling the AutoImportProvider project will trigger its updateGraph if pending,
+        // which will invalidate the export map cache if things change, so pull it before
+        // checking the cache.
+        (_a = host.getPackageJsonAutoImportProvider) === null || _a === void 0 ? void 0 : _a.call(host);
+        var cache = ((_b = host.getCachedExportInfoMap) === null || _b === void 0 ? void 0 : _b.call(host)) || createCacheableExportInfoMap({
+            getCurrentProgram: function () { return program; },
+            getPackageJsonAutoImportProvider: function () { var _a; return (_a = host.getPackageJsonAutoImportProvider) === null || _a === void 0 ? void 0 : _a.call(host); },
+        });
+        if (cache.isUsableByFile(importingFile.path)) {
+            (_c = host.log) === null || _c === void 0 ? void 0 : _c.call(host, "getExportInfoMap: cache hit");
+            return cache;
+        }
+        (_d = host.log) === null || _d === void 0 ? void 0 : _d.call(host, "getExportInfoMap: cache miss or empty; calculating new results");
+        var compilerOptions = program.getCompilerOptions();
+        var scriptTarget = ts.getEmitScriptTarget(compilerOptions);
+        var moduleCount = 0;
+        forEachExternalModuleToImportFrom(program, host, /*useAutoImportProvider*/ true, function (moduleSymbol, moduleFile, program, isFromPackageJson) {
+            if (++moduleCount % 100 === 0)
+                cancellationToken === null || cancellationToken === void 0 ? void 0 : cancellationToken.throwIfCancellationRequested();
+            var seenExports = new ts.Map();
+            var checker = program.getTypeChecker();
+            var defaultInfo = getDefaultLikeExportInfo(moduleSymbol, checker, compilerOptions);
+            // Note: I think we shouldn't actually see resolved module symbols here, but weird merges
+            // can cause it to happen: see 'completionsImport_mergedReExport.ts'
+            if (defaultInfo && isImportableSymbol(defaultInfo.symbol, checker)) {
+                cache.add(importingFile.path, defaultInfo.symbol, defaultInfo.exportKind === 1 /* Default */ ? "default" /* Default */ : "export=" /* ExportEquals */, moduleSymbol, moduleFile, defaultInfo.exportKind, isFromPackageJson, scriptTarget, checker);
+            }
+            checker.forEachExportAndPropertyOfModule(moduleSymbol, function (exported, key) {
+                if (exported !== (defaultInfo === null || defaultInfo === void 0 ? void 0 : defaultInfo.symbol) && isImportableSymbol(exported, checker) && ts.addToSeen(seenExports, exported)) {
+                    cache.add(importingFile.path, exported, key, moduleSymbol, moduleFile, 0 /* Named */, isFromPackageJson, scriptTarget, checker);
+                }
+            });
+        });
+        (_e = host.log) === null || _e === void 0 ? void 0 : _e.call(host, "getExportInfoMap: done in " + (ts.timestamp() - start) + " ms");
+        return cache;
+    }
+    ts.getExportInfoMap = getExportInfoMap;
+    function getDefaultLikeExportInfo(moduleSymbol, checker, compilerOptions) {
+        var exported = getDefaultLikeExportWorker(moduleSymbol, checker);
+        if (!exported)
+            return undefined;
+        var symbol = exported.symbol, exportKind = exported.exportKind;
+        var info = getDefaultExportInfoWorker(symbol, checker, compilerOptions);
+        return info && __assign({ symbol: symbol, exportKind: exportKind }, info);
+    }
+    ts.getDefaultLikeExportInfo = getDefaultLikeExportInfo;
+    function isImportableSymbol(symbol, checker) {
+        return !checker.isUndefinedSymbol(symbol) && !checker.isUnknownSymbol(symbol) && !ts.isKnownSymbol(symbol) && !ts.isPrivateIdentifierSymbol(symbol);
+    }
+    function getDefaultLikeExportWorker(moduleSymbol, checker) {
+        var exportEquals = checker.resolveExternalModuleSymbol(moduleSymbol);
+        if (exportEquals !== moduleSymbol)
+            return { symbol: exportEquals, exportKind: 2 /* ExportEquals */ };
+        var defaultExport = checker.tryGetMemberInModuleExports("default" /* Default */, moduleSymbol);
+        if (defaultExport)
+            return { symbol: defaultExport, exportKind: 1 /* Default */ };
+    }
+    function getDefaultExportInfoWorker(defaultExport, checker, compilerOptions) {
+        var localSymbol = ts.getLocalSymbolForExportDefault(defaultExport);
+        if (localSymbol)
+            return { symbolForMeaning: localSymbol, name: localSymbol.name };
+        var name = getNameForExportDefault(defaultExport);
+        if (name !== undefined)
+            return { symbolForMeaning: defaultExport, name: name };
+        if (defaultExport.flags & 2097152 /* Alias */) {
+            var aliased = checker.getImmediateAliasedSymbol(defaultExport);
+            if (aliased && aliased.parent) {
+                // - `aliased` will be undefined if the module is exporting an unresolvable name,
+                //    but we can still offer completions for it.
+                // - `aliased.parent` will be undefined if the module is exporting `globalThis.something`,
+                //    or another expression that resolves to a global.
+                return getDefaultExportInfoWorker(aliased, checker, compilerOptions);
+            }
+        }
+        if (defaultExport.escapedName !== "default" /* Default */ &&
+            defaultExport.escapedName !== "export=" /* ExportEquals */) {
+            return { symbolForMeaning: defaultExport, name: defaultExport.getName() };
+        }
+        return { symbolForMeaning: defaultExport, name: ts.getNameForExportedSymbol(defaultExport, compilerOptions.target) };
+    }
+    function getNameForExportDefault(symbol) {
+        return symbol.declarations && ts.firstDefined(symbol.declarations, function (declaration) {
+            var _a;
+            if (ts.isExportAssignment(declaration)) {
+                return (_a = ts.tryCast(ts.skipOuterExpressions(declaration.expression), ts.isIdentifier)) === null || _a === void 0 ? void 0 : _a.text;
+            }
+            else if (ts.isExportSpecifier(declaration)) {
+                ts.Debug.assert(declaration.name.text === "default" /* Default */, "Expected the specifier to be a default export");
+                return declaration.propertyName && declaration.propertyName.text;
+            }
+        });
+    }
 })(ts || (ts = {}));
 var ts;
 (function (ts) {
@@ -121238,13 +123898,13 @@
             function handleToken() {
                 switch (token) {
                     case 43 /* SlashToken */:
-                    case 67 /* SlashEqualsToken */:
+                    case 68 /* SlashEqualsToken */:
                         if (!noRegexTable[lastNonTriviaToken] && scanner.reScanSlashToken() === 13 /* RegularExpressionLiteral */) {
                             token = 13 /* RegularExpressionLiteral */;
                         }
                         break;
                     case 29 /* LessThanToken */:
-                        if (lastNonTriviaToken === 78 /* Identifier */) {
+                        if (lastNonTriviaToken === 79 /* Identifier */) {
                             // Could be the start of something generic.  Keep track of that by bumping
                             // up the current count of generic contexts we may be in.
                             angleBracketStack++;
@@ -121257,16 +123917,16 @@
                             angleBracketStack--;
                         }
                         break;
-                    case 128 /* AnyKeyword */:
-                    case 147 /* StringKeyword */:
-                    case 144 /* NumberKeyword */:
-                    case 131 /* BooleanKeyword */:
-                    case 148 /* SymbolKeyword */:
+                    case 129 /* AnyKeyword */:
+                    case 148 /* StringKeyword */:
+                    case 145 /* NumberKeyword */:
+                    case 132 /* BooleanKeyword */:
+                    case 149 /* SymbolKeyword */:
                         if (angleBracketStack > 0 && !syntacticClassifierAbsent) {
                             // If it looks like we're could be in something generic, don't classify this
                             // as a keyword.  We may just get overwritten by the syntactic classifier,
                             // causing a noisy experience for the user.
-                            token = 78 /* Identifier */;
+                            token = 79 /* Identifier */;
                         }
                         break;
                     case 15 /* TemplateHead */:
@@ -121305,14 +123965,14 @@
                             break;
                         }
                         if (lastNonTriviaToken === 24 /* DotToken */) {
-                            token = 78 /* Identifier */;
+                            token = 79 /* Identifier */;
                         }
                         else if (ts.isKeyword(lastNonTriviaToken) && ts.isKeyword(token) && !canFollow(lastNonTriviaToken, token)) {
                             // We have two keywords in a row.  Only treat the second as a keyword if
                             // it's a sequence that could legally occur in the language.  Otherwise
                             // treat it as an identifier.  This way, if someone writes "private var"
                             // we recognize that 'var' is actually an identifier here.
-                            token = 78 /* Identifier */;
+                            token = 79 /* Identifier */;
                         }
                 }
             }
@@ -121326,19 +123986,19 @@
     /// we have a series of divide operator. this list allows us to be more accurate by ruling out
     /// locations where a regexp cannot exist.
     var noRegexTable = ts.arrayToNumericMap([
-        78 /* Identifier */,
+        79 /* Identifier */,
         10 /* StringLiteral */,
         8 /* NumericLiteral */,
         9 /* BigIntLiteral */,
         13 /* RegularExpressionLiteral */,
-        107 /* ThisKeyword */,
+        108 /* ThisKeyword */,
         45 /* PlusPlusToken */,
         46 /* MinusMinusToken */,
         21 /* CloseParenToken */,
         23 /* CloseBracketToken */,
         19 /* CloseBraceToken */,
-        109 /* TrueKeyword */,
-        94 /* FalseKeyword */,
+        110 /* TrueKeyword */,
+        95 /* FalseKeyword */,
     ], function (token) { return token; }, function () { return true; });
     function getNewEndOfLineState(scanner, token, lastOnTemplateStack) {
         switch (token) {
@@ -121450,10 +124110,10 @@
             return true;
         }
         switch (keyword2) {
-            case 134 /* GetKeyword */:
-            case 146 /* SetKeyword */:
-            case 132 /* ConstructorKeyword */:
-            case 123 /* StaticKeyword */:
+            case 135 /* GetKeyword */:
+            case 147 /* SetKeyword */:
+            case 133 /* ConstructorKeyword */:
+            case 124 /* StaticKeyword */:
                 return true; // Allow things like "public get", "public constructor" and "public static".
             default:
                 return false; // Any other keyword following "public" is actually an identifier, not a real keyword.
@@ -121498,9 +124158,9 @@
             case 31 /* GreaterThanToken */:
             case 32 /* LessThanEqualsToken */:
             case 33 /* GreaterThanEqualsToken */:
-            case 101 /* InstanceOfKeyword */:
-            case 100 /* InKeyword */:
-            case 126 /* AsKeyword */:
+            case 102 /* InstanceOfKeyword */:
+            case 101 /* InKeyword */:
+            case 127 /* AsKeyword */:
             case 34 /* EqualsEqualsToken */:
             case 35 /* ExclamationEqualsToken */:
             case 36 /* EqualsEqualsEqualsToken */:
@@ -121510,23 +124170,23 @@
             case 51 /* BarToken */:
             case 55 /* AmpersandAmpersandToken */:
             case 56 /* BarBarToken */:
-            case 73 /* BarEqualsToken */:
-            case 72 /* AmpersandEqualsToken */:
-            case 77 /* CaretEqualsToken */:
-            case 69 /* LessThanLessThanEqualsToken */:
-            case 70 /* GreaterThanGreaterThanEqualsToken */:
-            case 71 /* GreaterThanGreaterThanGreaterThanEqualsToken */:
-            case 63 /* PlusEqualsToken */:
-            case 64 /* MinusEqualsToken */:
-            case 65 /* AsteriskEqualsToken */:
-            case 67 /* SlashEqualsToken */:
-            case 68 /* PercentEqualsToken */:
-            case 62 /* EqualsToken */:
+            case 74 /* BarEqualsToken */:
+            case 73 /* AmpersandEqualsToken */:
+            case 78 /* CaretEqualsToken */:
+            case 70 /* LessThanLessThanEqualsToken */:
+            case 71 /* GreaterThanGreaterThanEqualsToken */:
+            case 72 /* GreaterThanGreaterThanGreaterThanEqualsToken */:
+            case 64 /* PlusEqualsToken */:
+            case 65 /* MinusEqualsToken */:
+            case 66 /* AsteriskEqualsToken */:
+            case 68 /* SlashEqualsToken */:
+            case 69 /* PercentEqualsToken */:
+            case 63 /* EqualsToken */:
             case 27 /* CommaToken */:
             case 60 /* QuestionQuestionToken */:
-            case 74 /* BarBarEqualsToken */:
-            case 75 /* AmpersandAmpersandEqualsToken */:
-            case 76 /* QuestionQuestionEqualsToken */:
+            case 75 /* BarBarEqualsToken */:
+            case 76 /* AmpersandAmpersandEqualsToken */:
+            case 77 /* QuestionQuestionEqualsToken */:
                 return true;
             default:
                 return false;
@@ -121552,7 +124212,7 @@
         else if (isBinaryExpressionOperatorToken(token) || isPrefixUnaryExpressionOperatorToken(token)) {
             return 5 /* operator */;
         }
-        else if (token >= 18 /* FirstPunctuation */ && token <= 77 /* LastPunctuation */) {
+        else if (token >= 18 /* FirstPunctuation */ && token <= 78 /* LastPunctuation */) {
             return 10 /* punctuation */;
         }
         switch (token) {
@@ -121571,7 +124231,7 @@
             case 5 /* WhitespaceTrivia */:
             case 4 /* NewLineTrivia */:
                 return 8 /* whiteSpace */;
-            case 78 /* Identifier */:
+            case 79 /* Identifier */:
             default:
                 if (ts.isTemplateLiteralKind(token)) {
                     return 6 /* stringLiteral */;
@@ -121596,13 +124256,13 @@
         // That means we're calling back into the host around every 1.2k of the file we process.
         // Lib.d.ts has similar numbers.
         switch (kind) {
-            case 257 /* ModuleDeclaration */:
-            case 253 /* ClassDeclaration */:
-            case 254 /* InterfaceDeclaration */:
-            case 252 /* FunctionDeclaration */:
-            case 222 /* ClassExpression */:
-            case 209 /* FunctionExpression */:
-            case 210 /* ArrowFunction */:
+            case 259 /* ModuleDeclaration */:
+            case 255 /* ClassDeclaration */:
+            case 256 /* InterfaceDeclaration */:
+            case 254 /* FunctionDeclaration */:
+            case 224 /* ClassExpression */:
+            case 211 /* FunctionExpression */:
+            case 212 /* ArrowFunction */:
                 cancellationToken.throwIfCancellationRequested();
         }
     }
@@ -121824,46 +124484,46 @@
                     pos = tag.tagName.end;
                     var commentStart = tag.tagName.end;
                     switch (tag.kind) {
-                        case 330 /* JSDocParameterTag */:
+                        case 335 /* JSDocParameterTag */:
                             var param = tag;
                             processJSDocParameterTag(param);
                             commentStart = param.isNameFirst && ((_a = param.typeExpression) === null || _a === void 0 ? void 0 : _a.end) || param.name.end;
                             break;
-                        case 337 /* JSDocPropertyTag */:
+                        case 342 /* JSDocPropertyTag */:
                             var prop = tag;
                             commentStart = prop.isNameFirst && ((_b = prop.typeExpression) === null || _b === void 0 ? void 0 : _b.end) || prop.name.end;
                             break;
-                        case 334 /* JSDocTemplateTag */:
+                        case 339 /* JSDocTemplateTag */:
                             processJSDocTemplateTag(tag);
                             pos = tag.end;
                             commentStart = tag.typeParameters.end;
                             break;
-                        case 335 /* JSDocTypedefTag */:
+                        case 340 /* JSDocTypedefTag */:
                             var type = tag;
-                            commentStart = ((_c = type.typeExpression) === null || _c === void 0 ? void 0 : _c.kind) === 302 /* JSDocTypeExpression */ && ((_d = type.fullName) === null || _d === void 0 ? void 0 : _d.end) || ((_e = type.typeExpression) === null || _e === void 0 ? void 0 : _e.end) || commentStart;
+                            commentStart = ((_c = type.typeExpression) === null || _c === void 0 ? void 0 : _c.kind) === 304 /* JSDocTypeExpression */ && ((_d = type.fullName) === null || _d === void 0 ? void 0 : _d.end) || ((_e = type.typeExpression) === null || _e === void 0 ? void 0 : _e.end) || commentStart;
                             break;
-                        case 328 /* JSDocCallbackTag */:
+                        case 333 /* JSDocCallbackTag */:
                             commentStart = tag.typeExpression.end;
                             break;
-                        case 333 /* JSDocTypeTag */:
+                        case 338 /* JSDocTypeTag */:
                             processElement(tag.typeExpression);
                             pos = tag.end;
                             commentStart = tag.typeExpression.end;
                             break;
-                        case 332 /* JSDocThisTag */:
-                        case 329 /* JSDocEnumTag */:
+                        case 337 /* JSDocThisTag */:
+                        case 334 /* JSDocEnumTag */:
                             commentStart = tag.typeExpression.end;
                             break;
-                        case 331 /* JSDocReturnTag */:
+                        case 336 /* JSDocReturnTag */:
                             processElement(tag.typeExpression);
                             pos = tag.end;
                             commentStart = ((_f = tag.typeExpression) === null || _f === void 0 ? void 0 : _f.end) || commentStart;
                             break;
-                        case 336 /* JSDocSeeTag */:
+                        case 341 /* JSDocSeeTag */:
                             commentStart = ((_g = tag.name) === null || _g === void 0 ? void 0 : _g.end) || commentStart;
                             break;
-                        case 318 /* JSDocAugmentsTag */:
-                        case 319 /* JSDocImplementsTag */:
+                        case 323 /* JSDocAugmentsTag */:
+                        case 324 /* JSDocImplementsTag */:
                             commentStart = tag.class.end;
                             break;
                     }
@@ -121899,7 +124559,8 @@
         }
         function tryClassifyTripleSlashComment(start, width) {
             var tripleSlashXMLCommentRegEx = /^(\/\/\/\s*)(<)(?:(\S+)((?:[^/]|\/[^>])*)(\/>)?)?/im;
-            var attributeRegex = /(\S+)(\s*)(=)(\s*)('[^']+'|"[^"]+")/img;
+            // Require a leading whitespace character (the parser already does) to prevent terrible backtracking performance
+            var attributeRegex = /(\s)(\S+)(\s*)(=)(\s*)('[^']+'|"[^"]+")/img;
             var text = sourceFile.text.substr(start, width);
             var match = tripleSlashXMLCommentRegEx.exec(text);
             if (!match) {
@@ -121927,25 +124588,25 @@
                 if (!attrMatch) {
                     break;
                 }
-                var newAttrPos = pos + attrMatch.index;
+                var newAttrPos = pos + attrMatch.index + attrMatch[1].length; // whitespace
                 if (newAttrPos > attrPos) {
                     pushCommentRange(attrPos, newAttrPos - attrPos);
                     attrPos = newAttrPos;
                 }
-                pushClassification(attrPos, attrMatch[1].length, 22 /* jsxAttribute */); // attribute name
-                attrPos += attrMatch[1].length;
-                if (attrMatch[2].length) {
-                    pushCommentRange(attrPos, attrMatch[2].length); // whitespace
-                    attrPos += attrMatch[2].length;
+                pushClassification(attrPos, attrMatch[2].length, 22 /* jsxAttribute */); // attribute name
+                attrPos += attrMatch[2].length;
+                if (attrMatch[3].length) {
+                    pushCommentRange(attrPos, attrMatch[3].length); // whitespace
+                    attrPos += attrMatch[3].length;
                 }
-                pushClassification(attrPos, attrMatch[3].length, 5 /* operator */); // =
-                attrPos += attrMatch[3].length;
-                if (attrMatch[4].length) {
-                    pushCommentRange(attrPos, attrMatch[4].length); // whitespace
-                    attrPos += attrMatch[4].length;
+                pushClassification(attrPos, attrMatch[4].length, 5 /* operator */); // =
+                attrPos += attrMatch[4].length;
+                if (attrMatch[5].length) {
+                    pushCommentRange(attrPos, attrMatch[5].length); // whitespace
+                    attrPos += attrMatch[5].length;
                 }
-                pushClassification(attrPos, attrMatch[5].length, 24 /* jsxAttributeStringLiteralValue */); // attribute value
-                attrPos += attrMatch[5].length;
+                pushClassification(attrPos, attrMatch[6].length, 24 /* jsxAttributeStringLiteralValue */); // attribute value
+                attrPos += attrMatch[6].length;
             }
             pos += match[4].length;
             if (pos > attrPos) {
@@ -122019,22 +124680,22 @@
         }
         function tryClassifyJsxElementName(token) {
             switch (token.parent && token.parent.kind) {
-                case 276 /* JsxOpeningElement */:
+                case 278 /* JsxOpeningElement */:
                     if (token.parent.tagName === token) {
                         return 19 /* jsxOpenTagName */;
                     }
                     break;
-                case 277 /* JsxClosingElement */:
+                case 279 /* JsxClosingElement */:
                     if (token.parent.tagName === token) {
                         return 20 /* jsxCloseTagName */;
                     }
                     break;
-                case 275 /* JsxSelfClosingElement */:
+                case 277 /* JsxSelfClosingElement */:
                     if (token.parent.tagName === token) {
                         return 21 /* jsxSelfClosingTagName */;
                     }
                     break;
-                case 281 /* JsxAttribute */:
+                case 283 /* JsxAttribute */:
                     if (token.parent.name === token) {
                         return 22 /* jsxAttribute */;
                     }
@@ -122061,19 +124722,19 @@
             if (ts.isPunctuation(tokenKind)) {
                 if (token) {
                     var parent = token.parent;
-                    if (tokenKind === 62 /* EqualsToken */) {
+                    if (tokenKind === 63 /* EqualsToken */) {
                         // the '=' in a variable declaration is special cased here.
-                        if (parent.kind === 250 /* VariableDeclaration */ ||
-                            parent.kind === 164 /* PropertyDeclaration */ ||
-                            parent.kind === 161 /* Parameter */ ||
-                            parent.kind === 281 /* JsxAttribute */) {
+                        if (parent.kind === 252 /* VariableDeclaration */ ||
+                            parent.kind === 165 /* PropertyDeclaration */ ||
+                            parent.kind === 162 /* Parameter */ ||
+                            parent.kind === 283 /* JsxAttribute */) {
                             return 5 /* operator */;
                         }
                     }
-                    if (parent.kind === 217 /* BinaryExpression */ ||
-                        parent.kind === 215 /* PrefixUnaryExpression */ ||
-                        parent.kind === 216 /* PostfixUnaryExpression */ ||
-                        parent.kind === 218 /* ConditionalExpression */) {
+                    if (parent.kind === 219 /* BinaryExpression */ ||
+                        parent.kind === 217 /* PrefixUnaryExpression */ ||
+                        parent.kind === 218 /* PostfixUnaryExpression */ ||
+                        parent.kind === 220 /* ConditionalExpression */) {
                         return 5 /* operator */;
                     }
                 }
@@ -122086,7 +124747,7 @@
                 return 25 /* bigintLiteral */;
             }
             else if (tokenKind === 10 /* StringLiteral */) {
-                return token && token.parent.kind === 281 /* JsxAttribute */ ? 24 /* jsxAttributeStringLiteralValue */ : 6 /* stringLiteral */;
+                return token && token.parent.kind === 283 /* JsxAttribute */ ? 24 /* jsxAttributeStringLiteralValue */ : 6 /* stringLiteral */;
             }
             else if (tokenKind === 13 /* RegularExpressionLiteral */) {
                 // TODO: we should get another classification type for these literals.
@@ -122099,35 +124760,35 @@
             else if (tokenKind === 11 /* JsxText */) {
                 return 23 /* jsxText */;
             }
-            else if (tokenKind === 78 /* Identifier */) {
+            else if (tokenKind === 79 /* Identifier */) {
                 if (token) {
                     switch (token.parent.kind) {
-                        case 253 /* ClassDeclaration */:
+                        case 255 /* ClassDeclaration */:
                             if (token.parent.name === token) {
                                 return 11 /* className */;
                             }
                             return;
-                        case 160 /* TypeParameter */:
+                        case 161 /* TypeParameter */:
                             if (token.parent.name === token) {
                                 return 15 /* typeParameterName */;
                             }
                             return;
-                        case 254 /* InterfaceDeclaration */:
+                        case 256 /* InterfaceDeclaration */:
                             if (token.parent.name === token) {
                                 return 13 /* interfaceName */;
                             }
                             return;
-                        case 256 /* EnumDeclaration */:
+                        case 258 /* EnumDeclaration */:
                             if (token.parent.name === token) {
                                 return 12 /* enumName */;
                             }
                             return;
-                        case 257 /* ModuleDeclaration */:
+                        case 259 /* ModuleDeclaration */:
                             if (token.parent.name === token) {
                                 return 14 /* moduleName */;
                             }
                             return;
-                        case 161 /* Parameter */:
+                        case 162 /* Parameter */:
                             if (token.parent.name === token) {
                                 return ts.isThisIdentifier(token) ? 3 /* keyword */ : 17 /* parameterName */;
                             }
@@ -122229,13 +124890,13 @@
                 var inJSXElement = false;
                 function visit(node) {
                     switch (node.kind) {
-                        case 257 /* ModuleDeclaration */:
-                        case 253 /* ClassDeclaration */:
-                        case 254 /* InterfaceDeclaration */:
-                        case 252 /* FunctionDeclaration */:
-                        case 222 /* ClassExpression */:
-                        case 209 /* FunctionExpression */:
-                        case 210 /* ArrowFunction */:
+                        case 259 /* ModuleDeclaration */:
+                        case 255 /* ClassDeclaration */:
+                        case 256 /* InterfaceDeclaration */:
+                        case 254 /* FunctionDeclaration */:
+                        case 224 /* ClassExpression */:
+                        case 211 /* FunctionExpression */:
+                        case 212 /* ArrowFunction */:
                             cancellationToken.throwIfCancellationRequested();
                     }
                     if (!node || !ts.textSpanIntersectsWith(span, node.pos, node.getFullWidth()) || node.getFullWidth() === 0) {
@@ -122248,7 +124909,7 @@
                     if (ts.isJsxExpression(node)) {
                         inJSXElement = false;
                     }
-                    if (ts.isIdentifier(node) && !inJSXElement && !inImportClause(node)) {
+                    if (ts.isIdentifier(node) && !inJSXElement && !inImportClause(node) && !ts.isInfinityOrNaNString(node.escapedText)) {
                         var symbol = typeChecker.getSymbolAtLocation(node);
                         if (symbol) {
                             if (symbol.flags & 2097152 /* Alias */) {
@@ -122381,25 +125042,25 @@
                 return (ts.isQualifiedName(node.parent) && node.parent.right === node) || (ts.isPropertyAccessExpression(node.parent) && node.parent.name === node);
             }
             var tokenFromDeclarationMapping = new ts.Map([
-                [250 /* VariableDeclaration */, 7 /* variable */],
-                [161 /* Parameter */, 6 /* parameter */],
-                [164 /* PropertyDeclaration */, 9 /* property */],
-                [257 /* ModuleDeclaration */, 3 /* namespace */],
-                [256 /* EnumDeclaration */, 1 /* enum */],
-                [292 /* EnumMember */, 8 /* enumMember */],
-                [253 /* ClassDeclaration */, 0 /* class */],
-                [166 /* MethodDeclaration */, 11 /* member */],
-                [252 /* FunctionDeclaration */, 10 /* function */],
-                [209 /* FunctionExpression */, 10 /* function */],
-                [165 /* MethodSignature */, 11 /* member */],
-                [168 /* GetAccessor */, 9 /* property */],
-                [169 /* SetAccessor */, 9 /* property */],
-                [163 /* PropertySignature */, 9 /* property */],
-                [254 /* InterfaceDeclaration */, 2 /* interface */],
-                [255 /* TypeAliasDeclaration */, 5 /* type */],
-                [160 /* TypeParameter */, 4 /* typeParameter */],
-                [289 /* PropertyAssignment */, 9 /* property */],
-                [290 /* ShorthandPropertyAssignment */, 9 /* property */]
+                [252 /* VariableDeclaration */, 7 /* variable */],
+                [162 /* Parameter */, 6 /* parameter */],
+                [165 /* PropertyDeclaration */, 9 /* property */],
+                [259 /* ModuleDeclaration */, 3 /* namespace */],
+                [258 /* EnumDeclaration */, 1 /* enum */],
+                [294 /* EnumMember */, 8 /* enumMember */],
+                [255 /* ClassDeclaration */, 0 /* class */],
+                [167 /* MethodDeclaration */, 11 /* member */],
+                [254 /* FunctionDeclaration */, 10 /* function */],
+                [211 /* FunctionExpression */, 10 /* function */],
+                [166 /* MethodSignature */, 11 /* member */],
+                [170 /* GetAccessor */, 9 /* property */],
+                [171 /* SetAccessor */, 9 /* property */],
+                [164 /* PropertySignature */, 9 /* property */],
+                [256 /* InterfaceDeclaration */, 2 /* interface */],
+                [257 /* TypeAliasDeclaration */, 5 /* type */],
+                [161 /* TypeParameter */, 4 /* typeParameter */],
+                [291 /* PropertyAssignment */, 9 /* property */],
+                [292 /* ShorthandPropertyAssignment */, 9 /* property */]
             ]);
         })(v2020 = classifier.v2020 || (classifier.v2020 = {}));
     })(classifier = ts.classifier || (ts.classifier = {}));
@@ -122506,10 +125167,10 @@
             function getStringLiteralCompletionEntries(sourceFile, node, position, typeChecker, compilerOptions, host, preferences) {
                 var parent = walkUpParentheses(node.parent);
                 switch (parent.kind) {
-                    case 192 /* LiteralType */: {
+                    case 194 /* LiteralType */: {
                         var grandParent = walkUpParentheses(parent.parent);
                         switch (grandParent.kind) {
-                            case 174 /* TypeReference */: {
+                            case 176 /* TypeReference */: {
                                 var typeReference_1 = grandParent;
                                 var typeArgument = ts.findAncestor(parent, function (n) { return n.parent === typeReference_1; });
                                 if (typeArgument) {
@@ -122517,7 +125178,7 @@
                                 }
                                 return undefined;
                             }
-                            case 190 /* IndexedAccessType */:
+                            case 192 /* IndexedAccessType */:
                                 // Get all apparent property names
                                 // i.e. interface Foo {
                                 //          foo: string;
@@ -122529,9 +125190,9 @@
                                     return undefined;
                                 }
                                 return stringLiteralCompletionsFromProperties(typeChecker.getTypeFromTypeNode(objectType));
-                            case 196 /* ImportType */:
+                            case 198 /* ImportType */:
                                 return { kind: 0 /* Paths */, paths: getStringLiteralCompletionsFromModuleNames(sourceFile, node, compilerOptions, host, typeChecker, preferences) };
-                            case 183 /* UnionType */: {
+                            case 185 /* UnionType */: {
                                 if (!ts.isTypeReferenceNode(grandParent.parent)) {
                                     return undefined;
                                 }
@@ -122543,7 +125204,7 @@
                                 return undefined;
                         }
                     }
-                    case 289 /* PropertyAssignment */:
+                    case 291 /* PropertyAssignment */:
                         if (ts.isObjectLiteralExpression(parent.parent) && parent.name === node) {
                             // Get quoted name of properties of the object literal expression
                             // i.e. interface ConfigFiles {
@@ -122560,7 +125221,7 @@
                             return stringLiteralCompletionsForObjectLiteral(typeChecker, parent.parent);
                         }
                         return fromContextualType();
-                    case 203 /* ElementAccessExpression */: {
+                    case 205 /* ElementAccessExpression */: {
                         var _b = parent, expression = _b.expression, argumentExpression = _b.argumentExpression;
                         if (node === ts.skipParentheses(argumentExpression)) {
                             // Get all names of properties on the expression
@@ -122573,19 +125234,19 @@
                         }
                         return undefined;
                     }
-                    case 204 /* CallExpression */:
-                    case 205 /* NewExpression */:
-                        if (!ts.isRequireCall(parent, /*checkArgumentIsStringLiteralLike*/ false) && !ts.isImportCall(parent)) {
+                    case 206 /* CallExpression */:
+                    case 207 /* NewExpression */:
+                        if (!isRequireCallArgument(node) && !ts.isImportCall(parent)) {
                             var argumentInfo = ts.SignatureHelp.getArgumentInfoForCompletions(node, position, sourceFile);
                             // Get string literal completions from specialized signatures of the target
                             // i.e. declare function f(a: 'A');
                             // f("/*completion position*/")
                             return argumentInfo ? getStringLiteralCompletionsFromSignature(argumentInfo, typeChecker) : fromContextualType();
                         }
-                    // falls through (is `require("")` or `import("")`)
-                    case 262 /* ImportDeclaration */:
-                    case 268 /* ExportDeclaration */:
-                    case 273 /* ExternalModuleReference */:
+                    // falls through (is `require("")` or `require(""` or `import("")`)
+                    case 264 /* ImportDeclaration */:
+                    case 270 /* ExportDeclaration */:
+                    case 275 /* ExternalModuleReference */:
                         // Get all known external module names or complete a path to a module
                         // i.e. import * as ns from "/*completion position*/";
                         //      var y = import("/*completion position*/");
@@ -122604,9 +125265,9 @@
             }
             function walkUpParentheses(node) {
                 switch (node.kind) {
-                    case 187 /* ParenthesizedType */:
+                    case 189 /* ParenthesizedType */:
                         return ts.walkUpParenthesizedTypes(node);
-                    case 208 /* ParenthesizedExpression */:
+                    case 210 /* ParenthesizedExpression */:
                         return ts.walkUpParenthesizedExpressions(node);
                     default:
                         return node;
@@ -122683,12 +125344,13 @@
                     ? getCompletionEntriesForRelativeModules(literalValue, scriptDirectory, compilerOptions, host, scriptPath, preferences)
                     : getCompletionEntriesForNonRelativeModules(literalValue, scriptDirectory, compilerOptions, host, typeChecker);
             }
-            function getExtensionOptions(compilerOptions, includeExtensions) {
-                if (includeExtensions === void 0) { includeExtensions = false; }
-                return { extensions: getSupportedExtensionsForModuleResolution(compilerOptions), includeExtensions: includeExtensions };
+            function getExtensionOptions(compilerOptions, includeExtensionsOption) {
+                if (includeExtensionsOption === void 0) { includeExtensionsOption = 0 /* Exclude */; }
+                return { extensions: getSupportedExtensionsForModuleResolution(compilerOptions), includeExtensionsOption: includeExtensionsOption };
             }
             function getCompletionEntriesForRelativeModules(literalValue, scriptDirectory, compilerOptions, host, scriptPath, preferences) {
-                var extensionOptions = getExtensionOptions(compilerOptions, preferences.importModuleSpecifierEnding === "js");
+                var includeExtensions = preferences.importModuleSpecifierEnding === "js" ? 2 /* ModuleSpecifierCompletion */ : 0 /* Exclude */;
+                var extensionOptions = getExtensionOptions(compilerOptions, includeExtensions);
                 if (compilerOptions.rootDirs) {
                     return getCompletionEntriesForDirectoryFragmentWithRootDirs(compilerOptions.rootDirs, literalValue, scriptDirectory, extensionOptions, compilerOptions, host, scriptPath);
                 }
@@ -122714,7 +125376,7 @@
                     return ts.containsPath(rootDirectory, scriptDirectory, basePath, ignoreCase) ? scriptDirectory.substr(rootDirectory.length) : undefined;
                 }); // TODO: GH#18217
                 // Now find a path for each potential directory that is to be merged with the one containing the script
-                return ts.deduplicate(__spreadArray(__spreadArray([], rootDirs.map(function (rootDirectory) { return ts.combinePaths(rootDirectory, relativeDirectory); })), [scriptDirectory]), ts.equateStringsCaseSensitive, ts.compareStringsCaseSensitive);
+                return ts.deduplicate(__spreadArray(__spreadArray([], rootDirs.map(function (rootDirectory) { return ts.combinePaths(rootDirectory, relativeDirectory); }), true), [scriptDirectory], false), ts.equateStringsCaseSensitive, ts.compareStringsCaseSensitive);
             }
             function getCompletionEntriesForDirectoryFragmentWithRootDirs(rootDirs, fragment, scriptDirectory, extensionOptions, compilerOptions, host, exclude) {
                 var basePath = compilerOptions.project || host.getCurrentDirectory();
@@ -122722,11 +125384,17 @@
                 var baseDirectories = getBaseDirectoriesFromRootDirs(rootDirs, basePath, scriptDirectory, ignoreCase);
                 return ts.flatMap(baseDirectories, function (baseDirectory) { return getCompletionEntriesForDirectoryFragment(fragment, baseDirectory, extensionOptions, host, exclude); });
             }
+            var IncludeExtensionsOption;
+            (function (IncludeExtensionsOption) {
+                IncludeExtensionsOption[IncludeExtensionsOption["Exclude"] = 0] = "Exclude";
+                IncludeExtensionsOption[IncludeExtensionsOption["Include"] = 1] = "Include";
+                IncludeExtensionsOption[IncludeExtensionsOption["ModuleSpecifierCompletion"] = 2] = "ModuleSpecifierCompletion";
+            })(IncludeExtensionsOption || (IncludeExtensionsOption = {}));
             /**
              * Given a path ending at a directory, gets the completions for the path, and filters for those entries containing the basename.
              */
             function getCompletionEntriesForDirectoryFragment(fragment, scriptPath, _a, host, exclude, result) {
-                var extensions = _a.extensions, includeExtensions = _a.includeExtensions;
+                var extensions = _a.extensions, includeExtensionsOption = _a.includeExtensionsOption;
                 if (result === void 0) { result = []; }
                 if (fragment === undefined) {
                     fragment = "";
@@ -122754,7 +125422,7 @@
                 if (files) {
                     /**
                      * Multiple file entries might map to the same truncated name once we remove extensions
-                     * (happens iff includeExtensions === false)so we use a set-like data structure. Eg:
+                     * (happens iff includeExtensionsOption === includeExtensionsOption.Exclude) so we use a set-like data structure. Eg:
                      *
                      * both foo.ts and foo.tsx become foo
                      */
@@ -122765,8 +125433,20 @@
                         if (exclude && ts.comparePaths(filePath, exclude, scriptPath, ignoreCase) === 0 /* EqualTo */) {
                             continue;
                         }
-                        var foundFileName = includeExtensions || ts.fileExtensionIs(filePath, ".json" /* Json */) ? ts.getBaseFileName(filePath) : ts.removeFileExtension(ts.getBaseFileName(filePath));
-                        foundFiles.set(foundFileName, ts.tryGetExtensionFromPath(filePath));
+                        var foundFileName = void 0;
+                        var outputExtension = ts.moduleSpecifiers.tryGetJSExtensionForFile(filePath, host.getCompilationSettings());
+                        if (includeExtensionsOption === 0 /* Exclude */ && !ts.fileExtensionIs(filePath, ".json" /* Json */)) {
+                            foundFileName = ts.removeFileExtension(ts.getBaseFileName(filePath));
+                            foundFiles.set(foundFileName, ts.tryGetExtensionFromPath(filePath));
+                        }
+                        else if (includeExtensionsOption === 2 /* ModuleSpecifierCompletion */ && outputExtension) {
+                            foundFileName = ts.changeExtension(ts.getBaseFileName(filePath), outputExtension);
+                            foundFiles.set(foundFileName, outputExtension);
+                        }
+                        else {
+                            foundFileName = ts.getBaseFileName(filePath);
+                            foundFiles.set(foundFileName, ts.tryGetExtensionFromPath(filePath));
+                        }
                     }
                     foundFiles.forEach(function (ext, foundFile) {
                         result.push(nameAndKind(foundFile, "script" /* scriptElement */, ext));
@@ -122891,8 +125571,8 @@
                 if (!host.readDirectory) {
                     return undefined;
                 }
-                var parsed = ts.hasZeroOrOneAsteriskCharacter(pattern) ? ts.tryParsePattern(pattern) : undefined;
-                if (!parsed) {
+                var parsed = ts.tryParsePattern(pattern);
+                if (parsed === undefined || ts.isString(parsed)) {
                     return undefined;
                 }
                 // The prefix has two effective parts: the directory path and the base component after the filepath that is not a
@@ -122921,7 +125601,7 @@
                     var name = trimPrefixAndSuffix(dir);
                     return name === undefined ? undefined : directoryResult(name);
                 });
-                return __spreadArray(__spreadArray([], matches), directories);
+                return __spreadArray(__spreadArray([], matches, true), directories, true);
                 function trimPrefixAndSuffix(path) {
                     var inner = withoutStartAndEnd(ts.normalizePath(path), completePrefix, normalizedSuffix);
                     return inner === undefined ? undefined : removeLeadingDirectorySeparator(inner);
@@ -122960,7 +125640,7 @@
                 }
                 var prefix = match[1], kind = match[2], toComplete = match[3];
                 var scriptPath = ts.getDirectoryPath(sourceFile.path);
-                var names = kind === "path" ? getCompletionEntriesForDirectoryFragment(toComplete, scriptPath, getExtensionOptions(compilerOptions, /*includeExtensions*/ true), host, sourceFile.path)
+                var names = kind === "path" ? getCompletionEntriesForDirectoryFragment(toComplete, scriptPath, getExtensionOptions(compilerOptions, 1 /* Include */), host, sourceFile.path)
                     : kind === "types" ? getCompletionEntriesFromTypings(host, compilerOptions, scriptPath, getFragmentDirectory(toComplete), getExtensionOptions(compilerOptions))
                         : ts.Debug.fail();
                 return addReplacementSpans(toComplete, range.pos + prefix.length, names);
@@ -123061,6 +125741,15 @@
             function containsSlash(fragment) {
                 return ts.stringContains(fragment, ts.directorySeparator);
             }
+            /**
+             * Matches
+             *   require(""
+             *   require("")
+             */
+            function isRequireCallArgument(node) {
+                return ts.isCallExpression(node.parent) && ts.firstOrUndefined(node.parent.arguments) === node
+                    && ts.isIdentifier(node.parent.expression) && node.parent.expression.escapedText === "require";
+            }
         })(StringCompletions = Completions.StringCompletions || (Completions.StringCompletions = {}));
     })(Completions = ts.Completions || (ts.Completions = {}));
 })(ts || (ts = {}));
@@ -123069,17 +125758,45 @@
 (function (ts) {
     var Completions;
     (function (Completions) {
+        // Exported only for tests
+        Completions.moduleSpecifierResolutionLimit = 100;
+        Completions.moduleSpecifierResolutionCacheAttemptLimit = 1000;
+        // NOTE: Make sure that each entry has the exact same number of digits
+        //       since many implementations will sort by string contents,
+        //       where "10" is considered less than "2".
         var SortText;
         (function (SortText) {
-            SortText["LocalDeclarationPriority"] = "0";
-            SortText["LocationPriority"] = "1";
-            SortText["OptionalMember"] = "2";
-            SortText["MemberDeclaredBySpreadAssignment"] = "3";
-            SortText["SuggestedClassMembers"] = "4";
-            SortText["GlobalsOrKeywords"] = "5";
-            SortText["AutoImportSuggestions"] = "6";
-            SortText["JavascriptIdentifiers"] = "7";
+            SortText["LocalDeclarationPriority"] = "10";
+            SortText["LocationPriority"] = "11";
+            SortText["OptionalMember"] = "12";
+            SortText["MemberDeclaredBySpreadAssignment"] = "13";
+            SortText["SuggestedClassMembers"] = "14";
+            SortText["GlobalsOrKeywords"] = "15";
+            SortText["AutoImportSuggestions"] = "16";
+            SortText["JavascriptIdentifiers"] = "17";
+            SortText["DeprecatedLocalDeclarationPriority"] = "18";
+            SortText["DeprecatedLocationPriority"] = "19";
+            SortText["DeprecatedOptionalMember"] = "20";
+            SortText["DeprecatedMemberDeclaredBySpreadAssignment"] = "21";
+            SortText["DeprecatedSuggestedClassMembers"] = "22";
+            SortText["DeprecatedGlobalsOrKeywords"] = "23";
+            SortText["DeprecatedAutoImportSuggestions"] = "24";
         })(SortText = Completions.SortText || (Completions.SortText = {}));
+        var SortTextId;
+        (function (SortTextId) {
+            SortTextId[SortTextId["LocalDeclarationPriority"] = 10] = "LocalDeclarationPriority";
+            SortTextId[SortTextId["LocationPriority"] = 11] = "LocationPriority";
+            SortTextId[SortTextId["OptionalMember"] = 12] = "OptionalMember";
+            SortTextId[SortTextId["MemberDeclaredBySpreadAssignment"] = 13] = "MemberDeclaredBySpreadAssignment";
+            SortTextId[SortTextId["SuggestedClassMembers"] = 14] = "SuggestedClassMembers";
+            SortTextId[SortTextId["GlobalsOrKeywords"] = 15] = "GlobalsOrKeywords";
+            SortTextId[SortTextId["AutoImportSuggestions"] = 16] = "AutoImportSuggestions";
+            // Don't use these directly.
+            SortTextId[SortTextId["_JavaScriptIdentifiers"] = 17] = "_JavaScriptIdentifiers";
+            SortTextId[SortTextId["_DeprecatedStart"] = 18] = "_DeprecatedStart";
+            SortTextId[SortTextId["_First"] = 10] = "_First";
+            SortTextId[SortTextId["DeprecatedOffset"] = 8] = "DeprecatedOffset";
+        })(SortTextId || (SortTextId = {}));
         /**
          * Special values for `CompletionInfo['source']` used to disambiguate
          * completion items with the same `name`. (Each completion item must
@@ -123149,11 +125866,48 @@
             GlobalsSearch[GlobalsSearch["Success"] = 1] = "Success";
             GlobalsSearch[GlobalsSearch["Fail"] = 2] = "Fail";
         })(GlobalsSearch || (GlobalsSearch = {}));
-        function getCompletionsAtPosition(host, program, log, sourceFile, position, preferences, triggerCharacter) {
-            var typeChecker = program.getTypeChecker();
-            var compilerOptions = program.getCompilerOptions();
-            var contextToken = ts.findPrecedingToken(position, sourceFile);
-            if (triggerCharacter && !ts.isInString(sourceFile, position, contextToken) && !isValidTrigger(sourceFile, triggerCharacter, contextToken, position)) {
+        function resolvingModuleSpecifiers(logPrefix, host, program, sourceFile, preferences, isForImportStatementCompletion, cb) {
+            var _a, _b, _c;
+            var start = ts.timestamp();
+            var resolutionLimitExceeded = false;
+            var ambientCount = 0;
+            var resolvedCount = 0;
+            var resolvedFromCacheCount = 0;
+            var cacheAttemptCount = 0;
+            var result = cb({ tryResolve: tryResolve, resolutionLimitExceeded: function () { return resolutionLimitExceeded; } });
+            var hitRateMessage = cacheAttemptCount ? " (" + (resolvedFromCacheCount / cacheAttemptCount * 100).toFixed(1) + "% hit rate)" : "";
+            (_a = host.log) === null || _a === void 0 ? void 0 : _a.call(host, logPrefix + ": resolved " + resolvedCount + " module specifiers, plus " + ambientCount + " ambient and " + resolvedFromCacheCount + " from cache" + hitRateMessage);
+            (_b = host.log) === null || _b === void 0 ? void 0 : _b.call(host, logPrefix + ": response is " + (resolutionLimitExceeded ? "incomplete" : "complete"));
+            (_c = host.log) === null || _c === void 0 ? void 0 : _c.call(host, logPrefix + ": " + (ts.timestamp() - start));
+            return result;
+            function tryResolve(exportInfo, isFromAmbientModule) {
+                if (isFromAmbientModule) {
+                    var result_1 = ts.codefix.getModuleSpecifierForBestExportInfo(exportInfo, sourceFile, program, host, preferences);
+                    if (result_1) {
+                        ambientCount++;
+                    }
+                    return result_1;
+                }
+                var shouldResolveModuleSpecifier = isForImportStatementCompletion || preferences.allowIncompleteCompletions && resolvedCount < Completions.moduleSpecifierResolutionLimit;
+                var shouldGetModuleSpecifierFromCache = !shouldResolveModuleSpecifier && preferences.allowIncompleteCompletions && cacheAttemptCount < Completions.moduleSpecifierResolutionCacheAttemptLimit;
+                var result = (shouldResolveModuleSpecifier || shouldGetModuleSpecifierFromCache)
+                    ? ts.codefix.getModuleSpecifierForBestExportInfo(exportInfo, sourceFile, program, host, preferences, shouldGetModuleSpecifierFromCache)
+                    : undefined;
+                if (!shouldResolveModuleSpecifier && !shouldGetModuleSpecifierFromCache || shouldGetModuleSpecifierFromCache && !result) {
+                    resolutionLimitExceeded = true;
+                }
+                resolvedCount += (result === null || result === void 0 ? void 0 : result.computedWithoutCacheCount) || 0;
+                resolvedFromCacheCount += exportInfo.length - resolvedCount;
+                if (shouldGetModuleSpecifierFromCache) {
+                    cacheAttemptCount++;
+                }
+                return result;
+            }
+        }
+        function getCompletionsAtPosition(host, program, log, sourceFile, position, preferences, triggerCharacter, completionKind, cancellationToken) {
+            var _a;
+            var previousToken = getRelevantTokens(position, sourceFile).previousToken;
+            if (triggerCharacter && !ts.isInString(sourceFile, position, previousToken) && !isValidTrigger(sourceFile, triggerCharacter, previousToken, position)) {
                 return undefined;
             }
             if (triggerCharacter === " ") {
@@ -123163,21 +125917,39 @@
                 }
                 return undefined;
             }
-            var stringCompletions = Completions.StringCompletions.getStringLiteralCompletions(sourceFile, position, contextToken, typeChecker, compilerOptions, host, log, preferences);
+            // If the request is a continuation of an earlier `isIncomplete` response,
+            // we can continue it from the cached previous response.
+            var typeChecker = program.getTypeChecker();
+            var compilerOptions = program.getCompilerOptions();
+            var incompleteCompletionsCache = preferences.allowIncompleteCompletions ? (_a = host.getIncompleteCompletionsCache) === null || _a === void 0 ? void 0 : _a.call(host) : undefined;
+            if (incompleteCompletionsCache && completionKind === 3 /* TriggerForIncompleteCompletions */ && previousToken && ts.isIdentifier(previousToken)) {
+                var incompleteContinuation = continuePreviousIncompleteResponse(incompleteCompletionsCache, sourceFile, previousToken, program, host, preferences, cancellationToken);
+                if (incompleteContinuation) {
+                    return incompleteContinuation;
+                }
+            }
+            else {
+                incompleteCompletionsCache === null || incompleteCompletionsCache === void 0 ? void 0 : incompleteCompletionsCache.clear();
+            }
+            var stringCompletions = Completions.StringCompletions.getStringLiteralCompletions(sourceFile, position, previousToken, typeChecker, compilerOptions, host, log, preferences);
             if (stringCompletions) {
                 return stringCompletions;
             }
-            if (contextToken && ts.isBreakOrContinueStatement(contextToken.parent)
-                && (contextToken.kind === 80 /* BreakKeyword */ || contextToken.kind === 85 /* ContinueKeyword */ || contextToken.kind === 78 /* Identifier */)) {
-                return getLabelCompletionAtPosition(contextToken.parent);
+            if (previousToken && ts.isBreakOrContinueStatement(previousToken.parent)
+                && (previousToken.kind === 81 /* BreakKeyword */ || previousToken.kind === 86 /* ContinueKeyword */ || previousToken.kind === 79 /* Identifier */)) {
+                return getLabelCompletionAtPosition(previousToken.parent);
             }
-            var completionData = getCompletionData(program, log, sourceFile, isUncheckedFile(sourceFile, compilerOptions), position, preferences, /*detailsEntryId*/ undefined, host);
+            var completionData = getCompletionData(program, log, sourceFile, isUncheckedFile(sourceFile, compilerOptions), position, preferences, /*detailsEntryId*/ undefined, host, cancellationToken);
             if (!completionData) {
                 return undefined;
             }
             switch (completionData.kind) {
                 case 0 /* Data */:
-                    return completionInfoFromData(sourceFile, typeChecker, compilerOptions, log, completionData, preferences);
+                    var response = completionInfoFromData(sourceFile, typeChecker, compilerOptions, log, completionData, preferences);
+                    if (response === null || response === void 0 ? void 0 : response.isIncomplete) {
+                        incompleteCompletionsCache === null || incompleteCompletionsCache === void 0 ? void 0 : incompleteCompletionsCache.set(response);
+                    }
+                    return response;
                 case 1 /* JsDocTagName */:
                     // If the current position is a jsDoc tag name, only tag names should be provided for completion
                     return jsdocCompletionInfo(ts.JsDoc.getJSDocTagNameCompletions());
@@ -123193,6 +125965,48 @@
             }
         }
         Completions.getCompletionsAtPosition = getCompletionsAtPosition;
+        function continuePreviousIncompleteResponse(cache, file, location, program, host, preferences, cancellationToken) {
+            var _a;
+            var previousResponse = cache.get();
+            if (!previousResponse)
+                return undefined;
+            var lowerCaseTokenText = location.text.toLowerCase();
+            var exportMap = ts.getExportInfoMap(file, host, program, cancellationToken);
+            var checker = program.getTypeChecker();
+            var autoImportProvider = (_a = host.getPackageJsonAutoImportProvider) === null || _a === void 0 ? void 0 : _a.call(host);
+            var autoImportProviderChecker = autoImportProvider === null || autoImportProvider === void 0 ? void 0 : autoImportProvider.getTypeChecker();
+            var newEntries = resolvingModuleSpecifiers("continuePreviousIncompleteResponse", host, program, file, preferences, 
+            /*isForImportStatementCompletion*/ false, function (context) {
+                var entries = ts.mapDefined(previousResponse.entries, function (entry) {
+                    if (!entry.hasAction || !entry.source || !entry.data || entry.data.moduleSpecifier) {
+                        // Not an auto import or already resolved; keep as is
+                        return entry;
+                    }
+                    if (!charactersFuzzyMatchInString(entry.name, lowerCaseTokenText)) {
+                        // No longer matches typed characters; filter out
+                        return undefined;
+                    }
+                    var _a = ts.Debug.checkDefined(getAutoImportSymbolFromCompletionEntryData(entry.name, entry.data, program, host)), symbol = _a.symbol, origin = _a.origin;
+                    var info = exportMap.get(file.path, entry.name, symbol, origin.moduleSymbol.name, origin.isFromPackageJson ? autoImportProviderChecker : checker);
+                    var result = info && context.tryResolve(info, !ts.isExternalModuleNameRelative(ts.stripQuotes(origin.moduleSymbol.name)));
+                    if (!result)
+                        return entry;
+                    var newOrigin = __assign(__assign({}, origin), { kind: 32 /* ResolvedExport */, moduleSpecifier: result.moduleSpecifier });
+                    // Mutating for performance... feels sketchy but nobody else uses the cache,
+                    // so why bother allocating a bunch of new objects?
+                    entry.data = originToCompletionEntryData(newOrigin);
+                    entry.source = getSourceFromOrigin(newOrigin);
+                    entry.sourceDisplay = [ts.textPart(newOrigin.moduleSpecifier)];
+                    return entry;
+                });
+                if (!context.resolutionLimitExceeded()) {
+                    previousResponse.isIncomplete = undefined;
+                }
+                return entries;
+            });
+            previousResponse.entries = newEntries;
+            return previousResponse;
+        }
         function jsdocCompletionInfo(entries) {
             return { isGlobalCompletion: false, isMemberCompletion: false, isNewIdentifierLocation: false, entries: entries };
         }
@@ -123211,10 +126025,10 @@
         }
         function getOptionalReplacementSpan(location) {
             // StringLiteralLike locations are handled separately in stringCompletions.ts
-            return (location === null || location === void 0 ? void 0 : location.kind) === 78 /* Identifier */ ? ts.createTextSpanFromNode(location) : undefined;
+            return (location === null || location === void 0 ? void 0 : location.kind) === 79 /* Identifier */ ? ts.createTextSpanFromNode(location) : undefined;
         }
         function completionInfoFromData(sourceFile, typeChecker, compilerOptions, log, completionData, preferences) {
-            var symbols = completionData.symbols, completionKind = completionData.completionKind, isInSnippetScope = completionData.isInSnippetScope, isNewIdentifierLocation = completionData.isNewIdentifierLocation, location = completionData.location, propertyAccessToConvert = completionData.propertyAccessToConvert, keywordFilters = completionData.keywordFilters, literals = completionData.literals, symbolToOriginInfoMap = completionData.symbolToOriginInfoMap, recommendedCompletion = completionData.recommendedCompletion, isJsxInitializer = completionData.isJsxInitializer, isTypeOnlyLocation = completionData.isTypeOnlyLocation, isJsxIdentifierExpected = completionData.isJsxIdentifierExpected, importCompletionNode = completionData.importCompletionNode, insideJsDocTagTypeExpression = completionData.insideJsDocTagTypeExpression, symbolToSortTextMap = completionData.symbolToSortTextMap;
+            var symbols = completionData.symbols, completionKind = completionData.completionKind, isInSnippetScope = completionData.isInSnippetScope, isNewIdentifierLocation = completionData.isNewIdentifierLocation, location = completionData.location, propertyAccessToConvert = completionData.propertyAccessToConvert, keywordFilters = completionData.keywordFilters, literals = completionData.literals, symbolToOriginInfoMap = completionData.symbolToOriginInfoMap, recommendedCompletion = completionData.recommendedCompletion, isJsxInitializer = completionData.isJsxInitializer, isTypeOnlyLocation = completionData.isTypeOnlyLocation, isJsxIdentifierExpected = completionData.isJsxIdentifierExpected, importCompletionNode = completionData.importCompletionNode, insideJsDocTagTypeExpression = completionData.insideJsDocTagTypeExpression, symbolToSortTextIdMap = completionData.symbolToSortTextIdMap, hasUnresolvedAutoImports = completionData.hasUnresolvedAutoImports;
             // Verify if the file is JSX language variant
             if (ts.getLanguageVariant(sourceFile.scriptKind) === 1 /* JSX */) {
                 var completionInfo = getJsxClosingTagCompletion(location, sourceFile);
@@ -123225,7 +126039,7 @@
             var entries = [];
             if (isUncheckedFile(sourceFile, compilerOptions)) {
                 var uniqueNames = getCompletionEntriesFromSymbols(symbols, entries, 
-                /* contextToken */ undefined, location, sourceFile, typeChecker, compilerOptions.target, log, completionKind, preferences, compilerOptions, isTypeOnlyLocation, propertyAccessToConvert, isJsxIdentifierExpected, isJsxInitializer, importCompletionNode, recommendedCompletion, symbolToOriginInfoMap, symbolToSortTextMap);
+                /* contextToken */ undefined, location, sourceFile, typeChecker, compilerOptions.target, log, completionKind, preferences, compilerOptions, isTypeOnlyLocation, propertyAccessToConvert, isJsxIdentifierExpected, isJsxInitializer, importCompletionNode, recommendedCompletion, symbolToOriginInfoMap, symbolToSortTextIdMap);
                 getJSCompletionEntries(sourceFile, location.pos, uniqueNames, compilerOptions.target, entries); // TODO: GH#18217
             }
             else {
@@ -123233,7 +126047,7 @@
                     return undefined;
                 }
                 getCompletionEntriesFromSymbols(symbols, entries, 
-                /* contextToken */ undefined, location, sourceFile, typeChecker, compilerOptions.target, log, completionKind, preferences, compilerOptions, isTypeOnlyLocation, propertyAccessToConvert, isJsxIdentifierExpected, isJsxInitializer, importCompletionNode, recommendedCompletion, symbolToOriginInfoMap, symbolToSortTextMap);
+                /* contextToken */ undefined, location, sourceFile, typeChecker, compilerOptions.target, log, completionKind, preferences, compilerOptions, isTypeOnlyLocation, propertyAccessToConvert, isJsxIdentifierExpected, isJsxInitializer, importCompletionNode, recommendedCompletion, symbolToOriginInfoMap, symbolToSortTextIdMap);
             }
             if (keywordFilters !== 0 /* None */) {
                 var entryNames = new ts.Set(entries.map(function (e) { return e.name; }));
@@ -123250,6 +126064,7 @@
             }
             return {
                 isGlobalCompletion: isInSnippetScope,
+                isIncomplete: preferences.allowIncompleteCompletions && hasUnresolvedAutoImports ? true : undefined,
                 isMemberCompletion: isMemberCompletionKind(completionKind),
                 isNewIdentifierLocation: isNewIdentifierLocation,
                 optionalReplacementSpan: getOptionalReplacementSpan(location),
@@ -123273,12 +126088,12 @@
             // We wanna walk up the tree till we find a JSX closing element
             var jsxClosingElement = ts.findAncestor(location, function (node) {
                 switch (node.kind) {
-                    case 277 /* JsxClosingElement */:
+                    case 279 /* JsxClosingElement */:
                         return true;
                     case 43 /* SlashToken */:
                     case 31 /* GreaterThanToken */:
-                    case 78 /* Identifier */:
-                    case 202 /* PropertyAccessExpression */:
+                    case 79 /* Identifier */:
+                    case 204 /* PropertyAccessExpression */:
                         return false;
                     default:
                         return "quit";
@@ -123345,6 +126160,7 @@
             var data;
             var isSnippet;
             var sourceDisplay;
+            var hasAction;
             var insertQuestionDot = origin && originIsNullableMember(origin);
             var useBraces = origin && originIsSymbolMember(origin) || needsConvertPropertyAccess;
             if (origin && originIsThisType(origin)) {
@@ -123389,22 +126205,18 @@
                 replacementSpan = ts.createTextSpanFromBounds(propertyAccessToConvert.getStart(sourceFile), propertyAccessToConvert.end);
             }
             if (originIsResolvedExport(origin)) {
-                ts.Debug.assertIsDefined(importCompletionNode);
-                (_a = getInsertTextAndReplacementSpanForImportCompletion(name, importCompletionNode, origin, useSemicolons, options, preferences), insertText = _a.insertText, replacementSpan = _a.replacementSpan);
                 sourceDisplay = [ts.textPart(origin.moduleSpecifier)];
-                isSnippet = preferences.includeCompletionsWithSnippetText ? true : undefined;
+                if (importCompletionNode) {
+                    (_a = getInsertTextAndReplacementSpanForImportCompletion(name, importCompletionNode, origin, useSemicolons, options, preferences), insertText = _a.insertText, replacementSpan = _a.replacementSpan);
+                    isSnippet = preferences.includeCompletionsWithSnippetText ? true : undefined;
+                }
             }
             if (insertText !== undefined && !preferences.includeCompletionsWithInsertText) {
                 return undefined;
             }
             if (originIsExport(origin) || originIsResolvedExport(origin)) {
-                data = {
-                    exportName: origin.exportName,
-                    fileName: origin.fileName,
-                    ambientModuleName: origin.fileName ? undefined : ts.stripQuotes(origin.moduleSymbol.name),
-                    isPackageJsonImport: origin.isFromPackageJson ? true : undefined,
-                    moduleSpecifier: originIsResolvedExport(origin) ? origin.moduleSpecifier : undefined,
-                };
+                data = originToCompletionEntryData(origin);
+                hasAction = !importCompletionNode;
             }
             // TODO(drosen): Right now we just permit *all* semantic meanings when calling
             // 'getSymbolKind' which is permissible given that it is backwards compatible; but
@@ -123419,17 +126231,26 @@
                 kindModifiers: ts.SymbolDisplay.getSymbolModifiers(typeChecker, symbol),
                 sortText: sortText,
                 source: getSourceFromOrigin(origin),
-                hasAction: origin && originIsExport(origin) || undefined,
+                hasAction: hasAction ? true : undefined,
                 isRecommended: isRecommendedCompletionMatch(symbol, recommendedCompletion, typeChecker) || undefined,
                 insertText: insertText,
                 replacementSpan: replacementSpan,
                 sourceDisplay: sourceDisplay,
                 isSnippet: isSnippet,
                 isPackageJsonImport: originIsPackageJsonImport(origin) || undefined,
-                isImportStatementCompletion: originIsResolvedExport(origin) || undefined,
+                isImportStatementCompletion: !!importCompletionNode || undefined,
                 data: data,
             };
         }
+        function originToCompletionEntryData(origin) {
+            return {
+                exportName: origin.exportName,
+                fileName: origin.fileName,
+                ambientModuleName: origin.fileName ? undefined : ts.stripQuotes(origin.moduleSymbol.name),
+                isPackageJsonImport: origin.isFromPackageJson ? true : undefined,
+                moduleSpecifier: originIsResolvedExport(origin) ? origin.moduleSpecifier : undefined,
+            };
+        }
         function getInsertTextAndReplacementSpanForImportCompletion(name, importCompletionNode, origin, useSemicolons, options, preferences) {
             var sourceFile = importCompletionNode.getSourceFile();
             var replacementSpan = ts.createTextSpanFromNode(importCompletionNode, sourceFile);
@@ -123438,12 +126259,12 @@
                 origin.exportName === "export=" /* ExportEquals */ ? 2 /* ExportEquals */ :
                     0 /* Named */;
             var tabStop = preferences.includeCompletionsWithSnippetText ? "$1" : "";
-            var importKind = ts.codefix.getImportKind(sourceFile, exportKind, options);
+            var importKind = ts.codefix.getImportKind(sourceFile, exportKind, options, /*forceImportKeyword*/ true);
             var suffix = useSemicolons ? ";" : "";
             switch (importKind) {
                 case 3 /* CommonJS */: return { replacementSpan: replacementSpan, insertText: "import " + name + tabStop + " = require(" + quotedModuleSpecifier + ")" + suffix };
                 case 1 /* Default */: return { replacementSpan: replacementSpan, insertText: "import " + name + tabStop + " from " + quotedModuleSpecifier + suffix };
-                case 2 /* Namespace */: return { replacementSpan: replacementSpan, insertText: "import * as " + name + tabStop + " from " + quotedModuleSpecifier + suffix };
+                case 2 /* Namespace */: return { replacementSpan: replacementSpan, insertText: "import * as " + name + " from " + quotedModuleSpecifier + suffix };
                 case 0 /* Named */: return { replacementSpan: replacementSpan, insertText: "import { " + name + tabStop + " } from " + quotedModuleSpecifier + suffix };
             }
         }
@@ -123468,7 +126289,8 @@
                 return CompletionSource.ThisProperty;
             }
         }
-        function getCompletionEntriesFromSymbols(symbols, entries, contextToken, location, sourceFile, typeChecker, target, log, kind, preferences, compilerOptions, isTypeOnlyLocation, propertyAccessToConvert, jsxIdentifierExpected, isJsxInitializer, importCompletionNode, recommendedCompletion, symbolToOriginInfoMap, symbolToSortTextMap) {
+        function getCompletionEntriesFromSymbols(symbols, entries, contextToken, location, sourceFile, typeChecker, target, log, kind, preferences, compilerOptions, isTypeOnlyLocation, propertyAccessToConvert, jsxIdentifierExpected, isJsxInitializer, importCompletionNode, recommendedCompletion, symbolToOriginInfoMap, symbolToSortTextIdMap) {
+            var _a;
             var start = ts.timestamp();
             var variableDeclaration = getVariableDeclaration(location);
             var useSemicolons = ts.probablyUsesSemicolons(sourceFile);
@@ -123481,11 +126303,13 @@
                 var symbol = symbols[i];
                 var origin = symbolToOriginInfoMap === null || symbolToOriginInfoMap === void 0 ? void 0 : symbolToOriginInfoMap[i];
                 var info = getCompletionEntryDisplayNameForSymbol(symbol, target, origin, kind, !!jsxIdentifierExpected);
-                if (!info || uniques.get(info.name) || kind === 1 /* Global */ && symbolToSortTextMap && !shouldIncludeSymbol(symbol, symbolToSortTextMap)) {
+                if (!info || uniques.get(info.name) || kind === 1 /* Global */ && symbolToSortTextIdMap && !shouldIncludeSymbol(symbol, symbolToSortTextIdMap)) {
                     continue;
                 }
                 var name = info.name, needsConvertPropertyAccess = info.needsConvertPropertyAccess;
-                var entry = createCompletionEntry(symbol, symbolToSortTextMap && symbolToSortTextMap[ts.getSymbolId(symbol)] || SortText.LocationPriority, contextToken, location, sourceFile, typeChecker, name, needsConvertPropertyAccess, origin, recommendedCompletion, propertyAccessToConvert, isJsxInitializer, importCompletionNode, useSemicolons, compilerOptions, preferences);
+                var sortTextId = (_a = symbolToSortTextIdMap === null || symbolToSortTextIdMap === void 0 ? void 0 : symbolToSortTextIdMap[ts.getSymbolId(symbol)]) !== null && _a !== void 0 ? _a : 11 /* LocationPriority */;
+                var sortText = (isDeprecated(symbol, typeChecker) ? 8 /* DeprecatedOffset */ + sortTextId : sortTextId).toString();
+                var entry = createCompletionEntry(symbol, sortText, contextToken, location, sourceFile, typeChecker, name, needsConvertPropertyAccess, origin, recommendedCompletion, propertyAccessToConvert, isJsxInitializer, importCompletionNode, useSemicolons, compilerOptions, preferences);
                 if (!entry) {
                     continue;
                 }
@@ -123502,7 +126326,7 @@
                 has: function (name) { return uniques.has(name); },
                 add: function (name) { return uniques.set(name, true); },
             };
-            function shouldIncludeSymbol(symbol, symbolToSortTextMap) {
+            function shouldIncludeSymbol(symbol, symbolToSortTextIdMap) {
                 if (!ts.isSourceFile(location)) {
                     // export = /**/ here we want to get all meanings, so any symbol is ok
                     if (ts.isExportAssignment(location.parent)) {
@@ -123523,9 +126347,9 @@
                     // Auto Imports are not available for scripts so this conditional is always false
                     if (!!sourceFile.externalModuleIndicator
                         && !compilerOptions.allowUmdGlobalAccess
-                        && symbolToSortTextMap[ts.getSymbolId(symbol)] === SortText.GlobalsOrKeywords
-                        && (symbolToSortTextMap[ts.getSymbolId(symbolOrigin)] === SortText.AutoImportSuggestions
-                            || symbolToSortTextMap[ts.getSymbolId(symbolOrigin)] === SortText.LocationPriority)) {
+                        && symbolToSortTextIdMap[ts.getSymbolId(symbol)] === 15 /* GlobalsOrKeywords */
+                        && (symbolToSortTextIdMap[ts.getSymbolId(symbolOrigin)] === 16 /* AutoImportSuggestions */
+                            || symbolToSortTextIdMap[ts.getSymbolId(symbolOrigin)] === 11 /* LocationPriority */)) {
                         return false;
                     }
                     // Continue with origin symbol
@@ -123641,7 +126465,7 @@
                 }
                 case "symbol": {
                     var symbol = symbolCompletion.symbol, location = symbolCompletion.location, origin = symbolCompletion.origin, previousToken = symbolCompletion.previousToken;
-                    var _a = getCompletionEntryCodeActionsAndSourceDisplay(origin, symbol, program, typeChecker, host, compilerOptions, sourceFile, position, previousToken, formatContext, preferences, entryId.data), codeActions = _a.codeActions, sourceDisplay = _a.sourceDisplay;
+                    var _a = getCompletionEntryCodeActionsAndSourceDisplay(origin, symbol, program, host, compilerOptions, sourceFile, position, previousToken, formatContext, preferences, entryId.data), codeActions = _a.codeActions, sourceDisplay = _a.sourceDisplay;
                     return createCompletionDetailsForSymbol(symbol, typeChecker, sourceFile, location, cancellationToken, codeActions, sourceDisplay); // TODO: GH#18217
                 }
                 case "literal": {
@@ -123670,16 +126494,22 @@
             return { name: name, kindModifiers: kindModifiers, kind: kind, displayParts: displayParts, documentation: documentation, tags: tags, codeActions: codeActions, source: source, sourceDisplay: source };
         }
         Completions.createCompletionDetails = createCompletionDetails;
-        function getCompletionEntryCodeActionsAndSourceDisplay(origin, symbol, program, checker, host, compilerOptions, sourceFile, position, previousToken, formatContext, preferences, data) {
+        function getCompletionEntryCodeActionsAndSourceDisplay(origin, symbol, program, host, compilerOptions, sourceFile, position, previousToken, formatContext, preferences, data) {
             if (data === null || data === void 0 ? void 0 : data.moduleSpecifier) {
-                return { codeActions: undefined, sourceDisplay: [ts.textPart(data.moduleSpecifier)] };
+                var _a = getRelevantTokens(position, sourceFile), contextToken = _a.contextToken, previousToken_1 = _a.previousToken;
+                if (previousToken_1 && getImportCompletionNode(contextToken || previousToken_1)) {
+                    // Import statement completion: 'import c|'
+                    return { codeActions: undefined, sourceDisplay: [ts.textPart(data.moduleSpecifier)] };
+                }
             }
-            if (!origin || !originIsExport(origin)) {
+            if (!origin || !(originIsExport(origin) || originIsResolvedExport(origin))) {
                 return { codeActions: undefined, sourceDisplay: undefined };
             }
+            var checker = origin.isFromPackageJson ? host.getPackageJsonAutoImportProvider().getTypeChecker() : program.getTypeChecker();
             var moduleSymbol = origin.moduleSymbol;
             var exportedSymbol = checker.getMergedSymbol(ts.skipAlias(symbol.exportSymbol || symbol, checker));
-            var _a = ts.codefix.getImportCompletionAction(exportedSymbol, moduleSymbol, sourceFile, ts.getNameForExportedSymbol(symbol, compilerOptions.target), host, program, formatContext, previousToken && ts.isIdentifier(previousToken) ? previousToken.getStart(sourceFile) : position, preferences), moduleSpecifier = _a.moduleSpecifier, codeAction = _a.codeAction;
+            var _b = ts.codefix.getImportCompletionAction(exportedSymbol, moduleSymbol, sourceFile, ts.getNameForExportedSymbol(symbol, compilerOptions.target), host, program, formatContext, previousToken && ts.isIdentifier(previousToken) ? previousToken.getStart(sourceFile) : position, preferences), moduleSpecifier = _b.moduleSpecifier, codeAction = _b.codeAction;
+            ts.Debug.assert(!(data === null || data === void 0 ? void 0 : data.moduleSpecifier) || moduleSpecifier === data.moduleSpecifier);
             return { sourceDisplay: [ts.textPart(moduleSpecifier)], codeActions: [codeAction] };
         }
         function getCompletionEntrySymbol(program, log, sourceFile, position, entryId, host, preferences) {
@@ -123717,25 +126547,25 @@
         function getContextualType(previousToken, position, sourceFile, checker) {
             var parent = previousToken.parent;
             switch (previousToken.kind) {
-                case 78 /* Identifier */:
+                case 79 /* Identifier */:
                     return ts.getContextualTypeFromParent(previousToken, checker);
-                case 62 /* EqualsToken */:
+                case 63 /* EqualsToken */:
                     switch (parent.kind) {
-                        case 250 /* VariableDeclaration */:
+                        case 252 /* VariableDeclaration */:
                             return checker.getContextualType(parent.initializer); // TODO: GH#18217
-                        case 217 /* BinaryExpression */:
+                        case 219 /* BinaryExpression */:
                             return checker.getTypeAtLocation(parent.left);
-                        case 281 /* JsxAttribute */:
+                        case 283 /* JsxAttribute */:
                             return checker.getContextualTypeForJsxAttribute(parent);
                         default:
                             return undefined;
                     }
-                case 102 /* NewKeyword */:
+                case 103 /* NewKeyword */:
                     return checker.getContextualType(parent);
-                case 81 /* CaseKeyword */:
+                case 82 /* CaseKeyword */:
                     return ts.getSwitchedType(ts.cast(parent, ts.isCaseClause), checker);
                 case 18 /* OpenBraceToken */:
-                    return ts.isJsxExpression(parent) && parent.parent.kind !== 274 /* JsxElement */ ? checker.getContextualTypeForJsxAttribute(parent.parent) : undefined;
+                    return ts.isJsxExpression(parent) && parent.parent.kind !== 276 /* JsxElement */ ? checker.getContextualTypeForJsxAttribute(parent.parent) : undefined;
                 default:
                     var argInfo = ts.SignatureHelp.getArgumentInfoForCompletions(previousToken, position, sourceFile);
                     return argInfo ?
@@ -123755,9 +126585,9 @@
         }
         function isModuleSymbol(symbol) {
             var _a;
-            return !!((_a = symbol.declarations) === null || _a === void 0 ? void 0 : _a.some(function (d) { return d.kind === 298 /* SourceFile */; }));
+            return !!((_a = symbol.declarations) === null || _a === void 0 ? void 0 : _a.some(function (d) { return d.kind === 300 /* SourceFile */; }));
         }
-        function getCompletionData(program, log, sourceFile, isUncheckedFile, position, preferences, detailsEntryId, host) {
+        function getCompletionData(program, log, sourceFile, isUncheckedFile, position, preferences, detailsEntryId, host, cancellationToken) {
             var typeChecker = program.getTypeChecker();
             var start = ts.timestamp();
             var currentToken = ts.getTokenAtPosition(sourceFile, position); // TODO: GH#15853
@@ -123806,11 +126636,11 @@
                     if (tag.tagName.pos <= position && position <= tag.tagName.end) {
                         return { kind: 1 /* JsDocTagName */ };
                     }
-                    if (isTagWithTypeExpression(tag) && tag.typeExpression && tag.typeExpression.kind === 302 /* JSDocTypeExpression */) {
+                    if (isTagWithTypeExpression(tag) && tag.typeExpression && tag.typeExpression.kind === 304 /* JSDocTypeExpression */) {
                         currentToken = ts.getTokenAtPosition(sourceFile, position);
                         if (!currentToken ||
                             (!ts.isDeclarationName(currentToken) &&
-                                (currentToken.parent.kind !== 337 /* JSDocPropertyTag */ ||
+                                (currentToken.parent.kind !== 342 /* JSDocPropertyTag */ ||
                                     currentToken.parent.name !== currentToken))) {
                             // Use as type location if inside tag's type expression
                             insideJsDocTagTypeExpression = isCurrentlyEditingNode(tag.typeExpression);
@@ -123828,18 +126658,12 @@
                 }
             }
             start = ts.timestamp();
-            var previousToken = ts.findPrecedingToken(position, sourceFile, /*startNode*/ undefined); // TODO: GH#18217
-            log("getCompletionData: Get previous token 1: " + (ts.timestamp() - start));
             // The decision to provide completion depends on the contextToken, which is determined through the previousToken.
             // Note: 'previousToken' (and thus 'contextToken') can be undefined if we are the beginning of the file
-            var contextToken = previousToken;
-            // Check if the caret is at the end of an identifier; this is a partial identifier that we want to complete: e.g. a.toS|
-            // Skip this partial identifier and adjust the contextToken to the token that precedes it.
-            if (contextToken && position <= contextToken.end && (ts.isMemberName(contextToken) || ts.isKeyword(contextToken.kind))) {
-                var start_1 = ts.timestamp();
-                contextToken = ts.findPrecedingToken(contextToken.getFullStart(), sourceFile, /*startNode*/ undefined); // TODO: GH#18217
-                log("getCompletionData: Get previous token 2: " + (ts.timestamp() - start_1));
-            }
+            var tokens = getRelevantTokens(position, sourceFile);
+            var previousToken = tokens.previousToken;
+            var contextToken = tokens.contextToken;
+            log("getCompletionData: Get previous token: " + (ts.timestamp() - start));
             // Find the node where completion is requested on.
             // Also determine whether we are trying to complete with members of that node
             // or attributes of a JSX tag.
@@ -123855,8 +126679,8 @@
             var location = ts.getTouchingPropertyName(sourceFile, position);
             if (contextToken) {
                 var importCompletionCandidate = getImportCompletionNode(contextToken);
-                if (importCompletionCandidate === 153 /* FromKeyword */) {
-                    return { kind: 4 /* Keywords */, keywords: [153 /* FromKeyword */] };
+                if (importCompletionCandidate === 154 /* FromKeyword */) {
+                    return { kind: 4 /* Keywords */, keywords: [154 /* FromKeyword */] };
                 }
                 // Import statement completions use `insertText`, and also require the `data` property of `CompletionEntryIdentifier`
                 // added in TypeScript 4.3 to be sent back from the client during `getCompletionEntryDetails`. Since this feature
@@ -123875,7 +126699,7 @@
                     isRightOfDot = contextToken.kind === 24 /* DotToken */;
                     isRightOfQuestionDot = contextToken.kind === 28 /* QuestionDotToken */;
                     switch (parent.kind) {
-                        case 202 /* PropertyAccessExpression */:
+                        case 204 /* PropertyAccessExpression */:
                             propertyAccessToConvert = parent;
                             node = propertyAccessToConvert.expression;
                             if ((ts.isCallExpression(node) || ts.isFunctionLike(node)) &&
@@ -123888,16 +126712,19 @@
                                 return undefined;
                             }
                             break;
-                        case 158 /* QualifiedName */:
+                        case 159 /* QualifiedName */:
                             node = parent.left;
                             break;
-                        case 257 /* ModuleDeclaration */:
+                        case 259 /* ModuleDeclaration */:
                             node = parent.name;
                             break;
-                        case 196 /* ImportType */:
-                        case 227 /* MetaProperty */:
+                        case 198 /* ImportType */:
                             node = parent;
                             break;
+                        case 229 /* MetaProperty */:
+                            node = parent.getFirstToken(sourceFile);
+                            ts.Debug.assert(node.kind === 100 /* ImportKeyword */ || node.kind === 103 /* NewKeyword */);
+                            break;
                         default:
                             // There is nothing that precedes the dot, so this likely just a stray character
                             // or leading into a '...' token. Just bail out instead.
@@ -123908,7 +126735,7 @@
                     // <UI.Test /* completion position */ />
                     // If the tagname is a property access expression, we will then walk up to the top most of property access expression.
                     // Then, try to get a JSX container and its associated attributes type.
-                    if (parent && parent.kind === 202 /* PropertyAccessExpression */) {
+                    if (parent && parent.kind === 204 /* PropertyAccessExpression */) {
                         contextToken = parent;
                         parent = parent.parent;
                     }
@@ -123916,45 +126743,46 @@
                     if (currentToken.parent === location) {
                         switch (currentToken.kind) {
                             case 31 /* GreaterThanToken */:
-                                if (currentToken.parent.kind === 274 /* JsxElement */ || currentToken.parent.kind === 276 /* JsxOpeningElement */) {
+                                if (currentToken.parent.kind === 276 /* JsxElement */ || currentToken.parent.kind === 278 /* JsxOpeningElement */) {
                                     location = currentToken;
                                 }
                                 break;
                             case 43 /* SlashToken */:
-                                if (currentToken.parent.kind === 275 /* JsxSelfClosingElement */) {
+                                if (currentToken.parent.kind === 277 /* JsxSelfClosingElement */) {
                                     location = currentToken;
                                 }
                                 break;
                         }
                     }
                     switch (parent.kind) {
-                        case 277 /* JsxClosingElement */:
+                        case 279 /* JsxClosingElement */:
                             if (contextToken.kind === 43 /* SlashToken */) {
                                 isStartingCloseTag = true;
                                 location = contextToken;
                             }
                             break;
-                        case 217 /* BinaryExpression */:
+                        case 219 /* BinaryExpression */:
                             if (!binaryExpressionMayBeOpenTag(parent)) {
                                 break;
                             }
                         // falls through
-                        case 275 /* JsxSelfClosingElement */:
-                        case 274 /* JsxElement */:
-                        case 276 /* JsxOpeningElement */:
+                        case 277 /* JsxSelfClosingElement */:
+                        case 276 /* JsxElement */:
+                        case 278 /* JsxOpeningElement */:
                             isJsxIdentifierExpected = true;
                             if (contextToken.kind === 29 /* LessThanToken */) {
                                 isRightOfOpenTag = true;
                                 location = contextToken;
                             }
                             break;
-                        case 284 /* JsxExpression */:
+                        case 286 /* JsxExpression */:
+                        case 285 /* JsxSpreadAttribute */:
                             // For `<div foo={true} [||] ></div>`, `parent` will be `{true}` and `previousToken` will be `}`
                             if (previousToken.kind === 19 /* CloseBraceToken */ && currentToken.kind === 31 /* GreaterThanToken */) {
                                 isJsxIdentifierExpected = true;
                             }
                             break;
-                        case 281 /* JsxAttribute */:
+                        case 283 /* JsxAttribute */:
                             // For `<div className="x" [||] ></div>`, `parent` will be JsxAttribute and `previousToken` will be its initializer
                             if (parent.initializer === previousToken &&
                                 previousToken.end < position) {
@@ -123962,16 +126790,16 @@
                                 break;
                             }
                             switch (previousToken.kind) {
-                                case 62 /* EqualsToken */:
+                                case 63 /* EqualsToken */:
                                     isJsxInitializer = true;
                                     break;
-                                case 78 /* Identifier */:
+                                case 79 /* Identifier */:
                                     isJsxIdentifierExpected = true;
                                     // For `<div x=[|f/**/|]`, `parent` will be `x` and `previousToken.parent` will be `f` (which is its own JsxAttribute)
                                     // Note for `<div someBool f>` we don't want to treat this as a jsx inializer, instead it's the attribute name.
                                     if (parent !== previousToken.parent &&
                                         !parent.initializer &&
-                                        ts.findChildOfKind(parent, 62 /* EqualsToken */, sourceFile)) {
+                                        ts.findChildOfKind(parent, 63 /* EqualsToken */, sourceFile)) {
                                         isJsxInitializer = previousToken;
                                     }
                             }
@@ -123983,13 +126811,14 @@
             var completionKind = 5 /* None */;
             var isNewIdentifierLocation = false;
             var isNonContextualObjectLiteral = false;
+            var hasUnresolvedAutoImports = false;
             var keywordFilters = 0 /* None */;
             // This also gets mutated in nested-functions after the return
             var symbols = [];
             var symbolToOriginInfoMap = [];
-            var symbolToSortTextMap = [];
+            var symbolToSortTextIdMap = [];
             var seenPropertySymbols = new ts.Map();
-            var isTypeOnly = isTypeOnlyCompletion();
+            var isTypeOnlyLocation = isTypeOnlyCompletion();
             var getModuleSpecifierResolutionHost = ts.memoizeOne(function (isFromPackageJson) {
                 return ts.createModuleSpecifierResolutionHost(isFromPackageJson ? host.getPackageJsonAutoImportProvider() : program, host);
             });
@@ -124039,18 +126868,19 @@
                 previousToken: previousToken,
                 isJsxInitializer: isJsxInitializer,
                 insideJsDocTagTypeExpression: insideJsDocTagTypeExpression,
-                symbolToSortTextMap: symbolToSortTextMap,
-                isTypeOnlyLocation: isTypeOnly,
+                symbolToSortTextIdMap: symbolToSortTextIdMap,
+                isTypeOnlyLocation: isTypeOnlyLocation,
                 isJsxIdentifierExpected: isJsxIdentifierExpected,
                 importCompletionNode: importCompletionNode,
+                hasUnresolvedAutoImports: hasUnresolvedAutoImports,
             };
             function isTagWithTypeExpression(tag) {
                 switch (tag.kind) {
-                    case 330 /* JSDocParameterTag */:
-                    case 337 /* JSDocPropertyTag */:
-                    case 331 /* JSDocReturnTag */:
-                    case 333 /* JSDocTypeTag */:
-                    case 335 /* JSDocTypedefTag */:
+                    case 335 /* JSDocParameterTag */:
+                    case 342 /* JSDocPropertyTag */:
+                    case 336 /* JSDocReturnTag */:
+                    case 338 /* JSDocTypeTag */:
+                    case 340 /* JSDocTypedefTag */:
                         return true;
                     default:
                         return false;
@@ -124077,7 +126907,7 @@
                             // Extract module or enum members
                             var exportedSymbols = typeChecker.getExportsOfModule(symbol);
                             ts.Debug.assertEachIsDefined(exportedSymbols, "getExportsOfModule() should all be defined");
-                            var isValidValueAccess_1 = function (symbol) { return typeChecker.isValidPropertyAccess(isImportType ? node : (node.parent), symbol.name); };
+                            var isValidValueAccess_1 = function (symbol) { return typeChecker.isValidPropertyAccess(isImportType ? node : node.parent, symbol.name); };
                             var isValidTypeAccess_1 = function (symbol) { return symbolCanBeReferencedAtTypeLocation(symbol, typeChecker); };
                             var isValidAccess = isNamespaceName
                                 // At `namespace N.M/**/`, if this is the only declaration of `M`, don't include `M` as a completion.
@@ -124095,7 +126925,7 @@
                             // If the module is merged with a value, we must get the type of the class and add its propertes (for inherited static methods).
                             if (!isTypeLocation &&
                                 symbol.declarations &&
-                                symbol.declarations.some(function (d) { return d.kind !== 298 /* SourceFile */ && d.kind !== 257 /* ModuleDeclaration */ && d.kind !== 256 /* EnumDeclaration */; })) {
+                                symbol.declarations.some(function (d) { return d.kind !== 300 /* SourceFile */ && d.kind !== 259 /* ModuleDeclaration */ && d.kind !== 258 /* EnumDeclaration */; })) {
                                 var type = typeChecker.getTypeOfSymbolAtLocation(symbol, node).getNonOptionalType();
                                 var insertQuestionDot = false;
                                 if (type.isNullableType()) {
@@ -124115,12 +126945,13 @@
                         }
                     }
                 }
-                if (ts.isMetaProperty(node) && (node.keywordToken === 102 /* NewKeyword */ || node.keywordToken === 99 /* ImportKeyword */) && contextToken === node.getChildAt(1)) {
-                    var completion = (node.keywordToken === 102 /* NewKeyword */) ? "target" : "meta";
-                    symbols.push(typeChecker.createSymbol(4 /* Property */, ts.escapeLeadingUnderscores(completion)));
-                    return;
-                }
                 if (!isTypeLocation) {
+                    // GH#39946. Pulling on the type of a node inside of a function with a contextual `this` parameter can result in a circularity
+                    // if the `node` is part of the exprssion of a `yield` or `return`. This circularity doesn't exist at compile time because
+                    // we will check (and cache) the type of `this` *before* checking the type of the node.
+                    var container = ts.getThisContainer(node, /*includeArrowFunctions*/ false);
+                    if (!ts.isSourceFile(container) && container.parent)
+                        typeChecker.getTypeAtLocation(container);
                     var type = typeChecker.getTypeAtLocation(node).getNonOptionalType();
                     var insertQuestionDot = false;
                     if (type.isNullableType()) {
@@ -124142,7 +126973,7 @@
                 if (isRightOfQuestionDot && ts.some(type.getCallSignatures())) {
                     isNewIdentifierLocation = true;
                 }
-                var propertyAccess = node.kind === 196 /* ImportType */ ? node : node.parent;
+                var propertyAccess = node.kind === 198 /* ImportType */ ? node : node.parent;
                 if (isUncheckedFile) {
                     // In javascript files, for union types, we don't just get the members that
                     // the individual types have in common, we also include all the members that
@@ -124213,7 +127044,7 @@
                 }
                 function addSymbolSortInfo(symbol) {
                     if (isStaticProperty(symbol)) {
-                        symbolToSortTextMap[ts.getSymbolId(symbol)] = SortText.LocalDeclarationPriority;
+                        symbolToSortTextIdMap[ts.getSymbolId(symbol)] = 10 /* LocalDeclarationPriority */;
                     }
                 }
                 function addSymbolOriginInfo(symbol) {
@@ -124273,7 +127104,8 @@
             function tryGetImportCompletionSymbols() {
                 if (!importCompletionNode)
                     return 0 /* Continue */;
-                collectAutoImports(/*resolveModuleSpecifiers*/ true);
+                isNewIdentifierLocation = true;
+                collectAutoImports();
                 return 1 /* Success */;
             }
             function getGlobalCompletions() {
@@ -124314,30 +127146,30 @@
                     position;
                 var scopeNode = getScopeNode(contextToken, adjustedPosition, sourceFile) || sourceFile;
                 isInSnippetScope = isSnippetScope(scopeNode);
-                var symbolMeanings = (isTypeOnly ? 0 /* None */ : 111551 /* Value */) | 788968 /* Type */ | 1920 /* Namespace */ | 2097152 /* Alias */;
+                var symbolMeanings = (isTypeOnlyLocation ? 0 /* None */ : 111551 /* Value */) | 788968 /* Type */ | 1920 /* Namespace */ | 2097152 /* Alias */;
                 symbols = ts.concatenate(symbols, typeChecker.getSymbolsInScope(scopeNode, symbolMeanings));
                 ts.Debug.assertEachIsDefined(symbols, "getSymbolsInScope() should all be defined");
                 for (var _i = 0, symbols_1 = symbols; _i < symbols_1.length; _i++) {
                     var symbol = symbols_1[_i];
                     if (!typeChecker.isArgumentsSymbol(symbol) &&
                         !ts.some(symbol.declarations, function (d) { return d.getSourceFile() === sourceFile; })) {
-                        symbolToSortTextMap[ts.getSymbolId(symbol)] = SortText.GlobalsOrKeywords;
+                        symbolToSortTextIdMap[ts.getSymbolId(symbol)] = 15 /* GlobalsOrKeywords */;
                     }
                 }
                 // Need to insert 'this.' before properties of `this` type, so only do that if `includeInsertTextCompletions`
-                if (preferences.includeCompletionsWithInsertText && scopeNode.kind !== 298 /* SourceFile */) {
+                if (preferences.includeCompletionsWithInsertText && scopeNode.kind !== 300 /* SourceFile */) {
                     var thisType = typeChecker.tryGetThisTypeAt(scopeNode, /*includeGlobalThis*/ false);
                     if (thisType && !isProbablyGlobalType(thisType, sourceFile, typeChecker)) {
                         for (var _a = 0, _b = getPropertiesForCompletion(thisType, typeChecker); _a < _b.length; _a++) {
                             var symbol = _b[_a];
                             symbolToOriginInfoMap[symbols.length] = { kind: 1 /* ThisType */ };
                             symbols.push(symbol);
-                            symbolToSortTextMap[ts.getSymbolId(symbol)] = SortText.SuggestedClassMembers;
+                            symbolToSortTextIdMap[ts.getSymbolId(symbol)] = 14 /* SuggestedClassMembers */;
                         }
                     }
                 }
-                collectAutoImports(/*resolveModuleSpecifier*/ false);
-                if (isTypeOnly) {
+                collectAutoImports();
+                if (isTypeOnlyLocation) {
                     keywordFilters = contextToken && ts.isAssertionExpression(contextToken.parent)
                         ? 6 /* TypeAssertionKeywords */
                         : 7 /* TypeKeywords */;
@@ -124364,10 +127196,10 @@
             }
             function isSnippetScope(scopeNode) {
                 switch (scopeNode.kind) {
-                    case 298 /* SourceFile */:
-                    case 219 /* TemplateExpression */:
-                    case 284 /* JsxExpression */:
-                    case 231 /* Block */:
+                    case 300 /* SourceFile */:
+                    case 221 /* TemplateExpression */:
+                    case 286 /* JsxExpression */:
+                    case 233 /* Block */:
                         return true;
                     default:
                         return ts.isStatement(scopeNode);
@@ -124382,129 +127214,109 @@
             }
             function isContextTokenValueLocation(contextToken) {
                 return contextToken &&
-                    ((contextToken.kind === 111 /* TypeOfKeyword */ &&
-                        (contextToken.parent.kind === 177 /* TypeQuery */ || ts.isTypeOfExpression(contextToken.parent))) ||
-                        (contextToken.kind === 127 /* AssertsKeyword */ && contextToken.parent.kind === 173 /* TypePredicate */));
+                    ((contextToken.kind === 112 /* TypeOfKeyword */ &&
+                        (contextToken.parent.kind === 179 /* TypeQuery */ || ts.isTypeOfExpression(contextToken.parent))) ||
+                        (contextToken.kind === 128 /* AssertsKeyword */ && contextToken.parent.kind === 175 /* TypePredicate */));
             }
             function isContextTokenTypeLocation(contextToken) {
                 if (contextToken) {
                     var parentKind = contextToken.parent.kind;
                     switch (contextToken.kind) {
                         case 58 /* ColonToken */:
-                            return parentKind === 164 /* PropertyDeclaration */ ||
-                                parentKind === 163 /* PropertySignature */ ||
-                                parentKind === 161 /* Parameter */ ||
-                                parentKind === 250 /* VariableDeclaration */ ||
+                            return parentKind === 165 /* PropertyDeclaration */ ||
+                                parentKind === 164 /* PropertySignature */ ||
+                                parentKind === 162 /* Parameter */ ||
+                                parentKind === 252 /* VariableDeclaration */ ||
                                 ts.isFunctionLikeKind(parentKind);
-                        case 62 /* EqualsToken */:
-                            return parentKind === 255 /* TypeAliasDeclaration */;
-                        case 126 /* AsKeyword */:
-                            return parentKind === 225 /* AsExpression */;
+                        case 63 /* EqualsToken */:
+                            return parentKind === 257 /* TypeAliasDeclaration */;
+                        case 127 /* AsKeyword */:
+                            return parentKind === 227 /* AsExpression */;
                         case 29 /* LessThanToken */:
-                            return parentKind === 174 /* TypeReference */ ||
-                                parentKind === 207 /* TypeAssertionExpression */;
-                        case 93 /* ExtendsKeyword */:
-                            return parentKind === 160 /* TypeParameter */;
+                            return parentKind === 176 /* TypeReference */ ||
+                                parentKind === 209 /* TypeAssertionExpression */;
+                        case 94 /* ExtendsKeyword */:
+                            return parentKind === 161 /* TypeParameter */;
                     }
                 }
                 return false;
             }
-            /** Mutates `symbols`, `symbolToOriginInfoMap`, and `symbolToSortTextMap` */
-            function collectAutoImports(resolveModuleSpecifiers) {
-                var _a, _b, _c, _d, _e;
+            /** Mutates `symbols`, `symbolToOriginInfoMap`, and `symbolToSortTextIdMap` */
+            function collectAutoImports() {
+                var _a, _b;
                 if (!shouldOfferImportCompletions())
                     return;
-                ts.Debug.assert(!(detailsEntryId === null || detailsEntryId === void 0 ? void 0 : detailsEntryId.data));
-                var start = ts.timestamp();
+                ts.Debug.assert(!(detailsEntryId === null || detailsEntryId === void 0 ? void 0 : detailsEntryId.data), "Should not run 'collectAutoImports' when faster path is available via `data`");
+                if (detailsEntryId && !detailsEntryId.source) {
+                    // Asking for completion details for an item that is not an auto-import
+                    return;
+                }
                 var moduleSpecifierCache = (_a = host.getModuleSpecifierCache) === null || _a === void 0 ? void 0 : _a.call(host);
-                (_b = host.log) === null || _b === void 0 ? void 0 : _b.call(host, "collectAutoImports: starting, " + (resolveModuleSpecifiers ? "" : "not ") + "resolving module specifiers");
-                if (moduleSpecifierCache) {
-                    (_c = host.log) === null || _c === void 0 ? void 0 : _c.call(host, "collectAutoImports: module specifier cache size: " + moduleSpecifierCache.count());
-                }
                 var lowerCaseTokenText = previousToken && ts.isIdentifier(previousToken) ? previousToken.text.toLowerCase() : "";
-                var exportInfo = ts.codefix.getSymbolToExportInfoMap(sourceFile, host, program);
-                var packageJsonAutoImportProvider = (_d = host.getPackageJsonAutoImportProvider) === null || _d === void 0 ? void 0 : _d.call(host);
-                var packageJsonFilter = detailsEntryId ? undefined : ts.createPackageJsonImportFilter(sourceFile, host);
-                exportInfo.forEach(function (info, key) {
-                    var symbolName = key.substring(0, key.indexOf("|"));
-                    if (!detailsEntryId && ts.isStringANonContextualKeyword(symbolName))
-                        return;
-                    var isCompletionDetailsMatch = detailsEntryId && ts.some(info, function (i) { return detailsEntryId.source === ts.stripQuotes(i.moduleSymbol.name); });
-                    if (isCompletionDetailsMatch || isNameMatch(symbolName)) {
-                        // If we don't need to resolve module specifiers, we can use any re-export that is importable at all
-                        // (We need to ensure that at least one is importable to show a completion.)
-                        var _a = resolveModuleSpecifiers
-                            ? ts.codefix.getModuleSpecifierForBestExportInfo(info, sourceFile, program, host, preferences)
-                            : { moduleSpecifier: undefined, exportInfo: ts.find(info, isImportableExportInfo) }, moduleSpecifier = _a.moduleSpecifier, exportInfo_1 = _a.exportInfo;
-                        if (!exportInfo_1)
+                var exportInfo = ts.getExportInfoMap(sourceFile, host, program, cancellationToken);
+                var packageJsonAutoImportProvider = (_b = host.getPackageJsonAutoImportProvider) === null || _b === void 0 ? void 0 : _b.call(host);
+                var packageJsonFilter = detailsEntryId ? undefined : ts.createPackageJsonImportFilter(sourceFile, preferences, host);
+                resolvingModuleSpecifiers("collectAutoImports", host, program, sourceFile, preferences, !!importCompletionNode, function (context) {
+                    exportInfo.forEach(sourceFile.path, function (info, symbolName, isFromAmbientModule) {
+                        if (!ts.isIdentifierText(symbolName, ts.getEmitScriptTarget(host.getCompilationSettings())))
                             return;
-                        var moduleFile = ts.tryCast(exportInfo_1.moduleSymbol.valueDeclaration, ts.isSourceFile);
-                        var isDefaultExport = exportInfo_1.exportKind === 1 /* Default */;
-                        var symbol = isDefaultExport && ts.getLocalSymbolForExportDefault(exportInfo_1.symbol) || exportInfo_1.symbol;
-                        pushAutoImportSymbol(symbol, {
-                            kind: resolveModuleSpecifiers ? 32 /* ResolvedExport */ : 4 /* Export */,
-                            moduleSpecifier: moduleSpecifier,
-                            symbolName: symbolName,
-                            exportName: exportInfo_1.exportKind === 2 /* ExportEquals */ ? "export=" /* ExportEquals */ : exportInfo_1.symbol.name,
-                            fileName: moduleFile === null || moduleFile === void 0 ? void 0 : moduleFile.fileName,
-                            isDefaultExport: isDefaultExport,
-                            moduleSymbol: exportInfo_1.moduleSymbol,
-                            isFromPackageJson: exportInfo_1.isFromPackageJson,
-                        });
-                    }
+                        if (!detailsEntryId && ts.isStringANonContextualKeyword(symbolName))
+                            return;
+                        // `targetFlags` should be the same for each `info`
+                        if (!isTypeOnlyLocation && !importCompletionNode && !(info[0].targetFlags & 111551 /* Value */))
+                            return;
+                        if (isTypeOnlyLocation && !(info[0].targetFlags & (1536 /* Module */ | 788968 /* Type */)))
+                            return;
+                        var isCompletionDetailsMatch = detailsEntryId && ts.some(info, function (i) { return detailsEntryId.source === ts.stripQuotes(i.moduleSymbol.name); });
+                        if (isCompletionDetailsMatch || !detailsEntryId && charactersFuzzyMatchInString(symbolName, lowerCaseTokenText)) {
+                            var defaultExportInfo = ts.find(info, isImportableExportInfo);
+                            if (!defaultExportInfo) {
+                                return;
+                            }
+                            // If we don't need to resolve module specifiers, we can use any re-export that is importable at all
+                            // (We need to ensure that at least one is importable to show a completion.)
+                            var _a = context.tryResolve(info, isFromAmbientModule) || {}, _b = _a.exportInfo, exportInfo_1 = _b === void 0 ? defaultExportInfo : _b, moduleSpecifier = _a.moduleSpecifier;
+                            var isDefaultExport = exportInfo_1.exportKind === 1 /* Default */;
+                            var symbol = isDefaultExport && ts.getLocalSymbolForExportDefault(exportInfo_1.symbol) || exportInfo_1.symbol;
+                            pushAutoImportSymbol(symbol, {
+                                kind: moduleSpecifier ? 32 /* ResolvedExport */ : 4 /* Export */,
+                                moduleSpecifier: moduleSpecifier,
+                                symbolName: symbolName,
+                                exportName: exportInfo_1.exportKind === 2 /* ExportEquals */ ? "export=" /* ExportEquals */ : exportInfo_1.symbol.name,
+                                fileName: exportInfo_1.moduleFileName,
+                                isDefaultExport: isDefaultExport,
+                                moduleSymbol: exportInfo_1.moduleSymbol,
+                                isFromPackageJson: exportInfo_1.isFromPackageJson,
+                            });
+                        }
+                    });
+                    hasUnresolvedAutoImports = context.resolutionLimitExceeded();
                 });
-                (_e = host.log) === null || _e === void 0 ? void 0 : _e.call(host, "collectAutoImports: done in " + (ts.timestamp() - start) + " ms");
-                function isNameMatch(symbolName) {
-                    var lowerCaseSymbolName = symbolName.toLowerCase();
-                    if (resolveModuleSpecifiers && lowerCaseTokenText) {
-                        // Use a more restrictive filter if resolving module specifiers since resolving module specifiers is expensive.
-                        return lowerCaseTokenText[0] === lowerCaseSymbolName[0] && stringContainsCharactersInOrder(lowerCaseSymbolName, lowerCaseTokenText);
-                    }
-                    return stringContainsCharactersInOrder(lowerCaseSymbolName, lowerCaseTokenText);
-                }
                 function isImportableExportInfo(info) {
                     var moduleFile = ts.tryCast(info.moduleSymbol.valueDeclaration, ts.isSourceFile);
                     if (!moduleFile) {
+                        var moduleName = ts.stripQuotes(info.moduleSymbol.name);
+                        if (ts.JsTyping.nodeCoreModules.has(moduleName) && ts.startsWith(moduleName, "node:") !== ts.shouldUseUriStyleNodeCoreModules(sourceFile, program)) {
+                            return false;
+                        }
                         return packageJsonFilter
                             ? packageJsonFilter.allowsImportingAmbientModule(info.moduleSymbol, getModuleSpecifierResolutionHost(info.isFromPackageJson))
                             : true;
                     }
-                    return ts.isImportableFile(info.isFromPackageJson ? packageJsonAutoImportProvider : program, sourceFile, moduleFile, packageJsonFilter, getModuleSpecifierResolutionHost(info.isFromPackageJson), moduleSpecifierCache);
+                    return ts.isImportableFile(info.isFromPackageJson ? packageJsonAutoImportProvider : program, sourceFile, moduleFile, preferences, packageJsonFilter, getModuleSpecifierResolutionHost(info.isFromPackageJson), moduleSpecifierCache);
                 }
             }
             function pushAutoImportSymbol(symbol, origin) {
                 var symbolId = ts.getSymbolId(symbol);
-                if (symbolToSortTextMap[symbolId] === SortText.GlobalsOrKeywords) {
+                if (symbolToSortTextIdMap[symbolId] === 15 /* GlobalsOrKeywords */) {
                     // If an auto-importable symbol is available as a global, don't add the auto import
                     return;
                 }
                 symbolToOriginInfoMap[symbols.length] = origin;
-                symbolToSortTextMap[symbolId] = importCompletionNode ? SortText.LocationPriority : SortText.AutoImportSuggestions;
+                symbolToSortTextIdMap[symbolId] = importCompletionNode ? 11 /* LocationPriority */ : 16 /* AutoImportSuggestions */;
                 symbols.push(symbol);
             }
             /**
-             * True if you could remove some characters in `a` to get `b`.
-             * E.g., true for "abcdef" and "bdf".
-             * But not true for "abcdef" and "dbf".
-             */
-            function stringContainsCharactersInOrder(str, characters) {
-                if (characters.length === 0) {
-                    return true;
-                }
-                var characterIndex = 0;
-                var len = str.length;
-                for (var strIndex = 0; strIndex < len; strIndex++) {
-                    if (str.charCodeAt(strIndex) === characters.charCodeAt(characterIndex)) {
-                        characterIndex++;
-                        if (characterIndex === characters.length) {
-                            return true;
-                        }
-                    }
-                }
-                // Did not find all characters
-                return false;
-            }
-            /**
              * Finds the first node that "embraces" the position, so that one may
              * accurately aggregate locals from the closest containing scope.
              */
@@ -124520,7 +127332,8 @@
                 var result = isInStringOrRegularExpressionOrTemplateLiteral(contextToken) ||
                     isSolelyIdentifierDefinitionLocation(contextToken) ||
                     isDotOfNumericLiteral(contextToken) ||
-                    isInJsxText(contextToken);
+                    isInJsxText(contextToken) ||
+                    ts.isBigIntLiteral(contextToken);
                 log("getCompletionsAtPosition: isCompletionListBlocker: " + (ts.timestamp() - start));
                 return result;
             }
@@ -124529,7 +127342,7 @@
                     return true;
                 }
                 if (contextToken.kind === 31 /* GreaterThanToken */ && contextToken.parent) {
-                    if (contextToken.parent.kind === 276 /* JsxOpeningElement */) {
+                    if (contextToken.parent.kind === 278 /* JsxOpeningElement */) {
                         // Two possibilities:
                         //   1. <div>/**/
                         //      - contextToken: GreaterThanToken (before cursor)
@@ -124539,10 +127352,10 @@
                         //      - contextToken: GreaterThanToken (before cursor)
                         //      - location: GreaterThanToken (after cursor)
                         //      - same parent (JSXOpeningElement)
-                        return location.parent.kind !== 276 /* JsxOpeningElement */;
+                        return location.parent.kind !== 278 /* JsxOpeningElement */;
                     }
-                    if (contextToken.parent.kind === 277 /* JsxClosingElement */ || contextToken.parent.kind === 275 /* JsxSelfClosingElement */) {
-                        return !!contextToken.parent.parent && contextToken.parent.parent.kind === 274 /* JsxElement */;
+                    if (contextToken.parent.kind === 279 /* JsxClosingElement */ || contextToken.parent.kind === 277 /* JsxSelfClosingElement */) {
+                        return !!contextToken.parent.parent && contextToken.parent.parent.kind === 276 /* JsxElement */;
                     }
                 }
                 return false;
@@ -124553,42 +127366,42 @@
                     // Previous token may have been a keyword that was converted to an identifier.
                     switch (keywordForNode(contextToken)) {
                         case 27 /* CommaToken */:
-                            return containingNodeKind === 204 /* CallExpression */ // func( a, |
-                                || containingNodeKind === 167 /* Constructor */ // constructor( a, |   /* public, protected, private keywords are allowed here, so show completion */
-                                || containingNodeKind === 205 /* NewExpression */ // new C(a, |
-                                || containingNodeKind === 200 /* ArrayLiteralExpression */ // [a, |
-                                || containingNodeKind === 217 /* BinaryExpression */ // const x = (a, |
-                                || containingNodeKind === 175 /* FunctionType */ // var x: (s: string, list|
-                                || containingNodeKind === 201 /* ObjectLiteralExpression */; // const obj = { x, |
+                            return containingNodeKind === 206 /* CallExpression */ // func( a, |
+                                || containingNodeKind === 169 /* Constructor */ // constructor( a, |   /* public, protected, private keywords are allowed here, so show completion */
+                                || containingNodeKind === 207 /* NewExpression */ // new C(a, |
+                                || containingNodeKind === 202 /* ArrayLiteralExpression */ // [a, |
+                                || containingNodeKind === 219 /* BinaryExpression */ // const x = (a, |
+                                || containingNodeKind === 177 /* FunctionType */ // var x: (s: string, list|
+                                || containingNodeKind === 203 /* ObjectLiteralExpression */; // const obj = { x, |
                         case 20 /* OpenParenToken */:
-                            return containingNodeKind === 204 /* CallExpression */ // func( |
-                                || containingNodeKind === 167 /* Constructor */ // constructor( |
-                                || containingNodeKind === 205 /* NewExpression */ // new C(a|
-                                || containingNodeKind === 208 /* ParenthesizedExpression */ // const x = (a|
-                                || containingNodeKind === 187 /* ParenthesizedType */; // function F(pred: (a| /* this can become an arrow function, where 'a' is the argument */
+                            return containingNodeKind === 206 /* CallExpression */ // func( |
+                                || containingNodeKind === 169 /* Constructor */ // constructor( |
+                                || containingNodeKind === 207 /* NewExpression */ // new C(a|
+                                || containingNodeKind === 210 /* ParenthesizedExpression */ // const x = (a|
+                                || containingNodeKind === 189 /* ParenthesizedType */; // function F(pred: (a| /* this can become an arrow function, where 'a' is the argument */
                         case 22 /* OpenBracketToken */:
-                            return containingNodeKind === 200 /* ArrayLiteralExpression */ // [ |
-                                || containingNodeKind === 172 /* IndexSignature */ // [ | : string ]
-                                || containingNodeKind === 159 /* ComputedPropertyName */; // [ |    /* this can become an index signature */
-                        case 139 /* ModuleKeyword */: // module |
-                        case 140 /* NamespaceKeyword */: // namespace |
+                            return containingNodeKind === 202 /* ArrayLiteralExpression */ // [ |
+                                || containingNodeKind === 174 /* IndexSignature */ // [ | : string ]
+                                || containingNodeKind === 160 /* ComputedPropertyName */; // [ |    /* this can become an index signature */
+                        case 140 /* ModuleKeyword */: // module |
+                        case 141 /* NamespaceKeyword */: // namespace |
                             return true;
                         case 24 /* DotToken */:
-                            return containingNodeKind === 257 /* ModuleDeclaration */; // module A.|
+                            return containingNodeKind === 259 /* ModuleDeclaration */; // module A.|
                         case 18 /* OpenBraceToken */:
-                            return containingNodeKind === 253 /* ClassDeclaration */ // class A { |
-                                || containingNodeKind === 201 /* ObjectLiteralExpression */; // const obj = { |
-                        case 62 /* EqualsToken */:
-                            return containingNodeKind === 250 /* VariableDeclaration */ // const x = a|
-                                || containingNodeKind === 217 /* BinaryExpression */; // x = a|
+                            return containingNodeKind === 255 /* ClassDeclaration */ // class A { |
+                                || containingNodeKind === 203 /* ObjectLiteralExpression */; // const obj = { |
+                        case 63 /* EqualsToken */:
+                            return containingNodeKind === 252 /* VariableDeclaration */ // const x = a|
+                                || containingNodeKind === 219 /* BinaryExpression */; // x = a|
                         case 15 /* TemplateHead */:
-                            return containingNodeKind === 219 /* TemplateExpression */; // `aa ${|
+                            return containingNodeKind === 221 /* TemplateExpression */; // `aa ${|
                         case 16 /* TemplateMiddle */:
-                            return containingNodeKind === 229 /* TemplateSpan */; // `aa ${10} dd ${|
-                        case 122 /* PublicKeyword */:
-                        case 120 /* PrivateKeyword */:
-                        case 121 /* ProtectedKeyword */:
-                            return containingNodeKind === 164 /* PropertyDeclaration */; // class A{ public |
+                            return containingNodeKind === 231 /* TemplateSpan */; // `aa ${10} dd ${|
+                        case 123 /* PublicKeyword */:
+                        case 121 /* PrivateKeyword */:
+                        case 122 /* ProtectedKeyword */:
+                            return containingNodeKind === 165 /* PropertyDeclaration */; // class A{ public |
                     }
                 }
                 return false;
@@ -124634,7 +127447,7 @@
                 completionKind = 0 /* ObjectPropertyDeclaration */;
                 var typeMembers;
                 var existingMembers;
-                if (objectLikeContainer.kind === 201 /* ObjectLiteralExpression */) {
+                if (objectLikeContainer.kind === 203 /* ObjectLiteralExpression */) {
                     var instantiatedType = tryGetObjectLiteralContextualType(objectLikeContainer, typeChecker);
                     // Check completions for Object property value shorthand
                     if (instantiatedType === undefined) {
@@ -124659,7 +127472,7 @@
                     }
                 }
                 else {
-                    ts.Debug.assert(objectLikeContainer.kind === 197 /* ObjectBindingPattern */);
+                    ts.Debug.assert(objectLikeContainer.kind === 199 /* ObjectBindingPattern */);
                     // We are *only* completing on properties from the type being destructured.
                     isNewIdentifierLocation = false;
                     var rootDeclaration = ts.getRootDeclaration(objectLikeContainer.parent);
@@ -124670,12 +127483,12 @@
                     // through type declaration or inference.
                     // Also proceed if rootDeclaration is a parameter and if its containing function expression/arrow function is contextually typed -
                     // type of parameter will flow in from the contextual type of the function
-                    var canGetType = ts.hasInitializer(rootDeclaration) || ts.hasType(rootDeclaration) || rootDeclaration.parent.parent.kind === 240 /* ForOfStatement */;
-                    if (!canGetType && rootDeclaration.kind === 161 /* Parameter */) {
+                    var canGetType = ts.hasInitializer(rootDeclaration) || ts.hasType(rootDeclaration) || rootDeclaration.parent.parent.kind === 242 /* ForOfStatement */;
+                    if (!canGetType && rootDeclaration.kind === 162 /* Parameter */) {
                         if (ts.isExpression(rootDeclaration.parent)) {
                             canGetType = !!typeChecker.getContextualType(rootDeclaration.parent);
                         }
-                        else if (rootDeclaration.parent.kind === 166 /* MethodDeclaration */ || rootDeclaration.parent.kind === 169 /* SetAccessor */) {
+                        else if (rootDeclaration.parent.kind === 167 /* MethodDeclaration */ || rootDeclaration.parent.kind === 171 /* SetAccessor */) {
                             canGetType = ts.isExpression(rootDeclaration.parent.parent) && !!typeChecker.getContextualType(rootDeclaration.parent.parent);
                         }
                     }
@@ -124722,9 +127535,9 @@
                 if (!namedImportsOrExports)
                     return 0 /* Continue */;
                 // try to show exported member for imported/re-exported module
-                var moduleSpecifier = (namedImportsOrExports.kind === 265 /* NamedImports */ ? namedImportsOrExports.parent.parent : namedImportsOrExports.parent).moduleSpecifier;
+                var moduleSpecifier = (namedImportsOrExports.kind === 267 /* NamedImports */ ? namedImportsOrExports.parent.parent : namedImportsOrExports.parent).moduleSpecifier;
                 if (!moduleSpecifier)
-                    return namedImportsOrExports.kind === 265 /* NamedImports */ ? 2 /* Fail */ : 0 /* Continue */;
+                    return namedImportsOrExports.kind === 267 /* NamedImports */ ? 2 /* Fail */ : 0 /* Continue */;
                 var moduleSpecifierSymbol = typeChecker.getSymbolAtLocation(moduleSpecifier); // TODO: GH#18217
                 if (!moduleSpecifierSymbol)
                     return 2 /* Fail */;
@@ -124759,7 +127572,7 @@
                     var _a, _b;
                     symbols.push(symbol);
                     if ((_b = (_a = localsContainer.symbol) === null || _a === void 0 ? void 0 : _a.exports) === null || _b === void 0 ? void 0 : _b.has(name)) {
-                        symbolToSortTextMap[ts.getSymbolId(symbol)] = SortText.OptionalMember;
+                        symbolToSortTextIdMap[ts.getSymbolId(symbol)] = 12 /* OptionalMember */;
                     }
                 });
                 return 1 /* Success */;
@@ -124784,7 +127597,7 @@
                 var classElement = contextToken.kind === 26 /* SemicolonToken */ ? contextToken.parent.parent : contextToken.parent;
                 var classElementModifierFlags = ts.isClassElement(classElement) ? ts.getEffectiveModifierFlags(classElement) : 0 /* None */;
                 // If this is context token is not something we are editing now, consider if this would lead to be modifier
-                if (contextToken.kind === 78 /* Identifier */ && !isCurrentlyEditingNode(contextToken)) {
+                if (contextToken.kind === 79 /* Identifier */ && !isCurrentlyEditingNode(contextToken)) {
                     switch (contextToken.getText()) {
                         case "private":
                             classElementModifierFlags = classElementModifierFlags | 8 /* Private */;
@@ -124797,6 +127610,9 @@
                             break;
                     }
                 }
+                if (ts.isClassStaticBlockDeclaration(classElement)) {
+                    classElementModifierFlags |= 32 /* Static */;
+                }
                 // No member list for private methods
                 if (!(classElementModifierFlags & 8 /* Private */)) {
                     // List of property symbols of base type that are not private and already implemented
@@ -124827,7 +127643,7 @@
                             break;
                         case 41 /* AsteriskToken */:
                             return ts.isMethodDeclaration(parent) ? ts.tryCast(parent.parent, ts.isObjectLiteralExpression) : undefined;
-                        case 78 /* Identifier */:
+                        case 79 /* Identifier */:
                             return contextToken.text === "async" && ts.isShorthandPropertyAssignment(contextToken.parent)
                                 ? contextToken.parent.parent : undefined;
                     }
@@ -124880,12 +127696,12 @@
                         case 31 /* GreaterThanToken */: // End of a type argument list
                         case 30 /* LessThanSlashToken */:
                         case 43 /* SlashToken */:
-                        case 78 /* Identifier */:
-                        case 202 /* PropertyAccessExpression */:
-                        case 282 /* JsxAttributes */:
-                        case 281 /* JsxAttribute */:
-                        case 283 /* JsxSpreadAttribute */:
-                            if (parent && (parent.kind === 275 /* JsxSelfClosingElement */ || parent.kind === 276 /* JsxOpeningElement */)) {
+                        case 79 /* Identifier */:
+                        case 204 /* PropertyAccessExpression */:
+                        case 284 /* JsxAttributes */:
+                        case 283 /* JsxAttribute */:
+                        case 285 /* JsxSpreadAttribute */:
+                            if (parent && (parent.kind === 277 /* JsxSelfClosingElement */ || parent.kind === 278 /* JsxOpeningElement */)) {
                                 if (contextToken.kind === 31 /* GreaterThanToken */) {
                                     var precedingToken = ts.findPrecedingToken(contextToken.pos, sourceFile, /*startNode*/ undefined);
                                     if (!parent.typeArguments || (precedingToken && precedingToken.kind === 43 /* SlashToken */))
@@ -124893,7 +127709,7 @@
                                 }
                                 return parent;
                             }
-                            else if (parent.kind === 281 /* JsxAttribute */) {
+                            else if (parent.kind === 283 /* JsxAttribute */) {
                                 // Currently we parse JsxOpeningLikeElement as:
                                 //      JsxOpeningLikeElement
                                 //          attributes: JsxAttributes
@@ -124905,7 +127721,7 @@
                         // its parent is a JsxExpression, whose parent is a JsxAttribute,
                         // whose parent is a JsxOpeningLikeElement
                         case 10 /* StringLiteral */:
-                            if (parent && ((parent.kind === 281 /* JsxAttribute */) || (parent.kind === 283 /* JsxSpreadAttribute */))) {
+                            if (parent && ((parent.kind === 283 /* JsxAttribute */) || (parent.kind === 285 /* JsxSpreadAttribute */))) {
                                 // Currently we parse JsxOpeningLikeElement as:
                                 //      JsxOpeningLikeElement
                                 //          attributes: JsxAttributes
@@ -124915,8 +127731,8 @@
                             break;
                         case 19 /* CloseBraceToken */:
                             if (parent &&
-                                parent.kind === 284 /* JsxExpression */ &&
-                                parent.parent && parent.parent.kind === 281 /* JsxAttribute */) {
+                                parent.kind === 286 /* JsxExpression */ &&
+                                parent.parent && parent.parent.kind === 283 /* JsxAttribute */) {
                                 // Currently we parse JsxOpeningLikeElement as:
                                 //      JsxOpeningLikeElement
                                 //          attributes: JsxAttributes
@@ -124924,7 +127740,7 @@
                                 //                  each JsxAttribute can have initializer as JsxExpression
                                 return parent.parent.parent.parent;
                             }
-                            if (parent && parent.kind === 283 /* JsxSpreadAttribute */) {
+                            if (parent && parent.kind === 285 /* JsxSpreadAttribute */) {
                                 // Currently we parse JsxOpeningLikeElement as:
                                 //      JsxOpeningLikeElement
                                 //          attributes: JsxAttributes
@@ -124944,62 +127760,62 @@
                 var containingNodeKind = parent.kind;
                 switch (contextToken.kind) {
                     case 27 /* CommaToken */:
-                        return containingNodeKind === 250 /* VariableDeclaration */ ||
+                        return containingNodeKind === 252 /* VariableDeclaration */ ||
                             isVariableDeclarationListButNotTypeArgument(contextToken) ||
-                            containingNodeKind === 233 /* VariableStatement */ ||
-                            containingNodeKind === 256 /* EnumDeclaration */ || // enum a { foo, |
+                            containingNodeKind === 235 /* VariableStatement */ ||
+                            containingNodeKind === 258 /* EnumDeclaration */ || // enum a { foo, |
                             isFunctionLikeButNotConstructor(containingNodeKind) ||
-                            containingNodeKind === 254 /* InterfaceDeclaration */ || // interface A<T, |
-                            containingNodeKind === 198 /* ArrayBindingPattern */ || // var [x, y|
-                            containingNodeKind === 255 /* TypeAliasDeclaration */ || // type Map, K, |
+                            containingNodeKind === 256 /* InterfaceDeclaration */ || // interface A<T, |
+                            containingNodeKind === 200 /* ArrayBindingPattern */ || // var [x, y|
+                            containingNodeKind === 257 /* TypeAliasDeclaration */ || // type Map, K, |
                             // class A<T, |
                             // var C = class D<T, |
                             (ts.isClassLike(parent) &&
                                 !!parent.typeParameters &&
                                 parent.typeParameters.end >= contextToken.pos);
                     case 24 /* DotToken */:
-                        return containingNodeKind === 198 /* ArrayBindingPattern */; // var [.|
+                        return containingNodeKind === 200 /* ArrayBindingPattern */; // var [.|
                     case 58 /* ColonToken */:
-                        return containingNodeKind === 199 /* BindingElement */; // var {x :html|
+                        return containingNodeKind === 201 /* BindingElement */; // var {x :html|
                     case 22 /* OpenBracketToken */:
-                        return containingNodeKind === 198 /* ArrayBindingPattern */; // var [x|
+                        return containingNodeKind === 200 /* ArrayBindingPattern */; // var [x|
                     case 20 /* OpenParenToken */:
-                        return containingNodeKind === 288 /* CatchClause */ ||
+                        return containingNodeKind === 290 /* CatchClause */ ||
                             isFunctionLikeButNotConstructor(containingNodeKind);
                     case 18 /* OpenBraceToken */:
-                        return containingNodeKind === 256 /* EnumDeclaration */; // enum a { |
+                        return containingNodeKind === 258 /* EnumDeclaration */; // enum a { |
                     case 29 /* LessThanToken */:
-                        return containingNodeKind === 253 /* ClassDeclaration */ || // class A< |
-                            containingNodeKind === 222 /* ClassExpression */ || // var C = class D< |
-                            containingNodeKind === 254 /* InterfaceDeclaration */ || // interface A< |
-                            containingNodeKind === 255 /* TypeAliasDeclaration */ || // type List< |
+                        return containingNodeKind === 255 /* ClassDeclaration */ || // class A< |
+                            containingNodeKind === 224 /* ClassExpression */ || // var C = class D< |
+                            containingNodeKind === 256 /* InterfaceDeclaration */ || // interface A< |
+                            containingNodeKind === 257 /* TypeAliasDeclaration */ || // type List< |
                             ts.isFunctionLikeKind(containingNodeKind);
-                    case 123 /* StaticKeyword */:
-                        return containingNodeKind === 164 /* PropertyDeclaration */ && !ts.isClassLike(parent.parent);
+                    case 124 /* StaticKeyword */:
+                        return containingNodeKind === 165 /* PropertyDeclaration */ && !ts.isClassLike(parent.parent);
                     case 25 /* DotDotDotToken */:
-                        return containingNodeKind === 161 /* Parameter */ ||
-                            (!!parent.parent && parent.parent.kind === 198 /* ArrayBindingPattern */); // var [...z|
-                    case 122 /* PublicKeyword */:
-                    case 120 /* PrivateKeyword */:
-                    case 121 /* ProtectedKeyword */:
-                        return containingNodeKind === 161 /* Parameter */ && !ts.isConstructorDeclaration(parent.parent);
-                    case 126 /* AsKeyword */:
-                        return containingNodeKind === 266 /* ImportSpecifier */ ||
-                            containingNodeKind === 271 /* ExportSpecifier */ ||
-                            containingNodeKind === 264 /* NamespaceImport */;
-                    case 134 /* GetKeyword */:
-                    case 146 /* SetKeyword */:
+                        return containingNodeKind === 162 /* Parameter */ ||
+                            (!!parent.parent && parent.parent.kind === 200 /* ArrayBindingPattern */); // var [...z|
+                    case 123 /* PublicKeyword */:
+                    case 121 /* PrivateKeyword */:
+                    case 122 /* ProtectedKeyword */:
+                        return containingNodeKind === 162 /* Parameter */ && !ts.isConstructorDeclaration(parent.parent);
+                    case 127 /* AsKeyword */:
+                        return containingNodeKind === 268 /* ImportSpecifier */ ||
+                            containingNodeKind === 273 /* ExportSpecifier */ ||
+                            containingNodeKind === 266 /* NamespaceImport */;
+                    case 135 /* GetKeyword */:
+                    case 147 /* SetKeyword */:
                         return !isFromObjectTypeDeclaration(contextToken);
-                    case 83 /* ClassKeyword */:
-                    case 91 /* EnumKeyword */:
-                    case 117 /* InterfaceKeyword */:
-                    case 97 /* FunctionKeyword */:
-                    case 112 /* VarKeyword */:
-                    case 99 /* ImportKeyword */:
-                    case 118 /* LetKeyword */:
-                    case 84 /* ConstKeyword */:
-                    case 135 /* InferKeyword */:
-                    case 149 /* TypeKeyword */: // type htm|
+                    case 84 /* ClassKeyword */:
+                    case 92 /* EnumKeyword */:
+                    case 118 /* InterfaceKeyword */:
+                    case 98 /* FunctionKeyword */:
+                    case 113 /* VarKeyword */:
+                    case 100 /* ImportKeyword */:
+                    case 119 /* LetKeyword */:
+                    case 85 /* ConstKeyword */:
+                    case 136 /* InferKeyword */:
+                    case 150 /* TypeKeyword */: // type htm|
                         return true;
                     case 41 /* AsteriskToken */:
                         return ts.isFunctionLike(contextToken.parent) && !ts.isMethodDeclaration(contextToken.parent);
@@ -125022,21 +127838,21 @@
                 }
                 // Previous token may have been a keyword that was converted to an identifier.
                 switch (keywordForNode(contextToken)) {
-                    case 125 /* AbstractKeyword */:
-                    case 83 /* ClassKeyword */:
-                    case 84 /* ConstKeyword */:
-                    case 133 /* DeclareKeyword */:
-                    case 91 /* EnumKeyword */:
-                    case 97 /* FunctionKeyword */:
-                    case 117 /* InterfaceKeyword */:
-                    case 118 /* LetKeyword */:
-                    case 120 /* PrivateKeyword */:
-                    case 121 /* ProtectedKeyword */:
-                    case 122 /* PublicKeyword */:
-                    case 123 /* StaticKeyword */:
-                    case 112 /* VarKeyword */:
+                    case 126 /* AbstractKeyword */:
+                    case 84 /* ClassKeyword */:
+                    case 85 /* ConstKeyword */:
+                    case 134 /* DeclareKeyword */:
+                    case 92 /* EnumKeyword */:
+                    case 98 /* FunctionKeyword */:
+                    case 118 /* InterfaceKeyword */:
+                    case 119 /* LetKeyword */:
+                    case 121 /* PrivateKeyword */:
+                    case 122 /* ProtectedKeyword */:
+                    case 123 /* PublicKeyword */:
+                    case 124 /* StaticKeyword */:
+                    case 113 /* VarKeyword */:
                         return true;
-                    case 129 /* AsyncKeyword */:
+                    case 130 /* AsyncKeyword */:
                         return ts.isPropertyDeclaration(contextToken.parent);
                 }
                 // If we are inside a class declaration, and `constructor` is totally not present,
@@ -125045,7 +127861,7 @@
                 if (ancestorClassLike && contextToken === previousToken && isPreviousPropertyDeclarationTerminated(contextToken, position)) {
                     return false; // Don't block completions.
                 }
-                var ancestorPropertyDeclaraion = ts.getAncestor(contextToken.parent, 164 /* PropertyDeclaration */);
+                var ancestorPropertyDeclaraion = ts.getAncestor(contextToken.parent, 165 /* PropertyDeclaration */);
                 // If we are inside a class declaration and typing `constructor` after property declaration...
                 if (ancestorPropertyDeclaraion
                     && contextToken !== previousToken
@@ -125056,7 +127872,7 @@
                     if (isPreviousPropertyDeclarationTerminated(contextToken, previousToken.end)) {
                         return false; // Don't block completions.
                     }
-                    else if (contextToken.kind !== 62 /* EqualsToken */
+                    else if (contextToken.kind !== 63 /* EqualsToken */
                         // Should not block: `class C { blah = c/**/ }`
                         // But should block: `class C { blah = somewhat c/**/ }` and `class C { blah: SomeType c/**/ }`
                         && (ts.isInitializedProperty(ancestorPropertyDeclaraion)
@@ -125072,12 +127888,12 @@
                     && !(ts.isClassLike(contextToken.parent) && (contextToken !== previousToken || position > previousToken.end));
             }
             function isPreviousPropertyDeclarationTerminated(contextToken, position) {
-                return contextToken.kind !== 62 /* EqualsToken */ &&
+                return contextToken.kind !== 63 /* EqualsToken */ &&
                     (contextToken.kind === 26 /* SemicolonToken */
                         || !ts.positionsAreOnSameLine(contextToken.end, position, sourceFile));
             }
             function isFunctionLikeButNotConstructor(kind) {
-                return ts.isFunctionLikeKind(kind) && kind !== 167 /* Constructor */;
+                return ts.isFunctionLikeKind(kind) && kind !== 169 /* Constructor */;
             }
             function isDotOfNumericLiteral(contextToken) {
                 if (contextToken.kind === 8 /* NumericLiteral */) {
@@ -125087,7 +127903,7 @@
                 return false;
             }
             function isVariableDeclarationListButNotTypeArgument(node) {
-                return node.parent.kind === 251 /* VariableDeclarationList */
+                return node.parent.kind === 253 /* VariableDeclarationList */
                     && !ts.isPossiblyTypeArgumentPosition(node, sourceFile, typeChecker);
             }
             /**
@@ -125105,13 +127921,13 @@
                 for (var _i = 0, existingMembers_1 = existingMembers; _i < existingMembers_1.length; _i++) {
                     var m = existingMembers_1[_i];
                     // Ignore omitted expressions for missing members
-                    if (m.kind !== 289 /* PropertyAssignment */ &&
-                        m.kind !== 290 /* ShorthandPropertyAssignment */ &&
-                        m.kind !== 199 /* BindingElement */ &&
-                        m.kind !== 166 /* MethodDeclaration */ &&
-                        m.kind !== 168 /* GetAccessor */ &&
-                        m.kind !== 169 /* SetAccessor */ &&
-                        m.kind !== 291 /* SpreadAssignment */) {
+                    if (m.kind !== 291 /* PropertyAssignment */ &&
+                        m.kind !== 292 /* ShorthandPropertyAssignment */ &&
+                        m.kind !== 201 /* BindingElement */ &&
+                        m.kind !== 167 /* MethodDeclaration */ &&
+                        m.kind !== 170 /* GetAccessor */ &&
+                        m.kind !== 171 /* SetAccessor */ &&
+                        m.kind !== 293 /* SpreadAssignment */) {
                         continue;
                     }
                     // If this is the current item we are editing right now, do not filter it out
@@ -125124,7 +127940,7 @@
                     }
                     else if (ts.isBindingElement(m) && m.propertyName) {
                         // include only identifiers in completion list
-                        if (m.propertyName.kind === 78 /* Identifier */) {
+                        if (m.propertyName.kind === 79 /* Identifier */) {
                             existingName = m.propertyName.escapedText;
                         }
                     }
@@ -125157,8 +127973,10 @@
             // Set SortText to OptionalMember if it is an optional member
             function setSortTextToOptionalMember() {
                 symbols.forEach(function (m) {
+                    var _a;
                     if (m.flags & 16777216 /* Optional */) {
-                        symbolToSortTextMap[ts.getSymbolId(m)] = symbolToSortTextMap[ts.getSymbolId(m)] || SortText.OptionalMember;
+                        var symbolId = ts.getSymbolId(m);
+                        symbolToSortTextIdMap[symbolId] = (_a = symbolToSortTextIdMap[symbolId]) !== null && _a !== void 0 ? _a : 12 /* OptionalMember */;
                     }
                 });
             }
@@ -125170,7 +127988,7 @@
                 for (var _i = 0, contextualMemberSymbols_1 = contextualMemberSymbols; _i < contextualMemberSymbols_1.length; _i++) {
                     var contextualMemberSymbol = contextualMemberSymbols_1[_i];
                     if (membersDeclaredBySpreadAssignment.has(contextualMemberSymbol.name)) {
-                        symbolToSortTextMap[ts.getSymbolId(contextualMemberSymbol)] = SortText.MemberDeclaredBySpreadAssignment;
+                        symbolToSortTextIdMap[ts.getSymbolId(contextualMemberSymbol)] = 13 /* MemberDeclaredBySpreadAssignment */;
                     }
                 }
             }
@@ -125184,10 +128002,10 @@
                 for (var _i = 0, existingMembers_2 = existingMembers; _i < existingMembers_2.length; _i++) {
                     var m = existingMembers_2[_i];
                     // Ignore omitted expressions for missing members
-                    if (m.kind !== 164 /* PropertyDeclaration */ &&
-                        m.kind !== 166 /* MethodDeclaration */ &&
-                        m.kind !== 168 /* GetAccessor */ &&
-                        m.kind !== 169 /* SetAccessor */) {
+                    if (m.kind !== 165 /* PropertyDeclaration */ &&
+                        m.kind !== 167 /* MethodDeclaration */ &&
+                        m.kind !== 170 /* GetAccessor */ &&
+                        m.kind !== 171 /* SetAccessor */) {
                         continue;
                     }
                     // If this is the current item we are editing right now, do not filter it out
@@ -125199,7 +128017,7 @@
                         continue;
                     }
                     // do not filter it out if the static presence doesnt match
-                    if (ts.hasEffectiveModifier(m, 32 /* Static */) !== !!(currentClassElementModifierFlags & 32 /* Static */)) {
+                    if (ts.isStatic(m) !== !!(currentClassElementModifierFlags & 32 /* Static */)) {
                         continue;
                     }
                     var existingName = ts.getPropertyNameForPropertyNameNode(m.name);
@@ -125229,7 +128047,7 @@
                     if (isCurrentlyEditingNode(attr)) {
                         continue;
                     }
-                    if (attr.kind === 281 /* JsxAttribute */) {
+                    if (attr.kind === 283 /* JsxAttribute */) {
                         seenNames.add(attr.name.escapedText);
                     }
                     else if (ts.isJsxSpreadAttribute(attr)) {
@@ -125244,6 +128062,14 @@
                 return node.getStart(sourceFile) <= position && position <= node.getEnd();
             }
         }
+        function getRelevantTokens(position, sourceFile) {
+            var previousToken = ts.findPrecedingToken(position, sourceFile);
+            if (previousToken && position <= previousToken.end && (ts.isMemberName(previousToken) || ts.isKeyword(previousToken.kind))) {
+                var contextToken = ts.findPrecedingToken(previousToken.getFullStart(), sourceFile, /*startNode*/ undefined); // TODO: GH#18217
+                return { contextToken: contextToken, previousToken: previousToken };
+            }
+            return { contextToken: previousToken, previousToken: previousToken };
+        }
         function getAutoImportSymbolFromCompletionEntryData(name, data, program, host) {
             var containingProgram = data.isPackageJsonImport ? host.getPackageJsonAutoImportProvider() : program;
             var checker = containingProgram.getTypeChecker();
@@ -125268,6 +128094,7 @@
                     isDefaultExport: isDefaultExport,
                     exportName: data.exportName,
                     fileName: data.fileName,
+                    isFromPackageJson: !!data.isPackageJsonImport,
                 }
             };
         }
@@ -125306,7 +128133,7 @@
         var _keywordCompletions = [];
         var allKeywordsCompletions = ts.memoize(function () {
             var res = [];
-            for (var i = 80 /* FirstKeyword */; i <= 157 /* LastKeyword */; i++) {
+            for (var i = 81 /* FirstKeyword */; i <= 158 /* LastKeyword */; i++) {
                 res.push({
                     name: ts.tokenToString(i),
                     kind: "keyword" /* keyword */,
@@ -125332,11 +128159,11 @@
                         return false;
                     case 1 /* All */:
                         return isFunctionLikeBodyKeyword(kind)
-                            || kind === 133 /* DeclareKeyword */
-                            || kind === 139 /* ModuleKeyword */
-                            || kind === 149 /* TypeKeyword */
-                            || kind === 140 /* NamespaceKeyword */
-                            || ts.isTypeKeyword(kind) && kind !== 150 /* UndefinedKeyword */;
+                            || kind === 134 /* DeclareKeyword */
+                            || kind === 140 /* ModuleKeyword */
+                            || kind === 150 /* TypeKeyword */
+                            || kind === 141 /* NamespaceKeyword */
+                            || ts.isTypeKeyword(kind) && kind !== 151 /* UndefinedKeyword */;
                     case 5 /* FunctionLikeBodyKeywords */:
                         return isFunctionLikeBodyKeyword(kind);
                     case 2 /* ClassElementKeywords */:
@@ -125346,7 +128173,7 @@
                     case 4 /* ConstructorParameterKeywords */:
                         return ts.isParameterPropertyModifier(kind);
                     case 6 /* TypeAssertionKeywords */:
-                        return ts.isTypeKeyword(kind) || kind === 84 /* ConstKeyword */;
+                        return ts.isTypeKeyword(kind) || kind === 85 /* ConstKeyword */;
                     case 7 /* TypeKeywords */:
                         return ts.isTypeKeyword(kind);
                     default:
@@ -125356,59 +128183,59 @@
         }
         function isTypeScriptOnlyKeyword(kind) {
             switch (kind) {
-                case 125 /* AbstractKeyword */:
-                case 128 /* AnyKeyword */:
-                case 155 /* BigIntKeyword */:
-                case 131 /* BooleanKeyword */:
-                case 133 /* DeclareKeyword */:
-                case 91 /* EnumKeyword */:
-                case 154 /* GlobalKeyword */:
-                case 116 /* ImplementsKeyword */:
-                case 135 /* InferKeyword */:
-                case 117 /* InterfaceKeyword */:
-                case 137 /* IsKeyword */:
-                case 138 /* KeyOfKeyword */:
-                case 139 /* ModuleKeyword */:
-                case 140 /* NamespaceKeyword */:
-                case 141 /* NeverKeyword */:
-                case 144 /* NumberKeyword */:
-                case 145 /* ObjectKeyword */:
-                case 156 /* OverrideKeyword */:
-                case 120 /* PrivateKeyword */:
-                case 121 /* ProtectedKeyword */:
-                case 122 /* PublicKeyword */:
-                case 142 /* ReadonlyKeyword */:
-                case 147 /* StringKeyword */:
-                case 148 /* SymbolKeyword */:
-                case 149 /* TypeKeyword */:
-                case 151 /* UniqueKeyword */:
-                case 152 /* UnknownKeyword */:
+                case 126 /* AbstractKeyword */:
+                case 129 /* AnyKeyword */:
+                case 156 /* BigIntKeyword */:
+                case 132 /* BooleanKeyword */:
+                case 134 /* DeclareKeyword */:
+                case 92 /* EnumKeyword */:
+                case 155 /* GlobalKeyword */:
+                case 117 /* ImplementsKeyword */:
+                case 136 /* InferKeyword */:
+                case 118 /* InterfaceKeyword */:
+                case 138 /* IsKeyword */:
+                case 139 /* KeyOfKeyword */:
+                case 140 /* ModuleKeyword */:
+                case 141 /* NamespaceKeyword */:
+                case 142 /* NeverKeyword */:
+                case 145 /* NumberKeyword */:
+                case 146 /* ObjectKeyword */:
+                case 157 /* OverrideKeyword */:
+                case 121 /* PrivateKeyword */:
+                case 122 /* ProtectedKeyword */:
+                case 123 /* PublicKeyword */:
+                case 143 /* ReadonlyKeyword */:
+                case 148 /* StringKeyword */:
+                case 149 /* SymbolKeyword */:
+                case 150 /* TypeKeyword */:
+                case 152 /* UniqueKeyword */:
+                case 153 /* UnknownKeyword */:
                     return true;
                 default:
                     return false;
             }
         }
         function isInterfaceOrTypeLiteralCompletionKeyword(kind) {
-            return kind === 142 /* ReadonlyKeyword */;
+            return kind === 143 /* ReadonlyKeyword */;
         }
         function isClassMemberCompletionKeyword(kind) {
             switch (kind) {
-                case 125 /* AbstractKeyword */:
-                case 132 /* ConstructorKeyword */:
-                case 134 /* GetKeyword */:
-                case 146 /* SetKeyword */:
-                case 129 /* AsyncKeyword */:
-                case 133 /* DeclareKeyword */:
-                case 156 /* OverrideKeyword */:
+                case 126 /* AbstractKeyword */:
+                case 133 /* ConstructorKeyword */:
+                case 135 /* GetKeyword */:
+                case 147 /* SetKeyword */:
+                case 130 /* AsyncKeyword */:
+                case 134 /* DeclareKeyword */:
+                case 157 /* OverrideKeyword */:
                     return true;
                 default:
                     return ts.isClassMemberModifier(kind);
             }
         }
         function isFunctionLikeBodyKeyword(kind) {
-            return kind === 129 /* AsyncKeyword */
-                || kind === 130 /* AwaitKeyword */
-                || kind === 126 /* AsKeyword */
+            return kind === 130 /* AsyncKeyword */
+                || kind === 131 /* AwaitKeyword */
+                || kind === 127 /* AsKeyword */
                 || !ts.isContextualKeyword(kind) && !isClassMemberCompletionKeyword(kind);
         }
         function keywordForNode(node) {
@@ -125460,7 +128287,7 @@
         function tryGetObjectTypeDeclarationCompletionContainer(sourceFile, contextToken, location, position) {
             // class c { method() { } | method2() { } }
             switch (location.kind) {
-                case 338 /* SyntaxList */:
+                case 343 /* SyntaxList */:
                     return ts.tryCast(location.parent, ts.isObjectTypeDeclaration);
                 case 1 /* EndOfFileToken */:
                     var cls = ts.tryCast(ts.lastOrUndefined(ts.cast(location.parent, ts.isSourceFile).statements), ts.isObjectTypeDeclaration);
@@ -125468,7 +128295,7 @@
                         return cls;
                     }
                     break;
-                case 78 /* Identifier */: {
+                case 79 /* Identifier */: {
                     // class c { public prop = c| }
                     if (ts.isPropertyDeclaration(location.parent) && location.parent.initializer === location) {
                         return undefined;
@@ -125482,13 +128309,13 @@
             if (!contextToken)
                 return undefined;
             // class C { blah; constructor/**/ } and so on
-            if (location.kind === 132 /* ConstructorKeyword */
+            if (location.kind === 133 /* ConstructorKeyword */
                 // class C { blah \n constructor/**/ }
                 || (ts.isIdentifier(contextToken) && ts.isPropertyDeclaration(contextToken.parent) && ts.isClassLike(location))) {
                 return ts.findAncestor(contextToken, ts.isClassLike);
             }
             switch (contextToken.kind) {
-                case 62 /* EqualsToken */: // class c { public prop = | /* global completions */ }
+                case 63 /* EqualsToken */: // class c { public prop = | /* global completions */ }
                     return undefined;
                 case 26 /* SemicolonToken */: // class c {getValue(): number; | }
                 case 19 /* CloseBraceToken */: // class c { method() { } | }
@@ -125524,8 +128351,8 @@
                     break;
                 case 26 /* SemicolonToken */:
                 case 27 /* CommaToken */:
-                case 78 /* Identifier */:
-                    if (parent.kind === 163 /* PropertySignature */ && ts.isTypeLiteralNode(parent.parent)) {
+                case 79 /* Identifier */:
+                    if (parent.kind === 164 /* PropertySignature */ && ts.isTypeLiteralNode(parent.parent)) {
                         return parent.parent;
                     }
                     break;
@@ -125542,11 +128369,11 @@
             if (!t)
                 return undefined;
             switch (node.kind) {
-                case 163 /* PropertySignature */:
+                case 164 /* PropertySignature */:
                     return checker.getTypeOfPropertyOfContextualType(t, node.symbol.escapedName);
-                case 184 /* IntersectionType */:
-                case 178 /* TypeLiteral */:
-                case 183 /* UnionType */:
+                case 186 /* IntersectionType */:
+                case 180 /* TypeLiteral */:
+                case 185 /* UnionType */:
                     return t;
             }
         }
@@ -125574,7 +128401,7 @@
                         ? !!ts.tryGetImportFromModuleSpecifier(contextToken)
                         : contextToken.kind === 43 /* SlashToken */ && ts.isJsxClosingElement(contextToken.parent));
                 case " ":
-                    return !!contextToken && ts.isImportKeyword(contextToken) && contextToken.parent.kind === 298 /* SourceFile */;
+                    return !!contextToken && ts.isImportKeyword(contextToken) && contextToken.parent.kind === 300 /* SourceFile */;
                 default:
                     return ts.Debug.assertNever(triggerCharacter);
             }
@@ -125609,7 +128436,7 @@
             if (type) {
                 return type;
             }
-            if (ts.isBinaryExpression(node.parent) && node.parent.operatorToken.kind === 62 /* EqualsToken */ && node === node.parent.left) {
+            if (ts.isBinaryExpression(node.parent) && node.parent.operatorToken.kind === 63 /* EqualsToken */ && node === node.parent.left) {
                 // Object literal is assignment pattern: ({ | } = x)
                 return typeChecker.getTypeAtLocation(node.parent);
             }
@@ -125617,7 +128444,7 @@
         }
         function getImportCompletionNode(contextToken) {
             var candidate = getCandidate();
-            return candidate === 153 /* FromKeyword */ || candidate && ts.rangeIsOnSingleLine(candidate, candidate.getSourceFile()) ? candidate : undefined;
+            return candidate === 154 /* FromKeyword */ || candidate && ts.rangeIsOnSingleLine(candidate, candidate.getSourceFile()) ? candidate : undefined;
             function getCandidate() {
                 var parent = contextToken.parent;
                 if (ts.isImportEqualsDeclaration(parent)) {
@@ -125626,8 +128453,8 @@
                 if (ts.isNamedImports(parent) || ts.isNamespaceImport(parent)) {
                     if (isModuleSpecifierMissingOrEmpty(parent.parent.parent.moduleSpecifier) && (ts.isNamespaceImport(parent) || parent.elements.length < 2) && !parent.parent.name) {
                         // At `import { ... } |` or `import * as Foo |`, the only possible completion is `from`
-                        return contextToken.kind === 19 /* CloseBraceToken */ || contextToken.kind === 78 /* Identifier */
-                            ? 153 /* FromKeyword */
+                        return contextToken.kind === 19 /* CloseBraceToken */ || contextToken.kind === 79 /* Identifier */
+                            ? 154 /* FromKeyword */
                             : parent.parent.parent;
                     }
                     return undefined;
@@ -125665,11 +128492,63 @@
         function symbolCanBeReferencedAtTypeLocation(symbol, checker, seenModules) {
             if (seenModules === void 0) { seenModules = new ts.Map(); }
             var sym = ts.skipAlias(symbol.exportSymbol || symbol, checker);
-            return !!(sym.flags & 788968 /* Type */) ||
-                !!(sym.flags & 1536 /* Module */) &&
-                    ts.addToSeen(seenModules, ts.getSymbolId(sym)) &&
+            return !!(sym.flags & 788968 /* Type */) || checker.isUnknownSymbol(sym) ||
+                !!(sym.flags & 1536 /* Module */) && ts.addToSeen(seenModules, ts.getSymbolId(sym)) &&
                     checker.getExportsOfModule(sym).some(function (e) { return symbolCanBeReferencedAtTypeLocation(e, checker, seenModules); });
         }
+        function isDeprecated(symbol, checker) {
+            var declarations = ts.skipAlias(symbol, checker).declarations;
+            return !!ts.length(declarations) && ts.every(declarations, ts.isDeprecatedDeclaration);
+        }
+        /**
+         * True if the first character of `lowercaseCharacters` is the first character
+         * of some "word" in `identiferString` (where the string is split into "words"
+         * by camelCase and snake_case segments), then if the remaining characters of
+         * `lowercaseCharacters` appear, in order, in the rest of `identifierString`.
+         *
+         * True:
+         * 'state' in 'useState'
+         * 'sae' in 'useState'
+         * 'viable' in 'ENVIRONMENT_VARIABLE'
+         *
+         * False:
+         * 'staet' in 'useState'
+         * 'tate' in 'useState'
+         * 'ment' in 'ENVIRONMENT_VARIABLE'
+         */
+        function charactersFuzzyMatchInString(identifierString, lowercaseCharacters) {
+            if (lowercaseCharacters.length === 0) {
+                return true;
+            }
+            var matchedFirstCharacter = false;
+            var prevChar;
+            var characterIndex = 0;
+            var len = identifierString.length;
+            for (var strIndex = 0; strIndex < len; strIndex++) {
+                var strChar = identifierString.charCodeAt(strIndex);
+                var testChar = lowercaseCharacters.charCodeAt(characterIndex);
+                if (strChar === testChar || strChar === toUpperCharCode(testChar)) {
+                    matchedFirstCharacter || (matchedFirstCharacter = prevChar === undefined || // Beginning of word
+                        97 /* a */ <= prevChar && prevChar <= 122 /* z */ && 65 /* A */ <= strChar && strChar <= 90 /* Z */ || // camelCase transition
+                        prevChar === 95 /* _ */ && strChar !== 95 /* _ */); // snake_case transition
+                    if (matchedFirstCharacter) {
+                        characterIndex++;
+                    }
+                    if (characterIndex === lowercaseCharacters.length) {
+                        return true;
+                    }
+                }
+                prevChar = strChar;
+            }
+            // Did not find all characters
+            return false;
+        }
+        function toUpperCharCode(charCode) {
+            if (97 /* a */ <= charCode && charCode <= 122 /* z */) {
+                return charCode - 32;
+            }
+            return charCode;
+        }
     })(Completions = ts.Completions || (ts.Completions = {}));
 })(ts || (ts = {}));
 var ts;
@@ -125704,10 +128583,11 @@
             if (!referenceEntries)
                 return undefined;
             var map = ts.arrayToMultiMap(referenceEntries.map(ts.FindAllReferences.toHighlightSpan), function (e) { return e.fileName; }, function (e) { return e.span; });
+            var getCanonicalFileName = ts.createGetCanonicalFileName(program.useCaseSensitiveFileNames());
             return ts.mapDefined(ts.arrayFrom(map.entries()), function (_a) {
                 var fileName = _a[0], highlightSpans = _a[1];
                 if (!sourceFilesSet.has(fileName)) {
-                    if (!program.redirectTargetsMap.has(fileName)) {
+                    if (!program.redirectTargetsMap.has(ts.toPath(fileName, program.getCurrentDirectory(), getCanonicalFileName))) {
                         return undefined;
                     }
                     var redirectTarget_1 = program.getSourceFile(fileName);
@@ -125724,44 +128604,44 @@
         }
         function getHighlightSpans(node, sourceFile) {
             switch (node.kind) {
-                case 98 /* IfKeyword */:
-                case 90 /* ElseKeyword */:
+                case 99 /* IfKeyword */:
+                case 91 /* ElseKeyword */:
                     return ts.isIfStatement(node.parent) ? getIfElseOccurrences(node.parent, sourceFile) : undefined;
-                case 104 /* ReturnKeyword */:
+                case 105 /* ReturnKeyword */:
                     return useParent(node.parent, ts.isReturnStatement, getReturnOccurrences);
-                case 108 /* ThrowKeyword */:
+                case 109 /* ThrowKeyword */:
                     return useParent(node.parent, ts.isThrowStatement, getThrowOccurrences);
-                case 110 /* TryKeyword */:
-                case 82 /* CatchKeyword */:
-                case 95 /* FinallyKeyword */:
-                    var tryStatement = node.kind === 82 /* CatchKeyword */ ? node.parent.parent : node.parent;
+                case 111 /* TryKeyword */:
+                case 83 /* CatchKeyword */:
+                case 96 /* FinallyKeyword */:
+                    var tryStatement = node.kind === 83 /* CatchKeyword */ ? node.parent.parent : node.parent;
                     return useParent(tryStatement, ts.isTryStatement, getTryCatchFinallyOccurrences);
-                case 106 /* SwitchKeyword */:
+                case 107 /* SwitchKeyword */:
                     return useParent(node.parent, ts.isSwitchStatement, getSwitchCaseDefaultOccurrences);
-                case 81 /* CaseKeyword */:
-                case 87 /* DefaultKeyword */: {
+                case 82 /* CaseKeyword */:
+                case 88 /* DefaultKeyword */: {
                     if (ts.isDefaultClause(node.parent) || ts.isCaseClause(node.parent)) {
                         return useParent(node.parent.parent.parent, ts.isSwitchStatement, getSwitchCaseDefaultOccurrences);
                     }
                     return undefined;
                 }
-                case 80 /* BreakKeyword */:
-                case 85 /* ContinueKeyword */:
+                case 81 /* BreakKeyword */:
+                case 86 /* ContinueKeyword */:
                     return useParent(node.parent, ts.isBreakOrContinueStatement, getBreakOrContinueStatementOccurrences);
-                case 96 /* ForKeyword */:
-                case 114 /* WhileKeyword */:
-                case 89 /* DoKeyword */:
+                case 97 /* ForKeyword */:
+                case 115 /* WhileKeyword */:
+                case 90 /* DoKeyword */:
                     return useParent(node.parent, function (n) { return ts.isIterationStatement(n, /*lookInLabeledStatements*/ true); }, getLoopBreakContinueOccurrences);
-                case 132 /* ConstructorKeyword */:
-                    return getFromAllDeclarations(ts.isConstructorDeclaration, [132 /* ConstructorKeyword */]);
-                case 134 /* GetKeyword */:
-                case 146 /* SetKeyword */:
-                    return getFromAllDeclarations(ts.isAccessor, [134 /* GetKeyword */, 146 /* SetKeyword */]);
-                case 130 /* AwaitKeyword */:
+                case 133 /* ConstructorKeyword */:
+                    return getFromAllDeclarations(ts.isConstructorDeclaration, [133 /* ConstructorKeyword */]);
+                case 135 /* GetKeyword */:
+                case 147 /* SetKeyword */:
+                    return getFromAllDeclarations(ts.isAccessor, [135 /* GetKeyword */, 147 /* SetKeyword */]);
+                case 131 /* AwaitKeyword */:
                     return useParent(node.parent, ts.isAwaitExpression, getAsyncAndAwaitOccurrences);
-                case 129 /* AsyncKeyword */:
+                case 130 /* AsyncKeyword */:
                     return highlightSpans(getAsyncAndAwaitOccurrences(node));
-                case 124 /* YieldKeyword */:
+                case 125 /* YieldKeyword */:
                     return highlightSpans(getYieldOccurrences(node));
                 default:
                     return ts.isModifierKind(node.kind) && (ts.isDeclaration(node.parent) || ts.isVariableStatement(node.parent))
@@ -125804,7 +128684,7 @@
             var child = throwStatement;
             while (child.parent) {
                 var parent = child.parent;
-                if (ts.isFunctionBlock(parent) || parent.kind === 298 /* SourceFile */) {
+                if (ts.isFunctionBlock(parent) || parent.kind === 300 /* SourceFile */) {
                     return parent;
                 }
                 // A throw-statement is only owned by a try-statement if the try-statement has
@@ -125836,16 +128716,16 @@
         function getBreakOrContinueOwner(statement) {
             return ts.findAncestor(statement, function (node) {
                 switch (node.kind) {
-                    case 245 /* SwitchStatement */:
-                        if (statement.kind === 241 /* ContinueStatement */) {
+                    case 247 /* SwitchStatement */:
+                        if (statement.kind === 243 /* ContinueStatement */) {
                             return false;
                         }
                     // falls through
-                    case 238 /* ForStatement */:
-                    case 239 /* ForInStatement */:
-                    case 240 /* ForOfStatement */:
-                    case 237 /* WhileStatement */:
-                    case 236 /* DoStatement */:
+                    case 240 /* ForStatement */:
+                    case 241 /* ForInStatement */:
+                    case 242 /* ForOfStatement */:
+                    case 239 /* WhileStatement */:
+                    case 238 /* DoStatement */:
                         return !statement.label || isLabeledBy(node, statement.label.escapedText);
                     default:
                         // Don't cross function boundaries.
@@ -125861,41 +128741,41 @@
             // Types of node whose children might have modifiers.
             var container = declaration.parent;
             switch (container.kind) {
-                case 258 /* ModuleBlock */:
-                case 298 /* SourceFile */:
-                case 231 /* Block */:
-                case 285 /* CaseClause */:
-                case 286 /* DefaultClause */:
+                case 260 /* ModuleBlock */:
+                case 300 /* SourceFile */:
+                case 233 /* Block */:
+                case 287 /* CaseClause */:
+                case 288 /* DefaultClause */:
                     // Container is either a class declaration or the declaration is a classDeclaration
                     if (modifierFlag & 128 /* Abstract */ && ts.isClassDeclaration(declaration)) {
-                        return __spreadArray(__spreadArray([], declaration.members), [declaration]);
+                        return __spreadArray(__spreadArray([], declaration.members, true), [declaration], false);
                     }
                     else {
                         return container.statements;
                     }
-                case 167 /* Constructor */:
-                case 166 /* MethodDeclaration */:
-                case 252 /* FunctionDeclaration */:
-                    return __spreadArray(__spreadArray([], container.parameters), (ts.isClassLike(container.parent) ? container.parent.members : []));
-                case 253 /* ClassDeclaration */:
-                case 222 /* ClassExpression */:
-                case 254 /* InterfaceDeclaration */:
-                case 178 /* TypeLiteral */:
+                case 169 /* Constructor */:
+                case 167 /* MethodDeclaration */:
+                case 254 /* FunctionDeclaration */:
+                    return __spreadArray(__spreadArray([], container.parameters, true), (ts.isClassLike(container.parent) ? container.parent.members : []), true);
+                case 255 /* ClassDeclaration */:
+                case 224 /* ClassExpression */:
+                case 256 /* InterfaceDeclaration */:
+                case 180 /* TypeLiteral */:
                     var nodes = container.members;
                     // If we're an accessibility modifier, we're in an instance member and should search
                     // the constructor's parameter list for instance members as well.
                     if (modifierFlag & (28 /* AccessibilityModifier */ | 64 /* Readonly */)) {
                         var constructor = ts.find(container.members, ts.isConstructorDeclaration);
                         if (constructor) {
-                            return __spreadArray(__spreadArray([], nodes), constructor.parameters);
+                            return __spreadArray(__spreadArray([], nodes, true), constructor.parameters, true);
                         }
                     }
                     else if (modifierFlag & 128 /* Abstract */) {
-                        return __spreadArray(__spreadArray([], nodes), [container]);
+                        return __spreadArray(__spreadArray([], nodes, true), [container], false);
                     }
                     return nodes;
                 // Syntactically invalid positions that the parser might produce anyway
-                case 201 /* ObjectLiteralExpression */:
+                case 203 /* ObjectLiteralExpression */:
                     return undefined;
                 default:
                     ts.Debug.assertNever(container, "Invalid container kind.");
@@ -125914,12 +128794,12 @@
         }
         function getLoopBreakContinueOccurrences(loopNode) {
             var keywords = [];
-            if (pushKeywordIf(keywords, loopNode.getFirstToken(), 96 /* ForKeyword */, 114 /* WhileKeyword */, 89 /* DoKeyword */)) {
+            if (pushKeywordIf(keywords, loopNode.getFirstToken(), 97 /* ForKeyword */, 115 /* WhileKeyword */, 90 /* DoKeyword */)) {
                 // If we succeeded and got a do-while loop, then start looking for a 'while' keyword.
-                if (loopNode.kind === 236 /* DoStatement */) {
+                if (loopNode.kind === 238 /* DoStatement */) {
                     var loopTokens = loopNode.getChildren();
                     for (var i = loopTokens.length - 1; i >= 0; i--) {
-                        if (pushKeywordIf(keywords, loopTokens[i], 114 /* WhileKeyword */)) {
+                        if (pushKeywordIf(keywords, loopTokens[i], 115 /* WhileKeyword */)) {
                             break;
                         }
                     }
@@ -125927,7 +128807,7 @@
             }
             ts.forEach(aggregateAllBreakAndContinueStatements(loopNode.statement), function (statement) {
                 if (ownsBreakOrContinueStatement(loopNode, statement)) {
-                    pushKeywordIf(keywords, statement.getFirstToken(), 80 /* BreakKeyword */, 85 /* ContinueKeyword */);
+                    pushKeywordIf(keywords, statement.getFirstToken(), 81 /* BreakKeyword */, 86 /* ContinueKeyword */);
                 }
             });
             return keywords;
@@ -125936,13 +128816,13 @@
             var owner = getBreakOrContinueOwner(breakOrContinueStatement);
             if (owner) {
                 switch (owner.kind) {
-                    case 238 /* ForStatement */:
-                    case 239 /* ForInStatement */:
-                    case 240 /* ForOfStatement */:
-                    case 236 /* DoStatement */:
-                    case 237 /* WhileStatement */:
+                    case 240 /* ForStatement */:
+                    case 241 /* ForInStatement */:
+                    case 242 /* ForOfStatement */:
+                    case 238 /* DoStatement */:
+                    case 239 /* WhileStatement */:
                         return getLoopBreakContinueOccurrences(owner);
-                    case 245 /* SwitchStatement */:
+                    case 247 /* SwitchStatement */:
                         return getSwitchCaseDefaultOccurrences(owner);
                 }
             }
@@ -125950,13 +128830,13 @@
         }
         function getSwitchCaseDefaultOccurrences(switchStatement) {
             var keywords = [];
-            pushKeywordIf(keywords, switchStatement.getFirstToken(), 106 /* SwitchKeyword */);
+            pushKeywordIf(keywords, switchStatement.getFirstToken(), 107 /* SwitchKeyword */);
             // Go through each clause in the switch statement, collecting the 'case'/'default' keywords.
             ts.forEach(switchStatement.caseBlock.clauses, function (clause) {
-                pushKeywordIf(keywords, clause.getFirstToken(), 81 /* CaseKeyword */, 87 /* DefaultKeyword */);
+                pushKeywordIf(keywords, clause.getFirstToken(), 82 /* CaseKeyword */, 88 /* DefaultKeyword */);
                 ts.forEach(aggregateAllBreakAndContinueStatements(clause), function (statement) {
                     if (ownsBreakOrContinueStatement(switchStatement, statement)) {
-                        pushKeywordIf(keywords, statement.getFirstToken(), 80 /* BreakKeyword */);
+                        pushKeywordIf(keywords, statement.getFirstToken(), 81 /* BreakKeyword */);
                     }
                 });
             });
@@ -125964,13 +128844,13 @@
         }
         function getTryCatchFinallyOccurrences(tryStatement, sourceFile) {
             var keywords = [];
-            pushKeywordIf(keywords, tryStatement.getFirstToken(), 110 /* TryKeyword */);
+            pushKeywordIf(keywords, tryStatement.getFirstToken(), 111 /* TryKeyword */);
             if (tryStatement.catchClause) {
-                pushKeywordIf(keywords, tryStatement.catchClause.getFirstToken(), 82 /* CatchKeyword */);
+                pushKeywordIf(keywords, tryStatement.catchClause.getFirstToken(), 83 /* CatchKeyword */);
             }
             if (tryStatement.finallyBlock) {
-                var finallyKeyword = ts.findChildOfKind(tryStatement, 95 /* FinallyKeyword */, sourceFile);
-                pushKeywordIf(keywords, finallyKeyword, 95 /* FinallyKeyword */);
+                var finallyKeyword = ts.findChildOfKind(tryStatement, 96 /* FinallyKeyword */, sourceFile);
+                pushKeywordIf(keywords, finallyKeyword, 96 /* FinallyKeyword */);
             }
             return keywords;
         }
@@ -125981,13 +128861,13 @@
             }
             var keywords = [];
             ts.forEach(aggregateOwnedThrowStatements(owner), function (throwStatement) {
-                keywords.push(ts.findChildOfKind(throwStatement, 108 /* ThrowKeyword */, sourceFile));
+                keywords.push(ts.findChildOfKind(throwStatement, 109 /* ThrowKeyword */, sourceFile));
             });
             // If the "owner" is a function, then we equate 'return' and 'throw' statements in their
             // ability to "jump out" of the function, and include occurrences for both.
             if (ts.isFunctionBlock(owner)) {
                 ts.forEachReturnStatement(owner, function (returnStatement) {
-                    keywords.push(ts.findChildOfKind(returnStatement, 104 /* ReturnKeyword */, sourceFile));
+                    keywords.push(ts.findChildOfKind(returnStatement, 105 /* ReturnKeyword */, sourceFile));
                 });
             }
             return keywords;
@@ -125999,11 +128879,11 @@
             }
             var keywords = [];
             ts.forEachReturnStatement(ts.cast(func.body, ts.isBlock), function (returnStatement) {
-                keywords.push(ts.findChildOfKind(returnStatement, 104 /* ReturnKeyword */, sourceFile));
+                keywords.push(ts.findChildOfKind(returnStatement, 105 /* ReturnKeyword */, sourceFile));
             });
             // Include 'throw' statements that do not occur within a try block.
             ts.forEach(aggregateOwnedThrowStatements(func.body), function (throwStatement) {
-                keywords.push(ts.findChildOfKind(throwStatement, 108 /* ThrowKeyword */, sourceFile));
+                keywords.push(ts.findChildOfKind(throwStatement, 109 /* ThrowKeyword */, sourceFile));
             });
             return keywords;
         }
@@ -126015,13 +128895,13 @@
             var keywords = [];
             if (func.modifiers) {
                 func.modifiers.forEach(function (modifier) {
-                    pushKeywordIf(keywords, modifier, 129 /* AsyncKeyword */);
+                    pushKeywordIf(keywords, modifier, 130 /* AsyncKeyword */);
                 });
             }
             ts.forEachChild(func, function (child) {
                 traverseWithoutCrossingFunction(child, function (node) {
                     if (ts.isAwaitExpression(node)) {
-                        pushKeywordIf(keywords, node.getFirstToken(), 130 /* AwaitKeyword */);
+                        pushKeywordIf(keywords, node.getFirstToken(), 131 /* AwaitKeyword */);
                     }
                 });
             });
@@ -126036,7 +128916,7 @@
             ts.forEachChild(func, function (child) {
                 traverseWithoutCrossingFunction(child, function (node) {
                     if (ts.isYieldExpression(node)) {
-                        pushKeywordIf(keywords, node.getFirstToken(), 124 /* YieldKeyword */);
+                        pushKeywordIf(keywords, node.getFirstToken(), 125 /* YieldKeyword */);
                     }
                 });
             });
@@ -126055,7 +128935,7 @@
             // We'd like to highlight else/ifs together if they are only separated by whitespace
             // (i.e. the keywords are separated by no comments, no newlines).
             for (var i = 0; i < keywords.length; i++) {
-                if (keywords[i].kind === 90 /* ElseKeyword */ && i < keywords.length - 1) {
+                if (keywords[i].kind === 91 /* ElseKeyword */ && i < keywords.length - 1) {
                     var elseKeyword = keywords[i];
                     var ifKeyword = keywords[i + 1]; // this *should* always be an 'if' keyword.
                     var shouldCombineElseAndIf = true;
@@ -126090,10 +128970,10 @@
             // Now traverse back down through the else branches, aggregating if/else keywords of if-statements.
             while (true) {
                 var children = ifStatement.getChildren(sourceFile);
-                pushKeywordIf(keywords, children[0], 98 /* IfKeyword */);
+                pushKeywordIf(keywords, children[0], 99 /* IfKeyword */);
                 // Generally the 'else' keyword is second-to-last, so we traverse backwards.
                 for (var i = children.length - 1; i >= 0; i--) {
-                    if (pushKeywordIf(keywords, children[i], 90 /* ElseKeyword */)) {
+                    if (pushKeywordIf(keywords, children[i], 91 /* ElseKeyword */)) {
                         break;
                     }
                 }
@@ -126351,43 +129231,43 @@
                         if (cancellationToken)
                             cancellationToken.throwIfCancellationRequested();
                         switch (direct.kind) {
-                            case 204 /* CallExpression */:
+                            case 206 /* CallExpression */:
                                 if (ts.isImportCall(direct)) {
                                     handleImportCall(direct);
                                     break;
                                 }
                                 if (!isAvailableThroughGlobal) {
                                     var parent = direct.parent;
-                                    if (exportKind === 2 /* ExportEquals */ && parent.kind === 250 /* VariableDeclaration */) {
+                                    if (exportKind === 2 /* ExportEquals */ && parent.kind === 252 /* VariableDeclaration */) {
                                         var name = parent.name;
-                                        if (name.kind === 78 /* Identifier */) {
+                                        if (name.kind === 79 /* Identifier */) {
                                             directImports.push(name);
                                             break;
                                         }
                                     }
                                 }
                                 break;
-                            case 78 /* Identifier */: // for 'const x = require("y");
+                            case 79 /* Identifier */: // for 'const x = require("y");
                                 break; // TODO: GH#23879
-                            case 261 /* ImportEqualsDeclaration */:
+                            case 263 /* ImportEqualsDeclaration */:
                                 handleNamespaceImport(direct, direct.name, ts.hasSyntacticModifier(direct, 1 /* Export */), /*alreadyAddedDirect*/ false);
                                 break;
-                            case 262 /* ImportDeclaration */:
+                            case 264 /* ImportDeclaration */:
                                 directImports.push(direct);
                                 var namedBindings = direct.importClause && direct.importClause.namedBindings;
-                                if (namedBindings && namedBindings.kind === 264 /* NamespaceImport */) {
+                                if (namedBindings && namedBindings.kind === 266 /* NamespaceImport */) {
                                     handleNamespaceImport(direct, namedBindings.name, /*isReExport*/ false, /*alreadyAddedDirect*/ true);
                                 }
                                 else if (!isAvailableThroughGlobal && ts.isDefaultImport(direct)) {
                                     addIndirectUser(getSourceFileLikeForImportDeclaration(direct)); // Add a check for indirect uses to handle synthetic default imports
                                 }
                                 break;
-                            case 268 /* ExportDeclaration */:
+                            case 270 /* ExportDeclaration */:
                                 if (!direct.exportClause) {
                                     // This is `export * from "foo"`, so imports of this module may import the export too.
                                     handleDirectImports(getContainingModuleSymbol(direct, checker));
                                 }
-                                else if (direct.exportClause.kind === 270 /* NamespaceExport */) {
+                                else if (direct.exportClause.kind === 272 /* NamespaceExport */) {
                                     // `export * as foo from "foo"` add to indirect uses
                                     addIndirectUser(getSourceFileLikeForImportDeclaration(direct), /** addTransitiveDependencies */ true);
                                 }
@@ -126396,7 +129276,7 @@
                                     directImports.push(direct);
                                 }
                                 break;
-                            case 196 /* ImportType */:
+                            case 198 /* ImportType */:
                                 // Only check for typeof import('xyz')
                                 if (direct.isTypeOf && !direct.qualifier && isExported(direct)) {
                                     addIndirectUser(direct.getSourceFile(), /** addTransitiveDependencies */ true);
@@ -126418,7 +129298,7 @@
                 return ts.findAncestor(node, function (node) {
                     if (stopAtAmbientModule && isAmbientModuleDeclaration(node))
                         return "quit";
-                    return ts.some(node.modifiers, function (mod) { return mod.kind === 92 /* ExportKeyword */; });
+                    return ts.some(node.modifiers, function (mod) { return mod.kind === 93 /* ExportKeyword */; });
                 });
             }
             function handleNamespaceImport(importDeclaration, name, isReExport, alreadyAddedDirect) {
@@ -126429,7 +129309,7 @@
                 }
                 else if (!isAvailableThroughGlobal) {
                     var sourceFileLike = getSourceFileLikeForImportDeclaration(importDeclaration);
-                    ts.Debug.assert(sourceFileLike.kind === 298 /* SourceFile */ || sourceFileLike.kind === 257 /* ModuleDeclaration */);
+                    ts.Debug.assert(sourceFileLike.kind === 300 /* SourceFile */ || sourceFileLike.kind === 259 /* ModuleDeclaration */);
                     if (isReExport || findNamespaceReExports(sourceFileLike, name, checker)) {
                         addIndirectUser(sourceFileLike, /** addTransitiveDependencies */ true);
                     }
@@ -126485,17 +129365,17 @@
             }
             return { importSearches: importSearches, singleReferences: singleReferences };
             function handleImport(decl) {
-                if (decl.kind === 261 /* ImportEqualsDeclaration */) {
+                if (decl.kind === 263 /* ImportEqualsDeclaration */) {
                     if (isExternalModuleImportEquals(decl)) {
                         handleNamespaceImportLike(decl.name);
                     }
                     return;
                 }
-                if (decl.kind === 78 /* Identifier */) {
+                if (decl.kind === 79 /* Identifier */) {
                     handleNamespaceImportLike(decl);
                     return;
                 }
-                if (decl.kind === 196 /* ImportType */) {
+                if (decl.kind === 198 /* ImportType */) {
                     if (decl.qualifier) {
                         var firstIdentifier = ts.getFirstIdentifier(decl.qualifier);
                         if (firstIdentifier.escapedText === ts.symbolName(exportSymbol)) {
@@ -126511,7 +129391,7 @@
                 if (decl.moduleSpecifier.kind !== 10 /* StringLiteral */) {
                     return;
                 }
-                if (decl.kind === 268 /* ExportDeclaration */) {
+                if (decl.kind === 270 /* ExportDeclaration */) {
                     if (decl.exportClause && ts.isNamedExports(decl.exportClause)) {
                         searchForNamedImport(decl.exportClause);
                     }
@@ -126520,10 +129400,10 @@
                 var _a = decl.importClause || { name: undefined, namedBindings: undefined }, name = _a.name, namedBindings = _a.namedBindings;
                 if (namedBindings) {
                     switch (namedBindings.kind) {
-                        case 264 /* NamespaceImport */:
+                        case 266 /* NamespaceImport */:
                             handleNamespaceImportLike(namedBindings.name);
                             break;
-                        case 265 /* NamedImports */:
+                        case 267 /* NamedImports */:
                             // 'default' might be accessed as a named import `{ default as foo }`.
                             if (exportKind === 0 /* Named */ || exportKind === 1 /* Default */) {
                                 searchForNamedImport(namedBindings);
@@ -126573,7 +129453,7 @@
                         }
                     }
                     else {
-                        var localSymbol = element.kind === 271 /* ExportSpecifier */ && element.propertyName
+                        var localSymbol = element.kind === 273 /* ExportSpecifier */ && element.propertyName
                             ? checker.getExportSpecifierLocalTargetSymbol(element) // For re-exporting under a different name, we want to get the re-exported symbol.
                             : checker.getSymbolAtLocation(name);
                         addSearch(name, localSymbol);
@@ -126602,7 +129482,7 @@
             for (var _i = 0, sourceFiles_1 = sourceFiles; _i < sourceFiles_1.length; _i++) {
                 var referencingFile = sourceFiles_1[_i];
                 var searchSourceFile = searchModuleSymbol.valueDeclaration;
-                if ((searchSourceFile === null || searchSourceFile === void 0 ? void 0 : searchSourceFile.kind) === 298 /* SourceFile */) {
+                if ((searchSourceFile === null || searchSourceFile === void 0 ? void 0 : searchSourceFile.kind) === 300 /* SourceFile */) {
                     for (var _a = 0, _b = referencingFile.referencedFiles; _a < _b.length; _a++) {
                         var ref = _b[_a];
                         if (program.getSourceFileFromReference(referencingFile, ref) === searchSourceFile) {
@@ -126650,7 +129530,7 @@
         }
         /** Iterates over all statements at the top level or in module declarations. Returns the first truthy result. */
         function forEachPossibleImportOrExportStatement(sourceFileLike, action) {
-            return ts.forEach(sourceFileLike.kind === 298 /* SourceFile */ ? sourceFileLike.statements : sourceFileLike.body.statements, function (statement) {
+            return ts.forEach(sourceFileLike.kind === 300 /* SourceFile */ ? sourceFileLike.statements : sourceFileLike.body.statements, function (statement) {
                 return action(statement) || (isAmbientModuleDeclaration(statement) && ts.forEach(statement.body && statement.body.statements, action));
             });
         }
@@ -126665,15 +129545,15 @@
             else {
                 forEachPossibleImportOrExportStatement(sourceFile, function (statement) {
                     switch (statement.kind) {
-                        case 268 /* ExportDeclaration */:
-                        case 262 /* ImportDeclaration */: {
+                        case 270 /* ExportDeclaration */:
+                        case 264 /* ImportDeclaration */: {
                             var decl = statement;
                             if (decl.moduleSpecifier && ts.isStringLiteral(decl.moduleSpecifier)) {
                                 action(decl, decl.moduleSpecifier);
                             }
                             break;
                         }
-                        case 261 /* ImportEqualsDeclaration */: {
+                        case 263 /* ImportEqualsDeclaration */: {
                             var decl = statement;
                             if (isExternalModuleImportEquals(decl)) {
                                 action(decl, decl.moduleReference.expression);
@@ -126698,7 +129578,7 @@
                 var parent = node.parent;
                 var grandparent = parent.parent;
                 if (symbol.exportSymbol) {
-                    if (parent.kind === 202 /* PropertyAccessExpression */) {
+                    if (parent.kind === 204 /* PropertyAccessExpression */) {
                         // When accessing an export of a JS module, there's no alias. The symbol will still be flagged as an export even though we're at the use.
                         // So check that we are at the declaration.
                         return ((_a = symbol.declarations) === null || _a === void 0 ? void 0 : _a.some(function (d) { return d === parent; })) && ts.isBinaryExpression(grandparent)
@@ -126832,16 +129712,16 @@
         function isNodeImport(node) {
             var parent = node.parent;
             switch (parent.kind) {
-                case 261 /* ImportEqualsDeclaration */:
+                case 263 /* ImportEqualsDeclaration */:
                     return parent.name === node && isExternalModuleImportEquals(parent);
-                case 266 /* ImportSpecifier */:
+                case 268 /* ImportSpecifier */:
                     // For a rename import `{ foo as bar }`, don't search for the imported symbol. Just find local uses of `bar`.
                     return !parent.propertyName;
-                case 263 /* ImportClause */:
-                case 264 /* NamespaceImport */:
+                case 265 /* ImportClause */:
+                case 266 /* NamespaceImport */:
                     ts.Debug.assert(parent.name === node);
                     return true;
-                case 199 /* BindingElement */:
+                case 201 /* BindingElement */:
                     return ts.isInJSFile(node) && ts.isRequireVariableDeclaration(parent);
                 default:
                     return false;
@@ -126882,21 +129762,21 @@
             return checker.getMergedSymbol(getSourceFileLikeForImportDeclaration(importer).symbol);
         }
         function getSourceFileLikeForImportDeclaration(node) {
-            if (node.kind === 204 /* CallExpression */) {
+            if (node.kind === 206 /* CallExpression */) {
                 return node.getSourceFile();
             }
             var parent = node.parent;
-            if (parent.kind === 298 /* SourceFile */) {
+            if (parent.kind === 300 /* SourceFile */) {
                 return parent;
             }
-            ts.Debug.assert(parent.kind === 258 /* ModuleBlock */);
+            ts.Debug.assert(parent.kind === 260 /* ModuleBlock */);
             return ts.cast(parent.parent, isAmbientModuleDeclaration);
         }
         function isAmbientModuleDeclaration(node) {
-            return node.kind === 257 /* ModuleDeclaration */ && node.name.kind === 10 /* StringLiteral */;
+            return node.kind === 259 /* ModuleDeclaration */ && node.name.kind === 10 /* StringLiteral */;
         }
         function isExternalModuleImportEquals(eq) {
-            return eq.moduleReference.kind === 273 /* ExternalModuleReference */ && eq.moduleReference.expression.kind === 10 /* StringLiteral */;
+            return eq.moduleReference.kind === 275 /* ExternalModuleReference */ && eq.moduleReference.expression.kind === 10 /* StringLiteral */;
         }
     })(FindAllReferences = ts.FindAllReferences || (ts.FindAllReferences = {}));
 })(ts || (ts = {}));
@@ -126990,7 +129870,7 @@
                 ((ts.isImportOrExportSpecifier(node.parent) || ts.isBindingElement(node.parent))
                     && node.parent.propertyName === node) ||
                 // Is default export
-                (node.kind === 87 /* DefaultKeyword */ && ts.hasSyntacticModifier(node.parent, 513 /* ExportDefault */))) {
+                (node.kind === 88 /* DefaultKeyword */ && ts.hasSyntacticModifier(node.parent, 513 /* ExportDefault */))) {
                 return getContextNode(node.parent);
             }
             return undefined;
@@ -126999,7 +129879,7 @@
             if (!node)
                 return undefined;
             switch (node.kind) {
-                case 250 /* VariableDeclaration */:
+                case 252 /* VariableDeclaration */:
                     return !ts.isVariableDeclarationList(node.parent) || node.parent.declarations.length !== 1 ?
                         node :
                         ts.isVariableStatement(node.parent.parent) ?
@@ -127007,28 +129887,28 @@
                             ts.isForInOrOfStatement(node.parent.parent) ?
                                 getContextNode(node.parent.parent) :
                                 node.parent;
-                case 199 /* BindingElement */:
+                case 201 /* BindingElement */:
                     return getContextNode(node.parent.parent);
-                case 266 /* ImportSpecifier */:
+                case 268 /* ImportSpecifier */:
                     return node.parent.parent.parent;
-                case 271 /* ExportSpecifier */:
-                case 264 /* NamespaceImport */:
+                case 273 /* ExportSpecifier */:
+                case 266 /* NamespaceImport */:
                     return node.parent.parent;
-                case 263 /* ImportClause */:
-                case 270 /* NamespaceExport */:
+                case 265 /* ImportClause */:
+                case 272 /* NamespaceExport */:
                     return node.parent;
-                case 217 /* BinaryExpression */:
+                case 219 /* BinaryExpression */:
                     return ts.isExpressionStatement(node.parent) ?
                         node.parent :
                         node;
-                case 240 /* ForOfStatement */:
-                case 239 /* ForInStatement */:
+                case 242 /* ForOfStatement */:
+                case 241 /* ForInStatement */:
                     return {
                         start: node.initializer,
                         end: node.expression
                     };
-                case 289 /* PropertyAssignment */:
-                case 290 /* ShorthandPropertyAssignment */:
+                case 291 /* PropertyAssignment */:
+                case 292 /* ShorthandPropertyAssignment */:
                     return ts.isArrayLiteralOrObjectLiteralDestructuringPattern(node.parent) ?
                         getContextNode(ts.findAncestor(node.parent, function (node) {
                             return ts.isBinaryExpression(node) || ts.isForInOrOfStatement(node);
@@ -127085,14 +129965,14 @@
             var node = ts.getTouchingPropertyName(sourceFile, position);
             var referenceEntries;
             var entries = getImplementationReferenceEntries(program, cancellationToken, sourceFiles, node, position);
-            if (node.parent.kind === 202 /* PropertyAccessExpression */
-                || node.parent.kind === 199 /* BindingElement */
-                || node.parent.kind === 203 /* ElementAccessExpression */
-                || node.kind === 105 /* SuperKeyword */) {
-                referenceEntries = entries && __spreadArray([], entries);
+            if (node.parent.kind === 204 /* PropertyAccessExpression */
+                || node.parent.kind === 201 /* BindingElement */
+                || node.parent.kind === 205 /* ElementAccessExpression */
+                || node.kind === 106 /* SuperKeyword */) {
+                referenceEntries = entries && __spreadArray([], entries, true);
             }
             else {
-                var queue = entries && __spreadArray([], entries);
+                var queue = entries && __spreadArray([], entries, true);
                 var seenNodes = new ts.Map();
                 while (queue && queue.length) {
                     var entry = queue.shift();
@@ -127111,18 +129991,18 @@
         }
         FindAllReferences.getImplementationsAtPosition = getImplementationsAtPosition;
         function getImplementationReferenceEntries(program, cancellationToken, sourceFiles, node, position) {
-            if (node.kind === 298 /* SourceFile */) {
+            if (node.kind === 300 /* SourceFile */) {
                 return undefined;
             }
             var checker = program.getTypeChecker();
             // If invoked directly on a shorthand property assignment, then return
             // the declaration of the symbol being assigned (not the symbol being assigned to).
-            if (node.parent.kind === 290 /* ShorthandPropertyAssignment */) {
-                var result_1 = [];
-                Core.getReferenceEntriesForShorthandPropertyAssignment(node, checker, function (node) { return result_1.push(nodeEntry(node)); });
-                return result_1;
+            if (node.parent.kind === 292 /* ShorthandPropertyAssignment */) {
+                var result_2 = [];
+                Core.getReferenceEntriesForShorthandPropertyAssignment(node, checker, function (node) { return result_2.push(nodeEntry(node)); });
+                return result_2;
             }
-            else if (node.kind === 105 /* SuperKeyword */ || ts.isSuperProperty(node.parent)) {
+            else if (node.kind === 106 /* SuperKeyword */ || ts.isSuperProperty(node.parent)) {
                 // References to and accesses on the super keyword only have one possible implementation, so no
                 // need to "Find all References"
                 var symbol = checker.getSymbolAtLocation(node);
@@ -127287,13 +130167,13 @@
             if (symbol) {
                 return getDefinitionKindAndDisplayParts(symbol, checker, node);
             }
-            else if (node.kind === 201 /* ObjectLiteralExpression */) {
+            else if (node.kind === 203 /* ObjectLiteralExpression */) {
                 return {
                     kind: "interface" /* interfaceElement */,
                     displayParts: [ts.punctuationPart(20 /* OpenParenToken */), ts.textPart("object literal"), ts.punctuationPart(21 /* CloseParenToken */)]
                 };
             }
-            else if (node.kind === 222 /* ClassExpression */) {
+            else if (node.kind === 224 /* ClassExpression */) {
                 return {
                     kind: "local class" /* localClassElement */,
                     displayParts: [ts.punctuationPart(20 /* OpenParenToken */), ts.textPart("anonymous local class"), ts.punctuationPart(21 /* CloseParenToken */)]
@@ -127337,13 +130217,13 @@
         /** A node is considered a writeAccess iff it is a name of a declaration or a target of an assignment */
         function isWriteAccessForReference(node) {
             var decl = ts.getDeclarationFromName(node);
-            return !!decl && declarationIsWriteAccess(decl) || node.kind === 87 /* DefaultKeyword */ || ts.isWriteAccess(node);
+            return !!decl && declarationIsWriteAccess(decl) || node.kind === 88 /* DefaultKeyword */ || ts.isWriteAccess(node);
         }
         function isDefinitionForReference(node) {
-            return node.kind === 87 /* DefaultKeyword */
+            return node.kind === 88 /* DefaultKeyword */
                 || !!ts.getDeclarationFromName(node)
                 || ts.isLiteralComputedPropertyDeclarationName(node)
-                || (node.kind === 132 /* ConstructorKeyword */ && ts.isConstructorDeclaration(node.parent));
+                || (node.kind === 133 /* ConstructorKeyword */ && ts.isConstructorDeclaration(node.parent));
         }
         /**
          * True if 'decl' provides a value, as in `function f() {}`;
@@ -127354,47 +130234,47 @@
             if (!!(decl.flags & 8388608 /* Ambient */))
                 return true;
             switch (decl.kind) {
-                case 217 /* BinaryExpression */:
-                case 199 /* BindingElement */:
-                case 253 /* ClassDeclaration */:
-                case 222 /* ClassExpression */:
-                case 87 /* DefaultKeyword */:
-                case 256 /* EnumDeclaration */:
-                case 292 /* EnumMember */:
-                case 271 /* ExportSpecifier */:
-                case 263 /* ImportClause */: // default import
-                case 261 /* ImportEqualsDeclaration */:
-                case 266 /* ImportSpecifier */:
-                case 254 /* InterfaceDeclaration */:
-                case 328 /* JSDocCallbackTag */:
-                case 335 /* JSDocTypedefTag */:
-                case 281 /* JsxAttribute */:
-                case 257 /* ModuleDeclaration */:
-                case 260 /* NamespaceExportDeclaration */:
-                case 264 /* NamespaceImport */:
-                case 270 /* NamespaceExport */:
-                case 161 /* Parameter */:
-                case 290 /* ShorthandPropertyAssignment */:
-                case 255 /* TypeAliasDeclaration */:
-                case 160 /* TypeParameter */:
+                case 219 /* BinaryExpression */:
+                case 201 /* BindingElement */:
+                case 255 /* ClassDeclaration */:
+                case 224 /* ClassExpression */:
+                case 88 /* DefaultKeyword */:
+                case 258 /* EnumDeclaration */:
+                case 294 /* EnumMember */:
+                case 273 /* ExportSpecifier */:
+                case 265 /* ImportClause */: // default import
+                case 263 /* ImportEqualsDeclaration */:
+                case 268 /* ImportSpecifier */:
+                case 256 /* InterfaceDeclaration */:
+                case 333 /* JSDocCallbackTag */:
+                case 340 /* JSDocTypedefTag */:
+                case 283 /* JsxAttribute */:
+                case 259 /* ModuleDeclaration */:
+                case 262 /* NamespaceExportDeclaration */:
+                case 266 /* NamespaceImport */:
+                case 272 /* NamespaceExport */:
+                case 162 /* Parameter */:
+                case 292 /* ShorthandPropertyAssignment */:
+                case 257 /* TypeAliasDeclaration */:
+                case 161 /* TypeParameter */:
                     return true;
-                case 289 /* PropertyAssignment */:
+                case 291 /* PropertyAssignment */:
                     // In `({ x: y } = 0);`, `x` is not a write access. (Won't call this function for `y`.)
                     return !ts.isArrayLiteralOrObjectLiteralDestructuringPattern(decl.parent);
-                case 252 /* FunctionDeclaration */:
-                case 209 /* FunctionExpression */:
-                case 167 /* Constructor */:
-                case 166 /* MethodDeclaration */:
-                case 168 /* GetAccessor */:
-                case 169 /* SetAccessor */:
+                case 254 /* FunctionDeclaration */:
+                case 211 /* FunctionExpression */:
+                case 169 /* Constructor */:
+                case 167 /* MethodDeclaration */:
+                case 170 /* GetAccessor */:
+                case 171 /* SetAccessor */:
                     return !!decl.body;
-                case 250 /* VariableDeclaration */:
-                case 164 /* PropertyDeclaration */:
+                case 252 /* VariableDeclaration */:
+                case 165 /* PropertyDeclaration */:
                     return !!decl.initializer || ts.isCatchClause(decl.parent);
-                case 165 /* MethodSignature */:
-                case 163 /* PropertySignature */:
-                case 337 /* JSDocPropertyTag */:
-                case 330 /* JSDocParameterTag */:
+                case 166 /* MethodSignature */:
+                case 164 /* PropertySignature */:
+                case 342 /* JSDocPropertyTag */:
+                case 335 /* JSDocParameterTag */:
                     return false;
                 default:
                     return ts.Debug.failBadSyntaxKind(decl);
@@ -127615,10 +130495,10 @@
                     for (var _i = 0, _a = symbol.declarations; _i < _a.length; _i++) {
                         var decl = _a[_i];
                         switch (decl.kind) {
-                            case 298 /* SourceFile */:
+                            case 300 /* SourceFile */:
                                 // Don't include the source file itself. (This may not be ideal behavior, but awkward to include an entire file as a reference.)
                                 break;
-                            case 257 /* ModuleDeclaration */:
+                            case 259 /* ModuleDeclaration */:
                                 if (sourceFilesSet.has(decl.getSourceFile().fileName)) {
                                     references.push(nodeEntry(decl.name));
                                 }
@@ -127637,7 +130517,7 @@
                         if (sourceFilesSet.has(sourceFile.fileName)) {
                             // At `module.exports = ...`, reference node is `module`
                             var node = ts.isBinaryExpression(decl) && ts.isPropertyAccessExpression(decl.left) ? decl.left.expression :
-                                ts.isExportAssignment(decl) ? ts.Debug.checkDefined(ts.findChildOfKind(decl, 92 /* ExportKeyword */, sourceFile)) :
+                                ts.isExportAssignment(decl) ? ts.Debug.checkDefined(ts.findChildOfKind(decl, 93 /* ExportKeyword */, sourceFile)) :
                                     ts.getNameOfDeclaration(decl) || decl;
                             references.push(nodeEntry(node));
                         }
@@ -127647,25 +130527,28 @@
             }
             /** As in a `readonly prop: any` or `constructor(readonly prop: any)`, not a `readonly any[]`. */
             function isReadonlyTypeOperator(node) {
-                return node.kind === 142 /* ReadonlyKeyword */
+                return node.kind === 143 /* ReadonlyKeyword */
                     && ts.isTypeOperatorNode(node.parent)
-                    && node.parent.operator === 142 /* ReadonlyKeyword */;
+                    && node.parent.operator === 143 /* ReadonlyKeyword */;
             }
             /** getReferencedSymbols for special node kinds. */
             function getReferencedSymbolsSpecial(node, sourceFiles, cancellationToken) {
                 if (ts.isTypeKeyword(node.kind)) {
                     // A void expression (i.e., `void foo()`) is not special, but the `void` type is.
-                    if (node.kind === 113 /* VoidKeyword */ && ts.isVoidExpression(node.parent)) {
+                    if (node.kind === 114 /* VoidKeyword */ && ts.isVoidExpression(node.parent)) {
                         return undefined;
                     }
                     // A modifier readonly (like on a property declaration) is not special;
                     // a readonly type keyword (like `readonly string[]`) is.
-                    if (node.kind === 142 /* ReadonlyKeyword */ && !isReadonlyTypeOperator(node)) {
+                    if (node.kind === 143 /* ReadonlyKeyword */ && !isReadonlyTypeOperator(node)) {
                         return undefined;
                     }
                     // Likewise, when we *are* looking for a special keyword, make sure we
                     // *don’t* include readonly member modifiers.
-                    return getAllReferencesForKeyword(sourceFiles, node.kind, cancellationToken, node.kind === 142 /* ReadonlyKeyword */ ? isReadonlyTypeOperator : undefined);
+                    return getAllReferencesForKeyword(sourceFiles, node.kind, cancellationToken, node.kind === 143 /* ReadonlyKeyword */ ? isReadonlyTypeOperator : undefined);
+                }
+                if (ts.isStaticModifier(node) && ts.isClassStaticBlockDeclaration(node.parent)) {
+                    return [{ definition: { type: 2 /* Keyword */, node: node }, references: [nodeEntry(node)] }];
                 }
                 // Labels
                 if (ts.isJumpStatementTarget(node)) {
@@ -127681,7 +130564,7 @@
                 if (ts.isThis(node)) {
                     return getReferencesForThisKeyword(node, sourceFiles, cancellationToken);
                 }
-                if (node.kind === 105 /* SuperKeyword */) {
+                if (node.kind === 106 /* SuperKeyword */) {
                     return getReferencesForSuperKeyword(node);
                 }
                 return undefined;
@@ -127698,7 +130581,7 @@
                     // When renaming at an export specifier, rename the export and not the thing being exported.
                     getReferencesAtExportSpecifier(exportSpecifier.name, symbol, exportSpecifier, state.createSearch(node, originalSymbol, /*comingFrom*/ undefined), state, /*addReferencesHere*/ true, /*alwaysGetReferences*/ true);
                 }
-                else if (node && node.kind === 87 /* DefaultKeyword */ && symbol.escapedName === "default" /* Default */ && symbol.parent) {
+                else if (node && node.kind === 88 /* DefaultKeyword */ && symbol.escapedName === "default" /* Default */ && symbol.parent) {
                     addReference(node, symbol, state);
                     searchForImportsOfExport(node, symbol, { exportingModuleSymbol: symbol.parent, exportKind: 1 /* Default */ }, state);
                 }
@@ -127726,10 +130609,10 @@
             }
             function getSpecialSearchKind(node) {
                 switch (node.kind) {
-                    case 167 /* Constructor */:
-                    case 132 /* ConstructorKeyword */:
+                    case 169 /* Constructor */:
+                    case 133 /* ConstructorKeyword */:
                         return 1 /* Constructor */;
-                    case 78 /* Identifier */:
+                    case 79 /* Identifier */:
                         if (ts.isClassLike(node.parent)) {
                             ts.Debug.assert(node.parent.name === node);
                             return 2 /* Class */;
@@ -127969,7 +130852,7 @@
                 // If this is the symbol of a named function expression or named class expression,
                 // then named references are limited to its own scope.
                 var declarations = symbol.declarations, flags = symbol.flags, parent = symbol.parent, valueDeclaration = symbol.valueDeclaration;
-                if (valueDeclaration && (valueDeclaration.kind === 209 /* FunctionExpression */ || valueDeclaration.kind === 222 /* ClassExpression */)) {
+                if (valueDeclaration && (valueDeclaration.kind === 211 /* FunctionExpression */ || valueDeclaration.kind === 224 /* ClassExpression */)) {
                     return valueDeclaration;
                 }
                 if (!declarations) {
@@ -127979,7 +130862,7 @@
                 if (flags & (4 /* Property */ | 8192 /* Method */)) {
                     var privateDeclaration = ts.find(declarations, function (d) { return ts.hasEffectiveModifier(d, 8 /* Private */) || ts.isPrivateIdentifierClassElementDeclaration(d); });
                     if (privateDeclaration) {
-                        return ts.getAncestor(privateDeclaration, 253 /* ClassDeclaration */);
+                        return ts.getAncestor(privateDeclaration, 255 /* ClassDeclaration */);
                     }
                     // Else this is a public property and could be accessed from anywhere.
                     return undefined;
@@ -128008,7 +130891,7 @@
                         // Different declarations have different containers, bail out
                         return undefined;
                     }
-                    if (!container || container.kind === 298 /* SourceFile */ && !ts.isExternalOrCommonJsModule(container)) {
+                    if (!container || container.kind === 300 /* SourceFile */ && !ts.isExternalOrCommonJsModule(container)) {
                         // This is a global variable and not an external module, any declaration defined
                         // within this scope is visible outside the file
                         return undefined;
@@ -128124,8 +131007,12 @@
             function isValidReferencePosition(node, searchSymbolName) {
                 // Compare the length so we filter out strict superstrings of the symbol we are looking for
                 switch (node.kind) {
-                    case 79 /* PrivateIdentifier */:
-                    case 78 /* Identifier */:
+                    case 80 /* PrivateIdentifier */:
+                        if (ts.isJSDocMemberName(node.parent)) {
+                            return true;
+                        }
+                    // falls through I guess
+                    case 79 /* Identifier */:
                         return node.text.length === searchSymbolName.length;
                     case 14 /* NoSubstitutionTemplateLiteral */:
                     case 10 /* StringLiteral */: {
@@ -128135,7 +131022,7 @@
                     }
                     case 8 /* NumericLiteral */:
                         return ts.isLiteralNameOfPropertyDeclarationOrIndexAccess(node) && node.text.length === searchSymbolName.length;
-                    case 87 /* DefaultKeyword */:
+                    case 88 /* DefaultKeyword */:
                         return "default".length === searchSymbolName.length;
                     default:
                         return false;
@@ -128201,7 +131088,7 @@
                     return;
                 }
                 if (ts.isExportSpecifier(parent)) {
-                    ts.Debug.assert(referenceLocation.kind === 78 /* Identifier */);
+                    ts.Debug.assert(referenceLocation.kind === 79 /* Identifier */);
                     getReferencesAtExportSpecifier(referenceLocation, referenceSymbol, parent, search, state, addReferencesHere);
                     return;
                 }
@@ -128225,7 +131112,7 @@
                         ts.Debug.assertNever(state.specialSearchKind);
                 }
                 // Use the parent symbol if the location is commonjs require syntax on javascript files only.
-                referenceSymbol = ts.isInJSFile(referenceLocation) && referenceLocation.parent.kind === 199 /* BindingElement */ && ts.isRequireVariableDeclaration(referenceLocation.parent)
+                referenceSymbol = ts.isInJSFile(referenceLocation) && referenceLocation.parent.kind === 201 /* BindingElement */ && ts.isRequireVariableDeclaration(referenceLocation.parent)
                     ? referenceLocation.parent.symbol
                     : referenceSymbol;
                 getImportOrExportReferences(referenceLocation, referenceSymbol, search, state);
@@ -128261,8 +131148,8 @@
                 }
                 // For `export { foo as bar }`, rename `foo`, but not `bar`.
                 if (!isForRenameWithPrefixAndSuffixText(state.options) || alwaysGetReferences) {
-                    var isDefaultExport = referenceLocation.originalKeywordKind === 87 /* DefaultKeyword */
-                        || exportSpecifier.name.originalKeywordKind === 87 /* DefaultKeyword */;
+                    var isDefaultExport = referenceLocation.originalKeywordKind === 88 /* DefaultKeyword */
+                        || exportSpecifier.name.originalKeywordKind === 88 /* DefaultKeyword */;
                     var exportKind = isDefaultExport ? 1 /* Default */ : 0 /* Named */;
                     var exportSymbol = ts.Debug.checkDefined(exportSpecifier.symbol);
                     var exportInfo = FindAllReferences.getExportInfo(exportSymbol, exportKind, state.checker);
@@ -128343,7 +131230,7 @@
                 }
                 var pusher = function () { return state.referenceAdder(search.symbol); };
                 if (ts.isClassLike(referenceLocation.parent)) {
-                    ts.Debug.assert(referenceLocation.kind === 87 /* DefaultKeyword */ || referenceLocation.parent.name === referenceLocation);
+                    ts.Debug.assert(referenceLocation.kind === 88 /* DefaultKeyword */ || referenceLocation.parent.name === referenceLocation);
                     // This is the class declaration containing the constructor.
                     findOwnConstructorReferences(search.symbol, sourceFile, pusher());
                 }
@@ -128365,12 +131252,12 @@
                 var addRef = state.referenceAdder(search.symbol);
                 for (var _i = 0, _a = classLike.members; _i < _a.length; _i++) {
                     var member = _a[_i];
-                    if (!(ts.isMethodOrAccessor(member) && ts.hasSyntacticModifier(member, 32 /* Static */))) {
+                    if (!(ts.isMethodOrAccessor(member) && ts.isStatic(member))) {
                         continue;
                     }
                     if (member.body) {
                         member.body.forEachChild(function cb(node) {
-                            if (node.kind === 107 /* ThisKeyword */) {
+                            if (node.kind === 108 /* ThisKeyword */) {
                                 addRef(node);
                             }
                             else if (!ts.isFunctionLike(node) && !ts.isClassLike(node)) {
@@ -128389,18 +131276,18 @@
                 if (constructorSymbol && constructorSymbol.declarations) {
                     for (var _i = 0, _a = constructorSymbol.declarations; _i < _a.length; _i++) {
                         var decl = _a[_i];
-                        var ctrKeyword = ts.findChildOfKind(decl, 132 /* ConstructorKeyword */, sourceFile);
-                        ts.Debug.assert(decl.kind === 167 /* Constructor */ && !!ctrKeyword);
+                        var ctrKeyword = ts.findChildOfKind(decl, 133 /* ConstructorKeyword */, sourceFile);
+                        ts.Debug.assert(decl.kind === 169 /* Constructor */ && !!ctrKeyword);
                         addNode(ctrKeyword);
                     }
                 }
                 if (classSymbol.exports) {
                     classSymbol.exports.forEach(function (member) {
                         var decl = member.valueDeclaration;
-                        if (decl && decl.kind === 166 /* MethodDeclaration */) {
+                        if (decl && decl.kind === 167 /* MethodDeclaration */) {
                             var body = decl.body;
                             if (body) {
-                                forEachDescendantOfKind(body, 107 /* ThisKeyword */, function (thisKeyword) {
+                                forEachDescendantOfKind(body, 108 /* ThisKeyword */, function (thisKeyword) {
                                     if (ts.isNewExpressionTarget(thisKeyword)) {
                                         addNode(thisKeyword);
                                     }
@@ -128421,10 +131308,10 @@
                 }
                 for (var _i = 0, _a = constructor.declarations; _i < _a.length; _i++) {
                     var decl = _a[_i];
-                    ts.Debug.assert(decl.kind === 167 /* Constructor */);
+                    ts.Debug.assert(decl.kind === 169 /* Constructor */);
                     var body = decl.body;
                     if (body) {
-                        forEachDescendantOfKind(body, 105 /* SuperKeyword */, function (node) {
+                        forEachDescendantOfKind(body, 106 /* SuperKeyword */, function (node) {
                             if (ts.isCallExpressionTarget(node)) {
                                 addNode(node);
                             }
@@ -128448,10 +131335,10 @@
                     addReference(refNode);
                     return;
                 }
-                if (refNode.kind !== 78 /* Identifier */) {
+                if (refNode.kind !== 79 /* Identifier */) {
                     return;
                 }
-                if (refNode.parent.kind === 290 /* ShorthandPropertyAssignment */) {
+                if (refNode.parent.kind === 292 /* ShorthandPropertyAssignment */) {
                     // Go ahead and dereference the shorthand assignment by going to its definition
                     getReferenceEntriesForShorthandPropertyAssignment(refNode, state.checker, addReference);
                 }
@@ -128471,7 +131358,7 @@
                     }
                     else if (ts.isFunctionLike(typeHavingNode) && typeHavingNode.body) {
                         var body = typeHavingNode.body;
-                        if (body.kind === 231 /* Block */) {
+                        if (body.kind === 233 /* Block */) {
                             ts.forEachReturnStatement(body, function (returnStatement) {
                                 if (returnStatement.expression)
                                     addIfImplementation(returnStatement.expression);
@@ -128499,13 +131386,13 @@
              */
             function isImplementationExpression(node) {
                 switch (node.kind) {
-                    case 208 /* ParenthesizedExpression */:
+                    case 210 /* ParenthesizedExpression */:
                         return isImplementationExpression(node.expression);
-                    case 210 /* ArrowFunction */:
-                    case 209 /* FunctionExpression */:
-                    case 201 /* ObjectLiteralExpression */:
-                    case 222 /* ClassExpression */:
-                    case 200 /* ArrayLiteralExpression */:
+                    case 212 /* ArrowFunction */:
+                    case 211 /* FunctionExpression */:
+                    case 203 /* ObjectLiteralExpression */:
+                    case 224 /* ClassExpression */:
+                    case 202 /* ArrayLiteralExpression */:
                         return true;
                     default:
                         return false;
@@ -128558,13 +131445,13 @@
                 // Whether 'super' occurs in a static context within a class.
                 var staticFlag = 32 /* Static */;
                 switch (searchSpaceNode.kind) {
-                    case 164 /* PropertyDeclaration */:
-                    case 163 /* PropertySignature */:
-                    case 166 /* MethodDeclaration */:
-                    case 165 /* MethodSignature */:
-                    case 167 /* Constructor */:
-                    case 168 /* GetAccessor */:
-                    case 169 /* SetAccessor */:
+                    case 165 /* PropertyDeclaration */:
+                    case 164 /* PropertySignature */:
+                    case 167 /* MethodDeclaration */:
+                    case 166 /* MethodSignature */:
+                    case 169 /* Constructor */:
+                    case 170 /* GetAccessor */:
+                    case 171 /* SetAccessor */:
                         staticFlag &= ts.getSyntacticModifierFlags(searchSpaceNode);
                         searchSpaceNode = searchSpaceNode.parent; // re-assign to be the owning class
                         break;
@@ -128573,55 +131460,55 @@
                 }
                 var sourceFile = searchSpaceNode.getSourceFile();
                 var references = ts.mapDefined(getPossibleSymbolReferenceNodes(sourceFile, "super", searchSpaceNode), function (node) {
-                    if (node.kind !== 105 /* SuperKeyword */) {
+                    if (node.kind !== 106 /* SuperKeyword */) {
                         return;
                     }
                     var container = ts.getSuperContainer(node, /*stopOnFunctions*/ false);
                     // If we have a 'super' container, we must have an enclosing class.
                     // Now make sure the owning class is the same as the search-space
                     // and has the same static qualifier as the original 'super's owner.
-                    return container && (32 /* Static */ & ts.getSyntacticModifierFlags(container)) === staticFlag && container.parent.symbol === searchSpaceNode.symbol ? nodeEntry(node) : undefined;
+                    return container && ts.isStatic(container) === !!staticFlag && container.parent.symbol === searchSpaceNode.symbol ? nodeEntry(node) : undefined;
                 });
                 return [{ definition: { type: 0 /* Symbol */, symbol: searchSpaceNode.symbol }, references: references }];
             }
             function isParameterName(node) {
-                return node.kind === 78 /* Identifier */ && node.parent.kind === 161 /* Parameter */ && node.parent.name === node;
+                return node.kind === 79 /* Identifier */ && node.parent.kind === 162 /* Parameter */ && node.parent.name === node;
             }
             function getReferencesForThisKeyword(thisOrSuperKeyword, sourceFiles, cancellationToken) {
                 var searchSpaceNode = ts.getThisContainer(thisOrSuperKeyword, /* includeArrowFunctions */ false);
                 // Whether 'this' occurs in a static context within a class.
                 var staticFlag = 32 /* Static */;
                 switch (searchSpaceNode.kind) {
-                    case 166 /* MethodDeclaration */:
-                    case 165 /* MethodSignature */:
+                    case 167 /* MethodDeclaration */:
+                    case 166 /* MethodSignature */:
                         if (ts.isObjectLiteralMethod(searchSpaceNode)) {
                             staticFlag &= ts.getSyntacticModifierFlags(searchSpaceNode);
                             searchSpaceNode = searchSpaceNode.parent; // re-assign to be the owning object literals
                             break;
                         }
                     // falls through
-                    case 164 /* PropertyDeclaration */:
-                    case 163 /* PropertySignature */:
-                    case 167 /* Constructor */:
-                    case 168 /* GetAccessor */:
-                    case 169 /* SetAccessor */:
+                    case 165 /* PropertyDeclaration */:
+                    case 164 /* PropertySignature */:
+                    case 169 /* Constructor */:
+                    case 170 /* GetAccessor */:
+                    case 171 /* SetAccessor */:
                         staticFlag &= ts.getSyntacticModifierFlags(searchSpaceNode);
                         searchSpaceNode = searchSpaceNode.parent; // re-assign to be the owning class
                         break;
-                    case 298 /* SourceFile */:
+                    case 300 /* SourceFile */:
                         if (ts.isExternalModule(searchSpaceNode) || isParameterName(thisOrSuperKeyword)) {
                             return undefined;
                         }
                     // falls through
-                    case 252 /* FunctionDeclaration */:
-                    case 209 /* FunctionExpression */:
+                    case 254 /* FunctionDeclaration */:
+                    case 211 /* FunctionExpression */:
                         break;
                     // Computed properties in classes are not handled here because references to this are illegal,
                     // so there is no point finding references to them.
                     default:
                         return undefined;
                 }
-                var references = ts.flatMap(searchSpaceNode.kind === 298 /* SourceFile */ ? sourceFiles : [searchSpaceNode.getSourceFile()], function (sourceFile) {
+                var references = ts.flatMap(searchSpaceNode.kind === 300 /* SourceFile */ ? sourceFiles : [searchSpaceNode.getSourceFile()], function (sourceFile) {
                     cancellationToken.throwIfCancellationRequested();
                     return getPossibleSymbolReferenceNodes(sourceFile, "this", ts.isSourceFile(searchSpaceNode) ? sourceFile : searchSpaceNode).filter(function (node) {
                         if (!ts.isThis(node)) {
@@ -128629,20 +131516,20 @@
                         }
                         var container = ts.getThisContainer(node, /* includeArrowFunctions */ false);
                         switch (searchSpaceNode.kind) {
-                            case 209 /* FunctionExpression */:
-                            case 252 /* FunctionDeclaration */:
+                            case 211 /* FunctionExpression */:
+                            case 254 /* FunctionDeclaration */:
                                 return searchSpaceNode.symbol === container.symbol;
-                            case 166 /* MethodDeclaration */:
-                            case 165 /* MethodSignature */:
+                            case 167 /* MethodDeclaration */:
+                            case 166 /* MethodSignature */:
                                 return ts.isObjectLiteralMethod(searchSpaceNode) && searchSpaceNode.symbol === container.symbol;
-                            case 222 /* ClassExpression */:
-                            case 253 /* ClassDeclaration */:
-                            case 201 /* ObjectLiteralExpression */:
+                            case 224 /* ClassExpression */:
+                            case 255 /* ClassDeclaration */:
+                            case 203 /* ObjectLiteralExpression */:
                                 // Make sure the container belongs to the same class/object literals
                                 // and has the appropriate static modifier from the original container.
-                                return container.parent && searchSpaceNode.symbol === container.parent.symbol && (ts.getSyntacticModifierFlags(container) & 32 /* Static */) === staticFlag;
-                            case 298 /* SourceFile */:
-                                return container.kind === 298 /* SourceFile */ && !ts.isExternalModule(container) && !isParameterName(node);
+                                return container.parent && searchSpaceNode.symbol === container.parent.symbol && ts.isStatic(container) === !!staticFlag;
+                            case 300 /* SourceFile */:
+                                return container.kind === 300 /* SourceFile */ && !ts.isExternalModule(container) && !isParameterName(node);
                         }
                     });
                 }).map(function (n) { return nodeEntry(n); });
@@ -128682,7 +131569,7 @@
                 forEachRelatedSymbol(symbol, location, checker, isForRename, !(isForRename && providePrefixAndSuffixText), function (sym, root, base) {
                     // static method/property and instance method/property might have the same name. Only include static or only include instance.
                     if (base) {
-                        if (isStatic(symbol) !== isStatic(base)) {
+                        if (isStaticSymbol(symbol) !== isStaticSymbol(base)) {
                             base = undefined;
                         }
                     }
@@ -128752,7 +131639,7 @@
                     ts.Debug.assert(paramProps.length === 2 && !!(paramProps[0].flags & 1 /* FunctionScopedVariable */) && !!(paramProps[1].flags & 4 /* Property */)); // is [parameter, property]
                     return fromRoot(symbol.flags & 1 /* FunctionScopedVariable */ ? paramProps[1] : paramProps[0]);
                 }
-                var exportSpecifier = ts.getDeclarationOfKind(symbol, 271 /* ExportSpecifier */);
+                var exportSpecifier = ts.getDeclarationOfKind(symbol, 273 /* ExportSpecifier */);
                 if (!isForRenamePopulateSearchSymbolSet || exportSpecifier && !exportSpecifier.propertyName) {
                     var localSymbol = exportSpecifier && checker.getExportSpecifierLocalTargetSymbol(exportSpecifier);
                     if (localSymbol) {
@@ -128797,7 +131684,7 @@
                     });
                 }
                 function getPropertySymbolOfObjectBindingPatternWithoutPropertyName(symbol, checker) {
-                    var bindingElement = ts.getDeclarationOfKind(symbol, 199 /* BindingElement */);
+                    var bindingElement = ts.getDeclarationOfKind(symbol, 201 /* BindingElement */);
                     if (bindingElement && ts.isObjectBindingElementWithoutPropertyName(bindingElement)) {
                         return ts.getPropertySymbolFromBindingElement(checker, bindingElement);
                     }
@@ -128829,7 +131716,7 @@
                     }); });
                 }
             }
-            function isStatic(symbol) {
+            function isStaticSymbol(symbol) {
                 if (!symbol.valueDeclaration) {
                     return false;
                 }
@@ -128843,7 +131730,7 @@
                     // check whether the symbol used to search itself is just the searched one.
                     if (baseSymbol) {
                         // static method/property and instance method/property might have the same name. Only check static or only check instance.
-                        if (isStatic(referenceSymbol) !== isStatic(baseSymbol)) {
+                        if (isStaticSymbol(referenceSymbol) !== isStaticSymbol(baseSymbol)) {
                             baseSymbol = undefined;
                         }
                     }
@@ -128968,6 +131855,7 @@
                 || ts.isFunctionExpression(node)
                 || ts.isClassDeclaration(node)
                 || ts.isClassExpression(node)
+                || ts.isClassStaticBlockDeclaration(node)
                 || ts.isMethodDeclaration(node)
                 || ts.isMethodSignature(node)
                 || ts.isGetAccessorDeclaration(node)
@@ -128983,6 +131871,7 @@
                 || ts.isModuleDeclaration(node) && ts.isIdentifier(node.name)
                 || ts.isFunctionDeclaration(node)
                 || ts.isClassDeclaration(node)
+                || ts.isClassStaticBlockDeclaration(node)
                 || ts.isMethodDeclaration(node)
                 || ts.isMethodSignature(node)
                 || ts.isGetAccessorDeclaration(node)
@@ -129001,7 +131890,7 @@
             return ts.Debug.checkDefined(node.modifiers && ts.find(node.modifiers, isDefaultModifier));
         }
         function isDefaultModifier(node) {
-            return node.kind === 87 /* DefaultKeyword */;
+            return node.kind === 88 /* DefaultKeyword */;
         }
         /** Gets the symbol for a call hierarchy declaration. */
         function getSymbolOfCallHierarchyDeclaration(typeChecker, node) {
@@ -129019,6 +131908,15 @@
                     return { text: "default", pos: defaultModifier.getStart(), end: defaultModifier.getEnd() };
                 }
             }
+            if (ts.isClassStaticBlockDeclaration(node)) {
+                var sourceFile = node.getSourceFile();
+                var pos = ts.skipTrivia(sourceFile.text, ts.moveRangePastModifiers(node).pos);
+                var end = pos + 6; /* "static".length */
+                var typeChecker = program.getTypeChecker();
+                var symbol = typeChecker.getSymbolAtLocation(node.parent);
+                var prefix = symbol ? typeChecker.symbolToString(symbol, node.parent) + " " : "";
+                return { text: prefix + "static {}", pos: pos, end: end };
+            }
             var declName = isConstNamedExpression(node) ? node.parent.name :
                 ts.Debug.checkDefined(ts.getNameOfDeclaration(node), "Expected call hierarchy item to have a name");
             var text = ts.isIdentifier(declName) ? ts.idText(declName) :
@@ -129050,16 +131948,16 @@
                 return;
             }
             switch (node.kind) {
-                case 168 /* GetAccessor */:
-                case 169 /* SetAccessor */:
-                case 166 /* MethodDeclaration */:
-                    if (node.parent.kind === 201 /* ObjectLiteralExpression */) {
+                case 170 /* GetAccessor */:
+                case 171 /* SetAccessor */:
+                case 167 /* MethodDeclaration */:
+                    if (node.parent.kind === 203 /* ObjectLiteralExpression */) {
                         return (_a = ts.getAssignedName(node.parent)) === null || _a === void 0 ? void 0 : _a.getText();
                     }
                     return (_b = ts.getNameOfDeclaration(node.parent)) === null || _b === void 0 ? void 0 : _b.getText();
-                case 252 /* FunctionDeclaration */:
-                case 253 /* ClassDeclaration */:
-                case 257 /* ModuleDeclaration */:
+                case 254 /* FunctionDeclaration */:
+                case 255 /* ClassDeclaration */:
+                case 259 /* ModuleDeclaration */:
                     if (ts.isModuleBlock(node.parent) && ts.isIdentifier(node.parent.parent.name)) {
                         return node.parent.parent.name.getText();
                     }
@@ -129105,6 +132003,9 @@
         /** Find the implementation or the first declaration for a call hierarchy declaration. */
         function findImplementationOrAllInitialDeclarations(typeChecker, node) {
             var _a, _b, _c;
+            if (ts.isClassStaticBlockDeclaration(node)) {
+                return node;
+            }
             if (ts.isFunctionLikeDeclaration(node)) {
                 return (_b = (_a = findImplementation(typeChecker, node)) !== null && _a !== void 0 ? _a : findAllInitialDeclarations(typeChecker, node)) !== null && _b !== void 0 ? _b : node;
             }
@@ -129112,13 +132013,14 @@
         }
         /** Resolves the call hierarchy declaration for a node. */
         function resolveCallHierarchyDeclaration(program, location) {
-            // A call hierarchy item must refer to either a SourceFile, Module Declaration, or something intrinsically callable that has a name:
+            // A call hierarchy item must refer to either a SourceFile, Module Declaration, Class Static Block, or something intrinsically callable that has a name:
             // - Class Declarations
             // - Class Expressions (with a name)
             // - Function Declarations
             // - Function Expressions (with a name or assigned to a const variable)
             // - Arrow Functions (assigned to a const variable)
             // - Constructors
+            // - Class `static {}` initializer blocks
             // - Methods
             // - Accessors
             //
@@ -129153,6 +132055,10 @@
                     }
                     return undefined;
                 }
+                if (location.kind === 124 /* StaticKeyword */ && ts.isClassStaticBlockDeclaration(location.parent)) {
+                    location = location.parent;
+                    continue;
+                }
                 // #39453
                 if (ts.isVariableDeclaration(location) && location.initializer && isConstNamedExpression(location.initializer)) {
                     return location.initializer;
@@ -129216,7 +132122,7 @@
         /** Gets the call sites that call into the provided call hierarchy declaration. */
         function getIncomingCalls(program, declaration, cancellationToken) {
             // Source files and modules have no incoming calls.
-            if (ts.isSourceFile(declaration) || ts.isModuleDeclaration(declaration)) {
+            if (ts.isSourceFile(declaration) || ts.isModuleDeclaration(declaration) || ts.isClassStaticBlockDeclaration(declaration)) {
                 return [];
             }
             var location = getCallHierarchyDeclarationReferenceNode(declaration);
@@ -129229,7 +132135,8 @@
                 var target = ts.isTaggedTemplateExpression(node) ? node.tag :
                     ts.isJsxOpeningLikeElement(node) ? node.tagName :
                         ts.isAccessExpression(node) ? node :
-                            node.expression;
+                            ts.isClassStaticBlockDeclaration(node) ? node :
+                                node.expression;
                 var declaration = resolveCallHierarchyDeclaration(program, target);
                 if (declaration) {
                     var range = ts.createTextRangeFromNode(target, node.getSourceFile());
@@ -129264,56 +132171,59 @@
                     return;
                 }
                 switch (node.kind) {
-                    case 78 /* Identifier */:
-                    case 261 /* ImportEqualsDeclaration */:
-                    case 262 /* ImportDeclaration */:
-                    case 268 /* ExportDeclaration */:
-                    case 254 /* InterfaceDeclaration */:
-                    case 255 /* TypeAliasDeclaration */:
+                    case 79 /* Identifier */:
+                    case 263 /* ImportEqualsDeclaration */:
+                    case 264 /* ImportDeclaration */:
+                    case 270 /* ExportDeclaration */:
+                    case 256 /* InterfaceDeclaration */:
+                    case 257 /* TypeAliasDeclaration */:
                         // do not descend into nodes that cannot contain callable nodes
                         return;
-                    case 207 /* TypeAssertionExpression */:
-                    case 225 /* AsExpression */:
+                    case 168 /* ClassStaticBlockDeclaration */:
+                        recordCallSite(node);
+                        return;
+                    case 209 /* TypeAssertionExpression */:
+                    case 227 /* AsExpression */:
                         // do not descend into the type side of an assertion
                         collect(node.expression);
                         return;
-                    case 250 /* VariableDeclaration */:
-                    case 161 /* Parameter */:
+                    case 252 /* VariableDeclaration */:
+                    case 162 /* Parameter */:
                         // do not descend into the type of a variable or parameter declaration
                         collect(node.name);
                         collect(node.initializer);
                         return;
-                    case 204 /* CallExpression */:
+                    case 206 /* CallExpression */:
                         // do not descend into the type arguments of a call expression
                         recordCallSite(node);
                         collect(node.expression);
                         ts.forEach(node.arguments, collect);
                         return;
-                    case 205 /* NewExpression */:
+                    case 207 /* NewExpression */:
                         // do not descend into the type arguments of a new expression
                         recordCallSite(node);
                         collect(node.expression);
                         ts.forEach(node.arguments, collect);
                         return;
-                    case 206 /* TaggedTemplateExpression */:
+                    case 208 /* TaggedTemplateExpression */:
                         // do not descend into the type arguments of a tagged template expression
                         recordCallSite(node);
                         collect(node.tag);
                         collect(node.template);
                         return;
-                    case 276 /* JsxOpeningElement */:
-                    case 275 /* JsxSelfClosingElement */:
+                    case 278 /* JsxOpeningElement */:
+                    case 277 /* JsxSelfClosingElement */:
                         // do not descend into the type arguments of a JsxOpeningLikeElement
                         recordCallSite(node);
                         collect(node.tagName);
                         collect(node.attributes);
                         return;
-                    case 162 /* Decorator */:
+                    case 163 /* Decorator */:
                         recordCallSite(node);
                         collect(node.expression);
                         return;
-                    case 202 /* PropertyAccessExpression */:
-                    case 203 /* ElementAccessExpression */:
+                    case 204 /* PropertyAccessExpression */:
+                    case 205 /* ElementAccessExpression */:
                         recordCallSite(node);
                         ts.forEachChild(node, collect);
                         break;
@@ -129341,6 +132251,9 @@
                 collect(implementation.body);
             }
         }
+        function collectCallSitesOfClassStaticBlockDeclaration(node, collect) {
+            collect(node.body);
+        }
         function collectCallSitesOfClassLikeDeclaration(node, collect) {
             ts.forEach(node.decorators, collect);
             var heritage = ts.getClassExtendsHeritageElement(node);
@@ -129357,30 +132270,36 @@
                     ts.forEach(member.parameters, collect);
                     collect(member.body);
                 }
+                else if (ts.isClassStaticBlockDeclaration(member)) {
+                    collect(member);
+                }
             }
         }
         function collectCallSites(program, node) {
             var callSites = [];
             var collect = createCallSiteCollector(program, callSites);
             switch (node.kind) {
-                case 298 /* SourceFile */:
+                case 300 /* SourceFile */:
                     collectCallSitesOfSourceFile(node, collect);
                     break;
-                case 257 /* ModuleDeclaration */:
+                case 259 /* ModuleDeclaration */:
                     collectCallSitesOfModuleDeclaration(node, collect);
                     break;
-                case 252 /* FunctionDeclaration */:
-                case 209 /* FunctionExpression */:
-                case 210 /* ArrowFunction */:
-                case 166 /* MethodDeclaration */:
-                case 168 /* GetAccessor */:
-                case 169 /* SetAccessor */:
+                case 254 /* FunctionDeclaration */:
+                case 211 /* FunctionExpression */:
+                case 212 /* ArrowFunction */:
+                case 167 /* MethodDeclaration */:
+                case 170 /* GetAccessor */:
+                case 171 /* SetAccessor */:
                     collectCallSitesOfFunctionLikeDeclaration(program.getTypeChecker(), node, collect);
                     break;
-                case 253 /* ClassDeclaration */:
-                case 222 /* ClassExpression */:
+                case 255 /* ClassDeclaration */:
+                case 224 /* ClassExpression */:
                     collectCallSitesOfClassLikeDeclaration(node, collect);
                     break;
+                case 168 /* ClassStaticBlockDeclaration */:
+                    collectCallSitesOfClassStaticBlockDeclaration(node, collect);
+                    break;
                 default:
                     ts.Debug.assertNever(node);
             }
@@ -129453,16 +132372,18 @@
                 case "include":
                 case "exclude": {
                     var foundExactMatch = updatePaths(property);
-                    if (!foundExactMatch && propertyName === "include" && ts.isArrayLiteralExpression(property.initializer)) {
-                        var includes = ts.mapDefined(property.initializer.elements, function (e) { return ts.isStringLiteral(e) ? e.text : undefined; });
-                        var matchers = ts.getFileMatcherPatterns(configDir, /*excludes*/ [], includes, useCaseSensitiveFileNames, currentDirectory);
-                        // If there isn't some include for this, add a new one.
-                        if (ts.getRegexFromPattern(ts.Debug.checkDefined(matchers.includeFilePattern), useCaseSensitiveFileNames).test(oldFileOrDirPath) &&
-                            !ts.getRegexFromPattern(ts.Debug.checkDefined(matchers.includeFilePattern), useCaseSensitiveFileNames).test(newFileOrDirPath)) {
-                            changeTracker.insertNodeAfter(configFile, ts.last(property.initializer.elements), ts.factory.createStringLiteral(relativePath(newFileOrDirPath)));
-                        }
+                    if (foundExactMatch || propertyName !== "include" || !ts.isArrayLiteralExpression(property.initializer))
+                        return;
+                    var includes = ts.mapDefined(property.initializer.elements, function (e) { return ts.isStringLiteral(e) ? e.text : undefined; });
+                    if (includes.length === 0)
+                        return;
+                    var matchers = ts.getFileMatcherPatterns(configDir, /*excludes*/ [], includes, useCaseSensitiveFileNames, currentDirectory);
+                    // If there isn't some include for this, add a new one.
+                    if (ts.getRegexFromPattern(ts.Debug.checkDefined(matchers.includeFilePattern), useCaseSensitiveFileNames).test(oldFileOrDirPath) &&
+                        !ts.getRegexFromPattern(ts.Debug.checkDefined(matchers.includeFilePattern), useCaseSensitiveFileNames).test(newFileOrDirPath)) {
+                        changeTracker.insertNodeAfter(configFile, ts.last(property.initializer.elements), ts.factory.createStringLiteral(relativePath(newFileOrDirPath)));
                     }
-                    break;
+                    return;
                 }
                 case "compilerOptions":
                     forEachProperty(property.initializer, function (property, propertyName) {
@@ -129481,11 +132402,10 @@
                             });
                         }
                     });
-                    break;
+                    return;
             }
         });
         function updatePaths(property) {
-            // Type annotation needed due to #7294
             var elements = ts.isArrayLiteralExpression(property.initializer) ? property.initializer.elements : [property.initializer];
             var foundExactMatch = false;
             for (var _i = 0, elements_1 = elements; _i < elements_1.length; _i++) {
@@ -129573,9 +132493,9 @@
             return undefined;
         // First try resolved module
         if (resolved.resolvedModule) {
-            var result_2 = tryChange(resolved.resolvedModule.resolvedFileName);
-            if (result_2)
-                return result_2;
+            var result_3 = tryChange(resolved.resolvedModule.resolvedFileName);
+            if (result_3)
+                return result_3;
         }
         // Then failed lookups that are in the list of sources
         var result = ts.forEach(resolved.failedLookupLocations, tryChangeWithIgnoringPackageJsonExisting)
@@ -129645,11 +132565,26 @@
             }
             var parent = node.parent;
             var typeChecker = program.getTypeChecker();
+            if (node.kind === 157 /* OverrideKeyword */ || (ts.isJSDocOverrideTag(node) && ts.rangeContainsPosition(node.tagName, position))) {
+                return getDefinitionFromOverriddenMember(typeChecker, node) || ts.emptyArray;
+            }
             // Labels
             if (ts.isJumpStatementTarget(node)) {
                 var label = ts.getTargetLabel(node.parent, node.text);
                 return label ? [createDefinitionInfoFromName(typeChecker, label, "label" /* label */, node.text, /*containerName*/ undefined)] : undefined; // TODO: GH#18217
             }
+            if (ts.isStaticModifier(node) && ts.isClassStaticBlockDeclaration(node.parent)) {
+                var classDecl = node.parent.parent;
+                var symbol_1 = getSymbol(classDecl, typeChecker);
+                var staticBlocks = ts.filter(classDecl.members, ts.isClassStaticBlockDeclaration);
+                var containerName_1 = symbol_1 ? typeChecker.symbolToString(symbol_1, classDecl) : "";
+                var sourceFile_1 = node.getSourceFile();
+                return ts.map(staticBlocks, function (staticBlock) {
+                    var pos = ts.moveRangePastModifiers(staticBlock).pos;
+                    pos = ts.skipTrivia(sourceFile_1.text, pos);
+                    return createDefinitionInfoFromName(typeChecker, staticBlock, "constructor" /* constructorImplementationElement */, "static {}", containerName_1, { start: pos, length: "static".length });
+                });
+            }
             var symbol = getSymbol(node, typeChecker);
             // Could not find a symbol e.g. node is string or number keyword,
             // or the symbol was an internal symbol and does not have a declaration e.g. undefined symbol
@@ -129668,7 +132603,7 @@
                 else {
                     var defs = getDefinitionFromSymbol(typeChecker, symbol, node, calledDeclaration) || ts.emptyArray;
                     // For a 'super()' call, put the signature first, else put the variable first.
-                    return node.kind === 105 /* SuperKeyword */ ? __spreadArray([sigInfo], defs) : __spreadArray(__spreadArray([], defs), [sigInfo]);
+                    return node.kind === 106 /* SuperKeyword */ ? __spreadArray([sigInfo], defs, true) : __spreadArray(__spreadArray([], defs, true), [sigInfo], false);
                 }
             }
             // Because name in short-hand property assignment has two different meanings: property name and property value,
@@ -129676,7 +132611,7 @@
             // go to the declaration of the property name (in this case stay at the same position). However, if go-to-definition
             // is performed at the location of property access, we would like to go to definition of the property in the short-hand
             // assignment. This case and others are handled by the following code.
-            if (node.parent.kind === 290 /* ShorthandPropertyAssignment */) {
+            if (node.parent.kind === 292 /* ShorthandPropertyAssignment */) {
                 var shorthandSymbol_1 = typeChecker.getShorthandAssignmentValueSymbol(symbol.valueDeclaration);
                 var definitions = (shorthandSymbol_1 === null || shorthandSymbol_1 === void 0 ? void 0 : shorthandSymbol_1.declarations) ? shorthandSymbol_1.declarations.map(function (decl) { return createDefinitionInfo(decl, typeChecker, shorthandSymbol_1, node); }) : ts.emptyArray;
                 return ts.concatenate(definitions, getDefinitionFromObjectLiteralElement(typeChecker, node) || ts.emptyArray);
@@ -129735,6 +132670,25 @@
                 }
             }
         }
+        function getDefinitionFromOverriddenMember(typeChecker, node) {
+            var classElement = ts.findAncestor(node, ts.isClassElement);
+            if (!(classElement && classElement.name))
+                return;
+            var baseDeclaration = ts.findAncestor(classElement, ts.isClassLike);
+            if (!baseDeclaration)
+                return;
+            var baseTypeNode = ts.getEffectiveBaseTypeNode(baseDeclaration);
+            var baseType = baseTypeNode ? typeChecker.getTypeAtLocation(baseTypeNode) : undefined;
+            if (!baseType)
+                return;
+            var name = ts.unescapeLeadingUnderscores(ts.getTextOfPropertyName(classElement.name));
+            var symbol = ts.hasStaticModifier(classElement)
+                ? typeChecker.getPropertyOfType(typeChecker.getTypeOfSymbolAtLocation(baseType.symbol, baseDeclaration), name)
+                : typeChecker.getPropertyOfType(baseType, name);
+            if (!symbol)
+                return;
+            return getDefinitionFromSymbol(typeChecker, symbol, node);
+        }
         function getReferenceAtPosition(sourceFile, position, program) {
             var _a, _b;
             var referencePath = findReferenceInPosition(sourceFile.referencedFiles, position);
@@ -129825,13 +132779,7 @@
         GoToDefinition.getDefinitionAndBoundSpan = getDefinitionAndBoundSpan;
         // At 'x.foo', see if the type of 'x' has an index signature, and if so find its declarations.
         function getDefinitionInfoForIndexSignatures(node, checker) {
-            if (!ts.isPropertyAccessExpression(node.parent) || node.parent.name !== node)
-                return;
-            var type = checker.getTypeAtLocation(node.parent.expression);
-            return ts.mapDefined(type.isUnionOrIntersection() ? type.types : [type], function (nonUnionType) {
-                var info = checker.getIndexInfoOfType(nonUnionType, 0 /* String */);
-                return info && info.declaration && createDefinitionFromSignatureDeclaration(checker, info.declaration);
-            });
+            return ts.mapDefined(checker.getIndexInfosAtLocation(node), function (info) { return info.declaration && createDefinitionFromSignatureDeclaration(checker, info.declaration); });
         }
         function getSymbol(node, checker) {
             var symbol = checker.getSymbolAtLocation(node);
@@ -129853,20 +132801,20 @@
         //   (2) when the aliased symbol is originating from an import.
         //
         function shouldSkipAlias(node, declaration) {
-            if (node.kind !== 78 /* Identifier */) {
+            if (node.kind !== 79 /* Identifier */) {
                 return false;
             }
             if (node.parent === declaration) {
                 return true;
             }
             switch (declaration.kind) {
-                case 263 /* ImportClause */:
-                case 261 /* ImportEqualsDeclaration */:
+                case 265 /* ImportClause */:
+                case 263 /* ImportEqualsDeclaration */:
                     return true;
-                case 266 /* ImportSpecifier */:
-                    return declaration.parent.kind === 265 /* NamedImports */;
-                case 199 /* BindingElement */:
-                case 250 /* VariableDeclaration */:
+                case 268 /* ImportSpecifier */:
+                    return declaration.parent.kind === 267 /* NamedImports */;
+                case 201 /* BindingElement */:
+                case 252 /* VariableDeclaration */:
                     return ts.isInJSFile(declaration) && ts.isRequireVariableDeclaration(declaration);
                 default:
                     return false;
@@ -129882,7 +132830,7 @@
             function getConstructSignatureDefinition() {
                 // Applicable only if we are in a new expression, or we are on a constructor declaration
                 // and in either case the symbol has a construct signature definition, i.e. class
-                if (symbol.flags & 32 /* Class */ && !(symbol.flags & (16 /* Function */ | 3 /* Variable */)) && (ts.isNewExpressionTarget(node) || node.kind === 132 /* ConstructorKeyword */)) {
+                if (symbol.flags & 32 /* Class */ && !(symbol.flags & (16 /* Function */ | 3 /* Variable */)) && (ts.isNewExpressionTarget(node) || node.kind === 133 /* ConstructorKeyword */)) {
                     var cls = ts.find(filteredDeclarations, ts.isClassLike) || ts.Debug.fail("Expected declaration to have at least one class-like declaration");
                     return getSignatureDefinition(cls.members, /*selectConstructors*/ true);
                 }
@@ -129914,10 +132862,12 @@
             return createDefinitionInfoFromName(checker, declaration, symbolKind, symbolName, containerName);
         }
         /** Creates a DefinitionInfo directly from the name of a declaration. */
-        function createDefinitionInfoFromName(checker, declaration, symbolKind, symbolName, containerName) {
-            var name = ts.getNameOfDeclaration(declaration) || declaration;
-            var sourceFile = name.getSourceFile();
-            var textSpan = ts.createTextSpanFromNode(name, sourceFile);
+        function createDefinitionInfoFromName(checker, declaration, symbolKind, symbolName, containerName, textSpan) {
+            var sourceFile = declaration.getSourceFile();
+            if (!textSpan) {
+                var name = ts.getNameOfDeclaration(declaration) || declaration;
+                textSpan = ts.createTextSpanFromNode(name, sourceFile);
+            }
             return __assign(__assign({ fileName: sourceFile.fileName, textSpan: textSpan, kind: symbolKind, name: symbolName, containerKind: undefined, // TODO: GH#18217
                 containerName: containerName }, ts.FindAllReferences.toContextSpan(textSpan, sourceFile, ts.FindAllReferences.getContextNode(declaration))), { isLocal: !isDefinitionVisible(checker, declaration) });
         }
@@ -129931,22 +132881,22 @@
                 return isDefinitionVisible(checker, declaration.parent);
             // Handle some exceptions here like arrow function, members of class and object literal expression which are technically not visible but we want the definition to be determined by its parent
             switch (declaration.kind) {
-                case 164 /* PropertyDeclaration */:
-                case 168 /* GetAccessor */:
-                case 169 /* SetAccessor */:
-                case 166 /* MethodDeclaration */:
+                case 165 /* PropertyDeclaration */:
+                case 170 /* GetAccessor */:
+                case 171 /* SetAccessor */:
+                case 167 /* MethodDeclaration */:
                     // Private/protected properties/methods are not visible
                     if (ts.hasEffectiveModifier(declaration, 8 /* Private */))
                         return false;
                 // Public properties/methods are visible if its parents are visible, so:
                 // falls through
-                case 167 /* Constructor */:
-                case 289 /* PropertyAssignment */:
-                case 290 /* ShorthandPropertyAssignment */:
-                case 201 /* ObjectLiteralExpression */:
-                case 222 /* ClassExpression */:
-                case 210 /* ArrowFunction */:
-                case 209 /* FunctionExpression */:
+                case 169 /* Constructor */:
+                case 291 /* PropertyAssignment */:
+                case 292 /* ShorthandPropertyAssignment */:
+                case 203 /* ObjectLiteralExpression */:
+                case 224 /* ClassExpression */:
+                case 212 /* ArrowFunction */:
+                case 211 /* FunctionExpression */:
                     return isDefinitionVisible(checker, declaration.parent);
                 default:
                     return false;
@@ -129984,9 +132934,9 @@
         }
         function isConstructorLike(node) {
             switch (node.kind) {
-                case 167 /* Constructor */:
-                case 176 /* ConstructorType */:
-                case 171 /* ConstructSignature */:
+                case 169 /* Constructor */:
+                case 178 /* ConstructorType */:
+                case 173 /* ConstructSignature */:
                     return true;
                 default:
                     return false;
@@ -130091,10 +133041,20 @@
             var parts = [];
             ts.forEachUnique(declarations, function (declaration) {
                 for (var _i = 0, _a = getCommentHavingNodes(declaration); _i < _a.length; _i++) {
-                    var comment = _a[_i].comment;
-                    if (comment === undefined)
+                    var jsdoc = _a[_i];
+                    // skip comments containing @typedefs since they're not associated with particular declarations
+                    // Exceptions:
+                    // - @typedefs are themselves declarations with associated comments
+                    // - @param or @return indicate that the author thinks of it as a 'local' @typedef that's part of the function documentation
+                    if (jsdoc.comment === undefined
+                        || ts.isJSDoc(jsdoc)
+                            && declaration.kind !== 340 /* JSDocTypedefTag */ && declaration.kind !== 333 /* JSDocCallbackTag */
+                            && jsdoc.tags
+                            && jsdoc.tags.some(function (t) { return t.kind === 340 /* JSDocTypedefTag */ || t.kind === 333 /* JSDocCallbackTag */; })
+                            && !jsdoc.tags.some(function (t) { return t.kind === 335 /* JSDocParameterTag */ || t.kind === 336 /* JSDocReturnTag */; })) {
                         continue;
-                    var newparts = getDisplayPartsFromComment(comment, checker);
+                    }
+                    var newparts = getDisplayPartsFromComment(jsdoc.comment, checker);
                     if (!ts.contains(parts, newparts, isIdenticalListOfDisplayParts)) {
                         parts.push(newparts);
                     }
@@ -130108,11 +133068,11 @@
         }
         function getCommentHavingNodes(declaration) {
             switch (declaration.kind) {
-                case 330 /* JSDocParameterTag */:
-                case 337 /* JSDocPropertyTag */:
+                case 335 /* JSDocParameterTag */:
+                case 342 /* JSDocPropertyTag */:
                     return [declaration];
-                case 328 /* JSDocCallbackTag */:
-                case 335 /* JSDocTypedefTag */:
+                case 333 /* JSDocCallbackTag */:
+                case 340 /* JSDocTypedefTag */:
                     return [declaration, declaration.parent];
                 default:
                     return ts.getJSDocCommentsAndTags(declaration);
@@ -130120,39 +133080,47 @@
         }
         function getJsDocTagsFromDeclarations(declarations, checker) {
             // Only collect doc comments from duplicate declarations once.
-            var tags = [];
+            var infos = [];
             ts.forEachUnique(declarations, function (declaration) {
-                for (var _i = 0, _a = ts.getJSDocTags(declaration); _i < _a.length; _i++) {
-                    var tag = _a[_i];
-                    tags.push({ name: tag.tagName.text, text: getCommentDisplayParts(tag, checker) });
+                var tags = ts.getJSDocTags(declaration);
+                // skip comments containing @typedefs since they're not associated with particular declarations
+                // Exceptions:
+                // - @param or @return indicate that the author thinks of it as a 'local' @typedef that's part of the function documentation
+                if (tags.some(function (t) { return t.kind === 340 /* JSDocTypedefTag */ || t.kind === 333 /* JSDocCallbackTag */; })
+                    && !tags.some(function (t) { return t.kind === 335 /* JSDocParameterTag */ || t.kind === 336 /* JSDocReturnTag */; })) {
+                    return;
+                }
+                for (var _i = 0, tags_1 = tags; _i < tags_1.length; _i++) {
+                    var tag = tags_1[_i];
+                    infos.push({ name: tag.tagName.text, text: getCommentDisplayParts(tag, checker) });
                 }
             });
-            return tags;
+            return infos;
         }
         JsDoc.getJsDocTagsFromDeclarations = getJsDocTagsFromDeclarations;
         function getDisplayPartsFromComment(comment, checker) {
             if (typeof comment === "string") {
                 return [ts.textPart(comment)];
             }
-            return ts.flatMap(comment, function (node) { return node.kind === 313 /* JSDocText */ ? [ts.textPart(node.text)] : ts.buildLinkParts(node, checker); });
+            return ts.flatMap(comment, function (node) { return node.kind === 316 /* JSDocText */ ? [ts.textPart(node.text)] : ts.buildLinkParts(node, checker); });
         }
         function getCommentDisplayParts(tag, checker) {
             var comment = tag.comment, kind = tag.kind;
             var namePart = getTagNameDisplayPart(kind);
             switch (kind) {
-                case 319 /* JSDocImplementsTag */:
+                case 324 /* JSDocImplementsTag */:
                     return withNode(tag.class);
-                case 318 /* JSDocAugmentsTag */:
+                case 323 /* JSDocAugmentsTag */:
                     return withNode(tag.class);
-                case 334 /* JSDocTemplateTag */:
+                case 339 /* JSDocTemplateTag */:
                     return addComment(tag.typeParameters.map(function (tp) { return tp.getText(); }).join(", "));
-                case 333 /* JSDocTypeTag */:
+                case 338 /* JSDocTypeTag */:
                     return withNode(tag.typeExpression);
-                case 335 /* JSDocTypedefTag */:
-                case 328 /* JSDocCallbackTag */:
-                case 337 /* JSDocPropertyTag */:
-                case 330 /* JSDocParameterTag */:
-                case 336 /* JSDocSeeTag */:
+                case 340 /* JSDocTypedefTag */:
+                case 333 /* JSDocCallbackTag */:
+                case 342 /* JSDocPropertyTag */:
+                case 335 /* JSDocParameterTag */:
+                case 341 /* JSDocSeeTag */:
                     var name = tag.name;
                     return name ? withNode(name)
                         : comment === undefined ? undefined
@@ -130166,10 +133134,10 @@
             function addComment(s) {
                 if (comment) {
                     if (s.match(/^https?$/)) {
-                        return __spreadArray([ts.textPart(s)], getDisplayPartsFromComment(comment, checker));
+                        return __spreadArray([ts.textPart(s)], getDisplayPartsFromComment(comment, checker), true);
                     }
                     else {
-                        return __spreadArray([namePart(s), ts.spacePart()], getDisplayPartsFromComment(comment, checker));
+                        return __spreadArray([namePart(s), ts.spacePart()], getDisplayPartsFromComment(comment, checker), true);
                     }
                 }
                 else {
@@ -130179,14 +133147,14 @@
         }
         function getTagNameDisplayPart(kind) {
             switch (kind) {
-                case 330 /* JSDocParameterTag */:
+                case 335 /* JSDocParameterTag */:
                     return ts.parameterNamePart;
-                case 337 /* JSDocPropertyTag */:
+                case 342 /* JSDocPropertyTag */:
                     return ts.propertyNamePart;
-                case 334 /* JSDocTemplateTag */:
+                case 339 /* JSDocTemplateTag */:
                     return ts.typeParameterNamePart;
-                case 335 /* JSDocTypedefTag */:
-                case 328 /* JSDocCallbackTag */:
+                case 340 /* JSDocTypedefTag */:
+                case 333 /* JSDocCallbackTag */:
                     return ts.typeAliasNamePart;
                 default:
                     return ts.textPart;
@@ -130337,7 +133305,7 @@
         function parameterDocComments(parameters, isJavaScriptFile, indentationStr, newLine) {
             return parameters.map(function (_a, i) {
                 var name = _a.name, dotDotDotToken = _a.dotDotDotToken;
-                var paramName = name.kind === 78 /* Identifier */ ? name.text : "param" + i;
+                var paramName = name.kind === 79 /* Identifier */ ? name.text : "param" + i;
                 var type = isJavaScriptFile ? (dotDotDotToken ? "{...any} " : "{any} ") : "";
                 return indentationStr + " * @param " + type + paramName + newLine;
             }).join("");
@@ -130350,24 +133318,24 @@
         }
         function getCommentOwnerInfoWorker(commentOwner, options) {
             switch (commentOwner.kind) {
-                case 252 /* FunctionDeclaration */:
-                case 209 /* FunctionExpression */:
-                case 166 /* MethodDeclaration */:
-                case 167 /* Constructor */:
-                case 165 /* MethodSignature */:
-                case 210 /* ArrowFunction */:
+                case 254 /* FunctionDeclaration */:
+                case 211 /* FunctionExpression */:
+                case 167 /* MethodDeclaration */:
+                case 169 /* Constructor */:
+                case 166 /* MethodSignature */:
+                case 212 /* ArrowFunction */:
                     var host = commentOwner;
                     return { commentOwner: commentOwner, parameters: host.parameters, hasReturn: hasReturn(host, options) };
-                case 289 /* PropertyAssignment */:
+                case 291 /* PropertyAssignment */:
                     return getCommentOwnerInfoWorker(commentOwner.initializer, options);
-                case 253 /* ClassDeclaration */:
-                case 254 /* InterfaceDeclaration */:
-                case 163 /* PropertySignature */:
-                case 256 /* EnumDeclaration */:
-                case 292 /* EnumMember */:
-                case 255 /* TypeAliasDeclaration */:
+                case 255 /* ClassDeclaration */:
+                case 256 /* InterfaceDeclaration */:
+                case 164 /* PropertySignature */:
+                case 258 /* EnumDeclaration */:
+                case 294 /* EnumMember */:
+                case 257 /* TypeAliasDeclaration */:
                     return { commentOwner: commentOwner };
-                case 233 /* VariableStatement */: {
+                case 235 /* VariableStatement */: {
                     var varStatement = commentOwner;
                     var varDeclarations = varStatement.declarationList.declarations;
                     var host_1 = varDeclarations.length === 1 && varDeclarations[0].initializer
@@ -130377,16 +133345,16 @@
                         ? { commentOwner: commentOwner, parameters: host_1.parameters, hasReturn: hasReturn(host_1, options) }
                         : { commentOwner: commentOwner };
                 }
-                case 298 /* SourceFile */:
+                case 300 /* SourceFile */:
                     return "quit";
-                case 257 /* ModuleDeclaration */:
+                case 259 /* ModuleDeclaration */:
                     // If in walking up the tree, we hit a a nested namespace declaration,
                     // then we must be somewhere within a dotted namespace name; however we don't
                     // want to give back a JSDoc template for the 'b' or 'c' in 'namespace a.b.c { }'.
-                    return commentOwner.parent.kind === 257 /* ModuleDeclaration */ ? undefined : { commentOwner: commentOwner };
-                case 234 /* ExpressionStatement */:
+                    return commentOwner.parent.kind === 259 /* ModuleDeclaration */ ? undefined : { commentOwner: commentOwner };
+                case 236 /* ExpressionStatement */:
                     return getCommentOwnerInfoWorker(commentOwner.expression, options);
-                case 217 /* BinaryExpression */: {
+                case 219 /* BinaryExpression */: {
                     var be = commentOwner;
                     if (ts.getAssignmentDeclarationKind(be) === 0 /* None */) {
                         return "quit";
@@ -130395,7 +133363,7 @@
                         ? { commentOwner: commentOwner, parameters: be.right.parameters, hasReturn: hasReturn(be.right, options) }
                         : { commentOwner: commentOwner };
                 }
-                case 164 /* PropertyDeclaration */:
+                case 165 /* PropertyDeclaration */:
                     var init = commentOwner.initializer;
                     if (init && (ts.isFunctionExpression(init) || ts.isArrowFunction(init))) {
                         return { commentOwner: commentOwner, parameters: init.parameters, hasReturn: hasReturn(init, options) };
@@ -130408,14 +133376,14 @@
                     || ts.isFunctionLikeDeclaration(node) && node.body && ts.isBlock(node.body) && !!ts.forEachReturnStatement(node.body, function (n) { return n; }));
         }
         function getRightHandSideOfAssignment(rightHandSide) {
-            while (rightHandSide.kind === 208 /* ParenthesizedExpression */) {
+            while (rightHandSide.kind === 210 /* ParenthesizedExpression */) {
                 rightHandSide = rightHandSide.expression;
             }
             switch (rightHandSide.kind) {
-                case 209 /* FunctionExpression */:
-                case 210 /* ArrowFunction */:
+                case 211 /* FunctionExpression */:
+                case 212 /* ArrowFunction */:
                     return rightHandSide;
-                case 222 /* ClassExpression */:
+                case 224 /* ClassExpression */:
                     return ts.find(rightHandSide.members, ts.isConstructorDeclaration);
             }
         }
@@ -130474,9 +133442,9 @@
         }
         function shouldKeepItem(declaration, checker) {
             switch (declaration.kind) {
-                case 263 /* ImportClause */:
-                case 266 /* ImportSpecifier */:
-                case 261 /* ImportEqualsDeclaration */:
+                case 265 /* ImportClause */:
+                case 268 /* ImportSpecifier */:
+                case 263 /* ImportEqualsDeclaration */:
                     var importer = checker.getSymbolAtLocation(declaration.name); // TODO: GH#18217
                     var imported = checker.getAliasedSymbol(importer);
                     return importer.escapedName !== imported.escapedName;
@@ -130486,7 +133454,7 @@
         }
         function tryAddSingleDeclarationName(declaration, containers) {
             var name = ts.getNameOfDeclaration(declaration);
-            return !!name && (pushLiteral(name, containers) || name.kind === 159 /* ComputedPropertyName */ && tryAddComputedPropertyName(name.expression, containers));
+            return !!name && (pushLiteral(name, containers) || name.kind === 160 /* ComputedPropertyName */ && tryAddComputedPropertyName(name.expression, containers));
         }
         // Only added the names of computed properties if they're simple dotted expressions, like:
         //
@@ -130503,7 +133471,7 @@
             // First, if we started with a computed property name, then add all but the last
             // portion into the container array.
             var name = ts.getNameOfDeclaration(declaration);
-            if (name && name.kind === 159 /* ComputedPropertyName */ && !tryAddComputedPropertyName(name.expression, containers)) {
+            if (name && name.kind === 160 /* ComputedPropertyName */ && !tryAddComputedPropertyName(name.expression, containers)) {
                 return ts.emptyArray;
             }
             // Don't include the last portion.
@@ -130720,7 +133688,7 @@
          */
         function hasNavigationBarName(node) {
             return !ts.hasDynamicName(node) ||
-                (node.kind !== 217 /* BinaryExpression */ &&
+                (node.kind !== 219 /* BinaryExpression */ &&
                     ts.isPropertyAccessExpression(node.name.expression) &&
                     ts.isIdentifier(node.name.expression.expression) &&
                     ts.idText(node.name.expression.expression) === "Symbol");
@@ -130733,7 +133701,7 @@
                 return;
             }
             switch (node.kind) {
-                case 167 /* Constructor */:
+                case 169 /* Constructor */:
                     // Get parameter properties, and treat them as being on the *same* level as the constructor, not under it.
                     var ctr = node;
                     addNodeWithRecursiveChild(ctr, ctr.body);
@@ -130745,25 +133713,25 @@
                         }
                     }
                     break;
-                case 166 /* MethodDeclaration */:
-                case 168 /* GetAccessor */:
-                case 169 /* SetAccessor */:
-                case 165 /* MethodSignature */:
+                case 167 /* MethodDeclaration */:
+                case 170 /* GetAccessor */:
+                case 171 /* SetAccessor */:
+                case 166 /* MethodSignature */:
                     if (hasNavigationBarName(node)) {
                         addNodeWithRecursiveChild(node, node.body);
                     }
                     break;
-                case 164 /* PropertyDeclaration */:
+                case 165 /* PropertyDeclaration */:
                     if (hasNavigationBarName(node)) {
                         addNodeWithRecursiveInitializer(node);
                     }
                     break;
-                case 163 /* PropertySignature */:
+                case 164 /* PropertySignature */:
                     if (hasNavigationBarName(node)) {
                         addLeafNode(node);
                     }
                     break;
-                case 263 /* ImportClause */:
+                case 265 /* ImportClause */:
                     var importClause = node;
                     // Handle default import case e.g.:
                     //    import d from "mod";
@@ -130775,7 +133743,7 @@
                     //    import {a, b as B} from "mod";
                     var namedBindings = importClause.namedBindings;
                     if (namedBindings) {
-                        if (namedBindings.kind === 264 /* NamespaceImport */) {
+                        if (namedBindings.kind === 266 /* NamespaceImport */) {
                             addLeafNode(namedBindings);
                         }
                         else {
@@ -130786,17 +133754,17 @@
                         }
                     }
                     break;
-                case 290 /* ShorthandPropertyAssignment */:
+                case 292 /* ShorthandPropertyAssignment */:
                     addNodeWithRecursiveChild(node, node.name);
                     break;
-                case 291 /* SpreadAssignment */:
+                case 293 /* SpreadAssignment */:
                     var expression = node.expression;
                     // Use the expression as the name of the SpreadAssignment, otherwise show as <unknown>.
                     ts.isIdentifier(expression) ? addLeafNode(node, expression) : addLeafNode(node);
                     break;
-                case 199 /* BindingElement */:
-                case 289 /* PropertyAssignment */:
-                case 250 /* VariableDeclaration */: {
+                case 201 /* BindingElement */:
+                case 291 /* PropertyAssignment */:
+                case 252 /* VariableDeclaration */: {
                     var child = node;
                     if (ts.isBindingPattern(child.name)) {
                         addChildrenRecursively(child.name);
@@ -130806,7 +133774,7 @@
                     }
                     break;
                 }
-                case 252 /* FunctionDeclaration */:
+                case 254 /* FunctionDeclaration */:
                     var nameNode = node.name;
                     // If we see a function declaration track as a possible ES5 class
                     if (nameNode && ts.isIdentifier(nameNode)) {
@@ -130814,11 +133782,11 @@
                     }
                     addNodeWithRecursiveChild(node, node.body);
                     break;
-                case 210 /* ArrowFunction */:
-                case 209 /* FunctionExpression */:
+                case 212 /* ArrowFunction */:
+                case 211 /* FunctionExpression */:
                     addNodeWithRecursiveChild(node, node.body);
                     break;
-                case 256 /* EnumDeclaration */:
+                case 258 /* EnumDeclaration */:
                     startNode(node);
                     for (var _e = 0, _f = node.members; _e < _f.length; _e++) {
                         var member = _f[_e];
@@ -130828,9 +133796,9 @@
                     }
                     endNode();
                     break;
-                case 253 /* ClassDeclaration */:
-                case 222 /* ClassExpression */:
-                case 254 /* InterfaceDeclaration */:
+                case 255 /* ClassDeclaration */:
+                case 224 /* ClassExpression */:
+                case 256 /* InterfaceDeclaration */:
                     startNode(node);
                     for (var _g = 0, _h = node.members; _g < _h.length; _g++) {
                         var member = _h[_g];
@@ -130838,10 +133806,10 @@
                     }
                     endNode();
                     break;
-                case 257 /* ModuleDeclaration */:
+                case 259 /* ModuleDeclaration */:
                     addNodeWithRecursiveChild(node, getInteriorModule(node).body);
                     break;
-                case 267 /* ExportAssignment */: {
+                case 269 /* ExportAssignment */: {
                     var expression_1 = node.expression;
                     var child = ts.isObjectLiteralExpression(expression_1) || ts.isCallExpression(expression_1) ? expression_1 :
                         ts.isArrowFunction(expression_1) || ts.isFunctionExpression(expression_1) ? expression_1.body : undefined;
@@ -130855,16 +133823,16 @@
                     }
                     break;
                 }
-                case 271 /* ExportSpecifier */:
-                case 261 /* ImportEqualsDeclaration */:
-                case 172 /* IndexSignature */:
-                case 170 /* CallSignature */:
-                case 171 /* ConstructSignature */:
-                case 255 /* TypeAliasDeclaration */:
+                case 273 /* ExportSpecifier */:
+                case 263 /* ImportEqualsDeclaration */:
+                case 174 /* IndexSignature */:
+                case 172 /* CallSignature */:
+                case 173 /* ConstructSignature */:
+                case 257 /* TypeAliasDeclaration */:
                     addLeafNode(node);
                     break;
-                case 204 /* CallExpression */:
-                case 217 /* BinaryExpression */: {
+                case 206 /* CallExpression */:
+                case 219 /* BinaryExpression */: {
                     var special = ts.getAssignmentDeclarationKind(node);
                     switch (special) {
                         case 1 /* ExportsProperty */:
@@ -131106,12 +134074,12 @@
                 return false;
             }
             switch (a.kind) {
-                case 164 /* PropertyDeclaration */:
-                case 166 /* MethodDeclaration */:
-                case 168 /* GetAccessor */:
-                case 169 /* SetAccessor */:
-                    return ts.hasSyntacticModifier(a, 32 /* Static */) === ts.hasSyntacticModifier(b, 32 /* Static */);
-                case 257 /* ModuleDeclaration */:
+                case 165 /* PropertyDeclaration */:
+                case 167 /* MethodDeclaration */:
+                case 170 /* GetAccessor */:
+                case 171 /* SetAccessor */:
+                    return ts.isStatic(a) === ts.isStatic(b);
+                case 259 /* ModuleDeclaration */:
                     return areSameModule(a, b)
                         && getFullyQualifiedModuleName(a) === getFullyQualifiedModuleName(b);
                 default:
@@ -131130,7 +134098,7 @@
         // We use 1 NavNode to represent 'A.B.C', but there are multiple source nodes.
         // Only merge module nodes that have the same chain. Don't merge 'A.B.C' with 'A'!
         function areSameModule(a, b) {
-            return a.body.kind === b.body.kind && (a.body.kind !== 257 /* ModuleDeclaration */ || areSameModule(a.body, b.body));
+            return a.body.kind === b.body.kind && (a.body.kind !== 259 /* ModuleDeclaration */ || areSameModule(a.body, b.body));
         }
         /** Merge source into target. Source should be thrown away after this is called. */
         function merge(target, source) {
@@ -131160,7 +134128,7 @@
          * So `new()` can still come before an `aardvark` method.
          */
         function tryGetName(node) {
-            if (node.kind === 257 /* ModuleDeclaration */) {
+            if (node.kind === 259 /* ModuleDeclaration */) {
                 return getModuleName(node);
             }
             var declName = ts.getNameOfDeclaration(node);
@@ -131169,16 +134137,16 @@
                 return propertyName && ts.unescapeLeadingUnderscores(propertyName);
             }
             switch (node.kind) {
-                case 209 /* FunctionExpression */:
-                case 210 /* ArrowFunction */:
-                case 222 /* ClassExpression */:
+                case 211 /* FunctionExpression */:
+                case 212 /* ArrowFunction */:
+                case 224 /* ClassExpression */:
                     return getFunctionOrClassName(node);
                 default:
                     return undefined;
             }
         }
         function getItemName(node, name) {
-            if (node.kind === 257 /* ModuleDeclaration */) {
+            if (node.kind === 259 /* ModuleDeclaration */) {
                 return cleanText(getModuleName(node));
             }
             if (name) {
@@ -131190,18 +134158,18 @@
                 }
             }
             switch (node.kind) {
-                case 298 /* SourceFile */:
+                case 300 /* SourceFile */:
                     var sourceFile = node;
                     return ts.isExternalModule(sourceFile)
                         ? "\"" + ts.escapeString(ts.getBaseFileName(ts.removeFileExtension(ts.normalizePath(sourceFile.fileName)))) + "\""
                         : "<global>";
-                case 267 /* ExportAssignment */:
+                case 269 /* ExportAssignment */:
                     return ts.isExportAssignment(node) && node.isExportEquals ? "export=" /* ExportEquals */ : "default" /* Default */;
-                case 210 /* ArrowFunction */:
-                case 252 /* FunctionDeclaration */:
-                case 209 /* FunctionExpression */:
-                case 253 /* ClassDeclaration */:
-                case 222 /* ClassExpression */:
+                case 212 /* ArrowFunction */:
+                case 254 /* FunctionDeclaration */:
+                case 211 /* FunctionExpression */:
+                case 255 /* ClassDeclaration */:
+                case 224 /* ClassExpression */:
                     if (ts.getSyntacticModifierFlags(node) & 512 /* Default */) {
                         return "default";
                     }
@@ -131209,13 +134177,13 @@
                     // (eg: "app\n.onactivated"), so we should remove the whitespace for readability in the
                     // navigation bar.
                     return getFunctionOrClassName(node);
-                case 167 /* Constructor */:
+                case 169 /* Constructor */:
                     return "constructor";
-                case 171 /* ConstructSignature */:
+                case 173 /* ConstructSignature */:
                     return "new()";
-                case 170 /* CallSignature */:
+                case 172 /* CallSignature */:
                     return "()";
-                case 172 /* IndexSignature */:
+                case 174 /* IndexSignature */:
                     return "[]";
                 default:
                     return "<unknown>";
@@ -131248,19 +134216,19 @@
                 }
                 // Some nodes are otherwise important enough to always include in the primary navigation menu.
                 switch (navigationBarNodeKind(item)) {
-                    case 253 /* ClassDeclaration */:
-                    case 222 /* ClassExpression */:
-                    case 256 /* EnumDeclaration */:
-                    case 254 /* InterfaceDeclaration */:
-                    case 257 /* ModuleDeclaration */:
-                    case 298 /* SourceFile */:
-                    case 255 /* TypeAliasDeclaration */:
-                    case 335 /* JSDocTypedefTag */:
-                    case 328 /* JSDocCallbackTag */:
+                    case 255 /* ClassDeclaration */:
+                    case 224 /* ClassExpression */:
+                    case 258 /* EnumDeclaration */:
+                    case 256 /* InterfaceDeclaration */:
+                    case 259 /* ModuleDeclaration */:
+                    case 300 /* SourceFile */:
+                    case 257 /* TypeAliasDeclaration */:
+                    case 340 /* JSDocTypedefTag */:
+                    case 333 /* JSDocCallbackTag */:
                         return true;
-                    case 210 /* ArrowFunction */:
-                    case 252 /* FunctionDeclaration */:
-                    case 209 /* FunctionExpression */:
+                    case 212 /* ArrowFunction */:
+                    case 254 /* FunctionDeclaration */:
+                    case 211 /* FunctionExpression */:
                         return isTopLevelFunctionDeclaration(item);
                     default:
                         return false;
@@ -131270,10 +134238,10 @@
                         return false;
                     }
                     switch (navigationBarNodeKind(item.parent)) {
-                        case 258 /* ModuleBlock */:
-                        case 298 /* SourceFile */:
-                        case 166 /* MethodDeclaration */:
-                        case 167 /* Constructor */:
+                        case 260 /* ModuleBlock */:
+                        case 300 /* SourceFile */:
+                        case 167 /* MethodDeclaration */:
+                        case 169 /* Constructor */:
                             return true;
                         default:
                             return false;
@@ -131335,7 +134303,7 @@
         function getFullyQualifiedModuleName(moduleDeclaration) {
             // Otherwise, we need to aggregate each identifier to build up the qualified name.
             var result = [ts.getTextOfIdentifierOrLiteral(moduleDeclaration.name)];
-            while (moduleDeclaration.body && moduleDeclaration.body.kind === 257 /* ModuleDeclaration */) {
+            while (moduleDeclaration.body && moduleDeclaration.body.kind === 259 /* ModuleDeclaration */) {
                 moduleDeclaration = moduleDeclaration.body;
                 result.push(ts.getTextOfIdentifierOrLiteral(moduleDeclaration.name));
             }
@@ -131349,13 +134317,13 @@
             return decl.body && ts.isModuleDeclaration(decl.body) ? getInteriorModule(decl.body) : decl;
         }
         function isComputedProperty(member) {
-            return !member.name || member.name.kind === 159 /* ComputedPropertyName */;
+            return !member.name || member.name.kind === 160 /* ComputedPropertyName */;
         }
         function getNodeSpan(node) {
-            return node.kind === 298 /* SourceFile */ ? ts.createTextSpanFromRange(node) : ts.createTextSpanFromNode(node, curSourceFile);
+            return node.kind === 300 /* SourceFile */ ? ts.createTextSpanFromRange(node) : ts.createTextSpanFromNode(node, curSourceFile);
         }
         function getModifiers(node) {
-            if (node.parent && node.parent.kind === 250 /* VariableDeclaration */) {
+            if (node.parent && node.parent.kind === 252 /* VariableDeclaration */) {
                 node = node.parent;
             }
             return ts.getNodeModifiers(node);
@@ -131370,7 +134338,7 @@
                 return cleanText(ts.declarationNameToString(parent.name));
             }
             // See if it is of the form "<expr> = function(){...}". If so, use the text from the left-hand side.
-            else if (ts.isBinaryExpression(parent) && parent.operatorToken.kind === 62 /* EqualsToken */) {
+            else if (ts.isBinaryExpression(parent) && parent.operatorToken.kind === 63 /* EqualsToken */) {
                 return nodeText(parent.left).replace(whiteSpaceRegex, "");
             }
             // See if it is a property assignment, and if so use the property name
@@ -131413,9 +134381,9 @@
         }
         function isFunctionOrClassExpression(node) {
             switch (node.kind) {
-                case 210 /* ArrowFunction */:
-                case 209 /* FunctionExpression */:
-                case 222 /* ClassExpression */:
+                case 212 /* ArrowFunction */:
+                case 211 /* FunctionExpression */:
+                case 224 /* ClassExpression */:
                     return true;
                 default:
                     return false;
@@ -131780,11 +134748,11 @@
         function getModuleSpecifierExpression(declaration) {
             var _a;
             switch (declaration.kind) {
-                case 261 /* ImportEqualsDeclaration */:
+                case 263 /* ImportEqualsDeclaration */:
                     return (_a = ts.tryCast(declaration.moduleReference, ts.isExternalModuleReference)) === null || _a === void 0 ? void 0 : _a.expression;
-                case 262 /* ImportDeclaration */:
+                case 264 /* ImportDeclaration */:
                     return declaration.moduleSpecifier;
-                case 233 /* VariableStatement */:
+                case 235 /* VariableStatement */:
                     return declaration.declarationList.declarations[0].initializer.arguments[0];
             }
         }
@@ -131823,19 +134791,19 @@
         function getImportKindOrder(s1) {
             var _a;
             switch (s1.kind) {
-                case 262 /* ImportDeclaration */:
+                case 264 /* ImportDeclaration */:
                     if (!s1.importClause)
                         return 0;
                     if (s1.importClause.isTypeOnly)
                         return 1;
-                    if (((_a = s1.importClause.namedBindings) === null || _a === void 0 ? void 0 : _a.kind) === 264 /* NamespaceImport */)
+                    if (((_a = s1.importClause.namedBindings) === null || _a === void 0 ? void 0 : _a.kind) === 266 /* NamespaceImport */)
                         return 2;
                     if (s1.importClause.name)
                         return 3;
                     return 4;
-                case 261 /* ImportEqualsDeclaration */:
+                case 263 /* ImportEqualsDeclaration */:
                     return 5;
-                case 233 /* VariableStatement */:
+                case 235 /* VariableStatement */:
                     return 6;
             }
         }
@@ -131857,7 +134825,7 @@
             var depthRemaining = 40;
             var current = 0;
             // Includes the EOF Token so that comments which aren't attached to statements are included
-            var statements = __spreadArray(__spreadArray([], sourceFile.statements), [sourceFile.endOfFileToken]);
+            var statements = __spreadArray(__spreadArray([], sourceFile.statements, true), [sourceFile.endOfFileToken], false);
             var n = statements.length;
             while (current < n) {
                 while (current < n && !ts.isAnyImportSyntax(statements[current])) {
@@ -131873,7 +134841,7 @@
                 }
                 var lastImport = current - 1;
                 if (lastImport !== firstImport) {
-                    out.push(createOutliningSpanFromBounds(ts.findChildOfKind(statements[firstImport], 99 /* ImportKeyword */, sourceFile).getStart(sourceFile), statements[lastImport].getEnd(), "imports" /* Imports */));
+                    out.push(createOutliningSpanFromBounds(ts.findChildOfKind(statements[firstImport], 100 /* ImportKeyword */, sourceFile).getStart(sourceFile), statements[lastImport].getEnd(), "imports" /* Imports */));
                 }
             }
             function visitNonImportNode(n) {
@@ -131881,12 +134849,18 @@
                 if (depthRemaining === 0)
                     return;
                 cancellationToken.throwIfCancellationRequested();
-                if (ts.isDeclaration(n) || ts.isVariableStatement(n) || n.kind === 1 /* EndOfFileToken */) {
+                if (ts.isDeclaration(n) || ts.isVariableStatement(n) || ts.isReturnStatement(n) || n.kind === 1 /* EndOfFileToken */) {
                     addOutliningForLeadingCommentsForNode(n, sourceFile, cancellationToken, out);
                 }
                 if (ts.isFunctionLike(n) && ts.isBinaryExpression(n.parent) && ts.isPropertyAccessExpression(n.parent.left)) {
                     addOutliningForLeadingCommentsForNode(n.parent.left, sourceFile, cancellationToken, out);
                 }
+                if (ts.isBlock(n) || ts.isModuleBlock(n)) {
+                    addOutliningForLeadingCommentsForPos(n.statements.end, sourceFile, cancellationToken, out);
+                }
+                if (ts.isClassLike(n) || ts.isInterfaceDeclaration(n)) {
+                    addOutliningForLeadingCommentsForPos(n.members.end, sourceFile, cancellationToken, out);
+                }
                 var span = getOutliningSpanForNode(n, sourceFile);
                 if (span)
                     out.push(span);
@@ -131937,12 +134911,19 @@
                 }
             }
         }
-        var regionDelimiterRegExp = /^\s*\/\/\s*#(end)?region(?:\s+(.*))?(?:\r)?$/;
+        var regionDelimiterRegExp = /^#(end)?region(?:\s+(.*))?(?:\r)?$/;
         function isRegionDelimiter(lineText) {
+            // We trim the leading whitespace and // without the regex since the
+            // multiple potential whitespace matches can make for some gnarly backtracking behavior
+            lineText = ts.trimStringStart(lineText);
+            if (!ts.startsWith(lineText, "\/\/")) {
+                return null; // eslint-disable-line no-null/no-null
+            }
+            lineText = ts.trimString(lineText.slice(2));
             return regionDelimiterRegExp.exec(lineText);
         }
-        function addOutliningForLeadingCommentsForNode(n, sourceFile, cancellationToken, out) {
-            var comments = ts.getLeadingCommentRangesOfNode(n, sourceFile);
+        function addOutliningForLeadingCommentsForPos(pos, sourceFile, cancellationToken, out) {
+            var comments = ts.getLeadingCommentRanges(sourceFile.text, pos);
             if (!comments)
                 return;
             var firstSingleLineCommentStart = -1;
@@ -131950,12 +134931,12 @@
             var singleLineCommentCount = 0;
             var sourceText = sourceFile.getFullText();
             for (var _i = 0, comments_1 = comments; _i < comments_1.length; _i++) {
-                var _a = comments_1[_i], kind = _a.kind, pos = _a.pos, end = _a.end;
+                var _a = comments_1[_i], kind = _a.kind, pos_1 = _a.pos, end = _a.end;
                 cancellationToken.throwIfCancellationRequested();
                 switch (kind) {
                     case 2 /* SingleLineCommentTrivia */:
                         // never fold region delimiters into single-line comment regions
-                        var commentText = sourceText.slice(pos, end);
+                        var commentText = sourceText.slice(pos_1, end);
                         if (isRegionDelimiter(commentText)) {
                             combineAndAddMultipleSingleLineComments();
                             singleLineCommentCount = 0;
@@ -131964,14 +134945,14 @@
                         // For single line comments, combine consecutive ones (2 or more) into
                         // a single span from the start of the first till the end of the last
                         if (singleLineCommentCount === 0) {
-                            firstSingleLineCommentStart = pos;
+                            firstSingleLineCommentStart = pos_1;
                         }
                         lastSingleLineCommentEnd = end;
                         singleLineCommentCount++;
                         break;
                     case 3 /* MultiLineCommentTrivia */:
                         combineAndAddMultipleSingleLineComments();
-                        out.push(createOutliningSpanFromBounds(pos, end, "comment" /* Comment */));
+                        out.push(createOutliningSpanFromBounds(pos_1, end, "comment" /* Comment */));
                         singleLineCommentCount = 0;
                         break;
                     default:
@@ -131986,12 +134967,17 @@
                 }
             }
         }
+        function addOutliningForLeadingCommentsForNode(n, sourceFile, cancellationToken, out) {
+            if (ts.isJsxText(n))
+                return;
+            addOutliningForLeadingCommentsForPos(n.pos, sourceFile, cancellationToken, out);
+        }
         function createOutliningSpanFromBounds(pos, end, kind) {
             return createOutliningSpan(ts.createTextSpanFromBounds(pos, end), kind);
         }
         function getOutliningSpanForNode(n, sourceFile) {
             switch (n.kind) {
-                case 231 /* Block */:
+                case 233 /* Block */:
                     if (ts.isFunctionLike(n.parent)) {
                         return functionSpan(n.parent, n, sourceFile);
                     }
@@ -131999,23 +134985,23 @@
                     // If the latter, we want to collapse the block, but consider its hint span
                     // to be the entire span of the parent.
                     switch (n.parent.kind) {
-                        case 236 /* DoStatement */:
-                        case 239 /* ForInStatement */:
-                        case 240 /* ForOfStatement */:
-                        case 238 /* ForStatement */:
-                        case 235 /* IfStatement */:
-                        case 237 /* WhileStatement */:
-                        case 244 /* WithStatement */:
-                        case 288 /* CatchClause */:
+                        case 238 /* DoStatement */:
+                        case 241 /* ForInStatement */:
+                        case 242 /* ForOfStatement */:
+                        case 240 /* ForStatement */:
+                        case 237 /* IfStatement */:
+                        case 239 /* WhileStatement */:
+                        case 246 /* WithStatement */:
+                        case 290 /* CatchClause */:
                             return spanForNode(n.parent);
-                        case 248 /* TryStatement */:
+                        case 250 /* TryStatement */:
                             // Could be the try-block, or the finally-block.
                             var tryStatement = n.parent;
                             if (tryStatement.tryBlock === n) {
                                 return spanForNode(n.parent);
                             }
                             else if (tryStatement.finallyBlock === n) {
-                                var node = ts.findChildOfKind(tryStatement, 95 /* FinallyKeyword */, sourceFile);
+                                var node = ts.findChildOfKind(tryStatement, 96 /* FinallyKeyword */, sourceFile);
                                 if (node)
                                     return spanForNode(node);
                             }
@@ -132025,40 +135011,40 @@
                             // the span of the block, independent of any parent span.
                             return createOutliningSpan(ts.createTextSpanFromNode(n, sourceFile), "code" /* Code */);
                     }
-                case 258 /* ModuleBlock */:
+                case 260 /* ModuleBlock */:
                     return spanForNode(n.parent);
-                case 253 /* ClassDeclaration */:
-                case 222 /* ClassExpression */:
-                case 254 /* InterfaceDeclaration */:
-                case 256 /* EnumDeclaration */:
-                case 259 /* CaseBlock */:
-                case 178 /* TypeLiteral */:
-                case 197 /* ObjectBindingPattern */:
+                case 255 /* ClassDeclaration */:
+                case 224 /* ClassExpression */:
+                case 256 /* InterfaceDeclaration */:
+                case 258 /* EnumDeclaration */:
+                case 261 /* CaseBlock */:
+                case 180 /* TypeLiteral */:
+                case 199 /* ObjectBindingPattern */:
                     return spanForNode(n);
-                case 180 /* TupleType */:
+                case 182 /* TupleType */:
                     return spanForNode(n, /*autoCollapse*/ false, /*useFullStart*/ !ts.isTupleTypeNode(n.parent), 22 /* OpenBracketToken */);
-                case 285 /* CaseClause */:
-                case 286 /* DefaultClause */:
+                case 287 /* CaseClause */:
+                case 288 /* DefaultClause */:
                     return spanForNodeArray(n.statements);
-                case 201 /* ObjectLiteralExpression */:
+                case 203 /* ObjectLiteralExpression */:
                     return spanForObjectOrArrayLiteral(n);
-                case 200 /* ArrayLiteralExpression */:
+                case 202 /* ArrayLiteralExpression */:
                     return spanForObjectOrArrayLiteral(n, 22 /* OpenBracketToken */);
-                case 274 /* JsxElement */:
+                case 276 /* JsxElement */:
                     return spanForJSXElement(n);
-                case 278 /* JsxFragment */:
+                case 280 /* JsxFragment */:
                     return spanForJSXFragment(n);
-                case 275 /* JsxSelfClosingElement */:
-                case 276 /* JsxOpeningElement */:
+                case 277 /* JsxSelfClosingElement */:
+                case 278 /* JsxOpeningElement */:
                     return spanForJSXAttributes(n.attributes);
-                case 219 /* TemplateExpression */:
+                case 221 /* TemplateExpression */:
                 case 14 /* NoSubstitutionTemplateLiteral */:
                     return spanForTemplateLiteral(n);
-                case 198 /* ArrayBindingPattern */:
+                case 200 /* ArrayBindingPattern */:
                     return spanForNode(n, /*autoCollapse*/ false, /*useFullStart*/ !ts.isBindingElement(n.parent), 22 /* OpenBracketToken */);
-                case 210 /* ArrowFunction */:
+                case 212 /* ArrowFunction */:
                     return spanForArrowFunction(n);
-                case 204 /* CallExpression */:
+                case 206 /* CallExpression */:
                     return spanForCallExpression(n);
             }
             function spanForCallExpression(node) {
@@ -132125,7 +135111,7 @@
         function functionSpan(node, body, sourceFile) {
             var openToken = tryGetFunctionOpenToken(node, body, sourceFile);
             var closeToken = ts.findChildOfKind(body, 19 /* CloseBraceToken */, sourceFile);
-            return openToken && closeToken && spanBetweenTokens(openToken, closeToken, node, sourceFile, /*autoCollapse*/ node.kind !== 210 /* ArrowFunction */);
+            return openToken && closeToken && spanBetweenTokens(openToken, closeToken, node, sourceFile, /*autoCollapse*/ node.kind !== 212 /* ArrowFunction */);
         }
         function spanBetweenTokens(openToken, closeToken, hintSpanNode, sourceFile, autoCollapse, useFullStart) {
             if (autoCollapse === void 0) { autoCollapse = false; }
@@ -132669,10 +135655,10 @@
          */
         function tryConsumeDeclare() {
             var token = ts.scanner.getToken();
-            if (token === 133 /* DeclareKeyword */) {
+            if (token === 134 /* DeclareKeyword */) {
                 // declare module "mod"
                 token = nextToken();
-                if (token === 139 /* ModuleKeyword */) {
+                if (token === 140 /* ModuleKeyword */) {
                     token = nextToken();
                     if (token === 10 /* StringLiteral */) {
                         recordAmbientExternalModule();
@@ -132690,7 +135676,7 @@
                 return false;
             }
             var token = ts.scanner.getToken();
-            if (token === 99 /* ImportKeyword */) {
+            if (token === 100 /* ImportKeyword */) {
                 token = nextToken();
                 if (token === 20 /* OpenParenToken */) {
                     token = nextToken();
@@ -132706,21 +135692,21 @@
                     return true;
                 }
                 else {
-                    if (token === 149 /* TypeKeyword */) {
+                    if (token === 150 /* TypeKeyword */) {
                         var skipTypeKeyword = ts.scanner.lookAhead(function () {
                             var token = ts.scanner.scan();
-                            return token !== 153 /* FromKeyword */ && (token === 41 /* AsteriskToken */ ||
+                            return token !== 154 /* FromKeyword */ && (token === 41 /* AsteriskToken */ ||
                                 token === 18 /* OpenBraceToken */ ||
-                                token === 78 /* Identifier */ ||
+                                token === 79 /* Identifier */ ||
                                 ts.isKeyword(token));
                         });
                         if (skipTypeKeyword) {
                             token = nextToken();
                         }
                     }
-                    if (token === 78 /* Identifier */ || ts.isKeyword(token)) {
+                    if (token === 79 /* Identifier */ || ts.isKeyword(token)) {
                         token = nextToken();
-                        if (token === 153 /* FromKeyword */) {
+                        if (token === 154 /* FromKeyword */) {
                             token = nextToken();
                             if (token === 10 /* StringLiteral */) {
                                 // import d from "mod";
@@ -132728,7 +135714,7 @@
                                 return true;
                             }
                         }
-                        else if (token === 62 /* EqualsToken */) {
+                        else if (token === 63 /* EqualsToken */) {
                             if (tryConsumeRequireCall(/*skipCurrentToken*/ true)) {
                                 return true;
                             }
@@ -132751,7 +135737,7 @@
                         }
                         if (token === 19 /* CloseBraceToken */) {
                             token = nextToken();
-                            if (token === 153 /* FromKeyword */) {
+                            if (token === 154 /* FromKeyword */) {
                                 token = nextToken();
                                 if (token === 10 /* StringLiteral */) {
                                     // import {a as A} from "mod";
@@ -132763,11 +135749,11 @@
                     }
                     else if (token === 41 /* AsteriskToken */) {
                         token = nextToken();
-                        if (token === 126 /* AsKeyword */) {
+                        if (token === 127 /* AsKeyword */) {
                             token = nextToken();
-                            if (token === 78 /* Identifier */ || ts.isKeyword(token)) {
+                            if (token === 79 /* Identifier */ || ts.isKeyword(token)) {
                                 token = nextToken();
-                                if (token === 153 /* FromKeyword */) {
+                                if (token === 154 /* FromKeyword */) {
                                     token = nextToken();
                                     if (token === 10 /* StringLiteral */) {
                                         // import * as NS from "mod"
@@ -132785,10 +135771,10 @@
         }
         function tryConsumeExport() {
             var token = ts.scanner.getToken();
-            if (token === 92 /* ExportKeyword */) {
+            if (token === 93 /* ExportKeyword */) {
                 markAsExternalModuleIfTopLevel();
                 token = nextToken();
-                if (token === 149 /* TypeKeyword */) {
+                if (token === 150 /* TypeKeyword */) {
                     var skipTypeKeyword = ts.scanner.lookAhead(function () {
                         var token = ts.scanner.scan();
                         return token === 41 /* AsteriskToken */ ||
@@ -132807,7 +135793,7 @@
                     }
                     if (token === 19 /* CloseBraceToken */) {
                         token = nextToken();
-                        if (token === 153 /* FromKeyword */) {
+                        if (token === 154 /* FromKeyword */) {
                             token = nextToken();
                             if (token === 10 /* StringLiteral */) {
                                 // export {a as A} from "mod";
@@ -132819,7 +135805,7 @@
                 }
                 else if (token === 41 /* AsteriskToken */) {
                     token = nextToken();
-                    if (token === 153 /* FromKeyword */) {
+                    if (token === 154 /* FromKeyword */) {
                         token = nextToken();
                         if (token === 10 /* StringLiteral */) {
                             // export * from "mod"
@@ -132827,21 +135813,21 @@
                         }
                     }
                 }
-                else if (token === 99 /* ImportKeyword */) {
+                else if (token === 100 /* ImportKeyword */) {
                     token = nextToken();
-                    if (token === 149 /* TypeKeyword */) {
+                    if (token === 150 /* TypeKeyword */) {
                         var skipTypeKeyword = ts.scanner.lookAhead(function () {
                             var token = ts.scanner.scan();
-                            return token === 78 /* Identifier */ ||
+                            return token === 79 /* Identifier */ ||
                                 ts.isKeyword(token);
                         });
                         if (skipTypeKeyword) {
                             token = nextToken();
                         }
                     }
-                    if (token === 78 /* Identifier */ || ts.isKeyword(token)) {
+                    if (token === 79 /* Identifier */ || ts.isKeyword(token)) {
                         token = nextToken();
-                        if (token === 62 /* EqualsToken */) {
+                        if (token === 63 /* EqualsToken */) {
                             if (tryConsumeRequireCall(/*skipCurrentToken*/ true)) {
                                 return true;
                             }
@@ -132855,7 +135841,7 @@
         function tryConsumeRequireCall(skipCurrentToken, allowTemplateLiterals) {
             if (allowTemplateLiterals === void 0) { allowTemplateLiterals = false; }
             var token = skipCurrentToken ? nextToken() : ts.scanner.getToken();
-            if (token === 143 /* RequireKeyword */) {
+            if (token === 144 /* RequireKeyword */) {
                 token = nextToken();
                 if (token === 20 /* OpenParenToken */) {
                     token = nextToken();
@@ -132871,7 +135857,7 @@
         }
         function tryConsumeDefine() {
             var token = ts.scanner.getToken();
-            if (token === 78 /* Identifier */ && ts.scanner.getTokenValue() === "define") {
+            if (token === 79 /* Identifier */ && ts.scanner.getTokenValue() === "define") {
                 token = nextToken();
                 if (token !== 20 /* OpenParenToken */) {
                     return true;
@@ -133020,14 +136006,14 @@
                 return getRenameInfoError(ts.Diagnostics.You_cannot_rename_elements_that_are_defined_in_the_standard_TypeScript_library);
             }
             // Cannot rename `default` as in `import { default as foo } from "./someModule";
-            if (ts.isIdentifier(node) && node.originalKeywordKind === 87 /* DefaultKeyword */ && symbol.parent && symbol.parent.flags & 1536 /* Module */) {
+            if (ts.isIdentifier(node) && node.originalKeywordKind === 88 /* DefaultKeyword */ && symbol.parent && symbol.parent.flags & 1536 /* Module */) {
                 return undefined;
             }
             if (ts.isStringLiteralLike(node) && ts.tryGetImportFromModuleSpecifier(node)) {
                 return options && options.allowRenameOfImportPath ? getRenameInfoForModule(node, sourceFile, symbol) : undefined;
             }
             var kind = ts.SymbolDisplay.getSymbolKind(typeChecker, symbol, node);
-            var specifierName = (ts.isImportOrExportSpecifierName(node) || ts.isStringOrNumericLiteralLike(node) && node.parent.kind === 159 /* ComputedPropertyName */)
+            var specifierName = (ts.isImportOrExportSpecifierName(node) || ts.isStringOrNumericLiteralLike(node) && node.parent.kind === 160 /* ComputedPropertyName */)
                 ? ts.stripQuotes(ts.getTextOfIdentifierOrLiteral(node))
                 : undefined;
             var displayName = specifierName || typeChecker.symbolToString(symbol);
@@ -133087,11 +136073,11 @@
         }
         function nodeIsEligibleForRename(node) {
             switch (node.kind) {
-                case 78 /* Identifier */:
-                case 79 /* PrivateIdentifier */:
+                case 79 /* Identifier */:
+                case 80 /* PrivateIdentifier */:
                 case 10 /* StringLiteral */:
                 case 14 /* NoSubstitutionTemplateLiteral */:
-                case 107 /* ThisKeyword */:
+                case 108 /* ThisKeyword */:
                     return true;
                 case 8 /* NumericLiteral */:
                     return ts.isLiteralNameOfPropertyDeclarationOrIndexAccess(node);
@@ -133146,9 +136132,9 @@
                         }
                         // Synthesize a stop for '${ ... }' since '${' and '}' actually belong to siblings.
                         if (ts.isTemplateSpan(parentNode) && nextNode && ts.isTemplateMiddleOrTemplateTail(nextNode)) {
-                            var start_2 = node.getFullStart() - "${".length;
+                            var start_1 = node.getFullStart() - "${".length;
                             var end_2 = nextNode.getStart() + "}".length;
-                            pushSelectionRange(start_2, end_2);
+                            pushSelectionRange(start_1, end_2);
                         }
                         // Blocks with braces, brackets, parens, or JSX tags on separate lines should be
                         // selected from open to close, including whitespace but not including the braces/etc. themselves.
@@ -133253,14 +136239,14 @@
                 ts.Debug.assertEqual(closeBraceToken.kind, 19 /* CloseBraceToken */);
                 // Group `-/+readonly` and `-/+?`
                 var groupedWithPlusMinusTokens = groupChildren(children, function (child) {
-                    return child === node.readonlyToken || child.kind === 142 /* ReadonlyKeyword */ ||
+                    return child === node.readonlyToken || child.kind === 143 /* ReadonlyKeyword */ ||
                         child === node.questionToken || child.kind === 57 /* QuestionToken */;
                 });
                 // Group type parameter with surrounding brackets
                 var groupedWithBrackets = groupChildren(groupedWithPlusMinusTokens, function (_a) {
                     var kind = _a.kind;
                     return kind === 22 /* OpenBracketToken */ ||
-                        kind === 160 /* TypeParameter */ ||
+                        kind === 161 /* TypeParameter */ ||
                         kind === 23 /* CloseBracketToken */;
                 });
                 return [
@@ -133293,14 +136279,14 @@
                 });
                 return splitChildren(groupedWithQuestionToken, function (_a) {
                     var kind = _a.kind;
-                    return kind === 62 /* EqualsToken */;
+                    return kind === 63 /* EqualsToken */;
                 });
             }
             // Pivot on '='
             if (ts.isBindingElement(node)) {
                 return splitChildren(node.getChildren(), function (_a) {
                     var kind = _a.kind;
-                    return kind === 62 /* EqualsToken */;
+                    return kind === 63 /* EqualsToken */;
                 });
             }
             return node.getChildren();
@@ -133374,22 +136360,22 @@
             return kind === 18 /* OpenBraceToken */
                 || kind === 22 /* OpenBracketToken */
                 || kind === 20 /* OpenParenToken */
-                || kind === 276 /* JsxOpeningElement */;
+                || kind === 278 /* JsxOpeningElement */;
         }
         function isListCloser(token) {
             var kind = token && token.kind;
             return kind === 19 /* CloseBraceToken */
                 || kind === 23 /* CloseBracketToken */
                 || kind === 21 /* CloseParenToken */
-                || kind === 277 /* JsxClosingElement */;
+                || kind === 279 /* JsxClosingElement */;
         }
         function getEndPos(sourceFile, node) {
             switch (node.kind) {
-                case 330 /* JSDocParameterTag */:
-                case 328 /* JSDocCallbackTag */:
-                case 337 /* JSDocPropertyTag */:
-                case 335 /* JSDocTypedefTag */:
-                case 332 /* JSDocThisTag */:
+                case 335 /* JSDocParameterTag */:
+                case 333 /* JSDocCallbackTag */:
+                case 342 /* JSDocPropertyTag */:
+                case 340 /* JSDocTypedefTag */:
+                case 337 /* JSDocThisTag */:
                     return sourceFile.getLineEndOfPosition(node.getStart());
                 default:
                     return node.getEnd();
@@ -133599,10 +136585,10 @@
                 }
                 return undefined;
             }
-            else if (ts.isTemplateHead(node) && parent.parent.kind === 206 /* TaggedTemplateExpression */) {
+            else if (ts.isTemplateHead(node) && parent.parent.kind === 208 /* TaggedTemplateExpression */) {
                 var templateExpression = parent;
                 var tagExpression = templateExpression.parent;
-                ts.Debug.assert(templateExpression.kind === 219 /* TemplateExpression */);
+                ts.Debug.assert(templateExpression.kind === 221 /* TemplateExpression */);
                 var argumentIndex = ts.isInsideTemplateLiteral(node, position, sourceFile) ? 0 : 1;
                 return getArgumentListInfoForTemplate(tagExpression, argumentIndex, sourceFile);
             }
@@ -133671,17 +136657,17 @@
                 return undefined;
             var parent = startingToken.parent;
             switch (parent.kind) {
-                case 208 /* ParenthesizedExpression */:
-                case 166 /* MethodDeclaration */:
-                case 209 /* FunctionExpression */:
-                case 210 /* ArrowFunction */:
+                case 210 /* ParenthesizedExpression */:
+                case 167 /* MethodDeclaration */:
+                case 211 /* FunctionExpression */:
+                case 212 /* ArrowFunction */:
                     var info = getArgumentOrParameterListInfo(startingToken, sourceFile);
                     if (!info)
                         return undefined;
                     var argumentIndex = info.argumentIndex, argumentCount = info.argumentCount, argumentsSpan = info.argumentsSpan;
                     var contextualType = ts.isMethodDeclaration(parent) ? checker.getContextualTypeForObjectLiteralElement(parent) : checker.getContextualType(parent);
                     return contextualType && { contextualType: contextualType, argumentIndex: argumentIndex, argumentCount: argumentCount, argumentsSpan: argumentsSpan };
-                case 217 /* BinaryExpression */: {
+                case 219 /* BinaryExpression */: {
                     var highestBinary = getHighestBinary(parent);
                     var contextualType_1 = checker.getContextualType(highestBinary);
                     var argumentIndex_1 = startingToken.kind === 20 /* OpenParenToken */ ? 0 : countBinaryExpressionParameters(parent) - 1;
@@ -133805,7 +136791,7 @@
             //       |       |
             // This is because a Missing node has no width. However, what we actually want is to include trivia
             // leading up to the next token in case the user is about to type in a TemplateMiddle or TemplateTail.
-            if (template.kind === 219 /* TemplateExpression */) {
+            if (template.kind === 221 /* TemplateExpression */) {
                 var lastSpan = ts.last(template.templateSpans);
                 if (lastSpan.literal.getFullWidth() === 0) {
                     applicableSpanEnd = ts.skipTrivia(sourceFile.text, applicableSpanEnd, /*stopAfterLineBreak*/ false);
@@ -133904,7 +136890,7 @@
             var parameters = typeParameters.map(function (t) { return createSignatureHelpParameterForTypeParameter(t, checker, enclosingDeclaration, sourceFile, printer); });
             var documentation = symbol.getDocumentationComment(checker);
             var tags = symbol.getJsDocTags(checker);
-            var prefixDisplayParts = __spreadArray(__spreadArray([], typeSymbolDisplay), [ts.punctuationPart(29 /* LessThanToken */)]);
+            var prefixDisplayParts = __spreadArray(__spreadArray([], typeSymbolDisplay, true), [ts.punctuationPart(29 /* LessThanToken */)], false);
             return { isVariadic: false, prefixDisplayParts: prefixDisplayParts, suffixDisplayParts: [ts.punctuationPart(31 /* GreaterThanToken */)], separatorDisplayParts: separatorDisplayParts, parameters: parameters, documentation: documentation, tags: tags };
         }
         var separatorDisplayParts = [ts.punctuationPart(27 /* CommaToken */), ts.spacePart()];
@@ -133912,8 +136898,8 @@
             var infos = (isTypeParameterList ? itemInfoForTypeParameters : itemInfoForParameters)(candidateSignature, checker, enclosingDeclaration, sourceFile);
             return ts.map(infos, function (_a) {
                 var isVariadic = _a.isVariadic, parameters = _a.parameters, prefix = _a.prefix, suffix = _a.suffix;
-                var prefixDisplayParts = __spreadArray(__spreadArray([], callTargetDisplayParts), prefix);
-                var suffixDisplayParts = __spreadArray(__spreadArray([], suffix), returnTypeToDisplayParts(candidateSignature, enclosingDeclaration, checker));
+                var prefixDisplayParts = __spreadArray(__spreadArray([], callTargetDisplayParts, true), prefix, true);
+                var suffixDisplayParts = __spreadArray(__spreadArray([], suffix, true), returnTypeToDisplayParts(candidateSignature, enclosingDeclaration, checker), true);
                 var documentation = candidateSignature.getDocumentationComment(checker);
                 var tags = candidateSignature.getJsDocTags();
                 return { isVariadic: isVariadic, prefixDisplayParts: prefixDisplayParts, suffixDisplayParts: suffixDisplayParts, separatorDisplayParts: separatorDisplayParts, parameters: parameters, documentation: documentation, tags: tags };
@@ -133938,15 +136924,14 @@
             var parameters = (typeParameters || ts.emptyArray).map(function (t) { return createSignatureHelpParameterForTypeParameter(t, checker, enclosingDeclaration, sourceFile, printer); });
             var thisParameter = candidateSignature.thisParameter ? [checker.symbolToParameterDeclaration(candidateSignature.thisParameter, enclosingDeclaration, signatureHelpNodeBuilderFlags)] : [];
             return checker.getExpandedParameters(candidateSignature).map(function (paramList) {
-                var params = ts.factory.createNodeArray(__spreadArray(__spreadArray([], thisParameter), ts.map(paramList, function (param) { return checker.symbolToParameterDeclaration(param, enclosingDeclaration, signatureHelpNodeBuilderFlags); })));
+                var params = ts.factory.createNodeArray(__spreadArray(__spreadArray([], thisParameter, true), ts.map(paramList, function (param) { return checker.symbolToParameterDeclaration(param, enclosingDeclaration, signatureHelpNodeBuilderFlags); }), true));
                 var parameterParts = ts.mapToDisplayParts(function (writer) {
                     printer.writeList(2576 /* CallExpressionArguments */, params, sourceFile, writer);
                 });
-                return { isVariadic: false, parameters: parameters, prefix: [ts.punctuationPart(29 /* LessThanToken */)], suffix: __spreadArray([ts.punctuationPart(31 /* GreaterThanToken */)], parameterParts) };
+                return { isVariadic: false, parameters: parameters, prefix: [ts.punctuationPart(29 /* LessThanToken */)], suffix: __spreadArray([ts.punctuationPart(31 /* GreaterThanToken */)], parameterParts, true) };
             });
         }
         function itemInfoForParameters(candidateSignature, checker, enclosingDeclaration, sourceFile) {
-            var isVariadic = checker.hasEffectiveRestParameter(candidateSignature);
             var printer = ts.createPrinter({ removeComments: true });
             var typeParameterParts = ts.mapToDisplayParts(function (writer) {
                 if (candidateSignature.typeParameters && candidateSignature.typeParameters.length) {
@@ -133955,14 +136940,15 @@
                 }
             });
             var lists = checker.getExpandedParameters(candidateSignature);
-            return lists.map(function (parameterList) {
-                return {
-                    isVariadic: isVariadic && (lists.length === 1 || !!(parameterList[parameterList.length - 1].checkFlags & 32768 /* RestParameter */)),
-                    parameters: parameterList.map(function (p) { return createSignatureHelpParameterForParameter(p, checker, enclosingDeclaration, sourceFile, printer); }),
-                    prefix: __spreadArray(__spreadArray([], typeParameterParts), [ts.punctuationPart(20 /* OpenParenToken */)]),
-                    suffix: [ts.punctuationPart(21 /* CloseParenToken */)]
-                };
-            });
+            var isVariadic = !checker.hasEffectiveRestParameter(candidateSignature) ? function (_) { return false; }
+                : lists.length === 1 ? function (_) { return true; }
+                    : function (pList) { return !!(pList.length && pList[pList.length - 1].checkFlags & 32768 /* RestParameter */); };
+            return lists.map(function (parameterList) { return ({
+                isVariadic: isVariadic(parameterList),
+                parameters: parameterList.map(function (p) { return createSignatureHelpParameterForParameter(p, checker, enclosingDeclaration, sourceFile, printer); }),
+                prefix: __spreadArray(__spreadArray([], typeParameterParts, true), [ts.punctuationPart(20 /* OpenParenToken */)], false),
+                suffix: [ts.punctuationPart(21 /* CloseParenToken */)]
+            }); });
         }
         function createSignatureHelpParameterForParameter(parameter, checker, enclosingDeclaration, sourceFile, printer) {
             var displayParts = ts.mapToDisplayParts(function (writer) {
@@ -133985,6 +136971,279 @@
 /* @internal */
 var ts;
 (function (ts) {
+    var InlayHints;
+    (function (InlayHints) {
+        var maxHintsLength = 30;
+        var leadingParameterNameCommentRegexFactory = function (name) {
+            return new RegExp("^\\s?/\\*\\*?\\s?" + name + "\\s?\\*\\/\\s?$");
+        };
+        function shouldShowParameterNameHints(preferences) {
+            return preferences.includeInlayParameterNameHints === "literals" || preferences.includeInlayParameterNameHints === "all";
+        }
+        function shouldShowLiteralParameterNameHintsOnly(preferences) {
+            return preferences.includeInlayParameterNameHints === "literals";
+        }
+        function provideInlayHints(context) {
+            var file = context.file, program = context.program, span = context.span, cancellationToken = context.cancellationToken, preferences = context.preferences;
+            var sourceFileText = file.text;
+            var compilerOptions = program.getCompilerOptions();
+            var checker = program.getTypeChecker();
+            var result = [];
+            visitor(file);
+            return result;
+            function visitor(node) {
+                if (!node || node.getFullWidth() === 0) {
+                    return;
+                }
+                switch (node.kind) {
+                    case 259 /* ModuleDeclaration */:
+                    case 255 /* ClassDeclaration */:
+                    case 256 /* InterfaceDeclaration */:
+                    case 254 /* FunctionDeclaration */:
+                    case 224 /* ClassExpression */:
+                    case 211 /* FunctionExpression */:
+                    case 167 /* MethodDeclaration */:
+                    case 212 /* ArrowFunction */:
+                        cancellationToken.throwIfCancellationRequested();
+                }
+                if (!ts.textSpanIntersectsWith(span, node.pos, node.getFullWidth())) {
+                    return;
+                }
+                if (ts.isTypeNode(node)) {
+                    return;
+                }
+                if (preferences.includeInlayVariableTypeHints && ts.isVariableDeclaration(node)) {
+                    visitVariableLikeDeclaration(node);
+                }
+                else if (preferences.includeInlayPropertyDeclarationTypeHints && ts.isPropertyDeclaration(node)) {
+                    visitVariableLikeDeclaration(node);
+                }
+                else if (preferences.includeInlayEnumMemberValueHints && ts.isEnumMember(node)) {
+                    visitEnumMember(node);
+                }
+                else if (shouldShowParameterNameHints(preferences) && (ts.isCallExpression(node) || ts.isNewExpression(node))) {
+                    visitCallOrNewExpression(node);
+                }
+                else {
+                    if (preferences.includeInlayFunctionParameterTypeHints && ts.isFunctionLikeDeclaration(node) && ts.hasContextSensitiveParameters(node)) {
+                        visitFunctionLikeForParameterType(node);
+                    }
+                    if (preferences.includeInlayFunctionLikeReturnTypeHints && isSignatureSupportingReturnAnnotation(node)) {
+                        visitFunctionDeclarationLikeForReturnType(node);
+                    }
+                }
+                return ts.forEachChild(node, visitor);
+            }
+            function isSignatureSupportingReturnAnnotation(node) {
+                return ts.isArrowFunction(node) || ts.isFunctionExpression(node) || ts.isFunctionDeclaration(node) || ts.isMethodDeclaration(node) || ts.isGetAccessorDeclaration(node);
+            }
+            function addParameterHints(text, position, isFirstVariadicArgument) {
+                result.push({
+                    text: "" + (isFirstVariadicArgument ? "..." : "") + truncation(text, maxHintsLength) + ":",
+                    position: position,
+                    kind: "Parameter" /* Parameter */,
+                    whitespaceAfter: true,
+                });
+            }
+            function addTypeHints(text, position) {
+                result.push({
+                    text: ": " + truncation(text, maxHintsLength),
+                    position: position,
+                    kind: "Type" /* Type */,
+                    whitespaceBefore: true,
+                });
+            }
+            function addEnumMemberValueHints(text, position) {
+                result.push({
+                    text: "= " + truncation(text, maxHintsLength),
+                    position: position,
+                    kind: "Enum" /* Enum */,
+                    whitespaceBefore: true,
+                });
+            }
+            function visitEnumMember(member) {
+                if (member.initializer) {
+                    return;
+                }
+                var enumValue = checker.getConstantValue(member);
+                if (enumValue !== undefined) {
+                    addEnumMemberValueHints(enumValue.toString(), member.end);
+                }
+            }
+            function isModuleReferenceType(type) {
+                return type.symbol && (type.symbol.flags & 1536 /* Module */);
+            }
+            function visitVariableLikeDeclaration(decl) {
+                if (!decl.initializer || ts.isBindingPattern(decl.name)) {
+                    return;
+                }
+                var effectiveTypeAnnotation = ts.getEffectiveTypeAnnotationNode(decl);
+                if (effectiveTypeAnnotation) {
+                    return;
+                }
+                var declarationType = checker.getTypeAtLocation(decl);
+                if (isModuleReferenceType(declarationType)) {
+                    return;
+                }
+                var typeDisplayString = printTypeInSingleLine(declarationType);
+                if (typeDisplayString) {
+                    addTypeHints(typeDisplayString, decl.name.end);
+                }
+            }
+            function visitCallOrNewExpression(expr) {
+                var args = expr.arguments;
+                if (!args || !args.length) {
+                    return;
+                }
+                var candidates = [];
+                var signature = checker.getResolvedSignatureForSignatureHelp(expr, candidates);
+                if (!signature || !candidates.length) {
+                    return;
+                }
+                for (var i = 0; i < args.length; ++i) {
+                    var originalArg = args[i];
+                    var arg = ts.skipParentheses(originalArg);
+                    if (shouldShowLiteralParameterNameHintsOnly(preferences) && !isHintableLiteral(arg)) {
+                        continue;
+                    }
+                    var identifierNameInfo = checker.getParameterIdentifierNameAtPosition(signature, i);
+                    if (identifierNameInfo) {
+                        var parameterName = identifierNameInfo[0], isFirstVariadicArgument = identifierNameInfo[1];
+                        var isParameterNameNotSameAsArgument = preferences.includeInlayParameterNameHintsWhenArgumentMatchesName || !identifierOrAccessExpressionPostfixMatchesParameterName(arg, parameterName);
+                        if (!isParameterNameNotSameAsArgument && !isFirstVariadicArgument) {
+                            continue;
+                        }
+                        var name = ts.unescapeLeadingUnderscores(parameterName);
+                        if (leadingCommentsContainsParameterName(arg, name)) {
+                            continue;
+                        }
+                        addParameterHints(name, originalArg.getStart(), isFirstVariadicArgument);
+                    }
+                }
+            }
+            function identifierOrAccessExpressionPostfixMatchesParameterName(expr, parameterName) {
+                if (ts.isIdentifier(expr)) {
+                    return expr.text === parameterName;
+                }
+                if (ts.isPropertyAccessExpression(expr)) {
+                    return expr.name.text === parameterName;
+                }
+                return false;
+            }
+            function leadingCommentsContainsParameterName(node, name) {
+                if (!ts.isIdentifierText(name, compilerOptions.target, ts.getLanguageVariant(file.scriptKind))) {
+                    return false;
+                }
+                var ranges = ts.getLeadingCommentRanges(sourceFileText, node.pos);
+                if (!(ranges === null || ranges === void 0 ? void 0 : ranges.length)) {
+                    return false;
+                }
+                var regex = leadingParameterNameCommentRegexFactory(name);
+                return ts.some(ranges, function (range) { return regex.test(sourceFileText.substring(range.pos, range.end)); });
+            }
+            function isHintableLiteral(node) {
+                switch (node.kind) {
+                    case 217 /* PrefixUnaryExpression */: {
+                        var operand = node.operand;
+                        return ts.isLiteralExpression(operand) || ts.isIdentifier(operand) && ts.isInfinityOrNaNString(operand.escapedText);
+                    }
+                    case 110 /* TrueKeyword */:
+                    case 95 /* FalseKeyword */:
+                    case 104 /* NullKeyword */:
+                        return true;
+                    case 79 /* Identifier */: {
+                        var name = node.escapedText;
+                        return isUndefined(name) || ts.isInfinityOrNaNString(name);
+                    }
+                }
+                return ts.isLiteralExpression(node);
+            }
+            function visitFunctionDeclarationLikeForReturnType(decl) {
+                if (ts.isArrowFunction(decl)) {
+                    if (!ts.findChildOfKind(decl, 20 /* OpenParenToken */, file)) {
+                        return;
+                    }
+                }
+                var effectiveTypeAnnotation = ts.getEffectiveReturnTypeNode(decl);
+                if (effectiveTypeAnnotation || !decl.body) {
+                    return;
+                }
+                var signature = checker.getSignatureFromDeclaration(decl);
+                if (!signature) {
+                    return;
+                }
+                var returnType = checker.getReturnTypeOfSignature(signature);
+                if (isModuleReferenceType(returnType)) {
+                    return;
+                }
+                var typeDisplayString = printTypeInSingleLine(returnType);
+                if (!typeDisplayString) {
+                    return;
+                }
+                addTypeHints(typeDisplayString, getTypeAnnotationPosition(decl));
+            }
+            function getTypeAnnotationPosition(decl) {
+                var closeParenToken = ts.findChildOfKind(decl, 21 /* CloseParenToken */, file);
+                if (closeParenToken) {
+                    return closeParenToken.end;
+                }
+                return decl.parameters.end;
+            }
+            function visitFunctionLikeForParameterType(node) {
+                var signature = checker.getSignatureFromDeclaration(node);
+                if (!signature) {
+                    return;
+                }
+                for (var i = 0; i < node.parameters.length && i < signature.parameters.length; ++i) {
+                    var param = node.parameters[i];
+                    var effectiveTypeAnnotation = ts.getEffectiveTypeAnnotationNode(param);
+                    if (effectiveTypeAnnotation) {
+                        continue;
+                    }
+                    var typeDisplayString = getParameterDeclarationTypeDisplayString(signature.parameters[i]);
+                    if (!typeDisplayString) {
+                        continue;
+                    }
+                    addTypeHints(typeDisplayString, param.end);
+                }
+            }
+            function getParameterDeclarationTypeDisplayString(symbol) {
+                var valueDeclaration = symbol.valueDeclaration;
+                if (!valueDeclaration || !ts.isParameter(valueDeclaration)) {
+                    return undefined;
+                }
+                var signatureParamType = checker.getTypeOfSymbolAtLocation(symbol, valueDeclaration);
+                if (isModuleReferenceType(signatureParamType)) {
+                    return undefined;
+                }
+                return printTypeInSingleLine(signatureParamType);
+            }
+            function truncation(text, maxLength) {
+                if (text.length > maxLength) {
+                    return text.substr(0, maxLength - "...".length) + "...";
+                }
+                return text;
+            }
+            function printTypeInSingleLine(type) {
+                var flags = 70221824 /* IgnoreErrors */ | 1048576 /* AllowUniqueESSymbolType */ | 16384 /* UseAliasDefinedOutsideCurrentScope */;
+                var options = { removeComments: true };
+                var printer = ts.createPrinter(options);
+                return ts.usingSingleLineStringWriter(function (writer) {
+                    var typeNode = checker.typeToTypeNode(type, /*enclosingDeclaration*/ undefined, flags, writer);
+                    ts.Debug.assertIsDefined(typeNode, "should always get typenode");
+                    printer.writeNode(4 /* Unspecified */, typeNode, /*sourceFile*/ file, writer);
+                });
+            }
+            function isUndefined(name) {
+                return name === "undefined";
+            }
+        }
+        InlayHints.provideInlayHints = provideInlayHints;
+    })(InlayHints = ts.InlayHints || (ts.InlayHints = {}));
+})(ts || (ts = {}));
+/* @internal */
+var ts;
+(function (ts) {
     var base64UrlRegExp = /^data:(?:application\/json(?:;charset=[uU][tT][fF]-8);base64,([A-Za-z0-9+\/=]+)$)?/;
     function getSourceMapper(host) {
         var getCanonicalFileName = ts.createGetCanonicalFileName(host.useCaseSensitiveFileNames());
@@ -134199,11 +137458,11 @@
     function containsTopLevelCommonjs(sourceFile) {
         return sourceFile.statements.some(function (statement) {
             switch (statement.kind) {
-                case 233 /* VariableStatement */:
+                case 235 /* VariableStatement */:
                     return statement.declarationList.declarations.some(function (decl) {
                         return !!decl.initializer && ts.isRequireCall(propertyAccessLeftHandSide(decl.initializer), /*checkArgumentIsStringLiteralLike*/ true);
                     });
-                case 234 /* ExpressionStatement */: {
+                case 236 /* ExpressionStatement */: {
                     var expression = statement.expression;
                     if (!ts.isBinaryExpression(expression))
                         return ts.isRequireCall(expression, /*checkArgumentIsStringLiteralLike*/ true);
@@ -134220,12 +137479,12 @@
     }
     function importNameForConvertToDefaultImport(node) {
         switch (node.kind) {
-            case 262 /* ImportDeclaration */:
+            case 264 /* ImportDeclaration */:
                 var importClause = node.importClause, moduleSpecifier = node.moduleSpecifier;
-                return importClause && !importClause.name && importClause.namedBindings && importClause.namedBindings.kind === 264 /* NamespaceImport */ && ts.isStringLiteral(moduleSpecifier)
+                return importClause && !importClause.name && importClause.namedBindings && importClause.namedBindings.kind === 266 /* NamespaceImport */ && ts.isStringLiteral(moduleSpecifier)
                     ? importClause.namedBindings.name
                     : undefined;
-            case 261 /* ImportEqualsDeclaration */:
+            case 263 /* ImportEqualsDeclaration */:
                 return node.name;
             default:
                 return undefined;
@@ -134287,22 +137546,27 @@
         if (node.arguments.length < 2)
             return true;
         return ts.some(node.arguments, function (arg) {
-            return arg.kind === 103 /* NullKeyword */ ||
+            return arg.kind === 104 /* NullKeyword */ ||
                 ts.isIdentifier(arg) && arg.text === "undefined";
         });
     }
     // should be kept up to date with getTransformationBody in convertToAsyncFunction.ts
     function isFixablePromiseArgument(arg, checker) {
         switch (arg.kind) {
-            case 252 /* FunctionDeclaration */:
-            case 209 /* FunctionExpression */:
-            case 210 /* ArrowFunction */:
+            case 254 /* FunctionDeclaration */:
+            case 211 /* FunctionExpression */:
+                var functionFlags = ts.getFunctionFlags(arg);
+                if (functionFlags & 1 /* Generator */) {
+                    return false;
+                }
+            // falls through
+            case 212 /* ArrowFunction */:
                 visitedNestedConvertibleFunctions.set(getKeyFromNode(arg), true);
             // falls through
-            case 103 /* NullKeyword */:
+            case 104 /* NullKeyword */:
                 return true;
-            case 78 /* Identifier */:
-            case 202 /* PropertyAccessExpression */: {
+            case 79 /* Identifier */:
+            case 204 /* PropertyAccessExpression */: {
                 var symbol = checker.getSymbolAtLocation(arg);
                 if (!symbol) {
                     return false;
@@ -134319,24 +137583,24 @@
     }
     function canBeConvertedToClass(node, checker) {
         var _a, _b, _c, _d;
-        if (node.kind === 209 /* FunctionExpression */) {
+        if (node.kind === 211 /* FunctionExpression */) {
             if (ts.isVariableDeclaration(node.parent) && ((_a = node.symbol.members) === null || _a === void 0 ? void 0 : _a.size)) {
                 return true;
             }
             var symbol = checker.getSymbolOfExpando(node, /*allowDeclaration*/ false);
             return !!(symbol && (((_b = symbol.exports) === null || _b === void 0 ? void 0 : _b.size) || ((_c = symbol.members) === null || _c === void 0 ? void 0 : _c.size)));
         }
-        if (node.kind === 252 /* FunctionDeclaration */) {
+        if (node.kind === 254 /* FunctionDeclaration */) {
             return !!((_d = node.symbol.members) === null || _d === void 0 ? void 0 : _d.size);
         }
         return false;
     }
     function canBeConvertedToAsync(node) {
         switch (node.kind) {
-            case 252 /* FunctionDeclaration */:
-            case 166 /* MethodDeclaration */:
-            case 209 /* FunctionExpression */:
-            case 210 /* ArrowFunction */:
+            case 254 /* FunctionDeclaration */:
+            case 167 /* MethodDeclaration */:
+            case 211 /* FunctionExpression */:
+            case 212 /* ArrowFunction */:
                 return true;
             default:
                 return false;
@@ -134358,7 +137622,7 @@
             }
             var flags = ts.getCombinedLocalAndExportSymbolFlags(symbol);
             if (flags & 32 /* Class */) {
-                return ts.getDeclarationOfKind(symbol, 222 /* ClassExpression */) ?
+                return ts.getDeclarationOfKind(symbol, 224 /* ClassExpression */) ?
                     "local class" /* localClassElement */ : "class" /* classElement */;
             }
             if (flags & 384 /* Enum */)
@@ -134393,7 +137657,7 @@
             if (typeChecker.isArgumentsSymbol(symbol)) {
                 return "local var" /* localVariableElement */;
             }
-            if (location.kind === 107 /* ThisKeyword */ && ts.isExpression(location)) {
+            if (location.kind === 108 /* ThisKeyword */ && ts.isExpression(location)) {
                 return "parameter" /* parameterElement */;
             }
             var flags = ts.getCombinedLocalAndExportSymbolFlags(symbol);
@@ -134442,11 +137706,11 @@
                 // If we requested completions after `x.` at the top-level, we may be at a source file location.
                 switch (location.parent && location.parent.kind) {
                     // If we've typed a character of the attribute name, will be 'JsxAttribute', else will be 'JsxOpeningElement'.
-                    case 276 /* JsxOpeningElement */:
-                    case 274 /* JsxElement */:
-                    case 275 /* JsxSelfClosingElement */:
-                        return location.kind === 78 /* Identifier */ ? "property" /* memberVariableElement */ : "JSX attribute" /* jsxAttribute */;
-                    case 281 /* JsxAttribute */:
+                    case 278 /* JsxOpeningElement */:
+                    case 276 /* JsxElement */:
+                    case 277 /* JsxSelfClosingElement */:
+                        return location.kind === 79 /* Identifier */ ? "property" /* memberVariableElement */ : "JSX attribute" /* jsxAttribute */;
+                    case 283 /* JsxAttribute */:
                         return "JSX attribute" /* jsxAttribute */;
                     default:
                         return "property" /* memberVariableElement */;
@@ -134454,14 +137718,11 @@
             }
             return "" /* unknown */;
         }
-        function isDeprecatedDeclaration(decl) {
-            return !!(ts.getCombinedNodeFlagsAlwaysIncludeJSDoc(decl) & 8192 /* Deprecated */);
-        }
         function getNormalizedSymbolModifiers(symbol) {
             if (symbol.declarations && symbol.declarations.length) {
                 var _a = symbol.declarations, declaration = _a[0], declarations = _a.slice(1);
                 // omit deprecated flag if some declarations are not deprecated
-                var excludeFlags = ts.length(declarations) && isDeprecatedDeclaration(declaration) && ts.some(declarations, function (d) { return !isDeprecatedDeclaration(d); })
+                var excludeFlags = ts.length(declarations) && ts.isDeprecatedDeclaration(declaration) && ts.some(declarations, function (d) { return !ts.isDeprecatedDeclaration(d); })
                     ? 8192 /* Deprecated */
                     : 0 /* None */;
                 var modifiers = ts.getNodeModifiers(declaration, excludeFlags);
@@ -134500,14 +137761,14 @@
             var symbolFlags = ts.getCombinedLocalAndExportSymbolFlags(symbol);
             var symbolKind = semanticMeaning & 1 /* Value */ ? getSymbolKindOfConstructorPropertyMethodAccessorFunctionOrVar(typeChecker, symbol, location) : "" /* unknown */;
             var hasAddedSymbolInfo = false;
-            var isThisExpression = location.kind === 107 /* ThisKeyword */ && ts.isInExpressionContext(location);
+            var isThisExpression = location.kind === 108 /* ThisKeyword */ && ts.isInExpressionContext(location);
             var type;
             var printer;
             var documentationFromAlias;
             var tagsFromAlias;
             var hasMultipleSignatures = false;
-            if (location.kind === 107 /* ThisKeyword */ && !isThisExpression) {
-                return { displayParts: [ts.keywordPart(107 /* ThisKeyword */)], documentation: [], symbolKind: "primitive type" /* primitiveType */, tags: undefined };
+            if (location.kind === 108 /* ThisKeyword */ && !isThisExpression) {
+                return { displayParts: [ts.keywordPart(108 /* ThisKeyword */)], documentation: [], symbolKind: "primitive type" /* primitiveType */, tags: undefined };
             }
             // Class at constructor site need to be shown as constructor apart from property,method, vars
             if (symbolKind !== "" /* unknown */ || symbolFlags & 32 /* Class */ || symbolFlags & 2097152 /* Alias */) {
@@ -134517,7 +137778,7 @@
                 }
                 var signature = void 0;
                 type = isThisExpression ? typeChecker.getTypeAtLocation(location) : typeChecker.getTypeOfSymbolAtLocation(symbol, location);
-                if (location.parent && location.parent.kind === 202 /* PropertyAccessExpression */) {
+                if (location.parent && location.parent.kind === 204 /* PropertyAccessExpression */) {
                     var right = location.parent.name;
                     // Either the location is on the right of a property access, or on the left and the right is missing
                     if (right === location || (right && right.getFullWidth() === 0)) {
@@ -134537,7 +137798,7 @@
                 }
                 if (callExpressionLike) {
                     signature = typeChecker.getResolvedSignature(callExpressionLike); // TODO: GH#18217
-                    var useConstructSignatures = callExpressionLike.kind === 205 /* NewExpression */ || (ts.isCallExpression(callExpressionLike) && callExpressionLike.expression.kind === 105 /* SuperKeyword */);
+                    var useConstructSignatures = callExpressionLike.kind === 207 /* NewExpression */ || (ts.isCallExpression(callExpressionLike) && callExpressionLike.expression.kind === 106 /* SuperKeyword */);
                     var allSignatures = useConstructSignatures ? type.getConstructSignatures() : type.getCallSignatures();
                     if (signature && !ts.contains(allSignatures, signature.target) && !ts.contains(allSignatures, signature)) {
                         // Get the first signature if there is one -- allSignatures may contain
@@ -134556,10 +137817,10 @@
                             displayParts.push(ts.spacePart());
                             if (useConstructSignatures) {
                                 if (signature.flags & 4 /* Abstract */) {
-                                    displayParts.push(ts.keywordPart(125 /* AbstractKeyword */));
+                                    displayParts.push(ts.keywordPart(126 /* AbstractKeyword */));
                                     displayParts.push(ts.spacePart());
                                 }
-                                displayParts.push(ts.keywordPart(102 /* NewKeyword */));
+                                displayParts.push(ts.keywordPart(103 /* NewKeyword */));
                                 displayParts.push(ts.spacePart());
                             }
                             addFullSymbolName(symbol);
@@ -134584,10 +137845,10 @@
                                 }
                                 if (useConstructSignatures) {
                                     if (signature.flags & 4 /* Abstract */) {
-                                        displayParts.push(ts.keywordPart(125 /* AbstractKeyword */));
+                                        displayParts.push(ts.keywordPart(126 /* AbstractKeyword */));
                                         displayParts.push(ts.spacePart());
                                     }
-                                    displayParts.push(ts.keywordPart(102 /* NewKeyword */));
+                                    displayParts.push(ts.keywordPart(103 /* NewKeyword */));
                                     displayParts.push(ts.spacePart());
                                 }
                                 addSignatureDisplayParts(signature, allSignatures, 262144 /* WriteArrowStyleSignature */);
@@ -134601,29 +137862,29 @@
                     }
                 }
                 else if ((ts.isNameOfFunctionDeclaration(location) && !(symbolFlags & 98304 /* Accessor */)) || // name of function declaration
-                    (location.kind === 132 /* ConstructorKeyword */ && location.parent.kind === 167 /* Constructor */)) { // At constructor keyword of constructor declaration
+                    (location.kind === 133 /* ConstructorKeyword */ && location.parent.kind === 169 /* Constructor */)) { // At constructor keyword of constructor declaration
                     // get the signature from the declaration and write it
                     var functionDeclaration_1 = location.parent;
                     // Use function declaration to write the signatures only if the symbol corresponding to this declaration
                     var locationIsSymbolDeclaration = symbol.declarations && ts.find(symbol.declarations, function (declaration) {
-                        return declaration === (location.kind === 132 /* ConstructorKeyword */ ? functionDeclaration_1.parent : functionDeclaration_1);
+                        return declaration === (location.kind === 133 /* ConstructorKeyword */ ? functionDeclaration_1.parent : functionDeclaration_1);
                     });
                     if (locationIsSymbolDeclaration) {
-                        var allSignatures = functionDeclaration_1.kind === 167 /* Constructor */ ? type.getNonNullableType().getConstructSignatures() : type.getNonNullableType().getCallSignatures();
+                        var allSignatures = functionDeclaration_1.kind === 169 /* Constructor */ ? type.getNonNullableType().getConstructSignatures() : type.getNonNullableType().getCallSignatures();
                         if (!typeChecker.isImplementationOfOverload(functionDeclaration_1)) {
                             signature = typeChecker.getSignatureFromDeclaration(functionDeclaration_1); // TODO: GH#18217
                         }
                         else {
                             signature = allSignatures[0];
                         }
-                        if (functionDeclaration_1.kind === 167 /* Constructor */) {
+                        if (functionDeclaration_1.kind === 169 /* Constructor */) {
                             // show (constructor) Type(...) signature
                             symbolKind = "constructor" /* constructorImplementationElement */;
                             addPrefixForAnyFunctionOrVar(type.symbol, symbolKind);
                         }
                         else {
                             // (function/method) symbol(..signature)
-                            addPrefixForAnyFunctionOrVar(functionDeclaration_1.kind === 170 /* CallSignature */ &&
+                            addPrefixForAnyFunctionOrVar(functionDeclaration_1.kind === 172 /* CallSignature */ &&
                                 !(type.symbol.flags & 2048 /* TypeLiteral */ || type.symbol.flags & 4096 /* ObjectLiteral */) ? type.symbol : symbol, symbolKind);
                         }
                         if (signature) {
@@ -134636,7 +137897,7 @@
             }
             if (symbolFlags & 32 /* Class */ && !hasAddedSymbolInfo && !isThisExpression) {
                 addAliasPrefixIfNecessary();
-                if (ts.getDeclarationOfKind(symbol, 222 /* ClassExpression */)) {
+                if (ts.getDeclarationOfKind(symbol, 224 /* ClassExpression */)) {
                     // Special case for class expressions because we would like to indicate that
                     // the class name is local to the class body (similar to function expression)
                     //      (local class) class <className>
@@ -134644,7 +137905,7 @@
                 }
                 else {
                     // Class declaration has name which is not local.
-                    displayParts.push(ts.keywordPart(83 /* ClassKeyword */));
+                    displayParts.push(ts.keywordPart(84 /* ClassKeyword */));
                 }
                 displayParts.push(ts.spacePart());
                 addFullSymbolName(symbol);
@@ -134652,37 +137913,37 @@
             }
             if ((symbolFlags & 64 /* Interface */) && (semanticMeaning & 2 /* Type */)) {
                 prefixNextMeaning();
-                displayParts.push(ts.keywordPart(117 /* InterfaceKeyword */));
+                displayParts.push(ts.keywordPart(118 /* InterfaceKeyword */));
                 displayParts.push(ts.spacePart());
                 addFullSymbolName(symbol);
                 writeTypeParametersOfSymbol(symbol, sourceFile);
             }
             if ((symbolFlags & 524288 /* TypeAlias */) && (semanticMeaning & 2 /* Type */)) {
                 prefixNextMeaning();
-                displayParts.push(ts.keywordPart(149 /* TypeKeyword */));
+                displayParts.push(ts.keywordPart(150 /* TypeKeyword */));
                 displayParts.push(ts.spacePart());
                 addFullSymbolName(symbol);
                 writeTypeParametersOfSymbol(symbol, sourceFile);
                 displayParts.push(ts.spacePart());
-                displayParts.push(ts.operatorPart(62 /* EqualsToken */));
+                displayParts.push(ts.operatorPart(63 /* EqualsToken */));
                 displayParts.push(ts.spacePart());
                 ts.addRange(displayParts, ts.typeToDisplayParts(typeChecker, typeChecker.getDeclaredTypeOfSymbol(symbol), enclosingDeclaration, 8388608 /* InTypeAlias */));
             }
             if (symbolFlags & 384 /* Enum */) {
                 prefixNextMeaning();
                 if (ts.some(symbol.declarations, function (d) { return ts.isEnumDeclaration(d) && ts.isEnumConst(d); })) {
-                    displayParts.push(ts.keywordPart(84 /* ConstKeyword */));
+                    displayParts.push(ts.keywordPart(85 /* ConstKeyword */));
                     displayParts.push(ts.spacePart());
                 }
-                displayParts.push(ts.keywordPart(91 /* EnumKeyword */));
+                displayParts.push(ts.keywordPart(92 /* EnumKeyword */));
                 displayParts.push(ts.spacePart());
                 addFullSymbolName(symbol);
             }
             if (symbolFlags & 1536 /* Module */ && !isThisExpression) {
                 prefixNextMeaning();
-                var declaration = ts.getDeclarationOfKind(symbol, 257 /* ModuleDeclaration */);
-                var isNamespace = declaration && declaration.name && declaration.name.kind === 78 /* Identifier */;
-                displayParts.push(ts.keywordPart(isNamespace ? 140 /* NamespaceKeyword */ : 139 /* ModuleKeyword */));
+                var declaration = ts.getDeclarationOfKind(symbol, 259 /* ModuleDeclaration */);
+                var isNamespace = declaration && declaration.name && declaration.name.kind === 79 /* Identifier */;
+                displayParts.push(ts.keywordPart(isNamespace ? 141 /* NamespaceKeyword */ : 140 /* ModuleKeyword */));
                 displayParts.push(ts.spacePart());
                 addFullSymbolName(symbol);
             }
@@ -134701,7 +137962,7 @@
                 }
                 else {
                     // Method/function type parameter
-                    var decl = ts.getDeclarationOfKind(symbol, 160 /* TypeParameter */);
+                    var decl = ts.getDeclarationOfKind(symbol, 161 /* TypeParameter */);
                     if (decl === undefined)
                         return ts.Debug.fail();
                     var declaration = decl.parent;
@@ -134709,21 +137970,21 @@
                         if (ts.isFunctionLikeKind(declaration.kind)) {
                             addInPrefix();
                             var signature = typeChecker.getSignatureFromDeclaration(declaration); // TODO: GH#18217
-                            if (declaration.kind === 171 /* ConstructSignature */) {
-                                displayParts.push(ts.keywordPart(102 /* NewKeyword */));
+                            if (declaration.kind === 173 /* ConstructSignature */) {
+                                displayParts.push(ts.keywordPart(103 /* NewKeyword */));
                                 displayParts.push(ts.spacePart());
                             }
-                            else if (declaration.kind !== 170 /* CallSignature */ && declaration.name) {
+                            else if (declaration.kind !== 172 /* CallSignature */ && declaration.name) {
                                 addFullSymbolName(declaration.symbol);
                             }
                             ts.addRange(displayParts, ts.signatureToDisplayParts(typeChecker, signature, sourceFile, 32 /* WriteTypeArgumentsOfSignature */));
                         }
-                        else if (declaration.kind === 255 /* TypeAliasDeclaration */) {
+                        else if (declaration.kind === 257 /* TypeAliasDeclaration */) {
                             // Type alias type parameter
                             // For example
                             //      type list<T> = T[]; // Both T will go through same code path
                             addInPrefix();
-                            displayParts.push(ts.keywordPart(149 /* TypeKeyword */));
+                            displayParts.push(ts.keywordPart(150 /* TypeKeyword */));
                             displayParts.push(ts.spacePart());
                             addFullSymbolName(declaration.symbol);
                             writeTypeParametersOfSymbol(declaration.symbol, sourceFile);
@@ -134735,11 +137996,11 @@
                 symbolKind = "enum member" /* enumMemberElement */;
                 addPrefixForAnyFunctionOrVar(symbol, "enum member");
                 var declaration = (_a = symbol.declarations) === null || _a === void 0 ? void 0 : _a[0];
-                if ((declaration === null || declaration === void 0 ? void 0 : declaration.kind) === 292 /* EnumMember */) {
+                if ((declaration === null || declaration === void 0 ? void 0 : declaration.kind) === 294 /* EnumMember */) {
                     var constantValue = typeChecker.getConstantValue(declaration);
                     if (constantValue !== undefined) {
                         displayParts.push(ts.spacePart());
-                        displayParts.push(ts.operatorPart(62 /* EqualsToken */));
+                        displayParts.push(ts.operatorPart(63 /* EqualsToken */));
                         displayParts.push(ts.spacePart());
                         displayParts.push(ts.displayPart(ts.getTextOfConstantValue(constantValue), typeof constantValue === "number" ? ts.SymbolDisplayPartKind.numericLiteral : ts.SymbolDisplayPartKind.stringLiteral));
                     }
@@ -134771,33 +138032,33 @@
                 }
                 if (symbol.declarations) {
                     switch (symbol.declarations[0].kind) {
-                        case 260 /* NamespaceExportDeclaration */:
-                            displayParts.push(ts.keywordPart(92 /* ExportKeyword */));
+                        case 262 /* NamespaceExportDeclaration */:
+                            displayParts.push(ts.keywordPart(93 /* ExportKeyword */));
                             displayParts.push(ts.spacePart());
-                            displayParts.push(ts.keywordPart(140 /* NamespaceKeyword */));
+                            displayParts.push(ts.keywordPart(141 /* NamespaceKeyword */));
                             break;
-                        case 267 /* ExportAssignment */:
-                            displayParts.push(ts.keywordPart(92 /* ExportKeyword */));
+                        case 269 /* ExportAssignment */:
+                            displayParts.push(ts.keywordPart(93 /* ExportKeyword */));
                             displayParts.push(ts.spacePart());
-                            displayParts.push(ts.keywordPart(symbol.declarations[0].isExportEquals ? 62 /* EqualsToken */ : 87 /* DefaultKeyword */));
+                            displayParts.push(ts.keywordPart(symbol.declarations[0].isExportEquals ? 63 /* EqualsToken */ : 88 /* DefaultKeyword */));
                             break;
-                        case 271 /* ExportSpecifier */:
-                            displayParts.push(ts.keywordPart(92 /* ExportKeyword */));
+                        case 273 /* ExportSpecifier */:
+                            displayParts.push(ts.keywordPart(93 /* ExportKeyword */));
                             break;
                         default:
-                            displayParts.push(ts.keywordPart(99 /* ImportKeyword */));
+                            displayParts.push(ts.keywordPart(100 /* ImportKeyword */));
                     }
                 }
                 displayParts.push(ts.spacePart());
                 addFullSymbolName(symbol);
                 ts.forEach(symbol.declarations, function (declaration) {
-                    if (declaration.kind === 261 /* ImportEqualsDeclaration */) {
+                    if (declaration.kind === 263 /* ImportEqualsDeclaration */) {
                         var importEqualsDeclaration = declaration;
                         if (ts.isExternalModuleImportEqualsDeclaration(importEqualsDeclaration)) {
                             displayParts.push(ts.spacePart());
-                            displayParts.push(ts.operatorPart(62 /* EqualsToken */));
+                            displayParts.push(ts.operatorPart(63 /* EqualsToken */));
                             displayParts.push(ts.spacePart());
-                            displayParts.push(ts.keywordPart(143 /* RequireKeyword */));
+                            displayParts.push(ts.keywordPart(144 /* RequireKeyword */));
                             displayParts.push(ts.punctuationPart(20 /* OpenParenToken */));
                             displayParts.push(ts.displayPart(ts.getTextOfNode(ts.getExternalModuleImportEqualsDeclarationExpression(importEqualsDeclaration)), ts.SymbolDisplayPartKind.stringLiteral));
                             displayParts.push(ts.punctuationPart(21 /* CloseParenToken */));
@@ -134806,7 +138067,7 @@
                             var internalAliasSymbol = typeChecker.getSymbolAtLocation(importEqualsDeclaration.moduleReference);
                             if (internalAliasSymbol) {
                                 displayParts.push(ts.spacePart());
-                                displayParts.push(ts.operatorPart(62 /* EqualsToken */));
+                                displayParts.push(ts.operatorPart(63 /* EqualsToken */));
                                 displayParts.push(ts.spacePart());
                                 addFullSymbolName(internalAliasSymbol, enclosingDeclaration);
                             }
@@ -134820,7 +138081,7 @@
                     if (type) {
                         if (isThisExpression) {
                             prefixNextMeaning();
-                            displayParts.push(ts.keywordPart(107 /* ThisKeyword */));
+                            displayParts.push(ts.keywordPart(108 /* ThisKeyword */));
                         }
                         else {
                             addPrefixForAnyFunctionOrVar(symbol, symbolKind);
@@ -134878,10 +138139,10 @@
                 // For some special property access expressions like `exports.foo = foo` or `module.exports.foo = foo`
                 // there documentation comments might be attached to the right hand side symbol of their declarations.
                 // The pattern of such special property access is that the parent symbol is the symbol of the file.
-                if (symbol.parent && symbol.declarations && ts.forEach(symbol.parent.declarations, function (declaration) { return declaration.kind === 298 /* SourceFile */; })) {
+                if (symbol.parent && symbol.declarations && ts.forEach(symbol.parent.declarations, function (declaration) { return declaration.kind === 300 /* SourceFile */; })) {
                     for (var _i = 0, _b = symbol.declarations; _i < _b.length; _i++) {
                         var declaration = _b[_i];
-                        if (!declaration.parent || declaration.parent.kind !== 217 /* BinaryExpression */) {
+                        if (!declaration.parent || declaration.parent.kind !== 219 /* BinaryExpression */) {
                             continue;
                         }
                         var rhsSymbol = typeChecker.getSymbolAtLocation(declaration.parent.right);
@@ -134926,7 +138187,7 @@
             }
             function addInPrefix() {
                 displayParts.push(ts.spacePart());
-                displayParts.push(ts.keywordPart(100 /* InKeyword */));
+                displayParts.push(ts.keywordPart(101 /* InKeyword */));
                 displayParts.push(ts.spacePart());
             }
             function addFullSymbolName(symbolToDisplay, enclosingDeclaration) {
@@ -134999,16 +138260,16 @@
             }
             return ts.forEach(symbol.declarations, function (declaration) {
                 // Function expressions are local
-                if (declaration.kind === 209 /* FunctionExpression */) {
+                if (declaration.kind === 211 /* FunctionExpression */) {
                     return true;
                 }
-                if (declaration.kind !== 250 /* VariableDeclaration */ && declaration.kind !== 252 /* FunctionDeclaration */) {
+                if (declaration.kind !== 252 /* VariableDeclaration */ && declaration.kind !== 254 /* FunctionDeclaration */) {
                     return false;
                 }
                 // If the parent is not sourceFile or module block it is local variable
                 for (var parent = declaration.parent; !ts.isFunctionBlock(parent); parent = parent.parent) {
                     // Reached source file or module block
-                    if (parent.kind === 298 /* SourceFile */ || parent.kind === 258 /* ModuleBlock */) {
+                    if (parent.kind === 300 /* SourceFile */ || parent.kind === 260 /* ModuleBlock */) {
                         return false;
                     }
                 }
@@ -135110,9 +138371,8 @@
     /*@internal*/
     function fixupCompilerOptions(options, diagnostics) {
         // Lazily create this value to fix module loading errors.
-        commandLineOptionsStringToEnum = commandLineOptionsStringToEnum || ts.filter(ts.optionDeclarations, function (o) {
-            return typeof o.type === "object" && !ts.forEachEntry(o.type, function (v) { return typeof v !== "number"; });
-        });
+        commandLineOptionsStringToEnum = commandLineOptionsStringToEnum ||
+            ts.filter(ts.optionDeclarations, function (o) { return typeof o.type === "object" && !ts.forEachEntry(o.type, function (v) { return typeof v !== "number"; }); });
         options = ts.cloneCompilerOptions(options);
         var _loop_9 = function (opt) {
             if (!ts.hasProperty(options, opt.name)) {
@@ -135298,8 +138558,8 @@
             function shouldRescanGreaterThanToken(node) {
                 switch (node.kind) {
                     case 33 /* GreaterThanEqualsToken */:
-                    case 70 /* GreaterThanGreaterThanEqualsToken */:
-                    case 71 /* GreaterThanGreaterThanGreaterThanEqualsToken */:
+                    case 71 /* GreaterThanGreaterThanEqualsToken */:
+                    case 72 /* GreaterThanGreaterThanGreaterThanEqualsToken */:
                     case 49 /* GreaterThanGreaterThanGreaterThanToken */:
                     case 48 /* GreaterThanGreaterThanToken */:
                         return true;
@@ -135309,12 +138569,12 @@
             function shouldRescanJsxIdentifier(node) {
                 if (node.parent) {
                     switch (node.parent.kind) {
-                        case 281 /* JsxAttribute */:
-                        case 276 /* JsxOpeningElement */:
-                        case 277 /* JsxClosingElement */:
-                        case 275 /* JsxSelfClosingElement */:
+                        case 283 /* JsxAttribute */:
+                        case 278 /* JsxOpeningElement */:
+                        case 279 /* JsxClosingElement */:
+                        case 277 /* JsxSelfClosingElement */:
                             // May parse an identifier like `module-layout`; that will be scanned as a keyword at first, but we should parse the whole thing to get an identifier.
-                            return ts.isKeyword(node.kind) || node.kind === 78 /* Identifier */;
+                            return ts.isKeyword(node.kind) || node.kind === 79 /* Identifier */;
                     }
                 }
                 return false;
@@ -135333,7 +138593,7 @@
                 return node.parent && ts.isJsxAttribute(node.parent) && node.parent.initializer === node;
             }
             function startsWithSlashToken(t) {
-                return t === 43 /* SlashToken */ || t === 67 /* SlashEqualsToken */;
+                return t === 43 /* SlashToken */ || t === 68 /* SlashEqualsToken */;
             }
             function readTokenInfo(n) {
                 ts.Debug.assert(isOnToken());
@@ -135506,7 +138766,7 @@
     (function (formatting) {
         function getAllRules() {
             var allTokens = [];
-            for (var token = 0 /* FirstToken */; token <= 157 /* LastToken */; token++) {
+            for (var token = 0 /* FirstToken */; token <= 158 /* LastToken */; token++) {
                 if (token !== 1 /* EndOfFileToken */) {
                     allTokens.push(token);
                 }
@@ -135519,29 +138779,29 @@
                 return { tokens: allTokens.filter(function (t) { return !tokens.some(function (t2) { return t2 === t; }); }), isSpecific: false };
             }
             var anyToken = { tokens: allTokens, isSpecific: false };
-            var anyTokenIncludingMultilineComments = tokenRangeFrom(__spreadArray(__spreadArray([], allTokens), [3 /* MultiLineCommentTrivia */]));
-            var anyTokenIncludingEOF = tokenRangeFrom(__spreadArray(__spreadArray([], allTokens), [1 /* EndOfFileToken */]));
-            var keywords = tokenRangeFromRange(80 /* FirstKeyword */, 157 /* LastKeyword */);
-            var binaryOperators = tokenRangeFromRange(29 /* FirstBinaryOperator */, 77 /* LastBinaryOperator */);
-            var binaryKeywordOperators = [100 /* InKeyword */, 101 /* InstanceOfKeyword */, 157 /* OfKeyword */, 126 /* AsKeyword */, 137 /* IsKeyword */];
+            var anyTokenIncludingMultilineComments = tokenRangeFrom(__spreadArray(__spreadArray([], allTokens, true), [3 /* MultiLineCommentTrivia */], false));
+            var anyTokenIncludingEOF = tokenRangeFrom(__spreadArray(__spreadArray([], allTokens, true), [1 /* EndOfFileToken */], false));
+            var keywords = tokenRangeFromRange(81 /* FirstKeyword */, 158 /* LastKeyword */);
+            var binaryOperators = tokenRangeFromRange(29 /* FirstBinaryOperator */, 78 /* LastBinaryOperator */);
+            var binaryKeywordOperators = [101 /* InKeyword */, 102 /* InstanceOfKeyword */, 158 /* OfKeyword */, 127 /* AsKeyword */, 138 /* IsKeyword */];
             var unaryPrefixOperators = [45 /* PlusPlusToken */, 46 /* MinusMinusToken */, 54 /* TildeToken */, 53 /* ExclamationToken */];
             var unaryPrefixExpressions = [
-                8 /* NumericLiteral */, 9 /* BigIntLiteral */, 78 /* Identifier */, 20 /* OpenParenToken */,
-                22 /* OpenBracketToken */, 18 /* OpenBraceToken */, 107 /* ThisKeyword */, 102 /* NewKeyword */
+                8 /* NumericLiteral */, 9 /* BigIntLiteral */, 79 /* Identifier */, 20 /* OpenParenToken */,
+                22 /* OpenBracketToken */, 18 /* OpenBraceToken */, 108 /* ThisKeyword */, 103 /* NewKeyword */
             ];
-            var unaryPreincrementExpressions = [78 /* Identifier */, 20 /* OpenParenToken */, 107 /* ThisKeyword */, 102 /* NewKeyword */];
-            var unaryPostincrementExpressions = [78 /* Identifier */, 21 /* CloseParenToken */, 23 /* CloseBracketToken */, 102 /* NewKeyword */];
-            var unaryPredecrementExpressions = [78 /* Identifier */, 20 /* OpenParenToken */, 107 /* ThisKeyword */, 102 /* NewKeyword */];
-            var unaryPostdecrementExpressions = [78 /* Identifier */, 21 /* CloseParenToken */, 23 /* CloseBracketToken */, 102 /* NewKeyword */];
+            var unaryPreincrementExpressions = [79 /* Identifier */, 20 /* OpenParenToken */, 108 /* ThisKeyword */, 103 /* NewKeyword */];
+            var unaryPostincrementExpressions = [79 /* Identifier */, 21 /* CloseParenToken */, 23 /* CloseBracketToken */, 103 /* NewKeyword */];
+            var unaryPredecrementExpressions = [79 /* Identifier */, 20 /* OpenParenToken */, 108 /* ThisKeyword */, 103 /* NewKeyword */];
+            var unaryPostdecrementExpressions = [79 /* Identifier */, 21 /* CloseParenToken */, 23 /* CloseBracketToken */, 103 /* NewKeyword */];
             var comments = [2 /* SingleLineCommentTrivia */, 3 /* MultiLineCommentTrivia */];
-            var typeNames = __spreadArray([78 /* Identifier */], ts.typeKeywords);
+            var typeNames = __spreadArray([79 /* Identifier */], ts.typeKeywords, true);
             // Place a space before open brace in a function declaration
             // TypeScript: Function can have return types, which can be made of tons of different token kinds
             var functionOpenBraceLeftTokenRange = anyTokenIncludingMultilineComments;
             // Place a space before open brace in a TypeScript declaration that has braces as children (class, module, enum, etc)
-            var typeScriptOpenBraceLeftTokenRange = tokenRangeFrom([78 /* Identifier */, 3 /* MultiLineCommentTrivia */, 83 /* ClassKeyword */, 92 /* ExportKeyword */, 99 /* ImportKeyword */]);
+            var typeScriptOpenBraceLeftTokenRange = tokenRangeFrom([79 /* Identifier */, 3 /* MultiLineCommentTrivia */, 84 /* ClassKeyword */, 93 /* ExportKeyword */, 100 /* ImportKeyword */]);
             // Place a space before open brace in a control flow construct
-            var controlOpenBraceLeftTokenRange = tokenRangeFrom([21 /* CloseParenToken */, 3 /* MultiLineCommentTrivia */, 89 /* DoKeyword */, 110 /* TryKeyword */, 95 /* FinallyKeyword */, 90 /* ElseKeyword */]);
+            var controlOpenBraceLeftTokenRange = tokenRangeFrom([21 /* CloseParenToken */, 3 /* MultiLineCommentTrivia */, 90 /* DoKeyword */, 111 /* TryKeyword */, 96 /* FinallyKeyword */, 91 /* ElseKeyword */]);
             // These rules are higher in priority than user-configurable
             var highPriorityCommonRules = [
                 // Leave comments alone
@@ -135556,7 +138816,7 @@
                 rule("NoSpaceAfterQuestionMark", 57 /* QuestionToken */, anyToken, [isNonJsxSameLineTokenContext], 16 /* DeleteSpace */),
                 rule("NoSpaceBeforeDot", anyToken, [24 /* DotToken */, 28 /* QuestionDotToken */], [isNonJsxSameLineTokenContext], 16 /* DeleteSpace */),
                 rule("NoSpaceAfterDot", [24 /* DotToken */, 28 /* QuestionDotToken */], anyToken, [isNonJsxSameLineTokenContext], 16 /* DeleteSpace */),
-                rule("NoSpaceBetweenImportParenInImportType", 99 /* ImportKeyword */, 20 /* OpenParenToken */, [isNonJsxSameLineTokenContext, isImportTypeContext], 16 /* DeleteSpace */),
+                rule("NoSpaceBetweenImportParenInImportType", 100 /* ImportKeyword */, 20 /* OpenParenToken */, [isNonJsxSameLineTokenContext, isImportTypeContext], 16 /* DeleteSpace */),
                 // Special handling of unary operators.
                 // Prefix operators generally shouldn't have a space between
                 // them and their target unary expression.
@@ -135583,79 +138843,79 @@
                 rule("SpaceAfterCloseBrace", 19 /* CloseBraceToken */, anyTokenExcept(21 /* CloseParenToken */), [isNonJsxSameLineTokenContext, isAfterCodeBlockContext], 4 /* InsertSpace */),
                 // Special case for (}, else) and (}, while) since else & while tokens are not part of the tree which makes SpaceAfterCloseBrace rule not applied
                 // Also should not apply to })
-                rule("SpaceBetweenCloseBraceAndElse", 19 /* CloseBraceToken */, 90 /* ElseKeyword */, [isNonJsxSameLineTokenContext], 4 /* InsertSpace */),
-                rule("SpaceBetweenCloseBraceAndWhile", 19 /* CloseBraceToken */, 114 /* WhileKeyword */, [isNonJsxSameLineTokenContext], 4 /* InsertSpace */),
+                rule("SpaceBetweenCloseBraceAndElse", 19 /* CloseBraceToken */, 91 /* ElseKeyword */, [isNonJsxSameLineTokenContext], 4 /* InsertSpace */),
+                rule("SpaceBetweenCloseBraceAndWhile", 19 /* CloseBraceToken */, 115 /* WhileKeyword */, [isNonJsxSameLineTokenContext], 4 /* InsertSpace */),
                 rule("NoSpaceBetweenEmptyBraceBrackets", 18 /* OpenBraceToken */, 19 /* CloseBraceToken */, [isNonJsxSameLineTokenContext, isObjectContext], 16 /* DeleteSpace */),
                 // Add a space after control dec context if the next character is an open bracket ex: 'if (false)[a, b] = [1, 2];' -> 'if (false) [a, b] = [1, 2];'
                 rule("SpaceAfterConditionalClosingParen", 21 /* CloseParenToken */, 22 /* OpenBracketToken */, [isControlDeclContext], 4 /* InsertSpace */),
-                rule("NoSpaceBetweenFunctionKeywordAndStar", 97 /* FunctionKeyword */, 41 /* AsteriskToken */, [isFunctionDeclarationOrFunctionExpressionContext], 16 /* DeleteSpace */),
-                rule("SpaceAfterStarInGeneratorDeclaration", 41 /* AsteriskToken */, 78 /* Identifier */, [isFunctionDeclarationOrFunctionExpressionContext], 4 /* InsertSpace */),
-                rule("SpaceAfterFunctionInFuncDecl", 97 /* FunctionKeyword */, anyToken, [isFunctionDeclContext], 4 /* InsertSpace */),
+                rule("NoSpaceBetweenFunctionKeywordAndStar", 98 /* FunctionKeyword */, 41 /* AsteriskToken */, [isFunctionDeclarationOrFunctionExpressionContext], 16 /* DeleteSpace */),
+                rule("SpaceAfterStarInGeneratorDeclaration", 41 /* AsteriskToken */, 79 /* Identifier */, [isFunctionDeclarationOrFunctionExpressionContext], 4 /* InsertSpace */),
+                rule("SpaceAfterFunctionInFuncDecl", 98 /* FunctionKeyword */, anyToken, [isFunctionDeclContext], 4 /* InsertSpace */),
                 // Insert new line after { and before } in multi-line contexts.
                 rule("NewLineAfterOpenBraceInBlockContext", 18 /* OpenBraceToken */, anyToken, [isMultilineBlockContext], 8 /* InsertNewLine */),
                 // For get/set members, we check for (identifier,identifier) since get/set don't have tokens and they are represented as just an identifier token.
                 // Though, we do extra check on the context to make sure we are dealing with get/set node. Example:
                 //      get x() {}
                 //      set x(val) {}
-                rule("SpaceAfterGetSetInMember", [134 /* GetKeyword */, 146 /* SetKeyword */], 78 /* Identifier */, [isFunctionDeclContext], 4 /* InsertSpace */),
-                rule("NoSpaceBetweenYieldKeywordAndStar", 124 /* YieldKeyword */, 41 /* AsteriskToken */, [isNonJsxSameLineTokenContext, isYieldOrYieldStarWithOperand], 16 /* DeleteSpace */),
-                rule("SpaceBetweenYieldOrYieldStarAndOperand", [124 /* YieldKeyword */, 41 /* AsteriskToken */], anyToken, [isNonJsxSameLineTokenContext, isYieldOrYieldStarWithOperand], 4 /* InsertSpace */),
-                rule("NoSpaceBetweenReturnAndSemicolon", 104 /* ReturnKeyword */, 26 /* SemicolonToken */, [isNonJsxSameLineTokenContext], 16 /* DeleteSpace */),
-                rule("SpaceAfterCertainKeywords", [112 /* VarKeyword */, 108 /* ThrowKeyword */, 102 /* NewKeyword */, 88 /* DeleteKeyword */, 104 /* ReturnKeyword */, 111 /* TypeOfKeyword */, 130 /* AwaitKeyword */], anyToken, [isNonJsxSameLineTokenContext], 4 /* InsertSpace */),
-                rule("SpaceAfterLetConstInVariableDeclaration", [118 /* LetKeyword */, 84 /* ConstKeyword */], anyToken, [isNonJsxSameLineTokenContext, isStartOfVariableDeclarationList], 4 /* InsertSpace */),
+                rule("SpaceAfterGetSetInMember", [135 /* GetKeyword */, 147 /* SetKeyword */], 79 /* Identifier */, [isFunctionDeclContext], 4 /* InsertSpace */),
+                rule("NoSpaceBetweenYieldKeywordAndStar", 125 /* YieldKeyword */, 41 /* AsteriskToken */, [isNonJsxSameLineTokenContext, isYieldOrYieldStarWithOperand], 16 /* DeleteSpace */),
+                rule("SpaceBetweenYieldOrYieldStarAndOperand", [125 /* YieldKeyword */, 41 /* AsteriskToken */], anyToken, [isNonJsxSameLineTokenContext, isYieldOrYieldStarWithOperand], 4 /* InsertSpace */),
+                rule("NoSpaceBetweenReturnAndSemicolon", 105 /* ReturnKeyword */, 26 /* SemicolonToken */, [isNonJsxSameLineTokenContext], 16 /* DeleteSpace */),
+                rule("SpaceAfterCertainKeywords", [113 /* VarKeyword */, 109 /* ThrowKeyword */, 103 /* NewKeyword */, 89 /* DeleteKeyword */, 105 /* ReturnKeyword */, 112 /* TypeOfKeyword */, 131 /* AwaitKeyword */], anyToken, [isNonJsxSameLineTokenContext], 4 /* InsertSpace */),
+                rule("SpaceAfterLetConstInVariableDeclaration", [119 /* LetKeyword */, 85 /* ConstKeyword */], anyToken, [isNonJsxSameLineTokenContext, isStartOfVariableDeclarationList], 4 /* InsertSpace */),
                 rule("NoSpaceBeforeOpenParenInFuncCall", anyToken, 20 /* OpenParenToken */, [isNonJsxSameLineTokenContext, isFunctionCallOrNewContext, isPreviousTokenNotComma], 16 /* DeleteSpace */),
                 // Special case for binary operators (that are keywords). For these we have to add a space and shouldn't follow any user options.
                 rule("SpaceBeforeBinaryKeywordOperator", anyToken, binaryKeywordOperators, [isNonJsxSameLineTokenContext, isBinaryOpContext], 4 /* InsertSpace */),
                 rule("SpaceAfterBinaryKeywordOperator", binaryKeywordOperators, anyToken, [isNonJsxSameLineTokenContext, isBinaryOpContext], 4 /* InsertSpace */),
-                rule("SpaceAfterVoidOperator", 113 /* VoidKeyword */, anyToken, [isNonJsxSameLineTokenContext, isVoidOpContext], 4 /* InsertSpace */),
+                rule("SpaceAfterVoidOperator", 114 /* VoidKeyword */, anyToken, [isNonJsxSameLineTokenContext, isVoidOpContext], 4 /* InsertSpace */),
                 // Async-await
-                rule("SpaceBetweenAsyncAndOpenParen", 129 /* AsyncKeyword */, 20 /* OpenParenToken */, [isArrowFunctionContext, isNonJsxSameLineTokenContext], 4 /* InsertSpace */),
-                rule("SpaceBetweenAsyncAndFunctionKeyword", 129 /* AsyncKeyword */, [97 /* FunctionKeyword */, 78 /* Identifier */], [isNonJsxSameLineTokenContext], 4 /* InsertSpace */),
+                rule("SpaceBetweenAsyncAndOpenParen", 130 /* AsyncKeyword */, 20 /* OpenParenToken */, [isArrowFunctionContext, isNonJsxSameLineTokenContext], 4 /* InsertSpace */),
+                rule("SpaceBetweenAsyncAndFunctionKeyword", 130 /* AsyncKeyword */, [98 /* FunctionKeyword */, 79 /* Identifier */], [isNonJsxSameLineTokenContext], 4 /* InsertSpace */),
                 // Template string
-                rule("NoSpaceBetweenTagAndTemplateString", [78 /* Identifier */, 21 /* CloseParenToken */], [14 /* NoSubstitutionTemplateLiteral */, 15 /* TemplateHead */], [isNonJsxSameLineTokenContext], 16 /* DeleteSpace */),
+                rule("NoSpaceBetweenTagAndTemplateString", [79 /* Identifier */, 21 /* CloseParenToken */], [14 /* NoSubstitutionTemplateLiteral */, 15 /* TemplateHead */], [isNonJsxSameLineTokenContext], 16 /* DeleteSpace */),
                 // JSX opening elements
-                rule("SpaceBeforeJsxAttribute", anyToken, 78 /* Identifier */, [isNextTokenParentJsxAttribute, isNonJsxSameLineTokenContext], 4 /* InsertSpace */),
+                rule("SpaceBeforeJsxAttribute", anyToken, 79 /* Identifier */, [isNextTokenParentJsxAttribute, isNonJsxSameLineTokenContext], 4 /* InsertSpace */),
                 rule("SpaceBeforeSlashInJsxOpeningElement", anyToken, 43 /* SlashToken */, [isJsxSelfClosingElementContext, isNonJsxSameLineTokenContext], 4 /* InsertSpace */),
                 rule("NoSpaceBeforeGreaterThanTokenInJsxOpeningElement", 43 /* SlashToken */, 31 /* GreaterThanToken */, [isJsxSelfClosingElementContext, isNonJsxSameLineTokenContext], 16 /* DeleteSpace */),
-                rule("NoSpaceBeforeEqualInJsxAttribute", anyToken, 62 /* EqualsToken */, [isJsxAttributeContext, isNonJsxSameLineTokenContext], 16 /* DeleteSpace */),
-                rule("NoSpaceAfterEqualInJsxAttribute", 62 /* EqualsToken */, anyToken, [isJsxAttributeContext, isNonJsxSameLineTokenContext], 16 /* DeleteSpace */),
+                rule("NoSpaceBeforeEqualInJsxAttribute", anyToken, 63 /* EqualsToken */, [isJsxAttributeContext, isNonJsxSameLineTokenContext], 16 /* DeleteSpace */),
+                rule("NoSpaceAfterEqualInJsxAttribute", 63 /* EqualsToken */, anyToken, [isJsxAttributeContext, isNonJsxSameLineTokenContext], 16 /* DeleteSpace */),
                 // TypeScript-specific rules
                 // Use of module as a function call. e.g.: import m2 = module("m2");
-                rule("NoSpaceAfterModuleImport", [139 /* ModuleKeyword */, 143 /* RequireKeyword */], 20 /* OpenParenToken */, [isNonJsxSameLineTokenContext], 16 /* DeleteSpace */),
+                rule("NoSpaceAfterModuleImport", [140 /* ModuleKeyword */, 144 /* RequireKeyword */], 20 /* OpenParenToken */, [isNonJsxSameLineTokenContext], 16 /* DeleteSpace */),
                 // Add a space around certain TypeScript keywords
                 rule("SpaceAfterCertainTypeScriptKeywords", [
-                    125 /* AbstractKeyword */,
-                    83 /* ClassKeyword */,
-                    133 /* DeclareKeyword */,
-                    87 /* DefaultKeyword */,
-                    91 /* EnumKeyword */,
-                    92 /* ExportKeyword */,
-                    93 /* ExtendsKeyword */,
-                    134 /* GetKeyword */,
-                    116 /* ImplementsKeyword */,
-                    99 /* ImportKeyword */,
-                    117 /* InterfaceKeyword */,
-                    139 /* ModuleKeyword */,
-                    140 /* NamespaceKeyword */,
-                    120 /* PrivateKeyword */,
-                    122 /* PublicKeyword */,
-                    121 /* ProtectedKeyword */,
-                    142 /* ReadonlyKeyword */,
-                    146 /* SetKeyword */,
-                    123 /* StaticKeyword */,
-                    149 /* TypeKeyword */,
-                    153 /* FromKeyword */,
-                    138 /* KeyOfKeyword */,
-                    135 /* InferKeyword */,
+                    126 /* AbstractKeyword */,
+                    84 /* ClassKeyword */,
+                    134 /* DeclareKeyword */,
+                    88 /* DefaultKeyword */,
+                    92 /* EnumKeyword */,
+                    93 /* ExportKeyword */,
+                    94 /* ExtendsKeyword */,
+                    135 /* GetKeyword */,
+                    117 /* ImplementsKeyword */,
+                    100 /* ImportKeyword */,
+                    118 /* InterfaceKeyword */,
+                    140 /* ModuleKeyword */,
+                    141 /* NamespaceKeyword */,
+                    121 /* PrivateKeyword */,
+                    123 /* PublicKeyword */,
+                    122 /* ProtectedKeyword */,
+                    143 /* ReadonlyKeyword */,
+                    147 /* SetKeyword */,
+                    124 /* StaticKeyword */,
+                    150 /* TypeKeyword */,
+                    154 /* FromKeyword */,
+                    139 /* KeyOfKeyword */,
+                    136 /* InferKeyword */,
                 ], anyToken, [isNonJsxSameLineTokenContext], 4 /* InsertSpace */),
-                rule("SpaceBeforeCertainTypeScriptKeywords", anyToken, [93 /* ExtendsKeyword */, 116 /* ImplementsKeyword */, 153 /* FromKeyword */], [isNonJsxSameLineTokenContext], 4 /* InsertSpace */),
+                rule("SpaceBeforeCertainTypeScriptKeywords", anyToken, [94 /* ExtendsKeyword */, 117 /* ImplementsKeyword */, 154 /* FromKeyword */], [isNonJsxSameLineTokenContext], 4 /* InsertSpace */),
                 // Treat string literals in module names as identifiers, and add a space between the literal and the opening Brace braces, e.g.: module "m2" {
                 rule("SpaceAfterModuleName", 10 /* StringLiteral */, 18 /* OpenBraceToken */, [isModuleDeclContext], 4 /* InsertSpace */),
                 // Lambda expressions
                 rule("SpaceBeforeArrow", anyToken, 38 /* EqualsGreaterThanToken */, [isNonJsxSameLineTokenContext], 4 /* InsertSpace */),
                 rule("SpaceAfterArrow", 38 /* EqualsGreaterThanToken */, anyToken, [isNonJsxSameLineTokenContext], 4 /* InsertSpace */),
                 // Optional parameters and let args
-                rule("NoSpaceAfterEllipsis", 25 /* DotDotDotToken */, 78 /* Identifier */, [isNonJsxSameLineTokenContext], 16 /* DeleteSpace */),
+                rule("NoSpaceAfterEllipsis", 25 /* DotDotDotToken */, 79 /* Identifier */, [isNonJsxSameLineTokenContext], 16 /* DeleteSpace */),
                 rule("NoSpaceAfterOptionalParameters", 57 /* QuestionToken */, [21 /* CloseParenToken */, 27 /* CommaToken */], [isNonJsxSameLineTokenContext, isNotBinaryOpContext], 16 /* DeleteSpace */),
                 // Remove spaces in empty interface literals. e.g.: x: {}
                 rule("NoSpaceBetweenEmptyInterfaceBraceBrackets", 18 /* OpenBraceToken */, 19 /* CloseBraceToken */, [isNonJsxSameLineTokenContext, isObjectTypeContext], 16 /* DeleteSpace */),
@@ -135666,38 +138926,38 @@
                 rule("NoSpaceBeforeCloseAngularBracket", anyToken, 31 /* GreaterThanToken */, [isNonJsxSameLineTokenContext, isTypeArgumentOrParameterOrAssertionContext], 16 /* DeleteSpace */),
                 rule("NoSpaceAfterCloseAngularBracket", 31 /* GreaterThanToken */, [20 /* OpenParenToken */, 22 /* OpenBracketToken */, 31 /* GreaterThanToken */, 27 /* CommaToken */], [isNonJsxSameLineTokenContext, isTypeArgumentOrParameterOrAssertionContext, isNotFunctionDeclContext /*To prevent an interference with the SpaceBeforeOpenParenInFuncDecl rule*/], 16 /* DeleteSpace */),
                 // decorators
-                rule("SpaceBeforeAt", [21 /* CloseParenToken */, 78 /* Identifier */], 59 /* AtToken */, [isNonJsxSameLineTokenContext], 4 /* InsertSpace */),
+                rule("SpaceBeforeAt", [21 /* CloseParenToken */, 79 /* Identifier */], 59 /* AtToken */, [isNonJsxSameLineTokenContext], 4 /* InsertSpace */),
                 rule("NoSpaceAfterAt", 59 /* AtToken */, anyToken, [isNonJsxSameLineTokenContext], 16 /* DeleteSpace */),
                 // Insert space after @ in decorator
                 rule("SpaceAfterDecorator", anyToken, [
-                    125 /* AbstractKeyword */,
-                    78 /* Identifier */,
-                    92 /* ExportKeyword */,
-                    87 /* DefaultKeyword */,
-                    83 /* ClassKeyword */,
-                    123 /* StaticKeyword */,
-                    122 /* PublicKeyword */,
-                    120 /* PrivateKeyword */,
-                    121 /* ProtectedKeyword */,
-                    134 /* GetKeyword */,
-                    146 /* SetKeyword */,
+                    126 /* AbstractKeyword */,
+                    79 /* Identifier */,
+                    93 /* ExportKeyword */,
+                    88 /* DefaultKeyword */,
+                    84 /* ClassKeyword */,
+                    124 /* StaticKeyword */,
+                    123 /* PublicKeyword */,
+                    121 /* PrivateKeyword */,
+                    122 /* ProtectedKeyword */,
+                    135 /* GetKeyword */,
+                    147 /* SetKeyword */,
                     22 /* OpenBracketToken */,
                     41 /* AsteriskToken */,
                 ], [isEndOfDecoratorContextOnSameLine], 4 /* InsertSpace */),
                 rule("NoSpaceBeforeNonNullAssertionOperator", anyToken, 53 /* ExclamationToken */, [isNonJsxSameLineTokenContext, isNonNullAssertionContext], 16 /* DeleteSpace */),
-                rule("NoSpaceAfterNewKeywordOnConstructorSignature", 102 /* NewKeyword */, 20 /* OpenParenToken */, [isNonJsxSameLineTokenContext, isConstructorSignatureContext], 16 /* DeleteSpace */),
+                rule("NoSpaceAfterNewKeywordOnConstructorSignature", 103 /* NewKeyword */, 20 /* OpenParenToken */, [isNonJsxSameLineTokenContext, isConstructorSignatureContext], 16 /* DeleteSpace */),
                 rule("SpaceLessThanAndNonJSXTypeAnnotation", 29 /* LessThanToken */, 29 /* LessThanToken */, [isNonJsxSameLineTokenContext], 4 /* InsertSpace */),
             ];
             // These rules are applied after high priority
             var userConfigurableRules = [
                 // Treat constructor as an identifier in a function declaration, and remove spaces between constructor and following left parentheses
-                rule("SpaceAfterConstructor", 132 /* ConstructorKeyword */, 20 /* OpenParenToken */, [isOptionEnabled("insertSpaceAfterConstructor"), isNonJsxSameLineTokenContext], 4 /* InsertSpace */),
-                rule("NoSpaceAfterConstructor", 132 /* ConstructorKeyword */, 20 /* OpenParenToken */, [isOptionDisabledOrUndefined("insertSpaceAfterConstructor"), isNonJsxSameLineTokenContext], 16 /* DeleteSpace */),
+                rule("SpaceAfterConstructor", 133 /* ConstructorKeyword */, 20 /* OpenParenToken */, [isOptionEnabled("insertSpaceAfterConstructor"), isNonJsxSameLineTokenContext], 4 /* InsertSpace */),
+                rule("NoSpaceAfterConstructor", 133 /* ConstructorKeyword */, 20 /* OpenParenToken */, [isOptionDisabledOrUndefined("insertSpaceAfterConstructor"), isNonJsxSameLineTokenContext], 16 /* DeleteSpace */),
                 rule("SpaceAfterComma", 27 /* CommaToken */, anyToken, [isOptionEnabled("insertSpaceAfterCommaDelimiter"), isNonJsxSameLineTokenContext, isNonJsxElementOrFragmentContext, isNextTokenNotCloseBracket, isNextTokenNotCloseParen], 4 /* InsertSpace */),
                 rule("NoSpaceAfterComma", 27 /* CommaToken */, anyToken, [isOptionDisabledOrUndefined("insertSpaceAfterCommaDelimiter"), isNonJsxSameLineTokenContext, isNonJsxElementOrFragmentContext], 16 /* DeleteSpace */),
                 // Insert space after function keyword for anonymous functions
-                rule("SpaceAfterAnonymousFunctionKeyword", [97 /* FunctionKeyword */, 41 /* AsteriskToken */], 20 /* OpenParenToken */, [isOptionEnabled("insertSpaceAfterFunctionKeywordForAnonymousFunctions"), isFunctionDeclContext], 4 /* InsertSpace */),
-                rule("NoSpaceAfterAnonymousFunctionKeyword", [97 /* FunctionKeyword */, 41 /* AsteriskToken */], 20 /* OpenParenToken */, [isOptionDisabledOrUndefined("insertSpaceAfterFunctionKeywordForAnonymousFunctions"), isFunctionDeclContext], 16 /* DeleteSpace */),
+                rule("SpaceAfterAnonymousFunctionKeyword", [98 /* FunctionKeyword */, 41 /* AsteriskToken */], 20 /* OpenParenToken */, [isOptionEnabled("insertSpaceAfterFunctionKeywordForAnonymousFunctions"), isFunctionDeclContext], 4 /* InsertSpace */),
+                rule("NoSpaceAfterAnonymousFunctionKeyword", [98 /* FunctionKeyword */, 41 /* AsteriskToken */], 20 /* OpenParenToken */, [isOptionDisabledOrUndefined("insertSpaceAfterFunctionKeywordForAnonymousFunctions"), isFunctionDeclContext], 16 /* DeleteSpace */),
                 // Insert space after keywords in control flow statements
                 rule("SpaceAfterKeywordInControl", keywords, 20 /* OpenParenToken */, [isOptionEnabled("insertSpaceAfterKeywordsInControlFlowStatements"), isControlDeclContext], 4 /* InsertSpace */),
                 rule("NoSpaceAfterKeywordInControl", keywords, 20 /* OpenParenToken */, [isOptionDisabledOrUndefined("insertSpaceAfterKeywordsInControlFlowStatements"), isControlDeclContext], 16 /* DeleteSpace */),
@@ -135766,18 +139026,18 @@
                 rule("SpaceBeforeOpenBraceInTypeScriptDeclWithBlock", typeScriptOpenBraceLeftTokenRange, 18 /* OpenBraceToken */, [isOptionDisabledOrUndefinedOrTokensOnSameLine("placeOpenBraceOnNewLineForFunctions"), isTypeScriptDeclWithBlockContext, isNotFormatOnEnter, isSameLineTokenOrBeforeBlockContext], 4 /* InsertSpace */, 1 /* CanDeleteNewLines */),
                 rule("NoSpaceBeforeComma", anyToken, 27 /* CommaToken */, [isNonJsxSameLineTokenContext], 16 /* DeleteSpace */),
                 // No space before and after indexer `x[]`
-                rule("NoSpaceBeforeOpenBracket", anyTokenExcept(129 /* AsyncKeyword */, 81 /* CaseKeyword */), 22 /* OpenBracketToken */, [isNonJsxSameLineTokenContext], 16 /* DeleteSpace */),
+                rule("NoSpaceBeforeOpenBracket", anyTokenExcept(130 /* AsyncKeyword */, 82 /* CaseKeyword */), 22 /* OpenBracketToken */, [isNonJsxSameLineTokenContext], 16 /* DeleteSpace */),
                 rule("NoSpaceAfterCloseBracket", 23 /* CloseBracketToken */, anyToken, [isNonJsxSameLineTokenContext, isNotBeforeBlockInFunctionDeclarationContext], 16 /* DeleteSpace */),
                 rule("SpaceAfterSemicolon", 26 /* SemicolonToken */, anyToken, [isNonJsxSameLineTokenContext], 4 /* InsertSpace */),
                 // Remove extra space between for and await
-                rule("SpaceBetweenForAndAwaitKeyword", 96 /* ForKeyword */, 130 /* AwaitKeyword */, [isNonJsxSameLineTokenContext], 4 /* InsertSpace */),
+                rule("SpaceBetweenForAndAwaitKeyword", 97 /* ForKeyword */, 131 /* AwaitKeyword */, [isNonJsxSameLineTokenContext], 4 /* InsertSpace */),
                 // Add a space between statements. All keywords except (do,else,case) has open/close parens after them.
                 // So, we have a rule to add a space for [),Any], [do,Any], [else,Any], and [case,Any]
-                rule("SpaceBetweenStatements", [21 /* CloseParenToken */, 89 /* DoKeyword */, 90 /* ElseKeyword */, 81 /* CaseKeyword */], anyToken, [isNonJsxSameLineTokenContext, isNonJsxElementOrFragmentContext, isNotForContext], 4 /* InsertSpace */),
+                rule("SpaceBetweenStatements", [21 /* CloseParenToken */, 90 /* DoKeyword */, 91 /* ElseKeyword */, 82 /* CaseKeyword */], anyToken, [isNonJsxSameLineTokenContext, isNonJsxElementOrFragmentContext, isNotForContext], 4 /* InsertSpace */),
                 // This low-pri rule takes care of "try {", "catch {" and "finally {" in case the rule SpaceBeforeOpenBraceInControl didn't execute on FormatOnEnter.
-                rule("SpaceAfterTryCatchFinally", [110 /* TryKeyword */, 82 /* CatchKeyword */, 95 /* FinallyKeyword */], 18 /* OpenBraceToken */, [isNonJsxSameLineTokenContext], 4 /* InsertSpace */),
+                rule("SpaceAfterTryCatchFinally", [111 /* TryKeyword */, 83 /* CatchKeyword */, 96 /* FinallyKeyword */], 18 /* OpenBraceToken */, [isNonJsxSameLineTokenContext], 4 /* InsertSpace */),
             ];
-            return __spreadArray(__spreadArray(__spreadArray([], highPriorityCommonRules), userConfigurableRules), lowPriorityCommonRules);
+            return __spreadArray(__spreadArray(__spreadArray([], highPriorityCommonRules, true), userConfigurableRules, true), lowPriorityCommonRules, true);
         }
         formatting.getAllRules = getAllRules;
         /**
@@ -135834,51 +139094,54 @@
             return function (context) { return !context.options || !context.options.hasOwnProperty(optionName) || !!context.options[optionName]; };
         }
         function isForContext(context) {
-            return context.contextNode.kind === 238 /* ForStatement */;
+            return context.contextNode.kind === 240 /* ForStatement */;
         }
         function isNotForContext(context) {
             return !isForContext(context);
         }
         function isBinaryOpContext(context) {
             switch (context.contextNode.kind) {
-                case 217 /* BinaryExpression */:
+                case 219 /* BinaryExpression */:
                     return context.contextNode.operatorToken.kind !== 27 /* CommaToken */;
-                case 218 /* ConditionalExpression */:
-                case 185 /* ConditionalType */:
-                case 225 /* AsExpression */:
-                case 271 /* ExportSpecifier */:
-                case 266 /* ImportSpecifier */:
-                case 173 /* TypePredicate */:
-                case 183 /* UnionType */:
-                case 184 /* IntersectionType */:
+                case 220 /* ConditionalExpression */:
+                case 187 /* ConditionalType */:
+                case 227 /* AsExpression */:
+                case 273 /* ExportSpecifier */:
+                case 268 /* ImportSpecifier */:
+                case 175 /* TypePredicate */:
+                case 185 /* UnionType */:
+                case 186 /* IntersectionType */:
                     return true;
                 // equals in binding elements: function foo([[x, y] = [1, 2]])
-                case 199 /* BindingElement */:
+                case 201 /* BindingElement */:
                 // equals in type X = ...
                 // falls through
-                case 255 /* TypeAliasDeclaration */:
+                case 257 /* TypeAliasDeclaration */:
                 // equal in import a = module('a');
                 // falls through
-                case 261 /* ImportEqualsDeclaration */:
+                case 263 /* ImportEqualsDeclaration */:
+                // equal in export = 1
+                // falls through
+                case 269 /* ExportAssignment */:
                 // equal in let a = 0
                 // falls through
-                case 250 /* VariableDeclaration */:
+                case 252 /* VariableDeclaration */:
                 // equal in p = 0
                 // falls through
-                case 161 /* Parameter */:
-                case 292 /* EnumMember */:
-                case 164 /* PropertyDeclaration */:
-                case 163 /* PropertySignature */:
-                    return context.currentTokenSpan.kind === 62 /* EqualsToken */ || context.nextTokenSpan.kind === 62 /* EqualsToken */;
+                case 162 /* Parameter */:
+                case 294 /* EnumMember */:
+                case 165 /* PropertyDeclaration */:
+                case 164 /* PropertySignature */:
+                    return context.currentTokenSpan.kind === 63 /* EqualsToken */ || context.nextTokenSpan.kind === 63 /* EqualsToken */;
                 // "in" keyword in for (let x in []) { }
-                case 239 /* ForInStatement */:
+                case 241 /* ForInStatement */:
                 // "in" keyword in [P in keyof T]: T[P]
                 // falls through
-                case 160 /* TypeParameter */:
-                    return context.currentTokenSpan.kind === 100 /* InKeyword */ || context.nextTokenSpan.kind === 100 /* InKeyword */ || context.currentTokenSpan.kind === 62 /* EqualsToken */ || context.nextTokenSpan.kind === 62 /* EqualsToken */;
+                case 161 /* TypeParameter */:
+                    return context.currentTokenSpan.kind === 101 /* InKeyword */ || context.nextTokenSpan.kind === 101 /* InKeyword */ || context.currentTokenSpan.kind === 63 /* EqualsToken */ || context.nextTokenSpan.kind === 63 /* EqualsToken */;
                 // Technically, "of" is not a binary operator, but format it the same way as "in"
-                case 240 /* ForOfStatement */:
-                    return context.currentTokenSpan.kind === 157 /* OfKeyword */ || context.nextTokenSpan.kind === 157 /* OfKeyword */;
+                case 242 /* ForOfStatement */:
+                    return context.currentTokenSpan.kind === 158 /* OfKeyword */ || context.nextTokenSpan.kind === 158 /* OfKeyword */;
             }
             return false;
         }
@@ -135890,22 +139153,22 @@
         }
         function isTypeAnnotationContext(context) {
             var contextKind = context.contextNode.kind;
-            return contextKind === 164 /* PropertyDeclaration */ ||
-                contextKind === 163 /* PropertySignature */ ||
-                contextKind === 161 /* Parameter */ ||
-                contextKind === 250 /* VariableDeclaration */ ||
+            return contextKind === 165 /* PropertyDeclaration */ ||
+                contextKind === 164 /* PropertySignature */ ||
+                contextKind === 162 /* Parameter */ ||
+                contextKind === 252 /* VariableDeclaration */ ||
                 ts.isFunctionLikeKind(contextKind);
         }
         function isConditionalOperatorContext(context) {
-            return context.contextNode.kind === 218 /* ConditionalExpression */ ||
-                context.contextNode.kind === 185 /* ConditionalType */;
+            return context.contextNode.kind === 220 /* ConditionalExpression */ ||
+                context.contextNode.kind === 187 /* ConditionalType */;
         }
         function isSameLineTokenOrBeforeBlockContext(context) {
             return context.TokensAreOnSameLine() || isBeforeBlockContext(context);
         }
         function isBraceWrappedContext(context) {
-            return context.contextNode.kind === 197 /* ObjectBindingPattern */ ||
-                context.contextNode.kind === 191 /* MappedType */ ||
+            return context.contextNode.kind === 199 /* ObjectBindingPattern */ ||
+                context.contextNode.kind === 193 /* MappedType */ ||
                 isSingleLineBlockContext(context);
         }
         // This check is done before an open brace in a control construct, a function, or a typescript block declaration
@@ -135931,34 +139194,34 @@
                 return true;
             }
             switch (node.kind) {
-                case 231 /* Block */:
-                case 259 /* CaseBlock */:
-                case 201 /* ObjectLiteralExpression */:
-                case 258 /* ModuleBlock */:
+                case 233 /* Block */:
+                case 261 /* CaseBlock */:
+                case 203 /* ObjectLiteralExpression */:
+                case 260 /* ModuleBlock */:
                     return true;
             }
             return false;
         }
         function isFunctionDeclContext(context) {
             switch (context.contextNode.kind) {
-                case 252 /* FunctionDeclaration */:
-                case 166 /* MethodDeclaration */:
-                case 165 /* MethodSignature */:
+                case 254 /* FunctionDeclaration */:
+                case 167 /* MethodDeclaration */:
+                case 166 /* MethodSignature */:
                 // case SyntaxKind.MemberFunctionDeclaration:
                 // falls through
-                case 168 /* GetAccessor */:
-                case 169 /* SetAccessor */:
+                case 170 /* GetAccessor */:
+                case 171 /* SetAccessor */:
                 // case SyntaxKind.MethodSignature:
                 // falls through
-                case 170 /* CallSignature */:
-                case 209 /* FunctionExpression */:
-                case 167 /* Constructor */:
-                case 210 /* ArrowFunction */:
+                case 172 /* CallSignature */:
+                case 211 /* FunctionExpression */:
+                case 169 /* Constructor */:
+                case 212 /* ArrowFunction */:
                 // case SyntaxKind.ConstructorDeclaration:
                 // case SyntaxKind.SimpleArrowFunctionExpression:
                 // case SyntaxKind.ParenthesizedArrowFunctionExpression:
                 // falls through
-                case 254 /* InterfaceDeclaration */: // This one is not truly a function, but for formatting purposes, it acts just like one
+                case 256 /* InterfaceDeclaration */: // This one is not truly a function, but for formatting purposes, it acts just like one
                     return true;
             }
             return false;
@@ -135967,40 +139230,40 @@
             return !isFunctionDeclContext(context);
         }
         function isFunctionDeclarationOrFunctionExpressionContext(context) {
-            return context.contextNode.kind === 252 /* FunctionDeclaration */ || context.contextNode.kind === 209 /* FunctionExpression */;
+            return context.contextNode.kind === 254 /* FunctionDeclaration */ || context.contextNode.kind === 211 /* FunctionExpression */;
         }
         function isTypeScriptDeclWithBlockContext(context) {
             return nodeIsTypeScriptDeclWithBlockContext(context.contextNode);
         }
         function nodeIsTypeScriptDeclWithBlockContext(node) {
             switch (node.kind) {
-                case 253 /* ClassDeclaration */:
-                case 222 /* ClassExpression */:
-                case 254 /* InterfaceDeclaration */:
-                case 256 /* EnumDeclaration */:
-                case 178 /* TypeLiteral */:
-                case 257 /* ModuleDeclaration */:
-                case 268 /* ExportDeclaration */:
-                case 269 /* NamedExports */:
-                case 262 /* ImportDeclaration */:
-                case 265 /* NamedImports */:
+                case 255 /* ClassDeclaration */:
+                case 224 /* ClassExpression */:
+                case 256 /* InterfaceDeclaration */:
+                case 258 /* EnumDeclaration */:
+                case 180 /* TypeLiteral */:
+                case 259 /* ModuleDeclaration */:
+                case 270 /* ExportDeclaration */:
+                case 271 /* NamedExports */:
+                case 264 /* ImportDeclaration */:
+                case 267 /* NamedImports */:
                     return true;
             }
             return false;
         }
         function isAfterCodeBlockContext(context) {
             switch (context.currentTokenParent.kind) {
-                case 253 /* ClassDeclaration */:
-                case 257 /* ModuleDeclaration */:
-                case 256 /* EnumDeclaration */:
-                case 288 /* CatchClause */:
-                case 258 /* ModuleBlock */:
-                case 245 /* SwitchStatement */:
+                case 255 /* ClassDeclaration */:
+                case 259 /* ModuleDeclaration */:
+                case 258 /* EnumDeclaration */:
+                case 290 /* CatchClause */:
+                case 260 /* ModuleBlock */:
+                case 247 /* SwitchStatement */:
                     return true;
-                case 231 /* Block */: {
+                case 233 /* Block */: {
                     var blockParent = context.currentTokenParent.parent;
                     // In a codefix scenario, we can't rely on parents being set. So just always return true.
-                    if (!blockParent || blockParent.kind !== 210 /* ArrowFunction */ && blockParent.kind !== 209 /* FunctionExpression */) {
+                    if (!blockParent || blockParent.kind !== 212 /* ArrowFunction */ && blockParent.kind !== 211 /* FunctionExpression */) {
                         return true;
                     }
                 }
@@ -136009,32 +139272,32 @@
         }
         function isControlDeclContext(context) {
             switch (context.contextNode.kind) {
-                case 235 /* IfStatement */:
-                case 245 /* SwitchStatement */:
-                case 238 /* ForStatement */:
-                case 239 /* ForInStatement */:
-                case 240 /* ForOfStatement */:
-                case 237 /* WhileStatement */:
-                case 248 /* TryStatement */:
-                case 236 /* DoStatement */:
-                case 244 /* WithStatement */:
+                case 237 /* IfStatement */:
+                case 247 /* SwitchStatement */:
+                case 240 /* ForStatement */:
+                case 241 /* ForInStatement */:
+                case 242 /* ForOfStatement */:
+                case 239 /* WhileStatement */:
+                case 250 /* TryStatement */:
+                case 238 /* DoStatement */:
+                case 246 /* WithStatement */:
                 // TODO
                 // case SyntaxKind.ElseClause:
                 // falls through
-                case 288 /* CatchClause */:
+                case 290 /* CatchClause */:
                     return true;
                 default:
                     return false;
             }
         }
         function isObjectContext(context) {
-            return context.contextNode.kind === 201 /* ObjectLiteralExpression */;
+            return context.contextNode.kind === 203 /* ObjectLiteralExpression */;
         }
         function isFunctionCallContext(context) {
-            return context.contextNode.kind === 204 /* CallExpression */;
+            return context.contextNode.kind === 206 /* CallExpression */;
         }
         function isNewContext(context) {
-            return context.contextNode.kind === 205 /* NewExpression */;
+            return context.contextNode.kind === 207 /* NewExpression */;
         }
         function isFunctionCallOrNewContext(context) {
             return isFunctionCallContext(context) || isNewContext(context);
@@ -136049,10 +139312,10 @@
             return context.nextTokenSpan.kind !== 21 /* CloseParenToken */;
         }
         function isArrowFunctionContext(context) {
-            return context.contextNode.kind === 210 /* ArrowFunction */;
+            return context.contextNode.kind === 212 /* ArrowFunction */;
         }
         function isImportTypeContext(context) {
-            return context.contextNode.kind === 196 /* ImportType */;
+            return context.contextNode.kind === 198 /* ImportType */;
         }
         function isNonJsxSameLineTokenContext(context) {
             return context.TokensAreOnSameLine() && context.contextNode.kind !== 11 /* JsxText */;
@@ -136061,19 +139324,19 @@
             return context.contextNode.kind !== 11 /* JsxText */;
         }
         function isNonJsxElementOrFragmentContext(context) {
-            return context.contextNode.kind !== 274 /* JsxElement */ && context.contextNode.kind !== 278 /* JsxFragment */;
+            return context.contextNode.kind !== 276 /* JsxElement */ && context.contextNode.kind !== 280 /* JsxFragment */;
         }
         function isJsxExpressionContext(context) {
-            return context.contextNode.kind === 284 /* JsxExpression */ || context.contextNode.kind === 283 /* JsxSpreadAttribute */;
+            return context.contextNode.kind === 286 /* JsxExpression */ || context.contextNode.kind === 285 /* JsxSpreadAttribute */;
         }
         function isNextTokenParentJsxAttribute(context) {
-            return context.nextTokenParent.kind === 281 /* JsxAttribute */;
+            return context.nextTokenParent.kind === 283 /* JsxAttribute */;
         }
         function isJsxAttributeContext(context) {
-            return context.contextNode.kind === 281 /* JsxAttribute */;
+            return context.contextNode.kind === 283 /* JsxAttribute */;
         }
         function isJsxSelfClosingElementContext(context) {
-            return context.contextNode.kind === 275 /* JsxSelfClosingElement */;
+            return context.contextNode.kind === 277 /* JsxSelfClosingElement */;
         }
         function isNotBeforeBlockInFunctionDeclarationContext(context) {
             return !isFunctionDeclContext(context) && !isBeforeBlockContext(context);
@@ -136088,45 +139351,45 @@
             while (ts.isExpressionNode(node)) {
                 node = node.parent;
             }
-            return node.kind === 162 /* Decorator */;
+            return node.kind === 163 /* Decorator */;
         }
         function isStartOfVariableDeclarationList(context) {
-            return context.currentTokenParent.kind === 251 /* VariableDeclarationList */ &&
+            return context.currentTokenParent.kind === 253 /* VariableDeclarationList */ &&
                 context.currentTokenParent.getStart(context.sourceFile) === context.currentTokenSpan.pos;
         }
         function isNotFormatOnEnter(context) {
             return context.formattingRequestKind !== 2 /* FormatOnEnter */;
         }
         function isModuleDeclContext(context) {
-            return context.contextNode.kind === 257 /* ModuleDeclaration */;
+            return context.contextNode.kind === 259 /* ModuleDeclaration */;
         }
         function isObjectTypeContext(context) {
-            return context.contextNode.kind === 178 /* TypeLiteral */; // && context.contextNode.parent.kind !== SyntaxKind.InterfaceDeclaration;
+            return context.contextNode.kind === 180 /* TypeLiteral */; // && context.contextNode.parent.kind !== SyntaxKind.InterfaceDeclaration;
         }
         function isConstructorSignatureContext(context) {
-            return context.contextNode.kind === 171 /* ConstructSignature */;
+            return context.contextNode.kind === 173 /* ConstructSignature */;
         }
         function isTypeArgumentOrParameterOrAssertion(token, parent) {
             if (token.kind !== 29 /* LessThanToken */ && token.kind !== 31 /* GreaterThanToken */) {
                 return false;
             }
             switch (parent.kind) {
-                case 174 /* TypeReference */:
-                case 207 /* TypeAssertionExpression */:
-                case 255 /* TypeAliasDeclaration */:
-                case 253 /* ClassDeclaration */:
-                case 222 /* ClassExpression */:
-                case 254 /* InterfaceDeclaration */:
-                case 252 /* FunctionDeclaration */:
-                case 209 /* FunctionExpression */:
-                case 210 /* ArrowFunction */:
-                case 166 /* MethodDeclaration */:
-                case 165 /* MethodSignature */:
-                case 170 /* CallSignature */:
-                case 171 /* ConstructSignature */:
-                case 204 /* CallExpression */:
-                case 205 /* NewExpression */:
-                case 224 /* ExpressionWithTypeArguments */:
+                case 176 /* TypeReference */:
+                case 209 /* TypeAssertionExpression */:
+                case 257 /* TypeAliasDeclaration */:
+                case 255 /* ClassDeclaration */:
+                case 224 /* ClassExpression */:
+                case 256 /* InterfaceDeclaration */:
+                case 254 /* FunctionDeclaration */:
+                case 211 /* FunctionExpression */:
+                case 212 /* ArrowFunction */:
+                case 167 /* MethodDeclaration */:
+                case 166 /* MethodSignature */:
+                case 172 /* CallSignature */:
+                case 173 /* ConstructSignature */:
+                case 206 /* CallExpression */:
+                case 207 /* NewExpression */:
+                case 226 /* ExpressionWithTypeArguments */:
                     return true;
                 default:
                     return false;
@@ -136137,28 +139400,28 @@
                 isTypeArgumentOrParameterOrAssertion(context.nextTokenSpan, context.nextTokenParent);
         }
         function isTypeAssertionContext(context) {
-            return context.contextNode.kind === 207 /* TypeAssertionExpression */;
+            return context.contextNode.kind === 209 /* TypeAssertionExpression */;
         }
         function isVoidOpContext(context) {
-            return context.currentTokenSpan.kind === 113 /* VoidKeyword */ && context.currentTokenParent.kind === 213 /* VoidExpression */;
+            return context.currentTokenSpan.kind === 114 /* VoidKeyword */ && context.currentTokenParent.kind === 215 /* VoidExpression */;
         }
         function isYieldOrYieldStarWithOperand(context) {
-            return context.contextNode.kind === 220 /* YieldExpression */ && context.contextNode.expression !== undefined;
+            return context.contextNode.kind === 222 /* YieldExpression */ && context.contextNode.expression !== undefined;
         }
         function isNonNullAssertionContext(context) {
-            return context.contextNode.kind === 226 /* NonNullExpression */;
+            return context.contextNode.kind === 228 /* NonNullExpression */;
         }
         function isNotStatementConditionContext(context) {
             return !isStatementConditionContext(context);
         }
         function isStatementConditionContext(context) {
             switch (context.contextNode.kind) {
-                case 235 /* IfStatement */:
-                case 238 /* ForStatement */:
-                case 239 /* ForInStatement */:
-                case 240 /* ForOfStatement */:
-                case 236 /* DoStatement */:
-                case 237 /* WhileStatement */:
+                case 237 /* IfStatement */:
+                case 240 /* ForStatement */:
+                case 241 /* ForInStatement */:
+                case 242 /* ForOfStatement */:
+                case 238 /* DoStatement */:
+                case 239 /* WhileStatement */:
                     return true;
                 default:
                     return false;
@@ -136183,12 +139446,12 @@
                 return nextTokenKind === 19 /* CloseBraceToken */
                     || nextTokenKind === 1 /* EndOfFileToken */;
             }
-            if (nextTokenKind === 230 /* SemicolonClassElement */ ||
+            if (nextTokenKind === 232 /* SemicolonClassElement */ ||
                 nextTokenKind === 26 /* SemicolonToken */) {
                 return false;
             }
-            if (context.contextNode.kind === 254 /* InterfaceDeclaration */ ||
-                context.contextNode.kind === 255 /* TypeAliasDeclaration */) {
+            if (context.contextNode.kind === 256 /* InterfaceDeclaration */ ||
+                context.contextNode.kind === 257 /* TypeAliasDeclaration */) {
                 // Can’t remove semicolon after `foo`; it would parse as a method declaration:
                 //
                 // interface I {
@@ -136202,9 +139465,9 @@
             if (ts.isPropertyDeclaration(context.currentTokenParent)) {
                 return !context.currentTokenParent.initializer;
             }
-            return context.currentTokenParent.kind !== 238 /* ForStatement */
-                && context.currentTokenParent.kind !== 232 /* EmptyStatement */
-                && context.currentTokenParent.kind !== 230 /* SemicolonClassElement */
+            return context.currentTokenParent.kind !== 240 /* ForStatement */
+                && context.currentTokenParent.kind !== 234 /* EmptyStatement */
+                && context.currentTokenParent.kind !== 232 /* SemicolonClassElement */
                 && nextTokenKind !== 22 /* OpenBracketToken */
                 && nextTokenKind !== 20 /* OpenParenToken */
                 && nextTokenKind !== 39 /* PlusToken */
@@ -136212,7 +139475,7 @@
                 && nextTokenKind !== 43 /* SlashToken */
                 && nextTokenKind !== 13 /* RegularExpressionLiteral */
                 && nextTokenKind !== 27 /* CommaToken */
-                && nextTokenKind !== 219 /* TemplateExpression */
+                && nextTokenKind !== 221 /* TemplateExpression */
                 && nextTokenKind !== 15 /* TemplateHead */
                 && nextTokenKind !== 14 /* NoSubstitutionTemplateLiteral */
                 && nextTokenKind !== 24 /* DotToken */;
@@ -136303,12 +139566,12 @@
             return map;
         }
         function getRuleBucketIndex(row, column) {
-            ts.Debug.assert(row <= 157 /* LastKeyword */ && column <= 157 /* LastKeyword */, "Must compute formatting context from tokens");
+            ts.Debug.assert(row <= 158 /* LastKeyword */ && column <= 158 /* LastKeyword */, "Must compute formatting context from tokens");
             return (row * mapRowLength) + column;
         }
         var maskBitSize = 5;
         var mask = 31; // MaskBitSize bits
-        var mapRowLength = 157 /* LastToken */ + 1;
+        var mapRowLength = 158 /* LastToken */ + 1;
         var RulesPosition;
         (function (RulesPosition) {
             RulesPosition[RulesPosition["StopRulesSpecific"] = 0] = "StopRulesSpecific";
@@ -136496,17 +139759,17 @@
         // i.e. parent is class declaration with the list of members and node is one of members.
         function isListElement(parent, node) {
             switch (parent.kind) {
-                case 253 /* ClassDeclaration */:
-                case 254 /* InterfaceDeclaration */:
+                case 255 /* ClassDeclaration */:
+                case 256 /* InterfaceDeclaration */:
                     return ts.rangeContainsRange(parent.members, node);
-                case 257 /* ModuleDeclaration */:
+                case 259 /* ModuleDeclaration */:
                     var body = parent.body;
-                    return !!body && body.kind === 258 /* ModuleBlock */ && ts.rangeContainsRange(body.statements, node);
-                case 298 /* SourceFile */:
-                case 231 /* Block */:
-                case 258 /* ModuleBlock */:
+                    return !!body && body.kind === 260 /* ModuleBlock */ && ts.rangeContainsRange(body.statements, node);
+                case 300 /* SourceFile */:
+                case 233 /* Block */:
+                case 260 /* ModuleBlock */:
                     return ts.rangeContainsRange(parent.statements, node);
-                case 288 /* CatchClause */:
+                case 290 /* CatchClause */:
                     return ts.rangeContainsRange(parent.block.statements, node);
             }
             return false;
@@ -136735,19 +139998,19 @@
                     return node.modifiers[0].kind;
                 }
                 switch (node.kind) {
-                    case 253 /* ClassDeclaration */: return 83 /* ClassKeyword */;
-                    case 254 /* InterfaceDeclaration */: return 117 /* InterfaceKeyword */;
-                    case 252 /* FunctionDeclaration */: return 97 /* FunctionKeyword */;
-                    case 256 /* EnumDeclaration */: return 256 /* EnumDeclaration */;
-                    case 168 /* GetAccessor */: return 134 /* GetKeyword */;
-                    case 169 /* SetAccessor */: return 146 /* SetKeyword */;
-                    case 166 /* MethodDeclaration */:
+                    case 255 /* ClassDeclaration */: return 84 /* ClassKeyword */;
+                    case 256 /* InterfaceDeclaration */: return 118 /* InterfaceKeyword */;
+                    case 254 /* FunctionDeclaration */: return 98 /* FunctionKeyword */;
+                    case 258 /* EnumDeclaration */: return 258 /* EnumDeclaration */;
+                    case 170 /* GetAccessor */: return 135 /* GetKeyword */;
+                    case 171 /* SetAccessor */: return 147 /* SetKeyword */;
+                    case 167 /* MethodDeclaration */:
                         if (node.asteriskToken) {
                             return 41 /* AsteriskToken */;
                         }
                     // falls through
-                    case 164 /* PropertyDeclaration */:
-                    case 161 /* Parameter */:
+                    case 165 /* PropertyDeclaration */:
+                    case 162 /* Parameter */:
                         var name = ts.getNameOfDeclaration(node);
                         if (name) {
                             return name.kind;
@@ -136797,23 +140060,23 @@
                         case 18 /* OpenBraceToken */:
                         case 19 /* CloseBraceToken */:
                         case 21 /* CloseParenToken */:
-                        case 90 /* ElseKeyword */:
-                        case 114 /* WhileKeyword */:
+                        case 91 /* ElseKeyword */:
+                        case 115 /* WhileKeyword */:
                         case 59 /* AtToken */:
                             return false;
                         case 43 /* SlashToken */:
                         case 31 /* GreaterThanToken */:
                             switch (container.kind) {
-                                case 276 /* JsxOpeningElement */:
-                                case 277 /* JsxClosingElement */:
-                                case 275 /* JsxSelfClosingElement */:
-                                case 224 /* ExpressionWithTypeArguments */:
+                                case 278 /* JsxOpeningElement */:
+                                case 279 /* JsxClosingElement */:
+                                case 277 /* JsxSelfClosingElement */:
+                                case 226 /* ExpressionWithTypeArguments */:
                                     return false;
                             }
                             break;
                         case 22 /* OpenBracketToken */:
                         case 23 /* CloseBracketToken */:
-                            if (container.kind !== 191 /* MappedType */) {
+                            if (container.kind !== 193 /* MappedType */) {
                                 return false;
                             }
                             break;
@@ -136916,11 +140179,11 @@
                             return inheritedIndentation;
                         }
                     }
-                    var effectiveParentStartLine = child.kind === 162 /* Decorator */ ? childStartLine : undecoratedParentStartLine;
+                    var effectiveParentStartLine = child.kind === 163 /* Decorator */ ? childStartLine : undecoratedParentStartLine;
                     var childIndentation = computeIndentation(child, childStartLine, childIndentationAmount, node, parentDynamicIndentation, effectiveParentStartLine);
                     processNode(child, childContextNode, childStartLine, undecoratedChildStartLine, childIndentation.indentation, childIndentation.delta);
                     childContextNode = node;
-                    if (isFirstListItem && parent.kind === 200 /* ArrayLiteralExpression */ && inheritedIndentation === -1 /* Unknown */) {
+                    if (isFirstListItem && parent.kind === 202 /* ArrayLiteralExpression */ && inheritedIndentation === -1 /* Unknown */) {
                         inheritedIndentation = childIndentation.indentation;
                     }
                     return inheritedIndentation;
@@ -137353,12 +140616,12 @@
         formatting.getRangeOfEnclosingComment = getRangeOfEnclosingComment;
         function getOpenTokenForList(node, list) {
             switch (node.kind) {
-                case 167 /* Constructor */:
-                case 252 /* FunctionDeclaration */:
-                case 209 /* FunctionExpression */:
-                case 166 /* MethodDeclaration */:
-                case 165 /* MethodSignature */:
-                case 210 /* ArrowFunction */:
+                case 169 /* Constructor */:
+                case 254 /* FunctionDeclaration */:
+                case 211 /* FunctionExpression */:
+                case 167 /* MethodDeclaration */:
+                case 166 /* MethodSignature */:
+                case 212 /* ArrowFunction */:
                     if (node.typeParameters === list) {
                         return 29 /* LessThanToken */;
                     }
@@ -137366,8 +140629,8 @@
                         return 20 /* OpenParenToken */;
                     }
                     break;
-                case 204 /* CallExpression */:
-                case 205 /* NewExpression */:
+                case 206 /* CallExpression */:
+                case 207 /* NewExpression */:
                     if (node.typeArguments === list) {
                         return 29 /* LessThanToken */;
                     }
@@ -137375,12 +140638,12 @@
                         return 20 /* OpenParenToken */;
                     }
                     break;
-                case 174 /* TypeReference */:
+                case 176 /* TypeReference */:
                     if (node.typeArguments === list) {
                         return 29 /* LessThanToken */;
                     }
                     break;
-                case 178 /* TypeLiteral */:
+                case 180 /* TypeLiteral */:
                     return 18 /* OpenBraceToken */;
             }
             return 0 /* Unknown */;
@@ -137498,7 +140761,7 @@
                 if (options.indentStyle === ts.IndentStyle.Block) {
                     return getBlockIndent(sourceFile, position, options);
                 }
-                if (precedingToken.kind === 27 /* CommaToken */ && precedingToken.parent.kind !== 217 /* BinaryExpression */) {
+                if (precedingToken.kind === 27 /* CommaToken */ && precedingToken.parent.kind !== 219 /* BinaryExpression */) {
                     // previous token is comma that separates items in list - find the previous item and try to derive indentation from it
                     var actualIndentation = getActualIndentationForListItemBeforeComma(precedingToken, sourceFile, options);
                     if (actualIndentation !== -1 /* Unknown */) {
@@ -137671,7 +140934,7 @@
                 // - parent is SourceFile - by default immediate children of SourceFile are not indented except when user indents them manually
                 // - parent and child are not on the same line
                 var useActualIndentation = (ts.isDeclaration(current) || ts.isStatementButNotDeclaration(current)) &&
-                    (parent.kind === 298 /* SourceFile */ || !parentAndChildShareLine);
+                    (parent.kind === 300 /* SourceFile */ || !parentAndChildShareLine);
                 if (!useActualIndentation) {
                     return -1 /* Unknown */;
                 }
@@ -137719,8 +140982,8 @@
             }
             SmartIndenter.isArgumentAndStartLineOverlapsExpressionBeingCalled = isArgumentAndStartLineOverlapsExpressionBeingCalled;
             function childStartsOnTheSameLineWithElseInIfStatement(parent, child, childStartLine, sourceFile) {
-                if (parent.kind === 235 /* IfStatement */ && parent.elseStatement === child) {
-                    var elseKeyword = ts.findChildOfKind(parent, 90 /* ElseKeyword */, sourceFile);
+                if (parent.kind === 237 /* IfStatement */ && parent.elseStatement === child) {
+                    var elseKeyword = ts.findChildOfKind(parent, 91 /* ElseKeyword */, sourceFile);
                     ts.Debug.assert(elseKeyword !== undefined);
                     var elseKeywordStartLine = getStartLineAndCharacterForNode(elseKeyword, sourceFile).line;
                     return elseKeywordStartLine === childStartLine;
@@ -137800,40 +141063,40 @@
             }
             function getListByRange(start, end, node, sourceFile) {
                 switch (node.kind) {
-                    case 174 /* TypeReference */:
+                    case 176 /* TypeReference */:
                         return getList(node.typeArguments);
-                    case 201 /* ObjectLiteralExpression */:
+                    case 203 /* ObjectLiteralExpression */:
                         return getList(node.properties);
-                    case 200 /* ArrayLiteralExpression */:
+                    case 202 /* ArrayLiteralExpression */:
                         return getList(node.elements);
-                    case 178 /* TypeLiteral */:
+                    case 180 /* TypeLiteral */:
                         return getList(node.members);
-                    case 252 /* FunctionDeclaration */:
-                    case 209 /* FunctionExpression */:
-                    case 210 /* ArrowFunction */:
-                    case 166 /* MethodDeclaration */:
-                    case 165 /* MethodSignature */:
-                    case 170 /* CallSignature */:
-                    case 167 /* Constructor */:
-                    case 176 /* ConstructorType */:
-                    case 171 /* ConstructSignature */:
+                    case 254 /* FunctionDeclaration */:
+                    case 211 /* FunctionExpression */:
+                    case 212 /* ArrowFunction */:
+                    case 167 /* MethodDeclaration */:
+                    case 166 /* MethodSignature */:
+                    case 172 /* CallSignature */:
+                    case 169 /* Constructor */:
+                    case 178 /* ConstructorType */:
+                    case 173 /* ConstructSignature */:
                         return getList(node.typeParameters) || getList(node.parameters);
-                    case 253 /* ClassDeclaration */:
-                    case 222 /* ClassExpression */:
-                    case 254 /* InterfaceDeclaration */:
-                    case 255 /* TypeAliasDeclaration */:
-                    case 334 /* JSDocTemplateTag */:
+                    case 255 /* ClassDeclaration */:
+                    case 224 /* ClassExpression */:
+                    case 256 /* InterfaceDeclaration */:
+                    case 257 /* TypeAliasDeclaration */:
+                    case 339 /* JSDocTemplateTag */:
                         return getList(node.typeParameters);
-                    case 205 /* NewExpression */:
-                    case 204 /* CallExpression */:
+                    case 207 /* NewExpression */:
+                    case 206 /* CallExpression */:
                         return getList(node.typeArguments) || getList(node.arguments);
-                    case 251 /* VariableDeclarationList */:
+                    case 253 /* VariableDeclarationList */:
                         return getList(node.declarations);
-                    case 265 /* NamedImports */:
-                    case 269 /* NamedExports */:
+                    case 267 /* NamedImports */:
+                    case 271 /* NamedExports */:
                         return getList(node.elements);
-                    case 197 /* ObjectBindingPattern */:
-                    case 198 /* ArrayBindingPattern */:
+                    case 199 /* ObjectBindingPattern */:
+                    case 200 /* ArrayBindingPattern */:
                         return getList(node.elements);
                 }
                 function getList(list) {
@@ -137856,7 +141119,7 @@
                 return findColumnForFirstNonWhitespaceCharacterInLine(sourceFile.getLineAndCharacterOfPosition(list.pos), sourceFile, options);
             }
             function getActualIndentationForListItem(node, sourceFile, options, listIndentsChild) {
-                if (node.parent && node.parent.kind === 251 /* VariableDeclarationList */) {
+                if (node.parent && node.parent.kind === 253 /* VariableDeclarationList */) {
                     // VariableDeclarationList has no wrapping tokens
                     return -1 /* Unknown */;
                 }
@@ -137929,91 +141192,91 @@
             function nodeWillIndentChild(settings, parent, child, sourceFile, indentByDefault) {
                 var childKind = child ? child.kind : 0 /* Unknown */;
                 switch (parent.kind) {
-                    case 234 /* ExpressionStatement */:
-                    case 253 /* ClassDeclaration */:
-                    case 222 /* ClassExpression */:
-                    case 254 /* InterfaceDeclaration */:
-                    case 256 /* EnumDeclaration */:
-                    case 255 /* TypeAliasDeclaration */:
-                    case 200 /* ArrayLiteralExpression */:
-                    case 231 /* Block */:
-                    case 258 /* ModuleBlock */:
-                    case 201 /* ObjectLiteralExpression */:
-                    case 178 /* TypeLiteral */:
-                    case 191 /* MappedType */:
-                    case 180 /* TupleType */:
-                    case 259 /* CaseBlock */:
-                    case 286 /* DefaultClause */:
-                    case 285 /* CaseClause */:
-                    case 208 /* ParenthesizedExpression */:
-                    case 202 /* PropertyAccessExpression */:
-                    case 204 /* CallExpression */:
-                    case 205 /* NewExpression */:
-                    case 233 /* VariableStatement */:
-                    case 267 /* ExportAssignment */:
-                    case 243 /* ReturnStatement */:
-                    case 218 /* ConditionalExpression */:
-                    case 198 /* ArrayBindingPattern */:
-                    case 197 /* ObjectBindingPattern */:
-                    case 276 /* JsxOpeningElement */:
-                    case 279 /* JsxOpeningFragment */:
-                    case 275 /* JsxSelfClosingElement */:
-                    case 284 /* JsxExpression */:
-                    case 165 /* MethodSignature */:
-                    case 170 /* CallSignature */:
-                    case 171 /* ConstructSignature */:
-                    case 161 /* Parameter */:
-                    case 175 /* FunctionType */:
-                    case 176 /* ConstructorType */:
-                    case 187 /* ParenthesizedType */:
-                    case 206 /* TaggedTemplateExpression */:
-                    case 214 /* AwaitExpression */:
-                    case 269 /* NamedExports */:
-                    case 265 /* NamedImports */:
-                    case 271 /* ExportSpecifier */:
-                    case 266 /* ImportSpecifier */:
-                    case 164 /* PropertyDeclaration */:
+                    case 236 /* ExpressionStatement */:
+                    case 255 /* ClassDeclaration */:
+                    case 224 /* ClassExpression */:
+                    case 256 /* InterfaceDeclaration */:
+                    case 258 /* EnumDeclaration */:
+                    case 257 /* TypeAliasDeclaration */:
+                    case 202 /* ArrayLiteralExpression */:
+                    case 233 /* Block */:
+                    case 260 /* ModuleBlock */:
+                    case 203 /* ObjectLiteralExpression */:
+                    case 180 /* TypeLiteral */:
+                    case 193 /* MappedType */:
+                    case 182 /* TupleType */:
+                    case 261 /* CaseBlock */:
+                    case 288 /* DefaultClause */:
+                    case 287 /* CaseClause */:
+                    case 210 /* ParenthesizedExpression */:
+                    case 204 /* PropertyAccessExpression */:
+                    case 206 /* CallExpression */:
+                    case 207 /* NewExpression */:
+                    case 235 /* VariableStatement */:
+                    case 269 /* ExportAssignment */:
+                    case 245 /* ReturnStatement */:
+                    case 220 /* ConditionalExpression */:
+                    case 200 /* ArrayBindingPattern */:
+                    case 199 /* ObjectBindingPattern */:
+                    case 278 /* JsxOpeningElement */:
+                    case 281 /* JsxOpeningFragment */:
+                    case 277 /* JsxSelfClosingElement */:
+                    case 286 /* JsxExpression */:
+                    case 166 /* MethodSignature */:
+                    case 172 /* CallSignature */:
+                    case 173 /* ConstructSignature */:
+                    case 162 /* Parameter */:
+                    case 177 /* FunctionType */:
+                    case 178 /* ConstructorType */:
+                    case 189 /* ParenthesizedType */:
+                    case 208 /* TaggedTemplateExpression */:
+                    case 216 /* AwaitExpression */:
+                    case 271 /* NamedExports */:
+                    case 267 /* NamedImports */:
+                    case 273 /* ExportSpecifier */:
+                    case 268 /* ImportSpecifier */:
+                    case 165 /* PropertyDeclaration */:
                         return true;
-                    case 250 /* VariableDeclaration */:
-                    case 289 /* PropertyAssignment */:
-                    case 217 /* BinaryExpression */:
-                        if (!settings.indentMultiLineObjectLiteralBeginningOnBlankLine && sourceFile && childKind === 201 /* ObjectLiteralExpression */) { // TODO: GH#18217
+                    case 252 /* VariableDeclaration */:
+                    case 291 /* PropertyAssignment */:
+                    case 219 /* BinaryExpression */:
+                        if (!settings.indentMultiLineObjectLiteralBeginningOnBlankLine && sourceFile && childKind === 203 /* ObjectLiteralExpression */) { // TODO: GH#18217
                             return rangeIsOnOneLine(sourceFile, child);
                         }
-                        if (parent.kind !== 217 /* BinaryExpression */) {
+                        if (parent.kind !== 219 /* BinaryExpression */) {
                             return true;
                         }
                         break;
-                    case 236 /* DoStatement */:
-                    case 237 /* WhileStatement */:
-                    case 239 /* ForInStatement */:
-                    case 240 /* ForOfStatement */:
-                    case 238 /* ForStatement */:
-                    case 235 /* IfStatement */:
-                    case 252 /* FunctionDeclaration */:
-                    case 209 /* FunctionExpression */:
-                    case 166 /* MethodDeclaration */:
-                    case 167 /* Constructor */:
-                    case 168 /* GetAccessor */:
-                    case 169 /* SetAccessor */:
-                        return childKind !== 231 /* Block */;
-                    case 210 /* ArrowFunction */:
-                        if (sourceFile && childKind === 208 /* ParenthesizedExpression */) {
+                    case 238 /* DoStatement */:
+                    case 239 /* WhileStatement */:
+                    case 241 /* ForInStatement */:
+                    case 242 /* ForOfStatement */:
+                    case 240 /* ForStatement */:
+                    case 237 /* IfStatement */:
+                    case 254 /* FunctionDeclaration */:
+                    case 211 /* FunctionExpression */:
+                    case 167 /* MethodDeclaration */:
+                    case 169 /* Constructor */:
+                    case 170 /* GetAccessor */:
+                    case 171 /* SetAccessor */:
+                        return childKind !== 233 /* Block */;
+                    case 212 /* ArrowFunction */:
+                        if (sourceFile && childKind === 210 /* ParenthesizedExpression */) {
                             return rangeIsOnOneLine(sourceFile, child);
                         }
-                        return childKind !== 231 /* Block */;
-                    case 268 /* ExportDeclaration */:
-                        return childKind !== 269 /* NamedExports */;
-                    case 262 /* ImportDeclaration */:
-                        return childKind !== 263 /* ImportClause */ ||
-                            (!!child.namedBindings && child.namedBindings.kind !== 265 /* NamedImports */);
-                    case 274 /* JsxElement */:
-                        return childKind !== 277 /* JsxClosingElement */;
-                    case 278 /* JsxFragment */:
-                        return childKind !== 280 /* JsxClosingFragment */;
-                    case 184 /* IntersectionType */:
-                    case 183 /* UnionType */:
-                        if (childKind === 178 /* TypeLiteral */ || childKind === 180 /* TupleType */) {
+                        return childKind !== 233 /* Block */;
+                    case 270 /* ExportDeclaration */:
+                        return childKind !== 271 /* NamedExports */;
+                    case 264 /* ImportDeclaration */:
+                        return childKind !== 265 /* ImportClause */ ||
+                            (!!child.namedBindings && child.namedBindings.kind !== 267 /* NamedImports */);
+                    case 276 /* JsxElement */:
+                        return childKind !== 279 /* JsxClosingElement */;
+                    case 280 /* JsxFragment */:
+                        return childKind !== 282 /* JsxClosingFragment */;
+                    case 186 /* IntersectionType */:
+                    case 185 /* UnionType */:
+                        if (childKind === 180 /* TypeLiteral */ || childKind === 182 /* TupleType */) {
                             return false;
                         }
                         break;
@@ -138024,11 +141287,11 @@
             SmartIndenter.nodeWillIndentChild = nodeWillIndentChild;
             function isControlFlowEndingStatement(kind, parent) {
                 switch (kind) {
-                    case 243 /* ReturnStatement */:
-                    case 247 /* ThrowStatement */:
-                    case 241 /* ContinueStatement */:
-                    case 242 /* BreakStatement */:
-                        return parent.kind !== 231 /* Block */;
+                    case 245 /* ReturnStatement */:
+                    case 249 /* ThrowStatement */:
+                    case 243 /* ContinueStatement */:
+                    case 244 /* BreakStatement */:
+                        return parent.kind !== 233 /* Block */;
                     default:
                         return false;
                 }
@@ -138144,7 +141407,9 @@
                 return node.getStart(sourceFile);
             }
             if (leadingTriviaOption === LeadingTriviaOption.StartLine) {
-                return ts.getLineStartPositionForPosition(node.getStart(sourceFile), sourceFile);
+                var startPos = node.getStart(sourceFile);
+                var pos = ts.getLineStartPositionForPosition(startPos, sourceFile);
+                return ts.rangeContainsPosition(node, pos) ? pos : startPos;
             }
             if (leadingTriviaOption === LeadingTriviaOption.JSDoc) {
                 var JSDocComments = ts.getJSDocCommentRanges(node, sourceFile.text);
@@ -138243,7 +141508,7 @@
          * Checks if 'candidate' argument is a legal separator in the list that contains 'node' as an element
          */
         function isSeparator(node, candidate) {
-            return !!candidate && !!node.parent && (candidate.kind === 27 /* CommaToken */ || (candidate.kind === 26 /* SemicolonToken */ && node.parent.kind === 201 /* ObjectLiteralExpression */));
+            return !!candidate && !!node.parent && (candidate.kind === 27 /* CommaToken */ || (candidate.kind === 26 /* SemicolonToken */ && node.parent.kind === 203 /* ObjectLiteralExpression */));
         }
         function isThisTypeAnnotatable(containingFunction) {
             return ts.isFunctionExpression(containingFunction) || ts.isFunctionDeclaration(containingFunction);
@@ -138450,7 +141715,7 @@
                     }
                 }
                 else {
-                    endNode = (_a = (node.kind === 250 /* VariableDeclaration */ ? node.exclamationToken : node.questionToken)) !== null && _a !== void 0 ? _a : node.name;
+                    endNode = (_a = (node.kind === 252 /* VariableDeclaration */ ? node.exclamationToken : node.questionToken)) !== null && _a !== void 0 ? _a : node.name;
                 }
                 this.insertNodeAt(sourceFile, endNode.end, type, { prefix: ": " });
                 return true;
@@ -138486,7 +141751,7 @@
             ChangeTracker.prototype.insertNodeAtConstructorStart = function (sourceFile, ctr, newStatement) {
                 var firstStatement = ts.firstOrUndefined(ctr.body.statements);
                 if (!firstStatement || !ctr.body.multiLine) {
-                    this.replaceConstructorBody(sourceFile, ctr, __spreadArray([newStatement], ctr.body.statements));
+                    this.replaceConstructorBody(sourceFile, ctr, __spreadArray([newStatement], ctr.body.statements, true));
                 }
                 else {
                     this.insertNodeBefore(sourceFile, firstStatement, newStatement);
@@ -138495,7 +141760,7 @@
             ChangeTracker.prototype.insertNodeAtConstructorStartAfterSuperCall = function (sourceFile, ctr, newStatement) {
                 var superCallStatement = ts.find(ctr.body.statements, function (stmt) { return ts.isExpressionStatement(stmt) && ts.isSuperCall(stmt.expression); });
                 if (!superCallStatement || !ctr.body.multiLine) {
-                    this.replaceConstructorBody(sourceFile, ctr, __spreadArray(__spreadArray([], ctr.body.statements), [newStatement]));
+                    this.replaceConstructorBody(sourceFile, ctr, __spreadArray(__spreadArray([], ctr.body.statements, true), [newStatement], false));
                 }
                 else {
                     this.insertNodeAfter(sourceFile, superCallStatement, newStatement);
@@ -138504,7 +141769,7 @@
             ChangeTracker.prototype.insertNodeAtConstructorEnd = function (sourceFile, ctr, newStatement) {
                 var lastStatement = ts.lastOrUndefined(ctr.body.statements);
                 if (!lastStatement || !ctr.body.multiLine) {
-                    this.replaceConstructorBody(sourceFile, ctr, __spreadArray(__spreadArray([], ctr.body.statements), [newStatement]));
+                    this.replaceConstructorBody(sourceFile, ctr, __spreadArray(__spreadArray([], ctr.body.statements, true), [newStatement], false));
                 }
                 else {
                     this.insertNodeAfter(sourceFile, lastStatement, newStatement);
@@ -138616,18 +141881,18 @@
             };
             ChangeTracker.prototype.getInsertNodeAfterOptionsWorker = function (node) {
                 switch (node.kind) {
-                    case 253 /* ClassDeclaration */:
-                    case 257 /* ModuleDeclaration */:
+                    case 255 /* ClassDeclaration */:
+                    case 259 /* ModuleDeclaration */:
                         return { prefix: this.newLineCharacter, suffix: this.newLineCharacter };
-                    case 250 /* VariableDeclaration */:
+                    case 252 /* VariableDeclaration */:
                     case 10 /* StringLiteral */:
-                    case 78 /* Identifier */:
+                    case 79 /* Identifier */:
                         return { prefix: ", " };
-                    case 289 /* PropertyAssignment */:
+                    case 291 /* PropertyAssignment */:
                         return { suffix: "," + this.newLineCharacter };
-                    case 92 /* ExportKeyword */:
+                    case 93 /* ExportKeyword */:
                         return { prefix: " " };
-                    case 161 /* Parameter */:
+                    case 162 /* Parameter */:
                         return {};
                     default:
                         ts.Debug.assert(ts.isStatement(node) || ts.isClassOrTypeElement(node)); // Else we haven't handled this kind of node yet -- add it
@@ -138636,12 +141901,12 @@
             };
             ChangeTracker.prototype.insertName = function (sourceFile, node, name) {
                 ts.Debug.assert(!node.name);
-                if (node.kind === 210 /* ArrowFunction */) {
+                if (node.kind === 212 /* ArrowFunction */) {
                     var arrow = ts.findChildOfKind(node, 38 /* EqualsGreaterThanToken */, sourceFile);
                     var lparen = ts.findChildOfKind(node, 20 /* OpenParenToken */, sourceFile);
                     if (lparen) {
                         // `() => {}` --> `function f() {}`
-                        this.insertNodesAt(sourceFile, lparen.getStart(sourceFile), [ts.factory.createToken(97 /* FunctionKeyword */), ts.factory.createIdentifier(name)], { joiner: " " });
+                        this.insertNodesAt(sourceFile, lparen.getStart(sourceFile), [ts.factory.createToken(98 /* FunctionKeyword */), ts.factory.createIdentifier(name)], { joiner: " " });
                         deleteNode(this, sourceFile, arrow);
                     }
                     else {
@@ -138650,14 +141915,14 @@
                         // Replacing full range of arrow to get rid of the leading space -- replace ` =>` with `)`
                         this.replaceRange(sourceFile, arrow, ts.factory.createToken(21 /* CloseParenToken */));
                     }
-                    if (node.body.kind !== 231 /* Block */) {
+                    if (node.body.kind !== 233 /* Block */) {
                         // `() => 0` => `function f() { return 0; }`
-                        this.insertNodesAt(sourceFile, node.body.getStart(sourceFile), [ts.factory.createToken(18 /* OpenBraceToken */), ts.factory.createToken(104 /* ReturnKeyword */)], { joiner: " ", suffix: " " });
+                        this.insertNodesAt(sourceFile, node.body.getStart(sourceFile), [ts.factory.createToken(18 /* OpenBraceToken */), ts.factory.createToken(105 /* ReturnKeyword */)], { joiner: " ", suffix: " " });
                         this.insertNodesAt(sourceFile, node.body.end, [ts.factory.createToken(26 /* SemicolonToken */), ts.factory.createToken(19 /* CloseBraceToken */)], { joiner: " " });
                     }
                 }
                 else {
-                    var pos = ts.findChildOfKind(node, node.kind === 209 /* FunctionExpression */ ? 97 /* FunctionKeyword */ : 83 /* ClassKeyword */, sourceFile).end;
+                    var pos = ts.findChildOfKind(node, node.kind === 211 /* FunctionExpression */ ? 98 /* FunctionKeyword */ : 84 /* ClassKeyword */, sourceFile).end;
                     this.insertNodeAt(sourceFile, pos, ts.factory.createIdentifier(name), { prefix: " " });
                 }
             };
@@ -138884,16 +142149,17 @@
             }
             changesToText.newFileChangesWorker = newFileChangesWorker;
             function computeNewText(change, sourceFile, newLineCharacter, formatContext, validate) {
+                var _a;
                 if (change.kind === ChangeKind.Remove) {
                     return "";
                 }
                 if (change.kind === ChangeKind.Text) {
                     return change.text;
                 }
-                var _a = change.options, options = _a === void 0 ? {} : _a, pos = change.range.pos;
+                var _b = change.options, options = _b === void 0 ? {} : _b, pos = change.range.pos;
                 var format = function (n) { return getFormattedTextOfNode(n, sourceFile, pos, options, newLineCharacter, formatContext, validate); };
                 var text = change.kind === ChangeKind.ReplaceWithMultipleNodes
-                    ? change.nodes.map(function (n) { return ts.removeSuffix(format(n), newLineCharacter); }).join(change.options.joiner || newLineCharacter) // TODO: GH#18217
+                    ? change.nodes.map(function (n) { return ts.removeSuffix(format(n), newLineCharacter); }).join(((_a = change.options) === null || _a === void 0 ? void 0 : _a.joiner) || newLineCharacter)
                     : format(change.node);
                 // strip initial indentation (spaces or tabs) if text will be inserted in the middle of the line
                 var noIndent = (options.preserveLeadingWhitespace || options.indentation !== undefined || ts.getLineStartPositionForPosition(pos, sourceFile) === pos) ? text : text.replace(/^\s+/, "");
@@ -138950,7 +142216,7 @@
             return ts.skipTrivia(s, 0) === s.length;
         }
         function assignPositionsToNode(node) {
-            var visited = ts.visitEachChild(node, assignPositionsToNode, ts.nullTransformationContext, assignPositionsToNodeArray, assignPositionsToNode); // TODO: GH#18217
+            var visited = ts.visitEachChild(node, assignPositionsToNode, ts.nullTransformationContext, assignPositionsToNodeArray, assignPositionsToNode);
             // create proxy node for non synthesized nodes
             var newNode = ts.nodeIsSynthesized(visited) ? visited : Object.create(visited);
             ts.setTextRangePosEnd(newNode, getPos(node), getEnd(node));
@@ -139209,14 +142475,14 @@
         }
         textChanges_3.isValidLocationToAddComment = isValidLocationToAddComment;
         function needSemicolonBetween(a, b) {
-            return (ts.isPropertySignature(a) || ts.isPropertyDeclaration(a)) && ts.isClassOrTypeElement(b) && b.name.kind === 159 /* ComputedPropertyName */
+            return (ts.isPropertySignature(a) || ts.isPropertyDeclaration(a)) && ts.isClassOrTypeElement(b) && b.name.kind === 160 /* ComputedPropertyName */
                 || ts.isStatementButNotDeclaration(a) && ts.isStatementButNotDeclaration(b); // TODO: only if b would start with a `(` or `[`
         }
         var deleteDeclaration;
         (function (deleteDeclaration_1) {
             function deleteDeclaration(changes, deletedNodesInLists, sourceFile, node) {
                 switch (node.kind) {
-                    case 161 /* Parameter */: {
+                    case 162 /* Parameter */: {
                         var oldFunction = node.parent;
                         if (ts.isArrowFunction(oldFunction) &&
                             oldFunction.parameters.length === 1 &&
@@ -139231,17 +142497,17 @@
                         }
                         break;
                     }
-                    case 262 /* ImportDeclaration */:
-                    case 261 /* ImportEqualsDeclaration */:
+                    case 264 /* ImportDeclaration */:
+                    case 263 /* ImportEqualsDeclaration */:
                         var isFirstImport = sourceFile.imports.length && node === ts.first(sourceFile.imports).parent || node === ts.find(sourceFile.statements, ts.isAnyImportSyntax);
                         // For first import, leave header comment in place, otherwise only delete JSDoc comments
                         deleteNode(changes, sourceFile, node, {
                             leadingTriviaOption: isFirstImport ? LeadingTriviaOption.Exclude : ts.hasJSDocNodes(node) ? LeadingTriviaOption.JSDoc : LeadingTriviaOption.StartLine,
                         });
                         break;
-                    case 199 /* BindingElement */:
+                    case 201 /* BindingElement */:
                         var pattern = node.parent;
-                        var preserveComma = pattern.kind === 198 /* ArrayBindingPattern */ && node !== ts.last(pattern.elements);
+                        var preserveComma = pattern.kind === 200 /* ArrayBindingPattern */ && node !== ts.last(pattern.elements);
                         if (preserveComma) {
                             deleteNode(changes, sourceFile, node);
                         }
@@ -139249,13 +142515,13 @@
                             deleteNodeInList(changes, deletedNodesInLists, sourceFile, node);
                         }
                         break;
-                    case 250 /* VariableDeclaration */:
+                    case 252 /* VariableDeclaration */:
                         deleteVariableDeclaration(changes, deletedNodesInLists, sourceFile, node);
                         break;
-                    case 160 /* TypeParameter */:
+                    case 161 /* TypeParameter */:
                         deleteNodeInList(changes, deletedNodesInLists, sourceFile, node);
                         break;
-                    case 266 /* ImportSpecifier */:
+                    case 268 /* ImportSpecifier */:
                         var namedImports = node.parent;
                         if (namedImports.elements.length === 1) {
                             deleteImportBinding(changes, sourceFile, namedImports);
@@ -139264,17 +142530,17 @@
                             deleteNodeInList(changes, deletedNodesInLists, sourceFile, node);
                         }
                         break;
-                    case 264 /* NamespaceImport */:
+                    case 266 /* NamespaceImport */:
                         deleteImportBinding(changes, sourceFile, node);
                         break;
                     case 26 /* SemicolonToken */:
                         deleteNode(changes, sourceFile, node, { trailingTriviaOption: TrailingTriviaOption.Exclude });
                         break;
-                    case 97 /* FunctionKeyword */:
+                    case 98 /* FunctionKeyword */:
                         deleteNode(changes, sourceFile, node, { leadingTriviaOption: LeadingTriviaOption.Exclude });
                         break;
-                    case 253 /* ClassDeclaration */:
-                    case 252 /* FunctionDeclaration */:
+                    case 255 /* ClassDeclaration */:
+                    case 254 /* FunctionDeclaration */:
                         deleteNode(changes, sourceFile, node, { leadingTriviaOption: ts.hasJSDocNodes(node) ? LeadingTriviaOption.JSDoc : LeadingTriviaOption.StartLine });
                         break;
                     default:
@@ -139325,13 +142591,13 @@
                     // Delete the entire import declaration
                     // |import * as ns from './file'|
                     // |import { a } from './file'|
-                    var importDecl = ts.getAncestor(node, 262 /* ImportDeclaration */);
+                    var importDecl = ts.getAncestor(node, 264 /* ImportDeclaration */);
                     deleteNode(changes, sourceFile, importDecl);
                 }
             }
             function deleteVariableDeclaration(changes, deletedNodesInLists, sourceFile, node) {
                 var parent = node.parent;
-                if (parent.kind === 288 /* CatchClause */) {
+                if (parent.kind === 290 /* CatchClause */) {
                     // TODO: There's currently no unused diagnostic for this, could be a suggestion
                     changes.deleteNodeRange(sourceFile, ts.findChildOfKind(parent, 20 /* OpenParenToken */, sourceFile), ts.findChildOfKind(parent, 21 /* CloseParenToken */, sourceFile));
                     return;
@@ -139342,14 +142608,14 @@
                 }
                 var gp = parent.parent;
                 switch (gp.kind) {
-                    case 240 /* ForOfStatement */:
-                    case 239 /* ForInStatement */:
+                    case 242 /* ForOfStatement */:
+                    case 241 /* ForInStatement */:
                         changes.replaceNode(sourceFile, node, ts.factory.createObjectLiteralExpression());
                         break;
-                    case 238 /* ForStatement */:
+                    case 240 /* ForStatement */:
                         deleteNode(changes, sourceFile, parent);
                         break;
-                    case 233 /* VariableStatement */:
+                    case 235 /* VariableStatement */:
                         deleteNode(changes, sourceFile, gp, { leadingTriviaOption: ts.hasJSDocNodes(gp) ? LeadingTriviaOption.JSDoc : LeadingTriviaOption.StartLine });
                         break;
                     default:
@@ -139482,7 +142748,7 @@
         codefix.eachDiagnostic = eachDiagnostic;
         function getDiagnostics(_a) {
             var program = _a.program, sourceFile = _a.sourceFile, cancellationToken = _a.cancellationToken;
-            return __spreadArray(__spreadArray(__spreadArray([], program.getSemanticDiagnostics(sourceFile, cancellationToken)), program.getSyntacticDiagnostics(sourceFile, cancellationToken)), ts.computeSuggestionDiagnostics(sourceFile, program, cancellationToken));
+            return __spreadArray(__spreadArray(__spreadArray([], program.getSemanticDiagnostics(sourceFile, cancellationToken), true), program.getSyntacticDiagnostics(sourceFile, cancellationToken), true), ts.computeSuggestionDiagnostics(sourceFile, program, cancellationToken), true);
         }
     })(codefix = ts.codefix || (ts.codefix = {}));
 })(ts || (ts = {}));
@@ -139535,8 +142801,8 @@
             var token = ts.getTokenAtPosition(sourceFile, pos);
             var assertion = ts.Debug.checkDefined(ts.findAncestor(token, function (n) { return ts.isAsExpression(n) || ts.isTypeAssertionExpression(n); }), "Expected to find an assertion expression");
             var replacement = ts.isAsExpression(assertion)
-                ? ts.factory.createAsExpression(assertion.expression, ts.factory.createKeywordTypeNode(152 /* UnknownKeyword */))
-                : ts.factory.createTypeAssertion(ts.factory.createKeywordTypeNode(152 /* UnknownKeyword */), assertion.expression);
+                ? ts.factory.createAsExpression(assertion.expression, ts.factory.createKeywordTypeNode(153 /* UnknownKeyword */))
+                : ts.factory.createTypeAssertion(ts.factory.createKeywordTypeNode(153 /* UnknownKeyword */), assertion.expression);
             changeTracker.replaceNode(sourceFile, assertion.expression, replacement);
         }
     })(codefix = ts.codefix || (ts.codefix = {}));
@@ -139673,7 +142939,7 @@
             ts.Diagnostics.Type_0_must_have_a_Symbol_asyncIterator_method_that_returns_an_async_iterator.code,
             ts.Diagnostics.Argument_of_type_0_is_not_assignable_to_parameter_of_type_1.code,
             propertyAccessCode
-        ], callableConstructableErrorCodes);
+        ], callableConstructableErrorCodes, true);
         codefix.registerCodeFix({
             fixIds: [fixId],
             errorCodes: errorCodes,
@@ -139769,7 +143035,7 @@
                 }
                 var declaration = ts.tryCast(symbol.valueDeclaration, ts.isVariableDeclaration);
                 var variableName = declaration && ts.tryCast(declaration.name, ts.isIdentifier);
-                var variableStatement = ts.getAncestor(declaration, 233 /* VariableStatement */);
+                var variableStatement = ts.getAncestor(declaration, 235 /* VariableStatement */);
                 if (!declaration || !variableStatement ||
                     declaration.type ||
                     !declaration.initializer ||
@@ -139847,10 +143113,10 @@
         function isInsideAwaitableBody(node) {
             return node.kind & 32768 /* AwaitContext */ || !!ts.findAncestor(node, function (ancestor) {
                 return ancestor.parent && ts.isArrowFunction(ancestor.parent) && ancestor.parent.body === ancestor ||
-                    ts.isBlock(ancestor) && (ancestor.parent.kind === 252 /* FunctionDeclaration */ ||
-                        ancestor.parent.kind === 209 /* FunctionExpression */ ||
-                        ancestor.parent.kind === 210 /* ArrowFunction */ ||
-                        ancestor.parent.kind === 166 /* MethodDeclaration */);
+                    ts.isBlock(ancestor) && (ancestor.parent.kind === 254 /* FunctionDeclaration */ ||
+                        ancestor.parent.kind === 211 /* FunctionExpression */ ||
+                        ancestor.parent.kind === 212 /* ArrowFunction */ ||
+                        ancestor.parent.kind === 167 /* MethodDeclaration */);
             });
         }
         function makeChange(changeTracker, errorCode, sourceFile, checker, insertionSite, fixedDeclarations) {
@@ -139939,7 +143205,7 @@
             if (forInitializer)
                 return applyChange(changeTracker, forInitializer, sourceFile, fixedNodes);
             var parent = token.parent;
-            if (ts.isBinaryExpression(parent) && parent.operatorToken.kind === 62 /* EqualsToken */ && ts.isExpressionStatement(parent.parent)) {
+            if (ts.isBinaryExpression(parent) && parent.operatorToken.kind === 63 /* EqualsToken */ && ts.isExpressionStatement(parent.parent)) {
                 return applyChange(changeTracker, token, sourceFile, fixedNodes);
             }
             if (ts.isArrayLiteralExpression(parent)) {
@@ -139963,16 +143229,16 @@
         }
         function applyChange(changeTracker, initializer, sourceFile, fixedNodes) {
             if (!fixedNodes || ts.tryAddToSet(fixedNodes, initializer)) {
-                changeTracker.insertModifierBefore(sourceFile, 84 /* ConstKeyword */, initializer);
+                changeTracker.insertModifierBefore(sourceFile, 85 /* ConstKeyword */, initializer);
             }
         }
         function isPossiblyPartOfDestructuring(node) {
             switch (node.kind) {
-                case 78 /* Identifier */:
-                case 200 /* ArrayLiteralExpression */:
-                case 201 /* ObjectLiteralExpression */:
-                case 289 /* PropertyAssignment */:
-                case 290 /* ShorthandPropertyAssignment */:
+                case 79 /* Identifier */:
+                case 202 /* ArrayLiteralExpression */:
+                case 203 /* ObjectLiteralExpression */:
+                case 291 /* PropertyAssignment */:
+                case 292 /* ShorthandPropertyAssignment */:
                     return true;
                 default:
                     return false;
@@ -139986,8 +143252,8 @@
         }
         function isPossiblyPartOfCommaSeperatedInitializer(node) {
             switch (node.kind) {
-                case 78 /* Identifier */:
-                case 217 /* BinaryExpression */:
+                case 79 /* Identifier */:
+                case 219 /* BinaryExpression */:
                 case 27 /* CommaToken */:
                     return true;
                 default:
@@ -140001,7 +143267,7 @@
             if (expression.operatorToken.kind === 27 /* CommaToken */) {
                 return ts.every([expression.left, expression.right], function (expression) { return expressionCouldBeVariableDeclaration(expression, checker); });
             }
-            return expression.operatorToken.kind === 62 /* EqualsToken */
+            return expression.operatorToken.kind === 63 /* EqualsToken */
                 && ts.isIdentifier(expression.left)
                 && !checker.getSymbolAtLocation(expression.left);
         }
@@ -140036,9 +143302,9 @@
                 return;
             }
             var declaration = token.parent;
-            if (declaration.kind === 164 /* PropertyDeclaration */ &&
+            if (declaration.kind === 165 /* PropertyDeclaration */ &&
                 (!fixedNodes || ts.tryAddToSet(fixedNodes, declaration))) {
-                changeTracker.insertModifierBefore(sourceFile, 133 /* DeclareKeyword */, declaration);
+                changeTracker.insertModifierBefore(sourceFile, 134 /* DeclareKeyword */, declaration);
             }
         }
     })(codefix = ts.codefix || (ts.codefix = {}));
@@ -140173,26 +143439,26 @@
         }
         function isDeclarationWithType(node) {
             return ts.isFunctionLikeDeclaration(node) ||
-                node.kind === 250 /* VariableDeclaration */ ||
-                node.kind === 163 /* PropertySignature */ ||
-                node.kind === 164 /* PropertyDeclaration */;
+                node.kind === 252 /* VariableDeclaration */ ||
+                node.kind === 164 /* PropertySignature */ ||
+                node.kind === 165 /* PropertyDeclaration */;
         }
         function transformJSDocType(node) {
             switch (node.kind) {
-                case 304 /* JSDocAllType */:
-                case 305 /* JSDocUnknownType */:
+                case 307 /* JSDocAllType */:
+                case 308 /* JSDocUnknownType */:
                     return ts.factory.createTypeReferenceNode("any", ts.emptyArray);
-                case 308 /* JSDocOptionalType */:
+                case 311 /* JSDocOptionalType */:
                     return transformJSDocOptionalType(node);
-                case 307 /* JSDocNonNullableType */:
+                case 310 /* JSDocNonNullableType */:
                     return transformJSDocType(node.type);
-                case 306 /* JSDocNullableType */:
+                case 309 /* JSDocNullableType */:
                     return transformJSDocNullableType(node);
-                case 310 /* JSDocVariadicType */:
+                case 313 /* JSDocVariadicType */:
                     return transformJSDocVariadicType(node);
-                case 309 /* JSDocFunctionType */:
+                case 312 /* JSDocFunctionType */:
                     return transformJSDocFunctionType(node);
-                case 174 /* TypeReference */:
+                case 176 /* TypeReference */:
                     return transformJSDocTypeReference(node);
                 default:
                     var visited = ts.visitEachChild(node, transformJSDocType, ts.nullTransformationContext);
@@ -140213,11 +143479,11 @@
             var _a;
             // TODO: This does not properly handle `function(new:C, string)` per https://github.com/google/closure-compiler/wiki/Types-in-the-Closure-Type-System#the-javascript-type-language
             //       however we do handle it correctly in `serializeTypeForDeclaration` in checker.ts
-            return ts.factory.createFunctionTypeNode(ts.emptyArray, node.parameters.map(transformJSDocParameter), (_a = node.type) !== null && _a !== void 0 ? _a : ts.factory.createKeywordTypeNode(128 /* AnyKeyword */));
+            return ts.factory.createFunctionTypeNode(ts.emptyArray, node.parameters.map(transformJSDocParameter), (_a = node.type) !== null && _a !== void 0 ? _a : ts.factory.createKeywordTypeNode(129 /* AnyKeyword */));
         }
         function transformJSDocParameter(node) {
             var index = node.parent.parameters.indexOf(node);
-            var isRest = node.type.kind === 310 /* JSDocVariadicType */ && index === node.parent.parameters.length - 1; // TODO: GH#18217
+            var isRest = node.type.kind === 313 /* JSDocVariadicType */ && index === node.parent.parameters.length - 1; // TODO: GH#18217
             var name = node.name || (isRest ? "rest" : "arg" + index);
             var dotdotdot = isRest ? ts.factory.createToken(25 /* DotDotDotToken */) : node.dotDotDotToken;
             return ts.factory.createParameterDeclaration(node.decorators, node.modifiers, dotdotdot, name, node.questionToken, ts.visitNode(node.type, transformJSDocType), node.initializer);
@@ -140257,8 +143523,8 @@
             var index = ts.factory.createParameterDeclaration(
             /*decorators*/ undefined, 
             /*modifiers*/ undefined, 
-            /*dotDotDotToken*/ undefined, node.typeArguments[0].kind === 144 /* NumberKeyword */ ? "n" : "s", 
-            /*questionToken*/ undefined, ts.factory.createTypeReferenceNode(node.typeArguments[0].kind === 144 /* NumberKeyword */ ? "number" : "string", []), 
+            /*dotDotDotToken*/ undefined, node.typeArguments[0].kind === 145 /* NumberKeyword */ ? "n" : "s", 
+            /*questionToken*/ undefined, ts.factory.createTypeReferenceNode(node.typeArguments[0].kind === 145 /* NumberKeyword */ ? "number" : "string", []), 
             /*initializer*/ undefined);
             var indexSignature = ts.factory.createTypeLiteralNode([ts.factory.createIndexSignature(/*decorators*/ undefined, /*modifiers*/ undefined, [index], node.typeArguments[1])]);
             ts.setEmitFlags(indexSignature, 1 /* SingleLine */);
@@ -140335,7 +143601,7 @@
                             if (member.declarations.length === 1 &&
                                 ts.isPropertyAccessExpression(firstDeclaration) &&
                                 ts.isBinaryExpression(firstDeclaration.parent) &&
-                                firstDeclaration.parent.operatorToken.kind === 62 /* EqualsToken */ &&
+                                firstDeclaration.parent.operatorToken.kind === 63 /* EqualsToken */ &&
                                 ts.isObjectLiteralExpression(firstDeclaration.parent.right)) {
                                 var prototypes = firstDeclaration.parent.right;
                                 var memberElement = createClassElement(prototypes.symbol, /** modifiers */ undefined);
@@ -140345,7 +143611,7 @@
                             }
                         }
                         else {
-                            var memberElement = createClassElement(member, [ts.factory.createToken(123 /* StaticKeyword */)]);
+                            var memberElement = createClassElement(member, [ts.factory.createToken(124 /* StaticKeyword */)]);
                             if (memberElement) {
                                 memberElements.push.apply(memberElements, memberElement);
                             }
@@ -140391,7 +143657,7 @@
                         return members;
                     }
                     // delete the entire statement if this expression is the sole expression to take care of the semicolon at the end
-                    var nodeToDelete = assignmentBinaryExpression.parent && assignmentBinaryExpression.parent.kind === 234 /* ExpressionStatement */
+                    var nodeToDelete = assignmentBinaryExpression.parent && assignmentBinaryExpression.parent.kind === 236 /* ExpressionStatement */
                         ? assignmentBinaryExpression.parent : assignmentBinaryExpression;
                     changes.delete(sourceFile, nodeToDelete);
                     if (!assignmentExpr) {
@@ -140442,7 +143708,7 @@
                             return createArrowFunctionExpressionMember(members, expression, name);
                     }
                     function createFunctionExpressionMember(members, functionExpression, name) {
-                        var fullModifiers = ts.concatenate(modifiers, getModifierKindFromSource(functionExpression, 129 /* AsyncKeyword */));
+                        var fullModifiers = ts.concatenate(modifiers, getModifierKindFromSource(functionExpression, 130 /* AsyncKeyword */));
                         var method = ts.factory.createMethodDeclaration(/*decorators*/ undefined, fullModifiers, /*asteriskToken*/ undefined, name, /*questionToken*/ undefined, 
                         /*typeParameters*/ undefined, functionExpression.parameters, /*type*/ undefined, functionExpression.body);
                         ts.copyLeadingComments(assignmentBinaryExpression, method, sourceFile);
@@ -140452,14 +143718,14 @@
                         var arrowFunctionBody = arrowFunction.body;
                         var bodyBlock;
                         // case 1: () => { return [1,2,3] }
-                        if (arrowFunctionBody.kind === 231 /* Block */) {
+                        if (arrowFunctionBody.kind === 233 /* Block */) {
                             bodyBlock = arrowFunctionBody;
                         }
                         // case 2: () => [1,2,3]
                         else {
                             bodyBlock = ts.factory.createBlock([ts.factory.createReturnStatement(arrowFunctionBody)]);
                         }
-                        var fullModifiers = ts.concatenate(modifiers, getModifierKindFromSource(arrowFunction, 129 /* AsyncKeyword */));
+                        var fullModifiers = ts.concatenate(modifiers, getModifierKindFromSource(arrowFunction, 130 /* AsyncKeyword */));
                         var method = ts.factory.createMethodDeclaration(/*decorators*/ undefined, fullModifiers, /*asteriskToken*/ undefined, name, /*questionToken*/ undefined, 
                         /*typeParameters*/ undefined, arrowFunction.parameters, /*type*/ undefined, bodyBlock);
                         ts.copyLeadingComments(assignmentBinaryExpression, method, sourceFile);
@@ -140476,7 +143742,7 @@
                 if (initializer.body) {
                     memberElements.unshift(ts.factory.createConstructorDeclaration(/*decorators*/ undefined, /*modifiers*/ undefined, initializer.parameters, initializer.body));
                 }
-                var modifiers = getModifierKindFromSource(node.parent.parent, 92 /* ExportKeyword */);
+                var modifiers = getModifierKindFromSource(node.parent.parent, 93 /* ExportKeyword */);
                 var cls = ts.factory.createClassDeclaration(/*decorators*/ undefined, modifiers, node.name, 
                 /*typeParameters*/ undefined, /*heritageClauses*/ undefined, memberElements);
                 // Don't call copyComments here because we'll already leave them in place
@@ -140487,7 +143753,7 @@
                 if (node.body) {
                     memberElements.unshift(ts.factory.createConstructorDeclaration(/*decorators*/ undefined, /*modifiers*/ undefined, node.parameters, node.body));
                 }
-                var modifiers = getModifierKindFromSource(node, 92 /* ExportKeyword */);
+                var modifiers = getModifierKindFromSource(node, 93 /* ExportKeyword */);
                 var cls = ts.factory.createClassDeclaration(/*decorators*/ undefined, modifiers, node.name, 
                 /*typeParameters*/ undefined, /*heritageClauses*/ undefined, memberElements);
                 // Don't call copyComments here because we'll already leave them in place
@@ -140575,7 +143841,7 @@
                 functionToConvert.decorators ? ts.skipTrivia(sourceFile.text, functionToConvert.decorators.end) :
                     functionToConvert.getStart(sourceFile);
             var options = functionToConvert.modifiers ? { prefix: " " } : { suffix: " " };
-            changes.insertModifierAt(sourceFile, pos, 129 /* AsyncKeyword */, options);
+            changes.insertModifierAt(sourceFile, pos, 130 /* AsyncKeyword */, options);
             var _loop_13 = function (returnStatement) {
                 ts.forEachChild(returnStatement, function visit(node) {
                     if (ts.isCallExpression(node)) {
@@ -140834,9 +144100,9 @@
         function maybeAnnotateAndReturn(expressionToReturn, typeAnnotation) {
             if (typeAnnotation && expressionToReturn) {
                 var name = ts.factory.createUniqueName("result", 16 /* Optimistic */);
-                return __spreadArray(__spreadArray([], createVariableOrAssignmentOrExpressionStatement(createSynthIdentifier(name), expressionToReturn, typeAnnotation)), [
+                return __spreadArray(__spreadArray([], createVariableOrAssignmentOrExpressionStatement(createSynthIdentifier(name), expressionToReturn, typeAnnotation), true), [
                     ts.factory.createReturnStatement(name)
-                ]);
+                ], false);
             }
             return [ts.factory.createReturnStatement(expressionToReturn)];
         }
@@ -140844,11 +144110,11 @@
         function getTransformationBody(func, prevArgName, argName, parent, transformer) {
             var _a, _b, _c, _d, _e;
             switch (func.kind) {
-                case 103 /* NullKeyword */:
+                case 104 /* NullKeyword */:
                     // do not produce a transformed statement for a null argument
                     break;
-                case 202 /* PropertyAccessExpression */:
-                case 78 /* Identifier */: // identifier includes undefined
+                case 204 /* PropertyAccessExpression */:
+                case 79 /* Identifier */: // identifier includes undefined
                     if (!argName) {
                         // undefined was argument passed to promise handler
                         break;
@@ -140869,8 +144135,8 @@
                         prevArgName.types.push(returnType);
                     }
                     return varDeclOrAssignment;
-                case 209 /* FunctionExpression */:
-                case 210 /* ArrowFunction */: {
+                case 211 /* FunctionExpression */:
+                case 212 /* ArrowFunction */: {
                     var funcBody = func.body;
                     var returnType_1 = (_c = getLastCallSignature(transformer.checker.getTypeAtLocation(func), transformer.checker)) === null || _c === void 0 ? void 0 : _c.getReturnType();
                     // Arrow functions with block bodies { } will enter this control flow
@@ -141089,10 +144355,10 @@
                 }
                 var importNode = ts.importFromModuleSpecifier(moduleSpecifier);
                 switch (importNode.kind) {
-                    case 261 /* ImportEqualsDeclaration */:
+                    case 263 /* ImportEqualsDeclaration */:
                         changes.replaceNode(importingFile, importNode, ts.makeImport(importNode.name, /*namedImports*/ undefined, moduleSpecifier, quotePreference));
                         break;
-                    case 204 /* CallExpression */:
+                    case 206 /* CallExpression */:
                         if (ts.isRequireCall(importNode, /*checkArgumentIsStringLiteralLike*/ false)) {
                             changes.replaceNode(importingFile, importNode, ts.factory.createPropertyAccessExpression(ts.getSynthesizedDeepClone(importNode), "default"));
                         }
@@ -141152,29 +144418,29 @@
             sourceFile.forEachChild(function recur(node) {
                 if (ts.isPropertyAccessExpression(node) && ts.isExportsOrModuleExportsOrAlias(sourceFile, node.expression) && ts.isIdentifier(node.name)) {
                     var parent = node.parent;
-                    cb(node, ts.isBinaryExpression(parent) && parent.left === node && parent.operatorToken.kind === 62 /* EqualsToken */);
+                    cb(node, ts.isBinaryExpression(parent) && parent.left === node && parent.operatorToken.kind === 63 /* EqualsToken */);
                 }
                 node.forEachChild(recur);
             });
         }
         function convertStatement(sourceFile, statement, checker, changes, identifiers, target, exports, useSitesToUnqualify, quotePreference) {
             switch (statement.kind) {
-                case 233 /* VariableStatement */:
+                case 235 /* VariableStatement */:
                     convertVariableStatement(sourceFile, statement, changes, checker, identifiers, target, quotePreference);
                     return false;
-                case 234 /* ExpressionStatement */: {
+                case 236 /* ExpressionStatement */: {
                     var expression = statement.expression;
                     switch (expression.kind) {
-                        case 204 /* CallExpression */: {
+                        case 206 /* CallExpression */: {
                             if (ts.isRequireCall(expression, /*checkArgumentIsStringLiteralLike*/ true)) {
                                 // For side-effecting require() call, just make a side-effecting import.
                                 changes.replaceNode(sourceFile, statement, ts.makeImport(/*name*/ undefined, /*namedImports*/ undefined, expression.arguments[0], quotePreference));
                             }
                             return false;
                         }
-                        case 217 /* BinaryExpression */: {
+                        case 219 /* BinaryExpression */: {
                             var operatorToken = expression.operatorToken;
-                            return operatorToken.kind === 62 /* EqualsToken */ && convertAssignment(sourceFile, checker, expression, changes, exports, useSitesToUnqualify);
+                            return operatorToken.kind === 63 /* EqualsToken */ && convertAssignment(sourceFile, checker, expression, changes, exports, useSitesToUnqualify);
                         }
                     }
                 }
@@ -141221,8 +144487,8 @@
         /** Converts `const name = require("moduleSpecifier").propertyName` */
         function convertPropertyAccessImport(name, propertyName, moduleSpecifier, identifiers, quotePreference) {
             switch (name.kind) {
-                case 197 /* ObjectBindingPattern */:
-                case 198 /* ArrayBindingPattern */: {
+                case 199 /* ObjectBindingPattern */:
+                case 200 /* ArrayBindingPattern */: {
                     // `const [a, b] = require("c").d` --> `import { d } from "c"; const [a, b] = d;`
                     var tmp = makeUniqueName(propertyName, identifiers);
                     return convertedImports([
@@ -141230,7 +144496,7 @@
                         makeConst(/*modifiers*/ undefined, name, ts.factory.createIdentifier(tmp)),
                     ]);
                 }
-                case 78 /* Identifier */:
+                case 79 /* Identifier */:
                     // `const a = require("b").c` --> `import { c as a } from "./b";
                     return convertedImports([makeSingleImport(name.text, propertyName, moduleSpecifier, quotePreference)]);
                 default:
@@ -141273,17 +144539,17 @@
         function tryChangeModuleExportsObject(object, useSitesToUnqualify) {
             var statements = ts.mapAllOrFail(object.properties, function (prop) {
                 switch (prop.kind) {
-                    case 168 /* GetAccessor */:
-                    case 169 /* SetAccessor */:
+                    case 170 /* GetAccessor */:
+                    case 171 /* SetAccessor */:
                     // TODO: Maybe we should handle this? See fourslash test `refactorConvertToEs6Module_export_object_shorthand.ts`.
                     // falls through
-                    case 290 /* ShorthandPropertyAssignment */:
-                    case 291 /* SpreadAssignment */:
+                    case 292 /* ShorthandPropertyAssignment */:
+                    case 293 /* SpreadAssignment */:
                         return undefined;
-                    case 289 /* PropertyAssignment */:
+                    case 291 /* PropertyAssignment */:
                         return !ts.isIdentifier(prop.name) ? undefined : convertExportsDotXEquals_replaceNode(prop.name.text, prop.initializer, useSitesToUnqualify);
-                    case 166 /* MethodDeclaration */:
-                        return !ts.isIdentifier(prop.name) ? undefined : functionExpressionToDeclaration(prop.name.text, [ts.factory.createToken(92 /* ExportKeyword */)], prop, useSitesToUnqualify);
+                    case 167 /* MethodDeclaration */:
+                        return !ts.isIdentifier(prop.name) ? undefined : functionExpressionToDeclaration(prop.name.text, [ts.factory.createToken(93 /* ExportKeyword */)], prop, useSitesToUnqualify);
                     default:
                         ts.Debug.assertNever(prop, "Convert to ES6 got invalid prop kind " + prop.kind);
                 }
@@ -141330,7 +144596,7 @@
             var name = left.name.text;
             if ((ts.isFunctionExpression(right) || ts.isArrowFunction(right) || ts.isClassExpression(right)) && (!right.name || right.name.text === name)) {
                 // `exports.f = function() {}` -> `export function f() {}` -- Replace `exports.f = ` with `export `, and insert the name after `function`.
-                changes.replaceRange(sourceFile, { pos: left.getStart(sourceFile), end: right.getStart(sourceFile) }, ts.factory.createToken(92 /* ExportKeyword */), { suffix: " " });
+                changes.replaceRange(sourceFile, { pos: left.getStart(sourceFile), end: right.getStart(sourceFile) }, ts.factory.createToken(93 /* ExportKeyword */), { suffix: " " });
                 if (!right.name)
                     changes.insertName(sourceFile, right, name);
                 var semi = ts.findChildOfKind(parent, 26 /* SemicolonToken */, sourceFile);
@@ -141339,14 +144605,14 @@
             }
             else {
                 // `exports.f = function g() {}` -> `export const f = function g() {}` -- just replace `exports.` with `export const `
-                changes.replaceNodeRangeWithNodes(sourceFile, left.expression, ts.findChildOfKind(left, 24 /* DotToken */, sourceFile), [ts.factory.createToken(92 /* ExportKeyword */), ts.factory.createToken(84 /* ConstKeyword */)], { joiner: " ", suffix: " " });
+                changes.replaceNodeRangeWithNodes(sourceFile, left.expression, ts.findChildOfKind(left, 24 /* DotToken */, sourceFile), [ts.factory.createToken(93 /* ExportKeyword */), ts.factory.createToken(85 /* ConstKeyword */)], { joiner: " ", suffix: " " });
             }
         }
         // TODO: GH#22492 this will cause an error if a change has been made inside the body of the node.
         function convertExportsDotXEquals_replaceNode(name, exported, useSitesToUnqualify) {
-            var modifiers = [ts.factory.createToken(92 /* ExportKeyword */)];
+            var modifiers = [ts.factory.createToken(93 /* ExportKeyword */)];
             switch (exported.kind) {
-                case 209 /* FunctionExpression */: {
+                case 211 /* FunctionExpression */: {
                     var expressionName = exported.name;
                     if (expressionName && expressionName.text !== name) {
                         // `exports.f = function g() {}` -> `export const f = function g() {}`
@@ -141354,10 +144620,10 @@
                     }
                 }
                 // falls through
-                case 210 /* ArrowFunction */:
+                case 212 /* ArrowFunction */:
                     // `exports.f = function() {}` --> `export function f() {}`
                     return functionExpressionToDeclaration(name, modifiers, exported, useSitesToUnqualify);
-                case 222 /* ClassExpression */:
+                case 224 /* ClassExpression */:
                     // `exports.C = class {}` --> `export class C {}`
                     return classExpressionToDeclaration(name, modifiers, exported, useSitesToUnqualify);
                 default:
@@ -141377,7 +144643,7 @@
                 : ts.getSynthesizedDeepCloneWithReplacements(nodeOrNodes, /*includeTrivia*/ true, replaceNode);
             function replaceNode(original) {
                 // We are replacing `mod.SomeExport` wih `SomeExport`, so we only need to look at PropertyAccessExpressions
-                if (original.kind === 202 /* PropertyAccessExpression */) {
+                if (original.kind === 204 /* PropertyAccessExpression */) {
                     var replacement = useSitesToUnqualify.get(original);
                     // Remove entry from `useSitesToUnqualify` so the refactor knows it's taken care of by the parent statement we're replacing
                     useSitesToUnqualify.delete(original);
@@ -141392,7 +144658,7 @@
          */
         function convertSingleImport(name, moduleSpecifier, checker, identifiers, target, quotePreference) {
             switch (name.kind) {
-                case 197 /* ObjectBindingPattern */: {
+                case 199 /* ObjectBindingPattern */: {
                     var importSpecifiers = ts.mapAllOrFail(name.elements, function (e) {
                         return e.dotDotDotToken || e.initializer || e.propertyName && !ts.isIdentifier(e.propertyName) || !ts.isIdentifier(e.name)
                             ? undefined
@@ -141405,7 +144671,7 @@
                     }
                 }
                 // falls through -- object destructuring has an interesting pattern and must be a variable declaration
-                case 198 /* ArrayBindingPattern */: {
+                case 200 /* ArrayBindingPattern */: {
                     /*
                     import x from "x";
                     const [a, b, c] = x;
@@ -141416,7 +144682,7 @@
                         makeConst(/*modifiers*/ undefined, ts.getSynthesizedDeepClone(name), ts.factory.createIdentifier(tmp)),
                     ]);
                 }
-                case 78 /* Identifier */:
+                case 79 /* Identifier */:
                     return convertSingleIdentifierImport(name, moduleSpecifier, checker, identifiers, quotePreference);
                 default:
                     return ts.Debug.assertNever(name, "Convert to ES6 module got invalid name kind " + name.kind);
@@ -141498,11 +144764,11 @@
         function isFreeIdentifier(node) {
             var parent = node.parent;
             switch (parent.kind) {
-                case 202 /* PropertyAccessExpression */:
+                case 204 /* PropertyAccessExpression */:
                     return parent.name !== node;
-                case 199 /* BindingElement */:
+                case 201 /* BindingElement */:
                     return parent.propertyName !== node;
-                case 266 /* ImportSpecifier */:
+                case 268 /* ImportSpecifier */:
                     return parent.propertyName !== node;
                 default:
                     return true;
@@ -141616,7 +144882,7 @@
             var exportDeclaration = exportClause.parent;
             var typeExportSpecifiers = getTypeExportSpecifiers(exportSpecifier, context);
             if (typeExportSpecifiers.length === exportClause.elements.length) {
-                changes.insertModifierBefore(context.sourceFile, 149 /* TypeKeyword */, exportClause);
+                changes.insertModifierBefore(context.sourceFile, 150 /* TypeKeyword */, exportClause);
             }
             else {
                 var valueExportDeclaration = ts.factory.updateExportDeclaration(exportDeclaration, exportDeclaration.decorators, exportDeclaration.modifiers, 
@@ -141802,7 +145068,7 @@
             function createMissingIndexSignatureDeclaration(type, kind) {
                 var indexInfoOfKind = checker.getIndexInfoOfType(type, kind);
                 if (indexInfoOfKind) {
-                    insertInterfaceMemberNode(sourceFile, classDeclaration, checker.indexInfoToIndexSignatureDeclaration(indexInfoOfKind, kind, classDeclaration, /*flags*/ undefined, codefix.getNoopSymbolTrackerWithResolver(context)));
+                    insertInterfaceMemberNode(sourceFile, classDeclaration, checker.indexInfoToIndexSignatureDeclaration(indexInfoOfKind, classDeclaration, /*flags*/ undefined, codefix.getNoopSymbolTrackerWithResolver(context)));
                 }
             }
             // Either adds the node at the top of the class, or if there's a constructor right after that
@@ -141840,6 +145106,7 @@
             ts.Diagnostics.Cannot_find_namespace_0.code,
             ts.Diagnostics._0_refers_to_a_UMD_global_but_the_current_file_is_a_module_Consider_adding_an_import_instead.code,
             ts.Diagnostics._0_only_refers_to_a_type_but_is_being_used_as_a_value_here.code,
+            ts.Diagnostics.No_value_exists_in_scope_for_the_shorthand_property_0_Either_declare_one_or_provide_an_initializer.code
         ];
         codefix.registerCodeFix({
             errorCodes: errorCodes,
@@ -141884,11 +145151,13 @@
                 var symbolName = ts.getNameForExportedSymbol(exportedSymbol, ts.getEmitScriptTarget(compilerOptions));
                 var checker = program.getTypeChecker();
                 var symbol = checker.getMergedSymbol(ts.skipAlias(exportedSymbol, checker));
-                var exportInfos = getAllReExportingModules(sourceFile, symbol, moduleSymbol, symbolName, host, program, useAutoImportProvider);
+                var exportInfos = getAllReExportingModules(sourceFile, symbol, moduleSymbol, symbolName, host, program, preferences, useAutoImportProvider);
                 var preferTypeOnlyImport = !!usageIsTypeOnly && compilerOptions.importsNotUsedAsValues === 2 /* Error */;
                 var useRequire = shouldUseRequire(sourceFile, program);
                 var fix = getImportFixForSymbol(sourceFile, exportInfos, moduleSymbol, symbolName, program, /*position*/ undefined, preferTypeOnlyImport, useRequire, host, preferences);
-                addImport({ fixes: [fix], symbolName: symbolName });
+                if (fix) {
+                    addImport({ fixes: [fix], symbolName: symbolName });
+                }
             }
             function addImport(info) {
                 var fixes = info.fixes, symbolName = info.symbolName;
@@ -141983,16 +145252,16 @@
             var compilerOptions = program.getCompilerOptions();
             var exportInfos = ts.pathIsBareSpecifier(ts.stripQuotes(moduleSymbol.name))
                 ? [getSymbolExportInfoForSymbol(exportedSymbol, moduleSymbol, program, host)]
-                : getAllReExportingModules(sourceFile, exportedSymbol, moduleSymbol, symbolName, host, program, /*useAutoImportProvider*/ true);
+                : getAllReExportingModules(sourceFile, exportedSymbol, moduleSymbol, symbolName, host, program, preferences, /*useAutoImportProvider*/ true);
             var useRequire = shouldUseRequire(sourceFile, program);
             var preferTypeOnlyImport = compilerOptions.importsNotUsedAsValues === 2 /* Error */ && !ts.isSourceFileJS(sourceFile) && ts.isValidTypeOnlyAliasUseSite(ts.getTokenAtPosition(sourceFile, position));
-            var fix = getImportFixForSymbol(sourceFile, exportInfos, moduleSymbol, symbolName, program, position, preferTypeOnlyImport, useRequire, host, preferences);
+            var fix = ts.Debug.checkDefined(getImportFixForSymbol(sourceFile, exportInfos, moduleSymbol, symbolName, program, position, preferTypeOnlyImport, useRequire, host, preferences));
             return { moduleSpecifier: fix.moduleSpecifier, codeAction: codeFixActionToCodeAction(codeActionForFix({ host: host, formatContext: formatContext, preferences: preferences }, sourceFile, symbolName, fix, ts.getQuotePreference(sourceFile, preferences))) };
         }
         codefix.getImportCompletionAction = getImportCompletionAction;
         function getImportFixForSymbol(sourceFile, exportInfos, moduleSymbol, symbolName, program, position, preferTypeOnlyImport, useRequire, host, preferences) {
-            ts.Debug.assert(exportInfos.some(function (info) { return info.moduleSymbol === moduleSymbol; }), "Some exportInfo should match the specified moduleSymbol");
-            return getBestFix(getImportFixes(exportInfos, symbolName, position, preferTypeOnlyImport, useRequire, program, sourceFile, host, preferences), sourceFile, host);
+            ts.Debug.assert(exportInfos.some(function (info) { return info.moduleSymbol === moduleSymbol || info.symbol.parent === moduleSymbol; }), "Some exportInfo should match the specified moduleSymbol");
+            return getBestFix(getImportFixes(exportInfos, symbolName, position, preferTypeOnlyImport, useRequire, program, sourceFile, host, preferences), sourceFile, program, host, preferences);
         }
         function codeFixActionToCodeAction(_a) {
             var description = _a.description, changes = _a.changes, commands = _a.commands;
@@ -142008,101 +145277,54 @@
             var autoImportProvider = (_b = (_a = host.getPackageJsonAutoImportProvider) === null || _a === void 0 ? void 0 : _a.call(host)) === null || _b === void 0 ? void 0 : _b.getTypeChecker();
             return ts.Debug.checkDefined(autoImportProvider && getInfoWithChecker(autoImportProvider, /*isFromPackageJson*/ true), "Could not find symbol in specified module for code actions");
             function getInfoWithChecker(checker, isFromPackageJson) {
-                var defaultInfo = getDefaultLikeExportInfo(moduleSymbol, checker, compilerOptions);
+                var defaultInfo = ts.getDefaultLikeExportInfo(moduleSymbol, checker, compilerOptions);
                 if (defaultInfo && ts.skipAlias(defaultInfo.symbol, checker) === symbol) {
-                    return { symbol: defaultInfo.symbol, moduleSymbol: moduleSymbol, exportKind: defaultInfo.exportKind, exportedSymbolIsTypeOnly: isTypeOnlySymbol(symbol, checker), isFromPackageJson: isFromPackageJson };
+                    return { symbol: defaultInfo.symbol, moduleSymbol: moduleSymbol, moduleFileName: undefined, exportKind: defaultInfo.exportKind, targetFlags: ts.skipAlias(symbol, checker).flags, isFromPackageJson: isFromPackageJson };
                 }
                 var named = checker.tryGetMemberInModuleExportsAndProperties(symbol.name, moduleSymbol);
                 if (named && ts.skipAlias(named, checker) === symbol) {
-                    return { symbol: named, moduleSymbol: moduleSymbol, exportKind: 0 /* Named */, exportedSymbolIsTypeOnly: isTypeOnlySymbol(symbol, checker), isFromPackageJson: isFromPackageJson };
+                    return { symbol: named, moduleSymbol: moduleSymbol, moduleFileName: undefined, exportKind: 0 /* Named */, targetFlags: ts.skipAlias(symbol, checker).flags, isFromPackageJson: isFromPackageJson };
                 }
             }
         }
-        function getAllReExportingModules(importingFile, exportedSymbol, exportingModuleSymbol, symbolName, host, program, useAutoImportProvider) {
+        function getAllReExportingModules(importingFile, exportedSymbol, exportingModuleSymbol, symbolName, host, program, preferences, useAutoImportProvider) {
             var result = [];
             var compilerOptions = program.getCompilerOptions();
             var getModuleSpecifierResolutionHost = ts.memoizeOne(function (isFromPackageJson) {
                 return ts.createModuleSpecifierResolutionHost(isFromPackageJson ? host.getPackageJsonAutoImportProvider() : program, host);
             });
-            forEachExternalModuleToImportFrom(program, host, useAutoImportProvider, function (moduleSymbol, moduleFile, program, isFromPackageJson) {
+            ts.forEachExternalModuleToImportFrom(program, host, useAutoImportProvider, function (moduleSymbol, moduleFile, program, isFromPackageJson) {
                 var checker = program.getTypeChecker();
                 // Don't import from a re-export when looking "up" like to `./index` or `../index`.
                 if (moduleFile && moduleSymbol !== exportingModuleSymbol && ts.startsWith(importingFile.fileName, ts.getDirectoryPath(moduleFile.fileName))) {
                     return;
                 }
-                var defaultInfo = getDefaultLikeExportInfo(moduleSymbol, checker, compilerOptions);
+                var defaultInfo = ts.getDefaultLikeExportInfo(moduleSymbol, checker, compilerOptions);
                 if (defaultInfo && (defaultInfo.name === symbolName || moduleSymbolToValidIdentifier(moduleSymbol, compilerOptions.target) === symbolName) && ts.skipAlias(defaultInfo.symbol, checker) === exportedSymbol && isImportable(program, moduleFile, isFromPackageJson)) {
-                    result.push({ symbol: defaultInfo.symbol, moduleSymbol: moduleSymbol, exportKind: defaultInfo.exportKind, exportedSymbolIsTypeOnly: isTypeOnlySymbol(defaultInfo.symbol, checker), isFromPackageJson: isFromPackageJson });
+                    result.push({ symbol: defaultInfo.symbol, moduleSymbol: moduleSymbol, moduleFileName: moduleFile === null || moduleFile === void 0 ? void 0 : moduleFile.fileName, exportKind: defaultInfo.exportKind, targetFlags: ts.skipAlias(defaultInfo.symbol, checker).flags, isFromPackageJson: isFromPackageJson });
                 }
                 for (var _i = 0, _a = checker.getExportsAndPropertiesOfModule(moduleSymbol); _i < _a.length; _i++) {
                     var exported = _a[_i];
                     if (exported.name === symbolName && ts.skipAlias(exported, checker) === exportedSymbol && isImportable(program, moduleFile, isFromPackageJson)) {
-                        result.push({ symbol: exported, moduleSymbol: moduleSymbol, exportKind: 0 /* Named */, exportedSymbolIsTypeOnly: isTypeOnlySymbol(exported, checker), isFromPackageJson: isFromPackageJson });
+                        result.push({ symbol: exported, moduleSymbol: moduleSymbol, moduleFileName: moduleFile === null || moduleFile === void 0 ? void 0 : moduleFile.fileName, exportKind: 0 /* Named */, targetFlags: ts.skipAlias(exported, checker).flags, isFromPackageJson: isFromPackageJson });
                     }
                 }
             });
             return result;
             function isImportable(program, moduleFile, isFromPackageJson) {
                 var _a;
-                return !moduleFile || ts.isImportableFile(program, importingFile, moduleFile, /*packageJsonFilter*/ undefined, getModuleSpecifierResolutionHost(isFromPackageJson), (_a = host.getModuleSpecifierCache) === null || _a === void 0 ? void 0 : _a.call(host));
+                return !moduleFile || ts.isImportableFile(program, importingFile, moduleFile, preferences, /*packageJsonFilter*/ undefined, getModuleSpecifierResolutionHost(isFromPackageJson), (_a = host.getModuleSpecifierCache) === null || _a === void 0 ? void 0 : _a.call(host));
             }
         }
-        function getModuleSpecifierForBestExportInfo(exportInfo, importingFile, program, host, preferences) {
-            return getBestFix(getNewImportFixes(program, importingFile, /*position*/ undefined, /*preferTypeOnlyImport*/ false, /*useRequire*/ false, exportInfo, host, preferences), importingFile, host);
+        function getModuleSpecifierForBestExportInfo(exportInfo, importingFile, program, host, preferences, fromCacheOnly) {
+            var _a = getNewImportFixes(program, importingFile, 
+            /*position*/ undefined, 
+            /*preferTypeOnlyImport*/ false, 
+            /*useRequire*/ false, exportInfo, host, preferences, fromCacheOnly), fixes = _a.fixes, computedWithoutCacheCount = _a.computedWithoutCacheCount;
+            var result = getBestFix(fixes, importingFile, program, host, preferences);
+            return result && __assign(__assign({}, result), { computedWithoutCacheCount: computedWithoutCacheCount });
         }
         codefix.getModuleSpecifierForBestExportInfo = getModuleSpecifierForBestExportInfo;
-        function getSymbolToExportInfoMap(importingFile, host, program) {
-            var _a, _b, _c, _d, _e, _f, _g, _h;
-            var start = ts.timestamp();
-            // Pulling the AutoImportProvider project will trigger its updateGraph if pending,
-            // which will invalidate the export map cache if things change, so pull it before
-            // checking the cache.
-            (_a = host.getPackageJsonAutoImportProvider) === null || _a === void 0 ? void 0 : _a.call(host);
-            var cache = (_b = host.getExportMapCache) === null || _b === void 0 ? void 0 : _b.call(host);
-            if (cache) {
-                var cached = cache.get(importingFile.path, program.getTypeChecker(), (_c = host.getProjectVersion) === null || _c === void 0 ? void 0 : _c.call(host));
-                if (cached) {
-                    (_d = host.log) === null || _d === void 0 ? void 0 : _d.call(host, "getSymbolToExportInfoMap: cache hit");
-                    return cached;
-                }
-                else {
-                    (_e = host.log) === null || _e === void 0 ? void 0 : _e.call(host, "getSymbolToExportInfoMap: cache miss or empty; calculating new results");
-                }
-            }
-            var result = ts.createMultiMap();
-            var compilerOptions = program.getCompilerOptions();
-            var target = ts.getEmitScriptTarget(compilerOptions);
-            forEachExternalModuleToImportFrom(program, host, /*useAutoImportProvider*/ true, function (moduleSymbol, _moduleFile, program, isFromPackageJson) {
-                var checker = program.getTypeChecker();
-                var defaultInfo = getDefaultLikeExportInfo(moduleSymbol, checker, compilerOptions);
-                if (defaultInfo) {
-                    var name = ts.getNameForExportedSymbol(ts.getLocalSymbolForExportDefault(defaultInfo.symbol) || defaultInfo.symbol, target);
-                    result.add(key(name, defaultInfo.symbol, moduleSymbol, checker), { symbol: defaultInfo.symbol, moduleSymbol: moduleSymbol, exportKind: defaultInfo.exportKind, exportedSymbolIsTypeOnly: isTypeOnlySymbol(defaultInfo.symbol, checker), isFromPackageJson: isFromPackageJson });
-                }
-                var seenExports = new ts.Map();
-                for (var _i = 0, _a = checker.getExportsAndPropertiesOfModule(moduleSymbol); _i < _a.length; _i++) {
-                    var exported = _a[_i];
-                    if (exported !== (defaultInfo === null || defaultInfo === void 0 ? void 0 : defaultInfo.symbol) && ts.addToSeen(seenExports, exported)) {
-                        result.add(key(ts.getNameForExportedSymbol(exported, target), exported, moduleSymbol, checker), { symbol: exported, moduleSymbol: moduleSymbol, exportKind: 0 /* Named */, exportedSymbolIsTypeOnly: isTypeOnlySymbol(exported, checker), isFromPackageJson: isFromPackageJson });
-                    }
-                }
-            });
-            if (cache) {
-                (_f = host.log) === null || _f === void 0 ? void 0 : _f.call(host, "getSymbolToExportInfoMap: caching results");
-                cache.set(result, (_g = host.getProjectVersion) === null || _g === void 0 ? void 0 : _g.call(host));
-            }
-            (_h = host.log) === null || _h === void 0 ? void 0 : _h.call(host, "getSymbolToExportInfoMap: done in " + (ts.timestamp() - start) + " ms");
-            return result;
-            function key(name, alias, moduleSymbol, checker) {
-                var moduleName = ts.stripQuotes(moduleSymbol.name);
-                var moduleKey = ts.isExternalModuleNameRelative(moduleName) ? "/" : moduleName;
-                return name + "|" + ts.getSymbolId(ts.skipAlias(alias, checker)) + "|" + moduleKey;
-            }
-        }
-        codefix.getSymbolToExportInfoMap = getSymbolToExportInfoMap;
-        function isTypeOnlySymbol(s, checker) {
-            return !(ts.skipAlias(s, checker).flags & 111551 /* Value */);
-        }
         function isTypeOnlyPosition(sourceFile, position) {
             return ts.isValidTypeOnlyAliasUseSite(ts.getTokenAtPosition(sourceFile, position));
         }
@@ -142115,7 +145337,7 @@
             var addToExisting = tryAddToExistingImport(existingImports, position !== undefined && isTypeOnlyPosition(sourceFile, position));
             // Don't bother providing an action to add a new import if we can add to an existing one.
             var addImport = addToExisting ? [addToExisting] : getFixesForAddImport(exportInfos, existingImports, program, sourceFile, position, preferTypeOnlyImport, useRequire, host, preferences);
-            return __spreadArray(__spreadArray([], (useNamespace ? [useNamespace] : ts.emptyArray)), addImport);
+            return __spreadArray(__spreadArray([], (useNamespace ? [useNamespace] : ts.emptyArray), true), addImport, true);
         }
         function tryUseExistingNamespaceImport(existingImports, symbolName, position, checker) {
             // It is possible that multiple import statements with the same specifier exist in the file.
@@ -142145,11 +145367,11 @@
         function getTargetModuleFromNamespaceLikeImport(declaration, checker) {
             var _a;
             switch (declaration.kind) {
-                case 250 /* VariableDeclaration */:
+                case 252 /* VariableDeclaration */:
                     return checker.resolveExternalModuleName(declaration.initializer.arguments[0]);
-                case 261 /* ImportEqualsDeclaration */:
+                case 263 /* ImportEqualsDeclaration */:
                     return checker.getAliasedSymbol(declaration.symbol);
-                case 262 /* ImportDeclaration */:
+                case 264 /* ImportDeclaration */:
                     var namespaceImport = ts.tryCast((_a = declaration.importClause) === null || _a === void 0 ? void 0 : _a.namedBindings, ts.isNamespaceImport);
                     return namespaceImport && checker.getAliasedSymbol(namespaceImport.symbol);
                 default:
@@ -142159,11 +145381,11 @@
         function getNamespaceLikeImportText(declaration) {
             var _a, _b, _c;
             switch (declaration.kind) {
-                case 250 /* VariableDeclaration */:
+                case 252 /* VariableDeclaration */:
                     return (_a = ts.tryCast(declaration.name, ts.isIdentifier)) === null || _a === void 0 ? void 0 : _a.text;
-                case 261 /* ImportEqualsDeclaration */:
+                case 263 /* ImportEqualsDeclaration */:
                     return declaration.name.text;
-                case 262 /* ImportDeclaration */:
+                case 264 /* ImportDeclaration */:
                     return (_c = ts.tryCast((_b = declaration.importClause) === null || _b === void 0 ? void 0 : _b.namedBindings, ts.isNamespaceImport)) === null || _c === void 0 ? void 0 : _c.name.text;
                 default:
                     return ts.Debug.assertNever(declaration);
@@ -142172,10 +145394,10 @@
         function tryAddToExistingImport(existingImports, canUseTypeOnlyImport) {
             return ts.firstDefined(existingImports, function (_a) {
                 var declaration = _a.declaration, importKind = _a.importKind;
-                if (declaration.kind === 261 /* ImportEqualsDeclaration */)
+                if (declaration.kind === 263 /* ImportEqualsDeclaration */)
                     return undefined;
-                if (declaration.kind === 250 /* VariableDeclaration */) {
-                    return (importKind === 0 /* Named */ || importKind === 1 /* Default */) && declaration.name.kind === 197 /* ObjectBindingPattern */
+                if (declaration.kind === 252 /* VariableDeclaration */) {
+                    return (importKind === 0 /* Named */ || importKind === 1 /* Default */) && declaration.name.kind === 199 /* ObjectBindingPattern */
                         ? { kind: 2 /* AddToExisting */, importClauseOrBindingPattern: declaration.name, importKind: importKind, moduleSpecifier: declaration.initializer.arguments[0].text, canUseTypeOnlyImport: false }
                         : undefined;
                 }
@@ -142187,15 +145409,15 @@
                 // be added to an existing type-only import is adding a named import to existing named bindings.
                 if (importClause.isTypeOnly && !(importKind === 0 /* Named */ && namedBindings))
                     return undefined;
-                return importKind === 1 /* Default */ && !name || importKind === 0 /* Named */ && (!namedBindings || namedBindings.kind === 265 /* NamedImports */)
+                return importKind === 1 /* Default */ && !name || importKind === 0 /* Named */ && (!namedBindings || namedBindings.kind === 267 /* NamedImports */)
                     ? { kind: 2 /* AddToExisting */, importClauseOrBindingPattern: importClause, importKind: importKind, moduleSpecifier: declaration.moduleSpecifier.text, canUseTypeOnlyImport: canUseTypeOnlyImport }
                     : undefined;
             });
         }
         function getExistingImportDeclarations(_a, checker, importingFile, compilerOptions) {
-            var moduleSymbol = _a.moduleSymbol, exportKind = _a.exportKind, exportedSymbolIsTypeOnly = _a.exportedSymbolIsTypeOnly;
+            var moduleSymbol = _a.moduleSymbol, exportKind = _a.exportKind, targetFlags = _a.targetFlags;
             // Can't use an es6 import for a type in JS.
-            if (exportedSymbolIsTypeOnly && ts.isSourceFileJS(importingFile))
+            if (!(targetFlags & 111551 /* Value */) && ts.isSourceFileJS(importingFile))
                 return ts.emptyArray;
             var importKind = getImportKind(importingFile, exportKind, compilerOptions);
             return ts.mapDefined(importingFile.imports, function (moduleSpecifier) {
@@ -142203,7 +145425,7 @@
                 if (ts.isRequireVariableDeclaration(i.parent)) {
                     return checker.resolveExternalModuleName(moduleSpecifier) === moduleSymbol ? { declaration: i.parent, importKind: importKind } : undefined;
                 }
-                if (i.kind === 262 /* ImportDeclaration */ || i.kind === 261 /* ImportEqualsDeclaration */) {
+                if (i.kind === 264 /* ImportDeclaration */ || i.kind === 263 /* ImportEqualsDeclaration */) {
                     return checker.getSymbolAtLocation(moduleSpecifier) === moduleSymbol ? { declaration: i, importKind: importKind } : undefined;
                 }
             });
@@ -142236,23 +145458,37 @@
             // 5. Literally nothing to go on
             return true;
         }
-        function getNewImportFixes(program, sourceFile, position, preferTypeOnlyImport, useRequire, moduleSymbols, host, preferences) {
+        function getNewImportFixes(program, sourceFile, position, preferTypeOnlyImport, useRequire, moduleSymbols, host, preferences, fromCacheOnly) {
             var isJs = ts.isSourceFileJS(sourceFile);
             var compilerOptions = program.getCompilerOptions();
             var moduleSpecifierResolutionHost = ts.createModuleSpecifierResolutionHost(program, host);
-            return ts.flatMap(moduleSymbols, function (exportInfo) {
-                return ts.moduleSpecifiers.getModuleSpecifiers(exportInfo.moduleSymbol, program.getTypeChecker(), compilerOptions, sourceFile, moduleSpecifierResolutionHost, preferences)
-                    .map(function (moduleSpecifier) {
+            var checker = program.getTypeChecker();
+            var getModuleSpecifiers = fromCacheOnly
+                ? function (moduleSymbol) { return ({ moduleSpecifiers: ts.moduleSpecifiers.tryGetModuleSpecifiersFromCache(moduleSymbol, sourceFile, moduleSpecifierResolutionHost, preferences), computedWithoutCache: false }); }
+                : function (moduleSymbol) { return ts.moduleSpecifiers.getModuleSpecifiersWithCacheInfo(moduleSymbol, checker, compilerOptions, sourceFile, moduleSpecifierResolutionHost, preferences); };
+            var computedWithoutCacheCount = 0;
+            var fixes = ts.flatMap(moduleSymbols, function (exportInfo) {
+                var _a = getModuleSpecifiers(exportInfo.moduleSymbol), computedWithoutCache = _a.computedWithoutCache, moduleSpecifiers = _a.moduleSpecifiers;
+                computedWithoutCacheCount += computedWithoutCache ? 1 : 0;
+                return moduleSpecifiers === null || moduleSpecifiers === void 0 ? void 0 : moduleSpecifiers.map(function (moduleSpecifier) {
                     // `position` should only be undefined at a missing jsx namespace, in which case we shouldn't be looking for pure types.
-                    return exportInfo.exportedSymbolIsTypeOnly && isJs && position !== undefined
+                    return !(exportInfo.targetFlags & 111551 /* Value */) && isJs && position !== undefined
                         ? { kind: 1 /* ImportType */, moduleSpecifier: moduleSpecifier, position: position, exportInfo: exportInfo }
-                        : { kind: 3 /* AddNew */, moduleSpecifier: moduleSpecifier, importKind: getImportKind(sourceFile, exportInfo.exportKind, compilerOptions), useRequire: useRequire, typeOnly: preferTypeOnlyImport, exportInfo: exportInfo };
+                        : {
+                            kind: 3 /* AddNew */,
+                            moduleSpecifier: moduleSpecifier,
+                            importKind: getImportKind(sourceFile, exportInfo.exportKind, compilerOptions),
+                            useRequire: useRequire,
+                            typeOnly: preferTypeOnlyImport,
+                            exportInfo: exportInfo,
+                        };
                 });
             });
+            return { computedWithoutCacheCount: computedWithoutCacheCount, fixes: fixes };
         }
         function getFixesForAddImport(exportInfos, existingImports, program, sourceFile, position, preferTypeOnlyImport, useRequire, host, preferences) {
             var existingDeclaration = ts.firstDefined(existingImports, function (info) { return newImportInfoFromExistingSpecifier(info, preferTypeOnlyImport, useRequire); });
-            return existingDeclaration ? [existingDeclaration] : getNewImportFixes(program, sourceFile, position, preferTypeOnlyImport, useRequire, exportInfos, host, preferences);
+            return existingDeclaration ? [existingDeclaration] : getNewImportFixes(program, sourceFile, position, preferTypeOnlyImport, useRequire, exportInfos, host, preferences).fixes;
         }
         function newImportInfoFromExistingSpecifier(_a, preferTypeOnlyImport, useRequire) {
             var declaration = _a.declaration, importKind = _a.importKind;
@@ -142266,29 +145502,39 @@
             var info = errorCode === ts.Diagnostics._0_refers_to_a_UMD_global_but_the_current_file_is_a_module_Consider_adding_an_import_instead.code
                 ? getFixesInfoForUMDImport(context, symbolToken)
                 : ts.isIdentifier(symbolToken) ? getFixesInfoForNonUMDImport(context, symbolToken, useAutoImportProvider) : undefined;
-            return info && __assign(__assign({}, info), { fixes: sortFixes(info.fixes, context.sourceFile, context.host) });
+            return info && __assign(__assign({}, info), { fixes: sortFixes(info.fixes, context.sourceFile, context.program, context.host, context.preferences) });
         }
-        function sortFixes(fixes, sourceFile, host) {
-            var allowsImportingSpecifier = ts.createPackageJsonImportFilter(sourceFile, host).allowsImportingSpecifier;
-            return ts.sort(fixes, function (a, b) { return ts.compareValues(a.kind, b.kind) || compareModuleSpecifiers(a, b, allowsImportingSpecifier); });
+        function sortFixes(fixes, sourceFile, program, host, preferences) {
+            var allowsImportingSpecifier = ts.createPackageJsonImportFilter(sourceFile, preferences, host).allowsImportingSpecifier;
+            return ts.sort(fixes, function (a, b) { return ts.compareValues(a.kind, b.kind) || compareModuleSpecifiers(a, b, sourceFile, program, allowsImportingSpecifier); });
         }
-        function getBestFix(fixes, sourceFile, host) {
+        function getBestFix(fixes, sourceFile, program, host, preferences) {
+            if (!ts.some(fixes))
+                return;
             // These will always be placed first if available, and are better than other kinds
             if (fixes[0].kind === 0 /* UseNamespace */ || fixes[0].kind === 2 /* AddToExisting */) {
                 return fixes[0];
             }
-            var allowsImportingSpecifier = ts.createPackageJsonImportFilter(sourceFile, host).allowsImportingSpecifier;
+            var allowsImportingSpecifier = ts.createPackageJsonImportFilter(sourceFile, preferences, host).allowsImportingSpecifier;
             return fixes.reduce(function (best, fix) {
-                return compareModuleSpecifiers(fix, best, allowsImportingSpecifier) === -1 /* LessThan */ ? fix : best;
+                return compareModuleSpecifiers(fix, best, sourceFile, program, allowsImportingSpecifier) === -1 /* LessThan */ ? fix : best;
             });
         }
-        function compareModuleSpecifiers(a, b, allowsImportingSpecifier) {
+        function compareModuleSpecifiers(a, b, importingFile, program, allowsImportingSpecifier) {
             if (a.kind !== 0 /* UseNamespace */ && b.kind !== 0 /* UseNamespace */) {
                 return ts.compareBooleans(allowsImportingSpecifier(a.moduleSpecifier), allowsImportingSpecifier(b.moduleSpecifier))
+                    || compareNodeCoreModuleSpecifiers(a.moduleSpecifier, b.moduleSpecifier, importingFile, program)
                     || ts.compareNumberOfDirectorySeparators(a.moduleSpecifier, b.moduleSpecifier);
             }
             return 0 /* EqualTo */;
         }
+        function compareNodeCoreModuleSpecifiers(a, b, importingFile, program) {
+            if (ts.startsWith(a, "node:") && !ts.startsWith(b, "node:"))
+                return ts.shouldUseUriStyleNodeCoreModules(importingFile, program) ? -1 /* LessThan */ : 1 /* GreaterThan */;
+            if (ts.startsWith(b, "node:") && !ts.startsWith(a, "node:"))
+                return ts.shouldUseUriStyleNodeCoreModules(importingFile, program) ? 1 /* GreaterThan */ : -1 /* LessThan */;
+            return 0 /* EqualTo */;
+        }
         function getFixesInfoForUMDImport(_a, token) {
             var sourceFile = _a.sourceFile, program = _a.program, host = _a.host, preferences = _a.preferences;
             var checker = program.getTypeChecker();
@@ -142297,7 +145543,7 @@
                 return undefined;
             var symbol = checker.getAliasedSymbol(umdSymbol);
             var symbolName = umdSymbol.name;
-            var exportInfos = [{ symbol: umdSymbol, moduleSymbol: symbol, exportKind: 3 /* UMD */, exportedSymbolIsTypeOnly: false, isFromPackageJson: false }];
+            var exportInfos = [{ symbol: umdSymbol, moduleSymbol: symbol, moduleFileName: undefined, exportKind: 3 /* UMD */, targetFlags: symbol.flags, isFromPackageJson: false }];
             var useRequire = shouldUseRequire(sourceFile, program);
             var fixes = getImportFixes(exportInfos, symbolName, ts.isIdentifier(token) ? token.getStart(sourceFile) : undefined, /*preferTypeOnlyImport*/ false, useRequire, program, sourceFile, host, preferences);
             return { fixes: fixes, symbolName: symbolName };
@@ -142313,17 +145559,21 @@
                 ? ts.tryCast(checker.resolveName(checker.getJsxNamespace(parent), ts.isJsxOpeningLikeElement(parent) ? token : parent, 111551 /* Value */, /*excludeGlobals*/ false), ts.isUMDExportSymbol)
                 : undefined;
         }
-        function getImportKind(importingFile, exportKind, compilerOptions) {
+        /**
+         * @param forceImportKeyword Indicates that the user has already typed `import`, so the result must start with `import`.
+         * (In other words, do not allow `const x = require("...")` for JS files.)
+         */
+        function getImportKind(importingFile, exportKind, compilerOptions, forceImportKeyword) {
             switch (exportKind) {
                 case 0 /* Named */: return 0 /* Named */;
                 case 1 /* Default */: return 1 /* Default */;
-                case 2 /* ExportEquals */: return getExportEqualsImportKind(importingFile, compilerOptions);
-                case 3 /* UMD */: return getUmdImportKind(importingFile, compilerOptions);
+                case 2 /* ExportEquals */: return getExportEqualsImportKind(importingFile, compilerOptions, !!forceImportKeyword);
+                case 3 /* UMD */: return getUmdImportKind(importingFile, compilerOptions, !!forceImportKeyword);
                 default: return ts.Debug.assertNever(exportKind);
             }
         }
         codefix.getImportKind = getImportKind;
-        function getUmdImportKind(importingFile, compilerOptions) {
+        function getUmdImportKind(importingFile, compilerOptions, forceImportKeyword) {
             // Import a synthetic `default` if enabled.
             if (ts.getAllowSyntheticDefaultImports(compilerOptions)) {
                 return 1 /* Default */;
@@ -142335,7 +145585,7 @@
                 case ts.ModuleKind.CommonJS:
                 case ts.ModuleKind.UMD:
                     if (ts.isInJSFile(importingFile)) {
-                        return ts.isExternalModule(importingFile) ? 2 /* Namespace */ : 3 /* CommonJS */;
+                        return ts.isExternalModule(importingFile) || forceImportKeyword ? 2 /* Namespace */ : 3 /* CommonJS */;
                     }
                     return 3 /* CommonJS */;
                 case ts.ModuleKind.System:
@@ -142358,7 +145608,7 @@
             ts.Debug.assert(symbolName !== "default" /* Default */, "'default' isn't a legal identifier and couldn't occur here");
             var preferTypeOnlyImport = compilerOptions.importsNotUsedAsValues === 2 /* Error */ && ts.isValidTypeOnlyAliasUseSite(symbolToken);
             var useRequire = shouldUseRequire(sourceFile, program);
-            var exportInfos = getExportInfos(symbolName, ts.getMeaningFromLocation(symbolToken), cancellationToken, sourceFile, program, useAutoImportProvider, host);
+            var exportInfos = getExportInfos(symbolName, ts.getMeaningFromLocation(symbolToken), cancellationToken, sourceFile, program, useAutoImportProvider, host, preferences);
             var fixes = ts.arrayFrom(ts.flatMapIterator(exportInfos.entries(), function (_a) {
                 var _ = _a[0], exportInfos = _a[1];
                 return getImportFixes(exportInfos, symbolName, symbolToken.getStart(sourceFile), preferTypeOnlyImport, useRequire, program, sourceFile, host, preferences);
@@ -142376,29 +145626,29 @@
             return symbolToken.text;
         }
         // Returns a map from an exported symbol's ID to a list of every way it's (re-)exported.
-        function getExportInfos(symbolName, currentTokenMeaning, cancellationToken, fromFile, program, useAutoImportProvider, host) {
+        function getExportInfos(symbolName, currentTokenMeaning, cancellationToken, fromFile, program, useAutoImportProvider, host, preferences) {
             var _a;
             // For each original symbol, keep all re-exports of that symbol together so we can call `getCodeActionsForImport` on the whole group at once.
             // Maps symbol id to info for modules providing that symbol (original export + re-exports).
             var originalSymbolToExportInfos = ts.createMultiMap();
-            var packageJsonFilter = ts.createPackageJsonImportFilter(fromFile, host);
+            var packageJsonFilter = ts.createPackageJsonImportFilter(fromFile, preferences, host);
             var moduleSpecifierCache = (_a = host.getModuleSpecifierCache) === null || _a === void 0 ? void 0 : _a.call(host);
             var getModuleSpecifierResolutionHost = ts.memoizeOne(function (isFromPackageJson) {
                 return ts.createModuleSpecifierResolutionHost(isFromPackageJson ? host.getPackageJsonAutoImportProvider() : program, host);
             });
             function addSymbol(moduleSymbol, toFile, exportedSymbol, exportKind, program, isFromPackageJson) {
                 var moduleSpecifierResolutionHost = getModuleSpecifierResolutionHost(isFromPackageJson);
-                if (toFile && ts.isImportableFile(program, fromFile, toFile, packageJsonFilter, moduleSpecifierResolutionHost, moduleSpecifierCache) ||
+                if (toFile && ts.isImportableFile(program, fromFile, toFile, preferences, packageJsonFilter, moduleSpecifierResolutionHost, moduleSpecifierCache) ||
                     !toFile && packageJsonFilter.allowsImportingAmbientModule(moduleSymbol, moduleSpecifierResolutionHost)) {
                     var checker = program.getTypeChecker();
-                    originalSymbolToExportInfos.add(ts.getUniqueSymbolId(exportedSymbol, checker).toString(), { symbol: exportedSymbol, moduleSymbol: moduleSymbol, exportKind: exportKind, exportedSymbolIsTypeOnly: isTypeOnlySymbol(exportedSymbol, checker), isFromPackageJson: isFromPackageJson });
+                    originalSymbolToExportInfos.add(ts.getUniqueSymbolId(exportedSymbol, checker).toString(), { symbol: exportedSymbol, moduleSymbol: moduleSymbol, moduleFileName: toFile === null || toFile === void 0 ? void 0 : toFile.fileName, exportKind: exportKind, targetFlags: ts.skipAlias(exportedSymbol, checker).flags, isFromPackageJson: isFromPackageJson });
                 }
             }
-            forEachExternalModuleToImportFrom(program, host, useAutoImportProvider, function (moduleSymbol, sourceFile, program, isFromPackageJson) {
+            ts.forEachExternalModuleToImportFrom(program, host, useAutoImportProvider, function (moduleSymbol, sourceFile, program, isFromPackageJson) {
                 var checker = program.getTypeChecker();
                 cancellationToken.throwIfCancellationRequested();
                 var compilerOptions = program.getCompilerOptions();
-                var defaultInfo = getDefaultLikeExportInfo(moduleSymbol, checker, compilerOptions);
+                var defaultInfo = ts.getDefaultLikeExportInfo(moduleSymbol, checker, compilerOptions);
                 if (defaultInfo && (defaultInfo.name === symbolName || moduleSymbolToValidIdentifier(moduleSymbol, compilerOptions.target) === symbolName) && symbolHasMeaning(defaultInfo.symbolForMeaning, currentTokenMeaning)) {
                     addSymbol(moduleSymbol, sourceFile, defaultInfo.symbol, defaultInfo.exportKind, program, isFromPackageJson);
                 }
@@ -142410,33 +145660,20 @@
             });
             return originalSymbolToExportInfos;
         }
-        function getDefaultLikeExportInfo(moduleSymbol, checker, compilerOptions) {
-            var exported = getDefaultLikeExportWorker(moduleSymbol, checker);
-            if (!exported)
-                return undefined;
-            var symbol = exported.symbol, exportKind = exported.exportKind;
-            var info = getDefaultExportInfoWorker(symbol, checker, compilerOptions);
-            return info && __assign({ symbol: symbol, exportKind: exportKind }, info);
-        }
-        function getDefaultLikeExportWorker(moduleSymbol, checker) {
-            var exportEquals = checker.resolveExternalModuleSymbol(moduleSymbol);
-            if (exportEquals !== moduleSymbol)
-                return { symbol: exportEquals, exportKind: 2 /* ExportEquals */ };
-            var defaultExport = checker.tryGetMemberInModuleExports("default" /* Default */, moduleSymbol);
-            if (defaultExport)
-                return { symbol: defaultExport, exportKind: 1 /* Default */ };
-        }
-        function getExportEqualsImportKind(importingFile, compilerOptions) {
+        function getExportEqualsImportKind(importingFile, compilerOptions, forceImportKeyword) {
             var allowSyntheticDefaults = ts.getAllowSyntheticDefaultImports(compilerOptions);
-            // 1. 'import =' will not work in es2015+, so the decision is between a default
+            var isJS = ts.isInJSFile(importingFile);
+            // 1. 'import =' will not work in es2015+ TS files, so the decision is between a default
             //    and a namespace import, based on allowSyntheticDefaultImports/esModuleInterop.
-            if (ts.getEmitModuleKind(compilerOptions) >= ts.ModuleKind.ES2015) {
+            if (!isJS && ts.getEmitModuleKind(compilerOptions) >= ts.ModuleKind.ES2015) {
                 return allowSyntheticDefaults ? 1 /* Default */ : 2 /* Namespace */;
             }
-            // 2. 'import =' will not work in JavaScript, so the decision is between a default
-            //    and const/require.
-            if (ts.isInJSFile(importingFile)) {
-                return ts.isExternalModule(importingFile) ? 1 /* Default */ : 3 /* CommonJS */;
+            // 2. 'import =' will not work in JavaScript, so the decision is between a default import,
+            //    a namespace import, and const/require.
+            if (isJS) {
+                return ts.isExternalModule(importingFile) || forceImportKeyword
+                    ? allowSyntheticDefaults ? 1 /* Default */ : 2 /* Namespace */
+                    : 3 /* CommonJS */;
             }
             // 3. At this point the most correct choice is probably 'import =', but people
             //    really hate that, so look to see if the importing file has any precedent
@@ -142452,41 +145689,6 @@
             //    allowSyntheticDefaultImports/esModuleInterop is enabled.
             return allowSyntheticDefaults ? 1 /* Default */ : 3 /* CommonJS */;
         }
-        function getDefaultExportInfoWorker(defaultExport, checker, compilerOptions) {
-            var localSymbol = ts.getLocalSymbolForExportDefault(defaultExport);
-            if (localSymbol)
-                return { symbolForMeaning: localSymbol, name: localSymbol.name };
-            var name = getNameForExportDefault(defaultExport);
-            if (name !== undefined)
-                return { symbolForMeaning: defaultExport, name: name };
-            if (defaultExport.flags & 2097152 /* Alias */) {
-                var aliased = checker.getImmediateAliasedSymbol(defaultExport);
-                if (aliased && aliased.parent) {
-                    // - `aliased` will be undefined if the module is exporting an unresolvable name,
-                    //    but we can still offer completions for it.
-                    // - `aliased.parent` will be undefined if the module is exporting `globalThis.something`,
-                    //    or another expression that resolves to a global.
-                    return getDefaultExportInfoWorker(aliased, checker, compilerOptions);
-                }
-            }
-            if (defaultExport.escapedName !== "default" /* Default */ &&
-                defaultExport.escapedName !== "export=" /* ExportEquals */) {
-                return { symbolForMeaning: defaultExport, name: defaultExport.getName() };
-            }
-            return { symbolForMeaning: defaultExport, name: ts.getNameForExportedSymbol(defaultExport, compilerOptions.target) };
-        }
-        function getNameForExportDefault(symbol) {
-            return symbol.declarations && ts.firstDefined(symbol.declarations, function (declaration) {
-                var _a;
-                if (ts.isExportAssignment(declaration)) {
-                    return (_a = ts.tryCast(ts.skipOuterExpressions(declaration.expression), ts.isIdentifier)) === null || _a === void 0 ? void 0 : _a.text;
-                }
-                else if (ts.isExportSpecifier(declaration)) {
-                    ts.Debug.assert(declaration.name.text === "default" /* Default */, "Expected the specifier to be a default export");
-                    return declaration.propertyName && declaration.propertyName.text;
-                }
-            });
-        }
         function codeActionForFix(context, sourceFile, symbolName, fix, quotePreference) {
             var diag;
             var changes = ts.textChanges.ChangeTracker.with(context, function (tracker) {
@@ -142522,7 +145724,7 @@
             }
         }
         function doAddExistingFix(changes, sourceFile, clause, defaultImport, namedImports, canUseTypeOnlyImport) {
-            if (clause.kind === 197 /* ObjectBindingPattern */) {
+            if (clause.kind === 199 /* ObjectBindingPattern */) {
                 if (defaultImport) {
                     addElementToBindingPattern(clause, defaultImport, "default");
                 }
@@ -142649,31 +145851,6 @@
             var declarations = _a.declarations;
             return ts.some(declarations, function (decl) { return !!(ts.getMeaningFromDeclaration(decl) & meaning); });
         }
-        function forEachExternalModuleToImportFrom(program, host, useAutoImportProvider, cb) {
-            var _a, _b;
-            forEachExternalModule(program.getTypeChecker(), program.getSourceFiles(), function (module, file) { return cb(module, file, program, /*isFromPackageJson*/ false); });
-            var autoImportProvider = useAutoImportProvider && ((_a = host.getPackageJsonAutoImportProvider) === null || _a === void 0 ? void 0 : _a.call(host));
-            if (autoImportProvider) {
-                var start = ts.timestamp();
-                forEachExternalModule(autoImportProvider.getTypeChecker(), autoImportProvider.getSourceFiles(), function (module, file) { return cb(module, file, autoImportProvider, /*isFromPackageJson*/ true); });
-                (_b = host.log) === null || _b === void 0 ? void 0 : _b.call(host, "forEachExternalModuleToImportFrom autoImportProvider: " + (ts.timestamp() - start));
-            }
-        }
-        codefix.forEachExternalModuleToImportFrom = forEachExternalModuleToImportFrom;
-        function forEachExternalModule(checker, allSourceFiles, cb) {
-            for (var _i = 0, _a = checker.getAmbientModules(); _i < _a.length; _i++) {
-                var ambient = _a[_i];
-                if (!ts.stringContains(ambient.name, "*")) {
-                    cb(ambient, /*sourceFile*/ undefined);
-                }
-            }
-            for (var _b = 0, allSourceFiles_1 = allSourceFiles; _b < allSourceFiles_1.length; _b++) {
-                var sourceFile = allSourceFiles_1[_b];
-                if (ts.isExternalOrCommonJsModule(sourceFile)) {
-                    cb(checker.getMergedSymbol(sourceFile.symbol), sourceFile);
-                }
-            }
-        }
         function moduleSymbolToValidIdentifier(moduleSymbol, target) {
             return moduleSpecifierToValidIdentifier(ts.removeFileExtension(ts.stripQuotes(moduleSymbol.name)), target);
         }
@@ -142784,28 +145961,30 @@
             var classElement = findContainerClassElementLike(sourceFile, pos);
             var modifiers = classElement.modifiers || ts.emptyArray;
             var staticModifier = ts.find(modifiers, ts.isStaticModifier);
+            var abstractModifier = ts.find(modifiers, ts.isAbstractModifier);
             var accessibilityModifier = ts.find(modifiers, function (m) { return ts.isAccessibilityModifier(m.kind); });
-            var modifierPos = staticModifier ? staticModifier.end :
-                accessibilityModifier ? accessibilityModifier.end :
-                    classElement.decorators ? ts.skipTrivia(sourceFile.text, classElement.decorators.end) : classElement.getStart(sourceFile);
-            var options = accessibilityModifier || staticModifier ? { prefix: " " } : { suffix: " " };
-            changeTracker.insertModifierAt(sourceFile, modifierPos, 156 /* OverrideKeyword */, options);
+            var modifierPos = abstractModifier ? abstractModifier.end :
+                staticModifier ? staticModifier.end :
+                    accessibilityModifier ? accessibilityModifier.end :
+                        classElement.decorators ? ts.skipTrivia(sourceFile.text, classElement.decorators.end) : classElement.getStart(sourceFile);
+            var options = accessibilityModifier || staticModifier || abstractModifier ? { prefix: " " } : { suffix: " " };
+            changeTracker.insertModifierAt(sourceFile, modifierPos, 157 /* OverrideKeyword */, options);
         }
         function doRemoveOverrideModifierChange(changeTracker, sourceFile, pos) {
             var classElement = findContainerClassElementLike(sourceFile, pos);
-            var overrideModifier = classElement.modifiers && ts.find(classElement.modifiers, function (modifier) { return modifier.kind === 156 /* OverrideKeyword */; });
+            var overrideModifier = classElement.modifiers && ts.find(classElement.modifiers, function (modifier) { return modifier.kind === 157 /* OverrideKeyword */; });
             ts.Debug.assertIsDefined(overrideModifier);
             changeTracker.deleteModifier(sourceFile, overrideModifier);
         }
         function isClassElementLikeHasJSDoc(node) {
             switch (node.kind) {
-                case 167 /* Constructor */:
-                case 164 /* PropertyDeclaration */:
-                case 166 /* MethodDeclaration */:
-                case 168 /* GetAccessor */:
-                case 169 /* SetAccessor */:
+                case 169 /* Constructor */:
+                case 165 /* PropertyDeclaration */:
+                case 167 /* MethodDeclaration */:
+                case 170 /* GetAccessor */:
+                case 171 /* SetAccessor */:
                     return true;
-                case 161 /* Parameter */:
+                case 162 /* Parameter */:
                     return ts.isParameterPropertyDeclaration(node, node.parent);
                 default:
                     return false;
@@ -142881,12 +146060,12 @@
         });
         function doChange(changes, sourceFile, pos, checker) {
             var token = ts.getTokenAtPosition(sourceFile, pos);
-            ts.Debug.assert(token.kind === 107 /* ThisKeyword */);
+            ts.Debug.assert(token.kind === 108 /* ThisKeyword */);
             var fn = ts.getThisContainer(token, /*includeArrowFunctions*/ false);
             if (!ts.isFunctionDeclaration(fn) && !ts.isFunctionExpression(fn))
                 return undefined;
             if (!ts.isSourceFile(ts.getThisContainer(fn, /*includeArrowFunctions*/ false))) { // 'this' is defined outside, convert to arrow function
-                var fnKeyword = ts.Debug.assertDefined(ts.findChildOfKind(fn, 97 /* FunctionKeyword */, sourceFile));
+                var fnKeyword = ts.Debug.assertDefined(ts.findChildOfKind(fn, 98 /* FunctionKeyword */, sourceFile));
                 var name = fn.name;
                 var body = ts.Debug.assertDefined(fn.body); // Should be defined because the function contained a 'this' expression
                 if (ts.isFunctionExpression(fn)) {
@@ -142905,7 +146084,7 @@
                 else {
                     // `function f() {}` => `const f = () => {}`
                     // `name` should be defined because we only do this in inner contexts, and name is only undefined for `export default function() {}`.
-                    changes.replaceNode(sourceFile, fnKeyword, ts.factory.createToken(84 /* ConstKeyword */));
+                    changes.replaceNode(sourceFile, fnKeyword, ts.factory.createToken(85 /* ConstKeyword */));
                     changes.insertText(sourceFile, name.end, " = ");
                     changes.insertText(sourceFile, body.pos, " =>");
                     return [ts.Diagnostics.Convert_function_declaration_0_to_arrow_function, name.text];
@@ -142936,7 +146115,7 @@
         });
         function getNamedTupleMember(sourceFile, pos) {
             var token = ts.getTokenAtPosition(sourceFile, pos);
-            return ts.findAncestor(token, function (t) { return t.kind === 193 /* NamedTupleMember */; });
+            return ts.findAncestor(token, function (t) { return t.kind === 195 /* NamedTupleMember */; });
         }
         function doChange(changes, sourceFile, namedTupleMember) {
             if (!namedTupleMember) {
@@ -142945,11 +146124,11 @@
             var unwrappedType = namedTupleMember.type;
             var sawOptional = false;
             var sawRest = false;
-            while (unwrappedType.kind === 181 /* OptionalType */ || unwrappedType.kind === 182 /* RestType */ || unwrappedType.kind === 187 /* ParenthesizedType */) {
-                if (unwrappedType.kind === 181 /* OptionalType */) {
+            while (unwrappedType.kind === 183 /* OptionalType */ || unwrappedType.kind === 184 /* RestType */ || unwrappedType.kind === 189 /* ParenthesizedType */) {
+                if (unwrappedType.kind === 183 /* OptionalType */) {
                     sawOptional = true;
                 }
-                else if (unwrappedType.kind === 182 /* RestType */) {
+                else if (unwrappedType.kind === 184 /* RestType */) {
                     sawRest = true;
                 }
                 unwrappedType = unwrappedType.type;
@@ -142970,10 +146149,13 @@
         var fixId = "fixSpelling";
         var errorCodes = [
             ts.Diagnostics.Property_0_does_not_exist_on_type_1_Did_you_mean_2.code,
+            ts.Diagnostics.Property_0_may_not_exist_on_type_1_Did_you_mean_2.code,
             ts.Diagnostics.Cannot_find_name_0_Did_you_mean_1.code,
+            ts.Diagnostics.Could_not_find_name_0_Did_you_mean_1.code,
             ts.Diagnostics.Cannot_find_name_0_Did_you_mean_the_instance_member_this_0.code,
             ts.Diagnostics.Cannot_find_name_0_Did_you_mean_the_static_member_1_0.code,
             ts.Diagnostics._0_has_no_exported_member_named_1_Did_you_mean_2.code,
+            ts.Diagnostics.This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0_Did_you_mean_1.code,
             // for JSX class components
             ts.Diagnostics.No_overload_matches_this_call.code,
             // for JSX FC
@@ -143040,6 +146222,14 @@
                 var props = checker.getContextualTypeForArgumentAtIndex(tag, 0);
                 suggestedSymbol = checker.getSuggestedSymbolForNonexistentJSXAttribute(node, props);
             }
+            else if (ts.hasSyntacticModifier(parent, 16384 /* Override */) && ts.isClassElement(parent) && parent.name === node) {
+                var baseDeclaration = ts.findAncestor(node, ts.isClassLike);
+                var baseTypeNode = baseDeclaration ? ts.getEffectiveBaseTypeNode(baseDeclaration) : undefined;
+                var baseType = baseTypeNode ? checker.getTypeAtLocation(baseTypeNode) : undefined;
+                if (baseType) {
+                    suggestedSymbol = checker.getSuggestedSymbolForNonexistentClassMember(ts.getTextOfNode(node), baseType);
+                }
+            }
             else {
                 var meaning = ts.getMeaningFromLocation(node);
                 var name = ts.getTextOfNode(node);
@@ -143147,7 +146337,7 @@
             var member = checker.createSymbol(4 /* Property */, label.escapedText);
             member.type = checker.getTypeAtLocation(expression);
             var members = ts.createSymbolTable([member]);
-            return checker.createAnonymousType(/*symbol*/ undefined, members, [], [], /*stringIndexInfo*/ undefined, /*numberIndexInfo*/ undefined);
+            return checker.createAnonymousType(/*symbol*/ undefined, members, [], [], []);
         }
         function getFixInfo(checker, declaration, expectType, isFunctionType) {
             if (!declaration.body || !ts.isBlock(declaration.body) || ts.length(declaration.body.statements) !== 1)
@@ -143209,9 +146399,7 @@
                     var newSig = checker.createSignature(declaration, sig.typeParameters, sig.thisParameter, sig.parameters, exprType, 
                     /*typePredicate*/ undefined, sig.minArgumentCount, sig.flags);
                     exprType = checker.createAnonymousType(
-                    /*symbol*/ undefined, ts.createSymbolTable(), [newSig], [], 
-                    /*stringIndexInfo*/ undefined, 
-                    /*numberIndexInfo*/ undefined);
+                    /*symbol*/ undefined, ts.createSymbolTable(), [newSig], [], []);
                 }
                 else {
                     exprType = checker.getAnyType();
@@ -143249,19 +146437,19 @@
         }
         function getVariableLikeInitializer(declaration) {
             switch (declaration.kind) {
-                case 250 /* VariableDeclaration */:
-                case 161 /* Parameter */:
-                case 199 /* BindingElement */:
-                case 164 /* PropertyDeclaration */:
-                case 289 /* PropertyAssignment */:
+                case 252 /* VariableDeclaration */:
+                case 162 /* Parameter */:
+                case 201 /* BindingElement */:
+                case 165 /* PropertyDeclaration */:
+                case 291 /* PropertyAssignment */:
                     return declaration.initializer;
-                case 281 /* JsxAttribute */:
+                case 283 /* JsxAttribute */:
                     return declaration.initializer && (ts.isJsxExpression(declaration.initializer) ? declaration.initializer.expression : undefined);
-                case 290 /* ShorthandPropertyAssignment */:
-                case 163 /* PropertySignature */:
-                case 292 /* EnumMember */:
-                case 337 /* JSDocPropertyTag */:
-                case 330 /* JSDocParameterTag */:
+                case 292 /* ShorthandPropertyAssignment */:
+                case 164 /* PropertySignature */:
+                case 294 /* EnumMember */:
+                case 342 /* JSDocPropertyTag */:
+                case 335 /* JSDocParameterTag */:
                     return undefined;
             }
         }
@@ -143303,6 +146491,8 @@
     var codefix;
     (function (codefix) {
         var fixMissingMember = "fixMissingMember";
+        var fixMissingProperties = "fixMissingProperties";
+        var fixMissingAttributes = "fixMissingAttributes";
         var fixMissingFunctionDeclaration = "fixMissingFunctionDeclaration";
         var errorCodes = [
             ts.Diagnostics.Property_0_does_not_exist_on_type_1.code,
@@ -143320,6 +146510,14 @@
                 if (!info) {
                     return undefined;
                 }
+                if (info.kind === 3 /* ObjectLiteral */) {
+                    var changes = ts.textChanges.ChangeTracker.with(context, function (t) { return addObjectLiteralProperties(t, context, info); });
+                    return [codefix.createCodeFixAction(fixMissingProperties, changes, ts.Diagnostics.Add_missing_properties, fixMissingProperties, ts.Diagnostics.Add_all_missing_properties)];
+                }
+                if (info.kind === 4 /* JsxAttributes */) {
+                    var changes = ts.textChanges.ChangeTracker.with(context, function (t) { return addJsxAttributes(t, context, info); });
+                    return [codefix.createCodeFixAction(fixMissingAttributes, changes, ts.Diagnostics.Add_missing_attributes, fixMissingAttributes, ts.Diagnostics.Add_all_missing_attributes)];
+                }
                 if (info.kind === 2 /* Function */) {
                     var changes = ts.textChanges.ChangeTracker.with(context, function (t) { return addFunctionDeclaration(t, context, info); });
                     return [codefix.createCodeFixAction(fixMissingFunctionDeclaration, changes, [ts.Diagnostics.Add_missing_function_declaration_0, info.token.text], fixMissingFunctionDeclaration, ts.Diagnostics.Add_all_missing_function_declarations)];
@@ -143330,7 +146528,7 @@
                 }
                 return ts.concatenate(getActionsForMissingMethodDeclaration(context, info), getActionsForMissingMemberDeclaration(context, info));
             },
-            fixIds: [fixMissingMember, fixMissingFunctionDeclaration],
+            fixIds: [fixMissingMember, fixMissingFunctionDeclaration, fixMissingProperties, fixMissingAttributes],
             getAllCodeActions: function (context) {
                 var program = context.program, fixId = context.fixId;
                 var checker = program.getTypeChecker();
@@ -143342,10 +146540,14 @@
                         if (!info || !ts.addToSeen(seen, ts.getNodeId(info.parentDeclaration) + "#" + info.token.text)) {
                             return;
                         }
-                        if (fixId === fixMissingFunctionDeclaration) {
-                            if (info.kind === 2 /* Function */) {
-                                addFunctionDeclaration(changes, context, info);
-                            }
+                        if (fixId === fixMissingFunctionDeclaration && info.kind === 2 /* Function */) {
+                            addFunctionDeclaration(changes, context, info);
+                        }
+                        else if (fixId === fixMissingProperties && info.kind === 3 /* ObjectLiteral */) {
+                            addObjectLiteralProperties(changes, context, info);
+                        }
+                        else if (fixId === fixMissingAttributes && info.kind === 4 /* JsxAttributes */) {
+                            addJsxAttributes(changes, context, info);
                         }
                         else {
                             if (info.kind === 0 /* Enum */) {
@@ -143387,8 +146589,8 @@
                                 }
                             }
                         };
-                        for (var _i = 0, infos_2 = infos; _i < infos_2.length; _i++) {
-                            var info = infos_2[_i];
+                        for (var _i = 0, infos_1 = infos; _i < infos_1.length; _i++) {
+                            var info = infos_1[_i];
                             _loop_14(info);
                         }
                     });
@@ -143400,6 +146602,8 @@
             InfoKind[InfoKind["Enum"] = 0] = "Enum";
             InfoKind[InfoKind["ClassOrInterface"] = 1] = "ClassOrInterface";
             InfoKind[InfoKind["Function"] = 2] = "Function";
+            InfoKind[InfoKind["ObjectLiteral"] = 3] = "ObjectLiteral";
+            InfoKind[InfoKind["JsxAttributes"] = 4] = "JsxAttributes";
         })(InfoKind || (InfoKind = {}));
         function getInfo(sourceFile, tokenPos, checker, program) {
             // The identifier of the missing property. eg:
@@ -143410,6 +146614,18 @@
                 return undefined;
             }
             var parent = token.parent;
+            if (ts.isIdentifier(token) && ts.hasInitializer(parent) && parent.initializer && ts.isObjectLiteralExpression(parent.initializer)) {
+                var properties = ts.arrayFrom(checker.getUnmatchedProperties(checker.getTypeAtLocation(parent.initializer), checker.getTypeAtLocation(token), /* requireOptionalProperties */ false, /* matchDiscriminantProperties */ false));
+                if (ts.length(properties)) {
+                    return { kind: 3 /* ObjectLiteral */, token: token, properties: properties, parentDeclaration: parent.initializer };
+                }
+            }
+            if (ts.isIdentifier(token) && ts.isJsxOpeningLikeElement(token.parent)) {
+                var attributes = getUnmatchedAttributes(checker, token.parent);
+                if (ts.length(attributes)) {
+                    return { kind: 4 /* JsxAttributes */, token: token, attributes: attributes, parentDeclaration: token.parent };
+                }
+            }
             if (ts.isIdentifier(token) && ts.isCallExpression(parent)) {
                 return { kind: 2 /* Function */, token: token, call: parent, sourceFile: sourceFile, modifierFlags: 0 /* None */, parentDeclaration: sourceFile };
             }
@@ -143424,14 +146640,14 @@
             if (ts.isIdentifier(token) && ts.isCallExpression(parent.parent)) {
                 var moduleDeclaration = ts.find(symbol.declarations, ts.isModuleDeclaration);
                 var moduleDeclarationSourceFile = moduleDeclaration === null || moduleDeclaration === void 0 ? void 0 : moduleDeclaration.getSourceFile();
-                if (moduleDeclaration && moduleDeclarationSourceFile && !program.isSourceFileFromExternalLibrary(moduleDeclarationSourceFile)) {
+                if (moduleDeclaration && moduleDeclarationSourceFile && !isSourceFileFromLibrary(program, moduleDeclarationSourceFile)) {
                     return { kind: 2 /* Function */, token: token, call: parent.parent, sourceFile: sourceFile, modifierFlags: 1 /* Export */, parentDeclaration: moduleDeclaration };
                 }
                 var moduleSourceFile = ts.find(symbol.declarations, ts.isSourceFile);
                 if (sourceFile.commonJsModuleIndicator) {
                     return;
                 }
-                if (moduleSourceFile && !program.isSourceFileFromExternalLibrary(moduleSourceFile)) {
+                if (moduleSourceFile && !isSourceFileFromLibrary(program, moduleSourceFile)) {
                     return { kind: 2 /* Function */, token: token, call: parent.parent, sourceFile: moduleSourceFile, modifierFlags: 1 /* Export */, parentDeclaration: moduleSourceFile };
                 }
             }
@@ -143442,7 +146658,7 @@
             }
             // Prefer to change the class instead of the interface if they are merged
             var classOrInterface = classDeclaration || ts.find(symbol.declarations, ts.isInterfaceDeclaration);
-            if (classOrInterface && !program.isSourceFileFromExternalLibrary(classOrInterface.getSourceFile())) {
+            if (classOrInterface && !isSourceFileFromLibrary(program, classOrInterface.getSourceFile())) {
                 var makeStatic = (leftExpressionType.target || leftExpressionType) !== checker.getDeclaredTypeOfSymbol(symbol);
                 if (makeStatic && (ts.isPrivateIdentifier(token) || ts.isInterfaceDeclaration(classOrInterface))) {
                     return undefined;
@@ -143454,11 +146670,14 @@
                 return { kind: 1 /* ClassOrInterface */, token: token, call: call, modifierFlags: modifierFlags, parentDeclaration: classOrInterface, declSourceFile: declSourceFile, isJSFile: isJSFile };
             }
             var enumDeclaration = ts.find(symbol.declarations, ts.isEnumDeclaration);
-            if (enumDeclaration && !ts.isPrivateIdentifier(token) && !program.isSourceFileFromExternalLibrary(enumDeclaration.getSourceFile())) {
+            if (enumDeclaration && !ts.isPrivateIdentifier(token) && !isSourceFileFromLibrary(program, enumDeclaration.getSourceFile())) {
                 return { kind: 0 /* Enum */, token: token, parentDeclaration: enumDeclaration };
             }
             return undefined;
         }
+        function isSourceFileFromLibrary(program, node) {
+            return program.isSourceFileFromExternalLibrary(node) || program.isSourceFileDefaultLibrary(node);
+        }
         function getActionsForMissingMemberDeclaration(context, info) {
             return info.isJSFile ? ts.singleElementArray(createActionForAddMissingMemberInJavascriptFile(context, info)) :
                 createActionsForAddMissingMemberInTypeScriptFile(context, info);
@@ -143479,7 +146698,7 @@
         function addMissingMemberInJs(changeTracker, declSourceFile, classDeclaration, token, makeStatic) {
             var tokenName = token.text;
             if (makeStatic) {
-                if (classDeclaration.kind === 222 /* ClassExpression */) {
+                if (classDeclaration.kind === 224 /* ClassExpression */) {
                     return;
                 }
                 var className = classDeclaration.name.getText();
@@ -143511,7 +146730,7 @@
             }
         }
         function initializePropertyToUndefined(obj, propertyName) {
-            return ts.factory.createExpressionStatement(ts.factory.createAssignment(ts.factory.createPropertyAccessExpression(obj, propertyName), ts.factory.createIdentifier("undefined")));
+            return ts.factory.createExpressionStatement(ts.factory.createAssignment(ts.factory.createPropertyAccessExpression(obj, propertyName), createUndefined()));
         }
         function createActionsForAddMissingMemberInTypeScriptFile(context, _a) {
             var parentDeclaration = _a.parentDeclaration, declSourceFile = _a.declSourceFile, modifierFlags = _a.modifierFlags, token = _a.token;
@@ -143531,7 +146750,7 @@
         }
         function getTypeNode(checker, classDeclaration, token) {
             var typeNode;
-            if (token.parent.parent.kind === 217 /* BinaryExpression */) {
+            if (token.parent.parent.kind === 219 /* BinaryExpression */) {
                 var binaryExpression = token.parent.parent;
                 var otherExpression = token.parent === binaryExpression.left ? binaryExpression.right : binaryExpression.left;
                 var widenedType = checker.getWidenedType(checker.getBaseTypeOfLiteralType(checker.getTypeAtLocation(otherExpression)));
@@ -143541,7 +146760,7 @@
                 var contextualType = checker.getContextualType(token.parent);
                 typeNode = contextualType ? checker.typeToTypeNode(contextualType, /*enclosingDeclaration*/ undefined, 1 /* NoTruncation */) : undefined;
             }
-            return typeNode || ts.factory.createKeywordTypeNode(128 /* AnyKeyword */);
+            return typeNode || ts.factory.createKeywordTypeNode(129 /* AnyKeyword */);
         }
         function addPropertyDeclaration(changeTracker, declSourceFile, classDeclaration, tokenName, typeNode, modifierFlags) {
             var property = ts.factory.createPropertyDeclaration(
@@ -143570,7 +146789,7 @@
         }
         function createAddIndexSignatureAction(context, declSourceFile, classDeclaration, tokenName, typeNode) {
             // Index signatures cannot have the static modifier.
-            var stringTypeNode = ts.factory.createKeywordTypeNode(147 /* StringKeyword */);
+            var stringTypeNode = ts.factory.createKeywordTypeNode(148 /* StringKeyword */);
             var indexingParameter = ts.factory.createParameterDeclaration(
             /*decorators*/ undefined, 
             /*modifiers*/ undefined, 
@@ -143603,7 +146822,7 @@
         }
         function addMethodDeclaration(context, changes, callExpression, name, modifierFlags, parentDeclaration, sourceFile) {
             var importAdder = codefix.createImportAdder(sourceFile, context.program, context.preferences, context.host);
-            var methodDeclaration = codefix.createSignatureDeclarationFromCallExpression(166 /* MethodDeclaration */, context, importAdder, callExpression, name, modifierFlags, parentDeclaration);
+            var methodDeclaration = codefix.createSignatureDeclarationFromCallExpression(167 /* MethodDeclaration */, context, importAdder, callExpression, name, modifierFlags, parentDeclaration);
             var containingMethodDeclaration = ts.findAncestor(callExpression, function (n) { return ts.isMethodDeclaration(n) || ts.isConstructorDeclaration(n); });
             if (containingMethodDeclaration && containingMethodDeclaration.parent === parentDeclaration) {
                 changes.insertNodeAfter(sourceFile, containingMethodDeclaration, methodDeclaration);
@@ -143632,9 +146851,136 @@
         }
         function addFunctionDeclaration(changes, context, info) {
             var importAdder = codefix.createImportAdder(context.sourceFile, context.program, context.preferences, context.host);
-            var functionDeclaration = codefix.createSignatureDeclarationFromCallExpression(252 /* FunctionDeclaration */, context, importAdder, info.call, ts.idText(info.token), info.modifierFlags, info.parentDeclaration);
+            var functionDeclaration = codefix.createSignatureDeclarationFromCallExpression(254 /* FunctionDeclaration */, context, importAdder, info.call, ts.idText(info.token), info.modifierFlags, info.parentDeclaration);
             changes.insertNodeAtEndOfScope(info.sourceFile, info.parentDeclaration, functionDeclaration);
         }
+        function addJsxAttributes(changes, context, info) {
+            var importAdder = codefix.createImportAdder(context.sourceFile, context.program, context.preferences, context.host);
+            var quotePreference = ts.getQuotePreference(context.sourceFile, context.preferences);
+            var checker = context.program.getTypeChecker();
+            var jsxAttributesNode = info.parentDeclaration.attributes;
+            var hasSpreadAttribute = ts.some(jsxAttributesNode.properties, ts.isJsxSpreadAttribute);
+            var attrs = ts.map(info.attributes, function (attr) {
+                var value = attr.valueDeclaration ? tryGetValueFromType(context, checker, importAdder, quotePreference, checker.getTypeAtLocation(attr.valueDeclaration)) : createUndefined();
+                return ts.factory.createJsxAttribute(ts.factory.createIdentifier(attr.name), ts.factory.createJsxExpression(/*dotDotDotToken*/ undefined, value));
+            });
+            var jsxAttributes = ts.factory.createJsxAttributes(hasSpreadAttribute ? __spreadArray(__spreadArray([], attrs, true), jsxAttributesNode.properties, true) : __spreadArray(__spreadArray([], jsxAttributesNode.properties, true), attrs, true));
+            var options = { prefix: jsxAttributesNode.pos === jsxAttributesNode.end ? " " : undefined };
+            changes.replaceNode(context.sourceFile, jsxAttributesNode, jsxAttributes, options);
+        }
+        function addObjectLiteralProperties(changes, context, info) {
+            var importAdder = codefix.createImportAdder(context.sourceFile, context.program, context.preferences, context.host);
+            var quotePreference = ts.getQuotePreference(context.sourceFile, context.preferences);
+            var checker = context.program.getTypeChecker();
+            var props = ts.map(info.properties, function (prop) {
+                var initializer = prop.valueDeclaration ? tryGetValueFromType(context, checker, importAdder, quotePreference, checker.getTypeAtLocation(prop.valueDeclaration)) : createUndefined();
+                return ts.factory.createPropertyAssignment(prop.name, initializer);
+            });
+            changes.replaceNode(context.sourceFile, info.parentDeclaration, ts.factory.createObjectLiteralExpression(__spreadArray(__spreadArray([], info.parentDeclaration.properties, true), props, true), /*multiLine*/ true));
+        }
+        function tryGetValueFromType(context, checker, importAdder, quotePreference, type) {
+            if (type.flags & 3 /* AnyOrUnknown */) {
+                return createUndefined();
+            }
+            if (type.flags & (4 /* String */ | 134217728 /* TemplateLiteral */)) {
+                return ts.factory.createStringLiteral("", /* isSingleQuote */ quotePreference === 0 /* Single */);
+            }
+            if (type.flags & 8 /* Number */) {
+                return ts.factory.createNumericLiteral(0);
+            }
+            if (type.flags & 64 /* BigInt */) {
+                return ts.factory.createBigIntLiteral("0n");
+            }
+            if (type.flags & 16 /* Boolean */) {
+                return ts.factory.createFalse();
+            }
+            if (type.flags & 1056 /* EnumLike */) {
+                var enumMember = type.symbol.exports ? ts.firstOrUndefined(ts.arrayFrom(type.symbol.exports.values())) : type.symbol;
+                var name = checker.symbolToExpression(type.symbol.parent ? type.symbol.parent : type.symbol, 111551 /* Value */, /*enclosingDeclaration*/ undefined, /*flags*/ undefined);
+                return enumMember === undefined || name === undefined ? ts.factory.createNumericLiteral(0) : ts.factory.createPropertyAccessExpression(name, checker.symbolToString(enumMember));
+            }
+            if (type.flags & 256 /* NumberLiteral */) {
+                return ts.factory.createNumericLiteral(type.value);
+            }
+            if (type.flags & 2048 /* BigIntLiteral */) {
+                return ts.factory.createBigIntLiteral(type.value);
+            }
+            if (type.flags & 128 /* StringLiteral */) {
+                return ts.factory.createStringLiteral(type.value, /* isSingleQuote */ quotePreference === 0 /* Single */);
+            }
+            if (type.flags & 512 /* BooleanLiteral */) {
+                return (type === checker.getFalseType() || type === checker.getFalseType(/*fresh*/ true)) ? ts.factory.createFalse() : ts.factory.createTrue();
+            }
+            if (type.flags & 65536 /* Null */) {
+                return ts.factory.createNull();
+            }
+            if (type.flags & 1048576 /* Union */) {
+                var expression = ts.firstDefined(type.types, function (t) { return tryGetValueFromType(context, checker, importAdder, quotePreference, t); });
+                return expression !== null && expression !== void 0 ? expression : createUndefined();
+            }
+            if (checker.isArrayLikeType(type)) {
+                return ts.factory.createArrayLiteralExpression();
+            }
+            if (isObjectLiteralType(type)) {
+                var props = ts.map(checker.getPropertiesOfType(type), function (prop) {
+                    var initializer = prop.valueDeclaration ? tryGetValueFromType(context, checker, importAdder, quotePreference, checker.getTypeAtLocation(prop.valueDeclaration)) : createUndefined();
+                    return ts.factory.createPropertyAssignment(prop.name, initializer);
+                });
+                return ts.factory.createObjectLiteralExpression(props, /*multiLine*/ true);
+            }
+            if (ts.getObjectFlags(type) & 16 /* Anonymous */) {
+                var decl = ts.find(type.symbol.declarations || ts.emptyArray, ts.or(ts.isFunctionTypeNode, ts.isMethodSignature, ts.isMethodDeclaration));
+                if (decl === undefined)
+                    return createUndefined();
+                var signature = checker.getSignaturesOfType(type, 0 /* Call */);
+                if (signature === undefined)
+                    return createUndefined();
+                var func = codefix.createSignatureDeclarationFromSignature(211 /* FunctionExpression */, context, quotePreference, signature[0], codefix.createStubbedBody(ts.Diagnostics.Function_not_implemented.message, quotePreference), /*name*/ undefined, /*modifiers*/ undefined, /*optional*/ undefined, /*enclosingDeclaration*/ undefined, importAdder);
+                return func !== null && func !== void 0 ? func : createUndefined();
+            }
+            if (ts.getObjectFlags(type) & 1 /* Class */) {
+                var classDeclaration = ts.getClassLikeDeclarationOfSymbol(type.symbol);
+                if (classDeclaration === undefined || ts.hasAbstractModifier(classDeclaration))
+                    return createUndefined();
+                var constructorDeclaration = ts.getFirstConstructorWithBody(classDeclaration);
+                if (constructorDeclaration && ts.length(constructorDeclaration.parameters))
+                    return createUndefined();
+                return ts.factory.createNewExpression(ts.factory.createIdentifier(type.symbol.name), /*typeArguments*/ undefined, /*argumentsArray*/ undefined);
+            }
+            return createUndefined();
+        }
+        function createUndefined() {
+            return ts.factory.createIdentifier("undefined");
+        }
+        function isObjectLiteralType(type) {
+            return (type.flags & 524288 /* Object */) &&
+                ((ts.getObjectFlags(type) & 128 /* ObjectLiteral */) || (type.symbol && ts.tryCast(ts.singleOrUndefined(type.symbol.declarations), ts.isTypeLiteralNode)));
+        }
+        function getUnmatchedAttributes(checker, source) {
+            var attrsType = checker.getContextualType(source.attributes);
+            if (attrsType === undefined)
+                return ts.emptyArray;
+            var targetProps = attrsType.getProperties();
+            if (!ts.length(targetProps))
+                return ts.emptyArray;
+            var seenNames = new ts.Set();
+            for (var _i = 0, _a = source.attributes.properties; _i < _a.length; _i++) {
+                var sourceProp = _a[_i];
+                if (ts.isJsxAttribute(sourceProp)) {
+                    seenNames.add(sourceProp.name.escapedText);
+                }
+                if (ts.isJsxSpreadAttribute(sourceProp)) {
+                    var type = checker.getTypeAtLocation(sourceProp.expression);
+                    for (var _b = 0, _c = type.getProperties(); _b < _c.length; _b++) {
+                        var prop = _c[_b];
+                        seenNames.add(prop.escapedName);
+                    }
+                }
+            }
+            return ts.filter(targetProps, function (targetProp) {
+                return !((targetProp.flags & 16777216 /* Optional */ || ts.getCheckFlags(targetProp) & 48 /* Partial */) || seenNames.has(targetProp.escapedName));
+            });
+        }
     })(codefix = ts.codefix || (ts.codefix = {}));
 })(ts || (ts = {}));
 /* @internal */
@@ -143828,7 +147174,7 @@
         }
         function getNodes(sourceFile, pos) {
             var token = ts.getTokenAtPosition(sourceFile, pos);
-            if (token.kind !== 107 /* ThisKeyword */)
+            if (token.kind !== 108 /* ThisKeyword */)
                 return undefined;
             var constructor = ts.getContainingFunction(token);
             var superCall = findSuperCall(constructor.body);
@@ -144051,14 +147397,14 @@
             var token = ts.getTokenAtPosition(sourceFile, pos);
             var heritageClauses = ts.getContainingClass(token).heritageClauses;
             var extendsToken = heritageClauses[0].getFirstToken();
-            return extendsToken.kind === 93 /* ExtendsKeyword */ ? { extendsToken: extendsToken, heritageClauses: heritageClauses } : undefined;
+            return extendsToken.kind === 94 /* ExtendsKeyword */ ? { extendsToken: extendsToken, heritageClauses: heritageClauses } : undefined;
         }
         function doChanges(changes, sourceFile, extendsToken, heritageClauses) {
-            changes.replaceNode(sourceFile, extendsToken, ts.factory.createToken(116 /* ImplementsKeyword */));
+            changes.replaceNode(sourceFile, extendsToken, ts.factory.createToken(117 /* ImplementsKeyword */));
             // If there is already an implements clause, replace the implements keyword with a comma.
             if (heritageClauses.length === 2 &&
-                heritageClauses[0].token === 93 /* ExtendsKeyword */ &&
-                heritageClauses[1].token === 116 /* ImplementsKeyword */) {
+                heritageClauses[0].token === 94 /* ExtendsKeyword */ &&
+                heritageClauses[1].token === 117 /* ImplementsKeyword */) {
                 var implementsToken = heritageClauses[1].getFirstToken();
                 var implementsFullStart = implementsToken.getFullStart();
                 changes.replaceRange(sourceFile, { pos: implementsFullStart, end: implementsFullStart }, ts.factory.createToken(27 /* CommaToken */));
@@ -144234,7 +147580,7 @@
                     ];
                 }
                 var result = [];
-                if (token.kind === 135 /* InferKeyword */) {
+                if (token.kind === 136 /* InferKeyword */) {
                     var changes = ts.textChanges.ChangeTracker.with(context, function (t) { return changeInferToUnknown(t, sourceFile, token); });
                     var name = ts.cast(token.parent, ts.isInferTypeNode).typeParameter.name.text;
                     result.push(codefix.createCodeFixAction(fixName, changes, [ts.Diagnostics.Replace_infer_0_with_unknown, name], fixIdInfer, ts.Diagnostics.Replace_all_unused_infer_with_unknown));
@@ -144276,7 +147622,7 @@
                             break;
                         }
                         case fixIdDelete: {
-                            if (token.kind === 135 /* InferKeyword */ || isImport(token)) {
+                            if (token.kind === 136 /* InferKeyword */ || isImport(token)) {
                                 break; // Can't delete
                             }
                             else if (ts.isJSDocTemplateTag(token)) {
@@ -144305,7 +147651,7 @@
                             break;
                         }
                         case fixIdInfer:
-                            if (token.kind === 135 /* InferKeyword */) {
+                            if (token.kind === 136 /* InferKeyword */) {
                                 changeInferToUnknown(changes, sourceFile, token);
                             }
                             break;
@@ -144316,7 +147662,7 @@
             },
         });
         function changeInferToUnknown(changes, sourceFile, token) {
-            changes.replaceNode(sourceFile, token.parent, ts.factory.createKeywordTypeNode(152 /* UnknownKeyword */));
+            changes.replaceNode(sourceFile, token.parent, ts.factory.createKeywordTypeNode(153 /* UnknownKeyword */));
         }
         function createDeleteFix(changes, diag) {
             return codefix.createCodeFixAction(fixName, changes, diag, fixIdDelete, ts.Diagnostics.Delete_all_unused_declarations);
@@ -144325,18 +147671,18 @@
             changes.delete(sourceFile, ts.Debug.checkDefined(ts.cast(token.parent, ts.isDeclarationWithTypeParameterChildren).typeParameters, "The type parameter to delete should exist"));
         }
         function isImport(token) {
-            return token.kind === 99 /* ImportKeyword */
-                || token.kind === 78 /* Identifier */ && (token.parent.kind === 266 /* ImportSpecifier */ || token.parent.kind === 263 /* ImportClause */);
+            return token.kind === 100 /* ImportKeyword */
+                || token.kind === 79 /* Identifier */ && (token.parent.kind === 268 /* ImportSpecifier */ || token.parent.kind === 265 /* ImportClause */);
         }
         /** Sometimes the diagnostic span is an entire ImportDeclaration, so we should remove the whole thing. */
         function tryGetFullImport(token) {
-            return token.kind === 99 /* ImportKeyword */ ? ts.tryCast(token.parent, ts.isImportDeclaration) : undefined;
+            return token.kind === 100 /* ImportKeyword */ ? ts.tryCast(token.parent, ts.isImportDeclaration) : undefined;
         }
         function canDeleteEntireVariableStatement(sourceFile, token) {
             return ts.isVariableDeclarationList(token.parent) && ts.first(token.parent.getChildren(sourceFile)) === token;
         }
         function deleteEntireVariableStatement(changes, sourceFile, node) {
-            changes.delete(sourceFile, node.parent.kind === 233 /* VariableStatement */ ? node.parent : node);
+            changes.delete(sourceFile, node.parent.kind === 235 /* VariableStatement */ ? node.parent : node);
         }
         function deleteDestructuringElements(changes, sourceFile, node) {
             ts.forEach(node.elements, function (n) { return changes.delete(sourceFile, n); });
@@ -144345,7 +147691,7 @@
             // Don't offer to prefix a property.
             if (errorCode === ts.Diagnostics.Property_0_is_declared_but_its_value_is_never_read.code)
                 return;
-            if (token.kind === 135 /* InferKeyword */) {
+            if (token.kind === 136 /* InferKeyword */) {
                 token = ts.cast(token.parent, ts.isInferTypeNode).typeParameter.name;
             }
             if (ts.isIdentifier(token) && canPrefix(token)) {
@@ -144361,14 +147707,14 @@
         }
         function canPrefix(token) {
             switch (token.parent.kind) {
-                case 161 /* Parameter */:
-                case 160 /* TypeParameter */:
+                case 162 /* Parameter */:
+                case 161 /* TypeParameter */:
                     return true;
-                case 250 /* VariableDeclaration */: {
+                case 252 /* VariableDeclaration */: {
                     var varDecl = token.parent;
                     switch (varDecl.parent.parent.kind) {
-                        case 240 /* ForOfStatement */:
-                        case 239 /* ForInStatement */:
+                        case 242 /* ForOfStatement */:
+                        case 241 /* ForInStatement */:
                             return true;
                     }
                 }
@@ -144418,8 +147764,8 @@
         function mayDeleteParameter(checker, sourceFile, parameter, sourceFiles, program, cancellationToken, isFixAll) {
             var parent = parameter.parent;
             switch (parent.kind) {
-                case 166 /* MethodDeclaration */:
-                case 167 /* Constructor */:
+                case 167 /* MethodDeclaration */:
+                case 169 /* Constructor */:
                     var index = parent.parameters.indexOf(parameter);
                     var referent = ts.isMethodDeclaration(parent) ? parent.name : parent;
                     var entries = ts.FindAllReferences.Core.getReferencedSymbolsForNode(parent.pos, referent, program, sourceFiles, cancellationToken);
@@ -144449,17 +147795,17 @@
                         }
                     }
                     return true;
-                case 252 /* FunctionDeclaration */: {
+                case 254 /* FunctionDeclaration */: {
                     if (parent.name && isCallbackLike(checker, sourceFile, parent.name)) {
                         return isLastParameter(parent, parameter, isFixAll);
                     }
                     return true;
                 }
-                case 209 /* FunctionExpression */:
-                case 210 /* ArrowFunction */:
+                case 211 /* FunctionExpression */:
+                case 212 /* ArrowFunction */:
                     // Can't remove a non-last parameter in a callback. Can remove a parameter in code-fix-all if future parameters are also unused.
                     return isLastParameter(parent, parameter, isFixAll);
-                case 169 /* SetAccessor */:
+                case 171 /* SetAccessor */:
                     // Setter must have a parameter
                     return false;
                 default:
@@ -144517,7 +147863,7 @@
             var container = (ts.isBlock(statement.parent) ? statement.parent : statement).parent;
             if (!ts.isBlock(statement.parent) || statement === ts.first(statement.parent.statements)) {
                 switch (container.kind) {
-                    case 235 /* IfStatement */:
+                    case 237 /* IfStatement */:
                         if (container.elseStatement) {
                             if (ts.isBlock(statement.parent)) {
                                 break;
@@ -144528,8 +147874,8 @@
                             return;
                         }
                     // falls through
-                    case 237 /* WhileStatement */:
-                    case 238 /* ForStatement */:
+                    case 239 /* WhileStatement */:
+                    case 240 /* ForStatement */:
                         changes.delete(sourceFile, container);
                         return;
                 }
@@ -144602,7 +147948,7 @@
                 var typeNode = info.typeNode, type = info.type;
                 var original = typeNode.getText(sourceFile);
                 var actions = [fix(type, fixIdPlain, ts.Diagnostics.Change_all_jsdoc_style_types_to_TypeScript)];
-                if (typeNode.kind === 306 /* JSDocNullableType */) {
+                if (typeNode.kind === 309 /* JSDocNullableType */) {
                     // for nullable types, suggest the flow-compatible `T | null | undefined`
                     // in addition to the jsdoc/closure-compatible `T | null`
                     actions.push(fix(checker.getNullableType(type, 32768 /* Undefined */), fixIdNullable, ts.Diagnostics.Change_all_jsdoc_style_types_to_TypeScript_and_add_undefined_to_nullable_types));
@@ -144622,7 +147968,7 @@
                     if (!info)
                         return;
                     var typeNode = info.typeNode, type = info.type;
-                    var fixedType = typeNode.kind === 306 /* JSDocNullableType */ && fixId === fixIdNullable ? checker.getNullableType(type, 32768 /* Undefined */) : type;
+                    var fixedType = typeNode.kind === 309 /* JSDocNullableType */ && fixId === fixIdNullable ? checker.getNullableType(type, 32768 /* Undefined */) : type;
                     doChange(changes, sourceFile, typeNode, fixedType, checker);
                 });
             }
@@ -144639,22 +147985,22 @@
             // NOTE: Some locations are not handled yet:
             // MappedTypeNode.typeParameters and SignatureDeclaration.typeParameters, as well as CallExpression.typeArguments
             switch (node.kind) {
-                case 225 /* AsExpression */:
-                case 170 /* CallSignature */:
-                case 171 /* ConstructSignature */:
-                case 252 /* FunctionDeclaration */:
-                case 168 /* GetAccessor */:
-                case 172 /* IndexSignature */:
-                case 191 /* MappedType */:
-                case 166 /* MethodDeclaration */:
-                case 165 /* MethodSignature */:
-                case 161 /* Parameter */:
-                case 164 /* PropertyDeclaration */:
-                case 163 /* PropertySignature */:
-                case 169 /* SetAccessor */:
-                case 255 /* TypeAliasDeclaration */:
-                case 207 /* TypeAssertionExpression */:
-                case 250 /* VariableDeclaration */:
+                case 227 /* AsExpression */:
+                case 172 /* CallSignature */:
+                case 173 /* ConstructSignature */:
+                case 254 /* FunctionDeclaration */:
+                case 170 /* GetAccessor */:
+                case 174 /* IndexSignature */:
+                case 193 /* MappedType */:
+                case 167 /* MethodDeclaration */:
+                case 166 /* MethodSignature */:
+                case 162 /* Parameter */:
+                case 165 /* PropertyDeclaration */:
+                case 164 /* PropertySignature */:
+                case 171 /* SetAccessor */:
+                case 257 /* TypeAliasDeclaration */:
+                case 209 /* TypeAssertionExpression */:
+                case 252 /* VariableDeclaration */:
                     return true;
                 default:
                     return false;
@@ -144756,14 +148102,14 @@
             }
             var insertBefore;
             switch (containingFunction.kind) {
-                case 166 /* MethodDeclaration */:
+                case 167 /* MethodDeclaration */:
                     insertBefore = containingFunction.name;
                     break;
-                case 252 /* FunctionDeclaration */:
-                case 209 /* FunctionExpression */:
-                    insertBefore = ts.findChildOfKind(containingFunction, 97 /* FunctionKeyword */, sourceFile);
+                case 254 /* FunctionDeclaration */:
+                case 211 /* FunctionExpression */:
+                    insertBefore = ts.findChildOfKind(containingFunction, 98 /* FunctionKeyword */, sourceFile);
                     break;
-                case 210 /* ArrowFunction */:
+                case 212 /* ArrowFunction */:
                     insertBefore = ts.findChildOfKind(containingFunction, 20 /* OpenParenToken */, sourceFile) || ts.first(containingFunction.parameters);
                     break;
                 default:
@@ -144778,11 +148124,11 @@
             var insertBefore = _a.insertBefore, returnType = _a.returnType;
             if (returnType) {
                 var entityName = ts.getEntityNameFromTypeNode(returnType);
-                if (!entityName || entityName.kind !== 78 /* Identifier */ || entityName.text !== "Promise") {
+                if (!entityName || entityName.kind !== 79 /* Identifier */ || entityName.text !== "Promise") {
                     changes.replaceNode(sourceFile, returnType, ts.factory.createTypeReferenceNode("Promise", ts.factory.createNodeArray([returnType])));
                 }
             }
-            changes.insertModifierBefore(sourceFile, 129 /* AsyncKeyword */, insertBefore);
+            changes.insertModifierBefore(sourceFile, 130 /* AsyncKeyword */, insertBefore);
         }
     })(codefix = ts.codefix || (ts.codefix = {}));
 })(ts || (ts = {}));
@@ -144942,7 +148288,7 @@
             return errorCode;
         }
         function doChange(changes, sourceFile, token, errorCode, program, cancellationToken, markSeen, host, preferences) {
-            if (!ts.isParameterPropertyModifier(token.kind) && token.kind !== 78 /* Identifier */ && token.kind !== 25 /* DotDotDotToken */ && token.kind !== 107 /* ThisKeyword */) {
+            if (!ts.isParameterPropertyModifier(token.kind) && token.kind !== 79 /* Identifier */ && token.kind !== 25 /* DotDotDotToken */ && token.kind !== 108 /* ThisKeyword */) {
                 return undefined;
             }
             var parent = token.parent;
@@ -145096,7 +148442,7 @@
         function annotate(changes, importAdder, sourceFile, declaration, type, program, host) {
             var typeNode = ts.getTypeNodeIfAccessible(type, declaration, program, host);
             if (typeNode) {
-                if (ts.isInJSFile(sourceFile) && declaration.kind !== 163 /* PropertySignature */) {
+                if (ts.isInJSFile(sourceFile) && declaration.kind !== 164 /* PropertySignature */) {
                     var parent = ts.isVariableDeclaration(declaration) ? ts.tryCast(declaration.parent.parent, ts.isVariableStatement) : declaration;
                     if (!parent) {
                         return;
@@ -145171,15 +148517,15 @@
                     oldTags[i] = merged;
                 return !!merged;
             }); });
-            var tag = ts.factory.createJSDocComment(ts.factory.createNodeArray(ts.intersperse(comments, ts.factory.createJSDocText("\n"))), ts.factory.createNodeArray(__spreadArray(__spreadArray([], (oldTags || ts.emptyArray)), unmergedNewTags)));
-            var jsDocNode = parent.kind === 210 /* ArrowFunction */ ? getJsDocNodeForArrowFunction(parent) : parent;
+            var tag = ts.factory.createJSDocComment(ts.factory.createNodeArray(ts.intersperse(comments, ts.factory.createJSDocText("\n"))), ts.factory.createNodeArray(__spreadArray(__spreadArray([], (oldTags || ts.emptyArray), true), unmergedNewTags, true)));
+            var jsDocNode = parent.kind === 212 /* ArrowFunction */ ? getJsDocNodeForArrowFunction(parent) : parent;
             jsDocNode.jsDoc = parent.jsDoc;
             jsDocNode.jsDocCache = parent.jsDocCache;
             changes.insertJsdocCommentBefore(sourceFile, jsDocNode, tag);
         }
         codefix.addJSDocTags = addJSDocTags;
         function getJsDocNodeForArrowFunction(signature) {
-            if (signature.parent.kind === 164 /* PropertyDeclaration */) {
+            if (signature.parent.kind === 165 /* PropertyDeclaration */) {
                 return signature.parent;
             }
             return signature.parent.parent;
@@ -145189,14 +148535,14 @@
                 return undefined;
             }
             switch (oldTag.kind) {
-                case 330 /* JSDocParameterTag */: {
+                case 335 /* JSDocParameterTag */: {
                     var oldParam = oldTag;
                     var newParam = newTag;
                     return ts.isIdentifier(oldParam.name) && ts.isIdentifier(newParam.name) && oldParam.name.escapedText === newParam.name.escapedText
                         ? ts.factory.createJSDocParameterTag(/*tagName*/ undefined, newParam.name, /*isBracketed*/ false, newParam.typeExpression, newParam.isNameFirst, oldParam.comment)
                         : undefined;
                 }
-                case 331 /* JSDocReturnTag */:
+                case 336 /* JSDocReturnTag */:
                     return ts.factory.createJSDocReturnTag(/*tagName*/ undefined, newTag.typeExpression, oldTag.comment);
             }
         }
@@ -145221,19 +148567,19 @@
         function getFunctionReferences(containingFunction, sourceFile, program, cancellationToken) {
             var searchToken;
             switch (containingFunction.kind) {
-                case 167 /* Constructor */:
-                    searchToken = ts.findChildOfKind(containingFunction, 132 /* ConstructorKeyword */, sourceFile);
+                case 169 /* Constructor */:
+                    searchToken = ts.findChildOfKind(containingFunction, 133 /* ConstructorKeyword */, sourceFile);
                     break;
-                case 210 /* ArrowFunction */:
-                case 209 /* FunctionExpression */:
+                case 212 /* ArrowFunction */:
+                case 211 /* FunctionExpression */:
                     var parent = containingFunction.parent;
                     searchToken = (ts.isVariableDeclaration(parent) || ts.isPropertyDeclaration(parent)) && ts.isIdentifier(parent.name) ?
                         parent.name :
                         containingFunction.name;
                     break;
-                case 252 /* FunctionDeclaration */:
-                case 166 /* MethodDeclaration */:
-                case 165 /* MethodSignature */:
+                case 254 /* FunctionDeclaration */:
+                case 167 /* MethodDeclaration */:
+                case 166 /* MethodSignature */:
                     searchToken = containingFunction.name;
                     break;
             }
@@ -145320,7 +148666,7 @@
                     cancellationToken.throwIfCancellationRequested();
                     calculateUsageOfNode(reference, usage);
                 }
-                var calls = __spreadArray(__spreadArray([], usage.constructs || []), usage.calls || []);
+                var calls = __spreadArray(__spreadArray([], usage.constructs || [], true), usage.calls || [], true);
                 return declaration.parameters.map(function (parameter, parameterIndex) {
                     var types = [];
                     var isRest = ts.isRestParameter(parameter);
@@ -145375,24 +148721,24 @@
                     node = node.parent;
                 }
                 switch (node.parent.kind) {
-                    case 234 /* ExpressionStatement */:
+                    case 236 /* ExpressionStatement */:
                         inferTypeFromExpressionStatement(node, usage);
                         break;
-                    case 216 /* PostfixUnaryExpression */:
+                    case 218 /* PostfixUnaryExpression */:
                         usage.isNumber = true;
                         break;
-                    case 215 /* PrefixUnaryExpression */:
+                    case 217 /* PrefixUnaryExpression */:
                         inferTypeFromPrefixUnaryExpression(node.parent, usage);
                         break;
-                    case 217 /* BinaryExpression */:
+                    case 219 /* BinaryExpression */:
                         inferTypeFromBinaryExpression(node, node.parent, usage);
                         break;
-                    case 285 /* CaseClause */:
-                    case 286 /* DefaultClause */:
+                    case 287 /* CaseClause */:
+                    case 288 /* DefaultClause */:
                         inferTypeFromSwitchStatementLabel(node.parent, usage);
                         break;
-                    case 204 /* CallExpression */:
-                    case 205 /* NewExpression */:
+                    case 206 /* CallExpression */:
+                    case 207 /* NewExpression */:
                         if (node.parent.expression === node) {
                             inferTypeFromCallExpression(node.parent, usage);
                         }
@@ -145400,20 +148746,20 @@
                             inferTypeFromContextualType(node, usage);
                         }
                         break;
-                    case 202 /* PropertyAccessExpression */:
+                    case 204 /* PropertyAccessExpression */:
                         inferTypeFromPropertyAccessExpression(node.parent, usage);
                         break;
-                    case 203 /* ElementAccessExpression */:
+                    case 205 /* ElementAccessExpression */:
                         inferTypeFromPropertyElementExpression(node.parent, node, usage);
                         break;
-                    case 289 /* PropertyAssignment */:
-                    case 290 /* ShorthandPropertyAssignment */:
+                    case 291 /* PropertyAssignment */:
+                    case 292 /* ShorthandPropertyAssignment */:
                         inferTypeFromPropertyAssignment(node.parent, usage);
                         break;
-                    case 164 /* PropertyDeclaration */:
+                    case 165 /* PropertyDeclaration */:
                         inferTypeFromPropertyDeclaration(node.parent, usage);
                         break;
-                    case 250 /* VariableDeclaration */: {
+                    case 252 /* VariableDeclaration */: {
                         var _a = node.parent, name = _a.name, initializer = _a.initializer;
                         if (node === name) {
                             if (initializer) { // This can happen for `let x = null;` which still has an implicit-any error.
@@ -145471,17 +148817,17 @@
                     case 52 /* CaretToken */:
                     // CompoundAssignmentOperator
                     // falls through
-                    case 64 /* MinusEqualsToken */:
-                    case 66 /* AsteriskAsteriskEqualsToken */:
-                    case 65 /* AsteriskEqualsToken */:
-                    case 67 /* SlashEqualsToken */:
-                    case 68 /* PercentEqualsToken */:
-                    case 72 /* AmpersandEqualsToken */:
-                    case 73 /* BarEqualsToken */:
-                    case 77 /* CaretEqualsToken */:
-                    case 69 /* LessThanLessThanEqualsToken */:
-                    case 71 /* GreaterThanGreaterThanGreaterThanEqualsToken */:
-                    case 70 /* GreaterThanGreaterThanEqualsToken */:
+                    case 65 /* MinusEqualsToken */:
+                    case 67 /* AsteriskAsteriskEqualsToken */:
+                    case 66 /* AsteriskEqualsToken */:
+                    case 68 /* SlashEqualsToken */:
+                    case 69 /* PercentEqualsToken */:
+                    case 73 /* AmpersandEqualsToken */:
+                    case 74 /* BarEqualsToken */:
+                    case 78 /* CaretEqualsToken */:
+                    case 70 /* LessThanLessThanEqualsToken */:
+                    case 72 /* GreaterThanGreaterThanGreaterThanEqualsToken */:
+                    case 71 /* GreaterThanGreaterThanEqualsToken */:
                     // AdditiveOperator
                     // falls through
                     case 40 /* MinusToken */:
@@ -145499,7 +148845,7 @@
                             usage.isNumber = true;
                         }
                         break;
-                    case 63 /* PlusEqualsToken */:
+                    case 64 /* PlusEqualsToken */:
                     case 39 /* PlusToken */:
                         var otherOperandType = checker.getTypeAtLocation(parent.left === node ? parent.right : parent.left);
                         if (otherOperandType.flags & 1056 /* EnumLike */) {
@@ -145519,14 +148865,14 @@
                         }
                         break;
                     //  AssignmentOperators
-                    case 62 /* EqualsToken */:
+                    case 63 /* EqualsToken */:
                     case 34 /* EqualsEqualsToken */:
                     case 36 /* EqualsEqualsEqualsToken */:
                     case 37 /* ExclamationEqualsEqualsToken */:
                     case 35 /* ExclamationEqualsToken */:
                         addCandidateType(usage, checker.getTypeAtLocation(parent.left === node ? parent.right : parent.left));
                         break;
-                    case 100 /* InKeyword */:
+                    case 101 /* InKeyword */:
                         if (node === parent.left) {
                             usage.isString = true;
                         }
@@ -145535,7 +148881,7 @@
                     case 56 /* BarBarToken */:
                     case 60 /* QuestionQuestionToken */:
                         if (node === parent.left &&
-                            (node.parent.parent.kind === 250 /* VariableDeclaration */ || ts.isAssignmentExpression(node.parent.parent, /*excludeCompoundAssignment*/ true))) {
+                            (node.parent.parent.kind === 252 /* VariableDeclaration */ || ts.isAssignmentExpression(node.parent.parent, /*excludeCompoundAssignment*/ true))) {
                             // var x = x || {};
                             // TODO: use getFalsyflagsOfType
                             addCandidateType(usage, checker.getTypeAtLocation(parent.right));
@@ -145543,7 +148889,7 @@
                         break;
                     case 55 /* AmpersandAmpersandToken */:
                     case 27 /* CommaToken */:
-                    case 101 /* InstanceOfKeyword */:
+                    case 102 /* InstanceOfKeyword */:
                         // nothing to infer here
                         break;
                 }
@@ -145563,7 +148909,7 @@
                     }
                 }
                 calculateUsageOfNode(parent, call.return_);
-                if (parent.kind === 204 /* CallExpression */) {
+                if (parent.kind === 206 /* CallExpression */) {
                     (usage.calls || (usage.calls = [])).push(call);
                 }
                 else {
@@ -145670,13 +149016,15 @@
                     }
                     calls.push.apply(calls, checker.getSignaturesOfType(anon, 0 /* Call */));
                     constructs.push.apply(constructs, checker.getSignaturesOfType(anon, 1 /* Construct */));
-                    if (anon.stringIndexInfo) {
-                        stringIndices.push(anon.stringIndexInfo.type);
-                        stringIndexReadonly = stringIndexReadonly || anon.stringIndexInfo.isReadonly;
+                    var stringIndexInfo = checker.getIndexInfoOfType(anon, 0 /* String */);
+                    if (stringIndexInfo) {
+                        stringIndices.push(stringIndexInfo.type);
+                        stringIndexReadonly = stringIndexReadonly || stringIndexInfo.isReadonly;
                     }
-                    if (anon.numberIndexInfo) {
-                        numberIndices.push(anon.numberIndexInfo.type);
-                        numberIndexReadonly = numberIndexReadonly || anon.numberIndexInfo.isReadonly;
+                    var numberIndexInfo = checker.getIndexInfoOfType(anon, 1 /* Number */);
+                    if (numberIndexInfo) {
+                        numberIndices.push(numberIndexInfo.type);
+                        numberIndexReadonly = numberIndexReadonly || numberIndexInfo.isReadonly;
                     }
                 }
                 var members = ts.mapEntries(props, function (name, types) {
@@ -145685,7 +149033,12 @@
                     s.type = checker.getUnionType(types);
                     return [name, s];
                 });
-                return checker.createAnonymousType(anons[0].symbol, members, calls, constructs, stringIndices.length ? checker.createIndexInfo(checker.getUnionType(stringIndices), stringIndexReadonly) : undefined, numberIndices.length ? checker.createIndexInfo(checker.getUnionType(numberIndices), numberIndexReadonly) : undefined);
+                var indexInfos = [];
+                if (stringIndices.length)
+                    indexInfos.push(checker.createIndexInfo(checker.getStringType(), checker.getUnionType(stringIndices), stringIndexReadonly));
+                if (numberIndices.length)
+                    indexInfos.push(checker.createIndexInfo(checker.getNumberType(), checker.getUnionType(numberIndices), numberIndexReadonly));
+                return checker.createAnonymousType(anons[0].symbol, members, calls, constructs, indexInfos);
             }
             function inferTypes(usage) {
                 var _a, _b, _c;
@@ -145720,8 +149073,8 @@
                 }
                 var callSignatures = usage.calls ? [getSignatureFromCalls(usage.calls)] : [];
                 var constructSignatures = usage.constructs ? [getSignatureFromCalls(usage.constructs)] : [];
-                var stringIndexInfo = usage.stringIndex && checker.createIndexInfo(combineFromUsage(usage.stringIndex), /*isReadonly*/ false);
-                return checker.createAnonymousType(/*symbol*/ undefined, members, callSignatures, constructSignatures, stringIndexInfo, /*numberIndexInfo*/ undefined);
+                var indexInfos = usage.stringIndex ? [checker.createIndexInfo(checker.getStringType(), combineFromUsage(usage.stringIndex), /*isReadonly*/ false)] : [];
+                return checker.createAnonymousType(/*symbol*/ undefined, members, callSignatures, constructSignatures, indexInfos);
             }
             function inferNamedTypesFromProperties(usage) {
                 if (!usage.properties || !usage.properties.size)
@@ -145822,7 +149175,7 @@
                 return types;
             }
             function getFunctionFromCalls(calls) {
-                return checker.createAnonymousType(/*symbol*/ undefined, ts.createSymbolTable(), [getSignatureFromCalls(calls)], ts.emptyArray, /*stringIndexInfo*/ undefined, /*numberIndexInfo*/ undefined);
+                return checker.createAnonymousType(/*symbol*/ undefined, ts.createSymbolTable(), [getSignatureFromCalls(calls)], ts.emptyArray, ts.emptyArray);
             }
             function getSignatureFromCalls(calls) {
                 var parameters = [];
@@ -145839,7 +149192,6 @@
                     _loop_15(i);
                 }
                 var returnType = combineFromUsage(combineUsages(calls.map(function (call) { return call.return_; })));
-                // TODO: GH#18217
                 return checker.createSignature(/*declaration*/ undefined, /*typeParameters*/ undefined, /*thisParameter*/ undefined, parameters, returnType, /*typePredicate*/ undefined, length, 0 /* None */);
             }
             function addCandidateType(usage, type) {
@@ -145983,7 +149335,7 @@
         codefix.createMissingMemberNodes = createMissingMemberNodes;
         function getNoopSymbolTrackerWithResolver(context) {
             return {
-                trackSymbol: ts.noop,
+                trackSymbol: function () { return false; },
                 moduleResolverHost: ts.getModuleSpecifierResolverHost(context.program, context.host),
             };
         }
@@ -146007,8 +149359,8 @@
             var ambient = !!(enclosingDeclaration.flags & 8388608 /* Ambient */);
             var quotePreference = ts.getQuotePreference(sourceFile, preferences);
             switch (declaration.kind) {
-                case 163 /* PropertySignature */:
-                case 164 /* PropertyDeclaration */:
+                case 164 /* PropertySignature */:
+                case 165 /* PropertyDeclaration */:
                     var flags = quotePreference === 0 /* Single */ ? 268435456 /* UseSingleQuotesForStringLiteralType */ : undefined;
                     var typeNode = checker.typeToTypeNode(type, enclosingDeclaration, flags, getNoopSymbolTrackerWithResolver(context));
                     if (importAdder) {
@@ -146022,8 +149374,8 @@
                     /*decorators*/ undefined, modifiers, name, optional ? ts.factory.createToken(57 /* QuestionToken */) : undefined, typeNode, 
                     /*initializer*/ undefined));
                     break;
-                case 168 /* GetAccessor */:
-                case 169 /* SetAccessor */: {
+                case 170 /* GetAccessor */:
+                case 171 /* SetAccessor */: {
                     var typeNode_1 = checker.typeToTypeNode(type, enclosingDeclaration, /*flags*/ undefined, getNoopSymbolTrackerWithResolver(context));
                     var allAccessors = ts.getAllAccessorDeclarations(declarations, declaration);
                     var orderedAccessors = allAccessors.secondAccessor
@@ -146052,8 +149404,8 @@
                     }
                     break;
                 }
-                case 165 /* MethodSignature */:
-                case 166 /* MethodDeclaration */:
+                case 166 /* MethodSignature */:
+                case 167 /* MethodDeclaration */:
                     // The signature for the implementation appears as an entry in `signatures` iff
                     // there is only one signature.
                     // If there are overloads and an implementation signature, it appears as an
@@ -146073,7 +149425,7 @@
                     }
                     for (var _a = 0, signatures_1 = signatures; _a < signatures_1.length; _a++) {
                         var signature = signatures_1[_a];
-                        // Need to ensure nodes are fresh each time so they can have different positions.
+                        // Ensure nodes are fresh so they can have different positions when going through formatting.
                         outputMethod(quotePreference, signature, ts.getSynthesizedDeepClones(modifiers, /*includeTrivia*/ false), ts.getSynthesizedDeepClone(name, /*includeTrivia*/ false));
                     }
                     if (!ambient) {
@@ -146089,17 +149441,17 @@
                     break;
             }
             function outputMethod(quotePreference, signature, modifiers, name, body) {
-                var method = signatureToMethodDeclaration(context, quotePreference, signature, enclosingDeclaration, modifiers, name, optional, body, importAdder);
+                var method = createSignatureDeclarationFromSignature(167 /* MethodDeclaration */, context, quotePreference, signature, body, name, modifiers, optional, enclosingDeclaration, importAdder);
                 if (method)
                     addClassElement(method);
             }
         }
-        function signatureToMethodDeclaration(context, quotePreference, signature, enclosingDeclaration, modifiers, name, optional, body, importAdder) {
+        function createSignatureDeclarationFromSignature(kind, context, quotePreference, signature, body, name, modifiers, optional, enclosingDeclaration, importAdder) {
             var program = context.program;
             var checker = program.getTypeChecker();
             var scriptTarget = ts.getEmitScriptTarget(program.getCompilerOptions());
             var flags = 1 /* NoTruncation */ | 1073741824 /* NoUndefinedOptionalParameterType */ | 256 /* SuppressAnyReturnType */ | (quotePreference === 0 /* Single */ ? 268435456 /* UseSingleQuotesForStringLiteralType */ : 0);
-            var signatureDeclaration = checker.signatureToSignatureDeclaration(signature, 166 /* MethodDeclaration */, enclosingDeclaration, flags, getNoopSymbolTrackerWithResolver(context));
+            var signatureDeclaration = checker.signatureToSignatureDeclaration(signature, kind, enclosingDeclaration, flags, getNoopSymbolTrackerWithResolver(context));
             if (!signatureDeclaration) {
                 return undefined;
             }
@@ -146151,9 +149503,20 @@
                     }
                 }
             }
-            return ts.factory.updateMethodDeclaration(signatureDeclaration, 
-            /*decorators*/ undefined, modifiers, signatureDeclaration.asteriskToken, name, optional ? ts.factory.createToken(57 /* QuestionToken */) : undefined, typeParameters, parameters, type, body);
+            var questionToken = optional ? ts.factory.createToken(57 /* QuestionToken */) : undefined;
+            var asteriskToken = signatureDeclaration.asteriskToken;
+            if (ts.isFunctionExpression(signatureDeclaration)) {
+                return ts.factory.updateFunctionExpression(signatureDeclaration, modifiers, signatureDeclaration.asteriskToken, ts.tryCast(name, ts.isIdentifier), typeParameters, parameters, type, body !== null && body !== void 0 ? body : signatureDeclaration.body);
+            }
+            if (ts.isArrowFunction(signatureDeclaration)) {
+                return ts.factory.updateArrowFunction(signatureDeclaration, modifiers, typeParameters, parameters, type, signatureDeclaration.equalsGreaterThanToken, body !== null && body !== void 0 ? body : signatureDeclaration.body);
+            }
+            if (ts.isMethodDeclaration(signatureDeclaration)) {
+                return ts.factory.updateMethodDeclaration(signatureDeclaration, /* decorators */ undefined, modifiers, asteriskToken, name !== null && name !== void 0 ? name : ts.factory.createIdentifier(""), questionToken, typeParameters, parameters, type, body);
+            }
+            return undefined;
         }
+        codefix.createSignatureDeclarationFromSignature = createSignatureDeclarationFromSignature;
         function createSignatureDeclarationFromCallExpression(kind, context, importAdder, call, name, modifierFlags, contextNode) {
             var quotePreference = ts.getQuotePreference(context.sourceFile, context.preferences);
             var scriptTarget = ts.getEmitScriptTarget(context.program.getCompilerOptions());
@@ -146183,7 +149546,7 @@
             var type = isJs || contextualType === undefined
                 ? undefined
                 : checker.typeToTypeNode(contextualType, contextNode, /*flags*/ undefined, tracker);
-            if (kind === 166 /* MethodDeclaration */) {
+            if (kind === 167 /* MethodDeclaration */) {
                 return ts.factory.createMethodDeclaration(
                 /*decorators*/ undefined, modifiers, asteriskToken, name, 
                 /*questionToken*/ undefined, typeParameters, parameters, type, ts.isInterfaceDeclaration(contextNode) ? undefined : createStubbedMethodBody(quotePreference));
@@ -146198,10 +149561,11 @@
                 var importableReference = tryGetAutoImportableReferenceFromTypeNode(typeNode, scriptTarget);
                 if (importableReference) {
                     importSymbols(importAdder, importableReference.symbols);
-                    return importableReference.typeNode;
+                    typeNode = importableReference.typeNode;
                 }
             }
-            return typeNode;
+            // Ensure nodes are fresh so they can have different positions when going through formatting.
+            return ts.getSynthesizedDeepClone(typeNode);
         }
         codefix.typeToAutoImportableTypeNode = typeToAutoImportableTypeNode;
         function createDummyParameters(argCount, names, types, minArgumentCount, inJs) {
@@ -146213,7 +149577,7 @@
                 /*dotDotDotToken*/ undefined, 
                 /*name*/ names && names[i] || "arg" + i, 
                 /*questionToken*/ minArgumentCount !== undefined && i >= minArgumentCount ? ts.factory.createToken(57 /* QuestionToken */) : undefined, 
-                /*type*/ inJs ? undefined : types && types[i] || ts.factory.createKeywordTypeNode(128 /* AnyKeyword */), 
+                /*type*/ inJs ? undefined : types && types[i] || ts.factory.createKeywordTypeNode(129 /* AnyKeyword */), 
                 /*initializer*/ undefined);
                 parameters.push(newParameter);
             }
@@ -146241,7 +149605,7 @@
             var maxArgsParameterSymbolNames = maxArgsSignature.parameters.map(function (symbol) { return symbol.name; });
             var parameters = createDummyParameters(maxNonRestArgs, maxArgsParameterSymbolNames, /* types */ undefined, minArgumentCount, /*inJs*/ false);
             if (someSigHasRestParameter) {
-                var anyArrayType = ts.factory.createArrayTypeNode(ts.factory.createKeywordTypeNode(128 /* AnyKeyword */));
+                var anyArrayType = ts.factory.createArrayTypeNode(ts.factory.createKeywordTypeNode(129 /* AnyKeyword */));
                 var restParameter = ts.factory.createParameterDeclaration(
                 /*decorators*/ undefined, 
                 /*modifiers*/ undefined, ts.factory.createToken(25 /* DotDotDotToken */), maxArgsParameterSymbolNames[maxNonRestArgs] || "rest", 
@@ -146276,10 +149640,10 @@
         codefix.createStubbedBody = createStubbedBody;
         function createVisibilityModifier(flags) {
             if (flags & 4 /* Public */) {
-                return ts.factory.createToken(122 /* PublicKeyword */);
+                return ts.factory.createToken(123 /* PublicKeyword */);
             }
             else if (flags & 16 /* Protected */) {
-                return ts.factory.createToken(121 /* ProtectedKeyword */);
+                return ts.factory.createToken(122 /* ProtectedKeyword */);
             }
             return undefined;
         }
@@ -146352,7 +149716,7 @@
         }
         codefix.tryGetAutoImportableReferenceFromTypeNode = tryGetAutoImportableReferenceFromTypeNode;
         function replaceFirstIdentifierOfEntityName(name, newIdentifier) {
-            if (name.kind === 78 /* Identifier */) {
+            if (name.kind === 79 /* Identifier */) {
                 return newIdentifier;
             }
             return ts.factory.createQualifiedName(replaceFirstIdentifierOfEntityName(name.left, newIdentifier), name.right);
@@ -146468,7 +149832,7 @@
                 isStatic: ts.hasStaticModifier(declaration),
                 isReadonly: ts.hasEffectiveReadonlyModifier(declaration),
                 type: getDeclarationType(declaration, program),
-                container: declaration.kind === 161 /* Parameter */ ? declaration.parent.parent : declaration.parent,
+                container: declaration.kind === 162 /* Parameter */ ? declaration.parent.parent : declaration.parent,
                 originalName: declaration.name.text,
                 declaration: declaration,
                 fieldName: fieldName,
@@ -146524,13 +149888,13 @@
                 return;
             constructor.body.forEachChild(function recur(node) {
                 if (ts.isElementAccessExpression(node) &&
-                    node.expression.kind === 107 /* ThisKeyword */ &&
+                    node.expression.kind === 108 /* ThisKeyword */ &&
                     ts.isStringLiteral(node.argumentExpression) &&
                     node.argumentExpression.text === originalName &&
                     ts.isWriteAccess(node)) {
                     changeTracker.replaceNode(file, node.argumentExpression, ts.factory.createStringLiteral(fieldName));
                 }
-                if (ts.isPropertyAccessExpression(node) && node.expression.kind === 107 /* ThisKeyword */ && node.name.text === originalName && ts.isWriteAccess(node)) {
+                if (ts.isPropertyAccessExpression(node) && node.expression.kind === 108 /* ThisKeyword */ && node.name.text === originalName && ts.isWriteAccess(node)) {
                     changeTracker.replaceNode(file, node.name, ts.factory.createIdentifier(fieldName));
                 }
                 if (!ts.isFunctionLike(node) && !ts.isClassLike(node)) {
@@ -146545,7 +149909,7 @@
                 var type = typeChecker.getTypeFromTypeNode(typeNode);
                 if (!typeChecker.isTypeAssignableTo(typeChecker.getUndefinedType(), type)) {
                     var types = ts.isUnionTypeNode(typeNode) ? typeNode.types : [typeNode];
-                    return ts.factory.createUnionTypeNode(__spreadArray(__spreadArray([], types), [ts.factory.createKeywordTypeNode(150 /* UndefinedKeyword */)]));
+                    return ts.factory.createUnionTypeNode(__spreadArray(__spreadArray([], types, true), [ts.factory.createKeywordTypeNode(151 /* UndefinedKeyword */)], false));
                 }
             }
             return typeNode;
@@ -146604,7 +149968,7 @@
         });
         function getActionsForUsageOfInvalidImport(context) {
             var sourceFile = context.sourceFile;
-            var targetKind = ts.Diagnostics.This_expression_is_not_callable.code === context.errorCode ? 204 /* CallExpression */ : 205 /* NewExpression */;
+            var targetKind = ts.Diagnostics.This_expression_is_not_callable.code === context.errorCode ? 206 /* CallExpression */ : 207 /* NewExpression */;
             var node = ts.findAncestor(ts.getTokenAtPosition(sourceFile, context.span.start), function (a) { return a.kind === targetKind; });
             if (!node) {
                 return [];
@@ -146620,9 +149984,8 @@
                 ts.Diagnostics.Type_0_is_not_assignable_to_type_1.code,
                 ts.Diagnostics.Type_0_is_not_assignable_to_type_1_Two_different_types_with_this_name_exist_but_they_are_unrelated.code,
                 ts.Diagnostics.Type_predicate_0_is_not_assignable_to_1.code,
-                ts.Diagnostics.Property_0_of_type_1_is_not_assignable_to_string_index_type_2.code,
-                ts.Diagnostics.Property_0_of_type_1_is_not_assignable_to_numeric_index_type_2.code,
-                ts.Diagnostics.Numeric_index_type_0_is_not_assignable_to_string_index_type_1.code,
+                ts.Diagnostics.Property_0_of_type_1_is_not_assignable_to_2_index_type_3.code,
+                ts.Diagnostics._0_index_type_1_is_not_assignable_to_2_index_type_3.code,
                 ts.Diagnostics.Property_0_in_type_1_is_not_assignable_to_the_same_property_in_base_type_2.code,
                 ts.Diagnostics.Property_0_in_type_1_is_not_assignable_to_type_2.code,
                 ts.Diagnostics.Property_0_of_JSX_spread_attribute_is_not_assignable_to_target_property.code,
@@ -146649,8 +150012,8 @@
                 ts.addRange(fixes, getCodeFixesForImportDeclaration(context, relatedImport));
             }
             if (ts.isExpression(expr) && !(ts.isNamedDeclaration(expr.parent) && expr.parent.name === expr)) {
-                var sourceFile_1 = context.sourceFile;
-                var changes = ts.textChanges.ChangeTracker.with(context, function (t) { return t.replaceNode(sourceFile_1, expr, ts.factory.createPropertyAccessExpression(expr, "default"), {}); });
+                var sourceFile_2 = context.sourceFile;
+                var changes = ts.textChanges.ChangeTracker.with(context, function (t) { return t.replaceNode(sourceFile_2, expr, ts.factory.createPropertyAccessExpression(expr, "default"), {}); });
                 fixes.push(codefix.createCodeFixActionWithoutFixAll(fixName, changes, ts.Diagnostics.Use_synthetic_default_member));
             }
             return fixes;
@@ -146723,7 +150086,7 @@
             return codefix.createCodeFixAction(fixName, changes, [ts.Diagnostics.Add_undefined_type_to_property_0, propertyDeclaration.name.getText()], fixIdAddUndefinedType, ts.Diagnostics.Add_undefined_type_to_all_uninitialized_properties);
         }
         function addUndefinedType(changeTracker, propertyDeclarationSourceFile, propertyDeclaration) {
-            var undefinedTypeNode = ts.factory.createKeywordTypeNode(150 /* UndefinedKeyword */);
+            var undefinedTypeNode = ts.factory.createKeywordTypeNode(151 /* UndefinedKeyword */);
             var type = propertyDeclaration.type; // TODO: GH#18217
             var types = ts.isUnionTypeNode(type) ? type.types.concat(undefinedTypeNode) : [type, undefinedTypeNode];
             changeTracker.replaceNode(propertyDeclarationSourceFile, type, ts.factory.createUnionTypeNode(types));
@@ -146937,8 +150300,8 @@
         });
         function getImportTypeNode(sourceFile, pos) {
             var token = ts.getTokenAtPosition(sourceFile, pos);
-            ts.Debug.assert(token.kind === 99 /* ImportKeyword */, "This token should be an ImportKeyword");
-            ts.Debug.assert(token.parent.kind === 196 /* ImportType */, "Token parent should be an ImportType");
+            ts.Debug.assert(token.kind === 100 /* ImportKeyword */, "This token should be an ImportKeyword");
+            ts.Debug.assert(token.parent.kind === 198 /* ImportType */, "Token parent should be an ImportType");
             return token.parent;
         }
         function doChange(changes, sourceFile, importType) {
@@ -146957,10 +150320,6 @@
         codefix.registerCodeFix({
             errorCodes: errorCodes,
             getCodeActions: function (context) {
-                var jsx = context.program.getCompilerOptions().jsx;
-                if (jsx !== 2 /* React */ && jsx !== 3 /* ReactNative */) {
-                    return undefined;
-                }
                 var sourceFile = context.sourceFile, span = context.span;
                 var node = findNodeToFix(sourceFile, span.start);
                 if (!node)
@@ -147034,7 +150393,7 @@
     (function (codefix) {
         var fixIdAddMissingTypeof = "fixConvertToMappedObjectType";
         var fixId = fixIdAddMissingTypeof;
-        var errorCodes = [ts.Diagnostics.An_index_signature_parameter_type_cannot_be_a_union_type_Consider_using_a_mapped_object_type_instead.code];
+        var errorCodes = [ts.Diagnostics.An_index_signature_parameter_type_cannot_be_a_literal_type_or_generic_type_Consider_using_a_mapped_object_type_instead.code];
         codefix.registerCodeFix({
             errorCodes: errorCodes,
             getCodeActions: function (context) {
@@ -147070,11 +150429,11 @@
             var otherMembers = members.filter(function (member) { return !ts.isIndexSignatureDeclaration(member); });
             var parameter = ts.first(indexSignature.parameters);
             var mappedTypeParameter = ts.factory.createTypeParameterDeclaration(ts.cast(parameter.name, ts.isIdentifier), parameter.type);
-            var mappedIntersectionType = ts.factory.createMappedTypeNode(ts.hasEffectiveReadonlyModifier(indexSignature) ? ts.factory.createModifier(142 /* ReadonlyKeyword */) : undefined, mappedTypeParameter, 
+            var mappedIntersectionType = ts.factory.createMappedTypeNode(ts.hasEffectiveReadonlyModifier(indexSignature) ? ts.factory.createModifier(143 /* ReadonlyKeyword */) : undefined, mappedTypeParameter, 
             /*nameType*/ undefined, indexSignature.questionToken, indexSignature.type);
-            var intersectionType = ts.factory.createIntersectionTypeNode(__spreadArray(__spreadArray(__spreadArray([], ts.getAllSuperTypeNodes(container)), [
+            var intersectionType = ts.factory.createIntersectionTypeNode(__spreadArray(__spreadArray(__spreadArray([], ts.getAllSuperTypeNodes(container), true), [
                 mappedIntersectionType
-            ]), (otherMembers.length ? [ts.factory.createTypeLiteralNode(otherMembers)] : ts.emptyArray)));
+            ], false), (otherMembers.length ? [ts.factory.createTypeLiteralNode(otherMembers)] : ts.emptyArray), true));
             changes.replaceNode(sourceFile, container, createTypeAliasFromInterface(container, intersectionType));
         }
     })(codefix = ts.codefix || (ts.codefix = {}));
@@ -147127,7 +150486,7 @@
             },
         });
         function makeChange(changeTracker, sourceFile, span) {
-            var awaitKeyword = ts.tryCast(ts.getTokenAtPosition(sourceFile, span.start), function (node) { return node.kind === 130 /* AwaitKeyword */; });
+            var awaitKeyword = ts.tryCast(ts.getTokenAtPosition(sourceFile, span.start), function (node) { return node.kind === 131 /* AwaitKeyword */; });
             var awaitExpression = awaitKeyword && ts.tryCast(awaitKeyword.parent, ts.isAwaitExpression);
             if (!awaitExpression) {
                 return;
@@ -147138,7 +150497,7 @@
                 var leftMostExpression = ts.getLeftmostExpression(awaitExpression.expression, /*stopAtCallExpressions*/ false);
                 if (ts.isIdentifier(leftMostExpression)) {
                     var precedingToken = ts.findPrecedingToken(awaitExpression.parent.pos, sourceFile);
-                    if (precedingToken && precedingToken.kind !== 102 /* NewKeyword */) {
+                    if (precedingToken && precedingToken.kind !== 103 /* NewKeyword */) {
                         expressionToReplace = awaitExpression.parent;
                     }
                 }
@@ -147195,26 +150554,28 @@
             errorCodes: errorCodes,
             getCodeActions: function (context) {
                 var sourceFile = context.sourceFile, span = context.span, program = context.program;
-                var variableStatement = getVariableStatement(sourceFile, span.start, program);
-                var changes = ts.textChanges.ChangeTracker.with(context, function (t) { return doChange(t, sourceFile, variableStatement); });
+                var range = getConstTokenRange(sourceFile, span.start, program);
+                if (range === undefined)
+                    return;
+                var changes = ts.textChanges.ChangeTracker.with(context, function (t) { return doChange(t, sourceFile, range); });
                 return [codefix.createCodeFixAction(fixId, changes, ts.Diagnostics.Convert_const_to_let, fixId, ts.Diagnostics.Convert_const_to_let)];
             },
             fixIds: [fixId]
         });
-        function getVariableStatement(sourceFile, pos, program) {
-            var token = ts.getTokenAtPosition(sourceFile, pos);
+        function getConstTokenRange(sourceFile, pos, program) {
+            var _a;
             var checker = program.getTypeChecker();
-            var symbol = checker.getSymbolAtLocation(token);
-            if (symbol === null || symbol === void 0 ? void 0 : symbol.valueDeclaration) {
-                return symbol.valueDeclaration.parent.parent;
-            }
-        }
-        function doChange(changes, sourceFile, variableStatement) {
-            if (!variableStatement) {
+            var symbol = checker.getSymbolAtLocation(ts.getTokenAtPosition(sourceFile, pos));
+            var declaration = ts.tryCast((_a = symbol === null || symbol === void 0 ? void 0 : symbol.valueDeclaration) === null || _a === void 0 ? void 0 : _a.parent, ts.isVariableDeclarationList);
+            if (declaration === undefined)
                 return;
-            }
-            var start = variableStatement.getStart();
-            changes.replaceRangeWithText(sourceFile, { pos: start, end: start + 5 }, "let");
+            var constToken = ts.findChildOfKind(declaration, 85 /* ConstKeyword */, sourceFile);
+            if (constToken === undefined)
+                return;
+            return ts.createRange(constToken.pos, constToken.end);
+        }
+        function doChange(changes, sourceFile, range) {
+            changes.replaceRangeWithText(sourceFile, range, "let");
         }
     })(codefix = ts.codefix || (ts.codefix = {}));
 })(ts || (ts = {}));
@@ -147300,7 +150661,7 @@
                 // append ` | void` to type argument
                 var typeArgument = typeArguments[0];
                 var needsParens = !ts.isUnionTypeNode(typeArgument) && !ts.isParenthesizedTypeNode(typeArgument) &&
-                    ts.isParenthesizedTypeNode(ts.factory.createUnionTypeNode([typeArgument, ts.factory.createKeywordTypeNode(113 /* VoidKeyword */)]).types[0]);
+                    ts.isParenthesizedTypeNode(ts.factory.createUnionTypeNode([typeArgument, ts.factory.createKeywordTypeNode(114 /* VoidKeyword */)]).types[0]);
                 if (needsParens) {
                     changes.insertText(sourceFile, typeArgument.pos, "(");
                 }
@@ -147392,7 +150753,7 @@
         ;
         function getInfo(context, considerPartialSpans) {
             if (considerPartialSpans === void 0) { considerPartialSpans = true; }
-            var file = context.file;
+            var file = context.file, program = context.program;
             var span = ts.getRefactorContextSpan(context);
             var token = ts.getTokenAtPosition(file, span.start);
             var exportNode = !!(token.parent && ts.getSyntacticModifierFlags(token.parent) & 1 /* Export */) && considerPartialSpans ? token.parent : ts.getParentNodeInSpan(token, file, span);
@@ -147406,17 +150767,25 @@
             if (!(flags & 1 /* Export */) || !wasDefault && exportingModuleSymbol.exports.has("default" /* Default */)) {
                 return { error: ts.getLocaleSpecificMessage(ts.Diagnostics.This_file_already_has_a_default_export) };
             }
+            var checker = program.getTypeChecker();
+            var noSymbolError = function (id) {
+                return (ts.isIdentifier(id) && checker.getSymbolAtLocation(id)) ? undefined
+                    : { error: ts.getLocaleSpecificMessage(ts.Diagnostics.Can_only_convert_named_export) };
+            };
             switch (exportNode.kind) {
-                case 252 /* FunctionDeclaration */:
-                case 253 /* ClassDeclaration */:
-                case 254 /* InterfaceDeclaration */:
-                case 256 /* EnumDeclaration */:
-                case 255 /* TypeAliasDeclaration */:
-                case 257 /* ModuleDeclaration */: {
+                case 254 /* FunctionDeclaration */:
+                case 255 /* ClassDeclaration */:
+                case 256 /* InterfaceDeclaration */:
+                case 258 /* EnumDeclaration */:
+                case 257 /* TypeAliasDeclaration */:
+                case 259 /* ModuleDeclaration */: {
                     var node = exportNode;
-                    return node.name && ts.isIdentifier(node.name) ? { exportNode: node, exportName: node.name, wasDefault: wasDefault, exportingModuleSymbol: exportingModuleSymbol } : undefined;
+                    if (!node.name)
+                        return undefined;
+                    return noSymbolError(node.name)
+                        || { exportNode: node, exportName: node.name, wasDefault: wasDefault, exportingModuleSymbol: exportingModuleSymbol };
                 }
-                case 233 /* VariableStatement */: {
+                case 235 /* VariableStatement */: {
                     var vs = exportNode;
                     // Must be `export const x = something;`.
                     if (!(vs.declarationList.flags & 2 /* Const */) || vs.declarationList.declarations.length !== 1) {
@@ -147426,12 +150795,15 @@
                     if (!decl.initializer)
                         return undefined;
                     ts.Debug.assert(!wasDefault, "Can't have a default flag here");
-                    return ts.isIdentifier(decl.name) ? { exportNode: vs, exportName: decl.name, wasDefault: wasDefault, exportingModuleSymbol: exportingModuleSymbol } : undefined;
+                    return noSymbolError(decl.name)
+                        || { exportNode: vs, exportName: decl.name, wasDefault: wasDefault, exportingModuleSymbol: exportingModuleSymbol };
                 }
-                case 267 /* ExportAssignment */: {
+                case 269 /* ExportAssignment */: {
                     var node = exportNode;
-                    var exp = node.expression;
-                    return node.isExportEquals ? undefined : { exportNode: node, exportName: exp, wasDefault: wasDefault, exportingModuleSymbol: exportingModuleSymbol };
+                    if (node.isExportEquals)
+                        return undefined;
+                    return noSymbolError(node.expression)
+                        || { exportNode: node, exportName: node.expression, wasDefault: wasDefault, exportingModuleSymbol: exportingModuleSymbol };
                 }
                 default:
                     return undefined;
@@ -147450,18 +150822,18 @@
                     changes.replaceNode(exportingSourceFile, exportNode, ts.factory.createExportDeclaration(/*decorators*/ undefined, /*modifiers*/ undefined, /*isTypeOnly*/ false, ts.factory.createNamedExports([spec])));
                 }
                 else {
-                    changes.delete(exportingSourceFile, ts.Debug.checkDefined(ts.findModifier(exportNode, 87 /* DefaultKeyword */), "Should find a default keyword in modifier list"));
+                    changes.delete(exportingSourceFile, ts.Debug.checkDefined(ts.findModifier(exportNode, 88 /* DefaultKeyword */), "Should find a default keyword in modifier list"));
                 }
             }
             else {
-                var exportKeyword = ts.Debug.checkDefined(ts.findModifier(exportNode, 92 /* ExportKeyword */), "Should find an export keyword in modifier list");
+                var exportKeyword = ts.Debug.checkDefined(ts.findModifier(exportNode, 93 /* ExportKeyword */), "Should find an export keyword in modifier list");
                 switch (exportNode.kind) {
-                    case 252 /* FunctionDeclaration */:
-                    case 253 /* ClassDeclaration */:
-                    case 254 /* InterfaceDeclaration */:
-                        changes.insertNodeAfter(exportingSourceFile, exportKeyword, ts.factory.createToken(87 /* DefaultKeyword */));
+                    case 254 /* FunctionDeclaration */:
+                    case 255 /* ClassDeclaration */:
+                    case 256 /* InterfaceDeclaration */:
+                        changes.insertNodeAfter(exportingSourceFile, exportKeyword, ts.factory.createToken(88 /* DefaultKeyword */));
                         break;
-                    case 233 /* VariableStatement */:
+                    case 235 /* VariableStatement */:
                         // If 'x' isn't used in this file and doesn't have type definition, `export const x = 0;` --> `export default 0;`
                         var decl = ts.first(exportNode.declarationList.declarations);
                         if (!ts.FindAllReferences.Core.isSymbolReferencedInFile(exportName, checker, exportingSourceFile) && !decl.type) {
@@ -147470,9 +150842,9 @@
                             break;
                         }
                     // falls through
-                    case 256 /* EnumDeclaration */:
-                    case 255 /* TypeAliasDeclaration */:
-                    case 257 /* ModuleDeclaration */:
+                    case 258 /* EnumDeclaration */:
+                    case 257 /* TypeAliasDeclaration */:
+                    case 259 /* ModuleDeclaration */:
                         // `export type T = number;` -> `type T = number; export default T;`
                         changes.deleteModifier(exportingSourceFile, exportKeyword);
                         changes.insertNodeAfter(exportingSourceFile, exportNode, ts.factory.createExportDefault(ts.factory.createIdentifier(exportName.text)));
@@ -147499,18 +150871,18 @@
         function changeDefaultToNamedImport(importingSourceFile, ref, changes, exportName) {
             var parent = ref.parent;
             switch (parent.kind) {
-                case 202 /* PropertyAccessExpression */:
+                case 204 /* PropertyAccessExpression */:
                     // `a.default` --> `a.foo`
                     changes.replaceNode(importingSourceFile, ref, ts.factory.createIdentifier(exportName));
                     break;
-                case 266 /* ImportSpecifier */:
-                case 271 /* ExportSpecifier */: {
+                case 268 /* ImportSpecifier */:
+                case 273 /* ExportSpecifier */: {
                     var spec = parent;
                     // `default as foo` --> `foo`, `default as bar` --> `foo as bar`
                     changes.replaceNode(importingSourceFile, spec, makeImportSpecifier(exportName, spec.name.text));
                     break;
                 }
-                case 263 /* ImportClause */: {
+                case 265 /* ImportClause */: {
                     var clause = parent;
                     ts.Debug.assert(clause.name === ref, "Import clause name should match provided ref");
                     var spec = makeImportSpecifier(exportName, ref.text);
@@ -147519,7 +150891,7 @@
                         // `import foo from "./a";` --> `import { foo } from "./a";`
                         changes.replaceNode(importingSourceFile, ref, ts.factory.createNamedImports([spec]));
                     }
-                    else if (namedBindings.kind === 264 /* NamespaceImport */) {
+                    else if (namedBindings.kind === 266 /* NamespaceImport */) {
                         // `import foo, * as a from "./a";` --> `import * as a from ".a/"; import { foo } from "./a";`
                         changes.deleteRange(importingSourceFile, { pos: ref.getStart(importingSourceFile), end: namedBindings.getStart(importingSourceFile) });
                         var quotePreference = ts.isStringLiteral(clause.parent.moduleSpecifier) ? ts.quotePreferenceFromString(clause.parent.moduleSpecifier, importingSourceFile) : 1 /* Double */;
@@ -147540,11 +150912,11 @@
         function changeNamedToDefaultImport(importingSourceFile, ref, changes) {
             var parent = ref.parent;
             switch (parent.kind) {
-                case 202 /* PropertyAccessExpression */:
+                case 204 /* PropertyAccessExpression */:
                     // `a.foo` --> `a.default`
                     changes.replaceNode(importingSourceFile, ref, ts.factory.createIdentifier("default"));
                     break;
-                case 266 /* ImportSpecifier */: {
+                case 268 /* ImportSpecifier */: {
                     // `import { foo } from "./a";` --> `import foo from "./a";`
                     // `import { foo as bar } from "./a";` --> `import bar from "./a";`
                     var defaultImport = ts.factory.createIdentifier(parent.name.text);
@@ -147557,7 +150929,7 @@
                     }
                     break;
                 }
-                case 271 /* ExportSpecifier */: {
+                case 273 /* ExportSpecifier */: {
                     // `export { foo } from "./a";` --> `export { default as foo } from "./a";`
                     // `export { foo as bar } from "./a";` --> `export { default as bar } from "./a";`
                     // `export { foo as default } from "./a";` --> `export { default } from "./a";`
@@ -147603,7 +150975,7 @@
                 if (!info)
                     return ts.emptyArray;
                 if (!refactor.isRefactorErrorInfo(info)) {
-                    var namespaceImport = info.kind === 264 /* NamespaceImport */;
+                    var namespaceImport = info.kind === 266 /* NamespaceImport */;
                     var action = namespaceImport ? namespaceToNamedAction : namedToNamespaceAction;
                     return [{ name: refactorName, description: action.description, actions: [action] }];
                 }
@@ -147647,7 +151019,7 @@
         }
         function doChange(sourceFile, program, changes, toConvert) {
             var checker = program.getTypeChecker();
-            if (toConvert.kind === 264 /* NamespaceImport */) {
+            if (toConvert.kind === 266 /* NamespaceImport */) {
                 doChangeNamespaceToNamed(sourceFile, checker, changes, toConvert, ts.getAllowSyntheticDefaultImports(program.getCompilerOptions()));
             }
             else {
@@ -147704,14 +151076,35 @@
         function doChangeNamedToNamespace(sourceFile, checker, changes, toConvert) {
             var importDecl = toConvert.parent.parent;
             var moduleSpecifier = importDecl.moduleSpecifier;
-            var preferredName = moduleSpecifier && ts.isStringLiteral(moduleSpecifier) ? ts.codefix.moduleSpecifierToValidIdentifier(moduleSpecifier.text, 99 /* ESNext */) : "module";
-            var namespaceNameConflicts = toConvert.elements.some(function (element) {
-                return ts.FindAllReferences.Core.eachSymbolReferenceInFile(element.name, checker, sourceFile, function (id) {
-                    return !!checker.resolveName(preferredName, id, 67108863 /* All */, /*excludeGlobals*/ true);
-                }) || false;
+            var toConvertSymbols = new ts.Set();
+            toConvert.elements.forEach(function (namedImport) {
+                var symbol = checker.getSymbolAtLocation(namedImport.name);
+                if (symbol) {
+                    toConvertSymbols.add(symbol);
+                }
             });
+            var preferredName = moduleSpecifier && ts.isStringLiteral(moduleSpecifier) ? ts.codefix.moduleSpecifierToValidIdentifier(moduleSpecifier.text, 99 /* ESNext */) : "module";
+            function hasNamespaceNameConflict(namedImport) {
+                // We need to check if the preferred namespace name (`preferredName`) we'd like to use in the refactored code will present a name conflict.
+                // A name conflict means that, in a scope where we would like to use the preferred namespace name, there already exists a symbol with that name in that scope.
+                // We are going to use the namespace name in the scopes the named imports being refactored are referenced,
+                // so we look for conflicts by looking at every reference to those named imports.
+                return !!ts.FindAllReferences.Core.eachSymbolReferenceInFile(namedImport.name, checker, sourceFile, function (id) {
+                    var symbol = checker.resolveName(preferredName, id, 67108863 /* All */, /*excludeGlobals*/ true);
+                    if (symbol) { // There already is a symbol with the same name as the preferred namespace name.
+                        if (toConvertSymbols.has(symbol)) { // `preferredName` resolves to a symbol for one of the named import references we are going to transform into namespace import references...
+                            return ts.isExportSpecifier(id.parent); // ...but if this reference is an export specifier, it will not be transformed, so it is a conflict; otherwise, it will be renamed and is not a conflict.
+                        }
+                        return true; // `preferredName` resolves to any other symbol, which will be present in the refactored code and so poses a name conflict.
+                    }
+                    return false; // There is no symbol with the same name as the preferred namespace name, so no conflict.
+                });
+            }
+            var namespaceNameConflicts = toConvert.elements.some(hasNamespaceNameConflict);
             var namespaceImportName = namespaceNameConflicts ? ts.getUniqueName(preferredName, sourceFile) : preferredName;
-            var neededNamedImports = [];
+            // Imports that need to be kept as named imports in the refactored code, to avoid changing the semantics.
+            // More specifically, those are named imports that appear in named exports in the original code, e.g. `a` in `import { a } from "m"; export { a }`.
+            var neededNamedImports = new ts.Set();
             var _loop_16 = function (element) {
                 var propertyName = (element.propertyName || element.name).text;
                 ts.FindAllReferences.Core.eachSymbolReferenceInFile(element.name, checker, sourceFile, function (id) {
@@ -147719,10 +151112,8 @@
                     if (ts.isShorthandPropertyAssignment(id.parent)) {
                         changes.replaceNode(sourceFile, id.parent, ts.factory.createPropertyAssignment(id.text, access));
                     }
-                    else if (ts.isExportSpecifier(id.parent) && !id.parent.propertyName) {
-                        if (!neededNamedImports.some(function (n) { return n.name === element.name; })) {
-                            neededNamedImports.push(ts.factory.createImportSpecifier(element.propertyName && ts.factory.createIdentifier(element.propertyName.text), ts.factory.createIdentifier(element.name.text)));
-                        }
+                    else if (ts.isExportSpecifier(id.parent)) {
+                        neededNamedImports.add(element);
                     }
                     else {
                         changes.replaceNode(sourceFile, id, access);
@@ -147734,8 +151125,11 @@
                 _loop_16(element);
             }
             changes.replaceNode(sourceFile, toConvert, ts.factory.createNamespaceImport(ts.factory.createIdentifier(namespaceImportName)));
-            if (neededNamedImports.length) {
-                changes.insertNodeAfter(sourceFile, toConvert.parent.parent, updateImport(importDecl, /*defaultImportName*/ undefined, neededNamedImports));
+            if (neededNamedImports.size) {
+                var newNamedImports = ts.arrayFrom(neededNamedImports.values()).map(function (element) {
+                    return ts.factory.createImportSpecifier(element.propertyName && ts.factory.createIdentifier(element.propertyName.text), ts.factory.createIdentifier(element.name.text));
+                });
+                changes.insertNodeAfter(sourceFile, toConvert.parent.parent, updateImport(importDecl, /*defaultImportName*/ undefined, newNamedImports));
             }
         }
         function updateImport(old, defaultImportName, elements) {
@@ -148048,27 +151442,27 @@
                 var lastDeclaration = signatureDecls[signatureDecls.length - 1];
                 var updated = lastDeclaration;
                 switch (lastDeclaration.kind) {
-                    case 165 /* MethodSignature */: {
+                    case 166 /* MethodSignature */: {
                         updated = ts.factory.updateMethodSignature(lastDeclaration, lastDeclaration.modifiers, lastDeclaration.name, lastDeclaration.questionToken, lastDeclaration.typeParameters, getNewParametersForCombinedSignature(signatureDecls), lastDeclaration.type);
                         break;
                     }
-                    case 166 /* MethodDeclaration */: {
+                    case 167 /* MethodDeclaration */: {
                         updated = ts.factory.updateMethodDeclaration(lastDeclaration, lastDeclaration.decorators, lastDeclaration.modifiers, lastDeclaration.asteriskToken, lastDeclaration.name, lastDeclaration.questionToken, lastDeclaration.typeParameters, getNewParametersForCombinedSignature(signatureDecls), lastDeclaration.type, lastDeclaration.body);
                         break;
                     }
-                    case 170 /* CallSignature */: {
+                    case 172 /* CallSignature */: {
                         updated = ts.factory.updateCallSignature(lastDeclaration, lastDeclaration.typeParameters, getNewParametersForCombinedSignature(signatureDecls), lastDeclaration.type);
                         break;
                     }
-                    case 167 /* Constructor */: {
+                    case 169 /* Constructor */: {
                         updated = ts.factory.updateConstructorDeclaration(lastDeclaration, lastDeclaration.decorators, lastDeclaration.modifiers, getNewParametersForCombinedSignature(signatureDecls), lastDeclaration.body);
                         break;
                     }
-                    case 171 /* ConstructSignature */: {
+                    case 173 /* ConstructSignature */: {
                         updated = ts.factory.updateConstructSignature(lastDeclaration, lastDeclaration.typeParameters, getNewParametersForCombinedSignature(signatureDecls), lastDeclaration.type);
                         break;
                     }
-                    case 252 /* FunctionDeclaration */: {
+                    case 254 /* FunctionDeclaration */: {
                         updated = ts.factory.updateFunctionDeclaration(lastDeclaration, lastDeclaration.decorators, lastDeclaration.modifiers, lastDeclaration.asteriskToken, lastDeclaration.name, lastDeclaration.typeParameters, getNewParametersForCombinedSignature(signatureDecls), lastDeclaration.type, lastDeclaration.body);
                         break;
                     }
@@ -148100,7 +151494,7 @@
                 }
                 function convertParameterToNamedTupleMember(p) {
                     ts.Debug.assert(ts.isIdentifier(p.name)); // This is checked during refactoring applicability checking
-                    var result = ts.setTextRange(ts.factory.createNamedTupleMember(p.dotDotDotToken, p.name, p.questionToken, p.type || ts.factory.createKeywordTypeNode(128 /* AnyKeyword */)), p);
+                    var result = ts.setTextRange(ts.factory.createNamedTupleMember(p.dotDotDotToken, p.name, p.questionToken, p.type || ts.factory.createKeywordTypeNode(129 /* AnyKeyword */)), p);
                     var parameterDocComment = p.symbol && p.symbol.getDocumentationComment(checker);
                     if (parameterDocComment) {
                         var newComment = ts.displayPartsToString(parameterDocComment);
@@ -148120,12 +151514,12 @@
             }
             function isConvertableSignatureDeclaration(d) {
                 switch (d.kind) {
-                    case 165 /* MethodSignature */:
-                    case 166 /* MethodDeclaration */:
-                    case 170 /* CallSignature */:
-                    case 167 /* Constructor */:
-                    case 171 /* ConstructSignature */:
-                    case 252 /* FunctionDeclaration */:
+                    case 166 /* MethodSignature */:
+                    case 167 /* MethodDeclaration */:
+                    case 172 /* CallSignature */:
+                    case 169 /* Constructor */:
+                    case 173 /* ConstructSignature */:
+                    case 254 /* FunctionDeclaration */:
                         return true;
                 }
                 return false;
@@ -148377,7 +151771,6 @@
                 Messages.cannotExtractReadonlyPropertyInitializerOutsideConstructor = createMessage("Cannot move initialization of read-only class property outside of the constructor");
                 Messages.cannotExtractAmbientBlock = createMessage("Cannot extract code from ambient contexts");
                 Messages.cannotAccessVariablesFromNestedScopes = createMessage("Cannot access variables from nested scopes");
-                Messages.cannotExtractToOtherFunctionLike = createMessage("Cannot extract method to a function-like scope that is not a function");
                 Messages.cannotExtractToJSClass = createMessage("Cannot extract constant to a class scope in JS");
                 Messages.cannotExtractToExpressionArrowFunction = createMessage("Cannot extract constant to an arrow function without a block");
             })(Messages = extractSymbol.Messages || (extractSymbol.Messages = {}));
@@ -148515,21 +151908,21 @@
                 function checkForStaticContext(nodeToCheck, containingClass) {
                     var current = nodeToCheck;
                     while (current !== containingClass) {
-                        if (current.kind === 164 /* PropertyDeclaration */) {
-                            if (ts.hasSyntacticModifier(current, 32 /* Static */)) {
+                        if (current.kind === 165 /* PropertyDeclaration */) {
+                            if (ts.isStatic(current)) {
                                 rangeFacts |= RangeFacts.InStaticRegion;
                             }
                             break;
                         }
-                        else if (current.kind === 161 /* Parameter */) {
+                        else if (current.kind === 162 /* Parameter */) {
                             var ctorOrMethod = ts.getContainingFunction(current);
-                            if (ctorOrMethod.kind === 167 /* Constructor */) {
+                            if (ctorOrMethod.kind === 169 /* Constructor */) {
                                 rangeFacts |= RangeFacts.InStaticRegion;
                             }
                             break;
                         }
-                        else if (current.kind === 166 /* MethodDeclaration */) {
-                            if (ts.hasSyntacticModifier(current, 32 /* Static */)) {
+                        else if (current.kind === 167 /* MethodDeclaration */) {
+                            if (ts.isStatic(current)) {
                                 rangeFacts |= RangeFacts.InStaticRegion;
                             }
                         }
@@ -148571,7 +151964,7 @@
                             return true;
                         }
                         if (ts.isDeclaration(node)) {
-                            var declaringNode = (node.kind === 250 /* VariableDeclaration */) ? node.parent.parent : node;
+                            var declaringNode = (node.kind === 252 /* VariableDeclaration */) ? node.parent.parent : node;
                             if (ts.hasSyntacticModifier(declaringNode, 1 /* Export */)) {
                                 // TODO: GH#18217 Silly to use `errors ||` since it's definitely not defined (see top of `visit`)
                                 // Also, if we're only pushing one error, just use `let error: Diagnostic | undefined`!
@@ -148583,16 +151976,16 @@
                         }
                         // Some things can't be extracted in certain situations
                         switch (node.kind) {
-                            case 262 /* ImportDeclaration */:
+                            case 264 /* ImportDeclaration */:
                                 (errors || (errors = [])).push(ts.createDiagnosticForNode(node, Messages.cannotExtractImport));
                                 return true;
-                            case 267 /* ExportAssignment */:
+                            case 269 /* ExportAssignment */:
                                 (errors || (errors = [])).push(ts.createDiagnosticForNode(node, Messages.cannotExtractExportedEntity));
                                 return true;
-                            case 105 /* SuperKeyword */:
+                            case 106 /* SuperKeyword */:
                                 // For a super *constructor call*, we have to be extracting the entire class,
                                 // but a super *method call* simply implies a 'this' reference
-                                if (node.parent.kind === 204 /* CallExpression */) {
+                                if (node.parent.kind === 206 /* CallExpression */) {
                                     // Super constructor call
                                     var containingClass_1 = ts.getContainingClass(node); // TODO:GH#18217
                                     if (containingClass_1.pos < span.start || containingClass_1.end >= (span.start + span.length)) {
@@ -148604,7 +151997,7 @@
                                     rangeFacts |= RangeFacts.UsesThis;
                                 }
                                 break;
-                            case 210 /* ArrowFunction */:
+                            case 212 /* ArrowFunction */:
                                 // check if arrow function uses this
                                 ts.forEachChild(node, function check(n) {
                                     if (ts.isThis(n)) {
@@ -148618,39 +152011,39 @@
                                     }
                                 });
                             // falls through
-                            case 253 /* ClassDeclaration */:
-                            case 252 /* FunctionDeclaration */:
+                            case 255 /* ClassDeclaration */:
+                            case 254 /* FunctionDeclaration */:
                                 if (ts.isSourceFile(node.parent) && node.parent.externalModuleIndicator === undefined) {
                                     // You cannot extract global declarations
                                     (errors || (errors = [])).push(ts.createDiagnosticForNode(node, Messages.functionWillNotBeVisibleInTheNewScope));
                                 }
                             // falls through
-                            case 222 /* ClassExpression */:
-                            case 209 /* FunctionExpression */:
-                            case 166 /* MethodDeclaration */:
-                            case 167 /* Constructor */:
-                            case 168 /* GetAccessor */:
-                            case 169 /* SetAccessor */:
+                            case 224 /* ClassExpression */:
+                            case 211 /* FunctionExpression */:
+                            case 167 /* MethodDeclaration */:
+                            case 169 /* Constructor */:
+                            case 170 /* GetAccessor */:
+                            case 171 /* SetAccessor */:
                                 // do not dive into functions or classes
                                 return false;
                         }
                         var savedPermittedJumps = permittedJumps;
                         switch (node.kind) {
-                            case 235 /* IfStatement */:
+                            case 237 /* IfStatement */:
                                 permittedJumps = 0 /* None */;
                                 break;
-                            case 248 /* TryStatement */:
+                            case 250 /* TryStatement */:
                                 // forbid all jumps inside try blocks
                                 permittedJumps = 0 /* None */;
                                 break;
-                            case 231 /* Block */:
-                                if (node.parent && node.parent.kind === 248 /* TryStatement */ && node.parent.finallyBlock === node) {
+                            case 233 /* Block */:
+                                if (node.parent && node.parent.kind === 250 /* TryStatement */ && node.parent.finallyBlock === node) {
                                     // allow unconditional returns from finally blocks
                                     permittedJumps = 4 /* Return */;
                                 }
                                 break;
-                            case 286 /* DefaultClause */:
-                            case 285 /* CaseClause */:
+                            case 288 /* DefaultClause */:
+                            case 287 /* CaseClause */:
                                 // allow unlabeled break inside case clauses
                                 permittedJumps |= 1 /* Break */;
                                 break;
@@ -148662,19 +152055,19 @@
                                 break;
                         }
                         switch (node.kind) {
-                            case 188 /* ThisType */:
-                            case 107 /* ThisKeyword */:
+                            case 190 /* ThisType */:
+                            case 108 /* ThisKeyword */:
                                 rangeFacts |= RangeFacts.UsesThis;
                                 break;
-                            case 246 /* LabeledStatement */: {
+                            case 248 /* LabeledStatement */: {
                                 var label = node.label;
                                 (seenLabels || (seenLabels = [])).push(label.escapedText);
                                 ts.forEachChild(node, visit);
                                 seenLabels.pop();
                                 break;
                             }
-                            case 242 /* BreakStatement */:
-                            case 241 /* ContinueStatement */: {
+                            case 244 /* BreakStatement */:
+                            case 243 /* ContinueStatement */: {
                                 var label = node.label;
                                 if (label) {
                                     if (!ts.contains(seenLabels, label.escapedText)) {
@@ -148683,20 +152076,20 @@
                                     }
                                 }
                                 else {
-                                    if (!(permittedJumps & (node.kind === 242 /* BreakStatement */ ? 1 /* Break */ : 2 /* Continue */))) {
+                                    if (!(permittedJumps & (node.kind === 244 /* BreakStatement */ ? 1 /* Break */ : 2 /* Continue */))) {
                                         // attempt to break or continue in a forbidden context
                                         (errors || (errors = [])).push(ts.createDiagnosticForNode(node, Messages.cannotExtractRangeContainingConditionalBreakOrContinueStatements));
                                     }
                                 }
                                 break;
                             }
-                            case 214 /* AwaitExpression */:
+                            case 216 /* AwaitExpression */:
                                 rangeFacts |= RangeFacts.IsAsyncFunction;
                                 break;
-                            case 220 /* YieldExpression */:
+                            case 222 /* YieldExpression */:
                                 rangeFacts |= RangeFacts.IsGenerator;
                                 break;
-                            case 243 /* ReturnStatement */:
+                            case 245 /* ReturnStatement */:
                                 if (permittedJumps & 4 /* Return */) {
                                     rangeFacts |= RangeFacts.HasReturn;
                                 }
@@ -148762,7 +152155,7 @@
                 while (true) {
                     current = current.parent;
                     // A function parameter's initializer is actually in the outer scope, not the function declaration
-                    if (current.kind === 161 /* Parameter */) {
+                    if (current.kind === 162 /* Parameter */) {
                         // Skip all the way to the outer scope of the function that declared this parameter
                         current = ts.findAncestor(current, function (parent) { return ts.isFunctionLikeDeclaration(parent); }).parent;
                     }
@@ -148773,7 +152166,7 @@
                     //  * Module/namespace or source file
                     if (isScope(current)) {
                         scopes.push(current);
-                        if (current.kind === 298 /* SourceFile */) {
+                        if (current.kind === 300 /* SourceFile */) {
                             return scopes;
                         }
                     }
@@ -148863,32 +152256,32 @@
             }
             function getDescriptionForFunctionLikeDeclaration(scope) {
                 switch (scope.kind) {
-                    case 167 /* Constructor */:
+                    case 169 /* Constructor */:
                         return "constructor";
-                    case 209 /* FunctionExpression */:
-                    case 252 /* FunctionDeclaration */:
+                    case 211 /* FunctionExpression */:
+                    case 254 /* FunctionDeclaration */:
                         return scope.name
                             ? "function '" + scope.name.text + "'"
                             : ts.ANONYMOUS;
-                    case 210 /* ArrowFunction */:
+                    case 212 /* ArrowFunction */:
                         return "arrow function";
-                    case 166 /* MethodDeclaration */:
+                    case 167 /* MethodDeclaration */:
                         return "method '" + scope.name.getText() + "'";
-                    case 168 /* GetAccessor */:
+                    case 170 /* GetAccessor */:
                         return "'get " + scope.name.getText() + "'";
-                    case 169 /* SetAccessor */:
+                    case 171 /* SetAccessor */:
                         return "'set " + scope.name.getText() + "'";
                     default:
                         throw ts.Debug.assertNever(scope, "Unexpected scope kind " + scope.kind);
                 }
             }
             function getDescriptionForClassLikeDeclaration(scope) {
-                return scope.kind === 253 /* ClassDeclaration */
+                return scope.kind === 255 /* ClassDeclaration */
                     ? scope.name ? "class '" + scope.name.text + "'" : "anonymous class declaration"
                     : scope.name ? "class expression '" + scope.name.text + "'" : "anonymous class expression";
             }
             function getDescriptionForModuleLikeDeclaration(scope) {
-                return scope.kind === 258 /* ModuleBlock */
+                return scope.kind === 260 /* ModuleBlock */
                     ? "namespace '" + scope.parent.name.getText() + "'"
                     : scope.externalModuleIndicator ? 0 /* Module */ : 1 /* Global */;
             }
@@ -148956,12 +152349,12 @@
                 var newFunction;
                 if (ts.isClassLike(scope)) {
                     // always create private method in TypeScript files
-                    var modifiers = isJS ? [] : [ts.factory.createModifier(120 /* PrivateKeyword */)];
+                    var modifiers = isJS ? [] : [ts.factory.createModifier(121 /* PrivateKeyword */)];
                     if (range.facts & RangeFacts.InStaticRegion) {
-                        modifiers.push(ts.factory.createModifier(123 /* StaticKeyword */));
+                        modifiers.push(ts.factory.createModifier(124 /* StaticKeyword */));
                     }
                     if (range.facts & RangeFacts.IsAsyncFunction) {
-                        modifiers.push(ts.factory.createModifier(129 /* AsyncKeyword */));
+                        modifiers.push(ts.factory.createModifier(130 /* AsyncKeyword */));
                     }
                     newFunction = ts.factory.createMethodDeclaration(
                     /*decorators*/ undefined, modifiers.length ? modifiers : undefined, range.facts & RangeFacts.IsGenerator ? ts.factory.createToken(41 /* AsteriskToken */) : undefined, functionName, 
@@ -148969,7 +152362,7 @@
                 }
                 else {
                     newFunction = ts.factory.createFunctionDeclaration(
-                    /*decorators*/ undefined, range.facts & RangeFacts.IsAsyncFunction ? [ts.factory.createToken(129 /* AsyncKeyword */)] : undefined, range.facts & RangeFacts.IsGenerator ? ts.factory.createToken(41 /* AsteriskToken */) : undefined, functionName, typeParameters, parameters, returnType, body);
+                    /*decorators*/ undefined, range.facts & RangeFacts.IsAsyncFunction ? [ts.factory.createToken(130 /* AsyncKeyword */)] : undefined, range.facts & RangeFacts.IsGenerator ? ts.factory.createToken(41 /* AsteriskToken */) : undefined, functionName, typeParameters, parameters, returnType, body);
                 }
                 var changeTracker = ts.textChanges.ChangeTracker.fromContext(context);
                 var minInsertionPos = (isReadonlyArray(range.range) ? ts.last(range.range) : range.range).end;
@@ -149114,9 +152507,9 @@
                     while (ts.isParenthesizedTypeNode(withoutParens)) {
                         withoutParens = withoutParens.type;
                     }
-                    return ts.isUnionTypeNode(withoutParens) && ts.find(withoutParens.types, function (t) { return t.kind === 150 /* UndefinedKeyword */; })
+                    return ts.isUnionTypeNode(withoutParens) && ts.find(withoutParens.types, function (t) { return t.kind === 151 /* UndefinedKeyword */; })
                         ? clone
-                        : ts.factory.createUnionTypeNode([clone, ts.factory.createKeywordTypeNode(150 /* UndefinedKeyword */)]);
+                        : ts.factory.createUnionTypeNode([clone, ts.factory.createKeywordTypeNode(151 /* UndefinedKeyword */)]);
                 }
             }
             /**
@@ -149141,11 +152534,11 @@
                 if (ts.isClassLike(scope)) {
                     ts.Debug.assert(!isJS, "Cannot extract to a JS class"); // See CannotExtractToJSClass
                     var modifiers = [];
-                    modifiers.push(ts.factory.createModifier(120 /* PrivateKeyword */));
+                    modifiers.push(ts.factory.createModifier(121 /* PrivateKeyword */));
                     if (rangeFacts & RangeFacts.InStaticRegion) {
-                        modifiers.push(ts.factory.createModifier(123 /* StaticKeyword */));
+                        modifiers.push(ts.factory.createModifier(124 /* StaticKeyword */));
                     }
-                    modifiers.push(ts.factory.createModifier(142 /* ReadonlyKeyword */));
+                    modifiers.push(ts.factory.createModifier(143 /* ReadonlyKeyword */));
                     var newVariable = ts.factory.createPropertyDeclaration(
                     /*decorators*/ undefined, modifiers, localNameText, 
                     /*questionToken*/ undefined, variableType, initializer);
@@ -149177,7 +152570,7 @@
                         var localReference = ts.factory.createIdentifier(localNameText);
                         changeTracker.replaceNode(context.file, node, localReference);
                     }
-                    else if (node.parent.kind === 234 /* ExpressionStatement */ && scope === ts.findAncestor(node, isScope)) {
+                    else if (node.parent.kind === 236 /* ExpressionStatement */ && scope === ts.findAncestor(node, isScope)) {
                         // If the parent is an expression statement and the target scope is the immediately enclosing one,
                         // replace the statement with the declaration.
                         var newVariableStatement = ts.factory.createVariableStatement(
@@ -149196,7 +152589,7 @@
                             changeTracker.insertNodeBefore(context.file, nodeToInsertBefore, newVariableStatement, /*blankLineBetween*/ false);
                         }
                         // Consume
-                        if (node.parent.kind === 234 /* ExpressionStatement */) {
+                        if (node.parent.kind === 236 /* ExpressionStatement */) {
                             // If the parent is an expression statement, delete it.
                             changeTracker.delete(context.file, node.parent);
                         }
@@ -149523,9 +152916,7 @@
                     var scope = scopes_1[_i];
                     usagesPerScope.push({ usages: new ts.Map(), typeParameterUsages: new ts.Map(), substitutions: new ts.Map() });
                     substitutionsPerScope.push(new ts.Map());
-                    functionErrorsPerScope.push(ts.isFunctionLikeDeclaration(scope) && scope.kind !== 252 /* FunctionDeclaration */
-                        ? [ts.createDiagnosticForNode(scope, Messages.cannotExtractToOtherFunctionLike)]
-                        : []);
+                    functionErrorsPerScope.push([]);
                     var constantErrors = [];
                     if (expressionDiagnostic) {
                         constantErrors.push(expressionDiagnostic);
@@ -149842,37 +153233,37 @@
             function isExtractableExpression(node) {
                 var parent = node.parent;
                 switch (parent.kind) {
-                    case 292 /* EnumMember */:
+                    case 294 /* EnumMember */:
                         return false;
                 }
                 switch (node.kind) {
                     case 10 /* StringLiteral */:
-                        return parent.kind !== 262 /* ImportDeclaration */ &&
-                            parent.kind !== 266 /* ImportSpecifier */;
-                    case 221 /* SpreadElement */:
-                    case 197 /* ObjectBindingPattern */:
-                    case 199 /* BindingElement */:
+                        return parent.kind !== 264 /* ImportDeclaration */ &&
+                            parent.kind !== 268 /* ImportSpecifier */;
+                    case 223 /* SpreadElement */:
+                    case 199 /* ObjectBindingPattern */:
+                    case 201 /* BindingElement */:
                         return false;
-                    case 78 /* Identifier */:
-                        return parent.kind !== 199 /* BindingElement */ &&
-                            parent.kind !== 266 /* ImportSpecifier */ &&
-                            parent.kind !== 271 /* ExportSpecifier */;
+                    case 79 /* Identifier */:
+                        return parent.kind !== 201 /* BindingElement */ &&
+                            parent.kind !== 268 /* ImportSpecifier */ &&
+                            parent.kind !== 273 /* ExportSpecifier */;
                 }
                 return true;
             }
             function isBlockLike(node) {
                 switch (node.kind) {
-                    case 231 /* Block */:
-                    case 298 /* SourceFile */:
-                    case 258 /* ModuleBlock */:
-                    case 285 /* CaseClause */:
+                    case 233 /* Block */:
+                    case 300 /* SourceFile */:
+                    case 260 /* ModuleBlock */:
+                    case 287 /* CaseClause */:
                         return true;
                     default:
                         return false;
                 }
             }
             function isInJSXContent(node) {
-                return (ts.isJsxElement(node) || ts.isJsxSelfClosingElement(node) || ts.isJsxFragment(node)) && ts.isJsxElement(node.parent);
+                return (ts.isJsxElement(node) || ts.isJsxSelfClosingElement(node) || ts.isJsxFragment(node)) && (ts.isJsxElement(node.parent) || ts.isJsxFragment(node.parent));
             }
         })(extractSymbol = refactor.extractSymbol || (refactor.extractSymbol = {}));
     })(refactor = ts.refactor || (ts.refactor = {}));
@@ -150250,11 +153641,11 @@
         }
         function isPureImport(node) {
             switch (node.kind) {
-                case 262 /* ImportDeclaration */:
+                case 264 /* ImportDeclaration */:
                     return true;
-                case 261 /* ImportEqualsDeclaration */:
+                case 263 /* ImportEqualsDeclaration */:
                     return !ts.hasSyntacticModifier(node, 1 /* Export */);
-                case 233 /* VariableStatement */:
+                case 235 /* VariableStatement */:
                     return node.declarationList.declarations.every(function (d) { return !!d.initializer && ts.isRequireCall(d.initializer, /*checkArgumentIsStringLiteralLike*/ true); });
                 default:
                     return false;
@@ -150279,7 +153670,7 @@
             var prologueDirectives = ts.takeWhile(oldFile.statements, ts.isPrologueDirective);
             if (!oldFile.externalModuleIndicator && !oldFile.commonJsModuleIndicator) {
                 deleteMovedStatements(oldFile, toMove.ranges, changes);
-                return __spreadArray(__spreadArray([], prologueDirectives), toMove.all);
+                return __spreadArray(__spreadArray([], prologueDirectives, true), toMove.all, true);
             }
             var useEs6ModuleSyntax = !!oldFile.externalModuleIndicator;
             var quotePreference = ts.getQuotePreference(oldFile, preferences);
@@ -150293,11 +153684,11 @@
             var imports = getNewFileImportsAndAddExportInOldFile(oldFile, usage.oldImportsNeededByNewFile, usage.newFileImportsFromOldFile, changes, checker, useEs6ModuleSyntax, quotePreference);
             var body = addExports(oldFile, toMove.all, usage.oldFileImportsFromNewFile, useEs6ModuleSyntax);
             if (imports.length && body.length) {
-                return __spreadArray(__spreadArray(__spreadArray(__spreadArray([], prologueDirectives), imports), [
+                return __spreadArray(__spreadArray(__spreadArray(__spreadArray([], prologueDirectives, true), imports, true), [
                     4 /* NewLineTrivia */
-                ]), body);
+                ], false), body, true);
             }
-            return __spreadArray(__spreadArray(__spreadArray([], prologueDirectives), imports), body);
+            return __spreadArray(__spreadArray(__spreadArray([], prologueDirectives, true), imports, true), body, true);
         }
         function deleteMovedStatements(sourceFile, moved, changes) {
             for (var _i = 0, moved_1 = moved; _i < moved_1.length; _i++) {
@@ -150350,12 +153741,12 @@
         }
         function getNamespaceLikeImport(node) {
             switch (node.kind) {
-                case 262 /* ImportDeclaration */:
-                    return node.importClause && node.importClause.namedBindings && node.importClause.namedBindings.kind === 264 /* NamespaceImport */ ?
+                case 264 /* ImportDeclaration */:
+                    return node.importClause && node.importClause.namedBindings && node.importClause.namedBindings.kind === 266 /* NamespaceImport */ ?
                         node.importClause.namedBindings.name : undefined;
-                case 261 /* ImportEqualsDeclaration */:
+                case 263 /* ImportEqualsDeclaration */:
                     return node.name;
-                case 250 /* VariableDeclaration */:
+                case 252 /* VariableDeclaration */:
                     return ts.tryCast(node.name, ts.isIdentifier);
                 default:
                     return ts.Debug.assertNever(node, "Unexpected node kind " + node.kind);
@@ -150386,20 +153777,20 @@
             var newNamespaceId = ts.factory.createIdentifier(newNamespaceName);
             var newModuleString = ts.factory.createStringLiteral(newModuleSpecifier);
             switch (node.kind) {
-                case 262 /* ImportDeclaration */:
+                case 264 /* ImportDeclaration */:
                     return ts.factory.createImportDeclaration(
                     /*decorators*/ undefined, /*modifiers*/ undefined, ts.factory.createImportClause(/*isTypeOnly*/ false, /*name*/ undefined, ts.factory.createNamespaceImport(newNamespaceId)), newModuleString);
-                case 261 /* ImportEqualsDeclaration */:
+                case 263 /* ImportEqualsDeclaration */:
                     return ts.factory.createImportEqualsDeclaration(/*decorators*/ undefined, /*modifiers*/ undefined, /*isTypeOnly*/ false, newNamespaceId, ts.factory.createExternalModuleReference(newModuleString));
-                case 250 /* VariableDeclaration */:
+                case 252 /* VariableDeclaration */:
                     return ts.factory.createVariableDeclaration(newNamespaceId, /*exclamationToken*/ undefined, /*type*/ undefined, createRequireCall(newModuleString));
                 default:
                     return ts.Debug.assertNever(node, "Unexpected node kind " + node.kind);
             }
         }
         function moduleSpecifierFromImport(i) {
-            return (i.kind === 262 /* ImportDeclaration */ ? i.moduleSpecifier
-                : i.kind === 261 /* ImportEqualsDeclaration */ ? i.moduleReference.expression
+            return (i.kind === 264 /* ImportDeclaration */ ? i.moduleSpecifier
+                : i.kind === 263 /* ImportEqualsDeclaration */ ? i.moduleReference.expression
                     : i.initializer.arguments[0]);
         }
         function forEachImportInStatement(statement, cb) {
@@ -150469,15 +153860,15 @@
         }
         function deleteUnusedImports(sourceFile, importDecl, changes, isUnused) {
             switch (importDecl.kind) {
-                case 262 /* ImportDeclaration */:
+                case 264 /* ImportDeclaration */:
                     deleteUnusedImportsInDeclaration(sourceFile, importDecl, changes, isUnused);
                     break;
-                case 261 /* ImportEqualsDeclaration */:
+                case 263 /* ImportEqualsDeclaration */:
                     if (isUnused(importDecl.name)) {
                         changes.delete(sourceFile, importDecl);
                     }
                     break;
-                case 250 /* VariableDeclaration */:
+                case 252 /* VariableDeclaration */:
                     deleteUnusedImportsInVariableDeclaration(sourceFile, importDecl, changes, isUnused);
                     break;
                 default:
@@ -150490,7 +153881,7 @@
             var _a = importDecl.importClause, name = _a.name, namedBindings = _a.namedBindings;
             var defaultUnused = !name || isUnused(name);
             var namedBindingsUnused = !namedBindings ||
-                (namedBindings.kind === 264 /* NamespaceImport */ ? isUnused(namedBindings.name) : namedBindings.elements.length !== 0 && namedBindings.elements.every(function (e) { return isUnused(e.name); }));
+                (namedBindings.kind === 266 /* NamespaceImport */ ? isUnused(namedBindings.name) : namedBindings.elements.length !== 0 && namedBindings.elements.every(function (e) { return isUnused(e.name); }));
             if (defaultUnused && namedBindingsUnused) {
                 changes.delete(sourceFile, importDecl);
             }
@@ -150502,7 +153893,7 @@
                     if (namedBindingsUnused) {
                         changes.replaceNode(sourceFile, importDecl.importClause, ts.factory.updateImportClause(importDecl.importClause, importDecl.importClause.isTypeOnly, name, /*namedBindings*/ undefined));
                     }
-                    else if (namedBindings.kind === 265 /* NamedImports */) {
+                    else if (namedBindings.kind === 267 /* NamedImports */) {
                         for (var _i = 0, _b = namedBindings.elements; _i < _b.length; _i++) {
                             var element = _b[_i];
                             if (isUnused(element.name))
@@ -150515,14 +153906,14 @@
         function deleteUnusedImportsInVariableDeclaration(sourceFile, varDecl, changes, isUnused) {
             var name = varDecl.name;
             switch (name.kind) {
-                case 78 /* Identifier */:
+                case 79 /* Identifier */:
                     if (isUnused(name)) {
                         changes.delete(sourceFile, name);
                     }
                     break;
-                case 198 /* ArrayBindingPattern */:
+                case 200 /* ArrayBindingPattern */:
                     break;
-                case 197 /* ObjectBindingPattern */:
+                case 199 /* ObjectBindingPattern */:
                     if (name.elements.every(function (e) { return ts.isIdentifier(e.name) && isUnused(e.name); })) {
                         changes.delete(sourceFile, ts.isVariableDeclarationList(varDecl.parent) && varDecl.parent.declarations.length === 1 ? varDecl.parent.parent : varDecl);
                     }
@@ -150562,7 +153953,7 @@
                         continue;
                     var top = getTopLevelDeclarationStatement(decl);
                     if (markSeenTop(top)) {
-                        addExportToChanges(oldFile, top, changes, useEs6ModuleSyntax);
+                        addExportToChanges(oldFile, top, name, changes, useEs6ModuleSyntax);
                     }
                     if (ts.hasSyntacticModifier(decl, 512 /* Default */)) {
                         oldFileDefault = name;
@@ -150652,14 +154043,14 @@
         // Below should all be utilities
         function isInImport(decl) {
             switch (decl.kind) {
-                case 261 /* ImportEqualsDeclaration */:
-                case 266 /* ImportSpecifier */:
-                case 263 /* ImportClause */:
-                case 264 /* NamespaceImport */:
+                case 263 /* ImportEqualsDeclaration */:
+                case 268 /* ImportSpecifier */:
+                case 265 /* ImportClause */:
+                case 266 /* NamespaceImport */:
                     return true;
-                case 250 /* VariableDeclaration */:
+                case 252 /* VariableDeclaration */:
                     return isVariableDeclarationInImport(decl);
-                case 199 /* BindingElement */:
+                case 201 /* BindingElement */:
                     return ts.isVariableDeclaration(decl.parent.parent) && isVariableDeclarationInImport(decl.parent.parent);
                 default:
                     return false;
@@ -150671,7 +154062,7 @@
         }
         function filterImport(i, moduleSpecifier, keep) {
             switch (i.kind) {
-                case 262 /* ImportDeclaration */: {
+                case 264 /* ImportDeclaration */: {
                     var clause = i.importClause;
                     if (!clause)
                         return undefined;
@@ -150681,9 +154072,9 @@
                         ? ts.factory.createImportDeclaration(/*decorators*/ undefined, /*modifiers*/ undefined, ts.factory.createImportClause(/*isTypeOnly*/ false, defaultImport, namedBindings), moduleSpecifier)
                         : undefined;
                 }
-                case 261 /* ImportEqualsDeclaration */:
+                case 263 /* ImportEqualsDeclaration */:
                     return keep(i.name) ? i : undefined;
-                case 250 /* VariableDeclaration */: {
+                case 252 /* VariableDeclaration */: {
                     var name = filterBindingName(i.name, keep);
                     return name ? makeVariableStatement(name, i.type, createRequireCall(moduleSpecifier), i.parent.flags) : undefined;
                 }
@@ -150692,7 +154083,7 @@
             }
         }
         function filterNamedBindings(namedBindings, keep) {
-            if (namedBindings.kind === 264 /* NamespaceImport */) {
+            if (namedBindings.kind === 266 /* NamespaceImport */) {
                 return keep(namedBindings.name) ? namedBindings : undefined;
             }
             else {
@@ -150702,11 +154093,11 @@
         }
         function filterBindingName(name, keep) {
             switch (name.kind) {
-                case 78 /* Identifier */:
+                case 79 /* Identifier */:
                     return keep(name) ? name : undefined;
-                case 198 /* ArrayBindingPattern */:
+                case 200 /* ArrayBindingPattern */:
                     return name;
-                case 197 /* ObjectBindingPattern */: {
+                case 199 /* ObjectBindingPattern */: {
                     // We can't handle nested destructurings or property names well here, so just copy them all.
                     var newElements = name.elements.filter(function (prop) { return prop.propertyName || !ts.isIdentifier(prop.name) || keep(prop.name); });
                     return newElements.length ? ts.factory.createObjectBindingPattern(newElements) : undefined;
@@ -150763,13 +154154,13 @@
         }
         function isNonVariableTopLevelDeclaration(node) {
             switch (node.kind) {
-                case 252 /* FunctionDeclaration */:
-                case 253 /* ClassDeclaration */:
-                case 257 /* ModuleDeclaration */:
-                case 256 /* EnumDeclaration */:
-                case 255 /* TypeAliasDeclaration */:
-                case 254 /* InterfaceDeclaration */:
-                case 261 /* ImportEqualsDeclaration */:
+                case 254 /* FunctionDeclaration */:
+                case 255 /* ClassDeclaration */:
+                case 259 /* ModuleDeclaration */:
+                case 258 /* EnumDeclaration */:
+                case 257 /* TypeAliasDeclaration */:
+                case 256 /* InterfaceDeclaration */:
+                case 263 /* ImportEqualsDeclaration */:
                     return true;
                 default:
                     return false;
@@ -150777,17 +154168,17 @@
         }
         function forEachTopLevelDeclaration(statement, cb) {
             switch (statement.kind) {
-                case 252 /* FunctionDeclaration */:
-                case 253 /* ClassDeclaration */:
-                case 257 /* ModuleDeclaration */:
-                case 256 /* EnumDeclaration */:
-                case 255 /* TypeAliasDeclaration */:
-                case 254 /* InterfaceDeclaration */:
-                case 261 /* ImportEqualsDeclaration */:
+                case 254 /* FunctionDeclaration */:
+                case 255 /* ClassDeclaration */:
+                case 259 /* ModuleDeclaration */:
+                case 258 /* EnumDeclaration */:
+                case 257 /* TypeAliasDeclaration */:
+                case 256 /* InterfaceDeclaration */:
+                case 263 /* ImportEqualsDeclaration */:
                     return cb(statement);
-                case 233 /* VariableStatement */:
+                case 235 /* VariableStatement */:
                     return ts.firstDefined(statement.declarationList.declarations, function (decl) { return forEachTopLevelDeclarationInBindingName(decl.name, cb); });
-                case 234 /* ExpressionStatement */: {
+                case 236 /* ExpressionStatement */: {
                     var expression = statement.expression;
                     return ts.isBinaryExpression(expression) && ts.getAssignmentDeclarationKind(expression) === 1 /* ExportsProperty */
                         ? cb(statement)
@@ -150797,10 +154188,10 @@
         }
         function forEachTopLevelDeclarationInBindingName(name, cb) {
             switch (name.kind) {
-                case 78 /* Identifier */:
+                case 79 /* Identifier */:
                     return cb(ts.cast(name.parent, function (x) { return ts.isVariableDeclaration(x) || ts.isBindingElement(x); }));
-                case 198 /* ArrayBindingPattern */:
-                case 197 /* ObjectBindingPattern */:
+                case 200 /* ArrayBindingPattern */:
+                case 199 /* ObjectBindingPattern */:
                     return ts.firstDefined(name.elements, function (em) { return ts.isOmittedExpression(em) ? undefined : forEachTopLevelDeclarationInBindingName(em.name, cb); });
                 default:
                     return ts.Debug.assertNever(name, "Unexpected name kind " + name.kind);
@@ -150811,16 +154202,16 @@
         }
         function getTopLevelDeclarationStatement(d) {
             switch (d.kind) {
-                case 250 /* VariableDeclaration */:
+                case 252 /* VariableDeclaration */:
                     return d.parent.parent;
-                case 199 /* BindingElement */:
+                case 201 /* BindingElement */:
                     return getTopLevelDeclarationStatement(ts.cast(d.parent.parent, function (p) { return ts.isVariableDeclaration(p) || ts.isBindingElement(p); }));
                 default:
                     return d;
             }
         }
-        function addExportToChanges(sourceFile, decl, changes, useEs6Exports) {
-            if (isExported(sourceFile, decl, useEs6Exports))
+        function addExportToChanges(sourceFile, decl, name, changes, useEs6Exports) {
+            if (isExported(sourceFile, decl, useEs6Exports, name))
                 return;
             if (useEs6Exports) {
                 if (!ts.isExpressionStatement(decl))
@@ -150832,59 +154223,58 @@
                     changes.insertNodesAfter(sourceFile, decl, names.map(createExportAssignment));
             }
         }
-        function isExported(sourceFile, decl, useEs6Exports) {
+        function isExported(sourceFile, decl, useEs6Exports, name) {
+            var _a;
             if (useEs6Exports) {
-                return !ts.isExpressionStatement(decl) && ts.hasSyntacticModifier(decl, 1 /* Export */);
+                return !ts.isExpressionStatement(decl) && ts.hasSyntacticModifier(decl, 1 /* Export */) || !!(name && ((_a = sourceFile.symbol.exports) === null || _a === void 0 ? void 0 : _a.has(name.escapedText)));
             }
-            else {
-                return getNamesToExportInCommonJS(decl).some(function (name) { return sourceFile.symbol.exports.has(ts.escapeLeadingUnderscores(name)); });
-            }
+            return getNamesToExportInCommonJS(decl).some(function (name) { return sourceFile.symbol.exports.has(ts.escapeLeadingUnderscores(name)); });
         }
         function addExport(decl, useEs6Exports) {
             return useEs6Exports ? [addEs6Export(decl)] : addCommonjsExport(decl);
         }
         function addEs6Export(d) {
-            var modifiers = ts.concatenate([ts.factory.createModifier(92 /* ExportKeyword */)], d.modifiers);
+            var modifiers = ts.concatenate([ts.factory.createModifier(93 /* ExportKeyword */)], d.modifiers);
             switch (d.kind) {
-                case 252 /* FunctionDeclaration */:
+                case 254 /* FunctionDeclaration */:
                     return ts.factory.updateFunctionDeclaration(d, d.decorators, modifiers, d.asteriskToken, d.name, d.typeParameters, d.parameters, d.type, d.body);
-                case 253 /* ClassDeclaration */:
+                case 255 /* ClassDeclaration */:
                     return ts.factory.updateClassDeclaration(d, d.decorators, modifiers, d.name, d.typeParameters, d.heritageClauses, d.members);
-                case 233 /* VariableStatement */:
+                case 235 /* VariableStatement */:
                     return ts.factory.updateVariableStatement(d, modifiers, d.declarationList);
-                case 257 /* ModuleDeclaration */:
+                case 259 /* ModuleDeclaration */:
                     return ts.factory.updateModuleDeclaration(d, d.decorators, modifiers, d.name, d.body);
-                case 256 /* EnumDeclaration */:
+                case 258 /* EnumDeclaration */:
                     return ts.factory.updateEnumDeclaration(d, d.decorators, modifiers, d.name, d.members);
-                case 255 /* TypeAliasDeclaration */:
+                case 257 /* TypeAliasDeclaration */:
                     return ts.factory.updateTypeAliasDeclaration(d, d.decorators, modifiers, d.name, d.typeParameters, d.type);
-                case 254 /* InterfaceDeclaration */:
+                case 256 /* InterfaceDeclaration */:
                     return ts.factory.updateInterfaceDeclaration(d, d.decorators, modifiers, d.name, d.typeParameters, d.heritageClauses, d.members);
-                case 261 /* ImportEqualsDeclaration */:
+                case 263 /* ImportEqualsDeclaration */:
                     return ts.factory.updateImportEqualsDeclaration(d, d.decorators, modifiers, d.isTypeOnly, d.name, d.moduleReference);
-                case 234 /* ExpressionStatement */:
+                case 236 /* ExpressionStatement */:
                     return ts.Debug.fail(); // Shouldn't try to add 'export' keyword to `exports.x = ...`
                 default:
                     return ts.Debug.assertNever(d, "Unexpected declaration kind " + d.kind);
             }
         }
         function addCommonjsExport(decl) {
-            return __spreadArray([decl], getNamesToExportInCommonJS(decl).map(createExportAssignment));
+            return __spreadArray([decl], getNamesToExportInCommonJS(decl).map(createExportAssignment), true);
         }
         function getNamesToExportInCommonJS(decl) {
             switch (decl.kind) {
-                case 252 /* FunctionDeclaration */:
-                case 253 /* ClassDeclaration */:
+                case 254 /* FunctionDeclaration */:
+                case 255 /* ClassDeclaration */:
                     return [decl.name.text]; // TODO: GH#18217
-                case 233 /* VariableStatement */:
+                case 235 /* VariableStatement */:
                     return ts.mapDefined(decl.declarationList.declarations, function (d) { return ts.isIdentifier(d.name) ? d.name.text : undefined; });
-                case 257 /* ModuleDeclaration */:
-                case 256 /* EnumDeclaration */:
-                case 255 /* TypeAliasDeclaration */:
-                case 254 /* InterfaceDeclaration */:
-                case 261 /* ImportEqualsDeclaration */:
+                case 259 /* ModuleDeclaration */:
+                case 258 /* EnumDeclaration */:
+                case 257 /* TypeAliasDeclaration */:
+                case 256 /* InterfaceDeclaration */:
+                case 263 /* ImportEqualsDeclaration */:
                     return ts.emptyArray;
-                case 234 /* ExpressionStatement */:
+                case 236 /* ExpressionStatement */:
                     return ts.Debug.fail("Can't export an ExpressionStatement"); // Shouldn't try to add 'export' keyword to `exports.x = ...`
                 default:
                     return ts.Debug.assertNever(decl, "Unexpected decl kind " + decl.kind);
@@ -150892,7 +154282,7 @@
         }
         /** Creates `exports.x = x;` */
         function createExportAssignment(name) {
-            return ts.factory.createExpressionStatement(ts.factory.createBinaryExpression(ts.factory.createPropertyAccessExpression(ts.factory.createIdentifier("exports"), ts.factory.createIdentifier(name)), 62 /* EqualsToken */, ts.factory.createIdentifier(name)));
+            return ts.factory.createExpressionStatement(ts.factory.createBinaryExpression(ts.factory.createPropertyAccessExpression(ts.factory.createIdentifier("exports"), ts.factory.createIdentifier(name)), 63 /* EqualsToken */, ts.factory.createIdentifier(name)));
         }
     })(refactor = ts.refactor || (ts.refactor = {}));
 })(ts || (ts = {}));
@@ -151081,7 +154471,7 @@
             function getGroupedReferences(functionDeclaration, program, cancellationToken) {
                 var functionNames = getFunctionNames(functionDeclaration);
                 var classNames = ts.isConstructorDeclaration(functionDeclaration) ? getClassNames(functionDeclaration) : [];
-                var names = ts.deduplicate(__spreadArray(__spreadArray([], functionNames), classNames), ts.equateValues);
+                var names = ts.deduplicate(__spreadArray(__spreadArray([], functionNames, true), classNames, true), ts.equateValues);
                 var checker = program.getTypeChecker();
                 var references = ts.flatMap(names, /*mapfn*/ function (/*mapfn*/ name) { return ts.FindAllReferences.getReferenceEntriesForNode(-1, name, program, program.getSourceFiles(), cancellationToken); });
                 var groupedReferences = groupReferences(references);
@@ -151227,15 +154617,15 @@
                     var parent = functionReference.parent;
                     switch (parent.kind) {
                         // foo(...) or super(...) or new Foo(...)
-                        case 204 /* CallExpression */:
-                        case 205 /* NewExpression */:
+                        case 206 /* CallExpression */:
+                        case 207 /* NewExpression */:
                             var callOrNewExpression = ts.tryCast(parent, ts.isCallOrNewExpression);
                             if (callOrNewExpression && callOrNewExpression.expression === functionReference) {
                                 return callOrNewExpression;
                             }
                             break;
                         // x.foo(...)
-                        case 202 /* PropertyAccessExpression */:
+                        case 204 /* PropertyAccessExpression */:
                             var propertyAccessExpression = ts.tryCast(parent, ts.isPropertyAccessExpression);
                             if (propertyAccessExpression && propertyAccessExpression.parent && propertyAccessExpression.name === functionReference) {
                                 var callOrNewExpression_1 = ts.tryCast(propertyAccessExpression.parent, ts.isCallOrNewExpression);
@@ -151245,7 +154635,7 @@
                             }
                             break;
                         // x["foo"](...)
-                        case 203 /* ElementAccessExpression */:
+                        case 205 /* ElementAccessExpression */:
                             var elementAccessExpression = ts.tryCast(parent, ts.isElementAccessExpression);
                             if (elementAccessExpression && elementAccessExpression.parent && elementAccessExpression.argumentExpression === functionReference) {
                                 var callOrNewExpression_2 = ts.tryCast(elementAccessExpression.parent, ts.isCallOrNewExpression);
@@ -151264,14 +154654,14 @@
                     var parent = reference.parent;
                     switch (parent.kind) {
                         // `C.foo`
-                        case 202 /* PropertyAccessExpression */:
+                        case 204 /* PropertyAccessExpression */:
                             var propertyAccessExpression = ts.tryCast(parent, ts.isPropertyAccessExpression);
                             if (propertyAccessExpression && propertyAccessExpression.expression === reference) {
                                 return propertyAccessExpression;
                             }
                             break;
                         // `C["foo"]`
-                        case 203 /* ElementAccessExpression */:
+                        case 205 /* ElementAccessExpression */:
                             var elementAccessExpression = ts.tryCast(parent, ts.isElementAccessExpression);
                             if (elementAccessExpression && elementAccessExpression.expression === reference) {
                                 return elementAccessExpression;
@@ -151317,16 +154707,16 @@
                 if (!isValidParameterNodeArray(functionDeclaration.parameters, checker))
                     return false;
                 switch (functionDeclaration.kind) {
-                    case 252 /* FunctionDeclaration */:
+                    case 254 /* FunctionDeclaration */:
                         return hasNameOrDefault(functionDeclaration) && isSingleImplementation(functionDeclaration, checker);
-                    case 166 /* MethodDeclaration */:
+                    case 167 /* MethodDeclaration */:
                         if (ts.isObjectLiteralExpression(functionDeclaration.parent)) {
                             var contextualSymbol = getSymbolForContextualType(functionDeclaration.name, checker);
                             // don't offer the refactor when there are multiple signatures since we won't know which ones the user wants to change
                             return ((_a = contextualSymbol === null || contextualSymbol === void 0 ? void 0 : contextualSymbol.declarations) === null || _a === void 0 ? void 0 : _a.length) === 1 && isSingleImplementation(functionDeclaration, checker);
                         }
                         return isSingleImplementation(functionDeclaration, checker);
-                    case 167 /* Constructor */:
+                    case 169 /* Constructor */:
                         if (ts.isClassDeclaration(functionDeclaration.parent)) {
                             return hasNameOrDefault(functionDeclaration.parent) && isSingleImplementation(functionDeclaration, checker);
                         }
@@ -151334,8 +154724,8 @@
                             return isValidVariableDeclaration(functionDeclaration.parent.parent)
                                 && isSingleImplementation(functionDeclaration, checker);
                         }
-                    case 209 /* FunctionExpression */:
-                    case 210 /* ArrowFunction */:
+                    case 211 /* FunctionExpression */:
+                    case 212 /* ArrowFunction */:
                         return isValidVariableDeclaration(functionDeclaration.parent);
                 }
                 return false;
@@ -151345,7 +154735,7 @@
             }
             function hasNameOrDefault(functionOrClassDeclaration) {
                 if (!functionOrClassDeclaration.name) {
-                    var defaultKeyword = ts.findModifier(functionOrClassDeclaration, 87 /* DefaultKeyword */);
+                    var defaultKeyword = ts.findModifier(functionOrClassDeclaration, 88 /* DefaultKeyword */);
                     return !!defaultKeyword;
                 }
                 return true;
@@ -151485,15 +154875,15 @@
             }
             function getClassNames(constructorDeclaration) {
                 switch (constructorDeclaration.parent.kind) {
-                    case 253 /* ClassDeclaration */:
+                    case 255 /* ClassDeclaration */:
                         var classDeclaration = constructorDeclaration.parent;
                         if (classDeclaration.name)
                             return [classDeclaration.name];
                         // If the class declaration doesn't have a name, it should have a default modifier.
                         // We validated this in `isValidFunctionDeclaration` through `hasNameOrDefault`
-                        var defaultModifier = ts.Debug.checkDefined(ts.findModifier(classDeclaration, 87 /* DefaultKeyword */), "Nameless class declaration should be a default export");
+                        var defaultModifier = ts.Debug.checkDefined(ts.findModifier(classDeclaration, 88 /* DefaultKeyword */), "Nameless class declaration should be a default export");
                         return [defaultModifier];
-                    case 222 /* ClassExpression */:
+                    case 224 /* ClassExpression */:
                         var classExpression = constructorDeclaration.parent;
                         var variableDeclaration = constructorDeclaration.parent.parent;
                         var className = classExpression.name;
@@ -151504,25 +154894,25 @@
             }
             function getFunctionNames(functionDeclaration) {
                 switch (functionDeclaration.kind) {
-                    case 252 /* FunctionDeclaration */:
+                    case 254 /* FunctionDeclaration */:
                         if (functionDeclaration.name)
                             return [functionDeclaration.name];
                         // If the function declaration doesn't have a name, it should have a default modifier.
                         // We validated this in `isValidFunctionDeclaration` through `hasNameOrDefault`
-                        var defaultModifier = ts.Debug.checkDefined(ts.findModifier(functionDeclaration, 87 /* DefaultKeyword */), "Nameless function declaration should be a default export");
+                        var defaultModifier = ts.Debug.checkDefined(ts.findModifier(functionDeclaration, 88 /* DefaultKeyword */), "Nameless function declaration should be a default export");
                         return [defaultModifier];
-                    case 166 /* MethodDeclaration */:
+                    case 167 /* MethodDeclaration */:
                         return [functionDeclaration.name];
-                    case 167 /* Constructor */:
-                        var ctrKeyword = ts.Debug.checkDefined(ts.findChildOfKind(functionDeclaration, 132 /* ConstructorKeyword */, functionDeclaration.getSourceFile()), "Constructor declaration should have constructor keyword");
-                        if (functionDeclaration.parent.kind === 222 /* ClassExpression */) {
+                    case 169 /* Constructor */:
+                        var ctrKeyword = ts.Debug.checkDefined(ts.findChildOfKind(functionDeclaration, 133 /* ConstructorKeyword */, functionDeclaration.getSourceFile()), "Constructor declaration should have constructor keyword");
+                        if (functionDeclaration.parent.kind === 224 /* ClassExpression */) {
                             var variableDeclaration = functionDeclaration.parent.parent;
                             return [variableDeclaration.name, ctrKeyword];
                         }
                         return [ctrKeyword];
-                    case 210 /* ArrowFunction */:
+                    case 212 /* ArrowFunction */:
                         return [functionDeclaration.parent.name];
-                    case 209 /* FunctionExpression */:
+                    case 211 /* FunctionExpression */:
                         if (functionDeclaration.name)
                             return [functionDeclaration.name, functionDeclaration.parent.name];
                         return [functionDeclaration.parent.name];
@@ -151557,7 +154947,7 @@
                 var node = getNodeOrParentOfParentheses(file, startPosition);
                 var maybeBinary = getParentBinaryExpression(node);
                 var refactorInfo = { name: refactorName, description: refactorDescription, actions: [] };
-                if (ts.isBinaryExpression(maybeBinary) && isStringConcatenationValid(maybeBinary)) {
+                if (ts.isBinaryExpression(maybeBinary) && treeToArray(maybeBinary).isValidConcatenation) {
                     refactorInfo.actions.push(convertStringAction);
                     return [refactorInfo];
                 }
@@ -151570,7 +154960,7 @@
             function getNodeOrParentOfParentheses(file, startPosition) {
                 var node = ts.getTokenAtPosition(file, startPosition);
                 var nestedBinary = getParentBinaryExpression(node);
-                var isNonStringBinary = !isStringConcatenationValid(nestedBinary);
+                var isNonStringBinary = !treeToArray(nestedBinary).isValidConcatenation;
                 if (isNonStringBinary &&
                     ts.isParenthesizedExpression(nestedBinary.parent) &&
                     ts.isBinaryExpression(nestedBinary.parent.parent)) {
@@ -151608,40 +154998,41 @@
                 }
             }
             function isNotEqualsOperator(node) {
-                return node.operatorToken.kind !== 62 /* EqualsToken */;
+                return node.operatorToken.kind !== 63 /* EqualsToken */;
             }
             function getParentBinaryExpression(expr) {
                 var container = ts.findAncestor(expr.parent, function (n) {
                     switch (n.kind) {
-                        case 202 /* PropertyAccessExpression */:
-                        case 203 /* ElementAccessExpression */:
+                        case 204 /* PropertyAccessExpression */:
+                        case 205 /* ElementAccessExpression */:
                             return false;
-                        case 219 /* TemplateExpression */:
-                        case 217 /* BinaryExpression */:
+                        case 221 /* TemplateExpression */:
+                        case 219 /* BinaryExpression */:
                             return !(ts.isBinaryExpression(n.parent) && isNotEqualsOperator(n.parent));
                         default:
                             return "quit";
                     }
                 });
-                return container || expr;
-            }
-            function isStringConcatenationValid(node) {
-                var _a = treeToArray(node), containsString = _a.containsString, areOperatorsValid = _a.areOperatorsValid;
-                return containsString && areOperatorsValid;
+                return (container || expr);
             }
             function treeToArray(current) {
-                if (ts.isBinaryExpression(current)) {
-                    var _a = treeToArray(current.left), nodes = _a.nodes, operators = _a.operators, leftHasString = _a.containsString, leftOperatorValid = _a.areOperatorsValid;
-                    if (!leftHasString && !ts.isStringLiteral(current.right) && !ts.isTemplateExpression(current.right)) {
-                        return { nodes: [current], operators: [], containsString: false, areOperatorsValid: true };
+                var loop = function (current) {
+                    if (!ts.isBinaryExpression(current)) {
+                        return { nodes: [current], operators: [], validOperators: true,
+                            hasString: ts.isStringLiteral(current) || ts.isNoSubstitutionTemplateLiteral(current) };
+                    }
+                    var _a = loop(current.left), nodes = _a.nodes, operators = _a.operators, leftHasString = _a.hasString, leftOperatorValid = _a.validOperators;
+                    if (!(leftHasString || ts.isStringLiteral(current.right) || ts.isTemplateExpression(current.right))) {
+                        return { nodes: [current], operators: [], hasString: false, validOperators: true };
                     }
                     var currentOperatorValid = current.operatorToken.kind === 39 /* PlusToken */;
-                    var areOperatorsValid = leftOperatorValid && currentOperatorValid;
+                    var validOperators = leftOperatorValid && currentOperatorValid;
                     nodes.push(current.right);
                     operators.push(current.operatorToken);
-                    return { nodes: nodes, operators: operators, containsString: true, areOperatorsValid: areOperatorsValid };
-                }
-                return { nodes: [current], operators: [], containsString: ts.isStringLiteral(current), areOperatorsValid: true };
+                    return { nodes: nodes, operators: operators, hasString: true, validOperators: validOperators };
+                };
+                var _a = loop(current), nodes = _a.nodes, operators = _a.operators, validOperators = _a.validOperators, hasString = _a.hasString;
+                return { nodes: nodes, operators: operators, isValidConcatenation: validOperators && hasString };
             }
             // to copy comments following the operator
             // "foo" + /* comment */ "bar"
@@ -151661,56 +155052,77 @@
                     }
                 };
             };
+            function escapeRawStringForTemplate(s) {
+                // Escaping for $s in strings that are to be used in template strings
+                // Naive implementation: replace \x by itself and otherwise $ and ` by \$ and \`.
+                // But to complicate it a bit, this should work for raw strings too.
+                return s.replace(/\\.|[$`]/g, function (m) { return m[0] === "\\" ? m : "\\" + m; });
+                // Finally, a less-backslash-happy version can work too, doing only ${ instead of all $s:
+                //     s.replace(/\\.|\${|`/g, m => m[0] === "\\" ? m : "\\" + m);
+                // but `\$${foo}` is likely more clear than the more-confusing-but-still-working `$${foo}`.
+            }
+            function getRawTextOfTemplate(node) {
+                // in these cases the right side is ${
+                var rightShaving = ts.isTemplateHead(node) || ts.isTemplateMiddle(node) ? -2 : -1;
+                return ts.getTextOfNode(node).slice(1, rightShaving);
+            }
             function concatConsecutiveString(index, nodes) {
                 var indexes = [];
-                var text = "";
+                var text = "", rawText = "";
                 while (index < nodes.length) {
                     var node = nodes[index];
-                    if (ts.isStringLiteralLike(node)) {
-                        text = text + node.text;
+                    if (ts.isStringLiteralLike(node)) { // includes isNoSubstitutionTemplateLiteral(node)
+                        text += node.text;
+                        rawText += escapeRawStringForTemplate(ts.getTextOfNode(node).slice(1, -1));
                         indexes.push(index);
                         index++;
                     }
                     else if (ts.isTemplateExpression(node)) {
-                        text = text + node.head.text;
+                        text += node.head.text;
+                        rawText += getRawTextOfTemplate(node.head);
                         break;
                     }
                     else {
                         break;
                     }
                 }
-                return [index, text, indexes];
+                return [index, text, rawText, indexes];
             }
             function nodesToTemplate(_a, file) {
                 var nodes = _a.nodes, operators = _a.operators;
                 var copyOperatorComments = copyTrailingOperatorComments(operators, file);
                 var copyCommentFromStringLiterals = copyCommentFromMultiNode(nodes, file, copyOperatorComments);
-                var _b = concatConsecutiveString(0, nodes), begin = _b[0], headText = _b[1], headIndexes = _b[2];
+                var _b = concatConsecutiveString(0, nodes), begin = _b[0], headText = _b[1], rawHeadText = _b[2], headIndexes = _b[3];
                 if (begin === nodes.length) {
-                    var noSubstitutionTemplateLiteral = ts.factory.createNoSubstitutionTemplateLiteral(headText);
+                    var noSubstitutionTemplateLiteral = ts.factory.createNoSubstitutionTemplateLiteral(headText, rawHeadText);
                     copyCommentFromStringLiterals(headIndexes, noSubstitutionTemplateLiteral);
                     return noSubstitutionTemplateLiteral;
                 }
                 var templateSpans = [];
-                var templateHead = ts.factory.createTemplateHead(headText);
+                var templateHead = ts.factory.createTemplateHead(headText, rawHeadText);
                 copyCommentFromStringLiterals(headIndexes, templateHead);
                 var _loop_20 = function (i) {
                     var currentNode = getExpressionFromParenthesesOrExpression(nodes[i]);
                     copyOperatorComments(i, currentNode);
-                    var _c = concatConsecutiveString(i + 1, nodes), newIndex = _c[0], subsequentText = _c[1], stringIndexes = _c[2];
+                    var _c = concatConsecutiveString(i + 1, nodes), newIndex = _c[0], subsequentText = _c[1], rawSubsequentText = _c[2], stringIndexes = _c[3];
                     i = newIndex - 1;
                     var isLast = i === nodes.length - 1;
                     if (ts.isTemplateExpression(currentNode)) {
                         var spans = ts.map(currentNode.templateSpans, function (span, index) {
                             copyExpressionComments(span);
-                            var nextSpan = currentNode.templateSpans[index + 1];
-                            var text = span.literal.text + (nextSpan ? "" : subsequentText);
-                            return ts.factory.createTemplateSpan(span.expression, isLast ? ts.factory.createTemplateTail(text) : ts.factory.createTemplateMiddle(text));
+                            var isLastSpan = index === currentNode.templateSpans.length - 1;
+                            var text = span.literal.text + (isLastSpan ? subsequentText : "");
+                            var rawText = getRawTextOfTemplate(span.literal) + (isLastSpan ? rawSubsequentText : "");
+                            return ts.factory.createTemplateSpan(span.expression, isLast
+                                ? ts.factory.createTemplateTail(text, rawText)
+                                : ts.factory.createTemplateMiddle(text, rawText));
                         });
                         templateSpans.push.apply(templateSpans, spans);
                     }
                     else {
-                        var templatePart = isLast ? ts.factory.createTemplateTail(subsequentText) : ts.factory.createTemplateMiddle(subsequentText);
+                        var templatePart = isLast
+                            ? ts.factory.createTemplateTail(subsequentText, rawSubsequentText)
+                            : ts.factory.createTemplateMiddle(subsequentText, rawSubsequentText);
                         copyCommentFromStringLiterals(stringIndexes, templatePart);
                         templateSpans.push(ts.factory.createTemplateSpan(currentNode, templatePart));
                     }
@@ -151861,14 +155273,15 @@
                 var token = ts.getTokenAtPosition(file, startPosition);
                 var typeChecker = program.getTypeChecker();
                 var func = tryGetFunctionFromVariableDeclaration(file, typeChecker, token.parent);
-                if (func && !containingThis(func.body)) {
+                if (func && !containingThis(func.body) && !typeChecker.containsArgumentsReference(func)) {
                     return { selectedVariableDeclaration: true, func: func };
                 }
                 var maybeFunc = ts.getContainingFunction(token);
                 if (maybeFunc &&
                     (ts.isFunctionExpression(maybeFunc) || ts.isArrowFunction(maybeFunc)) &&
                     !ts.rangeContainsRange(maybeFunc.body, token) &&
-                    !containingThis(maybeFunc.body)) {
+                    !containingThis(maybeFunc.body) &&
+                    !typeChecker.containsArgumentsReference(maybeFunc)) {
                     if (ts.isFunctionExpression(maybeFunc) && isFunctionReferencedInFile(file, typeChecker, maybeFunc))
                         return undefined;
                     return { selectedVariableDeclaration: false, func: maybeFunc };
@@ -151891,7 +155304,11 @@
             }
             function convertToBlock(body) {
                 if (ts.isExpression(body)) {
-                    return ts.factory.createBlock([ts.factory.createReturnStatement(body)], /* multiLine */ true);
+                    var returnStatement = ts.factory.createReturnStatement(body);
+                    var file = body.getSourceFile();
+                    ts.suppressLeadingAndTrailingTrivia(returnStatement);
+                    ts.copyTrailingAsLeadingComments(body, returnStatement, file, /* commentKind */ undefined, /* hasTrailingNewLine */ true);
+                    return ts.factory.createBlock([returnStatement], /* multiLine */ true);
                 }
                 else {
                     return body;
@@ -152038,10 +155455,10 @@
             }
             function isConvertibleDeclaration(node) {
                 switch (node.kind) {
-                    case 252 /* FunctionDeclaration */:
-                    case 209 /* FunctionExpression */:
-                    case 210 /* ArrowFunction */:
-                    case 166 /* MethodDeclaration */:
+                    case 254 /* FunctionDeclaration */:
+                    case 211 /* FunctionExpression */:
+                    case 212 /* ArrowFunction */:
+                    case 167 /* MethodDeclaration */:
                         return true;
                     default:
                         return false;
@@ -152068,8 +155485,8 @@
     ts.servicesVersion = "0.8";
     function createNode(kind, pos, end, parent) {
         var node = ts.isNodeKind(kind) ? new NodeObject(kind, pos, end) :
-            kind === 78 /* Identifier */ ? new IdentifierObject(78 /* Identifier */, pos, end) :
-                kind === 79 /* PrivateIdentifier */ ? new PrivateIdentifierObject(79 /* PrivateIdentifier */, pos, end) :
+            kind === 79 /* Identifier */ ? new IdentifierObject(79 /* Identifier */, pos, end) :
+                kind === 80 /* PrivateIdentifier */ ? new PrivateIdentifierObject(80 /* PrivateIdentifier */, pos, end) :
                     new TokenObject(kind, pos, end);
         node.parent = parent;
         node.flags = parent.flags & 25358336 /* ContextFlags */;
@@ -152143,8 +155560,8 @@
             if (!children.length) {
                 return undefined;
             }
-            var child = ts.find(children, function (kid) { return kid.kind < 302 /* FirstJSDocNode */ || kid.kind > 337 /* LastJSDocNode */; });
-            return child.kind < 158 /* FirstNode */ ?
+            var child = ts.find(children, function (kid) { return kid.kind < 304 /* FirstJSDocNode */ || kid.kind > 342 /* LastJSDocNode */; });
+            return child.kind < 159 /* FirstNode */ ?
                 child :
                 child.getFirstToken(sourceFile);
         };
@@ -152155,7 +155572,7 @@
             if (!child) {
                 return undefined;
             }
-            return child.kind < 158 /* FirstNode */ ? child : child.getLastToken(sourceFile);
+            return child.kind < 159 /* FirstNode */ ? child : child.getLastToken(sourceFile);
         };
         NodeObject.prototype.forEachChild = function (cbNode, cbNodeArray) {
             return ts.forEachChild(this, cbNode, cbNodeArray);
@@ -152201,7 +155618,7 @@
             var token = ts.scanner.scan();
             var textPos = ts.scanner.getTextPos();
             if (textPos <= end) {
-                if (token === 78 /* Identifier */) {
+                if (token === 79 /* Identifier */) {
                     ts.Debug.fail("Did not expect " + ts.Debug.formatSyntaxKind(parent.kind) + " to have an Identifier in its trivia");
                 }
                 nodes.push(createNode(token, pos, textPos, parent));
@@ -152213,7 +155630,7 @@
         }
     }
     function createSyntaxList(nodes, parent) {
-        var list = createNode(338 /* SyntaxList */, nodes.pos, nodes.end, parent);
+        var list = createNode(343 /* SyntaxList */, nodes.pos, nodes.end, parent);
         list._children = [];
         var pos = nodes.pos;
         for (var _i = 0, nodes_2 = nodes; _i < nodes_2.length; _i++) {
@@ -152266,10 +155683,10 @@
             return sourceFile.text.substring(this.getStart(sourceFile), this.getEnd());
         };
         TokenOrIdentifierObject.prototype.getChildCount = function () {
-            return 0;
+            return this.getChildren().length;
         };
-        TokenOrIdentifierObject.prototype.getChildAt = function () {
-            return undefined; // TODO: GH#18217
+        TokenOrIdentifierObject.prototype.getChildAt = function (index) {
+            return this.getChildren()[index];
         };
         TokenOrIdentifierObject.prototype.getChildren = function () {
             return this.kind === 1 /* EndOfFileToken */ ? this.jsDoc || ts.emptyArray : ts.emptyArray;
@@ -152324,13 +155741,13 @@
         };
         SymbolObject.prototype.getContextualDocumentationComment = function (context, checker) {
             switch (context === null || context === void 0 ? void 0 : context.kind) {
-                case 168 /* GetAccessor */:
+                case 170 /* GetAccessor */:
                     if (!this.contextualGetAccessorDocumentationComment) {
                         this.contextualGetAccessorDocumentationComment = ts.emptyArray;
                         this.contextualGetAccessorDocumentationComment = getDocumentationComment(ts.filter(this.declarations, ts.isGetAccessor), checker);
                     }
                     return this.contextualGetAccessorDocumentationComment;
-                case 169 /* SetAccessor */:
+                case 171 /* SetAccessor */:
                     if (!this.contextualSetAccessorDocumentationComment) {
                         this.contextualSetAccessorDocumentationComment = ts.emptyArray;
                         this.contextualSetAccessorDocumentationComment = getDocumentationComment(ts.filter(this.declarations, ts.isSetAccessor), checker);
@@ -152361,7 +155778,7 @@
         __extends(IdentifierObject, _super);
         function IdentifierObject(_kind, pos, end) {
             var _this = _super.call(this, pos, end) || this;
-            _this.kind = 78 /* Identifier */;
+            _this.kind = 79 /* Identifier */;
             return _this;
         }
         Object.defineProperty(IdentifierObject.prototype, "text", {
@@ -152373,7 +155790,7 @@
         });
         return IdentifierObject;
     }(TokenOrIdentifierObject));
-    IdentifierObject.prototype.kind = 78 /* Identifier */;
+    IdentifierObject.prototype.kind = 79 /* Identifier */;
     var PrivateIdentifierObject = /** @class */ (function (_super) {
         __extends(PrivateIdentifierObject, _super);
         function PrivateIdentifierObject(_kind, pos, end) {
@@ -152388,7 +155805,7 @@
         });
         return PrivateIdentifierObject;
     }(TokenOrIdentifierObject));
-    PrivateIdentifierObject.prototype.kind = 79 /* PrivateIdentifier */;
+    PrivateIdentifierObject.prototype.kind = 80 /* PrivateIdentifier */;
     var TypeObject = /** @class */ (function () {
         function TypeObject(checker, flags) {
             this.checker = checker;
@@ -152522,7 +155939,7 @@
         if (tags.length === 0 || hasJSDocInheritDocTag(declaration)) {
             var inheritedTags = findBaseOfDeclaration(checker, declaration, function (symbol) { var _a; return ((_a = symbol.declarations) === null || _a === void 0 ? void 0 : _a.length) === 1 ? symbol.getJsDocTags() : undefined; });
             if (inheritedTags) {
-                tags = __spreadArray(__spreadArray([], inheritedTags), tags);
+                tags = __spreadArray(__spreadArray([], inheritedTags, true), tags, true);
             }
         }
         return tags;
@@ -152549,7 +155966,12 @@
         return doc;
     }
     function findBaseOfDeclaration(checker, declaration, cb) {
-        return ts.firstDefined(declaration.parent ? ts.getAllSuperTypeNodes(declaration.parent) : ts.emptyArray, function (superTypeNode) {
+        var _a;
+        var classOrInterfaceDeclaration = ((_a = declaration.parent) === null || _a === void 0 ? void 0 : _a.kind) === 169 /* Constructor */ ? declaration.parent.parent : declaration.parent;
+        if (!classOrInterfaceDeclaration) {
+            return;
+        }
+        return ts.firstDefined(ts.getAllSuperTypeNodes(classOrInterfaceDeclaration), function (superTypeNode) {
             var symbol = checker.getPropertyOfType(checker.getTypeAtLocation(superTypeNode), declaration.symbol.name);
             return symbol ? cb(symbol) : undefined;
         });
@@ -152558,7 +155980,7 @@
         __extends(SourceFileObject, _super);
         function SourceFileObject(kind, pos, end) {
             var _this = _super.call(this, kind, pos, end) || this;
-            _this.kind = 298 /* SourceFile */;
+            _this.kind = 300 /* SourceFile */;
             return _this;
         }
         SourceFileObject.prototype.update = function (newText, textChangeRange) {
@@ -152617,10 +156039,10 @@
             }
             function visit(node) {
                 switch (node.kind) {
-                    case 252 /* FunctionDeclaration */:
-                    case 209 /* FunctionExpression */:
-                    case 166 /* MethodDeclaration */:
-                    case 165 /* MethodSignature */:
+                    case 254 /* FunctionDeclaration */:
+                    case 211 /* FunctionExpression */:
+                    case 167 /* MethodDeclaration */:
+                    case 166 /* MethodSignature */:
                         var functionDeclaration = node;
                         var declarationName = getDeclarationName(functionDeclaration);
                         if (declarationName) {
@@ -152640,31 +156062,31 @@
                         }
                         ts.forEachChild(node, visit);
                         break;
-                    case 253 /* ClassDeclaration */:
-                    case 222 /* ClassExpression */:
-                    case 254 /* InterfaceDeclaration */:
-                    case 255 /* TypeAliasDeclaration */:
-                    case 256 /* EnumDeclaration */:
-                    case 257 /* ModuleDeclaration */:
-                    case 261 /* ImportEqualsDeclaration */:
-                    case 271 /* ExportSpecifier */:
-                    case 266 /* ImportSpecifier */:
-                    case 263 /* ImportClause */:
-                    case 264 /* NamespaceImport */:
-                    case 168 /* GetAccessor */:
-                    case 169 /* SetAccessor */:
-                    case 178 /* TypeLiteral */:
+                    case 255 /* ClassDeclaration */:
+                    case 224 /* ClassExpression */:
+                    case 256 /* InterfaceDeclaration */:
+                    case 257 /* TypeAliasDeclaration */:
+                    case 258 /* EnumDeclaration */:
+                    case 259 /* ModuleDeclaration */:
+                    case 263 /* ImportEqualsDeclaration */:
+                    case 273 /* ExportSpecifier */:
+                    case 268 /* ImportSpecifier */:
+                    case 265 /* ImportClause */:
+                    case 266 /* NamespaceImport */:
+                    case 170 /* GetAccessor */:
+                    case 171 /* SetAccessor */:
+                    case 180 /* TypeLiteral */:
                         addDeclaration(node);
                         ts.forEachChild(node, visit);
                         break;
-                    case 161 /* Parameter */:
+                    case 162 /* Parameter */:
                         // Only consider parameter properties
                         if (!ts.hasSyntacticModifier(node, 16476 /* ParameterPropertyModifier */)) {
                             break;
                         }
                     // falls through
-                    case 250 /* VariableDeclaration */:
-                    case 199 /* BindingElement */: {
+                    case 252 /* VariableDeclaration */:
+                    case 201 /* BindingElement */: {
                         var decl = node;
                         if (ts.isBindingPattern(decl.name)) {
                             ts.forEachChild(decl.name, visit);
@@ -152675,12 +156097,12 @@
                         }
                     }
                     // falls through
-                    case 292 /* EnumMember */:
-                    case 164 /* PropertyDeclaration */:
-                    case 163 /* PropertySignature */:
+                    case 294 /* EnumMember */:
+                    case 165 /* PropertyDeclaration */:
+                    case 164 /* PropertySignature */:
                         addDeclaration(node);
                         break;
-                    case 268 /* ExportDeclaration */:
+                    case 270 /* ExportDeclaration */:
                         // Handle named exports case e.g.:
                         //    export {a, b as B} from "mod";
                         var exportDeclaration = node;
@@ -152693,7 +156115,7 @@
                             }
                         }
                         break;
-                    case 262 /* ImportDeclaration */:
+                    case 264 /* ImportDeclaration */:
                         var importClause = node.importClause;
                         if (importClause) {
                             // Handle default import case e.g.:
@@ -152705,7 +156127,7 @@
                             //    import * as NS from "mod";
                             //    import {a, b as B} from "mod";
                             if (importClause.namedBindings) {
-                                if (importClause.namedBindings.kind === 264 /* NamespaceImport */) {
+                                if (importClause.namedBindings.kind === 266 /* NamespaceImport */) {
                                     addDeclaration(importClause.namedBindings);
                                 }
                                 else {
@@ -152714,7 +156136,7 @@
                             }
                         }
                         break;
-                    case 217 /* BinaryExpression */:
+                    case 219 /* BinaryExpression */:
                         if (ts.getAssignmentDeclarationKind(node) !== 0 /* None */) {
                             addDeclaration(node);
                         }
@@ -152996,7 +156418,6 @@
     }());
     ts.ThrottledCancellationToken = ThrottledCancellationToken;
     var invalidOperationsInPartialSemanticMode = [
-        "getSyntacticDiagnostics",
         "getSemanticDiagnostics",
         "getSuggestionDiagnostics",
         "getCompilerOptionsDiagnostics",
@@ -153013,8 +156434,9 @@
         "prepareCallHierarchy",
         "provideCallHierarchyIncomingCalls",
         "provideCallHierarchyOutgoingCalls",
+        "provideInlayHints"
     ];
-    var invalidOperationsInSyntacticMode = __spreadArray(__spreadArray([], invalidOperationsInPartialSemanticMode), [
+    var invalidOperationsInSyntacticMode = __spreadArray(__spreadArray([], invalidOperationsInPartialSemanticMode, true), [
         "getCompletionsAtPosition",
         "getCompletionEntryDetails",
         "getCompletionEntrySymbol",
@@ -153032,7 +156454,7 @@
         "getRenameInfo",
         "findRenameLocations",
         "getApplicableRefactors",
-    ]);
+    ], false);
     function createLanguageService(host, documentRegistry, syntaxOnlyOrLanguageServiceMode) {
         var _a;
         if (documentRegistry === void 0) { documentRegistry = ts.createDocumentRegistry(host.useCaseSensitiveFileNames && host.useCaseSensitiveFileNames(), host.getCurrentDirectory()); }
@@ -153346,7 +156768,7 @@
             }
             // If '-d' is enabled, check for emitter error. One example of emitter error is export class implements non-export interface
             var declarationDiagnostics = program.getDeclarationDiagnostics(targetSourceFile, cancellationToken);
-            return __spreadArray(__spreadArray([], semanticDiagnostics), declarationDiagnostics);
+            return __spreadArray(__spreadArray([], semanticDiagnostics, true), declarationDiagnostics, true);
         }
         function getSuggestionDiagnostics(fileName) {
             synchronizeHostData();
@@ -153354,14 +156776,14 @@
         }
         function getCompilerOptionsDiagnostics() {
             synchronizeHostData();
-            return __spreadArray(__spreadArray([], program.getOptionsDiagnostics(cancellationToken)), program.getGlobalDiagnostics(cancellationToken));
+            return __spreadArray(__spreadArray([], program.getOptionsDiagnostics(cancellationToken), true), program.getGlobalDiagnostics(cancellationToken), true);
         }
         function getCompletionsAtPosition(fileName, position, options) {
             if (options === void 0) { options = ts.emptyOptions; }
             // Convert from deprecated options names to new names
             var fullPreferences = __assign(__assign({}, ts.identity(options)), { includeCompletionsForModuleExports: options.includeCompletionsForModuleExports || options.includeExternalModuleExports, includeCompletionsWithInsertText: options.includeCompletionsWithInsertText || options.includeInsertTextCompletions });
             synchronizeHostData();
-            return ts.Completions.getCompletionsAtPosition(host, program, log, getValidSourceFile(fileName), position, fullPreferences, options.triggerCharacter);
+            return ts.Completions.getCompletionsAtPosition(host, program, log, getValidSourceFile(fileName), position, fullPreferences, options.triggerCharacter, options.triggerKind, cancellationToken);
         }
         function getCompletionEntryDetails(fileName, position, name, formattingOptions, source, preferences, data) {
             if (preferences === void 0) { preferences = ts.emptyOptions; }
@@ -153419,16 +156841,16 @@
         }
         function shouldGetType(sourceFile, node, position) {
             switch (node.kind) {
-                case 78 /* Identifier */:
+                case 79 /* Identifier */:
                     return !ts.isLabelName(node) && !ts.isTagName(node) && !ts.isConstTypeReference(node.parent);
-                case 202 /* PropertyAccessExpression */:
-                case 158 /* QualifiedName */:
+                case 204 /* PropertyAccessExpression */:
+                case 159 /* QualifiedName */:
                     // Don't return quickInfo if inside the comment in `a/**/.b`
                     return !ts.isInComment(sourceFile, position);
-                case 107 /* ThisKeyword */:
-                case 188 /* ThisType */:
-                case 105 /* SuperKeyword */:
-                case 193 /* NamedTupleMember */:
+                case 108 /* ThisKeyword */:
+                case 190 /* ThisType */:
+                case 106 /* SuperKeyword */:
+                case 195 /* NamedTupleMember */:
                     return true;
                 default:
                     return false;
@@ -153533,16 +156955,16 @@
                 return undefined;
             }
             switch (node.kind) {
-                case 202 /* PropertyAccessExpression */:
-                case 158 /* QualifiedName */:
+                case 204 /* PropertyAccessExpression */:
+                case 159 /* QualifiedName */:
                 case 10 /* StringLiteral */:
-                case 94 /* FalseKeyword */:
-                case 109 /* TrueKeyword */:
-                case 103 /* NullKeyword */:
-                case 105 /* SuperKeyword */:
-                case 107 /* ThisKeyword */:
-                case 188 /* ThisType */:
-                case 78 /* Identifier */:
+                case 95 /* FalseKeyword */:
+                case 110 /* TrueKeyword */:
+                case 104 /* NullKeyword */:
+                case 106 /* SuperKeyword */:
+                case 108 /* ThisKeyword */:
+                case 190 /* ThisType */:
+                case 79 /* Identifier */:
                     break;
                 // Cant create the text span
                 default:
@@ -153558,7 +156980,7 @@
                     // If this is name of a module declarations, check if this is right side of dotted module name
                     // If parent of the module declaration which is parent of this node is module declaration and its body is the module declaration that this node is name of
                     // Then this name is name from dotted module
-                    if (nodeForStartPos.parent.parent.kind === 257 /* ModuleDeclaration */ &&
+                    if (nodeForStartPos.parent.parent.kind === 259 /* ModuleDeclaration */ &&
                         nodeForStartPos.parent.parent.body === nodeForStartPos.parent) {
                         // Use parent module declarations name for start pos
                         nodeForStartPos = nodeForStartPos.parent.parent.name;
@@ -153911,14 +157333,14 @@
             else {
                 // If is not commenting then remove all comments found.
                 for (var _i = 0, positions_1 = positions; _i < positions_1.length; _i++) {
-                    var pos_1 = positions_1[_i];
-                    var from = pos_1 - closeMultiline.length > 0 ? pos_1 - closeMultiline.length : 0;
+                    var pos_2 = positions_1[_i];
+                    var from = pos_2 - closeMultiline.length > 0 ? pos_2 - closeMultiline.length : 0;
                     var offset = text.substr(from, closeMultiline.length) === closeMultiline ? closeMultiline.length : 0;
                     textChanges.push({
                         newText: "",
                         span: {
                             length: openMultiline.length,
-                            start: pos_1 - offset
+                            start: pos_2 - offset
                         }
                     });
                 }
@@ -154111,6 +157533,16 @@
                 kind: kind
             };
         }
+        function getInlayHintsContext(file, span, preferences) {
+            return {
+                file: file,
+                program: getProgram(),
+                host: host,
+                span: span,
+                preferences: preferences,
+                cancellationToken: cancellationToken,
+            };
+        }
         function getSmartSelectionRange(fileName, position) {
             return ts.SmartSelectionRange.getSmartSelectionRange(position, syntaxTreeCache.getCurrentSourceFile(fileName));
         }
@@ -154153,6 +157585,12 @@
             var declaration = ts.firstOrOnly(ts.CallHierarchy.resolveCallHierarchyDeclaration(program, position === 0 ? sourceFile : ts.getTouchingPropertyName(sourceFile, position)));
             return declaration ? ts.CallHierarchy.getOutgoingCalls(program, declaration) : [];
         }
+        function provideInlayHints(fileName, span, preferences) {
+            if (preferences === void 0) { preferences = ts.emptyOptions; }
+            synchronizeHostData();
+            var sourceFile = getValidSourceFile(fileName);
+            return ts.InlayHints.provideInlayHints(getInlayHintsContext(sourceFile, span, preferences));
+        }
         var ls = {
             dispose: dispose,
             cleanupSemanticCache: cleanupSemanticCache,
@@ -154218,6 +157656,7 @@
             toggleMultilineComment: toggleMultilineComment,
             commentSelection: commentSelection,
             uncommentSelection: uncommentSelection,
+            provideInlayHints: provideInlayHints,
         };
         switch (languageServiceMode) {
             case ts.LanguageServiceMode.Semantic:
@@ -154279,7 +157718,7 @@
      */
     function literalIsName(node) {
         return ts.isDeclarationName(node) ||
-            node.parent.kind === 273 /* ExternalModuleReference */ ||
+            node.parent.kind === 275 /* ExternalModuleReference */ ||
             isArgumentOfElementAccessExpression(node) ||
             ts.isLiteralComputedPropertyDeclarationName(node);
     }
@@ -154297,13 +157736,13 @@
             case 10 /* StringLiteral */:
             case 14 /* NoSubstitutionTemplateLiteral */:
             case 8 /* NumericLiteral */:
-                if (node.parent.kind === 159 /* ComputedPropertyName */) {
+                if (node.parent.kind === 160 /* ComputedPropertyName */) {
                     return ts.isObjectLiteralElement(node.parent.parent) ? node.parent.parent : undefined;
                 }
             // falls through
-            case 78 /* Identifier */:
+            case 79 /* Identifier */:
                 return ts.isObjectLiteralElement(node.parent) &&
-                    (node.parent.parent.kind === 201 /* ObjectLiteralExpression */ || node.parent.parent.kind === 282 /* JsxAttributes */) &&
+                    (node.parent.parent.kind === 203 /* ObjectLiteralExpression */ || node.parent.parent.kind === 284 /* JsxAttributes */) &&
                     node.parent.name === node ? node.parent : undefined;
         }
         return undefined;
@@ -154345,7 +157784,7 @@
     function isArgumentOfElementAccessExpression(node) {
         return node &&
             node.parent &&
-            node.parent.kind === 203 /* ElementAccessExpression */ &&
+            node.parent.kind === 205 /* ElementAccessExpression */ &&
             node.parent.argumentExpression === node;
     }
     /**
@@ -154425,114 +157864,114 @@
                 if (node) {
                     var parent = node.parent;
                     switch (node.kind) {
-                        case 233 /* VariableStatement */:
+                        case 235 /* VariableStatement */:
                             // Span on first variable declaration
                             return spanInVariableDeclaration(node.declarationList.declarations[0]);
-                        case 250 /* VariableDeclaration */:
-                        case 164 /* PropertyDeclaration */:
-                        case 163 /* PropertySignature */:
+                        case 252 /* VariableDeclaration */:
+                        case 165 /* PropertyDeclaration */:
+                        case 164 /* PropertySignature */:
                             return spanInVariableDeclaration(node);
-                        case 161 /* Parameter */:
+                        case 162 /* Parameter */:
                             return spanInParameterDeclaration(node);
-                        case 252 /* FunctionDeclaration */:
-                        case 166 /* MethodDeclaration */:
-                        case 165 /* MethodSignature */:
-                        case 168 /* GetAccessor */:
-                        case 169 /* SetAccessor */:
-                        case 167 /* Constructor */:
-                        case 209 /* FunctionExpression */:
-                        case 210 /* ArrowFunction */:
+                        case 254 /* FunctionDeclaration */:
+                        case 167 /* MethodDeclaration */:
+                        case 166 /* MethodSignature */:
+                        case 170 /* GetAccessor */:
+                        case 171 /* SetAccessor */:
+                        case 169 /* Constructor */:
+                        case 211 /* FunctionExpression */:
+                        case 212 /* ArrowFunction */:
                             return spanInFunctionDeclaration(node);
-                        case 231 /* Block */:
+                        case 233 /* Block */:
                             if (ts.isFunctionBlock(node)) {
                                 return spanInFunctionBlock(node);
                             }
                         // falls through
-                        case 258 /* ModuleBlock */:
+                        case 260 /* ModuleBlock */:
                             return spanInBlock(node);
-                        case 288 /* CatchClause */:
+                        case 290 /* CatchClause */:
                             return spanInBlock(node.block);
-                        case 234 /* ExpressionStatement */:
+                        case 236 /* ExpressionStatement */:
                             // span on the expression
                             return textSpan(node.expression);
-                        case 243 /* ReturnStatement */:
+                        case 245 /* ReturnStatement */:
                             // span on return keyword and expression if present
                             return textSpan(node.getChildAt(0), node.expression);
-                        case 237 /* WhileStatement */:
+                        case 239 /* WhileStatement */:
                             // Span on while(...)
                             return textSpanEndingAtNextToken(node, node.expression);
-                        case 236 /* DoStatement */:
+                        case 238 /* DoStatement */:
                             // span in statement of the do statement
                             return spanInNode(node.statement);
-                        case 249 /* DebuggerStatement */:
+                        case 251 /* DebuggerStatement */:
                             // span on debugger keyword
                             return textSpan(node.getChildAt(0));
-                        case 235 /* IfStatement */:
+                        case 237 /* IfStatement */:
                             // set on if(..) span
                             return textSpanEndingAtNextToken(node, node.expression);
-                        case 246 /* LabeledStatement */:
+                        case 248 /* LabeledStatement */:
                             // span in statement
                             return spanInNode(node.statement);
-                        case 242 /* BreakStatement */:
-                        case 241 /* ContinueStatement */:
+                        case 244 /* BreakStatement */:
+                        case 243 /* ContinueStatement */:
                             // On break or continue keyword and label if present
                             return textSpan(node.getChildAt(0), node.label);
-                        case 238 /* ForStatement */:
+                        case 240 /* ForStatement */:
                             return spanInForStatement(node);
-                        case 239 /* ForInStatement */:
+                        case 241 /* ForInStatement */:
                             // span of for (a in ...)
                             return textSpanEndingAtNextToken(node, node.expression);
-                        case 240 /* ForOfStatement */:
+                        case 242 /* ForOfStatement */:
                             // span in initializer
                             return spanInInitializerOfForLike(node);
-                        case 245 /* SwitchStatement */:
+                        case 247 /* SwitchStatement */:
                             // span on switch(...)
                             return textSpanEndingAtNextToken(node, node.expression);
-                        case 285 /* CaseClause */:
-                        case 286 /* DefaultClause */:
+                        case 287 /* CaseClause */:
+                        case 288 /* DefaultClause */:
                             // span in first statement of the clause
                             return spanInNode(node.statements[0]);
-                        case 248 /* TryStatement */:
+                        case 250 /* TryStatement */:
                             // span in try block
                             return spanInBlock(node.tryBlock);
-                        case 247 /* ThrowStatement */:
+                        case 249 /* ThrowStatement */:
                             // span in throw ...
                             return textSpan(node, node.expression);
-                        case 267 /* ExportAssignment */:
+                        case 269 /* ExportAssignment */:
                             // span on export = id
                             return textSpan(node, node.expression);
-                        case 261 /* ImportEqualsDeclaration */:
+                        case 263 /* ImportEqualsDeclaration */:
                             // import statement without including semicolon
                             return textSpan(node, node.moduleReference);
-                        case 262 /* ImportDeclaration */:
+                        case 264 /* ImportDeclaration */:
                             // import statement without including semicolon
                             return textSpan(node, node.moduleSpecifier);
-                        case 268 /* ExportDeclaration */:
+                        case 270 /* ExportDeclaration */:
                             // import statement without including semicolon
                             return textSpan(node, node.moduleSpecifier);
-                        case 257 /* ModuleDeclaration */:
+                        case 259 /* ModuleDeclaration */:
                             // span on complete module if it is instantiated
                             if (ts.getModuleInstanceState(node) !== 1 /* Instantiated */) {
                                 return undefined;
                             }
                         // falls through
-                        case 253 /* ClassDeclaration */:
-                        case 256 /* EnumDeclaration */:
-                        case 292 /* EnumMember */:
-                        case 199 /* BindingElement */:
+                        case 255 /* ClassDeclaration */:
+                        case 258 /* EnumDeclaration */:
+                        case 294 /* EnumMember */:
+                        case 201 /* BindingElement */:
                             // span on complete node
                             return textSpan(node);
-                        case 244 /* WithStatement */:
+                        case 246 /* WithStatement */:
                             // span in statement
                             return spanInNode(node.statement);
-                        case 162 /* Decorator */:
+                        case 163 /* Decorator */:
                             return spanInNodeArray(parent.decorators);
-                        case 197 /* ObjectBindingPattern */:
-                        case 198 /* ArrayBindingPattern */:
+                        case 199 /* ObjectBindingPattern */:
+                        case 200 /* ArrayBindingPattern */:
                             return spanInBindingPattern(node);
                         // No breakpoint in interface, type alias
-                        case 254 /* InterfaceDeclaration */:
-                        case 255 /* TypeAliasDeclaration */:
+                        case 256 /* InterfaceDeclaration */:
+                        case 257 /* TypeAliasDeclaration */:
                             return undefined;
                         // Tokens:
                         case 26 /* SemicolonToken */:
@@ -154556,13 +157995,13 @@
                         case 29 /* LessThanToken */:
                             return spanInGreaterThanOrLessThanToken(node);
                         // Keywords:
-                        case 114 /* WhileKeyword */:
+                        case 115 /* WhileKeyword */:
                             return spanInWhileKeyword(node);
-                        case 90 /* ElseKeyword */:
-                        case 82 /* CatchKeyword */:
-                        case 95 /* FinallyKeyword */:
+                        case 91 /* ElseKeyword */:
+                        case 83 /* CatchKeyword */:
+                        case 96 /* FinallyKeyword */:
                             return spanInNextNode(node);
-                        case 157 /* OfKeyword */:
+                        case 158 /* OfKeyword */:
                             return spanInOfKeyword(node);
                         default:
                             // Destructuring pattern in destructuring assignment
@@ -154574,14 +158013,14 @@
                             // Set breakpoint on identifier element of destructuring pattern
                             // `a` or `...c` or `d: x` from
                             // `[a, b, ...c]` or `{ a, b }` or `{ d: x }` from destructuring pattern
-                            if ((node.kind === 78 /* Identifier */ ||
-                                node.kind === 221 /* SpreadElement */ ||
-                                node.kind === 289 /* PropertyAssignment */ ||
-                                node.kind === 290 /* ShorthandPropertyAssignment */) &&
+                            if ((node.kind === 79 /* Identifier */ ||
+                                node.kind === 223 /* SpreadElement */ ||
+                                node.kind === 291 /* PropertyAssignment */ ||
+                                node.kind === 292 /* ShorthandPropertyAssignment */) &&
                                 ts.isArrayLiteralOrObjectLiteralDestructuringPattern(parent)) {
                                 return textSpan(node);
                             }
-                            if (node.kind === 217 /* BinaryExpression */) {
+                            if (node.kind === 219 /* BinaryExpression */) {
                                 var _a = node, left = _a.left, operatorToken = _a.operatorToken;
                                 // Set breakpoint in destructuring pattern if its destructuring assignment
                                 // [a, b, c] or {a, b, c} of
@@ -154590,7 +158029,7 @@
                                 if (ts.isArrayLiteralOrObjectLiteralDestructuringPattern(left)) {
                                     return spanInArrayLiteralOrObjectLiteralDestructuringPattern(left);
                                 }
-                                if (operatorToken.kind === 62 /* EqualsToken */ && ts.isArrayLiteralOrObjectLiteralDestructuringPattern(node.parent)) {
+                                if (operatorToken.kind === 63 /* EqualsToken */ && ts.isArrayLiteralOrObjectLiteralDestructuringPattern(node.parent)) {
                                     // Set breakpoint on assignment expression element of destructuring pattern
                                     // a = expression of
                                     // [a = expression, b, c] = someExpression or
@@ -154603,22 +158042,22 @@
                             }
                             if (ts.isExpressionNode(node)) {
                                 switch (parent.kind) {
-                                    case 236 /* DoStatement */:
+                                    case 238 /* DoStatement */:
                                         // Set span as if on while keyword
                                         return spanInPreviousNode(node);
-                                    case 162 /* Decorator */:
+                                    case 163 /* Decorator */:
                                         // Set breakpoint on the decorator emit
                                         return spanInNode(node.parent);
-                                    case 238 /* ForStatement */:
-                                    case 240 /* ForOfStatement */:
+                                    case 240 /* ForStatement */:
+                                    case 242 /* ForOfStatement */:
                                         return textSpan(node);
-                                    case 217 /* BinaryExpression */:
+                                    case 219 /* BinaryExpression */:
                                         if (node.parent.operatorToken.kind === 27 /* CommaToken */) {
                                             // If this is a comma expression, the breakpoint is possible in this expression
                                             return textSpan(node);
                                         }
                                         break;
-                                    case 210 /* ArrowFunction */:
+                                    case 212 /* ArrowFunction */:
                                         if (node.parent.body === node) {
                                             // If this is body of arrow function, it is allowed to have the breakpoint
                                             return textSpan(node);
@@ -154627,21 +158066,21 @@
                                 }
                             }
                             switch (node.parent.kind) {
-                                case 289 /* PropertyAssignment */:
+                                case 291 /* PropertyAssignment */:
                                     // If this is name of property assignment, set breakpoint in the initializer
                                     if (node.parent.name === node &&
                                         !ts.isArrayLiteralOrObjectLiteralDestructuringPattern(node.parent.parent)) {
                                         return spanInNode(node.parent.initializer);
                                     }
                                     break;
-                                case 207 /* TypeAssertionExpression */:
+                                case 209 /* TypeAssertionExpression */:
                                     // Breakpoint in type assertion goes to its operand
                                     if (node.parent.type === node) {
                                         return spanInNextNode(node.parent.type);
                                     }
                                     break;
-                                case 250 /* VariableDeclaration */:
-                                case 161 /* Parameter */: {
+                                case 252 /* VariableDeclaration */:
+                                case 162 /* Parameter */: {
                                     // initializer of variable/parameter declaration go to previous node
                                     var _b = node.parent, initializer = _b.initializer, type = _b.type;
                                     if (initializer === node || type === node || ts.isAssignmentOperator(node.kind)) {
@@ -154649,7 +158088,7 @@
                                     }
                                     break;
                                 }
-                                case 217 /* BinaryExpression */: {
+                                case 219 /* BinaryExpression */: {
                                     var left = node.parent.left;
                                     if (ts.isArrayLiteralOrObjectLiteralDestructuringPattern(left) && node !== left) {
                                         // If initializer of destructuring assignment move to previous token
@@ -154679,7 +158118,7 @@
                 }
                 function spanInVariableDeclaration(variableDeclaration) {
                     // If declaration of for in statement, just set the span in parent
-                    if (variableDeclaration.parent.parent.kind === 239 /* ForInStatement */) {
+                    if (variableDeclaration.parent.parent.kind === 241 /* ForInStatement */) {
                         return spanInNode(variableDeclaration.parent.parent);
                     }
                     var parent = variableDeclaration.parent;
@@ -154691,7 +158130,7 @@
                     // or its declaration from 'for of'
                     if (variableDeclaration.initializer ||
                         ts.hasSyntacticModifier(variableDeclaration, 1 /* Export */) ||
-                        parent.parent.kind === 240 /* ForOfStatement */) {
+                        parent.parent.kind === 242 /* ForOfStatement */) {
                         return textSpanFromVariableDeclaration(variableDeclaration);
                     }
                     if (ts.isVariableDeclarationList(variableDeclaration.parent) &&
@@ -154732,7 +158171,7 @@
                 }
                 function canFunctionHaveSpanInWholeDeclaration(functionDeclaration) {
                     return ts.hasSyntacticModifier(functionDeclaration, 1 /* Export */) ||
-                        (functionDeclaration.parent.kind === 253 /* ClassDeclaration */ && functionDeclaration.kind !== 167 /* Constructor */);
+                        (functionDeclaration.parent.kind === 255 /* ClassDeclaration */ && functionDeclaration.kind !== 169 /* Constructor */);
                 }
                 function spanInFunctionDeclaration(functionDeclaration) {
                     // No breakpoints in the function signature
@@ -154755,26 +158194,26 @@
                 }
                 function spanInBlock(block) {
                     switch (block.parent.kind) {
-                        case 257 /* ModuleDeclaration */:
+                        case 259 /* ModuleDeclaration */:
                             if (ts.getModuleInstanceState(block.parent) !== 1 /* Instantiated */) {
                                 return undefined;
                             }
                         // Set on parent if on same line otherwise on first statement
                         // falls through
-                        case 237 /* WhileStatement */:
-                        case 235 /* IfStatement */:
-                        case 239 /* ForInStatement */:
+                        case 239 /* WhileStatement */:
+                        case 237 /* IfStatement */:
+                        case 241 /* ForInStatement */:
                             return spanInNodeIfStartsOnSameLine(block.parent, block.statements[0]);
                         // Set span on previous token if it starts on same line otherwise on the first statement of the block
-                        case 238 /* ForStatement */:
-                        case 240 /* ForOfStatement */:
+                        case 240 /* ForStatement */:
+                        case 242 /* ForOfStatement */:
                             return spanInNodeIfStartsOnSameLine(ts.findPrecedingToken(block.pos, sourceFile, block.parent), block.statements[0]);
                     }
                     // Default action is to set on first statement
                     return spanInNode(block.statements[0]);
                 }
                 function spanInInitializerOfForLike(forLikeStatement) {
-                    if (forLikeStatement.initializer.kind === 251 /* VariableDeclarationList */) {
+                    if (forLikeStatement.initializer.kind === 253 /* VariableDeclarationList */) {
                         // Declaration list - set breakpoint in first declaration
                         var variableDeclarationList = forLikeStatement.initializer;
                         if (variableDeclarationList.declarations.length > 0) {
@@ -154799,21 +158238,21 @@
                 }
                 function spanInBindingPattern(bindingPattern) {
                     // Set breakpoint in first binding element
-                    var firstBindingElement = ts.forEach(bindingPattern.elements, function (element) { return element.kind !== 223 /* OmittedExpression */ ? element : undefined; });
+                    var firstBindingElement = ts.forEach(bindingPattern.elements, function (element) { return element.kind !== 225 /* OmittedExpression */ ? element : undefined; });
                     if (firstBindingElement) {
                         return spanInNode(firstBindingElement);
                     }
                     // Empty binding pattern of binding element, set breakpoint on binding element
-                    if (bindingPattern.parent.kind === 199 /* BindingElement */) {
+                    if (bindingPattern.parent.kind === 201 /* BindingElement */) {
                         return textSpan(bindingPattern.parent);
                     }
                     // Variable declaration is used as the span
                     return textSpanFromVariableDeclaration(bindingPattern.parent);
                 }
                 function spanInArrayLiteralOrObjectLiteralDestructuringPattern(node) {
-                    ts.Debug.assert(node.kind !== 198 /* ArrayBindingPattern */ && node.kind !== 197 /* ObjectBindingPattern */);
-                    var elements = node.kind === 200 /* ArrayLiteralExpression */ ? node.elements : node.properties;
-                    var firstBindingElement = ts.forEach(elements, function (element) { return element.kind !== 223 /* OmittedExpression */ ? element : undefined; });
+                    ts.Debug.assert(node.kind !== 200 /* ArrayBindingPattern */ && node.kind !== 199 /* ObjectBindingPattern */);
+                    var elements = node.kind === 202 /* ArrayLiteralExpression */ ? node.elements : node.properties;
+                    var firstBindingElement = ts.forEach(elements, function (element) { return element.kind !== 225 /* OmittedExpression */ ? element : undefined; });
                     if (firstBindingElement) {
                         return spanInNode(firstBindingElement);
                     }
@@ -154821,18 +158260,18 @@
                     // just nested element in another destructuring assignment
                     // set breakpoint on assignment when parent is destructuring assignment
                     // Otherwise set breakpoint for this element
-                    return textSpan(node.parent.kind === 217 /* BinaryExpression */ ? node.parent : node);
+                    return textSpan(node.parent.kind === 219 /* BinaryExpression */ ? node.parent : node);
                 }
                 // Tokens:
                 function spanInOpenBraceToken(node) {
                     switch (node.parent.kind) {
-                        case 256 /* EnumDeclaration */:
+                        case 258 /* EnumDeclaration */:
                             var enumDeclaration = node.parent;
                             return spanInNodeIfStartsOnSameLine(ts.findPrecedingToken(node.pos, sourceFile, node.parent), enumDeclaration.members.length ? enumDeclaration.members[0] : enumDeclaration.getLastToken(sourceFile));
-                        case 253 /* ClassDeclaration */:
+                        case 255 /* ClassDeclaration */:
                             var classDeclaration = node.parent;
                             return spanInNodeIfStartsOnSameLine(ts.findPrecedingToken(node.pos, sourceFile, node.parent), classDeclaration.members.length ? classDeclaration.members[0] : classDeclaration.getLastToken(sourceFile));
-                        case 259 /* CaseBlock */:
+                        case 261 /* CaseBlock */:
                             return spanInNodeIfStartsOnSameLine(node.parent.parent, node.parent.clauses[0]);
                     }
                     // Default to parent node
@@ -154840,25 +158279,25 @@
                 }
                 function spanInCloseBraceToken(node) {
                     switch (node.parent.kind) {
-                        case 258 /* ModuleBlock */:
+                        case 260 /* ModuleBlock */:
                             // If this is not an instantiated module block, no bp span
                             if (ts.getModuleInstanceState(node.parent.parent) !== 1 /* Instantiated */) {
                                 return undefined;
                             }
                         // falls through
-                        case 256 /* EnumDeclaration */:
-                        case 253 /* ClassDeclaration */:
+                        case 258 /* EnumDeclaration */:
+                        case 255 /* ClassDeclaration */:
                             // Span on close brace token
                             return textSpan(node);
-                        case 231 /* Block */:
+                        case 233 /* Block */:
                             if (ts.isFunctionBlock(node.parent)) {
                                 // Span on close brace token
                                 return textSpan(node);
                             }
                         // falls through
-                        case 288 /* CatchClause */:
+                        case 290 /* CatchClause */:
                             return spanInNode(ts.lastOrUndefined(node.parent.statements));
-                        case 259 /* CaseBlock */:
+                        case 261 /* CaseBlock */:
                             // breakpoint in last statement of the last clause
                             var caseBlock = node.parent;
                             var lastClause = ts.lastOrUndefined(caseBlock.clauses);
@@ -154866,7 +158305,7 @@
                                 return spanInNode(ts.lastOrUndefined(lastClause.statements));
                             }
                             return undefined;
-                        case 197 /* ObjectBindingPattern */:
+                        case 199 /* ObjectBindingPattern */:
                             // Breakpoint in last binding element or binding pattern if it contains no elements
                             var bindingPattern = node.parent;
                             return spanInNode(ts.lastOrUndefined(bindingPattern.elements) || bindingPattern);
@@ -154882,7 +158321,7 @@
                 }
                 function spanInCloseBracketToken(node) {
                     switch (node.parent.kind) {
-                        case 198 /* ArrayBindingPattern */:
+                        case 200 /* ArrayBindingPattern */:
                             // Breakpoint in last binding element or binding pattern if it contains no elements
                             var bindingPattern = node.parent;
                             return textSpan(ts.lastOrUndefined(bindingPattern.elements) || bindingPattern);
@@ -154897,12 +158336,12 @@
                     }
                 }
                 function spanInOpenParenToken(node) {
-                    if (node.parent.kind === 236 /* DoStatement */ || // Go to while keyword and do action instead
-                        node.parent.kind === 204 /* CallExpression */ ||
-                        node.parent.kind === 205 /* NewExpression */) {
+                    if (node.parent.kind === 238 /* DoStatement */ || // Go to while keyword and do action instead
+                        node.parent.kind === 206 /* CallExpression */ ||
+                        node.parent.kind === 207 /* NewExpression */) {
                         return spanInPreviousNode(node);
                     }
-                    if (node.parent.kind === 208 /* ParenthesizedExpression */) {
+                    if (node.parent.kind === 210 /* ParenthesizedExpression */) {
                         return spanInNextNode(node);
                     }
                     // Default to parent node
@@ -154911,21 +158350,21 @@
                 function spanInCloseParenToken(node) {
                     // Is this close paren token of parameter list, set span in previous token
                     switch (node.parent.kind) {
-                        case 209 /* FunctionExpression */:
-                        case 252 /* FunctionDeclaration */:
-                        case 210 /* ArrowFunction */:
-                        case 166 /* MethodDeclaration */:
-                        case 165 /* MethodSignature */:
-                        case 168 /* GetAccessor */:
-                        case 169 /* SetAccessor */:
-                        case 167 /* Constructor */:
-                        case 237 /* WhileStatement */:
-                        case 236 /* DoStatement */:
-                        case 238 /* ForStatement */:
-                        case 240 /* ForOfStatement */:
-                        case 204 /* CallExpression */:
-                        case 205 /* NewExpression */:
-                        case 208 /* ParenthesizedExpression */:
+                        case 211 /* FunctionExpression */:
+                        case 254 /* FunctionDeclaration */:
+                        case 212 /* ArrowFunction */:
+                        case 167 /* MethodDeclaration */:
+                        case 166 /* MethodSignature */:
+                        case 170 /* GetAccessor */:
+                        case 171 /* SetAccessor */:
+                        case 169 /* Constructor */:
+                        case 239 /* WhileStatement */:
+                        case 238 /* DoStatement */:
+                        case 240 /* ForStatement */:
+                        case 242 /* ForOfStatement */:
+                        case 206 /* CallExpression */:
+                        case 207 /* NewExpression */:
+                        case 210 /* ParenthesizedExpression */:
                             return spanInPreviousNode(node);
                         // Default to parent node
                         default:
@@ -154935,20 +158374,20 @@
                 function spanInColonToken(node) {
                     // Is this : specifying return annotation of the function declaration
                     if (ts.isFunctionLike(node.parent) ||
-                        node.parent.kind === 289 /* PropertyAssignment */ ||
-                        node.parent.kind === 161 /* Parameter */) {
+                        node.parent.kind === 291 /* PropertyAssignment */ ||
+                        node.parent.kind === 162 /* Parameter */) {
                         return spanInPreviousNode(node);
                     }
                     return spanInNode(node.parent);
                 }
                 function spanInGreaterThanOrLessThanToken(node) {
-                    if (node.parent.kind === 207 /* TypeAssertionExpression */) {
+                    if (node.parent.kind === 209 /* TypeAssertionExpression */) {
                         return spanInNextNode(node);
                     }
                     return spanInNode(node.parent);
                 }
                 function spanInWhileKeyword(node) {
-                    if (node.parent.kind === 236 /* DoStatement */) {
+                    if (node.parent.kind === 238 /* DoStatement */) {
                         // Set span on while expression
                         return textSpanEndingAtNextToken(node, node.parent.expression);
                     }
@@ -154956,7 +158395,7 @@
                     return spanInNode(node.parent);
                 }
                 function spanInOfKeyword(node) {
-                    if (node.parent.kind === 240 /* ForOfStatement */) {
+                    if (node.parent.kind === 242 /* ForOfStatement */) {
                         // Set using next token
                         return spanInNextNode(node);
                     }
@@ -155564,6 +159003,10 @@
             var _this = this;
             return this.forwardJSONCall("provideCallHierarchyOutgoingCalls('" + fileName + "', " + position + ")", function () { return _this.languageService.provideCallHierarchyOutgoingCalls(fileName, position); });
         };
+        LanguageServiceShimObject.prototype.provideInlayHints = function (fileName, span, preference) {
+            var _this = this;
+            return this.forwardJSONCall("provideInlayHints('" + fileName + "', '" + JSON.stringify(span) + "', " + JSON.stringify(preference) + ")", function () { return _this.languageService.provideInlayHints(fileName, span, preference); });
+        };
         /// Emit
         LanguageServiceShimObject.prototype.getEmitOutput = function (fileName) {
             var _this = this;
@@ -155714,7 +159157,7 @@
                     typeAcquisition: configFile.typeAcquisition,
                     files: configFile.fileNames,
                     raw: configFile.raw,
-                    errors: realizeDiagnostics(__spreadArray(__spreadArray([], result.parseDiagnostics), configFile.errors), "\r\n")
+                    errors: realizeDiagnostics(__spreadArray(__spreadArray([], result.parseDiagnostics, true), configFile.errors, true), "\r\n")
                 };
             });
         };
@@ -155920,8 +159363,9 @@
             return availableVersion.compareTo(cachedTyping.version) <= 0;
         }
         JsTyping.isTypingUpToDate = isTypingUpToDate;
-        JsTyping.nodeCoreModuleList = [
+        var unprefixedNodeCoreModuleList = [
             "assert",
+            "assert/strict",
             "async_hooks",
             "buffer",
             "child_process",
@@ -155930,14 +159374,18 @@
             "constants",
             "crypto",
             "dgram",
+            "diagnostics_channel",
             "dns",
+            "dns/promises",
             "domain",
             "events",
             "fs",
+            "fs/promises",
             "http",
             "https",
             "http2",
             "inspector",
+            "module",
             "net",
             "os",
             "path",
@@ -155948,16 +159396,24 @@
             "readline",
             "repl",
             "stream",
+            "stream/promises",
             "string_decoder",
             "timers",
+            "timers/promises",
             "tls",
+            "trace_events",
             "tty",
             "url",
             "util",
+            "util/types",
             "v8",
             "vm",
+            "wasi",
+            "worker_threads",
             "zlib"
         ];
+        JsTyping.prefixedNodeCoreModuleList = unprefixedNodeCoreModuleList.map(function (name) { return "node:" + name; });
+        JsTyping.nodeCoreModuleList = __spreadArray(__spreadArray([], unprefixedNodeCoreModuleList, true), JsTyping.prefixedNodeCoreModuleList, true);
         JsTyping.nodeCoreModules = new ts.Set(JsTyping.nodeCoreModuleList);
         function nonRelativeModuleNameForTypingCache(moduleName) {
             return JsTyping.nodeCoreModules.has(moduleName) ? "node" : moduleName;
@@ -156437,7 +159893,7 @@
 (function (ts) {
     ts.WatchType.ClosedScriptInfo = "Closed Script info";
     ts.WatchType.ConfigFileForInferredRoot = "Config file for the inferred project root";
-    ts.WatchType.NodeModulesForClosedScriptInfo = "node_modules for closed script infos in them";
+    ts.WatchType.NodeModules = "node_modules for closed script infos and package.jsons affecting module specifier cache";
     ts.WatchType.MissingSourceMapFile = "Missing source map file";
     ts.WatchType.NoopConfigFileForInferredRoot = "Noop Config file for the inferred project root";
     ts.WatchType.MissingGeneratedFile = "Missing generated file";
@@ -156602,6 +160058,7 @@
                 CommandTypes["PrepareCallHierarchy"] = "prepareCallHierarchy";
                 CommandTypes["ProvideCallHierarchyIncomingCalls"] = "provideCallHierarchyIncomingCalls";
                 CommandTypes["ProvideCallHierarchyOutgoingCalls"] = "provideCallHierarchyOutgoingCalls";
+                CommandTypes["ProvideInlayHints"] = "provideInlayHints";
                 // NOTE: If updating this, be sure to also update `allCommandNames` in `testRunner/unittests/tsserver/session.ts`.
             })(CommandTypes = protocol.CommandTypes || (protocol.CommandTypes = {}));
             var WatchFileKind;
@@ -156627,6 +160084,15 @@
                 PollingWatchKind["DynamicPriority"] = "DynamicPriority";
                 PollingWatchKind["FixedChunkSize"] = "FixedChunkSize";
             })(PollingWatchKind = protocol.PollingWatchKind || (protocol.PollingWatchKind = {}));
+            var CompletionTriggerKind;
+            (function (CompletionTriggerKind) {
+                /** Completion was triggered by typing an identifier, manual invocation (e.g Ctrl+Space) or via API. */
+                CompletionTriggerKind[CompletionTriggerKind["Invoked"] = 1] = "Invoked";
+                /** Completion was triggered by a trigger character. */
+                CompletionTriggerKind[CompletionTriggerKind["TriggerCharacter"] = 2] = "TriggerCharacter";
+                /** Completion was re-triggered as the current completion list is incomplete. */
+                CompletionTriggerKind[CompletionTriggerKind["TriggerForIncompleteCompletions"] = 3] = "TriggerForIncompleteCompletions";
+            })(CompletionTriggerKind = protocol.CompletionTriggerKind || (protocol.CompletionTriggerKind = {}));
             var IndentStyle;
             (function (IndentStyle) {
                 IndentStyle["None"] = "None";
@@ -157508,9 +160974,7 @@
                 /*@internal*/
                 this.typingFiles = server.emptyArray;
                 /*@internal*/
-                this.exportMapCache = ts.createExportMapCache();
-                /*@internal*/
-                this.moduleSpecifierCache = ts.createModuleSpecifierCache();
+                this.moduleSpecifierCache = server.createModuleSpecifierCache(this);
                 /*@internal*/
                 this.globalCacheResolutionModuleName = ts.JsTyping.nonRelativeModuleNameForTypingCache;
                 this.directoryStructureHost = directoryStructureHost;
@@ -157606,8 +161070,13 @@
             });
             /*@internal*/
             Project.prototype.getSymlinkCache = function () {
-                var _a;
-                return this.symlinks || (this.symlinks = ts.discoverProbableSymlinks(((_a = this.program) === null || _a === void 0 ? void 0 : _a.getSourceFiles()) || server.emptyArray, this.getCanonicalFileName, this.getCurrentDirectory()));
+                if (!this.symlinks) {
+                    this.symlinks = ts.createSymlinkCache(this.getCurrentDirectory(), this.getCanonicalFileName);
+                }
+                if (this.program && !this.symlinks.hasProcessedResolutions()) {
+                    this.symlinks.setSymlinksFromResolutions(this.program.getSourceFiles(), this.program.getResolvedTypeReferenceDirectives());
+                }
+                return this.symlinks;
             };
             // Method of LanguageServiceHost
             Project.prototype.getCompilationSettings = function () {
@@ -157956,7 +161425,9 @@
                 this.resolutionCache.clear();
                 this.resolutionCache = undefined;
                 this.cachedUnresolvedImportsPerFile = undefined;
+                this.moduleSpecifierCache = undefined;
                 this.directoryStructureHost = undefined;
+                this.exportMapCache = undefined;
                 this.projectErrors = undefined;
                 // Clean up file watchers waiting for missing files
                 if (this.missingFilesMap) {
@@ -158136,7 +161607,7 @@
             /*@internal*/
             Project.prototype.markFileAsDirty = function (changedFile) {
                 this.markAsDirty();
-                if (!this.exportMapCache.isEmpty()) {
+                if (this.exportMapCache && !this.exportMapCache.isEmpty()) {
                     (this.changedFilesForExportMapCache || (this.changedFilesForExportMapCache = new ts.Set())).add(changedFile);
                 }
             };
@@ -158208,7 +161679,7 @@
                 else {
                     this.lastCachedUnresolvedImportsList = undefined;
                 }
-                var isFirstLoad = this.projectProgramVersion === 0;
+                var isFirstProgramLoad = this.projectProgramVersion === 0 && hasNewProgram;
                 if (hasNewProgram) {
                     this.projectProgramVersion++;
                 }
@@ -158217,7 +161688,7 @@
                         this.autoImportProviderHost = undefined;
                     (_a = this.autoImportProviderHost) === null || _a === void 0 ? void 0 : _a.markAsDirty();
                 }
-                if (isFirstLoad) {
+                if (isFirstProgramLoad) {
                     // Preload auto import provider so it's not created during completions request
                     this.getPackageJsonAutoImportProvider();
                 }
@@ -158246,7 +161717,6 @@
             };
             Project.prototype.updateGraphWorker = function () {
                 var _this = this;
-                var _a;
                 var oldProgram = this.program;
                 ts.Debug.assert(!this.isClosed(), "Called update graph worker of closed project");
                 this.writeLog("Starting updateGraphWorker: Project: " + this.getProjectName());
@@ -158264,8 +161734,8 @@
                 if (this.program && (!oldProgram || (this.program !== oldProgram && this.program.structureIsReused !== 2 /* Completely */))) {
                     hasNewProgram = true;
                     if (oldProgram) {
-                        for (var _i = 0, _b = oldProgram.getSourceFiles(); _i < _b.length; _i++) {
-                            var f = _b[_i];
+                        for (var _i = 0, _a = oldProgram.getSourceFiles(); _i < _a.length; _i++) {
+                            var f = _a[_i];
                             var newFile = this.program.getSourceFileByPath(f.resolvedPath);
                             if (!newFile || (f.resolvedPath === f.path && newFile.resolvedPath !== f.path)) {
                                 // new program does not contain this file - detach it from the project
@@ -158314,7 +161784,8 @@
                         this.resolutionCache.updateTypeRootsWatch();
                     }
                 }
-                if (!this.exportMapCache.isEmpty()) {
+                if (this.exportMapCache && !this.exportMapCache.isEmpty()) {
+                    this.exportMapCache.releaseSymbols();
                     if (this.hasAddedorRemovedFiles || oldProgram && !this.program.structureIsReused) {
                         this.exportMapCache.clear();
                     }
@@ -158350,12 +161821,12 @@
                 }, function (removed) { return _this.detachScriptInfoFromProject(removed); });
                 var elapsed = ts.timestamp() - start;
                 this.sendPerformanceEvent("UpdateGraph", elapsed);
-                this.writeLog("Finishing updateGraphWorker: Project: " + this.getProjectName() + " Version: " + this.getProjectVersion() + " structureChanged: " + hasNewProgram + " Elapsed: " + elapsed + "ms");
+                this.writeLog("Finishing updateGraphWorker: Project: " + this.getProjectName() + " Version: " + this.getProjectVersion() + " structureChanged: " + hasNewProgram + (this.program ? " structureIsReused:: " + ts.StructureIsReused[this.program.structureIsReused] : "") + " Elapsed: " + elapsed + "ms");
                 if (this.hasAddedorRemovedFiles) {
                     this.print(/*writeProjectFileNames*/ true);
                 }
                 else if (this.program !== oldProgram) {
-                    this.writeLog("Different program with same set of files:: structureIsReused:: " + ((_a = this.program) === null || _a === void 0 ? void 0 : _a.structureIsReused));
+                    this.writeLog("Different program with same set of files");
                 }
                 return hasNewProgram;
             };
@@ -158493,6 +161964,7 @@
                         this.cachedUnresolvedImportsPerFile.clear();
                         this.lastCachedUnresolvedImportsList = undefined;
                         this.resolutionCache.clear();
+                        this.moduleSpecifierCache.clear();
                     }
                     this.markAsDirty();
                 }
@@ -158623,10 +162095,10 @@
                     return;
                 }
                 // Search any globally-specified probe paths, then our peer node_modules
-                var searchPaths = __spreadArray(__spreadArray([], this.projectService.pluginProbeLocations), [
+                var searchPaths = __spreadArray(__spreadArray([], this.projectService.pluginProbeLocations, true), [
                     // ../../.. to walk from X/node_modules/typescript/lib/tsserver.js to X/node_modules/
                     ts.combinePaths(this.projectService.getExecutingFilePath(), "../../.."),
-                ]);
+                ], false);
                 if (this.projectService.globalPlugins) {
                     var _loop_1 = function (globalPluginName) {
                         // Skip empty names from odd commandline parses
@@ -158686,7 +162158,8 @@
                         project: this,
                         languageService: this.languageService,
                         languageServiceHost: this,
-                        serverHost: this.projectService.host
+                        serverHost: this.projectService.host,
+                        session: this.projectService.session
                     };
                     var pluginModule = pluginModuleFactory({ typescript: ts });
                     var newLS = pluginModule.create(info);
@@ -158735,8 +162208,13 @@
                 return packageJsons;
             };
             /*@internal*/
-            Project.prototype.getExportMapCache = function () {
-                return this.exportMapCache;
+            Project.prototype.getCachedExportInfoMap = function () {
+                return this.exportMapCache || (this.exportMapCache = ts.createCacheableExportInfoMap(this));
+            };
+            /*@internal*/
+            Project.prototype.clearCachedExportInfoMap = function () {
+                var _a;
+                (_a = this.exportMapCache) === null || _a === void 0 ? void 0 : _a.clear();
             };
             /*@internal*/
             Project.prototype.getModuleSpecifierCache = function () {
@@ -158802,6 +162280,14 @@
                 var _this = this;
                 return !!ts.forEachEntry(this.projectService.openFiles, function (_, fileName) { return _this.projectService.tryGetDefaultProjectForFile(server.toNormalizedPath(fileName)) === _this; });
             };
+            /*@internal*/
+            Project.prototype.watchNodeModulesForPackageJsonChanges = function (directoryPath) {
+                return this.projectService.watchPackageJsonsInNodeModules(this.toPath(directoryPath), this);
+            };
+            /*@internal*/
+            Project.prototype.getIncompleteCompletionsCache = function () {
+                return this.projectService.getIncompleteCompletionsCache();
+            };
             return Project;
         }());
         server.Project = Project;
@@ -158827,10 +162313,6 @@
                 return unresolvedImports || server.emptyArray;
             });
         }
-        function createProjectNameFactoryWithCounter(nameFactory) {
-            var nextId = 1;
-            return function () { return nameFactory(nextId++); };
-        }
         /**
          * If a file is opened and no tsconfig (or jsconfig) is found,
          * the file and its imports/references are put into an InferredProject.
@@ -158839,7 +162321,7 @@
             __extends(InferredProject, _super);
             /*@internal*/
             function InferredProject(projectService, documentRegistry, compilerOptions, watchOptions, projectRootPath, currentDirectory, pluginConfigOverrides, typeAcquisition) {
-                var _this = _super.call(this, InferredProject.newName(), ProjectKind.Inferred, projectService, documentRegistry, 
+                var _this = _super.call(this, projectService.newInferredProjectName(), ProjectKind.Inferred, projectService, documentRegistry, 
                 // TODO: GH#18217
                 /*files*/ undefined, 
                 /*lastFileExceededProgramSize*/ undefined, compilerOptions, 
@@ -158914,7 +162396,6 @@
                     exclude: ts.emptyArray
                 };
             };
-            InferredProject.newName = createProjectNameFactoryWithCounter(server.makeInferredProjectName);
             return InferredProject;
         }(Project));
         server.InferredProject = InferredProject;
@@ -158922,7 +162403,7 @@
             __extends(AutoImportProviderProject, _super);
             /*@internal*/
             function AutoImportProviderProject(hostProject, initialRootNames, documentRegistry, compilerOptions) {
-                var _this = _super.call(this, AutoImportProviderProject.newName(), ProjectKind.AutoImportProvider, hostProject.projectService, documentRegistry, 
+                var _this = _super.call(this, hostProject.projectService.newAutoImportProviderProjectName(), ProjectKind.AutoImportProvider, hostProject.projectService, documentRegistry, 
                 /*hasExplicitListOfFiles*/ false, 
                 /*lastFileExceededProgramSize*/ undefined, compilerOptions, 
                 /*compileOnSaveEnabled*/ false, hostProject.getWatchOptions(), hostProject.projectService.host, hostProject.currentDirectory) || this;
@@ -158938,6 +162419,10 @@
                 if (!dependencySelection) {
                     return ts.emptyArray;
                 }
+                var program = hostProject.getCurrentProgram();
+                if (!program) {
+                    return ts.emptyArray;
+                }
                 var dependencyNames;
                 var rootNames;
                 var rootFileName = ts.combinePaths(hostProject.currentDirectory, ts.inferredTypesContainingFile);
@@ -158949,7 +162434,6 @@
                 }
                 if (dependencyNames) {
                     var resolutions = ts.map(ts.arrayFrom(dependencyNames.keys()), function (name) { return ts.resolveTypeReferenceDirective(name, rootFileName, compilerOptions, moduleResolutionHost); });
-                    var program = hostProject.getCurrentProgram();
                     var symlinkCache = hostProject.getSymlinkCache();
                     for (var _d = 0, resolutions_1 = resolutions; _d < resolutions_1.length; _d++) {
                         var resolution = resolutions_1[_d];
@@ -158980,7 +162464,7 @@
                 if (dependencySelection === 0 /* Off */) {
                     return undefined;
                 }
-                var compilerOptions = __assign(__assign({}, hostProject.getCompilerOptions()), { noLib: true, diagnostics: false, skipLibCheck: true, types: ts.emptyArray, lib: ts.emptyArray, sourceMap: false });
+                var compilerOptions = __assign(__assign({}, hostProject.getCompilerOptions()), this.compilerOptionsOverrides);
                 var rootNames = this.getRootFileNames(dependencySelection, hostProject, moduleResolutionHost, compilerOptions);
                 if (!rootNames.length) {
                     return undefined;
@@ -159004,7 +162488,7 @@
                 var oldProgram = this.getCurrentProgram();
                 var hasSameSetOfFiles = _super.prototype.updateGraph.call(this);
                 if (oldProgram && oldProgram !== this.getCurrentProgram()) {
-                    this.hostProject.getExportMapCache().clear();
+                    this.hostProject.clearCachedExportInfoMap();
                 }
                 return hasSameSetOfFiles;
             };
@@ -159047,9 +162531,17 @@
             AutoImportProviderProject.prototype.getSymlinkCache = function () {
                 return this.hostProject.getSymlinkCache();
             };
-            AutoImportProviderProject.newName = createProjectNameFactoryWithCounter(server.makeAutoImportProviderProjectName);
             /*@internal*/
             AutoImportProviderProject.maxDependencies = 10;
+            /*@internal*/
+            AutoImportProviderProject.compilerOptionsOverrides = {
+                diagnostics: false,
+                skipLibCheck: true,
+                sourceMap: false,
+                types: ts.emptyArray,
+                lib: ts.emptyArray,
+                noLib: true,
+            };
             return AutoImportProviderProject;
         }(Project));
         server.AutoImportProviderProject = AutoImportProviderProject;
@@ -159187,7 +162679,7 @@
                 }
                 // Search our peer node_modules, then any globally-specified probe paths
                 // ../../.. to walk from X/node_modules/typescript/lib/tsserver.js to X/node_modules/
-                var searchPaths = __spreadArray([ts.combinePaths(this.projectService.getExecutingFilePath(), "../../..")], this.projectService.pluginProbeLocations);
+                var searchPaths = __spreadArray([ts.combinePaths(this.projectService.getExecutingFilePath(), "../../..")], this.projectService.pluginProbeLocations, true);
                 if (this.projectService.allowLocalPluginLoads) {
                     var local = ts.getDirectoryPath(this.canonicalConfigFilePath);
                     this.projectService.logger.info("Local plugin loading enabled; adding " + local + " to search paths");
@@ -159639,6 +163131,10 @@
                 project.projectOptions = true;
             }
         }
+        function createProjectNameFactoryWithCounter(nameFactory) {
+            var nextId = 1;
+            return function () { return nameFactory(nextId++); };
+        }
         var ProjectService = /** @class */ (function () {
             function ProjectService(opts) {
                 var _this = this;
@@ -159647,7 +163143,7 @@
                  */
                 /*@internal*/
                 this.filenameToScriptInfo = new ts.Map();
-                this.scriptInfoInNodeModulesWatchers = new ts.Map();
+                this.nodeModulesWatchers = new ts.Map();
                 /**
                  * Contains all the deleted script info's version information so that
                  * it does not reset when creating script info again
@@ -159672,6 +163168,10 @@
                  * projects specified by a tsconfig.json file
                  */
                 this.configuredProjects = new ts.Map();
+                /*@internal*/
+                this.newInferredProjectName = createProjectNameFactoryWithCounter(server.makeInferredProjectName);
+                /*@internal*/
+                this.newAutoImportProviderProjectName = createProjectNameFactoryWithCounter(server.makeAutoImportProviderProjectName);
                 /**
                  * Open files: with value being project root path, and key being Path of the file that is open
                  */
@@ -159721,6 +163221,7 @@
                 this.pluginProbeLocations = opts.pluginProbeLocations || server.emptyArray;
                 this.allowLocalPluginLoads = !!opts.allowLocalPluginLoads;
                 this.typesMapLocation = (opts.typesMapLocation === undefined) ? ts.combinePaths(ts.getDirectoryPath(this.getExecutingFilePath()), "typesMap.json") : opts.typesMapLocation;
+                this.session = opts.session;
                 if (opts.serverMode !== undefined) {
                     this.serverMode = opts.serverMode;
                     this.syntaxOnly = this.serverMode === ts.LanguageServiceMode.Syntactic;
@@ -161004,8 +164505,10 @@
                 // If any of the project is still watching wild cards dont close the watcher
                 if (ts.forEachEntry(configFileExistenceInfo.config.projects, ts.identity))
                     return;
-                ts.clearMap(configFileExistenceInfo.config.watchedDirectories, ts.closeFileWatcherOf);
-                configFileExistenceInfo.config.watchedDirectories = undefined;
+                if (configFileExistenceInfo.config.watchedDirectories) {
+                    ts.clearMap(configFileExistenceInfo.config.watchedDirectories, ts.closeFileWatcherOf);
+                    configFileExistenceInfo.config.watchedDirectories = undefined;
+                }
                 configFileExistenceInfo.config.watchedDirectoriesStale = undefined;
             };
             ProjectService.prototype.updateNonInferredProjectFiles = function (project, files, propertyReader) {
@@ -161316,52 +164819,78 @@
                     }
                 }
             };
-            ProjectService.prototype.watchClosedScriptInfoInNodeModules = function (dir) {
+            ProjectService.prototype.createNodeModulesWatcher = function (dir) {
                 var _this = this;
-                // Watch only directory
-                var existing = this.scriptInfoInNodeModulesWatchers.get(dir);
-                if (existing) {
-                    existing.refCount++;
-                    return existing;
-                }
-                var watchDir = dir + "/node_modules";
-                var watcher = this.watchFactory.watchDirectory(watchDir, function (fileOrDirectory) {
+                var watcher = this.watchFactory.watchDirectory(dir, function (fileOrDirectory) {
+                    var _a;
                     var fileOrDirectoryPath = ts.removeIgnoredPath(_this.toPath(fileOrDirectory));
                     if (!fileOrDirectoryPath)
                         return;
-                    // Has extension
-                    ts.Debug.assert(result.refCount > 0);
-                    if (watchDir === fileOrDirectoryPath) {
-                        _this.refreshScriptInfosInDirectory(watchDir);
+                    // Clear module specifier cache for any projects whose cache was affected by
+                    // dependency package.jsons in this node_modules directory
+                    var basename = ts.getBaseFileName(fileOrDirectoryPath);
+                    if (((_a = result.affectedModuleSpecifierCacheProjects) === null || _a === void 0 ? void 0 : _a.size) && (basename === "package.json" || basename === "node_modules")) {
+                        result.affectedModuleSpecifierCacheProjects.forEach(function (projectName) {
+                            var _a, _b;
+                            (_b = (_a = _this.findProject(projectName)) === null || _a === void 0 ? void 0 : _a.getModuleSpecifierCache()) === null || _b === void 0 ? void 0 : _b.clear();
+                        });
                     }
-                    else {
-                        var info = _this.getScriptInfoForPath(fileOrDirectoryPath);
-                        if (info) {
-                            if (isScriptInfoWatchedFromNodeModules(info)) {
-                                _this.refreshScriptInfo(info);
-                            }
-                        }
-                        // Folder
-                        else if (!ts.hasExtension(fileOrDirectoryPath)) {
-                            _this.refreshScriptInfosInDirectory(fileOrDirectoryPath);
-                        }
-                    }
-                }, 1 /* Recursive */, this.hostConfiguration.watchOptions, ts.WatchType.NodeModulesForClosedScriptInfo);
-                var result = {
-                    close: function () {
-                        if (result.refCount === 1) {
-                            watcher.close();
-                            _this.scriptInfoInNodeModulesWatchers.delete(dir);
+                    // Refresh closed script info after an npm install
+                    if (result.refreshScriptInfoRefCount) {
+                        if (dir === fileOrDirectoryPath) {
+                            _this.refreshScriptInfosInDirectory(dir);
                         }
                         else {
-                            result.refCount--;
+                            var info = _this.getScriptInfoForPath(fileOrDirectoryPath);
+                            if (info) {
+                                if (isScriptInfoWatchedFromNodeModules(info)) {
+                                    _this.refreshScriptInfo(info);
+                                }
+                            }
+                            // Folder
+                            else if (!ts.hasExtension(fileOrDirectoryPath)) {
+                                _this.refreshScriptInfosInDirectory(fileOrDirectoryPath);
+                            }
+                        }
+                    }
+                }, 1 /* Recursive */, this.hostConfiguration.watchOptions, ts.WatchType.NodeModules);
+                var result = {
+                    refreshScriptInfoRefCount: 0,
+                    affectedModuleSpecifierCacheProjects: undefined,
+                    close: function () {
+                        var _a;
+                        if (!result.refreshScriptInfoRefCount && !((_a = result.affectedModuleSpecifierCacheProjects) === null || _a === void 0 ? void 0 : _a.size)) {
+                            watcher.close();
+                            _this.nodeModulesWatchers.delete(dir);
                         }
                     },
-                    refCount: 1
                 };
-                this.scriptInfoInNodeModulesWatchers.set(dir, result);
+                this.nodeModulesWatchers.set(dir, result);
                 return result;
             };
+            /*@internal*/
+            ProjectService.prototype.watchPackageJsonsInNodeModules = function (dir, project) {
+                var watcher = this.nodeModulesWatchers.get(dir) || this.createNodeModulesWatcher(dir);
+                (watcher.affectedModuleSpecifierCacheProjects || (watcher.affectedModuleSpecifierCacheProjects = new ts.Set())).add(project.getProjectName());
+                return {
+                    close: function () {
+                        var _a;
+                        (_a = watcher.affectedModuleSpecifierCacheProjects) === null || _a === void 0 ? void 0 : _a.delete(project.getProjectName());
+                        watcher.close();
+                    },
+                };
+            };
+            ProjectService.prototype.watchClosedScriptInfoInNodeModules = function (dir) {
+                var watchDir = dir + "/node_modules";
+                var watcher = this.nodeModulesWatchers.get(watchDir) || this.createNodeModulesWatcher(watchDir);
+                watcher.refreshScriptInfoRefCount++;
+                return {
+                    close: function () {
+                        watcher.refreshScriptInfoRefCount--;
+                        watcher.close();
+                    },
+                };
+            };
             ProjectService.prototype.getModifiedTime = function (info) {
                 return (this.host.getModifiedTime(info.path) || ts.missingFileModifiedTime).getTime();
             };
@@ -161817,20 +165346,37 @@
             /*@internal*/
             ProjectService.prototype.getOriginalLocationEnsuringConfiguredProject = function (project, location) {
                 var _this = this;
-                var originalLocation = project.isSourceOfProjectReferenceRedirect(location.fileName) ?
+                var isSourceOfProjectReferenceRedirect = project.isSourceOfProjectReferenceRedirect(location.fileName);
+                var originalLocation = isSourceOfProjectReferenceRedirect ?
                     location :
                     project.getSourceMapper().tryGetSourcePosition(location);
                 if (!originalLocation)
                     return undefined;
                 var fileName = originalLocation.fileName;
-                if (!this.getScriptInfo(fileName) && !this.host.fileExists(fileName))
+                var scriptInfo = this.getScriptInfo(fileName);
+                if (!scriptInfo && !this.host.fileExists(fileName))
                     return undefined;
                 var originalFileInfo = { fileName: server.toNormalizedPath(fileName), path: this.toPath(fileName) };
                 var configFileName = this.getConfigFileNameForFile(originalFileInfo);
                 if (!configFileName)
                     return undefined;
-                var configuredProject = this.findConfiguredProjectByProjectName(configFileName) ||
-                    this.createAndLoadConfiguredProject(configFileName, "Creating project for original file: " + originalFileInfo.fileName + (location !== originalLocation ? " for location: " + location.fileName : ""));
+                var configuredProject = this.findConfiguredProjectByProjectName(configFileName);
+                if (!configuredProject) {
+                    if (project.getCompilerOptions().disableReferencedProjectLoad) {
+                        // If location was a project reference redirect, then `location` and `originalLocation` are the same.
+                        if (isSourceOfProjectReferenceRedirect) {
+                            return location;
+                        }
+                        // Otherwise, if we found `originalLocation` via a source map instead, then we check whether it's in
+                        // an open project.  If it is, we should search the containing project(s), even though the "default"
+                        // configured project isn't open.  However, if it's not in an open project, we need to stick with
+                        // `location` (i.e. the .d.ts file) because otherwise we'll miss the references in that file.
+                        return (scriptInfo === null || scriptInfo === void 0 ? void 0 : scriptInfo.containingProjects.length)
+                            ? originalLocation
+                            : location;
+                    }
+                    configuredProject = this.createAndLoadConfiguredProject(configFileName, "Creating project for original file: " + originalFileInfo.fileName + (location !== originalLocation ? " for location: " + location.fileName : ""));
+                }
                 updateProjectIfDirty(configuredProject);
                 var projectContainsOriginalInfo = function (project) {
                     var info = _this.getScriptInfo(fileName);
@@ -162662,11 +166208,29 @@
                     }
                 }
             };
+            /*@internal*/
+            ProjectService.prototype.getIncompleteCompletionsCache = function () {
+                return this.incompleteCompletionsCache || (this.incompleteCompletionsCache = createIncompleteCompletionsCache());
+            };
             /** Makes a filename safe to insert in a RegExp */
             ProjectService.filenameEscapeRegexp = /[-\/\\^$*+?.()|[\]{}]/g;
             return ProjectService;
         }());
         server.ProjectService = ProjectService;
+        function createIncompleteCompletionsCache() {
+            var info;
+            return {
+                get: function () {
+                    return info;
+                },
+                set: function (newInfo) {
+                    info = newInfo;
+                },
+                clear: function () {
+                    info = undefined;
+                }
+            };
+        }
         /* @internal */
         function isConfigFile(config) {
             return config.kind !== undefined;
@@ -162682,6 +166246,93 @@
 (function (ts) {
     var server;
     (function (server) {
+        function createModuleSpecifierCache(host) {
+            var containedNodeModulesWatchers;
+            var cache;
+            var currentKey;
+            var result = {
+                get: function (fromFileName, toFileName, preferences) {
+                    if (!cache || currentKey !== key(fromFileName, preferences))
+                        return undefined;
+                    return cache.get(toFileName);
+                },
+                set: function (fromFileName, toFileName, preferences, modulePaths, moduleSpecifiers) {
+                    ensureCache(fromFileName, preferences).set(toFileName, createInfo(modulePaths, moduleSpecifiers, /*isAutoImportable*/ true));
+                    // If any module specifiers were generated based off paths in node_modules,
+                    // a package.json file in that package was read and is an input to the cached.
+                    // Instead of watching each individual package.json file, set up a wildcard
+                    // directory watcher for any node_modules referenced and clear the cache when
+                    // it sees any changes.
+                    if (moduleSpecifiers) {
+                        for (var _i = 0, modulePaths_1 = modulePaths; _i < modulePaths_1.length; _i++) {
+                            var p = modulePaths_1[_i];
+                            if (p.isInNodeModules) {
+                                // No trailing slash
+                                var nodeModulesPath = p.path.substring(0, p.path.indexOf(ts.nodeModulesPathPart) + ts.nodeModulesPathPart.length - 1);
+                                if (!(containedNodeModulesWatchers === null || containedNodeModulesWatchers === void 0 ? void 0 : containedNodeModulesWatchers.has(nodeModulesPath))) {
+                                    (containedNodeModulesWatchers || (containedNodeModulesWatchers = new ts.Map())).set(nodeModulesPath, host.watchNodeModulesForPackageJsonChanges(nodeModulesPath));
+                                }
+                            }
+                        }
+                    }
+                },
+                setModulePaths: function (fromFileName, toFileName, preferences, modulePaths) {
+                    var cache = ensureCache(fromFileName, preferences);
+                    var info = cache.get(toFileName);
+                    if (info) {
+                        info.modulePaths = modulePaths;
+                    }
+                    else {
+                        cache.set(toFileName, createInfo(modulePaths, /*moduleSpecifiers*/ undefined, /*isAutoImportable*/ undefined));
+                    }
+                },
+                setIsAutoImportable: function (fromFileName, toFileName, preferences, isAutoImportable) {
+                    var cache = ensureCache(fromFileName, preferences);
+                    var info = cache.get(toFileName);
+                    if (info) {
+                        info.isAutoImportable = isAutoImportable;
+                    }
+                    else {
+                        cache.set(toFileName, createInfo(/*modulePaths*/ undefined, /*moduleSpecifiers*/ undefined, isAutoImportable));
+                    }
+                },
+                clear: function () {
+                    containedNodeModulesWatchers === null || containedNodeModulesWatchers === void 0 ? void 0 : containedNodeModulesWatchers.forEach(function (watcher) { return watcher.close(); });
+                    cache === null || cache === void 0 ? void 0 : cache.clear();
+                    containedNodeModulesWatchers === null || containedNodeModulesWatchers === void 0 ? void 0 : containedNodeModulesWatchers.clear();
+                    currentKey = undefined;
+                },
+                count: function () {
+                    return cache ? cache.size : 0;
+                }
+            };
+            if (ts.Debug.isDebugging) {
+                Object.defineProperty(result, "__cache", { get: function () { return cache; } });
+            }
+            return result;
+            function ensureCache(fromFileName, preferences) {
+                var newKey = key(fromFileName, preferences);
+                if (cache && (currentKey !== newKey)) {
+                    result.clear();
+                }
+                currentKey = newKey;
+                return cache || (cache = new ts.Map());
+            }
+            function key(fromFileName, preferences) {
+                return fromFileName + "," + preferences.importModuleSpecifierEnding + "," + preferences.importModuleSpecifierPreference;
+            }
+            function createInfo(modulePaths, moduleSpecifiers, isAutoImportable) {
+                return { modulePaths: modulePaths, moduleSpecifiers: moduleSpecifiers, isAutoImportable: isAutoImportable };
+            }
+        }
+        server.createModuleSpecifierCache = createModuleSpecifierCache;
+    })(server = ts.server || (ts.server = {}));
+})(ts || (ts = {}));
+/*@internal*/
+var ts;
+(function (ts) {
+    var server;
+    (function (server) {
         function createPackageJsonCache(host) {
             var packageJsons = new ts.Map();
             var directoriesWithoutPackageJson = new ts.Map();
@@ -163193,9 +166844,7 @@
             server.CommandNames.CompilerOptionsDiagnosticsFull,
             server.CommandNames.EncodedSemanticClassificationsFull,
             server.CommandNames.SemanticDiagnosticsSync,
-            server.CommandNames.SyntacticDiagnosticsSync,
             server.CommandNames.SuggestionDiagnosticsSync,
-            server.CommandNames.Geterr,
             server.CommandNames.GeterrForProject,
             server.CommandNames.Reload,
             server.CommandNames.ReloadProjects,
@@ -163217,7 +166866,7 @@
             server.CommandNames.ProvideCallHierarchyIncomingCalls,
             server.CommandNames.ProvideCallHierarchyOutgoingCalls,
         ];
-        var invalidSyntacticModeCommands = __spreadArray(__spreadArray([], invalidPartialSemanticModeCommands), [
+        var invalidSyntacticModeCommands = __spreadArray(__spreadArray([], invalidPartialSemanticModeCommands, true), [
             server.CommandNames.Definition,
             server.CommandNames.DefinitionFull,
             server.CommandNames.DefinitionAndBoundSpan,
@@ -163244,7 +166893,7 @@
             server.CommandNames.Occurrences,
             server.CommandNames.DocumentHighlights,
             server.CommandNames.DocumentHighlightsFull,
-        ]);
+        ], false);
         var Session = /** @class */ (function () {
             function Session(opts) {
                 var _a;
@@ -163628,6 +167277,9 @@
                     _a[server.CommandNames.UncommentSelectionFull] = function (request) {
                         return _this.requiredResponse(_this.uncommentSelection(request.arguments, /*simplifiedResult*/ false));
                     },
+                    _a[server.CommandNames.ProvideInlayHints] = function (request) {
+                        return _this.requiredResponse(_this.provideInlayHints(request.arguments));
+                    },
                     _a)));
                 this.host = opts.host;
                 this.cancellationToken = opts.cancellationToken;
@@ -163667,6 +167319,7 @@
                     typesMapLocation: opts.typesMapLocation,
                     syntaxOnly: opts.syntaxOnly,
                     serverMode: opts.serverMode,
+                    session: this
                 };
                 this.projectService = new server.ProjectService(settings);
                 this.projectService.setPerformanceEventHandler(this.performanceEventHandler.bind(this));
@@ -163921,7 +167574,7 @@
                         }
                     }
                     var fileName = item.fileName, project = item.project;
-                    // Ensure the project is upto date before checking if this file is present in the project
+                    // Ensure the project is up to date before checking if this file is present in the project.
                     server.updateProjectIfDirty(project);
                     if (!project.containsFile(fileName, requireOpen)) {
                         return;
@@ -163930,6 +167583,11 @@
                     if (_this.changeSeq !== seq) {
                         return;
                     }
+                    // Don't provide semantic diagnostics unless we're in full semantic mode.
+                    if (project.projectService.serverMode !== ts.LanguageServiceMode.Semantic) {
+                        goNext();
+                        return;
+                    }
                     next.immediate(function () {
                         _this.semanticCheck(fileName, project);
                         if (_this.changeSeq !== seq) {
@@ -163937,13 +167595,12 @@
                         }
                         if (_this.getPreferences(fileName).disableSuggestions) {
                             goNext();
+                            return;
                         }
-                        else {
-                            next.immediate(function () {
-                                _this.suggestionCheck(fileName, project);
-                                goNext();
-                            });
-                        }
+                        next.immediate(function () {
+                            _this.suggestionCheck(fileName, project);
+                            goNext();
+                        });
                     });
                 };
                 if (checkList.length > index && this.changeSeq === seq) {
@@ -164233,6 +167890,12 @@
                     };
                 });
             };
+            Session.prototype.provideInlayHints = function (args) {
+                var _a = this.getFileAndProject(args), file = _a.file, project = _a.project;
+                var scriptInfo = this.projectService.getScriptInfoForNormalizedPath(file);
+                var hints = project.getLanguageService().provideInlayHints(file, args, this.getPreferences(file));
+                return hints.map(function (hint) { return (__assign(__assign({}, hint), { position: scriptInfo.positionToLineOffset(hint.position) })); });
+            };
             Session.prototype.setCompilerOptionsForInferredProjects = function (args) {
                 this.projectService.setCompilerOptionsForInferredProjects(args.options, args.projectRootPath);
             };
@@ -164558,7 +168221,7 @@
                 var _a = this.getFileAndProject(args), file = _a.file, project = _a.project;
                 var scriptInfo = this.projectService.getScriptInfoForNormalizedPath(file);
                 var position = this.getPosition(args, scriptInfo);
-                var completions = project.getLanguageService().getCompletionsAtPosition(file, position, __assign(__assign({}, server.convertUserPreferences(this.getPreferences(file))), { triggerCharacter: args.triggerCharacter, includeExternalModuleExports: args.includeExternalModuleExports, includeInsertTextCompletions: args.includeInsertTextCompletions }));
+                var completions = project.getLanguageService().getCompletionsAtPosition(file, position, __assign(__assign({}, server.convertUserPreferences(this.getPreferences(file))), { triggerCharacter: args.triggerCharacter, triggerKind: args.triggerKind, includeExternalModuleExports: args.includeExternalModuleExports, includeInsertTextCompletions: args.includeInsertTextCompletions }));
                 if (completions === undefined)
                     return undefined;
                 if (kind === "completions-full" /* CompletionsFull */)
@@ -164898,7 +168561,7 @@
                 }
                 catch (e) {
                     var ls = project.getLanguageService();
-                    var existingDiagCodes_1 = __spreadArray(__spreadArray(__spreadArray([], ls.getSyntacticDiagnostics(file)), ls.getSemanticDiagnostics(file)), ls.getSuggestionDiagnostics(file)).map(function (d) {
+                    var existingDiagCodes_1 = __spreadArray(__spreadArray(__spreadArray([], ls.getSyntacticDiagnostics(file), true), ls.getSemanticDiagnostics(file), true), ls.getSuggestionDiagnostics(file), true).map(function (d) {
                         return ts.decodedTextSpanIntersectsWith(startPosition, endPosition - startPosition, d.start, d.length)
                             && d.code;
                     });
@@ -165032,7 +168695,7 @@
                         }
                     }
                 }
-                var sortedFiles = __spreadArray(__spreadArray(__spreadArray(__spreadArray([], highPriorityFiles), mediumPriorityFiles), lowPriorityFiles), veryLowPriorityFiles);
+                var sortedFiles = __spreadArray(__spreadArray(__spreadArray(__spreadArray([], highPriorityFiles, true), mediumPriorityFiles, true), lowPriorityFiles, true), veryLowPriorityFiles, true);
                 var checkList = sortedFiles.map(function (fileName) { return ({ fileName: fileName, project: project }); });
                 // Project level error analysis runs on background files too, therefore
                 // doesn't require the file to be opened
@@ -165401,10 +169064,8 @@
                 }
                 var lm = LineIndex.linesFromText(insertedText);
                 var lines = lm.lines;
-                if (lines.length > 1) {
-                    if (lines[lines.length - 1] === "") {
-                        lines.pop();
-                    }
+                if (lines.length > 1 && lines[lines.length - 1] === "") {
+                    lines.pop();
                 }
                 var branchParent;
                 var lastZeroCount;
@@ -165979,8 +169640,12 @@
                     }
                 }
                 // Skipped all children
-                var leaf = this.lineNumberToInfo(this.lineCount(), 0).leaf;
-                return { oneBasedLine: this.lineCount(), zeroBasedColumn: leaf ? leaf.charCount() : 0, lineText: undefined };
+                var lineCount = this.lineCount();
+                if (lineCount === 0) { // it's empty! (and lineNumberToInfo expects a one-based line)
+                    return { oneBasedLine: 1, zeroBasedColumn: 0, lineText: undefined };
+                }
+                var leaf = ts.Debug.checkDefined(this.lineNumberToInfo(lineCount, 0).leaf);
+                return { oneBasedLine: lineCount, zeroBasedColumn: leaf.charCount(), lineText: undefined };
             };
             /**
              * Input line number is relative to the start of this node.
@@ -166243,10 +169908,16 @@
                 getExecutingFilePath: function () { return ts.directorySeparator; },
                 getCurrentDirectory: returnEmptyString,
                 /* eslint-disable no-restricted-globals */
-                setTimeout: setTimeout,
-                clearTimeout: clearTimeout,
+                setTimeout: function (cb, ms) {
+                    var args = [];
+                    for (var _i = 2; _i < arguments.length; _i++) {
+                        args[_i - 2] = arguments[_i];
+                    }
+                    return setTimeout.apply(void 0, __spreadArray([cb, ms], args, false));
+                },
+                clearTimeout: function (handle) { return clearTimeout(handle); },
                 setImmediate: function (x) { return setTimeout(x, 0); },
-                clearImmediate: clearTimeout,
+                clearImmediate: function (handle) { return clearTimeout(handle); },
                 /* eslint-enable no-restricted-globals */
                 require: function () { return ({ module: undefined, error: new Error("Not implemented") }); },
                 exit: ts.notImplemented,
@@ -166279,7 +169950,7 @@
             __extends(WorkerSession, _super);
             function WorkerSession(host, webHost, options, logger, cancellationToken, hrtime) {
                 var _this = _super.call(this, __assign(__assign({ host: host, cancellationToken: cancellationToken }, options), { typingsInstaller: server.nullTypingsInstaller, byteLength: ts.notImplemented, // Formats the message text in send of Session which is overriden in this class so not needed
-                    hrtime: hrtime, logger: logger, canUseEvents: false })) || this;
+                    hrtime: hrtime, logger: logger, canUseEvents: true })) || this;
                 _this.webHost = webHost;
                 return _this;
             }
@@ -166994,7 +170665,7 @@
         }
         else {
             type = operatorOrType;
-            operator = 138 /* KeyOfKeyword */;
+            operator = 139 /* KeyOfKeyword */;
         }
         return ts.factory.createTypeOperatorNode(operator, type);
     }, factoryDeprecation);
@@ -167172,9 +170843,9 @@
     ts.createNode = ts.Debug.deprecate(function createNode(kind, pos, end) {
         if (pos === void 0) { pos = 0; }
         if (end === void 0) { end = 0; }
-        return ts.setTextRangePosEnd(kind === 298 /* SourceFile */ ? ts.parseBaseNodeFactory.createBaseSourceFileNode(kind) :
-            kind === 78 /* Identifier */ ? ts.parseBaseNodeFactory.createBaseIdentifierNode(kind) :
-                kind === 79 /* PrivateIdentifier */ ? ts.parseBaseNodeFactory.createBasePrivateIdentifierNode(kind) :
+        return ts.setTextRangePosEnd(kind === 300 /* SourceFile */ ? ts.parseBaseNodeFactory.createBaseSourceFileNode(kind) :
+            kind === 79 /* Identifier */ ? ts.parseBaseNodeFactory.createBaseIdentifierNode(kind) :
+                kind === 80 /* PrivateIdentifier */ ? ts.parseBaseNodeFactory.createBasePrivateIdentifierNode(kind) :
                     !ts.isNodeKind(kind) ? ts.parseBaseNodeFactory.createBaseTokenNode(kind) :
                         ts.parseBaseNodeFactory.createBaseNode(kind), pos, end);
     }, { since: "4.0", warnAfter: "4.1", message: "Use an appropriate `factory` method instead." });
@@ -167201,7 +170872,7 @@
     // #region Renamed node Tests
     /** @deprecated Use `isTypeAssertionExpression` instead. */
     ts.isTypeAssertion = ts.Debug.deprecate(function isTypeAssertion(node) {
-        return node.kind === 207 /* TypeAssertionExpression */;
+        return node.kind === 209 /* TypeAssertionExpression */;
     }, {
         since: "4.0",
         warnAfter: "4.1",
@@ -167416,7 +171087,7 @@
             sys.clearImmediate = clearImmediate;
             /* eslint-enable no-restricted-globals */
             if (typeof global !== "undefined" && global.gc) {
-                sys.gc = function () { return global.gc(); };
+                sys.gc = function () { var _a; return (_a = global.gc) === null || _a === void 0 ? void 0 : _a.call(global); };
             }
             sys.require = function (initialDir, moduleName) {
                 try {
diff --git a/node_modules/typescript/lib/tsserverlibrary.d.ts b/node_modules/typescript/lib/tsserverlibrary.d.ts
index d6750c4..581d70b 100644
--- a/node_modules/typescript/lib/tsserverlibrary.d.ts
+++ b/node_modules/typescript/lib/tsserverlibrary.d.ts
@@ -14,7 +14,7 @@
 ***************************************************************************** */
 
 declare namespace ts {
-    const versionMajorMinor = "4.3";
+    const versionMajorMinor = "4.4";
     /** The version of the TypeScript compiler release */
     const version: string;
     /**
@@ -166,306 +166,312 @@
         QuestionQuestionToken = 60,
         /** Only the JSDoc scanner produces BacktickToken. The normal scanner produces NoSubstitutionTemplateLiteral and related kinds. */
         BacktickToken = 61,
-        EqualsToken = 62,
-        PlusEqualsToken = 63,
-        MinusEqualsToken = 64,
-        AsteriskEqualsToken = 65,
-        AsteriskAsteriskEqualsToken = 66,
-        SlashEqualsToken = 67,
-        PercentEqualsToken = 68,
-        LessThanLessThanEqualsToken = 69,
-        GreaterThanGreaterThanEqualsToken = 70,
-        GreaterThanGreaterThanGreaterThanEqualsToken = 71,
-        AmpersandEqualsToken = 72,
-        BarEqualsToken = 73,
-        BarBarEqualsToken = 74,
-        AmpersandAmpersandEqualsToken = 75,
-        QuestionQuestionEqualsToken = 76,
-        CaretEqualsToken = 77,
-        Identifier = 78,
-        PrivateIdentifier = 79,
-        BreakKeyword = 80,
-        CaseKeyword = 81,
-        CatchKeyword = 82,
-        ClassKeyword = 83,
-        ConstKeyword = 84,
-        ContinueKeyword = 85,
-        DebuggerKeyword = 86,
-        DefaultKeyword = 87,
-        DeleteKeyword = 88,
-        DoKeyword = 89,
-        ElseKeyword = 90,
-        EnumKeyword = 91,
-        ExportKeyword = 92,
-        ExtendsKeyword = 93,
-        FalseKeyword = 94,
-        FinallyKeyword = 95,
-        ForKeyword = 96,
-        FunctionKeyword = 97,
-        IfKeyword = 98,
-        ImportKeyword = 99,
-        InKeyword = 100,
-        InstanceOfKeyword = 101,
-        NewKeyword = 102,
-        NullKeyword = 103,
-        ReturnKeyword = 104,
-        SuperKeyword = 105,
-        SwitchKeyword = 106,
-        ThisKeyword = 107,
-        ThrowKeyword = 108,
-        TrueKeyword = 109,
-        TryKeyword = 110,
-        TypeOfKeyword = 111,
-        VarKeyword = 112,
-        VoidKeyword = 113,
-        WhileKeyword = 114,
-        WithKeyword = 115,
-        ImplementsKeyword = 116,
-        InterfaceKeyword = 117,
-        LetKeyword = 118,
-        PackageKeyword = 119,
-        PrivateKeyword = 120,
-        ProtectedKeyword = 121,
-        PublicKeyword = 122,
-        StaticKeyword = 123,
-        YieldKeyword = 124,
-        AbstractKeyword = 125,
-        AsKeyword = 126,
-        AssertsKeyword = 127,
-        AnyKeyword = 128,
-        AsyncKeyword = 129,
-        AwaitKeyword = 130,
-        BooleanKeyword = 131,
-        ConstructorKeyword = 132,
-        DeclareKeyword = 133,
-        GetKeyword = 134,
-        InferKeyword = 135,
-        IntrinsicKeyword = 136,
-        IsKeyword = 137,
-        KeyOfKeyword = 138,
-        ModuleKeyword = 139,
-        NamespaceKeyword = 140,
-        NeverKeyword = 141,
-        ReadonlyKeyword = 142,
-        RequireKeyword = 143,
-        NumberKeyword = 144,
-        ObjectKeyword = 145,
-        SetKeyword = 146,
-        StringKeyword = 147,
-        SymbolKeyword = 148,
-        TypeKeyword = 149,
-        UndefinedKeyword = 150,
-        UniqueKeyword = 151,
-        UnknownKeyword = 152,
-        FromKeyword = 153,
-        GlobalKeyword = 154,
-        BigIntKeyword = 155,
-        OverrideKeyword = 156,
-        OfKeyword = 157,
-        QualifiedName = 158,
-        ComputedPropertyName = 159,
-        TypeParameter = 160,
-        Parameter = 161,
-        Decorator = 162,
-        PropertySignature = 163,
-        PropertyDeclaration = 164,
-        MethodSignature = 165,
-        MethodDeclaration = 166,
-        Constructor = 167,
-        GetAccessor = 168,
-        SetAccessor = 169,
-        CallSignature = 170,
-        ConstructSignature = 171,
-        IndexSignature = 172,
-        TypePredicate = 173,
-        TypeReference = 174,
-        FunctionType = 175,
-        ConstructorType = 176,
-        TypeQuery = 177,
-        TypeLiteral = 178,
-        ArrayType = 179,
-        TupleType = 180,
-        OptionalType = 181,
-        RestType = 182,
-        UnionType = 183,
-        IntersectionType = 184,
-        ConditionalType = 185,
-        InferType = 186,
-        ParenthesizedType = 187,
-        ThisType = 188,
-        TypeOperator = 189,
-        IndexedAccessType = 190,
-        MappedType = 191,
-        LiteralType = 192,
-        NamedTupleMember = 193,
-        TemplateLiteralType = 194,
-        TemplateLiteralTypeSpan = 195,
-        ImportType = 196,
-        ObjectBindingPattern = 197,
-        ArrayBindingPattern = 198,
-        BindingElement = 199,
-        ArrayLiteralExpression = 200,
-        ObjectLiteralExpression = 201,
-        PropertyAccessExpression = 202,
-        ElementAccessExpression = 203,
-        CallExpression = 204,
-        NewExpression = 205,
-        TaggedTemplateExpression = 206,
-        TypeAssertionExpression = 207,
-        ParenthesizedExpression = 208,
-        FunctionExpression = 209,
-        ArrowFunction = 210,
-        DeleteExpression = 211,
-        TypeOfExpression = 212,
-        VoidExpression = 213,
-        AwaitExpression = 214,
-        PrefixUnaryExpression = 215,
-        PostfixUnaryExpression = 216,
-        BinaryExpression = 217,
-        ConditionalExpression = 218,
-        TemplateExpression = 219,
-        YieldExpression = 220,
-        SpreadElement = 221,
-        ClassExpression = 222,
-        OmittedExpression = 223,
-        ExpressionWithTypeArguments = 224,
-        AsExpression = 225,
-        NonNullExpression = 226,
-        MetaProperty = 227,
-        SyntheticExpression = 228,
-        TemplateSpan = 229,
-        SemicolonClassElement = 230,
-        Block = 231,
-        EmptyStatement = 232,
-        VariableStatement = 233,
-        ExpressionStatement = 234,
-        IfStatement = 235,
-        DoStatement = 236,
-        WhileStatement = 237,
-        ForStatement = 238,
-        ForInStatement = 239,
-        ForOfStatement = 240,
-        ContinueStatement = 241,
-        BreakStatement = 242,
-        ReturnStatement = 243,
-        WithStatement = 244,
-        SwitchStatement = 245,
-        LabeledStatement = 246,
-        ThrowStatement = 247,
-        TryStatement = 248,
-        DebuggerStatement = 249,
-        VariableDeclaration = 250,
-        VariableDeclarationList = 251,
-        FunctionDeclaration = 252,
-        ClassDeclaration = 253,
-        InterfaceDeclaration = 254,
-        TypeAliasDeclaration = 255,
-        EnumDeclaration = 256,
-        ModuleDeclaration = 257,
-        ModuleBlock = 258,
-        CaseBlock = 259,
-        NamespaceExportDeclaration = 260,
-        ImportEqualsDeclaration = 261,
-        ImportDeclaration = 262,
-        ImportClause = 263,
-        NamespaceImport = 264,
-        NamedImports = 265,
-        ImportSpecifier = 266,
-        ExportAssignment = 267,
-        ExportDeclaration = 268,
-        NamedExports = 269,
-        NamespaceExport = 270,
-        ExportSpecifier = 271,
-        MissingDeclaration = 272,
-        ExternalModuleReference = 273,
-        JsxElement = 274,
-        JsxSelfClosingElement = 275,
-        JsxOpeningElement = 276,
-        JsxClosingElement = 277,
-        JsxFragment = 278,
-        JsxOpeningFragment = 279,
-        JsxClosingFragment = 280,
-        JsxAttribute = 281,
-        JsxAttributes = 282,
-        JsxSpreadAttribute = 283,
-        JsxExpression = 284,
-        CaseClause = 285,
-        DefaultClause = 286,
-        HeritageClause = 287,
-        CatchClause = 288,
-        PropertyAssignment = 289,
-        ShorthandPropertyAssignment = 290,
-        SpreadAssignment = 291,
-        EnumMember = 292,
-        UnparsedPrologue = 293,
-        UnparsedPrepend = 294,
-        UnparsedText = 295,
-        UnparsedInternalText = 296,
-        UnparsedSyntheticReference = 297,
-        SourceFile = 298,
-        Bundle = 299,
-        UnparsedSource = 300,
-        InputFiles = 301,
-        JSDocTypeExpression = 302,
-        JSDocNameReference = 303,
-        JSDocAllType = 304,
-        JSDocUnknownType = 305,
-        JSDocNullableType = 306,
-        JSDocNonNullableType = 307,
-        JSDocOptionalType = 308,
-        JSDocFunctionType = 309,
-        JSDocVariadicType = 310,
-        JSDocNamepathType = 311,
-        JSDocComment = 312,
-        JSDocText = 313,
-        JSDocTypeLiteral = 314,
-        JSDocSignature = 315,
-        JSDocLink = 316,
-        JSDocTag = 317,
-        JSDocAugmentsTag = 318,
-        JSDocImplementsTag = 319,
-        JSDocAuthorTag = 320,
-        JSDocDeprecatedTag = 321,
-        JSDocClassTag = 322,
-        JSDocPublicTag = 323,
-        JSDocPrivateTag = 324,
-        JSDocProtectedTag = 325,
-        JSDocReadonlyTag = 326,
-        JSDocOverrideTag = 327,
-        JSDocCallbackTag = 328,
-        JSDocEnumTag = 329,
-        JSDocParameterTag = 330,
-        JSDocReturnTag = 331,
-        JSDocThisTag = 332,
-        JSDocTypeTag = 333,
-        JSDocTemplateTag = 334,
-        JSDocTypedefTag = 335,
-        JSDocSeeTag = 336,
-        JSDocPropertyTag = 337,
-        SyntaxList = 338,
-        NotEmittedStatement = 339,
-        PartiallyEmittedExpression = 340,
-        CommaListExpression = 341,
-        MergeDeclarationMarker = 342,
-        EndOfDeclarationMarker = 343,
-        SyntheticReferenceExpression = 344,
-        Count = 345,
-        FirstAssignment = 62,
-        LastAssignment = 77,
-        FirstCompoundAssignment = 63,
-        LastCompoundAssignment = 77,
-        FirstReservedWord = 80,
-        LastReservedWord = 115,
-        FirstKeyword = 80,
-        LastKeyword = 157,
-        FirstFutureReservedWord = 116,
-        LastFutureReservedWord = 124,
-        FirstTypeNode = 173,
-        LastTypeNode = 196,
+        /** Only the JSDoc scanner produces HashToken. The normal scanner produces PrivateIdentifier. */
+        HashToken = 62,
+        EqualsToken = 63,
+        PlusEqualsToken = 64,
+        MinusEqualsToken = 65,
+        AsteriskEqualsToken = 66,
+        AsteriskAsteriskEqualsToken = 67,
+        SlashEqualsToken = 68,
+        PercentEqualsToken = 69,
+        LessThanLessThanEqualsToken = 70,
+        GreaterThanGreaterThanEqualsToken = 71,
+        GreaterThanGreaterThanGreaterThanEqualsToken = 72,
+        AmpersandEqualsToken = 73,
+        BarEqualsToken = 74,
+        BarBarEqualsToken = 75,
+        AmpersandAmpersandEqualsToken = 76,
+        QuestionQuestionEqualsToken = 77,
+        CaretEqualsToken = 78,
+        Identifier = 79,
+        PrivateIdentifier = 80,
+        BreakKeyword = 81,
+        CaseKeyword = 82,
+        CatchKeyword = 83,
+        ClassKeyword = 84,
+        ConstKeyword = 85,
+        ContinueKeyword = 86,
+        DebuggerKeyword = 87,
+        DefaultKeyword = 88,
+        DeleteKeyword = 89,
+        DoKeyword = 90,
+        ElseKeyword = 91,
+        EnumKeyword = 92,
+        ExportKeyword = 93,
+        ExtendsKeyword = 94,
+        FalseKeyword = 95,
+        FinallyKeyword = 96,
+        ForKeyword = 97,
+        FunctionKeyword = 98,
+        IfKeyword = 99,
+        ImportKeyword = 100,
+        InKeyword = 101,
+        InstanceOfKeyword = 102,
+        NewKeyword = 103,
+        NullKeyword = 104,
+        ReturnKeyword = 105,
+        SuperKeyword = 106,
+        SwitchKeyword = 107,
+        ThisKeyword = 108,
+        ThrowKeyword = 109,
+        TrueKeyword = 110,
+        TryKeyword = 111,
+        TypeOfKeyword = 112,
+        VarKeyword = 113,
+        VoidKeyword = 114,
+        WhileKeyword = 115,
+        WithKeyword = 116,
+        ImplementsKeyword = 117,
+        InterfaceKeyword = 118,
+        LetKeyword = 119,
+        PackageKeyword = 120,
+        PrivateKeyword = 121,
+        ProtectedKeyword = 122,
+        PublicKeyword = 123,
+        StaticKeyword = 124,
+        YieldKeyword = 125,
+        AbstractKeyword = 126,
+        AsKeyword = 127,
+        AssertsKeyword = 128,
+        AnyKeyword = 129,
+        AsyncKeyword = 130,
+        AwaitKeyword = 131,
+        BooleanKeyword = 132,
+        ConstructorKeyword = 133,
+        DeclareKeyword = 134,
+        GetKeyword = 135,
+        InferKeyword = 136,
+        IntrinsicKeyword = 137,
+        IsKeyword = 138,
+        KeyOfKeyword = 139,
+        ModuleKeyword = 140,
+        NamespaceKeyword = 141,
+        NeverKeyword = 142,
+        ReadonlyKeyword = 143,
+        RequireKeyword = 144,
+        NumberKeyword = 145,
+        ObjectKeyword = 146,
+        SetKeyword = 147,
+        StringKeyword = 148,
+        SymbolKeyword = 149,
+        TypeKeyword = 150,
+        UndefinedKeyword = 151,
+        UniqueKeyword = 152,
+        UnknownKeyword = 153,
+        FromKeyword = 154,
+        GlobalKeyword = 155,
+        BigIntKeyword = 156,
+        OverrideKeyword = 157,
+        OfKeyword = 158,
+        QualifiedName = 159,
+        ComputedPropertyName = 160,
+        TypeParameter = 161,
+        Parameter = 162,
+        Decorator = 163,
+        PropertySignature = 164,
+        PropertyDeclaration = 165,
+        MethodSignature = 166,
+        MethodDeclaration = 167,
+        ClassStaticBlockDeclaration = 168,
+        Constructor = 169,
+        GetAccessor = 170,
+        SetAccessor = 171,
+        CallSignature = 172,
+        ConstructSignature = 173,
+        IndexSignature = 174,
+        TypePredicate = 175,
+        TypeReference = 176,
+        FunctionType = 177,
+        ConstructorType = 178,
+        TypeQuery = 179,
+        TypeLiteral = 180,
+        ArrayType = 181,
+        TupleType = 182,
+        OptionalType = 183,
+        RestType = 184,
+        UnionType = 185,
+        IntersectionType = 186,
+        ConditionalType = 187,
+        InferType = 188,
+        ParenthesizedType = 189,
+        ThisType = 190,
+        TypeOperator = 191,
+        IndexedAccessType = 192,
+        MappedType = 193,
+        LiteralType = 194,
+        NamedTupleMember = 195,
+        TemplateLiteralType = 196,
+        TemplateLiteralTypeSpan = 197,
+        ImportType = 198,
+        ObjectBindingPattern = 199,
+        ArrayBindingPattern = 200,
+        BindingElement = 201,
+        ArrayLiteralExpression = 202,
+        ObjectLiteralExpression = 203,
+        PropertyAccessExpression = 204,
+        ElementAccessExpression = 205,
+        CallExpression = 206,
+        NewExpression = 207,
+        TaggedTemplateExpression = 208,
+        TypeAssertionExpression = 209,
+        ParenthesizedExpression = 210,
+        FunctionExpression = 211,
+        ArrowFunction = 212,
+        DeleteExpression = 213,
+        TypeOfExpression = 214,
+        VoidExpression = 215,
+        AwaitExpression = 216,
+        PrefixUnaryExpression = 217,
+        PostfixUnaryExpression = 218,
+        BinaryExpression = 219,
+        ConditionalExpression = 220,
+        TemplateExpression = 221,
+        YieldExpression = 222,
+        SpreadElement = 223,
+        ClassExpression = 224,
+        OmittedExpression = 225,
+        ExpressionWithTypeArguments = 226,
+        AsExpression = 227,
+        NonNullExpression = 228,
+        MetaProperty = 229,
+        SyntheticExpression = 230,
+        TemplateSpan = 231,
+        SemicolonClassElement = 232,
+        Block = 233,
+        EmptyStatement = 234,
+        VariableStatement = 235,
+        ExpressionStatement = 236,
+        IfStatement = 237,
+        DoStatement = 238,
+        WhileStatement = 239,
+        ForStatement = 240,
+        ForInStatement = 241,
+        ForOfStatement = 242,
+        ContinueStatement = 243,
+        BreakStatement = 244,
+        ReturnStatement = 245,
+        WithStatement = 246,
+        SwitchStatement = 247,
+        LabeledStatement = 248,
+        ThrowStatement = 249,
+        TryStatement = 250,
+        DebuggerStatement = 251,
+        VariableDeclaration = 252,
+        VariableDeclarationList = 253,
+        FunctionDeclaration = 254,
+        ClassDeclaration = 255,
+        InterfaceDeclaration = 256,
+        TypeAliasDeclaration = 257,
+        EnumDeclaration = 258,
+        ModuleDeclaration = 259,
+        ModuleBlock = 260,
+        CaseBlock = 261,
+        NamespaceExportDeclaration = 262,
+        ImportEqualsDeclaration = 263,
+        ImportDeclaration = 264,
+        ImportClause = 265,
+        NamespaceImport = 266,
+        NamedImports = 267,
+        ImportSpecifier = 268,
+        ExportAssignment = 269,
+        ExportDeclaration = 270,
+        NamedExports = 271,
+        NamespaceExport = 272,
+        ExportSpecifier = 273,
+        MissingDeclaration = 274,
+        ExternalModuleReference = 275,
+        JsxElement = 276,
+        JsxSelfClosingElement = 277,
+        JsxOpeningElement = 278,
+        JsxClosingElement = 279,
+        JsxFragment = 280,
+        JsxOpeningFragment = 281,
+        JsxClosingFragment = 282,
+        JsxAttribute = 283,
+        JsxAttributes = 284,
+        JsxSpreadAttribute = 285,
+        JsxExpression = 286,
+        CaseClause = 287,
+        DefaultClause = 288,
+        HeritageClause = 289,
+        CatchClause = 290,
+        PropertyAssignment = 291,
+        ShorthandPropertyAssignment = 292,
+        SpreadAssignment = 293,
+        EnumMember = 294,
+        UnparsedPrologue = 295,
+        UnparsedPrepend = 296,
+        UnparsedText = 297,
+        UnparsedInternalText = 298,
+        UnparsedSyntheticReference = 299,
+        SourceFile = 300,
+        Bundle = 301,
+        UnparsedSource = 302,
+        InputFiles = 303,
+        JSDocTypeExpression = 304,
+        JSDocNameReference = 305,
+        JSDocMemberName = 306,
+        JSDocAllType = 307,
+        JSDocUnknownType = 308,
+        JSDocNullableType = 309,
+        JSDocNonNullableType = 310,
+        JSDocOptionalType = 311,
+        JSDocFunctionType = 312,
+        JSDocVariadicType = 313,
+        JSDocNamepathType = 314,
+        JSDocComment = 315,
+        JSDocText = 316,
+        JSDocTypeLiteral = 317,
+        JSDocSignature = 318,
+        JSDocLink = 319,
+        JSDocLinkCode = 320,
+        JSDocLinkPlain = 321,
+        JSDocTag = 322,
+        JSDocAugmentsTag = 323,
+        JSDocImplementsTag = 324,
+        JSDocAuthorTag = 325,
+        JSDocDeprecatedTag = 326,
+        JSDocClassTag = 327,
+        JSDocPublicTag = 328,
+        JSDocPrivateTag = 329,
+        JSDocProtectedTag = 330,
+        JSDocReadonlyTag = 331,
+        JSDocOverrideTag = 332,
+        JSDocCallbackTag = 333,
+        JSDocEnumTag = 334,
+        JSDocParameterTag = 335,
+        JSDocReturnTag = 336,
+        JSDocThisTag = 337,
+        JSDocTypeTag = 338,
+        JSDocTemplateTag = 339,
+        JSDocTypedefTag = 340,
+        JSDocSeeTag = 341,
+        JSDocPropertyTag = 342,
+        SyntaxList = 343,
+        NotEmittedStatement = 344,
+        PartiallyEmittedExpression = 345,
+        CommaListExpression = 346,
+        MergeDeclarationMarker = 347,
+        EndOfDeclarationMarker = 348,
+        SyntheticReferenceExpression = 349,
+        Count = 350,
+        FirstAssignment = 63,
+        LastAssignment = 78,
+        FirstCompoundAssignment = 64,
+        LastCompoundAssignment = 78,
+        FirstReservedWord = 81,
+        LastReservedWord = 116,
+        FirstKeyword = 81,
+        LastKeyword = 158,
+        FirstFutureReservedWord = 117,
+        LastFutureReservedWord = 125,
+        FirstTypeNode = 175,
+        LastTypeNode = 198,
         FirstPunctuation = 18,
-        LastPunctuation = 77,
+        LastPunctuation = 78,
         FirstToken = 0,
-        LastToken = 157,
+        LastToken = 158,
         FirstTriviaToken = 2,
         LastTriviaToken = 7,
         FirstLiteralToken = 8,
@@ -473,25 +479,25 @@
         FirstTemplateToken = 14,
         LastTemplateToken = 17,
         FirstBinaryOperator = 29,
-        LastBinaryOperator = 77,
-        FirstStatement = 233,
-        LastStatement = 249,
-        FirstNode = 158,
-        FirstJSDocNode = 302,
-        LastJSDocNode = 337,
-        FirstJSDocTagNode = 317,
-        LastJSDocTagNode = 337,
+        LastBinaryOperator = 78,
+        FirstStatement = 235,
+        LastStatement = 251,
+        FirstNode = 159,
+        FirstJSDocNode = 304,
+        LastJSDocNode = 342,
+        FirstJSDocTagNode = 322,
+        LastJSDocTagNode = 342,
     }
     export type TriviaSyntaxKind = SyntaxKind.SingleLineCommentTrivia | SyntaxKind.MultiLineCommentTrivia | SyntaxKind.NewLineTrivia | SyntaxKind.WhitespaceTrivia | SyntaxKind.ShebangTrivia | SyntaxKind.ConflictMarkerTrivia;
     export type LiteralSyntaxKind = SyntaxKind.NumericLiteral | SyntaxKind.BigIntLiteral | SyntaxKind.StringLiteral | SyntaxKind.JsxText | SyntaxKind.JsxTextAllWhiteSpaces | SyntaxKind.RegularExpressionLiteral | SyntaxKind.NoSubstitutionTemplateLiteral;
     export type PseudoLiteralSyntaxKind = SyntaxKind.TemplateHead | SyntaxKind.TemplateMiddle | SyntaxKind.TemplateTail;
-    export type PunctuationSyntaxKind = SyntaxKind.OpenBraceToken | SyntaxKind.CloseBraceToken | SyntaxKind.OpenParenToken | SyntaxKind.CloseParenToken | SyntaxKind.OpenBracketToken | SyntaxKind.CloseBracketToken | SyntaxKind.DotToken | SyntaxKind.DotDotDotToken | SyntaxKind.SemicolonToken | SyntaxKind.CommaToken | SyntaxKind.QuestionDotToken | SyntaxKind.LessThanToken | SyntaxKind.LessThanSlashToken | SyntaxKind.GreaterThanToken | SyntaxKind.LessThanEqualsToken | SyntaxKind.GreaterThanEqualsToken | SyntaxKind.EqualsEqualsToken | SyntaxKind.ExclamationEqualsToken | SyntaxKind.EqualsEqualsEqualsToken | SyntaxKind.ExclamationEqualsEqualsToken | SyntaxKind.EqualsGreaterThanToken | SyntaxKind.PlusToken | SyntaxKind.MinusToken | SyntaxKind.AsteriskToken | SyntaxKind.AsteriskAsteriskToken | SyntaxKind.SlashToken | SyntaxKind.PercentToken | SyntaxKind.PlusPlusToken | SyntaxKind.MinusMinusToken | SyntaxKind.LessThanLessThanToken | SyntaxKind.GreaterThanGreaterThanToken | SyntaxKind.GreaterThanGreaterThanGreaterThanToken | SyntaxKind.AmpersandToken | SyntaxKind.BarToken | SyntaxKind.CaretToken | SyntaxKind.ExclamationToken | SyntaxKind.TildeToken | SyntaxKind.AmpersandAmpersandToken | SyntaxKind.BarBarToken | SyntaxKind.QuestionQuestionToken | SyntaxKind.QuestionToken | SyntaxKind.ColonToken | SyntaxKind.AtToken | SyntaxKind.BacktickToken | SyntaxKind.EqualsToken | SyntaxKind.PlusEqualsToken | SyntaxKind.MinusEqualsToken | SyntaxKind.AsteriskEqualsToken | SyntaxKind.AsteriskAsteriskEqualsToken | SyntaxKind.SlashEqualsToken | SyntaxKind.PercentEqualsToken | SyntaxKind.LessThanLessThanEqualsToken | SyntaxKind.GreaterThanGreaterThanEqualsToken | SyntaxKind.GreaterThanGreaterThanGreaterThanEqualsToken | SyntaxKind.AmpersandEqualsToken | SyntaxKind.BarEqualsToken | SyntaxKind.CaretEqualsToken;
+    export type PunctuationSyntaxKind = SyntaxKind.OpenBraceToken | SyntaxKind.CloseBraceToken | SyntaxKind.OpenParenToken | SyntaxKind.CloseParenToken | SyntaxKind.OpenBracketToken | SyntaxKind.CloseBracketToken | SyntaxKind.DotToken | SyntaxKind.DotDotDotToken | SyntaxKind.SemicolonToken | SyntaxKind.CommaToken | SyntaxKind.QuestionDotToken | SyntaxKind.LessThanToken | SyntaxKind.LessThanSlashToken | SyntaxKind.GreaterThanToken | SyntaxKind.LessThanEqualsToken | SyntaxKind.GreaterThanEqualsToken | SyntaxKind.EqualsEqualsToken | SyntaxKind.ExclamationEqualsToken | SyntaxKind.EqualsEqualsEqualsToken | SyntaxKind.ExclamationEqualsEqualsToken | SyntaxKind.EqualsGreaterThanToken | SyntaxKind.PlusToken | SyntaxKind.MinusToken | SyntaxKind.AsteriskToken | SyntaxKind.AsteriskAsteriskToken | SyntaxKind.SlashToken | SyntaxKind.PercentToken | SyntaxKind.PlusPlusToken | SyntaxKind.MinusMinusToken | SyntaxKind.LessThanLessThanToken | SyntaxKind.GreaterThanGreaterThanToken | SyntaxKind.GreaterThanGreaterThanGreaterThanToken | SyntaxKind.AmpersandToken | SyntaxKind.BarToken | SyntaxKind.CaretToken | SyntaxKind.ExclamationToken | SyntaxKind.TildeToken | SyntaxKind.AmpersandAmpersandToken | SyntaxKind.BarBarToken | SyntaxKind.QuestionQuestionToken | SyntaxKind.QuestionToken | SyntaxKind.ColonToken | SyntaxKind.AtToken | SyntaxKind.BacktickToken | SyntaxKind.HashToken | SyntaxKind.EqualsToken | SyntaxKind.PlusEqualsToken | SyntaxKind.MinusEqualsToken | SyntaxKind.AsteriskEqualsToken | SyntaxKind.AsteriskAsteriskEqualsToken | SyntaxKind.SlashEqualsToken | SyntaxKind.PercentEqualsToken | SyntaxKind.LessThanLessThanEqualsToken | SyntaxKind.GreaterThanGreaterThanEqualsToken | SyntaxKind.GreaterThanGreaterThanGreaterThanEqualsToken | SyntaxKind.AmpersandEqualsToken | SyntaxKind.BarEqualsToken | SyntaxKind.CaretEqualsToken;
     export type KeywordSyntaxKind = SyntaxKind.AbstractKeyword | SyntaxKind.AnyKeyword | SyntaxKind.AsKeyword | SyntaxKind.AssertsKeyword | SyntaxKind.AsyncKeyword | SyntaxKind.AwaitKeyword | SyntaxKind.BigIntKeyword | SyntaxKind.BooleanKeyword | SyntaxKind.BreakKeyword | SyntaxKind.CaseKeyword | SyntaxKind.CatchKeyword | SyntaxKind.ClassKeyword | SyntaxKind.ConstKeyword | SyntaxKind.ConstructorKeyword | SyntaxKind.ContinueKeyword | SyntaxKind.DebuggerKeyword | SyntaxKind.DeclareKeyword | SyntaxKind.DefaultKeyword | SyntaxKind.DeleteKeyword | SyntaxKind.DoKeyword | SyntaxKind.ElseKeyword | SyntaxKind.EnumKeyword | SyntaxKind.ExportKeyword | SyntaxKind.ExtendsKeyword | SyntaxKind.FalseKeyword | SyntaxKind.FinallyKeyword | SyntaxKind.ForKeyword | SyntaxKind.FromKeyword | SyntaxKind.FunctionKeyword | SyntaxKind.GetKeyword | SyntaxKind.GlobalKeyword | SyntaxKind.IfKeyword | SyntaxKind.ImplementsKeyword | SyntaxKind.ImportKeyword | SyntaxKind.InferKeyword | SyntaxKind.InKeyword | SyntaxKind.InstanceOfKeyword | SyntaxKind.InterfaceKeyword | SyntaxKind.IntrinsicKeyword | SyntaxKind.IsKeyword | SyntaxKind.KeyOfKeyword | SyntaxKind.LetKeyword | SyntaxKind.ModuleKeyword | SyntaxKind.NamespaceKeyword | SyntaxKind.NeverKeyword | SyntaxKind.NewKeyword | SyntaxKind.NullKeyword | SyntaxKind.NumberKeyword | SyntaxKind.ObjectKeyword | SyntaxKind.OfKeyword | SyntaxKind.PackageKeyword | SyntaxKind.PrivateKeyword | SyntaxKind.ProtectedKeyword | SyntaxKind.PublicKeyword | SyntaxKind.ReadonlyKeyword | SyntaxKind.OverrideKeyword | SyntaxKind.RequireKeyword | SyntaxKind.ReturnKeyword | SyntaxKind.SetKeyword | SyntaxKind.StaticKeyword | SyntaxKind.StringKeyword | SyntaxKind.SuperKeyword | SyntaxKind.SwitchKeyword | SyntaxKind.SymbolKeyword | SyntaxKind.ThisKeyword | SyntaxKind.ThrowKeyword | SyntaxKind.TrueKeyword | SyntaxKind.TryKeyword | SyntaxKind.TypeKeyword | SyntaxKind.TypeOfKeyword | SyntaxKind.UndefinedKeyword | SyntaxKind.UniqueKeyword | SyntaxKind.UnknownKeyword | SyntaxKind.VarKeyword | SyntaxKind.VoidKeyword | SyntaxKind.WhileKeyword | SyntaxKind.WithKeyword | SyntaxKind.YieldKeyword;
     export type ModifierSyntaxKind = SyntaxKind.AbstractKeyword | SyntaxKind.AsyncKeyword | SyntaxKind.ConstKeyword | SyntaxKind.DeclareKeyword | SyntaxKind.DefaultKeyword | SyntaxKind.ExportKeyword | SyntaxKind.PrivateKeyword | SyntaxKind.ProtectedKeyword | SyntaxKind.PublicKeyword | SyntaxKind.ReadonlyKeyword | SyntaxKind.OverrideKeyword | SyntaxKind.StaticKeyword;
     export type KeywordTypeSyntaxKind = SyntaxKind.AnyKeyword | SyntaxKind.BigIntKeyword | SyntaxKind.BooleanKeyword | SyntaxKind.IntrinsicKeyword | SyntaxKind.NeverKeyword | SyntaxKind.NumberKeyword | SyntaxKind.ObjectKeyword | SyntaxKind.StringKeyword | SyntaxKind.SymbolKeyword | SyntaxKind.UndefinedKeyword | SyntaxKind.UnknownKeyword | SyntaxKind.VoidKeyword;
     export type TokenSyntaxKind = SyntaxKind.Unknown | SyntaxKind.EndOfFileToken | TriviaSyntaxKind | LiteralSyntaxKind | PseudoLiteralSyntaxKind | PunctuationSyntaxKind | SyntaxKind.Identifier | KeywordSyntaxKind;
     export type JsxTokenSyntaxKind = SyntaxKind.LessThanSlashToken | SyntaxKind.EndOfFileToken | SyntaxKind.ConflictMarkerTrivia | SyntaxKind.JsxText | SyntaxKind.JsxTextAllWhiteSpaces | SyntaxKind.OpenBraceToken | SyntaxKind.LessThanToken;
-    export type JSDocSyntaxKind = SyntaxKind.EndOfFileToken | SyntaxKind.WhitespaceTrivia | SyntaxKind.AtToken | SyntaxKind.NewLineTrivia | SyntaxKind.AsteriskToken | SyntaxKind.OpenBraceToken | SyntaxKind.CloseBraceToken | SyntaxKind.LessThanToken | SyntaxKind.GreaterThanToken | SyntaxKind.OpenBracketToken | SyntaxKind.CloseBracketToken | SyntaxKind.EqualsToken | SyntaxKind.CommaToken | SyntaxKind.DotToken | SyntaxKind.Identifier | SyntaxKind.BacktickToken | SyntaxKind.Unknown | KeywordSyntaxKind;
+    export type JSDocSyntaxKind = SyntaxKind.EndOfFileToken | SyntaxKind.WhitespaceTrivia | SyntaxKind.AtToken | SyntaxKind.NewLineTrivia | SyntaxKind.AsteriskToken | SyntaxKind.OpenBraceToken | SyntaxKind.CloseBraceToken | SyntaxKind.LessThanToken | SyntaxKind.GreaterThanToken | SyntaxKind.OpenBracketToken | SyntaxKind.CloseBracketToken | SyntaxKind.EqualsToken | SyntaxKind.CommaToken | SyntaxKind.DotToken | SyntaxKind.Identifier | SyntaxKind.BacktickToken | SyntaxKind.HashToken | SyntaxKind.Unknown | KeywordSyntaxKind;
     export enum NodeFlags {
         None = 0,
         Let = 1,
@@ -563,13 +569,13 @@
     }
     export interface JSDocContainer {
     }
-    export type HasJSDoc = ParameterDeclaration | CallSignatureDeclaration | ConstructSignatureDeclaration | MethodSignature | PropertySignature | ArrowFunction | ParenthesizedExpression | SpreadAssignment | ShorthandPropertyAssignment | PropertyAssignment | FunctionExpression | EmptyStatement | DebuggerStatement | Block | VariableStatement | ExpressionStatement | IfStatement | DoStatement | WhileStatement | ForStatement | ForInStatement | ForOfStatement | BreakStatement | ContinueStatement | ReturnStatement | WithStatement | SwitchStatement | LabeledStatement | ThrowStatement | TryStatement | FunctionDeclaration | ConstructorDeclaration | MethodDeclaration | VariableDeclaration | PropertyDeclaration | AccessorDeclaration | ClassLikeDeclaration | InterfaceDeclaration | TypeAliasDeclaration | EnumMember | EnumDeclaration | ModuleDeclaration | ImportEqualsDeclaration | ImportDeclaration | NamespaceExportDeclaration | ExportAssignment | IndexSignatureDeclaration | FunctionTypeNode | ConstructorTypeNode | JSDocFunctionType | ExportDeclaration | NamedTupleMember | EndOfFileToken;
+    export type HasJSDoc = ParameterDeclaration | CallSignatureDeclaration | ClassStaticBlockDeclaration | ConstructSignatureDeclaration | MethodSignature | PropertySignature | ArrowFunction | ParenthesizedExpression | SpreadAssignment | ShorthandPropertyAssignment | PropertyAssignment | FunctionExpression | EmptyStatement | DebuggerStatement | Block | VariableStatement | ExpressionStatement | IfStatement | DoStatement | WhileStatement | ForStatement | ForInStatement | ForOfStatement | BreakStatement | ContinueStatement | ReturnStatement | WithStatement | SwitchStatement | LabeledStatement | ThrowStatement | TryStatement | FunctionDeclaration | ConstructorDeclaration | MethodDeclaration | VariableDeclaration | PropertyDeclaration | AccessorDeclaration | ClassLikeDeclaration | InterfaceDeclaration | TypeAliasDeclaration | EnumMember | EnumDeclaration | ModuleDeclaration | ImportEqualsDeclaration | ImportDeclaration | NamespaceExportDeclaration | ExportAssignment | IndexSignatureDeclaration | FunctionTypeNode | ConstructorTypeNode | JSDocFunctionType | ExportDeclaration | NamedTupleMember | EndOfFileToken;
     export type HasType = SignatureDeclaration | VariableDeclaration | ParameterDeclaration | PropertySignature | PropertyDeclaration | TypePredicateNode | ParenthesizedTypeNode | TypeOperatorNode | MappedTypeNode | AssertionExpression | TypeAliasDeclaration | JSDocTypeExpression | JSDocNonNullableType | JSDocNullableType | JSDocOptionalType | JSDocVariadicType;
     export type HasTypeArguments = CallExpression | NewExpression | TaggedTemplateExpression | JsxOpeningElement | JsxSelfClosingElement;
     export type HasInitializer = HasExpressionInitializer | ForStatement | ForInStatement | ForOfStatement | JsxAttribute;
     export type HasExpressionInitializer = VariableDeclaration | ParameterDeclaration | BindingElement | PropertySignature | PropertyDeclaration | PropertyAssignment | EnumMember;
     export interface NodeArray<T extends Node> extends ReadonlyArray<T>, ReadonlyTextRange {
-        hasTrailingComma?: boolean;
+        readonly hasTrailingComma: boolean;
     }
     export interface Token<TKind extends SyntaxKind> extends Node {
         readonly kind: TKind;
@@ -845,6 +851,11 @@
         readonly parent: ObjectTypeDeclaration;
         readonly type: TypeNode;
     }
+    export interface ClassStaticBlockDeclaration extends ClassElement, JSDocContainer {
+        readonly kind: SyntaxKind.ClassStaticBlockDeclaration;
+        readonly parent: ClassDeclaration | ClassExpression;
+        readonly body: Block;
+    }
     export interface TypeNode extends Node {
         _typeNodeBrand: any;
     }
@@ -1710,7 +1721,13 @@
     }
     export interface JSDocNameReference extends Node {
         readonly kind: SyntaxKind.JSDocNameReference;
-        readonly name: EntityName;
+        readonly name: EntityName | JSDocMemberName;
+    }
+    /** Class#method reference in JSDoc */
+    export interface JSDocMemberName extends Node {
+        readonly kind: SyntaxKind.JSDocMemberName;
+        readonly left: EntityName | JSDocMemberName;
+        readonly right: Identifier;
     }
     export interface JSDocType extends TypeNode {
         _jsDocTypeBrand: any;
@@ -1749,18 +1766,29 @@
         readonly kind: SyntaxKind.JSDocComment;
         readonly parent: HasJSDoc;
         readonly tags?: NodeArray<JSDocTag>;
-        readonly comment?: string | NodeArray<JSDocText | JSDocLink>;
+        readonly comment?: string | NodeArray<JSDocComment>;
     }
     export interface JSDocTag extends Node {
         readonly parent: JSDoc | JSDocTypeLiteral;
         readonly tagName: Identifier;
-        readonly comment?: string | NodeArray<JSDocText | JSDocLink>;
+        readonly comment?: string | NodeArray<JSDocComment>;
     }
     export interface JSDocLink extends Node {
         readonly kind: SyntaxKind.JSDocLink;
-        readonly name?: EntityName;
+        readonly name?: EntityName | JSDocMemberName;
         text: string;
     }
+    export interface JSDocLinkCode extends Node {
+        readonly kind: SyntaxKind.JSDocLinkCode;
+        readonly name?: EntityName | JSDocMemberName;
+        text: string;
+    }
+    export interface JSDocLinkPlain extends Node {
+        readonly kind: SyntaxKind.JSDocLinkPlain;
+        readonly name?: EntityName | JSDocMemberName;
+        text: string;
+    }
+    export type JSDocComment = JSDocText | JSDocLink | JSDocLinkCode | JSDocLinkPlain;
     export interface JSDocText extends Node {
         readonly kind: SyntaxKind.JSDocText;
         text: string;
@@ -2170,6 +2198,7 @@
         getPropertyOfType(type: Type, propertyName: string): Symbol | undefined;
         getPrivateIdentifierPropertyOfType(leftType: Type, name: string, location: Node): Symbol | undefined;
         getIndexInfoOfType(type: Type, kind: IndexKind): IndexInfo | undefined;
+        getIndexInfosOfType(type: Type): readonly IndexInfo[];
         getSignaturesOfType(type: Type, kind: SignatureKind): readonly Signature[];
         getIndexTypeOfType(type: Type, kind: IndexKind): Type | undefined;
         getBaseTypes(type: InterfaceType): BaseType[];
@@ -2186,7 +2215,7 @@
             typeArguments?: NodeArray<TypeNode>;
         } | undefined;
         /** Note that the resulting nodes cannot be checked. */
-        indexInfoToIndexSignatureDeclaration(indexInfo: IndexInfo, kind: IndexKind, enclosingDeclaration: Node | undefined, flags: NodeBuilderFlags | undefined): IndexSignatureDeclaration | undefined;
+        indexInfoToIndexSignatureDeclaration(indexInfo: IndexInfo, enclosingDeclaration: Node | undefined, flags: NodeBuilderFlags | undefined): IndexSignatureDeclaration | undefined;
         /** Note that the resulting nodes cannot be checked. */
         symbolToEntityName(symbol: Symbol, meaning: SymbolFlags, enclosingDeclaration: Node | undefined, flags: NodeBuilderFlags | undefined): EntityName | undefined;
         /** Note that the resulting nodes cannot be checked. */
@@ -2243,6 +2272,8 @@
         isValidPropertyAccess(node: PropertyAccessExpression | QualifiedName | ImportTypeNode, propertyName: string): boolean;
         /** Follow all aliases to get the original symbol. */
         getAliasedSymbol(symbol: Symbol): Symbol;
+        /** Follow a *single* alias to get the immediately aliased symbol. */
+        getImmediateAliasedSymbol(symbol: Symbol): Symbol | undefined;
         getExportsOfModule(moduleSymbol: Symbol): Symbol[];
         getJsxIntrinsicTagNamesAt(location: Node): Symbol[];
         isOptionalParameter(node: ParameterDeclaration): boolean;
@@ -2584,8 +2615,7 @@
         declaredProperties: Symbol[];
         declaredCallSignatures: Signature[];
         declaredConstructSignatures: Signature[];
-        declaredStringIndexInfo?: IndexInfo;
-        declaredNumberIndexInfo?: IndexInfo;
+        declaredIndexInfos: IndexInfo[];
     }
     /**
      * Type references (ObjectFlags.Reference). When a class or interface has type parameters or
@@ -2699,6 +2729,7 @@
         Number = 1
     }
     export interface IndexInfo {
+        keyType: Type;
         type: Type;
         isReadonly: boolean;
         declaration?: IndexSignatureDeclaration;
@@ -2831,6 +2862,7 @@
         downlevelIteration?: boolean;
         emitBOM?: boolean;
         emitDecoratorMetadata?: boolean;
+        exactOptionalPropertyTypes?: boolean;
         experimentalDecorators?: boolean;
         forceConsistentCasingInFileNames?: boolean;
         importHelpers?: boolean;
@@ -2896,6 +2928,7 @@
         suppressImplicitAnyIndexErrors?: boolean;
         target?: ScriptTarget;
         traceResolution?: boolean;
+        useUnknownInCatchVariables?: boolean;
         resolveJsonModule?: boolean;
         types?: string[];
         /** Paths used to compute primary types search locations */
@@ -3267,6 +3300,8 @@
         updateIndexSignature(node: IndexSignatureDeclaration, decorators: readonly Decorator[] | undefined, modifiers: readonly Modifier[] | undefined, parameters: readonly ParameterDeclaration[], type: TypeNode): IndexSignatureDeclaration;
         createTemplateLiteralTypeSpan(type: TypeNode, literal: TemplateMiddle | TemplateTail): TemplateLiteralTypeSpan;
         updateTemplateLiteralTypeSpan(node: TemplateLiteralTypeSpan, type: TypeNode, literal: TemplateMiddle | TemplateTail): TemplateLiteralTypeSpan;
+        createClassStaticBlockDeclaration(decorators: readonly Decorator[] | undefined, modifiers: readonly Modifier[] | undefined, body: Block): ClassStaticBlockDeclaration;
+        updateClassStaticBlockDeclaration(node: ClassStaticBlockDeclaration, decorators: readonly Decorator[] | undefined, modifiers: readonly Modifier[] | undefined, body: Block): ClassStaticBlockDeclaration;
         createKeywordTypeNode<TKind extends KeywordTypeSyntaxKind>(kind: TKind): KeywordTypeNode<TKind>;
         createTypePredicateNode(assertsModifier: AssertsKeyword | undefined, parameterName: Identifier | ThisTypeNode | string, type: TypeNode | undefined): TypePredicateNode;
         updateTypePredicateNode(node: TypePredicateNode, assertsModifier: AssertsKeyword | undefined, parameterName: Identifier | ThisTypeNode, type: TypeNode | undefined): TypePredicateNode;
@@ -3496,60 +3531,66 @@
         updateJSDocNamepathType(node: JSDocNamepathType, type: TypeNode): JSDocNamepathType;
         createJSDocTypeExpression(type: TypeNode): JSDocTypeExpression;
         updateJSDocTypeExpression(node: JSDocTypeExpression, type: TypeNode): JSDocTypeExpression;
-        createJSDocNameReference(name: EntityName): JSDocNameReference;
-        updateJSDocNameReference(node: JSDocNameReference, name: EntityName): JSDocNameReference;
-        createJSDocLink(name: EntityName | undefined, text: string): JSDocLink;
-        updateJSDocLink(node: JSDocLink, name: EntityName | undefined, text: string): JSDocLink;
+        createJSDocNameReference(name: EntityName | JSDocMemberName): JSDocNameReference;
+        updateJSDocNameReference(node: JSDocNameReference, name: EntityName | JSDocMemberName): JSDocNameReference;
+        createJSDocMemberName(left: EntityName | JSDocMemberName, right: Identifier): JSDocMemberName;
+        updateJSDocMemberName(node: JSDocMemberName, left: EntityName | JSDocMemberName, right: Identifier): JSDocMemberName;
+        createJSDocLink(name: EntityName | JSDocMemberName | undefined, text: string): JSDocLink;
+        updateJSDocLink(node: JSDocLink, name: EntityName | JSDocMemberName | undefined, text: string): JSDocLink;
+        createJSDocLinkCode(name: EntityName | JSDocMemberName | undefined, text: string): JSDocLinkCode;
+        updateJSDocLinkCode(node: JSDocLinkCode, name: EntityName | JSDocMemberName | undefined, text: string): JSDocLinkCode;
+        createJSDocLinkPlain(name: EntityName | JSDocMemberName | undefined, text: string): JSDocLinkPlain;
+        updateJSDocLinkPlain(node: JSDocLinkPlain, name: EntityName | JSDocMemberName | undefined, text: string): JSDocLinkPlain;
         createJSDocTypeLiteral(jsDocPropertyTags?: readonly JSDocPropertyLikeTag[], isArrayType?: boolean): JSDocTypeLiteral;
         updateJSDocTypeLiteral(node: JSDocTypeLiteral, jsDocPropertyTags: readonly JSDocPropertyLikeTag[] | undefined, isArrayType: boolean | undefined): JSDocTypeLiteral;
         createJSDocSignature(typeParameters: readonly JSDocTemplateTag[] | undefined, parameters: readonly JSDocParameterTag[], type?: JSDocReturnTag): JSDocSignature;
         updateJSDocSignature(node: JSDocSignature, typeParameters: readonly JSDocTemplateTag[] | undefined, parameters: readonly JSDocParameterTag[], type: JSDocReturnTag | undefined): JSDocSignature;
-        createJSDocTemplateTag(tagName: Identifier | undefined, constraint: JSDocTypeExpression | undefined, typeParameters: readonly TypeParameterDeclaration[], comment?: string | NodeArray<JSDocText | JSDocLink>): JSDocTemplateTag;
-        updateJSDocTemplateTag(node: JSDocTemplateTag, tagName: Identifier | undefined, constraint: JSDocTypeExpression | undefined, typeParameters: readonly TypeParameterDeclaration[], comment: string | NodeArray<JSDocText | JSDocLink> | undefined): JSDocTemplateTag;
-        createJSDocTypedefTag(tagName: Identifier | undefined, typeExpression?: JSDocTypeExpression | JSDocTypeLiteral, fullName?: Identifier | JSDocNamespaceDeclaration, comment?: string | NodeArray<JSDocText | JSDocLink>): JSDocTypedefTag;
-        updateJSDocTypedefTag(node: JSDocTypedefTag, tagName: Identifier | undefined, typeExpression: JSDocTypeExpression | JSDocTypeLiteral | undefined, fullName: Identifier | JSDocNamespaceDeclaration | undefined, comment: string | NodeArray<JSDocText | JSDocLink> | undefined): JSDocTypedefTag;
-        createJSDocParameterTag(tagName: Identifier | undefined, name: EntityName, isBracketed: boolean, typeExpression?: JSDocTypeExpression, isNameFirst?: boolean, comment?: string | NodeArray<JSDocText | JSDocLink>): JSDocParameterTag;
-        updateJSDocParameterTag(node: JSDocParameterTag, tagName: Identifier | undefined, name: EntityName, isBracketed: boolean, typeExpression: JSDocTypeExpression | undefined, isNameFirst: boolean, comment: string | NodeArray<JSDocText | JSDocLink> | undefined): JSDocParameterTag;
-        createJSDocPropertyTag(tagName: Identifier | undefined, name: EntityName, isBracketed: boolean, typeExpression?: JSDocTypeExpression, isNameFirst?: boolean, comment?: string | NodeArray<JSDocText | JSDocLink>): JSDocPropertyTag;
-        updateJSDocPropertyTag(node: JSDocPropertyTag, tagName: Identifier | undefined, name: EntityName, isBracketed: boolean, typeExpression: JSDocTypeExpression | undefined, isNameFirst: boolean, comment: string | NodeArray<JSDocText | JSDocLink> | undefined): JSDocPropertyTag;
-        createJSDocTypeTag(tagName: Identifier | undefined, typeExpression: JSDocTypeExpression, comment?: string | NodeArray<JSDocText | JSDocLink>): JSDocTypeTag;
-        updateJSDocTypeTag(node: JSDocTypeTag, tagName: Identifier | undefined, typeExpression: JSDocTypeExpression, comment: string | NodeArray<JSDocText | JSDocLink> | undefined): JSDocTypeTag;
-        createJSDocSeeTag(tagName: Identifier | undefined, nameExpression: JSDocNameReference | undefined, comment?: string | NodeArray<JSDocText | JSDocLink>): JSDocSeeTag;
-        updateJSDocSeeTag(node: JSDocSeeTag, tagName: Identifier | undefined, nameExpression: JSDocNameReference | undefined, comment?: string | NodeArray<JSDocText | JSDocLink>): JSDocSeeTag;
-        createJSDocReturnTag(tagName: Identifier | undefined, typeExpression?: JSDocTypeExpression, comment?: string | NodeArray<JSDocText | JSDocLink>): JSDocReturnTag;
-        updateJSDocReturnTag(node: JSDocReturnTag, tagName: Identifier | undefined, typeExpression: JSDocTypeExpression | undefined, comment: string | NodeArray<JSDocText | JSDocLink> | undefined): JSDocReturnTag;
-        createJSDocThisTag(tagName: Identifier | undefined, typeExpression: JSDocTypeExpression, comment?: string | NodeArray<JSDocText | JSDocLink>): JSDocThisTag;
-        updateJSDocThisTag(node: JSDocThisTag, tagName: Identifier | undefined, typeExpression: JSDocTypeExpression | undefined, comment: string | NodeArray<JSDocText | JSDocLink> | undefined): JSDocThisTag;
-        createJSDocEnumTag(tagName: Identifier | undefined, typeExpression: JSDocTypeExpression, comment?: string | NodeArray<JSDocText | JSDocLink>): JSDocEnumTag;
-        updateJSDocEnumTag(node: JSDocEnumTag, tagName: Identifier | undefined, typeExpression: JSDocTypeExpression, comment: string | NodeArray<JSDocText | JSDocLink> | undefined): JSDocEnumTag;
-        createJSDocCallbackTag(tagName: Identifier | undefined, typeExpression: JSDocSignature, fullName?: Identifier | JSDocNamespaceDeclaration, comment?: string | NodeArray<JSDocText | JSDocLink>): JSDocCallbackTag;
-        updateJSDocCallbackTag(node: JSDocCallbackTag, tagName: Identifier | undefined, typeExpression: JSDocSignature, fullName: Identifier | JSDocNamespaceDeclaration | undefined, comment: string | NodeArray<JSDocText | JSDocLink> | undefined): JSDocCallbackTag;
-        createJSDocAugmentsTag(tagName: Identifier | undefined, className: JSDocAugmentsTag["class"], comment?: string | NodeArray<JSDocText | JSDocLink>): JSDocAugmentsTag;
-        updateJSDocAugmentsTag(node: JSDocAugmentsTag, tagName: Identifier | undefined, className: JSDocAugmentsTag["class"], comment: string | NodeArray<JSDocText | JSDocLink> | undefined): JSDocAugmentsTag;
-        createJSDocImplementsTag(tagName: Identifier | undefined, className: JSDocImplementsTag["class"], comment?: string | NodeArray<JSDocText | JSDocLink>): JSDocImplementsTag;
-        updateJSDocImplementsTag(node: JSDocImplementsTag, tagName: Identifier | undefined, className: JSDocImplementsTag["class"], comment: string | NodeArray<JSDocText | JSDocLink> | undefined): JSDocImplementsTag;
-        createJSDocAuthorTag(tagName: Identifier | undefined, comment?: string | NodeArray<JSDocText | JSDocLink>): JSDocAuthorTag;
-        updateJSDocAuthorTag(node: JSDocAuthorTag, tagName: Identifier | undefined, comment: string | NodeArray<JSDocText | JSDocLink> | undefined): JSDocAuthorTag;
-        createJSDocClassTag(tagName: Identifier | undefined, comment?: string | NodeArray<JSDocText | JSDocLink>): JSDocClassTag;
-        updateJSDocClassTag(node: JSDocClassTag, tagName: Identifier | undefined, comment: string | NodeArray<JSDocText | JSDocLink> | undefined): JSDocClassTag;
-        createJSDocPublicTag(tagName: Identifier | undefined, comment?: string | NodeArray<JSDocText | JSDocLink>): JSDocPublicTag;
-        updateJSDocPublicTag(node: JSDocPublicTag, tagName: Identifier | undefined, comment: string | NodeArray<JSDocText | JSDocLink> | undefined): JSDocPublicTag;
-        createJSDocPrivateTag(tagName: Identifier | undefined, comment?: string | NodeArray<JSDocText | JSDocLink>): JSDocPrivateTag;
-        updateJSDocPrivateTag(node: JSDocPrivateTag, tagName: Identifier | undefined, comment: string | NodeArray<JSDocText | JSDocLink> | undefined): JSDocPrivateTag;
-        createJSDocProtectedTag(tagName: Identifier | undefined, comment?: string | NodeArray<JSDocText | JSDocLink>): JSDocProtectedTag;
-        updateJSDocProtectedTag(node: JSDocProtectedTag, tagName: Identifier | undefined, comment: string | NodeArray<JSDocText | JSDocLink> | undefined): JSDocProtectedTag;
-        createJSDocReadonlyTag(tagName: Identifier | undefined, comment?: string | NodeArray<JSDocText | JSDocLink>): JSDocReadonlyTag;
-        updateJSDocReadonlyTag(node: JSDocReadonlyTag, tagName: Identifier | undefined, comment: string | NodeArray<JSDocText | JSDocLink> | undefined): JSDocReadonlyTag;
-        createJSDocUnknownTag(tagName: Identifier, comment?: string | NodeArray<JSDocText | JSDocLink>): JSDocUnknownTag;
-        updateJSDocUnknownTag(node: JSDocUnknownTag, tagName: Identifier, comment: string | NodeArray<JSDocText | JSDocLink> | undefined): JSDocUnknownTag;
-        createJSDocDeprecatedTag(tagName: Identifier, comment?: string | NodeArray<JSDocText | JSDocLink>): JSDocDeprecatedTag;
-        updateJSDocDeprecatedTag(node: JSDocDeprecatedTag, tagName: Identifier, comment?: string | NodeArray<JSDocText | JSDocLink>): JSDocDeprecatedTag;
-        createJSDocOverrideTag(tagName: Identifier, comment?: string | NodeArray<JSDocText | JSDocLink>): JSDocOverrideTag;
-        updateJSDocOverrideTag(node: JSDocOverrideTag, tagName: Identifier, comment?: string | NodeArray<JSDocText | JSDocLink>): JSDocOverrideTag;
+        createJSDocTemplateTag(tagName: Identifier | undefined, constraint: JSDocTypeExpression | undefined, typeParameters: readonly TypeParameterDeclaration[], comment?: string | NodeArray<JSDocComment>): JSDocTemplateTag;
+        updateJSDocTemplateTag(node: JSDocTemplateTag, tagName: Identifier | undefined, constraint: JSDocTypeExpression | undefined, typeParameters: readonly TypeParameterDeclaration[], comment: string | NodeArray<JSDocComment> | undefined): JSDocTemplateTag;
+        createJSDocTypedefTag(tagName: Identifier | undefined, typeExpression?: JSDocTypeExpression | JSDocTypeLiteral, fullName?: Identifier | JSDocNamespaceDeclaration, comment?: string | NodeArray<JSDocComment>): JSDocTypedefTag;
+        updateJSDocTypedefTag(node: JSDocTypedefTag, tagName: Identifier | undefined, typeExpression: JSDocTypeExpression | JSDocTypeLiteral | undefined, fullName: Identifier | JSDocNamespaceDeclaration | undefined, comment: string | NodeArray<JSDocComment> | undefined): JSDocTypedefTag;
+        createJSDocParameterTag(tagName: Identifier | undefined, name: EntityName, isBracketed: boolean, typeExpression?: JSDocTypeExpression, isNameFirst?: boolean, comment?: string | NodeArray<JSDocComment>): JSDocParameterTag;
+        updateJSDocParameterTag(node: JSDocParameterTag, tagName: Identifier | undefined, name: EntityName, isBracketed: boolean, typeExpression: JSDocTypeExpression | undefined, isNameFirst: boolean, comment: string | NodeArray<JSDocComment> | undefined): JSDocParameterTag;
+        createJSDocPropertyTag(tagName: Identifier | undefined, name: EntityName, isBracketed: boolean, typeExpression?: JSDocTypeExpression, isNameFirst?: boolean, comment?: string | NodeArray<JSDocComment>): JSDocPropertyTag;
+        updateJSDocPropertyTag(node: JSDocPropertyTag, tagName: Identifier | undefined, name: EntityName, isBracketed: boolean, typeExpression: JSDocTypeExpression | undefined, isNameFirst: boolean, comment: string | NodeArray<JSDocComment> | undefined): JSDocPropertyTag;
+        createJSDocTypeTag(tagName: Identifier | undefined, typeExpression: JSDocTypeExpression, comment?: string | NodeArray<JSDocComment>): JSDocTypeTag;
+        updateJSDocTypeTag(node: JSDocTypeTag, tagName: Identifier | undefined, typeExpression: JSDocTypeExpression, comment: string | NodeArray<JSDocComment> | undefined): JSDocTypeTag;
+        createJSDocSeeTag(tagName: Identifier | undefined, nameExpression: JSDocNameReference | undefined, comment?: string | NodeArray<JSDocComment>): JSDocSeeTag;
+        updateJSDocSeeTag(node: JSDocSeeTag, tagName: Identifier | undefined, nameExpression: JSDocNameReference | undefined, comment?: string | NodeArray<JSDocComment>): JSDocSeeTag;
+        createJSDocReturnTag(tagName: Identifier | undefined, typeExpression?: JSDocTypeExpression, comment?: string | NodeArray<JSDocComment>): JSDocReturnTag;
+        updateJSDocReturnTag(node: JSDocReturnTag, tagName: Identifier | undefined, typeExpression: JSDocTypeExpression | undefined, comment: string | NodeArray<JSDocComment> | undefined): JSDocReturnTag;
+        createJSDocThisTag(tagName: Identifier | undefined, typeExpression: JSDocTypeExpression, comment?: string | NodeArray<JSDocComment>): JSDocThisTag;
+        updateJSDocThisTag(node: JSDocThisTag, tagName: Identifier | undefined, typeExpression: JSDocTypeExpression | undefined, comment: string | NodeArray<JSDocComment> | undefined): JSDocThisTag;
+        createJSDocEnumTag(tagName: Identifier | undefined, typeExpression: JSDocTypeExpression, comment?: string | NodeArray<JSDocComment>): JSDocEnumTag;
+        updateJSDocEnumTag(node: JSDocEnumTag, tagName: Identifier | undefined, typeExpression: JSDocTypeExpression, comment: string | NodeArray<JSDocComment> | undefined): JSDocEnumTag;
+        createJSDocCallbackTag(tagName: Identifier | undefined, typeExpression: JSDocSignature, fullName?: Identifier | JSDocNamespaceDeclaration, comment?: string | NodeArray<JSDocComment>): JSDocCallbackTag;
+        updateJSDocCallbackTag(node: JSDocCallbackTag, tagName: Identifier | undefined, typeExpression: JSDocSignature, fullName: Identifier | JSDocNamespaceDeclaration | undefined, comment: string | NodeArray<JSDocComment> | undefined): JSDocCallbackTag;
+        createJSDocAugmentsTag(tagName: Identifier | undefined, className: JSDocAugmentsTag["class"], comment?: string | NodeArray<JSDocComment>): JSDocAugmentsTag;
+        updateJSDocAugmentsTag(node: JSDocAugmentsTag, tagName: Identifier | undefined, className: JSDocAugmentsTag["class"], comment: string | NodeArray<JSDocComment> | undefined): JSDocAugmentsTag;
+        createJSDocImplementsTag(tagName: Identifier | undefined, className: JSDocImplementsTag["class"], comment?: string | NodeArray<JSDocComment>): JSDocImplementsTag;
+        updateJSDocImplementsTag(node: JSDocImplementsTag, tagName: Identifier | undefined, className: JSDocImplementsTag["class"], comment: string | NodeArray<JSDocComment> | undefined): JSDocImplementsTag;
+        createJSDocAuthorTag(tagName: Identifier | undefined, comment?: string | NodeArray<JSDocComment>): JSDocAuthorTag;
+        updateJSDocAuthorTag(node: JSDocAuthorTag, tagName: Identifier | undefined, comment: string | NodeArray<JSDocComment> | undefined): JSDocAuthorTag;
+        createJSDocClassTag(tagName: Identifier | undefined, comment?: string | NodeArray<JSDocComment>): JSDocClassTag;
+        updateJSDocClassTag(node: JSDocClassTag, tagName: Identifier | undefined, comment: string | NodeArray<JSDocComment> | undefined): JSDocClassTag;
+        createJSDocPublicTag(tagName: Identifier | undefined, comment?: string | NodeArray<JSDocComment>): JSDocPublicTag;
+        updateJSDocPublicTag(node: JSDocPublicTag, tagName: Identifier | undefined, comment: string | NodeArray<JSDocComment> | undefined): JSDocPublicTag;
+        createJSDocPrivateTag(tagName: Identifier | undefined, comment?: string | NodeArray<JSDocComment>): JSDocPrivateTag;
+        updateJSDocPrivateTag(node: JSDocPrivateTag, tagName: Identifier | undefined, comment: string | NodeArray<JSDocComment> | undefined): JSDocPrivateTag;
+        createJSDocProtectedTag(tagName: Identifier | undefined, comment?: string | NodeArray<JSDocComment>): JSDocProtectedTag;
+        updateJSDocProtectedTag(node: JSDocProtectedTag, tagName: Identifier | undefined, comment: string | NodeArray<JSDocComment> | undefined): JSDocProtectedTag;
+        createJSDocReadonlyTag(tagName: Identifier | undefined, comment?: string | NodeArray<JSDocComment>): JSDocReadonlyTag;
+        updateJSDocReadonlyTag(node: JSDocReadonlyTag, tagName: Identifier | undefined, comment: string | NodeArray<JSDocComment> | undefined): JSDocReadonlyTag;
+        createJSDocUnknownTag(tagName: Identifier, comment?: string | NodeArray<JSDocComment>): JSDocUnknownTag;
+        updateJSDocUnknownTag(node: JSDocUnknownTag, tagName: Identifier, comment: string | NodeArray<JSDocComment> | undefined): JSDocUnknownTag;
+        createJSDocDeprecatedTag(tagName: Identifier, comment?: string | NodeArray<JSDocComment>): JSDocDeprecatedTag;
+        updateJSDocDeprecatedTag(node: JSDocDeprecatedTag, tagName: Identifier, comment?: string | NodeArray<JSDocComment>): JSDocDeprecatedTag;
+        createJSDocOverrideTag(tagName: Identifier, comment?: string | NodeArray<JSDocComment>): JSDocOverrideTag;
+        updateJSDocOverrideTag(node: JSDocOverrideTag, tagName: Identifier, comment?: string | NodeArray<JSDocComment>): JSDocOverrideTag;
         createJSDocText(text: string): JSDocText;
         updateJSDocText(node: JSDocText, text: string): JSDocText;
-        createJSDocComment(comment?: string | NodeArray<JSDocText | JSDocLink> | undefined, tags?: readonly JSDocTag[] | undefined): JSDoc;
-        updateJSDocComment(node: JSDoc, comment: string | NodeArray<JSDocText | JSDocLink> | undefined, tags: readonly JSDocTag[] | undefined): JSDoc;
+        createJSDocComment(comment?: string | NodeArray<JSDocComment> | undefined, tags?: readonly JSDocTag[] | undefined): JSDoc;
+        updateJSDocComment(node: JSDoc, comment: string | NodeArray<JSDocComment> | undefined, tags: readonly JSDocTag[] | undefined): JSDoc;
         createJsxElement(openingElement: JsxOpeningElement, children: readonly JsxChild[], closingElement: JsxClosingElement): JsxElement;
         updateJsxElement(node: JsxElement, openingElement: JsxOpeningElement, children: readonly JsxChild[], closingElement: JsxClosingElement): JsxElement;
         createJsxSelfClosingElement(tagName: JsxTagNameExpression, typeArguments: readonly TypeNode[] | undefined, attributes: JsxAttributes): JsxSelfClosingElement;
@@ -3920,6 +3961,7 @@
         readonly includeCompletionsWithSnippetText?: boolean;
         readonly includeAutomaticOptionalChainCompletions?: boolean;
         readonly includeCompletionsWithInsertText?: boolean;
+        readonly allowIncompleteCompletions?: boolean;
         readonly importModuleSpecifierPreference?: "shortest" | "project-relative" | "relative" | "non-relative";
         /** Determines whether we import `foo/index.ts` as "foo", "foo/index", or "foo/index.js" */
         readonly importModuleSpecifierEnding?: "auto" | "minimal" | "index" | "js";
@@ -3951,6 +3993,7 @@
         useCaseSensitiveFileNames: boolean;
         write(s: string): void;
         writeOutputIsTTY?(): boolean;
+        getWidthOfTerminal?(): number;
         readFile(path: string, encoding?: string): string | undefined;
         getFileSize?(path: string): number;
         writeFile(path: string, data: string, writeByteOrderMark?: boolean): void;
@@ -4018,6 +4061,7 @@
         reScanJsxAttributeValue(): SyntaxKind;
         reScanJsxToken(allowMultilineJsxText?: boolean): JsxTokenSyntaxKind;
         reScanLessThanToken(): SyntaxKind;
+        reScanHashToken(): SyntaxKind;
         reScanQuestionToken(): SyntaxKind;
         reScanInvalidIdentifier(): SyntaxKind;
         scanJsxToken(): JsxTokenSyntaxKind;
@@ -4236,7 +4280,7 @@
     /** Gets all JSDoc tags of a specified kind */
     function getAllJSDocTagsOfKind(node: Node, kind: SyntaxKind): readonly JSDocTag[];
     /** Gets the text of a jsdoc comment, flattening links to their text. */
-    function getTextOfJSDocComment(comment?: string | NodeArray<JSDocText | JSDocLink>): string | undefined;
+    function getTextOfJSDocComment(comment?: string | NodeArray<JSDocComment>): string | undefined;
     /**
      * Gets the effective type parameters. If the node was parsed in a
      * JavaScript file, gets the type parameters from the `@template` tag from JSDoc.
@@ -4311,6 +4355,7 @@
     function hasOnlyExpressionInitializer(node: Node): node is HasExpressionInitializer;
     function isObjectLiteralElement(node: Node): node is ObjectLiteralElement;
     function isStringLiteralLike(node: Node): node is StringLiteralLike;
+    function isJSDocLinkLike(node: Node): node is JSDocLink | JSDocLinkCode | JSDocLinkPlain;
 }
 declare namespace ts {
     const factory: NodeFactory;
@@ -4421,6 +4466,7 @@
     function isPropertyDeclaration(node: Node): node is PropertyDeclaration;
     function isMethodSignature(node: Node): node is MethodSignature;
     function isMethodDeclaration(node: Node): node is MethodDeclaration;
+    function isClassStaticBlockDeclaration(node: Node): node is ClassStaticBlockDeclaration;
     function isConstructorDeclaration(node: Node): node is ConstructorDeclaration;
     function isGetAccessorDeclaration(node: Node): node is GetAccessorDeclaration;
     function isSetAccessorDeclaration(node: Node): node is SetAccessorDeclaration;
@@ -4556,7 +4602,10 @@
     function isUnparsedSource(node: Node): node is UnparsedSource;
     function isJSDocTypeExpression(node: Node): node is JSDocTypeExpression;
     function isJSDocNameReference(node: Node): node is JSDocNameReference;
+    function isJSDocMemberName(node: Node): node is JSDocMemberName;
     function isJSDocLink(node: Node): node is JSDocLink;
+    function isJSDocLinkCode(node: Node): node is JSDocLinkCode;
+    function isJSDocLinkPlain(node: Node): node is JSDocLinkPlain;
     function isJSDocAllType(node: Node): node is JSDocAllType;
     function isJSDocUnknownType(node: Node): node is JSDocUnknownType;
     function isJSDocNullableType(node: Node): node is JSDocNullableType;
@@ -5478,6 +5527,11 @@
         PartialSemantic = 1,
         Syntactic = 2
     }
+    interface IncompleteCompletionsCache {
+        get(): CompletionInfo | undefined;
+        set(response: CompletionInfo): void;
+        clear(): void;
+    }
     interface LanguageServiceHost extends GetEffectiveTypeRootsHost {
         getCompilationSettings(): CompilerOptions;
         getNewLine?(): string;
@@ -5639,6 +5693,7 @@
         prepareCallHierarchy(fileName: string, position: number): CallHierarchyItem | CallHierarchyItem[] | undefined;
         provideCallHierarchyIncomingCalls(fileName: string, position: number): CallHierarchyIncomingCall[];
         provideCallHierarchyOutgoingCalls(fileName: string, position: number): CallHierarchyOutgoingCall[];
+        provideInlayHints(fileName: string, span: TextSpan, preferences: UserPreferences | undefined): InlayHint[];
         getOutliningSpans(fileName: string): OutliningSpan[];
         getTodoComments(fileName: string, descriptors: TodoCommentDescriptor[]): TodoComment[];
         getBraceMatchingAtPosition(fileName: string, position: number): TextSpan[];
@@ -5689,17 +5744,35 @@
         skipDestructiveCodeActions?: boolean;
     }
     type CompletionsTriggerCharacter = "." | '"' | "'" | "`" | "/" | "@" | "<" | "#" | " ";
+    enum CompletionTriggerKind {
+        /** Completion was triggered by typing an identifier, manual invocation (e.g Ctrl+Space) or via API. */
+        Invoked = 1,
+        /** Completion was triggered by a trigger character. */
+        TriggerCharacter = 2,
+        /** Completion was re-triggered as the current completion list is incomplete. */
+        TriggerForIncompleteCompletions = 3
+    }
     interface GetCompletionsAtPositionOptions extends UserPreferences {
         /**
          * If the editor is asking for completions because a certain character was typed
          * (as opposed to when the user explicitly requested them) this should be set.
          */
         triggerCharacter?: CompletionsTriggerCharacter;
+        triggerKind?: CompletionTriggerKind;
         /** @deprecated Use includeCompletionsForModuleExports */
         includeExternalModuleExports?: boolean;
         /** @deprecated Use includeCompletionsWithInsertText */
         includeInsertTextCompletions?: boolean;
     }
+    interface InlayHintsOptions extends UserPreferences {
+        readonly includeInlayParameterNameHints?: "none" | "literals" | "all";
+        readonly includeInlayParameterNameHintsWhenArgumentMatchesName?: boolean;
+        readonly includeInlayFunctionParameterTypeHints?: boolean;
+        readonly includeInlayVariableTypeHints?: boolean;
+        readonly includeInlayPropertyDeclarationTypeHints?: boolean;
+        readonly includeInlayFunctionLikeReturnTypeHints?: boolean;
+        readonly includeInlayEnumMemberValueHints?: boolean;
+    }
     type SignatureHelpTriggerCharacter = "," | "(" | "<";
     type SignatureHelpRetriggerCharacter = SignatureHelpTriggerCharacter | ")";
     interface SignatureHelpItemsOptions {
@@ -5805,6 +5878,18 @@
         to: CallHierarchyItem;
         fromSpans: TextSpan[];
     }
+    enum InlayHintKind {
+        Type = "Type",
+        Parameter = "Parameter",
+        Enum = "Enum"
+    }
+    interface InlayHint {
+        text: string;
+        position: number;
+        kind: InlayHintKind;
+        whitespaceBefore?: boolean;
+        whitespaceAfter?: boolean;
+    }
     interface TodoCommentDescriptor {
         text: string;
         priority: number;
@@ -6368,7 +6453,10 @@
          * interface Y { foo:number; }
          */
         memberVariableElement = "property",
-        /** class X { constructor() { } } */
+        /**
+         * class X { constructor() { } }
+         * class X { static { } }
+         */
         constructorImplementationElement = "constructor",
         /** interface Y { ():number; } */
         callSignatureElement = "call",
@@ -6470,6 +6558,14 @@
         jsxAttributeStringLiteralValue = 24,
         bigintLiteral = 25
     }
+    interface InlayHintsContext {
+        file: SourceFile;
+        program: Program;
+        cancellationToken: CancellationToken;
+        host: LanguageServiceHost;
+        span: TextSpan;
+        preferences: InlayHintsOptions;
+    }
 }
 declare namespace ts {
     /** The classifier is used for syntactic highlighting in editors via the TSServer */
@@ -6761,7 +6857,8 @@
         UncommentSelection = "uncommentSelection",
         PrepareCallHierarchy = "prepareCallHierarchy",
         ProvideCallHierarchyIncomingCalls = "provideCallHierarchyIncomingCalls",
-        ProvideCallHierarchyOutgoingCalls = "provideCallHierarchyOutgoingCalls"
+        ProvideCallHierarchyOutgoingCalls = "provideCallHierarchyOutgoingCalls",
+        ProvideInlayHints = "provideInlayHints"
     }
     /**
      * A TypeScript Server message
@@ -8278,6 +8375,14 @@
         arguments: FormatOnKeyRequestArgs;
     }
     type CompletionsTriggerCharacter = "." | '"' | "'" | "`" | "/" | "@" | "<" | "#" | " ";
+    enum CompletionTriggerKind {
+        /** Completion was triggered by typing an identifier, manual invocation (e.g Ctrl+Space) or via API. */
+        Invoked = 1,
+        /** Completion was triggered by a trigger character. */
+        TriggerCharacter = 2,
+        /** Completion was re-triggered as the current completion list is incomplete. */
+        TriggerForIncompleteCompletions = 3
+    }
     /**
      * Arguments for completions messages.
      */
@@ -8291,6 +8396,7 @@
          * Should be `undefined` if a user manually requested completion.
          */
         triggerCharacter?: CompletionsTriggerCharacter;
+        triggerKind?: CompletionTriggerKind;
         /**
          * @deprecated Use UserPreferences.includeCompletionsForModuleExports
          */
@@ -8633,6 +8739,31 @@
     interface SignatureHelpResponse extends Response {
         body?: SignatureHelpItems;
     }
+    type InlayHintKind = "Type" | "Parameter" | "Enum";
+    interface InlayHintsRequestArgs extends FileRequestArgs {
+        /**
+         * Start position of the span.
+         */
+        start: number;
+        /**
+         * Length of the span.
+         */
+        length: number;
+    }
+    interface InlayHintsRequest extends Request {
+        command: CommandTypes.ProvideInlayHints;
+        arguments: InlayHintsRequestArgs;
+    }
+    interface InlayHintItem {
+        text: string;
+        position: Location;
+        kind: InlayHintKind;
+        whitespaceBefore?: boolean;
+        whitespaceAfter?: boolean;
+    }
+    interface InlayHintsResponse extends Response {
+        body?: InlayHintItem[];
+    }
     /**
      * Synchronous request for semantic diagnostics of one file.
      */
@@ -9291,6 +9422,7 @@
          * values, with insertion text to replace preceding `.` tokens with `?.`.
          */
         readonly includeAutomaticOptionalChainCompletions?: boolean;
+        readonly allowIncompleteCompletions?: boolean;
         readonly importModuleSpecifierPreference?: "shortest" | "project-relative" | "relative" | "non-relative";
         /** Determines whether we import `foo/index.ts` as "foo", "foo/index", or "foo/index.js" */
         readonly importModuleSpecifierEnding?: "auto" | "minimal" | "index" | "js";
@@ -9522,6 +9654,7 @@
         languageService: LanguageService;
         languageServiceHost: LanguageServiceHost;
         serverHost: ServerHost;
+        session?: Session<unknown>;
         config: any;
     }
     interface PluginModule {
@@ -9685,7 +9818,6 @@
      * the file and its imports/references are put into an InferredProject.
      */
     class InferredProject extends Project {
-        private static readonly newName;
         private _isJsInferredProject;
         toggleJsInferredProject(isJsInferredProject: boolean): void;
         setCompilerOptions(options?: CompilerOptions): void;
@@ -9699,7 +9831,6 @@
     }
     class AutoImportProviderProject extends Project {
         private hostProject;
-        private static readonly newName;
         private rootFileNames;
         isOrphan(): boolean;
         updateGraph(): boolean;
@@ -9915,13 +10046,14 @@
         /** @deprecated use serverMode instead */
         syntaxOnly?: boolean;
         serverMode?: LanguageServiceMode;
+        session: Session<unknown> | undefined;
     }
     export interface WatchOptionsAndErrors {
         watchOptions: WatchOptions;
         errors: Diagnostic[] | undefined;
     }
     export class ProjectService {
-        private readonly scriptInfoInNodeModulesWatchers;
+        private readonly nodeModulesWatchers;
         /**
          * Contains all the deleted script info's version information so that
          * it does not reset when creating script info again
@@ -10071,6 +10203,7 @@
         private createInferredProject;
         getScriptInfo(uncheckedFileName: string): ScriptInfo | undefined;
         private watchClosedScriptInfo;
+        private createNodeModulesWatcher;
         private watchClosedScriptInfoInNodeModules;
         private getModifiedTime;
         private refreshScriptInfo;
@@ -10262,6 +10395,7 @@
         private getSuggestionDiagnosticsSync;
         private getJsxClosingTag;
         private getDocumentHighlights;
+        private provideInlayHints;
         private setCompilerOptionsForInferredProjects;
         private getProjectInfo;
         private getProjectInfoWorker;
@@ -10835,51 +10969,51 @@
     /** @deprecated Use `factory.createJSDocTypeExpression` or the factory supplied by your transformation context instead. */
     const createJSDocTypeExpression: (type: TypeNode) => JSDocTypeExpression;
     /** @deprecated Use `factory.createJSDocTypeTag` or the factory supplied by your transformation context instead. */
-    const createJSDocTypeTag: (tagName: Identifier | undefined, typeExpression: JSDocTypeExpression, comment?: string | NodeArray<JSDocText | JSDocLink> | undefined) => JSDocTypeTag;
+    const createJSDocTypeTag: (tagName: Identifier | undefined, typeExpression: JSDocTypeExpression, comment?: string | NodeArray<JSDocComment> | undefined) => JSDocTypeTag;
     /** @deprecated Use `factory.createJSDocReturnTag` or the factory supplied by your transformation context instead. */
-    const createJSDocReturnTag: (tagName: Identifier | undefined, typeExpression?: JSDocTypeExpression | undefined, comment?: string | NodeArray<JSDocText | JSDocLink> | undefined) => JSDocReturnTag;
+    const createJSDocReturnTag: (tagName: Identifier | undefined, typeExpression?: JSDocTypeExpression | undefined, comment?: string | NodeArray<JSDocComment> | undefined) => JSDocReturnTag;
     /** @deprecated Use `factory.createJSDocThisTag` or the factory supplied by your transformation context instead. */
-    const createJSDocThisTag: (tagName: Identifier | undefined, typeExpression: JSDocTypeExpression, comment?: string | NodeArray<JSDocText | JSDocLink> | undefined) => JSDocThisTag;
+    const createJSDocThisTag: (tagName: Identifier | undefined, typeExpression: JSDocTypeExpression, comment?: string | NodeArray<JSDocComment> | undefined) => JSDocThisTag;
     /** @deprecated Use `factory.createJSDocComment` or the factory supplied by your transformation context instead. */
-    const createJSDocComment: (comment?: string | NodeArray<JSDocText | JSDocLink> | undefined, tags?: readonly JSDocTag[] | undefined) => JSDoc;
+    const createJSDocComment: (comment?: string | NodeArray<JSDocComment> | undefined, tags?: readonly JSDocTag[] | undefined) => JSDoc;
     /** @deprecated Use `factory.createJSDocParameterTag` or the factory supplied by your transformation context instead. */
-    const createJSDocParameterTag: (tagName: Identifier | undefined, name: EntityName, isBracketed: boolean, typeExpression?: JSDocTypeExpression | undefined, isNameFirst?: boolean | undefined, comment?: string | NodeArray<JSDocText | JSDocLink> | undefined) => JSDocParameterTag;
+    const createJSDocParameterTag: (tagName: Identifier | undefined, name: EntityName, isBracketed: boolean, typeExpression?: JSDocTypeExpression | undefined, isNameFirst?: boolean | undefined, comment?: string | NodeArray<JSDocComment> | undefined) => JSDocParameterTag;
     /** @deprecated Use `factory.createJSDocClassTag` or the factory supplied by your transformation context instead. */
-    const createJSDocClassTag: (tagName: Identifier | undefined, comment?: string | NodeArray<JSDocText | JSDocLink> | undefined) => JSDocClassTag;
+    const createJSDocClassTag: (tagName: Identifier | undefined, comment?: string | NodeArray<JSDocComment> | undefined) => JSDocClassTag;
     /** @deprecated Use `factory.createJSDocAugmentsTag` or the factory supplied by your transformation context instead. */
     const createJSDocAugmentsTag: (tagName: Identifier | undefined, className: ExpressionWithTypeArguments & {
         readonly expression: Identifier | PropertyAccessEntityNameExpression;
-    }, comment?: string | NodeArray<JSDocText | JSDocLink> | undefined) => JSDocAugmentsTag;
+    }, comment?: string | NodeArray<JSDocComment> | undefined) => JSDocAugmentsTag;
     /** @deprecated Use `factory.createJSDocEnumTag` or the factory supplied by your transformation context instead. */
-    const createJSDocEnumTag: (tagName: Identifier | undefined, typeExpression: JSDocTypeExpression, comment?: string | NodeArray<JSDocText | JSDocLink> | undefined) => JSDocEnumTag;
+    const createJSDocEnumTag: (tagName: Identifier | undefined, typeExpression: JSDocTypeExpression, comment?: string | NodeArray<JSDocComment> | undefined) => JSDocEnumTag;
     /** @deprecated Use `factory.createJSDocTemplateTag` or the factory supplied by your transformation context instead. */
-    const createJSDocTemplateTag: (tagName: Identifier | undefined, constraint: JSDocTypeExpression | undefined, typeParameters: readonly TypeParameterDeclaration[], comment?: string | NodeArray<JSDocText | JSDocLink> | undefined) => JSDocTemplateTag;
+    const createJSDocTemplateTag: (tagName: Identifier | undefined, constraint: JSDocTypeExpression | undefined, typeParameters: readonly TypeParameterDeclaration[], comment?: string | NodeArray<JSDocComment> | undefined) => JSDocTemplateTag;
     /** @deprecated Use `factory.createJSDocTypedefTag` or the factory supplied by your transformation context instead. */
-    const createJSDocTypedefTag: (tagName: Identifier | undefined, typeExpression?: JSDocTypeLiteral | JSDocTypeExpression | undefined, fullName?: Identifier | JSDocNamespaceDeclaration | undefined, comment?: string | NodeArray<JSDocText | JSDocLink> | undefined) => JSDocTypedefTag;
+    const createJSDocTypedefTag: (tagName: Identifier | undefined, typeExpression?: JSDocTypeLiteral | JSDocTypeExpression | undefined, fullName?: Identifier | JSDocNamespaceDeclaration | undefined, comment?: string | NodeArray<JSDocComment> | undefined) => JSDocTypedefTag;
     /** @deprecated Use `factory.createJSDocCallbackTag` or the factory supplied by your transformation context instead. */
-    const createJSDocCallbackTag: (tagName: Identifier | undefined, typeExpression: JSDocSignature, fullName?: Identifier | JSDocNamespaceDeclaration | undefined, comment?: string | NodeArray<JSDocText | JSDocLink> | undefined) => JSDocCallbackTag;
+    const createJSDocCallbackTag: (tagName: Identifier | undefined, typeExpression: JSDocSignature, fullName?: Identifier | JSDocNamespaceDeclaration | undefined, comment?: string | NodeArray<JSDocComment> | undefined) => JSDocCallbackTag;
     /** @deprecated Use `factory.createJSDocSignature` or the factory supplied by your transformation context instead. */
     const createJSDocSignature: (typeParameters: readonly JSDocTemplateTag[] | undefined, parameters: readonly JSDocParameterTag[], type?: JSDocReturnTag | undefined) => JSDocSignature;
     /** @deprecated Use `factory.createJSDocPropertyTag` or the factory supplied by your transformation context instead. */
-    const createJSDocPropertyTag: (tagName: Identifier | undefined, name: EntityName, isBracketed: boolean, typeExpression?: JSDocTypeExpression | undefined, isNameFirst?: boolean | undefined, comment?: string | NodeArray<JSDocText | JSDocLink> | undefined) => JSDocPropertyTag;
+    const createJSDocPropertyTag: (tagName: Identifier | undefined, name: EntityName, isBracketed: boolean, typeExpression?: JSDocTypeExpression | undefined, isNameFirst?: boolean | undefined, comment?: string | NodeArray<JSDocComment> | undefined) => JSDocPropertyTag;
     /** @deprecated Use `factory.createJSDocTypeLiteral` or the factory supplied by your transformation context instead. */
     const createJSDocTypeLiteral: (jsDocPropertyTags?: readonly JSDocPropertyLikeTag[] | undefined, isArrayType?: boolean | undefined) => JSDocTypeLiteral;
     /** @deprecated Use `factory.createJSDocImplementsTag` or the factory supplied by your transformation context instead. */
     const createJSDocImplementsTag: (tagName: Identifier | undefined, className: ExpressionWithTypeArguments & {
         readonly expression: Identifier | PropertyAccessEntityNameExpression;
-    }, comment?: string | NodeArray<JSDocText | JSDocLink> | undefined) => JSDocImplementsTag;
+    }, comment?: string | NodeArray<JSDocComment> | undefined) => JSDocImplementsTag;
     /** @deprecated Use `factory.createJSDocAuthorTag` or the factory supplied by your transformation context instead. */
-    const createJSDocAuthorTag: (tagName: Identifier | undefined, comment?: string | NodeArray<JSDocText | JSDocLink> | undefined) => JSDocAuthorTag;
+    const createJSDocAuthorTag: (tagName: Identifier | undefined, comment?: string | NodeArray<JSDocComment> | undefined) => JSDocAuthorTag;
     /** @deprecated Use `factory.createJSDocPublicTag` or the factory supplied by your transformation context instead. */
-    const createJSDocPublicTag: (tagName: Identifier | undefined, comment?: string | NodeArray<JSDocText | JSDocLink> | undefined) => JSDocPublicTag;
+    const createJSDocPublicTag: (tagName: Identifier | undefined, comment?: string | NodeArray<JSDocComment> | undefined) => JSDocPublicTag;
     /** @deprecated Use `factory.createJSDocPrivateTag` or the factory supplied by your transformation context instead. */
-    const createJSDocPrivateTag: (tagName: Identifier | undefined, comment?: string | NodeArray<JSDocText | JSDocLink> | undefined) => JSDocPrivateTag;
+    const createJSDocPrivateTag: (tagName: Identifier | undefined, comment?: string | NodeArray<JSDocComment> | undefined) => JSDocPrivateTag;
     /** @deprecated Use `factory.createJSDocProtectedTag` or the factory supplied by your transformation context instead. */
-    const createJSDocProtectedTag: (tagName: Identifier | undefined, comment?: string | NodeArray<JSDocText | JSDocLink> | undefined) => JSDocProtectedTag;
+    const createJSDocProtectedTag: (tagName: Identifier | undefined, comment?: string | NodeArray<JSDocComment> | undefined) => JSDocProtectedTag;
     /** @deprecated Use `factory.createJSDocReadonlyTag` or the factory supplied by your transformation context instead. */
-    const createJSDocReadonlyTag: (tagName: Identifier | undefined, comment?: string | NodeArray<JSDocText | JSDocLink> | undefined) => JSDocReadonlyTag;
+    const createJSDocReadonlyTag: (tagName: Identifier | undefined, comment?: string | NodeArray<JSDocComment> | undefined) => JSDocReadonlyTag;
     /** @deprecated Use `factory.createJSDocUnknownTag` or the factory supplied by your transformation context instead. */
-    const createJSDocTag: (tagName: Identifier, comment?: string | NodeArray<JSDocText | JSDocLink> | undefined) => JSDocUnknownTag;
+    const createJSDocTag: (tagName: Identifier, comment?: string | NodeArray<JSDocComment> | undefined) => JSDocUnknownTag;
     /** @deprecated Use `factory.createJsxElement` or the factory supplied by your transformation context instead. */
     const createJsxElement: (openingElement: JsxOpeningElement, children: readonly JsxChild[], closingElement: JsxClosingElement) => JsxElement;
     /** @deprecated Use `factory.updateJsxElement` or the factory supplied by your transformation context instead. */
diff --git a/node_modules/typescript/lib/tsserverlibrary.js b/node_modules/typescript/lib/tsserverlibrary.js
index 8893292..5fa1cd2 100644
--- a/node_modules/typescript/lib/tsserverlibrary.js
+++ b/node_modules/typescript/lib/tsserverlibrary.js
@@ -14,10 +14,14 @@
 ***************************************************************************** */
 
 "use strict";
-var __spreadArray = (this && this.__spreadArray) || function (to, from) {
-    for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)
-        to[j] = from[i];
-    return to;
+var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
+    if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
+        if (ar || !(i in from)) {
+            if (!ar) ar = Array.prototype.slice.call(from, 0, i);
+            ar[i] = from[i];
+        }
+    }
+    return to.concat(ar || Array.prototype.slice.call(from));
 };
 var __assign = (this && this.__assign) || function () {
     __assign = Object.assign || function(t) {
@@ -286,11 +290,11 @@
 (function (ts) {
     // WARNING: The script `configurePrerelease.ts` uses a regexp to parse out these values.
     // If changing the text in this section, be sure to test `configurePrerelease` too.
-    ts.versionMajorMinor = "4.3";
+    ts.versionMajorMinor = "4.4";
     // The following is baselined as a literal template type without intervention
     /** The version of the TypeScript compiler release */
     // eslint-disable-next-line @typescript-eslint/no-inferrable-types
-    ts.version = "4.3.5";
+    ts.version = "4.4.2";
     /* @internal */
     var Comparison;
     (function (Comparison) {
@@ -975,7 +979,7 @@
             return array1;
         if (!some(array1))
             return array2;
-        return __spreadArray(__spreadArray([], array1), array2);
+        return __spreadArray(__spreadArray([], array1, true), array2, true);
     }
     ts.concatenate = concatenate;
     function selectIndex(_, i) {
@@ -2133,10 +2137,46 @@
      * Takes a string like "jquery-min.4.2.3" and returns "jquery"
      */
     function removeMinAndVersionNumbers(fileName) {
-        // Match a "." or "-" followed by a version number or 'min' at the end of the name
-        var trailingMinOrVersion = /[.-]((min)|(\d+(\.\d+)*))$/;
-        // The "min" or version may both be present, in either order, so try applying the above twice.
-        return fileName.replace(trailingMinOrVersion, "").replace(trailingMinOrVersion, "");
+        // We used to use the regex /[.-]((min)|(\d+(\.\d+)*))$/ and would just .replace it twice.
+        // Unfortunately, that regex has O(n^2) performance because v8 doesn't match from the end of the string.
+        // Instead, we now essentially scan the filename (backwards) ourselves.
+        var end = fileName.length;
+        for (var pos = end - 1; pos > 0; pos--) {
+            var ch = fileName.charCodeAt(pos);
+            if (ch >= 48 /* _0 */ && ch <= 57 /* _9 */) {
+                // Match a \d+ segment
+                do {
+                    --pos;
+                    ch = fileName.charCodeAt(pos);
+                } while (pos > 0 && ch >= 48 /* _0 */ && ch <= 57 /* _9 */);
+            }
+            else if (pos > 4 && (ch === 110 /* n */ || ch === 78 /* N */)) {
+                // Looking for "min" or "min"
+                // Already matched the 'n'
+                --pos;
+                ch = fileName.charCodeAt(pos);
+                if (ch !== 105 /* i */ && ch !== 73 /* I */) {
+                    break;
+                }
+                --pos;
+                ch = fileName.charCodeAt(pos);
+                if (ch !== 109 /* m */ && ch !== 77 /* M */) {
+                    break;
+                }
+                --pos;
+                ch = fileName.charCodeAt(pos);
+            }
+            else {
+                // This character is not part of either suffix pattern
+                break;
+            }
+            if (ch !== 45 /* minus */ && ch !== 46 /* dot */) {
+                break;
+            }
+            end = pos;
+        }
+        // end might be fileName.length, in which case this should internally no-op
+        return end === fileName.length ? fileName : fileName.slice(0, end);
     }
     ts.removeMinAndVersionNumbers = removeMinAndVersionNumbers;
     /** Remove an item from an array, moving everything to its right one space left. */
@@ -2377,6 +2417,33 @@
         return array.slice(0, index);
     }
     ts.takeWhile = takeWhile;
+    /**
+     * Removes the leading and trailing white space and line terminator characters from a string.
+     */
+    ts.trimString = !!String.prototype.trim ? (function (s) { return s.trim(); }) : function (s) { return ts.trimStringEnd(ts.trimStringStart(s)); };
+    /**
+     * Returns a copy with trailing whitespace removed.
+     */
+    ts.trimStringEnd = !!String.prototype.trimEnd ? (function (s) { return s.trimEnd(); }) : trimEndImpl;
+    /**
+     * Returns a copy with leading whitespace removed.
+     */
+    ts.trimStringStart = !!String.prototype.trimStart ? (function (s) { return s.trimStart(); }) : function (s) { return s.replace(/^\s+/g, ""); };
+    /**
+     * https://jsbench.me/gjkoxld4au/1
+     * The simple regex for this, /\s+$/g is O(n^2) in v8.
+     * The native .trimEnd method is by far best, but since that's technically ES2019,
+     * we provide a (still much faster than the simple regex) fallback.
+     */
+    function trimEndImpl(s) {
+        var end = s.length - 1;
+        while (end >= 0) {
+            if (!ts.isWhiteSpaceLike(s.charCodeAt(end)))
+                break;
+            end--;
+        }
+        return s.slice(0, end + 1);
+    }
 })(ts || (ts = {}));
 /* @internal */
 var ts;
@@ -2566,7 +2633,7 @@
         Debug.assertEachNode = assertEachNode;
         function assertNode(node, test, message, stackCrawlMark) {
             if (shouldAssertFunction(1 /* Normal */, "assertNode")) {
-                assert(node !== undefined && (test === undefined || test(node)), message || "Unexpected node.", function () { return "Node " + formatSyntaxKind(node.kind) + " did not pass test '" + getFunctionName(test) + "'."; }, stackCrawlMark || assertNode);
+                assert(node !== undefined && (test === undefined || test(node)), message || "Unexpected node.", function () { return "Node " + formatSyntaxKind(node === null || node === void 0 ? void 0 : node.kind) + " did not pass test '" + getFunctionName(test) + "'."; }, stackCrawlMark || assertNode);
             }
         }
         Debug.assertNode = assertNode;
@@ -2578,13 +2645,13 @@
         Debug.assertNotNode = assertNotNode;
         function assertOptionalNode(node, test, message, stackCrawlMark) {
             if (shouldAssertFunction(1 /* Normal */, "assertOptionalNode")) {
-                assert(test === undefined || node === undefined || test(node), message || "Unexpected node.", function () { return "Node " + formatSyntaxKind(node.kind) + " did not pass test '" + getFunctionName(test) + "'."; }, stackCrawlMark || assertOptionalNode);
+                assert(test === undefined || node === undefined || test(node), message || "Unexpected node.", function () { return "Node " + formatSyntaxKind(node === null || node === void 0 ? void 0 : node.kind) + " did not pass test '" + getFunctionName(test) + "'."; }, stackCrawlMark || assertOptionalNode);
             }
         }
         Debug.assertOptionalNode = assertOptionalNode;
         function assertOptionalToken(node, kind, message, stackCrawlMark) {
             if (shouldAssertFunction(1 /* Normal */, "assertOptionalToken")) {
-                assert(kind === undefined || node === undefined || node.kind === kind, message || "Unexpected node.", function () { return "Node " + formatSyntaxKind(node.kind) + " was not a '" + formatSyntaxKind(kind) + "' token."; }, stackCrawlMark || assertOptionalToken);
+                assert(kind === undefined || node === undefined || node.kind === kind, message || "Unexpected node.", function () { return "Node " + formatSyntaxKind(node === null || node === void 0 ? void 0 : node.kind) + " was not a '" + formatSyntaxKind(kind) + "' token."; }, stackCrawlMark || assertOptionalToken);
             }
         }
         Debug.assertOptionalToken = assertOptionalToken;
@@ -2773,6 +2840,9 @@
                             // An `Array` with extra properties is rendered as `[A, B, prop1: 1, prop2: 2]`. Most of
                             // these aren't immediately useful so we trim off the `prop1: ..., prop2: ...` part from the
                             // formatted string.
+                            // This regex can trigger slow backtracking because of overlapping potential captures.
+                            // We don't care, this is debug code that's only enabled with a debugger attached -
+                            // we're just taking note of it for anyone checking regex performance in the future.
                             defaultValue = String(defaultValue).replace(/(?:,[\s\w\d_]+:[^,]+)+\]$/, "]");
                             return "NodeArray " + defaultValue;
                         }
@@ -3221,7 +3291,7 @@
     // range-set    ::= range ( logical-or range ) *
     // range        ::= hyphen | simple ( ' ' simple ) * | ''
     // logical-or   ::= ( ' ' ) * '||' ( ' ' ) *
-    var logicalOrRegExp = /\s*\|\|\s*/g;
+    var logicalOrRegExp = /\|\|/g;
     var whitespaceRegExp = /\s+/g;
     // https://github.com/npm/node-semver#range-grammar
     //
@@ -3244,14 +3314,15 @@
     // primitive    ::= ( '<' | '>' | '>=' | '<=' | '=' ) partial
     // tilde        ::= '~' partial
     // caret        ::= '^' partial
-    var rangeRegExp = /^\s*(~|\^|<|<=|>|>=|=)?\s*([a-z0-9-+.*]+)$/i;
+    var rangeRegExp = /^(~|\^|<|<=|>|>=|=)?\s*([a-z0-9-+.*]+)$/i;
     function parseRange(text) {
         var alternatives = [];
-        for (var _i = 0, _a = text.trim().split(logicalOrRegExp); _i < _a.length; _i++) {
+        for (var _i = 0, _a = ts.trimString(text).split(logicalOrRegExp); _i < _a.length; _i++) {
             var range = _a[_i];
             if (!range)
                 continue;
             var comparators = [];
+            range = ts.trimString(range);
             var match = hyphenRegExp.exec(range);
             if (match) {
                 if (!parseHyphen(match[1], match[2], comparators))
@@ -3260,7 +3331,7 @@
             else {
                 for (var _b = 0, _c = range.split(whitespaceRegExp); _b < _c.length; _b++) {
                     var simple = _c[_b];
-                    var match_1 = rangeRegExp.exec(simple);
+                    var match_1 = rangeRegExp.exec(ts.trimString(simple));
                     if (!match_1 || !parseComparator(match_1[1], match_1[2], comparators))
                         return undefined;
                 }
@@ -4007,332 +4078,338 @@
         SyntaxKind[SyntaxKind["QuestionQuestionToken"] = 60] = "QuestionQuestionToken";
         /** Only the JSDoc scanner produces BacktickToken. The normal scanner produces NoSubstitutionTemplateLiteral and related kinds. */
         SyntaxKind[SyntaxKind["BacktickToken"] = 61] = "BacktickToken";
+        /** Only the JSDoc scanner produces HashToken. The normal scanner produces PrivateIdentifier. */
+        SyntaxKind[SyntaxKind["HashToken"] = 62] = "HashToken";
         // Assignments
-        SyntaxKind[SyntaxKind["EqualsToken"] = 62] = "EqualsToken";
-        SyntaxKind[SyntaxKind["PlusEqualsToken"] = 63] = "PlusEqualsToken";
-        SyntaxKind[SyntaxKind["MinusEqualsToken"] = 64] = "MinusEqualsToken";
-        SyntaxKind[SyntaxKind["AsteriskEqualsToken"] = 65] = "AsteriskEqualsToken";
-        SyntaxKind[SyntaxKind["AsteriskAsteriskEqualsToken"] = 66] = "AsteriskAsteriskEqualsToken";
-        SyntaxKind[SyntaxKind["SlashEqualsToken"] = 67] = "SlashEqualsToken";
-        SyntaxKind[SyntaxKind["PercentEqualsToken"] = 68] = "PercentEqualsToken";
-        SyntaxKind[SyntaxKind["LessThanLessThanEqualsToken"] = 69] = "LessThanLessThanEqualsToken";
-        SyntaxKind[SyntaxKind["GreaterThanGreaterThanEqualsToken"] = 70] = "GreaterThanGreaterThanEqualsToken";
-        SyntaxKind[SyntaxKind["GreaterThanGreaterThanGreaterThanEqualsToken"] = 71] = "GreaterThanGreaterThanGreaterThanEqualsToken";
-        SyntaxKind[SyntaxKind["AmpersandEqualsToken"] = 72] = "AmpersandEqualsToken";
-        SyntaxKind[SyntaxKind["BarEqualsToken"] = 73] = "BarEqualsToken";
-        SyntaxKind[SyntaxKind["BarBarEqualsToken"] = 74] = "BarBarEqualsToken";
-        SyntaxKind[SyntaxKind["AmpersandAmpersandEqualsToken"] = 75] = "AmpersandAmpersandEqualsToken";
-        SyntaxKind[SyntaxKind["QuestionQuestionEqualsToken"] = 76] = "QuestionQuestionEqualsToken";
-        SyntaxKind[SyntaxKind["CaretEqualsToken"] = 77] = "CaretEqualsToken";
+        SyntaxKind[SyntaxKind["EqualsToken"] = 63] = "EqualsToken";
+        SyntaxKind[SyntaxKind["PlusEqualsToken"] = 64] = "PlusEqualsToken";
+        SyntaxKind[SyntaxKind["MinusEqualsToken"] = 65] = "MinusEqualsToken";
+        SyntaxKind[SyntaxKind["AsteriskEqualsToken"] = 66] = "AsteriskEqualsToken";
+        SyntaxKind[SyntaxKind["AsteriskAsteriskEqualsToken"] = 67] = "AsteriskAsteriskEqualsToken";
+        SyntaxKind[SyntaxKind["SlashEqualsToken"] = 68] = "SlashEqualsToken";
+        SyntaxKind[SyntaxKind["PercentEqualsToken"] = 69] = "PercentEqualsToken";
+        SyntaxKind[SyntaxKind["LessThanLessThanEqualsToken"] = 70] = "LessThanLessThanEqualsToken";
+        SyntaxKind[SyntaxKind["GreaterThanGreaterThanEqualsToken"] = 71] = "GreaterThanGreaterThanEqualsToken";
+        SyntaxKind[SyntaxKind["GreaterThanGreaterThanGreaterThanEqualsToken"] = 72] = "GreaterThanGreaterThanGreaterThanEqualsToken";
+        SyntaxKind[SyntaxKind["AmpersandEqualsToken"] = 73] = "AmpersandEqualsToken";
+        SyntaxKind[SyntaxKind["BarEqualsToken"] = 74] = "BarEqualsToken";
+        SyntaxKind[SyntaxKind["BarBarEqualsToken"] = 75] = "BarBarEqualsToken";
+        SyntaxKind[SyntaxKind["AmpersandAmpersandEqualsToken"] = 76] = "AmpersandAmpersandEqualsToken";
+        SyntaxKind[SyntaxKind["QuestionQuestionEqualsToken"] = 77] = "QuestionQuestionEqualsToken";
+        SyntaxKind[SyntaxKind["CaretEqualsToken"] = 78] = "CaretEqualsToken";
         // Identifiers and PrivateIdentifiers
-        SyntaxKind[SyntaxKind["Identifier"] = 78] = "Identifier";
-        SyntaxKind[SyntaxKind["PrivateIdentifier"] = 79] = "PrivateIdentifier";
+        SyntaxKind[SyntaxKind["Identifier"] = 79] = "Identifier";
+        SyntaxKind[SyntaxKind["PrivateIdentifier"] = 80] = "PrivateIdentifier";
         // Reserved words
-        SyntaxKind[SyntaxKind["BreakKeyword"] = 80] = "BreakKeyword";
-        SyntaxKind[SyntaxKind["CaseKeyword"] = 81] = "CaseKeyword";
-        SyntaxKind[SyntaxKind["CatchKeyword"] = 82] = "CatchKeyword";
-        SyntaxKind[SyntaxKind["ClassKeyword"] = 83] = "ClassKeyword";
-        SyntaxKind[SyntaxKind["ConstKeyword"] = 84] = "ConstKeyword";
-        SyntaxKind[SyntaxKind["ContinueKeyword"] = 85] = "ContinueKeyword";
-        SyntaxKind[SyntaxKind["DebuggerKeyword"] = 86] = "DebuggerKeyword";
-        SyntaxKind[SyntaxKind["DefaultKeyword"] = 87] = "DefaultKeyword";
-        SyntaxKind[SyntaxKind["DeleteKeyword"] = 88] = "DeleteKeyword";
-        SyntaxKind[SyntaxKind["DoKeyword"] = 89] = "DoKeyword";
-        SyntaxKind[SyntaxKind["ElseKeyword"] = 90] = "ElseKeyword";
-        SyntaxKind[SyntaxKind["EnumKeyword"] = 91] = "EnumKeyword";
-        SyntaxKind[SyntaxKind["ExportKeyword"] = 92] = "ExportKeyword";
-        SyntaxKind[SyntaxKind["ExtendsKeyword"] = 93] = "ExtendsKeyword";
-        SyntaxKind[SyntaxKind["FalseKeyword"] = 94] = "FalseKeyword";
-        SyntaxKind[SyntaxKind["FinallyKeyword"] = 95] = "FinallyKeyword";
-        SyntaxKind[SyntaxKind["ForKeyword"] = 96] = "ForKeyword";
-        SyntaxKind[SyntaxKind["FunctionKeyword"] = 97] = "FunctionKeyword";
-        SyntaxKind[SyntaxKind["IfKeyword"] = 98] = "IfKeyword";
-        SyntaxKind[SyntaxKind["ImportKeyword"] = 99] = "ImportKeyword";
-        SyntaxKind[SyntaxKind["InKeyword"] = 100] = "InKeyword";
-        SyntaxKind[SyntaxKind["InstanceOfKeyword"] = 101] = "InstanceOfKeyword";
-        SyntaxKind[SyntaxKind["NewKeyword"] = 102] = "NewKeyword";
-        SyntaxKind[SyntaxKind["NullKeyword"] = 103] = "NullKeyword";
-        SyntaxKind[SyntaxKind["ReturnKeyword"] = 104] = "ReturnKeyword";
-        SyntaxKind[SyntaxKind["SuperKeyword"] = 105] = "SuperKeyword";
-        SyntaxKind[SyntaxKind["SwitchKeyword"] = 106] = "SwitchKeyword";
-        SyntaxKind[SyntaxKind["ThisKeyword"] = 107] = "ThisKeyword";
-        SyntaxKind[SyntaxKind["ThrowKeyword"] = 108] = "ThrowKeyword";
-        SyntaxKind[SyntaxKind["TrueKeyword"] = 109] = "TrueKeyword";
-        SyntaxKind[SyntaxKind["TryKeyword"] = 110] = "TryKeyword";
-        SyntaxKind[SyntaxKind["TypeOfKeyword"] = 111] = "TypeOfKeyword";
-        SyntaxKind[SyntaxKind["VarKeyword"] = 112] = "VarKeyword";
-        SyntaxKind[SyntaxKind["VoidKeyword"] = 113] = "VoidKeyword";
-        SyntaxKind[SyntaxKind["WhileKeyword"] = 114] = "WhileKeyword";
-        SyntaxKind[SyntaxKind["WithKeyword"] = 115] = "WithKeyword";
+        SyntaxKind[SyntaxKind["BreakKeyword"] = 81] = "BreakKeyword";
+        SyntaxKind[SyntaxKind["CaseKeyword"] = 82] = "CaseKeyword";
+        SyntaxKind[SyntaxKind["CatchKeyword"] = 83] = "CatchKeyword";
+        SyntaxKind[SyntaxKind["ClassKeyword"] = 84] = "ClassKeyword";
+        SyntaxKind[SyntaxKind["ConstKeyword"] = 85] = "ConstKeyword";
+        SyntaxKind[SyntaxKind["ContinueKeyword"] = 86] = "ContinueKeyword";
+        SyntaxKind[SyntaxKind["DebuggerKeyword"] = 87] = "DebuggerKeyword";
+        SyntaxKind[SyntaxKind["DefaultKeyword"] = 88] = "DefaultKeyword";
+        SyntaxKind[SyntaxKind["DeleteKeyword"] = 89] = "DeleteKeyword";
+        SyntaxKind[SyntaxKind["DoKeyword"] = 90] = "DoKeyword";
+        SyntaxKind[SyntaxKind["ElseKeyword"] = 91] = "ElseKeyword";
+        SyntaxKind[SyntaxKind["EnumKeyword"] = 92] = "EnumKeyword";
+        SyntaxKind[SyntaxKind["ExportKeyword"] = 93] = "ExportKeyword";
+        SyntaxKind[SyntaxKind["ExtendsKeyword"] = 94] = "ExtendsKeyword";
+        SyntaxKind[SyntaxKind["FalseKeyword"] = 95] = "FalseKeyword";
+        SyntaxKind[SyntaxKind["FinallyKeyword"] = 96] = "FinallyKeyword";
+        SyntaxKind[SyntaxKind["ForKeyword"] = 97] = "ForKeyword";
+        SyntaxKind[SyntaxKind["FunctionKeyword"] = 98] = "FunctionKeyword";
+        SyntaxKind[SyntaxKind["IfKeyword"] = 99] = "IfKeyword";
+        SyntaxKind[SyntaxKind["ImportKeyword"] = 100] = "ImportKeyword";
+        SyntaxKind[SyntaxKind["InKeyword"] = 101] = "InKeyword";
+        SyntaxKind[SyntaxKind["InstanceOfKeyword"] = 102] = "InstanceOfKeyword";
+        SyntaxKind[SyntaxKind["NewKeyword"] = 103] = "NewKeyword";
+        SyntaxKind[SyntaxKind["NullKeyword"] = 104] = "NullKeyword";
+        SyntaxKind[SyntaxKind["ReturnKeyword"] = 105] = "ReturnKeyword";
+        SyntaxKind[SyntaxKind["SuperKeyword"] = 106] = "SuperKeyword";
+        SyntaxKind[SyntaxKind["SwitchKeyword"] = 107] = "SwitchKeyword";
+        SyntaxKind[SyntaxKind["ThisKeyword"] = 108] = "ThisKeyword";
+        SyntaxKind[SyntaxKind["ThrowKeyword"] = 109] = "ThrowKeyword";
+        SyntaxKind[SyntaxKind["TrueKeyword"] = 110] = "TrueKeyword";
+        SyntaxKind[SyntaxKind["TryKeyword"] = 111] = "TryKeyword";
+        SyntaxKind[SyntaxKind["TypeOfKeyword"] = 112] = "TypeOfKeyword";
+        SyntaxKind[SyntaxKind["VarKeyword"] = 113] = "VarKeyword";
+        SyntaxKind[SyntaxKind["VoidKeyword"] = 114] = "VoidKeyword";
+        SyntaxKind[SyntaxKind["WhileKeyword"] = 115] = "WhileKeyword";
+        SyntaxKind[SyntaxKind["WithKeyword"] = 116] = "WithKeyword";
         // Strict mode reserved words
-        SyntaxKind[SyntaxKind["ImplementsKeyword"] = 116] = "ImplementsKeyword";
-        SyntaxKind[SyntaxKind["InterfaceKeyword"] = 117] = "InterfaceKeyword";
-        SyntaxKind[SyntaxKind["LetKeyword"] = 118] = "LetKeyword";
-        SyntaxKind[SyntaxKind["PackageKeyword"] = 119] = "PackageKeyword";
-        SyntaxKind[SyntaxKind["PrivateKeyword"] = 120] = "PrivateKeyword";
-        SyntaxKind[SyntaxKind["ProtectedKeyword"] = 121] = "ProtectedKeyword";
-        SyntaxKind[SyntaxKind["PublicKeyword"] = 122] = "PublicKeyword";
-        SyntaxKind[SyntaxKind["StaticKeyword"] = 123] = "StaticKeyword";
-        SyntaxKind[SyntaxKind["YieldKeyword"] = 124] = "YieldKeyword";
+        SyntaxKind[SyntaxKind["ImplementsKeyword"] = 117] = "ImplementsKeyword";
+        SyntaxKind[SyntaxKind["InterfaceKeyword"] = 118] = "InterfaceKeyword";
+        SyntaxKind[SyntaxKind["LetKeyword"] = 119] = "LetKeyword";
+        SyntaxKind[SyntaxKind["PackageKeyword"] = 120] = "PackageKeyword";
+        SyntaxKind[SyntaxKind["PrivateKeyword"] = 121] = "PrivateKeyword";
+        SyntaxKind[SyntaxKind["ProtectedKeyword"] = 122] = "ProtectedKeyword";
+        SyntaxKind[SyntaxKind["PublicKeyword"] = 123] = "PublicKeyword";
+        SyntaxKind[SyntaxKind["StaticKeyword"] = 124] = "StaticKeyword";
+        SyntaxKind[SyntaxKind["YieldKeyword"] = 125] = "YieldKeyword";
         // Contextual keywords
-        SyntaxKind[SyntaxKind["AbstractKeyword"] = 125] = "AbstractKeyword";
-        SyntaxKind[SyntaxKind["AsKeyword"] = 126] = "AsKeyword";
-        SyntaxKind[SyntaxKind["AssertsKeyword"] = 127] = "AssertsKeyword";
-        SyntaxKind[SyntaxKind["AnyKeyword"] = 128] = "AnyKeyword";
-        SyntaxKind[SyntaxKind["AsyncKeyword"] = 129] = "AsyncKeyword";
-        SyntaxKind[SyntaxKind["AwaitKeyword"] = 130] = "AwaitKeyword";
-        SyntaxKind[SyntaxKind["BooleanKeyword"] = 131] = "BooleanKeyword";
-        SyntaxKind[SyntaxKind["ConstructorKeyword"] = 132] = "ConstructorKeyword";
-        SyntaxKind[SyntaxKind["DeclareKeyword"] = 133] = "DeclareKeyword";
-        SyntaxKind[SyntaxKind["GetKeyword"] = 134] = "GetKeyword";
-        SyntaxKind[SyntaxKind["InferKeyword"] = 135] = "InferKeyword";
-        SyntaxKind[SyntaxKind["IntrinsicKeyword"] = 136] = "IntrinsicKeyword";
-        SyntaxKind[SyntaxKind["IsKeyword"] = 137] = "IsKeyword";
-        SyntaxKind[SyntaxKind["KeyOfKeyword"] = 138] = "KeyOfKeyword";
-        SyntaxKind[SyntaxKind["ModuleKeyword"] = 139] = "ModuleKeyword";
-        SyntaxKind[SyntaxKind["NamespaceKeyword"] = 140] = "NamespaceKeyword";
-        SyntaxKind[SyntaxKind["NeverKeyword"] = 141] = "NeverKeyword";
-        SyntaxKind[SyntaxKind["ReadonlyKeyword"] = 142] = "ReadonlyKeyword";
-        SyntaxKind[SyntaxKind["RequireKeyword"] = 143] = "RequireKeyword";
-        SyntaxKind[SyntaxKind["NumberKeyword"] = 144] = "NumberKeyword";
-        SyntaxKind[SyntaxKind["ObjectKeyword"] = 145] = "ObjectKeyword";
-        SyntaxKind[SyntaxKind["SetKeyword"] = 146] = "SetKeyword";
-        SyntaxKind[SyntaxKind["StringKeyword"] = 147] = "StringKeyword";
-        SyntaxKind[SyntaxKind["SymbolKeyword"] = 148] = "SymbolKeyword";
-        SyntaxKind[SyntaxKind["TypeKeyword"] = 149] = "TypeKeyword";
-        SyntaxKind[SyntaxKind["UndefinedKeyword"] = 150] = "UndefinedKeyword";
-        SyntaxKind[SyntaxKind["UniqueKeyword"] = 151] = "UniqueKeyword";
-        SyntaxKind[SyntaxKind["UnknownKeyword"] = 152] = "UnknownKeyword";
-        SyntaxKind[SyntaxKind["FromKeyword"] = 153] = "FromKeyword";
-        SyntaxKind[SyntaxKind["GlobalKeyword"] = 154] = "GlobalKeyword";
-        SyntaxKind[SyntaxKind["BigIntKeyword"] = 155] = "BigIntKeyword";
-        SyntaxKind[SyntaxKind["OverrideKeyword"] = 156] = "OverrideKeyword";
-        SyntaxKind[SyntaxKind["OfKeyword"] = 157] = "OfKeyword";
+        SyntaxKind[SyntaxKind["AbstractKeyword"] = 126] = "AbstractKeyword";
+        SyntaxKind[SyntaxKind["AsKeyword"] = 127] = "AsKeyword";
+        SyntaxKind[SyntaxKind["AssertsKeyword"] = 128] = "AssertsKeyword";
+        SyntaxKind[SyntaxKind["AnyKeyword"] = 129] = "AnyKeyword";
+        SyntaxKind[SyntaxKind["AsyncKeyword"] = 130] = "AsyncKeyword";
+        SyntaxKind[SyntaxKind["AwaitKeyword"] = 131] = "AwaitKeyword";
+        SyntaxKind[SyntaxKind["BooleanKeyword"] = 132] = "BooleanKeyword";
+        SyntaxKind[SyntaxKind["ConstructorKeyword"] = 133] = "ConstructorKeyword";
+        SyntaxKind[SyntaxKind["DeclareKeyword"] = 134] = "DeclareKeyword";
+        SyntaxKind[SyntaxKind["GetKeyword"] = 135] = "GetKeyword";
+        SyntaxKind[SyntaxKind["InferKeyword"] = 136] = "InferKeyword";
+        SyntaxKind[SyntaxKind["IntrinsicKeyword"] = 137] = "IntrinsicKeyword";
+        SyntaxKind[SyntaxKind["IsKeyword"] = 138] = "IsKeyword";
+        SyntaxKind[SyntaxKind["KeyOfKeyword"] = 139] = "KeyOfKeyword";
+        SyntaxKind[SyntaxKind["ModuleKeyword"] = 140] = "ModuleKeyword";
+        SyntaxKind[SyntaxKind["NamespaceKeyword"] = 141] = "NamespaceKeyword";
+        SyntaxKind[SyntaxKind["NeverKeyword"] = 142] = "NeverKeyword";
+        SyntaxKind[SyntaxKind["ReadonlyKeyword"] = 143] = "ReadonlyKeyword";
+        SyntaxKind[SyntaxKind["RequireKeyword"] = 144] = "RequireKeyword";
+        SyntaxKind[SyntaxKind["NumberKeyword"] = 145] = "NumberKeyword";
+        SyntaxKind[SyntaxKind["ObjectKeyword"] = 146] = "ObjectKeyword";
+        SyntaxKind[SyntaxKind["SetKeyword"] = 147] = "SetKeyword";
+        SyntaxKind[SyntaxKind["StringKeyword"] = 148] = "StringKeyword";
+        SyntaxKind[SyntaxKind["SymbolKeyword"] = 149] = "SymbolKeyword";
+        SyntaxKind[SyntaxKind["TypeKeyword"] = 150] = "TypeKeyword";
+        SyntaxKind[SyntaxKind["UndefinedKeyword"] = 151] = "UndefinedKeyword";
+        SyntaxKind[SyntaxKind["UniqueKeyword"] = 152] = "UniqueKeyword";
+        SyntaxKind[SyntaxKind["UnknownKeyword"] = 153] = "UnknownKeyword";
+        SyntaxKind[SyntaxKind["FromKeyword"] = 154] = "FromKeyword";
+        SyntaxKind[SyntaxKind["GlobalKeyword"] = 155] = "GlobalKeyword";
+        SyntaxKind[SyntaxKind["BigIntKeyword"] = 156] = "BigIntKeyword";
+        SyntaxKind[SyntaxKind["OverrideKeyword"] = 157] = "OverrideKeyword";
+        SyntaxKind[SyntaxKind["OfKeyword"] = 158] = "OfKeyword";
         // Parse tree nodes
         // Names
-        SyntaxKind[SyntaxKind["QualifiedName"] = 158] = "QualifiedName";
-        SyntaxKind[SyntaxKind["ComputedPropertyName"] = 159] = "ComputedPropertyName";
+        SyntaxKind[SyntaxKind["QualifiedName"] = 159] = "QualifiedName";
+        SyntaxKind[SyntaxKind["ComputedPropertyName"] = 160] = "ComputedPropertyName";
         // Signature elements
-        SyntaxKind[SyntaxKind["TypeParameter"] = 160] = "TypeParameter";
-        SyntaxKind[SyntaxKind["Parameter"] = 161] = "Parameter";
-        SyntaxKind[SyntaxKind["Decorator"] = 162] = "Decorator";
+        SyntaxKind[SyntaxKind["TypeParameter"] = 161] = "TypeParameter";
+        SyntaxKind[SyntaxKind["Parameter"] = 162] = "Parameter";
+        SyntaxKind[SyntaxKind["Decorator"] = 163] = "Decorator";
         // TypeMember
-        SyntaxKind[SyntaxKind["PropertySignature"] = 163] = "PropertySignature";
-        SyntaxKind[SyntaxKind["PropertyDeclaration"] = 164] = "PropertyDeclaration";
-        SyntaxKind[SyntaxKind["MethodSignature"] = 165] = "MethodSignature";
-        SyntaxKind[SyntaxKind["MethodDeclaration"] = 166] = "MethodDeclaration";
-        SyntaxKind[SyntaxKind["Constructor"] = 167] = "Constructor";
-        SyntaxKind[SyntaxKind["GetAccessor"] = 168] = "GetAccessor";
-        SyntaxKind[SyntaxKind["SetAccessor"] = 169] = "SetAccessor";
-        SyntaxKind[SyntaxKind["CallSignature"] = 170] = "CallSignature";
-        SyntaxKind[SyntaxKind["ConstructSignature"] = 171] = "ConstructSignature";
-        SyntaxKind[SyntaxKind["IndexSignature"] = 172] = "IndexSignature";
+        SyntaxKind[SyntaxKind["PropertySignature"] = 164] = "PropertySignature";
+        SyntaxKind[SyntaxKind["PropertyDeclaration"] = 165] = "PropertyDeclaration";
+        SyntaxKind[SyntaxKind["MethodSignature"] = 166] = "MethodSignature";
+        SyntaxKind[SyntaxKind["MethodDeclaration"] = 167] = "MethodDeclaration";
+        SyntaxKind[SyntaxKind["ClassStaticBlockDeclaration"] = 168] = "ClassStaticBlockDeclaration";
+        SyntaxKind[SyntaxKind["Constructor"] = 169] = "Constructor";
+        SyntaxKind[SyntaxKind["GetAccessor"] = 170] = "GetAccessor";
+        SyntaxKind[SyntaxKind["SetAccessor"] = 171] = "SetAccessor";
+        SyntaxKind[SyntaxKind["CallSignature"] = 172] = "CallSignature";
+        SyntaxKind[SyntaxKind["ConstructSignature"] = 173] = "ConstructSignature";
+        SyntaxKind[SyntaxKind["IndexSignature"] = 174] = "IndexSignature";
         // Type
-        SyntaxKind[SyntaxKind["TypePredicate"] = 173] = "TypePredicate";
-        SyntaxKind[SyntaxKind["TypeReference"] = 174] = "TypeReference";
-        SyntaxKind[SyntaxKind["FunctionType"] = 175] = "FunctionType";
-        SyntaxKind[SyntaxKind["ConstructorType"] = 176] = "ConstructorType";
-        SyntaxKind[SyntaxKind["TypeQuery"] = 177] = "TypeQuery";
-        SyntaxKind[SyntaxKind["TypeLiteral"] = 178] = "TypeLiteral";
-        SyntaxKind[SyntaxKind["ArrayType"] = 179] = "ArrayType";
-        SyntaxKind[SyntaxKind["TupleType"] = 180] = "TupleType";
-        SyntaxKind[SyntaxKind["OptionalType"] = 181] = "OptionalType";
-        SyntaxKind[SyntaxKind["RestType"] = 182] = "RestType";
-        SyntaxKind[SyntaxKind["UnionType"] = 183] = "UnionType";
-        SyntaxKind[SyntaxKind["IntersectionType"] = 184] = "IntersectionType";
-        SyntaxKind[SyntaxKind["ConditionalType"] = 185] = "ConditionalType";
-        SyntaxKind[SyntaxKind["InferType"] = 186] = "InferType";
-        SyntaxKind[SyntaxKind["ParenthesizedType"] = 187] = "ParenthesizedType";
-        SyntaxKind[SyntaxKind["ThisType"] = 188] = "ThisType";
-        SyntaxKind[SyntaxKind["TypeOperator"] = 189] = "TypeOperator";
-        SyntaxKind[SyntaxKind["IndexedAccessType"] = 190] = "IndexedAccessType";
-        SyntaxKind[SyntaxKind["MappedType"] = 191] = "MappedType";
-        SyntaxKind[SyntaxKind["LiteralType"] = 192] = "LiteralType";
-        SyntaxKind[SyntaxKind["NamedTupleMember"] = 193] = "NamedTupleMember";
-        SyntaxKind[SyntaxKind["TemplateLiteralType"] = 194] = "TemplateLiteralType";
-        SyntaxKind[SyntaxKind["TemplateLiteralTypeSpan"] = 195] = "TemplateLiteralTypeSpan";
-        SyntaxKind[SyntaxKind["ImportType"] = 196] = "ImportType";
+        SyntaxKind[SyntaxKind["TypePredicate"] = 175] = "TypePredicate";
+        SyntaxKind[SyntaxKind["TypeReference"] = 176] = "TypeReference";
+        SyntaxKind[SyntaxKind["FunctionType"] = 177] = "FunctionType";
+        SyntaxKind[SyntaxKind["ConstructorType"] = 178] = "ConstructorType";
+        SyntaxKind[SyntaxKind["TypeQuery"] = 179] = "TypeQuery";
+        SyntaxKind[SyntaxKind["TypeLiteral"] = 180] = "TypeLiteral";
+        SyntaxKind[SyntaxKind["ArrayType"] = 181] = "ArrayType";
+        SyntaxKind[SyntaxKind["TupleType"] = 182] = "TupleType";
+        SyntaxKind[SyntaxKind["OptionalType"] = 183] = "OptionalType";
+        SyntaxKind[SyntaxKind["RestType"] = 184] = "RestType";
+        SyntaxKind[SyntaxKind["UnionType"] = 185] = "UnionType";
+        SyntaxKind[SyntaxKind["IntersectionType"] = 186] = "IntersectionType";
+        SyntaxKind[SyntaxKind["ConditionalType"] = 187] = "ConditionalType";
+        SyntaxKind[SyntaxKind["InferType"] = 188] = "InferType";
+        SyntaxKind[SyntaxKind["ParenthesizedType"] = 189] = "ParenthesizedType";
+        SyntaxKind[SyntaxKind["ThisType"] = 190] = "ThisType";
+        SyntaxKind[SyntaxKind["TypeOperator"] = 191] = "TypeOperator";
+        SyntaxKind[SyntaxKind["IndexedAccessType"] = 192] = "IndexedAccessType";
+        SyntaxKind[SyntaxKind["MappedType"] = 193] = "MappedType";
+        SyntaxKind[SyntaxKind["LiteralType"] = 194] = "LiteralType";
+        SyntaxKind[SyntaxKind["NamedTupleMember"] = 195] = "NamedTupleMember";
+        SyntaxKind[SyntaxKind["TemplateLiteralType"] = 196] = "TemplateLiteralType";
+        SyntaxKind[SyntaxKind["TemplateLiteralTypeSpan"] = 197] = "TemplateLiteralTypeSpan";
+        SyntaxKind[SyntaxKind["ImportType"] = 198] = "ImportType";
         // Binding patterns
-        SyntaxKind[SyntaxKind["ObjectBindingPattern"] = 197] = "ObjectBindingPattern";
-        SyntaxKind[SyntaxKind["ArrayBindingPattern"] = 198] = "ArrayBindingPattern";
-        SyntaxKind[SyntaxKind["BindingElement"] = 199] = "BindingElement";
+        SyntaxKind[SyntaxKind["ObjectBindingPattern"] = 199] = "ObjectBindingPattern";
+        SyntaxKind[SyntaxKind["ArrayBindingPattern"] = 200] = "ArrayBindingPattern";
+        SyntaxKind[SyntaxKind["BindingElement"] = 201] = "BindingElement";
         // Expression
-        SyntaxKind[SyntaxKind["ArrayLiteralExpression"] = 200] = "ArrayLiteralExpression";
-        SyntaxKind[SyntaxKind["ObjectLiteralExpression"] = 201] = "ObjectLiteralExpression";
-        SyntaxKind[SyntaxKind["PropertyAccessExpression"] = 202] = "PropertyAccessExpression";
-        SyntaxKind[SyntaxKind["ElementAccessExpression"] = 203] = "ElementAccessExpression";
-        SyntaxKind[SyntaxKind["CallExpression"] = 204] = "CallExpression";
-        SyntaxKind[SyntaxKind["NewExpression"] = 205] = "NewExpression";
-        SyntaxKind[SyntaxKind["TaggedTemplateExpression"] = 206] = "TaggedTemplateExpression";
-        SyntaxKind[SyntaxKind["TypeAssertionExpression"] = 207] = "TypeAssertionExpression";
-        SyntaxKind[SyntaxKind["ParenthesizedExpression"] = 208] = "ParenthesizedExpression";
-        SyntaxKind[SyntaxKind["FunctionExpression"] = 209] = "FunctionExpression";
-        SyntaxKind[SyntaxKind["ArrowFunction"] = 210] = "ArrowFunction";
-        SyntaxKind[SyntaxKind["DeleteExpression"] = 211] = "DeleteExpression";
-        SyntaxKind[SyntaxKind["TypeOfExpression"] = 212] = "TypeOfExpression";
-        SyntaxKind[SyntaxKind["VoidExpression"] = 213] = "VoidExpression";
-        SyntaxKind[SyntaxKind["AwaitExpression"] = 214] = "AwaitExpression";
-        SyntaxKind[SyntaxKind["PrefixUnaryExpression"] = 215] = "PrefixUnaryExpression";
-        SyntaxKind[SyntaxKind["PostfixUnaryExpression"] = 216] = "PostfixUnaryExpression";
-        SyntaxKind[SyntaxKind["BinaryExpression"] = 217] = "BinaryExpression";
-        SyntaxKind[SyntaxKind["ConditionalExpression"] = 218] = "ConditionalExpression";
-        SyntaxKind[SyntaxKind["TemplateExpression"] = 219] = "TemplateExpression";
-        SyntaxKind[SyntaxKind["YieldExpression"] = 220] = "YieldExpression";
-        SyntaxKind[SyntaxKind["SpreadElement"] = 221] = "SpreadElement";
-        SyntaxKind[SyntaxKind["ClassExpression"] = 222] = "ClassExpression";
-        SyntaxKind[SyntaxKind["OmittedExpression"] = 223] = "OmittedExpression";
-        SyntaxKind[SyntaxKind["ExpressionWithTypeArguments"] = 224] = "ExpressionWithTypeArguments";
-        SyntaxKind[SyntaxKind["AsExpression"] = 225] = "AsExpression";
-        SyntaxKind[SyntaxKind["NonNullExpression"] = 226] = "NonNullExpression";
-        SyntaxKind[SyntaxKind["MetaProperty"] = 227] = "MetaProperty";
-        SyntaxKind[SyntaxKind["SyntheticExpression"] = 228] = "SyntheticExpression";
+        SyntaxKind[SyntaxKind["ArrayLiteralExpression"] = 202] = "ArrayLiteralExpression";
+        SyntaxKind[SyntaxKind["ObjectLiteralExpression"] = 203] = "ObjectLiteralExpression";
+        SyntaxKind[SyntaxKind["PropertyAccessExpression"] = 204] = "PropertyAccessExpression";
+        SyntaxKind[SyntaxKind["ElementAccessExpression"] = 205] = "ElementAccessExpression";
+        SyntaxKind[SyntaxKind["CallExpression"] = 206] = "CallExpression";
+        SyntaxKind[SyntaxKind["NewExpression"] = 207] = "NewExpression";
+        SyntaxKind[SyntaxKind["TaggedTemplateExpression"] = 208] = "TaggedTemplateExpression";
+        SyntaxKind[SyntaxKind["TypeAssertionExpression"] = 209] = "TypeAssertionExpression";
+        SyntaxKind[SyntaxKind["ParenthesizedExpression"] = 210] = "ParenthesizedExpression";
+        SyntaxKind[SyntaxKind["FunctionExpression"] = 211] = "FunctionExpression";
+        SyntaxKind[SyntaxKind["ArrowFunction"] = 212] = "ArrowFunction";
+        SyntaxKind[SyntaxKind["DeleteExpression"] = 213] = "DeleteExpression";
+        SyntaxKind[SyntaxKind["TypeOfExpression"] = 214] = "TypeOfExpression";
+        SyntaxKind[SyntaxKind["VoidExpression"] = 215] = "VoidExpression";
+        SyntaxKind[SyntaxKind["AwaitExpression"] = 216] = "AwaitExpression";
+        SyntaxKind[SyntaxKind["PrefixUnaryExpression"] = 217] = "PrefixUnaryExpression";
+        SyntaxKind[SyntaxKind["PostfixUnaryExpression"] = 218] = "PostfixUnaryExpression";
+        SyntaxKind[SyntaxKind["BinaryExpression"] = 219] = "BinaryExpression";
+        SyntaxKind[SyntaxKind["ConditionalExpression"] = 220] = "ConditionalExpression";
+        SyntaxKind[SyntaxKind["TemplateExpression"] = 221] = "TemplateExpression";
+        SyntaxKind[SyntaxKind["YieldExpression"] = 222] = "YieldExpression";
+        SyntaxKind[SyntaxKind["SpreadElement"] = 223] = "SpreadElement";
+        SyntaxKind[SyntaxKind["ClassExpression"] = 224] = "ClassExpression";
+        SyntaxKind[SyntaxKind["OmittedExpression"] = 225] = "OmittedExpression";
+        SyntaxKind[SyntaxKind["ExpressionWithTypeArguments"] = 226] = "ExpressionWithTypeArguments";
+        SyntaxKind[SyntaxKind["AsExpression"] = 227] = "AsExpression";
+        SyntaxKind[SyntaxKind["NonNullExpression"] = 228] = "NonNullExpression";
+        SyntaxKind[SyntaxKind["MetaProperty"] = 229] = "MetaProperty";
+        SyntaxKind[SyntaxKind["SyntheticExpression"] = 230] = "SyntheticExpression";
         // Misc
-        SyntaxKind[SyntaxKind["TemplateSpan"] = 229] = "TemplateSpan";
-        SyntaxKind[SyntaxKind["SemicolonClassElement"] = 230] = "SemicolonClassElement";
+        SyntaxKind[SyntaxKind["TemplateSpan"] = 231] = "TemplateSpan";
+        SyntaxKind[SyntaxKind["SemicolonClassElement"] = 232] = "SemicolonClassElement";
         // Element
-        SyntaxKind[SyntaxKind["Block"] = 231] = "Block";
-        SyntaxKind[SyntaxKind["EmptyStatement"] = 232] = "EmptyStatement";
-        SyntaxKind[SyntaxKind["VariableStatement"] = 233] = "VariableStatement";
-        SyntaxKind[SyntaxKind["ExpressionStatement"] = 234] = "ExpressionStatement";
-        SyntaxKind[SyntaxKind["IfStatement"] = 235] = "IfStatement";
-        SyntaxKind[SyntaxKind["DoStatement"] = 236] = "DoStatement";
-        SyntaxKind[SyntaxKind["WhileStatement"] = 237] = "WhileStatement";
-        SyntaxKind[SyntaxKind["ForStatement"] = 238] = "ForStatement";
-        SyntaxKind[SyntaxKind["ForInStatement"] = 239] = "ForInStatement";
-        SyntaxKind[SyntaxKind["ForOfStatement"] = 240] = "ForOfStatement";
-        SyntaxKind[SyntaxKind["ContinueStatement"] = 241] = "ContinueStatement";
-        SyntaxKind[SyntaxKind["BreakStatement"] = 242] = "BreakStatement";
-        SyntaxKind[SyntaxKind["ReturnStatement"] = 243] = "ReturnStatement";
-        SyntaxKind[SyntaxKind["WithStatement"] = 244] = "WithStatement";
-        SyntaxKind[SyntaxKind["SwitchStatement"] = 245] = "SwitchStatement";
-        SyntaxKind[SyntaxKind["LabeledStatement"] = 246] = "LabeledStatement";
-        SyntaxKind[SyntaxKind["ThrowStatement"] = 247] = "ThrowStatement";
-        SyntaxKind[SyntaxKind["TryStatement"] = 248] = "TryStatement";
-        SyntaxKind[SyntaxKind["DebuggerStatement"] = 249] = "DebuggerStatement";
-        SyntaxKind[SyntaxKind["VariableDeclaration"] = 250] = "VariableDeclaration";
-        SyntaxKind[SyntaxKind["VariableDeclarationList"] = 251] = "VariableDeclarationList";
-        SyntaxKind[SyntaxKind["FunctionDeclaration"] = 252] = "FunctionDeclaration";
-        SyntaxKind[SyntaxKind["ClassDeclaration"] = 253] = "ClassDeclaration";
-        SyntaxKind[SyntaxKind["InterfaceDeclaration"] = 254] = "InterfaceDeclaration";
-        SyntaxKind[SyntaxKind["TypeAliasDeclaration"] = 255] = "TypeAliasDeclaration";
-        SyntaxKind[SyntaxKind["EnumDeclaration"] = 256] = "EnumDeclaration";
-        SyntaxKind[SyntaxKind["ModuleDeclaration"] = 257] = "ModuleDeclaration";
-        SyntaxKind[SyntaxKind["ModuleBlock"] = 258] = "ModuleBlock";
-        SyntaxKind[SyntaxKind["CaseBlock"] = 259] = "CaseBlock";
-        SyntaxKind[SyntaxKind["NamespaceExportDeclaration"] = 260] = "NamespaceExportDeclaration";
-        SyntaxKind[SyntaxKind["ImportEqualsDeclaration"] = 261] = "ImportEqualsDeclaration";
-        SyntaxKind[SyntaxKind["ImportDeclaration"] = 262] = "ImportDeclaration";
-        SyntaxKind[SyntaxKind["ImportClause"] = 263] = "ImportClause";
-        SyntaxKind[SyntaxKind["NamespaceImport"] = 264] = "NamespaceImport";
-        SyntaxKind[SyntaxKind["NamedImports"] = 265] = "NamedImports";
-        SyntaxKind[SyntaxKind["ImportSpecifier"] = 266] = "ImportSpecifier";
-        SyntaxKind[SyntaxKind["ExportAssignment"] = 267] = "ExportAssignment";
-        SyntaxKind[SyntaxKind["ExportDeclaration"] = 268] = "ExportDeclaration";
-        SyntaxKind[SyntaxKind["NamedExports"] = 269] = "NamedExports";
-        SyntaxKind[SyntaxKind["NamespaceExport"] = 270] = "NamespaceExport";
-        SyntaxKind[SyntaxKind["ExportSpecifier"] = 271] = "ExportSpecifier";
-        SyntaxKind[SyntaxKind["MissingDeclaration"] = 272] = "MissingDeclaration";
+        SyntaxKind[SyntaxKind["Block"] = 233] = "Block";
+        SyntaxKind[SyntaxKind["EmptyStatement"] = 234] = "EmptyStatement";
+        SyntaxKind[SyntaxKind["VariableStatement"] = 235] = "VariableStatement";
+        SyntaxKind[SyntaxKind["ExpressionStatement"] = 236] = "ExpressionStatement";
+        SyntaxKind[SyntaxKind["IfStatement"] = 237] = "IfStatement";
+        SyntaxKind[SyntaxKind["DoStatement"] = 238] = "DoStatement";
+        SyntaxKind[SyntaxKind["WhileStatement"] = 239] = "WhileStatement";
+        SyntaxKind[SyntaxKind["ForStatement"] = 240] = "ForStatement";
+        SyntaxKind[SyntaxKind["ForInStatement"] = 241] = "ForInStatement";
+        SyntaxKind[SyntaxKind["ForOfStatement"] = 242] = "ForOfStatement";
+        SyntaxKind[SyntaxKind["ContinueStatement"] = 243] = "ContinueStatement";
+        SyntaxKind[SyntaxKind["BreakStatement"] = 244] = "BreakStatement";
+        SyntaxKind[SyntaxKind["ReturnStatement"] = 245] = "ReturnStatement";
+        SyntaxKind[SyntaxKind["WithStatement"] = 246] = "WithStatement";
+        SyntaxKind[SyntaxKind["SwitchStatement"] = 247] = "SwitchStatement";
+        SyntaxKind[SyntaxKind["LabeledStatement"] = 248] = "LabeledStatement";
+        SyntaxKind[SyntaxKind["ThrowStatement"] = 249] = "ThrowStatement";
+        SyntaxKind[SyntaxKind["TryStatement"] = 250] = "TryStatement";
+        SyntaxKind[SyntaxKind["DebuggerStatement"] = 251] = "DebuggerStatement";
+        SyntaxKind[SyntaxKind["VariableDeclaration"] = 252] = "VariableDeclaration";
+        SyntaxKind[SyntaxKind["VariableDeclarationList"] = 253] = "VariableDeclarationList";
+        SyntaxKind[SyntaxKind["FunctionDeclaration"] = 254] = "FunctionDeclaration";
+        SyntaxKind[SyntaxKind["ClassDeclaration"] = 255] = "ClassDeclaration";
+        SyntaxKind[SyntaxKind["InterfaceDeclaration"] = 256] = "InterfaceDeclaration";
+        SyntaxKind[SyntaxKind["TypeAliasDeclaration"] = 257] = "TypeAliasDeclaration";
+        SyntaxKind[SyntaxKind["EnumDeclaration"] = 258] = "EnumDeclaration";
+        SyntaxKind[SyntaxKind["ModuleDeclaration"] = 259] = "ModuleDeclaration";
+        SyntaxKind[SyntaxKind["ModuleBlock"] = 260] = "ModuleBlock";
+        SyntaxKind[SyntaxKind["CaseBlock"] = 261] = "CaseBlock";
+        SyntaxKind[SyntaxKind["NamespaceExportDeclaration"] = 262] = "NamespaceExportDeclaration";
+        SyntaxKind[SyntaxKind["ImportEqualsDeclaration"] = 263] = "ImportEqualsDeclaration";
+        SyntaxKind[SyntaxKind["ImportDeclaration"] = 264] = "ImportDeclaration";
+        SyntaxKind[SyntaxKind["ImportClause"] = 265] = "ImportClause";
+        SyntaxKind[SyntaxKind["NamespaceImport"] = 266] = "NamespaceImport";
+        SyntaxKind[SyntaxKind["NamedImports"] = 267] = "NamedImports";
+        SyntaxKind[SyntaxKind["ImportSpecifier"] = 268] = "ImportSpecifier";
+        SyntaxKind[SyntaxKind["ExportAssignment"] = 269] = "ExportAssignment";
+        SyntaxKind[SyntaxKind["ExportDeclaration"] = 270] = "ExportDeclaration";
+        SyntaxKind[SyntaxKind["NamedExports"] = 271] = "NamedExports";
+        SyntaxKind[SyntaxKind["NamespaceExport"] = 272] = "NamespaceExport";
+        SyntaxKind[SyntaxKind["ExportSpecifier"] = 273] = "ExportSpecifier";
+        SyntaxKind[SyntaxKind["MissingDeclaration"] = 274] = "MissingDeclaration";
         // Module references
-        SyntaxKind[SyntaxKind["ExternalModuleReference"] = 273] = "ExternalModuleReference";
+        SyntaxKind[SyntaxKind["ExternalModuleReference"] = 275] = "ExternalModuleReference";
         // JSX
-        SyntaxKind[SyntaxKind["JsxElement"] = 274] = "JsxElement";
-        SyntaxKind[SyntaxKind["JsxSelfClosingElement"] = 275] = "JsxSelfClosingElement";
-        SyntaxKind[SyntaxKind["JsxOpeningElement"] = 276] = "JsxOpeningElement";
-        SyntaxKind[SyntaxKind["JsxClosingElement"] = 277] = "JsxClosingElement";
-        SyntaxKind[SyntaxKind["JsxFragment"] = 278] = "JsxFragment";
-        SyntaxKind[SyntaxKind["JsxOpeningFragment"] = 279] = "JsxOpeningFragment";
-        SyntaxKind[SyntaxKind["JsxClosingFragment"] = 280] = "JsxClosingFragment";
-        SyntaxKind[SyntaxKind["JsxAttribute"] = 281] = "JsxAttribute";
-        SyntaxKind[SyntaxKind["JsxAttributes"] = 282] = "JsxAttributes";
-        SyntaxKind[SyntaxKind["JsxSpreadAttribute"] = 283] = "JsxSpreadAttribute";
-        SyntaxKind[SyntaxKind["JsxExpression"] = 284] = "JsxExpression";
+        SyntaxKind[SyntaxKind["JsxElement"] = 276] = "JsxElement";
+        SyntaxKind[SyntaxKind["JsxSelfClosingElement"] = 277] = "JsxSelfClosingElement";
+        SyntaxKind[SyntaxKind["JsxOpeningElement"] = 278] = "JsxOpeningElement";
+        SyntaxKind[SyntaxKind["JsxClosingElement"] = 279] = "JsxClosingElement";
+        SyntaxKind[SyntaxKind["JsxFragment"] = 280] = "JsxFragment";
+        SyntaxKind[SyntaxKind["JsxOpeningFragment"] = 281] = "JsxOpeningFragment";
+        SyntaxKind[SyntaxKind["JsxClosingFragment"] = 282] = "JsxClosingFragment";
+        SyntaxKind[SyntaxKind["JsxAttribute"] = 283] = "JsxAttribute";
+        SyntaxKind[SyntaxKind["JsxAttributes"] = 284] = "JsxAttributes";
+        SyntaxKind[SyntaxKind["JsxSpreadAttribute"] = 285] = "JsxSpreadAttribute";
+        SyntaxKind[SyntaxKind["JsxExpression"] = 286] = "JsxExpression";
         // Clauses
-        SyntaxKind[SyntaxKind["CaseClause"] = 285] = "CaseClause";
-        SyntaxKind[SyntaxKind["DefaultClause"] = 286] = "DefaultClause";
-        SyntaxKind[SyntaxKind["HeritageClause"] = 287] = "HeritageClause";
-        SyntaxKind[SyntaxKind["CatchClause"] = 288] = "CatchClause";
+        SyntaxKind[SyntaxKind["CaseClause"] = 287] = "CaseClause";
+        SyntaxKind[SyntaxKind["DefaultClause"] = 288] = "DefaultClause";
+        SyntaxKind[SyntaxKind["HeritageClause"] = 289] = "HeritageClause";
+        SyntaxKind[SyntaxKind["CatchClause"] = 290] = "CatchClause";
         // Property assignments
-        SyntaxKind[SyntaxKind["PropertyAssignment"] = 289] = "PropertyAssignment";
-        SyntaxKind[SyntaxKind["ShorthandPropertyAssignment"] = 290] = "ShorthandPropertyAssignment";
-        SyntaxKind[SyntaxKind["SpreadAssignment"] = 291] = "SpreadAssignment";
+        SyntaxKind[SyntaxKind["PropertyAssignment"] = 291] = "PropertyAssignment";
+        SyntaxKind[SyntaxKind["ShorthandPropertyAssignment"] = 292] = "ShorthandPropertyAssignment";
+        SyntaxKind[SyntaxKind["SpreadAssignment"] = 293] = "SpreadAssignment";
         // Enum
-        SyntaxKind[SyntaxKind["EnumMember"] = 292] = "EnumMember";
+        SyntaxKind[SyntaxKind["EnumMember"] = 294] = "EnumMember";
         // Unparsed
-        SyntaxKind[SyntaxKind["UnparsedPrologue"] = 293] = "UnparsedPrologue";
-        SyntaxKind[SyntaxKind["UnparsedPrepend"] = 294] = "UnparsedPrepend";
-        SyntaxKind[SyntaxKind["UnparsedText"] = 295] = "UnparsedText";
-        SyntaxKind[SyntaxKind["UnparsedInternalText"] = 296] = "UnparsedInternalText";
-        SyntaxKind[SyntaxKind["UnparsedSyntheticReference"] = 297] = "UnparsedSyntheticReference";
+        SyntaxKind[SyntaxKind["UnparsedPrologue"] = 295] = "UnparsedPrologue";
+        SyntaxKind[SyntaxKind["UnparsedPrepend"] = 296] = "UnparsedPrepend";
+        SyntaxKind[SyntaxKind["UnparsedText"] = 297] = "UnparsedText";
+        SyntaxKind[SyntaxKind["UnparsedInternalText"] = 298] = "UnparsedInternalText";
+        SyntaxKind[SyntaxKind["UnparsedSyntheticReference"] = 299] = "UnparsedSyntheticReference";
         // Top-level nodes
-        SyntaxKind[SyntaxKind["SourceFile"] = 298] = "SourceFile";
-        SyntaxKind[SyntaxKind["Bundle"] = 299] = "Bundle";
-        SyntaxKind[SyntaxKind["UnparsedSource"] = 300] = "UnparsedSource";
-        SyntaxKind[SyntaxKind["InputFiles"] = 301] = "InputFiles";
+        SyntaxKind[SyntaxKind["SourceFile"] = 300] = "SourceFile";
+        SyntaxKind[SyntaxKind["Bundle"] = 301] = "Bundle";
+        SyntaxKind[SyntaxKind["UnparsedSource"] = 302] = "UnparsedSource";
+        SyntaxKind[SyntaxKind["InputFiles"] = 303] = "InputFiles";
         // JSDoc nodes
-        SyntaxKind[SyntaxKind["JSDocTypeExpression"] = 302] = "JSDocTypeExpression";
-        SyntaxKind[SyntaxKind["JSDocNameReference"] = 303] = "JSDocNameReference";
-        SyntaxKind[SyntaxKind["JSDocAllType"] = 304] = "JSDocAllType";
-        SyntaxKind[SyntaxKind["JSDocUnknownType"] = 305] = "JSDocUnknownType";
-        SyntaxKind[SyntaxKind["JSDocNullableType"] = 306] = "JSDocNullableType";
-        SyntaxKind[SyntaxKind["JSDocNonNullableType"] = 307] = "JSDocNonNullableType";
-        SyntaxKind[SyntaxKind["JSDocOptionalType"] = 308] = "JSDocOptionalType";
-        SyntaxKind[SyntaxKind["JSDocFunctionType"] = 309] = "JSDocFunctionType";
-        SyntaxKind[SyntaxKind["JSDocVariadicType"] = 310] = "JSDocVariadicType";
-        SyntaxKind[SyntaxKind["JSDocNamepathType"] = 311] = "JSDocNamepathType";
-        SyntaxKind[SyntaxKind["JSDocComment"] = 312] = "JSDocComment";
-        SyntaxKind[SyntaxKind["JSDocText"] = 313] = "JSDocText";
-        SyntaxKind[SyntaxKind["JSDocTypeLiteral"] = 314] = "JSDocTypeLiteral";
-        SyntaxKind[SyntaxKind["JSDocSignature"] = 315] = "JSDocSignature";
-        SyntaxKind[SyntaxKind["JSDocLink"] = 316] = "JSDocLink";
-        SyntaxKind[SyntaxKind["JSDocTag"] = 317] = "JSDocTag";
-        SyntaxKind[SyntaxKind["JSDocAugmentsTag"] = 318] = "JSDocAugmentsTag";
-        SyntaxKind[SyntaxKind["JSDocImplementsTag"] = 319] = "JSDocImplementsTag";
-        SyntaxKind[SyntaxKind["JSDocAuthorTag"] = 320] = "JSDocAuthorTag";
-        SyntaxKind[SyntaxKind["JSDocDeprecatedTag"] = 321] = "JSDocDeprecatedTag";
-        SyntaxKind[SyntaxKind["JSDocClassTag"] = 322] = "JSDocClassTag";
-        SyntaxKind[SyntaxKind["JSDocPublicTag"] = 323] = "JSDocPublicTag";
-        SyntaxKind[SyntaxKind["JSDocPrivateTag"] = 324] = "JSDocPrivateTag";
-        SyntaxKind[SyntaxKind["JSDocProtectedTag"] = 325] = "JSDocProtectedTag";
-        SyntaxKind[SyntaxKind["JSDocReadonlyTag"] = 326] = "JSDocReadonlyTag";
-        SyntaxKind[SyntaxKind["JSDocOverrideTag"] = 327] = "JSDocOverrideTag";
-        SyntaxKind[SyntaxKind["JSDocCallbackTag"] = 328] = "JSDocCallbackTag";
-        SyntaxKind[SyntaxKind["JSDocEnumTag"] = 329] = "JSDocEnumTag";
-        SyntaxKind[SyntaxKind["JSDocParameterTag"] = 330] = "JSDocParameterTag";
-        SyntaxKind[SyntaxKind["JSDocReturnTag"] = 331] = "JSDocReturnTag";
-        SyntaxKind[SyntaxKind["JSDocThisTag"] = 332] = "JSDocThisTag";
-        SyntaxKind[SyntaxKind["JSDocTypeTag"] = 333] = "JSDocTypeTag";
-        SyntaxKind[SyntaxKind["JSDocTemplateTag"] = 334] = "JSDocTemplateTag";
-        SyntaxKind[SyntaxKind["JSDocTypedefTag"] = 335] = "JSDocTypedefTag";
-        SyntaxKind[SyntaxKind["JSDocSeeTag"] = 336] = "JSDocSeeTag";
-        SyntaxKind[SyntaxKind["JSDocPropertyTag"] = 337] = "JSDocPropertyTag";
+        SyntaxKind[SyntaxKind["JSDocTypeExpression"] = 304] = "JSDocTypeExpression";
+        SyntaxKind[SyntaxKind["JSDocNameReference"] = 305] = "JSDocNameReference";
+        SyntaxKind[SyntaxKind["JSDocMemberName"] = 306] = "JSDocMemberName";
+        SyntaxKind[SyntaxKind["JSDocAllType"] = 307] = "JSDocAllType";
+        SyntaxKind[SyntaxKind["JSDocUnknownType"] = 308] = "JSDocUnknownType";
+        SyntaxKind[SyntaxKind["JSDocNullableType"] = 309] = "JSDocNullableType";
+        SyntaxKind[SyntaxKind["JSDocNonNullableType"] = 310] = "JSDocNonNullableType";
+        SyntaxKind[SyntaxKind["JSDocOptionalType"] = 311] = "JSDocOptionalType";
+        SyntaxKind[SyntaxKind["JSDocFunctionType"] = 312] = "JSDocFunctionType";
+        SyntaxKind[SyntaxKind["JSDocVariadicType"] = 313] = "JSDocVariadicType";
+        SyntaxKind[SyntaxKind["JSDocNamepathType"] = 314] = "JSDocNamepathType";
+        SyntaxKind[SyntaxKind["JSDocComment"] = 315] = "JSDocComment";
+        SyntaxKind[SyntaxKind["JSDocText"] = 316] = "JSDocText";
+        SyntaxKind[SyntaxKind["JSDocTypeLiteral"] = 317] = "JSDocTypeLiteral";
+        SyntaxKind[SyntaxKind["JSDocSignature"] = 318] = "JSDocSignature";
+        SyntaxKind[SyntaxKind["JSDocLink"] = 319] = "JSDocLink";
+        SyntaxKind[SyntaxKind["JSDocLinkCode"] = 320] = "JSDocLinkCode";
+        SyntaxKind[SyntaxKind["JSDocLinkPlain"] = 321] = "JSDocLinkPlain";
+        SyntaxKind[SyntaxKind["JSDocTag"] = 322] = "JSDocTag";
+        SyntaxKind[SyntaxKind["JSDocAugmentsTag"] = 323] = "JSDocAugmentsTag";
+        SyntaxKind[SyntaxKind["JSDocImplementsTag"] = 324] = "JSDocImplementsTag";
+        SyntaxKind[SyntaxKind["JSDocAuthorTag"] = 325] = "JSDocAuthorTag";
+        SyntaxKind[SyntaxKind["JSDocDeprecatedTag"] = 326] = "JSDocDeprecatedTag";
+        SyntaxKind[SyntaxKind["JSDocClassTag"] = 327] = "JSDocClassTag";
+        SyntaxKind[SyntaxKind["JSDocPublicTag"] = 328] = "JSDocPublicTag";
+        SyntaxKind[SyntaxKind["JSDocPrivateTag"] = 329] = "JSDocPrivateTag";
+        SyntaxKind[SyntaxKind["JSDocProtectedTag"] = 330] = "JSDocProtectedTag";
+        SyntaxKind[SyntaxKind["JSDocReadonlyTag"] = 331] = "JSDocReadonlyTag";
+        SyntaxKind[SyntaxKind["JSDocOverrideTag"] = 332] = "JSDocOverrideTag";
+        SyntaxKind[SyntaxKind["JSDocCallbackTag"] = 333] = "JSDocCallbackTag";
+        SyntaxKind[SyntaxKind["JSDocEnumTag"] = 334] = "JSDocEnumTag";
+        SyntaxKind[SyntaxKind["JSDocParameterTag"] = 335] = "JSDocParameterTag";
+        SyntaxKind[SyntaxKind["JSDocReturnTag"] = 336] = "JSDocReturnTag";
+        SyntaxKind[SyntaxKind["JSDocThisTag"] = 337] = "JSDocThisTag";
+        SyntaxKind[SyntaxKind["JSDocTypeTag"] = 338] = "JSDocTypeTag";
+        SyntaxKind[SyntaxKind["JSDocTemplateTag"] = 339] = "JSDocTemplateTag";
+        SyntaxKind[SyntaxKind["JSDocTypedefTag"] = 340] = "JSDocTypedefTag";
+        SyntaxKind[SyntaxKind["JSDocSeeTag"] = 341] = "JSDocSeeTag";
+        SyntaxKind[SyntaxKind["JSDocPropertyTag"] = 342] = "JSDocPropertyTag";
         // Synthesized list
-        SyntaxKind[SyntaxKind["SyntaxList"] = 338] = "SyntaxList";
+        SyntaxKind[SyntaxKind["SyntaxList"] = 343] = "SyntaxList";
         // Transformation nodes
-        SyntaxKind[SyntaxKind["NotEmittedStatement"] = 339] = "NotEmittedStatement";
-        SyntaxKind[SyntaxKind["PartiallyEmittedExpression"] = 340] = "PartiallyEmittedExpression";
-        SyntaxKind[SyntaxKind["CommaListExpression"] = 341] = "CommaListExpression";
-        SyntaxKind[SyntaxKind["MergeDeclarationMarker"] = 342] = "MergeDeclarationMarker";
-        SyntaxKind[SyntaxKind["EndOfDeclarationMarker"] = 343] = "EndOfDeclarationMarker";
-        SyntaxKind[SyntaxKind["SyntheticReferenceExpression"] = 344] = "SyntheticReferenceExpression";
+        SyntaxKind[SyntaxKind["NotEmittedStatement"] = 344] = "NotEmittedStatement";
+        SyntaxKind[SyntaxKind["PartiallyEmittedExpression"] = 345] = "PartiallyEmittedExpression";
+        SyntaxKind[SyntaxKind["CommaListExpression"] = 346] = "CommaListExpression";
+        SyntaxKind[SyntaxKind["MergeDeclarationMarker"] = 347] = "MergeDeclarationMarker";
+        SyntaxKind[SyntaxKind["EndOfDeclarationMarker"] = 348] = "EndOfDeclarationMarker";
+        SyntaxKind[SyntaxKind["SyntheticReferenceExpression"] = 349] = "SyntheticReferenceExpression";
         // Enum value count
-        SyntaxKind[SyntaxKind["Count"] = 345] = "Count";
+        SyntaxKind[SyntaxKind["Count"] = 350] = "Count";
         // Markers
-        SyntaxKind[SyntaxKind["FirstAssignment"] = 62] = "FirstAssignment";
-        SyntaxKind[SyntaxKind["LastAssignment"] = 77] = "LastAssignment";
-        SyntaxKind[SyntaxKind["FirstCompoundAssignment"] = 63] = "FirstCompoundAssignment";
-        SyntaxKind[SyntaxKind["LastCompoundAssignment"] = 77] = "LastCompoundAssignment";
-        SyntaxKind[SyntaxKind["FirstReservedWord"] = 80] = "FirstReservedWord";
-        SyntaxKind[SyntaxKind["LastReservedWord"] = 115] = "LastReservedWord";
-        SyntaxKind[SyntaxKind["FirstKeyword"] = 80] = "FirstKeyword";
-        SyntaxKind[SyntaxKind["LastKeyword"] = 157] = "LastKeyword";
-        SyntaxKind[SyntaxKind["FirstFutureReservedWord"] = 116] = "FirstFutureReservedWord";
-        SyntaxKind[SyntaxKind["LastFutureReservedWord"] = 124] = "LastFutureReservedWord";
-        SyntaxKind[SyntaxKind["FirstTypeNode"] = 173] = "FirstTypeNode";
-        SyntaxKind[SyntaxKind["LastTypeNode"] = 196] = "LastTypeNode";
+        SyntaxKind[SyntaxKind["FirstAssignment"] = 63] = "FirstAssignment";
+        SyntaxKind[SyntaxKind["LastAssignment"] = 78] = "LastAssignment";
+        SyntaxKind[SyntaxKind["FirstCompoundAssignment"] = 64] = "FirstCompoundAssignment";
+        SyntaxKind[SyntaxKind["LastCompoundAssignment"] = 78] = "LastCompoundAssignment";
+        SyntaxKind[SyntaxKind["FirstReservedWord"] = 81] = "FirstReservedWord";
+        SyntaxKind[SyntaxKind["LastReservedWord"] = 116] = "LastReservedWord";
+        SyntaxKind[SyntaxKind["FirstKeyword"] = 81] = "FirstKeyword";
+        SyntaxKind[SyntaxKind["LastKeyword"] = 158] = "LastKeyword";
+        SyntaxKind[SyntaxKind["FirstFutureReservedWord"] = 117] = "FirstFutureReservedWord";
+        SyntaxKind[SyntaxKind["LastFutureReservedWord"] = 125] = "LastFutureReservedWord";
+        SyntaxKind[SyntaxKind["FirstTypeNode"] = 175] = "FirstTypeNode";
+        SyntaxKind[SyntaxKind["LastTypeNode"] = 198] = "LastTypeNode";
         SyntaxKind[SyntaxKind["FirstPunctuation"] = 18] = "FirstPunctuation";
-        SyntaxKind[SyntaxKind["LastPunctuation"] = 77] = "LastPunctuation";
+        SyntaxKind[SyntaxKind["LastPunctuation"] = 78] = "LastPunctuation";
         SyntaxKind[SyntaxKind["FirstToken"] = 0] = "FirstToken";
-        SyntaxKind[SyntaxKind["LastToken"] = 157] = "LastToken";
+        SyntaxKind[SyntaxKind["LastToken"] = 158] = "LastToken";
         SyntaxKind[SyntaxKind["FirstTriviaToken"] = 2] = "FirstTriviaToken";
         SyntaxKind[SyntaxKind["LastTriviaToken"] = 7] = "LastTriviaToken";
         SyntaxKind[SyntaxKind["FirstLiteralToken"] = 8] = "FirstLiteralToken";
@@ -4340,16 +4417,16 @@
         SyntaxKind[SyntaxKind["FirstTemplateToken"] = 14] = "FirstTemplateToken";
         SyntaxKind[SyntaxKind["LastTemplateToken"] = 17] = "LastTemplateToken";
         SyntaxKind[SyntaxKind["FirstBinaryOperator"] = 29] = "FirstBinaryOperator";
-        SyntaxKind[SyntaxKind["LastBinaryOperator"] = 77] = "LastBinaryOperator";
-        SyntaxKind[SyntaxKind["FirstStatement"] = 233] = "FirstStatement";
-        SyntaxKind[SyntaxKind["LastStatement"] = 249] = "LastStatement";
-        SyntaxKind[SyntaxKind["FirstNode"] = 158] = "FirstNode";
-        SyntaxKind[SyntaxKind["FirstJSDocNode"] = 302] = "FirstJSDocNode";
-        SyntaxKind[SyntaxKind["LastJSDocNode"] = 337] = "LastJSDocNode";
-        SyntaxKind[SyntaxKind["FirstJSDocTagNode"] = 317] = "FirstJSDocTagNode";
-        SyntaxKind[SyntaxKind["LastJSDocTagNode"] = 337] = "LastJSDocTagNode";
-        /* @internal */ SyntaxKind[SyntaxKind["FirstContextualKeyword"] = 125] = "FirstContextualKeyword";
-        /* @internal */ SyntaxKind[SyntaxKind["LastContextualKeyword"] = 157] = "LastContextualKeyword";
+        SyntaxKind[SyntaxKind["LastBinaryOperator"] = 78] = "LastBinaryOperator";
+        SyntaxKind[SyntaxKind["FirstStatement"] = 235] = "FirstStatement";
+        SyntaxKind[SyntaxKind["LastStatement"] = 251] = "LastStatement";
+        SyntaxKind[SyntaxKind["FirstNode"] = 159] = "FirstNode";
+        SyntaxKind[SyntaxKind["FirstJSDocNode"] = 304] = "FirstJSDocNode";
+        SyntaxKind[SyntaxKind["LastJSDocNode"] = 342] = "LastJSDocNode";
+        SyntaxKind[SyntaxKind["FirstJSDocTagNode"] = 322] = "FirstJSDocTagNode";
+        SyntaxKind[SyntaxKind["LastJSDocTagNode"] = 342] = "LastJSDocTagNode";
+        /* @internal */ SyntaxKind[SyntaxKind["FirstContextualKeyword"] = 126] = "FirstContextualKeyword";
+        /* @internal */ SyntaxKind[SyntaxKind["LastContextualKeyword"] = 158] = "LastContextualKeyword";
     })(SyntaxKind = ts.SyntaxKind || (ts.SyntaxKind = {}));
     var NodeFlags;
     (function (NodeFlags) {
@@ -4888,6 +4965,7 @@
         NodeCheckFlags[NodeCheckFlags["ClassWithConstructorReference"] = 16777216] = "ClassWithConstructorReference";
         NodeCheckFlags[NodeCheckFlags["ConstructorReferenceInClass"] = 33554432] = "ConstructorReferenceInClass";
         NodeCheckFlags[NodeCheckFlags["ContainsClassWithPrivateIdentifiers"] = 67108864] = "ContainsClassWithPrivateIdentifiers";
+        NodeCheckFlags[NodeCheckFlags["ContainsSuperPropertyInStaticInitializer"] = 134217728] = "ContainsSuperPropertyInStaticInitializer";
     })(NodeCheckFlags = ts.NodeCheckFlags || (ts.NodeCheckFlags = {}));
     var TypeFlags;
     (function (TypeFlags) {
@@ -4957,7 +5035,7 @@
         /* @internal */
         TypeFlags[TypeFlags["Simplifiable"] = 25165824] = "Simplifiable";
         /* @internal */
-        TypeFlags[TypeFlags["Substructure"] = 469237760] = "Substructure";
+        TypeFlags[TypeFlags["Singleton"] = 67358815] = "Singleton";
         // 'Narrowable' types are types where narrowing actually narrows.
         // This *should* be every type other than null, undefined, void, and never
         TypeFlags[TypeFlags["Narrowable"] = 536624127] = "Narrowable";
@@ -5029,21 +5107,21 @@
         ObjectFlags[ObjectFlags["IdenticalBaseTypeExists"] = 67108864] = "IdenticalBaseTypeExists";
         // Flags that require TypeFlags.UnionOrIntersection or TypeFlags.Substitution
         /* @internal */
-        ObjectFlags[ObjectFlags["IsGenericObjectTypeComputed"] = 4194304] = "IsGenericObjectTypeComputed";
+        ObjectFlags[ObjectFlags["IsGenericTypeComputed"] = 4194304] = "IsGenericTypeComputed";
         /* @internal */
         ObjectFlags[ObjectFlags["IsGenericObjectType"] = 8388608] = "IsGenericObjectType";
         /* @internal */
-        ObjectFlags[ObjectFlags["IsGenericIndexTypeComputed"] = 16777216] = "IsGenericIndexTypeComputed";
+        ObjectFlags[ObjectFlags["IsGenericIndexType"] = 16777216] = "IsGenericIndexType";
         /* @internal */
-        ObjectFlags[ObjectFlags["IsGenericIndexType"] = 33554432] = "IsGenericIndexType";
+        ObjectFlags[ObjectFlags["IsGenericType"] = 25165824] = "IsGenericType";
         // Flags that require TypeFlags.Union
         /* @internal */
-        ObjectFlags[ObjectFlags["ContainsIntersections"] = 67108864] = "ContainsIntersections";
+        ObjectFlags[ObjectFlags["ContainsIntersections"] = 33554432] = "ContainsIntersections";
         // Flags that require TypeFlags.Intersection
         /* @internal */
-        ObjectFlags[ObjectFlags["IsNeverIntersectionComputed"] = 67108864] = "IsNeverIntersectionComputed";
+        ObjectFlags[ObjectFlags["IsNeverIntersectionComputed"] = 33554432] = "IsNeverIntersectionComputed";
         /* @internal */
-        ObjectFlags[ObjectFlags["IsNeverIntersection"] = 134217728] = "IsNeverIntersection";
+        ObjectFlags[ObjectFlags["IsNeverIntersection"] = 67108864] = "IsNeverIntersection";
     })(ObjectFlags = ts.ObjectFlags || (ts.ObjectFlags = {}));
     /* @internal */
     var VarianceFlags;
@@ -5070,6 +5148,21 @@
         ElementFlags[ElementFlags["NonRest"] = 11] = "NonRest";
     })(ElementFlags = ts.ElementFlags || (ts.ElementFlags = {}));
     /* @internal */
+    var AccessFlags;
+    (function (AccessFlags) {
+        AccessFlags[AccessFlags["None"] = 0] = "None";
+        AccessFlags[AccessFlags["IncludeUndefined"] = 1] = "IncludeUndefined";
+        AccessFlags[AccessFlags["NoIndexSignatures"] = 2] = "NoIndexSignatures";
+        AccessFlags[AccessFlags["Writing"] = 4] = "Writing";
+        AccessFlags[AccessFlags["CacheSymbol"] = 8] = "CacheSymbol";
+        AccessFlags[AccessFlags["NoTupleBoundsCheck"] = 16] = "NoTupleBoundsCheck";
+        AccessFlags[AccessFlags["ExpressionPosition"] = 32] = "ExpressionPosition";
+        AccessFlags[AccessFlags["ReportDeprecated"] = 64] = "ReportDeprecated";
+        AccessFlags[AccessFlags["SuppressNoImplicitAnyError"] = 128] = "SuppressNoImplicitAnyError";
+        AccessFlags[AccessFlags["Contextual"] = 256] = "Contextual";
+        AccessFlags[AccessFlags["Persistent"] = 1] = "Persistent";
+    })(AccessFlags = ts.AccessFlags || (ts.AccessFlags = {}));
+    /* @internal */
     var JsxReferenceKind;
     (function (JsxReferenceKind) {
         JsxReferenceKind[JsxReferenceKind["Component"] = 0] = "Component";
@@ -5469,6 +5562,8 @@
         TransformFlags[TransformFlags["ContainsDynamicImport"] = 4194304] = "ContainsDynamicImport";
         TransformFlags[TransformFlags["ContainsClassFields"] = 8388608] = "ContainsClassFields";
         TransformFlags[TransformFlags["ContainsPossibleTopLevelAwait"] = 16777216] = "ContainsPossibleTopLevelAwait";
+        TransformFlags[TransformFlags["ContainsLexicalSuper"] = 33554432] = "ContainsLexicalSuper";
+        TransformFlags[TransformFlags["ContainsUpdateExpressionForIdentifier"] = 67108864] = "ContainsUpdateExpressionForIdentifier";
         // Please leave this as 1 << 29.
         // It is the maximum bit we can set before we outgrow the size of a v8 small integer (SMI) on an x86 system.
         // It is a good reminder of how much room we have left
@@ -5494,12 +5589,12 @@
         TransformFlags[TransformFlags["PropertyAccessExcludes"] = 536870912] = "PropertyAccessExcludes";
         TransformFlags[TransformFlags["NodeExcludes"] = 536870912] = "NodeExcludes";
         TransformFlags[TransformFlags["ArrowFunctionExcludes"] = 557748224] = "ArrowFunctionExcludes";
-        TransformFlags[TransformFlags["FunctionExcludes"] = 557756416] = "FunctionExcludes";
-        TransformFlags[TransformFlags["ConstructorExcludes"] = 557752320] = "ConstructorExcludes";
-        TransformFlags[TransformFlags["MethodOrAccessorExcludes"] = 540975104] = "MethodOrAccessorExcludes";
-        TransformFlags[TransformFlags["PropertyExcludes"] = 536879104] = "PropertyExcludes";
+        TransformFlags[TransformFlags["FunctionExcludes"] = 591310848] = "FunctionExcludes";
+        TransformFlags[TransformFlags["ConstructorExcludes"] = 591306752] = "ConstructorExcludes";
+        TransformFlags[TransformFlags["MethodOrAccessorExcludes"] = 574529536] = "MethodOrAccessorExcludes";
+        TransformFlags[TransformFlags["PropertyExcludes"] = 570433536] = "PropertyExcludes";
         TransformFlags[TransformFlags["ClassExcludes"] = 536940544] = "ClassExcludes";
-        TransformFlags[TransformFlags["ModuleExcludes"] = 555888640] = "ModuleExcludes";
+        TransformFlags[TransformFlags["ModuleExcludes"] = 589443072] = "ModuleExcludes";
         TransformFlags[TransformFlags["TypeExcludes"] = -2] = "TypeExcludes";
         TransformFlags[TransformFlags["ObjectLiteralExcludes"] = 536973312] = "ObjectLiteralExcludes";
         TransformFlags[TransformFlags["ArrayLiteralOrCallOrNewExcludes"] = 536887296] = "ArrayLiteralOrCallOrNewExcludes";
@@ -5507,9 +5602,10 @@
         TransformFlags[TransformFlags["ParameterExcludes"] = 536870912] = "ParameterExcludes";
         TransformFlags[TransformFlags["CatchClauseExcludes"] = 536903680] = "CatchClauseExcludes";
         TransformFlags[TransformFlags["BindingPatternExcludes"] = 536887296] = "BindingPatternExcludes";
+        TransformFlags[TransformFlags["ContainsLexicalThisOrSuper"] = 33562624] = "ContainsLexicalThisOrSuper";
         // Propagating flags
         // - Bitmasks for flags that should propagate from a child
-        TransformFlags[TransformFlags["PropertyNamePropagatingFlags"] = 8192] = "PropertyNamePropagatingFlags";
+        TransformFlags[TransformFlags["PropertyNamePropagatingFlags"] = 33562624] = "PropertyNamePropagatingFlags";
         // Masks
         // - Additional bitmasks
     })(TransformFlags = ts.TransformFlags || (ts.TransformFlags = {}));
@@ -5547,6 +5643,8 @@
         /*@internal*/ EmitFlags[EmitFlags["TypeScriptClassWrapper"] = 33554432] = "TypeScriptClassWrapper";
         /*@internal*/ EmitFlags[EmitFlags["NeverApplyImportHelper"] = 67108864] = "NeverApplyImportHelper";
         /*@internal*/ EmitFlags[EmitFlags["IgnoreSourceNewlines"] = 134217728] = "IgnoreSourceNewlines";
+        /*@internal*/ EmitFlags[EmitFlags["Immutable"] = 268435456] = "Immutable";
+        /*@internal*/ EmitFlags[EmitFlags["IndirectCall"] = 536870912] = "IndirectCall";
     })(EmitFlags = ts.EmitFlags || (ts.EmitFlags = {}));
     /**
      * Used by the checker, this enum keeps track of external emit helpers that should be type
@@ -6048,7 +6146,7 @@
         var rest = path.substring(rootLength).split(ts.directorySeparator);
         if (rest.length && !ts.lastOrUndefined(rest))
             rest.pop();
-        return __spreadArray([root], rest);
+        return __spreadArray([root], rest, true);
     }
     /**
      * Parse a path into an array containing a root component (at index 0) and zero or more path
@@ -6107,6 +6205,11 @@
      * Normalize path separators, converting `\` into `/`.
      */
     function normalizeSlashes(path) {
+        var index = path.indexOf("\\");
+        if (index === -1) {
+            return path;
+        }
+        backslashRegExp.lastIndex = index; // prime regex with known position
         return path.replace(backslashRegExp, ts.directorySeparator);
     }
     ts.normalizeSlashes = normalizeSlashes;
@@ -6194,7 +6297,7 @@
         for (var _i = 1; _i < arguments.length; _i++) {
             paths[_i - 1] = arguments[_i];
         }
-        return normalizePath(ts.some(paths) ? combinePaths.apply(void 0, __spreadArray([path], paths)) : normalizeSlashes(path));
+        return normalizePath(ts.some(paths) ? combinePaths.apply(void 0, __spreadArray([path], paths, false)) : normalizeSlashes(path));
     }
     ts.resolvePath = resolvePath;
     /**
@@ -6217,6 +6320,19 @@
     ts.getNormalizedAbsolutePath = getNormalizedAbsolutePath;
     function normalizePath(path) {
         path = normalizeSlashes(path);
+        // Most paths don't require normalization
+        if (!relativePathSegmentRegExp.test(path)) {
+            return path;
+        }
+        // Some paths only require cleanup of `/./` or leading `./`
+        var simplified = path.replace(/\/\.\//g, "/").replace(/^\.\//, "");
+        if (simplified !== path) {
+            path = simplified;
+            if (!relativePathSegmentRegExp.test(path)) {
+                return path;
+            }
+        }
+        // Other paths require full normalization
         var normalized = getPathFromPathComponents(reducePathComponents(getPathComponents(path)));
         return normalized && hasTrailingDirectorySeparator(path) ? ensureTrailingDirectorySeparator(normalized) : normalized;
     }
@@ -6285,7 +6401,7 @@
     ts.changeAnyExtension = changeAnyExtension;
     //// Path Comparisons
     // check path for these segments: '', '.'. '..'
-    var relativePathSegmentRegExp = /(^|\/)\.{0,2}($|\/)/;
+    var relativePathSegmentRegExp = /(?:\/\/)|(?:^|\/)\.\.?(?:$|\/)/;
     function comparePathsWorker(a, b, componentComparer) {
         if (a === b)
             return 0 /* EqualTo */;
@@ -6405,7 +6521,7 @@
         for (; start < fromComponents.length; start++) {
             relative.push("..");
         }
-        return __spreadArray(__spreadArray([""], relative), components);
+        return __spreadArray(__spreadArray([""], relative, true), components, true);
     }
     ts.getPathComponentsRelativeTo = getPathComponentsRelativeTo;
     function getRelativePathFromDirectory(fromDirectory, to, getCanonicalFileNameOrIgnoreCase) {
@@ -7300,6 +7416,7 @@
             }
             var activeSession;
             var profilePath = "./profile.cpuprofile";
+            var hitSystemWatcherLimit = false;
             var Buffer = require("buffer").Buffer;
             var nodeVersion = getNodeMajorVersion();
             var isNode4OrLater = nodeVersion >= 4;
@@ -7336,6 +7453,9 @@
                 write: function (s) {
                     process.stdout.write(s);
                 },
+                getWidthOfTerminal: function () {
+                    return process.stdout.columns;
+                },
                 writeOutputIsTTY: function () {
                     return process.stdout.isTTY;
                 },
@@ -7625,6 +7745,10 @@
                             options = { persistent: true };
                         }
                     }
+                    if (hitSystemWatcherLimit) {
+                        ts.sysLog("sysLog:: " + fileOrDirectory + ":: Defaulting to fsWatchFile");
+                        return watchPresentFileSystemEntryWithFsWatchFile();
+                    }
                     try {
                         var presentWatcher = _fs.watch(fileOrDirectory, options, isLinuxOrMacOs ?
                             callbackChangingToMissingFileSystemEntry :
@@ -7637,6 +7761,8 @@
                         // Catch the exception and use polling instead
                         // Eg. on linux the number of watches are limited and one could easily exhaust watches and the exception ENOSPC is thrown when creating watcher at that point
                         // so instead of throwing error, use fs.watchFile
+                        hitSystemWatcherLimit || (hitSystemWatcherLimit = e.code === "ENOSPC");
+                        ts.sysLog("sysLog:: " + fileOrDirectory + ":: Changing to fsWatchFile");
                         return watchPresentFileSystemEntryWithFsWatchFile();
                     }
                 }
@@ -7656,7 +7782,6 @@
                  * Eg. on linux the number of watches are limited and one could easily exhaust watches and the exception ENOSPC is thrown when creating watcher at that point
                  */
                 function watchPresentFileSystemEntryWithFsWatchFile() {
-                    ts.sysLog("sysLog:: " + fileOrDirectory + ":: Changing to fsWatchFile");
                     return watchFile(fileOrDirectory, createFileWatcherCallback(callback), fallbackPollingInterval, fallbackOptions);
                 }
                 /**
@@ -7775,7 +7900,7 @@
                 }
             }
             function readDirectory(path, extensions, excludes, includes, depth) {
-                return ts.matchFiles(path, extensions, excludes, includes, useCaseSensitiveFileNames, process.cwd(), depth, getAccessibleFileSystemEntries, realpath);
+                return ts.matchFiles(path, extensions, excludes, includes, useCaseSensitiveFileNames, process.cwd(), depth, getAccessibleFileSystemEntries, realpath, directoryExists);
             }
             function fileSystemEntryExists(path, entryKind) {
                 // Since the error thrown by fs.statSync isn't used, we can avoid collecting a stack trace to improve
@@ -7898,7 +8023,6 @@
         An_index_signature_parameter_cannot_have_an_initializer: diag(1020, ts.DiagnosticCategory.Error, "An_index_signature_parameter_cannot_have_an_initializer_1020", "An index signature parameter cannot have an initializer."),
         An_index_signature_must_have_a_type_annotation: diag(1021, ts.DiagnosticCategory.Error, "An_index_signature_must_have_a_type_annotation_1021", "An index signature must have a type annotation."),
         An_index_signature_parameter_must_have_a_type_annotation: diag(1022, ts.DiagnosticCategory.Error, "An_index_signature_parameter_must_have_a_type_annotation_1022", "An index signature parameter must have a type annotation."),
-        An_index_signature_parameter_type_must_be_either_string_or_number: diag(1023, ts.DiagnosticCategory.Error, "An_index_signature_parameter_type_must_be_either_string_or_number_1023", "An index signature parameter type must be either 'string' or 'number'."),
         readonly_modifier_can_only_appear_on_a_property_declaration_or_index_signature: diag(1024, ts.DiagnosticCategory.Error, "readonly_modifier_can_only_appear_on_a_property_declaration_or_index_signature_1024", "'readonly' modifier can only appear on a property declaration or index signature."),
         An_index_signature_cannot_have_a_trailing_comma: diag(1025, ts.DiagnosticCategory.Error, "An_index_signature_cannot_have_a_trailing_comma_1025", "An index signature cannot have a trailing comma."),
         Accessibility_modifier_already_seen: diag(1028, ts.DiagnosticCategory.Error, "Accessibility_modifier_already_seen_1028", "Accessibility modifier already seen."),
@@ -7959,6 +8083,7 @@
         for_await_loops_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules: diag(1103, ts.DiagnosticCategory.Error, "for_await_loops_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_1103", "'for await' loops are only allowed within async functions and at the top levels of modules."),
         A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement: diag(1104, ts.DiagnosticCategory.Error, "A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement_1104", "A 'continue' statement can only be used within an enclosing iteration statement."),
         A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement: diag(1105, ts.DiagnosticCategory.Error, "A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement_1105", "A 'break' statement can only be used within an enclosing iteration or switch statement."),
+        The_left_hand_side_of_a_for_of_statement_may_not_be_async: diag(1106, ts.DiagnosticCategory.Error, "The_left_hand_side_of_a_for_of_statement_may_not_be_async_1106", "The left-hand side of a 'for...of' statement may not be 'async'."),
         Jump_target_cannot_cross_function_boundary: diag(1107, ts.DiagnosticCategory.Error, "Jump_target_cannot_cross_function_boundary_1107", "Jump target cannot cross function boundary."),
         A_return_statement_can_only_be_used_within_a_function_body: diag(1108, ts.DiagnosticCategory.Error, "A_return_statement_can_only_be_used_within_a_function_body_1108", "A 'return' statement can only be used within a function body."),
         Expression_expected: diag(1109, ts.DiagnosticCategory.Error, "Expression_expected_1109", "Expression expected."),
@@ -8045,7 +8170,7 @@
         Decorators_are_not_valid_here: diag(1206, ts.DiagnosticCategory.Error, "Decorators_are_not_valid_here_1206", "Decorators are not valid here."),
         Decorators_cannot_be_applied_to_multiple_get_Slashset_accessors_of_the_same_name: diag(1207, ts.DiagnosticCategory.Error, "Decorators_cannot_be_applied_to_multiple_get_Slashset_accessors_of_the_same_name_1207", "Decorators cannot be applied to multiple get/set accessors of the same name."),
         _0_cannot_be_compiled_under_isolatedModules_because_it_is_considered_a_global_script_file_Add_an_import_export_or_an_empty_export_statement_to_make_it_a_module: diag(1208, ts.DiagnosticCategory.Error, "_0_cannot_be_compiled_under_isolatedModules_because_it_is_considered_a_global_script_file_Add_an_imp_1208", "'{0}' cannot be compiled under '--isolatedModules' because it is considered a global script file. Add an import, export, or an empty 'export {}' statement to make it a module."),
-        Invalid_use_of_0_Class_definitions_are_automatically_in_strict_mode: diag(1210, ts.DiagnosticCategory.Error, "Invalid_use_of_0_Class_definitions_are_automatically_in_strict_mode_1210", "Invalid use of '{0}'. Class definitions are automatically in strict mode."),
+        Code_contained_in_a_class_is_evaluated_in_JavaScript_s_strict_mode_which_does_not_allow_this_use_of_0_For_more_information_see_https_Colon_Slash_Slashdeveloper_mozilla_org_Slashen_US_Slashdocs_SlashWeb_SlashJavaScript_SlashReference_SlashStrict_mode: diag(1210, ts.DiagnosticCategory.Error, "Code_contained_in_a_class_is_evaluated_in_JavaScript_s_strict_mode_which_does_not_allow_this_use_of__1210", "Code contained in a class is evaluated in JavaScript's strict mode which does not allow this use of '{0}'. For more information, see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Strict_mode."),
         A_class_declaration_without_the_default_modifier_must_have_a_name: diag(1211, ts.DiagnosticCategory.Error, "A_class_declaration_without_the_default_modifier_must_have_a_name_1211", "A class declaration without the 'default' modifier must have a name."),
         Identifier_expected_0_is_a_reserved_word_in_strict_mode: diag(1212, ts.DiagnosticCategory.Error, "Identifier_expected_0_is_a_reserved_word_in_strict_mode_1212", "Identifier expected. '{0}' is a reserved word in strict mode."),
         Identifier_expected_0_is_a_reserved_word_in_strict_mode_Class_definitions_are_automatically_in_strict_mode: diag(1213, ts.DiagnosticCategory.Error, "Identifier_expected_0_is_a_reserved_word_in_strict_mode_Class_definitions_are_automatically_in_stric_1213", "Identifier expected. '{0}' is a reserved word in strict mode. Class definitions are automatically in strict mode."),
@@ -8100,6 +8225,8 @@
         Declarations_with_definite_assignment_assertions_must_also_have_type_annotations: diag(1264, ts.DiagnosticCategory.Error, "Declarations_with_definite_assignment_assertions_must_also_have_type_annotations_1264", "Declarations with definite assignment assertions must also have type annotations."),
         A_rest_element_cannot_follow_another_rest_element: diag(1265, ts.DiagnosticCategory.Error, "A_rest_element_cannot_follow_another_rest_element_1265", "A rest element cannot follow another rest element."),
         An_optional_element_cannot_follow_a_rest_element: diag(1266, ts.DiagnosticCategory.Error, "An_optional_element_cannot_follow_a_rest_element_1266", "An optional element cannot follow a rest element."),
+        Property_0_cannot_have_an_initializer_because_it_is_marked_abstract: diag(1267, ts.DiagnosticCategory.Error, "Property_0_cannot_have_an_initializer_because_it_is_marked_abstract_1267", "Property '{0}' cannot have an initializer because it is marked abstract."),
+        An_index_signature_parameter_type_must_be_string_number_symbol_or_a_template_literal_type: diag(1268, ts.DiagnosticCategory.Error, "An_index_signature_parameter_type_must_be_string_number_symbol_or_a_template_literal_type_1268", "An index signature parameter type must be 'string', 'number', 'symbol', or a template literal type."),
         with_statements_are_not_allowed_in_an_async_function_block: diag(1300, ts.DiagnosticCategory.Error, "with_statements_are_not_allowed_in_an_async_function_block_1300", "'with' statements are not allowed in an async function block."),
         await_expressions_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules: diag(1308, ts.DiagnosticCategory.Error, "await_expressions_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_1308", "'await' expressions are only allowed within async functions and at the top levels of modules."),
         Did_you_mean_to_use_a_Colon_An_can_only_follow_a_property_name_when_the_containing_object_literal_is_part_of_a_destructuring_pattern: diag(1312, ts.DiagnosticCategory.Error, "Did_you_mean_to_use_a_Colon_An_can_only_follow_a_property_name_when_the_containing_object_literal_is_1312", "Did you mean to use a ':'? An '=' can only follow a property name when the containing object literal is part of a destructuring pattern."),
@@ -8126,8 +8253,7 @@
         unique_symbol_types_may_not_be_used_on_a_variable_declaration_with_a_binding_name: diag(1333, ts.DiagnosticCategory.Error, "unique_symbol_types_may_not_be_used_on_a_variable_declaration_with_a_binding_name_1333", "'unique symbol' types may not be used on a variable declaration with a binding name."),
         unique_symbol_types_are_only_allowed_on_variables_in_a_variable_statement: diag(1334, ts.DiagnosticCategory.Error, "unique_symbol_types_are_only_allowed_on_variables_in_a_variable_statement_1334", "'unique symbol' types are only allowed on variables in a variable statement."),
         unique_symbol_types_are_not_allowed_here: diag(1335, ts.DiagnosticCategory.Error, "unique_symbol_types_are_not_allowed_here_1335", "'unique symbol' types are not allowed here."),
-        An_index_signature_parameter_type_cannot_be_a_type_alias_Consider_writing_0_Colon_1_Colon_2_instead: diag(1336, ts.DiagnosticCategory.Error, "An_index_signature_parameter_type_cannot_be_a_type_alias_Consider_writing_0_Colon_1_Colon_2_instead_1336", "An index signature parameter type cannot be a type alias. Consider writing '[{0}: {1}]: {2}' instead."),
-        An_index_signature_parameter_type_cannot_be_a_union_type_Consider_using_a_mapped_object_type_instead: diag(1337, ts.DiagnosticCategory.Error, "An_index_signature_parameter_type_cannot_be_a_union_type_Consider_using_a_mapped_object_type_instead_1337", "An index signature parameter type cannot be a union type. Consider using a mapped object type instead."),
+        An_index_signature_parameter_type_cannot_be_a_literal_type_or_generic_type_Consider_using_a_mapped_object_type_instead: diag(1337, ts.DiagnosticCategory.Error, "An_index_signature_parameter_type_cannot_be_a_literal_type_or_generic_type_Consider_using_a_mapped_o_1337", "An index signature parameter type cannot be a literal type or generic type. Consider using a mapped object type instead."),
         infer_declarations_are_only_permitted_in_the_extends_clause_of_a_conditional_type: diag(1338, ts.DiagnosticCategory.Error, "infer_declarations_are_only_permitted_in_the_extends_clause_of_a_conditional_type_1338", "'infer' declarations are only permitted in the 'extends' clause of a conditional type."),
         Module_0_does_not_refer_to_a_value_but_is_used_as_a_value_here: diag(1339, ts.DiagnosticCategory.Error, "Module_0_does_not_refer_to_a_value_but_is_used_as_a_value_here_1339", "Module '{0}' does not refer to a value, but is used as a value here."),
         Module_0_does_not_refer_to_a_type_but_is_used_as_a_type_here_Did_you_mean_typeof_import_0: diag(1340, ts.DiagnosticCategory.Error, "Module_0_does_not_refer_to_a_type_but_is_used_as_a_type_here_Did_you_mean_typeof_import_0_1340", "Module '{0}' does not refer to a type, but is used as a type here. Did you mean 'typeof import('{0}')'?"),
@@ -8157,7 +8283,6 @@
         Convert_all_re_exported_types_to_type_only_exports: diag(1365, ts.DiagnosticCategory.Message, "Convert_all_re_exported_types_to_type_only_exports_1365", "Convert all re-exported types to type-only exports"),
         Split_into_two_separate_import_declarations: diag(1366, ts.DiagnosticCategory.Message, "Split_into_two_separate_import_declarations_1366", "Split into two separate import declarations"),
         Split_all_invalid_type_only_imports: diag(1367, ts.DiagnosticCategory.Message, "Split_all_invalid_type_only_imports_1367", "Split all invalid type-only imports"),
-        Specify_emit_Slashchecking_behavior_for_imports_that_are_only_used_for_types: diag(1368, ts.DiagnosticCategory.Message, "Specify_emit_Slashchecking_behavior_for_imports_that_are_only_used_for_types_1368", "Specify emit/checking behavior for imports that are only used for types"),
         Did_you_mean_0: diag(1369, ts.DiagnosticCategory.Message, "Did_you_mean_0_1369", "Did you mean '{0}'?"),
         This_import_is_never_used_as_a_value_and_must_use_import_type_because_importsNotUsedAsValues_is_set_to_error: diag(1371, ts.DiagnosticCategory.Error, "This_import_is_never_used_as_a_value_and_must_use_import_type_because_importsNotUsedAsValues_is_set__1371", "This import is never used as a value and must use 'import type' because 'importsNotUsedAsValues' is set to 'error'."),
         Convert_to_type_only_import: diag(1373, ts.DiagnosticCategory.Message, "Convert_to_type_only_import_1373", "Convert to type-only import"),
@@ -8221,6 +8346,16 @@
         for_await_loops_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_file_has_no_imports_or_exports_Consider_adding_an_empty_export_to_make_this_file_a_module: diag(1431, ts.DiagnosticCategory.Error, "for_await_loops_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_file_1431", "'for await' loops are only allowed at the top level of a file when that file is a module, but this file has no imports or exports. Consider adding an empty 'export {}' to make this file a module."),
         Top_level_for_await_loops_are_only_allowed_when_the_module_option_is_set_to_esnext_or_system_and_the_target_option_is_set_to_es2017_or_higher: diag(1432, ts.DiagnosticCategory.Error, "Top_level_for_await_loops_are_only_allowed_when_the_module_option_is_set_to_esnext_or_system_and_the_1432", "Top-level 'for await' loops are only allowed when the 'module' option is set to 'esnext' or 'system', and the 'target' option is set to 'es2017' or higher."),
         Decorators_may_not_be_applied_to_this_parameters: diag(1433, ts.DiagnosticCategory.Error, "Decorators_may_not_be_applied_to_this_parameters_1433", "Decorators may not be applied to 'this' parameters."),
+        Unexpected_keyword_or_identifier: diag(1434, ts.DiagnosticCategory.Error, "Unexpected_keyword_or_identifier_1434", "Unexpected keyword or identifier."),
+        Unknown_keyword_or_identifier_Did_you_mean_0: diag(1435, ts.DiagnosticCategory.Error, "Unknown_keyword_or_identifier_Did_you_mean_0_1435", "Unknown keyword or identifier. Did you mean '{0}'?"),
+        Decorators_must_precede_the_name_and_all_keywords_of_property_declarations: diag(1436, ts.DiagnosticCategory.Error, "Decorators_must_precede_the_name_and_all_keywords_of_property_declarations_1436", "Decorators must precede the name and all keywords of property declarations."),
+        Namespace_must_be_given_a_name: diag(1437, ts.DiagnosticCategory.Error, "Namespace_must_be_given_a_name_1437", "Namespace must be given a name."),
+        Interface_must_be_given_a_name: diag(1438, ts.DiagnosticCategory.Error, "Interface_must_be_given_a_name_1438", "Interface must be given a name."),
+        Type_alias_must_be_given_a_name: diag(1439, ts.DiagnosticCategory.Error, "Type_alias_must_be_given_a_name_1439", "Type alias must be given a name."),
+        Variable_declaration_not_allowed_at_this_location: diag(1440, ts.DiagnosticCategory.Error, "Variable_declaration_not_allowed_at_this_location_1440", "Variable declaration not allowed at this location."),
+        Cannot_start_a_function_call_in_a_type_annotation: diag(1441, ts.DiagnosticCategory.Error, "Cannot_start_a_function_call_in_a_type_annotation_1441", "Cannot start a function call in a type annotation."),
+        Expected_for_property_initializer: diag(1442, ts.DiagnosticCategory.Error, "Expected_for_property_initializer_1442", "Expected '=' for property initializer."),
+        Module_declaration_names_may_only_use_or_quoted_strings: diag(1443, ts.DiagnosticCategory.Error, "Module_declaration_names_may_only_use_or_quoted_strings_1443", "Module declaration names may only use ' or \" quoted strings."),
         The_types_of_0_are_incompatible_between_these_types: diag(2200, ts.DiagnosticCategory.Error, "The_types_of_0_are_incompatible_between_these_types_2200", "The types of '{0}' are incompatible between these types."),
         The_types_returned_by_0_are_incompatible_between_these_types: diag(2201, ts.DiagnosticCategory.Error, "The_types_returned_by_0_are_incompatible_between_these_types_2201", "The types returned by '{0}' are incompatible between these types."),
         Call_signature_return_types_0_and_1_are_incompatible: diag(2202, ts.DiagnosticCategory.Error, "Call_signature_return_types_0_and_1_are_incompatible_2202", "Call signature return types '{0}' and '{1}' are incompatible.", /*reportsUnnecessary*/ undefined, /*elidedInCompatabilityPyramid*/ true),
@@ -8256,8 +8391,8 @@
         Types_of_property_0_are_incompatible: diag(2326, ts.DiagnosticCategory.Error, "Types_of_property_0_are_incompatible_2326", "Types of property '{0}' are incompatible."),
         Property_0_is_optional_in_type_1_but_required_in_type_2: diag(2327, ts.DiagnosticCategory.Error, "Property_0_is_optional_in_type_1_but_required_in_type_2_2327", "Property '{0}' is optional in type '{1}' but required in type '{2}'."),
         Types_of_parameters_0_and_1_are_incompatible: diag(2328, ts.DiagnosticCategory.Error, "Types_of_parameters_0_and_1_are_incompatible_2328", "Types of parameters '{0}' and '{1}' are incompatible."),
-        Index_signature_is_missing_in_type_0: diag(2329, ts.DiagnosticCategory.Error, "Index_signature_is_missing_in_type_0_2329", "Index signature is missing in type '{0}'."),
-        Index_signatures_are_incompatible: diag(2330, ts.DiagnosticCategory.Error, "Index_signatures_are_incompatible_2330", "Index signatures are incompatible."),
+        Index_signature_for_type_0_is_missing_in_type_1: diag(2329, ts.DiagnosticCategory.Error, "Index_signature_for_type_0_is_missing_in_type_1_2329", "Index signature for type '{0}' is missing in type '{1}'."),
+        _0_and_1_index_signatures_are_incompatible: diag(2330, ts.DiagnosticCategory.Error, "_0_and_1_index_signatures_are_incompatible_2330", "'{0}' and '{1}' index signatures are incompatible."),
         this_cannot_be_referenced_in_a_module_or_namespace_body: diag(2331, ts.DiagnosticCategory.Error, "this_cannot_be_referenced_in_a_module_or_namespace_body_2331", "'this' cannot be referenced in a module or namespace body."),
         this_cannot_be_referenced_in_current_location: diag(2332, ts.DiagnosticCategory.Error, "this_cannot_be_referenced_in_current_location_2332", "'this' cannot be referenced in current location."),
         this_cannot_be_referenced_in_constructor_arguments: diag(2333, ts.DiagnosticCategory.Error, "this_cannot_be_referenced_in_constructor_arguments_2333", "'this' cannot be referenced in constructor arguments."),
@@ -8301,8 +8436,7 @@
         A_parameter_initializer_is_only_allowed_in_a_function_or_constructor_implementation: diag(2371, ts.DiagnosticCategory.Error, "A_parameter_initializer_is_only_allowed_in_a_function_or_constructor_implementation_2371", "A parameter initializer is only allowed in a function or constructor implementation."),
         Parameter_0_cannot_reference_itself: diag(2372, ts.DiagnosticCategory.Error, "Parameter_0_cannot_reference_itself_2372", "Parameter '{0}' cannot reference itself."),
         Parameter_0_cannot_reference_identifier_1_declared_after_it: diag(2373, ts.DiagnosticCategory.Error, "Parameter_0_cannot_reference_identifier_1_declared_after_it_2373", "Parameter '{0}' cannot reference identifier '{1}' declared after it."),
-        Duplicate_string_index_signature: diag(2374, ts.DiagnosticCategory.Error, "Duplicate_string_index_signature_2374", "Duplicate string index signature."),
-        Duplicate_number_index_signature: diag(2375, ts.DiagnosticCategory.Error, "Duplicate_number_index_signature_2375", "Duplicate number index signature."),
+        Duplicate_index_signature_for_type_0: diag(2374, ts.DiagnosticCategory.Error, "Duplicate_index_signature_for_type_0_2374", "Duplicate index signature for type '{0}'."),
         A_super_call_must_be_the_first_statement_in_the_constructor_when_a_class_contains_initialized_properties_parameter_properties_or_private_identifiers: diag(2376, ts.DiagnosticCategory.Error, "A_super_call_must_be_the_first_statement_in_the_constructor_when_a_class_contains_initialized_proper_2376", "A 'super' call must be the first statement in the constructor when a class contains initialized properties, parameter properties, or private identifiers."),
         Constructors_for_derived_classes_must_contain_a_super_call: diag(2377, ts.DiagnosticCategory.Error, "Constructors_for_derived_classes_must_contain_a_super_call_2377", "Constructors for derived classes must contain a 'super' call."),
         A_get_accessor_must_return_a_value: diag(2378, ts.DiagnosticCategory.Error, "A_get_accessor_must_return_a_value_2378", "A 'get' accessor must return a value."),
@@ -8337,9 +8471,8 @@
         Setters_cannot_return_a_value: diag(2408, ts.DiagnosticCategory.Error, "Setters_cannot_return_a_value_2408", "Setters cannot return a value."),
         Return_type_of_constructor_signature_must_be_assignable_to_the_instance_type_of_the_class: diag(2409, ts.DiagnosticCategory.Error, "Return_type_of_constructor_signature_must_be_assignable_to_the_instance_type_of_the_class_2409", "Return type of constructor signature must be assignable to the instance type of the class."),
         The_with_statement_is_not_supported_All_symbols_in_a_with_block_will_have_type_any: diag(2410, ts.DiagnosticCategory.Error, "The_with_statement_is_not_supported_All_symbols_in_a_with_block_will_have_type_any_2410", "The 'with' statement is not supported. All symbols in a 'with' block will have type 'any'."),
-        Property_0_of_type_1_is_not_assignable_to_string_index_type_2: diag(2411, ts.DiagnosticCategory.Error, "Property_0_of_type_1_is_not_assignable_to_string_index_type_2_2411", "Property '{0}' of type '{1}' is not assignable to string index type '{2}'."),
-        Property_0_of_type_1_is_not_assignable_to_numeric_index_type_2: diag(2412, ts.DiagnosticCategory.Error, "Property_0_of_type_1_is_not_assignable_to_numeric_index_type_2_2412", "Property '{0}' of type '{1}' is not assignable to numeric index type '{2}'."),
-        Numeric_index_type_0_is_not_assignable_to_string_index_type_1: diag(2413, ts.DiagnosticCategory.Error, "Numeric_index_type_0_is_not_assignable_to_string_index_type_1_2413", "Numeric index type '{0}' is not assignable to string index type '{1}'."),
+        Property_0_of_type_1_is_not_assignable_to_2_index_type_3: diag(2411, ts.DiagnosticCategory.Error, "Property_0_of_type_1_is_not_assignable_to_2_index_type_3_2411", "Property '{0}' of type '{1}' is not assignable to '{2}' index type '{3}'."),
+        _0_index_type_1_is_not_assignable_to_2_index_type_3: diag(2413, ts.DiagnosticCategory.Error, "_0_index_type_1_is_not_assignable_to_2_index_type_3_2413", "'{0}' index type '{1}' is not assignable to '{2}' index type '{3}'."),
         Class_name_cannot_be_0: diag(2414, ts.DiagnosticCategory.Error, "Class_name_cannot_be_0_2414", "Class name cannot be '{0}'."),
         Class_0_incorrectly_extends_base_class_1: diag(2415, ts.DiagnosticCategory.Error, "Class_0_incorrectly_extends_base_class_1_2415", "Class '{0}' incorrectly extends base class '{1}'."),
         Property_0_in_type_1_is_not_assignable_to_the_same_property_in_base_type_2: diag(2416, ts.DiagnosticCategory.Error, "Property_0_in_type_1_is_not_assignable_to_the_same_property_in_base_type_2_2416", "Property '{0}' in type '{1}' is not assignable to the same property in base type '{2}'."),
@@ -8486,7 +8619,9 @@
         Property_0_is_used_before_being_assigned: diag(2565, ts.DiagnosticCategory.Error, "Property_0_is_used_before_being_assigned_2565", "Property '{0}' is used before being assigned."),
         A_rest_element_cannot_have_a_property_name: diag(2566, ts.DiagnosticCategory.Error, "A_rest_element_cannot_have_a_property_name_2566", "A rest element cannot have a property name."),
         Enum_declarations_can_only_merge_with_namespace_or_other_enum_declarations: diag(2567, ts.DiagnosticCategory.Error, "Enum_declarations_can_only_merge_with_namespace_or_other_enum_declarations_2567", "Enum declarations can only merge with namespace or other enum declarations."),
+        Property_0_may_not_exist_on_type_1_Did_you_mean_2: diag(2568, ts.DiagnosticCategory.Error, "Property_0_may_not_exist_on_type_1_Did_you_mean_2_2568", "Property '{0}' may not exist on type '{1}'. Did you mean '{2}'?"),
         Type_0_is_not_an_array_type_or_a_string_type_Use_compiler_option_downlevelIteration_to_allow_iterating_of_iterators: diag(2569, ts.DiagnosticCategory.Error, "Type_0_is_not_an_array_type_or_a_string_type_Use_compiler_option_downlevelIteration_to_allow_iterati_2569", "Type '{0}' is not an array type or a string type. Use compiler option '--downlevelIteration' to allow iterating of iterators."),
+        Could_not_find_name_0_Did_you_mean_1: diag(2570, ts.DiagnosticCategory.Error, "Could_not_find_name_0_Did_you_mean_1_2570", "Could not find name '{0}'. Did you mean '{1}'?"),
         Object_is_of_type_unknown: diag(2571, ts.DiagnosticCategory.Error, "Object_is_of_type_unknown_2571", "Object is of type 'unknown'."),
         Rest_signatures_are_incompatible: diag(2572, ts.DiagnosticCategory.Error, "Rest_signatures_are_incompatible_2572", "Rest signatures are incompatible."),
         Property_0_is_incompatible_with_rest_element_type: diag(2573, ts.DiagnosticCategory.Error, "Property_0_is_incompatible_with_rest_element_type_2573", "Property '{0}' is incompatible with rest element type."),
@@ -8547,6 +8682,7 @@
         Cannot_assign_to_0_because_it_is_a_namespace: diag(2631, ts.DiagnosticCategory.Error, "Cannot_assign_to_0_because_it_is_a_namespace_2631", "Cannot assign to '{0}' because it is a namespace."),
         Cannot_assign_to_0_because_it_is_an_import: diag(2632, ts.DiagnosticCategory.Error, "Cannot_assign_to_0_because_it_is_an_import_2632", "Cannot assign to '{0}' because it is an import."),
         JSX_property_access_expressions_cannot_include_JSX_namespace_names: diag(2633, ts.DiagnosticCategory.Error, "JSX_property_access_expressions_cannot_include_JSX_namespace_names_2633", "JSX property access expressions cannot include JSX namespace names"),
+        _0_index_signatures_are_incompatible: diag(2634, ts.DiagnosticCategory.Error, "_0_index_signatures_are_incompatible_2634", "'{0}' index signatures are incompatible."),
         Cannot_augment_module_0_with_value_exports_because_it_resolves_to_a_non_module_entity: diag(2649, ts.DiagnosticCategory.Error, "Cannot_augment_module_0_with_value_exports_because_it_resolves_to_a_non_module_entity_2649", "Cannot augment module '{0}' with value exports because it resolves to a non-module entity."),
         A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_members_defined_in_other_enums: diag(2651, ts.DiagnosticCategory.Error, "A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_memb_2651", "A member initializer in a enum declaration cannot reference members declared after it, including members defined in other enums."),
         Merged_declaration_0_cannot_include_a_default_export_declaration_Consider_adding_a_separate_export_default_0_declaration_instead: diag(2652, ts.DiagnosticCategory.Error, "Merged_declaration_0_cannot_include_a_default_export_declaration_Consider_adding_a_separate_export_d_2652", "Merged declaration '{0}' cannot include a default export declaration. Consider adding a separate 'export default {0}' declaration instead."),
@@ -8709,6 +8845,13 @@
         Property_0_may_not_be_used_in_a_static_property_s_initializer_in_the_same_class_when_target_is_esnext_and_useDefineForClassFields_is_false: diag(2810, ts.DiagnosticCategory.Error, "Property_0_may_not_be_used_in_a_static_property_s_initializer_in_the_same_class_when_target_is_esnex_2810", "Property '{0}' may not be used in a static property's initializer in the same class when 'target' is 'esnext' and 'useDefineForClassFields' is 'false'."),
         Initializer_for_property_0: diag(2811, ts.DiagnosticCategory.Error, "Initializer_for_property_0_2811", "Initializer for property '{0}'"),
         Property_0_does_not_exist_on_type_1_Try_changing_the_lib_compiler_option_to_include_dom: diag(2812, ts.DiagnosticCategory.Error, "Property_0_does_not_exist_on_type_1_Try_changing_the_lib_compiler_option_to_include_dom_2812", "Property '{0}' does not exist on type '{1}'. Try changing the 'lib' compiler option to include 'dom'."),
+        Class_declaration_cannot_implement_overload_list_for_0: diag(2813, ts.DiagnosticCategory.Error, "Class_declaration_cannot_implement_overload_list_for_0_2813", "Class declaration cannot implement overload list for '{0}'."),
+        Function_with_bodies_can_only_merge_with_classes_that_are_ambient: diag(2814, ts.DiagnosticCategory.Error, "Function_with_bodies_can_only_merge_with_classes_that_are_ambient_2814", "Function with bodies can only merge with classes that are ambient."),
+        arguments_cannot_be_referenced_in_property_initializers: diag(2815, ts.DiagnosticCategory.Error, "arguments_cannot_be_referenced_in_property_initializers_2815", "'arguments' cannot be referenced in property initializers."),
+        Cannot_use_this_in_a_static_property_initializer_of_a_decorated_class: diag(2816, ts.DiagnosticCategory.Error, "Cannot_use_this_in_a_static_property_initializer_of_a_decorated_class_2816", "Cannot use 'this' in a static property initializer of a decorated class."),
+        Property_0_has_no_initializer_and_is_not_definitely_assigned_in_a_class_static_block: diag(2817, ts.DiagnosticCategory.Error, "Property_0_has_no_initializer_and_is_not_definitely_assigned_in_a_class_static_block_2817", "Property '{0}' has no initializer and is not definitely assigned in a class static block."),
+        Duplicate_identifier_0_Compiler_reserves_name_1_when_emitting_super_references_in_static_initializers: diag(2818, ts.DiagnosticCategory.Error, "Duplicate_identifier_0_Compiler_reserves_name_1_when_emitting_super_references_in_static_initializer_2818", "Duplicate identifier '{0}'. Compiler reserves name '{1}' when emitting 'super' references in static initializers."),
+        Namespace_name_cannot_be_0: diag(2819, ts.DiagnosticCategory.Error, "Namespace_name_cannot_be_0_2819", "Namespace name cannot be '{0}'."),
         Import_declaration_0_is_using_private_name_1: diag(4000, ts.DiagnosticCategory.Error, "Import_declaration_0_is_using_private_name_1_4000", "Import declaration '{0}' is using private name '{1}'."),
         Type_parameter_0_of_exported_class_has_or_is_using_private_name_1: diag(4002, ts.DiagnosticCategory.Error, "Type_parameter_0_of_exported_class_has_or_is_using_private_name_1_4002", "Type parameter '{0}' of exported class has or is using private name '{1}'."),
         Type_parameter_0_of_exported_interface_has_or_is_using_private_name_1: diag(4004, ts.DiagnosticCategory.Error, "Type_parameter_0_of_exported_interface_has_or_is_using_private_name_1_4004", "Type parameter '{0}' of exported interface has or is using private name '{1}'."),
@@ -8808,6 +8951,8 @@
         This_member_must_have_an_override_modifier_because_it_overrides_a_member_in_the_base_class_0: diag(4114, ts.DiagnosticCategory.Error, "This_member_must_have_an_override_modifier_because_it_overrides_a_member_in_the_base_class_0_4114", "This member must have an 'override' modifier because it overrides a member in the base class '{0}'."),
         This_parameter_property_must_have_an_override_modifier_because_it_overrides_a_member_in_base_class_0: diag(4115, ts.DiagnosticCategory.Error, "This_parameter_property_must_have_an_override_modifier_because_it_overrides_a_member_in_base_class_0_4115", "This parameter property must have an 'override' modifier because it overrides a member in base class '{0}'."),
         This_member_must_have_an_override_modifier_because_it_overrides_an_abstract_method_that_is_declared_in_the_base_class_0: diag(4116, ts.DiagnosticCategory.Error, "This_member_must_have_an_override_modifier_because_it_overrides_an_abstract_method_that_is_declared__4116", "This member must have an 'override' modifier because it overrides an abstract method that is declared in the base class '{0}'."),
+        This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0_Did_you_mean_1: diag(4117, ts.DiagnosticCategory.Error, "This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0_Did_you__4117", "This member cannot have an 'override' modifier because it is not declared in the base class '{0}'. Did you mean '{1}'?"),
+        The_type_of_this_node_cannot_be_serialized_because_its_property_0_cannot_be_serialized: diag(4118, ts.DiagnosticCategory.Error, "The_type_of_this_node_cannot_be_serialized_because_its_property_0_cannot_be_serialized_4118", "The type of this node cannot be serialized because its property '{0}' cannot be serialized."),
         The_current_host_does_not_support_the_0_option: diag(5001, ts.DiagnosticCategory.Error, "The_current_host_does_not_support_the_0_option_5001", "The current host does not support the '{0}' option."),
         Cannot_find_the_common_subdirectory_path_for_the_input_files: diag(5009, ts.DiagnosticCategory.Error, "Cannot_find_the_common_subdirectory_path_for_the_input_files_5009", "Cannot find the common subdirectory path for the input files."),
         File_specification_cannot_end_in_a_recursive_directory_wildcard_Asterisk_Asterisk_Colon_0: diag(5010, ts.DiagnosticCategory.Error, "File_specification_cannot_end_in_a_recursive_directory_wildcard_Asterisk_Asterisk_Colon_0_5010", "File specification cannot end in a recursive directory wildcard ('**'): '{0}'."),
@@ -8866,7 +9011,7 @@
         Generates_a_sourcemap_for_each_corresponding_d_ts_file: diag(6000, ts.DiagnosticCategory.Message, "Generates_a_sourcemap_for_each_corresponding_d_ts_file_6000", "Generates a sourcemap for each corresponding '.d.ts' file."),
         Concatenate_and_emit_output_to_single_file: diag(6001, ts.DiagnosticCategory.Message, "Concatenate_and_emit_output_to_single_file_6001", "Concatenate and emit output to single file."),
         Generates_corresponding_d_ts_file: diag(6002, ts.DiagnosticCategory.Message, "Generates_corresponding_d_ts_file_6002", "Generates corresponding '.d.ts' file."),
-        Specify_the_location_where_debugger_should_locate_map_files_instead_of_generated_locations: diag(6003, ts.DiagnosticCategory.Message, "Specify_the_location_where_debugger_should_locate_map_files_instead_of_generated_locations_6003", "Specify the location where debugger should locate map files instead of generated locations."),
+        Specify_the_location_where_debugger_should_locate_map_files_instead_of_generated_locations: diag(6655, ts.DiagnosticCategory.Message, "Specify_the_location_where_debugger_should_locate_map_files_instead_of_generated_locations_6655", "Specify the location where debugger should locate map files instead of generated locations."),
         Specify_the_location_where_debugger_should_locate_TypeScript_files_instead_of_source_locations: diag(6004, ts.DiagnosticCategory.Message, "Specify_the_location_where_debugger_should_locate_TypeScript_files_instead_of_source_locations_6004", "Specify the location where debugger should locate TypeScript files instead of source locations."),
         Watch_input_files: diag(6005, ts.DiagnosticCategory.Message, "Watch_input_files_6005", "Watch input files."),
         Redirect_output_structure_to_the_directory: diag(6006, ts.DiagnosticCategory.Message, "Redirect_output_structure_to_the_directory_6006", "Redirect output structure to the directory."),
@@ -8878,8 +9023,8 @@
         Skip_type_checking_of_declaration_files: diag(6012, ts.DiagnosticCategory.Message, "Skip_type_checking_of_declaration_files_6012", "Skip type checking of declaration files."),
         Do_not_resolve_the_real_path_of_symlinks: diag(6013, ts.DiagnosticCategory.Message, "Do_not_resolve_the_real_path_of_symlinks_6013", "Do not resolve the real path of symlinks."),
         Only_emit_d_ts_declaration_files: diag(6014, ts.DiagnosticCategory.Message, "Only_emit_d_ts_declaration_files_6014", "Only emit '.d.ts' declaration files."),
-        Specify_ECMAScript_target_version_Colon_ES3_default_ES5_ES2015_ES2016_ES2017_ES2018_ES2019_ES2020_ES2021_or_ESNEXT: diag(6015, ts.DiagnosticCategory.Message, "Specify_ECMAScript_target_version_Colon_ES3_default_ES5_ES2015_ES2016_ES2017_ES2018_ES2019_ES2020_ES_6015", "Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019', 'ES2020', 'ES2021', or 'ESNEXT'."),
-        Specify_module_code_generation_Colon_none_commonjs_amd_system_umd_es2015_es2020_or_ESNext: diag(6016, ts.DiagnosticCategory.Message, "Specify_module_code_generation_Colon_none_commonjs_amd_system_umd_es2015_es2020_or_ESNext_6016", "Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', 'es2020', or 'ESNext'."),
+        Specify_ECMAScript_target_version: diag(6015, ts.DiagnosticCategory.Message, "Specify_ECMAScript_target_version_6015", "Specify ECMAScript target version."),
+        Specify_module_code_generation: diag(6016, ts.DiagnosticCategory.Message, "Specify_module_code_generation_6016", "Specify module code generation."),
         Print_this_message: diag(6017, ts.DiagnosticCategory.Message, "Print_this_message_6017", "Print this message."),
         Print_the_compiler_s_version: diag(6019, ts.DiagnosticCategory.Message, "Print_the_compiler_s_version_6019", "Print the compiler's version."),
         Compile_the_project_given_the_path_to_its_configuration_file_or_to_a_folder_with_a_tsconfig_json: diag(6020, ts.DiagnosticCategory.Message, "Compile_the_project_given_the_path_to_its_configuration_file_or_to_a_folder_with_a_tsconfig_json_6020", "Compile the project given the path to its configuration file, or to a folder with a 'tsconfig.json'."),
@@ -8931,7 +9076,7 @@
         Do_not_report_errors_on_unreachable_code: diag(6077, ts.DiagnosticCategory.Message, "Do_not_report_errors_on_unreachable_code_6077", "Do not report errors on unreachable code."),
         Disallow_inconsistently_cased_references_to_the_same_file: diag(6078, ts.DiagnosticCategory.Message, "Disallow_inconsistently_cased_references_to_the_same_file_6078", "Disallow inconsistently-cased references to the same file."),
         Specify_library_files_to_be_included_in_the_compilation: diag(6079, ts.DiagnosticCategory.Message, "Specify_library_files_to_be_included_in_the_compilation_6079", "Specify library files to be included in the compilation."),
-        Specify_JSX_code_generation_Colon_preserve_react_native_react_react_jsx_or_react_jsxdev: diag(6080, ts.DiagnosticCategory.Message, "Specify_JSX_code_generation_Colon_preserve_react_native_react_react_jsx_or_react_jsxdev_6080", "Specify JSX code generation: 'preserve', 'react-native', 'react', 'react-jsx' or 'react-jsxdev'."),
+        Specify_JSX_code_generation: diag(6080, ts.DiagnosticCategory.Message, "Specify_JSX_code_generation_6080", "Specify JSX code generation."),
         File_0_has_an_unsupported_extension_so_skipping_it: diag(6081, ts.DiagnosticCategory.Message, "File_0_has_an_unsupported_extension_so_skipping_it_6081", "File '{0}' has an unsupported extension, so skipping it."),
         Only_amd_and_system_modules_are_supported_alongside_0: diag(6082, ts.DiagnosticCategory.Error, "Only_amd_and_system_modules_are_supported_alongside_0_6082", "Only 'amd' and 'system' modules are supported alongside --{0}."),
         Base_directory_to_resolve_non_absolute_module_names: diag(6083, ts.DiagnosticCategory.Message, "Base_directory_to_resolve_non_absolute_module_names_6083", "Base directory to resolve non-absolute module names."),
@@ -9013,7 +9158,7 @@
         List_of_folders_to_include_type_definitions_from: diag(6161, ts.DiagnosticCategory.Message, "List_of_folders_to_include_type_definitions_from_6161", "List of folders to include type definitions from."),
         Disable_size_limitations_on_JavaScript_projects: diag(6162, ts.DiagnosticCategory.Message, "Disable_size_limitations_on_JavaScript_projects_6162", "Disable size limitations on JavaScript projects."),
         The_character_set_of_the_input_files: diag(6163, ts.DiagnosticCategory.Message, "The_character_set_of_the_input_files_6163", "The character set of the input files."),
-        Emit_a_UTF_8_Byte_Order_Mark_BOM_in_the_beginning_of_output_files: diag(6164, ts.DiagnosticCategory.Message, "Emit_a_UTF_8_Byte_Order_Mark_BOM_in_the_beginning_of_output_files_6164", "Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files."),
+        Emit_a_UTF_8_Byte_Order_Mark_BOM_in_the_beginning_of_output_files: diag(6622, ts.DiagnosticCategory.Message, "Emit_a_UTF_8_Byte_Order_Mark_BOM_in_the_beginning_of_output_files_6622", "Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files."),
         Do_not_truncate_error_messages: diag(6165, ts.DiagnosticCategory.Message, "Do_not_truncate_error_messages_6165", "Do not truncate error messages."),
         Output_directory_for_generated_declaration_files: diag(6166, ts.DiagnosticCategory.Message, "Output_directory_for_generated_declaration_files_6166", "Output directory for generated declaration files."),
         A_series_of_entries_which_re_map_imports_to_lookup_locations_relative_to_the_baseUrl: diag(6167, ts.DiagnosticCategory.Message, "A_series_of_entries_which_re_map_imports_to_lookup_locations_relative_to_the_baseUrl_6167", "A series of entries which re-map imports to lookup locations relative to the 'baseUrl'."),
@@ -9021,20 +9166,12 @@
         Show_all_compiler_options: diag(6169, ts.DiagnosticCategory.Message, "Show_all_compiler_options_6169", "Show all compiler options."),
         Deprecated_Use_outFile_instead_Concatenate_and_emit_output_to_single_file: diag(6170, ts.DiagnosticCategory.Message, "Deprecated_Use_outFile_instead_Concatenate_and_emit_output_to_single_file_6170", "[Deprecated] Use '--outFile' instead. Concatenate and emit output to single file"),
         Command_line_Options: diag(6171, ts.DiagnosticCategory.Message, "Command_line_Options_6171", "Command-line Options"),
-        Basic_Options: diag(6172, ts.DiagnosticCategory.Message, "Basic_Options_6172", "Basic Options"),
-        Strict_Type_Checking_Options: diag(6173, ts.DiagnosticCategory.Message, "Strict_Type_Checking_Options_6173", "Strict Type-Checking Options"),
-        Module_Resolution_Options: diag(6174, ts.DiagnosticCategory.Message, "Module_Resolution_Options_6174", "Module Resolution Options"),
-        Source_Map_Options: diag(6175, ts.DiagnosticCategory.Message, "Source_Map_Options_6175", "Source Map Options"),
-        Additional_Checks: diag(6176, ts.DiagnosticCategory.Message, "Additional_Checks_6176", "Additional Checks"),
-        Experimental_Options: diag(6177, ts.DiagnosticCategory.Message, "Experimental_Options_6177", "Experimental Options"),
-        Advanced_Options: diag(6178, ts.DiagnosticCategory.Message, "Advanced_Options_6178", "Advanced Options"),
         Provide_full_support_for_iterables_in_for_of_spread_and_destructuring_when_targeting_ES5_or_ES3: diag(6179, ts.DiagnosticCategory.Message, "Provide_full_support_for_iterables_in_for_of_spread_and_destructuring_when_targeting_ES5_or_ES3_6179", "Provide full support for iterables in 'for-of', spread, and destructuring when targeting 'ES5' or 'ES3'."),
         Enable_all_strict_type_checking_options: diag(6180, ts.DiagnosticCategory.Message, "Enable_all_strict_type_checking_options_6180", "Enable all strict type-checking options."),
         List_of_language_service_plugins: diag(6181, ts.DiagnosticCategory.Message, "List_of_language_service_plugins_6181", "List of language service plugins."),
         Scoped_package_detected_looking_in_0: diag(6182, ts.DiagnosticCategory.Message, "Scoped_package_detected_looking_in_0_6182", "Scoped package detected, looking in '{0}'"),
-        Reusing_resolution_of_module_0_to_file_1_from_old_program: diag(6183, ts.DiagnosticCategory.Message, "Reusing_resolution_of_module_0_to_file_1_from_old_program_6183", "Reusing resolution of module '{0}' to file '{1}' from old program."),
-        Reusing_module_resolutions_originating_in_0_since_resolutions_are_unchanged_from_old_program: diag(6184, ts.DiagnosticCategory.Message, "Reusing_module_resolutions_originating_in_0_since_resolutions_are_unchanged_from_old_program_6184", "Reusing module resolutions originating in '{0}' since resolutions are unchanged from old program."),
-        Disable_strict_checking_of_generic_signatures_in_function_types: diag(6185, ts.DiagnosticCategory.Message, "Disable_strict_checking_of_generic_signatures_in_function_types_6185", "Disable strict checking of generic signatures in function types."),
+        Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2: diag(6183, ts.DiagnosticCategory.Message, "Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2_6183", "Reusing resolution of module '{0}' from '{1}' of old program, it was successfully resolved to '{2}'."),
+        Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2_with_Package_ID_3: diag(6184, ts.DiagnosticCategory.Message, "Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2_with_Package__6184", "Reusing resolution of module '{0}' from '{1}' of old program, it was successfully resolved to '{2}' with Package ID '{3}'."),
         Enable_strict_checking_of_function_types: diag(6186, ts.DiagnosticCategory.Message, "Enable_strict_checking_of_function_types_6186", "Enable strict checking of function types."),
         Enable_strict_checking_of_property_initialization_in_classes: diag(6187, ts.DiagnosticCategory.Message, "Enable_strict_checking_of_property_initialization_in_classes_6187", "Enable strict checking of property initialization in classes."),
         Numeric_separators_are_not_allowed_here: diag(6188, ts.DiagnosticCategory.Error, "Numeric_separators_are_not_allowed_here_6188", "Numeric separators are not allowed here."),
@@ -9076,7 +9213,6 @@
         Specify_strategy_for_watching_file_Colon_FixedPollingInterval_default_PriorityPollingInterval_DynamicPriorityPolling_FixedChunkSizePolling_UseFsEvents_UseFsEventsOnParentDirectory: diag(6225, ts.DiagnosticCategory.Message, "Specify_strategy_for_watching_file_Colon_FixedPollingInterval_default_PriorityPollingInterval_Dynami_6225", "Specify strategy for watching file: 'FixedPollingInterval' (default), 'PriorityPollingInterval', 'DynamicPriorityPolling', 'FixedChunkSizePolling', 'UseFsEvents', 'UseFsEventsOnParentDirectory'."),
         Specify_strategy_for_watching_directory_on_platforms_that_don_t_support_recursive_watching_natively_Colon_UseFsEvents_default_FixedPollingInterval_DynamicPriorityPolling_FixedChunkSizePolling: diag(6226, ts.DiagnosticCategory.Message, "Specify_strategy_for_watching_directory_on_platforms_that_don_t_support_recursive_watching_natively__6226", "Specify strategy for watching directory on platforms that don't support recursive watching natively: 'UseFsEvents' (default), 'FixedPollingInterval', 'DynamicPriorityPolling', 'FixedChunkSizePolling'."),
         Specify_strategy_for_creating_a_polling_watch_when_it_fails_to_create_using_file_system_events_Colon_FixedInterval_default_PriorityInterval_DynamicPriority_FixedChunkSize: diag(6227, ts.DiagnosticCategory.Message, "Specify_strategy_for_creating_a_polling_watch_when_it_fails_to_create_using_file_system_events_Colon_6227", "Specify strategy for creating a polling watch when it fails to create using file system events: 'FixedInterval' (default), 'PriorityInterval', 'DynamicPriority', 'FixedChunkSize'."),
-        Synchronously_call_callbacks_and_update_the_state_of_directory_watchers_on_platforms_that_don_t_support_recursive_watching_natively: diag(6228, ts.DiagnosticCategory.Message, "Synchronously_call_callbacks_and_update_the_state_of_directory_watchers_on_platforms_that_don_t_supp_6228", "Synchronously call callbacks and update the state of directory watchers on platforms that don't support recursive watching natively."),
         Tag_0_expects_at_least_1_arguments_but_the_JSX_factory_2_provides_at_most_3: diag(6229, ts.DiagnosticCategory.Error, "Tag_0_expects_at_least_1_arguments_but_the_JSX_factory_2_provides_at_most_3_6229", "Tag '{0}' expects at least '{1}' arguments, but the JSX factory '{2}' provides at most '{3}'."),
         Option_0_can_only_be_specified_in_tsconfig_json_file_or_set_to_false_or_null_on_command_line: diag(6230, ts.DiagnosticCategory.Error, "Option_0_can_only_be_specified_in_tsconfig_json_file_or_set_to_false_or_null_on_command_line_6230", "Option '{0}' can only be specified in 'tsconfig.json' file or set to 'false' or 'null' on command line."),
         Could_not_resolve_the_path_0_with_the_extensions_Colon_1: diag(6231, ts.DiagnosticCategory.Error, "Could_not_resolve_the_path_0_with_the_extensions_Colon_1_6231", "Could not resolve the path '{0}' with the extensions: {1}."),
@@ -9091,6 +9227,21 @@
         File_0_does_not_exist_according_to_earlier_cached_lookups: diag(6240, ts.DiagnosticCategory.Message, "File_0_does_not_exist_according_to_earlier_cached_lookups_6240", "File '{0}' does not exist according to earlier cached lookups."),
         Resolution_for_type_reference_directive_0_was_found_in_cache_from_location_1: diag(6241, ts.DiagnosticCategory.Message, "Resolution_for_type_reference_directive_0_was_found_in_cache_from_location_1_6241", "Resolution for type reference directive '{0}' was found in cache from location '{1}'."),
         Resolving_type_reference_directive_0_containing_file_1: diag(6242, ts.DiagnosticCategory.Message, "Resolving_type_reference_directive_0_containing_file_1_6242", "======== Resolving type reference directive '{0}', containing file '{1}'. ========"),
+        Interpret_optional_property_types_as_written_rather_than_adding_undefined: diag(6243, ts.DiagnosticCategory.Message, "Interpret_optional_property_types_as_written_rather_than_adding_undefined_6243", "Interpret optional property types as written, rather than adding 'undefined'."),
+        Modules: diag(6244, ts.DiagnosticCategory.Message, "Modules_6244", "Modules"),
+        File_Management: diag(6245, ts.DiagnosticCategory.Message, "File_Management_6245", "File Management"),
+        Emit: diag(6246, ts.DiagnosticCategory.Message, "Emit_6246", "Emit"),
+        JavaScript_Support: diag(6247, ts.DiagnosticCategory.Message, "JavaScript_Support_6247", "JavaScript Support"),
+        Type_Checking: diag(6248, ts.DiagnosticCategory.Message, "Type_Checking_6248", "Type Checking"),
+        Editor_Support: diag(6249, ts.DiagnosticCategory.Message, "Editor_Support_6249", "Editor Support"),
+        Watch_and_Build_Modes: diag(6250, ts.DiagnosticCategory.Message, "Watch_and_Build_Modes_6250", "Watch and Build Modes"),
+        Compiler_Diagnostics: diag(6251, ts.DiagnosticCategory.Message, "Compiler_Diagnostics_6251", "Compiler Diagnostics"),
+        Interop_Constraints: diag(6252, ts.DiagnosticCategory.Message, "Interop_Constraints_6252", "Interop Constraints"),
+        Backwards_Compatibility: diag(6253, ts.DiagnosticCategory.Message, "Backwards_Compatibility_6253", "Backwards Compatibility"),
+        Language_and_Environment: diag(6254, ts.DiagnosticCategory.Message, "Language_and_Environment_6254", "Language and Environment"),
+        Projects: diag(6255, ts.DiagnosticCategory.Message, "Projects_6255", "Projects"),
+        Output_Formatting: diag(6256, ts.DiagnosticCategory.Message, "Output_Formatting_6256", "Output Formatting"),
+        Completeness: diag(6257, ts.DiagnosticCategory.Message, "Completeness_6257", "Completeness"),
         Projects_to_reference: diag(6300, ts.DiagnosticCategory.Message, "Projects_to_reference_6300", "Projects to reference"),
         Enable_project_compilation: diag(6302, ts.DiagnosticCategory.Message, "Enable_project_compilation_6302", "Enable project compilation"),
         Composite_projects_may_not_disable_declaration_emit: diag(6304, ts.DiagnosticCategory.Error, "Composite_projects_may_not_disable_declaration_emit_6304", "Composite projects may not disable declaration emit."),
@@ -9116,9 +9267,7 @@
         Project_0_can_t_be_built_because_its_dependency_1_has_errors: diag(6363, ts.DiagnosticCategory.Message, "Project_0_can_t_be_built_because_its_dependency_1_has_errors_6363", "Project '{0}' can't be built because its dependency '{1}' has errors"),
         Build_one_or_more_projects_and_their_dependencies_if_out_of_date: diag(6364, ts.DiagnosticCategory.Message, "Build_one_or_more_projects_and_their_dependencies_if_out_of_date_6364", "Build one or more projects and their dependencies, if out of date"),
         Delete_the_outputs_of_all_projects: diag(6365, ts.DiagnosticCategory.Message, "Delete_the_outputs_of_all_projects_6365", "Delete the outputs of all projects"),
-        Enable_verbose_logging: diag(6366, ts.DiagnosticCategory.Message, "Enable_verbose_logging_6366", "Enable verbose logging"),
         Show_what_would_be_built_or_deleted_if_specified_with_clean: diag(6367, ts.DiagnosticCategory.Message, "Show_what_would_be_built_or_deleted_if_specified_with_clean_6367", "Show what would be built (or deleted, if specified with '--clean')"),
-        Build_all_projects_including_those_that_appear_to_be_up_to_date: diag(6368, ts.DiagnosticCategory.Message, "Build_all_projects_including_those_that_appear_to_be_up_to_date_6368", "Build all projects, including those that appear to be up to date"),
         Option_build_must_be_the_first_command_line_argument: diag(6369, ts.DiagnosticCategory.Error, "Option_build_must_be_the_first_command_line_argument_6369", "Option '--build' must be the first command line argument."),
         Options_0_and_1_cannot_be_combined: diag(6370, ts.DiagnosticCategory.Error, "Options_0_and_1_cannot_be_combined_6370", "Options '{0}' and '{1}' cannot be combined."),
         Updating_unchanged_output_timestamps_of_project_0: diag(6371, ts.DiagnosticCategory.Message, "Updating_unchanged_output_timestamps_of_project_0_6371", "Updating unchanged output timestamps of project '{0}'..."),
@@ -9139,15 +9288,167 @@
         Performance_timings_for_diagnostics_or_extendedDiagnostics_are_not_available_in_this_session_A_native_implementation_of_the_Web_Performance_API_could_not_be_found: diag(6386, ts.DiagnosticCategory.Message, "Performance_timings_for_diagnostics_or_extendedDiagnostics_are_not_available_in_this_session_A_nativ_6386", "Performance timings for '--diagnostics' or '--extendedDiagnostics' are not available in this session. A native implementation of the Web Performance API could not be found."),
         The_signature_0_of_1_is_deprecated: diag(6387, ts.DiagnosticCategory.Suggestion, "The_signature_0_of_1_is_deprecated_6387", "The signature '{0}' of '{1}' is deprecated.", /*reportsUnnecessary*/ undefined, /*elidedInCompatabilityPyramid*/ undefined, /*reportsDeprecated*/ true),
         Project_0_is_being_forcibly_rebuilt: diag(6388, ts.DiagnosticCategory.Message, "Project_0_is_being_forcibly_rebuilt_6388", "Project '{0}' is being forcibly rebuilt"),
+        Reusing_resolution_of_module_0_from_1_of_old_program_it_was_not_resolved: diag(6389, ts.DiagnosticCategory.Message, "Reusing_resolution_of_module_0_from_1_of_old_program_it_was_not_resolved_6389", "Reusing resolution of module '{0}' from '{1}' of old program, it was not resolved."),
+        Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved_to_2: diag(6390, ts.DiagnosticCategory.Message, "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved__6390", "Reusing resolution of type reference directive '{0}' from '{1}' of old program, it was successfully resolved to '{2}'."),
+        Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved_to_2_with_Package_ID_3: diag(6391, ts.DiagnosticCategory.Message, "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved__6391", "Reusing resolution of type reference directive '{0}' from '{1}' of old program, it was successfully resolved to '{2}' with Package ID '{3}'."),
+        Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_not_resolved: diag(6392, ts.DiagnosticCategory.Message, "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_not_resolved_6392", "Reusing resolution of type reference directive '{0}' from '{1}' of old program, it was not resolved."),
+        Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_3: diag(6393, ts.DiagnosticCategory.Message, "Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_6393", "Reusing resolution of module '{0}' from '{1}' found in cache from location '{2}', it was successfully resolved to '{3}'."),
+        Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_3_with_Package_ID_4: diag(6394, ts.DiagnosticCategory.Message, "Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_6394", "Reusing resolution of module '{0}' from '{1}' found in cache from location '{2}', it was successfully resolved to '{3}' with Package ID '{4}'."),
+        Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_not_resolved: diag(6395, ts.DiagnosticCategory.Message, "Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_not_resolved_6395", "Reusing resolution of module '{0}' from '{1}' found in cache from location '{2}', it was not resolved."),
+        Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_3: diag(6396, ts.DiagnosticCategory.Message, "Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_succes_6396", "Reusing resolution of type reference directive '{0}' from '{1}' found in cache from location '{2}', it was successfully resolved to '{3}'."),
+        Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_3_with_Package_ID_4: diag(6397, ts.DiagnosticCategory.Message, "Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_succes_6397", "Reusing resolution of type reference directive '{0}' from '{1}' found in cache from location '{2}', it was successfully resolved to '{3}' with Package ID '{4}'."),
+        Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_not_resolved: diag(6398, ts.DiagnosticCategory.Message, "Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_not_re_6398", "Reusing resolution of type reference directive '{0}' from '{1}' found in cache from location '{2}', it was not resolved."),
         The_expected_type_comes_from_property_0_which_is_declared_here_on_type_1: diag(6500, ts.DiagnosticCategory.Message, "The_expected_type_comes_from_property_0_which_is_declared_here_on_type_1_6500", "The expected type comes from property '{0}' which is declared here on type '{1}'"),
         The_expected_type_comes_from_this_index_signature: diag(6501, ts.DiagnosticCategory.Message, "The_expected_type_comes_from_this_index_signature_6501", "The expected type comes from this index signature."),
         The_expected_type_comes_from_the_return_type_of_this_signature: diag(6502, ts.DiagnosticCategory.Message, "The_expected_type_comes_from_the_return_type_of_this_signature_6502", "The expected type comes from the return type of this signature."),
         Print_names_of_files_that_are_part_of_the_compilation_and_then_stop_processing: diag(6503, ts.DiagnosticCategory.Message, "Print_names_of_files_that_are_part_of_the_compilation_and_then_stop_processing_6503", "Print names of files that are part of the compilation and then stop processing."),
         File_0_is_a_JavaScript_file_Did_you_mean_to_enable_the_allowJs_option: diag(6504, ts.DiagnosticCategory.Error, "File_0_is_a_JavaScript_file_Did_you_mean_to_enable_the_allowJs_option_6504", "File '{0}' is a JavaScript file. Did you mean to enable the 'allowJs' option?"),
         Print_names_of_files_and_the_reason_they_are_part_of_the_compilation: diag(6505, ts.DiagnosticCategory.Message, "Print_names_of_files_and_the_reason_they_are_part_of_the_compilation_6505", "Print names of files and the reason they are part of the compilation."),
-        Include_undefined_in_index_signature_results: diag(6800, ts.DiagnosticCategory.Message, "Include_undefined_in_index_signature_results_6800", "Include 'undefined' in index signature results"),
-        Ensure_overriding_members_in_derived_classes_are_marked_with_an_override_modifier: diag(6801, ts.DiagnosticCategory.Message, "Ensure_overriding_members_in_derived_classes_are_marked_with_an_override_modifier_6801", "Ensure overriding members in derived classes are marked with an 'override' modifier."),
-        Require_undeclared_properties_from_index_signatures_to_use_element_accesses: diag(6802, ts.DiagnosticCategory.Message, "Require_undeclared_properties_from_index_signatures_to_use_element_accesses_6802", "Require undeclared properties from index signatures to use element accesses."),
+        Consider_adding_a_declare_modifier_to_this_class: diag(6506, ts.DiagnosticCategory.Message, "Consider_adding_a_declare_modifier_to_this_class_6506", "Consider adding a 'declare' modifier to this class."),
+        Allow_JavaScript_files_to_be_a_part_of_your_program_Use_the_checkJS_option_to_get_errors_from_these_files: diag(6600, ts.DiagnosticCategory.Message, "Allow_JavaScript_files_to_be_a_part_of_your_program_Use_the_checkJS_option_to_get_errors_from_these__6600", "Allow JavaScript files to be a part of your program. Use the `checkJS` option to get errors from these files."),
+        Allow_import_x_from_y_when_a_module_doesn_t_have_a_default_export: diag(6601, ts.DiagnosticCategory.Message, "Allow_import_x_from_y_when_a_module_doesn_t_have_a_default_export_6601", "Allow 'import x from y' when a module doesn't have a default export."),
+        Allow_accessing_UMD_globals_from_modules: diag(6602, ts.DiagnosticCategory.Message, "Allow_accessing_UMD_globals_from_modules_6602", "Allow accessing UMD globals from modules."),
+        Disable_error_reporting_for_unreachable_code: diag(6603, ts.DiagnosticCategory.Message, "Disable_error_reporting_for_unreachable_code_6603", "Disable error reporting for unreachable code."),
+        Disable_error_reporting_for_unused_labels: diag(6604, ts.DiagnosticCategory.Message, "Disable_error_reporting_for_unused_labels_6604", "Disable error reporting for unused labels."),
+        Ensure_use_strict_is_always_emitted: diag(6605, ts.DiagnosticCategory.Message, "Ensure_use_strict_is_always_emitted_6605", "Ensure 'use strict' is always emitted."),
+        Have_recompiles_in_projects_that_use_incremental_and_watch_mode_assume_that_changes_within_a_file_will_only_affect_files_directly_depending_on_it: diag(6606, ts.DiagnosticCategory.Message, "Have_recompiles_in_projects_that_use_incremental_and_watch_mode_assume_that_changes_within_a_file_wi_6606", "Have recompiles in projects that use `incremental` and `watch` mode assume that changes within a file will only affect files directly depending on it."),
+        Specify_the_base_directory_to_resolve_non_relative_module_names: diag(6607, ts.DiagnosticCategory.Message, "Specify_the_base_directory_to_resolve_non_relative_module_names_6607", "Specify the base directory to resolve non-relative module names."),
+        No_longer_supported_In_early_versions_manually_set_the_text_encoding_for_reading_files: diag(6608, ts.DiagnosticCategory.Message, "No_longer_supported_In_early_versions_manually_set_the_text_encoding_for_reading_files_6608", "No longer supported. In early versions, manually set the text encoding for reading files."),
+        Enable_error_reporting_in_type_checked_JavaScript_files: diag(6609, ts.DiagnosticCategory.Message, "Enable_error_reporting_in_type_checked_JavaScript_files_6609", "Enable error reporting in type-checked JavaScript files."),
+        Enable_constraints_that_allow_a_TypeScript_project_to_be_used_with_project_references: diag(6611, ts.DiagnosticCategory.Message, "Enable_constraints_that_allow_a_TypeScript_project_to_be_used_with_project_references_6611", "Enable constraints that allow a TypeScript project to be used with project references."),
+        Generate_d_ts_files_from_TypeScript_and_JavaScript_files_in_your_project: diag(6612, ts.DiagnosticCategory.Message, "Generate_d_ts_files_from_TypeScript_and_JavaScript_files_in_your_project_6612", "Generate .d.ts files from TypeScript and JavaScript files in your project."),
+        Specify_the_output_directory_for_generated_declaration_files: diag(6613, ts.DiagnosticCategory.Message, "Specify_the_output_directory_for_generated_declaration_files_6613", "Specify the output directory for generated declaration files."),
+        Create_sourcemaps_for_d_ts_files: diag(6614, ts.DiagnosticCategory.Message, "Create_sourcemaps_for_d_ts_files_6614", "Create sourcemaps for d.ts files."),
+        Output_compiler_performance_information_after_building: diag(6615, ts.DiagnosticCategory.Message, "Output_compiler_performance_information_after_building_6615", "Output compiler performance information after building."),
+        Disables_inference_for_type_acquisition_by_looking_at_filenames_in_a_project: diag(6616, ts.DiagnosticCategory.Message, "Disables_inference_for_type_acquisition_by_looking_at_filenames_in_a_project_6616", "Disables inference for type acquisition by looking at filenames in a project."),
+        Reduce_the_number_of_projects_loaded_automatically_by_TypeScript: diag(6617, ts.DiagnosticCategory.Message, "Reduce_the_number_of_projects_loaded_automatically_by_TypeScript_6617", "Reduce the number of projects loaded automatically by TypeScript."),
+        Remove_the_20mb_cap_on_total_source_code_size_for_JavaScript_files_in_the_TypeScript_language_server: diag(6618, ts.DiagnosticCategory.Message, "Remove_the_20mb_cap_on_total_source_code_size_for_JavaScript_files_in_the_TypeScript_language_server_6618", "Remove the 20mb cap on total source code size for JavaScript files in the TypeScript language server."),
+        Opt_a_project_out_of_multi_project_reference_checking_when_editing: diag(6619, ts.DiagnosticCategory.Message, "Opt_a_project_out_of_multi_project_reference_checking_when_editing_6619", "Opt a project out of multi-project reference checking when editing."),
+        Disable_preferring_source_files_instead_of_declaration_files_when_referencing_composite_projects: diag(6620, ts.DiagnosticCategory.Message, "Disable_preferring_source_files_instead_of_declaration_files_when_referencing_composite_projects_6620", "Disable preferring source files instead of declaration files when referencing composite projects"),
+        Emit_more_compliant_but_verbose_and_less_performant_JavaScript_for_iteration: diag(6621, ts.DiagnosticCategory.Message, "Emit_more_compliant_but_verbose_and_less_performant_JavaScript_for_iteration_6621", "Emit more compliant, but verbose and less performant JavaScript for iteration."),
+        Only_output_d_ts_files_and_not_JavaScript_files: diag(6623, ts.DiagnosticCategory.Message, "Only_output_d_ts_files_and_not_JavaScript_files_6623", "Only output d.ts files and not JavaScript files."),
+        Emit_design_type_metadata_for_decorated_declarations_in_source_files: diag(6624, ts.DiagnosticCategory.Message, "Emit_design_type_metadata_for_decorated_declarations_in_source_files_6624", "Emit design-type metadata for decorated declarations in source files."),
+        Disable_the_type_acquisition_for_JavaScript_projects: diag(6625, ts.DiagnosticCategory.Message, "Disable_the_type_acquisition_for_JavaScript_projects_6625", "Disable the type acquisition for JavaScript projects"),
+        Emit_additional_JavaScript_to_ease_support_for_importing_CommonJS_modules_This_enables_allowSyntheticDefaultImports_for_type_compatibility: diag(6626, ts.DiagnosticCategory.Message, "Emit_additional_JavaScript_to_ease_support_for_importing_CommonJS_modules_This_enables_allowSyntheti_6626", "Emit additional JavaScript to ease support for importing CommonJS modules. This enables `allowSyntheticDefaultImports` for type compatibility."),
+        Filters_results_from_the_include_option: diag(6627, ts.DiagnosticCategory.Message, "Filters_results_from_the_include_option_6627", "Filters results from the `include` option."),
+        Remove_a_list_of_directories_from_the_watch_process: diag(6628, ts.DiagnosticCategory.Message, "Remove_a_list_of_directories_from_the_watch_process_6628", "Remove a list of directories from the watch process."),
+        Remove_a_list_of_files_from_the_watch_mode_s_processing: diag(6629, ts.DiagnosticCategory.Message, "Remove_a_list_of_files_from_the_watch_mode_s_processing_6629", "Remove a list of files from the watch mode's processing."),
+        Enable_experimental_support_for_TC39_stage_2_draft_decorators: diag(6630, ts.DiagnosticCategory.Message, "Enable_experimental_support_for_TC39_stage_2_draft_decorators_6630", "Enable experimental support for TC39 stage 2 draft decorators."),
+        Print_files_read_during_the_compilation_including_why_it_was_included: diag(6631, ts.DiagnosticCategory.Message, "Print_files_read_during_the_compilation_including_why_it_was_included_6631", "Print files read during the compilation including why it was included."),
+        Output_more_detailed_compiler_performance_information_after_building: diag(6632, ts.DiagnosticCategory.Message, "Output_more_detailed_compiler_performance_information_after_building_6632", "Output more detailed compiler performance information after building."),
+        Specify_one_or_more_path_or_node_module_references_to_base_configuration_files_from_which_settings_are_inherited: diag(6633, ts.DiagnosticCategory.Message, "Specify_one_or_more_path_or_node_module_references_to_base_configuration_files_from_which_settings_a_6633", "Specify one or more path or node module references to base configuration files from which settings are inherited."),
+        Specify_what_approach_the_watcher_should_use_if_the_system_runs_out_of_native_file_watchers: diag(6634, ts.DiagnosticCategory.Message, "Specify_what_approach_the_watcher_should_use_if_the_system_runs_out_of_native_file_watchers_6634", "Specify what approach the watcher should use if the system runs out of native file watchers."),
+        Include_a_list_of_files_This_does_not_support_glob_patterns_as_opposed_to_include: diag(6635, ts.DiagnosticCategory.Message, "Include_a_list_of_files_This_does_not_support_glob_patterns_as_opposed_to_include_6635", "Include a list of files. This does not support glob patterns, as opposed to `include`."),
+        Build_all_projects_including_those_that_appear_to_be_up_to_date: diag(6636, ts.DiagnosticCategory.Message, "Build_all_projects_including_those_that_appear_to_be_up_to_date_6636", "Build all projects, including those that appear to be up to date"),
+        Ensure_that_casing_is_correct_in_imports: diag(6637, ts.DiagnosticCategory.Message, "Ensure_that_casing_is_correct_in_imports_6637", "Ensure that casing is correct in imports."),
+        Emit_a_v8_CPU_profile_of_the_compiler_run_for_debugging: diag(6638, ts.DiagnosticCategory.Message, "Emit_a_v8_CPU_profile_of_the_compiler_run_for_debugging_6638", "Emit a v8 CPU profile of the compiler run for debugging."),
+        Allow_importing_helper_functions_from_tslib_once_per_project_instead_of_including_them_per_file: diag(6639, ts.DiagnosticCategory.Message, "Allow_importing_helper_functions_from_tslib_once_per_project_instead_of_including_them_per_file_6639", "Allow importing helper functions from tslib once per project, instead of including them per-file."),
+        Specify_a_list_of_glob_patterns_that_match_files_to_be_included_in_compilation: diag(6641, ts.DiagnosticCategory.Message, "Specify_a_list_of_glob_patterns_that_match_files_to_be_included_in_compilation_6641", "Specify a list of glob patterns that match files to be included in compilation."),
+        Save_tsbuildinfo_files_to_allow_for_incremental_compilation_of_projects: diag(6642, ts.DiagnosticCategory.Message, "Save_tsbuildinfo_files_to_allow_for_incremental_compilation_of_projects_6642", "Save .tsbuildinfo files to allow for incremental compilation of projects."),
+        Include_sourcemap_files_inside_the_emitted_JavaScript: diag(6643, ts.DiagnosticCategory.Message, "Include_sourcemap_files_inside_the_emitted_JavaScript_6643", "Include sourcemap files inside the emitted JavaScript."),
+        Include_source_code_in_the_sourcemaps_inside_the_emitted_JavaScript: diag(6644, ts.DiagnosticCategory.Message, "Include_source_code_in_the_sourcemaps_inside_the_emitted_JavaScript_6644", "Include source code in the sourcemaps inside the emitted JavaScript."),
+        Ensure_that_each_file_can_be_safely_transpiled_without_relying_on_other_imports: diag(6645, ts.DiagnosticCategory.Message, "Ensure_that_each_file_can_be_safely_transpiled_without_relying_on_other_imports_6645", "Ensure that each file can be safely transpiled without relying on other imports."),
+        Specify_what_JSX_code_is_generated: diag(6646, ts.DiagnosticCategory.Message, "Specify_what_JSX_code_is_generated_6646", "Specify what JSX code is generated."),
+        Specify_the_JSX_factory_function_used_when_targeting_React_JSX_emit_e_g_React_createElement_or_h: diag(6647, ts.DiagnosticCategory.Message, "Specify_the_JSX_factory_function_used_when_targeting_React_JSX_emit_e_g_React_createElement_or_h_6647", "Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'"),
+        Specify_the_JSX_Fragment_reference_used_for_fragments_when_targeting_React_JSX_emit_e_g_React_Fragment_or_Fragment: diag(6648, ts.DiagnosticCategory.Message, "Specify_the_JSX_Fragment_reference_used_for_fragments_when_targeting_React_JSX_emit_e_g_React_Fragme_6648", "Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'."),
+        Specify_module_specifier_used_to_import_the_JSX_factory_functions_when_using_jsx_Colon_react_jsx_Asterisk: diag(6649, ts.DiagnosticCategory.Message, "Specify_module_specifier_used_to_import_the_JSX_factory_functions_when_using_jsx_Colon_react_jsx_Ast_6649", "Specify module specifier used to import the JSX factory functions when using `jsx: react-jsx*`.`"),
+        Make_keyof_only_return_strings_instead_of_string_numbers_or_symbols_Legacy_option: diag(6650, ts.DiagnosticCategory.Message, "Make_keyof_only_return_strings_instead_of_string_numbers_or_symbols_Legacy_option_6650", "Make keyof only return strings instead of string, numbers or symbols. Legacy option."),
+        Specify_a_set_of_bundled_library_declaration_files_that_describe_the_target_runtime_environment: diag(6651, ts.DiagnosticCategory.Message, "Specify_a_set_of_bundled_library_declaration_files_that_describe_the_target_runtime_environment_6651", "Specify a set of bundled library declaration files that describe the target runtime environment."),
+        Print_the_names_of_emitted_files_after_a_compilation: diag(6652, ts.DiagnosticCategory.Message, "Print_the_names_of_emitted_files_after_a_compilation_6652", "Print the names of emitted files after a compilation."),
+        Print_all_of_the_files_read_during_the_compilation: diag(6653, ts.DiagnosticCategory.Message, "Print_all_of_the_files_read_during_the_compilation_6653", "Print all of the files read during the compilation."),
+        Set_the_language_of_the_messaging_from_TypeScript_This_does_not_affect_emit: diag(6654, ts.DiagnosticCategory.Message, "Set_the_language_of_the_messaging_from_TypeScript_This_does_not_affect_emit_6654", "Set the language of the messaging from TypeScript. This does not affect emit."),
+        Specify_the_maximum_folder_depth_used_for_checking_JavaScript_files_from_node_modules_Only_applicable_with_allowJs: diag(6656, ts.DiagnosticCategory.Message, "Specify_the_maximum_folder_depth_used_for_checking_JavaScript_files_from_node_modules_Only_applicabl_6656", "Specify the maximum folder depth used for checking JavaScript files from `node_modules`. Only applicable with `allowJs`."),
+        Specify_what_module_code_is_generated: diag(6657, ts.DiagnosticCategory.Message, "Specify_what_module_code_is_generated_6657", "Specify what module code is generated."),
+        Specify_how_TypeScript_looks_up_a_file_from_a_given_module_specifier: diag(6658, ts.DiagnosticCategory.Message, "Specify_how_TypeScript_looks_up_a_file_from_a_given_module_specifier_6658", "Specify how TypeScript looks up a file from a given module specifier."),
+        Set_the_newline_character_for_emitting_files: diag(6659, ts.DiagnosticCategory.Message, "Set_the_newline_character_for_emitting_files_6659", "Set the newline character for emitting files."),
+        Disable_emitting_files_from_a_compilation: diag(6660, ts.DiagnosticCategory.Message, "Disable_emitting_files_from_a_compilation_6660", "Disable emitting files from a compilation."),
+        Disable_generating_custom_helper_functions_like_extends_in_compiled_output: diag(6661, ts.DiagnosticCategory.Message, "Disable_generating_custom_helper_functions_like_extends_in_compiled_output_6661", "Disable generating custom helper functions like `__extends` in compiled output."),
+        Disable_emitting_files_if_any_type_checking_errors_are_reported: diag(6662, ts.DiagnosticCategory.Message, "Disable_emitting_files_if_any_type_checking_errors_are_reported_6662", "Disable emitting files if any type checking errors are reported."),
+        Disable_truncating_types_in_error_messages: diag(6663, ts.DiagnosticCategory.Message, "Disable_truncating_types_in_error_messages_6663", "Disable truncating types in error messages."),
+        Enable_error_reporting_for_fallthrough_cases_in_switch_statements: diag(6664, ts.DiagnosticCategory.Message, "Enable_error_reporting_for_fallthrough_cases_in_switch_statements_6664", "Enable error reporting for fallthrough cases in switch statements."),
+        Enable_error_reporting_for_expressions_and_declarations_with_an_implied_any_type: diag(6665, ts.DiagnosticCategory.Message, "Enable_error_reporting_for_expressions_and_declarations_with_an_implied_any_type_6665", "Enable error reporting for expressions and declarations with an implied `any` type.."),
+        Ensure_overriding_members_in_derived_classes_are_marked_with_an_override_modifier: diag(6666, ts.DiagnosticCategory.Message, "Ensure_overriding_members_in_derived_classes_are_marked_with_an_override_modifier_6666", "Ensure overriding members in derived classes are marked with an override modifier."),
+        Enable_error_reporting_for_codepaths_that_do_not_explicitly_return_in_a_function: diag(6667, ts.DiagnosticCategory.Message, "Enable_error_reporting_for_codepaths_that_do_not_explicitly_return_in_a_function_6667", "Enable error reporting for codepaths that do not explicitly return in a function."),
+        Enable_error_reporting_when_this_is_given_the_type_any: diag(6668, ts.DiagnosticCategory.Message, "Enable_error_reporting_when_this_is_given_the_type_any_6668", "Enable error reporting when `this` is given the type `any`."),
+        Disable_adding_use_strict_directives_in_emitted_JavaScript_files: diag(6669, ts.DiagnosticCategory.Message, "Disable_adding_use_strict_directives_in_emitted_JavaScript_files_6669", "Disable adding 'use strict' directives in emitted JavaScript files."),
+        Disable_including_any_library_files_including_the_default_lib_d_ts: diag(6670, ts.DiagnosticCategory.Message, "Disable_including_any_library_files_including_the_default_lib_d_ts_6670", "Disable including any library files, including the default lib.d.ts."),
+        Enforces_using_indexed_accessors_for_keys_declared_using_an_indexed_type: diag(6671, ts.DiagnosticCategory.Message, "Enforces_using_indexed_accessors_for_keys_declared_using_an_indexed_type_6671", "Enforces using indexed accessors for keys declared using an indexed type"),
+        Disallow_import_s_require_s_or_reference_s_from_expanding_the_number_of_files_TypeScript_should_add_to_a_project: diag(6672, ts.DiagnosticCategory.Message, "Disallow_import_s_require_s_or_reference_s_from_expanding_the_number_of_files_TypeScript_should_add__6672", "Disallow `import`s, `require`s or `<reference>`s from expanding the number of files TypeScript should add to a project."),
+        Disable_strict_checking_of_generic_signatures_in_function_types: diag(6673, ts.DiagnosticCategory.Message, "Disable_strict_checking_of_generic_signatures_in_function_types_6673", "Disable strict checking of generic signatures in function types."),
+        Add_undefined_to_a_type_when_accessed_using_an_index: diag(6674, ts.DiagnosticCategory.Message, "Add_undefined_to_a_type_when_accessed_using_an_index_6674", "Add `undefined` to a type when accessed using an index."),
+        Enable_error_reporting_when_a_local_variables_aren_t_read: diag(6675, ts.DiagnosticCategory.Message, "Enable_error_reporting_when_a_local_variables_aren_t_read_6675", "Enable error reporting when a local variables aren't read."),
+        Raise_an_error_when_a_function_parameter_isn_t_read: diag(6676, ts.DiagnosticCategory.Message, "Raise_an_error_when_a_function_parameter_isn_t_read_6676", "Raise an error when a function parameter isn't read"),
+        Deprecated_setting_Use_outFile_instead: diag(6677, ts.DiagnosticCategory.Message, "Deprecated_setting_Use_outFile_instead_6677", "Deprecated setting. Use `outFile` instead."),
+        Specify_an_output_folder_for_all_emitted_files: diag(6678, ts.DiagnosticCategory.Message, "Specify_an_output_folder_for_all_emitted_files_6678", "Specify an output folder for all emitted files."),
+        Specify_a_file_that_bundles_all_outputs_into_one_JavaScript_file_If_declaration_is_true_also_designates_a_file_that_bundles_all_d_ts_output: diag(6679, ts.DiagnosticCategory.Message, "Specify_a_file_that_bundles_all_outputs_into_one_JavaScript_file_If_declaration_is_true_also_designa_6679", "Specify a file that bundles all outputs into one JavaScript file. If `declaration` is true, also designates a file that bundles all .d.ts output."),
+        Specify_a_set_of_entries_that_re_map_imports_to_additional_lookup_locations: diag(6680, ts.DiagnosticCategory.Message, "Specify_a_set_of_entries_that_re_map_imports_to_additional_lookup_locations_6680", "Specify a set of entries that re-map imports to additional lookup locations."),
+        Specify_a_list_of_language_service_plugins_to_include: diag(6681, ts.DiagnosticCategory.Message, "Specify_a_list_of_language_service_plugins_to_include_6681", "Specify a list of language service plugins to include."),
+        Disable_erasing_const_enum_declarations_in_generated_code: diag(6682, ts.DiagnosticCategory.Message, "Disable_erasing_const_enum_declarations_in_generated_code_6682", "Disable erasing `const enum` declarations in generated code."),
+        Disable_resolving_symlinks_to_their_realpath_This_correlates_to_the_same_flag_in_node: diag(6683, ts.DiagnosticCategory.Message, "Disable_resolving_symlinks_to_their_realpath_This_correlates_to_the_same_flag_in_node_6683", "Disable resolving symlinks to their realpath. This correlates to the same flag in node."),
+        Disable_wiping_the_console_in_watch_mode: diag(6684, ts.DiagnosticCategory.Message, "Disable_wiping_the_console_in_watch_mode_6684", "Disable wiping the console in watch mode"),
+        Enable_color_and_formatting_in_TypeScript_s_output_to_make_compiler_errors_easier_to_read: diag(6685, ts.DiagnosticCategory.Message, "Enable_color_and_formatting_in_TypeScript_s_output_to_make_compiler_errors_easier_to_read_6685", "Enable color and formatting in TypeScript's output to make compiler errors easier to read"),
+        Specify_the_object_invoked_for_createElement_This_only_applies_when_targeting_react_JSX_emit: diag(6686, ts.DiagnosticCategory.Message, "Specify_the_object_invoked_for_createElement_This_only_applies_when_targeting_react_JSX_emit_6686", "Specify the object invoked for `createElement`. This only applies when targeting `react` JSX emit."),
+        Specify_an_array_of_objects_that_specify_paths_for_projects_Used_in_project_references: diag(6687, ts.DiagnosticCategory.Message, "Specify_an_array_of_objects_that_specify_paths_for_projects_Used_in_project_references_6687", "Specify an array of objects that specify paths for projects. Used in project references."),
+        Disable_emitting_comments: diag(6688, ts.DiagnosticCategory.Message, "Disable_emitting_comments_6688", "Disable emitting comments."),
+        Enable_importing_json_files: diag(6689, ts.DiagnosticCategory.Message, "Enable_importing_json_files_6689", "Enable importing .json files"),
+        Specify_the_root_folder_within_your_source_files: diag(6690, ts.DiagnosticCategory.Message, "Specify_the_root_folder_within_your_source_files_6690", "Specify the root folder within your source files."),
+        Allow_multiple_folders_to_be_treated_as_one_when_resolving_modules: diag(6691, ts.DiagnosticCategory.Message, "Allow_multiple_folders_to_be_treated_as_one_when_resolving_modules_6691", "Allow multiple folders to be treated as one when resolving modules."),
+        Skip_type_checking_d_ts_files_that_are_included_with_TypeScript: diag(6692, ts.DiagnosticCategory.Message, "Skip_type_checking_d_ts_files_that_are_included_with_TypeScript_6692", "Skip type checking .d.ts files that are included with TypeScript."),
+        Skip_type_checking_all_d_ts_files: diag(6693, ts.DiagnosticCategory.Message, "Skip_type_checking_all_d_ts_files_6693", "Skip type checking all .d.ts files."),
+        Create_source_map_files_for_emitted_JavaScript_files: diag(6694, ts.DiagnosticCategory.Message, "Create_source_map_files_for_emitted_JavaScript_files_6694", "Create source map files for emitted JavaScript files."),
+        Specify_the_root_path_for_debuggers_to_find_the_reference_source_code: diag(6695, ts.DiagnosticCategory.Message, "Specify_the_root_path_for_debuggers_to_find_the_reference_source_code_6695", "Specify the root path for debuggers to find the reference source code."),
+        Check_that_the_arguments_for_bind_call_and_apply_methods_match_the_original_function: diag(6697, ts.DiagnosticCategory.Message, "Check_that_the_arguments_for_bind_call_and_apply_methods_match_the_original_function_6697", "Check that the arguments for `bind`, `call`, and `apply` methods match the original function."),
+        When_assigning_functions_check_to_ensure_parameters_and_the_return_values_are_subtype_compatible: diag(6698, ts.DiagnosticCategory.Message, "When_assigning_functions_check_to_ensure_parameters_and_the_return_values_are_subtype_compatible_6698", "When assigning functions, check to ensure parameters and the return values are subtype-compatible."),
+        When_type_checking_take_into_account_null_and_undefined: diag(6699, ts.DiagnosticCategory.Message, "When_type_checking_take_into_account_null_and_undefined_6699", "When type checking, take into account `null` and `undefined`."),
+        Check_for_class_properties_that_are_declared_but_not_set_in_the_constructor: diag(6700, ts.DiagnosticCategory.Message, "Check_for_class_properties_that_are_declared_but_not_set_in_the_constructor_6700", "Check for class properties that are declared but not set in the constructor."),
+        Disable_emitting_declarations_that_have_internal_in_their_JSDoc_comments: diag(6701, ts.DiagnosticCategory.Message, "Disable_emitting_declarations_that_have_internal_in_their_JSDoc_comments_6701", "Disable emitting declarations that have `@internal` in their JSDoc comments."),
+        Disable_reporting_of_excess_property_errors_during_the_creation_of_object_literals: diag(6702, ts.DiagnosticCategory.Message, "Disable_reporting_of_excess_property_errors_during_the_creation_of_object_literals_6702", "Disable reporting of excess property errors during the creation of object literals."),
+        Suppress_noImplicitAny_errors_when_indexing_objects_that_lack_index_signatures: diag(6703, ts.DiagnosticCategory.Message, "Suppress_noImplicitAny_errors_when_indexing_objects_that_lack_index_signatures_6703", "Suppress `noImplicitAny` errors when indexing objects that lack index signatures."),
+        Synchronously_call_callbacks_and_update_the_state_of_directory_watchers_on_platforms_that_don_t_support_recursive_watching_natively: diag(6704, ts.DiagnosticCategory.Message, "Synchronously_call_callbacks_and_update_the_state_of_directory_watchers_on_platforms_that_don_t_supp_6704", "Synchronously call callbacks and update the state of directory watchers on platforms that don`t support recursive watching natively."),
+        Set_the_JavaScript_language_version_for_emitted_JavaScript_and_include_compatible_library_declarations: diag(6705, ts.DiagnosticCategory.Message, "Set_the_JavaScript_language_version_for_emitted_JavaScript_and_include_compatible_library_declaratio_6705", "Set the JavaScript language version for emitted JavaScript and include compatible library declarations."),
+        Log_paths_used_during_the_moduleResolution_process: diag(6706, ts.DiagnosticCategory.Message, "Log_paths_used_during_the_moduleResolution_process_6706", "Log paths used during the `moduleResolution` process."),
+        Specify_the_folder_for_tsbuildinfo_incremental_compilation_files: diag(6707, ts.DiagnosticCategory.Message, "Specify_the_folder_for_tsbuildinfo_incremental_compilation_files_6707", "Specify the folder for .tsbuildinfo incremental compilation files."),
+        Specify_options_for_automatic_acquisition_of_declaration_files: diag(6709, ts.DiagnosticCategory.Message, "Specify_options_for_automatic_acquisition_of_declaration_files_6709", "Specify options for automatic acquisition of declaration files."),
+        Specify_multiple_folders_that_act_like_Slashnode_modules_Slash_types: diag(6710, ts.DiagnosticCategory.Message, "Specify_multiple_folders_that_act_like_Slashnode_modules_Slash_types_6710", "Specify multiple folders that act like `./node_modules/@types`."),
+        Specify_type_package_names_to_be_included_without_being_referenced_in_a_source_file: diag(6711, ts.DiagnosticCategory.Message, "Specify_type_package_names_to_be_included_without_being_referenced_in_a_source_file_6711", "Specify type package names to be included without being referenced in a source file."),
+        Emit_ECMAScript_standard_compliant_class_fields: diag(6712, ts.DiagnosticCategory.Message, "Emit_ECMAScript_standard_compliant_class_fields_6712", "Emit ECMAScript-standard-compliant class fields."),
+        Enable_verbose_logging: diag(6713, ts.DiagnosticCategory.Message, "Enable_verbose_logging_6713", "Enable verbose logging"),
+        Specify_how_directories_are_watched_on_systems_that_lack_recursive_file_watching_functionality: diag(6714, ts.DiagnosticCategory.Message, "Specify_how_directories_are_watched_on_systems_that_lack_recursive_file_watching_functionality_6714", "Specify how directories are watched on systems that lack recursive file-watching functionality."),
+        Specify_how_the_TypeScript_watch_mode_works: diag(6715, ts.DiagnosticCategory.Message, "Specify_how_the_TypeScript_watch_mode_works_6715", "Specify how the TypeScript watch mode works."),
+        Include_undefined_in_index_signature_results: diag(6716, ts.DiagnosticCategory.Message, "Include_undefined_in_index_signature_results_6716", "Include 'undefined' in index signature results"),
+        Require_undeclared_properties_from_index_signatures_to_use_element_accesses: diag(6717, ts.DiagnosticCategory.Message, "Require_undeclared_properties_from_index_signatures_to_use_element_accesses_6717", "Require undeclared properties from index signatures to use element accesses."),
+        Specify_emit_Slashchecking_behavior_for_imports_that_are_only_used_for_types: diag(6718, ts.DiagnosticCategory.Message, "Specify_emit_Slashchecking_behavior_for_imports_that_are_only_used_for_types_6718", "Specify emit/checking behavior for imports that are only used for types"),
+        Type_catch_clause_variables_as_unknown_instead_of_any: diag(6803, ts.DiagnosticCategory.Message, "Type_catch_clause_variables_as_unknown_instead_of_any_6803", "Type catch clause variables as 'unknown' instead of 'any'."),
+        one_of_Colon: diag(6900, ts.DiagnosticCategory.Message, "one_of_Colon_6900", "one of:"),
+        one_or_more_Colon: diag(6901, ts.DiagnosticCategory.Message, "one_or_more_Colon_6901", "one or more:"),
+        type_Colon: diag(6902, ts.DiagnosticCategory.Message, "type_Colon_6902", "type:"),
+        default_Colon: diag(6903, ts.DiagnosticCategory.Message, "default_Colon_6903", "default:"),
+        module_system_or_esModuleInterop: diag(6904, ts.DiagnosticCategory.Message, "module_system_or_esModuleInterop_6904", "module === \"system\" or esModuleInterop"),
+        false_unless_strict_is_set: diag(6905, ts.DiagnosticCategory.Message, "false_unless_strict_is_set_6905", "`false`, unless `strict` is set"),
+        false_unless_composite_is_set: diag(6906, ts.DiagnosticCategory.Message, "false_unless_composite_is_set_6906", "`false`, unless `composite` is set"),
+        node_modules_bower_components_jspm_packages_plus_the_value_of_outDir_if_one_is_specified: diag(6907, ts.DiagnosticCategory.Message, "node_modules_bower_components_jspm_packages_plus_the_value_of_outDir_if_one_is_specified_6907", "`[\"node_modules\", \"bower_components\", \"jspm_packages\"]`, plus the value of `outDir` if one is specified."),
+        if_files_is_specified_otherwise_Asterisk_Asterisk_Slash_Asterisk: diag(6908, ts.DiagnosticCategory.Message, "if_files_is_specified_otherwise_Asterisk_Asterisk_Slash_Asterisk_6908", "`[]` if `files` is specified, otherwise `[\"**/*\"]`"),
+        true_if_composite_false_otherwise: diag(6909, ts.DiagnosticCategory.Message, "true_if_composite_false_otherwise_6909", "`true` if `composite`, `false` otherwise"),
+        module_AMD_or_UMD_or_System_or_ES6_then_Classic_Otherwise_Node: diag(69010, ts.DiagnosticCategory.Message, "module_AMD_or_UMD_or_System_or_ES6_then_Classic_Otherwise_Node_69010", "module === `AMD` or `UMD` or `System` or `ES6`, then `Classic`, Otherwise `Node`"),
+        Computed_from_the_list_of_input_files: diag(6911, ts.DiagnosticCategory.Message, "Computed_from_the_list_of_input_files_6911", "Computed from the list of input files"),
+        Platform_specific: diag(6912, ts.DiagnosticCategory.Message, "Platform_specific_6912", "Platform specific"),
+        You_can_learn_about_all_of_the_compiler_options_at_0: diag(6913, ts.DiagnosticCategory.Message, "You_can_learn_about_all_of_the_compiler_options_at_0_6913", "You can learn about all of the compiler options at {0}"),
+        Including_watch_w_will_start_watching_the_current_project_for_the_file_changes_Once_set_you_can_config_watch_mode_with_Colon: diag(6914, ts.DiagnosticCategory.Message, "Including_watch_w_will_start_watching_the_current_project_for_the_file_changes_Once_set_you_can_conf_6914", "Including --watch, -w will start watching the current project for the file changes. Once set, you can config watch mode with:"),
+        Using_build_b_will_make_tsc_behave_more_like_a_build_orchestrator_than_a_compiler_This_is_used_to_trigger_building_composite_projects_which_you_can_learn_more_about_at_0: diag(6915, ts.DiagnosticCategory.Message, "Using_build_b_will_make_tsc_behave_more_like_a_build_orchestrator_than_a_compiler_This_is_used_to_tr_6915", "Using --build, -b will make tsc behave more like a build orchestrator than a compiler. This is used to trigger building composite projects which you can learn more about at {0}"),
+        COMMON_COMMANDS: diag(6916, ts.DiagnosticCategory.Message, "COMMON_COMMANDS_6916", "COMMON COMMANDS"),
+        ALL_COMPILER_OPTIONS: diag(6917, ts.DiagnosticCategory.Message, "ALL_COMPILER_OPTIONS_6917", "ALL COMPILER OPTIONS"),
+        WATCH_OPTIONS: diag(6918, ts.DiagnosticCategory.Message, "WATCH_OPTIONS_6918", "WATCH OPTIONS"),
+        BUILD_OPTIONS: diag(6919, ts.DiagnosticCategory.Message, "BUILD_OPTIONS_6919", "BUILD OPTIONS"),
+        COMMON_COMPILER_OPTIONS: diag(6920, ts.DiagnosticCategory.Message, "COMMON_COMPILER_OPTIONS_6920", "COMMON COMPILER OPTIONS"),
+        COMMAND_LINE_FLAGS: diag(6921, ts.DiagnosticCategory.Message, "COMMAND_LINE_FLAGS_6921", "COMMAND LINE FLAGS"),
+        tsc_Colon_The_TypeScript_Compiler: diag(6922, ts.DiagnosticCategory.Message, "tsc_Colon_The_TypeScript_Compiler_6922", "tsc: The TypeScript Compiler"),
+        Compiles_the_current_project_tsconfig_json_in_the_working_directory: diag(6923, ts.DiagnosticCategory.Message, "Compiles_the_current_project_tsconfig_json_in_the_working_directory_6923", "Compiles the current project (tsconfig.json in the working directory.)"),
+        Ignoring_tsconfig_json_compiles_the_specified_files_with_default_compiler_options: diag(6924, ts.DiagnosticCategory.Message, "Ignoring_tsconfig_json_compiles_the_specified_files_with_default_compiler_options_6924", "Ignoring tsconfig.json, compiles the specified files with default compiler options."),
+        Build_a_composite_project_in_the_working_directory: diag(6925, ts.DiagnosticCategory.Message, "Build_a_composite_project_in_the_working_directory_6925", "Build a composite project in the working directory."),
+        Creates_a_tsconfig_json_with_the_recommended_settings_in_the_working_directory: diag(6926, ts.DiagnosticCategory.Message, "Creates_a_tsconfig_json_with_the_recommended_settings_in_the_working_directory_6926", "Creates a tsconfig.json with the recommended settings in the working directory."),
+        Compiles_the_TypeScript_project_located_at_the_specified_path: diag(6927, ts.DiagnosticCategory.Message, "Compiles_the_TypeScript_project_located_at_the_specified_path_6927", "Compiles the TypeScript project located at the specified path."),
+        An_expanded_version_of_this_information_showing_all_possible_compiler_options: diag(6928, ts.DiagnosticCategory.Message, "An_expanded_version_of_this_information_showing_all_possible_compiler_options_6928", "An expanded version of this information, showing all possible compiler options"),
+        Compiles_the_current_project_with_additional_settings: diag(6929, ts.DiagnosticCategory.Message, "Compiles_the_current_project_with_additional_settings_6929", "Compiles the current project, with additional settings."),
         Variable_0_implicitly_has_an_1_type: diag(7005, ts.DiagnosticCategory.Error, "Variable_0_implicitly_has_an_1_type_7005", "Variable '{0}' implicitly has an '{1}' type."),
         Parameter_0_implicitly_has_an_1_type: diag(7006, ts.DiagnosticCategory.Error, "Parameter_0_implicitly_has_an_1_type_7006", "Parameter '{0}' implicitly has an '{1}' type."),
         Member_0_implicitly_has_an_1_type: diag(7008, ts.DiagnosticCategory.Error, "Member_0_implicitly_has_an_1_type_7008", "Member '{0}' implicitly has an '{1}' type."),
@@ -9381,7 +9682,6 @@
         Add_names_to_all_parameters_without_names: diag(95073, ts.DiagnosticCategory.Message, "Add_names_to_all_parameters_without_names_95073", "Add names to all parameters without names"),
         Enable_the_experimentalDecorators_option_in_your_configuration_file: diag(95074, ts.DiagnosticCategory.Message, "Enable_the_experimentalDecorators_option_in_your_configuration_file_95074", "Enable the 'experimentalDecorators' option in your configuration file"),
         Convert_parameters_to_destructured_object: diag(95075, ts.DiagnosticCategory.Message, "Convert_parameters_to_destructured_object_95075", "Convert parameters to destructured object"),
-        Allow_accessing_UMD_globals_from_modules: diag(95076, ts.DiagnosticCategory.Message, "Allow_accessing_UMD_globals_from_modules_95076", "Allow accessing UMD globals from modules."),
         Extract_type: diag(95077, ts.DiagnosticCategory.Message, "Extract_type_95077", "Extract type"),
         Extract_to_type_alias: diag(95078, ts.DiagnosticCategory.Message, "Extract_to_type_alias_95078", "Extract to type alias"),
         Extract_to_typedef: diag(95079, ts.DiagnosticCategory.Message, "Extract_to_typedef_95079", "Extract to typedef"),
@@ -9469,6 +9769,11 @@
         Remove_override_modifier: diag(95161, ts.DiagnosticCategory.Message, "Remove_override_modifier_95161", "Remove 'override' modifier"),
         Add_all_missing_override_modifiers: diag(95162, ts.DiagnosticCategory.Message, "Add_all_missing_override_modifiers_95162", "Add all missing 'override' modifiers"),
         Remove_all_unnecessary_override_modifiers: diag(95163, ts.DiagnosticCategory.Message, "Remove_all_unnecessary_override_modifiers_95163", "Remove all unnecessary 'override' modifiers"),
+        Can_only_convert_named_export: diag(95164, ts.DiagnosticCategory.Message, "Can_only_convert_named_export_95164", "Can only convert named export"),
+        Add_missing_properties: diag(95165, ts.DiagnosticCategory.Message, "Add_missing_properties_95165", "Add missing properties"),
+        Add_all_missing_properties: diag(95166, ts.DiagnosticCategory.Message, "Add_all_missing_properties_95166", "Add all missing properties"),
+        Add_missing_attributes: diag(95167, ts.DiagnosticCategory.Message, "Add_missing_attributes_95167", "Add missing attributes"),
+        Add_all_missing_attributes: diag(95168, ts.DiagnosticCategory.Message, "Add_all_missing_attributes_95168", "Add all missing attributes"),
         No_value_exists_in_scope_for_the_shorthand_property_0_Either_declare_one_or_provide_an_initializer: diag(18004, ts.DiagnosticCategory.Error, "No_value_exists_in_scope_for_the_shorthand_property_0_Either_declare_one_or_provide_an_initializer_18004", "No value exists in scope for the shorthand property '{0}'. Either declare one or provide an initializer."),
         Classes_may_not_have_a_field_named_constructor: diag(18006, ts.DiagnosticCategory.Error, "Classes_may_not_have_a_field_named_constructor_18006", "Classes may not have a field named 'constructor'."),
         JSX_expressions_may_not_use_the_comma_operator_Did_you_mean_to_write_an_array: diag(18007, ts.DiagnosticCategory.Error, "JSX_expressions_may_not_use_the_comma_operator_Did_you_mean_to_write_an_array_18007", "JSX expressions may not use the comma operator. Did you mean to write an array?"),
@@ -9495,6 +9800,10 @@
         Specify_the_JSX_fragment_factory_function_to_use_when_targeting_react_JSX_emit_with_jsxFactory_compiler_option_is_specified_e_g_Fragment: diag(18034, ts.DiagnosticCategory.Message, "Specify_the_JSX_fragment_factory_function_to_use_when_targeting_react_JSX_emit_with_jsxFactory_compi_18034", "Specify the JSX fragment factory function to use when targeting 'react' JSX emit with 'jsxFactory' compiler option is specified, e.g. 'Fragment'."),
         Invalid_value_for_jsxFragmentFactory_0_is_not_a_valid_identifier_or_qualified_name: diag(18035, ts.DiagnosticCategory.Error, "Invalid_value_for_jsxFragmentFactory_0_is_not_a_valid_identifier_or_qualified_name_18035", "Invalid value for 'jsxFragmentFactory'. '{0}' is not a valid identifier or qualified-name."),
         Class_decorators_can_t_be_used_with_static_private_identifier_Consider_removing_the_experimental_decorator: diag(18036, ts.DiagnosticCategory.Error, "Class_decorators_can_t_be_used_with_static_private_identifier_Consider_removing_the_experimental_dec_18036", "Class decorators can't be used with static private identifier. Consider removing the experimental decorator."),
+        Await_expression_cannot_be_used_inside_a_class_static_block: diag(18037, ts.DiagnosticCategory.Error, "Await_expression_cannot_be_used_inside_a_class_static_block_18037", "Await expression cannot be used inside a class static block."),
+        For_await_loops_cannot_be_used_inside_a_class_static_block: diag(18038, ts.DiagnosticCategory.Error, "For_await_loops_cannot_be_used_inside_a_class_static_block_18038", "'For await' loops cannot be used inside a class static block."),
+        Invalid_use_of_0_It_cannot_be_used_inside_a_class_static_block: diag(18039, ts.DiagnosticCategory.Error, "Invalid_use_of_0_It_cannot_be_used_inside_a_class_static_block_18039", "Invalid use of '{0}'. It cannot be used inside a class static block."),
+        A_return_statement_cannot_be_used_inside_a_class_static_block: diag(18041, ts.DiagnosticCategory.Error, "A_return_statement_cannot_be_used_inside_a_class_static_block_18041", "A 'return' statement cannot be used inside a class static block."),
     };
 })(ts || (ts = {}));
 var ts;
@@ -9502,7 +9811,7 @@
     var _a;
     /* @internal */
     function tokenIsIdentifierOrKeyword(token) {
-        return token >= 78 /* Identifier */;
+        return token >= 79 /* Identifier */;
     }
     ts.tokenIsIdentifierOrKeyword = tokenIsIdentifierOrKeyword;
     /* @internal */
@@ -9510,89 +9819,90 @@
         return token === 31 /* GreaterThanToken */ || tokenIsIdentifierOrKeyword(token);
     }
     ts.tokenIsIdentifierOrKeywordOrGreaterThan = tokenIsIdentifierOrKeywordOrGreaterThan;
-    var textToKeywordObj = (_a = {
-            abstract: 125 /* AbstractKeyword */,
-            any: 128 /* AnyKeyword */,
-            as: 126 /* AsKeyword */,
-            asserts: 127 /* AssertsKeyword */,
-            bigint: 155 /* BigIntKeyword */,
-            boolean: 131 /* BooleanKeyword */,
-            break: 80 /* BreakKeyword */,
-            case: 81 /* CaseKeyword */,
-            catch: 82 /* CatchKeyword */,
-            class: 83 /* ClassKeyword */,
-            continue: 85 /* ContinueKeyword */,
-            const: 84 /* ConstKeyword */
+    /** @internal */
+    ts.textToKeywordObj = (_a = {
+            abstract: 126 /* AbstractKeyword */,
+            any: 129 /* AnyKeyword */,
+            as: 127 /* AsKeyword */,
+            asserts: 128 /* AssertsKeyword */,
+            bigint: 156 /* BigIntKeyword */,
+            boolean: 132 /* BooleanKeyword */,
+            break: 81 /* BreakKeyword */,
+            case: 82 /* CaseKeyword */,
+            catch: 83 /* CatchKeyword */,
+            class: 84 /* ClassKeyword */,
+            continue: 86 /* ContinueKeyword */,
+            const: 85 /* ConstKeyword */
         },
-        _a["" + "constructor"] = 132 /* ConstructorKeyword */,
-        _a.debugger = 86 /* DebuggerKeyword */,
-        _a.declare = 133 /* DeclareKeyword */,
-        _a.default = 87 /* DefaultKeyword */,
-        _a.delete = 88 /* DeleteKeyword */,
-        _a.do = 89 /* DoKeyword */,
-        _a.else = 90 /* ElseKeyword */,
-        _a.enum = 91 /* EnumKeyword */,
-        _a.export = 92 /* ExportKeyword */,
-        _a.extends = 93 /* ExtendsKeyword */,
-        _a.false = 94 /* FalseKeyword */,
-        _a.finally = 95 /* FinallyKeyword */,
-        _a.for = 96 /* ForKeyword */,
-        _a.from = 153 /* FromKeyword */,
-        _a.function = 97 /* FunctionKeyword */,
-        _a.get = 134 /* GetKeyword */,
-        _a.if = 98 /* IfKeyword */,
-        _a.implements = 116 /* ImplementsKeyword */,
-        _a.import = 99 /* ImportKeyword */,
-        _a.in = 100 /* InKeyword */,
-        _a.infer = 135 /* InferKeyword */,
-        _a.instanceof = 101 /* InstanceOfKeyword */,
-        _a.interface = 117 /* InterfaceKeyword */,
-        _a.intrinsic = 136 /* IntrinsicKeyword */,
-        _a.is = 137 /* IsKeyword */,
-        _a.keyof = 138 /* KeyOfKeyword */,
-        _a.let = 118 /* LetKeyword */,
-        _a.module = 139 /* ModuleKeyword */,
-        _a.namespace = 140 /* NamespaceKeyword */,
-        _a.never = 141 /* NeverKeyword */,
-        _a.new = 102 /* NewKeyword */,
-        _a.null = 103 /* NullKeyword */,
-        _a.number = 144 /* NumberKeyword */,
-        _a.object = 145 /* ObjectKeyword */,
-        _a.package = 119 /* PackageKeyword */,
-        _a.private = 120 /* PrivateKeyword */,
-        _a.protected = 121 /* ProtectedKeyword */,
-        _a.public = 122 /* PublicKeyword */,
-        _a.override = 156 /* OverrideKeyword */,
-        _a.readonly = 142 /* ReadonlyKeyword */,
-        _a.require = 143 /* RequireKeyword */,
-        _a.global = 154 /* GlobalKeyword */,
-        _a.return = 104 /* ReturnKeyword */,
-        _a.set = 146 /* SetKeyword */,
-        _a.static = 123 /* StaticKeyword */,
-        _a.string = 147 /* StringKeyword */,
-        _a.super = 105 /* SuperKeyword */,
-        _a.switch = 106 /* SwitchKeyword */,
-        _a.symbol = 148 /* SymbolKeyword */,
-        _a.this = 107 /* ThisKeyword */,
-        _a.throw = 108 /* ThrowKeyword */,
-        _a.true = 109 /* TrueKeyword */,
-        _a.try = 110 /* TryKeyword */,
-        _a.type = 149 /* TypeKeyword */,
-        _a.typeof = 111 /* TypeOfKeyword */,
-        _a.undefined = 150 /* UndefinedKeyword */,
-        _a.unique = 151 /* UniqueKeyword */,
-        _a.unknown = 152 /* UnknownKeyword */,
-        _a.var = 112 /* VarKeyword */,
-        _a.void = 113 /* VoidKeyword */,
-        _a.while = 114 /* WhileKeyword */,
-        _a.with = 115 /* WithKeyword */,
-        _a.yield = 124 /* YieldKeyword */,
-        _a.async = 129 /* AsyncKeyword */,
-        _a.await = 130 /* AwaitKeyword */,
-        _a.of = 157 /* OfKeyword */,
+        _a["" + "constructor"] = 133 /* ConstructorKeyword */,
+        _a.debugger = 87 /* DebuggerKeyword */,
+        _a.declare = 134 /* DeclareKeyword */,
+        _a.default = 88 /* DefaultKeyword */,
+        _a.delete = 89 /* DeleteKeyword */,
+        _a.do = 90 /* DoKeyword */,
+        _a.else = 91 /* ElseKeyword */,
+        _a.enum = 92 /* EnumKeyword */,
+        _a.export = 93 /* ExportKeyword */,
+        _a.extends = 94 /* ExtendsKeyword */,
+        _a.false = 95 /* FalseKeyword */,
+        _a.finally = 96 /* FinallyKeyword */,
+        _a.for = 97 /* ForKeyword */,
+        _a.from = 154 /* FromKeyword */,
+        _a.function = 98 /* FunctionKeyword */,
+        _a.get = 135 /* GetKeyword */,
+        _a.if = 99 /* IfKeyword */,
+        _a.implements = 117 /* ImplementsKeyword */,
+        _a.import = 100 /* ImportKeyword */,
+        _a.in = 101 /* InKeyword */,
+        _a.infer = 136 /* InferKeyword */,
+        _a.instanceof = 102 /* InstanceOfKeyword */,
+        _a.interface = 118 /* InterfaceKeyword */,
+        _a.intrinsic = 137 /* IntrinsicKeyword */,
+        _a.is = 138 /* IsKeyword */,
+        _a.keyof = 139 /* KeyOfKeyword */,
+        _a.let = 119 /* LetKeyword */,
+        _a.module = 140 /* ModuleKeyword */,
+        _a.namespace = 141 /* NamespaceKeyword */,
+        _a.never = 142 /* NeverKeyword */,
+        _a.new = 103 /* NewKeyword */,
+        _a.null = 104 /* NullKeyword */,
+        _a.number = 145 /* NumberKeyword */,
+        _a.object = 146 /* ObjectKeyword */,
+        _a.package = 120 /* PackageKeyword */,
+        _a.private = 121 /* PrivateKeyword */,
+        _a.protected = 122 /* ProtectedKeyword */,
+        _a.public = 123 /* PublicKeyword */,
+        _a.override = 157 /* OverrideKeyword */,
+        _a.readonly = 143 /* ReadonlyKeyword */,
+        _a.require = 144 /* RequireKeyword */,
+        _a.global = 155 /* GlobalKeyword */,
+        _a.return = 105 /* ReturnKeyword */,
+        _a.set = 147 /* SetKeyword */,
+        _a.static = 124 /* StaticKeyword */,
+        _a.string = 148 /* StringKeyword */,
+        _a.super = 106 /* SuperKeyword */,
+        _a.switch = 107 /* SwitchKeyword */,
+        _a.symbol = 149 /* SymbolKeyword */,
+        _a.this = 108 /* ThisKeyword */,
+        _a.throw = 109 /* ThrowKeyword */,
+        _a.true = 110 /* TrueKeyword */,
+        _a.try = 111 /* TryKeyword */,
+        _a.type = 150 /* TypeKeyword */,
+        _a.typeof = 112 /* TypeOfKeyword */,
+        _a.undefined = 151 /* UndefinedKeyword */,
+        _a.unique = 152 /* UniqueKeyword */,
+        _a.unknown = 153 /* UnknownKeyword */,
+        _a.var = 113 /* VarKeyword */,
+        _a.void = 114 /* VoidKeyword */,
+        _a.while = 115 /* WhileKeyword */,
+        _a.with = 116 /* WithKeyword */,
+        _a.yield = 125 /* YieldKeyword */,
+        _a.async = 130 /* AsyncKeyword */,
+        _a.await = 131 /* AwaitKeyword */,
+        _a.of = 158 /* OfKeyword */,
         _a);
-    var textToKeyword = new ts.Map(ts.getEntries(textToKeywordObj));
-    var textToToken = new ts.Map(ts.getEntries(__assign(__assign({}, textToKeywordObj), { "{": 18 /* OpenBraceToken */, "}": 19 /* CloseBraceToken */, "(": 20 /* OpenParenToken */, ")": 21 /* CloseParenToken */, "[": 22 /* OpenBracketToken */, "]": 23 /* CloseBracketToken */, ".": 24 /* DotToken */, "...": 25 /* DotDotDotToken */, ";": 26 /* SemicolonToken */, ",": 27 /* CommaToken */, "<": 29 /* LessThanToken */, ">": 31 /* GreaterThanToken */, "<=": 32 /* LessThanEqualsToken */, ">=": 33 /* GreaterThanEqualsToken */, "==": 34 /* EqualsEqualsToken */, "!=": 35 /* ExclamationEqualsToken */, "===": 36 /* EqualsEqualsEqualsToken */, "!==": 37 /* ExclamationEqualsEqualsToken */, "=>": 38 /* EqualsGreaterThanToken */, "+": 39 /* PlusToken */, "-": 40 /* MinusToken */, "**": 42 /* AsteriskAsteriskToken */, "*": 41 /* AsteriskToken */, "/": 43 /* SlashToken */, "%": 44 /* PercentToken */, "++": 45 /* PlusPlusToken */, "--": 46 /* MinusMinusToken */, "<<": 47 /* LessThanLessThanToken */, "</": 30 /* LessThanSlashToken */, ">>": 48 /* GreaterThanGreaterThanToken */, ">>>": 49 /* GreaterThanGreaterThanGreaterThanToken */, "&": 50 /* AmpersandToken */, "|": 51 /* BarToken */, "^": 52 /* CaretToken */, "!": 53 /* ExclamationToken */, "~": 54 /* TildeToken */, "&&": 55 /* AmpersandAmpersandToken */, "||": 56 /* BarBarToken */, "?": 57 /* QuestionToken */, "??": 60 /* QuestionQuestionToken */, "?.": 28 /* QuestionDotToken */, ":": 58 /* ColonToken */, "=": 62 /* EqualsToken */, "+=": 63 /* PlusEqualsToken */, "-=": 64 /* MinusEqualsToken */, "*=": 65 /* AsteriskEqualsToken */, "**=": 66 /* AsteriskAsteriskEqualsToken */, "/=": 67 /* SlashEqualsToken */, "%=": 68 /* PercentEqualsToken */, "<<=": 69 /* LessThanLessThanEqualsToken */, ">>=": 70 /* GreaterThanGreaterThanEqualsToken */, ">>>=": 71 /* GreaterThanGreaterThanGreaterThanEqualsToken */, "&=": 72 /* AmpersandEqualsToken */, "|=": 73 /* BarEqualsToken */, "^=": 77 /* CaretEqualsToken */, "||=": 74 /* BarBarEqualsToken */, "&&=": 75 /* AmpersandAmpersandEqualsToken */, "??=": 76 /* QuestionQuestionEqualsToken */, "@": 59 /* AtToken */, "`": 61 /* BacktickToken */ })));
+    var textToKeyword = new ts.Map(ts.getEntries(ts.textToKeywordObj));
+    var textToToken = new ts.Map(ts.getEntries(__assign(__assign({}, ts.textToKeywordObj), { "{": 18 /* OpenBraceToken */, "}": 19 /* CloseBraceToken */, "(": 20 /* OpenParenToken */, ")": 21 /* CloseParenToken */, "[": 22 /* OpenBracketToken */, "]": 23 /* CloseBracketToken */, ".": 24 /* DotToken */, "...": 25 /* DotDotDotToken */, ";": 26 /* SemicolonToken */, ",": 27 /* CommaToken */, "<": 29 /* LessThanToken */, ">": 31 /* GreaterThanToken */, "<=": 32 /* LessThanEqualsToken */, ">=": 33 /* GreaterThanEqualsToken */, "==": 34 /* EqualsEqualsToken */, "!=": 35 /* ExclamationEqualsToken */, "===": 36 /* EqualsEqualsEqualsToken */, "!==": 37 /* ExclamationEqualsEqualsToken */, "=>": 38 /* EqualsGreaterThanToken */, "+": 39 /* PlusToken */, "-": 40 /* MinusToken */, "**": 42 /* AsteriskAsteriskToken */, "*": 41 /* AsteriskToken */, "/": 43 /* SlashToken */, "%": 44 /* PercentToken */, "++": 45 /* PlusPlusToken */, "--": 46 /* MinusMinusToken */, "<<": 47 /* LessThanLessThanToken */, "</": 30 /* LessThanSlashToken */, ">>": 48 /* GreaterThanGreaterThanToken */, ">>>": 49 /* GreaterThanGreaterThanGreaterThanToken */, "&": 50 /* AmpersandToken */, "|": 51 /* BarToken */, "^": 52 /* CaretToken */, "!": 53 /* ExclamationToken */, "~": 54 /* TildeToken */, "&&": 55 /* AmpersandAmpersandToken */, "||": 56 /* BarBarToken */, "?": 57 /* QuestionToken */, "??": 60 /* QuestionQuestionToken */, "?.": 28 /* QuestionDotToken */, ":": 58 /* ColonToken */, "=": 63 /* EqualsToken */, "+=": 64 /* PlusEqualsToken */, "-=": 65 /* MinusEqualsToken */, "*=": 66 /* AsteriskEqualsToken */, "**=": 67 /* AsteriskAsteriskEqualsToken */, "/=": 68 /* SlashEqualsToken */, "%=": 69 /* PercentEqualsToken */, "<<=": 70 /* LessThanLessThanEqualsToken */, ">>=": 71 /* GreaterThanGreaterThanEqualsToken */, ">>>=": 72 /* GreaterThanGreaterThanGreaterThanEqualsToken */, "&=": 73 /* AmpersandEqualsToken */, "|=": 74 /* BarEqualsToken */, "^=": 78 /* CaretEqualsToken */, "||=": 75 /* BarBarEqualsToken */, "&&=": 76 /* AmpersandAmpersandEqualsToken */, "??=": 77 /* QuestionQuestionEqualsToken */, "@": 59 /* AtToken */, "#": 62 /* HashToken */, "`": 61 /* BacktickToken */ })));
     /*
         As per ECMAScript Language Specification 3th Edition, Section 7.6: Identifiers
         IdentifierStart ::
@@ -9648,13 +9958,13 @@
     var unicodeESNextIdentifierStart = [65, 90, 97, 122, 170, 170, 181, 181, 186, 186, 192, 214, 216, 246, 248, 705, 710, 721, 736, 740, 748, 748, 750, 750, 880, 884, 886, 887, 890, 893, 895, 895, 902, 902, 904, 906, 908, 908, 910, 929, 931, 1013, 1015, 1153, 1162, 1327, 1329, 1366, 1369, 1369, 1376, 1416, 1488, 1514, 1519, 1522, 1568, 1610, 1646, 1647, 1649, 1747, 1749, 1749, 1765, 1766, 1774, 1775, 1786, 1788, 1791, 1791, 1808, 1808, 1810, 1839, 1869, 1957, 1969, 1969, 1994, 2026, 2036, 2037, 2042, 2042, 2048, 2069, 2074, 2074, 2084, 2084, 2088, 2088, 2112, 2136, 2144, 2154, 2208, 2228, 2230, 2237, 2308, 2361, 2365, 2365, 2384, 2384, 2392, 2401, 2417, 2432, 2437, 2444, 2447, 2448, 2451, 2472, 2474, 2480, 2482, 2482, 2486, 2489, 2493, 2493, 2510, 2510, 2524, 2525, 2527, 2529, 2544, 2545, 2556, 2556, 2565, 2570, 2575, 2576, 2579, 2600, 2602, 2608, 2610, 2611, 2613, 2614, 2616, 2617, 2649, 2652, 2654, 2654, 2674, 2676, 2693, 2701, 2703, 2705, 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2749, 2749, 2768, 2768, 2784, 2785, 2809, 2809, 2821, 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2869, 2873, 2877, 2877, 2908, 2909, 2911, 2913, 2929, 2929, 2947, 2947, 2949, 2954, 2958, 2960, 2962, 2965, 2969, 2970, 2972, 2972, 2974, 2975, 2979, 2980, 2984, 2986, 2990, 3001, 3024, 3024, 3077, 3084, 3086, 3088, 3090, 3112, 3114, 3129, 3133, 3133, 3160, 3162, 3168, 3169, 3200, 3200, 3205, 3212, 3214, 3216, 3218, 3240, 3242, 3251, 3253, 3257, 3261, 3261, 3294, 3294, 3296, 3297, 3313, 3314, 3333, 3340, 3342, 3344, 3346, 3386, 3389, 3389, 3406, 3406, 3412, 3414, 3423, 3425, 3450, 3455, 3461, 3478, 3482, 3505, 3507, 3515, 3517, 3517, 3520, 3526, 3585, 3632, 3634, 3635, 3648, 3654, 3713, 3714, 3716, 3716, 3718, 3722, 3724, 3747, 3749, 3749, 3751, 3760, 3762, 3763, 3773, 3773, 3776, 3780, 3782, 3782, 3804, 3807, 3840, 3840, 3904, 3911, 3913, 3948, 3976, 3980, 4096, 4138, 4159, 4159, 4176, 4181, 4186, 4189, 4193, 4193, 4197, 4198, 4206, 4208, 4213, 4225, 4238, 4238, 4256, 4293, 4295, 4295, 4301, 4301, 4304, 4346, 4348, 4680, 4682, 4685, 4688, 4694, 4696, 4696, 4698, 4701, 4704, 4744, 4746, 4749, 4752, 4784, 4786, 4789, 4792, 4798, 4800, 4800, 4802, 4805, 4808, 4822, 4824, 4880, 4882, 4885, 4888, 4954, 4992, 5007, 5024, 5109, 5112, 5117, 5121, 5740, 5743, 5759, 5761, 5786, 5792, 5866, 5870, 5880, 5888, 5900, 5902, 5905, 5920, 5937, 5952, 5969, 5984, 5996, 5998, 6000, 6016, 6067, 6103, 6103, 6108, 6108, 6176, 6264, 6272, 6312, 6314, 6314, 6320, 6389, 6400, 6430, 6480, 6509, 6512, 6516, 6528, 6571, 6576, 6601, 6656, 6678, 6688, 6740, 6823, 6823, 6917, 6963, 6981, 6987, 7043, 7072, 7086, 7087, 7098, 7141, 7168, 7203, 7245, 7247, 7258, 7293, 7296, 7304, 7312, 7354, 7357, 7359, 7401, 7404, 7406, 7411, 7413, 7414, 7418, 7418, 7424, 7615, 7680, 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025, 8027, 8027, 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130, 8132, 8134, 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188, 8305, 8305, 8319, 8319, 8336, 8348, 8450, 8450, 8455, 8455, 8458, 8467, 8469, 8469, 8472, 8477, 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8505, 8508, 8511, 8517, 8521, 8526, 8526, 8544, 8584, 11264, 11310, 11312, 11358, 11360, 11492, 11499, 11502, 11506, 11507, 11520, 11557, 11559, 11559, 11565, 11565, 11568, 11623, 11631, 11631, 11648, 11670, 11680, 11686, 11688, 11694, 11696, 11702, 11704, 11710, 11712, 11718, 11720, 11726, 11728, 11734, 11736, 11742, 12293, 12295, 12321, 12329, 12337, 12341, 12344, 12348, 12353, 12438, 12443, 12447, 12449, 12538, 12540, 12543, 12549, 12591, 12593, 12686, 12704, 12730, 12784, 12799, 13312, 19893, 19968, 40943, 40960, 42124, 42192, 42237, 42240, 42508, 42512, 42527, 42538, 42539, 42560, 42606, 42623, 42653, 42656, 42735, 42775, 42783, 42786, 42888, 42891, 42943, 42946, 42950, 42999, 43009, 43011, 43013, 43015, 43018, 43020, 43042, 43072, 43123, 43138, 43187, 43250, 43255, 43259, 43259, 43261, 43262, 43274, 43301, 43312, 43334, 43360, 43388, 43396, 43442, 43471, 43471, 43488, 43492, 43494, 43503, 43514, 43518, 43520, 43560, 43584, 43586, 43588, 43595, 43616, 43638, 43642, 43642, 43646, 43695, 43697, 43697, 43701, 43702, 43705, 43709, 43712, 43712, 43714, 43714, 43739, 43741, 43744, 43754, 43762, 43764, 43777, 43782, 43785, 43790, 43793, 43798, 43808, 43814, 43816, 43822, 43824, 43866, 43868, 43879, 43888, 44002, 44032, 55203, 55216, 55238, 55243, 55291, 63744, 64109, 64112, 64217, 64256, 64262, 64275, 64279, 64285, 64285, 64287, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321, 64323, 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008, 65019, 65136, 65140, 65142, 65276, 65313, 65338, 65345, 65370, 65382, 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500, 65536, 65547, 65549, 65574, 65576, 65594, 65596, 65597, 65599, 65613, 65616, 65629, 65664, 65786, 65856, 65908, 66176, 66204, 66208, 66256, 66304, 66335, 66349, 66378, 66384, 66421, 66432, 66461, 66464, 66499, 66504, 66511, 66513, 66517, 66560, 66717, 66736, 66771, 66776, 66811, 66816, 66855, 66864, 66915, 67072, 67382, 67392, 67413, 67424, 67431, 67584, 67589, 67592, 67592, 67594, 67637, 67639, 67640, 67644, 67644, 67647, 67669, 67680, 67702, 67712, 67742, 67808, 67826, 67828, 67829, 67840, 67861, 67872, 67897, 67968, 68023, 68030, 68031, 68096, 68096, 68112, 68115, 68117, 68119, 68121, 68149, 68192, 68220, 68224, 68252, 68288, 68295, 68297, 68324, 68352, 68405, 68416, 68437, 68448, 68466, 68480, 68497, 68608, 68680, 68736, 68786, 68800, 68850, 68864, 68899, 69376, 69404, 69415, 69415, 69424, 69445, 69600, 69622, 69635, 69687, 69763, 69807, 69840, 69864, 69891, 69926, 69956, 69956, 69968, 70002, 70006, 70006, 70019, 70066, 70081, 70084, 70106, 70106, 70108, 70108, 70144, 70161, 70163, 70187, 70272, 70278, 70280, 70280, 70282, 70285, 70287, 70301, 70303, 70312, 70320, 70366, 70405, 70412, 70415, 70416, 70419, 70440, 70442, 70448, 70450, 70451, 70453, 70457, 70461, 70461, 70480, 70480, 70493, 70497, 70656, 70708, 70727, 70730, 70751, 70751, 70784, 70831, 70852, 70853, 70855, 70855, 71040, 71086, 71128, 71131, 71168, 71215, 71236, 71236, 71296, 71338, 71352, 71352, 71424, 71450, 71680, 71723, 71840, 71903, 71935, 71935, 72096, 72103, 72106, 72144, 72161, 72161, 72163, 72163, 72192, 72192, 72203, 72242, 72250, 72250, 72272, 72272, 72284, 72329, 72349, 72349, 72384, 72440, 72704, 72712, 72714, 72750, 72768, 72768, 72818, 72847, 72960, 72966, 72968, 72969, 72971, 73008, 73030, 73030, 73056, 73061, 73063, 73064, 73066, 73097, 73112, 73112, 73440, 73458, 73728, 74649, 74752, 74862, 74880, 75075, 77824, 78894, 82944, 83526, 92160, 92728, 92736, 92766, 92880, 92909, 92928, 92975, 92992, 92995, 93027, 93047, 93053, 93071, 93760, 93823, 93952, 94026, 94032, 94032, 94099, 94111, 94176, 94177, 94179, 94179, 94208, 100343, 100352, 101106, 110592, 110878, 110928, 110930, 110948, 110951, 110960, 111355, 113664, 113770, 113776, 113788, 113792, 113800, 113808, 113817, 119808, 119892, 119894, 119964, 119966, 119967, 119970, 119970, 119973, 119974, 119977, 119980, 119982, 119993, 119995, 119995, 119997, 120003, 120005, 120069, 120071, 120074, 120077, 120084, 120086, 120092, 120094, 120121, 120123, 120126, 120128, 120132, 120134, 120134, 120138, 120144, 120146, 120485, 120488, 120512, 120514, 120538, 120540, 120570, 120572, 120596, 120598, 120628, 120630, 120654, 120656, 120686, 120688, 120712, 120714, 120744, 120746, 120770, 120772, 120779, 123136, 123180, 123191, 123197, 123214, 123214, 123584, 123627, 124928, 125124, 125184, 125251, 125259, 125259, 126464, 126467, 126469, 126495, 126497, 126498, 126500, 126500, 126503, 126503, 126505, 126514, 126516, 126519, 126521, 126521, 126523, 126523, 126530, 126530, 126535, 126535, 126537, 126537, 126539, 126539, 126541, 126543, 126545, 126546, 126548, 126548, 126551, 126551, 126553, 126553, 126555, 126555, 126557, 126557, 126559, 126559, 126561, 126562, 126564, 126564, 126567, 126570, 126572, 126578, 126580, 126583, 126585, 126588, 126590, 126590, 126592, 126601, 126603, 126619, 126625, 126627, 126629, 126633, 126635, 126651, 131072, 173782, 173824, 177972, 177984, 178205, 178208, 183969, 183984, 191456, 194560, 195101];
     var unicodeESNextIdentifierPart = [48, 57, 65, 90, 95, 95, 97, 122, 170, 170, 181, 181, 183, 183, 186, 186, 192, 214, 216, 246, 248, 705, 710, 721, 736, 740, 748, 748, 750, 750, 768, 884, 886, 887, 890, 893, 895, 895, 902, 906, 908, 908, 910, 929, 931, 1013, 1015, 1153, 1155, 1159, 1162, 1327, 1329, 1366, 1369, 1369, 1376, 1416, 1425, 1469, 1471, 1471, 1473, 1474, 1476, 1477, 1479, 1479, 1488, 1514, 1519, 1522, 1552, 1562, 1568, 1641, 1646, 1747, 1749, 1756, 1759, 1768, 1770, 1788, 1791, 1791, 1808, 1866, 1869, 1969, 1984, 2037, 2042, 2042, 2045, 2045, 2048, 2093, 2112, 2139, 2144, 2154, 2208, 2228, 2230, 2237, 2259, 2273, 2275, 2403, 2406, 2415, 2417, 2435, 2437, 2444, 2447, 2448, 2451, 2472, 2474, 2480, 2482, 2482, 2486, 2489, 2492, 2500, 2503, 2504, 2507, 2510, 2519, 2519, 2524, 2525, 2527, 2531, 2534, 2545, 2556, 2556, 2558, 2558, 2561, 2563, 2565, 2570, 2575, 2576, 2579, 2600, 2602, 2608, 2610, 2611, 2613, 2614, 2616, 2617, 2620, 2620, 2622, 2626, 2631, 2632, 2635, 2637, 2641, 2641, 2649, 2652, 2654, 2654, 2662, 2677, 2689, 2691, 2693, 2701, 2703, 2705, 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2748, 2757, 2759, 2761, 2763, 2765, 2768, 2768, 2784, 2787, 2790, 2799, 2809, 2815, 2817, 2819, 2821, 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2869, 2873, 2876, 2884, 2887, 2888, 2891, 2893, 2902, 2903, 2908, 2909, 2911, 2915, 2918, 2927, 2929, 2929, 2946, 2947, 2949, 2954, 2958, 2960, 2962, 2965, 2969, 2970, 2972, 2972, 2974, 2975, 2979, 2980, 2984, 2986, 2990, 3001, 3006, 3010, 3014, 3016, 3018, 3021, 3024, 3024, 3031, 3031, 3046, 3055, 3072, 3084, 3086, 3088, 3090, 3112, 3114, 3129, 3133, 3140, 3142, 3144, 3146, 3149, 3157, 3158, 3160, 3162, 3168, 3171, 3174, 3183, 3200, 3203, 3205, 3212, 3214, 3216, 3218, 3240, 3242, 3251, 3253, 3257, 3260, 3268, 3270, 3272, 3274, 3277, 3285, 3286, 3294, 3294, 3296, 3299, 3302, 3311, 3313, 3314, 3328, 3331, 3333, 3340, 3342, 3344, 3346, 3396, 3398, 3400, 3402, 3406, 3412, 3415, 3423, 3427, 3430, 3439, 3450, 3455, 3458, 3459, 3461, 3478, 3482, 3505, 3507, 3515, 3517, 3517, 3520, 3526, 3530, 3530, 3535, 3540, 3542, 3542, 3544, 3551, 3558, 3567, 3570, 3571, 3585, 3642, 3648, 3662, 3664, 3673, 3713, 3714, 3716, 3716, 3718, 3722, 3724, 3747, 3749, 3749, 3751, 3773, 3776, 3780, 3782, 3782, 3784, 3789, 3792, 3801, 3804, 3807, 3840, 3840, 3864, 3865, 3872, 3881, 3893, 3893, 3895, 3895, 3897, 3897, 3902, 3911, 3913, 3948, 3953, 3972, 3974, 3991, 3993, 4028, 4038, 4038, 4096, 4169, 4176, 4253, 4256, 4293, 4295, 4295, 4301, 4301, 4304, 4346, 4348, 4680, 4682, 4685, 4688, 4694, 4696, 4696, 4698, 4701, 4704, 4744, 4746, 4749, 4752, 4784, 4786, 4789, 4792, 4798, 4800, 4800, 4802, 4805, 4808, 4822, 4824, 4880, 4882, 4885, 4888, 4954, 4957, 4959, 4969, 4977, 4992, 5007, 5024, 5109, 5112, 5117, 5121, 5740, 5743, 5759, 5761, 5786, 5792, 5866, 5870, 5880, 5888, 5900, 5902, 5908, 5920, 5940, 5952, 5971, 5984, 5996, 5998, 6000, 6002, 6003, 6016, 6099, 6103, 6103, 6108, 6109, 6112, 6121, 6155, 6157, 6160, 6169, 6176, 6264, 6272, 6314, 6320, 6389, 6400, 6430, 6432, 6443, 6448, 6459, 6470, 6509, 6512, 6516, 6528, 6571, 6576, 6601, 6608, 6618, 6656, 6683, 6688, 6750, 6752, 6780, 6783, 6793, 6800, 6809, 6823, 6823, 6832, 6845, 6912, 6987, 6992, 7001, 7019, 7027, 7040, 7155, 7168, 7223, 7232, 7241, 7245, 7293, 7296, 7304, 7312, 7354, 7357, 7359, 7376, 7378, 7380, 7418, 7424, 7673, 7675, 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025, 8027, 8027, 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130, 8132, 8134, 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188, 8255, 8256, 8276, 8276, 8305, 8305, 8319, 8319, 8336, 8348, 8400, 8412, 8417, 8417, 8421, 8432, 8450, 8450, 8455, 8455, 8458, 8467, 8469, 8469, 8472, 8477, 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8505, 8508, 8511, 8517, 8521, 8526, 8526, 8544, 8584, 11264, 11310, 11312, 11358, 11360, 11492, 11499, 11507, 11520, 11557, 11559, 11559, 11565, 11565, 11568, 11623, 11631, 11631, 11647, 11670, 11680, 11686, 11688, 11694, 11696, 11702, 11704, 11710, 11712, 11718, 11720, 11726, 11728, 11734, 11736, 11742, 11744, 11775, 12293, 12295, 12321, 12335, 12337, 12341, 12344, 12348, 12353, 12438, 12441, 12447, 12449, 12538, 12540, 12543, 12549, 12591, 12593, 12686, 12704, 12730, 12784, 12799, 13312, 19893, 19968, 40943, 40960, 42124, 42192, 42237, 42240, 42508, 42512, 42539, 42560, 42607, 42612, 42621, 42623, 42737, 42775, 42783, 42786, 42888, 42891, 42943, 42946, 42950, 42999, 43047, 43072, 43123, 43136, 43205, 43216, 43225, 43232, 43255, 43259, 43259, 43261, 43309, 43312, 43347, 43360, 43388, 43392, 43456, 43471, 43481, 43488, 43518, 43520, 43574, 43584, 43597, 43600, 43609, 43616, 43638, 43642, 43714, 43739, 43741, 43744, 43759, 43762, 43766, 43777, 43782, 43785, 43790, 43793, 43798, 43808, 43814, 43816, 43822, 43824, 43866, 43868, 43879, 43888, 44010, 44012, 44013, 44016, 44025, 44032, 55203, 55216, 55238, 55243, 55291, 63744, 64109, 64112, 64217, 64256, 64262, 64275, 64279, 64285, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321, 64323, 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008, 65019, 65024, 65039, 65056, 65071, 65075, 65076, 65101, 65103, 65136, 65140, 65142, 65276, 65296, 65305, 65313, 65338, 65343, 65343, 65345, 65370, 65382, 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500, 65536, 65547, 65549, 65574, 65576, 65594, 65596, 65597, 65599, 65613, 65616, 65629, 65664, 65786, 65856, 65908, 66045, 66045, 66176, 66204, 66208, 66256, 66272, 66272, 66304, 66335, 66349, 66378, 66384, 66426, 66432, 66461, 66464, 66499, 66504, 66511, 66513, 66517, 66560, 66717, 66720, 66729, 66736, 66771, 66776, 66811, 66816, 66855, 66864, 66915, 67072, 67382, 67392, 67413, 67424, 67431, 67584, 67589, 67592, 67592, 67594, 67637, 67639, 67640, 67644, 67644, 67647, 67669, 67680, 67702, 67712, 67742, 67808, 67826, 67828, 67829, 67840, 67861, 67872, 67897, 67968, 68023, 68030, 68031, 68096, 68099, 68101, 68102, 68108, 68115, 68117, 68119, 68121, 68149, 68152, 68154, 68159, 68159, 68192, 68220, 68224, 68252, 68288, 68295, 68297, 68326, 68352, 68405, 68416, 68437, 68448, 68466, 68480, 68497, 68608, 68680, 68736, 68786, 68800, 68850, 68864, 68903, 68912, 68921, 69376, 69404, 69415, 69415, 69424, 69456, 69600, 69622, 69632, 69702, 69734, 69743, 69759, 69818, 69840, 69864, 69872, 69881, 69888, 69940, 69942, 69951, 69956, 69958, 69968, 70003, 70006, 70006, 70016, 70084, 70089, 70092, 70096, 70106, 70108, 70108, 70144, 70161, 70163, 70199, 70206, 70206, 70272, 70278, 70280, 70280, 70282, 70285, 70287, 70301, 70303, 70312, 70320, 70378, 70384, 70393, 70400, 70403, 70405, 70412, 70415, 70416, 70419, 70440, 70442, 70448, 70450, 70451, 70453, 70457, 70459, 70468, 70471, 70472, 70475, 70477, 70480, 70480, 70487, 70487, 70493, 70499, 70502, 70508, 70512, 70516, 70656, 70730, 70736, 70745, 70750, 70751, 70784, 70853, 70855, 70855, 70864, 70873, 71040, 71093, 71096, 71104, 71128, 71133, 71168, 71232, 71236, 71236, 71248, 71257, 71296, 71352, 71360, 71369, 71424, 71450, 71453, 71467, 71472, 71481, 71680, 71738, 71840, 71913, 71935, 71935, 72096, 72103, 72106, 72151, 72154, 72161, 72163, 72164, 72192, 72254, 72263, 72263, 72272, 72345, 72349, 72349, 72384, 72440, 72704, 72712, 72714, 72758, 72760, 72768, 72784, 72793, 72818, 72847, 72850, 72871, 72873, 72886, 72960, 72966, 72968, 72969, 72971, 73014, 73018, 73018, 73020, 73021, 73023, 73031, 73040, 73049, 73056, 73061, 73063, 73064, 73066, 73102, 73104, 73105, 73107, 73112, 73120, 73129, 73440, 73462, 73728, 74649, 74752, 74862, 74880, 75075, 77824, 78894, 82944, 83526, 92160, 92728, 92736, 92766, 92768, 92777, 92880, 92909, 92912, 92916, 92928, 92982, 92992, 92995, 93008, 93017, 93027, 93047, 93053, 93071, 93760, 93823, 93952, 94026, 94031, 94087, 94095, 94111, 94176, 94177, 94179, 94179, 94208, 100343, 100352, 101106, 110592, 110878, 110928, 110930, 110948, 110951, 110960, 111355, 113664, 113770, 113776, 113788, 113792, 113800, 113808, 113817, 113821, 113822, 119141, 119145, 119149, 119154, 119163, 119170, 119173, 119179, 119210, 119213, 119362, 119364, 119808, 119892, 119894, 119964, 119966, 119967, 119970, 119970, 119973, 119974, 119977, 119980, 119982, 119993, 119995, 119995, 119997, 120003, 120005, 120069, 120071, 120074, 120077, 120084, 120086, 120092, 120094, 120121, 120123, 120126, 120128, 120132, 120134, 120134, 120138, 120144, 120146, 120485, 120488, 120512, 120514, 120538, 120540, 120570, 120572, 120596, 120598, 120628, 120630, 120654, 120656, 120686, 120688, 120712, 120714, 120744, 120746, 120770, 120772, 120779, 120782, 120831, 121344, 121398, 121403, 121452, 121461, 121461, 121476, 121476, 121499, 121503, 121505, 121519, 122880, 122886, 122888, 122904, 122907, 122913, 122915, 122916, 122918, 122922, 123136, 123180, 123184, 123197, 123200, 123209, 123214, 123214, 123584, 123641, 124928, 125124, 125136, 125142, 125184, 125259, 125264, 125273, 126464, 126467, 126469, 126495, 126497, 126498, 126500, 126500, 126503, 126503, 126505, 126514, 126516, 126519, 126521, 126521, 126523, 126523, 126530, 126530, 126535, 126535, 126537, 126537, 126539, 126539, 126541, 126543, 126545, 126546, 126548, 126548, 126551, 126551, 126553, 126553, 126555, 126555, 126557, 126557, 126559, 126559, 126561, 126562, 126564, 126564, 126567, 126570, 126572, 126578, 126580, 126583, 126585, 126588, 126590, 126590, 126592, 126601, 126603, 126619, 126625, 126627, 126629, 126633, 126635, 126651, 131072, 173782, 173824, 177972, 177984, 178205, 178208, 183969, 183984, 191456, 194560, 195101, 917760, 917999];
     /**
-     * Test for whether a single line comment's text contains a directive.
+     * Test for whether a single line comment with leading whitespace trimmed's text contains a directive.
      */
-    var commentDirectiveRegExSingleLine = /^\s*\/\/\/?\s*@(ts-expect-error|ts-ignore)/;
+    var commentDirectiveRegExSingleLine = /^\/\/\/?\s*@(ts-expect-error|ts-ignore)/;
     /**
-     * Test for whether a multi-line comment's last line contains a directive.
+     * Test for whether a multi-line comment with leading whitespace trimmed's last line contains a directive.
      */
-    var commentDirectiveRegExMultiLine = /^\s*(?:\/|\*)*\s*@(ts-expect-error|ts-ignore)/;
+    var commentDirectiveRegExMultiLine = /^(?:\/|\*)*\s*@(ts-expect-error|ts-ignore)/;
     function lookupInUnicodeMap(code, map) {
         // Bail out quickly if it couldn't possibly be in the map.
         if (code < map[0]) {
@@ -10268,8 +10578,8 @@
             hasExtendedUnicodeEscape: function () { return (tokenFlags & 8 /* ExtendedUnicodeEscape */) !== 0; },
             hasPrecedingLineBreak: function () { return (tokenFlags & 1 /* PrecedingLineBreak */) !== 0; },
             hasPrecedingJSDocComment: function () { return (tokenFlags & 2 /* PrecedingJSDocComment */) !== 0; },
-            isIdentifier: function () { return token === 78 /* Identifier */ || token > 115 /* LastReservedWord */; },
-            isReservedWord: function () { return token >= 80 /* FirstReservedWord */ && token <= 115 /* LastReservedWord */; },
+            isIdentifier: function () { return token === 79 /* Identifier */ || token > 116 /* LastReservedWord */; },
+            isReservedWord: function () { return token >= 81 /* FirstReservedWord */ && token <= 116 /* LastReservedWord */; },
             isUnterminated: function () { return (tokenFlags & 4 /* Unterminated */) !== 0; },
             getCommentDirectives: function () { return commentDirectives; },
             getNumericLiteralFlags: function () { return tokenFlags & 1008 /* NumericLiteralFlags */; },
@@ -10284,6 +10594,7 @@
             reScanJsxAttributeValue: reScanJsxAttributeValue,
             reScanJsxToken: reScanJsxToken,
             reScanLessThanToken: reScanLessThanToken,
+            reScanHashToken: reScanHashToken,
             reScanQuestionToken: reScanQuestionToken,
             reScanInvalidIdentifier: reScanInvalidIdentifier,
             scanJsxToken: scanJsxToken,
@@ -10794,7 +11105,7 @@
                     }
                 }
             }
-            return token = 78 /* Identifier */;
+            return token = 79 /* Identifier */;
         }
         function scanBinaryOrOctalDigits(base) {
             var value = "";
@@ -10943,19 +11254,19 @@
                         return token = scanTemplateAndSetTokenValue(/* isTaggedTemplate */ false);
                     case 37 /* percent */:
                         if (text.charCodeAt(pos + 1) === 61 /* equals */) {
-                            return pos += 2, token = 68 /* PercentEqualsToken */;
+                            return pos += 2, token = 69 /* PercentEqualsToken */;
                         }
                         pos++;
                         return token = 44 /* PercentToken */;
                     case 38 /* ampersand */:
                         if (text.charCodeAt(pos + 1) === 38 /* ampersand */) {
                             if (text.charCodeAt(pos + 2) === 61 /* equals */) {
-                                return pos += 3, token = 75 /* AmpersandAmpersandEqualsToken */;
+                                return pos += 3, token = 76 /* AmpersandAmpersandEqualsToken */;
                             }
                             return pos += 2, token = 55 /* AmpersandAmpersandToken */;
                         }
                         if (text.charCodeAt(pos + 1) === 61 /* equals */) {
-                            return pos += 2, token = 72 /* AmpersandEqualsToken */;
+                            return pos += 2, token = 73 /* AmpersandEqualsToken */;
                         }
                         pos++;
                         return token = 50 /* AmpersandToken */;
@@ -10967,11 +11278,11 @@
                         return token = 21 /* CloseParenToken */;
                     case 42 /* asterisk */:
                         if (text.charCodeAt(pos + 1) === 61 /* equals */) {
-                            return pos += 2, token = 65 /* AsteriskEqualsToken */;
+                            return pos += 2, token = 66 /* AsteriskEqualsToken */;
                         }
                         if (text.charCodeAt(pos + 1) === 42 /* asterisk */) {
                             if (text.charCodeAt(pos + 2) === 61 /* equals */) {
-                                return pos += 3, token = 66 /* AsteriskAsteriskEqualsToken */;
+                                return pos += 3, token = 67 /* AsteriskAsteriskEqualsToken */;
                             }
                             return pos += 2, token = 42 /* AsteriskAsteriskToken */;
                         }
@@ -10987,7 +11298,7 @@
                             return pos += 2, token = 45 /* PlusPlusToken */;
                         }
                         if (text.charCodeAt(pos + 1) === 61 /* equals */) {
-                            return pos += 2, token = 63 /* PlusEqualsToken */;
+                            return pos += 2, token = 64 /* PlusEqualsToken */;
                         }
                         pos++;
                         return token = 39 /* PlusToken */;
@@ -10999,7 +11310,7 @@
                             return pos += 2, token = 46 /* MinusMinusToken */;
                         }
                         if (text.charCodeAt(pos + 1) === 61 /* equals */) {
-                            return pos += 2, token = 64 /* MinusEqualsToken */;
+                            return pos += 2, token = 65 /* MinusEqualsToken */;
                         }
                         pos++;
                         return token = 40 /* MinusToken */;
@@ -11067,7 +11378,7 @@
                             }
                         }
                         if (text.charCodeAt(pos + 1) === 61 /* equals */) {
-                            return pos += 2, token = 67 /* SlashEqualsToken */;
+                            return pos += 2, token = 68 /* SlashEqualsToken */;
                         }
                         pos++;
                         return token = 43 /* SlashToken */;
@@ -11144,7 +11455,7 @@
                         }
                         if (text.charCodeAt(pos + 1) === 60 /* lessThan */) {
                             if (text.charCodeAt(pos + 2) === 61 /* equals */) {
-                                return pos += 3, token = 69 /* LessThanLessThanEqualsToken */;
+                                return pos += 3, token = 70 /* LessThanLessThanEqualsToken */;
                             }
                             return pos += 2, token = 47 /* LessThanLessThanToken */;
                         }
@@ -11178,7 +11489,7 @@
                             return pos += 2, token = 38 /* EqualsGreaterThanToken */;
                         }
                         pos++;
-                        return token = 62 /* EqualsToken */;
+                        return token = 63 /* EqualsToken */;
                     case 62 /* greaterThan */:
                         if (isConflictMarkerTrivia(text, pos)) {
                             pos = scanConflictMarkerTrivia(text, pos, error);
@@ -11197,7 +11508,7 @@
                         }
                         if (text.charCodeAt(pos + 1) === 63 /* question */) {
                             if (text.charCodeAt(pos + 2) === 61 /* equals */) {
-                                return pos += 3, token = 76 /* QuestionQuestionEqualsToken */;
+                                return pos += 3, token = 77 /* QuestionQuestionEqualsToken */;
                             }
                             return pos += 2, token = 60 /* QuestionQuestionToken */;
                         }
@@ -11211,7 +11522,7 @@
                         return token = 23 /* CloseBracketToken */;
                     case 94 /* caret */:
                         if (text.charCodeAt(pos + 1) === 61 /* equals */) {
-                            return pos += 2, token = 77 /* CaretEqualsToken */;
+                            return pos += 2, token = 78 /* CaretEqualsToken */;
                         }
                         pos++;
                         return token = 52 /* CaretToken */;
@@ -11230,12 +11541,12 @@
                         }
                         if (text.charCodeAt(pos + 1) === 124 /* bar */) {
                             if (text.charCodeAt(pos + 2) === 61 /* equals */) {
-                                return pos += 3, token = 74 /* BarBarEqualsToken */;
+                                return pos += 3, token = 75 /* BarBarEqualsToken */;
                             }
                             return pos += 2, token = 56 /* BarBarToken */;
                         }
                         if (text.charCodeAt(pos + 1) === 61 /* equals */) {
-                            return pos += 2, token = 73 /* BarEqualsToken */;
+                            return pos += 2, token = 74 /* BarEqualsToken */;
                         }
                         pos++;
                         return token = 51 /* BarToken */;
@@ -11272,21 +11583,15 @@
                             pos++;
                             return token = 0 /* Unknown */;
                         }
-                        pos++;
-                        if (isIdentifierStart(ch = text.charCodeAt(pos), languageVersion)) {
+                        if (isIdentifierStart(codePointAt(text, pos + 1), languageVersion)) {
                             pos++;
-                            while (pos < end && isIdentifierPart(ch = text.charCodeAt(pos), languageVersion))
-                                pos++;
-                            tokenValue = text.substring(tokenPos, pos);
-                            if (ch === 92 /* backslash */) {
-                                tokenValue += scanIdentifierParts();
-                            }
+                            scanIdentifier(codePointAt(text, pos), languageVersion);
                         }
                         else {
-                            tokenValue = "#";
-                            error(ts.Diagnostics.Invalid_character);
+                            tokenValue = String.fromCharCode(codePointAt(text, pos));
+                            error(ts.Diagnostics.Invalid_character, pos++, charSize(ch));
                         }
-                        return token = 79 /* PrivateIdentifier */;
+                        return token = 80 /* PrivateIdentifier */;
                     default:
                         var identifierKind = scanIdentifier(ch, languageVersion);
                         if (identifierKind) {
@@ -11301,8 +11606,9 @@
                             pos += charSize(ch);
                             continue;
                         }
-                        error(ts.Diagnostics.Invalid_character);
-                        pos += charSize(ch);
+                        var size = charSize(ch);
+                        error(ts.Diagnostics.Invalid_character, pos, size);
+                        pos += size;
                         return token = 0 /* Unknown */;
                 }
             }
@@ -11337,12 +11643,12 @@
                 if (text.charCodeAt(pos) === 62 /* greaterThan */) {
                     if (text.charCodeAt(pos + 1) === 62 /* greaterThan */) {
                         if (text.charCodeAt(pos + 2) === 61 /* equals */) {
-                            return pos += 3, token = 71 /* GreaterThanGreaterThanGreaterThanEqualsToken */;
+                            return pos += 3, token = 72 /* GreaterThanGreaterThanGreaterThanEqualsToken */;
                         }
                         return pos += 2, token = 49 /* GreaterThanGreaterThanGreaterThanToken */;
                     }
                     if (text.charCodeAt(pos + 1) === 61 /* equals */) {
-                        return pos += 2, token = 70 /* GreaterThanGreaterThanEqualsToken */;
+                        return pos += 2, token = 71 /* GreaterThanGreaterThanEqualsToken */;
                     }
                     pos++;
                     return token = 48 /* GreaterThanGreaterThanToken */;
@@ -11355,12 +11661,12 @@
             return token;
         }
         function reScanAsteriskEqualsToken() {
-            ts.Debug.assert(token === 65 /* AsteriskEqualsToken */, "'reScanAsteriskEqualsToken' should only be called on a '*='");
+            ts.Debug.assert(token === 66 /* AsteriskEqualsToken */, "'reScanAsteriskEqualsToken' should only be called on a '*='");
             pos = tokenPos + 1;
-            return token = 62 /* EqualsToken */;
+            return token = 63 /* EqualsToken */;
         }
         function reScanSlashToken() {
-            if (token === 43 /* SlashToken */ || token === 67 /* SlashEqualsToken */) {
+            if (token === 43 /* SlashToken */ || token === 68 /* SlashEqualsToken */) {
                 var p = tokenPos + 1;
                 var inEscape = false;
                 var inCharacterClass = false;
@@ -11410,7 +11716,7 @@
             return token;
         }
         function appendIfCommentDirective(commentDirectives, text, commentDirectiveRegEx, lineStart) {
-            var type = getDirectiveFromComment(text, commentDirectiveRegEx);
+            var type = getDirectiveFromComment(ts.trimStringStart(text), commentDirectiveRegEx);
             if (type === undefined) {
                 return commentDirectives;
             }
@@ -11456,6 +11762,13 @@
             }
             return token;
         }
+        function reScanHashToken() {
+            if (token === 80 /* PrivateIdentifier */) {
+                pos = tokenPos + 1;
+                return token = 62 /* HashToken */;
+            }
+            return token;
+        }
         function reScanQuestionToken() {
             ts.Debug.assert(token === 60 /* QuestionQuestionToken */, "'reScanQuestionToken' should only be called on a '??'");
             pos = tokenPos + 1;
@@ -11544,7 +11857,7 @@
                         tokenValue += ":";
                         pos++;
                         namespaceSeparator = true;
-                        token = 78 /* Identifier */; // swap from keyword kind to identifier kind
+                        token = 79 /* Identifier */; // swap from keyword kind to identifier kind
                         continue;
                     }
                     var oldPos = pos;
@@ -11619,13 +11932,15 @@
                 case 62 /* greaterThan */:
                     return token = 31 /* GreaterThanToken */;
                 case 61 /* equals */:
-                    return token = 62 /* EqualsToken */;
+                    return token = 63 /* EqualsToken */;
                 case 44 /* comma */:
                     return token = 27 /* CommaToken */;
                 case 46 /* dot */:
                     return token = 24 /* DotToken */;
                 case 96 /* backtick */:
                     return token = 61 /* BacktickToken */;
+                case 35 /* hash */:
+                    return token = 62 /* HashToken */;
                 case 92 /* backslash */:
                     pos--;
                     var extendedCookedChar = peekExtendedUnicodeEscape();
@@ -12021,9 +12336,9 @@
     }
     ts.collapseTextChangeRangesAcrossMultipleVersions = collapseTextChangeRangesAcrossMultipleVersions;
     function getTypeParameterOwner(d) {
-        if (d && d.kind === 160 /* TypeParameter */) {
+        if (d && d.kind === 161 /* TypeParameter */) {
             for (var current = d; current; current = current.parent) {
-                if (isFunctionLike(current) || isClassLike(current) || current.kind === 254 /* InterfaceDeclaration */) {
+                if (isFunctionLike(current) || isClassLike(current) || current.kind === 256 /* InterfaceDeclaration */) {
                     return current;
                 }
             }
@@ -12031,7 +12346,7 @@
     }
     ts.getTypeParameterOwner = getTypeParameterOwner;
     function isParameterPropertyDeclaration(node, parent) {
-        return ts.hasSyntacticModifier(node, 16476 /* ParameterPropertyModifier */) && parent.kind === 167 /* Constructor */;
+        return ts.hasSyntacticModifier(node, 16476 /* ParameterPropertyModifier */) && parent.kind === 169 /* Constructor */;
     }
     ts.isParameterPropertyDeclaration = isParameterPropertyDeclaration;
     function isEmptyBindingPattern(node) {
@@ -12061,14 +12376,14 @@
             node = walkUpBindingElementsAndPatterns(node);
         }
         var flags = getFlags(node);
-        if (node.kind === 250 /* VariableDeclaration */) {
+        if (node.kind === 252 /* VariableDeclaration */) {
             node = node.parent;
         }
-        if (node && node.kind === 251 /* VariableDeclarationList */) {
+        if (node && node.kind === 253 /* VariableDeclarationList */) {
             flags |= getFlags(node);
             node = node.parent;
         }
-        if (node && node.kind === 233 /* VariableStatement */) {
+        if (node && node.kind === 235 /* VariableStatement */) {
             flags |= getFlags(node);
         }
         return flags;
@@ -12241,30 +12556,30 @@
         }
         // Covers remaining cases (returning undefined if none match).
         switch (hostNode.kind) {
-            case 233 /* VariableStatement */:
+            case 235 /* VariableStatement */:
                 if (hostNode.declarationList && hostNode.declarationList.declarations[0]) {
                     return getDeclarationIdentifier(hostNode.declarationList.declarations[0]);
                 }
                 break;
-            case 234 /* ExpressionStatement */:
+            case 236 /* ExpressionStatement */:
                 var expr = hostNode.expression;
-                if (expr.kind === 217 /* BinaryExpression */ && expr.operatorToken.kind === 62 /* EqualsToken */) {
+                if (expr.kind === 219 /* BinaryExpression */ && expr.operatorToken.kind === 63 /* EqualsToken */) {
                     expr = expr.left;
                 }
                 switch (expr.kind) {
-                    case 202 /* PropertyAccessExpression */:
+                    case 204 /* PropertyAccessExpression */:
                         return expr.name;
-                    case 203 /* ElementAccessExpression */:
+                    case 205 /* ElementAccessExpression */:
                         var arg = expr.argumentExpression;
                         if (ts.isIdentifier(arg)) {
                             return arg;
                         }
                 }
                 break;
-            case 208 /* ParenthesizedExpression */: {
+            case 210 /* ParenthesizedExpression */: {
                 return getDeclarationIdentifier(hostNode.expression);
             }
-            case 246 /* LabeledStatement */: {
+            case 248 /* LabeledStatement */: {
                 if (isDeclaration(hostNode.statement) || isExpression(hostNode.statement)) {
                     return getDeclarationIdentifier(hostNode.statement);
                 }
@@ -12299,18 +12614,18 @@
     /** @internal */
     function getNonAssignedNameOfDeclaration(declaration) {
         switch (declaration.kind) {
-            case 78 /* Identifier */:
+            case 79 /* Identifier */:
                 return declaration;
-            case 337 /* JSDocPropertyTag */:
-            case 330 /* JSDocParameterTag */: {
+            case 342 /* JSDocPropertyTag */:
+            case 335 /* JSDocParameterTag */: {
                 var name = declaration.name;
-                if (name.kind === 158 /* QualifiedName */) {
+                if (name.kind === 159 /* QualifiedName */) {
                     return name.right;
                 }
                 break;
             }
-            case 204 /* CallExpression */:
-            case 217 /* BinaryExpression */: {
+            case 206 /* CallExpression */:
+            case 219 /* BinaryExpression */: {
                 var expr_1 = declaration;
                 switch (ts.getAssignmentDeclarationKind(expr_1)) {
                     case 1 /* ExportsProperty */:
@@ -12326,15 +12641,15 @@
                         return undefined;
                 }
             }
-            case 335 /* JSDocTypedefTag */:
+            case 340 /* JSDocTypedefTag */:
                 return getNameOfJSDocTypedef(declaration);
-            case 329 /* JSDocEnumTag */:
+            case 334 /* JSDocEnumTag */:
                 return nameForNamelessJSDocTypedef(declaration);
-            case 267 /* ExportAssignment */: {
+            case 269 /* ExportAssignment */: {
                 var expression = declaration.expression;
                 return ts.isIdentifier(expression) ? expression : undefined;
             }
-            case 203 /* ElementAccessExpression */:
+            case 205 /* ElementAccessExpression */:
                 var expr = declaration;
                 if (ts.isBindableStaticElementAccessExpression(expr)) {
                     return expr.argumentExpression;
@@ -12628,7 +12943,8 @@
     function getTextOfJSDocComment(comment) {
         return typeof comment === "string" ? comment
             : comment === null || comment === void 0 ? void 0 : comment.map(function (c) {
-                return c.kind === 313 /* JSDocText */ ? c.text : "{@link " + (c.name ? ts.entityNameToString(c.name) + " " : "") + c.text + "}";
+                // TODO: Other kinds here
+                return c.kind === 316 /* JSDocText */ ? c.text : "{@link " + (c.name ? ts.entityNameToString(c.name) + " " : "") + c.text + "}";
             }).join("");
     }
     ts.getTextOfJSDocComment = getTextOfJSDocComment;
@@ -12641,7 +12957,7 @@
             return ts.emptyArray;
         }
         if (ts.isJSDocTypeAlias(node)) {
-            ts.Debug.assert(node.parent.kind === 312 /* JSDocComment */);
+            ts.Debug.assert(node.parent.kind === 315 /* JSDocComment */);
             return ts.flatMap(node.parent.tags, function (tag) { return ts.isJSDocTemplateTag(tag) ? tag.typeParameters : undefined; });
         }
         if (node.typeParameters) {
@@ -12668,12 +12984,12 @@
     ts.getEffectiveConstraintOfTypeParameter = getEffectiveConstraintOfTypeParameter;
     // #region
     function isMemberName(node) {
-        return node.kind === 78 /* Identifier */ || node.kind === 79 /* PrivateIdentifier */;
+        return node.kind === 79 /* Identifier */ || node.kind === 80 /* PrivateIdentifier */;
     }
     ts.isMemberName = isMemberName;
     /* @internal */
     function isGetOrSetAccessorDeclaration(node) {
-        return node.kind === 169 /* SetAccessor */ || node.kind === 168 /* GetAccessor */;
+        return node.kind === 171 /* SetAccessor */ || node.kind === 170 /* GetAccessor */;
     }
     ts.isGetOrSetAccessorDeclaration = isGetOrSetAccessorDeclaration;
     function isPropertyAccessChain(node) {
@@ -12691,10 +13007,10 @@
     function isOptionalChain(node) {
         var kind = node.kind;
         return !!(node.flags & 32 /* OptionalChain */) &&
-            (kind === 202 /* PropertyAccessExpression */
-                || kind === 203 /* ElementAccessExpression */
-                || kind === 204 /* CallExpression */
-                || kind === 226 /* NonNullExpression */);
+            (kind === 204 /* PropertyAccessExpression */
+                || kind === 205 /* ElementAccessExpression */
+                || kind === 206 /* CallExpression */
+                || kind === 228 /* NonNullExpression */);
     }
     ts.isOptionalChain = isOptionalChain;
     /* @internal */
@@ -12729,7 +13045,7 @@
     }
     ts.isOutermostOptionalChain = isOutermostOptionalChain;
     function isNullishCoalesce(node) {
-        return node.kind === 217 /* BinaryExpression */ && node.operatorToken.kind === 60 /* QuestionQuestionToken */;
+        return node.kind === 219 /* BinaryExpression */ && node.operatorToken.kind === 60 /* QuestionQuestionToken */;
     }
     ts.isNullishCoalesce = isNullishCoalesce;
     function isConstTypeReference(node) {
@@ -12746,17 +13062,17 @@
     }
     ts.isNonNullChain = isNonNullChain;
     function isBreakOrContinueStatement(node) {
-        return node.kind === 242 /* BreakStatement */ || node.kind === 241 /* ContinueStatement */;
+        return node.kind === 244 /* BreakStatement */ || node.kind === 243 /* ContinueStatement */;
     }
     ts.isBreakOrContinueStatement = isBreakOrContinueStatement;
     function isNamedExportBindings(node) {
-        return node.kind === 270 /* NamespaceExport */ || node.kind === 269 /* NamedExports */;
+        return node.kind === 272 /* NamespaceExport */ || node.kind === 271 /* NamedExports */;
     }
     ts.isNamedExportBindings = isNamedExportBindings;
     function isUnparsedTextLike(node) {
         switch (node.kind) {
-            case 295 /* UnparsedText */:
-            case 296 /* UnparsedInternalText */:
+            case 297 /* UnparsedText */:
+            case 298 /* UnparsedInternalText */:
                 return true;
             default:
                 return false;
@@ -12765,12 +13081,12 @@
     ts.isUnparsedTextLike = isUnparsedTextLike;
     function isUnparsedNode(node) {
         return isUnparsedTextLike(node) ||
-            node.kind === 293 /* UnparsedPrologue */ ||
-            node.kind === 297 /* UnparsedSyntheticReference */;
+            node.kind === 295 /* UnparsedPrologue */ ||
+            node.kind === 299 /* UnparsedSyntheticReference */;
     }
     ts.isUnparsedNode = isUnparsedNode;
     function isJSDocPropertyLikeTag(node) {
-        return node.kind === 337 /* JSDocPropertyTag */ || node.kind === 330 /* JSDocParameterTag */;
+        return node.kind === 342 /* JSDocPropertyTag */ || node.kind === 335 /* JSDocParameterTag */;
     }
     ts.isJSDocPropertyLikeTag = isJSDocPropertyLikeTag;
     // #endregion
@@ -12786,7 +13102,7 @@
     ts.isNode = isNode;
     /* @internal */
     function isNodeKind(kind) {
-        return kind >= 158 /* FirstNode */;
+        return kind >= 159 /* FirstNode */;
     }
     ts.isNodeKind = isNodeKind;
     /**
@@ -12795,7 +13111,7 @@
      * Literals are considered tokens, except TemplateLiteral, but does include TemplateHead/Middle/Tail.
      */
     function isTokenKind(kind) {
-        return kind >= 0 /* FirstToken */ && kind <= 157 /* LastToken */;
+        return kind >= 0 /* FirstToken */ && kind <= 158 /* LastToken */;
     }
     ts.isTokenKind = isTokenKind;
     /**
@@ -12845,13 +13161,13 @@
     ts.isImportOrExportSpecifier = isImportOrExportSpecifier;
     function isTypeOnlyImportOrExportDeclaration(node) {
         switch (node.kind) {
-            case 266 /* ImportSpecifier */:
-            case 271 /* ExportSpecifier */:
+            case 268 /* ImportSpecifier */:
+            case 273 /* ExportSpecifier */:
                 return node.parent.parent.isTypeOnly;
-            case 264 /* NamespaceImport */:
+            case 266 /* NamespaceImport */:
                 return node.parent.isTypeOnly;
-            case 263 /* ImportClause */:
-            case 261 /* ImportEqualsDeclaration */:
+            case 265 /* ImportClause */:
+            case 263 /* ImportEqualsDeclaration */:
                 return node.isTypeOnly;
             default:
                 return false;
@@ -12883,18 +13199,18 @@
     /* @internal */
     function isModifierKind(token) {
         switch (token) {
-            case 125 /* AbstractKeyword */:
-            case 129 /* AsyncKeyword */:
-            case 84 /* ConstKeyword */:
-            case 133 /* DeclareKeyword */:
-            case 87 /* DefaultKeyword */:
-            case 92 /* ExportKeyword */:
-            case 122 /* PublicKeyword */:
-            case 120 /* PrivateKeyword */:
-            case 121 /* ProtectedKeyword */:
-            case 142 /* ReadonlyKeyword */:
-            case 123 /* StaticKeyword */:
-            case 156 /* OverrideKeyword */:
+            case 126 /* AbstractKeyword */:
+            case 130 /* AsyncKeyword */:
+            case 85 /* ConstKeyword */:
+            case 134 /* DeclareKeyword */:
+            case 88 /* DefaultKeyword */:
+            case 93 /* ExportKeyword */:
+            case 123 /* PublicKeyword */:
+            case 121 /* PrivateKeyword */:
+            case 122 /* ProtectedKeyword */:
+            case 143 /* ReadonlyKeyword */:
+            case 124 /* StaticKeyword */:
+            case 157 /* OverrideKeyword */:
                 return true;
         }
         return false;
@@ -12907,7 +13223,7 @@
     ts.isParameterPropertyModifier = isParameterPropertyModifier;
     /* @internal */
     function isClassMemberModifier(idToken) {
-        return isParameterPropertyModifier(idToken) || idToken === 123 /* StaticKeyword */ || idToken === 156 /* OverrideKeyword */;
+        return isParameterPropertyModifier(idToken) || idToken === 124 /* StaticKeyword */ || idToken === 157 /* OverrideKeyword */;
     }
     ts.isClassMemberModifier = isClassMemberModifier;
     function isModifier(node) {
@@ -12916,24 +13232,24 @@
     ts.isModifier = isModifier;
     function isEntityName(node) {
         var kind = node.kind;
-        return kind === 158 /* QualifiedName */
-            || kind === 78 /* Identifier */;
+        return kind === 159 /* QualifiedName */
+            || kind === 79 /* Identifier */;
     }
     ts.isEntityName = isEntityName;
     function isPropertyName(node) {
         var kind = node.kind;
-        return kind === 78 /* Identifier */
-            || kind === 79 /* PrivateIdentifier */
+        return kind === 79 /* Identifier */
+            || kind === 80 /* PrivateIdentifier */
             || kind === 10 /* StringLiteral */
             || kind === 8 /* NumericLiteral */
-            || kind === 159 /* ComputedPropertyName */;
+            || kind === 160 /* ComputedPropertyName */;
     }
     ts.isPropertyName = isPropertyName;
     function isBindingName(node) {
         var kind = node.kind;
-        return kind === 78 /* Identifier */
-            || kind === 197 /* ObjectBindingPattern */
-            || kind === 198 /* ArrayBindingPattern */;
+        return kind === 79 /* Identifier */
+            || kind === 199 /* ObjectBindingPattern */
+            || kind === 200 /* ArrayBindingPattern */;
     }
     ts.isBindingName = isBindingName;
     // Functions
@@ -12942,19 +13258,29 @@
     }
     ts.isFunctionLike = isFunctionLike;
     /* @internal */
+    function isFunctionLikeOrClassStaticBlockDeclaration(node) {
+        return !!node && (isFunctionLikeKind(node.kind) || ts.isClassStaticBlockDeclaration(node));
+    }
+    ts.isFunctionLikeOrClassStaticBlockDeclaration = isFunctionLikeOrClassStaticBlockDeclaration;
+    /* @internal */
     function isFunctionLikeDeclaration(node) {
         return node && isFunctionLikeDeclarationKind(node.kind);
     }
     ts.isFunctionLikeDeclaration = isFunctionLikeDeclaration;
+    /* @internal */
+    function isBooleanLiteral(node) {
+        return node.kind === 110 /* TrueKeyword */ || node.kind === 95 /* FalseKeyword */;
+    }
+    ts.isBooleanLiteral = isBooleanLiteral;
     function isFunctionLikeDeclarationKind(kind) {
         switch (kind) {
-            case 252 /* FunctionDeclaration */:
-            case 166 /* MethodDeclaration */:
-            case 167 /* Constructor */:
-            case 168 /* GetAccessor */:
-            case 169 /* SetAccessor */:
-            case 209 /* FunctionExpression */:
-            case 210 /* ArrowFunction */:
+            case 254 /* FunctionDeclaration */:
+            case 167 /* MethodDeclaration */:
+            case 169 /* Constructor */:
+            case 170 /* GetAccessor */:
+            case 171 /* SetAccessor */:
+            case 211 /* FunctionExpression */:
+            case 212 /* ArrowFunction */:
                 return true;
             default:
                 return false;
@@ -12963,14 +13289,14 @@
     /* @internal */
     function isFunctionLikeKind(kind) {
         switch (kind) {
-            case 165 /* MethodSignature */:
-            case 170 /* CallSignature */:
-            case 315 /* JSDocSignature */:
-            case 171 /* ConstructSignature */:
-            case 172 /* IndexSignature */:
-            case 175 /* FunctionType */:
-            case 309 /* JSDocFunctionType */:
-            case 176 /* ConstructorType */:
+            case 166 /* MethodSignature */:
+            case 172 /* CallSignature */:
+            case 318 /* JSDocSignature */:
+            case 173 /* ConstructSignature */:
+            case 174 /* IndexSignature */:
+            case 177 /* FunctionType */:
+            case 312 /* JSDocFunctionType */:
+            case 178 /* ConstructorType */:
                 return true;
             default:
                 return isFunctionLikeDeclarationKind(kind);
@@ -12985,29 +13311,30 @@
     // Classes
     function isClassElement(node) {
         var kind = node.kind;
-        return kind === 167 /* Constructor */
-            || kind === 164 /* PropertyDeclaration */
-            || kind === 166 /* MethodDeclaration */
-            || kind === 168 /* GetAccessor */
-            || kind === 169 /* SetAccessor */
-            || kind === 172 /* IndexSignature */
-            || kind === 230 /* SemicolonClassElement */;
+        return kind === 169 /* Constructor */
+            || kind === 165 /* PropertyDeclaration */
+            || kind === 167 /* MethodDeclaration */
+            || kind === 170 /* GetAccessor */
+            || kind === 171 /* SetAccessor */
+            || kind === 174 /* IndexSignature */
+            || kind === 168 /* ClassStaticBlockDeclaration */
+            || kind === 232 /* SemicolonClassElement */;
     }
     ts.isClassElement = isClassElement;
     function isClassLike(node) {
-        return node && (node.kind === 253 /* ClassDeclaration */ || node.kind === 222 /* ClassExpression */);
+        return node && (node.kind === 255 /* ClassDeclaration */ || node.kind === 224 /* ClassExpression */);
     }
     ts.isClassLike = isClassLike;
     function isAccessor(node) {
-        return node && (node.kind === 168 /* GetAccessor */ || node.kind === 169 /* SetAccessor */);
+        return node && (node.kind === 170 /* GetAccessor */ || node.kind === 171 /* SetAccessor */);
     }
     ts.isAccessor = isAccessor;
     /* @internal */
     function isMethodOrAccessor(node) {
         switch (node.kind) {
-            case 166 /* MethodDeclaration */:
-            case 168 /* GetAccessor */:
-            case 169 /* SetAccessor */:
+            case 167 /* MethodDeclaration */:
+            case 170 /* GetAccessor */:
+            case 171 /* SetAccessor */:
                 return true;
             default:
                 return false;
@@ -13017,11 +13344,11 @@
     // Type members
     function isTypeElement(node) {
         var kind = node.kind;
-        return kind === 171 /* ConstructSignature */
-            || kind === 170 /* CallSignature */
-            || kind === 163 /* PropertySignature */
-            || kind === 165 /* MethodSignature */
-            || kind === 172 /* IndexSignature */;
+        return kind === 173 /* ConstructSignature */
+            || kind === 172 /* CallSignature */
+            || kind === 164 /* PropertySignature */
+            || kind === 166 /* MethodSignature */
+            || kind === 174 /* IndexSignature */;
     }
     ts.isTypeElement = isTypeElement;
     function isClassOrTypeElement(node) {
@@ -13030,12 +13357,12 @@
     ts.isClassOrTypeElement = isClassOrTypeElement;
     function isObjectLiteralElementLike(node) {
         var kind = node.kind;
-        return kind === 289 /* PropertyAssignment */
-            || kind === 290 /* ShorthandPropertyAssignment */
-            || kind === 291 /* SpreadAssignment */
-            || kind === 166 /* MethodDeclaration */
-            || kind === 168 /* GetAccessor */
-            || kind === 169 /* SetAccessor */;
+        return kind === 291 /* PropertyAssignment */
+            || kind === 292 /* ShorthandPropertyAssignment */
+            || kind === 293 /* SpreadAssignment */
+            || kind === 167 /* MethodDeclaration */
+            || kind === 170 /* GetAccessor */
+            || kind === 171 /* SetAccessor */;
     }
     ts.isObjectLiteralElementLike = isObjectLiteralElementLike;
     // Type
@@ -13050,8 +13377,8 @@
     ts.isTypeNode = isTypeNode;
     function isFunctionOrConstructorTypeNode(node) {
         switch (node.kind) {
-            case 175 /* FunctionType */:
-            case 176 /* ConstructorType */:
+            case 177 /* FunctionType */:
+            case 178 /* ConstructorType */:
                 return true;
         }
         return false;
@@ -13062,8 +13389,8 @@
     function isBindingPattern(node) {
         if (node) {
             var kind = node.kind;
-            return kind === 198 /* ArrayBindingPattern */
-                || kind === 197 /* ObjectBindingPattern */;
+            return kind === 200 /* ArrayBindingPattern */
+                || kind === 199 /* ObjectBindingPattern */;
         }
         return false;
     }
@@ -13071,15 +13398,15 @@
     /* @internal */
     function isAssignmentPattern(node) {
         var kind = node.kind;
-        return kind === 200 /* ArrayLiteralExpression */
-            || kind === 201 /* ObjectLiteralExpression */;
+        return kind === 202 /* ArrayLiteralExpression */
+            || kind === 203 /* ObjectLiteralExpression */;
     }
     ts.isAssignmentPattern = isAssignmentPattern;
     /* @internal */
     function isArrayBindingElement(node) {
         var kind = node.kind;
-        return kind === 199 /* BindingElement */
-            || kind === 223 /* OmittedExpression */;
+        return kind === 201 /* BindingElement */
+            || kind === 225 /* OmittedExpression */;
     }
     ts.isArrayBindingElement = isArrayBindingElement;
     /**
@@ -13088,9 +13415,9 @@
     /* @internal */
     function isDeclarationBindingElement(bindingElement) {
         switch (bindingElement.kind) {
-            case 250 /* VariableDeclaration */:
-            case 161 /* Parameter */:
-            case 199 /* BindingElement */:
+            case 252 /* VariableDeclaration */:
+            case 162 /* Parameter */:
+            case 201 /* BindingElement */:
                 return true;
         }
         return false;
@@ -13111,21 +13438,33 @@
     /* @internal */
     function isObjectBindingOrAssignmentPattern(node) {
         switch (node.kind) {
-            case 197 /* ObjectBindingPattern */:
-            case 201 /* ObjectLiteralExpression */:
+            case 199 /* ObjectBindingPattern */:
+            case 203 /* ObjectLiteralExpression */:
                 return true;
         }
         return false;
     }
     ts.isObjectBindingOrAssignmentPattern = isObjectBindingOrAssignmentPattern;
+    /* @internal */
+    function isObjectBindingOrAssignmentElement(node) {
+        switch (node.kind) {
+            case 201 /* BindingElement */:
+            case 291 /* PropertyAssignment */: // AssignmentProperty
+            case 292 /* ShorthandPropertyAssignment */: // AssignmentProperty
+            case 293 /* SpreadAssignment */: // AssignmentRestProperty
+                return true;
+        }
+        return false;
+    }
+    ts.isObjectBindingOrAssignmentElement = isObjectBindingOrAssignmentElement;
     /**
      * Determines whether a node is an ArrayBindingOrAssignmentPattern
      */
     /* @internal */
     function isArrayBindingOrAssignmentPattern(node) {
         switch (node.kind) {
-            case 198 /* ArrayBindingPattern */:
-            case 200 /* ArrayLiteralExpression */:
+            case 200 /* ArrayBindingPattern */:
+            case 202 /* ArrayLiteralExpression */:
                 return true;
         }
         return false;
@@ -13134,26 +13473,26 @@
     /* @internal */
     function isPropertyAccessOrQualifiedNameOrImportTypeNode(node) {
         var kind = node.kind;
-        return kind === 202 /* PropertyAccessExpression */
-            || kind === 158 /* QualifiedName */
-            || kind === 196 /* ImportType */;
+        return kind === 204 /* PropertyAccessExpression */
+            || kind === 159 /* QualifiedName */
+            || kind === 198 /* ImportType */;
     }
     ts.isPropertyAccessOrQualifiedNameOrImportTypeNode = isPropertyAccessOrQualifiedNameOrImportTypeNode;
     // Expression
     function isPropertyAccessOrQualifiedName(node) {
         var kind = node.kind;
-        return kind === 202 /* PropertyAccessExpression */
-            || kind === 158 /* QualifiedName */;
+        return kind === 204 /* PropertyAccessExpression */
+            || kind === 159 /* QualifiedName */;
     }
     ts.isPropertyAccessOrQualifiedName = isPropertyAccessOrQualifiedName;
     function isCallLikeExpression(node) {
         switch (node.kind) {
-            case 276 /* JsxOpeningElement */:
-            case 275 /* JsxSelfClosingElement */:
-            case 204 /* CallExpression */:
-            case 205 /* NewExpression */:
-            case 206 /* TaggedTemplateExpression */:
-            case 162 /* Decorator */:
+            case 278 /* JsxOpeningElement */:
+            case 277 /* JsxSelfClosingElement */:
+            case 206 /* CallExpression */:
+            case 207 /* NewExpression */:
+            case 208 /* TaggedTemplateExpression */:
+            case 163 /* Decorator */:
                 return true;
             default:
                 return false;
@@ -13161,12 +13500,12 @@
     }
     ts.isCallLikeExpression = isCallLikeExpression;
     function isCallOrNewExpression(node) {
-        return node.kind === 204 /* CallExpression */ || node.kind === 205 /* NewExpression */;
+        return node.kind === 206 /* CallExpression */ || node.kind === 207 /* NewExpression */;
     }
     ts.isCallOrNewExpression = isCallOrNewExpression;
     function isTemplateLiteral(node) {
         var kind = node.kind;
-        return kind === 219 /* TemplateExpression */
+        return kind === 221 /* TemplateExpression */
             || kind === 14 /* NoSubstitutionTemplateLiteral */;
     }
     ts.isTemplateLiteral = isTemplateLiteral;
@@ -13177,34 +13516,34 @@
     ts.isLeftHandSideExpression = isLeftHandSideExpression;
     function isLeftHandSideExpressionKind(kind) {
         switch (kind) {
-            case 202 /* PropertyAccessExpression */:
-            case 203 /* ElementAccessExpression */:
-            case 205 /* NewExpression */:
-            case 204 /* CallExpression */:
-            case 274 /* JsxElement */:
-            case 275 /* JsxSelfClosingElement */:
-            case 278 /* JsxFragment */:
-            case 206 /* TaggedTemplateExpression */:
-            case 200 /* ArrayLiteralExpression */:
-            case 208 /* ParenthesizedExpression */:
-            case 201 /* ObjectLiteralExpression */:
-            case 222 /* ClassExpression */:
-            case 209 /* FunctionExpression */:
-            case 78 /* Identifier */:
+            case 204 /* PropertyAccessExpression */:
+            case 205 /* ElementAccessExpression */:
+            case 207 /* NewExpression */:
+            case 206 /* CallExpression */:
+            case 276 /* JsxElement */:
+            case 277 /* JsxSelfClosingElement */:
+            case 280 /* JsxFragment */:
+            case 208 /* TaggedTemplateExpression */:
+            case 202 /* ArrayLiteralExpression */:
+            case 210 /* ParenthesizedExpression */:
+            case 203 /* ObjectLiteralExpression */:
+            case 224 /* ClassExpression */:
+            case 211 /* FunctionExpression */:
+            case 79 /* Identifier */:
             case 13 /* RegularExpressionLiteral */:
             case 8 /* NumericLiteral */:
             case 9 /* BigIntLiteral */:
             case 10 /* StringLiteral */:
             case 14 /* NoSubstitutionTemplateLiteral */:
-            case 219 /* TemplateExpression */:
-            case 94 /* FalseKeyword */:
-            case 103 /* NullKeyword */:
-            case 107 /* ThisKeyword */:
-            case 109 /* TrueKeyword */:
-            case 105 /* SuperKeyword */:
-            case 226 /* NonNullExpression */:
-            case 227 /* MetaProperty */:
-            case 99 /* ImportKeyword */: // technically this is only an Expression if it's in a CallExpression
+            case 221 /* TemplateExpression */:
+            case 95 /* FalseKeyword */:
+            case 104 /* NullKeyword */:
+            case 108 /* ThisKeyword */:
+            case 110 /* TrueKeyword */:
+            case 106 /* SuperKeyword */:
+            case 228 /* NonNullExpression */:
+            case 229 /* MetaProperty */:
+            case 100 /* ImportKeyword */: // technically this is only an Expression if it's in a CallExpression
                 return true;
             default:
                 return false;
@@ -13217,13 +13556,13 @@
     ts.isUnaryExpression = isUnaryExpression;
     function isUnaryExpressionKind(kind) {
         switch (kind) {
-            case 215 /* PrefixUnaryExpression */:
-            case 216 /* PostfixUnaryExpression */:
-            case 211 /* DeleteExpression */:
-            case 212 /* TypeOfExpression */:
-            case 213 /* VoidExpression */:
-            case 214 /* AwaitExpression */:
-            case 207 /* TypeAssertionExpression */:
+            case 217 /* PrefixUnaryExpression */:
+            case 218 /* PostfixUnaryExpression */:
+            case 213 /* DeleteExpression */:
+            case 214 /* TypeOfExpression */:
+            case 215 /* VoidExpression */:
+            case 216 /* AwaitExpression */:
+            case 209 /* TypeAssertionExpression */:
                 return true;
             default:
                 return isLeftHandSideExpressionKind(kind);
@@ -13232,9 +13571,9 @@
     /* @internal */
     function isUnaryExpressionWithWrite(expr) {
         switch (expr.kind) {
-            case 216 /* PostfixUnaryExpression */:
+            case 218 /* PostfixUnaryExpression */:
                 return true;
-            case 215 /* PrefixUnaryExpression */:
+            case 217 /* PrefixUnaryExpression */:
                 return expr.operator === 45 /* PlusPlusToken */ ||
                     expr.operator === 46 /* MinusMinusToken */;
             default:
@@ -13253,15 +13592,15 @@
     ts.isExpression = isExpression;
     function isExpressionKind(kind) {
         switch (kind) {
-            case 218 /* ConditionalExpression */:
-            case 220 /* YieldExpression */:
-            case 210 /* ArrowFunction */:
-            case 217 /* BinaryExpression */:
-            case 221 /* SpreadElement */:
-            case 225 /* AsExpression */:
-            case 223 /* OmittedExpression */:
-            case 341 /* CommaListExpression */:
-            case 340 /* PartiallyEmittedExpression */:
+            case 220 /* ConditionalExpression */:
+            case 222 /* YieldExpression */:
+            case 212 /* ArrowFunction */:
+            case 219 /* BinaryExpression */:
+            case 223 /* SpreadElement */:
+            case 227 /* AsExpression */:
+            case 225 /* OmittedExpression */:
+            case 346 /* CommaListExpression */:
+            case 345 /* PartiallyEmittedExpression */:
                 return true;
             default:
                 return isUnaryExpressionKind(kind);
@@ -13269,8 +13608,8 @@
     }
     function isAssertionExpression(node) {
         var kind = node.kind;
-        return kind === 207 /* TypeAssertionExpression */
-            || kind === 225 /* AsExpression */;
+        return kind === 209 /* TypeAssertionExpression */
+            || kind === 227 /* AsExpression */;
     }
     ts.isAssertionExpression = isAssertionExpression;
     /* @internal */
@@ -13281,13 +13620,13 @@
     ts.isNotEmittedOrPartiallyEmittedNode = isNotEmittedOrPartiallyEmittedNode;
     function isIterationStatement(node, lookInLabeledStatements) {
         switch (node.kind) {
-            case 238 /* ForStatement */:
-            case 239 /* ForInStatement */:
-            case 240 /* ForOfStatement */:
-            case 236 /* DoStatement */:
-            case 237 /* WhileStatement */:
+            case 240 /* ForStatement */:
+            case 241 /* ForInStatement */:
+            case 242 /* ForOfStatement */:
+            case 238 /* DoStatement */:
+            case 239 /* WhileStatement */:
                 return true;
-            case 246 /* LabeledStatement */:
+            case 248 /* LabeledStatement */:
                 return lookInLabeledStatements && isIterationStatement(node.statement, lookInLabeledStatements);
         }
         return false;
@@ -13316,7 +13655,7 @@
     ts.isExternalModuleIndicator = isExternalModuleIndicator;
     /* @internal */
     function isForInOrOfStatement(node) {
-        return node.kind === 239 /* ForInStatement */ || node.kind === 240 /* ForOfStatement */;
+        return node.kind === 241 /* ForInStatement */ || node.kind === 242 /* ForOfStatement */;
     }
     ts.isForInOrOfStatement = isForInOrOfStatement;
     // Element
@@ -13340,114 +13679,115 @@
     /* @internal */
     function isModuleBody(node) {
         var kind = node.kind;
-        return kind === 258 /* ModuleBlock */
-            || kind === 257 /* ModuleDeclaration */
-            || kind === 78 /* Identifier */;
+        return kind === 260 /* ModuleBlock */
+            || kind === 259 /* ModuleDeclaration */
+            || kind === 79 /* Identifier */;
     }
     ts.isModuleBody = isModuleBody;
     /* @internal */
     function isNamespaceBody(node) {
         var kind = node.kind;
-        return kind === 258 /* ModuleBlock */
-            || kind === 257 /* ModuleDeclaration */;
+        return kind === 260 /* ModuleBlock */
+            || kind === 259 /* ModuleDeclaration */;
     }
     ts.isNamespaceBody = isNamespaceBody;
     /* @internal */
     function isJSDocNamespaceBody(node) {
         var kind = node.kind;
-        return kind === 78 /* Identifier */
-            || kind === 257 /* ModuleDeclaration */;
+        return kind === 79 /* Identifier */
+            || kind === 259 /* ModuleDeclaration */;
     }
     ts.isJSDocNamespaceBody = isJSDocNamespaceBody;
     /* @internal */
     function isNamedImportBindings(node) {
         var kind = node.kind;
-        return kind === 265 /* NamedImports */
-            || kind === 264 /* NamespaceImport */;
+        return kind === 267 /* NamedImports */
+            || kind === 266 /* NamespaceImport */;
     }
     ts.isNamedImportBindings = isNamedImportBindings;
     /* @internal */
     function isModuleOrEnumDeclaration(node) {
-        return node.kind === 257 /* ModuleDeclaration */ || node.kind === 256 /* EnumDeclaration */;
+        return node.kind === 259 /* ModuleDeclaration */ || node.kind === 258 /* EnumDeclaration */;
     }
     ts.isModuleOrEnumDeclaration = isModuleOrEnumDeclaration;
     function isDeclarationKind(kind) {
-        return kind === 210 /* ArrowFunction */
-            || kind === 199 /* BindingElement */
-            || kind === 253 /* ClassDeclaration */
-            || kind === 222 /* ClassExpression */
-            || kind === 167 /* Constructor */
-            || kind === 256 /* EnumDeclaration */
-            || kind === 292 /* EnumMember */
-            || kind === 271 /* ExportSpecifier */
-            || kind === 252 /* FunctionDeclaration */
-            || kind === 209 /* FunctionExpression */
-            || kind === 168 /* GetAccessor */
-            || kind === 263 /* ImportClause */
-            || kind === 261 /* ImportEqualsDeclaration */
-            || kind === 266 /* ImportSpecifier */
-            || kind === 254 /* InterfaceDeclaration */
-            || kind === 281 /* JsxAttribute */
-            || kind === 166 /* MethodDeclaration */
-            || kind === 165 /* MethodSignature */
-            || kind === 257 /* ModuleDeclaration */
-            || kind === 260 /* NamespaceExportDeclaration */
-            || kind === 264 /* NamespaceImport */
-            || kind === 270 /* NamespaceExport */
-            || kind === 161 /* Parameter */
-            || kind === 289 /* PropertyAssignment */
-            || kind === 164 /* PropertyDeclaration */
-            || kind === 163 /* PropertySignature */
-            || kind === 169 /* SetAccessor */
-            || kind === 290 /* ShorthandPropertyAssignment */
-            || kind === 255 /* TypeAliasDeclaration */
-            || kind === 160 /* TypeParameter */
-            || kind === 250 /* VariableDeclaration */
-            || kind === 335 /* JSDocTypedefTag */
-            || kind === 328 /* JSDocCallbackTag */
-            || kind === 337 /* JSDocPropertyTag */;
+        return kind === 212 /* ArrowFunction */
+            || kind === 201 /* BindingElement */
+            || kind === 255 /* ClassDeclaration */
+            || kind === 224 /* ClassExpression */
+            || kind === 168 /* ClassStaticBlockDeclaration */
+            || kind === 169 /* Constructor */
+            || kind === 258 /* EnumDeclaration */
+            || kind === 294 /* EnumMember */
+            || kind === 273 /* ExportSpecifier */
+            || kind === 254 /* FunctionDeclaration */
+            || kind === 211 /* FunctionExpression */
+            || kind === 170 /* GetAccessor */
+            || kind === 265 /* ImportClause */
+            || kind === 263 /* ImportEqualsDeclaration */
+            || kind === 268 /* ImportSpecifier */
+            || kind === 256 /* InterfaceDeclaration */
+            || kind === 283 /* JsxAttribute */
+            || kind === 167 /* MethodDeclaration */
+            || kind === 166 /* MethodSignature */
+            || kind === 259 /* ModuleDeclaration */
+            || kind === 262 /* NamespaceExportDeclaration */
+            || kind === 266 /* NamespaceImport */
+            || kind === 272 /* NamespaceExport */
+            || kind === 162 /* Parameter */
+            || kind === 291 /* PropertyAssignment */
+            || kind === 165 /* PropertyDeclaration */
+            || kind === 164 /* PropertySignature */
+            || kind === 171 /* SetAccessor */
+            || kind === 292 /* ShorthandPropertyAssignment */
+            || kind === 257 /* TypeAliasDeclaration */
+            || kind === 161 /* TypeParameter */
+            || kind === 252 /* VariableDeclaration */
+            || kind === 340 /* JSDocTypedefTag */
+            || kind === 333 /* JSDocCallbackTag */
+            || kind === 342 /* JSDocPropertyTag */;
     }
     function isDeclarationStatementKind(kind) {
-        return kind === 252 /* FunctionDeclaration */
-            || kind === 272 /* MissingDeclaration */
-            || kind === 253 /* ClassDeclaration */
-            || kind === 254 /* InterfaceDeclaration */
-            || kind === 255 /* TypeAliasDeclaration */
-            || kind === 256 /* EnumDeclaration */
-            || kind === 257 /* ModuleDeclaration */
-            || kind === 262 /* ImportDeclaration */
-            || kind === 261 /* ImportEqualsDeclaration */
-            || kind === 268 /* ExportDeclaration */
-            || kind === 267 /* ExportAssignment */
-            || kind === 260 /* NamespaceExportDeclaration */;
+        return kind === 254 /* FunctionDeclaration */
+            || kind === 274 /* MissingDeclaration */
+            || kind === 255 /* ClassDeclaration */
+            || kind === 256 /* InterfaceDeclaration */
+            || kind === 257 /* TypeAliasDeclaration */
+            || kind === 258 /* EnumDeclaration */
+            || kind === 259 /* ModuleDeclaration */
+            || kind === 264 /* ImportDeclaration */
+            || kind === 263 /* ImportEqualsDeclaration */
+            || kind === 270 /* ExportDeclaration */
+            || kind === 269 /* ExportAssignment */
+            || kind === 262 /* NamespaceExportDeclaration */;
     }
     function isStatementKindButNotDeclarationKind(kind) {
-        return kind === 242 /* BreakStatement */
-            || kind === 241 /* ContinueStatement */
-            || kind === 249 /* DebuggerStatement */
-            || kind === 236 /* DoStatement */
-            || kind === 234 /* ExpressionStatement */
-            || kind === 232 /* EmptyStatement */
-            || kind === 239 /* ForInStatement */
-            || kind === 240 /* ForOfStatement */
-            || kind === 238 /* ForStatement */
-            || kind === 235 /* IfStatement */
-            || kind === 246 /* LabeledStatement */
-            || kind === 243 /* ReturnStatement */
-            || kind === 245 /* SwitchStatement */
-            || kind === 247 /* ThrowStatement */
-            || kind === 248 /* TryStatement */
-            || kind === 233 /* VariableStatement */
-            || kind === 237 /* WhileStatement */
-            || kind === 244 /* WithStatement */
-            || kind === 339 /* NotEmittedStatement */
-            || kind === 343 /* EndOfDeclarationMarker */
-            || kind === 342 /* MergeDeclarationMarker */;
+        return kind === 244 /* BreakStatement */
+            || kind === 243 /* ContinueStatement */
+            || kind === 251 /* DebuggerStatement */
+            || kind === 238 /* DoStatement */
+            || kind === 236 /* ExpressionStatement */
+            || kind === 234 /* EmptyStatement */
+            || kind === 241 /* ForInStatement */
+            || kind === 242 /* ForOfStatement */
+            || kind === 240 /* ForStatement */
+            || kind === 237 /* IfStatement */
+            || kind === 248 /* LabeledStatement */
+            || kind === 245 /* ReturnStatement */
+            || kind === 247 /* SwitchStatement */
+            || kind === 249 /* ThrowStatement */
+            || kind === 250 /* TryStatement */
+            || kind === 235 /* VariableStatement */
+            || kind === 239 /* WhileStatement */
+            || kind === 246 /* WithStatement */
+            || kind === 344 /* NotEmittedStatement */
+            || kind === 348 /* EndOfDeclarationMarker */
+            || kind === 347 /* MergeDeclarationMarker */;
     }
     /* @internal */
     function isDeclaration(node) {
-        if (node.kind === 160 /* TypeParameter */) {
-            return (node.parent && node.parent.kind !== 334 /* JSDocTemplateTag */) || ts.isInJSFile(node);
+        if (node.kind === 161 /* TypeParameter */) {
+            return (node.parent && node.parent.kind !== 339 /* JSDocTemplateTag */) || ts.isInJSFile(node);
         }
         return isDeclarationKind(node.kind);
     }
@@ -13474,10 +13814,10 @@
     }
     ts.isStatement = isStatement;
     function isBlockStatement(node) {
-        if (node.kind !== 231 /* Block */)
+        if (node.kind !== 233 /* Block */)
             return false;
         if (node.parent !== undefined) {
-            if (node.parent.kind === 248 /* TryStatement */ || node.parent.kind === 288 /* CatchClause */) {
+            if (node.parent.kind === 250 /* TryStatement */ || node.parent.kind === 290 /* CatchClause */) {
                 return false;
             }
         }
@@ -13491,77 +13831,77 @@
         var kind = node.kind;
         return isStatementKindButNotDeclarationKind(kind)
             || isDeclarationStatementKind(kind)
-            || kind === 231 /* Block */;
+            || kind === 233 /* Block */;
     }
     ts.isStatementOrBlock = isStatementOrBlock;
     // Module references
     /* @internal */
     function isModuleReference(node) {
         var kind = node.kind;
-        return kind === 273 /* ExternalModuleReference */
-            || kind === 158 /* QualifiedName */
-            || kind === 78 /* Identifier */;
+        return kind === 275 /* ExternalModuleReference */
+            || kind === 159 /* QualifiedName */
+            || kind === 79 /* Identifier */;
     }
     ts.isModuleReference = isModuleReference;
     // JSX
     /* @internal */
     function isJsxTagNameExpression(node) {
         var kind = node.kind;
-        return kind === 107 /* ThisKeyword */
-            || kind === 78 /* Identifier */
-            || kind === 202 /* PropertyAccessExpression */;
+        return kind === 108 /* ThisKeyword */
+            || kind === 79 /* Identifier */
+            || kind === 204 /* PropertyAccessExpression */;
     }
     ts.isJsxTagNameExpression = isJsxTagNameExpression;
     /* @internal */
     function isJsxChild(node) {
         var kind = node.kind;
-        return kind === 274 /* JsxElement */
-            || kind === 284 /* JsxExpression */
-            || kind === 275 /* JsxSelfClosingElement */
+        return kind === 276 /* JsxElement */
+            || kind === 286 /* JsxExpression */
+            || kind === 277 /* JsxSelfClosingElement */
             || kind === 11 /* JsxText */
-            || kind === 278 /* JsxFragment */;
+            || kind === 280 /* JsxFragment */;
     }
     ts.isJsxChild = isJsxChild;
     /* @internal */
     function isJsxAttributeLike(node) {
         var kind = node.kind;
-        return kind === 281 /* JsxAttribute */
-            || kind === 283 /* JsxSpreadAttribute */;
+        return kind === 283 /* JsxAttribute */
+            || kind === 285 /* JsxSpreadAttribute */;
     }
     ts.isJsxAttributeLike = isJsxAttributeLike;
     /* @internal */
     function isStringLiteralOrJsxExpression(node) {
         var kind = node.kind;
         return kind === 10 /* StringLiteral */
-            || kind === 284 /* JsxExpression */;
+            || kind === 286 /* JsxExpression */;
     }
     ts.isStringLiteralOrJsxExpression = isStringLiteralOrJsxExpression;
     function isJsxOpeningLikeElement(node) {
         var kind = node.kind;
-        return kind === 276 /* JsxOpeningElement */
-            || kind === 275 /* JsxSelfClosingElement */;
+        return kind === 278 /* JsxOpeningElement */
+            || kind === 277 /* JsxSelfClosingElement */;
     }
     ts.isJsxOpeningLikeElement = isJsxOpeningLikeElement;
     // Clauses
     function isCaseOrDefaultClause(node) {
         var kind = node.kind;
-        return kind === 285 /* CaseClause */
-            || kind === 286 /* DefaultClause */;
+        return kind === 287 /* CaseClause */
+            || kind === 288 /* DefaultClause */;
     }
     ts.isCaseOrDefaultClause = isCaseOrDefaultClause;
     // JSDoc
     /** True if node is of some JSDoc syntax kind. */
     /* @internal */
     function isJSDocNode(node) {
-        return node.kind >= 302 /* FirstJSDocNode */ && node.kind <= 337 /* LastJSDocNode */;
+        return node.kind >= 304 /* FirstJSDocNode */ && node.kind <= 342 /* LastJSDocNode */;
     }
     ts.isJSDocNode = isJSDocNode;
     /** True if node is of a kind that may contain comment text. */
     function isJSDocCommentContainingNode(node) {
-        return node.kind === 312 /* JSDocComment */
-            || node.kind === 311 /* JSDocNamepathType */
-            || node.kind === 313 /* JSDocText */
-            || node.kind === 316 /* JSDocLink */
+        return node.kind === 315 /* JSDocComment */
+            || node.kind === 314 /* JSDocNamepathType */
+            || node.kind === 316 /* JSDocText */
+            || isJSDocLinkLike(node)
             || isJSDocTag(node)
             || ts.isJSDocTypeLiteral(node)
             || ts.isJSDocSignature(node);
@@ -13570,15 +13910,15 @@
     // TODO: determine what this does before making it public.
     /* @internal */
     function isJSDocTag(node) {
-        return node.kind >= 317 /* FirstJSDocTagNode */ && node.kind <= 337 /* LastJSDocTagNode */;
+        return node.kind >= 322 /* FirstJSDocTagNode */ && node.kind <= 342 /* LastJSDocTagNode */;
     }
     ts.isJSDocTag = isJSDocTag;
     function isSetAccessor(node) {
-        return node.kind === 169 /* SetAccessor */;
+        return node.kind === 171 /* SetAccessor */;
     }
     ts.isSetAccessor = isSetAccessor;
     function isGetAccessor(node) {
-        return node.kind === 168 /* GetAccessor */;
+        return node.kind === 170 /* GetAccessor */;
     }
     ts.isGetAccessor = isGetAccessor;
     /** True if has jsdoc nodes attached to it. */
@@ -13604,13 +13944,13 @@
     /** True if has initializer node attached to it. */
     function hasOnlyExpressionInitializer(node) {
         switch (node.kind) {
-            case 250 /* VariableDeclaration */:
-            case 161 /* Parameter */:
-            case 199 /* BindingElement */:
-            case 163 /* PropertySignature */:
-            case 164 /* PropertyDeclaration */:
-            case 289 /* PropertyAssignment */:
-            case 292 /* EnumMember */:
+            case 252 /* VariableDeclaration */:
+            case 162 /* Parameter */:
+            case 201 /* BindingElement */:
+            case 164 /* PropertySignature */:
+            case 165 /* PropertyDeclaration */:
+            case 291 /* PropertyAssignment */:
+            case 294 /* EnumMember */:
                 return true;
             default:
                 return false;
@@ -13618,12 +13958,12 @@
     }
     ts.hasOnlyExpressionInitializer = hasOnlyExpressionInitializer;
     function isObjectLiteralElement(node) {
-        return node.kind === 281 /* JsxAttribute */ || node.kind === 283 /* JsxSpreadAttribute */ || isObjectLiteralElementLike(node);
+        return node.kind === 283 /* JsxAttribute */ || node.kind === 285 /* JsxSpreadAttribute */ || isObjectLiteralElementLike(node);
     }
     ts.isObjectLiteralElement = isObjectLiteralElement;
     /* @internal */
     function isTypeReferenceType(node) {
-        return node.kind === 174 /* TypeReference */ || node.kind === 224 /* ExpressionWithTypeArguments */;
+        return node.kind === 176 /* TypeReference */ || node.kind === 226 /* ExpressionWithTypeArguments */;
     }
     ts.isTypeReferenceType = isTypeReferenceType;
     var MAX_SMI_X86 = 1073741823;
@@ -13655,6 +13995,10 @@
         return node.kind === 10 /* StringLiteral */ || node.kind === 14 /* NoSubstitutionTemplateLiteral */;
     }
     ts.isStringLiteralLike = isStringLiteralLike;
+    function isJSDocLinkLike(node) {
+        return node.kind === 319 /* JSDocLink */ || node.kind === 320 /* JSDocLinkCode */ || node.kind === 321 /* JSDocLinkPlain */;
+    }
+    ts.isJSDocLinkLike = isJSDocLinkLike;
     // #endregion
 })(ts || (ts = {}));
 /* @internal */
@@ -13739,7 +14083,7 @@
             increaseIndent: ts.noop,
             decreaseIndent: ts.noop,
             clear: function () { return str = ""; },
-            trackSymbol: ts.noop,
+            trackSymbol: function () { return false; },
             reportInaccessibleThisError: ts.noop,
             reportInaccessibleUniqueSymbolError: ts.noop,
             reportPrivateInBaseOfClassExpression: ts.noop,
@@ -13751,11 +14095,19 @@
     }
     ts.changesAffectModuleResolution = changesAffectModuleResolution;
     function optionsHaveModuleResolutionChanges(oldOptions, newOptions) {
-        return ts.moduleResolutionOptionDeclarations.some(function (o) {
+        return optionsHaveChanges(oldOptions, newOptions, ts.moduleResolutionOptionDeclarations);
+    }
+    ts.optionsHaveModuleResolutionChanges = optionsHaveModuleResolutionChanges;
+    function changesAffectingProgramStructure(oldOptions, newOptions) {
+        return optionsHaveChanges(oldOptions, newOptions, ts.optionsAffectingProgramStructure);
+    }
+    ts.changesAffectingProgramStructure = changesAffectingProgramStructure;
+    function optionsHaveChanges(oldOptions, newOptions, optionDeclarations) {
+        return oldOptions !== newOptions && optionDeclarations.some(function (o) {
             return !isJsonEqual(getCompilerOptionValue(oldOptions, o), getCompilerOptionValue(newOptions, o));
         });
     }
-    ts.optionsHaveModuleResolutionChanges = optionsHaveModuleResolutionChanges;
+    ts.optionsHaveChanges = optionsHaveChanges;
     function forEachAncestor(node, callback) {
         while (true) {
             var res = callback(node);
@@ -13906,19 +14258,23 @@
         }
     }
     function getSourceFileOfNode(node) {
-        while (node && node.kind !== 298 /* SourceFile */) {
+        while (node && node.kind !== 300 /* SourceFile */) {
             node = node.parent;
         }
         return node;
     }
     ts.getSourceFileOfNode = getSourceFileOfNode;
+    function getSourceFileOfModule(module) {
+        return getSourceFileOfNode(module.valueDeclaration || getNonAugmentationDeclaration(module));
+    }
+    ts.getSourceFileOfModule = getSourceFileOfModule;
     function isStatementWithLocals(node) {
         switch (node.kind) {
-            case 231 /* Block */:
-            case 259 /* CaseBlock */:
-            case 238 /* ForStatement */:
-            case 239 /* ForInStatement */:
-            case 240 /* ForOfStatement */:
+            case 233 /* Block */:
+            case 261 /* CaseBlock */:
+            case 240 /* ForStatement */:
+            case 241 /* ForInStatement */:
+            case 242 /* ForOfStatement */:
                 return true;
         }
         return false;
@@ -14003,7 +14359,7 @@
                 break;
             }
         }
-        to.splice.apply(to, __spreadArray([statementIndex, 0], from));
+        to.splice.apply(to, __spreadArray([statementIndex, 0], from, false));
         return to;
     }
     function insertStatementAfterPrologue(to, statement, isPrologueDirective) {
@@ -14056,10 +14412,10 @@
             commentPos + 2 < commentEnd &&
             text.charCodeAt(commentPos + 2) === 47 /* slash */) {
             var textSubStr = text.substring(commentPos, commentEnd);
-            return textSubStr.match(ts.fullTripleSlashReferencePathRegEx) ||
-                textSubStr.match(ts.fullTripleSlashAMDReferencePathRegEx) ||
-                textSubStr.match(fullTripleSlashReferenceTypeReferenceDirectiveRegEx) ||
-                textSubStr.match(defaultLibReferenceRegEx) ?
+            return ts.fullTripleSlashReferencePathRegEx.test(textSubStr) ||
+                ts.fullTripleSlashAMDReferencePathRegEx.test(textSubStr) ||
+                fullTripleSlashReferenceTypeReferenceDirectiveRegEx.test(textSubStr) ||
+                defaultLibReferenceRegEx.test(textSubStr) ?
                 true : false;
         }
         return false;
@@ -14114,7 +14470,7 @@
         // the syntax list itself considers them as normal trivia. Therefore if we simply skip
         // trivia for the list, we may have skipped the JSDocComment as well. So we should process its
         // first child to determine the actual position of its first token.
-        if (node.kind === 338 /* SyntaxList */ && node._children.length > 0) {
+        if (node.kind === 343 /* SyntaxList */ && node._children.length > 0) {
             return getTokenPosOfNode(node._children[0], sourceFile, includeJsDoc);
         }
         return ts.skipTrivia((sourceFile || getSourceFileOfNode(node)).text, node.pos, 
@@ -14149,7 +14505,7 @@
         var text = sourceText.substring(includeTrivia ? node.pos : ts.skipTrivia(sourceText, node.pos), node.end);
         if (isJSDocTypeExpressionOrChild(node)) {
             // strip space + asterisk at line start
-            text = text.replace(/(^|\r?\n|\r)\s*\*\s*/g, "$1");
+            text = text.split(/\r\n|\n|\r/).map(function (line) { return ts.trimStringStart(line.replace(/^\s*\*/, "")); }).join("\n");
         }
         return text;
     }
@@ -14257,6 +14613,7 @@
         GetLiteralTextFlags[GetLiteralTextFlags["AllowNumericSeparator"] = 8] = "AllowNumericSeparator";
     })(GetLiteralTextFlags = ts.GetLiteralTextFlags || (ts.GetLiteralTextFlags = {}));
     function getLiteralText(node, sourceFile, flags) {
+        var _a;
         // If we don't need to downlevel and we can reach the original source text using
         // the node's parent reference, then simply get the text as it was originally written.
         if (canUseOriginalText(node, flags)) {
@@ -14284,7 +14641,7 @@
                 // had to include a backslash: `not \${a} substitution`.
                 var escapeText = flags & 1 /* NeverAsciiEscape */ || (getEmitFlags(node) & 16777216 /* NoAsciiEscaping */) ? escapeString :
                     escapeNonAsciiString;
-                var rawText = node.rawText || escapeTemplateSubstitution(escapeText(node.text, 96 /* backtick */));
+                var rawText = (_a = node.rawText) !== null && _a !== void 0 ? _a : escapeTemplateSubstitution(escapeText(node.text, 96 /* backtick */));
                 switch (node.kind) {
                     case 14 /* NoSubstitutionTemplateLiteral */:
                         return "`" + rawText + "`";
@@ -14335,7 +14692,7 @@
     ts.isBlockOrCatchScoped = isBlockOrCatchScoped;
     function isCatchClauseVariableDeclarationOrBindingElement(declaration) {
         var node = getRootDeclaration(declaration);
-        return node.kind === 250 /* VariableDeclaration */ && node.parent.kind === 288 /* CatchClause */;
+        return node.kind === 252 /* VariableDeclaration */ && node.parent.kind === 290 /* CatchClause */;
     }
     ts.isCatchClauseVariableDeclarationOrBindingElement = isCatchClauseVariableDeclarationOrBindingElement;
     function isAmbientModule(node) {
@@ -14367,12 +14724,12 @@
     ts.isShorthandAmbientModuleSymbol = isShorthandAmbientModuleSymbol;
     function isShorthandAmbientModule(node) {
         // The only kind of module that can be missing a body is a shorthand ambient module.
-        return !!node && node.kind === 257 /* ModuleDeclaration */ && (!node.body);
+        return !!node && node.kind === 259 /* ModuleDeclaration */ && (!node.body);
     }
     function isBlockScopedContainerTopLevel(node) {
-        return node.kind === 298 /* SourceFile */ ||
-            node.kind === 257 /* ModuleDeclaration */ ||
-            ts.isFunctionLike(node);
+        return node.kind === 300 /* SourceFile */ ||
+            node.kind === 259 /* ModuleDeclaration */ ||
+            ts.isFunctionLikeOrClassStaticBlockDeclaration(node);
     }
     ts.isBlockScopedContainerTopLevel = isBlockScopedContainerTopLevel;
     function isGlobalScopeAugmentation(module) {
@@ -14388,9 +14745,9 @@
         // - defined in the top level scope and source file is an external module
         // - defined inside ambient module declaration located in the top level scope and source file not an external module
         switch (node.parent.kind) {
-            case 298 /* SourceFile */:
+            case 300 /* SourceFile */:
                 return ts.isExternalModule(node.parent);
-            case 258 /* ModuleBlock */:
+            case 260 /* ModuleBlock */:
                 return isAmbientModule(node.parent.parent) && ts.isSourceFile(node.parent.parent.parent) && !ts.isExternalModule(node.parent.parent.parent);
         }
         return false;
@@ -14444,34 +14801,36 @@
     ts.isEffectiveStrictModeSourceFile = isEffectiveStrictModeSourceFile;
     function isBlockScope(node, parentNode) {
         switch (node.kind) {
-            case 298 /* SourceFile */:
-            case 259 /* CaseBlock */:
-            case 288 /* CatchClause */:
-            case 257 /* ModuleDeclaration */:
-            case 238 /* ForStatement */:
-            case 239 /* ForInStatement */:
-            case 240 /* ForOfStatement */:
-            case 167 /* Constructor */:
-            case 166 /* MethodDeclaration */:
-            case 168 /* GetAccessor */:
-            case 169 /* SetAccessor */:
-            case 252 /* FunctionDeclaration */:
-            case 209 /* FunctionExpression */:
-            case 210 /* ArrowFunction */:
+            case 300 /* SourceFile */:
+            case 261 /* CaseBlock */:
+            case 290 /* CatchClause */:
+            case 259 /* ModuleDeclaration */:
+            case 240 /* ForStatement */:
+            case 241 /* ForInStatement */:
+            case 242 /* ForOfStatement */:
+            case 169 /* Constructor */:
+            case 167 /* MethodDeclaration */:
+            case 170 /* GetAccessor */:
+            case 171 /* SetAccessor */:
+            case 254 /* FunctionDeclaration */:
+            case 211 /* FunctionExpression */:
+            case 212 /* ArrowFunction */:
+            case 165 /* PropertyDeclaration */:
+            case 168 /* ClassStaticBlockDeclaration */:
                 return true;
-            case 231 /* Block */:
+            case 233 /* Block */:
                 // function block is not considered block-scope container
                 // see comment in binder.ts: bind(...), case for SyntaxKind.Block
-                return !ts.isFunctionLike(parentNode);
+                return !ts.isFunctionLikeOrClassStaticBlockDeclaration(parentNode);
         }
         return false;
     }
     ts.isBlockScope = isBlockScope;
     function isDeclarationWithTypeParameters(node) {
         switch (node.kind) {
-            case 328 /* JSDocCallbackTag */:
-            case 335 /* JSDocTypedefTag */:
-            case 315 /* JSDocSignature */:
+            case 333 /* JSDocCallbackTag */:
+            case 340 /* JSDocTypedefTag */:
+            case 318 /* JSDocSignature */:
                 return true;
             default:
                 ts.assertType(node);
@@ -14481,25 +14840,25 @@
     ts.isDeclarationWithTypeParameters = isDeclarationWithTypeParameters;
     function isDeclarationWithTypeParameterChildren(node) {
         switch (node.kind) {
-            case 170 /* CallSignature */:
-            case 171 /* ConstructSignature */:
-            case 165 /* MethodSignature */:
-            case 172 /* IndexSignature */:
-            case 175 /* FunctionType */:
-            case 176 /* ConstructorType */:
-            case 309 /* JSDocFunctionType */:
-            case 253 /* ClassDeclaration */:
-            case 222 /* ClassExpression */:
-            case 254 /* InterfaceDeclaration */:
-            case 255 /* TypeAliasDeclaration */:
-            case 334 /* JSDocTemplateTag */:
-            case 252 /* FunctionDeclaration */:
-            case 166 /* MethodDeclaration */:
-            case 167 /* Constructor */:
-            case 168 /* GetAccessor */:
-            case 169 /* SetAccessor */:
-            case 209 /* FunctionExpression */:
-            case 210 /* ArrowFunction */:
+            case 172 /* CallSignature */:
+            case 173 /* ConstructSignature */:
+            case 166 /* MethodSignature */:
+            case 174 /* IndexSignature */:
+            case 177 /* FunctionType */:
+            case 178 /* ConstructorType */:
+            case 312 /* JSDocFunctionType */:
+            case 255 /* ClassDeclaration */:
+            case 224 /* ClassExpression */:
+            case 256 /* InterfaceDeclaration */:
+            case 257 /* TypeAliasDeclaration */:
+            case 339 /* JSDocTemplateTag */:
+            case 254 /* FunctionDeclaration */:
+            case 167 /* MethodDeclaration */:
+            case 169 /* Constructor */:
+            case 170 /* GetAccessor */:
+            case 171 /* SetAccessor */:
+            case 211 /* FunctionExpression */:
+            case 212 /* ArrowFunction */:
                 return true;
             default:
                 ts.assertType(node);
@@ -14509,8 +14868,8 @@
     ts.isDeclarationWithTypeParameterChildren = isDeclarationWithTypeParameterChildren;
     function isAnyImportSyntax(node) {
         switch (node.kind) {
-            case 262 /* ImportDeclaration */:
-            case 261 /* ImportEqualsDeclaration */:
+            case 264 /* ImportDeclaration */:
+            case 263 /* ImportEqualsDeclaration */:
                 return true;
             default:
                 return false;
@@ -14519,15 +14878,15 @@
     ts.isAnyImportSyntax = isAnyImportSyntax;
     function isLateVisibilityPaintedStatement(node) {
         switch (node.kind) {
-            case 262 /* ImportDeclaration */:
-            case 261 /* ImportEqualsDeclaration */:
-            case 233 /* VariableStatement */:
-            case 253 /* ClassDeclaration */:
-            case 252 /* FunctionDeclaration */:
-            case 257 /* ModuleDeclaration */:
-            case 255 /* TypeAliasDeclaration */:
-            case 254 /* InterfaceDeclaration */:
-            case 256 /* EnumDeclaration */:
+            case 264 /* ImportDeclaration */:
+            case 263 /* ImportEqualsDeclaration */:
+            case 235 /* VariableStatement */:
+            case 255 /* ClassDeclaration */:
+            case 254 /* FunctionDeclaration */:
+            case 259 /* ModuleDeclaration */:
+            case 257 /* TypeAliasDeclaration */:
+            case 256 /* InterfaceDeclaration */:
+            case 258 /* EnumDeclaration */:
                 return true;
             default:
                 return false;
@@ -14548,6 +14907,14 @@
         return ts.findAncestor(node.parent, function (current) { return isBlockScope(current, current.parent); });
     }
     ts.getEnclosingBlockScopeContainer = getEnclosingBlockScopeContainer;
+    function forEachEnclosingBlockScopeContainer(node, cb) {
+        var container = getEnclosingBlockScopeContainer(node);
+        while (container) {
+            cb(container);
+            container = getEnclosingBlockScopeContainer(container);
+        }
+    }
+    ts.forEachEnclosingBlockScopeContainer = forEachEnclosingBlockScopeContainer;
     // Return display name of an identifier
     // Computed property names will just be emitted as "[<expr>]", where <expr> is the source
     // text of the expression in the computed property.
@@ -14560,19 +14927,19 @@
     }
     ts.getNameFromIndexInfo = getNameFromIndexInfo;
     function isComputedNonLiteralName(name) {
-        return name.kind === 159 /* ComputedPropertyName */ && !isStringOrNumericLiteralLike(name.expression);
+        return name.kind === 160 /* ComputedPropertyName */ && !isStringOrNumericLiteralLike(name.expression);
     }
     ts.isComputedNonLiteralName = isComputedNonLiteralName;
     function getTextOfPropertyName(name) {
         switch (name.kind) {
-            case 78 /* Identifier */:
-            case 79 /* PrivateIdentifier */:
+            case 79 /* Identifier */:
+            case 80 /* PrivateIdentifier */:
                 return name.escapedText;
             case 10 /* StringLiteral */:
             case 8 /* NumericLiteral */:
             case 14 /* NoSubstitutionTemplateLiteral */:
                 return ts.escapeLeadingUnderscores(name.text);
-            case 159 /* ComputedPropertyName */:
+            case 160 /* ComputedPropertyName */:
                 if (isStringOrNumericLiteralLike(name.expression))
                     return ts.escapeLeadingUnderscores(name.expression.text);
                 return ts.Debug.fail("Text of property name cannot be read from non-literal-valued ComputedPropertyNames");
@@ -14583,20 +14950,22 @@
     ts.getTextOfPropertyName = getTextOfPropertyName;
     function entityNameToString(name) {
         switch (name.kind) {
-            case 107 /* ThisKeyword */:
+            case 108 /* ThisKeyword */:
                 return "this";
-            case 79 /* PrivateIdentifier */:
-            case 78 /* Identifier */:
+            case 80 /* PrivateIdentifier */:
+            case 79 /* Identifier */:
                 return getFullWidth(name) === 0 ? ts.idText(name) : getTextOfNode(name);
-            case 158 /* QualifiedName */:
+            case 159 /* QualifiedName */:
                 return entityNameToString(name.left) + "." + entityNameToString(name.right);
-            case 202 /* PropertyAccessExpression */:
+            case 204 /* PropertyAccessExpression */:
                 if (ts.isIdentifier(name.name) || ts.isPrivateIdentifier(name.name)) {
                     return entityNameToString(name.expression) + "." + entityNameToString(name.name);
                 }
                 else {
                     return ts.Debug.assertNever(name.name);
                 }
+            case 306 /* JSDocMemberName */:
+                return entityNameToString(name.left) + entityNameToString(name.right);
             default:
                 return ts.Debug.assertNever(name);
         }
@@ -14676,7 +15045,7 @@
     ts.getSpanOfTokenAtPosition = getSpanOfTokenAtPosition;
     function getErrorSpanForArrowFunction(sourceFile, node) {
         var pos = ts.skipTrivia(sourceFile.text, node.pos);
-        if (node.body && node.body.kind === 231 /* Block */) {
+        if (node.body && node.body.kind === 233 /* Block */) {
             var startLine = ts.getLineAndCharacterOfPosition(sourceFile, node.body.pos).line;
             var endLine = ts.getLineAndCharacterOfPosition(sourceFile, node.body.end).line;
             if (startLine < endLine) {
@@ -14690,7 +15059,7 @@
     function getErrorSpanForNode(sourceFile, node) {
         var errorNode = node;
         switch (node.kind) {
-            case 298 /* SourceFile */:
+            case 300 /* SourceFile */:
                 var pos_1 = ts.skipTrivia(sourceFile.text, 0, /*stopAfterLineBreak*/ false);
                 if (pos_1 === sourceFile.text.length) {
                     // file is empty - return span for the beginning of the file
@@ -14699,28 +15068,29 @@
                 return getSpanOfTokenAtPosition(sourceFile, pos_1);
             // This list is a work in progress. Add missing node kinds to improve their error
             // spans.
-            case 250 /* VariableDeclaration */:
-            case 199 /* BindingElement */:
-            case 253 /* ClassDeclaration */:
-            case 222 /* ClassExpression */:
-            case 254 /* InterfaceDeclaration */:
-            case 257 /* ModuleDeclaration */:
-            case 256 /* EnumDeclaration */:
-            case 292 /* EnumMember */:
-            case 252 /* FunctionDeclaration */:
-            case 209 /* FunctionExpression */:
-            case 166 /* MethodDeclaration */:
-            case 168 /* GetAccessor */:
-            case 169 /* SetAccessor */:
-            case 255 /* TypeAliasDeclaration */:
-            case 164 /* PropertyDeclaration */:
-            case 163 /* PropertySignature */:
+            case 252 /* VariableDeclaration */:
+            case 201 /* BindingElement */:
+            case 255 /* ClassDeclaration */:
+            case 224 /* ClassExpression */:
+            case 256 /* InterfaceDeclaration */:
+            case 259 /* ModuleDeclaration */:
+            case 258 /* EnumDeclaration */:
+            case 294 /* EnumMember */:
+            case 254 /* FunctionDeclaration */:
+            case 211 /* FunctionExpression */:
+            case 167 /* MethodDeclaration */:
+            case 170 /* GetAccessor */:
+            case 171 /* SetAccessor */:
+            case 257 /* TypeAliasDeclaration */:
+            case 165 /* PropertyDeclaration */:
+            case 164 /* PropertySignature */:
+            case 266 /* NamespaceImport */:
                 errorNode = node.name;
                 break;
-            case 210 /* ArrowFunction */:
+            case 212 /* ArrowFunction */:
                 return getErrorSpanForArrowFunction(sourceFile, node);
-            case 285 /* CaseClause */:
-            case 286 /* DefaultClause */:
+            case 287 /* CaseClause */:
+            case 288 /* DefaultClause */:
                 var start = ts.skipTrivia(sourceFile.text, node.pos);
                 var end = node.statements.length > 0 ? node.statements[0].pos : node.end;
                 return ts.createTextSpanFromBounds(start, end);
@@ -14772,16 +15142,16 @@
     }
     ts.isLet = isLet;
     function isSuperCall(n) {
-        return n.kind === 204 /* CallExpression */ && n.expression.kind === 105 /* SuperKeyword */;
+        return n.kind === 206 /* CallExpression */ && n.expression.kind === 106 /* SuperKeyword */;
     }
     ts.isSuperCall = isSuperCall;
     function isImportCall(n) {
-        return n.kind === 204 /* CallExpression */ && n.expression.kind === 99 /* ImportKeyword */;
+        return n.kind === 206 /* CallExpression */ && n.expression.kind === 100 /* ImportKeyword */;
     }
     ts.isImportCall = isImportCall;
     function isImportMeta(n) {
         return ts.isMetaProperty(n)
-            && n.keywordToken === 99 /* ImportKeyword */
+            && n.keywordToken === 100 /* ImportKeyword */
             && n.name.escapedText === "meta";
     }
     ts.isImportMeta = isImportMeta;
@@ -14790,7 +15160,7 @@
     }
     ts.isLiteralImportTypeNode = isLiteralImportTypeNode;
     function isPrologueDirective(node) {
-        return node.kind === 234 /* ExpressionStatement */
+        return node.kind === 236 /* ExpressionStatement */
             && node.expression.kind === 10 /* StringLiteral */;
     }
     ts.isPrologueDirective = isPrologueDirective;
@@ -14818,12 +15188,12 @@
     }
     ts.getLeadingCommentRangesOfNode = getLeadingCommentRangesOfNode;
     function getJSDocCommentRanges(node, text) {
-        var commentRanges = (node.kind === 161 /* Parameter */ ||
-            node.kind === 160 /* TypeParameter */ ||
-            node.kind === 209 /* FunctionExpression */ ||
-            node.kind === 210 /* ArrowFunction */ ||
-            node.kind === 208 /* ParenthesizedExpression */ ||
-            node.kind === 250 /* VariableDeclaration */) ?
+        var commentRanges = (node.kind === 162 /* Parameter */ ||
+            node.kind === 161 /* TypeParameter */ ||
+            node.kind === 211 /* FunctionExpression */ ||
+            node.kind === 212 /* ArrowFunction */ ||
+            node.kind === 210 /* ParenthesizedExpression */ ||
+            node.kind === 252 /* VariableDeclaration */) ?
             ts.concatenate(ts.getTrailingCommentRanges(text, node.pos), ts.getLeadingCommentRanges(text, node.pos)) :
             ts.getLeadingCommentRanges(text, node.pos);
         // True if the comment starts with '/**' but not if it is '/**/'
@@ -14834,53 +15204,53 @@
         });
     }
     ts.getJSDocCommentRanges = getJSDocCommentRanges;
-    ts.fullTripleSlashReferencePathRegEx = /^(\/\/\/\s*<reference\s+path\s*=\s*)('|")(.+?)\2.*?\/>/;
-    var fullTripleSlashReferenceTypeReferenceDirectiveRegEx = /^(\/\/\/\s*<reference\s+types\s*=\s*)('|")(.+?)\2.*?\/>/;
-    ts.fullTripleSlashAMDReferencePathRegEx = /^(\/\/\/\s*<amd-dependency\s+path\s*=\s*)('|")(.+?)\2.*?\/>/;
-    var defaultLibReferenceRegEx = /^(\/\/\/\s*<reference\s+no-default-lib\s*=\s*)('|")(.+?)\2\s*\/>/;
+    ts.fullTripleSlashReferencePathRegEx = /^(\/\/\/\s*<reference\s+path\s*=\s*)(('[^']*')|("[^"]*")).*?\/>/;
+    var fullTripleSlashReferenceTypeReferenceDirectiveRegEx = /^(\/\/\/\s*<reference\s+types\s*=\s*)(('[^']*')|("[^"]*")).*?\/>/;
+    ts.fullTripleSlashAMDReferencePathRegEx = /^(\/\/\/\s*<amd-dependency\s+path\s*=\s*)(('[^']*')|("[^"]*")).*?\/>/;
+    var defaultLibReferenceRegEx = /^(\/\/\/\s*<reference\s+no-default-lib\s*=\s*)(('[^']*')|("[^"]*"))\s*\/>/;
     function isPartOfTypeNode(node) {
-        if (173 /* FirstTypeNode */ <= node.kind && node.kind <= 196 /* LastTypeNode */) {
+        if (175 /* FirstTypeNode */ <= node.kind && node.kind <= 198 /* LastTypeNode */) {
             return true;
         }
         switch (node.kind) {
-            case 128 /* AnyKeyword */:
-            case 152 /* UnknownKeyword */:
-            case 144 /* NumberKeyword */:
-            case 155 /* BigIntKeyword */:
-            case 147 /* StringKeyword */:
-            case 131 /* BooleanKeyword */:
-            case 148 /* SymbolKeyword */:
-            case 145 /* ObjectKeyword */:
-            case 150 /* UndefinedKeyword */:
-            case 141 /* NeverKeyword */:
+            case 129 /* AnyKeyword */:
+            case 153 /* UnknownKeyword */:
+            case 145 /* NumberKeyword */:
+            case 156 /* BigIntKeyword */:
+            case 148 /* StringKeyword */:
+            case 132 /* BooleanKeyword */:
+            case 149 /* SymbolKeyword */:
+            case 146 /* ObjectKeyword */:
+            case 151 /* UndefinedKeyword */:
+            case 142 /* NeverKeyword */:
                 return true;
-            case 113 /* VoidKeyword */:
-                return node.parent.kind !== 213 /* VoidExpression */;
-            case 224 /* ExpressionWithTypeArguments */:
+            case 114 /* VoidKeyword */:
+                return node.parent.kind !== 215 /* VoidExpression */;
+            case 226 /* ExpressionWithTypeArguments */:
                 return !isExpressionWithTypeArgumentsInClassExtendsClause(node);
-            case 160 /* TypeParameter */:
-                return node.parent.kind === 191 /* MappedType */ || node.parent.kind === 186 /* InferType */;
+            case 161 /* TypeParameter */:
+                return node.parent.kind === 193 /* MappedType */ || node.parent.kind === 188 /* InferType */;
             // Identifiers and qualified names may be type nodes, depending on their context. Climb
             // above them to find the lowest container
-            case 78 /* Identifier */:
+            case 79 /* Identifier */:
                 // If the identifier is the RHS of a qualified name, then it's a type iff its parent is.
-                if (node.parent.kind === 158 /* QualifiedName */ && node.parent.right === node) {
+                if (node.parent.kind === 159 /* QualifiedName */ && node.parent.right === node) {
                     node = node.parent;
                 }
-                else if (node.parent.kind === 202 /* PropertyAccessExpression */ && node.parent.name === node) {
+                else if (node.parent.kind === 204 /* PropertyAccessExpression */ && node.parent.name === node) {
                     node = node.parent;
                 }
                 // At this point, node is either a qualified name or an identifier
-                ts.Debug.assert(node.kind === 78 /* Identifier */ || node.kind === 158 /* QualifiedName */ || node.kind === 202 /* PropertyAccessExpression */, "'node' was expected to be a qualified name, identifier or property access in 'isPartOfTypeNode'.");
+                ts.Debug.assert(node.kind === 79 /* Identifier */ || node.kind === 159 /* QualifiedName */ || node.kind === 204 /* PropertyAccessExpression */, "'node' was expected to be a qualified name, identifier or property access in 'isPartOfTypeNode'.");
             // falls through
-            case 158 /* QualifiedName */:
-            case 202 /* PropertyAccessExpression */:
-            case 107 /* ThisKeyword */: {
+            case 159 /* QualifiedName */:
+            case 204 /* PropertyAccessExpression */:
+            case 108 /* ThisKeyword */: {
                 var parent = node.parent;
-                if (parent.kind === 177 /* TypeQuery */) {
+                if (parent.kind === 179 /* TypeQuery */) {
                     return false;
                 }
-                if (parent.kind === 196 /* ImportType */) {
+                if (parent.kind === 198 /* ImportType */) {
                     return !parent.isTypeOf;
                 }
                 // Do not recursively call isPartOfTypeNode on the parent. In the example:
@@ -14889,40 +15259,40 @@
                 //
                 // Calling isPartOfTypeNode would consider the qualified name A.B a type node.
                 // Only C and A.B.C are type nodes.
-                if (173 /* FirstTypeNode */ <= parent.kind && parent.kind <= 196 /* LastTypeNode */) {
+                if (175 /* FirstTypeNode */ <= parent.kind && parent.kind <= 198 /* LastTypeNode */) {
                     return true;
                 }
                 switch (parent.kind) {
-                    case 224 /* ExpressionWithTypeArguments */:
+                    case 226 /* ExpressionWithTypeArguments */:
                         return !isExpressionWithTypeArgumentsInClassExtendsClause(parent);
-                    case 160 /* TypeParameter */:
+                    case 161 /* TypeParameter */:
                         return node === parent.constraint;
-                    case 334 /* JSDocTemplateTag */:
+                    case 339 /* JSDocTemplateTag */:
                         return node === parent.constraint;
-                    case 164 /* PropertyDeclaration */:
-                    case 163 /* PropertySignature */:
-                    case 161 /* Parameter */:
-                    case 250 /* VariableDeclaration */:
+                    case 165 /* PropertyDeclaration */:
+                    case 164 /* PropertySignature */:
+                    case 162 /* Parameter */:
+                    case 252 /* VariableDeclaration */:
                         return node === parent.type;
-                    case 252 /* FunctionDeclaration */:
-                    case 209 /* FunctionExpression */:
-                    case 210 /* ArrowFunction */:
-                    case 167 /* Constructor */:
-                    case 166 /* MethodDeclaration */:
-                    case 165 /* MethodSignature */:
-                    case 168 /* GetAccessor */:
-                    case 169 /* SetAccessor */:
+                    case 254 /* FunctionDeclaration */:
+                    case 211 /* FunctionExpression */:
+                    case 212 /* ArrowFunction */:
+                    case 169 /* Constructor */:
+                    case 167 /* MethodDeclaration */:
+                    case 166 /* MethodSignature */:
+                    case 170 /* GetAccessor */:
+                    case 171 /* SetAccessor */:
                         return node === parent.type;
-                    case 170 /* CallSignature */:
-                    case 171 /* ConstructSignature */:
-                    case 172 /* IndexSignature */:
+                    case 172 /* CallSignature */:
+                    case 173 /* ConstructSignature */:
+                    case 174 /* IndexSignature */:
                         return node === parent.type;
-                    case 207 /* TypeAssertionExpression */:
+                    case 209 /* TypeAssertionExpression */:
                         return node === parent.type;
-                    case 204 /* CallExpression */:
-                    case 205 /* NewExpression */:
+                    case 206 /* CallExpression */:
+                    case 207 /* NewExpression */:
                         return ts.contains(parent.typeArguments, node);
-                    case 206 /* TaggedTemplateExpression */:
+                    case 208 /* TaggedTemplateExpression */:
                         // TODO (drosen): TaggedTemplateExpressions may eventually support type arguments.
                         return false;
                 }
@@ -14947,23 +15317,23 @@
         return traverse(body);
         function traverse(node) {
             switch (node.kind) {
-                case 243 /* ReturnStatement */:
+                case 245 /* ReturnStatement */:
                     return visitor(node);
-                case 259 /* CaseBlock */:
-                case 231 /* Block */:
-                case 235 /* IfStatement */:
-                case 236 /* DoStatement */:
-                case 237 /* WhileStatement */:
-                case 238 /* ForStatement */:
-                case 239 /* ForInStatement */:
-                case 240 /* ForOfStatement */:
-                case 244 /* WithStatement */:
-                case 245 /* SwitchStatement */:
-                case 285 /* CaseClause */:
-                case 286 /* DefaultClause */:
-                case 246 /* LabeledStatement */:
-                case 248 /* TryStatement */:
-                case 288 /* CatchClause */:
+                case 261 /* CaseBlock */:
+                case 233 /* Block */:
+                case 237 /* IfStatement */:
+                case 238 /* DoStatement */:
+                case 239 /* WhileStatement */:
+                case 240 /* ForStatement */:
+                case 241 /* ForInStatement */:
+                case 242 /* ForOfStatement */:
+                case 246 /* WithStatement */:
+                case 247 /* SwitchStatement */:
+                case 287 /* CaseClause */:
+                case 288 /* DefaultClause */:
+                case 248 /* LabeledStatement */:
+                case 250 /* TryStatement */:
+                case 290 /* CatchClause */:
                     return ts.forEachChild(node, traverse);
             }
         }
@@ -14973,23 +15343,23 @@
         return traverse(body);
         function traverse(node) {
             switch (node.kind) {
-                case 220 /* YieldExpression */:
+                case 222 /* YieldExpression */:
                     visitor(node);
                     var operand = node.expression;
                     if (operand) {
                         traverse(operand);
                     }
                     return;
-                case 256 /* EnumDeclaration */:
-                case 254 /* InterfaceDeclaration */:
-                case 257 /* ModuleDeclaration */:
-                case 255 /* TypeAliasDeclaration */:
+                case 258 /* EnumDeclaration */:
+                case 256 /* InterfaceDeclaration */:
+                case 259 /* ModuleDeclaration */:
+                case 257 /* TypeAliasDeclaration */:
                     // These are not allowed inside a generator now, but eventually they may be allowed
                     // as local types. Regardless, skip them to avoid the work.
                     return;
                 default:
                     if (ts.isFunctionLike(node)) {
-                        if (node.name && node.name.kind === 159 /* ComputedPropertyName */) {
+                        if (node.name && node.name.kind === 160 /* ComputedPropertyName */) {
                             // Note that we will not include methods/accessors of a class because they would require
                             // first descending into the class. This is by design.
                             traverse(node.name.expression);
@@ -15012,10 +15382,10 @@
      * @param node The type node.
      */
     function getRestParameterElementType(node) {
-        if (node && node.kind === 179 /* ArrayType */) {
+        if (node && node.kind === 181 /* ArrayType */) {
             return node.elementType;
         }
-        else if (node && node.kind === 174 /* TypeReference */) {
+        else if (node && node.kind === 176 /* TypeReference */) {
             return ts.singleOrUndefined(node.typeArguments);
         }
         else {
@@ -15025,12 +15395,12 @@
     ts.getRestParameterElementType = getRestParameterElementType;
     function getMembersOfDeclaration(node) {
         switch (node.kind) {
-            case 254 /* InterfaceDeclaration */:
-            case 253 /* ClassDeclaration */:
-            case 222 /* ClassExpression */:
-            case 178 /* TypeLiteral */:
+            case 256 /* InterfaceDeclaration */:
+            case 255 /* ClassDeclaration */:
+            case 224 /* ClassExpression */:
+            case 180 /* TypeLiteral */:
                 return node.members;
-            case 201 /* ObjectLiteralExpression */:
+            case 203 /* ObjectLiteralExpression */:
                 return node.properties;
         }
     }
@@ -15038,14 +15408,14 @@
     function isVariableLike(node) {
         if (node) {
             switch (node.kind) {
-                case 199 /* BindingElement */:
-                case 292 /* EnumMember */:
-                case 161 /* Parameter */:
-                case 289 /* PropertyAssignment */:
-                case 164 /* PropertyDeclaration */:
-                case 163 /* PropertySignature */:
-                case 290 /* ShorthandPropertyAssignment */:
-                case 250 /* VariableDeclaration */:
+                case 201 /* BindingElement */:
+                case 294 /* EnumMember */:
+                case 162 /* Parameter */:
+                case 291 /* PropertyAssignment */:
+                case 165 /* PropertyDeclaration */:
+                case 164 /* PropertySignature */:
+                case 292 /* ShorthandPropertyAssignment */:
+                case 252 /* VariableDeclaration */:
                     return true;
             }
         }
@@ -15057,8 +15427,8 @@
     }
     ts.isVariableLikeOrAccessor = isVariableLikeOrAccessor;
     function isVariableDeclarationInVariableStatement(node) {
-        return node.parent.kind === 251 /* VariableDeclarationList */
-            && node.parent.parent.kind === 233 /* VariableStatement */;
+        return node.parent.kind === 253 /* VariableDeclarationList */
+            && node.parent.parent.kind === 235 /* VariableStatement */;
     }
     ts.isVariableDeclarationInVariableStatement = isVariableDeclarationInVariableStatement;
     function isValidESSymbolDeclaration(node) {
@@ -15069,13 +15439,13 @@
     ts.isValidESSymbolDeclaration = isValidESSymbolDeclaration;
     function introducesArgumentsExoticObject(node) {
         switch (node.kind) {
-            case 166 /* MethodDeclaration */:
-            case 165 /* MethodSignature */:
-            case 167 /* Constructor */:
-            case 168 /* GetAccessor */:
-            case 169 /* SetAccessor */:
-            case 252 /* FunctionDeclaration */:
-            case 209 /* FunctionExpression */:
+            case 167 /* MethodDeclaration */:
+            case 166 /* MethodSignature */:
+            case 169 /* Constructor */:
+            case 170 /* GetAccessor */:
+            case 171 /* SetAccessor */:
+            case 254 /* FunctionDeclaration */:
+            case 211 /* FunctionExpression */:
                 return true;
         }
         return false;
@@ -15086,7 +15456,7 @@
             if (beforeUnwrapLabelCallback) {
                 beforeUnwrapLabelCallback(node);
             }
-            if (node.statement.kind !== 246 /* LabeledStatement */) {
+            if (node.statement.kind !== 248 /* LabeledStatement */) {
                 return node.statement;
             }
             node = node.statement;
@@ -15094,17 +15464,17 @@
     }
     ts.unwrapInnermostStatementOfLabel = unwrapInnermostStatementOfLabel;
     function isFunctionBlock(node) {
-        return node && node.kind === 231 /* Block */ && ts.isFunctionLike(node.parent);
+        return node && node.kind === 233 /* Block */ && ts.isFunctionLike(node.parent);
     }
     ts.isFunctionBlock = isFunctionBlock;
     function isObjectLiteralMethod(node) {
-        return node && node.kind === 166 /* MethodDeclaration */ && node.parent.kind === 201 /* ObjectLiteralExpression */;
+        return node && node.kind === 167 /* MethodDeclaration */ && node.parent.kind === 203 /* ObjectLiteralExpression */;
     }
     ts.isObjectLiteralMethod = isObjectLiteralMethod;
     function isObjectLiteralOrClassExpressionMethod(node) {
-        return node.kind === 166 /* MethodDeclaration */ &&
-            (node.parent.kind === 201 /* ObjectLiteralExpression */ ||
-                node.parent.kind === 222 /* ClassExpression */);
+        return node.kind === 167 /* MethodDeclaration */ &&
+            (node.parent.kind === 203 /* ObjectLiteralExpression */ ||
+                node.parent.kind === 224 /* ClassExpression */);
     }
     ts.isObjectLiteralOrClassExpressionMethod = isObjectLiteralOrClassExpressionMethod;
     function isIdentifierTypePredicate(predicate) {
@@ -15117,7 +15487,7 @@
     ts.isThisTypePredicate = isThisTypePredicate;
     function getPropertyAssignment(objectLiteral, key, key2) {
         return objectLiteral.properties.filter(function (property) {
-            if (property.kind === 289 /* PropertyAssignment */) {
+            if (property.kind === 291 /* PropertyAssignment */) {
                 var propName = getTextOfPropertyName(property.name);
                 return key === propName || (!!key2 && key2 === propName);
             }
@@ -15165,15 +15535,28 @@
         return ts.findAncestor(node.parent, ts.isClassLike);
     }
     ts.getContainingClass = getContainingClass;
+    function getContainingClassStaticBlock(node) {
+        return ts.findAncestor(node.parent, function (n) {
+            if (ts.isClassLike(n) || ts.isFunctionLike(n)) {
+                return "quit";
+            }
+            return ts.isClassStaticBlockDeclaration(n);
+        });
+    }
+    ts.getContainingClassStaticBlock = getContainingClassStaticBlock;
+    function getContainingFunctionOrClassStaticBlock(node) {
+        return ts.findAncestor(node.parent, ts.isFunctionLikeOrClassStaticBlockDeclaration);
+    }
+    ts.getContainingFunctionOrClassStaticBlock = getContainingFunctionOrClassStaticBlock;
     function getThisContainer(node, includeArrowFunctions) {
-        ts.Debug.assert(node.kind !== 298 /* SourceFile */);
+        ts.Debug.assert(node.kind !== 300 /* SourceFile */);
         while (true) {
             node = node.parent;
             if (!node) {
                 return ts.Debug.fail(); // If we never pass in a SourceFile, this should be unreachable, since we'll stop when we reach that.
             }
             switch (node.kind) {
-                case 159 /* ComputedPropertyName */:
+                case 160 /* ComputedPropertyName */:
                     // If the grandparent node is an object literal (as opposed to a class),
                     // then the computed property is not a 'this' container.
                     // A computed property name in a class needs to be a this container
@@ -15188,9 +15571,9 @@
                     // the *body* of the container.
                     node = node.parent;
                     break;
-                case 162 /* Decorator */:
+                case 163 /* Decorator */:
                     // Decorators are always applied outside of the body of a class or method.
-                    if (node.parent.kind === 161 /* Parameter */ && ts.isClassElement(node.parent.parent)) {
+                    if (node.parent.kind === 162 /* Parameter */ && ts.isClassElement(node.parent.parent)) {
                         // If the decorator's parent is a Parameter, we resolve the this container from
                         // the grandparent class declaration.
                         node = node.parent.parent;
@@ -15201,26 +15584,27 @@
                         node = node.parent;
                     }
                     break;
-                case 210 /* ArrowFunction */:
+                case 212 /* ArrowFunction */:
                     if (!includeArrowFunctions) {
                         continue;
                     }
                 // falls through
-                case 252 /* FunctionDeclaration */:
-                case 209 /* FunctionExpression */:
-                case 257 /* ModuleDeclaration */:
-                case 164 /* PropertyDeclaration */:
-                case 163 /* PropertySignature */:
-                case 166 /* MethodDeclaration */:
-                case 165 /* MethodSignature */:
-                case 167 /* Constructor */:
-                case 168 /* GetAccessor */:
-                case 169 /* SetAccessor */:
-                case 170 /* CallSignature */:
-                case 171 /* ConstructSignature */:
-                case 172 /* IndexSignature */:
-                case 256 /* EnumDeclaration */:
-                case 298 /* SourceFile */:
+                case 254 /* FunctionDeclaration */:
+                case 211 /* FunctionExpression */:
+                case 259 /* ModuleDeclaration */:
+                case 168 /* ClassStaticBlockDeclaration */:
+                case 165 /* PropertyDeclaration */:
+                case 164 /* PropertySignature */:
+                case 167 /* MethodDeclaration */:
+                case 166 /* MethodSignature */:
+                case 169 /* Constructor */:
+                case 170 /* GetAccessor */:
+                case 171 /* SetAccessor */:
+                case 172 /* CallSignature */:
+                case 173 /* ConstructSignature */:
+                case 174 /* IndexSignature */:
+                case 258 /* EnumDeclaration */:
+                case 300 /* SourceFile */:
                     return node;
             }
         }
@@ -15239,9 +15623,9 @@
         var container = getThisContainer(node, /*includeArrowFunctions*/ false);
         if (container) {
             switch (container.kind) {
-                case 167 /* Constructor */:
-                case 252 /* FunctionDeclaration */:
-                case 209 /* FunctionExpression */:
+                case 169 /* Constructor */:
+                case 254 /* FunctionDeclaration */:
+                case 211 /* FunctionExpression */:
                     return container;
             }
         }
@@ -15263,27 +15647,28 @@
                 return node;
             }
             switch (node.kind) {
-                case 159 /* ComputedPropertyName */:
+                case 160 /* ComputedPropertyName */:
                     node = node.parent;
                     break;
-                case 252 /* FunctionDeclaration */:
-                case 209 /* FunctionExpression */:
-                case 210 /* ArrowFunction */:
+                case 254 /* FunctionDeclaration */:
+                case 211 /* FunctionExpression */:
+                case 212 /* ArrowFunction */:
                     if (!stopOnFunctions) {
                         continue;
                     }
                 // falls through
-                case 164 /* PropertyDeclaration */:
-                case 163 /* PropertySignature */:
-                case 166 /* MethodDeclaration */:
-                case 165 /* MethodSignature */:
-                case 167 /* Constructor */:
-                case 168 /* GetAccessor */:
-                case 169 /* SetAccessor */:
+                case 165 /* PropertyDeclaration */:
+                case 164 /* PropertySignature */:
+                case 167 /* MethodDeclaration */:
+                case 166 /* MethodSignature */:
+                case 169 /* Constructor */:
+                case 170 /* GetAccessor */:
+                case 171 /* SetAccessor */:
+                case 168 /* ClassStaticBlockDeclaration */:
                     return node;
-                case 162 /* Decorator */:
+                case 163 /* Decorator */:
                     // Decorators are always applied outside of the body of a class or method.
-                    if (node.parent.kind === 161 /* Parameter */ && ts.isClassElement(node.parent.parent)) {
+                    if (node.parent.kind === 162 /* Parameter */ && ts.isClassElement(node.parent.parent)) {
                         // If the decorator's parent is a Parameter, we resolve the this container from
                         // the grandparent class declaration.
                         node = node.parent.parent;
@@ -15299,21 +15684,21 @@
     }
     ts.getSuperContainer = getSuperContainer;
     function getImmediatelyInvokedFunctionExpression(func) {
-        if (func.kind === 209 /* FunctionExpression */ || func.kind === 210 /* ArrowFunction */) {
+        if (func.kind === 211 /* FunctionExpression */ || func.kind === 212 /* ArrowFunction */) {
             var prev = func;
             var parent = func.parent;
-            while (parent.kind === 208 /* ParenthesizedExpression */) {
+            while (parent.kind === 210 /* ParenthesizedExpression */) {
                 prev = parent;
                 parent = parent.parent;
             }
-            if (parent.kind === 204 /* CallExpression */ && parent.expression === prev) {
+            if (parent.kind === 206 /* CallExpression */ && parent.expression === prev) {
                 return parent;
             }
         }
     }
     ts.getImmediatelyInvokedFunctionExpression = getImmediatelyInvokedFunctionExpression;
     function isSuperOrSuperProperty(node) {
-        return node.kind === 105 /* SuperKeyword */
+        return node.kind === 106 /* SuperKeyword */
             || isSuperProperty(node);
     }
     ts.isSuperOrSuperProperty = isSuperOrSuperProperty;
@@ -15322,8 +15707,8 @@
      */
     function isSuperProperty(node) {
         var kind = node.kind;
-        return (kind === 202 /* PropertyAccessExpression */ || kind === 203 /* ElementAccessExpression */)
-            && node.expression.kind === 105 /* SuperKeyword */;
+        return (kind === 204 /* PropertyAccessExpression */ || kind === 205 /* ElementAccessExpression */)
+            && node.expression.kind === 106 /* SuperKeyword */;
     }
     ts.isSuperProperty = isSuperProperty;
     /**
@@ -15331,34 +15716,34 @@
      */
     function isThisProperty(node) {
         var kind = node.kind;
-        return (kind === 202 /* PropertyAccessExpression */ || kind === 203 /* ElementAccessExpression */)
-            && node.expression.kind === 107 /* ThisKeyword */;
+        return (kind === 204 /* PropertyAccessExpression */ || kind === 205 /* ElementAccessExpression */)
+            && node.expression.kind === 108 /* ThisKeyword */;
     }
     ts.isThisProperty = isThisProperty;
     function isThisInitializedDeclaration(node) {
         var _a;
-        return !!node && ts.isVariableDeclaration(node) && ((_a = node.initializer) === null || _a === void 0 ? void 0 : _a.kind) === 107 /* ThisKeyword */;
+        return !!node && ts.isVariableDeclaration(node) && ((_a = node.initializer) === null || _a === void 0 ? void 0 : _a.kind) === 108 /* ThisKeyword */;
     }
     ts.isThisInitializedDeclaration = isThisInitializedDeclaration;
     function isThisInitializedObjectBindingExpression(node) {
         return !!node
             && (ts.isShorthandPropertyAssignment(node) || ts.isPropertyAssignment(node))
             && ts.isBinaryExpression(node.parent.parent)
-            && node.parent.parent.operatorToken.kind === 62 /* EqualsToken */
-            && node.parent.parent.right.kind === 107 /* ThisKeyword */;
+            && node.parent.parent.operatorToken.kind === 63 /* EqualsToken */
+            && node.parent.parent.right.kind === 108 /* ThisKeyword */;
     }
     ts.isThisInitializedObjectBindingExpression = isThisInitializedObjectBindingExpression;
     function getEntityNameFromTypeNode(node) {
         switch (node.kind) {
-            case 174 /* TypeReference */:
+            case 176 /* TypeReference */:
                 return node.typeName;
-            case 224 /* ExpressionWithTypeArguments */:
+            case 226 /* ExpressionWithTypeArguments */:
                 return isEntityNameExpression(node.expression)
                     ? node.expression
                     : undefined;
             // TODO(rbuckton): These aren't valid TypeNodes, but we treat them as such because of `isPartOfTypeNode`, which returns `true` for things that aren't `TypeNode`s.
-            case 78 /* Identifier */:
-            case 158 /* QualifiedName */:
+            case 79 /* Identifier */:
+            case 159 /* QualifiedName */:
                 return node;
         }
         return undefined;
@@ -15366,10 +15751,10 @@
     ts.getEntityNameFromTypeNode = getEntityNameFromTypeNode;
     function getInvokedExpression(node) {
         switch (node.kind) {
-            case 206 /* TaggedTemplateExpression */:
+            case 208 /* TaggedTemplateExpression */:
                 return node.tag;
-            case 276 /* JsxOpeningElement */:
-            case 275 /* JsxSelfClosingElement */:
+            case 278 /* JsxOpeningElement */:
+            case 277 /* JsxSelfClosingElement */:
                 return node.tagName;
             default:
                 return node.expression;
@@ -15382,25 +15767,25 @@
             return false;
         }
         switch (node.kind) {
-            case 253 /* ClassDeclaration */:
+            case 255 /* ClassDeclaration */:
                 // classes are valid targets
                 return true;
-            case 164 /* PropertyDeclaration */:
+            case 165 /* PropertyDeclaration */:
                 // property declarations are valid if their parent is a class declaration.
-                return parent.kind === 253 /* ClassDeclaration */;
-            case 168 /* GetAccessor */:
-            case 169 /* SetAccessor */:
-            case 166 /* MethodDeclaration */:
+                return parent.kind === 255 /* ClassDeclaration */;
+            case 170 /* GetAccessor */:
+            case 171 /* SetAccessor */:
+            case 167 /* MethodDeclaration */:
                 // if this method has a body and its parent is a class declaration, this is a valid target.
                 return node.body !== undefined
-                    && parent.kind === 253 /* ClassDeclaration */;
-            case 161 /* Parameter */:
+                    && parent.kind === 255 /* ClassDeclaration */;
+            case 162 /* Parameter */:
                 // if the parameter's parent has a body and its grandparent is a class declaration, this is a valid target;
                 return parent.body !== undefined
-                    && (parent.kind === 167 /* Constructor */
-                        || parent.kind === 166 /* MethodDeclaration */
-                        || parent.kind === 169 /* SetAccessor */)
-                    && grandparent.kind === 253 /* ClassDeclaration */;
+                    && (parent.kind === 169 /* Constructor */
+                        || parent.kind === 167 /* MethodDeclaration */
+                        || parent.kind === 171 /* SetAccessor */)
+                    && grandparent.kind === 255 /* ClassDeclaration */;
         }
         return false;
     }
@@ -15416,21 +15801,29 @@
     ts.nodeOrChildIsDecorated = nodeOrChildIsDecorated;
     function childIsDecorated(node, parent) {
         switch (node.kind) {
-            case 253 /* ClassDeclaration */:
+            case 255 /* ClassDeclaration */:
                 return ts.some(node.members, function (m) { return nodeOrChildIsDecorated(m, node, parent); }); // TODO: GH#18217
-            case 166 /* MethodDeclaration */:
-            case 169 /* SetAccessor */:
+            case 167 /* MethodDeclaration */:
+            case 171 /* SetAccessor */:
+            case 169 /* Constructor */:
                 return ts.some(node.parameters, function (p) { return nodeIsDecorated(p, node, parent); }); // TODO: GH#18217
             default:
                 return false;
         }
     }
     ts.childIsDecorated = childIsDecorated;
+    function classOrConstructorParameterIsDecorated(node) {
+        if (nodeIsDecorated(node))
+            return true;
+        var constructor = getFirstConstructorWithBody(node);
+        return !!constructor && childIsDecorated(constructor, node);
+    }
+    ts.classOrConstructorParameterIsDecorated = classOrConstructorParameterIsDecorated;
     function isJSXTagName(node) {
         var parent = node.parent;
-        if (parent.kind === 276 /* JsxOpeningElement */ ||
-            parent.kind === 275 /* JsxSelfClosingElement */ ||
-            parent.kind === 277 /* JsxClosingElement */) {
+        if (parent.kind === 278 /* JsxOpeningElement */ ||
+            parent.kind === 277 /* JsxSelfClosingElement */ ||
+            parent.kind === 279 /* JsxClosingElement */) {
             return parent.tagName === node;
         }
         return false;
@@ -15438,49 +15831,54 @@
     ts.isJSXTagName = isJSXTagName;
     function isExpressionNode(node) {
         switch (node.kind) {
-            case 105 /* SuperKeyword */:
-            case 103 /* NullKeyword */:
-            case 109 /* TrueKeyword */:
-            case 94 /* FalseKeyword */:
+            case 106 /* SuperKeyword */:
+            case 104 /* NullKeyword */:
+            case 110 /* TrueKeyword */:
+            case 95 /* FalseKeyword */:
             case 13 /* RegularExpressionLiteral */:
-            case 200 /* ArrayLiteralExpression */:
-            case 201 /* ObjectLiteralExpression */:
-            case 202 /* PropertyAccessExpression */:
-            case 203 /* ElementAccessExpression */:
-            case 204 /* CallExpression */:
-            case 205 /* NewExpression */:
-            case 206 /* TaggedTemplateExpression */:
-            case 225 /* AsExpression */:
-            case 207 /* TypeAssertionExpression */:
-            case 226 /* NonNullExpression */:
-            case 208 /* ParenthesizedExpression */:
-            case 209 /* FunctionExpression */:
-            case 222 /* ClassExpression */:
-            case 210 /* ArrowFunction */:
-            case 213 /* VoidExpression */:
-            case 211 /* DeleteExpression */:
-            case 212 /* TypeOfExpression */:
-            case 215 /* PrefixUnaryExpression */:
-            case 216 /* PostfixUnaryExpression */:
-            case 217 /* BinaryExpression */:
-            case 218 /* ConditionalExpression */:
-            case 221 /* SpreadElement */:
-            case 219 /* TemplateExpression */:
-            case 223 /* OmittedExpression */:
-            case 274 /* JsxElement */:
-            case 275 /* JsxSelfClosingElement */:
-            case 278 /* JsxFragment */:
-            case 220 /* YieldExpression */:
-            case 214 /* AwaitExpression */:
-            case 227 /* MetaProperty */:
+            case 202 /* ArrayLiteralExpression */:
+            case 203 /* ObjectLiteralExpression */:
+            case 204 /* PropertyAccessExpression */:
+            case 205 /* ElementAccessExpression */:
+            case 206 /* CallExpression */:
+            case 207 /* NewExpression */:
+            case 208 /* TaggedTemplateExpression */:
+            case 227 /* AsExpression */:
+            case 209 /* TypeAssertionExpression */:
+            case 228 /* NonNullExpression */:
+            case 210 /* ParenthesizedExpression */:
+            case 211 /* FunctionExpression */:
+            case 224 /* ClassExpression */:
+            case 212 /* ArrowFunction */:
+            case 215 /* VoidExpression */:
+            case 213 /* DeleteExpression */:
+            case 214 /* TypeOfExpression */:
+            case 217 /* PrefixUnaryExpression */:
+            case 218 /* PostfixUnaryExpression */:
+            case 219 /* BinaryExpression */:
+            case 220 /* ConditionalExpression */:
+            case 223 /* SpreadElement */:
+            case 221 /* TemplateExpression */:
+            case 225 /* OmittedExpression */:
+            case 276 /* JsxElement */:
+            case 277 /* JsxSelfClosingElement */:
+            case 280 /* JsxFragment */:
+            case 222 /* YieldExpression */:
+            case 216 /* AwaitExpression */:
+            case 229 /* MetaProperty */:
                 return true;
-            case 158 /* QualifiedName */:
-                while (node.parent.kind === 158 /* QualifiedName */) {
+            case 159 /* QualifiedName */:
+                while (node.parent.kind === 159 /* QualifiedName */) {
                     node = node.parent;
                 }
-                return node.parent.kind === 177 /* TypeQuery */ || isJSXTagName(node);
-            case 78 /* Identifier */:
-                if (node.parent.kind === 177 /* TypeQuery */ || isJSXTagName(node)) {
+                return node.parent.kind === 179 /* TypeQuery */ || ts.isJSDocLinkLike(node.parent) || ts.isJSDocNameReference(node.parent) || ts.isJSDocMemberName(node.parent) || isJSXTagName(node);
+            case 306 /* JSDocMemberName */:
+                while (ts.isJSDocMemberName(node.parent)) {
+                    node = node.parent;
+                }
+                return node.parent.kind === 179 /* TypeQuery */ || ts.isJSDocLinkLike(node.parent) || ts.isJSDocNameReference(node.parent) || ts.isJSDocMemberName(node.parent) || isJSXTagName(node);
+            case 79 /* Identifier */:
+                if (node.parent.kind === 179 /* TypeQuery */ || ts.isJSDocLinkLike(node.parent) || ts.isJSDocNameReference(node.parent) || ts.isJSDocMemberName(node.parent) || isJSXTagName(node)) {
                     return true;
                 }
             // falls through
@@ -15488,7 +15886,7 @@
             case 9 /* BigIntLiteral */:
             case 10 /* StringLiteral */:
             case 14 /* NoSubstitutionTemplateLiteral */:
-            case 107 /* ThisKeyword */:
+            case 108 /* ThisKeyword */:
                 return isInExpressionContext(node);
             default:
                 return false;
@@ -15498,49 +15896,49 @@
     function isInExpressionContext(node) {
         var parent = node.parent;
         switch (parent.kind) {
-            case 250 /* VariableDeclaration */:
-            case 161 /* Parameter */:
-            case 164 /* PropertyDeclaration */:
-            case 163 /* PropertySignature */:
-            case 292 /* EnumMember */:
-            case 289 /* PropertyAssignment */:
-            case 199 /* BindingElement */:
+            case 252 /* VariableDeclaration */:
+            case 162 /* Parameter */:
+            case 165 /* PropertyDeclaration */:
+            case 164 /* PropertySignature */:
+            case 294 /* EnumMember */:
+            case 291 /* PropertyAssignment */:
+            case 201 /* BindingElement */:
                 return parent.initializer === node;
-            case 234 /* ExpressionStatement */:
-            case 235 /* IfStatement */:
-            case 236 /* DoStatement */:
-            case 237 /* WhileStatement */:
-            case 243 /* ReturnStatement */:
-            case 244 /* WithStatement */:
-            case 245 /* SwitchStatement */:
-            case 285 /* CaseClause */:
-            case 247 /* ThrowStatement */:
+            case 236 /* ExpressionStatement */:
+            case 237 /* IfStatement */:
+            case 238 /* DoStatement */:
+            case 239 /* WhileStatement */:
+            case 245 /* ReturnStatement */:
+            case 246 /* WithStatement */:
+            case 247 /* SwitchStatement */:
+            case 287 /* CaseClause */:
+            case 249 /* ThrowStatement */:
                 return parent.expression === node;
-            case 238 /* ForStatement */:
+            case 240 /* ForStatement */:
                 var forStatement = parent;
-                return (forStatement.initializer === node && forStatement.initializer.kind !== 251 /* VariableDeclarationList */) ||
+                return (forStatement.initializer === node && forStatement.initializer.kind !== 253 /* VariableDeclarationList */) ||
                     forStatement.condition === node ||
                     forStatement.incrementor === node;
-            case 239 /* ForInStatement */:
-            case 240 /* ForOfStatement */:
+            case 241 /* ForInStatement */:
+            case 242 /* ForOfStatement */:
                 var forInStatement = parent;
-                return (forInStatement.initializer === node && forInStatement.initializer.kind !== 251 /* VariableDeclarationList */) ||
+                return (forInStatement.initializer === node && forInStatement.initializer.kind !== 253 /* VariableDeclarationList */) ||
                     forInStatement.expression === node;
-            case 207 /* TypeAssertionExpression */:
-            case 225 /* AsExpression */:
+            case 209 /* TypeAssertionExpression */:
+            case 227 /* AsExpression */:
                 return node === parent.expression;
-            case 229 /* TemplateSpan */:
+            case 231 /* TemplateSpan */:
                 return node === parent.expression;
-            case 159 /* ComputedPropertyName */:
+            case 160 /* ComputedPropertyName */:
                 return node === parent.expression;
-            case 162 /* Decorator */:
-            case 284 /* JsxExpression */:
-            case 283 /* JsxSpreadAttribute */:
-            case 291 /* SpreadAssignment */:
+            case 163 /* Decorator */:
+            case 286 /* JsxExpression */:
+            case 285 /* JsxSpreadAttribute */:
+            case 293 /* SpreadAssignment */:
                 return true;
-            case 224 /* ExpressionWithTypeArguments */:
+            case 226 /* ExpressionWithTypeArguments */:
                 return parent.expression === node && isExpressionWithTypeArgumentsInClassExtendsClause(parent);
-            case 290 /* ShorthandPropertyAssignment */:
+            case 292 /* ShorthandPropertyAssignment */:
                 return parent.objectAssignmentInitializer === node;
             default:
                 return isExpressionNode(parent);
@@ -15548,10 +15946,10 @@
     }
     ts.isInExpressionContext = isInExpressionContext;
     function isPartOfTypeQuery(node) {
-        while (node.kind === 158 /* QualifiedName */ || node.kind === 78 /* Identifier */) {
+        while (node.kind === 159 /* QualifiedName */ || node.kind === 79 /* Identifier */) {
             node = node.parent;
         }
-        return node.kind === 177 /* TypeQuery */;
+        return node.kind === 179 /* TypeQuery */;
     }
     ts.isPartOfTypeQuery = isPartOfTypeQuery;
     function isNamespaceReexportDeclaration(node) {
@@ -15559,7 +15957,7 @@
     }
     ts.isNamespaceReexportDeclaration = isNamespaceReexportDeclaration;
     function isExternalModuleImportEqualsDeclaration(node) {
-        return node.kind === 261 /* ImportEqualsDeclaration */ && node.moduleReference.kind === 273 /* ExternalModuleReference */;
+        return node.kind === 263 /* ImportEqualsDeclaration */ && node.moduleReference.kind === 275 /* ExternalModuleReference */;
     }
     ts.isExternalModuleImportEqualsDeclaration = isExternalModuleImportEqualsDeclaration;
     function getExternalModuleImportEqualsDeclarationExpression(node) {
@@ -15572,7 +15970,7 @@
     }
     ts.getExternalModuleRequireArgument = getExternalModuleRequireArgument;
     function isInternalModuleImportEqualsDeclaration(node) {
-        return node.kind === 261 /* ImportEqualsDeclaration */ && node.moduleReference.kind !== 273 /* ExternalModuleReference */;
+        return node.kind === 263 /* ImportEqualsDeclaration */ && node.moduleReference.kind !== 275 /* ExternalModuleReference */;
     }
     ts.isInternalModuleImportEqualsDeclaration = isInternalModuleImportEqualsDeclaration;
     function isSourceFileJS(file) {
@@ -15604,15 +16002,15 @@
             ts.isIdentifier(node.typeName) &&
             node.typeName.escapedText === "Object" &&
             node.typeArguments && node.typeArguments.length === 2 &&
-            (node.typeArguments[0].kind === 147 /* StringKeyword */ || node.typeArguments[0].kind === 144 /* NumberKeyword */);
+            (node.typeArguments[0].kind === 148 /* StringKeyword */ || node.typeArguments[0].kind === 145 /* NumberKeyword */);
     }
     ts.isJSDocIndexSignature = isJSDocIndexSignature;
     function isRequireCall(callExpression, requireStringLiteralLikeArgument) {
-        if (callExpression.kind !== 204 /* CallExpression */) {
+        if (callExpression.kind !== 206 /* CallExpression */) {
             return false;
         }
         var _a = callExpression, expression = _a.expression, args = _a.arguments;
-        if (expression.kind !== 78 /* Identifier */ || expression.escapedText !== "require") {
+        if (expression.kind !== 79 /* Identifier */ || expression.escapedText !== "require") {
             return false;
         }
         if (args.length !== 1) {
@@ -15627,7 +16025,7 @@
      * This function does not test if the node is in a JavaScript file or not.
      */
     function isRequireVariableDeclaration(node) {
-        if (node.kind === 199 /* BindingElement */) {
+        if (node.kind === 201 /* BindingElement */) {
             node = node.parent.parent;
         }
         return ts.isVariableDeclaration(node) && !!node.initializer && isRequireCall(getLeftmostAccessExpression(node.initializer), /*requireStringLiteralLikeArgument*/ true);
@@ -15682,7 +16080,7 @@
      * We treat the right hand side of assignments with container-like initializers as declarations.
      */
     function getAssignedExpandoInitializer(node) {
-        if (node && node.parent && ts.isBinaryExpression(node.parent) && node.parent.operatorToken.kind === 62 /* EqualsToken */) {
+        if (node && node.parent && ts.isBinaryExpression(node.parent) && node.parent.operatorToken.kind === 63 /* EqualsToken */) {
             var isPrototypeAssignment = isPrototypeAccess(node.parent.left);
             return getExpandoInitializer(node.parent.right, isPrototypeAssignment) ||
                 getDefaultedExpandoInitializer(node.parent.left, node.parent.right, isPrototypeAssignment);
@@ -15708,11 +16106,11 @@
     function getExpandoInitializer(initializer, isPrototypeAssignment) {
         if (ts.isCallExpression(initializer)) {
             var e = skipParentheses(initializer.expression);
-            return e.kind === 209 /* FunctionExpression */ || e.kind === 210 /* ArrowFunction */ ? initializer : undefined;
+            return e.kind === 211 /* FunctionExpression */ || e.kind === 212 /* ArrowFunction */ ? initializer : undefined;
         }
-        if (initializer.kind === 209 /* FunctionExpression */ ||
-            initializer.kind === 222 /* ClassExpression */ ||
-            initializer.kind === 210 /* ArrowFunction */) {
+        if (initializer.kind === 211 /* FunctionExpression */ ||
+            initializer.kind === 224 /* ClassExpression */ ||
+            initializer.kind === 212 /* ArrowFunction */) {
             return initializer;
         }
         if (ts.isObjectLiteralExpression(initializer) && (initializer.properties.length === 0 || isPrototypeAssignment)) {
@@ -15738,7 +16136,7 @@
     }
     function isDefaultedExpandoInitializer(node) {
         var name = ts.isVariableDeclaration(node.parent) ? node.parent.name :
-            ts.isBinaryExpression(node.parent) && node.parent.operatorToken.kind === 62 /* EqualsToken */ ? node.parent.left :
+            ts.isBinaryExpression(node.parent) && node.parent.operatorToken.kind === 63 /* EqualsToken */ ? node.parent.left :
                 undefined;
         return name && getExpandoInitializer(node.right, isPrototypeAccess(name)) && isEntityNameExpression(name) && isSameEntityName(name, node.left);
     }
@@ -15747,7 +16145,7 @@
     function getNameOfExpando(node) {
         if (ts.isBinaryExpression(node.parent)) {
             var parent = ((node.parent.operatorToken.kind === 56 /* BarBarToken */ || node.parent.operatorToken.kind === 60 /* QuestionQuestionToken */) && ts.isBinaryExpression(node.parent.parent)) ? node.parent.parent : node.parent;
-            if (parent.operatorToken.kind === 62 /* EqualsToken */ && ts.isIdentifier(parent.left)) {
+            if (parent.operatorToken.kind === 63 /* EqualsToken */ && ts.isIdentifier(parent.left)) {
                 return parent.left;
             }
         }
@@ -15770,7 +16168,7 @@
             return getTextOfIdentifierOrLiteral(name) === getTextOfIdentifierOrLiteral(initializer);
         }
         if (ts.isIdentifier(name) && isLiteralLikeAccess(initializer) &&
-            (initializer.expression.kind === 107 /* ThisKeyword */ ||
+            (initializer.expression.kind === 108 /* ThisKeyword */ ||
                 ts.isIdentifier(initializer.expression) &&
                     (initializer.expression.escapedText === "window" ||
                         initializer.expression.escapedText === "self" ||
@@ -15838,14 +16236,14 @@
     ts.isLiteralLikeElementAccess = isLiteralLikeElementAccess;
     /** Any series of property and element accesses. */
     function isBindableStaticAccessExpression(node, excludeThisKeyword) {
-        return ts.isPropertyAccessExpression(node) && (!excludeThisKeyword && node.expression.kind === 107 /* ThisKeyword */ || ts.isIdentifier(node.name) && isBindableStaticNameExpression(node.expression, /*excludeThisKeyword*/ true))
+        return ts.isPropertyAccessExpression(node) && (!excludeThisKeyword && node.expression.kind === 108 /* ThisKeyword */ || ts.isIdentifier(node.name) && isBindableStaticNameExpression(node.expression, /*excludeThisKeyword*/ true))
             || isBindableStaticElementAccessExpression(node, excludeThisKeyword);
     }
     ts.isBindableStaticAccessExpression = isBindableStaticAccessExpression;
     /** Any series of property and element accesses, ending in a literal element access */
     function isBindableStaticElementAccessExpression(node, excludeThisKeyword) {
         return isLiteralLikeElementAccess(node)
-            && ((!excludeThisKeyword && node.expression.kind === 107 /* ThisKeyword */) ||
+            && ((!excludeThisKeyword && node.expression.kind === 108 /* ThisKeyword */) ||
                 isEntityNameExpression(node.expression) ||
                 isBindableStaticAccessExpression(node.expression, /*excludeThisKeyword*/ true));
     }
@@ -15875,7 +16273,7 @@
             }
             return 7 /* ObjectDefinePropertyValue */;
         }
-        if (expr.operatorToken.kind !== 62 /* EqualsToken */ || !isAccessExpression(expr.left) || isVoidZero(getRightMostAssignedExpression(expr))) {
+        if (expr.operatorToken.kind !== 63 /* EqualsToken */ || !isAccessExpression(expr.left) || isVoidZero(getRightMostAssignedExpression(expr))) {
             return 0 /* None */;
         }
         if (isBindableStaticNameExpression(expr.left.expression, /*excludeThisKeyword*/ true) && getElementOrPropertyAccessName(expr.left) === "prototype" && ts.isObjectLiteralExpression(getInitializerOfBinaryExpression(expr))) {
@@ -15917,7 +16315,7 @@
     }
     ts.getElementOrPropertyAccessName = getElementOrPropertyAccessName;
     function getAssignmentDeclarationPropertyAccessKind(lhs) {
-        if (lhs.expression.kind === 107 /* ThisKeyword */) {
+        if (lhs.expression.kind === 108 /* ThisKeyword */) {
             return 4 /* ThisProperty */;
         }
         else if (isModuleExportsAccessExpression(lhs)) {
@@ -15962,7 +16360,7 @@
     ts.isPrototypePropertyAssignment = isPrototypePropertyAssignment;
     function isSpecialPropertyDeclaration(expr) {
         return isInJSFile(expr) &&
-            expr.parent && expr.parent.kind === 234 /* ExpressionStatement */ &&
+            expr.parent && expr.parent.kind === 236 /* ExpressionStatement */ &&
             (!ts.isElementAccessExpression(expr) || isLiteralLikeElementAccess(expr)) &&
             !!ts.getJSDocTypeTag(expr.parent);
     }
@@ -15983,17 +16381,17 @@
             return false;
         }
         var decl = symbol.valueDeclaration;
-        return decl.kind === 252 /* FunctionDeclaration */ || ts.isVariableDeclaration(decl) && decl.initializer && ts.isFunctionLike(decl.initializer);
+        return decl.kind === 254 /* FunctionDeclaration */ || ts.isVariableDeclaration(decl) && decl.initializer && ts.isFunctionLike(decl.initializer);
     }
     ts.isFunctionSymbol = isFunctionSymbol;
     function tryGetModuleSpecifierFromDeclaration(node) {
         var _a, _b, _c;
         switch (node.kind) {
-            case 250 /* VariableDeclaration */:
+            case 252 /* VariableDeclaration */:
                 return node.initializer.arguments[0].text;
-            case 262 /* ImportDeclaration */:
+            case 264 /* ImportDeclaration */:
                 return (_a = ts.tryCast(node.moduleSpecifier, ts.isStringLiteralLike)) === null || _a === void 0 ? void 0 : _a.text;
-            case 261 /* ImportEqualsDeclaration */:
+            case 263 /* ImportEqualsDeclaration */:
                 return (_c = ts.tryCast((_b = ts.tryCast(node.moduleReference, ts.isExternalModuleReference)) === null || _b === void 0 ? void 0 : _b.expression, ts.isStringLiteralLike)) === null || _c === void 0 ? void 0 : _c.text;
             default:
                 ts.Debug.assertNever(node);
@@ -16006,14 +16404,14 @@
     ts.importFromModuleSpecifier = importFromModuleSpecifier;
     function tryGetImportFromModuleSpecifier(node) {
         switch (node.parent.kind) {
-            case 262 /* ImportDeclaration */:
-            case 268 /* ExportDeclaration */:
+            case 264 /* ImportDeclaration */:
+            case 270 /* ExportDeclaration */:
                 return node.parent;
-            case 273 /* ExternalModuleReference */:
+            case 275 /* ExternalModuleReference */:
                 return node.parent.parent;
-            case 204 /* CallExpression */:
+            case 206 /* CallExpression */:
                 return isImportCall(node.parent) || isRequireCall(node.parent, /*checkArg*/ false) ? node.parent : undefined;
-            case 192 /* LiteralType */:
+            case 194 /* LiteralType */:
                 ts.Debug.assert(ts.isStringLiteral(node));
                 return ts.tryCast(node.parent.parent, ts.isImportTypeNode);
             default:
@@ -16023,16 +16421,16 @@
     ts.tryGetImportFromModuleSpecifier = tryGetImportFromModuleSpecifier;
     function getExternalModuleName(node) {
         switch (node.kind) {
-            case 262 /* ImportDeclaration */:
-            case 268 /* ExportDeclaration */:
+            case 264 /* ImportDeclaration */:
+            case 270 /* ExportDeclaration */:
                 return node.moduleSpecifier;
-            case 261 /* ImportEqualsDeclaration */:
-                return node.moduleReference.kind === 273 /* ExternalModuleReference */ ? node.moduleReference.expression : undefined;
-            case 196 /* ImportType */:
+            case 263 /* ImportEqualsDeclaration */:
+                return node.moduleReference.kind === 275 /* ExternalModuleReference */ ? node.moduleReference.expression : undefined;
+            case 198 /* ImportType */:
                 return isLiteralImportTypeNode(node) ? node.argument.literal : undefined;
-            case 204 /* CallExpression */:
+            case 206 /* CallExpression */:
                 return node.arguments[0];
-            case 257 /* ModuleDeclaration */:
+            case 259 /* ModuleDeclaration */:
                 return node.name.kind === 10 /* StringLiteral */ ? node.name : undefined;
             default:
                 return ts.Debug.assertNever(node);
@@ -16041,11 +16439,11 @@
     ts.getExternalModuleName = getExternalModuleName;
     function getNamespaceDeclarationNode(node) {
         switch (node.kind) {
-            case 262 /* ImportDeclaration */:
+            case 264 /* ImportDeclaration */:
                 return node.importClause && ts.tryCast(node.importClause.namedBindings, ts.isNamespaceImport);
-            case 261 /* ImportEqualsDeclaration */:
+            case 263 /* ImportEqualsDeclaration */:
                 return node;
-            case 268 /* ExportDeclaration */:
+            case 270 /* ExportDeclaration */:
                 return node.exportClause && ts.tryCast(node.exportClause, ts.isNamespaceExport);
             default:
                 return ts.Debug.assertNever(node);
@@ -16053,7 +16451,7 @@
     }
     ts.getNamespaceDeclarationNode = getNamespaceDeclarationNode;
     function isDefaultImport(node) {
-        return node.kind === 262 /* ImportDeclaration */ && !!node.importClause && !!node.importClause.name;
+        return node.kind === 264 /* ImportDeclaration */ && !!node.importClause && !!node.importClause.name;
     }
     ts.isDefaultImport = isDefaultImport;
     function forEachImportClauseDeclaration(node, action) {
@@ -16074,13 +16472,13 @@
     function hasQuestionToken(node) {
         if (node) {
             switch (node.kind) {
-                case 161 /* Parameter */:
-                case 166 /* MethodDeclaration */:
-                case 165 /* MethodSignature */:
-                case 290 /* ShorthandPropertyAssignment */:
-                case 289 /* PropertyAssignment */:
-                case 164 /* PropertyDeclaration */:
-                case 163 /* PropertySignature */:
+                case 162 /* Parameter */:
+                case 167 /* MethodDeclaration */:
+                case 166 /* MethodSignature */:
+                case 292 /* ShorthandPropertyAssignment */:
+                case 291 /* PropertyAssignment */:
+                case 165 /* PropertyDeclaration */:
+                case 164 /* PropertySignature */:
                     return node.questionToken !== undefined;
             }
         }
@@ -16094,7 +16492,7 @@
     }
     ts.isJSDocConstructSignature = isJSDocConstructSignature;
     function isJSDocTypeAlias(node) {
-        return node.kind === 335 /* JSDocTypedefTag */ || node.kind === 328 /* JSDocCallbackTag */ || node.kind === 329 /* JSDocEnumTag */;
+        return node.kind === 340 /* JSDocTypedefTag */ || node.kind === 333 /* JSDocCallbackTag */ || node.kind === 334 /* JSDocEnumTag */;
     }
     ts.isJSDocTypeAlias = isJSDocTypeAlias;
     function isTypeAlias(node) {
@@ -16104,7 +16502,7 @@
     function getSourceOfAssignment(node) {
         return ts.isExpressionStatement(node) &&
             ts.isBinaryExpression(node.expression) &&
-            node.expression.operatorToken.kind === 62 /* EqualsToken */
+            node.expression.operatorToken.kind === 63 /* EqualsToken */
             ? getRightMostAssignedExpression(node.expression)
             : undefined;
     }
@@ -16119,12 +16517,12 @@
     }
     function getSingleInitializerOfVariableStatementOrPropertyDeclaration(node) {
         switch (node.kind) {
-            case 233 /* VariableStatement */:
+            case 235 /* VariableStatement */:
                 var v = getSingleVariableOfVariableStatement(node);
                 return v && v.initializer;
-            case 164 /* PropertyDeclaration */:
+            case 165 /* PropertyDeclaration */:
                 return node.initializer;
-            case 289 /* PropertyAssignment */:
+            case 291 /* PropertyAssignment */:
                 return node.initializer;
         }
     }
@@ -16136,7 +16534,7 @@
     function getNestedModuleDeclaration(node) {
         return ts.isModuleDeclaration(node) &&
             node.body &&
-            node.body.kind === 257 /* ModuleDeclaration */
+            node.body.kind === 259 /* ModuleDeclaration */
             ? node.body
             : undefined;
     }
@@ -16151,11 +16549,11 @@
             if (ts.hasJSDocNodes(node)) {
                 result = ts.append(result, ts.last(node.jsDoc));
             }
-            if (node.kind === 161 /* Parameter */) {
+            if (node.kind === 162 /* Parameter */) {
                 result = ts.addRange(result, (noCache ? ts.getJSDocParameterTagsNoCache : ts.getJSDocParameterTags)(node));
                 break;
             }
-            if (node.kind === 160 /* TypeParameter */) {
+            if (node.kind === 161 /* TypeParameter */) {
                 result = ts.addRange(result, (noCache ? ts.getJSDocTypeParameterTagsNoCache : ts.getJSDocTypeParameterTags)(node));
                 break;
             }
@@ -16166,13 +16564,13 @@
     ts.getJSDocCommentsAndTags = getJSDocCommentsAndTags;
     function getNextJSDocCommentLocation(node) {
         var parent = node.parent;
-        if (parent.kind === 289 /* PropertyAssignment */ ||
-            parent.kind === 267 /* ExportAssignment */ ||
-            parent.kind === 164 /* PropertyDeclaration */ ||
-            parent.kind === 234 /* ExpressionStatement */ && node.kind === 202 /* PropertyAccessExpression */ ||
-            parent.kind === 243 /* ReturnStatement */ ||
+        if (parent.kind === 291 /* PropertyAssignment */ ||
+            parent.kind === 269 /* ExportAssignment */ ||
+            parent.kind === 165 /* PropertyDeclaration */ ||
+            parent.kind === 236 /* ExpressionStatement */ && node.kind === 204 /* PropertyAccessExpression */ ||
+            parent.kind === 245 /* ReturnStatement */ ||
             getNestedModuleDeclaration(parent) ||
-            ts.isBinaryExpression(node) && node.operatorToken.kind === 62 /* EqualsToken */) {
+            ts.isBinaryExpression(node) && node.operatorToken.kind === 63 /* EqualsToken */) {
             return parent;
         }
         // Try to recognize this pattern when node is initializer of variable declaration and JSDoc comments are on containing variable statement.
@@ -16183,7 +16581,7 @@
         // var x = function(name) { return name.length; }
         else if (parent.parent &&
             (getSingleVariableOfVariableStatement(parent.parent) === node ||
-                ts.isBinaryExpression(parent) && parent.operatorToken.kind === 62 /* EqualsToken */)) {
+                ts.isBinaryExpression(parent) && parent.operatorToken.kind === 63 /* EqualsToken */)) {
             return parent.parent;
         }
         else if (parent.parent && parent.parent.parent &&
@@ -16207,7 +16605,7 @@
         if (!decl) {
             return undefined;
         }
-        var parameter = ts.find(decl.parameters, function (p) { return p.name.kind === 78 /* Identifier */ && p.name.escapedText === name; });
+        var parameter = ts.find(decl.parameters, function (p) { return p.name.kind === 79 /* Identifier */ && p.name.escapedText === name; });
         return parameter && parameter.symbol;
     }
     ts.getParameterSymbolFromJSDoc = getParameterSymbolFromJSDoc;
@@ -16257,7 +16655,7 @@
     ts.hasRestParameter = hasRestParameter;
     function isRestParameter(node) {
         var type = ts.isJSDocParameterTag(node) ? (node.typeExpression && node.typeExpression.type) : node.type;
-        return node.dotDotDotToken !== undefined || !!type && type.kind === 310 /* JSDocVariadicType */;
+        return node.dotDotDotToken !== undefined || !!type && type.kind === 313 /* JSDocVariadicType */;
     }
     ts.isRestParameter = isRestParameter;
     function hasTypeArguments(node) {
@@ -16274,34 +16672,34 @@
         var parent = node.parent;
         while (true) {
             switch (parent.kind) {
-                case 217 /* BinaryExpression */:
+                case 219 /* BinaryExpression */:
                     var binaryOperator = parent.operatorToken.kind;
                     return isAssignmentOperator(binaryOperator) && parent.left === node ?
-                        binaryOperator === 62 /* EqualsToken */ || isLogicalOrCoalescingAssignmentOperator(binaryOperator) ? 1 /* Definite */ : 2 /* Compound */ :
+                        binaryOperator === 63 /* EqualsToken */ || isLogicalOrCoalescingAssignmentOperator(binaryOperator) ? 1 /* Definite */ : 2 /* Compound */ :
                         0 /* None */;
-                case 215 /* PrefixUnaryExpression */:
-                case 216 /* PostfixUnaryExpression */:
+                case 217 /* PrefixUnaryExpression */:
+                case 218 /* PostfixUnaryExpression */:
                     var unaryOperator = parent.operator;
                     return unaryOperator === 45 /* PlusPlusToken */ || unaryOperator === 46 /* MinusMinusToken */ ? 2 /* Compound */ : 0 /* None */;
-                case 239 /* ForInStatement */:
-                case 240 /* ForOfStatement */:
+                case 241 /* ForInStatement */:
+                case 242 /* ForOfStatement */:
                     return parent.initializer === node ? 1 /* Definite */ : 0 /* None */;
-                case 208 /* ParenthesizedExpression */:
-                case 200 /* ArrayLiteralExpression */:
-                case 221 /* SpreadElement */:
-                case 226 /* NonNullExpression */:
+                case 210 /* ParenthesizedExpression */:
+                case 202 /* ArrayLiteralExpression */:
+                case 223 /* SpreadElement */:
+                case 228 /* NonNullExpression */:
                     node = parent;
                     break;
-                case 291 /* SpreadAssignment */:
+                case 293 /* SpreadAssignment */:
                     node = parent.parent;
                     break;
-                case 290 /* ShorthandPropertyAssignment */:
+                case 292 /* ShorthandPropertyAssignment */:
                     if (parent.name !== node) {
                         return 0 /* None */;
                     }
                     node = parent.parent;
                     break;
-                case 289 /* PropertyAssignment */:
+                case 291 /* PropertyAssignment */:
                     if (parent.name === node) {
                         return 0 /* None */;
                     }
@@ -16328,22 +16726,22 @@
      */
     function isNodeWithPossibleHoistedDeclaration(node) {
         switch (node.kind) {
-            case 231 /* Block */:
-            case 233 /* VariableStatement */:
-            case 244 /* WithStatement */:
-            case 235 /* IfStatement */:
-            case 245 /* SwitchStatement */:
-            case 259 /* CaseBlock */:
-            case 285 /* CaseClause */:
-            case 286 /* DefaultClause */:
-            case 246 /* LabeledStatement */:
-            case 238 /* ForStatement */:
-            case 239 /* ForInStatement */:
-            case 240 /* ForOfStatement */:
-            case 236 /* DoStatement */:
-            case 237 /* WhileStatement */:
-            case 248 /* TryStatement */:
-            case 288 /* CatchClause */:
+            case 233 /* Block */:
+            case 235 /* VariableStatement */:
+            case 246 /* WithStatement */:
+            case 237 /* IfStatement */:
+            case 247 /* SwitchStatement */:
+            case 261 /* CaseBlock */:
+            case 287 /* CaseClause */:
+            case 288 /* DefaultClause */:
+            case 248 /* LabeledStatement */:
+            case 240 /* ForStatement */:
+            case 241 /* ForInStatement */:
+            case 242 /* ForOfStatement */:
+            case 238 /* DoStatement */:
+            case 239 /* WhileStatement */:
+            case 250 /* TryStatement */:
+            case 290 /* CatchClause */:
                 return true;
         }
         return false;
@@ -16360,11 +16758,11 @@
         return node;
     }
     function walkUpParenthesizedTypes(node) {
-        return walkUp(node, 187 /* ParenthesizedType */);
+        return walkUp(node, 189 /* ParenthesizedType */);
     }
     ts.walkUpParenthesizedTypes = walkUpParenthesizedTypes;
     function walkUpParenthesizedExpressions(node) {
-        return walkUp(node, 208 /* ParenthesizedExpression */);
+        return walkUp(node, 210 /* ParenthesizedExpression */);
     }
     ts.walkUpParenthesizedExpressions = walkUpParenthesizedExpressions;
     /**
@@ -16374,7 +16772,7 @@
      */
     function walkUpParenthesizedTypesAndGetParentAndChild(node) {
         var child;
-        while (node && node.kind === 187 /* ParenthesizedType */) {
+        while (node && node.kind === 189 /* ParenthesizedType */) {
             child = node;
             node = node.parent;
         }
@@ -16385,19 +16783,13 @@
         return ts.skipOuterExpressions(node, 1 /* Parentheses */);
     }
     ts.skipParentheses = skipParentheses;
-    function skipParenthesesUp(node) {
-        while (node.kind === 208 /* ParenthesizedExpression */) {
-            node = node.parent;
-        }
-        return node;
-    }
     // a node is delete target iff. it is PropertyAccessExpression/ElementAccessExpression with parentheses skipped
     function isDeleteTarget(node) {
-        if (node.kind !== 202 /* PropertyAccessExpression */ && node.kind !== 203 /* ElementAccessExpression */) {
+        if (node.kind !== 204 /* PropertyAccessExpression */ && node.kind !== 205 /* ElementAccessExpression */) {
             return false;
         }
         node = walkUpParenthesizedExpressions(node.parent);
-        return node && node.kind === 211 /* DeleteExpression */;
+        return node && node.kind === 213 /* DeleteExpression */;
     }
     ts.isDeleteTarget = isDeleteTarget;
     function isNodeDescendantOf(node, ancestor) {
@@ -16424,7 +16816,7 @@
                 if (ts.isComputedPropertyName(parent))
                     return parent.parent;
             // falls through
-            case 78 /* Identifier */:
+            case 79 /* Identifier */:
                 if (ts.isDeclaration(parent)) {
                     return parent.name === name ? parent : undefined;
                 }
@@ -16441,7 +16833,7 @@
                         ? binExp
                         : undefined;
                 }
-            case 79 /* PrivateIdentifier */:
+            case 80 /* PrivateIdentifier */:
                 return ts.isDeclaration(parent) && parent.name === name ? parent : undefined;
             default:
                 return undefined;
@@ -16450,7 +16842,7 @@
     ts.getDeclarationFromName = getDeclarationFromName;
     function isLiteralComputedPropertyDeclarationName(node) {
         return isStringOrNumericLiteralLike(node) &&
-            node.parent.kind === 159 /* ComputedPropertyName */ &&
+            node.parent.kind === 160 /* ComputedPropertyName */ &&
             ts.isDeclaration(node.parent.parent);
     }
     ts.isLiteralComputedPropertyDeclarationName = isLiteralComputedPropertyDeclarationName;
@@ -16458,26 +16850,26 @@
     function isIdentifierName(node) {
         var parent = node.parent;
         switch (parent.kind) {
-            case 164 /* PropertyDeclaration */:
-            case 163 /* PropertySignature */:
-            case 166 /* MethodDeclaration */:
-            case 165 /* MethodSignature */:
-            case 168 /* GetAccessor */:
-            case 169 /* SetAccessor */:
-            case 292 /* EnumMember */:
-            case 289 /* PropertyAssignment */:
-            case 202 /* PropertyAccessExpression */:
+            case 165 /* PropertyDeclaration */:
+            case 164 /* PropertySignature */:
+            case 167 /* MethodDeclaration */:
+            case 166 /* MethodSignature */:
+            case 170 /* GetAccessor */:
+            case 171 /* SetAccessor */:
+            case 294 /* EnumMember */:
+            case 291 /* PropertyAssignment */:
+            case 204 /* PropertyAccessExpression */:
                 // Name in member declaration or property name in property access
                 return parent.name === node;
-            case 158 /* QualifiedName */:
+            case 159 /* QualifiedName */:
                 // Name on right hand side of dot in a type query or type reference
                 return parent.right === node;
-            case 199 /* BindingElement */:
-            case 266 /* ImportSpecifier */:
+            case 201 /* BindingElement */:
+            case 268 /* ImportSpecifier */:
                 // Property name in binding element or import specifier
                 return parent.propertyName === node;
-            case 271 /* ExportSpecifier */:
-            case 281 /* JsxAttribute */:
+            case 273 /* ExportSpecifier */:
+            case 283 /* JsxAttribute */:
                 // Any name in an export specifier or JSX Attribute
                 return true;
         }
@@ -16497,33 +16889,33 @@
     // {<Identifier>}
     // {name: <EntityNameExpression>}
     function isAliasSymbolDeclaration(node) {
-        return node.kind === 261 /* ImportEqualsDeclaration */ ||
-            node.kind === 260 /* NamespaceExportDeclaration */ ||
-            node.kind === 263 /* ImportClause */ && !!node.name ||
-            node.kind === 264 /* NamespaceImport */ ||
-            node.kind === 270 /* NamespaceExport */ ||
-            node.kind === 266 /* ImportSpecifier */ ||
-            node.kind === 271 /* ExportSpecifier */ ||
-            node.kind === 267 /* ExportAssignment */ && exportAssignmentIsAlias(node) ||
+        return node.kind === 263 /* ImportEqualsDeclaration */ ||
+            node.kind === 262 /* NamespaceExportDeclaration */ ||
+            node.kind === 265 /* ImportClause */ && !!node.name ||
+            node.kind === 266 /* NamespaceImport */ ||
+            node.kind === 272 /* NamespaceExport */ ||
+            node.kind === 268 /* ImportSpecifier */ ||
+            node.kind === 273 /* ExportSpecifier */ ||
+            node.kind === 269 /* ExportAssignment */ && exportAssignmentIsAlias(node) ||
             ts.isBinaryExpression(node) && getAssignmentDeclarationKind(node) === 2 /* ModuleExports */ && exportAssignmentIsAlias(node) ||
-            ts.isPropertyAccessExpression(node) && ts.isBinaryExpression(node.parent) && node.parent.left === node && node.parent.operatorToken.kind === 62 /* EqualsToken */ && isAliasableExpression(node.parent.right) ||
-            node.kind === 290 /* ShorthandPropertyAssignment */ ||
-            node.kind === 289 /* PropertyAssignment */ && isAliasableExpression(node.initializer);
+            ts.isPropertyAccessExpression(node) && ts.isBinaryExpression(node.parent) && node.parent.left === node && node.parent.operatorToken.kind === 63 /* EqualsToken */ && isAliasableExpression(node.parent.right) ||
+            node.kind === 292 /* ShorthandPropertyAssignment */ ||
+            node.kind === 291 /* PropertyAssignment */ && isAliasableExpression(node.initializer);
     }
     ts.isAliasSymbolDeclaration = isAliasSymbolDeclaration;
     function getAliasDeclarationFromName(node) {
         switch (node.parent.kind) {
-            case 263 /* ImportClause */:
-            case 266 /* ImportSpecifier */:
-            case 264 /* NamespaceImport */:
-            case 271 /* ExportSpecifier */:
-            case 267 /* ExportAssignment */:
-            case 261 /* ImportEqualsDeclaration */:
+            case 265 /* ImportClause */:
+            case 268 /* ImportSpecifier */:
+            case 266 /* NamespaceImport */:
+            case 273 /* ExportSpecifier */:
+            case 269 /* ExportAssignment */:
+            case 263 /* ImportEqualsDeclaration */:
                 return node.parent;
-            case 158 /* QualifiedName */:
+            case 159 /* QualifiedName */:
                 do {
                     node = node.parent;
-                } while (node.parent.kind === 158 /* QualifiedName */);
+                } while (node.parent.kind === 159 /* QualifiedName */);
                 return getAliasDeclarationFromName(node);
         }
     }
@@ -16542,7 +16934,7 @@
     }
     ts.getExportAssignmentExpression = getExportAssignmentExpression;
     function getPropertyAssignmentAliasLikeExpression(node) {
-        return node.kind === 290 /* ShorthandPropertyAssignment */ ? node.name : node.kind === 289 /* PropertyAssignment */ ? node.initializer :
+        return node.kind === 292 /* ShorthandPropertyAssignment */ ? node.name : node.kind === 291 /* PropertyAssignment */ ? node.initializer :
             node.parent.right;
     }
     ts.getPropertyAssignmentAliasLikeExpression = getPropertyAssignmentAliasLikeExpression;
@@ -16559,7 +16951,7 @@
     }
     ts.getEffectiveBaseTypeNode = getEffectiveBaseTypeNode;
     function getClassExtendsHeritageElement(node) {
-        var heritageClause = getHeritageClause(node.heritageClauses, 93 /* ExtendsKeyword */);
+        var heritageClause = getHeritageClause(node.heritageClauses, 94 /* ExtendsKeyword */);
         return heritageClause && heritageClause.types.length > 0 ? heritageClause.types[0] : undefined;
     }
     ts.getClassExtendsHeritageElement = getClassExtendsHeritageElement;
@@ -16568,7 +16960,7 @@
             return ts.getJSDocImplementsTags(node).map(function (n) { return n.class; });
         }
         else {
-            var heritageClause = getHeritageClause(node.heritageClauses, 116 /* ImplementsKeyword */);
+            var heritageClause = getHeritageClause(node.heritageClauses, 117 /* ImplementsKeyword */);
             return heritageClause === null || heritageClause === void 0 ? void 0 : heritageClause.types;
         }
     }
@@ -16581,7 +16973,7 @@
     }
     ts.getAllSuperTypeNodes = getAllSuperTypeNodes;
     function getInterfaceBaseTypeNodes(node) {
-        var heritageClause = getHeritageClause(node.heritageClauses, 93 /* ExtendsKeyword */);
+        var heritageClause = getHeritageClause(node.heritageClauses, 94 /* ExtendsKeyword */);
         return heritageClause ? heritageClause.types : undefined;
     }
     ts.getInterfaceBaseTypeNodes = getInterfaceBaseTypeNodes;
@@ -16608,11 +17000,11 @@
     }
     ts.getAncestor = getAncestor;
     function isKeyword(token) {
-        return 80 /* FirstKeyword */ <= token && token <= 157 /* LastKeyword */;
+        return 81 /* FirstKeyword */ <= token && token <= 158 /* LastKeyword */;
     }
     ts.isKeyword = isKeyword;
     function isContextualKeyword(token) {
-        return 125 /* FirstContextualKeyword */ <= token && token <= 157 /* LastContextualKeyword */;
+        return 126 /* FirstContextualKeyword */ <= token && token <= 158 /* LastContextualKeyword */;
     }
     ts.isContextualKeyword = isContextualKeyword;
     function isNonContextualKeyword(token) {
@@ -16620,7 +17012,7 @@
     }
     ts.isNonContextualKeyword = isNonContextualKeyword;
     function isFutureReservedKeyword(token) {
-        return 116 /* FirstFutureReservedWord */ <= token && token <= 124 /* LastFutureReservedWord */;
+        return 117 /* FirstFutureReservedWord */ <= token && token <= 125 /* LastFutureReservedWord */;
     }
     ts.isFutureReservedKeyword = isFutureReservedKeyword;
     function isStringANonContextualKeyword(name) {
@@ -16656,14 +17048,14 @@
         }
         var flags = 0 /* Normal */;
         switch (node.kind) {
-            case 252 /* FunctionDeclaration */:
-            case 209 /* FunctionExpression */:
-            case 166 /* MethodDeclaration */:
+            case 254 /* FunctionDeclaration */:
+            case 211 /* FunctionExpression */:
+            case 167 /* MethodDeclaration */:
                 if (node.asteriskToken) {
                     flags |= 1 /* Generator */;
                 }
             // falls through
-            case 210 /* ArrowFunction */:
+            case 212 /* ArrowFunction */:
                 if (hasSyntacticModifier(node, 256 /* Async */)) {
                     flags |= 2 /* Async */;
                 }
@@ -16677,10 +17069,10 @@
     ts.getFunctionFlags = getFunctionFlags;
     function isAsyncFunction(node) {
         switch (node.kind) {
-            case 252 /* FunctionDeclaration */:
-            case 209 /* FunctionExpression */:
-            case 210 /* ArrowFunction */:
-            case 166 /* MethodDeclaration */:
+            case 254 /* FunctionDeclaration */:
+            case 211 /* FunctionExpression */:
+            case 212 /* ArrowFunction */:
+            case 167 /* MethodDeclaration */:
                 return node.body !== undefined
                     && node.asteriskToken === undefined
                     && hasSyntacticModifier(node, 256 /* Async */);
@@ -16710,7 +17102,7 @@
     }
     ts.hasDynamicName = hasDynamicName;
     function isDynamicName(name) {
-        if (!(name.kind === 159 /* ComputedPropertyName */ || name.kind === 203 /* ElementAccessExpression */)) {
+        if (!(name.kind === 160 /* ComputedPropertyName */ || name.kind === 205 /* ElementAccessExpression */)) {
             return false;
         }
         var expr = ts.isElementAccessExpression(name) ? skipParentheses(name.argumentExpression) : name.expression;
@@ -16720,13 +17112,13 @@
     ts.isDynamicName = isDynamicName;
     function getPropertyNameForPropertyNameNode(name) {
         switch (name.kind) {
-            case 78 /* Identifier */:
-            case 79 /* PrivateIdentifier */:
+            case 79 /* Identifier */:
+            case 80 /* PrivateIdentifier */:
                 return name.escapedText;
             case 10 /* StringLiteral */:
             case 8 /* NumericLiteral */:
                 return ts.escapeLeadingUnderscores(name.text);
-            case 159 /* ComputedPropertyName */:
+            case 160 /* ComputedPropertyName */:
                 var nameExpression = name.expression;
                 if (isStringOrNumericLiteralLike(nameExpression)) {
                     return ts.escapeLeadingUnderscores(nameExpression.text);
@@ -16745,7 +17137,7 @@
     ts.getPropertyNameForPropertyNameNode = getPropertyNameForPropertyNameNode;
     function isPropertyNameLiteral(node) {
         switch (node.kind) {
-            case 78 /* Identifier */:
+            case 79 /* Identifier */:
             case 10 /* StringLiteral */:
             case 14 /* NoSubstitutionTemplateLiteral */:
             case 8 /* NumericLiteral */:
@@ -16775,11 +17167,15 @@
         return ts.startsWith(symbol.escapedName, "__@");
     }
     ts.isKnownSymbol = isKnownSymbol;
+    function isPrivateIdentifierSymbol(symbol) {
+        return ts.startsWith(symbol.escapedName, "__#");
+    }
+    ts.isPrivateIdentifierSymbol = isPrivateIdentifierSymbol;
     /**
      * Includes the word "Symbol" with unicode escapes
      */
     function isESSymbolIdentifier(node) {
-        return node.kind === 78 /* Identifier */ && node.escapedText === "Symbol";
+        return node.kind === 79 /* Identifier */ && node.escapedText === "Symbol";
     }
     ts.isESSymbolIdentifier = isESSymbolIdentifier;
     function isPushOrUnshiftIdentifier(node) {
@@ -16788,11 +17184,11 @@
     ts.isPushOrUnshiftIdentifier = isPushOrUnshiftIdentifier;
     function isParameterDeclaration(node) {
         var root = getRootDeclaration(node);
-        return root.kind === 161 /* Parameter */;
+        return root.kind === 162 /* Parameter */;
     }
     ts.isParameterDeclaration = isParameterDeclaration;
     function getRootDeclaration(node) {
-        while (node.kind === 199 /* BindingElement */) {
+        while (node.kind === 201 /* BindingElement */) {
             node = node.parent.parent;
         }
         return node;
@@ -16800,15 +17196,15 @@
     ts.getRootDeclaration = getRootDeclaration;
     function nodeStartsNewLexicalEnvironment(node) {
         var kind = node.kind;
-        return kind === 167 /* Constructor */
-            || kind === 209 /* FunctionExpression */
-            || kind === 252 /* FunctionDeclaration */
-            || kind === 210 /* ArrowFunction */
-            || kind === 166 /* MethodDeclaration */
-            || kind === 168 /* GetAccessor */
-            || kind === 169 /* SetAccessor */
-            || kind === 257 /* ModuleDeclaration */
-            || kind === 298 /* SourceFile */;
+        return kind === 169 /* Constructor */
+            || kind === 211 /* FunctionExpression */
+            || kind === 254 /* FunctionDeclaration */
+            || kind === 212 /* ArrowFunction */
+            || kind === 167 /* MethodDeclaration */
+            || kind === 170 /* GetAccessor */
+            || kind === 171 /* SetAccessor */
+            || kind === 259 /* ModuleDeclaration */
+            || kind === 300 /* SourceFile */;
     }
     ts.nodeStartsNewLexicalEnvironment = nodeStartsNewLexicalEnvironment;
     function nodeIsSynthesized(range) {
@@ -16827,41 +17223,41 @@
     })(Associativity = ts.Associativity || (ts.Associativity = {}));
     function getExpressionAssociativity(expression) {
         var operator = getOperator(expression);
-        var hasArguments = expression.kind === 205 /* NewExpression */ && expression.arguments !== undefined;
+        var hasArguments = expression.kind === 207 /* NewExpression */ && expression.arguments !== undefined;
         return getOperatorAssociativity(expression.kind, operator, hasArguments);
     }
     ts.getExpressionAssociativity = getExpressionAssociativity;
     function getOperatorAssociativity(kind, operator, hasArguments) {
         switch (kind) {
-            case 205 /* NewExpression */:
+            case 207 /* NewExpression */:
                 return hasArguments ? 0 /* Left */ : 1 /* Right */;
-            case 215 /* PrefixUnaryExpression */:
-            case 212 /* TypeOfExpression */:
-            case 213 /* VoidExpression */:
-            case 211 /* DeleteExpression */:
-            case 214 /* AwaitExpression */:
-            case 218 /* ConditionalExpression */:
-            case 220 /* YieldExpression */:
+            case 217 /* PrefixUnaryExpression */:
+            case 214 /* TypeOfExpression */:
+            case 215 /* VoidExpression */:
+            case 213 /* DeleteExpression */:
+            case 216 /* AwaitExpression */:
+            case 220 /* ConditionalExpression */:
+            case 222 /* YieldExpression */:
                 return 1 /* Right */;
-            case 217 /* BinaryExpression */:
+            case 219 /* BinaryExpression */:
                 switch (operator) {
                     case 42 /* AsteriskAsteriskToken */:
-                    case 62 /* EqualsToken */:
-                    case 63 /* PlusEqualsToken */:
-                    case 64 /* MinusEqualsToken */:
-                    case 66 /* AsteriskAsteriskEqualsToken */:
-                    case 65 /* AsteriskEqualsToken */:
-                    case 67 /* SlashEqualsToken */:
-                    case 68 /* PercentEqualsToken */:
-                    case 69 /* LessThanLessThanEqualsToken */:
-                    case 70 /* GreaterThanGreaterThanEqualsToken */:
-                    case 71 /* GreaterThanGreaterThanGreaterThanEqualsToken */:
-                    case 72 /* AmpersandEqualsToken */:
-                    case 77 /* CaretEqualsToken */:
-                    case 73 /* BarEqualsToken */:
-                    case 74 /* BarBarEqualsToken */:
-                    case 75 /* AmpersandAmpersandEqualsToken */:
-                    case 76 /* QuestionQuestionEqualsToken */:
+                    case 63 /* EqualsToken */:
+                    case 64 /* PlusEqualsToken */:
+                    case 65 /* MinusEqualsToken */:
+                    case 67 /* AsteriskAsteriskEqualsToken */:
+                    case 66 /* AsteriskEqualsToken */:
+                    case 68 /* SlashEqualsToken */:
+                    case 69 /* PercentEqualsToken */:
+                    case 70 /* LessThanLessThanEqualsToken */:
+                    case 71 /* GreaterThanGreaterThanEqualsToken */:
+                    case 72 /* GreaterThanGreaterThanGreaterThanEqualsToken */:
+                    case 73 /* AmpersandEqualsToken */:
+                    case 78 /* CaretEqualsToken */:
+                    case 74 /* BarEqualsToken */:
+                    case 75 /* BarBarEqualsToken */:
+                    case 76 /* AmpersandAmpersandEqualsToken */:
+                    case 77 /* QuestionQuestionEqualsToken */:
                         return 1 /* Right */;
                 }
         }
@@ -16870,15 +17266,15 @@
     ts.getOperatorAssociativity = getOperatorAssociativity;
     function getExpressionPrecedence(expression) {
         var operator = getOperator(expression);
-        var hasArguments = expression.kind === 205 /* NewExpression */ && expression.arguments !== undefined;
+        var hasArguments = expression.kind === 207 /* NewExpression */ && expression.arguments !== undefined;
         return getOperatorPrecedence(expression.kind, operator, hasArguments);
     }
     ts.getExpressionPrecedence = getExpressionPrecedence;
     function getOperator(expression) {
-        if (expression.kind === 217 /* BinaryExpression */) {
+        if (expression.kind === 219 /* BinaryExpression */) {
             return expression.operatorToken.kind;
         }
-        else if (expression.kind === 215 /* PrefixUnaryExpression */ || expression.kind === 216 /* PostfixUnaryExpression */) {
+        else if (expression.kind === 217 /* PrefixUnaryExpression */ || expression.kind === 218 /* PostfixUnaryExpression */) {
             return expression.operator;
         }
         else {
@@ -17057,82 +17453,82 @@
     })(OperatorPrecedence = ts.OperatorPrecedence || (ts.OperatorPrecedence = {}));
     function getOperatorPrecedence(nodeKind, operatorKind, hasArguments) {
         switch (nodeKind) {
-            case 341 /* CommaListExpression */:
+            case 346 /* CommaListExpression */:
                 return 0 /* Comma */;
-            case 221 /* SpreadElement */:
+            case 223 /* SpreadElement */:
                 return 1 /* Spread */;
-            case 220 /* YieldExpression */:
+            case 222 /* YieldExpression */:
                 return 2 /* Yield */;
-            case 218 /* ConditionalExpression */:
+            case 220 /* ConditionalExpression */:
                 return 4 /* Conditional */;
-            case 217 /* BinaryExpression */:
+            case 219 /* BinaryExpression */:
                 switch (operatorKind) {
                     case 27 /* CommaToken */:
                         return 0 /* Comma */;
-                    case 62 /* EqualsToken */:
-                    case 63 /* PlusEqualsToken */:
-                    case 64 /* MinusEqualsToken */:
-                    case 66 /* AsteriskAsteriskEqualsToken */:
-                    case 65 /* AsteriskEqualsToken */:
-                    case 67 /* SlashEqualsToken */:
-                    case 68 /* PercentEqualsToken */:
-                    case 69 /* LessThanLessThanEqualsToken */:
-                    case 70 /* GreaterThanGreaterThanEqualsToken */:
-                    case 71 /* GreaterThanGreaterThanGreaterThanEqualsToken */:
-                    case 72 /* AmpersandEqualsToken */:
-                    case 77 /* CaretEqualsToken */:
-                    case 73 /* BarEqualsToken */:
-                    case 74 /* BarBarEqualsToken */:
-                    case 75 /* AmpersandAmpersandEqualsToken */:
-                    case 76 /* QuestionQuestionEqualsToken */:
+                    case 63 /* EqualsToken */:
+                    case 64 /* PlusEqualsToken */:
+                    case 65 /* MinusEqualsToken */:
+                    case 67 /* AsteriskAsteriskEqualsToken */:
+                    case 66 /* AsteriskEqualsToken */:
+                    case 68 /* SlashEqualsToken */:
+                    case 69 /* PercentEqualsToken */:
+                    case 70 /* LessThanLessThanEqualsToken */:
+                    case 71 /* GreaterThanGreaterThanEqualsToken */:
+                    case 72 /* GreaterThanGreaterThanGreaterThanEqualsToken */:
+                    case 73 /* AmpersandEqualsToken */:
+                    case 78 /* CaretEqualsToken */:
+                    case 74 /* BarEqualsToken */:
+                    case 75 /* BarBarEqualsToken */:
+                    case 76 /* AmpersandAmpersandEqualsToken */:
+                    case 77 /* QuestionQuestionEqualsToken */:
                         return 3 /* Assignment */;
                     default:
                         return getBinaryOperatorPrecedence(operatorKind);
                 }
             // TODO: Should prefix `++` and `--` be moved to the `Update` precedence?
-            case 207 /* TypeAssertionExpression */:
-            case 226 /* NonNullExpression */:
-            case 215 /* PrefixUnaryExpression */:
-            case 212 /* TypeOfExpression */:
-            case 213 /* VoidExpression */:
-            case 211 /* DeleteExpression */:
-            case 214 /* AwaitExpression */:
+            case 209 /* TypeAssertionExpression */:
+            case 228 /* NonNullExpression */:
+            case 217 /* PrefixUnaryExpression */:
+            case 214 /* TypeOfExpression */:
+            case 215 /* VoidExpression */:
+            case 213 /* DeleteExpression */:
+            case 216 /* AwaitExpression */:
                 return 16 /* Unary */;
-            case 216 /* PostfixUnaryExpression */:
+            case 218 /* PostfixUnaryExpression */:
                 return 17 /* Update */;
-            case 204 /* CallExpression */:
+            case 206 /* CallExpression */:
                 return 18 /* LeftHandSide */;
-            case 205 /* NewExpression */:
+            case 207 /* NewExpression */:
                 return hasArguments ? 19 /* Member */ : 18 /* LeftHandSide */;
-            case 206 /* TaggedTemplateExpression */:
-            case 202 /* PropertyAccessExpression */:
-            case 203 /* ElementAccessExpression */:
-            case 227 /* MetaProperty */:
+            case 208 /* TaggedTemplateExpression */:
+            case 204 /* PropertyAccessExpression */:
+            case 205 /* ElementAccessExpression */:
+            case 229 /* MetaProperty */:
                 return 19 /* Member */;
-            case 225 /* AsExpression */:
+            case 227 /* AsExpression */:
                 return 11 /* Relational */;
-            case 107 /* ThisKeyword */:
-            case 105 /* SuperKeyword */:
-            case 78 /* Identifier */:
-            case 103 /* NullKeyword */:
-            case 109 /* TrueKeyword */:
-            case 94 /* FalseKeyword */:
+            case 108 /* ThisKeyword */:
+            case 106 /* SuperKeyword */:
+            case 79 /* Identifier */:
+            case 104 /* NullKeyword */:
+            case 110 /* TrueKeyword */:
+            case 95 /* FalseKeyword */:
             case 8 /* NumericLiteral */:
             case 9 /* BigIntLiteral */:
             case 10 /* StringLiteral */:
-            case 200 /* ArrayLiteralExpression */:
-            case 201 /* ObjectLiteralExpression */:
-            case 209 /* FunctionExpression */:
-            case 210 /* ArrowFunction */:
-            case 222 /* ClassExpression */:
+            case 202 /* ArrayLiteralExpression */:
+            case 203 /* ObjectLiteralExpression */:
+            case 211 /* FunctionExpression */:
+            case 212 /* ArrowFunction */:
+            case 224 /* ClassExpression */:
             case 13 /* RegularExpressionLiteral */:
             case 14 /* NoSubstitutionTemplateLiteral */:
-            case 219 /* TemplateExpression */:
-            case 208 /* ParenthesizedExpression */:
-            case 223 /* OmittedExpression */:
-            case 274 /* JsxElement */:
-            case 275 /* JsxSelfClosingElement */:
-            case 278 /* JsxFragment */:
+            case 221 /* TemplateExpression */:
+            case 210 /* ParenthesizedExpression */:
+            case 225 /* OmittedExpression */:
+            case 276 /* JsxElement */:
+            case 277 /* JsxSelfClosingElement */:
+            case 280 /* JsxFragment */:
                 return 20 /* Primary */;
             default:
                 return -1 /* Invalid */;
@@ -17162,9 +17558,9 @@
             case 31 /* GreaterThanToken */:
             case 32 /* LessThanEqualsToken */:
             case 33 /* GreaterThanEqualsToken */:
-            case 101 /* InstanceOfKeyword */:
-            case 100 /* InKeyword */:
-            case 126 /* AsKeyword */:
+            case 102 /* InstanceOfKeyword */:
+            case 101 /* InKeyword */:
+            case 127 /* AsKeyword */:
                 return 11 /* Relational */;
             case 47 /* LessThanLessThanToken */:
             case 48 /* GreaterThanGreaterThanToken */:
@@ -17188,7 +17584,7 @@
     function getSemanticJsxChildren(children) {
         return ts.filter(children, function (i) {
             switch (i.kind) {
-                case 284 /* JsxExpression */:
+                case 286 /* JsxExpression */:
                     return !!i.expression;
                 case 11 /* JsxText */:
                     return !i.containsOnlyTriviaWhiteSpaces;
@@ -17281,8 +17677,8 @@
     // There is no reason for this other than that JSON.stringify does not handle it either.
     var doubleQuoteEscapedCharsRegExp = /[\\\"\u0000-\u001f\t\v\f\b\r\n\u2028\u2029\u0085]/g;
     var singleQuoteEscapedCharsRegExp = /[\\\'\u0000-\u001f\t\v\f\b\r\n\u2028\u2029\u0085]/g;
-    // Template strings should be preserved as much as possible
-    var backtickQuoteEscapedCharsRegExp = /[\\`]/g;
+    // Template strings preserve simple LF newlines, still encode CRLF (or CR)
+    var backtickQuoteEscapedCharsRegExp = /\r\n|[\\\`\u0000-\u001f\t\v\f\b\r\u2028\u2029\u0085]/g;
     var escapedCharsMap = new ts.Map(ts.getEntries({
         "\t": "\\t",
         "\v": "\\v",
@@ -17296,7 +17692,8 @@
         "\`": "\\\`",
         "\u2028": "\\u2028",
         "\u2029": "\\u2029",
-        "\u0085": "\\u0085" // nextLine
+        "\u0085": "\\u0085",
+        "\r\n": "\\r\\n", // special case for CRLFs in backticks
     }));
     function encodeUtf16EscapeSequence(charCode) {
         var hexCharCode = charCode.toString(16).toUpperCase();
@@ -17490,7 +17887,7 @@
             reportInaccessibleThisError: ts.noop,
             reportPrivateInBaseOfClassExpression: ts.noop,
             reportInaccessibleUniqueSymbolError: ts.noop,
-            trackSymbol: ts.noop,
+            trackSymbol: function () { return false; },
             writeKeyword: write,
             writeOperator: write,
             writeParameter: write,
@@ -17747,11 +18144,21 @@
     }
     ts.parameterIsThisKeyword = parameterIsThisKeyword;
     function isThisIdentifier(node) {
-        return !!node && node.kind === 78 /* Identifier */ && identifierIsThisKeyword(node);
+        return !!node && node.kind === 79 /* Identifier */ && identifierIsThisKeyword(node);
     }
     ts.isThisIdentifier = isThisIdentifier;
+    function isThisInTypeQuery(node) {
+        if (!isThisIdentifier(node)) {
+            return false;
+        }
+        while (ts.isQualifiedName(node.parent) && node.parent.left === node) {
+            node = node.parent;
+        }
+        return node.parent.kind === 179 /* TypeQuery */;
+    }
+    ts.isThisInTypeQuery = isThisInTypeQuery;
     function identifierIsThisKeyword(id) {
-        return id.originalKeywordKind === 107 /* ThisKeyword */;
+        return id.originalKeywordKind === 108 /* ThisKeyword */;
     }
     ts.identifierIsThisKeyword = identifierIsThisKeyword;
     function getAllAccessorDeclarations(declarations, accessor) {
@@ -17762,10 +18169,10 @@
         var setAccessor;
         if (hasDynamicName(accessor)) {
             firstAccessor = accessor;
-            if (accessor.kind === 168 /* GetAccessor */) {
+            if (accessor.kind === 170 /* GetAccessor */) {
                 getAccessor = accessor;
             }
-            else if (accessor.kind === 169 /* SetAccessor */) {
+            else if (accessor.kind === 171 /* SetAccessor */) {
                 setAccessor = accessor;
             }
             else {
@@ -17775,7 +18182,7 @@
         else {
             ts.forEach(declarations, function (member) {
                 if (ts.isAccessor(member)
-                    && hasSyntacticModifier(member, 32 /* Static */) === hasSyntacticModifier(accessor, 32 /* Static */)) {
+                    && isStatic(member) === isStatic(accessor)) {
                     var memberName = getPropertyNameForPropertyNameNode(member.name);
                     var accessorName = getPropertyNameForPropertyNameNode(accessor.name);
                     if (memberName === accessorName) {
@@ -17785,10 +18192,10 @@
                         else if (!secondAccessor) {
                             secondAccessor = member;
                         }
-                        if (member.kind === 168 /* GetAccessor */ && !getAccessor) {
+                        if (member.kind === 170 /* GetAccessor */ && !getAccessor) {
                             getAccessor = member;
                         }
-                        if (member.kind === 169 /* SetAccessor */ && !setAccessor) {
+                        if (member.kind === 171 /* SetAccessor */ && !setAccessor) {
                             setAccessor = member;
                         }
                     }
@@ -17837,7 +18244,7 @@
     ts.getJSDocTypeParameterDeclarations = getJSDocTypeParameterDeclarations;
     /** template tags are only available when a typedef isn't already using them */
     function isNonTypeAliasTemplate(tag) {
-        return ts.isJSDocTemplateTag(tag) && !(tag.parent.kind === 312 /* JSDocComment */ && tag.parent.tags.some(isJSDocTypeAlias));
+        return ts.isJSDocTemplateTag(tag) && !(tag.parent.kind === 315 /* JSDocComment */ && tag.parent.tags.some(isJSDocTypeAlias));
     }
     /**
      * Gets the effective type annotation of the value parameter of a set accessor. If the node
@@ -18013,7 +18420,7 @@
     ts.writeCommentRange = writeCommentRange;
     function writeTrimmedCurrentLine(text, commentEnd, writer, newLine, pos, nextLineStart) {
         var end = Math.min(commentEnd, nextLineStart - 1);
-        var currentLineText = text.substring(pos, end).replace(/^\s+|\s+$/g, "");
+        var currentLineText = ts.trimString(text.substring(pos, end));
         if (currentLineText) {
             // trimmed forward and ending spaces text
             writer.writeComment(currentLineText);
@@ -18056,6 +18463,11 @@
         return !!getSelectedSyntacticModifierFlags(node, flags);
     }
     ts.hasSyntacticModifier = hasSyntacticModifier;
+    function isStatic(node) {
+        // https://tc39.es/ecma262/#sec-static-semantics-isstatic
+        return ts.isClassElement(node) && hasStaticModifier(node) || ts.isClassStaticBlockDeclaration(node);
+    }
+    ts.isStatic = isStatic;
     function hasStaticModifier(node) {
         return hasSyntacticModifier(node, 32 /* Static */);
     }
@@ -18085,7 +18497,7 @@
     }
     ts.getSelectedSyntacticModifierFlags = getSelectedSyntacticModifierFlags;
     function getModifierFlagsWorker(node, includeJSDoc, alwaysIncludeJSDoc) {
-        if (node.kind >= 0 /* FirstToken */ && node.kind <= 157 /* LastToken */) {
+        if (node.kind >= 0 /* FirstToken */ && node.kind <= 158 /* LastToken */) {
             return 0 /* None */;
         }
         if (!(node.modifierFlagsCache & 536870912 /* HasComputedFlags */)) {
@@ -18154,7 +18566,7 @@
      */
     function getSyntacticModifierFlagsNoCache(node) {
         var flags = modifiersToFlags(node.modifiers);
-        if (node.flags & 4 /* NestedNamespace */ || (node.kind === 78 /* Identifier */ && node.isInJSDocNamespace)) {
+        if (node.flags & 4 /* NestedNamespace */ || (node.kind === 79 /* Identifier */ && node.isInJSDocNamespace)) {
             flags |= 1 /* Export */;
         }
         return flags;
@@ -18173,18 +18585,18 @@
     ts.modifiersToFlags = modifiersToFlags;
     function modifierToFlag(token) {
         switch (token) {
-            case 123 /* StaticKeyword */: return 32 /* Static */;
-            case 122 /* PublicKeyword */: return 4 /* Public */;
-            case 121 /* ProtectedKeyword */: return 16 /* Protected */;
-            case 120 /* PrivateKeyword */: return 8 /* Private */;
-            case 125 /* AbstractKeyword */: return 128 /* Abstract */;
-            case 92 /* ExportKeyword */: return 1 /* Export */;
-            case 133 /* DeclareKeyword */: return 2 /* Ambient */;
-            case 84 /* ConstKeyword */: return 2048 /* Const */;
-            case 87 /* DefaultKeyword */: return 512 /* Default */;
-            case 129 /* AsyncKeyword */: return 256 /* Async */;
-            case 142 /* ReadonlyKeyword */: return 64 /* Readonly */;
-            case 156 /* OverrideKeyword */: return 16384 /* Override */;
+            case 124 /* StaticKeyword */: return 32 /* Static */;
+            case 123 /* PublicKeyword */: return 4 /* Public */;
+            case 122 /* ProtectedKeyword */: return 16 /* Protected */;
+            case 121 /* PrivateKeyword */: return 8 /* Private */;
+            case 126 /* AbstractKeyword */: return 128 /* Abstract */;
+            case 93 /* ExportKeyword */: return 1 /* Export */;
+            case 134 /* DeclareKeyword */: return 2 /* Ambient */;
+            case 85 /* ConstKeyword */: return 2048 /* Const */;
+            case 88 /* DefaultKeyword */: return 512 /* Default */;
+            case 130 /* AsyncKeyword */: return 256 /* Async */;
+            case 143 /* ReadonlyKeyword */: return 64 /* Readonly */;
+            case 157 /* OverrideKeyword */: return 16384 /* Override */;
         }
         return 0 /* None */;
     }
@@ -18200,9 +18612,9 @@
     }
     ts.isLogicalOperator = isLogicalOperator;
     function isLogicalOrCoalescingAssignmentOperator(token) {
-        return token === 74 /* BarBarEqualsToken */
-            || token === 75 /* AmpersandAmpersandEqualsToken */
-            || token === 76 /* QuestionQuestionEqualsToken */;
+        return token === 75 /* BarBarEqualsToken */
+            || token === 76 /* AmpersandAmpersandEqualsToken */
+            || token === 77 /* QuestionQuestionEqualsToken */;
     }
     ts.isLogicalOrCoalescingAssignmentOperator = isLogicalOrCoalescingAssignmentOperator;
     function isLogicalOrCoalescingAssignmentExpression(expr) {
@@ -18210,7 +18622,7 @@
     }
     ts.isLogicalOrCoalescingAssignmentExpression = isLogicalOrCoalescingAssignmentExpression;
     function isAssignmentOperator(token) {
-        return token >= 62 /* FirstAssignment */ && token <= 77 /* LastAssignment */;
+        return token >= 63 /* FirstAssignment */ && token <= 78 /* LastAssignment */;
     }
     ts.isAssignmentOperator = isAssignmentOperator;
     /** Get `C` given `N` if `N` is in the position `class C extends N` where `N` is an ExpressionWithTypeArguments. */
@@ -18223,14 +18635,14 @@
         return ts.isExpressionWithTypeArguments(node)
             && ts.isHeritageClause(node.parent)
             && ts.isClassLike(node.parent.parent)
-            ? { class: node.parent.parent, isImplements: node.parent.token === 116 /* ImplementsKeyword */ }
+            ? { class: node.parent.parent, isImplements: node.parent.token === 117 /* ImplementsKeyword */ }
             : undefined;
     }
     ts.tryGetClassImplementingOrExtendingExpressionWithTypeArguments = tryGetClassImplementingOrExtendingExpressionWithTypeArguments;
     function isAssignmentExpression(node, excludeCompoundAssignment) {
         return ts.isBinaryExpression(node)
             && (excludeCompoundAssignment
-                ? node.operatorToken.kind === 62 /* EqualsToken */
+                ? node.operatorToken.kind === 63 /* EqualsToken */
                 : isAssignmentOperator(node.operatorToken.kind))
             && ts.isLeftHandSideExpression(node.left);
     }
@@ -18242,8 +18654,8 @@
     function isDestructuringAssignment(node) {
         if (isAssignmentExpression(node, /*excludeCompoundAssignment*/ true)) {
             var kind = node.left.kind;
-            return kind === 201 /* ObjectLiteralExpression */
-                || kind === 200 /* ArrayLiteralExpression */;
+            return kind === 203 /* ObjectLiteralExpression */
+                || kind === 202 /* ArrayLiteralExpression */;
         }
         return false;
     }
@@ -18253,33 +18665,33 @@
     }
     ts.isExpressionWithTypeArgumentsInClassExtendsClause = isExpressionWithTypeArgumentsInClassExtendsClause;
     function isEntityNameExpression(node) {
-        return node.kind === 78 /* Identifier */ || isPropertyAccessEntityNameExpression(node);
+        return node.kind === 79 /* Identifier */ || isPropertyAccessEntityNameExpression(node);
     }
     ts.isEntityNameExpression = isEntityNameExpression;
     function getFirstIdentifier(node) {
         switch (node.kind) {
-            case 78 /* Identifier */:
+            case 79 /* Identifier */:
                 return node;
-            case 158 /* QualifiedName */:
+            case 159 /* QualifiedName */:
                 do {
                     node = node.left;
-                } while (node.kind !== 78 /* Identifier */);
+                } while (node.kind !== 79 /* Identifier */);
                 return node;
-            case 202 /* PropertyAccessExpression */:
+            case 204 /* PropertyAccessExpression */:
                 do {
                     node = node.expression;
-                } while (node.kind !== 78 /* Identifier */);
+                } while (node.kind !== 79 /* Identifier */);
                 return node;
         }
     }
     ts.getFirstIdentifier = getFirstIdentifier;
     function isDottedName(node) {
-        return node.kind === 78 /* Identifier */
-            || node.kind === 107 /* ThisKeyword */
-            || node.kind === 105 /* SuperKeyword */
-            || node.kind === 227 /* MetaProperty */
-            || node.kind === 202 /* PropertyAccessExpression */ && isDottedName(node.expression)
-            || node.kind === 208 /* ParenthesizedExpression */ && isDottedName(node.expression);
+        return node.kind === 79 /* Identifier */
+            || node.kind === 108 /* ThisKeyword */
+            || node.kind === 106 /* SuperKeyword */
+            || node.kind === 229 /* MetaProperty */
+            || node.kind === 204 /* PropertyAccessExpression */ && isDottedName(node.expression)
+            || node.kind === 210 /* ParenthesizedExpression */ && isDottedName(node.expression);
     }
     ts.isDottedName = isDottedName;
     function isPropertyAccessEntityNameExpression(node) {
@@ -18310,17 +18722,23 @@
     }
     ts.isPrototypeAccess = isPrototypeAccess;
     function isRightSideOfQualifiedNameOrPropertyAccess(node) {
-        return (node.parent.kind === 158 /* QualifiedName */ && node.parent.right === node) ||
-            (node.parent.kind === 202 /* PropertyAccessExpression */ && node.parent.name === node);
+        return (node.parent.kind === 159 /* QualifiedName */ && node.parent.right === node) ||
+            (node.parent.kind === 204 /* PropertyAccessExpression */ && node.parent.name === node);
     }
     ts.isRightSideOfQualifiedNameOrPropertyAccess = isRightSideOfQualifiedNameOrPropertyAccess;
+    function isRightSideOfQualifiedNameOrPropertyAccessOrJSDocMemberName(node) {
+        return ts.isQualifiedName(node.parent) && node.parent.right === node
+            || ts.isPropertyAccessExpression(node.parent) && node.parent.name === node
+            || ts.isJSDocMemberName(node.parent) && node.parent.right === node;
+    }
+    ts.isRightSideOfQualifiedNameOrPropertyAccessOrJSDocMemberName = isRightSideOfQualifiedNameOrPropertyAccessOrJSDocMemberName;
     function isEmptyObjectLiteral(expression) {
-        return expression.kind === 201 /* ObjectLiteralExpression */ &&
+        return expression.kind === 203 /* ObjectLiteralExpression */ &&
             expression.properties.length === 0;
     }
     ts.isEmptyObjectLiteral = isEmptyObjectLiteral;
     function isEmptyArrayLiteral(expression) {
-        return expression.kind === 200 /* ArrayLiteralExpression */ &&
+        return expression.kind === 202 /* ArrayLiteralExpression */ &&
             expression.elements.length === 0;
     }
     ts.isEmptyArrayLiteral = isEmptyArrayLiteral;
@@ -18652,8 +19070,8 @@
         var parseNode = ts.getParseTreeNode(node);
         if (parseNode) {
             switch (parseNode.parent.kind) {
-                case 256 /* EnumDeclaration */:
-                case 257 /* ModuleDeclaration */:
+                case 258 /* EnumDeclaration */:
+                case 259 /* ModuleDeclaration */:
                     return parseNode === parseNode.parent.name;
             }
         }
@@ -18683,7 +19101,7 @@
     function getDeclarationModifierFlagsFromSymbol(s, isWrite) {
         if (isWrite === void 0) { isWrite = false; }
         if (s.valueDeclaration) {
-            var declaration = (isWrite && s.declarations && ts.find(s.declarations, function (d) { return d.kind === 169 /* SetAccessor */; })) || s.valueDeclaration;
+            var declaration = (isWrite && s.declarations && ts.find(s.declarations, function (d) { return d.kind === 171 /* SetAccessor */; })) || s.valueDeclaration;
             var flags = ts.getCombinedModifierFlags(declaration);
             return s.parent && s.parent.flags & 32 /* Class */ ? flags : flags & ~28 /* AccessibilityModifier */;
         }
@@ -18732,35 +19150,35 @@
         if (!parent)
             return 0 /* Read */;
         switch (parent.kind) {
-            case 208 /* ParenthesizedExpression */:
+            case 210 /* ParenthesizedExpression */:
                 return accessKind(parent);
-            case 216 /* PostfixUnaryExpression */:
-            case 215 /* PrefixUnaryExpression */:
+            case 218 /* PostfixUnaryExpression */:
+            case 217 /* PrefixUnaryExpression */:
                 var operator = parent.operator;
                 return operator === 45 /* PlusPlusToken */ || operator === 46 /* MinusMinusToken */ ? writeOrReadWrite() : 0 /* Read */;
-            case 217 /* BinaryExpression */:
+            case 219 /* BinaryExpression */:
                 var _a = parent, left = _a.left, operatorToken = _a.operatorToken;
                 return left === node && isAssignmentOperator(operatorToken.kind) ?
-                    operatorToken.kind === 62 /* EqualsToken */ ? 1 /* Write */ : writeOrReadWrite()
+                    operatorToken.kind === 63 /* EqualsToken */ ? 1 /* Write */ : writeOrReadWrite()
                     : 0 /* Read */;
-            case 202 /* PropertyAccessExpression */:
+            case 204 /* PropertyAccessExpression */:
                 return parent.name !== node ? 0 /* Read */ : accessKind(parent);
-            case 289 /* PropertyAssignment */: {
+            case 291 /* PropertyAssignment */: {
                 var parentAccess = accessKind(parent.parent);
                 // In `({ x: varname }) = { x: 1 }`, the left `x` is a read, the right `x` is a write.
                 return node === parent.name ? reverseAccessKind(parentAccess) : parentAccess;
             }
-            case 290 /* ShorthandPropertyAssignment */:
+            case 292 /* ShorthandPropertyAssignment */:
                 // Assume it's the local variable being accessed, since we don't check public properties for --noUnusedLocals.
                 return node === parent.objectAssignmentInitializer ? 0 /* Read */ : accessKind(parent.parent);
-            case 200 /* ArrayLiteralExpression */:
+            case 202 /* ArrayLiteralExpression */:
                 return accessKind(parent);
             default:
                 return 0 /* Read */;
         }
         function writeOrReadWrite() {
             // If grandparent is not an ExpressionStatement, this is used as an expression in addition to having a side effect.
-            return parent.parent && skipParenthesesUp(parent.parent).kind === 234 /* ExpressionStatement */ ? 1 /* Write */ : 2 /* ReadWrite */;
+            return parent.parent && walkUpParenthesizedExpressions(parent.parent).kind === 236 /* ExpressionStatement */ ? 1 /* Write */ : 2 /* ReadWrite */;
         }
     }
     function reverseAccessKind(a) {
@@ -18904,37 +19322,37 @@
     }
     ts.isObjectTypeDeclaration = isObjectTypeDeclaration;
     function isTypeNodeKind(kind) {
-        return (kind >= 173 /* FirstTypeNode */ && kind <= 196 /* LastTypeNode */)
-            || kind === 128 /* AnyKeyword */
-            || kind === 152 /* UnknownKeyword */
-            || kind === 144 /* NumberKeyword */
-            || kind === 155 /* BigIntKeyword */
-            || kind === 145 /* ObjectKeyword */
-            || kind === 131 /* BooleanKeyword */
-            || kind === 147 /* StringKeyword */
-            || kind === 148 /* SymbolKeyword */
-            || kind === 113 /* VoidKeyword */
-            || kind === 150 /* UndefinedKeyword */
-            || kind === 141 /* NeverKeyword */
-            || kind === 224 /* ExpressionWithTypeArguments */
-            || kind === 304 /* JSDocAllType */
-            || kind === 305 /* JSDocUnknownType */
-            || kind === 306 /* JSDocNullableType */
-            || kind === 307 /* JSDocNonNullableType */
-            || kind === 308 /* JSDocOptionalType */
-            || kind === 309 /* JSDocFunctionType */
-            || kind === 310 /* JSDocVariadicType */;
+        return (kind >= 175 /* FirstTypeNode */ && kind <= 198 /* LastTypeNode */)
+            || kind === 129 /* AnyKeyword */
+            || kind === 153 /* UnknownKeyword */
+            || kind === 145 /* NumberKeyword */
+            || kind === 156 /* BigIntKeyword */
+            || kind === 146 /* ObjectKeyword */
+            || kind === 132 /* BooleanKeyword */
+            || kind === 148 /* StringKeyword */
+            || kind === 149 /* SymbolKeyword */
+            || kind === 114 /* VoidKeyword */
+            || kind === 151 /* UndefinedKeyword */
+            || kind === 142 /* NeverKeyword */
+            || kind === 226 /* ExpressionWithTypeArguments */
+            || kind === 307 /* JSDocAllType */
+            || kind === 308 /* JSDocUnknownType */
+            || kind === 309 /* JSDocNullableType */
+            || kind === 310 /* JSDocNonNullableType */
+            || kind === 311 /* JSDocOptionalType */
+            || kind === 312 /* JSDocFunctionType */
+            || kind === 313 /* JSDocVariadicType */;
     }
     ts.isTypeNodeKind = isTypeNodeKind;
     function isAccessExpression(node) {
-        return node.kind === 202 /* PropertyAccessExpression */ || node.kind === 203 /* ElementAccessExpression */;
+        return node.kind === 204 /* PropertyAccessExpression */ || node.kind === 205 /* ElementAccessExpression */;
     }
     ts.isAccessExpression = isAccessExpression;
     function getNameOfAccessExpression(node) {
-        if (node.kind === 202 /* PropertyAccessExpression */) {
+        if (node.kind === 204 /* PropertyAccessExpression */) {
             return node.name;
         }
-        ts.Debug.assert(node.kind === 203 /* ElementAccessExpression */);
+        ts.Debug.assert(node.kind === 205 /* ElementAccessExpression */);
         return node.argumentExpression;
     }
     ts.getNameOfAccessExpression = getNameOfAccessExpression;
@@ -18949,7 +19367,7 @@
     }
     ts.isBundleFileTextLike = isBundleFileTextLike;
     function isNamedImportsOrExports(node) {
-        return node.kind === 265 /* NamedImports */ || node.kind === 269 /* NamedExports */;
+        return node.kind === 267 /* NamedImports */ || node.kind === 271 /* NamedExports */;
     }
     ts.isNamedImportsOrExports = isNamedImportsOrExports;
     function getLeftmostAccessExpression(expr) {
@@ -18962,28 +19380,28 @@
     function getLeftmostExpression(node, stopAtCallExpressions) {
         while (true) {
             switch (node.kind) {
-                case 216 /* PostfixUnaryExpression */:
+                case 218 /* PostfixUnaryExpression */:
                     node = node.operand;
                     continue;
-                case 217 /* BinaryExpression */:
+                case 219 /* BinaryExpression */:
                     node = node.left;
                     continue;
-                case 218 /* ConditionalExpression */:
+                case 220 /* ConditionalExpression */:
                     node = node.condition;
                     continue;
-                case 206 /* TaggedTemplateExpression */:
+                case 208 /* TaggedTemplateExpression */:
                     node = node.tag;
                     continue;
-                case 204 /* CallExpression */:
+                case 206 /* CallExpression */:
                     if (stopAtCallExpressions) {
                         return node;
                     }
                 // falls through
-                case 225 /* AsExpression */:
-                case 203 /* ElementAccessExpression */:
-                case 202 /* PropertyAccessExpression */:
-                case 226 /* NonNullExpression */:
-                case 340 /* PartiallyEmittedExpression */:
+                case 227 /* AsExpression */:
+                case 205 /* ElementAccessExpression */:
+                case 204 /* PropertyAccessExpression */:
+                case 228 /* NonNullExpression */:
+                case 345 /* PartiallyEmittedExpression */:
                     node = node.expression;
                     continue;
             }
@@ -19367,13 +19785,11 @@
     }
     ts.getUseDefineForClassFields = getUseDefineForClassFields;
     function compilerOptionsAffectSemanticDiagnostics(newOptions, oldOptions) {
-        return oldOptions !== newOptions &&
-            ts.semanticDiagnosticsOptionDeclarations.some(function (option) { return !isJsonEqual(getCompilerOptionValue(oldOptions, option), getCompilerOptionValue(newOptions, option)); });
+        return optionsHaveChanges(oldOptions, newOptions, ts.semanticDiagnosticsOptionDeclarations);
     }
     ts.compilerOptionsAffectSemanticDiagnostics = compilerOptionsAffectSemanticDiagnostics;
     function compilerOptionsAffectEmit(newOptions, oldOptions) {
-        return oldOptions !== newOptions &&
-            ts.affectsEmitOptionDeclarations.some(function (option) { return !isJsonEqual(getCompilerOptionValue(oldOptions, option), getCompilerOptionValue(newOptions, option)); });
+        return optionsHaveChanges(oldOptions, newOptions, ts.affectsEmitOptionDeclarations);
     }
     ts.compilerOptionsAffectEmit = compilerOptionsAffectEmit;
     function getCompilerOptionValue(options, option) {
@@ -19420,6 +19836,7 @@
         var symlinkedDirectories;
         var symlinkedDirectoriesByRealpath;
         var symlinkedFiles;
+        var hasProcessedResolutions = false;
         return {
             getSymlinkedFiles: function () { return symlinkedFiles; },
             getSymlinkedDirectories: function () { return symlinkedDirectories; },
@@ -19448,30 +19865,31 @@
                     });
                 }
             },
+            setSymlinksFromResolutions: function (files, typeReferenceDirectives) {
+                var _this = this;
+                var _a;
+                ts.Debug.assert(!hasProcessedResolutions);
+                hasProcessedResolutions = true;
+                for (var _i = 0, files_1 = files; _i < files_1.length; _i++) {
+                    var file = files_1[_i];
+                    (_a = file.resolvedModules) === null || _a === void 0 ? void 0 : _a.forEach(function (resolution) { return processResolution(_this, resolution); });
+                }
+                typeReferenceDirectives === null || typeReferenceDirectives === void 0 ? void 0 : typeReferenceDirectives.forEach(function (resolution) { return processResolution(_this, resolution); });
+            },
+            hasProcessedResolutions: function () { return hasProcessedResolutions; },
         };
-    }
-    ts.createSymlinkCache = createSymlinkCache;
-    function discoverProbableSymlinks(files, getCanonicalFileName, cwd) {
-        var cache = createSymlinkCache(cwd, getCanonicalFileName);
-        var symlinks = ts.flatMap(files, function (sf) {
-            var pairs = sf.resolvedModules && ts.arrayFrom(ts.mapDefinedIterator(sf.resolvedModules.values(), function (res) {
-                return (res === null || res === void 0 ? void 0 : res.originalPath) ? [res.resolvedFileName, res.originalPath] : undefined;
-            }));
-            return ts.concatenate(pairs, sf.resolvedTypeReferenceDirectiveNames && ts.arrayFrom(ts.mapDefinedIterator(sf.resolvedTypeReferenceDirectiveNames.values(), function (res) {
-                return (res === null || res === void 0 ? void 0 : res.originalPath) && res.resolvedFileName ? [res.resolvedFileName, res.originalPath] : undefined;
-            })));
-        });
-        for (var _i = 0, symlinks_1 = symlinks; _i < symlinks_1.length; _i++) {
-            var _a = symlinks_1[_i], resolvedPath = _a[0], originalPath = _a[1];
-            cache.setSymlinkedFile(ts.toPath(originalPath, cwd, getCanonicalFileName), resolvedPath);
-            var _b = guessDirectorySymlink(resolvedPath, originalPath, cwd, getCanonicalFileName) || ts.emptyArray, commonResolved = _b[0], commonOriginal = _b[1];
+        function processResolution(cache, resolution) {
+            if (!resolution || !resolution.originalPath || !resolution.resolvedFileName)
+                return;
+            var resolvedFileName = resolution.resolvedFileName, originalPath = resolution.originalPath;
+            cache.setSymlinkedFile(ts.toPath(originalPath, cwd, getCanonicalFileName), resolvedFileName);
+            var _a = guessDirectorySymlink(resolvedFileName, originalPath, cwd, getCanonicalFileName) || ts.emptyArray, commonResolved = _a[0], commonOriginal = _a[1];
             if (commonResolved && commonOriginal) {
                 cache.setSymlinkedDirectory(commonOriginal, { real: commonResolved, realPath: ts.toPath(commonResolved, cwd, getCanonicalFileName) });
             }
         }
-        return cache;
     }
-    ts.discoverProbableSymlinks = discoverProbableSymlinks;
+    ts.createSymlinkCache = createSymlinkCache;
     function guessDirectorySymlink(a, b, cwd, getCanonicalFileName) {
         var aParts = ts.getPathComponents(ts.getNormalizedAbsolutePath(a, cwd));
         var bParts = ts.getPathComponents(ts.getNormalizedAbsolutePath(b, cwd));
@@ -19667,7 +20085,7 @@
     }
     ts.getRegexFromPattern = getRegexFromPattern;
     /** @param path directory of the tsconfig.json */
-    function matchFiles(path, extensions, excludes, includes, useCaseSensitiveFileNames, currentDirectory, depth, getFileSystemEntries, realpath) {
+    function matchFiles(path, extensions, excludes, includes, useCaseSensitiveFileNames, currentDirectory, depth, getFileSystemEntries, realpath, directoryExists) {
         path = ts.normalizePath(path);
         currentDirectory = ts.normalizePath(currentDirectory);
         var patterns = getFileMatcherPatterns(path, excludes, includes, useCaseSensitiveFileNames, currentDirectory);
@@ -19681,7 +20099,9 @@
         var toCanonical = ts.createGetCanonicalFileName(useCaseSensitiveFileNames);
         for (var _i = 0, _a = patterns.basePaths; _i < _a.length; _i++) {
             var basePath = _a[_i];
-            visitDirectory(basePath, ts.combinePaths(currentDirectory, basePath), depth);
+            if (directoryExists(basePath)) {
+                visitDirectory(basePath, ts.combinePaths(currentDirectory, basePath), depth);
+            }
         }
         return ts.flatten(results);
         function visitDirectory(path, absolutePath, depth) {
@@ -19809,14 +20229,14 @@
     ts.supportedTSExtensionsForExtractExtension = [".d.ts" /* Dts */, ".ts" /* Ts */, ".tsx" /* Tsx */];
     ts.supportedJSExtensions = [".js" /* Js */, ".jsx" /* Jsx */];
     ts.supportedJSAndJsonExtensions = [".js" /* Js */, ".jsx" /* Jsx */, ".json" /* Json */];
-    var allSupportedExtensions = __spreadArray(__spreadArray([], ts.supportedTSExtensions), ts.supportedJSExtensions);
-    var allSupportedExtensionsWithJson = __spreadArray(__spreadArray(__spreadArray([], ts.supportedTSExtensions), ts.supportedJSExtensions), [".json" /* Json */]);
+    var allSupportedExtensions = __spreadArray(__spreadArray([], ts.supportedTSExtensions, true), ts.supportedJSExtensions, true);
+    var allSupportedExtensionsWithJson = __spreadArray(__spreadArray(__spreadArray([], ts.supportedTSExtensions, true), ts.supportedJSExtensions, true), [".json" /* Json */], false);
     function getSupportedExtensions(options, extraFileExtensions) {
         var needJsExtensions = options && getAllowJSCompilerOption(options);
         if (!extraFileExtensions || extraFileExtensions.length === 0) {
             return needJsExtensions ? allSupportedExtensions : ts.supportedTSExtensions;
         }
-        var extensions = __spreadArray(__spreadArray([], needJsExtensions ? allSupportedExtensions : ts.supportedTSExtensions), ts.mapDefined(extraFileExtensions, function (x) { return x.scriptKind === 7 /* Deferred */ || needJsExtensions && isJSLike(x.scriptKind) ? x.extension : undefined; }));
+        var extensions = __spreadArray(__spreadArray([], needJsExtensions ? allSupportedExtensions : ts.supportedTSExtensions, true), ts.mapDefined(extraFileExtensions, function (x) { return x.scriptKind === 7 /* Deferred */ || needJsExtensions && isJSLike(x.scriptKind) ? x.extension : undefined; }), true);
         return ts.deduplicate(extensions, ts.equateStringsCaseSensitive, ts.compareStringsCaseSensitive);
     }
     ts.getSupportedExtensions = getSupportedExtensions;
@@ -19830,7 +20250,7 @@
         if (supportedExtensions === ts.supportedTSExtensions) {
             return ts.supportedTSExtensionsWithJson;
         }
-        return __spreadArray(__spreadArray([], supportedExtensions), [".json" /* Json */]);
+        return __spreadArray(__spreadArray([], supportedExtensions, true), [".json" /* Json */], false);
     }
     ts.getSuppoertedExtensionsWithJsonIfResolveJsonModule = getSuppoertedExtensionsWithJsonIfResolveJsonModule;
     function isJSLike(scriptKind) {
@@ -19940,16 +20360,27 @@
         return ts.changeAnyExtension(path, newExtension, extensionsToRemove, /*ignoreCase*/ false);
     }
     ts.changeExtension = changeExtension;
+    /**
+     * Returns the input if there are no stars, a pattern if there is exactly one,
+     * and undefined if there are more.
+     */
     function tryParsePattern(pattern) {
-        // This should be verified outside of here and a proper error thrown.
-        ts.Debug.assert(hasZeroOrOneAsteriskCharacter(pattern));
         var indexOfStar = pattern.indexOf("*");
-        return indexOfStar === -1 ? undefined : {
-            prefix: pattern.substr(0, indexOfStar),
-            suffix: pattern.substr(indexOfStar + 1)
-        };
+        if (indexOfStar === -1) {
+            return pattern;
+        }
+        return pattern.indexOf("*", indexOfStar + 1) !== -1
+            ? undefined
+            : {
+                prefix: pattern.substr(0, indexOfStar),
+                suffix: pattern.substr(indexOfStar + 1)
+            };
     }
     ts.tryParsePattern = tryParsePattern;
+    function tryParsePatterns(paths) {
+        return ts.mapDefined(ts.getOwnKeys(paths), function (path) { return tryParsePattern(path); });
+    }
+    ts.tryParsePatterns = tryParsePatterns;
     function positionIsSynthesized(pos) {
         // This is a fast way of testing the following conditions:
         //  pos === undefined || pos === null || isNaN(pos) || pos < 0;
@@ -19991,23 +20422,19 @@
         directories: ts.emptyArray
     };
     /**
-     * patternStrings contains both pattern strings (containing "*") and regular strings.
+     * patternOrStrings contains both patterns (containing "*") and regular strings.
      * Return an exact match if possible, or a pattern match, or undefined.
      * (These are verified by verifyCompilerOptions to have 0 or 1 "*" characters.)
      */
-    function matchPatternOrExact(patternStrings, candidate) {
+    function matchPatternOrExact(patternOrStrings, candidate) {
         var patterns = [];
-        for (var _i = 0, patternStrings_1 = patternStrings; _i < patternStrings_1.length; _i++) {
-            var patternString = patternStrings_1[_i];
-            if (!hasZeroOrOneAsteriskCharacter(patternString))
-                continue;
-            var pattern = tryParsePattern(patternString);
-            if (pattern) {
-                patterns.push(pattern);
+        for (var _i = 0, patternOrStrings_1 = patternOrStrings; _i < patternOrStrings_1.length; _i++) {
+            var patternOrString = patternOrStrings_1[_i];
+            if (patternOrString === candidate) {
+                return candidate;
             }
-            else if (patternString === candidate) {
-                // pattern was matched as is - no need to search further
-                return patternString;
+            if (!ts.isString(patternOrString)) {
+                patterns.push(patternOrString);
             }
         }
         return ts.findBestPatternMatch(patterns, function (_) { return _; }, candidate);
@@ -20158,42 +20585,45 @@
             || isPartOfTypeQuery(useSite)
             || isIdentifierInNonEmittingHeritageClause(useSite)
             || isPartOfPossiblyValidTypeOrAbstractComputedPropertyName(useSite)
-            || !isExpressionNode(useSite);
+            || !(isExpressionNode(useSite) || isShorthandPropertyNameUseSite(useSite));
     }
     ts.isValidTypeOnlyAliasUseSite = isValidTypeOnlyAliasUseSite;
     function typeOnlyDeclarationIsExport(typeOnlyDeclaration) {
-        return typeOnlyDeclaration.kind === 271 /* ExportSpecifier */;
+        return typeOnlyDeclaration.kind === 273 /* ExportSpecifier */;
     }
     ts.typeOnlyDeclarationIsExport = typeOnlyDeclarationIsExport;
+    function isShorthandPropertyNameUseSite(useSite) {
+        return ts.isIdentifier(useSite) && ts.isShorthandPropertyAssignment(useSite.parent) && useSite.parent.name === useSite;
+    }
     function isPartOfPossiblyValidTypeOrAbstractComputedPropertyName(node) {
-        while (node.kind === 78 /* Identifier */ || node.kind === 202 /* PropertyAccessExpression */) {
+        while (node.kind === 79 /* Identifier */ || node.kind === 204 /* PropertyAccessExpression */) {
             node = node.parent;
         }
-        if (node.kind !== 159 /* ComputedPropertyName */) {
+        if (node.kind !== 160 /* ComputedPropertyName */) {
             return false;
         }
         if (hasSyntacticModifier(node.parent, 128 /* Abstract */)) {
             return true;
         }
         var containerKind = node.parent.parent.kind;
-        return containerKind === 254 /* InterfaceDeclaration */ || containerKind === 178 /* TypeLiteral */;
+        return containerKind === 256 /* InterfaceDeclaration */ || containerKind === 180 /* TypeLiteral */;
     }
     /** Returns true for an identifier in 1) an `implements` clause, and 2) an `extends` clause of an interface. */
     function isIdentifierInNonEmittingHeritageClause(node) {
-        if (node.kind !== 78 /* Identifier */)
+        if (node.kind !== 79 /* Identifier */)
             return false;
         var heritageClause = ts.findAncestor(node.parent, function (parent) {
             switch (parent.kind) {
-                case 287 /* HeritageClause */:
+                case 289 /* HeritageClause */:
                     return true;
-                case 202 /* PropertyAccessExpression */:
-                case 224 /* ExpressionWithTypeArguments */:
+                case 204 /* PropertyAccessExpression */:
+                case 226 /* ExpressionWithTypeArguments */:
                     return false;
                 default:
                     return "quit";
             }
         });
-        return (heritageClause === null || heritageClause === void 0 ? void 0 : heritageClause.token) === 116 /* ImplementsKeyword */ || (heritageClause === null || heritageClause === void 0 ? void 0 : heritageClause.parent.kind) === 254 /* InterfaceDeclaration */;
+        return (heritageClause === null || heritageClause === void 0 ? void 0 : heritageClause.token) === 117 /* ImplementsKeyword */ || (heritageClause === null || heritageClause === void 0 ? void 0 : heritageClause.parent.kind) === 256 /* InterfaceDeclaration */;
     }
     function isIdentifierTypeReference(node) {
         return ts.isTypeReferenceNode(node) && ts.isIdentifier(node.typeName);
@@ -20354,18 +20784,18 @@
         if (!node.parent)
             return undefined;
         switch (node.kind) {
-            case 160 /* TypeParameter */:
+            case 161 /* TypeParameter */:
                 var parent_1 = node.parent;
-                return parent_1.kind === 186 /* InferType */ ? undefined : parent_1.typeParameters;
-            case 161 /* Parameter */:
+                return parent_1.kind === 188 /* InferType */ ? undefined : parent_1.typeParameters;
+            case 162 /* Parameter */:
                 return node.parent.parameters;
-            case 195 /* TemplateLiteralTypeSpan */:
+            case 197 /* TemplateLiteralTypeSpan */:
                 return node.parent.templateSpans;
-            case 229 /* TemplateSpan */:
+            case 231 /* TemplateSpan */:
                 return node.parent.templateSpans;
-            case 162 /* Decorator */:
+            case 163 /* Decorator */:
                 return node.parent.decorators;
-            case 287 /* HeritageClause */:
+            case 289 /* HeritageClause */:
                 return node.parent.heritageClauses;
         }
         var parent = node.parent;
@@ -20373,49 +20803,73 @@
             return ts.isJSDocTypeLiteral(node.parent) ? undefined : node.parent.tags;
         }
         switch (parent.kind) {
-            case 178 /* TypeLiteral */:
-            case 254 /* InterfaceDeclaration */:
+            case 180 /* TypeLiteral */:
+            case 256 /* InterfaceDeclaration */:
                 return ts.isTypeElement(node) ? parent.members : undefined;
-            case 183 /* UnionType */:
-            case 184 /* IntersectionType */:
+            case 185 /* UnionType */:
+            case 186 /* IntersectionType */:
                 return parent.types;
-            case 180 /* TupleType */:
-            case 200 /* ArrayLiteralExpression */:
-            case 341 /* CommaListExpression */:
-            case 265 /* NamedImports */:
-            case 269 /* NamedExports */:
+            case 182 /* TupleType */:
+            case 202 /* ArrayLiteralExpression */:
+            case 346 /* CommaListExpression */:
+            case 267 /* NamedImports */:
+            case 271 /* NamedExports */:
                 return parent.elements;
-            case 201 /* ObjectLiteralExpression */:
-            case 282 /* JsxAttributes */:
+            case 203 /* ObjectLiteralExpression */:
+            case 284 /* JsxAttributes */:
                 return parent.properties;
-            case 204 /* CallExpression */:
-            case 205 /* NewExpression */:
+            case 206 /* CallExpression */:
+            case 207 /* NewExpression */:
                 return ts.isTypeNode(node) ? parent.typeArguments :
                     parent.expression === node ? undefined :
                         parent.arguments;
-            case 274 /* JsxElement */:
-            case 278 /* JsxFragment */:
+            case 276 /* JsxElement */:
+            case 280 /* JsxFragment */:
                 return ts.isJsxChild(node) ? parent.children : undefined;
-            case 276 /* JsxOpeningElement */:
-            case 275 /* JsxSelfClosingElement */:
+            case 278 /* JsxOpeningElement */:
+            case 277 /* JsxSelfClosingElement */:
                 return ts.isTypeNode(node) ? parent.typeArguments : undefined;
-            case 231 /* Block */:
-            case 285 /* CaseClause */:
-            case 286 /* DefaultClause */:
-            case 258 /* ModuleBlock */:
+            case 233 /* Block */:
+            case 287 /* CaseClause */:
+            case 288 /* DefaultClause */:
+            case 260 /* ModuleBlock */:
                 return parent.statements;
-            case 259 /* CaseBlock */:
+            case 261 /* CaseBlock */:
                 return parent.clauses;
-            case 253 /* ClassDeclaration */:
-            case 222 /* ClassExpression */:
+            case 255 /* ClassDeclaration */:
+            case 224 /* ClassExpression */:
                 return ts.isClassElement(node) ? parent.members : undefined;
-            case 256 /* EnumDeclaration */:
+            case 258 /* EnumDeclaration */:
                 return ts.isEnumMember(node) ? parent.members : undefined;
-            case 298 /* SourceFile */:
+            case 300 /* SourceFile */:
                 return parent.statements;
         }
     }
     ts.getContainingNodeArray = getContainingNodeArray;
+    function hasContextSensitiveParameters(node) {
+        // Functions with type parameters are not context sensitive.
+        if (!node.typeParameters) {
+            // Functions with any parameters that lack type annotations are context sensitive.
+            if (ts.some(node.parameters, function (p) { return !getEffectiveTypeAnnotationNode(p); })) {
+                return true;
+            }
+            if (node.kind !== 212 /* ArrowFunction */) {
+                // If the first parameter is not an explicit 'this' parameter, then the function has
+                // an implicit 'this' parameter which is subject to contextual typing.
+                var parameter = ts.firstOrUndefined(node.parameters);
+                if (!(parameter && parameterIsThisKeyword(parameter))) {
+                    return true;
+                }
+            }
+        }
+        return false;
+    }
+    ts.hasContextSensitiveParameters = hasContextSensitiveParameters;
+    /* @internal */
+    function isInfinityOrNaNString(name) {
+        return name === "Infinity" || name === "-Infinity" || name === "NaN";
+    }
+    ts.isInfinityOrNaNString = isInfinityOrNaNString;
 })(ts || (ts = {}));
 /* @internal */
 var ts;
@@ -20529,10 +20983,10 @@
             //
             // If `a ** d` is on the left of operator `**`, we need to parenthesize to preserve
             // the intended order of operations: `(a ** b) ** c`
-            var binaryOperatorPrecedence = ts.getOperatorPrecedence(217 /* BinaryExpression */, binaryOperator);
-            var binaryOperatorAssociativity = ts.getOperatorAssociativity(217 /* BinaryExpression */, binaryOperator);
+            var binaryOperatorPrecedence = ts.getOperatorPrecedence(219 /* BinaryExpression */, binaryOperator);
+            var binaryOperatorAssociativity = ts.getOperatorAssociativity(219 /* BinaryExpression */, binaryOperator);
             var emittedOperand = ts.skipPartiallyEmittedExpressions(operand);
-            if (!isLeftSideOfBinary && operand.kind === 210 /* ArrowFunction */ && binaryOperatorPrecedence > 3 /* Assignment */) {
+            if (!isLeftSideOfBinary && operand.kind === 212 /* ArrowFunction */ && binaryOperatorPrecedence > 3 /* Assignment */) {
                 // We need to parenthesize arrow functions on the right side to avoid it being
                 // parsed as parenthesized expression: `a && (() => {})`
                 return true;
@@ -20544,7 +20998,7 @@
                     // and is a yield expression, then we do not need parentheses.
                     if (!isLeftSideOfBinary
                         && binaryOperatorAssociativity === 1 /* Right */
-                        && operand.kind === 220 /* YieldExpression */) {
+                        && operand.kind === 222 /* YieldExpression */) {
                         return false;
                     }
                     return true;
@@ -20632,7 +21086,7 @@
             if (ts.isLiteralKind(node.kind)) {
                 return node.kind;
             }
-            if (node.kind === 217 /* BinaryExpression */ && node.operatorToken.kind === 39 /* PlusToken */) {
+            if (node.kind === 219 /* BinaryExpression */ && node.operatorToken.kind === 39 /* PlusToken */) {
                 if (node.cachedLiteralKind !== undefined) {
                     return node.cachedLiteralKind;
                 }
@@ -20658,7 +21112,7 @@
         function parenthesizeBinaryOperand(binaryOperator, operand, isLeftSideOfBinary, leftOperand) {
             var skipped = ts.skipPartiallyEmittedExpressions(operand);
             // If the resulting expression is already parenthesized, we do not need to do any further processing.
-            if (skipped.kind === 208 /* ParenthesizedExpression */) {
+            if (skipped.kind === 210 /* ParenthesizedExpression */) {
                 return operand;
             }
             return binaryOperandNeedsParentheses(binaryOperator, operand, isLeftSideOfBinary, leftOperand)
@@ -20675,7 +21129,7 @@
             return ts.isCommaSequence(expression) ? factory.createParenthesizedExpression(expression) : expression;
         }
         function parenthesizeConditionOfConditionalExpression(condition) {
-            var conditionalPrecedence = ts.getOperatorPrecedence(218 /* ConditionalExpression */, 57 /* QuestionToken */);
+            var conditionalPrecedence = ts.getOperatorPrecedence(220 /* ConditionalExpression */, 57 /* QuestionToken */);
             var emittedCondition = ts.skipPartiallyEmittedExpressions(condition);
             var conditionPrecedence = ts.getExpressionPrecedence(emittedCondition);
             if (ts.compareValues(conditionPrecedence, conditionalPrecedence) !== 1 /* GreaterThan */) {
@@ -20708,8 +21162,8 @@
             var needsParens = ts.isCommaSequence(check);
             if (!needsParens) {
                 switch (ts.getLeftmostExpression(check, /*stopAtCallExpression*/ false).kind) {
-                    case 222 /* ClassExpression */:
-                    case 209 /* FunctionExpression */:
+                    case 224 /* ClassExpression */:
+                    case 211 /* FunctionExpression */:
                         needsParens = true;
                 }
             }
@@ -20722,9 +21176,9 @@
         function parenthesizeExpressionOfNew(expression) {
             var leftmostExpr = ts.getLeftmostExpression(expression, /*stopAtCallExpressions*/ true);
             switch (leftmostExpr.kind) {
-                case 204 /* CallExpression */:
+                case 206 /* CallExpression */:
                     return factory.createParenthesizedExpression(expression);
-                case 205 /* NewExpression */:
+                case 207 /* NewExpression */:
                     return !leftmostExpr.arguments
                         ? factory.createParenthesizedExpression(expression)
                         : expression; // TODO(rbuckton): Verify this assertion holds
@@ -20744,7 +21198,7 @@
             //
             var emittedExpression = ts.skipPartiallyEmittedExpressions(expression);
             if (ts.isLeftHandSideExpression(emittedExpression)
-                && (emittedExpression.kind !== 205 /* NewExpression */ || emittedExpression.arguments)) {
+                && (emittedExpression.kind !== 207 /* NewExpression */ || emittedExpression.arguments)) {
                 // TODO(rbuckton): Verify whether this assertion holds.
                 return expression;
             }
@@ -20766,7 +21220,7 @@
         function parenthesizeExpressionForDisallowedComma(expression) {
             var emittedExpression = ts.skipPartiallyEmittedExpressions(expression);
             var expressionPrecedence = ts.getExpressionPrecedence(emittedExpression);
-            var commaPrecedence = ts.getOperatorPrecedence(217 /* BinaryExpression */, 27 /* CommaToken */);
+            var commaPrecedence = ts.getOperatorPrecedence(219 /* BinaryExpression */, 27 /* CommaToken */);
             // TODO(rbuckton): Verifiy whether `setTextRange` is needed.
             return expressionPrecedence > commaPrecedence ? expression : ts.setTextRange(factory.createParenthesizedExpression(expression), expression);
         }
@@ -20775,44 +21229,44 @@
             if (ts.isCallExpression(emittedExpression)) {
                 var callee = emittedExpression.expression;
                 var kind = ts.skipPartiallyEmittedExpressions(callee).kind;
-                if (kind === 209 /* FunctionExpression */ || kind === 210 /* ArrowFunction */) {
+                if (kind === 211 /* FunctionExpression */ || kind === 212 /* ArrowFunction */) {
                     // TODO(rbuckton): Verifiy whether `setTextRange` is needed.
                     var updated = factory.updateCallExpression(emittedExpression, ts.setTextRange(factory.createParenthesizedExpression(callee), callee), emittedExpression.typeArguments, emittedExpression.arguments);
                     return factory.restoreOuterExpressions(expression, updated, 8 /* PartiallyEmittedExpressions */);
                 }
             }
             var leftmostExpressionKind = ts.getLeftmostExpression(emittedExpression, /*stopAtCallExpressions*/ false).kind;
-            if (leftmostExpressionKind === 201 /* ObjectLiteralExpression */ || leftmostExpressionKind === 209 /* FunctionExpression */) {
+            if (leftmostExpressionKind === 203 /* ObjectLiteralExpression */ || leftmostExpressionKind === 211 /* FunctionExpression */) {
                 // TODO(rbuckton): Verifiy whether `setTextRange` is needed.
                 return ts.setTextRange(factory.createParenthesizedExpression(expression), expression);
             }
             return expression;
         }
         function parenthesizeConciseBodyOfArrowFunction(body) {
-            if (!ts.isBlock(body) && (ts.isCommaSequence(body) || ts.getLeftmostExpression(body, /*stopAtCallExpressions*/ false).kind === 201 /* ObjectLiteralExpression */)) {
+            if (!ts.isBlock(body) && (ts.isCommaSequence(body) || ts.getLeftmostExpression(body, /*stopAtCallExpressions*/ false).kind === 203 /* ObjectLiteralExpression */)) {
                 // TODO(rbuckton): Verifiy whether `setTextRange` is needed.
                 return ts.setTextRange(factory.createParenthesizedExpression(body), body);
             }
             return body;
         }
         function parenthesizeMemberOfConditionalType(member) {
-            return member.kind === 185 /* ConditionalType */ ? factory.createParenthesizedType(member) : member;
+            return member.kind === 187 /* ConditionalType */ ? factory.createParenthesizedType(member) : member;
         }
         function parenthesizeMemberOfElementType(member) {
             switch (member.kind) {
-                case 183 /* UnionType */:
-                case 184 /* IntersectionType */:
-                case 175 /* FunctionType */:
-                case 176 /* ConstructorType */:
+                case 185 /* UnionType */:
+                case 186 /* IntersectionType */:
+                case 177 /* FunctionType */:
+                case 178 /* ConstructorType */:
                     return factory.createParenthesizedType(member);
             }
             return parenthesizeMemberOfConditionalType(member);
         }
         function parenthesizeElementTypeOfArrayType(member) {
             switch (member.kind) {
-                case 177 /* TypeQuery */:
-                case 189 /* TypeOperator */:
-                case 186 /* InferType */:
+                case 179 /* TypeQuery */:
+                case 191 /* TypeOperator */:
+                case 188 /* InferType */:
                     return factory.createParenthesizedType(member);
             }
             return parenthesizeMemberOfElementType(member);
@@ -20918,11 +21372,11 @@
         }
         function convertToAssignmentPattern(node) {
             switch (node.kind) {
-                case 198 /* ArrayBindingPattern */:
-                case 200 /* ArrayLiteralExpression */:
+                case 200 /* ArrayBindingPattern */:
+                case 202 /* ArrayLiteralExpression */:
                     return convertToArrayAssignmentPattern(node);
-                case 197 /* ObjectBindingPattern */:
-                case 201 /* ObjectLiteralExpression */:
+                case 199 /* ObjectBindingPattern */:
+                case 203 /* ObjectLiteralExpression */:
                     return convertToObjectAssignmentPattern(node);
             }
         }
@@ -21050,6 +21504,8 @@
             updateConstructSignature: updateConstructSignature,
             createIndexSignature: createIndexSignature,
             updateIndexSignature: updateIndexSignature,
+            createClassStaticBlockDeclaration: createClassStaticBlockDeclaration,
+            updateClassStaticBlockDeclaration: updateClassStaticBlockDeclaration,
             createTemplateLiteralTypeSpan: createTemplateLiteralTypeSpan,
             updateTemplateLiteralTypeSpan: updateTemplateLiteralTypeSpan,
             createKeywordTypeNode: createKeywordTypeNode,
@@ -21263,18 +21719,18 @@
             createExternalModuleReference: createExternalModuleReference,
             updateExternalModuleReference: updateExternalModuleReference,
             // lazily load factory members for JSDoc types with similar structure
-            get createJSDocAllType() { return getJSDocPrimaryTypeCreateFunction(304 /* JSDocAllType */); },
-            get createJSDocUnknownType() { return getJSDocPrimaryTypeCreateFunction(305 /* JSDocUnknownType */); },
-            get createJSDocNonNullableType() { return getJSDocUnaryTypeCreateFunction(307 /* JSDocNonNullableType */); },
-            get updateJSDocNonNullableType() { return getJSDocUnaryTypeUpdateFunction(307 /* JSDocNonNullableType */); },
-            get createJSDocNullableType() { return getJSDocUnaryTypeCreateFunction(306 /* JSDocNullableType */); },
-            get updateJSDocNullableType() { return getJSDocUnaryTypeUpdateFunction(306 /* JSDocNullableType */); },
-            get createJSDocOptionalType() { return getJSDocUnaryTypeCreateFunction(308 /* JSDocOptionalType */); },
-            get updateJSDocOptionalType() { return getJSDocUnaryTypeUpdateFunction(308 /* JSDocOptionalType */); },
-            get createJSDocVariadicType() { return getJSDocUnaryTypeCreateFunction(310 /* JSDocVariadicType */); },
-            get updateJSDocVariadicType() { return getJSDocUnaryTypeUpdateFunction(310 /* JSDocVariadicType */); },
-            get createJSDocNamepathType() { return getJSDocUnaryTypeCreateFunction(311 /* JSDocNamepathType */); },
-            get updateJSDocNamepathType() { return getJSDocUnaryTypeUpdateFunction(311 /* JSDocNamepathType */); },
+            get createJSDocAllType() { return getJSDocPrimaryTypeCreateFunction(307 /* JSDocAllType */); },
+            get createJSDocUnknownType() { return getJSDocPrimaryTypeCreateFunction(308 /* JSDocUnknownType */); },
+            get createJSDocNonNullableType() { return getJSDocUnaryTypeCreateFunction(310 /* JSDocNonNullableType */); },
+            get updateJSDocNonNullableType() { return getJSDocUnaryTypeUpdateFunction(310 /* JSDocNonNullableType */); },
+            get createJSDocNullableType() { return getJSDocUnaryTypeCreateFunction(309 /* JSDocNullableType */); },
+            get updateJSDocNullableType() { return getJSDocUnaryTypeUpdateFunction(309 /* JSDocNullableType */); },
+            get createJSDocOptionalType() { return getJSDocUnaryTypeCreateFunction(311 /* JSDocOptionalType */); },
+            get updateJSDocOptionalType() { return getJSDocUnaryTypeUpdateFunction(311 /* JSDocOptionalType */); },
+            get createJSDocVariadicType() { return getJSDocUnaryTypeCreateFunction(313 /* JSDocVariadicType */); },
+            get updateJSDocVariadicType() { return getJSDocUnaryTypeUpdateFunction(313 /* JSDocVariadicType */); },
+            get createJSDocNamepathType() { return getJSDocUnaryTypeCreateFunction(314 /* JSDocNamepathType */); },
+            get updateJSDocNamepathType() { return getJSDocUnaryTypeUpdateFunction(314 /* JSDocNamepathType */); },
             createJSDocFunctionType: createJSDocFunctionType,
             updateJSDocFunctionType: updateJSDocFunctionType,
             createJSDocTypeLiteral: createJSDocTypeLiteral,
@@ -21301,33 +21757,39 @@
             updateJSDocSeeTag: updateJSDocSeeTag,
             createJSDocNameReference: createJSDocNameReference,
             updateJSDocNameReference: updateJSDocNameReference,
+            createJSDocMemberName: createJSDocMemberName,
+            updateJSDocMemberName: updateJSDocMemberName,
             createJSDocLink: createJSDocLink,
             updateJSDocLink: updateJSDocLink,
+            createJSDocLinkCode: createJSDocLinkCode,
+            updateJSDocLinkCode: updateJSDocLinkCode,
+            createJSDocLinkPlain: createJSDocLinkPlain,
+            updateJSDocLinkPlain: updateJSDocLinkPlain,
             // lazily load factory members for JSDoc tags with similar structure
-            get createJSDocTypeTag() { return getJSDocTypeLikeTagCreateFunction(333 /* JSDocTypeTag */); },
-            get updateJSDocTypeTag() { return getJSDocTypeLikeTagUpdateFunction(333 /* JSDocTypeTag */); },
-            get createJSDocReturnTag() { return getJSDocTypeLikeTagCreateFunction(331 /* JSDocReturnTag */); },
-            get updateJSDocReturnTag() { return getJSDocTypeLikeTagUpdateFunction(331 /* JSDocReturnTag */); },
-            get createJSDocThisTag() { return getJSDocTypeLikeTagCreateFunction(332 /* JSDocThisTag */); },
-            get updateJSDocThisTag() { return getJSDocTypeLikeTagUpdateFunction(332 /* JSDocThisTag */); },
-            get createJSDocEnumTag() { return getJSDocTypeLikeTagCreateFunction(329 /* JSDocEnumTag */); },
-            get updateJSDocEnumTag() { return getJSDocTypeLikeTagUpdateFunction(329 /* JSDocEnumTag */); },
-            get createJSDocAuthorTag() { return getJSDocSimpleTagCreateFunction(320 /* JSDocAuthorTag */); },
-            get updateJSDocAuthorTag() { return getJSDocSimpleTagUpdateFunction(320 /* JSDocAuthorTag */); },
-            get createJSDocClassTag() { return getJSDocSimpleTagCreateFunction(322 /* JSDocClassTag */); },
-            get updateJSDocClassTag() { return getJSDocSimpleTagUpdateFunction(322 /* JSDocClassTag */); },
-            get createJSDocPublicTag() { return getJSDocSimpleTagCreateFunction(323 /* JSDocPublicTag */); },
-            get updateJSDocPublicTag() { return getJSDocSimpleTagUpdateFunction(323 /* JSDocPublicTag */); },
-            get createJSDocPrivateTag() { return getJSDocSimpleTagCreateFunction(324 /* JSDocPrivateTag */); },
-            get updateJSDocPrivateTag() { return getJSDocSimpleTagUpdateFunction(324 /* JSDocPrivateTag */); },
-            get createJSDocProtectedTag() { return getJSDocSimpleTagCreateFunction(325 /* JSDocProtectedTag */); },
-            get updateJSDocProtectedTag() { return getJSDocSimpleTagUpdateFunction(325 /* JSDocProtectedTag */); },
-            get createJSDocReadonlyTag() { return getJSDocSimpleTagCreateFunction(326 /* JSDocReadonlyTag */); },
-            get updateJSDocReadonlyTag() { return getJSDocSimpleTagUpdateFunction(326 /* JSDocReadonlyTag */); },
-            get createJSDocOverrideTag() { return getJSDocSimpleTagCreateFunction(327 /* JSDocOverrideTag */); },
-            get updateJSDocOverrideTag() { return getJSDocSimpleTagUpdateFunction(327 /* JSDocOverrideTag */); },
-            get createJSDocDeprecatedTag() { return getJSDocSimpleTagCreateFunction(321 /* JSDocDeprecatedTag */); },
-            get updateJSDocDeprecatedTag() { return getJSDocSimpleTagUpdateFunction(321 /* JSDocDeprecatedTag */); },
+            get createJSDocTypeTag() { return getJSDocTypeLikeTagCreateFunction(338 /* JSDocTypeTag */); },
+            get updateJSDocTypeTag() { return getJSDocTypeLikeTagUpdateFunction(338 /* JSDocTypeTag */); },
+            get createJSDocReturnTag() { return getJSDocTypeLikeTagCreateFunction(336 /* JSDocReturnTag */); },
+            get updateJSDocReturnTag() { return getJSDocTypeLikeTagUpdateFunction(336 /* JSDocReturnTag */); },
+            get createJSDocThisTag() { return getJSDocTypeLikeTagCreateFunction(337 /* JSDocThisTag */); },
+            get updateJSDocThisTag() { return getJSDocTypeLikeTagUpdateFunction(337 /* JSDocThisTag */); },
+            get createJSDocEnumTag() { return getJSDocTypeLikeTagCreateFunction(334 /* JSDocEnumTag */); },
+            get updateJSDocEnumTag() { return getJSDocTypeLikeTagUpdateFunction(334 /* JSDocEnumTag */); },
+            get createJSDocAuthorTag() { return getJSDocSimpleTagCreateFunction(325 /* JSDocAuthorTag */); },
+            get updateJSDocAuthorTag() { return getJSDocSimpleTagUpdateFunction(325 /* JSDocAuthorTag */); },
+            get createJSDocClassTag() { return getJSDocSimpleTagCreateFunction(327 /* JSDocClassTag */); },
+            get updateJSDocClassTag() { return getJSDocSimpleTagUpdateFunction(327 /* JSDocClassTag */); },
+            get createJSDocPublicTag() { return getJSDocSimpleTagCreateFunction(328 /* JSDocPublicTag */); },
+            get updateJSDocPublicTag() { return getJSDocSimpleTagUpdateFunction(328 /* JSDocPublicTag */); },
+            get createJSDocPrivateTag() { return getJSDocSimpleTagCreateFunction(329 /* JSDocPrivateTag */); },
+            get updateJSDocPrivateTag() { return getJSDocSimpleTagUpdateFunction(329 /* JSDocPrivateTag */); },
+            get createJSDocProtectedTag() { return getJSDocSimpleTagCreateFunction(330 /* JSDocProtectedTag */); },
+            get updateJSDocProtectedTag() { return getJSDocSimpleTagUpdateFunction(330 /* JSDocProtectedTag */); },
+            get createJSDocReadonlyTag() { return getJSDocSimpleTagCreateFunction(331 /* JSDocReadonlyTag */); },
+            get updateJSDocReadonlyTag() { return getJSDocSimpleTagUpdateFunction(331 /* JSDocReadonlyTag */); },
+            get createJSDocOverrideTag() { return getJSDocSimpleTagCreateFunction(332 /* JSDocOverrideTag */); },
+            get updateJSDocOverrideTag() { return getJSDocSimpleTagUpdateFunction(332 /* JSDocOverrideTag */); },
+            get createJSDocDeprecatedTag() { return getJSDocSimpleTagCreateFunction(326 /* JSDocDeprecatedTag */); },
+            get updateJSDocDeprecatedTag() { return getJSDocSimpleTagUpdateFunction(326 /* JSDocDeprecatedTag */); },
             createJSDocUnknownTag: createJSDocUnknownTag,
             updateJSDocUnknownTag: updateJSDocUnknownTag,
             createJSDocText: createJSDocText,
@@ -21396,7 +21858,7 @@
             cloneNode: cloneNode,
             // Lazily load factory methods for common operator factories and utilities
             get createComma() { return getBinaryCreateFunction(27 /* CommaToken */); },
-            get createAssignment() { return getBinaryCreateFunction(62 /* EqualsToken */); },
+            get createAssignment() { return getBinaryCreateFunction(63 /* EqualsToken */); },
             get createLogicalOr() { return getBinaryCreateFunction(56 /* BarBarToken */); },
             get createLogicalAnd() { return getBinaryCreateFunction(55 /* AmpersandAmpersandToken */); },
             get createBitwiseOr() { return getBinaryCreateFunction(51 /* BarToken */); },
@@ -21442,8 +21904,11 @@
             createArraySliceCall: createArraySliceCall,
             createArrayConcatCall: createArrayConcatCall,
             createObjectDefinePropertyCall: createObjectDefinePropertyCall,
+            createReflectGetCall: createReflectGetCall,
+            createReflectSetCall: createReflectSetCall,
             createPropertyDescriptor: createPropertyDescriptor,
             createCallBinding: createCallBinding,
+            createAssignmentTargetWrapper: createAssignmentTargetWrapper,
             // Utilities
             inlineExpressions: inlineExpressions,
             getInternalName: getInternalName,
@@ -21470,12 +21935,24 @@
                 elements = [];
             }
             else if (ts.isNodeArray(elements)) {
-                // Ensure the transform flags have been aggregated for this NodeArray
-                if (elements.transformFlags === undefined) {
-                    aggregateChildrenFlags(elements);
+                if (hasTrailingComma === undefined || elements.hasTrailingComma === hasTrailingComma) {
+                    // Ensure the transform flags have been aggregated for this NodeArray
+                    if (elements.transformFlags === undefined) {
+                        aggregateChildrenFlags(elements);
+                    }
+                    ts.Debug.attachNodeArrayDebugInfo(elements);
+                    return elements;
                 }
-                ts.Debug.attachNodeArrayDebugInfo(elements);
-                return elements;
+                // This *was* a `NodeArray`, but the `hasTrailingComma` option differs. Recreate the
+                // array with the same elements, text range, and transform flags but with the updated
+                // value for `hasTrailingComma`
+                var array_8 = elements.slice();
+                array_8.pos = elements.pos;
+                array_8.end = elements.end;
+                array_8.hasTrailingComma = hasTrailingComma;
+                array_8.transformFlags = elements.transformFlags;
+                ts.Debug.attachNodeArrayDebugInfo(array_8);
+                return array_8;
             }
             // Since the element list of a node array is typically created by starting with an empty array and
             // repeatedly calling push(), the list may not have the optimal memory layout. We invoke slice() for
@@ -21515,11 +21992,11 @@
             // don't propagate child flags.
             if (name) {
                 switch (node.kind) {
-                    case 166 /* MethodDeclaration */:
-                    case 168 /* GetAccessor */:
-                    case 169 /* SetAccessor */:
-                    case 164 /* PropertyDeclaration */:
-                    case 289 /* PropertyAssignment */:
+                    case 167 /* MethodDeclaration */:
+                    case 170 /* GetAccessor */:
+                    case 171 /* SetAccessor */:
+                    case 165 /* PropertyDeclaration */:
+                    case 291 /* PropertyAssignment */:
                         if (ts.isIdentifier(name)) {
                             node.transformFlags |= propagateIdentifierNameFlags(name);
                             break;
@@ -21665,10 +22142,10 @@
             if (originalKeywordKind === undefined && text) {
                 originalKeywordKind = ts.stringToToken(text);
             }
-            if (originalKeywordKind === 78 /* Identifier */) {
+            if (originalKeywordKind === 79 /* Identifier */) {
                 originalKeywordKind = undefined;
             }
-            var node = baseFactory.createBaseIdentifierNode(78 /* Identifier */);
+            var node = baseFactory.createBaseIdentifierNode(79 /* Identifier */);
             node.originalKeywordKind = originalKeywordKind;
             node.escapedText = ts.escapeLeadingUnderscores(text);
             return node;
@@ -21687,7 +22164,7 @@
                 // NOTE: we do not use `setChildren` here because typeArguments in an identifier do not contribute to transformations
                 node.typeArguments = createNodeArray(typeArguments);
             }
-            if (node.originalKeywordKind === 130 /* AwaitKeyword */) {
+            if (node.originalKeywordKind === 131 /* AwaitKeyword */) {
                 node.transformFlags |= 16777216 /* ContainsPossibleTopLevelAwait */;
             }
             return node;
@@ -21738,7 +22215,7 @@
         function createPrivateIdentifier(text) {
             if (!ts.startsWith(text, "#"))
                 ts.Debug.fail("First character of private identifier must be #: " + text);
-            var node = baseFactory.createBasePrivateIdentifierNode(79 /* PrivateIdentifier */);
+            var node = baseFactory.createBasePrivateIdentifierNode(80 /* PrivateIdentifier */);
             node.escapedText = ts.escapeLeadingUnderscores(text);
             node.transformFlags |= 8388608 /* ContainsClassFields */;
             return node;
@@ -21750,45 +22227,47 @@
             return baseFactory.createBaseTokenNode(kind);
         }
         function createToken(token) {
-            ts.Debug.assert(token >= 0 /* FirstToken */ && token <= 157 /* LastToken */, "Invalid token");
+            ts.Debug.assert(token >= 0 /* FirstToken */ && token <= 158 /* LastToken */, "Invalid token");
             ts.Debug.assert(token <= 14 /* FirstTemplateToken */ || token >= 17 /* LastTemplateToken */, "Invalid token. Use 'createTemplateLiteralLikeNode' to create template literals.");
             ts.Debug.assert(token <= 8 /* FirstLiteralToken */ || token >= 14 /* LastLiteralToken */, "Invalid token. Use 'createLiteralLikeNode' to create literals.");
-            ts.Debug.assert(token !== 78 /* Identifier */, "Invalid token. Use 'createIdentifier' to create identifiers");
+            ts.Debug.assert(token !== 79 /* Identifier */, "Invalid token. Use 'createIdentifier' to create identifiers");
             var node = createBaseToken(token);
             var transformFlags = 0 /* None */;
             switch (token) {
-                case 129 /* AsyncKeyword */:
+                case 130 /* AsyncKeyword */:
                     // 'async' modifier is ES2017 (async functions) or ES2018 (async generators)
                     transformFlags =
                         128 /* ContainsES2017 */ |
                             64 /* ContainsES2018 */;
                     break;
-                case 122 /* PublicKeyword */:
-                case 120 /* PrivateKeyword */:
-                case 121 /* ProtectedKeyword */:
-                case 142 /* ReadonlyKeyword */:
-                case 125 /* AbstractKeyword */:
-                case 133 /* DeclareKeyword */:
-                case 84 /* ConstKeyword */:
-                case 128 /* AnyKeyword */:
-                case 144 /* NumberKeyword */:
-                case 155 /* BigIntKeyword */:
-                case 141 /* NeverKeyword */:
-                case 145 /* ObjectKeyword */:
-                case 156 /* OverrideKeyword */:
-                case 147 /* StringKeyword */:
-                case 131 /* BooleanKeyword */:
-                case 148 /* SymbolKeyword */:
-                case 113 /* VoidKeyword */:
-                case 152 /* UnknownKeyword */:
-                case 150 /* UndefinedKeyword */: // `undefined` is an Identifier in the expression case.
+                case 123 /* PublicKeyword */:
+                case 121 /* PrivateKeyword */:
+                case 122 /* ProtectedKeyword */:
+                case 143 /* ReadonlyKeyword */:
+                case 126 /* AbstractKeyword */:
+                case 134 /* DeclareKeyword */:
+                case 85 /* ConstKeyword */:
+                case 129 /* AnyKeyword */:
+                case 145 /* NumberKeyword */:
+                case 156 /* BigIntKeyword */:
+                case 142 /* NeverKeyword */:
+                case 146 /* ObjectKeyword */:
+                case 157 /* OverrideKeyword */:
+                case 148 /* StringKeyword */:
+                case 132 /* BooleanKeyword */:
+                case 149 /* SymbolKeyword */:
+                case 114 /* VoidKeyword */:
+                case 153 /* UnknownKeyword */:
+                case 151 /* UndefinedKeyword */: // `undefined` is an Identifier in the expression case.
                     transformFlags = 1 /* ContainsTypeScript */;
                     break;
-                case 123 /* StaticKeyword */:
-                case 105 /* SuperKeyword */:
+                case 106 /* SuperKeyword */:
+                    transformFlags = 512 /* ContainsES2015 */ | 33554432 /* ContainsLexicalSuper */;
+                    break;
+                case 124 /* StaticKeyword */:
                     transformFlags = 512 /* ContainsES2015 */;
                     break;
-                case 107 /* ThisKeyword */:
+                case 108 /* ThisKeyword */:
                     // 'this' indicates a lexical 'this'
                     transformFlags = 8192 /* ContainsLexicalThis */;
                     break;
@@ -21803,23 +22282,23 @@
         //
         // @api
         function createSuper() {
-            return createToken(105 /* SuperKeyword */);
+            return createToken(106 /* SuperKeyword */);
         }
         // @api
         function createThis() {
-            return createToken(107 /* ThisKeyword */);
+            return createToken(108 /* ThisKeyword */);
         }
         // @api
         function createNull() {
-            return createToken(103 /* NullKeyword */);
+            return createToken(104 /* NullKeyword */);
         }
         // @api
         function createTrue() {
-            return createToken(109 /* TrueKeyword */);
+            return createToken(110 /* TrueKeyword */);
         }
         // @api
         function createFalse() {
-            return createToken(94 /* FalseKeyword */);
+            return createToken(95 /* FalseKeyword */);
         }
         //
         // Modifiers
@@ -21832,40 +22311,40 @@
         function createModifiersFromModifierFlags(flags) {
             var result = [];
             if (flags & 1 /* Export */) {
-                result.push(createModifier(92 /* ExportKeyword */));
+                result.push(createModifier(93 /* ExportKeyword */));
             }
             if (flags & 2 /* Ambient */) {
-                result.push(createModifier(133 /* DeclareKeyword */));
+                result.push(createModifier(134 /* DeclareKeyword */));
             }
             if (flags & 512 /* Default */) {
-                result.push(createModifier(87 /* DefaultKeyword */));
+                result.push(createModifier(88 /* DefaultKeyword */));
             }
             if (flags & 2048 /* Const */) {
-                result.push(createModifier(84 /* ConstKeyword */));
+                result.push(createModifier(85 /* ConstKeyword */));
             }
             if (flags & 4 /* Public */) {
-                result.push(createModifier(122 /* PublicKeyword */));
+                result.push(createModifier(123 /* PublicKeyword */));
             }
             if (flags & 8 /* Private */) {
-                result.push(createModifier(120 /* PrivateKeyword */));
+                result.push(createModifier(121 /* PrivateKeyword */));
             }
             if (flags & 16 /* Protected */) {
-                result.push(createModifier(121 /* ProtectedKeyword */));
+                result.push(createModifier(122 /* ProtectedKeyword */));
             }
             if (flags & 128 /* Abstract */) {
-                result.push(createModifier(125 /* AbstractKeyword */));
+                result.push(createModifier(126 /* AbstractKeyword */));
             }
             if (flags & 32 /* Static */) {
-                result.push(createModifier(123 /* StaticKeyword */));
+                result.push(createModifier(124 /* StaticKeyword */));
             }
             if (flags & 16384 /* Override */) {
-                result.push(createModifier(156 /* OverrideKeyword */));
+                result.push(createModifier(157 /* OverrideKeyword */));
             }
             if (flags & 64 /* Readonly */) {
-                result.push(createModifier(142 /* ReadonlyKeyword */));
+                result.push(createModifier(143 /* ReadonlyKeyword */));
             }
             if (flags & 256 /* Async */) {
-                result.push(createModifier(129 /* AsyncKeyword */));
+                result.push(createModifier(130 /* AsyncKeyword */));
             }
             return result;
         }
@@ -21874,7 +22353,7 @@
         //
         // @api
         function createQualifiedName(left, right) {
-            var node = createBaseNode(158 /* QualifiedName */);
+            var node = createBaseNode(159 /* QualifiedName */);
             node.left = left;
             node.right = asName(right);
             node.transformFlags |=
@@ -21891,7 +22370,7 @@
         }
         // @api
         function createComputedPropertyName(expression) {
-            var node = createBaseNode(159 /* ComputedPropertyName */);
+            var node = createBaseNode(160 /* ComputedPropertyName */);
             node.expression = parenthesizerRules().parenthesizeExpressionOfComputedPropertyName(expression);
             node.transformFlags |=
                 propagateChildFlags(node.expression) |
@@ -21910,7 +22389,7 @@
         //
         // @api
         function createTypeParameterDeclaration(name, constraint, defaultType) {
-            var node = createBaseNamedDeclaration(160 /* TypeParameter */, 
+            var node = createBaseNamedDeclaration(161 /* TypeParameter */, 
             /*decorators*/ undefined, 
             /*modifiers*/ undefined, name);
             node.constraint = constraint;
@@ -21928,7 +22407,7 @@
         }
         // @api
         function createParameterDeclaration(decorators, modifiers, dotDotDotToken, name, questionToken, type, initializer) {
-            var node = createBaseVariableLikeDeclaration(161 /* Parameter */, decorators, modifiers, name, type, initializer && parenthesizerRules().parenthesizeExpressionForDisallowedComma(initializer));
+            var node = createBaseVariableLikeDeclaration(162 /* Parameter */, decorators, modifiers, name, type, initializer && parenthesizerRules().parenthesizeExpressionForDisallowedComma(initializer));
             node.dotDotDotToken = dotDotDotToken;
             node.questionToken = questionToken;
             if (ts.isThisIdentifier(node.name)) {
@@ -21961,7 +22440,7 @@
         }
         // @api
         function createDecorator(expression) {
-            var node = createBaseNode(162 /* Decorator */);
+            var node = createBaseNode(163 /* Decorator */);
             node.expression = parenthesizerRules().parenthesizeLeftSideOfAccess(expression);
             node.transformFlags |=
                 propagateChildFlags(node.expression) |
@@ -21980,7 +22459,7 @@
         //
         // @api
         function createPropertySignature(modifiers, name, questionToken, type) {
-            var node = createBaseNamedDeclaration(163 /* PropertySignature */, 
+            var node = createBaseNamedDeclaration(164 /* PropertySignature */, 
             /*decorators*/ undefined, modifiers, name);
             node.type = type;
             node.questionToken = questionToken;
@@ -21998,7 +22477,7 @@
         }
         // @api
         function createPropertyDeclaration(decorators, modifiers, name, questionOrExclamationToken, type, initializer) {
-            var node = createBaseVariableLikeDeclaration(164 /* PropertyDeclaration */, decorators, modifiers, name, type, initializer);
+            var node = createBaseVariableLikeDeclaration(165 /* PropertyDeclaration */, decorators, modifiers, name, type, initializer);
             node.questionToken = questionOrExclamationToken && ts.isQuestionToken(questionOrExclamationToken) ? questionOrExclamationToken : undefined;
             node.exclamationToken = questionOrExclamationToken && ts.isExclamationToken(questionOrExclamationToken) ? questionOrExclamationToken : undefined;
             node.transformFlags |=
@@ -22027,7 +22506,7 @@
         }
         // @api
         function createMethodSignature(modifiers, name, questionToken, typeParameters, parameters, type) {
-            var node = createBaseSignatureDeclaration(165 /* MethodSignature */, 
+            var node = createBaseSignatureDeclaration(166 /* MethodSignature */, 
             /*decorators*/ undefined, modifiers, name, typeParameters, parameters, type);
             node.questionToken = questionToken;
             node.transformFlags = 1 /* ContainsTypeScript */;
@@ -22046,7 +22525,7 @@
         }
         // @api
         function createMethodDeclaration(decorators, modifiers, asteriskToken, name, questionToken, typeParameters, parameters, type, body) {
-            var node = createBaseFunctionLikeDeclaration(166 /* MethodDeclaration */, decorators, modifiers, name, typeParameters, parameters, type, body);
+            var node = createBaseFunctionLikeDeclaration(167 /* MethodDeclaration */, decorators, modifiers, name, typeParameters, parameters, type, body);
             node.asteriskToken = asteriskToken;
             node.questionToken = questionToken;
             node.transformFlags |=
@@ -22084,8 +22563,25 @@
                 : node;
         }
         // @api
+        function createClassStaticBlockDeclaration(decorators, modifiers, body) {
+            var node = createBaseGenericNamedDeclaration(168 /* ClassStaticBlockDeclaration */, decorators, modifiers, 
+            /*name*/ undefined, 
+            /*typeParameters*/ undefined);
+            node.body = body;
+            node.transformFlags = propagateChildFlags(body) | 8388608 /* ContainsClassFields */;
+            return node;
+        }
+        // @api
+        function updateClassStaticBlockDeclaration(node, decorators, modifiers, body) {
+            return node.decorators !== decorators
+                || node.modifier !== modifiers
+                || node.body !== body
+                ? update(createClassStaticBlockDeclaration(decorators, modifiers, body), node)
+                : node;
+        }
+        // @api
         function createConstructorDeclaration(decorators, modifiers, parameters, body) {
-            var node = createBaseFunctionLikeDeclaration(167 /* Constructor */, decorators, modifiers, 
+            var node = createBaseFunctionLikeDeclaration(169 /* Constructor */, decorators, modifiers, 
             /*name*/ undefined, 
             /*typeParameters*/ undefined, parameters, 
             /*type*/ undefined, body);
@@ -22103,7 +22599,7 @@
         }
         // @api
         function createGetAccessorDeclaration(decorators, modifiers, name, parameters, type, body) {
-            return createBaseFunctionLikeDeclaration(168 /* GetAccessor */, decorators, modifiers, name, 
+            return createBaseFunctionLikeDeclaration(170 /* GetAccessor */, decorators, modifiers, name, 
             /*typeParameters*/ undefined, parameters, type, body);
         }
         // @api
@@ -22119,7 +22615,7 @@
         }
         // @api
         function createSetAccessorDeclaration(decorators, modifiers, name, parameters, body) {
-            return createBaseFunctionLikeDeclaration(169 /* SetAccessor */, decorators, modifiers, name, 
+            return createBaseFunctionLikeDeclaration(171 /* SetAccessor */, decorators, modifiers, name, 
             /*typeParameters*/ undefined, parameters, 
             /*type*/ undefined, body);
         }
@@ -22135,7 +22631,7 @@
         }
         // @api
         function createCallSignature(typeParameters, parameters, type) {
-            var node = createBaseSignatureDeclaration(170 /* CallSignature */, 
+            var node = createBaseSignatureDeclaration(172 /* CallSignature */, 
             /*decorators*/ undefined, 
             /*modifiers*/ undefined, 
             /*name*/ undefined, typeParameters, parameters, type);
@@ -22152,7 +22648,7 @@
         }
         // @api
         function createConstructSignature(typeParameters, parameters, type) {
-            var node = createBaseSignatureDeclaration(171 /* ConstructSignature */, 
+            var node = createBaseSignatureDeclaration(173 /* ConstructSignature */, 
             /*decorators*/ undefined, 
             /*modifiers*/ undefined, 
             /*name*/ undefined, typeParameters, parameters, type);
@@ -22169,7 +22665,7 @@
         }
         // @api
         function createIndexSignature(decorators, modifiers, parameters, type) {
-            var node = createBaseSignatureDeclaration(172 /* IndexSignature */, decorators, modifiers, 
+            var node = createBaseSignatureDeclaration(174 /* IndexSignature */, decorators, modifiers, 
             /*name*/ undefined, 
             /*typeParameters*/ undefined, parameters, type);
             node.transformFlags = 1 /* ContainsTypeScript */;
@@ -22186,7 +22682,7 @@
         }
         // @api
         function createTemplateLiteralTypeSpan(type, literal) {
-            var node = createBaseNode(195 /* TemplateLiteralTypeSpan */);
+            var node = createBaseNode(197 /* TemplateLiteralTypeSpan */);
             node.type = type;
             node.literal = literal;
             node.transformFlags = 1 /* ContainsTypeScript */;
@@ -22208,7 +22704,7 @@
         }
         // @api
         function createTypePredicateNode(assertsModifier, parameterName, type) {
-            var node = createBaseNode(173 /* TypePredicate */);
+            var node = createBaseNode(175 /* TypePredicate */);
             node.assertsModifier = assertsModifier;
             node.parameterName = asName(parameterName);
             node.type = type;
@@ -22225,7 +22721,7 @@
         }
         // @api
         function createTypeReferenceNode(typeName, typeArguments) {
-            var node = createBaseNode(174 /* TypeReference */);
+            var node = createBaseNode(176 /* TypeReference */);
             node.typeName = asName(typeName);
             node.typeArguments = typeArguments && parenthesizerRules().parenthesizeTypeArguments(createNodeArray(typeArguments));
             node.transformFlags = 1 /* ContainsTypeScript */;
@@ -22240,7 +22736,7 @@
         }
         // @api
         function createFunctionTypeNode(typeParameters, parameters, type) {
-            var node = createBaseSignatureDeclaration(175 /* FunctionType */, 
+            var node = createBaseSignatureDeclaration(177 /* FunctionType */, 
             /*decorators*/ undefined, 
             /*modifiers*/ undefined, 
             /*name*/ undefined, typeParameters, parameters, type);
@@ -22266,7 +22762,7 @@
                     ts.Debug.fail("Incorrect number of arguments specified.");
         }
         function createConstructorTypeNode1(modifiers, typeParameters, parameters, type) {
-            var node = createBaseSignatureDeclaration(176 /* ConstructorType */, 
+            var node = createBaseSignatureDeclaration(178 /* ConstructorType */, 
             /*decorators*/ undefined, modifiers, 
             /*name*/ undefined, typeParameters, parameters, type);
             node.transformFlags = 1 /* ContainsTypeScript */;
@@ -22300,7 +22796,7 @@
         }
         // @api
         function createTypeQueryNode(exprName) {
-            var node = createBaseNode(177 /* TypeQuery */);
+            var node = createBaseNode(179 /* TypeQuery */);
             node.exprName = exprName;
             node.transformFlags = 1 /* ContainsTypeScript */;
             return node;
@@ -22313,7 +22809,7 @@
         }
         // @api
         function createTypeLiteralNode(members) {
-            var node = createBaseNode(178 /* TypeLiteral */);
+            var node = createBaseNode(180 /* TypeLiteral */);
             node.members = createNodeArray(members);
             node.transformFlags = 1 /* ContainsTypeScript */;
             return node;
@@ -22326,7 +22822,7 @@
         }
         // @api
         function createArrayTypeNode(elementType) {
-            var node = createBaseNode(179 /* ArrayType */);
+            var node = createBaseNode(181 /* ArrayType */);
             node.elementType = parenthesizerRules().parenthesizeElementTypeOfArrayType(elementType);
             node.transformFlags = 1 /* ContainsTypeScript */;
             return node;
@@ -22339,7 +22835,7 @@
         }
         // @api
         function createTupleTypeNode(elements) {
-            var node = createBaseNode(180 /* TupleType */);
+            var node = createBaseNode(182 /* TupleType */);
             node.elements = createNodeArray(elements);
             node.transformFlags = 1 /* ContainsTypeScript */;
             return node;
@@ -22352,7 +22848,7 @@
         }
         // @api
         function createNamedTupleMember(dotDotDotToken, name, questionToken, type) {
-            var node = createBaseNode(193 /* NamedTupleMember */);
+            var node = createBaseNode(195 /* NamedTupleMember */);
             node.dotDotDotToken = dotDotDotToken;
             node.name = name;
             node.questionToken = questionToken;
@@ -22371,7 +22867,7 @@
         }
         // @api
         function createOptionalTypeNode(type) {
-            var node = createBaseNode(181 /* OptionalType */);
+            var node = createBaseNode(183 /* OptionalType */);
             node.type = parenthesizerRules().parenthesizeElementTypeOfArrayType(type);
             node.transformFlags = 1 /* ContainsTypeScript */;
             return node;
@@ -22384,7 +22880,7 @@
         }
         // @api
         function createRestTypeNode(type) {
-            var node = createBaseNode(182 /* RestType */);
+            var node = createBaseNode(184 /* RestType */);
             node.type = type;
             node.transformFlags = 1 /* ContainsTypeScript */;
             return node;
@@ -22408,7 +22904,7 @@
         }
         // @api
         function createUnionTypeNode(types) {
-            return createUnionOrIntersectionTypeNode(183 /* UnionType */, types);
+            return createUnionOrIntersectionTypeNode(185 /* UnionType */, types);
         }
         // @api
         function updateUnionTypeNode(node, types) {
@@ -22416,7 +22912,7 @@
         }
         // @api
         function createIntersectionTypeNode(types) {
-            return createUnionOrIntersectionTypeNode(184 /* IntersectionType */, types);
+            return createUnionOrIntersectionTypeNode(186 /* IntersectionType */, types);
         }
         // @api
         function updateIntersectionTypeNode(node, types) {
@@ -22424,7 +22920,7 @@
         }
         // @api
         function createConditionalTypeNode(checkType, extendsType, trueType, falseType) {
-            var node = createBaseNode(185 /* ConditionalType */);
+            var node = createBaseNode(187 /* ConditionalType */);
             node.checkType = parenthesizerRules().parenthesizeMemberOfConditionalType(checkType);
             node.extendsType = parenthesizerRules().parenthesizeMemberOfConditionalType(extendsType);
             node.trueType = trueType;
@@ -22443,7 +22939,7 @@
         }
         // @api
         function createInferTypeNode(typeParameter) {
-            var node = createBaseNode(186 /* InferType */);
+            var node = createBaseNode(188 /* InferType */);
             node.typeParameter = typeParameter;
             node.transformFlags = 1 /* ContainsTypeScript */;
             return node;
@@ -22456,7 +22952,7 @@
         }
         // @api
         function createTemplateLiteralType(head, templateSpans) {
-            var node = createBaseNode(194 /* TemplateLiteralType */);
+            var node = createBaseNode(196 /* TemplateLiteralType */);
             node.head = head;
             node.templateSpans = createNodeArray(templateSpans);
             node.transformFlags = 1 /* ContainsTypeScript */;
@@ -22472,7 +22968,7 @@
         // @api
         function createImportTypeNode(argument, qualifier, typeArguments, isTypeOf) {
             if (isTypeOf === void 0) { isTypeOf = false; }
-            var node = createBaseNode(196 /* ImportType */);
+            var node = createBaseNode(198 /* ImportType */);
             node.argument = argument;
             node.qualifier = qualifier;
             node.typeArguments = typeArguments && parenthesizerRules().parenthesizeTypeArguments(typeArguments);
@@ -22492,7 +22988,7 @@
         }
         // @api
         function createParenthesizedType(type) {
-            var node = createBaseNode(187 /* ParenthesizedType */);
+            var node = createBaseNode(189 /* ParenthesizedType */);
             node.type = type;
             node.transformFlags = 1 /* ContainsTypeScript */;
             return node;
@@ -22505,13 +23001,13 @@
         }
         // @api
         function createThisTypeNode() {
-            var node = createBaseNode(188 /* ThisType */);
+            var node = createBaseNode(190 /* ThisType */);
             node.transformFlags = 1 /* ContainsTypeScript */;
             return node;
         }
         // @api
         function createTypeOperatorNode(operator, type) {
-            var node = createBaseNode(189 /* TypeOperator */);
+            var node = createBaseNode(191 /* TypeOperator */);
             node.operator = operator;
             node.type = parenthesizerRules().parenthesizeMemberOfElementType(type);
             node.transformFlags = 1 /* ContainsTypeScript */;
@@ -22525,7 +23021,7 @@
         }
         // @api
         function createIndexedAccessTypeNode(objectType, indexType) {
-            var node = createBaseNode(190 /* IndexedAccessType */);
+            var node = createBaseNode(192 /* IndexedAccessType */);
             node.objectType = parenthesizerRules().parenthesizeMemberOfElementType(objectType);
             node.indexType = indexType;
             node.transformFlags = 1 /* ContainsTypeScript */;
@@ -22540,7 +23036,7 @@
         }
         // @api
         function createMappedTypeNode(readonlyToken, typeParameter, nameType, questionToken, type) {
-            var node = createBaseNode(191 /* MappedType */);
+            var node = createBaseNode(193 /* MappedType */);
             node.readonlyToken = readonlyToken;
             node.typeParameter = typeParameter;
             node.nameType = nameType;
@@ -22561,7 +23057,7 @@
         }
         // @api
         function createLiteralTypeNode(literal) {
-            var node = createBaseNode(192 /* LiteralType */);
+            var node = createBaseNode(194 /* LiteralType */);
             node.literal = literal;
             node.transformFlags = 1 /* ContainsTypeScript */;
             return node;
@@ -22577,7 +23073,7 @@
         //
         // @api
         function createObjectBindingPattern(elements) {
-            var node = createBaseNode(197 /* ObjectBindingPattern */);
+            var node = createBaseNode(199 /* ObjectBindingPattern */);
             node.elements = createNodeArray(elements);
             node.transformFlags |=
                 propagateChildrenFlags(node.elements) |
@@ -22598,7 +23094,7 @@
         }
         // @api
         function createArrayBindingPattern(elements) {
-            var node = createBaseNode(198 /* ArrayBindingPattern */);
+            var node = createBaseNode(200 /* ArrayBindingPattern */);
             node.elements = createNodeArray(elements);
             node.transformFlags |=
                 propagateChildrenFlags(node.elements) |
@@ -22614,7 +23110,7 @@
         }
         // @api
         function createBindingElement(dotDotDotToken, propertyName, name, initializer) {
-            var node = createBaseBindingLikeDeclaration(199 /* BindingElement */, 
+            var node = createBaseBindingLikeDeclaration(201 /* BindingElement */, 
             /*decorators*/ undefined, 
             /*modifiers*/ undefined, name, initializer && parenthesizerRules().parenthesizeExpressionForDisallowedComma(initializer));
             node.propertyName = asName(propertyName);
@@ -22650,8 +23146,13 @@
         }
         // @api
         function createArrayLiteralExpression(elements, multiLine) {
-            var node = createBaseExpression(200 /* ArrayLiteralExpression */);
-            node.elements = parenthesizerRules().parenthesizeExpressionsOfCommaDelimitedList(createNodeArray(elements));
+            var node = createBaseExpression(202 /* ArrayLiteralExpression */);
+            // Ensure we add a trailing comma for something like `[NumericLiteral(1), NumericLiteral(2), OmittedExpresion]` so that
+            // we end up with `[1, 2, ,]` instead of `[1, 2, ]` otherwise the `OmittedExpression` will just end up being treated like
+            // a trailing comma.
+            var lastElement = elements && ts.lastOrUndefined(elements);
+            var elementsArray = createNodeArray(elements, lastElement && ts.isOmittedExpression(lastElement) ? true : undefined);
+            node.elements = parenthesizerRules().parenthesizeExpressionsOfCommaDelimitedList(elementsArray);
             node.multiLine = multiLine;
             node.transformFlags |= propagateChildrenFlags(node.elements);
             return node;
@@ -22664,7 +23165,7 @@
         }
         // @api
         function createObjectLiteralExpression(properties, multiLine) {
-            var node = createBaseExpression(201 /* ObjectLiteralExpression */);
+            var node = createBaseExpression(203 /* ObjectLiteralExpression */);
             node.properties = createNodeArray(properties);
             node.multiLine = multiLine;
             node.transformFlags |= propagateChildrenFlags(node.properties);
@@ -22678,7 +23179,7 @@
         }
         // @api
         function createPropertyAccessExpression(expression, name) {
-            var node = createBaseExpression(202 /* PropertyAccessExpression */);
+            var node = createBaseExpression(204 /* PropertyAccessExpression */);
             node.expression = parenthesizerRules().parenthesizeLeftSideOfAccess(expression);
             node.name = asName(name);
             node.transformFlags =
@@ -22707,7 +23208,7 @@
         }
         // @api
         function createPropertyAccessChain(expression, questionDotToken, name) {
-            var node = createBaseExpression(202 /* PropertyAccessExpression */);
+            var node = createBaseExpression(204 /* PropertyAccessExpression */);
             node.flags |= 32 /* OptionalChain */;
             node.expression = parenthesizerRules().parenthesizeLeftSideOfAccess(expression);
             node.questionDotToken = questionDotToken;
@@ -22734,7 +23235,7 @@
         }
         // @api
         function createElementAccessExpression(expression, index) {
-            var node = createBaseExpression(203 /* ElementAccessExpression */);
+            var node = createBaseExpression(205 /* ElementAccessExpression */);
             node.expression = parenthesizerRules().parenthesizeLeftSideOfAccess(expression);
             node.argumentExpression = asExpression(index);
             node.transformFlags |=
@@ -22761,7 +23262,7 @@
         }
         // @api
         function createElementAccessChain(expression, questionDotToken, index) {
-            var node = createBaseExpression(203 /* ElementAccessExpression */);
+            var node = createBaseExpression(205 /* ElementAccessExpression */);
             node.flags |= 32 /* OptionalChain */;
             node.expression = parenthesizerRules().parenthesizeLeftSideOfAccess(expression);
             node.questionDotToken = questionDotToken;
@@ -22786,7 +23287,7 @@
         }
         // @api
         function createCallExpression(expression, typeArguments, argumentsArray) {
-            var node = createBaseExpression(204 /* CallExpression */);
+            var node = createBaseExpression(206 /* CallExpression */);
             node.expression = parenthesizerRules().parenthesizeLeftSideOfAccess(expression);
             node.typeArguments = asNodeArray(typeArguments);
             node.arguments = parenthesizerRules().parenthesizeExpressionsOfCommaDelimitedList(createNodeArray(argumentsArray));
@@ -22818,7 +23319,7 @@
         }
         // @api
         function createCallChain(expression, questionDotToken, typeArguments, argumentsArray) {
-            var node = createBaseExpression(204 /* CallExpression */);
+            var node = createBaseExpression(206 /* CallExpression */);
             node.flags |= 32 /* OptionalChain */;
             node.expression = parenthesizerRules().parenthesizeLeftSideOfAccess(expression);
             node.questionDotToken = questionDotToken;
@@ -22850,7 +23351,7 @@
         }
         // @api
         function createNewExpression(expression, typeArguments, argumentsArray) {
-            var node = createBaseExpression(205 /* NewExpression */);
+            var node = createBaseExpression(207 /* NewExpression */);
             node.expression = parenthesizerRules().parenthesizeExpressionOfNew(expression);
             node.typeArguments = asNodeArray(typeArguments);
             node.arguments = argumentsArray ? parenthesizerRules().parenthesizeExpressionsOfCommaDelimitedList(argumentsArray) : undefined;
@@ -22874,7 +23375,7 @@
         }
         // @api
         function createTaggedTemplateExpression(tag, typeArguments, template) {
-            var node = createBaseExpression(206 /* TaggedTemplateExpression */);
+            var node = createBaseExpression(208 /* TaggedTemplateExpression */);
             node.tag = parenthesizerRules().parenthesizeLeftSideOfAccess(tag);
             node.typeArguments = asNodeArray(typeArguments);
             node.template = template;
@@ -22901,7 +23402,7 @@
         }
         // @api
         function createTypeAssertion(type, expression) {
-            var node = createBaseExpression(207 /* TypeAssertionExpression */);
+            var node = createBaseExpression(209 /* TypeAssertionExpression */);
             node.expression = parenthesizerRules().parenthesizeOperandOfPrefixUnary(expression);
             node.type = type;
             node.transformFlags |=
@@ -22919,7 +23420,7 @@
         }
         // @api
         function createParenthesizedExpression(expression) {
-            var node = createBaseExpression(208 /* ParenthesizedExpression */);
+            var node = createBaseExpression(210 /* ParenthesizedExpression */);
             node.expression = expression;
             node.transformFlags = propagateChildFlags(node.expression);
             return node;
@@ -22932,7 +23433,7 @@
         }
         // @api
         function createFunctionExpression(modifiers, asteriskToken, name, typeParameters, parameters, type, body) {
-            var node = createBaseFunctionLikeDeclaration(209 /* FunctionExpression */, 
+            var node = createBaseFunctionLikeDeclaration(211 /* FunctionExpression */, 
             /*decorators*/ undefined, modifiers, name, typeParameters, parameters, type, body);
             node.asteriskToken = asteriskToken;
             node.transformFlags |= propagateChildFlags(node.asteriskToken);
@@ -22966,7 +23467,7 @@
         }
         // @api
         function createArrowFunction(modifiers, typeParameters, parameters, type, equalsGreaterThanToken, body) {
-            var node = createBaseFunctionLikeDeclaration(210 /* ArrowFunction */, 
+            var node = createBaseFunctionLikeDeclaration(212 /* ArrowFunction */, 
             /*decorators*/ undefined, modifiers, 
             /*name*/ undefined, typeParameters, parameters, type, parenthesizerRules().parenthesizeConciseBodyOfArrowFunction(body));
             node.equalsGreaterThanToken = equalsGreaterThanToken !== null && equalsGreaterThanToken !== void 0 ? equalsGreaterThanToken : createToken(38 /* EqualsGreaterThanToken */);
@@ -22974,7 +23475,7 @@
                 propagateChildFlags(node.equalsGreaterThanToken) |
                     512 /* ContainsES2015 */;
             if (ts.modifiersToFlags(node.modifiers) & 256 /* Async */) {
-                node.transformFlags |= 128 /* ContainsES2017 */;
+                node.transformFlags |= 128 /* ContainsES2017 */ | 8192 /* ContainsLexicalThis */;
             }
             return node;
         }
@@ -22991,7 +23492,7 @@
         }
         // @api
         function createDeleteExpression(expression) {
-            var node = createBaseExpression(211 /* DeleteExpression */);
+            var node = createBaseExpression(213 /* DeleteExpression */);
             node.expression = parenthesizerRules().parenthesizeOperandOfPrefixUnary(expression);
             node.transformFlags |= propagateChildFlags(node.expression);
             return node;
@@ -23004,7 +23505,7 @@
         }
         // @api
         function createTypeOfExpression(expression) {
-            var node = createBaseExpression(212 /* TypeOfExpression */);
+            var node = createBaseExpression(214 /* TypeOfExpression */);
             node.expression = parenthesizerRules().parenthesizeOperandOfPrefixUnary(expression);
             node.transformFlags |= propagateChildFlags(node.expression);
             return node;
@@ -23017,7 +23518,7 @@
         }
         // @api
         function createVoidExpression(expression) {
-            var node = createBaseExpression(213 /* VoidExpression */);
+            var node = createBaseExpression(215 /* VoidExpression */);
             node.expression = parenthesizerRules().parenthesizeOperandOfPrefixUnary(expression);
             node.transformFlags |= propagateChildFlags(node.expression);
             return node;
@@ -23030,7 +23531,7 @@
         }
         // @api
         function createAwaitExpression(expression) {
-            var node = createBaseExpression(214 /* AwaitExpression */);
+            var node = createBaseExpression(216 /* AwaitExpression */);
             node.expression = parenthesizerRules().parenthesizeOperandOfPrefixUnary(expression);
             node.transformFlags |=
                 propagateChildFlags(node.expression) |
@@ -23047,10 +23548,18 @@
         }
         // @api
         function createPrefixUnaryExpression(operator, operand) {
-            var node = createBaseExpression(215 /* PrefixUnaryExpression */);
+            var node = createBaseExpression(217 /* PrefixUnaryExpression */);
             node.operator = operator;
             node.operand = parenthesizerRules().parenthesizeOperandOfPrefixUnary(operand);
             node.transformFlags |= propagateChildFlags(node.operand);
+            // Only set this flag for non-generated identifiers and non-"local" names. See the
+            // comment in `visitPreOrPostfixUnaryExpression` in module.ts
+            if ((operator === 45 /* PlusPlusToken */ || operator === 46 /* MinusMinusToken */) &&
+                ts.isIdentifier(node.operand) &&
+                !ts.isGeneratedIdentifier(node.operand) &&
+                !ts.isLocalName(node.operand)) {
+                node.transformFlags |= 67108864 /* ContainsUpdateExpressionForIdentifier */;
+            }
             return node;
         }
         // @api
@@ -23061,10 +23570,17 @@
         }
         // @api
         function createPostfixUnaryExpression(operand, operator) {
-            var node = createBaseExpression(216 /* PostfixUnaryExpression */);
+            var node = createBaseExpression(218 /* PostfixUnaryExpression */);
             node.operator = operator;
             node.operand = parenthesizerRules().parenthesizeOperandOfPostfixUnary(operand);
-            node.transformFlags = propagateChildFlags(node.operand);
+            node.transformFlags |= propagateChildFlags(node.operand);
+            // Only set this flag for non-generated identifiers and non-"local" names. See the
+            // comment in `visitPreOrPostfixUnaryExpression` in module.ts
+            if (ts.isIdentifier(node.operand) &&
+                !ts.isGeneratedIdentifier(node.operand) &&
+                !ts.isLocalName(node.operand)) {
+                node.transformFlags |= 67108864 /* ContainsUpdateExpressionForIdentifier */;
+            }
             return node;
         }
         // @api
@@ -23075,7 +23591,7 @@
         }
         // @api
         function createBinaryExpression(left, operator, right) {
-            var node = createBaseExpression(217 /* BinaryExpression */);
+            var node = createBaseExpression(219 /* BinaryExpression */);
             var operatorToken = asToken(operator);
             var operatorKind = operatorToken.kind;
             node.left = parenthesizerRules().parenthesizeLeftSideOfBinary(operatorKind, left);
@@ -23088,7 +23604,7 @@
             if (operatorKind === 60 /* QuestionQuestionToken */) {
                 node.transformFlags |= 16 /* ContainsES2020 */;
             }
-            else if (operatorKind === 62 /* EqualsToken */) {
+            else if (operatorKind === 63 /* EqualsToken */) {
                 if (ts.isObjectLiteralExpression(node.left)) {
                     node.transformFlags |=
                         512 /* ContainsES2015 */ |
@@ -23103,7 +23619,7 @@
                             propagateAssignmentPatternFlags(node.left);
                 }
             }
-            else if (operatorKind === 42 /* AsteriskAsteriskToken */ || operatorKind === 66 /* AsteriskAsteriskEqualsToken */) {
+            else if (operatorKind === 42 /* AsteriskAsteriskToken */ || operatorKind === 67 /* AsteriskAsteriskEqualsToken */) {
                 node.transformFlags |= 256 /* ContainsES2016 */;
             }
             else if (ts.isLogicalOrCoalescingAssignmentOperator(operatorKind)) {
@@ -23144,7 +23660,7 @@
         }
         // @api
         function createConditionalExpression(condition, questionToken, whenTrue, colonToken, whenFalse) {
-            var node = createBaseExpression(218 /* ConditionalExpression */);
+            var node = createBaseExpression(220 /* ConditionalExpression */);
             node.condition = parenthesizerRules().parenthesizeConditionOfConditionalExpression(condition);
             node.questionToken = questionToken !== null && questionToken !== void 0 ? questionToken : createToken(57 /* QuestionToken */);
             node.whenTrue = parenthesizerRules().parenthesizeBranchOfConditionalExpression(whenTrue);
@@ -23170,7 +23686,7 @@
         }
         // @api
         function createTemplateExpression(head, templateSpans) {
-            var node = createBaseExpression(219 /* TemplateExpression */);
+            var node = createBaseExpression(221 /* TemplateExpression */);
             node.head = head;
             node.templateSpans = createNodeArray(templateSpans);
             node.transformFlags |=
@@ -23240,7 +23756,7 @@
         // @api
         function createYieldExpression(asteriskToken, expression) {
             ts.Debug.assert(!asteriskToken || !!expression, "A `YieldExpression` with an asteriskToken must have an expression.");
-            var node = createBaseExpression(220 /* YieldExpression */);
+            var node = createBaseExpression(222 /* YieldExpression */);
             node.expression = expression && parenthesizerRules().parenthesizeExpressionForDisallowedComma(expression);
             node.asteriskToken = asteriskToken;
             node.transformFlags |=
@@ -23260,7 +23776,7 @@
         }
         // @api
         function createSpreadElement(expression) {
-            var node = createBaseExpression(221 /* SpreadElement */);
+            var node = createBaseExpression(223 /* SpreadElement */);
             node.expression = parenthesizerRules().parenthesizeExpressionForDisallowedComma(expression);
             node.transformFlags |=
                 propagateChildFlags(node.expression) |
@@ -23276,7 +23792,7 @@
         }
         // @api
         function createClassExpression(decorators, modifiers, name, typeParameters, heritageClauses, members) {
-            var node = createBaseClassLikeDeclaration(222 /* ClassExpression */, decorators, modifiers, name, typeParameters, heritageClauses, members);
+            var node = createBaseClassLikeDeclaration(224 /* ClassExpression */, decorators, modifiers, name, typeParameters, heritageClauses, members);
             node.transformFlags |= 512 /* ContainsES2015 */;
             return node;
         }
@@ -23293,11 +23809,11 @@
         }
         // @api
         function createOmittedExpression() {
-            return createBaseExpression(223 /* OmittedExpression */);
+            return createBaseExpression(225 /* OmittedExpression */);
         }
         // @api
         function createExpressionWithTypeArguments(expression, typeArguments) {
-            var node = createBaseNode(224 /* ExpressionWithTypeArguments */);
+            var node = createBaseNode(226 /* ExpressionWithTypeArguments */);
             node.expression = parenthesizerRules().parenthesizeLeftSideOfAccess(expression);
             node.typeArguments = typeArguments && parenthesizerRules().parenthesizeTypeArguments(typeArguments);
             node.transformFlags |=
@@ -23315,7 +23831,7 @@
         }
         // @api
         function createAsExpression(expression, type) {
-            var node = createBaseExpression(225 /* AsExpression */);
+            var node = createBaseExpression(227 /* AsExpression */);
             node.expression = expression;
             node.type = type;
             node.transformFlags |=
@@ -23333,7 +23849,7 @@
         }
         // @api
         function createNonNullExpression(expression) {
-            var node = createBaseExpression(226 /* NonNullExpression */);
+            var node = createBaseExpression(228 /* NonNullExpression */);
             node.expression = parenthesizerRules().parenthesizeLeftSideOfAccess(expression);
             node.transformFlags |=
                 propagateChildFlags(node.expression) |
@@ -23351,7 +23867,7 @@
         }
         // @api
         function createNonNullChain(expression) {
-            var node = createBaseExpression(226 /* NonNullExpression */);
+            var node = createBaseExpression(228 /* NonNullExpression */);
             node.flags |= 32 /* OptionalChain */;
             node.expression = parenthesizerRules().parenthesizeLeftSideOfAccess(expression);
             node.transformFlags |=
@@ -23368,15 +23884,15 @@
         }
         // @api
         function createMetaProperty(keywordToken, name) {
-            var node = createBaseExpression(227 /* MetaProperty */);
+            var node = createBaseExpression(229 /* MetaProperty */);
             node.keywordToken = keywordToken;
             node.name = name;
             node.transformFlags |= propagateChildFlags(node.name);
             switch (keywordToken) {
-                case 102 /* NewKeyword */:
+                case 103 /* NewKeyword */:
                     node.transformFlags |= 512 /* ContainsES2015 */;
                     break;
-                case 99 /* ImportKeyword */:
+                case 100 /* ImportKeyword */:
                     node.transformFlags |= 4 /* ContainsESNext */;
                     break;
                 default:
@@ -23395,7 +23911,7 @@
         //
         // @api
         function createTemplateSpan(expression, literal) {
-            var node = createBaseNode(229 /* TemplateSpan */);
+            var node = createBaseNode(231 /* TemplateSpan */);
             node.expression = expression;
             node.literal = literal;
             node.transformFlags |=
@@ -23413,7 +23929,7 @@
         }
         // @api
         function createSemicolonClassElement() {
-            var node = createBaseNode(230 /* SemicolonClassElement */);
+            var node = createBaseNode(232 /* SemicolonClassElement */);
             node.transformFlags |= 512 /* ContainsES2015 */;
             return node;
         }
@@ -23422,7 +23938,7 @@
         //
         // @api
         function createBlock(statements, multiLine) {
-            var node = createBaseNode(231 /* Block */);
+            var node = createBaseNode(233 /* Block */);
             node.statements = createNodeArray(statements);
             node.multiLine = multiLine;
             node.transformFlags |= propagateChildrenFlags(node.statements);
@@ -23436,7 +23952,7 @@
         }
         // @api
         function createVariableStatement(modifiers, declarationList) {
-            var node = createBaseDeclaration(233 /* VariableStatement */, /*decorators*/ undefined, modifiers);
+            var node = createBaseDeclaration(235 /* VariableStatement */, /*decorators*/ undefined, modifiers);
             node.declarationList = ts.isArray(declarationList) ? createVariableDeclarationList(declarationList) : declarationList;
             node.transformFlags |=
                 propagateChildFlags(node.declarationList);
@@ -23454,11 +23970,11 @@
         }
         // @api
         function createEmptyStatement() {
-            return createBaseNode(232 /* EmptyStatement */);
+            return createBaseNode(234 /* EmptyStatement */);
         }
         // @api
         function createExpressionStatement(expression) {
-            var node = createBaseNode(234 /* ExpressionStatement */);
+            var node = createBaseNode(236 /* ExpressionStatement */);
             node.expression = parenthesizerRules().parenthesizeExpressionOfExpressionStatement(expression);
             node.transformFlags |= propagateChildFlags(node.expression);
             return node;
@@ -23471,7 +23987,7 @@
         }
         // @api
         function createIfStatement(expression, thenStatement, elseStatement) {
-            var node = createBaseNode(235 /* IfStatement */);
+            var node = createBaseNode(237 /* IfStatement */);
             node.expression = expression;
             node.thenStatement = asEmbeddedStatement(thenStatement);
             node.elseStatement = asEmbeddedStatement(elseStatement);
@@ -23491,7 +24007,7 @@
         }
         // @api
         function createDoStatement(statement, expression) {
-            var node = createBaseNode(236 /* DoStatement */);
+            var node = createBaseNode(238 /* DoStatement */);
             node.statement = asEmbeddedStatement(statement);
             node.expression = expression;
             node.transformFlags |=
@@ -23508,7 +24024,7 @@
         }
         // @api
         function createWhileStatement(expression, statement) {
-            var node = createBaseNode(237 /* WhileStatement */);
+            var node = createBaseNode(239 /* WhileStatement */);
             node.expression = expression;
             node.statement = asEmbeddedStatement(statement);
             node.transformFlags |=
@@ -23525,7 +24041,7 @@
         }
         // @api
         function createForStatement(initializer, condition, incrementor, statement) {
-            var node = createBaseNode(238 /* ForStatement */);
+            var node = createBaseNode(240 /* ForStatement */);
             node.initializer = initializer;
             node.condition = condition;
             node.incrementor = incrementor;
@@ -23548,7 +24064,7 @@
         }
         // @api
         function createForInStatement(initializer, expression, statement) {
-            var node = createBaseNode(239 /* ForInStatement */);
+            var node = createBaseNode(241 /* ForInStatement */);
             node.initializer = initializer;
             node.expression = expression;
             node.statement = asEmbeddedStatement(statement);
@@ -23568,7 +24084,7 @@
         }
         // @api
         function createForOfStatement(awaitModifier, initializer, expression, statement) {
-            var node = createBaseNode(240 /* ForOfStatement */);
+            var node = createBaseNode(242 /* ForOfStatement */);
             node.awaitModifier = awaitModifier;
             node.initializer = initializer;
             node.expression = parenthesizerRules().parenthesizeExpressionForDisallowedComma(expression);
@@ -23594,7 +24110,7 @@
         }
         // @api
         function createContinueStatement(label) {
-            var node = createBaseNode(241 /* ContinueStatement */);
+            var node = createBaseNode(243 /* ContinueStatement */);
             node.label = asName(label);
             node.transformFlags |=
                 propagateChildFlags(node.label) |
@@ -23609,7 +24125,7 @@
         }
         // @api
         function createBreakStatement(label) {
-            var node = createBaseNode(242 /* BreakStatement */);
+            var node = createBaseNode(244 /* BreakStatement */);
             node.label = asName(label);
             node.transformFlags |=
                 propagateChildFlags(node.label) |
@@ -23624,7 +24140,7 @@
         }
         // @api
         function createReturnStatement(expression) {
-            var node = createBaseNode(243 /* ReturnStatement */);
+            var node = createBaseNode(245 /* ReturnStatement */);
             node.expression = expression;
             // return in an ES2018 async generator must be awaited
             node.transformFlags |=
@@ -23641,7 +24157,7 @@
         }
         // @api
         function createWithStatement(expression, statement) {
-            var node = createBaseNode(244 /* WithStatement */);
+            var node = createBaseNode(246 /* WithStatement */);
             node.expression = expression;
             node.statement = asEmbeddedStatement(statement);
             node.transformFlags |=
@@ -23658,7 +24174,7 @@
         }
         // @api
         function createSwitchStatement(expression, caseBlock) {
-            var node = createBaseNode(245 /* SwitchStatement */);
+            var node = createBaseNode(247 /* SwitchStatement */);
             node.expression = parenthesizerRules().parenthesizeExpressionForDisallowedComma(expression);
             node.caseBlock = caseBlock;
             node.transformFlags |=
@@ -23675,7 +24191,7 @@
         }
         // @api
         function createLabeledStatement(label, statement) {
-            var node = createBaseNode(246 /* LabeledStatement */);
+            var node = createBaseNode(248 /* LabeledStatement */);
             node.label = asName(label);
             node.statement = asEmbeddedStatement(statement);
             node.transformFlags |=
@@ -23692,7 +24208,7 @@
         }
         // @api
         function createThrowStatement(expression) {
-            var node = createBaseNode(247 /* ThrowStatement */);
+            var node = createBaseNode(249 /* ThrowStatement */);
             node.expression = expression;
             node.transformFlags |= propagateChildFlags(node.expression);
             return node;
@@ -23705,7 +24221,7 @@
         }
         // @api
         function createTryStatement(tryBlock, catchClause, finallyBlock) {
-            var node = createBaseNode(248 /* TryStatement */);
+            var node = createBaseNode(250 /* TryStatement */);
             node.tryBlock = tryBlock;
             node.catchClause = catchClause;
             node.finallyBlock = finallyBlock;
@@ -23725,11 +24241,11 @@
         }
         // @api
         function createDebuggerStatement() {
-            return createBaseNode(249 /* DebuggerStatement */);
+            return createBaseNode(251 /* DebuggerStatement */);
         }
         // @api
         function createVariableDeclaration(name, exclamationToken, type, initializer) {
-            var node = createBaseVariableLikeDeclaration(250 /* VariableDeclaration */, 
+            var node = createBaseVariableLikeDeclaration(252 /* VariableDeclaration */, 
             /*decorators*/ undefined, 
             /*modifiers*/ undefined, name, type, initializer && parenthesizerRules().parenthesizeExpressionForDisallowedComma(initializer));
             node.exclamationToken = exclamationToken;
@@ -23751,7 +24267,7 @@
         // @api
         function createVariableDeclarationList(declarations, flags) {
             if (flags === void 0) { flags = 0 /* None */; }
-            var node = createBaseNode(251 /* VariableDeclarationList */);
+            var node = createBaseNode(253 /* VariableDeclarationList */);
             node.flags |= flags & 3 /* BlockScoped */;
             node.declarations = createNodeArray(declarations);
             node.transformFlags |=
@@ -23772,7 +24288,7 @@
         }
         // @api
         function createFunctionDeclaration(decorators, modifiers, asteriskToken, name, typeParameters, parameters, type, body) {
-            var node = createBaseFunctionLikeDeclaration(252 /* FunctionDeclaration */, decorators, modifiers, name, typeParameters, parameters, type, body);
+            var node = createBaseFunctionLikeDeclaration(254 /* FunctionDeclaration */, decorators, modifiers, name, typeParameters, parameters, type, body);
             node.asteriskToken = asteriskToken;
             if (!node.body || ts.modifiersToFlags(node.modifiers) & 2 /* Ambient */) {
                 node.transformFlags = 1 /* ContainsTypeScript */;
@@ -23810,7 +24326,7 @@
         }
         // @api
         function createClassDeclaration(decorators, modifiers, name, typeParameters, heritageClauses, members) {
-            var node = createBaseClassLikeDeclaration(253 /* ClassDeclaration */, decorators, modifiers, name, typeParameters, heritageClauses, members);
+            var node = createBaseClassLikeDeclaration(255 /* ClassDeclaration */, decorators, modifiers, name, typeParameters, heritageClauses, members);
             if (ts.modifiersToFlags(node.modifiers) & 2 /* Ambient */) {
                 node.transformFlags = 1 /* ContainsTypeScript */;
             }
@@ -23835,7 +24351,7 @@
         }
         // @api
         function createInterfaceDeclaration(decorators, modifiers, name, typeParameters, heritageClauses, members) {
-            var node = createBaseInterfaceOrClassLikeDeclaration(254 /* InterfaceDeclaration */, decorators, modifiers, name, typeParameters, heritageClauses);
+            var node = createBaseInterfaceOrClassLikeDeclaration(256 /* InterfaceDeclaration */, decorators, modifiers, name, typeParameters, heritageClauses);
             node.members = createNodeArray(members);
             node.transformFlags = 1 /* ContainsTypeScript */;
             return node;
@@ -23853,7 +24369,7 @@
         }
         // @api
         function createTypeAliasDeclaration(decorators, modifiers, name, typeParameters, type) {
-            var node = createBaseGenericNamedDeclaration(255 /* TypeAliasDeclaration */, decorators, modifiers, name, typeParameters);
+            var node = createBaseGenericNamedDeclaration(257 /* TypeAliasDeclaration */, decorators, modifiers, name, typeParameters);
             node.type = type;
             node.transformFlags = 1 /* ContainsTypeScript */;
             return node;
@@ -23870,7 +24386,7 @@
         }
         // @api
         function createEnumDeclaration(decorators, modifiers, name, members) {
-            var node = createBaseNamedDeclaration(256 /* EnumDeclaration */, decorators, modifiers, name);
+            var node = createBaseNamedDeclaration(258 /* EnumDeclaration */, decorators, modifiers, name);
             node.members = createNodeArray(members);
             node.transformFlags |=
                 propagateChildrenFlags(node.members) |
@@ -23890,7 +24406,7 @@
         // @api
         function createModuleDeclaration(decorators, modifiers, name, body, flags) {
             if (flags === void 0) { flags = 0 /* None */; }
-            var node = createBaseDeclaration(257 /* ModuleDeclaration */, decorators, modifiers);
+            var node = createBaseDeclaration(259 /* ModuleDeclaration */, decorators, modifiers);
             node.flags |= flags & (16 /* Namespace */ | 4 /* NestedNamespace */ | 1024 /* GlobalAugmentation */);
             node.name = name;
             node.body = body;
@@ -23917,7 +24433,7 @@
         }
         // @api
         function createModuleBlock(statements) {
-            var node = createBaseNode(258 /* ModuleBlock */);
+            var node = createBaseNode(260 /* ModuleBlock */);
             node.statements = createNodeArray(statements);
             node.transformFlags |= propagateChildrenFlags(node.statements);
             return node;
@@ -23930,7 +24446,7 @@
         }
         // @api
         function createCaseBlock(clauses) {
-            var node = createBaseNode(259 /* CaseBlock */);
+            var node = createBaseNode(261 /* CaseBlock */);
             node.clauses = createNodeArray(clauses);
             node.transformFlags |= propagateChildrenFlags(node.clauses);
             return node;
@@ -23943,7 +24459,7 @@
         }
         // @api
         function createNamespaceExportDeclaration(name) {
-            var node = createBaseNamedDeclaration(260 /* NamespaceExportDeclaration */, 
+            var node = createBaseNamedDeclaration(262 /* NamespaceExportDeclaration */, 
             /*decorators*/ undefined, 
             /*modifiers*/ undefined, name);
             node.transformFlags = 1 /* ContainsTypeScript */;
@@ -23957,7 +24473,7 @@
         }
         // @api
         function createImportEqualsDeclaration(decorators, modifiers, isTypeOnly, name, moduleReference) {
-            var node = createBaseNamedDeclaration(261 /* ImportEqualsDeclaration */, decorators, modifiers, name);
+            var node = createBaseNamedDeclaration(263 /* ImportEqualsDeclaration */, decorators, modifiers, name);
             node.isTypeOnly = isTypeOnly;
             node.moduleReference = moduleReference;
             node.transformFlags |= propagateChildFlags(node.moduleReference);
@@ -23978,7 +24494,7 @@
         }
         // @api
         function createImportDeclaration(decorators, modifiers, importClause, moduleSpecifier) {
-            var node = createBaseDeclaration(262 /* ImportDeclaration */, decorators, modifiers);
+            var node = createBaseDeclaration(264 /* ImportDeclaration */, decorators, modifiers);
             node.importClause = importClause;
             node.moduleSpecifier = moduleSpecifier;
             node.transformFlags |=
@@ -23998,7 +24514,7 @@
         }
         // @api
         function createImportClause(isTypeOnly, name, namedBindings) {
-            var node = createBaseNode(263 /* ImportClause */);
+            var node = createBaseNode(265 /* ImportClause */);
             node.isTypeOnly = isTypeOnly;
             node.name = name;
             node.namedBindings = namedBindings;
@@ -24021,7 +24537,7 @@
         }
         // @api
         function createNamespaceImport(name) {
-            var node = createBaseNode(264 /* NamespaceImport */);
+            var node = createBaseNode(266 /* NamespaceImport */);
             node.name = name;
             node.transformFlags |= propagateChildFlags(node.name);
             node.transformFlags &= ~16777216 /* ContainsPossibleTopLevelAwait */; // always parsed in an Await context
@@ -24035,7 +24551,7 @@
         }
         // @api
         function createNamespaceExport(name) {
-            var node = createBaseNode(270 /* NamespaceExport */);
+            var node = createBaseNode(272 /* NamespaceExport */);
             node.name = name;
             node.transformFlags |=
                 propagateChildFlags(node.name) |
@@ -24051,7 +24567,7 @@
         }
         // @api
         function createNamedImports(elements) {
-            var node = createBaseNode(265 /* NamedImports */);
+            var node = createBaseNode(267 /* NamedImports */);
             node.elements = createNodeArray(elements);
             node.transformFlags |= propagateChildrenFlags(node.elements);
             node.transformFlags &= ~16777216 /* ContainsPossibleTopLevelAwait */; // always parsed in an Await context
@@ -24065,7 +24581,7 @@
         }
         // @api
         function createImportSpecifier(propertyName, name) {
-            var node = createBaseNode(266 /* ImportSpecifier */);
+            var node = createBaseNode(268 /* ImportSpecifier */);
             node.propertyName = propertyName;
             node.name = name;
             node.transformFlags |=
@@ -24083,10 +24599,10 @@
         }
         // @api
         function createExportAssignment(decorators, modifiers, isExportEquals, expression) {
-            var node = createBaseDeclaration(267 /* ExportAssignment */, decorators, modifiers);
+            var node = createBaseDeclaration(269 /* ExportAssignment */, decorators, modifiers);
             node.isExportEquals = isExportEquals;
             node.expression = isExportEquals
-                ? parenthesizerRules().parenthesizeRightSideOfBinary(62 /* EqualsToken */, /*leftSide*/ undefined, expression)
+                ? parenthesizerRules().parenthesizeRightSideOfBinary(63 /* EqualsToken */, /*leftSide*/ undefined, expression)
                 : parenthesizerRules().parenthesizeExpressionOfExportDefault(expression);
             node.transformFlags |= propagateChildFlags(node.expression);
             node.transformFlags &= ~16777216 /* ContainsPossibleTopLevelAwait */; // always parsed in an Await context
@@ -24102,7 +24618,7 @@
         }
         // @api
         function createExportDeclaration(decorators, modifiers, isTypeOnly, exportClause, moduleSpecifier) {
-            var node = createBaseDeclaration(268 /* ExportDeclaration */, decorators, modifiers);
+            var node = createBaseDeclaration(270 /* ExportDeclaration */, decorators, modifiers);
             node.isTypeOnly = isTypeOnly;
             node.exportClause = exportClause;
             node.moduleSpecifier = moduleSpecifier;
@@ -24124,7 +24640,7 @@
         }
         // @api
         function createNamedExports(elements) {
-            var node = createBaseNode(269 /* NamedExports */);
+            var node = createBaseNode(271 /* NamedExports */);
             node.elements = createNodeArray(elements);
             node.transformFlags |= propagateChildrenFlags(node.elements);
             node.transformFlags &= ~16777216 /* ContainsPossibleTopLevelAwait */; // always parsed in an Await context
@@ -24138,7 +24654,7 @@
         }
         // @api
         function createExportSpecifier(propertyName, name) {
-            var node = createBaseNode(271 /* ExportSpecifier */);
+            var node = createBaseNode(273 /* ExportSpecifier */);
             node.propertyName = asName(propertyName);
             node.name = asName(name);
             node.transformFlags |=
@@ -24156,7 +24672,7 @@
         }
         // @api
         function createMissingDeclaration() {
-            var node = createBaseDeclaration(272 /* MissingDeclaration */, 
+            var node = createBaseDeclaration(274 /* MissingDeclaration */, 
             /*decorators*/ undefined, 
             /*modifiers*/ undefined);
             return node;
@@ -24166,7 +24682,7 @@
         //
         // @api
         function createExternalModuleReference(expression) {
-            var node = createBaseNode(273 /* ExternalModuleReference */);
+            var node = createBaseNode(275 /* ExternalModuleReference */);
             node.expression = expression;
             node.transformFlags |= propagateChildFlags(node.expression);
             node.transformFlags &= ~16777216 /* ContainsPossibleTopLevelAwait */; // always parsed in an Await context
@@ -24211,7 +24727,7 @@
         }
         // @api
         function createJSDocFunctionType(parameters, type) {
-            var node = createBaseSignatureDeclaration(309 /* JSDocFunctionType */, 
+            var node = createBaseSignatureDeclaration(312 /* JSDocFunctionType */, 
             /*decorators*/ undefined, 
             /*modifiers*/ undefined, 
             /*name*/ undefined, 
@@ -24228,7 +24744,7 @@
         // @api
         function createJSDocTypeLiteral(propertyTags, isArrayType) {
             if (isArrayType === void 0) { isArrayType = false; }
-            var node = createBaseNode(314 /* JSDocTypeLiteral */);
+            var node = createBaseNode(317 /* JSDocTypeLiteral */);
             node.jsDocPropertyTags = asNodeArray(propertyTags);
             node.isArrayType = isArrayType;
             return node;
@@ -24242,7 +24758,7 @@
         }
         // @api
         function createJSDocTypeExpression(type) {
-            var node = createBaseNode(302 /* JSDocTypeExpression */);
+            var node = createBaseNode(304 /* JSDocTypeExpression */);
             node.type = type;
             return node;
         }
@@ -24254,7 +24770,7 @@
         }
         // @api
         function createJSDocSignature(typeParameters, parameters, type) {
-            var node = createBaseNode(315 /* JSDocSignature */);
+            var node = createBaseNode(318 /* JSDocSignature */);
             node.typeParameters = asNodeArray(typeParameters);
             node.parameters = createNodeArray(parameters);
             node.type = type;
@@ -24283,7 +24799,7 @@
         }
         // @api
         function createJSDocTemplateTag(tagName, constraint, typeParameters, comment) {
-            var node = createBaseJSDocTag(334 /* JSDocTemplateTag */, tagName !== null && tagName !== void 0 ? tagName : createIdentifier("template"), comment);
+            var node = createBaseJSDocTag(339 /* JSDocTemplateTag */, tagName !== null && tagName !== void 0 ? tagName : createIdentifier("template"), comment);
             node.constraint = constraint;
             node.typeParameters = createNodeArray(typeParameters);
             return node;
@@ -24300,7 +24816,7 @@
         }
         // @api
         function createJSDocTypedefTag(tagName, typeExpression, fullName, comment) {
-            var node = createBaseJSDocTag(335 /* JSDocTypedefTag */, tagName !== null && tagName !== void 0 ? tagName : createIdentifier("typedef"), comment);
+            var node = createBaseJSDocTag(340 /* JSDocTypedefTag */, tagName !== null && tagName !== void 0 ? tagName : createIdentifier("typedef"), comment);
             node.typeExpression = typeExpression;
             node.fullName = fullName;
             node.name = ts.getJSDocTypeAliasName(fullName);
@@ -24318,7 +24834,7 @@
         }
         // @api
         function createJSDocParameterTag(tagName, name, isBracketed, typeExpression, isNameFirst, comment) {
-            var node = createBaseJSDocTag(330 /* JSDocParameterTag */, tagName !== null && tagName !== void 0 ? tagName : createIdentifier("param"), comment);
+            var node = createBaseJSDocTag(335 /* JSDocParameterTag */, tagName !== null && tagName !== void 0 ? tagName : createIdentifier("param"), comment);
             node.typeExpression = typeExpression;
             node.name = name;
             node.isNameFirst = !!isNameFirst;
@@ -24339,7 +24855,7 @@
         }
         // @api
         function createJSDocPropertyTag(tagName, name, isBracketed, typeExpression, isNameFirst, comment) {
-            var node = createBaseJSDocTag(337 /* JSDocPropertyTag */, tagName !== null && tagName !== void 0 ? tagName : createIdentifier("prop"), comment);
+            var node = createBaseJSDocTag(342 /* JSDocPropertyTag */, tagName !== null && tagName !== void 0 ? tagName : createIdentifier("prop"), comment);
             node.typeExpression = typeExpression;
             node.name = name;
             node.isNameFirst = !!isNameFirst;
@@ -24360,7 +24876,7 @@
         }
         // @api
         function createJSDocCallbackTag(tagName, typeExpression, fullName, comment) {
-            var node = createBaseJSDocTag(328 /* JSDocCallbackTag */, tagName !== null && tagName !== void 0 ? tagName : createIdentifier("callback"), comment);
+            var node = createBaseJSDocTag(333 /* JSDocCallbackTag */, tagName !== null && tagName !== void 0 ? tagName : createIdentifier("callback"), comment);
             node.typeExpression = typeExpression;
             node.fullName = fullName;
             node.name = ts.getJSDocTypeAliasName(fullName);
@@ -24378,7 +24894,7 @@
         }
         // @api
         function createJSDocAugmentsTag(tagName, className, comment) {
-            var node = createBaseJSDocTag(318 /* JSDocAugmentsTag */, tagName !== null && tagName !== void 0 ? tagName : createIdentifier("augments"), comment);
+            var node = createBaseJSDocTag(323 /* JSDocAugmentsTag */, tagName !== null && tagName !== void 0 ? tagName : createIdentifier("augments"), comment);
             node.class = className;
             return node;
         }
@@ -24393,13 +24909,13 @@
         }
         // @api
         function createJSDocImplementsTag(tagName, className, comment) {
-            var node = createBaseJSDocTag(319 /* JSDocImplementsTag */, tagName !== null && tagName !== void 0 ? tagName : createIdentifier("implements"), comment);
+            var node = createBaseJSDocTag(324 /* JSDocImplementsTag */, tagName !== null && tagName !== void 0 ? tagName : createIdentifier("implements"), comment);
             node.class = className;
             return node;
         }
         // @api
         function createJSDocSeeTag(tagName, name, comment) {
-            var node = createBaseJSDocTag(336 /* JSDocSeeTag */, tagName !== null && tagName !== void 0 ? tagName : createIdentifier("see"), comment);
+            var node = createBaseJSDocTag(341 /* JSDocSeeTag */, tagName !== null && tagName !== void 0 ? tagName : createIdentifier("see"), comment);
             node.name = name;
             return node;
         }
@@ -24413,7 +24929,7 @@
         }
         // @api
         function createJSDocNameReference(name) {
-            var node = createBaseNode(303 /* JSDocNameReference */);
+            var node = createBaseNode(305 /* JSDocNameReference */);
             node.name = name;
             return node;
         }
@@ -24424,8 +24940,25 @@
                 : node;
         }
         // @api
+        function createJSDocMemberName(left, right) {
+            var node = createBaseNode(306 /* JSDocMemberName */);
+            node.left = left;
+            node.right = right;
+            node.transformFlags |=
+                propagateChildFlags(node.left) |
+                    propagateChildFlags(node.right);
+            return node;
+        }
+        // @api
+        function updateJSDocMemberName(node, left, right) {
+            return node.left !== left
+                || node.right !== right
+                ? update(createJSDocMemberName(left, right), node)
+                : node;
+        }
+        // @api
         function createJSDocLink(name, text) {
-            var node = createBaseNode(316 /* JSDocLink */);
+            var node = createBaseNode(319 /* JSDocLink */);
             node.name = name;
             node.text = text;
             return node;
@@ -24437,6 +24970,32 @@
                 : node;
         }
         // @api
+        function createJSDocLinkCode(name, text) {
+            var node = createBaseNode(320 /* JSDocLinkCode */);
+            node.name = name;
+            node.text = text;
+            return node;
+        }
+        // @api
+        function updateJSDocLinkCode(node, name, text) {
+            return node.name !== name
+                ? update(createJSDocLinkCode(name, text), node)
+                : node;
+        }
+        // @api
+        function createJSDocLinkPlain(name, text) {
+            var node = createBaseNode(321 /* JSDocLinkPlain */);
+            node.name = name;
+            node.text = text;
+            return node;
+        }
+        // @api
+        function updateJSDocLinkPlain(node, name, text) {
+            return node.name !== name
+                ? update(createJSDocLinkPlain(name, text), node)
+                : node;
+        }
+        // @api
         function updateJSDocImplementsTag(node, tagName, className, comment) {
             if (tagName === void 0) { tagName = getDefaultTagName(node); }
             return node.tagName !== tagName
@@ -24497,7 +25056,7 @@
         }
         // @api
         function createJSDocUnknownTag(tagName, comment) {
-            var node = createBaseJSDocTag(317 /* JSDocTag */, tagName, comment);
+            var node = createBaseJSDocTag(322 /* JSDocTag */, tagName, comment);
             return node;
         }
         // @api
@@ -24509,7 +25068,7 @@
         }
         // @api
         function createJSDocText(text) {
-            var node = createBaseNode(313 /* JSDocText */);
+            var node = createBaseNode(316 /* JSDocText */);
             node.text = text;
             return node;
         }
@@ -24521,7 +25080,7 @@
         }
         // @api
         function createJSDocComment(comment, tags) {
-            var node = createBaseNode(312 /* JSDocComment */);
+            var node = createBaseNode(315 /* JSDocComment */);
             node.comment = comment;
             node.tags = asNodeArray(tags);
             return node;
@@ -24538,7 +25097,7 @@
         //
         // @api
         function createJsxElement(openingElement, children, closingElement) {
-            var node = createBaseNode(274 /* JsxElement */);
+            var node = createBaseNode(276 /* JsxElement */);
             node.openingElement = openingElement;
             node.children = createNodeArray(children);
             node.closingElement = closingElement;
@@ -24559,7 +25118,7 @@
         }
         // @api
         function createJsxSelfClosingElement(tagName, typeArguments, attributes) {
-            var node = createBaseNode(275 /* JsxSelfClosingElement */);
+            var node = createBaseNode(277 /* JsxSelfClosingElement */);
             node.tagName = tagName;
             node.typeArguments = asNodeArray(typeArguments);
             node.attributes = attributes;
@@ -24583,7 +25142,7 @@
         }
         // @api
         function createJsxOpeningElement(tagName, typeArguments, attributes) {
-            var node = createBaseNode(276 /* JsxOpeningElement */);
+            var node = createBaseNode(278 /* JsxOpeningElement */);
             node.tagName = tagName;
             node.typeArguments = asNodeArray(typeArguments);
             node.attributes = attributes;
@@ -24607,7 +25166,7 @@
         }
         // @api
         function createJsxClosingElement(tagName) {
-            var node = createBaseNode(277 /* JsxClosingElement */);
+            var node = createBaseNode(279 /* JsxClosingElement */);
             node.tagName = tagName;
             node.transformFlags |=
                 propagateChildFlags(node.tagName) |
@@ -24622,7 +25181,7 @@
         }
         // @api
         function createJsxFragment(openingFragment, children, closingFragment) {
-            var node = createBaseNode(278 /* JsxFragment */);
+            var node = createBaseNode(280 /* JsxFragment */);
             node.openingFragment = openingFragment;
             node.children = createNodeArray(children);
             node.closingFragment = closingFragment;
@@ -24658,19 +25217,19 @@
         }
         // @api
         function createJsxOpeningFragment() {
-            var node = createBaseNode(279 /* JsxOpeningFragment */);
+            var node = createBaseNode(281 /* JsxOpeningFragment */);
             node.transformFlags |= 2 /* ContainsJsx */;
             return node;
         }
         // @api
         function createJsxJsxClosingFragment() {
-            var node = createBaseNode(280 /* JsxClosingFragment */);
+            var node = createBaseNode(282 /* JsxClosingFragment */);
             node.transformFlags |= 2 /* ContainsJsx */;
             return node;
         }
         // @api
         function createJsxAttribute(name, initializer) {
-            var node = createBaseNode(281 /* JsxAttribute */);
+            var node = createBaseNode(283 /* JsxAttribute */);
             node.name = name;
             node.initializer = initializer;
             node.transformFlags |=
@@ -24688,7 +25247,7 @@
         }
         // @api
         function createJsxAttributes(properties) {
-            var node = createBaseNode(282 /* JsxAttributes */);
+            var node = createBaseNode(284 /* JsxAttributes */);
             node.properties = createNodeArray(properties);
             node.transformFlags |=
                 propagateChildrenFlags(node.properties) |
@@ -24703,7 +25262,7 @@
         }
         // @api
         function createJsxSpreadAttribute(expression) {
-            var node = createBaseNode(283 /* JsxSpreadAttribute */);
+            var node = createBaseNode(285 /* JsxSpreadAttribute */);
             node.expression = expression;
             node.transformFlags |=
                 propagateChildFlags(node.expression) |
@@ -24718,7 +25277,7 @@
         }
         // @api
         function createJsxExpression(dotDotDotToken, expression) {
-            var node = createBaseNode(284 /* JsxExpression */);
+            var node = createBaseNode(286 /* JsxExpression */);
             node.dotDotDotToken = dotDotDotToken;
             node.expression = expression;
             node.transformFlags |=
@@ -24738,7 +25297,7 @@
         //
         // @api
         function createCaseClause(expression, statements) {
-            var node = createBaseNode(285 /* CaseClause */);
+            var node = createBaseNode(287 /* CaseClause */);
             node.expression = parenthesizerRules().parenthesizeExpressionForDisallowedComma(expression);
             node.statements = createNodeArray(statements);
             node.transformFlags |=
@@ -24755,7 +25314,7 @@
         }
         // @api
         function createDefaultClause(statements) {
-            var node = createBaseNode(286 /* DefaultClause */);
+            var node = createBaseNode(288 /* DefaultClause */);
             node.statements = createNodeArray(statements);
             node.transformFlags = propagateChildrenFlags(node.statements);
             return node;
@@ -24768,15 +25327,15 @@
         }
         // @api
         function createHeritageClause(token, types) {
-            var node = createBaseNode(287 /* HeritageClause */);
+            var node = createBaseNode(289 /* HeritageClause */);
             node.token = token;
             node.types = createNodeArray(types);
             node.transformFlags |= propagateChildrenFlags(node.types);
             switch (token) {
-                case 93 /* ExtendsKeyword */:
+                case 94 /* ExtendsKeyword */:
                     node.transformFlags |= 512 /* ContainsES2015 */;
                     break;
-                case 116 /* ImplementsKeyword */:
+                case 117 /* ImplementsKeyword */:
                     node.transformFlags |= 1 /* ContainsTypeScript */;
                     break;
                 default:
@@ -24792,7 +25351,7 @@
         }
         // @api
         function createCatchClause(variableDeclaration, block) {
-            var node = createBaseNode(288 /* CatchClause */);
+            var node = createBaseNode(290 /* CatchClause */);
             variableDeclaration = !ts.isString(variableDeclaration) ? variableDeclaration : createVariableDeclaration(variableDeclaration, 
             /*exclamationToken*/ undefined, 
             /*type*/ undefined, 
@@ -24818,7 +25377,7 @@
         //
         // @api
         function createPropertyAssignment(name, initializer) {
-            var node = createBaseNamedDeclaration(289 /* PropertyAssignment */, 
+            var node = createBaseNamedDeclaration(291 /* PropertyAssignment */, 
             /*decorators*/ undefined, 
             /*modifiers*/ undefined, name);
             node.initializer = parenthesizerRules().parenthesizeExpressionForDisallowedComma(initializer);
@@ -24848,7 +25407,7 @@
         }
         // @api
         function createShorthandPropertyAssignment(name, objectAssignmentInitializer) {
-            var node = createBaseNamedDeclaration(290 /* ShorthandPropertyAssignment */, 
+            var node = createBaseNamedDeclaration(292 /* ShorthandPropertyAssignment */, 
             /*decorators*/ undefined, 
             /*modifiers*/ undefined, name);
             node.objectAssignmentInitializer = objectAssignmentInitializer && parenthesizerRules().parenthesizeExpressionForDisallowedComma(objectAssignmentInitializer);
@@ -24880,7 +25439,7 @@
         }
         // @api
         function createSpreadAssignment(expression) {
-            var node = createBaseNode(291 /* SpreadAssignment */);
+            var node = createBaseNode(293 /* SpreadAssignment */);
             node.expression = parenthesizerRules().parenthesizeExpressionForDisallowedComma(expression);
             node.transformFlags |=
                 propagateChildFlags(node.expression) |
@@ -24899,7 +25458,7 @@
         //
         // @api
         function createEnumMember(name, initializer) {
-            var node = createBaseNode(292 /* EnumMember */);
+            var node = createBaseNode(294 /* EnumMember */);
             node.name = asName(name);
             node.initializer = initializer && parenthesizerRules().parenthesizeExpressionForDisallowedComma(initializer);
             node.transformFlags |=
@@ -24920,7 +25479,7 @@
         //
         // @api
         function createSourceFile(statements, endOfFileToken, flags) {
-            var node = baseFactory.createBaseSourceFileNode(298 /* SourceFile */);
+            var node = baseFactory.createBaseSourceFileNode(300 /* SourceFile */);
             node.statements = createNodeArray(statements);
             node.endOfFileToken = endOfFileToken;
             node.flags |= flags;
@@ -24937,7 +25496,7 @@
             return node;
         }
         function cloneSourceFileWithChanges(source, statements, isDeclarationFile, referencedFiles, typeReferences, hasNoDefaultLib, libReferences) {
-            var node = baseFactory.createBaseSourceFileNode(298 /* SourceFile */);
+            var node = baseFactory.createBaseSourceFileNode(300 /* SourceFile */);
             for (var p in source) {
                 if (p === "emitNode" || ts.hasProperty(node, p) || !ts.hasProperty(source, p))
                     continue;
@@ -24975,7 +25534,7 @@
         // @api
         function createBundle(sourceFiles, prepends) {
             if (prepends === void 0) { prepends = ts.emptyArray; }
-            var node = createBaseNode(299 /* Bundle */);
+            var node = createBaseNode(301 /* Bundle */);
             node.prepends = prepends;
             node.sourceFiles = sourceFiles;
             return node;
@@ -24990,7 +25549,7 @@
         }
         // @api
         function createUnparsedSource(prologues, syntheticReferences, texts) {
-            var node = createBaseNode(300 /* UnparsedSource */);
+            var node = createBaseNode(302 /* UnparsedSource */);
             node.prologues = prologues;
             node.syntheticReferences = syntheticReferences;
             node.texts = texts;
@@ -25008,28 +25567,28 @@
         }
         // @api
         function createUnparsedPrologue(data) {
-            return createBaseUnparsedNode(293 /* UnparsedPrologue */, data);
+            return createBaseUnparsedNode(295 /* UnparsedPrologue */, data);
         }
         // @api
         function createUnparsedPrepend(data, texts) {
-            var node = createBaseUnparsedNode(294 /* UnparsedPrepend */, data);
+            var node = createBaseUnparsedNode(296 /* UnparsedPrepend */, data);
             node.texts = texts;
             return node;
         }
         // @api
         function createUnparsedTextLike(data, internal) {
-            return createBaseUnparsedNode(internal ? 296 /* UnparsedInternalText */ : 295 /* UnparsedText */, data);
+            return createBaseUnparsedNode(internal ? 298 /* UnparsedInternalText */ : 297 /* UnparsedText */, data);
         }
         // @api
         function createUnparsedSyntheticReference(section) {
-            var node = createBaseNode(297 /* UnparsedSyntheticReference */);
+            var node = createBaseNode(299 /* UnparsedSyntheticReference */);
             node.data = section.data;
             node.section = section;
             return node;
         }
         // @api
         function createInputFiles() {
-            var node = createBaseNode(301 /* InputFiles */);
+            var node = createBaseNode(303 /* InputFiles */);
             node.javascriptText = "";
             node.declarationText = "";
             return node;
@@ -25040,7 +25599,7 @@
         // @api
         function createSyntheticExpression(type, isSpread, tupleNameSource) {
             if (isSpread === void 0) { isSpread = false; }
-            var node = createBaseNode(228 /* SyntheticExpression */);
+            var node = createBaseNode(230 /* SyntheticExpression */);
             node.type = type;
             node.isSpread = isSpread;
             node.tupleNameSource = tupleNameSource;
@@ -25048,7 +25607,7 @@
         }
         // @api
         function createSyntaxList(children) {
-            var node = createBaseNode(338 /* SyntaxList */);
+            var node = createBaseNode(343 /* SyntaxList */);
             node._children = children;
             return node;
         }
@@ -25063,7 +25622,7 @@
          */
         // @api
         function createNotEmittedStatement(original) {
-            var node = createBaseNode(339 /* NotEmittedStatement */);
+            var node = createBaseNode(344 /* NotEmittedStatement */);
             node.original = original;
             ts.setTextRange(node, original);
             return node;
@@ -25077,7 +25636,7 @@
          */
         // @api
         function createPartiallyEmittedExpression(expression, original) {
-            var node = createBaseNode(340 /* PartiallyEmittedExpression */);
+            var node = createBaseNode(345 /* PartiallyEmittedExpression */);
             node.expression = expression;
             node.original = original;
             node.transformFlags |=
@@ -25105,7 +25664,7 @@
         }
         // @api
         function createCommaListExpression(elements) {
-            var node = createBaseNode(341 /* CommaListExpression */);
+            var node = createBaseNode(346 /* CommaListExpression */);
             node.elements = createNodeArray(ts.sameFlatMap(elements, flattenCommaElements));
             node.transformFlags |= propagateChildrenFlags(node.elements);
             return node;
@@ -25122,7 +25681,7 @@
          */
         // @api
         function createEndOfDeclarationMarker(original) {
-            var node = createBaseNode(343 /* EndOfDeclarationMarker */);
+            var node = createBaseNode(348 /* EndOfDeclarationMarker */);
             node.emitNode = {};
             node.original = original;
             return node;
@@ -25133,14 +25692,14 @@
          */
         // @api
         function createMergeDeclarationMarker(original) {
-            var node = createBaseNode(342 /* MergeDeclarationMarker */);
+            var node = createBaseNode(347 /* MergeDeclarationMarker */);
             node.emitNode = {};
             node.original = original;
             return node;
         }
         // @api
         function createSyntheticReferenceExpression(expression, thisArg) {
-            var node = createBaseNode(344 /* SyntheticReferenceExpression */);
+            var node = createBaseNode(349 /* SyntheticReferenceExpression */);
             node.expression = expression;
             node.thisArg = thisArg;
             node.transformFlags |=
@@ -25162,9 +25721,9 @@
             if (node === undefined) {
                 return node;
             }
-            var clone = ts.isSourceFile(node) ? baseFactory.createBaseSourceFileNode(298 /* SourceFile */) :
-                ts.isIdentifier(node) ? baseFactory.createBaseIdentifierNode(78 /* Identifier */) :
-                    ts.isPrivateIdentifier(node) ? baseFactory.createBasePrivateIdentifierNode(79 /* PrivateIdentifier */) :
+            var clone = ts.isSourceFile(node) ? baseFactory.createBaseSourceFileNode(300 /* SourceFile */) :
+                ts.isIdentifier(node) ? baseFactory.createBaseIdentifierNode(79 /* Identifier */) :
+                    ts.isPrivateIdentifier(node) ? baseFactory.createBasePrivateIdentifierNode(80 /* PrivateIdentifier */) :
                         !ts.isNodeKind(node.kind) ? baseFactory.createBaseTokenNode(node.kind) :
                             baseFactory.createBaseNode(node.kind);
             clone.flags |= (node.flags & ~8 /* Synthesized */);
@@ -25225,14 +25784,20 @@
                 : factory.createStrictEquality(createTypeOfExpression(value), createStringLiteral(tag));
         }
         function createMethodCall(object, methodName, argumentsList) {
+            // Preserve the optionality of `object`.
+            if (ts.isCallChain(object)) {
+                return createCallChain(createPropertyAccessChain(object, /*questionDotToken*/ undefined, methodName), 
+                /*questionDotToken*/ undefined, 
+                /*typeArguments*/ undefined, argumentsList);
+            }
             return createCallExpression(createPropertyAccessExpression(object, methodName), 
             /*typeArguments*/ undefined, argumentsList);
         }
         function createFunctionBindCall(target, thisArg, argumentsList) {
-            return createMethodCall(target, "bind", __spreadArray([thisArg], argumentsList));
+            return createMethodCall(target, "bind", __spreadArray([thisArg], argumentsList, true));
         }
         function createFunctionCallCall(target, thisArg, argumentsList) {
-            return createMethodCall(target, "call", __spreadArray([thisArg], argumentsList));
+            return createMethodCall(target, "call", __spreadArray([thisArg], argumentsList, true));
         }
         function createFunctionApplyCall(target, thisArg, argumentsExpression) {
             return createMethodCall(target, "apply", [thisArg, argumentsExpression]);
@@ -25249,6 +25814,12 @@
         function createObjectDefinePropertyCall(target, propertyName, attributes) {
             return createGlobalMethodCall("Object", "defineProperty", [target, asExpression(propertyName), attributes]);
         }
+        function createReflectGetCall(target, propertyKey, receiver) {
+            return createGlobalMethodCall("Reflect", "get", receiver ? [target, propertyKey, receiver] : [target, propertyKey]);
+        }
+        function createReflectSetCall(target, propertyKey, value, receiver) {
+            return createGlobalMethodCall("Reflect", "set", receiver ? [target, propertyKey, value, receiver] : [target, propertyKey, value]);
+        }
         function tryAddPropertyAssignment(properties, propertyName, expression) {
             if (expression) {
                 properties.push(createPropertyAssignment(propertyName, expression));
@@ -25269,11 +25840,11 @@
         }
         function updateOuterExpression(outerExpression, expression) {
             switch (outerExpression.kind) {
-                case 208 /* ParenthesizedExpression */: return updateParenthesizedExpression(outerExpression, expression);
-                case 207 /* TypeAssertionExpression */: return updateTypeAssertion(outerExpression, outerExpression.type, expression);
-                case 225 /* AsExpression */: return updateAsExpression(outerExpression, expression, outerExpression.type);
-                case 226 /* NonNullExpression */: return updateNonNullExpression(outerExpression, expression);
-                case 340 /* PartiallyEmittedExpression */: return updatePartiallyEmittedExpression(outerExpression, expression);
+                case 210 /* ParenthesizedExpression */: return updateParenthesizedExpression(outerExpression, expression);
+                case 209 /* TypeAssertionExpression */: return updateTypeAssertion(outerExpression, outerExpression.type, expression);
+                case 227 /* AsExpression */: return updateAsExpression(outerExpression, expression, outerExpression.type);
+                case 228 /* NonNullExpression */: return updateNonNullExpression(outerExpression, expression);
+                case 345 /* PartiallyEmittedExpression */: return updatePartiallyEmittedExpression(outerExpression, expression);
             }
         }
         /**
@@ -25320,20 +25891,20 @@
         function shouldBeCapturedInTempVariable(node, cacheIdentifiers) {
             var target = ts.skipParentheses(node);
             switch (target.kind) {
-                case 78 /* Identifier */:
+                case 79 /* Identifier */:
                     return cacheIdentifiers;
-                case 107 /* ThisKeyword */:
+                case 108 /* ThisKeyword */:
                 case 8 /* NumericLiteral */:
                 case 9 /* BigIntLiteral */:
                 case 10 /* StringLiteral */:
                     return false;
-                case 200 /* ArrayLiteralExpression */:
+                case 202 /* ArrayLiteralExpression */:
                     var elements = target.elements;
                     if (elements.length === 0) {
                         return false;
                     }
                     return true;
-                case 201 /* ObjectLiteralExpression */:
+                case 203 /* ObjectLiteralExpression */:
                     return target.properties.length > 0;
                 default:
                     return true;
@@ -25389,6 +25960,23 @@
             }
             return { target: target, thisArg: thisArg };
         }
+        function createAssignmentTargetWrapper(paramName, expression) {
+            return createPropertyAccessExpression(
+            // Explicit parens required because of v8 regression (https://bugs.chromium.org/p/v8/issues/detail?id=9560)
+            createParenthesizedExpression(createObjectLiteralExpression([
+                createSetAccessorDeclaration(
+                /*decorators*/ undefined, 
+                /*modifiers*/ undefined, "value", [createParameterDeclaration(
+                    /*decorators*/ undefined, 
+                    /*modifiers*/ undefined, 
+                    /*dotDotDotToken*/ undefined, paramName, 
+                    /*questionToken*/ undefined, 
+                    /*type*/ undefined, 
+                    /*initializer*/ undefined)], createBlock([
+                    createExpressionStatement(expression)
+                ]))
+            ])), "value");
+        }
         function inlineExpressions(expressions) {
             // Avoid deeply nested comma expressions as traversing them during emit can result in "Maximum call
             // stack size exceeded" errors.
@@ -25569,7 +26157,7 @@
         function ensureUseStrict(statements) {
             var foundUseStrict = ts.findUseStrictPrologue(statements);
             if (!foundUseStrict) {
-                return ts.setTextRange(createNodeArray(__spreadArray([createUseStrictPrologue()], statements)), statements);
+                return ts.setTextRange(createNodeArray(__spreadArray([createUseStrictPrologue()], statements, true)), statements);
             }
             return statements;
         }
@@ -25636,20 +26224,20 @@
             var left = ts.isNodeArray(statements) ? statements.slice() : statements;
             // splice other custom prologues from right into left
             if (rightCustomPrologueEnd > rightHoistedVariablesEnd) {
-                left.splice.apply(left, __spreadArray([leftHoistedVariablesEnd, 0], declarations.slice(rightHoistedVariablesEnd, rightCustomPrologueEnd)));
+                left.splice.apply(left, __spreadArray([leftHoistedVariablesEnd, 0], declarations.slice(rightHoistedVariablesEnd, rightCustomPrologueEnd), false));
             }
             // splice hoisted variables from right into left
             if (rightHoistedVariablesEnd > rightHoistedFunctionsEnd) {
-                left.splice.apply(left, __spreadArray([leftHoistedFunctionsEnd, 0], declarations.slice(rightHoistedFunctionsEnd, rightHoistedVariablesEnd)));
+                left.splice.apply(left, __spreadArray([leftHoistedFunctionsEnd, 0], declarations.slice(rightHoistedFunctionsEnd, rightHoistedVariablesEnd), false));
             }
             // splice hoisted functions from right into left
             if (rightHoistedFunctionsEnd > rightStandardPrologueEnd) {
-                left.splice.apply(left, __spreadArray([leftStandardPrologueEnd, 0], declarations.slice(rightStandardPrologueEnd, rightHoistedFunctionsEnd)));
+                left.splice.apply(left, __spreadArray([leftStandardPrologueEnd, 0], declarations.slice(rightStandardPrologueEnd, rightHoistedFunctionsEnd), false));
             }
             // splice standard prologues from right into left (that are not already in left)
             if (rightStandardPrologueEnd > 0) {
                 if (leftStandardPrologueEnd === 0) {
-                    left.splice.apply(left, __spreadArray([0, 0], declarations.slice(0, rightStandardPrologueEnd)));
+                    left.splice.apply(left, __spreadArray([0, 0], declarations.slice(0, rightStandardPrologueEnd), false));
                 }
                 else {
                     var leftPrologues = new ts.Map();
@@ -25736,24 +26324,24 @@
     }
     function getDefaultTagNameForKind(kind) {
         switch (kind) {
-            case 333 /* JSDocTypeTag */: return "type";
-            case 331 /* JSDocReturnTag */: return "returns";
-            case 332 /* JSDocThisTag */: return "this";
-            case 329 /* JSDocEnumTag */: return "enum";
-            case 320 /* JSDocAuthorTag */: return "author";
-            case 322 /* JSDocClassTag */: return "class";
-            case 323 /* JSDocPublicTag */: return "public";
-            case 324 /* JSDocPrivateTag */: return "private";
-            case 325 /* JSDocProtectedTag */: return "protected";
-            case 326 /* JSDocReadonlyTag */: return "readonly";
-            case 327 /* JSDocOverrideTag */: return "override";
-            case 334 /* JSDocTemplateTag */: return "template";
-            case 335 /* JSDocTypedefTag */: return "typedef";
-            case 330 /* JSDocParameterTag */: return "param";
-            case 337 /* JSDocPropertyTag */: return "prop";
-            case 328 /* JSDocCallbackTag */: return "callback";
-            case 318 /* JSDocAugmentsTag */: return "augments";
-            case 319 /* JSDocImplementsTag */: return "implements";
+            case 338 /* JSDocTypeTag */: return "type";
+            case 336 /* JSDocReturnTag */: return "returns";
+            case 337 /* JSDocThisTag */: return "this";
+            case 334 /* JSDocEnumTag */: return "enum";
+            case 325 /* JSDocAuthorTag */: return "author";
+            case 327 /* JSDocClassTag */: return "class";
+            case 328 /* JSDocPublicTag */: return "public";
+            case 329 /* JSDocPrivateTag */: return "private";
+            case 330 /* JSDocProtectedTag */: return "protected";
+            case 331 /* JSDocReadonlyTag */: return "readonly";
+            case 332 /* JSDocOverrideTag */: return "override";
+            case 339 /* JSDocTemplateTag */: return "template";
+            case 340 /* JSDocTypedefTag */: return "typedef";
+            case 335 /* JSDocParameterTag */: return "param";
+            case 342 /* JSDocPropertyTag */: return "prop";
+            case 333 /* JSDocCallbackTag */: return "callback";
+            case 323 /* JSDocAugmentsTag */: return "augments";
+            case 324 /* JSDocImplementsTag */: return "implements";
             default:
                 return ts.Debug.fail("Unsupported kind: " + ts.Debug.formatSyntaxKind(kind));
         }
@@ -25781,7 +26369,7 @@
                 break;
         }
         var token = rawTextScanner.scan();
-        if (token === 23 /* CloseBracketToken */) {
+        if (token === 19 /* CloseBraceToken */) {
             token = rawTextScanner.reScanTemplateToken(/*isTaggedTemplate*/ false);
         }
         if (rawTextScanner.isUnterminated()) {
@@ -25809,7 +26397,7 @@
         return propagateChildFlags(node) & ~16777216 /* ContainsPossibleTopLevelAwait */;
     }
     function propagatePropertyNameFlagsOfChild(node, transformFlags) {
-        return transformFlags | (node.transformFlags & 8192 /* PropertyNamePropagatingFlags */);
+        return transformFlags | (node.transformFlags & 33562624 /* PropertyNamePropagatingFlags */);
     }
     function propagateChildFlags(child) {
         if (!child)
@@ -25833,69 +26421,69 @@
      */
     /* @internal */
     function getTransformFlagsSubtreeExclusions(kind) {
-        if (kind >= 173 /* FirstTypeNode */ && kind <= 196 /* LastTypeNode */) {
+        if (kind >= 175 /* FirstTypeNode */ && kind <= 198 /* LastTypeNode */) {
             return -2 /* TypeExcludes */;
         }
         switch (kind) {
-            case 204 /* CallExpression */:
-            case 205 /* NewExpression */:
-            case 200 /* ArrayLiteralExpression */:
+            case 206 /* CallExpression */:
+            case 207 /* NewExpression */:
+            case 202 /* ArrayLiteralExpression */:
                 return 536887296 /* ArrayLiteralOrCallOrNewExcludes */;
-            case 257 /* ModuleDeclaration */:
-                return 555888640 /* ModuleExcludes */;
-            case 161 /* Parameter */:
+            case 259 /* ModuleDeclaration */:
+                return 589443072 /* ModuleExcludes */;
+            case 162 /* Parameter */:
                 return 536870912 /* ParameterExcludes */;
-            case 210 /* ArrowFunction */:
+            case 212 /* ArrowFunction */:
                 return 557748224 /* ArrowFunctionExcludes */;
-            case 209 /* FunctionExpression */:
-            case 252 /* FunctionDeclaration */:
-                return 557756416 /* FunctionExcludes */;
-            case 251 /* VariableDeclarationList */:
+            case 211 /* FunctionExpression */:
+            case 254 /* FunctionDeclaration */:
+                return 591310848 /* FunctionExcludes */;
+            case 253 /* VariableDeclarationList */:
                 return 537165824 /* VariableDeclarationListExcludes */;
-            case 253 /* ClassDeclaration */:
-            case 222 /* ClassExpression */:
+            case 255 /* ClassDeclaration */:
+            case 224 /* ClassExpression */:
                 return 536940544 /* ClassExcludes */;
-            case 167 /* Constructor */:
-                return 557752320 /* ConstructorExcludes */;
-            case 164 /* PropertyDeclaration */:
-                return 536879104 /* PropertyExcludes */;
-            case 166 /* MethodDeclaration */:
-            case 168 /* GetAccessor */:
-            case 169 /* SetAccessor */:
-                return 540975104 /* MethodOrAccessorExcludes */;
-            case 128 /* AnyKeyword */:
-            case 144 /* NumberKeyword */:
-            case 155 /* BigIntKeyword */:
-            case 141 /* NeverKeyword */:
-            case 147 /* StringKeyword */:
-            case 145 /* ObjectKeyword */:
-            case 131 /* BooleanKeyword */:
-            case 148 /* SymbolKeyword */:
-            case 113 /* VoidKeyword */:
-            case 160 /* TypeParameter */:
-            case 163 /* PropertySignature */:
-            case 165 /* MethodSignature */:
-            case 170 /* CallSignature */:
-            case 171 /* ConstructSignature */:
-            case 172 /* IndexSignature */:
-            case 254 /* InterfaceDeclaration */:
-            case 255 /* TypeAliasDeclaration */:
+            case 169 /* Constructor */:
+                return 591306752 /* ConstructorExcludes */;
+            case 165 /* PropertyDeclaration */:
+                return 570433536 /* PropertyExcludes */;
+            case 167 /* MethodDeclaration */:
+            case 170 /* GetAccessor */:
+            case 171 /* SetAccessor */:
+                return 574529536 /* MethodOrAccessorExcludes */;
+            case 129 /* AnyKeyword */:
+            case 145 /* NumberKeyword */:
+            case 156 /* BigIntKeyword */:
+            case 142 /* NeverKeyword */:
+            case 148 /* StringKeyword */:
+            case 146 /* ObjectKeyword */:
+            case 132 /* BooleanKeyword */:
+            case 149 /* SymbolKeyword */:
+            case 114 /* VoidKeyword */:
+            case 161 /* TypeParameter */:
+            case 164 /* PropertySignature */:
+            case 166 /* MethodSignature */:
+            case 172 /* CallSignature */:
+            case 173 /* ConstructSignature */:
+            case 174 /* IndexSignature */:
+            case 256 /* InterfaceDeclaration */:
+            case 257 /* TypeAliasDeclaration */:
                 return -2 /* TypeExcludes */;
-            case 201 /* ObjectLiteralExpression */:
+            case 203 /* ObjectLiteralExpression */:
                 return 536973312 /* ObjectLiteralExcludes */;
-            case 288 /* CatchClause */:
+            case 290 /* CatchClause */:
                 return 536903680 /* CatchClauseExcludes */;
-            case 197 /* ObjectBindingPattern */:
-            case 198 /* ArrayBindingPattern */:
+            case 199 /* ObjectBindingPattern */:
+            case 200 /* ArrayBindingPattern */:
                 return 536887296 /* BindingPatternExcludes */;
-            case 207 /* TypeAssertionExpression */:
-            case 225 /* AsExpression */:
-            case 340 /* PartiallyEmittedExpression */:
-            case 208 /* ParenthesizedExpression */:
-            case 105 /* SuperKeyword */:
+            case 209 /* TypeAssertionExpression */:
+            case 227 /* AsExpression */:
+            case 345 /* PartiallyEmittedExpression */:
+            case 210 /* ParenthesizedExpression */:
+            case 106 /* SuperKeyword */:
                 return 536870912 /* OuterExpressionExcludes */;
-            case 202 /* PropertyAccessExpression */:
-            case 203 /* ElementAccessExpression */:
+            case 204 /* PropertyAccessExpression */:
+            case 205 /* ElementAccessExpression */:
                 return 536870912 /* PropertyAccessExcludes */;
             default:
                 return 536870912 /* NodeExcludes */;
@@ -26152,7 +26740,7 @@
         if (trailingComments)
             destEmitNode.trailingComments = ts.addRange(trailingComments.slice(), destEmitNode.trailingComments);
         if (flags)
-            destEmitNode.flags = flags;
+            destEmitNode.flags = flags & ~268435456 /* Immutable */;
         if (commentRange)
             destEmitNode.commentRange = commentRange;
         if (sourceMapRange)
@@ -26194,7 +26782,7 @@
                 // To avoid holding onto transformation artifacts, we keep track of any
                 // parse tree node we are annotating. This allows us to clean them up after
                 // all transformations have completed.
-                if (node.kind === 298 /* SourceFile */) {
+                if (node.kind === 300 /* SourceFile */) {
                     return node.emitNode = { annotatedNodes: [node] };
                 }
                 var sourceFile = (_a = ts.getSourceFileOfNode(ts.getParseTreeNode(ts.getSourceFileOfNode(node)))) !== null && _a !== void 0 ? _a : ts.Debug.fail("Could not determine parsed source file.");
@@ -26202,6 +26790,9 @@
             }
             node.emitNode = {};
         }
+        else {
+            ts.Debug.assert(!(node.emitNode.flags & 268435456 /* Immutable */), "Invalid attempt to mutate an immutable node.");
+        }
         return node.emitNode;
     }
     ts.getOrCreateEmitNode = getOrCreateEmitNode;
@@ -26459,6 +27050,8 @@
 (function (ts) {
     function createEmitHelperFactory(context) {
         var factory = context.factory;
+        var immutableTrue = ts.memoize(function () { return ts.setEmitFlags(factory.createTrue(), 268435456 /* Immutable */); });
+        var immutableFalse = ts.memoize(function () { return ts.setEmitFlags(factory.createFalse(), 268435456 /* Immutable */); });
         return {
             getUnscopedHelperName: getUnscopedHelperName,
             // TypeScript Helpers
@@ -26629,10 +27222,10 @@
             return factory.createCallExpression(getUnscopedHelperName("__makeTemplateObject"), 
             /*typeArguments*/ undefined, [cooked, raw]);
         }
-        function createSpreadArrayHelper(to, from) {
+        function createSpreadArrayHelper(to, from, packFrom) {
             context.requestEmitHelper(ts.spreadArrayHelper);
             return factory.createCallExpression(getUnscopedHelperName("__spreadArray"), 
-            /*typeArguments*/ undefined, [to, from]);
+            /*typeArguments*/ undefined, [to, from, packFrom ? immutableTrue() : immutableFalse()]);
         }
         // ES2015 Destructuring Helpers
         function createValuesHelper(expression) {
@@ -26657,7 +27250,7 @@
         function createCreateBindingHelper(module, inputName, outputName) {
             context.requestEmitHelper(ts.createBindingHelper);
             return factory.createCallExpression(getUnscopedHelperName("__createBinding"), 
-            /*typeArguments*/ undefined, __spreadArray([factory.createIdentifier("exports"), module, inputName], (outputName ? [outputName] : [])));
+            /*typeArguments*/ undefined, __spreadArray([factory.createIdentifier("exports"), module, inputName], (outputName ? [outputName] : []), true));
         }
         function createImportStarHelper(expression) {
             context.requestEmitHelper(ts.importStarHelper);
@@ -26834,7 +27427,7 @@
         name: "typescript:spreadArray",
         importName: "__spreadArray",
         scoped: false,
-        text: "\n            var __spreadArray = (this && this.__spreadArray) || function (to, from) {\n                for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)\n                    to[j] = from[i];\n                return to;\n            };"
+        text: "\n            var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {\n                if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n                    if (ar || !(i in from)) {\n                        if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n                        ar[i] = from[i];\n                    }\n                }\n                return to.concat(ar || Array.prototype.slice.call(from));\n            };"
     };
     // ES2015 Destructuring Helpers
     ts.valuesHelper = {
@@ -27102,7 +27695,7 @@
     function isCallToHelper(firstSegment, helperName) {
         return ts.isCallExpression(firstSegment)
             && ts.isIdentifier(firstSegment.expression)
-            && (ts.getEmitFlags(firstSegment.expression) & 4096 /* HelperName */)
+            && (ts.getEmitFlags(firstSegment.expression) & 4096 /* HelperName */) !== 0
             && firstSegment.expression.escapedText === helperName;
     }
     ts.isCallToHelper = isCallToHelper;
@@ -27196,639 +27789,648 @@
     ts.isEqualsGreaterThanToken = isEqualsGreaterThanToken;
     // Identifiers
     function isIdentifier(node) {
-        return node.kind === 78 /* Identifier */;
+        return node.kind === 79 /* Identifier */;
     }
     ts.isIdentifier = isIdentifier;
     function isPrivateIdentifier(node) {
-        return node.kind === 79 /* PrivateIdentifier */;
+        return node.kind === 80 /* PrivateIdentifier */;
     }
     ts.isPrivateIdentifier = isPrivateIdentifier;
     // Reserved Words
     /* @internal */
     function isExportModifier(node) {
-        return node.kind === 92 /* ExportKeyword */;
+        return node.kind === 93 /* ExportKeyword */;
     }
     ts.isExportModifier = isExportModifier;
     /* @internal */
     function isAsyncModifier(node) {
-        return node.kind === 129 /* AsyncKeyword */;
+        return node.kind === 130 /* AsyncKeyword */;
     }
     ts.isAsyncModifier = isAsyncModifier;
     /* @internal */
     function isAssertsKeyword(node) {
-        return node.kind === 127 /* AssertsKeyword */;
+        return node.kind === 128 /* AssertsKeyword */;
     }
     ts.isAssertsKeyword = isAssertsKeyword;
     /* @internal */
     function isAwaitKeyword(node) {
-        return node.kind === 130 /* AwaitKeyword */;
+        return node.kind === 131 /* AwaitKeyword */;
     }
     ts.isAwaitKeyword = isAwaitKeyword;
     /* @internal */
     function isReadonlyKeyword(node) {
-        return node.kind === 142 /* ReadonlyKeyword */;
+        return node.kind === 143 /* ReadonlyKeyword */;
     }
     ts.isReadonlyKeyword = isReadonlyKeyword;
     /* @internal */
     function isStaticModifier(node) {
-        return node.kind === 123 /* StaticKeyword */;
+        return node.kind === 124 /* StaticKeyword */;
     }
     ts.isStaticModifier = isStaticModifier;
+    /* @internal */
+    function isAbstractModifier(node) {
+        return node.kind === 126 /* AbstractKeyword */;
+    }
+    ts.isAbstractModifier = isAbstractModifier;
     /*@internal*/
     function isSuperKeyword(node) {
-        return node.kind === 105 /* SuperKeyword */;
+        return node.kind === 106 /* SuperKeyword */;
     }
     ts.isSuperKeyword = isSuperKeyword;
     /*@internal*/
     function isImportKeyword(node) {
-        return node.kind === 99 /* ImportKeyword */;
+        return node.kind === 100 /* ImportKeyword */;
     }
     ts.isImportKeyword = isImportKeyword;
     // Names
     function isQualifiedName(node) {
-        return node.kind === 158 /* QualifiedName */;
+        return node.kind === 159 /* QualifiedName */;
     }
     ts.isQualifiedName = isQualifiedName;
     function isComputedPropertyName(node) {
-        return node.kind === 159 /* ComputedPropertyName */;
+        return node.kind === 160 /* ComputedPropertyName */;
     }
     ts.isComputedPropertyName = isComputedPropertyName;
     // Signature elements
     function isTypeParameterDeclaration(node) {
-        return node.kind === 160 /* TypeParameter */;
+        return node.kind === 161 /* TypeParameter */;
     }
     ts.isTypeParameterDeclaration = isTypeParameterDeclaration;
     // TODO(rbuckton): Rename to 'isParameterDeclaration'
     function isParameter(node) {
-        return node.kind === 161 /* Parameter */;
+        return node.kind === 162 /* Parameter */;
     }
     ts.isParameter = isParameter;
     function isDecorator(node) {
-        return node.kind === 162 /* Decorator */;
+        return node.kind === 163 /* Decorator */;
     }
     ts.isDecorator = isDecorator;
     // TypeMember
     function isPropertySignature(node) {
-        return node.kind === 163 /* PropertySignature */;
+        return node.kind === 164 /* PropertySignature */;
     }
     ts.isPropertySignature = isPropertySignature;
     function isPropertyDeclaration(node) {
-        return node.kind === 164 /* PropertyDeclaration */;
+        return node.kind === 165 /* PropertyDeclaration */;
     }
     ts.isPropertyDeclaration = isPropertyDeclaration;
     function isMethodSignature(node) {
-        return node.kind === 165 /* MethodSignature */;
+        return node.kind === 166 /* MethodSignature */;
     }
     ts.isMethodSignature = isMethodSignature;
     function isMethodDeclaration(node) {
-        return node.kind === 166 /* MethodDeclaration */;
+        return node.kind === 167 /* MethodDeclaration */;
     }
     ts.isMethodDeclaration = isMethodDeclaration;
+    function isClassStaticBlockDeclaration(node) {
+        return node.kind === 168 /* ClassStaticBlockDeclaration */;
+    }
+    ts.isClassStaticBlockDeclaration = isClassStaticBlockDeclaration;
     function isConstructorDeclaration(node) {
-        return node.kind === 167 /* Constructor */;
+        return node.kind === 169 /* Constructor */;
     }
     ts.isConstructorDeclaration = isConstructorDeclaration;
     function isGetAccessorDeclaration(node) {
-        return node.kind === 168 /* GetAccessor */;
+        return node.kind === 170 /* GetAccessor */;
     }
     ts.isGetAccessorDeclaration = isGetAccessorDeclaration;
     function isSetAccessorDeclaration(node) {
-        return node.kind === 169 /* SetAccessor */;
+        return node.kind === 171 /* SetAccessor */;
     }
     ts.isSetAccessorDeclaration = isSetAccessorDeclaration;
     function isCallSignatureDeclaration(node) {
-        return node.kind === 170 /* CallSignature */;
+        return node.kind === 172 /* CallSignature */;
     }
     ts.isCallSignatureDeclaration = isCallSignatureDeclaration;
     function isConstructSignatureDeclaration(node) {
-        return node.kind === 171 /* ConstructSignature */;
+        return node.kind === 173 /* ConstructSignature */;
     }
     ts.isConstructSignatureDeclaration = isConstructSignatureDeclaration;
     function isIndexSignatureDeclaration(node) {
-        return node.kind === 172 /* IndexSignature */;
+        return node.kind === 174 /* IndexSignature */;
     }
     ts.isIndexSignatureDeclaration = isIndexSignatureDeclaration;
     // Type
     function isTypePredicateNode(node) {
-        return node.kind === 173 /* TypePredicate */;
+        return node.kind === 175 /* TypePredicate */;
     }
     ts.isTypePredicateNode = isTypePredicateNode;
     function isTypeReferenceNode(node) {
-        return node.kind === 174 /* TypeReference */;
+        return node.kind === 176 /* TypeReference */;
     }
     ts.isTypeReferenceNode = isTypeReferenceNode;
     function isFunctionTypeNode(node) {
-        return node.kind === 175 /* FunctionType */;
+        return node.kind === 177 /* FunctionType */;
     }
     ts.isFunctionTypeNode = isFunctionTypeNode;
     function isConstructorTypeNode(node) {
-        return node.kind === 176 /* ConstructorType */;
+        return node.kind === 178 /* ConstructorType */;
     }
     ts.isConstructorTypeNode = isConstructorTypeNode;
     function isTypeQueryNode(node) {
-        return node.kind === 177 /* TypeQuery */;
+        return node.kind === 179 /* TypeQuery */;
     }
     ts.isTypeQueryNode = isTypeQueryNode;
     function isTypeLiteralNode(node) {
-        return node.kind === 178 /* TypeLiteral */;
+        return node.kind === 180 /* TypeLiteral */;
     }
     ts.isTypeLiteralNode = isTypeLiteralNode;
     function isArrayTypeNode(node) {
-        return node.kind === 179 /* ArrayType */;
+        return node.kind === 181 /* ArrayType */;
     }
     ts.isArrayTypeNode = isArrayTypeNode;
     function isTupleTypeNode(node) {
-        return node.kind === 180 /* TupleType */;
+        return node.kind === 182 /* TupleType */;
     }
     ts.isTupleTypeNode = isTupleTypeNode;
     function isNamedTupleMember(node) {
-        return node.kind === 193 /* NamedTupleMember */;
+        return node.kind === 195 /* NamedTupleMember */;
     }
     ts.isNamedTupleMember = isNamedTupleMember;
     function isOptionalTypeNode(node) {
-        return node.kind === 181 /* OptionalType */;
+        return node.kind === 183 /* OptionalType */;
     }
     ts.isOptionalTypeNode = isOptionalTypeNode;
     function isRestTypeNode(node) {
-        return node.kind === 182 /* RestType */;
+        return node.kind === 184 /* RestType */;
     }
     ts.isRestTypeNode = isRestTypeNode;
     function isUnionTypeNode(node) {
-        return node.kind === 183 /* UnionType */;
+        return node.kind === 185 /* UnionType */;
     }
     ts.isUnionTypeNode = isUnionTypeNode;
     function isIntersectionTypeNode(node) {
-        return node.kind === 184 /* IntersectionType */;
+        return node.kind === 186 /* IntersectionType */;
     }
     ts.isIntersectionTypeNode = isIntersectionTypeNode;
     function isConditionalTypeNode(node) {
-        return node.kind === 185 /* ConditionalType */;
+        return node.kind === 187 /* ConditionalType */;
     }
     ts.isConditionalTypeNode = isConditionalTypeNode;
     function isInferTypeNode(node) {
-        return node.kind === 186 /* InferType */;
+        return node.kind === 188 /* InferType */;
     }
     ts.isInferTypeNode = isInferTypeNode;
     function isParenthesizedTypeNode(node) {
-        return node.kind === 187 /* ParenthesizedType */;
+        return node.kind === 189 /* ParenthesizedType */;
     }
     ts.isParenthesizedTypeNode = isParenthesizedTypeNode;
     function isThisTypeNode(node) {
-        return node.kind === 188 /* ThisType */;
+        return node.kind === 190 /* ThisType */;
     }
     ts.isThisTypeNode = isThisTypeNode;
     function isTypeOperatorNode(node) {
-        return node.kind === 189 /* TypeOperator */;
+        return node.kind === 191 /* TypeOperator */;
     }
     ts.isTypeOperatorNode = isTypeOperatorNode;
     function isIndexedAccessTypeNode(node) {
-        return node.kind === 190 /* IndexedAccessType */;
+        return node.kind === 192 /* IndexedAccessType */;
     }
     ts.isIndexedAccessTypeNode = isIndexedAccessTypeNode;
     function isMappedTypeNode(node) {
-        return node.kind === 191 /* MappedType */;
+        return node.kind === 193 /* MappedType */;
     }
     ts.isMappedTypeNode = isMappedTypeNode;
     function isLiteralTypeNode(node) {
-        return node.kind === 192 /* LiteralType */;
+        return node.kind === 194 /* LiteralType */;
     }
     ts.isLiteralTypeNode = isLiteralTypeNode;
     function isImportTypeNode(node) {
-        return node.kind === 196 /* ImportType */;
+        return node.kind === 198 /* ImportType */;
     }
     ts.isImportTypeNode = isImportTypeNode;
     function isTemplateLiteralTypeSpan(node) {
-        return node.kind === 195 /* TemplateLiteralTypeSpan */;
+        return node.kind === 197 /* TemplateLiteralTypeSpan */;
     }
     ts.isTemplateLiteralTypeSpan = isTemplateLiteralTypeSpan;
     function isTemplateLiteralTypeNode(node) {
-        return node.kind === 194 /* TemplateLiteralType */;
+        return node.kind === 196 /* TemplateLiteralType */;
     }
     ts.isTemplateLiteralTypeNode = isTemplateLiteralTypeNode;
     // Binding patterns
     function isObjectBindingPattern(node) {
-        return node.kind === 197 /* ObjectBindingPattern */;
+        return node.kind === 199 /* ObjectBindingPattern */;
     }
     ts.isObjectBindingPattern = isObjectBindingPattern;
     function isArrayBindingPattern(node) {
-        return node.kind === 198 /* ArrayBindingPattern */;
+        return node.kind === 200 /* ArrayBindingPattern */;
     }
     ts.isArrayBindingPattern = isArrayBindingPattern;
     function isBindingElement(node) {
-        return node.kind === 199 /* BindingElement */;
+        return node.kind === 201 /* BindingElement */;
     }
     ts.isBindingElement = isBindingElement;
     // Expression
     function isArrayLiteralExpression(node) {
-        return node.kind === 200 /* ArrayLiteralExpression */;
+        return node.kind === 202 /* ArrayLiteralExpression */;
     }
     ts.isArrayLiteralExpression = isArrayLiteralExpression;
     function isObjectLiteralExpression(node) {
-        return node.kind === 201 /* ObjectLiteralExpression */;
+        return node.kind === 203 /* ObjectLiteralExpression */;
     }
     ts.isObjectLiteralExpression = isObjectLiteralExpression;
     function isPropertyAccessExpression(node) {
-        return node.kind === 202 /* PropertyAccessExpression */;
+        return node.kind === 204 /* PropertyAccessExpression */;
     }
     ts.isPropertyAccessExpression = isPropertyAccessExpression;
     function isElementAccessExpression(node) {
-        return node.kind === 203 /* ElementAccessExpression */;
+        return node.kind === 205 /* ElementAccessExpression */;
     }
     ts.isElementAccessExpression = isElementAccessExpression;
     function isCallExpression(node) {
-        return node.kind === 204 /* CallExpression */;
+        return node.kind === 206 /* CallExpression */;
     }
     ts.isCallExpression = isCallExpression;
     function isNewExpression(node) {
-        return node.kind === 205 /* NewExpression */;
+        return node.kind === 207 /* NewExpression */;
     }
     ts.isNewExpression = isNewExpression;
     function isTaggedTemplateExpression(node) {
-        return node.kind === 206 /* TaggedTemplateExpression */;
+        return node.kind === 208 /* TaggedTemplateExpression */;
     }
     ts.isTaggedTemplateExpression = isTaggedTemplateExpression;
     function isTypeAssertionExpression(node) {
-        return node.kind === 207 /* TypeAssertionExpression */;
+        return node.kind === 209 /* TypeAssertionExpression */;
     }
     ts.isTypeAssertionExpression = isTypeAssertionExpression;
     function isParenthesizedExpression(node) {
-        return node.kind === 208 /* ParenthesizedExpression */;
+        return node.kind === 210 /* ParenthesizedExpression */;
     }
     ts.isParenthesizedExpression = isParenthesizedExpression;
     function isFunctionExpression(node) {
-        return node.kind === 209 /* FunctionExpression */;
+        return node.kind === 211 /* FunctionExpression */;
     }
     ts.isFunctionExpression = isFunctionExpression;
     function isArrowFunction(node) {
-        return node.kind === 210 /* ArrowFunction */;
+        return node.kind === 212 /* ArrowFunction */;
     }
     ts.isArrowFunction = isArrowFunction;
     function isDeleteExpression(node) {
-        return node.kind === 211 /* DeleteExpression */;
+        return node.kind === 213 /* DeleteExpression */;
     }
     ts.isDeleteExpression = isDeleteExpression;
     function isTypeOfExpression(node) {
-        return node.kind === 212 /* TypeOfExpression */;
+        return node.kind === 214 /* TypeOfExpression */;
     }
     ts.isTypeOfExpression = isTypeOfExpression;
     function isVoidExpression(node) {
-        return node.kind === 213 /* VoidExpression */;
+        return node.kind === 215 /* VoidExpression */;
     }
     ts.isVoidExpression = isVoidExpression;
     function isAwaitExpression(node) {
-        return node.kind === 214 /* AwaitExpression */;
+        return node.kind === 216 /* AwaitExpression */;
     }
     ts.isAwaitExpression = isAwaitExpression;
     function isPrefixUnaryExpression(node) {
-        return node.kind === 215 /* PrefixUnaryExpression */;
+        return node.kind === 217 /* PrefixUnaryExpression */;
     }
     ts.isPrefixUnaryExpression = isPrefixUnaryExpression;
     function isPostfixUnaryExpression(node) {
-        return node.kind === 216 /* PostfixUnaryExpression */;
+        return node.kind === 218 /* PostfixUnaryExpression */;
     }
     ts.isPostfixUnaryExpression = isPostfixUnaryExpression;
     function isBinaryExpression(node) {
-        return node.kind === 217 /* BinaryExpression */;
+        return node.kind === 219 /* BinaryExpression */;
     }
     ts.isBinaryExpression = isBinaryExpression;
     function isConditionalExpression(node) {
-        return node.kind === 218 /* ConditionalExpression */;
+        return node.kind === 220 /* ConditionalExpression */;
     }
     ts.isConditionalExpression = isConditionalExpression;
     function isTemplateExpression(node) {
-        return node.kind === 219 /* TemplateExpression */;
+        return node.kind === 221 /* TemplateExpression */;
     }
     ts.isTemplateExpression = isTemplateExpression;
     function isYieldExpression(node) {
-        return node.kind === 220 /* YieldExpression */;
+        return node.kind === 222 /* YieldExpression */;
     }
     ts.isYieldExpression = isYieldExpression;
     function isSpreadElement(node) {
-        return node.kind === 221 /* SpreadElement */;
+        return node.kind === 223 /* SpreadElement */;
     }
     ts.isSpreadElement = isSpreadElement;
     function isClassExpression(node) {
-        return node.kind === 222 /* ClassExpression */;
+        return node.kind === 224 /* ClassExpression */;
     }
     ts.isClassExpression = isClassExpression;
     function isOmittedExpression(node) {
-        return node.kind === 223 /* OmittedExpression */;
+        return node.kind === 225 /* OmittedExpression */;
     }
     ts.isOmittedExpression = isOmittedExpression;
     function isExpressionWithTypeArguments(node) {
-        return node.kind === 224 /* ExpressionWithTypeArguments */;
+        return node.kind === 226 /* ExpressionWithTypeArguments */;
     }
     ts.isExpressionWithTypeArguments = isExpressionWithTypeArguments;
     function isAsExpression(node) {
-        return node.kind === 225 /* AsExpression */;
+        return node.kind === 227 /* AsExpression */;
     }
     ts.isAsExpression = isAsExpression;
     function isNonNullExpression(node) {
-        return node.kind === 226 /* NonNullExpression */;
+        return node.kind === 228 /* NonNullExpression */;
     }
     ts.isNonNullExpression = isNonNullExpression;
     function isMetaProperty(node) {
-        return node.kind === 227 /* MetaProperty */;
+        return node.kind === 229 /* MetaProperty */;
     }
     ts.isMetaProperty = isMetaProperty;
     function isSyntheticExpression(node) {
-        return node.kind === 228 /* SyntheticExpression */;
+        return node.kind === 230 /* SyntheticExpression */;
     }
     ts.isSyntheticExpression = isSyntheticExpression;
     function isPartiallyEmittedExpression(node) {
-        return node.kind === 340 /* PartiallyEmittedExpression */;
+        return node.kind === 345 /* PartiallyEmittedExpression */;
     }
     ts.isPartiallyEmittedExpression = isPartiallyEmittedExpression;
     function isCommaListExpression(node) {
-        return node.kind === 341 /* CommaListExpression */;
+        return node.kind === 346 /* CommaListExpression */;
     }
     ts.isCommaListExpression = isCommaListExpression;
     // Misc
     function isTemplateSpan(node) {
-        return node.kind === 229 /* TemplateSpan */;
+        return node.kind === 231 /* TemplateSpan */;
     }
     ts.isTemplateSpan = isTemplateSpan;
     function isSemicolonClassElement(node) {
-        return node.kind === 230 /* SemicolonClassElement */;
+        return node.kind === 232 /* SemicolonClassElement */;
     }
     ts.isSemicolonClassElement = isSemicolonClassElement;
     // Elements
     function isBlock(node) {
-        return node.kind === 231 /* Block */;
+        return node.kind === 233 /* Block */;
     }
     ts.isBlock = isBlock;
     function isVariableStatement(node) {
-        return node.kind === 233 /* VariableStatement */;
+        return node.kind === 235 /* VariableStatement */;
     }
     ts.isVariableStatement = isVariableStatement;
     function isEmptyStatement(node) {
-        return node.kind === 232 /* EmptyStatement */;
+        return node.kind === 234 /* EmptyStatement */;
     }
     ts.isEmptyStatement = isEmptyStatement;
     function isExpressionStatement(node) {
-        return node.kind === 234 /* ExpressionStatement */;
+        return node.kind === 236 /* ExpressionStatement */;
     }
     ts.isExpressionStatement = isExpressionStatement;
     function isIfStatement(node) {
-        return node.kind === 235 /* IfStatement */;
+        return node.kind === 237 /* IfStatement */;
     }
     ts.isIfStatement = isIfStatement;
     function isDoStatement(node) {
-        return node.kind === 236 /* DoStatement */;
+        return node.kind === 238 /* DoStatement */;
     }
     ts.isDoStatement = isDoStatement;
     function isWhileStatement(node) {
-        return node.kind === 237 /* WhileStatement */;
+        return node.kind === 239 /* WhileStatement */;
     }
     ts.isWhileStatement = isWhileStatement;
     function isForStatement(node) {
-        return node.kind === 238 /* ForStatement */;
+        return node.kind === 240 /* ForStatement */;
     }
     ts.isForStatement = isForStatement;
     function isForInStatement(node) {
-        return node.kind === 239 /* ForInStatement */;
+        return node.kind === 241 /* ForInStatement */;
     }
     ts.isForInStatement = isForInStatement;
     function isForOfStatement(node) {
-        return node.kind === 240 /* ForOfStatement */;
+        return node.kind === 242 /* ForOfStatement */;
     }
     ts.isForOfStatement = isForOfStatement;
     function isContinueStatement(node) {
-        return node.kind === 241 /* ContinueStatement */;
+        return node.kind === 243 /* ContinueStatement */;
     }
     ts.isContinueStatement = isContinueStatement;
     function isBreakStatement(node) {
-        return node.kind === 242 /* BreakStatement */;
+        return node.kind === 244 /* BreakStatement */;
     }
     ts.isBreakStatement = isBreakStatement;
     function isReturnStatement(node) {
-        return node.kind === 243 /* ReturnStatement */;
+        return node.kind === 245 /* ReturnStatement */;
     }
     ts.isReturnStatement = isReturnStatement;
     function isWithStatement(node) {
-        return node.kind === 244 /* WithStatement */;
+        return node.kind === 246 /* WithStatement */;
     }
     ts.isWithStatement = isWithStatement;
     function isSwitchStatement(node) {
-        return node.kind === 245 /* SwitchStatement */;
+        return node.kind === 247 /* SwitchStatement */;
     }
     ts.isSwitchStatement = isSwitchStatement;
     function isLabeledStatement(node) {
-        return node.kind === 246 /* LabeledStatement */;
+        return node.kind === 248 /* LabeledStatement */;
     }
     ts.isLabeledStatement = isLabeledStatement;
     function isThrowStatement(node) {
-        return node.kind === 247 /* ThrowStatement */;
+        return node.kind === 249 /* ThrowStatement */;
     }
     ts.isThrowStatement = isThrowStatement;
     function isTryStatement(node) {
-        return node.kind === 248 /* TryStatement */;
+        return node.kind === 250 /* TryStatement */;
     }
     ts.isTryStatement = isTryStatement;
     function isDebuggerStatement(node) {
-        return node.kind === 249 /* DebuggerStatement */;
+        return node.kind === 251 /* DebuggerStatement */;
     }
     ts.isDebuggerStatement = isDebuggerStatement;
     function isVariableDeclaration(node) {
-        return node.kind === 250 /* VariableDeclaration */;
+        return node.kind === 252 /* VariableDeclaration */;
     }
     ts.isVariableDeclaration = isVariableDeclaration;
     function isVariableDeclarationList(node) {
-        return node.kind === 251 /* VariableDeclarationList */;
+        return node.kind === 253 /* VariableDeclarationList */;
     }
     ts.isVariableDeclarationList = isVariableDeclarationList;
     function isFunctionDeclaration(node) {
-        return node.kind === 252 /* FunctionDeclaration */;
+        return node.kind === 254 /* FunctionDeclaration */;
     }
     ts.isFunctionDeclaration = isFunctionDeclaration;
     function isClassDeclaration(node) {
-        return node.kind === 253 /* ClassDeclaration */;
+        return node.kind === 255 /* ClassDeclaration */;
     }
     ts.isClassDeclaration = isClassDeclaration;
     function isInterfaceDeclaration(node) {
-        return node.kind === 254 /* InterfaceDeclaration */;
+        return node.kind === 256 /* InterfaceDeclaration */;
     }
     ts.isInterfaceDeclaration = isInterfaceDeclaration;
     function isTypeAliasDeclaration(node) {
-        return node.kind === 255 /* TypeAliasDeclaration */;
+        return node.kind === 257 /* TypeAliasDeclaration */;
     }
     ts.isTypeAliasDeclaration = isTypeAliasDeclaration;
     function isEnumDeclaration(node) {
-        return node.kind === 256 /* EnumDeclaration */;
+        return node.kind === 258 /* EnumDeclaration */;
     }
     ts.isEnumDeclaration = isEnumDeclaration;
     function isModuleDeclaration(node) {
-        return node.kind === 257 /* ModuleDeclaration */;
+        return node.kind === 259 /* ModuleDeclaration */;
     }
     ts.isModuleDeclaration = isModuleDeclaration;
     function isModuleBlock(node) {
-        return node.kind === 258 /* ModuleBlock */;
+        return node.kind === 260 /* ModuleBlock */;
     }
     ts.isModuleBlock = isModuleBlock;
     function isCaseBlock(node) {
-        return node.kind === 259 /* CaseBlock */;
+        return node.kind === 261 /* CaseBlock */;
     }
     ts.isCaseBlock = isCaseBlock;
     function isNamespaceExportDeclaration(node) {
-        return node.kind === 260 /* NamespaceExportDeclaration */;
+        return node.kind === 262 /* NamespaceExportDeclaration */;
     }
     ts.isNamespaceExportDeclaration = isNamespaceExportDeclaration;
     function isImportEqualsDeclaration(node) {
-        return node.kind === 261 /* ImportEqualsDeclaration */;
+        return node.kind === 263 /* ImportEqualsDeclaration */;
     }
     ts.isImportEqualsDeclaration = isImportEqualsDeclaration;
     function isImportDeclaration(node) {
-        return node.kind === 262 /* ImportDeclaration */;
+        return node.kind === 264 /* ImportDeclaration */;
     }
     ts.isImportDeclaration = isImportDeclaration;
     function isImportClause(node) {
-        return node.kind === 263 /* ImportClause */;
+        return node.kind === 265 /* ImportClause */;
     }
     ts.isImportClause = isImportClause;
     function isNamespaceImport(node) {
-        return node.kind === 264 /* NamespaceImport */;
+        return node.kind === 266 /* NamespaceImport */;
     }
     ts.isNamespaceImport = isNamespaceImport;
     function isNamespaceExport(node) {
-        return node.kind === 270 /* NamespaceExport */;
+        return node.kind === 272 /* NamespaceExport */;
     }
     ts.isNamespaceExport = isNamespaceExport;
     function isNamedImports(node) {
-        return node.kind === 265 /* NamedImports */;
+        return node.kind === 267 /* NamedImports */;
     }
     ts.isNamedImports = isNamedImports;
     function isImportSpecifier(node) {
-        return node.kind === 266 /* ImportSpecifier */;
+        return node.kind === 268 /* ImportSpecifier */;
     }
     ts.isImportSpecifier = isImportSpecifier;
     function isExportAssignment(node) {
-        return node.kind === 267 /* ExportAssignment */;
+        return node.kind === 269 /* ExportAssignment */;
     }
     ts.isExportAssignment = isExportAssignment;
     function isExportDeclaration(node) {
-        return node.kind === 268 /* ExportDeclaration */;
+        return node.kind === 270 /* ExportDeclaration */;
     }
     ts.isExportDeclaration = isExportDeclaration;
     function isNamedExports(node) {
-        return node.kind === 269 /* NamedExports */;
+        return node.kind === 271 /* NamedExports */;
     }
     ts.isNamedExports = isNamedExports;
     function isExportSpecifier(node) {
-        return node.kind === 271 /* ExportSpecifier */;
+        return node.kind === 273 /* ExportSpecifier */;
     }
     ts.isExportSpecifier = isExportSpecifier;
     function isMissingDeclaration(node) {
-        return node.kind === 272 /* MissingDeclaration */;
+        return node.kind === 274 /* MissingDeclaration */;
     }
     ts.isMissingDeclaration = isMissingDeclaration;
     function isNotEmittedStatement(node) {
-        return node.kind === 339 /* NotEmittedStatement */;
+        return node.kind === 344 /* NotEmittedStatement */;
     }
     ts.isNotEmittedStatement = isNotEmittedStatement;
     /* @internal */
     function isSyntheticReference(node) {
-        return node.kind === 344 /* SyntheticReferenceExpression */;
+        return node.kind === 349 /* SyntheticReferenceExpression */;
     }
     ts.isSyntheticReference = isSyntheticReference;
     /* @internal */
     function isMergeDeclarationMarker(node) {
-        return node.kind === 342 /* MergeDeclarationMarker */;
+        return node.kind === 347 /* MergeDeclarationMarker */;
     }
     ts.isMergeDeclarationMarker = isMergeDeclarationMarker;
     /* @internal */
     function isEndOfDeclarationMarker(node) {
-        return node.kind === 343 /* EndOfDeclarationMarker */;
+        return node.kind === 348 /* EndOfDeclarationMarker */;
     }
     ts.isEndOfDeclarationMarker = isEndOfDeclarationMarker;
     // Module References
     function isExternalModuleReference(node) {
-        return node.kind === 273 /* ExternalModuleReference */;
+        return node.kind === 275 /* ExternalModuleReference */;
     }
     ts.isExternalModuleReference = isExternalModuleReference;
     // JSX
     function isJsxElement(node) {
-        return node.kind === 274 /* JsxElement */;
+        return node.kind === 276 /* JsxElement */;
     }
     ts.isJsxElement = isJsxElement;
     function isJsxSelfClosingElement(node) {
-        return node.kind === 275 /* JsxSelfClosingElement */;
+        return node.kind === 277 /* JsxSelfClosingElement */;
     }
     ts.isJsxSelfClosingElement = isJsxSelfClosingElement;
     function isJsxOpeningElement(node) {
-        return node.kind === 276 /* JsxOpeningElement */;
+        return node.kind === 278 /* JsxOpeningElement */;
     }
     ts.isJsxOpeningElement = isJsxOpeningElement;
     function isJsxClosingElement(node) {
-        return node.kind === 277 /* JsxClosingElement */;
+        return node.kind === 279 /* JsxClosingElement */;
     }
     ts.isJsxClosingElement = isJsxClosingElement;
     function isJsxFragment(node) {
-        return node.kind === 278 /* JsxFragment */;
+        return node.kind === 280 /* JsxFragment */;
     }
     ts.isJsxFragment = isJsxFragment;
     function isJsxOpeningFragment(node) {
-        return node.kind === 279 /* JsxOpeningFragment */;
+        return node.kind === 281 /* JsxOpeningFragment */;
     }
     ts.isJsxOpeningFragment = isJsxOpeningFragment;
     function isJsxClosingFragment(node) {
-        return node.kind === 280 /* JsxClosingFragment */;
+        return node.kind === 282 /* JsxClosingFragment */;
     }
     ts.isJsxClosingFragment = isJsxClosingFragment;
     function isJsxAttribute(node) {
-        return node.kind === 281 /* JsxAttribute */;
+        return node.kind === 283 /* JsxAttribute */;
     }
     ts.isJsxAttribute = isJsxAttribute;
     function isJsxAttributes(node) {
-        return node.kind === 282 /* JsxAttributes */;
+        return node.kind === 284 /* JsxAttributes */;
     }
     ts.isJsxAttributes = isJsxAttributes;
     function isJsxSpreadAttribute(node) {
-        return node.kind === 283 /* JsxSpreadAttribute */;
+        return node.kind === 285 /* JsxSpreadAttribute */;
     }
     ts.isJsxSpreadAttribute = isJsxSpreadAttribute;
     function isJsxExpression(node) {
-        return node.kind === 284 /* JsxExpression */;
+        return node.kind === 286 /* JsxExpression */;
     }
     ts.isJsxExpression = isJsxExpression;
     // Clauses
     function isCaseClause(node) {
-        return node.kind === 285 /* CaseClause */;
+        return node.kind === 287 /* CaseClause */;
     }
     ts.isCaseClause = isCaseClause;
     function isDefaultClause(node) {
-        return node.kind === 286 /* DefaultClause */;
+        return node.kind === 288 /* DefaultClause */;
     }
     ts.isDefaultClause = isDefaultClause;
     function isHeritageClause(node) {
-        return node.kind === 287 /* HeritageClause */;
+        return node.kind === 289 /* HeritageClause */;
     }
     ts.isHeritageClause = isHeritageClause;
     function isCatchClause(node) {
-        return node.kind === 288 /* CatchClause */;
+        return node.kind === 290 /* CatchClause */;
     }
     ts.isCatchClause = isCatchClause;
     // Property assignments
     function isPropertyAssignment(node) {
-        return node.kind === 289 /* PropertyAssignment */;
+        return node.kind === 291 /* PropertyAssignment */;
     }
     ts.isPropertyAssignment = isPropertyAssignment;
     function isShorthandPropertyAssignment(node) {
-        return node.kind === 290 /* ShorthandPropertyAssignment */;
+        return node.kind === 292 /* ShorthandPropertyAssignment */;
     }
     ts.isShorthandPropertyAssignment = isShorthandPropertyAssignment;
     function isSpreadAssignment(node) {
-        return node.kind === 291 /* SpreadAssignment */;
+        return node.kind === 293 /* SpreadAssignment */;
     }
     ts.isSpreadAssignment = isSpreadAssignment;
     // Enum
     function isEnumMember(node) {
-        return node.kind === 292 /* EnumMember */;
+        return node.kind === 294 /* EnumMember */;
     }
     ts.isEnumMember = isEnumMember;
     // Unparsed
     // TODO(rbuckton): isUnparsedPrologue
     function isUnparsedPrepend(node) {
-        return node.kind === 294 /* UnparsedPrepend */;
+        return node.kind === 296 /* UnparsedPrepend */;
     }
     ts.isUnparsedPrepend = isUnparsedPrepend;
     // TODO(rbuckton): isUnparsedText
@@ -27836,164 +28438,176 @@
     // TODO(rbuckton): isUnparsedSyntheticReference
     // Top-level nodes
     function isSourceFile(node) {
-        return node.kind === 298 /* SourceFile */;
+        return node.kind === 300 /* SourceFile */;
     }
     ts.isSourceFile = isSourceFile;
     function isBundle(node) {
-        return node.kind === 299 /* Bundle */;
+        return node.kind === 301 /* Bundle */;
     }
     ts.isBundle = isBundle;
     function isUnparsedSource(node) {
-        return node.kind === 300 /* UnparsedSource */;
+        return node.kind === 302 /* UnparsedSource */;
     }
     ts.isUnparsedSource = isUnparsedSource;
     // TODO(rbuckton): isInputFiles
     // JSDoc Elements
     function isJSDocTypeExpression(node) {
-        return node.kind === 302 /* JSDocTypeExpression */;
+        return node.kind === 304 /* JSDocTypeExpression */;
     }
     ts.isJSDocTypeExpression = isJSDocTypeExpression;
     function isJSDocNameReference(node) {
-        return node.kind === 303 /* JSDocNameReference */;
+        return node.kind === 305 /* JSDocNameReference */;
     }
     ts.isJSDocNameReference = isJSDocNameReference;
+    function isJSDocMemberName(node) {
+        return node.kind === 306 /* JSDocMemberName */;
+    }
+    ts.isJSDocMemberName = isJSDocMemberName;
     function isJSDocLink(node) {
-        return node.kind === 316 /* JSDocLink */;
+        return node.kind === 319 /* JSDocLink */;
     }
     ts.isJSDocLink = isJSDocLink;
+    function isJSDocLinkCode(node) {
+        return node.kind === 320 /* JSDocLinkCode */;
+    }
+    ts.isJSDocLinkCode = isJSDocLinkCode;
+    function isJSDocLinkPlain(node) {
+        return node.kind === 321 /* JSDocLinkPlain */;
+    }
+    ts.isJSDocLinkPlain = isJSDocLinkPlain;
     function isJSDocAllType(node) {
-        return node.kind === 304 /* JSDocAllType */;
+        return node.kind === 307 /* JSDocAllType */;
     }
     ts.isJSDocAllType = isJSDocAllType;
     function isJSDocUnknownType(node) {
-        return node.kind === 305 /* JSDocUnknownType */;
+        return node.kind === 308 /* JSDocUnknownType */;
     }
     ts.isJSDocUnknownType = isJSDocUnknownType;
     function isJSDocNullableType(node) {
-        return node.kind === 306 /* JSDocNullableType */;
+        return node.kind === 309 /* JSDocNullableType */;
     }
     ts.isJSDocNullableType = isJSDocNullableType;
     function isJSDocNonNullableType(node) {
-        return node.kind === 307 /* JSDocNonNullableType */;
+        return node.kind === 310 /* JSDocNonNullableType */;
     }
     ts.isJSDocNonNullableType = isJSDocNonNullableType;
     function isJSDocOptionalType(node) {
-        return node.kind === 308 /* JSDocOptionalType */;
+        return node.kind === 311 /* JSDocOptionalType */;
     }
     ts.isJSDocOptionalType = isJSDocOptionalType;
     function isJSDocFunctionType(node) {
-        return node.kind === 309 /* JSDocFunctionType */;
+        return node.kind === 312 /* JSDocFunctionType */;
     }
     ts.isJSDocFunctionType = isJSDocFunctionType;
     function isJSDocVariadicType(node) {
-        return node.kind === 310 /* JSDocVariadicType */;
+        return node.kind === 313 /* JSDocVariadicType */;
     }
     ts.isJSDocVariadicType = isJSDocVariadicType;
     function isJSDocNamepathType(node) {
-        return node.kind === 311 /* JSDocNamepathType */;
+        return node.kind === 314 /* JSDocNamepathType */;
     }
     ts.isJSDocNamepathType = isJSDocNamepathType;
     function isJSDoc(node) {
-        return node.kind === 312 /* JSDocComment */;
+        return node.kind === 315 /* JSDocComment */;
     }
     ts.isJSDoc = isJSDoc;
     function isJSDocTypeLiteral(node) {
-        return node.kind === 314 /* JSDocTypeLiteral */;
+        return node.kind === 317 /* JSDocTypeLiteral */;
     }
     ts.isJSDocTypeLiteral = isJSDocTypeLiteral;
     function isJSDocSignature(node) {
-        return node.kind === 315 /* JSDocSignature */;
+        return node.kind === 318 /* JSDocSignature */;
     }
     ts.isJSDocSignature = isJSDocSignature;
     // JSDoc Tags
     function isJSDocAugmentsTag(node) {
-        return node.kind === 318 /* JSDocAugmentsTag */;
+        return node.kind === 323 /* JSDocAugmentsTag */;
     }
     ts.isJSDocAugmentsTag = isJSDocAugmentsTag;
     function isJSDocAuthorTag(node) {
-        return node.kind === 320 /* JSDocAuthorTag */;
+        return node.kind === 325 /* JSDocAuthorTag */;
     }
     ts.isJSDocAuthorTag = isJSDocAuthorTag;
     function isJSDocClassTag(node) {
-        return node.kind === 322 /* JSDocClassTag */;
+        return node.kind === 327 /* JSDocClassTag */;
     }
     ts.isJSDocClassTag = isJSDocClassTag;
     function isJSDocCallbackTag(node) {
-        return node.kind === 328 /* JSDocCallbackTag */;
+        return node.kind === 333 /* JSDocCallbackTag */;
     }
     ts.isJSDocCallbackTag = isJSDocCallbackTag;
     function isJSDocPublicTag(node) {
-        return node.kind === 323 /* JSDocPublicTag */;
+        return node.kind === 328 /* JSDocPublicTag */;
     }
     ts.isJSDocPublicTag = isJSDocPublicTag;
     function isJSDocPrivateTag(node) {
-        return node.kind === 324 /* JSDocPrivateTag */;
+        return node.kind === 329 /* JSDocPrivateTag */;
     }
     ts.isJSDocPrivateTag = isJSDocPrivateTag;
     function isJSDocProtectedTag(node) {
-        return node.kind === 325 /* JSDocProtectedTag */;
+        return node.kind === 330 /* JSDocProtectedTag */;
     }
     ts.isJSDocProtectedTag = isJSDocProtectedTag;
     function isJSDocReadonlyTag(node) {
-        return node.kind === 326 /* JSDocReadonlyTag */;
+        return node.kind === 331 /* JSDocReadonlyTag */;
     }
     ts.isJSDocReadonlyTag = isJSDocReadonlyTag;
     function isJSDocOverrideTag(node) {
-        return node.kind === 327 /* JSDocOverrideTag */;
+        return node.kind === 332 /* JSDocOverrideTag */;
     }
     ts.isJSDocOverrideTag = isJSDocOverrideTag;
     function isJSDocDeprecatedTag(node) {
-        return node.kind === 321 /* JSDocDeprecatedTag */;
+        return node.kind === 326 /* JSDocDeprecatedTag */;
     }
     ts.isJSDocDeprecatedTag = isJSDocDeprecatedTag;
     function isJSDocSeeTag(node) {
-        return node.kind === 336 /* JSDocSeeTag */;
+        return node.kind === 341 /* JSDocSeeTag */;
     }
     ts.isJSDocSeeTag = isJSDocSeeTag;
     function isJSDocEnumTag(node) {
-        return node.kind === 329 /* JSDocEnumTag */;
+        return node.kind === 334 /* JSDocEnumTag */;
     }
     ts.isJSDocEnumTag = isJSDocEnumTag;
     function isJSDocParameterTag(node) {
-        return node.kind === 330 /* JSDocParameterTag */;
+        return node.kind === 335 /* JSDocParameterTag */;
     }
     ts.isJSDocParameterTag = isJSDocParameterTag;
     function isJSDocReturnTag(node) {
-        return node.kind === 331 /* JSDocReturnTag */;
+        return node.kind === 336 /* JSDocReturnTag */;
     }
     ts.isJSDocReturnTag = isJSDocReturnTag;
     function isJSDocThisTag(node) {
-        return node.kind === 332 /* JSDocThisTag */;
+        return node.kind === 337 /* JSDocThisTag */;
     }
     ts.isJSDocThisTag = isJSDocThisTag;
     function isJSDocTypeTag(node) {
-        return node.kind === 333 /* JSDocTypeTag */;
+        return node.kind === 338 /* JSDocTypeTag */;
     }
     ts.isJSDocTypeTag = isJSDocTypeTag;
     function isJSDocTemplateTag(node) {
-        return node.kind === 334 /* JSDocTemplateTag */;
+        return node.kind === 339 /* JSDocTemplateTag */;
     }
     ts.isJSDocTemplateTag = isJSDocTemplateTag;
     function isJSDocTypedefTag(node) {
-        return node.kind === 335 /* JSDocTypedefTag */;
+        return node.kind === 340 /* JSDocTypedefTag */;
     }
     ts.isJSDocTypedefTag = isJSDocTypedefTag;
     function isJSDocUnknownTag(node) {
-        return node.kind === 317 /* JSDocTag */;
+        return node.kind === 322 /* JSDocTag */;
     }
     ts.isJSDocUnknownTag = isJSDocUnknownTag;
     function isJSDocPropertyTag(node) {
-        return node.kind === 337 /* JSDocPropertyTag */;
+        return node.kind === 342 /* JSDocPropertyTag */;
     }
     ts.isJSDocPropertyTag = isJSDocPropertyTag;
     function isJSDocImplementsTag(node) {
-        return node.kind === 319 /* JSDocImplementsTag */;
+        return node.kind === 324 /* JSDocImplementsTag */;
     }
     ts.isJSDocImplementsTag = isJSDocImplementsTag;
     // Synthesized list
     /* @internal */
     function isSyntaxList(n) {
-        return n.kind === 338 /* SyntaxList */;
+        return n.kind === 343 /* SyntaxList */;
     }
     ts.isSyntaxList = isSyntaxList;
 })(ts || (ts = {}));
@@ -28112,7 +28726,7 @@
     ts.createForOfBindingStatement = createForOfBindingStatement;
     function insertLeadingStatement(factory, dest, source) {
         if (ts.isBlock(dest)) {
-            return factory.updateBlock(dest, ts.setTextRange(factory.createNodeArray(__spreadArray([source], dest.statements)), dest.statements));
+            return factory.updateBlock(dest, ts.setTextRange(factory.createNodeArray(__spreadArray([source], dest.statements, true)), dest.statements));
         }
         else {
             return factory.createBlock(factory.createNodeArray([dest, source]), /*multiLine*/ true);
@@ -28192,19 +28806,74 @@
             ts.Debug.failBadSyntaxKind(property.name, "Private identifiers are not allowed in object literals.");
         }
         switch (property.kind) {
-            case 168 /* GetAccessor */:
-            case 169 /* SetAccessor */:
+            case 170 /* GetAccessor */:
+            case 171 /* SetAccessor */:
                 return createExpressionForAccessorDeclaration(factory, node.properties, property, receiver, !!node.multiLine);
-            case 289 /* PropertyAssignment */:
+            case 291 /* PropertyAssignment */:
                 return createExpressionForPropertyAssignment(factory, property, receiver);
-            case 290 /* ShorthandPropertyAssignment */:
+            case 292 /* ShorthandPropertyAssignment */:
                 return createExpressionForShorthandPropertyAssignment(factory, property, receiver);
-            case 166 /* MethodDeclaration */:
+            case 167 /* MethodDeclaration */:
                 return createExpressionForMethodDeclaration(factory, property, receiver);
         }
     }
     ts.createExpressionForObjectLiteralElementLike = createExpressionForObjectLiteralElementLike;
     /**
+     * Expand the read and increment/decrement operations a pre- or post-increment or pre- or post-decrement expression.
+     *
+     * ```ts
+     * // input
+     * <expression>++
+     * // output (if result is not discarded)
+     * var <temp>;
+     * (<temp> = <expression>, <resultVariable> = <temp>++, <temp>)
+     * // output (if result is discarded)
+     * var <temp>;
+     * (<temp> = <expression>, <temp>++, <temp>)
+     *
+     * // input
+     * ++<expression>
+     * // output (if result is not discarded)
+     * var <temp>;
+     * (<temp> = <expression>, <resultVariable> = ++<temp>)
+     * // output (if result is discarded)
+     * var <temp>;
+     * (<temp> = <expression>, ++<temp>)
+     * ```
+     *
+     * It is up to the caller to supply a temporary variable for `<resultVariable>` if one is needed.
+     * The temporary variable `<temp>` is injected so that `++` and `--` work uniformly with `number` and `bigint`.
+     * The result of the expression is always the final result of incrementing or decrementing the expression, so that it can be used for storage.
+     *
+     * @param factory {@link NodeFactory} used to create the expanded representation.
+     * @param node The original prefix or postfix unary node.
+     * @param expression The expression to use as the value to increment or decrement
+     * @param resultVariable A temporary variable in which to store the result. Pass `undefined` if the result is discarded, or if the value of `<temp>` is the expected result.
+     */
+    function expandPreOrPostfixIncrementOrDecrementExpression(factory, node, expression, recordTempVariable, resultVariable) {
+        var operator = node.operator;
+        ts.Debug.assert(operator === 45 /* PlusPlusToken */ || operator === 46 /* MinusMinusToken */, "Expected 'node' to be a pre- or post-increment or pre- or post-decrement expression");
+        var temp = factory.createTempVariable(recordTempVariable);
+        expression = factory.createAssignment(temp, expression);
+        ts.setTextRange(expression, node.operand);
+        var operation = ts.isPrefixUnaryExpression(node) ?
+            factory.createPrefixUnaryExpression(operator, temp) :
+            factory.createPostfixUnaryExpression(temp, operator);
+        ts.setTextRange(operation, node);
+        if (resultVariable) {
+            operation = factory.createAssignment(resultVariable, operation);
+            ts.setTextRange(operation, node);
+        }
+        expression = factory.createComma(expression, operation);
+        ts.setTextRange(expression, node);
+        if (ts.isPostfixUnaryExpression(node)) {
+            expression = factory.createComma(expression, temp);
+            ts.setTextRange(expression, node);
+        }
+        return expression;
+    }
+    ts.expandPreOrPostfixIncrementOrDecrementExpression = expandPreOrPostfixIncrementOrDecrementExpression;
+    /**
      * Gets whether an identifier should only be referred to by its internal name.
      */
     function isInternalName(node) {
@@ -28252,21 +28921,21 @@
     }
     ts.startsWithUseStrict = startsWithUseStrict;
     function isCommaSequence(node) {
-        return node.kind === 217 /* BinaryExpression */ && node.operatorToken.kind === 27 /* CommaToken */ ||
-            node.kind === 341 /* CommaListExpression */;
+        return node.kind === 219 /* BinaryExpression */ && node.operatorToken.kind === 27 /* CommaToken */ ||
+            node.kind === 346 /* CommaListExpression */;
     }
     ts.isCommaSequence = isCommaSequence;
     function isOuterExpression(node, kinds) {
         if (kinds === void 0) { kinds = 15 /* All */; }
         switch (node.kind) {
-            case 208 /* ParenthesizedExpression */:
+            case 210 /* ParenthesizedExpression */:
                 return (kinds & 1 /* Parentheses */) !== 0;
-            case 207 /* TypeAssertionExpression */:
-            case 225 /* AsExpression */:
+            case 209 /* TypeAssertionExpression */:
+            case 227 /* AsExpression */:
                 return (kinds & 2 /* TypeAssertions */) !== 0;
-            case 226 /* NonNullExpression */:
+            case 228 /* NonNullExpression */:
                 return (kinds & 4 /* NonNullAssertions */) !== 0;
-            case 340 /* PartiallyEmittedExpression */:
+            case 345 /* PartiallyEmittedExpression */:
                 return (kinds & 8 /* PartiallyEmittedExpressions */) !== 0;
         }
         return false;
@@ -28387,10 +29056,10 @@
             var name = namespaceDeclaration.name;
             return ts.isGeneratedIdentifier(name) ? name : factory.createIdentifier(ts.getSourceTextOfNodeFromSourceFile(sourceFile, name) || ts.idText(name));
         }
-        if (node.kind === 262 /* ImportDeclaration */ && node.importClause) {
+        if (node.kind === 264 /* ImportDeclaration */ && node.importClause) {
             return factory.getGeneratedNameForNode(node);
         }
-        if (node.kind === 268 /* ExportDeclaration */ && node.moduleSpecifier) {
+        if (node.kind === 270 /* ExportDeclaration */ && node.moduleSpecifier) {
             return factory.getGeneratedNameForNode(node);
         }
         return undefined;
@@ -28509,7 +29178,7 @@
         }
         if (ts.isObjectLiteralElementLike(bindingElement)) {
             switch (bindingElement.kind) {
-                case 289 /* PropertyAssignment */:
+                case 291 /* PropertyAssignment */:
                     // `b` in `({ a: b } = ...)`
                     // `b` in `({ a: b = 1 } = ...)`
                     // `{b}` in `({ a: {b} } = ...)`
@@ -28521,11 +29190,11 @@
                     // `b[0]` in `({ a: b[0] } = ...)`
                     // `b[0]` in `({ a: b[0] = 1 } = ...)`
                     return getTargetOfBindingOrAssignmentElement(bindingElement.initializer);
-                case 290 /* ShorthandPropertyAssignment */:
+                case 292 /* ShorthandPropertyAssignment */:
                     // `a` in `({ a } = ...)`
                     // `a` in `({ a = 1 } = ...)`
                     return bindingElement.name;
-                case 291 /* SpreadAssignment */:
+                case 293 /* SpreadAssignment */:
                     // `a` in `({ ...a } = ...)`
                     return getTargetOfBindingOrAssignmentElement(bindingElement.expression);
             }
@@ -28557,12 +29226,12 @@
      */
     function getRestIndicatorOfBindingOrAssignmentElement(bindingElement) {
         switch (bindingElement.kind) {
-            case 161 /* Parameter */:
-            case 199 /* BindingElement */:
+            case 162 /* Parameter */:
+            case 201 /* BindingElement */:
                 // `...` in `let [...a] = ...`
                 return bindingElement.dotDotDotToken;
-            case 221 /* SpreadElement */:
-            case 291 /* SpreadAssignment */:
+            case 223 /* SpreadElement */:
+            case 293 /* SpreadAssignment */:
                 // `...` in `[...a] = ...`
                 return bindingElement;
         }
@@ -28580,7 +29249,7 @@
     ts.getPropertyNameOfBindingOrAssignmentElement = getPropertyNameOfBindingOrAssignmentElement;
     function tryGetPropertyNameOfBindingOrAssignmentElement(bindingElement) {
         switch (bindingElement.kind) {
-            case 199 /* BindingElement */:
+            case 201 /* BindingElement */:
                 // `a` in `let { a: b } = ...`
                 // `[a]` in `let { [a]: b } = ...`
                 // `"a"` in `let { "a": b } = ...`
@@ -28595,7 +29264,7 @@
                         : propertyName;
                 }
                 break;
-            case 289 /* PropertyAssignment */:
+            case 291 /* PropertyAssignment */:
                 // `a` in `({ a: b } = ...)`
                 // `[a]` in `({ [a]: b } = ...)`
                 // `"a"` in `({ "a": b } = ...)`
@@ -28610,7 +29279,7 @@
                         : propertyName;
                 }
                 break;
-            case 291 /* SpreadAssignment */:
+            case 293 /* SpreadAssignment */:
                 // `a` in `({ ...a } = ...)`
                 if (bindingElement.name && ts.isPrivateIdentifier(bindingElement.name)) {
                     return ts.Debug.failBadSyntaxKind(bindingElement.name);
@@ -28633,13 +29302,13 @@
      */
     function getElementsOfBindingOrAssignmentPattern(name) {
         switch (name.kind) {
-            case 197 /* ObjectBindingPattern */:
-            case 198 /* ArrayBindingPattern */:
-            case 200 /* ArrayLiteralExpression */:
+            case 199 /* ObjectBindingPattern */:
+            case 200 /* ArrayBindingPattern */:
+            case 202 /* ArrayLiteralExpression */:
                 // `a` in `{a}`
                 // `a` in `[a]`
                 return name.elements;
-            case 201 /* ObjectLiteralExpression */:
+            case 203 /* ObjectLiteralExpression */:
                 // `a` in `{a}`
                 return name.properties;
         }
@@ -28660,29 +29329,29 @@
     ts.getJSDocTypeAliasName = getJSDocTypeAliasName;
     function canHaveModifiers(node) {
         var kind = node.kind;
-        return kind === 161 /* Parameter */
-            || kind === 163 /* PropertySignature */
-            || kind === 164 /* PropertyDeclaration */
-            || kind === 165 /* MethodSignature */
-            || kind === 166 /* MethodDeclaration */
-            || kind === 167 /* Constructor */
-            || kind === 168 /* GetAccessor */
-            || kind === 169 /* SetAccessor */
-            || kind === 172 /* IndexSignature */
-            || kind === 209 /* FunctionExpression */
-            || kind === 210 /* ArrowFunction */
-            || kind === 222 /* ClassExpression */
-            || kind === 233 /* VariableStatement */
-            || kind === 252 /* FunctionDeclaration */
-            || kind === 253 /* ClassDeclaration */
-            || kind === 254 /* InterfaceDeclaration */
-            || kind === 255 /* TypeAliasDeclaration */
-            || kind === 256 /* EnumDeclaration */
-            || kind === 257 /* ModuleDeclaration */
-            || kind === 261 /* ImportEqualsDeclaration */
-            || kind === 262 /* ImportDeclaration */
-            || kind === 267 /* ExportAssignment */
-            || kind === 268 /* ExportDeclaration */;
+        return kind === 162 /* Parameter */
+            || kind === 164 /* PropertySignature */
+            || kind === 165 /* PropertyDeclaration */
+            || kind === 166 /* MethodSignature */
+            || kind === 167 /* MethodDeclaration */
+            || kind === 169 /* Constructor */
+            || kind === 170 /* GetAccessor */
+            || kind === 171 /* SetAccessor */
+            || kind === 174 /* IndexSignature */
+            || kind === 211 /* FunctionExpression */
+            || kind === 212 /* ArrowFunction */
+            || kind === 224 /* ClassExpression */
+            || kind === 235 /* VariableStatement */
+            || kind === 254 /* FunctionDeclaration */
+            || kind === 255 /* ClassDeclaration */
+            || kind === 256 /* InterfaceDeclaration */
+            || kind === 257 /* TypeAliasDeclaration */
+            || kind === 258 /* EnumDeclaration */
+            || kind === 259 /* ModuleDeclaration */
+            || kind === 263 /* ImportEqualsDeclaration */
+            || kind === 264 /* ImportDeclaration */
+            || kind === 269 /* ExportAssignment */
+            || kind === 270 /* ExportDeclaration */;
     }
     ts.canHaveModifiers = canHaveModifiers;
     ts.isTypeNodeOrTypeParameterDeclaration = ts.or(ts.isTypeNode, ts.isTypeParameterDeclaration);
@@ -28693,9 +29362,9 @@
     ts.isModuleName = ts.or(ts.isIdentifier, ts.isStringLiteral);
     function isLiteralTypeLikeExpression(node) {
         var kind = node.kind;
-        return kind === 103 /* NullKeyword */
-            || kind === 109 /* TrueKeyword */
-            || kind === 94 /* FalseKeyword */
+        return kind === 104 /* NullKeyword */
+            || kind === 110 /* TrueKeyword */
+            || kind === 95 /* FalseKeyword */
             || ts.isLiteralExpression(node)
             || ts.isPrefixUnaryExpression(node);
     }
@@ -28734,8 +29403,8 @@
             || kind === 32 /* LessThanEqualsToken */
             || kind === 31 /* GreaterThanToken */
             || kind === 33 /* GreaterThanEqualsToken */
-            || kind === 101 /* InstanceOfKeyword */
-            || kind === 100 /* InKeyword */;
+            || kind === 102 /* InstanceOfKeyword */
+            || kind === 101 /* InKeyword */;
     }
     function isRelationalOperatorOrHigher(kind) {
         return isRelationalOperator(kind)
@@ -29029,19 +29698,19 @@
      * that they appear in the source code. The language service depends on this property to locate nodes by position.
      */
     function forEachChild(node, cbNode, cbNodes) {
-        if (!node || node.kind <= 157 /* LastToken */) {
+        if (!node || node.kind <= 158 /* LastToken */) {
             return;
         }
         switch (node.kind) {
-            case 158 /* QualifiedName */:
+            case 159 /* QualifiedName */:
                 return visitNode(cbNode, node.left) ||
                     visitNode(cbNode, node.right);
-            case 160 /* TypeParameter */:
+            case 161 /* TypeParameter */:
                 return visitNode(cbNode, node.name) ||
                     visitNode(cbNode, node.constraint) ||
                     visitNode(cbNode, node.default) ||
                     visitNode(cbNode, node.expression);
-            case 290 /* ShorthandPropertyAssignment */:
+            case 292 /* ShorthandPropertyAssignment */:
                 return visitNodes(cbNode, cbNodes, node.decorators) ||
                     visitNodes(cbNode, cbNodes, node.modifiers) ||
                     visitNode(cbNode, node.name) ||
@@ -29049,9 +29718,9 @@
                     visitNode(cbNode, node.exclamationToken) ||
                     visitNode(cbNode, node.equalsToken) ||
                     visitNode(cbNode, node.objectAssignmentInitializer);
-            case 291 /* SpreadAssignment */:
+            case 293 /* SpreadAssignment */:
                 return visitNode(cbNode, node.expression);
-            case 161 /* Parameter */:
+            case 162 /* Parameter */:
                 return visitNodes(cbNode, cbNodes, node.decorators) ||
                     visitNodes(cbNode, cbNodes, node.modifiers) ||
                     visitNode(cbNode, node.dotDotDotToken) ||
@@ -29059,7 +29728,7 @@
                     visitNode(cbNode, node.questionToken) ||
                     visitNode(cbNode, node.type) ||
                     visitNode(cbNode, node.initializer);
-            case 164 /* PropertyDeclaration */:
+            case 165 /* PropertyDeclaration */:
                 return visitNodes(cbNode, cbNodes, node.decorators) ||
                     visitNodes(cbNode, cbNodes, node.modifiers) ||
                     visitNode(cbNode, node.name) ||
@@ -29067,51 +29736,51 @@
                     visitNode(cbNode, node.exclamationToken) ||
                     visitNode(cbNode, node.type) ||
                     visitNode(cbNode, node.initializer);
-            case 163 /* PropertySignature */:
+            case 164 /* PropertySignature */:
                 return visitNodes(cbNode, cbNodes, node.decorators) ||
                     visitNodes(cbNode, cbNodes, node.modifiers) ||
                     visitNode(cbNode, node.name) ||
                     visitNode(cbNode, node.questionToken) ||
                     visitNode(cbNode, node.type) ||
                     visitNode(cbNode, node.initializer);
-            case 289 /* PropertyAssignment */:
+            case 291 /* PropertyAssignment */:
                 return visitNodes(cbNode, cbNodes, node.decorators) ||
                     visitNodes(cbNode, cbNodes, node.modifiers) ||
                     visitNode(cbNode, node.name) ||
                     visitNode(cbNode, node.questionToken) ||
                     visitNode(cbNode, node.initializer);
-            case 250 /* VariableDeclaration */:
+            case 252 /* VariableDeclaration */:
                 return visitNodes(cbNode, cbNodes, node.decorators) ||
                     visitNodes(cbNode, cbNodes, node.modifiers) ||
                     visitNode(cbNode, node.name) ||
                     visitNode(cbNode, node.exclamationToken) ||
                     visitNode(cbNode, node.type) ||
                     visitNode(cbNode, node.initializer);
-            case 199 /* BindingElement */:
+            case 201 /* BindingElement */:
                 return visitNodes(cbNode, cbNodes, node.decorators) ||
                     visitNodes(cbNode, cbNodes, node.modifiers) ||
                     visitNode(cbNode, node.dotDotDotToken) ||
                     visitNode(cbNode, node.propertyName) ||
                     visitNode(cbNode, node.name) ||
                     visitNode(cbNode, node.initializer);
-            case 175 /* FunctionType */:
-            case 176 /* ConstructorType */:
-            case 170 /* CallSignature */:
-            case 171 /* ConstructSignature */:
-            case 172 /* IndexSignature */:
+            case 177 /* FunctionType */:
+            case 178 /* ConstructorType */:
+            case 172 /* CallSignature */:
+            case 173 /* ConstructSignature */:
+            case 174 /* IndexSignature */:
                 return visitNodes(cbNode, cbNodes, node.decorators) ||
                     visitNodes(cbNode, cbNodes, node.modifiers) ||
                     visitNodes(cbNode, cbNodes, node.typeParameters) ||
                     visitNodes(cbNode, cbNodes, node.parameters) ||
                     visitNode(cbNode, node.type);
-            case 166 /* MethodDeclaration */:
-            case 165 /* MethodSignature */:
-            case 167 /* Constructor */:
-            case 168 /* GetAccessor */:
-            case 169 /* SetAccessor */:
-            case 209 /* FunctionExpression */:
-            case 252 /* FunctionDeclaration */:
-            case 210 /* ArrowFunction */:
+            case 167 /* MethodDeclaration */:
+            case 166 /* MethodSignature */:
+            case 169 /* Constructor */:
+            case 170 /* GetAccessor */:
+            case 171 /* SetAccessor */:
+            case 211 /* FunctionExpression */:
+            case 254 /* FunctionDeclaration */:
+            case 212 /* ArrowFunction */:
                 return visitNodes(cbNode, cbNodes, node.decorators) ||
                     visitNodes(cbNode, cbNodes, node.modifiers) ||
                     visitNode(cbNode, node.asteriskToken) ||
@@ -29123,326 +29792,333 @@
                     visitNode(cbNode, node.type) ||
                     visitNode(cbNode, node.equalsGreaterThanToken) ||
                     visitNode(cbNode, node.body);
-            case 174 /* TypeReference */:
+            case 168 /* ClassStaticBlockDeclaration */:
+                return visitNodes(cbNode, cbNodes, node.decorators) ||
+                    visitNodes(cbNode, cbNodes, node.modifiers) ||
+                    visitNode(cbNode, node.body);
+            case 176 /* TypeReference */:
                 return visitNode(cbNode, node.typeName) ||
                     visitNodes(cbNode, cbNodes, node.typeArguments);
-            case 173 /* TypePredicate */:
+            case 175 /* TypePredicate */:
                 return visitNode(cbNode, node.assertsModifier) ||
                     visitNode(cbNode, node.parameterName) ||
                     visitNode(cbNode, node.type);
-            case 177 /* TypeQuery */:
+            case 179 /* TypeQuery */:
                 return visitNode(cbNode, node.exprName);
-            case 178 /* TypeLiteral */:
+            case 180 /* TypeLiteral */:
                 return visitNodes(cbNode, cbNodes, node.members);
-            case 179 /* ArrayType */:
+            case 181 /* ArrayType */:
                 return visitNode(cbNode, node.elementType);
-            case 180 /* TupleType */:
+            case 182 /* TupleType */:
                 return visitNodes(cbNode, cbNodes, node.elements);
-            case 183 /* UnionType */:
-            case 184 /* IntersectionType */:
+            case 185 /* UnionType */:
+            case 186 /* IntersectionType */:
                 return visitNodes(cbNode, cbNodes, node.types);
-            case 185 /* ConditionalType */:
+            case 187 /* ConditionalType */:
                 return visitNode(cbNode, node.checkType) ||
                     visitNode(cbNode, node.extendsType) ||
                     visitNode(cbNode, node.trueType) ||
                     visitNode(cbNode, node.falseType);
-            case 186 /* InferType */:
+            case 188 /* InferType */:
                 return visitNode(cbNode, node.typeParameter);
-            case 196 /* ImportType */:
+            case 198 /* ImportType */:
                 return visitNode(cbNode, node.argument) ||
                     visitNode(cbNode, node.qualifier) ||
                     visitNodes(cbNode, cbNodes, node.typeArguments);
-            case 187 /* ParenthesizedType */:
-            case 189 /* TypeOperator */:
+            case 189 /* ParenthesizedType */:
+            case 191 /* TypeOperator */:
                 return visitNode(cbNode, node.type);
-            case 190 /* IndexedAccessType */:
+            case 192 /* IndexedAccessType */:
                 return visitNode(cbNode, node.objectType) ||
                     visitNode(cbNode, node.indexType);
-            case 191 /* MappedType */:
+            case 193 /* MappedType */:
                 return visitNode(cbNode, node.readonlyToken) ||
                     visitNode(cbNode, node.typeParameter) ||
                     visitNode(cbNode, node.nameType) ||
                     visitNode(cbNode, node.questionToken) ||
                     visitNode(cbNode, node.type);
-            case 192 /* LiteralType */:
+            case 194 /* LiteralType */:
                 return visitNode(cbNode, node.literal);
-            case 193 /* NamedTupleMember */:
+            case 195 /* NamedTupleMember */:
                 return visitNode(cbNode, node.dotDotDotToken) ||
                     visitNode(cbNode, node.name) ||
                     visitNode(cbNode, node.questionToken) ||
                     visitNode(cbNode, node.type);
-            case 197 /* ObjectBindingPattern */:
-            case 198 /* ArrayBindingPattern */:
+            case 199 /* ObjectBindingPattern */:
+            case 200 /* ArrayBindingPattern */:
                 return visitNodes(cbNode, cbNodes, node.elements);
-            case 200 /* ArrayLiteralExpression */:
+            case 202 /* ArrayLiteralExpression */:
                 return visitNodes(cbNode, cbNodes, node.elements);
-            case 201 /* ObjectLiteralExpression */:
+            case 203 /* ObjectLiteralExpression */:
                 return visitNodes(cbNode, cbNodes, node.properties);
-            case 202 /* PropertyAccessExpression */:
+            case 204 /* PropertyAccessExpression */:
                 return visitNode(cbNode, node.expression) ||
                     visitNode(cbNode, node.questionDotToken) ||
                     visitNode(cbNode, node.name);
-            case 203 /* ElementAccessExpression */:
+            case 205 /* ElementAccessExpression */:
                 return visitNode(cbNode, node.expression) ||
                     visitNode(cbNode, node.questionDotToken) ||
                     visitNode(cbNode, node.argumentExpression);
-            case 204 /* CallExpression */:
-            case 205 /* NewExpression */:
+            case 206 /* CallExpression */:
+            case 207 /* NewExpression */:
                 return visitNode(cbNode, node.expression) ||
                     visitNode(cbNode, node.questionDotToken) ||
                     visitNodes(cbNode, cbNodes, node.typeArguments) ||
                     visitNodes(cbNode, cbNodes, node.arguments);
-            case 206 /* TaggedTemplateExpression */:
+            case 208 /* TaggedTemplateExpression */:
                 return visitNode(cbNode, node.tag) ||
                     visitNode(cbNode, node.questionDotToken) ||
                     visitNodes(cbNode, cbNodes, node.typeArguments) ||
                     visitNode(cbNode, node.template);
-            case 207 /* TypeAssertionExpression */:
+            case 209 /* TypeAssertionExpression */:
                 return visitNode(cbNode, node.type) ||
                     visitNode(cbNode, node.expression);
-            case 208 /* ParenthesizedExpression */:
+            case 210 /* ParenthesizedExpression */:
                 return visitNode(cbNode, node.expression);
-            case 211 /* DeleteExpression */:
+            case 213 /* DeleteExpression */:
                 return visitNode(cbNode, node.expression);
-            case 212 /* TypeOfExpression */:
+            case 214 /* TypeOfExpression */:
                 return visitNode(cbNode, node.expression);
-            case 213 /* VoidExpression */:
+            case 215 /* VoidExpression */:
                 return visitNode(cbNode, node.expression);
-            case 215 /* PrefixUnaryExpression */:
+            case 217 /* PrefixUnaryExpression */:
                 return visitNode(cbNode, node.operand);
-            case 220 /* YieldExpression */:
+            case 222 /* YieldExpression */:
                 return visitNode(cbNode, node.asteriskToken) ||
                     visitNode(cbNode, node.expression);
-            case 214 /* AwaitExpression */:
+            case 216 /* AwaitExpression */:
                 return visitNode(cbNode, node.expression);
-            case 216 /* PostfixUnaryExpression */:
+            case 218 /* PostfixUnaryExpression */:
                 return visitNode(cbNode, node.operand);
-            case 217 /* BinaryExpression */:
+            case 219 /* BinaryExpression */:
                 return visitNode(cbNode, node.left) ||
                     visitNode(cbNode, node.operatorToken) ||
                     visitNode(cbNode, node.right);
-            case 225 /* AsExpression */:
+            case 227 /* AsExpression */:
                 return visitNode(cbNode, node.expression) ||
                     visitNode(cbNode, node.type);
-            case 226 /* NonNullExpression */:
+            case 228 /* NonNullExpression */:
                 return visitNode(cbNode, node.expression);
-            case 227 /* MetaProperty */:
+            case 229 /* MetaProperty */:
                 return visitNode(cbNode, node.name);
-            case 218 /* ConditionalExpression */:
+            case 220 /* ConditionalExpression */:
                 return visitNode(cbNode, node.condition) ||
                     visitNode(cbNode, node.questionToken) ||
                     visitNode(cbNode, node.whenTrue) ||
                     visitNode(cbNode, node.colonToken) ||
                     visitNode(cbNode, node.whenFalse);
-            case 221 /* SpreadElement */:
+            case 223 /* SpreadElement */:
                 return visitNode(cbNode, node.expression);
-            case 231 /* Block */:
-            case 258 /* ModuleBlock */:
+            case 233 /* Block */:
+            case 260 /* ModuleBlock */:
                 return visitNodes(cbNode, cbNodes, node.statements);
-            case 298 /* SourceFile */:
+            case 300 /* SourceFile */:
                 return visitNodes(cbNode, cbNodes, node.statements) ||
                     visitNode(cbNode, node.endOfFileToken);
-            case 233 /* VariableStatement */:
+            case 235 /* VariableStatement */:
                 return visitNodes(cbNode, cbNodes, node.decorators) ||
                     visitNodes(cbNode, cbNodes, node.modifiers) ||
                     visitNode(cbNode, node.declarationList);
-            case 251 /* VariableDeclarationList */:
+            case 253 /* VariableDeclarationList */:
                 return visitNodes(cbNode, cbNodes, node.declarations);
-            case 234 /* ExpressionStatement */:
+            case 236 /* ExpressionStatement */:
                 return visitNode(cbNode, node.expression);
-            case 235 /* IfStatement */:
+            case 237 /* IfStatement */:
                 return visitNode(cbNode, node.expression) ||
                     visitNode(cbNode, node.thenStatement) ||
                     visitNode(cbNode, node.elseStatement);
-            case 236 /* DoStatement */:
+            case 238 /* DoStatement */:
                 return visitNode(cbNode, node.statement) ||
                     visitNode(cbNode, node.expression);
-            case 237 /* WhileStatement */:
+            case 239 /* WhileStatement */:
                 return visitNode(cbNode, node.expression) ||
                     visitNode(cbNode, node.statement);
-            case 238 /* ForStatement */:
+            case 240 /* ForStatement */:
                 return visitNode(cbNode, node.initializer) ||
                     visitNode(cbNode, node.condition) ||
                     visitNode(cbNode, node.incrementor) ||
                     visitNode(cbNode, node.statement);
-            case 239 /* ForInStatement */:
+            case 241 /* ForInStatement */:
                 return visitNode(cbNode, node.initializer) ||
                     visitNode(cbNode, node.expression) ||
                     visitNode(cbNode, node.statement);
-            case 240 /* ForOfStatement */:
+            case 242 /* ForOfStatement */:
                 return visitNode(cbNode, node.awaitModifier) ||
                     visitNode(cbNode, node.initializer) ||
                     visitNode(cbNode, node.expression) ||
                     visitNode(cbNode, node.statement);
-            case 241 /* ContinueStatement */:
-            case 242 /* BreakStatement */:
+            case 243 /* ContinueStatement */:
+            case 244 /* BreakStatement */:
                 return visitNode(cbNode, node.label);
-            case 243 /* ReturnStatement */:
+            case 245 /* ReturnStatement */:
                 return visitNode(cbNode, node.expression);
-            case 244 /* WithStatement */:
+            case 246 /* WithStatement */:
                 return visitNode(cbNode, node.expression) ||
                     visitNode(cbNode, node.statement);
-            case 245 /* SwitchStatement */:
+            case 247 /* SwitchStatement */:
                 return visitNode(cbNode, node.expression) ||
                     visitNode(cbNode, node.caseBlock);
-            case 259 /* CaseBlock */:
+            case 261 /* CaseBlock */:
                 return visitNodes(cbNode, cbNodes, node.clauses);
-            case 285 /* CaseClause */:
+            case 287 /* CaseClause */:
                 return visitNode(cbNode, node.expression) ||
                     visitNodes(cbNode, cbNodes, node.statements);
-            case 286 /* DefaultClause */:
+            case 288 /* DefaultClause */:
                 return visitNodes(cbNode, cbNodes, node.statements);
-            case 246 /* LabeledStatement */:
+            case 248 /* LabeledStatement */:
                 return visitNode(cbNode, node.label) ||
                     visitNode(cbNode, node.statement);
-            case 247 /* ThrowStatement */:
+            case 249 /* ThrowStatement */:
                 return visitNode(cbNode, node.expression);
-            case 248 /* TryStatement */:
+            case 250 /* TryStatement */:
                 return visitNode(cbNode, node.tryBlock) ||
                     visitNode(cbNode, node.catchClause) ||
                     visitNode(cbNode, node.finallyBlock);
-            case 288 /* CatchClause */:
+            case 290 /* CatchClause */:
                 return visitNode(cbNode, node.variableDeclaration) ||
                     visitNode(cbNode, node.block);
-            case 162 /* Decorator */:
+            case 163 /* Decorator */:
                 return visitNode(cbNode, node.expression);
-            case 253 /* ClassDeclaration */:
-            case 222 /* ClassExpression */:
+            case 255 /* ClassDeclaration */:
+            case 224 /* ClassExpression */:
                 return visitNodes(cbNode, cbNodes, node.decorators) ||
                     visitNodes(cbNode, cbNodes, node.modifiers) ||
                     visitNode(cbNode, node.name) ||
                     visitNodes(cbNode, cbNodes, node.typeParameters) ||
                     visitNodes(cbNode, cbNodes, node.heritageClauses) ||
                     visitNodes(cbNode, cbNodes, node.members);
-            case 254 /* InterfaceDeclaration */:
+            case 256 /* InterfaceDeclaration */:
                 return visitNodes(cbNode, cbNodes, node.decorators) ||
                     visitNodes(cbNode, cbNodes, node.modifiers) ||
                     visitNode(cbNode, node.name) ||
                     visitNodes(cbNode, cbNodes, node.typeParameters) ||
                     visitNodes(cbNode, cbNodes, node.heritageClauses) ||
                     visitNodes(cbNode, cbNodes, node.members);
-            case 255 /* TypeAliasDeclaration */:
+            case 257 /* TypeAliasDeclaration */:
                 return visitNodes(cbNode, cbNodes, node.decorators) ||
                     visitNodes(cbNode, cbNodes, node.modifiers) ||
                     visitNode(cbNode, node.name) ||
                     visitNodes(cbNode, cbNodes, node.typeParameters) ||
                     visitNode(cbNode, node.type);
-            case 256 /* EnumDeclaration */:
+            case 258 /* EnumDeclaration */:
                 return visitNodes(cbNode, cbNodes, node.decorators) ||
                     visitNodes(cbNode, cbNodes, node.modifiers) ||
                     visitNode(cbNode, node.name) ||
                     visitNodes(cbNode, cbNodes, node.members);
-            case 292 /* EnumMember */:
+            case 294 /* EnumMember */:
                 return visitNode(cbNode, node.name) ||
                     visitNode(cbNode, node.initializer);
-            case 257 /* ModuleDeclaration */:
+            case 259 /* ModuleDeclaration */:
                 return visitNodes(cbNode, cbNodes, node.decorators) ||
                     visitNodes(cbNode, cbNodes, node.modifiers) ||
                     visitNode(cbNode, node.name) ||
                     visitNode(cbNode, node.body);
-            case 261 /* ImportEqualsDeclaration */:
+            case 263 /* ImportEqualsDeclaration */:
                 return visitNodes(cbNode, cbNodes, node.decorators) ||
                     visitNodes(cbNode, cbNodes, node.modifiers) ||
                     visitNode(cbNode, node.name) ||
                     visitNode(cbNode, node.moduleReference);
-            case 262 /* ImportDeclaration */:
+            case 264 /* ImportDeclaration */:
                 return visitNodes(cbNode, cbNodes, node.decorators) ||
                     visitNodes(cbNode, cbNodes, node.modifiers) ||
                     visitNode(cbNode, node.importClause) ||
                     visitNode(cbNode, node.moduleSpecifier);
-            case 263 /* ImportClause */:
+            case 265 /* ImportClause */:
                 return visitNode(cbNode, node.name) ||
                     visitNode(cbNode, node.namedBindings);
-            case 260 /* NamespaceExportDeclaration */:
+            case 262 /* NamespaceExportDeclaration */:
                 return visitNode(cbNode, node.name);
-            case 264 /* NamespaceImport */:
+            case 266 /* NamespaceImport */:
                 return visitNode(cbNode, node.name);
-            case 270 /* NamespaceExport */:
+            case 272 /* NamespaceExport */:
                 return visitNode(cbNode, node.name);
-            case 265 /* NamedImports */:
-            case 269 /* NamedExports */:
+            case 267 /* NamedImports */:
+            case 271 /* NamedExports */:
                 return visitNodes(cbNode, cbNodes, node.elements);
-            case 268 /* ExportDeclaration */:
+            case 270 /* ExportDeclaration */:
                 return visitNodes(cbNode, cbNodes, node.decorators) ||
                     visitNodes(cbNode, cbNodes, node.modifiers) ||
                     visitNode(cbNode, node.exportClause) ||
                     visitNode(cbNode, node.moduleSpecifier);
-            case 266 /* ImportSpecifier */:
-            case 271 /* ExportSpecifier */:
+            case 268 /* ImportSpecifier */:
+            case 273 /* ExportSpecifier */:
                 return visitNode(cbNode, node.propertyName) ||
                     visitNode(cbNode, node.name);
-            case 267 /* ExportAssignment */:
+            case 269 /* ExportAssignment */:
                 return visitNodes(cbNode, cbNodes, node.decorators) ||
                     visitNodes(cbNode, cbNodes, node.modifiers) ||
                     visitNode(cbNode, node.expression);
-            case 219 /* TemplateExpression */:
+            case 221 /* TemplateExpression */:
                 return visitNode(cbNode, node.head) || visitNodes(cbNode, cbNodes, node.templateSpans);
-            case 229 /* TemplateSpan */:
+            case 231 /* TemplateSpan */:
                 return visitNode(cbNode, node.expression) || visitNode(cbNode, node.literal);
-            case 194 /* TemplateLiteralType */:
+            case 196 /* TemplateLiteralType */:
                 return visitNode(cbNode, node.head) || visitNodes(cbNode, cbNodes, node.templateSpans);
-            case 195 /* TemplateLiteralTypeSpan */:
+            case 197 /* TemplateLiteralTypeSpan */:
                 return visitNode(cbNode, node.type) || visitNode(cbNode, node.literal);
-            case 159 /* ComputedPropertyName */:
+            case 160 /* ComputedPropertyName */:
                 return visitNode(cbNode, node.expression);
-            case 287 /* HeritageClause */:
+            case 289 /* HeritageClause */:
                 return visitNodes(cbNode, cbNodes, node.types);
-            case 224 /* ExpressionWithTypeArguments */:
+            case 226 /* ExpressionWithTypeArguments */:
                 return visitNode(cbNode, node.expression) ||
                     visitNodes(cbNode, cbNodes, node.typeArguments);
-            case 273 /* ExternalModuleReference */:
+            case 275 /* ExternalModuleReference */:
                 return visitNode(cbNode, node.expression);
-            case 272 /* MissingDeclaration */:
+            case 274 /* MissingDeclaration */:
                 return visitNodes(cbNode, cbNodes, node.decorators);
-            case 341 /* CommaListExpression */:
+            case 346 /* CommaListExpression */:
                 return visitNodes(cbNode, cbNodes, node.elements);
-            case 274 /* JsxElement */:
+            case 276 /* JsxElement */:
                 return visitNode(cbNode, node.openingElement) ||
                     visitNodes(cbNode, cbNodes, node.children) ||
                     visitNode(cbNode, node.closingElement);
-            case 278 /* JsxFragment */:
+            case 280 /* JsxFragment */:
                 return visitNode(cbNode, node.openingFragment) ||
                     visitNodes(cbNode, cbNodes, node.children) ||
                     visitNode(cbNode, node.closingFragment);
-            case 275 /* JsxSelfClosingElement */:
-            case 276 /* JsxOpeningElement */:
+            case 277 /* JsxSelfClosingElement */:
+            case 278 /* JsxOpeningElement */:
                 return visitNode(cbNode, node.tagName) ||
                     visitNodes(cbNode, cbNodes, node.typeArguments) ||
                     visitNode(cbNode, node.attributes);
-            case 282 /* JsxAttributes */:
+            case 284 /* JsxAttributes */:
                 return visitNodes(cbNode, cbNodes, node.properties);
-            case 281 /* JsxAttribute */:
+            case 283 /* JsxAttribute */:
                 return visitNode(cbNode, node.name) ||
                     visitNode(cbNode, node.initializer);
-            case 283 /* JsxSpreadAttribute */:
+            case 285 /* JsxSpreadAttribute */:
                 return visitNode(cbNode, node.expression);
-            case 284 /* JsxExpression */:
+            case 286 /* JsxExpression */:
                 return visitNode(cbNode, node.dotDotDotToken) ||
                     visitNode(cbNode, node.expression);
-            case 277 /* JsxClosingElement */:
+            case 279 /* JsxClosingElement */:
                 return visitNode(cbNode, node.tagName);
-            case 181 /* OptionalType */:
-            case 182 /* RestType */:
-            case 302 /* JSDocTypeExpression */:
-            case 307 /* JSDocNonNullableType */:
-            case 306 /* JSDocNullableType */:
-            case 308 /* JSDocOptionalType */:
-            case 310 /* JSDocVariadicType */:
+            case 183 /* OptionalType */:
+            case 184 /* RestType */:
+            case 304 /* JSDocTypeExpression */:
+            case 310 /* JSDocNonNullableType */:
+            case 309 /* JSDocNullableType */:
+            case 311 /* JSDocOptionalType */:
+            case 313 /* JSDocVariadicType */:
                 return visitNode(cbNode, node.type);
-            case 309 /* JSDocFunctionType */:
+            case 312 /* JSDocFunctionType */:
                 return visitNodes(cbNode, cbNodes, node.parameters) ||
                     visitNode(cbNode, node.type);
-            case 312 /* JSDocComment */:
+            case 315 /* JSDocComment */:
                 return (typeof node.comment === "string" ? undefined : visitNodes(cbNode, cbNodes, node.comment))
                     || visitNodes(cbNode, cbNodes, node.tags);
-            case 336 /* JSDocSeeTag */:
+            case 341 /* JSDocSeeTag */:
                 return visitNode(cbNode, node.tagName) ||
                     visitNode(cbNode, node.name) ||
                     (typeof node.comment === "string" ? undefined : visitNodes(cbNode, cbNodes, node.comment));
-            case 303 /* JSDocNameReference */:
+            case 305 /* JSDocNameReference */:
                 return visitNode(cbNode, node.name);
-            case 330 /* JSDocParameterTag */:
-            case 337 /* JSDocPropertyTag */:
+            case 306 /* JSDocMemberName */:
+                return visitNode(cbNode, node.left) ||
+                    visitNode(cbNode, node.right);
+            case 335 /* JSDocParameterTag */:
+            case 342 /* JSDocPropertyTag */:
                 return visitNode(cbNode, node.tagName) ||
                     (node.isNameFirst
                         ? visitNode(cbNode, node.name) ||
@@ -29451,62 +30127,64 @@
                         : visitNode(cbNode, node.typeExpression) ||
                             visitNode(cbNode, node.name) ||
                             (typeof node.comment === "string" ? undefined : visitNodes(cbNode, cbNodes, node.comment)));
-            case 320 /* JSDocAuthorTag */:
+            case 325 /* JSDocAuthorTag */:
                 return visitNode(cbNode, node.tagName) ||
                     (typeof node.comment === "string" ? undefined : visitNodes(cbNode, cbNodes, node.comment));
-            case 319 /* JSDocImplementsTag */:
+            case 324 /* JSDocImplementsTag */:
                 return visitNode(cbNode, node.tagName) ||
                     visitNode(cbNode, node.class) ||
                     (typeof node.comment === "string" ? undefined : visitNodes(cbNode, cbNodes, node.comment));
-            case 318 /* JSDocAugmentsTag */:
+            case 323 /* JSDocAugmentsTag */:
                 return visitNode(cbNode, node.tagName) ||
                     visitNode(cbNode, node.class) ||
                     (typeof node.comment === "string" ? undefined : visitNodes(cbNode, cbNodes, node.comment));
-            case 334 /* JSDocTemplateTag */:
+            case 339 /* JSDocTemplateTag */:
                 return visitNode(cbNode, node.tagName) ||
                     visitNode(cbNode, node.constraint) ||
                     visitNodes(cbNode, cbNodes, node.typeParameters) ||
                     (typeof node.comment === "string" ? undefined : visitNodes(cbNode, cbNodes, node.comment));
-            case 335 /* JSDocTypedefTag */:
+            case 340 /* JSDocTypedefTag */:
                 return visitNode(cbNode, node.tagName) ||
                     (node.typeExpression &&
-                        node.typeExpression.kind === 302 /* JSDocTypeExpression */
+                        node.typeExpression.kind === 304 /* JSDocTypeExpression */
                         ? visitNode(cbNode, node.typeExpression) ||
                             visitNode(cbNode, node.fullName) ||
                             (typeof node.comment === "string" ? undefined : visitNodes(cbNode, cbNodes, node.comment))
                         : visitNode(cbNode, node.fullName) ||
-                            visitNode(cbNode, node.typeExpression)) ||
-                    (typeof node.comment === "string" ? undefined : visitNodes(cbNode, cbNodes, node.comment));
-            case 328 /* JSDocCallbackTag */:
+                            visitNode(cbNode, node.typeExpression) ||
+                            (typeof node.comment === "string" ? undefined : visitNodes(cbNode, cbNodes, node.comment)));
+            case 333 /* JSDocCallbackTag */:
                 return visitNode(cbNode, node.tagName) ||
                     visitNode(cbNode, node.fullName) ||
                     visitNode(cbNode, node.typeExpression) ||
                     (typeof node.comment === "string" ? undefined : visitNodes(cbNode, cbNodes, node.comment));
-            case 331 /* JSDocReturnTag */:
-            case 333 /* JSDocTypeTag */:
-            case 332 /* JSDocThisTag */:
-            case 329 /* JSDocEnumTag */:
+            case 336 /* JSDocReturnTag */:
+            case 338 /* JSDocTypeTag */:
+            case 337 /* JSDocThisTag */:
+            case 334 /* JSDocEnumTag */:
                 return visitNode(cbNode, node.tagName) ||
                     visitNode(cbNode, node.typeExpression) ||
                     (typeof node.comment === "string" ? undefined : visitNodes(cbNode, cbNodes, node.comment));
-            case 315 /* JSDocSignature */:
+            case 318 /* JSDocSignature */:
                 return ts.forEach(node.typeParameters, cbNode) ||
                     ts.forEach(node.parameters, cbNode) ||
                     visitNode(cbNode, node.type);
-            case 316 /* JSDocLink */:
+            case 319 /* JSDocLink */:
+            case 320 /* JSDocLinkCode */:
+            case 321 /* JSDocLinkPlain */:
                 return visitNode(cbNode, node.name);
-            case 314 /* JSDocTypeLiteral */:
+            case 317 /* JSDocTypeLiteral */:
                 return ts.forEach(node.jsDocPropertyTags, cbNode);
-            case 317 /* JSDocTag */:
-            case 322 /* JSDocClassTag */:
-            case 323 /* JSDocPublicTag */:
-            case 324 /* JSDocPrivateTag */:
-            case 325 /* JSDocProtectedTag */:
-            case 326 /* JSDocReadonlyTag */:
-            case 321 /* JSDocDeprecatedTag */:
+            case 322 /* JSDocTag */:
+            case 327 /* JSDocClassTag */:
+            case 328 /* JSDocPublicTag */:
+            case 329 /* JSDocPrivateTag */:
+            case 330 /* JSDocProtectedTag */:
+            case 331 /* JSDocReadonlyTag */:
+            case 326 /* JSDocDeprecatedTag */:
                 return visitNode(cbNode, node.tagName)
                     || (typeof node.comment === "string" ? undefined : visitNodes(cbNode, cbNodes, node.comment));
-            case 340 /* PartiallyEmittedExpression */:
+            case 345 /* PartiallyEmittedExpression */:
                 return visitNode(cbNode, node.expression);
         }
     }
@@ -29555,7 +30233,7 @@
                         continue;
                     return res;
                 }
-                if (current.kind >= 158 /* FirstNode */) {
+                if (current.kind >= 159 /* FirstNode */) {
                     // add children in reverse order to the queue, so popping gives the first child
                     for (var _i = 0, _a = gatherPossibleChildren(current); _i < _a.length; _i++) {
                         var child = _a[_i];
@@ -29826,9 +30504,9 @@
                         case 22 /* OpenBracketToken */:
                             expression_1 = parseArrayLiteralExpression();
                             break;
-                        case 109 /* TrueKeyword */:
-                        case 94 /* FalseKeyword */:
-                        case 103 /* NullKeyword */:
+                        case 110 /* TrueKeyword */:
+                        case 95 /* FalseKeyword */:
+                        case 104 /* NullKeyword */:
                             expression_1 = parseTokenNode();
                             break;
                         case 40 /* MinusToken */:
@@ -30280,6 +30958,9 @@
         function reScanLessThanToken() {
             return currentToken = scanner.reScanLessThanToken();
         }
+        function reScanHashToken() {
+            return currentToken = scanner.reScanHashToken();
+        }
         function scanJsxIdentifier() {
             return currentToken = scanner.scanJsxIdentifier();
         }
@@ -30334,27 +31015,28 @@
             return speculationHelper(callback, 0 /* TryParse */);
         }
         function isBindingIdentifier() {
-            if (token() === 78 /* Identifier */) {
+            if (token() === 79 /* Identifier */) {
                 return true;
             }
-            return token() > 115 /* LastReservedWord */;
+            // `let await`/`let yield` in [Yield] or [Await] are allowed here and disallowed in the binder.
+            return token() > 116 /* LastReservedWord */;
         }
         // Ignore strict mode flag because we will report an error in type checker instead.
         function isIdentifier() {
-            if (token() === 78 /* Identifier */) {
+            if (token() === 79 /* Identifier */) {
                 return true;
             }
             // If we have a 'yield' keyword, and we're in the [yield] context, then 'yield' is
             // considered a keyword and is not an identifier.
-            if (token() === 124 /* YieldKeyword */ && inYieldContext()) {
+            if (token() === 125 /* YieldKeyword */ && inYieldContext()) {
                 return false;
             }
             // If we have a 'await' keyword, and we're in the [Await] context, then 'await' is
             // considered a keyword and is not an identifier.
-            if (token() === 130 /* AwaitKeyword */ && inAwaitContext()) {
+            if (token() === 131 /* AwaitKeyword */ && inAwaitContext()) {
                 return false;
             }
-            return token() > 115 /* LastReservedWord */;
+            return token() > 116 /* LastReservedWord */;
         }
         function parseExpected(kind, diagnosticMessage, shouldAdvance) {
             if (shouldAdvance === void 0) { shouldAdvance = true; }
@@ -30373,6 +31055,128 @@
             }
             return false;
         }
+        var viableKeywordSuggestions = Object.keys(ts.textToKeywordObj).filter(function (keyword) { return keyword.length > 2; });
+        /**
+         * Provides a better error message than the generic "';' expected" if possible for
+         * known common variants of a missing semicolon, such as from a mispelled names.
+         *
+         * @param node Node preceding the expected semicolon location.
+         */
+        function parseErrorForMissingSemicolonAfter(node) {
+            var _a;
+            // Tagged template literals are sometimes used in places where only simple strings are allowed, i.e.:
+            //   module `M1` {
+            //   ^^^^^^^^^^^ This block is parsed as a template literal like module`M1`.
+            if (ts.isTaggedTemplateExpression(node)) {
+                parseErrorAt(ts.skipTrivia(sourceText, node.template.pos), node.template.end, ts.Diagnostics.Module_declaration_names_may_only_use_or_quoted_strings);
+                return;
+            }
+            // Otherwise, if this isn't a well-known keyword-like identifier, give the generic fallback message.
+            var expressionText = ts.isIdentifier(node) ? ts.idText(node) : undefined;
+            if (!expressionText || !ts.isIdentifierText(expressionText, languageVersion)) {
+                parseErrorAtCurrentToken(ts.Diagnostics._0_expected, ts.tokenToString(26 /* SemicolonToken */));
+                return;
+            }
+            var pos = ts.skipTrivia(sourceText, node.pos);
+            // Some known keywords are likely signs of syntax being used improperly.
+            switch (expressionText) {
+                case "const":
+                case "let":
+                case "var":
+                    parseErrorAt(pos, node.end, ts.Diagnostics.Variable_declaration_not_allowed_at_this_location);
+                    return;
+                case "declare":
+                    // If a declared node failed to parse, it would have emitted a diagnostic already.
+                    return;
+                case "interface":
+                    parseErrorForInvalidName(ts.Diagnostics.Interface_name_cannot_be_0, ts.Diagnostics.Interface_must_be_given_a_name, 18 /* OpenBraceToken */);
+                    return;
+                case "is":
+                    parseErrorAt(pos, scanner.getTextPos(), ts.Diagnostics.A_type_predicate_is_only_allowed_in_return_type_position_for_functions_and_methods);
+                    return;
+                case "module":
+                case "namespace":
+                    parseErrorForInvalidName(ts.Diagnostics.Namespace_name_cannot_be_0, ts.Diagnostics.Namespace_must_be_given_a_name, 18 /* OpenBraceToken */);
+                    return;
+                case "type":
+                    parseErrorForInvalidName(ts.Diagnostics.Type_alias_name_cannot_be_0, ts.Diagnostics.Type_alias_must_be_given_a_name, 63 /* EqualsToken */);
+                    return;
+            }
+            // The user alternatively might have misspelled or forgotten to add a space after a common keyword.
+            var suggestion = (_a = ts.getSpellingSuggestion(expressionText, viableKeywordSuggestions, function (n) { return n; })) !== null && _a !== void 0 ? _a : getSpaceSuggestion(expressionText);
+            if (suggestion) {
+                parseErrorAt(pos, node.end, ts.Diagnostics.Unknown_keyword_or_identifier_Did_you_mean_0, suggestion);
+                return;
+            }
+            // Unknown tokens are handled with their own errors in the scanner
+            if (token() === 0 /* Unknown */) {
+                return;
+            }
+            // Otherwise, we know this some kind of unknown word, not just a missing expected semicolon.
+            parseErrorAt(pos, node.end, ts.Diagnostics.Unexpected_keyword_or_identifier);
+        }
+        /**
+         * Reports a diagnostic error for the current token being an invalid name.
+         *
+         * @param blankDiagnostic Diagnostic to report for the case of the name being blank (matched tokenIfBlankName).
+         * @param nameDiagnostic Diagnostic to report for all other cases.
+         * @param tokenIfBlankName Current token if the name was invalid for being blank (not provided / skipped).
+         */
+        function parseErrorForInvalidName(nameDiagnostic, blankDiagnostic, tokenIfBlankName) {
+            if (token() === tokenIfBlankName) {
+                parseErrorAtCurrentToken(blankDiagnostic);
+            }
+            else {
+                parseErrorAtCurrentToken(nameDiagnostic, ts.tokenToString(token()));
+            }
+        }
+        function getSpaceSuggestion(expressionText) {
+            for (var _i = 0, viableKeywordSuggestions_1 = viableKeywordSuggestions; _i < viableKeywordSuggestions_1.length; _i++) {
+                var keyword = viableKeywordSuggestions_1[_i];
+                if (expressionText.length > keyword.length + 2 && ts.startsWith(expressionText, keyword)) {
+                    return keyword + " " + expressionText.slice(keyword.length);
+                }
+            }
+            return undefined;
+        }
+        function parseSemicolonAfterPropertyName(name, type, initializer) {
+            if (token() === 59 /* AtToken */ && !scanner.hasPrecedingLineBreak()) {
+                parseErrorAtCurrentToken(ts.Diagnostics.Decorators_must_precede_the_name_and_all_keywords_of_property_declarations);
+                return;
+            }
+            if (token() === 20 /* OpenParenToken */) {
+                parseErrorAtCurrentToken(ts.Diagnostics.Cannot_start_a_function_call_in_a_type_annotation);
+                nextToken();
+                return;
+            }
+            if (type && !canParseSemicolon()) {
+                if (initializer) {
+                    parseErrorAtCurrentToken(ts.Diagnostics._0_expected, ts.tokenToString(26 /* SemicolonToken */));
+                }
+                else {
+                    parseErrorAtCurrentToken(ts.Diagnostics.Expected_for_property_initializer);
+                }
+                return;
+            }
+            if (tryParseSemicolon()) {
+                return;
+            }
+            // If an initializer was parsed but there is still an error in finding the next semicolon,
+            // we generally know there was an error already reported in the initializer...
+            //   class Example { a = new Map([), ) }
+            //                                ~
+            if (initializer) {
+                // ...unless we've found the start of a block after a property declaration, in which
+                // case we can know that regardless of the initializer we should complain on the block.
+                //   class Example { a = 0 {} }
+                //                         ~
+                if (token() === 18 /* OpenBraceToken */) {
+                    parseErrorAtCurrentToken(ts.Diagnostics._0_expected, ts.tokenToString(26 /* SemicolonToken */));
+                }
+                return;
+            }
+            parseErrorForMissingSemicolonAfter(name);
+        }
         function parseExpectedJSDoc(kind) {
             if (token() === kind) {
                 nextTokenJSDoc();
@@ -30428,17 +31232,18 @@
             // We can parse out an optional semicolon in ASI cases in the following cases.
             return token() === 19 /* CloseBraceToken */ || token() === 1 /* EndOfFileToken */ || scanner.hasPrecedingLineBreak();
         }
+        function tryParseSemicolon() {
+            if (!canParseSemicolon()) {
+                return false;
+            }
+            if (token() === 26 /* SemicolonToken */) {
+                // consume the semicolon if it was explicitly provided.
+                nextToken();
+            }
+            return true;
+        }
         function parseSemicolon() {
-            if (canParseSemicolon()) {
-                if (token() === 26 /* SemicolonToken */) {
-                    // consume the semicolon if it was explicitly provided.
-                    nextToken();
-                }
-                return true;
-            }
-            else {
-                return parseExpected(26 /* SemicolonToken */);
-            }
+            return tryParseSemicolon() || parseExpected(26 /* SemicolonToken */);
         }
         function createNodeArray(elements, pos, end, hasTrailingComma) {
             var array = factory.createNodeArray(elements, hasTrailingComma);
@@ -30467,11 +31272,11 @@
                 parseErrorAtCurrentToken(diagnosticMessage, arg0);
             }
             var pos = getNodePos();
-            var result = kind === 78 /* Identifier */ ? factory.createIdentifier("", /*typeArguments*/ undefined, /*originalKeywordKind*/ undefined) :
+            var result = kind === 79 /* Identifier */ ? factory.createIdentifier("", /*typeArguments*/ undefined, /*originalKeywordKind*/ undefined) :
                 ts.isTemplateLiteralKind(kind) ? factory.createTemplateLiteralLikeNode(kind, "", "", /*templateFlags*/ undefined) :
                     kind === 8 /* NumericLiteral */ ? factory.createNumericLiteral("", /*numericLiteralFlags*/ undefined) :
                         kind === 10 /* StringLiteral */ ? factory.createStringLiteral("", /*isSingleQuote*/ undefined) :
-                            kind === 272 /* MissingDeclaration */ ? factory.createMissingDeclaration() :
+                            kind === 274 /* MissingDeclaration */ ? factory.createMissingDeclaration() :
                                 factory.createToken(kind);
             return finishNode(result, pos);
         }
@@ -30495,11 +31300,11 @@
                 nextTokenWithoutCheck();
                 return finishNode(factory.createIdentifier(text, /*typeArguments*/ undefined, originalKeywordKind), pos);
             }
-            if (token() === 79 /* PrivateIdentifier */) {
+            if (token() === 80 /* PrivateIdentifier */) {
                 parseErrorAtCurrentToken(privateIdentifierDiagnosticMessage || ts.Diagnostics.Private_identifiers_are_not_allowed_outside_class_bodies);
                 return createIdentifier(/*isIdentifier*/ true);
             }
-            if (token() === 0 /* Unknown */ && scanner.tryScan(function () { return scanner.reScanInvalidIdentifier() === 78 /* Identifier */; })) {
+            if (token() === 0 /* Unknown */ && scanner.tryScan(function () { return scanner.reScanInvalidIdentifier() === 79 /* Identifier */; })) {
                 // Scanner has already recorded an 'Invalid character' error, so no need to add another from the parser.
                 return createIdentifier(/*isIdentifier*/ true);
             }
@@ -30511,7 +31316,7 @@
             var defaultMessage = isReservedWord ?
                 ts.Diagnostics.Identifier_expected_0_is_a_reserved_word_that_cannot_be_used_here :
                 ts.Diagnostics.Identifier_expected;
-            return createMissingNode(78 /* Identifier */, reportAtCurrentPosition, diagnosticMessage || defaultMessage, msgArg);
+            return createMissingNode(79 /* Identifier */, reportAtCurrentPosition, diagnosticMessage || defaultMessage, msgArg);
         }
         function parseBindingIdentifier(privateIdentifierDiagnosticMessage) {
             return createIdentifier(isBindingIdentifier(), /*diagnosticMessage*/ undefined, privateIdentifierDiagnosticMessage);
@@ -30536,7 +31341,7 @@
             if (allowComputedPropertyNames && token() === 22 /* OpenBracketToken */) {
                 return parseComputedPropertyName();
             }
-            if (token() === 79 /* PrivateIdentifier */) {
+            if (token() === 80 /* PrivateIdentifier */) {
                 return parsePrivateIdentifier();
             }
             return parseIdentifierName();
@@ -30582,24 +31387,24 @@
         }
         function nextTokenCanFollowModifier() {
             switch (token()) {
-                case 84 /* ConstKeyword */:
+                case 85 /* ConstKeyword */:
                     // 'const' is only a modifier if followed by 'enum'.
-                    return nextToken() === 91 /* EnumKeyword */;
-                case 92 /* ExportKeyword */:
+                    return nextToken() === 92 /* EnumKeyword */;
+                case 93 /* ExportKeyword */:
                     nextToken();
-                    if (token() === 87 /* DefaultKeyword */) {
+                    if (token() === 88 /* DefaultKeyword */) {
                         return lookAhead(nextTokenCanFollowDefaultKeyword);
                     }
-                    if (token() === 149 /* TypeKeyword */) {
+                    if (token() === 150 /* TypeKeyword */) {
                         return lookAhead(nextTokenCanFollowExportModifier);
                     }
                     return canFollowExportModifier();
-                case 87 /* DefaultKeyword */:
+                case 88 /* DefaultKeyword */:
                     return nextTokenCanFollowDefaultKeyword();
-                case 123 /* StaticKeyword */:
+                case 124 /* StaticKeyword */:
                     return nextTokenIsOnSameLineAndCanFollowModifier();
-                case 134 /* GetKeyword */:
-                case 146 /* SetKeyword */:
+                case 135 /* GetKeyword */:
+                case 147 /* SetKeyword */:
                     nextToken();
                     return canFollowModifier();
                 default:
@@ -30608,7 +31413,7 @@
         }
         function canFollowExportModifier() {
             return token() !== 41 /* AsteriskToken */
-                && token() !== 126 /* AsKeyword */
+                && token() !== 127 /* AsKeyword */
                 && token() !== 18 /* OpenBraceToken */
                 && canFollowModifier();
         }
@@ -30628,10 +31433,10 @@
         }
         function nextTokenCanFollowDefaultKeyword() {
             nextToken();
-            return token() === 83 /* ClassKeyword */ || token() === 97 /* FunctionKeyword */ ||
-                token() === 117 /* InterfaceKeyword */ ||
-                (token() === 125 /* AbstractKeyword */ && lookAhead(nextTokenIsClassKeywordOnSameLine)) ||
-                (token() === 129 /* AsyncKeyword */ && lookAhead(nextTokenIsFunctionKeywordOnSameLine));
+            return token() === 84 /* ClassKeyword */ || token() === 98 /* FunctionKeyword */ ||
+                token() === 118 /* InterfaceKeyword */ ||
+                (token() === 126 /* AbstractKeyword */ && lookAhead(nextTokenIsClassKeywordOnSameLine)) ||
+                (token() === 130 /* AsyncKeyword */ && lookAhead(nextTokenIsFunctionKeywordOnSameLine));
         }
         // True if positioned at the start of a list element
         function isListElement(parsingContext, inErrorRecovery) {
@@ -30651,7 +31456,7 @@
                     // outer module.  We just want to consume and move on.
                     return !(token() === 26 /* SemicolonToken */ && inErrorRecovery) && isStartOfStatement();
                 case 2 /* SwitchClauses */:
-                    return token() === 81 /* CaseKeyword */ || token() === 87 /* DefaultKeyword */;
+                    return token() === 82 /* CaseKeyword */ || token() === 88 /* DefaultKeyword */;
                 case 4 /* TypeMembers */:
                     return lookAhead(isTypeMemberStart);
                 case 5 /* ClassMembers */:
@@ -30737,7 +31542,7 @@
                 //      extends {} extends
                 //      extends {} implements
                 var next = nextToken();
-                return next === 27 /* CommaToken */ || next === 18 /* OpenBraceToken */ || next === 93 /* ExtendsKeyword */ || next === 116 /* ImplementsKeyword */;
+                return next === 27 /* CommaToken */ || next === 18 /* OpenBraceToken */ || next === 94 /* ExtendsKeyword */ || next === 117 /* ImplementsKeyword */;
             }
             return true;
         }
@@ -30754,8 +31559,8 @@
             return ts.tokenIsIdentifierOrKeywordOrGreaterThan(token());
         }
         function isHeritageClauseExtendsOrImplementsKeyword() {
-            if (token() === 116 /* ImplementsKeyword */ ||
-                token() === 93 /* ExtendsKeyword */) {
+            if (token() === 117 /* ImplementsKeyword */ ||
+                token() === 94 /* ExtendsKeyword */) {
                 return lookAhead(nextTokenIsStartOfExpression);
             }
             return false;
@@ -30785,14 +31590,14 @@
                 case 23 /* ImportOrExportSpecifiers */:
                     return token() === 19 /* CloseBraceToken */;
                 case 3 /* SwitchClauseStatements */:
-                    return token() === 19 /* CloseBraceToken */ || token() === 81 /* CaseKeyword */ || token() === 87 /* DefaultKeyword */;
+                    return token() === 19 /* CloseBraceToken */ || token() === 82 /* CaseKeyword */ || token() === 88 /* DefaultKeyword */;
                 case 7 /* HeritageClauseElement */:
-                    return token() === 18 /* OpenBraceToken */ || token() === 93 /* ExtendsKeyword */ || token() === 116 /* ImplementsKeyword */;
+                    return token() === 18 /* OpenBraceToken */ || token() === 94 /* ExtendsKeyword */ || token() === 117 /* ImplementsKeyword */;
                 case 8 /* VariableDeclarations */:
                     return isVariableDeclaratorListTerminator();
                 case 19 /* TypeParameters */:
                     // Tokens other than '>' are here for better error recovery
-                    return token() === 31 /* GreaterThanToken */ || token() === 20 /* OpenParenToken */ || token() === 18 /* OpenBraceToken */ || token() === 93 /* ExtendsKeyword */ || token() === 116 /* ImplementsKeyword */;
+                    return token() === 31 /* GreaterThanToken */ || token() === 20 /* OpenParenToken */ || token() === 18 /* OpenBraceToken */ || token() === 94 /* ExtendsKeyword */ || token() === 117 /* ImplementsKeyword */;
                 case 11 /* ArgumentExpressions */:
                     // Tokens other than ')' are here for better error recovery
                     return token() === 21 /* CloseParenToken */ || token() === 26 /* SemicolonToken */;
@@ -31008,20 +31813,20 @@
         function isReusableClassMember(node) {
             if (node) {
                 switch (node.kind) {
-                    case 167 /* Constructor */:
-                    case 172 /* IndexSignature */:
-                    case 168 /* GetAccessor */:
-                    case 169 /* SetAccessor */:
-                    case 164 /* PropertyDeclaration */:
-                    case 230 /* SemicolonClassElement */:
+                    case 169 /* Constructor */:
+                    case 174 /* IndexSignature */:
+                    case 170 /* GetAccessor */:
+                    case 171 /* SetAccessor */:
+                    case 165 /* PropertyDeclaration */:
+                    case 232 /* SemicolonClassElement */:
                         return true;
-                    case 166 /* MethodDeclaration */:
+                    case 167 /* MethodDeclaration */:
                         // Method declarations are not necessarily reusable.  An object-literal
                         // may have a method calls "constructor(...)" and we must reparse that
                         // into an actual .ConstructorDeclaration.
                         var methodDeclaration = node;
-                        var nameIsConstructor = methodDeclaration.name.kind === 78 /* Identifier */ &&
-                            methodDeclaration.name.originalKeywordKind === 132 /* ConstructorKeyword */;
+                        var nameIsConstructor = methodDeclaration.name.kind === 79 /* Identifier */ &&
+                            methodDeclaration.name.originalKeywordKind === 133 /* ConstructorKeyword */;
                         return !nameIsConstructor;
                 }
             }
@@ -31030,8 +31835,8 @@
         function isReusableSwitchClause(node) {
             if (node) {
                 switch (node.kind) {
-                    case 285 /* CaseClause */:
-                    case 286 /* DefaultClause */:
+                    case 287 /* CaseClause */:
+                    case 288 /* DefaultClause */:
                         return true;
                 }
             }
@@ -31040,58 +31845,58 @@
         function isReusableStatement(node) {
             if (node) {
                 switch (node.kind) {
-                    case 252 /* FunctionDeclaration */:
-                    case 233 /* VariableStatement */:
-                    case 231 /* Block */:
-                    case 235 /* IfStatement */:
-                    case 234 /* ExpressionStatement */:
-                    case 247 /* ThrowStatement */:
-                    case 243 /* ReturnStatement */:
-                    case 245 /* SwitchStatement */:
-                    case 242 /* BreakStatement */:
-                    case 241 /* ContinueStatement */:
-                    case 239 /* ForInStatement */:
-                    case 240 /* ForOfStatement */:
-                    case 238 /* ForStatement */:
-                    case 237 /* WhileStatement */:
-                    case 244 /* WithStatement */:
-                    case 232 /* EmptyStatement */:
-                    case 248 /* TryStatement */:
-                    case 246 /* LabeledStatement */:
-                    case 236 /* DoStatement */:
-                    case 249 /* DebuggerStatement */:
-                    case 262 /* ImportDeclaration */:
-                    case 261 /* ImportEqualsDeclaration */:
-                    case 268 /* ExportDeclaration */:
-                    case 267 /* ExportAssignment */:
-                    case 257 /* ModuleDeclaration */:
-                    case 253 /* ClassDeclaration */:
-                    case 254 /* InterfaceDeclaration */:
-                    case 256 /* EnumDeclaration */:
-                    case 255 /* TypeAliasDeclaration */:
+                    case 254 /* FunctionDeclaration */:
+                    case 235 /* VariableStatement */:
+                    case 233 /* Block */:
+                    case 237 /* IfStatement */:
+                    case 236 /* ExpressionStatement */:
+                    case 249 /* ThrowStatement */:
+                    case 245 /* ReturnStatement */:
+                    case 247 /* SwitchStatement */:
+                    case 244 /* BreakStatement */:
+                    case 243 /* ContinueStatement */:
+                    case 241 /* ForInStatement */:
+                    case 242 /* ForOfStatement */:
+                    case 240 /* ForStatement */:
+                    case 239 /* WhileStatement */:
+                    case 246 /* WithStatement */:
+                    case 234 /* EmptyStatement */:
+                    case 250 /* TryStatement */:
+                    case 248 /* LabeledStatement */:
+                    case 238 /* DoStatement */:
+                    case 251 /* DebuggerStatement */:
+                    case 264 /* ImportDeclaration */:
+                    case 263 /* ImportEqualsDeclaration */:
+                    case 270 /* ExportDeclaration */:
+                    case 269 /* ExportAssignment */:
+                    case 259 /* ModuleDeclaration */:
+                    case 255 /* ClassDeclaration */:
+                    case 256 /* InterfaceDeclaration */:
+                    case 258 /* EnumDeclaration */:
+                    case 257 /* TypeAliasDeclaration */:
                         return true;
                 }
             }
             return false;
         }
         function isReusableEnumMember(node) {
-            return node.kind === 292 /* EnumMember */;
+            return node.kind === 294 /* EnumMember */;
         }
         function isReusableTypeMember(node) {
             if (node) {
                 switch (node.kind) {
-                    case 171 /* ConstructSignature */:
-                    case 165 /* MethodSignature */:
-                    case 172 /* IndexSignature */:
-                    case 163 /* PropertySignature */:
-                    case 170 /* CallSignature */:
+                    case 173 /* ConstructSignature */:
+                    case 166 /* MethodSignature */:
+                    case 174 /* IndexSignature */:
+                    case 164 /* PropertySignature */:
+                    case 172 /* CallSignature */:
                         return true;
                 }
             }
             return false;
         }
         function isReusableVariableDeclaration(node) {
-            if (node.kind !== 250 /* VariableDeclaration */) {
+            if (node.kind !== 252 /* VariableDeclaration */) {
                 return false;
             }
             // Very subtle incremental parsing bug.  Consider the following code:
@@ -31112,7 +31917,7 @@
             return variableDeclarator.initializer === undefined;
         }
         function isReusableParameter(node) {
-            if (node.kind !== 161 /* Parameter */) {
+            if (node.kind !== 162 /* Parameter */) {
                 return false;
             }
             // See the comment in isReusableVariableDeclaration for why we do this.
@@ -31130,7 +31935,10 @@
         }
         function parsingContextErrors(context) {
             switch (context) {
-                case 0 /* SourceElements */: return parseErrorAtCurrentToken(ts.Diagnostics.Declaration_or_statement_expected);
+                case 0 /* SourceElements */:
+                    return token() === 88 /* DefaultKeyword */
+                        ? parseErrorAtCurrentToken(ts.Diagnostics._0_expected, ts.tokenToString(93 /* ExportKeyword */))
+                        : parseErrorAtCurrentToken(ts.Diagnostics.Declaration_or_statement_expected);
                 case 1 /* BlockStatements */: return parseErrorAtCurrentToken(ts.Diagnostics.Declaration_or_statement_expected);
                 case 2 /* SwitchClauses */: return parseErrorAtCurrentToken(ts.Diagnostics.case_or_default_expected);
                 case 3 /* SwitchClauseStatements */: return parseErrorAtCurrentToken(ts.Diagnostics.Statement_expected);
@@ -31279,12 +32087,12 @@
                     // Report that we need an identifier.  However, report it right after the dot,
                     // and not on the next token.  This is because the next token might actually
                     // be an identifier and the error would be quite confusing.
-                    return createMissingNode(78 /* Identifier */, /*reportAtCurrentPosition*/ true, ts.Diagnostics.Identifier_expected);
+                    return createMissingNode(79 /* Identifier */, /*reportAtCurrentPosition*/ true, ts.Diagnostics.Identifier_expected);
                 }
             }
-            if (token() === 79 /* PrivateIdentifier */) {
+            if (token() === 80 /* PrivateIdentifier */) {
                 var node = parsePrivateIdentifier();
-                return allowPrivateIdentifiers ? node : createMissingNode(78 /* Identifier */, /*reportAtCurrentPosition*/ true, ts.Diagnostics.Identifier_expected);
+                return allowPrivateIdentifiers ? node : createMissingNode(79 /* Identifier */, /*reportAtCurrentPosition*/ true, ts.Diagnostics.Identifier_expected);
             }
             return allowIdentifierNames ? parseIdentifierName() : parseIdentifier();
         }
@@ -31393,14 +32201,14 @@
         // If true, we should abort parsing an error function.
         function typeHasArrowFunctionBlockingParseError(node) {
             switch (node.kind) {
-                case 174 /* TypeReference */:
+                case 176 /* TypeReference */:
                     return ts.nodeIsMissing(node.typeName);
-                case 175 /* FunctionType */:
-                case 176 /* ConstructorType */: {
+                case 177 /* FunctionType */:
+                case 178 /* ConstructorType */: {
                     var _a = node, parameters = _a.parameters, type = _a.type;
                     return isMissingList(parameters) || typeHasArrowFunctionBlockingParseError(type);
                 }
-                case 187 /* ParenthesizedType */:
+                case 189 /* ParenthesizedType */:
                     return typeHasArrowFunctionBlockingParseError(node.type);
                 default:
                     return false;
@@ -31442,7 +32250,7 @@
                 token() === 19 /* CloseBraceToken */ ||
                 token() === 21 /* CloseParenToken */ ||
                 token() === 31 /* GreaterThanToken */ ||
-                token() === 62 /* EqualsToken */ ||
+                token() === 63 /* EqualsToken */ ||
                 token() === 51 /* BarToken */) {
                 return finishNode(factory.createJSDocUnknownType(), pos);
             }
@@ -31464,7 +32272,7 @@
         function parseJSDocParameter() {
             var pos = getNodePos();
             var name;
-            if (token() === 107 /* ThisKeyword */ || token() === 102 /* NewKeyword */) {
+            if (token() === 108 /* ThisKeyword */ || token() === 103 /* NewKeyword */) {
                 name = parseIdentifierName();
                 parseExpected(58 /* ColonToken */);
             }
@@ -31480,7 +32288,7 @@
         function parseJSDocType() {
             scanner.setInJSDocType(true);
             var pos = getNodePos();
-            if (parseOptional(139 /* ModuleKeyword */)) {
+            if (parseOptional(140 /* ModuleKeyword */)) {
                 // TODO(rbuckton): We never set the type for a JSDocNamepathType. What should we put here?
                 var moduleTag = factory.createJSDocNamepathType(/*type*/ undefined);
                 terminate: while (true) {
@@ -31503,7 +32311,7 @@
             if (hasDotDotDot) {
                 type = finishNode(factory.createJSDocVariadicType(type), pos);
             }
-            if (token() === 62 /* EqualsToken */) {
+            if (token() === 63 /* EqualsToken */) {
                 nextToken();
                 return finishNode(factory.createJSDocOptionalType(type), pos);
             }
@@ -31511,7 +32319,7 @@
         }
         function parseTypeQuery() {
             var pos = getNodePos();
-            parseExpected(111 /* TypeOfKeyword */);
+            parseExpected(112 /* TypeOfKeyword */);
             return finishNode(factory.createTypeQueryNode(parseEntityName(/*allowReservedWords*/ true)), pos);
         }
         function parseTypeParameter() {
@@ -31519,7 +32327,7 @@
             var name = parseIdentifier();
             var constraint;
             var expression;
-            if (parseOptional(93 /* ExtendsKeyword */)) {
+            if (parseOptional(94 /* ExtendsKeyword */)) {
                 // It's not uncommon for people to write improper constraints to a generic.  If the
                 // user writes a constraint that is an expression and not an actual type, then parse
                 // it out as an expression (so we can recover well), but report that a type is needed
@@ -31538,7 +32346,7 @@
                     expression = parseUnaryExpressionOrHigher();
                 }
             }
-            var defaultType = parseOptional(62 /* EqualsToken */) ? parseType() : undefined;
+            var defaultType = parseOptional(63 /* EqualsToken */) ? parseType() : undefined;
             var node = factory.createTypeParameterDeclaration(name, constraint, defaultType);
             node.expression = expression;
             return finishNode(node, pos);
@@ -31585,7 +32393,7 @@
             //      BindingElement[?Yield,?Await]
             // Decorators are parsed in the outer [Await] context, the rest of the parameter is parsed in the function's [Await] context.
             var decorators = inOuterAwaitContext ? doInAwaitContext(parseDecorators) : parseDecorators();
-            if (token() === 107 /* ThisKeyword */) {
+            if (token() === 108 /* ThisKeyword */) {
                 var node_1 = factory.createParameterDeclaration(decorators, 
                 /*modifiers*/ undefined, 
                 /*dotDotDotToken*/ undefined, createIdentifier(/*isIdentifier*/ true), 
@@ -31682,14 +32490,14 @@
         function parseSignatureMember(kind) {
             var pos = getNodePos();
             var hasJSDoc = hasPrecedingJSDocComment();
-            if (kind === 171 /* ConstructSignature */) {
-                parseExpected(102 /* NewKeyword */);
+            if (kind === 173 /* ConstructSignature */) {
+                parseExpected(103 /* NewKeyword */);
             }
             var typeParameters = parseTypeParameters();
             var parameters = parseParameters(4 /* Type */);
             var type = parseReturnType(58 /* ColonToken */, /*isType*/ true);
             parseTypeMemberSemicolon();
-            var node = kind === 170 /* CallSignature */
+            var node = kind === 172 /* CallSignature */
                 ? factory.createCallSignature(typeParameters, parameters, type)
                 : factory.createConstructSignature(typeParameters, parameters, type);
             return withJSDoc(finishNode(node, pos), hasJSDoc);
@@ -31772,7 +32580,7 @@
                 // Although type literal properties cannot not have initializers, we attempt
                 // to parse an initializer so we can report in the checker that an interface
                 // property or type literal property cannot have an initializer.
-                if (token() === 62 /* EqualsToken */)
+                if (token() === 63 /* EqualsToken */)
                     node.initializer = parseInitializer();
             }
             parseTypeMemberSemicolon();
@@ -31782,8 +32590,8 @@
             // Return true if we have the start of a signature member
             if (token() === 20 /* OpenParenToken */ ||
                 token() === 29 /* LessThanToken */ ||
-                token() === 134 /* GetKeyword */ ||
-                token() === 146 /* SetKeyword */) {
+                token() === 135 /* GetKeyword */ ||
+                token() === 147 /* SetKeyword */) {
                 return true;
             }
             var idToken = false;
@@ -31815,19 +32623,19 @@
         }
         function parseTypeMember() {
             if (token() === 20 /* OpenParenToken */ || token() === 29 /* LessThanToken */) {
-                return parseSignatureMember(170 /* CallSignature */);
+                return parseSignatureMember(172 /* CallSignature */);
             }
-            if (token() === 102 /* NewKeyword */ && lookAhead(nextTokenIsOpenParenOrLessThan)) {
-                return parseSignatureMember(171 /* ConstructSignature */);
+            if (token() === 103 /* NewKeyword */ && lookAhead(nextTokenIsOpenParenOrLessThan)) {
+                return parseSignatureMember(173 /* ConstructSignature */);
             }
             var pos = getNodePos();
             var hasJSDoc = hasPrecedingJSDocComment();
             var modifiers = parseModifiers();
-            if (parseContextualModifier(134 /* GetKeyword */)) {
-                return parseAccessorDeclaration(pos, hasJSDoc, /*decorators*/ undefined, modifiers, 168 /* GetAccessor */);
+            if (parseContextualModifier(135 /* GetKeyword */)) {
+                return parseAccessorDeclaration(pos, hasJSDoc, /*decorators*/ undefined, modifiers, 170 /* GetAccessor */);
             }
-            if (parseContextualModifier(146 /* SetKeyword */)) {
-                return parseAccessorDeclaration(pos, hasJSDoc, /*decorators*/ undefined, modifiers, 169 /* SetAccessor */);
+            if (parseContextualModifier(147 /* SetKeyword */)) {
+                return parseAccessorDeclaration(pos, hasJSDoc, /*decorators*/ undefined, modifiers, 171 /* SetAccessor */);
             }
             if (isIndexSignature()) {
                 return parseIndexSignatureDeclaration(pos, hasJSDoc, /*decorators*/ undefined, modifiers);
@@ -31868,17 +32676,17 @@
         function isStartOfMappedType() {
             nextToken();
             if (token() === 39 /* PlusToken */ || token() === 40 /* MinusToken */) {
-                return nextToken() === 142 /* ReadonlyKeyword */;
+                return nextToken() === 143 /* ReadonlyKeyword */;
             }
-            if (token() === 142 /* ReadonlyKeyword */) {
+            if (token() === 143 /* ReadonlyKeyword */) {
                 nextToken();
             }
-            return token() === 22 /* OpenBracketToken */ && nextTokenIsIdentifier() && nextToken() === 100 /* InKeyword */;
+            return token() === 22 /* OpenBracketToken */ && nextTokenIsIdentifier() && nextToken() === 101 /* InKeyword */;
         }
         function parseMappedTypeParameter() {
             var pos = getNodePos();
             var name = parseIdentifierName();
-            parseExpected(100 /* InKeyword */);
+            parseExpected(101 /* InKeyword */);
             var type = parseType();
             return finishNode(factory.createTypeParameterDeclaration(name, type, /*defaultType*/ undefined), pos);
         }
@@ -31886,15 +32694,15 @@
             var pos = getNodePos();
             parseExpected(18 /* OpenBraceToken */);
             var readonlyToken;
-            if (token() === 142 /* ReadonlyKeyword */ || token() === 39 /* PlusToken */ || token() === 40 /* MinusToken */) {
+            if (token() === 143 /* ReadonlyKeyword */ || token() === 39 /* PlusToken */ || token() === 40 /* MinusToken */) {
                 readonlyToken = parseTokenNode();
-                if (readonlyToken.kind !== 142 /* ReadonlyKeyword */) {
-                    parseExpected(142 /* ReadonlyKeyword */);
+                if (readonlyToken.kind !== 143 /* ReadonlyKeyword */) {
+                    parseExpected(143 /* ReadonlyKeyword */);
                 }
             }
             parseExpected(22 /* OpenBracketToken */);
             var typeParameter = parseMappedTypeParameter();
-            var nameType = parseOptional(126 /* AsKeyword */) ? parseType() : undefined;
+            var nameType = parseOptional(127 /* AsKeyword */) ? parseType() : undefined;
             parseExpected(23 /* CloseBracketToken */);
             var questionToken;
             if (token() === 57 /* QuestionToken */ || token() === 39 /* PlusToken */ || token() === 40 /* MinusToken */) {
@@ -31958,10 +32766,10 @@
         }
         function parseModifiersForConstructorType() {
             var modifiers;
-            if (token() === 125 /* AbstractKeyword */) {
+            if (token() === 126 /* AbstractKeyword */) {
                 var pos = getNodePos();
                 nextToken();
-                var modifier = finishNode(factory.createToken(125 /* AbstractKeyword */), pos);
+                var modifier = finishNode(factory.createToken(126 /* AbstractKeyword */), pos);
                 modifiers = createNodeArray([modifier], pos);
             }
             return modifiers;
@@ -31970,7 +32778,7 @@
             var pos = getNodePos();
             var hasJSDoc = hasPrecedingJSDocComment();
             var modifiers = parseModifiersForConstructorType();
-            var isConstructorType = parseOptional(102 /* NewKeyword */);
+            var isConstructorType = parseOptional(103 /* NewKeyword */);
             var typeParameters = parseTypeParameters();
             var parameters = parseParameters(4 /* Type */);
             var type = parseReturnType(38 /* EqualsGreaterThanToken */, /*isType*/ false);
@@ -31990,7 +32798,7 @@
             if (negative) {
                 nextToken();
             }
-            var expression = token() === 109 /* TrueKeyword */ || token() === 94 /* FalseKeyword */ || token() === 103 /* NullKeyword */ ?
+            var expression = token() === 110 /* TrueKeyword */ || token() === 95 /* FalseKeyword */ || token() === 104 /* NullKeyword */ ?
                 parseTokenNode() :
                 parseLiteralLikeNode(token());
             if (negative) {
@@ -32000,13 +32808,13 @@
         }
         function isStartOfTypeOfImportType() {
             nextToken();
-            return token() === 99 /* ImportKeyword */;
+            return token() === 100 /* ImportKeyword */;
         }
         function parseImportType() {
             sourceFlags |= 1048576 /* PossiblyContainsDynamicImport */;
             var pos = getNodePos();
-            var isTypeOf = parseOptional(111 /* TypeOfKeyword */);
-            parseExpected(99 /* ImportKeyword */);
+            var isTypeOf = parseOptional(112 /* TypeOfKeyword */);
+            parseExpected(100 /* ImportKeyword */);
             parseExpected(20 /* OpenParenToken */);
             var type = parseType();
             parseExpected(21 /* CloseParenToken */);
@@ -32020,19 +32828,19 @@
         }
         function parseNonArrayType() {
             switch (token()) {
-                case 128 /* AnyKeyword */:
-                case 152 /* UnknownKeyword */:
-                case 147 /* StringKeyword */:
-                case 144 /* NumberKeyword */:
-                case 155 /* BigIntKeyword */:
-                case 148 /* SymbolKeyword */:
-                case 131 /* BooleanKeyword */:
-                case 150 /* UndefinedKeyword */:
-                case 141 /* NeverKeyword */:
-                case 145 /* ObjectKeyword */:
+                case 129 /* AnyKeyword */:
+                case 153 /* UnknownKeyword */:
+                case 148 /* StringKeyword */:
+                case 145 /* NumberKeyword */:
+                case 156 /* BigIntKeyword */:
+                case 149 /* SymbolKeyword */:
+                case 132 /* BooleanKeyword */:
+                case 151 /* UndefinedKeyword */:
+                case 142 /* NeverKeyword */:
+                case 146 /* ObjectKeyword */:
                     // If these are followed by a dot, then parse these out as a dotted type reference instead.
                     return tryParse(parseKeywordAndNoDot) || parseTypeReference();
-                case 65 /* AsteriskEqualsToken */:
+                case 66 /* AsteriskEqualsToken */:
                     // If there is '*=', treat it as * followed by postfix =
                     scanner.reScanAsteriskEqualsToken();
                 // falls through
@@ -32044,7 +32852,7 @@
                 // falls through
                 case 57 /* QuestionToken */:
                     return parseJSDocUnknownOrNullableType();
-                case 97 /* FunctionKeyword */:
+                case 98 /* FunctionKeyword */:
                     return parseJSDocFunctionType();
                 case 53 /* ExclamationToken */:
                     return parseJSDocNonNullableType();
@@ -32052,24 +32860,24 @@
                 case 10 /* StringLiteral */:
                 case 8 /* NumericLiteral */:
                 case 9 /* BigIntLiteral */:
-                case 109 /* TrueKeyword */:
-                case 94 /* FalseKeyword */:
-                case 103 /* NullKeyword */:
+                case 110 /* TrueKeyword */:
+                case 95 /* FalseKeyword */:
+                case 104 /* NullKeyword */:
                     return parseLiteralTypeNode();
                 case 40 /* MinusToken */:
                     return lookAhead(nextTokenIsNumericOrBigIntLiteral) ? parseLiteralTypeNode(/*negative*/ true) : parseTypeReference();
-                case 113 /* VoidKeyword */:
+                case 114 /* VoidKeyword */:
                     return parseTokenNode();
-                case 107 /* ThisKeyword */: {
+                case 108 /* ThisKeyword */: {
                     var thisKeyword = parseThisTypeNode();
-                    if (token() === 137 /* IsKeyword */ && !scanner.hasPrecedingLineBreak()) {
+                    if (token() === 138 /* IsKeyword */ && !scanner.hasPrecedingLineBreak()) {
                         return parseThisTypePredicate(thisKeyword);
                     }
                     else {
                         return thisKeyword;
                     }
                 }
-                case 111 /* TypeOfKeyword */:
+                case 112 /* TypeOfKeyword */:
                     return lookAhead(isStartOfTypeOfImportType) ? parseImportType() : parseTypeQuery();
                 case 18 /* OpenBraceToken */:
                     return lookAhead(isStartOfMappedType) ? parseMappedType() : parseTypeLiteral();
@@ -32077,9 +32885,9 @@
                     return parseTupleType();
                 case 20 /* OpenParenToken */:
                     return parseParenthesizedType();
-                case 99 /* ImportKeyword */:
+                case 100 /* ImportKeyword */:
                     return parseImportType();
-                case 127 /* AssertsKeyword */:
+                case 128 /* AssertsKeyword */:
                     return lookAhead(nextTokenIsIdentifierOrKeywordOnSameLine) ? parseAssertsTypePredicate() : parseTypeReference();
                 case 15 /* TemplateHead */:
                     return parseTemplateType();
@@ -32089,44 +32897,44 @@
         }
         function isStartOfType(inStartOfParameter) {
             switch (token()) {
-                case 128 /* AnyKeyword */:
-                case 152 /* UnknownKeyword */:
-                case 147 /* StringKeyword */:
-                case 144 /* NumberKeyword */:
-                case 155 /* BigIntKeyword */:
-                case 131 /* BooleanKeyword */:
-                case 142 /* ReadonlyKeyword */:
-                case 148 /* SymbolKeyword */:
-                case 151 /* UniqueKeyword */:
-                case 113 /* VoidKeyword */:
-                case 150 /* UndefinedKeyword */:
-                case 103 /* NullKeyword */:
-                case 107 /* ThisKeyword */:
-                case 111 /* TypeOfKeyword */:
-                case 141 /* NeverKeyword */:
+                case 129 /* AnyKeyword */:
+                case 153 /* UnknownKeyword */:
+                case 148 /* StringKeyword */:
+                case 145 /* NumberKeyword */:
+                case 156 /* BigIntKeyword */:
+                case 132 /* BooleanKeyword */:
+                case 143 /* ReadonlyKeyword */:
+                case 149 /* SymbolKeyword */:
+                case 152 /* UniqueKeyword */:
+                case 114 /* VoidKeyword */:
+                case 151 /* UndefinedKeyword */:
+                case 104 /* NullKeyword */:
+                case 108 /* ThisKeyword */:
+                case 112 /* TypeOfKeyword */:
+                case 142 /* NeverKeyword */:
                 case 18 /* OpenBraceToken */:
                 case 22 /* OpenBracketToken */:
                 case 29 /* LessThanToken */:
                 case 51 /* BarToken */:
                 case 50 /* AmpersandToken */:
-                case 102 /* NewKeyword */:
+                case 103 /* NewKeyword */:
                 case 10 /* StringLiteral */:
                 case 8 /* NumericLiteral */:
                 case 9 /* BigIntLiteral */:
-                case 109 /* TrueKeyword */:
-                case 94 /* FalseKeyword */:
-                case 145 /* ObjectKeyword */:
+                case 110 /* TrueKeyword */:
+                case 95 /* FalseKeyword */:
+                case 146 /* ObjectKeyword */:
                 case 41 /* AsteriskToken */:
                 case 57 /* QuestionToken */:
                 case 53 /* ExclamationToken */:
                 case 25 /* DotDotDotToken */:
-                case 135 /* InferKeyword */:
-                case 99 /* ImportKeyword */:
-                case 127 /* AssertsKeyword */:
+                case 136 /* InferKeyword */:
+                case 100 /* ImportKeyword */:
+                case 128 /* AssertsKeyword */:
                 case 14 /* NoSubstitutionTemplateLiteral */:
                 case 15 /* TemplateHead */:
                     return true;
-                case 97 /* FunctionKeyword */:
+                case 98 /* FunctionKeyword */:
                     return !inStartOfParameter;
                 case 40 /* MinusToken */:
                     return !inStartOfParameter && lookAhead(nextTokenIsNumericOrBigIntLiteral);
@@ -32190,17 +32998,17 @@
         }
         function parseInferType() {
             var pos = getNodePos();
-            parseExpected(135 /* InferKeyword */);
+            parseExpected(136 /* InferKeyword */);
             return finishNode(factory.createInferTypeNode(parseTypeParameterOfInferType()), pos);
         }
         function parseTypeOperatorOrHigher() {
             var operator = token();
             switch (operator) {
-                case 138 /* KeyOfKeyword */:
-                case 151 /* UniqueKeyword */:
-                case 142 /* ReadonlyKeyword */:
+                case 139 /* KeyOfKeyword */:
+                case 152 /* UniqueKeyword */:
+                case 143 /* ReadonlyKeyword */:
                     return parseTypeOperator(operator);
-                case 135 /* InferKeyword */:
+                case 136 /* InferKeyword */:
                     return parseInferType();
             }
             return parsePostfixTypeOrHigher();
@@ -32250,7 +33058,7 @@
         }
         function nextTokenIsNewKeyword() {
             nextToken();
-            return token() === 102 /* NewKeyword */;
+            return token() === 103 /* NewKeyword */;
         }
         function isStartOfFunctionTypeOrConstructorType() {
             if (token() === 29 /* LessThanToken */) {
@@ -32259,15 +33067,15 @@
             if (token() === 20 /* OpenParenToken */ && lookAhead(isUnambiguouslyStartOfFunctionType)) {
                 return true;
             }
-            return token() === 102 /* NewKeyword */ ||
-                token() === 125 /* AbstractKeyword */ && lookAhead(nextTokenIsNewKeyword);
+            return token() === 103 /* NewKeyword */ ||
+                token() === 126 /* AbstractKeyword */ && lookAhead(nextTokenIsNewKeyword);
         }
         function skipParameterStart() {
             if (ts.isModifierKind(token())) {
                 // Skip modifiers
                 parseModifiers();
             }
-            if (isIdentifier() || token() === 107 /* ThisKeyword */) {
+            if (isIdentifier() || token() === 108 /* ThisKeyword */) {
                 nextToken();
                 return true;
             }
@@ -32290,7 +33098,7 @@
                 // We successfully skipped modifiers (if any) and an identifier or binding pattern,
                 // now see if we have something that indicates a parameter declaration
                 if (token() === 58 /* ColonToken */ || token() === 27 /* CommaToken */ ||
-                    token() === 57 /* QuestionToken */ || token() === 62 /* EqualsToken */) {
+                    token() === 57 /* QuestionToken */ || token() === 63 /* EqualsToken */) {
                     // ( xxx :
                     // ( xxx ,
                     // ( xxx ?
@@ -32320,16 +33128,16 @@
         }
         function parseTypePredicatePrefix() {
             var id = parseIdentifier();
-            if (token() === 137 /* IsKeyword */ && !scanner.hasPrecedingLineBreak()) {
+            if (token() === 138 /* IsKeyword */ && !scanner.hasPrecedingLineBreak()) {
                 nextToken();
                 return id;
             }
         }
         function parseAssertsTypePredicate() {
             var pos = getNodePos();
-            var assertsModifier = parseExpectedToken(127 /* AssertsKeyword */);
-            var parameterName = token() === 107 /* ThisKeyword */ ? parseThisTypeNode() : parseIdentifier();
-            var type = parseOptional(137 /* IsKeyword */) ? parseType() : undefined;
+            var assertsModifier = parseExpectedToken(128 /* AssertsKeyword */);
+            var parameterName = token() === 108 /* ThisKeyword */ ? parseThisTypeNode() : parseIdentifier();
+            var type = parseOptional(138 /* IsKeyword */) ? parseType() : undefined;
             return finishNode(factory.createTypePredicateNode(assertsModifier, parameterName, type), pos);
         }
         function parseType() {
@@ -32343,7 +33151,7 @@
             }
             var pos = getNodePos();
             var type = parseUnionTypeOrHigher();
-            if (!noConditionalTypes && !scanner.hasPrecedingLineBreak() && parseOptional(93 /* ExtendsKeyword */)) {
+            if (!noConditionalTypes && !scanner.hasPrecedingLineBreak() && parseOptional(94 /* ExtendsKeyword */)) {
                 // The type following 'extends' is not permitted to be another conditional type
                 var extendsType = parseTypeWorker(/*noConditionalTypes*/ true);
                 parseExpected(57 /* QuestionToken */);
@@ -32360,11 +33168,11 @@
         // EXPRESSIONS
         function isStartOfLeftHandSideExpression() {
             switch (token()) {
-                case 107 /* ThisKeyword */:
-                case 105 /* SuperKeyword */:
-                case 103 /* NullKeyword */:
-                case 109 /* TrueKeyword */:
-                case 94 /* FalseKeyword */:
+                case 108 /* ThisKeyword */:
+                case 106 /* SuperKeyword */:
+                case 104 /* NullKeyword */:
+                case 110 /* TrueKeyword */:
+                case 95 /* FalseKeyword */:
                 case 8 /* NumericLiteral */:
                 case 9 /* BigIntLiteral */:
                 case 10 /* StringLiteral */:
@@ -32373,14 +33181,14 @@
                 case 20 /* OpenParenToken */:
                 case 22 /* OpenBracketToken */:
                 case 18 /* OpenBraceToken */:
-                case 97 /* FunctionKeyword */:
-                case 83 /* ClassKeyword */:
-                case 102 /* NewKeyword */:
+                case 98 /* FunctionKeyword */:
+                case 84 /* ClassKeyword */:
+                case 103 /* NewKeyword */:
                 case 43 /* SlashToken */:
-                case 67 /* SlashEqualsToken */:
-                case 78 /* Identifier */:
+                case 68 /* SlashEqualsToken */:
+                case 79 /* Identifier */:
                     return true;
-                case 99 /* ImportKeyword */:
+                case 100 /* ImportKeyword */:
                     return lookAhead(nextTokenIsOpenParenOrLessThanOrDot);
                 default:
                     return isIdentifier();
@@ -32395,15 +33203,15 @@
                 case 40 /* MinusToken */:
                 case 54 /* TildeToken */:
                 case 53 /* ExclamationToken */:
-                case 88 /* DeleteKeyword */:
-                case 111 /* TypeOfKeyword */:
-                case 113 /* VoidKeyword */:
+                case 89 /* DeleteKeyword */:
+                case 112 /* TypeOfKeyword */:
+                case 114 /* VoidKeyword */:
                 case 45 /* PlusPlusToken */:
                 case 46 /* MinusMinusToken */:
                 case 29 /* LessThanToken */:
-                case 130 /* AwaitKeyword */:
-                case 124 /* YieldKeyword */:
-                case 79 /* PrivateIdentifier */:
+                case 131 /* AwaitKeyword */:
+                case 125 /* YieldKeyword */:
+                case 80 /* PrivateIdentifier */:
                     // Yield/await always starts an expression.  Either it is an identifier (in which case
                     // it is definitely an expression).  Or it's a keyword (either because we're in
                     // a generator or async function, or in strict mode (or both)) and it started a yield or await expression.
@@ -32422,8 +33230,8 @@
         function isStartOfExpressionStatement() {
             // As per the grammar, none of '{' or 'function' or 'class' can start an expression statement.
             return token() !== 18 /* OpenBraceToken */ &&
-                token() !== 97 /* FunctionKeyword */ &&
-                token() !== 83 /* ClassKeyword */ &&
+                token() !== 98 /* FunctionKeyword */ &&
+                token() !== 84 /* ClassKeyword */ &&
                 token() !== 59 /* AtToken */ &&
                 isStartOfExpression();
         }
@@ -32448,7 +33256,7 @@
             return expr;
         }
         function parseInitializer() {
-            return parseOptional(62 /* EqualsToken */) ? parseAssignmentExpressionOrHigher() : undefined;
+            return parseOptional(63 /* EqualsToken */) ? parseAssignmentExpressionOrHigher() : undefined;
         }
         function parseAssignmentExpressionOrHigher() {
             //  AssignmentExpression[in,yield]:
@@ -32494,7 +33302,7 @@
             // To avoid a look-ahead, we did not handle the case of an arrow function with a single un-parenthesized
             // parameter ('x => ...') above. We handle it here by checking if the parsed expression was a single
             // identifier and the current token is an arrow.
-            if (expr.kind === 78 /* Identifier */ && token() === 38 /* EqualsGreaterThanToken */) {
+            if (expr.kind === 79 /* Identifier */ && token() === 38 /* EqualsGreaterThanToken */) {
                 return parseSimpleArrowFunctionExpression(pos, expr, /*asyncModifier*/ undefined);
             }
             // Now see if we might be in cases '2' or '3'.
@@ -32510,7 +33318,7 @@
             return parseConditionalExpressionRest(expr, pos);
         }
         function isYieldExpression() {
-            if (token() === 124 /* YieldKeyword */) {
+            if (token() === 125 /* YieldKeyword */) {
                 // If we have a 'yield' keyword, and this is a context where yield expressions are
                 // allowed, then definitely parse out a yield expression.
                 if (inYieldContext()) {
@@ -32590,7 +33398,7 @@
         //  Unknown     -> There *might* be a parenthesized arrow function here.
         //                 Speculatively look ahead to be sure, and rollback if not.
         function isParenthesizedArrowFunctionExpression() {
-            if (token() === 20 /* OpenParenToken */ || token() === 29 /* LessThanToken */ || token() === 129 /* AsyncKeyword */) {
+            if (token() === 20 /* OpenParenToken */ || token() === 29 /* LessThanToken */ || token() === 130 /* AsyncKeyword */) {
                 return lookAhead(isParenthesizedArrowFunctionExpressionWorker);
             }
             if (token() === 38 /* EqualsGreaterThanToken */) {
@@ -32603,7 +33411,7 @@
             return 0 /* False */;
         }
         function isParenthesizedArrowFunctionExpressionWorker() {
-            if (token() === 129 /* AsyncKeyword */) {
+            if (token() === 130 /* AsyncKeyword */) {
                 nextToken();
                 if (scanner.hasPrecedingLineBreak()) {
                     return 0 /* False */;
@@ -32647,13 +33455,13 @@
                 // Check for "(xxx yyy", where xxx is a modifier and yyy is an identifier. This
                 // isn't actually allowed, but we want to treat it as a lambda so we can provide
                 // a good error message.
-                if (ts.isModifierKind(second) && second !== 129 /* AsyncKeyword */ && lookAhead(nextTokenIsIdentifier)) {
+                if (ts.isModifierKind(second) && second !== 130 /* AsyncKeyword */ && lookAhead(nextTokenIsIdentifier)) {
                     return 1 /* True */;
                 }
                 // If we had "(" followed by something that's not an identifier,
                 // then this definitely doesn't look like a lambda.  "this" is not
                 // valid, but we want to parse it and then give a semantic error.
-                if (!isIdentifier() && second !== 107 /* ThisKeyword */) {
+                if (!isIdentifier() && second !== 108 /* ThisKeyword */) {
                     return 0 /* False */;
                 }
                 switch (nextToken()) {
@@ -32664,13 +33472,13 @@
                     case 57 /* QuestionToken */:
                         nextToken();
                         // If we have "(a?:" or "(a?," or "(a?=" or "(a?)" then it is definitely a lambda.
-                        if (token() === 58 /* ColonToken */ || token() === 27 /* CommaToken */ || token() === 62 /* EqualsToken */ || token() === 21 /* CloseParenToken */) {
+                        if (token() === 58 /* ColonToken */ || token() === 27 /* CommaToken */ || token() === 63 /* EqualsToken */ || token() === 21 /* CloseParenToken */) {
                             return 1 /* True */;
                         }
                         // Otherwise it is definitely not a lambda.
                         return 0 /* False */;
                     case 27 /* CommaToken */:
-                    case 62 /* EqualsToken */:
+                    case 63 /* EqualsToken */:
                     case 21 /* CloseParenToken */:
                         // If we have "(a," or "(a=" or "(a)" this *could* be an arrow function
                         return 2 /* Unknown */;
@@ -32689,10 +33497,10 @@
                 if (languageVariant === 1 /* JSX */) {
                     var isArrowFunctionInJsx = lookAhead(function () {
                         var third = nextToken();
-                        if (third === 93 /* ExtendsKeyword */) {
+                        if (third === 94 /* ExtendsKeyword */) {
                             var fourth = nextToken();
                             switch (fourth) {
-                                case 62 /* EqualsToken */:
+                                case 63 /* EqualsToken */:
                                 case 31 /* GreaterThanToken */:
                                     return false;
                                 default:
@@ -32726,7 +33534,7 @@
         }
         function tryParseAsyncSimpleArrowFunctionExpression() {
             // We do a check here so that we won't be doing unnecessarily call to "lookAhead"
-            if (token() === 129 /* AsyncKeyword */) {
+            if (token() === 130 /* AsyncKeyword */) {
                 if (lookAhead(isUnParenthesizedAsyncArrowFunctionWorker) === 1 /* True */) {
                     var pos = getNodePos();
                     var asyncModifier = parseModifiersForArrowFunction();
@@ -32740,7 +33548,7 @@
             // AsyncArrowFunctionExpression:
             //      1) async[no LineTerminator here]AsyncArrowBindingIdentifier[?Yield][no LineTerminator here]=>AsyncConciseBody[?In]
             //      2) CoverCallExpressionAndAsyncArrowHead[?Yield, ?Await][no LineTerminator here]=>AsyncConciseBody[?In]
-            if (token() === 129 /* AsyncKeyword */) {
+            if (token() === 130 /* AsyncKeyword */) {
                 nextToken();
                 // If the "async" is followed by "=>" token then it is not a beginning of an async arrow-function
                 // but instead a simple arrow-function which will be parsed inside "parseAssignmentExpressionOrHigher"
@@ -32749,7 +33557,7 @@
                 }
                 // Check for un-parenthesized AsyncArrowFunction
                 var expr = parseBinaryExpressionOrHigher(0 /* Lowest */);
-                if (!scanner.hasPrecedingLineBreak() && expr.kind === 78 /* Identifier */ && token() === 38 /* EqualsGreaterThanToken */) {
+                if (!scanner.hasPrecedingLineBreak() && expr.kind === 79 /* Identifier */ && token() === 38 /* EqualsGreaterThanToken */) {
                     return 1 /* True */;
                 }
             }
@@ -32814,8 +33622,8 @@
                 return parseFunctionBlock(isAsync ? 2 /* Await */ : 0 /* None */);
             }
             if (token() !== 26 /* SemicolonToken */ &&
-                token() !== 97 /* FunctionKeyword */ &&
-                token() !== 83 /* ClassKeyword */ &&
+                token() !== 98 /* FunctionKeyword */ &&
+                token() !== 84 /* ClassKeyword */ &&
                 isStartOfStatement() &&
                 !isStartOfExpressionStatement()) {
                 // Check if we got a plain statement (i.e. no expression-statements, no function/class expressions/declarations)
@@ -32853,7 +33661,7 @@
             var colonToken;
             return finishNode(factory.createConditionalExpression(leftOperand, questionToken, doOutsideOfContext(disallowInAndDecoratorContext, parseAssignmentExpressionOrHigher), colonToken = parseExpectedToken(58 /* ColonToken */), ts.nodeIsPresent(colonToken)
                 ? parseAssignmentExpressionOrHigher()
-                : createMissingNode(78 /* Identifier */, /*reportAtCurrentPosition*/ false, ts.Diagnostics._0_expected, ts.tokenToString(58 /* ColonToken */))), pos);
+                : createMissingNode(79 /* Identifier */, /*reportAtCurrentPosition*/ false, ts.Diagnostics._0_expected, ts.tokenToString(58 /* ColonToken */))), pos);
         }
         function parseBinaryExpressionOrHigher(precedence) {
             var pos = getNodePos();
@@ -32861,7 +33669,7 @@
             return parseBinaryExpressionRest(precedence, leftOperand, pos);
         }
         function isInOrOfKeyword(t) {
-            return t === 100 /* InKeyword */ || t === 157 /* OfKeyword */;
+            return t === 101 /* InKeyword */ || t === 158 /* OfKeyword */;
         }
         function parseBinaryExpressionRest(precedence, leftOperand, pos) {
             while (true) {
@@ -32896,10 +33704,10 @@
                 if (!consumeCurrentOperator) {
                     break;
                 }
-                if (token() === 100 /* InKeyword */ && inDisallowInContext()) {
+                if (token() === 101 /* InKeyword */ && inDisallowInContext()) {
                     break;
                 }
-                if (token() === 126 /* AsKeyword */) {
+                if (token() === 127 /* AsKeyword */) {
                     // Make sure we *do* perform ASI for constructs like this:
                     //    var x = foo
                     //    as (Bar)
@@ -32920,7 +33728,7 @@
             return leftOperand;
         }
         function isBinaryOperator() {
-            if (inDisallowInContext() && token() === 100 /* InKeyword */) {
+            if (inDisallowInContext() && token() === 101 /* InKeyword */) {
                 return false;
             }
             return ts.getBinaryOperatorPrecedence(token()) > 0;
@@ -32948,7 +33756,7 @@
             return finishNode(factory.createVoidExpression(nextTokenAnd(parseSimpleUnaryExpression)), pos);
         }
         function isAwaitExpression() {
-            if (token() === 130 /* AwaitKeyword */) {
+            if (token() === 131 /* AwaitKeyword */) {
                 if (inAwaitContext()) {
                     return true;
                 }
@@ -33001,7 +33809,7 @@
             if (token() === 42 /* AsteriskAsteriskToken */) {
                 var pos = ts.skipTrivia(sourceText, simpleUnaryExpression.pos);
                 var end = simpleUnaryExpression.end;
-                if (simpleUnaryExpression.kind === 207 /* TypeAssertionExpression */) {
+                if (simpleUnaryExpression.kind === 209 /* TypeAssertionExpression */) {
                     parseErrorAt(pos, end, ts.Diagnostics.A_type_assertion_expression_is_not_allowed_in_the_left_hand_side_of_an_exponentiation_expression_Consider_enclosing_the_expression_in_parentheses);
                 }
                 else {
@@ -33031,18 +33839,18 @@
                 case 54 /* TildeToken */:
                 case 53 /* ExclamationToken */:
                     return parsePrefixUnaryExpression();
-                case 88 /* DeleteKeyword */:
+                case 89 /* DeleteKeyword */:
                     return parseDeleteExpression();
-                case 111 /* TypeOfKeyword */:
+                case 112 /* TypeOfKeyword */:
                     return parseTypeOfExpression();
-                case 113 /* VoidKeyword */:
+                case 114 /* VoidKeyword */:
                     return parseVoidExpression();
                 case 29 /* LessThanToken */:
                     // This is modified UnaryExpression grammar in TypeScript
                     //  UnaryExpression (modified):
                     //      < type > UnaryExpression
                     return parseTypeAssertion();
-                case 130 /* AwaitKeyword */:
+                case 131 /* AwaitKeyword */:
                     if (isAwaitExpression()) {
                         return parseAwaitExpression();
                     }
@@ -33069,10 +33877,10 @@
                 case 40 /* MinusToken */:
                 case 54 /* TildeToken */:
                 case 53 /* ExclamationToken */:
-                case 88 /* DeleteKeyword */:
-                case 111 /* TypeOfKeyword */:
-                case 113 /* VoidKeyword */:
-                case 130 /* AwaitKeyword */:
+                case 89 /* DeleteKeyword */:
+                case 112 /* TypeOfKeyword */:
+                case 114 /* VoidKeyword */:
+                case 131 /* AwaitKeyword */:
                     return false;
                 case 29 /* LessThanToken */:
                     // If we are not in JSX context, we are parsing TypeAssertion which is an UnaryExpression
@@ -33148,7 +33956,7 @@
             // or starts the beginning of the first four CallExpression productions.
             var pos = getNodePos();
             var expression;
-            if (token() === 99 /* ImportKeyword */) {
+            if (token() === 100 /* ImportKeyword */) {
                 if (lookAhead(nextTokenIsOpenParenOrLessThan)) {
                     // We don't want to eagerly consume all import keyword as import call expression so we look ahead to find "("
                     // For example:
@@ -33162,7 +33970,7 @@
                     // This is an 'import.*' metaproperty (i.e. 'import.meta')
                     nextToken(); // advance past the 'import'
                     nextToken(); // advance past the dot
-                    expression = finishNode(factory.createMetaProperty(99 /* ImportKeyword */, parseIdentifierName()), pos);
+                    expression = finishNode(factory.createMetaProperty(100 /* ImportKeyword */, parseIdentifierName()), pos);
                     sourceFlags |= 2097152 /* PossiblyContainsImportMeta */;
                 }
                 else {
@@ -33170,7 +33978,7 @@
                 }
             }
             else {
-                expression = token() === 105 /* SuperKeyword */ ? parseSuperExpression() : parseMemberExpressionOrHigher();
+                expression = token() === 106 /* SuperKeyword */ ? parseSuperExpression() : parseMemberExpressionOrHigher();
             }
             // Now, we *may* be complete.  However, we might have consumed the start of a
             // CallExpression or OptionalExpression.  As such, we need to consume the rest
@@ -33248,23 +34056,45 @@
             // private names will never work with `super` (`super.#foo`), but that's a semantic error, not syntactic
             return finishNode(factory.createPropertyAccessExpression(expression, parseRightSideOfDot(/*allowIdentifierNames*/ true, /*allowPrivateIdentifiers*/ true)), pos);
         }
-        function parseJsxElementOrSelfClosingElementOrFragment(inExpressionContext, topInvalidNodePosition) {
+        function parseJsxElementOrSelfClosingElementOrFragment(inExpressionContext, topInvalidNodePosition, openingTag) {
             var pos = getNodePos();
             var opening = parseJsxOpeningOrSelfClosingElementOrOpeningFragment(inExpressionContext);
             var result;
-            if (opening.kind === 276 /* JsxOpeningElement */) {
+            if (opening.kind === 278 /* JsxOpeningElement */) {
                 var children = parseJsxChildren(opening);
-                var closingElement = parseJsxClosingElement(inExpressionContext);
-                if (!tagNamesAreEquivalent(opening.tagName, closingElement.tagName)) {
-                    parseErrorAtRange(closingElement, ts.Diagnostics.Expected_corresponding_JSX_closing_tag_for_0, ts.getTextOfNodeFromSourceText(sourceText, opening.tagName));
+                var closingElement = void 0;
+                var lastChild = children[children.length - 1];
+                if ((lastChild === null || lastChild === void 0 ? void 0 : lastChild.kind) === 276 /* JsxElement */
+                    && !tagNamesAreEquivalent(lastChild.openingElement.tagName, lastChild.closingElement.tagName)
+                    && tagNamesAreEquivalent(opening.tagName, lastChild.closingElement.tagName)) {
+                    // when an unclosed JsxOpeningElement incorrectly parses its parent's JsxClosingElement,
+                    // restructure (<div>(...<span></div>)) --> (<div>(...<span></span>)</div>)
+                    // (no need to error; the parent will error)
+                    var end = lastChild.openingElement.end; // newly-created children and closing are both zero-width end/end
+                    var newLast = finishNode(factory.createJsxElement(lastChild.openingElement, createNodeArray([], end, end), finishNode(factory.createJsxClosingElement(finishNode(factory.createIdentifier(""), end, end)), end, end)), lastChild.openingElement.pos, end);
+                    children = createNodeArray(__spreadArray(__spreadArray([], children.slice(0, children.length - 1), true), [newLast], false), children.pos, end);
+                    closingElement = lastChild.closingElement;
+                }
+                else {
+                    closingElement = parseJsxClosingElement(opening, inExpressionContext);
+                    if (!tagNamesAreEquivalent(opening.tagName, closingElement.tagName)) {
+                        if (openingTag && ts.isJsxOpeningElement(openingTag) && tagNamesAreEquivalent(closingElement.tagName, openingTag.tagName)) {
+                            // opening incorrectly matched with its parent's closing -- put error on opening
+                            parseErrorAtRange(opening.tagName, ts.Diagnostics.JSX_element_0_has_no_corresponding_closing_tag, ts.getTextOfNodeFromSourceText(sourceText, opening.tagName));
+                        }
+                        else {
+                            // other opening/closing mismatches -- put error on closing
+                            parseErrorAtRange(closingElement.tagName, ts.Diagnostics.Expected_corresponding_JSX_closing_tag_for_0, ts.getTextOfNodeFromSourceText(sourceText, opening.tagName));
+                        }
+                    }
                 }
                 result = finishNode(factory.createJsxElement(opening, children, closingElement), pos);
             }
-            else if (opening.kind === 279 /* JsxOpeningFragment */) {
+            else if (opening.kind === 281 /* JsxOpeningFragment */) {
                 result = finishNode(factory.createJsxFragment(opening, parseJsxChildren(opening), parseJsxClosingFragment(inExpressionContext)), pos);
             }
             else {
-                ts.Debug.assert(opening.kind === 275 /* JsxSelfClosingElement */);
+                ts.Debug.assert(opening.kind === 277 /* JsxSelfClosingElement */);
                 // Nothing else to do for self-closing elements
                 result = opening;
             }
@@ -33318,7 +34148,7 @@
                 case 18 /* OpenBraceToken */:
                     return parseJsxExpression(/*inExpressionContext*/ false);
                 case 29 /* LessThanToken */:
-                    return parseJsxElementOrSelfClosingElementOrFragment(/*inExpressionContext*/ false);
+                    return parseJsxElementOrSelfClosingElementOrFragment(/*inExpressionContext*/ false, /*topInvalidNodePosition*/ undefined, openingTag);
                 default:
                     return ts.Debug.assertNever(token);
             }
@@ -33333,6 +34163,13 @@
                 if (!child)
                     break;
                 list.push(child);
+                if (ts.isJsxOpeningElement(openingTag)
+                    && (child === null || child === void 0 ? void 0 : child.kind) === 276 /* JsxElement */
+                    && !tagNamesAreEquivalent(child.openingElement.tagName, child.closingElement.tagName)
+                    && tagNamesAreEquivalent(openingTag.tagName, child.closingElement.tagName)) {
+                    // stop after parsing a mismatched child like <div>...(<span></div>) in order to reattach the </div> higher
+                    break;
+                }
             }
             parsingContext = saveParsingContext;
             return createNodeArray(list, listPos);
@@ -33362,12 +34199,14 @@
             }
             else {
                 parseExpected(43 /* SlashToken */);
-                if (inExpressionContext) {
-                    parseExpected(31 /* GreaterThanToken */);
-                }
-                else {
-                    parseExpected(31 /* GreaterThanToken */, /*diagnostic*/ undefined, /*shouldAdvance*/ false);
-                    scanJsxText();
+                if (parseExpected(31 /* GreaterThanToken */, /*diagnostic*/ undefined, /*shouldAdvance*/ false)) {
+                    // manually advance the scanner in order to look for jsx text inside jsx
+                    if (inExpressionContext) {
+                        nextToken();
+                    }
+                    else {
+                        scanJsxText();
+                    }
                 }
                 node = factory.createJsxSelfClosingElement(tagName, typeArguments, attributes);
             }
@@ -33381,7 +34220,7 @@
             //      primaryExpression in the form of an identifier and "this" keyword
             // We can't just simply use parseLeftHandSideExpressionOrHigher because then we will start consider class,function etc as a keyword
             // We only want to consider "this" as a primaryExpression
-            var expression = token() === 107 /* ThisKeyword */ ?
+            var expression = token() === 108 /* ThisKeyword */ ?
                 parseTokenNode() : parseIdentifierName();
             while (parseOptional(24 /* DotToken */)) {
                 expression = finishNode(factory.createPropertyAccessExpression(expression, parseRightSideOfDot(/*allowIdentifierNames*/ true, /*allowPrivateIdentifiers*/ false)), pos);
@@ -33418,7 +34257,7 @@
             }
             scanJsxIdentifier();
             var pos = getNodePos();
-            return finishNode(factory.createJsxAttribute(parseIdentifierName(), token() !== 62 /* EqualsToken */ ? undefined :
+            return finishNode(factory.createJsxAttribute(parseIdentifierName(), token() !== 63 /* EqualsToken */ ? undefined :
                 scanJsxAttributeValue() === 10 /* StringLiteral */ ? parseLiteralNode() :
                     parseJsxExpression(/*inExpressionContext*/ true)), pos);
         }
@@ -33430,16 +34269,18 @@
             parseExpected(19 /* CloseBraceToken */);
             return finishNode(factory.createJsxSpreadAttribute(expression), pos);
         }
-        function parseJsxClosingElement(inExpressionContext) {
+        function parseJsxClosingElement(open, inExpressionContext) {
             var pos = getNodePos();
             parseExpected(30 /* LessThanSlashToken */);
             var tagName = parseJsxElementName();
-            if (inExpressionContext) {
-                parseExpected(31 /* GreaterThanToken */);
-            }
-            else {
-                parseExpected(31 /* GreaterThanToken */, /*diagnostic*/ undefined, /*shouldAdvance*/ false);
-                scanJsxText();
+            if (parseExpected(31 /* GreaterThanToken */, /*diagnostic*/ undefined, /*shouldAdvance*/ false)) {
+                // manually advance the scanner in order to look for jsx text inside jsx
+                if (inExpressionContext || !tagNamesAreEquivalent(open.tagName, tagName)) {
+                    nextToken();
+                }
+                else {
+                    scanJsxText();
+                }
             }
             return finishNode(factory.createJsxClosingElement(tagName), pos);
         }
@@ -33449,12 +34290,14 @@
             if (ts.tokenIsIdentifierOrKeyword(token())) {
                 parseErrorAtRange(parseJsxElementName(), ts.Diagnostics.Expected_corresponding_closing_tag_for_JSX_fragment);
             }
-            if (inExpressionContext) {
-                parseExpected(31 /* GreaterThanToken */);
-            }
-            else {
-                parseExpected(31 /* GreaterThanToken */, /*diagnostic*/ undefined, /*shouldAdvance*/ false);
-                scanJsxText();
+            if (parseExpected(31 /* GreaterThanToken */, /*diagnostic*/ undefined, /*shouldAdvance*/ false)) {
+                // manually advance the scanner in order to look for jsx text inside jsx
+                if (inExpressionContext) {
+                    nextToken();
+                }
+                else {
+                    scanJsxText();
+                }
             }
             return finishNode(factory.createJsxJsxClosingFragment(), pos);
         }
@@ -33511,7 +34354,7 @@
         function parseElementAccessExpressionRest(pos, expression, questionDotToken) {
             var argumentExpression;
             if (token() === 23 /* CloseBracketToken */) {
-                argumentExpression = createMissingNode(78 /* Identifier */, /*reportAtCurrentPosition*/ true, ts.Diagnostics.An_element_access_expression_should_take_an_argument);
+                argumentExpression = createMissingNode(79 /* Identifier */, /*reportAtCurrentPosition*/ true, ts.Diagnostics.An_element_access_expression_should_take_an_argument);
             }
             else {
                 var argument = allowInAnd(parseExpression);
@@ -33606,7 +34449,7 @@
                 }
                 if (questionDotToken) {
                     // We failed to parse anything, so report a missing identifier here.
-                    var name = createMissingNode(78 /* Identifier */, /*reportAtCurrentPosition*/ false, ts.Diagnostics.Identifier_expected);
+                    var name = createMissingNode(79 /* Identifier */, /*reportAtCurrentPosition*/ false, ts.Diagnostics.Identifier_expected);
                     expression = finishNode(factory.createPropertyAccessChain(expression, questionDotToken, name), pos);
                 }
                 break;
@@ -33687,11 +34530,11 @@
                 case 10 /* StringLiteral */:
                 case 14 /* NoSubstitutionTemplateLiteral */:
                     return parseLiteralNode();
-                case 107 /* ThisKeyword */:
-                case 105 /* SuperKeyword */:
-                case 103 /* NullKeyword */:
-                case 109 /* TrueKeyword */:
-                case 94 /* FalseKeyword */:
+                case 108 /* ThisKeyword */:
+                case 106 /* SuperKeyword */:
+                case 104 /* NullKeyword */:
+                case 110 /* TrueKeyword */:
+                case 95 /* FalseKeyword */:
                     return parseTokenNode();
                 case 20 /* OpenParenToken */:
                     return parseParenthesizedExpression();
@@ -33699,7 +34542,7 @@
                     return parseArrayLiteralExpression();
                 case 18 /* OpenBraceToken */:
                     return parseObjectLiteralExpression();
-                case 129 /* AsyncKeyword */:
+                case 130 /* AsyncKeyword */:
                     // Async arrow functions are parsed earlier in parseAssignmentExpressionOrHigher.
                     // If we encounter `async [no LineTerminator here] function` then this is an async
                     // function; otherwise, its an identifier.
@@ -33707,14 +34550,14 @@
                         break;
                     }
                     return parseFunctionExpression();
-                case 83 /* ClassKeyword */:
+                case 84 /* ClassKeyword */:
                     return parseClassExpression();
-                case 97 /* FunctionKeyword */:
+                case 98 /* FunctionKeyword */:
                     return parseFunctionExpression();
-                case 102 /* NewKeyword */:
+                case 103 /* NewKeyword */:
                     return parseNewExpressionOrNewDotTarget();
                 case 43 /* SlashToken */:
-                case 67 /* SlashEqualsToken */:
+                case 68 /* SlashEqualsToken */:
                     if (reScanSlashToken() === 13 /* RegularExpressionLiteral */) {
                         return parseLiteralNode();
                     }
@@ -33763,11 +34606,11 @@
             }
             var decorators = parseDecorators();
             var modifiers = parseModifiers();
-            if (parseContextualModifier(134 /* GetKeyword */)) {
-                return parseAccessorDeclaration(pos, hasJSDoc, decorators, modifiers, 168 /* GetAccessor */);
+            if (parseContextualModifier(135 /* GetKeyword */)) {
+                return parseAccessorDeclaration(pos, hasJSDoc, decorators, modifiers, 170 /* GetAccessor */);
             }
-            if (parseContextualModifier(146 /* SetKeyword */)) {
-                return parseAccessorDeclaration(pos, hasJSDoc, decorators, modifiers, 169 /* SetAccessor */);
+            if (parseContextualModifier(147 /* SetKeyword */)) {
+                return parseAccessorDeclaration(pos, hasJSDoc, decorators, modifiers, 171 /* SetAccessor */);
             }
             var asteriskToken = parseOptionalToken(41 /* AsteriskToken */);
             var tokenIsIdentifier = isIdentifier();
@@ -33786,7 +34629,7 @@
             var node;
             var isShorthandPropertyAssignment = tokenIsIdentifier && (token() !== 58 /* ColonToken */);
             if (isShorthandPropertyAssignment) {
-                var equalsToken = parseOptionalToken(62 /* EqualsToken */);
+                var equalsToken = parseOptionalToken(63 /* EqualsToken */);
                 var objectAssignmentInitializer = equalsToken ? allowInAnd(parseAssignmentExpressionOrHigher) : undefined;
                 node = factory.createShorthandPropertyAssignment(name, objectAssignmentInitializer);
                 // Save equals token for error reporting.
@@ -33825,14 +34668,12 @@
             //
             // FunctionExpression:
             //      function BindingIdentifier[opt](FormalParameters){ FunctionBody }
-            var saveDecoratorContext = inDecoratorContext();
-            if (saveDecoratorContext) {
-                setDecoratorContext(/*val*/ false);
-            }
+            var savedDecoratorContext = inDecoratorContext();
+            setDecoratorContext(/*val*/ false);
             var pos = getNodePos();
             var hasJSDoc = hasPrecedingJSDocComment();
             var modifiers = parseModifiers();
-            parseExpected(97 /* FunctionKeyword */);
+            parseExpected(98 /* FunctionKeyword */);
             var asteriskToken = parseOptionalToken(41 /* AsteriskToken */);
             var isGenerator = asteriskToken ? 1 /* Yield */ : 0 /* None */;
             var isAsync = ts.some(modifiers, ts.isAsyncModifier) ? 2 /* Await */ : 0 /* None */;
@@ -33844,9 +34685,7 @@
             var parameters = parseParameters(isGenerator | isAsync);
             var type = parseReturnType(58 /* ColonToken */, /*isType*/ false);
             var body = parseFunctionBlock(isGenerator | isAsync);
-            if (saveDecoratorContext) {
-                setDecoratorContext(/*val*/ true);
-            }
+            setDecoratorContext(savedDecoratorContext);
             var node = factory.createFunctionExpression(modifiers, asteriskToken, name, typeParameters, parameters, type, body);
             return withJSDoc(finishNode(node, pos), hasJSDoc);
         }
@@ -33855,10 +34694,10 @@
         }
         function parseNewExpressionOrNewDotTarget() {
             var pos = getNodePos();
-            parseExpected(102 /* NewKeyword */);
+            parseExpected(103 /* NewKeyword */);
             if (parseOptional(24 /* DotToken */)) {
                 var name = parseIdentifierName();
-                return finishNode(factory.createMetaProperty(102 /* NewKeyword */, name), pos);
+                return finishNode(factory.createMetaProperty(103 /* NewKeyword */, name), pos);
             }
             var expressionPos = getNodePos();
             var expression = parsePrimaryExpression();
@@ -33897,7 +34736,7 @@
                     }
                 }
                 var result = withJSDoc(finishNode(factory.createBlock(statements, multiLine), pos), hasJSDoc);
-                if (token() === 62 /* EqualsToken */) {
+                if (token() === 63 /* EqualsToken */) {
                     parseErrorAtCurrentToken(ts.Diagnostics.Declaration_or_statement_expected_This_follows_a_block_of_statements_so_if_you_intended_to_write_a_destructuring_assignment_you_might_need_to_wrap_the_the_whole_assignment_in_parentheses);
                     nextToken();
                 }
@@ -33939,20 +34778,20 @@
         function parseIfStatement() {
             var pos = getNodePos();
             var hasJSDoc = hasPrecedingJSDocComment();
-            parseExpected(98 /* IfKeyword */);
+            parseExpected(99 /* IfKeyword */);
             parseExpected(20 /* OpenParenToken */);
             var expression = allowInAnd(parseExpression);
             parseExpected(21 /* CloseParenToken */);
             var thenStatement = parseStatement();
-            var elseStatement = parseOptional(90 /* ElseKeyword */) ? parseStatement() : undefined;
+            var elseStatement = parseOptional(91 /* ElseKeyword */) ? parseStatement() : undefined;
             return withJSDoc(finishNode(factory.createIfStatement(expression, thenStatement, elseStatement), pos), hasJSDoc);
         }
         function parseDoStatement() {
             var pos = getNodePos();
             var hasJSDoc = hasPrecedingJSDocComment();
-            parseExpected(89 /* DoKeyword */);
+            parseExpected(90 /* DoKeyword */);
             var statement = parseStatement();
-            parseExpected(114 /* WhileKeyword */);
+            parseExpected(115 /* WhileKeyword */);
             parseExpected(20 /* OpenParenToken */);
             var expression = allowInAnd(parseExpression);
             parseExpected(21 /* CloseParenToken */);
@@ -33966,7 +34805,7 @@
         function parseWhileStatement() {
             var pos = getNodePos();
             var hasJSDoc = hasPrecedingJSDocComment();
-            parseExpected(114 /* WhileKeyword */);
+            parseExpected(115 /* WhileKeyword */);
             parseExpected(20 /* OpenParenToken */);
             var expression = allowInAnd(parseExpression);
             parseExpected(21 /* CloseParenToken */);
@@ -33976,12 +34815,12 @@
         function parseForOrForInOrForOfStatement() {
             var pos = getNodePos();
             var hasJSDoc = hasPrecedingJSDocComment();
-            parseExpected(96 /* ForKeyword */);
-            var awaitToken = parseOptionalToken(130 /* AwaitKeyword */);
+            parseExpected(97 /* ForKeyword */);
+            var awaitToken = parseOptionalToken(131 /* AwaitKeyword */);
             parseExpected(20 /* OpenParenToken */);
             var initializer;
             if (token() !== 26 /* SemicolonToken */) {
-                if (token() === 112 /* VarKeyword */ || token() === 118 /* LetKeyword */ || token() === 84 /* ConstKeyword */) {
+                if (token() === 113 /* VarKeyword */ || token() === 119 /* LetKeyword */ || token() === 85 /* ConstKeyword */) {
                     initializer = parseVariableDeclarationList(/*inForStatementInitializer*/ true);
                 }
                 else {
@@ -33989,12 +34828,12 @@
                 }
             }
             var node;
-            if (awaitToken ? parseExpected(157 /* OfKeyword */) : parseOptional(157 /* OfKeyword */)) {
+            if (awaitToken ? parseExpected(158 /* OfKeyword */) : parseOptional(158 /* OfKeyword */)) {
                 var expression = allowInAnd(parseAssignmentExpressionOrHigher);
                 parseExpected(21 /* CloseParenToken */);
                 node = factory.createForOfStatement(awaitToken, initializer, expression, parseStatement());
             }
-            else if (parseOptional(100 /* InKeyword */)) {
+            else if (parseOptional(101 /* InKeyword */)) {
                 var expression = allowInAnd(parseExpression);
                 parseExpected(21 /* CloseParenToken */);
                 node = factory.createForInStatement(initializer, expression, parseStatement());
@@ -34016,10 +34855,10 @@
         function parseBreakOrContinueStatement(kind) {
             var pos = getNodePos();
             var hasJSDoc = hasPrecedingJSDocComment();
-            parseExpected(kind === 242 /* BreakStatement */ ? 80 /* BreakKeyword */ : 85 /* ContinueKeyword */);
+            parseExpected(kind === 244 /* BreakStatement */ ? 81 /* BreakKeyword */ : 86 /* ContinueKeyword */);
             var label = canParseSemicolon() ? undefined : parseIdentifier();
             parseSemicolon();
-            var node = kind === 242 /* BreakStatement */
+            var node = kind === 244 /* BreakStatement */
                 ? factory.createBreakStatement(label)
                 : factory.createContinueStatement(label);
             return withJSDoc(finishNode(node, pos), hasJSDoc);
@@ -34027,7 +34866,7 @@
         function parseReturnStatement() {
             var pos = getNodePos();
             var hasJSDoc = hasPrecedingJSDocComment();
-            parseExpected(104 /* ReturnKeyword */);
+            parseExpected(105 /* ReturnKeyword */);
             var expression = canParseSemicolon() ? undefined : allowInAnd(parseExpression);
             parseSemicolon();
             return withJSDoc(finishNode(factory.createReturnStatement(expression), pos), hasJSDoc);
@@ -34035,7 +34874,7 @@
         function parseWithStatement() {
             var pos = getNodePos();
             var hasJSDoc = hasPrecedingJSDocComment();
-            parseExpected(115 /* WithKeyword */);
+            parseExpected(116 /* WithKeyword */);
             parseExpected(20 /* OpenParenToken */);
             var expression = allowInAnd(parseExpression);
             parseExpected(21 /* CloseParenToken */);
@@ -34044,7 +34883,7 @@
         }
         function parseCaseClause() {
             var pos = getNodePos();
-            parseExpected(81 /* CaseKeyword */);
+            parseExpected(82 /* CaseKeyword */);
             var expression = allowInAnd(parseExpression);
             parseExpected(58 /* ColonToken */);
             var statements = parseList(3 /* SwitchClauseStatements */, parseStatement);
@@ -34052,13 +34891,13 @@
         }
         function parseDefaultClause() {
             var pos = getNodePos();
-            parseExpected(87 /* DefaultKeyword */);
+            parseExpected(88 /* DefaultKeyword */);
             parseExpected(58 /* ColonToken */);
             var statements = parseList(3 /* SwitchClauseStatements */, parseStatement);
             return finishNode(factory.createDefaultClause(statements), pos);
         }
         function parseCaseOrDefaultClause() {
-            return token() === 81 /* CaseKeyword */ ? parseCaseClause() : parseDefaultClause();
+            return token() === 82 /* CaseKeyword */ ? parseCaseClause() : parseDefaultClause();
         }
         function parseCaseBlock() {
             var pos = getNodePos();
@@ -34070,7 +34909,7 @@
         function parseSwitchStatement() {
             var pos = getNodePos();
             var hasJSDoc = hasPrecedingJSDocComment();
-            parseExpected(106 /* SwitchKeyword */);
+            parseExpected(107 /* SwitchKeyword */);
             parseExpected(20 /* OpenParenToken */);
             var expression = allowInAnd(parseExpression);
             parseExpected(21 /* CloseParenToken */);
@@ -34082,7 +34921,7 @@
             //      throw [no LineTerminator here]Expression[In, ?Yield];
             var pos = getNodePos();
             var hasJSDoc = hasPrecedingJSDocComment();
-            parseExpected(108 /* ThrowKeyword */);
+            parseExpected(109 /* ThrowKeyword */);
             // Because of automatic semicolon insertion, we need to report error if this
             // throw could be terminated with a semicolon.  Note: we can't call 'parseExpression'
             // directly as that might consume an expression on the following line.
@@ -34093,28 +34932,30 @@
                 identifierCount++;
                 expression = finishNode(factory.createIdentifier(""), getNodePos());
             }
-            parseSemicolon();
+            if (!tryParseSemicolon()) {
+                parseErrorForMissingSemicolonAfter(expression);
+            }
             return withJSDoc(finishNode(factory.createThrowStatement(expression), pos), hasJSDoc);
         }
         // TODO: Review for error recovery
         function parseTryStatement() {
             var pos = getNodePos();
             var hasJSDoc = hasPrecedingJSDocComment();
-            parseExpected(110 /* TryKeyword */);
+            parseExpected(111 /* TryKeyword */);
             var tryBlock = parseBlock(/*ignoreMissingOpenBrace*/ false);
-            var catchClause = token() === 82 /* CatchKeyword */ ? parseCatchClause() : undefined;
+            var catchClause = token() === 83 /* CatchKeyword */ ? parseCatchClause() : undefined;
             // If we don't have a catch clause, then we must have a finally clause.  Try to parse
             // one out no matter what.
             var finallyBlock;
-            if (!catchClause || token() === 95 /* FinallyKeyword */) {
-                parseExpected(95 /* FinallyKeyword */);
+            if (!catchClause || token() === 96 /* FinallyKeyword */) {
+                parseExpected(96 /* FinallyKeyword */);
                 finallyBlock = parseBlock(/*ignoreMissingOpenBrace*/ false);
             }
             return withJSDoc(finishNode(factory.createTryStatement(tryBlock, catchClause, finallyBlock), pos), hasJSDoc);
         }
         function parseCatchClause() {
             var pos = getNodePos();
-            parseExpected(82 /* CatchKeyword */);
+            parseExpected(83 /* CatchKeyword */);
             var variableDeclaration;
             if (parseOptional(20 /* OpenParenToken */)) {
                 variableDeclaration = parseVariableDeclaration();
@@ -34130,7 +34971,7 @@
         function parseDebuggerStatement() {
             var pos = getNodePos();
             var hasJSDoc = hasPrecedingJSDocComment();
-            parseExpected(86 /* DebuggerKeyword */);
+            parseExpected(87 /* DebuggerKeyword */);
             parseSemicolon();
             return withJSDoc(finishNode(factory.createDebuggerStatement(), pos), hasJSDoc);
         }
@@ -34147,7 +34988,9 @@
                 node = factory.createLabeledStatement(expression, parseStatement());
             }
             else {
-                parseSemicolon();
+                if (!tryParseSemicolon()) {
+                    parseErrorForMissingSemicolonAfter(expression);
+                }
                 node = factory.createExpressionStatement(expression);
                 if (hasParen) {
                     // do not parse the same jsdoc twice
@@ -34162,11 +35005,11 @@
         }
         function nextTokenIsClassKeywordOnSameLine() {
             nextToken();
-            return token() === 83 /* ClassKeyword */ && !scanner.hasPrecedingLineBreak();
+            return token() === 84 /* ClassKeyword */ && !scanner.hasPrecedingLineBreak();
         }
         function nextTokenIsFunctionKeywordOnSameLine() {
             nextToken();
-            return token() === 97 /* FunctionKeyword */ && !scanner.hasPrecedingLineBreak();
+            return token() === 98 /* FunctionKeyword */ && !scanner.hasPrecedingLineBreak();
         }
         function nextTokenIsIdentifierOrKeywordOrLiteralOnSameLine() {
             nextToken();
@@ -34175,12 +35018,12 @@
         function isDeclaration() {
             while (true) {
                 switch (token()) {
-                    case 112 /* VarKeyword */:
-                    case 118 /* LetKeyword */:
-                    case 84 /* ConstKeyword */:
-                    case 97 /* FunctionKeyword */:
-                    case 83 /* ClassKeyword */:
-                    case 91 /* EnumKeyword */:
+                    case 113 /* VarKeyword */:
+                    case 119 /* LetKeyword */:
+                    case 85 /* ConstKeyword */:
+                    case 98 /* FunctionKeyword */:
+                    case 84 /* ClassKeyword */:
+                    case 92 /* EnumKeyword */:
                         return true;
                     // 'declare', 'module', 'namespace', 'interface'* and 'type' are all legal JavaScript identifiers;
                     // however, an identifier cannot be followed by another identifier on the same line. This is what we
@@ -34203,44 +35046,44 @@
                     //   I {}
                     //
                     // could be legal, it would add complexity for very little gain.
-                    case 117 /* InterfaceKeyword */:
-                    case 149 /* TypeKeyword */:
+                    case 118 /* InterfaceKeyword */:
+                    case 150 /* TypeKeyword */:
                         return nextTokenIsIdentifierOnSameLine();
-                    case 139 /* ModuleKeyword */:
-                    case 140 /* NamespaceKeyword */:
+                    case 140 /* ModuleKeyword */:
+                    case 141 /* NamespaceKeyword */:
                         return nextTokenIsIdentifierOrStringLiteralOnSameLine();
-                    case 125 /* AbstractKeyword */:
-                    case 129 /* AsyncKeyword */:
-                    case 133 /* DeclareKeyword */:
-                    case 120 /* PrivateKeyword */:
-                    case 121 /* ProtectedKeyword */:
-                    case 122 /* PublicKeyword */:
-                    case 142 /* ReadonlyKeyword */:
+                    case 126 /* AbstractKeyword */:
+                    case 130 /* AsyncKeyword */:
+                    case 134 /* DeclareKeyword */:
+                    case 121 /* PrivateKeyword */:
+                    case 122 /* ProtectedKeyword */:
+                    case 123 /* PublicKeyword */:
+                    case 143 /* ReadonlyKeyword */:
                         nextToken();
                         // ASI takes effect for this modifier.
                         if (scanner.hasPrecedingLineBreak()) {
                             return false;
                         }
                         continue;
-                    case 154 /* GlobalKeyword */:
+                    case 155 /* GlobalKeyword */:
                         nextToken();
-                        return token() === 18 /* OpenBraceToken */ || token() === 78 /* Identifier */ || token() === 92 /* ExportKeyword */;
-                    case 99 /* ImportKeyword */:
+                        return token() === 18 /* OpenBraceToken */ || token() === 79 /* Identifier */ || token() === 93 /* ExportKeyword */;
+                    case 100 /* ImportKeyword */:
                         nextToken();
                         return token() === 10 /* StringLiteral */ || token() === 41 /* AsteriskToken */ ||
                             token() === 18 /* OpenBraceToken */ || ts.tokenIsIdentifierOrKeyword(token());
-                    case 92 /* ExportKeyword */:
+                    case 93 /* ExportKeyword */:
                         var currentToken_1 = nextToken();
-                        if (currentToken_1 === 149 /* TypeKeyword */) {
+                        if (currentToken_1 === 150 /* TypeKeyword */) {
                             currentToken_1 = lookAhead(nextToken);
                         }
-                        if (currentToken_1 === 62 /* EqualsToken */ || currentToken_1 === 41 /* AsteriskToken */ ||
-                            currentToken_1 === 18 /* OpenBraceToken */ || currentToken_1 === 87 /* DefaultKeyword */ ||
-                            currentToken_1 === 126 /* AsKeyword */) {
+                        if (currentToken_1 === 63 /* EqualsToken */ || currentToken_1 === 41 /* AsteriskToken */ ||
+                            currentToken_1 === 18 /* OpenBraceToken */ || currentToken_1 === 88 /* DefaultKeyword */ ||
+                            currentToken_1 === 127 /* AsKeyword */) {
                             return true;
                         }
                         continue;
-                    case 123 /* StaticKeyword */:
+                    case 124 /* StaticKeyword */:
                         nextToken();
                         continue;
                     default:
@@ -34256,48 +35099,48 @@
                 case 59 /* AtToken */:
                 case 26 /* SemicolonToken */:
                 case 18 /* OpenBraceToken */:
-                case 112 /* VarKeyword */:
-                case 118 /* LetKeyword */:
-                case 97 /* FunctionKeyword */:
-                case 83 /* ClassKeyword */:
-                case 91 /* EnumKeyword */:
-                case 98 /* IfKeyword */:
-                case 89 /* DoKeyword */:
-                case 114 /* WhileKeyword */:
-                case 96 /* ForKeyword */:
-                case 85 /* ContinueKeyword */:
-                case 80 /* BreakKeyword */:
-                case 104 /* ReturnKeyword */:
-                case 115 /* WithKeyword */:
-                case 106 /* SwitchKeyword */:
-                case 108 /* ThrowKeyword */:
-                case 110 /* TryKeyword */:
-                case 86 /* DebuggerKeyword */:
+                case 113 /* VarKeyword */:
+                case 119 /* LetKeyword */:
+                case 98 /* FunctionKeyword */:
+                case 84 /* ClassKeyword */:
+                case 92 /* EnumKeyword */:
+                case 99 /* IfKeyword */:
+                case 90 /* DoKeyword */:
+                case 115 /* WhileKeyword */:
+                case 97 /* ForKeyword */:
+                case 86 /* ContinueKeyword */:
+                case 81 /* BreakKeyword */:
+                case 105 /* ReturnKeyword */:
+                case 116 /* WithKeyword */:
+                case 107 /* SwitchKeyword */:
+                case 109 /* ThrowKeyword */:
+                case 111 /* TryKeyword */:
+                case 87 /* DebuggerKeyword */:
                 // 'catch' and 'finally' do not actually indicate that the code is part of a statement,
                 // however, we say they are here so that we may gracefully parse them and error later.
                 // falls through
-                case 82 /* CatchKeyword */:
-                case 95 /* FinallyKeyword */:
+                case 83 /* CatchKeyword */:
+                case 96 /* FinallyKeyword */:
                     return true;
-                case 99 /* ImportKeyword */:
+                case 100 /* ImportKeyword */:
                     return isStartOfDeclaration() || lookAhead(nextTokenIsOpenParenOrLessThanOrDot);
-                case 84 /* ConstKeyword */:
-                case 92 /* ExportKeyword */:
+                case 85 /* ConstKeyword */:
+                case 93 /* ExportKeyword */:
                     return isStartOfDeclaration();
-                case 129 /* AsyncKeyword */:
-                case 133 /* DeclareKeyword */:
-                case 117 /* InterfaceKeyword */:
-                case 139 /* ModuleKeyword */:
-                case 140 /* NamespaceKeyword */:
-                case 149 /* TypeKeyword */:
-                case 154 /* GlobalKeyword */:
+                case 130 /* AsyncKeyword */:
+                case 134 /* DeclareKeyword */:
+                case 118 /* InterfaceKeyword */:
+                case 140 /* ModuleKeyword */:
+                case 141 /* NamespaceKeyword */:
+                case 150 /* TypeKeyword */:
+                case 155 /* GlobalKeyword */:
                     // When these don't start a declaration, they're an identifier in an expression statement
                     return true;
-                case 122 /* PublicKeyword */:
-                case 120 /* PrivateKeyword */:
-                case 121 /* ProtectedKeyword */:
-                case 123 /* StaticKeyword */:
-                case 142 /* ReadonlyKeyword */:
+                case 123 /* PublicKeyword */:
+                case 121 /* PrivateKeyword */:
+                case 122 /* ProtectedKeyword */:
+                case 124 /* StaticKeyword */:
+                case 143 /* ReadonlyKeyword */:
                     // When these don't start a declaration, they may be the start of a class member if an identifier
                     // immediately follows. Otherwise they're an identifier in an expression statement.
                     return isStartOfDeclaration() || !lookAhead(nextTokenIsIdentifierOrKeywordOnSameLine);
@@ -34305,14 +35148,14 @@
                     return isStartOfExpression();
             }
         }
-        function nextTokenIsIdentifierOrStartOfDestructuring() {
+        function nextTokenIsBindingIdentifierOrStartOfDestructuring() {
             nextToken();
-            return isIdentifier() || token() === 18 /* OpenBraceToken */ || token() === 22 /* OpenBracketToken */;
+            return isBindingIdentifier() || token() === 18 /* OpenBraceToken */ || token() === 22 /* OpenBracketToken */;
         }
         function isLetDeclaration() {
             // In ES6 'let' always starts a lexical declaration if followed by an identifier or {
             // or [.
-            return lookAhead(nextTokenIsIdentifierOrStartOfDestructuring);
+            return lookAhead(nextTokenIsBindingIdentifierOrStartOfDestructuring);
         }
         function parseStatement() {
             switch (token()) {
@@ -34320,64 +35163,64 @@
                     return parseEmptyStatement();
                 case 18 /* OpenBraceToken */:
                     return parseBlock(/*ignoreMissingOpenBrace*/ false);
-                case 112 /* VarKeyword */:
+                case 113 /* VarKeyword */:
                     return parseVariableStatement(getNodePos(), hasPrecedingJSDocComment(), /*decorators*/ undefined, /*modifiers*/ undefined);
-                case 118 /* LetKeyword */:
+                case 119 /* LetKeyword */:
                     if (isLetDeclaration()) {
                         return parseVariableStatement(getNodePos(), hasPrecedingJSDocComment(), /*decorators*/ undefined, /*modifiers*/ undefined);
                     }
                     break;
-                case 97 /* FunctionKeyword */:
+                case 98 /* FunctionKeyword */:
                     return parseFunctionDeclaration(getNodePos(), hasPrecedingJSDocComment(), /*decorators*/ undefined, /*modifiers*/ undefined);
-                case 83 /* ClassKeyword */:
+                case 84 /* ClassKeyword */:
                     return parseClassDeclaration(getNodePos(), hasPrecedingJSDocComment(), /*decorators*/ undefined, /*modifiers*/ undefined);
-                case 98 /* IfKeyword */:
+                case 99 /* IfKeyword */:
                     return parseIfStatement();
-                case 89 /* DoKeyword */:
+                case 90 /* DoKeyword */:
                     return parseDoStatement();
-                case 114 /* WhileKeyword */:
+                case 115 /* WhileKeyword */:
                     return parseWhileStatement();
-                case 96 /* ForKeyword */:
+                case 97 /* ForKeyword */:
                     return parseForOrForInOrForOfStatement();
-                case 85 /* ContinueKeyword */:
-                    return parseBreakOrContinueStatement(241 /* ContinueStatement */);
-                case 80 /* BreakKeyword */:
-                    return parseBreakOrContinueStatement(242 /* BreakStatement */);
-                case 104 /* ReturnKeyword */:
+                case 86 /* ContinueKeyword */:
+                    return parseBreakOrContinueStatement(243 /* ContinueStatement */);
+                case 81 /* BreakKeyword */:
+                    return parseBreakOrContinueStatement(244 /* BreakStatement */);
+                case 105 /* ReturnKeyword */:
                     return parseReturnStatement();
-                case 115 /* WithKeyword */:
+                case 116 /* WithKeyword */:
                     return parseWithStatement();
-                case 106 /* SwitchKeyword */:
+                case 107 /* SwitchKeyword */:
                     return parseSwitchStatement();
-                case 108 /* ThrowKeyword */:
+                case 109 /* ThrowKeyword */:
                     return parseThrowStatement();
-                case 110 /* TryKeyword */:
+                case 111 /* TryKeyword */:
                 // Include 'catch' and 'finally' for error recovery.
                 // falls through
-                case 82 /* CatchKeyword */:
-                case 95 /* FinallyKeyword */:
+                case 83 /* CatchKeyword */:
+                case 96 /* FinallyKeyword */:
                     return parseTryStatement();
-                case 86 /* DebuggerKeyword */:
+                case 87 /* DebuggerKeyword */:
                     return parseDebuggerStatement();
                 case 59 /* AtToken */:
                     return parseDeclaration();
-                case 129 /* AsyncKeyword */:
-                case 117 /* InterfaceKeyword */:
-                case 149 /* TypeKeyword */:
-                case 139 /* ModuleKeyword */:
-                case 140 /* NamespaceKeyword */:
-                case 133 /* DeclareKeyword */:
-                case 84 /* ConstKeyword */:
-                case 91 /* EnumKeyword */:
-                case 92 /* ExportKeyword */:
-                case 99 /* ImportKeyword */:
-                case 120 /* PrivateKeyword */:
-                case 121 /* ProtectedKeyword */:
-                case 122 /* PublicKeyword */:
-                case 125 /* AbstractKeyword */:
-                case 123 /* StaticKeyword */:
-                case 142 /* ReadonlyKeyword */:
-                case 154 /* GlobalKeyword */:
+                case 130 /* AsyncKeyword */:
+                case 118 /* InterfaceKeyword */:
+                case 150 /* TypeKeyword */:
+                case 140 /* ModuleKeyword */:
+                case 141 /* NamespaceKeyword */:
+                case 134 /* DeclareKeyword */:
+                case 85 /* ConstKeyword */:
+                case 92 /* EnumKeyword */:
+                case 93 /* ExportKeyword */:
+                case 100 /* ImportKeyword */:
+                case 121 /* PrivateKeyword */:
+                case 122 /* ProtectedKeyword */:
+                case 123 /* PublicKeyword */:
+                case 126 /* AbstractKeyword */:
+                case 124 /* StaticKeyword */:
+                case 143 /* ReadonlyKeyword */:
+                case 155 /* GlobalKeyword */:
                     if (isStartOfDeclaration()) {
                         return parseDeclaration();
                     }
@@ -34386,7 +35229,7 @@
             return parseExpressionOrLabeledStatement();
         }
         function isDeclareModifier(modifier) {
-            return modifier.kind === 133 /* DeclareKeyword */;
+            return modifier.kind === 134 /* DeclareKeyword */;
         }
         function parseDeclaration() {
             // TODO: Can we hold onto the parsed decorators/modifiers and advance the scanner
@@ -34427,33 +35270,33 @@
         }
         function parseDeclarationWorker(pos, hasJSDoc, decorators, modifiers) {
             switch (token()) {
-                case 112 /* VarKeyword */:
-                case 118 /* LetKeyword */:
-                case 84 /* ConstKeyword */:
+                case 113 /* VarKeyword */:
+                case 119 /* LetKeyword */:
+                case 85 /* ConstKeyword */:
                     return parseVariableStatement(pos, hasJSDoc, decorators, modifiers);
-                case 97 /* FunctionKeyword */:
+                case 98 /* FunctionKeyword */:
                     return parseFunctionDeclaration(pos, hasJSDoc, decorators, modifiers);
-                case 83 /* ClassKeyword */:
+                case 84 /* ClassKeyword */:
                     return parseClassDeclaration(pos, hasJSDoc, decorators, modifiers);
-                case 117 /* InterfaceKeyword */:
+                case 118 /* InterfaceKeyword */:
                     return parseInterfaceDeclaration(pos, hasJSDoc, decorators, modifiers);
-                case 149 /* TypeKeyword */:
+                case 150 /* TypeKeyword */:
                     return parseTypeAliasDeclaration(pos, hasJSDoc, decorators, modifiers);
-                case 91 /* EnumKeyword */:
+                case 92 /* EnumKeyword */:
                     return parseEnumDeclaration(pos, hasJSDoc, decorators, modifiers);
-                case 154 /* GlobalKeyword */:
-                case 139 /* ModuleKeyword */:
-                case 140 /* NamespaceKeyword */:
+                case 155 /* GlobalKeyword */:
+                case 140 /* ModuleKeyword */:
+                case 141 /* NamespaceKeyword */:
                     return parseModuleDeclaration(pos, hasJSDoc, decorators, modifiers);
-                case 99 /* ImportKeyword */:
+                case 100 /* ImportKeyword */:
                     return parseImportDeclarationOrImportEqualsDeclaration(pos, hasJSDoc, decorators, modifiers);
-                case 92 /* ExportKeyword */:
+                case 93 /* ExportKeyword */:
                     nextToken();
                     switch (token()) {
-                        case 87 /* DefaultKeyword */:
-                        case 62 /* EqualsToken */:
+                        case 88 /* DefaultKeyword */:
+                        case 63 /* EqualsToken */:
                             return parseExportAssignment(pos, hasJSDoc, decorators, modifiers);
-                        case 126 /* AsKeyword */:
+                        case 127 /* AsKeyword */:
                             return parseNamespaceExportDeclaration(pos, hasJSDoc, decorators, modifiers);
                         default:
                             return parseExportDeclaration(pos, hasJSDoc, decorators, modifiers);
@@ -34462,7 +35305,7 @@
                     if (decorators || modifiers) {
                         // We reached this point because we encountered decorators and/or modifiers and assumed a declaration
                         // would follow. For recovery and error reporting purposes, return an incomplete declaration.
-                        var missing = createMissingNode(272 /* MissingDeclaration */, /*reportAtCurrentPosition*/ true, ts.Diagnostics.Declaration_expected);
+                        var missing = createMissingNode(274 /* MissingDeclaration */, /*reportAtCurrentPosition*/ true, ts.Diagnostics.Declaration_expected);
                         ts.setTextRangePos(missing, pos);
                         missing.decorators = decorators;
                         missing.modifiers = modifiers;
@@ -34527,7 +35370,7 @@
         function isBindingIdentifierOrPrivateIdentifierOrPattern() {
             return token() === 18 /* OpenBraceToken */
                 || token() === 22 /* OpenBracketToken */
-                || token() === 79 /* PrivateIdentifier */
+                || token() === 80 /* PrivateIdentifier */
                 || isBindingIdentifier();
         }
         function parseIdentifierOrPattern(privateIdentifierDiagnosticMessage) {
@@ -34547,7 +35390,7 @@
             var hasJSDoc = hasPrecedingJSDocComment();
             var name = parseIdentifierOrPattern(ts.Diagnostics.Private_identifiers_are_not_allowed_in_variable_declarations);
             var exclamationToken;
-            if (allowExclamation && name.kind === 78 /* Identifier */ &&
+            if (allowExclamation && name.kind === 79 /* Identifier */ &&
                 token() === 53 /* ExclamationToken */ && !scanner.hasPrecedingLineBreak()) {
                 exclamationToken = parseTokenNode();
             }
@@ -34560,12 +35403,12 @@
             var pos = getNodePos();
             var flags = 0;
             switch (token()) {
-                case 112 /* VarKeyword */:
+                case 113 /* VarKeyword */:
                     break;
-                case 118 /* LetKeyword */:
+                case 119 /* LetKeyword */:
                     flags |= 1 /* Let */;
                     break;
-                case 84 /* ConstKeyword */:
+                case 85 /* ConstKeyword */:
                     flags |= 2 /* Const */;
                     break;
                 default:
@@ -34582,7 +35425,7 @@
             // this context.
             // The checker will then give an error that there is an empty declaration list.
             var declarations;
-            if (token() === 157 /* OfKeyword */ && lookAhead(canFollowContextualOfKeyword)) {
+            if (token() === 158 /* OfKeyword */ && lookAhead(canFollowContextualOfKeyword)) {
                 declarations = createMissingList();
             }
             else {
@@ -34607,7 +35450,7 @@
         function parseFunctionDeclaration(pos, hasJSDoc, decorators, modifiers) {
             var savedAwaitContext = inAwaitContext();
             var modifierFlags = ts.modifiersToFlags(modifiers);
-            parseExpected(97 /* FunctionKeyword */);
+            parseExpected(98 /* FunctionKeyword */);
             var asteriskToken = parseOptionalToken(41 /* AsteriskToken */);
             // We don't parse the name here in await context, instead we will report a grammar error in the checker.
             var name = modifierFlags & 512 /* Default */ ? parseOptionalBindingIdentifier() : parseBindingIdentifier();
@@ -34624,8 +35467,8 @@
             return withJSDoc(finishNode(node, pos), hasJSDoc);
         }
         function parseConstructorName() {
-            if (token() === 132 /* ConstructorKeyword */) {
-                return parseExpected(132 /* ConstructorKeyword */);
+            if (token() === 133 /* ConstructorKeyword */) {
+                return parseExpected(133 /* ConstructorKeyword */);
             }
             if (token() === 10 /* StringLiteral */ && lookAhead(nextToken) === 20 /* OpenParenToken */) {
                 return tryParse(function () {
@@ -34665,7 +35508,7 @@
             var exclamationToken = !questionToken && !scanner.hasPrecedingLineBreak() ? parseOptionalToken(53 /* ExclamationToken */) : undefined;
             var type = parseTypeAnnotation();
             var initializer = doOutsideOfContext(8192 /* YieldContext */ | 32768 /* AwaitContext */ | 4096 /* DisallowInContext */, parseInitializer);
-            parseSemicolon();
+            parseSemicolonAfterPropertyName(name, type, initializer);
             var node = factory.createPropertyDeclaration(decorators, modifiers, name, questionToken || exclamationToken, type, initializer);
             return withJSDoc(finishNode(node, pos), hasJSDoc);
         }
@@ -34686,12 +35529,12 @@
             var parameters = parseParameters(0 /* None */);
             var type = parseReturnType(58 /* ColonToken */, /*isType*/ false);
             var body = parseFunctionBlockOrSemicolon(0 /* None */);
-            var node = kind === 168 /* GetAccessor */
+            var node = kind === 170 /* GetAccessor */
                 ? factory.createGetAccessorDeclaration(decorators, modifiers, name, parameters, type, body)
                 : factory.createSetAccessorDeclaration(decorators, modifiers, name, parameters, body);
             // Keep track of `typeParameters` (for both) and `type` (for setters) if they were parsed those indicate grammar errors
             node.typeParameters = typeParameters;
-            if (type && node.kind === 169 /* SetAccessor */)
+            if (type && node.kind === 171 /* SetAccessor */)
                 node.type = type;
             return withJSDoc(finishNode(node, pos), hasJSDoc);
         }
@@ -34730,7 +35573,7 @@
             // If we were able to get any potential identifier...
             if (idToken !== undefined) {
                 // If we have a non-keyword identifier, or if we have an accessor, then it's safe to parse.
-                if (!ts.isKeyword(idToken) || idToken === 146 /* SetKeyword */ || idToken === 134 /* GetKeyword */) {
+                if (!ts.isKeyword(idToken) || idToken === 147 /* SetKeyword */ || idToken === 135 /* GetKeyword */) {
                     return true;
                 }
                 // If it *is* a keyword, but not an accessor, check a little farther along
@@ -34740,7 +35583,7 @@
                     case 29 /* LessThanToken */: // Generic Method declaration
                     case 53 /* ExclamationToken */: // Non-null assertion on property name
                     case 58 /* ColonToken */: // Type Annotation for declaration
-                    case 62 /* EqualsToken */: // Initializer for declaration
+                    case 63 /* EqualsToken */: // Initializer for declaration
                     case 57 /* QuestionToken */: // Not valid, but permitted so that it gets caught later on.
                         return true;
                     default:
@@ -34754,8 +35597,23 @@
             }
             return false;
         }
+        function parseClassStaticBlockDeclaration(pos, hasJSDoc, decorators, modifiers) {
+            parseExpectedToken(124 /* StaticKeyword */);
+            var body = parseClassStaticBlockBody();
+            return withJSDoc(finishNode(factory.createClassStaticBlockDeclaration(decorators, modifiers, body), pos), hasJSDoc);
+        }
+        function parseClassStaticBlockBody() {
+            var savedYieldContext = inYieldContext();
+            var savedAwaitContext = inAwaitContext();
+            setYieldContext(false);
+            setAwaitContext(true);
+            var body = parseBlock(/*ignoreMissingOpenBrace*/ false);
+            setYieldContext(savedYieldContext);
+            setAwaitContext(savedAwaitContext);
+            return body;
+        }
         function parseDecoratorExpression() {
-            if (inAwaitContext() && token() === 130 /* AwaitKeyword */) {
+            if (inAwaitContext() && token() === 131 /* AwaitKeyword */) {
                 // `@await` is is disallowed in an [Await] context, but can cause parsing to go off the rails
                 // This simply parses the missing identifier and moves on.
                 var pos = getNodePos();
@@ -34782,16 +35640,19 @@
             }
             return list && createNodeArray(list, pos);
         }
-        function tryParseModifier(permitInvalidConstAsModifier) {
+        function tryParseModifier(permitInvalidConstAsModifier, stopOnStartOfClassStaticBlock) {
             var pos = getNodePos();
             var kind = token();
-            if (token() === 84 /* ConstKeyword */ && permitInvalidConstAsModifier) {
+            if (token() === 85 /* ConstKeyword */ && permitInvalidConstAsModifier) {
                 // We need to ensure that any subsequent modifiers appear on the same line
                 // so that when 'const' is a standalone declaration, we don't issue an error.
                 if (!tryParse(nextTokenIsOnSameLineAndCanFollowModifier)) {
                     return undefined;
                 }
             }
+            else if (stopOnStartOfClassStaticBlock && token() === 124 /* StaticKeyword */ && lookAhead(nextTokenIsOpenBrace)) {
+                return undefined;
+            }
             else {
                 if (!parseAnyContextualModifier()) {
                     return undefined;
@@ -34806,20 +35667,20 @@
          *
          * In such situations, 'permitInvalidConstAsModifier' should be set to true.
          */
-        function parseModifiers(permitInvalidConstAsModifier) {
+        function parseModifiers(permitInvalidConstAsModifier, stopOnStartOfClassStaticBlock) {
             var pos = getNodePos();
             var list, modifier;
-            while (modifier = tryParseModifier(permitInvalidConstAsModifier)) {
+            while (modifier = tryParseModifier(permitInvalidConstAsModifier, stopOnStartOfClassStaticBlock)) {
                 list = ts.append(list, modifier);
             }
             return list && createNodeArray(list, pos);
         }
         function parseModifiersForArrowFunction() {
             var modifiers;
-            if (token() === 129 /* AsyncKeyword */) {
+            if (token() === 130 /* AsyncKeyword */) {
                 var pos = getNodePos();
                 nextToken();
-                var modifier = finishNode(factory.createToken(129 /* AsyncKeyword */), pos);
+                var modifier = finishNode(factory.createToken(130 /* AsyncKeyword */), pos);
                 modifiers = createNodeArray([modifier], pos);
             }
             return modifiers;
@@ -34832,14 +35693,17 @@
             }
             var hasJSDoc = hasPrecedingJSDocComment();
             var decorators = parseDecorators();
-            var modifiers = parseModifiers(/*permitInvalidConstAsModifier*/ true);
-            if (parseContextualModifier(134 /* GetKeyword */)) {
-                return parseAccessorDeclaration(pos, hasJSDoc, decorators, modifiers, 168 /* GetAccessor */);
+            var modifiers = parseModifiers(/*permitInvalidConstAsModifier*/ true, /*stopOnStartOfClassStaticBlock*/ true);
+            if (token() === 124 /* StaticKeyword */ && lookAhead(nextTokenIsOpenBrace)) {
+                return parseClassStaticBlockDeclaration(pos, hasJSDoc, decorators, modifiers);
             }
-            if (parseContextualModifier(146 /* SetKeyword */)) {
-                return parseAccessorDeclaration(pos, hasJSDoc, decorators, modifiers, 169 /* SetAccessor */);
+            if (parseContextualModifier(135 /* GetKeyword */)) {
+                return parseAccessorDeclaration(pos, hasJSDoc, decorators, modifiers, 170 /* GetAccessor */);
             }
-            if (token() === 132 /* ConstructorKeyword */ || token() === 10 /* StringLiteral */) {
+            if (parseContextualModifier(147 /* SetKeyword */)) {
+                return parseAccessorDeclaration(pos, hasJSDoc, decorators, modifiers, 171 /* SetAccessor */);
+            }
+            if (token() === 133 /* ConstructorKeyword */ || token() === 10 /* StringLiteral */) {
                 var constructorDeclaration = tryParseConstructorDeclaration(pos, hasJSDoc, decorators, modifiers);
                 if (constructorDeclaration) {
                     return constructorDeclaration;
@@ -34869,21 +35733,21 @@
             }
             if (decorators || modifiers) {
                 // treat this as a property declaration with a missing name.
-                var name = createMissingNode(78 /* Identifier */, /*reportAtCurrentPosition*/ true, ts.Diagnostics.Declaration_expected);
+                var name = createMissingNode(79 /* Identifier */, /*reportAtCurrentPosition*/ true, ts.Diagnostics.Declaration_expected);
                 return parsePropertyDeclaration(pos, hasJSDoc, decorators, modifiers, name, /*questionToken*/ undefined);
             }
             // 'isClassMemberStart' should have hinted not to attempt parsing.
             return ts.Debug.fail("Should not have attempted to parse class member declaration.");
         }
         function parseClassExpression() {
-            return parseClassDeclarationOrExpression(getNodePos(), hasPrecedingJSDocComment(), /*decorators*/ undefined, /*modifiers*/ undefined, 222 /* ClassExpression */);
+            return parseClassDeclarationOrExpression(getNodePos(), hasPrecedingJSDocComment(), /*decorators*/ undefined, /*modifiers*/ undefined, 224 /* ClassExpression */);
         }
         function parseClassDeclaration(pos, hasJSDoc, decorators, modifiers) {
-            return parseClassDeclarationOrExpression(pos, hasJSDoc, decorators, modifiers, 253 /* ClassDeclaration */);
+            return parseClassDeclarationOrExpression(pos, hasJSDoc, decorators, modifiers, 255 /* ClassDeclaration */);
         }
         function parseClassDeclarationOrExpression(pos, hasJSDoc, decorators, modifiers, kind) {
             var savedAwaitContext = inAwaitContext();
-            parseExpected(83 /* ClassKeyword */);
+            parseExpected(84 /* ClassKeyword */);
             // We don't parse the name here in await context, instead we will report a grammar error in the checker.
             var name = parseNameOfClassDeclarationOrExpression();
             var typeParameters = parseTypeParameters();
@@ -34901,7 +35765,7 @@
                 members = createMissingList();
             }
             setAwaitContext(savedAwaitContext);
-            var node = kind === 253 /* ClassDeclaration */
+            var node = kind === 255 /* ClassDeclaration */
                 ? factory.createClassDeclaration(decorators, modifiers, name, typeParameters, heritageClauses, members)
                 : factory.createClassExpression(decorators, modifiers, name, typeParameters, heritageClauses, members);
             return withJSDoc(finishNode(node, pos), hasJSDoc);
@@ -34917,7 +35781,7 @@
                 : undefined;
         }
         function isImplementsClause() {
-            return token() === 116 /* ImplementsKeyword */ && lookAhead(nextTokenIsIdentifierOrKeyword);
+            return token() === 117 /* ImplementsKeyword */ && lookAhead(nextTokenIsIdentifierOrKeyword);
         }
         function parseHeritageClauses() {
             // ClassTail[Yield,Await] : (Modified) See 14.5
@@ -34930,7 +35794,7 @@
         function parseHeritageClause() {
             var pos = getNodePos();
             var tok = token();
-            ts.Debug.assert(tok === 93 /* ExtendsKeyword */ || tok === 116 /* ImplementsKeyword */); // isListElement() should ensure this.
+            ts.Debug.assert(tok === 94 /* ExtendsKeyword */ || tok === 117 /* ImplementsKeyword */); // isListElement() should ensure this.
             nextToken();
             var types = parseDelimitedList(7 /* HeritageClauseElement */, parseExpressionWithTypeArguments);
             return finishNode(factory.createHeritageClause(tok, types), pos);
@@ -34946,13 +35810,13 @@
                 parseBracketedList(20 /* TypeArguments */, parseType, 29 /* LessThanToken */, 31 /* GreaterThanToken */) : undefined;
         }
         function isHeritageClause() {
-            return token() === 93 /* ExtendsKeyword */ || token() === 116 /* ImplementsKeyword */;
+            return token() === 94 /* ExtendsKeyword */ || token() === 117 /* ImplementsKeyword */;
         }
         function parseClassMembers() {
             return parseList(5 /* ClassMembers */, parseClassElement);
         }
         function parseInterfaceDeclaration(pos, hasJSDoc, decorators, modifiers) {
-            parseExpected(117 /* InterfaceKeyword */);
+            parseExpected(118 /* InterfaceKeyword */);
             var name = parseIdentifier();
             var typeParameters = parseTypeParameters();
             var heritageClauses = parseHeritageClauses();
@@ -34961,11 +35825,11 @@
             return withJSDoc(finishNode(node, pos), hasJSDoc);
         }
         function parseTypeAliasDeclaration(pos, hasJSDoc, decorators, modifiers) {
-            parseExpected(149 /* TypeKeyword */);
+            parseExpected(150 /* TypeKeyword */);
             var name = parseIdentifier();
             var typeParameters = parseTypeParameters();
-            parseExpected(62 /* EqualsToken */);
-            var type = token() === 136 /* IntrinsicKeyword */ && tryParse(parseKeywordAndNoDot) || parseType();
+            parseExpected(63 /* EqualsToken */);
+            var type = token() === 137 /* IntrinsicKeyword */ && tryParse(parseKeywordAndNoDot) || parseType();
             parseSemicolon();
             var node = factory.createTypeAliasDeclaration(decorators, modifiers, name, typeParameters, type);
             return withJSDoc(finishNode(node, pos), hasJSDoc);
@@ -34982,7 +35846,7 @@
             return withJSDoc(finishNode(factory.createEnumMember(name, initializer), pos), hasJSDoc);
         }
         function parseEnumDeclaration(pos, hasJSDoc, decorators, modifiers) {
-            parseExpected(91 /* EnumKeyword */);
+            parseExpected(92 /* EnumKeyword */);
             var name = parseIdentifier();
             var members;
             if (parseExpected(18 /* OpenBraceToken */)) {
@@ -35021,7 +35885,7 @@
         function parseAmbientExternalModuleDeclaration(pos, hasJSDoc, decorators, modifiers) {
             var flags = 0;
             var name;
-            if (token() === 154 /* GlobalKeyword */) {
+            if (token() === 155 /* GlobalKeyword */) {
                 // parse 'global' as name of global scope augmentation
                 name = parseIdentifier();
                 flags |= 1024 /* GlobalAugmentation */;
@@ -35042,15 +35906,15 @@
         }
         function parseModuleDeclaration(pos, hasJSDoc, decorators, modifiers) {
             var flags = 0;
-            if (token() === 154 /* GlobalKeyword */) {
+            if (token() === 155 /* GlobalKeyword */) {
                 // global augmentation
                 return parseAmbientExternalModuleDeclaration(pos, hasJSDoc, decorators, modifiers);
             }
-            else if (parseOptional(140 /* NamespaceKeyword */)) {
+            else if (parseOptional(141 /* NamespaceKeyword */)) {
                 flags |= 16 /* Namespace */;
             }
             else {
-                parseExpected(139 /* ModuleKeyword */);
+                parseExpected(140 /* ModuleKeyword */);
                 if (token() === 10 /* StringLiteral */) {
                     return parseAmbientExternalModuleDeclaration(pos, hasJSDoc, decorators, modifiers);
                 }
@@ -35058,18 +35922,21 @@
             return parseModuleOrNamespaceDeclaration(pos, hasJSDoc, decorators, modifiers, flags);
         }
         function isExternalModuleReference() {
-            return token() === 143 /* RequireKeyword */ &&
+            return token() === 144 /* RequireKeyword */ &&
                 lookAhead(nextTokenIsOpenParen);
         }
         function nextTokenIsOpenParen() {
             return nextToken() === 20 /* OpenParenToken */;
         }
+        function nextTokenIsOpenBrace() {
+            return nextToken() === 18 /* OpenBraceToken */;
+        }
         function nextTokenIsSlash() {
             return nextToken() === 43 /* SlashToken */;
         }
         function parseNamespaceExportDeclaration(pos, hasJSDoc, decorators, modifiers) {
-            parseExpected(126 /* AsKeyword */);
-            parseExpected(140 /* NamespaceKeyword */);
+            parseExpected(127 /* AsKeyword */);
+            parseExpected(141 /* NamespaceKeyword */);
             var name = parseIdentifier();
             parseSemicolon();
             var node = factory.createNamespaceExportDeclaration(name);
@@ -35079,7 +35946,7 @@
             return withJSDoc(finishNode(node, pos), hasJSDoc);
         }
         function parseImportDeclarationOrImportEqualsDeclaration(pos, hasJSDoc, decorators, modifiers) {
-            parseExpected(99 /* ImportKeyword */);
+            parseExpected(100 /* ImportKeyword */);
             var afterImportPos = scanner.getStartPos();
             // We don't parse the identifier here in await context, instead we will report a grammar error in the checker.
             var identifier;
@@ -35087,7 +35954,7 @@
                 identifier = parseIdentifier();
             }
             var isTypeOnly = false;
-            if (token() !== 153 /* FromKeyword */ &&
+            if (token() !== 154 /* FromKeyword */ &&
                 (identifier === null || identifier === void 0 ? void 0 : identifier.escapedText) === "type" &&
                 (isIdentifier() || tokenAfterImportDefinitelyProducesImportDeclaration())) {
                 isTypeOnly = true;
@@ -35105,7 +35972,7 @@
                 token() === 18 /* OpenBraceToken */ // import {
             ) {
                 importClause = parseImportClause(identifier, afterImportPos, isTypeOnly);
-                parseExpected(153 /* FromKeyword */);
+                parseExpected(154 /* FromKeyword */);
             }
             var moduleSpecifier = parseModuleSpecifier();
             parseSemicolon();
@@ -35118,10 +35985,10 @@
         function tokenAfterImportedIdentifierDefinitelyProducesImportDeclaration() {
             // In `import id ___`, the current token decides whether to produce
             // an ImportDeclaration or ImportEqualsDeclaration.
-            return token() === 27 /* CommaToken */ || token() === 153 /* FromKeyword */;
+            return token() === 27 /* CommaToken */ || token() === 154 /* FromKeyword */;
         }
         function parseImportEqualsDeclaration(pos, hasJSDoc, decorators, modifiers, identifier, isTypeOnly) {
-            parseExpected(62 /* EqualsToken */);
+            parseExpected(63 /* EqualsToken */);
             var moduleReference = parseModuleReference();
             parseSemicolon();
             var node = factory.createImportEqualsDeclaration(decorators, modifiers, isTypeOnly, identifier, moduleReference);
@@ -35140,7 +36007,7 @@
             var namedBindings;
             if (!identifier ||
                 parseOptional(27 /* CommaToken */)) {
-                namedBindings = token() === 41 /* AsteriskToken */ ? parseNamespaceImport() : parseNamedImportsOrExports(265 /* NamedImports */);
+                namedBindings = token() === 41 /* AsteriskToken */ ? parseNamespaceImport() : parseNamedImportsOrExports(267 /* NamedImports */);
             }
             return finishNode(factory.createImportClause(isTypeOnly, identifier, namedBindings), pos);
         }
@@ -35151,7 +36018,7 @@
         }
         function parseExternalModuleReference() {
             var pos = getNodePos();
-            parseExpected(143 /* RequireKeyword */);
+            parseExpected(144 /* RequireKeyword */);
             parseExpected(20 /* OpenParenToken */);
             var expression = parseModuleSpecifier();
             parseExpected(21 /* CloseParenToken */);
@@ -35175,7 +36042,7 @@
             //  * as ImportedBinding
             var pos = getNodePos();
             parseExpected(41 /* AsteriskToken */);
-            parseExpected(126 /* AsKeyword */);
+            parseExpected(127 /* AsKeyword */);
             var name = parseIdentifier();
             return finishNode(factory.createNamespaceImport(name), pos);
         }
@@ -35188,16 +36055,16 @@
             // ImportsList:
             //  ImportSpecifier
             //  ImportsList, ImportSpecifier
-            var node = kind === 265 /* NamedImports */
+            var node = kind === 267 /* NamedImports */
                 ? factory.createNamedImports(parseBracketedList(23 /* ImportOrExportSpecifiers */, parseImportSpecifier, 18 /* OpenBraceToken */, 19 /* CloseBraceToken */))
                 : factory.createNamedExports(parseBracketedList(23 /* ImportOrExportSpecifiers */, parseExportSpecifier, 18 /* OpenBraceToken */, 19 /* CloseBraceToken */));
             return finishNode(node, pos);
         }
         function parseExportSpecifier() {
-            return parseImportOrExportSpecifier(271 /* ExportSpecifier */);
+            return parseImportOrExportSpecifier(273 /* ExportSpecifier */);
         }
         function parseImportSpecifier() {
-            return parseImportOrExportSpecifier(266 /* ImportSpecifier */);
+            return parseImportOrExportSpecifier(268 /* ImportSpecifier */);
         }
         function parseImportOrExportSpecifier(kind) {
             var pos = getNodePos();
@@ -35213,9 +36080,9 @@
             var identifierName = parseIdentifierName();
             var propertyName;
             var name;
-            if (token() === 126 /* AsKeyword */) {
+            if (token() === 127 /* AsKeyword */) {
                 propertyName = identifierName;
-                parseExpected(126 /* AsKeyword */);
+                parseExpected(127 /* AsKeyword */);
                 checkIdentifierIsKeyword = ts.isKeyword(token()) && !isIdentifier();
                 checkIdentifierStart = scanner.getTokenPos();
                 checkIdentifierEnd = scanner.getTextPos();
@@ -35224,10 +36091,10 @@
             else {
                 name = identifierName;
             }
-            if (kind === 266 /* ImportSpecifier */ && checkIdentifierIsKeyword) {
+            if (kind === 268 /* ImportSpecifier */ && checkIdentifierIsKeyword) {
                 parseErrorAt(checkIdentifierStart, checkIdentifierEnd, ts.Diagnostics.Identifier_expected);
             }
-            var node = kind === 266 /* ImportSpecifier */
+            var node = kind === 268 /* ImportSpecifier */
                 ? factory.createImportSpecifier(propertyName, name)
                 : factory.createExportSpecifier(propertyName, name);
             return finishNode(node, pos);
@@ -35240,22 +36107,22 @@
             setAwaitContext(/*value*/ true);
             var exportClause;
             var moduleSpecifier;
-            var isTypeOnly = parseOptional(149 /* TypeKeyword */);
+            var isTypeOnly = parseOptional(150 /* TypeKeyword */);
             var namespaceExportPos = getNodePos();
             if (parseOptional(41 /* AsteriskToken */)) {
-                if (parseOptional(126 /* AsKeyword */)) {
+                if (parseOptional(127 /* AsKeyword */)) {
                     exportClause = parseNamespaceExport(namespaceExportPos);
                 }
-                parseExpected(153 /* FromKeyword */);
+                parseExpected(154 /* FromKeyword */);
                 moduleSpecifier = parseModuleSpecifier();
             }
             else {
-                exportClause = parseNamedImportsOrExports(269 /* NamedExports */);
+                exportClause = parseNamedImportsOrExports(271 /* NamedExports */);
                 // It is not uncommon to accidentally omit the 'from' keyword. Additionally, in editing scenarios,
                 // the 'from' keyword can be parsed as a named export when the export clause is unterminated (i.e. `export { from "moduleName";`)
                 // If we don't have a 'from' keyword, see if we have a string literal such that ASI won't take effect.
-                if (token() === 153 /* FromKeyword */ || (token() === 10 /* StringLiteral */ && !scanner.hasPrecedingLineBreak())) {
-                    parseExpected(153 /* FromKeyword */);
+                if (token() === 154 /* FromKeyword */ || (token() === 10 /* StringLiteral */ && !scanner.hasPrecedingLineBreak())) {
+                    parseExpected(154 /* FromKeyword */);
                     moduleSpecifier = parseModuleSpecifier();
                 }
             }
@@ -35268,11 +36135,11 @@
             var savedAwaitContext = inAwaitContext();
             setAwaitContext(/*value*/ true);
             var isExportEquals;
-            if (parseOptional(62 /* EqualsToken */)) {
+            if (parseOptional(63 /* EqualsToken */)) {
                 isExportEquals = true;
             }
             else {
-                parseExpected(87 /* DefaultKeyword */);
+                parseExpected(88 /* DefaultKeyword */);
             }
             var expression = parseAssignmentExpressionOrHigher();
             parseSemicolon();
@@ -35288,7 +36155,7 @@
                     getImportMetaIfNecessary(sourceFile);
         }
         function isAnExternalModuleIndicatorNode(node) {
-            return hasModifierOfKind(node, 92 /* ExportKeyword */)
+            return hasModifierOfKind(node, 93 /* ExportKeyword */)
                 || ts.isImportEqualsDeclaration(node) && ts.isExternalModuleReference(node.moduleReference)
                 || ts.isImportDeclaration(node)
                 || ts.isExportAssignment(node)
@@ -35307,7 +36174,7 @@
             return ts.some(node.modifiers, function (m) { return m.kind === kind; });
         }
         function isImportMeta(node) {
-            return ts.isMetaProperty(node) && node.keywordToken === 99 /* ImportKeyword */ && node.name.escapedText === "meta";
+            return ts.isMetaProperty(node) && node.keywordToken === 100 /* ImportKeyword */ && node.name.escapedText === "meta";
         }
         var ParsingContext;
         (function (ParsingContext) {
@@ -35375,7 +36242,13 @@
             function parseJSDocNameReference() {
                 var pos = getNodePos();
                 var hasBrace = parseOptional(18 /* OpenBraceToken */);
+                var p2 = getNodePos();
                 var entityName = parseEntityName(/* allowReservedWords*/ false);
+                while (token() === 80 /* PrivateIdentifier */) {
+                    reScanHashToken(); // rescan #id as # id
+                    nextTokenJSDoc(); // then skip the #
+                    entityName = finishNode(factory.createJSDocMemberName(entityName, parseIdentifier()), p2);
+                }
                 if (hasBrace) {
                     parseExpectedJSDoc(19 /* CloseBraceToken */);
                 }
@@ -35804,28 +36677,44 @@
                     return next === 5 /* WhitespaceTrivia */ || next === 4 /* NewLineTrivia */;
                 }
                 function parseJSDocLink(start) {
-                    if (!tryParse(parseJSDocLinkPrefix)) {
+                    var linkType = tryParse(parseJSDocLinkPrefix);
+                    if (!linkType) {
                         return undefined;
                     }
                     nextTokenJSDoc(); // start at token after link, then skip any whitespace
                     skipWhitespace();
                     // parseEntityName logs an error for non-identifier, so create a MissingNode ourselves to avoid the error
+                    var p2 = getNodePos();
                     var name = ts.tokenIsIdentifierOrKeyword(token())
                         ? parseEntityName(/*allowReservedWords*/ true)
                         : undefined;
+                    if (name) {
+                        while (token() === 80 /* PrivateIdentifier */) {
+                            reScanHashToken(); // rescan #id as # id
+                            nextTokenJSDoc(); // then skip the #
+                            name = finishNode(factory.createJSDocMemberName(name, parseIdentifier()), p2);
+                        }
+                    }
                     var text = [];
                     while (token() !== 19 /* CloseBraceToken */ && token() !== 4 /* NewLineTrivia */ && token() !== 1 /* EndOfFileToken */) {
                         text.push(scanner.getTokenText());
                         nextTokenJSDoc();
                     }
-                    return finishNode(factory.createJSDocLink(name, text.join("")), start, scanner.getTextPos());
+                    var create = linkType === "link" ? factory.createJSDocLink
+                        : linkType === "linkcode" ? factory.createJSDocLinkCode
+                            : factory.createJSDocLinkPlain;
+                    return finishNode(create(name, text.join("")), start, scanner.getTextPos());
                 }
                 function parseJSDocLinkPrefix() {
                     skipWhitespaceOrAsterisk();
-                    return token() === 18 /* OpenBraceToken */
+                    if (token() === 18 /* OpenBraceToken */
                         && nextTokenJSDoc() === 59 /* AtToken */
-                        && ts.tokenIsIdentifierOrKeyword(nextTokenJSDoc())
-                        && scanner.getTokenValue() === "link";
+                        && ts.tokenIsIdentifierOrKeyword(nextTokenJSDoc())) {
+                        var kind = scanner.getTokenValue();
+                        if (kind === "link" || kind === "linkcode" || kind === "linkplain") {
+                            return kind;
+                        }
+                    }
                 }
                 function parseUnknownTag(start, tagName, indent, indentText) {
                     return finishNode(factory.createJSDocUnknownTag(tagName, parseTrailingTagComments(start, getNodePos(), indent, indentText)), start);
@@ -35862,7 +36751,7 @@
                     if (isBracketed) {
                         skipWhitespace();
                         // May have an optional default, e.g. '[foo = 42]'
-                        if (parseOptionalToken(62 /* EqualsToken */)) {
+                        if (parseOptionalToken(63 /* EqualsToken */)) {
                             parseExpression();
                         }
                         parseExpected(23 /* CloseBracketToken */);
@@ -35871,9 +36760,9 @@
                 }
                 function isObjectOrObjectArrayTypeReference(node) {
                     switch (node.kind) {
-                        case 145 /* ObjectKeyword */:
+                        case 146 /* ObjectKeyword */:
                             return true;
-                        case 179 /* ArrayType */:
+                        case 181 /* ArrayType */:
                             return isObjectOrObjectArrayTypeReference(node.elementType);
                         default:
                             return ts.isTypeReferenceNode(node) && ts.isIdentifier(node.typeName) && node.typeName.escapedText === "Object" && !node.typeArguments;
@@ -35905,12 +36794,12 @@
                         var child = void 0;
                         var children = void 0;
                         while (child = tryParse(function () { return parseChildParameterOrPropertyTag(target, indent, name); })) {
-                            if (child.kind === 330 /* JSDocParameterTag */ || child.kind === 337 /* JSDocPropertyTag */) {
+                            if (child.kind === 335 /* JSDocParameterTag */ || child.kind === 342 /* JSDocPropertyTag */) {
                                 children = ts.append(children, child);
                             }
                         }
                         if (children) {
-                            var literal = finishNode(factory.createJSDocTypeLiteral(children, typeExpression.type.kind === 179 /* ArrayType */), pos);
+                            var literal = finishNode(factory.createJSDocTypeLiteral(children, typeExpression.type.kind === 181 /* ArrayType */), pos);
                             return finishNode(factory.createJSDocTypeExpression(literal), pos);
                         }
                     }
@@ -36027,7 +36916,7 @@
                         var hasChildren = false;
                         while (child = tryParse(function () { return parseChildPropertyTag(indent); })) {
                             hasChildren = true;
-                            if (child.kind === 333 /* JSDocTypeTag */) {
+                            if (child.kind === 338 /* JSDocTypeTag */) {
                                 if (childTypeTag) {
                                     parseErrorAtCurrentToken(ts.Diagnostics.A_JSDoc_typedef_comment_may_not_contain_multiple_type_tags);
                                     var lastError = ts.lastOrUndefined(parseDiagnostics);
@@ -36045,7 +36934,7 @@
                             }
                         }
                         if (hasChildren) {
-                            var isArrayType = typeExpression && typeExpression.type.kind === 179 /* ArrayType */;
+                            var isArrayType = typeExpression && typeExpression.type.kind === 181 /* ArrayType */;
                             var jsdocTypeLiteral = factory.createJSDocTypeLiteral(jsDocPropertyTags, isArrayType);
                             typeExpression = childTypeTag && childTypeTag.typeExpression && !isObjectOrObjectArrayTypeReference(childTypeTag.typeExpression.type) ?
                                 childTypeTag.typeExpression :
@@ -36098,7 +36987,7 @@
                     var returnTag = tryParse(function () {
                         if (parseOptionalJsdoc(59 /* AtToken */)) {
                             var tag = parseTag(indent);
-                            if (tag && tag.kind === 331 /* JSDocReturnTag */) {
+                            if (tag && tag.kind === 336 /* JSDocReturnTag */) {
                                 return tag;
                             }
                         }
@@ -36132,7 +37021,7 @@
                             case 59 /* AtToken */:
                                 if (canParseTag) {
                                     var child = tryParseChildTag(target, indent);
-                                    if (child && (child.kind === 330 /* JSDocParameterTag */ || child.kind === 337 /* JSDocPropertyTag */) &&
+                                    if (child && (child.kind === 335 /* JSDocParameterTag */ || child.kind === 342 /* JSDocPropertyTag */) &&
                                         target !== 4 /* CallbackParameter */ &&
                                         name && (ts.isIdentifier(child.name) || !escapedTextsEqual(name, child.name.left))) {
                                         return false;
@@ -36151,7 +37040,7 @@
                                 }
                                 seenAsterisk = true;
                                 break;
-                            case 78 /* Identifier */:
+                            case 79 /* Identifier */:
                                 canParseTag = false;
                                 break;
                             case 1 /* EndOfFileToken */:
@@ -36249,7 +37138,7 @@
                 }
                 function parseJSDocIdentifierName(message) {
                     if (!ts.tokenIsIdentifierOrKeyword(token())) {
-                        return createMissingNode(78 /* Identifier */, /*reportAtCurrentPosition*/ !message, message || ts.Diagnostics.Identifier_expected);
+                        return createMissingNode(79 /* Identifier */, /*reportAtCurrentPosition*/ !message, message || ts.Diagnostics.Identifier_expected);
                     }
                     identifierCount++;
                     var pos = scanner.getTokenPos();
@@ -36412,8 +37301,8 @@
             function visitArray(array) {
                 array._children = undefined;
                 ts.setTextRangePosEnd(array, array.pos + delta, array.end + delta);
-                for (var _i = 0, array_8 = array; _i < array_8.length; _i++) {
-                    var node = array_8[_i];
+                for (var _i = 0, array_9 = array; _i < array_9.length; _i++) {
+                    var node = array_9[_i];
                     visitNode(node);
                 }
             }
@@ -36422,7 +37311,7 @@
             switch (node.kind) {
                 case 10 /* StringLiteral */:
                 case 8 /* NumericLiteral */:
-                case 78 /* Identifier */:
+                case 79 /* Identifier */:
                     return true;
             }
             return false;
@@ -36561,8 +37450,8 @@
                     array._children = undefined;
                     // Adjust the pos or end (or both) of the intersecting array accordingly.
                     adjustIntersectingElement(array, changeStart, changeRangeOldEnd, changeRangeNewEnd, delta);
-                    for (var _i = 0, array_9 = array; _i < array_9.length; _i++) {
-                        var node = array_9[_i];
+                    for (var _i = 0, array_10 = array; _i < array_10.length; _i++) {
+                        var node = array_10[_i];
                         visitNode(node);
                     }
                     return;
@@ -36896,7 +37785,7 @@
         if (namedArgRegExCache.has(name)) {
             return namedArgRegExCache.get(name);
         }
-        var result = new RegExp("(\\s" + name + "\\s*=\\s*)('|\")(.+?)\\2", "im");
+        var result = new RegExp("(\\s" + name + "\\s*=\\s*)(?:(?:'([^']*)')|(?:\"([^\"]*)\"))", "im");
         namedArgRegExCache.set(name, result);
         return result;
     }
@@ -36920,16 +37809,17 @@
                         return; // Missing required argument, don't parse
                     }
                     else if (matchResult) {
+                        var value = matchResult[2] || matchResult[3];
                         if (arg.captureSpan) {
-                            var startPos = range.pos + matchResult.index + matchResult[1].length + matchResult[2].length;
+                            var startPos = range.pos + matchResult.index + matchResult[1].length + 1;
                             argument[arg.name] = {
-                                value: matchResult[3],
+                                value: value,
                                 pos: startPos,
-                                end: startPos + matchResult[3].length
+                                end: startPos + value.length
                             };
                         }
                         else {
-                            argument[arg.name] = matchResult[3];
+                            argument[arg.name] = value;
                         }
                     }
                 }
@@ -36945,7 +37835,7 @@
             return addPragmaForMatch(pragmas, range, 2 /* SingleLine */, singleLine);
         }
         if (range.kind === 3 /* MultiLineCommentTrivia */) {
-            var multiLinePragmaRegEx = /\s*@(\S+)\s*(.*)\s*$/gim; // Defined inline since it uses the "g" flag, which keeps a persistent index (for iterating)
+            var multiLinePragmaRegEx = /@(\S+)(\s+.*)?$/gim; // Defined inline since it uses the "g" flag, which keeps a persistent index (for iterating)
             var multiLineMatch = void 0;
             while (multiLineMatch = multiLinePragmaRegEx.exec(text)) {
                 addPragmaForMatch(pragmas, range, 4 /* MultiLine */, multiLineMatch);
@@ -36972,7 +37862,7 @@
             return {};
         if (!pragma.args)
             return {};
-        var args = text.split(/\s+/);
+        var args = ts.trimString(text).split(/\s+/);
         var argMap = {};
         for (var i = 0; i < pragma.args.length; i++) {
             var argument = pragma.args[i];
@@ -36991,10 +37881,10 @@
         if (lhs.kind !== rhs.kind) {
             return false;
         }
-        if (lhs.kind === 78 /* Identifier */) {
+        if (lhs.kind === 79 /* Identifier */) {
             return lhs.escapedText === rhs.escapedText;
         }
-        if (lhs.kind === 107 /* ThisKeyword */) {
+        if (lhs.kind === 108 /* ThisKeyword */) {
             return true;
         }
         // If we are at this statement then we must have PropertyAccessExpression and because tag name in Jsx element can only
@@ -37114,8 +38004,8 @@
                 usefsevents: ts.WatchFileKind.UseFsEvents,
                 usefseventsonparentdirectory: ts.WatchFileKind.UseFsEventsOnParentDirectory,
             })),
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Specify_strategy_for_watching_file_Colon_FixedPollingInterval_default_PriorityPollingInterval_DynamicPriorityPolling_FixedChunkSizePolling_UseFsEvents_UseFsEventsOnParentDirectory,
+            category: ts.Diagnostics.Watch_and_Build_Modes,
+            description: ts.Diagnostics.Specify_how_the_TypeScript_watch_mode_works,
         },
         {
             name: "watchDirectory",
@@ -37125,8 +38015,8 @@
                 dynamicprioritypolling: ts.WatchDirectoryKind.DynamicPriorityPolling,
                 fixedchunksizepolling: ts.WatchDirectoryKind.FixedChunkSizePolling,
             })),
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Specify_strategy_for_watching_directory_on_platforms_that_don_t_support_recursive_watching_natively_Colon_UseFsEvents_default_FixedPollingInterval_DynamicPriorityPolling_FixedChunkSizePolling,
+            category: ts.Diagnostics.Watch_and_Build_Modes,
+            description: ts.Diagnostics.Specify_how_directories_are_watched_on_systems_that_lack_recursive_file_watching_functionality,
         },
         {
             name: "fallbackPolling",
@@ -37136,13 +38026,13 @@
                 dynamicpriority: ts.PollingWatchKind.DynamicPriority,
                 fixedchunksize: ts.PollingWatchKind.FixedChunkSize,
             })),
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Specify_strategy_for_creating_a_polling_watch_when_it_fails_to_create_using_file_system_events_Colon_FixedInterval_default_PriorityInterval_DynamicPriority_FixedChunkSize,
+            category: ts.Diagnostics.Watch_and_Build_Modes,
+            description: ts.Diagnostics.Specify_what_approach_the_watcher_should_use_if_the_system_runs_out_of_native_file_watchers,
         },
         {
             name: "synchronousWatchDirectory",
             type: "boolean",
-            category: ts.Diagnostics.Advanced_Options,
+            category: ts.Diagnostics.Watch_and_Build_Modes,
             description: ts.Diagnostics.Synchronously_call_callbacks_and_update_the_state_of_directory_watchers_on_platforms_that_don_t_support_recursive_watching_natively,
         },
         {
@@ -37154,8 +38044,8 @@
                 isFilePath: true,
                 extraValidation: specToDiagnostic
             },
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Synchronously_call_callbacks_and_update_the_state_of_directory_watchers_on_platforms_that_don_t_support_recursive_watching_natively,
+            category: ts.Diagnostics.Watch_and_Build_Modes,
+            description: ts.Diagnostics.Remove_a_list_of_directories_from_the_watch_process,
         },
         {
             name: "excludeFiles",
@@ -37166,8 +38056,8 @@
                 isFilePath: true,
                 extraValidation: specToDiagnostic
             },
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Synchronously_call_callbacks_and_update_the_state_of_directory_watchers_on_platforms_that_don_t_support_recursive_watching_natively,
+            category: ts.Diagnostics.Watch_and_Build_Modes,
+            description: ts.Diagnostics.Remove_a_list_of_files_from_the_watch_mode_s_processing,
         },
     ];
     /* @internal */
@@ -37190,6 +38080,7 @@
             shortName: "w",
             type: "boolean",
             showInSimplifiedHelpView: true,
+            isCommandLineOnly: true,
             category: ts.Diagnostics.Command_line_Options,
             description: ts.Diagnostics.Watch_input_files,
         },
@@ -37197,58 +38088,67 @@
             name: "preserveWatchOutput",
             type: "boolean",
             showInSimplifiedHelpView: false,
-            category: ts.Diagnostics.Command_line_Options,
-            description: ts.Diagnostics.Whether_to_keep_outdated_console_output_in_watch_mode_instead_of_clearing_the_screen,
+            category: ts.Diagnostics.Output_Formatting,
+            description: ts.Diagnostics.Disable_wiping_the_console_in_watch_mode,
+            defaultValueDescription: "n/a"
         },
         {
             name: "listFiles",
             type: "boolean",
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Print_names_of_files_part_of_the_compilation
+            category: ts.Diagnostics.Compiler_Diagnostics,
+            description: ts.Diagnostics.Print_all_of_the_files_read_during_the_compilation,
+            defaultValueDescription: "false"
         },
         {
             name: "explainFiles",
             type: "boolean",
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Print_names_of_files_and_the_reason_they_are_part_of_the_compilation
-        }, {
+            category: ts.Diagnostics.Compiler_Diagnostics,
+            description: ts.Diagnostics.Print_files_read_during_the_compilation_including_why_it_was_included
+        },
+        {
             name: "listEmittedFiles",
             type: "boolean",
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Print_names_of_generated_files_part_of_the_compilation
+            category: ts.Diagnostics.Compiler_Diagnostics,
+            description: ts.Diagnostics.Print_the_names_of_emitted_files_after_a_compilation,
+            defaultValueDescription: "false"
         },
         {
             name: "pretty",
             type: "boolean",
             showInSimplifiedHelpView: true,
-            category: ts.Diagnostics.Command_line_Options,
-            description: ts.Diagnostics.Stylize_errors_and_messages_using_color_and_context_experimental
+            category: ts.Diagnostics.Output_Formatting,
+            description: ts.Diagnostics.Enable_color_and_formatting_in_TypeScript_s_output_to_make_compiler_errors_easier_to_read,
+            defaultValueDescription: "true"
         },
         {
             name: "traceResolution",
             type: "boolean",
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Enable_tracing_of_the_name_resolution_process
+            category: ts.Diagnostics.Compiler_Diagnostics,
+            description: ts.Diagnostics.Log_paths_used_during_the_moduleResolution_process,
+            defaultValueDescription: "false"
         },
         {
             name: "diagnostics",
             type: "boolean",
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Show_diagnostic_information
+            category: ts.Diagnostics.Compiler_Diagnostics,
+            description: ts.Diagnostics.Output_compiler_performance_information_after_building,
+            defaultValueDescription: "false"
         },
         {
             name: "extendedDiagnostics",
             type: "boolean",
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Show_verbose_diagnostic_information
+            category: ts.Diagnostics.Compiler_Diagnostics,
+            description: ts.Diagnostics.Output_more_detailed_compiler_performance_information_after_building,
+            defaultValueDescription: "false"
         },
         {
             name: "generateCpuProfile",
             type: "string",
             isFilePath: true,
             paramType: ts.Diagnostics.FILE_OR_DIRECTORY,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Generates_a_CPU_profile
+            category: ts.Diagnostics.Compiler_Diagnostics,
+            description: ts.Diagnostics.Emit_a_v8_CPU_profile_of_the_compiler_run_for_debugging,
+            defaultValueDescription: "profile.cpuprofile"
         },
         {
             name: "generateTrace",
@@ -37256,30 +38156,33 @@
             isFilePath: true,
             isCommandLineOnly: true,
             paramType: ts.Diagnostics.DIRECTORY,
-            category: ts.Diagnostics.Advanced_Options,
+            category: ts.Diagnostics.Compiler_Diagnostics,
             description: ts.Diagnostics.Generates_an_event_trace_and_a_list_of_types
         },
         {
             name: "incremental",
             shortName: "i",
             type: "boolean",
-            category: ts.Diagnostics.Basic_Options,
+            category: ts.Diagnostics.Projects,
             description: ts.Diagnostics.Enable_incremental_compilation,
-            transpileOptionValue: undefined
+            transpileOptionValue: undefined,
+            defaultValueDescription: ts.Diagnostics.false_unless_composite_is_set
         },
         {
             name: "assumeChangesOnlyAffectDirectDependencies",
             type: "boolean",
             affectsSemanticDiagnostics: true,
             affectsEmit: true,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Have_recompiles_in_incremental_and_watch_assume_that_changes_within_a_file_will_only_affect_files_directly_depending_on_it
+            category: ts.Diagnostics.Watch_and_Build_Modes,
+            description: ts.Diagnostics.Have_recompiles_in_projects_that_use_incremental_and_watch_mode_assume_that_changes_within_a_file_will_only_affect_files_directly_depending_on_it
         },
         {
             name: "locale",
             type: "string",
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.The_locale_used_when_displaying_messages_to_the_user_e_g_en_us
+            category: ts.Diagnostics.Command_line_Options,
+            isCommandLineOnly: true,
+            description: ts.Diagnostics.Set_the_language_of_the_messaging_from_TypeScript_This_does_not_affect_emit,
+            defaultValueDescription: ts.Diagnostics.Platform_specific
         },
     ];
     /* @internal */
@@ -37304,8 +38207,9 @@
         affectsEmit: true,
         paramType: ts.Diagnostics.VERSION,
         showInSimplifiedHelpView: true,
-        category: ts.Diagnostics.Basic_Options,
-        description: ts.Diagnostics.Specify_ECMAScript_target_version_Colon_ES3_default_ES5_ES2015_ES2016_ES2017_ES2018_ES2019_ES2020_ES2021_or_ESNEXT,
+        category: ts.Diagnostics.Language_and_Environment,
+        description: ts.Diagnostics.Set_the_JavaScript_language_version_for_emitted_JavaScript_and_include_compatible_library_declarations,
+        defaultValueDescription: "ES3"
     };
     var commandOptionsWithoutBuild = [
         // CommandLine only options
@@ -37352,6 +38256,7 @@
         {
             name: "showConfig",
             type: "boolean",
+            showInSimplifiedHelpView: true,
             category: ts.Diagnostics.Command_line_Options,
             isCommandLineOnly: true,
             description: ts.Diagnostics.Print_the_final_configuration_instead_of_building
@@ -37385,8 +38290,8 @@
             affectsEmit: true,
             paramType: ts.Diagnostics.KIND,
             showInSimplifiedHelpView: true,
-            category: ts.Diagnostics.Basic_Options,
-            description: ts.Diagnostics.Specify_module_code_generation_Colon_none_commonjs_amd_system_umd_es2015_es2020_or_ESNext,
+            category: ts.Diagnostics.Modules,
+            description: ts.Diagnostics.Specify_what_module_code_is_generated,
         },
         {
             name: "lib",
@@ -37395,10 +38300,10 @@
                 name: "lib",
                 type: ts.libMap
             },
-            affectsModuleResolution: true,
+            affectsProgramStructure: true,
             showInSimplifiedHelpView: true,
-            category: ts.Diagnostics.Basic_Options,
-            description: ts.Diagnostics.Specify_library_files_to_be_included_in_the_compilation,
+            category: ts.Diagnostics.Language_and_Environment,
+            description: ts.Diagnostics.Specify_a_set_of_bundled_library_declaration_files_that_describe_the_target_runtime_environment,
             transpileOptionValue: undefined
         },
         {
@@ -37406,14 +38311,17 @@
             type: "boolean",
             affectsModuleResolution: true,
             showInSimplifiedHelpView: true,
-            category: ts.Diagnostics.Basic_Options,
-            description: ts.Diagnostics.Allow_javascript_files_to_be_compiled
+            category: ts.Diagnostics.JavaScript_Support,
+            description: ts.Diagnostics.Allow_JavaScript_files_to_be_a_part_of_your_program_Use_the_checkJS_option_to_get_errors_from_these_files,
+            defaultValueDescription: "false"
         },
         {
             name: "checkJs",
             type: "boolean",
-            category: ts.Diagnostics.Basic_Options,
-            description: ts.Diagnostics.Report_errors_in_js_files
+            showInSimplifiedHelpView: true,
+            category: ts.Diagnostics.JavaScript_Support,
+            description: ts.Diagnostics.Enable_error_reporting_in_type_checked_JavaScript_files,
+            defaultValueDescription: "false"
         },
         {
             name: "jsx",
@@ -37423,8 +38331,9 @@
             affectsModuleResolution: true,
             paramType: ts.Diagnostics.KIND,
             showInSimplifiedHelpView: true,
-            category: ts.Diagnostics.Basic_Options,
-            description: ts.Diagnostics.Specify_JSX_code_generation_Colon_preserve_react_native_react_react_jsx_or_react_jsxdev,
+            category: ts.Diagnostics.Language_and_Environment,
+            description: ts.Diagnostics.Specify_what_JSX_code_is_generated,
+            defaultValueDescription: "undefined"
         },
         {
             name: "declaration",
@@ -37432,34 +38341,39 @@
             type: "boolean",
             affectsEmit: true,
             showInSimplifiedHelpView: true,
-            category: ts.Diagnostics.Basic_Options,
-            description: ts.Diagnostics.Generates_corresponding_d_ts_file,
-            transpileOptionValue: undefined
+            category: ts.Diagnostics.Emit,
+            transpileOptionValue: undefined,
+            description: ts.Diagnostics.Generate_d_ts_files_from_TypeScript_and_JavaScript_files_in_your_project,
+            defaultValueDescription: ts.Diagnostics.false_unless_composite_is_set,
         },
         {
             name: "declarationMap",
             type: "boolean",
             affectsEmit: true,
             showInSimplifiedHelpView: true,
-            category: ts.Diagnostics.Basic_Options,
-            description: ts.Diagnostics.Generates_a_sourcemap_for_each_corresponding_d_ts_file,
-            transpileOptionValue: undefined
+            category: ts.Diagnostics.Emit,
+            transpileOptionValue: undefined,
+            defaultValueDescription: "false",
+            description: ts.Diagnostics.Create_sourcemaps_for_d_ts_files
         },
         {
             name: "emitDeclarationOnly",
             type: "boolean",
             affectsEmit: true,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Only_emit_d_ts_declaration_files,
-            transpileOptionValue: undefined
+            showInSimplifiedHelpView: true,
+            category: ts.Diagnostics.Emit,
+            description: ts.Diagnostics.Only_output_d_ts_files_and_not_JavaScript_files,
+            transpileOptionValue: undefined,
+            defaultValueDescription: "false",
         },
         {
             name: "sourceMap",
             type: "boolean",
             affectsEmit: true,
             showInSimplifiedHelpView: true,
-            category: ts.Diagnostics.Basic_Options,
-            description: ts.Diagnostics.Generates_corresponding_map_file,
+            category: ts.Diagnostics.Emit,
+            defaultValueDescription: "false",
+            description: ts.Diagnostics.Create_source_map_files_for_emitted_JavaScript_files,
         },
         {
             name: "outFile",
@@ -37468,9 +38382,10 @@
             isFilePath: true,
             paramType: ts.Diagnostics.FILE,
             showInSimplifiedHelpView: true,
-            category: ts.Diagnostics.Basic_Options,
-            description: ts.Diagnostics.Concatenate_and_emit_output_to_single_file,
-            transpileOptionValue: undefined
+            category: ts.Diagnostics.Emit,
+            description: ts.Diagnostics.Specify_a_file_that_bundles_all_outputs_into_one_JavaScript_file_If_declaration_is_true_also_designates_a_file_that_bundles_all_d_ts_output,
+            transpileOptionValue: undefined,
+            defaultValueDescription: "n/a"
         },
         {
             name: "outDir",
@@ -37479,8 +38394,9 @@
             isFilePath: true,
             paramType: ts.Diagnostics.DIRECTORY,
             showInSimplifiedHelpView: true,
-            category: ts.Diagnostics.Basic_Options,
-            description: ts.Diagnostics.Redirect_output_structure_to_the_directory,
+            category: ts.Diagnostics.Emit,
+            description: ts.Diagnostics.Specify_an_output_folder_for_all_emitted_files,
+            defaultValueDescription: "n/a"
         },
         {
             name: "rootDir",
@@ -37488,17 +38404,19 @@
             affectsEmit: true,
             isFilePath: true,
             paramType: ts.Diagnostics.LOCATION,
-            category: ts.Diagnostics.Basic_Options,
-            description: ts.Diagnostics.Specify_the_root_directory_of_input_files_Use_to_control_the_output_directory_structure_with_outDir,
+            category: ts.Diagnostics.Modules,
+            description: ts.Diagnostics.Specify_the_root_folder_within_your_source_files,
+            defaultValueDescription: ts.Diagnostics.Computed_from_the_list_of_input_files
         },
         {
             name: "composite",
             type: "boolean",
             affectsEmit: true,
             isTSConfigOnly: true,
-            category: ts.Diagnostics.Basic_Options,
-            description: ts.Diagnostics.Enable_project_compilation,
-            transpileOptionValue: undefined
+            category: ts.Diagnostics.Projects,
+            transpileOptionValue: undefined,
+            defaultValueDescription: "false",
+            description: ts.Diagnostics.Enable_constraints_that_allow_a_TypeScript_project_to_be_used_with_project_references,
         },
         {
             name: "tsBuildInfoFile",
@@ -37506,32 +38424,36 @@
             affectsEmit: true,
             isFilePath: true,
             paramType: ts.Diagnostics.FILE,
-            category: ts.Diagnostics.Basic_Options,
-            description: ts.Diagnostics.Specify_file_to_store_incremental_compilation_information,
-            transpileOptionValue: undefined
+            category: ts.Diagnostics.Projects,
+            transpileOptionValue: undefined,
+            defaultValueDescription: ".tsbuildinfo",
+            description: ts.Diagnostics.Specify_the_folder_for_tsbuildinfo_incremental_compilation_files,
         },
         {
             name: "removeComments",
             type: "boolean",
             affectsEmit: true,
             showInSimplifiedHelpView: true,
-            category: ts.Diagnostics.Basic_Options,
-            description: ts.Diagnostics.Do_not_emit_comments_to_output,
+            category: ts.Diagnostics.Emit,
+            defaultValueDescription: "false",
+            description: ts.Diagnostics.Disable_emitting_comments,
         },
         {
             name: "noEmit",
             type: "boolean",
             showInSimplifiedHelpView: true,
-            category: ts.Diagnostics.Basic_Options,
-            description: ts.Diagnostics.Do_not_emit_outputs,
-            transpileOptionValue: undefined
+            category: ts.Diagnostics.Emit,
+            description: ts.Diagnostics.Disable_emitting_files_from_a_compilation,
+            transpileOptionValue: undefined,
+            defaultValueDescription: "false"
         },
         {
             name: "importHelpers",
             type: "boolean",
             affectsEmit: true,
-            category: ts.Diagnostics.Basic_Options,
-            description: ts.Diagnostics.Import_emit_helpers_from_tslib
+            category: ts.Diagnostics.Emit,
+            description: ts.Diagnostics.Allow_importing_helper_functions_from_tslib_once_per_project_instead_of_including_them_per_file,
+            defaultValueDescription: "false"
         },
         {
             name: "importsNotUsedAsValues",
@@ -37542,22 +38464,24 @@
             })),
             affectsEmit: true,
             affectsSemanticDiagnostics: true,
-            category: ts.Diagnostics.Advanced_Options,
+            category: ts.Diagnostics.Emit,
             description: ts.Diagnostics.Specify_emit_Slashchecking_behavior_for_imports_that_are_only_used_for_types
         },
         {
             name: "downlevelIteration",
             type: "boolean",
             affectsEmit: true,
-            category: ts.Diagnostics.Basic_Options,
-            description: ts.Diagnostics.Provide_full_support_for_iterables_in_for_of_spread_and_destructuring_when_targeting_ES5_or_ES3
+            category: ts.Diagnostics.Emit,
+            description: ts.Diagnostics.Emit_more_compliant_but_verbose_and_less_performant_JavaScript_for_iteration,
+            defaultValueDescription: "false"
         },
         {
             name: "isolatedModules",
             type: "boolean",
-            category: ts.Diagnostics.Basic_Options,
-            description: ts.Diagnostics.Transpile_each_file_as_a_separate_module_similar_to_ts_transpileModule,
-            transpileOptionValue: true
+            category: ts.Diagnostics.Interop_Constraints,
+            description: ts.Diagnostics.Ensure_that_each_file_can_be_safely_transpiled_without_relying_on_other_imports,
+            transpileOptionValue: true,
+            defaultValueDescription: "false"
         },
         // Strict Type Checks
         {
@@ -37566,127 +38490,140 @@
             // Though this affects semantic diagnostics, affectsSemanticDiagnostics is not set here
             // The value of each strictFlag depends on own strictFlag value or this and never accessed directly.
             showInSimplifiedHelpView: true,
-            category: ts.Diagnostics.Strict_Type_Checking_Options,
-            description: ts.Diagnostics.Enable_all_strict_type_checking_options
+            category: ts.Diagnostics.Type_Checking,
+            description: ts.Diagnostics.Enable_all_strict_type_checking_options,
+            defaultValueDescription: "false"
         },
         {
             name: "noImplicitAny",
             type: "boolean",
             affectsSemanticDiagnostics: true,
             strictFlag: true,
-            showInSimplifiedHelpView: true,
-            category: ts.Diagnostics.Strict_Type_Checking_Options,
-            description: ts.Diagnostics.Raise_error_on_expressions_and_declarations_with_an_implied_any_type
+            category: ts.Diagnostics.Type_Checking,
+            description: ts.Diagnostics.Enable_error_reporting_for_expressions_and_declarations_with_an_implied_any_type,
+            defaultValueDescription: ts.Diagnostics.false_unless_strict_is_set
         },
         {
             name: "strictNullChecks",
             type: "boolean",
             affectsSemanticDiagnostics: true,
             strictFlag: true,
-            showInSimplifiedHelpView: true,
-            category: ts.Diagnostics.Strict_Type_Checking_Options,
-            description: ts.Diagnostics.Enable_strict_null_checks
+            category: ts.Diagnostics.Type_Checking,
+            description: ts.Diagnostics.When_type_checking_take_into_account_null_and_undefined,
+            defaultValueDescription: ts.Diagnostics.false_unless_strict_is_set
         },
         {
             name: "strictFunctionTypes",
             type: "boolean",
-            affectsSemanticDiagnostics: true,
             strictFlag: true,
-            showInSimplifiedHelpView: true,
-            category: ts.Diagnostics.Strict_Type_Checking_Options,
-            description: ts.Diagnostics.Enable_strict_checking_of_function_types
+            category: ts.Diagnostics.Type_Checking,
+            description: ts.Diagnostics.When_assigning_functions_check_to_ensure_parameters_and_the_return_values_are_subtype_compatible,
+            defaultValueDescription: ts.Diagnostics.false_unless_strict_is_set
         },
         {
             name: "strictBindCallApply",
             type: "boolean",
             strictFlag: true,
-            showInSimplifiedHelpView: true,
-            category: ts.Diagnostics.Strict_Type_Checking_Options,
-            description: ts.Diagnostics.Enable_strict_bind_call_and_apply_methods_on_functions
+            category: ts.Diagnostics.Type_Checking,
+            description: ts.Diagnostics.Check_that_the_arguments_for_bind_call_and_apply_methods_match_the_original_function,
+            defaultValueDescription: ts.Diagnostics.false_unless_strict_is_set
         },
         {
             name: "strictPropertyInitialization",
             type: "boolean",
             affectsSemanticDiagnostics: true,
             strictFlag: true,
-            showInSimplifiedHelpView: true,
-            category: ts.Diagnostics.Strict_Type_Checking_Options,
-            description: ts.Diagnostics.Enable_strict_checking_of_property_initialization_in_classes
+            category: ts.Diagnostics.Type_Checking,
+            description: ts.Diagnostics.Check_for_class_properties_that_are_declared_but_not_set_in_the_constructor,
+            defaultValueDescription: ts.Diagnostics.false_unless_strict_is_set
         },
         {
             name: "noImplicitThis",
             type: "boolean",
             affectsSemanticDiagnostics: true,
             strictFlag: true,
-            showInSimplifiedHelpView: true,
-            category: ts.Diagnostics.Strict_Type_Checking_Options,
-            description: ts.Diagnostics.Raise_error_on_this_expressions_with_an_implied_any_type,
+            category: ts.Diagnostics.Type_Checking,
+            description: ts.Diagnostics.Enable_error_reporting_when_this_is_given_the_type_any,
+            defaultValueDescription: ts.Diagnostics.false_unless_strict_is_set
+        },
+        {
+            name: "useUnknownInCatchVariables",
+            type: "boolean",
+            affectsSemanticDiagnostics: true,
+            strictFlag: true,
+            category: ts.Diagnostics.Type_Checking,
+            description: ts.Diagnostics.Type_catch_clause_variables_as_unknown_instead_of_any,
         },
         {
             name: "alwaysStrict",
             type: "boolean",
             affectsSourceFile: true,
             strictFlag: true,
-            showInSimplifiedHelpView: true,
-            category: ts.Diagnostics.Strict_Type_Checking_Options,
-            description: ts.Diagnostics.Parse_in_strict_mode_and_emit_use_strict_for_each_source_file
+            category: ts.Diagnostics.Type_Checking,
+            description: ts.Diagnostics.Ensure_use_strict_is_always_emitted,
+            defaultValueDescription: ts.Diagnostics.false_unless_strict_is_set
         },
         // Additional Checks
         {
             name: "noUnusedLocals",
             type: "boolean",
             affectsSemanticDiagnostics: true,
-            showInSimplifiedHelpView: true,
-            category: ts.Diagnostics.Additional_Checks,
-            description: ts.Diagnostics.Report_errors_on_unused_locals,
+            category: ts.Diagnostics.Type_Checking,
+            description: ts.Diagnostics.Enable_error_reporting_when_a_local_variables_aren_t_read,
+            defaultValueDescription: "false"
         },
         {
             name: "noUnusedParameters",
             type: "boolean",
             affectsSemanticDiagnostics: true,
-            showInSimplifiedHelpView: true,
-            category: ts.Diagnostics.Additional_Checks,
-            description: ts.Diagnostics.Report_errors_on_unused_parameters,
+            category: ts.Diagnostics.Type_Checking,
+            description: ts.Diagnostics.Raise_an_error_when_a_function_parameter_isn_t_read,
+            defaultValueDescription: "false"
+        },
+        {
+            name: "exactOptionalPropertyTypes",
+            type: "boolean",
+            affectsSemanticDiagnostics: true,
+            category: ts.Diagnostics.Type_Checking,
+            description: ts.Diagnostics.Interpret_optional_property_types_as_written_rather_than_adding_undefined
         },
         {
             name: "noImplicitReturns",
             type: "boolean",
             affectsSemanticDiagnostics: true,
-            showInSimplifiedHelpView: true,
-            category: ts.Diagnostics.Additional_Checks,
-            description: ts.Diagnostics.Report_error_when_not_all_code_paths_in_function_return_a_value
+            category: ts.Diagnostics.Type_Checking,
+            description: ts.Diagnostics.Enable_error_reporting_for_codepaths_that_do_not_explicitly_return_in_a_function,
+            defaultValueDescription: "false"
         },
         {
             name: "noFallthroughCasesInSwitch",
             type: "boolean",
             affectsBindDiagnostics: true,
             affectsSemanticDiagnostics: true,
-            showInSimplifiedHelpView: true,
-            category: ts.Diagnostics.Additional_Checks,
-            description: ts.Diagnostics.Report_errors_for_fallthrough_cases_in_switch_statement
+            category: ts.Diagnostics.Type_Checking,
+            description: ts.Diagnostics.Enable_error_reporting_for_fallthrough_cases_in_switch_statements
         },
         {
             name: "noUncheckedIndexedAccess",
             type: "boolean",
             affectsSemanticDiagnostics: true,
-            showInSimplifiedHelpView: false,
-            category: ts.Diagnostics.Additional_Checks,
+            category: ts.Diagnostics.Type_Checking,
             description: ts.Diagnostics.Include_undefined_in_index_signature_results
         },
         {
             name: "noImplicitOverride",
             type: "boolean",
             affectsSemanticDiagnostics: true,
-            showInSimplifiedHelpView: false,
-            category: ts.Diagnostics.Additional_Checks,
+            category: ts.Diagnostics.Type_Checking,
             description: ts.Diagnostics.Ensure_overriding_members_in_derived_classes_are_marked_with_an_override_modifier
         },
         {
             name: "noPropertyAccessFromIndexSignature",
             type: "boolean",
             showInSimplifiedHelpView: false,
-            category: ts.Diagnostics.Additional_Checks,
-            description: ts.Diagnostics.Require_undeclared_properties_from_index_signatures_to_use_element_accesses
+            category: ts.Diagnostics.Type_Checking,
+            description: ts.Diagnostics.Enforces_using_indexed_accessors_for_keys_declared_using_an_indexed_type,
+            defaultValueDescription: "false"
         },
         // Module Resolution
         {
@@ -37697,16 +38634,17 @@
             })),
             affectsModuleResolution: true,
             paramType: ts.Diagnostics.STRATEGY,
-            category: ts.Diagnostics.Module_Resolution_Options,
-            description: ts.Diagnostics.Specify_module_resolution_strategy_Colon_node_Node_js_or_classic_TypeScript_pre_1_6,
+            category: ts.Diagnostics.Modules,
+            description: ts.Diagnostics.Specify_how_TypeScript_looks_up_a_file_from_a_given_module_specifier,
+            defaultValueDescription: ts.Diagnostics.module_AMD_or_UMD_or_System_or_ES6_then_Classic_Otherwise_Node
         },
         {
             name: "baseUrl",
             type: "string",
             affectsModuleResolution: true,
             isFilePath: true,
-            category: ts.Diagnostics.Module_Resolution_Options,
-            description: ts.Diagnostics.Base_directory_to_resolve_non_absolute_module_names
+            category: ts.Diagnostics.Modules,
+            description: ts.Diagnostics.Specify_the_base_directory_to_resolve_non_relative_module_names
         },
         {
             // this option can only be specified in tsconfig.json
@@ -37715,8 +38653,8 @@
             type: "object",
             affectsModuleResolution: true,
             isTSConfigOnly: true,
-            category: ts.Diagnostics.Module_Resolution_Options,
-            description: ts.Diagnostics.A_series_of_entries_which_re_map_imports_to_lookup_locations_relative_to_the_baseUrl,
+            category: ts.Diagnostics.Modules,
+            description: ts.Diagnostics.Specify_a_set_of_entries_that_re_map_imports_to_additional_lookup_locations,
             transpileOptionValue: undefined
         },
         {
@@ -37731,9 +38669,10 @@
                 isFilePath: true
             },
             affectsModuleResolution: true,
-            category: ts.Diagnostics.Module_Resolution_Options,
-            description: ts.Diagnostics.List_of_root_folders_whose_combined_content_represents_the_structure_of_the_project_at_runtime,
-            transpileOptionValue: undefined
+            category: ts.Diagnostics.Modules,
+            description: ts.Diagnostics.Allow_multiple_folders_to_be_treated_as_one_when_resolving_modules,
+            transpileOptionValue: undefined,
+            defaultValueDescription: ts.Diagnostics.Computed_from_the_list_of_input_files
         },
         {
             name: "typeRoots",
@@ -37744,8 +38683,8 @@
                 isFilePath: true
             },
             affectsModuleResolution: true,
-            category: ts.Diagnostics.Module_Resolution_Options,
-            description: ts.Diagnostics.List_of_folders_to_include_type_definitions_from
+            category: ts.Diagnostics.Modules,
+            description: ts.Diagnostics.Specify_multiple_folders_that_act_like_Slashnode_modules_Slash_types
         },
         {
             name: "types",
@@ -37754,18 +38693,19 @@
                 name: "types",
                 type: "string"
             },
-            affectsModuleResolution: true,
+            affectsProgramStructure: true,
             showInSimplifiedHelpView: true,
-            category: ts.Diagnostics.Module_Resolution_Options,
-            description: ts.Diagnostics.Type_declaration_files_to_be_included_in_compilation,
+            category: ts.Diagnostics.Modules,
+            description: ts.Diagnostics.Specify_type_package_names_to_be_included_without_being_referenced_in_a_source_file,
             transpileOptionValue: undefined
         },
         {
             name: "allowSyntheticDefaultImports",
             type: "boolean",
             affectsSemanticDiagnostics: true,
-            category: ts.Diagnostics.Module_Resolution_Options,
-            description: ts.Diagnostics.Allow_default_imports_from_modules_with_no_default_export_This_does_not_affect_code_emit_just_typechecking
+            category: ts.Diagnostics.Interop_Constraints,
+            description: ts.Diagnostics.Allow_import_x_from_y_when_a_module_doesn_t_have_a_default_export,
+            defaultValueDescription: ts.Diagnostics.module_system_or_esModuleInterop
         },
         {
             name: "esModuleInterop",
@@ -37773,21 +38713,24 @@
             affectsSemanticDiagnostics: true,
             affectsEmit: true,
             showInSimplifiedHelpView: true,
-            category: ts.Diagnostics.Module_Resolution_Options,
-            description: ts.Diagnostics.Enables_emit_interoperability_between_CommonJS_and_ES_Modules_via_creation_of_namespace_objects_for_all_imports_Implies_allowSyntheticDefaultImports
+            category: ts.Diagnostics.Interop_Constraints,
+            description: ts.Diagnostics.Emit_additional_JavaScript_to_ease_support_for_importing_CommonJS_modules_This_enables_allowSyntheticDefaultImports_for_type_compatibility,
+            defaultValueDescription: "false"
         },
         {
             name: "preserveSymlinks",
             type: "boolean",
-            category: ts.Diagnostics.Module_Resolution_Options,
-            description: ts.Diagnostics.Do_not_resolve_the_real_path_of_symlinks,
+            category: ts.Diagnostics.Interop_Constraints,
+            description: ts.Diagnostics.Disable_resolving_symlinks_to_their_realpath_This_correlates_to_the_same_flag_in_node,
+            defaultValueDescription: "n/a"
         },
         {
             name: "allowUmdGlobalAccess",
             type: "boolean",
             affectsSemanticDiagnostics: true,
-            category: ts.Diagnostics.Module_Resolution_Options,
+            category: ts.Diagnostics.Modules,
             description: ts.Diagnostics.Allow_accessing_UMD_globals_from_modules,
+            defaultValueDescription: "false"
         },
         // Source Maps
         {
@@ -37795,59 +38738,62 @@
             type: "string",
             affectsEmit: true,
             paramType: ts.Diagnostics.LOCATION,
-            category: ts.Diagnostics.Source_Map_Options,
-            description: ts.Diagnostics.Specify_the_location_where_debugger_should_locate_TypeScript_files_instead_of_source_locations,
+            category: ts.Diagnostics.Emit,
+            description: ts.Diagnostics.Specify_the_root_path_for_debuggers_to_find_the_reference_source_code,
         },
         {
             name: "mapRoot",
             type: "string",
             affectsEmit: true,
             paramType: ts.Diagnostics.LOCATION,
-            category: ts.Diagnostics.Source_Map_Options,
+            category: ts.Diagnostics.Emit,
             description: ts.Diagnostics.Specify_the_location_where_debugger_should_locate_map_files_instead_of_generated_locations,
         },
         {
             name: "inlineSourceMap",
             type: "boolean",
             affectsEmit: true,
-            category: ts.Diagnostics.Source_Map_Options,
-            description: ts.Diagnostics.Emit_a_single_file_with_source_maps_instead_of_having_a_separate_file
+            category: ts.Diagnostics.Emit,
+            description: ts.Diagnostics.Include_sourcemap_files_inside_the_emitted_JavaScript,
+            defaultValueDescription: "false"
         },
         {
             name: "inlineSources",
             type: "boolean",
             affectsEmit: true,
-            category: ts.Diagnostics.Source_Map_Options,
-            description: ts.Diagnostics.Emit_the_source_alongside_the_sourcemaps_within_a_single_file_requires_inlineSourceMap_or_sourceMap_to_be_set
+            category: ts.Diagnostics.Emit,
+            description: ts.Diagnostics.Include_source_code_in_the_sourcemaps_inside_the_emitted_JavaScript,
+            defaultValueDescription: "false"
         },
         // Experimental
         {
             name: "experimentalDecorators",
             type: "boolean",
             affectsSemanticDiagnostics: true,
-            category: ts.Diagnostics.Experimental_Options,
-            description: ts.Diagnostics.Enables_experimental_support_for_ES7_decorators
+            category: ts.Diagnostics.Language_and_Environment,
+            description: ts.Diagnostics.Enable_experimental_support_for_TC39_stage_2_draft_decorators
         },
         {
             name: "emitDecoratorMetadata",
             type: "boolean",
             affectsSemanticDiagnostics: true,
             affectsEmit: true,
-            category: ts.Diagnostics.Experimental_Options,
-            description: ts.Diagnostics.Enables_experimental_support_for_emitting_type_metadata_for_decorators
+            category: ts.Diagnostics.Language_and_Environment,
+            description: ts.Diagnostics.Emit_design_type_metadata_for_decorated_declarations_in_source_files
         },
         // Advanced
         {
             name: "jsxFactory",
             type: "string",
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Specify_the_JSX_factory_function_to_use_when_targeting_react_JSX_emit_e_g_React_createElement_or_h
+            category: ts.Diagnostics.Language_and_Environment,
+            description: ts.Diagnostics.Specify_the_JSX_factory_function_used_when_targeting_React_JSX_emit_e_g_React_createElement_or_h,
+            defaultValueDescription: "`React.createElement`"
         },
         {
             name: "jsxFragmentFactory",
             type: "string",
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Specify_the_JSX_fragment_factory_function_to_use_when_targeting_react_JSX_emit_with_jsxFactory_compiler_option_is_specified_e_g_Fragment
+            category: ts.Diagnostics.Language_and_Environment,
+            description: ts.Diagnostics.Specify_the_JSX_Fragment_reference_used_for_fragments_when_targeting_React_JSX_emit_e_g_React_Fragment_or_Fragment
         },
         {
             name: "jsxImportSource",
@@ -37855,15 +38801,17 @@
             affectsSemanticDiagnostics: true,
             affectsEmit: true,
             affectsModuleResolution: true,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Specify_the_module_specifier_to_be_used_to_import_the_jsx_and_jsxs_factory_functions_from_eg_react
+            category: ts.Diagnostics.Language_and_Environment,
+            description: ts.Diagnostics.Specify_module_specifier_used_to_import_the_JSX_factory_functions_when_using_jsx_Colon_react_jsx_Asterisk,
+            defaultValueDescription: "react"
         },
         {
             name: "resolveJsonModule",
             type: "boolean",
             affectsModuleResolution: true,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Include_modules_imported_with_json_extension
+            category: ts.Diagnostics.Modules,
+            description: ts.Diagnostics.Enable_importing_json_files,
+            defaultValueDescription: "false"
         },
         {
             name: "out",
@@ -37871,36 +38819,41 @@
             affectsEmit: true,
             isFilePath: false,
             // for correct behaviour, please use outFile
-            category: ts.Diagnostics.Advanced_Options,
+            category: ts.Diagnostics.Backwards_Compatibility,
             paramType: ts.Diagnostics.FILE,
-            description: ts.Diagnostics.Deprecated_Use_outFile_instead_Concatenate_and_emit_output_to_single_file,
-            transpileOptionValue: undefined
+            transpileOptionValue: undefined,
+            defaultValueDescription: "n/a",
+            description: ts.Diagnostics.Deprecated_setting_Use_outFile_instead,
         },
         {
             name: "reactNamespace",
             type: "string",
             affectsEmit: true,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Deprecated_Use_jsxFactory_instead_Specify_the_object_invoked_for_createElement_when_targeting_react_JSX_emit
+            category: ts.Diagnostics.Language_and_Environment,
+            description: ts.Diagnostics.Specify_the_object_invoked_for_createElement_This_only_applies_when_targeting_react_JSX_emit,
+            defaultValueDescription: "`React`",
         },
         {
             name: "skipDefaultLibCheck",
             type: "boolean",
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Deprecated_Use_skipLibCheck_instead_Skip_type_checking_of_default_library_declaration_files
+            category: ts.Diagnostics.Completeness,
+            description: ts.Diagnostics.Skip_type_checking_d_ts_files_that_are_included_with_TypeScript,
+            defaultValueDescription: "false",
         },
         {
             name: "charset",
             type: "string",
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.The_character_set_of_the_input_files
+            category: ts.Diagnostics.Backwards_Compatibility,
+            description: ts.Diagnostics.No_longer_supported_In_early_versions_manually_set_the_text_encoding_for_reading_files,
+            defaultValueDescription: "utf8"
         },
         {
             name: "emitBOM",
             type: "boolean",
             affectsEmit: true,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Emit_a_UTF_8_Byte_Order_Mark_BOM_in_the_beginning_of_output_files
+            category: ts.Diagnostics.Emit,
+            description: ts.Diagnostics.Emit_a_UTF_8_Byte_Order_Mark_BOM_in_the_beginning_of_output_files,
+            defaultValueDescription: "false"
         },
         {
             name: "newLine",
@@ -37910,99 +38863,108 @@
             })),
             affectsEmit: true,
             paramType: ts.Diagnostics.NEWLINE,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Specify_the_end_of_line_sequence_to_be_used_when_emitting_files_Colon_CRLF_dos_or_LF_unix,
+            category: ts.Diagnostics.Emit,
+            description: ts.Diagnostics.Set_the_newline_character_for_emitting_files,
+            defaultValueDescription: ts.Diagnostics.Platform_specific
         },
         {
             name: "noErrorTruncation",
             type: "boolean",
             affectsSemanticDiagnostics: true,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Do_not_truncate_error_messages
+            category: ts.Diagnostics.Output_Formatting,
+            description: ts.Diagnostics.Disable_truncating_types_in_error_messages,
+            defaultValueDescription: "false"
         },
         {
             name: "noLib",
             type: "boolean",
-            affectsModuleResolution: true,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Do_not_include_the_default_library_file_lib_d_ts,
+            category: ts.Diagnostics.Language_and_Environment,
+            affectsProgramStructure: true,
+            description: ts.Diagnostics.Disable_including_any_library_files_including_the_default_lib_d_ts,
             // We are not returning a sourceFile for lib file when asked by the program,
             // so pass --noLib to avoid reporting a file not found error.
-            transpileOptionValue: true
+            transpileOptionValue: true,
+            defaultValueDescription: "false"
         },
         {
             name: "noResolve",
             type: "boolean",
             affectsModuleResolution: true,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Do_not_add_triple_slash_references_or_imported_modules_to_the_list_of_compiled_files,
+            category: ts.Diagnostics.Modules,
+            description: ts.Diagnostics.Disallow_import_s_require_s_or_reference_s_from_expanding_the_number_of_files_TypeScript_should_add_to_a_project,
             // We are not doing a full typecheck, we are not resolving the whole context,
             // so pass --noResolve to avoid reporting missing file errors.
-            transpileOptionValue: true
+            transpileOptionValue: true,
+            defaultValueDescription: "false"
         },
         {
             name: "stripInternal",
             type: "boolean",
             affectsEmit: true,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Do_not_emit_declarations_for_code_that_has_an_internal_annotation,
+            category: ts.Diagnostics.Emit,
+            description: ts.Diagnostics.Disable_emitting_declarations_that_have_internal_in_their_JSDoc_comments,
         },
         {
             name: "disableSizeLimit",
             type: "boolean",
-            affectsSourceFile: true,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Disable_size_limitations_on_JavaScript_projects
+            affectsProgramStructure: true,
+            category: ts.Diagnostics.Editor_Support,
+            description: ts.Diagnostics.Remove_the_20mb_cap_on_total_source_code_size_for_JavaScript_files_in_the_TypeScript_language_server,
+            defaultValueDescription: "false"
         },
         {
             name: "disableSourceOfProjectReferenceRedirect",
             type: "boolean",
             isTSConfigOnly: true,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Disable_use_of_source_files_instead_of_declaration_files_from_referenced_projects
+            category: ts.Diagnostics.Projects,
+            description: ts.Diagnostics.Disable_preferring_source_files_instead_of_declaration_files_when_referencing_composite_projects
         },
         {
             name: "disableSolutionSearching",
             type: "boolean",
             isTSConfigOnly: true,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Disable_solution_searching_for_this_project
+            category: ts.Diagnostics.Projects,
+            description: ts.Diagnostics.Opt_a_project_out_of_multi_project_reference_checking_when_editing
         },
         {
             name: "disableReferencedProjectLoad",
             type: "boolean",
             isTSConfigOnly: true,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Disable_loading_referenced_projects
+            category: ts.Diagnostics.Projects,
+            description: ts.Diagnostics.Reduce_the_number_of_projects_loaded_automatically_by_TypeScript
         },
         {
             name: "noImplicitUseStrict",
             type: "boolean",
             affectsSemanticDiagnostics: true,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Do_not_emit_use_strict_directives_in_module_output
+            category: ts.Diagnostics.Backwards_Compatibility,
+            description: ts.Diagnostics.Disable_adding_use_strict_directives_in_emitted_JavaScript_files,
+            defaultValueDescription: "false"
         },
         {
             name: "noEmitHelpers",
             type: "boolean",
             affectsEmit: true,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Do_not_generate_custom_helper_functions_like_extends_in_compiled_output
+            category: ts.Diagnostics.Emit,
+            description: ts.Diagnostics.Disable_generating_custom_helper_functions_like_extends_in_compiled_output,
+            defaultValueDescription: "false"
         },
         {
             name: "noEmitOnError",
             type: "boolean",
             affectsEmit: true,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Do_not_emit_outputs_if_any_errors_were_reported,
-            transpileOptionValue: undefined
+            category: ts.Diagnostics.Emit,
+            transpileOptionValue: undefined,
+            description: ts.Diagnostics.Disable_emitting_files_if_any_type_checking_errors_are_reported,
+            defaultValueDescription: "false"
         },
         {
             name: "preserveConstEnums",
             type: "boolean",
             affectsEmit: true,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Do_not_erase_const_enum_declarations_in_generated_code
+            category: ts.Diagnostics.Emit,
+            description: ts.Diagnostics.Disable_erasing_const_enum_declarations_in_generated_code,
+            defaultValueDescription: "n/a"
         },
         {
             name: "declarationDir",
@@ -38010,80 +38972,91 @@
             affectsEmit: true,
             isFilePath: true,
             paramType: ts.Diagnostics.DIRECTORY,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Output_directory_for_generated_declaration_files,
-            transpileOptionValue: undefined
+            category: ts.Diagnostics.Emit,
+            transpileOptionValue: undefined,
+            description: ts.Diagnostics.Specify_the_output_directory_for_generated_declaration_files,
+            defaultValueDescription: "n/a"
         },
         {
             name: "skipLibCheck",
             type: "boolean",
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Skip_type_checking_of_declaration_files,
+            category: ts.Diagnostics.Completeness,
+            description: ts.Diagnostics.Skip_type_checking_all_d_ts_files,
+            defaultValueDescription: "false"
         },
         {
             name: "allowUnusedLabels",
             type: "boolean",
             affectsBindDiagnostics: true,
             affectsSemanticDiagnostics: true,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Do_not_report_errors_on_unused_labels
+            category: ts.Diagnostics.Type_Checking,
+            description: ts.Diagnostics.Disable_error_reporting_for_unused_labels,
+            defaultValueDescription: "undefined"
         },
         {
             name: "allowUnreachableCode",
             type: "boolean",
             affectsBindDiagnostics: true,
             affectsSemanticDiagnostics: true,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Do_not_report_errors_on_unreachable_code
+            category: ts.Diagnostics.Type_Checking,
+            description: ts.Diagnostics.Disable_error_reporting_for_unreachable_code,
+            defaultValueDescription: "undefined"
         },
         {
             name: "suppressExcessPropertyErrors",
             type: "boolean",
             affectsSemanticDiagnostics: true,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Suppress_excess_property_checks_for_object_literals,
+            category: ts.Diagnostics.Backwards_Compatibility,
+            description: ts.Diagnostics.Disable_reporting_of_excess_property_errors_during_the_creation_of_object_literals,
+            defaultValueDescription: "false"
         },
         {
             name: "suppressImplicitAnyIndexErrors",
             type: "boolean",
             affectsSemanticDiagnostics: true,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Suppress_noImplicitAny_errors_for_indexing_objects_lacking_index_signatures,
+            category: ts.Diagnostics.Backwards_Compatibility,
+            description: ts.Diagnostics.Suppress_noImplicitAny_errors_when_indexing_objects_that_lack_index_signatures,
+            defaultValueDescription: "false"
         },
         {
             name: "forceConsistentCasingInFileNames",
             type: "boolean",
             affectsModuleResolution: true,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Disallow_inconsistently_cased_references_to_the_same_file
+            category: ts.Diagnostics.Interop_Constraints,
+            description: ts.Diagnostics.Ensure_that_casing_is_correct_in_imports,
+            defaultValueDescription: "false"
         },
         {
             name: "maxNodeModuleJsDepth",
             type: "number",
             affectsModuleResolution: true,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.The_maximum_dependency_depth_to_search_under_node_modules_and_load_JavaScript_files
+            category: ts.Diagnostics.JavaScript_Support,
+            description: ts.Diagnostics.Specify_the_maximum_folder_depth_used_for_checking_JavaScript_files_from_node_modules_Only_applicable_with_allowJs,
+            defaultValueDescription: "0"
         },
         {
             name: "noStrictGenericChecks",
             type: "boolean",
             affectsSemanticDiagnostics: true,
-            category: ts.Diagnostics.Advanced_Options,
+            category: ts.Diagnostics.Backwards_Compatibility,
             description: ts.Diagnostics.Disable_strict_checking_of_generic_signatures_in_function_types,
+            defaultValueDescription: "false"
         },
         {
             name: "useDefineForClassFields",
             type: "boolean",
             affectsSemanticDiagnostics: true,
             affectsEmit: true,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Emit_class_fields_with_Define_instead_of_Set,
+            category: ts.Diagnostics.Language_and_Environment,
+            description: ts.Diagnostics.Emit_ECMAScript_standard_compliant_class_fields,
+            defaultValueDescription: "false"
         },
         {
             name: "keyofStringsOnly",
             type: "boolean",
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Resolve_keyof_to_string_valued_property_names_only_no_numbers_or_symbols,
+            category: ts.Diagnostics.Backwards_Compatibility,
+            description: ts.Diagnostics.Make_keyof_only_return_strings_instead_of_string_numbers_or_symbols_Legacy_option,
+            defaultValueDescription: "false"
         },
         {
             // A list of plugins to load in the language service
@@ -38094,11 +39067,12 @@
                 name: "plugin",
                 type: "object"
             },
-            description: ts.Diagnostics.List_of_language_service_plugins
+            description: ts.Diagnostics.List_of_language_service_plugins,
+            category: ts.Diagnostics.Editor_Support,
         },
     ];
     /* @internal */
-    ts.optionDeclarations = __spreadArray(__spreadArray([], ts.commonOptionsWithBuild), commandOptionsWithoutBuild);
+    ts.optionDeclarations = __spreadArray(__spreadArray([], ts.commonOptionsWithBuild, true), commandOptionsWithoutBuild, true);
     /* @internal */
     ts.semanticDiagnosticsOptionDeclarations = ts.optionDeclarations.filter(function (option) { return !!option.affectsSemanticDiagnostics; });
     /* @internal */
@@ -38110,10 +39084,14 @@
         return !!option.affectsSourceFile || !!option.affectsModuleResolution || !!option.affectsBindDiagnostics;
     });
     /* @internal */
+    ts.optionsAffectingProgramStructure = ts.optionDeclarations.filter(function (option) { return !!option.affectsProgramStructure; });
+    /* @internal */
     ts.transpileOptionValueCompilerOptions = ts.optionDeclarations.filter(function (option) {
         return ts.hasProperty(option, "transpileOptionValue");
     });
-    var commandOptionsOnlyBuild = [
+    // Build related options
+    /* @internal */
+    ts.optionsForBuild = [
         {
             name: "verbose",
             shortName: "v",
@@ -38143,7 +39121,7 @@
         }
     ];
     /* @internal */
-    ts.buildOpts = __spreadArray(__spreadArray([], ts.commonOptionsWithBuild), commandOptionsOnlyBuild);
+    ts.buildOpts = __spreadArray(__spreadArray([], ts.commonOptionsWithBuild, true), ts.optionsForBuild, true);
     /* @internal */
     ts.typeAcquisitionDeclarations = [
         {
@@ -38234,13 +39212,13 @@
     }
     /* @internal */
     function parseCustomTypeOption(opt, value, errors) {
-        return convertJsonOptionOfCustomType(opt, trimString(value || ""), errors);
+        return convertJsonOptionOfCustomType(opt, ts.trimString(value || ""), errors);
     }
     ts.parseCustomTypeOption = parseCustomTypeOption;
     /* @internal */
     function parseListTypeOption(opt, value, errors) {
         if (value === void 0) { value = ""; }
-        value = trimString(value);
+        value = ts.trimString(value);
         if (ts.startsWith(value, "-")) {
             return undefined;
         }
@@ -38624,7 +39602,8 @@
                     },
                     {
                         name: "extends",
-                        type: "string"
+                        type: "string",
+                        category: ts.Diagnostics.File_Management,
                     },
                     {
                         name: "references",
@@ -38632,7 +39611,8 @@
                         element: {
                             name: "references",
                             type: "object"
-                        }
+                        },
+                        category: ts.Diagnostics.Projects,
                     },
                     {
                         name: "files",
@@ -38640,7 +39620,8 @@
                         element: {
                             name: "files",
                             type: "string"
-                        }
+                        },
+                        category: ts.Diagnostics.File_Management,
                     },
                     {
                         name: "include",
@@ -38648,7 +39629,9 @@
                         element: {
                             name: "include",
                             type: "string"
-                        }
+                        },
+                        category: ts.Diagnostics.File_Management,
+                        defaultValueDescription: ts.Diagnostics.if_files_is_specified_otherwise_Asterisk_Asterisk_Slash_Asterisk
                     },
                     {
                         name: "exclude",
@@ -38656,7 +39639,9 @@
                         element: {
                             name: "exclude",
                             type: "string"
-                        }
+                        },
+                        category: ts.Diagnostics.File_Management,
+                        defaultValueDescription: ts.Diagnostics.node_modules_bower_components_jspm_packages_plus_the_value_of_outDir_if_one_is_specified
                     },
                     ts.compileOnSaveCommandLineOption
                 ])
@@ -38668,7 +39653,7 @@
         var _a;
         var rootExpression = (_a = sourceFile.statements[0]) === null || _a === void 0 ? void 0 : _a.expression;
         var knownRootOptions = reportOptionsErrors ? getTsconfigRootOptionsMap() : undefined;
-        if (rootExpression && rootExpression.kind !== 201 /* ObjectLiteralExpression */) {
+        if (rootExpression && rootExpression.kind !== 203 /* ObjectLiteralExpression */) {
             errors.push(ts.createDiagnosticForNodeInSourceFile(sourceFile, rootExpression, ts.Diagnostics.The_root_value_of_a_0_file_must_be_an_object, ts.getBaseFileName(sourceFile.fileName) === "jsconfig.json" ? "jsconfig.json" : "tsconfig.json"));
             // Last-ditch error recovery. Somewhat useful because the JSON parser will recover from some parse errors by
             // synthesizing a top-level array literal expression. There's a reasonable chance the first element of that
@@ -38708,7 +39693,7 @@
         function convertObjectLiteralExpressionToJson(node, knownOptions, extraKeyDiagnostics, parentOption) {
             var result = returnValue ? {} : undefined;
             var _loop_4 = function (element) {
-                if (element.kind !== 289 /* PropertyAssignment */) {
+                if (element.kind !== 291 /* PropertyAssignment */) {
                     errors.push(ts.createDiagnosticForNodeInSourceFile(sourceFile, element, ts.Diagnostics.Property_assignment_expected));
                     return "continue";
                 }
@@ -38775,13 +39760,13 @@
         function convertPropertyValueToJson(valueExpression, option) {
             var invalidReported;
             switch (valueExpression.kind) {
-                case 109 /* TrueKeyword */:
+                case 110 /* TrueKeyword */:
                     reportInvalidOptionValue(option && option.type !== "boolean");
                     return validateValue(/*value*/ true);
-                case 94 /* FalseKeyword */:
+                case 95 /* FalseKeyword */:
                     reportInvalidOptionValue(option && option.type !== "boolean");
                     return validateValue(/*value*/ false);
-                case 103 /* NullKeyword */:
+                case 104 /* NullKeyword */:
                     reportInvalidOptionValue(option && option.name === "extends"); // "extends" is the only option we don't allow null/undefined for
                     return validateValue(/*value*/ null); // eslint-disable-line no-null/no-null
                 case 10 /* StringLiteral */:
@@ -38802,13 +39787,13 @@
                 case 8 /* NumericLiteral */:
                     reportInvalidOptionValue(option && option.type !== "number");
                     return validateValue(Number(valueExpression.text));
-                case 215 /* PrefixUnaryExpression */:
+                case 217 /* PrefixUnaryExpression */:
                     if (valueExpression.operator !== 40 /* MinusToken */ || valueExpression.operand.kind !== 8 /* NumericLiteral */) {
                         break; // not valid JSON syntax
                     }
                     reportInvalidOptionValue(option && option.type !== "number");
                     return validateValue(-Number(valueExpression.operand.text));
-                case 201 /* ObjectLiteralExpression */:
+                case 203 /* ObjectLiteralExpression */:
                     reportInvalidOptionValue(option && option.type !== "object");
                     var objectLiteralExpression = valueExpression;
                     // Currently having element option declaration in the tsconfig with type "object"
@@ -38825,7 +39810,7 @@
                         return validateValue(convertObjectLiteralExpressionToJson(objectLiteralExpression, /* knownOptions*/ undefined, 
                         /*extraKeyDiagnosticMessage */ undefined, /*parentOption*/ undefined));
                     }
-                case 200 /* ArrayLiteralExpression */:
+                case 202 /* ArrayLiteralExpression */:
                     reportInvalidOptionValue(option && option.type !== "list");
                     return validateValue(convertArrayLiteralExpressionToJson(valueExpression.elements, option && option.element));
             }
@@ -38842,7 +39827,7 @@
                 if (!invalidReported) {
                     var diagnostic = (_a = option === null || option === void 0 ? void 0 : option.extraValidation) === null || _a === void 0 ? void 0 : _a.call(option, value);
                     if (diagnostic) {
-                        errors.push(ts.createDiagnosticForNodeInSourceFile.apply(void 0, __spreadArray([sourceFile, valueExpression], diagnostic)));
+                        errors.push(ts.createDiagnosticForNodeInSourceFile.apply(void 0, __spreadArray([sourceFile, valueExpression], diagnostic, false)));
                         return undefined;
                     }
                 }
@@ -38963,7 +39948,7 @@
             if (ts.hasProperty(options, name)) {
                 // tsconfig only options cannot be specified via command line,
                 // so we can assume that only types that can appear here string | number | boolean
-                if (optionsNameMap.has(name) && optionsNameMap.get(name).category === ts.Diagnostics.Command_line_Options) {
+                if (optionsNameMap.has(name) && (optionsNameMap.get(name).category === ts.Diagnostics.Command_line_Options || optionsNameMap.get(name).category === ts.Diagnostics.Output_Formatting)) {
                     return "continue";
                 }
                 var value = options[name];
@@ -39029,13 +40014,11 @@
         function makePadding(paddingLength) {
             return Array(paddingLength + 1).join(" ");
         }
-        function isAllowedOption(_a) {
-            var category = _a.category, name = _a.name;
-            // Skip options which do not have a category or have category `Command_line_Options`
-            // Exclude all possible `Advanced_Options` in tsconfig.json which were NOT defined in command line
-            return category !== undefined
-                && category !== ts.Diagnostics.Command_line_Options
-                && (category !== ts.Diagnostics.Advanced_Options || compilerOptionsMap.has(name));
+        function isAllowedOptionForOutput(_a) {
+            var category = _a.category, name = _a.name, isCommandLineOnly = _a.isCommandLineOnly;
+            // Skip options which do not have a category or have categories which are more niche
+            var categoriesToSkip = [ts.Diagnostics.Command_line_Options, ts.Diagnostics.Editor_Support, ts.Diagnostics.Compiler_Diagnostics, ts.Diagnostics.Backwards_Compatibility, ts.Diagnostics.Watch_and_Build_Modes, ts.Diagnostics.Output_Formatting];
+            return !isCommandLineOnly && category !== undefined && (!categoriesToSkip.includes(category) || compilerOptionsMap.has(name));
         }
         function writeConfigurations() {
             // Filter applicable options to place in the file
@@ -39043,7 +40026,7 @@
             for (var _i = 0, optionDeclarations_1 = ts.optionDeclarations; _i < optionDeclarations_1.length; _i++) {
                 var option = optionDeclarations_1[_i];
                 var category = option.category;
-                if (isAllowedOption(option)) {
+                if (isAllowedOptionForOutput(option)) {
                     categorizedOptions.add(ts.getLocaleSpecificMessage(category), option);
                 }
             }
@@ -39260,6 +40243,7 @@
                 validatedFilesSpec: ts.filter(filesSpecs, ts.isString),
                 validatedIncludeSpecs: validatedIncludeSpecs,
                 validatedExcludeSpecs: validatedExcludeSpecs,
+                pathPatterns: undefined, // Initialized on first use
             };
         }
         function getFileNames(basePath) {
@@ -39357,7 +40341,7 @@
         basePath = ts.normalizeSlashes(basePath);
         var resolvedPath = ts.getNormalizedAbsolutePath(configFileName || "", basePath);
         if (resolutionStack.indexOf(resolvedPath) >= 0) {
-            errors.push(ts.createCompilerDiagnostic(ts.Diagnostics.Circularity_detected_while_resolving_configuration_Colon_0, __spreadArray(__spreadArray([], resolutionStack), [resolvedPath]).join(" -> ")));
+            errors.push(ts.createCompilerDiagnostic(ts.Diagnostics.Circularity_detected_while_resolving_configuration_Colon_0, __spreadArray(__spreadArray([], resolutionStack, true), [resolvedPath], false).join(" -> ")));
             return { raw: json || convertToObject(sourceFile, errors) };
         }
         var ownConfig = json ?
@@ -39657,9 +40641,6 @@
     function convertJsonOptionOfListType(option, values, basePath, errors) {
         return ts.filter(ts.map(values, function (v) { return convertJsonOption(option.element, v, basePath, errors); }), function (v) { return !!v; });
     }
-    function trimString(s) {
-        return typeof s.trim === "function" ? s.trim() : s.replace(/^[\s]+|[\s]+$/g, "");
-    }
     /**
      * Tests for a path that ends in a recursive directory wildcard.
      * Matches **, \**, **\, and \**\, but not a**b.
@@ -39673,34 +40654,6 @@
      */
     var invalidTrailingRecursionPattern = /(^|\/)\*\*\/?$/;
     /**
-     * Tests for a path where .. appears after a recursive directory wildcard.
-     * Matches **\..\*, **\a\..\*, and **\.., but not ..\**\*
-     *
-     * NOTE: used \ in place of / above to avoid issues with multiline comments.
-     *
-     * Breakdown:
-     *  (^|\/)      # matches either the beginning of the string or a directory separator.
-     *  \*\*\/      # matches a recursive directory wildcard "**" followed by a directory separator.
-     *  (.*\/)?     # optionally matches any number of characters followed by a directory separator.
-     *  \.\.        # matches a parent directory path component ".."
-     *  ($|\/)      # matches either the end of the string or a directory separator.
-     */
-    var invalidDotDotAfterRecursiveWildcardPattern = /(^|\/)\*\*\/(.*\/)?\.\.($|\/)/;
-    /**
-     * Tests for a path containing a wildcard character in a directory component of the path.
-     * Matches \*\, \?\, and \a*b\, but not \a\ or \a\*.
-     *
-     * NOTE: used \ in place of / above to avoid issues with multiline comments.
-     *
-     * Breakdown:
-     *  \/          # matches a directory separator.
-     *  [^/]*?      # matches any number of characters excluding directory separators (non-greedy).
-     *  [*?]        # matches either a wildcard character (* or ?)
-     *  [^/]*       # matches any number of characters excluding directory separators (greedy).
-     *  \/          # matches a directory separator.
-     */
-    var watchRecursivePattern = /\/[^/]*?[*?][^/]*\//;
-    /**
      * Matches the portion of a wildcard path that does not contain wildcards.
      * Matches \a of \a\*, or \a\b\c of \a\b\c\?\d.
      *
@@ -39740,7 +40693,7 @@
         // via wildcard of *.json kind
         var wildCardJsonFileMap = new ts.Map();
         var validatedFilesSpec = configFileSpecs.validatedFilesSpec, validatedIncludeSpecs = configFileSpecs.validatedIncludeSpecs, validatedExcludeSpecs = configFileSpecs.validatedExcludeSpecs;
-        // Rather than requery this for each file and filespec, we query the supported extensions
+        // Rather than re-query this for each file and filespec, we query the supported extensions
         // once and store it on the expansion context.
         var supportedExtensions = ts.getSupportedExtensions(options, extraFileExtensions);
         var supportedExtensionsWithJsonIfResolveJsonModule = ts.getSuppoertedExtensionsWithJsonIfResolveJsonModule(options, supportedExtensions);
@@ -39818,9 +40771,22 @@
         return matchesExcludeWorker(pathToCheck, validatedExcludeSpecs, useCaseSensitiveFileNames, currentDirectory, basePath);
     }
     ts.isExcludedFile = isExcludedFile;
+    function invalidDotDotAfterRecursiveWildcard(s) {
+        // We used to use the regex /(^|\/)\*\*\/(.*\/)?\.\.($|\/)/ to check for this case, but
+        // in v8, that has polynomial performance because the recursive wildcard match - **/ -
+        // can be matched in many arbitrary positions when multiple are present, resulting
+        // in bad backtracking (and we don't care which is matched - just that some /.. segment
+        // comes after some **/ segment).
+        var wildcardIndex = ts.startsWith(s, "**/") ? 0 : s.indexOf("/**/");
+        if (wildcardIndex === -1) {
+            return false;
+        }
+        var lastDotIndex = ts.endsWith(s, "/..") ? s.length : s.lastIndexOf("/../");
+        return lastDotIndex > wildcardIndex;
+    }
     /* @internal */
     function matchesExclude(pathToCheck, excludeSpecs, useCaseSensitiveFileNames, currentDirectory) {
-        return matchesExcludeWorker(pathToCheck, ts.filter(excludeSpecs, function (spec) { return !invalidDotDotAfterRecursiveWildcardPattern.test(spec); }), useCaseSensitiveFileNames, currentDirectory);
+        return matchesExcludeWorker(pathToCheck, ts.filter(excludeSpecs, function (spec) { return !invalidDotDotAfterRecursiveWildcard(spec); }), useCaseSensitiveFileNames, currentDirectory);
     }
     ts.matchesExclude = matchesExclude;
     function matchesExcludeWorker(pathToCheck, excludeSpecs, useCaseSensitiveFileNames, currentDirectory, basePath) {
@@ -39853,7 +40819,7 @@
         if (disallowTrailingRecursion && invalidTrailingRecursionPattern.test(spec)) {
             return [ts.Diagnostics.File_specification_cannot_end_in_a_recursive_directory_wildcard_Asterisk_Asterisk_Colon_0, spec];
         }
-        else if (invalidDotDotAfterRecursiveWildcardPattern.test(spec)) {
+        else if (invalidDotDotAfterRecursiveWildcard(spec)) {
             return [ts.Diagnostics.File_specification_cannot_contain_a_parent_directory_that_appears_after_a_recursive_directory_wildcard_Asterisk_Asterisk_Colon_0, spec];
         }
     }
@@ -39914,9 +40880,18 @@
     function getWildcardDirectoryFromSpec(spec, useCaseSensitiveFileNames) {
         var match = wildcardDirectoryPattern.exec(spec);
         if (match) {
+            // We check this with a few `indexOf` calls because 3 `indexOf`/`lastIndexOf` calls is
+            // less algorithmically complex (roughly O(3n) worst-case) than the regex we used to use,
+            // \/[^/]*?[*?][^/]*\/ which was polynominal in v8, since arbitrary sequences of wildcard
+            // characters could match any of the central patterns, resulting in bad backtracking.
+            var questionWildcardIndex = spec.indexOf("?");
+            var starWildcardIndex = spec.indexOf("*");
+            var lastDirectorySeperatorIndex = spec.lastIndexOf(ts.directorySeparator);
             return {
                 key: useCaseSensitiveFileNames ? match[0] : ts.toFileNameLowerCase(match[0]),
-                flags: watchRecursivePattern.test(spec) ? 1 /* Recursive */ : 0 /* None */
+                flags: (questionWildcardIndex !== -1 && questionWildcardIndex < lastDirectorySeperatorIndex)
+                    || (starWildcardIndex !== -1 && starWildcardIndex < lastDirectorySeperatorIndex)
+                    ? 1 /* Recursive */ : 0 /* None */
             };
         }
         if (ts.isImplicitGlob(spec)) {
@@ -40421,7 +41396,7 @@
     ts.createCacheWithRedirects = createCacheWithRedirects;
     function createPackageJsonInfoCache(currentDirectory, getCanonicalFileName) {
         var cache;
-        return { getPackageJsonInfo: getPackageJsonInfo, setPackageJsonInfo: setPackageJsonInfo, clear: clear };
+        return { getPackageJsonInfo: getPackageJsonInfo, setPackageJsonInfo: setPackageJsonInfo, clear: clear, entries: entries };
         function getPackageJsonInfo(packageJsonPath) {
             return cache === null || cache === void 0 ? void 0 : cache.get(ts.toPath(packageJsonPath, currentDirectory, getCanonicalFileName));
         }
@@ -40431,6 +41406,10 @@
         function clear() {
             cache = undefined;
         }
+        function entries() {
+            var iter = cache === null || cache === void 0 ? void 0 : cache.entries();
+            return iter ? ts.arrayFrom(iter) : [];
+        }
     }
     function getOrCreateCache(cacheWithRedirects, redirectedReference, key, create) {
         var cache = cacheWithRedirects.getOrCreateMapOfCacheRedirects(redirectedReference);
@@ -40724,7 +41703,8 @@
         }
     }
     function tryLoadModuleUsingPathsIfEligible(extensions, moduleName, loader, state) {
-        var _a = state.compilerOptions, baseUrl = _a.baseUrl, paths = _a.paths;
+        var _a;
+        var _b = state.compilerOptions, baseUrl = _b.baseUrl, paths = _b.paths, configFile = _b.configFile;
         if (paths && !ts.pathIsRelative(moduleName)) {
             if (state.traceEnabled) {
                 if (baseUrl) {
@@ -40733,7 +41713,8 @@
                 trace(state.host, ts.Diagnostics.paths_option_is_specified_looking_for_a_pattern_to_match_module_name_0, moduleName);
             }
             var baseDirectory = ts.getPathsBasePath(state.compilerOptions, state.host); // Always defined when 'paths' is defined
-            return tryLoadModuleUsingPaths(extensions, moduleName, baseDirectory, paths, loader, /*onlyRecordFailures*/ false, state);
+            var pathPatterns = (configFile === null || configFile === void 0 ? void 0 : configFile.configFileSpecs) ? (_a = configFile.configFileSpecs).pathPatterns || (_a.pathPatterns = ts.tryParsePatterns(paths)) : undefined;
+            return tryLoadModuleUsingPaths(extensions, moduleName, baseDirectory, paths, pathPatterns, loader, /*onlyRecordFailures*/ false, state);
         }
     }
     function tryLoadModuleUsingRootDirs(extensions, moduleName, containingDirectory, loader, state) {
@@ -40840,7 +41821,7 @@
     ts.tryResolveJSModule = tryResolveJSModule;
     var jsOnlyExtensions = [Extensions.JavaScript];
     var tsExtensions = [Extensions.TypeScript, Extensions.JavaScript];
-    var tsPlusJsonExtensions = __spreadArray(__spreadArray([], tsExtensions), [Extensions.Json]);
+    var tsPlusJsonExtensions = __spreadArray(__spreadArray([], tsExtensions, true), [Extensions.Json], false);
     var tsconfigExtensions = [Extensions.TSConfig];
     function tryResolveJSModuleWorker(moduleName, initialDir, host) {
         return nodeModuleNameResolverWorker(moduleName, initialDir, { moduleResolution: ts.ModuleResolutionKind.NodeJs, allowJs: true }, host, /*cache*/ undefined, jsOnlyExtensions, /*redirectedReferences*/ undefined);
@@ -41131,7 +42112,7 @@
             if (state.traceEnabled) {
                 trace(state.host, ts.Diagnostics.package_json_has_a_typesVersions_entry_0_that_matches_compiler_version_1_looking_for_a_pattern_to_match_module_name_2, versionPaths.version, ts.version, moduleName);
             }
-            var result = tryLoadModuleUsingPaths(extensions, moduleName, candidate, versionPaths.paths, loader, onlyRecordFailuresForPackageFile || onlyRecordFailuresForIndex, state);
+            var result = tryLoadModuleUsingPaths(extensions, moduleName, candidate, versionPaths.paths, /*pathPatterns*/ undefined, loader, onlyRecordFailuresForPackageFile || onlyRecordFailuresForIndex, state);
             if (result) {
                 return removeIgnoredPackageId(result.value);
             }
@@ -41238,7 +42219,7 @@
                     trace(state.host, ts.Diagnostics.package_json_has_a_typesVersions_entry_0_that_matches_compiler_version_1_looking_for_a_pattern_to_match_module_name_2, packageInfo.versionPaths.version, ts.version, rest);
                 }
                 var packageDirectoryExists = nodeModulesDirectoryExists && ts.directoryProbablyExists(packageDirectory, state.host);
-                var fromPaths = tryLoadModuleUsingPaths(extensions, rest, packageDirectory, packageInfo.versionPaths.paths, loader, !packageDirectoryExists, state);
+                var fromPaths = tryLoadModuleUsingPaths(extensions, rest, packageDirectory, packageInfo.versionPaths.paths, /*pathPatterns*/ undefined, loader, !packageDirectoryExists, state);
                 if (fromPaths) {
                     return fromPaths.value;
                 }
@@ -41246,8 +42227,9 @@
         }
         return loader(extensions, candidate, !nodeModulesDirectoryExists, state);
     }
-    function tryLoadModuleUsingPaths(extensions, moduleName, baseDirectory, paths, loader, onlyRecordFailures, state) {
-        var matchedPattern = ts.matchPatternOrExact(ts.getOwnKeys(paths), moduleName);
+    function tryLoadModuleUsingPaths(extensions, moduleName, baseDirectory, paths, pathPatterns, loader, onlyRecordFailures, state) {
+        pathPatterns || (pathPatterns = ts.tryParsePatterns(paths));
+        var matchedPattern = ts.matchPatternOrExact(pathPatterns, moduleName);
         if (matchedPattern) {
             var matchedStar_1 = ts.isString(matchedPattern) ? undefined : ts.matchedText(matchedPattern, moduleName);
             var matchedPatternText = ts.isString(matchedPattern) ? matchedPattern : ts.patternText(matchedPattern);
@@ -41422,26 +42404,26 @@
         // A module is uninstantiated if it contains only
         switch (node.kind) {
             // 1. interface declarations, type alias declarations
-            case 254 /* InterfaceDeclaration */:
-            case 255 /* TypeAliasDeclaration */:
+            case 256 /* InterfaceDeclaration */:
+            case 257 /* TypeAliasDeclaration */:
                 return 0 /* NonInstantiated */;
             // 2. const enum declarations
-            case 256 /* EnumDeclaration */:
+            case 258 /* EnumDeclaration */:
                 if (ts.isEnumConst(node)) {
                     return 2 /* ConstEnumOnly */;
                 }
                 break;
             // 3. non-exported import declarations
-            case 262 /* ImportDeclaration */:
-            case 261 /* ImportEqualsDeclaration */:
+            case 264 /* ImportDeclaration */:
+            case 263 /* ImportEqualsDeclaration */:
                 if (!(ts.hasSyntacticModifier(node, 1 /* Export */))) {
                     return 0 /* NonInstantiated */;
                 }
                 break;
             // 4. Export alias declarations pointing at only uninstantiated modules or things uninstantiated modules contain
-            case 268 /* ExportDeclaration */:
+            case 270 /* ExportDeclaration */:
                 var exportDeclaration = node;
-                if (!exportDeclaration.moduleSpecifier && exportDeclaration.exportClause && exportDeclaration.exportClause.kind === 269 /* NamedExports */) {
+                if (!exportDeclaration.moduleSpecifier && exportDeclaration.exportClause && exportDeclaration.exportClause.kind === 271 /* NamedExports */) {
                     var state = 0 /* NonInstantiated */;
                     for (var _i = 0, _a = exportDeclaration.exportClause.elements; _i < _a.length; _i++) {
                         var specifier = _a[_i];
@@ -41457,7 +42439,7 @@
                 }
                 break;
             // 5. other uninstantiated module declarations.
-            case 258 /* ModuleBlock */: {
+            case 260 /* ModuleBlock */: {
                 var state_1 = 0 /* NonInstantiated */;
                 ts.forEachChild(node, function (n) {
                     var childState = getModuleInstanceStateCached(n, visited);
@@ -41479,9 +42461,9 @@
                 });
                 return state_1;
             }
-            case 257 /* ModuleDeclaration */:
+            case 259 /* ModuleDeclaration */:
                 return getModuleInstanceState(node, visited);
-            case 78 /* Identifier */:
+            case 79 /* Identifier */:
                 // Only jsdoc typedef definition can exist in jsdoc namespace, and it should
                 // be considered the same as type alias
                 if (node.isInJSDocNamespace) {
@@ -41680,7 +42662,7 @@
         // Should not be called on a declaration with a computed property name,
         // unless it is a well known Symbol.
         function getDeclarationName(node) {
-            if (node.kind === 267 /* ExportAssignment */) {
+            if (node.kind === 269 /* ExportAssignment */) {
                 return node.isExportEquals ? "export=" /* ExportEquals */ : "default" /* Default */;
             }
             var name = ts.getNameOfDeclaration(node);
@@ -41689,7 +42671,7 @@
                     var moduleName = ts.getTextOfIdentifierOrLiteral(name);
                     return (ts.isGlobalScopeAugmentation(node) ? "__global" : "\"" + moduleName + "\"");
                 }
-                if (name.kind === 159 /* ComputedPropertyName */) {
+                if (name.kind === 160 /* ComputedPropertyName */) {
                     var nameExpression = name.expression;
                     // treat computed property names where expression is string/numeric literal as just string/numeric literal
                     if (ts.isStringOrNumericLiteralLike(nameExpression)) {
@@ -41715,36 +42697,36 @@
                 return ts.isPropertyNameLiteral(name) ? ts.getEscapedTextOfIdentifierOrLiteral(name) : undefined;
             }
             switch (node.kind) {
-                case 167 /* Constructor */:
+                case 169 /* Constructor */:
                     return "__constructor" /* Constructor */;
-                case 175 /* FunctionType */:
-                case 170 /* CallSignature */:
-                case 315 /* JSDocSignature */:
+                case 177 /* FunctionType */:
+                case 172 /* CallSignature */:
+                case 318 /* JSDocSignature */:
                     return "__call" /* Call */;
-                case 176 /* ConstructorType */:
-                case 171 /* ConstructSignature */:
+                case 178 /* ConstructorType */:
+                case 173 /* ConstructSignature */:
                     return "__new" /* New */;
-                case 172 /* IndexSignature */:
+                case 174 /* IndexSignature */:
                     return "__index" /* Index */;
-                case 268 /* ExportDeclaration */:
+                case 270 /* ExportDeclaration */:
                     return "__export" /* ExportStar */;
-                case 298 /* SourceFile */:
+                case 300 /* SourceFile */:
                     // json file should behave as
                     // module.exports = ...
                     return "export=" /* ExportEquals */;
-                case 217 /* BinaryExpression */:
+                case 219 /* BinaryExpression */:
                     if (ts.getAssignmentDeclarationKind(node) === 2 /* ModuleExports */) {
                         // module.exports = ...
                         return "export=" /* ExportEquals */;
                     }
                     ts.Debug.fail("Unknown binary declaration kind");
                     break;
-                case 309 /* JSDocFunctionType */:
+                case 312 /* JSDocFunctionType */:
                     return (ts.isJSDocConstructSignature(node) ? "__new" /* New */ : "__call" /* Call */);
-                case 161 /* Parameter */:
+                case 162 /* Parameter */:
                     // Parameters with names are handled at the top of this function.  Parameters
                     // without names can only come from JSDocFunctionTypes.
-                    ts.Debug.assert(node.parent.kind === 309 /* JSDocFunctionType */, "Impossible parameter parent kind", function () { return "parent is: " + (ts.SyntaxKind ? ts.SyntaxKind[node.parent.kind] : node.parent.kind) + ", expected JSDocFunctionType"; });
+                    ts.Debug.assert(node.parent.kind === 312 /* JSDocFunctionType */, "Impossible parameter parent kind", function () { return "parent is: " + (ts.SyntaxKind ? ts.SyntaxKind[node.parent.kind] : node.parent.kind) + ", expected JSDocFunctionType"; });
                     var functionType = node.parent;
                     var index = functionType.parameters.indexOf(node);
                     return "arg" + index;
@@ -41761,11 +42743,13 @@
          * @param includes - The SymbolFlags that node has in addition to its declaration type (eg: export, ambient, etc.)
          * @param excludes - The flags which node cannot be declared alongside in a symbol table. Used to report forbidden declarations.
          */
-        function declareSymbol(symbolTable, parent, node, includes, excludes, isReplaceableByMethod) {
-            ts.Debug.assert(!ts.hasDynamicName(node));
+        function declareSymbol(symbolTable, parent, node, includes, excludes, isReplaceableByMethod, isComputedName) {
+            ts.Debug.assert(isComputedName || !ts.hasDynamicName(node));
             var isDefaultExport = ts.hasSyntacticModifier(node, 512 /* Default */) || ts.isExportSpecifier(node) && node.name.escapedText === "default";
             // The exported symbol for an export default function/class node is always named "default"
-            var name = isDefaultExport && parent ? "default" /* Default */ : getDeclarationName(node);
+            var name = isComputedName ? "__computed" /* Computed */
+                : isDefaultExport && parent ? "default" /* Default */
+                    : getDeclarationName(node);
             var symbol;
             if (name === undefined) {
                 symbol = createSymbol(0 /* None */, "__missing" /* Missing */);
@@ -41844,7 +42828,7 @@
                                 // 1. multiple export default of class declaration or function declaration by checking NodeFlags.Default
                                 // 2. multiple export default of export assignment. This one doesn't have NodeFlags.Default on (as export default doesn't considered as modifiers)
                                 if (symbol.declarations && symbol.declarations.length &&
-                                    (node.kind === 267 /* ExportAssignment */ && !node.isExportEquals)) {
+                                    (node.kind === 269 /* ExportAssignment */ && !node.isExportEquals)) {
                                     message_1 = ts.Diagnostics.A_module_cannot_have_multiple_default_exports;
                                     messageNeedsName_1 = false;
                                     multipleDefaultExports_1 = true;
@@ -41866,7 +42850,7 @@
                             }
                         });
                         var diag = createDiagnosticForNode(declarationName_1, message_1, messageNeedsName_1 ? getDisplayName(node) : undefined);
-                        file.bindDiagnostics.push(ts.addRelatedInfo.apply(void 0, __spreadArray([diag], relatedInformation_1)));
+                        file.bindDiagnostics.push(ts.addRelatedInfo.apply(void 0, __spreadArray([diag], relatedInformation_1, false)));
                         symbol = createSymbol(0 /* None */, name);
                     }
                 }
@@ -41883,7 +42867,7 @@
         function declareModuleMember(node, symbolFlags, symbolExcludes) {
             var hasExportModifier = !!(ts.getCombinedModifierFlags(node) & 1 /* Export */) || jsdocTreatAsExported(node);
             if (symbolFlags & 2097152 /* Alias */) {
-                if (node.kind === 271 /* ExportSpecifier */ || (node.kind === 261 /* ImportEqualsDeclaration */ && hasExportModifier)) {
+                if (node.kind === 273 /* ExportSpecifier */ || (node.kind === 263 /* ImportEqualsDeclaration */ && hasExportModifier)) {
                     return declareSymbol(container.symbol.exports, container.symbol, node, symbolFlags, symbolExcludes);
                 }
                 else {
@@ -41972,7 +42956,7 @@
             // for it.  We must clear this so we don't accidentally move any stale data forward from
             // a previous compilation.
             if (containerFlags & 1 /* IsContainer */) {
-                if (node.kind !== 210 /* ArrowFunction */) {
+                if (node.kind !== 212 /* ArrowFunction */) {
                     thisParentContainer = container;
                 }
                 container = blockScopeContainer = node;
@@ -42005,7 +42989,7 @@
                 }
                 // We create a return control flow graph for IIFEs and constructors. For constructors
                 // we use the return control flow graph in strict property initialization checks.
-                currentReturnTarget = isIIFE || node.kind === 167 /* Constructor */ || (ts.isInJSFile(node) && (node.kind === 252 /* FunctionDeclaration */ || node.kind === 209 /* FunctionExpression */)) ? createBranchLabel() : undefined;
+                currentReturnTarget = isIIFE || node.kind === 169 /* Constructor */ || node.kind === 168 /* ClassStaticBlockDeclaration */ || (ts.isInJSFile(node) && (node.kind === 254 /* FunctionDeclaration */ || node.kind === 211 /* FunctionExpression */)) ? createBranchLabel() : undefined;
                 currentExceptionTarget = undefined;
                 currentBreakTarget = undefined;
                 currentContinueTarget = undefined;
@@ -42020,14 +43004,14 @@
                         node.flags |= 512 /* HasExplicitReturn */;
                     node.endFlowNode = currentFlow;
                 }
-                if (node.kind === 298 /* SourceFile */) {
+                if (node.kind === 300 /* SourceFile */) {
                     node.flags |= emitFlags;
                     node.endFlowNode = currentFlow;
                 }
                 if (currentReturnTarget) {
                     addAntecedent(currentReturnTarget, currentFlow);
                     currentFlow = finishFlowLabel(currentReturnTarget);
-                    if (node.kind === 167 /* Constructor */ || (ts.isInJSFile(node) && (node.kind === 252 /* FunctionDeclaration */ || node.kind === 209 /* FunctionExpression */))) {
+                    if (node.kind === 169 /* Constructor */ || node.kind === 168 /* ClassStaticBlockDeclaration */ || (ts.isInJSFile(node) && (node.kind === 254 /* FunctionDeclaration */ || node.kind === 211 /* FunctionExpression */))) {
                         node.returnFlowNode = currentFlow;
                     }
                 }
@@ -42054,8 +43038,8 @@
             blockScopeContainer = savedBlockScopeContainer;
         }
         function bindEachFunctionsFirst(nodes) {
-            bindEach(nodes, function (n) { return n.kind === 252 /* FunctionDeclaration */ ? bind(n) : undefined; });
-            bindEach(nodes, function (n) { return n.kind !== 252 /* FunctionDeclaration */ ? bind(n) : undefined; });
+            bindEach(nodes, function (n) { return n.kind === 254 /* FunctionDeclaration */ ? bind(n) : undefined; });
+            bindEach(nodes, function (n) { return n.kind !== 254 /* FunctionDeclaration */ ? bind(n) : undefined; });
         }
         function bindEach(nodes, bindFunction) {
             if (bindFunction === void 0) { bindFunction = bind; }
@@ -42078,59 +43062,59 @@
                 inAssignmentPattern = saveInAssignmentPattern;
                 return;
             }
-            if (node.kind >= 233 /* FirstStatement */ && node.kind <= 249 /* LastStatement */ && !options.allowUnreachableCode) {
+            if (node.kind >= 235 /* FirstStatement */ && node.kind <= 251 /* LastStatement */ && !options.allowUnreachableCode) {
                 node.flowNode = currentFlow;
             }
             switch (node.kind) {
-                case 237 /* WhileStatement */:
+                case 239 /* WhileStatement */:
                     bindWhileStatement(node);
                     break;
-                case 236 /* DoStatement */:
+                case 238 /* DoStatement */:
                     bindDoStatement(node);
                     break;
-                case 238 /* ForStatement */:
+                case 240 /* ForStatement */:
                     bindForStatement(node);
                     break;
-                case 239 /* ForInStatement */:
-                case 240 /* ForOfStatement */:
+                case 241 /* ForInStatement */:
+                case 242 /* ForOfStatement */:
                     bindForInOrForOfStatement(node);
                     break;
-                case 235 /* IfStatement */:
+                case 237 /* IfStatement */:
                     bindIfStatement(node);
                     break;
-                case 243 /* ReturnStatement */:
-                case 247 /* ThrowStatement */:
+                case 245 /* ReturnStatement */:
+                case 249 /* ThrowStatement */:
                     bindReturnOrThrow(node);
                     break;
-                case 242 /* BreakStatement */:
-                case 241 /* ContinueStatement */:
+                case 244 /* BreakStatement */:
+                case 243 /* ContinueStatement */:
                     bindBreakOrContinueStatement(node);
                     break;
-                case 248 /* TryStatement */:
+                case 250 /* TryStatement */:
                     bindTryStatement(node);
                     break;
-                case 245 /* SwitchStatement */:
+                case 247 /* SwitchStatement */:
                     bindSwitchStatement(node);
                     break;
-                case 259 /* CaseBlock */:
+                case 261 /* CaseBlock */:
                     bindCaseBlock(node);
                     break;
-                case 285 /* CaseClause */:
+                case 287 /* CaseClause */:
                     bindCaseClause(node);
                     break;
-                case 234 /* ExpressionStatement */:
+                case 236 /* ExpressionStatement */:
                     bindExpressionStatement(node);
                     break;
-                case 246 /* LabeledStatement */:
+                case 248 /* LabeledStatement */:
                     bindLabeledStatement(node);
                     break;
-                case 215 /* PrefixUnaryExpression */:
+                case 217 /* PrefixUnaryExpression */:
                     bindPrefixUnaryExpressionFlow(node);
                     break;
-                case 216 /* PostfixUnaryExpression */:
+                case 218 /* PostfixUnaryExpression */:
                     bindPostfixUnaryExpressionFlow(node);
                     break;
-                case 217 /* BinaryExpression */:
+                case 219 /* BinaryExpression */:
                     if (ts.isDestructuringAssignment(node)) {
                         // Carry over whether we are in an assignment pattern to
                         // binary expressions that could actually be an initializer
@@ -42140,47 +43124,47 @@
                     }
                     bindBinaryExpressionFlow(node);
                     break;
-                case 211 /* DeleteExpression */:
+                case 213 /* DeleteExpression */:
                     bindDeleteExpressionFlow(node);
                     break;
-                case 218 /* ConditionalExpression */:
+                case 220 /* ConditionalExpression */:
                     bindConditionalExpressionFlow(node);
                     break;
-                case 250 /* VariableDeclaration */:
+                case 252 /* VariableDeclaration */:
                     bindVariableDeclarationFlow(node);
                     break;
-                case 202 /* PropertyAccessExpression */:
-                case 203 /* ElementAccessExpression */:
+                case 204 /* PropertyAccessExpression */:
+                case 205 /* ElementAccessExpression */:
                     bindAccessExpressionFlow(node);
                     break;
-                case 204 /* CallExpression */:
+                case 206 /* CallExpression */:
                     bindCallExpressionFlow(node);
                     break;
-                case 226 /* NonNullExpression */:
+                case 228 /* NonNullExpression */:
                     bindNonNullExpressionFlow(node);
                     break;
-                case 335 /* JSDocTypedefTag */:
-                case 328 /* JSDocCallbackTag */:
-                case 329 /* JSDocEnumTag */:
+                case 340 /* JSDocTypedefTag */:
+                case 333 /* JSDocCallbackTag */:
+                case 334 /* JSDocEnumTag */:
                     bindJSDocTypeAlias(node);
                     break;
                 // In source files and blocks, bind functions first to match hoisting that occurs at runtime
-                case 298 /* SourceFile */: {
+                case 300 /* SourceFile */: {
                     bindEachFunctionsFirst(node.statements);
                     bind(node.endOfFileToken);
                     break;
                 }
-                case 231 /* Block */:
-                case 258 /* ModuleBlock */:
+                case 233 /* Block */:
+                case 260 /* ModuleBlock */:
                     bindEachFunctionsFirst(node.statements);
                     break;
-                case 199 /* BindingElement */:
+                case 201 /* BindingElement */:
                     bindBindingElementFlow(node);
                     break;
-                case 201 /* ObjectLiteralExpression */:
-                case 200 /* ArrayLiteralExpression */:
-                case 289 /* PropertyAssignment */:
-                case 221 /* SpreadElement */:
+                case 203 /* ObjectLiteralExpression */:
+                case 202 /* ArrayLiteralExpression */:
+                case 291 /* PropertyAssignment */:
+                case 223 /* SpreadElement */:
                     // Carry over whether we are in an assignment pattern of Object and Array literals
                     // as well as their children that are valid assignment targets.
                     inAssignmentPattern = saveInAssignmentPattern;
@@ -42194,22 +43178,22 @@
         }
         function isNarrowingExpression(expr) {
             switch (expr.kind) {
-                case 78 /* Identifier */:
-                case 79 /* PrivateIdentifier */:
-                case 107 /* ThisKeyword */:
-                case 202 /* PropertyAccessExpression */:
-                case 203 /* ElementAccessExpression */:
+                case 79 /* Identifier */:
+                case 80 /* PrivateIdentifier */:
+                case 108 /* ThisKeyword */:
+                case 204 /* PropertyAccessExpression */:
+                case 205 /* ElementAccessExpression */:
                     return containsNarrowableReference(expr);
-                case 204 /* CallExpression */:
+                case 206 /* CallExpression */:
                     return hasNarrowableArgument(expr);
-                case 208 /* ParenthesizedExpression */:
-                case 226 /* NonNullExpression */:
+                case 210 /* ParenthesizedExpression */:
+                case 228 /* NonNullExpression */:
                     return isNarrowingExpression(expr.expression);
-                case 217 /* BinaryExpression */:
+                case 219 /* BinaryExpression */:
                     return isNarrowingBinaryExpression(expr);
-                case 215 /* PrefixUnaryExpression */:
+                case 217 /* PrefixUnaryExpression */:
                     return expr.operator === 53 /* ExclamationToken */ && isNarrowingExpression(expr.operand);
-                case 212 /* TypeOfExpression */:
+                case 214 /* TypeOfExpression */:
                     return isNarrowingExpression(expr.expression);
             }
             return false;
@@ -42233,7 +43217,7 @@
                     }
                 }
             }
-            if (expr.expression.kind === 202 /* PropertyAccessExpression */ &&
+            if (expr.expression.kind === 204 /* PropertyAccessExpression */ &&
                 containsNarrowableReference(expr.expression.expression)) {
                 return true;
             }
@@ -42242,15 +43226,12 @@
         function isNarrowingTypeofOperands(expr1, expr2) {
             return ts.isTypeOfExpression(expr1) && isNarrowableOperand(expr1.expression) && ts.isStringLiteralLike(expr2);
         }
-        function isNarrowableInOperands(left, right) {
-            return ts.isStringLiteralLike(left) && isNarrowingExpression(right);
-        }
         function isNarrowingBinaryExpression(expr) {
             switch (expr.operatorToken.kind) {
-                case 62 /* EqualsToken */:
-                case 74 /* BarBarEqualsToken */:
-                case 75 /* AmpersandAmpersandEqualsToken */:
-                case 76 /* QuestionQuestionEqualsToken */:
+                case 63 /* EqualsToken */:
+                case 75 /* BarBarEqualsToken */:
+                case 76 /* AmpersandAmpersandEqualsToken */:
+                case 77 /* QuestionQuestionEqualsToken */:
                     return containsNarrowableReference(expr.left);
                 case 34 /* EqualsEqualsToken */:
                 case 35 /* ExclamationEqualsToken */:
@@ -42258,10 +43239,10 @@
                 case 37 /* ExclamationEqualsEqualsToken */:
                     return isNarrowableOperand(expr.left) || isNarrowableOperand(expr.right) ||
                         isNarrowingTypeofOperands(expr.right, expr.left) || isNarrowingTypeofOperands(expr.left, expr.right);
-                case 101 /* InstanceOfKeyword */:
+                case 102 /* InstanceOfKeyword */:
                     return isNarrowableOperand(expr.left);
-                case 100 /* InKeyword */:
-                    return isNarrowableInOperands(expr.left, expr.right);
+                case 101 /* InKeyword */:
+                    return isNarrowingExpression(expr.right);
                 case 27 /* CommaToken */:
                     return isNarrowingExpression(expr.right);
             }
@@ -42269,11 +43250,11 @@
         }
         function isNarrowableOperand(expr) {
             switch (expr.kind) {
-                case 208 /* ParenthesizedExpression */:
+                case 210 /* ParenthesizedExpression */:
                     return isNarrowableOperand(expr.expression);
-                case 217 /* BinaryExpression */:
+                case 219 /* BinaryExpression */:
                     switch (expr.operatorToken.kind) {
-                        case 62 /* EqualsToken */:
+                        case 63 /* EqualsToken */:
                             return isNarrowableOperand(expr.left);
                         case 27 /* CommaToken */:
                             return isNarrowableOperand(expr.right);
@@ -42307,8 +43288,8 @@
             if (!expression) {
                 return flags & 32 /* TrueCondition */ ? antecedent : unreachableFlow;
             }
-            if ((expression.kind === 109 /* TrueKeyword */ && flags & 64 /* FalseCondition */ ||
-                expression.kind === 94 /* FalseKeyword */ && flags & 32 /* TrueCondition */) &&
+            if ((expression.kind === 110 /* TrueKeyword */ && flags & 64 /* FalseCondition */ ||
+                expression.kind === 95 /* FalseKeyword */ && flags & 32 /* TrueCondition */) &&
                 !ts.isExpressionOfOptionalChainRoot(expression) && !ts.isNullishCoalesce(expression.parent)) {
                 return unreachableFlow;
             }
@@ -42347,26 +43328,26 @@
         function isStatementCondition(node) {
             var parent = node.parent;
             switch (parent.kind) {
-                case 235 /* IfStatement */:
-                case 237 /* WhileStatement */:
-                case 236 /* DoStatement */:
+                case 237 /* IfStatement */:
+                case 239 /* WhileStatement */:
+                case 238 /* DoStatement */:
                     return parent.expression === node;
-                case 238 /* ForStatement */:
-                case 218 /* ConditionalExpression */:
+                case 240 /* ForStatement */:
+                case 220 /* ConditionalExpression */:
                     return parent.condition === node;
             }
             return false;
         }
         function isLogicalExpression(node) {
             while (true) {
-                if (node.kind === 208 /* ParenthesizedExpression */) {
+                if (node.kind === 210 /* ParenthesizedExpression */) {
                     node = node.expression;
                 }
-                else if (node.kind === 215 /* PrefixUnaryExpression */ && node.operator === 53 /* ExclamationToken */) {
+                else if (node.kind === 217 /* PrefixUnaryExpression */ && node.operator === 53 /* ExclamationToken */) {
                     node = node.operand;
                 }
                 else {
-                    return node.kind === 217 /* BinaryExpression */ && (node.operatorToken.kind === 55 /* AmpersandAmpersandToken */ ||
+                    return node.kind === 219 /* BinaryExpression */ && (node.operatorToken.kind === 55 /* AmpersandAmpersandToken */ ||
                         node.operatorToken.kind === 56 /* BarBarToken */ ||
                         node.operatorToken.kind === 60 /* QuestionQuestionToken */);
                 }
@@ -42413,7 +43394,7 @@
         }
         function setContinueTarget(node, target) {
             var label = activeLabelList;
-            while (label && node.parent.kind === 246 /* LabeledStatement */) {
+            while (label && node.parent.kind === 248 /* LabeledStatement */) {
                 label.continueTarget = target;
                 label = label.next;
                 node = node.parent;
@@ -42464,12 +43445,12 @@
             bind(node.expression);
             addAntecedent(preLoopLabel, currentFlow);
             currentFlow = preLoopLabel;
-            if (node.kind === 240 /* ForOfStatement */) {
+            if (node.kind === 242 /* ForOfStatement */) {
                 bind(node.awaitModifier);
             }
             addAntecedent(postLoopLabel, currentFlow);
             bind(node.initializer);
-            if (node.initializer.kind !== 251 /* VariableDeclarationList */) {
+            if (node.initializer.kind !== 253 /* VariableDeclarationList */) {
                 bindAssignmentTargetFlow(node.initializer);
             }
             bindIterativeStatement(node.statement, postLoopLabel, preLoopLabel);
@@ -42491,7 +43472,7 @@
         }
         function bindReturnOrThrow(node) {
             bind(node.expression);
-            if (node.kind === 243 /* ReturnStatement */) {
+            if (node.kind === 245 /* ReturnStatement */) {
                 hasExplicitReturn = true;
                 if (currentReturnTarget) {
                     addAntecedent(currentReturnTarget, currentFlow);
@@ -42508,7 +43489,7 @@
             return undefined;
         }
         function bindBreakOrContinueFlow(node, breakTarget, continueTarget) {
-            var flowLabel = node.kind === 242 /* BreakStatement */ ? breakTarget : continueTarget;
+            var flowLabel = node.kind === 244 /* BreakStatement */ ? breakTarget : continueTarget;
             if (flowLabel) {
                 addAntecedent(flowLabel, currentFlow);
                 currentFlow = unreachableFlow;
@@ -42613,7 +43594,7 @@
             preSwitchCaseFlow = currentFlow;
             bind(node.caseBlock);
             addAntecedent(postSwitchLabel, currentFlow);
-            var hasDefault = ts.forEach(node.caseBlock.clauses, function (c) { return c.kind === 286 /* DefaultClause */; });
+            var hasDefault = ts.forEach(node.caseBlock.clauses, function (c) { return c.kind === 288 /* DefaultClause */; });
             // We mark a switch statement as possibly exhaustive if it has no default clause and if all
             // case clauses have unreachable end points (e.g. they all return). Note, we no longer need
             // this property in control flow analysis, it's there only for backwards compatibility.
@@ -42661,9 +43642,9 @@
         function maybeBindExpressionFlowIfCall(node) {
             // A top level or LHS of comma expression call expression with a dotted function name and at least one argument
             // is potentially an assertion and is therefore included in the control flow.
-            if (node.kind === 204 /* CallExpression */) {
+            if (node.kind === 206 /* CallExpression */) {
                 var call = node;
-                if (call.expression.kind !== 105 /* SuperKeyword */ && ts.isDottedName(call.expression)) {
+                if (call.expression.kind !== 106 /* SuperKeyword */ && ts.isDottedName(call.expression)) {
                     currentFlow = createFlowCall(currentFlow, call);
                 }
             }
@@ -42687,7 +43668,7 @@
             currentFlow = finishFlowLabel(postStatementLabel);
         }
         function bindDestructuringTargetFlow(node) {
-            if (node.kind === 217 /* BinaryExpression */ && node.operatorToken.kind === 62 /* EqualsToken */) {
+            if (node.kind === 219 /* BinaryExpression */ && node.operatorToken.kind === 63 /* EqualsToken */) {
                 bindAssignmentTargetFlow(node.left);
             }
             else {
@@ -42698,10 +43679,10 @@
             if (isNarrowableReference(node)) {
                 currentFlow = createFlowMutation(16 /* Assignment */, currentFlow, node);
             }
-            else if (node.kind === 200 /* ArrayLiteralExpression */) {
+            else if (node.kind === 202 /* ArrayLiteralExpression */) {
                 for (var _i = 0, _a = node.elements; _i < _a.length; _i++) {
                     var e = _a[_i];
-                    if (e.kind === 221 /* SpreadElement */) {
+                    if (e.kind === 223 /* SpreadElement */) {
                         bindAssignmentTargetFlow(e.expression);
                     }
                     else {
@@ -42709,16 +43690,16 @@
                     }
                 }
             }
-            else if (node.kind === 201 /* ObjectLiteralExpression */) {
+            else if (node.kind === 203 /* ObjectLiteralExpression */) {
                 for (var _b = 0, _c = node.properties; _b < _c.length; _b++) {
                     var p = _c[_b];
-                    if (p.kind === 289 /* PropertyAssignment */) {
+                    if (p.kind === 291 /* PropertyAssignment */) {
                         bindDestructuringTargetFlow(p.initializer);
                     }
-                    else if (p.kind === 290 /* ShorthandPropertyAssignment */) {
+                    else if (p.kind === 292 /* ShorthandPropertyAssignment */) {
                         bindAssignmentTargetFlow(p.name);
                     }
-                    else if (p.kind === 291 /* SpreadAssignment */) {
+                    else if (p.kind === 293 /* SpreadAssignment */) {
                         bindAssignmentTargetFlow(p.expression);
                     }
                 }
@@ -42726,7 +43707,7 @@
         }
         function bindLogicalLikeExpression(node, trueTarget, falseTarget) {
             var preRightLabel = createBranchLabel();
-            if (node.operatorToken.kind === 55 /* AmpersandAmpersandToken */ || node.operatorToken.kind === 75 /* AmpersandAmpersandEqualsToken */) {
+            if (node.operatorToken.kind === 55 /* AmpersandAmpersandToken */ || node.operatorToken.kind === 76 /* AmpersandAmpersandEqualsToken */) {
                 bindCondition(node.left, preRightLabel, falseTarget);
             }
             else {
@@ -42850,7 +43831,7 @@
                     var operator = node.operatorToken.kind;
                     if (ts.isAssignmentOperator(operator) && !ts.isAssignmentTarget(node)) {
                         bindAssignmentTargetFlow(node.left);
-                        if (operator === 62 /* EqualsToken */ && node.left.kind === 203 /* ElementAccessExpression */) {
+                        if (operator === 63 /* EqualsToken */ && node.left.kind === 205 /* ElementAccessExpression */) {
                             var elementAccess = node.left;
                             if (isNarrowableOperand(elementAccess.expression)) {
                                 currentFlow = createFlowMutation(256 /* ArrayMutation */, currentFlow, node);
@@ -42878,7 +43859,7 @@
         }
         function bindDeleteExpressionFlow(node) {
             bindEachChild(node);
-            if (node.expression.kind === 202 /* PropertyAccessExpression */) {
+            if (node.expression.kind === 204 /* PropertyAccessExpression */) {
                 bindAssignmentTargetFlow(node.expression);
             }
         }
@@ -42934,16 +43915,20 @@
             }
         }
         function bindJSDocTypeAlias(node) {
-            ts.setParent(node.tagName, node);
-            if (node.kind !== 329 /* JSDocEnumTag */ && node.fullName) {
+            bind(node.tagName);
+            if (node.kind !== 334 /* JSDocEnumTag */ && node.fullName) {
+                // don't bind the type name yet; that's delayed until delayedBindJSDocTypedefTag
                 ts.setParent(node.fullName, node);
                 ts.setParentRecursive(node.fullName, /*incremental*/ false);
             }
+            if (typeof node.comment !== "string") {
+                bindEach(node.comment);
+            }
         }
         function bindJSDocClassTag(node) {
             bindEachChild(node);
             var host = ts.getHostSignatureFromJSDoc(node);
-            if (host && host.kind !== 166 /* MethodDeclaration */) {
+            if (host && host.kind !== 167 /* MethodDeclaration */) {
                 addDeclarationToSymbol(host.symbol, host, 32 /* Class */);
             }
         }
@@ -42956,15 +43941,15 @@
         }
         function bindOptionalChainRest(node) {
             switch (node.kind) {
-                case 202 /* PropertyAccessExpression */:
+                case 204 /* PropertyAccessExpression */:
                     bind(node.questionDotToken);
                     bind(node.name);
                     break;
-                case 203 /* ElementAccessExpression */:
+                case 205 /* ElementAccessExpression */:
                     bind(node.questionDotToken);
                     bind(node.argumentExpression);
                     break;
-                case 204 /* CallExpression */:
+                case 206 /* CallExpression */:
                     bind(node.questionDotToken);
                     bindEach(node.typeArguments);
                     bindEach(node.arguments);
@@ -43029,19 +44014,19 @@
                 // an immediately invoked function expression (IIFE). Initialize the flowNode property to
                 // the current control flow (which includes evaluation of the IIFE arguments).
                 var expr = ts.skipParentheses(node.expression);
-                if (expr.kind === 209 /* FunctionExpression */ || expr.kind === 210 /* ArrowFunction */) {
+                if (expr.kind === 211 /* FunctionExpression */ || expr.kind === 212 /* ArrowFunction */) {
                     bindEach(node.typeArguments);
                     bindEach(node.arguments);
                     bind(node.expression);
                 }
                 else {
                     bindEachChild(node);
-                    if (node.expression.kind === 105 /* SuperKeyword */) {
+                    if (node.expression.kind === 106 /* SuperKeyword */) {
                         currentFlow = createFlowCall(currentFlow, node);
                     }
                 }
             }
-            if (node.expression.kind === 202 /* PropertyAccessExpression */) {
+            if (node.expression.kind === 204 /* PropertyAccessExpression */) {
                 var propertyAccess = node.expression;
                 if (ts.isIdentifier(propertyAccess.name) && isNarrowableOperand(propertyAccess.expression) && ts.isPushOrUnshiftIdentifier(propertyAccess.name)) {
                     currentFlow = createFlowMutation(256 /* ArrayMutation */, currentFlow, node);
@@ -43050,54 +44035,55 @@
         }
         function getContainerFlags(node) {
             switch (node.kind) {
-                case 222 /* ClassExpression */:
-                case 253 /* ClassDeclaration */:
-                case 256 /* EnumDeclaration */:
-                case 201 /* ObjectLiteralExpression */:
-                case 178 /* TypeLiteral */:
-                case 314 /* JSDocTypeLiteral */:
-                case 282 /* JsxAttributes */:
+                case 224 /* ClassExpression */:
+                case 255 /* ClassDeclaration */:
+                case 258 /* EnumDeclaration */:
+                case 203 /* ObjectLiteralExpression */:
+                case 180 /* TypeLiteral */:
+                case 317 /* JSDocTypeLiteral */:
+                case 284 /* JsxAttributes */:
                     return 1 /* IsContainer */;
-                case 254 /* InterfaceDeclaration */:
+                case 256 /* InterfaceDeclaration */:
                     return 1 /* IsContainer */ | 64 /* IsInterface */;
-                case 257 /* ModuleDeclaration */:
-                case 255 /* TypeAliasDeclaration */:
-                case 191 /* MappedType */:
+                case 259 /* ModuleDeclaration */:
+                case 257 /* TypeAliasDeclaration */:
+                case 193 /* MappedType */:
                     return 1 /* IsContainer */ | 32 /* HasLocals */;
-                case 298 /* SourceFile */:
+                case 300 /* SourceFile */:
                     return 1 /* IsContainer */ | 4 /* IsControlFlowContainer */ | 32 /* HasLocals */;
-                case 166 /* MethodDeclaration */:
+                case 167 /* MethodDeclaration */:
                     if (ts.isObjectLiteralOrClassExpressionMethod(node)) {
                         return 1 /* IsContainer */ | 4 /* IsControlFlowContainer */ | 32 /* HasLocals */ | 8 /* IsFunctionLike */ | 128 /* IsObjectLiteralOrClassExpressionMethod */;
                     }
                 // falls through
-                case 167 /* Constructor */:
-                case 252 /* FunctionDeclaration */:
-                case 165 /* MethodSignature */:
-                case 168 /* GetAccessor */:
-                case 169 /* SetAccessor */:
-                case 170 /* CallSignature */:
-                case 315 /* JSDocSignature */:
-                case 309 /* JSDocFunctionType */:
-                case 175 /* FunctionType */:
-                case 171 /* ConstructSignature */:
-                case 172 /* IndexSignature */:
-                case 176 /* ConstructorType */:
+                case 169 /* Constructor */:
+                case 254 /* FunctionDeclaration */:
+                case 166 /* MethodSignature */:
+                case 170 /* GetAccessor */:
+                case 171 /* SetAccessor */:
+                case 172 /* CallSignature */:
+                case 318 /* JSDocSignature */:
+                case 312 /* JSDocFunctionType */:
+                case 177 /* FunctionType */:
+                case 173 /* ConstructSignature */:
+                case 174 /* IndexSignature */:
+                case 178 /* ConstructorType */:
+                case 168 /* ClassStaticBlockDeclaration */:
                     return 1 /* IsContainer */ | 4 /* IsControlFlowContainer */ | 32 /* HasLocals */ | 8 /* IsFunctionLike */;
-                case 209 /* FunctionExpression */:
-                case 210 /* ArrowFunction */:
+                case 211 /* FunctionExpression */:
+                case 212 /* ArrowFunction */:
                     return 1 /* IsContainer */ | 4 /* IsControlFlowContainer */ | 32 /* HasLocals */ | 8 /* IsFunctionLike */ | 16 /* IsFunctionExpression */;
-                case 258 /* ModuleBlock */:
+                case 260 /* ModuleBlock */:
                     return 4 /* IsControlFlowContainer */;
-                case 164 /* PropertyDeclaration */:
+                case 165 /* PropertyDeclaration */:
                     return node.initializer ? 4 /* IsControlFlowContainer */ : 0;
-                case 288 /* CatchClause */:
-                case 238 /* ForStatement */:
-                case 239 /* ForInStatement */:
-                case 240 /* ForOfStatement */:
-                case 259 /* CaseBlock */:
+                case 290 /* CatchClause */:
+                case 240 /* ForStatement */:
+                case 241 /* ForInStatement */:
+                case 242 /* ForOfStatement */:
+                case 261 /* CaseBlock */:
                     return 2 /* IsBlockScopedContainer */;
-                case 231 /* Block */:
+                case 233 /* Block */:
                     // do not treat blocks directly inside a function as a block-scoped-container.
                     // Locals that reside in this block should go to the function locals. Otherwise 'x'
                     // would not appear to be a redeclaration of a block scoped local in the following
@@ -43114,7 +44100,7 @@
                     // By not creating a new block-scoped-container here, we ensure that both 'var x'
                     // and 'let x' go into the Function-container's locals, and we do get a collision
                     // conflict.
-                    return ts.isFunctionLike(node.parent) ? 0 /* None */ : 2 /* IsBlockScopedContainer */;
+                    return ts.isFunctionLike(node.parent) || ts.isClassStaticBlockDeclaration(node.parent) ? 0 /* None */ : 2 /* IsBlockScopedContainer */;
             }
             return 0 /* None */;
         }
@@ -43130,45 +44116,46 @@
                 // members are declared (for example, a member of a class will go into a specific
                 // symbol table depending on if it is static or not). We defer to specialized
                 // handlers to take care of declaring these child members.
-                case 257 /* ModuleDeclaration */:
+                case 259 /* ModuleDeclaration */:
                     return declareModuleMember(node, symbolFlags, symbolExcludes);
-                case 298 /* SourceFile */:
+                case 300 /* SourceFile */:
                     return declareSourceFileMember(node, symbolFlags, symbolExcludes);
-                case 222 /* ClassExpression */:
-                case 253 /* ClassDeclaration */:
+                case 224 /* ClassExpression */:
+                case 255 /* ClassDeclaration */:
                     return declareClassMember(node, symbolFlags, symbolExcludes);
-                case 256 /* EnumDeclaration */:
+                case 258 /* EnumDeclaration */:
                     return declareSymbol(container.symbol.exports, container.symbol, node, symbolFlags, symbolExcludes);
-                case 178 /* TypeLiteral */:
-                case 314 /* JSDocTypeLiteral */:
-                case 201 /* ObjectLiteralExpression */:
-                case 254 /* InterfaceDeclaration */:
-                case 282 /* JsxAttributes */:
+                case 180 /* TypeLiteral */:
+                case 317 /* JSDocTypeLiteral */:
+                case 203 /* ObjectLiteralExpression */:
+                case 256 /* InterfaceDeclaration */:
+                case 284 /* JsxAttributes */:
                     // Interface/Object-types always have their children added to the 'members' of
                     // their container. They are only accessible through an instance of their
                     // container, and are never in scope otherwise (even inside the body of the
                     // object / type / interface declaring them). An exception is type parameters,
                     // which are in scope without qualification (similar to 'locals').
                     return declareSymbol(container.symbol.members, container.symbol, node, symbolFlags, symbolExcludes);
-                case 175 /* FunctionType */:
-                case 176 /* ConstructorType */:
-                case 170 /* CallSignature */:
-                case 171 /* ConstructSignature */:
-                case 315 /* JSDocSignature */:
-                case 172 /* IndexSignature */:
-                case 166 /* MethodDeclaration */:
-                case 165 /* MethodSignature */:
-                case 167 /* Constructor */:
-                case 168 /* GetAccessor */:
-                case 169 /* SetAccessor */:
-                case 252 /* FunctionDeclaration */:
-                case 209 /* FunctionExpression */:
-                case 210 /* ArrowFunction */:
-                case 309 /* JSDocFunctionType */:
-                case 335 /* JSDocTypedefTag */:
-                case 328 /* JSDocCallbackTag */:
-                case 255 /* TypeAliasDeclaration */:
-                case 191 /* MappedType */:
+                case 177 /* FunctionType */:
+                case 178 /* ConstructorType */:
+                case 172 /* CallSignature */:
+                case 173 /* ConstructSignature */:
+                case 318 /* JSDocSignature */:
+                case 174 /* IndexSignature */:
+                case 167 /* MethodDeclaration */:
+                case 166 /* MethodSignature */:
+                case 169 /* Constructor */:
+                case 170 /* GetAccessor */:
+                case 171 /* SetAccessor */:
+                case 254 /* FunctionDeclaration */:
+                case 211 /* FunctionExpression */:
+                case 212 /* ArrowFunction */:
+                case 312 /* JSDocFunctionType */:
+                case 340 /* JSDocTypedefTag */:
+                case 333 /* JSDocCallbackTag */:
+                case 168 /* ClassStaticBlockDeclaration */:
+                case 257 /* TypeAliasDeclaration */:
+                case 193 /* MappedType */:
                     // All the children of these container types are never visible through another
                     // symbol (i.e. through another symbol's 'exports' or 'members').  Instead,
                     // they're only accessed 'lexically' (i.e. from code that exists underneath
@@ -43179,7 +44166,7 @@
             }
         }
         function declareClassMember(node, symbolFlags, symbolExcludes) {
-            return ts.hasSyntacticModifier(node, 32 /* Static */)
+            return ts.isStatic(node)
                 ? declareSymbol(container.symbol.exports, container.symbol, node, symbolFlags, symbolExcludes)
                 : declareSymbol(container.symbol.members, container.symbol, node, symbolFlags, symbolExcludes);
         }
@@ -43215,15 +44202,13 @@
                     var pattern = void 0;
                     if (node.name.kind === 10 /* StringLiteral */) {
                         var text = node.name.text;
-                        if (ts.hasZeroOrOneAsteriskCharacter(text)) {
-                            pattern = ts.tryParsePattern(text);
-                        }
-                        else {
+                        pattern = ts.tryParsePattern(text);
+                        if (pattern === undefined) {
                             errorOnFirstToken(node.name, ts.Diagnostics.Pattern_0_can_have_at_most_one_Asterisk_character, text);
                         }
                     }
                     var symbol = declareSymbolAndAddToSymbolTable(node, 512 /* ValueModule */, 110735 /* ValueModuleExcludes */);
-                    file.patternAmbientModules = ts.append(file.patternAmbientModules, pattern && { pattern: pattern, symbol: symbol });
+                    file.patternAmbientModules = ts.append(file.patternAmbientModules, pattern && !ts.isString(pattern) ? { pattern: pattern, symbol: symbol } : undefined);
                 }
             }
             else {
@@ -43269,7 +44254,7 @@
                 var seen = new ts.Map();
                 for (var _i = 0, _a = node.properties; _i < _a.length; _i++) {
                     var prop = _a[_i];
-                    if (prop.kind === 291 /* SpreadAssignment */ || prop.name.kind !== 78 /* Identifier */) {
+                    if (prop.kind === 293 /* SpreadAssignment */ || prop.name.kind !== 79 /* Identifier */) {
                         continue;
                     }
                     var identifier = prop.name;
@@ -43281,7 +44266,7 @@
                     //    c.IsAccessorDescriptor(previous) is true and IsDataDescriptor(propId.descriptor) is true.
                     //    d.IsAccessorDescriptor(previous) is true and IsAccessorDescriptor(propId.descriptor) is true
                     // and either both previous and propId.descriptor have[[Get]] fields or both previous and propId.descriptor have[[Set]] fields
-                    var currentKind = prop.kind === 289 /* PropertyAssignment */ || prop.kind === 290 /* ShorthandPropertyAssignment */ || prop.kind === 166 /* MethodDeclaration */
+                    var currentKind = prop.kind === 291 /* PropertyAssignment */ || prop.kind === 292 /* ShorthandPropertyAssignment */ || prop.kind === 167 /* MethodDeclaration */
                         ? 1 /* Property */
                         : 2 /* Accessor */;
                     var existingKind = seen.get(identifier.escapedText);
@@ -43313,10 +44298,10 @@
         }
         function bindBlockScopedDeclaration(node, symbolFlags, symbolExcludes) {
             switch (blockScopeContainer.kind) {
-                case 257 /* ModuleDeclaration */:
+                case 259 /* ModuleDeclaration */:
                     declareModuleMember(node, symbolFlags, symbolExcludes);
                     break;
-                case 298 /* SourceFile */:
+                case 300 /* SourceFile */:
                     if (ts.isExternalOrCommonJsModule(container)) {
                         declareModuleMember(node, symbolFlags, symbolExcludes);
                         break;
@@ -43384,7 +44369,7 @@
                         container = oldContainer;
                     }
                 }
-                else if (ts.isJSDocEnumTag(typeAlias) || !typeAlias.fullName || typeAlias.fullName.kind === 78 /* Identifier */) {
+                else if (ts.isJSDocEnumTag(typeAlias) || !typeAlias.fullName || typeAlias.fullName.kind === 79 /* Identifier */) {
                     parent = typeAlias.parent;
                     bindBlockScopedDeclaration(typeAlias, 524288 /* TypeAlias */, 788968 /* TypeAliasExcludes */);
                 }
@@ -43409,11 +44394,11 @@
                 !ts.isIdentifierName(node)) {
                 // strict mode identifiers
                 if (inStrictMode &&
-                    node.originalKeywordKind >= 116 /* FirstFutureReservedWord */ &&
-                    node.originalKeywordKind <= 124 /* LastFutureReservedWord */) {
+                    node.originalKeywordKind >= 117 /* FirstFutureReservedWord */ &&
+                    node.originalKeywordKind <= 125 /* LastFutureReservedWord */) {
                     file.bindDiagnostics.push(createDiagnosticForNode(node, getStrictModeIdentifierMessage(node), ts.declarationNameToString(node)));
                 }
-                else if (node.originalKeywordKind === 130 /* AwaitKeyword */) {
+                else if (node.originalKeywordKind === 131 /* AwaitKeyword */) {
                     if (ts.isExternalModule(file) && ts.isInTopLevelContext(node)) {
                         file.bindDiagnostics.push(createDiagnosticForNode(node, ts.Diagnostics.Identifier_expected_0_is_a_reserved_word_at_the_top_level_of_a_module, ts.declarationNameToString(node)));
                     }
@@ -43421,7 +44406,7 @@
                         file.bindDiagnostics.push(createDiagnosticForNode(node, ts.Diagnostics.Identifier_expected_0_is_a_reserved_word_that_cannot_be_used_here, ts.declarationNameToString(node)));
                     }
                 }
-                else if (node.originalKeywordKind === 124 /* YieldKeyword */ && node.flags & 8192 /* YieldContext */) {
+                else if (node.originalKeywordKind === 125 /* YieldKeyword */ && node.flags & 8192 /* YieldContext */) {
                     file.bindDiagnostics.push(createDiagnosticForNode(node, ts.Diagnostics.Identifier_expected_0_is_a_reserved_word_that_cannot_be_used_here, ts.declarationNameToString(node)));
                 }
             }
@@ -43463,7 +44448,7 @@
         }
         function checkStrictModeDeleteExpression(node) {
             // Grammar checking
-            if (inStrictMode && node.expression.kind === 78 /* Identifier */) {
+            if (inStrictMode && node.expression.kind === 79 /* Identifier */) {
                 // When a delete operator occurs within strict mode code, a SyntaxError is thrown if its
                 // UnaryExpression is a direct reference to a variable, function argument, or function name
                 var span = ts.getErrorSpanForNode(file, node.expression);
@@ -43474,7 +44459,7 @@
             return ts.isIdentifier(node) && (node.escapedText === "eval" || node.escapedText === "arguments");
         }
         function checkStrictModeEvalOrArguments(contextNode, name) {
-            if (name && name.kind === 78 /* Identifier */) {
+            if (name && name.kind === 79 /* Identifier */) {
                 var identifier = name;
                 if (isEvalOrArgumentsIdentifier(identifier)) {
                     // We check first if the name is inside class declaration or class expression; if so give explicit message
@@ -43488,7 +44473,7 @@
             // Provide specialized messages to help the user understand why we think they're in
             // strict mode.
             if (ts.getContainingClass(node)) {
-                return ts.Diagnostics.Invalid_use_of_0_Class_definitions_are_automatically_in_strict_mode;
+                return ts.Diagnostics.Code_contained_in_a_class_is_evaluated_in_JavaScript_s_strict_mode_which_does_not_allow_this_use_of_0_For_more_information_see_https_Colon_Slash_Slashdeveloper_mozilla_org_Slashen_US_Slashdocs_SlashWeb_SlashJavaScript_SlashReference_SlashStrict_mode;
             }
             if (file.externalModuleIndicator) {
                 return ts.Diagnostics.Invalid_use_of_0_Modules_are_automatically_in_strict_mode;
@@ -43515,9 +44500,9 @@
         function checkStrictModeFunctionDeclaration(node) {
             if (languageVersion < 2 /* ES2015 */) {
                 // Report error if function is not top level function declaration
-                if (blockScopeContainer.kind !== 298 /* SourceFile */ &&
-                    blockScopeContainer.kind !== 257 /* ModuleDeclaration */ &&
-                    !ts.isFunctionLike(blockScopeContainer)) {
+                if (blockScopeContainer.kind !== 300 /* SourceFile */ &&
+                    blockScopeContainer.kind !== 259 /* ModuleDeclaration */ &&
+                    !ts.isFunctionLikeOrClassStaticBlockDeclaration(blockScopeContainer)) {
                     // We check first if the name is inside class declaration or class expression; if so give explicit message
                     // otherwise report generic error message.
                     var errorSpan = ts.getErrorSpanForNode(file, node);
@@ -43611,7 +44596,7 @@
             // the current 'container' node when it changes. This helps us know which symbol table
             // a local should go into for example. Since terminal nodes are known not to have
             // children, as an optimization we don't process those.
-            if (node.kind > 157 /* LastToken */) {
+            if (node.kind > 158 /* LastToken */) {
                 var saveParent = parent;
                 parent = node;
                 var containerFlags = getContainerFlags(node);
@@ -43673,7 +44658,7 @@
         function bindWorker(node) {
             switch (node.kind) {
                 /* Strict mode checks */
-                case 78 /* Identifier */:
+                case 79 /* Identifier */:
                     // for typedef type names with namespaces, bind the new jsdoc type symbol here
                     // because it requires all containing namespaces to be in effect, namely the
                     // current "blockScopeContainer" needs to be set to its immediate namespace parent.
@@ -43686,24 +44671,24 @@
                         break;
                     }
                 // falls through
-                case 107 /* ThisKeyword */:
-                    if (currentFlow && (ts.isExpression(node) || parent.kind === 290 /* ShorthandPropertyAssignment */)) {
+                case 108 /* ThisKeyword */:
+                    if (currentFlow && (ts.isExpression(node) || parent.kind === 292 /* ShorthandPropertyAssignment */)) {
                         node.flowNode = currentFlow;
                     }
                     return checkContextualIdentifier(node);
-                case 158 /* QualifiedName */:
-                    if (currentFlow && parent.kind === 177 /* TypeQuery */) {
+                case 159 /* QualifiedName */:
+                    if (currentFlow && ts.isPartOfTypeQuery(node)) {
                         node.flowNode = currentFlow;
                     }
                     break;
-                case 227 /* MetaProperty */:
-                case 105 /* SuperKeyword */:
+                case 229 /* MetaProperty */:
+                case 106 /* SuperKeyword */:
                     node.flowNode = currentFlow;
                     break;
-                case 79 /* PrivateIdentifier */:
+                case 80 /* PrivateIdentifier */:
                     return checkPrivateIdentifier(node);
-                case 202 /* PropertyAccessExpression */:
-                case 203 /* ElementAccessExpression */:
+                case 204 /* PropertyAccessExpression */:
+                case 205 /* ElementAccessExpression */:
                     var expr = node;
                     if (currentFlow && isNarrowableReference(expr)) {
                         expr.flowNode = currentFlow;
@@ -43718,7 +44703,7 @@
                         declareSymbol(file.locals, /*parent*/ undefined, expr.expression, 1 /* FunctionScopedVariable */ | 134217728 /* ModuleExports */, 111550 /* FunctionScopedVariableExcludes */);
                     }
                     break;
-                case 217 /* BinaryExpression */:
+                case 219 /* BinaryExpression */:
                     var specialKind = ts.getAssignmentDeclarationKind(node);
                     switch (specialKind) {
                         case 1 /* ExportsProperty */:
@@ -43754,78 +44739,78 @@
                             ts.Debug.fail("Unknown binary expression special property assignment kind");
                     }
                     return checkStrictModeBinaryExpression(node);
-                case 288 /* CatchClause */:
+                case 290 /* CatchClause */:
                     return checkStrictModeCatchClause(node);
-                case 211 /* DeleteExpression */:
+                case 213 /* DeleteExpression */:
                     return checkStrictModeDeleteExpression(node);
                 case 8 /* NumericLiteral */:
                     return checkStrictModeNumericLiteral(node);
-                case 216 /* PostfixUnaryExpression */:
+                case 218 /* PostfixUnaryExpression */:
                     return checkStrictModePostfixUnaryExpression(node);
-                case 215 /* PrefixUnaryExpression */:
+                case 217 /* PrefixUnaryExpression */:
                     return checkStrictModePrefixUnaryExpression(node);
-                case 244 /* WithStatement */:
+                case 246 /* WithStatement */:
                     return checkStrictModeWithStatement(node);
-                case 246 /* LabeledStatement */:
+                case 248 /* LabeledStatement */:
                     return checkStrictModeLabeledStatement(node);
-                case 188 /* ThisType */:
+                case 190 /* ThisType */:
                     seenThisKeyword = true;
                     return;
-                case 173 /* TypePredicate */:
+                case 175 /* TypePredicate */:
                     break; // Binding the children will handle everything
-                case 160 /* TypeParameter */:
+                case 161 /* TypeParameter */:
                     return bindTypeParameter(node);
-                case 161 /* Parameter */:
+                case 162 /* Parameter */:
                     return bindParameter(node);
-                case 250 /* VariableDeclaration */:
+                case 252 /* VariableDeclaration */:
                     return bindVariableDeclarationOrBindingElement(node);
-                case 199 /* BindingElement */:
+                case 201 /* BindingElement */:
                     node.flowNode = currentFlow;
                     return bindVariableDeclarationOrBindingElement(node);
-                case 164 /* PropertyDeclaration */:
-                case 163 /* PropertySignature */:
+                case 165 /* PropertyDeclaration */:
+                case 164 /* PropertySignature */:
                     return bindPropertyWorker(node);
-                case 289 /* PropertyAssignment */:
-                case 290 /* ShorthandPropertyAssignment */:
+                case 291 /* PropertyAssignment */:
+                case 292 /* ShorthandPropertyAssignment */:
                     return bindPropertyOrMethodOrAccessor(node, 4 /* Property */, 0 /* PropertyExcludes */);
-                case 292 /* EnumMember */:
+                case 294 /* EnumMember */:
                     return bindPropertyOrMethodOrAccessor(node, 8 /* EnumMember */, 900095 /* EnumMemberExcludes */);
-                case 170 /* CallSignature */:
-                case 171 /* ConstructSignature */:
-                case 172 /* IndexSignature */:
+                case 172 /* CallSignature */:
+                case 173 /* ConstructSignature */:
+                case 174 /* IndexSignature */:
                     return declareSymbolAndAddToSymbolTable(node, 131072 /* Signature */, 0 /* None */);
-                case 166 /* MethodDeclaration */:
-                case 165 /* MethodSignature */:
+                case 167 /* MethodDeclaration */:
+                case 166 /* MethodSignature */:
                     // If this is an ObjectLiteralExpression method, then it sits in the same space
                     // as other properties in the object literal.  So we use SymbolFlags.PropertyExcludes
                     // so that it will conflict with any other object literal members with the same
                     // name.
                     return bindPropertyOrMethodOrAccessor(node, 8192 /* Method */ | (node.questionToken ? 16777216 /* Optional */ : 0 /* None */), ts.isObjectLiteralMethod(node) ? 0 /* PropertyExcludes */ : 103359 /* MethodExcludes */);
-                case 252 /* FunctionDeclaration */:
+                case 254 /* FunctionDeclaration */:
                     return bindFunctionDeclaration(node);
-                case 167 /* Constructor */:
+                case 169 /* Constructor */:
                     return declareSymbolAndAddToSymbolTable(node, 16384 /* Constructor */, /*symbolExcludes:*/ 0 /* None */);
-                case 168 /* GetAccessor */:
+                case 170 /* GetAccessor */:
                     return bindPropertyOrMethodOrAccessor(node, 32768 /* GetAccessor */, 46015 /* GetAccessorExcludes */);
-                case 169 /* SetAccessor */:
+                case 171 /* SetAccessor */:
                     return bindPropertyOrMethodOrAccessor(node, 65536 /* SetAccessor */, 78783 /* SetAccessorExcludes */);
-                case 175 /* FunctionType */:
-                case 309 /* JSDocFunctionType */:
-                case 315 /* JSDocSignature */:
-                case 176 /* ConstructorType */:
+                case 177 /* FunctionType */:
+                case 312 /* JSDocFunctionType */:
+                case 318 /* JSDocSignature */:
+                case 178 /* ConstructorType */:
                     return bindFunctionOrConstructorType(node);
-                case 178 /* TypeLiteral */:
-                case 314 /* JSDocTypeLiteral */:
-                case 191 /* MappedType */:
+                case 180 /* TypeLiteral */:
+                case 317 /* JSDocTypeLiteral */:
+                case 193 /* MappedType */:
                     return bindAnonymousTypeWorker(node);
-                case 322 /* JSDocClassTag */:
+                case 327 /* JSDocClassTag */:
                     return bindJSDocClassTag(node);
-                case 201 /* ObjectLiteralExpression */:
+                case 203 /* ObjectLiteralExpression */:
                     return bindObjectLiteralExpression(node);
-                case 209 /* FunctionExpression */:
-                case 210 /* ArrowFunction */:
+                case 211 /* FunctionExpression */:
+                case 212 /* ArrowFunction */:
                     return bindFunctionExpression(node);
-                case 204 /* CallExpression */:
+                case 206 /* CallExpression */:
                     var assignmentKind = ts.getAssignmentDeclarationKind(node);
                     switch (assignmentKind) {
                         case 7 /* ObjectDefinePropertyValue */:
@@ -43844,65 +44829,65 @@
                     }
                     break;
                 // Members of classes, interfaces, and modules
-                case 222 /* ClassExpression */:
-                case 253 /* ClassDeclaration */:
+                case 224 /* ClassExpression */:
+                case 255 /* ClassDeclaration */:
                     // All classes are automatically in strict mode in ES6.
                     inStrictMode = true;
                     return bindClassLikeDeclaration(node);
-                case 254 /* InterfaceDeclaration */:
+                case 256 /* InterfaceDeclaration */:
                     return bindBlockScopedDeclaration(node, 64 /* Interface */, 788872 /* InterfaceExcludes */);
-                case 255 /* TypeAliasDeclaration */:
+                case 257 /* TypeAliasDeclaration */:
                     return bindBlockScopedDeclaration(node, 524288 /* TypeAlias */, 788968 /* TypeAliasExcludes */);
-                case 256 /* EnumDeclaration */:
+                case 258 /* EnumDeclaration */:
                     return bindEnumDeclaration(node);
-                case 257 /* ModuleDeclaration */:
+                case 259 /* ModuleDeclaration */:
                     return bindModuleDeclaration(node);
                 // Jsx-attributes
-                case 282 /* JsxAttributes */:
+                case 284 /* JsxAttributes */:
                     return bindJsxAttributes(node);
-                case 281 /* JsxAttribute */:
+                case 283 /* JsxAttribute */:
                     return bindJsxAttribute(node, 4 /* Property */, 0 /* PropertyExcludes */);
                 // Imports and exports
-                case 261 /* ImportEqualsDeclaration */:
-                case 264 /* NamespaceImport */:
-                case 266 /* ImportSpecifier */:
-                case 271 /* ExportSpecifier */:
+                case 263 /* ImportEqualsDeclaration */:
+                case 266 /* NamespaceImport */:
+                case 268 /* ImportSpecifier */:
+                case 273 /* ExportSpecifier */:
                     return declareSymbolAndAddToSymbolTable(node, 2097152 /* Alias */, 2097152 /* AliasExcludes */);
-                case 260 /* NamespaceExportDeclaration */:
+                case 262 /* NamespaceExportDeclaration */:
                     return bindNamespaceExportDeclaration(node);
-                case 263 /* ImportClause */:
+                case 265 /* ImportClause */:
                     return bindImportClause(node);
-                case 268 /* ExportDeclaration */:
+                case 270 /* ExportDeclaration */:
                     return bindExportDeclaration(node);
-                case 267 /* ExportAssignment */:
+                case 269 /* ExportAssignment */:
                     return bindExportAssignment(node);
-                case 298 /* SourceFile */:
+                case 300 /* SourceFile */:
                     updateStrictModeStatementList(node.statements);
                     return bindSourceFileIfExternalModule();
-                case 231 /* Block */:
-                    if (!ts.isFunctionLike(node.parent)) {
+                case 233 /* Block */:
+                    if (!ts.isFunctionLikeOrClassStaticBlockDeclaration(node.parent)) {
                         return;
                     }
                 // falls through
-                case 258 /* ModuleBlock */:
+                case 260 /* ModuleBlock */:
                     return updateStrictModeStatementList(node.statements);
-                case 330 /* JSDocParameterTag */:
-                    if (node.parent.kind === 315 /* JSDocSignature */) {
+                case 335 /* JSDocParameterTag */:
+                    if (node.parent.kind === 318 /* JSDocSignature */) {
                         return bindParameter(node);
                     }
-                    if (node.parent.kind !== 314 /* JSDocTypeLiteral */) {
+                    if (node.parent.kind !== 317 /* JSDocTypeLiteral */) {
                         break;
                     }
                 // falls through
-                case 337 /* JSDocPropertyTag */:
+                case 342 /* JSDocPropertyTag */:
                     var propTag = node;
-                    var flags = propTag.isBracketed || propTag.typeExpression && propTag.typeExpression.type.kind === 308 /* JSDocOptionalType */ ?
+                    var flags = propTag.isBracketed || propTag.typeExpression && propTag.typeExpression.type.kind === 311 /* JSDocOptionalType */ ?
                         4 /* Property */ | 16777216 /* Optional */ :
                         4 /* Property */;
                     return declareSymbolAndAddToSymbolTable(propTag, flags, 0 /* PropertyExcludes */);
-                case 335 /* JSDocTypedefTag */:
-                case 328 /* JSDocCallbackTag */:
-                case 329 /* JSDocEnumTag */:
+                case 340 /* JSDocTypedefTag */:
+                case 333 /* JSDocCallbackTag */:
+                case 334 /* JSDocEnumTag */:
                     return (delayedTypeAliases || (delayedTypeAliases = [])).push(node);
             }
         }
@@ -44065,11 +45050,11 @@
             }
             var thisContainer = ts.getThisContainer(node, /*includeArrowFunctions*/ false);
             switch (thisContainer.kind) {
-                case 252 /* FunctionDeclaration */:
-                case 209 /* FunctionExpression */:
+                case 254 /* FunctionDeclaration */:
+                case 211 /* FunctionExpression */:
                     var constructorSymbol = thisContainer.symbol;
                     // For `f.prototype.m = function() { this.x = 0; }`, `this.x = 0` should modify `f`'s members, not the function expression.
-                    if (ts.isBinaryExpression(thisContainer.parent) && thisContainer.parent.operatorToken.kind === 62 /* EqualsToken */) {
+                    if (ts.isBinaryExpression(thisContainer.parent) && thisContainer.parent.operatorToken.kind === 63 /* EqualsToken */) {
                         var l = thisContainer.parent.left;
                         if (ts.isBindableStaticAccessExpression(l) && ts.isPrototypeAccess(l.expression)) {
                             constructorSymbol = lookupSymbolForPropertyAccess(l.expression.expression, thisParentContainer);
@@ -44080,7 +45065,7 @@
                         constructorSymbol.members = constructorSymbol.members || ts.createSymbolTable();
                         // It's acceptable for multiple 'this' assignments of the same identifier to occur
                         if (ts.hasDynamicName(node)) {
-                            bindDynamicallyNamedThisPropertyAssignment(node, constructorSymbol);
+                            bindDynamicallyNamedThisPropertyAssignment(node, constructorSymbol, constructorSymbol.members);
                         }
                         else {
                             declareSymbol(constructorSymbol.members, constructorSymbol, node, 4 /* Property */ | 67108864 /* Assignment */, 0 /* PropertyExcludes */ & ~4 /* Property */);
@@ -44088,23 +45073,23 @@
                         addDeclarationToSymbol(constructorSymbol, constructorSymbol.valueDeclaration, 32 /* Class */);
                     }
                     break;
-                case 167 /* Constructor */:
-                case 164 /* PropertyDeclaration */:
-                case 166 /* MethodDeclaration */:
-                case 168 /* GetAccessor */:
-                case 169 /* SetAccessor */:
+                case 169 /* Constructor */:
+                case 165 /* PropertyDeclaration */:
+                case 167 /* MethodDeclaration */:
+                case 170 /* GetAccessor */:
+                case 171 /* SetAccessor */:
                     // this.foo assignment in a JavaScript class
                     // Bind this property to the containing class
                     var containingClass = thisContainer.parent;
-                    var symbolTable = ts.hasSyntacticModifier(thisContainer, 32 /* Static */) ? containingClass.symbol.exports : containingClass.symbol.members;
+                    var symbolTable = ts.isStatic(thisContainer) ? containingClass.symbol.exports : containingClass.symbol.members;
                     if (ts.hasDynamicName(node)) {
-                        bindDynamicallyNamedThisPropertyAssignment(node, containingClass.symbol);
+                        bindDynamicallyNamedThisPropertyAssignment(node, containingClass.symbol, symbolTable);
                     }
                     else {
                         declareSymbol(symbolTable, containingClass.symbol, node, 4 /* Property */ | 67108864 /* Assignment */, 0 /* None */, /*isReplaceableByMethod*/ true);
                     }
                     break;
-                case 298 /* SourceFile */:
+                case 300 /* SourceFile */:
                     // this.property = assignment in a source file -- declare symbol in exports for a module, in locals for a script
                     if (ts.hasDynamicName(node)) {
                         break;
@@ -44120,8 +45105,8 @@
                     ts.Debug.failBadSyntaxKind(thisContainer);
             }
         }
-        function bindDynamicallyNamedThisPropertyAssignment(node, symbol) {
-            bindAnonymousDeclaration(node, 4 /* Property */, "__computed" /* Computed */);
+        function bindDynamicallyNamedThisPropertyAssignment(node, symbol, symbolTable) {
+            declareSymbol(symbolTable, symbol, node, 4 /* Property */, 0 /* None */, /*isReplaceableByMethod*/ true, /*isComputedName*/ true);
             addLateBoundAssignmentDeclarationToSymbol(node, symbol);
         }
         function addLateBoundAssignmentDeclarationToSymbol(node, symbol) {
@@ -44130,10 +45115,10 @@
             }
         }
         function bindSpecialPropertyDeclaration(node) {
-            if (node.expression.kind === 107 /* ThisKeyword */) {
+            if (node.expression.kind === 108 /* ThisKeyword */) {
                 bindThisPropertyAssignment(node);
             }
-            else if (ts.isBindableStaticAccessExpression(node) && node.parent.parent.kind === 298 /* SourceFile */) {
+            else if (ts.isBindableStaticAccessExpression(node) && node.parent.parent.kind === 300 /* SourceFile */) {
                 if (ts.isPrototypeAccess(node.expression)) {
                     bindPrototypePropertyAssignment(node, node.parent);
                 }
@@ -44173,7 +45158,7 @@
         }
         function bindObjectDefinePropertyAssignment(node) {
             var namespaceSymbol = lookupSymbolForPropertyAccess(node.arguments[0]);
-            var isToplevel = node.parent.parent.kind === 298 /* SourceFile */;
+            var isToplevel = node.parent.parent.kind === 300 /* SourceFile */;
             namespaceSymbol = bindPotentiallyMissingNamespaces(namespaceSymbol, node.arguments[0], isToplevel, /*isPrototypeProperty*/ false, /*containerIsClass*/ false);
             bindPotentiallyNewExpandoMemberToNamespace(node, namespaceSymbol, /*isPrototypeProperty*/ false);
         }
@@ -44282,8 +45267,8 @@
         }
         function isTopLevelNamespaceAssignment(propertyAccess) {
             return ts.isBinaryExpression(propertyAccess.parent)
-                ? getParentOfBinaryExpression(propertyAccess.parent).parent.kind === 298 /* SourceFile */
-                : propertyAccess.parent.parent.kind === 298 /* SourceFile */;
+                ? getParentOfBinaryExpression(propertyAccess.parent).parent.kind === 300 /* SourceFile */
+                : propertyAccess.parent.parent.kind === 300 /* SourceFile */;
         }
         function bindPropertyAssignment(name, propertyAccess, isPrototypeProperty, containerIsClass) {
             var namespaceSymbol = lookupSymbolForPropertyAccess(name, container) || lookupSymbolForPropertyAccess(name, blockScopeContainer);
@@ -44362,7 +45347,7 @@
             }
         }
         function bindClassLikeDeclaration(node) {
-            if (node.kind === 253 /* ClassDeclaration */) {
+            if (node.kind === 255 /* ClassDeclaration */) {
                 bindBlockScopedDeclaration(node, 32 /* Class */, 899503 /* ClassExcludes */);
             }
             else {
@@ -44428,7 +45413,7 @@
             }
         }
         function bindParameter(node) {
-            if (node.kind === 330 /* JSDocParameterTag */ && container.kind !== 315 /* JSDocSignature */) {
+            if (node.kind === 335 /* JSDocParameterTag */ && container.kind !== 318 /* JSDocSignature */) {
                 return;
             }
             if (inStrictMode && !(node.flags & 8388608 /* Ambient */)) {
@@ -44505,7 +45490,7 @@
                     declareSymbolAndAddToSymbolTable(node, 262144 /* TypeParameter */, 526824 /* TypeParameterExcludes */);
                 }
             }
-            else if (node.parent.kind === 186 /* InferType */) {
+            else if (node.parent.kind === 188 /* InferType */) {
                 var container_2 = getInferTypeContainer(node.parent);
                 if (container_2) {
                     if (!container_2.locals) {
@@ -44533,11 +45518,11 @@
             if (currentFlow === unreachableFlow) {
                 var reportError = 
                 // report error on all statements except empty ones
-                (ts.isStatementButNotDeclaration(node) && node.kind !== 232 /* EmptyStatement */) ||
+                (ts.isStatementButNotDeclaration(node) && node.kind !== 234 /* EmptyStatement */) ||
                     // report error on class declarations
-                    node.kind === 253 /* ClassDeclaration */ ||
+                    node.kind === 255 /* ClassDeclaration */ ||
                     // report error on instantiated modules or const-enums only modules if preserveConstEnums is set
-                    (node.kind === 257 /* ModuleDeclaration */ && shouldReportErrorOnModuleDeclaration(node));
+                    (node.kind === 259 /* ModuleDeclaration */ && shouldReportErrorOnModuleDeclaration(node));
                 if (reportError) {
                     currentFlow = reportedUnreachableFlow;
                     if (!options.allowUnreachableCode) {
@@ -44581,12 +45566,12 @@
     }
     function isPurelyTypeDeclaration(s) {
         switch (s.kind) {
-            case 254 /* InterfaceDeclaration */:
-            case 255 /* TypeAliasDeclaration */:
+            case 256 /* InterfaceDeclaration */:
+            case 257 /* TypeAliasDeclaration */:
                 return true;
-            case 257 /* ModuleDeclaration */:
+            case 259 /* ModuleDeclaration */:
                 return getModuleInstanceState(s) !== 1 /* Instantiated */;
-            case 256 /* EnumDeclaration */:
+            case 258 /* EnumDeclaration */:
                 return ts.hasSyntacticModifier(s, 2048 /* Const */);
             default:
                 return false;
@@ -44630,7 +45615,7 @@
 /** @internal */
 var ts;
 (function (ts) {
-    function createGetSymbolWalker(getRestTypeOfSignature, getTypePredicateOfSignature, getReturnTypeOfSignature, getBaseTypes, resolveStructuredTypeMembers, getTypeOfSymbol, getResolvedSymbol, getIndexTypeOfStructuredType, getConstraintOfTypeParameter, getFirstIdentifier, getTypeArguments) {
+    function createGetSymbolWalker(getRestTypeOfSignature, getTypePredicateOfSignature, getReturnTypeOfSignature, getBaseTypes, resolveStructuredTypeMembers, getTypeOfSymbol, getResolvedSymbol, getConstraintOfTypeParameter, getFirstIdentifier, getTypeArguments) {
         return getSymbolWalker;
         function getSymbolWalker(accept) {
             if (accept === void 0) { accept = function () { return true; }; }
@@ -44745,22 +45730,22 @@
                 visitType(interfaceT.thisType);
             }
             function visitObjectType(type) {
-                var stringIndexType = getIndexTypeOfStructuredType(type, 0 /* String */);
-                visitType(stringIndexType);
-                var numberIndexType = getIndexTypeOfStructuredType(type, 1 /* Number */);
-                visitType(numberIndexType);
-                // The two checks above *should* have already resolved the type (if needed), so this should be cached
                 var resolved = resolveStructuredTypeMembers(type);
-                for (var _i = 0, _a = resolved.callSignatures; _i < _a.length; _i++) {
-                    var signature = _a[_i];
-                    visitSignature(signature);
+                for (var _i = 0, _a = resolved.indexInfos; _i < _a.length; _i++) {
+                    var info = _a[_i];
+                    visitType(info.keyType);
+                    visitType(info.type);
                 }
-                for (var _b = 0, _c = resolved.constructSignatures; _b < _c.length; _b++) {
+                for (var _b = 0, _c = resolved.callSignatures; _b < _c.length; _b++) {
                     var signature = _c[_b];
                     visitSignature(signature);
                 }
-                for (var _d = 0, _e = resolved.properties; _d < _e.length; _d++) {
-                    var p = _e[_d];
+                for (var _d = 0, _e = resolved.constructSignatures; _d < _e.length; _d++) {
+                    var signature = _e[_d];
+                    visitSignature(signature);
+                }
+                for (var _f = 0, _g = resolved.properties; _f < _g.length; _f++) {
+                    var p = _g[_f];
                     visitSymbol(p);
                 }
             }
@@ -44786,7 +45771,7 @@
                     //  (their type resolved directly to the member deeply referenced)
                     // So to get the intervening symbols, we need to check if there's a type
                     // query node on any of the symbol's declarations and get symbols there
-                    if (d.type && d.type.kind === 177 /* TypeQuery */) {
+                    if (d.type && d.type.kind === 179 /* TypeQuery */) {
                         var query = d.type;
                         var entity = getResolvedSymbol(getFirstIdentifier(query.exprName));
                         visitSymbol(entity);
@@ -44956,15 +45941,6 @@
         CheckMode[CheckMode["SkipGenericFunctions"] = 8] = "SkipGenericFunctions";
         CheckMode[CheckMode["IsForSignatureHelp"] = 16] = "IsForSignatureHelp";
     })(CheckMode || (CheckMode = {}));
-    var AccessFlags;
-    (function (AccessFlags) {
-        AccessFlags[AccessFlags["None"] = 0] = "None";
-        AccessFlags[AccessFlags["NoIndexSignatures"] = 1] = "NoIndexSignatures";
-        AccessFlags[AccessFlags["Writing"] = 2] = "Writing";
-        AccessFlags[AccessFlags["CacheSymbol"] = 4] = "CacheSymbol";
-        AccessFlags[AccessFlags["NoTupleBoundsCheck"] = 8] = "NoTupleBoundsCheck";
-        AccessFlags[AccessFlags["ExpressionPosition"] = 16] = "ExpressionPosition";
-    })(AccessFlags || (AccessFlags = {}));
     var SignatureCheckMode;
     (function (SignatureCheckMode) {
         SignatureCheckMode[SignatureCheckMode["BivariantCallback"] = 1] = "BivariantCallback";
@@ -45118,8 +46094,10 @@
         var strictPropertyInitialization = ts.getStrictOptionValue(compilerOptions, "strictPropertyInitialization");
         var noImplicitAny = ts.getStrictOptionValue(compilerOptions, "noImplicitAny");
         var noImplicitThis = ts.getStrictOptionValue(compilerOptions, "noImplicitThis");
+        var useUnknownInCatchVariables = ts.getStrictOptionValue(compilerOptions, "useUnknownInCatchVariables");
         var keyofStringsOnly = !!compilerOptions.keyofStringsOnly;
         var freshObjectLiteralFlag = compilerOptions.suppressExcessPropertyErrors ? 0 : 16384 /* FreshLiteral */;
+        var exactOptionalPropertyTypes = compilerOptions.exactOptionalPropertyTypes;
         var checkBinaryExpression = createCheckBinaryExpression();
         var emitResolver = createResolver();
         var nodeBuilder = createNodeBuilder();
@@ -45158,6 +46136,7 @@
             getDiagnostics: getDiagnostics,
             getGlobalDiagnostics: getGlobalDiagnostics,
             getRecursionIdentity: getRecursionIdentity,
+            getUnmatchedProperties: getUnmatchedProperties,
             getTypeOfSymbolAtLocation: function (symbol, locationIn) {
                 var location = ts.getParseTreeNode(locationIn);
                 return location ? getTypeOfSymbolAtLocation(symbol, location) : errorType;
@@ -45181,9 +46160,10 @@
                 return lexicallyScopedIdentifier ? getPrivateIdentifierPropertyOfType(leftType, lexicallyScopedIdentifier) : undefined;
             },
             getTypeOfPropertyOfType: function (type, name) { return getTypeOfPropertyOfType(type, ts.escapeLeadingUnderscores(name)); },
-            getIndexInfoOfType: getIndexInfoOfType,
+            getIndexInfoOfType: function (type, kind) { return getIndexInfoOfType(type, kind === 0 /* String */ ? stringType : numberType); },
+            getIndexInfosOfType: getIndexInfosOfType,
             getSignaturesOfType: getSignaturesOfType,
-            getIndexTypeOfType: getIndexTypeOfType,
+            getIndexTypeOfType: function (type, kind) { return getIndexTypeOfType(type, kind === 0 /* String */ ? stringType : numberType); },
             getBaseTypes: getBaseTypes,
             getBaseTypeOfLiteralType: getBaseTypeOfLiteralType,
             getWidenedType: getWidenedType,
@@ -45192,6 +46172,7 @@
                 return node ? getTypeFromTypeNode(node) : errorType;
             },
             getParameterType: getTypeAtPosition,
+            getParameterIdentifierNameAtPosition: getParameterIdentifierNameAtPosition,
             getPromisedTypeOfPromise: getPromisedTypeOfPromise,
             getAwaitedType: function (type) { return getAwaitedType(type); },
             getReturnTypeOfSignature: getReturnTypeOfSignature,
@@ -45217,6 +46198,10 @@
                 // set ignoreErrors: true because any lookups invoked by the API shouldn't cause any new errors
                 return node ? getSymbolAtLocation(node, /*ignoreErrors*/ true) : undefined;
             },
+            getIndexInfosAtLocation: function (nodeIn) {
+                var node = ts.getParseTreeNode(nodeIn);
+                return node ? getIndexInfosAtLocation(node) : undefined;
+            },
             getShorthandAssignmentValueSymbol: function (nodeIn) {
                 var node = ts.getParseTreeNode(nodeIn);
                 return node ? getShorthandAssignmentValueSymbol(node) : undefined;
@@ -45316,6 +46301,7 @@
             },
             getExpandedParameters: getExpandedParameters,
             hasEffectiveRestParameter: hasEffectiveRestParameter,
+            containsArgumentsReference: containsArgumentsReference,
             getConstantValue: function (nodeIn) {
                 var node = ts.getParseTreeNode(nodeIn, canHaveConstantValue);
                 return node ? getConstantValue(node) : undefined;
@@ -45341,7 +46327,8 @@
             getEmitResolver: getEmitResolver,
             getExportsOfModule: getExportsOfModuleAsArray,
             getExportsAndPropertiesOfModule: getExportsAndPropertiesOfModule,
-            getSymbolWalker: ts.createGetSymbolWalker(getRestTypeOfSignature, getTypePredicateOfSignature, getReturnTypeOfSignature, getBaseTypes, resolveStructuredTypeMembers, getTypeOfSymbol, getResolvedSymbol, getIndexTypeOfStructuredType, getConstraintOfTypeParameter, ts.getFirstIdentifier, getTypeArguments),
+            forEachExportAndPropertyOfModule: forEachExportAndPropertyOfModule,
+            getSymbolWalker: ts.createGetSymbolWalker(getRestTypeOfSignature, getTypePredicateOfSignature, getReturnTypeOfSignature, getBaseTypes, resolveStructuredTypeMembers, getTypeOfSymbol, getResolvedSymbol, getConstraintOfTypeParameter, ts.getFirstIdentifier, getTypeArguments),
             getAmbientModules: getAmbientModules,
             getJsxIntrinsicTagNamesAt: getJsxIntrinsicTagNamesAt,
             isOptionalParameter: function (nodeIn) {
@@ -45391,6 +46378,7 @@
             getSuggestionForNonexistentSymbol: function (location, name, meaning) { return getSuggestionForNonexistentSymbol(location, ts.escapeLeadingUnderscores(name), meaning); },
             getSuggestedSymbolForNonexistentModule: getSuggestedSymbolForNonexistentModule,
             getSuggestionForNonexistentExport: getSuggestionForNonexistentExport,
+            getSuggestedSymbolForNonexistentClassMember: getSuggestedSymbolForNonexistentClassMember,
             getBaseConstraintOfType: getBaseConstraintOfType,
             getDefaultFromTypeParameter: function (type) { return type && type.flags & 262144 /* TypeParameter */ ? getDefaultFromTypeParameter(type) : undefined; },
             resolveName: function (name, location, meaning, excludeGlobals) {
@@ -45464,7 +46452,10 @@
         var tupleTypes = new ts.Map();
         var unionTypes = new ts.Map();
         var intersectionTypes = new ts.Map();
-        var literalTypes = new ts.Map();
+        var stringLiteralTypes = new ts.Map();
+        var numberLiteralTypes = new ts.Map();
+        var bigIntLiteralTypes = new ts.Map();
+        var enumLiteralTypes = new ts.Map();
         var indexedAccessTypes = new ts.Map();
         var templateLiteralTypes = new ts.Map();
         var stringMappingTypes = new ts.Map();
@@ -45484,6 +46475,7 @@
         var undefinedType = createIntrinsicType(32768 /* Undefined */, "undefined");
         var undefinedWideningType = strictNullChecks ? undefinedType : createIntrinsicType(32768 /* Undefined */, "undefined", 131072 /* ContainsWideningType */);
         var optionalType = createIntrinsicType(32768 /* Undefined */, "undefined");
+        var missingType = exactOptionalPropertyTypes ? createIntrinsicType(32768 /* Undefined */, "undefined") : undefinedType;
         var nullType = createIntrinsicType(65536 /* Null */, "null");
         var nullWideningType = strictNullChecks ? nullType : createIntrinsicType(65536 /* Null */, "null", 131072 /* ContainsWideningType */);
         var stringType = createIntrinsicType(4 /* String */, "string");
@@ -45501,12 +46493,7 @@
         falseType.freshType = falseType;
         regularFalseType.regularType = regularFalseType;
         regularFalseType.freshType = falseType;
-        var booleanType = createBooleanType([regularFalseType, regularTrueType]);
-        // Also mark all combinations of fresh/regular booleans as "Boolean" so they print as `boolean` instead of `true | false`
-        // (The union is cached, so simply doing the marking here is sufficient)
-        createBooleanType([regularFalseType, trueType]);
-        createBooleanType([falseType, regularTrueType]);
-        createBooleanType([falseType, trueType]);
+        var booleanType = getUnionType([regularFalseType, regularTrueType]);
         var esSymbolType = createIntrinsicType(4096 /* ESSymbol */, "symbol");
         var voidType = createIntrinsicType(16384 /* Void */, "void");
         var neverType = createIntrinsicType(131072 /* Never */, "never");
@@ -45515,27 +46502,28 @@
         var implicitNeverType = createIntrinsicType(131072 /* Never */, "never");
         var unreachableNeverType = createIntrinsicType(131072 /* Never */, "never");
         var nonPrimitiveType = createIntrinsicType(67108864 /* NonPrimitive */, "object");
+        var stringOrNumberType = getUnionType([stringType, numberType]);
         var stringNumberSymbolType = getUnionType([stringType, numberType, esSymbolType]);
         var keyofConstraintType = keyofStringsOnly ? stringType : stringNumberSymbolType;
         var numberOrBigIntType = getUnionType([numberType, bigintType]);
         var templateConstraintType = getUnionType([stringType, numberType, booleanType, bigintType, nullType, undefinedType]);
         var restrictiveMapper = makeFunctionTypeMapper(function (t) { return t.flags & 262144 /* TypeParameter */ ? getRestrictiveTypeParameter(t) : t; });
         var permissiveMapper = makeFunctionTypeMapper(function (t) { return t.flags & 262144 /* TypeParameter */ ? wildcardType : t; });
-        var emptyObjectType = createAnonymousType(undefined, emptySymbols, ts.emptyArray, ts.emptyArray, undefined, undefined);
-        var emptyJsxObjectType = createAnonymousType(undefined, emptySymbols, ts.emptyArray, ts.emptyArray, undefined, undefined);
+        var emptyObjectType = createAnonymousType(undefined, emptySymbols, ts.emptyArray, ts.emptyArray, ts.emptyArray);
+        var emptyJsxObjectType = createAnonymousType(undefined, emptySymbols, ts.emptyArray, ts.emptyArray, ts.emptyArray);
         emptyJsxObjectType.objectFlags |= 2048 /* JsxAttributes */;
         var emptyTypeLiteralSymbol = createSymbol(2048 /* TypeLiteral */, "__type" /* Type */);
         emptyTypeLiteralSymbol.members = ts.createSymbolTable();
-        var emptyTypeLiteralType = createAnonymousType(emptyTypeLiteralSymbol, emptySymbols, ts.emptyArray, ts.emptyArray, undefined, undefined);
-        var emptyGenericType = createAnonymousType(undefined, emptySymbols, ts.emptyArray, ts.emptyArray, undefined, undefined);
+        var emptyTypeLiteralType = createAnonymousType(emptyTypeLiteralSymbol, emptySymbols, ts.emptyArray, ts.emptyArray, ts.emptyArray);
+        var emptyGenericType = createAnonymousType(undefined, emptySymbols, ts.emptyArray, ts.emptyArray, ts.emptyArray);
         emptyGenericType.instantiations = new ts.Map();
-        var anyFunctionType = createAnonymousType(undefined, emptySymbols, ts.emptyArray, ts.emptyArray, undefined, undefined);
+        var anyFunctionType = createAnonymousType(undefined, emptySymbols, ts.emptyArray, ts.emptyArray, ts.emptyArray);
         // The anyFunctionType contains the anyFunctionType by definition. The flag is further propagated
         // in getPropagatingFlagsOfTypes, and it is checked in inferFromTypes.
         anyFunctionType.objectFlags |= 524288 /* NonInferrableType */;
-        var noConstraintType = createAnonymousType(undefined, emptySymbols, ts.emptyArray, ts.emptyArray, undefined, undefined);
-        var circularConstraintType = createAnonymousType(undefined, emptySymbols, ts.emptyArray, ts.emptyArray, undefined, undefined);
-        var resolvingDefaultType = createAnonymousType(undefined, emptySymbols, ts.emptyArray, ts.emptyArray, undefined, undefined);
+        var noConstraintType = createAnonymousType(undefined, emptySymbols, ts.emptyArray, ts.emptyArray, ts.emptyArray);
+        var circularConstraintType = createAnonymousType(undefined, emptySymbols, ts.emptyArray, ts.emptyArray, ts.emptyArray);
+        var resolvingDefaultType = createAnonymousType(undefined, emptySymbols, ts.emptyArray, ts.emptyArray, ts.emptyArray);
         var markerSuperType = createTypeParameter();
         var markerSubType = createTypeParameter();
         markerSubType.constraint = markerSuperType;
@@ -45545,7 +46533,7 @@
         var unknownSignature = createSignature(undefined, undefined, undefined, ts.emptyArray, errorType, /*resolvedTypePredicate*/ undefined, 0, 0 /* None */);
         var resolvingSignature = createSignature(undefined, undefined, undefined, ts.emptyArray, anyType, /*resolvedTypePredicate*/ undefined, 0, 0 /* None */);
         var silentNeverSignature = createSignature(undefined, undefined, undefined, ts.emptyArray, silentNeverType, /*resolvedTypePredicate*/ undefined, 0, 0 /* None */);
-        var enumNumberIndexInfo = createIndexInfo(stringType, /*isReadonly*/ true);
+        var enumNumberIndexInfo = createIndexInfo(numberType, stringType, /*isReadonly*/ true);
         var iterationTypesCache = new ts.Map(); // cache for common IterationTypes instances
         var noIterationTypes = {
             get yieldType() { return ts.Debug.fail("Not supported"); },
@@ -45631,6 +46619,7 @@
         var deferredGlobalAsyncGeneratorType;
         var deferredGlobalTemplateStringsArrayType;
         var deferredGlobalImportMetaType;
+        var deferredGlobalImportMetaExpressionType;
         var deferredGlobalExtractSymbol;
         var deferredGlobalOmitSymbol;
         var deferredGlobalBigIntType;
@@ -45643,9 +46632,9 @@
         var lastFlowNode;
         var lastFlowNodeReachable;
         var flowTypeCache;
-        var emptyStringType = getLiteralType("");
-        var zeroType = getLiteralType(0);
-        var zeroBigIntType = getLiteralType({ negative: false, base10Value: "0" });
+        var emptyStringType = getStringLiteralType("");
+        var zeroType = getNumberLiteralType(0);
+        var zeroBigIntType = getBigIntLiteralType({ negative: false, base10Value: "0" });
         var resolutionTargets = [];
         var resolutionResults = [];
         var resolutionPropertyNames = [];
@@ -45665,6 +46654,7 @@
         var potentialThisCollisions = [];
         var potentialNewTargetCollisions = [];
         var potentialWeakMapSetCollisions = [];
+        var potentialReflectCollisions = [];
         var awaitedTypeStack = [];
         var diagnostics = ts.createDiagnosticCollection();
         var suggestionDiagnostics = ts.createDiagnosticCollection();
@@ -45775,10 +46765,13 @@
             diagnostic.skippedOn = key;
             return diagnostic;
         }
-        function error(location, message, arg0, arg1, arg2, arg3) {
-            var diagnostic = location
+        function createError(location, message, arg0, arg1, arg2, arg3) {
+            return location
                 ? ts.createDiagnosticForNode(location, message, arg0, arg1, arg2, arg3)
                 : ts.createCompilerDiagnostic(message, arg0, arg1, arg2, arg3);
+        }
+        function error(location, message, arg0, arg1, arg2, arg3) {
+            var diagnostic = createError(location, message, arg0, arg1, arg2, arg3);
             diagnostics.add(diagnostic);
             return diagnostic;
         }
@@ -45832,7 +46825,7 @@
         }
         function createSymbol(flags, name, checkFlags) {
             symbolCount++;
-            var symbol = (new Symbol(flags | 33554432 /* Transient */, name));
+            var symbol = new Symbol(flags | 33554432 /* Transient */, name);
             symbol.checkFlags = checkFlags || 0;
             return symbol;
         }
@@ -46111,7 +47104,7 @@
             return nodeLinks[nodeId] || (nodeLinks[nodeId] = new NodeLinks());
         }
         function isGlobalSourceFile(node) {
-            return node.kind === 298 /* SourceFile */ && !ts.isExternalOrCommonJsModule(node);
+            return node.kind === 300 /* SourceFile */ && !ts.isExternalOrCommonJsModule(node);
         }
         function getSymbol(symbols, name, meaning) {
             if (meaning) {
@@ -46170,17 +47163,17 @@
             }
             if (declaration.pos <= usage.pos && !(ts.isPropertyDeclaration(declaration) && ts.isThisProperty(usage.parent) && !declaration.initializer && !declaration.exclamationToken)) {
                 // declaration is before usage
-                if (declaration.kind === 199 /* BindingElement */) {
+                if (declaration.kind === 201 /* BindingElement */) {
                     // still might be illegal if declaration and usage are both binding elements (eg var [a = b, b = b] = [1, 2])
-                    var errorBindingElement = ts.getAncestor(usage, 199 /* BindingElement */);
+                    var errorBindingElement = ts.getAncestor(usage, 201 /* BindingElement */);
                     if (errorBindingElement) {
                         return ts.findAncestor(errorBindingElement, ts.isBindingElement) !== ts.findAncestor(declaration, ts.isBindingElement) ||
                             declaration.pos < errorBindingElement.pos;
                     }
                     // or it might be illegal if usage happens before parent variable is declared (eg var [a] = a)
-                    return isBlockScopedNameDeclaredBeforeUse(ts.getAncestor(declaration, 250 /* VariableDeclaration */), usage);
+                    return isBlockScopedNameDeclaredBeforeUse(ts.getAncestor(declaration, 252 /* VariableDeclaration */), usage);
                 }
-                else if (declaration.kind === 250 /* VariableDeclaration */) {
+                else if (declaration.kind === 252 /* VariableDeclaration */) {
                     // still might be illegal if usage is in the initializer of the variable declaration (eg var a = a)
                     return !isImmediatelyUsedInInitializerOfBlockScopedVariable(declaration, usage);
                 }
@@ -46210,12 +47203,12 @@
             // or if usage is in a type context:
             // 1. inside a type query (typeof in type position)
             // 2. inside a jsdoc comment
-            if (usage.parent.kind === 271 /* ExportSpecifier */ || (usage.parent.kind === 267 /* ExportAssignment */ && usage.parent.isExportEquals)) {
+            if (usage.parent.kind === 273 /* ExportSpecifier */ || (usage.parent.kind === 269 /* ExportAssignment */ && usage.parent.isExportEquals)) {
                 // export specifiers do not use the variable, they only make it available for use
                 return true;
             }
             // When resolving symbols for exports, the `usage` location passed in can be the export site directly
-            if (usage.kind === 267 /* ExportAssignment */ && usage.isExportEquals) {
+            if (usage.kind === 269 /* ExportAssignment */ && usage.isExportEquals) {
                 return true;
             }
             if (!!(usage.flags & 4194304 /* JSDoc */) || isInTypeQuery(usage) || usageInTypeDeclaration()) {
@@ -46237,9 +47230,9 @@
             }
             function isImmediatelyUsedInInitializerOfBlockScopedVariable(declaration, usage) {
                 switch (declaration.parent.parent.kind) {
-                    case 233 /* VariableStatement */:
-                    case 238 /* ForStatement */:
-                    case 240 /* ForOfStatement */:
+                    case 235 /* VariableStatement */:
+                    case 240 /* ForStatement */:
+                    case 242 /* ForOfStatement */:
                         // variable statement/for/for-of statement case,
                         // use site should not be inside variable declaration (initializer of declaration or binding element)
                         if (isSameScopeDescendentOf(usage, declaration, declContainer)) {
@@ -46259,19 +47252,33 @@
                     if (ts.isFunctionLike(current)) {
                         return true;
                     }
-                    var initializerOfProperty = current.parent &&
-                        current.parent.kind === 164 /* PropertyDeclaration */ &&
-                        current.parent.initializer === current;
-                    if (initializerOfProperty) {
-                        if (ts.hasSyntacticModifier(current.parent, 32 /* Static */)) {
-                            if (declaration.kind === 166 /* MethodDeclaration */) {
-                                return true;
+                    if (ts.isClassStaticBlockDeclaration(current)) {
+                        return declaration.pos < usage.pos;
+                    }
+                    var propertyDeclaration = ts.tryCast(current.parent, ts.isPropertyDeclaration);
+                    if (propertyDeclaration) {
+                        var initializerOfProperty = propertyDeclaration.initializer === current;
+                        if (initializerOfProperty) {
+                            if (ts.isStatic(current.parent)) {
+                                if (declaration.kind === 167 /* MethodDeclaration */) {
+                                    return true;
+                                }
+                                if (ts.isPropertyDeclaration(declaration) && ts.getContainingClass(usage) === ts.getContainingClass(declaration)) {
+                                    var propName = declaration.name;
+                                    if (ts.isIdentifier(propName) || ts.isPrivateIdentifier(propName)) {
+                                        var type = getTypeOfSymbol(getSymbolOfNode(declaration));
+                                        var staticBlocks = ts.filter(declaration.parent.members, ts.isClassStaticBlockDeclaration);
+                                        if (isPropertyInitializedInStaticBlocks(propName, type, staticBlocks, declaration.parent.pos, current.pos)) {
+                                            return true;
+                                        }
+                                    }
+                                }
                             }
-                        }
-                        else {
-                            var isDeclarationInstanceProperty = declaration.kind === 164 /* PropertyDeclaration */ && !ts.hasSyntacticModifier(declaration, 32 /* Static */);
-                            if (!isDeclarationInstanceProperty || ts.getContainingClass(usage) !== ts.getContainingClass(declaration)) {
-                                return true;
+                            else {
+                                var isDeclarationInstanceProperty = declaration.kind === 165 /* PropertyDeclaration */ && !ts.isStatic(declaration);
+                                if (!isDeclarationInstanceProperty || ts.getContainingClass(usage) !== ts.getContainingClass(declaration)) {
+                                    return true;
+                                }
                             }
                         }
                     }
@@ -46291,19 +47298,19 @@
                         return "quit";
                     }
                     switch (node.kind) {
-                        case 210 /* ArrowFunction */:
+                        case 212 /* ArrowFunction */:
                             return true;
-                        case 164 /* PropertyDeclaration */:
+                        case 165 /* PropertyDeclaration */:
                             // even when stopping at any property declaration, they need to come from the same class
                             return stopAtAnyPropertyDeclaration &&
                                 (ts.isPropertyDeclaration(declaration) && node.parent === declaration.parent
                                     || ts.isParameterPropertyDeclaration(declaration, declaration.parent) && node.parent === declaration.parent.parent)
                                 ? "quit" : true;
-                        case 231 /* Block */:
+                        case 233 /* Block */:
                             switch (node.parent.kind) {
-                                case 168 /* GetAccessor */:
-                                case 166 /* MethodDeclaration */:
-                                case 169 /* SetAccessor */:
+                                case 170 /* GetAccessor */:
+                                case 167 /* MethodDeclaration */:
+                                case 171 /* SetAccessor */:
                                     return true;
                                 default:
                                     return false;
@@ -46343,18 +47350,18 @@
             }
             function requiresScopeChangeWorker(node) {
                 switch (node.kind) {
-                    case 210 /* ArrowFunction */:
-                    case 209 /* FunctionExpression */:
-                    case 252 /* FunctionDeclaration */:
-                    case 167 /* Constructor */:
+                    case 212 /* ArrowFunction */:
+                    case 211 /* FunctionExpression */:
+                    case 254 /* FunctionDeclaration */:
+                    case 169 /* Constructor */:
                         // do not descend into these
                         return false;
-                    case 166 /* MethodDeclaration */:
-                    case 168 /* GetAccessor */:
-                    case 169 /* SetAccessor */:
-                    case 289 /* PropertyAssignment */:
+                    case 167 /* MethodDeclaration */:
+                    case 170 /* GetAccessor */:
+                    case 171 /* SetAccessor */:
+                    case 291 /* PropertyAssignment */:
                         return requiresScopeChangeWorker(node.name);
-                    case 164 /* PropertyDeclaration */:
+                    case 165 /* PropertyDeclaration */:
                         // static properties in classes introduce temporary variables
                         if (ts.hasStaticModifier(node)) {
                             return target < 99 /* ESNext */ || !useDefineForClassFields;
@@ -46381,11 +47388,11 @@
          *
          * @param isUse If true, this will count towards --noUnusedLocals / --noUnusedParameters.
          */
-        function resolveName(location, name, meaning, nameNotFoundMessage, nameArg, isUse, excludeGlobals, suggestedNameNotFoundMessage) {
+        function resolveName(location, name, meaning, nameNotFoundMessage, nameArg, isUse, excludeGlobals, issueSuggestions) {
             if (excludeGlobals === void 0) { excludeGlobals = false; }
-            return resolveNameHelper(location, name, meaning, nameNotFoundMessage, nameArg, isUse, excludeGlobals, getSymbol, suggestedNameNotFoundMessage);
+            return resolveNameHelper(location, name, meaning, nameNotFoundMessage, nameArg, isUse, excludeGlobals, getSymbol, issueSuggestions);
         }
-        function resolveNameHelper(location, name, meaning, nameNotFoundMessage, nameArg, isUse, excludeGlobals, lookup, suggestedNameNotFoundMessage) {
+        function resolveNameHelper(location, name, meaning, nameNotFoundMessage, nameArg, isUse, excludeGlobals, lookup, issueSuggestions) {
             var _a;
             var originalLocation = location; // needed for did-you-mean error reporting, which gathers candidates starting from the original location
             var result;
@@ -46409,12 +47416,12 @@
                             // - parameters are only in the scope of function body
                             // This restriction does not apply to JSDoc comment types because they are parented
                             // at a higher level than type parameters would normally be
-                            if (meaning & result.flags & 788968 /* Type */ && lastLocation.kind !== 312 /* JSDocComment */) {
+                            if (meaning & result.flags & 788968 /* Type */ && lastLocation.kind !== 315 /* JSDocComment */) {
                                 useResult = result.flags & 262144 /* TypeParameter */
                                     // type parameters are visible in parameter list, return type and type parameter list
                                     ? lastLocation === location.type ||
-                                        lastLocation.kind === 161 /* Parameter */ ||
-                                        lastLocation.kind === 160 /* TypeParameter */
+                                        lastLocation.kind === 162 /* Parameter */ ||
+                                        lastLocation.kind === 161 /* TypeParameter */
                                     // local types not visible outside the function body
                                     : false;
                             }
@@ -46429,13 +47436,13 @@
                                     // however it is detected separately when checking initializers of parameters
                                     // to make sure that they reference no variables declared after them.
                                     useResult =
-                                        lastLocation.kind === 161 /* Parameter */ ||
+                                        lastLocation.kind === 162 /* Parameter */ ||
                                             (lastLocation === location.type &&
                                                 !!ts.findAncestor(result.valueDeclaration, ts.isParameter));
                                 }
                             }
                         }
-                        else if (location.kind === 185 /* ConditionalType */) {
+                        else if (location.kind === 187 /* ConditionalType */) {
                             // A type parameter declared using 'infer T' in a conditional type is visible only in
                             // the true branch of the conditional type.
                             useResult = lastLocation === location.trueType;
@@ -46450,14 +47457,14 @@
                 }
                 withinDeferredContext = withinDeferredContext || getIsDeferredContext(location, lastLocation);
                 switch (location.kind) {
-                    case 298 /* SourceFile */:
+                    case 300 /* SourceFile */:
                         if (!ts.isExternalOrCommonJsModule(location))
                             break;
                         isInExternalModule = true;
                     // falls through
-                    case 257 /* ModuleDeclaration */:
+                    case 259 /* ModuleDeclaration */:
                         var moduleExports = getSymbolOfNode(location).exports || emptySymbols;
-                        if (location.kind === 298 /* SourceFile */ || (ts.isModuleDeclaration(location) && location.flags & 8388608 /* Ambient */ && !ts.isGlobalScopeAugmentation(location))) {
+                        if (location.kind === 300 /* SourceFile */ || (ts.isModuleDeclaration(location) && location.flags & 8388608 /* Ambient */ && !ts.isGlobalScopeAugmentation(location))) {
                             // It's an external module. First see if the module has an export default and if the local
                             // name of that export default matches.
                             if (result = moduleExports.get("default" /* Default */)) {
@@ -46481,7 +47488,7 @@
                             var moduleExport = moduleExports.get(name);
                             if (moduleExport &&
                                 moduleExport.flags === 2097152 /* Alias */ &&
-                                (ts.getDeclarationOfKind(moduleExport, 271 /* ExportSpecifier */) || ts.getDeclarationOfKind(moduleExport, 270 /* NamespaceExport */))) {
+                                (ts.getDeclarationOfKind(moduleExport, 273 /* ExportSpecifier */) || ts.getDeclarationOfKind(moduleExport, 272 /* NamespaceExport */))) {
                                 break;
                             }
                         }
@@ -46495,19 +47502,19 @@
                             }
                         }
                         break;
-                    case 256 /* EnumDeclaration */:
+                    case 258 /* EnumDeclaration */:
                         if (result = lookup(getSymbolOfNode(location).exports, name, meaning & 8 /* EnumMember */)) {
                             break loop;
                         }
                         break;
-                    case 164 /* PropertyDeclaration */:
+                    case 165 /* PropertyDeclaration */:
                         // TypeScript 1.0 spec (April 2014): 8.4.1
                         // Initializer expressions for instance member variables are evaluated in the scope
                         // of the class constructor body but are not permitted to reference parameters or
                         // local variables of the constructor. This effectively means that entities from outer scopes
                         // by the same name as a constructor parameter or local variable are inaccessible
                         // in initializer expressions for instance member variables.
-                        if (!ts.hasSyntacticModifier(location, 32 /* Static */)) {
+                        if (!ts.isStatic(location)) {
                             var ctor = findConstructorDeclaration(location.parent);
                             if (ctor && ctor.locals) {
                                 if (lookup(ctor.locals, name, meaning & 111551 /* Value */)) {
@@ -46517,9 +47524,9 @@
                             }
                         }
                         break;
-                    case 253 /* ClassDeclaration */:
-                    case 222 /* ClassExpression */:
-                    case 254 /* InterfaceDeclaration */:
+                    case 255 /* ClassDeclaration */:
+                    case 224 /* ClassExpression */:
+                    case 256 /* InterfaceDeclaration */:
                         // The below is used to lookup type parameters within a class or interface, as they are added to the class/interface locals
                         // These can never be latebound, so the symbol's raw members are sufficient. `getMembersOfNode` cannot be used, as it would
                         // trigger resolving late-bound names, which we may already be in the process of doing while we're here!
@@ -46529,7 +47536,7 @@
                                 result = undefined;
                                 break;
                             }
-                            if (lastLocation && ts.hasSyntacticModifier(lastLocation, 32 /* Static */)) {
+                            if (lastLocation && ts.isStatic(lastLocation)) {
                                 // TypeScript 1.0 spec (April 2014): 3.4.1
                                 // The scope of a type parameter extends over the entire declaration with which the type
                                 // parameter list is associated, with the exception of static member declarations in classes.
@@ -46538,7 +47545,7 @@
                             }
                             break loop;
                         }
-                        if (location.kind === 222 /* ClassExpression */ && meaning & 32 /* Class */) {
+                        if (location.kind === 224 /* ClassExpression */ && meaning & 32 /* Class */) {
                             var className = location.name;
                             if (className && name === className.escapedText) {
                                 result = location.symbol;
@@ -46546,9 +47553,9 @@
                             }
                         }
                         break;
-                    case 224 /* ExpressionWithTypeArguments */:
+                    case 226 /* ExpressionWithTypeArguments */:
                         // The type parameters of a class are not in scope in the base class expression.
-                        if (lastLocation === location.expression && location.parent.token === 93 /* ExtendsKeyword */) {
+                        if (lastLocation === location.expression && location.parent.token === 94 /* ExtendsKeyword */) {
                             var container = location.parent.parent;
                             if (ts.isClassLike(container) && (result = lookup(getSymbolOfNode(container).members, name, meaning & 788968 /* Type */))) {
                                 if (nameNotFoundMessage) {
@@ -46566,9 +47573,9 @@
                     //       [foo<T>()]() { } // <-- Reference to T from class's own computed property
                     //   }
                     //
-                    case 159 /* ComputedPropertyName */:
+                    case 160 /* ComputedPropertyName */:
                         grandparent = location.parent.parent;
-                        if (ts.isClassLike(grandparent) || grandparent.kind === 254 /* InterfaceDeclaration */) {
+                        if (ts.isClassLike(grandparent) || grandparent.kind === 256 /* InterfaceDeclaration */) {
                             // A reference to this grandparent's type parameters would be an error
                             if (result = lookup(getSymbolOfNode(grandparent).members, name, meaning & 788968 /* Type */)) {
                                 error(errorLocation, ts.Diagnostics.A_computed_property_name_cannot_reference_a_type_parameter_from_its_containing_type);
@@ -46576,24 +47583,24 @@
                             }
                         }
                         break;
-                    case 210 /* ArrowFunction */:
+                    case 212 /* ArrowFunction */:
                         // when targeting ES6 or higher there is no 'arguments' in an arrow function
                         // for lower compile targets the resolved symbol is used to emit an error
                         if (compilerOptions.target >= 2 /* ES2015 */) {
                             break;
                         }
                     // falls through
-                    case 166 /* MethodDeclaration */:
-                    case 167 /* Constructor */:
-                    case 168 /* GetAccessor */:
-                    case 169 /* SetAccessor */:
-                    case 252 /* FunctionDeclaration */:
+                    case 167 /* MethodDeclaration */:
+                    case 169 /* Constructor */:
+                    case 170 /* GetAccessor */:
+                    case 171 /* SetAccessor */:
+                    case 254 /* FunctionDeclaration */:
                         if (meaning & 3 /* Variable */ && name === "arguments") {
                             result = argumentsSymbol;
                             break loop;
                         }
                         break;
-                    case 209 /* FunctionExpression */:
+                    case 211 /* FunctionExpression */:
                         if (meaning & 3 /* Variable */ && name === "arguments") {
                             result = argumentsSymbol;
                             break loop;
@@ -46606,7 +47613,7 @@
                             }
                         }
                         break;
-                    case 162 /* Decorator */:
+                    case 163 /* Decorator */:
                         // Decorators are resolved at the class declaration. Resolving at the parameter
                         // or member would result in looking up locals in the method.
                         //
@@ -46615,7 +47622,7 @@
                         //       method(@y x, y) {} // <-- decorator y should be resolved at the class declaration, not the parameter.
                         //   }
                         //
-                        if (location.parent && location.parent.kind === 161 /* Parameter */) {
+                        if (location.parent && location.parent.kind === 162 /* Parameter */) {
                             location = location.parent;
                         }
                         //
@@ -46630,20 +47637,20 @@
                         //   declare function y(x: T): any;
                         //   @param(1 as T) // <-- T should resolve to the type alias outside of class C
                         //   class C<T> {}
-                        if (location.parent && (ts.isClassElement(location.parent) || location.parent.kind === 253 /* ClassDeclaration */)) {
+                        if (location.parent && (ts.isClassElement(location.parent) || location.parent.kind === 255 /* ClassDeclaration */)) {
                             location = location.parent;
                         }
                         break;
-                    case 335 /* JSDocTypedefTag */:
-                    case 328 /* JSDocCallbackTag */:
-                    case 329 /* JSDocEnumTag */:
+                    case 340 /* JSDocTypedefTag */:
+                    case 333 /* JSDocCallbackTag */:
+                    case 334 /* JSDocEnumTag */:
                         // js type aliases do not resolve names from their host, so skip past it
                         var root = ts.getJSDocRoot(location);
                         if (root) {
                             location = root.parent;
                         }
                         break;
-                    case 161 /* Parameter */:
+                    case 162 /* Parameter */:
                         if (lastLocation && (lastLocation === location.initializer ||
                             lastLocation === location.name && ts.isBindingPattern(lastLocation))) {
                             if (!associatedDeclarationForContainingInitializerOrBindingName) {
@@ -46651,7 +47658,7 @@
                             }
                         }
                         break;
-                    case 199 /* BindingElement */:
+                    case 201 /* BindingElement */:
                         if (lastLocation && (lastLocation === location.initializer ||
                             lastLocation === location.name && ts.isBindingPattern(lastLocation))) {
                             if (ts.isParameterDeclaration(location) && !associatedDeclarationForContainingInitializerOrBindingName) {
@@ -46659,7 +47666,7 @@
                             }
                         }
                         break;
-                    case 186 /* InferType */:
+                    case 188 /* InferType */:
                         if (meaning & 262144 /* TypeParameter */) {
                             var parameterName = location.typeParameter.name;
                             if (parameterName && name === parameterName.escapedText) {
@@ -46683,7 +47690,7 @@
             }
             if (!result) {
                 if (lastLocation) {
-                    ts.Debug.assert(lastLocation.kind === 298 /* SourceFile */);
+                    ts.Debug.assert(lastLocation.kind === 300 /* SourceFile */);
                     if (lastLocation.commonJsModuleIndicator && name === "exports" && meaning & lastLocation.symbol.flags) {
                         return lastLocation.symbol;
                     }
@@ -46710,15 +47717,18 @@
                             !checkAndReportErrorForUsingNamespaceModuleAsValue(errorLocation, name, meaning) &&
                             !checkAndReportErrorForUsingValueAsType(errorLocation, name, meaning)) {
                         var suggestion = void 0;
-                        if (suggestedNameNotFoundMessage && suggestionCount < maximumSuggestionCount) {
+                        if (issueSuggestions && suggestionCount < maximumSuggestionCount) {
                             suggestion = getSuggestedSymbolForNonexistentSymbol(originalLocation, name, meaning);
-                            var isGlobalScopeAugmentationDeclaration = suggestion && suggestion.valueDeclaration && ts.isAmbientModule(suggestion.valueDeclaration) && ts.isGlobalScopeAugmentation(suggestion.valueDeclaration);
+                            var isGlobalScopeAugmentationDeclaration = (suggestion === null || suggestion === void 0 ? void 0 : suggestion.valueDeclaration) && ts.isAmbientModule(suggestion.valueDeclaration) && ts.isGlobalScopeAugmentation(suggestion.valueDeclaration);
                             if (isGlobalScopeAugmentationDeclaration) {
                                 suggestion = undefined;
                             }
                             if (suggestion) {
                                 var suggestionName = symbolToString(suggestion);
-                                var diagnostic = error(errorLocation, suggestedNameNotFoundMessage, diagnosticName(nameArg), suggestionName);
+                                var isUncheckedJS = isUncheckedJSSuggestion(originalLocation, suggestion, /*excludeClasses*/ false);
+                                var message = isUncheckedJS ? ts.Diagnostics.Could_not_find_name_0_Did_you_mean_1 : ts.Diagnostics.Cannot_find_name_0_Did_you_mean_1;
+                                var diagnostic = createError(errorLocation, message, diagnosticName(nameArg), suggestionName);
+                                addErrorOrSuggestion(!isUncheckedJS, diagnostic);
                                 if (suggestion.valueDeclaration) {
                                     ts.addRelatedInfo(diagnostic, ts.createDiagnosticForNode(suggestion.valueDeclaration, ts.Diagnostics._0_is_declared_here, suggestionName));
                                 }
@@ -46812,10 +47822,10 @@
             }
         }
         function getIsDeferredContext(location, lastLocation) {
-            if (location.kind !== 210 /* ArrowFunction */ && location.kind !== 209 /* FunctionExpression */) {
+            if (location.kind !== 212 /* ArrowFunction */ && location.kind !== 211 /* FunctionExpression */) {
                 // initializers in instance property declaration of class like entities are executed in constructor and thus deferred
                 return ts.isTypeQueryNode(location) || ((ts.isFunctionLikeDeclaration(location) ||
-                    (location.kind === 164 /* PropertyDeclaration */ && !ts.hasSyntacticModifier(location, 32 /* Static */))) && (!lastLocation || lastLocation !== location.name)); // A name is evaluated within the enclosing scope - so it shouldn't count as deferred
+                    (location.kind === 165 /* PropertyDeclaration */ && !ts.isStatic(location))) && (!lastLocation || lastLocation !== location.name)); // A name is evaluated within the enclosing scope - so it shouldn't count as deferred
             }
             if (lastLocation && lastLocation === location.name) {
                 return false;
@@ -46828,12 +47838,12 @@
         }
         function isSelfReferenceLocation(node) {
             switch (node.kind) {
-                case 252 /* FunctionDeclaration */:
-                case 253 /* ClassDeclaration */:
-                case 254 /* InterfaceDeclaration */:
-                case 256 /* EnumDeclaration */:
-                case 255 /* TypeAliasDeclaration */:
-                case 257 /* ModuleDeclaration */: // For `namespace N { N; }`
+                case 254 /* FunctionDeclaration */:
+                case 255 /* ClassDeclaration */:
+                case 256 /* InterfaceDeclaration */:
+                case 258 /* EnumDeclaration */:
+                case 257 /* TypeAliasDeclaration */:
+                case 259 /* ModuleDeclaration */: // For `namespace N { N; }`
                     return true;
                 default:
                     return false;
@@ -46846,7 +47856,7 @@
             if (symbol.declarations) {
                 for (var _i = 0, _a = symbol.declarations; _i < _a.length; _i++) {
                     var decl = _a[_i];
-                    if (decl.kind === 160 /* TypeParameter */) {
+                    if (decl.kind === 161 /* TypeParameter */) {
                         var parent = ts.isJSDocTemplateTag(decl.parent) ? ts.getJSDocHost(decl.parent) : decl.parent;
                         if (parent === container) {
                             return !(ts.isJSDocTemplateTag(decl.parent) && ts.find(decl.parent.parent.tags, ts.isJSDocTypeAlias)); // TODO: GH#18217
@@ -46876,7 +47886,7 @@
                     }
                     // No static member is present.
                     // Check if we're in an instance method and look for a relevant instance member.
-                    if (location === container && !ts.hasSyntacticModifier(location, 32 /* Static */)) {
+                    if (location === container && !ts.isStatic(location)) {
                         var instanceType = getDeclaredTypeOfSymbol(classSymbol).thisType; // TODO: GH#18217
                         if (getPropertyOfType(instanceType, name)) {
                             error(errorLocation, ts.Diagnostics.Cannot_find_name_0_Did_you_mean_the_instance_member_this_0, diagnosticName(nameArg));
@@ -46902,10 +47912,10 @@
          */
         function getEntityNameForExtendingInterface(node) {
             switch (node.kind) {
-                case 78 /* Identifier */:
-                case 202 /* PropertyAccessExpression */:
+                case 79 /* Identifier */:
+                case 204 /* PropertyAccessExpression */:
                     return node.parent ? getEntityNameForExtendingInterface(node.parent) : undefined;
-                case 224 /* ExpressionWithTypeArguments */:
+                case 226 /* ExpressionWithTypeArguments */:
                     if (ts.isEntityNameExpression(node.expression)) {
                         return node.expression;
                     }
@@ -46949,7 +47959,7 @@
             return name === "any" || name === "string" || name === "number" || name === "boolean" || name === "never" || name === "unknown";
         }
         function checkAndReportErrorForExportingPrimitiveType(errorLocation, name) {
-            if (isPrimitiveTypeName(name) && errorLocation.parent.kind === 271 /* ExportSpecifier */) {
+            if (isPrimitiveTypeName(name) && errorLocation.parent.kind === 273 /* ExportSpecifier */) {
                 error(errorLocation, ts.Diagnostics.Cannot_export_0_Only_local_declarations_can_be_exported_from_a_module, name);
                 return true;
             }
@@ -47025,7 +48035,7 @@
                 return;
             }
             // Block-scoped variables cannot be used before their definition
-            var declaration = (_a = result.declarations) === null || _a === void 0 ? void 0 : _a.find(function (d) { return ts.isBlockOrCatchScoped(d) || ts.isClassLike(d) || (d.kind === 256 /* EnumDeclaration */); });
+            var declaration = (_a = result.declarations) === null || _a === void 0 ? void 0 : _a.find(function (d) { return ts.isBlockOrCatchScoped(d) || ts.isClassLike(d) || (d.kind === 258 /* EnumDeclaration */); });
             if (declaration === undefined)
                 return ts.Debug.fail("checkResolvedBlockScopedVariable could not find block-scoped declaration");
             if (!(declaration.flags & 8388608 /* Ambient */) && !isBlockScopedNameDeclaredBeforeUse(declaration, errorLocation)) {
@@ -47060,13 +48070,13 @@
         }
         function getAnyImportSyntax(node) {
             switch (node.kind) {
-                case 261 /* ImportEqualsDeclaration */:
+                case 263 /* ImportEqualsDeclaration */:
                     return node;
-                case 263 /* ImportClause */:
+                case 265 /* ImportClause */:
                     return node.parent;
-                case 264 /* NamespaceImport */:
+                case 266 /* NamespaceImport */:
                     return node.parent.parent;
-                case 266 /* ImportSpecifier */:
+                case 268 /* ImportSpecifier */:
                     return node.parent.parent.parent;
                 default:
                     return undefined;
@@ -47091,22 +48101,22 @@
          * const { x } = require ...
          */
         function isAliasSymbolDeclaration(node) {
-            return node.kind === 261 /* ImportEqualsDeclaration */
-                || node.kind === 260 /* NamespaceExportDeclaration */
-                || node.kind === 263 /* ImportClause */ && !!node.name
-                || node.kind === 264 /* NamespaceImport */
-                || node.kind === 270 /* NamespaceExport */
-                || node.kind === 266 /* ImportSpecifier */
-                || node.kind === 271 /* ExportSpecifier */
-                || node.kind === 267 /* ExportAssignment */ && ts.exportAssignmentIsAlias(node)
+            return node.kind === 263 /* ImportEqualsDeclaration */
+                || node.kind === 262 /* NamespaceExportDeclaration */
+                || node.kind === 265 /* ImportClause */ && !!node.name
+                || node.kind === 266 /* NamespaceImport */
+                || node.kind === 272 /* NamespaceExport */
+                || node.kind === 268 /* ImportSpecifier */
+                || node.kind === 273 /* ExportSpecifier */
+                || node.kind === 269 /* ExportAssignment */ && ts.exportAssignmentIsAlias(node)
                 || ts.isBinaryExpression(node) && ts.getAssignmentDeclarationKind(node) === 2 /* ModuleExports */ && ts.exportAssignmentIsAlias(node)
                 || ts.isAccessExpression(node)
                     && ts.isBinaryExpression(node.parent)
                     && node.parent.left === node
-                    && node.parent.operatorToken.kind === 62 /* EqualsToken */
+                    && node.parent.operatorToken.kind === 63 /* EqualsToken */
                     && isAliasableOrJsExpression(node.parent.right)
-                || node.kind === 290 /* ShorthandPropertyAssignment */
-                || node.kind === 289 /* PropertyAssignment */ && isAliasableOrJsExpression(node.initializer)
+                || node.kind === 292 /* ShorthandPropertyAssignment */
+                || node.kind === 291 /* PropertyAssignment */ && isAliasableOrJsExpression(node.initializer)
                 || ts.isRequireVariableDeclaration(node);
         }
         function isAliasableOrJsExpression(e) {
@@ -47120,7 +48130,7 @@
                     ? resolveSymbol(getPropertyOfType(resolveExternalModuleTypeByLiteral(name), commonJSPropertyAccess.name.escapedText))
                     : undefined;
             }
-            if (ts.isVariableDeclaration(node) || node.moduleReference.kind === 273 /* ExternalModuleReference */) {
+            if (ts.isVariableDeclaration(node) || node.moduleReference.kind === 275 /* ExternalModuleReference */) {
                 var immediate = resolveExternalModuleName(node, ts.getExternalModuleRequireArgument(node) || ts.getExternalModuleImportEqualsDeclarationExpression(node));
                 var resolved_4 = resolveExternalModuleSymbol(immediate);
                 markSymbolOfAliasDeclarationIfTypeOnly(node, immediate, resolved_4, /*overwriteEmpty*/ false);
@@ -47386,7 +48396,7 @@
                     if (localSymbol.declarations) {
                         ts.addRelatedInfo.apply(void 0, __spreadArray([diagnostic], ts.map(localSymbol.declarations, function (decl, index) {
                             return ts.createDiagnosticForNode(decl, index === 0 ? ts.Diagnostics._0_is_declared_here : ts.Diagnostics.and_here, declarationName);
-                        })));
+                        }), false));
                     }
                 }
             }
@@ -47466,7 +48476,7 @@
             return getTargetOfAliasLikeExpression(expression, dontRecursivelyResolve);
         }
         function getTargetOfAccessExpression(node, dontRecursivelyResolve) {
-            if (!(ts.isBinaryExpression(node.parent) && node.parent.left === node && node.parent.operatorToken.kind === 62 /* EqualsToken */)) {
+            if (!(ts.isBinaryExpression(node.parent) && node.parent.left === node && node.parent.operatorToken.kind === 63 /* EqualsToken */)) {
                 return undefined;
             }
             return getTargetOfAliasLikeExpression(node.parent.right, dontRecursivelyResolve);
@@ -47474,31 +48484,31 @@
         function getTargetOfAliasDeclaration(node, dontRecursivelyResolve) {
             if (dontRecursivelyResolve === void 0) { dontRecursivelyResolve = false; }
             switch (node.kind) {
-                case 261 /* ImportEqualsDeclaration */:
-                case 250 /* VariableDeclaration */:
+                case 263 /* ImportEqualsDeclaration */:
+                case 252 /* VariableDeclaration */:
                     return getTargetOfImportEqualsDeclaration(node, dontRecursivelyResolve);
-                case 263 /* ImportClause */:
+                case 265 /* ImportClause */:
                     return getTargetOfImportClause(node, dontRecursivelyResolve);
-                case 264 /* NamespaceImport */:
+                case 266 /* NamespaceImport */:
                     return getTargetOfNamespaceImport(node, dontRecursivelyResolve);
-                case 270 /* NamespaceExport */:
+                case 272 /* NamespaceExport */:
                     return getTargetOfNamespaceExport(node, dontRecursivelyResolve);
-                case 266 /* ImportSpecifier */:
-                case 199 /* BindingElement */:
+                case 268 /* ImportSpecifier */:
+                case 201 /* BindingElement */:
                     return getTargetOfImportSpecifier(node, dontRecursivelyResolve);
-                case 271 /* ExportSpecifier */:
+                case 273 /* ExportSpecifier */:
                     return getTargetOfExportSpecifier(node, 111551 /* Value */ | 788968 /* Type */ | 1920 /* Namespace */, dontRecursivelyResolve);
-                case 267 /* ExportAssignment */:
-                case 217 /* BinaryExpression */:
+                case 269 /* ExportAssignment */:
+                case 219 /* BinaryExpression */:
                     return getTargetOfExportAssignment(node, dontRecursivelyResolve);
-                case 260 /* NamespaceExportDeclaration */:
+                case 262 /* NamespaceExportDeclaration */:
                     return getTargetOfNamespaceExportDeclaration(node, dontRecursivelyResolve);
-                case 290 /* ShorthandPropertyAssignment */:
+                case 292 /* ShorthandPropertyAssignment */:
                     return resolveEntityName(node.name, 111551 /* Value */ | 788968 /* Type */ | 1920 /* Namespace */, /*ignoreErrors*/ true, dontRecursivelyResolve);
-                case 289 /* PropertyAssignment */:
+                case 291 /* PropertyAssignment */:
                     return getTargetOfPropertyAssignment(node, dontRecursivelyResolve);
-                case 203 /* ElementAccessExpression */:
-                case 202 /* PropertyAccessExpression */:
+                case 205 /* ElementAccessExpression */:
+                case 204 /* PropertyAccessExpression */:
                     return getTargetOfAccessExpression(node, dontRecursivelyResolve);
                 default:
                     return ts.Debug.fail();
@@ -47646,17 +48656,17 @@
             //     import a = |b|; // Namespace
             //     import a = |b.c|; // Value, type, namespace
             //     import a = |b.c|.d; // Namespace
-            if (entityName.kind === 78 /* Identifier */ && ts.isRightSideOfQualifiedNameOrPropertyAccess(entityName)) {
+            if (entityName.kind === 79 /* Identifier */ && ts.isRightSideOfQualifiedNameOrPropertyAccess(entityName)) {
                 entityName = entityName.parent;
             }
             // Check for case 1 and 3 in the above example
-            if (entityName.kind === 78 /* Identifier */ || entityName.parent.kind === 158 /* QualifiedName */) {
+            if (entityName.kind === 79 /* Identifier */ || entityName.parent.kind === 159 /* QualifiedName */) {
                 return resolveEntityName(entityName, 1920 /* Namespace */, /*ignoreErrors*/ false, dontResolveAlias);
             }
             else {
                 // Case 2 in above example
                 // entityName.kind could be a QualifiedName or a Missing identifier
-                ts.Debug.assert(entityName.parent.kind === 261 /* ImportEqualsDeclaration */);
+                ts.Debug.assert(entityName.parent.kind === 263 /* ImportEqualsDeclaration */);
                 return resolveEntityName(entityName, 111551 /* Value */ | 788968 /* Type */ | 1920 /* Namespace */, /*ignoreErrors*/ false, dontResolveAlias);
             }
         }
@@ -47672,7 +48682,7 @@
             }
             var namespaceMeaning = 1920 /* Namespace */ | (ts.isInJSFile(name) ? meaning & 111551 /* Value */ : 0);
             var symbol;
-            if (name.kind === 78 /* Identifier */) {
+            if (name.kind === 79 /* Identifier */) {
                 var message = meaning === namespaceMeaning || ts.nodeIsSynthesized(name) ? ts.Diagnostics.Cannot_find_namespace_0 : getCannotFindNameDiagnosticForName(ts.getFirstIdentifier(name));
                 var symbolFromJSPrototype = ts.isInJSFile(name) && !ts.nodeIsSynthesized(name) ? resolveEntityNameFromAssignmentDeclaration(name, meaning) : undefined;
                 symbol = getMergedSymbol(resolveName(location || name, name.escapedText, meaning, ignoreErrors || symbolFromJSPrototype ? undefined : message, name, /*isUse*/ true));
@@ -47680,9 +48690,9 @@
                     return getMergedSymbol(symbolFromJSPrototype);
                 }
             }
-            else if (name.kind === 158 /* QualifiedName */ || name.kind === 202 /* PropertyAccessExpression */) {
-                var left = name.kind === 158 /* QualifiedName */ ? name.left : name.expression;
-                var right = name.kind === 158 /* QualifiedName */ ? name.right : name.name;
+            else if (name.kind === 159 /* QualifiedName */ || name.kind === 204 /* PropertyAccessExpression */) {
+                var left = name.kind === 159 /* QualifiedName */ ? name.left : name.expression;
+                var right = name.kind === 159 /* QualifiedName */ ? name.right : name.name;
                 var namespace = resolveEntityName(left, namespaceMeaning, ignoreErrors, /*dontResolveAlias*/ false, location);
                 if (!namespace || ts.nodeIsMissing(right)) {
                     return undefined;
@@ -47721,7 +48731,7 @@
                 throw ts.Debug.assertNever(name, "Unknown entity name kind.");
             }
             ts.Debug.assert((ts.getCheckFlags(symbol) & 1 /* Instantiated */) === 0, "Should never get an instantiated symbol here.");
-            if (!ts.nodeIsSynthesized(name) && ts.isEntityName(name) && (symbol.flags & 2097152 /* Alias */ || name.parent.kind === 267 /* ExportAssignment */)) {
+            if (!ts.nodeIsSynthesized(name) && ts.isEntityName(name) && (symbol.flags & 2097152 /* Alias */ || name.parent.kind === 269 /* ExportAssignment */)) {
                 markSymbolOfAliasDeclarationIfTypeOnly(ts.getAliasDeclarationFromName(name), symbol, /*finalTarget*/ undefined, /*overwriteEmpty*/ true);
             }
             return (symbol.flags & meaning) || dontResolveAlias ? symbol : resolveAlias(symbol);
@@ -47958,7 +48968,7 @@
         function resolveESModuleSymbol(moduleSymbol, referencingLocation, dontResolveAlias, suppressInteropError) {
             var symbol = resolveExternalModuleSymbol(moduleSymbol, dontResolveAlias);
             if (!dontResolveAlias && symbol) {
-                if (!suppressInteropError && !(symbol.flags & (1536 /* Module */ | 3 /* Variable */)) && !ts.getDeclarationOfKind(symbol, 298 /* SourceFile */)) {
+                if (!suppressInteropError && !(symbol.flags & (1536 /* Module */ | 3 /* Variable */)) && !ts.getDeclarationOfKind(symbol, 300 /* SourceFile */)) {
                     var compilerOptionName = moduleKind >= ts.ModuleKind.ES2015
                         ? "allowSyntheticDefaultImports"
                         : "esModuleInterop";
@@ -47991,7 +49001,7 @@
                             if (symbol.exports)
                                 result.exports = new ts.Map(symbol.exports);
                             var resolvedModuleType = resolveStructuredTypeMembers(moduleType); // Should already be resolved from the signature checks above
-                            result.type = createAnonymousType(result, resolvedModuleType.members, ts.emptyArray, ts.emptyArray, resolvedModuleType.stringIndexInfo, resolvedModuleType.numberIndexInfo);
+                            result.type = createAnonymousType(result, resolvedModuleType.members, ts.emptyArray, ts.emptyArray, resolvedModuleType.indexInfos);
                             return result;
                         }
                     }
@@ -48016,6 +49026,23 @@
             }
             return exports;
         }
+        function forEachExportAndPropertyOfModule(moduleSymbol, cb) {
+            var exports = getExportsOfModule(moduleSymbol);
+            exports.forEach(function (symbol, key) {
+                if (!isReservedMemberName(key)) {
+                    cb(symbol, key);
+                }
+            });
+            var exportEquals = resolveExternalModuleSymbol(moduleSymbol);
+            if (exportEquals !== moduleSymbol) {
+                var type = getTypeOfSymbol(exportEquals);
+                if (shouldTreatPropertiesOfExternalModuleAsExports(type)) {
+                    getPropertiesOfType(type).forEach(function (symbol) {
+                        cb(symbol, symbol.escapedName);
+                    });
+                }
+            }
+        }
         function tryGetMemberInModuleExports(memberName, moduleSymbol) {
             var symbolTable = getExportsOfModule(moduleSymbol);
             if (symbolTable) {
@@ -48204,7 +49231,7 @@
                             }
                         });
                     }) : undefined;
-                var res = firstVariableMatch ? __spreadArray(__spreadArray([firstVariableMatch], additionalContainers), [container]) : __spreadArray(__spreadArray([], additionalContainers), [container]);
+                var res = firstVariableMatch ? __spreadArray(__spreadArray([firstVariableMatch], additionalContainers, true), [container], false) : __spreadArray(__spreadArray([], additionalContainers, true), [container], false);
                 res = ts.append(res, objectLiteralContainer);
                 res = ts.addRange(res, reexportContainers);
                 return res;
@@ -48213,7 +49240,7 @@
                 if (!ts.isAmbientModule(d) && d.parent && hasNonGlobalAugmentationExternalModuleSymbol(d.parent)) {
                     return getSymbolOfNode(d.parent);
                 }
-                if (ts.isClassExpression(d) && ts.isBinaryExpression(d.parent) && d.parent.operatorToken.kind === 62 /* EqualsToken */ && ts.isAccessExpression(d.parent.left) && ts.isEntityNameExpression(d.parent.left.expression)) {
+                if (ts.isClassExpression(d) && ts.isBinaryExpression(d.parent) && d.parent.operatorToken.kind === 63 /* EqualsToken */ && ts.isAccessExpression(d.parent.left) && ts.isEntityNameExpression(d.parent.left.expression)) {
                     if (ts.isModuleExportsAccessExpression(d.parent.left) || ts.isExportsIdentifier(d.parent.left.expression)) {
                         return getSymbolOfNode(ts.getSourceFileOfNode(d));
                     }
@@ -48285,7 +49312,7 @@
             var members = node.members;
             for (var _i = 0, members_3 = members; _i < members_3.length; _i++) {
                 var member = members_3[_i];
-                if (member.kind === 167 /* Constructor */ && ts.nodeIsPresent(member.body)) {
+                if (member.kind === 169 /* Constructor */ && ts.nodeIsPresent(member.body)) {
                     return member;
                 }
             }
@@ -48309,12 +49336,6 @@
             type.objectFlags = objectFlags;
             return type;
         }
-        function createBooleanType(trueFalseTypes) {
-            var type = getUnionType(trueFalseTypes);
-            type.flags |= 16 /* Boolean */;
-            type.intrinsicName = "boolean";
-            return type;
-        }
         function createObjectType(objectFlags, symbol) {
             var type = createType(524288 /* Object */);
             type.objectFlags = objectFlags;
@@ -48323,12 +49344,11 @@
             type.properties = undefined;
             type.callSignatures = undefined;
             type.constructSignatures = undefined;
-            type.stringIndexInfo = undefined;
-            type.numberIndexInfo = undefined;
+            type.indexInfos = undefined;
             return type;
         }
         function createTypeofType() {
-            return getUnionType(ts.arrayFrom(typeofEQFacts.keys(), getLiteralType));
+            return getUnionType(ts.arrayFrom(typeofEQFacts.keys(), getStringLiteralType));
         }
         function createTypeParameter(symbol) {
             var type = createType(262144 /* TypeParameter */);
@@ -48361,21 +49381,20 @@
             var index = getIndexSymbolFromSymbolTable(members);
             return index ? ts.concatenate(result, [index]) : result;
         }
-        function setStructuredTypeMembers(type, members, callSignatures, constructSignatures, stringIndexInfo, numberIndexInfo) {
+        function setStructuredTypeMembers(type, members, callSignatures, constructSignatures, indexInfos) {
             var resolved = type;
             resolved.members = members;
             resolved.properties = ts.emptyArray;
             resolved.callSignatures = callSignatures;
             resolved.constructSignatures = constructSignatures;
-            resolved.stringIndexInfo = stringIndexInfo;
-            resolved.numberIndexInfo = numberIndexInfo;
+            resolved.indexInfos = indexInfos;
             // This can loop back to getPropertyOfType() which would crash if `callSignatures` & `constructSignatures` are not initialized.
             if (members !== emptySymbols)
                 resolved.properties = getNamedMembers(members);
             return resolved;
         }
-        function createAnonymousType(symbol, members, callSignatures, constructSignatures, stringIndexInfo, numberIndexInfo) {
-            return setStructuredTypeMembers(createObjectType(16 /* Anonymous */, symbol), members, callSignatures, constructSignatures, stringIndexInfo, numberIndexInfo);
+        function createAnonymousType(symbol, members, callSignatures, constructSignatures, indexInfos) {
+            return setStructuredTypeMembers(createObjectType(16 /* Anonymous */, symbol), members, callSignatures, constructSignatures, indexInfos);
         }
         function getResolvedTypeWithoutAbstractConstructSignatures(type) {
             if (type.constructSignatures.length === 0)
@@ -48385,7 +49404,7 @@
             var constructSignatures = ts.filter(type.constructSignatures, function (signature) { return !(signature.flags & 4 /* Abstract */); });
             if (type.constructSignatures === constructSignatures)
                 return type;
-            var typeCopy = createAnonymousType(type.symbol, type.members, type.callSignatures, ts.some(constructSignatures) ? constructSignatures : ts.emptyArray, type.stringIndexInfo, type.numberIndexInfo);
+            var typeCopy = createAnonymousType(type.symbol, type.members, type.callSignatures, ts.some(constructSignatures) ? constructSignatures : ts.emptyArray, type.indexInfos);
             type.objectTypeWithoutAbstractConstructSignatures = typeCopy;
             typeCopy.objectTypeWithoutAbstractConstructSignatures = typeCopy;
             return typeCopy;
@@ -48395,28 +49414,28 @@
             var _loop_8 = function (location) {
                 // Locals of a source file are not in scope (because they get merged into the global symbol table)
                 if (location.locals && !isGlobalSourceFile(location)) {
-                    if (result = callback(location.locals, /*ignoreQualification*/ undefined, /*isLocalNameLookup*/ true)) {
+                    if (result = callback(location.locals, /*ignoreQualification*/ undefined, /*isLocalNameLookup*/ true, location)) {
                         return { value: result };
                     }
                 }
                 switch (location.kind) {
-                    case 298 /* SourceFile */:
+                    case 300 /* SourceFile */:
                         if (!ts.isExternalOrCommonJsModule(location)) {
                             break;
                         }
                     // falls through
-                    case 257 /* ModuleDeclaration */:
+                    case 259 /* ModuleDeclaration */:
                         var sym = getSymbolOfNode(location);
                         // `sym` may not have exports if this module declaration is backed by the symbol for a `const` that's being rewritten
                         // into a namespace - in such cases, it's best to just let the namespace appear empty (the const members couldn't have referred
                         // to one another anyway)
-                        if (result = callback((sym === null || sym === void 0 ? void 0 : sym.exports) || emptySymbols, /*ignoreQualification*/ undefined, /*isLocalNameLookup*/ true)) {
+                        if (result = callback((sym === null || sym === void 0 ? void 0 : sym.exports) || emptySymbols, /*ignoreQualification*/ undefined, /*isLocalNameLookup*/ true, location)) {
                             return { value: result };
                         }
                         break;
-                    case 253 /* ClassDeclaration */:
-                    case 222 /* ClassExpression */:
-                    case 254 /* InterfaceDeclaration */:
+                    case 255 /* ClassDeclaration */:
+                    case 224 /* ClassExpression */:
+                    case 256 /* InterfaceDeclaration */:
                         // Type parameters are bound into `members` lists so they can merge across declarations
                         // This is troublesome, since in all other respects, they behave like locals :cries:
                         // TODO: the below is shared with similar code in `resolveName` - in fact, rephrasing all this symbol
@@ -48431,7 +49450,7 @@
                                 (table_1 || (table_1 = ts.createSymbolTable())).set(key, memberSymbol);
                             }
                         });
-                        if (table_1 && (result = callback(table_1))) {
+                        if (table_1 && (result = callback(table_1, /*ignoreQualification*/ undefined, /*isLocalNameLookup*/ false, location))) {
                             return { value: result };
                         }
                         break;
@@ -48453,12 +49472,22 @@
             if (!(symbol && !isPropertyOrMethodDeclarationSymbol(symbol))) {
                 return undefined;
             }
+            var links = getSymbolLinks(symbol);
+            var cache = (links.accessibleChainCache || (links.accessibleChainCache = new ts.Map()));
+            // Go from enclosingDeclaration to the first scope we check, so the cache is keyed off the scope and thus shared more
+            var firstRelevantLocation = forEachSymbolTableInScope(enclosingDeclaration, function (_, __, ___, node) { return node; });
+            var key = (useOnlyExternalAliasing ? 0 : 1) + "|" + (firstRelevantLocation && getNodeId(firstRelevantLocation)) + "|" + meaning;
+            if (cache.has(key)) {
+                return cache.get(key);
+            }
             var id = getSymbolId(symbol);
             var visitedSymbolTables = visitedSymbolTablesMap.get(id);
             if (!visitedSymbolTables) {
                 visitedSymbolTablesMap.set(id, visitedSymbolTables = []);
             }
-            return forEachSymbolTableInScope(enclosingDeclaration, getAccessibleSymbolChainFromSymbolTable);
+            var result = forEachSymbolTableInScope(enclosingDeclaration, getAccessibleSymbolChainFromSymbolTable);
+            cache.set(key, result);
+            return result;
             /**
              * @param {ignoreQualification} boolean Set when a symbol is being looked for through the exports of another symbol (meaning we have a route to qualify it already)
              */
@@ -48501,7 +49530,7 @@
                         && (isLocalNameLookup ? !ts.some(symbolFromSymbolTable.declarations, ts.isNamespaceReexportDeclaration) : true)
                         // While exports are generally considered to be in scope, export-specifier declared symbols are _not_
                         // See similar comment in `resolveName` for details
-                        && (ignoreQualification || !ts.getDeclarationOfKind(symbolFromSymbolTable, 271 /* ExportSpecifier */))) {
+                        && (ignoreQualification || !ts.getDeclarationOfKind(symbolFromSymbolTable, 273 /* ExportSpecifier */))) {
                         var resolvedImportedSymbol = resolveAlias(symbolFromSymbolTable);
                         var candidate = getCandidateListForSymbol(symbolFromSymbolTable, resolvedImportedSymbol, ignoreQualification);
                         if (candidate) {
@@ -48545,7 +49574,7 @@
                     return true;
                 }
                 // Qualify if the symbol from symbol table has same meaning as expected
-                symbolFromSymbolTable = (symbolFromSymbolTable.flags & 2097152 /* Alias */ && !ts.getDeclarationOfKind(symbolFromSymbolTable, 271 /* ExportSpecifier */)) ? resolveAlias(symbolFromSymbolTable) : symbolFromSymbolTable;
+                symbolFromSymbolTable = (symbolFromSymbolTable.flags & 2097152 /* Alias */ && !ts.getDeclarationOfKind(symbolFromSymbolTable, 273 /* ExportSpecifier */)) ? resolveAlias(symbolFromSymbolTable) : symbolFromSymbolTable;
                 if (symbolFromSymbolTable.flags & meaning) {
                     qualify = true;
                     return true;
@@ -48560,10 +49589,10 @@
                 for (var _i = 0, _a = symbol.declarations; _i < _a.length; _i++) {
                     var declaration = _a[_i];
                     switch (declaration.kind) {
-                        case 164 /* PropertyDeclaration */:
-                        case 166 /* MethodDeclaration */:
-                        case 168 /* GetAccessor */:
-                        case 169 /* SetAccessor */:
+                        case 165 /* PropertyDeclaration */:
+                        case 167 /* MethodDeclaration */:
+                        case 170 /* GetAccessor */:
+                        case 171 /* SetAccessor */:
                             continue;
                         default:
                             return false;
@@ -48693,14 +49722,14 @@
             return node && getSymbolOfNode(node);
         }
         function hasExternalModuleSymbol(declaration) {
-            return ts.isAmbientModule(declaration) || (declaration.kind === 298 /* SourceFile */ && ts.isExternalOrCommonJsModule(declaration));
+            return ts.isAmbientModule(declaration) || (declaration.kind === 300 /* SourceFile */ && ts.isExternalOrCommonJsModule(declaration));
         }
         function hasNonGlobalAugmentationExternalModuleSymbol(declaration) {
-            return ts.isModuleWithStringLiteralName(declaration) || (declaration.kind === 298 /* SourceFile */ && ts.isExternalOrCommonJsModule(declaration));
+            return ts.isModuleWithStringLiteralName(declaration) || (declaration.kind === 300 /* SourceFile */ && ts.isExternalOrCommonJsModule(declaration));
         }
         function hasVisibleDeclarations(symbol, shouldComputeAliasToMakeVisible) {
             var aliasesToMakeVisible;
-            if (!ts.every(ts.filter(symbol.declarations, function (d) { return d.kind !== 78 /* Identifier */; }), getIsDeclarationVisible)) {
+            if (!ts.every(ts.filter(symbol.declarations, function (d) { return d.kind !== 79 /* Identifier */; }), getIsDeclarationVisible)) {
                 return undefined;
             }
             return { accessibility: 0 /* Accessible */, aliasesToMakeVisible: aliasesToMakeVisible };
@@ -48752,14 +49781,14 @@
         function isEntityNameVisible(entityName, enclosingDeclaration) {
             // get symbol of the first identifier of the entityName
             var meaning;
-            if (entityName.parent.kind === 177 /* TypeQuery */ ||
+            if (entityName.parent.kind === 179 /* TypeQuery */ ||
                 ts.isExpressionWithTypeArgumentsInClassExtendsClause(entityName.parent) ||
-                entityName.parent.kind === 159 /* ComputedPropertyName */) {
+                entityName.parent.kind === 160 /* ComputedPropertyName */) {
                 // Typeof value
                 meaning = 111551 /* Value */ | 1048576 /* ExportValue */;
             }
-            else if (entityName.kind === 158 /* QualifiedName */ || entityName.kind === 202 /* PropertyAccessExpression */ ||
-                entityName.parent.kind === 261 /* ImportEqualsDeclaration */) {
+            else if (entityName.kind === 159 /* QualifiedName */ || entityName.kind === 204 /* PropertyAccessExpression */ ||
+                entityName.parent.kind === 263 /* ImportEqualsDeclaration */) {
                 // Left identifier from type reference or TypeAlias
                 // Entity name of the import declaration
                 meaning = 1920 /* Namespace */;
@@ -48800,7 +49829,7 @@
             function symbolToStringWorker(writer) {
                 var entity = builder(symbol, meaning, enclosingDeclaration, nodeFlags); // TODO: GH#18217
                 // add neverAsciiEscape for GH#39027
-                var printer = (enclosingDeclaration === null || enclosingDeclaration === void 0 ? void 0 : enclosingDeclaration.kind) === 298 /* SourceFile */ ? ts.createPrinter({ removeComments: true, neverAsciiEscape: true }) : ts.createPrinter({ removeComments: true });
+                var printer = (enclosingDeclaration === null || enclosingDeclaration === void 0 ? void 0 : enclosingDeclaration.kind) === 300 /* SourceFile */ ? ts.createPrinter({ removeComments: true, neverAsciiEscape: true }) : ts.createPrinter({ removeComments: true });
                 var sourceFile = enclosingDeclaration && ts.getSourceFileOfNode(enclosingDeclaration);
                 printer.writeNode(4 /* Unspecified */, entity, /*sourceFile*/ sourceFile, writer);
                 return writer;
@@ -48812,10 +49841,10 @@
             function signatureToStringWorker(writer) {
                 var sigOutput;
                 if (flags & 262144 /* WriteArrowStyleSignature */) {
-                    sigOutput = kind === 1 /* Construct */ ? 176 /* ConstructorType */ : 175 /* FunctionType */;
+                    sigOutput = kind === 1 /* Construct */ ? 178 /* ConstructorType */ : 177 /* FunctionType */;
                 }
                 else {
-                    sigOutput = kind === 1 /* Construct */ ? 171 /* ConstructSignature */ : 170 /* CallSignature */;
+                    sigOutput = kind === 1 /* Construct */ ? 173 /* ConstructSignature */ : 172 /* CallSignature */;
                 }
                 var sig = nodeBuilder.signatureToSignatureDeclaration(signature, sigOutput, enclosingDeclaration, toNodeBuilderFlags(flags) | 70221824 /* IgnoreErrors */ | 512 /* WriteTypeParametersInQualifiedName */);
                 var printer = ts.createPrinter({ removeComments: true, omitTrailingSemicolon: true });
@@ -48869,8 +49898,8 @@
                 typeToTypeNode: function (type, enclosingDeclaration, flags, tracker) {
                     return withContext(enclosingDeclaration, flags, tracker, function (context) { return typeToTypeNodeHelper(type, context); });
                 },
-                indexInfoToIndexSignatureDeclaration: function (indexInfo, kind, enclosingDeclaration, flags, tracker) {
-                    return withContext(enclosingDeclaration, flags, tracker, function (context) { return indexInfoToIndexSignatureDeclarationHelper(indexInfo, kind, context, /*typeNode*/ undefined); });
+                indexInfoToIndexSignatureDeclaration: function (indexInfo, enclosingDeclaration, flags, tracker) {
+                    return withContext(enclosingDeclaration, flags, tracker, function (context) { return indexInfoToIndexSignatureDeclarationHelper(indexInfo, context, /*typeNode*/ undefined); });
                 },
                 signatureToSignatureDeclaration: function (signature, kind, enclosingDeclaration, flags, tracker) {
                     return withContext(enclosingDeclaration, flags, tracker, function (context) { return signatureToSignatureDeclarationHelper(signature, kind, context); });
@@ -48901,9 +49930,8 @@
                     enclosingDeclaration: enclosingDeclaration,
                     flags: flags || 0 /* None */,
                     // If no full tracker is provided, fake up a dummy one with a basic limited-functionality moduleResolverHost
-                    tracker: tracker && tracker.trackSymbol ? tracker : { trackSymbol: ts.noop, moduleResolverHost: flags & 134217728 /* DoNotIncludeSymbolChain */ ? {
+                    tracker: tracker && tracker.trackSymbol ? tracker : { trackSymbol: function () { return false; }, moduleResolverHost: flags & 134217728 /* DoNotIncludeSymbolChain */ ? {
                             getCommonSourceDirectory: !!host.getCommonSourceDirectory ? function () { return host.getCommonSourceDirectory(); } : function () { return ""; },
-                            getSourceFiles: function () { return host.getSourceFiles(); },
                             getCurrentDirectory: function () { return host.getCurrentDirectory(); },
                             getSymlinkCache: ts.maybeBind(host, host.getSymlinkCache),
                             useCaseSensitiveFileNames: ts.maybeBind(host, host.useCaseSensitiveFileNames),
@@ -48914,17 +49942,46 @@
                             getFileIncludeReasons: function () { return host.getFileIncludeReasons(); },
                         } : undefined },
                     encounteredError: false,
+                    reportedDiagnostic: false,
                     visitedTypes: undefined,
                     symbolDepth: undefined,
                     inferTypeParameters: undefined,
                     approximateLength: 0
                 };
+                context.tracker = wrapSymbolTrackerToReportForContext(context, context.tracker);
                 var resultingNode = cb(context);
                 if (context.truncating && context.flags & 1 /* NoTruncation */) {
                     (_b = (_a = context.tracker) === null || _a === void 0 ? void 0 : _a.reportTruncationError) === null || _b === void 0 ? void 0 : _b.call(_a);
                 }
                 return context.encounteredError ? undefined : resultingNode;
             }
+            function wrapSymbolTrackerToReportForContext(context, tracker) {
+                var oldTrackSymbol = tracker.trackSymbol;
+                return __assign(__assign({}, tracker), { reportCyclicStructureError: wrapReportedDiagnostic(tracker.reportCyclicStructureError), reportInaccessibleThisError: wrapReportedDiagnostic(tracker.reportInaccessibleThisError), reportInaccessibleUniqueSymbolError: wrapReportedDiagnostic(tracker.reportInaccessibleUniqueSymbolError), reportLikelyUnsafeImportRequiredError: wrapReportedDiagnostic(tracker.reportLikelyUnsafeImportRequiredError), reportNonlocalAugmentation: wrapReportedDiagnostic(tracker.reportNonlocalAugmentation), reportPrivateInBaseOfClassExpression: wrapReportedDiagnostic(tracker.reportPrivateInBaseOfClassExpression), reportNonSerializableProperty: wrapReportedDiagnostic(tracker.reportNonSerializableProperty), trackSymbol: oldTrackSymbol && (function () {
+                        var args = [];
+                        for (var _i = 0; _i < arguments.length; _i++) {
+                            args[_i] = arguments[_i];
+                        }
+                        var result = oldTrackSymbol.apply(void 0, args);
+                        if (result) {
+                            context.reportedDiagnostic = true;
+                        }
+                        return result;
+                    }) });
+                function wrapReportedDiagnostic(method) {
+                    if (!method) {
+                        return method;
+                    }
+                    return (function () {
+                        var args = [];
+                        for (var _i = 0; _i < arguments.length; _i++) {
+                            args[_i] = arguments[_i];
+                        }
+                        context.reportedDiagnostic = true;
+                        return method.apply(void 0, args);
+                    });
+                }
+            }
             function checkTruncationLength(context) {
                 if (context.truncating)
                     return context.truncating;
@@ -48942,33 +49999,33 @@
                         return undefined; // TODO: GH#18217
                     }
                     context.approximateLength += 3;
-                    return ts.factory.createKeywordTypeNode(128 /* AnyKeyword */);
+                    return ts.factory.createKeywordTypeNode(129 /* AnyKeyword */);
                 }
                 if (!(context.flags & 536870912 /* NoTypeReduction */)) {
                     type = getReducedType(type);
                 }
                 if (type.flags & 1 /* Any */) {
                     context.approximateLength += 3;
-                    return ts.factory.createKeywordTypeNode(type === intrinsicMarkerType ? 136 /* IntrinsicKeyword */ : 128 /* AnyKeyword */);
+                    return ts.factory.createKeywordTypeNode(type === intrinsicMarkerType ? 137 /* IntrinsicKeyword */ : 129 /* AnyKeyword */);
                 }
                 if (type.flags & 2 /* Unknown */) {
-                    return ts.factory.createKeywordTypeNode(152 /* UnknownKeyword */);
+                    return ts.factory.createKeywordTypeNode(153 /* UnknownKeyword */);
                 }
                 if (type.flags & 4 /* String */) {
                     context.approximateLength += 6;
-                    return ts.factory.createKeywordTypeNode(147 /* StringKeyword */);
+                    return ts.factory.createKeywordTypeNode(148 /* StringKeyword */);
                 }
                 if (type.flags & 8 /* Number */) {
                     context.approximateLength += 6;
-                    return ts.factory.createKeywordTypeNode(144 /* NumberKeyword */);
+                    return ts.factory.createKeywordTypeNode(145 /* NumberKeyword */);
                 }
                 if (type.flags & 64 /* BigInt */) {
                     context.approximateLength += 6;
-                    return ts.factory.createKeywordTypeNode(155 /* BigIntKeyword */);
+                    return ts.factory.createKeywordTypeNode(156 /* BigIntKeyword */);
                 }
-                if (type.flags & 16 /* Boolean */) {
+                if (type.flags & 16 /* Boolean */ && !type.aliasSymbol) {
                     context.approximateLength += 7;
-                    return ts.factory.createKeywordTypeNode(131 /* BooleanKeyword */);
+                    return ts.factory.createKeywordTypeNode(132 /* BooleanKeyword */);
                 }
                 if (type.flags & 1024 /* EnumLiteral */ && !(type.flags & 1048576 /* Union */)) {
                     var parentSymbol = getParentOfSymbol(type.symbol);
@@ -49022,15 +50079,15 @@
                         }
                     }
                     context.approximateLength += 13;
-                    return ts.factory.createTypeOperatorNode(151 /* UniqueKeyword */, ts.factory.createKeywordTypeNode(148 /* SymbolKeyword */));
+                    return ts.factory.createTypeOperatorNode(152 /* UniqueKeyword */, ts.factory.createKeywordTypeNode(149 /* SymbolKeyword */));
                 }
                 if (type.flags & 16384 /* Void */) {
                     context.approximateLength += 4;
-                    return ts.factory.createKeywordTypeNode(113 /* VoidKeyword */);
+                    return ts.factory.createKeywordTypeNode(114 /* VoidKeyword */);
                 }
                 if (type.flags & 32768 /* Undefined */) {
                     context.approximateLength += 9;
-                    return ts.factory.createKeywordTypeNode(150 /* UndefinedKeyword */);
+                    return ts.factory.createKeywordTypeNode(151 /* UndefinedKeyword */);
                 }
                 if (type.flags & 65536 /* Null */) {
                     context.approximateLength += 4;
@@ -49038,15 +50095,15 @@
                 }
                 if (type.flags & 131072 /* Never */) {
                     context.approximateLength += 5;
-                    return ts.factory.createKeywordTypeNode(141 /* NeverKeyword */);
+                    return ts.factory.createKeywordTypeNode(142 /* NeverKeyword */);
                 }
                 if (type.flags & 4096 /* ESSymbol */) {
                     context.approximateLength += 6;
-                    return ts.factory.createKeywordTypeNode(148 /* SymbolKeyword */);
+                    return ts.factory.createKeywordTypeNode(149 /* SymbolKeyword */);
                 }
                 if (type.flags & 67108864 /* NonPrimitive */) {
                     context.approximateLength += 6;
-                    return ts.factory.createKeywordTypeNode(145 /* ObjectKeyword */);
+                    return ts.factory.createKeywordTypeNode(146 /* ObjectKeyword */);
                 }
                 if (isThisTypeParameter(type)) {
                     if (context.flags & 4194304 /* InObjectTypeLiteral */) {
@@ -49116,7 +50173,7 @@
                     var indexedType = type.type;
                     context.approximateLength += 6;
                     var indexTypeNode = typeToTypeNodeHelper(indexedType, context);
-                    return ts.factory.createTypeOperatorNode(138 /* KeyOfKeyword */, indexTypeNode);
+                    return ts.factory.createTypeOperatorNode(139 /* KeyOfKeyword */, indexTypeNode);
                 }
                 if (type.flags & 134217728 /* TemplateLiteral */) {
                     var texts_1 = type.texts;
@@ -49137,6 +50194,13 @@
                     return ts.factory.createIndexedAccessTypeNode(objectTypeNode, indexTypeNode);
                 }
                 if (type.flags & 16777216 /* Conditional */) {
+                    return visitAndTransformType(type, function (type) { return conditionalTypeToTypeNode(type); });
+                }
+                if (type.flags & 33554432 /* Substitution */) {
+                    return typeToTypeNodeHelper(type.baseType, context);
+                }
+                return ts.Debug.fail("Should be unreachable.");
+                function conditionalTypeToTypeNode(type) {
                     var checkTypeNode = typeToTypeNodeHelper(type.checkType, context);
                     var saveInferTypeParameters = context.inferTypeParameters;
                     context.inferTypeParameters = type.root.inferTypeParameters;
@@ -49147,10 +50211,6 @@
                     context.approximateLength += 15;
                     return ts.factory.createConditionalTypeNode(checkTypeNode, extendsTypeNode, trueTypeNode, falseTypeNode);
                 }
-                if (type.flags & 33554432 /* Substitution */) {
-                    return typeToTypeNodeHelper(type.baseType, context);
-                }
-                return ts.Debug.fail("Should be unreachable.");
                 function typeToTypeNodeOrCircularityElision(type) {
                     var _a, _b, _c;
                     if (type.flags & 1048576 /* Union */) {
@@ -49173,14 +50233,14 @@
                     if (isMappedTypeWithKeyofConstraintDeclaration(type)) {
                         // We have a { [P in keyof T]: X }
                         // We do this to ensure we retain the toplevel keyof-ness of the type which may be lost due to keyof distribution during `getConstraintTypeFromMappedType`
-                        appropriateConstraintTypeNode = ts.factory.createTypeOperatorNode(138 /* KeyOfKeyword */, typeToTypeNodeHelper(getModifiersTypeFromMappedType(type), context));
+                        appropriateConstraintTypeNode = ts.factory.createTypeOperatorNode(139 /* KeyOfKeyword */, typeToTypeNodeHelper(getModifiersTypeFromMappedType(type), context));
                     }
                     else {
                         appropriateConstraintTypeNode = typeToTypeNodeHelper(getConstraintTypeFromMappedType(type), context);
                     }
                     var typeParameterNode = typeParameterToDeclarationWithConstraint(getTypeParameterFromMappedType(type), context, appropriateConstraintTypeNode);
                     var nameTypeNode = type.declaration.nameType ? typeToTypeNodeHelper(getNameTypeFromMappedType(type), context) : undefined;
-                    var templateTypeNode = typeToTypeNodeHelper(getTemplateTypeFromMappedType(type), context);
+                    var templateTypeNode = typeToTypeNodeHelper(removeMissingType(getTemplateTypeFromMappedType(type), !!(getMappedTypeModifiers(type) & 4 /* IncludeOptional */)), context);
                     var mappedTypeNode = ts.factory.createMappedTypeNode(readonlyToken, typeParameterNode, nameTypeNode, questionToken, templateTypeNode);
                     context.approximateLength += 10;
                     return ts.setEmitFlags(mappedTypeNode, 1 /* SingleLine */);
@@ -49198,7 +50258,7 @@
                         // Always use 'typeof T' for type of class, enum, and module objects
                         else if (symbol.flags & 32 /* Class */
                             && !getBaseTypeVariableOfClass(symbol)
-                            && !(symbol.valueDeclaration && symbol.valueDeclaration.kind === 222 /* ClassExpression */ && context.flags & 2048 /* WriteClassExpressionAsTypeLiteral */) ||
+                            && !(symbol.valueDeclaration && symbol.valueDeclaration.kind === 224 /* ClassExpression */ && context.flags & 2048 /* WriteClassExpressionAsTypeLiteral */) ||
                             symbol.flags & (384 /* Enum */ | 512 /* ValueModule */) ||
                             shouldWriteTypeOfFunctionSymbol()) {
                             return symbolToTypeNode(symbol, context, isInstanceType);
@@ -49225,11 +50285,11 @@
                     function shouldWriteTypeOfFunctionSymbol() {
                         var _a;
                         var isStaticMethodSymbol = !!(symbol.flags & 8192 /* Method */) && // typeof static method
-                            ts.some(symbol.declarations, function (declaration) { return ts.hasSyntacticModifier(declaration, 32 /* Static */); });
+                            ts.some(symbol.declarations, function (declaration) { return ts.isStatic(declaration); });
                         var isNonLocalFunctionSymbol = !!(symbol.flags & 16 /* Function */) &&
                             (symbol.parent || // is exported function symbol
                                 ts.forEach(symbol.declarations, function (declaration) {
-                                    return declaration.parent.kind === 298 /* SourceFile */ || declaration.parent.kind === 258 /* ModuleBlock */;
+                                    return declaration.parent.kind === 300 /* SourceFile */ || declaration.parent.kind === 260 /* ModuleBlock */;
                                 }));
                         if (isStaticMethodSymbol || isNonLocalFunctionSymbol) {
                             // typeof is allowed only for static/non local functions
@@ -49239,11 +50299,13 @@
                     }
                 }
                 function visitAndTransformType(type, transform) {
+                    var _a, _b;
                     var typeId = type.id;
                     var isConstructorObject = ts.getObjectFlags(type) & 16 /* Anonymous */ && type.symbol && type.symbol.flags & 32 /* Class */;
                     var id = ts.getObjectFlags(type) & 4 /* Reference */ && type.node ? "N" + getNodeId(type.node) :
-                        type.symbol ? (isConstructorObject ? "+" : "") + getSymbolId(type.symbol) :
-                            undefined;
+                        type.flags & 16777216 /* Conditional */ ? "N" + getNodeId(type.root.node) :
+                            type.symbol ? (isConstructorObject ? "+" : "") + getSymbolId(type.symbol) :
+                                undefined;
                     // Since instantiations of the same anonymous type have the same symbol, tracking symbols instead
                     // of types allows us to catch circular references to instantiations of the same anonymous type
                     if (!context.visitedTypes) {
@@ -49252,6 +50314,19 @@
                     if (id && !context.symbolDepth) {
                         context.symbolDepth = new ts.Map();
                     }
+                    var links = context.enclosingDeclaration && getNodeLinks(context.enclosingDeclaration);
+                    var key = getTypeId(type) + "|" + context.flags;
+                    if (links) {
+                        links.serializedTypes || (links.serializedTypes = new ts.Map());
+                    }
+                    var cachedResult = (_a = links === null || links === void 0 ? void 0 : links.serializedTypes) === null || _a === void 0 ? void 0 : _a.get(key);
+                    if (cachedResult) {
+                        if (cachedResult.truncating) {
+                            context.truncating = true;
+                        }
+                        context.approximateLength += cachedResult.addedLength;
+                        return deepCloneOrReuseNode(cachedResult);
+                    }
                     var depth;
                     if (id) {
                         depth = context.symbolDepth.get(id) || 0;
@@ -49261,31 +50336,46 @@
                         context.symbolDepth.set(id, depth + 1);
                     }
                     context.visitedTypes.add(typeId);
+                    var startLength = context.approximateLength;
                     var result = transform(type);
+                    var addedLength = context.approximateLength - startLength;
+                    if (!context.reportedDiagnostic && !context.encounteredError) {
+                        if (context.truncating) {
+                            result.truncating = true;
+                        }
+                        result.addedLength = addedLength;
+                        (_b = links === null || links === void 0 ? void 0 : links.serializedTypes) === null || _b === void 0 ? void 0 : _b.set(key, result);
+                    }
                     context.visitedTypes.delete(typeId);
                     if (id) {
                         context.symbolDepth.set(id, depth);
                     }
                     return result;
+                    function deepCloneOrReuseNode(node) {
+                        if (!ts.nodeIsSynthesized(node) && ts.getParseTreeNode(node) === node) {
+                            return node;
+                        }
+                        return ts.setTextRange(ts.factory.cloneNode(ts.visitEachChild(node, deepCloneOrReuseNode, ts.nullTransformationContext)), node);
+                    }
                 }
                 function createTypeNodeFromObjectType(type) {
                     if (isGenericMappedType(type) || type.containsError) {
                         return createMappedTypeNodeFromType(type);
                     }
                     var resolved = resolveStructuredTypeMembers(type);
-                    if (!resolved.properties.length && !resolved.stringIndexInfo && !resolved.numberIndexInfo) {
+                    if (!resolved.properties.length && !resolved.indexInfos.length) {
                         if (!resolved.callSignatures.length && !resolved.constructSignatures.length) {
                             context.approximateLength += 2;
                             return ts.setEmitFlags(ts.factory.createTypeLiteralNode(/*members*/ undefined), 1 /* SingleLine */);
                         }
                         if (resolved.callSignatures.length === 1 && !resolved.constructSignatures.length) {
                             var signature = resolved.callSignatures[0];
-                            var signatureNode = signatureToSignatureDeclarationHelper(signature, 175 /* FunctionType */, context);
+                            var signatureNode = signatureToSignatureDeclarationHelper(signature, 177 /* FunctionType */, context);
                             return signatureNode;
                         }
                         if (resolved.constructSignatures.length === 1 && !resolved.callSignatures.length) {
                             var signature = resolved.constructSignatures[0];
-                            var signatureNode = signatureToSignatureDeclarationHelper(signature, 176 /* ConstructorType */, context);
+                            var signatureNode = signatureToSignatureDeclarationHelper(signature, 178 /* ConstructorType */, context);
                             return signatureNode;
                         }
                     }
@@ -49295,8 +50385,7 @@
                         // count the number of type elements excluding abstract constructors
                         var typeElementCount = resolved.callSignatures.length +
                             (resolved.constructSignatures.length - abstractSignatures.length) +
-                            (resolved.stringIndexInfo ? 1 : 0) +
-                            (resolved.numberIndexInfo ? 1 : 0) +
+                            resolved.indexInfos.length +
                             // exclude `prototype` when writing a class expression as a type literal, as per
                             // the logic in `createTypeNodesFromResolvedType`.
                             (context.flags & 2048 /* WriteClassExpressionAsTypeLiteral */ ?
@@ -49329,9 +50418,10 @@
                         }
                         var elementType = typeToTypeNodeHelper(typeArguments[0], context);
                         var arrayType = ts.factory.createArrayTypeNode(elementType);
-                        return type.target === globalArrayType ? arrayType : ts.factory.createTypeOperatorNode(142 /* ReadonlyKeyword */, arrayType);
+                        return type.target === globalArrayType ? arrayType : ts.factory.createTypeOperatorNode(143 /* ReadonlyKeyword */, arrayType);
                     }
                     else if (type.target.objectFlags & 8 /* Tuple */) {
+                        typeArguments = ts.sameMap(typeArguments, function (t, i) { return removeMissingType(t, !!(type.target.elementFlags[i] & 2 /* Optional */)); });
                         if (typeArguments.length > 0) {
                             var arity = getTypeReferenceArity(type);
                             var tupleConstituentNodes = mapToTypeNodes(typeArguments.slice(0, arity), context);
@@ -49353,12 +50443,12 @@
                                     }
                                 }
                                 var tupleTypeNode = ts.setEmitFlags(ts.factory.createTupleTypeNode(tupleConstituentNodes), 1 /* SingleLine */);
-                                return type.target.readonly ? ts.factory.createTypeOperatorNode(142 /* ReadonlyKeyword */, tupleTypeNode) : tupleTypeNode;
+                                return type.target.readonly ? ts.factory.createTypeOperatorNode(143 /* ReadonlyKeyword */, tupleTypeNode) : tupleTypeNode;
                             }
                         }
                         if (context.encounteredError || (context.flags & 524288 /* AllowEmptyTuple */)) {
                             var tupleTypeNode = ts.setEmitFlags(ts.factory.createTupleTypeNode([]), 1 /* SingleLine */);
-                            return type.target.readonly ? ts.factory.createTypeOperatorNode(142 /* ReadonlyKeyword */, tupleTypeNode) : tupleTypeNode;
+                            return type.target.readonly ? ts.factory.createTypeOperatorNode(143 /* ReadonlyKeyword */, tupleTypeNode) : tupleTypeNode;
                         }
                         context.encounteredError = true;
                         return undefined; // TODO: GH#18217
@@ -49465,34 +50555,25 @@
                     var typeElements = [];
                     for (var _i = 0, _a = resolvedType.callSignatures; _i < _a.length; _i++) {
                         var signature = _a[_i];
-                        typeElements.push(signatureToSignatureDeclarationHelper(signature, 170 /* CallSignature */, context));
+                        typeElements.push(signatureToSignatureDeclarationHelper(signature, 172 /* CallSignature */, context));
                     }
                     for (var _b = 0, _c = resolvedType.constructSignatures; _b < _c.length; _b++) {
                         var signature = _c[_b];
                         if (signature.flags & 4 /* Abstract */)
                             continue;
-                        typeElements.push(signatureToSignatureDeclarationHelper(signature, 171 /* ConstructSignature */, context));
+                        typeElements.push(signatureToSignatureDeclarationHelper(signature, 173 /* ConstructSignature */, context));
                     }
-                    if (resolvedType.stringIndexInfo) {
-                        var indexSignature = void 0;
-                        if (resolvedType.objectFlags & 1024 /* ReverseMapped */) {
-                            indexSignature = indexInfoToIndexSignatureDeclarationHelper(createIndexInfo(anyType, resolvedType.stringIndexInfo.isReadonly, resolvedType.stringIndexInfo.declaration), 0 /* String */, context, createElidedInformationPlaceholder(context));
-                        }
-                        else {
-                            indexSignature = indexInfoToIndexSignatureDeclarationHelper(resolvedType.stringIndexInfo, 0 /* String */, context, /*typeNode*/ undefined);
-                        }
-                        typeElements.push(indexSignature);
-                    }
-                    if (resolvedType.numberIndexInfo) {
-                        typeElements.push(indexInfoToIndexSignatureDeclarationHelper(resolvedType.numberIndexInfo, 1 /* Number */, context, /*typeNode*/ undefined));
+                    for (var _d = 0, _e = resolvedType.indexInfos; _d < _e.length; _d++) {
+                        var info = _e[_d];
+                        typeElements.push(indexInfoToIndexSignatureDeclarationHelper(info, context, resolvedType.objectFlags & 1024 /* ReverseMapped */ ? createElidedInformationPlaceholder(context) : undefined));
                     }
                     var properties = resolvedType.properties;
                     if (!properties) {
                         return typeElements;
                     }
                     var i = 0;
-                    for (var _d = 0, properties_1 = properties; _d < properties_1.length; _d++) {
-                        var propertySymbol = properties_1[_d];
+                    for (var _f = 0, properties_1 = properties; _f < properties_1.length; _f++) {
+                        var propertySymbol = properties_1[_f];
                         i++;
                         if (context.flags & 2048 /* WriteClassExpressionAsTypeLiteral */) {
                             if (propertySymbol.flags & 4194304 /* Prototype */) {
@@ -49517,7 +50598,7 @@
                 if (!(context.flags & 1 /* NoTruncation */)) {
                     return ts.factory.createTypeReferenceNode(ts.factory.createIdentifier("..."), /*typeArguments*/ undefined);
                 }
-                return ts.factory.createKeywordTypeNode(128 /* AnyKeyword */);
+                return ts.factory.createKeywordTypeNode(129 /* AnyKeyword */);
             }
             function shouldUsePlaceholderForProperty(propertySymbol, context) {
                 var _a;
@@ -49533,27 +50614,32 @@
                             && !(ts.getObjectFlags(ts.last(context.reverseMappedStack).propertyType) & 16 /* Anonymous */)));
             }
             function addPropertyToElementList(propertySymbol, context, typeElements) {
-                var _a;
+                var _a, _b;
                 var propertyIsReverseMapped = !!(ts.getCheckFlags(propertySymbol) & 8192 /* ReverseMapped */);
                 var propertyType = shouldUsePlaceholderForProperty(propertySymbol, context) ?
-                    anyType : getTypeOfSymbol(propertySymbol);
+                    anyType : getNonMissingTypeOfSymbol(propertySymbol);
                 var saveEnclosingDeclaration = context.enclosingDeclaration;
                 context.enclosingDeclaration = undefined;
                 if (context.tracker.trackSymbol && ts.getCheckFlags(propertySymbol) & 4096 /* Late */ && isLateBoundName(propertySymbol.escapedName)) {
-                    var decl = ts.first(propertySymbol.declarations);
-                    if (propertySymbol.declarations && hasLateBindableName(decl)) {
-                        if (ts.isBinaryExpression(decl)) {
-                            var name = ts.getNameOfDeclaration(decl);
-                            if (name && ts.isElementAccessExpression(name) && ts.isPropertyAccessEntityNameExpression(name.argumentExpression)) {
-                                trackComputedName(name.argumentExpression, saveEnclosingDeclaration, context);
+                    if (propertySymbol.declarations) {
+                        var decl = ts.first(propertySymbol.declarations);
+                        if (hasLateBindableName(decl)) {
+                            if (ts.isBinaryExpression(decl)) {
+                                var name = ts.getNameOfDeclaration(decl);
+                                if (name && ts.isElementAccessExpression(name) && ts.isPropertyAccessEntityNameExpression(name.argumentExpression)) {
+                                    trackComputedName(name.argumentExpression, saveEnclosingDeclaration, context);
+                                }
+                            }
+                            else {
+                                trackComputedName(decl.name.expression, saveEnclosingDeclaration, context);
                             }
                         }
-                        else {
-                            trackComputedName(decl.name.expression, saveEnclosingDeclaration, context);
-                        }
+                    }
+                    else if ((_a = context.tracker) === null || _a === void 0 ? void 0 : _a.reportNonSerializableProperty) {
+                        context.tracker.reportNonSerializableProperty(symbolToString(propertySymbol));
                     }
                 }
-                context.enclosingDeclaration = propertySymbol.valueDeclaration || ((_a = propertySymbol.declarations) === null || _a === void 0 ? void 0 : _a[0]) || saveEnclosingDeclaration;
+                context.enclosingDeclaration = propertySymbol.valueDeclaration || ((_b = propertySymbol.declarations) === null || _b === void 0 ? void 0 : _b[0]) || saveEnclosingDeclaration;
                 var propertyName = getPropertyNameNodeForSymbol(propertySymbol, context);
                 context.enclosingDeclaration = saveEnclosingDeclaration;
                 context.approximateLength += (ts.symbolName(propertySymbol).length + 1);
@@ -49562,7 +50648,7 @@
                     var signatures = getSignaturesOfType(filterType(propertyType, function (t) { return !(t.flags & 32768 /* Undefined */); }), 0 /* Call */);
                     for (var _i = 0, signatures_1 = signatures; _i < signatures_1.length; _i++) {
                         var signature = signatures_1[_i];
-                        var methodDeclaration = signatureToSignatureDeclarationHelper(signature, 165 /* MethodSignature */, context, { name: propertyName, questionToken: optionalToken });
+                        var methodDeclaration = signatureToSignatureDeclarationHelper(signature, 166 /* MethodSignature */, context, { name: propertyName, questionToken: optionalToken });
                         typeElements.push(preserveCommentsOn(methodDeclaration));
                     }
                 }
@@ -49576,12 +50662,12 @@
                             context.reverseMappedStack || (context.reverseMappedStack = []);
                             context.reverseMappedStack.push(propertySymbol);
                         }
-                        propertyTypeNode = propertyType ? serializeTypeForDeclaration(context, propertyType, propertySymbol, saveEnclosingDeclaration) : ts.factory.createKeywordTypeNode(128 /* AnyKeyword */);
+                        propertyTypeNode = propertyType ? serializeTypeForDeclaration(context, propertyType, propertySymbol, saveEnclosingDeclaration) : ts.factory.createKeywordTypeNode(129 /* AnyKeyword */);
                         if (propertyIsReverseMapped) {
                             context.reverseMappedStack.pop();
                         }
                     }
-                    var modifiers = isReadonlySymbol(propertySymbol) ? [ts.factory.createToken(142 /* ReadonlyKeyword */)] : undefined;
+                    var modifiers = isReadonlySymbol(propertySymbol) ? [ts.factory.createToken(143 /* ReadonlyKeyword */)] : undefined;
                     if (modifiers) {
                         context.approximateLength += 9;
                     }
@@ -49590,8 +50676,8 @@
                 }
                 function preserveCommentsOn(node) {
                     var _a;
-                    if (ts.some(propertySymbol.declarations, function (d) { return d.kind === 337 /* JSDocPropertyTag */; })) {
-                        var d = (_a = propertySymbol.declarations) === null || _a === void 0 ? void 0 : _a.find(function (d) { return d.kind === 337 /* JSDocPropertyTag */; });
+                    if (ts.some(propertySymbol.declarations, function (d) { return d.kind === 342 /* JSDocPropertyTag */; })) {
+                        var d = (_a = propertySymbol.declarations) === null || _a === void 0 ? void 0 : _a.find(function (d) { return d.kind === 342 /* JSDocPropertyTag */; });
                         var commentText = ts.getTextOfJSDocComment(d.comment);
                         if (commentText) {
                             ts.setSyntheticLeadingComments(node, [{ kind: 3 /* MultiLineCommentTrivia */, text: "*\n * " + commentText.replace(/\n/g, "\n * ") + "\n ", pos: -1, end: -1, hasTrailingNewLine: true }]);
@@ -49675,9 +50761,9 @@
                     || !!a.symbol && a.symbol === b.symbol
                     || !!a.aliasSymbol && a.aliasSymbol === b.aliasSymbol;
             }
-            function indexInfoToIndexSignatureDeclarationHelper(indexInfo, kind, context, typeNode) {
+            function indexInfoToIndexSignatureDeclarationHelper(indexInfo, context, typeNode) {
                 var name = ts.getNameFromIndexInfo(indexInfo) || "x";
-                var indexerTypeNode = ts.factory.createKeywordTypeNode(kind === 0 /* String */ ? 147 /* StringKeyword */ : 144 /* NumberKeyword */);
+                var indexerTypeNode = typeToTypeNodeHelper(indexInfo.keyType, context);
                 var indexingParameter = ts.factory.createParameterDeclaration(
                 /*decorators*/ undefined, 
                 /*modifiers*/ undefined, 
@@ -49692,13 +50778,14 @@
                 }
                 context.approximateLength += (name.length + 4);
                 return ts.factory.createIndexSignature(
-                /*decorators*/ undefined, indexInfo.isReadonly ? [ts.factory.createToken(142 /* ReadonlyKeyword */)] : undefined, [indexingParameter], typeNode);
+                /*decorators*/ undefined, indexInfo.isReadonly ? [ts.factory.createToken(143 /* ReadonlyKeyword */)] : undefined, [indexingParameter], typeNode);
             }
             function signatureToSignatureDeclarationHelper(signature, kind, context, options) {
                 var _a, _b, _c, _d;
                 var suppressAny = context.flags & 256 /* SuppressAnyReturnType */;
                 if (suppressAny)
                     context.flags &= ~256 /* SuppressAnyReturnType */; // suppress only toplevel `any`s
+                context.approximateLength += 3; // Usually a signature contributes a few more characters than this, but 3 is the minimum
                 var typeParameters;
                 var typeArguments;
                 if (context.flags & 32 /* WriteTypeArgumentsOfSignature */ && signature.target && signature.mapper && signature.target.typeParameters) {
@@ -49709,7 +50796,7 @@
                 }
                 var expandedParams = getExpandedParameters(signature, /*skipUnionExpanding*/ true)[0];
                 // If the expanded parameter list had a variadic in a non-trailing position, don't expand it
-                var parameters = (ts.some(expandedParams, function (p) { return p !== expandedParams[expandedParams.length - 1] && !!(ts.getCheckFlags(p) & 32768 /* RestParameter */); }) ? signature.parameters : expandedParams).map(function (parameter) { return symbolToParameterDeclaration(parameter, context, kind === 167 /* Constructor */, options === null || options === void 0 ? void 0 : options.privateSymbolVisitor, options === null || options === void 0 ? void 0 : options.bundledImports); });
+                var parameters = (ts.some(expandedParams, function (p) { return p !== expandedParams[expandedParams.length - 1] && !!(ts.getCheckFlags(p) & 32768 /* RestParameter */); }) ? signature.parameters : expandedParams).map(function (parameter) { return symbolToParameterDeclaration(parameter, context, kind === 169 /* Constructor */, options === null || options === void 0 ? void 0 : options.privateSymbolVisitor, options === null || options === void 0 ? void 0 : options.bundledImports); });
                 if (signature.thisParameter) {
                     var thisParameter = symbolToParameterDeclaration(signature.thisParameter, context);
                     parameters.unshift(thisParameter);
@@ -49718,7 +50805,7 @@
                 var typePredicate = getTypePredicateOfSignature(signature);
                 if (typePredicate) {
                     var assertsModifier = typePredicate.kind === 2 /* AssertsThis */ || typePredicate.kind === 3 /* AssertsIdentifier */ ?
-                        ts.factory.createToken(127 /* AssertsKeyword */) :
+                        ts.factory.createToken(128 /* AssertsKeyword */) :
                         undefined;
                     var parameterName = typePredicate.kind === 1 /* Identifier */ || typePredicate.kind === 3 /* AssertsIdentifier */ ?
                         ts.setEmitFlags(ts.factory.createIdentifier(typePredicate.parameterName), 16777216 /* NoAsciiEscaping */) :
@@ -49732,29 +50819,28 @@
                         returnTypeNode = serializeReturnTypeForSignature(context, returnType, signature, options === null || options === void 0 ? void 0 : options.privateSymbolVisitor, options === null || options === void 0 ? void 0 : options.bundledImports);
                     }
                     else if (!suppressAny) {
-                        returnTypeNode = ts.factory.createKeywordTypeNode(128 /* AnyKeyword */);
+                        returnTypeNode = ts.factory.createKeywordTypeNode(129 /* AnyKeyword */);
                     }
                 }
                 var modifiers = options === null || options === void 0 ? void 0 : options.modifiers;
-                if ((kind === 176 /* ConstructorType */) && signature.flags & 4 /* Abstract */) {
+                if ((kind === 178 /* ConstructorType */) && signature.flags & 4 /* Abstract */) {
                     var flags = ts.modifiersToFlags(modifiers);
                     modifiers = ts.factory.createModifiersFromModifierFlags(flags | 128 /* Abstract */);
                 }
-                context.approximateLength += 3; // Usually a signature contributes a few more characters than this, but 3 is the minimum
-                var node = kind === 170 /* CallSignature */ ? ts.factory.createCallSignature(typeParameters, parameters, returnTypeNode) :
-                    kind === 171 /* ConstructSignature */ ? ts.factory.createConstructSignature(typeParameters, parameters, returnTypeNode) :
-                        kind === 165 /* MethodSignature */ ? ts.factory.createMethodSignature(modifiers, (_a = options === null || options === void 0 ? void 0 : options.name) !== null && _a !== void 0 ? _a : ts.factory.createIdentifier(""), options === null || options === void 0 ? void 0 : options.questionToken, typeParameters, parameters, returnTypeNode) :
-                            kind === 166 /* MethodDeclaration */ ? ts.factory.createMethodDeclaration(/*decorators*/ undefined, modifiers, /*asteriskToken*/ undefined, (_b = options === null || options === void 0 ? void 0 : options.name) !== null && _b !== void 0 ? _b : ts.factory.createIdentifier(""), /*questionToken*/ undefined, typeParameters, parameters, returnTypeNode, /*body*/ undefined) :
-                                kind === 167 /* Constructor */ ? ts.factory.createConstructorDeclaration(/*decorators*/ undefined, modifiers, parameters, /*body*/ undefined) :
-                                    kind === 168 /* GetAccessor */ ? ts.factory.createGetAccessorDeclaration(/*decorators*/ undefined, modifiers, (_c = options === null || options === void 0 ? void 0 : options.name) !== null && _c !== void 0 ? _c : ts.factory.createIdentifier(""), parameters, returnTypeNode, /*body*/ undefined) :
-                                        kind === 169 /* SetAccessor */ ? ts.factory.createSetAccessorDeclaration(/*decorators*/ undefined, modifiers, (_d = options === null || options === void 0 ? void 0 : options.name) !== null && _d !== void 0 ? _d : ts.factory.createIdentifier(""), parameters, /*body*/ undefined) :
-                                            kind === 172 /* IndexSignature */ ? ts.factory.createIndexSignature(/*decorators*/ undefined, modifiers, parameters, returnTypeNode) :
-                                                kind === 309 /* JSDocFunctionType */ ? ts.factory.createJSDocFunctionType(parameters, returnTypeNode) :
-                                                    kind === 175 /* FunctionType */ ? ts.factory.createFunctionTypeNode(typeParameters, parameters, returnTypeNode !== null && returnTypeNode !== void 0 ? returnTypeNode : ts.factory.createTypeReferenceNode(ts.factory.createIdentifier(""))) :
-                                                        kind === 176 /* ConstructorType */ ? ts.factory.createConstructorTypeNode(modifiers, typeParameters, parameters, returnTypeNode !== null && returnTypeNode !== void 0 ? returnTypeNode : ts.factory.createTypeReferenceNode(ts.factory.createIdentifier(""))) :
-                                                            kind === 252 /* FunctionDeclaration */ ? ts.factory.createFunctionDeclaration(/*decorators*/ undefined, modifiers, /*asteriskToken*/ undefined, (options === null || options === void 0 ? void 0 : options.name) ? ts.cast(options.name, ts.isIdentifier) : ts.factory.createIdentifier(""), typeParameters, parameters, returnTypeNode, /*body*/ undefined) :
-                                                                kind === 209 /* FunctionExpression */ ? ts.factory.createFunctionExpression(modifiers, /*asteriskToken*/ undefined, (options === null || options === void 0 ? void 0 : options.name) ? ts.cast(options.name, ts.isIdentifier) : ts.factory.createIdentifier(""), typeParameters, parameters, returnTypeNode, ts.factory.createBlock([])) :
-                                                                    kind === 210 /* ArrowFunction */ ? ts.factory.createArrowFunction(modifiers, typeParameters, parameters, returnTypeNode, /*equalsGreaterThanToken*/ undefined, ts.factory.createBlock([])) :
+                var node = kind === 172 /* CallSignature */ ? ts.factory.createCallSignature(typeParameters, parameters, returnTypeNode) :
+                    kind === 173 /* ConstructSignature */ ? ts.factory.createConstructSignature(typeParameters, parameters, returnTypeNode) :
+                        kind === 166 /* MethodSignature */ ? ts.factory.createMethodSignature(modifiers, (_a = options === null || options === void 0 ? void 0 : options.name) !== null && _a !== void 0 ? _a : ts.factory.createIdentifier(""), options === null || options === void 0 ? void 0 : options.questionToken, typeParameters, parameters, returnTypeNode) :
+                            kind === 167 /* MethodDeclaration */ ? ts.factory.createMethodDeclaration(/*decorators*/ undefined, modifiers, /*asteriskToken*/ undefined, (_b = options === null || options === void 0 ? void 0 : options.name) !== null && _b !== void 0 ? _b : ts.factory.createIdentifier(""), /*questionToken*/ undefined, typeParameters, parameters, returnTypeNode, /*body*/ undefined) :
+                                kind === 169 /* Constructor */ ? ts.factory.createConstructorDeclaration(/*decorators*/ undefined, modifiers, parameters, /*body*/ undefined) :
+                                    kind === 170 /* GetAccessor */ ? ts.factory.createGetAccessorDeclaration(/*decorators*/ undefined, modifiers, (_c = options === null || options === void 0 ? void 0 : options.name) !== null && _c !== void 0 ? _c : ts.factory.createIdentifier(""), parameters, returnTypeNode, /*body*/ undefined) :
+                                        kind === 171 /* SetAccessor */ ? ts.factory.createSetAccessorDeclaration(/*decorators*/ undefined, modifiers, (_d = options === null || options === void 0 ? void 0 : options.name) !== null && _d !== void 0 ? _d : ts.factory.createIdentifier(""), parameters, /*body*/ undefined) :
+                                            kind === 174 /* IndexSignature */ ? ts.factory.createIndexSignature(/*decorators*/ undefined, modifiers, parameters, returnTypeNode) :
+                                                kind === 312 /* JSDocFunctionType */ ? ts.factory.createJSDocFunctionType(parameters, returnTypeNode) :
+                                                    kind === 177 /* FunctionType */ ? ts.factory.createFunctionTypeNode(typeParameters, parameters, returnTypeNode !== null && returnTypeNode !== void 0 ? returnTypeNode : ts.factory.createTypeReferenceNode(ts.factory.createIdentifier(""))) :
+                                                        kind === 178 /* ConstructorType */ ? ts.factory.createConstructorTypeNode(modifiers, typeParameters, parameters, returnTypeNode !== null && returnTypeNode !== void 0 ? returnTypeNode : ts.factory.createTypeReferenceNode(ts.factory.createIdentifier(""))) :
+                                                            kind === 254 /* FunctionDeclaration */ ? ts.factory.createFunctionDeclaration(/*decorators*/ undefined, modifiers, /*asteriskToken*/ undefined, (options === null || options === void 0 ? void 0 : options.name) ? ts.cast(options.name, ts.isIdentifier) : ts.factory.createIdentifier(""), typeParameters, parameters, returnTypeNode, /*body*/ undefined) :
+                                                                kind === 211 /* FunctionExpression */ ? ts.factory.createFunctionExpression(modifiers, /*asteriskToken*/ undefined, (options === null || options === void 0 ? void 0 : options.name) ? ts.cast(options.name, ts.isIdentifier) : ts.factory.createIdentifier(""), typeParameters, parameters, returnTypeNode, ts.factory.createBlock([])) :
+                                                                    kind === 212 /* ArrowFunction */ ? ts.factory.createArrowFunction(modifiers, typeParameters, parameters, returnTypeNode, /*equalsGreaterThanToken*/ undefined, ts.factory.createBlock([])) :
                                                                         ts.Debug.assertNever(kind);
                 if (typeArguments) {
                     node.typeArguments = ts.factory.createNodeArray(typeArguments);
@@ -49776,9 +50862,9 @@
                 return typeParameterToDeclarationWithConstraint(type, context, constraintNode);
             }
             function symbolToParameterDeclaration(parameterSymbol, context, preserveModifierFlags, privateSymbolVisitor, bundledImports) {
-                var parameterDeclaration = ts.getDeclarationOfKind(parameterSymbol, 161 /* Parameter */);
+                var parameterDeclaration = ts.getDeclarationOfKind(parameterSymbol, 162 /* Parameter */);
                 if (!parameterDeclaration && !ts.isTransientSymbol(parameterSymbol)) {
-                    parameterDeclaration = ts.getDeclarationOfKind(parameterSymbol, 330 /* JSDocParameterTag */);
+                    parameterDeclaration = ts.getDeclarationOfKind(parameterSymbol, 335 /* JSDocParameterTag */);
                 }
                 var parameterType = getTypeOfSymbol(parameterSymbol);
                 if (parameterDeclaration && isRequiredInitializedParameter(parameterDeclaration)) {
@@ -49792,8 +50878,8 @@
                 var isRest = parameterDeclaration && ts.isRestParameter(parameterDeclaration) || ts.getCheckFlags(parameterSymbol) & 32768 /* RestParameter */;
                 var dotDotDotToken = isRest ? ts.factory.createToken(25 /* DotDotDotToken */) : undefined;
                 var name = parameterDeclaration ? parameterDeclaration.name ?
-                    parameterDeclaration.name.kind === 78 /* Identifier */ ? ts.setEmitFlags(ts.factory.cloneNode(parameterDeclaration.name), 16777216 /* NoAsciiEscaping */) :
-                        parameterDeclaration.name.kind === 158 /* QualifiedName */ ? ts.setEmitFlags(ts.factory.cloneNode(parameterDeclaration.name.right), 16777216 /* NoAsciiEscaping */) :
+                    parameterDeclaration.name.kind === 79 /* Identifier */ ? ts.setEmitFlags(ts.factory.cloneNode(parameterDeclaration.name), 16777216 /* NoAsciiEscaping */) :
+                        parameterDeclaration.name.kind === 159 /* QualifiedName */ ? ts.setEmitFlags(ts.factory.cloneNode(parameterDeclaration.name.right), 16777216 /* NoAsciiEscaping */) :
                             cloneBindingName(parameterDeclaration.name) :
                     ts.symbolName(parameterSymbol) :
                     ts.symbolName(parameterSymbol);
@@ -49958,11 +51044,11 @@
             }
             function getSpecifierForModuleSymbol(symbol, context) {
                 var _a;
-                var file = ts.getDeclarationOfKind(symbol, 298 /* SourceFile */);
+                var file = ts.getDeclarationOfKind(symbol, 300 /* SourceFile */);
                 if (!file) {
                     var equivalentFileSymbol = ts.firstDefined(symbol.declarations, function (d) { return getFileSymbolIfFileSymbolExportEqualsContainer(d, symbol); });
                     if (equivalentFileSymbol) {
-                        file = ts.getDeclarationOfKind(equivalentFileSymbol, 298 /* SourceFile */);
+                        file = ts.getDeclarationOfKind(equivalentFileSymbol, 300 /* SourceFile */);
                     }
                 }
                 if (file && file.moduleName !== undefined) {
@@ -50114,7 +51200,7 @@
                 return false;
             }
             function typeParameterToName(type, context) {
-                var _a;
+                var _a, _b;
                 if (context.flags & 4 /* GenerateNamesForShadowedTypeParams */ && context.typeParameterNames) {
                     var cached = context.typeParameterNames.get(getTypeId(type));
                     if (cached) {
@@ -50122,22 +51208,25 @@
                     }
                 }
                 var result = symbolToName(type.symbol, context, 788968 /* Type */, /*expectsIdentifier*/ true);
-                if (!(result.kind & 78 /* Identifier */)) {
+                if (!(result.kind & 79 /* Identifier */)) {
                     return ts.factory.createIdentifier("(Missing type parameter)");
                 }
                 if (context.flags & 4 /* GenerateNamesForShadowedTypeParams */) {
                     var rawtext = result.escapedText;
-                    var i = 0;
+                    var i = ((_a = context.typeParameterNamesByTextNextNameCount) === null || _a === void 0 ? void 0 : _a.get(rawtext)) || 0;
                     var text = rawtext;
-                    while (((_a = context.typeParameterNamesByText) === null || _a === void 0 ? void 0 : _a.has(text)) || typeParameterShadowsNameInScope(text, context, type)) {
+                    while (((_b = context.typeParameterNamesByText) === null || _b === void 0 ? void 0 : _b.has(text)) || typeParameterShadowsNameInScope(text, context, type)) {
                         i++;
                         text = rawtext + "_" + i;
                     }
                     if (text !== rawtext) {
                         result = ts.factory.createIdentifier(text, result.typeArguments);
                     }
+                    // avoiding iterations of the above loop turns out to be worth it when `i` starts to get large, so we cache the max
+                    // `i` we've used thus far, to save work later
+                    (context.typeParameterNamesByTextNextNameCount || (context.typeParameterNamesByTextNextNameCount = new ts.Map())).set(rawtext, i);
                     (context.typeParameterNames || (context.typeParameterNames = new ts.Map())).set(getTypeId(type), result);
-                    (context.typeParameterNamesByText || (context.typeParameterNamesByText = new ts.Set())).add(result.escapedText);
+                    (context.typeParameterNamesByText || (context.typeParameterNamesByText = new ts.Set())).add(rawtext);
                 }
                 return result;
             }
@@ -50276,6 +51365,7 @@
                 if (initial.typeParameterSymbolList) {
                     initial.typeParameterSymbolList = new ts.Set(initial.typeParameterSymbolList);
                 }
+                initial.tracker = wrapSymbolTrackerToReportForContext(initial, initial.tracker);
                 return initial;
             }
             function getDeclarationWithTypeAnnotation(symbol, enclosingDeclaration) {
@@ -50365,17 +51455,17 @@
                 return transformed === existing ? ts.setTextRange(ts.factory.cloneNode(existing), existing) : transformed;
                 function visitExistingNodeTreeSymbols(node) {
                     // We don't _actually_ support jsdoc namepath types, emit `any` instead
-                    if (ts.isJSDocAllType(node) || node.kind === 311 /* JSDocNamepathType */) {
-                        return ts.factory.createKeywordTypeNode(128 /* AnyKeyword */);
+                    if (ts.isJSDocAllType(node) || node.kind === 314 /* JSDocNamepathType */) {
+                        return ts.factory.createKeywordTypeNode(129 /* AnyKeyword */);
                     }
                     if (ts.isJSDocUnknownType(node)) {
-                        return ts.factory.createKeywordTypeNode(152 /* UnknownKeyword */);
+                        return ts.factory.createKeywordTypeNode(153 /* UnknownKeyword */);
                     }
                     if (ts.isJSDocNullableType(node)) {
                         return ts.factory.createUnionTypeNode([ts.visitNode(node.type, visitExistingNodeTreeSymbols), ts.factory.createLiteralTypeNode(ts.factory.createNull())]);
                     }
                     if (ts.isJSDocOptionalType(node)) {
-                        return ts.factory.createUnionTypeNode([ts.visitNode(node.type, visitExistingNodeTreeSymbols), ts.factory.createKeywordTypeNode(150 /* UndefinedKeyword */)]);
+                        return ts.factory.createUnionTypeNode([ts.visitNode(node.type, visitExistingNodeTreeSymbols), ts.factory.createKeywordTypeNode(151 /* UndefinedKeyword */)]);
                     }
                     if (ts.isJSDocNonNullableType(node)) {
                         return ts.visitNode(node.type, visitExistingNodeTreeSymbols);
@@ -50389,11 +51479,11 @@
                             var typeViaParent = getTypeOfPropertyOfType(getTypeFromTypeNode(node), name.escapedText);
                             var overrideTypeNode = typeViaParent && t.typeExpression && getTypeFromTypeNode(t.typeExpression.type) !== typeViaParent ? typeToTypeNodeHelper(typeViaParent, context) : undefined;
                             return ts.factory.createPropertySignature(
-                            /*modifiers*/ undefined, name, t.isBracketed || t.typeExpression && ts.isJSDocOptionalType(t.typeExpression.type) ? ts.factory.createToken(57 /* QuestionToken */) : undefined, overrideTypeNode || (t.typeExpression && ts.visitNode(t.typeExpression.type, visitExistingNodeTreeSymbols)) || ts.factory.createKeywordTypeNode(128 /* AnyKeyword */));
+                            /*modifiers*/ undefined, name, t.isBracketed || t.typeExpression && ts.isJSDocOptionalType(t.typeExpression.type) ? ts.factory.createToken(57 /* QuestionToken */) : undefined, overrideTypeNode || (t.typeExpression && ts.visitNode(t.typeExpression.type, visitExistingNodeTreeSymbols)) || ts.factory.createKeywordTypeNode(129 /* AnyKeyword */));
                         }));
                     }
                     if (ts.isTypeReferenceNode(node) && ts.isIdentifier(node.typeName) && node.typeName.escapedText === "") {
-                        return ts.setOriginalNode(ts.factory.createKeywordTypeNode(128 /* AnyKeyword */), node);
+                        return ts.setOriginalNode(ts.factory.createKeywordTypeNode(129 /* AnyKeyword */), node);
                     }
                     if ((ts.isExpressionWithTypeArguments(node) || ts.isTypeReferenceNode(node)) && ts.isJSDocIndexSignature(node)) {
                         return ts.factory.createTypeLiteralNode([ts.factory.createIndexSignature(
@@ -50410,13 +51500,13 @@
                             return ts.factory.createConstructorTypeNode(node.modifiers, ts.visitNodes(node.typeParameters, visitExistingNodeTreeSymbols), ts.mapDefined(node.parameters, function (p, i) { return p.name && ts.isIdentifier(p.name) && p.name.escapedText === "new" ? (newTypeNode_1 = p.type, undefined) : ts.factory.createParameterDeclaration(
                             /*decorators*/ undefined, 
                             /*modifiers*/ undefined, getEffectiveDotDotDotForParameter(p), getNameForJSDocFunctionParameter(p, i), p.questionToken, ts.visitNode(p.type, visitExistingNodeTreeSymbols), 
-                            /*initializer*/ undefined); }), ts.visitNode(newTypeNode_1 || node.type, visitExistingNodeTreeSymbols) || ts.factory.createKeywordTypeNode(128 /* AnyKeyword */));
+                            /*initializer*/ undefined); }), ts.visitNode(newTypeNode_1 || node.type, visitExistingNodeTreeSymbols) || ts.factory.createKeywordTypeNode(129 /* AnyKeyword */));
                         }
                         else {
                             return ts.factory.createFunctionTypeNode(ts.visitNodes(node.typeParameters, visitExistingNodeTreeSymbols), ts.map(node.parameters, function (p, i) { return ts.factory.createParameterDeclaration(
                             /*decorators*/ undefined, 
                             /*modifiers*/ undefined, getEffectiveDotDotDotForParameter(p), getNameForJSDocFunctionParameter(p, i), p.questionToken, ts.visitNode(p.type, visitExistingNodeTreeSymbols), 
-                            /*initializer*/ undefined); }), ts.visitNode(node.type, visitExistingNodeTreeSymbols) || ts.factory.createKeywordTypeNode(128 /* AnyKeyword */));
+                            /*initializer*/ undefined); }), ts.visitNode(node.type, visitExistingNodeTreeSymbols) || ts.factory.createKeywordTypeNode(129 /* AnyKeyword */));
                         }
                     }
                     if (ts.isTypeReferenceNode(node) && ts.isInJSDoc(node) && (!existingTypeNodeIsNotReferenceOrIsReferenceWithCompatibleTypeArgumentCount(node, getTypeFromTypeNode(node)) || getIntendedTypeFromJSDocTypeReference(node) || unknownSymbol === resolveTypeReferenceName(getTypeReferenceName(node), 788968 /* Type */, /*ignoreErrors*/ true))) {
@@ -50484,8 +51574,8 @@
                 }
             }
             function symbolTableToDeclarationStatements(symbolTable, context, bundled) {
-                var serializePropertySymbolForClass = makeSerializePropertySymbol(ts.factory.createPropertyDeclaration, 166 /* MethodDeclaration */, /*useAcessors*/ true);
-                var serializePropertySymbolForInterfaceWorker = makeSerializePropertySymbol(function (_decorators, mods, name, question, type) { return ts.factory.createPropertySignature(mods, name, question, type); }, 165 /* MethodSignature */, /*useAcessors*/ false);
+                var serializePropertySymbolForClass = makeSerializePropertySymbol(ts.factory.createPropertyDeclaration, 167 /* MethodDeclaration */, /*useAcessors*/ true);
+                var serializePropertySymbolForInterfaceWorker = makeSerializePropertySymbol(function (_decorators, mods, name, question, type) { return ts.factory.createPropertySignature(mods, name, question, type); }, 166 /* MethodSignature */, /*useAcessors*/ false);
                 // TODO: Use `setOriginalNode` on original declaration names where possible so these declarations see some kind of
                 // declaration mapping
                 // We save the enclosing declaration off here so it's not adjusted by well-meaning declaration
@@ -50506,9 +51596,11 @@
                                 }
                             }
                             else if (oldcontext.tracker && oldcontext.tracker.trackSymbol) {
-                                oldcontext.tracker.trackSymbol(sym, decl, meaning);
+                                return oldcontext.tracker.trackSymbol(sym, decl, meaning);
                             }
+                            return false;
                         } }) });
+                context.tracker = wrapSymbolTrackerToReportForContext(context, context.tracker);
                 ts.forEachEntry(symbolTable, function (symbol, name) {
                     var baseName = ts.unescapeLeadingUnderscores(name);
                     void getInternalSymbolName(symbol, baseName); // Called to cache values into `usedSymbolNames` and `remappedSymbolNames`
@@ -50523,7 +51615,7 @@
                 visitSymbolTable(symbolTable);
                 return mergeRedundantStatements(results);
                 function isIdentifierAndNotUndefined(node) {
-                    return !!node && node.kind === 78 /* Identifier */;
+                    return !!node && node.kind === 79 /* Identifier */;
                 }
                 function getNamesOfDeclaration(statement) {
                     if (ts.isVariableStatement(statement)) {
@@ -50544,12 +51636,12 @@
                         var name_2 = ns.name;
                         var body = ns.body;
                         if (ts.length(excessExports)) {
-                            ns = ts.factory.updateModuleDeclaration(ns, ns.decorators, ns.modifiers, ns.name, body = ts.factory.updateModuleBlock(body, ts.factory.createNodeArray(__spreadArray(__spreadArray([], ns.body.statements), [ts.factory.createExportDeclaration(
+                            ns = ts.factory.updateModuleDeclaration(ns, ns.decorators, ns.modifiers, ns.name, body = ts.factory.updateModuleBlock(body, ts.factory.createNodeArray(__spreadArray(__spreadArray([], ns.body.statements, true), [ts.factory.createExportDeclaration(
                                 /*decorators*/ undefined, 
                                 /*modifiers*/ undefined, 
                                 /*isTypeOnly*/ false, ts.factory.createNamedExports(ts.map(ts.flatMap(excessExports, function (e) { return getNamesOfDeclaration(e); }), function (id) { return ts.factory.createExportSpecifier(/*alias*/ undefined, id); })), 
-                                /*moduleSpecifier*/ undefined)]))));
-                            statements = __spreadArray(__spreadArray(__spreadArray([], statements.slice(0, nsIndex)), [ns]), statements.slice(nsIndex + 1));
+                                /*moduleSpecifier*/ undefined)], false))));
+                            statements = __spreadArray(__spreadArray(__spreadArray([], statements.slice(0, nsIndex), true), [ns], false), statements.slice(nsIndex + 1), true);
                         }
                         // Pass 1: Flatten `export namespace _exports {} export = _exports;` so long as the `export=` only points at a single namespace declaration
                         if (!ts.find(statements, function (s) { return s !== ns && ts.nodeHasName(s, name_2); })) {
@@ -50560,7 +51652,7 @@
                             ts.forEach(body.statements, function (s) {
                                 addResult(s, mixinExportFlag_1 ? 1 /* Export */ : 0 /* None */); // Recalculates the ambient (and export, if applicable from above) flag
                             });
-                            statements = __spreadArray(__spreadArray([], ts.filter(statements, function (s) { return s !== ns && s !== exportAssignment; })), results);
+                            statements = __spreadArray(__spreadArray([], ts.filter(statements, function (s) { return s !== ns && s !== exportAssignment; }), true), results, true);
                         }
                     }
                     return statements;
@@ -50570,11 +51662,11 @@
                     var exports = ts.filter(statements, function (d) { return ts.isExportDeclaration(d) && !d.moduleSpecifier && !!d.exportClause && ts.isNamedExports(d.exportClause); });
                     if (ts.length(exports) > 1) {
                         var nonExports = ts.filter(statements, function (d) { return !ts.isExportDeclaration(d) || !!d.moduleSpecifier || !d.exportClause; });
-                        statements = __spreadArray(__spreadArray([], nonExports), [ts.factory.createExportDeclaration(
+                        statements = __spreadArray(__spreadArray([], nonExports, true), [ts.factory.createExportDeclaration(
                             /*decorators*/ undefined, 
                             /*modifiers*/ undefined, 
                             /*isTypeOnly*/ false, ts.factory.createNamedExports(ts.flatMap(exports, function (e) { return ts.cast(e.exportClause, ts.isNamedExports).elements; })), 
-                            /*moduleSpecifier*/ undefined)]);
+                            /*moduleSpecifier*/ undefined)], false);
                     }
                     // Pass 2b: Also combine all `export {} from "..."` declarations as needed
                     var reexports = ts.filter(statements, function (d) { return ts.isExportDeclaration(d) && !!d.moduleSpecifier && !!d.exportClause && ts.isNamedExports(d.exportClause); });
@@ -50584,12 +51676,12 @@
                             var _loop_9 = function (group_1) {
                                 if (group_1.length > 1) {
                                     // remove group members from statements and then merge group members and add back to statements
-                                    statements = __spreadArray(__spreadArray([], ts.filter(statements, function (s) { return group_1.indexOf(s) === -1; })), [
+                                    statements = __spreadArray(__spreadArray([], ts.filter(statements, function (s) { return group_1.indexOf(s) === -1; }), true), [
                                         ts.factory.createExportDeclaration(
                                         /*decorators*/ undefined, 
                                         /*modifiers*/ undefined, 
                                         /*isTypeOnly*/ false, ts.factory.createNamedExports(ts.flatMap(group_1, function (e) { return ts.cast(e.exportClause, ts.isNamedExports).elements; })), group_1[0].moduleSpecifier)
-                                    ]);
+                                    ], false);
                                 }
                             };
                             for (var _i = 0, groups_1 = groups; _i < groups_1.length; _i++) {
@@ -50692,6 +51784,9 @@
                         var oldContext = context;
                         context = cloneNodeBuilderContext(context);
                         var result = serializeSymbolWorker(symbol, isPrivate, propertyAsAlias);
+                        if (context.reportedDiagnostic) {
+                            oldcontext.reportedDiagnostic = context.reportedDiagnostic; // hoist diagnostic result into outer context
+                        }
                         context = oldContext;
                         return result;
                     }
@@ -50940,13 +52035,13 @@
                     var baseTypes = getBaseTypes(interfaceType);
                     var baseType = ts.length(baseTypes) ? getIntersectionType(baseTypes) : undefined;
                     var members = ts.flatMap(getPropertiesOfType(interfaceType), function (p) { return serializePropertySymbolForInterface(p, baseType); });
-                    var callSignatures = serializeSignatures(0 /* Call */, interfaceType, baseType, 170 /* CallSignature */);
-                    var constructSignatures = serializeSignatures(1 /* Construct */, interfaceType, baseType, 171 /* ConstructSignature */);
+                    var callSignatures = serializeSignatures(0 /* Call */, interfaceType, baseType, 172 /* CallSignature */);
+                    var constructSignatures = serializeSignatures(1 /* Construct */, interfaceType, baseType, 173 /* ConstructSignature */);
                     var indexSignatures = serializeIndexSignatures(interfaceType, baseType);
-                    var heritageClauses = !ts.length(baseTypes) ? undefined : [ts.factory.createHeritageClause(93 /* ExtendsKeyword */, ts.mapDefined(baseTypes, function (b) { return trySerializeAsTypeReference(b, 111551 /* Value */); }))];
+                    var heritageClauses = !ts.length(baseTypes) ? undefined : [ts.factory.createHeritageClause(94 /* ExtendsKeyword */, ts.mapDefined(baseTypes, function (b) { return trySerializeAsTypeReference(b, 111551 /* Value */); }))];
                     addResult(ts.factory.createInterfaceDeclaration(
                     /*decorators*/ undefined, 
-                    /*modifiers*/ undefined, getInternalSymbolName(symbol, symbolName), typeParamDecls, heritageClauses, __spreadArray(__spreadArray(__spreadArray(__spreadArray([], indexSignatures), constructSignatures), callSignatures), members)), modifierFlags);
+                    /*modifiers*/ undefined, getInternalSymbolName(symbol, symbolName), typeParamDecls, heritageClauses, __spreadArray(__spreadArray(__spreadArray(__spreadArray([], indexSignatures, true), constructSignatures, true), callSignatures, true), members, true)), modifierFlags);
                 }
                 function getNamespaceMembersForSerialization(symbol) {
                     return !symbol.exports ? [] : ts.filter(ts.arrayFrom(symbol.exports.values()), isNamespaceMember);
@@ -51010,7 +52105,7 @@
                     for (var _i = 0, signatures_2 = signatures; _i < signatures_2.length; _i++) {
                         var sig = signatures_2[_i];
                         // Each overload becomes a separate function declaration, in order
-                        var decl = signatureToSignatureDeclarationHelper(sig, 252 /* FunctionDeclaration */, context, { name: ts.factory.createIdentifier(localName), privateSymbolVisitor: includePrivateSymbol, bundledImports: bundled });
+                        var decl = signatureToSignatureDeclarationHelper(sig, 254 /* FunctionDeclaration */, context, { name: ts.factory.createIdentifier(localName), privateSymbolVisitor: includePrivateSymbol, bundledImports: bundled });
                         addResult(ts.setTextRange(decl, getSignatureTextRangeLocation(sig)), modifierFlags);
                     }
                     // Module symbol emit will take care of module-y members, provided it has exports
@@ -51084,7 +52179,7 @@
                 }
                 function isNamespaceMember(p) {
                     return !!(p.flags & (788968 /* Type */ | 1920 /* Namespace */ | 2097152 /* Alias */)) ||
-                        !(p.flags & 4194304 /* Prototype */ || p.escapedName === "prototype" || p.valueDeclaration && ts.getEffectiveModifierFlags(p.valueDeclaration) & 32 /* Static */ && ts.isClassLike(p.valueDeclaration.parent));
+                        !(p.flags & 4194304 /* Prototype */ || p.escapedName === "prototype" || p.valueDeclaration && ts.isStatic(p.valueDeclaration) && ts.isClassLike(p.valueDeclaration.parent));
                 }
                 function sanitizeJSDocImplements(clauses) {
                     var result = ts.mapDefined(clauses, function (e) {
@@ -51133,7 +52228,7 @@
                     var staticBaseType = isClass
                         ? getBaseConstructorTypeOfClass(staticType)
                         : anyType;
-                    var heritageClauses = __spreadArray(__spreadArray([], !ts.length(baseTypes) ? [] : [ts.factory.createHeritageClause(93 /* ExtendsKeyword */, ts.map(baseTypes, function (b) { return serializeBaseType(b, staticBaseType, localName); }))]), !ts.length(implementsExpressions) ? [] : [ts.factory.createHeritageClause(116 /* ImplementsKeyword */, implementsExpressions)]);
+                    var heritageClauses = __spreadArray(__spreadArray([], !ts.length(baseTypes) ? [] : [ts.factory.createHeritageClause(94 /* ExtendsKeyword */, ts.map(baseTypes, function (b) { return serializeBaseType(b, staticBaseType, localName); }))], true), !ts.length(implementsExpressions) ? [] : [ts.factory.createHeritageClause(117 /* ImplementsKeyword */, implementsExpressions)], true);
                     var symbolProps = getNonInterhitedProperties(classType, baseTypes, getPropertiesOfType(classType));
                     var publicSymbolProps = ts.filter(symbolProps, function (s) {
                         // `valueDeclaration` could be undefined if inherited from
@@ -51170,12 +52265,12 @@
                         !ts.some(getSignaturesOfType(staticType, 1 /* Construct */));
                     var constructors = isNonConstructableClassLikeInJsFile ?
                         [ts.factory.createConstructorDeclaration(/*decorators*/ undefined, ts.factory.createModifiersFromModifierFlags(8 /* Private */), [], /*body*/ undefined)] :
-                        serializeSignatures(1 /* Construct */, staticType, staticBaseType, 167 /* Constructor */);
+                        serializeSignatures(1 /* Construct */, staticType, staticBaseType, 169 /* Constructor */);
                     var indexSignatures = serializeIndexSignatures(classType, baseTypes[0]);
                     context.enclosingDeclaration = oldEnclosing;
                     addResult(ts.setTextRange(ts.factory.createClassDeclaration(
                     /*decorators*/ undefined, 
-                    /*modifiers*/ undefined, localName, typeParamDecls, heritageClauses, __spreadArray(__spreadArray(__spreadArray(__spreadArray(__spreadArray([], indexSignatures), staticMembers), constructors), publicProperties), privateProperties)), symbol.declarations && ts.filter(symbol.declarations, function (d) { return ts.isClassDeclaration(d) || ts.isClassExpression(d); })[0]), modifierFlags);
+                    /*modifiers*/ undefined, localName, typeParamDecls, heritageClauses, __spreadArray(__spreadArray(__spreadArray(__spreadArray(__spreadArray([], indexSignatures, true), staticMembers, true), constructors, true), publicProperties, true), privateProperties, true)), symbol.declarations && ts.filter(symbol.declarations, function (d) { return ts.isClassDeclaration(d) || ts.isClassExpression(d); })[0]), modifierFlags);
                 }
                 function serializeAsAlias(symbol, localName, modifierFlags) {
                     var _a, _b, _c, _d, _e;
@@ -51197,8 +52292,8 @@
                     var targetName = getInternalSymbolName(target, verbatimTargetName);
                     includePrivateSymbol(target); // the target may be within the same scope - attempt to serialize it first
                     switch (node.kind) {
-                        case 199 /* BindingElement */:
-                            if (((_b = (_a = node.parent) === null || _a === void 0 ? void 0 : _a.parent) === null || _b === void 0 ? void 0 : _b.kind) === 250 /* VariableDeclaration */) {
+                        case 201 /* BindingElement */:
+                            if (((_b = (_a = node.parent) === null || _a === void 0 ? void 0 : _a.parent) === null || _b === void 0 ? void 0 : _b.kind) === 252 /* VariableDeclaration */) {
                                 // const { SomeClass } = require('./lib');
                                 var specifier_1 = getSpecifierForModuleSymbol(target.parent || target, context); // './lib'
                                 var propertyName = node.propertyName;
@@ -51210,13 +52305,13 @@
                             // We don't know how to serialize this (nested?) binding element
                             ts.Debug.failBadSyntaxKind(((_c = node.parent) === null || _c === void 0 ? void 0 : _c.parent) || node, "Unhandled binding element grandparent kind in declaration serialization");
                             break;
-                        case 290 /* ShorthandPropertyAssignment */:
-                            if (((_e = (_d = node.parent) === null || _d === void 0 ? void 0 : _d.parent) === null || _e === void 0 ? void 0 : _e.kind) === 217 /* BinaryExpression */) {
+                        case 292 /* ShorthandPropertyAssignment */:
+                            if (((_e = (_d = node.parent) === null || _d === void 0 ? void 0 : _d.parent) === null || _e === void 0 ? void 0 : _e.kind) === 219 /* BinaryExpression */) {
                                 // module.exports = { SomeClass }
                                 serializeExportSpecifier(ts.unescapeLeadingUnderscores(symbol.escapedName), targetName);
                             }
                             break;
-                        case 250 /* VariableDeclaration */:
+                        case 252 /* VariableDeclaration */:
                             // commonjs require: const x = require('y')
                             if (ts.isPropertyAccessExpression(node.initializer)) {
                                 // const x = require('y').z
@@ -51236,7 +52331,7 @@
                                 break;
                             }
                         // else fall through and treat commonjs require just like import=
-                        case 261 /* ImportEqualsDeclaration */:
+                        case 263 /* ImportEqualsDeclaration */:
                             // This _specifically_ only exists to handle json declarations - where we make aliases, but since
                             // we emit no declarations for the json document, must not refer to it in the declarations
                             if (target.escapedName === "export=" /* ExportEquals */ && ts.some(target.declarations, ts.isJsonSourceFile)) {
@@ -51253,13 +52348,13 @@
                                 ? symbolToName(target, context, 67108863 /* All */, /*expectsIdentifier*/ false)
                                 : ts.factory.createExternalModuleReference(ts.factory.createStringLiteral(getSpecifierForModuleSymbol(target, context)))), isLocalImport ? modifierFlags : 0 /* None */);
                             break;
-                        case 260 /* NamespaceExportDeclaration */:
+                        case 262 /* NamespaceExportDeclaration */:
                             // export as namespace foo
                             // TODO: Not part of a file's local or export symbol tables
                             // Is bound into file.symbol.globalExports instead, which we don't currently traverse
                             addResult(ts.factory.createNamespaceExportDeclaration(ts.idText(node.name)), 0 /* None */);
                             break;
-                        case 263 /* ImportClause */:
+                        case 265 /* ImportClause */:
                             addResult(ts.factory.createImportDeclaration(
                             /*decorators*/ undefined, 
                             /*modifiers*/ undefined, ts.factory.createImportClause(/*isTypeOnly*/ false, ts.factory.createIdentifier(localName), /*namedBindings*/ undefined), 
@@ -51268,18 +52363,18 @@
                             // In such cases, the `target` refers to the module itself already
                             ts.factory.createStringLiteral(getSpecifierForModuleSymbol(target.parent || target, context))), 0 /* None */);
                             break;
-                        case 264 /* NamespaceImport */:
+                        case 266 /* NamespaceImport */:
                             addResult(ts.factory.createImportDeclaration(
                             /*decorators*/ undefined, 
                             /*modifiers*/ undefined, ts.factory.createImportClause(/*isTypeOnly*/ false, /*importClause*/ undefined, ts.factory.createNamespaceImport(ts.factory.createIdentifier(localName))), ts.factory.createStringLiteral(getSpecifierForModuleSymbol(target, context))), 0 /* None */);
                             break;
-                        case 270 /* NamespaceExport */:
+                        case 272 /* NamespaceExport */:
                             addResult(ts.factory.createExportDeclaration(
                             /*decorators*/ undefined, 
                             /*modifiers*/ undefined, 
                             /*isTypeOnly*/ false, ts.factory.createNamespaceExport(ts.factory.createIdentifier(localName)), ts.factory.createStringLiteral(getSpecifierForModuleSymbol(target, context))), 0 /* None */);
                             break;
-                        case 266 /* ImportSpecifier */:
+                        case 268 /* ImportSpecifier */:
                             addResult(ts.factory.createImportDeclaration(
                             /*decorators*/ undefined, 
                             /*modifiers*/ undefined, ts.factory.createImportClause(
@@ -51288,7 +52383,7 @@
                                 ts.factory.createImportSpecifier(localName !== verbatimTargetName ? ts.factory.createIdentifier(verbatimTargetName) : undefined, ts.factory.createIdentifier(localName))
                             ])), ts.factory.createStringLiteral(getSpecifierForModuleSymbol(target.parent || target, context))), 0 /* None */);
                             break;
-                        case 271 /* ExportSpecifier */:
+                        case 273 /* ExportSpecifier */:
                             // does not use localName because the symbol name in this case refers to the name in the exports table,
                             // which we must exactly preserve
                             var specifier = node.parent.parent.moduleSpecifier;
@@ -51296,12 +52391,12 @@
                             // another file
                             serializeExportSpecifier(ts.unescapeLeadingUnderscores(symbol.escapedName), specifier ? verbatimTargetName : targetName, specifier && ts.isStringLiteralLike(specifier) ? ts.factory.createStringLiteral(specifier.text) : undefined);
                             break;
-                        case 267 /* ExportAssignment */:
+                        case 269 /* ExportAssignment */:
                             serializeMaybeAliasAssignment(symbol);
                             break;
-                        case 217 /* BinaryExpression */:
-                        case 202 /* PropertyAccessExpression */:
-                        case 203 /* ElementAccessExpression */:
+                        case 219 /* BinaryExpression */:
+                        case 204 /* PropertyAccessExpression */:
+                        case 205 /* ElementAccessExpression */:
                             // Could be best encoded as though an export specifier or as though an export assignment
                             // If name is default or export=, do an export assignment
                             // Otherwise do an export specifier
@@ -51356,7 +52451,7 @@
                         // a visibility error here (as they're not visible within any scope), but we want to hoist them
                         // into the containing scope anyway, so we want to skip the visibility checks.
                         var oldTrack = context.tracker.trackSymbol;
-                        context.tracker.trackSymbol = ts.noop;
+                        context.tracker.trackSymbol = function () { return false; };
                         if (isExportAssignmentCompatibleSymbolName) {
                             results.push(ts.factory.createExportAssignment(
                             /*decorators*/ undefined, 
@@ -51422,8 +52517,7 @@
                     // whose input is not type annotated (if the input symbol has an annotation we can reuse, we should prefer it)
                     var ctxSrc = ts.getSourceFileOfNode(context.enclosingDeclaration);
                     return ts.getObjectFlags(typeToSerialize) & (16 /* Anonymous */ | 32 /* Mapped */) &&
-                        !getIndexInfoOfType(typeToSerialize, 0 /* String */) &&
-                        !getIndexInfoOfType(typeToSerialize, 1 /* Number */) &&
+                        !ts.length(getIndexInfosOfType(typeToSerialize)) &&
                         !isClassInstanceSide(typeToSerialize) && // While a class instance is potentially representable as a NS, prefer printing a reference to the instance type and serializing the class
                         !!(ts.length(ts.filter(getPropertiesOfType(typeToSerialize), isNamespaceMember)) || ts.length(getSignaturesOfType(typeToSerialize, 0 /* Call */))) &&
                         !ts.length(getSignaturesOfType(typeToSerialize, 1 /* Construct */)) && // TODO: could probably serialize as function + ns + class, now that that's OK
@@ -51561,20 +52655,17 @@
                 }
                 function serializeIndexSignatures(input, baseType) {
                     var results = [];
-                    for (var _i = 0, _a = [0 /* String */, 1 /* Number */]; _i < _a.length; _i++) {
-                        var type = _a[_i];
-                        var info = getIndexInfoOfType(input, type);
-                        if (info) {
-                            if (baseType) {
-                                var baseInfo = getIndexInfoOfType(baseType, type);
-                                if (baseInfo) {
-                                    if (isTypeIdenticalTo(info.type, baseInfo.type)) {
-                                        continue; // elide identical index signatures
-                                    }
+                    for (var _i = 0, _a = getIndexInfosOfType(input); _i < _a.length; _i++) {
+                        var info = _a[_i];
+                        if (baseType) {
+                            var baseInfo = getIndexInfoOfType(baseType, info.keyType);
+                            if (baseInfo) {
+                                if (isTypeIdenticalTo(info.type, baseInfo.type)) {
+                                    continue; // elide identical index signatures
                                 }
                             }
-                            results.push(indexInfoToIndexSignatureDeclarationHelper(info, type, context, /*typeNode*/ undefined));
                         }
+                        results.push(indexInfoToIndexSignatureDeclarationHelper(info, context, /*typeNode*/ undefined));
                     }
                     return results;
                 }
@@ -51671,7 +52762,7 @@
             if (flags === void 0) { flags = 16384 /* UseAliasDefinedOutsideCurrentScope */; }
             return writer ? typePredicateToStringWorker(writer).getText() : ts.usingSingleLineStringWriter(typePredicateToStringWorker);
             function typePredicateToStringWorker(writer) {
-                var predicate = ts.factory.createTypePredicateNode(typePredicate.kind === 2 /* AssertsThis */ || typePredicate.kind === 3 /* AssertsIdentifier */ ? ts.factory.createToken(127 /* AssertsKeyword */) : undefined, typePredicate.kind === 1 /* Identifier */ || typePredicate.kind === 3 /* AssertsIdentifier */ ? ts.factory.createIdentifier(typePredicate.parameterName) : ts.factory.createThisTypeNode(), typePredicate.type && nodeBuilder.typeToTypeNode(typePredicate.type, enclosingDeclaration, toNodeBuilderFlags(flags) | 70221824 /* IgnoreErrors */ | 512 /* WriteTypeParametersInQualifiedName */) // TODO: GH#18217
+                var predicate = ts.factory.createTypePredicateNode(typePredicate.kind === 2 /* AssertsThis */ || typePredicate.kind === 3 /* AssertsIdentifier */ ? ts.factory.createToken(128 /* AssertsKeyword */) : undefined, typePredicate.kind === 1 /* Identifier */ || typePredicate.kind === 3 /* AssertsIdentifier */ ? ts.factory.createIdentifier(typePredicate.parameterName) : ts.factory.createThisTypeNode(), typePredicate.type && nodeBuilder.typeToTypeNode(typePredicate.type, enclosingDeclaration, toNodeBuilderFlags(flags) | 70221824 /* IgnoreErrors */ | 512 /* WriteTypeParametersInQualifiedName */) // TODO: GH#18217
                 );
                 var printer = ts.createPrinter({ removeComments: true });
                 var sourceFile = enclosingDeclaration && ts.getSourceFileOfNode(enclosingDeclaration);
@@ -51718,7 +52809,7 @@
         function getTypeAliasForTypeLiteral(type) {
             if (type.symbol && type.symbol.flags & 2048 /* TypeLiteral */ && type.symbol.declarations) {
                 var node = ts.walkUpParenthesizedTypes(type.symbol.declarations[0].parent);
-                if (node.kind === 255 /* TypeAliasDeclaration */) {
+                if (node.kind === 257 /* TypeAliasDeclaration */) {
                     return getSymbolOfNode(node);
                 }
             }
@@ -51726,11 +52817,11 @@
         }
         function isTopLevelInExternalModuleAugmentation(node) {
             return node && node.parent &&
-                node.parent.kind === 258 /* ModuleBlock */ &&
+                node.parent.kind === 260 /* ModuleBlock */ &&
                 ts.isExternalModuleAugmentation(node.parent.parent);
         }
         function isDefaultBindingContext(location) {
-            return location.kind === 298 /* SourceFile */ || ts.isAmbientModule(location);
+            return location.kind === 300 /* SourceFile */ || ts.isAmbientModule(location);
         }
         function getNameOfSymbolFromNameType(symbol, context) {
             var nameType = getSymbolLinks(symbol).nameType;
@@ -51789,17 +52880,17 @@
                 if (!declaration) {
                     declaration = symbol.declarations[0]; // Declaration may be nameless, but we'll try anyway
                 }
-                if (declaration.parent && declaration.parent.kind === 250 /* VariableDeclaration */) {
+                if (declaration.parent && declaration.parent.kind === 252 /* VariableDeclaration */) {
                     return ts.declarationNameToString(declaration.parent.name);
                 }
                 switch (declaration.kind) {
-                    case 222 /* ClassExpression */:
-                    case 209 /* FunctionExpression */:
-                    case 210 /* ArrowFunction */:
+                    case 224 /* ClassExpression */:
+                    case 211 /* FunctionExpression */:
+                    case 212 /* ArrowFunction */:
                         if (context && !context.encounteredError && !(context.flags & 131072 /* AllowAnonymousIdentifier */)) {
                             context.encounteredError = true;
                         }
-                        return declaration.kind === 222 /* ClassExpression */ ? "(Anonymous class)" : "(Anonymous function)";
+                        return declaration.kind === 224 /* ClassExpression */ ? "(Anonymous class)" : "(Anonymous function)";
                 }
             }
             var name = getNameOfSymbolFromNameType(symbol, context);
@@ -51816,28 +52907,28 @@
             return false;
             function determineIfDeclarationIsVisible() {
                 switch (node.kind) {
-                    case 328 /* JSDocCallbackTag */:
-                    case 335 /* JSDocTypedefTag */:
-                    case 329 /* JSDocEnumTag */:
+                    case 333 /* JSDocCallbackTag */:
+                    case 340 /* JSDocTypedefTag */:
+                    case 334 /* JSDocEnumTag */:
                         // Top-level jsdoc type aliases are considered exported
                         // First parent is comment node, second is hosting declaration or token; we only care about those tokens or declarations whose parent is a source file
                         return !!(node.parent && node.parent.parent && node.parent.parent.parent && ts.isSourceFile(node.parent.parent.parent));
-                    case 199 /* BindingElement */:
+                    case 201 /* BindingElement */:
                         return isDeclarationVisible(node.parent.parent);
-                    case 250 /* VariableDeclaration */:
+                    case 252 /* VariableDeclaration */:
                         if (ts.isBindingPattern(node.name) &&
                             !node.name.elements.length) {
                             // If the binding pattern is empty, this variable declaration is not visible
                             return false;
                         }
                     // falls through
-                    case 257 /* ModuleDeclaration */:
-                    case 253 /* ClassDeclaration */:
-                    case 254 /* InterfaceDeclaration */:
-                    case 255 /* TypeAliasDeclaration */:
-                    case 252 /* FunctionDeclaration */:
-                    case 256 /* EnumDeclaration */:
-                    case 261 /* ImportEqualsDeclaration */:
+                    case 259 /* ModuleDeclaration */:
+                    case 255 /* ClassDeclaration */:
+                    case 256 /* InterfaceDeclaration */:
+                    case 257 /* TypeAliasDeclaration */:
+                    case 254 /* FunctionDeclaration */:
+                    case 258 /* EnumDeclaration */:
+                    case 263 /* ImportEqualsDeclaration */:
                         // external module augmentation is always visible
                         if (ts.isExternalModuleAugmentation(node)) {
                             return true;
@@ -51845,55 +52936,55 @@
                         var parent = getDeclarationContainer(node);
                         // If the node is not exported or it is not ambient module element (except import declaration)
                         if (!(ts.getCombinedModifierFlags(node) & 1 /* Export */) &&
-                            !(node.kind !== 261 /* ImportEqualsDeclaration */ && parent.kind !== 298 /* SourceFile */ && parent.flags & 8388608 /* Ambient */)) {
+                            !(node.kind !== 263 /* ImportEqualsDeclaration */ && parent.kind !== 300 /* SourceFile */ && parent.flags & 8388608 /* Ambient */)) {
                             return isGlobalSourceFile(parent);
                         }
                         // Exported members/ambient module elements (exception import declaration) are visible if parent is visible
                         return isDeclarationVisible(parent);
-                    case 164 /* PropertyDeclaration */:
-                    case 163 /* PropertySignature */:
-                    case 168 /* GetAccessor */:
-                    case 169 /* SetAccessor */:
-                    case 166 /* MethodDeclaration */:
-                    case 165 /* MethodSignature */:
+                    case 165 /* PropertyDeclaration */:
+                    case 164 /* PropertySignature */:
+                    case 170 /* GetAccessor */:
+                    case 171 /* SetAccessor */:
+                    case 167 /* MethodDeclaration */:
+                    case 166 /* MethodSignature */:
                         if (ts.hasEffectiveModifier(node, 8 /* Private */ | 16 /* Protected */)) {
                             // Private/protected properties/methods are not visible
                             return false;
                         }
                     // Public properties/methods are visible if its parents are visible, so:
                     // falls through
-                    case 167 /* Constructor */:
-                    case 171 /* ConstructSignature */:
-                    case 170 /* CallSignature */:
-                    case 172 /* IndexSignature */:
-                    case 161 /* Parameter */:
-                    case 258 /* ModuleBlock */:
-                    case 175 /* FunctionType */:
-                    case 176 /* ConstructorType */:
-                    case 178 /* TypeLiteral */:
-                    case 174 /* TypeReference */:
-                    case 179 /* ArrayType */:
-                    case 180 /* TupleType */:
-                    case 183 /* UnionType */:
-                    case 184 /* IntersectionType */:
-                    case 187 /* ParenthesizedType */:
-                    case 193 /* NamedTupleMember */:
+                    case 169 /* Constructor */:
+                    case 173 /* ConstructSignature */:
+                    case 172 /* CallSignature */:
+                    case 174 /* IndexSignature */:
+                    case 162 /* Parameter */:
+                    case 260 /* ModuleBlock */:
+                    case 177 /* FunctionType */:
+                    case 178 /* ConstructorType */:
+                    case 180 /* TypeLiteral */:
+                    case 176 /* TypeReference */:
+                    case 181 /* ArrayType */:
+                    case 182 /* TupleType */:
+                    case 185 /* UnionType */:
+                    case 186 /* IntersectionType */:
+                    case 189 /* ParenthesizedType */:
+                    case 195 /* NamedTupleMember */:
                         return isDeclarationVisible(node.parent);
                     // Default binding, import specifier and namespace import is visible
                     // only on demand so by default it is not visible
-                    case 263 /* ImportClause */:
-                    case 264 /* NamespaceImport */:
-                    case 266 /* ImportSpecifier */:
+                    case 265 /* ImportClause */:
+                    case 266 /* NamespaceImport */:
+                    case 268 /* ImportSpecifier */:
                         return false;
                     // Type parameters are always visible
-                    case 160 /* TypeParameter */:
+                    case 161 /* TypeParameter */:
                     // Source file and namespace export are always visible
                     // falls through
-                    case 298 /* SourceFile */:
-                    case 260 /* NamespaceExportDeclaration */:
+                    case 300 /* SourceFile */:
+                    case 262 /* NamespaceExportDeclaration */:
                         return true;
                     // Export assignments do not create name bindings outside the module
-                    case 267 /* ExportAssignment */:
+                    case 269 /* ExportAssignment */:
                         return false;
                     default:
                         return false;
@@ -51902,10 +52993,10 @@
         }
         function collectLinkedAliases(node, setVisibility) {
             var exportSymbol;
-            if (node.parent && node.parent.kind === 267 /* ExportAssignment */) {
+            if (node.parent && node.parent.kind === 269 /* ExportAssignment */) {
                 exportSymbol = resolveName(node, node.escapedText, 111551 /* Value */ | 788968 /* Type */ | 1920 /* Namespace */ | 2097152 /* Alias */, /*nameNotFoundMessage*/ undefined, node, /*isUse*/ false);
             }
-            else if (node.parent.kind === 271 /* ExportSpecifier */) {
+            else if (node.parent.kind === 273 /* ExportSpecifier */) {
                 exportSymbol = getTargetOfExportSpecifier(node.parent, 111551 /* Value */ | 788968 /* Type */ | 1920 /* Namespace */ | 2097152 /* Alias */);
             }
             var result;
@@ -52010,12 +53101,12 @@
         function getDeclarationContainer(node) {
             return ts.findAncestor(ts.getRootDeclaration(node), function (node) {
                 switch (node.kind) {
-                    case 250 /* VariableDeclaration */:
-                    case 251 /* VariableDeclarationList */:
-                    case 266 /* ImportSpecifier */:
-                    case 265 /* NamedImports */:
-                    case 264 /* NamespaceImport */:
-                    case 263 /* ImportClause */:
+                    case 252 /* VariableDeclaration */:
+                    case 253 /* VariableDeclarationList */:
+                    case 268 /* ImportSpecifier */:
+                    case 267 /* NamedImports */:
+                    case 266 /* NamespaceImport */:
+                    case 265 /* ImportClause */:
                         return false;
                     default:
                         return true;
@@ -52036,7 +53127,8 @@
             return prop ? getTypeOfSymbol(prop) : undefined;
         }
         function getTypeOfPropertyOrIndexSignature(type, name) {
-            return getTypeOfPropertyOfType(type, name) || isNumericLiteralName(name) && getIndexTypeOfType(type, 1 /* Number */) || getIndexTypeOfType(type, 0 /* String */) || unknownType;
+            var _a;
+            return getTypeOfPropertyOfType(type, name) || ((_a = getApplicableIndexInfoForName(type, name)) === null || _a === void 0 ? void 0 : _a.type) || unknownType;
         }
         function isTypeAny(type) {
             return type && (type.flags & 1 /* Any */) !== 0;
@@ -52075,9 +53167,7 @@
                     members.set(prop.escapedName, getSpreadSymbol(prop, /*readonly*/ false));
                 }
             }
-            var stringIndexInfo = getIndexInfoOfType(source, 0 /* String */);
-            var numberIndexInfo = getIndexInfoOfType(source, 1 /* Number */);
-            var result = createAnonymousType(symbol, members, ts.emptyArray, ts.emptyArray, stringIndexInfo, numberIndexInfo);
+            var result = createAnonymousType(symbol, members, ts.emptyArray, ts.emptyArray, getIndexInfosOfType(source));
             result.objectFlags |= 8388608 /* ObjectRestType */;
             return result;
         }
@@ -52122,23 +53212,23 @@
         function getParentElementAccess(node) {
             var ancestor = node.parent.parent;
             switch (ancestor.kind) {
-                case 199 /* BindingElement */:
-                case 289 /* PropertyAssignment */:
+                case 201 /* BindingElement */:
+                case 291 /* PropertyAssignment */:
                     return getSyntheticElementAccess(ancestor);
-                case 200 /* ArrayLiteralExpression */:
+                case 202 /* ArrayLiteralExpression */:
                     return getSyntheticElementAccess(node.parent);
-                case 250 /* VariableDeclaration */:
+                case 252 /* VariableDeclaration */:
                     return ancestor.initializer;
-                case 217 /* BinaryExpression */:
+                case 219 /* BinaryExpression */:
                     return ancestor.right;
             }
         }
         function getDestructuringPropertyName(node) {
             var parent = node.parent;
-            if (node.kind === 199 /* BindingElement */ && parent.kind === 197 /* ObjectBindingPattern */) {
+            if (node.kind === 201 /* BindingElement */ && parent.kind === 199 /* ObjectBindingPattern */) {
                 return getLiteralPropertyNameText(node.propertyName || node.name);
             }
-            if (node.kind === 289 /* PropertyAssignment */ || node.kind === 290 /* ShorthandPropertyAssignment */) {
+            if (node.kind === 291 /* PropertyAssignment */ || node.kind === 292 /* ShorthandPropertyAssignment */) {
                 return getLiteralPropertyNameText(node.name);
             }
             return "" + parent.elements.indexOf(node);
@@ -52164,7 +53254,7 @@
                 parentType = getTypeWithFacts(parentType, 524288 /* NEUndefined */);
             }
             var type;
-            if (pattern.kind === 197 /* ObjectBindingPattern */) {
+            if (pattern.kind === 199 /* ObjectBindingPattern */) {
                 if (declaration.dotDotDotToken) {
                     parentType = getReducedType(parentType);
                     if (parentType.flags & 2 /* Unknown */ || !isValidSpreadType(parentType)) {
@@ -52184,7 +53274,7 @@
                     // Use explicitly specified property name ({ p: xxx } form), or otherwise the implied name ({ p } form)
                     var name = declaration.propertyName || declaration.name;
                     var indexType = getLiteralTypeFromPropertyName(name);
-                    var declaredType = getIndexedAccessType(parentType, indexType, /*noUncheckedIndexedAccessCandidate*/ undefined, name, /*aliasSymbol*/ undefined, /*aliasTypeArguments*/ undefined, 16 /* ExpressionPosition */);
+                    var declaredType = getIndexedAccessType(parentType, indexType, 32 /* ExpressionPosition */, name);
                     type = getFlowTypeOfDestructuring(declaration, declaredType);
                 }
             }
@@ -52203,9 +53293,9 @@
                         createArrayType(elementType);
                 }
                 else if (isArrayLikeType(parentType)) {
-                    var indexType = getLiteralType(index_2);
-                    var accessFlags = hasDefaultValue(declaration) ? 8 /* NoTupleBoundsCheck */ : 0;
-                    var declaredType = getIndexedAccessTypeOrUndefined(parentType, indexType, /*noUncheckedIndexedAccessCandidate*/ undefined, declaration.name, accessFlags | 16 /* ExpressionPosition */) || errorType;
+                    var indexType = getNumberLiteralType(index_2);
+                    var accessFlags = 32 /* ExpressionPosition */ | (hasDefaultValue(declaration) ? 16 /* NoTupleBoundsCheck */ : 0);
+                    var declaredType = getIndexedAccessTypeOrUndefined(parentType, indexType, accessFlags, declaration.name) || errorType;
                     type = getFlowTypeOfDestructuring(declaration, declaredType);
                 }
                 else {
@@ -52231,25 +53321,26 @@
         }
         function isNullOrUndefined(node) {
             var expr = ts.skipParentheses(node);
-            return expr.kind === 103 /* NullKeyword */ || expr.kind === 78 /* Identifier */ && getResolvedSymbol(expr) === undefinedSymbol;
+            return expr.kind === 104 /* NullKeyword */ || expr.kind === 79 /* Identifier */ && getResolvedSymbol(expr) === undefinedSymbol;
         }
         function isEmptyArrayLiteral(node) {
             var expr = ts.skipParentheses(node);
-            return expr.kind === 200 /* ArrayLiteralExpression */ && expr.elements.length === 0;
+            return expr.kind === 202 /* ArrayLiteralExpression */ && expr.elements.length === 0;
         }
-        function addOptionality(type, optional) {
-            if (optional === void 0) { optional = true; }
-            return strictNullChecks && optional ? getOptionalType(type) : type;
+        function addOptionality(type, isProperty, isOptional) {
+            if (isProperty === void 0) { isProperty = false; }
+            if (isOptional === void 0) { isOptional = true; }
+            return strictNullChecks && isOptional ? getOptionalType(type, isProperty) : type;
         }
         // Return the inferred type for a variable, parameter, or property declaration
         function getTypeForVariableLikeDeclaration(declaration, includeOptionality) {
             // A variable declared in a for..in statement is of type string, or of type keyof T when the
             // right hand expression is of a type parameter type.
-            if (ts.isVariableDeclaration(declaration) && declaration.parent.parent.kind === 239 /* ForInStatement */) {
+            if (ts.isVariableDeclaration(declaration) && declaration.parent.parent.kind === 241 /* ForInStatement */) {
                 var indexType = getIndexType(getNonNullableTypeIfNeeded(checkExpression(declaration.parent.parent.expression)));
                 return indexType.flags & (262144 /* TypeParameter */ | 4194304 /* Index */) ? getExtractStringType(indexType) : stringType;
             }
-            if (ts.isVariableDeclaration(declaration) && declaration.parent.parent.kind === 240 /* ForOfStatement */) {
+            if (ts.isVariableDeclaration(declaration) && declaration.parent.parent.kind === 242 /* ForOfStatement */) {
                 // checkRightHandSideOfForOf will return undefined if the for-of expression type was
                 // missing properties/signatures required to get its iteratedType (like
                 // [Symbol.iterator] or next). This may be because we accessed properties from anyType,
@@ -52260,13 +53351,14 @@
             if (ts.isBindingPattern(declaration.parent)) {
                 return getTypeForBindingElement(declaration);
             }
-            var isOptional = includeOptionality && (ts.isParameter(declaration) && isJSDocOptionalParameter(declaration)
-                || isOptionalJSDocPropertyLikeTag(declaration)
-                || !ts.isBindingElement(declaration) && !ts.isVariableDeclaration(declaration) && !!declaration.questionToken);
+            var isProperty = ts.isPropertyDeclaration(declaration) || ts.isPropertySignature(declaration);
+            var isOptional = includeOptionality && (isProperty && !!declaration.questionToken ||
+                ts.isParameter(declaration) && (!!declaration.questionToken || isJSDocOptionalParameter(declaration)) ||
+                isOptionalJSDocPropertyLikeTag(declaration));
             // Use type from type annotation if one is present
             var declaredType = tryGetTypeFromEffectiveTypeNode(declaration);
             if (declaredType) {
-                return addOptionality(declaredType, isOptional);
+                return addOptionality(declaredType, isProperty, isOptional);
             }
             if ((noImplicitAny || ts.isInJSFile(declaration)) &&
                 ts.isVariableDeclaration(declaration) && !ts.isBindingPattern(declaration.name) &&
@@ -52286,8 +53378,8 @@
             if (ts.isParameter(declaration)) {
                 var func = declaration.parent;
                 // For a parameter of a set accessor, use the type of the get accessor if one is present
-                if (func.kind === 169 /* SetAccessor */ && hasBindableName(func)) {
-                    var getter = ts.getDeclarationOfKind(getSymbolOfNode(declaration.parent), 168 /* GetAccessor */);
+                if (func.kind === 171 /* SetAccessor */ && hasBindableName(func)) {
+                    var getter = ts.getDeclarationOfKind(getSymbolOfNode(declaration.parent), 170 /* GetAccessor */);
                     if (getter) {
                         var getterSignature = getSignatureFromDeclaration(getter);
                         var thisParameter = getAccessorThisParameter(func);
@@ -52310,7 +53402,7 @@
                 // Use contextual parameter type if one is available
                 var type = declaration.symbol.escapedName === "this" /* This */ ? getContextualThisParameterType(func) : getContextuallyTypedParameterType(declaration);
                 if (type) {
-                    return addOptionality(type, isOptional);
+                    return addOptionality(type, /*isProperty*/ false, isOptional);
                 }
             }
             // Use the type of the initializer expression if one is present and the declaration is
@@ -52323,16 +53415,25 @@
                     }
                 }
                 var type = widenTypeInferredFromInitializer(declaration, checkDeclarationInitializer(declaration));
-                return addOptionality(type, isOptional);
+                return addOptionality(type, isProperty, isOptional);
             }
-            if (ts.isPropertyDeclaration(declaration) && !ts.hasStaticModifier(declaration) && (noImplicitAny || ts.isInJSFile(declaration))) {
+            if (ts.isPropertyDeclaration(declaration) && (noImplicitAny || ts.isInJSFile(declaration))) {
                 // We have a property declaration with no type annotation or initializer, in noImplicitAny mode or a .js file.
-                // Use control flow analysis of this.xxx assignments in the constructor to determine the type of the property.
-                var constructor = findConstructorDeclaration(declaration.parent);
-                var type = constructor ? getFlowTypeInConstructor(declaration.symbol, constructor) :
-                    ts.getEffectiveModifierFlags(declaration) & 2 /* Ambient */ ? getTypeOfPropertyInBaseClass(declaration.symbol) :
-                        undefined;
-                return type && addOptionality(type, isOptional);
+                // Use control flow analysis of this.xxx assignments in the constructor or static block to determine the type of the property.
+                if (!ts.hasStaticModifier(declaration)) {
+                    var constructor = findConstructorDeclaration(declaration.parent);
+                    var type = constructor ? getFlowTypeInConstructor(declaration.symbol, constructor) :
+                        ts.getEffectiveModifierFlags(declaration) & 2 /* Ambient */ ? getTypeOfPropertyInBaseClass(declaration.symbol) :
+                            undefined;
+                    return type && addOptionality(type, /*isProperty*/ true, isOptional);
+                }
+                else {
+                    var staticBlocks = ts.filter(declaration.parent.members, ts.isClassStaticBlockDeclaration);
+                    var type = staticBlocks.length ? getFlowTypeInStaticBlocks(declaration.symbol, staticBlocks) :
+                        ts.getEffectiveModifierFlags(declaration) & 2 /* Ambient */ ? getTypeOfPropertyInBaseClass(declaration.symbol) :
+                            undefined;
+                    return type && addOptionality(type, /*isProperty*/ true, isOptional);
+                }
             }
             if (ts.isJsxAttribute(declaration)) {
                 // if JSX attribute doesn't have initializer, by default the attribute will have boolean value of true.
@@ -52358,7 +53459,7 @@
                     links.isConstructorDeclaredProperty = !!getDeclaringConstructor(symbol) && ts.every(symbol.declarations, function (declaration) {
                         return ts.isBinaryExpression(declaration) &&
                             isPossiblyAliasedThisProperty(declaration) &&
-                            (declaration.left.kind !== 203 /* ElementAccessExpression */ || ts.isStringOrNumericLiteralLike(declaration.left.argumentExpression)) &&
+                            (declaration.left.kind !== 205 /* ElementAccessExpression */ || ts.isStringOrNumericLiteralLike(declaration.left.argumentExpression)) &&
                             !getAnnotatedTypeForAssignmentDeclaration(/*declaredType*/ undefined, declaration, symbol, declaration);
                     });
                 }
@@ -52380,7 +53481,7 @@
             for (var _i = 0, _a = symbol.declarations; _i < _a.length; _i++) {
                 var declaration = _a[_i];
                 var container = ts.getThisContainer(declaration, /*includeArrowFunctions*/ false);
-                if (container && (container.kind === 167 /* Constructor */ || isJSConstructor(container))) {
+                if (container && (container.kind === 169 /* Constructor */ || isJSConstructor(container))) {
                     return container;
                 }
             }
@@ -52402,6 +53503,27 @@
             reference.flowNode = file.endFlowNode;
             return getFlowTypeOfReference(reference, autoType, undefinedType);
         }
+        function getFlowTypeInStaticBlocks(symbol, staticBlocks) {
+            var accessName = ts.startsWith(symbol.escapedName, "__#")
+                ? ts.factory.createPrivateIdentifier(symbol.escapedName.split("@")[1])
+                : ts.unescapeLeadingUnderscores(symbol.escapedName);
+            for (var _i = 0, staticBlocks_1 = staticBlocks; _i < staticBlocks_1.length; _i++) {
+                var staticBlock = staticBlocks_1[_i];
+                var reference = ts.factory.createPropertyAccessExpression(ts.factory.createThis(), accessName);
+                ts.setParent(reference.expression, reference);
+                ts.setParent(reference, staticBlock);
+                reference.flowNode = staticBlock.returnFlowNode;
+                var flowType = getFlowTypeOfProperty(reference, symbol);
+                if (noImplicitAny && (flowType === autoType || flowType === autoArrayType)) {
+                    error(symbol.valueDeclaration, ts.Diagnostics.Member_0_implicitly_has_an_1_type, symbolToString(symbol), typeToString(flowType));
+                }
+                // We don't infer a type if assignments are only null or undefined.
+                if (everyType(flowType, isNullableType)) {
+                    continue;
+                }
+                return convertAutoToAny(flowType);
+            }
+        }
         function getFlowTypeInConstructor(symbol, constructor) {
             var accessName = ts.startsWith(symbol.escapedName, "__#")
                 ? ts.factory.createPrivateIdentifier(symbol.escapedName.split("@")[1])
@@ -52492,7 +53614,7 @@
                     type = getUnionType(sourceTypes, 2 /* Subtype */);
                 }
             }
-            var widened = getWidenedType(addOptionality(type, definedInMethod && !definedInConstructor));
+            var widened = getWidenedType(addOptionality(type, /*isProperty*/ false, definedInMethod && !definedInConstructor));
             if (symbol.valueDeclaration && filterType(widened, function (t) { return !!(t.flags & ~98304 /* Nullable */); }) === neverType) {
                 reportImplicitAny(symbol.valueDeclaration, anyType);
                 return anyType;
@@ -52516,7 +53638,7 @@
             if ((_b = s === null || s === void 0 ? void 0 : s.exports) === null || _b === void 0 ? void 0 : _b.size) {
                 mergeSymbolTable(exports, s.exports);
             }
-            var type = createAnonymousType(symbol, exports, ts.emptyArray, ts.emptyArray, undefined, undefined);
+            var type = createAnonymousType(symbol, exports, ts.emptyArray, ts.emptyArray, ts.emptyArray);
             type.objectFlags |= 8192 /* JSLiteral */;
             return type;
         }
@@ -52535,7 +53657,10 @@
             if ((_a = symbol.parent) === null || _a === void 0 ? void 0 : _a.valueDeclaration) {
                 var typeNode_2 = ts.getEffectiveTypeAnnotationNode(symbol.parent.valueDeclaration);
                 if (typeNode_2) {
-                    return getTypeOfPropertyOfType(getTypeFromTypeNode(typeNode_2), symbol.escapedName);
+                    var annotationSymbol = getPropertyOfType(getTypeFromTypeNode(typeNode_2), symbol.escapedName);
+                    if (annotationSymbol) {
+                        return getNonMissingTypeOfSymbol(annotationSymbol);
+                    }
                 }
             }
             return declaredType;
@@ -52617,7 +53742,7 @@
                     }
                 });
                 var result = createAnonymousType(initialSize !== members_4.size ? undefined : exportedType.symbol, // Only set the type's symbol if it looks to be the same as the original type
-                members_4, exportedType.callSignatures, exportedType.constructSignatures, exportedType.stringIndexInfo, exportedType.numberIndexInfo);
+                members_4, exportedType.callSignatures, exportedType.constructSignatures, exportedType.indexInfos);
                 result.objectFlags |= (ts.getObjectFlags(type) & 8192 /* JSLiteral */); // Propagate JSLiteral flag
                 if (result.symbol && result.symbol.flags & 32 /* Class */ && type === getDeclaredTypeOfClassOrInterface(result.symbol)) {
                     result.objectFlags |= 16777216 /* IsClassInstanceClone */; // Propagate the knowledge that this type is equivalent to the symbol's class instance type
@@ -52632,16 +53757,16 @@
         }
         function containsSameNamedThisProperty(thisProperty, expression) {
             return ts.isPropertyAccessExpression(thisProperty)
-                && thisProperty.expression.kind === 107 /* ThisKeyword */
+                && thisProperty.expression.kind === 108 /* ThisKeyword */
                 && ts.forEachChildRecursively(expression, function (n) { return isMatchingReference(thisProperty, n); });
         }
         function isDeclarationInConstructor(expression) {
             var thisContainer = ts.getThisContainer(expression, /*includeArrowFunctions*/ false);
             // Properties defined in a constructor (or base constructor, or javascript constructor function) don't get undefined added.
             // Function expressions that are assigned to the prototype count as methods.
-            return thisContainer.kind === 167 /* Constructor */ ||
-                thisContainer.kind === 252 /* FunctionDeclaration */ ||
-                (thisContainer.kind === 209 /* FunctionExpression */ && !ts.isPrototypePropertyAssignment(thisContainer.parent));
+            return thisContainer.kind === 169 /* Constructor */ ||
+                thisContainer.kind === 254 /* FunctionDeclaration */ ||
+                (thisContainer.kind === 211 /* FunctionExpression */ && !ts.isPrototypePropertyAssignment(thisContainer.parent));
         }
         function getConstructorDefinedThisAssignmentTypes(types, declarations) {
             ts.Debug.assert(types.length === declarations.length);
@@ -52683,7 +53808,7 @@
             ts.forEach(pattern.elements, function (e) {
                 var name = e.propertyName || e.name;
                 if (e.dotDotDotToken) {
-                    stringIndexInfo = createIndexInfo(anyType, /*isReadonly*/ false);
+                    stringIndexInfo = createIndexInfo(stringType, anyType, /*isReadonly*/ false);
                     return;
                 }
                 var exprType = getLiteralTypeFromPropertyName(name);
@@ -52699,7 +53824,7 @@
                 symbol.bindingElement = e;
                 members.set(symbol.escapedName, symbol);
             });
-            var result = createAnonymousType(undefined, members, ts.emptyArray, ts.emptyArray, stringIndexInfo, undefined);
+            var result = createAnonymousType(undefined, members, ts.emptyArray, ts.emptyArray, stringIndexInfo ? [stringIndexInfo] : ts.emptyArray);
             result.objectFlags |= objectFlags;
             if (includePatternInType) {
                 result.pattern = pattern;
@@ -52711,7 +53836,7 @@
         function getTypeFromArrayBindingPattern(pattern, includePatternInType, reportErrors) {
             var elements = pattern.elements;
             var lastElement = ts.lastOrUndefined(elements);
-            var restElement = lastElement && lastElement.kind === 199 /* BindingElement */ && lastElement.dotDotDotToken ? lastElement : undefined;
+            var restElement = lastElement && lastElement.kind === 201 /* BindingElement */ && lastElement.dotDotDotToken ? lastElement : undefined;
             if (elements.length === 0 || elements.length === 1 && restElement) {
                 return languageVersion >= 2 /* ES2015 */ ? createIterableType(anyType) : anyArrayType;
             }
@@ -52736,7 +53861,7 @@
         function getTypeFromBindingPattern(pattern, includePatternInType, reportErrors) {
             if (includePatternInType === void 0) { includePatternInType = false; }
             if (reportErrors === void 0) { reportErrors = false; }
-            return pattern.kind === 197 /* ObjectBindingPattern */
+            return pattern.kind === 199 /* ObjectBindingPattern */
                 ? getTypeFromObjectBindingPattern(pattern, includePatternInType, reportErrors)
                 : getTypeFromArrayBindingPattern(pattern, includePatternInType, reportErrors);
         }
@@ -52784,7 +53909,7 @@
         }
         function declarationBelongsToPrivateAmbientMember(declaration) {
             var root = ts.getRootDeclaration(declaration);
-            var memberDeclaration = root.kind === 161 /* Parameter */ ? root.parent : root;
+            var memberDeclaration = root.kind === 162 /* Parameter */ ? root.parent : root;
             return isPrivateWithinAmbient(memberDeclaration);
         }
         function tryGetTypeFromEffectiveTypeNode(declaration) {
@@ -52829,7 +53954,7 @@
                     result.exports = new ts.Map(fileSymbol.exports);
                 var members = ts.createSymbolTable();
                 members.set("exports", result);
-                return createAnonymousType(symbol, members, ts.emptyArray, ts.emptyArray, undefined, undefined);
+                return createAnonymousType(symbol, members, ts.emptyArray, ts.emptyArray, ts.emptyArray);
             }
             // Handle catch clause variables
             ts.Debug.assertIsDefined(symbol.valueDeclaration);
@@ -52837,7 +53962,7 @@
             if (ts.isCatchClauseVariableDeclarationOrBindingElement(declaration)) {
                 var typeNode = ts.getEffectiveTypeAnnotationNode(declaration);
                 if (typeNode === undefined) {
-                    return anyType;
+                    return useUnknownInCatchVariables ? unknownType : anyType;
                 }
                 var type_1 = getTypeOfNode(typeNode);
                 // an errorType will make `checkTryStatement` issue an error
@@ -52859,7 +53984,7 @@
                 return reportCircularityError(symbol);
             }
             var type;
-            if (declaration.kind === 267 /* ExportAssignment */) {
+            if (declaration.kind === 269 /* ExportAssignment */) {
                 type = widenTypeForVariableLikeDeclaration(checkExpressionCached(declaration.expression), declaration);
             }
             else if (ts.isBinaryExpression(declaration) ||
@@ -52930,7 +54055,7 @@
         }
         function getAnnotatedAccessorTypeNode(accessor) {
             if (accessor) {
-                if (accessor.kind === 168 /* GetAccessor */) {
+                if (accessor.kind === 170 /* GetAccessor */) {
                     var getterTypeAnnotation = ts.getEffectiveReturnTypeNode(accessor);
                     return getterTypeAnnotation;
                 }
@@ -52969,7 +54094,7 @@
             if (!popTypeResolution()) {
                 type = anyType;
                 if (noImplicitAny) {
-                    var getter = ts.getDeclarationOfKind(symbol, 168 /* GetAccessor */);
+                    var getter = ts.getDeclarationOfKind(symbol, 170 /* GetAccessor */);
                     error(getter, ts.Diagnostics._0_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_referenced_directly_or_indirectly_in_one_of_its_return_expressions, symbolToString(symbol));
                 }
             }
@@ -52977,8 +54102,8 @@
         }
         function resolveTypeOfAccessors(symbol, writing) {
             if (writing === void 0) { writing = false; }
-            var getter = ts.getDeclarationOfKind(symbol, 168 /* GetAccessor */);
-            var setter = ts.getDeclarationOfKind(symbol, 169 /* SetAccessor */);
+            var getter = ts.getDeclarationOfKind(symbol, 170 /* GetAccessor */);
+            var setter = ts.getDeclarationOfKind(symbol, 171 /* SetAccessor */);
             var setterType = getAnnotatedAccessorType(setter);
             // For write operations, prioritize type annotations on the setter
             if (writing && setterType) {
@@ -53055,9 +54180,9 @@
             if (symbol.flags & 1536 /* Module */ && ts.isShorthandAmbientModuleSymbol(symbol)) {
                 return anyType;
             }
-            else if (declaration && (declaration.kind === 217 /* BinaryExpression */ ||
+            else if (declaration && (declaration.kind === 219 /* BinaryExpression */ ||
                 ts.isAccessExpression(declaration) &&
-                    declaration.parent.kind === 217 /* BinaryExpression */)) {
+                    declaration.parent.kind === 219 /* BinaryExpression */)) {
                 return getWidenedTypeForAssignmentDeclaration(symbol);
             }
             else if (symbol.flags & 512 /* ValueModule */ && declaration && ts.isSourceFile(declaration) && declaration.commonJsModuleIndicator) {
@@ -53126,7 +54251,7 @@
                 return errorType;
             }
             // Check if variable has initializer that circularly references the variable itself
-            if (noImplicitAny && (declaration.kind !== 161 /* Parameter */ || declaration.initializer)) {
+            if (noImplicitAny && (declaration.kind !== 162 /* Parameter */ || declaration.initializer)) {
                 error(symbol.valueDeclaration, ts.Diagnostics._0_implicitly_has_type_any_because_it_does_not_have_a_type_annotation_and_is_referenced_directly_or_indirectly_in_its_own_initializer, symbolToString(symbol));
             }
             // Circularities could also result from parameters in function expressions that end up
@@ -53183,6 +54308,9 @@
             }
             return errorType;
         }
+        function getNonMissingTypeOfSymbol(symbol) {
+            return removeMissingType(getTypeOfSymbol(symbol), !!(symbol.flags & 16777216 /* Optional */));
+        }
         function isReferenceToType(type, target) {
             return type !== undefined
                 && target !== undefined
@@ -53234,46 +54362,46 @@
                     return undefined;
                 }
                 switch (node.kind) {
-                    case 253 /* ClassDeclaration */:
-                    case 222 /* ClassExpression */:
-                    case 254 /* InterfaceDeclaration */:
-                    case 170 /* CallSignature */:
-                    case 171 /* ConstructSignature */:
-                    case 165 /* MethodSignature */:
-                    case 175 /* FunctionType */:
-                    case 176 /* ConstructorType */:
-                    case 309 /* JSDocFunctionType */:
-                    case 252 /* FunctionDeclaration */:
-                    case 166 /* MethodDeclaration */:
-                    case 209 /* FunctionExpression */:
-                    case 210 /* ArrowFunction */:
-                    case 255 /* TypeAliasDeclaration */:
-                    case 334 /* JSDocTemplateTag */:
-                    case 335 /* JSDocTypedefTag */:
-                    case 329 /* JSDocEnumTag */:
-                    case 328 /* JSDocCallbackTag */:
-                    case 191 /* MappedType */:
-                    case 185 /* ConditionalType */: {
+                    case 255 /* ClassDeclaration */:
+                    case 224 /* ClassExpression */:
+                    case 256 /* InterfaceDeclaration */:
+                    case 172 /* CallSignature */:
+                    case 173 /* ConstructSignature */:
+                    case 166 /* MethodSignature */:
+                    case 177 /* FunctionType */:
+                    case 178 /* ConstructorType */:
+                    case 312 /* JSDocFunctionType */:
+                    case 254 /* FunctionDeclaration */:
+                    case 167 /* MethodDeclaration */:
+                    case 211 /* FunctionExpression */:
+                    case 212 /* ArrowFunction */:
+                    case 257 /* TypeAliasDeclaration */:
+                    case 339 /* JSDocTemplateTag */:
+                    case 340 /* JSDocTypedefTag */:
+                    case 334 /* JSDocEnumTag */:
+                    case 333 /* JSDocCallbackTag */:
+                    case 193 /* MappedType */:
+                    case 187 /* ConditionalType */: {
                         var outerTypeParameters = getOuterTypeParameters(node, includeThisTypes);
-                        if (node.kind === 191 /* MappedType */) {
+                        if (node.kind === 193 /* MappedType */) {
                             return ts.append(outerTypeParameters, getDeclaredTypeOfTypeParameter(getSymbolOfNode(node.typeParameter)));
                         }
-                        else if (node.kind === 185 /* ConditionalType */) {
+                        else if (node.kind === 187 /* ConditionalType */) {
                             return ts.concatenate(outerTypeParameters, getInferTypeParameters(node));
                         }
                         var outerAndOwnTypeParameters = appendTypeParameters(outerTypeParameters, ts.getEffectiveTypeParameterDeclarations(node));
                         var thisType = includeThisTypes &&
-                            (node.kind === 253 /* ClassDeclaration */ || node.kind === 222 /* ClassExpression */ || node.kind === 254 /* InterfaceDeclaration */ || isJSConstructor(node)) &&
+                            (node.kind === 255 /* ClassDeclaration */ || node.kind === 224 /* ClassExpression */ || node.kind === 256 /* InterfaceDeclaration */ || isJSConstructor(node)) &&
                             getDeclaredTypeOfClassOrInterface(getSymbolOfNode(node)).thisType;
                         return thisType ? ts.append(outerAndOwnTypeParameters, thisType) : outerAndOwnTypeParameters;
                     }
-                    case 330 /* JSDocParameterTag */:
+                    case 335 /* JSDocParameterTag */:
                         var paramSymbol = ts.getParameterSymbolFromJSDoc(node);
                         if (paramSymbol) {
                             node = paramSymbol.valueDeclaration;
                         }
                         break;
-                    case 312 /* JSDocComment */: {
+                    case 315 /* JSDocComment */: {
                         var outerTypeParameters = getOuterTypeParameters(node, includeThisTypes);
                         return node.tags
                             ? appendTypeParameters(outerTypeParameters, ts.flatMap(node.tags, function (t) { return ts.isJSDocTemplateTag(t) ? t.typeParameters : undefined; }))
@@ -53284,7 +54412,7 @@
         }
         // The outer type parameters are those defined by enclosing generic classes, methods, or functions.
         function getOuterTypeParametersOfClassOrInterface(symbol) {
-            var declaration = symbol.flags & 32 /* Class */ ? symbol.valueDeclaration : ts.getDeclarationOfKind(symbol, 254 /* InterfaceDeclaration */);
+            var declaration = symbol.flags & 32 /* Class */ ? symbol.valueDeclaration : ts.getDeclarationOfKind(symbol, 256 /* InterfaceDeclaration */);
             ts.Debug.assert(!!declaration, "Class was missing valueDeclaration -OR- non-class had no interface declarations");
             return getOuterTypeParameters(declaration);
         }
@@ -53297,9 +54425,9 @@
             var result;
             for (var _i = 0, _a = symbol.declarations; _i < _a.length; _i++) {
                 var node = _a[_i];
-                if (node.kind === 254 /* InterfaceDeclaration */ ||
-                    node.kind === 253 /* ClassDeclaration */ ||
-                    node.kind === 222 /* ClassExpression */ ||
+                if (node.kind === 256 /* InterfaceDeclaration */ ||
+                    node.kind === 255 /* ClassDeclaration */ ||
+                    node.kind === 224 /* ClassExpression */ ||
                     isJSConstructor(node) ||
                     ts.isTypeAlias(node)) {
                     var declaration = node;
@@ -53450,7 +54578,7 @@
                     if (!popTypeResolution() && type.symbol.declarations) {
                         for (var _i = 0, _a = type.symbol.declarations; _i < _a.length; _i++) {
                             var declaration = _a[_i];
-                            if (declaration.kind === 253 /* ClassDeclaration */ || declaration.kind === 254 /* InterfaceDeclaration */) {
+                            if (declaration.kind === 255 /* ClassDeclaration */ || declaration.kind === 256 /* InterfaceDeclaration */) {
                                 reportCircularBaseType(declaration, type);
                             }
                         }
@@ -53546,7 +54674,7 @@
             if (type.symbol.declarations) {
                 for (var _i = 0, _a = type.symbol.declarations; _i < _a.length; _i++) {
                     var declaration = _a[_i];
-                    if (declaration.kind === 254 /* InterfaceDeclaration */ && ts.getInterfaceBaseTypeNodes(declaration)) {
+                    if (declaration.kind === 256 /* InterfaceDeclaration */ && ts.getInterfaceBaseTypeNodes(declaration)) {
                         for (var _b = 0, _c = ts.getInterfaceBaseTypeNodes(declaration); _b < _c.length; _b++) {
                             var node = _c[_b];
                             var baseType = getReducedType(getTypeFromTypeNode(node));
@@ -53586,7 +54714,7 @@
             }
             for (var _i = 0, _a = symbol.declarations; _i < _a.length; _i++) {
                 var declaration = _a[_i];
-                if (declaration.kind === 254 /* InterfaceDeclaration */) {
+                if (declaration.kind === 256 /* InterfaceDeclaration */) {
                     if (declaration.flags & 128 /* ContainsThis */) {
                         return false;
                     }
@@ -53665,7 +54793,12 @@
                 }
                 else {
                     type = errorType;
-                    error(ts.isNamedDeclaration(declaration) ? declaration.name : declaration || declaration, ts.Diagnostics.Type_alias_0_circularly_references_itself, symbolToString(symbol));
+                    if (declaration.kind === 334 /* JSDocEnumTag */) {
+                        error(declaration.typeExpression.type, ts.Diagnostics.Type_alias_0_circularly_references_itself, symbolToString(symbol));
+                    }
+                    else {
+                        error(ts.isNamedDeclaration(declaration) ? declaration.name : declaration || declaration, ts.Diagnostics.Type_alias_0_circularly_references_itself, symbolToString(symbol));
+                    }
                 }
                 links.declaredType = type;
             }
@@ -53675,7 +54808,7 @@
             if (ts.isStringLiteralLike(expr)) {
                 return true;
             }
-            else if (expr.kind === 217 /* BinaryExpression */) {
+            else if (expr.kind === 219 /* BinaryExpression */) {
                 return isStringConcatExpression(expr.left) && isStringConcatExpression(expr.right);
             }
             return false;
@@ -53690,12 +54823,12 @@
                 case 8 /* NumericLiteral */:
                 case 14 /* NoSubstitutionTemplateLiteral */:
                     return true;
-                case 215 /* PrefixUnaryExpression */:
+                case 217 /* PrefixUnaryExpression */:
                     return expr.operator === 40 /* MinusToken */ &&
                         expr.operand.kind === 8 /* NumericLiteral */;
-                case 78 /* Identifier */:
+                case 79 /* Identifier */:
                     return ts.nodeIsMissing(expr) || !!getSymbolOfNode(member.parent).exports.get(expr.escapedText);
-                case 217 /* BinaryExpression */:
+                case 219 /* BinaryExpression */:
                     return isStringConcatExpression(expr);
                 default:
                     return false;
@@ -53710,7 +54843,7 @@
             if (symbol.declarations) {
                 for (var _i = 0, _a = symbol.declarations; _i < _a.length; _i++) {
                     var declaration = _a[_i];
-                    if (declaration.kind === 256 /* EnumDeclaration */) {
+                    if (declaration.kind === 258 /* EnumDeclaration */) {
                         for (var _b = 0, _c = declaration.members; _b < _c.length; _b++) {
                             var member = _c[_b];
                             if (member.initializer && ts.isStringLiteralLike(member.initializer)) {
@@ -53739,11 +54872,11 @@
                 if (symbol.declarations) {
                     for (var _i = 0, _a = symbol.declarations; _i < _a.length; _i++) {
                         var declaration = _a[_i];
-                        if (declaration.kind === 256 /* EnumDeclaration */) {
+                        if (declaration.kind === 258 /* EnumDeclaration */) {
                             for (var _b = 0, _c = declaration.members; _b < _c.length; _b++) {
                                 var member = _c[_b];
                                 var value = getEnumMemberValue(member);
-                                var memberType = getFreshTypeOfLiteralType(getLiteralType(value !== undefined ? value : 0, enumCount, getSymbolOfNode(member)));
+                                var memberType = getFreshTypeOfLiteralType(getEnumLiteralType(value !== undefined ? value : 0, enumCount, getSymbolOfNode(member)));
                                 getSymbolLinks(getSymbolOfNode(member)).declaredType = memberType;
                                 memberTypeList.push(getRegularTypeOfLiteralType(memberType));
                             }
@@ -53812,22 +54945,22 @@
          */
         function isThislessType(node) {
             switch (node.kind) {
-                case 128 /* AnyKeyword */:
-                case 152 /* UnknownKeyword */:
-                case 147 /* StringKeyword */:
-                case 144 /* NumberKeyword */:
-                case 155 /* BigIntKeyword */:
-                case 131 /* BooleanKeyword */:
-                case 148 /* SymbolKeyword */:
-                case 145 /* ObjectKeyword */:
-                case 113 /* VoidKeyword */:
-                case 150 /* UndefinedKeyword */:
-                case 141 /* NeverKeyword */:
-                case 192 /* LiteralType */:
+                case 129 /* AnyKeyword */:
+                case 153 /* UnknownKeyword */:
+                case 148 /* StringKeyword */:
+                case 145 /* NumberKeyword */:
+                case 156 /* BigIntKeyword */:
+                case 132 /* BooleanKeyword */:
+                case 149 /* SymbolKeyword */:
+                case 146 /* ObjectKeyword */:
+                case 114 /* VoidKeyword */:
+                case 151 /* UndefinedKeyword */:
+                case 142 /* NeverKeyword */:
+                case 194 /* LiteralType */:
                     return true;
-                case 179 /* ArrayType */:
+                case 181 /* ArrayType */:
                     return isThislessType(node.elementType);
-                case 174 /* TypeReference */:
+                case 176 /* TypeReference */:
                     return !node.typeArguments || node.typeArguments.every(isThislessType);
             }
             return false;
@@ -53853,7 +54986,7 @@
         function isThislessFunctionLikeDeclaration(node) {
             var returnType = ts.getEffectiveReturnTypeNode(node);
             var typeParameters = ts.getEffectiveTypeParameterDeclarations(node);
-            return (node.kind === 167 /* Constructor */ || (!!returnType && isThislessType(returnType))) &&
+            return (node.kind === 169 /* Constructor */ || (!!returnType && isThislessType(returnType))) &&
                 node.parameters.every(isThislessVariableLikeDeclaration) &&
                 typeParameters.every(isThislessTypeParameter);
         }
@@ -53869,14 +55002,14 @@
                 var declaration = symbol.declarations[0];
                 if (declaration) {
                     switch (declaration.kind) {
-                        case 164 /* PropertyDeclaration */:
-                        case 163 /* PropertySignature */:
+                        case 165 /* PropertyDeclaration */:
+                        case 164 /* PropertySignature */:
                             return isThislessVariableLikeDeclaration(declaration);
-                        case 166 /* MethodDeclaration */:
-                        case 165 /* MethodSignature */:
-                        case 167 /* Constructor */:
-                        case 168 /* GetAccessor */:
-                        case 169 /* SetAccessor */:
+                        case 167 /* MethodDeclaration */:
+                        case 166 /* MethodSignature */:
+                        case 169 /* Constructor */:
+                        case 170 /* GetAccessor */:
+                        case 171 /* SetAccessor */:
                             return isThislessFunctionLikeDeclaration(declaration);
                     }
                 }
@@ -53902,7 +55035,7 @@
             }
         }
         function isStaticPrivateIdentifierProperty(s) {
-            return !!s.valueDeclaration && ts.isPrivateIdentifierClassElementDeclaration(s.valueDeclaration) && ts.hasSyntacticModifier(s.valueDeclaration, 32 /* Static */);
+            return !!s.valueDeclaration && ts.isPrivateIdentifierClassElementDeclaration(s.valueDeclaration) && ts.isStatic(s.valueDeclaration);
         }
         function resolveDeclaredMembers(type) {
             if (!type.declaredProperties) {
@@ -53912,10 +55045,10 @@
                 // Start with signatures at empty array in case of recursive types
                 type.declaredCallSignatures = ts.emptyArray;
                 type.declaredConstructSignatures = ts.emptyArray;
+                type.declaredIndexInfos = ts.emptyArray;
                 type.declaredCallSignatures = getSignaturesOfSymbol(members.get("__call" /* Call */));
                 type.declaredConstructSignatures = getSignaturesOfSymbol(members.get("__new" /* New */));
-                type.declaredStringIndexInfo = getIndexInfoOfSymbol(symbol, 0 /* String */);
-                type.declaredNumberIndexInfo = getIndexInfoOfSymbol(symbol, 1 /* Number */);
+                type.declaredIndexInfos = getIndexInfosOfSymbol(symbol);
             }
             return type;
         }
@@ -53989,7 +55122,7 @@
             if (!symbol.declarations) {
                 symbol.declarations = [member];
             }
-            else {
+            else if (!member.symbol.isReplaceableByMethod) {
                 symbol.declarations.push(member);
             }
             if (symbolFlags & 111551 /* Value */) {
@@ -54071,8 +55204,8 @@
         function getResolvedMembersOrExportsOfSymbol(symbol, resolutionKind) {
             var links = getSymbolLinks(symbol);
             if (!links[resolutionKind]) {
-                var isStatic = resolutionKind === "resolvedExports" /* resolvedExports */;
-                var earlySymbols = !isStatic ? symbol.members :
+                var isStatic_1 = resolutionKind === "resolvedExports" /* resolvedExports */;
+                var earlySymbols = !isStatic_1 ? symbol.members :
                     symbol.flags & 1536 /* Module */ ? getExportsOfModuleWorker(symbol) :
                         symbol.exports;
                 // In the event we recursively resolve the members/exports of the symbol, we
@@ -54087,7 +55220,7 @@
                     if (members) {
                         for (var _b = 0, members_5 = members; _b < members_5.length; _b++) {
                             var member = members_5[_b];
-                            if (isStatic === ts.hasStaticModifier(member) && hasLateBindableName(member)) {
+                            if (isStatic_1 === ts.hasStaticModifier(member) && hasLateBindableName(member)) {
                                 lateBindMember(symbol, earlySymbols, lateSymbols, member);
                             }
                         }
@@ -54103,7 +55236,7 @@
                             || ts.isBinaryExpression(member) && isPossiblyAliasedThisProperty(member, assignmentKind)
                             || assignmentKind === 9 /* ObjectDefinePrototypeProperty */
                             || assignmentKind === 6 /* Prototype */; // A straight `Prototype` assignment probably can never have a computed name
-                        if (isStatic === !isInstanceMember && hasLateBindableName(member)) {
+                        if (isStatic_1 === !isInstanceMember && hasLateBindableName(member)) {
                             lateBindMember(symbol, earlySymbols, lateSymbols, member);
                         }
                     }
@@ -54165,29 +55298,26 @@
             var members;
             var callSignatures;
             var constructSignatures;
-            var stringIndexInfo;
-            var numberIndexInfo;
+            var indexInfos;
             if (ts.rangeEquals(typeParameters, typeArguments, 0, typeParameters.length)) {
                 members = source.symbol ? getMembersOfSymbol(source.symbol) : ts.createSymbolTable(source.declaredProperties);
                 callSignatures = source.declaredCallSignatures;
                 constructSignatures = source.declaredConstructSignatures;
-                stringIndexInfo = source.declaredStringIndexInfo;
-                numberIndexInfo = source.declaredNumberIndexInfo;
+                indexInfos = source.declaredIndexInfos;
             }
             else {
                 mapper = createTypeMapper(typeParameters, typeArguments);
                 members = createInstantiatedSymbolTable(source.declaredProperties, mapper, /*mappingThisOnly*/ typeParameters.length === 1);
                 callSignatures = instantiateSignatures(source.declaredCallSignatures, mapper);
                 constructSignatures = instantiateSignatures(source.declaredConstructSignatures, mapper);
-                stringIndexInfo = instantiateIndexInfo(source.declaredStringIndexInfo, mapper);
-                numberIndexInfo = instantiateIndexInfo(source.declaredNumberIndexInfo, mapper);
+                indexInfos = instantiateIndexInfos(source.declaredIndexInfos, mapper);
             }
             var baseTypes = getBaseTypes(source);
             if (baseTypes.length) {
                 if (source.symbol && members === getMembersOfSymbol(source.symbol)) {
                     members = ts.createSymbolTable(source.declaredProperties);
                 }
-                setStructuredTypeMembers(type, members, callSignatures, constructSignatures, stringIndexInfo, numberIndexInfo);
+                setStructuredTypeMembers(type, members, callSignatures, constructSignatures, indexInfos);
                 var thisArgument = ts.lastOrUndefined(typeArguments);
                 for (var _i = 0, baseTypes_1 = baseTypes; _i < baseTypes_1.length; _i++) {
                     var baseType = baseTypes_1[_i];
@@ -54195,15 +55325,11 @@
                     addInheritedMembers(members, getPropertiesOfType(instantiatedBaseType));
                     callSignatures = ts.concatenate(callSignatures, getSignaturesOfType(instantiatedBaseType, 0 /* Call */));
                     constructSignatures = ts.concatenate(constructSignatures, getSignaturesOfType(instantiatedBaseType, 1 /* Construct */));
-                    if (!stringIndexInfo) {
-                        stringIndexInfo = instantiatedBaseType === anyType ?
-                            createIndexInfo(anyType, /*isReadonly*/ false) :
-                            getIndexInfoOfType(instantiatedBaseType, 0 /* String */);
-                    }
-                    numberIndexInfo = numberIndexInfo || getIndexInfoOfType(instantiatedBaseType, 1 /* Number */);
+                    var inheritedIndexInfos = instantiatedBaseType !== anyType ? getIndexInfosOfType(instantiatedBaseType) : [createIndexInfo(stringType, anyType, /*isReadonly*/ false)];
+                    indexInfos = ts.concatenate(indexInfos, ts.filter(inheritedIndexInfos, function (info) { return !findIndexInfo(indexInfos, info.keyType); }));
                 }
             }
-            setStructuredTypeMembers(type, members, callSignatures, constructSignatures, stringIndexInfo, numberIndexInfo);
+            setStructuredTypeMembers(type, members, callSignatures, constructSignatures, indexInfos);
         }
         function resolveClassOrInterfaceMembers(type) {
             resolveObjectTypeMembers(type, resolveDeclaredMembers(type), ts.emptyArray, ts.emptyArray);
@@ -54513,38 +55639,35 @@
             }
             return result;
         }
-        function getUnionIndexInfo(types, kind) {
-            var indexTypes = [];
-            var isAnyReadonly = false;
-            for (var _i = 0, types_4 = types; _i < types_4.length; _i++) {
-                var type = types_4[_i];
-                var indexInfo = getIndexInfoOfType(getApparentType(type), kind);
-                if (!indexInfo) {
-                    return undefined;
+        function getUnionIndexInfos(types) {
+            var sourceInfos = getIndexInfosOfType(types[0]);
+            if (sourceInfos) {
+                var result = [];
+                var _loop_11 = function (info) {
+                    var indexType = info.keyType;
+                    if (ts.every(types, function (t) { return !!getIndexInfoOfType(t, indexType); })) {
+                        result.push(createIndexInfo(indexType, getUnionType(ts.map(types, function (t) { return getIndexTypeOfType(t, indexType); })), ts.some(types, function (t) { return getIndexInfoOfType(t, indexType).isReadonly; })));
+                    }
+                };
+                for (var _i = 0, sourceInfos_1 = sourceInfos; _i < sourceInfos_1.length; _i++) {
+                    var info = sourceInfos_1[_i];
+                    _loop_11(info);
                 }
-                indexTypes.push(indexInfo.type);
-                isAnyReadonly = isAnyReadonly || indexInfo.isReadonly;
+                return result;
             }
-            return createIndexInfo(getUnionType(indexTypes, 2 /* Subtype */), isAnyReadonly);
+            return ts.emptyArray;
         }
         function resolveUnionTypeMembers(type) {
             // The members and properties collections are empty for union types. To get all properties of a union
             // type use getPropertiesOfType (only the language service uses this).
             var callSignatures = getUnionSignatures(ts.map(type.types, function (t) { return t === globalFunctionType ? [unknownSignature] : getSignaturesOfType(t, 0 /* Call */); }));
             var constructSignatures = getUnionSignatures(ts.map(type.types, function (t) { return getSignaturesOfType(t, 1 /* Construct */); }));
-            var stringIndexInfo = getUnionIndexInfo(type.types, 0 /* String */);
-            var numberIndexInfo = getUnionIndexInfo(type.types, 1 /* Number */);
-            setStructuredTypeMembers(type, emptySymbols, callSignatures, constructSignatures, stringIndexInfo, numberIndexInfo);
+            var indexInfos = getUnionIndexInfos(type.types);
+            setStructuredTypeMembers(type, emptySymbols, callSignatures, constructSignatures, indexInfos);
         }
         function intersectTypes(type1, type2) {
             return !type1 ? type2 : !type2 ? type1 : getIntersectionType([type1, type2]);
         }
-        function intersectIndexInfos(info1, info2) {
-            return !info1 ? info2 : !info2 ? info1 : createIndexInfo(getIntersectionType([info1.type, info2.type]), info1.isReadonly && info2.isReadonly);
-        }
-        function unionSpreadIndexInfos(info1, info2) {
-            return info1 && info2 && createIndexInfo(getUnionType([info1.type, info2.type]), info1.isReadonly || info2.isReadonly);
-        }
         function findMixins(types) {
             var constructorTypeCount = ts.countWhere(types, function (t) { return getSignaturesOfType(t, 1 /* Construct */).length > 0; });
             var mixinFlags = ts.map(types, isMixinConstructorType);
@@ -54571,12 +55694,11 @@
             // intersection type use getPropertiesOfType (only the language service uses this).
             var callSignatures;
             var constructSignatures;
-            var stringIndexInfo;
-            var numberIndexInfo;
+            var indexInfos;
             var types = type.types;
             var mixinFlags = findMixins(types);
             var mixinCount = ts.countWhere(mixinFlags, function (b) { return b; });
-            var _loop_11 = function (i) {
+            var _loop_12 = function (i) {
                 var t = type.types[i];
                 // When an intersection type contains mixin constructor types, the construct signatures from
                 // those types are discarded and their return types are mixed into the return types of all
@@ -54595,54 +55717,62 @@
                     constructSignatures = appendSignatures(constructSignatures, signatures);
                 }
                 callSignatures = appendSignatures(callSignatures, getSignaturesOfType(t, 0 /* Call */));
-                stringIndexInfo = intersectIndexInfos(stringIndexInfo, getIndexInfoOfType(t, 0 /* String */));
-                numberIndexInfo = intersectIndexInfos(numberIndexInfo, getIndexInfoOfType(t, 1 /* Number */));
+                indexInfos = ts.reduceLeft(getIndexInfosOfType(t), function (infos, newInfo) { return appendIndexInfo(infos, newInfo, /*union*/ false); }, indexInfos);
             };
             for (var i = 0; i < types.length; i++) {
-                _loop_11(i);
+                _loop_12(i);
             }
-            setStructuredTypeMembers(type, emptySymbols, callSignatures || ts.emptyArray, constructSignatures || ts.emptyArray, stringIndexInfo, numberIndexInfo);
+            setStructuredTypeMembers(type, emptySymbols, callSignatures || ts.emptyArray, constructSignatures || ts.emptyArray, indexInfos || ts.emptyArray);
         }
         function appendSignatures(signatures, newSignatures) {
-            var _loop_12 = function (sig) {
+            var _loop_13 = function (sig) {
                 if (!signatures || ts.every(signatures, function (s) { return !compareSignaturesIdentical(s, sig, /*partialMatch*/ false, /*ignoreThisTypes*/ false, /*ignoreReturnTypes*/ false, compareTypesIdentical); })) {
                     signatures = ts.append(signatures, sig);
                 }
             };
             for (var _i = 0, newSignatures_1 = newSignatures; _i < newSignatures_1.length; _i++) {
                 var sig = newSignatures_1[_i];
-                _loop_12(sig);
+                _loop_13(sig);
             }
             return signatures;
         }
+        function appendIndexInfo(indexInfos, newInfo, union) {
+            if (indexInfos) {
+                for (var i = 0; i < indexInfos.length; i++) {
+                    var info = indexInfos[i];
+                    if (info.keyType === newInfo.keyType) {
+                        indexInfos[i] = createIndexInfo(info.keyType, union ? getUnionType([info.type, newInfo.type]) : getIntersectionType([info.type, newInfo.type]), union ? info.isReadonly || newInfo.isReadonly : info.isReadonly && newInfo.isReadonly);
+                        return indexInfos;
+                    }
+                }
+            }
+            return ts.append(indexInfos, newInfo);
+        }
         /**
          * Converts an AnonymousType to a ResolvedType.
          */
         function resolveAnonymousTypeMembers(type) {
             var symbol = getMergedSymbol(type.symbol);
             if (type.target) {
-                setStructuredTypeMembers(type, emptySymbols, ts.emptyArray, ts.emptyArray, undefined, undefined);
+                setStructuredTypeMembers(type, emptySymbols, ts.emptyArray, ts.emptyArray, ts.emptyArray);
                 var members = createInstantiatedSymbolTable(getPropertiesOfObjectType(type.target), type.mapper, /*mappingThisOnly*/ false);
                 var callSignatures = instantiateSignatures(getSignaturesOfType(type.target, 0 /* Call */), type.mapper);
                 var constructSignatures = instantiateSignatures(getSignaturesOfType(type.target, 1 /* Construct */), type.mapper);
-                var stringIndexInfo = instantiateIndexInfo(getIndexInfoOfType(type.target, 0 /* String */), type.mapper);
-                var numberIndexInfo = instantiateIndexInfo(getIndexInfoOfType(type.target, 1 /* Number */), type.mapper);
-                setStructuredTypeMembers(type, members, callSignatures, constructSignatures, stringIndexInfo, numberIndexInfo);
+                var indexInfos = instantiateIndexInfos(getIndexInfosOfType(type.target), type.mapper);
+                setStructuredTypeMembers(type, members, callSignatures, constructSignatures, indexInfos);
             }
             else if (symbol.flags & 2048 /* TypeLiteral */) {
-                setStructuredTypeMembers(type, emptySymbols, ts.emptyArray, ts.emptyArray, undefined, undefined);
+                setStructuredTypeMembers(type, emptySymbols, ts.emptyArray, ts.emptyArray, ts.emptyArray);
                 var members = getMembersOfSymbol(symbol);
                 var callSignatures = getSignaturesOfSymbol(members.get("__call" /* Call */));
                 var constructSignatures = getSignaturesOfSymbol(members.get("__new" /* New */));
-                var stringIndexInfo = getIndexInfoOfSymbol(symbol, 0 /* String */);
-                var numberIndexInfo = getIndexInfoOfSymbol(symbol, 1 /* Number */);
-                setStructuredTypeMembers(type, members, callSignatures, constructSignatures, stringIndexInfo, numberIndexInfo);
+                var indexInfos = getIndexInfosOfSymbol(symbol);
+                setStructuredTypeMembers(type, members, callSignatures, constructSignatures, indexInfos);
             }
             else {
                 // Combinations of function, class, enum and module
                 var members = emptySymbols;
-                var stringIndexInfo = void 0;
-                var numberIndexInfo = void 0;
+                var indexInfos = void 0;
                 if (symbol.exports) {
                     members = getExportsOfSymbol(symbol);
                     if (symbol === globalThisSymbol) {
@@ -54656,7 +55786,7 @@
                     }
                 }
                 var baseConstructorIndexInfo = void 0;
-                setStructuredTypeMembers(type, members, ts.emptyArray, ts.emptyArray, undefined, undefined);
+                setStructuredTypeMembers(type, members, ts.emptyArray, ts.emptyArray, ts.emptyArray);
                 if (symbol.flags & 32 /* Class */) {
                     var classType = getDeclaredTypeOfClassOrInterface(symbol);
                     var baseConstructorType = getBaseConstructorTypeOfClass(classType);
@@ -54665,22 +55795,23 @@
                         addInheritedMembers(members, getPropertiesOfType(baseConstructorType));
                     }
                     else if (baseConstructorType === anyType) {
-                        baseConstructorIndexInfo = createIndexInfo(anyType, /*isReadonly*/ false);
+                        baseConstructorIndexInfo = createIndexInfo(stringType, anyType, /*isReadonly*/ false);
                     }
                 }
                 var indexSymbol = getIndexSymbolFromSymbolTable(members);
                 if (indexSymbol) {
-                    stringIndexInfo = getIndexInfoOfIndexSymbol(indexSymbol, 0 /* String */);
-                    numberIndexInfo = getIndexInfoOfIndexSymbol(indexSymbol, 1 /* Number */);
+                    indexInfos = getIndexInfosOfIndexSymbol(indexSymbol);
                 }
                 else {
-                    stringIndexInfo = baseConstructorIndexInfo;
+                    if (baseConstructorIndexInfo) {
+                        indexInfos = ts.append(indexInfos, baseConstructorIndexInfo);
+                    }
                     if (symbol.flags & 384 /* Enum */ && (getDeclaredTypeOfSymbol(symbol).flags & 32 /* Enum */ ||
                         ts.some(type.properties, function (prop) { return !!(getTypeOfSymbol(prop).flags & 296 /* NumberLike */); }))) {
-                        numberIndexInfo = enumNumberIndexInfo;
+                        indexInfos = ts.append(indexInfos, enumNumberIndexInfo);
                     }
                 }
-                setStructuredTypeMembers(type, members, ts.emptyArray, ts.emptyArray, stringIndexInfo, numberIndexInfo);
+                setStructuredTypeMembers(type, members, ts.emptyArray, ts.emptyArray, indexInfos || ts.emptyArray);
                 // We resolve the members before computing the signatures because a signature may use
                 // typeof with a qualified name expression that circularly references the type we are
                 // in the process of resolving (see issue #6072). The temporarily empty signature list
@@ -54708,20 +55839,14 @@
             // map type.indexType to 0
             // map type.objectType to `[TReplacement]`
             // thus making the indexed access `[TReplacement][0]` or `TReplacement`
-            return instantiateType(instantiable, createTypeMapper([type.indexType, type.objectType], [getLiteralType(0), createTupleType([replacement])]));
-        }
-        function getIndexInfoOfIndexSymbol(indexSymbol, indexKind) {
-            var declaration = getIndexDeclarationOfIndexSymbol(indexSymbol, indexKind);
-            if (!declaration)
-                return undefined;
-            return createIndexInfo(declaration.type ? getTypeFromTypeNode(declaration.type) : anyType, ts.hasEffectiveModifier(declaration, 64 /* Readonly */), declaration);
+            return instantiateType(instantiable, createTypeMapper([type.indexType, type.objectType], [getNumberLiteralType(0), createTupleType([replacement])]));
         }
         function resolveReverseMappedTypeMembers(type) {
-            var indexInfo = getIndexInfoOfType(type.source, 0 /* String */);
+            var indexInfo = getIndexInfoOfType(type.source, stringType);
             var modifiers = getMappedTypeModifiers(type.mappedType);
             var readonlyMask = modifiers & 1 /* IncludeReadonly */ ? false : true;
             var optionalMask = modifiers & 4 /* IncludeOptional */ ? 0 : 16777216 /* Optional */;
-            var stringIndexInfo = indexInfo && createIndexInfo(inferReverseMappedType(indexInfo.type, type.mappedType, type.constraintType), readonlyMask && indexInfo.isReadonly);
+            var indexInfos = indexInfo ? [createIndexInfo(stringType, inferReverseMappedType(indexInfo.type, type.mappedType, type.constraintType), readonlyMask && indexInfo.isReadonly)] : ts.emptyArray;
             var members = ts.createSymbolTable();
             for (var _i = 0, _a = getPropertiesOfType(type.source); _i < _a.length; _i++) {
                 var prop = _a[_i];
@@ -54747,7 +55872,7 @@
                 }
                 members.set(prop.escapedName, inferredProp);
             }
-            setStructuredTypeMembers(type, members, ts.emptyArray, ts.emptyArray, stringIndexInfo, undefined);
+            setStructuredTypeMembers(type, members, ts.emptyArray, ts.emptyArray, indexInfos);
         }
         // Return the lower bound of the key type in a mapped type. Intuitively, the lower
         // bound includes those keys that are known to always be present, for example because
@@ -54781,10 +55906,9 @@
         /** Resolve the members of a mapped type { [P in K]: T } */
         function resolveMappedTypeMembers(type) {
             var members = ts.createSymbolTable();
-            var stringIndexInfo;
-            var numberIndexInfo;
+            var indexInfos;
             // Resolve upfront such that recursive references see an empty object type.
-            setStructuredTypeMembers(type, emptySymbols, ts.emptyArray, ts.emptyArray, undefined, undefined);
+            setStructuredTypeMembers(type, emptySymbols, ts.emptyArray, ts.emptyArray, ts.emptyArray);
             // In { [P in K]: T }, we refer to P as the type parameter type, K as the constraint type,
             // and T as the template type.
             var typeParameter = getTypeParameterFromMappedType(type);
@@ -54800,17 +55924,22 @@
                     var prop = _a[_i];
                     addMemberForKeyType(getLiteralTypeFromProperty(prop, include));
                 }
-                if (modifiersType.flags & 1 /* Any */ || getIndexInfoOfType(modifiersType, 0 /* String */)) {
+                if (modifiersType.flags & 1 /* Any */) {
                     addMemberForKeyType(stringType);
                 }
-                if (!keyofStringsOnly && getIndexInfoOfType(modifiersType, 1 /* Number */)) {
-                    addMemberForKeyType(numberType);
+                else {
+                    for (var _b = 0, _c = getIndexInfosOfType(modifiersType); _b < _c.length; _b++) {
+                        var info = _c[_b];
+                        if (!keyofStringsOnly || info.keyType.flags & (4 /* String */ | 134217728 /* TemplateLiteral */)) {
+                            addMemberForKeyType(info.keyType);
+                        }
+                    }
                 }
             }
             else {
                 forEachType(getLowerBoundOfKeyType(constraintType), addMemberForKeyType);
             }
-            setStructuredTypeMembers(type, members, ts.emptyArray, ts.emptyArray, stringIndexInfo, numberIndexInfo);
+            setStructuredTypeMembers(type, members, ts.emptyArray, ts.emptyArray, indexInfos || ts.emptyArray);
             function addMemberForKeyType(keyType) {
                 var propNameType = nameType ? instantiateType(nameType, appendTypeMapping(type.mapper, typeParameter, keyType)) : keyType;
                 forEachType(propNameType, function (t) { return addMemberForKeyTypeWorker(keyType, t); });
@@ -54842,19 +55971,20 @@
                         prop.keyType = keyType;
                         if (modifiersProp) {
                             prop.syntheticOrigin = modifiersProp;
-                            prop.declarations = modifiersProp.declarations;
+                            // If the mapped type has an `as XXX` clause, the property name likely won't match the declaration name and
+                            // multiple properties may map to the same name. Thus, we attach no declarations to the symbol.
+                            prop.declarations = nameType ? undefined : modifiersProp.declarations;
                         }
                         members.set(propName, prop);
                     }
                 }
-                else if (propNameType.flags & (1 /* Any */ | 4 /* String */ | 8 /* Number */ | 32 /* Enum */)) {
+                else if (isValidIndexKeyType(propNameType) || propNameType.flags & (1 /* Any */ | 32 /* Enum */)) {
+                    var indexKeyType = propNameType.flags & (1 /* Any */ | 4 /* String */) ? stringType :
+                        propNameType.flags & (8 /* Number */ | 32 /* Enum */) ? numberType :
+                            propNameType;
                     var propType = instantiateType(templateType, appendTypeMapping(type.mapper, typeParameter, keyType));
-                    if (propNameType.flags & (1 /* Any */ | 4 /* String */)) {
-                        stringIndexInfo = createIndexInfo(stringIndexInfo ? getUnionType([stringIndexInfo.type, propType]) : propType, !!(templateModifiers & 1 /* IncludeReadonly */));
-                    }
-                    else {
-                        numberIndexInfo = createIndexInfo(numberIndexInfo ? getUnionType([numberIndexInfo.type, propType]) : propType, !!(templateModifiers & 1 /* IncludeReadonly */));
-                    }
+                    var indexInfo = createIndexInfo(indexKeyType, propType, !!(templateModifiers & 1 /* IncludeReadonly */));
+                    indexInfos = appendIndexInfo(indexInfos, indexInfo, /*union*/ true);
                 }
             }
         }
@@ -54871,8 +56001,8 @@
                 // When creating an optional property in strictNullChecks mode, if 'undefined' isn't assignable to the
                 // type, we include 'undefined' in the type. Similarly, when creating a non-optional property in strictNullChecks
                 // mode, if the underlying property is optional we remove 'undefined' from the type.
-                var type = strictNullChecks && symbol.flags & 16777216 /* Optional */ && !maybeTypeOfKind(propType, 32768 /* Undefined */ | 16384 /* Void */) ? getOptionalType(propType) :
-                    symbol.checkFlags & 524288 /* StripOptional */ ? getTypeWithFacts(propType, 524288 /* NEUndefined */) :
+                var type = strictNullChecks && symbol.flags & 16777216 /* Optional */ && !maybeTypeOfKind(propType, 32768 /* Undefined */ | 16384 /* Void */) ? getOptionalType(propType, /*isProperty*/ true) :
+                    symbol.checkFlags & 524288 /* StripOptional */ ? removeMissingOrUndefinedType(propType) :
                         propType;
                 if (!popTypeResolution()) {
                     error(currentNode, ts.Diagnostics.Type_of_property_0_circularly_references_itself_in_mapped_type_1, symbolToString(symbol), typeToString(mappedType));
@@ -54898,7 +56028,7 @@
         function getTemplateTypeFromMappedType(type) {
             return type.templateType ||
                 (type.templateType = type.declaration.type ?
-                    instantiateType(addOptionality(getTypeFromTypeNode(type.declaration.type), !!(getMappedTypeModifiers(type) & 4 /* IncludeOptional */)), type.mapper) :
+                    instantiateType(addOptionality(getTypeFromTypeNode(type.declaration.type), /*isProperty*/ true, !!(getMappedTypeModifiers(type) & 4 /* IncludeOptional */)), type.mapper) :
                     errorType);
         }
         function getConstraintDeclarationForMappedType(type) {
@@ -54906,8 +56036,8 @@
         }
         function isMappedTypeWithKeyofConstraintDeclaration(type) {
             var constraintDeclaration = getConstraintDeclarationForMappedType(type); // TODO: GH#18217
-            return constraintDeclaration.kind === 189 /* TypeOperator */ &&
-                constraintDeclaration.operator === 138 /* KeyOfKeyword */;
+            return constraintDeclaration.kind === 191 /* TypeOperator */ &&
+                constraintDeclaration.operator === 139 /* KeyOfKeyword */;
         }
         function getModifiersTypeFromMappedType(type) {
             if (!type.modifiersType) {
@@ -55012,7 +56142,7 @@
                     }
                     // The properties of a union type are those that are present in all constituent types, so
                     // we only need to check the properties of the first type without index signature
-                    if (type.flags & 1048576 /* Union */ && !getIndexInfoOfType(current, 0 /* String */) && !getIndexInfoOfType(current, 1 /* Number */)) {
+                    if (type.flags & 1048576 /* Union */ && getIndexInfosOfType(current).length === 0) {
                         break;
                     }
                 }
@@ -55041,8 +56171,8 @@
                 return getAugmentedPropertiesOfType(unionType);
             }
             var props = ts.createSymbolTable();
-            for (var _i = 0, types_5 = types; _i < types_5.length; _i++) {
-                var memberType = types_5[_i];
+            for (var _i = 0, types_4 = types; _i < types_4.length; _i++) {
+                var memberType = types_4[_i];
                 for (var _a = 0, _b = getAugmentedPropertiesOfType(memberType); _a < _b.length; _a++) {
                     var escapedName = _b[_a].escapedName;
                     if (!props.has(escapedName)) {
@@ -55074,14 +56204,14 @@
         function getConstraintFromIndexedAccess(type) {
             var indexConstraint = getSimplifiedTypeOrConstraint(type.indexType);
             if (indexConstraint && indexConstraint !== type.indexType) {
-                var indexedAccess = getIndexedAccessTypeOrUndefined(type.objectType, indexConstraint, type.noUncheckedIndexedAccessCandidate);
+                var indexedAccess = getIndexedAccessTypeOrUndefined(type.objectType, indexConstraint, type.accessFlags);
                 if (indexedAccess) {
                     return indexedAccess;
                 }
             }
             var objectConstraint = getSimplifiedTypeOrConstraint(type.objectType);
             if (objectConstraint && objectConstraint !== type.objectType) {
-                return getIndexedAccessTypeOrUndefined(objectConstraint, type.indexType, type.noUncheckedIndexedAccessCandidate);
+                return getIndexedAccessTypeOrUndefined(objectConstraint, type.indexType, type.accessFlags);
             }
             return undefined;
         }
@@ -55130,8 +56260,8 @@
         function getEffectiveConstraintOfIntersection(types, targetIsUnion) {
             var constraints;
             var hasDisjointDomainType = false;
-            for (var _i = 0, types_6 = types; _i < types_6.length; _i++) {
-                var t = types_6[_i];
+            for (var _i = 0, types_5 = types; _i < types_5.length; _i++) {
+                var t = types_5[_i];
                 if (t.flags & 465829888 /* Instantiable */) {
                     // We keep following constraints as long as we have an instantiable type that is known
                     // not to be circular or infinite (hence we stop on index access types).
@@ -55156,8 +56286,8 @@
                 if (hasDisjointDomainType) {
                     // We add any types belong to one of the disjoint domains because they might cause the final
                     // intersection operation to reduce the union constraints.
-                    for (var _a = 0, types_7 = types; _a < types_7.length; _a++) {
-                        var t = types_7[_a];
+                    for (var _a = 0, types_6 = types; _a < types_6.length; _a++) {
+                        var t = types_6[_a];
                         if (t.flags & 469892092 /* DisjointDomains */) {
                             constraints = ts.append(constraints, t);
                         }
@@ -55243,8 +56373,8 @@
                     var types = t.types;
                     var baseTypes = [];
                     var different = false;
-                    for (var _i = 0, types_8 = types; _i < types_8.length; _i++) {
-                        var type_3 = types_8[_i];
+                    for (var _i = 0, types_7 = types; _i < types_7.length; _i++) {
+                        var type_3 = types_7[_i];
                         var baseType = getBaseConstraint(type_3);
                         if (baseType) {
                             if (baseType !== type_3) {
@@ -55278,7 +56408,7 @@
                 if (t.flags & 8388608 /* IndexedAccess */) {
                     var baseObjectType = getBaseConstraint(t.objectType);
                     var baseIndexType = getBaseConstraint(t.indexType);
-                    var baseIndexedAccess = baseObjectType && baseIndexType && getIndexedAccessTypeOrUndefined(baseObjectType, baseIndexType, t.noUncheckedIndexedAccessCandidate);
+                    var baseIndexedAccess = baseObjectType && baseIndexType && getIndexedAccessTypeOrUndefined(baseObjectType, baseIndexType, t.accessFlags);
                     return baseIndexedAccess && getBaseConstraint(baseIndexedAccess);
                 }
                 if (t.flags & 16777216 /* Conditional */) {
@@ -55435,7 +56565,7 @@
                         }
                     }
                     else if (isUnion) {
-                        var indexInfo = !isLateBoundName(name) && (isNumericLiteralName(name) && getIndexInfoOfType(type, 1 /* Number */) || getIndexInfoOfType(type, 0 /* String */));
+                        var indexInfo = !isLateBoundName(name) && getApplicableIndexInfoForName(type, name);
                         if (indexInfo) {
                             checkFlags |= 32 /* WritePartial */ | (indexInfo.isReadonly ? 8 /* Readonly */ : 0);
                             indexTypes = ts.append(indexTypes, isTupleType(type) ? getRestTypeOfTupleType(type) || undefinedType : indexInfo.type);
@@ -55555,15 +56685,15 @@
          * no constituent property has type 'never', but the intersection of the constituent property types is 'never'.
          */
         function getReducedType(type) {
-            if (type.flags & 1048576 /* Union */ && type.objectFlags & 67108864 /* ContainsIntersections */) {
+            if (type.flags & 1048576 /* Union */ && type.objectFlags & 33554432 /* ContainsIntersections */) {
                 return type.resolvedReducedType || (type.resolvedReducedType = getReducedUnionType(type));
             }
             else if (type.flags & 2097152 /* Intersection */) {
-                if (!(type.objectFlags & 67108864 /* IsNeverIntersectionComputed */)) {
-                    type.objectFlags |= 67108864 /* IsNeverIntersectionComputed */ |
-                        (ts.some(getPropertiesOfUnionOrIntersectionType(type), isNeverReducedProperty) ? 134217728 /* IsNeverIntersection */ : 0);
+                if (!(type.objectFlags & 33554432 /* IsNeverIntersectionComputed */)) {
+                    type.objectFlags |= 33554432 /* IsNeverIntersectionComputed */ |
+                        (ts.some(getPropertiesOfUnionOrIntersectionType(type), isNeverReducedProperty) ? 67108864 /* IsNeverIntersection */ : 0);
                 }
-                return type.objectFlags & 134217728 /* IsNeverIntersection */ ? neverType : type;
+                return type.objectFlags & 67108864 /* IsNeverIntersection */ ? neverType : type;
             }
             return type;
         }
@@ -55593,7 +56723,7 @@
             return !prop.valueDeclaration && !!(ts.getCheckFlags(prop) & 1024 /* ContainsPrivate */);
         }
         function elaborateNeverIntersection(errorInfo, type) {
-            if (type.flags & 2097152 /* Intersection */ && ts.getObjectFlags(type) & 134217728 /* IsNeverIntersection */) {
+            if (type.flags & 2097152 /* Intersection */ && ts.getObjectFlags(type) & 67108864 /* IsNeverIntersection */) {
                 var neverProp = ts.find(getPropertiesOfUnionOrIntersectionType(type), isDiscriminantWithNeverType);
                 if (neverProp) {
                     return ts.chainDiagnosticMessages(errorInfo, ts.Diagnostics.The_intersection_0_was_reduced_to_never_because_property_1_has_conflicting_types_in_some_constituents, typeToString(type, /*enclosingDeclaration*/ undefined, 536870912 /* NoTypeReduction */), symbolToString(neverProp));
@@ -55654,44 +56784,72 @@
         function getSignaturesOfType(type, kind) {
             return getSignaturesOfStructuredType(getReducedApparentType(type), kind);
         }
-        function getIndexInfoOfStructuredType(type, kind) {
+        function findIndexInfo(indexInfos, keyType) {
+            return ts.find(indexInfos, function (info) { return info.keyType === keyType; });
+        }
+        function findApplicableIndexInfo(indexInfos, keyType) {
+            // Index signatures for type 'string' are considered only when no other index signatures apply.
+            var stringIndexInfo;
+            var applicableInfo;
+            var applicableInfos;
+            for (var _i = 0, indexInfos_1 = indexInfos; _i < indexInfos_1.length; _i++) {
+                var info = indexInfos_1[_i];
+                if (info.keyType === stringType) {
+                    stringIndexInfo = info;
+                }
+                else if (isApplicableIndexType(keyType, info.keyType)) {
+                    if (!applicableInfo) {
+                        applicableInfo = info;
+                    }
+                    else {
+                        (applicableInfos || (applicableInfos = [applicableInfo])).push(info);
+                    }
+                }
+            }
+            // When more than one index signature is applicable we create a synthetic IndexInfo. Instead of computing
+            // the intersected key type, we just use unknownType for the key type as nothing actually depends on the
+            // keyType property of the returned IndexInfo.
+            return applicableInfos ? createIndexInfo(unknownType, getIntersectionType(ts.map(applicableInfos, function (info) { return info.type; })), ts.reduceLeft(applicableInfos, function (isReadonly, info) { return isReadonly && info.isReadonly; }, /*initial*/ true)) :
+                applicableInfo ? applicableInfo :
+                    stringIndexInfo && isApplicableIndexType(keyType, stringType) ? stringIndexInfo :
+                        undefined;
+        }
+        function isApplicableIndexType(source, target) {
+            // A 'string' index signature applies to types assignable to 'string' or 'number', and a 'number' index
+            // signature applies to types assignable to 'number' and numeric string literal types.
+            return isTypeAssignableTo(source, target) ||
+                target === stringType && isTypeAssignableTo(source, numberType) ||
+                target === numberType && !!(source.flags & 128 /* StringLiteral */) && isNumericLiteralName(source.value);
+        }
+        function getIndexInfosOfStructuredType(type) {
             if (type.flags & 3670016 /* StructuredType */) {
                 var resolved = resolveStructuredTypeMembers(type);
-                return kind === 0 /* String */ ? resolved.stringIndexInfo : resolved.numberIndexInfo;
+                return resolved.indexInfos;
             }
+            return ts.emptyArray;
         }
-        function getIndexTypeOfStructuredType(type, kind) {
-            var info = getIndexInfoOfStructuredType(type, kind);
-            return info && info.type;
+        function getIndexInfosOfType(type) {
+            return getIndexInfosOfStructuredType(getReducedApparentType(type));
         }
         // Return the indexing info of the given kind in the given type. Creates synthetic union index types when necessary and
         // maps primitive types and type parameters are to their apparent types.
-        function getIndexInfoOfType(type, kind) {
-            return getIndexInfoOfStructuredType(getReducedApparentType(type), kind);
+        function getIndexInfoOfType(type, keyType) {
+            return findIndexInfo(getIndexInfosOfType(type), keyType);
         }
         // Return the index type of the given kind in the given type. Creates synthetic union index types when necessary and
         // maps primitive types and type parameters are to their apparent types.
-        function getIndexTypeOfType(type, kind) {
-            return getIndexTypeOfStructuredType(getReducedApparentType(type), kind);
+        function getIndexTypeOfType(type, keyType) {
+            var _a;
+            return (_a = getIndexInfoOfType(type, keyType)) === null || _a === void 0 ? void 0 : _a.type;
         }
-        function getImplicitIndexTypeOfType(type, kind) {
-            if (isObjectTypeWithInferableIndex(type)) {
-                var propTypes = [];
-                for (var _i = 0, _a = getPropertiesOfType(type); _i < _a.length; _i++) {
-                    var prop = _a[_i];
-                    if (kind === 0 /* String */ || isNumericLiteralName(prop.escapedName)) {
-                        var propType = getTypeOfSymbol(prop);
-                        propTypes.push(prop.flags & 16777216 /* Optional */ ? getTypeWithFacts(propType, 524288 /* NEUndefined */) : propType);
-                    }
-                }
-                if (kind === 0 /* String */) {
-                    ts.append(propTypes, getIndexTypeOfType(type, 1 /* Number */));
-                }
-                if (propTypes.length) {
-                    return getUnionType(propTypes);
-                }
-            }
-            return undefined;
+        function getApplicableIndexInfos(type, keyType) {
+            return getIndexInfosOfType(type).filter(function (info) { return isApplicableIndexType(keyType, info.keyType); });
+        }
+        function getApplicableIndexInfo(type, keyType) {
+            return findApplicableIndexInfo(getIndexInfosOfType(type), keyType);
+        }
+        function getApplicableIndexInfoForName(type, name) {
+            return getApplicableIndexInfo(type, isLateBoundName(name) ? esSymbolType : getStringLiteralType(ts.unescapeLeadingUnderscores(name)));
         }
         // Return list of type parameters with duplicates removed (duplicate identifier errors are generated in the actual
         // type checking functions).
@@ -55715,10 +56873,10 @@
         function isJSDocOptionalParameter(node) {
             return ts.isInJSFile(node) && (
             // node.type should only be a JSDocOptionalType when node is a parameter of a JSDocFunctionType
-            node.type && node.type.kind === 308 /* JSDocOptionalType */
+            node.type && node.type.kind === 311 /* JSDocOptionalType */
                 || ts.getJSDocParameterTags(node).some(function (_a) {
                     var isBracketed = _a.isBracketed, typeExpression = _a.typeExpression;
-                    return isBracketed || !!typeExpression && typeExpression.type.kind === 308 /* JSDocOptionalType */;
+                    return isBracketed || !!typeExpression && typeExpression.type.kind === 311 /* JSDocOptionalType */;
                 }));
         }
         function tryFindAmbientModule(moduleName, withAugmentations) {
@@ -55758,7 +56916,7 @@
                 return false;
             }
             var isBracketed = node.isBracketed, typeExpression = node.typeExpression;
-            return isBracketed || !!typeExpression && typeExpression.type.kind === 308 /* JSDocOptionalType */;
+            return isBracketed || !!typeExpression && typeExpression.type.kind === 311 /* JSDocOptionalType */;
         }
         function createTypePredicate(kind, parameterName, parameterIndex, type) {
             return { kind: kind, parameterName: parameterName, parameterIndex: parameterIndex, type: type };
@@ -55840,12 +56998,12 @@
                     else {
                         parameters.push(paramSymbol);
                     }
-                    if (type && type.kind === 192 /* LiteralType */) {
+                    if (type && type.kind === 194 /* LiteralType */) {
                         flags |= 2 /* HasLiteralTypes */;
                     }
                     // Record a new minimum argument count if this is not an optional parameter
                     var isOptionalParameter_1 = isOptionalJSDocPropertyLikeTag(param) ||
-                        param.initializer || param.questionToken || param.dotDotDotToken ||
+                        param.initializer || param.questionToken || ts.isRestParameter(param) ||
                         iife && parameters.length > iife.arguments.length && !type ||
                         isJSDocOptionalParameter(param);
                     if (!isOptionalParameter_1) {
@@ -55853,16 +57011,16 @@
                     }
                 }
                 // If only one accessor includes a this-type annotation, the other behaves as if it had the same type annotation
-                if ((declaration.kind === 168 /* GetAccessor */ || declaration.kind === 169 /* SetAccessor */) &&
+                if ((declaration.kind === 170 /* GetAccessor */ || declaration.kind === 171 /* SetAccessor */) &&
                     hasBindableName(declaration) &&
                     (!hasThisParameter || !thisParameter)) {
-                    var otherKind = declaration.kind === 168 /* GetAccessor */ ? 169 /* SetAccessor */ : 168 /* GetAccessor */;
+                    var otherKind = declaration.kind === 170 /* GetAccessor */ ? 171 /* SetAccessor */ : 170 /* GetAccessor */;
                     var other = ts.getDeclarationOfKind(getSymbolOfNode(declaration), otherKind);
                     if (other) {
                         thisParameter = getAnnotatedAccessorThisParameter(other);
                     }
                 }
-                var classType = declaration.kind === 167 /* Constructor */ ?
+                var classType = declaration.kind === 169 /* Constructor */ ?
                     getDeclaredTypeOfClassOrInterface(getMergedSymbol(declaration.parent.symbol))
                     : undefined;
                 var typeParameters = classType ? classType.localTypeParameters : getTypeParametersFromDeclaration(declaration);
@@ -55928,16 +57086,16 @@
                 if (!node)
                     return false;
                 switch (node.kind) {
-                    case 78 /* Identifier */:
+                    case 79 /* Identifier */:
                         return node.escapedText === argumentsSymbol.escapedName && getResolvedSymbol(node) === argumentsSymbol;
-                    case 164 /* PropertyDeclaration */:
-                    case 166 /* MethodDeclaration */:
-                    case 168 /* GetAccessor */:
-                    case 169 /* SetAccessor */:
-                        return node.name.kind === 159 /* ComputedPropertyName */
+                    case 165 /* PropertyDeclaration */:
+                    case 167 /* MethodDeclaration */:
+                    case 170 /* GetAccessor */:
+                    case 171 /* SetAccessor */:
+                        return node.name.kind === 160 /* ComputedPropertyName */
                             && traverse(node.name);
-                    case 202 /* PropertyAccessExpression */:
-                    case 203 /* ElementAccessExpression */:
+                    case 204 /* PropertyAccessExpression */:
+                    case 205 /* ElementAccessExpression */:
                         return traverse(node.expression);
                     default:
                         return !ts.nodeStartsNewLexicalEnvironment(node) && !ts.isPartOfTypeNode(node) && !!ts.forEachChild(node, traverse);
@@ -56009,7 +57167,7 @@
         function createTypePredicateFromTypePredicateNode(node, signature) {
             var parameterName = node.parameterName;
             var type = node.type && getTypeFromTypeNode(node.type);
-            return parameterName.kind === 188 /* ThisType */ ?
+            return parameterName.kind === 190 /* ThisType */ ?
                 createTypePredicate(node.assertsModifier ? 2 /* AssertsThis */ : 0 /* This */, /*parameterName*/ undefined, /*parameterIndex*/ undefined, type) :
                 createTypePredicate(node.assertsModifier ? 3 /* AssertsIdentifier */ : 1 /* Identifier */, parameterName.escapedText, ts.findIndex(signature.parameters, function (p) { return p.escapedName === parameterName.escapedText; }), type);
         }
@@ -56055,7 +57213,7 @@
             return signature.resolvedReturnType;
         }
         function getReturnTypeFromAnnotation(declaration) {
-            if (declaration.kind === 167 /* Constructor */) {
+            if (declaration.kind === 169 /* Constructor */) {
                 return getDeclaredTypeOfClassOrInterface(getMergedSymbol(declaration.parent.symbol));
             }
             if (ts.isJSDocConstructSignature(declaration)) {
@@ -56065,12 +57223,12 @@
             if (typeNode) {
                 return getTypeFromTypeNode(typeNode);
             }
-            if (declaration.kind === 168 /* GetAccessor */ && hasBindableName(declaration)) {
+            if (declaration.kind === 170 /* GetAccessor */ && hasBindableName(declaration)) {
                 var jsDocType = ts.isInJSFile(declaration) && getTypeForDeclarationFromJSDocComment(declaration);
                 if (jsDocType) {
                     return jsDocType;
                 }
-                var setter = ts.getDeclarationOfKind(getSymbolOfNode(declaration), 169 /* SetAccessor */);
+                var setter = ts.getDeclarationOfKind(getSymbolOfNode(declaration), 171 /* SetAccessor */);
                 var setterType = getAnnotatedAccessorType(setter);
                 if (setterType) {
                     return setterType;
@@ -56088,7 +57246,7 @@
             if (signatureHasRestParameter(signature)) {
                 var sigRestType = getTypeOfSymbol(signature.parameters[signature.parameters.length - 1]);
                 var restType = isTupleType(sigRestType) ? getRestTypeOfTupleType(sigRestType) : sigRestType;
-                return restType && getIndexTypeOfType(restType, 1 /* Number */);
+                return restType && getIndexTypeOfType(restType, numberType);
             }
             return undefined;
         }
@@ -56171,12 +57329,13 @@
             // will result in a different declaration kind.
             if (!signature.isolatedSignatureType) {
                 var kind = signature.declaration ? signature.declaration.kind : 0 /* Unknown */;
-                var isConstructor = kind === 167 /* Constructor */ || kind === 171 /* ConstructSignature */ || kind === 176 /* ConstructorType */;
+                var isConstructor = kind === 169 /* Constructor */ || kind === 173 /* ConstructSignature */ || kind === 178 /* ConstructorType */;
                 var type = createObjectType(16 /* Anonymous */);
                 type.members = emptySymbols;
                 type.properties = ts.emptyArray;
                 type.callSignatures = !isConstructor ? [signature] : ts.emptyArray;
                 type.constructSignatures = isConstructor ? [signature] : ts.emptyArray;
+                type.indexInfos = ts.emptyArray;
                 signature.isolatedSignatureType = type;
             }
             return signature.isolatedSignatureType;
@@ -56187,39 +57346,39 @@
         function getIndexSymbolFromSymbolTable(symbolTable) {
             return symbolTable.get("__index" /* Index */);
         }
-        function getIndexDeclarationOfSymbol(symbol, kind) {
-            var indexSymbol = symbol && getIndexSymbol(symbol);
-            return indexSymbol && getIndexDeclarationOfIndexSymbol(indexSymbol, kind);
+        function createIndexInfo(keyType, type, isReadonly, declaration) {
+            return { keyType: keyType, type: type, isReadonly: isReadonly, declaration: declaration };
         }
-        function getIndexDeclarationOfSymbolTable(symbolTable, kind) {
-            var indexSymbol = symbolTable && getIndexSymbolFromSymbolTable(symbolTable);
-            return indexSymbol && getIndexDeclarationOfIndexSymbol(indexSymbol, kind);
+        function getIndexInfosOfSymbol(symbol) {
+            var indexSymbol = getIndexSymbol(symbol);
+            return indexSymbol ? getIndexInfosOfIndexSymbol(indexSymbol) : ts.emptyArray;
         }
-        function getIndexDeclarationOfIndexSymbol(indexSymbol, kind) {
-            var syntaxKind = kind === 1 /* Number */ ? 144 /* NumberKeyword */ : 147 /* StringKeyword */;
-            if (indexSymbol === null || indexSymbol === void 0 ? void 0 : indexSymbol.declarations) {
-                for (var _i = 0, _a = indexSymbol.declarations; _i < _a.length; _i++) {
-                    var decl = _a[_i];
-                    var node = ts.cast(decl, ts.isIndexSignatureDeclaration);
-                    if (node.parameters.length === 1) {
-                        var parameter = node.parameters[0];
-                        if (parameter.type && parameter.type.kind === syntaxKind) {
-                            return node;
+        function getIndexInfosOfIndexSymbol(indexSymbol) {
+            if (indexSymbol.declarations) {
+                var indexInfos_2 = [];
+                var _loop_14 = function (declaration) {
+                    if (declaration.parameters.length === 1) {
+                        var parameter = declaration.parameters[0];
+                        if (parameter.type) {
+                            forEachType(getTypeFromTypeNode(parameter.type), function (keyType) {
+                                if (isValidIndexKeyType(keyType) && !findIndexInfo(indexInfos_2, keyType)) {
+                                    indexInfos_2.push(createIndexInfo(keyType, declaration.type ? getTypeFromTypeNode(declaration.type) : anyType, ts.hasEffectiveModifier(declaration, 64 /* Readonly */), declaration));
+                                }
+                            });
                         }
                     }
+                };
+                for (var _i = 0, _a = indexSymbol.declarations; _i < _a.length; _i++) {
+                    var declaration = _a[_i];
+                    _loop_14(declaration);
                 }
+                return indexInfos_2;
             }
-            return undefined;
+            return ts.emptyArray;
         }
-        function createIndexInfo(type, isReadonly, declaration) {
-            return { type: type, isReadonly: isReadonly, declaration: declaration };
-        }
-        function getIndexInfoOfSymbol(symbol, kind) {
-            var declaration = getIndexDeclarationOfSymbol(symbol, kind);
-            if (declaration) {
-                return createIndexInfo(declaration.type ? getTypeFromTypeNode(declaration.type) : anyType, ts.hasEffectiveModifier(declaration, 64 /* Readonly */), declaration);
-            }
-            return undefined;
+        function isValidIndexKeyType(type) {
+            return !!(type.flags & (4 /* String */ | 8 /* Number */ | 4096 /* ESSymbol */)) || isPatternLiteralType(type) ||
+                !!(type.flags & 2097152 /* Intersection */) && !isGenericIndexType(type) && !isGenericObjectType(type) && ts.some(type.types, isValidIndexKeyType);
         }
         function getConstraintDeclaration(type) {
             return ts.mapDefined(ts.filter(type.symbol && type.symbol.declarations, ts.isTypeParameterDeclaration), ts.getEffectiveConstraintOfTypeParameter)[0];
@@ -56230,13 +57389,13 @@
             if ((_a = typeParameter.symbol) === null || _a === void 0 ? void 0 : _a.declarations) {
                 for (var _i = 0, _b = typeParameter.symbol.declarations; _i < _b.length; _i++) {
                     var declaration = _b[_i];
-                    if (declaration.parent.kind === 186 /* InferType */) {
+                    if (declaration.parent.kind === 188 /* InferType */) {
                         // When an 'infer T' declaration is immediately contained in a type reference node
                         // (such as 'Foo<infer T>'), T's constraint is inferred from the constraint of the
                         // corresponding type parameter in 'Foo'. When multiple 'infer T' declarations are
                         // present, we form an intersection of the inferred constraint types.
                         var _c = ts.walkUpParenthesizedTypesAndGetParentAndChild(declaration.parent.parent), _d = _c[0], childTypeParameter = _d === void 0 ? declaration.parent : _d, grandParent = _c[1];
-                        if (grandParent.kind === 174 /* TypeReference */) {
+                        if (grandParent.kind === 176 /* TypeReference */) {
                             var typeReference = grandParent;
                             var typeParameters = getTypeParametersForTypeReference(typeReference);
                             if (typeParameters) {
@@ -56261,27 +57420,27 @@
                         }
                         // When an 'infer T' declaration is immediately contained in a rest parameter declaration, a rest type
                         // or a named rest tuple element, we infer an 'unknown[]' constraint.
-                        else if (grandParent.kind === 161 /* Parameter */ && grandParent.dotDotDotToken ||
-                            grandParent.kind === 182 /* RestType */ ||
-                            grandParent.kind === 193 /* NamedTupleMember */ && grandParent.dotDotDotToken) {
+                        else if (grandParent.kind === 162 /* Parameter */ && grandParent.dotDotDotToken ||
+                            grandParent.kind === 184 /* RestType */ ||
+                            grandParent.kind === 195 /* NamedTupleMember */ && grandParent.dotDotDotToken) {
                             inferences = ts.append(inferences, createArrayType(unknownType));
                         }
                         // When an 'infer T' declaration is immediately contained in a string template type, we infer a 'string'
                         // constraint.
-                        else if (grandParent.kind === 195 /* TemplateLiteralTypeSpan */) {
+                        else if (grandParent.kind === 197 /* TemplateLiteralTypeSpan */) {
                             inferences = ts.append(inferences, stringType);
                         }
                         // When an 'infer T' declaration is in the constraint position of a mapped type, we infer a 'keyof any'
                         // constraint.
-                        else if (grandParent.kind === 160 /* TypeParameter */ && grandParent.parent.kind === 191 /* MappedType */) {
+                        else if (grandParent.kind === 161 /* TypeParameter */ && grandParent.parent.kind === 193 /* MappedType */) {
                             inferences = ts.append(inferences, keyofConstraintType);
                         }
                         // When an 'infer T' declaration is the template of a mapped type, and that mapped type is the extends
                         // clause of a conditional whose check type is also a mapped type, give it a constraint equal to the template
                         // of the check type's mapped type
-                        else if (grandParent.kind === 191 /* MappedType */ && grandParent.type &&
-                            ts.skipParentheses(grandParent.type) === declaration.parent && grandParent.parent.kind === 185 /* ConditionalType */ &&
-                            grandParent.parent.extendsType === grandParent && grandParent.parent.checkType.kind === 191 /* MappedType */ &&
+                        else if (grandParent.kind === 193 /* MappedType */ && grandParent.type &&
+                            ts.skipParentheses(grandParent.type) === declaration.parent && grandParent.parent.kind === 187 /* ConditionalType */ &&
+                            grandParent.parent.extendsType === grandParent && grandParent.parent.checkType.kind === 193 /* MappedType */ &&
                             grandParent.parent.checkType.type) {
                             var checkMappedType_1 = grandParent.parent.checkType;
                             var nodeType = getTypeFromTypeNode(checkMappedType_1.type);
@@ -56309,7 +57468,7 @@
                         if (type.flags & 1 /* Any */ && type !== errorType) { // Allow errorType to propegate to keep downstream errors suppressed
                             // use keyofConstraintType as the base constraint for mapped type key constraints (unknown isn;t assignable to that, but `any` was),
                             // use unknown otherwise
-                            type = constraintDeclaration.parent.parent.kind === 191 /* MappedType */ ? keyofConstraintType : unknownType;
+                            type = constraintDeclaration.parent.parent.kind === 193 /* MappedType */ ? keyofConstraintType : unknownType;
                         }
                         typeParameter.constraint = type;
                     }
@@ -56318,7 +57477,7 @@
             return typeParameter.constraint === noConstraintType ? undefined : typeParameter.constraint;
         }
         function getParentSymbolOfTypeParameter(typeParameter) {
-            var tp = ts.getDeclarationOfKind(typeParameter.symbol, 160 /* TypeParameter */);
+            var tp = ts.getDeclarationOfKind(typeParameter.symbol, 161 /* TypeParameter */);
             var host = ts.isJSDocTemplateTag(tp.parent) ? ts.getHostSignatureFromJSDoc(tp.parent) : tp.parent;
             return host && getSymbolOfNode(host);
         }
@@ -56354,8 +57513,8 @@
         // that care about the presence of such types at arbitrary depth in a containing type.
         function getPropagatingFlagsOfTypes(types, excludeKinds) {
             var result = 0;
-            for (var _i = 0, types_9 = types; _i < types_9.length; _i++) {
-                var type = types_9[_i];
+            for (var _i = 0, types_8 = types; _i < types_8.length; _i++) {
+                var type = types_8[_i];
                 if (!(type.flags & excludeKinds)) {
                     result |= ts.getObjectFlags(type);
                 }
@@ -56404,8 +57563,8 @@
                 }
                 var node = type.node;
                 var typeArguments = !node ? ts.emptyArray :
-                    node.kind === 174 /* TypeReference */ ? ts.concatenate(type.target.outerTypeParameters, getEffectiveTypeArguments(node, type.target.localTypeParameters)) :
-                        node.kind === 179 /* ArrayType */ ? [getTypeFromTypeNode(node.elementType)] :
+                    node.kind === 176 /* TypeReference */ ? ts.concatenate(type.target.outerTypeParameters, getEffectiveTypeArguments(node, type.target.localTypeParameters)) :
+                        node.kind === 181 /* ArrayType */ ? [getTypeFromTypeNode(node.elementType)] :
                             ts.map(node.elements, getTypeFromTypeNode);
                 if (popTypeResolution()) {
                     type.resolvedTypeArguments = type.mapper ? instantiateTypes(typeArguments, type.mapper) : typeArguments;
@@ -56447,7 +57606,7 @@
                         return errorType;
                     }
                 }
-                if (node.kind === 174 /* TypeReference */ && isDeferredTypeReferenceNode(node, ts.length(node.typeArguments) !== typeParameters.length)) {
+                if (node.kind === 176 /* TypeReference */ && isDeferredTypeReferenceNode(node, ts.length(node.typeArguments) !== typeParameters.length)) {
                     return createDeferredTypeReference(type, node, /*mapper*/ undefined);
                 }
                 // In a type reference, the outer type parameters of the referenced class or interface are automatically
@@ -56506,9 +57665,9 @@
         }
         function getTypeReferenceName(node) {
             switch (node.kind) {
-                case 174 /* TypeReference */:
+                case 176 /* TypeReference */:
                     return node.typeName;
-                case 224 /* ExpressionWithTypeArguments */:
+                case 226 /* ExpressionWithTypeArguments */:
                     // We only support expressions that are simple qualified names. For other
                     // expressions this produces undefined.
                     var expr = node.expression;
@@ -56564,7 +57723,7 @@
                 var valueType = getTypeOfSymbol(symbol);
                 var typeType = valueType;
                 if (symbol.valueDeclaration) {
-                    var isImportTypeWithQualifier = node.kind === 196 /* ImportType */ && node.qualifier;
+                    var isImportTypeWithQualifier = node.kind === 198 /* ImportType */ && node.qualifier;
                     // valueType might not have a symbol, eg, {import('./b').STRING_LITERAL}
                     if (valueType.symbol && valueType.symbol !== symbol && isImportTypeWithQualifier) {
                         typeType = getTypeReferenceType(node, valueType.symbol);
@@ -56590,7 +57749,7 @@
             return result;
         }
         function isUnaryTupleTypeNode(node) {
-            return node.kind === 180 /* TupleType */ && node.elements.length === 1;
+            return node.kind === 182 /* TupleType */ && node.elements.length === 1;
         }
         function getImpliedConstraint(type, checkNode, extendsNode) {
             return isUnaryTupleTypeNode(checkNode) && isUnaryTupleTypeNode(extendsNode) ? getImpliedConstraint(type, checkNode.elements[0], extendsNode.elements[0]) :
@@ -56600,16 +57759,16 @@
         function getConditionalFlowTypeOfType(type, node) {
             var constraints;
             var covariant = true;
-            while (node && !ts.isStatement(node) && node.kind !== 312 /* JSDocComment */) {
+            while (node && !ts.isStatement(node) && node.kind !== 315 /* JSDocComment */) {
                 var parent = node.parent;
                 // only consider variance flipped by parameter locations - `keyof` types would usually be considered variance inverting, but
                 // often get used in indexed accesses where they behave sortof invariantly, but our checking is lax
-                if (parent.kind === 161 /* Parameter */) {
+                if (parent.kind === 162 /* Parameter */) {
                     covariant = !covariant;
                 }
                 // Always substitute on type parameters, regardless of variance, since even
                 // in contravariant positions, they may rely on substituted constraints to be valid
-                if ((covariant || type.flags & 8650752 /* TypeVariable */) && parent.kind === 185 /* ConditionalType */ && node === parent.trueType) {
+                if ((covariant || type.flags & 8650752 /* TypeVariable */) && parent.kind === 187 /* ConditionalType */ && node === parent.trueType) {
                     var constraint = getImpliedConstraint(type, parent.checkType, parent.extendsType);
                     if (constraint) {
                         constraints = ts.append(constraints, constraint);
@@ -56620,7 +57779,7 @@
             return constraints ? getSubstitutionType(type, getIntersectionType(ts.append(constraints, type))) : type;
         }
         function isJSDocTypeReference(node) {
-            return !!(node.flags & 4194304 /* JSDoc */) && (node.kind === 174 /* TypeReference */ || node.kind === 196 /* ImportType */);
+            return !!(node.flags & 4194304 /* JSDoc */) && (node.kind === 176 /* TypeReference */ || node.kind === 198 /* ImportType */);
         }
         function checkNoTypeArguments(node, symbol) {
             if (node.typeArguments) {
@@ -56664,8 +57823,8 @@
                             if (ts.isJSDocIndexSignature(node)) {
                                 var indexed = getTypeFromTypeNode(typeArgs[0]);
                                 var target = getTypeFromTypeNode(typeArgs[1]);
-                                var index = createIndexInfo(target, /*isReadonly*/ false);
-                                return createAnonymousType(undefined, emptySymbols, ts.emptyArray, ts.emptyArray, indexed === stringType ? index : undefined, indexed === numberType ? index : undefined);
+                                var indexInfo = indexed === stringType || indexed === numberType ? [createIndexInfo(indexed, target, /*isReadonly*/ false)] : ts.emptyArray;
+                                return createAnonymousType(undefined, emptySymbols, ts.emptyArray, ts.emptyArray, indexInfo);
                             }
                             return anyType;
                         }
@@ -56723,7 +57882,8 @@
                 // The expression is processed as an identifier expression (section 4.3)
                 // or property access expression(section 4.10),
                 // the widened type(section 3.9) of which becomes the result.
-                links.resolvedType = getRegularTypeOfLiteralType(getWidenedType(checkExpression(node.exprName)));
+                var type = ts.isThisIdentifier(node.exprName) ? checkThisExpression(node.exprName) : checkExpression(node.exprName);
+                links.resolvedType = getRegularTypeOfLiteralType(getWidenedType(type));
             }
             return links.resolvedType;
         }
@@ -56734,9 +57894,9 @@
                     for (var _i = 0, declarations_3 = declarations; _i < declarations_3.length; _i++) {
                         var declaration = declarations_3[_i];
                         switch (declaration.kind) {
-                            case 253 /* ClassDeclaration */:
-                            case 254 /* InterfaceDeclaration */:
-                            case 256 /* EnumDeclaration */:
+                            case 255 /* ClassDeclaration */:
+                            case 256 /* InterfaceDeclaration */:
+                            case 258 /* EnumDeclaration */:
                                 return declaration;
                         }
                     }
@@ -56779,6 +57939,20 @@
         function getGlobalImportMetaType() {
             return deferredGlobalImportMetaType || (deferredGlobalImportMetaType = getGlobalType("ImportMeta", /*arity*/ 0, /*reportErrors*/ true)) || emptyObjectType;
         }
+        function getGlobalImportMetaExpressionType() {
+            if (!deferredGlobalImportMetaExpressionType) {
+                // Create a synthetic type `ImportMetaExpression { meta: MetaProperty }`
+                var symbol = createSymbol(0 /* None */, "ImportMetaExpression");
+                var importMetaType = getGlobalImportMetaType();
+                var metaPropertySymbol = createSymbol(4 /* Property */, "meta", 8 /* Readonly */);
+                metaPropertySymbol.parent = symbol;
+                metaPropertySymbol.type = importMetaType;
+                var members = ts.createSymbolTable([metaPropertySymbol]);
+                symbol.members = members;
+                deferredGlobalImportMetaExpressionType = createAnonymousType(symbol, members, ts.emptyArray, ts.emptyArray, ts.emptyArray);
+            }
+            return deferredGlobalImportMetaExpressionType;
+        }
         function getGlobalESSymbolConstructorSymbol(reportErrors) {
             return deferredGlobalESSymbolConstructorSymbol || (deferredGlobalESSymbolConstructorSymbol = getGlobalValueSymbol("Symbol", reportErrors));
         }
@@ -56861,11 +58035,11 @@
         }
         function getTupleElementFlags(node) {
             switch (node.kind) {
-                case 181 /* OptionalType */:
+                case 183 /* OptionalType */:
                     return 2 /* Optional */;
-                case 182 /* RestType */:
+                case 184 /* RestType */:
                     return getRestTypeElementFlags(node);
-                case 193 /* NamedTupleMember */:
+                case 195 /* NamedTupleMember */:
                     return node.questionToken ? 2 /* Optional */ :
                         node.dotDotDotToken ? getRestTypeElementFlags(node) :
                             1 /* Required */;
@@ -56883,14 +58057,14 @@
                 return readonly ? globalReadonlyArrayType : globalArrayType;
             }
             var elementFlags = ts.map(node.elements, getTupleElementFlags);
-            var missingName = ts.some(node.elements, function (e) { return e.kind !== 193 /* NamedTupleMember */; });
+            var missingName = ts.some(node.elements, function (e) { return e.kind !== 195 /* NamedTupleMember */; });
             return getTupleTargetType(elementFlags, readonly, /*associatedNames*/ missingName ? undefined : node.elements);
         }
         // Return true if the given type reference node is directly aliased or if it needs to be deferred
         // because it is possibly contained in a circular chain of eagerly resolved types.
         function isDeferredTypeReferenceNode(node, hasDefaultTypeArguments) {
-            return !!getAliasSymbolForTypeNode(node) || isResolvedByTypeAlias(node) && (node.kind === 179 /* ArrayType */ ? mayResolveTypeAlias(node.elementType) :
-                node.kind === 180 /* TupleType */ ? ts.some(node.elements, mayResolveTypeAlias) :
+            return !!getAliasSymbolForTypeNode(node) || isResolvedByTypeAlias(node) && (node.kind === 181 /* ArrayType */ ? mayResolveTypeAlias(node.elementType) :
+                node.kind === 182 /* TupleType */ ? ts.some(node.elements, mayResolveTypeAlias) :
                     hasDefaultTypeArguments || ts.some(node.typeArguments, mayResolveTypeAlias));
         }
         // Return true when the given node is transitively contained in type constructs that eagerly
@@ -56899,18 +58073,18 @@
         function isResolvedByTypeAlias(node) {
             var parent = node.parent;
             switch (parent.kind) {
-                case 187 /* ParenthesizedType */:
-                case 193 /* NamedTupleMember */:
-                case 174 /* TypeReference */:
-                case 183 /* UnionType */:
-                case 184 /* IntersectionType */:
-                case 190 /* IndexedAccessType */:
-                case 185 /* ConditionalType */:
-                case 189 /* TypeOperator */:
-                case 179 /* ArrayType */:
-                case 180 /* TupleType */:
+                case 189 /* ParenthesizedType */:
+                case 195 /* NamedTupleMember */:
+                case 176 /* TypeReference */:
+                case 185 /* UnionType */:
+                case 186 /* IntersectionType */:
+                case 192 /* IndexedAccessType */:
+                case 187 /* ConditionalType */:
+                case 191 /* TypeOperator */:
+                case 181 /* ArrayType */:
+                case 182 /* TupleType */:
                     return isResolvedByTypeAlias(parent);
-                case 255 /* TypeAliasDeclaration */:
+                case 257 /* TypeAliasDeclaration */:
                     return true;
             }
             return false;
@@ -56919,28 +58093,28 @@
         // of a type alias.
         function mayResolveTypeAlias(node) {
             switch (node.kind) {
-                case 174 /* TypeReference */:
+                case 176 /* TypeReference */:
                     return isJSDocTypeReference(node) || !!(resolveTypeReferenceName(node.typeName, 788968 /* Type */).flags & 524288 /* TypeAlias */);
-                case 177 /* TypeQuery */:
+                case 179 /* TypeQuery */:
                     return true;
-                case 189 /* TypeOperator */:
-                    return node.operator !== 151 /* UniqueKeyword */ && mayResolveTypeAlias(node.type);
-                case 187 /* ParenthesizedType */:
-                case 181 /* OptionalType */:
-                case 193 /* NamedTupleMember */:
-                case 308 /* JSDocOptionalType */:
-                case 306 /* JSDocNullableType */:
-                case 307 /* JSDocNonNullableType */:
-                case 302 /* JSDocTypeExpression */:
+                case 191 /* TypeOperator */:
+                    return node.operator !== 152 /* UniqueKeyword */ && mayResolveTypeAlias(node.type);
+                case 189 /* ParenthesizedType */:
+                case 183 /* OptionalType */:
+                case 195 /* NamedTupleMember */:
+                case 311 /* JSDocOptionalType */:
+                case 309 /* JSDocNullableType */:
+                case 310 /* JSDocNonNullableType */:
+                case 304 /* JSDocTypeExpression */:
                     return mayResolveTypeAlias(node.type);
-                case 182 /* RestType */:
-                    return node.type.kind !== 179 /* ArrayType */ || mayResolveTypeAlias(node.type.elementType);
-                case 183 /* UnionType */:
-                case 184 /* IntersectionType */:
+                case 184 /* RestType */:
+                    return node.type.kind !== 181 /* ArrayType */ || mayResolveTypeAlias(node.type.elementType);
+                case 185 /* UnionType */:
+                case 186 /* IntersectionType */:
                     return ts.some(node.types, mayResolveTypeAlias);
-                case 190 /* IndexedAccessType */:
+                case 192 /* IndexedAccessType */:
                     return mayResolveTypeAlias(node.objectType) || mayResolveTypeAlias(node.indexType);
-                case 185 /* ConditionalType */:
+                case 187 /* ConditionalType */:
                     return mayResolveTypeAlias(node.checkType) || mayResolveTypeAlias(node.extendsType) ||
                         mayResolveTypeAlias(node.trueType) || mayResolveTypeAlias(node.falseType);
             }
@@ -56953,19 +58127,19 @@
                 if (target === emptyGenericType) {
                     links.resolvedType = emptyObjectType;
                 }
-                else if (!(node.kind === 180 /* TupleType */ && ts.some(node.elements, function (e) { return !!(getTupleElementFlags(e) & 8 /* Variadic */); })) && isDeferredTypeReferenceNode(node)) {
-                    links.resolvedType = node.kind === 180 /* TupleType */ && node.elements.length === 0 ? target :
+                else if (!(node.kind === 182 /* TupleType */ && ts.some(node.elements, function (e) { return !!(getTupleElementFlags(e) & 8 /* Variadic */); })) && isDeferredTypeReferenceNode(node)) {
+                    links.resolvedType = node.kind === 182 /* TupleType */ && node.elements.length === 0 ? target :
                         createDeferredTypeReference(target, node, /*mapper*/ undefined);
                 }
                 else {
-                    var elementTypes = node.kind === 179 /* ArrayType */ ? [getTypeFromTypeNode(node.elementType)] : ts.map(node.elements, getTypeFromTypeNode);
+                    var elementTypes = node.kind === 181 /* ArrayType */ ? [getTypeFromTypeNode(node.elementType)] : ts.map(node.elements, getTypeFromTypeNode);
                     links.resolvedType = createNormalizedTypeReference(target, elementTypes);
                 }
             }
             return links.resolvedType;
         }
         function isReadonlyTypeOperator(node) {
-            return ts.isTypeOperatorNode(node) && node.operator === 142 /* ReadonlyKeyword */;
+            return ts.isTypeOperatorNode(node) && node.operator === 143 /* ReadonlyKeyword */;
         }
         function createTupleType(elementTypes, elementFlags, readonly, namedMemberDeclarations) {
             if (readonly === void 0) { readonly = false; }
@@ -57021,10 +58195,10 @@
                 lengthSymbol.type = numberType;
             }
             else {
-                var literalTypes_1 = [];
+                var literalTypes = [];
                 for (var i = minLength; i <= arity; i++)
-                    literalTypes_1.push(getLiteralType(i));
-                lengthSymbol.type = getUnionType(literalTypes_1);
+                    literalTypes.push(getNumberLiteralType(i));
+                lengthSymbol.type = getUnionType(literalTypes);
             }
             properties.push(lengthSymbol);
             var type = createObjectType(8 /* Tuple */ | 4 /* Reference */);
@@ -57041,8 +58215,7 @@
             type.declaredProperties = properties;
             type.declaredCallSignatures = ts.emptyArray;
             type.declaredConstructSignatures = ts.emptyArray;
-            type.declaredStringIndexInfo = undefined;
-            type.declaredNumberIndexInfo = undefined;
+            type.declaredIndexInfos = ts.emptyArray;
             type.elementFlags = elementFlags;
             type.minLength = minLength;
             type.fixedLength = fixedLength;
@@ -57081,7 +58254,7 @@
             var lastRequiredIndex = -1;
             var firstRestIndex = -1;
             var lastOptionalOrRestIndex = -1;
-            var _loop_13 = function (i) {
+            var _loop_15 = function (i) {
                 var type = elementTypes[i];
                 var flags = target.elementFlags[i];
                 if (flags & 8 /* Variadic */) {
@@ -57102,7 +58275,7 @@
                     }
                     else {
                         // Treat everything else as an array type and create a rest element.
-                        addElement(isArrayLikeType(type) && getIndexTypeOfType(type, 1 /* Number */) || errorType, 4 /* Rest */, (_b = target.labeledElementDeclarations) === null || _b === void 0 ? void 0 : _b[i]);
+                        addElement(isArrayLikeType(type) && getIndexTypeOfType(type, numberType) || errorType, 4 /* Rest */, (_b = target.labeledElementDeclarations) === null || _b === void 0 ? void 0 : _b[i]);
                     }
                 }
                 else {
@@ -57111,7 +58284,7 @@
                 }
             };
             for (var i = 0; i < elementTypes.length; i++) {
-                var state_4 = _loop_13(i);
+                var state_4 = _loop_15(i);
                 if (typeof state_4 === "object")
                     return state_4.value;
             }
@@ -57160,7 +58333,7 @@
                 /*readonly*/ false, target.labeledElementDeclarations && target.labeledElementDeclarations.slice(index, endIndex));
         }
         function getKnownKeysOfTupleType(type) {
-            return getUnionType(ts.append(ts.arrayOf(type.target.fixedLength, function (i) { return getLiteralType("" + i); }), getIndexType(type.target.readonly ? globalReadonlyArrayType : globalArrayType)));
+            return getUnionType(ts.append(ts.arrayOf(type.target.fixedLength, function (i) { return getStringLiteralType("" + i); }), getIndexType(type.target.readonly ? globalReadonlyArrayType : globalArrayType)));
         }
         // Return count of starting consecutive tuple elements of the given kind(s)
         function getStartElementCount(type, flags) {
@@ -57172,8 +58345,7 @@
             return type.elementFlags.length - ts.findLastIndex(type.elementFlags, function (f) { return !(f & flags); }) - 1;
         }
         function getTypeFromOptionalTypeNode(node) {
-            var type = getTypeFromTypeNode(node.type);
-            return strictNullChecks ? getOptionalType(type) : type;
+            return addOptionality(getTypeFromTypeNode(node.type), /*isProperty*/ true);
         }
         function getTypeId(type) {
             return type.id;
@@ -57218,8 +58390,8 @@
         // Add the given types to the given type set. Order is preserved, duplicates are removed,
         // and nested types of the given kind are flattened into the set.
         function addTypesToUnion(typeSet, includes, types) {
-            for (var _i = 0, types_10 = types; _i < types_10.length; _i++) {
-                var type = types_10[_i];
+            for (var _i = 0, types_9 = types; _i < types_9.length; _i++) {
+                var type = types_9[_i];
                 includes = addTypeToUnion(typeSet, includes, type);
             }
             return includes;
@@ -57248,8 +58420,8 @@
                         ts.find(getPropertiesOfType(source), function (p) { return isUnitType(getTypeOfSymbol(p)); }) :
                         undefined;
                     var keyPropertyType = keyProperty && getRegularTypeOfLiteralType(getTypeOfSymbol(keyProperty));
-                    for (var _i = 0, types_11 = types; _i < types_11.length; _i++) {
-                        var target = types_11[_i];
+                    for (var _i = 0, types_10 = types; _i < types_10.length; _i++) {
+                        var target = types_10[_i];
                         if (source !== target) {
                             if (count === 100000) {
                                 // After 100000 subtype checks we estimate the remaining amount of work by assuming the
@@ -57289,7 +58461,7 @@
                 i--;
                 var t = types[i];
                 var flags = t.flags;
-                var remove = flags & 128 /* StringLiteral */ && includes & 4 /* String */ ||
+                var remove = flags & (128 /* StringLiteral */ | 134217728 /* TemplateLiteral */ | 268435456 /* StringMapping */) && includes & 4 /* String */ ||
                     flags & 256 /* NumberLiteral */ && includes & 8 /* Number */ ||
                     flags & 2048 /* BigIntLiteral */ && includes & 64 /* BigInt */ ||
                     flags & 8192 /* UniqueESSymbol */ && includes & 4096 /* ESSymbol */ ||
@@ -57304,7 +58476,7 @@
             var templates = ts.filter(types, isPatternLiteralType);
             if (templates.length) {
                 var i = types.length;
-                var _loop_14 = function () {
+                var _loop_16 = function () {
                     i--;
                     var t = types[i];
                     if (t.flags & 128 /* StringLiteral */ && ts.some(templates, function (template) { return isTypeSubtypeOf(t, template); })) {
@@ -57312,7 +58484,7 @@
                     }
                 };
                 while (i > 0) {
-                    _loop_14();
+                    _loop_16();
                 }
             }
         }
@@ -57320,8 +58492,8 @@
             return !!(type.flags & 1048576 /* Union */ && (type.aliasSymbol || type.origin));
         }
         function addNamedUnions(namedUnions, types) {
-            for (var _i = 0, types_12 = types; _i < types_12.length; _i++) {
-                var t = types_12[_i];
+            for (var _i = 0, types_11 = types; _i < types_11.length; _i++) {
+                var t = types_11[_i];
                 if (t.flags & 1048576 /* Union */) {
                     var origin = t.origin;
                     if (t.aliasSymbol || origin && !(origin.flags & 1048576 /* Union */)) {
@@ -57359,7 +58531,13 @@
                 if (includes & 3 /* AnyOrUnknown */) {
                     return includes & 1 /* Any */ ? includes & 8388608 /* IncludesWildcard */ ? wildcardType : anyType : unknownType;
                 }
-                if (includes & (2944 /* Literal */ | 8192 /* UniqueESSymbol */) || includes & 16384 /* Void */ && includes & 32768 /* Undefined */) {
+                if (exactOptionalPropertyTypes && includes & 32768 /* Undefined */) {
+                    var missingIndex = ts.binarySearch(typeSet, missingType, getTypeId, ts.compareValues);
+                    if (missingIndex >= 0 && containsType(typeSet, undefinedType)) {
+                        ts.orderedRemoveItemAt(typeSet, missingIndex);
+                    }
+                }
+                if (includes & (2944 /* Literal */ | 8192 /* UniqueESSymbol */ | 134217728 /* TemplateLiteral */ | 268435456 /* StringMapping */) || includes & 16384 /* Void */ && includes & 32768 /* Undefined */) {
                     removeRedundantLiteralTypes(typeSet, includes, !!(unionReduction & 2 /* Subtype */));
                 }
                 if (includes & 128 /* StringLiteral */ && includes & 134217728 /* TemplateLiteral */) {
@@ -57381,14 +58559,14 @@
                 var namedUnions = [];
                 addNamedUnions(namedUnions, types);
                 var reducedTypes = [];
-                var _loop_15 = function (t) {
+                var _loop_17 = function (t) {
                     if (!ts.some(namedUnions, function (union) { return containsType(union.types, t); })) {
                         reducedTypes.push(t);
                     }
                 };
                 for (var _i = 0, typeSet_1 = typeSet; _i < typeSet_1.length; _i++) {
                     var t = typeSet_1[_i];
-                    _loop_15(t);
+                    _loop_17(t);
                 }
                 if (!aliasSymbol && namedUnions.length === 1 && reducedTypes.length === 0) {
                     return namedUnions[0];
@@ -57405,7 +58583,7 @@
                 }
             }
             var objectFlags = (includes & 468598819 /* NotPrimitiveUnion */ ? 0 : 65536 /* PrimitiveUnion */) |
-                (includes & 2097152 /* Intersection */ ? 67108864 /* ContainsIntersections */ : 0);
+                (includes & 2097152 /* Intersection */ ? 33554432 /* ContainsIntersections */ : 0);
             return getUnionTypeFromSortedList(typeSet, objectFlags, aliasSymbol, aliasTypeArguments, origin);
         }
         function getUnionOrIntersectionTypePredicate(signatures, kind) {
@@ -57443,15 +58621,6 @@
         function typePredicateKindsMatch(a, b) {
             return a.kind === b.kind && a.parameterIndex === b.parameterIndex;
         }
-        function createUnionType(types, aliasSymbol, aliasTypeArguments, origin) {
-            var result = createType(1048576 /* Union */);
-            result.objectFlags = getPropagatingFlagsOfTypes(types, /*excludeKinds*/ 98304 /* Nullable */);
-            result.types = types;
-            result.origin = origin;
-            result.aliasSymbol = aliasSymbol;
-            result.aliasTypeArguments = aliasTypeArguments;
-            return result;
-        }
         // This function assumes the constituent type list is sorted and deduplicated.
         function getUnionTypeFromSortedList(types, objectFlags, aliasSymbol, aliasTypeArguments, origin) {
             if (types.length === 0) {
@@ -57467,8 +58636,16 @@
             var id = typeKey + getAliasId(aliasSymbol, aliasTypeArguments);
             var type = unionTypes.get(id);
             if (!type) {
-                type = createUnionType(types, aliasSymbol, aliasTypeArguments, origin);
-                type.objectFlags |= objectFlags;
+                type = createType(1048576 /* Union */);
+                type.objectFlags = objectFlags | getPropagatingFlagsOfTypes(types, /*excludeKinds*/ 98304 /* Nullable */);
+                type.types = types;
+                type.origin = origin;
+                type.aliasSymbol = aliasSymbol;
+                type.aliasTypeArguments = aliasTypeArguments;
+                if (types.length === 2 && types[0].flags & 512 /* BooleanLiteral */ && types[1].flags & 512 /* BooleanLiteral */) {
+                    type.flags |= 16 /* Boolean */;
+                    type.intrinsicName = "boolean";
+                }
                 unionTypes.set(id, type);
             }
             return type;
@@ -57512,8 +58689,8 @@
         // Add the given types to the given type set. Order is preserved, freshness is removed from literal
         // types, duplicates are removed, and nested types of the given kind are flattened into the set.
         function addTypesToIntersection(typeSet, includes, types) {
-            for (var _i = 0, types_13 = types; _i < types_13.length; _i++) {
-                var type = types_13[_i];
+            for (var _i = 0, types_12 = types; _i < types_12.length; _i++) {
+                var type = types_12[_i];
                 includes = addTypeToIntersection(typeSet, includes, getRegularTypeOfLiteralType(type));
             }
             return includes;
@@ -57662,8 +58839,10 @@
             // a symbol-like type and a type known to be non-symbol-like, or
             // a void-like type and a type known to be non-void-like, or
             // a non-primitive type and a type known to be primitive.
-            if (includes & 131072 /* Never */ ||
-                strictNullChecks && includes & 98304 /* Nullable */ && includes & (524288 /* Object */ | 67108864 /* NonPrimitive */ | 16777216 /* IncludesEmptyObject */) ||
+            if (includes & 131072 /* Never */) {
+                return ts.contains(typeSet, silentNeverType) ? silentNeverType : neverType;
+            }
+            if (strictNullChecks && includes & 98304 /* Nullable */ && includes & (524288 /* Object */ | 67108864 /* NonPrimitive */ | 16777216 /* IncludesEmptyObject */) ||
                 includes & 67108864 /* NonPrimitive */ && includes & (469892092 /* DisjointDomains */ & ~67108864 /* NonPrimitive */) ||
                 includes & 402653316 /* StringLike */ && includes & (469892092 /* DisjointDomains */ & ~402653316 /* StringLike */) ||
                 includes & 296 /* NumberLike */ && includes & (469892092 /* DisjointDomains */ & ~296 /* NumberLike */) ||
@@ -57803,40 +58982,37 @@
                 constraint;
         }
         // Ordinarily we reduce a keyof M, where M is a mapped type { [P in K as N<P>]: X }, to simply N<K>. This however presumes
-        // that N distributes over union types, i.e. that N<A | B | C> is equivalent to N<A> | N<B> | N<C>. That presumption may not
-        // be true when N is a non-distributive conditional type or an instantiable type with a non-distributive conditional type as
-        // a constituent. In those cases, we cannot reduce keyof M and need to preserve it as is.
-        function maybeNonDistributiveNameType(type) {
-            return !!(type && (type.flags & 16777216 /* Conditional */ && (!type.root.isDistributive || maybeNonDistributiveNameType(type.checkType)) ||
-                type.flags & (3145728 /* UnionOrIntersection */ | 134217728 /* TemplateLiteral */) && ts.some(type.types, maybeNonDistributiveNameType) ||
-                type.flags & (4194304 /* Index */ | 268435456 /* StringMapping */) && maybeNonDistributiveNameType(type.type) ||
-                type.flags & 8388608 /* IndexedAccess */ && maybeNonDistributiveNameType(type.indexType) ||
-                type.flags & 33554432 /* Substitution */ && maybeNonDistributiveNameType(type.substitute)));
+        // that N distributes over union types, i.e. that N<A | B | C> is equivalent to N<A> | N<B> | N<C>. Specifically, we only
+        // want to perform the reduction when the name type of a mapped type is distributive with respect to the type variable
+        // introduced by the 'in' clause of the mapped type. Note that non-generic types are considered to be distributive because
+        // they're the same type regardless of what's being distributed over.
+        function hasDistributiveNameType(mappedType) {
+            var typeVariable = getTypeParameterFromMappedType(mappedType);
+            return isDistributive(getNameTypeFromMappedType(mappedType) || typeVariable);
+            function isDistributive(type) {
+                return type.flags & (3 /* AnyOrUnknown */ | 131068 /* Primitive */ | 131072 /* Never */ | 262144 /* TypeParameter */ | 524288 /* Object */ | 67108864 /* NonPrimitive */) ? true :
+                    type.flags & 16777216 /* Conditional */ ? type.root.isDistributive && type.checkType === typeVariable :
+                        type.flags & (3145728 /* UnionOrIntersection */ | 134217728 /* TemplateLiteral */) ? ts.every(type.types, isDistributive) :
+                            type.flags & 8388608 /* IndexedAccess */ ? isDistributive(type.objectType) && isDistributive(type.indexType) :
+                                type.flags & 33554432 /* Substitution */ ? isDistributive(type.substitute) :
+                                    type.flags & 268435456 /* StringMapping */ ? isDistributive(type.type) :
+                                        false;
+            }
         }
         function getLiteralTypeFromPropertyName(name) {
             if (ts.isPrivateIdentifier(name)) {
                 return neverType;
             }
-            return ts.isIdentifier(name) ? getLiteralType(ts.unescapeLeadingUnderscores(name.escapedText)) :
+            return ts.isIdentifier(name) ? getStringLiteralType(ts.unescapeLeadingUnderscores(name.escapedText)) :
                 getRegularTypeOfLiteralType(ts.isComputedPropertyName(name) ? checkComputedPropertyName(name) : checkExpression(name));
         }
-        function getBigIntLiteralType(node) {
-            return getLiteralType({
-                negative: false,
-                base10Value: ts.parsePseudoBigInt(node.text)
-            });
-        }
-        function getLiteralTypeFromProperty(prop, include) {
-            if (!(ts.getDeclarationModifierFlagsFromSymbol(prop) & 24 /* NonPublicAccessibilityModifier */)) {
+        function getLiteralTypeFromProperty(prop, include, includeNonPublic) {
+            if (includeNonPublic || !(ts.getDeclarationModifierFlagsFromSymbol(prop) & 24 /* NonPublicAccessibilityModifier */)) {
                 var type = getSymbolLinks(getLateBoundSymbol(prop)).nameType;
                 if (!type) {
-                    if (prop.escapedName === "default" /* Default */) {
-                        type = getLiteralType("default");
-                    }
-                    else {
-                        var name = prop.valueDeclaration && ts.getNameOfDeclaration(prop.valueDeclaration);
-                        type = name && getLiteralTypeFromPropertyName(name) || (!ts.isKnownSymbol(prop) ? getLiteralType(ts.symbolName(prop)) : undefined);
-                    }
+                    var name = ts.getNameOfDeclaration(prop.valueDeclaration);
+                    type = prop.escapedName === "default" /* Default */ ? getStringLiteralType("default") :
+                        name && getLiteralTypeFromPropertyName(name) || (!ts.isKnownSymbol(prop) ? getStringLiteralType(ts.symbolName(prop)) : undefined);
                 }
                 if (type && type.flags & include) {
                     return type;
@@ -57846,28 +59022,23 @@
         }
         function getLiteralTypeFromProperties(type, include, includeOrigin) {
             var origin = includeOrigin && (ts.getObjectFlags(type) & (3 /* ClassOrInterface */ | 4 /* Reference */) || type.aliasSymbol) ? createOriginIndexType(type) : undefined;
-            return getUnionType(ts.map(getPropertiesOfType(type), function (p) { return getLiteralTypeFromProperty(p, include); }), 1 /* Literal */, 
+            var propertyTypes = ts.map(getPropertiesOfType(type), function (prop) { return getLiteralTypeFromProperty(prop, include); });
+            var indexKeyTypes = ts.map(getIndexInfosOfType(type), function (info) { return info !== enumNumberIndexInfo && info.keyType.flags & include ?
+                info.keyType === stringType && include & 8 /* Number */ ? stringOrNumberType : info.keyType : neverType; });
+            return getUnionType(ts.concatenate(propertyTypes, indexKeyTypes), 1 /* Literal */, 
             /*aliasSymbol*/ undefined, /*aliasTypeArguments*/ undefined, origin);
         }
-        function getNonEnumNumberIndexInfo(type) {
-            var numberIndexInfo = getIndexInfoOfType(type, 1 /* Number */);
-            return numberIndexInfo !== enumNumberIndexInfo ? numberIndexInfo : undefined;
-        }
         function getIndexType(type, stringsOnly, noIndexSignatures) {
             if (stringsOnly === void 0) { stringsOnly = keyofStringsOnly; }
-            var includeOrigin = stringsOnly === keyofStringsOnly && !noIndexSignatures;
             type = getReducedType(type);
             return type.flags & 1048576 /* Union */ ? getIntersectionType(ts.map(type.types, function (t) { return getIndexType(t, stringsOnly, noIndexSignatures); })) :
                 type.flags & 2097152 /* Intersection */ ? getUnionType(ts.map(type.types, function (t) { return getIndexType(t, stringsOnly, noIndexSignatures); })) :
-                    type.flags & 58982400 /* InstantiableNonPrimitive */ || isGenericTupleType(type) || isGenericMappedType(type) && maybeNonDistributiveNameType(getNameTypeFromMappedType(type)) ? getIndexTypeForGenericType(type, stringsOnly) :
+                    type.flags & 58982400 /* InstantiableNonPrimitive */ || isGenericTupleType(type) || isGenericMappedType(type) && !hasDistributiveNameType(type) ? getIndexTypeForGenericType(type, stringsOnly) :
                         ts.getObjectFlags(type) & 32 /* Mapped */ ? getIndexTypeForMappedType(type, noIndexSignatures) :
                             type === wildcardType ? wildcardType :
                                 type.flags & 2 /* Unknown */ ? neverType :
                                     type.flags & (1 /* Any */ | 131072 /* Never */) ? keyofConstraintType :
-                                        stringsOnly ? !noIndexSignatures && getIndexInfoOfType(type, 0 /* String */) ? stringType : getLiteralTypeFromProperties(type, 128 /* StringLiteral */, includeOrigin) :
-                                            !noIndexSignatures && getIndexInfoOfType(type, 0 /* String */) ? getUnionType([stringType, numberType, getLiteralTypeFromProperties(type, 8192 /* UniqueESSymbol */, includeOrigin)]) :
-                                                getNonEnumNumberIndexInfo(type) ? getUnionType([numberType, getLiteralTypeFromProperties(type, 128 /* StringLiteral */ | 8192 /* UniqueESSymbol */, includeOrigin)]) :
-                                                    getLiteralTypeFromProperties(type, 8576 /* StringOrNumberLiteralOrUnique */, includeOrigin);
+                                        getLiteralTypeFromProperties(type, (noIndexSignatures ? 128 /* StringLiteral */ : 402653316 /* StringLike */) | (stringsOnly ? 0 : 296 /* NumberLike */ | 12288 /* ESSymbolLike */), stringsOnly === keyofStringsOnly && !noIndexSignatures);
         }
         function getExtractStringType(type) {
             if (keyofStringsOnly) {
@@ -57884,15 +59055,15 @@
             var links = getNodeLinks(node);
             if (!links.resolvedType) {
                 switch (node.operator) {
-                    case 138 /* KeyOfKeyword */:
+                    case 139 /* KeyOfKeyword */:
                         links.resolvedType = getIndexType(getTypeFromTypeNode(node.type));
                         break;
-                    case 151 /* UniqueKeyword */:
-                        links.resolvedType = node.type.kind === 148 /* SymbolKeyword */
+                    case 152 /* UniqueKeyword */:
+                        links.resolvedType = node.type.kind === 149 /* SymbolKeyword */
                             ? getESSymbolLikeTypeForNode(ts.walkUpParenthesizedTypes(node.parent))
                             : errorType;
                         break;
-                    case 142 /* ReadonlyKeyword */:
+                    case 143 /* ReadonlyKeyword */:
                         links.resolvedType = getTypeFromTypeNode(node.type);
                         break;
                     default:
@@ -57904,7 +59075,7 @@
         function getTypeFromTemplateTypeNode(node) {
             var links = getNodeLinks(node);
             if (!links.resolvedType) {
-                links.resolvedType = getTemplateLiteralType(__spreadArray([node.head.text], ts.map(node.templateSpans, function (span) { return span.literal.text; })), ts.map(node.templateSpans, function (span) { return getTypeFromTypeNode(span.type); }));
+                links.resolvedType = getTemplateLiteralType(__spreadArray([node.head.text], ts.map(node.templateSpans, function (span) { return span.literal.text; }), true), ts.map(node.templateSpans, function (span) { return getTypeFromTypeNode(span.type); }));
             }
             return links.resolvedType;
         }
@@ -57925,7 +59096,7 @@
                 return stringType;
             }
             if (newTypes.length === 0) {
-                return getLiteralType(text);
+                return getStringLiteralType(text);
             }
             newTexts.push(text);
             if (ts.every(newTexts, function (t) { return t === ""; }) && ts.every(newTypes, function (t) { return !!(t.flags & 4 /* String */); })) {
@@ -57978,7 +59149,7 @@
         function getStringMappingType(symbol, type) {
             return type.flags & (1048576 /* Union */ | 131072 /* Never */) ? mapType(type, function (t) { return getStringMappingType(symbol, t); }) :
                 isGenericIndexType(type) ? getStringMappingTypeForGenericType(symbol, type) :
-                    type.flags & 128 /* StringLiteral */ ? getLiteralType(applyStringMapping(symbol, type.value)) :
+                    type.flags & 128 /* StringLiteral */ ? getStringLiteralType(applyStringMapping(symbol, type.value)) :
                         type;
         }
         function applyStringMapping(symbol, str) {
@@ -58004,13 +59175,13 @@
             result.type = type;
             return result;
         }
-        function createIndexedAccessType(objectType, indexType, aliasSymbol, aliasTypeArguments, shouldIncludeUndefined) {
+        function createIndexedAccessType(objectType, indexType, accessFlags, aliasSymbol, aliasTypeArguments) {
             var type = createType(8388608 /* IndexedAccess */);
             type.objectType = objectType;
             type.indexType = indexType;
+            type.accessFlags = accessFlags;
             type.aliasSymbol = aliasSymbol;
             type.aliasTypeArguments = aliasTypeArguments;
-            type.noUncheckedIndexedAccessCandidate = shouldIncludeUndefined;
             return type;
         }
         /**
@@ -58059,14 +59230,17 @@
             }
             return true;
         }
-        function getPropertyTypeForIndexType(originalObjectType, objectType, indexType, fullIndexType, suppressNoImplicitAnyError, accessNode, accessFlags, noUncheckedIndexedAccessCandidate, reportDeprecated) {
+        function getPropertyTypeForIndexType(originalObjectType, objectType, indexType, fullIndexType, accessNode, accessFlags) {
             var _a;
-            var accessExpression = accessNode && accessNode.kind === 203 /* ElementAccessExpression */ ? accessNode : undefined;
+            var accessExpression = accessNode && accessNode.kind === 205 /* ElementAccessExpression */ ? accessNode : undefined;
             var propName = accessNode && ts.isPrivateIdentifier(accessNode) ? undefined : getPropertyNameFromIndex(indexType, accessNode);
             if (propName !== undefined) {
+                if (accessFlags & 256 /* Contextual */) {
+                    return getTypeOfPropertyOfContextualType(objectType, propName) || anyType;
+                }
                 var prop = getPropertyOfType(objectType, propName);
                 if (prop) {
-                    if (reportDeprecated && accessNode && prop.declarations && getDeclarationNodeFlagsFromSymbol(prop) & 134217728 /* Deprecated */ && isUncalledFunctionReference(accessNode, prop)) {
+                    if (accessFlags & 64 /* ReportDeprecated */ && accessNode && prop.declarations && getDeclarationNodeFlagsFromSymbol(prop) & 134217728 /* Deprecated */ && isUncalledFunctionReference(accessNode, prop)) {
                         var deprecatedNode = (_a = accessExpression === null || accessExpression === void 0 ? void 0 : accessExpression.argumentExpression) !== null && _a !== void 0 ? _a : (ts.isIndexedAccessTypeNode(accessNode) ? accessNode.indexType : accessNode);
                         addDeprecatedSuggestion(deprecatedNode, prop.declarations, propName);
                     }
@@ -58076,7 +59250,7 @@
                             error(accessExpression.argumentExpression, ts.Diagnostics.Cannot_assign_to_0_because_it_is_a_read_only_property, symbolToString(prop));
                             return undefined;
                         }
-                        if (accessFlags & 4 /* CacheSymbol */) {
+                        if (accessFlags & 8 /* CacheSymbol */) {
                             getNodeLinks(accessNode).resolvedSymbol = prop;
                         }
                         if (isThisPropertyAccessInConstructor(accessExpression, prop)) {
@@ -58089,7 +59263,7 @@
                         propType;
                 }
                 if (everyType(objectType, isTupleType) && isNumericLiteralName(propName) && +propName >= 0) {
-                    if (accessNode && everyType(objectType, function (t) { return !t.target.hasRestElement; }) && !(accessFlags & 8 /* NoTupleBoundsCheck */)) {
+                    if (accessNode && everyType(objectType, function (t) { return !t.target.hasRestElement; }) && !(accessFlags & 16 /* NoTupleBoundsCheck */)) {
                         var indexNode = getIndexNodeForAccessExpression(accessNode);
                         if (isTupleType(objectType)) {
                             error(indexNode, ts.Diagnostics.Tuple_type_0_of_length_1_has_no_element_at_index_2, typeToString(objectType), getTypeReferenceArity(objectType), ts.unescapeLeadingUnderscores(propName));
@@ -58098,10 +59272,10 @@
                             error(indexNode, ts.Diagnostics.Property_0_does_not_exist_on_type_1, ts.unescapeLeadingUnderscores(propName), typeToString(objectType));
                         }
                     }
-                    errorIfWritingToReadonlyIndex(getIndexInfoOfType(objectType, 1 /* Number */));
+                    errorIfWritingToReadonlyIndex(getIndexInfoOfType(objectType, numberType));
                     return mapType(objectType, function (t) {
                         var restType = getRestTypeOfTupleType(t) || undefinedType;
-                        return noUncheckedIndexedAccessCandidate ? getUnionType([restType, undefinedType]) : restType;
+                        return accessFlags & 1 /* IncludeUndefined */ ? getUnionType([restType, undefinedType]) : restType;
                     });
                 }
             }
@@ -58109,22 +59283,23 @@
                 if (objectType.flags & (1 /* Any */ | 131072 /* Never */)) {
                     return objectType;
                 }
-                var stringIndexInfo = getIndexInfoOfType(objectType, 0 /* String */);
-                var indexInfo = isTypeAssignableToKind(indexType, 296 /* NumberLike */) && getIndexInfoOfType(objectType, 1 /* Number */) || stringIndexInfo;
+                // If no index signature is applicable, we default to the string index signature. In effect, this means the string
+                // index signature applies even when accessing with a symbol-like type.
+                var indexInfo = getApplicableIndexInfo(objectType, indexType) || getIndexInfoOfType(objectType, stringType);
                 if (indexInfo) {
-                    if (accessFlags & 1 /* NoIndexSignatures */ && indexInfo === stringIndexInfo) {
+                    if (accessFlags & 2 /* NoIndexSignatures */ && indexInfo.keyType !== numberType) {
                         if (accessExpression) {
                             error(accessExpression, ts.Diagnostics.Type_0_cannot_be_used_to_index_type_1, typeToString(indexType), typeToString(originalObjectType));
                         }
                         return undefined;
                     }
-                    if (accessNode && !isTypeAssignableToKind(indexType, 4 /* String */ | 8 /* Number */)) {
+                    if (accessNode && indexInfo.keyType === stringType && !isTypeAssignableToKind(indexType, 4 /* String */ | 8 /* Number */)) {
                         var indexNode = getIndexNodeForAccessExpression(accessNode);
                         error(indexNode, ts.Diagnostics.Type_0_cannot_be_used_as_an_index_type, typeToString(indexType));
-                        return noUncheckedIndexedAccessCandidate ? getUnionType([indexInfo.type, undefinedType]) : indexInfo.type;
+                        return accessFlags & 1 /* IncludeUndefined */ ? getUnionType([indexInfo.type, undefinedType]) : indexInfo.type;
                     }
                     errorIfWritingToReadonlyIndex(indexInfo);
-                    return noUncheckedIndexedAccessCandidate ? getUnionType([indexInfo.type, undefinedType]) : indexInfo.type;
+                    return accessFlags & 1 /* IncludeUndefined */ ? getUnionType([indexInfo.type, undefinedType]) : indexInfo.type;
                 }
                 if (indexType.flags & 131072 /* Never */) {
                     return neverType;
@@ -58148,12 +59323,12 @@
                     if (objectType.symbol === globalThisSymbol && propName !== undefined && globalThisSymbol.exports.has(propName) && (globalThisSymbol.exports.get(propName).flags & 418 /* BlockScoped */)) {
                         error(accessExpression, ts.Diagnostics.Property_0_does_not_exist_on_type_1, ts.unescapeLeadingUnderscores(propName), typeToString(objectType));
                     }
-                    else if (noImplicitAny && !compilerOptions.suppressImplicitAnyIndexErrors && !suppressNoImplicitAnyError) {
+                    else if (noImplicitAny && !compilerOptions.suppressImplicitAnyIndexErrors && !(accessFlags & 128 /* SuppressNoImplicitAnyError */)) {
                         if (propName !== undefined && typeHasStaticProperty(propName, objectType)) {
                             var typeName = typeToString(objectType);
                             error(accessExpression, ts.Diagnostics.Property_0_does_not_exist_on_type_1_Did_you_mean_to_access_the_static_member_2_instead, propName, typeName, typeName + "[" + ts.getTextOfNode(accessExpression.argumentExpression) + "]");
                         }
-                        else if (getIndexTypeOfType(objectType, 1 /* Number */)) {
+                        else if (getIndexTypeOfType(objectType, numberType)) {
                             error(accessExpression.argumentExpression, ts.Diagnostics.Element_implicitly_has_an_any_type_because_index_expression_is_not_of_type_number);
                         }
                         else {
@@ -58221,9 +59396,9 @@
             }
         }
         function getIndexNodeForAccessExpression(accessNode) {
-            return accessNode.kind === 203 /* ElementAccessExpression */ ? accessNode.argumentExpression :
-                accessNode.kind === 190 /* IndexedAccessType */ ? accessNode.indexType :
-                    accessNode.kind === 159 /* ComputedPropertyName */ ? accessNode.expression :
+            return accessNode.kind === 205 /* ElementAccessExpression */ ? accessNode.argumentExpression :
+                accessNode.kind === 192 /* IndexedAccessType */ ? accessNode.indexType :
+                    accessNode.kind === 160 /* ComputedPropertyName */ ? accessNode.expression :
                         accessNode;
         }
         function isPatternLiteralPlaceholderType(type) {
@@ -58232,39 +59407,32 @@
         function isPatternLiteralType(type) {
             return !!(type.flags & 134217728 /* TemplateLiteral */) && ts.every(type.types, isPatternLiteralPlaceholderType);
         }
+        function isGenericType(type) {
+            return !!getGenericObjectFlags(type);
+        }
         function isGenericObjectType(type) {
-            if (type.flags & 3145728 /* UnionOrIntersection */) {
-                if (!(type.objectFlags & 4194304 /* IsGenericObjectTypeComputed */)) {
-                    type.objectFlags |= 4194304 /* IsGenericObjectTypeComputed */ |
-                        (ts.some(type.types, isGenericObjectType) ? 8388608 /* IsGenericObjectType */ : 0);
-                }
-                return !!(type.objectFlags & 8388608 /* IsGenericObjectType */);
-            }
-            if (type.flags & 33554432 /* Substitution */) {
-                if (!(type.objectFlags & 4194304 /* IsGenericObjectTypeComputed */)) {
-                    type.objectFlags |= 4194304 /* IsGenericObjectTypeComputed */ |
-                        (isGenericObjectType(type.substitute) || isGenericObjectType(type.baseType) ? 8388608 /* IsGenericObjectType */ : 0);
-                }
-                return !!(type.objectFlags & 8388608 /* IsGenericObjectType */);
-            }
-            return !!(type.flags & 58982400 /* InstantiableNonPrimitive */) || isGenericMappedType(type) || isGenericTupleType(type);
+            return !!(getGenericObjectFlags(type) & 8388608 /* IsGenericObjectType */);
         }
         function isGenericIndexType(type) {
+            return !!(getGenericObjectFlags(type) & 16777216 /* IsGenericIndexType */);
+        }
+        function getGenericObjectFlags(type) {
             if (type.flags & 3145728 /* UnionOrIntersection */) {
-                if (!(type.objectFlags & 16777216 /* IsGenericIndexTypeComputed */)) {
-                    type.objectFlags |= 16777216 /* IsGenericIndexTypeComputed */ |
-                        (ts.some(type.types, isGenericIndexType) ? 33554432 /* IsGenericIndexType */ : 0);
+                if (!(type.objectFlags & 4194304 /* IsGenericTypeComputed */)) {
+                    type.objectFlags |= 4194304 /* IsGenericTypeComputed */ |
+                        ts.reduceLeft(type.types, function (flags, t) { return flags | getGenericObjectFlags(t); }, 0);
                 }
-                return !!(type.objectFlags & 33554432 /* IsGenericIndexType */);
+                return type.objectFlags & 25165824 /* IsGenericType */;
             }
             if (type.flags & 33554432 /* Substitution */) {
-                if (!(type.objectFlags & 16777216 /* IsGenericIndexTypeComputed */)) {
-                    type.objectFlags |= 16777216 /* IsGenericIndexTypeComputed */ |
-                        (isGenericIndexType(type.substitute) || isGenericIndexType(type.baseType) ? 33554432 /* IsGenericIndexType */ : 0);
+                if (!(type.objectFlags & 4194304 /* IsGenericTypeComputed */)) {
+                    type.objectFlags |= 4194304 /* IsGenericTypeComputed */ |
+                        getGenericObjectFlags(type.substitute) | getGenericObjectFlags(type.baseType);
                 }
-                return !!(type.objectFlags & 33554432 /* IsGenericIndexType */);
+                return type.objectFlags & 25165824 /* IsGenericType */;
             }
-            return !!(type.flags & (58982400 /* InstantiableNonPrimitive */ | 4194304 /* Index */ | 134217728 /* TemplateLiteral */ | 268435456 /* StringMapping */)) && !isPatternLiteralType(type);
+            return (type.flags & 58982400 /* InstantiableNonPrimitive */ || isGenericMappedType(type) || isGenericTupleType(type) ? 8388608 /* IsGenericObjectType */ : 0) |
+                (type.flags & (58982400 /* InstantiableNonPrimitive */ | 4194304 /* Index */ | 134217728 /* TemplateLiteral */ | 268435456 /* StringMapping */) && !isPatternLiteralType(type) ? 16777216 /* IsGenericIndexType */ : 0);
         }
         function isThisTypeParameter(type) {
             return !!(type.flags & 262144 /* TypeParameter */ && type.isThisType);
@@ -58380,9 +59548,9 @@
             var templateMapper = combineTypeMappers(objectType.mapper, mapper);
             return instantiateType(getTemplateTypeFromMappedType(objectType), templateMapper);
         }
-        function getIndexedAccessType(objectType, indexType, noUncheckedIndexedAccessCandidate, accessNode, aliasSymbol, aliasTypeArguments, accessFlags) {
+        function getIndexedAccessType(objectType, indexType, accessFlags, accessNode, aliasSymbol, aliasTypeArguments) {
             if (accessFlags === void 0) { accessFlags = 0 /* None */; }
-            return getIndexedAccessTypeOrUndefined(objectType, indexType, noUncheckedIndexedAccessCandidate, accessNode, accessFlags, aliasSymbol, aliasTypeArguments) || (accessNode ? errorType : unknownType);
+            return getIndexedAccessTypeOrUndefined(objectType, indexType, accessFlags, accessNode, aliasSymbol, aliasTypeArguments) || (accessNode ? errorType : unknownType);
         }
         function indexTypeLessThan(indexType, limit) {
             return everyType(indexType, function (t) {
@@ -58396,36 +59564,38 @@
                 return false;
             });
         }
-        function getIndexedAccessTypeOrUndefined(objectType, indexType, noUncheckedIndexedAccessCandidate, accessNode, accessFlags, aliasSymbol, aliasTypeArguments) {
+        function getIndexedAccessTypeOrUndefined(objectType, indexType, accessFlags, accessNode, aliasSymbol, aliasTypeArguments) {
             if (accessFlags === void 0) { accessFlags = 0 /* None */; }
             if (objectType === wildcardType || indexType === wildcardType) {
                 return wildcardType;
             }
-            var shouldIncludeUndefined = noUncheckedIndexedAccessCandidate ||
-                (!!compilerOptions.noUncheckedIndexedAccess &&
-                    (accessFlags & (2 /* Writing */ | 16 /* ExpressionPosition */)) === 16 /* ExpressionPosition */);
             // If the object type has a string index signature and no other members we know that the result will
             // always be the type of that index signature and we can simplify accordingly.
             if (isStringIndexSignatureOnlyType(objectType) && !(indexType.flags & 98304 /* Nullable */) && isTypeAssignableToKind(indexType, 4 /* String */ | 8 /* Number */)) {
                 indexType = stringType;
             }
+            // In noUncheckedIndexedAccess mode, indexed access operations that occur in an expression in a read position and resolve to
+            // an index signature have 'undefined' included in their type.
+            if (compilerOptions.noUncheckedIndexedAccess && accessFlags & 32 /* ExpressionPosition */)
+                accessFlags |= 1 /* IncludeUndefined */;
             // If the index type is generic, or if the object type is generic and doesn't originate in an expression and
             // the operation isn't exclusively indexing the fixed (non-variadic) portion of a tuple type, we are performing
             // a higher-order index access where we cannot meaningfully access the properties of the object type. Note that
             // for a generic T and a non-generic K, we eagerly resolve T[K] if it originates in an expression. This is to
             // preserve backwards compatibility. For example, an element access 'this["foo"]' has always been resolved
             // eagerly using the constraint type of 'this' at the given location.
-            if (isGenericIndexType(indexType) || (accessNode && accessNode.kind !== 190 /* IndexedAccessType */ ?
+            if (isGenericIndexType(indexType) || (accessNode && accessNode.kind !== 192 /* IndexedAccessType */ ?
                 isGenericTupleType(objectType) && !indexTypeLessThan(indexType, objectType.target.fixedLength) :
                 isGenericObjectType(objectType) && !(isTupleType(objectType) && indexTypeLessThan(indexType, objectType.target.fixedLength)))) {
                 if (objectType.flags & 3 /* AnyOrUnknown */) {
                     return objectType;
                 }
                 // Defer the operation by creating an indexed access type.
-                var id = objectType.id + "," + indexType.id + (shouldIncludeUndefined ? "?" : "") + getAliasId(aliasSymbol, aliasTypeArguments);
+                var persistentAccessFlags = accessFlags & 1 /* Persistent */;
+                var id = objectType.id + "," + indexType.id + "," + persistentAccessFlags + getAliasId(aliasSymbol, aliasTypeArguments);
                 var type = indexedAccessTypes.get(id);
                 if (!type) {
-                    indexedAccessTypes.set(id, type = createIndexedAccessType(objectType, indexType, aliasSymbol, aliasTypeArguments, shouldIncludeUndefined));
+                    indexedAccessTypes.set(id, type = createIndexedAccessType(objectType, indexType, persistentAccessFlags, aliasSymbol, aliasTypeArguments));
                 }
                 return type;
             }
@@ -58438,7 +59608,7 @@
                 var wasMissingProp = false;
                 for (var _i = 0, _a = indexType.types; _i < _a.length; _i++) {
                     var t = _a[_i];
-                    var propType = getPropertyTypeForIndexType(objectType, apparentObjectType, t, indexType, wasMissingProp, accessNode, accessFlags, shouldIncludeUndefined);
+                    var propType = getPropertyTypeForIndexType(objectType, apparentObjectType, t, indexType, accessNode, accessFlags | (wasMissingProp ? 128 /* SuppressNoImplicitAnyError */ : 0));
                     if (propType) {
                         propTypes.push(propType);
                     }
@@ -58454,11 +59624,11 @@
                 if (wasMissingProp) {
                     return undefined;
                 }
-                return accessFlags & 2 /* Writing */
+                return accessFlags & 4 /* Writing */
                     ? getIntersectionType(propTypes, aliasSymbol, aliasTypeArguments)
                     : getUnionType(propTypes, 1 /* Literal */, aliasSymbol, aliasTypeArguments);
             }
-            return getPropertyTypeForIndexType(objectType, apparentObjectType, indexType, indexType, /* supressNoImplicitAnyError */ false, accessNode, accessFlags | 4 /* CacheSymbol */, shouldIncludeUndefined, /* reportDeprecated */ true);
+            return getPropertyTypeForIndexType(objectType, apparentObjectType, indexType, indexType, accessNode, accessFlags | 8 /* CacheSymbol */ | 64 /* ReportDeprecated */);
         }
         function getTypeFromIndexedAccessTypeNode(node) {
             var links = getNodeLinks(node);
@@ -58466,7 +59636,7 @@
                 var objectType = getTypeFromTypeNode(node.objectType);
                 var indexType = getTypeFromTypeNode(node.indexType);
                 var potentialAlias = getAliasSymbolForTypeNode(node);
-                var resolved = getIndexedAccessType(objectType, indexType, /*noUncheckedIndexedAccessCandidate*/ undefined, node, potentialAlias, getTypeArgumentsForAliasSymbol(potentialAlias));
+                var resolved = getIndexedAccessType(objectType, indexType, 0 /* None */, node, potentialAlias, getTypeArgumentsForAliasSymbol(potentialAlias));
                 links.resolvedType = resolved.flags & 8388608 /* IndexedAccess */ &&
                     resolved.objectType === objectType &&
                     resolved.indexType === indexType ?
@@ -58499,11 +59669,10 @@
             return type;
         }
         function isTypicalNondistributiveConditional(root) {
-            return !root.isDistributive
-                && root.node.checkType.kind === 180 /* TupleType */
-                && ts.length(root.node.checkType.elements) === 1
-                && root.node.extendsType.kind === 180 /* TupleType */
-                && ts.length(root.node.extendsType.elements) === 1;
+            return !root.isDistributive && isSingletonTupleType(root.node.checkType) && isSingletonTupleType(root.node.extendsType);
+        }
+        function isSingletonTupleType(node) {
+            return ts.isTupleTypeNode(node) && ts.length(node.elements) === 1 && !ts.isOptionalTypeNode(node.elements[0]) && !ts.isRestTypeNode(node.elements[0]);
         }
         /**
          * We syntactually check for common nondistributive conditional shapes and unwrap them into
@@ -58518,11 +59687,11 @@
             var extraTypes;
             // We loop here for an immediately nested conditional type in the false position, effectively treating
             // types of the form 'A extends B ? X : C extends D ? Y : E extends F ? Z : ...' as a single construct for
-            // purposes of resolution. This means such types aren't subject to the instatiation depth limiter.
+            // purposes of resolution. This means such types aren't subject to the instantiation depth limiter.
             while (true) {
                 var isUnwrapped = isTypicalNondistributiveConditional(root);
                 var checkType = instantiateType(unwrapNondistributiveConditionalTuple(root, getActualTypeVariable(root.checkType)), mapper);
-                var checkTypeInstantiable = isGenericObjectType(checkType) || isGenericIndexType(checkType);
+                var checkTypeInstantiable = isGenericType(checkType);
                 var extendsType = instantiateType(unwrapNondistributiveConditionalTuple(root, root.extendsType), mapper);
                 if (checkType === wildcardType || extendsType === wildcardType) {
                     return wildcardType;
@@ -58544,7 +59713,7 @@
                 // Instantiate the extends type including inferences for 'infer T' type parameters
                 var inferredExtendsType = combinedMapper ? instantiateType(unwrapNondistributiveConditionalTuple(root, root.extendsType), combinedMapper) : extendsType;
                 // We attempt to resolve the conditional type only when the check and extends types are non-generic
-                if (!checkTypeInstantiable && !isGenericObjectType(inferredExtendsType) && !isGenericIndexType(inferredExtendsType)) {
+                if (!checkTypeInstantiable && !isGenericType(inferredExtendsType)) {
                     // Return falseType for a definitely false extends check. We check an instantiations of the two
                     // types with type parameters mapped to the wildcard type, the most permissive instantiations
                     // possible (the wildcard type is assignable to and from all types). If those are not related,
@@ -58744,7 +59913,7 @@
         }
         function getAliasSymbolForTypeNode(node) {
             var host = node.parent;
-            while (ts.isParenthesizedTypeNode(host) || ts.isJSDocTypeExpression(host) || ts.isTypeOperatorNode(host) && host.operator === 142 /* ReadonlyKeyword */) {
+            while (ts.isParenthesizedTypeNode(host) || ts.isJSDocTypeExpression(host) || ts.isTypeOperatorNode(host) && host.operator === 143 /* ReadonlyKeyword */) {
                 host = host.parent;
             }
             return ts.isTypeAlias(host) ? getSymbolOfNode(host) : undefined;
@@ -58759,16 +59928,19 @@
             return isEmptyObjectType(type) || !!(type.flags & (65536 /* Null */ | 32768 /* Undefined */ | 528 /* BooleanLike */ | 296 /* NumberLike */ | 2112 /* BigIntLike */ | 402653316 /* StringLike */ | 1056 /* EnumLike */ | 67108864 /* NonPrimitive */ | 4194304 /* Index */));
         }
         function tryMergeUnionOfObjectTypeAndEmptyObject(type, readonly) {
+            if (!(type.flags & 1048576 /* Union */)) {
+                return type;
+            }
             if (ts.every(type.types, isEmptyObjectTypeOrSpreadsIntoEmptyObject)) {
                 return ts.find(type.types, isEmptyObjectType) || emptyObjectType;
             }
             var firstType = ts.find(type.types, function (t) { return !isEmptyObjectTypeOrSpreadsIntoEmptyObject(t); });
             if (!firstType) {
-                return undefined;
+                return type;
             }
-            var secondType = firstType && ts.find(type.types, function (t) { return t !== firstType && !isEmptyObjectTypeOrSpreadsIntoEmptyObject(t); });
+            var secondType = ts.find(type.types, function (t) { return t !== firstType && !isEmptyObjectTypeOrSpreadsIntoEmptyObject(t); });
             if (secondType) {
-                return undefined;
+                return type;
             }
             return getAnonymousPartialType(firstType);
             function getAnonymousPartialType(type) {
@@ -58783,14 +59955,14 @@
                         var isSetonlyAccessor = prop.flags & 65536 /* SetAccessor */ && !(prop.flags & 32768 /* GetAccessor */);
                         var flags = 4 /* Property */ | 16777216 /* Optional */;
                         var result = createSymbol(flags, prop.escapedName, getIsLateCheckFlag(prop) | (readonly ? 8 /* Readonly */ : 0));
-                        result.type = isSetonlyAccessor ? undefinedType : getUnionType([getTypeOfSymbol(prop), undefinedType]);
+                        result.type = isSetonlyAccessor ? undefinedType : addOptionality(getTypeOfSymbol(prop), /*isProperty*/ true);
                         result.declarations = prop.declarations;
                         result.nameType = getSymbolLinks(prop).nameType;
                         result.syntheticOrigin = prop;
                         members.set(prop.escapedName, result);
                     }
                 }
-                var spread = createAnonymousType(type.symbol, members, ts.emptyArray, ts.emptyArray, getIndexInfoOfType(type, 0 /* String */), getIndexInfoOfType(type, 1 /* Number */));
+                var spread = createAnonymousType(type.symbol, members, ts.emptyArray, ts.emptyArray, getIndexInfosOfType(type));
                 spread.objectFlags |= 128 /* ObjectLiteral */ | 262144 /* ContainsObjectOrArrayLiteral */;
                 return spread;
             }
@@ -58813,20 +59985,14 @@
             if (right.flags & 131072 /* Never */) {
                 return left;
             }
+            left = tryMergeUnionOfObjectTypeAndEmptyObject(left, readonly);
             if (left.flags & 1048576 /* Union */) {
-                var merged = tryMergeUnionOfObjectTypeAndEmptyObject(left, readonly);
-                if (merged) {
-                    return getSpreadType(merged, right, symbol, objectFlags, readonly);
-                }
                 return checkCrossProductUnion([left, right])
                     ? mapType(left, function (t) { return getSpreadType(t, right, symbol, objectFlags, readonly); })
                     : errorType;
             }
+            right = tryMergeUnionOfObjectTypeAndEmptyObject(right, readonly);
             if (right.flags & 1048576 /* Union */) {
-                var merged = tryMergeUnionOfObjectTypeAndEmptyObject(right, readonly);
-                if (merged) {
-                    return getSpreadType(left, merged, symbol, objectFlags, readonly);
-                }
                 return checkCrossProductUnion([left, right])
                     ? mapType(right, function (t) { return getSpreadType(left, t, symbol, objectFlags, readonly); })
                     : errorType;
@@ -58852,17 +60018,7 @@
             }
             var members = ts.createSymbolTable();
             var skippedPrivateMembers = new ts.Set();
-            var stringIndexInfo;
-            var numberIndexInfo;
-            if (left === emptyObjectType) {
-                // for the first spread element, left === emptyObjectType, so take the right's string indexer
-                stringIndexInfo = getIndexInfoOfType(right, 0 /* String */);
-                numberIndexInfo = getIndexInfoOfType(right, 1 /* Number */);
-            }
-            else {
-                stringIndexInfo = unionSpreadIndexInfos(getIndexInfoOfType(left, 0 /* String */), getIndexInfoOfType(right, 0 /* String */));
-                numberIndexInfo = unionSpreadIndexInfos(getIndexInfoOfType(left, 1 /* Number */), getIndexInfoOfType(right, 1 /* Number */));
-            }
+            var indexInfos = left === emptyObjectType ? getIndexInfosOfType(right) : getUnionIndexInfos([left, right]);
             for (var _i = 0, _a = getPropertiesOfType(right); _i < _a.length; _i++) {
                 var rightProp = _a[_i];
                 if (ts.getDeclarationModifierFlagsFromSymbol(rightProp) & (8 /* Private */ | 16 /* Protected */)) {
@@ -58884,7 +60040,7 @@
                         var declarations = ts.concatenate(leftProp.declarations, rightProp.declarations);
                         var flags = 4 /* Property */ | (leftProp.flags & 16777216 /* Optional */);
                         var result = createSymbol(flags, leftProp.escapedName);
-                        result.type = getUnionType([getTypeOfSymbol(leftProp), getTypeWithFacts(rightType, 524288 /* NEUndefined */)]);
+                        result.type = getUnionType([getTypeOfSymbol(leftProp), removeMissingOrUndefinedType(rightType)]);
                         result.leftSpread = leftProp;
                         result.rightSpread = rightProp;
                         result.declarations = declarations;
@@ -58896,7 +60052,7 @@
                     members.set(leftProp.escapedName, getSpreadSymbol(leftProp, readonly));
                 }
             }
-            var spread = createAnonymousType(symbol, members, ts.emptyArray, ts.emptyArray, getIndexInfoWithReadonly(stringIndexInfo, readonly), getIndexInfoWithReadonly(numberIndexInfo, readonly));
+            var spread = createAnonymousType(symbol, members, ts.emptyArray, ts.emptyArray, ts.sameMap(indexInfos, function (info) { return getIndexInfoWithReadonly(info, readonly); }));
             spread.objectFlags |= 128 /* ObjectLiteral */ | 262144 /* ContainsObjectOrArrayLiteral */ | 4194304 /* ContainsSpread */ | objectFlags;
             return spread;
         }
@@ -58921,19 +60077,19 @@
             return result;
         }
         function getIndexInfoWithReadonly(info, readonly) {
-            return info && info.isReadonly !== readonly ? createIndexInfo(info.type, readonly, info.declaration) : info;
+            return info.isReadonly !== readonly ? createIndexInfo(info.keyType, info.type, readonly, info.declaration) : info;
         }
-        function createLiteralType(flags, value, symbol) {
+        function createLiteralType(flags, value, symbol, regularType) {
             var type = createType(flags);
             type.symbol = symbol;
             type.value = value;
+            type.regularType = regularType || type;
             return type;
         }
         function getFreshTypeOfLiteralType(type) {
             if (type.flags & 2944 /* Literal */) {
                 if (!type.freshType) {
-                    var freshType = createLiteralType(type.flags, type.value, type.symbol);
-                    freshType.regularType = type;
+                    var freshType = createLiteralType(type.flags, type.value, type.symbol, type);
                     freshType.freshType = freshType;
                     type.freshType = freshType;
                 }
@@ -58949,25 +60105,32 @@
         function isFreshLiteralType(type) {
             return !!(type.flags & 2944 /* Literal */) && type.freshType === type;
         }
-        function getLiteralType(value, enumId, symbol) {
-            // We store all literal types in a single map with keys of the form '#NNN' and '@SSS',
-            // where NNN is the text representation of a numeric literal and SSS are the characters
-            // of a string literal. For literal enum members we use 'EEE#NNN' and 'EEE@SSS', where
-            // EEE is a unique id for the containing enum type.
-            var qualifier = typeof value === "number" ? "#" : typeof value === "string" ? "@" : "n";
-            var key = (enumId ? enumId : "") + qualifier + (typeof value === "object" ? ts.pseudoBigIntToString(value) : value);
-            var type = literalTypes.get(key);
-            if (!type) {
-                var flags = (typeof value === "number" ? 256 /* NumberLiteral */ :
-                    typeof value === "string" ? 128 /* StringLiteral */ : 2048 /* BigIntLiteral */) |
-                    (enumId ? 1024 /* EnumLiteral */ : 0);
-                literalTypes.set(key, type = createLiteralType(flags, value, symbol));
-                type.regularType = type;
-            }
-            return type;
+        function getStringLiteralType(value) {
+            var type;
+            return stringLiteralTypes.get(value) ||
+                (stringLiteralTypes.set(value, type = createLiteralType(128 /* StringLiteral */, value)), type);
+        }
+        function getNumberLiteralType(value) {
+            var type;
+            return numberLiteralTypes.get(value) ||
+                (numberLiteralTypes.set(value, type = createLiteralType(256 /* NumberLiteral */, value)), type);
+        }
+        function getBigIntLiteralType(value) {
+            var type;
+            var key = ts.pseudoBigIntToString(value);
+            return bigIntLiteralTypes.get(key) ||
+                (bigIntLiteralTypes.set(key, type = createLiteralType(2048 /* BigIntLiteral */, value)), type);
+        }
+        function getEnumLiteralType(value, enumId, symbol) {
+            var type;
+            var qualifier = typeof value === "string" ? "@" : "#";
+            var key = enumId + qualifier + value;
+            var flags = 1024 /* EnumLiteral */ | (typeof value === "string" ? 128 /* StringLiteral */ : 256 /* NumberLiteral */);
+            return enumLiteralTypes.get(key) ||
+                (enumLiteralTypes.set(key, type = createLiteralType(flags, value, symbol)), type);
         }
         function getTypeFromLiteralTypeNode(node) {
-            if (node.literal.kind === 103 /* NullKeyword */) {
+            if (node.literal.kind === 104 /* NullKeyword */) {
                 return nullType;
             }
             var links = getNodeLinks(node);
@@ -58993,8 +60156,8 @@
         function getThisType(node) {
             var container = ts.getThisContainer(node, /*includeArrowFunctions*/ false);
             var parent = container && container.parent;
-            if (parent && (ts.isClassLike(parent) || parent.kind === 254 /* InterfaceDeclaration */)) {
-                if (!ts.hasSyntacticModifier(container, 32 /* Static */) &&
+            if (parent && (ts.isClassLike(parent) || parent.kind === 256 /* InterfaceDeclaration */)) {
+                if (!ts.isStatic(container) &&
                     (!ts.isConstructorDeclaration(container) || ts.isNodeDescendantOf(node, container.body))) {
                     return getDeclaredTypeOfClassOrInterface(getSymbolOfNode(parent)).thisType;
                 }
@@ -59028,17 +60191,17 @@
         }
         function getArrayElementTypeNode(node) {
             switch (node.kind) {
-                case 187 /* ParenthesizedType */:
+                case 189 /* ParenthesizedType */:
                     return getArrayElementTypeNode(node.type);
-                case 180 /* TupleType */:
+                case 182 /* TupleType */:
                     if (node.elements.length === 1) {
                         node = node.elements[0];
-                        if (node.kind === 182 /* RestType */ || node.kind === 193 /* NamedTupleMember */ && node.dotDotDotToken) {
+                        if (node.kind === 184 /* RestType */ || node.kind === 195 /* NamedTupleMember */ && node.dotDotDotToken) {
                             return getArrayElementTypeNode(node.type);
                         }
                     }
                     break;
-                case 179 /* ArrayType */:
+                case 181 /* ArrayType */:
                     return node.elementType;
             }
             return undefined;
@@ -59047,107 +60210,106 @@
             var links = getNodeLinks(node);
             return links.resolvedType || (links.resolvedType =
                 node.dotDotDotToken ? getTypeFromRestTypeNode(node) :
-                    node.questionToken && strictNullChecks ? getOptionalType(getTypeFromTypeNode(node.type)) :
-                        getTypeFromTypeNode(node.type));
+                    addOptionality(getTypeFromTypeNode(node.type), /*isProperty*/ true, !!node.questionToken));
         }
         function getTypeFromTypeNode(node) {
             return getConditionalFlowTypeOfType(getTypeFromTypeNodeWorker(node), node);
         }
         function getTypeFromTypeNodeWorker(node) {
             switch (node.kind) {
-                case 128 /* AnyKeyword */:
-                case 304 /* JSDocAllType */:
-                case 305 /* JSDocUnknownType */:
+                case 129 /* AnyKeyword */:
+                case 307 /* JSDocAllType */:
+                case 308 /* JSDocUnknownType */:
                     return anyType;
-                case 152 /* UnknownKeyword */:
+                case 153 /* UnknownKeyword */:
                     return unknownType;
-                case 147 /* StringKeyword */:
+                case 148 /* StringKeyword */:
                     return stringType;
-                case 144 /* NumberKeyword */:
+                case 145 /* NumberKeyword */:
                     return numberType;
-                case 155 /* BigIntKeyword */:
+                case 156 /* BigIntKeyword */:
                     return bigintType;
-                case 131 /* BooleanKeyword */:
+                case 132 /* BooleanKeyword */:
                     return booleanType;
-                case 148 /* SymbolKeyword */:
+                case 149 /* SymbolKeyword */:
                     return esSymbolType;
-                case 113 /* VoidKeyword */:
+                case 114 /* VoidKeyword */:
                     return voidType;
-                case 150 /* UndefinedKeyword */:
+                case 151 /* UndefinedKeyword */:
                     return undefinedType;
-                case 103 /* NullKeyword */:
+                case 104 /* NullKeyword */:
                     // TODO(rbuckton): `NullKeyword` is no longer a `TypeNode`, but we defensively allow it here because of incorrect casts in the Language Service.
                     return nullType;
-                case 141 /* NeverKeyword */:
+                case 142 /* NeverKeyword */:
                     return neverType;
-                case 145 /* ObjectKeyword */:
+                case 146 /* ObjectKeyword */:
                     return node.flags & 131072 /* JavaScriptFile */ && !noImplicitAny ? anyType : nonPrimitiveType;
-                case 136 /* IntrinsicKeyword */:
+                case 137 /* IntrinsicKeyword */:
                     return intrinsicMarkerType;
-                case 188 /* ThisType */:
-                case 107 /* ThisKeyword */:
+                case 190 /* ThisType */:
+                case 108 /* ThisKeyword */:
                     // TODO(rbuckton): `ThisKeyword` is no longer a `TypeNode`, but we defensively allow it here because of incorrect casts in the Language Service and because of `isPartOfTypeNode`.
                     return getTypeFromThisTypeNode(node);
-                case 192 /* LiteralType */:
+                case 194 /* LiteralType */:
                     return getTypeFromLiteralTypeNode(node);
-                case 174 /* TypeReference */:
+                case 176 /* TypeReference */:
                     return getTypeFromTypeReference(node);
-                case 173 /* TypePredicate */:
+                case 175 /* TypePredicate */:
                     return node.assertsModifier ? voidType : booleanType;
-                case 224 /* ExpressionWithTypeArguments */:
+                case 226 /* ExpressionWithTypeArguments */:
                     return getTypeFromTypeReference(node);
-                case 177 /* TypeQuery */:
+                case 179 /* TypeQuery */:
                     return getTypeFromTypeQueryNode(node);
-                case 179 /* ArrayType */:
-                case 180 /* TupleType */:
+                case 181 /* ArrayType */:
+                case 182 /* TupleType */:
                     return getTypeFromArrayOrTupleTypeNode(node);
-                case 181 /* OptionalType */:
+                case 183 /* OptionalType */:
                     return getTypeFromOptionalTypeNode(node);
-                case 183 /* UnionType */:
+                case 185 /* UnionType */:
                     return getTypeFromUnionTypeNode(node);
-                case 184 /* IntersectionType */:
+                case 186 /* IntersectionType */:
                     return getTypeFromIntersectionTypeNode(node);
-                case 306 /* JSDocNullableType */:
+                case 309 /* JSDocNullableType */:
                     return getTypeFromJSDocNullableTypeNode(node);
-                case 308 /* JSDocOptionalType */:
+                case 311 /* JSDocOptionalType */:
                     return addOptionality(getTypeFromTypeNode(node.type));
-                case 193 /* NamedTupleMember */:
+                case 195 /* NamedTupleMember */:
                     return getTypeFromNamedTupleTypeNode(node);
-                case 187 /* ParenthesizedType */:
-                case 307 /* JSDocNonNullableType */:
-                case 302 /* JSDocTypeExpression */:
+                case 189 /* ParenthesizedType */:
+                case 310 /* JSDocNonNullableType */:
+                case 304 /* JSDocTypeExpression */:
                     return getTypeFromTypeNode(node.type);
-                case 182 /* RestType */:
+                case 184 /* RestType */:
                     return getTypeFromRestTypeNode(node);
-                case 310 /* JSDocVariadicType */:
+                case 313 /* JSDocVariadicType */:
                     return getTypeFromJSDocVariadicType(node);
-                case 175 /* FunctionType */:
-                case 176 /* ConstructorType */:
-                case 178 /* TypeLiteral */:
-                case 314 /* JSDocTypeLiteral */:
-                case 309 /* JSDocFunctionType */:
-                case 315 /* JSDocSignature */:
+                case 177 /* FunctionType */:
+                case 178 /* ConstructorType */:
+                case 180 /* TypeLiteral */:
+                case 317 /* JSDocTypeLiteral */:
+                case 312 /* JSDocFunctionType */:
+                case 318 /* JSDocSignature */:
                     return getTypeFromTypeLiteralOrFunctionOrConstructorTypeNode(node);
-                case 189 /* TypeOperator */:
+                case 191 /* TypeOperator */:
                     return getTypeFromTypeOperatorNode(node);
-                case 190 /* IndexedAccessType */:
+                case 192 /* IndexedAccessType */:
                     return getTypeFromIndexedAccessTypeNode(node);
-                case 191 /* MappedType */:
+                case 193 /* MappedType */:
                     return getTypeFromMappedTypeNode(node);
-                case 185 /* ConditionalType */:
+                case 187 /* ConditionalType */:
                     return getTypeFromConditionalTypeNode(node);
-                case 186 /* InferType */:
+                case 188 /* InferType */:
                     return getTypeFromInferTypeNode(node);
-                case 194 /* TemplateLiteralType */:
+                case 196 /* TemplateLiteralType */:
                     return getTypeFromTemplateTypeNode(node);
-                case 196 /* ImportType */:
+                case 198 /* ImportType */:
                     return getTypeFromImportTypeNode(node);
                 // This function assumes that an identifier, qualified name, or property access expression is a type expression
                 // Callers should first ensure this by calling `isPartOfTypeNode`
                 // TODO(rbuckton): These aren't valid TypeNodes, but we treat them as such because of `isPartOfTypeNode`, which returns `true` for things that aren't `TypeNode`s.
-                case 78 /* Identifier */:
-                case 158 /* QualifiedName */:
-                case 202 /* PropertyAccessExpression */:
+                case 79 /* Identifier */:
+                case 159 /* QualifiedName */:
+                case 204 /* PropertyAccessExpression */:
                     var symbol = getSymbolAtLocation(node);
                     return symbol ? getDeclaredTypeOfSymbol(symbol) : errorType;
                 default:
@@ -59177,6 +60339,9 @@
         function instantiateSignatures(signatures, mapper) {
             return instantiateList(signatures, mapper, instantiateSignature);
         }
+        function instantiateIndexInfos(indexInfos, mapper) {
+            return instantiateList(indexInfos, mapper, instantiateIndexInfo);
+        }
         function createTypeMapper(sources, targets) {
             return sources.length === 1 ? makeUnaryTypeMapper(sources[0], targets ? targets[0] : anyType) : makeArrayTypeMapper(sources, targets);
         }
@@ -59349,8 +60514,8 @@
             return type;
         }
         function maybeTypeParameterReference(node) {
-            return !(node.parent.kind === 174 /* TypeReference */ && node.parent.typeArguments && node === node.parent.typeName ||
-                node.parent.kind === 196 /* ImportType */ && node.parent.typeArguments && node === node.parent.qualifier);
+            return !(node.parent.kind === 176 /* TypeReference */ && node.parent.typeArguments && node === node.parent.typeName ||
+                node.parent.kind === 198 /* ImportType */ && node.parent.typeArguments && node === node.parent.qualifier);
         }
         function isTypeParameterPossiblyReferenced(tp, node) {
             // If the type parameter doesn't have exactly one declaration, if there are invening statement blocks
@@ -59359,7 +60524,7 @@
             if (tp.symbol && tp.symbol.declarations && tp.symbol.declarations.length === 1) {
                 var container = tp.symbol.declarations[0].parent;
                 for (var n = node; n !== container; n = n.parent) {
-                    if (!n || n.kind === 231 /* Block */ || n.kind === 185 /* ConditionalType */ && ts.forEachChild(n.extendsType, containsReference)) {
+                    if (!n || n.kind === 233 /* Block */ || n.kind === 187 /* ConditionalType */ && ts.forEachChild(n.extendsType, containsReference)) {
                         return true;
                     }
                 }
@@ -59368,15 +60533,15 @@
             return true;
             function containsReference(node) {
                 switch (node.kind) {
-                    case 188 /* ThisType */:
+                    case 190 /* ThisType */:
                         return !!tp.isThisType;
-                    case 78 /* Identifier */:
+                    case 79 /* Identifier */:
                         return !tp.isThisType && ts.isPartOfTypeNode(node) && maybeTypeParameterReference(node) &&
                             getTypeFromTypeNodeWorker(node) === tp; // use worker because we're looking for === equality
-                    case 177 /* TypeQuery */:
+                    case 179 /* TypeQuery */:
                         return true;
-                    case 166 /* MethodDeclaration */:
-                    case 165 /* MethodSignature */:
+                    case 167 /* MethodDeclaration */:
+                    case 166 /* MethodSignature */:
                         return !node.type && !!node.body ||
                             ts.some(node.typeParameters, containsReference) ||
                             ts.some(node.parameters, containsReference) ||
@@ -59459,7 +60624,7 @@
         function instantiateMappedTupleType(tupleType, mappedType, mapper) {
             var elementFlags = tupleType.target.elementFlags;
             var elementTypes = ts.map(getTypeArguments(tupleType), function (_, i) {
-                return instantiateMappedTypeTemplate(mappedType, getLiteralType("" + i), !!(elementFlags[i] & 2 /* Optional */), mapper);
+                return instantiateMappedTypeTemplate(mappedType, getStringLiteralType("" + i), !!(elementFlags[i] & 2 /* Optional */), mapper);
             });
             var modifiers = getMappedTypeModifiers(mappedType);
             var newTupleModifiers = modifiers & 4 /* IncludeOptional */ ? ts.map(elementFlags, function (f) { return f & 1 /* Required */ ? 2 /* Optional */ : f; }) :
@@ -59473,7 +60638,7 @@
             var templateMapper = appendTypeMapping(mapper, getTypeParameterFromMappedType(type), key);
             var propType = instantiateType(getTemplateTypeFromMappedType(type.target || type), templateMapper);
             var modifiers = getMappedTypeModifiers(type);
-            return strictNullChecks && modifiers & 4 /* IncludeOptional */ && !maybeTypeOfKind(propType, 32768 /* Undefined */ | 16384 /* Void */) ? getOptionalType(propType) :
+            return strictNullChecks && modifiers & 4 /* IncludeOptional */ && !maybeTypeOfKind(propType, 32768 /* Undefined */ | 16384 /* Void */) ? getOptionalType(propType, /*isProperty*/ true) :
                 strictNullChecks && modifiers & 8 /* ExcludeOptional */ && isOptional ? getTypeWithFacts(propType, 524288 /* NEUndefined */) :
                     propType;
         }
@@ -59592,7 +60757,7 @@
             if (flags & 8388608 /* IndexedAccess */) {
                 var newAliasSymbol = aliasSymbol || type.aliasSymbol;
                 var newAliasTypeArguments = aliasSymbol ? aliasTypeArguments : instantiateTypes(type.aliasTypeArguments, mapper);
-                return getIndexedAccessType(instantiateType(type.objectType, mapper), instantiateType(type.indexType, mapper), type.noUncheckedIndexedAccessCandidate, /*accessNode*/ undefined, newAliasSymbol, newAliasTypeArguments);
+                return getIndexedAccessType(instantiateType(type.objectType, mapper), instantiateType(type.indexType, mapper), type.accessFlags, /*accessNode*/ undefined, newAliasSymbol, newAliasTypeArguments);
             }
             if (flags & 16777216 /* Conditional */) {
                 return getConditionalTypeInstantiation(type, combineTypeMappers(type.mapper, mapper), aliasSymbol, aliasTypeArguments);
@@ -59648,40 +60813,40 @@
             return type.restrictiveInstantiation;
         }
         function instantiateIndexInfo(info, mapper) {
-            return info && createIndexInfo(instantiateType(info.type, mapper), info.isReadonly, info.declaration);
+            return createIndexInfo(info.keyType, instantiateType(info.type, mapper), info.isReadonly, info.declaration);
         }
         // Returns true if the given expression contains (at any level of nesting) a function or arrow expression
         // that is subject to contextual typing.
         function isContextSensitive(node) {
-            ts.Debug.assert(node.kind !== 166 /* MethodDeclaration */ || ts.isObjectLiteralMethod(node));
+            ts.Debug.assert(node.kind !== 167 /* MethodDeclaration */ || ts.isObjectLiteralMethod(node));
             switch (node.kind) {
-                case 209 /* FunctionExpression */:
-                case 210 /* ArrowFunction */:
-                case 166 /* MethodDeclaration */:
-                case 252 /* FunctionDeclaration */: // Function declarations can have context when annotated with a jsdoc @type
+                case 211 /* FunctionExpression */:
+                case 212 /* ArrowFunction */:
+                case 167 /* MethodDeclaration */:
+                case 254 /* FunctionDeclaration */: // Function declarations can have context when annotated with a jsdoc @type
                     return isContextSensitiveFunctionLikeDeclaration(node);
-                case 201 /* ObjectLiteralExpression */:
+                case 203 /* ObjectLiteralExpression */:
                     return ts.some(node.properties, isContextSensitive);
-                case 200 /* ArrayLiteralExpression */:
+                case 202 /* ArrayLiteralExpression */:
                     return ts.some(node.elements, isContextSensitive);
-                case 218 /* ConditionalExpression */:
+                case 220 /* ConditionalExpression */:
                     return isContextSensitive(node.whenTrue) ||
                         isContextSensitive(node.whenFalse);
-                case 217 /* BinaryExpression */:
+                case 219 /* BinaryExpression */:
                     return (node.operatorToken.kind === 56 /* BarBarToken */ || node.operatorToken.kind === 60 /* QuestionQuestionToken */) &&
                         (isContextSensitive(node.left) || isContextSensitive(node.right));
-                case 289 /* PropertyAssignment */:
+                case 291 /* PropertyAssignment */:
                     return isContextSensitive(node.initializer);
-                case 208 /* ParenthesizedExpression */:
+                case 210 /* ParenthesizedExpression */:
                     return isContextSensitive(node.expression);
-                case 282 /* JsxAttributes */:
+                case 284 /* JsxAttributes */:
                     return ts.some(node.properties, isContextSensitive) || ts.isJsxOpeningElement(node.parent) && ts.some(node.parent.parent.children, isContextSensitive);
-                case 281 /* JsxAttribute */: {
+                case 283 /* JsxAttribute */: {
                     // If there is no initializer, JSX attribute has a boolean value of true which is not context sensitive.
                     var initializer = node.initializer;
                     return !!initializer && isContextSensitive(initializer);
                 }
-                case 284 /* JsxExpression */: {
+                case 286 /* JsxExpression */: {
                     // It is possible to that node.expression is undefined (e.g <div x={} />)
                     var expression = node.expression;
                     return !!expression && isContextSensitive(expression);
@@ -59691,29 +60856,11 @@
         }
         function isContextSensitiveFunctionLikeDeclaration(node) {
             return (!ts.isFunctionDeclaration(node) || ts.isInJSFile(node) && !!getTypeForDeclarationFromJSDocComment(node)) &&
-                (hasContextSensitiveParameters(node) || hasContextSensitiveReturnExpression(node));
-        }
-        function hasContextSensitiveParameters(node) {
-            // Functions with type parameters are not context sensitive.
-            if (!node.typeParameters) {
-                // Functions with any parameters that lack type annotations are context sensitive.
-                if (ts.some(node.parameters, function (p) { return !ts.getEffectiveTypeAnnotationNode(p); })) {
-                    return true;
-                }
-                if (node.kind !== 210 /* ArrowFunction */) {
-                    // If the first parameter is not an explicit 'this' parameter, then the function has
-                    // an implicit 'this' parameter which is subject to contextual typing.
-                    var parameter = ts.firstOrUndefined(node.parameters);
-                    if (!(parameter && ts.parameterIsThisKeyword(parameter))) {
-                        return true;
-                    }
-                }
-            }
-            return false;
+                (ts.hasContextSensitiveParameters(node) || hasContextSensitiveReturnExpression(node));
         }
         function hasContextSensitiveReturnExpression(node) {
             // TODO(anhans): A block should be context-sensitive if it has a context-sensitive return value.
-            return !node.typeParameters && !ts.getEffectiveReturnTypeNode(node) && !!node.body && node.body.kind !== 231 /* Block */ && isContextSensitive(node.body);
+            return !node.typeParameters && !ts.getEffectiveReturnTypeNode(node) && !!node.body && node.body.kind !== 233 /* Block */ && isContextSensitive(node.body);
         }
         function isContextSensitiveFunctionOrObjectLiteralMethod(func) {
             return (ts.isInJSFile(func) && ts.isFunctionDeclaration(func) || isFunctionExpressionOrArrowFunction(func) || ts.isObjectLiteralMethod(func)) &&
@@ -59728,6 +60875,7 @@
                     result.properties = resolved.properties;
                     result.callSignatures = ts.emptyArray;
                     result.constructSignatures = ts.emptyArray;
+                    result.indexInfos = ts.emptyArray;
                     return result;
                 }
             }
@@ -59816,23 +60964,23 @@
                 return true;
             }
             switch (node.kind) {
-                case 284 /* JsxExpression */:
-                case 208 /* ParenthesizedExpression */:
+                case 286 /* JsxExpression */:
+                case 210 /* ParenthesizedExpression */:
                     return elaborateError(node.expression, source, target, relation, headMessage, containingMessageChain, errorOutputContainer);
-                case 217 /* BinaryExpression */:
+                case 219 /* BinaryExpression */:
                     switch (node.operatorToken.kind) {
-                        case 62 /* EqualsToken */:
+                        case 63 /* EqualsToken */:
                         case 27 /* CommaToken */:
                             return elaborateError(node.right, source, target, relation, headMessage, containingMessageChain, errorOutputContainer);
                     }
                     break;
-                case 201 /* ObjectLiteralExpression */:
+                case 203 /* ObjectLiteralExpression */:
                     return elaborateObjectLiteral(node, source, target, relation, containingMessageChain, errorOutputContainer);
-                case 200 /* ArrayLiteralExpression */:
+                case 202 /* ArrayLiteralExpression */:
                     return elaborateArrayLiteral(node, source, target, relation, containingMessageChain, errorOutputContainer);
-                case 282 /* JsxAttributes */:
+                case 284 /* JsxAttributes */:
                     return elaborateJsxComponents(node, source, target, relation, containingMessageChain, errorOutputContainer);
-                case 210 /* ArrowFunction */:
+                case 212 /* ArrowFunction */:
                     return elaborateArrowFunction(node, source, target, relation, containingMessageChain, errorOutputContainer);
             }
             return false;
@@ -59933,7 +61081,14 @@
                 if (!targetPropType || targetPropType.flags & 8388608 /* IndexedAccess */)
                     continue; // Don't elaborate on indexes on generic variables
                 var sourcePropType = getIndexedAccessTypeOrUndefined(source, nameType);
-                if (sourcePropType && !checkTypeRelatedTo(sourcePropType, targetPropType, relation, /*errorNode*/ undefined)) {
+                if (!sourcePropType)
+                    continue;
+                var propName = getPropertyNameFromIndex(nameType, /*accessNode*/ undefined);
+                var targetIsOptional = !!(propName && (getPropertyOfType(target, propName) || unknownSymbol).flags & 16777216 /* Optional */);
+                var sourceIsOptional = !!(propName && (getPropertyOfType(source, propName) || unknownSymbol).flags & 16777216 /* Optional */);
+                targetPropType = removeMissingType(targetPropType, targetIsOptional);
+                sourcePropType = removeMissingType(sourcePropType, targetIsOptional && sourceIsOptional);
+                if (!checkTypeRelatedTo(sourcePropType, targetPropType, relation, /*errorNode*/ undefined)) {
                     var elaborated = next && elaborateError(next, sourcePropType, targetPropType, relation, /*headMessage*/ undefined, containingMessageChain, errorOutputContainer);
                     if (elaborated) {
                         reportedError = true;
@@ -59954,9 +61109,7 @@
                             var targetProp = propertyName !== undefined ? getPropertyOfType(target, propertyName) : undefined;
                             var issuedElaboration = false;
                             if (!targetProp) {
-                                var indexInfo = isTypeAssignableToKind(nameType, 296 /* NumberLike */) && getIndexInfoOfType(target, 1 /* Number */) ||
-                                    getIndexInfoOfType(target, 0 /* String */) ||
-                                    undefined;
+                                var indexInfo = getApplicableIndexInfo(target, nameType);
                                 if (indexInfo && indexInfo.declaration && !ts.getSourceFileOfNode(indexInfo.declaration).hasNoDefaultLib) {
                                     issuedElaboration = true;
                                     ts.addRelatedInfo(reportedDiag, ts.createDiagnosticForNode(indexInfo.declaration, ts.Diagnostics.The_expected_type_comes_from_this_index_signature));
@@ -59987,9 +61140,9 @@
                     case 1:
                         if (!(_i < _a.length)) return [3 /*break*/, 4];
                         prop = _a[_i];
-                        if (ts.isJsxSpreadAttribute(prop))
+                        if (ts.isJsxSpreadAttribute(prop) || isHyphenatedJsxName(ts.idText(prop.name)))
                             return [3 /*break*/, 3];
-                        return [4 /*yield*/, { errorNode: prop.name, innerExpression: prop.initializer, nameType: getLiteralType(ts.idText(prop.name)) }];
+                        return [4 /*yield*/, { errorNode: prop.name, innerExpression: prop.initializer, nameType: getStringLiteralType(ts.idText(prop.name)) }];
                     case 2:
                         _b.sent();
                         _b.label = 3;
@@ -60013,7 +61166,7 @@
                     case 1:
                         if (!(i < node.children.length)) return [3 /*break*/, 5];
                         child = node.children[i];
-                        nameType = getLiteralType(i - memberOffset);
+                        nameType = getNumberLiteralType(i - memberOffset);
                         elem = getElaborationElementForJsxChild(child, nameType, getInvalidTextDiagnostic);
                         if (!elem) return [3 /*break*/, 3];
                         return [4 /*yield*/, elem];
@@ -60032,7 +61185,7 @@
         }
         function getElaborationElementForJsxChild(child, nameType, getInvalidTextDiagnostic) {
             switch (child.kind) {
-                case 284 /* JsxExpression */:
+                case 286 /* JsxExpression */:
                     // child is of the type of the expression
                     return { errorNode: child, innerExpression: child.expression, nameType: nameType };
                 case 11 /* JsxText */:
@@ -60041,9 +61194,9 @@
                     }
                     // child is a string
                     return { errorNode: child, innerExpression: undefined, nameType: nameType, errorMessage: getInvalidTextDiagnostic() };
-                case 274 /* JsxElement */:
-                case 275 /* JsxSelfClosingElement */:
-                case 278 /* JsxFragment */:
+                case 276 /* JsxElement */:
+                case 277 /* JsxSelfClosingElement */:
+                case 280 /* JsxFragment */:
                     // child is of type JSX.Element
                     return { errorNode: child, innerExpression: child, nameType: nameType };
                 default:
@@ -60057,7 +61210,7 @@
                 var containingElement = node.parent.parent;
                 var childPropName = getJsxElementChildrenPropertyName(getJsxNamespaceAt(node));
                 var childrenPropName = childPropName === undefined ? "children" : ts.unescapeLeadingUnderscores(childPropName);
-                var childrenNameType = getLiteralType(childrenPropName);
+                var childrenNameType = getStringLiteralType(childrenPropName);
                 var childrenTargetType = getIndexedAccessType(target, childrenNameType);
                 var validChildren = ts.getSemanticJsxChildren(containingElement.children);
                 if (!ts.length(validChildren)) {
@@ -60112,7 +61265,7 @@
                     var tagNameText = ts.getTextOfNode(node.parent.tagName);
                     var childPropName = getJsxElementChildrenPropertyName(getJsxNamespaceAt(node));
                     var childrenPropName = childPropName === undefined ? "children" : ts.unescapeLeadingUnderscores(childPropName);
-                    var childrenTargetType = getIndexedAccessType(target, getLiteralType(childrenPropName));
+                    var childrenTargetType = getIndexedAccessType(target, getStringLiteralType(childrenPropName));
                     var diagnostic = ts.Diagnostics._0_components_don_t_accept_text_as_child_elements_Text_in_JSX_has_the_type_string_but_the_expected_type_of_1_is_2;
                     invalidTextDiagnostic = __assign(__assign({}, diagnostic), { key: "!!ALREADY FORMATTED!!", message: ts.formatMessage(/*_dummy*/ undefined, diagnostic, tagNameText, childrenPropName, typeToString(childrenTargetType)) });
                 }
@@ -60137,7 +61290,7 @@
                         elem = node.elements[i];
                         if (ts.isOmittedExpression(elem))
                             return [3 /*break*/, 3];
-                        nameType = getLiteralType(i);
+                        nameType = getNumberLiteralType(i);
                         return [4 /*yield*/, { errorNode: elem, innerExpression: elem, nameType: nameType }];
                     case 2:
                         _a.sent();
@@ -60191,11 +61344,11 @@
                         }
                         _b = prop.kind;
                         switch (_b) {
-                            case 169 /* SetAccessor */: return [3 /*break*/, 2];
-                            case 168 /* GetAccessor */: return [3 /*break*/, 2];
-                            case 166 /* MethodDeclaration */: return [3 /*break*/, 2];
-                            case 290 /* ShorthandPropertyAssignment */: return [3 /*break*/, 2];
-                            case 289 /* PropertyAssignment */: return [3 /*break*/, 4];
+                            case 171 /* SetAccessor */: return [3 /*break*/, 2];
+                            case 170 /* GetAccessor */: return [3 /*break*/, 2];
+                            case 167 /* MethodDeclaration */: return [3 /*break*/, 2];
+                            case 292 /* ShorthandPropertyAssignment */: return [3 /*break*/, 2];
+                            case 291 /* PropertyAssignment */: return [3 /*break*/, 4];
                         }
                         return [3 /*break*/, 6];
                     case 2: return [4 /*yield*/, { errorNode: prop.name, innerExpression: undefined, nameType: type }];
@@ -60272,8 +61425,8 @@
                 return 0 /* False */;
             }
             var kind = target.declaration ? target.declaration.kind : 0 /* Unknown */;
-            var strictVariance = !(checkMode & 3 /* Callback */) && strictFunctionTypes && kind !== 166 /* MethodDeclaration */ &&
-                kind !== 165 /* MethodSignature */ && kind !== 167 /* Constructor */;
+            var strictVariance = !(checkMode & 3 /* Callback */) && strictFunctionTypes && kind !== 167 /* MethodDeclaration */ &&
+                kind !== 166 /* MethodSignature */ && kind !== 169 /* Constructor */;
             var result = -1 /* True */;
             var sourceThisType = getThisTypeOfSignature(source);
             if (sourceThisType && sourceThisType !== voidType) {
@@ -60407,8 +61560,7 @@
                 t.properties.length === 0 &&
                 t.callSignatures.length === 0 &&
                 t.constructSignatures.length === 0 &&
-                !t.stringIndexInfo &&
-                !t.numberIndexInfo;
+                t.indexInfos.length === 0;
         }
         function isEmptyObjectType(type) {
             return type.flags & 524288 /* Object */ ? !isGenericMappedType(type) && isEmptyResolvedType(resolveStructuredTypeMembers(type)) :
@@ -60422,7 +61574,7 @@
                 type.symbol && type.symbol.flags & 2048 /* TypeLiteral */ && getMembersOfSymbol(type.symbol).size === 0));
         }
         function isStringIndexSignatureOnlyType(type) {
-            return type.flags & 524288 /* Object */ && !isGenericMappedType(type) && getPropertiesOfType(type).length === 0 && getIndexInfoOfType(type, 0 /* String */) && !getIndexInfoOfType(type, 1 /* Number */) ||
+            return type.flags & 524288 /* Object */ && !isGenericMappedType(type) && getPropertiesOfType(type).length === 0 && getIndexInfosOfType(type).length === 1 && !!getIndexInfoOfType(type, stringType) ||
                 type.flags & 3145728 /* UnionOrIntersection */ && ts.every(type.types, isStringIndexSignatureOnlyType) ||
                 false;
         }
@@ -60527,9 +61679,10 @@
                 }
             }
             else {
-                if (!(source.flags & 3145728 /* UnionOrIntersection */) && !(target.flags & 3145728 /* UnionOrIntersection */) &&
-                    source.flags !== target.flags && !(source.flags & 469237760 /* Substructure */))
+                if (source.flags !== target.flags)
                     return false;
+                if (source.flags & 67358815 /* Singleton */)
+                    return true;
             }
             if (source.flags & 524288 /* Object */ && target.flags & 524288 /* Object */) {
                 var related = relation.get(getRelationKey(source, target, 0 /* None */, relation));
@@ -60543,7 +61696,7 @@
             return false;
         }
         function isIgnoredJsxProperty(source, sourceProp) {
-            return ts.getObjectFlags(source) & 2048 /* JsxAttributes */ && !isUnhyphenatedJsxName(sourceProp.escapedName);
+            return ts.getObjectFlags(source) & 2048 /* JsxAttributes */ && isHyphenatedJsxName(sourceProp.escapedName);
         }
         function getNormalizedType(type, writing) {
             while (true) {
@@ -60620,7 +61773,7 @@
                 }
                 var diag = ts.createDiagnosticForNodeFromMessageChain(errorNode, errorInfo, relatedInformation);
                 if (relatedInfo) {
-                    ts.addRelatedInfo.apply(void 0, __spreadArray([diag], relatedInfo));
+                    ts.addRelatedInfo.apply(void 0, __spreadArray([diag], relatedInfo, false));
                 }
                 if (errorOutputContainer) {
                     (errorOutputContainer.errors || (errorOutputContainer.errors = [])).push(diag);
@@ -60663,7 +61816,7 @@
                     reportError.apply(void 0, stack[0]);
                     if (info) {
                         // Actually do the last relation error
-                        reportRelationError.apply(void 0, __spreadArray([/*headMessage*/ undefined], info));
+                        reportRelationError.apply(void 0, __spreadArray([/*headMessage*/ undefined], info, false));
                     }
                     return;
                 }
@@ -60752,12 +61905,12 @@
                     var _b = secondaryRootErrors_1[_i], msg = _b[0], args = _b.slice(1);
                     var originalValue = msg.elidedInCompatabilityPyramid;
                     msg.elidedInCompatabilityPyramid = false; // Temporarily override elision to ensure error is reported
-                    reportError.apply(void 0, __spreadArray([msg], args));
+                    reportError.apply(void 0, __spreadArray([msg], args, false));
                     msg.elidedInCompatabilityPyramid = originalValue;
                 }
                 if (info) {
                     // Actually do the last relation error
-                    reportRelationError.apply(void 0, __spreadArray([/*headMessage*/ undefined], info));
+                    reportRelationError.apply(void 0, __spreadArray([/*headMessage*/ undefined], info, false));
                 }
             }
             function reportError(message, arg0, arg1, arg2, arg3) {
@@ -61078,12 +62231,12 @@
                 }
             }
             function isIdenticalTo(source, target) {
-                var flags = source.flags & target.flags;
-                if (!(flags & 469237760 /* Substructure */)) {
+                if (source.flags !== target.flags)
                     return 0 /* False */;
-                }
+                if (source.flags & 67358815 /* Singleton */)
+                    return -1 /* True */;
                 traceUnionsOrIntersectionsTooLarge(source, target);
-                if (flags & 3145728 /* UnionOrIntersection */) {
+                if (source.flags & 3145728 /* UnionOrIntersection */) {
                     var result_7 = eachTypeRelatedToSomeType(source, target);
                     if (result_7) {
                         result_7 &= eachTypeRelatedToSomeType(target, source);
@@ -61094,9 +62247,10 @@
             }
             function getTypeOfPropertyInTypes(types, name) {
                 var appendPropType = function (propTypes, type) {
+                    var _a;
                     type = getApparentType(type);
                     var prop = type.flags & 3145728 /* UnionOrIntersection */ ? getPropertyOfUnionOrIntersectionType(type, name) : getPropertyOfObjectType(type, name);
-                    var propType = prop && getTypeOfSymbol(prop) || isNumericLiteralName(name) && getIndexTypeOfType(type, 1 /* Number */) || getIndexTypeOfType(type, 0 /* String */) || undefinedType;
+                    var propType = prop && getTypeOfSymbol(prop) || ((_a = getApplicableIndexInfoForName(type, name)) === null || _a === void 0 ? void 0 : _a.type) || undefinedType;
                     return ts.append(propTypes, propType);
                 };
                 return getUnionType(ts.reduceLeft(types, appendPropType, /*initial*/ undefined) || ts.emptyArray);
@@ -61117,7 +62271,7 @@
                     reducedTarget = findMatchingDiscriminantType(source, target, isRelatedTo) || filterPrimitivesIfContainsNonPrimitive(target);
                     checkTypes = reducedTarget.flags & 1048576 /* Union */ ? reducedTarget.types : [reducedTarget];
                 }
-                var _loop_16 = function (prop) {
+                var _loop_18 = function (prop) {
                     if (shouldCheckAsExcessProperty(prop, source.symbol) && !isIgnoredJsxProperty(source, prop)) {
                         if (!isKnownProperty(reducedTarget, prop.escapedName, isComparingJsxAttributes)) {
                             if (reportErrors) {
@@ -61180,7 +62334,7 @@
                 };
                 for (var _i = 0, _b = getPropertiesOfType(source); _i < _b.length; _i++) {
                     var prop = _b[_i];
-                    var state_5 = _loop_16(prop);
+                    var state_5 = _loop_18(prop);
                     if (typeof state_5 === "object")
                         return state_5.value;
                 }
@@ -61492,7 +62646,7 @@
                     // parameter 'T extends 1 | 2', the intersection 'T & 1' should be reduced to '1' such that it doesn't
                     // appear to be comparable to '2'.
                     if (relation === comparableRelation && target.flags & 131068 /* Primitive */) {
-                        var constraints = ts.sameMap(source.types, function (t) { return t.flags & 131068 /* Primitive */ ? t : getBaseConstraintOfType(t) || unknownType; });
+                        var constraints = ts.sameMap(source.types, getBaseConstraintOrType);
                         if (constraints !== source.types) {
                             source = getIntersectionType(constraints);
                             if (!(source.flags & 2097152 /* Intersection */)) {
@@ -61636,8 +62790,8 @@
                         var baseObjectType = getBaseConstraintOfType(objectType) || objectType;
                         var baseIndexType = getBaseConstraintOfType(indexType) || indexType;
                         if (!isGenericObjectType(baseObjectType) && !isGenericIndexType(baseIndexType)) {
-                            var accessFlags = 2 /* Writing */ | (baseObjectType !== objectType ? 1 /* NoIndexSignatures */ : 0);
-                            var constraint = getIndexedAccessTypeOrUndefined(baseObjectType, baseIndexType, target.noUncheckedIndexedAccessCandidate, /*accessNode*/ undefined, accessFlags);
+                            var accessFlags = 4 /* Writing */ | (baseObjectType !== objectType ? 2 /* NoIndexSignatures */ : 0);
+                            var constraint = getIndexedAccessTypeOrUndefined(baseObjectType, baseIndexType, accessFlags);
                             if (constraint) {
                                 if (reportErrors && originalErrorInfo) {
                                     // create a new chain for the constraint error
@@ -61861,7 +63015,7 @@
                         return 0 /* False */;
                     }
                     if (ts.getObjectFlags(source) & 4 /* Reference */ && ts.getObjectFlags(target) & 4 /* Reference */ && source.target === target.target &&
-                        !(ts.getObjectFlags(source) & 4096 /* MarkerType */ || ts.getObjectFlags(target) & 4096 /* MarkerType */)) {
+                        !isTupleType(source) && !(ts.getObjectFlags(source) & 4096 /* MarkerType */ || ts.getObjectFlags(target) & 4096 /* MarkerType */)) {
                         // We have type references to the same generic type, and the type references are not marker
                         // type references (which are intended by be compared structurally). Obtain the variance
                         // information for the type parameters and relate the type arguments accordingly.
@@ -61879,7 +63033,7 @@
                     }
                     else if (isReadonlyArrayType(target) ? isArrayType(source) || isTupleType(source) : isArrayType(target) && isTupleType(source) && !source.target.readonly) {
                         if (relation !== identityRelation) {
-                            return isRelatedTo(getIndexTypeOfType(source, 1 /* Number */) || anyType, getIndexTypeOfType(target, 1 /* Number */) || anyType, reportErrors);
+                            return isRelatedTo(getIndexTypeOfType(source, numberType) || anyType, getIndexTypeOfType(target, numberType) || anyType, reportErrors);
                         }
                         else {
                             // By flags alone, we know that the `target` is a readonly array while the source is a normal array or tuple
@@ -61906,10 +63060,7 @@
                             if (result) {
                                 result &= signaturesRelatedTo(source, target, 1 /* Construct */, reportStructuralErrors);
                                 if (result) {
-                                    result &= indexTypesRelatedTo(source, target, 0 /* String */, sourceIsPrimitive, reportStructuralErrors, intersectionState);
-                                    if (result) {
-                                        result &= indexTypesRelatedTo(source, target, 1 /* Number */, sourceIsPrimitive, reportStructuralErrors, intersectionState);
-                                    }
+                                    result &= indexSignaturesRelatedTo(source, target, sourceIsPrimitive, reportStructuralErrors, intersectionState);
                                 }
                             }
                         }
@@ -62035,7 +63186,7 @@
                 var numCombinations = 1;
                 for (var _i = 0, sourcePropertiesFiltered_1 = sourcePropertiesFiltered; _i < sourcePropertiesFiltered_1.length; _i++) {
                     var sourceProperty = sourcePropertiesFiltered_1[_i];
-                    numCombinations *= countTypes(getTypeOfSymbol(sourceProperty));
+                    numCombinations *= countTypes(getNonMissingTypeOfSymbol(sourceProperty));
                     if (numCombinations > 25) {
                         // We've reached the complexity limit.
                         ts.tracing === null || ts.tracing === void 0 ? void 0 : ts.tracing.instant("checkTypes" /* CheckTypes */, "typeRelatedToDiscriminatedType_DepthLimit", { sourceId: source.id, targetId: target.id, numCombinations: numCombinations });
@@ -62047,7 +63198,7 @@
                 var excludedProperties = new ts.Set();
                 for (var i = 0; i < sourcePropertiesFiltered.length; i++) {
                     var sourceProperty = sourcePropertiesFiltered[i];
-                    var sourcePropertyType = getTypeOfSymbol(sourceProperty);
+                    var sourcePropertyType = getNonMissingTypeOfSymbol(sourceProperty);
                     sourceDiscriminantTypes[i] = sourcePropertyType.flags & 1048576 /* Union */
                         ? sourcePropertyType.types
                         : [sourcePropertyType];
@@ -62057,11 +63208,11 @@
                 // constituents of 'target'. If any combination does not have a match then 'source' is not relatable.
                 var discriminantCombinations = ts.cartesianProduct(sourceDiscriminantTypes);
                 var matchingTypes = [];
-                var _loop_17 = function (combination) {
+                var _loop_19 = function (combination) {
                     var hasMatch = false;
                     outer: for (var _c = 0, _d = target.types; _c < _d.length; _c++) {
                         var type = _d[_c];
-                        var _loop_18 = function (i) {
+                        var _loop_20 = function (i) {
                             var sourceProperty = sourcePropertiesFiltered[i];
                             var targetProperty = getPropertyOfType(type, sourceProperty.escapedName);
                             if (!targetProperty)
@@ -62077,7 +63228,7 @@
                             }
                         };
                         for (var i = 0; i < sourcePropertiesFiltered.length; i++) {
-                            var state_7 = _loop_18(i);
+                            var state_7 = _loop_20(i);
                             switch (state_7) {
                                 case "continue-outer": continue outer;
                             }
@@ -62091,7 +63242,7 @@
                 };
                 for (var _a = 0, discriminantCombinations_1 = discriminantCombinations; _a < discriminantCombinations_1.length; _a++) {
                     var combination = discriminantCombinations_1[_a];
-                    var state_6 = _loop_17(combination);
+                    var state_6 = _loop_19(combination);
                     if (typeof state_6 === "object")
                         return state_6.value;
                 }
@@ -62104,15 +63255,12 @@
                         result &= signaturesRelatedTo(source, type, 0 /* Call */, /*reportStructuralErrors*/ false);
                         if (result) {
                             result &= signaturesRelatedTo(source, type, 1 /* Construct */, /*reportStructuralErrors*/ false);
-                            if (result) {
-                                result &= indexTypesRelatedTo(source, type, 0 /* String */, /*sourceIsPrimitive*/ false, /*reportStructuralErrors*/ false, 0 /* None */);
+                            if (result && !(isTupleType(source) && isTupleType(type))) {
                                 // Comparing numeric index types when both `source` and `type` are tuples is unnecessary as the
                                 // element types should be sufficiently covered by `propertiesRelatedTo`. It also causes problems
                                 // with index type assignability as the types for the excluded discriminants are still included
                                 // in the index type.
-                                if (result && !(isTupleType(source) && isTupleType(type))) {
-                                    result &= indexTypesRelatedTo(source, type, 1 /* Number */, /*sourceIsPrimitive*/ false, /*reportStructuralErrors*/ false, 0 /* None */);
-                                }
+                                result &= indexSignaturesRelatedTo(source, type, /*sourceIsPrimitive*/ false, /*reportStructuralErrors*/ false, 0 /* None */);
                             }
                         }
                     }
@@ -62140,46 +63288,9 @@
             }
             function isPropertySymbolTypeRelated(sourceProp, targetProp, getTypeOfSourceProperty, reportErrors, intersectionState) {
                 var targetIsOptional = strictNullChecks && !!(ts.getCheckFlags(targetProp) & 48 /* Partial */);
-                var source = getTypeOfSourceProperty(sourceProp);
-                if (ts.getCheckFlags(targetProp) & 65536 /* DeferredType */ && !getSymbolLinks(targetProp).type) {
-                    // Rather than resolving (and normalizing) the type, relate constituent-by-constituent without performing normalization or seconadary passes
-                    var links = getSymbolLinks(targetProp);
-                    ts.Debug.assertIsDefined(links.deferralParent);
-                    ts.Debug.assertIsDefined(links.deferralConstituents);
-                    var unionParent = !!(links.deferralParent.flags & 1048576 /* Union */);
-                    var result_12 = unionParent ? 0 /* False */ : -1 /* True */;
-                    var targetTypes = links.deferralConstituents;
-                    for (var _i = 0, targetTypes_3 = targetTypes; _i < targetTypes_3.length; _i++) {
-                        var targetType = targetTypes_3[_i];
-                        var related = isRelatedTo(source, targetType, /*reportErrors*/ false, /*headMessage*/ undefined, unionParent ? 0 : 2 /* Target */);
-                        if (!unionParent) {
-                            if (!related) {
-                                // Can't assign to a target individually - have to fallback to assigning to the _whole_ intersection (which forces normalization)
-                                return isRelatedTo(source, addOptionality(getTypeOfSymbol(targetProp), targetIsOptional), reportErrors);
-                            }
-                            result_12 &= related;
-                        }
-                        else {
-                            if (related) {
-                                return related;
-                            }
-                        }
-                    }
-                    if (unionParent && !result_12 && targetIsOptional) {
-                        result_12 = isRelatedTo(source, undefinedType);
-                    }
-                    if (unionParent && !result_12 && reportErrors) {
-                        // The easiest way to get the right errors here is to un-defer (which may be costly)
-                        // If it turns out this is too costly too often, we can replicate the error handling logic within
-                        // typeRelatedToSomeType without the discriminatable type branch (as that requires a manifest union
-                        // type on which to hand discriminable properties, which we are expressly trying to avoid here)
-                        return isRelatedTo(source, addOptionality(getTypeOfSymbol(targetProp), targetIsOptional), reportErrors);
-                    }
-                    return result_12;
-                }
-                else {
-                    return isRelatedTo(source, addOptionality(getTypeOfSymbol(targetProp), targetIsOptional), reportErrors, /*headMessage*/ undefined, intersectionState);
-                }
+                var effectiveTarget = addOptionality(getNonMissingTypeOfSymbol(targetProp), /*isProperty*/ false, targetIsOptional);
+                var effectiveSource = getTypeOfSourceProperty(sourceProp);
+                return isRelatedTo(effectiveSource, effectiveTarget, reportErrors, /*headMessage*/ undefined, intersectionState);
             }
             function propertyRelatedTo(source, target, sourceProp, targetProp, getTypeOfSourceProperty, reportErrors, intersectionState, skipOptional) {
                 var sourcePropFlags = ts.getDeclarationModifierFlagsFromSymbol(sourceProp);
@@ -62259,7 +63370,7 @@
                 }
                 if (props.length === 1) {
                     var propName = symbolToString(unmatchedProperty);
-                    reportError.apply(void 0, __spreadArray([ts.Diagnostics.Property_0_is_missing_in_type_1_but_required_in_type_2, propName], getTypeNamesForErrorDisplay(source, target)));
+                    reportError.apply(void 0, __spreadArray([ts.Diagnostics.Property_0_is_missing_in_type_1_but_required_in_type_2, propName], getTypeNamesForErrorDisplay(source, target), false));
                     if (ts.length(unmatchedProperty.declarations)) {
                         associateRelatedInfo(ts.createDiagnosticForNode(unmatchedProperty.declarations[0], ts.Diagnostics._0_is_declared_here, propName));
                     }
@@ -62308,7 +63419,7 @@
                             }
                             return 0 /* False */;
                         }
-                        if (!targetRestFlag && sourceRestFlag) {
+                        if (!targetRestFlag && (sourceRestFlag || targetArity < sourceArity)) {
                             if (reportErrors) {
                                 if (sourceMinLength < targetMinLength) {
                                     reportError(ts.Diagnostics.Target_requires_0_element_s_but_source_may_have_fewer, targetMinLength);
@@ -62356,13 +63467,14 @@
                                 }
                             }
                             var sourceType = !isTupleType(source) ? sourceTypeArguments[0] :
-                                i < startCount || i >= targetArity - endCount ? sourceTypeArguments[sourceIndex] :
+                                i < startCount || i >= targetArity - endCount ? removeMissingType(sourceTypeArguments[sourceIndex], !!(sourceFlags & targetFlags & 2 /* Optional */)) :
                                     getElementTypeOfSliceOfTupleType(source, startCount, endCount) || neverType;
                             var targetType = targetTypeArguments[i];
-                            var targetCheckType = sourceFlags & 8 /* Variadic */ && targetFlags & 4 /* Rest */ ? createArrayType(targetType) : targetType;
+                            var targetCheckType = sourceFlags & 8 /* Variadic */ && targetFlags & 4 /* Rest */ ? createArrayType(targetType) :
+                                removeMissingType(targetType, !!(targetFlags & 2 /* Optional */));
                             var related = isRelatedTo(sourceType, targetCheckType, reportErrors, /*headMessage*/ undefined, intersectionState);
                             if (!related) {
-                                if (reportErrors) {
+                                if (reportErrors && (targetArity > 1 || sourceArity > 1)) {
                                     if (i < startCount || i >= targetArity - endCount || sourceArity - startCount - endCount === 1) {
                                         reportIncompatibleError(ts.Diagnostics.Type_at_position_0_in_source_is_not_compatible_with_type_at_position_1_in_target, sourceIndex, i);
                                     }
@@ -62393,7 +63505,7 @@
                         var sourceProp = _a[_i];
                         if (!getPropertyOfObjectType(target, sourceProp.escapedName)) {
                             var sourceType = getTypeOfSymbol(sourceProp);
-                            if (!(sourceType === undefinedType || sourceType === undefinedWideningType || sourceType === optionalType)) {
+                            if (!(sourceType.flags & 32768 /* Undefined */)) {
                                 if (reportErrors) {
                                     reportError(ts.Diagnostics.Property_0_does_not_exist_on_type_1, symbolToString(sourceProp), typeToString(target));
                                 }
@@ -62412,7 +63524,7 @@
                     if (!(targetProp.flags & 4194304 /* Prototype */) && (!numericNamesOnly || isNumericLiteralName(name) || name === "length")) {
                         var sourceProp = getPropertyOfType(source, name);
                         if (sourceProp && sourceProp !== targetProp) {
-                            var related = propertyRelatedTo(source, target, sourceProp, targetProp, getTypeOfSymbol, reportErrors, intersectionState, relation === comparableRelation);
+                            var related = propertyRelatedTo(source, target, sourceProp, targetProp, getNonMissingTypeOfSymbol, reportErrors, intersectionState, relation === comparableRelation);
                             if (!related) {
                                 return 0 /* False */;
                             }
@@ -62506,7 +63618,7 @@
                     var targetSignature = ts.first(targetSignatures);
                     result = signatureRelatedTo(sourceSignature, targetSignature, eraseGenerics, reportErrors, incompatibleReporter(sourceSignature, targetSignature));
                     if (!result && reportErrors && kind === 1 /* Construct */ && (sourceObjectFlags & targetObjectFlags) &&
-                        (((_a = targetSignature.declaration) === null || _a === void 0 ? void 0 : _a.kind) === 167 /* Constructor */ || ((_b = sourceSignature.declaration) === null || _b === void 0 ? void 0 : _b.kind) === 167 /* Constructor */)) {
+                        (((_a = targetSignature.declaration) === null || _a === void 0 ? void 0 : _a.kind) === 169 /* Constructor */ || ((_b = sourceSignature.declaration) === null || _b === void 0 ? void 0 : _b.kind) === 169 /* Constructor */)) {
                         var constructSignatureToString = function (signature) {
                             return signatureToString(signature, /*enclosingDeclaration*/ undefined, 262144 /* WriteArrowStyleSignature */, kind);
                         };
@@ -62572,8 +63684,9 @@
                 }
                 return result;
             }
-            function eachPropertyRelatedTo(source, target, kind, reportErrors) {
+            function membersRelatedToIndexInfo(source, targetInfo, reportErrors) {
                 var result = -1 /* True */;
+                var keyType = targetInfo.keyType;
                 var props = source.flags & 2097152 /* Intersection */ ? getPropertiesOfUnionOrIntersectionType(source) : getPropertiesOfObjectType(source);
                 for (var _i = 0, props_2 = props; _i < props_2.length; _i++) {
                     var prop = props_2[_i];
@@ -62581,16 +63694,12 @@
                     if (isIgnoredJsxProperty(source, prop)) {
                         continue;
                     }
-                    var nameType = getSymbolLinks(prop).nameType;
-                    if (nameType && nameType.flags & 8192 /* UniqueESSymbol */) {
-                        continue;
-                    }
-                    if (kind === 0 /* String */ || isNumericLiteralName(prop.escapedName)) {
-                        var propType = getTypeOfSymbol(prop);
-                        var type = propType.flags & 32768 /* Undefined */ || !(kind === 0 /* String */ && prop.flags & 16777216 /* Optional */)
+                    if (isApplicableIndexType(getLiteralTypeFromProperty(prop, 8576 /* StringOrNumberLiteralOrUnique */), keyType)) {
+                        var propType = getNonMissingTypeOfSymbol(prop);
+                        var type = exactOptionalPropertyTypes || propType.flags & 32768 /* Undefined */ || keyType === numberType || !(prop.flags & 16777216 /* Optional */)
                             ? propType
                             : getTypeWithFacts(propType, 524288 /* NEUndefined */);
-                        var related = isRelatedTo(type, target, reportErrors);
+                        var related = isRelatedTo(type, targetInfo.type, reportErrors);
                         if (!related) {
                             if (reportErrors) {
                                 reportError(ts.Diagnostics.Property_0_is_incompatible_with_index_signature, symbolToString(prop));
@@ -62600,67 +63709,77 @@
                         result &= related;
                     }
                 }
+                for (var _a = 0, _b = getIndexInfosOfType(source); _a < _b.length; _a++) {
+                    var info = _b[_a];
+                    if (isApplicableIndexType(info.keyType, keyType)) {
+                        var related = indexInfoRelatedTo(info, targetInfo, reportErrors);
+                        if (!related) {
+                            return 0 /* False */;
+                        }
+                        result &= related;
+                    }
+                }
                 return result;
             }
-            function indexTypeRelatedTo(sourceType, targetType, reportErrors) {
-                var related = isRelatedTo(sourceType, targetType, reportErrors);
+            function indexInfoRelatedTo(sourceInfo, targetInfo, reportErrors) {
+                var related = isRelatedTo(sourceInfo.type, targetInfo.type, reportErrors);
                 if (!related && reportErrors) {
-                    reportError(ts.Diagnostics.Index_signatures_are_incompatible);
+                    if (sourceInfo.keyType === targetInfo.keyType) {
+                        reportError(ts.Diagnostics._0_index_signatures_are_incompatible, typeToString(sourceInfo.keyType));
+                    }
+                    else {
+                        reportError(ts.Diagnostics._0_and_1_index_signatures_are_incompatible, typeToString(sourceInfo.keyType), typeToString(targetInfo.keyType));
+                    }
                 }
                 return related;
             }
-            function indexTypesRelatedTo(source, target, kind, sourceIsPrimitive, reportErrors, intersectionState) {
+            function indexSignaturesRelatedTo(source, target, sourceIsPrimitive, reportErrors, intersectionState) {
                 if (relation === identityRelation) {
-                    return indexTypesIdenticalTo(source, target, kind);
+                    return indexSignaturesIdenticalTo(source, target);
                 }
-                var targetType = getIndexTypeOfType(target, kind);
-                if (!targetType) {
-                    return -1 /* True */;
-                }
-                if (targetType.flags & 1 /* Any */ && !sourceIsPrimitive) {
-                    // An index signature of type `any` permits assignment from everything but primitives,
-                    // provided that there is also a `string` index signature of type `any`.
-                    var stringIndexType = kind === 0 /* String */ ? targetType : getIndexTypeOfType(target, 0 /* String */);
-                    if (stringIndexType && stringIndexType.flags & 1 /* Any */) {
-                        return -1 /* True */;
+                var indexInfos = getIndexInfosOfType(target);
+                var targetHasStringIndex = ts.some(indexInfos, function (info) { return info.keyType === stringType; });
+                var result = -1 /* True */;
+                for (var _i = 0, indexInfos_3 = indexInfos; _i < indexInfos_3.length; _i++) {
+                    var targetInfo = indexInfos_3[_i];
+                    var related = !sourceIsPrimitive && targetHasStringIndex && targetInfo.type.flags & 1 /* Any */ ? -1 /* True */ :
+                        isGenericMappedType(source) && targetHasStringIndex ? isRelatedTo(getTemplateTypeFromMappedType(source), targetInfo.type, reportErrors) :
+                            typeRelatedToIndexInfo(source, targetInfo, reportErrors, intersectionState);
+                    if (!related) {
+                        return 0 /* False */;
                     }
+                    result &= related;
                 }
-                if (isGenericMappedType(source)) {
-                    // A generic mapped type { [P in K]: T } is related to a type with an index signature
-                    // { [x: string]: U }, and optionally with an index signature { [x: number]: V },
-                    // if T is related to U and V.
-                    return getIndexTypeOfType(target, 0 /* String */) ? isRelatedTo(getTemplateTypeFromMappedType(source), targetType, reportErrors) : 0 /* False */;
-                }
-                var indexType = getIndexTypeOfType(source, kind) || kind === 1 /* Number */ && getIndexTypeOfType(source, 0 /* String */);
-                if (indexType) {
-                    return indexTypeRelatedTo(indexType, targetType, reportErrors);
+                return result;
+            }
+            function typeRelatedToIndexInfo(source, targetInfo, reportErrors, intersectionState) {
+                var sourceInfo = getApplicableIndexInfo(source, targetInfo.keyType);
+                if (sourceInfo) {
+                    return indexInfoRelatedTo(sourceInfo, targetInfo, reportErrors);
                 }
                 if (!(intersectionState & 1 /* Source */) && isObjectTypeWithInferableIndex(source)) {
                     // Intersection constituents are never considered to have an inferred index signature
-                    var related = eachPropertyRelatedTo(source, targetType, kind, reportErrors);
-                    if (related && kind === 0 /* String */) {
-                        var numberIndexType = getIndexTypeOfType(source, 1 /* Number */);
-                        if (numberIndexType) {
-                            related &= indexTypeRelatedTo(numberIndexType, targetType, reportErrors);
-                        }
-                    }
-                    return related;
+                    return membersRelatedToIndexInfo(source, targetInfo, reportErrors);
                 }
                 if (reportErrors) {
-                    reportError(ts.Diagnostics.Index_signature_is_missing_in_type_0, typeToString(source));
+                    reportError(ts.Diagnostics.Index_signature_for_type_0_is_missing_in_type_1, typeToString(targetInfo.keyType), typeToString(source));
                 }
                 return 0 /* False */;
             }
-            function indexTypesIdenticalTo(source, target, indexKind) {
-                var targetInfo = getIndexInfoOfType(target, indexKind);
-                var sourceInfo = getIndexInfoOfType(source, indexKind);
-                if (!sourceInfo && !targetInfo) {
-                    return -1 /* True */;
+            function indexSignaturesIdenticalTo(source, target) {
+                var sourceInfos = getIndexInfosOfType(source);
+                var targetInfos = getIndexInfosOfType(target);
+                if (sourceInfos.length !== targetInfos.length) {
+                    return 0 /* False */;
                 }
-                if (sourceInfo && targetInfo && sourceInfo.isReadonly === targetInfo.isReadonly) {
-                    return isRelatedTo(sourceInfo.type, targetInfo.type);
+                for (var _i = 0, targetInfos_1 = targetInfos; _i < targetInfos_1.length; _i++) {
+                    var targetInfo = targetInfos_1[_i];
+                    var sourceInfo = getIndexInfoOfType(source, targetInfo.keyType);
+                    if (!(sourceInfo && isRelatedTo(sourceInfo.type, targetInfo.type) && sourceInfo.isReadonly === targetInfo.isReadonly)) {
+                        return 0 /* False */;
+                    }
                 }
-                return 0 /* False */;
+                return -1 /* True */;
             }
             function constructorVisibilitiesAreCompatible(sourceSignature, targetSignature, reportErrors) {
                 if (!sourceSignature.declaration || !targetSignature.declaration) {
@@ -62756,10 +63875,8 @@
         function isWeakType(type) {
             if (type.flags & 524288 /* Object */) {
                 var resolved = resolveStructuredTypeMembers(type);
-                return resolved.callSignatures.length === 0 && resolved.constructSignatures.length === 0 &&
-                    !resolved.stringIndexInfo && !resolved.numberIndexInfo &&
-                    resolved.properties.length > 0 &&
-                    ts.every(resolved.properties, function (p) { return !!(p.flags & 16777216 /* Optional */); });
+                return resolved.callSignatures.length === 0 && resolved.constructSignatures.length === 0 && resolved.indexInfos.length === 0 &&
+                    resolved.properties.length > 0 && ts.every(resolved.properties, function (p) { return !!(p.flags & 16777216 /* Optional */); });
             }
             if (type.flags & 2097152 /* Intersection */) {
                 return ts.every(type.types, isWeakType);
@@ -62804,7 +63921,7 @@
                 // The emptyArray singleton is used to signal a recursive invocation.
                 cache.variances = ts.emptyArray;
                 variances = [];
-                var _loop_19 = function (tp) {
+                var _loop_21 = function (tp) {
                     var unmeasurable = false;
                     var unreliable = false;
                     var oldHandler = outofbandVarianceMarkerHandler;
@@ -62836,7 +63953,7 @@
                 };
                 for (var _i = 0, typeParameters_1 = typeParameters; _i < typeParameters_1.length; _i++) {
                     var tp = typeParameters_1[_i];
-                    _loop_19(tp);
+                    _loop_21(tp);
                 }
                 cache.variances = variances;
                 ts.tracing === null || ts.tracing === void 0 ? void 0 : ts.tracing.pop();
@@ -63146,8 +64263,8 @@
         }
         function literalTypesWithSameBaseType(types) {
             var commonBaseType;
-            for (var _i = 0, types_14 = types; _i < types_14.length; _i++) {
-                var t = types_14[_i];
+            for (var _i = 0, types_13 = types; _i < types_13.length; _i++) {
+                var t = types_13[_i];
                 var baseType = getBaseTypeOfLiteralType(t);
                 if (!commonBaseType) {
                     commonBaseType = baseType;
@@ -63208,6 +64325,14 @@
             }
             type.objectFlags |= 33554432 /* IdenticalBaseTypeCalculated */;
             var target = type.target;
+            if (ts.getObjectFlags(target) & 1 /* Class */) {
+                var baseTypeNode = getBaseTypeNodeOfClass(target);
+                // A base type expression may circularly reference the class itself (e.g. as an argument to function call), so we only
+                // check for base types specified as simple qualified names.
+                if (baseTypeNode && baseTypeNode.expression.kind !== 79 /* Identifier */ && baseTypeNode.expression.kind !== 204 /* PropertyAccessExpression */) {
+                    return undefined;
+                }
+            }
             var bases = getBaseTypes(target);
             if (bases.length !== 1) {
                 return undefined;
@@ -63222,9 +64347,12 @@
             type.objectFlags |= 67108864 /* IdenticalBaseTypeExists */;
             return type.cachedEquivalentBaseType = instantiatedBase;
         }
+        function isEmptyLiteralType(type) {
+            return strictNullChecks ? type === implicitNeverType : type === undefinedWideningType;
+        }
         function isEmptyArrayLiteralType(type) {
             var elementType = getElementTypeOfArrayType(type);
-            return strictNullChecks ? elementType === implicitNeverType : elementType === undefinedWideningType;
+            return !!elementType && isEmptyLiteralType(elementType);
         }
         function isTupleLikeType(type) {
             return isTupleType(type) || !!getPropertyOfType(type, "0");
@@ -63351,8 +64479,8 @@
         }
         function getFalsyFlagsOfTypes(types) {
             var result = 0;
-            for (var _i = 0, types_15 = types; _i < types_15.length; _i++) {
-                var t = types_15[_i];
+            for (var _i = 0, types_14 = types; _i < types_14.length; _i++) {
+                var t = types_14[_i];
                 result |= getFalsyFlags(t);
             }
             return result;
@@ -63400,9 +64528,10 @@
                     missing === 65536 /* Null */ ? getUnionType([type, nullType]) :
                         getUnionType([type, undefinedType, nullType]);
         }
-        function getOptionalType(type) {
+        function getOptionalType(type, isProperty) {
+            if (isProperty === void 0) { isProperty = false; }
             ts.Debug.assert(strictNullChecks);
-            return type.flags & 32768 /* Undefined */ ? type : getUnionType([type, undefinedType]);
+            return type.flags & 32768 /* Undefined */ ? type : getUnionType([type, isProperty ? missingType : undefinedType]);
         }
         function getGlobalNonNullableTypeInstantiation(type) {
             // First reduce away any constituents that are assignable to 'undefined' or 'null'. This not only eliminates
@@ -63423,11 +64552,8 @@
         function addOptionalTypeMarker(type) {
             return strictNullChecks ? getUnionType([type, optionalType]) : type;
         }
-        function isNotOptionalTypeMarker(type) {
-            return type !== optionalType;
-        }
         function removeOptionalTypeMarker(type) {
-            return strictNullChecks ? filterType(type, isNotOptionalTypeMarker) : type;
+            return strictNullChecks ? removeType(type, optionalType) : type;
         }
         function propagateOptionalTypeMarker(type, node, wasOptional) {
             return wasOptional ? ts.isOutermostOptionalChain(node) ? getOptionalType(type) : addOptionalTypeMarker(type) : type;
@@ -63437,6 +64563,15 @@
                 ts.isOptionalChain(expression) ? removeOptionalTypeMarker(exprType) :
                     exprType;
         }
+        function removeMissingType(type, isOptional) {
+            return exactOptionalPropertyTypes && isOptional ? removeType(type, missingType) : type;
+        }
+        function containsMissingType(type) {
+            return exactOptionalPropertyTypes && (type === missingType || type.flags & 1048576 /* Union */ && containsType(type.types, missingType));
+        }
+        function removeMissingOrUndefinedType(type) {
+            return exactOptionalPropertyTypes ? removeType(type, missingType) : getTypeWithFacts(type, 524288 /* NEUndefined */);
+        }
         /**
          * Is source potentially coercible to target type under `==`.
          * Assumes that `source` is a constituent of a union, hence
@@ -63510,7 +64645,7 @@
             }
             var resolved = type;
             var members = transformTypeOfMembers(type, getRegularTypeOfObjectLiteral);
-            var regularNew = createAnonymousType(resolved.symbol, members, resolved.callSignatures, resolved.constructSignatures, resolved.stringIndexInfo, resolved.numberIndexInfo);
+            var regularNew = createAnonymousType(resolved.symbol, members, resolved.callSignatures, resolved.constructSignatures, resolved.indexInfos);
             regularNew.flags = resolved.flags;
             regularNew.objectFlags |= resolved.objectFlags & ~16384 /* FreshLiteral */;
             type.regularType = regularNew;
@@ -63569,7 +64704,7 @@
             if (cached) {
                 return cached;
             }
-            var result = createSymbolWithType(prop, undefinedType);
+            var result = createSymbolWithType(prop, missingType);
             result.flags |= 16777216 /* Optional */;
             undefinedProperties.set(prop.escapedName, result);
             return result;
@@ -63588,9 +64723,7 @@
                     }
                 }
             }
-            var stringIndexInfo = getIndexInfoOfType(type, 0 /* String */);
-            var numberIndexInfo = getIndexInfoOfType(type, 1 /* Number */);
-            var result = createAnonymousType(type.symbol, members, ts.emptyArray, ts.emptyArray, stringIndexInfo && createIndexInfo(getWidenedType(stringIndexInfo.type), stringIndexInfo.isReadonly), numberIndexInfo && createIndexInfo(getWidenedType(numberIndexInfo.type), numberIndexInfo.isReadonly));
+            var result = createAnonymousType(type.symbol, members, ts.emptyArray, ts.emptyArray, ts.sameMap(getIndexInfosOfType(type), function (info) { return createIndexInfo(info.keyType, getWidenedType(info.type), info.isReadonly); }));
             result.objectFlags |= (ts.getObjectFlags(type) & (8192 /* JSLiteral */ | 524288 /* NonInferrableType */)); // Retain js literal flag through widening
             return result;
         }
@@ -63688,12 +64821,12 @@
             }
             var diagnostic;
             switch (declaration.kind) {
-                case 217 /* BinaryExpression */:
-                case 164 /* PropertyDeclaration */:
-                case 163 /* PropertySignature */:
+                case 219 /* BinaryExpression */:
+                case 165 /* PropertyDeclaration */:
+                case 164 /* PropertySignature */:
                     diagnostic = noImplicitAny ? ts.Diagnostics.Member_0_implicitly_has_an_1_type : ts.Diagnostics.Member_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage;
                     break;
-                case 161 /* Parameter */:
+                case 162 /* Parameter */:
                     var param = declaration;
                     if (ts.isIdentifier(param.name) &&
                         (ts.isCallSignatureDeclaration(param.parent) || ts.isMethodSignature(param.parent) || ts.isFunctionTypeNode(param.parent)) &&
@@ -63708,23 +64841,23 @@
                         noImplicitAny ? ts.Diagnostics.Rest_parameter_0_implicitly_has_an_any_type : ts.Diagnostics.Rest_parameter_0_implicitly_has_an_any_type_but_a_better_type_may_be_inferred_from_usage :
                         noImplicitAny ? ts.Diagnostics.Parameter_0_implicitly_has_an_1_type : ts.Diagnostics.Parameter_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage;
                     break;
-                case 199 /* BindingElement */:
+                case 201 /* BindingElement */:
                     diagnostic = ts.Diagnostics.Binding_element_0_implicitly_has_an_1_type;
                     if (!noImplicitAny) {
                         // Don't issue a suggestion for binding elements since the codefix doesn't yet support them.
                         return;
                     }
                     break;
-                case 309 /* JSDocFunctionType */:
+                case 312 /* JSDocFunctionType */:
                     error(declaration, ts.Diagnostics.Function_type_which_lacks_return_type_annotation_implicitly_has_an_0_return_type, typeAsString);
                     return;
-                case 252 /* FunctionDeclaration */:
-                case 166 /* MethodDeclaration */:
-                case 165 /* MethodSignature */:
-                case 168 /* GetAccessor */:
-                case 169 /* SetAccessor */:
-                case 209 /* FunctionExpression */:
-                case 210 /* ArrowFunction */:
+                case 254 /* FunctionDeclaration */:
+                case 167 /* MethodDeclaration */:
+                case 166 /* MethodSignature */:
+                case 170 /* GetAccessor */:
+                case 171 /* SetAccessor */:
+                case 211 /* FunctionExpression */:
+                case 212 /* ArrowFunction */:
                     if (noImplicitAny && !declaration.name) {
                         if (wideningKind === 3 /* GeneratorYield */) {
                             error(declaration, ts.Diagnostics.Generator_implicitly_has_yield_type_0_because_it_does_not_yield_any_values_Consider_supplying_a_return_type_annotation, typeAsString);
@@ -63738,7 +64871,7 @@
                         wideningKind === 3 /* GeneratorYield */ ? ts.Diagnostics._0_which_lacks_return_type_annotation_implicitly_has_an_1_yield_type :
                             ts.Diagnostics._0_which_lacks_return_type_annotation_implicitly_has_an_1_return_type;
                     break;
-                case 191 /* MappedType */:
+                case 193 /* MappedType */:
                     if (noImplicitAny) {
                         error(declaration, ts.Diagnostics.Mapped_object_type_implicitly_has_an_any_template_type);
                     }
@@ -63880,8 +65013,8 @@
         }
         function isNonGenericTopLevelType(type) {
             if (type.aliasSymbol && !type.aliasTypeArguments) {
-                var declaration = ts.getDeclarationOfKind(type.aliasSymbol, 255 /* TypeAliasDeclaration */);
-                return !!(declaration && ts.findAncestor(declaration.parent, function (n) { return n.kind === 298 /* SourceFile */ ? true : n.kind === 257 /* ModuleDeclaration */ ? false : "quit"; }));
+                var declaration = ts.getDeclarationOfKind(type.aliasSymbol, 257 /* TypeAliasDeclaration */);
+                return !!(declaration && ts.findAncestor(declaration.parent, function (n) { return n.kind === 300 /* SourceFile */ ? true : n.kind === 259 /* ModuleDeclaration */ ? false : "quit"; }));
             }
             return false;
         }
@@ -63906,8 +65039,8 @@
                 }
                 members.set(name, literalProp);
             });
-            var indexInfo = type.flags & 4 /* String */ ? createIndexInfo(emptyObjectType, /*isReadonly*/ false) : undefined;
-            return createAnonymousType(undefined, members, ts.emptyArray, ts.emptyArray, indexInfo, undefined);
+            var indexInfos = type.flags & 4 /* String */ ? [createIndexInfo(stringType, emptyObjectType, /*isReadonly*/ false)] : ts.emptyArray;
+            return createAnonymousType(undefined, members, ts.emptyArray, ts.emptyArray, indexInfos);
         }
         /**
          * Infer a suitable input type for a homomorphic mapped type { [P in keyof T]: X }. We construct
@@ -63941,7 +65074,7 @@
         function createReverseMappedType(source, target, constraint) {
             // We consider a source type reverse mappable if it has a string index signature or if
             // it has one or more properties and is of a partially inferable type.
-            if (!(getIndexInfoOfType(source, 0 /* String */) || getPropertiesOfType(source).length !== 0 && isPartiallyInferableType(source))) {
+            if (!(getIndexInfoOfType(source, stringType) || getPropertiesOfType(source).length !== 0 && isPartiallyInferableType(source))) {
                 return undefined;
             }
             // For arrays and tuples we infer new arrays and tuples where the reverse mapping has been
@@ -64155,8 +65288,8 @@
             }
             function addMatch(s, p) {
                 var matchType = s === seg ?
-                    getLiteralType(getSourceText(s).slice(pos, p)) :
-                    getTemplateLiteralType(__spreadArray(__spreadArray([sourceTexts[seg].slice(pos)], sourceTexts.slice(seg + 1, s)), [getSourceText(s).slice(0, p)]), sourceTypes.slice(seg, s));
+                    getStringLiteralType(getSourceText(s).slice(pos, p)) :
+                    getTemplateLiteralType(__spreadArray(__spreadArray([sourceTexts[seg].slice(pos)], sourceTexts.slice(seg + 1, s), true), [getSourceText(s).slice(0, p)], false), sourceTypes.slice(seg, s));
                 matches.push(matchType);
                 seg = s;
                 pos = p;
@@ -64475,8 +65608,8 @@
             }
             function getSingleTypeVariableFromIntersectionTypes(types) {
                 var typeVariable;
-                for (var _i = 0, types_16 = types; _i < types_16.length; _i++) {
-                    var type = types_16[_i];
+                for (var _i = 0, types_15 = types; _i < types_15.length; _i++) {
+                    var type = types_15[_i];
                     var t = type.flags & 2097152 /* Intersection */ && ts.find(type.types, function (t) { return !!getInferenceInfoForType(t); });
                     if (!t || typeVariable && t !== typeVariable) {
                         return undefined;
@@ -64606,10 +65739,8 @@
                     // If no inferences can be made to K's constraint, infer from a union of the property types
                     // in the source to the template type X.
                     var propTypes = ts.map(getPropertiesOfType(source), getTypeOfSymbol);
-                    var stringIndexType = getIndexTypeOfType(source, 0 /* String */);
-                    var numberIndexInfo = getNonEnumNumberIndexInfo(source);
-                    var numberIndexType = numberIndexInfo && numberIndexInfo.type;
-                    inferFromTypes(getUnionType(ts.append(ts.append(propTypes, stringIndexType), numberIndexType)), getTemplateTypeFromMappedType(target));
+                    var indexTypes = ts.map(getIndexInfosOfType(source), function (info) { return info !== enumNumberIndexInfo ? info.type : neverType; });
+                    inferFromTypes(getUnionType(ts.concatenate(propTypes, indexTypes)), getTemplateTypeFromMappedType(target));
                     return true;
                 }
                 return false;
@@ -64756,7 +65887,7 @@
                     var saveBivariant = bivariant;
                     var kind = target.declaration ? target.declaration.kind : 0 /* Unknown */;
                     // Once we descend into a bivariant signature we remain bivariant for all nested inferences
-                    bivariant = bivariant || kind === 166 /* MethodDeclaration */ || kind === 165 /* MethodSignature */ || kind === 167 /* Constructor */;
+                    bivariant = bivariant || kind === 167 /* MethodDeclaration */ || kind === 166 /* MethodSignature */ || kind === 169 /* Constructor */;
                     applyToParameterTypes(source, target, inferFromContravariantTypes);
                     bivariant = saveBivariant;
                 }
@@ -64765,27 +65896,41 @@
             function inferFromIndexTypes(source, target) {
                 // Inferences across mapped type index signatures are pretty much the same a inferences to homomorphic variables
                 var priority = (ts.getObjectFlags(source) & ts.getObjectFlags(target) & 32 /* Mapped */) ? 8 /* HomomorphicMappedType */ : 0;
-                var targetStringIndexType = getIndexTypeOfType(target, 0 /* String */);
-                if (targetStringIndexType) {
-                    var sourceIndexType = getIndexTypeOfType(source, 0 /* String */) ||
-                        getImplicitIndexTypeOfType(source, 0 /* String */);
-                    if (sourceIndexType) {
-                        inferWithPriority(sourceIndexType, targetStringIndexType, priority);
+                var indexInfos = getIndexInfosOfType(target);
+                if (isObjectTypeWithInferableIndex(source)) {
+                    for (var _i = 0, indexInfos_4 = indexInfos; _i < indexInfos_4.length; _i++) {
+                        var targetInfo = indexInfos_4[_i];
+                        var propTypes = [];
+                        for (var _a = 0, _b = getPropertiesOfType(source); _a < _b.length; _a++) {
+                            var prop = _b[_a];
+                            if (isApplicableIndexType(getLiteralTypeFromProperty(prop, 8576 /* StringOrNumberLiteralOrUnique */), targetInfo.keyType)) {
+                                var propType = getTypeOfSymbol(prop);
+                                propTypes.push(prop.flags & 16777216 /* Optional */ ? removeMissingOrUndefinedType(propType) : propType);
+                            }
+                        }
+                        for (var _c = 0, _d = getIndexInfosOfType(source); _c < _d.length; _c++) {
+                            var info = _d[_c];
+                            if (isApplicableIndexType(info.keyType, targetInfo.keyType)) {
+                                propTypes.push(info.type);
+                            }
+                        }
+                        if (propTypes.length) {
+                            inferWithPriority(getUnionType(propTypes), targetInfo.type, priority);
+                        }
                     }
                 }
-                var targetNumberIndexType = getIndexTypeOfType(target, 1 /* Number */);
-                if (targetNumberIndexType) {
-                    var sourceIndexType = getIndexTypeOfType(source, 1 /* Number */) ||
-                        getIndexTypeOfType(source, 0 /* String */) ||
-                        getImplicitIndexTypeOfType(source, 1 /* Number */);
-                    if (sourceIndexType) {
-                        inferWithPriority(sourceIndexType, targetNumberIndexType, priority);
+                for (var _e = 0, indexInfos_5 = indexInfos; _e < indexInfos_5.length; _e++) {
+                    var targetInfo = indexInfos_5[_e];
+                    var sourceInfo = getApplicableIndexInfo(source, targetInfo.keyType);
+                    if (sourceInfo) {
+                        inferWithPriority(sourceInfo.type, targetInfo.type, priority);
                     }
                 }
             }
         }
         function isTypeOrBaseIdenticalTo(s, t) {
-            return isTypeIdenticalTo(s, t) || !!(t.flags & 4 /* String */ && s.flags & 128 /* StringLiteral */ || t.flags & 8 /* Number */ && s.flags & 256 /* NumberLiteral */);
+            return exactOptionalPropertyTypes && t === missingType ? s === t :
+                (isTypeIdenticalTo(s, t) || !!(t.flags & 4 /* String */ && s.flags & 128 /* StringLiteral */ || t.flags & 8 /* Number */ && s.flags & 256 /* NumberLiteral */));
         }
         function isTypeCloselyMatchedBy(s, t) {
             return !!(s.flags & 524288 /* Object */ && t.flags & 524288 /* Object */ && s.symbol && s.symbol === t.symbol ||
@@ -64938,7 +66083,7 @@
                 case "BigUint64Array":
                     return ts.Diagnostics.Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_1_or_later;
                 default:
-                    if (node.parent.kind === 290 /* ShorthandPropertyAssignment */) {
+                    if (node.parent.kind === 292 /* ShorthandPropertyAssignment */) {
                         return ts.Diagnostics.No_value_exists_in_scope_for_the_shorthand_property_0_Either_declare_one_or_provide_an_initializer;
                     }
                     else {
@@ -64951,7 +66096,8 @@
             if (!links.resolvedSymbol) {
                 links.resolvedSymbol = !ts.nodeIsMissing(node) &&
                     resolveName(node, node.escapedText, 111551 /* Value */ | 1048576 /* ExportValue */, getCannotFindNameDiagnosticForName(node), node, !ts.isWriteOnlyAccess(node), 
-                    /*excludeGlobals*/ false, ts.Diagnostics.Cannot_find_name_0_Did_you_mean_1) || unknownSymbol;
+                    /*excludeGlobals*/ false, 
+                    /*issueSuggestions*/ true) || unknownSymbol;
             }
             return links.resolvedSymbol;
         }
@@ -64959,7 +66105,7 @@
             // TypeScript 1.0 spec (April 2014): 3.6.3
             // A type query consists of the keyword typeof followed by an expression.
             // The expression is restricted to a single identifier or a sequence of identifiers separated by periods
-            return !!ts.findAncestor(node, function (n) { return n.kind === 177 /* TypeQuery */ ? true : n.kind === 78 /* Identifier */ || n.kind === 158 /* QualifiedName */ ? false : "quit"; });
+            return !!ts.findAncestor(node, function (n) { return n.kind === 179 /* TypeQuery */ ? true : n.kind === 79 /* Identifier */ || n.kind === 159 /* QualifiedName */ ? false : "quit"; });
         }
         // Return the flow cache key for a "dotted name" (i.e. a sequence of identifiers
         // separated by dots). The key consists of the id of the symbol referenced by the
@@ -64967,16 +66113,19 @@
         // The result is undefined if the reference isn't a dotted name.
         function getFlowCacheKey(node, declaredType, initialType, flowContainer) {
             switch (node.kind) {
-                case 78 /* Identifier */:
+                case 79 /* Identifier */:
                     var symbol = getResolvedSymbol(node);
                     return symbol !== unknownSymbol ? (flowContainer ? getNodeId(flowContainer) : "-1") + "|" + getTypeId(declaredType) + "|" + getTypeId(initialType) + "|" + getSymbolId(symbol) : undefined;
-                case 107 /* ThisKeyword */:
+                case 108 /* ThisKeyword */:
                     return "0|" + (flowContainer ? getNodeId(flowContainer) : "-1") + "|" + getTypeId(declaredType) + "|" + getTypeId(initialType);
-                case 226 /* NonNullExpression */:
-                case 208 /* ParenthesizedExpression */:
+                case 228 /* NonNullExpression */:
+                case 210 /* ParenthesizedExpression */:
                     return getFlowCacheKey(node.expression, declaredType, initialType, flowContainer);
-                case 202 /* PropertyAccessExpression */:
-                case 203 /* ElementAccessExpression */:
+                case 159 /* QualifiedName */:
+                    var left = getFlowCacheKey(node.left, declaredType, initialType, flowContainer);
+                    return left && left + "." + node.right.escapedText;
+                case 204 /* PropertyAccessExpression */:
+                case 205 /* ElementAccessExpression */:
                     var propName = getAccessedPropertyName(node);
                     if (propName !== undefined) {
                         var key = getFlowCacheKey(node.expression, declaredType, initialType, flowContainer);
@@ -64987,40 +66136,42 @@
         }
         function isMatchingReference(source, target) {
             switch (target.kind) {
-                case 208 /* ParenthesizedExpression */:
-                case 226 /* NonNullExpression */:
+                case 210 /* ParenthesizedExpression */:
+                case 228 /* NonNullExpression */:
                     return isMatchingReference(source, target.expression);
-                case 217 /* BinaryExpression */:
+                case 219 /* BinaryExpression */:
                     return (ts.isAssignmentExpression(target) && isMatchingReference(source, target.left)) ||
                         (ts.isBinaryExpression(target) && target.operatorToken.kind === 27 /* CommaToken */ && isMatchingReference(source, target.right));
             }
             switch (source.kind) {
-                case 227 /* MetaProperty */:
-                    return target.kind === 227 /* MetaProperty */
+                case 229 /* MetaProperty */:
+                    return target.kind === 229 /* MetaProperty */
                         && source.keywordToken === target.keywordToken
                         && source.name.escapedText === target.name.escapedText;
-                case 78 /* Identifier */:
-                case 79 /* PrivateIdentifier */:
-                    return target.kind === 78 /* Identifier */ && getResolvedSymbol(source) === getResolvedSymbol(target) ||
-                        (target.kind === 250 /* VariableDeclaration */ || target.kind === 199 /* BindingElement */) &&
-                            getExportSymbolOfValueSymbolIfExported(getResolvedSymbol(source)) === getSymbolOfNode(target);
-                case 107 /* ThisKeyword */:
-                    return target.kind === 107 /* ThisKeyword */;
-                case 105 /* SuperKeyword */:
-                    return target.kind === 105 /* SuperKeyword */;
-                case 226 /* NonNullExpression */:
-                case 208 /* ParenthesizedExpression */:
+                case 79 /* Identifier */:
+                case 80 /* PrivateIdentifier */:
+                    return ts.isThisInTypeQuery(source) ?
+                        target.kind === 108 /* ThisKeyword */ :
+                        target.kind === 79 /* Identifier */ && getResolvedSymbol(source) === getResolvedSymbol(target) ||
+                            (target.kind === 252 /* VariableDeclaration */ || target.kind === 201 /* BindingElement */) &&
+                                getExportSymbolOfValueSymbolIfExported(getResolvedSymbol(source)) === getSymbolOfNode(target);
+                case 108 /* ThisKeyword */:
+                    return target.kind === 108 /* ThisKeyword */;
+                case 106 /* SuperKeyword */:
+                    return target.kind === 106 /* SuperKeyword */;
+                case 228 /* NonNullExpression */:
+                case 210 /* ParenthesizedExpression */:
                     return isMatchingReference(source.expression, target);
-                case 202 /* PropertyAccessExpression */:
-                case 203 /* ElementAccessExpression */:
+                case 204 /* PropertyAccessExpression */:
+                case 205 /* ElementAccessExpression */:
                     return ts.isAccessExpression(target) &&
                         getAccessedPropertyName(source) === getAccessedPropertyName(target) &&
                         isMatchingReference(source.expression, target.expression);
-                case 158 /* QualifiedName */:
+                case 159 /* QualifiedName */:
                     return ts.isAccessExpression(target) &&
                         source.right.escapedText === getAccessedPropertyName(target) &&
                         isMatchingReference(source.left, target.expression);
-                case 217 /* BinaryExpression */:
+                case 219 /* BinaryExpression */:
                     return (ts.isBinaryExpression(source) && source.operatorToken.kind === 27 /* CommaToken */ && isMatchingReference(source.right, target));
             }
             return false;
@@ -65028,13 +66179,38 @@
         // Given a source x, check if target matches x or is an && operation with an operand that matches x.
         function containsTruthyCheck(source, target) {
             return isMatchingReference(source, target) ||
-                (target.kind === 217 /* BinaryExpression */ && target.operatorToken.kind === 55 /* AmpersandAmpersandToken */ &&
+                (target.kind === 219 /* BinaryExpression */ && target.operatorToken.kind === 55 /* AmpersandAmpersandToken */ &&
                     (containsTruthyCheck(source, target.left) || containsTruthyCheck(source, target.right)));
         }
+        function getPropertyAccess(expr) {
+            if (ts.isAccessExpression(expr)) {
+                return expr;
+            }
+            if (ts.isIdentifier(expr)) {
+                var symbol = getResolvedSymbol(expr);
+                if (isConstVariable(symbol)) {
+                    var declaration = symbol.valueDeclaration;
+                    // Given 'const x = obj.kind', allow 'x' as an alias for 'obj.kind'
+                    if (ts.isVariableDeclaration(declaration) && !declaration.type && declaration.initializer && ts.isAccessExpression(declaration.initializer)) {
+                        return declaration.initializer;
+                    }
+                    // Given 'const { kind: x } = obj', allow 'x' as an alias for 'obj.kind'
+                    if (ts.isBindingElement(declaration) && !declaration.initializer) {
+                        var parent = declaration.parent.parent;
+                        if (ts.isVariableDeclaration(parent) && !parent.type && parent.initializer && (ts.isIdentifier(parent.initializer) || ts.isAccessExpression(parent.initializer))) {
+                            return declaration;
+                        }
+                    }
+                }
+            }
+            return undefined;
+        }
         function getAccessedPropertyName(access) {
-            return access.kind === 202 /* PropertyAccessExpression */ ? access.name.escapedText :
-                ts.isStringOrNumericLiteralLike(access.argumentExpression) ? ts.escapeLeadingUnderscores(access.argumentExpression.text) :
-                    undefined;
+            var propertyName;
+            return access.kind === 204 /* PropertyAccessExpression */ ? access.name.escapedText :
+                access.kind === 205 /* ElementAccessExpression */ && ts.isStringOrNumericLiteralLike(access.argumentExpression) ? ts.escapeLeadingUnderscores(access.argumentExpression.text) :
+                    access.kind === 201 /* BindingElement */ && (propertyName = getDestructuringPropertyName(access)) ? ts.escapeLeadingUnderscores(propertyName) :
+                        undefined;
         }
         function containsMatchingReference(source, target) {
             while (ts.isAccessExpression(source)) {
@@ -65061,7 +66237,7 @@
                     if (prop.isDiscriminantProperty === undefined) {
                         prop.isDiscriminantProperty =
                             (prop.checkFlags & 192 /* Discriminant */) === 192 /* Discriminant */ &&
-                                !maybeTypeOfKind(getTypeOfSymbol(prop), 465829888 /* Instantiable */);
+                                !maybeTypeOfKind(getTypeOfSymbol(prop), 465829888 /* Instantiable */ & ~134217728 /* TemplateLiteral */);
                     }
                     return !!prop.isDiscriminantProperty;
                 }
@@ -65089,7 +66265,7 @@
         function mapTypesByKeyProperty(types, name) {
             var map = new ts.Map();
             var count = 0;
-            var _loop_20 = function (type) {
+            var _loop_22 = function (type) {
                 if (type.flags & (524288 /* Object */ | 2097152 /* Intersection */ | 58982400 /* InstantiableNonPrimitive */)) {
                     var discriminant = getTypeOfPropertyOfType(type, name);
                     if (discriminant) {
@@ -65113,9 +66289,9 @@
                     }
                 }
             };
-            for (var _i = 0, types_17 = types; _i < types_17.length; _i++) {
-                var type = types_17[_i];
-                var state_8 = _loop_20(type);
+            for (var _i = 0, types_16 = types; _i < types_16.length; _i++) {
+                var type = types_16[_i];
+                var state_8 = _loop_22(type);
                 if (typeof state_8 === "object")
                     return state_8.value;
             }
@@ -65157,7 +66333,7 @@
         }
         function getMatchingUnionConstituentForObjectLiteral(unionType, node) {
             var keyPropertyName = getKeyPropertyName(unionType);
-            var propNode = keyPropertyName && ts.find(node.properties, function (p) { return p.symbol && p.kind === 289 /* PropertyAssignment */ &&
+            var propNode = keyPropertyName && ts.find(node.properties, function (p) { return p.symbol && p.kind === 291 /* PropertyAssignment */ &&
                 p.symbol.escapedName === keyPropertyName && isPossiblyDiscriminantValue(p.initializer); });
             var propType = propNode && getTypeOfExpression(propNode.initializer);
             return propType && getConstituentTypeForKeyType(unionType, propType);
@@ -65174,7 +66350,7 @@
                     }
                 }
             }
-            if (expression.expression.kind === 202 /* PropertyAccessExpression */ &&
+            if (expression.expression.kind === 204 /* PropertyAccessExpression */ &&
                 isOrContainsMatchingReference(reference, expression.expression.expression)) {
                 return true;
             }
@@ -65312,14 +66488,12 @@
                 type;
         }
         function getTypeOfDestructuredProperty(type, name) {
+            var _a;
             var nameType = getLiteralTypeFromPropertyName(name);
             if (!isTypeUsableAsPropertyName(nameType))
                 return errorType;
             var text = getPropertyNameFromType(nameType);
-            return getTypeOfPropertyOfType(type, text) ||
-                isNumericLiteralName(text) && includeUndefinedInIndexSignature(getIndexTypeOfType(type, 1 /* Number */)) ||
-                includeUndefinedInIndexSignature(getIndexTypeOfType(type, 0 /* String */)) ||
-                errorType;
+            return getTypeOfPropertyOfType(type, text) || includeUndefinedInIndexSignature((_a = getApplicableIndexInfoForName(type, text)) === null || _a === void 0 ? void 0 : _a.type) || errorType;
         }
         function getTypeOfDestructuredArrayElement(type, index) {
             return everyType(type, isTupleLikeType) && getTupleElementType(type, index) ||
@@ -65337,15 +66511,15 @@
             return createArrayType(checkIteratedTypeOrElementType(65 /* Destructuring */, type, undefinedType, /*errorNode*/ undefined) || errorType);
         }
         function getAssignedTypeOfBinaryExpression(node) {
-            var isDestructuringDefaultAssignment = node.parent.kind === 200 /* ArrayLiteralExpression */ && isDestructuringAssignmentTarget(node.parent) ||
-                node.parent.kind === 289 /* PropertyAssignment */ && isDestructuringAssignmentTarget(node.parent.parent);
+            var isDestructuringDefaultAssignment = node.parent.kind === 202 /* ArrayLiteralExpression */ && isDestructuringAssignmentTarget(node.parent) ||
+                node.parent.kind === 291 /* PropertyAssignment */ && isDestructuringAssignmentTarget(node.parent.parent);
             return isDestructuringDefaultAssignment ?
                 getTypeWithDefault(getAssignedType(node), node.right) :
                 getTypeOfExpression(node.right);
         }
         function isDestructuringAssignmentTarget(parent) {
-            return parent.parent.kind === 217 /* BinaryExpression */ && parent.parent.left === parent ||
-                parent.parent.kind === 240 /* ForOfStatement */ && parent.parent.initializer === parent;
+            return parent.parent.kind === 219 /* BinaryExpression */ && parent.parent.left === parent ||
+                parent.parent.kind === 242 /* ForOfStatement */ && parent.parent.initializer === parent;
         }
         function getAssignedTypeOfArrayLiteralElement(node, element) {
             return getTypeOfDestructuredArrayElement(getAssignedType(node), node.elements.indexOf(element));
@@ -65362,21 +66536,21 @@
         function getAssignedType(node) {
             var parent = node.parent;
             switch (parent.kind) {
-                case 239 /* ForInStatement */:
+                case 241 /* ForInStatement */:
                     return stringType;
-                case 240 /* ForOfStatement */:
+                case 242 /* ForOfStatement */:
                     return checkRightHandSideOfForOf(parent) || errorType;
-                case 217 /* BinaryExpression */:
+                case 219 /* BinaryExpression */:
                     return getAssignedTypeOfBinaryExpression(parent);
-                case 211 /* DeleteExpression */:
+                case 213 /* DeleteExpression */:
                     return undefinedType;
-                case 200 /* ArrayLiteralExpression */:
+                case 202 /* ArrayLiteralExpression */:
                     return getAssignedTypeOfArrayLiteralElement(parent, node);
-                case 221 /* SpreadElement */:
+                case 223 /* SpreadElement */:
                     return getAssignedTypeOfSpreadExpression(parent);
-                case 289 /* PropertyAssignment */:
+                case 291 /* PropertyAssignment */:
                     return getAssignedTypeOfPropertyAssignment(parent);
-                case 290 /* ShorthandPropertyAssignment */:
+                case 292 /* ShorthandPropertyAssignment */:
                     return getAssignedTypeOfShorthandPropertyAssignment(parent);
             }
             return errorType;
@@ -65384,7 +66558,7 @@
         function getInitialTypeOfBindingElement(node) {
             var pattern = node.parent;
             var parentType = getInitialType(pattern.parent);
-            var type = pattern.kind === 197 /* ObjectBindingPattern */ ?
+            var type = pattern.kind === 199 /* ObjectBindingPattern */ ?
                 getTypeOfDestructuredProperty(parentType, node.propertyName || node.name) :
                 !node.dotDotDotToken ?
                     getTypeOfDestructuredArrayElement(parentType, pattern.elements.indexOf(node)) :
@@ -65402,35 +66576,35 @@
             if (node.initializer) {
                 return getTypeOfInitializer(node.initializer);
             }
-            if (node.parent.parent.kind === 239 /* ForInStatement */) {
+            if (node.parent.parent.kind === 241 /* ForInStatement */) {
                 return stringType;
             }
-            if (node.parent.parent.kind === 240 /* ForOfStatement */) {
+            if (node.parent.parent.kind === 242 /* ForOfStatement */) {
                 return checkRightHandSideOfForOf(node.parent.parent) || errorType;
             }
             return errorType;
         }
         function getInitialType(node) {
-            return node.kind === 250 /* VariableDeclaration */ ?
+            return node.kind === 252 /* VariableDeclaration */ ?
                 getInitialTypeOfVariableDeclaration(node) :
                 getInitialTypeOfBindingElement(node);
         }
         function isEmptyArrayAssignment(node) {
-            return node.kind === 250 /* VariableDeclaration */ && node.initializer &&
+            return node.kind === 252 /* VariableDeclaration */ && node.initializer &&
                 isEmptyArrayLiteral(node.initializer) ||
-                node.kind !== 199 /* BindingElement */ && node.parent.kind === 217 /* BinaryExpression */ &&
+                node.kind !== 201 /* BindingElement */ && node.parent.kind === 219 /* BinaryExpression */ &&
                     isEmptyArrayLiteral(node.parent.right);
         }
         function getReferenceCandidate(node) {
             switch (node.kind) {
-                case 208 /* ParenthesizedExpression */:
+                case 210 /* ParenthesizedExpression */:
                     return getReferenceCandidate(node.expression);
-                case 217 /* BinaryExpression */:
+                case 219 /* BinaryExpression */:
                     switch (node.operatorToken.kind) {
-                        case 62 /* EqualsToken */:
-                        case 74 /* BarBarEqualsToken */:
-                        case 75 /* AmpersandAmpersandEqualsToken */:
-                        case 76 /* QuestionQuestionEqualsToken */:
+                        case 63 /* EqualsToken */:
+                        case 75 /* BarBarEqualsToken */:
+                        case 76 /* AmpersandAmpersandEqualsToken */:
+                        case 77 /* QuestionQuestionEqualsToken */:
                             return getReferenceCandidate(node.left);
                         case 27 /* CommaToken */:
                             return getReferenceCandidate(node.right);
@@ -65440,13 +66614,13 @@
         }
         function getReferenceRoot(node) {
             var parent = node.parent;
-            return parent.kind === 208 /* ParenthesizedExpression */ ||
-                parent.kind === 217 /* BinaryExpression */ && parent.operatorToken.kind === 62 /* EqualsToken */ && parent.left === node ||
-                parent.kind === 217 /* BinaryExpression */ && parent.operatorToken.kind === 27 /* CommaToken */ && parent.right === node ?
+            return parent.kind === 210 /* ParenthesizedExpression */ ||
+                parent.kind === 219 /* BinaryExpression */ && parent.operatorToken.kind === 63 /* EqualsToken */ && parent.left === node ||
+                parent.kind === 219 /* BinaryExpression */ && parent.operatorToken.kind === 27 /* CommaToken */ && parent.right === node ?
                 getReferenceRoot(parent) : node;
         }
         function getTypeOfSwitchClause(clause) {
-            if (clause.kind === 285 /* CaseClause */) {
+            if (clause.kind === 287 /* CaseClause */) {
                 return getRegularTypeOfLiteralType(getTypeOfExpression(clause.expression));
             }
             return neverType;
@@ -65466,7 +66640,7 @@
             var witnesses = [];
             for (var _i = 0, _a = switchStatement.caseBlock.clauses; _i < _a.length; _i++) {
                 var clause = _a[_i];
-                if (clause.kind === 285 /* CaseClause */) {
+                if (clause.kind === 287 /* CaseClause */) {
                     if (ts.isStringLiteralLike(clause.expression)) {
                         witnesses.push(clause.expression.text);
                         continue;
@@ -65539,6 +66713,9 @@
             }
             return type.flags & 131072 /* Never */ || f(type) ? type : neverType;
         }
+        function removeType(type, targetType) {
+            return filterType(type, function (t) { return t !== targetType; });
+        }
         function countTypes(type) {
             return type.flags & 1048576 /* Union */ ? type.types.length : 1;
         }
@@ -65553,8 +66730,8 @@
             var types = origin && origin.flags & 1048576 /* Union */ ? origin.types : type.types;
             var mappedTypes;
             var changed = false;
-            for (var _i = 0, types_18 = types; _i < types_18.length; _i++) {
-                var t = types_18[_i];
+            for (var _i = 0, types_17 = types; _i < types_17.length; _i++) {
+                var t = types_17[_i];
                 var mapped = t.flags & 1048576 /* Union */ ? mapType(t, mapper, noReductions) : mapper(t);
                 changed || (changed = t !== mapped);
                 if (mapped) {
@@ -65641,8 +66818,8 @@
         }
         function isEvolvingArrayTypeList(types) {
             var hasEvolvingArrayType = false;
-            for (var _i = 0, types_19 = types; _i < types_19.length; _i++) {
-                var t = types_19[_i];
+            for (var _i = 0, types_18 = types; _i < types_18.length; _i++) {
+                var t = types_18[_i];
                 if (!(t.flags & 131072 /* Never */)) {
                     if (!(ts.getObjectFlags(t) & 256 /* EvolvingArray */)) {
                         return false;
@@ -65658,21 +66835,21 @@
             var root = getReferenceRoot(node);
             var parent = root.parent;
             var isLengthPushOrUnshift = ts.isPropertyAccessExpression(parent) && (parent.name.escapedText === "length" ||
-                parent.parent.kind === 204 /* CallExpression */
+                parent.parent.kind === 206 /* CallExpression */
                     && ts.isIdentifier(parent.name)
                     && ts.isPushOrUnshiftIdentifier(parent.name));
-            var isElementAssignment = parent.kind === 203 /* ElementAccessExpression */ &&
+            var isElementAssignment = parent.kind === 205 /* ElementAccessExpression */ &&
                 parent.expression === root &&
-                parent.parent.kind === 217 /* BinaryExpression */ &&
-                parent.parent.operatorToken.kind === 62 /* EqualsToken */ &&
+                parent.parent.kind === 219 /* BinaryExpression */ &&
+                parent.parent.operatorToken.kind === 63 /* EqualsToken */ &&
                 parent.parent.left === parent &&
                 !ts.isAssignmentTarget(parent.parent) &&
                 isTypeAssignableToKind(getTypeOfExpression(parent.argumentExpression), 296 /* NumberLike */);
             return isLengthPushOrUnshift || isElementAssignment;
         }
         function isDeclarationWithExplicitTypeAnnotation(declaration) {
-            return (declaration.kind === 250 /* VariableDeclaration */ || declaration.kind === 161 /* Parameter */ ||
-                declaration.kind === 164 /* PropertyDeclaration */ || declaration.kind === 163 /* PropertySignature */) &&
+            return (declaration.kind === 252 /* VariableDeclaration */ || declaration.kind === 162 /* Parameter */ ||
+                declaration.kind === 165 /* PropertyDeclaration */ || declaration.kind === 164 /* PropertySignature */) &&
                 !!ts.getEffectiveTypeAnnotationNode(declaration);
         }
         function getExplicitTypeOfSymbol(symbol, diagnostic) {
@@ -65691,7 +66868,7 @@
                     if (isDeclarationWithExplicitTypeAnnotation(declaration)) {
                         return getTypeOfSymbol(symbol);
                     }
-                    if (ts.isVariableDeclaration(declaration) && declaration.parent.parent.kind === 240 /* ForOfStatement */) {
+                    if (ts.isVariableDeclaration(declaration) && declaration.parent.parent.kind === 242 /* ForOfStatement */) {
                         var statement = declaration.parent.parent;
                         var expressionType = getTypeOfDottedName(statement.expression, /*diagnostic*/ undefined);
                         if (expressionType) {
@@ -65712,14 +66889,14 @@
         function getTypeOfDottedName(node, diagnostic) {
             if (!(node.flags & 16777216 /* InWithStatement */)) {
                 switch (node.kind) {
-                    case 78 /* Identifier */:
+                    case 79 /* Identifier */:
                         var symbol = getExportSymbolOfValueSymbolIfExported(getResolvedSymbol(node));
                         return getExplicitTypeOfSymbol(symbol.flags & 2097152 /* Alias */ ? resolveAlias(symbol) : symbol, diagnostic);
-                    case 107 /* ThisKeyword */:
+                    case 108 /* ThisKeyword */:
                         return getExplicitThisType(node);
-                    case 105 /* SuperKeyword */:
+                    case 106 /* SuperKeyword */:
                         return checkSuperExpression(node);
-                    case 202 /* PropertyAccessExpression */: {
+                    case 204 /* PropertyAccessExpression */: {
                         var type = getTypeOfDottedName(node.expression, diagnostic);
                         if (type) {
                             var name = node.name;
@@ -65737,7 +66914,7 @@
                         }
                         return undefined;
                     }
-                    case 208 /* ParenthesizedExpression */:
+                    case 210 /* ParenthesizedExpression */:
                         return getTypeOfDottedName(node.expression, diagnostic);
                 }
             }
@@ -65751,10 +66928,10 @@
                 // circularities in control flow analysis, we use getTypeOfDottedName when resolving the call
                 // target expression of an assertion.
                 var funcType = void 0;
-                if (node.parent.kind === 234 /* ExpressionStatement */) {
+                if (node.parent.kind === 236 /* ExpressionStatement */) {
                     funcType = getTypeOfDottedName(node.expression, /*diagnostic*/ undefined);
                 }
-                else if (node.expression.kind !== 105 /* SuperKeyword */) {
+                else if (node.expression.kind !== 106 /* SuperKeyword */) {
                     if (ts.isOptionalChain(node)) {
                         funcType = checkNonNullType(getOptionalExpressionType(checkExpression(node.expression), node.expression), node.expression);
                     }
@@ -65795,7 +66972,7 @@
         }
         function isFalseExpression(expr) {
             var node = ts.skipParentheses(expr);
-            return node.kind === 94 /* FalseKeyword */ || node.kind === 217 /* BinaryExpression */ && (node.operatorToken.kind === 55 /* AmpersandAmpersandToken */ && (isFalseExpression(node.left) || isFalseExpression(node.right)) ||
+            return node.kind === 95 /* FalseKeyword */ || node.kind === 219 /* BinaryExpression */ && (node.operatorToken.kind === 55 /* AmpersandAmpersandToken */ && (isFalseExpression(node.left) || isFalseExpression(node.right)) ||
                 node.operatorToken.kind === 56 /* BarBarToken */ && isFalseExpression(node.left) && isFalseExpression(node.right));
         }
         function isReachableFlowNodeWorker(flow, noCacheCheck) {
@@ -65883,7 +67060,7 @@
                     flow = flow.antecedent;
                 }
                 else if (flags & 512 /* Call */) {
-                    if (flow.node.expression.kind === 105 /* SuperKeyword */) {
+                    if (flow.node.expression.kind === 106 /* SuperKeyword */) {
                         return true;
                     }
                     flow = flow.antecedent;
@@ -65910,15 +67087,28 @@
                 }
             }
         }
-        function getFlowTypeOfReference(reference, declaredType, initialType, flowContainer, couldBeUninitialized) {
+        function isConstantReference(node) {
+            switch (node.kind) {
+                case 79 /* Identifier */:
+                    var symbol = getResolvedSymbol(node);
+                    return isConstVariable(symbol) || !!symbol.valueDeclaration && ts.getRootDeclaration(symbol.valueDeclaration).kind === 162 /* Parameter */ && !isParameterAssigned(symbol);
+                case 204 /* PropertyAccessExpression */:
+                case 205 /* ElementAccessExpression */:
+                    // The resolvedSymbol property is initialized by checkPropertyAccess or checkElementAccess before we get here.
+                    return isConstantReference(node.expression) && isReadonlySymbol(getNodeLinks(node).resolvedSymbol || unknownSymbol);
+            }
+            return false;
+        }
+        function getFlowTypeOfReference(reference, declaredType, initialType, flowContainer) {
             if (initialType === void 0) { initialType = declaredType; }
             var key;
             var isKeySet = false;
             var flowDepth = 0;
+            var inlineLevel = 0;
             if (flowAnalysisDisabled) {
                 return errorType;
             }
-            if (!reference.flowNode || !couldBeUninitialized && !(declaredType.flags & 536624127 /* Narrowable */)) {
+            if (!reference.flowNode) {
                 return declaredType;
             }
             flowInvocationCount++;
@@ -65930,7 +67120,7 @@
             // on empty arrays are possible without implicit any errors and new element types can be inferred without
             // type mismatch errors.
             var resultType = ts.getObjectFlags(evolvedType) & 256 /* EvolvingArray */ && isEvolvingArrayOperationTarget(reference) ? autoArrayType : finalizeEvolvingArrayType(evolvedType);
-            if (resultType === unreachableNeverType || reference.parent && reference.parent.kind === 226 /* NonNullExpression */ && !(resultType.flags & 131072 /* Never */) && getTypeWithFacts(resultType, 2097152 /* NEUndefinedOrNull */).flags & 131072 /* Never */) {
+            if (resultType === unreachableNeverType || reference.parent && reference.parent.kind === 228 /* NonNullExpression */ && !(resultType.flags & 131072 /* Never */) && getTypeWithFacts(resultType, 2097152 /* NEUndefinedOrNull */).flags & 131072 /* Never */) {
                 return declaredType;
             }
             return resultType;
@@ -66014,9 +67204,9 @@
                         // Check if we should continue with the control flow of the containing function.
                         var container = flow.node;
                         if (container && container !== flowContainer &&
-                            reference.kind !== 202 /* PropertyAccessExpression */ &&
-                            reference.kind !== 203 /* ElementAccessExpression */ &&
-                            reference.kind !== 107 /* ThisKeyword */) {
+                            reference.kind !== 204 /* PropertyAccessExpression */ &&
+                            reference.kind !== 205 /* ElementAccessExpression */ &&
+                            reference.kind !== 108 /* ThisKeyword */) {
                             flow = container.flowNode;
                             continue;
                         }
@@ -66040,7 +67230,7 @@
             }
             function getInitialOrAssignedType(flow) {
                 var node = flow.node;
-                return getNarrowableTypeForReference(node.kind === 250 /* VariableDeclaration */ || node.kind === 199 /* BindingElement */ ?
+                return getNarrowableTypeForReference(node.kind === 252 /* VariableDeclaration */ || node.kind === 201 /* BindingElement */ ?
                     getInitialType(node) :
                     getAssignedType(node), reference);
             }
@@ -66080,14 +67270,14 @@
                     // in which case we continue control flow analysis back to the function's declaration
                     if (ts.isVariableDeclaration(node) && (ts.isInJSFile(node) || ts.isVarConst(node))) {
                         var init = ts.getDeclaredExpandoInitializer(node);
-                        if (init && (init.kind === 209 /* FunctionExpression */ || init.kind === 210 /* ArrowFunction */)) {
+                        if (init && (init.kind === 211 /* FunctionExpression */ || init.kind === 212 /* ArrowFunction */)) {
                             return getTypeAtFlowNode(flow.antecedent);
                         }
                     }
                     return declaredType;
                 }
                 // for (const _ in ref) acts as a nonnull on ref
-                if (ts.isVariableDeclaration(node) && node.parent.parent.kind === 239 /* ForInStatement */ && isMatchingReference(reference, node.parent.parent.expression)) {
+                if (ts.isVariableDeclaration(node) && node.parent.parent.kind === 241 /* ForInStatement */ && isMatchingReference(reference, node.parent.parent.expression)) {
                     return getNonNullableTypeIfNeeded(getTypeFromFlowType(getTypeAtFlowNode(flow.antecedent)));
                 }
                 // Assignment doesn't affect reference
@@ -66095,10 +67285,10 @@
             }
             function narrowTypeByAssertion(type, expr) {
                 var node = ts.skipParentheses(expr);
-                if (node.kind === 94 /* FalseKeyword */) {
+                if (node.kind === 95 /* FalseKeyword */) {
                     return unreachableNeverType;
                 }
-                if (node.kind === 217 /* BinaryExpression */) {
+                if (node.kind === 219 /* BinaryExpression */) {
                     if (node.operatorToken.kind === 55 /* AmpersandAmpersandToken */) {
                         return narrowTypeByAssertion(narrowTypeByAssertion(type, node.left), node.right);
                     }
@@ -66129,7 +67319,7 @@
             function getTypeAtFlowArrayMutation(flow) {
                 if (declaredType === autoType || declaredType === autoArrayType) {
                     var node = flow.node;
-                    var expr = node.kind === 204 /* CallExpression */ ?
+                    var expr = node.kind === 206 /* CallExpression */ ?
                         node.expression.expression :
                         node.left.expression;
                     if (isMatchingReference(reference, getReferenceCandidate(expr))) {
@@ -66137,7 +67327,7 @@
                         var type = getTypeFromFlowType(flowType);
                         if (ts.getObjectFlags(type) & 256 /* EvolvingArray */) {
                             var evolvedType_1 = type;
-                            if (node.kind === 204 /* CallExpression */) {
+                            if (node.kind === 206 /* CallExpression */) {
                                 for (var _i = 0, _a = node.arguments; _i < _a.length; _i++) {
                                     var arg = _a[_i];
                                     evolvedType_1 = addEvolvingArrayElementType(evolvedType_1, arg);
@@ -66185,7 +67375,7 @@
                 if (isMatchingReference(reference, expr)) {
                     type = narrowTypeBySwitchOnDiscriminant(type, flow.switchStatement, flow.clauseStart, flow.clauseEnd);
                 }
-                else if (expr.kind === 212 /* TypeOfExpression */ && isMatchingReference(reference, expr.expression)) {
+                else if (expr.kind === 214 /* TypeOfExpression */ && isMatchingReference(reference, expr.expression)) {
                     type = narrowBySwitchOnTypeOf(type, flow.switchStatement, flow.clauseStart, flow.clauseEnd);
                 }
                 else {
@@ -66193,12 +67383,13 @@
                         if (optionalChainContainsReference(expr, reference)) {
                             type = narrowTypeBySwitchOptionalChainContainment(type, flow.switchStatement, flow.clauseStart, flow.clauseEnd, function (t) { return !(t.flags & (32768 /* Undefined */ | 131072 /* Never */)); });
                         }
-                        else if (expr.kind === 212 /* TypeOfExpression */ && optionalChainContainsReference(expr.expression, reference)) {
+                        else if (expr.kind === 214 /* TypeOfExpression */ && optionalChainContainsReference(expr.expression, reference)) {
                             type = narrowTypeBySwitchOptionalChainContainment(type, flow.switchStatement, flow.clauseStart, flow.clauseEnd, function (t) { return !(t.flags & 131072 /* Never */ || t.flags & 128 /* StringLiteral */ && t.value === "undefined"); });
                         }
                     }
-                    if (isMatchingReferenceDiscriminant(expr, type)) {
-                        type = narrowTypeBySwitchOnDiscriminantProperty(type, expr, flow.switchStatement, flow.clauseStart, flow.clauseEnd);
+                    var access = getDiscriminantPropertyAccess(expr, type);
+                    if (access) {
+                        type = narrowTypeBySwitchOnDiscriminantProperty(type, access, flow.switchStatement, flow.clauseStart, flow.clauseEnd);
                     }
                 }
                 return createFlowType(type, isIncomplete(flowType));
@@ -66353,16 +67544,13 @@
                 }
                 return result;
             }
-            function isMatchingReferenceDiscriminant(expr, computedType) {
+            function getDiscriminantPropertyAccess(expr, computedType) {
+                var access, name;
                 var type = declaredType.flags & 1048576 /* Union */ ? declaredType : computedType;
-                if (!(type.flags & 1048576 /* Union */) || !ts.isAccessExpression(expr)) {
-                    return false;
-                }
-                var name = getAccessedPropertyName(expr);
-                if (name === undefined) {
-                    return false;
-                }
-                return isMatchingReference(reference, expr.expression) && isDiscriminantProperty(type, name);
+                return type.flags & 1048576 /* Union */ && (access = getPropertyAccess(expr)) && (name = getAccessedPropertyName(access)) &&
+                    isMatchingReference(reference, ts.isAccessExpression(access) ? access.expression : access.parent.parent.initializer) &&
+                    isDiscriminantProperty(type, name) ?
+                    access : undefined;
             }
             function narrowTypeByDiscriminant(type, access, narrowType) {
                 var propName = getAccessedPropertyName(access);
@@ -66385,10 +67573,10 @@
                 if ((operator === 36 /* EqualsEqualsEqualsToken */ || operator === 37 /* ExclamationEqualsEqualsToken */) && type.flags & 1048576 /* Union */) {
                     var keyPropertyName = getKeyPropertyName(type);
                     if (keyPropertyName && keyPropertyName === getAccessedPropertyName(access)) {
-                        var candidate_2 = getConstituentTypeForKeyType(type, getTypeOfExpression(value));
-                        if (candidate_2) {
-                            return operator === (assumeTrue ? 36 /* EqualsEqualsEqualsToken */ : 37 /* ExclamationEqualsEqualsToken */) ? candidate_2 :
-                                isUnitType(getTypeOfPropertyOfType(candidate_2, keyPropertyName) || unknownType) ? filterType(type, function (t) { return t !== candidate_2; }) :
+                        var candidate = getConstituentTypeForKeyType(type, getTypeOfExpression(value));
+                        if (candidate) {
+                            return operator === (assumeTrue ? 36 /* EqualsEqualsEqualsToken */ : 37 /* ExclamationEqualsEqualsToken */) ? candidate :
+                                isUnitType(getTypeOfPropertyOfType(candidate, keyPropertyName) || unknownType) ? removeType(type, candidate) :
                                     type;
                         }
                     }
@@ -66412,37 +67600,34 @@
                 if (strictNullChecks && assumeTrue && optionalChainContainsReference(expr, reference)) {
                     type = getTypeWithFacts(type, 2097152 /* NEUndefinedOrNull */);
                 }
-                if (isMatchingReferenceDiscriminant(expr, type)) {
-                    return narrowTypeByDiscriminant(type, expr, function (t) { return getTypeWithFacts(t, assumeTrue ? 4194304 /* Truthy */ : 8388608 /* Falsy */); });
+                var access = getDiscriminantPropertyAccess(expr, type);
+                if (access) {
+                    return narrowTypeByDiscriminant(type, access, function (t) { return getTypeWithFacts(t, assumeTrue ? 4194304 /* Truthy */ : 8388608 /* Falsy */); });
                 }
                 return type;
             }
             function isTypePresencePossible(type, propName, assumeTrue) {
-                if (getIndexInfoOfType(type, 0 /* String */)) {
-                    return true;
-                }
                 var prop = getPropertyOfType(type, propName);
                 if (prop) {
                     return prop.flags & 16777216 /* Optional */ ? true : assumeTrue;
                 }
-                return !assumeTrue;
+                return getApplicableIndexInfoForName(type, propName) ? true : !assumeTrue;
             }
-            function narrowByInKeyword(type, literal, assumeTrue) {
+            function narrowByInKeyword(type, name, assumeTrue) {
                 if (type.flags & 1048576 /* Union */
                     || type.flags & 524288 /* Object */ && declaredType !== type
                     || isThisTypeParameter(type)
                     || type.flags & 2097152 /* Intersection */ && ts.every(type.types, function (t) { return t.symbol !== globalThisSymbol; })) {
-                    var propName_1 = ts.escapeLeadingUnderscores(literal.text);
-                    return filterType(type, function (t) { return isTypePresencePossible(t, propName_1, assumeTrue); });
+                    return filterType(type, function (t) { return isTypePresencePossible(t, name, assumeTrue); });
                 }
                 return type;
             }
             function narrowTypeByBinaryExpression(type, expr, assumeTrue) {
                 switch (expr.operatorToken.kind) {
-                    case 62 /* EqualsToken */:
-                    case 74 /* BarBarEqualsToken */:
-                    case 75 /* AmpersandAmpersandEqualsToken */:
-                    case 76 /* QuestionQuestionEqualsToken */:
+                    case 63 /* EqualsToken */:
+                    case 75 /* BarBarEqualsToken */:
+                    case 76 /* AmpersandAmpersandEqualsToken */:
+                    case 77 /* QuestionQuestionEqualsToken */:
                         return narrowTypeByTruthiness(narrowType(type, expr.right, assumeTrue), expr.left, assumeTrue);
                     case 34 /* EqualsEqualsToken */:
                     case 35 /* ExclamationEqualsToken */:
@@ -66451,10 +67636,10 @@
                         var operator = expr.operatorToken.kind;
                         var left = getReferenceCandidate(expr.left);
                         var right = getReferenceCandidate(expr.right);
-                        if (left.kind === 212 /* TypeOfExpression */ && ts.isStringLiteralLike(right)) {
+                        if (left.kind === 214 /* TypeOfExpression */ && ts.isStringLiteralLike(right)) {
                             return narrowTypeByTypeof(type, left, operator, right, assumeTrue);
                         }
-                        if (right.kind === 212 /* TypeOfExpression */ && ts.isStringLiteralLike(left)) {
+                        if (right.kind === 214 /* TypeOfExpression */ && ts.isStringLiteralLike(left)) {
                             return narrowTypeByTypeof(type, right, operator, left, assumeTrue);
                         }
                         if (isMatchingReference(reference, left)) {
@@ -66471,11 +67656,13 @@
                                 type = narrowTypeByOptionalChainContainment(type, operator, left, assumeTrue);
                             }
                         }
-                        if (isMatchingReferenceDiscriminant(left, type)) {
-                            return narrowTypeByDiscriminantProperty(type, left, operator, right, assumeTrue);
+                        var leftAccess = getDiscriminantPropertyAccess(left, type);
+                        if (leftAccess) {
+                            return narrowTypeByDiscriminantProperty(type, leftAccess, operator, right, assumeTrue);
                         }
-                        if (isMatchingReferenceDiscriminant(right, type)) {
-                            return narrowTypeByDiscriminantProperty(type, right, operator, left, assumeTrue);
+                        var rightAccess = getDiscriminantPropertyAccess(right, type);
+                        if (rightAccess) {
+                            return narrowTypeByDiscriminantProperty(type, rightAccess, operator, left, assumeTrue);
                         }
                         if (isMatchingConstructorReference(left)) {
                             return narrowTypeByConstructor(type, operator, right, assumeTrue);
@@ -66484,16 +67671,35 @@
                             return narrowTypeByConstructor(type, operator, left, assumeTrue);
                         }
                         break;
-                    case 101 /* InstanceOfKeyword */:
+                    case 102 /* InstanceOfKeyword */:
                         return narrowTypeByInstanceof(type, expr, assumeTrue);
-                    case 100 /* InKeyword */:
+                    case 101 /* InKeyword */:
                         var target = getReferenceCandidate(expr.right);
-                        if (ts.isStringLiteralLike(expr.left) && isMatchingReference(reference, target)) {
-                            return narrowByInKeyword(type, expr.left, assumeTrue);
+                        var leftType = getTypeOfNode(expr.left);
+                        if (leftType.flags & 128 /* StringLiteral */) {
+                            var name = ts.escapeLeadingUnderscores(leftType.value);
+                            if (containsMissingType(type) && ts.isAccessExpression(reference) && isMatchingReference(reference.expression, target) &&
+                                getAccessedPropertyName(reference) === name) {
+                                return getTypeWithFacts(type, assumeTrue ? 524288 /* NEUndefined */ : 65536 /* EQUndefined */);
+                            }
+                            if (isMatchingReference(reference, target)) {
+                                return narrowByInKeyword(type, name, assumeTrue);
+                            }
                         }
                         break;
                     case 27 /* CommaToken */:
                         return narrowType(type, expr.right, assumeTrue);
+                    // Ordinarily we won't see && and || expressions in control flow analysis because the Binder breaks those
+                    // expressions down to individual conditional control flows. However, we may encounter them when analyzing
+                    // aliased conditional expressions.
+                    case 55 /* AmpersandAmpersandToken */:
+                        return assumeTrue ?
+                            narrowType(narrowType(type, expr.left, /*assumeTrue*/ true), expr.right, /*assumeTrue*/ true) :
+                            getUnionType([narrowType(type, expr.left, /*assumeTrue*/ false), narrowType(type, expr.right, /*assumeTrue*/ false)]);
+                    case 56 /* BarBarToken */:
+                        return assumeTrue ?
+                            getUnionType([narrowType(type, expr.left, /*assumeTrue*/ true), narrowType(type, expr.right, /*assumeTrue*/ true)]) :
+                            narrowType(narrowType(type, expr.left, /*assumeTrue*/ false), expr.right, /*assumeTrue*/ false);
                 }
                 return type;
             }
@@ -66573,7 +67779,7 @@
                 if (assumeTrue && type.flags & 2 /* Unknown */ && literal.text === "object") {
                     // The pattern x && typeof x === 'object', where x is of type unknown, narrows x to type object. We don't
                     // need to check for the reverse typeof x === 'object' && x since that already narrows correctly.
-                    if (typeOfExpr.parent.parent.kind === 217 /* BinaryExpression */) {
+                    if (typeOfExpr.parent.parent.kind === 219 /* BinaryExpression */) {
                         var expr = typeOfExpr.parent.parent;
                         if (expr.operatorToken.kind === 55 /* AmpersandAmpersandToken */ && expr.right === typeOfExpr.parent && containsTruthyCheck(reference, expr.left)) {
                             return nonPrimitiveType;
@@ -66848,6 +68054,16 @@
                         return narrowTypeByTypePredicate(type, predicate, callExpression, assumeTrue);
                     }
                 }
+                if (containsMissingType(type) && ts.isAccessExpression(reference) && ts.isPropertyAccessExpression(callExpression.expression)) {
+                    var callAccess = callExpression.expression;
+                    if (isMatchingReference(reference.expression, getReferenceCandidate(callAccess.expression)) &&
+                        ts.isIdentifier(callAccess.name) && callAccess.name.escapedText === "hasOwnProperty" && callExpression.arguments.length === 1) {
+                        var argument = callExpression.arguments[0];
+                        if (ts.isStringLiteralLike(argument) && getAccessedPropertyName(reference) === ts.escapeLeadingUnderscores(argument.text)) {
+                            return getTypeWithFacts(type, assumeTrue ? 524288 /* NEUndefined */ : 65536 /* EQUndefined */);
+                        }
+                    }
+                }
                 return type;
             }
             function narrowTypeByTypePredicate(type, predicate, callExpression, assumeTrue) {
@@ -66862,8 +68078,9 @@
                             !(getTypeFacts(predicate.type) & 65536 /* EQUndefined */)) {
                             type = getTypeWithFacts(type, 2097152 /* NEUndefinedOrNull */);
                         }
-                        if (isMatchingReferenceDiscriminant(predicateArgument, type)) {
-                            return narrowTypeByDiscriminant(type, predicateArgument, function (t) { return getNarrowedType(t, predicate.type, assumeTrue, isTypeSubtypeOf); });
+                        var access = getDiscriminantPropertyAccess(predicateArgument, type);
+                        if (access) {
+                            return narrowTypeByDiscriminant(type, access, function (t) { return getNarrowedType(t, predicate.type, assumeTrue, isTypeSubtypeOf); });
                         }
                     }
                 }
@@ -66878,20 +68095,35 @@
                     return narrowTypeByOptionality(type, expr, assumeTrue);
                 }
                 switch (expr.kind) {
-                    case 78 /* Identifier */:
-                    case 107 /* ThisKeyword */:
-                    case 105 /* SuperKeyword */:
-                    case 202 /* PropertyAccessExpression */:
-                    case 203 /* ElementAccessExpression */:
+                    case 79 /* Identifier */:
+                        // When narrowing a reference to a const variable, non-assigned parameter, or readonly property, we inline
+                        // up to five levels of aliased conditional expressions that are themselves declared as const variables.
+                        if (!isMatchingReference(reference, expr) && inlineLevel < 5) {
+                            var symbol = getResolvedSymbol(expr);
+                            if (isConstVariable(symbol)) {
+                                var declaration = symbol.valueDeclaration;
+                                if (declaration && ts.isVariableDeclaration(declaration) && !declaration.type && declaration.initializer && isConstantReference(reference)) {
+                                    inlineLevel++;
+                                    var result = narrowType(type, declaration.initializer, assumeTrue);
+                                    inlineLevel--;
+                                    return result;
+                                }
+                            }
+                        }
+                    // falls through
+                    case 108 /* ThisKeyword */:
+                    case 106 /* SuperKeyword */:
+                    case 204 /* PropertyAccessExpression */:
+                    case 205 /* ElementAccessExpression */:
                         return narrowTypeByTruthiness(type, expr, assumeTrue);
-                    case 204 /* CallExpression */:
+                    case 206 /* CallExpression */:
                         return narrowTypeByCallExpression(type, expr, assumeTrue);
-                    case 208 /* ParenthesizedExpression */:
-                    case 226 /* NonNullExpression */:
+                    case 210 /* ParenthesizedExpression */:
+                    case 228 /* NonNullExpression */:
                         return narrowType(type, expr.expression, assumeTrue);
-                    case 217 /* BinaryExpression */:
+                    case 219 /* BinaryExpression */:
                         return narrowTypeByBinaryExpression(type, expr, assumeTrue);
-                    case 215 /* PrefixUnaryExpression */:
+                    case 217 /* PrefixUnaryExpression */:
                         if (expr.operator === 53 /* ExclamationToken */) {
                             return narrowType(type, expr.operand, !assumeTrue);
                         }
@@ -66903,8 +68135,9 @@
                 if (isMatchingReference(reference, expr)) {
                     return getTypeWithFacts(type, assumePresent ? 2097152 /* NEUndefinedOrNull */ : 262144 /* EQUndefinedOrNull */);
                 }
-                if (isMatchingReferenceDiscriminant(expr, type)) {
-                    return narrowTypeByDiscriminant(type, expr, function (t) { return getTypeWithFacts(t, assumePresent ? 2097152 /* NEUndefinedOrNull */ : 262144 /* EQUndefinedOrNull */); });
+                var access = getDiscriminantPropertyAccess(expr, type);
+                if (access) {
+                    return narrowTypeByDiscriminant(type, access, function (t) { return getTypeWithFacts(t, assumePresent ? 2097152 /* NEUndefinedOrNull */ : 262144 /* EQUndefinedOrNull */); });
                 }
                 return type;
             }
@@ -66915,7 +68148,7 @@
             // an dotted name expression, and if the location is not an assignment target, obtain the type
             // of the expression (which will reflect control flow analysis). If the expression indeed
             // resolved to the given symbol, return the narrowed type.
-            if (location.kind === 78 /* Identifier */ || location.kind === 79 /* PrivateIdentifier */) {
+            if (location.kind === 79 /* Identifier */ || location.kind === 80 /* PrivateIdentifier */) {
                 if (ts.isRightSideOfQualifiedNameOrPropertyAccess(location)) {
                     location = location.parent;
                 }
@@ -66934,14 +68167,14 @@
             // to it at the given location. Since we have no control flow information for the
             // hypothetical reference (control flow information is created and attached by the
             // binder), we simply return the declared type of the symbol.
-            return getTypeOfSymbol(symbol);
+            return getNonMissingTypeOfSymbol(symbol);
         }
         function getControlFlowContainer(node) {
             return ts.findAncestor(node.parent, function (node) {
                 return ts.isFunctionLike(node) && !ts.getImmediatelyInvokedFunctionExpression(node) ||
-                    node.kind === 258 /* ModuleBlock */ ||
-                    node.kind === 298 /* SourceFile */ ||
-                    node.kind === 164 /* PropertyDeclaration */;
+                    node.kind === 260 /* ModuleBlock */ ||
+                    node.kind === 300 /* SourceFile */ ||
+                    node.kind === 165 /* PropertyDeclaration */;
             });
         }
         // Check if a parameter is assigned anywhere within its declaring function.
@@ -66963,10 +68196,10 @@
             return !!ts.findAncestor(node.parent, function (node) { return ts.isFunctionLike(node) && !!(getNodeLinks(node).flags & 8388608 /* AssignmentsMarked */); });
         }
         function markParameterAssignments(node) {
-            if (node.kind === 78 /* Identifier */) {
+            if (node.kind === 79 /* Identifier */) {
                 if (ts.isAssignmentTarget(node)) {
                     var symbol = getResolvedSymbol(node);
-                    if (symbol.valueDeclaration && ts.getRootDeclaration(symbol.valueDeclaration).kind === 161 /* Parameter */) {
+                    if (symbol.valueDeclaration && ts.getRootDeclaration(symbol.valueDeclaration).kind === 162 /* Parameter */) {
                         symbol.isAssigned = true;
                     }
                 }
@@ -66976,13 +68209,13 @@
             }
         }
         function isConstVariable(symbol) {
-            return symbol.flags & 3 /* Variable */ && (getDeclarationNodeFlagsFromSymbol(symbol) & 2 /* Const */) !== 0 && getTypeOfSymbol(symbol) !== autoArrayType;
+            return symbol.flags & 3 /* Variable */ && (getDeclarationNodeFlagsFromSymbol(symbol) & 2 /* Const */) !== 0;
         }
         /** remove undefined from the annotated type of a parameter when there is an initializer (that doesn't include undefined) */
         function removeOptionalityFromDeclaredType(declaredType, declaration) {
             if (pushTypeResolution(declaration.symbol, 2 /* DeclaredType */)) {
                 var annotationIncludesUndefined = strictNullChecks &&
-                    declaration.kind === 161 /* Parameter */ &&
+                    declaration.kind === 162 /* Parameter */ &&
                     declaration.initializer &&
                     getFalsyFlags(declaredType) & 32768 /* Undefined */ &&
                     !(getFalsyFlags(checkExpression(declaration.initializer)) & 32768 /* Undefined */);
@@ -66994,29 +68227,29 @@
                 return declaredType;
             }
         }
-        function isConstraintPosition(node) {
+        function isConstraintPosition(type, node) {
             var parent = node.parent;
-            // In an element access obj[x], we consider obj to be in a constraint position only when x is not
-            // of a generic type. This is because when both obj and x are of generic types T and K, we want
-            // the resulting type to be T[K].
-            return parent.kind === 202 /* PropertyAccessExpression */ ||
-                parent.kind === 204 /* CallExpression */ && parent.expression === node ||
-                parent.kind === 203 /* ElementAccessExpression */ && parent.expression === node &&
-                    !isGenericIndexType(getTypeOfExpression(parent.argumentExpression));
+            // In an element access obj[x], we consider obj to be in a constraint position, except when obj is of
+            // a generic type without a nullable constraint and x is a generic type. This is because when both obj
+            // and x are of generic types T and K, we want the resulting type to be T[K].
+            return parent.kind === 204 /* PropertyAccessExpression */ ||
+                parent.kind === 206 /* CallExpression */ && parent.expression === node ||
+                parent.kind === 205 /* ElementAccessExpression */ && parent.expression === node &&
+                    !(isGenericTypeWithoutNullableConstraint(type) && isGenericIndexType(getTypeOfExpression(parent.argumentExpression)));
         }
         function isGenericTypeWithUnionConstraint(type) {
             return !!(type.flags & 465829888 /* Instantiable */ && getBaseConstraintOrType(type).flags & (98304 /* Nullable */ | 1048576 /* Union */));
         }
-        function containsGenericType(type) {
-            return !!(type.flags & 465829888 /* Instantiable */ || type.flags & 3145728 /* UnionOrIntersection */ && ts.some(type.types, containsGenericType));
+        function isGenericTypeWithoutNullableConstraint(type) {
+            return !!(type.flags & 465829888 /* Instantiable */ && !maybeTypeOfKind(getBaseConstraintOrType(type), 98304 /* Nullable */));
         }
-        function hasContextualTypeWithNoGenericTypes(node) {
+        function hasNonBindingPatternContextualTypeWithNoGenericTypes(node) {
             // Computing the contextual type for a child of a JSX element involves resolving the type of the
             // element's tag name, so we exclude that here to avoid circularities.
             var contextualType = (ts.isIdentifier(node) || ts.isPropertyAccessExpression(node) || ts.isElementAccessExpression(node)) &&
                 !((ts.isJsxOpeningElement(node.parent) || ts.isJsxSelfClosingElement(node.parent)) && node.parent.tagName === node) &&
-                getContextualType(node);
-            return contextualType && !someType(contextualType, containsGenericType);
+                getContextualType(node, 8 /* SkipBindingPatterns */);
+            return contextualType && !isGenericType(contextualType);
         }
         function getNarrowableTypeForReference(type, reference, checkMode) {
             // When the type of a reference is or contains an instantiable type with a union type constraint, and
@@ -67028,7 +68261,7 @@
             // 'string | undefined' to give control flow analysis the opportunity to narrow to type 'string'.
             var substituteConstraints = !(checkMode && checkMode & 2 /* Inferential */) &&
                 someType(type, isGenericTypeWithUnionConstraint) &&
-                (isConstraintPosition(reference) || hasContextualTypeWithNoGenericTypes(reference));
+                (isConstraintPosition(type, reference) || hasNonBindingPatternContextualTypeWithNoGenericTypes(reference));
             return substituteConstraints ? mapType(type, function (t) { return t.flags & 465829888 /* Instantiable */ ? getBaseConstraintOrType(t) : t; }) : type;
         }
         function isExportOrExportExpression(location) {
@@ -67064,9 +68297,13 @@
             // To avoid that we will give an error to users if they use arguments objects in arrow function so that they
             // can explicitly bound arguments objects
             if (symbol === argumentsSymbol) {
+                if (isInPropertyInitializerOrClassStaticBlock(node)) {
+                    error(node, ts.Diagnostics.arguments_cannot_be_referenced_in_property_initializers);
+                    return errorType;
+                }
                 var container = ts.getContainingFunction(node);
                 if (languageVersion < 2 /* ES2015 */) {
-                    if (container.kind === 210 /* ArrowFunction */) {
+                    if (container.kind === 212 /* ArrowFunction */) {
                         error(node, ts.Diagnostics.The_arguments_object_cannot_be_referenced_in_an_arrow_function_in_ES3_and_ES5_Consider_using_a_standard_function_expression);
                     }
                     else if (ts.hasSyntacticModifier(container, 256 /* Async */)) {
@@ -67091,7 +68328,7 @@
                 // Due to the emit for class decorators, any reference to the class from inside of the class body
                 // must instead be rewritten to point to a temporary variable to avoid issues with the double-bind
                 // behavior of class names in ES6.
-                if (declaration.kind === 253 /* ClassDeclaration */
+                if (declaration.kind === 255 /* ClassDeclaration */
                     && ts.nodeIsDecorated(declaration)) {
                     var container = ts.getContainingClass(node);
                     while (container !== undefined) {
@@ -67103,14 +68340,14 @@
                         container = ts.getContainingClass(container);
                     }
                 }
-                else if (declaration.kind === 222 /* ClassExpression */) {
+                else if (declaration.kind === 224 /* ClassExpression */) {
                     // When we emit a class expression with static members that contain a reference
                     // to the constructor in the initializer, we will need to substitute that
                     // binding with an alias as the class name is not in scope.
                     var container = ts.getThisContainer(node, /*includeArrowFunctions*/ false);
-                    while (container.kind !== 298 /* SourceFile */) {
+                    while (container.kind !== 300 /* SourceFile */) {
                         if (container.parent === declaration) {
-                            if (container.kind === 164 /* PropertyDeclaration */ && ts.hasSyntacticModifier(container, 32 /* Static */)) {
+                            if (ts.isPropertyDeclaration(container) && ts.isStatic(container) || ts.isClassStaticBlockDeclaration(container)) {
                                 getNodeLinks(declaration).flags |= 16777216 /* ClassWithConstructorReference */;
                                 getNodeLinks(node).flags |= 33554432 /* ConstructorReferenceInClass */;
                             }
@@ -67166,7 +68403,7 @@
             // The declaration container is the innermost function that encloses the declaration of the variable
             // or parameter. The flow container is the innermost function starting with which we analyze the control
             // flow graph to determine the control flow based type.
-            var isParameter = ts.getRootDeclaration(declaration).kind === 161 /* Parameter */;
+            var isParameter = ts.getRootDeclaration(declaration).kind === 162 /* Parameter */;
             var declarationContainer = getControlFlowContainer(declaration);
             var flowContainer = getControlFlowContainer(node);
             var isOuterVariable = flowContainer !== declarationContainer;
@@ -67175,9 +68412,9 @@
             // When the control flow originates in a function expression or arrow function and we are referencing
             // a const variable or parameter from an outer function, we extend the origin of the control flow
             // analysis to include the immediately enclosing function.
-            while (flowContainer !== declarationContainer && (flowContainer.kind === 209 /* FunctionExpression */ ||
-                flowContainer.kind === 210 /* ArrowFunction */ || ts.isObjectLiteralOrClassExpressionMethod(flowContainer)) &&
-                (isConstVariable(localOrExportSymbol) || isParameter && !isParameterAssigned(localOrExportSymbol))) {
+            while (flowContainer !== declarationContainer && (flowContainer.kind === 211 /* FunctionExpression */ ||
+                flowContainer.kind === 212 /* ArrowFunction */ || ts.isObjectLiteralOrClassExpressionMethod(flowContainer)) &&
+                (isConstVariable(localOrExportSymbol) && type !== autoArrayType || isParameter && !isParameterAssigned(localOrExportSymbol))) {
                 flowContainer = getControlFlowContainer(flowContainer);
             }
             // We only look for uninitialized variables in strict null checking mode, and only when we can analyze
@@ -67185,14 +68422,14 @@
             // declaration container are the same).
             var assumeInitialized = isParameter || isAlias || isOuterVariable || isSpreadDestructuringAssignmentTarget || isModuleExports || ts.isBindingElement(declaration) ||
                 type !== autoType && type !== autoArrayType && (!strictNullChecks || (type.flags & (3 /* AnyOrUnknown */ | 16384 /* Void */)) !== 0 ||
-                    isInTypeQuery(node) || node.parent.kind === 271 /* ExportSpecifier */) ||
-                node.parent.kind === 226 /* NonNullExpression */ ||
-                declaration.kind === 250 /* VariableDeclaration */ && declaration.exclamationToken ||
+                    isInTypeQuery(node) || node.parent.kind === 273 /* ExportSpecifier */) ||
+                node.parent.kind === 228 /* NonNullExpression */ ||
+                declaration.kind === 252 /* VariableDeclaration */ && declaration.exclamationToken ||
                 declaration.flags & 8388608 /* Ambient */;
             var initialType = assumeInitialized ? (isParameter ? removeOptionalityFromDeclaredType(type, declaration) : type) :
                 type === autoType || type === autoArrayType ? undefinedType :
                     getOptionalType(type);
-            var flowType = getFlowTypeOfReference(node, type, initialType, flowContainer, !assumeInitialized);
+            var flowType = getFlowTypeOfReference(node, type, initialType, flowContainer);
             // A variable is considered uninitialized when it is possible to analyze the entire control flow graph
             // from declaration to use, and when the variable's declared type doesn't include undefined but the
             // control flow based type does include undefined.
@@ -67226,7 +68463,7 @@
                 (symbol.flags & (2 /* BlockScopedVariable */ | 32 /* Class */)) === 0 ||
                 !symbol.valueDeclaration ||
                 ts.isSourceFile(symbol.valueDeclaration) ||
-                symbol.valueDeclaration.parent.kind === 288 /* CatchClause */) {
+                symbol.valueDeclaration.parent.kind === 290 /* CatchClause */) {
                 return;
             }
             // 1. walk from the use site up to the declaration and check
@@ -67241,7 +68478,7 @@
                     // mark iteration statement as containing block-scoped binding captured in some function
                     var capturesBlockScopeBindingInLoopBody = true;
                     if (ts.isForStatement(container)) {
-                        var varDeclList = ts.getAncestor(symbol.valueDeclaration, 251 /* VariableDeclarationList */);
+                        var varDeclList = ts.getAncestor(symbol.valueDeclaration, 253 /* VariableDeclarationList */);
                         if (varDeclList && varDeclList.parent === container) {
                             var part = getPartOfForStatementContainingNode(node.parent, container);
                             if (part) {
@@ -67262,7 +68499,7 @@
                 // mark variables that are declared in loop initializer and reassigned inside the body of ForStatement.
                 // if body of ForStatement will be converted to function then we'll need a extra machinery to propagate reassigned values back.
                 if (ts.isForStatement(container)) {
-                    var varDeclList = ts.getAncestor(symbol.valueDeclaration, 251 /* VariableDeclarationList */);
+                    var varDeclList = ts.getAncestor(symbol.valueDeclaration, 253 /* VariableDeclarationList */);
                     if (varDeclList && varDeclList.parent === container && isAssignedInBodyOfForStatement(node, container)) {
                         getNodeLinks(symbol.valueDeclaration).flags |= 4194304 /* NeedsLoopOutParameter */;
                     }
@@ -67281,7 +68518,7 @@
         function isAssignedInBodyOfForStatement(node, container) {
             // skip parenthesized nodes
             var current = node;
-            while (current.parent.kind === 208 /* ParenthesizedExpression */) {
+            while (current.parent.kind === 210 /* ParenthesizedExpression */) {
                 current = current.parent;
             }
             // check if node is used as LHS in some assignment expression
@@ -67289,7 +68526,7 @@
             if (ts.isAssignmentTarget(current)) {
                 isAssigned = true;
             }
-            else if ((current.parent.kind === 215 /* PrefixUnaryExpression */ || current.parent.kind === 216 /* PostfixUnaryExpression */)) {
+            else if ((current.parent.kind === 217 /* PrefixUnaryExpression */ || current.parent.kind === 218 /* PostfixUnaryExpression */)) {
                 var expr = current.parent;
                 isAssigned = expr.operator === 45 /* PlusPlusToken */ || expr.operator === 46 /* MinusMinusToken */;
             }
@@ -67302,7 +68539,7 @@
         }
         function captureLexicalThis(node, container) {
             getNodeLinks(node).flags |= 2 /* LexicalThis */;
-            if (container.kind === 164 /* PropertyDeclaration */ || container.kind === 167 /* Constructor */) {
+            if (container.kind === 165 /* PropertyDeclaration */ || container.kind === 169 /* Constructor */) {
                 var classNode = container.parent;
                 getNodeLinks(classNode).flags |= 4 /* CaptureThis */;
             }
@@ -67337,47 +68574,48 @@
                 }
             }
         }
+        function checkThisInStaticClassFieldInitializerInDecoratedClass(thisExpression, container) {
+            if (ts.isPropertyDeclaration(container) && ts.hasStaticModifier(container) &&
+                container.initializer && ts.textRangeContainsPositionInclusive(container.initializer, thisExpression.pos) && ts.length(container.parent.decorators)) {
+                error(thisExpression, ts.Diagnostics.Cannot_use_this_in_a_static_property_initializer_of_a_decorated_class);
+            }
+        }
         function checkThisExpression(node) {
+            var isNodeInTypeQuery = isInTypeQuery(node);
             // Stop at the first arrow function so that we can
             // tell whether 'this' needs to be captured.
             var container = ts.getThisContainer(node, /* includeArrowFunctions */ true);
             var capturedByArrowFunction = false;
-            if (container.kind === 167 /* Constructor */) {
+            if (container.kind === 169 /* Constructor */) {
                 checkThisBeforeSuper(node, container, ts.Diagnostics.super_must_be_called_before_accessing_this_in_the_constructor_of_a_derived_class);
             }
             // Now skip arrow functions to get the "real" owner of 'this'.
-            if (container.kind === 210 /* ArrowFunction */) {
+            if (container.kind === 212 /* ArrowFunction */) {
                 container = ts.getThisContainer(container, /* includeArrowFunctions */ false);
                 capturedByArrowFunction = true;
             }
+            checkThisInStaticClassFieldInitializerInDecoratedClass(node, container);
             switch (container.kind) {
-                case 257 /* ModuleDeclaration */:
+                case 259 /* ModuleDeclaration */:
                     error(node, ts.Diagnostics.this_cannot_be_referenced_in_a_module_or_namespace_body);
                     // do not return here so in case if lexical this is captured - it will be reflected in flags on NodeLinks
                     break;
-                case 256 /* EnumDeclaration */:
+                case 258 /* EnumDeclaration */:
                     error(node, ts.Diagnostics.this_cannot_be_referenced_in_current_location);
                     // do not return here so in case if lexical this is captured - it will be reflected in flags on NodeLinks
                     break;
-                case 167 /* Constructor */:
+                case 169 /* Constructor */:
                     if (isInConstructorArgumentInitializer(node, container)) {
                         error(node, ts.Diagnostics.this_cannot_be_referenced_in_constructor_arguments);
                         // do not return here so in case if lexical this is captured - it will be reflected in flags on NodeLinks
                     }
                     break;
-                case 164 /* PropertyDeclaration */:
-                case 163 /* PropertySignature */:
-                    if (ts.hasSyntacticModifier(container, 32 /* Static */) && !(compilerOptions.target === 99 /* ESNext */ && useDefineForClassFields)) {
-                        error(node, ts.Diagnostics.this_cannot_be_referenced_in_a_static_property_initializer);
-                        // do not return here so in case if lexical this is captured - it will be reflected in flags on NodeLinks
-                    }
-                    break;
-                case 159 /* ComputedPropertyName */:
+                case 160 /* ComputedPropertyName */:
                     error(node, ts.Diagnostics.this_cannot_be_referenced_in_a_computed_property_name);
                     break;
             }
             // When targeting es6, mark that we'll need to capture `this` in its lexically bound scope.
-            if (capturedByArrowFunction && languageVersion < 2 /* ES2015 */) {
+            if (!isNodeInTypeQuery && capturedByArrowFunction && languageVersion < 2 /* ES2015 */) {
                 captureLexicalThis(node, container);
             }
             var type = tryGetThisTypeAt(node, /*includeGlobalThis*/ true, container);
@@ -67427,7 +68665,7 @@
             }
             if (ts.isClassLike(container.parent)) {
                 var symbol = getSymbolOfNode(container.parent);
-                var type = ts.hasSyntacticModifier(container, 32 /* Static */) ? getTypeOfSymbol(symbol) : getDeclaredTypeOfSymbol(symbol).thisType;
+                var type = ts.isStatic(container) ? getTypeOfSymbol(symbol) : getDeclaredTypeOfSymbol(symbol).thisType;
                 return getFlowTypeOfReference(node, type);
             }
             if (ts.isSourceFile(container)) {
@@ -67455,12 +68693,12 @@
             }
             if (ts.isClassLike(container.parent)) {
                 var symbol = getSymbolOfNode(container.parent);
-                return ts.hasSyntacticModifier(container, 32 /* Static */) ? getTypeOfSymbol(symbol) : getDeclaredTypeOfSymbol(symbol).thisType;
+                return ts.isStatic(container) ? getTypeOfSymbol(symbol) : getDeclaredTypeOfSymbol(symbol).thisType;
             }
         }
         function getClassNameFromPrototypeMethod(container) {
             // Check if it's the RHS of a x.prototype.y = function [name]() { .... }
-            if (container.kind === 209 /* FunctionExpression */ &&
+            if (container.kind === 211 /* FunctionExpression */ &&
                 ts.isBinaryExpression(container.parent) &&
                 ts.getAssignmentDeclarationKind(container.parent) === 3 /* PrototypeProperty */) {
                 // Get the 'x' of 'x.prototype.y = container'
@@ -67470,16 +68708,16 @@
                     .expression; // x
             }
             // x.prototype = { method() { } }
-            else if (container.kind === 166 /* MethodDeclaration */ &&
-                container.parent.kind === 201 /* ObjectLiteralExpression */ &&
+            else if (container.kind === 167 /* MethodDeclaration */ &&
+                container.parent.kind === 203 /* ObjectLiteralExpression */ &&
                 ts.isBinaryExpression(container.parent.parent) &&
                 ts.getAssignmentDeclarationKind(container.parent.parent) === 6 /* Prototype */) {
                 return container.parent.parent.left.expression;
             }
             // x.prototype = { method: function() { } }
-            else if (container.kind === 209 /* FunctionExpression */ &&
-                container.parent.kind === 289 /* PropertyAssignment */ &&
-                container.parent.parent.kind === 201 /* ObjectLiteralExpression */ &&
+            else if (container.kind === 211 /* FunctionExpression */ &&
+                container.parent.kind === 291 /* PropertyAssignment */ &&
+                container.parent.parent.kind === 203 /* ObjectLiteralExpression */ &&
                 ts.isBinaryExpression(container.parent.parent.parent) &&
                 ts.getAssignmentDeclarationKind(container.parent.parent.parent) === 6 /* Prototype */) {
                 return container.parent.parent.parent.left.expression;
@@ -67487,7 +68725,7 @@
             // Object.defineProperty(x, "method", { value: function() { } });
             // Object.defineProperty(x, "method", { set: (x: () => void) => void });
             // Object.defineProperty(x, "method", { get: () => function() { }) });
-            else if (container.kind === 209 /* FunctionExpression */ &&
+            else if (container.kind === 211 /* FunctionExpression */ &&
                 ts.isPropertyAssignment(container.parent) &&
                 ts.isIdentifier(container.parent.name) &&
                 (container.parent.name.escapedText === "value" || container.parent.name.escapedText === "get" || container.parent.name.escapedText === "set") &&
@@ -67512,7 +68750,7 @@
         }
         function getTypeForThisExpressionFromJSDoc(node) {
             var jsdocType = ts.getJSDocType(node);
-            if (jsdocType && jsdocType.kind === 309 /* JSDocFunctionType */) {
+            if (jsdocType && jsdocType.kind === 312 /* JSDocFunctionType */) {
                 var jsDocFunctionType = jsdocType;
                 if (jsDocFunctionType.parameters.length > 0 &&
                     jsDocFunctionType.parameters[0].name &&
@@ -67526,16 +68764,16 @@
             }
         }
         function isInConstructorArgumentInitializer(node, constructorDecl) {
-            return !!ts.findAncestor(node, function (n) { return ts.isFunctionLikeDeclaration(n) ? "quit" : n.kind === 161 /* Parameter */ && n.parent === constructorDecl; });
+            return !!ts.findAncestor(node, function (n) { return ts.isFunctionLikeDeclaration(n) ? "quit" : n.kind === 162 /* Parameter */ && n.parent === constructorDecl; });
         }
         function checkSuperExpression(node) {
-            var isCallExpression = node.parent.kind === 204 /* CallExpression */ && node.parent.expression === node;
+            var isCallExpression = node.parent.kind === 206 /* CallExpression */ && node.parent.expression === node;
             var immediateContainer = ts.getSuperContainer(node, /*stopOnFunctions*/ true);
             var container = immediateContainer;
             var needToCaptureLexicalThis = false;
             // adjust the container reference in case if super is used inside arrow functions with arbitrarily deep nesting
             if (!isCallExpression) {
-                while (container && container.kind === 210 /* ArrowFunction */) {
+                while (container && container.kind === 212 /* ArrowFunction */) {
                     container = ts.getSuperContainer(container, /*stopOnFunctions*/ true);
                     needToCaptureLexicalThis = languageVersion < 2 /* ES2015 */;
                 }
@@ -67548,14 +68786,14 @@
                 // class B {
                 //     [super.foo()]() {}
                 // }
-                var current = ts.findAncestor(node, function (n) { return n === container ? "quit" : n.kind === 159 /* ComputedPropertyName */; });
-                if (current && current.kind === 159 /* ComputedPropertyName */) {
+                var current = ts.findAncestor(node, function (n) { return n === container ? "quit" : n.kind === 160 /* ComputedPropertyName */; });
+                if (current && current.kind === 160 /* ComputedPropertyName */) {
                     error(node, ts.Diagnostics.super_cannot_be_referenced_in_a_computed_property_name);
                 }
                 else if (isCallExpression) {
                     error(node, ts.Diagnostics.Super_calls_are_not_permitted_outside_constructors_or_in_nested_functions_inside_constructors);
                 }
-                else if (!container || !container.parent || !(ts.isClassLike(container.parent) || container.parent.kind === 201 /* ObjectLiteralExpression */)) {
+                else if (!container || !container.parent || !(ts.isClassLike(container.parent) || container.parent.kind === 203 /* ObjectLiteralExpression */)) {
                     error(node, ts.Diagnostics.super_can_only_be_referenced_in_members_of_derived_classes_or_object_literal_expressions);
                 }
                 else {
@@ -67563,11 +68801,23 @@
                 }
                 return errorType;
             }
-            if (!isCallExpression && immediateContainer.kind === 167 /* Constructor */) {
+            if (!isCallExpression && immediateContainer.kind === 169 /* Constructor */) {
                 checkThisBeforeSuper(node, container, ts.Diagnostics.super_must_be_called_before_accessing_a_property_of_super_in_the_constructor_of_a_derived_class);
             }
-            if (ts.hasSyntacticModifier(container, 32 /* Static */) || isCallExpression) {
+            if (ts.isStatic(container) || isCallExpression) {
                 nodeCheckFlag = 512 /* SuperStatic */;
+                if (!isCallExpression &&
+                    languageVersion >= 2 /* ES2015 */ && languageVersion <= 8 /* ES2021 */ &&
+                    (ts.isPropertyDeclaration(container) || ts.isClassStaticBlockDeclaration(container))) {
+                    // for `super.x` or `super[x]` in a static initializer, mark all enclosing
+                    // block scope containers so that we can report potential collisions with
+                    // `Reflect`.
+                    ts.forEachEnclosingBlockScopeContainer(node.parent, function (current) {
+                        if (!ts.isSourceFile(current) || ts.isExternalOrCommonJsModule(current)) {
+                            getNodeLinks(current).flags |= 134217728 /* ContainsSuperPropertyInStaticInitializer */;
+                        }
+                    });
+                }
             }
             else {
                 nodeCheckFlag = 256 /* SuperInstance */;
@@ -67632,7 +68882,7 @@
             // as a call expression cannot be used as the target of a destructuring assignment while a property access can.
             //
             // For element access expressions (`super[x]`), we emit a generic helper that forwards the element access in both situations.
-            if (container.kind === 166 /* MethodDeclaration */ && ts.hasSyntacticModifier(container, 256 /* Async */)) {
+            if (container.kind === 167 /* MethodDeclaration */ && ts.hasSyntacticModifier(container, 256 /* Async */)) {
                 if (ts.isSuperProperty(node.parent) && ts.isAssignmentTarget(node.parent)) {
                     getNodeLinks(container).flags |= 4096 /* AsyncMethodWithSuperBinding */;
                 }
@@ -67646,7 +68896,7 @@
                 // in this case they should also use correct lexical this
                 captureLexicalThis(node.parent, container);
             }
-            if (container.parent.kind === 201 /* ObjectLiteralExpression */) {
+            if (container.parent.kind === 203 /* ObjectLiteralExpression */) {
                 if (languageVersion < 2 /* ES2015 */) {
                     error(node, ts.Diagnostics.super_is_only_allowed_in_members_of_object_literal_expressions_when_option_target_is_ES2015_or_higher);
                     return errorType;
@@ -67667,7 +68917,7 @@
             if (!baseClassType) {
                 return errorType;
             }
-            if (container.kind === 167 /* Constructor */ && isInConstructorArgumentInitializer(node, container)) {
+            if (container.kind === 169 /* Constructor */ && isInConstructorArgumentInitializer(node, container)) {
                 // issue custom error message for super property access in constructor arguments (to be aligned with old compiler)
                 error(node, ts.Diagnostics.super_cannot_be_referenced_in_constructor_arguments);
                 return errorType;
@@ -67682,7 +68932,7 @@
                 if (isCallExpression) {
                     // TS 1.0 SPEC (April 2014): 4.8.1
                     // Super calls are only permitted in constructors of derived classes
-                    return container.kind === 167 /* Constructor */;
+                    return container.kind === 169 /* Constructor */;
                 }
                 else {
                     // TS 1.0 SPEC (April 2014)
@@ -67690,21 +68940,23 @@
                     // - In a constructor, instance member function, instance member accessor, or instance member variable initializer where this references a derived class instance
                     // - In a static member function or static member accessor
                     // topmost container must be something that is directly nested in the class declaration\object literal expression
-                    if (ts.isClassLike(container.parent) || container.parent.kind === 201 /* ObjectLiteralExpression */) {
-                        if (ts.hasSyntacticModifier(container, 32 /* Static */)) {
-                            return container.kind === 166 /* MethodDeclaration */ ||
-                                container.kind === 165 /* MethodSignature */ ||
-                                container.kind === 168 /* GetAccessor */ ||
-                                container.kind === 169 /* SetAccessor */;
+                    if (ts.isClassLike(container.parent) || container.parent.kind === 203 /* ObjectLiteralExpression */) {
+                        if (ts.isStatic(container)) {
+                            return container.kind === 167 /* MethodDeclaration */ ||
+                                container.kind === 166 /* MethodSignature */ ||
+                                container.kind === 170 /* GetAccessor */ ||
+                                container.kind === 171 /* SetAccessor */ ||
+                                container.kind === 165 /* PropertyDeclaration */ ||
+                                container.kind === 168 /* ClassStaticBlockDeclaration */;
                         }
                         else {
-                            return container.kind === 166 /* MethodDeclaration */ ||
-                                container.kind === 165 /* MethodSignature */ ||
-                                container.kind === 168 /* GetAccessor */ ||
-                                container.kind === 169 /* SetAccessor */ ||
-                                container.kind === 164 /* PropertyDeclaration */ ||
-                                container.kind === 163 /* PropertySignature */ ||
-                                container.kind === 167 /* Constructor */;
+                            return container.kind === 167 /* MethodDeclaration */ ||
+                                container.kind === 166 /* MethodSignature */ ||
+                                container.kind === 170 /* GetAccessor */ ||
+                                container.kind === 171 /* SetAccessor */ ||
+                                container.kind === 165 /* PropertyDeclaration */ ||
+                                container.kind === 164 /* PropertySignature */ ||
+                                container.kind === 169 /* Constructor */;
                         }
                     }
                 }
@@ -67712,10 +68964,10 @@
             }
         }
         function getContainingObjectLiteral(func) {
-            return (func.kind === 166 /* MethodDeclaration */ ||
-                func.kind === 168 /* GetAccessor */ ||
-                func.kind === 169 /* SetAccessor */) && func.parent.kind === 201 /* ObjectLiteralExpression */ ? func.parent :
-                func.kind === 209 /* FunctionExpression */ && func.parent.kind === 289 /* PropertyAssignment */ ? func.parent.parent :
+            return (func.kind === 167 /* MethodDeclaration */ ||
+                func.kind === 170 /* GetAccessor */ ||
+                func.kind === 171 /* SetAccessor */) && func.parent.kind === 203 /* ObjectLiteralExpression */ ? func.parent :
+                func.kind === 211 /* FunctionExpression */ && func.parent.kind === 291 /* PropertyAssignment */ ? func.parent.parent :
                     undefined;
         }
         function getThisTypeArgument(type) {
@@ -67727,7 +68979,7 @@
             });
         }
         function getContextualThisParameterType(func) {
-            if (func.kind === 210 /* ArrowFunction */) {
+            if (func.kind === 212 /* ArrowFunction */) {
                 return undefined;
             }
             if (isContextSensitiveFunctionOrObjectLiteralMethod(func)) {
@@ -67754,7 +69006,7 @@
                         if (thisType) {
                             return instantiateType(thisType, getMapperFromContext(getInferenceContext(containingLiteral)));
                         }
-                        if (literal.parent.kind !== 289 /* PropertyAssignment */) {
+                        if (literal.parent.kind !== 291 /* PropertyAssignment */) {
                             break;
                         }
                         literal = literal.parent.parent;
@@ -67768,7 +69020,7 @@
                 // In an assignment of the form 'obj.xxx = function(...)' or 'obj[xxx] = function(...)', the
                 // contextual type for 'this' is 'obj'.
                 var parent = ts.walkUpParenthesizedExpressions(func.parent);
-                if (parent.kind === 217 /* BinaryExpression */ && parent.operatorToken.kind === 62 /* EqualsToken */) {
+                if (parent.kind === 219 /* BinaryExpression */ && parent.operatorToken.kind === 63 /* EqualsToken */) {
                     var target = parent.left;
                     if (ts.isAccessExpression(target)) {
                         var expression = target.expression;
@@ -67821,12 +69073,12 @@
                 return getTypeFromTypeNode(typeNode);
             }
             switch (declaration.kind) {
-                case 161 /* Parameter */:
+                case 162 /* Parameter */:
                     return getContextuallyTypedParameterType(declaration);
-                case 199 /* BindingElement */:
+                case 201 /* BindingElement */:
                     return getContextualTypeForBindingElement(declaration);
-                case 164 /* PropertyDeclaration */:
-                    if (ts.hasSyntacticModifier(declaration, 32 /* Static */)) {
+                case 165 /* PropertyDeclaration */:
+                    if (ts.isStatic(declaration)) {
                         return getContextualTypeForStaticPropertyDeclaration(declaration);
                     }
                 // By default, do nothing and return undefined - only the above cases have context implied by a parent
@@ -67836,10 +69088,10 @@
             var parent = declaration.parent.parent;
             var name = declaration.propertyName || declaration.name;
             var parentType = getContextualTypeForVariableLikeDeclaration(parent) ||
-                parent.kind !== 199 /* BindingElement */ && parent.initializer && checkDeclarationInitializer(parent);
+                parent.kind !== 201 /* BindingElement */ && parent.initializer && checkDeclarationInitializer(parent);
             if (!parentType || ts.isBindingPattern(name) || ts.isComputedNonLiteralName(name))
                 return undefined;
-            if (parent.name.kind === 198 /* ArrayBindingPattern */) {
+            if (parent.name.kind === 200 /* ArrayBindingPattern */) {
                 var index = ts.indexOfNode(declaration.parent.elements, declaration);
                 if (index < 0)
                     return undefined;
@@ -67973,10 +69225,13 @@
             if (ts.isJsxOpeningLikeElement(callTarget) && argIndex === 0) {
                 return getEffectiveFirstArgumentForJsxSignature(signature, callTarget);
             }
-            return getTypeAtPosition(signature, argIndex);
+            var restIndex = signature.parameters.length - 1;
+            return signatureHasRestParameter(signature) && argIndex >= restIndex ?
+                getIndexedAccessType(getTypeOfSymbol(signature.parameters[restIndex]), getNumberLiteralType(argIndex - restIndex), 256 /* Contextual */) :
+                getTypeAtPosition(signature, argIndex);
         }
         function getContextualTypeForSubstitutionExpression(template, substitutionExpression) {
-            if (template.parent.kind === 206 /* TaggedTemplateExpression */) {
+            if (template.parent.kind === 208 /* TaggedTemplateExpression */) {
                 return getContextualTypeForArgument(template.parent, substitutionExpression);
             }
             return undefined;
@@ -67985,10 +69240,10 @@
             var binaryExpression = node.parent;
             var left = binaryExpression.left, operatorToken = binaryExpression.operatorToken, right = binaryExpression.right;
             switch (operatorToken.kind) {
-                case 62 /* EqualsToken */:
-                case 75 /* AmpersandAmpersandEqualsToken */:
-                case 74 /* BarBarEqualsToken */:
-                case 76 /* QuestionQuestionEqualsToken */:
+                case 63 /* EqualsToken */:
+                case 76 /* AmpersandAmpersandEqualsToken */:
+                case 75 /* BarBarEqualsToken */:
+                case 77 /* QuestionQuestionEqualsToken */:
                     return node === right ? getContextualTypeForAssignmentDeclaration(binaryExpression) : undefined;
                 case 56 /* BarBarToken */:
                 case 60 /* QuestionQuestionToken */:
@@ -68007,6 +69262,27 @@
                     return undefined;
             }
         }
+        /**
+         * Try to find a resolved symbol for an expression without also resolving its type, as
+         * getSymbolAtLocation would (as that could be reentrant into contextual typing)
+         */
+        function getSymbolForExpression(e) {
+            if (e.symbol) {
+                return e.symbol;
+            }
+            if (ts.isIdentifier(e)) {
+                return getResolvedSymbol(e);
+            }
+            if (ts.isPropertyAccessExpression(e)) {
+                var lhsType = getTypeOfExpression(e.expression);
+                return ts.isPrivateIdentifier(e.name) ? tryGetPrivateIdentifierPropertyOfType(lhsType, e.name) : getPropertyOfType(lhsType, e.name.escapedText);
+            }
+            return undefined;
+            function tryGetPrivateIdentifierPropertyOfType(type, id) {
+                var lexicallyScopedSymbol = lookupSymbolForPrivateIdentifierDeclaration(id.escapedText, id);
+                return lexicallyScopedSymbol && getPrivateIdentifierPropertyOfType(type, lexicallyScopedSymbol);
+            }
+        }
         // In an assignment expression, the right operand is contextually typed by the type of the left operand.
         // Don't do this for assignment declarations unless there is a type tag on the assignment, to avoid circularity from checking the right operand.
         function getContextualTypeForAssignmentDeclaration(binaryExpression) {
@@ -68014,8 +69290,19 @@
             var kind = ts.getAssignmentDeclarationKind(binaryExpression);
             switch (kind) {
                 case 0 /* None */:
-                    return getTypeOfExpression(binaryExpression.left);
                 case 4 /* ThisProperty */:
+                    var lhsSymbol = getSymbolForExpression(binaryExpression.left);
+                    var decl = lhsSymbol && lhsSymbol.valueDeclaration;
+                    // Unannotated, uninitialized property declarations have a type implied by their usage in the constructor.
+                    // We avoid calling back into `getTypeOfExpression` and reentering contextual typing to avoid a bogus circularity error in that case.
+                    if (decl && (ts.isPropertyDeclaration(decl) || ts.isPropertySignature(decl))) {
+                        var overallAnnotation = ts.getEffectiveTypeAnnotationNode(decl);
+                        return (overallAnnotation && instantiateType(getTypeFromTypeNode(overallAnnotation), getSymbolLinks(lhsSymbol).mapper)) ||
+                            (decl.initializer && getTypeOfExpression(binaryExpression.left));
+                    }
+                    if (kind === 0 /* None */) {
+                        return getTypeOfExpression(binaryExpression.left);
+                    }
                     return getContextualTypeForThisPropertyAssignment(binaryExpression);
                 case 5 /* Property */:
                     if (isPossiblyAliasedThisProperty(binaryExpression, kind)) {
@@ -68027,12 +69314,12 @@
                         return getTypeOfExpression(binaryExpression.left);
                     }
                     else {
-                        var decl = binaryExpression.left.symbol.valueDeclaration;
-                        if (!decl) {
+                        var decl_1 = binaryExpression.left.symbol.valueDeclaration;
+                        if (!decl_1) {
                             return undefined;
                         }
                         var lhs = ts.cast(binaryExpression.left, ts.isAccessExpression);
-                        var overallAnnotation = ts.getEffectiveTypeAnnotationNode(decl);
+                        var overallAnnotation = ts.getEffectiveTypeAnnotationNode(decl_1);
                         if (overallAnnotation) {
                             return getTypeFromTypeNode(overallAnnotation);
                         }
@@ -68050,7 +69337,7 @@
                                 return undefined;
                             }
                         }
-                        return ts.isInJSFile(decl) ? undefined : getTypeOfExpression(binaryExpression.left);
+                        return ts.isInJSFile(decl_1) ? undefined : getTypeOfExpression(binaryExpression.left);
                     }
                 case 1 /* ExportsProperty */:
                 case 6 /* Prototype */:
@@ -68106,10 +69393,11 @@
         }
         function getTypeOfPropertyOfContextualType(type, name) {
             return mapType(type, function (t) {
+                var _a;
                 if (isGenericMappedType(t)) {
                     var constraint = getConstraintTypeFromMappedType(t);
                     var constraintOfConstraint = getBaseConstraintOfType(constraint) || constraint;
-                    var propertyNameType = getLiteralType(ts.unescapeLeadingUnderscores(name));
+                    var propertyNameType = getStringLiteralType(ts.unescapeLeadingUnderscores(name));
                     if (isTypeAssignableTo(propertyNameType, constraintOfConstraint)) {
                         return substituteIndexedMappedType(t, propertyNameType);
                     }
@@ -68125,15 +69413,11 @@
                             return restType;
                         }
                     }
-                    return isNumericLiteralName(name) && getIndexTypeOfContextualType(t, 1 /* Number */) ||
-                        getIndexTypeOfContextualType(t, 0 /* String */);
+                    return (_a = findApplicableIndexInfo(getIndexInfosOfStructuredType(t), getStringLiteralType(ts.unescapeLeadingUnderscores(name)))) === null || _a === void 0 ? void 0 : _a.type;
                 }
                 return undefined;
             }, /*noReductions*/ true);
         }
-        function getIndexTypeOfContextualType(type, kind) {
-            return mapType(type, function (t) { return getIndexTypeOfStructuredType(t, kind); }, /*noReductions*/ true);
-        }
         // In an object literal contextually typed by a type T, the contextual type of a property assignment is the type of
         // the matching property in T, if one exists. Otherwise, it is the type of the numeric index signature in T, if one
         // exists. Otherwise, it is the type of the string index signature in T, if one exists.
@@ -68157,14 +69441,13 @@
                     // For a (non-symbol) computed property, there is no reason to look up the name
                     // in the type. It will just be "__computed", which does not appear in any
                     // SymbolTable.
-                    var symbolName_3 = getSymbolOfNode(element).escapedName;
-                    var propertyType = getTypeOfPropertyOfContextualType(type, symbolName_3);
-                    if (propertyType) {
-                        return propertyType;
-                    }
+                    return getTypeOfPropertyOfContextualType(type, getSymbolOfNode(element).escapedName);
                 }
-                return isNumericName(element.name) && getIndexTypeOfContextualType(type, 1 /* Number */) ||
-                    getIndexTypeOfContextualType(type, 0 /* String */);
+                if (element.name) {
+                    var nameType_1 = getLiteralTypeFromPropertyName(element.name);
+                    // We avoid calling getApplicableIndexInfo here because it performs potentially expensive intersection reduction.
+                    return mapType(type, function (t) { var _a; return (_a = findApplicableIndexInfo(getIndexInfosOfStructuredType(t), nameType_1)) === null || _a === void 0 ? void 0 : _a.type; }, /*noReductions*/ true);
+                }
             }
             return undefined;
         }
@@ -68194,7 +69477,7 @@
             var childFieldType = getTypeOfPropertyOfContextualType(attributesType, jsxChildrenPropertyName);
             return childFieldType && (realChildren.length === 1 ? childFieldType : mapType(childFieldType, function (t) {
                 if (isArrayLikeType(t)) {
-                    return getIndexedAccessType(t, getLiteralType(childIndex));
+                    return getIndexedAccessType(t, getNumberLiteralType(childIndex));
                 }
                 else {
                     return t;
@@ -68233,25 +69516,25 @@
                 case 8 /* NumericLiteral */:
                 case 9 /* BigIntLiteral */:
                 case 14 /* NoSubstitutionTemplateLiteral */:
-                case 109 /* TrueKeyword */:
-                case 94 /* FalseKeyword */:
-                case 103 /* NullKeyword */:
-                case 78 /* Identifier */:
-                case 150 /* UndefinedKeyword */:
+                case 110 /* TrueKeyword */:
+                case 95 /* FalseKeyword */:
+                case 104 /* NullKeyword */:
+                case 79 /* Identifier */:
+                case 151 /* UndefinedKeyword */:
                     return true;
-                case 202 /* PropertyAccessExpression */:
-                case 208 /* ParenthesizedExpression */:
+                case 204 /* PropertyAccessExpression */:
+                case 210 /* ParenthesizedExpression */:
                     return isPossiblyDiscriminantValue(node.expression);
-                case 284 /* JsxExpression */:
+                case 286 /* JsxExpression */:
                     return !node.expression || isPossiblyDiscriminantValue(node.expression);
             }
             return false;
         }
         function discriminateContextualTypeByObjectMembers(node, contextualType) {
-            return getMatchingUnionConstituentForObjectLiteral(contextualType, node) || discriminateTypeByDiscriminableItems(contextualType, ts.concatenate(ts.map(ts.filter(node.properties, function (p) { return !!p.symbol && p.kind === 289 /* PropertyAssignment */ && isPossiblyDiscriminantValue(p.initializer) && isDiscriminantProperty(contextualType, p.symbol.escapedName); }), function (prop) { return [function () { return getContextFreeTypeOfExpression(prop.initializer); }, prop.symbol.escapedName]; }), ts.map(ts.filter(getPropertiesOfType(contextualType), function (s) { var _a; return !!(s.flags & 16777216 /* Optional */) && !!((_a = node === null || node === void 0 ? void 0 : node.symbol) === null || _a === void 0 ? void 0 : _a.members) && !node.symbol.members.has(s.escapedName) && isDiscriminantProperty(contextualType, s.escapedName); }), function (s) { return [function () { return undefinedType; }, s.escapedName]; })), isTypeAssignableTo, contextualType);
+            return getMatchingUnionConstituentForObjectLiteral(contextualType, node) || discriminateTypeByDiscriminableItems(contextualType, ts.concatenate(ts.map(ts.filter(node.properties, function (p) { return !!p.symbol && p.kind === 291 /* PropertyAssignment */ && isPossiblyDiscriminantValue(p.initializer) && isDiscriminantProperty(contextualType, p.symbol.escapedName); }), function (prop) { return [function () { return getContextFreeTypeOfExpression(prop.initializer); }, prop.symbol.escapedName]; }), ts.map(ts.filter(getPropertiesOfType(contextualType), function (s) { var _a; return !!(s.flags & 16777216 /* Optional */) && !!((_a = node === null || node === void 0 ? void 0 : node.symbol) === null || _a === void 0 ? void 0 : _a.members) && !node.symbol.members.has(s.escapedName) && isDiscriminantProperty(contextualType, s.escapedName); }), function (s) { return [function () { return undefinedType; }, s.escapedName]; })), isTypeAssignableTo, contextualType);
         }
         function discriminateContextualTypeByJSXAttributes(node, contextualType) {
-            return discriminateTypeByDiscriminableItems(contextualType, ts.concatenate(ts.map(ts.filter(node.properties, function (p) { return !!p.symbol && p.kind === 281 /* JsxAttribute */ && isDiscriminantProperty(contextualType, p.symbol.escapedName) && (!p.initializer || isPossiblyDiscriminantValue(p.initializer)); }), function (prop) { return [!prop.initializer ? (function () { return trueType; }) : (function () { return checkExpression(prop.initializer); }), prop.symbol.escapedName]; }), ts.map(ts.filter(getPropertiesOfType(contextualType), function (s) { var _a; return !!(s.flags & 16777216 /* Optional */) && !!((_a = node === null || node === void 0 ? void 0 : node.symbol) === null || _a === void 0 ? void 0 : _a.members) && !node.symbol.members.has(s.escapedName) && isDiscriminantProperty(contextualType, s.escapedName); }), function (s) { return [function () { return undefinedType; }, s.escapedName]; })), isTypeAssignableTo, contextualType);
+            return discriminateTypeByDiscriminableItems(contextualType, ts.concatenate(ts.map(ts.filter(node.properties, function (p) { return !!p.symbol && p.kind === 283 /* JsxAttribute */ && isDiscriminantProperty(contextualType, p.symbol.escapedName) && (!p.initializer || isPossiblyDiscriminantValue(p.initializer)); }), function (prop) { return [!prop.initializer ? (function () { return trueType; }) : (function () { return checkExpression(prop.initializer); }), prop.symbol.escapedName]; }), ts.map(ts.filter(getPropertiesOfType(contextualType), function (s) { var _a; return !!(s.flags & 16777216 /* Optional */) && !!((_a = node === null || node === void 0 ? void 0 : node.symbol) === null || _a === void 0 ? void 0 : _a.members) && !node.symbol.members.has(s.escapedName) && isDiscriminantProperty(contextualType, s.escapedName); }), function (s) { return [function () { return undefinedType; }, s.escapedName]; })), isTypeAssignableTo, contextualType);
         }
         // Return the contextual type for a given expression node. During overload resolution, a contextual type may temporarily
         // be "pushed" onto a node using the contextualType property.
@@ -68331,60 +69614,60 @@
             }
             var parent = node.parent;
             switch (parent.kind) {
-                case 250 /* VariableDeclaration */:
-                case 161 /* Parameter */:
-                case 164 /* PropertyDeclaration */:
-                case 163 /* PropertySignature */:
-                case 199 /* BindingElement */:
+                case 252 /* VariableDeclaration */:
+                case 162 /* Parameter */:
+                case 165 /* PropertyDeclaration */:
+                case 164 /* PropertySignature */:
+                case 201 /* BindingElement */:
                     return getContextualTypeForInitializerExpression(node, contextFlags);
-                case 210 /* ArrowFunction */:
-                case 243 /* ReturnStatement */:
+                case 212 /* ArrowFunction */:
+                case 245 /* ReturnStatement */:
                     return getContextualTypeForReturnExpression(node);
-                case 220 /* YieldExpression */:
+                case 222 /* YieldExpression */:
                     return getContextualTypeForYieldOperand(parent);
-                case 214 /* AwaitExpression */:
+                case 216 /* AwaitExpression */:
                     return getContextualTypeForAwaitOperand(parent, contextFlags);
-                case 204 /* CallExpression */:
-                    if (parent.expression.kind === 99 /* ImportKeyword */) {
+                case 206 /* CallExpression */:
+                    if (parent.expression.kind === 100 /* ImportKeyword */) {
                         return stringType;
                     }
                 /* falls through */
-                case 205 /* NewExpression */:
+                case 207 /* NewExpression */:
                     return getContextualTypeForArgument(parent, node);
-                case 207 /* TypeAssertionExpression */:
-                case 225 /* AsExpression */:
+                case 209 /* TypeAssertionExpression */:
+                case 227 /* AsExpression */:
                     return ts.isConstTypeReference(parent.type) ? tryFindWhenConstTypeReference(parent) : getTypeFromTypeNode(parent.type);
-                case 217 /* BinaryExpression */:
+                case 219 /* BinaryExpression */:
                     return getContextualTypeForBinaryOperand(node, contextFlags);
-                case 289 /* PropertyAssignment */:
-                case 290 /* ShorthandPropertyAssignment */:
+                case 291 /* PropertyAssignment */:
+                case 292 /* ShorthandPropertyAssignment */:
                     return getContextualTypeForObjectLiteralElement(parent, contextFlags);
-                case 291 /* SpreadAssignment */:
+                case 293 /* SpreadAssignment */:
                     return getContextualType(parent.parent, contextFlags);
-                case 200 /* ArrayLiteralExpression */: {
+                case 202 /* ArrayLiteralExpression */: {
                     var arrayLiteral = parent;
                     var type = getApparentTypeOfContextualType(arrayLiteral, contextFlags);
                     return getContextualTypeForElementExpression(type, ts.indexOfNode(arrayLiteral.elements, node));
                 }
-                case 218 /* ConditionalExpression */:
+                case 220 /* ConditionalExpression */:
                     return getContextualTypeForConditionalOperand(node, contextFlags);
-                case 229 /* TemplateSpan */:
-                    ts.Debug.assert(parent.parent.kind === 219 /* TemplateExpression */);
+                case 231 /* TemplateSpan */:
+                    ts.Debug.assert(parent.parent.kind === 221 /* TemplateExpression */);
                     return getContextualTypeForSubstitutionExpression(parent.parent, node);
-                case 208 /* ParenthesizedExpression */: {
+                case 210 /* ParenthesizedExpression */: {
                     // Like in `checkParenthesizedExpression`, an `/** @type {xyz} */` comment before a parenthesized expression acts as a type cast.
                     var tag = ts.isInJSFile(parent) ? ts.getJSDocTypeTag(parent) : undefined;
                     return tag ? getTypeFromTypeNode(tag.typeExpression.type) : getContextualType(parent, contextFlags);
                 }
-                case 226 /* NonNullExpression */:
+                case 228 /* NonNullExpression */:
                     return getContextualType(parent, contextFlags);
-                case 284 /* JsxExpression */:
+                case 286 /* JsxExpression */:
                     return getContextualTypeForJsxExpression(parent);
-                case 281 /* JsxAttribute */:
-                case 283 /* JsxSpreadAttribute */:
+                case 283 /* JsxAttribute */:
+                case 285 /* JsxSpreadAttribute */:
                     return getContextualTypeForJsxAttribute(parent);
-                case 276 /* JsxOpeningElement */:
-                case 275 /* JsxSelfClosingElement */:
+                case 278 /* JsxOpeningElement */:
+                case 277 /* JsxSelfClosingElement */:
                     return getContextualJsxElementAttributesType(parent, contextFlags);
             }
             return undefined;
@@ -68624,7 +69907,7 @@
             return !hasEffectiveRestParameter(signature) && getParameterCount(signature) < targetParameterCount;
         }
         function isFunctionExpressionOrArrowFunction(node) {
-            return node.kind === 209 /* FunctionExpression */ || node.kind === 210 /* ArrowFunction */;
+            return node.kind === 211 /* FunctionExpression */ || node.kind === 212 /* ArrowFunction */;
         }
         function getContextualSignatureForFunctionLikeDeclaration(node) {
             // Only function expressions, arrow functions, and object literal methods are contextually typed.
@@ -68638,7 +69921,7 @@
         // all identical ignoring their return type, the result is same signature but with return type as
         // union type of return types from these signatures
         function getContextualSignature(node) {
-            ts.Debug.assert(node.kind !== 166 /* MethodDeclaration */ || ts.isObjectLiteralMethod(node));
+            ts.Debug.assert(node.kind !== 167 /* MethodDeclaration */ || ts.isObjectLiteralMethod(node));
             var typeTagSignature = getSignatureOfTypeTag(node);
             if (typeTagSignature) {
                 return typeTagSignature;
@@ -68652,8 +69935,8 @@
             }
             var signatureList;
             var types = type.types;
-            for (var _i = 0, types_20 = types; _i < types_20.length; _i++) {
-                var current = types_20[_i];
+            for (var _i = 0, types_19 = types; _i < types_19.length; _i++) {
+                var current = types_19[_i];
                 var signature = getContextualCallSignature(current, node);
                 if (signature) {
                     if (!signatureList) {
@@ -68686,8 +69969,8 @@
             return node.isSpread ? getIndexedAccessType(node.type, numberType) : node.type;
         }
         function hasDefaultValue(node) {
-            return (node.kind === 199 /* BindingElement */ && !!node.initializer) ||
-                (node.kind === 217 /* BinaryExpression */ && node.operatorToken.kind === 62 /* EqualsToken */);
+            return (node.kind === 201 /* BindingElement */ && !!node.initializer) ||
+                (node.kind === 219 /* BinaryExpression */ && node.operatorToken.kind === 63 /* EqualsToken */);
         }
         function checkArrayLiteral(node, checkMode, forceTuple) {
             var elements = node.elements;
@@ -68697,9 +69980,10 @@
             var contextualType = getApparentTypeOfContextualType(node);
             var inDestructuringPattern = ts.isAssignmentTarget(node);
             var inConstContext = isConstContext(node);
+            var hasOmittedExpression = false;
             for (var i = 0; i < elementCount; i++) {
                 var e = elements[i];
-                if (e.kind === 221 /* SpreadElement */) {
+                if (e.kind === 223 /* SpreadElement */) {
                     if (languageVersion < 2 /* ES2015 */) {
                         checkExternalEmitHelpers(e, compilerOptions.downlevelIteration ? 1536 /* SpreadIncludes */ : 1024 /* SpreadArray */);
                     }
@@ -68721,7 +70005,7 @@
                         // get the contextual element type from it. So we do something similar to
                         // getContextualTypeForElementExpression, which will crucially not error
                         // if there is no index type / iterated type.
-                        var restElementType = getIndexTypeOfType(spreadType, 1 /* Number */) ||
+                        var restElementType = getIndexTypeOfType(spreadType, numberType) ||
                             getIteratedTypeOrElementType(65 /* Destructuring */, spreadType, undefinedType, /*errorNode*/ undefined, /*checkAssignability*/ false) ||
                             unknownType;
                         elementTypes.push(restElementType);
@@ -68732,11 +70016,16 @@
                         elementFlags.push(4 /* Rest */);
                     }
                 }
+                else if (exactOptionalPropertyTypes && e.kind === 225 /* OmittedExpression */) {
+                    hasOmittedExpression = true;
+                    elementTypes.push(missingType);
+                    elementFlags.push(2 /* Optional */);
+                }
                 else {
                     var elementContextualType = getContextualTypeForElementExpression(contextualType, elementTypes.length);
                     var type = checkExpressionForMutableLocation(e, checkMode, elementContextualType, forceTuple);
-                    elementTypes.push(type);
-                    elementFlags.push(1 /* Required */);
+                    elementTypes.push(addOptionality(type, /*isProperty*/ true, hasOmittedExpression));
+                    elementFlags.push(hasOmittedExpression ? 2 /* Optional */ : 1 /* Required */);
                 }
             }
             if (inDestructuringPattern) {
@@ -68762,9 +70051,9 @@
         }
         function isNumericName(name) {
             switch (name.kind) {
-                case 159 /* ComputedPropertyName */:
+                case 160 /* ComputedPropertyName */:
                     return isNumericComputedName(name);
-                case 78 /* Identifier */:
+                case 79 /* Identifier */:
                     return isNumericLiteralName(name.escapedText);
                 case 8 /* NumericLiteral */:
                 case 10 /* StringLiteral */:
@@ -68778,9 +70067,6 @@
             // but this behavior is consistent with checkIndexedAccess
             return isTypeAssignableToKind(checkComputedPropertyName(name), 296 /* NumberLike */);
         }
-        function isInfinityOrNaNString(name) {
-            return name === "Infinity" || name === "-Infinity" || name === "NaN";
-        }
         function isNumericLiteralName(name) {
             // The intent of numeric names is that
             //     - they are names with text in a numeric form, and that
@@ -68838,15 +70124,24 @@
             var firstDecl = (_a = symbol.declarations) === null || _a === void 0 ? void 0 : _a[0];
             return isNumericLiteralName(symbol.escapedName) || (firstDecl && ts.isNamedDeclaration(firstDecl) && isNumericName(firstDecl.name));
         }
-        function getObjectLiteralIndexInfo(node, offset, properties, kind) {
+        function isSymbolWithSymbolName(symbol) {
+            var _a;
+            var firstDecl = (_a = symbol.declarations) === null || _a === void 0 ? void 0 : _a[0];
+            return ts.isKnownSymbol(symbol) || (firstDecl && ts.isNamedDeclaration(firstDecl) && ts.isComputedPropertyName(firstDecl.name) &&
+                isTypeAssignableToKind(checkComputedPropertyName(firstDecl.name), 4096 /* ESSymbol */));
+        }
+        function getObjectLiteralIndexInfo(node, offset, properties, keyType) {
             var propTypes = [];
             for (var i = offset; i < properties.length; i++) {
-                if (kind === 0 /* String */ || isSymbolWithNumericName(properties[i])) {
+                var prop = properties[i];
+                if (keyType === stringType && !isSymbolWithSymbolName(prop) ||
+                    keyType === numberType && isSymbolWithNumericName(prop) ||
+                    keyType === esSymbolType && isSymbolWithSymbolName(prop)) {
                     propTypes.push(getTypeOfSymbol(properties[i]));
                 }
             }
             var unionType = propTypes.length ? getUnionType(propTypes, 2 /* Subtype */) : undefinedType;
-            return createIndexInfo(unionType, isConstContext(node));
+            return createIndexInfo(keyType, unionType, isConstContext(node));
         }
         function getImmediateAliasedSymbol(symbol) {
             ts.Debug.assert((symbol.flags & 2097152 /* Alias */) !== 0, "Should only get Alias here.");
@@ -68869,7 +70164,7 @@
             var spread = emptyObjectType;
             var contextualType = getApparentTypeOfContextualType(node);
             var contextualTypeHasPattern = contextualType && contextualType.pattern &&
-                (contextualType.pattern.kind === 197 /* ObjectBindingPattern */ || contextualType.pattern.kind === 201 /* ObjectLiteralExpression */);
+                (contextualType.pattern.kind === 199 /* ObjectBindingPattern */ || contextualType.pattern.kind === 203 /* ObjectLiteralExpression */);
             var inConstContext = isConstContext(node);
             var checkFlags = inConstContext ? 8 /* Readonly */ : 0;
             var isInJavascript = ts.isInJSFile(node) && !ts.isInJsonFile(node);
@@ -68879,6 +70174,7 @@
             var patternWithComputedProperties = false;
             var hasComputedStringProperty = false;
             var hasComputedNumberProperty = false;
+            var hasComputedSymbolProperty = false;
             // Spreads may cause an early bail; ensure computed names are always checked (this is cached)
             // As otherwise they may not be checked until exports for the type at this position are retrieved,
             // which may never occur.
@@ -68892,16 +70188,16 @@
             for (var _b = 0, _c = node.properties; _b < _c.length; _b++) {
                 var memberDecl = _c[_b];
                 var member = getSymbolOfNode(memberDecl);
-                var computedNameType = memberDecl.name && memberDecl.name.kind === 159 /* ComputedPropertyName */ ?
+                var computedNameType = memberDecl.name && memberDecl.name.kind === 160 /* ComputedPropertyName */ ?
                     checkComputedPropertyName(memberDecl.name) : undefined;
-                if (memberDecl.kind === 289 /* PropertyAssignment */ ||
-                    memberDecl.kind === 290 /* ShorthandPropertyAssignment */ ||
+                if (memberDecl.kind === 291 /* PropertyAssignment */ ||
+                    memberDecl.kind === 292 /* ShorthandPropertyAssignment */ ||
                     ts.isObjectLiteralMethod(memberDecl)) {
-                    var type = memberDecl.kind === 289 /* PropertyAssignment */ ? checkPropertyAssignment(memberDecl, checkMode) :
+                    var type = memberDecl.kind === 291 /* PropertyAssignment */ ? checkPropertyAssignment(memberDecl, checkMode) :
                         // avoid resolving the left side of the ShorthandPropertyAssignment outside of the destructuring
                         // for error recovery purposes. For example, if a user wrote `{ a = 100 }` instead of `{ a: 100 }`.
                         // we don't want to say "could not find 'a'".
-                        memberDecl.kind === 290 /* ShorthandPropertyAssignment */ ? checkExpressionForMutableLocation(!inDestructuringPattern && memberDecl.objectAssignmentInitializer ? memberDecl.objectAssignmentInitializer : memberDecl.name, checkMode) :
+                        memberDecl.kind === 292 /* ShorthandPropertyAssignment */ ? checkExpressionForMutableLocation(!inDestructuringPattern && memberDecl.objectAssignmentInitializer ? memberDecl.objectAssignmentInitializer : memberDecl.name, checkMode) :
                             checkObjectLiteralMethod(memberDecl, checkMode);
                     if (isInJavascript) {
                         var jsDocType = getTypeForDeclarationFromJSDocComment(memberDecl);
@@ -68924,8 +70220,8 @@
                     if (inDestructuringPattern) {
                         // If object literal is an assignment pattern and if the assignment pattern specifies a default value
                         // for the property, make the property optional.
-                        var isOptional = (memberDecl.kind === 289 /* PropertyAssignment */ && hasDefaultValue(memberDecl.initializer)) ||
-                            (memberDecl.kind === 290 /* ShorthandPropertyAssignment */ && memberDecl.objectAssignmentInitializer);
+                        var isOptional = (memberDecl.kind === 291 /* PropertyAssignment */ && hasDefaultValue(memberDecl.initializer)) ||
+                            (memberDecl.kind === 292 /* ShorthandPropertyAssignment */ && memberDecl.objectAssignmentInitializer);
                         if (isOptional) {
                             prop.flags |= 16777216 /* Optional */;
                         }
@@ -68937,7 +70233,7 @@
                         if (impliedProp) {
                             prop.flags |= impliedProp.flags & 16777216 /* Optional */;
                         }
-                        else if (!compilerOptions.suppressExcessPropertyErrors && !getIndexInfoOfType(contextualType, 0 /* String */)) {
+                        else if (!compilerOptions.suppressExcessPropertyErrors && !getIndexInfoOfType(contextualType, stringType)) {
                             error(memberDecl.name, ts.Diagnostics.Object_literal_may_only_specify_known_properties_and_0_does_not_exist_in_type_1, symbolToString(member), typeToString(contextualType));
                         }
                     }
@@ -68951,7 +70247,7 @@
                     member = prop;
                     allPropertiesTable === null || allPropertiesTable === void 0 ? void 0 : allPropertiesTable.set(prop.escapedName, prop);
                 }
-                else if (memberDecl.kind === 291 /* SpreadAssignment */) {
+                else if (memberDecl.kind === 293 /* SpreadAssignment */) {
                     if (languageVersion < 2 /* ES2015 */) {
                         checkExternalEmitHelpers(memberDecl, 2 /* Assign */);
                     }
@@ -68961,17 +70257,19 @@
                         propertiesTable = ts.createSymbolTable();
                         hasComputedStringProperty = false;
                         hasComputedNumberProperty = false;
+                        hasComputedSymbolProperty = false;
                     }
                     var type = getReducedType(checkExpression(memberDecl.expression));
                     if (isValidSpreadType(type)) {
+                        var mergedType = tryMergeUnionOfObjectTypeAndEmptyObject(type, inConstContext);
                         if (allPropertiesTable) {
-                            checkSpreadPropOverrides(type, allPropertiesTable, memberDecl);
+                            checkSpreadPropOverrides(mergedType, allPropertiesTable, memberDecl);
                         }
                         offset = propertiesArray.length;
                         if (spread === errorType) {
                             continue;
                         }
-                        spread = getSpreadType(spread, type, node.symbol, objectFlags, inConstContext);
+                        spread = getSpreadType(spread, mergedType, node.symbol, objectFlags, inConstContext);
                     }
                     else {
                         error(memberDecl, ts.Diagnostics.Spread_types_may_only_be_created_from_object_types);
@@ -68985,7 +70283,7 @@
                     // an ordinary function declaration(section 6.1) with no parameters.
                     // A set accessor declaration is processed in the same manner
                     // as an ordinary function declaration with a single parameter and a Void return type.
-                    ts.Debug.assert(memberDecl.kind === 168 /* GetAccessor */ || memberDecl.kind === 169 /* SetAccessor */);
+                    ts.Debug.assert(memberDecl.kind === 170 /* GetAccessor */ || memberDecl.kind === 171 /* SetAccessor */);
                     checkNodeDeferred(memberDecl);
                 }
                 if (computedNameType && !(computedNameType.flags & 8576 /* StringOrNumberLiteralOrUnique */)) {
@@ -68993,6 +70291,9 @@
                         if (isTypeAssignableTo(computedNameType, numberType)) {
                             hasComputedNumberProperty = true;
                         }
+                        else if (isTypeAssignableTo(computedNameType, esSymbolType)) {
+                            hasComputedSymbolProperty = true;
+                        }
                         else {
                             hasComputedStringProperty = true;
                         }
@@ -69010,7 +70311,7 @@
             // type with those properties for which the binding pattern specifies a default value.
             // If the object literal is spread into another object literal, skip this step and let the top-level object
             // literal handle it instead.
-            if (contextualTypeHasPattern && node.parent.kind !== 291 /* SpreadAssignment */) {
+            if (contextualTypeHasPattern && node.parent.kind !== 293 /* SpreadAssignment */) {
                 for (var _d = 0, _e = getPropertiesOfType(contextualType); _d < _e.length; _d++) {
                     var prop = _e[_d];
                     if (!propertiesTable.get(prop.escapedName) && !getPropertyOfType(spread, prop.escapedName)) {
@@ -69038,9 +70339,14 @@
             }
             return createObjectLiteralType();
             function createObjectLiteralType() {
-                var stringIndexInfo = hasComputedStringProperty ? getObjectLiteralIndexInfo(node, offset, propertiesArray, 0 /* String */) : undefined;
-                var numberIndexInfo = hasComputedNumberProperty ? getObjectLiteralIndexInfo(node, offset, propertiesArray, 1 /* Number */) : undefined;
-                var result = createAnonymousType(node.symbol, propertiesTable, ts.emptyArray, ts.emptyArray, stringIndexInfo, numberIndexInfo);
+                var indexInfos = [];
+                if (hasComputedStringProperty)
+                    indexInfos.push(getObjectLiteralIndexInfo(node, offset, propertiesArray, stringType));
+                if (hasComputedNumberProperty)
+                    indexInfos.push(getObjectLiteralIndexInfo(node, offset, propertiesArray, numberType));
+                if (hasComputedSymbolProperty)
+                    indexInfos.push(getObjectLiteralIndexInfo(node, offset, propertiesArray, esSymbolType));
+                var result = createAnonymousType(node.symbol, propertiesTable, ts.emptyArray, ts.emptyArray, indexInfos);
                 result.objectFlags |= objectFlags | 128 /* ObjectLiteral */ | 262144 /* ContainsObjectOrArrayLiteral */;
                 if (isJSObjectLiteral) {
                     result.objectFlags |= 8192 /* JSLiteral */;
@@ -69102,14 +70408,14 @@
             checkJsxChildren(node);
             return getJsxElementTypeAt(node) || anyType;
         }
-        function isUnhyphenatedJsxName(name) {
-            return !ts.stringContains(name, "-");
+        function isHyphenatedJsxName(name) {
+            return ts.stringContains(name, "-");
         }
         /**
          * Returns true iff React would emit this tag name as a string rather than an identifier or qualified name
          */
         function isJsxIntrinsicIdentifier(tagName) {
-            return tagName.kind === 78 /* Identifier */ && ts.isIntrinsicJsxName(tagName.escapedText);
+            return tagName.kind === 79 /* Identifier */ && ts.isIntrinsicJsxName(tagName.escapedText);
         }
         function checkJsxAttribute(node, checkMode) {
             return node.initializer
@@ -69156,7 +70462,7 @@
                     }
                 }
                 else {
-                    ts.Debug.assert(attributeDecl.kind === 283 /* JsxSpreadAttribute */);
+                    ts.Debug.assert(attributeDecl.kind === 285 /* JsxSpreadAttribute */);
                     if (attributesTable.size > 0) {
                         spread = getSpreadType(spread, createJsxAttributesType(), attributes.symbol, objectFlags, /*readonly*/ false);
                         attributesTable = ts.createSymbolTable();
@@ -69182,7 +70488,7 @@
                 }
             }
             // Handle children attribute
-            var parent = openingLikeElement.parent.kind === 274 /* JsxElement */ ? openingLikeElement.parent : undefined;
+            var parent = openingLikeElement.parent.kind === 276 /* JsxElement */ ? openingLikeElement.parent : undefined;
             // We have to check that openingElement of the parent is the one we are visiting as this may not be true for selfClosingElement
             if (parent && parent.openingElement === openingLikeElement && parent.children.length > 0) {
                 var childrenTypes = checkJsxChildren(parent, checkMode);
@@ -69206,7 +70512,7 @@
                     childrenPropSymbol.valueDeclaration.symbol = childrenPropSymbol;
                     var childPropMap = ts.createSymbolTable();
                     childPropMap.set(jsxChildrenPropertyName, childrenPropSymbol);
-                    spread = getSpreadType(spread, createAnonymousType(attributes.symbol, childPropMap, ts.emptyArray, ts.emptyArray, /*stringIndexInfo*/ undefined, /*numberIndexInfo*/ undefined), attributes.symbol, objectFlags, /*readonly*/ false);
+                    spread = getSpreadType(spread, createAnonymousType(attributes.symbol, childPropMap, ts.emptyArray, ts.emptyArray, ts.emptyArray), attributes.symbol, objectFlags, /*readonly*/ false);
                 }
             }
             if (hasSpreadAnyType) {
@@ -69223,7 +70529,7 @@
              */
             function createJsxAttributesType() {
                 objectFlags |= freshObjectLiteralFlag;
-                var result = createAnonymousType(attributes.symbol, attributesTable, ts.emptyArray, ts.emptyArray, /*stringIndexInfo*/ undefined, /*numberIndexInfo*/ undefined);
+                var result = createAnonymousType(attributes.symbol, attributesTable, ts.emptyArray, ts.emptyArray, ts.emptyArray);
                 result.objectFlags |= objectFlags | 128 /* ObjectLiteral */ | 262144 /* ContainsObjectOrArrayLiteral */;
                 return result;
             }
@@ -69239,7 +70545,7 @@
                         childrenTypes.push(stringType);
                     }
                 }
-                else if (child.kind === 284 /* JsxExpression */ && !child.expression) {
+                else if (child.kind === 286 /* JsxExpression */ && !child.expression) {
                     continue; // empty jsx expressions don't *really* count as present children
                 }
                 else {
@@ -69251,11 +70557,12 @@
         function checkSpreadPropOverrides(type, props, spread) {
             for (var _i = 0, _a = getPropertiesOfType(type); _i < _a.length; _i++) {
                 var right = _a[_i];
-                var left = props.get(right.escapedName);
-                var rightType = getTypeOfSymbol(right);
-                if (left && !maybeTypeOfKind(rightType, 98304 /* Nullable */) && !(maybeTypeOfKind(rightType, 3 /* AnyOrUnknown */) && right.flags & 16777216 /* Optional */)) {
-                    var diagnostic = error(left.valueDeclaration, ts.Diagnostics._0_is_specified_more_than_once_so_this_usage_will_be_overwritten, ts.unescapeLeadingUnderscores(left.escapedName));
-                    ts.addRelatedInfo(diagnostic, ts.createDiagnosticForNode(spread, ts.Diagnostics.This_spread_always_overwrites_this_property));
+                if (!(right.flags & 16777216 /* Optional */)) {
+                    var left = props.get(right.escapedName);
+                    if (left) {
+                        var diagnostic = error(left.valueDeclaration, ts.Diagnostics._0_is_specified_more_than_once_so_this_usage_will_be_overwritten, ts.unescapeLeadingUnderscores(left.escapedName));
+                        ts.addRelatedInfo(diagnostic, ts.createDiagnosticForNode(spread, ts.Diagnostics.This_spread_always_overwrites_this_property));
+                    }
                 }
             }
         }
@@ -69293,7 +70600,7 @@
                         return links.resolvedSymbol = intrinsicProp;
                     }
                     // Intrinsic string indexer case
-                    var indexSignatureType = getIndexTypeOfType(intrinsicElementsType, 0 /* String */);
+                    var indexSignatureType = getIndexTypeOfType(intrinsicElementsType, stringType);
                     if (indexSignatureType) {
                         links.jsxFlags |= 2 /* IntrinsicIndexedElement */;
                         return links.resolvedSymbol = intrinsicElementsType.symbol;
@@ -69452,7 +70759,7 @@
                 if (intrinsicProp) {
                     return getTypeOfSymbol(intrinsicProp);
                 }
-                var indexSignatureType = getIndexTypeOfType(intrinsicElementsType, 0 /* String */);
+                var indexSignatureType = getIndexTypeOfType(intrinsicElementsType, stringType);
                 if (indexSignatureType) {
                     return indexSignatureType;
                 }
@@ -69504,7 +70811,7 @@
                 }
                 else if (links.jsxFlags & 2 /* IntrinsicIndexedElement */) {
                     return links.resolvedJsxElementAttributesType =
-                        getIndexTypeOfType(getJsxType(JsxNames.IntrinsicElements, node), 0 /* String */) || errorType;
+                        getIndexTypeOfType(getJsxType(JsxNames.IntrinsicElements, node), stringType) || errorType;
                 }
                 else {
                     return links.resolvedJsxElementAttributesType = errorType;
@@ -69594,11 +70901,13 @@
          */
         function isKnownProperty(targetType, name, isComparingJsxAttributes) {
             if (targetType.flags & 524288 /* Object */) {
-                var resolved = resolveStructuredTypeMembers(targetType);
-                if (resolved.stringIndexInfo ||
-                    resolved.numberIndexInfo && isNumericLiteralName(name) ||
-                    getPropertyOfObjectType(targetType, name) ||
-                    isComparingJsxAttributes && !isUnhyphenatedJsxName(name)) {
+                // For backwards compatibility a symbol-named property is satisfied by a string index signature. This
+                // is incorrect and inconsistent with element access expressions, where it is an error, so eventually
+                // we should remove this exception.
+                if (getPropertyOfObjectType(targetType, name) ||
+                    getApplicableIndexInfoForName(targetType, name) ||
+                    isLateBoundName(name) && getIndexInfoOfType(targetType, stringType) ||
+                    isComparingJsxAttributes && isHyphenatedJsxName(name)) {
                     // For JSXAttributes, if the attribute has a hyphenated name, consider that the attribute to be known.
                     return true;
                 }
@@ -69660,9 +70969,9 @@
         function checkPropertyAccessibility(node, isSuper, writing, type, prop, reportError) {
             if (reportError === void 0) { reportError = true; }
             var flags = ts.getDeclarationModifierFlagsFromSymbol(prop, writing);
-            var errorNode = node.kind === 158 /* QualifiedName */ ? node.right :
-                node.kind === 196 /* ImportType */ ? node :
-                    node.kind === 199 /* BindingElement */ && node.propertyName ? node.propertyName : node.name;
+            var errorNode = node.kind === 159 /* QualifiedName */ ? node.right :
+                node.kind === 198 /* ImportType */ ? node :
+                    node.kind === 201 /* BindingElement */ && node.propertyName ? node.propertyName : node.name;
             if (isSuper) {
                 // TS 1.0 spec (April 2014): 4.8.2
                 // - In a constructor, instance member function, instance member accessor, or
@@ -69819,10 +71128,11 @@
             return propagateOptionalTypeMarker(checkPropertyAccessExpressionOrQualifiedName(node, node.expression, checkNonNullType(nonOptionalType, node.expression), node.name, checkMode), node, nonOptionalType !== leftType);
         }
         function checkQualifiedName(node, checkMode) {
-            return checkPropertyAccessExpressionOrQualifiedName(node, node.left, checkNonNullExpression(node.left), node.right, checkMode);
+            var leftType = ts.isPartOfTypeQuery(node) && ts.isThisIdentifier(node.left) ? checkNonNullType(checkThisExpression(node.left), node.left) : checkNonNullExpression(node.left);
+            return checkPropertyAccessExpressionOrQualifiedName(node, node.left, leftType, node.right, checkMode);
         }
         function isMethodAccessForCall(node) {
-            while (node.parent.kind === 208 /* ParenthesizedExpression */) {
+            while (node.parent.kind === 210 /* ParenthesizedExpression */) {
                 node = node.parent;
             }
             return ts.isCallOrNewExpression(node.parent) && node.parent.expression === node;
@@ -69957,9 +71267,11 @@
             }
             var propType;
             if (!prop) {
-                var indexInfo = !ts.isPrivateIdentifier(right) && (assignmentKind === 0 /* None */ || !isGenericObjectType(leftType) || isThisTypeParameter(leftType)) ? getIndexInfoOfType(apparentType, 0 /* String */) : undefined;
+                var indexInfo = !ts.isPrivateIdentifier(right) && (assignmentKind === 0 /* None */ || !isGenericObjectType(leftType) || isThisTypeParameter(leftType)) ?
+                    getApplicableIndexInfoForName(apparentType, right.escapedText) : undefined;
                 if (!(indexInfo && indexInfo.type)) {
-                    if (isJSLiteralType(leftType)) {
+                    var isUncheckedJS = isUncheckedJSSuggestion(node, leftType.symbol, /*excludeClasses*/ true);
+                    if (!isUncheckedJS && isJSLiteralType(leftType)) {
                         return anyType;
                     }
                     if (leftType.symbol === globalThisSymbol) {
@@ -69972,7 +71284,7 @@
                         return anyType;
                     }
                     if (right.escapedText && !checkAndReportErrorForExtendingInterface(node)) {
-                        reportNonexistentProperty(right, isThisTypeParameter(leftType) ? apparentType : leftType);
+                        reportNonexistentProperty(right, isThisTypeParameter(leftType) ? apparentType : leftType, isUncheckedJS);
                     }
                     return errorType;
                 }
@@ -69992,7 +71304,7 @@
                 markPropertyAsReferenced(prop, node, isSelfTypeAccess(left, parentSymbol));
                 getNodeLinks(node).resolvedSymbol = prop;
                 var writing = ts.isWriteAccess(node);
-                checkPropertyAccessibility(node, left.kind === 105 /* SuperKeyword */, writing, apparentType, prop);
+                checkPropertyAccessibility(node, left.kind === 106 /* SuperKeyword */, writing, apparentType, prop);
                 if (isAssignmentToReadonlyEntity(node, prop, assignmentKind)) {
                     error(right, ts.Diagnostics.Cannot_assign_to_0_because_it_is_a_read_only_property, ts.idText(right));
                     return errorType;
@@ -70001,16 +71313,37 @@
             }
             return getFlowTypeOfAccessExpression(node, prop, propType, right, checkMode);
         }
+        /**
+         * Determines whether a did-you-mean error should be a suggestion in an unchecked JS file.
+         * Only applies to unchecked JS files without checkJS, // @ts-check or // @ts-nocheck
+         * It does not suggest when the suggestion:
+         * - Is from a global file that is different from the reference file, or
+         * - (optionally) Is a class, or is a this.x property access expression
+         */
+        function isUncheckedJSSuggestion(node, suggestion, excludeClasses) {
+            var file = ts.getSourceFileOfNode(node);
+            if (file) {
+                if (compilerOptions.checkJs === undefined && file.checkJsDirective === undefined && (file.scriptKind === 1 /* JS */ || file.scriptKind === 2 /* JSX */)) {
+                    var declarationFile = ts.forEach(suggestion === null || suggestion === void 0 ? void 0 : suggestion.declarations, ts.getSourceFileOfNode);
+                    return !(file !== declarationFile && !!declarationFile && isGlobalSourceFile(declarationFile))
+                        && !(excludeClasses && suggestion && suggestion.flags & 32 /* Class */)
+                        && !(!!node && excludeClasses && ts.isPropertyAccessExpression(node) && node.expression.kind === 108 /* ThisKeyword */);
+                }
+            }
+            return false;
+        }
         function getFlowTypeOfAccessExpression(node, prop, propType, errorNode, checkMode) {
             // Only compute control flow type if this is a property access expression that isn't an
             // assignment target, and the referenced property was declared as a variable, property,
             // accessor, or optional method.
             var assignmentKind = ts.getAssignmentTargetKind(node);
-            if (assignmentKind === 1 /* Definite */ ||
-                prop &&
-                    !(prop.flags & (3 /* Variable */ | 4 /* Property */ | 98304 /* Accessor */))
-                    && !(prop.flags & 8192 /* Method */ && propType.flags & 1048576 /* Union */)
-                    && !isDuplicatedCommonJSExport(prop.declarations)) {
+            if (assignmentKind === 1 /* Definite */) {
+                return removeMissingType(propType, !!(prop && prop.flags & 16777216 /* Optional */));
+            }
+            if (prop &&
+                !(prop.flags & (3 /* Variable */ | 4 /* Property */ | 98304 /* Accessor */))
+                && !(prop.flags & 8192 /* Method */ && propType.flags & 1048576 /* Union */)
+                && !isDuplicatedCommonJSExport(prop.declarations)) {
                 return propType;
             }
             if (propType === autoType) {
@@ -70022,12 +71355,14 @@
             // and if we are in a constructor of the same class as the property declaration, assume that
             // the property is uninitialized at the top of the control flow.
             var assumeUninitialized = false;
-            if (strictNullChecks && strictPropertyInitialization && ts.isAccessExpression(node) && node.expression.kind === 107 /* ThisKeyword */) {
+            if (strictNullChecks && strictPropertyInitialization && ts.isAccessExpression(node) && node.expression.kind === 108 /* ThisKeyword */) {
                 var declaration = prop && prop.valueDeclaration;
-                if (declaration && isInstancePropertyWithoutInitializer(declaration)) {
-                    var flowContainer = getControlFlowContainer(node);
-                    if (flowContainer.kind === 167 /* Constructor */ && flowContainer.parent === declaration.parent && !(declaration.flags & 8388608 /* Ambient */)) {
-                        assumeUninitialized = true;
+                if (declaration && isPropertyWithoutInitializer(declaration)) {
+                    if (!ts.isStatic(declaration)) {
+                        var flowContainer = getControlFlowContainer(node);
+                        if (flowContainer.kind === 169 /* Constructor */ && flowContainer.parent === declaration.parent && !(declaration.flags & 8388608 /* Ambient */)) {
+                            assumeUninitialized = true;
+                        }
                     }
                 }
             }
@@ -70052,15 +71387,15 @@
             }
             var diagnosticMessage;
             var declarationName = ts.idText(right);
-            if (isInPropertyInitializer(node)
+            if (isInPropertyInitializerOrClassStaticBlock(node)
                 && !isOptionalPropertyDeclaration(valueDeclaration)
                 && !(ts.isAccessExpression(node) && ts.isAccessExpression(node.expression))
                 && !isBlockScopedNameDeclaredBeforeUse(valueDeclaration, right)
                 && (compilerOptions.useDefineForClassFields || !isPropertyDeclaredInAncestorClass(prop))) {
                 diagnosticMessage = error(right, ts.Diagnostics.Property_0_is_used_before_its_initialization, declarationName);
             }
-            else if (valueDeclaration.kind === 253 /* ClassDeclaration */ &&
-                node.parent.kind !== 174 /* TypeReference */ &&
+            else if (valueDeclaration.kind === 255 /* ClassDeclaration */ &&
+                node.parent.kind !== 176 /* TypeReference */ &&
                 !(valueDeclaration.flags & 8388608 /* Ambient */) &&
                 !isBlockScopedNameDeclaredBeforeUse(valueDeclaration, right)) {
                 diagnosticMessage = error(right, ts.Diagnostics.Class_0_used_before_its_declaration, declarationName);
@@ -70069,26 +71404,29 @@
                 ts.addRelatedInfo(diagnosticMessage, ts.createDiagnosticForNode(valueDeclaration, ts.Diagnostics._0_is_declared_here, declarationName));
             }
         }
-        function isInPropertyInitializer(node) {
+        function isInPropertyInitializerOrClassStaticBlock(node) {
             return !!ts.findAncestor(node, function (node) {
                 switch (node.kind) {
-                    case 164 /* PropertyDeclaration */:
+                    case 165 /* PropertyDeclaration */:
                         return true;
-                    case 289 /* PropertyAssignment */:
-                    case 166 /* MethodDeclaration */:
-                    case 168 /* GetAccessor */:
-                    case 169 /* SetAccessor */:
-                    case 291 /* SpreadAssignment */:
-                    case 159 /* ComputedPropertyName */:
-                    case 229 /* TemplateSpan */:
-                    case 284 /* JsxExpression */:
-                    case 281 /* JsxAttribute */:
-                    case 282 /* JsxAttributes */:
-                    case 283 /* JsxSpreadAttribute */:
-                    case 276 /* JsxOpeningElement */:
-                    case 224 /* ExpressionWithTypeArguments */:
-                    case 287 /* HeritageClause */:
+                    case 291 /* PropertyAssignment */:
+                    case 167 /* MethodDeclaration */:
+                    case 170 /* GetAccessor */:
+                    case 171 /* SetAccessor */:
+                    case 293 /* SpreadAssignment */:
+                    case 160 /* ComputedPropertyName */:
+                    case 231 /* TemplateSpan */:
+                    case 286 /* JsxExpression */:
+                    case 283 /* JsxAttribute */:
+                    case 284 /* JsxAttributes */:
+                    case 285 /* JsxSpreadAttribute */:
+                    case 278 /* JsxOpeningElement */:
+                    case 226 /* ExpressionWithTypeArguments */:
+                    case 289 /* HeritageClause */:
                         return false;
+                    case 212 /* ArrowFunction */:
+                    case 236 /* ExpressionStatement */:
+                        return ts.isBlock(node.parent) && ts.isClassStaticBlockDeclaration(node.parent.parent) ? true : "quit";
                     default:
                         return ts.isExpressionNode(node) ? false : "quit";
                 }
@@ -70121,13 +71459,13 @@
             }
             return getIntersectionType(x);
         }
-        function reportNonexistentProperty(propNode, containingType) {
+        function reportNonexistentProperty(propNode, containingType, isUncheckedJS) {
             var errorInfo;
             var relatedInfo;
             if (!ts.isPrivateIdentifier(propNode) && containingType.flags & 1048576 /* Union */ && !(containingType.flags & 131068 /* Primitive */)) {
                 for (var _i = 0, _a = containingType.types; _i < _a.length; _i++) {
                     var subtype = _a[_i];
-                    if (!getPropertyOfType(subtype, propNode.escapedText) && !getIndexInfoOfType(subtype, 0 /* String */)) {
+                    if (!getPropertyOfType(subtype, propNode.escapedText) && !getApplicableIndexInfoForName(subtype, propNode.escapedText)) {
                         errorInfo = ts.chainDiagnosticMessages(errorInfo, ts.Diagnostics.Property_0_does_not_exist_on_type_1, ts.declarationNameToString(propNode), typeToString(subtype));
                         break;
                     }
@@ -70155,7 +71493,8 @@
                         var suggestion = getSuggestedSymbolForNonexistentProperty(propNode, containingType);
                         if (suggestion !== undefined) {
                             var suggestedName = ts.symbolName(suggestion);
-                            errorInfo = ts.chainDiagnosticMessages(errorInfo, ts.Diagnostics.Property_0_does_not_exist_on_type_1_Did_you_mean_2, missingProperty, container, suggestedName);
+                            var message = isUncheckedJS ? ts.Diagnostics.Property_0_may_not_exist_on_type_1_Did_you_mean_2 : ts.Diagnostics.Property_0_does_not_exist_on_type_1_Did_you_mean_2;
+                            errorInfo = ts.chainDiagnosticMessages(errorInfo, message, missingProperty, container, suggestedName);
                             relatedInfo = suggestion.valueDeclaration && ts.createDiagnosticForNode(suggestion.valueDeclaration, ts.Diagnostics._0_is_declared_here, suggestedName);
                         }
                         else {
@@ -70171,7 +71510,7 @@
             if (relatedInfo) {
                 ts.addRelatedInfo(resultDiagnostic, relatedInfo);
             }
-            diagnostics.add(resultDiagnostic);
+            addErrorOrSuggestion(!isUncheckedJS, resultDiagnostic);
         }
         function containerSeemsToBeEmptyDomElement(containingType) {
             return (compilerOptions.lib && !compilerOptions.lib.includes("dom")) &&
@@ -70180,7 +71519,7 @@
         }
         function typeHasStaticProperty(propName, containingType) {
             var prop = containingType.symbol && getPropertyOfType(getTypeOfSymbol(containingType.symbol), propName);
-            return prop !== undefined && !!prop.valueDeclaration && ts.hasSyntacticModifier(prop.valueDeclaration, 32 /* Static */);
+            return prop !== undefined && !!prop.valueDeclaration && ts.isStatic(prop.valueDeclaration);
         }
         function getSuggestedLibForNonExistentName(name) {
             var missingName = diagnosticName(name);
@@ -70210,6 +71549,9 @@
                 }
             }
         }
+        function getSuggestedSymbolForNonexistentClassMember(name, baseType) {
+            return getSpellingSuggestionForName(name, getPropertiesOfType(baseType), 106500 /* ClassMember */);
+        }
         function getSuggestedSymbolForNonexistentProperty(name, containingType) {
             var props = getPropertiesOfType(containingType);
             if (typeof name !== "string") {
@@ -70337,21 +71679,21 @@
             (ts.getCheckFlags(prop) & 1 /* Instantiated */ ? getSymbolLinks(prop).target : prop).isReferenced = 67108863 /* All */;
         }
         function isSelfTypeAccess(name, parent) {
-            return name.kind === 107 /* ThisKeyword */
+            return name.kind === 108 /* ThisKeyword */
                 || !!parent && ts.isEntityNameExpression(name) && parent === getResolvedSymbol(ts.getFirstIdentifier(name));
         }
         function isValidPropertyAccess(node, propertyName) {
             switch (node.kind) {
-                case 202 /* PropertyAccessExpression */:
-                    return isValidPropertyAccessWithType(node, node.expression.kind === 105 /* SuperKeyword */, propertyName, getWidenedType(checkExpression(node.expression)));
-                case 158 /* QualifiedName */:
+                case 204 /* PropertyAccessExpression */:
+                    return isValidPropertyAccessWithType(node, node.expression.kind === 106 /* SuperKeyword */, propertyName, getWidenedType(checkExpression(node.expression)));
+                case 159 /* QualifiedName */:
                     return isValidPropertyAccessWithType(node, /*isSuper*/ false, propertyName, getWidenedType(checkExpression(node.left)));
-                case 196 /* ImportType */:
+                case 198 /* ImportType */:
                     return isValidPropertyAccessWithType(node, /*isSuper*/ false, propertyName, getTypeFromTypeNode(node));
             }
         }
         function isValidPropertyAccessForCompletions(node, type, property) {
-            return isValidPropertyAccessWithType(node, node.kind === 202 /* PropertyAccessExpression */ && node.expression.kind === 105 /* SuperKeyword */, property.escapedName, type);
+            return isValidPropertyAccessWithType(node, node.kind === 204 /* PropertyAccessExpression */ && node.expression.kind === 106 /* SuperKeyword */, property.escapedName, type);
             // Previously we validated the 'this' type of methods but this adversely affected performance. See #31377 for more context.
         }
         function isValidPropertyAccessWithType(node, isSuper, propertyName, type) {
@@ -70374,13 +71716,13 @@
          */
         function getForInVariableSymbol(node) {
             var initializer = node.initializer;
-            if (initializer.kind === 251 /* VariableDeclarationList */) {
+            if (initializer.kind === 253 /* VariableDeclarationList */) {
                 var variable = initializer.declarations[0];
                 if (variable && !ts.isBindingPattern(variable.name)) {
                     return getSymbolOfNode(variable);
                 }
             }
-            else if (initializer.kind === 78 /* Identifier */) {
+            else if (initializer.kind === 79 /* Identifier */) {
                 return getResolvedSymbol(initializer);
             }
             return undefined;
@@ -70389,7 +71731,7 @@
          * Return true if the given type is considered to have numeric property names.
          */
         function hasNumericPropertyNames(type) {
-            return getIndexTypeOfType(type, 1 /* Number */) && !getIndexTypeOfType(type, 0 /* String */);
+            return getIndexInfosOfType(type).length === 1 && !!getIndexInfoOfType(type, numberType);
         }
         /**
          * Return true if given node is an expression consisting of an identifier (possibly parenthesized)
@@ -70397,13 +71739,13 @@
          */
         function isForInVariableForNumericPropertyNames(expr) {
             var e = ts.skipParentheses(expr);
-            if (e.kind === 78 /* Identifier */) {
+            if (e.kind === 79 /* Identifier */) {
                 var symbol = getResolvedSymbol(e);
                 if (symbol.flags & 3 /* Variable */) {
                     var child = expr;
                     var node = expr.parent;
                     while (node) {
-                        if (node.kind === 239 /* ForInStatement */ &&
+                        if (node.kind === 241 /* ForInStatement */ &&
                             child === node.statement &&
                             getForInVariableSymbol(node) === symbol &&
                             hasNumericPropertyNames(getTypeOfExpression(node.expression))) {
@@ -70438,9 +71780,9 @@
             }
             var effectiveIndexType = isForInVariableForNumericPropertyNames(indexExpression) ? numberType : indexType;
             var accessFlags = ts.isAssignmentTarget(node) ?
-                2 /* Writing */ | (isGenericObjectType(objectType) && !isThisTypeParameter(objectType) ? 1 /* NoIndexSignatures */ : 0) :
-                0 /* None */;
-            var indexedAccessType = getIndexedAccessTypeOrUndefined(objectType, effectiveIndexType, /*noUncheckedIndexedAccessCandidate*/ undefined, node, accessFlags | 16 /* ExpressionPosition */) || errorType;
+                4 /* Writing */ | (isGenericObjectType(objectType) && !isThisTypeParameter(objectType) ? 2 /* NoIndexSignatures */ : 0) :
+                32 /* ExpressionPosition */;
+            var indexedAccessType = getIndexedAccessTypeOrUndefined(objectType, effectiveIndexType, accessFlags, node) || errorType;
             return checkIndexedAccessIndexType(getFlowTypeOfAccessExpression(node, getNodeLinks(node).resolvedSymbol, indexedAccessType, indexExpression, checkMode), node);
         }
         function callLikeExpressionMayHaveTypeArguments(node) {
@@ -70452,13 +71794,13 @@
                 // This gets us diagnostics for the type arguments and marks them as referenced.
                 ts.forEach(node.typeArguments, checkSourceElement);
             }
-            if (node.kind === 206 /* TaggedTemplateExpression */) {
+            if (node.kind === 208 /* TaggedTemplateExpression */) {
                 checkExpression(node.template);
             }
             else if (ts.isJsxOpeningLikeElement(node)) {
                 checkExpression(node.attributes);
             }
-            else if (node.kind !== 162 /* Decorator */) {
+            else if (node.kind !== 163 /* Decorator */) {
                 ts.forEach(node.arguments, function (argument) {
                     checkExpression(argument);
                 });
@@ -70522,7 +71864,7 @@
             }
         }
         function isSpreadArgument(arg) {
-            return !!arg && (arg.kind === 221 /* SpreadElement */ || arg.kind === 228 /* SyntheticExpression */ && arg.isSpread);
+            return !!arg && (arg.kind === 223 /* SpreadElement */ || arg.kind === 230 /* SyntheticExpression */ && arg.isSpread);
         }
         function getSpreadArgumentIndex(args) {
             return ts.findIndex(args, isSpreadArgument);
@@ -70539,9 +71881,9 @@
             var callIsIncomplete = false; // In incomplete call we want to be lenient when we have too few arguments
             var effectiveParameterCount = getParameterCount(signature);
             var effectiveMinimumArguments = getMinArgumentCount(signature);
-            if (node.kind === 206 /* TaggedTemplateExpression */) {
+            if (node.kind === 208 /* TaggedTemplateExpression */) {
                 argCount = args.length;
-                if (node.template.kind === 219 /* TemplateExpression */) {
+                if (node.template.kind === 221 /* TemplateExpression */) {
                     // If a tagged template expression lacks a tail literal, the call is incomplete.
                     // Specifically, a template only can end in a TemplateTail or a Missing literal.
                     var lastSpan = ts.last(node.template.templateSpans); // we should always have at least one span.
@@ -70556,7 +71898,7 @@
                     callIsIncomplete = !!templateLiteral.isUnterminated;
                 }
             }
-            else if (node.kind === 162 /* Decorator */) {
+            else if (node.kind === 163 /* Decorator */) {
                 argCount = getDecoratorArgumentCount(node, signature);
             }
             else if (ts.isJsxOpeningLikeElement(node)) {
@@ -70570,7 +71912,7 @@
             }
             else if (!node.arguments) {
                 // This only happens when we have something of the form: 'new C'
-                ts.Debug.assert(node.kind === 205 /* NewExpression */);
+                ts.Debug.assert(node.kind === 207 /* NewExpression */);
                 return getMinArgumentCount(signature) === 0;
             }
             else {
@@ -70619,7 +71961,7 @@
         function getSingleSignature(type, kind, allowMembers) {
             if (type.flags & 524288 /* Object */) {
                 var resolved = resolveStructuredTypeMembers(type);
-                if (allowMembers || resolved.properties.length === 0 && !resolved.stringIndexInfo && !resolved.numberIndexInfo) {
+                if (allowMembers || resolved.properties.length === 0 && resolved.indexInfos.length === 0) {
                     if (kind === 0 /* Call */ && resolved.callSignatures.length === 1 && resolved.constructSignatures.length === 0) {
                         return resolved.callSignatures[0];
                     }
@@ -70673,7 +72015,7 @@
             // example, given a 'function wrap<T, U>(cb: (x: T) => U): (x: T) => U' and a call expression
             // 'let f: (x: string) => number = wrap(s => s.length)', we infer from the declared type of 'f' to the
             // return type of 'wrap'.
-            if (node.kind !== 162 /* Decorator */) {
+            if (node.kind !== 163 /* Decorator */) {
                 var contextualType = getContextualType(node, ts.every(signature.typeParameters, function (p) { return !!getDefaultFromTypeParameter(p); }) ? 8 /* SkipBindingPatterns */ : 0 /* None */);
                 if (contextualType) {
                     // We clone the inference context to avoid disturbing a resolution in progress for an
@@ -70721,7 +72063,7 @@
             }
             for (var i = 0; i < argCount; i++) {
                 var arg = args[i];
-                if (arg.kind !== 223 /* OmittedExpression */) {
+                if (arg.kind !== 225 /* OmittedExpression */) {
                     var paramType = getTypeAtPosition(signature, i);
                     var argType = checkExpressionWithContextualType(arg, paramType, context, checkMode);
                     inferTypes(context.inferences, argType, paramType);
@@ -70745,7 +72087,7 @@
                 if (isSpreadArgument(arg)) {
                     // We are inferring from a spread expression in the last argument position, i.e. both the parameter
                     // and the argument are ...x forms.
-                    return getMutableArrayOrTupleType(arg.kind === 228 /* SyntheticExpression */ ? arg.type :
+                    return getMutableArrayOrTupleType(arg.kind === 230 /* SyntheticExpression */ ? arg.type :
                         checkExpressionWithContextualType(arg.expression, restType, context, checkMode));
                 }
             }
@@ -70755,24 +72097,24 @@
             for (var i = index; i < argCount; i++) {
                 var arg = args[i];
                 if (isSpreadArgument(arg)) {
-                    var spreadType = arg.kind === 228 /* SyntheticExpression */ ? arg.type : checkExpression(arg.expression);
+                    var spreadType = arg.kind === 230 /* SyntheticExpression */ ? arg.type : checkExpression(arg.expression);
                     if (isArrayLikeType(spreadType)) {
                         types.push(spreadType);
                         flags.push(8 /* Variadic */);
                     }
                     else {
-                        types.push(checkIteratedTypeOrElementType(33 /* Spread */, spreadType, undefinedType, arg.kind === 221 /* SpreadElement */ ? arg.expression : arg));
+                        types.push(checkIteratedTypeOrElementType(33 /* Spread */, spreadType, undefinedType, arg.kind === 223 /* SpreadElement */ ? arg.expression : arg));
                         flags.push(4 /* Rest */);
                     }
                 }
                 else {
-                    var contextualType = getIndexedAccessType(restType, getLiteralType(i - index));
+                    var contextualType = getIndexedAccessType(restType, getNumberLiteralType(i - index), 256 /* Contextual */);
                     var argType = checkExpressionWithContextualType(arg, contextualType, context, checkMode);
                     var hasPrimitiveContextualType = maybeTypeOfKind(contextualType, 131068 /* Primitive */ | 4194304 /* Index */ | 134217728 /* TemplateLiteral */ | 268435456 /* StringMapping */);
                     types.push(hasPrimitiveContextualType ? getRegularTypeOfLiteralType(argType) : getWidenedLiteralType(argType));
                     flags.push(1 /* Required */);
                 }
-                if (arg.kind === 228 /* SyntheticExpression */ && arg.tupleNameSource) {
+                if (arg.kind === 230 /* SyntheticExpression */ && arg.tupleNameSource) {
                     names.push(arg.tupleNameSource);
                 }
             }
@@ -70916,7 +72258,7 @@
                 return undefined;
             }
             var thisType = getThisTypeOfSignature(signature);
-            if (thisType && thisType !== voidType && node.kind !== 205 /* NewExpression */) {
+            if (thisType && thisType !== voidType && node.kind !== 207 /* NewExpression */) {
                 // If the called expression is not of the form `x.f` or `x["f"]`, then sourceType = voidType
                 // If the signature's 'this' type is voidType, then the check is skipped -- anything is compatible.
                 // If the expression is a new expression, then the check is skipped.
@@ -70934,7 +72276,7 @@
             var argCount = restType ? Math.min(getParameterCount(signature) - 1, args.length) : args.length;
             for (var i = 0; i < argCount; i++) {
                 var arg = args[i];
-                if (arg.kind !== 223 /* OmittedExpression */) {
+                if (arg.kind !== 225 /* OmittedExpression */) {
                     var paramType = getTypeAtPosition(signature, i);
                     var argType = checkExpressionWithContextualType(arg, paramType, /*inferenceContext*/ undefined, checkMode);
                     // If one or more arguments are still excluded (as indicated by CheckMode.SkipContextSensitive),
@@ -70979,8 +72321,10 @@
          * Returns the this argument in calls like x.f(...) and x[f](...). Undefined otherwise.
          */
         function getThisArgumentOfCall(node) {
-            if (node.kind === 204 /* CallExpression */) {
-                var callee = ts.skipOuterExpressions(node.expression);
+            var expression = node.kind === 206 /* CallExpression */ ? node.expression :
+                node.kind === 208 /* TaggedTemplateExpression */ ? node.tag : undefined;
+            if (expression) {
+                var callee = ts.skipOuterExpressions(expression);
                 if (ts.isAccessExpression(callee)) {
                     return callee.expression;
                 }
@@ -70996,17 +72340,17 @@
          * Returns the effective arguments for an expression that works like a function invocation.
          */
         function getEffectiveCallArguments(node) {
-            if (node.kind === 206 /* TaggedTemplateExpression */) {
+            if (node.kind === 208 /* TaggedTemplateExpression */) {
                 var template = node.template;
                 var args_3 = [createSyntheticExpression(template, getGlobalTemplateStringsArrayType())];
-                if (template.kind === 219 /* TemplateExpression */) {
+                if (template.kind === 221 /* TemplateExpression */) {
                     ts.forEach(template.templateSpans, function (span) {
                         args_3.push(span.expression);
                     });
                 }
                 return args_3;
             }
-            if (node.kind === 162 /* Decorator */) {
+            if (node.kind === 163 /* Decorator */) {
                 return getEffectiveDecoratorArguments(node);
             }
             if (ts.isJsxOpeningLikeElement(node)) {
@@ -71017,10 +72361,10 @@
             if (spreadIndex >= 0) {
                 // Create synthetic arguments from spreads of tuple types.
                 var effectiveArgs_1 = args.slice(0, spreadIndex);
-                var _loop_21 = function (i) {
+                var _loop_23 = function (i) {
                     var arg = args[i];
                     // We can call checkExpressionCached because spread expressions never have a contextual type.
-                    var spreadType = arg.kind === 221 /* SpreadElement */ && (flowLoopCount ? checkExpression(arg.expression) : checkExpressionCached(arg.expression));
+                    var spreadType = arg.kind === 223 /* SpreadElement */ && (flowLoopCount ? checkExpression(arg.expression) : checkExpressionCached(arg.expression));
                     if (spreadType && isTupleType(spreadType)) {
                         ts.forEach(getTypeArguments(spreadType), function (t, i) {
                             var _a;
@@ -71034,7 +72378,7 @@
                     }
                 };
                 for (var i = spreadIndex; i < args.length; i++) {
-                    _loop_21(i);
+                    _loop_23(i);
                 }
                 return effectiveArgs_1;
             }
@@ -71047,30 +72391,30 @@
             var parent = node.parent;
             var expr = node.expression;
             switch (parent.kind) {
-                case 253 /* ClassDeclaration */:
-                case 222 /* ClassExpression */:
+                case 255 /* ClassDeclaration */:
+                case 224 /* ClassExpression */:
                     // For a class decorator, the `target` is the type of the class (e.g. the
                     // "static" or "constructor" side of the class).
                     return [
                         createSyntheticExpression(expr, getTypeOfSymbol(getSymbolOfNode(parent)))
                     ];
-                case 161 /* Parameter */:
+                case 162 /* Parameter */:
                     // A parameter declaration decorator will have three arguments (see
                     // `ParameterDecorator` in core.d.ts).
                     var func = parent.parent;
                     return [
-                        createSyntheticExpression(expr, parent.parent.kind === 167 /* Constructor */ ? getTypeOfSymbol(getSymbolOfNode(func)) : errorType),
+                        createSyntheticExpression(expr, parent.parent.kind === 169 /* Constructor */ ? getTypeOfSymbol(getSymbolOfNode(func)) : errorType),
                         createSyntheticExpression(expr, anyType),
                         createSyntheticExpression(expr, numberType)
                     ];
-                case 164 /* PropertyDeclaration */:
-                case 166 /* MethodDeclaration */:
-                case 168 /* GetAccessor */:
-                case 169 /* SetAccessor */:
+                case 165 /* PropertyDeclaration */:
+                case 167 /* MethodDeclaration */:
+                case 170 /* GetAccessor */:
+                case 171 /* SetAccessor */:
                     // A method or accessor declaration decorator will have two or three arguments (see
                     // `PropertyDecorator` and `MethodDecorator` in core.d.ts). If we are emitting decorators
                     // for ES3, we will only pass two arguments.
-                    var hasPropDesc = parent.kind !== 164 /* PropertyDeclaration */ && languageVersion !== 0 /* ES3 */;
+                    var hasPropDesc = parent.kind !== 165 /* PropertyDeclaration */ && languageVersion !== 0 /* ES3 */;
                     return [
                         createSyntheticExpression(expr, getParentTypeOfClassElement(parent)),
                         createSyntheticExpression(expr, getClassElementPropertyKeyType(parent)),
@@ -71084,17 +72428,17 @@
          */
         function getDecoratorArgumentCount(node, signature) {
             switch (node.parent.kind) {
-                case 253 /* ClassDeclaration */:
-                case 222 /* ClassExpression */:
+                case 255 /* ClassDeclaration */:
+                case 224 /* ClassExpression */:
                     return 1;
-                case 164 /* PropertyDeclaration */:
+                case 165 /* PropertyDeclaration */:
                     return 2;
-                case 166 /* MethodDeclaration */:
-                case 168 /* GetAccessor */:
-                case 169 /* SetAccessor */:
+                case 167 /* MethodDeclaration */:
+                case 170 /* GetAccessor */:
+                case 171 /* SetAccessor */:
                     // For ES3 or decorators with only two parameters we supply only two arguments
                     return languageVersion === 0 /* ES3 */ || signature.parameters.length <= 2 ? 2 : 3;
-                case 161 /* Parameter */:
+                case 162 /* Parameter */:
                     return 3;
                 default:
                     return ts.Debug.fail();
@@ -71230,15 +72574,15 @@
             return ts.createDiagnosticForNodeArray(ts.getSourceFileOfNode(node), typeArguments, ts.Diagnostics.Expected_0_type_arguments_but_got_1, belowArgCount === -Infinity ? aboveArgCount : belowArgCount, argCount);
         }
         function resolveCall(node, signatures, candidatesOutArray, checkMode, callChainFlags, fallbackError) {
-            var isTaggedTemplate = node.kind === 206 /* TaggedTemplateExpression */;
-            var isDecorator = node.kind === 162 /* Decorator */;
+            var isTaggedTemplate = node.kind === 208 /* TaggedTemplateExpression */;
+            var isDecorator = node.kind === 163 /* Decorator */;
             var isJsxOpeningOrSelfClosingElement = ts.isJsxOpeningLikeElement(node);
             var reportErrors = !candidatesOutArray && produceDiagnostics;
             var typeArguments;
             if (!isDecorator) {
                 typeArguments = node.typeArguments;
                 // We already perform checking on the type arguments on the class declaration itself.
-                if (isTaggedTemplate || isJsxOpeningOrSelfClosingElement || node.expression.kind !== 105 /* SuperKeyword */) {
+                if (isTaggedTemplate || isJsxOpeningOrSelfClosingElement || node.expression.kind !== 106 /* SuperKeyword */) {
                     ts.forEach(typeArguments, checkSourceElement);
                 }
             }
@@ -71293,7 +72637,7 @@
             var result;
             // If we are in signature help, a trailing comma indicates that we intend to provide another argument,
             // so we will only accept overloads with arity at least 1 higher than the current number of provided arguments.
-            var signatureHelpTrailingComma = !!(checkMode & 16 /* IsForSignatureHelp */) && node.kind === 204 /* CallExpression */ && node.arguments.hasTrailingComma;
+            var signatureHelpTrailingComma = !!(checkMode & 16 /* IsForSignatureHelp */) && node.kind === 206 /* CallExpression */ && node.arguments.hasTrailingComma;
             // Section 4.12.1:
             // if the candidate list contains one or more signatures for which the type of each argument
             // expression is a subtype of each corresponding parameter type, the return type of the first
@@ -71347,7 +72691,7 @@
                         var min_3 = Number.MAX_VALUE;
                         var minIndex = 0;
                         var i_1 = 0;
-                        var _loop_22 = function (c) {
+                        var _loop_24 = function (c) {
                             var chain_2 = function () { return ts.chainDiagnosticMessages(/*details*/ undefined, ts.Diagnostics.Overload_0_of_1_2_gave_the_following_error, i_1 + 1, candidates.length, signatureToString(c)); };
                             var diags_2 = getSignatureApplicabilityError(node, args, c, assignableRelation, 0 /* Normal */, /*reportErrors*/ true, chain_2);
                             if (diags_2) {
@@ -71365,14 +72709,14 @@
                         };
                         for (var _a = 0, candidatesForArgumentError_1 = candidatesForArgumentError; _a < candidatesForArgumentError_1.length; _a++) {
                             var c = candidatesForArgumentError_1[_a];
-                            _loop_22(c);
+                            _loop_24(c);
                         }
                         var diags_3 = max > 1 ? allDiagnostics[minIndex] : ts.flatten(allDiagnostics);
                         ts.Debug.assert(diags_3.length > 0, "No errors reported for 3 or fewer overload signatures");
                         var chain = ts.chainDiagnosticMessages(ts.map(diags_3, function (d) { return typeof d.messageText === "string" ? d : d.messageText; }), ts.Diagnostics.No_overload_matches_this_call);
                         // The below is a spread to guarantee we get a new (mutable) array - our `flatMap` helper tries to do "smart" optimizations where it reuses input
                         // arrays and the emptyArray singleton where possible, which is decidedly not what we want while we're still constructing this diagnostic
-                        var related = __spreadArray([], ts.flatMap(diags_3, function (d) { return d.relatedInformation; }));
+                        var related = __spreadArray([], ts.flatMap(diags_3, function (d) { return d.relatedInformation; }), true);
                         var diag = void 0;
                         if (ts.every(diags_3, function (d) { return d.start === diags_3[0].start && d.length === diags_3[0].length && d.file === diags_3[0].file; })) {
                             var _b = diags_3[0], file = _b.file, start = _b.start, length_7 = _b.length;
@@ -71523,7 +72867,7 @@
             }
             var _a = ts.minAndMax(candidates, getNumNonRestParameters), minArgumentCount = _a.min, maxNonRestParam = _a.max;
             var parameters = [];
-            var _loop_23 = function (i) {
+            var _loop_25 = function (i) {
                 var symbols = ts.mapDefined(candidates, function (s) { return signatureHasRestParameter(s) ?
                     i < s.parameters.length - 1 ? s.parameters[i] : ts.last(s.parameters) :
                     i < s.parameters.length ? s.parameters[i] : undefined; });
@@ -71531,7 +72875,7 @@
                 parameters.push(createCombinedSymbolFromTypes(symbols, ts.mapDefined(candidates, function (candidate) { return tryGetTypeAtPosition(candidate, i); })));
             };
             for (var i = 0; i < maxNonRestParam; i++) {
-                _loop_23(i);
+                _loop_25(i);
             }
             var restParameterSymbols = ts.mapDefined(candidates, function (c) { return signatureHasRestParameter(c) ? ts.last(c.parameters) : undefined; });
             var flags = 0 /* None */;
@@ -71612,7 +72956,7 @@
             return maxParamsIndex;
         }
         function resolveCallExpression(node, candidatesOutArray, checkMode) {
-            if (node.expression.kind === 105 /* SuperKeyword */) {
+            if (node.expression.kind === 106 /* SuperKeyword */) {
                 var superType = checkSuperExpression(node.expression);
                 if (isTypeAny(superType)) {
                     for (var _i = 0, _a = node.arguments; _i < _a.length; _i++) {
@@ -71838,7 +73182,7 @@
             var declaration = signature.declaration;
             var modifiers = ts.getSelectedEffectiveModifierFlags(declaration, 24 /* NonPublicAccessibilityModifier */);
             // (1) Public constructors and (2) constructor functions are always accessible.
-            if (!modifiers || declaration.kind !== 167 /* Constructor */) {
+            if (!modifiers || declaration.kind !== 169 /* Constructor */) {
                 return true;
             }
             var declaringClassDeclaration = ts.getClassLikeDeclarationOfSymbol(declaration.parent.symbol);
@@ -71870,8 +73214,8 @@
             if (apparentType.flags & 1048576 /* Union */) {
                 var types = apparentType.types;
                 var hasSignatures = false;
-                for (var _i = 0, types_21 = types; _i < types_21.length; _i++) {
-                    var constituent = types_21[_i];
+                for (var _i = 0, types_20 = types; _i < types_20.length; _i++) {
+                    var constituent = types_20[_i];
                     var signatures = getSignaturesOfType(constituent, kind);
                     if (signatures.length !== 0) {
                         hasSignatures = true;
@@ -71982,16 +73326,16 @@
          */
         function getDiagnosticHeadMessageForDecoratorResolution(node) {
             switch (node.parent.kind) {
-                case 253 /* ClassDeclaration */:
-                case 222 /* ClassExpression */:
+                case 255 /* ClassDeclaration */:
+                case 224 /* ClassExpression */:
                     return ts.Diagnostics.Unable_to_resolve_signature_of_class_decorator_when_called_as_an_expression;
-                case 161 /* Parameter */:
+                case 162 /* Parameter */:
                     return ts.Diagnostics.Unable_to_resolve_signature_of_parameter_decorator_when_called_as_an_expression;
-                case 164 /* PropertyDeclaration */:
+                case 165 /* PropertyDeclaration */:
                     return ts.Diagnostics.Unable_to_resolve_signature_of_property_decorator_when_called_as_an_expression;
-                case 166 /* MethodDeclaration */:
-                case 168 /* GetAccessor */:
-                case 169 /* SetAccessor */:
+                case 167 /* MethodDeclaration */:
+                case 170 /* GetAccessor */:
+                case 171 /* SetAccessor */:
                     return ts.Diagnostics.Unable_to_resolve_signature_of_method_decorator_when_called_as_an_expression;
                 default:
                     return ts.Debug.fail();
@@ -72037,7 +73381,7 @@
             // file would probably be preferable.
             var typeSymbol = exports && getSymbol(exports, JsxNames.Element, 788968 /* Type */);
             var returnNode = typeSymbol && nodeBuilder.symbolToEntityName(typeSymbol, 788968 /* Type */, node);
-            var declaration = ts.factory.createFunctionTypeNode(/*typeParameters*/ undefined, [ts.factory.createParameterDeclaration(/*decorators*/ undefined, /*modifiers*/ undefined, /*dotdotdot*/ undefined, "props", /*questionMark*/ undefined, nodeBuilder.typeToTypeNode(result, node))], returnNode ? ts.factory.createTypeReferenceNode(returnNode, /*typeArguments*/ undefined) : ts.factory.createKeywordTypeNode(128 /* AnyKeyword */));
+            var declaration = ts.factory.createFunctionTypeNode(/*typeParameters*/ undefined, [ts.factory.createParameterDeclaration(/*decorators*/ undefined, /*modifiers*/ undefined, /*dotdotdot*/ undefined, "props", /*questionMark*/ undefined, nodeBuilder.typeToTypeNode(result, node))], returnNode ? ts.factory.createTypeReferenceNode(returnNode, /*typeArguments*/ undefined) : ts.factory.createKeywordTypeNode(129 /* AnyKeyword */));
             var parameterSymbol = createSymbol(1 /* FunctionScopedVariable */, "props");
             parameterSymbol.type = result;
             return createSignature(declaration, 
@@ -72086,16 +73430,16 @@
         }
         function resolveSignature(node, candidatesOutArray, checkMode) {
             switch (node.kind) {
-                case 204 /* CallExpression */:
+                case 206 /* CallExpression */:
                     return resolveCallExpression(node, candidatesOutArray, checkMode);
-                case 205 /* NewExpression */:
+                case 207 /* NewExpression */:
                     return resolveNewExpression(node, candidatesOutArray, checkMode);
-                case 206 /* TaggedTemplateExpression */:
+                case 208 /* TaggedTemplateExpression */:
                     return resolveTaggedTemplateExpression(node, candidatesOutArray, checkMode);
-                case 162 /* Decorator */:
+                case 163 /* Decorator */:
                     return resolveDecorator(node, candidatesOutArray, checkMode);
-                case 276 /* JsxOpeningElement */:
-                case 275 /* JsxSelfClosingElement */:
+                case 278 /* JsxOpeningElement */:
+                case 277 /* JsxSelfClosingElement */:
                     return resolveJsxOpeningLikeElement(node, candidatesOutArray, checkMode);
             }
             throw ts.Debug.assertNever(node, "Branch in 'resolveSignature' should be unreachable.");
@@ -72195,7 +73539,7 @@
             else if (ts.isBinaryExpression(node.parent)) {
                 var parentNode = node.parent;
                 var parentNodeOperator = node.parent.operatorToken.kind;
-                if (parentNodeOperator === 62 /* EqualsToken */ && (allowDeclaration || parentNode.right === node)) {
+                if (parentNodeOperator === 63 /* EqualsToken */ && (allowDeclaration || parentNode.right === node)) {
                     name = parentNode.left;
                     decl = name;
                 }
@@ -72204,7 +73548,7 @@
                         name = parentNode.parent.name;
                         decl = parentNode.parent;
                     }
-                    else if (ts.isBinaryExpression(parentNode.parent) && parentNode.parent.operatorToken.kind === 62 /* EqualsToken */ && (allowDeclaration || parentNode.parent.right === parentNode)) {
+                    else if (ts.isBinaryExpression(parentNode.parent) && parentNode.parent.operatorToken.kind === 63 /* EqualsToken */ && (allowDeclaration || parentNode.parent.right === parentNode)) {
                         name = parentNode.parent.left;
                         decl = name;
                     }
@@ -72227,10 +73571,10 @@
                 return false;
             }
             var parent = node.parent;
-            while (parent && parent.kind === 202 /* PropertyAccessExpression */) {
+            while (parent && parent.kind === 204 /* PropertyAccessExpression */) {
                 parent = parent.parent;
             }
-            if (parent && ts.isBinaryExpression(parent) && ts.isPrototypeAccess(parent.left) && parent.operatorToken.kind === 62 /* EqualsToken */) {
+            if (parent && ts.isBinaryExpression(parent) && ts.isPrototypeAccess(parent.left) && parent.operatorToken.kind === 63 /* EqualsToken */) {
                 var right = ts.getInitializerOfBinaryExpression(parent);
                 return ts.isObjectLiteralExpression(right) && right;
             }
@@ -72251,15 +73595,15 @@
                 return nonInferrableType;
             }
             checkDeprecatedSignature(signature, node);
-            if (node.expression.kind === 105 /* SuperKeyword */) {
+            if (node.expression.kind === 106 /* SuperKeyword */) {
                 return voidType;
             }
-            if (node.kind === 205 /* NewExpression */) {
+            if (node.kind === 207 /* NewExpression */) {
                 var declaration = signature.declaration;
                 if (declaration &&
-                    declaration.kind !== 167 /* Constructor */ &&
-                    declaration.kind !== 171 /* ConstructSignature */ &&
-                    declaration.kind !== 176 /* ConstructorType */ &&
+                    declaration.kind !== 169 /* Constructor */ &&
+                    declaration.kind !== 173 /* ConstructSignature */ &&
+                    declaration.kind !== 178 /* ConstructorType */ &&
                     !ts.isJSDocConstructSignature(declaration) &&
                     !isJSConstructor(declaration)) {
                     // When resolved signature is a call signature (and not a construct signature) the result type is any
@@ -72279,7 +73623,7 @@
             if (returnType.flags & 12288 /* ESSymbolLike */ && isSymbolOrSymbolForCall(node)) {
                 return getESSymbolLikeTypeForNode(ts.walkUpParenthesizedExpressions(node.parent));
             }
-            if (node.kind === 204 /* CallExpression */ && !node.questionDotToken && node.parent.kind === 234 /* ExpressionStatement */ &&
+            if (node.kind === 206 /* CallExpression */ && !node.questionDotToken && node.parent.kind === 236 /* ExpressionStatement */ &&
                 returnType.flags & 16384 /* Void */ && getTypePredicateOfSignature(signature)) {
                 if (!ts.isDottedName(node.expression)) {
                     error(node.expression, ts.Diagnostics.Assertions_require_the_call_target_to_be_an_identifier_or_qualified_name);
@@ -72292,7 +73636,7 @@
             if (ts.isInJSFile(node)) {
                 var jsSymbol = getSymbolOfExpando(node, /*allowDeclaration*/ false);
                 if ((_a = jsSymbol === null || jsSymbol === void 0 ? void 0 : jsSymbol.exports) === null || _a === void 0 ? void 0 : _a.size) {
-                    var jsAssignmentType = createAnonymousType(jsSymbol, jsSymbol.exports, ts.emptyArray, ts.emptyArray, undefined, undefined);
+                    var jsAssignmentType = createAnonymousType(jsSymbol, jsSymbol.exports, ts.emptyArray, ts.emptyArray, ts.emptyArray);
                     jsAssignmentType.objectFlags |= 8192 /* JSLiteral */;
                     return getIntersectionType([returnType, jsAssignmentType]);
                 }
@@ -72309,20 +73653,20 @@
         function getDeprecatedSuggestionNode(node) {
             node = ts.skipParentheses(node);
             switch (node.kind) {
-                case 204 /* CallExpression */:
-                case 162 /* Decorator */:
-                case 205 /* NewExpression */:
+                case 206 /* CallExpression */:
+                case 163 /* Decorator */:
+                case 207 /* NewExpression */:
                     return getDeprecatedSuggestionNode(node.expression);
-                case 206 /* TaggedTemplateExpression */:
+                case 208 /* TaggedTemplateExpression */:
                     return getDeprecatedSuggestionNode(node.tag);
-                case 276 /* JsxOpeningElement */:
-                case 275 /* JsxSelfClosingElement */:
+                case 278 /* JsxOpeningElement */:
+                case 277 /* JsxSelfClosingElement */:
                     return getDeprecatedSuggestionNode(node.tagName);
-                case 203 /* ElementAccessExpression */:
+                case 205 /* ElementAccessExpression */:
                     return node.argumentExpression;
-                case 202 /* PropertyAccessExpression */:
+                case 204 /* PropertyAccessExpression */:
                     return node.name;
-                case 174 /* TypeReference */:
+                case 176 /* TypeReference */:
                     var typeReference = node;
                     return ts.isQualifiedName(typeReference.typeName) ? typeReference.typeName.right : typeReference;
                 default:
@@ -72383,11 +73727,11 @@
                         var memberTable = ts.createSymbolTable();
                         var newSymbol = createSymbol(2097152 /* Alias */, "default" /* Default */);
                         newSymbol.parent = originalSymbol;
-                        newSymbol.nameType = getLiteralType("default");
+                        newSymbol.nameType = getStringLiteralType("default");
                         newSymbol.target = resolveSymbol(symbol);
                         memberTable.set("default" /* Default */, newSymbol);
                         var anonymousSymbol = createSymbol(2048 /* TypeLiteral */, "__type" /* Type */);
-                        var defaultContainingObject = createAnonymousType(anonymousSymbol, memberTable, ts.emptyArray, ts.emptyArray, /*stringIndexInfo*/ undefined, /*numberIndexInfo*/ undefined);
+                        var defaultContainingObject = createAnonymousType(anonymousSymbol, memberTable, ts.emptyArray, ts.emptyArray, ts.emptyArray);
                         anonymousSymbol.type = defaultContainingObject;
                         synthType.syntheticType = isValidSpreadType(type) ? getSpreadType(type, defaultContainingObject, anonymousSymbol, /*objectFlags*/ 0, /*readonly*/ false) : defaultContainingObject;
                     }
@@ -72415,9 +73759,9 @@
                 return false;
             }
             var targetDeclarationKind = resolvedRequire.flags & 16 /* Function */
-                ? 252 /* FunctionDeclaration */
+                ? 254 /* FunctionDeclaration */
                 : resolvedRequire.flags & 3 /* Variable */
-                    ? 250 /* VariableDeclaration */
+                    ? 252 /* VariableDeclaration */
                     : 0 /* Unknown */;
             if (targetDeclarationKind !== 0 /* Unknown */) {
                 var decl = ts.getDeclarationOfKind(resolvedRequire, targetDeclarationKind);
@@ -72445,21 +73789,21 @@
                 case 14 /* NoSubstitutionTemplateLiteral */:
                 case 8 /* NumericLiteral */:
                 case 9 /* BigIntLiteral */:
-                case 109 /* TrueKeyword */:
-                case 94 /* FalseKeyword */:
-                case 200 /* ArrayLiteralExpression */:
-                case 201 /* ObjectLiteralExpression */:
-                case 219 /* TemplateExpression */:
+                case 110 /* TrueKeyword */:
+                case 95 /* FalseKeyword */:
+                case 202 /* ArrayLiteralExpression */:
+                case 203 /* ObjectLiteralExpression */:
+                case 221 /* TemplateExpression */:
                     return true;
-                case 208 /* ParenthesizedExpression */:
+                case 210 /* ParenthesizedExpression */:
                     return isValidConstAssertionArgument(node.expression);
-                case 215 /* PrefixUnaryExpression */:
+                case 217 /* PrefixUnaryExpression */:
                     var op = node.operator;
                     var arg = node.operand;
                     return op === 40 /* MinusToken */ && (arg.kind === 8 /* NumericLiteral */ || arg.kind === 9 /* BigIntLiteral */) ||
                         op === 39 /* PlusToken */ && arg.kind === 8 /* NumericLiteral */;
-                case 202 /* PropertyAccessExpression */:
-                case 203 /* ElementAccessExpression */:
+                case 204 /* PropertyAccessExpression */:
+                case 205 /* ElementAccessExpression */:
                     var expr = node.expression;
                     if (ts.isIdentifier(expr)) {
                         var symbol = getSymbolAtLocation(expr);
@@ -72501,21 +73845,32 @@
         }
         function checkMetaProperty(node) {
             checkGrammarMetaProperty(node);
-            if (node.keywordToken === 102 /* NewKeyword */) {
+            if (node.keywordToken === 103 /* NewKeyword */) {
                 return checkNewTargetMetaProperty(node);
             }
-            if (node.keywordToken === 99 /* ImportKeyword */) {
+            if (node.keywordToken === 100 /* ImportKeyword */) {
                 return checkImportMetaProperty(node);
             }
             return ts.Debug.assertNever(node.keywordToken);
         }
+        function checkMetaPropertyKeyword(node) {
+            switch (node.keywordToken) {
+                case 100 /* ImportKeyword */:
+                    return getGlobalImportMetaExpressionType();
+                case 103 /* NewKeyword */:
+                    var type = checkNewTargetMetaProperty(node);
+                    return type === errorType ? errorType : createNewTargetExpressionType(type);
+                default:
+                    ts.Debug.assertNever(node.keywordToken);
+            }
+        }
         function checkNewTargetMetaProperty(node) {
             var container = ts.getNewTargetContainer(node);
             if (!container) {
                 error(node, ts.Diagnostics.Meta_property_0_is_only_allowed_in_the_body_of_a_function_declaration_function_expression_or_constructor, "new.target");
                 return errorType;
             }
-            else if (container.kind === 167 /* Constructor */) {
+            else if (container.kind === 169 /* Constructor */) {
                 var symbol = getSymbolOfNode(container.parent);
                 return getTypeOfSymbol(symbol);
             }
@@ -72530,7 +73885,6 @@
             }
             var file = ts.getSourceFileOfNode(node);
             ts.Debug.assert(!!(file.flags & 2097152 /* PossiblyContainsImportMeta */), "Containing file is missing import meta node flag.");
-            ts.Debug.assert(!!file.externalModuleIndicator, "Containing file should be a module.");
             return node.name.escapedText === "meta" ? getGlobalImportMetaType() : errorType;
         }
         function getTypeOfParameter(symbol) {
@@ -72561,8 +73915,37 @@
             }
             return restParameter.escapedName;
         }
+        function getParameterIdentifierNameAtPosition(signature, pos) {
+            var paramCount = signature.parameters.length - (signatureHasRestParameter(signature) ? 1 : 0);
+            if (pos < paramCount) {
+                var param = signature.parameters[pos];
+                return isParameterDeclarationWithIdentifierName(param) ? [param.escapedName, false] : undefined;
+            }
+            var restParameter = signature.parameters[paramCount] || unknownSymbol;
+            if (!isParameterDeclarationWithIdentifierName(restParameter)) {
+                return undefined;
+            }
+            var restType = getTypeOfSymbol(restParameter);
+            if (isTupleType(restType)) {
+                var associatedNames = restType.target.labeledElementDeclarations;
+                var index = pos - paramCount;
+                var associatedName = associatedNames === null || associatedNames === void 0 ? void 0 : associatedNames[index];
+                var isRestTupleElement = !!(associatedName === null || associatedName === void 0 ? void 0 : associatedName.dotDotDotToken);
+                return associatedName ? [
+                    getTupleElementLabel(associatedName),
+                    isRestTupleElement
+                ] : undefined;
+            }
+            if (pos === paramCount) {
+                return [restParameter.escapedName, true];
+            }
+            return undefined;
+        }
+        function isParameterDeclarationWithIdentifierName(symbol) {
+            return symbol.valueDeclaration && ts.isParameter(symbol.valueDeclaration) && ts.isIdentifier(symbol.valueDeclaration.name);
+        }
         function isValidDeclarationForTupleLabel(d) {
-            return d.kind === 193 /* NamedTupleMember */ || (ts.isParameter(d) && d.name && ts.isIdentifier(d.name));
+            return d.kind === 195 /* NamedTupleMember */ || (ts.isParameter(d) && d.name && ts.isIdentifier(d.name));
         }
         function getNameableDeclarationAtPosition(signature, pos) {
             var paramCount = signature.parameters.length - (signatureHasRestParameter(signature) ? 1 : 0);
@@ -72594,7 +73977,7 @@
                 var restType = getTypeOfSymbol(signature.parameters[paramCount]);
                 var index = pos - paramCount;
                 if (!isTupleType(restType) || restType.target.hasRestElement || index < restType.target.fixedLength) {
-                    return getIndexedAccessType(restType, getLiteralType(index));
+                    return getIndexedAccessType(restType, getNumberLiteralType(index));
                 }
             }
             return undefined;
@@ -72775,7 +74158,7 @@
             if (!links.type) {
                 var declaration = parameter.valueDeclaration;
                 links.type = type || getWidenedTypeForVariableLikeDeclaration(declaration, /*includeOptionality*/ true);
-                if (declaration.name.kind !== 78 /* Identifier */) {
+                if (declaration.name.kind !== 79 /* Identifier */) {
                     // if inference didn't come up with anything but unknown, fall back to the binding pattern if present.
                     if (links.type === unknownType) {
                         links.type = getTypeFromBindingPattern(declaration.name);
@@ -72790,7 +74173,7 @@
             for (var _i = 0, _a = pattern.elements; _i < _a.length; _i++) {
                 var element = _a[_i];
                 if (!ts.isOmittedExpression(element)) {
-                    if (element.name.kind === 78 /* Identifier */) {
+                    if (element.name.kind === 79 /* Identifier */) {
                         getSymbolLinks(getSymbolOfNode(element)).type = getTypeForBindingElement(element);
                     }
                     else {
@@ -72834,6 +74217,16 @@
             }
             return promiseType;
         }
+        function createNewTargetExpressionType(targetType) {
+            // Create a synthetic type `NewTargetExpression { target: TargetType; }`
+            var symbol = createSymbol(0 /* None */, "NewTargetExpression");
+            var targetPropertySymbol = createSymbol(4 /* Property */, "target", 8 /* Readonly */);
+            targetPropertySymbol.parent = symbol;
+            targetPropertySymbol.type = targetType;
+            var members = ts.createSymbolTable([targetPropertySymbol]);
+            symbol.members = members;
+            return createAnonymousType(symbol, members, ts.emptyArray, ts.emptyArray, ts.emptyArray);
+        }
         function getReturnTypeFromBody(func, checkMode) {
             if (!func.body) {
                 return errorType;
@@ -72845,7 +74238,7 @@
             var yieldType;
             var nextType;
             var fallbackReturnType = voidType;
-            if (func.body.kind !== 231 /* Block */) { // Async or normal arrow function
+            if (func.body.kind !== 233 /* Block */) { // Async or normal arrow function
                 returnType = checkExpressionCached(func.body, checkMode && checkMode & ~8 /* SkipGenericFunctions */);
                 if (isAsync) {
                     // From within an async function you can return either a non-promise value or a promise. Any
@@ -73030,7 +74423,7 @@
             return links.isExhaustive !== undefined ? links.isExhaustive : (links.isExhaustive = computeExhaustiveSwitchStatement(node));
         }
         function computeExhaustiveSwitchStatement(node) {
-            if (node.expression.kind === 212 /* TypeOfExpression */) {
+            if (node.expression.kind === 214 /* TypeOfExpression */) {
                 var operandType = getTypeOfExpression(node.expression.expression);
                 var witnesses = getSwitchClauseTypeOfWitnesses(node, /*retainDefault*/ false);
                 // notEqualFacts states that the type of the switched value is not equal to every type in the switch.
@@ -73093,11 +74486,11 @@
         }
         function mayReturnNever(func) {
             switch (func.kind) {
-                case 209 /* FunctionExpression */:
-                case 210 /* ArrowFunction */:
+                case 211 /* FunctionExpression */:
+                case 212 /* ArrowFunction */:
                     return true;
-                case 166 /* MethodDeclaration */:
-                    return func.parent.kind === 201 /* ObjectLiteralExpression */;
+                case 167 /* MethodDeclaration */:
+                    return func.parent.kind === 203 /* ObjectLiteralExpression */;
                 default:
                     return false;
             }
@@ -73123,7 +74516,7 @@
             }
             // If all we have is a function signature, or an arrow function with an expression body, then there is nothing to check.
             // also if HasImplicitReturn flag is not set this means that all codepaths in function body end with return or throw
-            if (func.kind === 165 /* MethodSignature */ || ts.nodeIsMissing(func.body) || func.body.kind !== 231 /* Block */ || !functionHasImplicitReturn(func)) {
+            if (func.kind === 166 /* MethodSignature */ || ts.nodeIsMissing(func.body) || func.body.kind !== 233 /* Block */ || !functionHasImplicitReturn(func)) {
                 return;
             }
             var hasExplicitReturn = func.flags & 512 /* HasExplicitReturn */;
@@ -73156,12 +74549,15 @@
             }
         }
         function checkFunctionExpressionOrObjectLiteralMethod(node, checkMode) {
-            ts.Debug.assert(node.kind !== 166 /* MethodDeclaration */ || ts.isObjectLiteralMethod(node));
+            ts.Debug.assert(node.kind !== 167 /* MethodDeclaration */ || ts.isObjectLiteralMethod(node));
             checkNodeDeferred(node);
+            if (ts.isFunctionExpression(node)) {
+                checkCollisionsForDeclarationName(node, node.name);
+            }
             // The identityMapper object is used to indicate that function expressions are wildcards
             if (checkMode && checkMode & 4 /* SkipContextSensitive */ && isContextSensitive(node)) {
                 // Skip parameters, return signature with return type that retains noncontextual parts so inferences can still be drawn in an early stage
-                if (!ts.getEffectiveReturnTypeNode(node) && !hasContextSensitiveParameters(node)) {
+                if (!ts.getEffectiveReturnTypeNode(node) && !ts.hasContextSensitiveParameters(node)) {
                     // Return plain anyFunctionType if there is no possibility we'll make inferences from the return type
                     var contextualSignature = getContextualSignature(node);
                     if (contextualSignature && couldContainTypeVariables(getReturnTypeOfSignature(contextualSignature))) {
@@ -73171,7 +74567,7 @@
                         }
                         var returnType = getReturnTypeFromBody(node, checkMode);
                         var returnOnlySignature = createSignature(undefined, undefined, undefined, ts.emptyArray, returnType, /*resolvedTypePredicate*/ undefined, 0, 0 /* None */);
-                        var returnOnlyType = createAnonymousType(node.symbol, emptySymbols, [returnOnlySignature], ts.emptyArray, undefined, undefined);
+                        var returnOnlyType = createAnonymousType(node.symbol, emptySymbols, [returnOnlySignature], ts.emptyArray, ts.emptyArray);
                         returnOnlyType.objectFlags |= 524288 /* NonInferrableType */;
                         return links.contextFreeType = returnOnlyType;
                     }
@@ -73180,7 +74576,7 @@
             }
             // Grammar checking
             var hasGrammarError = checkGrammarFunctionLikeDeclaration(node);
-            if (!hasGrammarError && node.kind === 209 /* FunctionExpression */) {
+            if (!hasGrammarError && node.kind === 211 /* FunctionExpression */) {
                 checkGrammarForGenerator(node);
             }
             contextuallyCheckFunctionExpressionOrObjectLiteralMethod(node, checkMode);
@@ -73226,7 +74622,7 @@
             }
         }
         function checkFunctionExpressionOrObjectLiteralMethodDeferred(node) {
-            ts.Debug.assert(node.kind !== 166 /* MethodDeclaration */ || ts.isObjectLiteralMethod(node));
+            ts.Debug.assert(node.kind !== 167 /* MethodDeclaration */ || ts.isObjectLiteralMethod(node));
             var functionFlags = ts.getFunctionFlags(node);
             var returnType = getReturnTypeFromAnnotation(node);
             checkAllCodePathsInNonVoidFunctionReturnOrThrow(node, returnType);
@@ -73239,7 +74635,7 @@
                     // checkFunctionExpressionBodies). So it must be done now.
                     getReturnTypeOfSignature(getSignatureFromDeclaration(node));
                 }
-                if (node.body.kind === 231 /* Block */) {
+                if (node.body.kind === 233 /* Block */) {
                     checkSourceElement(node.body);
                 }
                 else {
@@ -73326,10 +74722,10 @@
                 // Allow assignments to readonly properties within constructors of the same class declaration.
                 if (symbol.flags & 4 /* Property */ &&
                     ts.isAccessExpression(expr) &&
-                    expr.expression.kind === 107 /* ThisKeyword */) {
+                    expr.expression.kind === 108 /* ThisKeyword */) {
                     // Look for if this is the constructor for the class that `symbol` is a property of.
                     var ctor = ts.getContainingFunction(expr);
-                    if (!(ctor && (ctor.kind === 167 /* Constructor */ || isJSConstructor(ctor)))) {
+                    if (!(ctor && (ctor.kind === 169 /* Constructor */ || isJSConstructor(ctor)))) {
                         return true;
                     }
                     if (symbol.valueDeclaration) {
@@ -73350,11 +74746,11 @@
             if (ts.isAccessExpression(expr)) {
                 // references through namespace import should be readonly
                 var node = ts.skipParentheses(expr.expression);
-                if (node.kind === 78 /* Identifier */) {
+                if (node.kind === 79 /* Identifier */) {
                     var symbol_2 = getNodeLinks(node).resolvedSymbol;
                     if (symbol_2.flags & 2097152 /* Alias */) {
                         var declaration = getDeclarationOfAliasSymbol(symbol_2);
-                        return !!declaration && declaration.kind === 264 /* NamespaceImport */;
+                        return !!declaration && declaration.kind === 266 /* NamespaceImport */;
                     }
                 }
             }
@@ -73363,7 +74759,7 @@
         function checkReferenceExpression(expr, invalidReferenceMessage, invalidOptionalChainMessage) {
             // References are combinations of identifiers, parentheses, and property accesses.
             var node = ts.skipOuterExpressions(expr, 6 /* Assertions */ | 1 /* Parentheses */);
-            if (node.kind !== 78 /* Identifier */ && !ts.isAccessExpression(node)) {
+            if (node.kind !== 79 /* Identifier */ && !ts.isAccessExpression(node)) {
                 error(expr, invalidReferenceMessage);
                 return false;
             }
@@ -73389,13 +74785,15 @@
                 if (isReadonlySymbol(symbol)) {
                     error(expr, ts.Diagnostics.The_operand_of_a_delete_operator_cannot_be_a_read_only_property);
                 }
-                checkDeleteExpressionMustBeOptional(expr, getTypeOfSymbol(symbol));
+                checkDeleteExpressionMustBeOptional(expr, symbol);
             }
             return booleanType;
         }
-        function checkDeleteExpressionMustBeOptional(expr, type) {
-            var AnyOrUnknownOrNeverFlags = 3 /* AnyOrUnknown */ | 131072 /* Never */;
-            if (strictNullChecks && !(type.flags & AnyOrUnknownOrNeverFlags) && !(getFalsyFlags(type) & 32768 /* Undefined */)) {
+        function checkDeleteExpressionMustBeOptional(expr, symbol) {
+            var type = getTypeOfSymbol(symbol);
+            if (strictNullChecks &&
+                !(type.flags & (3 /* AnyOrUnknown */ | 131072 /* Never */)) &&
+                !(exactOptionalPropertyTypes ? symbol.flags & 16777216 /* Optional */ : getFalsyFlags(type) & 32768 /* Undefined */)) {
                 error(expr, ts.Diagnostics.The_operand_of_a_delete_operator_must_be_optional);
             }
         }
@@ -73410,7 +74808,11 @@
         function checkAwaitExpression(node) {
             // Grammar checking
             if (produceDiagnostics) {
-                if (!(node.flags & 32768 /* AwaitContext */)) {
+                var container = ts.getContainingFunctionOrClassStaticBlock(node);
+                if (container && ts.isClassStaticBlockDeclaration(container)) {
+                    error(node, ts.Diagnostics.Await_expression_cannot_be_used_inside_a_class_static_block);
+                }
+                else if (!(node.flags & 32768 /* AwaitContext */)) {
                     if (ts.isInTopLevelContext(node)) {
                         var sourceFile = ts.getSourceFileOfNode(node);
                         if (!hasParseDiagnostics(sourceFile)) {
@@ -73434,9 +74836,8 @@
                         if (!hasParseDiagnostics(sourceFile)) {
                             var span = ts.getSpanOfTokenAtPosition(sourceFile, node.pos);
                             var diagnostic = ts.createFileDiagnostic(sourceFile, span.start, span.length, ts.Diagnostics.await_expressions_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules);
-                            var func = ts.getContainingFunction(node);
-                            if (func && func.kind !== 167 /* Constructor */ && (ts.getFunctionFlags(func) & 2 /* Async */) === 0) {
-                                var relatedInfo = ts.createDiagnosticForNode(func, ts.Diagnostics.Did_you_mean_to_mark_this_function_as_async);
+                            if (container && container.kind !== 169 /* Constructor */ && (ts.getFunctionFlags(container) & 2 /* Async */) === 0) {
+                                var relatedInfo = ts.createDiagnosticForNode(container, ts.Diagnostics.Did_you_mean_to_mark_this_function_as_async);
                                 ts.addRelatedInfo(diagnostic, relatedInfo);
                             }
                             diagnostics.add(diagnostic);
@@ -73463,14 +74864,14 @@
                 case 8 /* NumericLiteral */:
                     switch (node.operator) {
                         case 40 /* MinusToken */:
-                            return getFreshTypeOfLiteralType(getLiteralType(-node.operand.text));
+                            return getFreshTypeOfLiteralType(getNumberLiteralType(-node.operand.text));
                         case 39 /* PlusToken */:
-                            return getFreshTypeOfLiteralType(getLiteralType(+node.operand.text));
+                            return getFreshTypeOfLiteralType(getNumberLiteralType(+node.operand.text));
                     }
                     break;
                 case 9 /* BigIntLiteral */:
                     if (node.operator === 40 /* MinusToken */) {
-                        return getFreshTypeOfLiteralType(getLiteralType({
+                        return getFreshTypeOfLiteralType(getBigIntLiteralType({
                             negative: true,
                             base10Value: ts.parsePseudoBigInt(node.operand.text)
                         }));
@@ -73537,8 +74938,8 @@
             }
             if (type.flags & 3145728 /* UnionOrIntersection */) {
                 var types = type.types;
-                for (var _i = 0, types_22 = types; _i < types_22.length; _i++) {
-                    var t = types_22[_i];
+                for (var _i = 0, types_21 = types; _i < types_21.length; _i++) {
+                    var t = types_21[_i];
                     if (maybeTypeOfKind(t, kind)) {
                         return true;
                     }
@@ -73647,7 +75048,7 @@
             if (rightIsThis === void 0) { rightIsThis = false; }
             var properties = node.properties;
             var property = properties[propertyIndex];
-            if (property.kind === 289 /* PropertyAssignment */ || property.kind === 290 /* ShorthandPropertyAssignment */) {
+            if (property.kind === 291 /* PropertyAssignment */ || property.kind === 292 /* ShorthandPropertyAssignment */) {
                 var name = property.name;
                 var exprType = getLiteralTypeFromPropertyName(name);
                 if (isTypeUsableAsPropertyName(exprType)) {
@@ -73658,11 +75059,11 @@
                         checkPropertyAccessibility(property, /*isSuper*/ false, /*writing*/ true, objectLiteralType, prop);
                     }
                 }
-                var elementType = getIndexedAccessType(objectLiteralType, exprType, /*noUncheckedIndexedAccessCandidate*/ undefined, name, /*aliasSymbol*/ undefined, /*aliasTypeArguments*/ undefined, 16 /* ExpressionPosition */);
+                var elementType = getIndexedAccessType(objectLiteralType, exprType, 32 /* ExpressionPosition */, name);
                 var type = getFlowTypeOfDestructuring(property, elementType);
-                return checkDestructuringAssignment(property.kind === 290 /* ShorthandPropertyAssignment */ ? property : property.initializer, type);
+                return checkDestructuringAssignment(property.kind === 292 /* ShorthandPropertyAssignment */ ? property : property.initializer, type);
             }
-            else if (property.kind === 291 /* SpreadAssignment */) {
+            else if (property.kind === 293 /* SpreadAssignment */) {
                 if (propertyIndex < properties.length - 1) {
                     error(property, ts.Diagnostics.A_rest_element_must_be_last_in_a_destructuring_pattern);
                 }
@@ -73700,7 +75101,7 @@
             var inBoundsType = compilerOptions.noUncheckedIndexedAccess ? undefined : possiblyOutOfBoundsType;
             for (var i = 0; i < elements.length; i++) {
                 var type = possiblyOutOfBoundsType;
-                if (node.elements[i].kind === 221 /* SpreadElement */) {
+                if (node.elements[i].kind === 223 /* SpreadElement */) {
                     type = inBoundsType = inBoundsType !== null && inBoundsType !== void 0 ? inBoundsType : (checkIteratedTypeOrElementType(65 /* Destructuring */, sourceType, undefinedType, node) || errorType);
                 }
                 checkArrayLiteralDestructuringElementAssignment(node, sourceType, i, type, checkMode);
@@ -73710,14 +75111,14 @@
         function checkArrayLiteralDestructuringElementAssignment(node, sourceType, elementIndex, elementType, checkMode) {
             var elements = node.elements;
             var element = elements[elementIndex];
-            if (element.kind !== 223 /* OmittedExpression */) {
-                if (element.kind !== 221 /* SpreadElement */) {
-                    var indexType = getLiteralType(elementIndex);
+            if (element.kind !== 225 /* OmittedExpression */) {
+                if (element.kind !== 223 /* SpreadElement */) {
+                    var indexType = getNumberLiteralType(elementIndex);
                     if (isArrayLikeType(sourceType)) {
                         // We create a synthetic expression so that getIndexedAccessType doesn't get confused
                         // when the element is a SyntaxKind.ElementAccessExpression.
-                        var accessFlags = 16 /* ExpressionPosition */ | (hasDefaultValue(element) ? 8 /* NoTupleBoundsCheck */ : 0);
-                        var elementType_2 = getIndexedAccessTypeOrUndefined(sourceType, indexType, /*noUncheckedIndexedAccessCandidate*/ undefined, createSyntheticExpression(element, indexType), accessFlags) || errorType;
+                        var accessFlags = 32 /* ExpressionPosition */ | (hasDefaultValue(element) ? 16 /* NoTupleBoundsCheck */ : 0);
+                        var elementType_2 = getIndexedAccessTypeOrUndefined(sourceType, indexType, accessFlags, createSyntheticExpression(element, indexType)) || errorType;
                         var assignedType = hasDefaultValue(element) ? getTypeWithFacts(elementType_2, 524288 /* NEUndefined */) : elementType_2;
                         var type = getFlowTypeOfDestructuring(element, assignedType);
                         return checkDestructuringAssignment(element, type, checkMode);
@@ -73729,7 +75130,7 @@
                 }
                 else {
                     var restExpression = element.expression;
-                    if (restExpression.kind === 217 /* BinaryExpression */ && restExpression.operatorToken.kind === 62 /* EqualsToken */) {
+                    if (restExpression.kind === 219 /* BinaryExpression */ && restExpression.operatorToken.kind === 63 /* EqualsToken */) {
                         error(restExpression.operatorToken, ts.Diagnostics.A_rest_element_cannot_have_an_initializer);
                     }
                     else {
@@ -73745,7 +75146,7 @@
         }
         function checkDestructuringAssignment(exprOrAssignment, sourceType, checkMode, rightIsThis) {
             var target;
-            if (exprOrAssignment.kind === 290 /* ShorthandPropertyAssignment */) {
+            if (exprOrAssignment.kind === 292 /* ShorthandPropertyAssignment */) {
                 var prop = exprOrAssignment;
                 if (prop.objectAssignmentInitializer) {
                     // In strict null checking mode, if a default value of a non-undefined type is specified, remove
@@ -73761,24 +75162,24 @@
             else {
                 target = exprOrAssignment;
             }
-            if (target.kind === 217 /* BinaryExpression */ && target.operatorToken.kind === 62 /* EqualsToken */) {
+            if (target.kind === 219 /* BinaryExpression */ && target.operatorToken.kind === 63 /* EqualsToken */) {
                 checkBinaryExpression(target, checkMode);
                 target = target.left;
             }
-            if (target.kind === 201 /* ObjectLiteralExpression */) {
+            if (target.kind === 203 /* ObjectLiteralExpression */) {
                 return checkObjectLiteralAssignment(target, sourceType, rightIsThis);
             }
-            if (target.kind === 200 /* ArrayLiteralExpression */) {
+            if (target.kind === 202 /* ArrayLiteralExpression */) {
                 return checkArrayLiteralAssignment(target, sourceType, checkMode);
             }
             return checkReferenceAssignment(target, sourceType, checkMode);
         }
         function checkReferenceAssignment(target, sourceType, checkMode) {
             var targetType = checkExpression(target, checkMode);
-            var error = target.parent.kind === 291 /* SpreadAssignment */ ?
+            var error = target.parent.kind === 293 /* SpreadAssignment */ ?
                 ts.Diagnostics.The_target_of_an_object_rest_assignment_must_be_a_variable_or_a_property_access :
                 ts.Diagnostics.The_left_hand_side_of_an_assignment_expression_must_be_a_variable_or_a_property_access;
-            var optionalError = target.parent.kind === 291 /* SpreadAssignment */ ?
+            var optionalError = target.parent.kind === 293 /* SpreadAssignment */ ?
                 ts.Diagnostics.The_target_of_an_object_rest_assignment_may_not_be_an_optional_property_access :
                 ts.Diagnostics.The_left_hand_side_of_an_assignment_expression_may_not_be_an_optional_property_access;
             if (checkReferenceExpression(target, error, optionalError)) {
@@ -73800,39 +75201,39 @@
         function isSideEffectFree(node) {
             node = ts.skipParentheses(node);
             switch (node.kind) {
-                case 78 /* Identifier */:
+                case 79 /* Identifier */:
                 case 10 /* StringLiteral */:
                 case 13 /* RegularExpressionLiteral */:
-                case 206 /* TaggedTemplateExpression */:
-                case 219 /* TemplateExpression */:
+                case 208 /* TaggedTemplateExpression */:
+                case 221 /* TemplateExpression */:
                 case 14 /* NoSubstitutionTemplateLiteral */:
                 case 8 /* NumericLiteral */:
                 case 9 /* BigIntLiteral */:
-                case 109 /* TrueKeyword */:
-                case 94 /* FalseKeyword */:
-                case 103 /* NullKeyword */:
-                case 150 /* UndefinedKeyword */:
-                case 209 /* FunctionExpression */:
-                case 222 /* ClassExpression */:
-                case 210 /* ArrowFunction */:
-                case 200 /* ArrayLiteralExpression */:
-                case 201 /* ObjectLiteralExpression */:
-                case 212 /* TypeOfExpression */:
-                case 226 /* NonNullExpression */:
-                case 275 /* JsxSelfClosingElement */:
-                case 274 /* JsxElement */:
+                case 110 /* TrueKeyword */:
+                case 95 /* FalseKeyword */:
+                case 104 /* NullKeyword */:
+                case 151 /* UndefinedKeyword */:
+                case 211 /* FunctionExpression */:
+                case 224 /* ClassExpression */:
+                case 212 /* ArrowFunction */:
+                case 202 /* ArrayLiteralExpression */:
+                case 203 /* ObjectLiteralExpression */:
+                case 214 /* TypeOfExpression */:
+                case 228 /* NonNullExpression */:
+                case 277 /* JsxSelfClosingElement */:
+                case 276 /* JsxElement */:
                     return true;
-                case 218 /* ConditionalExpression */:
+                case 220 /* ConditionalExpression */:
                     return isSideEffectFree(node.whenTrue) &&
                         isSideEffectFree(node.whenFalse);
-                case 217 /* BinaryExpression */:
+                case 219 /* BinaryExpression */:
                     if (ts.isAssignmentOperator(node.operatorToken.kind)) {
                         return false;
                     }
                     return isSideEffectFree(node.left) &&
                         isSideEffectFree(node.right);
-                case 215 /* PrefixUnaryExpression */:
-                case 216 /* PostfixUnaryExpression */:
+                case 217 /* PrefixUnaryExpression */:
+                case 218 /* PostfixUnaryExpression */:
                     // Unary operators ~, !, +, and - have no side effects.
                     // The rest do.
                     switch (node.operator) {
@@ -73844,9 +75245,9 @@
                     }
                     return false;
                 // Some forms listed here for clarity
-                case 213 /* VoidExpression */: // Explicit opt-out
-                case 207 /* TypeAssertionExpression */: // Not SEF, but can produce useful type warnings
-                case 225 /* AsExpression */: // Not SEF, but can produce useful type warnings
+                case 215 /* VoidExpression */: // Explicit opt-out
+                case 209 /* TypeAssertionExpression */: // Not SEF, but can produce useful type warnings
+                case 227 /* AsExpression */: // Not SEF, but can produce useful type warnings
                 default:
                     return false;
             }
@@ -73883,9 +75284,9 @@
                 }
                 checkGrammarNullishCoalesceWithLogicalExpression(node);
                 var operator = node.operatorToken.kind;
-                if (operator === 62 /* EqualsToken */ && (node.left.kind === 201 /* ObjectLiteralExpression */ || node.left.kind === 200 /* ArrayLiteralExpression */)) {
+                if (operator === 63 /* EqualsToken */ && (node.left.kind === 203 /* ObjectLiteralExpression */ || node.left.kind === 202 /* ArrayLiteralExpression */)) {
                     state.skip = true;
-                    setLastResult(state, checkDestructuringAssignment(node.left, checkExpression(node.right, checkMode), checkMode, node.right.kind === 107 /* ThisKeyword */));
+                    setLastResult(state, checkDestructuringAssignment(node.left, checkExpression(node.right, checkMode), checkMode, node.right.kind === 108 /* ThisKeyword */));
                     return state;
                 }
                 return state;
@@ -73976,8 +75377,8 @@
         // expression-wide checks and does not use a work stack to fold nested binary expressions into the same callstack frame
         function checkBinaryLikeExpression(left, operatorToken, right, checkMode, errorNode) {
             var operator = operatorToken.kind;
-            if (operator === 62 /* EqualsToken */ && (left.kind === 201 /* ObjectLiteralExpression */ || left.kind === 200 /* ArrayLiteralExpression */)) {
-                return checkDestructuringAssignment(left, checkExpression(right, checkMode), checkMode, right.kind === 107 /* ThisKeyword */);
+            if (operator === 63 /* EqualsToken */ && (left.kind === 203 /* ObjectLiteralExpression */ || left.kind === 202 /* ArrayLiteralExpression */)) {
+                return checkDestructuringAssignment(left, checkExpression(right, checkMode), checkMode, right.kind === 108 /* ThisKeyword */);
             }
             var leftType;
             if (operator === 55 /* AmpersandAmpersandToken */ || operator === 56 /* BarBarToken */ || operator === 60 /* QuestionQuestionToken */) {
@@ -73994,26 +75395,26 @@
             switch (operator) {
                 case 41 /* AsteriskToken */:
                 case 42 /* AsteriskAsteriskToken */:
-                case 65 /* AsteriskEqualsToken */:
-                case 66 /* AsteriskAsteriskEqualsToken */:
+                case 66 /* AsteriskEqualsToken */:
+                case 67 /* AsteriskAsteriskEqualsToken */:
                 case 43 /* SlashToken */:
-                case 67 /* SlashEqualsToken */:
+                case 68 /* SlashEqualsToken */:
                 case 44 /* PercentToken */:
-                case 68 /* PercentEqualsToken */:
+                case 69 /* PercentEqualsToken */:
                 case 40 /* MinusToken */:
-                case 64 /* MinusEqualsToken */:
+                case 65 /* MinusEqualsToken */:
                 case 47 /* LessThanLessThanToken */:
-                case 69 /* LessThanLessThanEqualsToken */:
+                case 70 /* LessThanLessThanEqualsToken */:
                 case 48 /* GreaterThanGreaterThanToken */:
-                case 70 /* GreaterThanGreaterThanEqualsToken */:
+                case 71 /* GreaterThanGreaterThanEqualsToken */:
                 case 49 /* GreaterThanGreaterThanGreaterThanToken */:
-                case 71 /* GreaterThanGreaterThanGreaterThanEqualsToken */:
+                case 72 /* GreaterThanGreaterThanGreaterThanEqualsToken */:
                 case 51 /* BarToken */:
-                case 73 /* BarEqualsToken */:
+                case 74 /* BarEqualsToken */:
                 case 52 /* CaretToken */:
-                case 77 /* CaretEqualsToken */:
+                case 78 /* CaretEqualsToken */:
                 case 50 /* AmpersandToken */:
-                case 72 /* AmpersandEqualsToken */:
+                case 73 /* AmpersandEqualsToken */:
                     if (leftType === silentNeverType || rightType === silentNeverType) {
                         return silentNeverType;
                     }
@@ -74043,11 +75444,11 @@
                         else if (bothAreBigIntLike(leftType, rightType)) {
                             switch (operator) {
                                 case 49 /* GreaterThanGreaterThanGreaterThanToken */:
-                                case 71 /* GreaterThanGreaterThanGreaterThanEqualsToken */:
+                                case 72 /* GreaterThanGreaterThanGreaterThanEqualsToken */:
                                     reportOperatorError();
                                     break;
                                 case 42 /* AsteriskAsteriskToken */:
-                                case 66 /* AsteriskAsteriskEqualsToken */:
+                                case 67 /* AsteriskAsteriskEqualsToken */:
                                     if (languageVersion < 3 /* ES2016 */) {
                                         error(errorNode, ts.Diagnostics.Exponentiation_cannot_be_performed_on_bigint_values_unless_the_target_option_is_set_to_es2016_or_later);
                                     }
@@ -74065,7 +75466,7 @@
                         return resultType_1;
                     }
                 case 39 /* PlusToken */:
-                case 63 /* PlusEqualsToken */:
+                case 64 /* PlusEqualsToken */:
                     if (leftType === silentNeverType || rightType === silentNeverType) {
                         return silentNeverType;
                     }
@@ -74108,7 +75509,7 @@
                         });
                         return anyType;
                     }
-                    if (operator === 63 /* PlusEqualsToken */) {
+                    if (operator === 64 /* PlusEqualsToken */) {
                         checkAssignmentOperator(resultType);
                     }
                     return resultType;
@@ -74130,41 +75531,41 @@
                 case 37 /* ExclamationEqualsEqualsToken */:
                     reportOperatorErrorUnless(function (left, right) { return isTypeEqualityComparableTo(left, right) || isTypeEqualityComparableTo(right, left); });
                     return booleanType;
-                case 101 /* InstanceOfKeyword */:
+                case 102 /* InstanceOfKeyword */:
                     return checkInstanceOfExpression(left, right, leftType, rightType);
-                case 100 /* InKeyword */:
+                case 101 /* InKeyword */:
                     return checkInExpression(left, right, leftType, rightType);
                 case 55 /* AmpersandAmpersandToken */:
-                case 75 /* AmpersandAmpersandEqualsToken */: {
+                case 76 /* AmpersandAmpersandEqualsToken */: {
                     var resultType_2 = getTypeFacts(leftType) & 4194304 /* Truthy */ ?
                         getUnionType([extractDefinitelyFalsyTypes(strictNullChecks ? leftType : getBaseTypeOfLiteralType(rightType)), rightType]) :
                         leftType;
-                    if (operator === 75 /* AmpersandAmpersandEqualsToken */) {
+                    if (operator === 76 /* AmpersandAmpersandEqualsToken */) {
                         checkAssignmentOperator(rightType);
                     }
                     return resultType_2;
                 }
                 case 56 /* BarBarToken */:
-                case 74 /* BarBarEqualsToken */: {
+                case 75 /* BarBarEqualsToken */: {
                     var resultType_3 = getTypeFacts(leftType) & 8388608 /* Falsy */ ?
                         getUnionType([removeDefinitelyFalsyTypes(leftType), rightType], 2 /* Subtype */) :
                         leftType;
-                    if (operator === 74 /* BarBarEqualsToken */) {
+                    if (operator === 75 /* BarBarEqualsToken */) {
                         checkAssignmentOperator(rightType);
                     }
                     return resultType_3;
                 }
                 case 60 /* QuestionQuestionToken */:
-                case 76 /* QuestionQuestionEqualsToken */: {
+                case 77 /* QuestionQuestionEqualsToken */: {
                     var resultType_4 = getTypeFacts(leftType) & 262144 /* EQUndefinedOrNull */ ?
                         getUnionType([getNonNullableType(leftType), rightType], 2 /* Subtype */) :
                         leftType;
-                    if (operator === 76 /* QuestionQuestionEqualsToken */) {
+                    if (operator === 77 /* QuestionQuestionEqualsToken */) {
                         checkAssignmentOperator(rightType);
                     }
                     return resultType_4;
                 }
-                case 62 /* EqualsToken */:
+                case 63 /* EqualsToken */:
                     var declKind = ts.isBinaryExpression(left.parent) ? ts.getAssignmentDeclarationKind(left.parent) : 0 /* None */;
                     checkAssignmentDeclaration(declKind, rightType);
                     if (isAssignmentDeclaration(declKind)) {
@@ -74220,7 +75621,7 @@
                 }
             }
             function isEvalNode(node) {
-                return node.kind === 78 /* Identifier */ && node.escapedText === "eval";
+                return node.kind === 79 /* Identifier */ && node.escapedText === "eval";
             }
             // Return true if there was no error, false if there was an error.
             function checkForDisallowedESSymbolOperand(operator) {
@@ -74236,13 +75637,13 @@
             function getSuggestedBooleanOperator(operator) {
                 switch (operator) {
                     case 51 /* BarToken */:
-                    case 73 /* BarEqualsToken */:
+                    case 74 /* BarEqualsToken */:
                         return 56 /* BarBarToken */;
                     case 52 /* CaretToken */:
-                    case 77 /* CaretEqualsToken */:
+                    case 78 /* CaretEqualsToken */:
                         return 37 /* ExclamationEqualsEqualsToken */;
                     case 50 /* AmpersandToken */:
-                    case 72 /* AmpersandEqualsToken */:
+                    case 73 /* AmpersandEqualsToken */:
                         return 55 /* AmpersandAmpersandToken */;
                     default:
                         return undefined;
@@ -74411,6 +75812,11 @@
             var type2 = checkExpression(node.whenFalse, checkMode);
             return getUnionType([type1, type2], 2 /* Subtype */);
         }
+        function isTemplateLiteralContext(node) {
+            var parent = node.parent;
+            return ts.isParenthesizedExpression(parent) && isTemplateLiteralContext(parent) ||
+                ts.isElementAccessExpression(parent) && parent.argumentExpression === node;
+        }
         function checkTemplateExpression(node) {
             var texts = [node.head.text];
             var types = [];
@@ -74423,14 +75829,14 @@
                 texts.push(span.literal.text);
                 types.push(isTypeAssignableTo(type, templateConstraintType) ? type : stringType);
             }
-            return isConstContext(node) || someType(getContextualType(node) || unknownType, isTemplateLiteralContextualType) ? getTemplateLiteralType(texts, types) : stringType;
+            return isConstContext(node) || isTemplateLiteralContext(node) || someType(getContextualType(node) || unknownType, isTemplateLiteralContextualType) ? getTemplateLiteralType(texts, types) : stringType;
         }
         function isTemplateLiteralContextualType(type) {
             return !!(type.flags & (128 /* StringLiteral */ | 134217728 /* TemplateLiteral */) ||
                 type.flags & 58982400 /* InstantiableNonPrimitive */ && maybeTypeOfKind(getBaseConstraintOfType(type) || unknownType, 402653316 /* StringLike */));
         }
         function getContextNode(node) {
-            if (node.kind === 282 /* JsxAttributes */ && !ts.isJsxSelfClosingElement(node.parent)) {
+            if (node.kind === 284 /* JsxAttributes */ && !ts.isJsxSelfClosingElement(node.parent)) {
                 return node.parent.parent; // Needs to be the root JsxElement, so it encompasses the attributes _and_ the children (which are essentially part of the attributes)
             }
             return node;
@@ -74479,13 +75885,13 @@
         }
         function isTypeAssertion(node) {
             node = ts.skipParentheses(node);
-            return node.kind === 207 /* TypeAssertionExpression */ || node.kind === 225 /* AsExpression */;
+            return node.kind === 209 /* TypeAssertionExpression */ || node.kind === 227 /* AsExpression */;
         }
         function checkDeclarationInitializer(declaration, contextualType) {
             var initializer = ts.getEffectiveInitializer(declaration);
             var type = getQuickTypeOfExpression(initializer) ||
                 (contextualType ? checkExpressionWithContextualType(initializer, contextualType, /*inferenceContext*/ undefined, 0 /* Normal */) : checkExpressionCached(initializer));
-            return ts.isParameter(declaration) && declaration.name.kind === 198 /* ArrayBindingPattern */ &&
+            return ts.isParameter(declaration) && declaration.name.kind === 200 /* ArrayBindingPattern */ &&
                 isTupleType(type) && !type.target.hasRestElement && getTypeReferenceArity(type) < declaration.name.elements.length ?
                 padTupleType(type, declaration.name) : type;
         }
@@ -74495,7 +75901,7 @@
             var elementFlags = type.target.elementFlags.slice();
             for (var i = getTypeReferenceArity(type); i < patternElements.length; i++) {
                 var e = patternElements[i];
-                if (i < patternElements.length - 1 || !(e.kind === 199 /* BindingElement */ && e.dotDotDotToken)) {
+                if (i < patternElements.length - 1 || !(e.kind === 201 /* BindingElement */ && e.dotDotDotToken)) {
                     elementTypes.push(!ts.isOmittedExpression(e) && hasDefaultValue(e) ? getTypeFromBindingElement(e, /*includePatternInType*/ false, /*reportErrors*/ false) : anyType);
                     elementFlags.push(2 /* Optional */);
                     if (!ts.isOmittedExpression(e) && !hasDefaultValue(e)) {
@@ -74508,7 +75914,7 @@
         function widenTypeInferredFromInitializer(declaration, type) {
             var widened = ts.getCombinedNodeFlags(declaration) & 2 /* Const */ || ts.isDeclarationReadonly(declaration) ? type : getWidenedLiteralType(type);
             if (ts.isInJSFile(declaration)) {
-                if (widened.flags & 98304 /* Nullable */) {
+                if (isEmptyLiteralType(widened)) {
                     reportImplicitAny(declaration, anyType);
                     return anyType;
                 }
@@ -74562,7 +75968,7 @@
             // Do not use hasDynamicName here, because that returns false for well known symbols.
             // We want to perform checkComputedPropertyName for all computed properties, including
             // well known symbols.
-            if (node.name.kind === 159 /* ComputedPropertyName */) {
+            if (node.name.kind === 160 /* ComputedPropertyName */) {
                 checkComputedPropertyName(node.name);
             }
             return checkExpressionForMutableLocation(node.initializer, checkMode);
@@ -74573,7 +75979,7 @@
             // Do not use hasDynamicName here, because that returns false for well known symbols.
             // We want to perform checkComputedPropertyName for all computed properties, including
             // well known symbols.
-            if (node.name.kind === 159 /* ComputedPropertyName */) {
+            if (node.name.kind === 160 /* ComputedPropertyName */) {
                 checkComputedPropertyName(node.name);
             }
             var uninstantiatedType = checkFunctionExpressionOrObjectLiteralMethod(node, checkMode);
@@ -74700,7 +76106,7 @@
                 len--;
             var s = baseName.slice(0, len);
             for (var index = 1; true; index++) {
-                var augmentedName = (s + index);
+                var augmentedName = s + index;
                 if (!hasTypeParameterByName(typeParameters, augmentedName)) {
                     return augmentedName;
                 }
@@ -74749,7 +76155,7 @@
             var expr = ts.skipParentheses(node);
             // Optimize for the common case of a call to a function with a single non-generic call
             // signature where we can just fetch the return type without checking the arguments.
-            if (ts.isCallExpression(expr) && expr.expression.kind !== 105 /* SuperKeyword */ && !ts.isRequireCall(expr, /*checkArgumentIsStringLiteralLike*/ true) && !isSymbolOrSymbolForCall(expr)) {
+            if (ts.isCallExpression(expr) && expr.expression.kind !== 106 /* SuperKeyword */ && !ts.isRequireCall(expr, /*checkArgumentIsStringLiteralLike*/ true) && !isSymbolOrSymbolForCall(expr)) {
                 var type = ts.isCallChain(expr) ? getReturnTypeOfSingleNonGenericSignatureOfCallChain(expr) :
                     getReturnTypeOfSingleNonGenericCallSignature(checkNonNullExpression(expr.expression));
                 if (type) {
@@ -74760,7 +76166,7 @@
                 return getTypeFromTypeNode(expr.type);
             }
             else if (node.kind === 8 /* NumericLiteral */ || node.kind === 10 /* StringLiteral */ ||
-                node.kind === 109 /* TrueKeyword */ || node.kind === 94 /* FalseKeyword */) {
+                node.kind === 110 /* TrueKeyword */ || node.kind === 95 /* FalseKeyword */) {
                 return checkExpression(node);
             }
             return undefined;
@@ -74809,11 +76215,11 @@
             // - 'left' in property access
             // - 'object' in indexed access
             // - target in rhs of import statement
-            var ok = (node.parent.kind === 202 /* PropertyAccessExpression */ && node.parent.expression === node) ||
-                (node.parent.kind === 203 /* ElementAccessExpression */ && node.parent.expression === node) ||
-                ((node.kind === 78 /* Identifier */ || node.kind === 158 /* QualifiedName */) && isInRightSideOfImportOrExportAssignment(node) ||
-                    (node.parent.kind === 177 /* TypeQuery */ && node.parent.exprName === node)) ||
-                (node.parent.kind === 271 /* ExportSpecifier */); // We allow reexporting const enums
+            var ok = (node.parent.kind === 204 /* PropertyAccessExpression */ && node.parent.expression === node) ||
+                (node.parent.kind === 205 /* ElementAccessExpression */ && node.parent.expression === node) ||
+                ((node.kind === 79 /* Identifier */ || node.kind === 159 /* QualifiedName */) && isInRightSideOfImportOrExportAssignment(node) ||
+                    (node.parent.kind === 179 /* TypeQuery */ && node.parent.exprName === node)) ||
+                (node.parent.kind === 273 /* ExportSpecifier */); // We allow reexporting const enums
             if (!ok) {
                 error(node, ts.Diagnostics.const_enums_can_only_be_used_in_property_or_index_access_expressions_or_the_right_hand_side_of_an_import_declaration_or_export_assignment_or_type_query);
             }
@@ -74828,7 +76234,7 @@
         function checkParenthesizedExpression(node, checkMode) {
             var tag = ts.isInJSFile(node) ? ts.getJSDocTypeTag(node) : undefined;
             if (tag) {
-                return checkAssertionWorker(tag, tag.typeExpression.type, node.expression, checkMode);
+                return checkAssertionWorker(tag.typeExpression.type, tag.typeExpression.type, node.expression, checkMode);
             }
             return checkExpression(node.expression, checkMode);
         }
@@ -74838,106 +76244,109 @@
                 // Only bother checking on a few construct kinds.  We don't want to be excessively
                 // hitting the cancellation token on every node we check.
                 switch (kind) {
-                    case 222 /* ClassExpression */:
-                    case 209 /* FunctionExpression */:
-                    case 210 /* ArrowFunction */:
+                    case 224 /* ClassExpression */:
+                    case 211 /* FunctionExpression */:
+                    case 212 /* ArrowFunction */:
                         cancellationToken.throwIfCancellationRequested();
                 }
             }
             switch (kind) {
-                case 78 /* Identifier */:
+                case 79 /* Identifier */:
                     return checkIdentifier(node, checkMode);
-                case 107 /* ThisKeyword */:
+                case 108 /* ThisKeyword */:
                     return checkThisExpression(node);
-                case 105 /* SuperKeyword */:
+                case 106 /* SuperKeyword */:
                     return checkSuperExpression(node);
-                case 103 /* NullKeyword */:
+                case 104 /* NullKeyword */:
                     return nullWideningType;
                 case 14 /* NoSubstitutionTemplateLiteral */:
                 case 10 /* StringLiteral */:
-                    return getFreshTypeOfLiteralType(getLiteralType(node.text));
+                    return getFreshTypeOfLiteralType(getStringLiteralType(node.text));
                 case 8 /* NumericLiteral */:
                     checkGrammarNumericLiteral(node);
-                    return getFreshTypeOfLiteralType(getLiteralType(+node.text));
+                    return getFreshTypeOfLiteralType(getNumberLiteralType(+node.text));
                 case 9 /* BigIntLiteral */:
                     checkGrammarBigIntLiteral(node);
-                    return getFreshTypeOfLiteralType(getBigIntLiteralType(node));
-                case 109 /* TrueKeyword */:
+                    return getFreshTypeOfLiteralType(getBigIntLiteralType({
+                        negative: false,
+                        base10Value: ts.parsePseudoBigInt(node.text)
+                    }));
+                case 110 /* TrueKeyword */:
                     return trueType;
-                case 94 /* FalseKeyword */:
+                case 95 /* FalseKeyword */:
                     return falseType;
-                case 219 /* TemplateExpression */:
+                case 221 /* TemplateExpression */:
                     return checkTemplateExpression(node);
                 case 13 /* RegularExpressionLiteral */:
                     return globalRegExpType;
-                case 200 /* ArrayLiteralExpression */:
+                case 202 /* ArrayLiteralExpression */:
                     return checkArrayLiteral(node, checkMode, forceTuple);
-                case 201 /* ObjectLiteralExpression */:
+                case 203 /* ObjectLiteralExpression */:
                     return checkObjectLiteral(node, checkMode);
-                case 202 /* PropertyAccessExpression */:
+                case 204 /* PropertyAccessExpression */:
                     return checkPropertyAccessExpression(node, checkMode);
-                case 158 /* QualifiedName */:
+                case 159 /* QualifiedName */:
                     return checkQualifiedName(node, checkMode);
-                case 203 /* ElementAccessExpression */:
+                case 205 /* ElementAccessExpression */:
                     return checkIndexedAccess(node, checkMode);
-                case 204 /* CallExpression */:
-                    if (node.expression.kind === 99 /* ImportKeyword */) {
+                case 206 /* CallExpression */:
+                    if (node.expression.kind === 100 /* ImportKeyword */) {
                         return checkImportCallExpression(node);
                     }
                 // falls through
-                case 205 /* NewExpression */:
+                case 207 /* NewExpression */:
                     return checkCallExpression(node, checkMode);
-                case 206 /* TaggedTemplateExpression */:
+                case 208 /* TaggedTemplateExpression */:
                     return checkTaggedTemplateExpression(node);
-                case 208 /* ParenthesizedExpression */:
+                case 210 /* ParenthesizedExpression */:
                     return checkParenthesizedExpression(node, checkMode);
-                case 222 /* ClassExpression */:
+                case 224 /* ClassExpression */:
                     return checkClassExpression(node);
-                case 209 /* FunctionExpression */:
-                case 210 /* ArrowFunction */:
+                case 211 /* FunctionExpression */:
+                case 212 /* ArrowFunction */:
                     return checkFunctionExpressionOrObjectLiteralMethod(node, checkMode);
-                case 212 /* TypeOfExpression */:
+                case 214 /* TypeOfExpression */:
                     return checkTypeOfExpression(node);
-                case 207 /* TypeAssertionExpression */:
-                case 225 /* AsExpression */:
+                case 209 /* TypeAssertionExpression */:
+                case 227 /* AsExpression */:
                     return checkAssertion(node);
-                case 226 /* NonNullExpression */:
+                case 228 /* NonNullExpression */:
                     return checkNonNullAssertion(node);
-                case 227 /* MetaProperty */:
+                case 229 /* MetaProperty */:
                     return checkMetaProperty(node);
-                case 211 /* DeleteExpression */:
+                case 213 /* DeleteExpression */:
                     return checkDeleteExpression(node);
-                case 213 /* VoidExpression */:
+                case 215 /* VoidExpression */:
                     return checkVoidExpression(node);
-                case 214 /* AwaitExpression */:
+                case 216 /* AwaitExpression */:
                     return checkAwaitExpression(node);
-                case 215 /* PrefixUnaryExpression */:
+                case 217 /* PrefixUnaryExpression */:
                     return checkPrefixUnaryExpression(node);
-                case 216 /* PostfixUnaryExpression */:
+                case 218 /* PostfixUnaryExpression */:
                     return checkPostfixUnaryExpression(node);
-                case 217 /* BinaryExpression */:
+                case 219 /* BinaryExpression */:
                     return checkBinaryExpression(node, checkMode);
-                case 218 /* ConditionalExpression */:
+                case 220 /* ConditionalExpression */:
                     return checkConditionalExpression(node, checkMode);
-                case 221 /* SpreadElement */:
+                case 223 /* SpreadElement */:
                     return checkSpreadExpression(node, checkMode);
-                case 223 /* OmittedExpression */:
+                case 225 /* OmittedExpression */:
                     return undefinedWideningType;
-                case 220 /* YieldExpression */:
+                case 222 /* YieldExpression */:
                     return checkYieldExpression(node);
-                case 228 /* SyntheticExpression */:
+                case 230 /* SyntheticExpression */:
                     return checkSyntheticExpression(node);
-                case 284 /* JsxExpression */:
+                case 286 /* JsxExpression */:
                     return checkJsxExpression(node, checkMode);
-                case 274 /* JsxElement */:
+                case 276 /* JsxElement */:
                     return checkJsxElement(node, checkMode);
-                case 275 /* JsxSelfClosingElement */:
+                case 277 /* JsxSelfClosingElement */:
                     return checkJsxSelfClosingElement(node, checkMode);
-                case 278 /* JsxFragment */:
+                case 280 /* JsxFragment */:
                     return checkJsxFragment(node);
-                case 282 /* JsxAttributes */:
+                case 284 /* JsxAttributes */:
                     return checkJsxAttributes(node, checkMode);
-                case 276 /* JsxOpeningElement */:
+                case 278 /* JsxOpeningElement */:
                     ts.Debug.fail("Shouldn't ever directly check a JsxOpeningElement");
             }
             return errorType;
@@ -74974,10 +76383,10 @@
             checkVariableLikeDeclaration(node);
             var func = ts.getContainingFunction(node);
             if (ts.hasSyntacticModifier(node, 16476 /* ParameterPropertyModifier */)) {
-                if (!(func.kind === 167 /* Constructor */ && ts.nodeIsPresent(func.body))) {
+                if (!(func.kind === 169 /* Constructor */ && ts.nodeIsPresent(func.body))) {
                     error(node, ts.Diagnostics.A_parameter_property_is_only_allowed_in_a_constructor_implementation);
                 }
-                if (func.kind === 167 /* Constructor */ && ts.isIdentifier(node.name) && node.name.escapedText === "constructor") {
+                if (func.kind === 169 /* Constructor */ && ts.isIdentifier(node.name) && node.name.escapedText === "constructor") {
                     error(node.name, ts.Diagnostics.constructor_cannot_be_used_as_a_parameter_property_name);
                 }
             }
@@ -74988,13 +76397,13 @@
                 if (func.parameters.indexOf(node) !== 0) {
                     error(node, ts.Diagnostics.A_0_parameter_must_be_the_first_parameter, node.name.escapedText);
                 }
-                if (func.kind === 167 /* Constructor */ || func.kind === 171 /* ConstructSignature */ || func.kind === 176 /* ConstructorType */) {
+                if (func.kind === 169 /* Constructor */ || func.kind === 173 /* ConstructSignature */ || func.kind === 178 /* ConstructorType */) {
                     error(node, ts.Diagnostics.A_constructor_cannot_have_a_this_parameter);
                 }
-                if (func.kind === 210 /* ArrowFunction */) {
+                if (func.kind === 212 /* ArrowFunction */) {
                     error(node, ts.Diagnostics.An_arrow_function_cannot_have_a_this_parameter);
                 }
-                if (func.kind === 168 /* GetAccessor */ || func.kind === 169 /* SetAccessor */) {
+                if (func.kind === 170 /* GetAccessor */ || func.kind === 171 /* SetAccessor */) {
                     error(node, ts.Diagnostics.get_and_set_accessors_cannot_declare_this_parameters);
                 }
             }
@@ -75052,13 +76461,13 @@
         }
         function getTypePredicateParent(node) {
             switch (node.parent.kind) {
-                case 210 /* ArrowFunction */:
-                case 170 /* CallSignature */:
-                case 252 /* FunctionDeclaration */:
-                case 209 /* FunctionExpression */:
-                case 175 /* FunctionType */:
-                case 166 /* MethodDeclaration */:
-                case 165 /* MethodSignature */:
+                case 212 /* ArrowFunction */:
+                case 172 /* CallSignature */:
+                case 254 /* FunctionDeclaration */:
+                case 211 /* FunctionExpression */:
+                case 177 /* FunctionType */:
+                case 167 /* MethodDeclaration */:
+                case 166 /* MethodSignature */:
                     var parent = node.parent;
                     if (node === parent.type) {
                         return parent;
@@ -75072,11 +76481,11 @@
                     continue;
                 }
                 var name = element.name;
-                if (name.kind === 78 /* Identifier */ && name.escapedText === predicateVariableName) {
+                if (name.kind === 79 /* Identifier */ && name.escapedText === predicateVariableName) {
                     error(predicateVariableNode, ts.Diagnostics.A_type_predicate_cannot_reference_element_0_in_a_binding_pattern, predicateVariableName);
                     return true;
                 }
-                else if (name.kind === 198 /* ArrayBindingPattern */ || name.kind === 197 /* ObjectBindingPattern */) {
+                else if (name.kind === 200 /* ArrayBindingPattern */ || name.kind === 199 /* ObjectBindingPattern */) {
                     if (checkIfTypePredicateVariableIsDeclaredInBindingPattern(name, predicateVariableNode, predicateVariableName)) {
                         return true;
                     }
@@ -75085,13 +76494,13 @@
         }
         function checkSignatureDeclaration(node) {
             // Grammar checking
-            if (node.kind === 172 /* IndexSignature */) {
+            if (node.kind === 174 /* IndexSignature */) {
                 checkGrammarIndexSignature(node);
             }
             // TODO (yuisu): Remove this check in else-if when SyntaxKind.Construct is moved and ambient context is handled
-            else if (node.kind === 175 /* FunctionType */ || node.kind === 252 /* FunctionDeclaration */ || node.kind === 176 /* ConstructorType */ ||
-                node.kind === 170 /* CallSignature */ || node.kind === 167 /* Constructor */ ||
-                node.kind === 171 /* ConstructSignature */) {
+            else if (node.kind === 177 /* FunctionType */ || node.kind === 254 /* FunctionDeclaration */ || node.kind === 178 /* ConstructorType */ ||
+                node.kind === 172 /* CallSignature */ || node.kind === 169 /* Constructor */ ||
+                node.kind === 173 /* ConstructSignature */) {
                 checkGrammarFunctionLikeDeclaration(node);
             }
             var functionFlags = ts.getFunctionFlags(node);
@@ -75121,10 +76530,10 @@
                 var returnTypeNode = ts.getEffectiveReturnTypeNode(node);
                 if (noImplicitAny && !returnTypeNode) {
                     switch (node.kind) {
-                        case 171 /* ConstructSignature */:
+                        case 173 /* ConstructSignature */:
                             error(node, ts.Diagnostics.Construct_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type);
                             break;
-                        case 170 /* CallSignature */:
+                        case 172 /* CallSignature */:
                             error(node, ts.Diagnostics.Call_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type);
                             break;
                     }
@@ -75154,7 +76563,7 @@
                         checkAsyncFunctionReturnType(node, returnTypeNode);
                     }
                 }
-                if (node.kind !== 172 /* IndexSignature */ && node.kind !== 309 /* JSDocFunctionType */) {
+                if (node.kind !== 174 /* IndexSignature */ && node.kind !== 312 /* JSDocFunctionType */) {
                     registerForUnusedIdentifiersCheck(node);
                 }
             }
@@ -75166,7 +76575,7 @@
             var privateIdentifiers = new ts.Map();
             for (var _i = 0, _a = node.members; _i < _a.length; _i++) {
                 var member = _a[_i];
-                if (member.kind === 167 /* Constructor */) {
+                if (member.kind === 169 /* Constructor */) {
                     for (var _b = 0, _c = member.parameters; _b < _c.length; _b++) {
                         var param = _c[_b];
                         if (ts.isParameterPropertyDeclaration(param, member) && !ts.isBindingPattern(param.name)) {
@@ -75175,29 +76584,29 @@
                     }
                 }
                 else {
-                    var isStatic = ts.hasSyntacticModifier(member, 32 /* Static */);
+                    var isStaticMember = ts.isStatic(member);
                     var name = member.name;
                     if (!name) {
                         continue;
                     }
                     var isPrivate = ts.isPrivateIdentifier(name);
-                    var privateStaticFlags = isPrivate && isStatic ? 16 /* PrivateStatic */ : 0;
+                    var privateStaticFlags = isPrivate && isStaticMember ? 16 /* PrivateStatic */ : 0;
                     var names = isPrivate ? privateIdentifiers :
-                        isStatic ? staticNames :
+                        isStaticMember ? staticNames :
                             instanceNames;
                     var memberName = name && ts.getPropertyNameForPropertyNameNode(name);
                     if (memberName) {
                         switch (member.kind) {
-                            case 168 /* GetAccessor */:
+                            case 170 /* GetAccessor */:
                                 addName(names, name, memberName, 1 /* GetAccessor */ | privateStaticFlags);
                                 break;
-                            case 169 /* SetAccessor */:
+                            case 171 /* SetAccessor */:
                                 addName(names, name, memberName, 2 /* SetAccessor */ | privateStaticFlags);
                                 break;
-                            case 164 /* PropertyDeclaration */:
+                            case 165 /* PropertyDeclaration */:
                                 addName(names, name, memberName, 3 /* GetOrSetAccessor */ | privateStaticFlags);
                                 break;
-                            case 166 /* MethodDeclaration */:
+                            case 167 /* MethodDeclaration */:
                                 addName(names, name, memberName, 8 /* Method */ | privateStaticFlags);
                                 break;
                         }
@@ -75248,8 +76657,8 @@
             for (var _i = 0, _a = node.members; _i < _a.length; _i++) {
                 var member = _a[_i];
                 var memberNameNode = member.name;
-                var isStatic = ts.hasSyntacticModifier(member, 32 /* Static */);
-                if (isStatic && memberNameNode) {
+                var isStaticMember = ts.isStatic(member);
+                if (isStaticMember && memberNameNode) {
                     var memberName = ts.getPropertyNameForPropertyNameNode(memberNameNode);
                     switch (memberName) {
                         case "name":
@@ -75269,7 +76678,7 @@
             var names = new ts.Map();
             for (var _i = 0, _a = node.members; _i < _a.length; _i++) {
                 var member = _a[_i];
-                if (member.kind === 163 /* PropertySignature */) {
+                if (member.kind === 164 /* PropertySignature */) {
                     var memberName = void 0;
                     var name = member.name;
                     switch (name.kind) {
@@ -75277,7 +76686,7 @@
                         case 8 /* NumericLiteral */:
                             memberName = name.text;
                             break;
-                        case 78 /* Identifier */:
+                        case 79 /* Identifier */:
                             memberName = ts.idText(name);
                             break;
                         default:
@@ -75294,7 +76703,7 @@
             }
         }
         function checkTypeForDuplicateIndexSignatures(node) {
-            if (node.kind === 254 /* InterfaceDeclaration */) {
+            if (node.kind === 256 /* InterfaceDeclaration */) {
                 var nodeSymbol = getSymbolOfNode(node);
                 // in case of merging interface declaration it is possible that we'll enter this check procedure several times for every declaration
                 // to prevent this run check only for the first declaration of a given kind
@@ -75307,32 +76716,32 @@
             // 8.5: A class declaration can have at most one string index member declaration and one numeric index member declaration
             var indexSymbol = getIndexSymbol(getSymbolOfNode(node));
             if (indexSymbol === null || indexSymbol === void 0 ? void 0 : indexSymbol.declarations) {
-                var seenNumericIndexer = false;
-                var seenStringIndexer = false;
-                for (var _i = 0, _a = indexSymbol.declarations; _i < _a.length; _i++) {
-                    var decl = _a[_i];
-                    var declaration = decl;
+                var indexSignatureMap_1 = new ts.Map();
+                var _loop_26 = function (declaration) {
                     if (declaration.parameters.length === 1 && declaration.parameters[0].type) {
-                        switch (declaration.parameters[0].type.kind) {
-                            case 147 /* StringKeyword */:
-                                if (!seenStringIndexer) {
-                                    seenStringIndexer = true;
-                                }
-                                else {
-                                    error(declaration, ts.Diagnostics.Duplicate_string_index_signature);
-                                }
-                                break;
-                            case 144 /* NumberKeyword */:
-                                if (!seenNumericIndexer) {
-                                    seenNumericIndexer = true;
-                                }
-                                else {
-                                    error(declaration, ts.Diagnostics.Duplicate_number_index_signature);
-                                }
-                                break;
+                        forEachType(getTypeFromTypeNode(declaration.parameters[0].type), function (type) {
+                            var entry = indexSignatureMap_1.get(getTypeId(type));
+                            if (entry) {
+                                entry.declarations.push(declaration);
+                            }
+                            else {
+                                indexSignatureMap_1.set(getTypeId(type), { type: type, declarations: [declaration] });
+                            }
+                        });
+                    }
+                };
+                for (var _i = 0, _a = indexSymbol.declarations; _i < _a.length; _i++) {
+                    var declaration = _a[_i];
+                    _loop_26(declaration);
+                }
+                indexSignatureMap_1.forEach(function (entry) {
+                    if (entry.declarations.length > 1) {
+                        for (var _i = 0, _a = entry.declarations; _i < _a.length; _i++) {
+                            var declaration = _a[_i];
+                            error(declaration, ts.Diagnostics.Duplicate_index_signature_for_type_0, typeToString(entry.type));
                         }
                     }
-                }
+                });
             }
         }
         function checkPropertyDeclaration(node) {
@@ -75344,6 +76753,10 @@
             if (ts.isPrivateIdentifier(node.name) && ts.hasStaticModifier(node) && node.initializer && languageVersion === 99 /* ESNext */ && !compilerOptions.useDefineForClassFields) {
                 error(node.initializer, ts.Diagnostics.Static_fields_with_private_names_can_t_have_initializers_when_the_useDefineForClassFields_flag_is_not_specified_with_a_target_of_esnext_Consider_adding_the_useDefineForClassFields_flag);
             }
+            // property signatures already report "initializer not allowed in ambient context" elsewhere
+            if (ts.hasSyntacticModifier(node, 128 /* Abstract */) && node.kind === 165 /* PropertyDeclaration */ && node.initializer) {
+                error(node, ts.Diagnostics.Property_0_cannot_have_an_initializer_because_it_is_marked_abstract, ts.declarationNameToString(node.name));
+            }
         }
         function checkPropertySignature(node) {
             if (ts.isPrivateIdentifier(node.name)) {
@@ -75357,9 +76770,8 @@
                 checkGrammarComputedPropertyName(node.name);
             // Grammar checking for modifiers is done inside the function checkGrammarFunctionLikeDeclaration
             checkFunctionOrMethodDeclaration(node);
-            // Abstract methods cannot have an implementation.
-            // Extra checks are to avoid reporting multiple errors relating to the "abstractness" of the node.
-            if (ts.hasSyntacticModifier(node, 128 /* Abstract */) && node.kind === 166 /* MethodDeclaration */ && node.body) {
+            // method signatures already report "implementation not allowed in ambient context" elsewhere
+            if (ts.hasSyntacticModifier(node, 128 /* Abstract */) && node.kind === 167 /* MethodDeclaration */ && node.body) {
                 error(node, ts.Diagnostics.Method_0_cannot_have_an_implementation_because_it_is_marked_abstract, ts.declarationNameToString(node.name));
             }
             // Private named methods are only allowed in class declarations
@@ -75385,6 +76797,10 @@
                 }
             }
         }
+        function checkClassStaticBlockDeclaration(node) {
+            checkGrammarDecoratorsAndModifiers(node);
+            ts.forEachChild(node, checkSourceElement);
+        }
         function checkConstructorDeclaration(node) {
             // Grammar check on signature of constructor and modifier of the constructor is done in checkSignatureDeclaration function.
             checkSignatureDeclaration(node);
@@ -75409,8 +76825,8 @@
                 if (ts.isPrivateIdentifierClassElementDeclaration(n)) {
                     return true;
                 }
-                return n.kind === 164 /* PropertyDeclaration */ &&
-                    !ts.hasSyntacticModifier(n, 32 /* Static */) &&
+                return n.kind === 165 /* PropertyDeclaration */ &&
+                    !ts.isStatic(n) &&
                     !!n.initializer;
             }
             // TS 1.0 spec (April 2014): 8.3.2
@@ -75440,7 +76856,7 @@
                         var superCallStatement = void 0;
                         for (var _i = 0, statements_4 = statements; _i < statements_4.length; _i++) {
                             var statement = statements_4[_i];
-                            if (statement.kind === 234 /* ExpressionStatement */ && ts.isSuperCall(statement.expression)) {
+                            if (statement.kind === 236 /* ExpressionStatement */ && ts.isSuperCall(statement.expression)) {
                                 superCallStatement = statement;
                                 break;
                             }
@@ -75465,7 +76881,7 @@
                     checkGrammarComputedPropertyName(node.name);
                 checkDecorators(node);
                 checkSignatureDeclaration(node);
-                if (node.kind === 168 /* GetAccessor */) {
+                if (node.kind === 170 /* GetAccessor */) {
                     if (!(node.flags & 8388608 /* Ambient */) && ts.nodeIsPresent(node.body) && (node.flags & 256 /* HasImplicitReturn */)) {
                         if (!(node.flags & 512 /* HasExplicitReturn */)) {
                             error(node.name, ts.Diagnostics.A_get_accessor_must_return_a_value);
@@ -75475,15 +76891,15 @@
                 // Do not use hasDynamicName here, because that returns false for well known symbols.
                 // We want to perform checkComputedPropertyName for all computed properties, including
                 // well known symbols.
-                if (node.name.kind === 159 /* ComputedPropertyName */) {
+                if (node.name.kind === 160 /* ComputedPropertyName */) {
                     checkComputedPropertyName(node.name);
                 }
                 if (hasBindableName(node)) {
                     // TypeScript 1.0 spec (April 2014): 8.4.3
                     // Accessors for the same member name must specify the same accessibility.
                     var symbol = getSymbolOfNode(node);
-                    var getter = ts.getDeclarationOfKind(symbol, 168 /* GetAccessor */);
-                    var setter = ts.getDeclarationOfKind(symbol, 169 /* SetAccessor */);
+                    var getter = ts.getDeclarationOfKind(symbol, 170 /* GetAccessor */);
+                    var setter = ts.getDeclarationOfKind(symbol, 171 /* SetAccessor */);
                     if (getter && setter && !(getNodeCheckFlags(getter) & 1 /* TypeChecked */)) {
                         getNodeLinks(getter).flags |= 1 /* TypeChecked */;
                         var getterFlags = ts.getEffectiveModifierFlags(getter);
@@ -75505,7 +76921,7 @@
                     }
                 }
                 var returnType = getTypeOfAccessors(getSymbolOfNode(node));
-                if (node.kind === 168 /* GetAccessor */) {
+                if (node.kind === 170 /* GetAccessor */) {
                     checkAllCodePathsInNonVoidFunctionReturnOrThrow(node, returnType);
                 }
             }
@@ -75547,7 +76963,7 @@
         }
         function checkTypeReferenceNode(node) {
             checkGrammarTypeArguments(node, node.typeArguments);
-            if (node.kind === 174 /* TypeReference */ && node.typeName.jsdocDotPos !== undefined && !ts.isInJSFile(node) && !ts.isInJSDoc(node)) {
+            if (node.kind === 176 /* TypeReference */ && node.typeName.jsdocDotPos !== undefined && !ts.isInJSFile(node) && !ts.isInJSDoc(node)) {
                 grammarErrorAtPos(node, node.typeName.jsdocDotPos, 1, ts.Diagnostics.JSDoc_types_can_only_be_used_inside_documentation_comments);
             }
             ts.forEach(node.typeArguments, checkSourceElement);
@@ -75600,7 +77016,7 @@
             var hasNamedElement = ts.some(elementTypes, ts.isNamedTupleMember);
             for (var _i = 0, elementTypes_1 = elementTypes; _i < elementTypes_1.length; _i++) {
                 var e = elementTypes_1[_i];
-                if (e.kind !== 193 /* NamedTupleMember */ && hasNamedElement) {
+                if (e.kind !== 195 /* NamedTupleMember */ && hasNamedElement) {
                     grammarErrorOnNode(e, ts.Diagnostics.Tuple_members_must_all_have_names_or_all_not_have_names);
                     break;
                 }
@@ -75649,7 +77065,7 @@
             var objectType = type.objectType;
             var indexType = type.indexType;
             if (isTypeAssignableTo(indexType, getIndexType(objectType, /*stringsOnly*/ false))) {
-                if (accessNode.kind === 203 /* ElementAccessExpression */ && ts.isAssignmentTarget(accessNode) &&
+                if (accessNode.kind === 205 /* ElementAccessExpression */ && ts.isAssignmentTarget(accessNode) &&
                     ts.getObjectFlags(objectType) & 32 /* Mapped */ && getMappedTypeModifiers(objectType) & 1 /* IncludeReadonly */) {
                     error(accessNode, ts.Diagnostics.Index_signature_in_type_0_only_permits_reading, typeToString(objectType));
                 }
@@ -75658,7 +77074,7 @@
             // Check if we're indexing with a numeric type and if either object or index types
             // is a generic type with a constraint that has a numeric index signature.
             var apparentObjectType = getApparentType(objectType);
-            if (getIndexInfoOfType(apparentObjectType, 1 /* Number */) && isTypeAssignableToKind(indexType, 296 /* NumberLike */)) {
+            if (getIndexInfoOfType(apparentObjectType, numberType) && isTypeAssignableToKind(indexType, 296 /* NumberLike */)) {
                 return type;
             }
             if (isGenericObjectType(objectType)) {
@@ -75707,7 +77123,7 @@
             ts.forEachChild(node, checkSourceElement);
         }
         function checkInferType(node) {
-            if (!ts.findAncestor(node, function (n) { return n.parent && n.parent.kind === 185 /* ConditionalType */ && n.parent.extendsType === n; })) {
+            if (!ts.findAncestor(node, function (n) { return n.parent && n.parent.kind === 187 /* ConditionalType */ && n.parent.extendsType === n; })) {
                 grammarErrorOnNode(node, ts.Diagnostics.infer_declarations_are_only_permitted_in_the_extends_clause_of_a_conditional_type);
             }
             checkSourceElement(node.typeParameter);
@@ -75730,10 +77146,10 @@
             if (node.dotDotDotToken && node.questionToken) {
                 grammarErrorOnNode(node, ts.Diagnostics.A_tuple_member_cannot_be_both_optional_and_rest);
             }
-            if (node.type.kind === 181 /* OptionalType */) {
+            if (node.type.kind === 183 /* OptionalType */) {
                 grammarErrorOnNode(node.type, ts.Diagnostics.A_labeled_tuple_element_is_declared_as_optional_with_a_question_mark_after_the_name_and_before_the_colon_rather_than_after_the_type);
             }
-            if (node.type.kind === 182 /* RestType */) {
+            if (node.type.kind === 184 /* RestType */) {
                 grammarErrorOnNode(node.type, ts.Diagnostics.A_labeled_tuple_element_is_declared_as_rest_with_a_before_the_name_rather_than_before_the_type);
             }
             checkSourceElement(node.type);
@@ -75746,9 +77162,9 @@
             var flags = ts.getCombinedModifierFlags(n);
             // children of classes (even ambient classes) should not be marked as ambient or export
             // because those flags have no useful semantics there.
-            if (n.parent.kind !== 254 /* InterfaceDeclaration */ &&
-                n.parent.kind !== 253 /* ClassDeclaration */ &&
-                n.parent.kind !== 222 /* ClassExpression */ &&
+            if (n.parent.kind !== 256 /* InterfaceDeclaration */ &&
+                n.parent.kind !== 255 /* ClassDeclaration */ &&
+                n.parent.kind !== 224 /* ClassExpression */ &&
                 n.flags & 8388608 /* Ambient */) {
                 if (!(flags & 2 /* Ambient */) && !(ts.isModuleBlock(n.parent) && ts.isModuleDeclaration(n.parent.parent) && ts.isGlobalScopeAugmentation(n.parent.parent))) {
                     // It is nested in an ambient context, which means it is automatically exported
@@ -75844,14 +77260,14 @@
                             // Both are literal property names that are the same.
                             ts.isPropertyNameLiteral(node.name) && ts.isPropertyNameLiteral(subsequentName) &&
                                 ts.getEscapedTextOfIdentifierOrLiteral(node.name) === ts.getEscapedTextOfIdentifierOrLiteral(subsequentName))) {
-                            var reportError = (node.kind === 166 /* MethodDeclaration */ || node.kind === 165 /* MethodSignature */) &&
-                                ts.hasSyntacticModifier(node, 32 /* Static */) !== ts.hasSyntacticModifier(subsequentNode, 32 /* Static */);
+                            var reportError = (node.kind === 167 /* MethodDeclaration */ || node.kind === 166 /* MethodSignature */) &&
+                                ts.isStatic(node) !== ts.isStatic(subsequentNode);
                             // we can get here in two cases
                             // 1. mixed static and instance class members
                             // 2. something with the same name was defined before the set of overloads that prevents them from merging
                             // here we'll report error only for the first case since for second we should already report error in binder
                             if (reportError) {
-                                var diagnostic = ts.hasSyntacticModifier(node, 32 /* Static */) ? ts.Diagnostics.Function_overload_must_be_static : ts.Diagnostics.Function_overload_must_not_be_static;
+                                var diagnostic = ts.isStatic(node) ? ts.Diagnostics.Function_overload_must_be_static : ts.Diagnostics.Function_overload_must_not_be_static;
                                 error(errorNode_1, diagnostic);
                             }
                             return;
@@ -75886,7 +77302,7 @@
                     var current = declarations_4[_i];
                     var node = current;
                     var inAmbientContext = node.flags & 8388608 /* Ambient */;
-                    var inAmbientContextOrInterface = node.parent && (node.parent.kind === 254 /* InterfaceDeclaration */ || node.parent.kind === 178 /* TypeLiteral */) || inAmbientContext;
+                    var inAmbientContextOrInterface = node.parent && (node.parent.kind === 256 /* InterfaceDeclaration */ || node.parent.kind === 180 /* TypeLiteral */) || inAmbientContext;
                     if (inAmbientContextOrInterface) {
                         // check if declarations are consecutive only if they are non-ambient
                         // 1. ambient declarations can be interleaved
@@ -75897,10 +77313,10 @@
                         // 2. mixing ambient and non-ambient declarations is a separate error that will be reported - do not want to report an extra one
                         previousDeclaration = undefined;
                     }
-                    if ((node.kind === 253 /* ClassDeclaration */ || node.kind === 222 /* ClassExpression */) && !inAmbientContext) {
+                    if ((node.kind === 255 /* ClassDeclaration */ || node.kind === 224 /* ClassExpression */) && !inAmbientContext) {
                         hasNonAmbientClass = true;
                     }
-                    if (node.kind === 252 /* FunctionDeclaration */ || node.kind === 166 /* MethodDeclaration */ || node.kind === 165 /* MethodSignature */ || node.kind === 167 /* Constructor */) {
+                    if (node.kind === 254 /* FunctionDeclaration */ || node.kind === 167 /* MethodDeclaration */ || node.kind === 166 /* MethodSignature */ || node.kind === 169 /* Constructor */) {
                         functionDeclarations.push(node);
                         var currentNodeFlags = getEffectiveDeclarationFlags(node, flagsToCheck);
                         someNodeFlags |= currentNodeFlags;
@@ -75944,13 +77360,18 @@
                     error(ts.getNameOfDeclaration(declaration) || declaration, ts.Diagnostics.Duplicate_function_implementation);
                 });
             }
-            if (hasNonAmbientClass && !isConstructor && symbol.flags & 16 /* Function */) {
-                // A non-ambient class cannot be an implementation for a non-constructor function/class merge
-                // TODO: The below just replicates our older error from when classes and functions were
-                // entirely unable to merge - a more helpful message like "Class declaration cannot implement overload list"
-                // might be warranted. :shrug:
+            if (hasNonAmbientClass && !isConstructor && symbol.flags & 16 /* Function */ && declarations) {
+                var relatedDiagnostics_1 = ts.filter(declarations, function (d) { return d.kind === 255 /* ClassDeclaration */; })
+                    .map(function (d) { return ts.createDiagnosticForNode(d, ts.Diagnostics.Consider_adding_a_declare_modifier_to_this_class); });
                 ts.forEach(declarations, function (declaration) {
-                    addDuplicateDeclarationError(declaration, ts.Diagnostics.Duplicate_identifier_0, ts.symbolName(symbol), declarations);
+                    var diagnostic = declaration.kind === 255 /* ClassDeclaration */
+                        ? ts.Diagnostics.Class_declaration_cannot_implement_overload_list_for_0
+                        : declaration.kind === 254 /* FunctionDeclaration */
+                            ? ts.Diagnostics.Function_with_bodies_can_only_merge_with_classes_that_are_ambient
+                            : undefined;
+                    if (diagnostic) {
+                        ts.addRelatedInfo.apply(void 0, __spreadArray([error(ts.getNameOfDeclaration(declaration) || declaration, diagnostic, ts.symbolName(symbol))], relatedDiagnostics_1, false));
+                    }
                 });
             }
             // Abstract methods can't have an implementation -- in particular, they don't need one.
@@ -76036,26 +77457,26 @@
             function getDeclarationSpaces(decl) {
                 var d = decl;
                 switch (d.kind) {
-                    case 254 /* InterfaceDeclaration */:
-                    case 255 /* TypeAliasDeclaration */:
+                    case 256 /* InterfaceDeclaration */:
+                    case 257 /* TypeAliasDeclaration */:
                     // A jsdoc typedef and callback are, by definition, type aliases.
                     // falls through
-                    case 335 /* JSDocTypedefTag */:
-                    case 328 /* JSDocCallbackTag */:
-                    case 329 /* JSDocEnumTag */:
+                    case 340 /* JSDocTypedefTag */:
+                    case 333 /* JSDocCallbackTag */:
+                    case 334 /* JSDocEnumTag */:
                         return 2 /* ExportType */;
-                    case 257 /* ModuleDeclaration */:
+                    case 259 /* ModuleDeclaration */:
                         return ts.isAmbientModule(d) || ts.getModuleInstanceState(d) !== 0 /* NonInstantiated */
                             ? 4 /* ExportNamespace */ | 1 /* ExportValue */
                             : 4 /* ExportNamespace */;
-                    case 253 /* ClassDeclaration */:
-                    case 256 /* EnumDeclaration */:
-                    case 292 /* EnumMember */:
+                    case 255 /* ClassDeclaration */:
+                    case 258 /* EnumDeclaration */:
+                    case 294 /* EnumMember */:
                         return 2 /* ExportType */ | 1 /* ExportValue */;
-                    case 298 /* SourceFile */:
+                    case 300 /* SourceFile */:
                         return 2 /* ExportType */ | 1 /* ExportValue */ | 4 /* ExportNamespace */;
-                    case 267 /* ExportAssignment */:
-                    case 217 /* BinaryExpression */:
+                    case 269 /* ExportAssignment */:
+                    case 219 /* BinaryExpression */:
                         var node_2 = d;
                         var expression = ts.isExportAssignment(node_2) ? node_2.expression : node_2.right;
                         // Export assigned entity name expressions act as aliases and should fall through, otherwise they export values
@@ -76065,18 +77486,18 @@
                         d = expression;
                     // The below options all declare an Alias, which is allowed to merge with other values within the importing module.
                     // falls through
-                    case 261 /* ImportEqualsDeclaration */:
-                    case 264 /* NamespaceImport */:
-                    case 263 /* ImportClause */:
-                        var result_13 = 0 /* None */;
+                    case 263 /* ImportEqualsDeclaration */:
+                    case 266 /* NamespaceImport */:
+                    case 265 /* ImportClause */:
+                        var result_12 = 0 /* None */;
                         var target = resolveAlias(getSymbolOfNode(d));
-                        ts.forEach(target.declarations, function (d) { result_13 |= getDeclarationSpaces(d); });
-                        return result_13;
-                    case 250 /* VariableDeclaration */:
-                    case 199 /* BindingElement */:
-                    case 252 /* FunctionDeclaration */:
-                    case 266 /* ImportSpecifier */: // https://github.com/Microsoft/TypeScript/pull/7591
-                    case 78 /* Identifier */: // https://github.com/microsoft/TypeScript/issues/36098
+                        ts.forEach(target.declarations, function (d) { result_12 |= getDeclarationSpaces(d); });
+                        return result_12;
+                    case 252 /* VariableDeclaration */:
+                    case 201 /* BindingElement */:
+                    case 254 /* FunctionDeclaration */:
+                    case 268 /* ImportSpecifier */: // https://github.com/Microsoft/TypeScript/pull/7591
+                    case 79 /* Identifier */: // https://github.com/microsoft/TypeScript/issues/36098
                         // Identifiers are used as declarations of assignment declarations whose parents may be
                         // SyntaxKind.CallExpression - `Object.defineProperty(thing, "aField", {value: 42});`
                         // SyntaxKind.ElementAccessExpression - `thing["aField"] = 42;` or `thing["aField"];` (with a doc comment on it)
@@ -76328,7 +77749,7 @@
                 var promiseConstructorSymbol = resolveEntityName(promiseConstructorName, 111551 /* Value */, /*ignoreErrors*/ true);
                 var promiseConstructorType = promiseConstructorSymbol ? getTypeOfSymbol(promiseConstructorSymbol) : errorType;
                 if (promiseConstructorType === errorType) {
-                    if (promiseConstructorName.kind === 78 /* Identifier */ && promiseConstructorName.escapedText === "Promise" && getTargetType(returnType) === getGlobalPromiseType(/*reportErrors*/ false)) {
+                    if (promiseConstructorName.kind === 79 /* Identifier */ && promiseConstructorName.escapedText === "Promise" && getTargetType(returnType) === getGlobalPromiseType(/*reportErrors*/ false)) {
                         error(returnTypeNode, ts.Diagnostics.An_async_function_or_method_in_ES5_SlashES3_requires_the_Promise_constructor_Make_sure_you_have_a_declaration_for_the_Promise_constructor_or_include_ES2015_in_your_lib_option);
                     }
                     else {
@@ -76368,24 +77789,24 @@
             var headMessage = getDiagnosticHeadMessageForDecoratorResolution(node);
             var errorInfo;
             switch (node.parent.kind) {
-                case 253 /* ClassDeclaration */:
+                case 255 /* ClassDeclaration */:
                     var classSymbol = getSymbolOfNode(node.parent);
                     var classConstructorType = getTypeOfSymbol(classSymbol);
                     expectedReturnType = getUnionType([classConstructorType, voidType]);
                     break;
-                case 161 /* Parameter */:
+                case 162 /* Parameter */:
                     expectedReturnType = voidType;
                     errorInfo = ts.chainDiagnosticMessages(
                     /*details*/ undefined, ts.Diagnostics.The_return_type_of_a_parameter_decorator_function_must_be_either_void_or_any);
                     break;
-                case 164 /* PropertyDeclaration */:
+                case 165 /* PropertyDeclaration */:
                     expectedReturnType = voidType;
                     errorInfo = ts.chainDiagnosticMessages(
                     /*details*/ undefined, ts.Diagnostics.The_return_type_of_a_property_decorator_function_must_be_either_void_or_any);
                     break;
-                case 166 /* MethodDeclaration */:
-                case 168 /* GetAccessor */:
-                case 169 /* SetAccessor */:
+                case 167 /* MethodDeclaration */:
+                case 170 /* GetAccessor */:
+                case 171 /* SetAccessor */:
                     var methodType = getTypeOfNode(node.parent);
                     var descriptorType = createTypedPropertyDescriptorType(methodType);
                     expectedReturnType = getUnionType([descriptorType, voidType]);
@@ -76406,8 +77827,8 @@
             if (!typeName)
                 return;
             var rootName = ts.getFirstIdentifier(typeName);
-            var meaning = (typeName.kind === 78 /* Identifier */ ? 788968 /* Type */ : 1920 /* Namespace */) | 2097152 /* Alias */;
-            var rootSymbol = resolveName(rootName, rootName.escapedText, meaning, /*nameNotFoundMessage*/ undefined, /*nameArg*/ undefined, /*isRefernce*/ true);
+            var meaning = (typeName.kind === 79 /* Identifier */ ? 788968 /* Type */ : 1920 /* Namespace */) | 2097152 /* Alias */;
+            var rootSymbol = resolveName(rootName, rootName.escapedText, meaning, /*nameNotFoundMessage*/ undefined, /*nameArg*/ undefined, /*isReference*/ true);
             if (rootSymbol
                 && rootSymbol.flags & 2097152 /* Alias */
                 && symbolIsValue(rootSymbol)
@@ -76432,30 +77853,30 @@
         function getEntityNameForDecoratorMetadata(node) {
             if (node) {
                 switch (node.kind) {
-                    case 184 /* IntersectionType */:
-                    case 183 /* UnionType */:
+                    case 186 /* IntersectionType */:
+                    case 185 /* UnionType */:
                         return getEntityNameForDecoratorMetadataFromTypeList(node.types);
-                    case 185 /* ConditionalType */:
+                    case 187 /* ConditionalType */:
                         return getEntityNameForDecoratorMetadataFromTypeList([node.trueType, node.falseType]);
-                    case 187 /* ParenthesizedType */:
-                    case 193 /* NamedTupleMember */:
+                    case 189 /* ParenthesizedType */:
+                    case 195 /* NamedTupleMember */:
                         return getEntityNameForDecoratorMetadata(node.type);
-                    case 174 /* TypeReference */:
+                    case 176 /* TypeReference */:
                         return node.typeName;
                 }
             }
         }
         function getEntityNameForDecoratorMetadataFromTypeList(types) {
             var commonEntityName;
-            for (var _i = 0, types_23 = types; _i < types_23.length; _i++) {
-                var typeNode = types_23[_i];
-                while (typeNode.kind === 187 /* ParenthesizedType */ || typeNode.kind === 193 /* NamedTupleMember */) {
+            for (var _i = 0, types_22 = types; _i < types_22.length; _i++) {
+                var typeNode = types_22[_i];
+                while (typeNode.kind === 189 /* ParenthesizedType */ || typeNode.kind === 195 /* NamedTupleMember */) {
                     typeNode = typeNode.type; // Skip parens if need be
                 }
-                if (typeNode.kind === 141 /* NeverKeyword */) {
+                if (typeNode.kind === 142 /* NeverKeyword */) {
                     continue; // Always elide `never` from the union/intersection if possible
                 }
-                if (!strictNullChecks && (typeNode.kind === 192 /* LiteralType */ && typeNode.literal.kind === 103 /* NullKeyword */ || typeNode.kind === 150 /* UndefinedKeyword */)) {
+                if (!strictNullChecks && (typeNode.kind === 194 /* LiteralType */ && typeNode.literal.kind === 104 /* NullKeyword */ || typeNode.kind === 151 /* UndefinedKeyword */)) {
                     continue; // Elide null and undefined from unions for metadata, just like what we did prior to the implementation of strict null checks
                 }
                 var individualEntityName = getEntityNameForDecoratorMetadata(typeNode);
@@ -76501,14 +77922,14 @@
             }
             var firstDecorator = node.decorators[0];
             checkExternalEmitHelpers(firstDecorator, 8 /* Decorate */);
-            if (node.kind === 161 /* Parameter */) {
+            if (node.kind === 162 /* Parameter */) {
                 checkExternalEmitHelpers(firstDecorator, 32 /* Param */);
             }
             if (compilerOptions.emitDecoratorMetadata) {
                 checkExternalEmitHelpers(firstDecorator, 16 /* Metadata */);
                 // we only need to perform these checks if we are emitting serialized type metadata for the target of a decorator.
                 switch (node.kind) {
-                    case 253 /* ClassDeclaration */:
+                    case 255 /* ClassDeclaration */:
                         var constructor = ts.getFirstConstructorWithBody(node);
                         if (constructor) {
                             for (var _i = 0, _a = constructor.parameters; _i < _a.length; _i++) {
@@ -76517,23 +77938,23 @@
                             }
                         }
                         break;
-                    case 168 /* GetAccessor */:
-                    case 169 /* SetAccessor */:
-                        var otherKind = node.kind === 168 /* GetAccessor */ ? 169 /* SetAccessor */ : 168 /* GetAccessor */;
+                    case 170 /* GetAccessor */:
+                    case 171 /* SetAccessor */:
+                        var otherKind = node.kind === 170 /* GetAccessor */ ? 171 /* SetAccessor */ : 170 /* GetAccessor */;
                         var otherAccessor = ts.getDeclarationOfKind(getSymbolOfNode(node), otherKind);
                         markDecoratorMedataDataTypeNodeAsReferenced(getAnnotatedAccessorTypeNode(node) || otherAccessor && getAnnotatedAccessorTypeNode(otherAccessor));
                         break;
-                    case 166 /* MethodDeclaration */:
+                    case 167 /* MethodDeclaration */:
                         for (var _b = 0, _c = node.parameters; _b < _c.length; _b++) {
                             var parameter = _c[_b];
                             markDecoratorMedataDataTypeNodeAsReferenced(getParameterTypeNodeForDecoratorCheck(parameter));
                         }
                         markDecoratorMedataDataTypeNodeAsReferenced(ts.getEffectiveReturnTypeNode(node));
                         break;
-                    case 164 /* PropertyDeclaration */:
+                    case 165 /* PropertyDeclaration */:
                         markDecoratorMedataDataTypeNodeAsReferenced(ts.getEffectiveTypeAnnotationNode(node));
                         break;
-                    case 161 /* Parameter */:
+                    case 162 /* Parameter */:
                         markDecoratorMedataDataTypeNodeAsReferenced(getParameterTypeNodeForDecoratorCheck(node));
                         var containingSignature = node.parent;
                         for (var _d = 0, _e = containingSignature.parameters; _d < _e.length; _d++) {
@@ -76549,8 +77970,7 @@
             if (produceDiagnostics) {
                 checkFunctionOrMethodDeclaration(node);
                 checkGrammarForGenerator(node);
-                checkCollisionWithRequireExportsInGeneratedCode(node, node.name);
-                checkCollisionWithGlobalPromiseInGeneratedCode(node, node.name);
+                checkCollisionsForDeclarationName(node, node.name);
             }
         }
         function checkJSDocTypeAliasTag(node) {
@@ -76596,7 +78016,7 @@
                     else if (ts.findLast(ts.getJSDocTags(decl), ts.isJSDocParameterTag) === node &&
                         node.typeExpression && node.typeExpression.type &&
                         !isArrayType(getTypeFromTypeNode(node.typeExpression.type))) {
-                        error(node.name, ts.Diagnostics.JSDoc_param_tag_has_name_0_but_there_is_no_parameter_with_that_name_It_would_match_arguments_if_it_had_an_array_type, ts.idText(node.name.kind === 158 /* QualifiedName */ ? node.name.right : node.name));
+                        error(node.name, ts.Diagnostics.JSDoc_param_tag_has_name_0_but_there_is_no_parameter_with_that_name_It_would_match_arguments_if_it_had_an_array_type, ts.idText(node.name.kind === 159 /* QualifiedName */ ? node.name.right : node.name));
                     }
                 }
             }
@@ -76638,9 +78058,9 @@
         }
         function getIdentifierFromEntityNameExpression(node) {
             switch (node.kind) {
-                case 78 /* Identifier */:
+                case 79 /* Identifier */:
                     return node;
-                case 202 /* PropertyAccessExpression */:
+                case 204 /* PropertyAccessExpression */:
                     return node.name;
                 default:
                     return undefined;
@@ -76654,7 +78074,7 @@
             // Do not use hasDynamicName here, because that returns false for well known symbols.
             // We want to perform checkComputedPropertyName for all computed properties, including
             // well known symbols.
-            if (node.name && node.name.kind === 159 /* ComputedPropertyName */) {
+            if (node.name && node.name.kind === 160 /* ComputedPropertyName */) {
                 // This check will account for methods in class/interface declarations,
                 // as well as accessors in classes/object literals
                 checkComputedPropertyName(node.name);
@@ -76680,7 +78100,7 @@
                     checkFunctionOrConstructorSymbol(symbol);
                 }
             }
-            var body = node.kind === 165 /* MethodSignature */ ? undefined : node.body;
+            var body = node.kind === 166 /* MethodSignature */ ? undefined : node.body;
             checkSourceElement(body);
             checkAllCodePathsInNonVoidFunctionReturnOrThrow(node, getReturnTypeFromAnnotation(node));
             if (produceDiagnostics && !ts.getEffectiveReturnTypeNode(node)) {
@@ -76722,42 +78142,42 @@
             for (var _i = 0, potentiallyUnusedIdentifiers_1 = potentiallyUnusedIdentifiers; _i < potentiallyUnusedIdentifiers_1.length; _i++) {
                 var node = potentiallyUnusedIdentifiers_1[_i];
                 switch (node.kind) {
-                    case 253 /* ClassDeclaration */:
-                    case 222 /* ClassExpression */:
+                    case 255 /* ClassDeclaration */:
+                    case 224 /* ClassExpression */:
                         checkUnusedClassMembers(node, addDiagnostic);
                         checkUnusedTypeParameters(node, addDiagnostic);
                         break;
-                    case 298 /* SourceFile */:
-                    case 257 /* ModuleDeclaration */:
-                    case 231 /* Block */:
-                    case 259 /* CaseBlock */:
-                    case 238 /* ForStatement */:
-                    case 239 /* ForInStatement */:
-                    case 240 /* ForOfStatement */:
+                    case 300 /* SourceFile */:
+                    case 259 /* ModuleDeclaration */:
+                    case 233 /* Block */:
+                    case 261 /* CaseBlock */:
+                    case 240 /* ForStatement */:
+                    case 241 /* ForInStatement */:
+                    case 242 /* ForOfStatement */:
                         checkUnusedLocalsAndParameters(node, addDiagnostic);
                         break;
-                    case 167 /* Constructor */:
-                    case 209 /* FunctionExpression */:
-                    case 252 /* FunctionDeclaration */:
-                    case 210 /* ArrowFunction */:
-                    case 166 /* MethodDeclaration */:
-                    case 168 /* GetAccessor */:
-                    case 169 /* SetAccessor */:
+                    case 169 /* Constructor */:
+                    case 211 /* FunctionExpression */:
+                    case 254 /* FunctionDeclaration */:
+                    case 212 /* ArrowFunction */:
+                    case 167 /* MethodDeclaration */:
+                    case 170 /* GetAccessor */:
+                    case 171 /* SetAccessor */:
                         if (node.body) { // Don't report unused parameters in overloads
                             checkUnusedLocalsAndParameters(node, addDiagnostic);
                         }
                         checkUnusedTypeParameters(node, addDiagnostic);
                         break;
-                    case 165 /* MethodSignature */:
-                    case 170 /* CallSignature */:
-                    case 171 /* ConstructSignature */:
-                    case 175 /* FunctionType */:
-                    case 176 /* ConstructorType */:
-                    case 255 /* TypeAliasDeclaration */:
-                    case 254 /* InterfaceDeclaration */:
+                    case 166 /* MethodSignature */:
+                    case 172 /* CallSignature */:
+                    case 173 /* ConstructSignature */:
+                    case 177 /* FunctionType */:
+                    case 178 /* ConstructorType */:
+                    case 257 /* TypeAliasDeclaration */:
+                    case 256 /* InterfaceDeclaration */:
                         checkUnusedTypeParameters(node, addDiagnostic);
                         break;
-                    case 186 /* InferType */:
+                    case 188 /* InferType */:
                         checkUnusedInferTypeParameter(node, addDiagnostic);
                         break;
                     default:
@@ -76777,11 +78197,11 @@
             for (var _i = 0, _a = node.members; _i < _a.length; _i++) {
                 var member = _a[_i];
                 switch (member.kind) {
-                    case 166 /* MethodDeclaration */:
-                    case 164 /* PropertyDeclaration */:
-                    case 168 /* GetAccessor */:
-                    case 169 /* SetAccessor */:
-                        if (member.kind === 169 /* SetAccessor */ && member.symbol.flags & 32768 /* GetAccessor */) {
+                    case 167 /* MethodDeclaration */:
+                    case 165 /* PropertyDeclaration */:
+                    case 170 /* GetAccessor */:
+                    case 171 /* SetAccessor */:
+                        if (member.kind === 171 /* SetAccessor */ && member.symbol.flags & 32768 /* GetAccessor */) {
                             // Already would have reported an error on the getter.
                             break;
                         }
@@ -76792,7 +78212,7 @@
                             addDiagnostic(member, 0 /* Local */, ts.createDiagnosticForNode(member.name, ts.Diagnostics._0_is_declared_but_its_value_is_never_read, symbolToString(symbol)));
                         }
                         break;
-                    case 167 /* Constructor */:
+                    case 169 /* Constructor */:
                         for (var _b = 0, _c = member.parameters; _b < _c.length; _b++) {
                             var parameter = _c[_b];
                             if (!parameter.symbol.isReferenced && ts.hasSyntacticModifier(parameter, 8 /* Private */)) {
@@ -76800,12 +78220,13 @@
                             }
                         }
                         break;
-                    case 172 /* IndexSignature */:
-                    case 230 /* SemicolonClassElement */:
+                    case 174 /* IndexSignature */:
+                    case 232 /* SemicolonClassElement */:
+                    case 168 /* ClassStaticBlockDeclaration */:
                         // Can't be private
                         break;
                     default:
-                        ts.Debug.fail();
+                        ts.Debug.fail("Unexpected class member");
                 }
             }
         }
@@ -76829,7 +78250,7 @@
                     continue;
                 var name = ts.idText(typeParameter.name);
                 var parent = typeParameter.parent;
-                if (parent.kind !== 186 /* InferType */ && parent.typeParameters.every(isTypeParameterUnused)) {
+                if (parent.kind !== 188 /* InferType */ && parent.typeParameters.every(isTypeParameterUnused)) {
                     if (ts.tryAddToSet(seenParentsWithEveryUnused, parent)) {
                         var sourceFile = ts.getSourceFileOfNode(parent);
                         var range = ts.isJSDocTemplateTag(parent)
@@ -76838,12 +78259,14 @@
                             // Include the `<>` in the error message
                             : ts.rangeOfTypeParameters(sourceFile, parent.typeParameters);
                         var only = parent.typeParameters.length === 1;
+                        //TODO: following line is possible reason for bug #41974, unusedTypeParameters_TemplateTag
                         var message = only ? ts.Diagnostics._0_is_declared_but_its_value_is_never_read : ts.Diagnostics.All_type_parameters_are_unused;
                         var arg0 = only ? name : undefined;
                         addDiagnostic(typeParameter, 1 /* Parameter */, ts.createFileDiagnostic(sourceFile, range.pos, range.end - range.pos, message, arg0));
                     }
                 }
                 else {
+                    //TODO: following line is possible reason for bug #41974, unusedTypeParameters_TemplateTag
                     addDiagnostic(typeParameter, 1 /* Parameter */, ts.createDiagnosticForNode(typeParameter, ts.Diagnostics._0_is_declared_but_its_value_is_never_read, name));
                 }
             }
@@ -76933,7 +78356,7 @@
                 var importDecl = importClause.parent;
                 var nDeclarations = (importClause.name ? 1 : 0) +
                     (importClause.namedBindings ?
-                        (importClause.namedBindings.kind === 264 /* NamespaceImport */ ? 1 : importClause.namedBindings.elements.length)
+                        (importClause.namedBindings.kind === 266 /* NamespaceImport */ ? 1 : importClause.namedBindings.elements.length)
                         : 0);
                 if (nDeclarations === unuseds.length) {
                     addDiagnostic(importDecl, 0 /* Local */, unuseds.length === 1
@@ -76951,7 +78374,7 @@
                 var bindingPattern = _a[0], bindingElements = _a[1];
                 var kind = tryGetRootParameterDeclaration(bindingPattern.parent) ? 1 /* Parameter */ : 0 /* Local */;
                 if (bindingPattern.elements.length === bindingElements.length) {
-                    if (bindingElements.length === 1 && bindingPattern.parent.kind === 250 /* VariableDeclaration */ && bindingPattern.parent.parent.kind === 251 /* VariableDeclarationList */) {
+                    if (bindingElements.length === 1 && bindingPattern.parent.kind === 252 /* VariableDeclaration */ && bindingPattern.parent.parent.kind === 253 /* VariableDeclarationList */) {
                         addToGroup(unusedVariables, bindingPattern.parent.parent, bindingPattern.parent, getNodeId);
                     }
                     else {
@@ -76972,7 +78395,7 @@
                 if (declarationList.declarations.length === declarations.length) {
                     addDiagnostic(declarationList, 0 /* Local */, declarations.length === 1
                         ? ts.createDiagnosticForNode(ts.first(declarations).name, ts.Diagnostics._0_is_declared_but_its_value_is_never_read, bindingNameText(ts.first(declarations).name))
-                        : ts.createDiagnosticForNode(declarationList.parent.kind === 233 /* VariableStatement */ ? declarationList.parent : declarationList, ts.Diagnostics.All_variables_are_unused));
+                        : ts.createDiagnosticForNode(declarationList.parent.kind === 235 /* VariableStatement */ ? declarationList.parent : declarationList, ts.Diagnostics.All_variables_are_unused));
                 }
                 else {
                     for (var _i = 0, declarations_5 = declarations; _i < declarations_5.length; _i++) {
@@ -76984,24 +78407,24 @@
         }
         function bindingNameText(name) {
             switch (name.kind) {
-                case 78 /* Identifier */:
+                case 79 /* Identifier */:
                     return ts.idText(name);
-                case 198 /* ArrayBindingPattern */:
-                case 197 /* ObjectBindingPattern */:
+                case 200 /* ArrayBindingPattern */:
+                case 199 /* ObjectBindingPattern */:
                     return bindingNameText(ts.cast(ts.first(name.elements), ts.isBindingElement).name);
                 default:
                     return ts.Debug.assertNever(name);
             }
         }
         function isImportedDeclaration(node) {
-            return node.kind === 263 /* ImportClause */ || node.kind === 266 /* ImportSpecifier */ || node.kind === 264 /* NamespaceImport */;
+            return node.kind === 265 /* ImportClause */ || node.kind === 268 /* ImportSpecifier */ || node.kind === 266 /* NamespaceImport */;
         }
         function importClauseFromImported(decl) {
-            return decl.kind === 263 /* ImportClause */ ? decl : decl.kind === 264 /* NamespaceImport */ ? decl.parent : decl.parent.parent;
+            return decl.kind === 265 /* ImportClause */ ? decl : decl.kind === 266 /* NamespaceImport */ ? decl.parent : decl.parent.parent;
         }
         function checkBlock(node) {
             // Grammar checking for SyntaxKind.Block
-            if (node.kind === 231 /* Block */) {
+            if (node.kind === 233 /* Block */) {
                 checkGrammarStatementInAmbientContext(node);
             }
             if (ts.isFunctionOrModuleBlock(node)) {
@@ -77027,25 +78450,37 @@
                 }
             });
         }
+        /**
+         * Checks whether an {@link Identifier}, in the context of another {@link Node}, would collide with a runtime value
+         * of {@link name} in an outer scope. This is used to check for collisions for downlevel transformations that
+         * require names like `Object`, `Promise`, `Reflect`, `require`, `exports`, etc.
+         */
         function needCollisionCheckForIdentifier(node, identifier, name) {
-            if (!(identifier && identifier.escapedText === name)) {
+            if ((identifier === null || identifier === void 0 ? void 0 : identifier.escapedText) !== name) {
                 return false;
             }
-            if (node.kind === 164 /* PropertyDeclaration */ ||
-                node.kind === 163 /* PropertySignature */ ||
-                node.kind === 166 /* MethodDeclaration */ ||
-                node.kind === 165 /* MethodSignature */ ||
-                node.kind === 168 /* GetAccessor */ ||
-                node.kind === 169 /* SetAccessor */) {
-                // it is ok to have member named '_super' or '_this' - member access is always qualified
+            if (node.kind === 165 /* PropertyDeclaration */ ||
+                node.kind === 164 /* PropertySignature */ ||
+                node.kind === 167 /* MethodDeclaration */ ||
+                node.kind === 166 /* MethodSignature */ ||
+                node.kind === 170 /* GetAccessor */ ||
+                node.kind === 171 /* SetAccessor */ ||
+                node.kind === 291 /* PropertyAssignment */) {
+                // it is ok to have member named '_super', '_this', `Promise`, etc. - member access is always qualified
                 return false;
             }
             if (node.flags & 8388608 /* Ambient */) {
                 // ambient context - no codegen impact
                 return false;
             }
+            if (ts.isImportClause(node) || ts.isImportEqualsDeclaration(node) || ts.isImportSpecifier(node)) {
+                // type-only imports do not require collision checks against runtime values.
+                if (ts.isTypeOnlyImportOrExportDeclaration(node)) {
+                    return false;
+                }
+            }
             var root = ts.getRootDeclaration(node);
-            if (root.kind === 161 /* Parameter */ && ts.nodeIsMissing(root.parent.body)) {
+            if (ts.isParameter(root) && ts.nodeIsMissing(root.parent.body)) {
                 // just an overload - no codegen impact
                 return false;
             }
@@ -77055,7 +78490,7 @@
         function checkIfThisIsCapturedInEnclosingScope(node) {
             ts.findAncestor(node, function (current) {
                 if (getNodeCheckFlags(current) & 4 /* CaptureThis */) {
-                    var isDeclaration_1 = node.kind !== 78 /* Identifier */;
+                    var isDeclaration_1 = node.kind !== 79 /* Identifier */;
                     if (isDeclaration_1) {
                         error(ts.getNameOfDeclaration(node), ts.Diagnostics.Duplicate_identifier_this_Compiler_uses_variable_declaration_this_to_capture_this_reference);
                     }
@@ -77070,7 +78505,7 @@
         function checkIfNewTargetIsCapturedInEnclosingScope(node) {
             ts.findAncestor(node, function (current) {
                 if (getNodeCheckFlags(current) & 8 /* CaptureNewTarget */) {
-                    var isDeclaration_2 = node.kind !== 78 /* Identifier */;
+                    var isDeclaration_2 = node.kind !== 79 /* Identifier */;
                     if (isDeclaration_2) {
                         error(ts.getNameOfDeclaration(node), ts.Diagnostics.Duplicate_identifier_newTarget_Compiler_uses_variable_declaration_newTarget_to_capture_new_target_meta_property_reference);
                     }
@@ -77082,6 +78517,46 @@
                 return false;
             });
         }
+        function checkCollisionWithRequireExportsInGeneratedCode(node, name) {
+            // No need to check for require or exports for ES6 modules and later
+            if (moduleKind >= ts.ModuleKind.ES2015) {
+                return;
+            }
+            if (!name || !needCollisionCheckForIdentifier(node, name, "require") && !needCollisionCheckForIdentifier(node, name, "exports")) {
+                return;
+            }
+            // Uninstantiated modules shouldnt do this check
+            if (ts.isModuleDeclaration(node) && ts.getModuleInstanceState(node) !== 1 /* Instantiated */) {
+                return;
+            }
+            // In case of variable declaration, node.parent is variable statement so look at the variable statement's parent
+            var parent = getDeclarationContainer(node);
+            if (parent.kind === 300 /* SourceFile */ && ts.isExternalOrCommonJsModule(parent)) {
+                // If the declaration happens to be in external module, report error that require and exports are reserved keywords
+                errorSkippedOn("noEmit", name, ts.Diagnostics.Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module, ts.declarationNameToString(name), ts.declarationNameToString(name));
+            }
+        }
+        function checkCollisionWithGlobalPromiseInGeneratedCode(node, name) {
+            if (!name || languageVersion >= 4 /* ES2017 */ || !needCollisionCheckForIdentifier(node, name, "Promise")) {
+                return;
+            }
+            // Uninstantiated modules shouldnt do this check
+            if (ts.isModuleDeclaration(node) && ts.getModuleInstanceState(node) !== 1 /* Instantiated */) {
+                return;
+            }
+            // In case of variable declaration, node.parent is variable statement so look at the variable statement's parent
+            var parent = getDeclarationContainer(node);
+            if (parent.kind === 300 /* SourceFile */ && ts.isExternalOrCommonJsModule(parent) && parent.flags & 2048 /* HasAsyncFunctions */) {
+                // If the declaration happens to be in external module, report error that Promise is a reserved identifier.
+                errorSkippedOn("noEmit", name, ts.Diagnostics.Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module_containing_async_functions, ts.declarationNameToString(name), ts.declarationNameToString(name));
+            }
+        }
+        function recordPotentialCollisionWithWeakMapSetInGeneratedCode(node, name) {
+            if (languageVersion <= 8 /* ES2021 */
+                && (needCollisionCheckForIdentifier(node, name, "WeakMap") || needCollisionCheckForIdentifier(node, name, "WeakSet"))) {
+                potentialWeakMapSetCollisions.push(node);
+            }
+        }
         function checkWeakMapSetCollision(node) {
             var enclosingBlockScope = ts.getEnclosingBlockScopeContainer(node);
             if (getNodeCheckFlags(enclosingBlockScope) & 67108864 /* ContainsClassWithPrivateIdentifiers */) {
@@ -77089,38 +78564,56 @@
                 errorSkippedOn("noEmit", node, ts.Diagnostics.Compiler_reserves_name_0_when_emitting_private_identifier_downlevel, node.name.escapedText);
             }
         }
-        function checkCollisionWithRequireExportsInGeneratedCode(node, name) {
-            // No need to check for require or exports for ES6 modules and later
-            if (moduleKind >= ts.ModuleKind.ES2015) {
-                return;
-            }
-            if (!needCollisionCheckForIdentifier(node, name, "require") && !needCollisionCheckForIdentifier(node, name, "exports")) {
-                return;
-            }
-            // Uninstantiated modules shouldnt do this check
-            if (ts.isModuleDeclaration(node) && ts.getModuleInstanceState(node) !== 1 /* Instantiated */) {
-                return;
-            }
-            // In case of variable declaration, node.parent is variable statement so look at the variable statement's parent
-            var parent = getDeclarationContainer(node);
-            if (parent.kind === 298 /* SourceFile */ && ts.isExternalOrCommonJsModule(parent)) {
-                // If the declaration happens to be in external module, report error that require and exports are reserved keywords
-                errorSkippedOn("noEmit", name, ts.Diagnostics.Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module, ts.declarationNameToString(name), ts.declarationNameToString(name));
+        function recordPotentialCollisionWithReflectInGeneratedCode(node, name) {
+            if (name && languageVersion >= 2 /* ES2015 */ && languageVersion <= 8 /* ES2021 */
+                && needCollisionCheckForIdentifier(node, name, "Reflect")) {
+                potentialReflectCollisions.push(node);
             }
         }
-        function checkCollisionWithGlobalPromiseInGeneratedCode(node, name) {
-            if (languageVersion >= 4 /* ES2017 */ || !needCollisionCheckForIdentifier(node, name, "Promise")) {
-                return;
+        function checkReflectCollision(node) {
+            var hasCollision = false;
+            if (ts.isClassExpression(node)) {
+                // ClassExpression names don't contribute to their containers, but do matter for any of their block-scoped members.
+                for (var _i = 0, _a = node.members; _i < _a.length; _i++) {
+                    var member = _a[_i];
+                    if (getNodeCheckFlags(member) & 134217728 /* ContainsSuperPropertyInStaticInitializer */) {
+                        hasCollision = true;
+                        break;
+                    }
+                }
             }
-            // Uninstantiated modules shouldnt do this check
-            if (ts.isModuleDeclaration(node) && ts.getModuleInstanceState(node) !== 1 /* Instantiated */) {
-                return;
+            else if (ts.isFunctionExpression(node)) {
+                // FunctionExpression names don't contribute to their containers, but do matter for their contents
+                if (getNodeCheckFlags(node) & 134217728 /* ContainsSuperPropertyInStaticInitializer */) {
+                    hasCollision = true;
+                }
             }
-            // In case of variable declaration, node.parent is variable statement so look at the variable statement's parent
-            var parent = getDeclarationContainer(node);
-            if (parent.kind === 298 /* SourceFile */ && ts.isExternalOrCommonJsModule(parent) && parent.flags & 2048 /* HasAsyncFunctions */) {
-                // If the declaration happens to be in external module, report error that Promise is a reserved identifier.
-                errorSkippedOn("noEmit", name, ts.Diagnostics.Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module_containing_async_functions, ts.declarationNameToString(name), ts.declarationNameToString(name));
+            else {
+                var container = ts.getEnclosingBlockScopeContainer(node);
+                if (container && getNodeCheckFlags(container) & 134217728 /* ContainsSuperPropertyInStaticInitializer */) {
+                    hasCollision = true;
+                }
+            }
+            if (hasCollision) {
+                ts.Debug.assert(ts.isNamedDeclaration(node) && ts.isIdentifier(node.name), "The target of a Reflect collision check should be an identifier");
+                errorSkippedOn("noEmit", node, ts.Diagnostics.Duplicate_identifier_0_Compiler_reserves_name_1_when_emitting_super_references_in_static_initializers, ts.declarationNameToString(node.name), "Reflect");
+            }
+        }
+        function checkCollisionsForDeclarationName(node, name) {
+            if (!name)
+                return;
+            checkCollisionWithRequireExportsInGeneratedCode(node, name);
+            checkCollisionWithGlobalPromiseInGeneratedCode(node, name);
+            recordPotentialCollisionWithWeakMapSetInGeneratedCode(node, name);
+            recordPotentialCollisionWithReflectInGeneratedCode(node, name);
+            if (ts.isClassLike(node)) {
+                checkTypeNameIsReserved(name, ts.Diagnostics.Class_name_cannot_be_0);
+                if (!(node.flags & 8388608 /* Ambient */)) {
+                    checkClassNameCollisionWithObject(name);
+                }
+            }
+            else if (ts.isEnumDeclaration(node)) {
+                checkTypeNameIsReserved(name, ts.Diagnostics.Enum_name_cannot_be_0);
             }
         }
         function checkVarDeclaredNamesNotShadowed(node) {
@@ -77153,7 +78646,7 @@
             // skip variable declarations that don't have initializers
             // NOTE: in ES6 spec initializer is required in variable declarations where name is binding pattern
             // so we'll always treat binding elements as initialized
-            if (node.kind === 250 /* VariableDeclaration */ && !node.initializer) {
+            if (node.kind === 252 /* VariableDeclaration */ && !node.initializer) {
                 return;
             }
             var symbol = getSymbolOfNode(node);
@@ -77165,17 +78658,17 @@
                     localDeclarationSymbol !== symbol &&
                     localDeclarationSymbol.flags & 2 /* BlockScopedVariable */) {
                     if (getDeclarationNodeFlagsFromSymbol(localDeclarationSymbol) & 3 /* BlockScoped */) {
-                        var varDeclList = ts.getAncestor(localDeclarationSymbol.valueDeclaration, 251 /* VariableDeclarationList */);
-                        var container = varDeclList.parent.kind === 233 /* VariableStatement */ && varDeclList.parent.parent
+                        var varDeclList = ts.getAncestor(localDeclarationSymbol.valueDeclaration, 253 /* VariableDeclarationList */);
+                        var container = varDeclList.parent.kind === 235 /* VariableStatement */ && varDeclList.parent.parent
                             ? varDeclList.parent.parent
                             : undefined;
                         // names of block-scoped and function scoped variables can collide only
                         // if block scoped variable is defined in the function\module\source file scope (because of variable hoisting)
                         var namesShareScope = container &&
-                            (container.kind === 231 /* Block */ && ts.isFunctionLike(container.parent) ||
-                                container.kind === 258 /* ModuleBlock */ ||
-                                container.kind === 257 /* ModuleDeclaration */ ||
-                                container.kind === 298 /* SourceFile */);
+                            (container.kind === 233 /* Block */ && ts.isFunctionLike(container.parent) ||
+                                container.kind === 260 /* ModuleBlock */ ||
+                                container.kind === 259 /* ModuleDeclaration */ ||
+                                container.kind === 300 /* SourceFile */);
                         // here we know that function scoped variable is shadowed by block scoped one
                         // if they are defined in the same scope - binder has already reported redeclaration error
                         // otherwise if variable has an initializer - show error that initialization will fail
@@ -77206,7 +78699,7 @@
             // Do not use hasDynamicName here, because that returns false for well known symbols.
             // We want to perform checkComputedPropertyName for all computed properties, including
             // well known symbols.
-            if (node.name.kind === 159 /* ComputedPropertyName */) {
+            if (node.name.kind === 160 /* ComputedPropertyName */) {
                 checkComputedPropertyName(node.name);
                 if (node.initializer) {
                     checkExpressionCached(node.initializer);
@@ -77217,7 +78710,7 @@
                     checkExternalEmitHelpers(node, 4 /* Rest */);
                 }
                 // check computed properties inside property names of binding elements
-                if (node.propertyName && node.propertyName.kind === 159 /* ComputedPropertyName */) {
+                if (node.propertyName && node.propertyName.kind === 160 /* ComputedPropertyName */) {
                     checkComputedPropertyName(node.propertyName);
                 }
                 // check private/protected variable access
@@ -77231,14 +78724,14 @@
                         var property = getPropertyOfType(parentType, nameText);
                         if (property) {
                             markPropertyAsReferenced(property, /*nodeForCheckWriteOnly*/ undefined, /*isSelfTypeAccess*/ false); // A destructuring is never a write-only reference.
-                            checkPropertyAccessibility(node, !!parent.initializer && parent.initializer.kind === 105 /* SuperKeyword */, /*writing*/ false, parentType, property);
+                            checkPropertyAccessibility(node, !!parent.initializer && parent.initializer.kind === 106 /* SuperKeyword */, /*writing*/ false, parentType, property);
                         }
                     }
                 }
             }
             // For a binding pattern, check contained binding elements
             if (ts.isBindingPattern(node.name)) {
-                if (node.name.kind === 198 /* ArrayBindingPattern */ && languageVersion < 2 /* ES2015 */ && compilerOptions.downlevelIteration) {
+                if (node.name.kind === 200 /* ArrayBindingPattern */ && languageVersion < 2 /* ES2015 */ && compilerOptions.downlevelIteration) {
                     checkExternalEmitHelpers(node, 512 /* Read */);
                 }
                 ts.forEach(node.name.elements, checkSourceElement);
@@ -77250,7 +78743,7 @@
             }
             // For a binding pattern, validate the initializer and exit
             if (ts.isBindingPattern(node.name)) {
-                var needCheckInitializer = node.initializer && node.parent.parent.kind !== 239 /* ForInStatement */;
+                var needCheckInitializer = node.initializer && node.parent.parent.kind !== 241 /* ForInStatement */;
                 var needCheckWidenedType = node.name.elements.length === 0;
                 if (needCheckInitializer || needCheckWidenedType) {
                     // Don't validate for-in initializer as it is already an error
@@ -77292,7 +78785,7 @@
                         ts.isObjectLiteralExpression(initializer) &&
                         (initializer.properties.length === 0 || ts.isPrototypeAccess(node.name)) &&
                         !!((_a = symbol.exports) === null || _a === void 0 ? void 0 : _a.size);
-                    if (!isJSObjectLiteralInitializer && node.parent.parent.kind !== 239 /* ForInStatement */) {
+                    if (!isJSObjectLiteralInitializer && node.parent.parent.kind !== 241 /* ForInStatement */) {
                         checkTypeAssignableToAndOptionallyElaborate(checkExpressionCached(initializer), type, node, initializer, /*headMessage*/ undefined);
                     }
                 }
@@ -77318,23 +78811,18 @@
                     error(node.name, ts.Diagnostics.All_declarations_of_0_must_have_identical_modifiers, ts.declarationNameToString(node.name));
                 }
             }
-            if (node.kind !== 164 /* PropertyDeclaration */ && node.kind !== 163 /* PropertySignature */) {
+            if (node.kind !== 165 /* PropertyDeclaration */ && node.kind !== 164 /* PropertySignature */) {
                 // We know we don't have a binding pattern or computed name here
                 checkExportsOnMergedDeclarations(node);
-                if (node.kind === 250 /* VariableDeclaration */ || node.kind === 199 /* BindingElement */) {
+                if (node.kind === 252 /* VariableDeclaration */ || node.kind === 201 /* BindingElement */) {
                     checkVarDeclaredNamesNotShadowed(node);
                 }
-                checkCollisionWithRequireExportsInGeneratedCode(node, node.name);
-                checkCollisionWithGlobalPromiseInGeneratedCode(node, node.name);
-                if (languageVersion < 99 /* ESNext */
-                    && (needCollisionCheckForIdentifier(node, node.name, "WeakMap") || needCollisionCheckForIdentifier(node, node.name, "WeakSet"))) {
-                    potentialWeakMapSetCollisions.push(node);
-                }
+                checkCollisionsForDeclarationName(node, node.name);
             }
         }
         function errorNextVariableOrPropertyDeclarationMustHaveSameType(firstDeclaration, firstType, nextDeclaration, nextType) {
             var nextDeclarationName = ts.getNameOfDeclaration(nextDeclaration);
-            var message = nextDeclaration.kind === 164 /* PropertyDeclaration */ || nextDeclaration.kind === 163 /* PropertySignature */
+            var message = nextDeclaration.kind === 165 /* PropertyDeclaration */ || nextDeclaration.kind === 164 /* PropertySignature */
                 ? ts.Diagnostics.Subsequent_property_declarations_must_have_the_same_type_Property_0_must_be_of_type_1_but_here_has_type_2
                 : ts.Diagnostics.Subsequent_variable_declarations_must_have_the_same_type_Variable_0_must_be_of_type_1_but_here_has_type_2;
             var declName = ts.declarationNameToString(nextDeclarationName);
@@ -77344,8 +78832,8 @@
             }
         }
         function areDeclarationFlagsIdentical(left, right) {
-            if ((left.kind === 161 /* Parameter */ && right.kind === 250 /* VariableDeclaration */) ||
-                (left.kind === 250 /* VariableDeclaration */ && right.kind === 161 /* Parameter */)) {
+            if ((left.kind === 162 /* Parameter */ && right.kind === 252 /* VariableDeclaration */) ||
+                (left.kind === 252 /* VariableDeclaration */ && right.kind === 162 /* Parameter */)) {
                 // Differences in optionality between parameters and variables are allowed.
                 return true;
             }
@@ -77387,7 +78875,7 @@
             var type = checkTruthinessExpression(node.expression);
             checkTestingKnownTruthyCallableOrAwaitableType(node.expression, type, node.thenStatement);
             checkSourceElement(node.thenStatement);
-            if (node.thenStatement.kind === 232 /* EmptyStatement */) {
+            if (node.thenStatement.kind === 234 /* EmptyStatement */) {
                 error(node.thenStatement, ts.Diagnostics.The_body_of_an_if_statement_cannot_be_the_empty_statement);
             }
             checkSourceElement(node.elseStatement);
@@ -77398,15 +78886,13 @@
             if (getFalsyFlags(type))
                 return;
             var location = ts.isBinaryExpression(condExpr) ? condExpr.right : condExpr;
+            if (ts.isPropertyAccessExpression(location) && ts.isAssertionExpression(ts.skipParentheses(location.expression))) {
+                return;
+            }
             var testedNode = ts.isIdentifier(location) ? location
                 : ts.isPropertyAccessExpression(location) ? location.name
                     : ts.isBinaryExpression(location) && ts.isIdentifier(location.right) ? location.right
                         : undefined;
-            var isPropertyExpressionCast = ts.isPropertyAccessExpression(location)
-                && ts.isAssertionExpression(ts.skipParentheses(location.expression));
-            if (!testedNode || isPropertyExpressionCast) {
-                return;
-            }
             // While it technically should be invalid for any known-truthy value
             // to be tested, we de-scope to functions and Promises unreferenced in
             // the block as a heuristic to identify the most common bugs. There
@@ -77417,12 +78903,12 @@
             if (callSignatures.length === 0 && !isPromise) {
                 return;
             }
-            var testedSymbol = getSymbolAtLocation(testedNode);
-            if (!testedSymbol) {
+            var testedSymbol = testedNode && getSymbolAtLocation(testedNode);
+            if (!testedSymbol && !isPromise) {
                 return;
             }
-            var isUsed = ts.isBinaryExpression(condExpr.parent) && isSymbolUsedInBinaryExpressionChain(condExpr.parent, testedSymbol)
-                || body && isSymbolUsedInConditionBody(condExpr, body, testedNode, testedSymbol);
+            var isUsed = testedSymbol && ts.isBinaryExpression(condExpr.parent) && isSymbolUsedInBinaryExpressionChain(condExpr.parent, testedSymbol)
+                || testedSymbol && body && isSymbolUsedInConditionBody(condExpr, body, testedNode, testedSymbol);
             if (!isUsed) {
                 if (isPromise) {
                     errorAndMaybeSuggestAwait(location, 
@@ -77447,7 +78933,7 @@
                         var childExpression = childNode.parent;
                         while (testedExpression && childExpression) {
                             if (ts.isIdentifier(testedExpression) && ts.isIdentifier(childExpression) ||
-                                testedExpression.kind === 107 /* ThisKeyword */ && childExpression.kind === 107 /* ThisKeyword */) {
+                                testedExpression.kind === 108 /* ThisKeyword */ && childExpression.kind === 108 /* ThisKeyword */) {
                                 return getSymbolAtLocation(testedExpression) === getSymbolAtLocation(childExpression);
                             }
                             else if (ts.isPropertyAccessExpression(testedExpression) && ts.isPropertyAccessExpression(childExpression)) {
@@ -77512,12 +78998,12 @@
         function checkForStatement(node) {
             // Grammar checking
             if (!checkGrammarStatementInAmbientContext(node)) {
-                if (node.initializer && node.initializer.kind === 251 /* VariableDeclarationList */) {
+                if (node.initializer && node.initializer.kind === 253 /* VariableDeclarationList */) {
                     checkGrammarVariableDeclarationList(node.initializer);
                 }
             }
             if (node.initializer) {
-                if (node.initializer.kind === 251 /* VariableDeclarationList */) {
+                if (node.initializer.kind === 253 /* VariableDeclarationList */) {
                     ts.forEach(node.initializer.declarations, checkVariableDeclaration);
                 }
                 else {
@@ -77535,11 +79021,17 @@
         }
         function checkForOfStatement(node) {
             checkGrammarForInOrForOfStatement(node);
+            var container = ts.getContainingFunctionOrClassStaticBlock(node);
             if (node.awaitModifier) {
-                var functionFlags = ts.getFunctionFlags(ts.getContainingFunction(node));
-                if ((functionFlags & (4 /* Invalid */ | 2 /* Async */)) === 2 /* Async */ && languageVersion < 99 /* ESNext */) {
-                    // for..await..of in an async function or async generator function prior to ESNext requires the __asyncValues helper
-                    checkExternalEmitHelpers(node, 16384 /* ForAwaitOfIncludes */);
+                if (container && ts.isClassStaticBlockDeclaration(container)) {
+                    grammarErrorOnNode(node.awaitModifier, ts.Diagnostics.For_await_loops_cannot_be_used_inside_a_class_static_block);
+                }
+                else {
+                    var functionFlags = ts.getFunctionFlags(container);
+                    if ((functionFlags & (4 /* Invalid */ | 2 /* Async */)) === 2 /* Async */ && languageVersion < 99 /* ESNext */) {
+                        // for..await..of in an async function or async generator function prior to ESNext requires the __asyncValues helper
+                        checkExternalEmitHelpers(node, 16384 /* ForAwaitOfIncludes */);
+                    }
                 }
             }
             else if (compilerOptions.downlevelIteration && languageVersion < 2 /* ES2015 */) {
@@ -77551,14 +79043,14 @@
             // via checkRightHandSideOfForOf.
             // If the LHS is an expression, check the LHS, as a destructuring assignment or as a reference.
             // Then check that the RHS is assignable to it.
-            if (node.initializer.kind === 251 /* VariableDeclarationList */) {
+            if (node.initializer.kind === 253 /* VariableDeclarationList */) {
                 checkForInOrForOfVariableDeclaration(node);
             }
             else {
                 var varExpr = node.initializer;
                 var iteratedType = checkRightHandSideOfForOf(node);
                 // There may be a destructuring assignment on the left side
-                if (varExpr.kind === 200 /* ArrayLiteralExpression */ || varExpr.kind === 201 /* ObjectLiteralExpression */) {
+                if (varExpr.kind === 202 /* ArrayLiteralExpression */ || varExpr.kind === 203 /* ObjectLiteralExpression */) {
                     // iteratedType may be undefined. In this case, we still want to check the structure of
                     // varExpr, in particular making sure it's a valid LeftHandSideExpression. But we'd like
                     // to short circuit the type relation checking as much as possible, so we pass the unknownType.
@@ -77590,7 +79082,7 @@
             // for (let VarDecl in Expr) Statement
             //   VarDecl must be a variable declaration without a type annotation that declares a variable of type Any,
             //   and Expr must be an expression of type Any, an object type, or a type parameter type.
-            if (node.initializer.kind === 251 /* VariableDeclarationList */) {
+            if (node.initializer.kind === 253 /* VariableDeclarationList */) {
                 var variable = node.initializer.declarations[0];
                 if (variable && ts.isBindingPattern(variable.name)) {
                     error(variable.name, ts.Diagnostics.The_left_hand_side_of_a_for_in_statement_cannot_be_a_destructuring_pattern);
@@ -77604,7 +79096,7 @@
                 //   and Expr must be an expression of type Any, an object type, or a type parameter type.
                 var varExpr = node.initializer;
                 var leftType = checkExpression(varExpr);
-                if (varExpr.kind === 200 /* ArrayLiteralExpression */ || varExpr.kind === 201 /* ObjectLiteralExpression */) {
+                if (varExpr.kind === 202 /* ArrayLiteralExpression */ || varExpr.kind === 203 /* ObjectLiteralExpression */) {
                     error(varExpr, ts.Diagnostics.The_left_hand_side_of_a_for_in_statement_cannot_be_a_destructuring_pattern);
                 }
                 else if (!isTypeAssignableTo(getIndexTypeOrString(rightType), leftType)) {
@@ -77726,7 +79218,7 @@
                 }
                 return hasStringConstituent ? possibleOutOfBounds ? includeUndefinedInIndexSignature(stringType) : stringType : undefined;
             }
-            var arrayElementType = getIndexTypeOfType(arrayType, 1 /* Number */);
+            var arrayElementType = getIndexTypeOfType(arrayType, numberType);
             if (hasStringConstituent && arrayElementType) {
                 // This is just an optimization for the case where arrayOrStringType is string | string[]
                 if (arrayElementType.flags & 402653316 /* StringLike */ && !compilerOptions.noUncheckedIndexedAccess) {
@@ -77815,8 +79307,8 @@
             var yieldTypes;
             var returnTypes;
             var nextTypes;
-            for (var _i = 0, array_10 = array; _i < array_10.length; _i++) {
-                var iterationTypes = array_10[_i];
+            for (var _i = 0, array_11 = array; _i < array_11.length; _i++) {
+                var iterationTypes = array_11[_i];
                 if (iterationTypes === undefined || iterationTypes === noIterationTypes) {
                     continue;
                 }
@@ -78318,27 +79810,31 @@
             if (checkGrammarStatementInAmbientContext(node)) {
                 return;
             }
-            var func = ts.getContainingFunction(node);
-            if (!func) {
+            var container = ts.getContainingFunctionOrClassStaticBlock(node);
+            if (container && ts.isClassStaticBlockDeclaration(container)) {
+                grammarErrorOnFirstToken(node, ts.Diagnostics.A_return_statement_cannot_be_used_inside_a_class_static_block);
+                return;
+            }
+            if (!container) {
                 grammarErrorOnFirstToken(node, ts.Diagnostics.A_return_statement_can_only_be_used_within_a_function_body);
                 return;
             }
-            var signature = getSignatureFromDeclaration(func);
+            var signature = getSignatureFromDeclaration(container);
             var returnType = getReturnTypeOfSignature(signature);
-            var functionFlags = ts.getFunctionFlags(func);
+            var functionFlags = ts.getFunctionFlags(container);
             if (strictNullChecks || node.expression || returnType.flags & 131072 /* Never */) {
                 var exprType = node.expression ? checkExpressionCached(node.expression) : undefinedType;
-                if (func.kind === 169 /* SetAccessor */) {
+                if (container.kind === 171 /* SetAccessor */) {
                     if (node.expression) {
                         error(node, ts.Diagnostics.Setters_cannot_return_a_value);
                     }
                 }
-                else if (func.kind === 167 /* Constructor */) {
+                else if (container.kind === 169 /* Constructor */) {
                     if (node.expression && !checkTypeAssignableToAndOptionallyElaborate(exprType, returnType, node, node.expression)) {
                         error(node, ts.Diagnostics.Return_type_of_constructor_signature_must_be_assignable_to_the_instance_type_of_the_class);
                     }
                 }
-                else if (getReturnTypeFromAnnotation(func)) {
+                else if (getReturnTypeFromAnnotation(container)) {
                     var unwrappedReturnType = (_a = unwrapReturnType(returnType, functionFlags)) !== null && _a !== void 0 ? _a : returnType;
                     var unwrappedExprType = functionFlags & 2 /* Async */
                         ? checkAwaitedType(exprType, node, ts.Diagnostics.The_return_type_of_an_async_function_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member)
@@ -78351,7 +79847,7 @@
                     }
                 }
             }
-            else if (func.kind !== 167 /* Constructor */ && compilerOptions.noImplicitReturns && !isUnwrappedReturnTypeVoidOrAny(func, returnType)) {
+            else if (container.kind !== 169 /* Constructor */ && compilerOptions.noImplicitReturns && !isUnwrappedReturnTypeVoidOrAny(container, returnType)) {
                 // The function has a return type, but the return statement doesn't have an expression.
                 error(node, ts.Diagnostics.Not_all_code_paths_return_a_value);
             }
@@ -78380,7 +79876,7 @@
             var expressionIsLiteral = isLiteralType(expressionType);
             ts.forEach(node.caseBlock.clauses, function (clause) {
                 // Grammar check for duplicate default clauses, skip if we already report duplicate default clause
-                if (clause.kind === 286 /* DefaultClause */ && !hasDuplicateDefaultClause) {
+                if (clause.kind === 288 /* DefaultClause */ && !hasDuplicateDefaultClause) {
                     if (firstDefaultClause === undefined) {
                         firstDefaultClause = clause;
                     }
@@ -78389,7 +79885,7 @@
                         hasDuplicateDefaultClause = true;
                     }
                 }
-                if (produceDiagnostics && clause.kind === 285 /* CaseClause */) {
+                if (produceDiagnostics && clause.kind === 287 /* CaseClause */) {
                     // TypeScript 1.0 spec (April 2014): 5.9
                     // In a 'switch' statement, each 'case' expression must be of a type that is comparable
                     // to or from the type of the 'switch' expression.
@@ -78421,7 +79917,7 @@
                     if (ts.isFunctionLike(current)) {
                         return "quit";
                     }
-                    if (current.kind === 246 /* LabeledStatement */ && current.label.escapedText === node.label.escapedText) {
+                    if (current.kind === 248 /* LabeledStatement */ && current.label.escapedText === node.label.escapedText) {
                         grammarErrorOnNode(node.label, ts.Diagnostics.Duplicate_label_0, ts.getTextOfNode(node.label));
                         return true;
                     }
@@ -78479,87 +79975,83 @@
                 checkBlock(node.finallyBlock);
             }
         }
-        function checkIndexConstraints(type, isStatic) {
-            var _a, _b, _c, _d;
-            var declaredNumberIndexer = getIndexDeclarationOfSymbolTable(isStatic ? (_a = type.symbol) === null || _a === void 0 ? void 0 : _a.exports : (_b = type.symbol) === null || _b === void 0 ? void 0 : _b.members, 1 /* Number */);
-            var declaredStringIndexer = getIndexDeclarationOfSymbolTable(isStatic ? (_c = type.symbol) === null || _c === void 0 ? void 0 : _c.exports : (_d = type.symbol) === null || _d === void 0 ? void 0 : _d.members, 0 /* String */);
-            var stringIndexType = getIndexTypeOfType(type, 0 /* String */);
-            var numberIndexType = getIndexTypeOfType(type, 1 /* Number */);
-            if (stringIndexType || numberIndexType) {
-                ts.forEach(getPropertiesOfObjectType(type), function (prop) {
-                    if (isStatic && prop.flags & 4194304 /* Prototype */)
-                        return;
-                    var propType = getTypeOfSymbol(prop);
-                    checkIndexConstraintForProperty(prop, propType, type, declaredStringIndexer, stringIndexType, 0 /* String */);
-                    checkIndexConstraintForProperty(prop, propType, type, declaredNumberIndexer, numberIndexType, 1 /* Number */);
-                });
-                var classDeclaration = type.symbol.valueDeclaration;
-                if (ts.getObjectFlags(type) & 1 /* Class */ && classDeclaration && ts.isClassLike(classDeclaration)) {
-                    for (var _i = 0, _e = classDeclaration.members; _i < _e.length; _i++) {
-                        var member = _e[_i];
-                        // Only process instance properties with computed names here.
-                        // Static properties cannot be in conflict with indexers,
-                        // and properties with literal names were already checked.
-                        if (!ts.hasSyntacticModifier(member, 32 /* Static */) && !hasBindableName(member)) {
-                            var symbol = getSymbolOfNode(member);
-                            var propType = getTypeOfSymbol(symbol);
-                            checkIndexConstraintForProperty(symbol, propType, type, declaredStringIndexer, stringIndexType, 0 /* String */);
-                            checkIndexConstraintForProperty(symbol, propType, type, declaredNumberIndexer, numberIndexType, 1 /* Number */);
-                        }
+        function checkIndexConstraints(type, isStaticIndex) {
+            var indexInfos = getIndexInfosOfType(type);
+            if (indexInfos.length === 0) {
+                return;
+            }
+            for (var _i = 0, _a = getPropertiesOfObjectType(type); _i < _a.length; _i++) {
+                var prop = _a[_i];
+                if (!(isStaticIndex && prop.flags & 4194304 /* Prototype */)) {
+                    checkIndexConstraintForProperty(type, prop, getLiteralTypeFromProperty(prop, 8576 /* StringOrNumberLiteralOrUnique */, /*includeNonPublic*/ true), getNonMissingTypeOfSymbol(prop));
+                }
+            }
+            var typeDeclaration = type.symbol.valueDeclaration;
+            if (typeDeclaration && ts.isClassLike(typeDeclaration)) {
+                for (var _b = 0, _c = typeDeclaration.members; _b < _c.length; _b++) {
+                    var member = _c[_b];
+                    // Only process instance properties with computed names here. Static properties cannot be in conflict with indexers,
+                    // and properties with literal names were already checked.
+                    if (!ts.isStatic(member) && !hasBindableName(member)) {
+                        var symbol = getSymbolOfNode(member);
+                        checkIndexConstraintForProperty(type, symbol, getTypeOfExpression(member.name.expression), getNonMissingTypeOfSymbol(symbol));
                     }
                 }
             }
-            var errorNode;
-            if (stringIndexType && numberIndexType) {
-                errorNode = declaredNumberIndexer || declaredStringIndexer;
-                // condition 'errorNode === undefined' may appear if types does not declare nor string neither number indexer
-                if (!errorNode && (ts.getObjectFlags(type) & 2 /* Interface */)) {
-                    var someBaseTypeHasBothIndexers = ts.forEach(getBaseTypes(type), function (base) { return getIndexTypeOfType(base, 0 /* String */) && getIndexTypeOfType(base, 1 /* Number */); });
-                    errorNode = someBaseTypeHasBothIndexers || !type.symbol.declarations ? undefined : type.symbol.declarations[0];
+            if (indexInfos.length > 1) {
+                for (var _d = 0, indexInfos_6 = indexInfos; _d < indexInfos_6.length; _d++) {
+                    var info = indexInfos_6[_d];
+                    checkIndexConstraintForIndexSignature(type, info);
                 }
             }
-            if (errorNode && !isTypeAssignableTo(numberIndexType, stringIndexType)) { // TODO: GH#18217
-                error(errorNode, ts.Diagnostics.Numeric_index_type_0_is_not_assignable_to_string_index_type_1, typeToString(numberIndexType), typeToString(stringIndexType));
+        }
+        function checkIndexConstraintForProperty(type, prop, propNameType, propType) {
+            var declaration = prop.valueDeclaration;
+            var name = ts.getNameOfDeclaration(declaration);
+            if (name && ts.isPrivateIdentifier(name)) {
+                return;
             }
-            function checkIndexConstraintForProperty(prop, propertyType, containingType, indexDeclaration, indexType, indexKind) {
-                // ESSymbol properties apply to neither string nor numeric indexers.
-                if (!indexType || ts.isKnownSymbol(prop)) {
-                    return;
+            var indexInfos = getApplicableIndexInfos(type, propNameType);
+            var interfaceDeclaration = ts.getObjectFlags(type) & 2 /* Interface */ ? ts.getDeclarationOfKind(type.symbol, 256 /* InterfaceDeclaration */) : undefined;
+            var localPropDeclaration = declaration && declaration.kind === 219 /* BinaryExpression */ ||
+                name && name.kind === 160 /* ComputedPropertyName */ || getParentOfSymbol(prop) === type.symbol ? declaration : undefined;
+            var _loop_27 = function (info) {
+                var localIndexDeclaration = info.declaration && getParentOfSymbol(getSymbolOfNode(info.declaration)) === type.symbol ? info.declaration : undefined;
+                // We check only when (a) the property is declared in the containing type, or (b) the applicable index signature is declared
+                // in the containing type, or (c) the containing type is an interface and no base interface contains both the property and
+                // the index signature (i.e. property and index signature are declared in separate inherited interfaces).
+                var errorNode = localPropDeclaration || localIndexDeclaration ||
+                    (interfaceDeclaration && !ts.some(getBaseTypes(type), function (base) { return !!getPropertyOfObjectType(base, prop.escapedName) && !!getIndexTypeOfType(base, info.keyType); }) ? interfaceDeclaration : undefined);
+                if (errorNode && !isTypeAssignableTo(propType, info.type)) {
+                    error(errorNode, ts.Diagnostics.Property_0_of_type_1_is_not_assignable_to_2_index_type_3, symbolToString(prop), typeToString(propType), typeToString(info.keyType), typeToString(info.type));
                 }
-                var propDeclaration = prop.valueDeclaration;
-                var name = propDeclaration && ts.getNameOfDeclaration(propDeclaration);
-                if (name && ts.isPrivateIdentifier(name)) {
-                    return;
+            };
+            for (var _i = 0, indexInfos_7 = indexInfos; _i < indexInfos_7.length; _i++) {
+                var info = indexInfos_7[_i];
+                _loop_27(info);
+            }
+        }
+        function checkIndexConstraintForIndexSignature(type, checkInfo) {
+            var declaration = checkInfo.declaration;
+            var indexInfos = getApplicableIndexInfos(type, checkInfo.keyType);
+            var interfaceDeclaration = ts.getObjectFlags(type) & 2 /* Interface */ ? ts.getDeclarationOfKind(type.symbol, 256 /* InterfaceDeclaration */) : undefined;
+            var localCheckDeclaration = declaration && getParentOfSymbol(getSymbolOfNode(declaration)) === type.symbol ? declaration : undefined;
+            var _loop_28 = function (info) {
+                if (info === checkInfo)
+                    return "continue";
+                var localIndexDeclaration = info.declaration && getParentOfSymbol(getSymbolOfNode(info.declaration)) === type.symbol ? info.declaration : undefined;
+                // We check only when (a) the check index signature is declared in the containing type, or (b) the applicable index
+                // signature is declared in the containing type, or (c) the containing type is an interface and no base interface contains
+                // both index signatures (i.e. the index signatures are declared in separate inherited interfaces).
+                var errorNode = localCheckDeclaration || localIndexDeclaration ||
+                    (interfaceDeclaration && !ts.some(getBaseTypes(type), function (base) { return !!getIndexInfoOfType(base, checkInfo.keyType) && !!getIndexTypeOfType(base, info.keyType); }) ? interfaceDeclaration : undefined);
+                if (errorNode && !isTypeAssignableTo(checkInfo.type, info.type)) {
+                    error(errorNode, ts.Diagnostics._0_index_type_1_is_not_assignable_to_2_index_type_3, typeToString(checkInfo.keyType), typeToString(checkInfo.type), typeToString(info.keyType), typeToString(info.type));
                 }
-                // index is numeric and property name is not valid numeric literal
-                if (indexKind === 1 /* Number */ && !(name ? isNumericName(name) : isNumericLiteralName(prop.escapedName))) {
-                    return;
-                }
-                // perform property check if property or indexer is declared in 'type'
-                // this allows us to rule out cases when both property and indexer are inherited from the base class
-                var errorNode;
-                if (propDeclaration && name &&
-                    (propDeclaration.kind === 217 /* BinaryExpression */ ||
-                        name.kind === 159 /* ComputedPropertyName */ ||
-                        prop.parent === containingType.symbol)) {
-                    errorNode = propDeclaration;
-                }
-                else if (indexDeclaration) {
-                    errorNode = indexDeclaration;
-                }
-                else if (ts.getObjectFlags(containingType) & 2 /* Interface */) {
-                    // for interfaces property and indexer might be inherited from different bases
-                    // check if any base class already has both property and indexer.
-                    // check should be performed only if 'type' is the first type that brings property\indexer together
-                    var someBaseClassHasBothPropertyAndIndexer = ts.forEach(getBaseTypes(containingType), function (base) { return getPropertyOfObjectType(base, prop.escapedName) && getIndexTypeOfType(base, indexKind); });
-                    errorNode = someBaseClassHasBothPropertyAndIndexer || !containingType.symbol.declarations ? undefined : containingType.symbol.declarations[0];
-                }
-                if (errorNode && !isTypeAssignableTo(propertyType, indexType)) {
-                    var errorMessage = indexKind === 0 /* String */
-                        ? ts.Diagnostics.Property_0_of_type_1_is_not_assignable_to_string_index_type_2
-                        : ts.Diagnostics.Property_0_of_type_1_is_not_assignable_to_numeric_index_type_2;
-                    error(errorNode, errorMessage, symbolToString(prop), typeToString(propertyType), typeToString(indexType));
-                }
+            };
+            for (var _i = 0, indexInfos_8 = indexInfos; _i < indexInfos_8.length; _i++) {
+                var info = indexInfos_8[_i];
+                _loop_28(info);
             }
         }
         function checkTypeNameIsReserved(name, message) {
@@ -78618,7 +80110,7 @@
         function checkTypeParametersNotReferenced(root, typeParameters, index) {
             visit(root);
             function visit(node) {
-                if (node.kind === 174 /* TypeReference */) {
+                if (node.kind === 176 /* TypeReference */) {
                     var type = getTypeFromTypeReference(node);
                     if (type.flags & 262144 /* TypeParameter */) {
                         for (var i = index; i < typeParameters.length; i++) {
@@ -78717,14 +80209,7 @@
         function checkClassLikeDeclaration(node) {
             checkGrammarClassLikeDeclaration(node);
             checkDecorators(node);
-            if (node.name) {
-                checkTypeNameIsReserved(node.name, ts.Diagnostics.Class_name_cannot_be_0);
-                checkCollisionWithRequireExportsInGeneratedCode(node, node.name);
-                checkCollisionWithGlobalPromiseInGeneratedCode(node, node.name);
-                if (!(node.flags & 8388608 /* Ambient */)) {
-                    checkClassNameCollisionWithObject(node.name);
-                }
-            }
+            checkCollisionsForDeclarationName(node, node.name);
             checkTypeParameters(ts.getEffectiveTypeParameterDeclarations(node));
             checkExportsOnMergedDeclarations(node);
             var symbol = getSymbolOfNode(node);
@@ -78826,7 +80311,7 @@
             }
             if (produceDiagnostics) {
                 checkIndexConstraints(type);
-                checkIndexConstraints(staticType, /*isStatic*/ true);
+                checkIndexConstraints(staticType, /*isStaticIndex*/ true);
                 checkTypeForDuplicateIndexSignatures(node);
                 checkPropertyInitialization(node);
             }
@@ -78837,7 +80322,7 @@
             var baseTypes = baseTypeNode && getBaseTypes(type);
             var baseWithThis = (baseTypes === null || baseTypes === void 0 ? void 0 : baseTypes.length) ? getTypeWithThisArgument(ts.first(baseTypes), type.thisType) : undefined;
             var baseStaticType = getBaseConstructorTypeOfClass(type);
-            var _loop_24 = function (member) {
+            var _loop_29 = function (member) {
                 if (ts.hasAmbientModifier(member)) {
                     return "continue";
                 }
@@ -78852,11 +80337,11 @@
             };
             for (var _i = 0, _a = node.members; _i < _a.length; _i++) {
                 var member = _a[_i];
-                _loop_24(member);
+                _loop_29(member);
             }
             function checkClassMember(member, memberIsParameterProperty) {
                 var hasOverride = ts.hasOverrideModifier(member);
-                var hasStatic = ts.hasStaticModifier(member);
+                var hasStatic = ts.isStatic(member);
                 if (baseWithThis && (hasOverride || compilerOptions.noImplicitOverride)) {
                     var declaredProp = member.name && getSymbolAtLocation(member.name) || getSymbolAtLocation(member);
                     if (!declaredProp) {
@@ -78868,10 +80353,13 @@
                     var baseProp = getPropertyOfType(baseType, declaredProp.escapedName);
                     var baseClassName = typeToString(baseWithThis);
                     if (prop && !baseProp && hasOverride) {
-                        error(member, ts.Diagnostics.This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0, baseClassName);
+                        var suggestion = getSuggestedSymbolForNonexistentClassMember(ts.symbolName(declaredProp), baseType);
+                        suggestion ?
+                            error(member, ts.Diagnostics.This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0_Did_you_mean_1, baseClassName, symbolToString(suggestion)) :
+                            error(member, ts.Diagnostics.This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0, baseClassName);
                     }
-                    else if (prop && (baseProp === null || baseProp === void 0 ? void 0 : baseProp.valueDeclaration) && compilerOptions.noImplicitOverride && !nodeInAmbientContext) {
-                        var baseHasAbstract = ts.hasAbstractModifier(baseProp.valueDeclaration);
+                    else if (prop && (baseProp === null || baseProp === void 0 ? void 0 : baseProp.declarations) && compilerOptions.noImplicitOverride && !nodeInAmbientContext) {
+                        var baseHasAbstract = ts.some(baseProp.declarations, function (d) { return ts.hasAbstractModifier(d); });
                         if (hasOverride) {
                             return;
                         }
@@ -78895,8 +80383,8 @@
         function issueMemberSpecificError(node, typeWithThis, baseWithThis, broadDiag) {
             // iterate over all implemented properties and issue errors on each one which isn't compatible, rather than the class as a whole, if possible
             var issuedMemberError = false;
-            var _loop_25 = function (member) {
-                if (ts.hasStaticModifier(member)) {
+            var _loop_30 = function (member) {
+                if (ts.isStatic(member)) {
                     return "continue";
                 }
                 var declaredProp = member.name && getSymbolAtLocation(member.name) || getSymbolAtLocation(member);
@@ -78914,7 +80402,7 @@
             };
             for (var _i = 0, _a = node.members; _i < _a.length; _i++) {
                 var member = _a[_i];
-                _loop_25(member);
+                _loop_30(member);
             }
             if (!issuedMemberError) {
                 // check again with diagnostics to generate a less-specific error
@@ -78940,7 +80428,7 @@
         }
         function getClassOrInterfaceDeclarationsOfSymbol(symbol) {
             return ts.filter(symbol.declarations, function (d) {
-                return d.kind === 253 /* ClassDeclaration */ || d.kind === 254 /* InterfaceDeclaration */;
+                return d.kind === 255 /* ClassDeclaration */ || d.kind === 256 /* InterfaceDeclaration */;
             });
         }
         function checkKindsOfPropertyMemberOverrides(type, baseType) {
@@ -78996,7 +80484,7 @@
                                 continue basePropertyCheck;
                             }
                         }
-                        if (derivedClassDecl.kind === 222 /* ClassExpression */) {
+                        if (derivedClassDecl.kind === 224 /* ClassExpression */) {
                             error(derivedClassDecl, ts.Diagnostics.Non_abstract_class_expression_does_not_implement_inherited_abstract_member_0_from_class_1, symbolToString(baseProperty), typeToString(baseType));
                         }
                         else {
@@ -79017,7 +80505,7 @@
                     if (basePropertyFlags && derivedPropertyFlags) {
                         // property/accessor is overridden with property/accessor
                         if (baseDeclarationFlags & 128 /* Abstract */ && !(base.valueDeclaration && ts.isPropertyDeclaration(base.valueDeclaration) && base.valueDeclaration.initializer)
-                            || base.valueDeclaration && base.valueDeclaration.parent.kind === 254 /* InterfaceDeclaration */
+                            || base.valueDeclaration && base.valueDeclaration.parent.kind === 256 /* InterfaceDeclaration */
                             || derived.valueDeclaration && ts.isBinaryExpression(derived.valueDeclaration)) {
                             // when the base property is abstract or from an interface, base/derived flags don't need to match
                             // same when the derived property is from an assignment
@@ -79032,7 +80520,7 @@
                             error(ts.getNameOfDeclaration(derived.valueDeclaration) || derived.valueDeclaration, errorMessage_1, symbolToString(base), typeToString(baseType), typeToString(type));
                         }
                         else if (useDefineForClassFields) {
-                            var uninitialized = (_a = derived.declarations) === null || _a === void 0 ? void 0 : _a.find(function (d) { return d.kind === 164 /* PropertyDeclaration */ && !d.initializer; });
+                            var uninitialized = (_a = derived.declarations) === null || _a === void 0 ? void 0 : _a.find(function (d) { return d.kind === 165 /* PropertyDeclaration */ && !d.initializer; });
                             if (uninitialized
                                 && !(derived.flags & 33554432 /* Transient */)
                                 && !(baseDeclarationFlags & 128 /* Abstract */)
@@ -79134,7 +80622,7 @@
                 if (ts.getEffectiveModifierFlags(member) & 2 /* Ambient */) {
                     continue;
                 }
-                if (isInstancePropertyWithoutInitializer(member)) {
+                if (!ts.isStatic(member) && isPropertyWithoutInitializer(member)) {
                     var propName = member.name;
                     if (ts.isIdentifier(propName) || ts.isPrivateIdentifier(propName)) {
                         var type = getTypeOfSymbol(getSymbolOfNode(member));
@@ -79147,12 +80635,29 @@
                 }
             }
         }
-        function isInstancePropertyWithoutInitializer(node) {
-            return node.kind === 164 /* PropertyDeclaration */ &&
-                !ts.hasSyntacticModifier(node, 32 /* Static */ | 128 /* Abstract */) &&
+        function isPropertyWithoutInitializer(node) {
+            return node.kind === 165 /* PropertyDeclaration */ &&
+                !ts.hasAbstractModifier(node) &&
                 !node.exclamationToken &&
                 !node.initializer;
         }
+        function isPropertyInitializedInStaticBlocks(propName, propType, staticBlocks, startPos, endPos) {
+            for (var _i = 0, staticBlocks_2 = staticBlocks; _i < staticBlocks_2.length; _i++) {
+                var staticBlock = staticBlocks_2[_i];
+                // static block must be within the provided range as they are evaluated in document order (unlike constructors)
+                if (staticBlock.pos >= startPos && staticBlock.pos <= endPos) {
+                    var reference = ts.factory.createPropertyAccessExpression(ts.factory.createThis(), propName);
+                    ts.setParent(reference.expression, reference);
+                    ts.setParent(reference, staticBlock);
+                    reference.flowNode = staticBlock.returnFlowNode;
+                    var flowType = getFlowTypeOfReference(reference, propType, getOptionalType(propType));
+                    if (!(getFalsyFlags(flowType) & 32768 /* Undefined */)) {
+                        return true;
+                    }
+                }
+            }
+            return false;
+        }
         function isPropertyInitializedInConstructor(propName, propType, constructor) {
             var reference = ts.factory.createPropertyAccessExpression(ts.factory.createThis(), propName);
             ts.setParent(reference.expression, reference);
@@ -79172,7 +80677,7 @@
                 var symbol = getSymbolOfNode(node);
                 checkTypeParameterListsIdentical(symbol);
                 // Only check this symbol once
-                var firstInterfaceDecl = ts.getDeclarationOfKind(symbol, 254 /* InterfaceDeclaration */);
+                var firstInterfaceDecl = ts.getDeclarationOfKind(symbol, 256 /* InterfaceDeclaration */);
                 if (node === firstInterfaceDecl) {
                     var type = getDeclaredTypeOfSymbol(symbol);
                     var typeWithThis = getTypeWithThisArgument(type);
@@ -79205,7 +80710,7 @@
             checkTypeNameIsReserved(node.name, ts.Diagnostics.Type_alias_name_cannot_be_0);
             checkExportsOnMergedDeclarations(node);
             checkTypeParameters(node.typeParameters);
-            if (node.type.kind === 136 /* IntrinsicKeyword */) {
+            if (node.type.kind === 137 /* IntrinsicKeyword */) {
                 if (!intrinsicTypeKinds.has(node.name.escapedText) || ts.length(node.typeParameters) !== 1) {
                     error(node.type, ts.Diagnostics.The_intrinsic_keyword_can_only_be_used_to_declare_compiler_provided_intrinsic_types);
                 }
@@ -79234,7 +80739,7 @@
             }
             else {
                 var text = ts.getTextOfPropertyName(member.name);
-                if (isNumericLiteralName(text) && !isInfinityOrNaNString(text)) {
+                if (isNumericLiteralName(text) && !ts.isInfinityOrNaNString(text)) {
                     error(member.name, ts.Diagnostics.An_enum_member_cannot_have_a_numeric_name);
                 }
             }
@@ -79291,7 +80796,7 @@
             return value;
             function evaluate(expr) {
                 switch (expr.kind) {
-                    case 215 /* PrefixUnaryExpression */:
+                    case 217 /* PrefixUnaryExpression */:
                         var value_2 = evaluate(expr.operand);
                         if (typeof value_2 === "number") {
                             switch (expr.operator) {
@@ -79301,7 +80806,7 @@
                             }
                         }
                         break;
-                    case 217 /* BinaryExpression */:
+                    case 219 /* BinaryExpression */:
                         var left = evaluate(expr.left);
                         var right = evaluate(expr.right);
                         if (typeof left === "number" && typeof right === "number") {
@@ -79330,22 +80835,22 @@
                     case 8 /* NumericLiteral */:
                         checkGrammarNumericLiteral(expr);
                         return +expr.text;
-                    case 208 /* ParenthesizedExpression */:
+                    case 210 /* ParenthesizedExpression */:
                         return evaluate(expr.expression);
-                    case 78 /* Identifier */:
+                    case 79 /* Identifier */:
                         var identifier = expr;
-                        if (isInfinityOrNaNString(identifier.escapedText)) {
+                        if (ts.isInfinityOrNaNString(identifier.escapedText)) {
                             return +(identifier.escapedText);
                         }
                         return ts.nodeIsMissing(expr) ? 0 : evaluateEnumMember(expr, getSymbolOfNode(member.parent), identifier.escapedText);
-                    case 203 /* ElementAccessExpression */:
-                    case 202 /* PropertyAccessExpression */:
+                    case 205 /* ElementAccessExpression */:
+                    case 204 /* PropertyAccessExpression */:
                         var ex = expr;
                         if (isConstantMemberAccess(ex)) {
                             var type = getTypeOfExpression(ex.expression);
                             if (type.symbol && type.symbol.flags & 384 /* Enum */) {
                                 var name = void 0;
-                                if (ex.kind === 202 /* PropertyAccessExpression */) {
+                                if (ex.kind === 204 /* PropertyAccessExpression */) {
                                     name = ex.name.escapedText;
                                 }
                                 else {
@@ -79377,9 +80882,9 @@
             }
         }
         function isConstantMemberAccess(node) {
-            return node.kind === 78 /* Identifier */ ||
-                node.kind === 202 /* PropertyAccessExpression */ && isConstantMemberAccess(node.expression) ||
-                node.kind === 203 /* ElementAccessExpression */ && isConstantMemberAccess(node.expression) &&
+            return node.kind === 79 /* Identifier */ ||
+                node.kind === 204 /* PropertyAccessExpression */ && isConstantMemberAccess(node.expression) ||
+                node.kind === 205 /* ElementAccessExpression */ && isConstantMemberAccess(node.expression) &&
                     ts.isStringLiteralLike(node.argumentExpression);
         }
         function checkEnumDeclaration(node) {
@@ -79388,9 +80893,7 @@
             }
             // Grammar checking
             checkGrammarDecoratorsAndModifiers(node);
-            checkTypeNameIsReserved(node.name, ts.Diagnostics.Enum_name_cannot_be_0);
-            checkCollisionWithRequireExportsInGeneratedCode(node, node.name);
-            checkCollisionWithGlobalPromiseInGeneratedCode(node, node.name);
+            checkCollisionsForDeclarationName(node, node.name);
             checkExportsOnMergedDeclarations(node);
             node.members.forEach(checkEnumMember);
             computeEnumMemberValues(node);
@@ -79415,7 +80918,7 @@
                 var seenEnumMissingInitialInitializer_1 = false;
                 ts.forEach(enumSymbol.declarations, function (declaration) {
                     // return true if we hit a violation of the rule, false otherwise
-                    if (declaration.kind !== 256 /* EnumDeclaration */) {
+                    if (declaration.kind !== 258 /* EnumDeclaration */) {
                         return false;
                     }
                     var enumDeclaration = declaration;
@@ -79444,8 +80947,8 @@
             if (declarations) {
                 for (var _i = 0, declarations_8 = declarations; _i < declarations_8.length; _i++) {
                     var declaration = declarations_8[_i];
-                    if ((declaration.kind === 253 /* ClassDeclaration */ ||
-                        (declaration.kind === 252 /* FunctionDeclaration */ && ts.nodeIsPresent(declaration.body))) &&
+                    if ((declaration.kind === 255 /* ClassDeclaration */ ||
+                        (declaration.kind === 254 /* FunctionDeclaration */ && ts.nodeIsPresent(declaration.body))) &&
                         !(declaration.flags & 8388608 /* Ambient */)) {
                         return declaration;
                     }
@@ -79488,8 +80991,7 @@
                     }
                 }
                 if (ts.isIdentifier(node.name)) {
-                    checkCollisionWithRequireExportsInGeneratedCode(node, node.name);
-                    checkCollisionWithGlobalPromiseInGeneratedCode(node, node.name);
+                    checkCollisionsForDeclarationName(node, node.name);
                 }
                 checkExportsOnMergedDeclarations(node);
                 var symbol = getSymbolOfNode(node);
@@ -79510,7 +81012,7 @@
                     }
                     // if the module merges with a class declaration in the same lexical scope,
                     // we need to track this to ensure the correct emit.
-                    var mergedClass = ts.getDeclarationOfKind(symbol, 253 /* ClassDeclaration */);
+                    var mergedClass = ts.getDeclarationOfKind(symbol, 255 /* ClassDeclaration */);
                     if (mergedClass &&
                         inSameLexicalScope(node, mergedClass)) {
                         getNodeLinks(node).flags |= 32768 /* LexicalModuleMergesWithClass */;
@@ -79561,23 +81063,23 @@
         function checkModuleAugmentationElement(node, isGlobalAugmentation) {
             var _a;
             switch (node.kind) {
-                case 233 /* VariableStatement */:
+                case 235 /* VariableStatement */:
                     // error each individual name in variable statement instead of marking the entire variable statement
                     for (var _i = 0, _b = node.declarationList.declarations; _i < _b.length; _i++) {
                         var decl = _b[_i];
                         checkModuleAugmentationElement(decl, isGlobalAugmentation);
                     }
                     break;
-                case 267 /* ExportAssignment */:
-                case 268 /* ExportDeclaration */:
+                case 269 /* ExportAssignment */:
+                case 270 /* ExportDeclaration */:
                     grammarErrorOnFirstToken(node, ts.Diagnostics.Exports_and_export_assignments_are_not_permitted_in_module_augmentations);
                     break;
-                case 261 /* ImportEqualsDeclaration */:
-                case 262 /* ImportDeclaration */:
+                case 263 /* ImportEqualsDeclaration */:
+                case 264 /* ImportDeclaration */:
                     grammarErrorOnFirstToken(node, ts.Diagnostics.Imports_are_not_permitted_in_module_augmentations_Consider_moving_them_to_the_enclosing_external_module);
                     break;
-                case 199 /* BindingElement */:
-                case 250 /* VariableDeclaration */:
+                case 201 /* BindingElement */:
+                case 252 /* VariableDeclaration */:
                     var name = node.name;
                     if (ts.isBindingPattern(name)) {
                         for (var _c = 0, _d = name.elements; _c < _d.length; _c++) {
@@ -79588,12 +81090,12 @@
                         break;
                     }
                 // falls through
-                case 253 /* ClassDeclaration */:
-                case 256 /* EnumDeclaration */:
-                case 252 /* FunctionDeclaration */:
-                case 254 /* InterfaceDeclaration */:
-                case 257 /* ModuleDeclaration */:
-                case 255 /* TypeAliasDeclaration */:
+                case 255 /* ClassDeclaration */:
+                case 258 /* EnumDeclaration */:
+                case 254 /* FunctionDeclaration */:
+                case 256 /* InterfaceDeclaration */:
+                case 259 /* ModuleDeclaration */:
+                case 257 /* TypeAliasDeclaration */:
                     if (isGlobalAugmentation) {
                         return;
                     }
@@ -79614,20 +81116,20 @@
         }
         function getFirstNonModuleExportsIdentifier(node) {
             switch (node.kind) {
-                case 78 /* Identifier */:
+                case 79 /* Identifier */:
                     return node;
-                case 158 /* QualifiedName */:
+                case 159 /* QualifiedName */:
                     do {
                         node = node.left;
-                    } while (node.kind !== 78 /* Identifier */);
+                    } while (node.kind !== 79 /* Identifier */);
                     return node;
-                case 202 /* PropertyAccessExpression */:
+                case 204 /* PropertyAccessExpression */:
                     do {
                         if (ts.isModuleExportsAccessExpression(node.expression) && !ts.isPrivateIdentifier(node.name)) {
                             return node.name;
                         }
                         node = node.expression;
-                    } while (node.kind !== 78 /* Identifier */);
+                    } while (node.kind !== 79 /* Identifier */);
                     return node;
             }
         }
@@ -79641,9 +81143,9 @@
                 error(moduleName, ts.Diagnostics.String_literal_expected);
                 return false;
             }
-            var inAmbientExternalModule = node.parent.kind === 258 /* ModuleBlock */ && ts.isAmbientModule(node.parent.parent);
-            if (node.parent.kind !== 298 /* SourceFile */ && !inAmbientExternalModule) {
-                error(moduleName, node.kind === 268 /* ExportDeclaration */ ?
+            var inAmbientExternalModule = node.parent.kind === 260 /* ModuleBlock */ && ts.isAmbientModule(node.parent.parent);
+            if (node.parent.kind !== 300 /* SourceFile */ && !inAmbientExternalModule) {
+                error(moduleName, node.kind === 270 /* ExportDeclaration */ ?
                     ts.Diagnostics.Export_declarations_are_not_permitted_in_a_namespace :
                     ts.Diagnostics.Import_declarations_in_a_namespace_cannot_reference_a_module);
                 return false;
@@ -79678,14 +81180,14 @@
                     (symbol.flags & 788968 /* Type */ ? 788968 /* Type */ : 0) |
                     (symbol.flags & 1920 /* Namespace */ ? 1920 /* Namespace */ : 0);
                 if (target.flags & excludedMeanings) {
-                    var message = node.kind === 271 /* ExportSpecifier */ ?
+                    var message = node.kind === 273 /* ExportSpecifier */ ?
                         ts.Diagnostics.Export_declaration_conflicts_with_exported_declaration_of_0 :
                         ts.Diagnostics.Import_declaration_conflicts_with_local_declaration_of_0;
                     error(node, message, symbolToString(symbol));
                 }
                 // Don't allow to re-export something with no value side when `--isolatedModules` is set.
                 if (compilerOptions.isolatedModules
-                    && node.kind === 271 /* ExportSpecifier */
+                    && node.kind === 273 /* ExportSpecifier */
                     && !node.parent.parent.isTypeOnly
                     && !(target.flags & 111551 /* Value */)
                     && !(node.flags & 8388608 /* Ambient */)) {
@@ -79697,10 +81199,9 @@
             }
         }
         function checkImportBinding(node) {
-            checkCollisionWithRequireExportsInGeneratedCode(node, node.name);
-            checkCollisionWithGlobalPromiseInGeneratedCode(node, node.name);
+            checkCollisionsForDeclarationName(node, node.name);
             checkAliasSymbol(node);
-            if (node.kind === 266 /* ImportSpecifier */ &&
+            if (node.kind === 268 /* ImportSpecifier */ &&
                 ts.idText(node.propertyName || node.name) === "default" &&
                 compilerOptions.esModuleInterop &&
                 moduleKind !== ts.ModuleKind.System && moduleKind < ts.ModuleKind.ES2015) {
@@ -79722,7 +81223,7 @@
                         checkImportBinding(importClause);
                     }
                     if (importClause.namedBindings) {
-                        if (importClause.namedBindings.kind === 264 /* NamespaceImport */) {
+                        if (importClause.namedBindings.kind === 266 /* NamespaceImport */) {
                             checkImportBinding(importClause.namedBindings);
                             if (moduleKind !== ts.ModuleKind.System && moduleKind < ts.ModuleKind.ES2015 && compilerOptions.esModuleInterop) {
                                 // import * as ns from "foo";
@@ -79750,7 +81251,7 @@
                 if (ts.hasSyntacticModifier(node, 1 /* Export */)) {
                     markExportAsReferenced(node);
                 }
-                if (node.moduleReference.kind !== 273 /* ExternalModuleReference */) {
+                if (node.moduleReference.kind !== 275 /* ExternalModuleReference */) {
                     var target = resolveAlias(getSymbolOfNode(node));
                     if (target !== unknownSymbol) {
                         if (target.flags & 111551 /* Value */) {
@@ -79793,10 +81294,10 @@
                     // export { x, y }
                     // export { x, y } from "foo"
                     ts.forEach(node.exportClause.elements, checkExportSpecifier);
-                    var inAmbientExternalModule = node.parent.kind === 258 /* ModuleBlock */ && ts.isAmbientModule(node.parent.parent);
-                    var inAmbientNamespaceDeclaration = !inAmbientExternalModule && node.parent.kind === 258 /* ModuleBlock */ &&
+                    var inAmbientExternalModule = node.parent.kind === 260 /* ModuleBlock */ && ts.isAmbientModule(node.parent.parent);
+                    var inAmbientNamespaceDeclaration = !inAmbientExternalModule && node.parent.kind === 260 /* ModuleBlock */ &&
                         !node.moduleSpecifier && node.flags & 8388608 /* Ambient */;
-                    if (node.parent.kind !== 298 /* SourceFile */ && !inAmbientExternalModule && !inAmbientNamespaceDeclaration) {
+                    if (node.parent.kind !== 300 /* SourceFile */ && !inAmbientExternalModule && !inAmbientNamespaceDeclaration) {
                         error(node, ts.Diagnostics.Export_declarations_are_not_permitted_in_a_namespace);
                     }
                 }
@@ -79829,14 +81330,14 @@
         }
         function checkGrammarExportDeclaration(node) {
             var _a;
-            var isTypeOnlyExportStar = node.isTypeOnly && ((_a = node.exportClause) === null || _a === void 0 ? void 0 : _a.kind) !== 269 /* NamedExports */;
+            var isTypeOnlyExportStar = node.isTypeOnly && ((_a = node.exportClause) === null || _a === void 0 ? void 0 : _a.kind) !== 271 /* NamedExports */;
             if (isTypeOnlyExportStar) {
                 grammarErrorOnNode(node, ts.Diagnostics.Only_named_exports_may_use_export_type);
             }
             return !isTypeOnlyExportStar;
         }
         function checkGrammarModuleElementContext(node, errorMessage) {
-            var isInAppropriateContext = node.parent.kind === 298 /* SourceFile */ || node.parent.kind === 258 /* ModuleBlock */ || node.parent.kind === 257 /* ModuleDeclaration */;
+            var isInAppropriateContext = node.parent.kind === 300 /* SourceFile */ || node.parent.kind === 260 /* ModuleBlock */ || node.parent.kind === 259 /* ModuleDeclaration */;
             if (!isInAppropriateContext) {
                 grammarErrorOnFirstToken(node, errorMessage);
             }
@@ -79914,8 +81415,8 @@
                 // If we hit an export assignment in an illegal context, just bail out to avoid cascading errors.
                 return;
             }
-            var container = node.parent.kind === 298 /* SourceFile */ ? node.parent : node.parent.parent;
-            if (container.kind === 257 /* ModuleDeclaration */ && !ts.isAmbientModule(container)) {
+            var container = node.parent.kind === 300 /* SourceFile */ ? node.parent : node.parent.parent;
+            if (container.kind === 259 /* ModuleDeclaration */ && !ts.isAmbientModule(container)) {
                 if (node.isExportEquals) {
                     error(node, ts.Diagnostics.An_export_assignment_cannot_be_used_in_a_namespace);
                 }
@@ -79928,7 +81429,7 @@
             if (!checkGrammarDecoratorsAndModifiers(node) && ts.hasEffectiveModifiers(node)) {
                 grammarErrorOnFirstToken(node, ts.Diagnostics.An_export_assignment_cannot_have_modifiers);
             }
-            if (node.expression.kind === 78 /* Identifier */) {
+            if (node.expression.kind === 79 /* Identifier */) {
                 var id = node.expression;
                 var sym = resolveEntityName(id, 67108863 /* All */, /*ignoreErrors*/ true, /*dontResolveAlias*/ true, node);
                 if (sym) {
@@ -80039,171 +81540,173 @@
                 // Only bother checking on a few construct kinds.  We don't want to be excessively
                 // hitting the cancellation token on every node we check.
                 switch (kind) {
-                    case 257 /* ModuleDeclaration */:
-                    case 253 /* ClassDeclaration */:
-                    case 254 /* InterfaceDeclaration */:
-                    case 252 /* FunctionDeclaration */:
+                    case 259 /* ModuleDeclaration */:
+                    case 255 /* ClassDeclaration */:
+                    case 256 /* InterfaceDeclaration */:
+                    case 254 /* FunctionDeclaration */:
                         cancellationToken.throwIfCancellationRequested();
                 }
             }
-            if (kind >= 233 /* FirstStatement */ && kind <= 249 /* LastStatement */ && node.flowNode && !isReachableFlowNode(node.flowNode)) {
+            if (kind >= 235 /* FirstStatement */ && kind <= 251 /* LastStatement */ && node.flowNode && !isReachableFlowNode(node.flowNode)) {
                 errorOrSuggestion(compilerOptions.allowUnreachableCode === false, node, ts.Diagnostics.Unreachable_code_detected);
             }
             switch (kind) {
-                case 160 /* TypeParameter */:
+                case 161 /* TypeParameter */:
                     return checkTypeParameter(node);
-                case 161 /* Parameter */:
+                case 162 /* Parameter */:
                     return checkParameter(node);
-                case 164 /* PropertyDeclaration */:
+                case 165 /* PropertyDeclaration */:
                     return checkPropertyDeclaration(node);
-                case 163 /* PropertySignature */:
+                case 164 /* PropertySignature */:
                     return checkPropertySignature(node);
-                case 176 /* ConstructorType */:
-                case 175 /* FunctionType */:
-                case 170 /* CallSignature */:
-                case 171 /* ConstructSignature */:
-                case 172 /* IndexSignature */:
+                case 178 /* ConstructorType */:
+                case 177 /* FunctionType */:
+                case 172 /* CallSignature */:
+                case 173 /* ConstructSignature */:
+                case 174 /* IndexSignature */:
                     return checkSignatureDeclaration(node);
-                case 166 /* MethodDeclaration */:
-                case 165 /* MethodSignature */:
+                case 167 /* MethodDeclaration */:
+                case 166 /* MethodSignature */:
                     return checkMethodDeclaration(node);
-                case 167 /* Constructor */:
+                case 168 /* ClassStaticBlockDeclaration */:
+                    return checkClassStaticBlockDeclaration(node);
+                case 169 /* Constructor */:
                     return checkConstructorDeclaration(node);
-                case 168 /* GetAccessor */:
-                case 169 /* SetAccessor */:
+                case 170 /* GetAccessor */:
+                case 171 /* SetAccessor */:
                     return checkAccessorDeclaration(node);
-                case 174 /* TypeReference */:
+                case 176 /* TypeReference */:
                     return checkTypeReferenceNode(node);
-                case 173 /* TypePredicate */:
+                case 175 /* TypePredicate */:
                     return checkTypePredicate(node);
-                case 177 /* TypeQuery */:
+                case 179 /* TypeQuery */:
                     return checkTypeQuery(node);
-                case 178 /* TypeLiteral */:
+                case 180 /* TypeLiteral */:
                     return checkTypeLiteral(node);
-                case 179 /* ArrayType */:
+                case 181 /* ArrayType */:
                     return checkArrayType(node);
-                case 180 /* TupleType */:
+                case 182 /* TupleType */:
                     return checkTupleType(node);
-                case 183 /* UnionType */:
-                case 184 /* IntersectionType */:
+                case 185 /* UnionType */:
+                case 186 /* IntersectionType */:
                     return checkUnionOrIntersectionType(node);
-                case 187 /* ParenthesizedType */:
-                case 181 /* OptionalType */:
-                case 182 /* RestType */:
+                case 189 /* ParenthesizedType */:
+                case 183 /* OptionalType */:
+                case 184 /* RestType */:
                     return checkSourceElement(node.type);
-                case 188 /* ThisType */:
+                case 190 /* ThisType */:
                     return checkThisType(node);
-                case 189 /* TypeOperator */:
+                case 191 /* TypeOperator */:
                     return checkTypeOperator(node);
-                case 185 /* ConditionalType */:
+                case 187 /* ConditionalType */:
                     return checkConditionalType(node);
-                case 186 /* InferType */:
+                case 188 /* InferType */:
                     return checkInferType(node);
-                case 194 /* TemplateLiteralType */:
+                case 196 /* TemplateLiteralType */:
                     return checkTemplateLiteralType(node);
-                case 196 /* ImportType */:
+                case 198 /* ImportType */:
                     return checkImportType(node);
-                case 193 /* NamedTupleMember */:
+                case 195 /* NamedTupleMember */:
                     return checkNamedTupleMember(node);
-                case 318 /* JSDocAugmentsTag */:
+                case 323 /* JSDocAugmentsTag */:
                     return checkJSDocAugmentsTag(node);
-                case 319 /* JSDocImplementsTag */:
+                case 324 /* JSDocImplementsTag */:
                     return checkJSDocImplementsTag(node);
-                case 335 /* JSDocTypedefTag */:
-                case 328 /* JSDocCallbackTag */:
-                case 329 /* JSDocEnumTag */:
+                case 340 /* JSDocTypedefTag */:
+                case 333 /* JSDocCallbackTag */:
+                case 334 /* JSDocEnumTag */:
                     return checkJSDocTypeAliasTag(node);
-                case 334 /* JSDocTemplateTag */:
+                case 339 /* JSDocTemplateTag */:
                     return checkJSDocTemplateTag(node);
-                case 333 /* JSDocTypeTag */:
+                case 338 /* JSDocTypeTag */:
                     return checkJSDocTypeTag(node);
-                case 330 /* JSDocParameterTag */:
+                case 335 /* JSDocParameterTag */:
                     return checkJSDocParameterTag(node);
-                case 337 /* JSDocPropertyTag */:
+                case 342 /* JSDocPropertyTag */:
                     return checkJSDocPropertyTag(node);
-                case 309 /* JSDocFunctionType */:
+                case 312 /* JSDocFunctionType */:
                     checkJSDocFunctionType(node);
                 // falls through
-                case 307 /* JSDocNonNullableType */:
-                case 306 /* JSDocNullableType */:
-                case 304 /* JSDocAllType */:
-                case 305 /* JSDocUnknownType */:
-                case 314 /* JSDocTypeLiteral */:
+                case 310 /* JSDocNonNullableType */:
+                case 309 /* JSDocNullableType */:
+                case 307 /* JSDocAllType */:
+                case 308 /* JSDocUnknownType */:
+                case 317 /* JSDocTypeLiteral */:
                     checkJSDocTypeIsInJsFile(node);
                     ts.forEachChild(node, checkSourceElement);
                     return;
-                case 310 /* JSDocVariadicType */:
+                case 313 /* JSDocVariadicType */:
                     checkJSDocVariadicType(node);
                     return;
-                case 302 /* JSDocTypeExpression */:
+                case 304 /* JSDocTypeExpression */:
                     return checkSourceElement(node.type);
-                case 190 /* IndexedAccessType */:
+                case 192 /* IndexedAccessType */:
                     return checkIndexedAccessType(node);
-                case 191 /* MappedType */:
+                case 193 /* MappedType */:
                     return checkMappedType(node);
-                case 252 /* FunctionDeclaration */:
+                case 254 /* FunctionDeclaration */:
                     return checkFunctionDeclaration(node);
-                case 231 /* Block */:
-                case 258 /* ModuleBlock */:
+                case 233 /* Block */:
+                case 260 /* ModuleBlock */:
                     return checkBlock(node);
-                case 233 /* VariableStatement */:
+                case 235 /* VariableStatement */:
                     return checkVariableStatement(node);
-                case 234 /* ExpressionStatement */:
+                case 236 /* ExpressionStatement */:
                     return checkExpressionStatement(node);
-                case 235 /* IfStatement */:
+                case 237 /* IfStatement */:
                     return checkIfStatement(node);
-                case 236 /* DoStatement */:
+                case 238 /* DoStatement */:
                     return checkDoStatement(node);
-                case 237 /* WhileStatement */:
+                case 239 /* WhileStatement */:
                     return checkWhileStatement(node);
-                case 238 /* ForStatement */:
+                case 240 /* ForStatement */:
                     return checkForStatement(node);
-                case 239 /* ForInStatement */:
+                case 241 /* ForInStatement */:
                     return checkForInStatement(node);
-                case 240 /* ForOfStatement */:
+                case 242 /* ForOfStatement */:
                     return checkForOfStatement(node);
-                case 241 /* ContinueStatement */:
-                case 242 /* BreakStatement */:
+                case 243 /* ContinueStatement */:
+                case 244 /* BreakStatement */:
                     return checkBreakOrContinueStatement(node);
-                case 243 /* ReturnStatement */:
+                case 245 /* ReturnStatement */:
                     return checkReturnStatement(node);
-                case 244 /* WithStatement */:
+                case 246 /* WithStatement */:
                     return checkWithStatement(node);
-                case 245 /* SwitchStatement */:
+                case 247 /* SwitchStatement */:
                     return checkSwitchStatement(node);
-                case 246 /* LabeledStatement */:
+                case 248 /* LabeledStatement */:
                     return checkLabeledStatement(node);
-                case 247 /* ThrowStatement */:
+                case 249 /* ThrowStatement */:
                     return checkThrowStatement(node);
-                case 248 /* TryStatement */:
+                case 250 /* TryStatement */:
                     return checkTryStatement(node);
-                case 250 /* VariableDeclaration */:
+                case 252 /* VariableDeclaration */:
                     return checkVariableDeclaration(node);
-                case 199 /* BindingElement */:
+                case 201 /* BindingElement */:
                     return checkBindingElement(node);
-                case 253 /* ClassDeclaration */:
+                case 255 /* ClassDeclaration */:
                     return checkClassDeclaration(node);
-                case 254 /* InterfaceDeclaration */:
+                case 256 /* InterfaceDeclaration */:
                     return checkInterfaceDeclaration(node);
-                case 255 /* TypeAliasDeclaration */:
+                case 257 /* TypeAliasDeclaration */:
                     return checkTypeAliasDeclaration(node);
-                case 256 /* EnumDeclaration */:
+                case 258 /* EnumDeclaration */:
                     return checkEnumDeclaration(node);
-                case 257 /* ModuleDeclaration */:
+                case 259 /* ModuleDeclaration */:
                     return checkModuleDeclaration(node);
-                case 262 /* ImportDeclaration */:
+                case 264 /* ImportDeclaration */:
                     return checkImportDeclaration(node);
-                case 261 /* ImportEqualsDeclaration */:
+                case 263 /* ImportEqualsDeclaration */:
                     return checkImportEqualsDeclaration(node);
-                case 268 /* ExportDeclaration */:
+                case 270 /* ExportDeclaration */:
                     return checkExportDeclaration(node);
-                case 267 /* ExportAssignment */:
+                case 269 /* ExportAssignment */:
                     return checkExportAssignment(node);
-                case 232 /* EmptyStatement */:
-                case 249 /* DebuggerStatement */:
+                case 234 /* EmptyStatement */:
+                case 251 /* DebuggerStatement */:
                     checkGrammarStatementInAmbientContext(node);
                     return;
-                case 272 /* MissingDeclaration */:
+                case 274 /* MissingDeclaration */:
                     return checkMissingDeclaration(node);
             }
         }
@@ -80302,33 +81805,33 @@
             currentNode = node;
             instantiationCount = 0;
             switch (node.kind) {
-                case 204 /* CallExpression */:
-                case 205 /* NewExpression */:
-                case 206 /* TaggedTemplateExpression */:
-                case 162 /* Decorator */:
-                case 276 /* JsxOpeningElement */:
+                case 206 /* CallExpression */:
+                case 207 /* NewExpression */:
+                case 208 /* TaggedTemplateExpression */:
+                case 163 /* Decorator */:
+                case 278 /* JsxOpeningElement */:
                     // These node kinds are deferred checked when overload resolution fails
                     // To save on work, we ensure the arguments are checked just once, in
                     // a deferred way
                     resolveUntypedCall(node);
                     break;
-                case 209 /* FunctionExpression */:
-                case 210 /* ArrowFunction */:
-                case 166 /* MethodDeclaration */:
-                case 165 /* MethodSignature */:
+                case 211 /* FunctionExpression */:
+                case 212 /* ArrowFunction */:
+                case 167 /* MethodDeclaration */:
+                case 166 /* MethodSignature */:
                     checkFunctionExpressionOrObjectLiteralMethodDeferred(node);
                     break;
-                case 168 /* GetAccessor */:
-                case 169 /* SetAccessor */:
+                case 170 /* GetAccessor */:
+                case 171 /* SetAccessor */:
                     checkAccessorDeclaration(node);
                     break;
-                case 222 /* ClassExpression */:
+                case 224 /* ClassExpression */:
                     checkClassExpressionDeferred(node);
                     break;
-                case 275 /* JsxSelfClosingElement */:
+                case 277 /* JsxSelfClosingElement */:
                     checkJsxSelfClosingElementDeferred(node);
                     break;
-                case 274 /* JsxElement */:
+                case 276 /* JsxElement */:
                     checkJsxElementDeferred(node);
                     break;
             }
@@ -80371,6 +81874,7 @@
                 ts.clear(potentialThisCollisions);
                 ts.clear(potentialNewTargetCollisions);
                 ts.clear(potentialWeakMapSetCollisions);
+                ts.clear(potentialReflectCollisions);
                 ts.forEach(node.statements, checkSourceElement);
                 checkSourceElement(node.endOfFileToken);
                 checkDeferredNodes(node);
@@ -80404,6 +81908,10 @@
                     ts.forEach(potentialWeakMapSetCollisions, checkWeakMapSetCollision);
                     ts.clear(potentialWeakMapSetCollisions);
                 }
+                if (potentialReflectCollisions.length) {
+                    ts.forEach(potentialReflectCollisions, checkReflectCollision);
+                    ts.clear(potentialReflectCollisions);
+                }
                 links.flags |= 1 /* TypeChecked */;
             }
         }
@@ -80464,7 +81972,7 @@
                 return [];
             }
             var symbols = ts.createSymbolTable();
-            var isStatic = false;
+            var isStaticSymbol = false;
             populateSymbols();
             symbols.delete("this" /* This */); // Not a symbol, a keyword
             return symbolsToArray(symbols);
@@ -80474,17 +81982,17 @@
                         copySymbols(location.locals, meaning);
                     }
                     switch (location.kind) {
-                        case 298 /* SourceFile */:
+                        case 300 /* SourceFile */:
                             if (!ts.isExternalModule(location))
                                 break;
                         // falls through
-                        case 257 /* ModuleDeclaration */:
+                        case 259 /* ModuleDeclaration */:
                             copyLocallyVisibleExportSymbols(getSymbolOfNode(location).exports, meaning & 2623475 /* ModuleMember */);
                             break;
-                        case 256 /* EnumDeclaration */:
+                        case 258 /* EnumDeclaration */:
                             copySymbols(getSymbolOfNode(location).exports, meaning & 8 /* EnumMember */);
                             break;
-                        case 222 /* ClassExpression */:
+                        case 224 /* ClassExpression */:
                             var className = location.name;
                             if (className) {
                                 copySymbol(location.symbol, meaning);
@@ -80492,17 +82000,17 @@
                         // this fall-through is necessary because we would like to handle
                         // type parameter inside class expression similar to how we handle it in classDeclaration and interface Declaration.
                         // falls through
-                        case 253 /* ClassDeclaration */:
-                        case 254 /* InterfaceDeclaration */:
+                        case 255 /* ClassDeclaration */:
+                        case 256 /* InterfaceDeclaration */:
                             // If we didn't come from static member of class or interface,
                             // add the type parameters into the symbol table
                             // (type parameters of classDeclaration/classExpression and interface are in member property of the symbol.
                             // Note: that the memberFlags come from previous iteration.
-                            if (!isStatic) {
+                            if (!isStaticSymbol) {
                                 copySymbols(getMembersOfSymbol(getSymbolOfNode(location)), meaning & 788968 /* Type */);
                             }
                             break;
-                        case 209 /* FunctionExpression */:
+                        case 211 /* FunctionExpression */:
                             var funcName = location.name;
                             if (funcName) {
                                 copySymbol(location.symbol, meaning);
@@ -80512,7 +82020,7 @@
                     if (ts.introducesArgumentsExoticObject(location)) {
                         copySymbol(argumentsSymbol, meaning);
                     }
-                    isStatic = ts.hasSyntacticModifier(location, 32 /* Static */);
+                    isStaticSymbol = ts.isStatic(location);
                     location = location.parent;
                 }
                 copySymbols(globals, meaning);
@@ -80546,7 +82054,7 @@
                 if (meaning) {
                     source.forEach(function (symbol) {
                         // Similar condition as in `resolveNameHelper`
-                        if (!ts.getDeclarationOfKind(symbol, 271 /* ExportSpecifier */) && !ts.getDeclarationOfKind(symbol, 270 /* NamespaceExport */)) {
+                        if (!ts.getDeclarationOfKind(symbol, 273 /* ExportSpecifier */) && !ts.getDeclarationOfKind(symbol, 272 /* NamespaceExport */)) {
                             copySymbol(symbol, meaning);
                         }
                     });
@@ -80554,25 +82062,25 @@
             }
         }
         function isTypeDeclarationName(name) {
-            return name.kind === 78 /* Identifier */ &&
+            return name.kind === 79 /* Identifier */ &&
                 isTypeDeclaration(name.parent) &&
                 ts.getNameOfDeclaration(name.parent) === name;
         }
         function isTypeDeclaration(node) {
             switch (node.kind) {
-                case 160 /* TypeParameter */:
-                case 253 /* ClassDeclaration */:
-                case 254 /* InterfaceDeclaration */:
-                case 255 /* TypeAliasDeclaration */:
-                case 256 /* EnumDeclaration */:
-                case 335 /* JSDocTypedefTag */:
-                case 328 /* JSDocCallbackTag */:
-                case 329 /* JSDocEnumTag */:
+                case 161 /* TypeParameter */:
+                case 255 /* ClassDeclaration */:
+                case 256 /* InterfaceDeclaration */:
+                case 257 /* TypeAliasDeclaration */:
+                case 258 /* EnumDeclaration */:
+                case 340 /* JSDocTypedefTag */:
+                case 333 /* JSDocCallbackTag */:
+                case 334 /* JSDocEnumTag */:
                     return true;
-                case 263 /* ImportClause */:
+                case 265 /* ImportClause */:
                     return node.isTypeOnly;
-                case 266 /* ImportSpecifier */:
-                case 271 /* ExportSpecifier */:
+                case 268 /* ImportSpecifier */:
+                case 273 /* ExportSpecifier */:
                     return node.parent.parent.isTypeOnly;
                 default:
                     return false;
@@ -80580,25 +82088,16 @@
         }
         // True if the given identifier is part of a type reference
         function isTypeReferenceIdentifier(node) {
-            while (node.parent.kind === 158 /* QualifiedName */) {
+            while (node.parent.kind === 159 /* QualifiedName */) {
                 node = node.parent;
             }
-            return node.parent.kind === 174 /* TypeReference */;
+            return node.parent.kind === 176 /* TypeReference */;
         }
         function isHeritageClauseElementIdentifier(node) {
-            while (node.parent.kind === 202 /* PropertyAccessExpression */) {
+            while (node.parent.kind === 204 /* PropertyAccessExpression */) {
                 node = node.parent;
             }
-            return node.parent.kind === 224 /* ExpressionWithTypeArguments */;
-        }
-        function getJSDocEntryNameReference(node) {
-            while (node.parent.kind === 158 /* QualifiedName */) {
-                node = node.parent;
-            }
-            while (node.parent.kind === 202 /* PropertyAccessExpression */) {
-                node = node.parent;
-            }
-            return ts.isJSDocNameReference(node.parent) ? node.parent : undefined;
+            return node.parent.kind === 226 /* ExpressionWithTypeArguments */;
         }
         function forEachEnclosingClass(node, callback) {
             var result;
@@ -80626,13 +82125,13 @@
             return !!forEachEnclosingClass(node, function (n) { return n === classDeclaration; });
         }
         function getLeftSideOfImportEqualsOrExportAssignment(nodeOnRightSide) {
-            while (nodeOnRightSide.parent.kind === 158 /* QualifiedName */) {
+            while (nodeOnRightSide.parent.kind === 159 /* QualifiedName */) {
                 nodeOnRightSide = nodeOnRightSide.parent;
             }
-            if (nodeOnRightSide.parent.kind === 261 /* ImportEqualsDeclaration */) {
+            if (nodeOnRightSide.parent.kind === 263 /* ImportEqualsDeclaration */) {
                 return nodeOnRightSide.parent.moduleReference === nodeOnRightSide ? nodeOnRightSide.parent : undefined;
             }
-            if (nodeOnRightSide.parent.kind === 267 /* ExportAssignment */) {
+            if (nodeOnRightSide.parent.kind === 269 /* ExportAssignment */) {
                 return nodeOnRightSide.parent.expression === nodeOnRightSide ? nodeOnRightSide.parent : undefined;
             }
             return undefined;
@@ -80658,7 +82157,7 @@
                 node = parent;
                 parent = parent.parent;
             }
-            if (parent && parent.kind === 196 /* ImportType */ && parent.qualifier === node) {
+            if (parent && parent.kind === 198 /* ImportType */ && parent.qualifier === node) {
                 return parent;
             }
             return undefined;
@@ -80668,17 +82167,17 @@
                 return getSymbolOfNode(name.parent);
             }
             if (ts.isInJSFile(name) &&
-                name.parent.kind === 202 /* PropertyAccessExpression */ &&
+                name.parent.kind === 204 /* PropertyAccessExpression */ &&
                 name.parent === name.parent.parent.left) {
                 // Check if this is a special property assignment
-                if (!ts.isPrivateIdentifier(name)) {
+                if (!ts.isPrivateIdentifier(name) && !ts.isJSDocMemberName(name)) {
                     var specialPropertyAssignmentSymbol = getSpecialPropertyAssignmentSymbolFromEntityName(name);
                     if (specialPropertyAssignmentSymbol) {
                         return specialPropertyAssignmentSymbol;
                     }
                 }
             }
-            if (name.parent.kind === 267 /* ExportAssignment */ && ts.isEntityNameExpression(name)) {
+            if (name.parent.kind === 269 /* ExportAssignment */ && ts.isEntityNameExpression(name)) {
                 // Even an entity name expression that doesn't resolve as an entityname may still typecheck as a property access expression
                 var success = resolveEntityName(name, 
                 /*all meanings*/ 111551 /* Value */ | 788968 /* Type */ | 1920 /* Namespace */ | 2097152 /* Alias */, /*ignoreErrors*/ true);
@@ -80686,13 +82185,13 @@
                     return success;
                 }
             }
-            else if (!ts.isPropertyAccessExpression(name) && !ts.isPrivateIdentifier(name) && isInRightSideOfImportOrExportAssignment(name)) {
+            else if (ts.isEntityName(name) && isInRightSideOfImportOrExportAssignment(name)) {
                 // Since we already checked for ExportAssignment, this really could only be an Import
-                var importEqualsDeclaration = ts.getAncestor(name, 261 /* ImportEqualsDeclaration */);
+                var importEqualsDeclaration = ts.getAncestor(name, 263 /* ImportEqualsDeclaration */);
                 ts.Debug.assert(importEqualsDeclaration !== undefined);
                 return getSymbolOfPartOfRightHandSideOfImportEquals(name, /*dontResolveAlias*/ true);
             }
-            if (!ts.isPropertyAccessExpression(name) && !ts.isPrivateIdentifier(name)) {
+            if (ts.isEntityName(name)) {
                 var possibleImportNode = isImportTypeQualifierPart(name);
                 if (possibleImportNode) {
                     getTypeFromTypeNode(possibleImportNode);
@@ -80700,13 +82199,13 @@
                     return sym === unknownSymbol ? undefined : sym;
                 }
             }
-            while (ts.isRightSideOfQualifiedNameOrPropertyAccess(name)) {
+            while (ts.isRightSideOfQualifiedNameOrPropertyAccessOrJSDocMemberName(name)) {
                 name = name.parent;
             }
             if (isHeritageClauseElementIdentifier(name)) {
                 var meaning = 0 /* None */;
                 // In an interface or class, we're definitely interested in a type.
-                if (name.parent.kind === 224 /* ExpressionWithTypeArguments */) {
+                if (name.parent.kind === 226 /* ExpressionWithTypeArguments */) {
                     meaning = 788968 /* Type */;
                     // In a class 'extends' clause we are also looking for a value.
                     if (ts.isExpressionWithTypeArgumentsInClassExtendsClause(name.parent)) {
@@ -80722,10 +82221,10 @@
                     return entityNameSymbol;
                 }
             }
-            if (name.parent.kind === 330 /* JSDocParameterTag */) {
+            if (name.parent.kind === 335 /* JSDocParameterTag */) {
                 return ts.getParameterSymbolFromJSDoc(name.parent);
             }
-            if (name.parent.kind === 160 /* TypeParameter */ && name.parent.parent.kind === 334 /* JSDocTemplateTag */) {
+            if (name.parent.kind === 161 /* TypeParameter */ && name.parent.parent.kind === 339 /* JSDocTemplateTag */) {
                 ts.Debug.assert(!ts.isInJSFile(name)); // Otherwise `isDeclarationName` would have been true.
                 var typeParameter = ts.getTypeParameterFromJsDoc(name.parent);
                 return typeParameter && typeParameter.symbol;
@@ -80735,63 +82234,81 @@
                     // Missing entity name.
                     return undefined;
                 }
-                if (name.kind === 78 /* Identifier */) {
+                var isJSDoc_1 = ts.findAncestor(name, ts.or(ts.isJSDocLinkLike, ts.isJSDocNameReference, ts.isJSDocMemberName));
+                var meaning = isJSDoc_1 ? 788968 /* Type */ | 1920 /* Namespace */ | 111551 /* Value */ : 111551 /* Value */;
+                if (name.kind === 79 /* Identifier */) {
                     if (ts.isJSXTagName(name) && isJsxIntrinsicIdentifier(name)) {
                         var symbol = getIntrinsicTagSymbol(name.parent);
                         return symbol === unknownSymbol ? undefined : symbol;
                     }
-                    return resolveEntityName(name, 111551 /* Value */, /*ignoreErrors*/ false, /*dontResolveAlias*/ true);
+                    var result = resolveEntityName(name, meaning, /*ignoreErrors*/ false, /*dontResolveAlias*/ !isJSDoc_1, ts.getHostSignatureFromJSDoc(name));
+                    if (!result && isJSDoc_1) {
+                        var container = ts.findAncestor(name, ts.or(ts.isClassLike, ts.isInterfaceDeclaration));
+                        if (container) {
+                            return resolveJSDocMemberName(name, getSymbolOfNode(container));
+                        }
+                    }
+                    return result;
                 }
-                else if (name.kind === 202 /* PropertyAccessExpression */ || name.kind === 158 /* QualifiedName */) {
+                else if (name.kind === 204 /* PropertyAccessExpression */ || name.kind === 159 /* QualifiedName */) {
                     var links = getNodeLinks(name);
                     if (links.resolvedSymbol) {
                         return links.resolvedSymbol;
                     }
-                    if (name.kind === 202 /* PropertyAccessExpression */) {
+                    if (name.kind === 204 /* PropertyAccessExpression */) {
                         checkPropertyAccessExpression(name, 0 /* Normal */);
                     }
                     else {
                         checkQualifiedName(name, 0 /* Normal */);
                     }
+                    if (!links.resolvedSymbol && isJSDoc_1 && ts.isQualifiedName(name)) {
+                        return resolveJSDocMemberName(name);
+                    }
                     return links.resolvedSymbol;
                 }
+                else if (ts.isJSDocMemberName(name)) {
+                    return resolveJSDocMemberName(name);
+                }
             }
             else if (isTypeReferenceIdentifier(name)) {
-                var meaning = name.parent.kind === 174 /* TypeReference */ ? 788968 /* Type */ : 1920 /* Namespace */;
+                var meaning = name.parent.kind === 176 /* TypeReference */ ? 788968 /* Type */ : 1920 /* Namespace */;
                 return resolveEntityName(name, meaning, /*ignoreErrors*/ false, /*dontResolveAlias*/ true);
             }
-            var jsdocReference = getJSDocEntryNameReference(name);
-            if (jsdocReference || ts.isJSDocLink(name.parent)) {
-                var meaning = 788968 /* Type */ | 1920 /* Namespace */ | 111551 /* Value */;
-                var symbol = resolveEntityName(name, meaning, /*ignoreErrors*/ false, /*dontResolveAlias*/ false, ts.getHostSignatureFromJSDoc(name));
-                if (symbol) {
-                    return symbol;
-                }
-                else if (ts.isQualifiedName(name) && ts.isIdentifier(name.left)) {
-                    // resolve C.m as a static member first
-                    var links = getNodeLinks(name);
-                    if (links.resolvedSymbol) {
-                        return links.resolvedSymbol;
-                    }
-                    checkQualifiedName(name, 0 /* Normal */);
-                    if (links.resolvedSymbol) {
-                        return links.resolvedSymbol;
-                    }
-                    // then resolve it as an instance member
-                    var s = resolveEntityName(name.left, meaning, /*ignoreErrors*/ false);
-                    if (s) {
-                        var t = getDeclaredTypeOfSymbol(s);
-                        return getPropertyOfType(t, name.right.escapedText);
-                    }
-                }
-            }
-            if (name.parent.kind === 173 /* TypePredicate */) {
+            if (name.parent.kind === 175 /* TypePredicate */) {
                 return resolveEntityName(name, /*meaning*/ 1 /* FunctionScopedVariable */);
             }
             return undefined;
         }
+        /**
+         * Recursively resolve entity names and jsdoc instance references:
+         * 1. K#m as K.prototype.m for a class (or other value) K
+         * 2. K.m as K.prototype.m
+         * 3. I.m as I.m for a type I, or any other I.m that fails to resolve in (1) or (2)
+         *
+         * For unqualified names, a container K may be provided as a second argument.
+         */
+        function resolveJSDocMemberName(name, container) {
+            if (ts.isEntityName(name)) {
+                // resolve static values first
+                var meaning = 788968 /* Type */ | 1920 /* Namespace */ | 111551 /* Value */;
+                var symbol = resolveEntityName(name, meaning, /*ignoreErrors*/ false, /*dontResolveAlias*/ true, ts.getHostSignatureFromJSDoc(name));
+                if (!symbol && ts.isIdentifier(name) && container) {
+                    symbol = getMergedSymbol(getSymbol(getExportsOfSymbol(container), name.escapedText, meaning));
+                }
+                if (symbol) {
+                    return symbol;
+                }
+            }
+            var left = ts.isIdentifier(name) ? container : resolveJSDocMemberName(name.left);
+            var right = ts.isIdentifier(name) ? name.escapedText : name.right.escapedText;
+            if (left) {
+                var proto = left.flags & 111551 /* Value */ && getPropertyOfType(getTypeOfSymbol(left), "prototype");
+                var t = proto ? getTypeOfSymbol(proto) : getDeclaredTypeOfSymbol(left);
+                return getPropertyOfType(t, right);
+            }
+        }
         function getSymbolAtLocation(node, ignoreErrors) {
-            if (node.kind === 298 /* SourceFile */) {
+            if (node.kind === 300 /* SourceFile */) {
                 return ts.isExternalModule(node) ? getMergedSymbol(node.symbol) : undefined;
             }
             var parent = node.parent;
@@ -80810,12 +82327,12 @@
             else if (ts.isLiteralComputedPropertyDeclarationName(node)) {
                 return getSymbolOfNode(parent.parent);
             }
-            if (node.kind === 78 /* Identifier */) {
+            if (node.kind === 79 /* Identifier */) {
                 if (isInRightSideOfImportOrExportAssignment(node)) {
                     return getSymbolOfNameOrPropertyAccessExpression(node);
                 }
-                else if (parent.kind === 199 /* BindingElement */ &&
-                    grandParent.kind === 197 /* ObjectBindingPattern */ &&
+                else if (parent.kind === 201 /* BindingElement */ &&
+                    grandParent.kind === 199 /* ObjectBindingPattern */ &&
                     node === parent.propertyName) {
                     var typeOfPattern = getTypeOfNode(grandParent);
                     var propertyDeclaration = getPropertyOfType(typeOfPattern, node.escapedText);
@@ -80823,14 +82340,24 @@
                         return propertyDeclaration;
                     }
                 }
+                else if (ts.isMetaProperty(parent)) {
+                    var parentType = getTypeOfNode(parent);
+                    var propertyDeclaration = getPropertyOfType(parentType, node.escapedText);
+                    if (propertyDeclaration) {
+                        return propertyDeclaration;
+                    }
+                    if (parent.keywordToken === 103 /* NewKeyword */) {
+                        return checkNewTargetMetaProperty(parent).symbol;
+                    }
+                }
             }
             switch (node.kind) {
-                case 78 /* Identifier */:
-                case 79 /* PrivateIdentifier */:
-                case 202 /* PropertyAccessExpression */:
-                case 158 /* QualifiedName */:
+                case 79 /* Identifier */:
+                case 80 /* PrivateIdentifier */:
+                case 204 /* PropertyAccessExpression */:
+                case 159 /* QualifiedName */:
                     return getSymbolOfNameOrPropertyAccessExpression(node);
-                case 107 /* ThisKeyword */:
+                case 108 /* ThisKeyword */:
                     var container = ts.getThisContainer(node, /*includeArrowFunctions*/ false);
                     if (ts.isFunctionLike(container)) {
                         var sig = getSignatureFromDeclaration(container);
@@ -80842,14 +82369,14 @@
                         return checkExpression(node).symbol;
                     }
                 // falls through
-                case 188 /* ThisType */:
+                case 190 /* ThisType */:
                     return getTypeFromThisTypeNode(node).symbol;
-                case 105 /* SuperKeyword */:
+                case 106 /* SuperKeyword */:
                     return checkExpression(node).symbol;
-                case 132 /* ConstructorKeyword */:
+                case 133 /* ConstructorKeyword */:
                     // constructor keyword for an overload, should take us to the definition if it exist
                     var constructorDeclaration = node.parent;
-                    if (constructorDeclaration && constructorDeclaration.kind === 167 /* Constructor */) {
+                    if (constructorDeclaration && constructorDeclaration.kind === 169 /* Constructor */) {
                         return constructorDeclaration.parent.symbol;
                     }
                     return undefined;
@@ -80860,7 +82387,7 @@
                     // 3). Dynamic import call or require in javascript
                     // 4). type A = import("./f/*gotToDefinitionHere*/oo")
                     if ((ts.isExternalModuleImportEqualsDeclaration(node.parent.parent) && ts.getExternalModuleImportEqualsDeclarationExpression(node.parent.parent) === node) ||
-                        ((node.parent.kind === 262 /* ImportDeclaration */ || node.parent.kind === 268 /* ExportDeclaration */) && node.parent.moduleSpecifier === node) ||
+                        ((node.parent.kind === 264 /* ImportDeclaration */ || node.parent.kind === 270 /* ExportDeclaration */) && node.parent.moduleSpecifier === node) ||
                         ((ts.isInJSFile(node) && ts.isRequireCall(node.parent, /*checkArgumentIsStringLiteralLike*/ false)) || ts.isImportCall(node.parent)) ||
                         (ts.isLiteralTypeNode(node.parent) && ts.isLiteralImportTypeNode(node.parent.parent) && node.parent.parent.argument === node.parent)) {
                         return resolveExternalModuleName(node, node, ignoreErrors);
@@ -80877,21 +82404,35 @@
                             ? getTypeFromTypeNode(grandParent.objectType)
                             : undefined;
                     return objectType && getPropertyOfType(objectType, ts.escapeLeadingUnderscores(node.text));
-                case 87 /* DefaultKeyword */:
-                case 97 /* FunctionKeyword */:
+                case 88 /* DefaultKeyword */:
+                case 98 /* FunctionKeyword */:
                 case 38 /* EqualsGreaterThanToken */:
-                case 83 /* ClassKeyword */:
+                case 84 /* ClassKeyword */:
                     return getSymbolOfNode(node.parent);
-                case 196 /* ImportType */:
+                case 198 /* ImportType */:
                     return ts.isLiteralImportTypeNode(node) ? getSymbolAtLocation(node.argument.literal, ignoreErrors) : undefined;
-                case 92 /* ExportKeyword */:
+                case 93 /* ExportKeyword */:
                     return ts.isExportAssignment(node.parent) ? ts.Debug.checkDefined(node.parent.symbol) : undefined;
+                case 100 /* ImportKeyword */:
+                case 103 /* NewKeyword */:
+                    return ts.isMetaProperty(node.parent) ? checkMetaPropertyKeyword(node.parent).symbol : undefined;
+                case 229 /* MetaProperty */:
+                    return checkExpression(node).symbol;
                 default:
                     return undefined;
             }
         }
+        function getIndexInfosAtLocation(node) {
+            if (ts.isIdentifier(node) && ts.isPropertyAccessExpression(node.parent) && node.parent.name === node) {
+                var keyType_1 = getLiteralTypeFromPropertyName(node);
+                var objectType = getTypeOfExpression(node.parent.expression);
+                var objectTypes = objectType.flags & 1048576 /* Union */ ? objectType.types : [objectType];
+                return ts.flatMap(objectTypes, function (t) { return ts.filter(getIndexInfosOfType(t), function (info) { return isApplicableIndexType(keyType_1, info.keyType); }); });
+            }
+            return undefined;
+        }
         function getShorthandAssignmentValueSymbol(location) {
-            if (location && location.kind === 290 /* ShorthandPropertyAssignment */) {
+            if (location && location.kind === 292 /* ShorthandPropertyAssignment */) {
                 return resolveEntityName(location.name, 111551 /* Value */ | 2097152 /* Alias */);
             }
             return undefined;
@@ -80961,6 +82502,9 @@
                     return declaredType !== errorType ? declaredType : getTypeOfSymbol(symbol);
                 }
             }
+            if (ts.isMetaProperty(node.parent) && node.parent.keywordToken === node.kind) {
+                return checkMetaPropertyKeyword(node.parent);
+            }
             return errorType;
         }
         // Gets the type of object literal or array literal of destructuring assignment.
@@ -80970,23 +82514,23 @@
         // [ a ] from
         //     [a] = [ some array ...]
         function getTypeOfAssignmentPattern(expr) {
-            ts.Debug.assert(expr.kind === 201 /* ObjectLiteralExpression */ || expr.kind === 200 /* ArrayLiteralExpression */);
+            ts.Debug.assert(expr.kind === 203 /* ObjectLiteralExpression */ || expr.kind === 202 /* ArrayLiteralExpression */);
             // If this is from "for of"
             //     for ( { a } of elems) {
             //     }
-            if (expr.parent.kind === 240 /* ForOfStatement */) {
+            if (expr.parent.kind === 242 /* ForOfStatement */) {
                 var iteratedType = checkRightHandSideOfForOf(expr.parent);
                 return checkDestructuringAssignment(expr, iteratedType || errorType);
             }
             // If this is from "for" initializer
             //     for ({a } = elems[0];.....) { }
-            if (expr.parent.kind === 217 /* BinaryExpression */) {
+            if (expr.parent.kind === 219 /* BinaryExpression */) {
                 var iteratedType = getTypeOfExpression(expr.parent.right);
                 return checkDestructuringAssignment(expr, iteratedType || errorType);
             }
             // If this is from nested object binding pattern
             //     for ({ skills: { primary, secondary } } = multiRobot, i = 0; i < 1; i++) {
-            if (expr.parent.kind === 289 /* PropertyAssignment */) {
+            if (expr.parent.kind === 291 /* PropertyAssignment */) {
                 var node_3 = ts.cast(expr.parent.parent, ts.isObjectLiteralExpression);
                 var typeOfParentObjectLiteral = getTypeOfAssignmentPattern(node_3) || errorType;
                 var propertyIndex = ts.indexOfNode(node_3.properties, expr.parent);
@@ -81022,19 +82566,19 @@
          */
         function getParentTypeOfClassElement(node) {
             var classSymbol = getSymbolOfNode(node.parent);
-            return ts.hasSyntacticModifier(node, 32 /* Static */)
+            return ts.isStatic(node)
                 ? getTypeOfSymbol(classSymbol)
                 : getDeclaredTypeOfSymbol(classSymbol);
         }
         function getClassElementPropertyKeyType(element) {
             var name = element.name;
             switch (name.kind) {
-                case 78 /* Identifier */:
-                    return getLiteralType(ts.idText(name));
+                case 79 /* Identifier */:
+                    return getStringLiteralType(ts.idText(name));
                 case 8 /* NumericLiteral */:
                 case 10 /* StringLiteral */:
-                    return getLiteralType(name.text);
-                case 159 /* ComputedPropertyName */:
+                    return getStringLiteralType(name.text);
+                case 160 /* ComputedPropertyName */:
                     var nameType = checkComputedPropertyName(name);
                     return isTypeAssignableToKind(nameType, 12288 /* ESSymbolLike */) ? nameType : stringType;
                 default:
@@ -81152,7 +82696,7 @@
                     }
                     var parentSymbol_1 = getParentOfSymbol(symbol);
                     if (parentSymbol_1) {
-                        if (parentSymbol_1.flags & 512 /* ValueModule */ && ((_a = parentSymbol_1.valueDeclaration) === null || _a === void 0 ? void 0 : _a.kind) === 298 /* SourceFile */) {
+                        if (parentSymbol_1.flags & 512 /* ValueModule */ && ((_a = parentSymbol_1.valueDeclaration) === null || _a === void 0 ? void 0 : _a.kind) === 300 /* SourceFile */) {
                             var symbolFile = parentSymbol_1.valueDeclaration;
                             var referenceFile = ts.getSourceFileOfNode(node);
                             // If `node` accesses an export and that export isn't in the same file, then symbol is a namespace export, so return undefined.
@@ -81184,7 +82728,7 @@
         function isSymbolOfDestructuredElementOfCatchBinding(symbol) {
             return symbol.valueDeclaration
                 && ts.isBindingElement(symbol.valueDeclaration)
-                && ts.walkUpBindingElementsAndPatterns(symbol.valueDeclaration).parent.kind === 288 /* CatchClause */;
+                && ts.walkUpBindingElementsAndPatterns(symbol.valueDeclaration).parent.kind === 290 /* CatchClause */;
         }
         function isSymbolOfDeclarationWithCollidingName(symbol) {
             if (symbol.flags & 418 /* BlockScoped */ && symbol.valueDeclaration && !ts.isSourceFile(symbol.valueDeclaration)) {
@@ -81215,7 +82759,7 @@
                             //       they will not collide with anything
                             var isDeclaredInLoop = nodeLinks_1.flags & 524288 /* BlockScopedBindingInLoop */;
                             var inLoopInitializer = ts.isIterationStatement(container, /*lookInLabeledStatements*/ false);
-                            var inLoopBodyBlock = container.kind === 231 /* Block */ && ts.isIterationStatement(container.parent, /*lookInLabeledStatements*/ false);
+                            var inLoopBodyBlock = container.kind === 233 /* Block */ && ts.isIterationStatement(container.parent, /*lookInLabeledStatements*/ false);
                             links.isDeclarationWithCollidingName = !ts.isBlockScopedContainerTopLevel(container) && (!isDeclaredInLoop || (!inLoopInitializer && !inLoopBodyBlock));
                         }
                         else {
@@ -81256,20 +82800,20 @@
         }
         function isValueAliasDeclaration(node) {
             switch (node.kind) {
-                case 261 /* ImportEqualsDeclaration */:
+                case 263 /* ImportEqualsDeclaration */:
                     return isAliasResolvedToValue(getSymbolOfNode(node) || unknownSymbol);
-                case 263 /* ImportClause */:
-                case 264 /* NamespaceImport */:
-                case 266 /* ImportSpecifier */:
-                case 271 /* ExportSpecifier */:
+                case 265 /* ImportClause */:
+                case 266 /* NamespaceImport */:
+                case 268 /* ImportSpecifier */:
+                case 273 /* ExportSpecifier */:
                     var symbol = getSymbolOfNode(node) || unknownSymbol;
                     return isAliasResolvedToValue(symbol) && !getTypeOnlyAliasDeclaration(symbol);
-                case 268 /* ExportDeclaration */:
+                case 270 /* ExportDeclaration */:
                     var exportClause = node.exportClause;
                     return !!exportClause && (ts.isNamespaceExport(exportClause) ||
                         ts.some(exportClause.elements, isValueAliasDeclaration));
-                case 267 /* ExportAssignment */:
-                    return node.expression && node.expression.kind === 78 /* Identifier */ ?
+                case 269 /* ExportAssignment */:
+                    return node.expression && node.expression.kind === 79 /* Identifier */ ?
                         isAliasResolvedToValue(getSymbolOfNode(node) || unknownSymbol) :
                         true;
             }
@@ -81277,7 +82821,7 @@
         }
         function isTopLevelValueImportEqualsWithEntityName(nodeIn) {
             var node = ts.getParseTreeNode(nodeIn, ts.isImportEqualsDeclaration);
-            if (node === undefined || node.parent.kind !== 298 /* SourceFile */ || !ts.isInternalModuleImportEqualsDeclaration(node)) {
+            if (node === undefined || node.parent.kind !== 300 /* SourceFile */ || !ts.isInternalModuleImportEqualsDeclaration(node)) {
                 // parent is not source file or it is not reference to internal module
                 return false;
             }
@@ -81377,7 +82921,11 @@
             return symbol && getPropertiesOfType(getTypeOfSymbol(symbol)) || ts.emptyArray;
         }
         function getNodeCheckFlags(node) {
-            return getNodeLinks(node).flags || 0;
+            var _a;
+            var nodeId = node.id || 0;
+            if (nodeId < 0 || nodeId >= nodeLinks.length)
+                return 0;
+            return ((_a = nodeLinks[nodeId]) === null || _a === void 0 ? void 0 : _a.flags) || 0;
         }
         function getEnumMemberValue(node) {
             computeEnumMemberValues(node.parent);
@@ -81385,15 +82933,15 @@
         }
         function canHaveConstantValue(node) {
             switch (node.kind) {
-                case 292 /* EnumMember */:
-                case 202 /* PropertyAccessExpression */:
-                case 203 /* ElementAccessExpression */:
+                case 294 /* EnumMember */:
+                case 204 /* PropertyAccessExpression */:
+                case 205 /* ElementAccessExpression */:
                     return true;
             }
             return false;
         }
         function getConstantValue(node) {
-            if (node.kind === 292 /* EnumMember */) {
+            if (node.kind === 294 /* EnumMember */) {
                 return getEnumMemberValue(node);
             }
             var symbol = getNodeLinks(node).resolvedSymbol;
@@ -81410,7 +82958,7 @@
             return !!(type.flags & 524288 /* Object */) && getSignaturesOfType(type, 0 /* Call */).length > 0;
         }
         function getTypeReferenceSerializationKind(typeNameIn, location) {
-            var _a;
+            var _a, _b;
             // ensure both `typeName` and `location` are parse tree nodes.
             var typeName = ts.getParseTreeNode(typeNameIn, ts.isEntityName);
             if (!typeName)
@@ -81421,9 +82969,14 @@
                     return ts.TypeReferenceSerializationKind.Unknown;
             }
             // Resolve the symbol as a value to ensure the type can be reached at runtime during emit.
+            var isTypeOnly = false;
+            if (ts.isQualifiedName(typeName)) {
+                var rootValueSymbol = resolveEntityName(ts.getFirstIdentifier(typeName), 111551 /* Value */, /*ignoreErrors*/ true, /*dontResolveAlias*/ true, location);
+                isTypeOnly = !!((_a = rootValueSymbol === null || rootValueSymbol === void 0 ? void 0 : rootValueSymbol.declarations) === null || _a === void 0 ? void 0 : _a.every(ts.isTypeOnlyImportOrExportDeclaration));
+            }
             var valueSymbol = resolveEntityName(typeName, 111551 /* Value */, /*ignoreErrors*/ true, /*dontResolveAlias*/ true, location);
-            var isTypeOnly = ((_a = valueSymbol === null || valueSymbol === void 0 ? void 0 : valueSymbol.declarations) === null || _a === void 0 ? void 0 : _a.every(ts.isTypeOnlyImportOrExportDeclaration)) || false;
             var resolvedSymbol = valueSymbol && valueSymbol.flags & 2097152 /* Alias */ ? resolveAlias(valueSymbol) : valueSymbol;
+            isTypeOnly || (isTypeOnly = !!((_b = valueSymbol === null || valueSymbol === void 0 ? void 0 : valueSymbol.declarations) === null || _b === void 0 ? void 0 : _b.every(ts.isTypeOnlyImportOrExportDeclaration)));
             // Resolve the symbol as a type so that we can provide a more useful hint for the type serializer.
             var typeSymbol = resolveEntityName(typeName, 788968 /* Type */, /*ignoreErrors*/ true, /*dontResolveAlias*/ false, location);
             if (resolvedSymbol && resolvedSymbol === typeSymbol) {
@@ -81481,7 +83034,7 @@
         function createTypeOfDeclaration(declarationIn, enclosingDeclaration, flags, tracker, addUndefined) {
             var declaration = ts.getParseTreeNode(declarationIn, ts.isVariableLikeOrAccessor);
             if (!declaration) {
-                return ts.factory.createToken(128 /* AnyKeyword */);
+                return ts.factory.createToken(129 /* AnyKeyword */);
             }
             // Get type of the symbol if this is the valid symbol otherwise get type at location
             var symbol = getSymbolOfNode(declaration);
@@ -81500,7 +83053,7 @@
         function createReturnTypeOfSignatureDeclaration(signatureDeclarationIn, enclosingDeclaration, flags, tracker) {
             var signatureDeclaration = ts.getParseTreeNode(signatureDeclarationIn, ts.isFunctionLike);
             if (!signatureDeclaration) {
-                return ts.factory.createToken(128 /* AnyKeyword */);
+                return ts.factory.createToken(129 /* AnyKeyword */);
             }
             var signature = getSignatureFromDeclaration(signatureDeclaration);
             return nodeBuilder.typeToTypeNode(getReturnTypeOfSignature(signature), enclosingDeclaration, flags | 1024 /* MultilineObjectLiterals */, tracker);
@@ -81508,7 +83061,7 @@
         function createTypeOfExpression(exprIn, enclosingDeclaration, flags, tracker) {
             var expr = ts.getParseTreeNode(exprIn, ts.isExpression);
             if (!expr) {
-                return ts.factory.createToken(128 /* AnyKeyword */);
+                return ts.factory.createToken(129 /* AnyKeyword */);
             }
             var type = getWidenedType(getRegularTypeOfExpression(expr));
             return nodeBuilder.typeToTypeNode(type, enclosingDeclaration, flags | 1024 /* MultilineObjectLiterals */, tracker);
@@ -81665,12 +83218,12 @@
                 getJsxFragmentFactoryEntity: getJsxFragmentFactoryEntity,
                 getAllAccessorDeclarations: function (accessor) {
                     accessor = ts.getParseTreeNode(accessor, ts.isGetOrSetAccessorDeclaration); // TODO: GH#18217
-                    var otherKind = accessor.kind === 169 /* SetAccessor */ ? 168 /* GetAccessor */ : 169 /* SetAccessor */;
+                    var otherKind = accessor.kind === 171 /* SetAccessor */ ? 170 /* GetAccessor */ : 171 /* SetAccessor */;
                     var otherAccessor = ts.getDeclarationOfKind(getSymbolOfNode(accessor), otherKind);
                     var firstAccessor = otherAccessor && (otherAccessor.pos < accessor.pos) ? otherAccessor : accessor;
                     var secondAccessor = otherAccessor && (otherAccessor.pos < accessor.pos) ? accessor : otherAccessor;
-                    var setAccessor = accessor.kind === 169 /* SetAccessor */ ? accessor : otherAccessor;
-                    var getAccessor = accessor.kind === 168 /* GetAccessor */ ? accessor : otherAccessor;
+                    var setAccessor = accessor.kind === 171 /* SetAccessor */ ? accessor : otherAccessor;
+                    var getAccessor = accessor.kind === 170 /* GetAccessor */ ? accessor : otherAccessor;
                     return {
                         firstAccessor: firstAccessor,
                         secondAccessor: secondAccessor,
@@ -81686,7 +83239,7 @@
                 },
                 getDeclarationStatementsForSourceFile: function (node, flags, tracker, bundled) {
                     var n = ts.getParseTreeNode(node);
-                    ts.Debug.assert(n && n.kind === 298 /* SourceFile */, "Non-sourcefile node passed into getDeclarationsForSourceFile");
+                    ts.Debug.assert(n && n.kind === 300 /* SourceFile */, "Non-sourcefile node passed into getDeclarationsForSourceFile");
                     var sym = getSymbolOfNode(node);
                     if (!sym) {
                         return !node.locals ? [] : nodeBuilder.symbolTableToDeclarationStatements(node.locals, node, flags, tracker, bundled);
@@ -81723,7 +83276,7 @@
                 return false;
             }
             function isInHeritageClause(node) {
-                return node.parent && node.parent.kind === 224 /* ExpressionWithTypeArguments */ && node.parent.parent && node.parent.parent.kind === 287 /* HeritageClause */;
+                return node.parent && node.parent.kind === 226 /* ExpressionWithTypeArguments */ && node.parent.parent && node.parent.parent.kind === 289 /* HeritageClause */;
             }
             // defined here to avoid outer scope pollution
             function getTypeReferenceDirectivesForEntityName(node) {
@@ -81735,7 +83288,7 @@
                 // qualified names can only be used as types\namespaces
                 // identifiers are treated as values only if they appear in type queries
                 var meaning = 788968 /* Type */ | 1920 /* Namespace */;
-                if ((node.kind === 78 /* Identifier */ && isInTypeQuery(node)) || (node.kind === 202 /* PropertyAccessExpression */ && !isInHeritageClause(node))) {
+                if ((node.kind === 79 /* Identifier */ && isInTypeQuery(node)) || (node.kind === 204 /* PropertyAccessExpression */ && !isInHeritageClause(node))) {
                     meaning = 111551 /* Value */ | 1048576 /* ExportValue */;
                 }
                 var symbol = resolveEntityName(node, meaning, /*ignoreErrors*/ true);
@@ -81783,7 +83336,7 @@
                         break;
                     }
                 }
-                if (current.valueDeclaration && current.valueDeclaration.kind === 298 /* SourceFile */ && current.flags & 512 /* ValueModule */) {
+                if (current.valueDeclaration && current.valueDeclaration.kind === 300 /* SourceFile */ && current.flags & 512 /* ValueModule */) {
                     return false;
                 }
                 // check that at least one declaration of top level symbol originates from type declaration file
@@ -81811,12 +83364,12 @@
             }
         }
         function getExternalModuleFileFromDeclaration(declaration) {
-            var specifier = declaration.kind === 257 /* ModuleDeclaration */ ? ts.tryCast(declaration.name, ts.isStringLiteral) : ts.getExternalModuleName(declaration);
+            var specifier = declaration.kind === 259 /* ModuleDeclaration */ ? ts.tryCast(declaration.name, ts.isStringLiteral) : ts.getExternalModuleName(declaration);
             var moduleSymbol = resolveExternalModuleNameWorker(specifier, specifier, /*moduleNotFoundError*/ undefined); // TODO: GH#18217
             if (!moduleSymbol) {
                 return undefined;
             }
-            return ts.getDeclarationOfKind(moduleSymbol, 298 /* SourceFile */);
+            return ts.getDeclarationOfKind(moduleSymbol, 300 /* SourceFile */);
         }
         function initializeTypeChecker() {
             // Bind all source files and propagate errors
@@ -81902,7 +83455,7 @@
             autoArrayType = createArrayType(autoType);
             if (autoArrayType === emptyObjectType) {
                 // autoArrayType is used as a marker, so even if global Array type is not defined, it needs to be a unique type
-                autoArrayType = createAnonymousType(undefined, emptySymbols, ts.emptyArray, ts.emptyArray, undefined, undefined);
+                autoArrayType = createAnonymousType(undefined, emptySymbols, ts.emptyArray, ts.emptyArray, ts.emptyArray);
             }
             globalReadonlyArrayType = getGlobalTypeOrUndefined("ReadonlyArray", /*arity*/ 1) || globalArrayType;
             anyReadonlyArrayType = globalReadonlyArrayType ? createTypeFromGenericGlobalType(globalReadonlyArrayType, [anyType]) : anyArrayType;
@@ -81970,6 +83523,11 @@
                                         error(location, ts.Diagnostics.This_syntax_requires_an_imported_helper_named_1_with_2_parameters_which_is_not_compatible_with_the_one_in_0_Consider_upgrading_your_version_of_0, ts.externalHelpersModuleNameText, name, 5);
                                     }
                                 }
+                                else if (helper & 1024 /* SpreadArray */) {
+                                    if (!ts.some(getSignaturesOfSymbol(symbol), function (signature) { return getParameterCount(signature) > 2; })) {
+                                        error(location, ts.Diagnostics.This_syntax_requires_an_imported_helper_named_1_with_2_parameters_which_is_not_compatible_with_the_one_in_0_Consider_upgrading_your_version_of_0, ts.externalHelpersModuleNameText, name, 3);
+                                    }
+                                }
                             }
                         }
                     }
@@ -82019,14 +83577,14 @@
                 return false;
             }
             if (!ts.nodeCanBeDecorated(node, node.parent, node.parent.parent)) {
-                if (node.kind === 166 /* MethodDeclaration */ && !ts.nodeIsPresent(node.body)) {
+                if (node.kind === 167 /* MethodDeclaration */ && !ts.nodeIsPresent(node.body)) {
                     return grammarErrorOnFirstToken(node, ts.Diagnostics.A_decorator_can_only_decorate_a_method_implementation_not_an_overload);
                 }
                 else {
                     return grammarErrorOnFirstToken(node, ts.Diagnostics.Decorators_are_not_valid_here);
                 }
             }
-            else if (node.kind === 168 /* GetAccessor */ || node.kind === 169 /* SetAccessor */) {
+            else if (node.kind === 170 /* GetAccessor */ || node.kind === 171 /* SetAccessor */) {
                 var accessors = ts.getAllAccessorDeclarations(node.parent.members, node);
                 if (accessors.firstAccessor.decorators && node === accessors.secondAccessor) {
                     return grammarErrorOnFirstToken(node, ts.Diagnostics.Decorators_cannot_be_applied_to_multiple_get_Slashset_accessors_of_the_same_name);
@@ -82043,21 +83601,21 @@
             var flags = 0 /* None */;
             for (var _i = 0, _a = node.modifiers; _i < _a.length; _i++) {
                 var modifier = _a[_i];
-                if (modifier.kind !== 142 /* ReadonlyKeyword */) {
-                    if (node.kind === 163 /* PropertySignature */ || node.kind === 165 /* MethodSignature */) {
+                if (modifier.kind !== 143 /* ReadonlyKeyword */) {
+                    if (node.kind === 164 /* PropertySignature */ || node.kind === 166 /* MethodSignature */) {
                         return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_type_member, ts.tokenToString(modifier.kind));
                     }
-                    if (node.kind === 172 /* IndexSignature */ && (modifier.kind !== 123 /* StaticKeyword */ || !ts.isClassLike(node.parent))) {
+                    if (node.kind === 174 /* IndexSignature */ && (modifier.kind !== 124 /* StaticKeyword */ || !ts.isClassLike(node.parent))) {
                         return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_an_index_signature, ts.tokenToString(modifier.kind));
                     }
                 }
                 switch (modifier.kind) {
-                    case 84 /* ConstKeyword */:
-                        if (node.kind !== 256 /* EnumDeclaration */) {
-                            return grammarErrorOnNode(node, ts.Diagnostics.A_class_member_cannot_have_the_0_keyword, ts.tokenToString(84 /* ConstKeyword */));
+                    case 85 /* ConstKeyword */:
+                        if (node.kind !== 258 /* EnumDeclaration */) {
+                            return grammarErrorOnNode(node, ts.Diagnostics.A_class_member_cannot_have_the_0_keyword, ts.tokenToString(85 /* ConstKeyword */));
                         }
                         break;
-                    case 156 /* OverrideKeyword */:
+                    case 157 /* OverrideKeyword */:
                         // If node.kind === SyntaxKind.Parameter, checkParameter reports an error if it's not a parameter property.
                         if (flags & 16384 /* Override */) {
                             return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_already_seen, "override");
@@ -82074,9 +83632,9 @@
                         flags |= 16384 /* Override */;
                         lastOverride = modifier;
                         break;
-                    case 122 /* PublicKeyword */:
-                    case 121 /* ProtectedKeyword */:
-                    case 120 /* PrivateKeyword */:
+                    case 123 /* PublicKeyword */:
+                    case 122 /* ProtectedKeyword */:
+                    case 121 /* PrivateKeyword */:
                         var text = visibilityToString(ts.modifierToFlag(modifier.kind));
                         if (flags & 28 /* AccessibilityModifier */) {
                             return grammarErrorOnNode(modifier, ts.Diagnostics.Accessibility_modifier_already_seen);
@@ -82093,11 +83651,11 @@
                         else if (flags & 256 /* Async */) {
                             return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_must_precede_1_modifier, text, "async");
                         }
-                        else if (node.parent.kind === 258 /* ModuleBlock */ || node.parent.kind === 298 /* SourceFile */) {
+                        else if (node.parent.kind === 260 /* ModuleBlock */ || node.parent.kind === 300 /* SourceFile */) {
                             return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_module_or_namespace_element, text);
                         }
                         else if (flags & 128 /* Abstract */) {
-                            if (modifier.kind === 120 /* PrivateKeyword */) {
+                            if (modifier.kind === 121 /* PrivateKeyword */) {
                                 return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_be_used_with_1_modifier, text, "abstract");
                             }
                             else {
@@ -82109,7 +83667,7 @@
                         }
                         flags |= ts.modifierToFlag(modifier.kind);
                         break;
-                    case 123 /* StaticKeyword */:
+                    case 124 /* StaticKeyword */:
                         if (flags & 32 /* Static */) {
                             return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_already_seen, "static");
                         }
@@ -82119,10 +83677,10 @@
                         else if (flags & 256 /* Async */) {
                             return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_must_precede_1_modifier, "static", "async");
                         }
-                        else if (node.parent.kind === 258 /* ModuleBlock */ || node.parent.kind === 298 /* SourceFile */) {
+                        else if (node.parent.kind === 260 /* ModuleBlock */ || node.parent.kind === 300 /* SourceFile */) {
                             return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_module_or_namespace_element, "static");
                         }
-                        else if (node.kind === 161 /* Parameter */) {
+                        else if (node.kind === 162 /* Parameter */) {
                             return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_parameter, "static");
                         }
                         else if (flags & 128 /* Abstract */) {
@@ -82134,18 +83692,18 @@
                         flags |= 32 /* Static */;
                         lastStatic = modifier;
                         break;
-                    case 142 /* ReadonlyKeyword */:
+                    case 143 /* ReadonlyKeyword */:
                         if (flags & 64 /* Readonly */) {
                             return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_already_seen, "readonly");
                         }
-                        else if (node.kind !== 164 /* PropertyDeclaration */ && node.kind !== 163 /* PropertySignature */ && node.kind !== 172 /* IndexSignature */ && node.kind !== 161 /* Parameter */) {
+                        else if (node.kind !== 165 /* PropertyDeclaration */ && node.kind !== 164 /* PropertySignature */ && node.kind !== 174 /* IndexSignature */ && node.kind !== 162 /* Parameter */) {
                             // If node.kind === SyntaxKind.Parameter, checkParameter reports an error if it's not a parameter property.
                             return grammarErrorOnNode(modifier, ts.Diagnostics.readonly_modifier_can_only_appear_on_a_property_declaration_or_index_signature);
                         }
                         flags |= 64 /* Readonly */;
                         lastReadonly = modifier;
                         break;
-                    case 92 /* ExportKeyword */:
+                    case 93 /* ExportKeyword */:
                         if (flags & 1 /* Export */) {
                             return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_already_seen, "export");
                         }
@@ -82161,19 +83719,22 @@
                         else if (ts.isClassLike(node.parent)) {
                             return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_class_elements_of_this_kind, "export");
                         }
-                        else if (node.kind === 161 /* Parameter */) {
+                        else if (node.kind === 162 /* Parameter */) {
                             return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_parameter, "export");
                         }
                         flags |= 1 /* Export */;
                         break;
-                    case 87 /* DefaultKeyword */:
-                        var container = node.parent.kind === 298 /* SourceFile */ ? node.parent : node.parent.parent;
-                        if (container.kind === 257 /* ModuleDeclaration */ && !ts.isAmbientModule(container)) {
+                    case 88 /* DefaultKeyword */:
+                        var container = node.parent.kind === 300 /* SourceFile */ ? node.parent : node.parent.parent;
+                        if (container.kind === 259 /* ModuleDeclaration */ && !ts.isAmbientModule(container)) {
                             return grammarErrorOnNode(modifier, ts.Diagnostics.A_default_export_can_only_be_used_in_an_ECMAScript_style_module);
                         }
+                        else if (!(flags & 1 /* Export */)) {
+                            return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_must_precede_1_modifier, "export", "default");
+                        }
                         flags |= 512 /* Default */;
                         break;
-                    case 133 /* DeclareKeyword */:
+                    case 134 /* DeclareKeyword */:
                         if (flags & 2 /* Ambient */) {
                             return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_already_seen, "declare");
                         }
@@ -82186,10 +83747,10 @@
                         else if (ts.isClassLike(node.parent) && !ts.isPropertyDeclaration(node)) {
                             return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_class_elements_of_this_kind, "declare");
                         }
-                        else if (node.kind === 161 /* Parameter */) {
+                        else if (node.kind === 162 /* Parameter */) {
                             return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_parameter, "declare");
                         }
-                        else if ((node.parent.flags & 8388608 /* Ambient */) && node.parent.kind === 258 /* ModuleBlock */) {
+                        else if ((node.parent.flags & 8388608 /* Ambient */) && node.parent.kind === 260 /* ModuleBlock */) {
                             return grammarErrorOnNode(modifier, ts.Diagnostics.A_declare_modifier_cannot_be_used_in_an_already_ambient_context);
                         }
                         else if (ts.isPrivateIdentifierClassElementDeclaration(node)) {
@@ -82198,19 +83759,19 @@
                         flags |= 2 /* Ambient */;
                         lastDeclare = modifier;
                         break;
-                    case 125 /* AbstractKeyword */:
+                    case 126 /* AbstractKeyword */:
                         if (flags & 128 /* Abstract */) {
                             return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_already_seen, "abstract");
                         }
-                        if (node.kind !== 253 /* ClassDeclaration */ &&
-                            node.kind !== 176 /* ConstructorType */) {
-                            if (node.kind !== 166 /* MethodDeclaration */ &&
-                                node.kind !== 164 /* PropertyDeclaration */ &&
-                                node.kind !== 168 /* GetAccessor */ &&
-                                node.kind !== 169 /* SetAccessor */) {
+                        if (node.kind !== 255 /* ClassDeclaration */ &&
+                            node.kind !== 178 /* ConstructorType */) {
+                            if (node.kind !== 167 /* MethodDeclaration */ &&
+                                node.kind !== 165 /* PropertyDeclaration */ &&
+                                node.kind !== 170 /* GetAccessor */ &&
+                                node.kind !== 171 /* SetAccessor */) {
                                 return grammarErrorOnNode(modifier, ts.Diagnostics.abstract_modifier_can_only_appear_on_a_class_method_or_property_declaration);
                             }
-                            if (!(node.parent.kind === 253 /* ClassDeclaration */ && ts.hasSyntacticModifier(node.parent, 128 /* Abstract */))) {
+                            if (!(node.parent.kind === 255 /* ClassDeclaration */ && ts.hasSyntacticModifier(node.parent, 128 /* Abstract */))) {
                                 return grammarErrorOnNode(modifier, ts.Diagnostics.Abstract_methods_can_only_appear_within_an_abstract_class);
                             }
                             if (flags & 32 /* Static */) {
@@ -82226,19 +83787,19 @@
                                 return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_must_precede_1_modifier, "abstract", "override");
                             }
                         }
-                        if (ts.isNamedDeclaration(node) && node.name.kind === 79 /* PrivateIdentifier */) {
+                        if (ts.isNamedDeclaration(node) && node.name.kind === 80 /* PrivateIdentifier */) {
                             return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_be_used_with_a_private_identifier, "abstract");
                         }
                         flags |= 128 /* Abstract */;
                         break;
-                    case 129 /* AsyncKeyword */:
+                    case 130 /* AsyncKeyword */:
                         if (flags & 256 /* Async */) {
                             return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_already_seen, "async");
                         }
                         else if (flags & 2 /* Ambient */ || node.parent.flags & 8388608 /* Ambient */) {
                             return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_be_used_in_an_ambient_context, "async");
                         }
-                        else if (node.kind === 161 /* Parameter */) {
+                        else if (node.kind === 162 /* Parameter */) {
                             return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_parameter, "async");
                         }
                         if (flags & 128 /* Abstract */) {
@@ -82249,7 +83810,7 @@
                         break;
                 }
             }
-            if (node.kind === 167 /* Constructor */) {
+            if (node.kind === 169 /* Constructor */) {
                 if (flags & 32 /* Static */) {
                     return grammarErrorOnNode(lastStatic, ts.Diagnostics._0_modifier_cannot_appear_on_a_constructor_declaration, "static");
                 }
@@ -82267,13 +83828,13 @@
                 }
                 return false;
             }
-            else if ((node.kind === 262 /* ImportDeclaration */ || node.kind === 261 /* ImportEqualsDeclaration */) && flags & 2 /* Ambient */) {
+            else if ((node.kind === 264 /* ImportDeclaration */ || node.kind === 263 /* ImportEqualsDeclaration */) && flags & 2 /* Ambient */) {
                 return grammarErrorOnNode(lastDeclare, ts.Diagnostics.A_0_modifier_cannot_be_used_with_an_import_declaration, "declare");
             }
-            else if (node.kind === 161 /* Parameter */ && (flags & 16476 /* ParameterPropertyModifier */) && ts.isBindingPattern(node.name)) {
+            else if (node.kind === 162 /* Parameter */ && (flags & 16476 /* ParameterPropertyModifier */) && ts.isBindingPattern(node.name)) {
                 return grammarErrorOnNode(node, ts.Diagnostics.A_parameter_property_may_not_be_declared_using_a_binding_pattern);
             }
-            else if (node.kind === 161 /* Parameter */ && (flags & 16476 /* ParameterPropertyModifier */) && node.dotDotDotToken) {
+            else if (node.kind === 162 /* Parameter */ && (flags & 16476 /* ParameterPropertyModifier */) && node.dotDotDotToken) {
                 return grammarErrorOnNode(node, ts.Diagnostics.A_parameter_property_cannot_be_declared_using_a_rest_parameter);
             }
             if (flags & 256 /* Async */) {
@@ -82294,39 +83855,40 @@
         }
         function shouldReportBadModifier(node) {
             switch (node.kind) {
-                case 168 /* GetAccessor */:
-                case 169 /* SetAccessor */:
-                case 167 /* Constructor */:
-                case 164 /* PropertyDeclaration */:
-                case 163 /* PropertySignature */:
-                case 166 /* MethodDeclaration */:
-                case 165 /* MethodSignature */:
-                case 172 /* IndexSignature */:
-                case 257 /* ModuleDeclaration */:
-                case 262 /* ImportDeclaration */:
-                case 261 /* ImportEqualsDeclaration */:
-                case 268 /* ExportDeclaration */:
-                case 267 /* ExportAssignment */:
-                case 209 /* FunctionExpression */:
-                case 210 /* ArrowFunction */:
-                case 161 /* Parameter */:
+                case 170 /* GetAccessor */:
+                case 171 /* SetAccessor */:
+                case 169 /* Constructor */:
+                case 165 /* PropertyDeclaration */:
+                case 164 /* PropertySignature */:
+                case 167 /* MethodDeclaration */:
+                case 166 /* MethodSignature */:
+                case 174 /* IndexSignature */:
+                case 259 /* ModuleDeclaration */:
+                case 264 /* ImportDeclaration */:
+                case 263 /* ImportEqualsDeclaration */:
+                case 270 /* ExportDeclaration */:
+                case 269 /* ExportAssignment */:
+                case 211 /* FunctionExpression */:
+                case 212 /* ArrowFunction */:
+                case 162 /* Parameter */:
                     return false;
                 default:
-                    if (node.parent.kind === 258 /* ModuleBlock */ || node.parent.kind === 298 /* SourceFile */) {
+                    if (node.parent.kind === 260 /* ModuleBlock */ || node.parent.kind === 300 /* SourceFile */) {
                         return false;
                     }
                     switch (node.kind) {
-                        case 252 /* FunctionDeclaration */:
-                            return nodeHasAnyModifiersExcept(node, 129 /* AsyncKeyword */);
-                        case 253 /* ClassDeclaration */:
-                        case 176 /* ConstructorType */:
-                            return nodeHasAnyModifiersExcept(node, 125 /* AbstractKeyword */);
-                        case 254 /* InterfaceDeclaration */:
-                        case 233 /* VariableStatement */:
-                        case 255 /* TypeAliasDeclaration */:
+                        case 254 /* FunctionDeclaration */:
+                            return nodeHasAnyModifiersExcept(node, 130 /* AsyncKeyword */);
+                        case 255 /* ClassDeclaration */:
+                        case 178 /* ConstructorType */:
+                            return nodeHasAnyModifiersExcept(node, 126 /* AbstractKeyword */);
+                        case 256 /* InterfaceDeclaration */:
+                        case 235 /* VariableStatement */:
+                        case 257 /* TypeAliasDeclaration */:
+                        case 168 /* ClassStaticBlockDeclaration */:
                             return true;
-                        case 256 /* EnumDeclaration */:
-                            return nodeHasAnyModifiersExcept(node, 84 /* ConstKeyword */);
+                        case 258 /* EnumDeclaration */:
+                            return nodeHasAnyModifiersExcept(node, 85 /* ConstKeyword */);
                         default:
                             ts.Debug.fail();
                     }
@@ -82337,10 +83899,10 @@
         }
         function checkGrammarAsyncModifier(node, asyncModifier) {
             switch (node.kind) {
-                case 166 /* MethodDeclaration */:
-                case 252 /* FunctionDeclaration */:
-                case 209 /* FunctionExpression */:
-                case 210 /* ArrowFunction */:
+                case 167 /* MethodDeclaration */:
+                case 254 /* FunctionDeclaration */:
+                case 211 /* FunctionExpression */:
+                case 212 /* ArrowFunction */:
                     return false;
             }
             return grammarErrorOnNode(asyncModifier, ts.Diagnostics._0_modifier_cannot_be_used_here, "async");
@@ -82403,7 +83965,7 @@
                             ts.addRelatedInfo(error(parameter, ts.Diagnostics.This_parameter_is_not_allowed_with_use_strict_directive), ts.createDiagnosticForNode(useStrictDirective_1, ts.Diagnostics.use_strict_directive_used_here));
                         });
                         var diagnostics_2 = nonSimpleParameters.map(function (parameter, index) { return (index === 0 ? ts.createDiagnosticForNode(parameter, ts.Diagnostics.Non_simple_parameter_declared_here) : ts.createDiagnosticForNode(parameter, ts.Diagnostics.and_here)); });
-                        ts.addRelatedInfo.apply(void 0, __spreadArray([error(useStrictDirective_1, ts.Diagnostics.use_strict_directive_cannot_be_used_with_non_simple_parameter_list)], diagnostics_2));
+                        ts.addRelatedInfo.apply(void 0, __spreadArray([error(useStrictDirective_1, ts.Diagnostics.use_strict_directive_cannot_be_used_with_non_simple_parameter_list)], diagnostics_2, false));
                         return true;
                     }
                 }
@@ -82459,15 +84021,12 @@
             if (!parameter.type) {
                 return grammarErrorOnNode(parameter.name, ts.Diagnostics.An_index_signature_parameter_must_have_a_type_annotation);
             }
-            if (parameter.type.kind !== 147 /* StringKeyword */ && parameter.type.kind !== 144 /* NumberKeyword */) {
-                var type = getTypeFromTypeNode(parameter.type);
-                if (type.flags & 4 /* String */ || type.flags & 8 /* Number */) {
-                    return grammarErrorOnNode(parameter.name, ts.Diagnostics.An_index_signature_parameter_type_cannot_be_a_type_alias_Consider_writing_0_Colon_1_Colon_2_instead, ts.getTextOfNode(parameter.name), typeToString(type), typeToString(node.type ? getTypeFromTypeNode(node.type) : anyType));
-                }
-                if (type.flags & 1048576 /* Union */ && allTypesAssignableToKind(type, 384 /* StringOrNumberLiteral */, /*strict*/ true)) {
-                    return grammarErrorOnNode(parameter.name, ts.Diagnostics.An_index_signature_parameter_type_cannot_be_a_union_type_Consider_using_a_mapped_object_type_instead);
-                }
-                return grammarErrorOnNode(parameter.name, ts.Diagnostics.An_index_signature_parameter_type_must_be_either_string_or_number);
+            var type = getTypeFromTypeNode(parameter.type);
+            if (someType(type, function (t) { return !!(t.flags & 8576 /* StringOrNumberLiteralOrUnique */); }) || isGenericType(type)) {
+                return grammarErrorOnNode(parameter.name, ts.Diagnostics.An_index_signature_parameter_type_cannot_be_a_literal_type_or_generic_type_Consider_using_a_mapped_object_type_instead);
+            }
+            if (!everyType(type, isValidIndexKeyType)) {
+                return grammarErrorOnNode(parameter.name, ts.Diagnostics.An_index_signature_parameter_type_must_be_string_number_symbol_or_a_template_literal_type);
             }
             if (!node.type) {
                 return grammarErrorOnNode(node, ts.Diagnostics.An_index_signature_must_have_a_type_annotation);
@@ -82501,7 +84060,7 @@
             if (args) {
                 for (var _i = 0, args_4 = args; _i < args_4.length; _i++) {
                     var arg = args_4[_i];
-                    if (arg.kind === 223 /* OmittedExpression */) {
+                    if (arg.kind === 225 /* OmittedExpression */) {
                         return grammarErrorAtPos(arg, arg.pos, 0, ts.Diagnostics.Argument_expression_expected);
                     }
                 }
@@ -82531,7 +84090,7 @@
             if (!checkGrammarDecoratorsAndModifiers(node) && node.heritageClauses) {
                 for (var _i = 0, _a = node.heritageClauses; _i < _a.length; _i++) {
                     var heritageClause = _a[_i];
-                    if (heritageClause.token === 93 /* ExtendsKeyword */) {
+                    if (heritageClause.token === 94 /* ExtendsKeyword */) {
                         if (seenExtendsClause) {
                             return grammarErrorOnFirstToken(heritageClause, ts.Diagnostics.extends_clause_already_seen);
                         }
@@ -82544,7 +84103,7 @@
                         seenExtendsClause = true;
                     }
                     else {
-                        ts.Debug.assert(heritageClause.token === 116 /* ImplementsKeyword */);
+                        ts.Debug.assert(heritageClause.token === 117 /* ImplementsKeyword */);
                         if (seenImplementsClause) {
                             return grammarErrorOnFirstToken(heritageClause, ts.Diagnostics.implements_clause_already_seen);
                         }
@@ -82560,14 +84119,14 @@
             if (node.heritageClauses) {
                 for (var _i = 0, _a = node.heritageClauses; _i < _a.length; _i++) {
                     var heritageClause = _a[_i];
-                    if (heritageClause.token === 93 /* ExtendsKeyword */) {
+                    if (heritageClause.token === 94 /* ExtendsKeyword */) {
                         if (seenExtendsClause) {
                             return grammarErrorOnFirstToken(heritageClause, ts.Diagnostics.extends_clause_already_seen);
                         }
                         seenExtendsClause = true;
                     }
                     else {
-                        ts.Debug.assert(heritageClause.token === 116 /* ImplementsKeyword */);
+                        ts.Debug.assert(heritageClause.token === 117 /* ImplementsKeyword */);
                         return grammarErrorOnFirstToken(heritageClause, ts.Diagnostics.Interface_declaration_cannot_have_implements_clause);
                     }
                     // Grammar checking heritageClause inside class declaration
@@ -82578,20 +84137,20 @@
         }
         function checkGrammarComputedPropertyName(node) {
             // If node is not a computedPropertyName, just skip the grammar checking
-            if (node.kind !== 159 /* ComputedPropertyName */) {
+            if (node.kind !== 160 /* ComputedPropertyName */) {
                 return false;
             }
             var computedPropertyName = node;
-            if (computedPropertyName.expression.kind === 217 /* BinaryExpression */ && computedPropertyName.expression.operatorToken.kind === 27 /* CommaToken */) {
+            if (computedPropertyName.expression.kind === 219 /* BinaryExpression */ && computedPropertyName.expression.operatorToken.kind === 27 /* CommaToken */) {
                 return grammarErrorOnNode(computedPropertyName.expression, ts.Diagnostics.A_comma_expression_is_not_allowed_in_a_computed_property_name);
             }
             return false;
         }
         function checkGrammarForGenerator(node) {
             if (node.asteriskToken) {
-                ts.Debug.assert(node.kind === 252 /* FunctionDeclaration */ ||
-                    node.kind === 209 /* FunctionExpression */ ||
-                    node.kind === 166 /* MethodDeclaration */);
+                ts.Debug.assert(node.kind === 254 /* FunctionDeclaration */ ||
+                    node.kind === 211 /* FunctionExpression */ ||
+                    node.kind === 167 /* MethodDeclaration */);
                 if (node.flags & 8388608 /* Ambient */) {
                     return grammarErrorOnNode(node.asteriskToken, ts.Diagnostics.Generators_are_not_allowed_in_an_ambient_context);
                 }
@@ -82610,7 +84169,7 @@
             var seen = new ts.Map();
             for (var _i = 0, _a = node.properties; _i < _a.length; _i++) {
                 var prop = _a[_i];
-                if (prop.kind === 291 /* SpreadAssignment */) {
+                if (prop.kind === 293 /* SpreadAssignment */) {
                     if (inDestructuring) {
                         // a rest property cannot be destructured any further
                         var expression = ts.skipParentheses(prop.expression);
@@ -82621,16 +84180,16 @@
                     continue;
                 }
                 var name = prop.name;
-                if (name.kind === 159 /* ComputedPropertyName */) {
+                if (name.kind === 160 /* ComputedPropertyName */) {
                     // If the name is not a ComputedPropertyName, the grammar checking will skip it
                     checkGrammarComputedPropertyName(name);
                 }
-                if (prop.kind === 290 /* ShorthandPropertyAssignment */ && !inDestructuring && prop.objectAssignmentInitializer) {
+                if (prop.kind === 292 /* ShorthandPropertyAssignment */ && !inDestructuring && prop.objectAssignmentInitializer) {
                     // having objectAssignmentInitializer is only valid in ObjectAssignmentPattern
                     // outside of destructuring it is a syntax error
                     return grammarErrorOnNode(prop.equalsToken, ts.Diagnostics.Did_you_mean_to_use_a_Colon_An_can_only_follow_a_property_name_when_the_containing_object_literal_is_part_of_a_destructuring_pattern);
                 }
-                if (name.kind === 79 /* PrivateIdentifier */) {
+                if (name.kind === 80 /* PrivateIdentifier */) {
                     grammarErrorOnNode(name, ts.Diagnostics.Private_identifiers_are_not_allowed_outside_class_bodies);
                 }
                 // Modifiers are never allowed on properties except for 'async' on a method declaration
@@ -82638,7 +84197,7 @@
                     // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion
                     for (var _b = 0, _c = prop.modifiers; _b < _c.length; _b++) { // TODO: GH#19955
                         var mod = _c[_b];
-                        if (mod.kind !== 129 /* AsyncKeyword */ || prop.kind !== 166 /* MethodDeclaration */) {
+                        if (mod.kind !== 130 /* AsyncKeyword */ || prop.kind !== 167 /* MethodDeclaration */) {
                             grammarErrorOnNode(mod, ts.Diagnostics._0_modifier_cannot_be_used_here, ts.getTextOfNode(mod));
                         }
                     }
@@ -82653,10 +84212,10 @@
                 // and either both previous and propId.descriptor have[[Get]] fields or both previous and propId.descriptor have[[Set]] fields
                 var currentKind = void 0;
                 switch (prop.kind) {
-                    case 290 /* ShorthandPropertyAssignment */:
+                    case 292 /* ShorthandPropertyAssignment */:
                         checkGrammarForInvalidExclamationToken(prop.exclamationToken, ts.Diagnostics.A_definite_assignment_assertion_is_not_permitted_in_this_context);
                     // falls through
-                    case 289 /* PropertyAssignment */:
+                    case 291 /* PropertyAssignment */:
                         // Grammar checking for computedPropertyName and shorthandPropertyAssignment
                         checkGrammarForInvalidQuestionMark(prop.questionToken, ts.Diagnostics.An_object_member_cannot_be_declared_optional);
                         if (name.kind === 8 /* NumericLiteral */) {
@@ -82664,13 +84223,13 @@
                         }
                         currentKind = 4 /* PropertyAssignment */;
                         break;
-                    case 166 /* MethodDeclaration */:
+                    case 167 /* MethodDeclaration */:
                         currentKind = 8 /* Method */;
                         break;
-                    case 168 /* GetAccessor */:
+                    case 170 /* GetAccessor */:
                         currentKind = 1 /* GetAccessor */;
                         break;
-                    case 169 /* SetAccessor */:
+                    case 171 /* SetAccessor */:
                         currentKind = 2 /* SetAccessor */;
                         break;
                     default:
@@ -82710,7 +84269,7 @@
             var seen = new ts.Map();
             for (var _i = 0, _a = node.attributes.properties; _i < _a.length; _i++) {
                 var attr = _a[_i];
-                if (attr.kind === 283 /* JsxSpreadAttribute */) {
+                if (attr.kind === 285 /* JsxSpreadAttribute */) {
                     continue;
                 }
                 var name = attr.name, initializer = attr.initializer;
@@ -82720,7 +84279,7 @@
                 else {
                     return grammarErrorOnNode(name, ts.Diagnostics.JSX_elements_cannot_have_multiple_attributes_with_the_same_name);
                 }
-                if (initializer && initializer.kind === 284 /* JsxExpression */ && !initializer.expression) {
+                if (initializer && initializer.kind === 286 /* JsxExpression */ && !initializer.expression) {
                     return grammarErrorOnNode(initializer, ts.Diagnostics.JSX_attributes_must_only_be_assigned_a_non_empty_expression);
                 }
             }
@@ -82755,7 +84314,7 @@
             if (checkGrammarStatementInAmbientContext(forInOrOfStatement)) {
                 return true;
             }
-            if (forInOrOfStatement.kind === 240 /* ForOfStatement */ && forInOrOfStatement.awaitModifier) {
+            if (forInOrOfStatement.kind === 242 /* ForOfStatement */ && forInOrOfStatement.awaitModifier) {
                 if (!(forInOrOfStatement.flags & 32768 /* AwaitContext */)) {
                     var sourceFile = ts.getSourceFileOfNode(forInOrOfStatement);
                     if (ts.isInTopLevelContext(forInOrOfStatement)) {
@@ -82773,7 +84332,7 @@
                         if (!hasParseDiagnostics(sourceFile)) {
                             var diagnostic = ts.createDiagnosticForNode(forInOrOfStatement.awaitModifier, ts.Diagnostics.for_await_loops_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules);
                             var func = ts.getContainingFunction(forInOrOfStatement);
-                            if (func && func.kind !== 167 /* Constructor */) {
+                            if (func && func.kind !== 169 /* Constructor */) {
                                 ts.Debug.assert((ts.getFunctionFlags(func) & 2 /* Async */) === 0, "Enclosing function should never be an async function.");
                                 var relatedInfo = ts.createDiagnosticForNode(func, ts.Diagnostics.Did_you_mean_to_mark_this_function_as_async);
                                 ts.addRelatedInfo(diagnostic, relatedInfo);
@@ -82785,7 +84344,12 @@
                     return false;
                 }
             }
-            if (forInOrOfStatement.initializer.kind === 251 /* VariableDeclarationList */) {
+            if (ts.isForOfStatement(forInOrOfStatement) && !(forInOrOfStatement.flags & 32768 /* AwaitContext */) &&
+                ts.isIdentifier(forInOrOfStatement.initializer) && forInOrOfStatement.initializer.escapedText === "async") {
+                grammarErrorOnNode(forInOrOfStatement.initializer, ts.Diagnostics.The_left_hand_side_of_a_for_of_statement_may_not_be_async);
+                return false;
+            }
+            if (forInOrOfStatement.initializer.kind === 253 /* VariableDeclarationList */) {
                 var variableList = forInOrOfStatement.initializer;
                 if (!checkGrammarVariableDeclarationList(variableList)) {
                     var declarations = variableList.declarations;
@@ -82800,20 +84364,20 @@
                         return false;
                     }
                     if (declarations.length > 1) {
-                        var diagnostic = forInOrOfStatement.kind === 239 /* ForInStatement */
+                        var diagnostic = forInOrOfStatement.kind === 241 /* ForInStatement */
                             ? ts.Diagnostics.Only_a_single_variable_declaration_is_allowed_in_a_for_in_statement
                             : ts.Diagnostics.Only_a_single_variable_declaration_is_allowed_in_a_for_of_statement;
                         return grammarErrorOnFirstToken(variableList.declarations[1], diagnostic);
                     }
                     var firstDeclaration = declarations[0];
                     if (firstDeclaration.initializer) {
-                        var diagnostic = forInOrOfStatement.kind === 239 /* ForInStatement */
+                        var diagnostic = forInOrOfStatement.kind === 241 /* ForInStatement */
                             ? ts.Diagnostics.The_variable_declaration_of_a_for_in_statement_cannot_have_an_initializer
                             : ts.Diagnostics.The_variable_declaration_of_a_for_of_statement_cannot_have_an_initializer;
                         return grammarErrorOnNode(firstDeclaration.name, diagnostic);
                     }
                     if (firstDeclaration.type) {
-                        var diagnostic = forInOrOfStatement.kind === 239 /* ForInStatement */
+                        var diagnostic = forInOrOfStatement.kind === 241 /* ForInStatement */
                             ? ts.Diagnostics.The_left_hand_side_of_a_for_in_statement_cannot_use_a_type_annotation
                             : ts.Diagnostics.The_left_hand_side_of_a_for_of_statement_cannot_use_a_type_annotation;
                         return grammarErrorOnNode(firstDeclaration, diagnostic);
@@ -82823,7 +84387,7 @@
             return false;
         }
         function checkGrammarAccessor(accessor) {
-            if (!(accessor.flags & 8388608 /* Ambient */) && (accessor.parent.kind !== 178 /* TypeLiteral */) && (accessor.parent.kind !== 254 /* InterfaceDeclaration */)) {
+            if (!(accessor.flags & 8388608 /* Ambient */) && (accessor.parent.kind !== 180 /* TypeLiteral */) && (accessor.parent.kind !== 256 /* InterfaceDeclaration */)) {
                 if (languageVersion < 1 /* ES5 */) {
                     return grammarErrorOnNode(accessor.name, ts.Diagnostics.Accessors_are_only_available_when_targeting_ECMAScript_5_and_higher);
                 }
@@ -82838,7 +84402,7 @@
                 if (ts.hasSyntacticModifier(accessor, 128 /* Abstract */)) {
                     return grammarErrorOnNode(accessor, ts.Diagnostics.An_abstract_accessor_cannot_have_an_implementation);
                 }
-                if (accessor.parent.kind === 178 /* TypeLiteral */ || accessor.parent.kind === 254 /* InterfaceDeclaration */) {
+                if (accessor.parent.kind === 180 /* TypeLiteral */ || accessor.parent.kind === 256 /* InterfaceDeclaration */) {
                     return grammarErrorOnNode(accessor.body, ts.Diagnostics.An_implementation_cannot_be_declared_in_ambient_contexts);
                 }
             }
@@ -82846,11 +84410,11 @@
                 return grammarErrorOnNode(accessor.name, ts.Diagnostics.An_accessor_cannot_have_type_parameters);
             }
             if (!doesAccessorHaveCorrectParameterCount(accessor)) {
-                return grammarErrorOnNode(accessor.name, accessor.kind === 168 /* GetAccessor */ ?
+                return grammarErrorOnNode(accessor.name, accessor.kind === 170 /* GetAccessor */ ?
                     ts.Diagnostics.A_get_accessor_cannot_have_parameters :
                     ts.Diagnostics.A_set_accessor_must_have_exactly_one_parameter);
             }
-            if (accessor.kind === 169 /* SetAccessor */) {
+            if (accessor.kind === 171 /* SetAccessor */) {
                 if (accessor.type) {
                     return grammarErrorOnNode(accessor.name, ts.Diagnostics.A_set_accessor_cannot_have_a_return_type_annotation);
                 }
@@ -82872,17 +84436,17 @@
          * A set accessor has one parameter or a `this` parameter and one more parameter.
          */
         function doesAccessorHaveCorrectParameterCount(accessor) {
-            return getAccessorThisParameter(accessor) || accessor.parameters.length === (accessor.kind === 168 /* GetAccessor */ ? 0 : 1);
+            return getAccessorThisParameter(accessor) || accessor.parameters.length === (accessor.kind === 170 /* GetAccessor */ ? 0 : 1);
         }
         function getAccessorThisParameter(accessor) {
-            if (accessor.parameters.length === (accessor.kind === 168 /* GetAccessor */ ? 1 : 2)) {
+            if (accessor.parameters.length === (accessor.kind === 170 /* GetAccessor */ ? 1 : 2)) {
                 return ts.getThisParameter(accessor);
             }
         }
         function checkGrammarTypeOperatorNode(node) {
-            if (node.operator === 151 /* UniqueKeyword */) {
-                if (node.type.kind !== 148 /* SymbolKeyword */) {
-                    return grammarErrorOnNode(node.type, ts.Diagnostics._0_expected, ts.tokenToString(148 /* SymbolKeyword */));
+            if (node.operator === 152 /* UniqueKeyword */) {
+                if (node.type.kind !== 149 /* SymbolKeyword */) {
+                    return grammarErrorOnNode(node.type, ts.Diagnostics._0_expected, ts.tokenToString(149 /* SymbolKeyword */));
                 }
                 var parent = ts.walkUpParenthesizedTypes(node.parent);
                 if (ts.isInJSFile(parent) && ts.isJSDocTypeExpression(parent)) {
@@ -82893,9 +84457,9 @@
                     }
                 }
                 switch (parent.kind) {
-                    case 250 /* VariableDeclaration */:
+                    case 252 /* VariableDeclaration */:
                         var decl = parent;
-                        if (decl.name.kind !== 78 /* Identifier */) {
+                        if (decl.name.kind !== 79 /* Identifier */) {
                             return grammarErrorOnNode(node, ts.Diagnostics.unique_symbol_types_may_not_be_used_on_a_variable_declaration_with_a_binding_name);
                         }
                         if (!ts.isVariableDeclarationInVariableStatement(decl)) {
@@ -82905,13 +84469,13 @@
                             return grammarErrorOnNode(parent.name, ts.Diagnostics.A_variable_whose_type_is_a_unique_symbol_type_must_be_const);
                         }
                         break;
-                    case 164 /* PropertyDeclaration */:
-                        if (!ts.hasSyntacticModifier(parent, 32 /* Static */) ||
-                            !ts.hasEffectiveModifier(parent, 64 /* Readonly */)) {
+                    case 165 /* PropertyDeclaration */:
+                        if (!ts.isStatic(parent) ||
+                            !ts.hasEffectiveReadonlyModifier(parent)) {
                             return grammarErrorOnNode(parent.name, ts.Diagnostics.A_property_of_a_class_whose_type_is_a_unique_symbol_type_must_be_both_static_and_readonly);
                         }
                         break;
-                    case 163 /* PropertySignature */:
+                    case 164 /* PropertySignature */:
                         if (!ts.hasSyntacticModifier(parent, 64 /* Readonly */)) {
                             return grammarErrorOnNode(parent.name, ts.Diagnostics.A_property_of_an_interface_or_type_literal_whose_type_is_a_unique_symbol_type_must_be_readonly);
                         }
@@ -82920,9 +84484,9 @@
                         return grammarErrorOnNode(node, ts.Diagnostics.unique_symbol_types_are_not_allowed_here);
                 }
             }
-            else if (node.operator === 142 /* ReadonlyKeyword */) {
-                if (node.type.kind !== 179 /* ArrayType */ && node.type.kind !== 180 /* TupleType */) {
-                    return grammarErrorOnFirstToken(node, ts.Diagnostics.readonly_type_modifier_is_only_permitted_on_array_and_tuple_literal_types, ts.tokenToString(148 /* SymbolKeyword */));
+            else if (node.operator === 143 /* ReadonlyKeyword */) {
+                if (node.type.kind !== 181 /* ArrayType */ && node.type.kind !== 182 /* TupleType */) {
+                    return grammarErrorOnFirstToken(node, ts.Diagnostics.readonly_type_modifier_is_only_permitted_on_array_and_tuple_literal_types, ts.tokenToString(149 /* SymbolKeyword */));
                 }
             }
         }
@@ -82935,10 +84499,10 @@
             if (checkGrammarFunctionLikeDeclaration(node)) {
                 return true;
             }
-            if (node.kind === 166 /* MethodDeclaration */) {
-                if (node.parent.kind === 201 /* ObjectLiteralExpression */) {
+            if (node.kind === 167 /* MethodDeclaration */) {
+                if (node.parent.kind === 203 /* ObjectLiteralExpression */) {
                     // We only disallow modifier on a method declaration if it is a property of object-literal-expression
-                    if (node.modifiers && !(node.modifiers.length === 1 && ts.first(node.modifiers).kind === 129 /* AsyncKeyword */)) {
+                    if (node.modifiers && !(node.modifiers.length === 1 && ts.first(node.modifiers).kind === 130 /* AsyncKeyword */)) {
                         return grammarErrorOnFirstToken(node, ts.Diagnostics.Modifiers_cannot_appear_here);
                     }
                     else if (checkGrammarForInvalidQuestionMark(node.questionToken, ts.Diagnostics.An_object_member_cannot_be_declared_optional)) {
@@ -82967,29 +84531,29 @@
                 if (node.flags & 8388608 /* Ambient */) {
                     return checkGrammarForInvalidDynamicName(node.name, ts.Diagnostics.A_computed_property_name_in_an_ambient_context_must_refer_to_an_expression_whose_type_is_a_literal_type_or_a_unique_symbol_type);
                 }
-                else if (node.kind === 166 /* MethodDeclaration */ && !node.body) {
+                else if (node.kind === 167 /* MethodDeclaration */ && !node.body) {
                     return checkGrammarForInvalidDynamicName(node.name, ts.Diagnostics.A_computed_property_name_in_a_method_overload_must_refer_to_an_expression_whose_type_is_a_literal_type_or_a_unique_symbol_type);
                 }
             }
-            else if (node.parent.kind === 254 /* InterfaceDeclaration */) {
+            else if (node.parent.kind === 256 /* InterfaceDeclaration */) {
                 return checkGrammarForInvalidDynamicName(node.name, ts.Diagnostics.A_computed_property_name_in_an_interface_must_refer_to_an_expression_whose_type_is_a_literal_type_or_a_unique_symbol_type);
             }
-            else if (node.parent.kind === 178 /* TypeLiteral */) {
+            else if (node.parent.kind === 180 /* TypeLiteral */) {
                 return checkGrammarForInvalidDynamicName(node.name, ts.Diagnostics.A_computed_property_name_in_a_type_literal_must_refer_to_an_expression_whose_type_is_a_literal_type_or_a_unique_symbol_type);
             }
         }
         function checkGrammarBreakOrContinueStatement(node) {
             var current = node;
             while (current) {
-                if (ts.isFunctionLike(current)) {
+                if (ts.isFunctionLikeOrClassStaticBlockDeclaration(current)) {
                     return grammarErrorOnNode(node, ts.Diagnostics.Jump_target_cannot_cross_function_boundary);
                 }
                 switch (current.kind) {
-                    case 246 /* LabeledStatement */:
+                    case 248 /* LabeledStatement */:
                         if (node.label && current.label.escapedText === node.label.escapedText) {
                             // found matching label - verify that label usage is correct
                             // continue can only target labels that are on iteration statements
-                            var isMisplacedContinueLabel = node.kind === 241 /* ContinueStatement */
+                            var isMisplacedContinueLabel = node.kind === 243 /* ContinueStatement */
                                 && !ts.isIterationStatement(current.statement, /*lookInLabeledStatement*/ true);
                             if (isMisplacedContinueLabel) {
                                 return grammarErrorOnNode(node, ts.Diagnostics.A_continue_statement_can_only_jump_to_a_label_of_an_enclosing_iteration_statement);
@@ -82997,8 +84561,8 @@
                             return false;
                         }
                         break;
-                    case 245 /* SwitchStatement */:
-                        if (node.kind === 242 /* BreakStatement */ && !node.label) {
+                    case 247 /* SwitchStatement */:
+                        if (node.kind === 244 /* BreakStatement */ && !node.label) {
                             // unlabeled break within switch statement - ok
                             return false;
                         }
@@ -83013,13 +84577,13 @@
                 current = current.parent;
             }
             if (node.label) {
-                var message = node.kind === 242 /* BreakStatement */
+                var message = node.kind === 244 /* BreakStatement */
                     ? ts.Diagnostics.A_break_statement_can_only_jump_to_a_label_of_an_enclosing_statement
                     : ts.Diagnostics.A_continue_statement_can_only_jump_to_a_label_of_an_enclosing_iteration_statement;
                 return grammarErrorOnNode(node, message);
             }
             else {
-                var message = node.kind === 242 /* BreakStatement */
+                var message = node.kind === 244 /* BreakStatement */
                     ? ts.Diagnostics.A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement
                     : ts.Diagnostics.A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement;
                 return grammarErrorOnNode(node, message);
@@ -83043,12 +84607,12 @@
         }
         function isStringOrNumberLiteralExpression(expr) {
             return ts.isStringOrNumericLiteralLike(expr) ||
-                expr.kind === 215 /* PrefixUnaryExpression */ && expr.operator === 40 /* MinusToken */ &&
+                expr.kind === 217 /* PrefixUnaryExpression */ && expr.operator === 40 /* MinusToken */ &&
                     expr.operand.kind === 8 /* NumericLiteral */;
         }
         function isBigIntLiteralExpression(expr) {
             return expr.kind === 9 /* BigIntLiteral */ ||
-                expr.kind === 215 /* PrefixUnaryExpression */ && expr.operator === 40 /* MinusToken */ &&
+                expr.kind === 217 /* PrefixUnaryExpression */ && expr.operator === 40 /* MinusToken */ &&
                     expr.operand.kind === 9 /* BigIntLiteral */;
         }
         function isSimpleLiteralEnumReference(expr) {
@@ -83062,7 +84626,7 @@
             if (initializer) {
                 var isInvalidInitializer = !(isStringOrNumberLiteralExpression(initializer) ||
                     isSimpleLiteralEnumReference(initializer) ||
-                    initializer.kind === 109 /* TrueKeyword */ || initializer.kind === 94 /* FalseKeyword */ ||
+                    initializer.kind === 110 /* TrueKeyword */ || initializer.kind === 95 /* FalseKeyword */ ||
                     isBigIntLiteralExpression(initializer));
                 var isConstOrReadonly = ts.isDeclarationReadonly(node) || ts.isVariableDeclaration(node) && ts.isVarConst(node);
                 if (isConstOrReadonly && !node.type) {
@@ -83079,7 +84643,7 @@
             }
         }
         function checkGrammarVariableDeclaration(node) {
-            if (node.parent.parent.kind !== 239 /* ForInStatement */ && node.parent.parent.kind !== 240 /* ForOfStatement */) {
+            if (node.parent.parent.kind !== 241 /* ForInStatement */ && node.parent.parent.kind !== 242 /* ForOfStatement */) {
                 if (node.flags & 8388608 /* Ambient */) {
                     checkAmbientInitializer(node);
                 }
@@ -83092,7 +84656,7 @@
                     }
                 }
             }
-            if (node.exclamationToken && (node.parent.parent.kind !== 233 /* VariableStatement */ || !node.type || node.initializer || node.flags & 8388608 /* Ambient */)) {
+            if (node.exclamationToken && (node.parent.parent.kind !== 235 /* VariableStatement */ || !node.type || node.initializer || node.flags & 8388608 /* Ambient */)) {
                 var message = node.initializer
                     ? ts.Diagnostics.Declarations_with_initializers_cannot_also_have_definite_assignment_assertions
                     : !node.type
@@ -83115,7 +84679,7 @@
             return checkLetConstNames && checkGrammarNameInLetOrConstDeclarations(node.name);
         }
         function checkESModuleMarker(name) {
-            if (name.kind === 78 /* Identifier */) {
+            if (name.kind === 79 /* Identifier */) {
                 if (ts.idText(name) === "__esModule") {
                     return grammarErrorOnNodeSkippedOn("noEmit", name, ts.Diagnostics.Identifier_expected_esModule_is_reserved_as_an_exported_marker_when_transforming_ECMAScript_modules);
                 }
@@ -83132,8 +84696,8 @@
             return false;
         }
         function checkGrammarNameInLetOrConstDeclarations(name) {
-            if (name.kind === 78 /* Identifier */) {
-                if (name.originalKeywordKind === 118 /* LetKeyword */) {
+            if (name.kind === 79 /* Identifier */) {
+                if (name.originalKeywordKind === 119 /* LetKeyword */) {
                     return grammarErrorOnNode(name, ts.Diagnostics.let_is_not_allowed_to_be_used_as_a_name_in_let_or_const_declarations);
                 }
             }
@@ -83160,15 +84724,15 @@
         }
         function allowLetAndConstDeclarations(parent) {
             switch (parent.kind) {
-                case 235 /* IfStatement */:
-                case 236 /* DoStatement */:
-                case 237 /* WhileStatement */:
-                case 244 /* WithStatement */:
-                case 238 /* ForStatement */:
-                case 239 /* ForInStatement */:
-                case 240 /* ForOfStatement */:
+                case 237 /* IfStatement */:
+                case 238 /* DoStatement */:
+                case 239 /* WhileStatement */:
+                case 246 /* WithStatement */:
+                case 240 /* ForStatement */:
+                case 241 /* ForInStatement */:
+                case 242 /* ForOfStatement */:
                     return false;
-                case 246 /* LabeledStatement */:
+                case 248 /* LabeledStatement */:
                     return allowLetAndConstDeclarations(parent.parent);
             }
             return true;
@@ -83186,12 +84750,12 @@
         function checkGrammarMetaProperty(node) {
             var escapedText = node.name.escapedText;
             switch (node.keywordToken) {
-                case 102 /* NewKeyword */:
+                case 103 /* NewKeyword */:
                     if (escapedText !== "target") {
                         return grammarErrorOnNode(node.name, ts.Diagnostics._0_is_not_a_valid_meta_property_for_keyword_1_Did_you_mean_2, node.name.escapedText, ts.tokenToString(node.keywordToken), "target");
                     }
                     break;
-                case 99 /* ImportKeyword */:
+                case 100 /* ImportKeyword */:
                     if (escapedText !== "meta") {
                         return grammarErrorOnNode(node.name, ts.Diagnostics._0_is_not_a_valid_meta_property_for_keyword_1_Did_you_mean_2, node.name.escapedText, ts.tokenToString(node.keywordToken), "meta");
                     }
@@ -83260,7 +84824,7 @@
                     return grammarErrorOnNode(node.name, ts.Diagnostics.Private_identifiers_are_only_available_when_targeting_ECMAScript_2015_and_higher);
                 }
             }
-            else if (node.parent.kind === 254 /* InterfaceDeclaration */) {
+            else if (node.parent.kind === 256 /* InterfaceDeclaration */) {
                 if (checkGrammarForInvalidDynamicName(node.name, ts.Diagnostics.A_computed_property_name_in_an_interface_must_refer_to_an_expression_whose_type_is_a_literal_type_or_a_unique_symbol_type)) {
                     return true;
                 }
@@ -83268,7 +84832,7 @@
                     return grammarErrorOnNode(node.initializer, ts.Diagnostics.An_interface_property_cannot_have_an_initializer);
                 }
             }
-            else if (node.parent.kind === 178 /* TypeLiteral */) {
+            else if (node.parent.kind === 180 /* TypeLiteral */) {
                 if (checkGrammarForInvalidDynamicName(node.name, ts.Diagnostics.A_computed_property_name_in_a_type_literal_must_refer_to_an_expression_whose_type_is_a_literal_type_or_a_unique_symbol_type)) {
                     return true;
                 }
@@ -83280,7 +84844,7 @@
                 checkAmbientInitializer(node);
             }
             if (ts.isPropertyDeclaration(node) && node.exclamationToken && (!ts.isClassLike(node.parent) || !node.type || node.initializer ||
-                node.flags & 8388608 /* Ambient */ || ts.hasSyntacticModifier(node, 32 /* Static */ | 128 /* Abstract */))) {
+                node.flags & 8388608 /* Ambient */ || ts.isStatic(node) || ts.hasAbstractModifier(node))) {
                 var message = node.initializer
                     ? ts.Diagnostics.Declarations_with_initializers_cannot_also_have_definite_assignment_assertions
                     : !node.type
@@ -83302,13 +84866,13 @@
             //     export_opt   AmbientDeclaration
             //
             // TODO: The spec needs to be amended to reflect this grammar.
-            if (node.kind === 254 /* InterfaceDeclaration */ ||
-                node.kind === 255 /* TypeAliasDeclaration */ ||
-                node.kind === 262 /* ImportDeclaration */ ||
-                node.kind === 261 /* ImportEqualsDeclaration */ ||
-                node.kind === 268 /* ExportDeclaration */ ||
-                node.kind === 267 /* ExportAssignment */ ||
-                node.kind === 260 /* NamespaceExportDeclaration */ ||
+            if (node.kind === 256 /* InterfaceDeclaration */ ||
+                node.kind === 257 /* TypeAliasDeclaration */ ||
+                node.kind === 264 /* ImportDeclaration */ ||
+                node.kind === 263 /* ImportEqualsDeclaration */ ||
+                node.kind === 270 /* ExportDeclaration */ ||
+                node.kind === 269 /* ExportAssignment */ ||
+                node.kind === 262 /* NamespaceExportDeclaration */ ||
                 ts.hasSyntacticModifier(node, 2 /* Ambient */ | 1 /* Export */ | 512 /* Default */)) {
                 return false;
             }
@@ -83317,7 +84881,7 @@
         function checkGrammarTopLevelElementsForRequiredDeclareModifier(file) {
             for (var _i = 0, _a = file.statements; _i < _a.length; _i++) {
                 var decl = _a[_i];
-                if (ts.isDeclaration(decl) || decl.kind === 233 /* VariableStatement */) {
+                if (ts.isDeclaration(decl) || decl.kind === 235 /* VariableStatement */) {
                     if (checkGrammarTopLevelElementForRequiredDeclareModifier(decl)) {
                         return true;
                     }
@@ -83340,7 +84904,7 @@
                 // to prevent noisiness.  So use a bit on the block to indicate if
                 // this has already been reported, and don't report if it has.
                 //
-                if (node.parent.kind === 231 /* Block */ || node.parent.kind === 258 /* ModuleBlock */ || node.parent.kind === 298 /* SourceFile */) {
+                if (node.parent.kind === 233 /* Block */ || node.parent.kind === 260 /* ModuleBlock */ || node.parent.kind === 300 /* SourceFile */) {
                     var links_2 = getNodeLinks(node.parent);
                     // Check if the containing block ever report this error
                     if (!links_2.hasReportedStatementInAmbientContext) {
@@ -83362,10 +84926,10 @@
                 if (languageVersion >= 1 /* ES5 */) {
                     diagnosticMessage = ts.Diagnostics.Octal_literals_are_not_available_when_targeting_ECMAScript_5_and_higher_Use_the_syntax_0;
                 }
-                else if (ts.isChildOfNodeWithKind(node, 192 /* LiteralType */)) {
+                else if (ts.isChildOfNodeWithKind(node, 194 /* LiteralType */)) {
                     diagnosticMessage = ts.Diagnostics.Octal_literal_types_must_use_ES2015_syntax_Use_the_syntax_0;
                 }
-                else if (ts.isChildOfNodeWithKind(node, 292 /* EnumMember */)) {
+                else if (ts.isChildOfNodeWithKind(node, 294 /* EnumMember */)) {
                     diagnosticMessage = ts.Diagnostics.Octal_literals_are_not_allowed_in_enums_members_initializer_Use_the_syntax_0;
                 }
                 if (diagnosticMessage) {
@@ -83544,14 +85108,14 @@
         return !ts.isAccessor(declaration);
     }
     function isNotOverload(declaration) {
-        return (declaration.kind !== 252 /* FunctionDeclaration */ && declaration.kind !== 166 /* MethodDeclaration */) ||
+        return (declaration.kind !== 254 /* FunctionDeclaration */ && declaration.kind !== 167 /* MethodDeclaration */) ||
             !!declaration.body;
     }
     /** Like 'isDeclarationName', but returns true for LHS of `import { x as y }` or `export { x as y }`. */
     function isDeclarationNameOrImportPropertyName(name) {
         switch (name.parent.kind) {
-            case 266 /* ImportSpecifier */:
-            case 271 /* ExportSpecifier */:
+            case 268 /* ImportSpecifier */:
+            case 273 /* ExportSpecifier */:
                 return ts.isIdentifier(name);
             default:
                 return ts.isDeclarationName(name);
@@ -83801,432 +85365,437 @@
         }
         var kind = node.kind;
         // No need to visit nodes with no children.
-        if ((kind > 0 /* FirstToken */ && kind <= 157 /* LastToken */) || kind === 188 /* ThisType */) {
+        if ((kind > 0 /* FirstToken */ && kind <= 158 /* LastToken */) || kind === 190 /* ThisType */) {
             return node;
         }
         var factory = context.factory;
         switch (kind) {
             // Names
-            case 78 /* Identifier */:
+            case 79 /* Identifier */:
                 ts.Debug.type(node);
                 return factory.updateIdentifier(node, nodesVisitor(node.typeArguments, visitor, ts.isTypeNodeOrTypeParameterDeclaration));
-            case 158 /* QualifiedName */:
+            case 159 /* QualifiedName */:
                 ts.Debug.type(node);
                 return factory.updateQualifiedName(node, nodeVisitor(node.left, visitor, ts.isEntityName), nodeVisitor(node.right, visitor, ts.isIdentifier));
-            case 159 /* ComputedPropertyName */:
+            case 160 /* ComputedPropertyName */:
                 ts.Debug.type(node);
                 return factory.updateComputedPropertyName(node, nodeVisitor(node.expression, visitor, ts.isExpression));
             // Signature elements
-            case 160 /* TypeParameter */:
+            case 161 /* TypeParameter */:
                 ts.Debug.type(node);
                 return factory.updateTypeParameterDeclaration(node, nodeVisitor(node.name, visitor, ts.isIdentifier), nodeVisitor(node.constraint, visitor, ts.isTypeNode), nodeVisitor(node.default, visitor, ts.isTypeNode));
-            case 161 /* Parameter */:
+            case 162 /* Parameter */:
                 ts.Debug.type(node);
                 return factory.updateParameterDeclaration(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), nodeVisitor(node.dotDotDotToken, tokenVisitor, ts.isDotDotDotToken), nodeVisitor(node.name, visitor, ts.isBindingName), nodeVisitor(node.questionToken, tokenVisitor, ts.isQuestionToken), nodeVisitor(node.type, visitor, ts.isTypeNode), nodeVisitor(node.initializer, visitor, ts.isExpression));
-            case 162 /* Decorator */:
+            case 163 /* Decorator */:
                 ts.Debug.type(node);
                 return factory.updateDecorator(node, nodeVisitor(node.expression, visitor, ts.isExpression));
             // Type elements
-            case 163 /* PropertySignature */:
+            case 164 /* PropertySignature */:
                 ts.Debug.type(node);
                 return factory.updatePropertySignature(node, nodesVisitor(node.modifiers, visitor, ts.isModifier), nodeVisitor(node.name, visitor, ts.isPropertyName), nodeVisitor(node.questionToken, tokenVisitor, ts.isToken), nodeVisitor(node.type, visitor, ts.isTypeNode));
-            case 164 /* PropertyDeclaration */:
+            case 165 /* PropertyDeclaration */:
                 ts.Debug.type(node);
                 return factory.updatePropertyDeclaration(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), nodeVisitor(node.name, visitor, ts.isPropertyName), 
                 // QuestionToken and ExclamationToken is uniqued in Property Declaration and the signature of 'updateProperty' is that too
                 nodeVisitor(node.questionToken || node.exclamationToken, tokenVisitor, ts.isQuestionOrExclamationToken), nodeVisitor(node.type, visitor, ts.isTypeNode), nodeVisitor(node.initializer, visitor, ts.isExpression));
-            case 165 /* MethodSignature */:
+            case 166 /* MethodSignature */:
                 ts.Debug.type(node);
                 return factory.updateMethodSignature(node, nodesVisitor(node.modifiers, visitor, ts.isModifier), nodeVisitor(node.name, visitor, ts.isPropertyName), nodeVisitor(node.questionToken, tokenVisitor, ts.isQuestionToken), nodesVisitor(node.typeParameters, visitor, ts.isTypeParameterDeclaration), nodesVisitor(node.parameters, visitor, ts.isParameterDeclaration), nodeVisitor(node.type, visitor, ts.isTypeNode));
-            case 166 /* MethodDeclaration */:
+            case 167 /* MethodDeclaration */:
                 ts.Debug.type(node);
                 return factory.updateMethodDeclaration(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), nodeVisitor(node.asteriskToken, tokenVisitor, ts.isAsteriskToken), nodeVisitor(node.name, visitor, ts.isPropertyName), nodeVisitor(node.questionToken, tokenVisitor, ts.isQuestionToken), nodesVisitor(node.typeParameters, visitor, ts.isTypeParameterDeclaration), visitParameterList(node.parameters, visitor, context, nodesVisitor), nodeVisitor(node.type, visitor, ts.isTypeNode), visitFunctionBody(node.body, visitor, context, nodeVisitor));
-            case 167 /* Constructor */:
+            case 169 /* Constructor */:
                 ts.Debug.type(node);
                 return factory.updateConstructorDeclaration(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), visitParameterList(node.parameters, visitor, context, nodesVisitor), visitFunctionBody(node.body, visitor, context, nodeVisitor));
-            case 168 /* GetAccessor */:
+            case 170 /* GetAccessor */:
                 ts.Debug.type(node);
                 return factory.updateGetAccessorDeclaration(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), nodeVisitor(node.name, visitor, ts.isPropertyName), visitParameterList(node.parameters, visitor, context, nodesVisitor), nodeVisitor(node.type, visitor, ts.isTypeNode), visitFunctionBody(node.body, visitor, context, nodeVisitor));
-            case 169 /* SetAccessor */:
+            case 171 /* SetAccessor */:
                 ts.Debug.type(node);
                 return factory.updateSetAccessorDeclaration(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), nodeVisitor(node.name, visitor, ts.isPropertyName), visitParameterList(node.parameters, visitor, context, nodesVisitor), visitFunctionBody(node.body, visitor, context, nodeVisitor));
-            case 170 /* CallSignature */:
+            case 168 /* ClassStaticBlockDeclaration */:
+                ts.Debug.type(node);
+                context.startLexicalEnvironment();
+                context.suspendLexicalEnvironment();
+                return factory.updateClassStaticBlockDeclaration(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), visitFunctionBody(node.body, visitor, context, nodeVisitor));
+            case 172 /* CallSignature */:
                 ts.Debug.type(node);
                 return factory.updateCallSignature(node, nodesVisitor(node.typeParameters, visitor, ts.isTypeParameterDeclaration), nodesVisitor(node.parameters, visitor, ts.isParameterDeclaration), nodeVisitor(node.type, visitor, ts.isTypeNode));
-            case 171 /* ConstructSignature */:
+            case 173 /* ConstructSignature */:
                 ts.Debug.type(node);
                 return factory.updateConstructSignature(node, nodesVisitor(node.typeParameters, visitor, ts.isTypeParameterDeclaration), nodesVisitor(node.parameters, visitor, ts.isParameterDeclaration), nodeVisitor(node.type, visitor, ts.isTypeNode));
-            case 172 /* IndexSignature */:
+            case 174 /* IndexSignature */:
                 ts.Debug.type(node);
                 return factory.updateIndexSignature(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), nodesVisitor(node.parameters, visitor, ts.isParameterDeclaration), nodeVisitor(node.type, visitor, ts.isTypeNode));
             // Types
-            case 173 /* TypePredicate */:
+            case 175 /* TypePredicate */:
                 ts.Debug.type(node);
                 return factory.updateTypePredicateNode(node, nodeVisitor(node.assertsModifier, visitor, ts.isAssertsKeyword), nodeVisitor(node.parameterName, visitor, ts.isIdentifierOrThisTypeNode), nodeVisitor(node.type, visitor, ts.isTypeNode));
-            case 174 /* TypeReference */:
+            case 176 /* TypeReference */:
                 ts.Debug.type(node);
                 return factory.updateTypeReferenceNode(node, nodeVisitor(node.typeName, visitor, ts.isEntityName), nodesVisitor(node.typeArguments, visitor, ts.isTypeNode));
-            case 175 /* FunctionType */:
+            case 177 /* FunctionType */:
                 ts.Debug.type(node);
                 return factory.updateFunctionTypeNode(node, nodesVisitor(node.typeParameters, visitor, ts.isTypeParameterDeclaration), nodesVisitor(node.parameters, visitor, ts.isParameterDeclaration), nodeVisitor(node.type, visitor, ts.isTypeNode));
-            case 176 /* ConstructorType */:
+            case 178 /* ConstructorType */:
                 ts.Debug.type(node);
                 return factory.updateConstructorTypeNode(node, nodesVisitor(node.modifiers, visitor, ts.isModifier), nodesVisitor(node.typeParameters, visitor, ts.isTypeParameterDeclaration), nodesVisitor(node.parameters, visitor, ts.isParameterDeclaration), nodeVisitor(node.type, visitor, ts.isTypeNode));
-            case 177 /* TypeQuery */:
+            case 179 /* TypeQuery */:
                 ts.Debug.type(node);
                 return factory.updateTypeQueryNode(node, nodeVisitor(node.exprName, visitor, ts.isEntityName));
-            case 178 /* TypeLiteral */:
+            case 180 /* TypeLiteral */:
                 ts.Debug.type(node);
                 return factory.updateTypeLiteralNode(node, nodesVisitor(node.members, visitor, ts.isTypeElement));
-            case 179 /* ArrayType */:
+            case 181 /* ArrayType */:
                 ts.Debug.type(node);
                 return factory.updateArrayTypeNode(node, nodeVisitor(node.elementType, visitor, ts.isTypeNode));
-            case 180 /* TupleType */:
+            case 182 /* TupleType */:
                 ts.Debug.type(node);
                 return factory.updateTupleTypeNode(node, nodesVisitor(node.elements, visitor, ts.isTypeNode));
-            case 181 /* OptionalType */:
+            case 183 /* OptionalType */:
                 ts.Debug.type(node);
                 return factory.updateOptionalTypeNode(node, nodeVisitor(node.type, visitor, ts.isTypeNode));
-            case 182 /* RestType */:
+            case 184 /* RestType */:
                 ts.Debug.type(node);
                 return factory.updateRestTypeNode(node, nodeVisitor(node.type, visitor, ts.isTypeNode));
-            case 183 /* UnionType */:
+            case 185 /* UnionType */:
                 ts.Debug.type(node);
                 return factory.updateUnionTypeNode(node, nodesVisitor(node.types, visitor, ts.isTypeNode));
-            case 184 /* IntersectionType */:
+            case 186 /* IntersectionType */:
                 ts.Debug.type(node);
                 return factory.updateIntersectionTypeNode(node, nodesVisitor(node.types, visitor, ts.isTypeNode));
-            case 185 /* ConditionalType */:
+            case 187 /* ConditionalType */:
                 ts.Debug.type(node);
                 return factory.updateConditionalTypeNode(node, nodeVisitor(node.checkType, visitor, ts.isTypeNode), nodeVisitor(node.extendsType, visitor, ts.isTypeNode), nodeVisitor(node.trueType, visitor, ts.isTypeNode), nodeVisitor(node.falseType, visitor, ts.isTypeNode));
-            case 186 /* InferType */:
+            case 188 /* InferType */:
                 ts.Debug.type(node);
                 return factory.updateInferTypeNode(node, nodeVisitor(node.typeParameter, visitor, ts.isTypeParameterDeclaration));
-            case 196 /* ImportType */:
+            case 198 /* ImportType */:
                 ts.Debug.type(node);
                 return factory.updateImportTypeNode(node, nodeVisitor(node.argument, visitor, ts.isTypeNode), nodeVisitor(node.qualifier, visitor, ts.isEntityName), visitNodes(node.typeArguments, visitor, ts.isTypeNode), node.isTypeOf);
-            case 193 /* NamedTupleMember */:
+            case 195 /* NamedTupleMember */:
                 ts.Debug.type(node);
                 return factory.updateNamedTupleMember(node, visitNode(node.dotDotDotToken, visitor, ts.isDotDotDotToken), visitNode(node.name, visitor, ts.isIdentifier), visitNode(node.questionToken, visitor, ts.isQuestionToken), visitNode(node.type, visitor, ts.isTypeNode));
-            case 187 /* ParenthesizedType */:
+            case 189 /* ParenthesizedType */:
                 ts.Debug.type(node);
                 return factory.updateParenthesizedType(node, nodeVisitor(node.type, visitor, ts.isTypeNode));
-            case 189 /* TypeOperator */:
+            case 191 /* TypeOperator */:
                 ts.Debug.type(node);
                 return factory.updateTypeOperatorNode(node, nodeVisitor(node.type, visitor, ts.isTypeNode));
-            case 190 /* IndexedAccessType */:
+            case 192 /* IndexedAccessType */:
                 ts.Debug.type(node);
                 return factory.updateIndexedAccessTypeNode(node, nodeVisitor(node.objectType, visitor, ts.isTypeNode), nodeVisitor(node.indexType, visitor, ts.isTypeNode));
-            case 191 /* MappedType */:
+            case 193 /* MappedType */:
                 ts.Debug.type(node);
                 return factory.updateMappedTypeNode(node, nodeVisitor(node.readonlyToken, tokenVisitor, ts.isReadonlyKeywordOrPlusOrMinusToken), nodeVisitor(node.typeParameter, visitor, ts.isTypeParameterDeclaration), nodeVisitor(node.nameType, visitor, ts.isTypeNode), nodeVisitor(node.questionToken, tokenVisitor, ts.isQuestionOrPlusOrMinusToken), nodeVisitor(node.type, visitor, ts.isTypeNode));
-            case 192 /* LiteralType */:
+            case 194 /* LiteralType */:
                 ts.Debug.type(node);
                 return factory.updateLiteralTypeNode(node, nodeVisitor(node.literal, visitor, ts.isExpression));
-            case 194 /* TemplateLiteralType */:
+            case 196 /* TemplateLiteralType */:
                 ts.Debug.type(node);
                 return factory.updateTemplateLiteralType(node, nodeVisitor(node.head, visitor, ts.isTemplateHead), nodesVisitor(node.templateSpans, visitor, ts.isTemplateLiteralTypeSpan));
-            case 195 /* TemplateLiteralTypeSpan */:
+            case 197 /* TemplateLiteralTypeSpan */:
                 ts.Debug.type(node);
                 return factory.updateTemplateLiteralTypeSpan(node, nodeVisitor(node.type, visitor, ts.isTypeNode), nodeVisitor(node.literal, visitor, ts.isTemplateMiddleOrTemplateTail));
             // Binding patterns
-            case 197 /* ObjectBindingPattern */:
+            case 199 /* ObjectBindingPattern */:
                 ts.Debug.type(node);
                 return factory.updateObjectBindingPattern(node, nodesVisitor(node.elements, visitor, ts.isBindingElement));
-            case 198 /* ArrayBindingPattern */:
+            case 200 /* ArrayBindingPattern */:
                 ts.Debug.type(node);
                 return factory.updateArrayBindingPattern(node, nodesVisitor(node.elements, visitor, ts.isArrayBindingElement));
-            case 199 /* BindingElement */:
+            case 201 /* BindingElement */:
                 ts.Debug.type(node);
                 return factory.updateBindingElement(node, nodeVisitor(node.dotDotDotToken, tokenVisitor, ts.isDotDotDotToken), nodeVisitor(node.propertyName, visitor, ts.isPropertyName), nodeVisitor(node.name, visitor, ts.isBindingName), nodeVisitor(node.initializer, visitor, ts.isExpression));
             // Expression
-            case 200 /* ArrayLiteralExpression */:
+            case 202 /* ArrayLiteralExpression */:
                 ts.Debug.type(node);
                 return factory.updateArrayLiteralExpression(node, nodesVisitor(node.elements, visitor, ts.isExpression));
-            case 201 /* ObjectLiteralExpression */:
+            case 203 /* ObjectLiteralExpression */:
                 ts.Debug.type(node);
                 return factory.updateObjectLiteralExpression(node, nodesVisitor(node.properties, visitor, ts.isObjectLiteralElementLike));
-            case 202 /* PropertyAccessExpression */:
+            case 204 /* PropertyAccessExpression */:
                 if (node.flags & 32 /* OptionalChain */) {
                     ts.Debug.type(node);
                     return factory.updatePropertyAccessChain(node, nodeVisitor(node.expression, visitor, ts.isExpression), nodeVisitor(node.questionDotToken, tokenVisitor, ts.isQuestionDotToken), nodeVisitor(node.name, visitor, ts.isMemberName));
                 }
                 ts.Debug.type(node);
                 return factory.updatePropertyAccessExpression(node, nodeVisitor(node.expression, visitor, ts.isExpression), nodeVisitor(node.name, visitor, ts.isMemberName));
-            case 203 /* ElementAccessExpression */:
+            case 205 /* ElementAccessExpression */:
                 if (node.flags & 32 /* OptionalChain */) {
                     ts.Debug.type(node);
                     return factory.updateElementAccessChain(node, nodeVisitor(node.expression, visitor, ts.isExpression), nodeVisitor(node.questionDotToken, tokenVisitor, ts.isQuestionDotToken), nodeVisitor(node.argumentExpression, visitor, ts.isExpression));
                 }
                 ts.Debug.type(node);
                 return factory.updateElementAccessExpression(node, nodeVisitor(node.expression, visitor, ts.isExpression), nodeVisitor(node.argumentExpression, visitor, ts.isExpression));
-            case 204 /* CallExpression */:
+            case 206 /* CallExpression */:
                 if (node.flags & 32 /* OptionalChain */) {
                     ts.Debug.type(node);
                     return factory.updateCallChain(node, nodeVisitor(node.expression, visitor, ts.isExpression), nodeVisitor(node.questionDotToken, tokenVisitor, ts.isQuestionDotToken), nodesVisitor(node.typeArguments, visitor, ts.isTypeNode), nodesVisitor(node.arguments, visitor, ts.isExpression));
                 }
                 ts.Debug.type(node);
                 return factory.updateCallExpression(node, nodeVisitor(node.expression, visitor, ts.isExpression), nodesVisitor(node.typeArguments, visitor, ts.isTypeNode), nodesVisitor(node.arguments, visitor, ts.isExpression));
-            case 205 /* NewExpression */:
+            case 207 /* NewExpression */:
                 ts.Debug.type(node);
                 return factory.updateNewExpression(node, nodeVisitor(node.expression, visitor, ts.isExpression), nodesVisitor(node.typeArguments, visitor, ts.isTypeNode), nodesVisitor(node.arguments, visitor, ts.isExpression));
-            case 206 /* TaggedTemplateExpression */:
+            case 208 /* TaggedTemplateExpression */:
                 ts.Debug.type(node);
                 return factory.updateTaggedTemplateExpression(node, nodeVisitor(node.tag, visitor, ts.isExpression), visitNodes(node.typeArguments, visitor, ts.isTypeNode), nodeVisitor(node.template, visitor, ts.isTemplateLiteral));
-            case 207 /* TypeAssertionExpression */:
+            case 209 /* TypeAssertionExpression */:
                 ts.Debug.type(node);
                 return factory.updateTypeAssertion(node, nodeVisitor(node.type, visitor, ts.isTypeNode), nodeVisitor(node.expression, visitor, ts.isExpression));
-            case 208 /* ParenthesizedExpression */:
+            case 210 /* ParenthesizedExpression */:
                 ts.Debug.type(node);
                 return factory.updateParenthesizedExpression(node, nodeVisitor(node.expression, visitor, ts.isExpression));
-            case 209 /* FunctionExpression */:
+            case 211 /* FunctionExpression */:
                 ts.Debug.type(node);
                 return factory.updateFunctionExpression(node, nodesVisitor(node.modifiers, visitor, ts.isModifier), nodeVisitor(node.asteriskToken, tokenVisitor, ts.isAsteriskToken), nodeVisitor(node.name, visitor, ts.isIdentifier), nodesVisitor(node.typeParameters, visitor, ts.isTypeParameterDeclaration), visitParameterList(node.parameters, visitor, context, nodesVisitor), nodeVisitor(node.type, visitor, ts.isTypeNode), visitFunctionBody(node.body, visitor, context, nodeVisitor));
-            case 210 /* ArrowFunction */:
+            case 212 /* ArrowFunction */:
                 ts.Debug.type(node);
                 return factory.updateArrowFunction(node, nodesVisitor(node.modifiers, visitor, ts.isModifier), nodesVisitor(node.typeParameters, visitor, ts.isTypeParameterDeclaration), visitParameterList(node.parameters, visitor, context, nodesVisitor), nodeVisitor(node.type, visitor, ts.isTypeNode), nodeVisitor(node.equalsGreaterThanToken, tokenVisitor, ts.isEqualsGreaterThanToken), visitFunctionBody(node.body, visitor, context, nodeVisitor));
-            case 211 /* DeleteExpression */:
+            case 213 /* DeleteExpression */:
                 ts.Debug.type(node);
                 return factory.updateDeleteExpression(node, nodeVisitor(node.expression, visitor, ts.isExpression));
-            case 212 /* TypeOfExpression */:
+            case 214 /* TypeOfExpression */:
                 ts.Debug.type(node);
                 return factory.updateTypeOfExpression(node, nodeVisitor(node.expression, visitor, ts.isExpression));
-            case 213 /* VoidExpression */:
+            case 215 /* VoidExpression */:
                 ts.Debug.type(node);
                 return factory.updateVoidExpression(node, nodeVisitor(node.expression, visitor, ts.isExpression));
-            case 214 /* AwaitExpression */:
+            case 216 /* AwaitExpression */:
                 ts.Debug.type(node);
                 return factory.updateAwaitExpression(node, nodeVisitor(node.expression, visitor, ts.isExpression));
-            case 215 /* PrefixUnaryExpression */:
+            case 217 /* PrefixUnaryExpression */:
                 ts.Debug.type(node);
                 return factory.updatePrefixUnaryExpression(node, nodeVisitor(node.operand, visitor, ts.isExpression));
-            case 216 /* PostfixUnaryExpression */:
+            case 218 /* PostfixUnaryExpression */:
                 ts.Debug.type(node);
                 return factory.updatePostfixUnaryExpression(node, nodeVisitor(node.operand, visitor, ts.isExpression));
-            case 217 /* BinaryExpression */:
+            case 219 /* BinaryExpression */:
                 ts.Debug.type(node);
                 return factory.updateBinaryExpression(node, nodeVisitor(node.left, visitor, ts.isExpression), nodeVisitor(node.operatorToken, tokenVisitor, ts.isBinaryOperatorToken), nodeVisitor(node.right, visitor, ts.isExpression));
-            case 218 /* ConditionalExpression */:
+            case 220 /* ConditionalExpression */:
                 ts.Debug.type(node);
                 return factory.updateConditionalExpression(node, nodeVisitor(node.condition, visitor, ts.isExpression), nodeVisitor(node.questionToken, tokenVisitor, ts.isQuestionToken), nodeVisitor(node.whenTrue, visitor, ts.isExpression), nodeVisitor(node.colonToken, tokenVisitor, ts.isColonToken), nodeVisitor(node.whenFalse, visitor, ts.isExpression));
-            case 219 /* TemplateExpression */:
+            case 221 /* TemplateExpression */:
                 ts.Debug.type(node);
                 return factory.updateTemplateExpression(node, nodeVisitor(node.head, visitor, ts.isTemplateHead), nodesVisitor(node.templateSpans, visitor, ts.isTemplateSpan));
-            case 220 /* YieldExpression */:
+            case 222 /* YieldExpression */:
                 ts.Debug.type(node);
                 return factory.updateYieldExpression(node, nodeVisitor(node.asteriskToken, tokenVisitor, ts.isAsteriskToken), nodeVisitor(node.expression, visitor, ts.isExpression));
-            case 221 /* SpreadElement */:
+            case 223 /* SpreadElement */:
                 ts.Debug.type(node);
                 return factory.updateSpreadElement(node, nodeVisitor(node.expression, visitor, ts.isExpression));
-            case 222 /* ClassExpression */:
+            case 224 /* ClassExpression */:
                 ts.Debug.type(node);
                 return factory.updateClassExpression(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), nodeVisitor(node.name, visitor, ts.isIdentifier), nodesVisitor(node.typeParameters, visitor, ts.isTypeParameterDeclaration), nodesVisitor(node.heritageClauses, visitor, ts.isHeritageClause), nodesVisitor(node.members, visitor, ts.isClassElement));
-            case 224 /* ExpressionWithTypeArguments */:
+            case 226 /* ExpressionWithTypeArguments */:
                 ts.Debug.type(node);
                 return factory.updateExpressionWithTypeArguments(node, nodeVisitor(node.expression, visitor, ts.isExpression), nodesVisitor(node.typeArguments, visitor, ts.isTypeNode));
-            case 225 /* AsExpression */:
+            case 227 /* AsExpression */:
                 ts.Debug.type(node);
                 return factory.updateAsExpression(node, nodeVisitor(node.expression, visitor, ts.isExpression), nodeVisitor(node.type, visitor, ts.isTypeNode));
-            case 226 /* NonNullExpression */:
+            case 228 /* NonNullExpression */:
                 if (node.flags & 32 /* OptionalChain */) {
                     ts.Debug.type(node);
                     return factory.updateNonNullChain(node, nodeVisitor(node.expression, visitor, ts.isExpression));
                 }
                 ts.Debug.type(node);
                 return factory.updateNonNullExpression(node, nodeVisitor(node.expression, visitor, ts.isExpression));
-            case 227 /* MetaProperty */:
+            case 229 /* MetaProperty */:
                 ts.Debug.type(node);
                 return factory.updateMetaProperty(node, nodeVisitor(node.name, visitor, ts.isIdentifier));
             // Misc
-            case 229 /* TemplateSpan */:
+            case 231 /* TemplateSpan */:
                 ts.Debug.type(node);
                 return factory.updateTemplateSpan(node, nodeVisitor(node.expression, visitor, ts.isExpression), nodeVisitor(node.literal, visitor, ts.isTemplateMiddleOrTemplateTail));
             // Element
-            case 231 /* Block */:
+            case 233 /* Block */:
                 ts.Debug.type(node);
                 return factory.updateBlock(node, nodesVisitor(node.statements, visitor, ts.isStatement));
-            case 233 /* VariableStatement */:
+            case 235 /* VariableStatement */:
                 ts.Debug.type(node);
                 return factory.updateVariableStatement(node, nodesVisitor(node.modifiers, visitor, ts.isModifier), nodeVisitor(node.declarationList, visitor, ts.isVariableDeclarationList));
-            case 234 /* ExpressionStatement */:
+            case 236 /* ExpressionStatement */:
                 ts.Debug.type(node);
                 return factory.updateExpressionStatement(node, nodeVisitor(node.expression, visitor, ts.isExpression));
-            case 235 /* IfStatement */:
+            case 237 /* IfStatement */:
                 ts.Debug.type(node);
                 return factory.updateIfStatement(node, nodeVisitor(node.expression, visitor, ts.isExpression), nodeVisitor(node.thenStatement, visitor, ts.isStatement, factory.liftToBlock), nodeVisitor(node.elseStatement, visitor, ts.isStatement, factory.liftToBlock));
-            case 236 /* DoStatement */:
+            case 238 /* DoStatement */:
                 ts.Debug.type(node);
                 return factory.updateDoStatement(node, visitIterationBody(node.statement, visitor, context), nodeVisitor(node.expression, visitor, ts.isExpression));
-            case 237 /* WhileStatement */:
+            case 239 /* WhileStatement */:
                 ts.Debug.type(node);
                 return factory.updateWhileStatement(node, nodeVisitor(node.expression, visitor, ts.isExpression), visitIterationBody(node.statement, visitor, context));
-            case 238 /* ForStatement */:
+            case 240 /* ForStatement */:
                 ts.Debug.type(node);
                 return factory.updateForStatement(node, nodeVisitor(node.initializer, visitor, ts.isForInitializer), nodeVisitor(node.condition, visitor, ts.isExpression), nodeVisitor(node.incrementor, visitor, ts.isExpression), visitIterationBody(node.statement, visitor, context));
-            case 239 /* ForInStatement */:
+            case 241 /* ForInStatement */:
                 ts.Debug.type(node);
                 return factory.updateForInStatement(node, nodeVisitor(node.initializer, visitor, ts.isForInitializer), nodeVisitor(node.expression, visitor, ts.isExpression), visitIterationBody(node.statement, visitor, context));
-            case 240 /* ForOfStatement */:
+            case 242 /* ForOfStatement */:
                 ts.Debug.type(node);
                 return factory.updateForOfStatement(node, nodeVisitor(node.awaitModifier, tokenVisitor, ts.isAwaitKeyword), nodeVisitor(node.initializer, visitor, ts.isForInitializer), nodeVisitor(node.expression, visitor, ts.isExpression), visitIterationBody(node.statement, visitor, context));
-            case 241 /* ContinueStatement */:
+            case 243 /* ContinueStatement */:
                 ts.Debug.type(node);
                 return factory.updateContinueStatement(node, nodeVisitor(node.label, visitor, ts.isIdentifier));
-            case 242 /* BreakStatement */:
+            case 244 /* BreakStatement */:
                 ts.Debug.type(node);
                 return factory.updateBreakStatement(node, nodeVisitor(node.label, visitor, ts.isIdentifier));
-            case 243 /* ReturnStatement */:
+            case 245 /* ReturnStatement */:
                 ts.Debug.type(node);
                 return factory.updateReturnStatement(node, nodeVisitor(node.expression, visitor, ts.isExpression));
-            case 244 /* WithStatement */:
+            case 246 /* WithStatement */:
                 ts.Debug.type(node);
                 return factory.updateWithStatement(node, nodeVisitor(node.expression, visitor, ts.isExpression), nodeVisitor(node.statement, visitor, ts.isStatement, factory.liftToBlock));
-            case 245 /* SwitchStatement */:
+            case 247 /* SwitchStatement */:
                 ts.Debug.type(node);
                 return factory.updateSwitchStatement(node, nodeVisitor(node.expression, visitor, ts.isExpression), nodeVisitor(node.caseBlock, visitor, ts.isCaseBlock));
-            case 246 /* LabeledStatement */:
+            case 248 /* LabeledStatement */:
                 ts.Debug.type(node);
                 return factory.updateLabeledStatement(node, nodeVisitor(node.label, visitor, ts.isIdentifier), nodeVisitor(node.statement, visitor, ts.isStatement, factory.liftToBlock));
-            case 247 /* ThrowStatement */:
+            case 249 /* ThrowStatement */:
                 ts.Debug.type(node);
                 return factory.updateThrowStatement(node, nodeVisitor(node.expression, visitor, ts.isExpression));
-            case 248 /* TryStatement */:
+            case 250 /* TryStatement */:
                 ts.Debug.type(node);
                 return factory.updateTryStatement(node, nodeVisitor(node.tryBlock, visitor, ts.isBlock), nodeVisitor(node.catchClause, visitor, ts.isCatchClause), nodeVisitor(node.finallyBlock, visitor, ts.isBlock));
-            case 250 /* VariableDeclaration */:
+            case 252 /* VariableDeclaration */:
                 ts.Debug.type(node);
                 return factory.updateVariableDeclaration(node, nodeVisitor(node.name, visitor, ts.isBindingName), nodeVisitor(node.exclamationToken, tokenVisitor, ts.isExclamationToken), nodeVisitor(node.type, visitor, ts.isTypeNode), nodeVisitor(node.initializer, visitor, ts.isExpression));
-            case 251 /* VariableDeclarationList */:
+            case 253 /* VariableDeclarationList */:
                 ts.Debug.type(node);
                 return factory.updateVariableDeclarationList(node, nodesVisitor(node.declarations, visitor, ts.isVariableDeclaration));
-            case 252 /* FunctionDeclaration */:
+            case 254 /* FunctionDeclaration */:
                 ts.Debug.type(node);
                 return factory.updateFunctionDeclaration(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), nodeVisitor(node.asteriskToken, tokenVisitor, ts.isAsteriskToken), nodeVisitor(node.name, visitor, ts.isIdentifier), nodesVisitor(node.typeParameters, visitor, ts.isTypeParameterDeclaration), visitParameterList(node.parameters, visitor, context, nodesVisitor), nodeVisitor(node.type, visitor, ts.isTypeNode), visitFunctionBody(node.body, visitor, context, nodeVisitor));
-            case 253 /* ClassDeclaration */:
+            case 255 /* ClassDeclaration */:
                 ts.Debug.type(node);
                 return factory.updateClassDeclaration(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), nodeVisitor(node.name, visitor, ts.isIdentifier), nodesVisitor(node.typeParameters, visitor, ts.isTypeParameterDeclaration), nodesVisitor(node.heritageClauses, visitor, ts.isHeritageClause), nodesVisitor(node.members, visitor, ts.isClassElement));
-            case 254 /* InterfaceDeclaration */:
+            case 256 /* InterfaceDeclaration */:
                 ts.Debug.type(node);
                 return factory.updateInterfaceDeclaration(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), nodeVisitor(node.name, visitor, ts.isIdentifier), nodesVisitor(node.typeParameters, visitor, ts.isTypeParameterDeclaration), nodesVisitor(node.heritageClauses, visitor, ts.isHeritageClause), nodesVisitor(node.members, visitor, ts.isTypeElement));
-            case 255 /* TypeAliasDeclaration */:
+            case 257 /* TypeAliasDeclaration */:
                 ts.Debug.type(node);
                 return factory.updateTypeAliasDeclaration(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), nodeVisitor(node.name, visitor, ts.isIdentifier), nodesVisitor(node.typeParameters, visitor, ts.isTypeParameterDeclaration), nodeVisitor(node.type, visitor, ts.isTypeNode));
-            case 256 /* EnumDeclaration */:
+            case 258 /* EnumDeclaration */:
                 ts.Debug.type(node);
                 return factory.updateEnumDeclaration(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), nodeVisitor(node.name, visitor, ts.isIdentifier), nodesVisitor(node.members, visitor, ts.isEnumMember));
-            case 257 /* ModuleDeclaration */:
+            case 259 /* ModuleDeclaration */:
                 ts.Debug.type(node);
                 return factory.updateModuleDeclaration(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), nodeVisitor(node.name, visitor, ts.isModuleName), nodeVisitor(node.body, visitor, ts.isModuleBody));
-            case 258 /* ModuleBlock */:
+            case 260 /* ModuleBlock */:
                 ts.Debug.type(node);
                 return factory.updateModuleBlock(node, nodesVisitor(node.statements, visitor, ts.isStatement));
-            case 259 /* CaseBlock */:
+            case 261 /* CaseBlock */:
                 ts.Debug.type(node);
                 return factory.updateCaseBlock(node, nodesVisitor(node.clauses, visitor, ts.isCaseOrDefaultClause));
-            case 260 /* NamespaceExportDeclaration */:
+            case 262 /* NamespaceExportDeclaration */:
                 ts.Debug.type(node);
                 return factory.updateNamespaceExportDeclaration(node, nodeVisitor(node.name, visitor, ts.isIdentifier));
-            case 261 /* ImportEqualsDeclaration */:
+            case 263 /* ImportEqualsDeclaration */:
                 ts.Debug.type(node);
                 return factory.updateImportEqualsDeclaration(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), node.isTypeOnly, nodeVisitor(node.name, visitor, ts.isIdentifier), nodeVisitor(node.moduleReference, visitor, ts.isModuleReference));
-            case 262 /* ImportDeclaration */:
+            case 264 /* ImportDeclaration */:
                 ts.Debug.type(node);
                 return factory.updateImportDeclaration(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), nodeVisitor(node.importClause, visitor, ts.isImportClause), nodeVisitor(node.moduleSpecifier, visitor, ts.isExpression));
-            case 263 /* ImportClause */:
+            case 265 /* ImportClause */:
                 ts.Debug.type(node);
                 return factory.updateImportClause(node, node.isTypeOnly, nodeVisitor(node.name, visitor, ts.isIdentifier), nodeVisitor(node.namedBindings, visitor, ts.isNamedImportBindings));
-            case 264 /* NamespaceImport */:
+            case 266 /* NamespaceImport */:
                 ts.Debug.type(node);
                 return factory.updateNamespaceImport(node, nodeVisitor(node.name, visitor, ts.isIdentifier));
-            case 270 /* NamespaceExport */:
+            case 272 /* NamespaceExport */:
                 ts.Debug.type(node);
                 return factory.updateNamespaceExport(node, nodeVisitor(node.name, visitor, ts.isIdentifier));
-            case 265 /* NamedImports */:
+            case 267 /* NamedImports */:
                 ts.Debug.type(node);
                 return factory.updateNamedImports(node, nodesVisitor(node.elements, visitor, ts.isImportSpecifier));
-            case 266 /* ImportSpecifier */:
+            case 268 /* ImportSpecifier */:
                 ts.Debug.type(node);
                 return factory.updateImportSpecifier(node, nodeVisitor(node.propertyName, visitor, ts.isIdentifier), nodeVisitor(node.name, visitor, ts.isIdentifier));
-            case 267 /* ExportAssignment */:
+            case 269 /* ExportAssignment */:
                 ts.Debug.type(node);
                 return factory.updateExportAssignment(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), nodeVisitor(node.expression, visitor, ts.isExpression));
-            case 268 /* ExportDeclaration */:
+            case 270 /* ExportDeclaration */:
                 ts.Debug.type(node);
                 return factory.updateExportDeclaration(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), node.isTypeOnly, nodeVisitor(node.exportClause, visitor, ts.isNamedExportBindings), nodeVisitor(node.moduleSpecifier, visitor, ts.isExpression));
-            case 269 /* NamedExports */:
+            case 271 /* NamedExports */:
                 ts.Debug.type(node);
                 return factory.updateNamedExports(node, nodesVisitor(node.elements, visitor, ts.isExportSpecifier));
-            case 271 /* ExportSpecifier */:
+            case 273 /* ExportSpecifier */:
                 ts.Debug.type(node);
                 return factory.updateExportSpecifier(node, nodeVisitor(node.propertyName, visitor, ts.isIdentifier), nodeVisitor(node.name, visitor, ts.isIdentifier));
             // Module references
-            case 273 /* ExternalModuleReference */:
+            case 275 /* ExternalModuleReference */:
                 ts.Debug.type(node);
                 return factory.updateExternalModuleReference(node, nodeVisitor(node.expression, visitor, ts.isExpression));
             // JSX
-            case 274 /* JsxElement */:
+            case 276 /* JsxElement */:
                 ts.Debug.type(node);
                 return factory.updateJsxElement(node, nodeVisitor(node.openingElement, visitor, ts.isJsxOpeningElement), nodesVisitor(node.children, visitor, ts.isJsxChild), nodeVisitor(node.closingElement, visitor, ts.isJsxClosingElement));
-            case 275 /* JsxSelfClosingElement */:
+            case 277 /* JsxSelfClosingElement */:
                 ts.Debug.type(node);
                 return factory.updateJsxSelfClosingElement(node, nodeVisitor(node.tagName, visitor, ts.isJsxTagNameExpression), nodesVisitor(node.typeArguments, visitor, ts.isTypeNode), nodeVisitor(node.attributes, visitor, ts.isJsxAttributes));
-            case 276 /* JsxOpeningElement */:
+            case 278 /* JsxOpeningElement */:
                 ts.Debug.type(node);
                 return factory.updateJsxOpeningElement(node, nodeVisitor(node.tagName, visitor, ts.isJsxTagNameExpression), nodesVisitor(node.typeArguments, visitor, ts.isTypeNode), nodeVisitor(node.attributes, visitor, ts.isJsxAttributes));
-            case 277 /* JsxClosingElement */:
+            case 279 /* JsxClosingElement */:
                 ts.Debug.type(node);
                 return factory.updateJsxClosingElement(node, nodeVisitor(node.tagName, visitor, ts.isJsxTagNameExpression));
-            case 278 /* JsxFragment */:
+            case 280 /* JsxFragment */:
                 ts.Debug.type(node);
                 return factory.updateJsxFragment(node, nodeVisitor(node.openingFragment, visitor, ts.isJsxOpeningFragment), nodesVisitor(node.children, visitor, ts.isJsxChild), nodeVisitor(node.closingFragment, visitor, ts.isJsxClosingFragment));
-            case 281 /* JsxAttribute */:
+            case 283 /* JsxAttribute */:
                 ts.Debug.type(node);
                 return factory.updateJsxAttribute(node, nodeVisitor(node.name, visitor, ts.isIdentifier), nodeVisitor(node.initializer, visitor, ts.isStringLiteralOrJsxExpression));
-            case 282 /* JsxAttributes */:
+            case 284 /* JsxAttributes */:
                 ts.Debug.type(node);
                 return factory.updateJsxAttributes(node, nodesVisitor(node.properties, visitor, ts.isJsxAttributeLike));
-            case 283 /* JsxSpreadAttribute */:
+            case 285 /* JsxSpreadAttribute */:
                 ts.Debug.type(node);
                 return factory.updateJsxSpreadAttribute(node, nodeVisitor(node.expression, visitor, ts.isExpression));
-            case 284 /* JsxExpression */:
+            case 286 /* JsxExpression */:
                 ts.Debug.type(node);
                 return factory.updateJsxExpression(node, nodeVisitor(node.expression, visitor, ts.isExpression));
             // Clauses
-            case 285 /* CaseClause */:
+            case 287 /* CaseClause */:
                 ts.Debug.type(node);
                 return factory.updateCaseClause(node, nodeVisitor(node.expression, visitor, ts.isExpression), nodesVisitor(node.statements, visitor, ts.isStatement));
-            case 286 /* DefaultClause */:
+            case 288 /* DefaultClause */:
                 ts.Debug.type(node);
                 return factory.updateDefaultClause(node, nodesVisitor(node.statements, visitor, ts.isStatement));
-            case 287 /* HeritageClause */:
+            case 289 /* HeritageClause */:
                 ts.Debug.type(node);
                 return factory.updateHeritageClause(node, nodesVisitor(node.types, visitor, ts.isExpressionWithTypeArguments));
-            case 288 /* CatchClause */:
+            case 290 /* CatchClause */:
                 ts.Debug.type(node);
                 return factory.updateCatchClause(node, nodeVisitor(node.variableDeclaration, visitor, ts.isVariableDeclaration), nodeVisitor(node.block, visitor, ts.isBlock));
             // Property assignments
-            case 289 /* PropertyAssignment */:
+            case 291 /* PropertyAssignment */:
                 ts.Debug.type(node);
                 return factory.updatePropertyAssignment(node, nodeVisitor(node.name, visitor, ts.isPropertyName), nodeVisitor(node.initializer, visitor, ts.isExpression));
-            case 290 /* ShorthandPropertyAssignment */:
+            case 292 /* ShorthandPropertyAssignment */:
                 ts.Debug.type(node);
                 return factory.updateShorthandPropertyAssignment(node, nodeVisitor(node.name, visitor, ts.isIdentifier), nodeVisitor(node.objectAssignmentInitializer, visitor, ts.isExpression));
-            case 291 /* SpreadAssignment */:
+            case 293 /* SpreadAssignment */:
                 ts.Debug.type(node);
                 return factory.updateSpreadAssignment(node, nodeVisitor(node.expression, visitor, ts.isExpression));
             // Enum
-            case 292 /* EnumMember */:
+            case 294 /* EnumMember */:
                 ts.Debug.type(node);
                 return factory.updateEnumMember(node, nodeVisitor(node.name, visitor, ts.isPropertyName), nodeVisitor(node.initializer, visitor, ts.isExpression));
             // Top-level nodes
-            case 298 /* SourceFile */:
+            case 300 /* SourceFile */:
                 ts.Debug.type(node);
                 return factory.updateSourceFile(node, visitLexicalEnvironment(node.statements, visitor, context));
             // Transformation nodes
-            case 340 /* PartiallyEmittedExpression */:
+            case 345 /* PartiallyEmittedExpression */:
                 ts.Debug.type(node);
                 return factory.updatePartiallyEmittedExpression(node, nodeVisitor(node.expression, visitor, ts.isExpression));
-            case 341 /* CommaListExpression */:
+            case 346 /* CommaListExpression */:
                 ts.Debug.type(node);
                 return factory.updateCommaListExpression(node, nodesVisitor(node.elements, visitor, ts.isExpression));
             default:
@@ -84259,6 +85828,7 @@
         var sourcesContent;
         var names = [];
         var nameToNameIndexMap;
+        var mappingCharCodes = [];
         var mappings = "";
         // Last recorded and encoded mappings
         var lastGeneratedLine = 0;
@@ -84433,6 +86003,14 @@
                 || lastSourceCharacter !== pendingSourceCharacter
                 || lastNameIndex !== pendingNameIndex;
         }
+        function appendMappingCharCode(charCode) {
+            mappingCharCodes.push(charCode);
+            // String.fromCharCode accepts its arguments on the stack, so we have to chunk the input,
+            // otherwise we can get stack overflows for large source maps
+            if (mappingCharCodes.length >= 1024) {
+                flushMappingBuffer();
+            }
+        }
         function commitPendingMapping() {
             if (!hasPending || !shouldCommitMapping()) {
                 return;
@@ -84442,42 +86020,50 @@
             if (lastGeneratedLine < pendingGeneratedLine) {
                 // Emit line delimiters
                 do {
-                    mappings += ";";
+                    appendMappingCharCode(59 /* semicolon */);
                     lastGeneratedLine++;
-                    lastGeneratedCharacter = 0;
                 } while (lastGeneratedLine < pendingGeneratedLine);
+                // Only need to set this once
+                lastGeneratedCharacter = 0;
             }
             else {
                 ts.Debug.assertEqual(lastGeneratedLine, pendingGeneratedLine, "generatedLine cannot backtrack");
                 // Emit comma to separate the entry
                 if (hasLast) {
-                    mappings += ",";
+                    appendMappingCharCode(44 /* comma */);
                 }
             }
             // 1. Relative generated character
-            mappings += base64VLQFormatEncode(pendingGeneratedCharacter - lastGeneratedCharacter);
+            appendBase64VLQ(pendingGeneratedCharacter - lastGeneratedCharacter);
             lastGeneratedCharacter = pendingGeneratedCharacter;
             if (hasPendingSource) {
                 // 2. Relative sourceIndex
-                mappings += base64VLQFormatEncode(pendingSourceIndex - lastSourceIndex);
+                appendBase64VLQ(pendingSourceIndex - lastSourceIndex);
                 lastSourceIndex = pendingSourceIndex;
                 // 3. Relative source line
-                mappings += base64VLQFormatEncode(pendingSourceLine - lastSourceLine);
+                appendBase64VLQ(pendingSourceLine - lastSourceLine);
                 lastSourceLine = pendingSourceLine;
                 // 4. Relative source character
-                mappings += base64VLQFormatEncode(pendingSourceCharacter - lastSourceCharacter);
+                appendBase64VLQ(pendingSourceCharacter - lastSourceCharacter);
                 lastSourceCharacter = pendingSourceCharacter;
                 if (hasPendingName) {
                     // 5. Relative nameIndex
-                    mappings += base64VLQFormatEncode(pendingNameIndex - lastNameIndex);
+                    appendBase64VLQ(pendingNameIndex - lastNameIndex);
                     lastNameIndex = pendingNameIndex;
                 }
             }
             hasLast = true;
             exit();
         }
+        function flushMappingBuffer() {
+            if (mappingCharCodes.length > 0) {
+                mappings += String.fromCharCode.apply(undefined, mappingCharCodes);
+                mappingCharCodes.length = 0;
+            }
+        }
         function toJSON() {
             commitPendingMapping();
+            flushMappingBuffer();
             return {
                 version: 3,
                 file: file,
@@ -84488,10 +86074,33 @@
                 sourcesContent: sourcesContent,
             };
         }
+        function appendBase64VLQ(inValue) {
+            // Add a new least significant bit that has the sign of the value.
+            // if negative number the least significant bit that gets added to the number has value 1
+            // else least significant bit value that gets added is 0
+            // eg. -1 changes to binary : 01 [1] => 3
+            //     +1 changes to binary : 01 [0] => 2
+            if (inValue < 0) {
+                inValue = ((-inValue) << 1) + 1;
+            }
+            else {
+                inValue = inValue << 1;
+            }
+            // Encode 5 bits at a time starting from least significant bits
+            do {
+                var currentDigit = inValue & 31; // 11111
+                inValue = inValue >> 5;
+                if (inValue > 0) {
+                    // There are still more digits to decode, set the msb (6th bit)
+                    currentDigit = currentDigit | 32;
+                }
+                appendMappingCharCode(base64FormatEncode(currentDigit));
+            } while (inValue > 0);
+        }
     }
     ts.createSourceMapGenerator = createSourceMapGenerator;
     // Sometimes tools can see the following line as a source mapping url comment, so we mangle it a bit (the [M])
-    var sourceMapCommentRegExp = /^\/\/[@#] source[M]appingURL=(.+)\s*$/;
+    var sourceMapCommentRegExp = /^\/\/[@#] source[M]appingURL=(.+)$/;
     var whitespaceOrMapCommentRegExp = /^\s*(\/\/[@#] .*)?$/;
     function getLineInfo(text, lineStarts) {
         return {
@@ -84508,7 +86117,7 @@
             var line = lineInfo.getLineText(index);
             var comment = sourceMapCommentRegExp.exec(line);
             if (comment) {
-                return comment[1];
+                return ts.trimStringEnd(comment[1]);
             }
             // If we see a non-whitespace/map comment-like line, break, to avoid scanning up the entire file
             else if (!line.match(whitespaceOrMapCommentRegExp)) {
@@ -84714,31 +86323,6 @@
                         ch === 47 /* slash */ ? 63 :
                             -1;
     }
-    function base64VLQFormatEncode(inValue) {
-        // Add a new least significant bit that has the sign of the value.
-        // if negative number the least significant bit that gets added to the number has value 1
-        // else least significant bit value that gets added is 0
-        // eg. -1 changes to binary : 01 [1] => 3
-        //     +1 changes to binary : 01 [0] => 2
-        if (inValue < 0) {
-            inValue = ((-inValue) << 1) + 1;
-        }
-        else {
-            inValue = inValue << 1;
-        }
-        // Encode 5 bits at a time starting from least significant bits
-        var encodedStr = "";
-        do {
-            var currentDigit = inValue & 31; // 11111
-            inValue = inValue >> 5;
-            if (inValue > 0) {
-                // There are still more digits to decode, set the msb (6th bit)
-                currentDigit = currentDigit | 32;
-            }
-            encodedStr = encodedStr + String.fromCharCode(base64FormatEncode(currentDigit));
-        } while (inValue > 0);
-        return encodedStr;
-    }
     function isSourceMappedPosition(value) {
         return value.sourceIndex !== undefined
             && value.sourcePosition !== undefined;
@@ -84902,7 +86486,7 @@
     function chainBundle(context, transformSourceFile) {
         return transformSourceFileOrBundle;
         function transformSourceFileOrBundle(node) {
-            return node.kind === 298 /* SourceFile */ ? transformSourceFile(node) : transformBundle(node);
+            return node.kind === 300 /* SourceFile */ ? transformSourceFile(node) : transformBundle(node);
         }
         function transformBundle(node) {
             return context.factory.createBundle(ts.map(node.sourceFiles, transformSourceFile), node.prepends);
@@ -84953,7 +86537,7 @@
         for (var _i = 0, _a = sourceFile.statements; _i < _a.length; _i++) {
             var node = _a[_i];
             switch (node.kind) {
-                case 262 /* ImportDeclaration */:
+                case 264 /* ImportDeclaration */:
                     // import "mod"
                     // import x from "mod"
                     // import * as x from "mod"
@@ -84966,13 +86550,13 @@
                         hasImportDefault = true;
                     }
                     break;
-                case 261 /* ImportEqualsDeclaration */:
-                    if (node.moduleReference.kind === 273 /* ExternalModuleReference */) {
+                case 263 /* ImportEqualsDeclaration */:
+                    if (node.moduleReference.kind === 275 /* ExternalModuleReference */) {
                         // import x = require("mod")
                         externalImports.push(node);
                     }
                     break;
-                case 268 /* ExportDeclaration */:
+                case 270 /* ExportDeclaration */:
                     if (node.moduleSpecifier) {
                         if (!node.exportClause) {
                             // export * from "mod"
@@ -85003,13 +86587,13 @@
                         addExportedNamesForExportDeclaration(node);
                     }
                     break;
-                case 267 /* ExportAssignment */:
+                case 269 /* ExportAssignment */:
                     if (node.isExportEquals && !exportEquals) {
                         // export = x
                         exportEquals = node;
                     }
                     break;
-                case 233 /* VariableStatement */:
+                case 235 /* VariableStatement */:
                     if (ts.hasSyntacticModifier(node, 1 /* Export */)) {
                         for (var _b = 0, _c = node.declarationList.declarations; _b < _c.length; _b++) {
                             var decl = _c[_b];
@@ -85017,7 +86601,7 @@
                         }
                     }
                     break;
-                case 252 /* FunctionDeclaration */:
+                case 254 /* FunctionDeclaration */:
                     if (ts.hasSyntacticModifier(node, 1 /* Export */)) {
                         if (ts.hasSyntacticModifier(node, 512 /* Default */)) {
                             // export default function() { }
@@ -85037,7 +86621,7 @@
                         }
                     }
                     break;
-                case 253 /* ClassDeclaration */:
+                case 255 /* ClassDeclaration */:
                     if (ts.hasSyntacticModifier(node, 1 /* Export */)) {
                         if (ts.hasSyntacticModifier(node, 512 /* Default */)) {
                             // export default class { }
@@ -85135,27 +86719,27 @@
     }
     ts.isSimpleInlineableExpression = isSimpleInlineableExpression;
     function isCompoundAssignment(kind) {
-        return kind >= 63 /* FirstCompoundAssignment */
-            && kind <= 77 /* LastCompoundAssignment */;
+        return kind >= 64 /* FirstCompoundAssignment */
+            && kind <= 78 /* LastCompoundAssignment */;
     }
     ts.isCompoundAssignment = isCompoundAssignment;
     function getNonAssignmentOperatorForCompoundAssignment(kind) {
         switch (kind) {
-            case 63 /* PlusEqualsToken */: return 39 /* PlusToken */;
-            case 64 /* MinusEqualsToken */: return 40 /* MinusToken */;
-            case 65 /* AsteriskEqualsToken */: return 41 /* AsteriskToken */;
-            case 66 /* AsteriskAsteriskEqualsToken */: return 42 /* AsteriskAsteriskToken */;
-            case 67 /* SlashEqualsToken */: return 43 /* SlashToken */;
-            case 68 /* PercentEqualsToken */: return 44 /* PercentToken */;
-            case 69 /* LessThanLessThanEqualsToken */: return 47 /* LessThanLessThanToken */;
-            case 70 /* GreaterThanGreaterThanEqualsToken */: return 48 /* GreaterThanGreaterThanToken */;
-            case 71 /* GreaterThanGreaterThanGreaterThanEqualsToken */: return 49 /* GreaterThanGreaterThanGreaterThanToken */;
-            case 72 /* AmpersandEqualsToken */: return 50 /* AmpersandToken */;
-            case 73 /* BarEqualsToken */: return 51 /* BarToken */;
-            case 77 /* CaretEqualsToken */: return 52 /* CaretToken */;
-            case 74 /* BarBarEqualsToken */: return 56 /* BarBarToken */;
-            case 75 /* AmpersandAmpersandEqualsToken */: return 55 /* AmpersandAmpersandToken */;
-            case 76 /* QuestionQuestionEqualsToken */: return 60 /* QuestionQuestionToken */;
+            case 64 /* PlusEqualsToken */: return 39 /* PlusToken */;
+            case 65 /* MinusEqualsToken */: return 40 /* MinusToken */;
+            case 66 /* AsteriskEqualsToken */: return 41 /* AsteriskToken */;
+            case 67 /* AsteriskAsteriskEqualsToken */: return 42 /* AsteriskAsteriskToken */;
+            case 68 /* SlashEqualsToken */: return 43 /* SlashToken */;
+            case 69 /* PercentEqualsToken */: return 44 /* PercentToken */;
+            case 70 /* LessThanLessThanEqualsToken */: return 47 /* LessThanLessThanToken */;
+            case 71 /* GreaterThanGreaterThanEqualsToken */: return 48 /* GreaterThanGreaterThanToken */;
+            case 72 /* GreaterThanGreaterThanGreaterThanEqualsToken */: return 49 /* GreaterThanGreaterThanGreaterThanToken */;
+            case 73 /* AmpersandEqualsToken */: return 50 /* AmpersandToken */;
+            case 74 /* BarEqualsToken */: return 51 /* BarToken */;
+            case 78 /* CaretEqualsToken */: return 52 /* CaretToken */;
+            case 75 /* BarBarEqualsToken */: return 56 /* BarBarToken */;
+            case 76 /* AmpersandAmpersandEqualsToken */: return 55 /* AmpersandAmpersandToken */;
+            case 77 /* QuestionQuestionEqualsToken */: return 60 /* QuestionQuestionToken */;
         }
     }
     ts.getNonAssignmentOperatorForCompoundAssignment = getNonAssignmentOperatorForCompoundAssignment;
@@ -85192,6 +86776,13 @@
         return ts.filter(node.members, function (m) { return isInitializedOrStaticProperty(m, requireInitializer, isStatic); });
     }
     ts.getProperties = getProperties;
+    function isStaticPropertyDeclarationOrClassStaticBlockDeclaration(element) {
+        return isStaticPropertyDeclaration(element) || ts.isClassStaticBlockDeclaration(element);
+    }
+    function getStaticPropertiesAndClassStaticBlock(node) {
+        return ts.filter(node.members, isStaticPropertyDeclarationOrClassStaticBlockDeclaration);
+    }
+    ts.getStaticPropertiesAndClassStaticBlock = getStaticPropertiesAndClassStaticBlock;
     /**
      * Is a class element either a static or an instance property declaration with an initializer?
      *
@@ -85203,6 +86794,9 @@
             && (!!member.initializer || !requireInitializer)
             && ts.hasStaticModifier(member) === isStatic;
     }
+    function isStaticPropertyDeclaration(member) {
+        return ts.isPropertyDeclaration(member) && ts.hasStaticModifier(member);
+    }
     /**
      * Gets a value indicating whether a class element is either a static or an instance property declaration with an initializer.
      *
@@ -85210,7 +86804,7 @@
      * @param isStatic A value indicating whether the member should be a static or instance member.
      */
     function isInitializedProperty(member) {
-        return member.kind === 164 /* PropertyDeclaration */
+        return member.kind === 165 /* PropertyDeclaration */
             && member.initializer !== undefined;
     }
     ts.isInitializedProperty = isInitializedProperty;
@@ -85220,7 +86814,7 @@
      * @param member The class element node.
      */
     function isNonStaticMethodOrAccessorWithPrivateName(member) {
-        return !ts.hasStaticModifier(member) && ts.isMethodOrAccessor(member) && ts.isPrivateIdentifier(member.name);
+        return !ts.isStatic(member) && ts.isMethodOrAccessor(member) && ts.isPrivateIdentifier(member.name);
     }
     ts.isNonStaticMethodOrAccessorWithPrivateName = isNonStaticMethodOrAccessorWithPrivateName;
 })(ts || (ts = {}));
@@ -85760,6 +87354,7 @@
         // Examples: `\n` is converted to "\\n", a template string with a newline to "\n".
         var text = node.rawText;
         if (text === undefined) {
+            ts.Debug.assertIsDefined(currentSourceFile, "Template literal node is missing 'rawText' and does not have a source file. Possibly bad transform.");
             text = ts.getSourceTextOfNodeFromSourceFile(currentSourceFile, node);
             // text contains the original source, it will also contain quotes ("`"), dolar signs and braces ("${" and "}"),
             // thus we need to remove those characters.
@@ -85821,8 +87416,8 @@
         context.onEmitNode = onEmitNode;
         context.onSubstituteNode = onSubstituteNode;
         // Enable substitution for property/element access to emit const enum values.
-        context.enableSubstitution(202 /* PropertyAccessExpression */);
-        context.enableSubstitution(203 /* ElementAccessExpression */);
+        context.enableSubstitution(204 /* PropertyAccessExpression */);
+        context.enableSubstitution(205 /* ElementAccessExpression */);
         // These variables contain state that changes as we descend into the tree.
         var currentSourceFile;
         var currentNamespace;
@@ -85848,14 +87443,14 @@
         var applicableSubstitutions;
         return transformSourceFileOrBundle;
         function transformSourceFileOrBundle(node) {
-            if (node.kind === 299 /* Bundle */) {
+            if (node.kind === 301 /* Bundle */) {
                 return transformBundle(node);
             }
             return transformSourceFile(node);
         }
         function transformBundle(node) {
             return factory.createBundle(node.sourceFiles.map(transformSourceFile), ts.mapDefined(node.prepends, function (prepend) {
-                if (prepend.kind === 301 /* InputFiles */) {
+                if (prepend.kind === 303 /* InputFiles */) {
                     return ts.createUnparsedSourceFile(prepend, "js");
                 }
                 return prepend;
@@ -85906,16 +87501,16 @@
          */
         function onBeforeVisitNode(node) {
             switch (node.kind) {
-                case 298 /* SourceFile */:
-                case 259 /* CaseBlock */:
-                case 258 /* ModuleBlock */:
-                case 231 /* Block */:
+                case 300 /* SourceFile */:
+                case 261 /* CaseBlock */:
+                case 260 /* ModuleBlock */:
+                case 233 /* Block */:
                     currentLexicalScope = node;
                     currentNameScope = undefined;
                     currentScopeFirstDeclarationsOfName = undefined;
                     break;
-                case 253 /* ClassDeclaration */:
-                case 252 /* FunctionDeclaration */:
+                case 255 /* ClassDeclaration */:
+                case 254 /* FunctionDeclaration */:
                     if (ts.hasSyntacticModifier(node, 2 /* Ambient */)) {
                         break;
                     }
@@ -85927,7 +87522,7 @@
                         // These nodes should always have names unless they are default-exports;
                         // however, class declaration parsing allows for undefined names, so syntactically invalid
                         // programs may also have an undefined name.
-                        ts.Debug.assert(node.kind === 253 /* ClassDeclaration */ || ts.hasSyntacticModifier(node, 512 /* Default */));
+                        ts.Debug.assert(node.kind === 255 /* ClassDeclaration */ || ts.hasSyntacticModifier(node, 512 /* Default */));
                     }
                     if (ts.isClassDeclaration(node)) {
                         // XXX: should probably also cover interfaces and type aliases that can have type variables?
@@ -85970,10 +87565,10 @@
          */
         function sourceElementVisitorWorker(node) {
             switch (node.kind) {
-                case 262 /* ImportDeclaration */:
-                case 261 /* ImportEqualsDeclaration */:
-                case 267 /* ExportAssignment */:
-                case 268 /* ExportDeclaration */:
+                case 264 /* ImportDeclaration */:
+                case 263 /* ImportEqualsDeclaration */:
+                case 269 /* ExportAssignment */:
+                case 270 /* ExportDeclaration */:
                     return visitElidableStatement(node);
                 default:
                     return visitorWorker(node);
@@ -85994,13 +87589,13 @@
                 return node;
             }
             switch (node.kind) {
-                case 262 /* ImportDeclaration */:
+                case 264 /* ImportDeclaration */:
                     return visitImportDeclaration(node);
-                case 261 /* ImportEqualsDeclaration */:
+                case 263 /* ImportEqualsDeclaration */:
                     return visitImportEqualsDeclaration(node);
-                case 267 /* ExportAssignment */:
+                case 269 /* ExportAssignment */:
                     return visitExportAssignment(node);
-                case 268 /* ExportDeclaration */:
+                case 270 /* ExportDeclaration */:
                     return visitExportDeclaration(node);
                 default:
                     ts.Debug.fail("Unhandled ellided statement");
@@ -86020,11 +87615,11 @@
          * @param node The node to visit.
          */
         function namespaceElementVisitorWorker(node) {
-            if (node.kind === 268 /* ExportDeclaration */ ||
-                node.kind === 262 /* ImportDeclaration */ ||
-                node.kind === 263 /* ImportClause */ ||
-                (node.kind === 261 /* ImportEqualsDeclaration */ &&
-                    node.moduleReference.kind === 273 /* ExternalModuleReference */)) {
+            if (node.kind === 270 /* ExportDeclaration */ ||
+                node.kind === 264 /* ImportDeclaration */ ||
+                node.kind === 265 /* ImportClause */ ||
+                (node.kind === 263 /* ImportEqualsDeclaration */ &&
+                    node.moduleReference.kind === 275 /* ExternalModuleReference */)) {
                 // do not emit ES6 imports and exports since they are illegal inside a namespace
                 return undefined;
             }
@@ -86048,19 +87643,20 @@
          */
         function classElementVisitorWorker(node) {
             switch (node.kind) {
-                case 167 /* Constructor */:
+                case 169 /* Constructor */:
                     return visitConstructor(node);
-                case 164 /* PropertyDeclaration */:
+                case 165 /* PropertyDeclaration */:
                     // Property declarations are not TypeScript syntax, but they must be visited
                     // for the decorator transformation.
                     return visitPropertyDeclaration(node);
-                case 172 /* IndexSignature */:
-                case 168 /* GetAccessor */:
-                case 169 /* SetAccessor */:
-                case 166 /* MethodDeclaration */:
+                case 174 /* IndexSignature */:
+                case 170 /* GetAccessor */:
+                case 171 /* SetAccessor */:
+                case 167 /* MethodDeclaration */:
+                case 168 /* ClassStaticBlockDeclaration */:
                     // Fallback to the default visit behavior.
                     return visitorWorker(node);
-                case 230 /* SemicolonClassElement */:
+                case 232 /* SemicolonClassElement */:
                     return node;
                 default:
                     return ts.Debug.failBadSyntaxKind(node);
@@ -86070,7 +87666,7 @@
             if (ts.modifierToFlag(node.kind) & 18654 /* TypeScriptModifier */) {
                 return undefined;
             }
-            else if (currentNamespace && node.kind === 92 /* ExportKeyword */) {
+            else if (currentNamespace && node.kind === 93 /* ExportKeyword */) {
                 return undefined;
             }
             return node;
@@ -86087,72 +87683,72 @@
                 return factory.createNotEmittedStatement(node);
             }
             switch (node.kind) {
-                case 92 /* ExportKeyword */:
-                case 87 /* DefaultKeyword */:
+                case 93 /* ExportKeyword */:
+                case 88 /* DefaultKeyword */:
                     // ES6 export and default modifiers are elided when inside a namespace.
                     return currentNamespace ? undefined : node;
-                case 122 /* PublicKeyword */:
-                case 120 /* PrivateKeyword */:
-                case 121 /* ProtectedKeyword */:
-                case 125 /* AbstractKeyword */:
-                case 156 /* OverrideKeyword */:
-                case 84 /* ConstKeyword */:
-                case 133 /* DeclareKeyword */:
-                case 142 /* ReadonlyKeyword */:
+                case 123 /* PublicKeyword */:
+                case 121 /* PrivateKeyword */:
+                case 122 /* ProtectedKeyword */:
+                case 126 /* AbstractKeyword */:
+                case 157 /* OverrideKeyword */:
+                case 85 /* ConstKeyword */:
+                case 134 /* DeclareKeyword */:
+                case 143 /* ReadonlyKeyword */:
                 // TypeScript accessibility and readonly modifiers are elided
                 // falls through
-                case 179 /* ArrayType */:
-                case 180 /* TupleType */:
-                case 181 /* OptionalType */:
-                case 182 /* RestType */:
-                case 178 /* TypeLiteral */:
-                case 173 /* TypePredicate */:
-                case 160 /* TypeParameter */:
-                case 128 /* AnyKeyword */:
-                case 152 /* UnknownKeyword */:
-                case 131 /* BooleanKeyword */:
-                case 147 /* StringKeyword */:
-                case 144 /* NumberKeyword */:
-                case 141 /* NeverKeyword */:
-                case 113 /* VoidKeyword */:
-                case 148 /* SymbolKeyword */:
-                case 176 /* ConstructorType */:
-                case 175 /* FunctionType */:
-                case 177 /* TypeQuery */:
-                case 174 /* TypeReference */:
-                case 183 /* UnionType */:
-                case 184 /* IntersectionType */:
-                case 185 /* ConditionalType */:
-                case 187 /* ParenthesizedType */:
-                case 188 /* ThisType */:
-                case 189 /* TypeOperator */:
-                case 190 /* IndexedAccessType */:
-                case 191 /* MappedType */:
-                case 192 /* LiteralType */:
+                case 181 /* ArrayType */:
+                case 182 /* TupleType */:
+                case 183 /* OptionalType */:
+                case 184 /* RestType */:
+                case 180 /* TypeLiteral */:
+                case 175 /* TypePredicate */:
+                case 161 /* TypeParameter */:
+                case 129 /* AnyKeyword */:
+                case 153 /* UnknownKeyword */:
+                case 132 /* BooleanKeyword */:
+                case 148 /* StringKeyword */:
+                case 145 /* NumberKeyword */:
+                case 142 /* NeverKeyword */:
+                case 114 /* VoidKeyword */:
+                case 149 /* SymbolKeyword */:
+                case 178 /* ConstructorType */:
+                case 177 /* FunctionType */:
+                case 179 /* TypeQuery */:
+                case 176 /* TypeReference */:
+                case 185 /* UnionType */:
+                case 186 /* IntersectionType */:
+                case 187 /* ConditionalType */:
+                case 189 /* ParenthesizedType */:
+                case 190 /* ThisType */:
+                case 191 /* TypeOperator */:
+                case 192 /* IndexedAccessType */:
+                case 193 /* MappedType */:
+                case 194 /* LiteralType */:
                 // TypeScript type nodes are elided.
                 // falls through
-                case 172 /* IndexSignature */:
+                case 174 /* IndexSignature */:
                 // TypeScript index signatures are elided.
                 // falls through
-                case 162 /* Decorator */:
-                // TypeScript decorators are elided. They will be emitted as part of visitClassDeclaration.
-                // falls through
-                case 255 /* TypeAliasDeclaration */:
-                    // TypeScript type-only declarations are elided.
+                case 163 /* Decorator */:
+                    // TypeScript decorators are elided. They will be emitted as part of visitClassDeclaration.
                     return undefined;
-                case 164 /* PropertyDeclaration */:
+                case 257 /* TypeAliasDeclaration */:
+                    // TypeScript type-only declarations are elided.
+                    return factory.createNotEmittedStatement(node);
+                case 165 /* PropertyDeclaration */:
                     // TypeScript property declarations are elided. However their names are still visited, and can potentially be retained if they could have sideeffects
                     return visitPropertyDeclaration(node);
-                case 260 /* NamespaceExportDeclaration */:
+                case 262 /* NamespaceExportDeclaration */:
                     // TypeScript namespace export declarations are elided.
                     return undefined;
-                case 167 /* Constructor */:
+                case 169 /* Constructor */:
                     return visitConstructor(node);
-                case 254 /* InterfaceDeclaration */:
+                case 256 /* InterfaceDeclaration */:
                     // TypeScript interfaces are elided, but some comments may be preserved.
                     // See the implementation of `getLeadingComments` in comments.ts for more details.
                     return factory.createNotEmittedStatement(node);
-                case 253 /* ClassDeclaration */:
+                case 255 /* ClassDeclaration */:
                     // This may be a class declaration with TypeScript syntax extensions.
                     //
                     // TypeScript class syntax extensions include:
@@ -86162,7 +87758,7 @@
                     // - index signatures
                     // - method overload signatures
                     return visitClassDeclaration(node);
-                case 222 /* ClassExpression */:
+                case 224 /* ClassExpression */:
                     // This may be a class expression with TypeScript syntax extensions.
                     //
                     // TypeScript class syntax extensions include:
@@ -86172,35 +87768,35 @@
                     // - index signatures
                     // - method overload signatures
                     return visitClassExpression(node);
-                case 287 /* HeritageClause */:
+                case 289 /* HeritageClause */:
                     // This may be a heritage clause with TypeScript syntax extensions.
                     //
                     // TypeScript heritage clause extensions include:
                     // - `implements` clause
                     return visitHeritageClause(node);
-                case 224 /* ExpressionWithTypeArguments */:
+                case 226 /* ExpressionWithTypeArguments */:
                     // TypeScript supports type arguments on an expression in an `extends` heritage clause.
                     return visitExpressionWithTypeArguments(node);
-                case 166 /* MethodDeclaration */:
+                case 167 /* MethodDeclaration */:
                     // TypeScript method declarations may have decorators, modifiers
                     // or type annotations.
                     return visitMethodDeclaration(node);
-                case 168 /* GetAccessor */:
+                case 170 /* GetAccessor */:
                     // Get Accessors can have TypeScript modifiers, decorators, and type annotations.
                     return visitGetAccessor(node);
-                case 169 /* SetAccessor */:
+                case 171 /* SetAccessor */:
                     // Set Accessors can have TypeScript modifiers and type annotations.
                     return visitSetAccessor(node);
-                case 252 /* FunctionDeclaration */:
+                case 254 /* FunctionDeclaration */:
                     // Typescript function declarations can have modifiers, decorators, and type annotations.
                     return visitFunctionDeclaration(node);
-                case 209 /* FunctionExpression */:
+                case 211 /* FunctionExpression */:
                     // TypeScript function expressions can have modifiers and type annotations.
                     return visitFunctionExpression(node);
-                case 210 /* ArrowFunction */:
+                case 212 /* ArrowFunction */:
                     // TypeScript arrow functions can have modifiers and type annotations.
                     return visitArrowFunction(node);
-                case 161 /* Parameter */:
+                case 162 /* Parameter */:
                     // This may be a parameter declaration with TypeScript syntax extensions.
                     //
                     // TypeScript parameter declaration syntax extensions include:
@@ -86210,40 +87806,40 @@
                     // - type annotations
                     // - this parameters
                     return visitParameter(node);
-                case 208 /* ParenthesizedExpression */:
+                case 210 /* ParenthesizedExpression */:
                     // ParenthesizedExpressions are TypeScript if their expression is a
                     // TypeAssertion or AsExpression
                     return visitParenthesizedExpression(node);
-                case 207 /* TypeAssertionExpression */:
-                case 225 /* AsExpression */:
+                case 209 /* TypeAssertionExpression */:
+                case 227 /* AsExpression */:
                     // TypeScript type assertions are removed, but their subtrees are preserved.
                     return visitAssertionExpression(node);
-                case 204 /* CallExpression */:
+                case 206 /* CallExpression */:
                     return visitCallExpression(node);
-                case 205 /* NewExpression */:
+                case 207 /* NewExpression */:
                     return visitNewExpression(node);
-                case 206 /* TaggedTemplateExpression */:
+                case 208 /* TaggedTemplateExpression */:
                     return visitTaggedTemplateExpression(node);
-                case 226 /* NonNullExpression */:
+                case 228 /* NonNullExpression */:
                     // TypeScript non-null expressions are removed, but their subtrees are preserved.
                     return visitNonNullExpression(node);
-                case 256 /* EnumDeclaration */:
+                case 258 /* EnumDeclaration */:
                     // TypeScript enum declarations do not exist in ES6 and must be rewritten.
                     return visitEnumDeclaration(node);
-                case 233 /* VariableStatement */:
+                case 235 /* VariableStatement */:
                     // TypeScript namespace exports for variable statements must be transformed.
                     return visitVariableStatement(node);
-                case 250 /* VariableDeclaration */:
+                case 252 /* VariableDeclaration */:
                     return visitVariableDeclaration(node);
-                case 257 /* ModuleDeclaration */:
+                case 259 /* ModuleDeclaration */:
                     // TypeScript namespace declarations must be transformed.
                     return visitModuleDeclaration(node);
-                case 261 /* ImportEqualsDeclaration */:
+                case 263 /* ImportEqualsDeclaration */:
                     // TypeScript namespace or external module import.
                     return visitImportEqualsDeclaration(node);
-                case 275 /* JsxSelfClosingElement */:
+                case 277 /* JsxSelfClosingElement */:
                     return visitJsxSelfClosingElement(node);
-                case 276 /* JsxOpeningElement */:
+                case 278 /* JsxOpeningElement */:
                     return visitJsxJsxOpeningElement(node);
                 default:
                     // node contains some other TypeScript syntax
@@ -86256,33 +87852,14 @@
                 !ts.isJsonSourceFile(node);
             return factory.updateSourceFile(node, ts.visitLexicalEnvironment(node.statements, sourceElementVisitor, context, /*start*/ 0, alwaysStrict));
         }
-        /**
-         * Tests whether we should emit a __decorate call for a class declaration.
-         */
-        function shouldEmitDecorateCallForClass(node) {
-            if (node.decorators && node.decorators.length > 0) {
-                return true;
-            }
-            var constructor = ts.getFirstConstructorWithBody(node);
-            if (constructor) {
-                return ts.forEach(constructor.parameters, shouldEmitDecorateCallForParameter);
-            }
-            return false;
-        }
-        /**
-         * Tests whether we should emit a __decorate call for a parameter declaration.
-         */
-        function shouldEmitDecorateCallForParameter(parameter) {
-            return parameter.decorators !== undefined && parameter.decorators.length > 0;
-        }
         function getClassFacts(node, staticProperties) {
             var facts = 0 /* None */;
             if (ts.some(staticProperties))
                 facts |= 1 /* HasStaticInitializedProperties */;
             var extendsClauseElement = ts.getEffectiveBaseTypeNode(node);
-            if (extendsClauseElement && ts.skipOuterExpressions(extendsClauseElement.expression).kind !== 103 /* NullKeyword */)
+            if (extendsClauseElement && ts.skipOuterExpressions(extendsClauseElement.expression).kind !== 104 /* NullKeyword */)
                 facts |= 64 /* IsDerivedClass */;
-            if (shouldEmitDecorateCallForClass(node))
+            if (ts.classOrConstructorParameterIsDecorated(node))
                 facts |= 2 /* HasConstructorDecorators */;
             if (ts.childIsDecorated(node))
                 facts |= 4 /* HasMemberDecorators */;
@@ -86503,7 +88080,11 @@
             //
             var location = ts.moveRangePastDecorators(node);
             var classAlias = getClassAliasIfNeeded(node);
-            var declName = factory.getLocalName(node, /*allowComments*/ false, /*allowSourceMaps*/ true);
+            // When we transform to ES5/3 this will be moved inside an IIFE and should reference the name
+            // without any block-scoped variable collision handling
+            var declName = languageVersion <= 2 /* ES2015 */ ?
+                factory.getInternalName(node, /*allowComments*/ false, /*allowSourceMaps*/ true) :
+                factory.getLocalName(node, /*allowComments*/ false, /*allowSourceMaps*/ true);
             //  ... = class ${name} ${heritageClauses} {
             //      ${members}
             //  }
@@ -86581,7 +88162,7 @@
          * @param member The class member.
          */
         function isStaticDecoratedClassElement(member, parent) {
-            return isDecoratedClassElement(member, /*isStatic*/ true, parent);
+            return isDecoratedClassElement(member, /*isStaticElement*/ true, parent);
         }
         /**
          * Determines whether a class member is an instance member of a class that is decorated,
@@ -86590,7 +88171,7 @@
          * @param member The class member.
          */
         function isInstanceDecoratedClassElement(member, parent) {
-            return isDecoratedClassElement(member, /*isStatic*/ false, parent);
+            return isDecoratedClassElement(member, /*isStaticElement*/ false, parent);
         }
         /**
          * Determines whether a class member is either a static or an instance member of a class
@@ -86598,9 +88179,9 @@
          *
          * @param member The class member.
          */
-        function isDecoratedClassElement(member, isStatic, parent) {
+        function isDecoratedClassElement(member, isStaticElement, parent) {
             return ts.nodeOrChildIsDecorated(member, parent)
-                && isStatic === ts.hasSyntacticModifier(member, 32 /* Static */);
+                && isStaticElement === ts.isStatic(member);
         }
         /**
          * Gets an array of arrays of decorators for the parameters of a function-like node.
@@ -86652,12 +88233,12 @@
          */
         function getAllDecoratorsOfClassElement(node, member) {
             switch (member.kind) {
-                case 168 /* GetAccessor */:
-                case 169 /* SetAccessor */:
+                case 170 /* GetAccessor */:
+                case 171 /* SetAccessor */:
                     return getAllDecoratorsOfAccessors(node, member);
-                case 166 /* MethodDeclaration */:
+                case 167 /* MethodDeclaration */:
                     return getAllDecoratorsOfMethod(member);
-                case 164 /* PropertyDeclaration */:
+                case 165 /* PropertyDeclaration */:
                     return getAllDecoratorsOfProperty(member);
                 default:
                     return undefined;
@@ -86810,7 +88391,7 @@
             var prefix = getClassMemberPrefix(node, member);
             var memberName = getExpressionForPropertyName(member, /*generateNameForComputedPropertyName*/ true);
             var descriptor = languageVersion > 0 /* ES3 */
-                ? member.kind === 164 /* PropertyDeclaration */
+                ? member.kind === 165 /* PropertyDeclaration */
                     // We emit `void 0` here to indicate to `__decorate` that it can invoke `Object.defineProperty` directly, but that it
                     // should not invoke `Object.getOwnPropertyDescriptor`.
                     ? factory.createVoidZero()
@@ -86846,7 +88427,11 @@
                 return undefined;
             }
             var classAlias = classAliases && classAliases[ts.getOriginalNodeId(node)];
-            var localName = factory.getLocalName(node, /*allowComments*/ false, /*allowSourceMaps*/ true);
+            // When we transform to ES5/3 this will be moved inside an IIFE and should reference the name
+            // without any block-scoped variable collision handling
+            var localName = languageVersion <= 2 /* ES2015 */ ?
+                factory.getInternalName(node, /*allowComments*/ false, /*allowSourceMaps*/ true) :
+                factory.getLocalName(node, /*allowComments*/ false, /*allowSourceMaps*/ true);
             var decorate = emitHelpers().createDecorateHelper(decoratorExpressions, localName);
             var expression = factory.createAssignment(localName, classAlias ? factory.createAssignment(classAlias, decorate) : decorate);
             ts.setEmitFlags(expression, 1536 /* NoComments */);
@@ -86934,10 +88519,10 @@
          */
         function shouldAddTypeMetadata(node) {
             var kind = node.kind;
-            return kind === 166 /* MethodDeclaration */
-                || kind === 168 /* GetAccessor */
-                || kind === 169 /* SetAccessor */
-                || kind === 164 /* PropertyDeclaration */;
+            return kind === 167 /* MethodDeclaration */
+                || kind === 170 /* GetAccessor */
+                || kind === 171 /* SetAccessor */
+                || kind === 165 /* PropertyDeclaration */;
         }
         /**
          * Determines whether to emit the "design:returntype" metadata based on the node's kind.
@@ -86947,7 +88532,7 @@
          * @param node The node to test.
          */
         function shouldAddReturnTypeMetadata(node) {
-            return node.kind === 166 /* MethodDeclaration */;
+            return node.kind === 167 /* MethodDeclaration */;
         }
         /**
          * Determines whether to emit the "design:paramtypes" metadata based on the node's kind.
@@ -86958,12 +88543,12 @@
          */
         function shouldAddParamTypesMetadata(node) {
             switch (node.kind) {
-                case 253 /* ClassDeclaration */:
-                case 222 /* ClassExpression */:
+                case 255 /* ClassDeclaration */:
+                case 224 /* ClassExpression */:
                     return ts.getFirstConstructorWithBody(node) !== undefined;
-                case 166 /* MethodDeclaration */:
-                case 168 /* GetAccessor */:
-                case 169 /* SetAccessor */:
+                case 167 /* MethodDeclaration */:
+                case 170 /* GetAccessor */:
+                case 171 /* SetAccessor */:
                     return true;
             }
             return false;
@@ -86980,15 +88565,15 @@
          */
         function serializeTypeOfNode(node) {
             switch (node.kind) {
-                case 164 /* PropertyDeclaration */:
-                case 161 /* Parameter */:
+                case 165 /* PropertyDeclaration */:
+                case 162 /* Parameter */:
                     return serializeTypeNode(node.type);
-                case 169 /* SetAccessor */:
-                case 168 /* GetAccessor */:
+                case 171 /* SetAccessor */:
+                case 170 /* GetAccessor */:
                     return serializeTypeNode(getAccessorTypeNode(node));
-                case 253 /* ClassDeclaration */:
-                case 222 /* ClassExpression */:
-                case 166 /* MethodDeclaration */:
+                case 255 /* ClassDeclaration */:
+                case 224 /* ClassExpression */:
+                case 167 /* MethodDeclaration */:
                     return factory.createIdentifier("Function");
                 default:
                     return factory.createVoidZero();
@@ -87025,7 +88610,7 @@
             return factory.createArrayLiteralExpression(expressions);
         }
         function getParametersOfDecoratedDeclaration(node, container) {
-            if (container && node.kind === 168 /* GetAccessor */) {
+            if (container && node.kind === 170 /* GetAccessor */) {
                 var setAccessor = ts.getAllAccessorDeclarations(container.members, node).setAccessor;
                 if (setAccessor) {
                     return setAccessor.parameters;
@@ -87070,82 +88655,82 @@
                 return factory.createIdentifier("Object");
             }
             switch (node.kind) {
-                case 113 /* VoidKeyword */:
-                case 150 /* UndefinedKeyword */:
-                case 141 /* NeverKeyword */:
+                case 114 /* VoidKeyword */:
+                case 151 /* UndefinedKeyword */:
+                case 142 /* NeverKeyword */:
                     return factory.createVoidZero();
-                case 187 /* ParenthesizedType */:
+                case 189 /* ParenthesizedType */:
                     return serializeTypeNode(node.type);
-                case 175 /* FunctionType */:
-                case 176 /* ConstructorType */:
+                case 177 /* FunctionType */:
+                case 178 /* ConstructorType */:
                     return factory.createIdentifier("Function");
-                case 179 /* ArrayType */:
-                case 180 /* TupleType */:
+                case 181 /* ArrayType */:
+                case 182 /* TupleType */:
                     return factory.createIdentifier("Array");
-                case 173 /* TypePredicate */:
-                case 131 /* BooleanKeyword */:
+                case 175 /* TypePredicate */:
+                case 132 /* BooleanKeyword */:
                     return factory.createIdentifier("Boolean");
-                case 147 /* StringKeyword */:
+                case 148 /* StringKeyword */:
                     return factory.createIdentifier("String");
-                case 145 /* ObjectKeyword */:
+                case 146 /* ObjectKeyword */:
                     return factory.createIdentifier("Object");
-                case 192 /* LiteralType */:
+                case 194 /* LiteralType */:
                     switch (node.literal.kind) {
                         case 10 /* StringLiteral */:
                         case 14 /* NoSubstitutionTemplateLiteral */:
                             return factory.createIdentifier("String");
-                        case 215 /* PrefixUnaryExpression */:
+                        case 217 /* PrefixUnaryExpression */:
                         case 8 /* NumericLiteral */:
                             return factory.createIdentifier("Number");
                         case 9 /* BigIntLiteral */:
                             return getGlobalBigIntNameWithFallback();
-                        case 109 /* TrueKeyword */:
-                        case 94 /* FalseKeyword */:
+                        case 110 /* TrueKeyword */:
+                        case 95 /* FalseKeyword */:
                             return factory.createIdentifier("Boolean");
-                        case 103 /* NullKeyword */:
+                        case 104 /* NullKeyword */:
                             return factory.createVoidZero();
                         default:
                             return ts.Debug.failBadSyntaxKind(node.literal);
                     }
-                case 144 /* NumberKeyword */:
+                case 145 /* NumberKeyword */:
                     return factory.createIdentifier("Number");
-                case 155 /* BigIntKeyword */:
+                case 156 /* BigIntKeyword */:
                     return getGlobalBigIntNameWithFallback();
-                case 148 /* SymbolKeyword */:
+                case 149 /* SymbolKeyword */:
                     return languageVersion < 2 /* ES2015 */
                         ? getGlobalSymbolNameWithFallback()
                         : factory.createIdentifier("Symbol");
-                case 174 /* TypeReference */:
+                case 176 /* TypeReference */:
                     return serializeTypeReferenceNode(node);
-                case 184 /* IntersectionType */:
-                case 183 /* UnionType */:
+                case 186 /* IntersectionType */:
+                case 185 /* UnionType */:
                     return serializeTypeList(node.types);
-                case 185 /* ConditionalType */:
+                case 187 /* ConditionalType */:
                     return serializeTypeList([node.trueType, node.falseType]);
-                case 189 /* TypeOperator */:
-                    if (node.operator === 142 /* ReadonlyKeyword */) {
+                case 191 /* TypeOperator */:
+                    if (node.operator === 143 /* ReadonlyKeyword */) {
                         return serializeTypeNode(node.type);
                     }
                     break;
-                case 177 /* TypeQuery */:
-                case 190 /* IndexedAccessType */:
-                case 191 /* MappedType */:
-                case 178 /* TypeLiteral */:
-                case 128 /* AnyKeyword */:
-                case 152 /* UnknownKeyword */:
-                case 188 /* ThisType */:
-                case 196 /* ImportType */:
+                case 179 /* TypeQuery */:
+                case 192 /* IndexedAccessType */:
+                case 193 /* MappedType */:
+                case 180 /* TypeLiteral */:
+                case 129 /* AnyKeyword */:
+                case 153 /* UnknownKeyword */:
+                case 190 /* ThisType */:
+                case 198 /* ImportType */:
                     break;
                 // handle JSDoc types from an invalid parse
-                case 304 /* JSDocAllType */:
-                case 305 /* JSDocUnknownType */:
-                case 309 /* JSDocFunctionType */:
-                case 310 /* JSDocVariadicType */:
-                case 311 /* JSDocNamepathType */:
+                case 307 /* JSDocAllType */:
+                case 308 /* JSDocUnknownType */:
+                case 312 /* JSDocFunctionType */:
+                case 313 /* JSDocVariadicType */:
+                case 314 /* JSDocNamepathType */:
                     break;
-                case 306 /* JSDocNullableType */:
-                case 307 /* JSDocNonNullableType */:
-                case 308 /* JSDocOptionalType */:
+                case 309 /* JSDocNullableType */:
+                case 310 /* JSDocNonNullableType */:
+                case 311 /* JSDocOptionalType */:
                     return serializeTypeNode(node.type);
                 default:
                     return ts.Debug.failBadSyntaxKind(node);
@@ -87156,15 +88741,15 @@
             // Note when updating logic here also update getEntityNameForDecoratorMetadata
             // so that aliases can be marked as referenced
             var serializedUnion;
-            for (var _i = 0, types_24 = types; _i < types_24.length; _i++) {
-                var typeNode = types_24[_i];
-                while (typeNode.kind === 187 /* ParenthesizedType */) {
+            for (var _i = 0, types_23 = types; _i < types_23.length; _i++) {
+                var typeNode = types_23[_i];
+                while (typeNode.kind === 189 /* ParenthesizedType */) {
                     typeNode = typeNode.type; // Skip parens if need be
                 }
-                if (typeNode.kind === 141 /* NeverKeyword */) {
+                if (typeNode.kind === 142 /* NeverKeyword */) {
                     continue; // Always elide `never` from the union/intersection if possible
                 }
-                if (!strictNullChecks && (typeNode.kind === 192 /* LiteralType */ && typeNode.literal.kind === 103 /* NullKeyword */ || typeNode.kind === 150 /* UndefinedKeyword */)) {
+                if (!strictNullChecks && (typeNode.kind === 194 /* LiteralType */ && typeNode.literal.kind === 104 /* NullKeyword */ || typeNode.kind === 151 /* UndefinedKeyword */)) {
                     continue; // Elide null and undefined from unions for metadata, just like what we did prior to the implementation of strict null checks
                 }
                 var serializedIndividual = serializeTypeNode(typeNode);
@@ -87246,12 +88831,12 @@
          * @param node The entity name to serialize.
          */
         function serializeEntityNameAsExpressionFallback(node) {
-            if (node.kind === 78 /* Identifier */) {
+            if (node.kind === 79 /* Identifier */) {
                 // A -> typeof A !== undefined && A
                 var copied = serializeEntityNameAsExpression(node);
                 return createCheckedValue(copied, copied);
             }
-            if (node.left.kind === 78 /* Identifier */) {
+            if (node.left.kind === 79 /* Identifier */) {
                 // A.B -> typeof A !== undefined && A.B
                 return createCheckedValue(serializeEntityNameAsExpression(node.left), serializeEntityNameAsExpression(node));
             }
@@ -87267,14 +88852,14 @@
          */
         function serializeEntityNameAsExpression(node) {
             switch (node.kind) {
-                case 78 /* Identifier */:
+                case 79 /* Identifier */:
                     // Create a clone of the name with a new parent, and treat it as if it were
                     // a source tree node for the purposes of the checker.
                     var name = ts.setParent(ts.setTextRange(ts.parseNodeFactory.cloneNode(node), node), node.parent);
                     name.original = undefined;
                     ts.setParent(name, ts.getParseTreeNode(currentLexicalScope)); // ensure the parent is set to a parse tree node.
                     return name;
-                case 158 /* QualifiedName */:
+                case 159 /* QualifiedName */:
                     return serializeQualifiedNameAsExpression(node);
             }
         }
@@ -87365,7 +88950,7 @@
          * @param node The HeritageClause to transform.
          */
         function visitHeritageClause(node) {
-            if (node.token === 116 /* ImplementsKeyword */) {
+            if (node.token === 117 /* ImplementsKeyword */) {
                 // implements clauses are elided
                 return undefined;
             }
@@ -87847,12 +89432,12 @@
             // enums in any other scope are emitted as a `let` declaration.
             var statement = factory.createVariableStatement(ts.visitNodes(node.modifiers, modifierVisitor, ts.isModifier), factory.createVariableDeclarationList([
                 factory.createVariableDeclaration(factory.getLocalName(node, /*allowComments*/ false, /*allowSourceMaps*/ true))
-            ], currentLexicalScope.kind === 298 /* SourceFile */ ? 0 /* None */ : 1 /* Let */));
+            ], currentLexicalScope.kind === 300 /* SourceFile */ ? 0 /* None */ : 1 /* Let */));
             ts.setOriginalNode(statement, node);
             recordEmittedDeclarationInScope(node);
             if (isFirstEmittedDeclarationInScope(node)) {
                 // Adjust the source map emit to match the old emitter.
-                if (node.kind === 256 /* EnumDeclaration */) {
+                if (node.kind === 258 /* EnumDeclaration */) {
                     ts.setSourceMapRange(statement.declarationList, node);
                 }
                 else {
@@ -87977,7 +89562,7 @@
             var statementsLocation;
             var blockLocation;
             if (node.body) {
-                if (node.body.kind === 258 /* ModuleBlock */) {
+                if (node.body.kind === 260 /* ModuleBlock */) {
                     saveStateAndInvoke(node.body, function (body) { return ts.addRange(statements, ts.visitNodes(body.statements, namespaceElementVisitor, ts.isStatement)); });
                     statementsLocation = node.body.statements;
                     blockLocation = node.body;
@@ -88024,13 +89609,13 @@
             //     })(hi = hello.hi || (hello.hi = {}));
             // })(hello || (hello = {}));
             // We only want to emit comment on the namespace which contains block body itself, not the containing namespaces.
-            if (!node.body || node.body.kind !== 258 /* ModuleBlock */) {
+            if (!node.body || node.body.kind !== 260 /* ModuleBlock */) {
                 ts.setEmitFlags(block, ts.getEmitFlags(block) | 1536 /* NoComments */);
             }
             return block;
         }
         function getInnerMostModuleDeclarationFromDottedModule(moduleDeclaration) {
-            if (moduleDeclaration.body.kind === 257 /* ModuleDeclaration */) {
+            if (moduleDeclaration.body.kind === 259 /* ModuleDeclaration */) {
                 var recursiveInnerModule = getInnerMostModuleDeclarationFromDottedModule(moduleDeclaration.body);
                 return recursiveInnerModule || moduleDeclaration.body;
             }
@@ -88080,7 +89665,7 @@
          * @param node The named import bindings node.
          */
         function visitNamedImportBindings(node) {
-            if (node.kind === 264 /* NamespaceImport */) {
+            if (node.kind === 266 /* NamespaceImport */) {
                 // Elide a namespace import if it is not referenced.
                 return resolver.isReferencedAliasDeclaration(node) ? node : undefined;
             }
@@ -88307,14 +89892,14 @@
             return factory.createPropertyAccessExpression(factory.getDeclarationName(node), "prototype");
         }
         function getClassMemberPrefix(node, member) {
-            return ts.hasSyntacticModifier(member, 32 /* Static */)
+            return ts.isStatic(member)
                 ? factory.getDeclarationName(node)
                 : getClassPrototype(node);
         }
         function enableSubstitutionForNonQualifiedEnumMembers() {
             if ((enabledSubstitutions & 8 /* NonQualifiedEnumMembers */) === 0) {
                 enabledSubstitutions |= 8 /* NonQualifiedEnumMembers */;
-                context.enableSubstitution(78 /* Identifier */);
+                context.enableSubstitution(79 /* Identifier */);
             }
         }
         function enableSubstitutionForClassAliases() {
@@ -88322,7 +89907,7 @@
                 enabledSubstitutions |= 1 /* ClassAliases */;
                 // We need to enable substitutions for identifiers. This allows us to
                 // substitute class names inside of a class declaration.
-                context.enableSubstitution(78 /* Identifier */);
+                context.enableSubstitution(79 /* Identifier */);
                 // Keep track of class aliases.
                 classAliases = [];
             }
@@ -88332,17 +89917,17 @@
                 enabledSubstitutions |= 2 /* NamespaceExports */;
                 // We need to enable substitutions for identifiers and shorthand property assignments. This allows us to
                 // substitute the names of exported members of a namespace.
-                context.enableSubstitution(78 /* Identifier */);
-                context.enableSubstitution(290 /* ShorthandPropertyAssignment */);
+                context.enableSubstitution(79 /* Identifier */);
+                context.enableSubstitution(292 /* ShorthandPropertyAssignment */);
                 // We need to be notified when entering and exiting namespaces.
-                context.enableEmitNotification(257 /* ModuleDeclaration */);
+                context.enableEmitNotification(259 /* ModuleDeclaration */);
             }
         }
         function isTransformedModuleDeclaration(node) {
-            return ts.getOriginalNode(node).kind === 257 /* ModuleDeclaration */;
+            return ts.getOriginalNode(node).kind === 259 /* ModuleDeclaration */;
         }
         function isTransformedEnumDeclaration(node) {
-            return ts.getOriginalNode(node).kind === 256 /* EnumDeclaration */;
+            return ts.getOriginalNode(node).kind === 258 /* EnumDeclaration */;
         }
         /**
          * Hook for node emit.
@@ -88401,11 +89986,11 @@
         }
         function substituteExpression(node) {
             switch (node.kind) {
-                case 78 /* Identifier */:
+                case 79 /* Identifier */:
                     return substituteExpressionIdentifier(node);
-                case 202 /* PropertyAccessExpression */:
+                case 204 /* PropertyAccessExpression */:
                     return substitutePropertyAccessExpression(node);
-                case 203 /* ElementAccessExpression */:
+                case 205 /* ElementAccessExpression */:
                     return substituteElementAccessExpression(node);
             }
             return node;
@@ -88443,9 +90028,9 @@
                 // If we are nested within a namespace declaration, we may need to qualifiy
                 // an identifier that is exported from a merged namespace.
                 var container = resolver.getReferencedExportContainer(node, /*prefixLocals*/ false);
-                if (container && container.kind !== 298 /* SourceFile */) {
-                    var substitute = (applicableSubstitutions & 2 /* NamespaceExports */ && container.kind === 257 /* ModuleDeclaration */) ||
-                        (applicableSubstitutions & 8 /* NonQualifiedEnumMembers */ && container.kind === 256 /* EnumDeclaration */);
+                if (container && container.kind !== 300 /* SourceFile */) {
+                    var substitute = (applicableSubstitutions & 2 /* NamespaceExports */ && container.kind === 259 /* ModuleDeclaration */) ||
+                        (applicableSubstitutions & 8 /* NonQualifiedEnumMembers */ && container.kind === 258 /* EnumDeclaration */);
                     if (substitute) {
                         return ts.setTextRange(factory.createPropertyAccessExpression(factory.getGeneratedNameForNode(container), node), 
                         /*location*/ node);
@@ -88496,6 +90081,11 @@
          * which have initializers that reference the class name.
          */
         ClassPropertySubstitutionFlags[ClassPropertySubstitutionFlags["ClassAliases"] = 1] = "ClassAliases";
+        /**
+         * Enables substitutions for class expressions with static fields
+         * which have initializers that reference the 'this' or 'super'.
+         */
+        ClassPropertySubstitutionFlags[ClassPropertySubstitutionFlags["ClassStaticThisOrSuperReference"] = 2] = "ClassStaticThisOrSuperReference";
     })(ClassPropertySubstitutionFlags || (ClassPropertySubstitutionFlags = {}));
     var PrivateIdentifierKind;
     (function (PrivateIdentifierKind) {
@@ -88503,6 +90093,14 @@
         PrivateIdentifierKind["Method"] = "m";
         PrivateIdentifierKind["Accessor"] = "a";
     })(PrivateIdentifierKind = ts.PrivateIdentifierKind || (ts.PrivateIdentifierKind = {}));
+    var ClassFacts;
+    (function (ClassFacts) {
+        ClassFacts[ClassFacts["None"] = 0] = "None";
+        ClassFacts[ClassFacts["ClassWasDecorated"] = 1] = "ClassWasDecorated";
+        ClassFacts[ClassFacts["NeedsClassConstructorReference"] = 2] = "NeedsClassConstructorReference";
+        ClassFacts[ClassFacts["NeedsClassSuperReference"] = 4] = "NeedsClassSuperReference";
+        ClassFacts[ClassFacts["NeedsSubstitutionForThisInClassStaticField"] = 8] = "NeedsSubstitutionForThisInClassStaticField";
+    })(ClassFacts || (ClassFacts = {}));
     /**
      * Transforms ECMAScript Class Syntax.
      * TypeScript parameter property syntax is transformed in the TypeScript transformer.
@@ -88511,14 +90109,20 @@
      * When --useDefineForClassFields is on, this transforms to ECMAScript semantics, with Object.defineProperty.
      */
     function transformClassFields(context) {
-        var factory = context.factory, hoistVariableDeclaration = context.hoistVariableDeclaration, endLexicalEnvironment = context.endLexicalEnvironment, resumeLexicalEnvironment = context.resumeLexicalEnvironment, addBlockScopedVariable = context.addBlockScopedVariable;
+        var factory = context.factory, hoistVariableDeclaration = context.hoistVariableDeclaration, endLexicalEnvironment = context.endLexicalEnvironment, startLexicalEnvironment = context.startLexicalEnvironment, resumeLexicalEnvironment = context.resumeLexicalEnvironment, addBlockScopedVariable = context.addBlockScopedVariable;
         var resolver = context.getEmitResolver();
         var compilerOptions = context.getCompilerOptions();
         var languageVersion = ts.getEmitScriptTarget(compilerOptions);
         var useDefineForClassFields = ts.getUseDefineForClassFields(compilerOptions);
-        var shouldTransformPrivateElements = languageVersion < 99 /* ESNext */;
+        var shouldTransformPrivateElementsOrClassStaticBlocks = languageVersion < 99 /* ESNext */;
+        // We don't need to transform `super` property access when targeting ES5, ES3 because
+        // the es2015 transformation handles those.
+        var shouldTransformSuperInStaticInitializers = (languageVersion <= 8 /* ES2021 */ || !useDefineForClassFields) && languageVersion >= 2 /* ES2015 */;
+        var shouldTransformThisInStaticInitializers = languageVersion <= 8 /* ES2021 */ || !useDefineForClassFields;
         var previousOnSubstituteNode = context.onSubstituteNode;
         context.onSubstituteNode = onSubstituteNode;
+        var previousOnEmitNode = context.onEmitNode;
+        context.onEmitNode = onEmitNode;
         var enabledSubstitutions;
         var classAliases;
         /**
@@ -88531,8 +90135,11 @@
          * emitted at the next execution site, in document order (for decorated classes).
          */
         var pendingStatements;
-        var privateIdentifierEnvironmentStack = [];
-        var currentPrivateIdentifierEnvironment;
+        var classLexicalEnvironmentStack = [];
+        var classLexicalEnvironmentMap = new ts.Map();
+        var currentClassLexicalEnvironment;
+        var currentComputedPropertyNameClassLexicalEnvironment;
+        var currentStaticPropertyDeclarationOrStaticBlock;
         return ts.chainBundle(context, transformSourceFile);
         function transformSourceFile(node) {
             var options = context.getCompilerOptions();
@@ -88544,42 +90151,80 @@
             ts.addEmitHelpers(visited, context.readEmitHelpers());
             return visited;
         }
-        function visitor(node) {
-            if (!(node.transformFlags & 8388608 /* ContainsClassFields */))
-                return node;
-            switch (node.kind) {
-                case 222 /* ClassExpression */:
-                case 253 /* ClassDeclaration */:
-                    return visitClassLike(node);
-                case 164 /* PropertyDeclaration */:
-                    return visitPropertyDeclaration(node);
-                case 233 /* VariableStatement */:
-                    return visitVariableStatement(node);
-                case 202 /* PropertyAccessExpression */:
-                    return visitPropertyAccessExpression(node);
-                case 215 /* PrefixUnaryExpression */:
-                    return visitPrefixUnaryExpression(node);
-                case 216 /* PostfixUnaryExpression */:
-                    return visitPostfixUnaryExpression(node, /*valueIsDiscarded*/ false);
-                case 204 /* CallExpression */:
-                    return visitCallExpression(node);
-                case 217 /* BinaryExpression */:
-                    return visitBinaryExpression(node);
-                case 79 /* PrivateIdentifier */:
-                    return visitPrivateIdentifier(node);
-                case 234 /* ExpressionStatement */:
-                    return visitExpressionStatement(node);
-                case 238 /* ForStatement */:
-                    return visitForStatement(node);
-                case 206 /* TaggedTemplateExpression */:
-                    return visitTaggedTemplateExpression(node);
+        function visitorWorker(node, valueIsDiscarded) {
+            if (node.transformFlags & 8388608 /* ContainsClassFields */) {
+                switch (node.kind) {
+                    case 224 /* ClassExpression */:
+                    case 255 /* ClassDeclaration */:
+                        return visitClassLike(node);
+                    case 165 /* PropertyDeclaration */:
+                        return visitPropertyDeclaration(node);
+                    case 235 /* VariableStatement */:
+                        return visitVariableStatement(node);
+                    case 80 /* PrivateIdentifier */:
+                        return visitPrivateIdentifier(node);
+                    case 168 /* ClassStaticBlockDeclaration */:
+                        return visitClassStaticBlockDeclaration(node);
+                }
+            }
+            if (node.transformFlags & 8388608 /* ContainsClassFields */ ||
+                node.transformFlags & 33554432 /* ContainsLexicalSuper */ &&
+                    shouldTransformSuperInStaticInitializers &&
+                    currentStaticPropertyDeclarationOrStaticBlock &&
+                    currentClassLexicalEnvironment) {
+                switch (node.kind) {
+                    case 217 /* PrefixUnaryExpression */:
+                    case 218 /* PostfixUnaryExpression */:
+                        return visitPreOrPostfixUnaryExpression(node, valueIsDiscarded);
+                    case 219 /* BinaryExpression */:
+                        return visitBinaryExpression(node, valueIsDiscarded);
+                    case 206 /* CallExpression */:
+                        return visitCallExpression(node);
+                    case 208 /* TaggedTemplateExpression */:
+                        return visitTaggedTemplateExpression(node);
+                    case 204 /* PropertyAccessExpression */:
+                        return visitPropertyAccessExpression(node);
+                    case 205 /* ElementAccessExpression */:
+                        return visitElementAccessExpression(node);
+                    case 236 /* ExpressionStatement */:
+                        return visitExpressionStatement(node);
+                    case 240 /* ForStatement */:
+                        return visitForStatement(node);
+                    case 254 /* FunctionDeclaration */:
+                    case 211 /* FunctionExpression */:
+                    case 169 /* Constructor */:
+                    case 167 /* MethodDeclaration */:
+                    case 170 /* GetAccessor */:
+                    case 171 /* SetAccessor */: {
+                        var savedCurrentStaticPropertyDeclarationOrStaticBlock = currentStaticPropertyDeclarationOrStaticBlock;
+                        currentStaticPropertyDeclarationOrStaticBlock = undefined;
+                        var result = ts.visitEachChild(node, visitor, context);
+                        currentStaticPropertyDeclarationOrStaticBlock = savedCurrentStaticPropertyDeclarationOrStaticBlock;
+                        return result;
+                    }
+                }
             }
             return ts.visitEachChild(node, visitor, context);
         }
+        function discardedValueVisitor(node) {
+            return visitorWorker(node, /*valueIsDiscarded*/ true);
+        }
+        function visitor(node) {
+            return visitorWorker(node, /*valueIsDiscarded*/ false);
+        }
+        function heritageClauseVisitor(node) {
+            switch (node.kind) {
+                case 289 /* HeritageClause */:
+                    return ts.visitEachChild(node, heritageClauseVisitor, context);
+                case 226 /* ExpressionWithTypeArguments */:
+                    return visitExpressionWithTypeArguments(node);
+            }
+            return visitor(node);
+        }
         function visitorDestructuringTarget(node) {
             switch (node.kind) {
-                case 201 /* ObjectLiteralExpression */:
-                case 200 /* ArrayLiteralExpression */:
+                case 203 /* ObjectLiteralExpression */:
+                case 202 /* ArrayLiteralExpression */:
                     return visitAssignmentPattern(node);
                 default:
                     return visitor(node);
@@ -88590,7 +90235,7 @@
          * Replace it with an empty identifier to indicate a problem with the code.
          */
         function visitPrivateIdentifier(node) {
-            if (!shouldTransformPrivateElements) {
+            if (!shouldTransformPrivateElementsOrClassStaticBlocks) {
                 return node;
             }
             return ts.setOriginalNode(factory.createIdentifier(""), node);
@@ -88602,19 +90247,19 @@
          */
         function classElementVisitor(node) {
             switch (node.kind) {
-                case 167 /* Constructor */:
+                case 169 /* Constructor */:
                     // Constructors for classes using class fields are transformed in
                     // `visitClassDeclaration` or `visitClassExpression`.
                     return undefined;
-                case 168 /* GetAccessor */:
-                case 169 /* SetAccessor */:
-                case 166 /* MethodDeclaration */:
+                case 170 /* GetAccessor */:
+                case 171 /* SetAccessor */:
+                case 167 /* MethodDeclaration */:
                     return visitMethodOrAccessorDeclaration(node);
-                case 164 /* PropertyDeclaration */:
+                case 165 /* PropertyDeclaration */:
                     return visitPropertyDeclaration(node);
-                case 159 /* ComputedPropertyName */:
+                case 160 /* ComputedPropertyName */:
                     return visitComputedPropertyName(node);
-                case 230 /* SemicolonClassElement */:
+                case 232 /* SemicolonClassElement */:
                     return node;
                 default:
                     return visitor(node);
@@ -88624,7 +90269,7 @@
             var savedPendingStatements = pendingStatements;
             pendingStatements = [];
             var visitedNode = ts.visitEachChild(node, visitor, context);
-            var statement = ts.some(pendingStatements) ? __spreadArray([visitedNode], pendingStatements) :
+            var statement = ts.some(pendingStatements) ? __spreadArray([visitedNode], pendingStatements, true) :
                 visitedNode;
             pendingStatements = savedPendingStatements;
             return statement;
@@ -88641,7 +90286,7 @@
         }
         function visitMethodOrAccessorDeclaration(node) {
             ts.Debug.assert(!ts.some(node.decorators));
-            if (!shouldTransformPrivateElements || !ts.isPrivateIdentifier(node.name)) {
+            if (!shouldTransformPrivateElementsOrClassStaticBlocks || !ts.isPrivateIdentifier(node.name)) {
                 return ts.visitEachChild(node, classElementVisitor, context);
             }
             // leave invalid code untransformed
@@ -88678,7 +90323,7 @@
         function visitPropertyDeclaration(node) {
             ts.Debug.assert(!ts.some(node.decorators));
             if (ts.isPrivateIdentifier(node.name)) {
-                if (!shouldTransformPrivateElements) {
+                if (!shouldTransformPrivateElementsOrClassStaticBlocks) {
                     // Initializer is elided as the field is initialized in transformConstructor.
                     return factory.updatePropertyDeclaration(node, 
                     /*decorators*/ undefined, ts.visitNodes(node.modifiers, visitor, ts.isModifier), node.name, 
@@ -88719,60 +90364,130 @@
             }
         }
         function visitPropertyAccessExpression(node) {
-            if (shouldTransformPrivateElements && ts.isPrivateIdentifier(node.name)) {
+            if (shouldTransformPrivateElementsOrClassStaticBlocks && ts.isPrivateIdentifier(node.name)) {
                 var privateIdentifierInfo = accessPrivateIdentifier(node.name);
                 if (privateIdentifierInfo) {
                     return ts.setTextRange(ts.setOriginalNode(createPrivateIdentifierAccess(privateIdentifierInfo, node.expression), node), node);
                 }
             }
-            return ts.visitEachChild(node, visitor, context);
-        }
-        function visitPrefixUnaryExpression(node) {
-            if (shouldTransformPrivateElements && ts.isPrivateIdentifierPropertyAccessExpression(node.operand)) {
-                var operator = node.operator === 45 /* PlusPlusToken */ ?
-                    39 /* PlusToken */ : node.operator === 46 /* MinusMinusToken */ ?
-                    40 /* MinusToken */ : undefined;
-                var info = void 0;
-                if (operator && (info = accessPrivateIdentifier(node.operand.name))) {
-                    var receiver = ts.visitNode(node.operand.expression, visitor, ts.isExpression);
-                    var _a = createCopiableReceiverExpr(receiver), readExpression = _a.readExpression, initializeExpression = _a.initializeExpression;
-                    var existingValue = factory.createPrefixUnaryExpression(39 /* PlusToken */, createPrivateIdentifierAccess(info, readExpression));
-                    return ts.setOriginalNode(createPrivateIdentifierAssignment(info, initializeExpression || readExpression, factory.createBinaryExpression(existingValue, operator, factory.createNumericLiteral(1)), 62 /* EqualsToken */), node);
+            if (shouldTransformSuperInStaticInitializers &&
+                ts.isSuperProperty(node) &&
+                ts.isIdentifier(node.name) &&
+                currentStaticPropertyDeclarationOrStaticBlock &&
+                currentClassLexicalEnvironment) {
+                var classConstructor = currentClassLexicalEnvironment.classConstructor, superClassReference = currentClassLexicalEnvironment.superClassReference, facts = currentClassLexicalEnvironment.facts;
+                if (facts & 1 /* ClassWasDecorated */) {
+                    return visitInvalidSuperProperty(node);
+                }
+                if (classConstructor && superClassReference) {
+                    // converts `super.x` into `Reflect.get(_baseTemp, "x", _classTemp)`
+                    var superProperty = factory.createReflectGetCall(superClassReference, factory.createStringLiteralFromNode(node.name), classConstructor);
+                    ts.setOriginalNode(superProperty, node.expression);
+                    ts.setTextRange(superProperty, node.expression);
+                    return superProperty;
                 }
             }
             return ts.visitEachChild(node, visitor, context);
         }
-        function visitPostfixUnaryExpression(node, valueIsDiscarded) {
-            if (shouldTransformPrivateElements && ts.isPrivateIdentifierPropertyAccessExpression(node.operand)) {
-                var operator = node.operator === 45 /* PlusPlusToken */ ?
-                    39 /* PlusToken */ : node.operator === 46 /* MinusMinusToken */ ?
-                    40 /* MinusToken */ : undefined;
-                var info = void 0;
-                if (operator && (info = accessPrivateIdentifier(node.operand.name))) {
-                    var receiver = ts.visitNode(node.operand.expression, visitor, ts.isExpression);
-                    var _a = createCopiableReceiverExpr(receiver), readExpression = _a.readExpression, initializeExpression = _a.initializeExpression;
-                    var existingValue = factory.createPrefixUnaryExpression(39 /* PlusToken */, createPrivateIdentifierAccess(info, readExpression));
-                    // Create a temporary variable to store the value returned by the expression.
-                    var returnValue = valueIsDiscarded ? undefined : factory.createTempVariable(hoistVariableDeclaration);
-                    return ts.setOriginalNode(factory.inlineExpressions(ts.compact([
-                        createPrivateIdentifierAssignment(info, initializeExpression || readExpression, factory.createBinaryExpression(returnValue ? factory.createAssignment(returnValue, existingValue) : existingValue, operator, factory.createNumericLiteral(1)), 62 /* EqualsToken */),
-                        returnValue
-                    ])), node);
+        function visitElementAccessExpression(node) {
+            if (shouldTransformSuperInStaticInitializers &&
+                ts.isSuperProperty(node) &&
+                currentStaticPropertyDeclarationOrStaticBlock &&
+                currentClassLexicalEnvironment) {
+                var classConstructor = currentClassLexicalEnvironment.classConstructor, superClassReference = currentClassLexicalEnvironment.superClassReference, facts = currentClassLexicalEnvironment.facts;
+                if (facts & 1 /* ClassWasDecorated */) {
+                    return visitInvalidSuperProperty(node);
+                }
+                if (classConstructor && superClassReference) {
+                    // converts `super[x]` into `Reflect.get(_baseTemp, x, _classTemp)`
+                    var superProperty = factory.createReflectGetCall(superClassReference, ts.visitNode(node.argumentExpression, visitor, ts.isExpression), classConstructor);
+                    ts.setOriginalNode(superProperty, node.expression);
+                    ts.setTextRange(superProperty, node.expression);
+                    return superProperty;
+                }
+            }
+            return ts.visitEachChild(node, visitor, context);
+        }
+        function visitPreOrPostfixUnaryExpression(node, valueIsDiscarded) {
+            if (node.operator === 45 /* PlusPlusToken */ || node.operator === 46 /* MinusMinusToken */) {
+                if (shouldTransformPrivateElementsOrClassStaticBlocks && ts.isPrivateIdentifierPropertyAccessExpression(node.operand)) {
+                    var info = void 0;
+                    if (info = accessPrivateIdentifier(node.operand.name)) {
+                        var receiver = ts.visitNode(node.operand.expression, visitor, ts.isExpression);
+                        var _a = createCopiableReceiverExpr(receiver), readExpression = _a.readExpression, initializeExpression = _a.initializeExpression;
+                        var expression = createPrivateIdentifierAccess(info, readExpression);
+                        var temp = ts.isPrefixUnaryExpression(node) || valueIsDiscarded ? undefined : factory.createTempVariable(hoistVariableDeclaration);
+                        expression = ts.expandPreOrPostfixIncrementOrDecrementExpression(factory, node, expression, hoistVariableDeclaration, temp);
+                        expression = createPrivateIdentifierAssignment(info, initializeExpression || readExpression, expression, 63 /* EqualsToken */);
+                        ts.setOriginalNode(expression, node);
+                        ts.setTextRange(expression, node);
+                        if (temp) {
+                            expression = factory.createComma(expression, temp);
+                            ts.setTextRange(expression, node);
+                        }
+                        return expression;
+                    }
+                }
+                else if (shouldTransformSuperInStaticInitializers &&
+                    ts.isSuperProperty(node.operand) &&
+                    currentStaticPropertyDeclarationOrStaticBlock &&
+                    currentClassLexicalEnvironment) {
+                    // converts `++super.a` into `(Reflect.set(_baseTemp, "a", (_a = Reflect.get(_baseTemp, "a", _classTemp), _b = ++_a), _classTemp), _b)`
+                    // converts `++super[f()]` into `(Reflect.set(_baseTemp, _a = f(), (_b = Reflect.get(_baseTemp, _a, _classTemp), _c = ++_b), _classTemp), _c)`
+                    // converts `--super.a` into `(Reflect.set(_baseTemp, "a", (_a = Reflect.get(_baseTemp, "a", _classTemp), _b = --_a), _classTemp), _b)`
+                    // converts `--super[f()]` into `(Reflect.set(_baseTemp, _a = f(), (_b = Reflect.get(_baseTemp, _a, _classTemp), _c = --_b), _classTemp), _c)`
+                    // converts `super.a++` into `(Reflect.set(_baseTemp, "a", (_a = Reflect.get(_baseTemp, "a", _classTemp), _b = _a++), _classTemp), _b)`
+                    // converts `super[f()]++` into `(Reflect.set(_baseTemp, _a = f(), (_b = Reflect.get(_baseTemp, _a, _classTemp), _c = _b++), _classTemp), _c)`
+                    // converts `super.a--` into `(Reflect.set(_baseTemp, "a", (_a = Reflect.get(_baseTemp, "a", _classTemp), _b = _a--), _classTemp), _b)`
+                    // converts `super[f()]--` into `(Reflect.set(_baseTemp, _a = f(), (_b = Reflect.get(_baseTemp, _a, _classTemp), _c = _b--), _classTemp), _c)`
+                    var classConstructor = currentClassLexicalEnvironment.classConstructor, superClassReference = currentClassLexicalEnvironment.superClassReference, facts = currentClassLexicalEnvironment.facts;
+                    if (facts & 1 /* ClassWasDecorated */) {
+                        var operand = visitInvalidSuperProperty(node.operand);
+                        return ts.isPrefixUnaryExpression(node) ?
+                            factory.updatePrefixUnaryExpression(node, operand) :
+                            factory.updatePostfixUnaryExpression(node, operand);
+                    }
+                    if (classConstructor && superClassReference) {
+                        var setterName = void 0;
+                        var getterName = void 0;
+                        if (ts.isPropertyAccessExpression(node.operand)) {
+                            if (ts.isIdentifier(node.operand.name)) {
+                                getterName = setterName = factory.createStringLiteralFromNode(node.operand.name);
+                            }
+                        }
+                        else {
+                            if (ts.isSimpleInlineableExpression(node.operand.argumentExpression)) {
+                                getterName = setterName = node.operand.argumentExpression;
+                            }
+                            else {
+                                getterName = factory.createTempVariable(hoistVariableDeclaration);
+                                setterName = factory.createAssignment(getterName, ts.visitNode(node.operand.argumentExpression, visitor, ts.isExpression));
+                            }
+                        }
+                        if (setterName && getterName) {
+                            var expression = factory.createReflectGetCall(superClassReference, getterName, classConstructor);
+                            ts.setTextRange(expression, node.operand);
+                            var temp = valueIsDiscarded ? undefined : factory.createTempVariable(hoistVariableDeclaration);
+                            expression = ts.expandPreOrPostfixIncrementOrDecrementExpression(factory, node, expression, hoistVariableDeclaration, temp);
+                            expression = factory.createReflectSetCall(superClassReference, setterName, expression, classConstructor);
+                            ts.setOriginalNode(expression, node);
+                            ts.setTextRange(expression, node);
+                            if (temp) {
+                                expression = factory.createComma(expression, temp);
+                                ts.setTextRange(expression, node);
+                            }
+                            return expression;
+                        }
+                    }
                 }
             }
             return ts.visitEachChild(node, visitor, context);
         }
         function visitForStatement(node) {
-            if (node.incrementor && ts.isPostfixUnaryExpression(node.incrementor)) {
-                return factory.updateForStatement(node, ts.visitNode(node.initializer, visitor, ts.isForInitializer), ts.visitNode(node.condition, visitor, ts.isExpression), visitPostfixUnaryExpression(node.incrementor, /*valueIsDiscarded*/ true), ts.visitIterationBody(node.statement, visitor, context));
-            }
-            return ts.visitEachChild(node, visitor, context);
+            return factory.updateForStatement(node, ts.visitNode(node.initializer, discardedValueVisitor, ts.isForInitializer), ts.visitNode(node.condition, visitor, ts.isExpression), ts.visitNode(node.incrementor, discardedValueVisitor, ts.isExpression), ts.visitIterationBody(node.statement, visitor, context));
         }
         function visitExpressionStatement(node) {
-            if (ts.isPostfixUnaryExpression(node.expression)) {
-                return factory.updateExpressionStatement(node, visitPostfixUnaryExpression(node.expression, /*valueIsDiscarded*/ true));
-            }
-            return ts.visitEachChild(node, visitor, context);
+            return factory.updateExpressionStatement(node, ts.visitNode(node.expression, discardedValueVisitor, ts.isExpression));
         }
         function createCopiableReceiverExpr(receiver) {
             var clone = ts.nodeIsSynthesized(receiver) ? receiver : factory.cloneNode(receiver);
@@ -88784,47 +90499,132 @@
             return { readExpression: readExpression, initializeExpression: initializeExpression };
         }
         function visitCallExpression(node) {
-            if (shouldTransformPrivateElements && ts.isPrivateIdentifierPropertyAccessExpression(node.expression)) {
+            if (shouldTransformPrivateElementsOrClassStaticBlocks && ts.isPrivateIdentifierPropertyAccessExpression(node.expression)) {
                 // Transform call expressions of private names to properly bind the `this` parameter.
                 var _a = factory.createCallBinding(node.expression, hoistVariableDeclaration, languageVersion), thisArg = _a.thisArg, target = _a.target;
                 if (ts.isCallChain(node)) {
                     return factory.updateCallChain(node, factory.createPropertyAccessChain(ts.visitNode(target, visitor), node.questionDotToken, "call"), 
                     /*questionDotToken*/ undefined, 
-                    /*typeArguments*/ undefined, __spreadArray([ts.visitNode(thisArg, visitor, ts.isExpression)], ts.visitNodes(node.arguments, visitor, ts.isExpression)));
+                    /*typeArguments*/ undefined, __spreadArray([ts.visitNode(thisArg, visitor, ts.isExpression)], ts.visitNodes(node.arguments, visitor, ts.isExpression), true));
                 }
                 return factory.updateCallExpression(node, factory.createPropertyAccessExpression(ts.visitNode(target, visitor), "call"), 
-                /*typeArguments*/ undefined, __spreadArray([ts.visitNode(thisArg, visitor, ts.isExpression)], ts.visitNodes(node.arguments, visitor, ts.isExpression)));
+                /*typeArguments*/ undefined, __spreadArray([ts.visitNode(thisArg, visitor, ts.isExpression)], ts.visitNodes(node.arguments, visitor, ts.isExpression), true));
+            }
+            if (shouldTransformSuperInStaticInitializers &&
+                ts.isSuperProperty(node.expression) &&
+                currentStaticPropertyDeclarationOrStaticBlock &&
+                (currentClassLexicalEnvironment === null || currentClassLexicalEnvironment === void 0 ? void 0 : currentClassLexicalEnvironment.classConstructor)) {
+                // converts `super.f(...)` into `Reflect.get(_baseTemp, "f", _classTemp).call(_classTemp, ...)`
+                var invocation = factory.createFunctionCallCall(ts.visitNode(node.expression, visitor, ts.isExpression), currentClassLexicalEnvironment.classConstructor, ts.visitNodes(node.arguments, visitor, ts.isExpression));
+                ts.setOriginalNode(invocation, node);
+                ts.setTextRange(invocation, node);
+                return invocation;
             }
             return ts.visitEachChild(node, visitor, context);
         }
         function visitTaggedTemplateExpression(node) {
-            if (shouldTransformPrivateElements && ts.isPrivateIdentifierPropertyAccessExpression(node.tag)) {
+            if (shouldTransformPrivateElementsOrClassStaticBlocks && ts.isPrivateIdentifierPropertyAccessExpression(node.tag)) {
                 // Bind the `this` correctly for tagged template literals when the tag is a private identifier property access.
                 var _a = factory.createCallBinding(node.tag, hoistVariableDeclaration, languageVersion), thisArg = _a.thisArg, target = _a.target;
                 return factory.updateTaggedTemplateExpression(node, factory.createCallExpression(factory.createPropertyAccessExpression(ts.visitNode(target, visitor), "bind"), 
                 /*typeArguments*/ undefined, [ts.visitNode(thisArg, visitor, ts.isExpression)]), 
                 /*typeArguments*/ undefined, ts.visitNode(node.template, visitor, ts.isTemplateLiteral));
             }
+            if (shouldTransformSuperInStaticInitializers &&
+                ts.isSuperProperty(node.tag) &&
+                currentStaticPropertyDeclarationOrStaticBlock &&
+                (currentClassLexicalEnvironment === null || currentClassLexicalEnvironment === void 0 ? void 0 : currentClassLexicalEnvironment.classConstructor)) {
+                // converts `` super.f`x` `` into `` Reflect.get(_baseTemp, "f", _classTemp).bind(_classTemp)`x` ``
+                var invocation = factory.createFunctionBindCall(ts.visitNode(node.tag, visitor, ts.isExpression), currentClassLexicalEnvironment.classConstructor, []);
+                ts.setOriginalNode(invocation, node);
+                ts.setTextRange(invocation, node);
+                return factory.updateTaggedTemplateExpression(node, invocation, 
+                /*typeArguments*/ undefined, ts.visitNode(node.template, visitor, ts.isTemplateLiteral));
+            }
             return ts.visitEachChild(node, visitor, context);
         }
-        function visitBinaryExpression(node) {
-            if (shouldTransformPrivateElements) {
-                if (ts.isDestructuringAssignment(node)) {
-                    var savedPendingExpressions = pendingExpressions;
-                    pendingExpressions = undefined;
-                    node = factory.updateBinaryExpression(node, ts.visitNode(node.left, visitorDestructuringTarget), node.operatorToken, ts.visitNode(node.right, visitor));
-                    var expr = ts.some(pendingExpressions) ?
-                        factory.inlineExpressions(ts.compact(__spreadArray(__spreadArray([], pendingExpressions), [node]))) :
-                        node;
-                    pendingExpressions = savedPendingExpressions;
-                    return expr;
+        function transformClassStaticBlockDeclaration(node) {
+            if (shouldTransformPrivateElementsOrClassStaticBlocks) {
+                if (currentClassLexicalEnvironment) {
+                    classLexicalEnvironmentMap.set(ts.getOriginalNodeId(node), currentClassLexicalEnvironment);
                 }
-                if (ts.isAssignmentExpression(node) && ts.isPrivateIdentifierPropertyAccessExpression(node.left)) {
+                startLexicalEnvironment();
+                var savedCurrentStaticPropertyDeclarationOrStaticBlock = currentStaticPropertyDeclarationOrStaticBlock;
+                currentStaticPropertyDeclarationOrStaticBlock = node;
+                var statements = ts.visitNodes(node.body.statements, visitor, ts.isStatement);
+                statements = factory.mergeLexicalEnvironment(statements, endLexicalEnvironment());
+                currentStaticPropertyDeclarationOrStaticBlock = savedCurrentStaticPropertyDeclarationOrStaticBlock;
+                var iife = factory.createImmediatelyInvokedArrowFunction(statements);
+                ts.setOriginalNode(iife, node);
+                ts.setTextRange(iife, node);
+                ts.addEmitFlags(iife, 2 /* AdviseOnEmitNode */);
+                return iife;
+            }
+        }
+        function visitBinaryExpression(node, valueIsDiscarded) {
+            if (ts.isDestructuringAssignment(node)) {
+                var savedPendingExpressions = pendingExpressions;
+                pendingExpressions = undefined;
+                node = factory.updateBinaryExpression(node, ts.visitNode(node.left, visitorDestructuringTarget), node.operatorToken, ts.visitNode(node.right, visitor));
+                var expr = ts.some(pendingExpressions) ?
+                    factory.inlineExpressions(ts.compact(__spreadArray(__spreadArray([], pendingExpressions, true), [node], false))) :
+                    node;
+                pendingExpressions = savedPendingExpressions;
+                return expr;
+            }
+            if (ts.isAssignmentExpression(node)) {
+                if (shouldTransformPrivateElementsOrClassStaticBlocks && ts.isPrivateIdentifierPropertyAccessExpression(node.left)) {
                     var info = accessPrivateIdentifier(node.left.name);
                     if (info) {
                         return ts.setTextRange(ts.setOriginalNode(createPrivateIdentifierAssignment(info, node.left.expression, node.right, node.operatorToken.kind), node), node);
                     }
                 }
+                else if (shouldTransformSuperInStaticInitializers &&
+                    ts.isSuperProperty(node.left) &&
+                    currentStaticPropertyDeclarationOrStaticBlock &&
+                    currentClassLexicalEnvironment) {
+                    var classConstructor = currentClassLexicalEnvironment.classConstructor, superClassReference = currentClassLexicalEnvironment.superClassReference, facts = currentClassLexicalEnvironment.facts;
+                    if (facts & 1 /* ClassWasDecorated */) {
+                        return factory.updateBinaryExpression(node, visitInvalidSuperProperty(node.left), node.operatorToken, ts.visitNode(node.right, visitor, ts.isExpression));
+                    }
+                    if (classConstructor && superClassReference) {
+                        var setterName = ts.isElementAccessExpression(node.left) ? ts.visitNode(node.left.argumentExpression, visitor, ts.isExpression) :
+                            ts.isIdentifier(node.left.name) ? factory.createStringLiteralFromNode(node.left.name) :
+                                undefined;
+                        if (setterName) {
+                            // converts `super.x = 1` into `(Reflect.set(_baseTemp, "x", _a = 1, _classTemp), _a)`
+                            // converts `super[f()] = 1` into `(Reflect.set(_baseTemp, f(), _a = 1, _classTemp), _a)`
+                            // converts `super.x += 1` into `(Reflect.set(_baseTemp, "x", _a = Reflect.get(_baseTemp, "x", _classtemp) + 1, _classTemp), _a)`
+                            // converts `super[f()] += 1` into `(Reflect.set(_baseTemp, _a = f(), _b = Reflect.get(_baseTemp, _a, _classtemp) + 1, _classTemp), _b)`
+                            var expression = ts.visitNode(node.right, visitor, ts.isExpression);
+                            if (ts.isCompoundAssignment(node.operatorToken.kind)) {
+                                var getterName = setterName;
+                                if (!ts.isSimpleInlineableExpression(setterName)) {
+                                    getterName = factory.createTempVariable(hoistVariableDeclaration);
+                                    setterName = factory.createAssignment(getterName, setterName);
+                                }
+                                var superPropertyGet = factory.createReflectGetCall(superClassReference, getterName, classConstructor);
+                                ts.setOriginalNode(superPropertyGet, node.left);
+                                ts.setTextRange(superPropertyGet, node.left);
+                                expression = factory.createBinaryExpression(superPropertyGet, ts.getNonAssignmentOperatorForCompoundAssignment(node.operatorToken.kind), expression);
+                                ts.setTextRange(expression, node);
+                            }
+                            var temp = valueIsDiscarded ? undefined : factory.createTempVariable(hoistVariableDeclaration);
+                            if (temp) {
+                                expression = factory.createAssignment(temp, expression);
+                                ts.setTextRange(temp, node);
+                            }
+                            expression = factory.createReflectSetCall(superClassReference, setterName, expression, classConstructor);
+                            ts.setOriginalNode(expression, node);
+                            ts.setTextRange(expression, node);
+                            if (temp) {
+                                expression = factory.createComma(expression, temp);
+                                ts.setTextRange(expression, node);
+                            }
+                            return expression;
+                        }
+                    }
+                }
             }
             return ts.visitEachChild(node, visitor, context);
         }
@@ -88853,10 +90653,13 @@
          * Set up the environment for a class.
          */
         function visitClassLike(node) {
+            if (!ts.forEach(node.members, doesClassElementNeedTransform)) {
+                return ts.visitEachChild(node, visitor, context);
+            }
             var savedPendingExpressions = pendingExpressions;
             pendingExpressions = undefined;
-            if (shouldTransformPrivateElements) {
-                startPrivateIdentifierEnvironment();
+            startClassLexicalEnvironment();
+            if (shouldTransformPrivateElementsOrClassStaticBlocks) {
                 var name = ts.getNameOfDeclaration(node);
                 if (name && ts.isIdentifier(name)) {
                     getPrivateIdentifierEnvironment().className = ts.idText(name);
@@ -88869,38 +90672,81 @@
             var result = ts.isClassDeclaration(node) ?
                 visitClassDeclaration(node) :
                 visitClassExpression(node);
-            if (shouldTransformPrivateElements) {
-                endPrivateIdentifierEnvironment();
-            }
+            endClassLexicalEnvironment();
             pendingExpressions = savedPendingExpressions;
             return result;
         }
         function doesClassElementNeedTransform(node) {
-            return ts.isPropertyDeclaration(node) || (shouldTransformPrivateElements && node.name && ts.isPrivateIdentifier(node.name));
+            return ts.isPropertyDeclaration(node) || ts.isClassStaticBlockDeclaration(node) || (shouldTransformPrivateElementsOrClassStaticBlocks && node.name && ts.isPrivateIdentifier(node.name));
         }
         function getPrivateInstanceMethodsAndAccessors(node) {
             return ts.filter(node.members, ts.isNonStaticMethodOrAccessorWithPrivateName);
         }
-        function visitClassDeclaration(node) {
-            if (!ts.forEach(node.members, doesClassElementNeedTransform)) {
-                return ts.visitEachChild(node, visitor, context);
+        function getClassFacts(node) {
+            var facts = 0 /* None */;
+            var original = ts.getOriginalNode(node);
+            if (ts.isClassDeclaration(original) && ts.classOrConstructorParameterIsDecorated(original)) {
+                facts |= 1 /* ClassWasDecorated */;
             }
-            var staticProperties = ts.getProperties(node, /*requireInitializer*/ false, /*isStatic*/ true);
-            var pendingPrivateStateAssignment;
-            if (shouldTransformPrivateElements && ts.some(node.members, function (m) { return ts.hasStaticModifier(m) && !!m.name && ts.isPrivateIdentifier(m.name); })) {
-                var temp = factory.createTempVariable(hoistVariableDeclaration, /* reservedInNestedScopes */ true);
-                getPrivateIdentifierEnvironment().classConstructor = factory.cloneNode(temp);
-                pendingPrivateStateAssignment = factory.createAssignment(temp, factory.getInternalName(node));
+            for (var _i = 0, _a = node.members; _i < _a.length; _i++) {
+                var member = _a[_i];
+                if (!ts.isStatic(member))
+                    continue;
+                if (member.name && ts.isPrivateIdentifier(member.name) && shouldTransformPrivateElementsOrClassStaticBlocks) {
+                    facts |= 2 /* NeedsClassConstructorReference */;
+                }
+                if (ts.isPropertyDeclaration(member) || ts.isClassStaticBlockDeclaration(member)) {
+                    if (shouldTransformThisInStaticInitializers && member.transformFlags & 8192 /* ContainsLexicalThis */) {
+                        facts |= 8 /* NeedsSubstitutionForThisInClassStaticField */;
+                        if (!(facts & 1 /* ClassWasDecorated */)) {
+                            facts |= 2 /* NeedsClassConstructorReference */;
+                        }
+                    }
+                    if (shouldTransformSuperInStaticInitializers && member.transformFlags & 33554432 /* ContainsLexicalSuper */) {
+                        if (!(facts & 1 /* ClassWasDecorated */)) {
+                            facts |= 2 /* NeedsClassConstructorReference */ | 4 /* NeedsClassSuperReference */;
+                        }
+                    }
+                }
+            }
+            return facts;
+        }
+        function visitExpressionWithTypeArguments(node) {
+            var facts = (currentClassLexicalEnvironment === null || currentClassLexicalEnvironment === void 0 ? void 0 : currentClassLexicalEnvironment.facts) || 0 /* None */;
+            if (facts & 4 /* NeedsClassSuperReference */) {
+                var temp = factory.createTempVariable(hoistVariableDeclaration, /*reserveInNestedScopes*/ true);
+                getClassLexicalEnvironment().superClassReference = temp;
+                return factory.updateExpressionWithTypeArguments(node, factory.createAssignment(temp, ts.visitNode(node.expression, visitor, ts.isExpression)), 
+                /*typeArguments*/ undefined);
+            }
+            return ts.visitEachChild(node, visitor, context);
+        }
+        function visitClassDeclaration(node) {
+            var facts = getClassFacts(node);
+            if (facts) {
+                getClassLexicalEnvironment().facts = facts;
+            }
+            if (facts & 8 /* NeedsSubstitutionForThisInClassStaticField */) {
+                enableSubstitutionForClassStaticThisOrSuperReference();
+            }
+            var staticProperties = ts.getStaticPropertiesAndClassStaticBlock(node);
+            // If a class has private static fields, or a static field has a `this` or `super` reference,
+            // then we need to allocate a temp variable to hold on to that reference.
+            var pendingClassReferenceAssignment;
+            if (facts & 2 /* NeedsClassConstructorReference */) {
+                var temp = factory.createTempVariable(hoistVariableDeclaration, /*reservedInNestedScopes*/ true);
+                getClassLexicalEnvironment().classConstructor = factory.cloneNode(temp);
+                pendingClassReferenceAssignment = factory.createAssignment(temp, factory.getInternalName(node));
             }
             var extendsClauseElement = ts.getEffectiveBaseTypeNode(node);
-            var isDerivedClass = !!(extendsClauseElement && ts.skipOuterExpressions(extendsClauseElement.expression).kind !== 103 /* NullKeyword */);
+            var isDerivedClass = !!(extendsClauseElement && ts.skipOuterExpressions(extendsClauseElement.expression).kind !== 104 /* NullKeyword */);
             var statements = [
                 factory.updateClassDeclaration(node, 
                 /*decorators*/ undefined, node.modifiers, node.name, 
-                /*typeParameters*/ undefined, ts.visitNodes(node.heritageClauses, visitor, ts.isHeritageClause), transformClassMembers(node, isDerivedClass))
+                /*typeParameters*/ undefined, ts.visitNodes(node.heritageClauses, heritageClauseVisitor, ts.isHeritageClause), transformClassMembers(node, isDerivedClass))
             ];
-            if (pendingPrivateStateAssignment) {
-                getPendingExpressions().unshift(pendingPrivateStateAssignment);
+            if (pendingClassReferenceAssignment) {
+                getPendingExpressions().unshift(pendingClassReferenceAssignment);
             }
             // Write any pending expressions from elided or moved computed property names
             if (ts.some(pendingExpressions)) {
@@ -88912,13 +90758,17 @@
             //      HasLexicalDeclaration (N) : Determines if the argument identifier has a binding in this environment record that was created using
             //                                  a lexical declaration such as a LexicalDeclaration or a ClassDeclaration.
             if (ts.some(staticProperties)) {
-                addPropertyStatements(statements, staticProperties, factory.getInternalName(node));
+                addPropertyOrClassStaticBlockStatements(statements, staticProperties, factory.getInternalName(node));
             }
             return statements;
         }
         function visitClassExpression(node) {
-            if (!ts.forEach(node.members, doesClassElementNeedTransform)) {
-                return ts.visitEachChild(node, visitor, context);
+            var facts = getClassFacts(node);
+            if (facts) {
+                getClassLexicalEnvironment().facts = facts;
+            }
+            if (facts & 8 /* NeedsSubstitutionForThisInClassStaticField */) {
+                enableSubstitutionForClassStaticThisOrSuperReference();
             }
             // If this class expression is a transformation of a decorated class declaration,
             // then we want to output the pendingExpressions as statements, not as inlined
@@ -88927,10 +90777,10 @@
             // In this case, we use pendingStatements to produce the same output as the
             // class declaration transformation. The VariableStatement visitor will insert
             // these statements after the class expression variable statement.
-            var isDecoratedClassDeclaration = ts.isClassDeclaration(ts.getOriginalNode(node));
-            var staticProperties = ts.getProperties(node, /*requireInitializer*/ false, /*isStatic*/ true);
+            var isDecoratedClassDeclaration = !!(facts & 1 /* ClassWasDecorated */);
+            var staticPropertiesOrClassStaticBlocks = ts.getStaticPropertiesAndClassStaticBlock(node);
             var extendsClauseElement = ts.getEffectiveBaseTypeNode(node);
-            var isDerivedClass = !!(extendsClauseElement && ts.skipOuterExpressions(extendsClauseElement.expression).kind !== 103 /* NullKeyword */);
+            var isDerivedClass = !!(extendsClauseElement && ts.skipOuterExpressions(extendsClauseElement.expression).kind !== 104 /* NullKeyword */);
             var isClassWithConstructorReference = resolver.getNodeCheckFlags(node) & 16777216 /* ClassWithConstructorReference */;
             var temp;
             function createClassTempVar() {
@@ -88939,13 +90789,13 @@
                 var requiresBlockScopedVar = classCheckFlags & 524288 /* BlockScopedBindingInLoop */;
                 return factory.createTempVariable(requiresBlockScopedVar ? addBlockScopedVariable : hoistVariableDeclaration, !!isClassWithConstructorReference);
             }
-            if (shouldTransformPrivateElements && ts.some(node.members, function (m) { return ts.hasStaticModifier(m) && !!m.name && ts.isPrivateIdentifier(m.name); })) {
+            if (facts & 2 /* NeedsClassConstructorReference */) {
                 temp = createClassTempVar();
-                getPrivateIdentifierEnvironment().classConstructor = factory.cloneNode(temp);
+                getClassLexicalEnvironment().classConstructor = factory.cloneNode(temp);
             }
             var classExpression = factory.updateClassExpression(node, ts.visitNodes(node.decorators, visitor, ts.isDecorator), node.modifiers, node.name, 
-            /*typeParameters*/ undefined, ts.visitNodes(node.heritageClauses, visitor, ts.isHeritageClause), transformClassMembers(node, isDerivedClass));
-            var hasTransformableStatics = ts.some(staticProperties, function (p) { return !!p.initializer || (shouldTransformPrivateElements && ts.isPrivateIdentifier(p.name)); });
+            /*typeParameters*/ undefined, ts.visitNodes(node.heritageClauses, heritageClauseVisitor, ts.isHeritageClause), transformClassMembers(node, isDerivedClass));
+            var hasTransformableStatics = ts.some(staticPropertiesOrClassStaticBlocks, function (p) { return ts.isClassStaticBlockDeclaration(p) || !!p.initializer || (shouldTransformPrivateElementsOrClassStaticBlocks && ts.isPrivateIdentifier(p.name)); });
             if (hasTransformableStatics || ts.some(pendingExpressions)) {
                 if (isDecoratedClassDeclaration) {
                     ts.Debug.assertIsDefined(pendingStatements, "Decorated classes transformed by TypeScript are expected to be within a variable declaration.");
@@ -88953,8 +90803,8 @@
                     if (pendingStatements && pendingExpressions && ts.some(pendingExpressions)) {
                         pendingStatements.push(factory.createExpressionStatement(factory.inlineExpressions(pendingExpressions)));
                     }
-                    if (pendingStatements && ts.some(staticProperties)) {
-                        addPropertyStatements(pendingStatements, staticProperties, factory.getInternalName(node));
+                    if (pendingStatements && ts.some(staticPropertiesOrClassStaticBlocks)) {
+                        addPropertyOrClassStaticBlockStatements(pendingStatements, staticPropertiesOrClassStaticBlocks, factory.getInternalName(node));
                     }
                     if (temp) {
                         return factory.inlineExpressions([factory.createAssignment(temp, classExpression), temp]);
@@ -88977,15 +90827,22 @@
                     expressions.push(ts.startOnNewLine(factory.createAssignment(temp, classExpression)));
                     // Add any pending expressions leftover from elided or relocated computed property names
                     ts.addRange(expressions, ts.map(pendingExpressions, ts.startOnNewLine));
-                    ts.addRange(expressions, generateInitializedPropertyExpressions(staticProperties, temp));
+                    ts.addRange(expressions, generateInitializedPropertyExpressionsOrClassStaticBlock(staticPropertiesOrClassStaticBlocks, temp));
                     expressions.push(ts.startOnNewLine(temp));
                     return factory.inlineExpressions(expressions);
                 }
             }
             return classExpression;
         }
+        function visitClassStaticBlockDeclaration(node) {
+            if (!shouldTransformPrivateElementsOrClassStaticBlocks) {
+                return ts.visitEachChild(node, classElementVisitor, context);
+            }
+            // ClassStaticBlockDeclaration for classes are transformed in `visitClassDeclaration` or `visitClassExpression`.
+            return undefined;
+        }
         function transformClassMembers(node, isDerivedClass) {
-            if (shouldTransformPrivateElements) {
+            if (shouldTransformPrivateElementsOrClassStaticBlocks) {
                 // Declare private names.
                 for (var _i = 0, _a = node.members; _i < _a.length; _i++) {
                     var member = _a[_i];
@@ -89012,7 +90869,7 @@
             /*typeArguments*/ undefined, [])));
         }
         function isClassElementThatRequiresConstructorStatement(member) {
-            if (ts.hasStaticModifier(member) || ts.hasSyntacticModifier(ts.getOriginalNode(member), 128 /* Abstract */)) {
+            if (ts.isStatic(member) || ts.hasSyntacticModifier(ts.getOriginalNode(member), 128 /* Abstract */)) {
                 return false;
             }
             if (useDefineForClassFields) {
@@ -89020,7 +90877,7 @@
                 // then we don't need to transform any class properties.
                 return languageVersion < 99 /* ESNext */;
             }
-            return ts.isInitializedProperty(member) || shouldTransformPrivateElements && ts.isPrivateIdentifierClassElementDeclaration(member);
+            return ts.isInitializedProperty(member) || shouldTransformPrivateElementsOrClassStaticBlocks && ts.isPrivateIdentifierClassElementDeclaration(member);
         }
         function transformConstructor(node, isDerivedClass) {
             var constructor = ts.visitNode(ts.getFirstConstructorWithBody(node), visitor, ts.isConstructorDeclaration);
@@ -89087,7 +90944,7 @@
             var receiver = factory.createThis();
             // private methods can be called in property initializers, they should execute first.
             addMethodStatements(statements, privateMethodsAndAccessors, receiver);
-            addPropertyStatements(statements, properties, receiver);
+            addPropertyOrClassStaticBlockStatements(statements, properties, receiver);
             // Add existing statements, skipping the initial super call.
             if (constructor) {
                 ts.addRange(statements, ts.visitNodes(constructor.body.statements, visitor, ts.isStatement, indexOfFirstStatement));
@@ -89104,10 +90961,12 @@
          * @param properties An array of property declarations to transform.
          * @param receiver The receiver on which each property should be assigned.
          */
-        function addPropertyStatements(statements, properties, receiver) {
+        function addPropertyOrClassStaticBlockStatements(statements, properties, receiver) {
             for (var _i = 0, properties_7 = properties; _i < properties_7.length; _i++) {
                 var property = properties_7[_i];
-                var expression = transformProperty(property, receiver);
+                var expression = ts.isClassStaticBlockDeclaration(property) ?
+                    transformClassStaticBlockDeclaration(property) :
+                    transformProperty(property, receiver);
                 if (!expression) {
                     continue;
                 }
@@ -89121,14 +90980,14 @@
         /**
          * Generates assignment expressions for property initializers.
          *
-         * @param properties An array of property declarations to transform.
+         * @param propertiesOrClassStaticBlocks An array of property declarations to transform.
          * @param receiver The receiver on which each property should be assigned.
          */
-        function generateInitializedPropertyExpressions(properties, receiver) {
+        function generateInitializedPropertyExpressionsOrClassStaticBlock(propertiesOrClassStaticBlocks, receiver) {
             var expressions = [];
-            for (var _i = 0, properties_8 = properties; _i < properties_8.length; _i++) {
-                var property = properties_8[_i];
-                var expression = transformProperty(property, receiver);
+            for (var _i = 0, propertiesOrClassStaticBlocks_1 = propertiesOrClassStaticBlocks; _i < propertiesOrClassStaticBlocks_1.length; _i++) {
+                var property = propertiesOrClassStaticBlocks_1[_i];
+                var expression = ts.isClassStaticBlockDeclaration(property) ? transformClassStaticBlockDeclaration(property) : transformProperty(property, receiver);
                 if (!expression) {
                     continue;
                 }
@@ -89147,13 +91006,28 @@
          * @param receiver The object receiving the property assignment.
          */
         function transformProperty(property, receiver) {
+            var savedCurrentStaticPropertyDeclarationOrStaticBlock = currentStaticPropertyDeclarationOrStaticBlock;
+            var transformed = transformPropertyWorker(property, receiver);
+            if (transformed && ts.hasStaticModifier(property) && (currentClassLexicalEnvironment === null || currentClassLexicalEnvironment === void 0 ? void 0 : currentClassLexicalEnvironment.facts)) {
+                // capture the lexical environment for the member
+                ts.setOriginalNode(transformed, property);
+                ts.addEmitFlags(transformed, 2 /* AdviseOnEmitNode */);
+                classLexicalEnvironmentMap.set(ts.getOriginalNodeId(transformed), currentClassLexicalEnvironment);
+            }
+            currentStaticPropertyDeclarationOrStaticBlock = savedCurrentStaticPropertyDeclarationOrStaticBlock;
+            return transformed;
+        }
+        function transformPropertyWorker(property, receiver) {
             var _a;
             // We generate a name here in order to reuse the value cached by the relocated computed name expression (which uses the same generated name)
             var emitAssignment = !useDefineForClassFields;
             var propertyName = ts.isComputedPropertyName(property.name) && !ts.isSimpleInlineableExpression(property.name.expression)
                 ? factory.updateComputedPropertyName(property.name, factory.getGeneratedNameForNode(property.name))
                 : property.name;
-            if (shouldTransformPrivateElements && ts.isPrivateIdentifier(propertyName)) {
+            if (ts.hasStaticModifier(property)) {
+                currentStaticPropertyDeclarationOrStaticBlock = property;
+            }
+            if (shouldTransformPrivateElementsOrClassStaticBlocks && ts.isPrivateIdentifier(propertyName)) {
                 var privateIdentifierInfo = accessPrivateIdentifier(propertyName);
                 if (privateIdentifierInfo) {
                     if (privateIdentifierInfo.kind === "f" /* Field */) {
@@ -89199,11 +91073,30 @@
                 enabledSubstitutions |= 1 /* ClassAliases */;
                 // We need to enable substitutions for identifiers. This allows us to
                 // substitute class names inside of a class declaration.
-                context.enableSubstitution(78 /* Identifier */);
+                context.enableSubstitution(79 /* Identifier */);
                 // Keep track of class aliases.
                 classAliases = [];
             }
         }
+        function enableSubstitutionForClassStaticThisOrSuperReference() {
+            if ((enabledSubstitutions & 2 /* ClassStaticThisOrSuperReference */) === 0) {
+                enabledSubstitutions |= 2 /* ClassStaticThisOrSuperReference */;
+                // substitute `this` in a static field initializer
+                context.enableSubstitution(108 /* ThisKeyword */);
+                // these push a new lexical environment that is not the class lexical environment
+                context.enableEmitNotification(254 /* FunctionDeclaration */);
+                context.enableEmitNotification(211 /* FunctionExpression */);
+                context.enableEmitNotification(169 /* Constructor */);
+                // these push a new lexical environment that is not the class lexical environment, except
+                // when they have a computed property name
+                context.enableEmitNotification(170 /* GetAccessor */);
+                context.enableEmitNotification(171 /* SetAccessor */);
+                context.enableEmitNotification(167 /* MethodDeclaration */);
+                context.enableEmitNotification(165 /* PropertyDeclaration */);
+                // class lexical environments are restored when entering a computed property name
+                context.enableEmitNotification(160 /* ComputedPropertyName */);
+            }
+        }
         /**
          * Generates brand-check initializer for private methods.
          *
@@ -89212,13 +91105,76 @@
          * @param receiver The receiver on which each method should be assigned.
          */
         function addMethodStatements(statements, methods, receiver) {
-            if (!shouldTransformPrivateElements || !ts.some(methods)) {
+            if (!shouldTransformPrivateElementsOrClassStaticBlocks || !ts.some(methods)) {
                 return;
             }
             var weakSetName = getPrivateIdentifierEnvironment().weakSetName;
             ts.Debug.assert(weakSetName, "weakSetName should be set in private identifier environment");
             statements.push(factory.createExpressionStatement(createPrivateInstanceMethodInitializer(receiver, weakSetName)));
         }
+        function visitInvalidSuperProperty(node) {
+            return ts.isPropertyAccessExpression(node) ?
+                factory.updatePropertyAccessExpression(node, factory.createVoidZero(), node.name) :
+                factory.updateElementAccessExpression(node, factory.createVoidZero(), ts.visitNode(node.argumentExpression, visitor, ts.isExpression));
+        }
+        function onEmitNode(hint, node, emitCallback) {
+            var original = ts.getOriginalNode(node);
+            if (original.id) {
+                var classLexicalEnvironment = classLexicalEnvironmentMap.get(original.id);
+                if (classLexicalEnvironment) {
+                    var savedClassLexicalEnvironment = currentClassLexicalEnvironment;
+                    var savedCurrentComputedPropertyNameClassLexicalEnvironment = currentComputedPropertyNameClassLexicalEnvironment;
+                    currentClassLexicalEnvironment = classLexicalEnvironment;
+                    currentComputedPropertyNameClassLexicalEnvironment = classLexicalEnvironment;
+                    previousOnEmitNode(hint, node, emitCallback);
+                    currentClassLexicalEnvironment = savedClassLexicalEnvironment;
+                    currentComputedPropertyNameClassLexicalEnvironment = savedCurrentComputedPropertyNameClassLexicalEnvironment;
+                    return;
+                }
+            }
+            switch (node.kind) {
+                case 211 /* FunctionExpression */:
+                    if (ts.isArrowFunction(original) || ts.getEmitFlags(node) & 262144 /* AsyncFunctionBody */) {
+                        break;
+                    }
+                // falls through
+                case 254 /* FunctionDeclaration */:
+                case 169 /* Constructor */: {
+                    var savedClassLexicalEnvironment = currentClassLexicalEnvironment;
+                    var savedCurrentComputedPropertyNameClassLexicalEnvironment = currentComputedPropertyNameClassLexicalEnvironment;
+                    currentClassLexicalEnvironment = undefined;
+                    currentComputedPropertyNameClassLexicalEnvironment = undefined;
+                    previousOnEmitNode(hint, node, emitCallback);
+                    currentClassLexicalEnvironment = savedClassLexicalEnvironment;
+                    currentComputedPropertyNameClassLexicalEnvironment = savedCurrentComputedPropertyNameClassLexicalEnvironment;
+                    return;
+                }
+                case 170 /* GetAccessor */:
+                case 171 /* SetAccessor */:
+                case 167 /* MethodDeclaration */:
+                case 165 /* PropertyDeclaration */: {
+                    var savedClassLexicalEnvironment = currentClassLexicalEnvironment;
+                    var savedCurrentComputedPropertyNameClassLexicalEnvironment = currentComputedPropertyNameClassLexicalEnvironment;
+                    currentComputedPropertyNameClassLexicalEnvironment = currentClassLexicalEnvironment;
+                    currentClassLexicalEnvironment = undefined;
+                    previousOnEmitNode(hint, node, emitCallback);
+                    currentClassLexicalEnvironment = savedClassLexicalEnvironment;
+                    currentComputedPropertyNameClassLexicalEnvironment = savedCurrentComputedPropertyNameClassLexicalEnvironment;
+                    return;
+                }
+                case 160 /* ComputedPropertyName */: {
+                    var savedClassLexicalEnvironment = currentClassLexicalEnvironment;
+                    var savedCurrentComputedPropertyNameClassLexicalEnvironment = currentComputedPropertyNameClassLexicalEnvironment;
+                    currentClassLexicalEnvironment = currentComputedPropertyNameClassLexicalEnvironment;
+                    currentComputedPropertyNameClassLexicalEnvironment = undefined;
+                    previousOnEmitNode(hint, node, emitCallback);
+                    currentClassLexicalEnvironment = savedClassLexicalEnvironment;
+                    currentComputedPropertyNameClassLexicalEnvironment = savedCurrentComputedPropertyNameClassLexicalEnvironment;
+                    return;
+                }
+            }
+            previousOnEmitNode(hint, node, emitCallback);
+        }
         /**
          * Hooks node substitutions.
          *
@@ -89234,8 +91190,22 @@
         }
         function substituteExpression(node) {
             switch (node.kind) {
-                case 78 /* Identifier */:
+                case 79 /* Identifier */:
                     return substituteExpressionIdentifier(node);
+                case 108 /* ThisKeyword */:
+                    return substituteThisExpression(node);
+            }
+            return node;
+        }
+        function substituteThisExpression(node) {
+            if (enabledSubstitutions & 2 /* ClassStaticThisOrSuperReference */ && currentClassLexicalEnvironment) {
+                var facts = currentClassLexicalEnvironment.facts, classConstructor = currentClassLexicalEnvironment.classConstructor;
+                if (facts & 1 /* ClassWasDecorated */) {
+                    return factory.createParenthesizedExpression(factory.createVoidZero());
+                }
+                if (classConstructor) {
+                    return ts.setTextRange(ts.setOriginalNode(factory.cloneNode(classConstructor), node), node);
+                }
             }
             return node;
         }
@@ -89288,21 +91258,28 @@
                 return (inlinable || ts.isIdentifier(innerExpression)) ? undefined : expression;
             }
         }
-        function startPrivateIdentifierEnvironment() {
-            privateIdentifierEnvironmentStack.push(currentPrivateIdentifierEnvironment);
-            currentPrivateIdentifierEnvironment = undefined;
+        function startClassLexicalEnvironment() {
+            classLexicalEnvironmentStack.push(currentClassLexicalEnvironment);
+            currentClassLexicalEnvironment = undefined;
         }
-        function endPrivateIdentifierEnvironment() {
-            currentPrivateIdentifierEnvironment = privateIdentifierEnvironmentStack.pop();
+        function endClassLexicalEnvironment() {
+            currentClassLexicalEnvironment = classLexicalEnvironmentStack.pop();
+        }
+        function getClassLexicalEnvironment() {
+            return currentClassLexicalEnvironment || (currentClassLexicalEnvironment = {
+                facts: 0 /* None */,
+                classConstructor: undefined,
+                superClassReference: undefined,
+                privateIdentifierEnvironment: undefined,
+            });
         }
         function getPrivateIdentifierEnvironment() {
-            if (!currentPrivateIdentifierEnvironment) {
-                currentPrivateIdentifierEnvironment = {
-                    className: "",
-                    identifiers: new ts.Map()
-                };
-            }
-            return currentPrivateIdentifierEnvironment;
+            var lex = getClassLexicalEnvironment();
+            lex.privateIdentifierEnvironment || (lex.privateIdentifierEnvironment = {
+                className: "",
+                identifiers: new ts.Map()
+            });
+            return lex.privateIdentifierEnvironment;
         }
         function getPendingExpressions() {
             return pendingExpressions || (pendingExpressions = []);
@@ -89310,17 +91287,19 @@
         function addPrivateIdentifierToEnvironment(node) {
             var _a;
             var text = ts.getTextOfPropertyName(node.name);
-            var env = getPrivateIdentifierEnvironment();
-            var weakSetName = env.weakSetName, classConstructor = env.classConstructor;
+            var lex = getClassLexicalEnvironment();
+            var classConstructor = lex.classConstructor;
+            var privateEnv = getPrivateIdentifierEnvironment();
+            var weakSetName = privateEnv.weakSetName;
             var assignmentExpressions = [];
             var privateName = node.name.escapedText;
-            var previousInfo = env.identifiers.get(privateName);
+            var previousInfo = privateEnv.identifiers.get(privateName);
             var isValid = !isReservedPrivateName(node.name) && previousInfo === undefined;
             if (ts.hasStaticModifier(node)) {
                 ts.Debug.assert(classConstructor, "weakSetName should be set in private identifier environment");
                 if (ts.isPropertyDeclaration(node)) {
                     var variableName = createHoistedVariableForPrivateName(text, node);
-                    env.identifiers.set(privateName, {
+                    privateEnv.identifiers.set(privateName, {
                         kind: "f" /* Field */,
                         variableName: variableName,
                         brandCheckIdentifier: classConstructor,
@@ -89330,7 +91309,7 @@
                 }
                 else if (ts.isMethodDeclaration(node)) {
                     var functionName = createHoistedVariableForPrivateName(text, node);
-                    env.identifiers.set(privateName, {
+                    privateEnv.identifiers.set(privateName, {
                         kind: "m" /* Method */,
                         methodName: functionName,
                         brandCheckIdentifier: classConstructor,
@@ -89344,7 +91323,7 @@
                         previousInfo.getterName = getterName;
                     }
                     else {
-                        env.identifiers.set(privateName, {
+                        privateEnv.identifiers.set(privateName, {
                             kind: "a" /* Accessor */,
                             getterName: getterName,
                             setterName: undefined,
@@ -89360,7 +91339,7 @@
                         previousInfo.setterName = setterName;
                     }
                     else {
-                        env.identifiers.set(privateName, {
+                        privateEnv.identifiers.set(privateName, {
                             kind: "a" /* Accessor */,
                             getterName: undefined,
                             setterName: setterName,
@@ -89376,7 +91355,7 @@
             }
             else if (ts.isPropertyDeclaration(node)) {
                 var weakMapName = createHoistedVariableForPrivateName(text, node);
-                env.identifiers.set(privateName, {
+                privateEnv.identifiers.set(privateName, {
                     kind: "f" /* Field */,
                     brandCheckIdentifier: weakMapName,
                     isStatic: false,
@@ -89388,7 +91367,7 @@
             }
             else if (ts.isMethodDeclaration(node)) {
                 ts.Debug.assert(weakSetName, "weakSetName should be set in private identifier environment");
-                env.identifiers.set(privateName, {
+                privateEnv.identifiers.set(privateName, {
                     kind: "m" /* Method */,
                     methodName: createHoistedVariableForPrivateName(text, node),
                     brandCheckIdentifier: weakSetName,
@@ -89404,7 +91383,7 @@
                         previousInfo.getterName = getterName;
                     }
                     else {
-                        env.identifiers.set(privateName, {
+                        privateEnv.identifiers.set(privateName, {
                             kind: "a" /* Accessor */,
                             getterName: getterName,
                             setterName: undefined,
@@ -89420,7 +91399,7 @@
                         previousInfo.setterName = setterName;
                     }
                     else {
-                        env.identifiers.set(privateName, {
+                        privateEnv.identifiers.set(privateName, {
                             kind: "a" /* Accessor */,
                             getterName: undefined,
                             setterName: setterName,
@@ -89452,18 +91431,19 @@
             return createHoistedVariableForClass(privateName.substring(1), node.name);
         }
         function accessPrivateIdentifier(name) {
-            if (currentPrivateIdentifierEnvironment) {
-                var info = currentPrivateIdentifierEnvironment.identifiers.get(name.escapedText);
+            var _a;
+            if (currentClassLexicalEnvironment === null || currentClassLexicalEnvironment === void 0 ? void 0 : currentClassLexicalEnvironment.privateIdentifierEnvironment) {
+                var info = currentClassLexicalEnvironment.privateIdentifierEnvironment.identifiers.get(name.escapedText);
                 if (info) {
                     return info;
                 }
             }
-            for (var i = privateIdentifierEnvironmentStack.length - 1; i >= 0; --i) {
-                var env = privateIdentifierEnvironmentStack[i];
+            for (var i = classLexicalEnvironmentStack.length - 1; i >= 0; --i) {
+                var env = classLexicalEnvironmentStack[i];
                 if (!env) {
                     continue;
                 }
-                var info = env.identifiers.get(name.escapedText);
+                var info = (_a = env.privateIdentifierEnvironment) === null || _a === void 0 ? void 0 : _a.identifiers.get(name.escapedText);
                 if (info) {
                     return info;
                 }
@@ -89481,53 +91461,93 @@
             // differently inside the function.
             if (ts.isThisProperty(node) || ts.isSuperProperty(node) || !ts.isSimpleCopiableExpression(node.expression)) {
                 receiver = factory.createTempVariable(hoistVariableDeclaration, /*reservedInNestedScopes*/ true);
-                getPendingExpressions().push(factory.createBinaryExpression(receiver, 62 /* EqualsToken */, node.expression));
+                getPendingExpressions().push(factory.createBinaryExpression(receiver, 63 /* EqualsToken */, ts.visitNode(node.expression, visitor, ts.isExpression)));
             }
-            return factory.createPropertyAccessExpression(
-            // Explicit parens required because of v8 regression (https://bugs.chromium.org/p/v8/issues/detail?id=9560)
-            factory.createParenthesizedExpression(factory.createObjectLiteralExpression([
-                factory.createSetAccessorDeclaration(
-                /*decorators*/ undefined, 
-                /*modifiers*/ undefined, "value", [factory.createParameterDeclaration(
-                    /*decorators*/ undefined, 
-                    /*modifiers*/ undefined, 
-                    /*dotDotDotToken*/ undefined, parameter, 
-                    /*questionToken*/ undefined, 
-                    /*type*/ undefined, 
-                    /*initializer*/ undefined)], factory.createBlock([factory.createExpressionStatement(createPrivateIdentifierAssignment(info, receiver, parameter, 62 /* EqualsToken */))]))
-            ])), "value");
+            return factory.createAssignmentTargetWrapper(parameter, createPrivateIdentifierAssignment(info, receiver, parameter, 63 /* EqualsToken */));
         }
         function visitArrayAssignmentTarget(node) {
             var target = ts.getTargetOfBindingOrAssignmentElement(node);
-            if (target && ts.isPrivateIdentifierPropertyAccessExpression(target)) {
-                var wrapped = wrapPrivateIdentifierForDestructuringTarget(target);
-                if (ts.isAssignmentExpression(node)) {
-                    return factory.updateBinaryExpression(node, wrapped, node.operatorToken, ts.visitNode(node.right, visitor, ts.isExpression));
+            if (target) {
+                var wrapped = void 0;
+                if (ts.isPrivateIdentifierPropertyAccessExpression(target)) {
+                    wrapped = wrapPrivateIdentifierForDestructuringTarget(target);
                 }
-                else if (ts.isSpreadElement(node)) {
-                    return factory.updateSpreadElement(node, wrapped);
+                else if (shouldTransformSuperInStaticInitializers &&
+                    ts.isSuperProperty(target) &&
+                    currentStaticPropertyDeclarationOrStaticBlock &&
+                    currentClassLexicalEnvironment) {
+                    var classConstructor = currentClassLexicalEnvironment.classConstructor, superClassReference = currentClassLexicalEnvironment.superClassReference, facts = currentClassLexicalEnvironment.facts;
+                    if (facts & 1 /* ClassWasDecorated */) {
+                        wrapped = visitInvalidSuperProperty(target);
+                    }
+                    else if (classConstructor && superClassReference) {
+                        var name = ts.isElementAccessExpression(target) ? ts.visitNode(target.argumentExpression, visitor, ts.isExpression) :
+                            ts.isIdentifier(target.name) ? factory.createStringLiteralFromNode(target.name) :
+                                undefined;
+                        if (name) {
+                            var temp = factory.createTempVariable(/*recordTempVariable*/ undefined);
+                            wrapped = factory.createAssignmentTargetWrapper(temp, factory.createReflectSetCall(superClassReference, name, temp, classConstructor));
+                        }
+                    }
                 }
-                else {
-                    return wrapped;
+                if (wrapped) {
+                    if (ts.isAssignmentExpression(node)) {
+                        return factory.updateBinaryExpression(node, wrapped, node.operatorToken, ts.visitNode(node.right, visitor, ts.isExpression));
+                    }
+                    else if (ts.isSpreadElement(node)) {
+                        return factory.updateSpreadElement(node, wrapped);
+                    }
+                    else {
+                        return wrapped;
+                    }
                 }
             }
             return ts.visitNode(node, visitorDestructuringTarget);
         }
         function visitObjectAssignmentTarget(node) {
-            if (ts.isPropertyAssignment(node)) {
+            if (ts.isObjectBindingOrAssignmentElement(node) && !ts.isShorthandPropertyAssignment(node)) {
                 var target = ts.getTargetOfBindingOrAssignmentElement(node);
-                if (target && ts.isPrivateIdentifierPropertyAccessExpression(target)) {
-                    var initializer = ts.getInitializerOfBindingOrAssignmentElement(node);
-                    var wrapped = wrapPrivateIdentifierForDestructuringTarget(target);
-                    return factory.updatePropertyAssignment(node, ts.visitNode(node.name, visitor), initializer ? factory.createAssignment(wrapped, ts.visitNode(initializer, visitor)) : wrapped);
+                var wrapped = void 0;
+                if (target) {
+                    if (ts.isPrivateIdentifierPropertyAccessExpression(target)) {
+                        wrapped = wrapPrivateIdentifierForDestructuringTarget(target);
+                    }
+                    else if (shouldTransformSuperInStaticInitializers &&
+                        ts.isSuperProperty(target) &&
+                        currentStaticPropertyDeclarationOrStaticBlock &&
+                        currentClassLexicalEnvironment) {
+                        var classConstructor = currentClassLexicalEnvironment.classConstructor, superClassReference = currentClassLexicalEnvironment.superClassReference, facts = currentClassLexicalEnvironment.facts;
+                        if (facts & 1 /* ClassWasDecorated */) {
+                            wrapped = visitInvalidSuperProperty(target);
+                        }
+                        else if (classConstructor && superClassReference) {
+                            var name = ts.isElementAccessExpression(target) ? ts.visitNode(target.argumentExpression, visitor, ts.isExpression) :
+                                ts.isIdentifier(target.name) ? factory.createStringLiteralFromNode(target.name) :
+                                    undefined;
+                            if (name) {
+                                var temp = factory.createTempVariable(/*recordTempVariable*/ undefined);
+                                wrapped = factory.createAssignmentTargetWrapper(temp, factory.createReflectSetCall(superClassReference, name, temp, classConstructor));
+                            }
+                        }
+                    }
                 }
-                return factory.updatePropertyAssignment(node, ts.visitNode(node.name, visitor), ts.visitNode(node.initializer, visitorDestructuringTarget));
+                if (ts.isPropertyAssignment(node)) {
+                    var initializer = ts.getInitializerOfBindingOrAssignmentElement(node);
+                    return factory.updatePropertyAssignment(node, ts.visitNode(node.name, visitor, ts.isPropertyName), wrapped ?
+                        initializer ? factory.createAssignment(wrapped, ts.visitNode(initializer, visitor)) : wrapped :
+                        ts.visitNode(node.initializer, visitorDestructuringTarget, ts.isExpression));
+                }
+                if (ts.isSpreadAssignment(node)) {
+                    return factory.updateSpreadAssignment(node, wrapped || ts.visitNode(node.expression, visitorDestructuringTarget, ts.isExpression));
+                }
+                ts.Debug.assert(wrapped === undefined, "Should not have generated a wrapped target");
             }
             return ts.visitNode(node, visitor);
         }
         function visitAssignmentPattern(node) {
             if (ts.isArrayLiteralExpression(node)) {
                 // Transforms private names in destructuring assignment array bindings.
+                // Transforms SuperProperty assignments in destructuring assignment array bindings in static initializers.
                 //
                 // Source:
                 // ([ this.#myProp ] = [ "hello" ]);
@@ -89538,6 +91558,7 @@
             }
             else {
                 // Transforms private names in destructuring assignment object bindings.
+                // Transforms SuperProperty assignments in destructuring assignment object bindings in static initializers.
                 //
                 // Source:
                 // ({ stringProperty: this.#myProp } = { stringProperty: "hello" });
@@ -89651,34 +91672,34 @@
                 return node;
             }
             switch (node.kind) {
-                case 129 /* AsyncKeyword */:
+                case 130 /* AsyncKeyword */:
                     // ES2017 async modifier should be elided for targets < ES2017
                     return undefined;
-                case 214 /* AwaitExpression */:
+                case 216 /* AwaitExpression */:
                     return visitAwaitExpression(node);
-                case 166 /* MethodDeclaration */:
+                case 167 /* MethodDeclaration */:
                     return doWithContext(1 /* NonTopLevel */ | 2 /* HasLexicalThis */, visitMethodDeclaration, node);
-                case 252 /* FunctionDeclaration */:
+                case 254 /* FunctionDeclaration */:
                     return doWithContext(1 /* NonTopLevel */ | 2 /* HasLexicalThis */, visitFunctionDeclaration, node);
-                case 209 /* FunctionExpression */:
+                case 211 /* FunctionExpression */:
                     return doWithContext(1 /* NonTopLevel */ | 2 /* HasLexicalThis */, visitFunctionExpression, node);
-                case 210 /* ArrowFunction */:
+                case 212 /* ArrowFunction */:
                     return doWithContext(1 /* NonTopLevel */, visitArrowFunction, node);
-                case 202 /* PropertyAccessExpression */:
-                    if (capturedSuperProperties && ts.isPropertyAccessExpression(node) && node.expression.kind === 105 /* SuperKeyword */) {
+                case 204 /* PropertyAccessExpression */:
+                    if (capturedSuperProperties && ts.isPropertyAccessExpression(node) && node.expression.kind === 106 /* SuperKeyword */) {
                         capturedSuperProperties.add(node.name.escapedText);
                     }
                     return ts.visitEachChild(node, visitor, context);
-                case 203 /* ElementAccessExpression */:
-                    if (capturedSuperProperties && node.expression.kind === 105 /* SuperKeyword */) {
+                case 205 /* ElementAccessExpression */:
+                    if (capturedSuperProperties && node.expression.kind === 106 /* SuperKeyword */) {
                         hasSuperElementAccess = true;
                     }
                     return ts.visitEachChild(node, visitor, context);
-                case 168 /* GetAccessor */:
-                case 169 /* SetAccessor */:
-                case 167 /* Constructor */:
-                case 253 /* ClassDeclaration */:
-                case 222 /* ClassExpression */:
+                case 170 /* GetAccessor */:
+                case 171 /* SetAccessor */:
+                case 169 /* Constructor */:
+                case 255 /* ClassDeclaration */:
+                case 224 /* ClassExpression */:
                     return doWithContext(1 /* NonTopLevel */ | 2 /* HasLexicalThis */, visitDefault, node);
                 default:
                     return ts.visitEachChild(node, visitor, context);
@@ -89687,27 +91708,27 @@
         function asyncBodyVisitor(node) {
             if (ts.isNodeWithPossibleHoistedDeclaration(node)) {
                 switch (node.kind) {
-                    case 233 /* VariableStatement */:
+                    case 235 /* VariableStatement */:
                         return visitVariableStatementInAsyncBody(node);
-                    case 238 /* ForStatement */:
+                    case 240 /* ForStatement */:
                         return visitForStatementInAsyncBody(node);
-                    case 239 /* ForInStatement */:
+                    case 241 /* ForInStatement */:
                         return visitForInStatementInAsyncBody(node);
-                    case 240 /* ForOfStatement */:
+                    case 242 /* ForOfStatement */:
                         return visitForOfStatementInAsyncBody(node);
-                    case 288 /* CatchClause */:
+                    case 290 /* CatchClause */:
                         return visitCatchClauseInAsyncBody(node);
-                    case 231 /* Block */:
-                    case 245 /* SwitchStatement */:
-                    case 259 /* CaseBlock */:
-                    case 285 /* CaseClause */:
-                    case 286 /* DefaultClause */:
-                    case 248 /* TryStatement */:
-                    case 236 /* DoStatement */:
-                    case 237 /* WhileStatement */:
-                    case 235 /* IfStatement */:
-                    case 244 /* WithStatement */:
-                    case 246 /* LabeledStatement */:
+                    case 233 /* Block */:
+                    case 247 /* SwitchStatement */:
+                    case 261 /* CaseBlock */:
+                    case 287 /* CaseClause */:
+                    case 288 /* DefaultClause */:
+                    case 250 /* TryStatement */:
+                    case 238 /* DoStatement */:
+                    case 239 /* WhileStatement */:
+                    case 237 /* IfStatement */:
+                    case 246 /* WithStatement */:
+                    case 248 /* LabeledStatement */:
                         return ts.visitEachChild(node, asyncBodyVisitor, context);
                     default:
                         return ts.Debug.assertNever(node, "Unhandled node.");
@@ -89912,7 +91933,7 @@
             var original = ts.getOriginalNode(node, ts.isFunctionLike);
             var nodeType = original.type;
             var promiseConstructor = languageVersion < 2 /* ES2015 */ ? getPromiseConstructor(nodeType) : undefined;
-            var isArrowFunction = node.kind === 210 /* ArrowFunction */;
+            var isArrowFunction = node.kind === 212 /* ArrowFunction */;
             var hasLexicalArguments = (resolver.getNodeCheckFlags(node) & 8192 /* CaptureArguments */) !== 0;
             // An async function is emit as an outer function that calls an inner
             // generator function. To preserve lexical bindings, we pass the current
@@ -90003,17 +92024,17 @@
                 enabledSubstitutions |= 1 /* AsyncMethodsWithSuper */;
                 // We need to enable substitutions for call, property access, and element access
                 // if we need to rewrite super calls.
-                context.enableSubstitution(204 /* CallExpression */);
-                context.enableSubstitution(202 /* PropertyAccessExpression */);
-                context.enableSubstitution(203 /* ElementAccessExpression */);
+                context.enableSubstitution(206 /* CallExpression */);
+                context.enableSubstitution(204 /* PropertyAccessExpression */);
+                context.enableSubstitution(205 /* ElementAccessExpression */);
                 // We need to be notified when entering and exiting declarations that bind super.
-                context.enableEmitNotification(253 /* ClassDeclaration */);
-                context.enableEmitNotification(166 /* MethodDeclaration */);
-                context.enableEmitNotification(168 /* GetAccessor */);
-                context.enableEmitNotification(169 /* SetAccessor */);
-                context.enableEmitNotification(167 /* Constructor */);
+                context.enableEmitNotification(255 /* ClassDeclaration */);
+                context.enableEmitNotification(167 /* MethodDeclaration */);
+                context.enableEmitNotification(170 /* GetAccessor */);
+                context.enableEmitNotification(171 /* SetAccessor */);
+                context.enableEmitNotification(169 /* Constructor */);
                 // We need to be notified when entering the generated accessor arrow functions.
-                context.enableEmitNotification(233 /* VariableStatement */);
+                context.enableEmitNotification(235 /* VariableStatement */);
             }
         }
         /**
@@ -90061,23 +92082,23 @@
         }
         function substituteExpression(node) {
             switch (node.kind) {
-                case 202 /* PropertyAccessExpression */:
+                case 204 /* PropertyAccessExpression */:
                     return substitutePropertyAccessExpression(node);
-                case 203 /* ElementAccessExpression */:
+                case 205 /* ElementAccessExpression */:
                     return substituteElementAccessExpression(node);
-                case 204 /* CallExpression */:
+                case 206 /* CallExpression */:
                     return substituteCallExpression(node);
             }
             return node;
         }
         function substitutePropertyAccessExpression(node) {
-            if (node.expression.kind === 105 /* SuperKeyword */) {
+            if (node.expression.kind === 106 /* SuperKeyword */) {
                 return ts.setTextRange(factory.createPropertyAccessExpression(factory.createUniqueName("_super", 16 /* Optimistic */ | 32 /* FileLevel */), node.name), node);
             }
             return node;
         }
         function substituteElementAccessExpression(node) {
-            if (node.expression.kind === 105 /* SuperKeyword */) {
+            if (node.expression.kind === 106 /* SuperKeyword */) {
                 return createSuperElementAccessInAsyncMethod(node.argumentExpression, node);
             }
             return node;
@@ -90091,17 +92112,17 @@
                 return factory.createCallExpression(factory.createPropertyAccessExpression(argumentExpression, "call"), 
                 /*typeArguments*/ undefined, __spreadArray([
                     factory.createThis()
-                ], node.arguments));
+                ], node.arguments, true));
             }
             return node;
         }
         function isSuperContainer(node) {
             var kind = node.kind;
-            return kind === 253 /* ClassDeclaration */
-                || kind === 167 /* Constructor */
-                || kind === 166 /* MethodDeclaration */
-                || kind === 168 /* GetAccessor */
-                || kind === 169 /* SetAccessor */;
+            return kind === 255 /* ClassDeclaration */
+                || kind === 169 /* Constructor */
+                || kind === 167 /* MethodDeclaration */
+                || kind === 170 /* GetAccessor */
+                || kind === 171 /* SetAccessor */;
         }
         function createSuperElementAccessInAsyncMethod(argumentExpression, location) {
             if (enclosingSuperContainerFlags & 4096 /* AsyncMethodWithSuperBinding */) {
@@ -90258,7 +92279,7 @@
             return visitorWorker(node, /*expressionResultIsUnused*/ true);
         }
         function visitorNoAsyncModifier(node) {
-            if (node.kind === 129 /* AsyncKeyword */) {
+            if (node.kind === 130 /* AsyncKeyword */) {
                 return undefined;
             }
             return node;
@@ -90284,70 +92305,70 @@
                 return node;
             }
             switch (node.kind) {
-                case 214 /* AwaitExpression */:
+                case 216 /* AwaitExpression */:
                     return visitAwaitExpression(node);
-                case 220 /* YieldExpression */:
+                case 222 /* YieldExpression */:
                     return visitYieldExpression(node);
-                case 243 /* ReturnStatement */:
+                case 245 /* ReturnStatement */:
                     return visitReturnStatement(node);
-                case 246 /* LabeledStatement */:
+                case 248 /* LabeledStatement */:
                     return visitLabeledStatement(node);
-                case 201 /* ObjectLiteralExpression */:
+                case 203 /* ObjectLiteralExpression */:
                     return visitObjectLiteralExpression(node);
-                case 217 /* BinaryExpression */:
+                case 219 /* BinaryExpression */:
                     return visitBinaryExpression(node, expressionResultIsUnused);
-                case 341 /* CommaListExpression */:
+                case 346 /* CommaListExpression */:
                     return visitCommaListExpression(node, expressionResultIsUnused);
-                case 288 /* CatchClause */:
+                case 290 /* CatchClause */:
                     return visitCatchClause(node);
-                case 233 /* VariableStatement */:
+                case 235 /* VariableStatement */:
                     return visitVariableStatement(node);
-                case 250 /* VariableDeclaration */:
+                case 252 /* VariableDeclaration */:
                     return visitVariableDeclaration(node);
-                case 236 /* DoStatement */:
-                case 237 /* WhileStatement */:
-                case 239 /* ForInStatement */:
+                case 238 /* DoStatement */:
+                case 239 /* WhileStatement */:
+                case 241 /* ForInStatement */:
                     return doWithHierarchyFacts(visitDefault, node, 0 /* IterationStatementExcludes */, 2 /* IterationStatementIncludes */);
-                case 240 /* ForOfStatement */:
+                case 242 /* ForOfStatement */:
                     return visitForOfStatement(node, /*outermostLabeledStatement*/ undefined);
-                case 238 /* ForStatement */:
+                case 240 /* ForStatement */:
                     return doWithHierarchyFacts(visitForStatement, node, 0 /* IterationStatementExcludes */, 2 /* IterationStatementIncludes */);
-                case 213 /* VoidExpression */:
+                case 215 /* VoidExpression */:
                     return visitVoidExpression(node);
-                case 167 /* Constructor */:
+                case 169 /* Constructor */:
                     return doWithHierarchyFacts(visitConstructorDeclaration, node, 2 /* ClassOrFunctionExcludes */, 1 /* ClassOrFunctionIncludes */);
-                case 166 /* MethodDeclaration */:
+                case 167 /* MethodDeclaration */:
                     return doWithHierarchyFacts(visitMethodDeclaration, node, 2 /* ClassOrFunctionExcludes */, 1 /* ClassOrFunctionIncludes */);
-                case 168 /* GetAccessor */:
+                case 170 /* GetAccessor */:
                     return doWithHierarchyFacts(visitGetAccessorDeclaration, node, 2 /* ClassOrFunctionExcludes */, 1 /* ClassOrFunctionIncludes */);
-                case 169 /* SetAccessor */:
+                case 171 /* SetAccessor */:
                     return doWithHierarchyFacts(visitSetAccessorDeclaration, node, 2 /* ClassOrFunctionExcludes */, 1 /* ClassOrFunctionIncludes */);
-                case 252 /* FunctionDeclaration */:
+                case 254 /* FunctionDeclaration */:
                     return doWithHierarchyFacts(visitFunctionDeclaration, node, 2 /* ClassOrFunctionExcludes */, 1 /* ClassOrFunctionIncludes */);
-                case 209 /* FunctionExpression */:
+                case 211 /* FunctionExpression */:
                     return doWithHierarchyFacts(visitFunctionExpression, node, 2 /* ClassOrFunctionExcludes */, 1 /* ClassOrFunctionIncludes */);
-                case 210 /* ArrowFunction */:
+                case 212 /* ArrowFunction */:
                     return doWithHierarchyFacts(visitArrowFunction, node, 2 /* ArrowFunctionExcludes */, 0 /* ArrowFunctionIncludes */);
-                case 161 /* Parameter */:
+                case 162 /* Parameter */:
                     return visitParameter(node);
-                case 234 /* ExpressionStatement */:
+                case 236 /* ExpressionStatement */:
                     return visitExpressionStatement(node);
-                case 208 /* ParenthesizedExpression */:
+                case 210 /* ParenthesizedExpression */:
                     return visitParenthesizedExpression(node, expressionResultIsUnused);
-                case 206 /* TaggedTemplateExpression */:
+                case 208 /* TaggedTemplateExpression */:
                     return visitTaggedTemplateExpression(node);
-                case 202 /* PropertyAccessExpression */:
-                    if (capturedSuperProperties && ts.isPropertyAccessExpression(node) && node.expression.kind === 105 /* SuperKeyword */) {
+                case 204 /* PropertyAccessExpression */:
+                    if (capturedSuperProperties && ts.isPropertyAccessExpression(node) && node.expression.kind === 106 /* SuperKeyword */) {
                         capturedSuperProperties.add(node.name.escapedText);
                     }
                     return ts.visitEachChild(node, visitor, context);
-                case 203 /* ElementAccessExpression */:
-                    if (capturedSuperProperties && node.expression.kind === 105 /* SuperKeyword */) {
+                case 205 /* ElementAccessExpression */:
+                    if (capturedSuperProperties && node.expression.kind === 106 /* SuperKeyword */) {
                         hasSuperElementAccess = true;
                     }
                     return ts.visitEachChild(node, visitor, context);
-                case 253 /* ClassDeclaration */:
-                case 222 /* ClassExpression */:
+                case 255 /* ClassDeclaration */:
+                case 224 /* ClassExpression */:
                     return doWithHierarchyFacts(visitDefault, node, 2 /* ClassOrFunctionExcludes */, 1 /* ClassOrFunctionIncludes */);
                 default:
                     return ts.visitEachChild(node, visitor, context);
@@ -90383,7 +92404,7 @@
         function visitLabeledStatement(node) {
             if (enclosingFunctionFlags & 2 /* Async */) {
                 var statement = ts.unwrapInnermostStatementOfLabel(node);
-                if (statement.kind === 240 /* ForOfStatement */ && statement.awaitModifier) {
+                if (statement.kind === 242 /* ForOfStatement */ && statement.awaitModifier) {
                     return visitForOfStatement(statement, node);
                 }
                 return factory.restoreEnclosingLabel(ts.visitNode(statement, visitor, ts.isStatement, factory.liftToBlock), node);
@@ -90395,7 +92416,7 @@
             var objects = [];
             for (var _i = 0, elements_4 = elements; _i < elements_4.length; _i++) {
                 var e = elements_4[_i];
-                if (e.kind === 291 /* SpreadAssignment */) {
+                if (e.kind === 293 /* SpreadAssignment */) {
                     if (chunkObject) {
                         objects.push(factory.createObjectLiteralExpression(chunkObject));
                         chunkObject = undefined;
@@ -90404,7 +92425,7 @@
                     objects.push(ts.visitNode(target, visitor, ts.isExpression));
                 }
                 else {
-                    chunkObject = ts.append(chunkObject, e.kind === 289 /* PropertyAssignment */
+                    chunkObject = ts.append(chunkObject, e.kind === 291 /* PropertyAssignment */
                         ? factory.createPropertyAssignment(e.name, ts.visitNode(e.initializer, visitor, ts.isExpression))
                         : ts.visitNode(e, visitor, ts.isObjectLiteralElementLike));
                 }
@@ -90438,7 +92459,7 @@
                 // If we translate the above to `__assign({}, k, l)`, the `l` will evaluate before `k` is spread and we
                 // end up with `{ a: 1, b: 2, c: 3 }`
                 var objects = chunkObjectLiteralElements(node.properties);
-                if (objects.length && objects[0].kind !== 201 /* ObjectLiteralExpression */) {
+                if (objects.length && objects[0].kind !== 203 /* ObjectLiteralExpression */) {
                     objects.unshift(factory.createObjectLiteralExpression());
                 }
                 var expression = objects[0];
@@ -90527,7 +92548,7 @@
                 if (ts.some(visitedBindings)) {
                     block = factory.updateBlock(block, __spreadArray([
                         factory.createVariableStatement(/*modifiers*/ undefined, visitedBindings)
-                    ], block.statements));
+                    ], block.statements, true));
                 }
                 return factory.updateCatchClause(node, factory.updateVariableDeclaration(node.variableDeclaration, name, /*exclamationToken*/ undefined, /*type*/ undefined, /*initializer*/ undefined), block);
             }
@@ -90851,17 +92872,17 @@
                 enabledSubstitutions |= 1 /* AsyncMethodsWithSuper */;
                 // We need to enable substitutions for call, property access, and element access
                 // if we need to rewrite super calls.
-                context.enableSubstitution(204 /* CallExpression */);
-                context.enableSubstitution(202 /* PropertyAccessExpression */);
-                context.enableSubstitution(203 /* ElementAccessExpression */);
+                context.enableSubstitution(206 /* CallExpression */);
+                context.enableSubstitution(204 /* PropertyAccessExpression */);
+                context.enableSubstitution(205 /* ElementAccessExpression */);
                 // We need to be notified when entering and exiting declarations that bind super.
-                context.enableEmitNotification(253 /* ClassDeclaration */);
-                context.enableEmitNotification(166 /* MethodDeclaration */);
-                context.enableEmitNotification(168 /* GetAccessor */);
-                context.enableEmitNotification(169 /* SetAccessor */);
-                context.enableEmitNotification(167 /* Constructor */);
+                context.enableEmitNotification(255 /* ClassDeclaration */);
+                context.enableEmitNotification(167 /* MethodDeclaration */);
+                context.enableEmitNotification(170 /* GetAccessor */);
+                context.enableEmitNotification(171 /* SetAccessor */);
+                context.enableEmitNotification(169 /* Constructor */);
                 // We need to be notified when entering the generated accessor arrow functions.
-                context.enableEmitNotification(233 /* VariableStatement */);
+                context.enableEmitNotification(235 /* VariableStatement */);
             }
         }
         /**
@@ -90909,23 +92930,23 @@
         }
         function substituteExpression(node) {
             switch (node.kind) {
-                case 202 /* PropertyAccessExpression */:
+                case 204 /* PropertyAccessExpression */:
                     return substitutePropertyAccessExpression(node);
-                case 203 /* ElementAccessExpression */:
+                case 205 /* ElementAccessExpression */:
                     return substituteElementAccessExpression(node);
-                case 204 /* CallExpression */:
+                case 206 /* CallExpression */:
                     return substituteCallExpression(node);
             }
             return node;
         }
         function substitutePropertyAccessExpression(node) {
-            if (node.expression.kind === 105 /* SuperKeyword */) {
+            if (node.expression.kind === 106 /* SuperKeyword */) {
                 return ts.setTextRange(factory.createPropertyAccessExpression(factory.createUniqueName("_super", 16 /* Optimistic */ | 32 /* FileLevel */), node.name), node);
             }
             return node;
         }
         function substituteElementAccessExpression(node) {
-            if (node.expression.kind === 105 /* SuperKeyword */) {
+            if (node.expression.kind === 106 /* SuperKeyword */) {
                 return createSuperElementAccessInAsyncMethod(node.argumentExpression, node);
             }
             return node;
@@ -90939,17 +92960,17 @@
                 return factory.createCallExpression(factory.createPropertyAccessExpression(argumentExpression, "call"), 
                 /*typeArguments*/ undefined, __spreadArray([
                     factory.createThis()
-                ], node.arguments));
+                ], node.arguments, true));
             }
             return node;
         }
         function isSuperContainer(node) {
             var kind = node.kind;
-            return kind === 253 /* ClassDeclaration */
-                || kind === 167 /* Constructor */
-                || kind === 166 /* MethodDeclaration */
-                || kind === 168 /* GetAccessor */
-                || kind === 169 /* SetAccessor */;
+            return kind === 255 /* ClassDeclaration */
+                || kind === 169 /* Constructor */
+                || kind === 167 /* MethodDeclaration */
+                || kind === 170 /* GetAccessor */
+                || kind === 171 /* SetAccessor */;
         }
         function createSuperElementAccessInAsyncMethod(argumentExpression, location) {
             if (enclosingSuperContainerFlags & 4096 /* AsyncMethodWithSuperBinding */) {
@@ -90981,7 +93002,7 @@
                 return node;
             }
             switch (node.kind) {
-                case 288 /* CatchClause */:
+                case 290 /* CatchClause */:
                     return visitCatchClause(node);
                 default:
                     return ts.visitEachChild(node, visitor, context);
@@ -91013,25 +93034,25 @@
                 return node;
             }
             switch (node.kind) {
-                case 204 /* CallExpression */: {
+                case 206 /* CallExpression */: {
                     var updated = visitNonOptionalCallExpression(node, /*captureThisArg*/ false);
                     ts.Debug.assertNotNode(updated, ts.isSyntheticReference);
                     return updated;
                 }
-                case 202 /* PropertyAccessExpression */:
-                case 203 /* ElementAccessExpression */:
+                case 204 /* PropertyAccessExpression */:
+                case 205 /* ElementAccessExpression */:
                     if (ts.isOptionalChain(node)) {
                         var updated = visitOptionalExpression(node, /*captureThisArg*/ false, /*isDelete*/ false);
                         ts.Debug.assertNotNode(updated, ts.isSyntheticReference);
                         return updated;
                     }
                     return ts.visitEachChild(node, visitor, context);
-                case 217 /* BinaryExpression */:
+                case 219 /* BinaryExpression */:
                     if (node.operatorToken.kind === 60 /* QuestionQuestionToken */) {
                         return transformNullishCoalescingExpression(node);
                     }
                     return ts.visitEachChild(node, visitor, context);
-                case 211 /* DeleteExpression */:
+                case 213 /* DeleteExpression */:
                     return visitDeleteExpression(node);
                 default:
                     return ts.visitEachChild(node, visitor, context);
@@ -91073,7 +93094,7 @@
                     thisArg = expression;
                 }
             }
-            expression = node.kind === 202 /* PropertyAccessExpression */
+            expression = node.kind === 204 /* PropertyAccessExpression */
                 ? factory.updatePropertyAccessExpression(node, expression, ts.visitNode(node.name, visitor, ts.isIdentifier))
                 : factory.updateElementAccessExpression(node, expression, ts.visitNode(node.argumentExpression, visitor, ts.isExpression));
             return thisArg ? factory.createSyntheticReferenceExpression(expression, thisArg) : expression;
@@ -91096,10 +93117,10 @@
         }
         function visitNonOptionalExpression(node, captureThisArg, isDelete) {
             switch (node.kind) {
-                case 208 /* ParenthesizedExpression */: return visitNonOptionalParenthesizedExpression(node, captureThisArg, isDelete);
-                case 202 /* PropertyAccessExpression */:
-                case 203 /* ElementAccessExpression */: return visitNonOptionalPropertyOrElementAccessExpression(node, captureThisArg, isDelete);
-                case 204 /* CallExpression */: return visitNonOptionalCallExpression(node, captureThisArg);
+                case 210 /* ParenthesizedExpression */: return visitNonOptionalParenthesizedExpression(node, captureThisArg, isDelete);
+                case 204 /* PropertyAccessExpression */:
+                case 205 /* ElementAccessExpression */: return visitNonOptionalPropertyOrElementAccessExpression(node, captureThisArg, isDelete);
+                case 206 /* CallExpression */: return visitNonOptionalCallExpression(node, captureThisArg);
                 default: return ts.visitNode(node, visitor, ts.isExpression);
             }
         }
@@ -91118,8 +93139,8 @@
             for (var i = 0; i < chain.length; i++) {
                 var segment = chain[i];
                 switch (segment.kind) {
-                    case 202 /* PropertyAccessExpression */:
-                    case 203 /* ElementAccessExpression */:
+                    case 204 /* PropertyAccessExpression */:
+                    case 205 /* ElementAccessExpression */:
                         if (i === chain.length - 1 && captureThisArg) {
                             if (!ts.isSimpleCopiableExpression(rightExpression)) {
                                 thisArg = factory.createTempVariable(hoistVariableDeclaration);
@@ -91129,13 +93150,13 @@
                                 thisArg = rightExpression;
                             }
                         }
-                        rightExpression = segment.kind === 202 /* PropertyAccessExpression */
+                        rightExpression = segment.kind === 204 /* PropertyAccessExpression */
                             ? factory.createPropertyAccessExpression(rightExpression, ts.visitNode(segment.name, visitor, ts.isIdentifier))
                             : factory.createElementAccessExpression(rightExpression, ts.visitNode(segment.argumentExpression, visitor, ts.isExpression));
                         break;
-                    case 204 /* CallExpression */:
+                    case 206 /* CallExpression */:
                         if (i === 0 && leftThisArg) {
-                            rightExpression = factory.createFunctionCallCall(rightExpression, leftThisArg.kind === 105 /* SuperKeyword */ ? factory.createThis() : leftThisArg, ts.visitNodes(segment.arguments, visitor, ts.isExpression));
+                            rightExpression = factory.createFunctionCallCall(rightExpression, leftThisArg.kind === 106 /* SuperKeyword */ ? factory.createThis() : leftThisArg, ts.visitNodes(segment.arguments, visitor, ts.isExpression));
                         }
                         else {
                             rightExpression = factory.createCallExpression(rightExpression, 
@@ -91190,7 +93211,7 @@
                 return node;
             }
             switch (node.kind) {
-                case 217 /* BinaryExpression */:
+                case 219 /* BinaryExpression */:
                     var binaryExpression = node;
                     if (ts.isLogicalOrCoalescingAssignmentExpression(binaryExpression)) {
                         return transformLogicalAssignment(binaryExpression);
@@ -91359,13 +93380,13 @@
         }
         function visitorWorker(node) {
             switch (node.kind) {
-                case 274 /* JsxElement */:
+                case 276 /* JsxElement */:
                     return visitJsxElement(node, /*isChild*/ false);
-                case 275 /* JsxSelfClosingElement */:
+                case 277 /* JsxSelfClosingElement */:
                     return visitJsxSelfClosingElement(node, /*isChild*/ false);
-                case 278 /* JsxFragment */:
+                case 280 /* JsxFragment */:
                     return visitJsxFragment(node, /*isChild*/ false);
-                case 284 /* JsxExpression */:
+                case 286 /* JsxExpression */:
                     return visitJsxExpression(node);
                 default:
                     return ts.visitEachChild(node, visitor, context);
@@ -91375,13 +93396,13 @@
             switch (node.kind) {
                 case 11 /* JsxText */:
                     return visitJsxText(node);
-                case 284 /* JsxExpression */:
+                case 286 /* JsxExpression */:
                     return visitJsxExpression(node);
-                case 274 /* JsxElement */:
+                case 276 /* JsxElement */:
                     return visitJsxElement(node, /*isChild*/ true);
-                case 275 /* JsxSelfClosingElement */:
+                case 277 /* JsxSelfClosingElement */:
                     return visitJsxSelfClosingElement(node, /*isChild*/ true);
-                case 278 /* JsxFragment */:
+                case 280 /* JsxFragment */:
                     return visitJsxFragment(node, /*isChild*/ true);
                 default:
                     return ts.Debug.failBadSyntaxKind(node);
@@ -91421,9 +93442,9 @@
         function convertJsxChildrenToChildrenPropObject(children) {
             var nonWhitespaceChildren = ts.getSemanticJsxChildren(children);
             if (ts.length(nonWhitespaceChildren) === 1) {
-                var result_14 = transformJsxChildToExpression(nonWhitespaceChildren[0]);
-                return result_14 && factory.createObjectLiteralExpression([
-                    factory.createPropertyAssignment("children", result_14)
+                var result_13 = transformJsxChildToExpression(nonWhitespaceChildren[0]);
+                return result_13 && factory.createObjectLiteralExpression([
+                    factory.createPropertyAssignment("children", result_13)
                 ]);
             }
             var result = ts.mapDefined(children, transformJsxChildToExpression);
@@ -91575,7 +93596,7 @@
                 var literal = factory.createStringLiteral(tryDecodeEntities(node.text) || node.text, singleQuote);
                 return ts.setTextRange(literal, node);
             }
-            else if (node.kind === 284 /* JsxExpression */) {
+            else if (node.kind === 286 /* JsxExpression */) {
                 if (node.expression === undefined) {
                     return factory.createTrue();
                 }
@@ -91669,7 +93690,7 @@
             return decoded === text ? undefined : decoded;
         }
         function getTagName(node) {
-            if (node.kind === 274 /* JsxElement */) {
+            if (node.kind === 276 /* JsxElement */) {
                 return getTagName(node.openingElement);
             }
             else {
@@ -91975,7 +93996,7 @@
                 return node;
             }
             switch (node.kind) {
-                case 217 /* BinaryExpression */:
+                case 219 /* BinaryExpression */:
                     return visitBinaryExpression(node);
                 default:
                     return ts.visitEachChild(node, visitor, context);
@@ -91983,7 +94004,7 @@
         }
         function visitBinaryExpression(node) {
             switch (node.operatorToken.kind) {
-                case 66 /* AsteriskAsteriskEqualsToken */:
+                case 67 /* AsteriskAsteriskEqualsToken */:
                     return visitExponentiationAssignmentExpression(node);
                 case 42 /* AsteriskAsteriskToken */:
                     return visitExponentiationExpression(node);
@@ -92072,12 +94093,13 @@
         HierarchyFacts[HierarchyFacts["ForStatement"] = 2048] = "ForStatement";
         HierarchyFacts[HierarchyFacts["ForInOrForOfStatement"] = 4096] = "ForInOrForOfStatement";
         HierarchyFacts[HierarchyFacts["ConstructorWithCapturedSuper"] = 8192] = "ConstructorWithCapturedSuper";
+        HierarchyFacts[HierarchyFacts["StaticInitializer"] = 16384] = "StaticInitializer";
         // NOTE: do not add more ancestor flags without also updating AncestorFactsMask below.
         // NOTE: when adding a new ancestor flag, be sure to update the subtree flags below.
         //
         // Ancestor masks
         //
-        HierarchyFacts[HierarchyFacts["AncestorFactsMask"] = 16383] = "AncestorFactsMask";
+        HierarchyFacts[HierarchyFacts["AncestorFactsMask"] = 32767] = "AncestorFactsMask";
         // We are always in *some* kind of block scope, but only specific block-scope containers are
         // top-level or Blocks.
         HierarchyFacts[HierarchyFacts["BlockScopeIncludes"] = 0] = "BlockScopeIncludes";
@@ -92087,16 +94109,16 @@
         HierarchyFacts[HierarchyFacts["SourceFileExcludes"] = 8064] = "SourceFileExcludes";
         // Functions, methods, and accessors are both new lexical scopes and new block scopes.
         HierarchyFacts[HierarchyFacts["FunctionIncludes"] = 65] = "FunctionIncludes";
-        HierarchyFacts[HierarchyFacts["FunctionExcludes"] = 16286] = "FunctionExcludes";
+        HierarchyFacts[HierarchyFacts["FunctionExcludes"] = 32670] = "FunctionExcludes";
         HierarchyFacts[HierarchyFacts["AsyncFunctionBodyIncludes"] = 69] = "AsyncFunctionBodyIncludes";
-        HierarchyFacts[HierarchyFacts["AsyncFunctionBodyExcludes"] = 16278] = "AsyncFunctionBodyExcludes";
+        HierarchyFacts[HierarchyFacts["AsyncFunctionBodyExcludes"] = 32662] = "AsyncFunctionBodyExcludes";
         // Arrow functions are lexically scoped to their container, but are new block scopes.
         HierarchyFacts[HierarchyFacts["ArrowFunctionIncludes"] = 66] = "ArrowFunctionIncludes";
         HierarchyFacts[HierarchyFacts["ArrowFunctionExcludes"] = 15232] = "ArrowFunctionExcludes";
         // Constructors are both new lexical scopes and new block scopes. Constructors are also
         // always considered non-static members of a class.
         HierarchyFacts[HierarchyFacts["ConstructorIncludes"] = 73] = "ConstructorIncludes";
-        HierarchyFacts[HierarchyFacts["ConstructorExcludes"] = 16278] = "ConstructorExcludes";
+        HierarchyFacts[HierarchyFacts["ConstructorExcludes"] = 32662] = "ConstructorExcludes";
         // 'do' and 'while' statements are not block scopes. We track that the subtree is contained
         // within an IterationStatement to indicate whether the embedded statement is an
         // IterationStatementBlock.
@@ -92114,18 +94136,29 @@
         HierarchyFacts[HierarchyFacts["BlockExcludes"] = 6976] = "BlockExcludes";
         HierarchyFacts[HierarchyFacts["IterationStatementBlockIncludes"] = 512] = "IterationStatementBlockIncludes";
         HierarchyFacts[HierarchyFacts["IterationStatementBlockExcludes"] = 7104] = "IterationStatementBlockExcludes";
+        HierarchyFacts[HierarchyFacts["StaticInitializerIncludes"] = 16449] = "StaticInitializerIncludes";
+        HierarchyFacts[HierarchyFacts["StaticInitializerExcludes"] = 32670] = "StaticInitializerExcludes";
         //
         // Subtree facts
         //
-        HierarchyFacts[HierarchyFacts["NewTarget"] = 16384] = "NewTarget";
-        HierarchyFacts[HierarchyFacts["CapturedLexicalThis"] = 32768] = "CapturedLexicalThis";
+        HierarchyFacts[HierarchyFacts["NewTarget"] = 32768] = "NewTarget";
+        HierarchyFacts[HierarchyFacts["CapturedLexicalThis"] = 65536] = "CapturedLexicalThis";
         //
         // Subtree masks
         //
-        HierarchyFacts[HierarchyFacts["SubtreeFactsMask"] = -16384] = "SubtreeFactsMask";
+        HierarchyFacts[HierarchyFacts["SubtreeFactsMask"] = -32768] = "SubtreeFactsMask";
         HierarchyFacts[HierarchyFacts["ArrowFunctionSubtreeExcludes"] = 0] = "ArrowFunctionSubtreeExcludes";
-        HierarchyFacts[HierarchyFacts["FunctionSubtreeExcludes"] = 49152] = "FunctionSubtreeExcludes";
+        HierarchyFacts[HierarchyFacts["FunctionSubtreeExcludes"] = 98304] = "FunctionSubtreeExcludes";
     })(HierarchyFacts || (HierarchyFacts = {}));
+    var SpreadSegmentKind;
+    (function (SpreadSegmentKind) {
+        SpreadSegmentKind[SpreadSegmentKind["None"] = 0] = "None";
+        SpreadSegmentKind[SpreadSegmentKind["UnpackedSpread"] = 1] = "UnpackedSpread";
+        SpreadSegmentKind[SpreadSegmentKind["PackedSpread"] = 2] = "PackedSpread";
+    })(SpreadSegmentKind || (SpreadSegmentKind = {}));
+    function createSpreadSegment(kind, expression) {
+        return { kind: kind, expression: expression };
+    }
     function transformES2015(context) {
         var factory = context.factory, emitHelpers = context.getEmitHelperFactory, startLexicalEnvironment = context.startLexicalEnvironment, resumeLexicalEnvironment = context.resumeLexicalEnvironment, endLexicalEnvironment = context.endLexicalEnvironment, hoistVariableDeclaration = context.hoistVariableDeclaration;
         var compilerOptions = context.getCompilerOptions();
@@ -92173,7 +94206,7 @@
          */
         function enterSubtree(excludeFacts, includeFacts) {
             var ancestorFacts = hierarchyFacts;
-            hierarchyFacts = (hierarchyFacts & ~excludeFacts | includeFacts) & 16383 /* AncestorFactsMask */;
+            hierarchyFacts = (hierarchyFacts & ~excludeFacts | includeFacts) & 32767 /* AncestorFactsMask */;
             return ancestorFacts;
         }
         /**
@@ -92184,11 +94217,11 @@
          * @param includeFacts The new `HierarchyFacts` of the subtree that should be propagated.
          */
         function exitSubtree(ancestorFacts, excludeFacts, includeFacts) {
-            hierarchyFacts = (hierarchyFacts & ~excludeFacts | includeFacts) & -16384 /* SubtreeFactsMask */ | ancestorFacts;
+            hierarchyFacts = (hierarchyFacts & ~excludeFacts | includeFacts) & -32768 /* SubtreeFactsMask */ | ancestorFacts;
         }
         function isReturnVoidStatementInConstructorWithCapturedSuper(node) {
             return (hierarchyFacts & 8192 /* ConstructorWithCapturedSuper */) !== 0
-                && node.kind === 243 /* ReturnStatement */
+                && node.kind === 245 /* ReturnStatement */
                 && !node.expression;
         }
         function isOrMayContainReturnCompletion(node) {
@@ -92219,75 +94252,88 @@
         function visitorWithUnusedExpressionResult(node) {
             return shouldVisitNode(node) ? visitorWorker(node, /*expressionResultIsUnused*/ true) : node;
         }
+        function classWrapperStatementVisitor(node) {
+            if (shouldVisitNode(node)) {
+                var original = ts.getOriginalNode(node);
+                if (ts.isPropertyDeclaration(original) && ts.hasStaticModifier(original)) {
+                    var ancestorFacts = enterSubtree(32670 /* StaticInitializerExcludes */, 16449 /* StaticInitializerIncludes */);
+                    var result = visitorWorker(node, /*expressionResultIsUnused*/ false);
+                    exitSubtree(ancestorFacts, 98304 /* FunctionSubtreeExcludes */, 0 /* None */);
+                    return result;
+                }
+                return visitorWorker(node, /*expressionResultIsUnused*/ false);
+            }
+            return node;
+        }
         function callExpressionVisitor(node) {
-            if (node.kind === 105 /* SuperKeyword */) {
+            if (node.kind === 106 /* SuperKeyword */) {
                 return visitSuperKeyword(/*isExpressionOfCall*/ true);
             }
             return visitor(node);
         }
         function visitorWorker(node, expressionResultIsUnused) {
             switch (node.kind) {
-                case 123 /* StaticKeyword */:
+                case 124 /* StaticKeyword */:
                     return undefined; // elide static keyword
-                case 253 /* ClassDeclaration */:
+                case 255 /* ClassDeclaration */:
                     return visitClassDeclaration(node);
-                case 222 /* ClassExpression */:
+                case 224 /* ClassExpression */:
                     return visitClassExpression(node);
-                case 161 /* Parameter */:
+                case 162 /* Parameter */:
                     return visitParameter(node);
-                case 252 /* FunctionDeclaration */:
+                case 254 /* FunctionDeclaration */:
                     return visitFunctionDeclaration(node);
-                case 210 /* ArrowFunction */:
+                case 212 /* ArrowFunction */:
                     return visitArrowFunction(node);
-                case 209 /* FunctionExpression */:
+                case 211 /* FunctionExpression */:
                     return visitFunctionExpression(node);
-                case 250 /* VariableDeclaration */:
+                case 252 /* VariableDeclaration */:
                     return visitVariableDeclaration(node);
-                case 78 /* Identifier */:
+                case 79 /* Identifier */:
                     return visitIdentifier(node);
-                case 251 /* VariableDeclarationList */:
+                case 253 /* VariableDeclarationList */:
                     return visitVariableDeclarationList(node);
-                case 245 /* SwitchStatement */:
+                case 247 /* SwitchStatement */:
                     return visitSwitchStatement(node);
-                case 259 /* CaseBlock */:
+                case 261 /* CaseBlock */:
                     return visitCaseBlock(node);
-                case 231 /* Block */:
+                case 233 /* Block */:
                     return visitBlock(node, /*isFunctionBody*/ false);
-                case 242 /* BreakStatement */:
-                case 241 /* ContinueStatement */:
+                case 244 /* BreakStatement */:
+                case 243 /* ContinueStatement */:
                     return visitBreakOrContinueStatement(node);
-                case 246 /* LabeledStatement */:
+                case 248 /* LabeledStatement */:
                     return visitLabeledStatement(node);
-                case 236 /* DoStatement */:
-                case 237 /* WhileStatement */:
+                case 238 /* DoStatement */:
+                case 239 /* WhileStatement */:
                     return visitDoOrWhileStatement(node, /*outermostLabeledStatement*/ undefined);
-                case 238 /* ForStatement */:
+                case 240 /* ForStatement */:
                     return visitForStatement(node, /*outermostLabeledStatement*/ undefined);
-                case 239 /* ForInStatement */:
+                case 241 /* ForInStatement */:
                     return visitForInStatement(node, /*outermostLabeledStatement*/ undefined);
-                case 240 /* ForOfStatement */:
+                case 242 /* ForOfStatement */:
                     return visitForOfStatement(node, /*outermostLabeledStatement*/ undefined);
-                case 234 /* ExpressionStatement */:
+                case 236 /* ExpressionStatement */:
                     return visitExpressionStatement(node);
-                case 201 /* ObjectLiteralExpression */:
+                case 203 /* ObjectLiteralExpression */:
                     return visitObjectLiteralExpression(node);
-                case 288 /* CatchClause */:
+                case 290 /* CatchClause */:
                     return visitCatchClause(node);
-                case 290 /* ShorthandPropertyAssignment */:
+                case 292 /* ShorthandPropertyAssignment */:
                     return visitShorthandPropertyAssignment(node);
-                case 159 /* ComputedPropertyName */:
+                case 160 /* ComputedPropertyName */:
                     return visitComputedPropertyName(node);
-                case 200 /* ArrayLiteralExpression */:
+                case 202 /* ArrayLiteralExpression */:
                     return visitArrayLiteralExpression(node);
-                case 204 /* CallExpression */:
+                case 206 /* CallExpression */:
                     return visitCallExpression(node);
-                case 205 /* NewExpression */:
+                case 207 /* NewExpression */:
                     return visitNewExpression(node);
-                case 208 /* ParenthesizedExpression */:
+                case 210 /* ParenthesizedExpression */:
                     return visitParenthesizedExpression(node, expressionResultIsUnused);
-                case 217 /* BinaryExpression */:
+                case 219 /* BinaryExpression */:
                     return visitBinaryExpression(node, expressionResultIsUnused);
-                case 341 /* CommaListExpression */:
+                case 346 /* CommaListExpression */:
                     return visitCommaListExpression(node, expressionResultIsUnused);
                 case 14 /* NoSubstitutionTemplateLiteral */:
                 case 15 /* TemplateHead */:
@@ -92298,30 +94344,30 @@
                     return visitStringLiteral(node);
                 case 8 /* NumericLiteral */:
                     return visitNumericLiteral(node);
-                case 206 /* TaggedTemplateExpression */:
+                case 208 /* TaggedTemplateExpression */:
                     return visitTaggedTemplateExpression(node);
-                case 219 /* TemplateExpression */:
+                case 221 /* TemplateExpression */:
                     return visitTemplateExpression(node);
-                case 220 /* YieldExpression */:
+                case 222 /* YieldExpression */:
                     return visitYieldExpression(node);
-                case 221 /* SpreadElement */:
+                case 223 /* SpreadElement */:
                     return visitSpreadElement(node);
-                case 105 /* SuperKeyword */:
+                case 106 /* SuperKeyword */:
                     return visitSuperKeyword(/*isExpressionOfCall*/ false);
-                case 107 /* ThisKeyword */:
+                case 108 /* ThisKeyword */:
                     return visitThisKeyword(node);
-                case 227 /* MetaProperty */:
+                case 229 /* MetaProperty */:
                     return visitMetaProperty(node);
-                case 166 /* MethodDeclaration */:
+                case 167 /* MethodDeclaration */:
                     return visitMethodDeclaration(node);
-                case 168 /* GetAccessor */:
-                case 169 /* SetAccessor */:
+                case 170 /* GetAccessor */:
+                case 171 /* SetAccessor */:
                     return visitAccessorDeclaration(node);
-                case 233 /* VariableStatement */:
+                case 235 /* VariableStatement */:
                     return visitVariableStatement(node);
-                case 243 /* ReturnStatement */:
+                case 245 /* ReturnStatement */:
                     return visitReturnStatement(node);
-                case 213 /* VoidExpression */:
+                case 215 /* VoidExpression */:
                     return visitVoidExpression(node);
                 default:
                     return ts.visitEachChild(node, visitor, context);
@@ -92380,8 +94426,8 @@
             return ts.visitEachChild(node, visitor, context);
         }
         function visitThisKeyword(node) {
-            if (hierarchyFacts & 2 /* ArrowFunction */) {
-                hierarchyFacts |= 32768 /* CapturedLexicalThis */;
+            if (hierarchyFacts & 2 /* ArrowFunction */ && !(hierarchyFacts & 16384 /* StaticInitializer */)) {
+                hierarchyFacts |= 65536 /* CapturedLexicalThis */;
             }
             if (convertedLoopState) {
                 if (hierarchyFacts & 2 /* ArrowFunction */) {
@@ -92411,14 +94457,14 @@
                 // it is possible if either
                 //   - break/continue is labeled and label is located inside the converted loop
                 //   - break/continue is non-labeled and located in non-converted loop/switch statement
-                var jump = node.kind === 242 /* BreakStatement */ ? 2 /* Break */ : 4 /* Continue */;
+                var jump = node.kind === 244 /* BreakStatement */ ? 2 /* Break */ : 4 /* Continue */;
                 var canUseBreakOrContinue = (node.label && convertedLoopState.labels && convertedLoopState.labels.get(ts.idText(node.label))) ||
                     (!node.label && (convertedLoopState.allowedNonLabeledJumps & jump));
                 if (!canUseBreakOrContinue) {
                     var labelMarker = void 0;
                     var label = node.label;
                     if (!label) {
-                        if (node.kind === 242 /* BreakStatement */) {
+                        if (node.kind === 244 /* BreakStatement */) {
                             convertedLoopState.nonLocalJumps |= 2 /* Break */;
                             labelMarker = "break";
                         }
@@ -92429,7 +94475,7 @@
                         }
                     }
                     else {
-                        if (node.kind === 242 /* BreakStatement */) {
+                        if (node.kind === 244 /* BreakStatement */) {
                             labelMarker = "break-" + label.escapedText;
                             setLabeledJump(convertedLoopState, /*isBreak*/ true, ts.idText(label), labelMarker);
                         }
@@ -92626,7 +94672,7 @@
         function addConstructor(statements, node, name, extendsClauseElement) {
             var savedConvertedLoopState = convertedLoopState;
             convertedLoopState = undefined;
-            var ancestorFacts = enterSubtree(16278 /* ConstructorExcludes */, 73 /* ConstructorIncludes */);
+            var ancestorFacts = enterSubtree(32662 /* ConstructorExcludes */, 73 /* ConstructorIncludes */);
             var constructor = ts.getFirstConstructorWithBody(node);
             var hasSynthesizedSuper = hasSynthesizedDefaultSuperCall(constructor, extendsClauseElement !== undefined);
             var constructorFunction = factory.createFunctionDeclaration(
@@ -92640,7 +94686,7 @@
                 ts.setEmitFlags(constructorFunction, 8 /* CapturesThis */);
             }
             statements.push(constructorFunction);
-            exitSubtree(ancestorFacts, 49152 /* FunctionSubtreeExcludes */, 0 /* None */);
+            exitSubtree(ancestorFacts, 98304 /* FunctionSubtreeExcludes */, 0 /* None */);
             convertedLoopState = savedConvertedLoopState;
         }
         /**
@@ -92689,7 +94735,7 @@
         function transformConstructorBody(constructor, node, extendsClauseElement, hasSynthesizedSuper) {
             // determine whether the class is known syntactically to be a derived class (e.g. a
             // class that extends a value that is not syntactically known to be `null`).
-            var isDerivedClass = !!extendsClauseElement && ts.skipOuterExpressions(extendsClauseElement.expression).kind !== 103 /* NullKeyword */;
+            var isDerivedClass = !!extendsClauseElement && ts.skipOuterExpressions(extendsClauseElement.expression).kind !== 104 /* NullKeyword */;
             // When the subclass does not have a constructor, we synthesize a *default* constructor using the following
             // representation:
             //
@@ -92827,11 +94873,11 @@
          */
         function isSufficientlyCoveredByReturnStatements(statement) {
             // A return statement is considered covered.
-            if (statement.kind === 243 /* ReturnStatement */) {
+            if (statement.kind === 245 /* ReturnStatement */) {
                 return true;
             }
             // An if-statement with two covered branches is covered.
-            else if (statement.kind === 235 /* IfStatement */) {
+            else if (statement.kind === 237 /* IfStatement */) {
                 var ifStatement = statement;
                 if (ifStatement.elseStatement) {
                     return isSufficientlyCoveredByReturnStatements(ifStatement.thenStatement) &&
@@ -92839,7 +94885,7 @@
                 }
             }
             // A block is covered if it has a last statement which is covered.
-            else if (statement.kind === 231 /* Block */) {
+            else if (statement.kind === 233 /* Block */) {
                 var lastStatement = ts.lastOrUndefined(statement.statements);
                 if (lastStatement && isSufficientlyCoveredByReturnStatements(lastStatement)) {
                     return true;
@@ -92997,10 +95043,10 @@
             }
             // `declarationName` is the name of the local declaration for the parameter.
             // TODO(rbuckton): Does this need to be parented?
-            var declarationName = parameter.name.kind === 78 /* Identifier */ ? ts.setParent(ts.setTextRange(factory.cloneNode(parameter.name), parameter.name), parameter.name.parent) : factory.createTempVariable(/*recordTempVariable*/ undefined);
+            var declarationName = parameter.name.kind === 79 /* Identifier */ ? ts.setParent(ts.setTextRange(factory.cloneNode(parameter.name), parameter.name), parameter.name.parent) : factory.createTempVariable(/*recordTempVariable*/ undefined);
             ts.setEmitFlags(declarationName, 48 /* NoSourceMap */);
             // `expressionName` is the name of the parameter used in expressions.
-            var expressionName = parameter.name.kind === 78 /* Identifier */ ? factory.cloneNode(parameter.name) : declarationName;
+            var expressionName = parameter.name.kind === 79 /* Identifier */ ? factory.cloneNode(parameter.name) : declarationName;
             var restIndex = node.parameters.length - 1;
             var temp = factory.createLoopVariable();
             // var param = [];
@@ -93025,7 +95071,7 @@
             ts.setEmitFlags(forStatement, 1048576 /* CustomPrologue */);
             ts.startOnNewLine(forStatement);
             prologueStatements.push(forStatement);
-            if (parameter.name.kind !== 78 /* Identifier */) {
+            if (parameter.name.kind !== 79 /* Identifier */) {
                 // do the actual destructuring of the rest parameter if necessary
                 prologueStatements.push(ts.setEmitFlags(ts.setTextRange(factory.createVariableStatement(
                 /*modifiers*/ undefined, factory.createVariableDeclarationList(ts.flattenDestructuringBinding(parameter, visitor, context, 0 /* All */, expressionName))), parameter), 1048576 /* CustomPrologue */));
@@ -93041,7 +95087,7 @@
          * @param node A node.
          */
         function insertCaptureThisForNodeIfNeeded(statements, node) {
-            if (hierarchyFacts & 32768 /* CapturedLexicalThis */ && node.kind !== 210 /* ArrowFunction */) {
+            if (hierarchyFacts & 65536 /* CapturedLexicalThis */ && node.kind !== 212 /* ArrowFunction */) {
                 insertCaptureThisForNode(statements, node, factory.createThis());
                 return true;
             }
@@ -93060,28 +95106,28 @@
             ts.insertStatementAfterCustomPrologue(statements, captureThisStatement);
         }
         function insertCaptureNewTargetIfNeeded(statements, node, copyOnWrite) {
-            if (hierarchyFacts & 16384 /* NewTarget */) {
+            if (hierarchyFacts & 32768 /* NewTarget */) {
                 var newTarget = void 0;
                 switch (node.kind) {
-                    case 210 /* ArrowFunction */:
+                    case 212 /* ArrowFunction */:
                         return statements;
-                    case 166 /* MethodDeclaration */:
-                    case 168 /* GetAccessor */:
-                    case 169 /* SetAccessor */:
+                    case 167 /* MethodDeclaration */:
+                    case 170 /* GetAccessor */:
+                    case 171 /* SetAccessor */:
                         // Methods and accessors cannot be constructors, so 'new.target' will
                         // always return 'undefined'.
                         newTarget = factory.createVoidZero();
                         break;
-                    case 167 /* Constructor */:
+                    case 169 /* Constructor */:
                         // Class constructors can only be called with `new`, so `this.constructor`
                         // should be relatively safe to use.
                         newTarget = factory.createPropertyAccessExpression(ts.setEmitFlags(factory.createThis(), 4 /* NoSubstitution */), "constructor");
                         break;
-                    case 252 /* FunctionDeclaration */:
-                    case 209 /* FunctionExpression */:
+                    case 254 /* FunctionDeclaration */:
+                    case 211 /* FunctionExpression */:
                         // Functions can be called or constructed, and may have a `this` due to
                         // being a member or when calling an imported function via `other_1.f()`.
-                        newTarget = factory.createConditionalExpression(factory.createLogicalAnd(ts.setEmitFlags(factory.createThis(), 4 /* NoSubstitution */), factory.createBinaryExpression(ts.setEmitFlags(factory.createThis(), 4 /* NoSubstitution */), 101 /* InstanceOfKeyword */, factory.getLocalName(node))), 
+                        newTarget = factory.createConditionalExpression(factory.createLogicalAnd(ts.setEmitFlags(factory.createThis(), 4 /* NoSubstitution */), factory.createBinaryExpression(ts.setEmitFlags(factory.createThis(), 4 /* NoSubstitution */), 102 /* InstanceOfKeyword */, factory.getLocalName(node))), 
                         /*questionToken*/ undefined, factory.createPropertyAccessExpression(ts.setEmitFlags(factory.createThis(), 4 /* NoSubstitution */), "constructor"), 
                         /*colonToken*/ undefined, factory.createVoidZero());
                         break;
@@ -93113,20 +95159,21 @@
             for (var _i = 0, _a = node.members; _i < _a.length; _i++) {
                 var member = _a[_i];
                 switch (member.kind) {
-                    case 230 /* SemicolonClassElement */:
+                    case 232 /* SemicolonClassElement */:
                         statements.push(transformSemicolonClassElementToStatement(member));
                         break;
-                    case 166 /* MethodDeclaration */:
+                    case 167 /* MethodDeclaration */:
                         statements.push(transformClassMethodDeclarationToStatement(getClassMemberPrefix(node, member), member, node));
                         break;
-                    case 168 /* GetAccessor */:
-                    case 169 /* SetAccessor */:
+                    case 170 /* GetAccessor */:
+                    case 171 /* SetAccessor */:
                         var accessors = ts.getAllAccessorDeclarations(node.members, member);
                         if (member === accessors.firstAccessor) {
                             statements.push(transformAccessorsToStatement(getClassMemberPrefix(node, member), accessors, node));
                         }
                         break;
-                    case 167 /* Constructor */:
+                    case 169 /* Constructor */:
+                    case 168 /* ClassStaticBlockDeclaration */:
                         // Constructors are handled in visitClassExpression/visitClassDeclaration
                         break;
                     default:
@@ -93247,8 +95294,8 @@
          * @param node An ArrowFunction node.
          */
         function visitArrowFunction(node) {
-            if (node.transformFlags & 8192 /* ContainsLexicalThis */) {
-                hierarchyFacts |= 32768 /* CapturedLexicalThis */;
+            if (node.transformFlags & 8192 /* ContainsLexicalThis */ && !(hierarchyFacts & 16384 /* StaticInitializer */)) {
+                hierarchyFacts |= 65536 /* CapturedLexicalThis */;
             }
             var savedConvertedLoopState = convertedLoopState;
             convertedLoopState = undefined;
@@ -93262,9 +95309,6 @@
             ts.setTextRange(func, node);
             ts.setOriginalNode(func, node);
             ts.setEmitFlags(func, 8 /* CapturesThis */);
-            if (hierarchyFacts & 32768 /* CapturedLexicalThis */) {
-                enableSubstitutionsForCapturedThis();
-            }
             // If an arrow function contains
             exitSubtree(ancestorFacts, 0 /* ArrowFunctionSubtreeExcludes */, 0 /* None */);
             convertedLoopState = savedConvertedLoopState;
@@ -93277,16 +95321,16 @@
          */
         function visitFunctionExpression(node) {
             var ancestorFacts = ts.getEmitFlags(node) & 262144 /* AsyncFunctionBody */
-                ? enterSubtree(16278 /* AsyncFunctionBodyExcludes */, 69 /* AsyncFunctionBodyIncludes */)
-                : enterSubtree(16286 /* FunctionExcludes */, 65 /* FunctionIncludes */);
+                ? enterSubtree(32662 /* AsyncFunctionBodyExcludes */, 69 /* AsyncFunctionBodyIncludes */)
+                : enterSubtree(32670 /* FunctionExcludes */, 65 /* FunctionIncludes */);
             var savedConvertedLoopState = convertedLoopState;
             convertedLoopState = undefined;
             var parameters = ts.visitParameterList(node.parameters, visitor, context);
             var body = transformFunctionBody(node);
-            var name = hierarchyFacts & 16384 /* NewTarget */
+            var name = hierarchyFacts & 32768 /* NewTarget */
                 ? factory.getLocalName(node)
                 : node.name;
-            exitSubtree(ancestorFacts, 49152 /* FunctionSubtreeExcludes */, 0 /* None */);
+            exitSubtree(ancestorFacts, 98304 /* FunctionSubtreeExcludes */, 0 /* None */);
             convertedLoopState = savedConvertedLoopState;
             return factory.updateFunctionExpression(node, 
             /*modifiers*/ undefined, node.asteriskToken, name, 
@@ -93301,13 +95345,13 @@
         function visitFunctionDeclaration(node) {
             var savedConvertedLoopState = convertedLoopState;
             convertedLoopState = undefined;
-            var ancestorFacts = enterSubtree(16286 /* FunctionExcludes */, 65 /* FunctionIncludes */);
+            var ancestorFacts = enterSubtree(32670 /* FunctionExcludes */, 65 /* FunctionIncludes */);
             var parameters = ts.visitParameterList(node.parameters, visitor, context);
             var body = transformFunctionBody(node);
-            var name = hierarchyFacts & 16384 /* NewTarget */
+            var name = hierarchyFacts & 32768 /* NewTarget */
                 ? factory.getLocalName(node)
                 : node.name;
-            exitSubtree(ancestorFacts, 49152 /* FunctionSubtreeExcludes */, 0 /* None */);
+            exitSubtree(ancestorFacts, 98304 /* FunctionSubtreeExcludes */, 0 /* None */);
             convertedLoopState = savedConvertedLoopState;
             return factory.updateFunctionDeclaration(node, 
             /*decorators*/ undefined, ts.visitNodes(node.modifiers, visitor, ts.isModifier), node.asteriskToken, name, 
@@ -93324,15 +95368,15 @@
         function transformFunctionLikeToExpression(node, location, name, container) {
             var savedConvertedLoopState = convertedLoopState;
             convertedLoopState = undefined;
-            var ancestorFacts = container && ts.isClassLike(container) && !ts.hasSyntacticModifier(node, 32 /* Static */)
-                ? enterSubtree(16286 /* FunctionExcludes */, 65 /* FunctionIncludes */ | 8 /* NonStaticClassElement */)
-                : enterSubtree(16286 /* FunctionExcludes */, 65 /* FunctionIncludes */);
+            var ancestorFacts = container && ts.isClassLike(container) && !ts.isStatic(node)
+                ? enterSubtree(32670 /* FunctionExcludes */, 65 /* FunctionIncludes */ | 8 /* NonStaticClassElement */)
+                : enterSubtree(32670 /* FunctionExcludes */, 65 /* FunctionIncludes */);
             var parameters = ts.visitParameterList(node.parameters, visitor, context);
             var body = transformFunctionBody(node);
-            if (hierarchyFacts & 16384 /* NewTarget */ && !name && (node.kind === 252 /* FunctionDeclaration */ || node.kind === 209 /* FunctionExpression */)) {
+            if (hierarchyFacts & 32768 /* NewTarget */ && !name && (node.kind === 254 /* FunctionDeclaration */ || node.kind === 211 /* FunctionExpression */)) {
                 name = factory.getGeneratedNameForNode(node);
             }
-            exitSubtree(ancestorFacts, 49152 /* FunctionSubtreeExcludes */, 0 /* None */);
+            exitSubtree(ancestorFacts, 98304 /* FunctionSubtreeExcludes */, 0 /* None */);
             convertedLoopState = savedConvertedLoopState;
             return ts.setOriginalNode(ts.setTextRange(factory.createFunctionExpression(
             /*modifiers*/ undefined, node.asteriskToken, name, 
@@ -93375,7 +95419,7 @@
                 }
             }
             else {
-                ts.Debug.assert(node.kind === 210 /* ArrowFunction */);
+                ts.Debug.assert(node.kind === 212 /* ArrowFunction */);
                 // To align with the old emitter, we use a synthetic end position on the location
                 // for the statement list we synthesize when we down-level an arrow function with
                 // an expression function body. This prevents both comments and source maps from
@@ -93510,7 +95554,7 @@
                             assignment = ts.flattenDestructuringAssignment(decl, visitor, context, 0 /* All */);
                         }
                         else {
-                            assignment = factory.createBinaryExpression(decl.name, 62 /* EqualsToken */, ts.visitNode(decl.initializer, visitor, ts.isExpression));
+                            assignment = factory.createBinaryExpression(decl.name, 63 /* EqualsToken */, ts.visitNode(decl.initializer, visitor, ts.isExpression));
                             ts.setTextRange(assignment, decl);
                         }
                         assignments = ts.append(assignments, assignment);
@@ -93682,14 +95726,14 @@
         }
         function visitIterationStatement(node, outermostLabeledStatement) {
             switch (node.kind) {
-                case 236 /* DoStatement */:
-                case 237 /* WhileStatement */:
+                case 238 /* DoStatement */:
+                case 239 /* WhileStatement */:
                     return visitDoOrWhileStatement(node, outermostLabeledStatement);
-                case 238 /* ForStatement */:
+                case 240 /* ForStatement */:
                     return visitForStatement(node, outermostLabeledStatement);
-                case 239 /* ForInStatement */:
+                case 241 /* ForInStatement */:
                     return visitForInStatement(node, outermostLabeledStatement);
-                case 240 /* ForOfStatement */:
+                case 242 /* ForOfStatement */:
                     return visitForOfStatement(node, outermostLabeledStatement);
             }
         }
@@ -93875,7 +95919,7 @@
                 var property = properties[i];
                 if ((property.transformFlags & 524288 /* ContainsYield */ &&
                     hierarchyFacts & 4 /* AsyncFunctionBody */)
-                    || (hasComputed = ts.Debug.checkDefined(property.name).kind === 159 /* ComputedPropertyName */)) {
+                    || (hasComputed = ts.Debug.checkDefined(property.name).kind === 160 /* ComputedPropertyName */)) {
                     numInitialProperties = i;
                     break;
                 }
@@ -93927,7 +95971,7 @@
             }
             visit(node.name);
             function visit(node) {
-                if (node.kind === 78 /* Identifier */) {
+                if (node.kind === 79 /* Identifier */) {
                     state.hoistedLocalVariables.push(node);
                 }
                 else {
@@ -93991,11 +96035,11 @@
         }
         function convertIterationStatementCore(node, initializerFunction, convertedLoopBody) {
             switch (node.kind) {
-                case 238 /* ForStatement */: return convertForStatement(node, initializerFunction, convertedLoopBody);
-                case 239 /* ForInStatement */: return convertForInStatement(node, convertedLoopBody);
-                case 240 /* ForOfStatement */: return convertForOfStatement(node, convertedLoopBody);
-                case 236 /* DoStatement */: return convertDoStatement(node, convertedLoopBody);
-                case 237 /* WhileStatement */: return convertWhileStatement(node, convertedLoopBody);
+                case 240 /* ForStatement */: return convertForStatement(node, initializerFunction, convertedLoopBody);
+                case 241 /* ForInStatement */: return convertForInStatement(node, convertedLoopBody);
+                case 242 /* ForOfStatement */: return convertForOfStatement(node, convertedLoopBody);
+                case 238 /* DoStatement */: return convertDoStatement(node, convertedLoopBody);
+                case 239 /* WhileStatement */: return convertWhileStatement(node, convertedLoopBody);
                 default: return ts.Debug.failBadSyntaxKind(node, "IterationStatement expected");
             }
         }
@@ -94020,11 +96064,11 @@
         function createConvertedLoopState(node) {
             var loopInitializer;
             switch (node.kind) {
-                case 238 /* ForStatement */:
-                case 239 /* ForInStatement */:
-                case 240 /* ForOfStatement */:
+                case 240 /* ForStatement */:
+                case 241 /* ForInStatement */:
+                case 242 /* ForOfStatement */:
                     var initializer = node.initializer;
-                    if (initializer && initializer.kind === 251 /* VariableDeclarationList */) {
+                    if (initializer && initializer.kind === 253 /* VariableDeclarationList */) {
                         loopInitializer = initializer;
                     }
                     break;
@@ -94295,7 +96339,7 @@
         function copyOutParameter(outParam, copyDirection) {
             var source = copyDirection === 0 /* ToOriginal */ ? outParam.outParamName : outParam.originalName;
             var target = copyDirection === 0 /* ToOriginal */ ? outParam.originalName : outParam.outParamName;
-            return factory.createBinaryExpression(target, 62 /* EqualsToken */, source);
+            return factory.createBinaryExpression(target, 63 /* EqualsToken */, source);
         }
         function copyOutParameters(outParams, partFlags, copyDirection, statements) {
             for (var _i = 0, outParams_1 = outParams; _i < outParams_1.length; _i++) {
@@ -94432,20 +96476,20 @@
             for (var i = start; i < numProperties; i++) {
                 var property = properties[i];
                 switch (property.kind) {
-                    case 168 /* GetAccessor */:
-                    case 169 /* SetAccessor */:
+                    case 170 /* GetAccessor */:
+                    case 171 /* SetAccessor */:
                         var accessors = ts.getAllAccessorDeclarations(node.properties, property);
                         if (property === accessors.firstAccessor) {
                             expressions.push(transformAccessorsToExpression(receiver, accessors, node, !!node.multiLine));
                         }
                         break;
-                    case 166 /* MethodDeclaration */:
+                    case 167 /* MethodDeclaration */:
                         expressions.push(transformObjectLiteralMethodDeclarationToExpression(property, receiver, node, node.multiLine));
                         break;
-                    case 289 /* PropertyAssignment */:
+                    case 291 /* PropertyAssignment */:
                         expressions.push(transformPropertyAssignmentToExpression(property, receiver, node.multiLine));
                         break;
-                    case 290 /* ShorthandPropertyAssignment */:
+                    case 292 /* ShorthandPropertyAssignment */:
                         expressions.push(transformShorthandPropertyAssignmentToExpression(property, receiver, node.multiLine));
                         break;
                     default:
@@ -94521,7 +96565,7 @@
         }
         function addStatementToStartOfBlock(block, statement) {
             var transformedStatements = ts.visitNodes(block.statements, visitor, ts.isStatement);
-            return factory.updateBlock(block, __spreadArray([statement], transformedStatements));
+            return factory.updateBlock(block, __spreadArray([statement], transformedStatements, true));
         }
         /**
          * Visits a MethodDeclaration of an ObjectLiteralExpression and transforms it into a
@@ -94548,17 +96592,17 @@
             ts.Debug.assert(!ts.isComputedPropertyName(node.name));
             var savedConvertedLoopState = convertedLoopState;
             convertedLoopState = undefined;
-            var ancestorFacts = enterSubtree(16286 /* FunctionExcludes */, 65 /* FunctionIncludes */);
+            var ancestorFacts = enterSubtree(32670 /* FunctionExcludes */, 65 /* FunctionIncludes */);
             var updated;
             var parameters = ts.visitParameterList(node.parameters, visitor, context);
             var body = transformFunctionBody(node);
-            if (node.kind === 168 /* GetAccessor */) {
+            if (node.kind === 170 /* GetAccessor */) {
                 updated = factory.updateGetAccessorDeclaration(node, node.decorators, node.modifiers, node.name, parameters, node.type, body);
             }
             else {
                 updated = factory.updateSetAccessorDeclaration(node, node.decorators, node.modifiers, node.name, parameters, body);
             }
-            exitSubtree(ancestorFacts, 49152 /* FunctionSubtreeExcludes */, 0 /* None */);
+            exitSubtree(ancestorFacts, 98304 /* FunctionSubtreeExcludes */, 0 /* None */);
             convertedLoopState = savedConvertedLoopState;
             return updated;
         }
@@ -94591,7 +96635,7 @@
         function visitArrayLiteralExpression(node) {
             if (ts.some(node.elements, ts.isSpreadElement)) {
                 // We are here because we contain a SpreadElementExpression.
-                return transformAndSpreadElements(node.elements, /*needsUniqueCopy*/ true, !!node.multiLine, /*hasTrailingComma*/ !!node.elements.hasTrailingComma);
+                return transformAndSpreadElements(node.elements, /*isArgumentList*/ false, !!node.multiLine, /*hasTrailingComma*/ !!node.elements.hasTrailingComma);
             }
             return ts.visitEachChild(node, visitor, context);
         }
@@ -94605,7 +96649,7 @@
                 return visitTypeScriptClassWrapper(node);
             }
             var expression = ts.skipOuterExpressions(node.expression);
-            if (expression.kind === 105 /* SuperKeyword */ ||
+            if (expression.kind === 106 /* SuperKeyword */ ||
                 ts.isSuperProperty(expression) ||
                 ts.some(node.arguments, ts.isSpreadElement)) {
                 return visitCallExpressionWithPotentialCapturedThisAssignment(node, /*assignToCapturedThis*/ true);
@@ -94653,7 +96697,7 @@
             // visit the class body statements outside of any converted loop body.
             var savedConvertedLoopState = convertedLoopState;
             convertedLoopState = undefined;
-            var bodyStatements = ts.visitNodes(body.statements, visitor, ts.isStatement);
+            var bodyStatements = ts.visitNodes(body.statements, classWrapperStatementVisitor, ts.isStatement);
             convertedLoopState = savedConvertedLoopState;
             var classStatements = ts.filter(bodyStatements, isVariableStatementWithInitializer);
             var remainingStatements = ts.filter(bodyStatements, function (stmt) { return !isVariableStatementWithInitializer(stmt); });
@@ -94678,6 +96722,9 @@
             //  }())
             //
             var aliasAssignment = ts.tryCast(initializer, ts.isAssignmentExpression);
+            if (!aliasAssignment && ts.isBinaryExpression(initializer) && initializer.operatorToken.kind === 27 /* CommaToken */) {
+                aliasAssignment = ts.tryCast(initializer.left, ts.isAssignmentExpression);
+            }
             // The underlying call (3) is another IIFE that may contain a '_super' argument.
             var call = ts.cast(aliasAssignment ? ts.skipOuterExpressions(aliasAssignment.right) : initializer, ts.isCallExpression);
             var func = ts.cast(ts.skipOuterExpressions(call.expression), ts.isFunctionExpression);
@@ -94733,10 +96780,10 @@
             // We are here either because SuperKeyword was used somewhere in the expression, or
             // because we contain a SpreadElementExpression.
             if (node.transformFlags & 16384 /* ContainsRestOrSpread */ ||
-                node.expression.kind === 105 /* SuperKeyword */ ||
+                node.expression.kind === 106 /* SuperKeyword */ ||
                 ts.isSuperProperty(ts.skipOuterExpressions(node.expression))) {
                 var _a = factory.createCallBinding(node.expression, hoistVariableDeclaration), target = _a.target, thisArg = _a.thisArg;
-                if (node.expression.kind === 105 /* SuperKeyword */) {
+                if (node.expression.kind === 106 /* SuperKeyword */) {
                     ts.setEmitFlags(thisArg, 4 /* NoSubstitution */);
                 }
                 var resultingCall = void 0;
@@ -94754,7 +96801,7 @@
                     //      _super.apply(this, a.concat([b]))
                     //      _super.m.apply(this, a.concat([b]))
                     //      _super.prototype.m.apply(this, a.concat([b]))
-                    resultingCall = factory.createFunctionApplyCall(ts.visitNode(target, callExpressionVisitor, ts.isExpression), node.expression.kind === 105 /* SuperKeyword */ ? thisArg : ts.visitNode(thisArg, visitor, ts.isExpression), transformAndSpreadElements(node.arguments, /*needsUniqueCopy*/ false, /*multiLine*/ false, /*hasTrailingComma*/ false));
+                    resultingCall = factory.createFunctionApplyCall(ts.visitNode(target, callExpressionVisitor, ts.isExpression), node.expression.kind === 106 /* SuperKeyword */ ? thisArg : ts.visitNode(thisArg, visitor, ts.isExpression), transformAndSpreadElements(node.arguments, /*isArgumentList*/ true, /*multiLine*/ false, /*hasTrailingComma*/ false));
                 }
                 else {
                     // [source]
@@ -94766,9 +96813,9 @@
                     //      _super.call(this, a)
                     //      _super.m.call(this, a)
                     //      _super.prototype.m.call(this, a)
-                    resultingCall = ts.setTextRange(factory.createFunctionCallCall(ts.visitNode(target, callExpressionVisitor, ts.isExpression), node.expression.kind === 105 /* SuperKeyword */ ? thisArg : ts.visitNode(thisArg, visitor, ts.isExpression), ts.visitNodes(node.arguments, visitor, ts.isExpression)), node);
+                    resultingCall = ts.setTextRange(factory.createFunctionCallCall(ts.visitNode(target, callExpressionVisitor, ts.isExpression), node.expression.kind === 106 /* SuperKeyword */ ? thisArg : ts.visitNode(thisArg, visitor, ts.isExpression), ts.visitNodes(node.arguments, visitor, ts.isExpression)), node);
                 }
-                if (node.expression.kind === 105 /* SuperKeyword */) {
+                if (node.expression.kind === 106 /* SuperKeyword */) {
                     var initializer = factory.createLogicalOr(resultingCall, createActualThis());
                     resultingCall = assignToCapturedThis
                         ? factory.createAssignment(factory.createUniqueName("_this", 16 /* Optimistic */ | 32 /* FileLevel */), initializer)
@@ -94792,7 +96839,7 @@
                 // [output]
                 //      new ((_a = C).bind.apply(_a, [void 0].concat(a)))()
                 var _a = factory.createCallBinding(factory.createPropertyAccessExpression(node.expression, "bind"), hoistVariableDeclaration), target = _a.target, thisArg = _a.thisArg;
-                return factory.createNewExpression(factory.createFunctionApplyCall(ts.visitNode(target, visitor, ts.isExpression), thisArg, transformAndSpreadElements(factory.createNodeArray(__spreadArray([factory.createVoidZero()], node.arguments)), /*needsUniqueCopy*/ false, /*multiLine*/ false, /*hasTrailingComma*/ false)), 
+                return factory.createNewExpression(factory.createFunctionApplyCall(ts.visitNode(target, visitor, ts.isExpression), thisArg, transformAndSpreadElements(factory.createNodeArray(__spreadArray([factory.createVoidZero()], node.arguments, true)), /*isArgumentList*/ true, /*multiLine*/ false, /*hasTrailingComma*/ false)), 
                 /*typeArguments*/ undefined, []);
             }
             return ts.visitEachChild(node, visitor, context);
@@ -94801,12 +96848,12 @@
          * Transforms an array of Expression nodes that contains a SpreadExpression.
          *
          * @param elements The array of Expression nodes.
-         * @param needsUniqueCopy A value indicating whether to ensure that the result is a fresh array.
-         * This should be `true` when spreading into an `ArrayLiteral`, and `false` when spreading into an
+         * @param isArgumentList A value indicating whether to ensure that the result is a fresh array.
+         * This should be `false` when spreading into an `ArrayLiteral`, and `true` when spreading into an
          * argument list.
          * @param multiLine A value indicating whether the result should be emitted on multiple lines.
          */
-        function transformAndSpreadElements(elements, needsUniqueCopy, multiLine, hasTrailingComma) {
+        function transformAndSpreadElements(elements, isArgumentList, multiLine, hasTrailingComma) {
             // When there is no leading SpreadElement:
             //
             // [source]
@@ -94840,7 +96887,11 @@
             // Map spans of spread expressions into their expressions and spans of other
             // expressions into an array literal.
             var numElements = elements.length;
-            var segments = ts.flatten(ts.spanMap(elements, partitionSpread, function (partition, visitPartition, _start, end) {
+            var segments = ts.flatten(
+            // As we visit each element, we return one of two functions to use as the "key":
+            // - `visitSpanOfSpreads` for one or more contiguous `...` spread expressions, i.e. `...a, ...b` in `[1, 2, ...a, ...b]`
+            // - `visitSpanOfNonSpreads` for one or more contiguous non-spread elements, i.e. `1, 2`, in `[1, 2, ...a, ...b]`
+            ts.spanMap(elements, partitionSpread, function (partition, visitPartition, _start, end) {
                 return visitPartition(partition, multiLine, hasTrailingComma && end === numElements);
             }));
             if (segments.length === 1) {
@@ -94849,20 +96900,20 @@
                 // a CallExpression or NewExpression. When using `--downlevelIteration`, we need
                 // to coerce this into an array for use with `apply`, so we will use the code path
                 // that follows instead.
-                if (!needsUniqueCopy && !compilerOptions.downlevelIteration
-                    || ts.isPackedArrayLiteral(firstSegment) // see NOTE (above)
-                    || ts.isCallToHelper(firstSegment, "___spreadArray")) {
-                    return segments[0];
+                if (isArgumentList && !compilerOptions.downlevelIteration
+                    || ts.isPackedArrayLiteral(firstSegment.expression) // see NOTE (above)
+                    || ts.isCallToHelper(firstSegment.expression, "___spreadArray")) {
+                    return firstSegment.expression;
                 }
             }
             var helpers = emitHelpers();
-            var startsWithSpread = ts.isSpreadElement(elements[0]);
+            var startsWithSpread = segments[0].kind !== 0 /* None */;
             var expression = startsWithSpread ? factory.createArrayLiteralExpression() :
-                segments[0];
+                segments[0].expression;
             for (var i = startsWithSpread ? 0 : 1; i < segments.length; i++) {
-                expression = helpers.createSpreadArrayHelper(expression, compilerOptions.downlevelIteration && !ts.isPackedArrayLiteral(segments[i]) ? // see NOTE (above)
-                    helpers.createReadHelper(segments[i], /*count*/ undefined) :
-                    segments[i]);
+                var segment = segments[i];
+                // If this is for an argument list, it doesn't matter if the array is packed or sparse
+                expression = helpers.createSpreadArrayHelper(expression, segment.expression, segment.kind === 1 /* UnpackedSpread */ && !isArgumentList);
             }
             return expression;
         }
@@ -94874,21 +96925,29 @@
         function visitSpanOfSpreads(chunk) {
             return ts.map(chunk, visitExpressionOfSpread);
         }
+        function visitExpressionOfSpread(node) {
+            var expression = ts.visitNode(node.expression, visitor, ts.isExpression);
+            // We don't need to pack already packed array literals, or existing calls to the `__read` helper.
+            var isCallToReadHelper = ts.isCallToHelper(expression, "___read");
+            var kind = isCallToReadHelper || ts.isPackedArrayLiteral(expression) ? 2 /* PackedSpread */ : 1 /* UnpackedSpread */;
+            // We don't need the `__read` helper for array literals. Array packing will be performed by `__spreadArray`.
+            if (compilerOptions.downlevelIteration && kind === 1 /* UnpackedSpread */ && !ts.isArrayLiteralExpression(expression) && !isCallToReadHelper) {
+                expression = emitHelpers().createReadHelper(expression, /*count*/ undefined);
+                // the `__read` helper returns a packed array, so we don't need to ensure a packed array
+                kind = 2 /* PackedSpread */;
+            }
+            return createSpreadSegment(kind, expression);
+        }
         function visitSpanOfNonSpreads(chunk, multiLine, hasTrailingComma) {
-            return factory.createArrayLiteralExpression(ts.visitNodes(factory.createNodeArray(chunk, hasTrailingComma), visitor, ts.isExpression), multiLine);
+            var expression = factory.createArrayLiteralExpression(ts.visitNodes(factory.createNodeArray(chunk, hasTrailingComma), visitor, ts.isExpression), multiLine);
+            // We do not pack non-spread segments, this is so that `[1, , ...[2, , 3], , 4]` is properly downleveled to
+            // `[1, , 2, undefined, 3, , 4]`. See the NOTE in `transformAndSpreadElements`
+            return createSpreadSegment(0 /* None */, expression);
         }
         function visitSpreadElement(node) {
             return ts.visitNode(node.expression, visitor, ts.isExpression);
         }
         /**
-         * Transforms the expression of a SpreadExpression node.
-         *
-         * @param node A SpreadExpression node.
-         */
-        function visitExpressionOfSpread(node) {
-            return ts.visitNode(node.expression, visitor, ts.isExpression);
-        }
-        /**
          * Visits a template literal.
          *
          * @param node A template literal.
@@ -95015,8 +97074,8 @@
                 : factory.createUniqueName("_super", 16 /* Optimistic */ | 32 /* FileLevel */);
         }
         function visitMetaProperty(node) {
-            if (node.keywordToken === 102 /* NewKeyword */ && node.name.escapedText === "target") {
-                hierarchyFacts |= 16384 /* NewTarget */;
+            if (node.keywordToken === 103 /* NewKeyword */ && node.name.escapedText === "target") {
+                hierarchyFacts |= 32768 /* NewTarget */;
                 return factory.createUniqueName("_newTarget", 16 /* Optimistic */ | 32 /* FileLevel */);
             }
             return node;
@@ -95031,7 +97090,7 @@
         function onEmitNode(hint, node, emitCallback) {
             if (enabledSubstitutions & 1 /* CapturedThis */ && ts.isFunctionLike(node)) {
                 // If we are tracking a captured `this`, keep track of the enclosing function.
-                var ancestorFacts = enterSubtree(16286 /* FunctionExcludes */, ts.getEmitFlags(node) & 8 /* CapturesThis */
+                var ancestorFacts = enterSubtree(32670 /* FunctionExcludes */, ts.getEmitFlags(node) & 8 /* CapturesThis */
                     ? 65 /* FunctionIncludes */ | 16 /* CapturesThis */
                     : 65 /* FunctionIncludes */);
                 previousOnEmitNode(hint, node, emitCallback);
@@ -95047,7 +97106,7 @@
         function enableSubstitutionsForBlockScopedBindings() {
             if ((enabledSubstitutions & 2 /* BlockScopedBindings */) === 0) {
                 enabledSubstitutions |= 2 /* BlockScopedBindings */;
-                context.enableSubstitution(78 /* Identifier */);
+                context.enableSubstitution(79 /* Identifier */);
             }
         }
         /**
@@ -95057,14 +97116,14 @@
         function enableSubstitutionsForCapturedThis() {
             if ((enabledSubstitutions & 1 /* CapturedThis */) === 0) {
                 enabledSubstitutions |= 1 /* CapturedThis */;
-                context.enableSubstitution(107 /* ThisKeyword */);
-                context.enableEmitNotification(167 /* Constructor */);
-                context.enableEmitNotification(166 /* MethodDeclaration */);
-                context.enableEmitNotification(168 /* GetAccessor */);
-                context.enableEmitNotification(169 /* SetAccessor */);
-                context.enableEmitNotification(210 /* ArrowFunction */);
-                context.enableEmitNotification(209 /* FunctionExpression */);
-                context.enableEmitNotification(252 /* FunctionDeclaration */);
+                context.enableSubstitution(108 /* ThisKeyword */);
+                context.enableEmitNotification(169 /* Constructor */);
+                context.enableEmitNotification(167 /* MethodDeclaration */);
+                context.enableEmitNotification(170 /* GetAccessor */);
+                context.enableEmitNotification(171 /* SetAccessor */);
+                context.enableEmitNotification(212 /* ArrowFunction */);
+                context.enableEmitNotification(211 /* FunctionExpression */);
+                context.enableEmitNotification(254 /* FunctionDeclaration */);
             }
         }
         /**
@@ -95105,10 +97164,10 @@
          */
         function isNameOfDeclarationWithCollidingName(node) {
             switch (node.parent.kind) {
-                case 199 /* BindingElement */:
-                case 253 /* ClassDeclaration */:
-                case 256 /* EnumDeclaration */:
-                case 250 /* VariableDeclaration */:
+                case 201 /* BindingElement */:
+                case 255 /* ClassDeclaration */:
+                case 258 /* EnumDeclaration */:
+                case 252 /* VariableDeclaration */:
                     return node.parent.name === node
                         && resolver.isDeclarationWithCollidingName(node.parent);
             }
@@ -95121,9 +97180,9 @@
          */
         function substituteExpression(node) {
             switch (node.kind) {
-                case 78 /* Identifier */:
+                case 79 /* Identifier */:
                     return substituteExpressionIdentifier(node);
-                case 107 /* ThisKeyword */:
+                case 108 /* ThisKeyword */:
                     return substituteThisKeyword(node);
             }
             return node;
@@ -95178,7 +97237,7 @@
             return node;
         }
         function getClassMemberPrefix(node, member) {
-            return ts.hasSyntacticModifier(member, 32 /* Static */)
+            return ts.isStatic(member)
                 ? factory.getInternalName(node)
                 : factory.createPropertyAccessExpression(factory.getInternalName(node), "prototype");
         }
@@ -95190,19 +97249,19 @@
                 return false;
             }
             var statement = ts.firstOrUndefined(constructor.body.statements);
-            if (!statement || !ts.nodeIsSynthesized(statement) || statement.kind !== 234 /* ExpressionStatement */) {
+            if (!statement || !ts.nodeIsSynthesized(statement) || statement.kind !== 236 /* ExpressionStatement */) {
                 return false;
             }
             var statementExpression = statement.expression;
-            if (!ts.nodeIsSynthesized(statementExpression) || statementExpression.kind !== 204 /* CallExpression */) {
+            if (!ts.nodeIsSynthesized(statementExpression) || statementExpression.kind !== 206 /* CallExpression */) {
                 return false;
             }
             var callTarget = statementExpression.expression;
-            if (!ts.nodeIsSynthesized(callTarget) || callTarget.kind !== 105 /* SuperKeyword */) {
+            if (!ts.nodeIsSynthesized(callTarget) || callTarget.kind !== 106 /* SuperKeyword */) {
                 return false;
             }
             var callArgument = ts.singleOrUndefined(statementExpression.arguments);
-            if (!callArgument || !ts.nodeIsSynthesized(callArgument) || callArgument.kind !== 221 /* SpreadElement */) {
+            if (!callArgument || !ts.nodeIsSynthesized(callArgument) || callArgument.kind !== 223 /* SpreadElement */) {
                 return false;
             }
             var expression = callArgument.expression;
@@ -95228,15 +97287,15 @@
         if (compilerOptions.jsx === 1 /* Preserve */ || compilerOptions.jsx === 3 /* ReactNative */) {
             previousOnEmitNode = context.onEmitNode;
             context.onEmitNode = onEmitNode;
-            context.enableEmitNotification(276 /* JsxOpeningElement */);
-            context.enableEmitNotification(277 /* JsxClosingElement */);
-            context.enableEmitNotification(275 /* JsxSelfClosingElement */);
+            context.enableEmitNotification(278 /* JsxOpeningElement */);
+            context.enableEmitNotification(279 /* JsxClosingElement */);
+            context.enableEmitNotification(277 /* JsxSelfClosingElement */);
             noSubstitution = [];
         }
         var previousOnSubstituteNode = context.onSubstituteNode;
         context.onSubstituteNode = onSubstituteNode;
-        context.enableSubstitution(202 /* PropertyAccessExpression */);
-        context.enableSubstitution(289 /* PropertyAssignment */);
+        context.enableSubstitution(204 /* PropertyAccessExpression */);
+        context.enableSubstitution(291 /* PropertyAssignment */);
         return ts.chainBundle(context, transformSourceFile);
         /**
          * Transforms an ES5 source file to ES3.
@@ -95255,9 +97314,9 @@
          */
         function onEmitNode(hint, node, emitCallback) {
             switch (node.kind) {
-                case 276 /* JsxOpeningElement */:
-                case 277 /* JsxClosingElement */:
-                case 275 /* JsxSelfClosingElement */:
+                case 278 /* JsxOpeningElement */:
+                case 279 /* JsxClosingElement */:
+                case 277 /* JsxSelfClosingElement */:
                     var tagName = node.tagName;
                     noSubstitution[ts.getOriginalNodeId(tagName)] = true;
                     break;
@@ -95317,7 +97376,7 @@
          */
         function trySubstituteReservedName(name) {
             var token = name.originalKeywordKind || (ts.nodeIsSynthesized(name) ? ts.stringToToken(ts.idText(name)) : undefined);
-            if (token !== undefined && token >= 80 /* FirstReservedWord */ && token <= 115 /* LastReservedWord */) {
+            if (token !== undefined && token >= 81 /* FirstReservedWord */ && token <= 116 /* LastReservedWord */) {
                 return ts.setTextRange(factory.createStringLiteralFromNode(name), name);
             }
             return undefined;
@@ -95592,13 +97651,13 @@
          */
         function visitJavaScriptInStatementContainingYield(node) {
             switch (node.kind) {
-                case 236 /* DoStatement */:
+                case 238 /* DoStatement */:
                     return visitDoStatement(node);
-                case 237 /* WhileStatement */:
+                case 239 /* WhileStatement */:
                     return visitWhileStatement(node);
-                case 245 /* SwitchStatement */:
+                case 247 /* SwitchStatement */:
                     return visitSwitchStatement(node);
-                case 246 /* LabeledStatement */:
+                case 248 /* LabeledStatement */:
                     return visitLabeledStatement(node);
                 default:
                     return visitJavaScriptInGeneratorFunctionBody(node);
@@ -95611,24 +97670,24 @@
          */
         function visitJavaScriptInGeneratorFunctionBody(node) {
             switch (node.kind) {
-                case 252 /* FunctionDeclaration */:
+                case 254 /* FunctionDeclaration */:
                     return visitFunctionDeclaration(node);
-                case 209 /* FunctionExpression */:
+                case 211 /* FunctionExpression */:
                     return visitFunctionExpression(node);
-                case 168 /* GetAccessor */:
-                case 169 /* SetAccessor */:
+                case 170 /* GetAccessor */:
+                case 171 /* SetAccessor */:
                     return visitAccessorDeclaration(node);
-                case 233 /* VariableStatement */:
+                case 235 /* VariableStatement */:
                     return visitVariableStatement(node);
-                case 238 /* ForStatement */:
+                case 240 /* ForStatement */:
                     return visitForStatement(node);
-                case 239 /* ForInStatement */:
+                case 241 /* ForInStatement */:
                     return visitForInStatement(node);
-                case 242 /* BreakStatement */:
+                case 244 /* BreakStatement */:
                     return visitBreakStatement(node);
-                case 241 /* ContinueStatement */:
+                case 243 /* ContinueStatement */:
                     return visitContinueStatement(node);
-                case 243 /* ReturnStatement */:
+                case 245 /* ReturnStatement */:
                     return visitReturnStatement(node);
                 default:
                     if (node.transformFlags & 524288 /* ContainsYield */) {
@@ -95649,23 +97708,23 @@
          */
         function visitJavaScriptContainingYield(node) {
             switch (node.kind) {
-                case 217 /* BinaryExpression */:
+                case 219 /* BinaryExpression */:
                     return visitBinaryExpression(node);
-                case 341 /* CommaListExpression */:
+                case 346 /* CommaListExpression */:
                     return visitCommaListExpression(node);
-                case 218 /* ConditionalExpression */:
+                case 220 /* ConditionalExpression */:
                     return visitConditionalExpression(node);
-                case 220 /* YieldExpression */:
+                case 222 /* YieldExpression */:
                     return visitYieldExpression(node);
-                case 200 /* ArrayLiteralExpression */:
+                case 202 /* ArrayLiteralExpression */:
                     return visitArrayLiteralExpression(node);
-                case 201 /* ObjectLiteralExpression */:
+                case 203 /* ObjectLiteralExpression */:
                     return visitObjectLiteralExpression(node);
-                case 203 /* ElementAccessExpression */:
+                case 205 /* ElementAccessExpression */:
                     return visitElementAccessExpression(node);
-                case 204 /* CallExpression */:
+                case 206 /* CallExpression */:
                     return visitCallExpression(node);
-                case 205 /* NewExpression */:
+                case 207 /* NewExpression */:
                     return visitNewExpression(node);
                 default:
                     return ts.visitEachChild(node, visitor, context);
@@ -95678,9 +97737,9 @@
          */
         function visitGenerator(node) {
             switch (node.kind) {
-                case 252 /* FunctionDeclaration */:
+                case 254 /* FunctionDeclaration */:
                     return visitFunctionDeclaration(node);
-                case 209 /* FunctionExpression */:
+                case 211 /* FunctionExpression */:
                     return visitFunctionExpression(node);
                 default:
                     return ts.Debug.failBadSyntaxKind(node);
@@ -95888,7 +97947,7 @@
             if (containsYield(right)) {
                 var target = void 0;
                 switch (left.kind) {
-                    case 202 /* PropertyAccessExpression */:
+                    case 204 /* PropertyAccessExpression */:
                         // [source]
                         //      a.b = yield;
                         //
@@ -95900,7 +97959,7 @@
                         //      _a.b = %sent%;
                         target = factory.updatePropertyAccessExpression(left, cacheExpression(ts.visitNode(left.expression, visitor, ts.isLeftHandSideExpression)), left.name);
                         break;
-                    case 203 /* ElementAccessExpression */:
+                    case 205 /* ElementAccessExpression */:
                         // [source]
                         //      a[b] = yield;
                         //
@@ -96147,13 +98206,13 @@
                 temp = declareLocal();
                 var initialElements = ts.visitNodes(elements, visitor, ts.isExpression, 0, numInitialElements);
                 emitAssignment(temp, factory.createArrayLiteralExpression(leadingElement
-                    ? __spreadArray([leadingElement], initialElements) : initialElements));
+                    ? __spreadArray([leadingElement], initialElements, true) : initialElements));
                 leadingElement = undefined;
             }
             var expressions = ts.reduceLeft(elements, reduceElement, [], numInitialElements);
             return temp
                 ? factory.createArrayConcatCall(temp, [factory.createArrayLiteralExpression(expressions, multiLine)])
-                : ts.setTextRange(factory.createArrayLiteralExpression(leadingElement ? __spreadArray([leadingElement], expressions) : expressions, multiLine), location);
+                : ts.setTextRange(factory.createArrayLiteralExpression(leadingElement ? __spreadArray([leadingElement], expressions, true) : expressions, multiLine), location);
             function reduceElement(expressions, element) {
                 if (containsYield(element) && expressions.length > 0) {
                     var hasAssignedTemp = temp !== undefined;
@@ -96162,7 +98221,7 @@
                     }
                     emitAssignment(temp, hasAssignedTemp
                         ? factory.createArrayConcatCall(temp, [factory.createArrayLiteralExpression(expressions, multiLine)])
-                        : factory.createArrayLiteralExpression(leadingElement ? __spreadArray([leadingElement], expressions) : expressions, multiLine));
+                        : factory.createArrayLiteralExpression(leadingElement ? __spreadArray([leadingElement], expressions, true) : expressions, multiLine));
                     leadingElement = undefined;
                     expressions = [];
                 }
@@ -96294,35 +98353,35 @@
         }
         function transformAndEmitStatementWorker(node) {
             switch (node.kind) {
-                case 231 /* Block */:
+                case 233 /* Block */:
                     return transformAndEmitBlock(node);
-                case 234 /* ExpressionStatement */:
+                case 236 /* ExpressionStatement */:
                     return transformAndEmitExpressionStatement(node);
-                case 235 /* IfStatement */:
+                case 237 /* IfStatement */:
                     return transformAndEmitIfStatement(node);
-                case 236 /* DoStatement */:
+                case 238 /* DoStatement */:
                     return transformAndEmitDoStatement(node);
-                case 237 /* WhileStatement */:
+                case 239 /* WhileStatement */:
                     return transformAndEmitWhileStatement(node);
-                case 238 /* ForStatement */:
+                case 240 /* ForStatement */:
                     return transformAndEmitForStatement(node);
-                case 239 /* ForInStatement */:
+                case 241 /* ForInStatement */:
                     return transformAndEmitForInStatement(node);
-                case 241 /* ContinueStatement */:
+                case 243 /* ContinueStatement */:
                     return transformAndEmitContinueStatement(node);
-                case 242 /* BreakStatement */:
+                case 244 /* BreakStatement */:
                     return transformAndEmitBreakStatement(node);
-                case 243 /* ReturnStatement */:
+                case 245 /* ReturnStatement */:
                     return transformAndEmitReturnStatement(node);
-                case 244 /* WithStatement */:
+                case 246 /* WithStatement */:
                     return transformAndEmitWithStatement(node);
-                case 245 /* SwitchStatement */:
+                case 247 /* SwitchStatement */:
                     return transformAndEmitSwitchStatement(node);
-                case 246 /* LabeledStatement */:
+                case 248 /* LabeledStatement */:
                     return transformAndEmitLabeledStatement(node);
-                case 247 /* ThrowStatement */:
+                case 249 /* ThrowStatement */:
                     return transformAndEmitThrowStatement(node);
-                case 248 /* TryStatement */:
+                case 250 /* TryStatement */:
                     return transformAndEmitTryStatement(node);
                 default:
                     return emitStatement(ts.visitNode(node, visitor, ts.isStatement));
@@ -96752,7 +98811,7 @@
                 for (var i = 0; i < numClauses; i++) {
                     var clause = caseBlock.clauses[i];
                     clauseLabels.push(defineLabel());
-                    if (clause.kind === 286 /* DefaultClause */ && defaultClauseIndex === -1) {
+                    if (clause.kind === 288 /* DefaultClause */ && defaultClauseIndex === -1) {
                         defaultClauseIndex = i;
                     }
                 }
@@ -96765,7 +98824,7 @@
                     var defaultClausesSkipped = 0;
                     for (var i = clausesWritten; i < numClauses; i++) {
                         var clause = caseBlock.clauses[i];
-                        if (clause.kind === 285 /* CaseClause */) {
+                        if (clause.kind === 287 /* CaseClause */) {
                             if (containsYield(clause.expression) && pendingClauses.length > 0) {
                                 break;
                             }
@@ -97079,7 +99138,7 @@
                 if (!renamedCatchVariables) {
                     renamedCatchVariables = new ts.Map();
                     renamedCatchVariableDeclarations = [];
-                    context.enableSubstitution(78 /* Identifier */);
+                    context.enableSubstitution(79 /* Identifier */);
                 }
                 renamedCatchVariables.set(text, true);
                 renamedCatchVariableDeclarations[ts.getOriginalNodeId(variable)] = name;
@@ -97925,17 +99984,17 @@
         var previousOnEmitNode = context.onEmitNode;
         context.onSubstituteNode = onSubstituteNode;
         context.onEmitNode = onEmitNode;
-        context.enableSubstitution(78 /* Identifier */); // Substitutes expression identifiers with imported/exported symbols.
-        context.enableSubstitution(217 /* BinaryExpression */); // Substitutes assignments to exported symbols.
-        context.enableSubstitution(215 /* PrefixUnaryExpression */); // Substitutes updates to exported symbols.
-        context.enableSubstitution(216 /* PostfixUnaryExpression */); // Substitutes updates to exported symbols.
-        context.enableSubstitution(290 /* ShorthandPropertyAssignment */); // Substitutes shorthand property assignments for imported/exported symbols.
-        context.enableEmitNotification(298 /* SourceFile */); // Restore state when substituting nodes in a file.
+        context.enableSubstitution(206 /* CallExpression */); // Substitute calls to imported/exported symbols to avoid incorrect `this`.
+        context.enableSubstitution(208 /* TaggedTemplateExpression */); // Substitute calls to imported/exported symbols to avoid incorrect `this`.
+        context.enableSubstitution(79 /* Identifier */); // Substitutes expression identifiers with imported/exported symbols.
+        context.enableSubstitution(219 /* BinaryExpression */); // Substitutes assignments to exported symbols.
+        context.enableSubstitution(292 /* ShorthandPropertyAssignment */); // Substitutes shorthand property assignments for imported/exported symbols.
+        context.enableEmitNotification(300 /* SourceFile */); // Restore state when substituting nodes in a file.
         var moduleInfoMap = []; // The ExternalModuleInfo for each file.
         var deferredExports = []; // Exports to defer until an EndOfDeclarationMarker is found.
         var currentSourceFile; // The current file.
         var currentModuleInfo; // The ExternalModuleInfo for the current file.
-        var noSubstitution; // Set of nodes for which substitution rules should be ignored.
+        var noSubstitution = []; // Set of nodes for which substitution rules should be ignored.
         var needUMDDynamicImportHelper;
         return ts.chainBundle(context, transformSourceFile);
         /**
@@ -97976,7 +100035,7 @@
             startLexicalEnvironment();
             var statements = [];
             var ensureUseStrict = ts.getStrictOptionValue(compilerOptions, "alwaysStrict") || (!compilerOptions.noImplicitUseStrict && ts.isExternalModule(currentSourceFile));
-            var statementOffset = factory.copyPrologue(node.statements, statements, ensureUseStrict && !ts.isJsonSourceFile(node), sourceElementVisitor);
+            var statementOffset = factory.copyPrologue(node.statements, statements, ensureUseStrict && !ts.isJsonSourceFile(node), topLevelVisitor);
             if (shouldEmitUnderscoreUnderscoreESModule()) {
                 ts.append(statements, createUnderscoreUnderscoreESModule());
             }
@@ -97986,8 +100045,8 @@
                     ts.append(statements, factory.createExpressionStatement(ts.reduceLeft(currentModuleInfo.exportedNames.slice(i, i + chunkSize), function (prev, nextId) { return factory.createAssignment(factory.createPropertyAccessExpression(factory.createIdentifier("exports"), factory.createIdentifier(ts.idText(nextId))), prev); }, factory.createVoidZero())));
                 }
             }
-            ts.append(statements, ts.visitNode(currentModuleInfo.externalHelpersImportDeclaration, sourceElementVisitor, ts.isStatement));
-            ts.addRange(statements, ts.visitNodes(node.statements, sourceElementVisitor, ts.isStatement, statementOffset));
+            ts.append(statements, ts.visitNode(currentModuleInfo.externalHelpersImportDeclaration, topLevelVisitor, ts.isStatement));
+            ts.addRange(statements, ts.visitNodes(node.statements, topLevelVisitor, ts.isStatement, statementOffset));
             addExportEqualsIfNeeded(statements, /*emitAsReturn*/ false);
             ts.insertStatementsAfterStandardPrologue(statements, endLexicalEnvironment());
             var updated = factory.updateSourceFile(node, ts.setTextRange(factory.createNodeArray(statements), node.statements));
@@ -98029,14 +100088,14 @@
             //     define(mofactory.updateSourceFile", "module2"], function ...
             var updated = factory.updateSourceFile(node, ts.setTextRange(factory.createNodeArray([
                 factory.createExpressionStatement(factory.createCallExpression(define, 
-                /*typeArguments*/ undefined, __spreadArray(__spreadArray([], (moduleName ? [moduleName] : [])), [
+                /*typeArguments*/ undefined, __spreadArray(__spreadArray([], (moduleName ? [moduleName] : []), true), [
                     // Add the dependency array argument:
                     //
                     //     ["require", "exports", module1", "module2", ...]
                     factory.createArrayLiteralExpression(jsonSourceFile ? ts.emptyArray : __spreadArray(__spreadArray([
                         factory.createStringLiteral("require"),
                         factory.createStringLiteral("exports")
-                    ], aliasedModuleNames), unaliasedModuleNames)),
+                    ], aliasedModuleNames, true), unaliasedModuleNames, true)),
                     // Add the module body function argument:
                     //
                     //     function (require, exports, module1, module2) ...
@@ -98049,9 +100108,9 @@
                         /*typeParameters*/ undefined, __spreadArray([
                             factory.createParameterDeclaration(/*decorators*/ undefined, /*modifiers*/ undefined, /*dotDotDotToken*/ undefined, "require"),
                             factory.createParameterDeclaration(/*decorators*/ undefined, /*modifiers*/ undefined, /*dotDotDotToken*/ undefined, "exports")
-                        ], importAliasNames), 
+                        ], importAliasNames, true), 
                         /*type*/ undefined, transformAsynchronousModuleBody(node))
-                ])))
+                ], false)))
             ]), 
             /*location*/ node.statements));
             ts.addEmitHelpers(updated, context.readEmitHelpers());
@@ -98085,13 +100144,13 @@
                     ts.setEmitFlags(factory.createIfStatement(factory.createStrictInequality(factory.createIdentifier("v"), factory.createIdentifier("undefined")), factory.createExpressionStatement(factory.createAssignment(factory.createPropertyAccessExpression(factory.createIdentifier("module"), "exports"), factory.createIdentifier("v")))), 1 /* SingleLine */)
                 ]), factory.createIfStatement(factory.createLogicalAnd(factory.createTypeCheck(factory.createIdentifier("define"), "function"), factory.createPropertyAccessExpression(factory.createIdentifier("define"), "amd")), factory.createBlock([
                     factory.createExpressionStatement(factory.createCallExpression(factory.createIdentifier("define"), 
-                    /*typeArguments*/ undefined, __spreadArray(__spreadArray([], (moduleName ? [moduleName] : [])), [
+                    /*typeArguments*/ undefined, __spreadArray(__spreadArray([], (moduleName ? [moduleName] : []), true), [
                         factory.createArrayLiteralExpression(__spreadArray(__spreadArray([
                             factory.createStringLiteral("require"),
                             factory.createStringLiteral("exports")
-                        ], aliasedModuleNames), unaliasedModuleNames)),
+                        ], aliasedModuleNames, true), unaliasedModuleNames, true)),
                         factory.createIdentifier("factory")
-                    ])))
+                    ], false)))
                 ])))
             ], 
             /*multiLine*/ true), 
@@ -98120,7 +100179,7 @@
                     /*typeParameters*/ undefined, __spreadArray([
                         factory.createParameterDeclaration(/*decorators*/ undefined, /*modifiers*/ undefined, /*dotDotDotToken*/ undefined, "require"),
                         factory.createParameterDeclaration(/*decorators*/ undefined, /*modifiers*/ undefined, /*dotDotDotToken*/ undefined, "exports")
-                    ], importAliasNames), 
+                    ], importAliasNames, true), 
                     /*type*/ undefined, transformAsynchronousModuleBody(node))
                 ]))
             ]), 
@@ -98197,7 +100256,7 @@
         function transformAsynchronousModuleBody(node) {
             startLexicalEnvironment();
             var statements = [];
-            var statementOffset = factory.copyPrologue(node.statements, statements, /*ensureUseStrict*/ !compilerOptions.noImplicitUseStrict, sourceElementVisitor);
+            var statementOffset = factory.copyPrologue(node.statements, statements, /*ensureUseStrict*/ !compilerOptions.noImplicitUseStrict, topLevelVisitor);
             if (shouldEmitUnderscoreUnderscoreESModule()) {
                 ts.append(statements, createUnderscoreUnderscoreESModule());
             }
@@ -98205,11 +100264,11 @@
                 ts.append(statements, factory.createExpressionStatement(ts.reduceLeft(currentModuleInfo.exportedNames, function (prev, nextId) { return factory.createAssignment(factory.createPropertyAccessExpression(factory.createIdentifier("exports"), factory.createIdentifier(ts.idText(nextId))), prev); }, factory.createVoidZero())));
             }
             // Visit each statement of the module body.
-            ts.append(statements, ts.visitNode(currentModuleInfo.externalHelpersImportDeclaration, sourceElementVisitor, ts.isStatement));
+            ts.append(statements, ts.visitNode(currentModuleInfo.externalHelpersImportDeclaration, topLevelVisitor, ts.isStatement));
             if (moduleKind === ts.ModuleKind.AMD) {
                 ts.addRange(statements, ts.mapDefined(currentModuleInfo.externalImports, getAMDImportExpressionForImport));
             }
-            ts.addRange(statements, ts.visitNodes(node.statements, sourceElementVisitor, ts.isStatement, statementOffset));
+            ts.addRange(statements, ts.visitNodes(node.statements, topLevelVisitor, ts.isStatement, statementOffset));
             // Append the 'export =' statement if provided.
             addExportEqualsIfNeeded(statements, /*emitAsReturn*/ true);
             // End the lexical environment for the module body
@@ -98231,7 +100290,7 @@
          */
         function addExportEqualsIfNeeded(statements, emitAsReturn) {
             if (currentModuleInfo.exportEquals) {
-                var expressionResult = ts.visitNode(currentModuleInfo.exportEquals.expression, moduleExpressionElementVisitor);
+                var expressionResult = ts.visitNode(currentModuleInfo.exportEquals.expression, visitor);
                 if (expressionResult) {
                     if (emitAsReturn) {
                         var statement = factory.createReturnStatement(expressionResult);
@@ -98256,69 +100315,90 @@
          *
          * @param node The node to visit.
          */
-        function sourceElementVisitor(node) {
+        function topLevelVisitor(node) {
             switch (node.kind) {
-                case 262 /* ImportDeclaration */:
+                case 264 /* ImportDeclaration */:
                     return visitImportDeclaration(node);
-                case 261 /* ImportEqualsDeclaration */:
+                case 263 /* ImportEqualsDeclaration */:
                     return visitImportEqualsDeclaration(node);
-                case 268 /* ExportDeclaration */:
+                case 270 /* ExportDeclaration */:
                     return visitExportDeclaration(node);
-                case 267 /* ExportAssignment */:
+                case 269 /* ExportAssignment */:
                     return visitExportAssignment(node);
-                case 233 /* VariableStatement */:
+                case 235 /* VariableStatement */:
                     return visitVariableStatement(node);
-                case 252 /* FunctionDeclaration */:
+                case 254 /* FunctionDeclaration */:
                     return visitFunctionDeclaration(node);
-                case 253 /* ClassDeclaration */:
+                case 255 /* ClassDeclaration */:
                     return visitClassDeclaration(node);
-                case 342 /* MergeDeclarationMarker */:
+                case 347 /* MergeDeclarationMarker */:
                     return visitMergeDeclarationMarker(node);
-                case 343 /* EndOfDeclarationMarker */:
+                case 348 /* EndOfDeclarationMarker */:
                     return visitEndOfDeclarationMarker(node);
                 default:
-                    return ts.visitEachChild(node, moduleExpressionElementVisitor, context);
+                    return visitor(node);
             }
         }
-        function moduleExpressionElementVisitor(node) {
-            // This visitor does not need to descend into the tree if there is no dynamic import or destructuring assignment,
+        function visitorWorker(node, valueIsDiscarded) {
+            // This visitor does not need to descend into the tree if there is no dynamic import, destructuring assignment, or update expression
             // as export/import statements are only transformed at the top level of a file.
-            if (!(node.transformFlags & 4194304 /* ContainsDynamicImport */) && !(node.transformFlags & 2048 /* ContainsDestructuringAssignment */)) {
+            if (!(node.transformFlags & (4194304 /* ContainsDynamicImport */ | 2048 /* ContainsDestructuringAssignment */ | 67108864 /* ContainsUpdateExpressionForIdentifier */))) {
                 return node;
             }
-            if (ts.isImportCall(node)) {
-                return visitImportCallExpression(node);
+            switch (node.kind) {
+                case 240 /* ForStatement */:
+                    return visitForStatement(node);
+                case 236 /* ExpressionStatement */:
+                    return visitExpressionStatement(node);
+                case 210 /* ParenthesizedExpression */:
+                    return visitParenthesizedExpression(node, valueIsDiscarded);
+                case 345 /* PartiallyEmittedExpression */:
+                    return visitPartiallyEmittedExpression(node, valueIsDiscarded);
+                case 206 /* CallExpression */:
+                    if (ts.isImportCall(node)) {
+                        return visitImportCallExpression(node);
+                    }
+                    break;
+                case 219 /* BinaryExpression */:
+                    if (ts.isDestructuringAssignment(node)) {
+                        return visitDestructuringAssignment(node, valueIsDiscarded);
+                    }
+                    break;
+                case 217 /* PrefixUnaryExpression */:
+                case 218 /* PostfixUnaryExpression */:
+                    return visitPreOrPostfixUnaryExpression(node, valueIsDiscarded);
             }
-            else if (ts.isDestructuringAssignment(node)) {
-                return visitDestructuringAssignment(node);
-            }
-            else {
-                return ts.visitEachChild(node, moduleExpressionElementVisitor, context);
-            }
+            return ts.visitEachChild(node, visitor, context);
+        }
+        function visitor(node) {
+            return visitorWorker(node, /*valueIsDiscarded*/ false);
+        }
+        function discardedValueVisitor(node) {
+            return visitorWorker(node, /*valueIsDiscarded*/ true);
         }
         function destructuringNeedsFlattening(node) {
             if (ts.isObjectLiteralExpression(node)) {
                 for (var _i = 0, _a = node.properties; _i < _a.length; _i++) {
                     var elem = _a[_i];
                     switch (elem.kind) {
-                        case 289 /* PropertyAssignment */:
+                        case 291 /* PropertyAssignment */:
                             if (destructuringNeedsFlattening(elem.initializer)) {
                                 return true;
                             }
                             break;
-                        case 290 /* ShorthandPropertyAssignment */:
+                        case 292 /* ShorthandPropertyAssignment */:
                             if (destructuringNeedsFlattening(elem.name)) {
                                 return true;
                             }
                             break;
-                        case 291 /* SpreadAssignment */:
+                        case 293 /* SpreadAssignment */:
                             if (destructuringNeedsFlattening(elem.expression)) {
                                 return true;
                             }
                             break;
-                        case 166 /* MethodDeclaration */:
-                        case 168 /* GetAccessor */:
-                        case 169 /* SetAccessor */:
+                        case 167 /* MethodDeclaration */:
+                        case 170 /* GetAccessor */:
+                        case 171 /* SetAccessor */:
                             return false;
                         default: ts.Debug.assertNever(elem, "Unhandled object member kind");
                     }
@@ -98342,15 +100422,75 @@
             }
             return false;
         }
-        function visitDestructuringAssignment(node) {
+        function visitDestructuringAssignment(node, valueIsDiscarded) {
             if (destructuringNeedsFlattening(node.left)) {
-                return ts.flattenDestructuringAssignment(node, moduleExpressionElementVisitor, context, 0 /* All */, /*needsValue*/ false, createAllExportExpressions);
+                return ts.flattenDestructuringAssignment(node, visitor, context, 0 /* All */, !valueIsDiscarded, createAllExportExpressions);
             }
-            return ts.visitEachChild(node, moduleExpressionElementVisitor, context);
+            return ts.visitEachChild(node, visitor, context);
+        }
+        function visitForStatement(node) {
+            return factory.updateForStatement(node, ts.visitNode(node.initializer, discardedValueVisitor, ts.isForInitializer), ts.visitNode(node.condition, visitor, ts.isExpression), ts.visitNode(node.incrementor, discardedValueVisitor, ts.isExpression), ts.visitIterationBody(node.statement, visitor, context));
+        }
+        function visitExpressionStatement(node) {
+            return factory.updateExpressionStatement(node, ts.visitNode(node.expression, discardedValueVisitor, ts.isExpression));
+        }
+        function visitParenthesizedExpression(node, valueIsDiscarded) {
+            return factory.updateParenthesizedExpression(node, ts.visitNode(node.expression, valueIsDiscarded ? discardedValueVisitor : visitor, ts.isExpression));
+        }
+        function visitPartiallyEmittedExpression(node, valueIsDiscarded) {
+            return factory.updatePartiallyEmittedExpression(node, ts.visitNode(node.expression, valueIsDiscarded ? discardedValueVisitor : visitor, ts.isExpression));
+        }
+        function visitPreOrPostfixUnaryExpression(node, valueIsDiscarded) {
+            // When we see a prefix or postfix increment expression whose operand is an exported
+            // symbol, we should ensure all exports of that symbol are updated with the correct
+            // value.
+            //
+            // - We do not transform generated identifiers for any reason.
+            // - We do not transform identifiers tagged with the LocalName flag.
+            // - We do not transform identifiers that were originally the name of an enum or
+            //   namespace due to how they are transformed in TypeScript.
+            // - We only transform identifiers that are exported at the top level.
+            if ((node.operator === 45 /* PlusPlusToken */ || node.operator === 46 /* MinusMinusToken */)
+                && ts.isIdentifier(node.operand)
+                && !ts.isGeneratedIdentifier(node.operand)
+                && !ts.isLocalName(node.operand)
+                && !ts.isDeclarationNameOfEnumOrNamespace(node.operand)) {
+                var exportedNames = getExports(node.operand);
+                if (exportedNames) {
+                    var temp = void 0;
+                    var expression = ts.visitNode(node.operand, visitor, ts.isExpression);
+                    if (ts.isPrefixUnaryExpression(node)) {
+                        expression = factory.updatePrefixUnaryExpression(node, expression);
+                    }
+                    else {
+                        expression = factory.updatePostfixUnaryExpression(node, expression);
+                        if (!valueIsDiscarded) {
+                            temp = factory.createTempVariable(hoistVariableDeclaration);
+                            expression = factory.createAssignment(temp, expression);
+                            ts.setTextRange(expression, node);
+                        }
+                        expression = factory.createComma(expression, factory.cloneNode(node.operand));
+                        ts.setTextRange(expression, node);
+                    }
+                    for (var _i = 0, exportedNames_1 = exportedNames; _i < exportedNames_1.length; _i++) {
+                        var exportName = exportedNames_1[_i];
+                        noSubstitution[ts.getNodeId(expression)] = true;
+                        expression = createExportExpression(exportName, expression);
+                        ts.setTextRange(expression, node);
+                    }
+                    if (temp) {
+                        noSubstitution[ts.getNodeId(expression)] = true;
+                        expression = factory.createComma(expression, temp);
+                        ts.setTextRange(expression, node);
+                    }
+                    return expression;
+                }
+            }
+            return ts.visitEachChild(node, visitor, context);
         }
         function visitImportCallExpression(node) {
             var externalModuleName = ts.getExternalModuleNameLiteral(factory, node, currentSourceFile, host, resolver, compilerOptions);
-            var firstArgument = ts.visitNode(ts.firstOrUndefined(node.arguments), moduleExpressionElementVisitor);
+            var firstArgument = ts.visitNode(ts.firstOrUndefined(node.arguments), visitor);
             // Only use the external module name if it differs from the first argument. This allows us to preserve the quote style of the argument on output.
             var argument = externalModuleName && (!firstArgument || !ts.isStringLiteral(firstArgument) || firstArgument.text !== externalModuleName.text) ? externalModuleName : firstArgument;
             var containsLexicalThis = !!(node.transformFlags & 8192 /* ContainsLexicalThis */);
@@ -98682,10 +100822,10 @@
             if (original && hasAssociatedEndOfDeclarationMarker(original)) {
                 // Defer exports until we encounter an EndOfDeclarationMarker node
                 var id = ts.getOriginalNodeId(node);
-                deferredExports[id] = appendExportStatement(deferredExports[id], factory.createIdentifier("default"), ts.visitNode(node.expression, moduleExpressionElementVisitor), /*location*/ node, /*allowComments*/ true);
+                deferredExports[id] = appendExportStatement(deferredExports[id], factory.createIdentifier("default"), ts.visitNode(node.expression, visitor), /*location*/ node, /*allowComments*/ true);
             }
             else {
-                statements = appendExportStatement(statements, factory.createIdentifier("default"), ts.visitNode(node.expression, moduleExpressionElementVisitor), /*location*/ node, /*allowComments*/ true);
+                statements = appendExportStatement(statements, factory.createIdentifier("default"), ts.visitNode(node.expression, visitor), /*location*/ node, /*allowComments*/ true);
             }
             return ts.singleOrMany(statements);
         }
@@ -98699,13 +100839,13 @@
             if (ts.hasSyntacticModifier(node, 1 /* Export */)) {
                 statements = ts.append(statements, ts.setOriginalNode(ts.setTextRange(factory.createFunctionDeclaration(
                 /*decorators*/ undefined, ts.visitNodes(node.modifiers, modifierVisitor, ts.isModifier), node.asteriskToken, factory.getDeclarationName(node, /*allowComments*/ true, /*allowSourceMaps*/ true), 
-                /*typeParameters*/ undefined, ts.visitNodes(node.parameters, moduleExpressionElementVisitor), 
-                /*type*/ undefined, ts.visitEachChild(node.body, moduleExpressionElementVisitor, context)), 
+                /*typeParameters*/ undefined, ts.visitNodes(node.parameters, visitor), 
+                /*type*/ undefined, ts.visitEachChild(node.body, visitor, context)), 
                 /*location*/ node), 
                 /*original*/ node));
             }
             else {
-                statements = ts.append(statements, ts.visitEachChild(node, moduleExpressionElementVisitor, context));
+                statements = ts.append(statements, ts.visitEachChild(node, visitor, context));
             }
             if (hasAssociatedEndOfDeclarationMarker(node)) {
                 // Defer exports until we encounter an EndOfDeclarationMarker node
@@ -98727,10 +100867,10 @@
             if (ts.hasSyntacticModifier(node, 1 /* Export */)) {
                 statements = ts.append(statements, ts.setOriginalNode(ts.setTextRange(factory.createClassDeclaration(
                 /*decorators*/ undefined, ts.visitNodes(node.modifiers, modifierVisitor, ts.isModifier), factory.getDeclarationName(node, /*allowComments*/ true, /*allowSourceMaps*/ true), 
-                /*typeParameters*/ undefined, ts.visitNodes(node.heritageClauses, moduleExpressionElementVisitor), ts.visitNodes(node.members, moduleExpressionElementVisitor)), node), node));
+                /*typeParameters*/ undefined, ts.visitNodes(node.heritageClauses, visitor), ts.visitNodes(node.members, visitor)), node), node));
             }
             else {
-                statements = ts.append(statements, ts.visitEachChild(node, moduleExpressionElementVisitor, context));
+                statements = ts.append(statements, ts.visitEachChild(node, visitor, context));
             }
             if (hasAssociatedEndOfDeclarationMarker(node)) {
                 // Defer exports until we encounter an EndOfDeclarationMarker node
@@ -98767,7 +100907,7 @@
                         if (!ts.isBindingPattern(variable.name) && (ts.isArrowFunction(variable.initializer) || ts.isFunctionExpression(variable.initializer) || ts.isClassExpression(variable.initializer))) {
                             var expression = factory.createAssignment(ts.setTextRange(factory.createPropertyAccessExpression(factory.createIdentifier("exports"), variable.name), 
                             /*location*/ variable.name), factory.createIdentifier(ts.getTextOfIdentifierOrLiteral(variable.name)));
-                            var updatedVariable = factory.createVariableDeclaration(variable.name, variable.exclamationToken, variable.type, ts.visitNode(variable.initializer, moduleExpressionElementVisitor));
+                            var updatedVariable = factory.createVariableDeclaration(variable.name, variable.exclamationToken, variable.type, ts.visitNode(variable.initializer, visitor));
                             variables = ts.append(variables, updatedVariable);
                             expressions = ts.append(expressions, expression);
                             removeCommentsOnExpressions = true;
@@ -98789,7 +100929,7 @@
                 }
             }
             else {
-                statements = ts.append(statements, ts.visitEachChild(node, moduleExpressionElementVisitor, context));
+                statements = ts.append(statements, ts.visitEachChild(node, visitor, context));
             }
             if (hasAssociatedEndOfDeclarationMarker(node)) {
                 // Defer exports until we encounter an EndOfDeclarationMarker node
@@ -98806,8 +100946,8 @@
             if (exportedNames) {
                 // For each additional export of the declaration, apply an export assignment.
                 var expression = ts.isExportName(name) ? value : factory.createAssignment(name, value);
-                for (var _i = 0, exportedNames_1 = exportedNames; _i < exportedNames_1.length; _i++) {
-                    var exportName = exportedNames_1[_i];
+                for (var _i = 0, exportedNames_2 = exportedNames; _i < exportedNames_2.length; _i++) {
+                    var exportName = exportedNames_2[_i];
                     // Mark the node to prevent triggering substitution.
                     ts.setEmitFlags(expression, 4 /* NoSubstitution */);
                     expression = createExportExpression(exportName, expression, /*location*/ location);
@@ -98823,13 +100963,13 @@
          */
         function transformInitializedVariable(node) {
             if (ts.isBindingPattern(node.name)) {
-                return ts.flattenDestructuringAssignment(ts.visitNode(node, moduleExpressionElementVisitor), 
+                return ts.flattenDestructuringAssignment(ts.visitNode(node, visitor), 
                 /*visitor*/ undefined, context, 0 /* All */, 
                 /*needsValue*/ false, createAllExportExpressions);
             }
             else {
                 return factory.createAssignment(ts.setTextRange(factory.createPropertyAccessExpression(factory.createIdentifier("exports"), node.name), 
-                /*location*/ node.name), node.initializer ? ts.visitNode(node.initializer, moduleExpressionElementVisitor) : factory.createVoidZero());
+                /*location*/ node.name), node.initializer ? ts.visitNode(node.initializer, visitor) : factory.createVoidZero());
             }
         }
         /**
@@ -98846,7 +100986,7 @@
             //
             // To balance the declaration, add the exports of the elided variable
             // statement.
-            if (hasAssociatedEndOfDeclarationMarker(node) && node.original.kind === 233 /* VariableStatement */) {
+            if (hasAssociatedEndOfDeclarationMarker(node) && node.original.kind === 235 /* VariableStatement */) {
                 var id = ts.getOriginalNodeId(node);
                 deferredExports[id] = appendExportsOfVariableStatement(deferredExports[id], node.original);
             }
@@ -98901,10 +101041,10 @@
             var namedBindings = importClause.namedBindings;
             if (namedBindings) {
                 switch (namedBindings.kind) {
-                    case 264 /* NamespaceImport */:
+                    case 266 /* NamespaceImport */:
                         statements = appendExportsOfDeclaration(statements, namedBindings);
                         break;
-                    case 265 /* NamedImports */:
+                    case 267 /* NamedImports */:
                         for (var _i = 0, _a = namedBindings.elements; _i < _a.length; _i++) {
                             var importBinding = _a[_i];
                             statements = appendExportsOfDeclaration(statements, importBinding, /* liveBinding */ true);
@@ -99100,8 +101240,8 @@
         function modifierVisitor(node) {
             // Elide module-specific modifiers.
             switch (node.kind) {
-                case 92 /* ExportKeyword */:
-                case 87 /* DefaultKeyword */:
+                case 93 /* ExportKeyword */:
+                case 88 /* DefaultKeyword */:
                     return undefined;
             }
             return node;
@@ -99117,14 +101257,12 @@
          * @param emit A callback used to emit the node in the printer.
          */
         function onEmitNode(hint, node, emitCallback) {
-            if (node.kind === 298 /* SourceFile */) {
+            if (node.kind === 300 /* SourceFile */) {
                 currentSourceFile = node;
                 currentModuleInfo = moduleInfoMap[ts.getOriginalNodeId(currentSourceFile)];
-                noSubstitution = [];
                 previousOnEmitNode(hint, node, emitCallback);
                 currentSourceFile = undefined;
                 currentModuleInfo = undefined;
-                noSubstitution = undefined;
             }
             else {
                 previousOnEmitNode(hint, node, emitCallback);
@@ -99179,13 +101317,36 @@
          */
         function substituteExpression(node) {
             switch (node.kind) {
-                case 78 /* Identifier */:
+                case 79 /* Identifier */:
                     return substituteExpressionIdentifier(node);
-                case 217 /* BinaryExpression */:
+                case 206 /* CallExpression */:
+                    return substituteCallExpression(node);
+                case 208 /* TaggedTemplateExpression */:
+                    return substituteTaggedTemplateExpression(node);
+                case 219 /* BinaryExpression */:
                     return substituteBinaryExpression(node);
-                case 216 /* PostfixUnaryExpression */:
-                case 215 /* PrefixUnaryExpression */:
-                    return substituteUnaryExpression(node);
+            }
+            return node;
+        }
+        function substituteCallExpression(node) {
+            if (ts.isIdentifier(node.expression)) {
+                var expression = substituteExpressionIdentifier(node.expression);
+                noSubstitution[ts.getNodeId(expression)] = true;
+                if (!ts.isIdentifier(expression)) {
+                    return ts.addEmitFlags(factory.updateCallExpression(node, expression, 
+                    /*typeArguments*/ undefined, node.arguments), 536870912 /* IndirectCall */);
+                }
+            }
+            return node;
+        }
+        function substituteTaggedTemplateExpression(node) {
+            if (ts.isIdentifier(node.tag)) {
+                var tag = substituteExpressionIdentifier(node.tag);
+                noSubstitution[ts.getNodeId(tag)] = true;
+                if (!ts.isIdentifier(tag)) {
+                    return ts.addEmitFlags(factory.updateTaggedTemplateExpression(node, tag, 
+                    /*typeArguments*/ undefined, node.template), 536870912 /* IndirectCall */);
+                }
             }
             return node;
         }
@@ -99206,7 +101367,7 @@
             }
             else if (!(ts.isGeneratedIdentifier(node) && !(node.autoGenerateFlags & 64 /* AllowNameSubstitution */)) && !ts.isLocalName(node)) {
                 var exportContainer = resolver.getReferencedExportContainer(node, ts.isExportName(node));
-                if (exportContainer && exportContainer.kind === 298 /* SourceFile */) {
+                if (exportContainer && exportContainer.kind === 300 /* SourceFile */) {
                     return ts.setTextRange(factory.createPropertyAccessExpression(factory.createIdentifier("exports"), factory.cloneNode(node)), 
                     /*location*/ node);
                 }
@@ -99248,54 +101409,11 @@
                 if (exportedNames) {
                     // For each additional export of the declaration, apply an export assignment.
                     var expression = node;
-                    for (var _i = 0, exportedNames_2 = exportedNames; _i < exportedNames_2.length; _i++) {
-                        var exportName = exportedNames_2[_i];
-                        // Mark the node to prevent triggering this rule again.
-                        noSubstitution[ts.getNodeId(expression)] = true;
-                        expression = createExportExpression(exportName, expression, /*location*/ node);
-                    }
-                    return expression;
-                }
-            }
-            return node;
-        }
-        /**
-         * Substitution for a UnaryExpression that may contain an imported or exported symbol.
-         *
-         * @param node The node to substitute.
-         */
-        function substituteUnaryExpression(node) {
-            // When we see a prefix or postfix increment expression whose operand is an exported
-            // symbol, we should ensure all exports of that symbol are updated with the correct
-            // value.
-            //
-            // - We do not substitute generated identifiers for any reason.
-            // - We do not substitute identifiers tagged with the LocalName flag.
-            // - We do not substitute identifiers that were originally the name of an enum or
-            //   namespace due to how they are transformed in TypeScript.
-            // - We only substitute identifiers that are exported at the top level.
-            if ((node.operator === 45 /* PlusPlusToken */ || node.operator === 46 /* MinusMinusToken */)
-                && ts.isIdentifier(node.operand)
-                && !ts.isGeneratedIdentifier(node.operand)
-                && !ts.isLocalName(node.operand)
-                && !ts.isDeclarationNameOfEnumOrNamespace(node.operand)) {
-                var exportedNames = getExports(node.operand);
-                if (exportedNames) {
-                    var expression = node.kind === 216 /* PostfixUnaryExpression */
-                        ? ts.setTextRange(factory.createPrefixUnaryExpression(node.operator, node.operand), 
-                        /*location*/ node)
-                        : node;
                     for (var _i = 0, exportedNames_3 = exportedNames; _i < exportedNames_3.length; _i++) {
                         var exportName = exportedNames_3[_i];
                         // Mark the node to prevent triggering this rule again.
                         noSubstitution[ts.getNodeId(expression)] = true;
-                        expression = createExportExpression(exportName, expression);
-                    }
-                    if (node.kind === 216 /* PostfixUnaryExpression */) {
-                        noSubstitution[ts.getNodeId(expression)] = true;
-                        expression = node.operator === 45 /* PlusPlusToken */
-                            ? factory.createSubtract(expression, factory.createNumericLiteral(1))
-                            : factory.createAdd(expression, factory.createNumericLiteral(1));
+                        expression = createExportExpression(exportName, expression, /*location*/ node);
                     }
                     return expression;
                 }
@@ -99338,13 +101456,11 @@
         var previousOnEmitNode = context.onEmitNode;
         context.onSubstituteNode = onSubstituteNode;
         context.onEmitNode = onEmitNode;
-        context.enableSubstitution(78 /* Identifier */); // Substitutes expression identifiers for imported symbols.
-        context.enableSubstitution(290 /* ShorthandPropertyAssignment */); // Substitutes expression identifiers for imported symbols
-        context.enableSubstitution(217 /* BinaryExpression */); // Substitutes assignments to exported symbols.
-        context.enableSubstitution(215 /* PrefixUnaryExpression */); // Substitutes updates to exported symbols.
-        context.enableSubstitution(216 /* PostfixUnaryExpression */); // Substitutes updates to exported symbols.
-        context.enableSubstitution(227 /* MetaProperty */); // Substitutes 'import.meta'
-        context.enableEmitNotification(298 /* SourceFile */); // Restore state when substituting nodes in a file.
+        context.enableSubstitution(79 /* Identifier */); // Substitutes expression identifiers for imported symbols.
+        context.enableSubstitution(292 /* ShorthandPropertyAssignment */); // Substitutes expression identifiers for imported symbols
+        context.enableSubstitution(219 /* BinaryExpression */); // Substitutes assignments to exported symbols.
+        context.enableSubstitution(229 /* MetaProperty */); // Substitutes 'import.meta'
+        context.enableEmitNotification(300 /* SourceFile */); // Restore state when substituting nodes in a file.
         var moduleInfoMap = []; // The ExternalModuleInfo for each file.
         var deferredExports = []; // Exports to defer until an EndOfDeclarationMarker is found.
         var exportFunctionsMap = []; // The export function associated with a source file.
@@ -99510,7 +101626,7 @@
             startLexicalEnvironment();
             // Add any prologue directives.
             var ensureUseStrict = ts.getStrictOptionValue(compilerOptions, "alwaysStrict") || (!compilerOptions.noImplicitUseStrict && ts.isExternalModule(currentSourceFile));
-            var statementOffset = factory.copyPrologue(node.statements, statements, ensureUseStrict, sourceElementVisitor);
+            var statementOffset = factory.copyPrologue(node.statements, statements, ensureUseStrict, topLevelVisitor);
             // var __moduleName = context_1 && context_1.id;
             statements.push(factory.createVariableStatement(
             /*modifiers*/ undefined, factory.createVariableDeclarationList([
@@ -99519,13 +101635,13 @@
                 /*type*/ undefined, factory.createLogicalAnd(contextObject, factory.createPropertyAccessExpression(contextObject, "id")))
             ])));
             // Visit the synthetic external helpers import declaration if present
-            ts.visitNode(moduleInfo.externalHelpersImportDeclaration, sourceElementVisitor, ts.isStatement);
+            ts.visitNode(moduleInfo.externalHelpersImportDeclaration, topLevelVisitor, ts.isStatement);
             // Visit the statements of the source file, emitting any transformations into
             // the `executeStatements` array. We do this *before* we fill the `setters` array
             // as we both emit transformations as well as aggregate some data used when creating
             // setters. This allows us to reduce the number of times we need to loop through the
             // statements of the source file.
-            var executeStatements = ts.visitNodes(node.statements, sourceElementVisitor, ts.isStatement, statementOffset);
+            var executeStatements = ts.visitNodes(node.statements, topLevelVisitor, ts.isStatement, statementOffset);
             // Emit early exports for function declarations.
             ts.addRange(statements, hoistedStatements);
             // We emit hoisted variables early to align roughly with our previous emit output.
@@ -99568,7 +101684,7 @@
                 var hasExportDeclarationWithExportClause = false;
                 for (var _i = 0, _a = moduleInfo.externalImports; _i < _a.length; _i++) {
                     var externalImport = _a[_i];
-                    if (externalImport.kind === 268 /* ExportDeclaration */ && externalImport.exportClause) {
+                    if (externalImport.kind === 270 /* ExportDeclaration */ && externalImport.exportClause) {
                         hasExportDeclarationWithExportClause = true;
                         break;
                     }
@@ -99658,19 +101774,19 @@
                     var entry = _b[_a];
                     var importVariableName = ts.getLocalNameForExternalImport(factory, entry, currentSourceFile); // TODO: GH#18217
                     switch (entry.kind) {
-                        case 262 /* ImportDeclaration */:
+                        case 264 /* ImportDeclaration */:
                             if (!entry.importClause) {
                                 // 'import "..."' case
                                 // module is imported only for side-effects, no emit required
                                 break;
                             }
                         // falls through
-                        case 261 /* ImportEqualsDeclaration */:
+                        case 263 /* ImportEqualsDeclaration */:
                             ts.Debug.assert(importVariableName !== undefined);
                             // save import into the local
                             statements.push(factory.createExpressionStatement(factory.createAssignment(importVariableName, parameterName)));
                             break;
-                        case 268 /* ExportDeclaration */:
+                        case 270 /* ExportDeclaration */:
                             ts.Debug.assert(importVariableName !== undefined);
                             if (entry.exportClause) {
                                 if (ts.isNamedExports(entry.exportClause)) {
@@ -99727,18 +101843,18 @@
          *
          * @param node The node to visit.
          */
-        function sourceElementVisitor(node) {
+        function topLevelVisitor(node) {
             switch (node.kind) {
-                case 262 /* ImportDeclaration */:
+                case 264 /* ImportDeclaration */:
                     return visitImportDeclaration(node);
-                case 261 /* ImportEqualsDeclaration */:
+                case 263 /* ImportEqualsDeclaration */:
                     return visitImportEqualsDeclaration(node);
-                case 268 /* ExportDeclaration */:
+                case 270 /* ExportDeclaration */:
                     return visitExportDeclaration(node);
-                case 267 /* ExportAssignment */:
+                case 269 /* ExportAssignment */:
                     return visitExportAssignment(node);
                 default:
-                    return nestedElementVisitor(node);
+                    return topLevelNestedVisitor(node);
             }
         }
         /**
@@ -99794,7 +101910,7 @@
                 // Elide `export=` as it is illegal in a SystemJS module.
                 return undefined;
             }
-            var expression = ts.visitNode(node.expression, destructuringAndImportCallVisitor, ts.isExpression);
+            var expression = ts.visitNode(node.expression, visitor, ts.isExpression);
             var original = node.original;
             if (original && hasAssociatedEndOfDeclarationMarker(original)) {
                 // Defer exports until we encounter an EndOfDeclarationMarker node
@@ -99813,11 +101929,11 @@
         function visitFunctionDeclaration(node) {
             if (ts.hasSyntacticModifier(node, 1 /* Export */)) {
                 hoistedStatements = ts.append(hoistedStatements, factory.updateFunctionDeclaration(node, node.decorators, ts.visitNodes(node.modifiers, modifierVisitor, ts.isModifier), node.asteriskToken, factory.getDeclarationName(node, /*allowComments*/ true, /*allowSourceMaps*/ true), 
-                /*typeParameters*/ undefined, ts.visitNodes(node.parameters, destructuringAndImportCallVisitor, ts.isParameterDeclaration), 
-                /*type*/ undefined, ts.visitNode(node.body, destructuringAndImportCallVisitor, ts.isBlock)));
+                /*typeParameters*/ undefined, ts.visitNodes(node.parameters, visitor, ts.isParameterDeclaration), 
+                /*type*/ undefined, ts.visitNode(node.body, visitor, ts.isBlock)));
             }
             else {
-                hoistedStatements = ts.append(hoistedStatements, ts.visitEachChild(node, destructuringAndImportCallVisitor, context));
+                hoistedStatements = ts.append(hoistedStatements, ts.visitEachChild(node, visitor, context));
             }
             if (hasAssociatedEndOfDeclarationMarker(node)) {
                 // Defer exports until we encounter an EndOfDeclarationMarker node
@@ -99840,9 +101956,9 @@
             var name = factory.getLocalName(node);
             hoistVariableDeclaration(name);
             // Rewrite the class declaration into an assignment of a class expression.
-            statements = ts.append(statements, ts.setTextRange(factory.createExpressionStatement(factory.createAssignment(name, ts.setTextRange(factory.createClassExpression(ts.visitNodes(node.decorators, destructuringAndImportCallVisitor, ts.isDecorator), 
+            statements = ts.append(statements, ts.setTextRange(factory.createExpressionStatement(factory.createAssignment(name, ts.setTextRange(factory.createClassExpression(ts.visitNodes(node.decorators, visitor, ts.isDecorator), 
             /*modifiers*/ undefined, node.name, 
-            /*typeParameters*/ undefined, ts.visitNodes(node.heritageClauses, destructuringAndImportCallVisitor, ts.isHeritageClause), ts.visitNodes(node.members, destructuringAndImportCallVisitor, ts.isClassElement)), node))), node));
+            /*typeParameters*/ undefined, ts.visitNodes(node.heritageClauses, visitor, ts.isHeritageClause), ts.visitNodes(node.members, visitor, ts.isClassElement)), node))), node));
             if (hasAssociatedEndOfDeclarationMarker(node)) {
                 // Defer exports until we encounter an EndOfDeclarationMarker node
                 var id = ts.getOriginalNodeId(node);
@@ -99861,7 +101977,7 @@
          */
         function visitVariableStatement(node) {
             if (!shouldHoistVariableDeclarationList(node.declarationList)) {
-                return ts.visitNode(node, destructuringAndImportCallVisitor, ts.isStatement);
+                return ts.visitNode(node, visitor, ts.isStatement);
             }
             var expressions;
             var isExportedDeclaration = ts.hasSyntacticModifier(node, 1 /* Export */);
@@ -99915,7 +102031,7 @@
         function shouldHoistVariableDeclarationList(node) {
             // hoist only non-block scoped declarations or block scoped declarations parented by source file
             return (ts.getEmitFlags(node) & 2097152 /* NoHoisting */) === 0
-                && (enclosingBlockScopedContainer.kind === 298 /* SourceFile */
+                && (enclosingBlockScopedContainer.kind === 300 /* SourceFile */
                     || (ts.getOriginalNode(node).flags & 3 /* BlockScoped */) === 0);
         }
         /**
@@ -99927,9 +102043,9 @@
         function transformInitializedVariable(node, isExportedDeclaration) {
             var createAssignment = isExportedDeclaration ? createExportedVariableAssignment : createNonExportedVariableAssignment;
             return ts.isBindingPattern(node.name)
-                ? ts.flattenDestructuringAssignment(node, destructuringAndImportCallVisitor, context, 0 /* All */, 
+                ? ts.flattenDestructuringAssignment(node, visitor, context, 0 /* All */, 
                 /*needsValue*/ false, createAssignment)
-                : node.initializer ? createAssignment(node.name, ts.visitNode(node.initializer, destructuringAndImportCallVisitor, ts.isExpression)) : node.name;
+                : node.initializer ? createAssignment(node.name, ts.visitNode(node.initializer, visitor, ts.isExpression)) : node.name;
         }
         /**
          * Creates an assignment expression for an exported variable declaration.
@@ -99979,7 +102095,7 @@
             //
             // To balance the declaration, we defer the exports of the elided variable
             // statement until we visit this declaration's `EndOfDeclarationMarker`.
-            if (hasAssociatedEndOfDeclarationMarker(node) && node.original.kind === 233 /* VariableStatement */) {
+            if (hasAssociatedEndOfDeclarationMarker(node) && node.original.kind === 235 /* VariableStatement */) {
                 var id = ts.getOriginalNodeId(node);
                 var isExportedDeclaration = ts.hasSyntacticModifier(node.original, 1 /* Export */);
                 deferredExports[id] = appendExportsOfVariableStatement(deferredExports[id], node.original, isExportedDeclaration);
@@ -100041,10 +102157,10 @@
             var namedBindings = importClause.namedBindings;
             if (namedBindings) {
                 switch (namedBindings.kind) {
-                    case 264 /* NamespaceImport */:
+                    case 266 /* NamespaceImport */:
                         statements = appendExportsOfDeclaration(statements, namedBindings);
                         break;
-                    case 265 /* NamedImports */:
+                    case 267 /* NamedImports */:
                         for (var _i = 0, _a = namedBindings.elements; _i < _a.length; _i++) {
                             var importBinding = _a[_i];
                             statements = appendExportsOfDeclaration(statements, importBinding);
@@ -100222,48 +102338,48 @@
          *
          * @param node The node to visit.
          */
-        function nestedElementVisitor(node) {
+        function topLevelNestedVisitor(node) {
             switch (node.kind) {
-                case 233 /* VariableStatement */:
+                case 235 /* VariableStatement */:
                     return visitVariableStatement(node);
-                case 252 /* FunctionDeclaration */:
+                case 254 /* FunctionDeclaration */:
                     return visitFunctionDeclaration(node);
-                case 253 /* ClassDeclaration */:
+                case 255 /* ClassDeclaration */:
                     return visitClassDeclaration(node);
-                case 238 /* ForStatement */:
-                    return visitForStatement(node);
-                case 239 /* ForInStatement */:
+                case 240 /* ForStatement */:
+                    return visitForStatement(node, /*isTopLevel*/ true);
+                case 241 /* ForInStatement */:
                     return visitForInStatement(node);
-                case 240 /* ForOfStatement */:
+                case 242 /* ForOfStatement */:
                     return visitForOfStatement(node);
-                case 236 /* DoStatement */:
+                case 238 /* DoStatement */:
                     return visitDoStatement(node);
-                case 237 /* WhileStatement */:
+                case 239 /* WhileStatement */:
                     return visitWhileStatement(node);
-                case 246 /* LabeledStatement */:
+                case 248 /* LabeledStatement */:
                     return visitLabeledStatement(node);
-                case 244 /* WithStatement */:
+                case 246 /* WithStatement */:
                     return visitWithStatement(node);
-                case 245 /* SwitchStatement */:
+                case 247 /* SwitchStatement */:
                     return visitSwitchStatement(node);
-                case 259 /* CaseBlock */:
+                case 261 /* CaseBlock */:
                     return visitCaseBlock(node);
-                case 285 /* CaseClause */:
+                case 287 /* CaseClause */:
                     return visitCaseClause(node);
-                case 286 /* DefaultClause */:
+                case 288 /* DefaultClause */:
                     return visitDefaultClause(node);
-                case 248 /* TryStatement */:
+                case 250 /* TryStatement */:
                     return visitTryStatement(node);
-                case 288 /* CatchClause */:
+                case 290 /* CatchClause */:
                     return visitCatchClause(node);
-                case 231 /* Block */:
+                case 233 /* Block */:
                     return visitBlock(node);
-                case 342 /* MergeDeclarationMarker */:
+                case 347 /* MergeDeclarationMarker */:
                     return visitMergeDeclarationMarker(node);
-                case 343 /* EndOfDeclarationMarker */:
+                case 348 /* EndOfDeclarationMarker */:
                     return visitEndOfDeclarationMarker(node);
                 default:
-                    return destructuringAndImportCallVisitor(node);
+                    return visitor(node);
             }
         }
         /**
@@ -100271,10 +102387,10 @@
          *
          * @param node The node to visit.
          */
-        function visitForStatement(node) {
+        function visitForStatement(node, isTopLevel) {
             var savedEnclosingBlockScopedContainer = enclosingBlockScopedContainer;
             enclosingBlockScopedContainer = node;
-            node = factory.updateForStatement(node, node.initializer && visitForInitializer(node.initializer), ts.visitNode(node.condition, destructuringAndImportCallVisitor, ts.isExpression), ts.visitNode(node.incrementor, destructuringAndImportCallVisitor, ts.isExpression), ts.visitIterationBody(node.statement, nestedElementVisitor, context));
+            node = factory.updateForStatement(node, ts.visitNode(node.initializer, isTopLevel ? visitForInitializer : discardedValueVisitor, ts.isForInitializer), ts.visitNode(node.condition, visitor, ts.isExpression), ts.visitNode(node.incrementor, discardedValueVisitor, ts.isExpression), ts.visitIterationBody(node.statement, isTopLevel ? topLevelNestedVisitor : visitor, context));
             enclosingBlockScopedContainer = savedEnclosingBlockScopedContainer;
             return node;
         }
@@ -100286,7 +102402,7 @@
         function visitForInStatement(node) {
             var savedEnclosingBlockScopedContainer = enclosingBlockScopedContainer;
             enclosingBlockScopedContainer = node;
-            node = factory.updateForInStatement(node, visitForInitializer(node.initializer), ts.visitNode(node.expression, destructuringAndImportCallVisitor, ts.isExpression), ts.visitIterationBody(node.statement, nestedElementVisitor, context));
+            node = factory.updateForInStatement(node, visitForInitializer(node.initializer), ts.visitNode(node.expression, visitor, ts.isExpression), ts.visitIterationBody(node.statement, topLevelNestedVisitor, context));
             enclosingBlockScopedContainer = savedEnclosingBlockScopedContainer;
             return node;
         }
@@ -100298,7 +102414,7 @@
         function visitForOfStatement(node) {
             var savedEnclosingBlockScopedContainer = enclosingBlockScopedContainer;
             enclosingBlockScopedContainer = node;
-            node = factory.updateForOfStatement(node, node.awaitModifier, visitForInitializer(node.initializer), ts.visitNode(node.expression, destructuringAndImportCallVisitor, ts.isExpression), ts.visitIterationBody(node.statement, nestedElementVisitor, context));
+            node = factory.updateForOfStatement(node, node.awaitModifier, visitForInitializer(node.initializer), ts.visitNode(node.expression, visitor, ts.isExpression), ts.visitIterationBody(node.statement, topLevelNestedVisitor, context));
             enclosingBlockScopedContainer = savedEnclosingBlockScopedContainer;
             return node;
         }
@@ -100330,7 +102446,7 @@
                 return expressions ? factory.inlineExpressions(expressions) : factory.createOmittedExpression();
             }
             else {
-                return ts.visitEachChild(node, nestedElementVisitor, context);
+                return ts.visitNode(node, discardedValueVisitor, ts.isExpression);
             }
         }
         /**
@@ -100339,7 +102455,7 @@
          * @param node The node to visit.
          */
         function visitDoStatement(node) {
-            return factory.updateDoStatement(node, ts.visitIterationBody(node.statement, nestedElementVisitor, context), ts.visitNode(node.expression, destructuringAndImportCallVisitor, ts.isExpression));
+            return factory.updateDoStatement(node, ts.visitIterationBody(node.statement, topLevelNestedVisitor, context), ts.visitNode(node.expression, visitor, ts.isExpression));
         }
         /**
          * Visits the body of a WhileStatement to hoist declarations.
@@ -100347,7 +102463,7 @@
          * @param node The node to visit.
          */
         function visitWhileStatement(node) {
-            return factory.updateWhileStatement(node, ts.visitNode(node.expression, destructuringAndImportCallVisitor, ts.isExpression), ts.visitIterationBody(node.statement, nestedElementVisitor, context));
+            return factory.updateWhileStatement(node, ts.visitNode(node.expression, visitor, ts.isExpression), ts.visitIterationBody(node.statement, topLevelNestedVisitor, context));
         }
         /**
          * Visits the body of a LabeledStatement to hoist declarations.
@@ -100355,7 +102471,7 @@
          * @param node The node to visit.
          */
         function visitLabeledStatement(node) {
-            return factory.updateLabeledStatement(node, node.label, ts.visitNode(node.statement, nestedElementVisitor, ts.isStatement, factory.liftToBlock));
+            return factory.updateLabeledStatement(node, node.label, ts.visitNode(node.statement, topLevelNestedVisitor, ts.isStatement, factory.liftToBlock));
         }
         /**
          * Visits the body of a WithStatement to hoist declarations.
@@ -100363,7 +102479,7 @@
          * @param node The node to visit.
          */
         function visitWithStatement(node) {
-            return factory.updateWithStatement(node, ts.visitNode(node.expression, destructuringAndImportCallVisitor, ts.isExpression), ts.visitNode(node.statement, nestedElementVisitor, ts.isStatement, factory.liftToBlock));
+            return factory.updateWithStatement(node, ts.visitNode(node.expression, visitor, ts.isExpression), ts.visitNode(node.statement, topLevelNestedVisitor, ts.isStatement, factory.liftToBlock));
         }
         /**
          * Visits the body of a SwitchStatement to hoist declarations.
@@ -100371,7 +102487,7 @@
          * @param node The node to visit.
          */
         function visitSwitchStatement(node) {
-            return factory.updateSwitchStatement(node, ts.visitNode(node.expression, destructuringAndImportCallVisitor, ts.isExpression), ts.visitNode(node.caseBlock, nestedElementVisitor, ts.isCaseBlock));
+            return factory.updateSwitchStatement(node, ts.visitNode(node.expression, visitor, ts.isExpression), ts.visitNode(node.caseBlock, topLevelNestedVisitor, ts.isCaseBlock));
         }
         /**
          * Visits the body of a CaseBlock to hoist declarations.
@@ -100381,7 +102497,7 @@
         function visitCaseBlock(node) {
             var savedEnclosingBlockScopedContainer = enclosingBlockScopedContainer;
             enclosingBlockScopedContainer = node;
-            node = factory.updateCaseBlock(node, ts.visitNodes(node.clauses, nestedElementVisitor, ts.isCaseOrDefaultClause));
+            node = factory.updateCaseBlock(node, ts.visitNodes(node.clauses, topLevelNestedVisitor, ts.isCaseOrDefaultClause));
             enclosingBlockScopedContainer = savedEnclosingBlockScopedContainer;
             return node;
         }
@@ -100391,7 +102507,7 @@
          * @param node The node to visit.
          */
         function visitCaseClause(node) {
-            return factory.updateCaseClause(node, ts.visitNode(node.expression, destructuringAndImportCallVisitor, ts.isExpression), ts.visitNodes(node.statements, nestedElementVisitor, ts.isStatement));
+            return factory.updateCaseClause(node, ts.visitNode(node.expression, visitor, ts.isExpression), ts.visitNodes(node.statements, topLevelNestedVisitor, ts.isStatement));
         }
         /**
          * Visits the body of a DefaultClause to hoist declarations.
@@ -100399,7 +102515,7 @@
          * @param node The node to visit.
          */
         function visitDefaultClause(node) {
-            return ts.visitEachChild(node, nestedElementVisitor, context);
+            return ts.visitEachChild(node, topLevelNestedVisitor, context);
         }
         /**
          * Visits the body of a TryStatement to hoist declarations.
@@ -100407,7 +102523,7 @@
          * @param node The node to visit.
          */
         function visitTryStatement(node) {
-            return ts.visitEachChild(node, nestedElementVisitor, context);
+            return ts.visitEachChild(node, topLevelNestedVisitor, context);
         }
         /**
          * Visits the body of a CatchClause to hoist declarations.
@@ -100417,7 +102533,7 @@
         function visitCatchClause(node) {
             var savedEnclosingBlockScopedContainer = enclosingBlockScopedContainer;
             enclosingBlockScopedContainer = node;
-            node = factory.updateCatchClause(node, node.variableDeclaration, ts.visitNode(node.block, nestedElementVisitor, ts.isBlock));
+            node = factory.updateCatchClause(node, node.variableDeclaration, ts.visitNode(node.block, topLevelNestedVisitor, ts.isBlock));
             enclosingBlockScopedContainer = savedEnclosingBlockScopedContainer;
             return node;
         }
@@ -100429,7 +102545,7 @@
         function visitBlock(node) {
             var savedEnclosingBlockScopedContainer = enclosingBlockScopedContainer;
             enclosingBlockScopedContainer = node;
-            node = ts.visitEachChild(node, nestedElementVisitor, context);
+            node = ts.visitEachChild(node, topLevelNestedVisitor, context);
             enclosingBlockScopedContainer = savedEnclosingBlockScopedContainer;
             return node;
         }
@@ -100441,19 +102557,54 @@
          *
          * @param node The node to visit.
          */
-        function destructuringAndImportCallVisitor(node) {
-            if (ts.isDestructuringAssignment(node)) {
-                return visitDestructuringAssignment(node);
-            }
-            else if (ts.isImportCall(node)) {
-                return visitImportCallExpression(node);
-            }
-            else if ((node.transformFlags & 2048 /* ContainsDestructuringAssignment */) || (node.transformFlags & 4194304 /* ContainsDynamicImport */)) {
-                return ts.visitEachChild(node, destructuringAndImportCallVisitor, context);
-            }
-            else {
+        function visitorWorker(node, valueIsDiscarded) {
+            if (!(node.transformFlags & (2048 /* ContainsDestructuringAssignment */ | 4194304 /* ContainsDynamicImport */ | 67108864 /* ContainsUpdateExpressionForIdentifier */))) {
                 return node;
             }
+            switch (node.kind) {
+                case 240 /* ForStatement */:
+                    return visitForStatement(node, /*isTopLevel*/ false);
+                case 236 /* ExpressionStatement */:
+                    return visitExpressionStatement(node);
+                case 210 /* ParenthesizedExpression */:
+                    return visitParenthesizedExpression(node, valueIsDiscarded);
+                case 345 /* PartiallyEmittedExpression */:
+                    return visitPartiallyEmittedExpression(node, valueIsDiscarded);
+                case 219 /* BinaryExpression */:
+                    if (ts.isDestructuringAssignment(node)) {
+                        return visitDestructuringAssignment(node, valueIsDiscarded);
+                    }
+                    break;
+                case 206 /* CallExpression */:
+                    if (ts.isImportCall(node)) {
+                        return visitImportCallExpression(node);
+                    }
+                    break;
+                case 217 /* PrefixUnaryExpression */:
+                case 218 /* PostfixUnaryExpression */:
+                    return visitPrefixOrPostfixUnaryExpression(node, valueIsDiscarded);
+            }
+            return ts.visitEachChild(node, visitor, context);
+        }
+        /**
+         * Visit nodes to flatten destructuring assignments to exported symbols.
+         *
+         * @param node The node to visit.
+         */
+        function visitor(node) {
+            return visitorWorker(node, /*valueIsDiscarded*/ false);
+        }
+        function discardedValueVisitor(node) {
+            return visitorWorker(node, /*valueIsDiscarded*/ true);
+        }
+        function visitExpressionStatement(node) {
+            return factory.updateExpressionStatement(node, ts.visitNode(node.expression, discardedValueVisitor, ts.isExpression));
+        }
+        function visitParenthesizedExpression(node, valueIsDiscarded) {
+            return factory.updateParenthesizedExpression(node, ts.visitNode(node.expression, valueIsDiscarded ? discardedValueVisitor : visitor, ts.isExpression));
+        }
+        function visitPartiallyEmittedExpression(node, valueIsDiscarded) {
+            return factory.updatePartiallyEmittedExpression(node, ts.visitNode(node.expression, valueIsDiscarded ? discardedValueVisitor : visitor, ts.isExpression));
         }
         function visitImportCallExpression(node) {
             // import("./blah")
@@ -100467,7 +102618,7 @@
             //     };
             // });
             var externalModuleName = ts.getExternalModuleNameLiteral(factory, node, currentSourceFile, host, resolver, compilerOptions);
-            var firstArgument = ts.visitNode(ts.firstOrUndefined(node.arguments), destructuringAndImportCallVisitor);
+            var firstArgument = ts.visitNode(ts.firstOrUndefined(node.arguments), visitor);
             // Only use the external module name if it differs from the first argument. This allows us to preserve the quote style of the argument on output.
             var argument = externalModuleName && (!firstArgument || !ts.isStringLiteral(firstArgument) || firstArgument.text !== externalModuleName.text) ? externalModuleName : firstArgument;
             return factory.createCallExpression(factory.createPropertyAccessExpression(contextObject, factory.createIdentifier("import")), 
@@ -100478,12 +102629,11 @@
          *
          * @param node The node to visit.
          */
-        function visitDestructuringAssignment(node) {
+        function visitDestructuringAssignment(node, valueIsDiscarded) {
             if (hasExportedReferenceInDestructuringTarget(node.left)) {
-                return ts.flattenDestructuringAssignment(node, destructuringAndImportCallVisitor, context, 0 /* All */, 
-                /*needsValue*/ true);
+                return ts.flattenDestructuringAssignment(node, visitor, context, 0 /* All */, !valueIsDiscarded);
             }
-            return ts.visitEachChild(node, destructuringAndImportCallVisitor, context);
+            return ts.visitEachChild(node, visitor, context);
         }
         /**
          * Determines whether the target of a destructuring assignment refers to an exported symbol.
@@ -100511,12 +102661,57 @@
             }
             else if (ts.isIdentifier(node)) {
                 var container = resolver.getReferencedExportContainer(node);
-                return container !== undefined && container.kind === 298 /* SourceFile */;
+                return container !== undefined && container.kind === 300 /* SourceFile */;
             }
             else {
                 return false;
             }
         }
+        function visitPrefixOrPostfixUnaryExpression(node, valueIsDiscarded) {
+            // When we see a prefix or postfix increment expression whose operand is an exported
+            // symbol, we should ensure all exports of that symbol are updated with the correct
+            // value.
+            //
+            // - We do not transform generated identifiers for any reason.
+            // - We do not transform identifiers tagged with the LocalName flag.
+            // - We do not transform identifiers that were originally the name of an enum or
+            //   namespace due to how they are transformed in TypeScript.
+            // - We only transform identifiers that are exported at the top level.
+            if ((node.operator === 45 /* PlusPlusToken */ || node.operator === 46 /* MinusMinusToken */)
+                && ts.isIdentifier(node.operand)
+                && !ts.isGeneratedIdentifier(node.operand)
+                && !ts.isLocalName(node.operand)
+                && !ts.isDeclarationNameOfEnumOrNamespace(node.operand)) {
+                var exportedNames = getExports(node.operand);
+                if (exportedNames) {
+                    var temp = void 0;
+                    var expression = ts.visitNode(node.operand, visitor, ts.isExpression);
+                    if (ts.isPrefixUnaryExpression(node)) {
+                        expression = factory.updatePrefixUnaryExpression(node, expression);
+                    }
+                    else {
+                        expression = factory.updatePostfixUnaryExpression(node, expression);
+                        if (!valueIsDiscarded) {
+                            temp = factory.createTempVariable(hoistVariableDeclaration);
+                            expression = factory.createAssignment(temp, expression);
+                            ts.setTextRange(expression, node);
+                        }
+                        expression = factory.createComma(expression, factory.cloneNode(node.operand));
+                        ts.setTextRange(expression, node);
+                    }
+                    for (var _i = 0, exportedNames_4 = exportedNames; _i < exportedNames_4.length; _i++) {
+                        var exportName = exportedNames_4[_i];
+                        expression = createExportExpression(exportName, preventSubstitution(expression));
+                    }
+                    if (temp) {
+                        expression = factory.createComma(expression, temp);
+                        ts.setTextRange(expression, node);
+                    }
+                    return expression;
+                }
+            }
+            return ts.visitEachChild(node, visitor, context);
+        }
         //
         // Modifier Visitors
         //
@@ -100527,8 +102722,8 @@
          */
         function modifierVisitor(node) {
             switch (node.kind) {
-                case 92 /* ExportKeyword */:
-                case 87 /* DefaultKeyword */:
+                case 93 /* ExportKeyword */:
+                case 88 /* DefaultKeyword */:
                     return undefined;
             }
             return node;
@@ -100544,7 +102739,7 @@
          * @param emitCallback A callback used to emit the node in the printer.
          */
         function onEmitNode(hint, node, emitCallback) {
-            if (node.kind === 298 /* SourceFile */) {
+            if (node.kind === 300 /* SourceFile */) {
                 var id = ts.getOriginalNodeId(node);
                 currentSourceFile = node;
                 moduleInfo = moduleInfoMap[id];
@@ -100594,7 +102789,7 @@
          */
         function substituteUnspecified(node) {
             switch (node.kind) {
-                case 290 /* ShorthandPropertyAssignment */:
+                case 292 /* ShorthandPropertyAssignment */:
                     return substituteShorthandPropertyAssignment(node);
             }
             return node;
@@ -100629,14 +102824,11 @@
          */
         function substituteExpression(node) {
             switch (node.kind) {
-                case 78 /* Identifier */:
+                case 79 /* Identifier */:
                     return substituteExpressionIdentifier(node);
-                case 217 /* BinaryExpression */:
+                case 219 /* BinaryExpression */:
                     return substituteBinaryExpression(node);
-                case 215 /* PrefixUnaryExpression */:
-                case 216 /* PostfixUnaryExpression */:
-                    return substituteUnaryExpression(node);
-                case 227 /* MetaProperty */:
+                case 229 /* MetaProperty */:
                     return substituteMetaProperty(node);
             }
             return node;
@@ -100699,49 +102891,10 @@
                 if (exportedNames) {
                     // For each additional export of the declaration, apply an export assignment.
                     var expression = node;
-                    for (var _i = 0, exportedNames_4 = exportedNames; _i < exportedNames_4.length; _i++) {
-                        var exportName = exportedNames_4[_i];
-                        expression = createExportExpression(exportName, preventSubstitution(expression));
-                    }
-                    return expression;
-                }
-            }
-            return node;
-        }
-        /**
-         * Substitution for a UnaryExpression that may contain an imported or exported symbol.
-         *
-         * @param node The node to substitute.
-         */
-        function substituteUnaryExpression(node) {
-            // When we see a prefix or postfix increment expression whose operand is an exported
-            // symbol, we should ensure all exports of that symbol are updated with the correct
-            // value.
-            //
-            // - We do not substitute generated identifiers for any reason.
-            // - We do not substitute identifiers tagged with the LocalName flag.
-            // - We do not substitute identifiers that were originally the name of an enum or
-            //   namespace due to how they are transformed in TypeScript.
-            // - We only substitute identifiers that are exported at the top level.
-            if ((node.operator === 45 /* PlusPlusToken */ || node.operator === 46 /* MinusMinusToken */)
-                && ts.isIdentifier(node.operand)
-                && !ts.isGeneratedIdentifier(node.operand)
-                && !ts.isLocalName(node.operand)
-                && !ts.isDeclarationNameOfEnumOrNamespace(node.operand)) {
-                var exportedNames = getExports(node.operand);
-                if (exportedNames) {
-                    var expression = node.kind === 216 /* PostfixUnaryExpression */
-                        ? ts.setTextRange(factory.createPrefixUnaryExpression(node.operator, node.operand), node)
-                        : node;
                     for (var _i = 0, exportedNames_5 = exportedNames; _i < exportedNames_5.length; _i++) {
                         var exportName = exportedNames_5[_i];
                         expression = createExportExpression(exportName, preventSubstitution(expression));
                     }
-                    if (node.kind === 216 /* PostfixUnaryExpression */) {
-                        expression = node.operator === 45 /* PlusPlusToken */
-                            ? factory.createSubtract(preventSubstitution(expression), factory.createNumericLiteral(1))
-                            : factory.createAdd(preventSubstitution(expression), factory.createNumericLiteral(1));
-                    }
                     return expression;
                 }
             }
@@ -100765,7 +102918,7 @@
                     || resolver.getReferencedValueDeclaration(name);
                 if (valueDeclaration) {
                     var exportContainer = resolver.getReferencedExportContainer(name, /*prefixLocals*/ false);
-                    if (exportContainer && exportContainer.kind === 298 /* SourceFile */) {
+                    if (exportContainer && exportContainer.kind === 300 /* SourceFile */) {
                         exportedNames = ts.append(exportedNames, factory.getDeclarationName(valueDeclaration));
                     }
                     exportedNames = ts.addRange(exportedNames, moduleInfo && moduleInfo.exportedBindings[ts.getOriginalNodeId(valueDeclaration)]);
@@ -100805,8 +102958,8 @@
         var previousOnSubstituteNode = context.onSubstituteNode;
         context.onEmitNode = onEmitNode;
         context.onSubstituteNode = onSubstituteNode;
-        context.enableEmitNotification(298 /* SourceFile */);
-        context.enableSubstitution(78 /* Identifier */);
+        context.enableEmitNotification(300 /* SourceFile */);
+        context.enableSubstitution(79 /* Identifier */);
         var helperNameSubstitutions;
         return ts.chainBundle(context, transformSourceFile);
         function transformSourceFile(node) {
@@ -100818,7 +102971,7 @@
                 if (!ts.isExternalModule(node) || ts.some(result.statements, ts.isExternalModuleIndicator)) {
                     return result;
                 }
-                return factory.updateSourceFile(result, ts.setTextRange(factory.createNodeArray(__spreadArray(__spreadArray([], result.statements), [ts.createEmptyExports(factory)])), result.statements));
+                return factory.updateSourceFile(result, ts.setTextRange(factory.createNodeArray(__spreadArray(__spreadArray([], result.statements, true), [ts.createEmptyExports(factory)], false)), result.statements));
             }
             return node;
         }
@@ -100837,12 +102990,12 @@
         }
         function visitor(node) {
             switch (node.kind) {
-                case 261 /* ImportEqualsDeclaration */:
+                case 263 /* ImportEqualsDeclaration */:
                     // Elide `import=` as it is not legal with --module ES6
                     return undefined;
-                case 267 /* ExportAssignment */:
+                case 269 /* ExportAssignment */:
                     return visitExportAssignment(node);
-                case 268 /* ExportDeclaration */:
+                case 270 /* ExportDeclaration */:
                     var exportDecl = node;
                     return visitExportDeclaration(exportDecl);
             }
@@ -100970,14 +103123,14 @@
             } : undefined;
         }
         function getAccessorNameVisibilityDiagnosticMessage(symbolAccessibilityResult) {
-            if (ts.hasSyntacticModifier(node, 32 /* Static */)) {
+            if (ts.isStatic(node)) {
                 return symbolAccessibilityResult.errorModuleName ?
                     symbolAccessibilityResult.accessibility === 2 /* CannotBeNamed */ ?
                         ts.Diagnostics.Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named :
                         ts.Diagnostics.Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2 :
                     ts.Diagnostics.Public_static_property_0_of_exported_class_has_or_is_using_private_name_1;
             }
-            else if (node.parent.kind === 253 /* ClassDeclaration */) {
+            else if (node.parent.kind === 255 /* ClassDeclaration */) {
                 return symbolAccessibilityResult.errorModuleName ?
                     symbolAccessibilityResult.accessibility === 2 /* CannotBeNamed */ ?
                         ts.Diagnostics.Public_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named :
@@ -100999,14 +103152,14 @@
             } : undefined;
         }
         function getMethodNameVisibilityDiagnosticMessage(symbolAccessibilityResult) {
-            if (ts.hasSyntacticModifier(node, 32 /* Static */)) {
+            if (ts.isStatic(node)) {
                 return symbolAccessibilityResult.errorModuleName ?
                     symbolAccessibilityResult.accessibility === 2 /* CannotBeNamed */ ?
                         ts.Diagnostics.Public_static_method_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named :
                         ts.Diagnostics.Public_static_method_0_of_exported_class_has_or_is_using_name_1_from_private_module_2 :
                     ts.Diagnostics.Public_static_method_0_of_exported_class_has_or_is_using_private_name_1;
             }
-            else if (node.parent.kind === 253 /* ClassDeclaration */) {
+            else if (node.parent.kind === 255 /* ClassDeclaration */) {
                 return symbolAccessibilityResult.errorModuleName ?
                     symbolAccessibilityResult.accessibility === 2 /* CannotBeNamed */ ?
                         ts.Diagnostics.Public_method_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named :
@@ -101053,7 +103206,7 @@
             return ts.Debug.assertNever(node, "Attempted to set a declaration diagnostic context for unhandled node kind: " + ts.SyntaxKind[node.kind]);
         }
         function getVariableDeclarationTypeVisibilityDiagnosticMessage(symbolAccessibilityResult) {
-            if (node.kind === 250 /* VariableDeclaration */ || node.kind === 199 /* BindingElement */) {
+            if (node.kind === 252 /* VariableDeclaration */ || node.kind === 201 /* BindingElement */) {
                 return symbolAccessibilityResult.errorModuleName ?
                     symbolAccessibilityResult.accessibility === 2 /* CannotBeNamed */ ?
                         ts.Diagnostics.Exported_variable_0_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named :
@@ -101062,17 +103215,17 @@
             }
             // This check is to ensure we don't report error on constructor parameter property as that error would be reported during parameter emit
             // The only exception here is if the constructor was marked as private. we are not emitting the constructor parameters at all.
-            else if (node.kind === 164 /* PropertyDeclaration */ || node.kind === 202 /* PropertyAccessExpression */ || node.kind === 163 /* PropertySignature */ ||
-                (node.kind === 161 /* Parameter */ && ts.hasSyntacticModifier(node.parent, 8 /* Private */))) {
+            else if (node.kind === 165 /* PropertyDeclaration */ || node.kind === 204 /* PropertyAccessExpression */ || node.kind === 164 /* PropertySignature */ ||
+                (node.kind === 162 /* Parameter */ && ts.hasSyntacticModifier(node.parent, 8 /* Private */))) {
                 // TODO(jfreeman): Deal with computed properties in error reporting.
-                if (ts.hasSyntacticModifier(node, 32 /* Static */)) {
+                if (ts.isStatic(node)) {
                     return symbolAccessibilityResult.errorModuleName ?
                         symbolAccessibilityResult.accessibility === 2 /* CannotBeNamed */ ?
                             ts.Diagnostics.Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named :
                             ts.Diagnostics.Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2 :
                         ts.Diagnostics.Public_static_property_0_of_exported_class_has_or_is_using_private_name_1;
                 }
-                else if (node.parent.kind === 253 /* ClassDeclaration */ || node.kind === 161 /* Parameter */) {
+                else if (node.parent.kind === 255 /* ClassDeclaration */ || node.kind === 162 /* Parameter */) {
                     return symbolAccessibilityResult.errorModuleName ?
                         symbolAccessibilityResult.accessibility === 2 /* CannotBeNamed */ ?
                             ts.Diagnostics.Public_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named :
@@ -101097,10 +103250,10 @@
         }
         function getAccessorDeclarationTypeVisibilityError(symbolAccessibilityResult) {
             var diagnosticMessage;
-            if (node.kind === 169 /* SetAccessor */) {
+            if (node.kind === 171 /* SetAccessor */) {
                 // Getters can infer the return type from the returned expression, but setters cannot, so the
                 // "_from_external_module_1_but_cannot_be_named" case cannot occur.
-                if (ts.hasSyntacticModifier(node, 32 /* Static */)) {
+                if (ts.isStatic(node)) {
                     diagnosticMessage = symbolAccessibilityResult.errorModuleName ?
                         ts.Diagnostics.Parameter_type_of_public_static_setter_0_from_exported_class_has_or_is_using_name_1_from_private_module_2 :
                         ts.Diagnostics.Parameter_type_of_public_static_setter_0_from_exported_class_has_or_is_using_private_name_1;
@@ -101112,7 +103265,7 @@
                 }
             }
             else {
-                if (ts.hasSyntacticModifier(node, 32 /* Static */)) {
+                if (ts.isStatic(node)) {
                     diagnosticMessage = symbolAccessibilityResult.errorModuleName ?
                         symbolAccessibilityResult.accessibility === 2 /* CannotBeNamed */ ?
                             ts.Diagnostics.Return_type_of_public_static_getter_0_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named :
@@ -101136,34 +103289,34 @@
         function getReturnTypeVisibilityError(symbolAccessibilityResult) {
             var diagnosticMessage;
             switch (node.kind) {
-                case 171 /* ConstructSignature */:
+                case 173 /* ConstructSignature */:
                     // Interfaces cannot have return types that cannot be named
                     diagnosticMessage = symbolAccessibilityResult.errorModuleName ?
                         ts.Diagnostics.Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1 :
                         ts.Diagnostics.Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_0;
                     break;
-                case 170 /* CallSignature */:
+                case 172 /* CallSignature */:
                     // Interfaces cannot have return types that cannot be named
                     diagnosticMessage = symbolAccessibilityResult.errorModuleName ?
                         ts.Diagnostics.Return_type_of_call_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1 :
                         ts.Diagnostics.Return_type_of_call_signature_from_exported_interface_has_or_is_using_private_name_0;
                     break;
-                case 172 /* IndexSignature */:
+                case 174 /* IndexSignature */:
                     // Interfaces cannot have return types that cannot be named
                     diagnosticMessage = symbolAccessibilityResult.errorModuleName ?
                         ts.Diagnostics.Return_type_of_index_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1 :
                         ts.Diagnostics.Return_type_of_index_signature_from_exported_interface_has_or_is_using_private_name_0;
                     break;
-                case 166 /* MethodDeclaration */:
-                case 165 /* MethodSignature */:
-                    if (ts.hasSyntacticModifier(node, 32 /* Static */)) {
+                case 167 /* MethodDeclaration */:
+                case 166 /* MethodSignature */:
+                    if (ts.isStatic(node)) {
                         diagnosticMessage = symbolAccessibilityResult.errorModuleName ?
                             symbolAccessibilityResult.accessibility === 2 /* CannotBeNamed */ ?
                                 ts.Diagnostics.Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named :
                                 ts.Diagnostics.Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_private_module_1 :
                             ts.Diagnostics.Return_type_of_public_static_method_from_exported_class_has_or_is_using_private_name_0;
                     }
-                    else if (node.parent.kind === 253 /* ClassDeclaration */) {
+                    else if (node.parent.kind === 255 /* ClassDeclaration */) {
                         diagnosticMessage = symbolAccessibilityResult.errorModuleName ?
                             symbolAccessibilityResult.accessibility === 2 /* CannotBeNamed */ ?
                                 ts.Diagnostics.Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named :
@@ -101177,7 +103330,7 @@
                             ts.Diagnostics.Return_type_of_method_from_exported_interface_has_or_is_using_private_name_0;
                     }
                     break;
-                case 252 /* FunctionDeclaration */:
+                case 254 /* FunctionDeclaration */:
                     diagnosticMessage = symbolAccessibilityResult.errorModuleName ?
                         symbolAccessibilityResult.accessibility === 2 /* CannotBeNamed */ ?
                             ts.Diagnostics.Return_type_of_exported_function_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named :
@@ -101202,38 +103355,38 @@
         }
         function getParameterDeclarationTypeVisibilityDiagnosticMessage(symbolAccessibilityResult) {
             switch (node.parent.kind) {
-                case 167 /* Constructor */:
+                case 169 /* Constructor */:
                     return symbolAccessibilityResult.errorModuleName ?
                         symbolAccessibilityResult.accessibility === 2 /* CannotBeNamed */ ?
                             ts.Diagnostics.Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named :
                             ts.Diagnostics.Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_private_module_2 :
                         ts.Diagnostics.Parameter_0_of_constructor_from_exported_class_has_or_is_using_private_name_1;
-                case 171 /* ConstructSignature */:
-                case 176 /* ConstructorType */:
+                case 173 /* ConstructSignature */:
+                case 178 /* ConstructorType */:
                     // Interfaces cannot have parameter types that cannot be named
                     return symbolAccessibilityResult.errorModuleName ?
                         ts.Diagnostics.Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2 :
                         ts.Diagnostics.Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1;
-                case 170 /* CallSignature */:
+                case 172 /* CallSignature */:
                     // Interfaces cannot have parameter types that cannot be named
                     return symbolAccessibilityResult.errorModuleName ?
                         ts.Diagnostics.Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2 :
                         ts.Diagnostics.Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1;
-                case 172 /* IndexSignature */:
+                case 174 /* IndexSignature */:
                     // Interfaces cannot have parameter types that cannot be named
                     return symbolAccessibilityResult.errorModuleName ?
                         ts.Diagnostics.Parameter_0_of_index_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2 :
                         ts.Diagnostics.Parameter_0_of_index_signature_from_exported_interface_has_or_is_using_private_name_1;
-                case 166 /* MethodDeclaration */:
-                case 165 /* MethodSignature */:
-                    if (ts.hasSyntacticModifier(node.parent, 32 /* Static */)) {
+                case 167 /* MethodDeclaration */:
+                case 166 /* MethodSignature */:
+                    if (ts.isStatic(node.parent)) {
                         return symbolAccessibilityResult.errorModuleName ?
                             symbolAccessibilityResult.accessibility === 2 /* CannotBeNamed */ ?
                                 ts.Diagnostics.Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named :
                                 ts.Diagnostics.Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_private_module_2 :
                             ts.Diagnostics.Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1;
                     }
-                    else if (node.parent.parent.kind === 253 /* ClassDeclaration */) {
+                    else if (node.parent.parent.kind === 255 /* ClassDeclaration */) {
                         return symbolAccessibilityResult.errorModuleName ?
                             symbolAccessibilityResult.accessibility === 2 /* CannotBeNamed */ ?
                                 ts.Diagnostics.Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named :
@@ -101246,15 +103399,15 @@
                             ts.Diagnostics.Parameter_0_of_method_from_exported_interface_has_or_is_using_name_1_from_private_module_2 :
                             ts.Diagnostics.Parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1;
                     }
-                case 252 /* FunctionDeclaration */:
-                case 175 /* FunctionType */:
+                case 254 /* FunctionDeclaration */:
+                case 177 /* FunctionType */:
                     return symbolAccessibilityResult.errorModuleName ?
                         symbolAccessibilityResult.accessibility === 2 /* CannotBeNamed */ ?
                             ts.Diagnostics.Parameter_0_of_exported_function_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named :
                             ts.Diagnostics.Parameter_0_of_exported_function_has_or_is_using_name_1_from_private_module_2 :
                         ts.Diagnostics.Parameter_0_of_exported_function_has_or_is_using_private_name_1;
-                case 169 /* SetAccessor */:
-                case 168 /* GetAccessor */:
+                case 171 /* SetAccessor */:
+                case 170 /* GetAccessor */:
                     return symbolAccessibilityResult.errorModuleName ?
                         symbolAccessibilityResult.accessibility === 2 /* CannotBeNamed */ ?
                             ts.Diagnostics.Parameter_0_of_accessor_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named :
@@ -101268,39 +103421,39 @@
             // Type parameter constraints are named by user so we should always be able to name it
             var diagnosticMessage;
             switch (node.parent.kind) {
-                case 253 /* ClassDeclaration */:
+                case 255 /* ClassDeclaration */:
                     diagnosticMessage = ts.Diagnostics.Type_parameter_0_of_exported_class_has_or_is_using_private_name_1;
                     break;
-                case 254 /* InterfaceDeclaration */:
+                case 256 /* InterfaceDeclaration */:
                     diagnosticMessage = ts.Diagnostics.Type_parameter_0_of_exported_interface_has_or_is_using_private_name_1;
                     break;
-                case 191 /* MappedType */:
+                case 193 /* MappedType */:
                     diagnosticMessage = ts.Diagnostics.Type_parameter_0_of_exported_mapped_object_type_is_using_private_name_1;
                     break;
-                case 176 /* ConstructorType */:
-                case 171 /* ConstructSignature */:
+                case 178 /* ConstructorType */:
+                case 173 /* ConstructSignature */:
                     diagnosticMessage = ts.Diagnostics.Type_parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1;
                     break;
-                case 170 /* CallSignature */:
+                case 172 /* CallSignature */:
                     diagnosticMessage = ts.Diagnostics.Type_parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1;
                     break;
-                case 166 /* MethodDeclaration */:
-                case 165 /* MethodSignature */:
-                    if (ts.hasSyntacticModifier(node.parent, 32 /* Static */)) {
+                case 167 /* MethodDeclaration */:
+                case 166 /* MethodSignature */:
+                    if (ts.isStatic(node.parent)) {
                         diagnosticMessage = ts.Diagnostics.Type_parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1;
                     }
-                    else if (node.parent.parent.kind === 253 /* ClassDeclaration */) {
+                    else if (node.parent.parent.kind === 255 /* ClassDeclaration */) {
                         diagnosticMessage = ts.Diagnostics.Type_parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1;
                     }
                     else {
                         diagnosticMessage = ts.Diagnostics.Type_parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1;
                     }
                     break;
-                case 175 /* FunctionType */:
-                case 252 /* FunctionDeclaration */:
+                case 177 /* FunctionType */:
+                case 254 /* FunctionDeclaration */:
                     diagnosticMessage = ts.Diagnostics.Type_parameter_0_of_exported_function_has_or_is_using_private_name_1;
                     break;
-                case 255 /* TypeAliasDeclaration */:
+                case 257 /* TypeAliasDeclaration */:
                     diagnosticMessage = ts.Diagnostics.Type_parameter_0_of_exported_type_alias_has_or_is_using_private_name_1;
                     break;
                 default:
@@ -101317,7 +103470,7 @@
             // Heritage clause is written by user so it can always be named
             if (ts.isClassDeclaration(node.parent.parent)) {
                 // Class or Interface implemented/extended is inaccessible
-                diagnosticMessage = ts.isHeritageClause(node.parent) && node.parent.token === 116 /* ImplementsKeyword */ ?
+                diagnosticMessage = ts.isHeritageClause(node.parent) && node.parent.token === 117 /* ImplementsKeyword */ ?
                     ts.Diagnostics.Implements_clause_of_exported_class_0_has_or_is_using_private_name_1 :
                     node.parent.parent.name ? ts.Diagnostics.extends_clause_of_exported_class_0_has_or_is_using_private_name_1 :
                         ts.Diagnostics.extends_clause_of_exported_class_has_or_is_using_private_name_0;
@@ -101366,7 +103519,7 @@
     }
     function isInternalDeclaration(node, currentSourceFile) {
         var parseTreeNode = ts.getParseTreeNode(node);
-        if (parseTreeNode && parseTreeNode.kind === 161 /* Parameter */) {
+        if (parseTreeNode && parseTreeNode.kind === 162 /* Parameter */) {
             var paramIdx = parseTreeNode.parent.parameters.indexOf(parseTreeNode);
             var previousSibling = paramIdx > 0 ? parseTreeNode.parent.parameters[paramIdx - 1] : undefined;
             var text = currentSourceFile.text;
@@ -101425,7 +103578,8 @@
             moduleResolverHost: host,
             trackReferencedAmbientModule: trackReferencedAmbientModule,
             trackExternalModuleSymbolOfImportTypeNode: trackExternalModuleSymbolOfImportTypeNode,
-            reportNonlocalAugmentation: reportNonlocalAugmentation
+            reportNonlocalAugmentation: reportNonlocalAugmentation,
+            reportNonSerializableProperty: reportNonSerializableProperty
         };
         var errorNameNode;
         var errorFallbackNode;
@@ -101483,8 +103637,10 @@
                     else {
                         context.addDiagnostic(ts.createDiagnosticForNode(symbolAccessibilityResult.errorNode || errorInfo.errorNode, errorInfo.diagnosticMessage, symbolAccessibilityResult.errorSymbolName, symbolAccessibilityResult.errorModuleName));
                     }
+                    return true;
                 }
             }
+            return false;
         }
         function trackExternalModuleSymbolOfImportTypeNode(symbol) {
             if (!isBundledEmit) {
@@ -101493,33 +103649,40 @@
         }
         function trackSymbol(symbol, enclosingDeclaration, meaning) {
             if (symbol.flags & 262144 /* TypeParameter */)
-                return;
-            handleSymbolAccessibilityError(resolver.isSymbolAccessible(symbol, enclosingDeclaration, meaning, /*shouldComputeAliasesToMakeVisible*/ true));
+                return false;
+            var issuedDiagnostic = handleSymbolAccessibilityError(resolver.isSymbolAccessible(symbol, enclosingDeclaration, meaning, /*shouldComputeAliasesToMakeVisible*/ true));
             recordTypeReferenceDirectivesIfNecessary(resolver.getTypeReferenceDirectivesForSymbol(symbol, meaning));
+            return issuedDiagnostic;
         }
         function reportPrivateInBaseOfClassExpression(propertyName) {
             if (errorNameNode || errorFallbackNode) {
                 context.addDiagnostic(ts.createDiagnosticForNode((errorNameNode || errorFallbackNode), ts.Diagnostics.Property_0_of_exported_class_expression_may_not_be_private_or_protected, propertyName));
             }
         }
+        function errorDeclarationNameWithFallback() {
+            return errorNameNode ? ts.declarationNameToString(errorNameNode) :
+                errorFallbackNode && ts.getNameOfDeclaration(errorFallbackNode) ? ts.declarationNameToString(ts.getNameOfDeclaration(errorFallbackNode)) :
+                    errorFallbackNode && ts.isExportAssignment(errorFallbackNode) ? errorFallbackNode.isExportEquals ? "export=" : "default" :
+                        "(Missing)"; // same fallback declarationNameToString uses when node is zero-width (ie, nameless)
+        }
         function reportInaccessibleUniqueSymbolError() {
-            if (errorNameNode) {
-                context.addDiagnostic(ts.createDiagnosticForNode(errorNameNode, ts.Diagnostics.The_inferred_type_of_0_references_an_inaccessible_1_type_A_type_annotation_is_necessary, ts.declarationNameToString(errorNameNode), "unique symbol"));
+            if (errorNameNode || errorFallbackNode) {
+                context.addDiagnostic(ts.createDiagnosticForNode((errorNameNode || errorFallbackNode), ts.Diagnostics.The_inferred_type_of_0_references_an_inaccessible_1_type_A_type_annotation_is_necessary, errorDeclarationNameWithFallback(), "unique symbol"));
             }
         }
         function reportCyclicStructureError() {
-            if (errorNameNode) {
-                context.addDiagnostic(ts.createDiagnosticForNode(errorNameNode, ts.Diagnostics.The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialized_A_type_annotation_is_necessary, ts.declarationNameToString(errorNameNode)));
+            if (errorNameNode || errorFallbackNode) {
+                context.addDiagnostic(ts.createDiagnosticForNode((errorNameNode || errorFallbackNode), ts.Diagnostics.The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialized_A_type_annotation_is_necessary, errorDeclarationNameWithFallback()));
             }
         }
         function reportInaccessibleThisError() {
-            if (errorNameNode) {
-                context.addDiagnostic(ts.createDiagnosticForNode(errorNameNode, ts.Diagnostics.The_inferred_type_of_0_references_an_inaccessible_1_type_A_type_annotation_is_necessary, ts.declarationNameToString(errorNameNode), "this"));
+            if (errorNameNode || errorFallbackNode) {
+                context.addDiagnostic(ts.createDiagnosticForNode((errorNameNode || errorFallbackNode), ts.Diagnostics.The_inferred_type_of_0_references_an_inaccessible_1_type_A_type_annotation_is_necessary, errorDeclarationNameWithFallback(), "this"));
             }
         }
         function reportLikelyUnsafeImportRequiredError(specifier) {
-            if (errorNameNode) {
-                context.addDiagnostic(ts.createDiagnosticForNode(errorNameNode, ts.Diagnostics.The_inferred_type_of_0_cannot_be_named_without_a_reference_to_1_This_is_likely_not_portable_A_type_annotation_is_necessary, ts.declarationNameToString(errorNameNode), specifier));
+            if (errorNameNode || errorFallbackNode) {
+                context.addDiagnostic(ts.createDiagnosticForNode((errorNameNode || errorFallbackNode), ts.Diagnostics.The_inferred_type_of_0_cannot_be_named_without_a_reference_to_1_This_is_likely_not_portable_A_type_annotation_is_necessary, errorDeclarationNameWithFallback(), specifier));
             }
         }
         function reportTruncationError() {
@@ -101538,6 +103701,11 @@
                 }
             }
         }
+        function reportNonSerializableProperty(propertyName) {
+            if (errorNameNode || errorFallbackNode) {
+                context.addDiagnostic(ts.createDiagnosticForNode((errorNameNode || errorFallbackNode), ts.Diagnostics.The_type_of_this_node_cannot_be_serialized_because_its_property_0_cannot_be_serialized, propertyName));
+            }
+        }
         function transformDeclarationsForJS(sourceFile, bundled) {
             var oldDiag = getSymbolAccessibilityDiagnostic;
             getSymbolAccessibilityDiagnostic = function (s) { return (s.errorNode && ts.canProduceDiagnostics(s.errorNode) ? ts.createGetSymbolAccessibilityDiagnosticForNode(s.errorNode)(s) : ({
@@ -101551,10 +103719,10 @@
             return result;
         }
         function transformRoot(node) {
-            if (node.kind === 298 /* SourceFile */ && node.isDeclarationFile) {
+            if (node.kind === 300 /* SourceFile */ && node.isDeclarationFile) {
                 return node;
             }
-            if (node.kind === 299 /* Bundle */) {
+            if (node.kind === 301 /* Bundle */) {
                 isBundledEmit = true;
                 refs = new ts.Map();
                 libs = new ts.Map();
@@ -101577,14 +103745,14 @@
                         resultHasExternalModuleIndicator = false; // unused in external module bundle emit (all external modules are within module blocks, therefore are known to be modules)
                         needsDeclare = false;
                         var statements = ts.isSourceFileJS(sourceFile) ? factory.createNodeArray(transformDeclarationsForJS(sourceFile, /*bundled*/ true)) : ts.visitNodes(sourceFile.statements, visitDeclarationStatements);
-                        var newFile = factory.updateSourceFile(sourceFile, [factory.createModuleDeclaration([], [factory.createModifier(133 /* DeclareKeyword */)], factory.createStringLiteral(ts.getResolvedExternalModuleName(context.getEmitHost(), sourceFile)), factory.createModuleBlock(ts.setTextRange(factory.createNodeArray(transformAndReplaceLatePaintedStatements(statements)), sourceFile.statements)))], /*isDeclarationFile*/ true, /*referencedFiles*/ [], /*typeReferences*/ [], /*hasNoDefaultLib*/ false, /*libReferences*/ []);
+                        var newFile = factory.updateSourceFile(sourceFile, [factory.createModuleDeclaration([], [factory.createModifier(134 /* DeclareKeyword */)], factory.createStringLiteral(ts.getResolvedExternalModuleName(context.getEmitHost(), sourceFile)), factory.createModuleBlock(ts.setTextRange(factory.createNodeArray(transformAndReplaceLatePaintedStatements(statements)), sourceFile.statements)))], /*isDeclarationFile*/ true, /*referencedFiles*/ [], /*typeReferences*/ [], /*hasNoDefaultLib*/ false, /*libReferences*/ []);
                         return newFile;
                     }
                     needsDeclare = true;
                     var updated = ts.isSourceFileJS(sourceFile) ? factory.createNodeArray(transformDeclarationsForJS(sourceFile)) : ts.visitNodes(sourceFile.statements, visitDeclarationStatements);
                     return factory.updateSourceFile(sourceFile, transformAndReplaceLatePaintedStatements(updated), /*isDeclarationFile*/ true, /*referencedFiles*/ [], /*typeReferences*/ [], /*hasNoDefaultLib*/ false, /*libReferences*/ []);
                 }), ts.mapDefined(node.prepends, function (prepend) {
-                    if (prepend.kind === 301 /* InputFiles */) {
+                    if (prepend.kind === 303 /* InputFiles */) {
                         var sourceFile = ts.createUnparsedSourceFile(prepend, "dts", stripInternal);
                         hasNoDefaultLib_1 = hasNoDefaultLib_1 || !!sourceFile.hasNoDefaultLib;
                         collectReferences(sourceFile, refs);
@@ -101633,7 +103801,7 @@
                 refs.forEach(referenceVisitor);
                 emittedImports = ts.filter(combinedStatements, ts.isAnyImportSyntax);
                 if (ts.isExternalModule(node) && (!resultHasExternalModuleIndicator || (needsScopeFixMarker && !resultHasScopeMarker))) {
-                    combinedStatements = ts.setTextRange(factory.createNodeArray(__spreadArray(__spreadArray([], combinedStatements), [ts.createEmptyExports(factory)])), combinedStatements);
+                    combinedStatements = ts.setTextRange(factory.createNodeArray(__spreadArray(__spreadArray([], combinedStatements, true), [ts.createEmptyExports(factory)], false)), combinedStatements);
                 }
             }
             var updated = factory.updateSourceFile(node, combinedStatements, /*isDeclarationFile*/ true, references, getFileReferencesForUsedTypeReferences(), node.hasNoDefaultLib, getLibReferences());
@@ -101676,8 +103844,7 @@
                         declFileName = paths.declarationFilePath || paths.jsFilePath || file.fileName;
                     }
                     if (declFileName) {
-                        var specifier = ts.moduleSpecifiers.getModuleSpecifier(options, currentSourceFile, ts.toPath(outputFilePath, host.getCurrentDirectory(), host.getCanonicalFileName), ts.toPath(declFileName, host.getCurrentDirectory(), host.getCanonicalFileName), host, 
-                        /*preferences*/ undefined);
+                        var specifier = ts.moduleSpecifiers.getModuleSpecifier(options, currentSourceFile, ts.toPath(outputFilePath, host.getCurrentDirectory(), host.getCanonicalFileName), ts.toPath(declFileName, host.getCurrentDirectory(), host.getCanonicalFileName), host);
                         if (!ts.pathIsRelative(specifier)) {
                             // If some compiler option/symlink/whatever allows access to the file containing the ambient module declaration
                             // via a non-relative name, emit a type reference directive to that non-relative name, rather than
@@ -101721,11 +103888,11 @@
             return ret;
         }
         function filterBindingPatternInitializers(name) {
-            if (name.kind === 78 /* Identifier */) {
+            if (name.kind === 79 /* Identifier */) {
                 return name;
             }
             else {
-                if (name.kind === 198 /* ArrayBindingPattern */) {
+                if (name.kind === 200 /* ArrayBindingPattern */) {
                     return factory.updateArrayBindingPattern(name, ts.visitNodes(name.elements, visitBindingElement));
                 }
                 else {
@@ -101733,7 +103900,7 @@
                 }
             }
             function visitBindingElement(elem) {
-                if (elem.kind === 223 /* OmittedExpression */) {
+                if (elem.kind === 225 /* OmittedExpression */) {
                     return elem;
                 }
                 return factory.updateBindingElement(elem, elem.dotDotDotToken, elem.propertyName, filterBindingPatternInitializers(elem.name), shouldPrintWithInitializer(elem) ? elem.initializer : undefined);
@@ -101771,19 +103938,19 @@
                 // Literal const declarations will have an initializer ensured rather than a type
                 return;
             }
-            var shouldUseResolverType = node.kind === 161 /* Parameter */ &&
+            var shouldUseResolverType = node.kind === 162 /* Parameter */ &&
                 (resolver.isRequiredInitializedParameter(node) ||
                     resolver.isOptionalUninitializedParameterProperty(node));
             if (type && !shouldUseResolverType) {
                 return ts.visitNode(type, visitDeclarationSubtree);
             }
             if (!ts.getParseTreeNode(node)) {
-                return type ? ts.visitNode(type, visitDeclarationSubtree) : factory.createKeywordTypeNode(128 /* AnyKeyword */);
+                return type ? ts.visitNode(type, visitDeclarationSubtree) : factory.createKeywordTypeNode(129 /* AnyKeyword */);
             }
-            if (node.kind === 169 /* SetAccessor */) {
+            if (node.kind === 171 /* SetAccessor */) {
                 // Set accessors with no associated type node (from it's param or get accessor return) are `any` since they are never contextually typed right now
                 // (The inferred type here will be void, but the old declaration emitter printed `any`, so this replicates that)
-                return factory.createKeywordTypeNode(128 /* AnyKeyword */);
+                return factory.createKeywordTypeNode(129 /* AnyKeyword */);
             }
             errorNameNode = node.name;
             var oldDiag;
@@ -101791,12 +103958,12 @@
                 oldDiag = getSymbolAccessibilityDiagnostic;
                 getSymbolAccessibilityDiagnostic = ts.createGetSymbolAccessibilityDiagnosticForNode(node);
             }
-            if (node.kind === 250 /* VariableDeclaration */ || node.kind === 199 /* BindingElement */) {
+            if (node.kind === 252 /* VariableDeclaration */ || node.kind === 201 /* BindingElement */) {
                 return cleanup(resolver.createTypeOfDeclaration(node, enclosingDeclaration, declarationEmitNodeBuilderFlags, symbolTracker));
             }
-            if (node.kind === 161 /* Parameter */
-                || node.kind === 164 /* PropertyDeclaration */
-                || node.kind === 163 /* PropertySignature */) {
+            if (node.kind === 162 /* Parameter */
+                || node.kind === 165 /* PropertyDeclaration */
+                || node.kind === 164 /* PropertySignature */) {
                 if (!node.initializer)
                     return cleanup(resolver.createTypeOfDeclaration(node, enclosingDeclaration, declarationEmitNodeBuilderFlags, symbolTracker, shouldUseResolverType));
                 return cleanup(resolver.createTypeOfDeclaration(node, enclosingDeclaration, declarationEmitNodeBuilderFlags, symbolTracker, shouldUseResolverType) || resolver.createTypeOfExpression(node.initializer, enclosingDeclaration, declarationEmitNodeBuilderFlags, symbolTracker));
@@ -101807,30 +103974,41 @@
                 if (!suppressNewDiagnosticContexts) {
                     getSymbolAccessibilityDiagnostic = oldDiag;
                 }
-                return returnValue || factory.createKeywordTypeNode(128 /* AnyKeyword */);
+                return returnValue || factory.createKeywordTypeNode(129 /* AnyKeyword */);
             }
         }
         function isDeclarationAndNotVisible(node) {
             node = ts.getParseTreeNode(node);
             switch (node.kind) {
-                case 252 /* FunctionDeclaration */:
-                case 257 /* ModuleDeclaration */:
-                case 254 /* InterfaceDeclaration */:
-                case 253 /* ClassDeclaration */:
-                case 255 /* TypeAliasDeclaration */:
-                case 256 /* EnumDeclaration */:
+                case 254 /* FunctionDeclaration */:
+                case 259 /* ModuleDeclaration */:
+                case 256 /* InterfaceDeclaration */:
+                case 255 /* ClassDeclaration */:
+                case 257 /* TypeAliasDeclaration */:
+                case 258 /* EnumDeclaration */:
                     return !resolver.isDeclarationVisible(node);
                 // The following should be doing their own visibility checks based on filtering their members
-                case 250 /* VariableDeclaration */:
+                case 252 /* VariableDeclaration */:
                     return !getBindingNameVisible(node);
-                case 261 /* ImportEqualsDeclaration */:
-                case 262 /* ImportDeclaration */:
-                case 268 /* ExportDeclaration */:
-                case 267 /* ExportAssignment */:
+                case 263 /* ImportEqualsDeclaration */:
+                case 264 /* ImportDeclaration */:
+                case 270 /* ExportDeclaration */:
+                case 269 /* ExportAssignment */:
                     return false;
+                case 168 /* ClassStaticBlockDeclaration */:
+                    return true;
             }
             return false;
         }
+        // If the ExpandoFunctionDeclaration have multiple overloads, then we only need to emit properties for the last one.
+        function shouldEmitFunctionProperties(input) {
+            var _a;
+            if (input.body) {
+                return true;
+            }
+            var overloadSignatures = (_a = input.symbol.declarations) === null || _a === void 0 ? void 0 : _a.filter(function (decl) { return ts.isFunctionDeclaration(decl) && !decl.body; });
+            return !overloadSignatures || overloadSignatures.indexOf(input) === overloadSignatures.length - 1;
+        }
         function getBindingNameVisible(elem) {
             if (ts.isOmittedExpression(elem)) {
                 return false;
@@ -101907,7 +104085,7 @@
         function rewriteModuleSpecifier(parent, input) {
             if (!input)
                 return undefined; // TODO: GH#18217
-            resultHasExternalModuleIndicator = resultHasExternalModuleIndicator || (parent.kind !== 257 /* ModuleDeclaration */ && parent.kind !== 196 /* ImportType */);
+            resultHasExternalModuleIndicator = resultHasExternalModuleIndicator || (parent.kind !== 259 /* ModuleDeclaration */ && parent.kind !== 198 /* ImportType */);
             if (ts.isStringLiteralLike(input)) {
                 if (isBundledEmit) {
                     var newName = ts.getExternalModuleNameFromDeclaration(context.getEmitHost(), resolver, parent);
@@ -101927,7 +104105,7 @@
         function transformImportEqualsDeclaration(decl) {
             if (!resolver.isDeclarationVisible(decl))
                 return;
-            if (decl.moduleReference.kind === 273 /* ExternalModuleReference */) {
+            if (decl.moduleReference.kind === 275 /* ExternalModuleReference */) {
                 // Rewrite external module names if necessary
                 var specifier = ts.getExternalModuleImportEqualsDeclarationExpression(decl);
                 return factory.updateImportEqualsDeclaration(decl, 
@@ -101954,7 +104132,7 @@
                 return visibleDefaultBinding && factory.updateImportDeclaration(decl, /*decorators*/ undefined, decl.modifiers, factory.updateImportClause(decl.importClause, decl.importClause.isTypeOnly, visibleDefaultBinding, 
                 /*namedBindings*/ undefined), rewriteModuleSpecifier(decl, decl.moduleSpecifier));
             }
-            if (decl.importClause.namedBindings.kind === 264 /* NamespaceImport */) {
+            if (decl.importClause.namedBindings.kind === 266 /* NamespaceImport */) {
                 // Namespace import (optionally with visible default)
                 var namedBindings = resolver.isDeclarationVisible(decl.importClause.namedBindings) ? decl.importClause.namedBindings : /*namedBindings*/ undefined;
                 return visibleDefaultBinding || namedBindings ? factory.updateImportDeclaration(decl, /*decorators*/ undefined, decl.modifiers, factory.updateImportClause(decl.importClause, decl.importClause.isTypeOnly, visibleDefaultBinding, namedBindings), rewriteModuleSpecifier(decl, decl.moduleSpecifier)) : undefined;
@@ -102049,7 +104227,7 @@
             // We'd see a TDZ violation at runtime
             var canProduceDiagnostic = ts.canProduceDiagnostics(input);
             var oldWithinObjectLiteralType = suppressNewDiagnosticContexts;
-            var shouldEnterSuppressNewDiagnosticsContextContext = ((input.kind === 178 /* TypeLiteral */ || input.kind === 191 /* MappedType */) && input.parent.kind !== 255 /* TypeAliasDeclaration */);
+            var shouldEnterSuppressNewDiagnosticsContextContext = ((input.kind === 180 /* TypeLiteral */ || input.kind === 193 /* MappedType */) && input.parent.kind !== 257 /* TypeAliasDeclaration */);
             // Emit methods which are private as properties with no type information
             if (ts.isMethodDeclaration(input) || ts.isMethodSignature(input)) {
                 if (ts.hasEffectiveModifier(input, 8 /* Private */)) {
@@ -102070,21 +104248,21 @@
             }
             if (isProcessedComponent(input)) {
                 switch (input.kind) {
-                    case 224 /* ExpressionWithTypeArguments */: {
+                    case 226 /* ExpressionWithTypeArguments */: {
                         if ((ts.isEntityName(input.expression) || ts.isEntityNameExpression(input.expression))) {
                             checkEntityNameVisibility(input.expression, enclosingDeclaration);
                         }
                         var node = ts.visitEachChild(input, visitDeclarationSubtree, context);
                         return cleanup(factory.updateExpressionWithTypeArguments(node, node.expression, node.typeArguments));
                     }
-                    case 174 /* TypeReference */: {
+                    case 176 /* TypeReference */: {
                         checkEntityNameVisibility(input.typeName, enclosingDeclaration);
                         var node = ts.visitEachChild(input, visitDeclarationSubtree, context);
                         return cleanup(factory.updateTypeReferenceNode(node, node.typeName, node.typeArguments));
                     }
-                    case 171 /* ConstructSignature */:
+                    case 173 /* ConstructSignature */:
                         return cleanup(factory.updateConstructSignature(input, ensureTypeParams(input, input.typeParameters), updateParamsList(input, input.parameters), ensureType(input, input.type)));
-                    case 167 /* Constructor */: {
+                    case 169 /* Constructor */: {
                         // A constructor declaration may not have a type annotation
                         var ctor = factory.createConstructorDeclaration(
                         /*decorators*/ undefined, 
@@ -102092,7 +104270,7 @@
                         /*body*/ undefined);
                         return cleanup(ctor);
                     }
-                    case 166 /* MethodDeclaration */: {
+                    case 167 /* MethodDeclaration */: {
                         if (ts.isPrivateIdentifier(input.name)) {
                             return cleanup(/*returnValue*/ undefined);
                         }
@@ -102102,7 +104280,7 @@
                         /*body*/ undefined);
                         return cleanup(sig);
                     }
-                    case 168 /* GetAccessor */: {
+                    case 170 /* GetAccessor */: {
                         if (ts.isPrivateIdentifier(input.name)) {
                             return cleanup(/*returnValue*/ undefined);
                         }
@@ -102111,7 +104289,7 @@
                         /*decorators*/ undefined, ensureModifiers(input), input.name, updateAccessorParamsList(input, ts.hasEffectiveModifier(input, 8 /* Private */)), ensureType(input, accessorType), 
                         /*body*/ undefined));
                     }
-                    case 169 /* SetAccessor */: {
+                    case 171 /* SetAccessor */: {
                         if (ts.isPrivateIdentifier(input.name)) {
                             return cleanup(/*returnValue*/ undefined);
                         }
@@ -102119,31 +104297,31 @@
                         /*decorators*/ undefined, ensureModifiers(input), input.name, updateAccessorParamsList(input, ts.hasEffectiveModifier(input, 8 /* Private */)), 
                         /*body*/ undefined));
                     }
-                    case 164 /* PropertyDeclaration */:
+                    case 165 /* PropertyDeclaration */:
                         if (ts.isPrivateIdentifier(input.name)) {
                             return cleanup(/*returnValue*/ undefined);
                         }
                         return cleanup(factory.updatePropertyDeclaration(input, 
                         /*decorators*/ undefined, ensureModifiers(input), input.name, input.questionToken, ensureType(input, input.type), ensureNoInitializer(input)));
-                    case 163 /* PropertySignature */:
+                    case 164 /* PropertySignature */:
                         if (ts.isPrivateIdentifier(input.name)) {
                             return cleanup(/*returnValue*/ undefined);
                         }
                         return cleanup(factory.updatePropertySignature(input, ensureModifiers(input), input.name, input.questionToken, ensureType(input, input.type)));
-                    case 165 /* MethodSignature */: {
+                    case 166 /* MethodSignature */: {
                         if (ts.isPrivateIdentifier(input.name)) {
                             return cleanup(/*returnValue*/ undefined);
                         }
                         return cleanup(factory.updateMethodSignature(input, ensureModifiers(input), input.name, input.questionToken, ensureTypeParams(input, input.typeParameters), updateParamsList(input, input.parameters), ensureType(input, input.type)));
                     }
-                    case 170 /* CallSignature */: {
+                    case 172 /* CallSignature */: {
                         return cleanup(factory.updateCallSignature(input, ensureTypeParams(input, input.typeParameters), updateParamsList(input, input.parameters), ensureType(input, input.type)));
                     }
-                    case 172 /* IndexSignature */: {
+                    case 174 /* IndexSignature */: {
                         return cleanup(factory.updateIndexSignature(input, 
-                        /*decorators*/ undefined, ensureModifiers(input), updateParamsList(input, input.parameters), ts.visitNode(input.type, visitDeclarationSubtree) || factory.createKeywordTypeNode(128 /* AnyKeyword */)));
+                        /*decorators*/ undefined, ensureModifiers(input), updateParamsList(input, input.parameters), ts.visitNode(input.type, visitDeclarationSubtree) || factory.createKeywordTypeNode(129 /* AnyKeyword */)));
                     }
-                    case 250 /* VariableDeclaration */: {
+                    case 252 /* VariableDeclaration */: {
                         if (ts.isBindingPattern(input.name)) {
                             return recreateBindingPattern(input.name);
                         }
@@ -102151,13 +104329,13 @@
                         suppressNewDiagnosticContexts = true; // Variable declaration types also suppress new diagnostic contexts, provided the contexts wouldn't be made for binding pattern types
                         return cleanup(factory.updateVariableDeclaration(input, input.name, /*exclamationToken*/ undefined, ensureType(input, input.type), ensureNoInitializer(input)));
                     }
-                    case 160 /* TypeParameter */: {
+                    case 161 /* TypeParameter */: {
                         if (isPrivateMethodTypeParameter(input) && (input.default || input.constraint)) {
                             return cleanup(factory.updateTypeParameterDeclaration(input, input.name, /*constraint*/ undefined, /*defaultType*/ undefined));
                         }
                         return cleanup(ts.visitEachChild(input, visitDeclarationSubtree, context));
                     }
-                    case 185 /* ConditionalType */: {
+                    case 187 /* ConditionalType */: {
                         // We have to process conditional types in a special way because for visibility purposes we need to push a new enclosingDeclaration
                         // just for the `infer` types in the true branch. It's an implicit declaration scope that only applies to _part_ of the type.
                         var checkType = ts.visitNode(input.checkType, visitDeclarationSubtree);
@@ -102169,13 +104347,13 @@
                         var falseType = ts.visitNode(input.falseType, visitDeclarationSubtree);
                         return cleanup(factory.updateConditionalTypeNode(input, checkType, extendsType, trueType, falseType));
                     }
-                    case 175 /* FunctionType */: {
+                    case 177 /* FunctionType */: {
                         return cleanup(factory.updateFunctionTypeNode(input, ts.visitNodes(input.typeParameters, visitDeclarationSubtree), updateParamsList(input, input.parameters), ts.visitNode(input.type, visitDeclarationSubtree)));
                     }
-                    case 176 /* ConstructorType */: {
+                    case 178 /* ConstructorType */: {
                         return cleanup(factory.updateConstructorTypeNode(input, ensureModifiers(input), ts.visitNodes(input.typeParameters, visitDeclarationSubtree), updateParamsList(input, input.parameters), ts.visitNode(input.type, visitDeclarationSubtree)));
                     }
-                    case 196 /* ImportType */: {
+                    case 198 /* ImportType */: {
                         if (!ts.isLiteralImportTypeNode(input))
                             return cleanup(input);
                         return cleanup(factory.updateImportTypeNode(input, factory.updateLiteralTypeNode(input.argument, rewriteModuleSpecifier(input, input.argument.literal)), input.qualifier, ts.visitNodes(input.typeArguments, visitDeclarationSubtree, ts.isTypeNode), input.isTypeOf));
@@ -102207,7 +104385,7 @@
             }
         }
         function isPrivateMethodTypeParameter(node) {
-            return node.parent.kind === 166 /* MethodDeclaration */ && ts.hasEffectiveModifier(node.parent, 8 /* Private */);
+            return node.parent.kind === 167 /* MethodDeclaration */ && ts.hasEffectiveModifier(node.parent, 8 /* Private */);
         }
         function visitDeclarationStatements(input) {
             if (!isPreservedDeclarationStatement(input)) {
@@ -102217,7 +104395,7 @@
             if (shouldStripInternal(input))
                 return;
             switch (input.kind) {
-                case 268 /* ExportDeclaration */: {
+                case 270 /* ExportDeclaration */: {
                     if (ts.isSourceFile(input.parent)) {
                         resultHasExternalModuleIndicator = true;
                     }
@@ -102227,13 +104405,13 @@
                     return factory.updateExportDeclaration(input, 
                     /*decorators*/ undefined, input.modifiers, input.isTypeOnly, input.exportClause, rewriteModuleSpecifier(input, input.moduleSpecifier));
                 }
-                case 267 /* ExportAssignment */: {
+                case 269 /* ExportAssignment */: {
                     // Always visible if the parent node isn't dropped for being not visible
                     if (ts.isSourceFile(input.parent)) {
                         resultHasExternalModuleIndicator = true;
                     }
                     resultHasScopeMarker = true;
-                    if (input.expression.kind === 78 /* Identifier */) {
+                    if (input.expression.kind === 79 /* Identifier */) {
                         return input;
                     }
                     else {
@@ -102245,7 +104423,7 @@
                         errorFallbackNode = input;
                         var varDecl = factory.createVariableDeclaration(newId, /*exclamationToken*/ undefined, resolver.createTypeOfExpression(input.expression, input, declarationEmitNodeBuilderFlags, symbolTracker), /*initializer*/ undefined);
                         errorFallbackNode = undefined;
-                        var statement = factory.createVariableStatement(needsDeclare ? [factory.createModifier(133 /* DeclareKeyword */)] : [], factory.createVariableDeclarationList([varDecl], 2 /* Const */));
+                        var statement = factory.createVariableStatement(needsDeclare ? [factory.createModifier(134 /* DeclareKeyword */)] : [], factory.createVariableDeclarationList([varDecl], 2 /* Const */));
                         return [statement, factory.updateExportAssignment(input, input.decorators, input.modifiers, newId)];
                     }
                 }
@@ -102268,10 +104446,10 @@
             if (shouldStripInternal(input))
                 return;
             switch (input.kind) {
-                case 261 /* ImportEqualsDeclaration */: {
+                case 263 /* ImportEqualsDeclaration */: {
                     return transformImportEqualsDeclaration(input);
                 }
-                case 262 /* ImportDeclaration */: {
+                case 264 /* ImportDeclaration */: {
                     return transformImportDeclaration(input);
                 }
             }
@@ -102292,20 +104470,20 @@
             }
             var previousNeedsDeclare = needsDeclare;
             switch (input.kind) {
-                case 255 /* TypeAliasDeclaration */: // Type aliases get `declare`d if need be (for legacy support), but that's all
+                case 257 /* TypeAliasDeclaration */: // Type aliases get `declare`d if need be (for legacy support), but that's all
                     return cleanup(factory.updateTypeAliasDeclaration(input, 
                     /*decorators*/ undefined, ensureModifiers(input), input.name, ts.visitNodes(input.typeParameters, visitDeclarationSubtree, ts.isTypeParameterDeclaration), ts.visitNode(input.type, visitDeclarationSubtree, ts.isTypeNode)));
-                case 254 /* InterfaceDeclaration */: {
+                case 256 /* InterfaceDeclaration */: {
                     return cleanup(factory.updateInterfaceDeclaration(input, 
                     /*decorators*/ undefined, ensureModifiers(input), input.name, ensureTypeParams(input, input.typeParameters), transformHeritageClauses(input.heritageClauses), ts.visitNodes(input.members, visitDeclarationSubtree)));
                 }
-                case 252 /* FunctionDeclaration */: {
+                case 254 /* FunctionDeclaration */: {
                     // Generators lose their generator-ness, excepting their return type
                     var clean = cleanup(factory.updateFunctionDeclaration(input, 
                     /*decorators*/ undefined, ensureModifiers(input), 
                     /*asteriskToken*/ undefined, input.name, ensureTypeParams(input, input.typeParameters), updateParamsList(input, input.parameters), ensureType(input, input.type), 
                     /*body*/ undefined));
-                    if (clean && resolver.isExpandoFunctionDeclaration(input)) {
+                    if (clean && resolver.isExpandoFunctionDeclaration(input) && shouldEmitFunctionProperties(input)) {
                         var props = resolver.getPropertiesOfContainerFunction(input);
                         // Use parseNodeFactory so it is usable as an enclosing declaration
                         var fakespace_1 = ts.parseNodeFactory.createModuleDeclaration(/*decorators*/ undefined, /*modifiers*/ undefined, clean.name || factory.createIdentifier("_default"), factory.createModuleBlock([]), 16 /* Namespace */);
@@ -102327,7 +104505,7 @@
                                 exportMappings_1.push([name, nameStr]);
                             }
                             var varDecl = factory.createVariableDeclaration(name, /*exclamationToken*/ undefined, type, /*initializer*/ undefined);
-                            return factory.createVariableStatement(isNonContextualKeywordName ? undefined : [factory.createToken(92 /* ExportKeyword */)], factory.createVariableDeclarationList([varDecl]));
+                            return factory.createVariableStatement(isNonContextualKeywordName ? undefined : [factory.createToken(93 /* ExportKeyword */)], factory.createVariableDeclarationList([varDecl]));
                         });
                         if (!exportMappings_1.length) {
                             declarations = ts.mapDefined(declarations, function (declaration) { return factory.updateModifiers(declaration, 0 /* None */); });
@@ -102366,10 +104544,10 @@
                         return clean;
                     }
                 }
-                case 257 /* ModuleDeclaration */: {
+                case 259 /* ModuleDeclaration */: {
                     needsDeclare = false;
                     var inner = input.body;
-                    if (inner && inner.kind === 258 /* ModuleBlock */) {
+                    if (inner && inner.kind === 260 /* ModuleBlock */) {
                         var oldNeedsScopeFix = needsScopeFixMarker;
                         var oldHasScopeFix = resultHasScopeMarker;
                         resultHasScopeMarker = false;
@@ -102385,7 +104563,7 @@
                         // 3. Some things are exported, some are not, and there's no marker - add an empty marker
                         if (!ts.isGlobalScopeAugmentation(input) && !hasScopeMarker(lateStatements) && !resultHasScopeMarker) {
                             if (needsScopeFixMarker) {
-                                lateStatements = factory.createNodeArray(__spreadArray(__spreadArray([], lateStatements), [ts.createEmptyExports(factory)]));
+                                lateStatements = factory.createNodeArray(__spreadArray(__spreadArray([], lateStatements, true), [ts.createEmptyExports(factory)], false));
                             }
                             else {
                                 lateStatements = ts.visitNodes(lateStatements, stripExportModifiers);
@@ -102412,7 +104590,7 @@
                         /*decorators*/ undefined, mods, input.name, body));
                     }
                 }
-                case 253 /* ClassDeclaration */: {
+                case 255 /* ClassDeclaration */: {
                     errorNameNode = input.name;
                     errorFallbackNode = input;
                     var modifiers = factory.createNodeArray(ensureModifiers(input));
@@ -102425,7 +104603,7 @@
                             if (!ts.hasSyntacticModifier(param, 16476 /* ParameterPropertyModifier */) || shouldStripInternal(param))
                                 return;
                             getSymbolAccessibilityDiagnostic = ts.createGetSymbolAccessibilityDiagnosticForNode(param);
-                            if (param.name.kind === 78 /* Identifier */) {
+                            if (param.name.kind === 79 /* Identifier */) {
                                 return preserveJsDoc(factory.createPropertyDeclaration(
                                 /*decorators*/ undefined, ensureModifiers(param), param.name, param.questionToken, ensureType(param, param.type), ensureNoInitializer(param)), param);
                             }
@@ -102467,7 +104645,7 @@
                     var memberNodes = ts.concatenate(ts.concatenate(privateIdentifier, parameterProperties), ts.visitNodes(input.members, visitDeclarationSubtree));
                     var members = factory.createNodeArray(memberNodes);
                     var extendsClause_1 = ts.getEffectiveBaseTypeNode(input);
-                    if (extendsClause_1 && !ts.isEntityNameExpression(extendsClause_1.expression) && extendsClause_1.expression.kind !== 103 /* NullKeyword */) {
+                    if (extendsClause_1 && !ts.isEntityNameExpression(extendsClause_1.expression) && extendsClause_1.expression.kind !== 104 /* NullKeyword */) {
                         // We must add a temporary declaration for the extends clause expression
                         var oldId = input.name ? ts.unescapeLeadingUnderscores(input.name.escapedText) : "default";
                         var newId_1 = factory.createUniqueName(oldId + "_base", 16 /* Optimistic */);
@@ -102477,16 +104655,16 @@
                             typeName: input.name
                         }); };
                         var varDecl = factory.createVariableDeclaration(newId_1, /*exclamationToken*/ undefined, resolver.createTypeOfExpression(extendsClause_1.expression, input, declarationEmitNodeBuilderFlags, symbolTracker), /*initializer*/ undefined);
-                        var statement = factory.createVariableStatement(needsDeclare ? [factory.createModifier(133 /* DeclareKeyword */)] : [], factory.createVariableDeclarationList([varDecl], 2 /* Const */));
+                        var statement = factory.createVariableStatement(needsDeclare ? [factory.createModifier(134 /* DeclareKeyword */)] : [], factory.createVariableDeclarationList([varDecl], 2 /* Const */));
                         var heritageClauses = factory.createNodeArray(ts.map(input.heritageClauses, function (clause) {
-                            if (clause.token === 93 /* ExtendsKeyword */) {
+                            if (clause.token === 94 /* ExtendsKeyword */) {
                                 var oldDiag_2 = getSymbolAccessibilityDiagnostic;
                                 getSymbolAccessibilityDiagnostic = ts.createGetSymbolAccessibilityDiagnosticForNode(clause.types[0]);
                                 var newClause = factory.updateHeritageClause(clause, ts.map(clause.types, function (t) { return factory.updateExpressionWithTypeArguments(t, newId_1, ts.visitNodes(t.typeArguments, visitDeclarationSubtree)); }));
                                 getSymbolAccessibilityDiagnostic = oldDiag_2;
                                 return newClause;
                             }
-                            return factory.updateHeritageClause(clause, ts.visitNodes(factory.createNodeArray(ts.filter(clause.types, function (t) { return ts.isEntityNameExpression(t.expression) || t.expression.kind === 103 /* NullKeyword */; })), visitDeclarationSubtree));
+                            return factory.updateHeritageClause(clause, ts.visitNodes(factory.createNodeArray(ts.filter(clause.types, function (t) { return ts.isEntityNameExpression(t.expression) || t.expression.kind === 104 /* NullKeyword */; })), visitDeclarationSubtree));
                         }));
                         return [statement, cleanup(factory.updateClassDeclaration(input, 
                             /*decorators*/ undefined, modifiers, input.name, typeParameters, heritageClauses, members))]; // TODO: GH#18217
@@ -102497,10 +104675,10 @@
                         /*decorators*/ undefined, modifiers, input.name, typeParameters, heritageClauses, members));
                     }
                 }
-                case 233 /* VariableStatement */: {
+                case 235 /* VariableStatement */: {
                     return cleanup(transformVariableStatement(input));
                 }
-                case 256 /* EnumDeclaration */: {
+                case 258 /* EnumDeclaration */: {
                     return cleanup(factory.updateEnumDeclaration(input, /*decorators*/ undefined, factory.createNodeArray(ensureModifiers(input)), input.name, factory.createNodeArray(ts.mapDefined(input.members, function (m) {
                         if (shouldStripInternal(m))
                             return;
@@ -102519,7 +104697,7 @@
                 if (canProdiceDiagnostic) {
                     getSymbolAccessibilityDiagnostic = oldDiag;
                 }
-                if (input.kind === 257 /* ModuleDeclaration */) {
+                if (input.kind === 259 /* ModuleDeclaration */) {
                     needsDeclare = previousNeedsDeclare;
                 }
                 if (node === input) {
@@ -102542,7 +104720,7 @@
             return ts.flatten(ts.mapDefined(d.elements, function (e) { return recreateBindingElement(e); }));
         }
         function recreateBindingElement(e) {
-            if (e.kind === 223 /* OmittedExpression */) {
+            if (e.kind === 225 /* OmittedExpression */) {
                 return;
             }
             if (e.name) {
@@ -102592,7 +104770,7 @@
         function ensureModifierFlags(node) {
             var mask = 27647 /* All */ ^ (4 /* Public */ | 256 /* Async */ | 16384 /* Override */); // No async and override modifiers in declaration files
             var additions = (needsDeclare && !isAlwaysType(node)) ? 2 /* Ambient */ : 0 /* None */;
-            var parentIsFile = node.parent.kind === 298 /* SourceFile */;
+            var parentIsFile = node.parent.kind === 300 /* SourceFile */;
             if (!parentIsFile || (isBundledEmit && parentIsFile && ts.isExternalModule(node.parent))) {
                 mask ^= 2 /* Ambient */;
                 additions = 0 /* None */;
@@ -102615,13 +104793,13 @@
         }
         function transformHeritageClauses(nodes) {
             return factory.createNodeArray(ts.filter(ts.map(nodes, function (clause) { return factory.updateHeritageClause(clause, ts.visitNodes(factory.createNodeArray(ts.filter(clause.types, function (t) {
-                return ts.isEntityNameExpression(t.expression) || (clause.token === 93 /* ExtendsKeyword */ && t.expression.kind === 103 /* NullKeyword */);
+                return ts.isEntityNameExpression(t.expression) || (clause.token === 94 /* ExtendsKeyword */ && t.expression.kind === 104 /* NullKeyword */);
             })), visitDeclarationSubtree)); }), function (clause) { return clause.types && !!clause.types.length; }));
         }
     }
     ts.transformDeclarations = transformDeclarations;
     function isAlwaysType(node) {
-        if (node.kind === 254 /* InterfaceDeclaration */) {
+        if (node.kind === 256 /* InterfaceDeclaration */) {
             return true;
         }
         return false;
@@ -102646,7 +104824,7 @@
     }
     function getTypeAnnotationFromAccessor(accessor) {
         if (accessor) {
-            return accessor.kind === 168 /* GetAccessor */
+            return accessor.kind === 170 /* GetAccessor */
                 ? accessor.type // Getter - return type
                 : accessor.parameters.length > 0
                     ? accessor.parameters[0].type // Setter parameter type
@@ -102655,52 +104833,52 @@
     }
     function canHaveLiteralInitializer(node) {
         switch (node.kind) {
-            case 164 /* PropertyDeclaration */:
-            case 163 /* PropertySignature */:
+            case 165 /* PropertyDeclaration */:
+            case 164 /* PropertySignature */:
                 return !ts.hasEffectiveModifier(node, 8 /* Private */);
-            case 161 /* Parameter */:
-            case 250 /* VariableDeclaration */:
+            case 162 /* Parameter */:
+            case 252 /* VariableDeclaration */:
                 return true;
         }
         return false;
     }
     function isPreservedDeclarationStatement(node) {
         switch (node.kind) {
-            case 252 /* FunctionDeclaration */:
-            case 257 /* ModuleDeclaration */:
-            case 261 /* ImportEqualsDeclaration */:
-            case 254 /* InterfaceDeclaration */:
-            case 253 /* ClassDeclaration */:
-            case 255 /* TypeAliasDeclaration */:
-            case 256 /* EnumDeclaration */:
-            case 233 /* VariableStatement */:
-            case 262 /* ImportDeclaration */:
-            case 268 /* ExportDeclaration */:
-            case 267 /* ExportAssignment */:
+            case 254 /* FunctionDeclaration */:
+            case 259 /* ModuleDeclaration */:
+            case 263 /* ImportEqualsDeclaration */:
+            case 256 /* InterfaceDeclaration */:
+            case 255 /* ClassDeclaration */:
+            case 257 /* TypeAliasDeclaration */:
+            case 258 /* EnumDeclaration */:
+            case 235 /* VariableStatement */:
+            case 264 /* ImportDeclaration */:
+            case 270 /* ExportDeclaration */:
+            case 269 /* ExportAssignment */:
                 return true;
         }
         return false;
     }
     function isProcessedComponent(node) {
         switch (node.kind) {
-            case 171 /* ConstructSignature */:
-            case 167 /* Constructor */:
-            case 166 /* MethodDeclaration */:
-            case 168 /* GetAccessor */:
-            case 169 /* SetAccessor */:
-            case 164 /* PropertyDeclaration */:
-            case 163 /* PropertySignature */:
-            case 165 /* MethodSignature */:
-            case 170 /* CallSignature */:
-            case 172 /* IndexSignature */:
-            case 250 /* VariableDeclaration */:
-            case 160 /* TypeParameter */:
-            case 224 /* ExpressionWithTypeArguments */:
-            case 174 /* TypeReference */:
-            case 185 /* ConditionalType */:
-            case 175 /* FunctionType */:
-            case 176 /* ConstructorType */:
-            case 196 /* ImportType */:
+            case 173 /* ConstructSignature */:
+            case 169 /* Constructor */:
+            case 167 /* MethodDeclaration */:
+            case 170 /* GetAccessor */:
+            case 171 /* SetAccessor */:
+            case 165 /* PropertyDeclaration */:
+            case 164 /* PropertySignature */:
+            case 166 /* MethodSignature */:
+            case 172 /* CallSignature */:
+            case 174 /* IndexSignature */:
+            case 252 /* VariableDeclaration */:
+            case 161 /* TypeParameter */:
+            case 226 /* ExpressionWithTypeArguments */:
+            case 176 /* TypeReference */:
+            case 187 /* ConditionalType */:
+            case 177 /* FunctionType */:
+            case 178 /* ConstructorType */:
+            case 198 /* ImportType */:
                 return true;
         }
         return false;
@@ -102835,7 +105013,7 @@
      * @param allowDtsFiles A value indicating whether to allow the transformation of .d.ts files.
      */
     function transformNodes(resolver, host, factory, options, nodes, transformers, allowDtsFiles) {
-        var enabledSyntaxKindFeatures = new Array(345 /* Count */);
+        var enabledSyntaxKindFeatures = new Array(350 /* Count */);
         var lexicalEnvironmentVariableDeclarations;
         var lexicalEnvironmentFunctionDeclarations;
         var lexicalEnvironmentStatements;
@@ -102917,7 +105095,7 @@
         var transformed = [];
         for (var _a = 0, nodes_3 = nodes; _a < nodes_3.length; _a++) {
             var node = nodes_3[_a];
-            ts.tracing === null || ts.tracing === void 0 ? void 0 : ts.tracing.push("emit" /* Emit */, "transformNodes", node.kind === 298 /* SourceFile */ ? { path: node.path } : { kind: node.kind, pos: node.pos, end: node.end });
+            ts.tracing === null || ts.tracing === void 0 ? void 0 : ts.tracing.push("emit" /* Emit */, "transformNodes", node.kind === 300 /* SourceFile */ ? { path: node.path } : { kind: node.kind, pos: node.pos, end: node.end });
             transformed.push((allowDtsFiles ? transformation : transformRoot)(node));
             ts.tracing === null || ts.tracing === void 0 ? void 0 : ts.tracing.pop();
         }
@@ -103090,7 +105268,7 @@
                 lexicalEnvironmentFunctionDeclarations ||
                 lexicalEnvironmentStatements) {
                 if (lexicalEnvironmentFunctionDeclarations) {
-                    statements = __spreadArray([], lexicalEnvironmentFunctionDeclarations);
+                    statements = __spreadArray([], lexicalEnvironmentFunctionDeclarations, true);
                 }
                 if (lexicalEnvironmentVariableDeclarations) {
                     var statement = factory.createVariableStatement(
@@ -103105,10 +105283,10 @@
                 }
                 if (lexicalEnvironmentStatements) {
                     if (!statements) {
-                        statements = __spreadArray([], lexicalEnvironmentStatements);
+                        statements = __spreadArray([], lexicalEnvironmentStatements, true);
                     }
                     else {
-                        statements = __spreadArray(__spreadArray([], statements), lexicalEnvironmentStatements);
+                        statements = __spreadArray(__spreadArray([], statements, true), lexicalEnvironmentStatements, true);
                     }
                 }
             }
@@ -103323,7 +105501,7 @@
     /*@internal*/
     function getOutputPathsFor(sourceFile, host, forceDtsPaths) {
         var options = host.getCompilerOptions();
-        if (sourceFile.kind === 299 /* Bundle */) {
+        if (sourceFile.kind === 301 /* Bundle */) {
             return getOutputPathsForBundle(options, forceDtsPaths);
         }
         else {
@@ -103690,7 +105868,7 @@
                     extendedDiagnostics: compilerOptions.extendedDiagnostics,
                     // Explicitly do not passthru either `inline` option
                 });
-                if (forceDtsEmit && declarationTransform.transformed[0].kind === 298 /* SourceFile */) {
+                if (forceDtsEmit && declarationTransform.transformed[0].kind === 300 /* SourceFile */) {
                     var sourceFile = declarationTransform.transformed[0];
                     exportedModulesFromDeclarationEmit = sourceFile.exportedModulesFromDeclarationEmit;
                 }
@@ -103701,7 +105879,7 @@
         }
         function collectLinkedAliases(node) {
             if (ts.isExportAssignment(node)) {
-                if (node.expression.kind === 78 /* Identifier */) {
+                if (node.expression.kind === 79 /* Identifier */) {
                     resolver.collectLinkedAliases(node.expression, /*setVisibility*/ true);
                 }
                 return;
@@ -103713,8 +105891,8 @@
             ts.forEachChild(node, collectLinkedAliases);
         }
         function printSourceFileOrBundle(jsFilePath, sourceMapFilePath, sourceFileOrBundle, printer, mapOptions) {
-            var bundle = sourceFileOrBundle.kind === 299 /* Bundle */ ? sourceFileOrBundle : undefined;
-            var sourceFile = sourceFileOrBundle.kind === 298 /* SourceFile */ ? sourceFileOrBundle : undefined;
+            var bundle = sourceFileOrBundle.kind === 301 /* Bundle */ ? sourceFileOrBundle : undefined;
+            var sourceFile = sourceFileOrBundle.kind === 300 /* SourceFile */ ? sourceFileOrBundle : undefined;
             var sourceFiles = bundle ? bundle.sourceFiles : [sourceFile];
             var sourceMapGenerator;
             if (shouldEmitSourceMaps(mapOptions, sourceFileOrBundle)) {
@@ -103755,7 +105933,7 @@
         }
         function shouldEmitSourceMaps(mapOptions, sourceFileOrBundle) {
             return (mapOptions.sourceMap || mapOptions.inlineSourceMap)
-                && (sourceFileOrBundle.kind !== 298 /* SourceFile */ || !ts.fileExtensionIs(sourceFileOrBundle.fileName, ".json" /* Json */));
+                && (sourceFileOrBundle.kind !== 300 /* SourceFile */ || !ts.fileExtensionIs(sourceFileOrBundle.fileName, ".json" /* Json */));
         }
         function getSourceRoot(mapOptions) {
             // Normalize source root and make sure it has trailing "/" so that it can be used to combine paths with the
@@ -103921,7 +106099,7 @@
         var prependNodes = ts.createPrependNodes(config.projectReferences, getCommandLine, function (f) { return host.readFile(f); });
         var sourceFilesForJsEmit = createSourceFilesFromBundleBuildInfo(buildInfo.bundle, buildInfoDirectory, host);
         var emitHost = {
-            getPrependNodes: ts.memoize(function () { return __spreadArray(__spreadArray([], prependNodes), [ownPrependInput]); }),
+            getPrependNodes: ts.memoize(function () { return __spreadArray(__spreadArray([], prependNodes, true), [ownPrependInput], false); }),
             getCanonicalFileName: host.getCanonicalFileName,
             getCommonSourceDirectory: function () { return ts.getNormalizedAbsolutePath(buildInfo.bundle.commonSourceDirectory, buildInfoDirectory); },
             getCompilerOptions: function () { return config.options; },
@@ -104066,9 +106244,9 @@
                     break;
             }
             switch (node.kind) {
-                case 298 /* SourceFile */: return printFile(node);
-                case 299 /* Bundle */: return printBundle(node);
-                case 300 /* UnparsedSource */: return printUnparsedSource(node);
+                case 300 /* SourceFile */: return printFile(node);
+                case 301 /* Bundle */: return printBundle(node);
+                case 302 /* UnparsedSource */: return printUnparsedSource(node);
             }
             writeNode(hint, node, sourceFile, beginPrint());
             return endPrint();
@@ -104388,316 +106566,318 @@
                     case 17 /* TemplateTail */:
                         return emitLiteral(node, /*jsxAttributeEscape*/ false);
                     // Identifiers
-                    case 78 /* Identifier */:
+                    case 79 /* Identifier */:
                         return emitIdentifier(node);
                     // PrivateIdentifiers
-                    case 79 /* PrivateIdentifier */:
+                    case 80 /* PrivateIdentifier */:
                         return emitPrivateIdentifier(node);
                     // Parse tree nodes
                     // Names
-                    case 158 /* QualifiedName */:
+                    case 159 /* QualifiedName */:
                         return emitQualifiedName(node);
-                    case 159 /* ComputedPropertyName */:
+                    case 160 /* ComputedPropertyName */:
                         return emitComputedPropertyName(node);
                     // Signature elements
-                    case 160 /* TypeParameter */:
+                    case 161 /* TypeParameter */:
                         return emitTypeParameter(node);
-                    case 161 /* Parameter */:
+                    case 162 /* Parameter */:
                         return emitParameter(node);
-                    case 162 /* Decorator */:
+                    case 163 /* Decorator */:
                         return emitDecorator(node);
                     // Type members
-                    case 163 /* PropertySignature */:
+                    case 164 /* PropertySignature */:
                         return emitPropertySignature(node);
-                    case 164 /* PropertyDeclaration */:
+                    case 165 /* PropertyDeclaration */:
                         return emitPropertyDeclaration(node);
-                    case 165 /* MethodSignature */:
+                    case 166 /* MethodSignature */:
                         return emitMethodSignature(node);
-                    case 166 /* MethodDeclaration */:
+                    case 167 /* MethodDeclaration */:
                         return emitMethodDeclaration(node);
-                    case 167 /* Constructor */:
+                    case 168 /* ClassStaticBlockDeclaration */:
+                        return emitClassStaticBlockDeclaration(node);
+                    case 169 /* Constructor */:
                         return emitConstructor(node);
-                    case 168 /* GetAccessor */:
-                    case 169 /* SetAccessor */:
+                    case 170 /* GetAccessor */:
+                    case 171 /* SetAccessor */:
                         return emitAccessorDeclaration(node);
-                    case 170 /* CallSignature */:
+                    case 172 /* CallSignature */:
                         return emitCallSignature(node);
-                    case 171 /* ConstructSignature */:
+                    case 173 /* ConstructSignature */:
                         return emitConstructSignature(node);
-                    case 172 /* IndexSignature */:
+                    case 174 /* IndexSignature */:
                         return emitIndexSignature(node);
                     // Types
-                    case 173 /* TypePredicate */:
+                    case 175 /* TypePredicate */:
                         return emitTypePredicate(node);
-                    case 174 /* TypeReference */:
+                    case 176 /* TypeReference */:
                         return emitTypeReference(node);
-                    case 175 /* FunctionType */:
+                    case 177 /* FunctionType */:
                         return emitFunctionType(node);
-                    case 176 /* ConstructorType */:
+                    case 178 /* ConstructorType */:
                         return emitConstructorType(node);
-                    case 177 /* TypeQuery */:
+                    case 179 /* TypeQuery */:
                         return emitTypeQuery(node);
-                    case 178 /* TypeLiteral */:
+                    case 180 /* TypeLiteral */:
                         return emitTypeLiteral(node);
-                    case 179 /* ArrayType */:
+                    case 181 /* ArrayType */:
                         return emitArrayType(node);
-                    case 180 /* TupleType */:
+                    case 182 /* TupleType */:
                         return emitTupleType(node);
-                    case 181 /* OptionalType */:
+                    case 183 /* OptionalType */:
                         return emitOptionalType(node);
                     // SyntaxKind.RestType is handled below
-                    case 183 /* UnionType */:
+                    case 185 /* UnionType */:
                         return emitUnionType(node);
-                    case 184 /* IntersectionType */:
+                    case 186 /* IntersectionType */:
                         return emitIntersectionType(node);
-                    case 185 /* ConditionalType */:
+                    case 187 /* ConditionalType */:
                         return emitConditionalType(node);
-                    case 186 /* InferType */:
+                    case 188 /* InferType */:
                         return emitInferType(node);
-                    case 187 /* ParenthesizedType */:
+                    case 189 /* ParenthesizedType */:
                         return emitParenthesizedType(node);
-                    case 224 /* ExpressionWithTypeArguments */:
+                    case 226 /* ExpressionWithTypeArguments */:
                         return emitExpressionWithTypeArguments(node);
-                    case 188 /* ThisType */:
+                    case 190 /* ThisType */:
                         return emitThisType();
-                    case 189 /* TypeOperator */:
+                    case 191 /* TypeOperator */:
                         return emitTypeOperator(node);
-                    case 190 /* IndexedAccessType */:
+                    case 192 /* IndexedAccessType */:
                         return emitIndexedAccessType(node);
-                    case 191 /* MappedType */:
+                    case 193 /* MappedType */:
                         return emitMappedType(node);
-                    case 192 /* LiteralType */:
+                    case 194 /* LiteralType */:
                         return emitLiteralType(node);
-                    case 193 /* NamedTupleMember */:
+                    case 195 /* NamedTupleMember */:
                         return emitNamedTupleMember(node);
-                    case 194 /* TemplateLiteralType */:
+                    case 196 /* TemplateLiteralType */:
                         return emitTemplateType(node);
-                    case 195 /* TemplateLiteralTypeSpan */:
+                    case 197 /* TemplateLiteralTypeSpan */:
                         return emitTemplateTypeSpan(node);
-                    case 196 /* ImportType */:
+                    case 198 /* ImportType */:
                         return emitImportTypeNode(node);
                     // Binding patterns
-                    case 197 /* ObjectBindingPattern */:
+                    case 199 /* ObjectBindingPattern */:
                         return emitObjectBindingPattern(node);
-                    case 198 /* ArrayBindingPattern */:
+                    case 200 /* ArrayBindingPattern */:
                         return emitArrayBindingPattern(node);
-                    case 199 /* BindingElement */:
+                    case 201 /* BindingElement */:
                         return emitBindingElement(node);
                     // Misc
-                    case 229 /* TemplateSpan */:
+                    case 231 /* TemplateSpan */:
                         return emitTemplateSpan(node);
-                    case 230 /* SemicolonClassElement */:
+                    case 232 /* SemicolonClassElement */:
                         return emitSemicolonClassElement();
                     // Statements
-                    case 231 /* Block */:
+                    case 233 /* Block */:
                         return emitBlock(node);
-                    case 233 /* VariableStatement */:
+                    case 235 /* VariableStatement */:
                         return emitVariableStatement(node);
-                    case 232 /* EmptyStatement */:
+                    case 234 /* EmptyStatement */:
                         return emitEmptyStatement(/*isEmbeddedStatement*/ false);
-                    case 234 /* ExpressionStatement */:
+                    case 236 /* ExpressionStatement */:
                         return emitExpressionStatement(node);
-                    case 235 /* IfStatement */:
+                    case 237 /* IfStatement */:
                         return emitIfStatement(node);
-                    case 236 /* DoStatement */:
+                    case 238 /* DoStatement */:
                         return emitDoStatement(node);
-                    case 237 /* WhileStatement */:
+                    case 239 /* WhileStatement */:
                         return emitWhileStatement(node);
-                    case 238 /* ForStatement */:
+                    case 240 /* ForStatement */:
                         return emitForStatement(node);
-                    case 239 /* ForInStatement */:
+                    case 241 /* ForInStatement */:
                         return emitForInStatement(node);
-                    case 240 /* ForOfStatement */:
+                    case 242 /* ForOfStatement */:
                         return emitForOfStatement(node);
-                    case 241 /* ContinueStatement */:
+                    case 243 /* ContinueStatement */:
                         return emitContinueStatement(node);
-                    case 242 /* BreakStatement */:
+                    case 244 /* BreakStatement */:
                         return emitBreakStatement(node);
-                    case 243 /* ReturnStatement */:
+                    case 245 /* ReturnStatement */:
                         return emitReturnStatement(node);
-                    case 244 /* WithStatement */:
+                    case 246 /* WithStatement */:
                         return emitWithStatement(node);
-                    case 245 /* SwitchStatement */:
+                    case 247 /* SwitchStatement */:
                         return emitSwitchStatement(node);
-                    case 246 /* LabeledStatement */:
+                    case 248 /* LabeledStatement */:
                         return emitLabeledStatement(node);
-                    case 247 /* ThrowStatement */:
+                    case 249 /* ThrowStatement */:
                         return emitThrowStatement(node);
-                    case 248 /* TryStatement */:
+                    case 250 /* TryStatement */:
                         return emitTryStatement(node);
-                    case 249 /* DebuggerStatement */:
+                    case 251 /* DebuggerStatement */:
                         return emitDebuggerStatement(node);
                     // Declarations
-                    case 250 /* VariableDeclaration */:
+                    case 252 /* VariableDeclaration */:
                         return emitVariableDeclaration(node);
-                    case 251 /* VariableDeclarationList */:
+                    case 253 /* VariableDeclarationList */:
                         return emitVariableDeclarationList(node);
-                    case 252 /* FunctionDeclaration */:
+                    case 254 /* FunctionDeclaration */:
                         return emitFunctionDeclaration(node);
-                    case 253 /* ClassDeclaration */:
+                    case 255 /* ClassDeclaration */:
                         return emitClassDeclaration(node);
-                    case 254 /* InterfaceDeclaration */:
+                    case 256 /* InterfaceDeclaration */:
                         return emitInterfaceDeclaration(node);
-                    case 255 /* TypeAliasDeclaration */:
+                    case 257 /* TypeAliasDeclaration */:
                         return emitTypeAliasDeclaration(node);
-                    case 256 /* EnumDeclaration */:
+                    case 258 /* EnumDeclaration */:
                         return emitEnumDeclaration(node);
-                    case 257 /* ModuleDeclaration */:
+                    case 259 /* ModuleDeclaration */:
                         return emitModuleDeclaration(node);
-                    case 258 /* ModuleBlock */:
+                    case 260 /* ModuleBlock */:
                         return emitModuleBlock(node);
-                    case 259 /* CaseBlock */:
+                    case 261 /* CaseBlock */:
                         return emitCaseBlock(node);
-                    case 260 /* NamespaceExportDeclaration */:
+                    case 262 /* NamespaceExportDeclaration */:
                         return emitNamespaceExportDeclaration(node);
-                    case 261 /* ImportEqualsDeclaration */:
+                    case 263 /* ImportEqualsDeclaration */:
                         return emitImportEqualsDeclaration(node);
-                    case 262 /* ImportDeclaration */:
+                    case 264 /* ImportDeclaration */:
                         return emitImportDeclaration(node);
-                    case 263 /* ImportClause */:
+                    case 265 /* ImportClause */:
                         return emitImportClause(node);
-                    case 264 /* NamespaceImport */:
+                    case 266 /* NamespaceImport */:
                         return emitNamespaceImport(node);
-                    case 270 /* NamespaceExport */:
+                    case 272 /* NamespaceExport */:
                         return emitNamespaceExport(node);
-                    case 265 /* NamedImports */:
+                    case 267 /* NamedImports */:
                         return emitNamedImports(node);
-                    case 266 /* ImportSpecifier */:
+                    case 268 /* ImportSpecifier */:
                         return emitImportSpecifier(node);
-                    case 267 /* ExportAssignment */:
+                    case 269 /* ExportAssignment */:
                         return emitExportAssignment(node);
-                    case 268 /* ExportDeclaration */:
+                    case 270 /* ExportDeclaration */:
                         return emitExportDeclaration(node);
-                    case 269 /* NamedExports */:
+                    case 271 /* NamedExports */:
                         return emitNamedExports(node);
-                    case 271 /* ExportSpecifier */:
+                    case 273 /* ExportSpecifier */:
                         return emitExportSpecifier(node);
-                    case 272 /* MissingDeclaration */:
+                    case 274 /* MissingDeclaration */:
                         return;
                     // Module references
-                    case 273 /* ExternalModuleReference */:
+                    case 275 /* ExternalModuleReference */:
                         return emitExternalModuleReference(node);
                     // JSX (non-expression)
                     case 11 /* JsxText */:
                         return emitJsxText(node);
-                    case 276 /* JsxOpeningElement */:
-                    case 279 /* JsxOpeningFragment */:
+                    case 278 /* JsxOpeningElement */:
+                    case 281 /* JsxOpeningFragment */:
                         return emitJsxOpeningElementOrFragment(node);
-                    case 277 /* JsxClosingElement */:
-                    case 280 /* JsxClosingFragment */:
+                    case 279 /* JsxClosingElement */:
+                    case 282 /* JsxClosingFragment */:
                         return emitJsxClosingElementOrFragment(node);
-                    case 281 /* JsxAttribute */:
+                    case 283 /* JsxAttribute */:
                         return emitJsxAttribute(node);
-                    case 282 /* JsxAttributes */:
+                    case 284 /* JsxAttributes */:
                         return emitJsxAttributes(node);
-                    case 283 /* JsxSpreadAttribute */:
+                    case 285 /* JsxSpreadAttribute */:
                         return emitJsxSpreadAttribute(node);
-                    case 284 /* JsxExpression */:
+                    case 286 /* JsxExpression */:
                         return emitJsxExpression(node);
                     // Clauses
-                    case 285 /* CaseClause */:
+                    case 287 /* CaseClause */:
                         return emitCaseClause(node);
-                    case 286 /* DefaultClause */:
+                    case 288 /* DefaultClause */:
                         return emitDefaultClause(node);
-                    case 287 /* HeritageClause */:
+                    case 289 /* HeritageClause */:
                         return emitHeritageClause(node);
-                    case 288 /* CatchClause */:
+                    case 290 /* CatchClause */:
                         return emitCatchClause(node);
                     // Property assignments
-                    case 289 /* PropertyAssignment */:
+                    case 291 /* PropertyAssignment */:
                         return emitPropertyAssignment(node);
-                    case 290 /* ShorthandPropertyAssignment */:
+                    case 292 /* ShorthandPropertyAssignment */:
                         return emitShorthandPropertyAssignment(node);
-                    case 291 /* SpreadAssignment */:
+                    case 293 /* SpreadAssignment */:
                         return emitSpreadAssignment(node);
                     // Enum
-                    case 292 /* EnumMember */:
+                    case 294 /* EnumMember */:
                         return emitEnumMember(node);
                     // Unparsed
-                    case 293 /* UnparsedPrologue */:
+                    case 295 /* UnparsedPrologue */:
                         return writeUnparsedNode(node);
-                    case 300 /* UnparsedSource */:
-                    case 294 /* UnparsedPrepend */:
+                    case 302 /* UnparsedSource */:
+                    case 296 /* UnparsedPrepend */:
                         return emitUnparsedSourceOrPrepend(node);
-                    case 295 /* UnparsedText */:
-                    case 296 /* UnparsedInternalText */:
+                    case 297 /* UnparsedText */:
+                    case 298 /* UnparsedInternalText */:
                         return emitUnparsedTextLike(node);
-                    case 297 /* UnparsedSyntheticReference */:
+                    case 299 /* UnparsedSyntheticReference */:
                         return emitUnparsedSyntheticReference(node);
                     // Top-level nodes
-                    case 298 /* SourceFile */:
+                    case 300 /* SourceFile */:
                         return emitSourceFile(node);
-                    case 299 /* Bundle */:
+                    case 301 /* Bundle */:
                         return ts.Debug.fail("Bundles should be printed using printBundle");
                     // SyntaxKind.UnparsedSource (handled above)
-                    case 301 /* InputFiles */:
+                    case 303 /* InputFiles */:
                         return ts.Debug.fail("InputFiles should not be printed");
                     // JSDoc nodes (only used in codefixes currently)
-                    case 302 /* JSDocTypeExpression */:
+                    case 304 /* JSDocTypeExpression */:
                         return emitJSDocTypeExpression(node);
-                    case 303 /* JSDocNameReference */:
+                    case 305 /* JSDocNameReference */:
                         return emitJSDocNameReference(node);
-                    case 304 /* JSDocAllType */:
+                    case 307 /* JSDocAllType */:
                         return writePunctuation("*");
-                    case 305 /* JSDocUnknownType */:
+                    case 308 /* JSDocUnknownType */:
                         return writePunctuation("?");
-                    case 306 /* JSDocNullableType */:
+                    case 309 /* JSDocNullableType */:
                         return emitJSDocNullableType(node);
-                    case 307 /* JSDocNonNullableType */:
+                    case 310 /* JSDocNonNullableType */:
                         return emitJSDocNonNullableType(node);
-                    case 308 /* JSDocOptionalType */:
+                    case 311 /* JSDocOptionalType */:
                         return emitJSDocOptionalType(node);
-                    case 309 /* JSDocFunctionType */:
+                    case 312 /* JSDocFunctionType */:
                         return emitJSDocFunctionType(node);
-                    case 182 /* RestType */:
-                    case 310 /* JSDocVariadicType */:
+                    case 184 /* RestType */:
+                    case 313 /* JSDocVariadicType */:
                         return emitRestOrJSDocVariadicType(node);
-                    case 311 /* JSDocNamepathType */:
+                    case 314 /* JSDocNamepathType */:
                         return;
-                    case 312 /* JSDocComment */:
+                    case 315 /* JSDocComment */:
                         return emitJSDoc(node);
-                    case 314 /* JSDocTypeLiteral */:
+                    case 317 /* JSDocTypeLiteral */:
                         return emitJSDocTypeLiteral(node);
-                    case 315 /* JSDocSignature */:
+                    case 318 /* JSDocSignature */:
                         return emitJSDocSignature(node);
-                    case 317 /* JSDocTag */:
-                    case 322 /* JSDocClassTag */:
+                    case 322 /* JSDocTag */:
+                    case 327 /* JSDocClassTag */:
                         return emitJSDocSimpleTag(node);
-                    case 318 /* JSDocAugmentsTag */:
-                    case 319 /* JSDocImplementsTag */:
+                    case 323 /* JSDocAugmentsTag */:
+                    case 324 /* JSDocImplementsTag */:
                         return emitJSDocHeritageTag(node);
-                    case 320 /* JSDocAuthorTag */:
-                    case 321 /* JSDocDeprecatedTag */:
+                    case 325 /* JSDocAuthorTag */:
+                    case 326 /* JSDocDeprecatedTag */:
                         return;
                     // SyntaxKind.JSDocClassTag (see JSDocTag, above)
-                    case 323 /* JSDocPublicTag */:
-                    case 324 /* JSDocPrivateTag */:
-                    case 325 /* JSDocProtectedTag */:
-                    case 326 /* JSDocReadonlyTag */:
-                    case 327 /* JSDocOverrideTag */:
+                    case 328 /* JSDocPublicTag */:
+                    case 329 /* JSDocPrivateTag */:
+                    case 330 /* JSDocProtectedTag */:
+                    case 331 /* JSDocReadonlyTag */:
+                    case 332 /* JSDocOverrideTag */:
                         return;
-                    case 328 /* JSDocCallbackTag */:
+                    case 333 /* JSDocCallbackTag */:
                         return emitJSDocCallbackTag(node);
                     // SyntaxKind.JSDocEnumTag (see below)
-                    case 330 /* JSDocParameterTag */:
-                    case 337 /* JSDocPropertyTag */:
+                    case 335 /* JSDocParameterTag */:
+                    case 342 /* JSDocPropertyTag */:
                         return emitJSDocPropertyLikeTag(node);
-                    case 329 /* JSDocEnumTag */:
-                    case 331 /* JSDocReturnTag */:
-                    case 332 /* JSDocThisTag */:
-                    case 333 /* JSDocTypeTag */:
+                    case 334 /* JSDocEnumTag */:
+                    case 336 /* JSDocReturnTag */:
+                    case 337 /* JSDocThisTag */:
+                    case 338 /* JSDocTypeTag */:
                         return emitJSDocSimpleTypedTag(node);
-                    case 334 /* JSDocTemplateTag */:
+                    case 339 /* JSDocTemplateTag */:
                         return emitJSDocTemplateTag(node);
-                    case 335 /* JSDocTypedefTag */:
+                    case 340 /* JSDocTypedefTag */:
                         return emitJSDocTypedefTag(node);
-                    case 336 /* JSDocSeeTag */:
+                    case 341 /* JSDocSeeTag */:
                         return emitJSDocSeeTag(node);
                     // SyntaxKind.JSDocPropertyTag (see JSDocParameterTag, above)
                     // Transformation nodes
-                    case 339 /* NotEmittedStatement */:
-                    case 343 /* EndOfDeclarationMarker */:
-                    case 342 /* MergeDeclarationMarker */:
+                    case 344 /* NotEmittedStatement */:
+                    case 348 /* EndOfDeclarationMarker */:
+                    case 347 /* MergeDeclarationMarker */:
                         return;
                 }
                 if (ts.isExpression(node)) {
@@ -104724,86 +106904,86 @@
                     case 14 /* NoSubstitutionTemplateLiteral */:
                         return emitLiteral(node, /*jsxAttributeEscape*/ false);
                     // Identifiers
-                    case 78 /* Identifier */:
+                    case 79 /* Identifier */:
                         return emitIdentifier(node);
                     // Expressions
-                    case 200 /* ArrayLiteralExpression */:
+                    case 202 /* ArrayLiteralExpression */:
                         return emitArrayLiteralExpression(node);
-                    case 201 /* ObjectLiteralExpression */:
+                    case 203 /* ObjectLiteralExpression */:
                         return emitObjectLiteralExpression(node);
-                    case 202 /* PropertyAccessExpression */:
+                    case 204 /* PropertyAccessExpression */:
                         return emitPropertyAccessExpression(node);
-                    case 203 /* ElementAccessExpression */:
+                    case 205 /* ElementAccessExpression */:
                         return emitElementAccessExpression(node);
-                    case 204 /* CallExpression */:
+                    case 206 /* CallExpression */:
                         return emitCallExpression(node);
-                    case 205 /* NewExpression */:
+                    case 207 /* NewExpression */:
                         return emitNewExpression(node);
-                    case 206 /* TaggedTemplateExpression */:
+                    case 208 /* TaggedTemplateExpression */:
                         return emitTaggedTemplateExpression(node);
-                    case 207 /* TypeAssertionExpression */:
+                    case 209 /* TypeAssertionExpression */:
                         return emitTypeAssertionExpression(node);
-                    case 208 /* ParenthesizedExpression */:
+                    case 210 /* ParenthesizedExpression */:
                         return emitParenthesizedExpression(node);
-                    case 209 /* FunctionExpression */:
+                    case 211 /* FunctionExpression */:
                         return emitFunctionExpression(node);
-                    case 210 /* ArrowFunction */:
+                    case 212 /* ArrowFunction */:
                         return emitArrowFunction(node);
-                    case 211 /* DeleteExpression */:
+                    case 213 /* DeleteExpression */:
                         return emitDeleteExpression(node);
-                    case 212 /* TypeOfExpression */:
+                    case 214 /* TypeOfExpression */:
                         return emitTypeOfExpression(node);
-                    case 213 /* VoidExpression */:
+                    case 215 /* VoidExpression */:
                         return emitVoidExpression(node);
-                    case 214 /* AwaitExpression */:
+                    case 216 /* AwaitExpression */:
                         return emitAwaitExpression(node);
-                    case 215 /* PrefixUnaryExpression */:
+                    case 217 /* PrefixUnaryExpression */:
                         return emitPrefixUnaryExpression(node);
-                    case 216 /* PostfixUnaryExpression */:
+                    case 218 /* PostfixUnaryExpression */:
                         return emitPostfixUnaryExpression(node);
-                    case 217 /* BinaryExpression */:
+                    case 219 /* BinaryExpression */:
                         return emitBinaryExpression(node);
-                    case 218 /* ConditionalExpression */:
+                    case 220 /* ConditionalExpression */:
                         return emitConditionalExpression(node);
-                    case 219 /* TemplateExpression */:
+                    case 221 /* TemplateExpression */:
                         return emitTemplateExpression(node);
-                    case 220 /* YieldExpression */:
+                    case 222 /* YieldExpression */:
                         return emitYieldExpression(node);
-                    case 221 /* SpreadElement */:
+                    case 223 /* SpreadElement */:
                         return emitSpreadElement(node);
-                    case 222 /* ClassExpression */:
+                    case 224 /* ClassExpression */:
                         return emitClassExpression(node);
-                    case 223 /* OmittedExpression */:
+                    case 225 /* OmittedExpression */:
                         return;
-                    case 225 /* AsExpression */:
+                    case 227 /* AsExpression */:
                         return emitAsExpression(node);
-                    case 226 /* NonNullExpression */:
+                    case 228 /* NonNullExpression */:
                         return emitNonNullExpression(node);
-                    case 227 /* MetaProperty */:
+                    case 229 /* MetaProperty */:
                         return emitMetaProperty(node);
-                    case 228 /* SyntheticExpression */:
+                    case 230 /* SyntheticExpression */:
                         return ts.Debug.fail("SyntheticExpression should never be printed.");
                     // JSX
-                    case 274 /* JsxElement */:
+                    case 276 /* JsxElement */:
                         return emitJsxElement(node);
-                    case 275 /* JsxSelfClosingElement */:
+                    case 277 /* JsxSelfClosingElement */:
                         return emitJsxSelfClosingElement(node);
-                    case 278 /* JsxFragment */:
+                    case 280 /* JsxFragment */:
                         return emitJsxFragment(node);
                     // Synthesized list
-                    case 338 /* SyntaxList */:
+                    case 343 /* SyntaxList */:
                         return ts.Debug.fail("SyntaxList should not be printed");
                     // Transformation nodes
-                    case 339 /* NotEmittedStatement */:
+                    case 344 /* NotEmittedStatement */:
                         return;
-                    case 340 /* PartiallyEmittedExpression */:
+                    case 345 /* PartiallyEmittedExpression */:
                         return emitPartiallyEmittedExpression(node);
-                    case 341 /* CommaListExpression */:
+                    case 346 /* CommaListExpression */:
                         return emitCommaList(node);
-                    case 342 /* MergeDeclarationMarker */:
-                    case 343 /* EndOfDeclarationMarker */:
+                    case 347 /* MergeDeclarationMarker */:
+                    case 348 /* EndOfDeclarationMarker */:
                         return;
-                    case 344 /* SyntheticReferenceExpression */:
+                    case 349 /* SyntheticReferenceExpression */:
                         return ts.Debug.fail("SyntheticReferenceExpression should not be printed");
                 }
             }
@@ -104851,7 +107031,7 @@
         }
         function emitHelpers(node) {
             var helpersEmitted = false;
-            var bundle = node.kind === 299 /* Bundle */ ? node : undefined;
+            var bundle = node.kind === 301 /* Bundle */ ? node : undefined;
             if (bundle && moduleKind === ts.ModuleKind.None) {
                 return;
             }
@@ -104951,7 +107131,7 @@
             var pos = getTextPosWithWriteLine();
             writeUnparsedNode(unparsed);
             if (bundleFileInfo) {
-                updateOrPushBundleFileTextLike(pos, writer.getTextPos(), unparsed.kind === 295 /* UnparsedText */ ?
+                updateOrPushBundleFileTextLike(pos, writer.getTextPos(), unparsed.kind === 297 /* UnparsedText */ ?
                     "text" /* Text */ :
                     "internal" /* Internal */);
             }
@@ -104988,7 +107168,7 @@
             emit(node.right);
         }
         function emitEntityName(node) {
-            if (node.kind === 78 /* Identifier */) {
+            if (node.kind === 79 /* Identifier */) {
                 emitExpression(node);
             }
             else {
@@ -105024,7 +107204,7 @@
             emit(node.dotDotDotToken);
             emitNodeWithWriter(node.name, writeParameter);
             emit(node.questionToken);
-            if (node.parent && node.parent.kind === 309 /* JSDocFunctionType */ && !node.name) {
+            if (node.parent && node.parent.kind === 312 /* JSDocFunctionType */ && !node.name) {
                 emit(node.type);
             }
             else {
@@ -105078,6 +107258,12 @@
             emit(node.questionToken);
             emitSignatureAndBody(node, emitSignatureHead);
         }
+        function emitClassStaticBlockDeclaration(node) {
+            emitDecorators(node, node.decorators);
+            emitModifiers(node, node.modifiers);
+            writeKeyword("static");
+            emitBlockFunctionBody(node.body);
+        }
         function emitConstructor(node) {
             emitModifiers(node, node.modifiers);
             writeKeyword("constructor");
@@ -105086,7 +107272,7 @@
         function emitAccessorDeclaration(node) {
             emitDecorators(node, node.decorators);
             emitModifiers(node, node.modifiers);
-            writeKeyword(node.kind === 168 /* GetAccessor */ ? "get" : "set");
+            writeKeyword(node.kind === 170 /* GetAccessor */ ? "get" : "set");
             writeSpace();
             emit(node.name);
             emitSignatureAndBody(node, emitSignatureHead);
@@ -105283,7 +107469,7 @@
             }
             if (node.readonlyToken) {
                 emit(node.readonlyToken);
-                if (node.readonlyToken.kind !== 142 /* ReadonlyKeyword */) {
+                if (node.readonlyToken.kind !== 143 /* ReadonlyKeyword */) {
                     writeKeyword("readonly");
                 }
                 writeSpace();
@@ -105432,20 +107618,40 @@
             emitTokenWithComment(23 /* CloseBracketToken */, node.argumentExpression.end, writePunctuation, node);
         }
         function emitCallExpression(node) {
+            var indirectCall = ts.getEmitFlags(node) & 536870912 /* IndirectCall */;
+            if (indirectCall) {
+                writePunctuation("(");
+                writeLiteral("0");
+                writePunctuation(",");
+                writeSpace();
+            }
             emitExpression(node.expression, parenthesizer.parenthesizeLeftSideOfAccess);
+            if (indirectCall) {
+                writePunctuation(")");
+            }
             emit(node.questionDotToken);
             emitTypeArguments(node, node.typeArguments);
             emitExpressionList(node, node.arguments, 2576 /* CallExpressionArguments */, parenthesizer.parenthesizeExpressionForDisallowedComma);
         }
         function emitNewExpression(node) {
-            emitTokenWithComment(102 /* NewKeyword */, node.pos, writeKeyword, node);
+            emitTokenWithComment(103 /* NewKeyword */, node.pos, writeKeyword, node);
             writeSpace();
             emitExpression(node.expression, parenthesizer.parenthesizeExpressionOfNew);
             emitTypeArguments(node, node.typeArguments);
             emitExpressionList(node, node.arguments, 18960 /* NewExpressionArguments */, parenthesizer.parenthesizeExpressionForDisallowedComma);
         }
         function emitTaggedTemplateExpression(node) {
+            var indirectCall = ts.getEmitFlags(node) & 536870912 /* IndirectCall */;
+            if (indirectCall) {
+                writePunctuation("(");
+                writeLiteral("0");
+                writePunctuation(",");
+                writeSpace();
+            }
             emitExpression(node.tag, parenthesizer.parenthesizeLeftSideOfAccess);
+            if (indirectCall) {
+                writePunctuation(")");
+            }
             emitTypeArguments(node, node.typeArguments);
             writeSpace();
             emitExpression(node.template);
@@ -105481,22 +107687,22 @@
             emit(node.equalsGreaterThanToken);
         }
         function emitDeleteExpression(node) {
-            emitTokenWithComment(88 /* DeleteKeyword */, node.pos, writeKeyword, node);
+            emitTokenWithComment(89 /* DeleteKeyword */, node.pos, writeKeyword, node);
             writeSpace();
             emitExpression(node.expression, parenthesizer.parenthesizeOperandOfPrefixUnary);
         }
         function emitTypeOfExpression(node) {
-            emitTokenWithComment(111 /* TypeOfKeyword */, node.pos, writeKeyword, node);
+            emitTokenWithComment(112 /* TypeOfKeyword */, node.pos, writeKeyword, node);
             writeSpace();
             emitExpression(node.expression, parenthesizer.parenthesizeOperandOfPrefixUnary);
         }
         function emitVoidExpression(node) {
-            emitTokenWithComment(113 /* VoidKeyword */, node.pos, writeKeyword, node);
+            emitTokenWithComment(114 /* VoidKeyword */, node.pos, writeKeyword, node);
             writeSpace();
             emitExpression(node.expression, parenthesizer.parenthesizeOperandOfPrefixUnary);
         }
         function emitAwaitExpression(node) {
-            emitTokenWithComment(130 /* AwaitKeyword */, node.pos, writeKeyword, node);
+            emitTokenWithComment(131 /* AwaitKeyword */, node.pos, writeKeyword, node);
             writeSpace();
             emitExpression(node.expression, parenthesizer.parenthesizeOperandOfPrefixUnary);
         }
@@ -105521,7 +107727,7 @@
             // expression a prefix increment whose operand is a plus expression - (++(+x))
             // The same is true of minus of course.
             var operand = node.operand;
-            return operand.kind === 215 /* PrefixUnaryExpression */
+            return operand.kind === 217 /* PrefixUnaryExpression */
                 && ((node.operator === 39 /* PlusToken */ && (operand.operator === 39 /* PlusToken */ || operand.operator === 45 /* PlusPlusToken */))
                     || (node.operator === 40 /* MinusToken */ && (operand.operator === 40 /* MinusToken */ || operand.operator === 46 /* MinusMinusToken */)));
         }
@@ -105569,7 +107775,7 @@
                 var linesAfterOperator = getLinesBetweenNodes(node, operatorToken, node.right);
                 writeLinesAndIndent(linesBeforeOperator, isCommaOperator);
                 emitLeadingCommentsOfPosition(operatorToken.pos);
-                writeTokenNode(operatorToken, operatorToken.kind === 100 /* InKeyword */ ? writeKeyword : writeOperator);
+                writeTokenNode(operatorToken, operatorToken.kind === 101 /* InKeyword */ ? writeKeyword : writeOperator);
                 emitTrailingCommentsOfPosition(operatorToken.end, /*prefixSpace*/ true); // Binary operators should have a space before the comment starts
                 writeLinesAndIndent(linesAfterOperator, /*writeSpaceIfNotIndenting*/ true);
             }
@@ -105640,7 +107846,7 @@
             emitList(node, node.templateSpans, 262144 /* TemplateExpressionSpans */);
         }
         function emitYieldExpression(node) {
-            emitTokenWithComment(124 /* YieldKeyword */, node.pos, writeKeyword, node);
+            emitTokenWithComment(125 /* YieldKeyword */, node.pos, writeKeyword, node);
             emit(node.asteriskToken);
             emitExpressionWithLeadingSpace(node.expression, parenthesizer.parenthesizeExpressionForDisallowedComma);
         }
@@ -105717,7 +107923,7 @@
             }
         }
         function emitIfStatement(node) {
-            var openParenPos = emitTokenWithComment(98 /* IfKeyword */, node.pos, writeKeyword, node);
+            var openParenPos = emitTokenWithComment(99 /* IfKeyword */, node.pos, writeKeyword, node);
             writeSpace();
             emitTokenWithComment(20 /* OpenParenToken */, openParenPos, writePunctuation, node);
             emitExpression(node.expression);
@@ -105725,8 +107931,8 @@
             emitEmbeddedStatement(node, node.thenStatement);
             if (node.elseStatement) {
                 writeLineOrSpace(node, node.thenStatement, node.elseStatement);
-                emitTokenWithComment(90 /* ElseKeyword */, node.thenStatement.end, writeKeyword, node);
-                if (node.elseStatement.kind === 235 /* IfStatement */) {
+                emitTokenWithComment(91 /* ElseKeyword */, node.thenStatement.end, writeKeyword, node);
+                if (node.elseStatement.kind === 237 /* IfStatement */) {
                     writeSpace();
                     emit(node.elseStatement);
                 }
@@ -105736,14 +107942,14 @@
             }
         }
         function emitWhileClause(node, startPos) {
-            var openParenPos = emitTokenWithComment(114 /* WhileKeyword */, startPos, writeKeyword, node);
+            var openParenPos = emitTokenWithComment(115 /* WhileKeyword */, startPos, writeKeyword, node);
             writeSpace();
             emitTokenWithComment(20 /* OpenParenToken */, openParenPos, writePunctuation, node);
             emitExpression(node.expression);
             emitTokenWithComment(21 /* CloseParenToken */, node.expression.end, writePunctuation, node);
         }
         function emitDoStatement(node) {
-            emitTokenWithComment(89 /* DoKeyword */, node.pos, writeKeyword, node);
+            emitTokenWithComment(90 /* DoKeyword */, node.pos, writeKeyword, node);
             emitEmbeddedStatement(node, node.statement);
             if (ts.isBlock(node.statement) && !preserveSourceNewlines) {
                 writeSpace();
@@ -105759,7 +107965,7 @@
             emitEmbeddedStatement(node, node.statement);
         }
         function emitForStatement(node) {
-            var openParenPos = emitTokenWithComment(96 /* ForKeyword */, node.pos, writeKeyword, node);
+            var openParenPos = emitTokenWithComment(97 /* ForKeyword */, node.pos, writeKeyword, node);
             writeSpace();
             var pos = emitTokenWithComment(20 /* OpenParenToken */, openParenPos, writePunctuation, /*contextNode*/ node);
             emitForBinding(node.initializer);
@@ -105771,25 +107977,25 @@
             emitEmbeddedStatement(node, node.statement);
         }
         function emitForInStatement(node) {
-            var openParenPos = emitTokenWithComment(96 /* ForKeyword */, node.pos, writeKeyword, node);
+            var openParenPos = emitTokenWithComment(97 /* ForKeyword */, node.pos, writeKeyword, node);
             writeSpace();
             emitTokenWithComment(20 /* OpenParenToken */, openParenPos, writePunctuation, node);
             emitForBinding(node.initializer);
             writeSpace();
-            emitTokenWithComment(100 /* InKeyword */, node.initializer.end, writeKeyword, node);
+            emitTokenWithComment(101 /* InKeyword */, node.initializer.end, writeKeyword, node);
             writeSpace();
             emitExpression(node.expression);
             emitTokenWithComment(21 /* CloseParenToken */, node.expression.end, writePunctuation, node);
             emitEmbeddedStatement(node, node.statement);
         }
         function emitForOfStatement(node) {
-            var openParenPos = emitTokenWithComment(96 /* ForKeyword */, node.pos, writeKeyword, node);
+            var openParenPos = emitTokenWithComment(97 /* ForKeyword */, node.pos, writeKeyword, node);
             writeSpace();
             emitWithTrailingSpace(node.awaitModifier);
             emitTokenWithComment(20 /* OpenParenToken */, openParenPos, writePunctuation, node);
             emitForBinding(node.initializer);
             writeSpace();
-            emitTokenWithComment(157 /* OfKeyword */, node.initializer.end, writeKeyword, node);
+            emitTokenWithComment(158 /* OfKeyword */, node.initializer.end, writeKeyword, node);
             writeSpace();
             emitExpression(node.expression);
             emitTokenWithComment(21 /* CloseParenToken */, node.expression.end, writePunctuation, node);
@@ -105797,7 +108003,7 @@
         }
         function emitForBinding(node) {
             if (node !== undefined) {
-                if (node.kind === 251 /* VariableDeclarationList */) {
+                if (node.kind === 253 /* VariableDeclarationList */) {
                     emit(node);
                 }
                 else {
@@ -105806,12 +108012,12 @@
             }
         }
         function emitContinueStatement(node) {
-            emitTokenWithComment(85 /* ContinueKeyword */, node.pos, writeKeyword, node);
+            emitTokenWithComment(86 /* ContinueKeyword */, node.pos, writeKeyword, node);
             emitWithLeadingSpace(node.label);
             writeTrailingSemicolon();
         }
         function emitBreakStatement(node) {
-            emitTokenWithComment(80 /* BreakKeyword */, node.pos, writeKeyword, node);
+            emitTokenWithComment(81 /* BreakKeyword */, node.pos, writeKeyword, node);
             emitWithLeadingSpace(node.label);
             writeTrailingSemicolon();
         }
@@ -105834,18 +108040,18 @@
             }
             pos = writeTokenText(token, writer, pos);
             if (isSimilarNode && contextNode.end !== pos) {
-                var isJsxExprContext = contextNode.kind === 284 /* JsxExpression */;
+                var isJsxExprContext = contextNode.kind === 286 /* JsxExpression */;
                 emitTrailingCommentsOfPosition(pos, /*prefixSpace*/ !isJsxExprContext, /*forceNoNewline*/ isJsxExprContext);
             }
             return pos;
         }
         function emitReturnStatement(node) {
-            emitTokenWithComment(104 /* ReturnKeyword */, node.pos, writeKeyword, /*contextNode*/ node);
+            emitTokenWithComment(105 /* ReturnKeyword */, node.pos, writeKeyword, /*contextNode*/ node);
             emitExpressionWithLeadingSpace(node.expression);
             writeTrailingSemicolon();
         }
         function emitWithStatement(node) {
-            var openParenPos = emitTokenWithComment(115 /* WithKeyword */, node.pos, writeKeyword, node);
+            var openParenPos = emitTokenWithComment(116 /* WithKeyword */, node.pos, writeKeyword, node);
             writeSpace();
             emitTokenWithComment(20 /* OpenParenToken */, openParenPos, writePunctuation, node);
             emitExpression(node.expression);
@@ -105853,7 +108059,7 @@
             emitEmbeddedStatement(node, node.statement);
         }
         function emitSwitchStatement(node) {
-            var openParenPos = emitTokenWithComment(106 /* SwitchKeyword */, node.pos, writeKeyword, node);
+            var openParenPos = emitTokenWithComment(107 /* SwitchKeyword */, node.pos, writeKeyword, node);
             writeSpace();
             emitTokenWithComment(20 /* OpenParenToken */, openParenPos, writePunctuation, node);
             emitExpression(node.expression);
@@ -105868,12 +108074,12 @@
             emit(node.statement);
         }
         function emitThrowStatement(node) {
-            emitTokenWithComment(108 /* ThrowKeyword */, node.pos, writeKeyword, node);
+            emitTokenWithComment(109 /* ThrowKeyword */, node.pos, writeKeyword, node);
             emitExpressionWithLeadingSpace(node.expression);
             writeTrailingSemicolon();
         }
         function emitTryStatement(node) {
-            emitTokenWithComment(110 /* TryKeyword */, node.pos, writeKeyword, node);
+            emitTokenWithComment(111 /* TryKeyword */, node.pos, writeKeyword, node);
             writeSpace();
             emit(node.tryBlock);
             if (node.catchClause) {
@@ -105882,13 +108088,13 @@
             }
             if (node.finallyBlock) {
                 writeLineOrSpace(node, node.catchClause || node.tryBlock, node.finallyBlock);
-                emitTokenWithComment(95 /* FinallyKeyword */, (node.catchClause || node.tryBlock).end, writeKeyword, node);
+                emitTokenWithComment(96 /* FinallyKeyword */, (node.catchClause || node.tryBlock).end, writeKeyword, node);
                 writeSpace();
                 emit(node.finallyBlock);
             }
         }
         function emitDebuggerStatement(node) {
-            writeToken(86 /* DebuggerKeyword */, node.pos, writeKeyword);
+            writeToken(87 /* DebuggerKeyword */, node.pos, writeKeyword);
             writeTrailingSemicolon();
         }
         //
@@ -106109,21 +108315,21 @@
         }
         function emitImportEqualsDeclaration(node) {
             emitModifiers(node, node.modifiers);
-            emitTokenWithComment(99 /* ImportKeyword */, node.modifiers ? node.modifiers.end : node.pos, writeKeyword, node);
+            emitTokenWithComment(100 /* ImportKeyword */, node.modifiers ? node.modifiers.end : node.pos, writeKeyword, node);
             writeSpace();
             if (node.isTypeOnly) {
-                emitTokenWithComment(149 /* TypeKeyword */, node.pos, writeKeyword, node);
+                emitTokenWithComment(150 /* TypeKeyword */, node.pos, writeKeyword, node);
                 writeSpace();
             }
             emit(node.name);
             writeSpace();
-            emitTokenWithComment(62 /* EqualsToken */, node.name.end, writePunctuation, node);
+            emitTokenWithComment(63 /* EqualsToken */, node.name.end, writePunctuation, node);
             writeSpace();
             emitModuleReference(node.moduleReference);
             writeTrailingSemicolon();
         }
         function emitModuleReference(node) {
-            if (node.kind === 78 /* Identifier */) {
+            if (node.kind === 79 /* Identifier */) {
                 emitExpression(node);
             }
             else {
@@ -106132,12 +108338,12 @@
         }
         function emitImportDeclaration(node) {
             emitModifiers(node, node.modifiers);
-            emitTokenWithComment(99 /* ImportKeyword */, node.modifiers ? node.modifiers.end : node.pos, writeKeyword, node);
+            emitTokenWithComment(100 /* ImportKeyword */, node.modifiers ? node.modifiers.end : node.pos, writeKeyword, node);
             writeSpace();
             if (node.importClause) {
                 emit(node.importClause);
                 writeSpace();
-                emitTokenWithComment(153 /* FromKeyword */, node.importClause.end, writeKeyword, node);
+                emitTokenWithComment(154 /* FromKeyword */, node.importClause.end, writeKeyword, node);
                 writeSpace();
             }
             emitExpression(node.moduleSpecifier);
@@ -106145,7 +108351,7 @@
         }
         function emitImportClause(node) {
             if (node.isTypeOnly) {
-                emitTokenWithComment(149 /* TypeKeyword */, node.pos, writeKeyword, node);
+                emitTokenWithComment(150 /* TypeKeyword */, node.pos, writeKeyword, node);
                 writeSpace();
             }
             emit(node.name);
@@ -106158,7 +108364,7 @@
         function emitNamespaceImport(node) {
             var asPos = emitTokenWithComment(41 /* AsteriskToken */, node.pos, writePunctuation, node);
             writeSpace();
-            emitTokenWithComment(126 /* AsKeyword */, asPos, writeKeyword, node);
+            emitTokenWithComment(127 /* AsKeyword */, asPos, writeKeyword, node);
             writeSpace();
             emit(node.name);
         }
@@ -106169,25 +108375,25 @@
             emitImportOrExportSpecifier(node);
         }
         function emitExportAssignment(node) {
-            var nextPos = emitTokenWithComment(92 /* ExportKeyword */, node.pos, writeKeyword, node);
+            var nextPos = emitTokenWithComment(93 /* ExportKeyword */, node.pos, writeKeyword, node);
             writeSpace();
             if (node.isExportEquals) {
-                emitTokenWithComment(62 /* EqualsToken */, nextPos, writeOperator, node);
+                emitTokenWithComment(63 /* EqualsToken */, nextPos, writeOperator, node);
             }
             else {
-                emitTokenWithComment(87 /* DefaultKeyword */, nextPos, writeKeyword, node);
+                emitTokenWithComment(88 /* DefaultKeyword */, nextPos, writeKeyword, node);
             }
             writeSpace();
             emitExpression(node.expression, node.isExportEquals ?
-                parenthesizer.getParenthesizeRightSideOfBinaryForOperator(62 /* EqualsToken */) :
+                parenthesizer.getParenthesizeRightSideOfBinaryForOperator(63 /* EqualsToken */) :
                 parenthesizer.parenthesizeExpressionOfExportDefault);
             writeTrailingSemicolon();
         }
         function emitExportDeclaration(node) {
-            var nextPos = emitTokenWithComment(92 /* ExportKeyword */, node.pos, writeKeyword, node);
+            var nextPos = emitTokenWithComment(93 /* ExportKeyword */, node.pos, writeKeyword, node);
             writeSpace();
             if (node.isTypeOnly) {
-                nextPos = emitTokenWithComment(149 /* TypeKeyword */, nextPos, writeKeyword, node);
+                nextPos = emitTokenWithComment(150 /* TypeKeyword */, nextPos, writeKeyword, node);
                 writeSpace();
             }
             if (node.exportClause) {
@@ -106199,18 +108405,18 @@
             if (node.moduleSpecifier) {
                 writeSpace();
                 var fromPos = node.exportClause ? node.exportClause.end : nextPos;
-                emitTokenWithComment(153 /* FromKeyword */, fromPos, writeKeyword, node);
+                emitTokenWithComment(154 /* FromKeyword */, fromPos, writeKeyword, node);
                 writeSpace();
                 emitExpression(node.moduleSpecifier);
             }
             writeTrailingSemicolon();
         }
         function emitNamespaceExportDeclaration(node) {
-            var nextPos = emitTokenWithComment(92 /* ExportKeyword */, node.pos, writeKeyword, node);
+            var nextPos = emitTokenWithComment(93 /* ExportKeyword */, node.pos, writeKeyword, node);
             writeSpace();
-            nextPos = emitTokenWithComment(126 /* AsKeyword */, nextPos, writeKeyword, node);
+            nextPos = emitTokenWithComment(127 /* AsKeyword */, nextPos, writeKeyword, node);
             writeSpace();
-            nextPos = emitTokenWithComment(140 /* NamespaceKeyword */, nextPos, writeKeyword, node);
+            nextPos = emitTokenWithComment(141 /* NamespaceKeyword */, nextPos, writeKeyword, node);
             writeSpace();
             emit(node.name);
             writeTrailingSemicolon();
@@ -106218,7 +108424,7 @@
         function emitNamespaceExport(node) {
             var asPos = emitTokenWithComment(41 /* AsteriskToken */, node.pos, writePunctuation, node);
             writeSpace();
-            emitTokenWithComment(126 /* AsKeyword */, asPos, writeKeyword, node);
+            emitTokenWithComment(127 /* AsKeyword */, asPos, writeKeyword, node);
             writeSpace();
             emit(node.name);
         }
@@ -106237,7 +108443,7 @@
             if (node.propertyName) {
                 emit(node.propertyName);
                 writeSpace();
-                emitTokenWithComment(126 /* AsKeyword */, node.propertyName.end, writeKeyword, node);
+                emitTokenWithComment(127 /* AsKeyword */, node.propertyName.end, writeKeyword, node);
                 writeSpace();
             }
             emit(node.name);
@@ -106339,7 +108545,7 @@
             }
         }
         function emitJsxTagName(node) {
-            if (node.kind === 78 /* Identifier */) {
+            if (node.kind === 79 /* Identifier */) {
                 emitExpression(node);
             }
             else {
@@ -106350,13 +108556,13 @@
         // Clauses
         //
         function emitCaseClause(node) {
-            emitTokenWithComment(81 /* CaseKeyword */, node.pos, writeKeyword, node);
+            emitTokenWithComment(82 /* CaseKeyword */, node.pos, writeKeyword, node);
             writeSpace();
             emitExpression(node.expression, parenthesizer.parenthesizeExpressionForDisallowedComma);
             emitCaseOrDefaultClauseRest(node, node.statements, node.expression.end);
         }
         function emitDefaultClause(node) {
-            var pos = emitTokenWithComment(87 /* DefaultKeyword */, node.pos, writeKeyword, node);
+            var pos = emitTokenWithComment(88 /* DefaultKeyword */, node.pos, writeKeyword, node);
             emitCaseOrDefaultClauseRest(node, node.statements, pos);
         }
         function emitCaseOrDefaultClauseRest(parentNode, statements, colonPos) {
@@ -106384,7 +108590,7 @@
             emitList(node, node.types, 528 /* HeritageClauseTypes */);
         }
         function emitCatchClause(node) {
-            var openParenPos = emitTokenWithComment(82 /* CatchKeyword */, node.pos, writeKeyword, node);
+            var openParenPos = emitTokenWithComment(83 /* CatchKeyword */, node.pos, writeKeyword, node);
             writeSpace();
             if (node.variableDeclaration) {
                 emitTokenWithComment(20 /* OpenParenToken */, openParenPos, writePunctuation, node);
@@ -106457,7 +108663,7 @@
                 }
             }
             if (node.tags) {
-                if (node.tags.length === 1 && node.tags[0].kind === 333 /* JSDocTypeTag */ && !node.comment) {
+                if (node.tags.length === 1 && node.tags[0].kind === 338 /* JSDocTypeTag */ && !node.comment) {
                     writeSpace();
                     emit(node.tags[0]);
                 }
@@ -106502,7 +108708,7 @@
         function emitJSDocTypedefTag(tag) {
             emitJSDocTagName(tag.tagName);
             if (tag.typeExpression) {
-                if (tag.typeExpression.kind === 302 /* JSDocTypeExpression */) {
+                if (tag.typeExpression.kind === 304 /* JSDocTypeExpression */) {
                     emitJSDocTypeExpression(tag.typeExpression);
                 }
                 else {
@@ -106521,7 +108727,7 @@
                 emit(tag.fullName);
             }
             emitJSDocComment(tag.comment);
-            if (tag.typeExpression && tag.typeExpression.kind === 314 /* JSDocTypeLiteral */) {
+            if (tag.typeExpression && tag.typeExpression.kind === 317 /* JSDocTypeLiteral */) {
                 emitJSDocTypeLiteral(tag.typeExpression);
             }
         }
@@ -106648,16 +108854,16 @@
                     writeLine();
                 }
             }
-            for (var _c = 0, files_1 = files; _c < files_1.length; _c++) {
-                var directive = files_1[_c];
+            for (var _c = 0, files_2 = files; _c < files_2.length; _c++) {
+                var directive = files_2[_c];
                 var pos = writer.getTextPos();
                 writeComment("/// <reference path=\"" + directive.fileName + "\" />");
                 if (bundleFileInfo)
                     bundleFileInfo.sections.push({ pos: pos, end: writer.getTextPos(), kind: "reference" /* Reference */, data: directive.fileName });
                 writeLine();
             }
-            for (var _d = 0, types_25 = types; _d < types_25.length; _d++) {
-                var directive = types_25[_d];
+            for (var _d = 0, types_24 = types; _d < types_24.length; _d++) {
+                var directive = types_24[_d];
                 var pos = writer.getTextPos();
                 writeComment("/// <reference types=\"" + directive.fileName + "\" />");
                 if (bundleFileInfo)
@@ -106837,7 +109043,7 @@
         function emitInitializer(node, equalCommentStartPos, container, parenthesizerRule) {
             if (node) {
                 writeSpace();
-                emitTokenWithComment(62 /* EqualsToken */, equalCommentStartPos, writeOperator, container);
+                emitTokenWithComment(63 /* EqualsToken */, equalCommentStartPos, writeOperator, container);
                 writeSpace();
                 emitExpression(node, parenthesizerRule);
             }
@@ -107408,7 +109614,7 @@
                 && ts.rangeEndIsOnSameLineAsRangeStart(block, block, currentSourceFile);
         }
         function skipSynthesizedParentheses(node) {
-            while (node.kind === 208 /* ParenthesizedExpression */ && ts.nodeIsSynthesized(node)) {
+            while (node.kind === 210 /* ParenthesizedExpression */ && ts.nodeIsSynthesized(node)) {
                 node = node.expression;
             }
             return node;
@@ -107478,84 +109684,84 @@
             if (!node)
                 return;
             switch (node.kind) {
-                case 231 /* Block */:
+                case 233 /* Block */:
                     ts.forEach(node.statements, generateNames);
                     break;
-                case 246 /* LabeledStatement */:
-                case 244 /* WithStatement */:
-                case 236 /* DoStatement */:
-                case 237 /* WhileStatement */:
+                case 248 /* LabeledStatement */:
+                case 246 /* WithStatement */:
+                case 238 /* DoStatement */:
+                case 239 /* WhileStatement */:
                     generateNames(node.statement);
                     break;
-                case 235 /* IfStatement */:
+                case 237 /* IfStatement */:
                     generateNames(node.thenStatement);
                     generateNames(node.elseStatement);
                     break;
-                case 238 /* ForStatement */:
-                case 240 /* ForOfStatement */:
-                case 239 /* ForInStatement */:
+                case 240 /* ForStatement */:
+                case 242 /* ForOfStatement */:
+                case 241 /* ForInStatement */:
                     generateNames(node.initializer);
                     generateNames(node.statement);
                     break;
-                case 245 /* SwitchStatement */:
+                case 247 /* SwitchStatement */:
                     generateNames(node.caseBlock);
                     break;
-                case 259 /* CaseBlock */:
+                case 261 /* CaseBlock */:
                     ts.forEach(node.clauses, generateNames);
                     break;
-                case 285 /* CaseClause */:
-                case 286 /* DefaultClause */:
+                case 287 /* CaseClause */:
+                case 288 /* DefaultClause */:
                     ts.forEach(node.statements, generateNames);
                     break;
-                case 248 /* TryStatement */:
+                case 250 /* TryStatement */:
                     generateNames(node.tryBlock);
                     generateNames(node.catchClause);
                     generateNames(node.finallyBlock);
                     break;
-                case 288 /* CatchClause */:
+                case 290 /* CatchClause */:
                     generateNames(node.variableDeclaration);
                     generateNames(node.block);
                     break;
-                case 233 /* VariableStatement */:
+                case 235 /* VariableStatement */:
                     generateNames(node.declarationList);
                     break;
-                case 251 /* VariableDeclarationList */:
+                case 253 /* VariableDeclarationList */:
                     ts.forEach(node.declarations, generateNames);
                     break;
-                case 250 /* VariableDeclaration */:
-                case 161 /* Parameter */:
-                case 199 /* BindingElement */:
-                case 253 /* ClassDeclaration */:
+                case 252 /* VariableDeclaration */:
+                case 162 /* Parameter */:
+                case 201 /* BindingElement */:
+                case 255 /* ClassDeclaration */:
                     generateNameIfNeeded(node.name);
                     break;
-                case 252 /* FunctionDeclaration */:
+                case 254 /* FunctionDeclaration */:
                     generateNameIfNeeded(node.name);
                     if (ts.getEmitFlags(node) & 524288 /* ReuseTempVariableScope */) {
                         ts.forEach(node.parameters, generateNames);
                         generateNames(node.body);
                     }
                     break;
-                case 197 /* ObjectBindingPattern */:
-                case 198 /* ArrayBindingPattern */:
+                case 199 /* ObjectBindingPattern */:
+                case 200 /* ArrayBindingPattern */:
                     ts.forEach(node.elements, generateNames);
                     break;
-                case 262 /* ImportDeclaration */:
+                case 264 /* ImportDeclaration */:
                     generateNames(node.importClause);
                     break;
-                case 263 /* ImportClause */:
+                case 265 /* ImportClause */:
                     generateNameIfNeeded(node.name);
                     generateNames(node.namedBindings);
                     break;
-                case 264 /* NamespaceImport */:
+                case 266 /* NamespaceImport */:
                     generateNameIfNeeded(node.name);
                     break;
-                case 270 /* NamespaceExport */:
+                case 272 /* NamespaceExport */:
                     generateNameIfNeeded(node.name);
                     break;
-                case 265 /* NamedImports */:
+                case 267 /* NamedImports */:
                     ts.forEach(node.elements, generateNames);
                     break;
-                case 266 /* ImportSpecifier */:
+                case 268 /* ImportSpecifier */:
                     generateNameIfNeeded(node.propertyName || node.name);
                     break;
             }
@@ -107564,12 +109770,12 @@
             if (!node)
                 return;
             switch (node.kind) {
-                case 289 /* PropertyAssignment */:
-                case 290 /* ShorthandPropertyAssignment */:
-                case 164 /* PropertyDeclaration */:
-                case 166 /* MethodDeclaration */:
-                case 168 /* GetAccessor */:
-                case 169 /* SetAccessor */:
+                case 291 /* PropertyAssignment */:
+                case 292 /* ShorthandPropertyAssignment */:
+                case 165 /* PropertyDeclaration */:
+                case 167 /* MethodDeclaration */:
+                case 170 /* GetAccessor */:
+                case 171 /* SetAccessor */:
                     generateNameIfNeeded(node.name);
                     break;
             }
@@ -107749,25 +109955,25 @@
          */
         function generateNameForNode(node, flags) {
             switch (node.kind) {
-                case 78 /* Identifier */:
+                case 79 /* Identifier */:
                     return makeUniqueName(getTextOfNode(node), isUniqueName, !!(flags & 16 /* Optimistic */), !!(flags & 8 /* ReservedInNestedScopes */));
-                case 257 /* ModuleDeclaration */:
-                case 256 /* EnumDeclaration */:
+                case 259 /* ModuleDeclaration */:
+                case 258 /* EnumDeclaration */:
                     return generateNameForModuleOrEnum(node);
-                case 262 /* ImportDeclaration */:
-                case 268 /* ExportDeclaration */:
+                case 264 /* ImportDeclaration */:
+                case 270 /* ExportDeclaration */:
                     return generateNameForImportOrExportDeclaration(node);
-                case 252 /* FunctionDeclaration */:
-                case 253 /* ClassDeclaration */:
-                case 267 /* ExportAssignment */:
+                case 254 /* FunctionDeclaration */:
+                case 255 /* ClassDeclaration */:
+                case 269 /* ExportAssignment */:
                     return generateNameForExportDefault();
-                case 222 /* ClassExpression */:
+                case 224 /* ClassExpression */:
                     return generateNameForClassExpression();
-                case 166 /* MethodDeclaration */:
-                case 168 /* GetAccessor */:
-                case 169 /* SetAccessor */:
+                case 167 /* MethodDeclaration */:
+                case 170 /* GetAccessor */:
+                case 171 /* SetAccessor */:
                     return generateNameForMethodOrAccessor(node);
-                case 159 /* ComputedPropertyName */:
+                case 160 /* ComputedPropertyName */:
                     return makeTempVariableName(0 /* Auto */, /*reserveInNestedScopes*/ true);
                 default:
                     return makeTempVariableName(0 /* Auto */);
@@ -107848,7 +110054,7 @@
                 // Emit leading comments if the position is not synthesized and the node
                 // has not opted out from emitting leading comments.
                 if (!skipLeadingComments) {
-                    emitLeadingComments(pos, /*isEmittedNode*/ node.kind !== 339 /* NotEmittedStatement */);
+                    emitLeadingComments(pos, /*isEmittedNode*/ node.kind !== 344 /* NotEmittedStatement */);
                 }
                 if (!skipLeadingComments || (pos >= 0 && (emitFlags & 512 /* NoLeadingComments */) !== 0)) {
                     // Advance the container position if comments get emitted or if they've been disabled explicitly using NoLeadingComments.
@@ -107859,7 +110065,7 @@
                     containerEnd = end;
                     // To avoid invalid comment emit in a down-level binding pattern, we
                     // keep track of the last declaration list container's end
-                    if (node.kind === 251 /* VariableDeclarationList */) {
+                    if (node.kind === 253 /* VariableDeclarationList */) {
                         declarationListContainerEnd = end;
                     }
                 }
@@ -107878,7 +110084,7 @@
                 declarationListContainerEnd = savedDeclarationListContainerEnd;
                 // Emit trailing comments if the position is not synthesized and the node
                 // has not opted out from emitting leading comments and is an emitted node.
-                if (!skipTrailingComments && node.kind !== 339 /* NotEmittedStatement */) {
+                if (!skipTrailingComments && node.kind !== 344 /* NotEmittedStatement */) {
                     emitTrailingComments(end);
                 }
             }
@@ -108153,7 +110359,7 @@
             }
             else {
                 var source = sourceMapRange.source || sourceMapSource;
-                if (node.kind !== 339 /* NotEmittedStatement */
+                if (node.kind !== 344 /* NotEmittedStatement */
                     && (emitFlags & 16 /* NoLeadingSourceMap */) === 0
                     && sourceMapRange.pos >= 0) {
                     emitSourcePos(sourceMapRange.source || sourceMapSource, skipSourceTrivia(source, sourceMapRange.pos));
@@ -108171,7 +110377,7 @@
                 if (emitFlags & 64 /* NoNestedSourceMaps */) {
                     sourceMapsDisabled = false;
                 }
-                if (node.kind !== 339 /* NotEmittedStatement */
+                if (node.kind !== 344 /* NotEmittedStatement */
                     && (emitFlags & 32 /* NoTrailingSourceMap */) === 0
                     && sourceMapRange.end >= 0) {
                     emitSourcePos(sourceMapRange.source || sourceMapSource, sourceMapRange.end);
@@ -108421,7 +110627,7 @@
             var rootResult = tryReadDirectory(rootDir, rootDirPath);
             var rootSymLinkResult;
             if (rootResult !== undefined) {
-                return ts.matchFiles(rootDir, extensions, excludes, includes, useCaseSensitiveFileNames, currentDirectory, depth, getFileSystemEntries, realpath);
+                return ts.matchFiles(rootDir, extensions, excludes, includes, useCaseSensitiveFileNames, currentDirectory, depth, getFileSystemEntries, realpath, directoryExists);
             }
             return host.readDirectory(rootDir, extensions, excludes, includes, depth);
             function getFileSystemEntries(dir) {
@@ -108570,6 +110776,17 @@
     }
     ts.cleanExtendedConfigCache = cleanExtendedConfigCache;
     /**
+     * Updates watchers based on the package json files used in module resolution
+     */
+    function updatePackageJsonWatch(lookups, packageJsonWatches, createPackageJsonWatch) {
+        var newMap = new ts.Map(lookups);
+        ts.mutateMap(packageJsonWatches, newMap, {
+            createNewValue: createPackageJsonWatch,
+            onDeleteValue: ts.closeFileWatcher
+        });
+    }
+    ts.updatePackageJsonWatch = updatePackageJsonWatch;
+    /**
      * Updates the existing missing file watches with the new set of missing files after new program is created
      */
     function updateMissingFilePathsWatch(program, missingFileWatches, createMissingFileWatch) {
@@ -108643,7 +110860,7 @@
             return false;
         // We want to ignore emit file check if file is not going to be emitted next to source file
         // In that case we follow config file inclusion rules
-        if (options.outFile || options.outDir)
+        if (ts.outFile(options) || options.outDir)
             return false;
         // File if emitted next to input needs to be ignored
         if (ts.fileExtensionIs(fileOrDirectoryPath, ".d.ts" /* Dts */)) {
@@ -108770,7 +110987,7 @@
                 var triggerredInfo = (key === "watchFile" ? "FileWatcher" : "DirectoryWatcher") + ":: Triggered with " + args[0] + " " + (args[1] !== undefined ? args[1] : "") + ":: " + getWatchInfo(file, flags, options, detailInfo1, detailInfo2, getDetailWatchInfo);
                 log(triggerredInfo);
                 var start = ts.timestamp();
-                cb.call.apply(cb, __spreadArray([/*thisArg*/ undefined], args));
+                cb.call.apply(cb, __spreadArray([/*thisArg*/ undefined], args, false));
                 var elapsed = ts.timestamp() - start;
                 log("Elapsed:: " + elapsed + "ms " + triggerredInfo);
             }, flags, options, detailInfo1, detailInfo2); };
@@ -109142,7 +111359,7 @@
             var lineStart = ts.getPositionOfLineAndCharacter(file, i, 0);
             var lineEnd = i < lastLineInFile ? ts.getPositionOfLineAndCharacter(file, i + 1, 0) : file.text.length;
             var lineContent = file.text.slice(lineStart, lineEnd);
-            lineContent = lineContent.replace(/\s+$/g, ""); // trim from end
+            lineContent = ts.trimStringEnd(lineContent); // trim from end
             lineContent = lineContent.replace(/\t/g, " "); // convert tabs to single spaces
             // Output the gutter and the actual contents of the line.
             context += indent + formatColorAndReset(ts.padLeft(i + 1 + "", gutterWidth), gutterStyleSequence) + gutterSeparator;
@@ -109416,7 +111633,7 @@
     }
     ts.isProgramUptoDate = isProgramUptoDate;
     function getConfigFileParsingDiagnostics(configFileParseResult) {
-        return configFileParseResult.options.configFile ? __spreadArray(__spreadArray([], configFileParseResult.options.configFile.parseDiagnostics), configFileParseResult.errors) :
+        return configFileParseResult.options.configFile ? __spreadArray(__spreadArray([], configFileParseResult.options.configFile.parseDiagnostics, true), configFileParseResult.errors, true) :
             configFileParseResult.errors;
     }
     ts.getConfigFileParsingDiagnostics = getConfigFileParsingDiagnostics;
@@ -109428,10 +111645,7 @@
             return false;
         // If any compiler options change, we can't reuse old source file even if version match
         // The change in options like these could result in change in syntax tree or `sourceFile.bindDiagnostics`.
-        var oldOptions = program.getCompilerOptions();
-        return !!ts.sourceFileAffectingCompilerOptions.some(function (option) {
-            return !ts.isJsonEqual(ts.getCompilerOptionValue(oldOptions, option), ts.getCompilerOptionValue(newOptions, option));
-        });
+        return ts.optionsHaveChanges(program.getCompilerOptions(), newOptions, ts.sourceFileAffectingCompilerOptions);
     }
     function createCreateProgramOptions(rootNames, options, host, oldProgram, configFileParsingDiagnostics) {
         return {
@@ -109526,6 +111740,7 @@
         var sourceFileToPackageName = new ts.Map();
         // Key is a file name. Value is the (non-empty, or undefined) list of files that redirect to it.
         var redirectTargetsMap = ts.createMultiMap();
+        var usesUriStyleNodeCoreModules = false;
         /**
          * map with
          * - SourceFile if present
@@ -109681,6 +111896,7 @@
             getSourceFileByPath: getSourceFileByPath,
             getSourceFiles: function () { return files; },
             getMissingFilePaths: function () { return missingFilePaths; },
+            getModuleResolutionCache: function () { return moduleResolutionCache; },
             getFilesByNameMap: function () { return filesByName; },
             getCompilerOptions: function () { return options; },
             getSyntacticDiagnostics: getSyntacticDiagnostics,
@@ -109713,6 +111929,7 @@
             getLibFileFromReference: getLibFileFromReference,
             sourceFileToPackageName: sourceFileToPackageName,
             redirectTargetsMap: redirectTargetsMap,
+            usesUriStyleNodeCoreModules: usesUriStyleNodeCoreModules,
             isEmittedFile: isEmittedFile,
             getConfigFileParsingDiagnostics: getConfigFileParsingDiagnostics,
             getResolvedModuleWithFailedLookupLocationsFromCache: getResolvedModuleWithFailedLookupLocationsFromCache,
@@ -109740,7 +111957,7 @@
                     return programDiagnostics.add(createDiagnosticExplainingFile(diagnostic.file && getSourceFileByPath(diagnostic.file), diagnostic.fileProcessingReason, diagnostic.diagnostic, diagnostic.args || ts.emptyArray));
                 case 0 /* FilePreprocessingReferencedDiagnostic */:
                     var _a = getReferencedFileLocation(getSourceFileByPath, diagnostic.reason), file = _a.file, pos = _a.pos, end = _a.end;
-                    return programDiagnostics.add(ts.createFileDiagnostic.apply(void 0, __spreadArray([file, ts.Debug.checkDefined(pos), ts.Debug.checkDefined(end) - pos, diagnostic.diagnostic], diagnostic.args || ts.emptyArray)));
+                    return programDiagnostics.add(ts.createFileDiagnostic.apply(void 0, __spreadArray([file, ts.Debug.checkDefined(pos), ts.Debug.checkDefined(end) - pos, diagnostic.diagnostic], diagnostic.args || ts.emptyArray, false)));
                 default:
                     ts.Debug.assertNever(diagnostic);
             }
@@ -109843,8 +112060,8 @@
                 // Initialize a checker so that all our files are bound.
                 getTypeChecker();
                 classifiableNames = new ts.Set();
-                for (var _i = 0, files_2 = files; _i < files_2.length; _i++) {
-                    var sourceFile = files_2[_i];
+                for (var _i = 0, files_3 = files; _i < files_3.length; _i++) {
+                    var sourceFile = files_3[_i];
                     (_a = sourceFile.classifiableNames) === null || _a === void 0 ? void 0 : _a.forEach(function (value) { return classifiableNames.add(value); });
                 }
             }
@@ -109866,13 +112083,13 @@
                 // which per above occurred during the current program creation.
                 // Since we assume the filesystem does not change during program creation,
                 // it is safe to reuse resolutions from the earlier call.
-                var result_15 = [];
+                var result_14 = [];
                 for (var _i = 0, moduleNames_1 = moduleNames; _i < moduleNames_1.length; _i++) {
                     var moduleName = moduleNames_1[_i];
                     var resolvedModule = file.resolvedModules.get(moduleName);
-                    result_15.push(resolvedModule);
+                    result_14.push(resolvedModule);
                 }
-                return result_15;
+                return result_14;
             }
             // At this point, we know at least one of the following hold:
             // - file has local declarations for ambient modules
@@ -109900,7 +112117,9 @@
                     var oldResolvedModule = ts.getResolvedModule(oldSourceFile, moduleName);
                     if (oldResolvedModule) {
                         if (ts.isTraceEnabled(options, host)) {
-                            ts.trace(host, ts.Diagnostics.Reusing_resolution_of_module_0_to_file_1_from_old_program, moduleName, ts.getNormalizedAbsolutePath(file.originalFileName, currentDirectory));
+                            ts.trace(host, oldResolvedModule.packageId ?
+                                ts.Diagnostics.Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2_with_Package_ID_3 :
+                                ts.Diagnostics.Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2, moduleName, ts.getNormalizedAbsolutePath(file.originalFileName, currentDirectory), oldResolvedModule.resolvedFileName, oldResolvedModule.packageId && ts.packageIdToString(oldResolvedModule.packageId));
                         }
                         (result || (result = new Array(moduleNames.length)))[i] = oldResolvedModule;
                         (reusedNames || (reusedNames = [])).push(moduleName);
@@ -110013,9 +112232,6 @@
             if (!ts.arrayIsEqualTo(oldRootNames, rootNames)) {
                 return 0 /* Not */;
             }
-            if (!ts.arrayIsEqualTo(options.types, oldOptions.types)) {
-                return 0 /* Not */;
-            }
             // Check if any referenced project tsconfig files are different
             if (!canReuseProjectReferences()) {
                 return 0 /* Not */;
@@ -110090,7 +112306,7 @@
                     // The `newSourceFile` object was created for the new program.
                     if (!ts.arrayIsEqualTo(oldSourceFile.libReferenceDirectives, newSourceFile.libReferenceDirectives, fileReferenceIsEqualTo)) {
                         // 'lib' references has changed. Matches behavior in changesAffectModuleResolution
-                        return 0 /* Not */;
+                        structureIsReused = 1 /* SafeModules */;
                     }
                     if (oldSourceFile.hasNoDefaultLib !== newSourceFile.hasNoDefaultLib) {
                         // value of no-default-lib has changed
@@ -110175,7 +112391,7 @@
             if (structureIsReused !== 2 /* Completely */) {
                 return structureIsReused;
             }
-            if ((_a = host.hasChangedAutomaticTypeDirectiveNames) === null || _a === void 0 ? void 0 : _a.call(host)) {
+            if (ts.changesAffectingProgramStructure(oldOptions, options) || ((_a = host.hasChangedAutomaticTypeDirectiveNames) === null || _a === void 0 ? void 0 : _a.call(host))) {
                 return 1 /* SafeModules */;
             }
             missingFilePaths = oldProgram.getMissingFilePaths();
@@ -110206,6 +112422,7 @@
             resolvedTypeReferenceDirectives = oldProgram.getResolvedTypeReferenceDirectives();
             sourceFileToPackageName = oldProgram.sourceFileToPackageName;
             redirectTargetsMap = oldProgram.redirectTargetsMap;
+            usesUriStyleNodeCoreModules = oldProgram.usesUriStyleNodeCoreModules;
             return 2 /* Completely */;
         }
         function getEmitHost(writeFileCallback) {
@@ -110418,7 +112635,7 @@
             }
         }
         function getSemanticDiagnosticsForFile(sourceFile, cancellationToken) {
-            return ts.concatenate(filterSemanticDiagnotics(getBindAndCheckDiagnosticsForFile(sourceFile, cancellationToken), options), getProgramDiagnostics(sourceFile));
+            return ts.concatenate(filterSemanticDiagnostics(getBindAndCheckDiagnosticsForFile(sourceFile, cancellationToken), options), getProgramDiagnostics(sourceFile));
         }
         function getBindAndCheckDiagnosticsForFile(sourceFile, cancellationToken) {
             return getAndCacheDiagnostics(sourceFile, cancellationToken, cachedBindAndCheckDiagnosticsForFile, getBindAndCheckDiagnosticsForFileNoCache);
@@ -110433,8 +112650,8 @@
                 var isCheckJs = ts.isCheckJsEnabledForFile(sourceFile, options);
                 var isTsNoCheck = !!sourceFile.checkJsDirective && sourceFile.checkJsDirective.enabled === false;
                 // By default, only type-check .ts, .tsx, 'Deferred' and 'External' files (external files are added by plugins)
-                var includeBindAndCheckDiagnostics = !isTsNoCheck && (sourceFile.scriptKind === 3 /* TS */ || sourceFile.scriptKind === 4 /* TSX */ ||
-                    sourceFile.scriptKind === 5 /* External */ || isCheckJs || sourceFile.scriptKind === 7 /* Deferred */);
+                var includeBindAndCheckDiagnostics = !isTsNoCheck && (sourceFile.scriptKind === 3 /* TS */ || sourceFile.scriptKind === 4 /* TSX */
+                    || sourceFile.scriptKind === 5 /* External */ || isCheckJs || sourceFile.scriptKind === 7 /* Deferred */);
                 var bindDiagnostics = includeBindAndCheckDiagnostics ? sourceFile.bindDiagnostics : ts.emptyArray;
                 var checkDiagnostics = includeBindAndCheckDiagnostics ? typeChecker.getDiagnostics(sourceFile, cancellationToken) : ts.emptyArray;
                 return getMergedBindAndCheckDiagnostics(sourceFile, includeBindAndCheckDiagnostics, bindDiagnostics, checkDiagnostics, isCheckJs ? sourceFile.jsDocDiagnostics : undefined);
@@ -110508,22 +112725,22 @@
                     // Return directly from the case if the given node doesnt want to visit each child
                     // Otherwise break to visit each child
                     switch (parent.kind) {
-                        case 161 /* Parameter */:
-                        case 164 /* PropertyDeclaration */:
-                        case 166 /* MethodDeclaration */:
+                        case 162 /* Parameter */:
+                        case 165 /* PropertyDeclaration */:
+                        case 167 /* MethodDeclaration */:
                             if (parent.questionToken === node) {
                                 diagnostics.push(createDiagnosticForNode(node, ts.Diagnostics.The_0_modifier_can_only_be_used_in_TypeScript_files, "?"));
                                 return "skip";
                             }
                         // falls through
-                        case 165 /* MethodSignature */:
-                        case 167 /* Constructor */:
-                        case 168 /* GetAccessor */:
-                        case 169 /* SetAccessor */:
-                        case 209 /* FunctionExpression */:
-                        case 252 /* FunctionDeclaration */:
-                        case 210 /* ArrowFunction */:
-                        case 250 /* VariableDeclaration */:
+                        case 166 /* MethodSignature */:
+                        case 169 /* Constructor */:
+                        case 170 /* GetAccessor */:
+                        case 171 /* SetAccessor */:
+                        case 211 /* FunctionExpression */:
+                        case 254 /* FunctionDeclaration */:
+                        case 212 /* ArrowFunction */:
+                        case 252 /* VariableDeclaration */:
                             // type annotation
                             if (parent.type === node) {
                                 diagnostics.push(createDiagnosticForNode(node, ts.Diagnostics.Type_annotations_can_only_be_used_in_TypeScript_files));
@@ -110531,58 +112748,58 @@
                             }
                     }
                     switch (node.kind) {
-                        case 263 /* ImportClause */:
+                        case 265 /* ImportClause */:
                             if (node.isTypeOnly) {
                                 diagnostics.push(createDiagnosticForNode(parent, ts.Diagnostics._0_declarations_can_only_be_used_in_TypeScript_files, "import type"));
                                 return "skip";
                             }
                             break;
-                        case 268 /* ExportDeclaration */:
+                        case 270 /* ExportDeclaration */:
                             if (node.isTypeOnly) {
                                 diagnostics.push(createDiagnosticForNode(node, ts.Diagnostics._0_declarations_can_only_be_used_in_TypeScript_files, "export type"));
                                 return "skip";
                             }
                             break;
-                        case 261 /* ImportEqualsDeclaration */:
+                        case 263 /* ImportEqualsDeclaration */:
                             diagnostics.push(createDiagnosticForNode(node, ts.Diagnostics.import_can_only_be_used_in_TypeScript_files));
                             return "skip";
-                        case 267 /* ExportAssignment */:
+                        case 269 /* ExportAssignment */:
                             if (node.isExportEquals) {
                                 diagnostics.push(createDiagnosticForNode(node, ts.Diagnostics.export_can_only_be_used_in_TypeScript_files));
                                 return "skip";
                             }
                             break;
-                        case 287 /* HeritageClause */:
+                        case 289 /* HeritageClause */:
                             var heritageClause = node;
-                            if (heritageClause.token === 116 /* ImplementsKeyword */) {
+                            if (heritageClause.token === 117 /* ImplementsKeyword */) {
                                 diagnostics.push(createDiagnosticForNode(node, ts.Diagnostics.implements_clauses_can_only_be_used_in_TypeScript_files));
                                 return "skip";
                             }
                             break;
-                        case 254 /* InterfaceDeclaration */:
-                            var interfaceKeyword = ts.tokenToString(117 /* InterfaceKeyword */);
+                        case 256 /* InterfaceDeclaration */:
+                            var interfaceKeyword = ts.tokenToString(118 /* InterfaceKeyword */);
                             ts.Debug.assertIsDefined(interfaceKeyword);
                             diagnostics.push(createDiagnosticForNode(node, ts.Diagnostics._0_declarations_can_only_be_used_in_TypeScript_files, interfaceKeyword));
                             return "skip";
-                        case 257 /* ModuleDeclaration */:
-                            var moduleKeyword = node.flags & 16 /* Namespace */ ? ts.tokenToString(140 /* NamespaceKeyword */) : ts.tokenToString(139 /* ModuleKeyword */);
+                        case 259 /* ModuleDeclaration */:
+                            var moduleKeyword = node.flags & 16 /* Namespace */ ? ts.tokenToString(141 /* NamespaceKeyword */) : ts.tokenToString(140 /* ModuleKeyword */);
                             ts.Debug.assertIsDefined(moduleKeyword);
                             diagnostics.push(createDiagnosticForNode(node, ts.Diagnostics._0_declarations_can_only_be_used_in_TypeScript_files, moduleKeyword));
                             return "skip";
-                        case 255 /* TypeAliasDeclaration */:
+                        case 257 /* TypeAliasDeclaration */:
                             diagnostics.push(createDiagnosticForNode(node, ts.Diagnostics.Type_aliases_can_only_be_used_in_TypeScript_files));
                             return "skip";
-                        case 256 /* EnumDeclaration */:
-                            var enumKeyword = ts.Debug.checkDefined(ts.tokenToString(91 /* EnumKeyword */));
+                        case 258 /* EnumDeclaration */:
+                            var enumKeyword = ts.Debug.checkDefined(ts.tokenToString(92 /* EnumKeyword */));
                             diagnostics.push(createDiagnosticForNode(node, ts.Diagnostics._0_declarations_can_only_be_used_in_TypeScript_files, enumKeyword));
                             return "skip";
-                        case 226 /* NonNullExpression */:
+                        case 228 /* NonNullExpression */:
                             diagnostics.push(createDiagnosticForNode(node, ts.Diagnostics.Non_null_assertions_can_only_be_used_in_TypeScript_files));
                             return "skip";
-                        case 225 /* AsExpression */:
+                        case 227 /* AsExpression */:
                             diagnostics.push(createDiagnosticForNode(node.type, ts.Diagnostics.Type_assertion_expressions_can_only_be_used_in_TypeScript_files));
                             return "skip";
-                        case 207 /* TypeAssertionExpression */:
+                        case 209 /* TypeAssertionExpression */:
                             ts.Debug.fail(); // Won't parse these in a JS file anyway, as they are interpreted as JSX.
                     }
                 }
@@ -110591,53 +112808,53 @@
                         diagnostics.push(createDiagnosticForNode(parent, ts.Diagnostics.Experimental_support_for_decorators_is_a_feature_that_is_subject_to_change_in_a_future_release_Set_the_experimentalDecorators_option_in_your_tsconfig_or_jsconfig_to_remove_this_warning));
                     }
                     switch (parent.kind) {
-                        case 253 /* ClassDeclaration */:
-                        case 222 /* ClassExpression */:
-                        case 166 /* MethodDeclaration */:
-                        case 167 /* Constructor */:
-                        case 168 /* GetAccessor */:
-                        case 169 /* SetAccessor */:
-                        case 209 /* FunctionExpression */:
-                        case 252 /* FunctionDeclaration */:
-                        case 210 /* ArrowFunction */:
+                        case 255 /* ClassDeclaration */:
+                        case 224 /* ClassExpression */:
+                        case 167 /* MethodDeclaration */:
+                        case 169 /* Constructor */:
+                        case 170 /* GetAccessor */:
+                        case 171 /* SetAccessor */:
+                        case 211 /* FunctionExpression */:
+                        case 254 /* FunctionDeclaration */:
+                        case 212 /* ArrowFunction */:
                             // Check type parameters
                             if (nodes === parent.typeParameters) {
                                 diagnostics.push(createDiagnosticForNodeArray(nodes, ts.Diagnostics.Type_parameter_declarations_can_only_be_used_in_TypeScript_files));
                                 return "skip";
                             }
                         // falls through
-                        case 233 /* VariableStatement */:
+                        case 235 /* VariableStatement */:
                             // Check modifiers
                             if (nodes === parent.modifiers) {
-                                checkModifiers(parent.modifiers, parent.kind === 233 /* VariableStatement */);
+                                checkModifiers(parent.modifiers, parent.kind === 235 /* VariableStatement */);
                                 return "skip";
                             }
                             break;
-                        case 164 /* PropertyDeclaration */:
+                        case 165 /* PropertyDeclaration */:
                             // Check modifiers of property declaration
                             if (nodes === parent.modifiers) {
                                 for (var _i = 0, _a = nodes; _i < _a.length; _i++) {
                                     var modifier = _a[_i];
-                                    if (modifier.kind !== 123 /* StaticKeyword */) {
+                                    if (modifier.kind !== 124 /* StaticKeyword */) {
                                         diagnostics.push(createDiagnosticForNode(modifier, ts.Diagnostics.The_0_modifier_can_only_be_used_in_TypeScript_files, ts.tokenToString(modifier.kind)));
                                     }
                                 }
                                 return "skip";
                             }
                             break;
-                        case 161 /* Parameter */:
+                        case 162 /* Parameter */:
                             // Check modifiers of parameter declaration
                             if (nodes === parent.modifiers) {
                                 diagnostics.push(createDiagnosticForNodeArray(nodes, ts.Diagnostics.Parameter_modifiers_can_only_be_used_in_TypeScript_files));
                                 return "skip";
                             }
                             break;
-                        case 204 /* CallExpression */:
-                        case 205 /* NewExpression */:
-                        case 224 /* ExpressionWithTypeArguments */:
-                        case 275 /* JsxSelfClosingElement */:
-                        case 276 /* JsxOpeningElement */:
-                        case 206 /* TaggedTemplateExpression */:
+                        case 206 /* CallExpression */:
+                        case 207 /* NewExpression */:
+                        case 226 /* ExpressionWithTypeArguments */:
+                        case 277 /* JsxSelfClosingElement */:
+                        case 278 /* JsxOpeningElement */:
+                        case 208 /* TaggedTemplateExpression */:
                             // Check type arguments
                             if (nodes === parent.typeArguments) {
                                 diagnostics.push(createDiagnosticForNodeArray(nodes, ts.Diagnostics.Type_arguments_can_only_be_used_in_TypeScript_files));
@@ -110650,25 +112867,25 @@
                     for (var _i = 0, modifiers_2 = modifiers; _i < modifiers_2.length; _i++) {
                         var modifier = modifiers_2[_i];
                         switch (modifier.kind) {
-                            case 84 /* ConstKeyword */:
+                            case 85 /* ConstKeyword */:
                                 if (isConstValid) {
                                     continue;
                                 }
                             // to report error,
                             // falls through
-                            case 122 /* PublicKeyword */:
-                            case 120 /* PrivateKeyword */:
-                            case 121 /* ProtectedKeyword */:
-                            case 142 /* ReadonlyKeyword */:
-                            case 133 /* DeclareKeyword */:
-                            case 125 /* AbstractKeyword */:
-                            case 156 /* OverrideKeyword */:
+                            case 123 /* PublicKeyword */:
+                            case 121 /* PrivateKeyword */:
+                            case 122 /* ProtectedKeyword */:
+                            case 143 /* ReadonlyKeyword */:
+                            case 134 /* DeclareKeyword */:
+                            case 126 /* AbstractKeyword */:
+                            case 157 /* OverrideKeyword */:
                                 diagnostics.push(createDiagnosticForNode(modifier, ts.Diagnostics.The_0_modifier_can_only_be_used_in_TypeScript_files, ts.tokenToString(modifier.kind)));
                                 break;
                             // These are all legal modifiers.
-                            case 123 /* StaticKeyword */:
-                            case 92 /* ExportKeyword */:
-                            case 87 /* DefaultKeyword */:
+                            case 124 /* StaticKeyword */:
+                            case 93 /* ExportKeyword */:
+                            case 88 /* DefaultKeyword */:
                         }
                     }
                 }
@@ -110739,8 +112956,8 @@
             return a.fileName === b.fileName;
         }
         function moduleNameIsEqualTo(a, b) {
-            return a.kind === 78 /* Identifier */
-                ? b.kind === 78 /* Identifier */ && a.escapedText === b.escapedText
+            return a.kind === 79 /* Identifier */
+                ? b.kind === 79 /* Identifier */ && a.escapedText === b.escapedText
                 : b.kind === 10 /* StringLiteral */ && a.text === b.text;
         }
         function createSyntheticImport(text, file) {
@@ -110798,6 +113015,9 @@
                     // only through top - level external module names. Relative external module names are not permitted.
                     if (moduleNameExpr && ts.isStringLiteral(moduleNameExpr) && moduleNameExpr.text && (!inAmbientModule || !ts.isExternalModuleNameRelative(moduleNameExpr.text))) {
                         imports = ts.append(imports, moduleNameExpr);
+                        if (!usesUriStyleNodeCoreModules && currentNodeModulesDepth === 0 && !file.isDeclarationFile) {
+                            usesUriStyleNodeCoreModules = ts.startsWith(moduleNameExpr.text, "node:");
+                        }
                     }
                 }
                 else if (ts.isModuleDeclaration(node)) {
@@ -111424,6 +113644,9 @@
             if (options.strictPropertyInitialization && !ts.getStrictOptionValue(options, "strictNullChecks")) {
                 createDiagnosticForOptionName(ts.Diagnostics.Option_0_cannot_be_specified_without_specifying_option_1, "strictPropertyInitialization", "strictNullChecks");
             }
+            if (options.exactOptionalPropertyTypes && !ts.getStrictOptionValue(options, "strictNullChecks")) {
+                createDiagnosticForOptionName(ts.Diagnostics.Option_0_cannot_be_specified_without_specifying_option_1, "exactOptionalPropertyTypes", "strictNullChecks");
+            }
             if (options.isolatedModules) {
                 if (options.out) {
                     createDiagnosticForOptionName(ts.Diagnostics.Option_0_cannot_be_specified_with_option_1, "out", "isolatedModules");
@@ -111461,8 +113684,8 @@
             // List of collected files is complete; validate exhautiveness if this is a project with a file list
             if (options.composite) {
                 var rootPaths = new ts.Set(rootNames.map(toPath));
-                for (var _i = 0, files_3 = files; _i < files_3.length; _i++) {
-                    var file = files_3[_i];
+                for (var _i = 0, files_4 = files; _i < files_4.length; _i++) {
+                    var file = files_4[_i];
                     // Ignore file that is not emitted
                     if (ts.sourceFileMayBeEmitted(file, program) && !rootPaths.has(file.path)) {
                         addProgramDiagnosticExplainingFile(file, ts.Diagnostics.File_0_is_not_listed_within_the_file_list_of_project_1_Projects_must_list_all_files_or_use_an_include_pattern, [file.fileName, options.configFilePath || ""]);
@@ -111692,7 +113915,7 @@
             var location = locationReason && getReferencedFileLocation(getSourceFileByPath, locationReason);
             var fileIncludeReasonDetails = fileIncludeReasons && ts.chainDiagnosticMessages(fileIncludeReasons, ts.Diagnostics.The_file_is_in_the_program_because_Colon);
             var redirectInfo = file && ts.explainIfFileIsRedirect(file);
-            var chain = ts.chainDiagnosticMessages.apply(void 0, __spreadArray([redirectInfo ? fileIncludeReasonDetails ? __spreadArray([fileIncludeReasonDetails], redirectInfo) : redirectInfo : fileIncludeReasonDetails, diagnostic], args || ts.emptyArray));
+            var chain = ts.chainDiagnosticMessages.apply(void 0, __spreadArray([redirectInfo ? fileIncludeReasonDetails ? __spreadArray([fileIncludeReasonDetails], redirectInfo, true) : redirectInfo : fileIncludeReasonDetails, diagnostic], args || ts.emptyArray, false));
             return location && isReferenceFileLocation(location) ?
                 ts.createFileDiagnosticFromMessageChain(location.file, location.pos, location.end - location.pos, chain, relatedInfo) :
                 ts.createCompilerDiagnosticFromMessageChain(chain, relatedInfo);
@@ -111976,7 +114199,13 @@
             if (host.getSymlinkCache) {
                 return host.getSymlinkCache();
             }
-            return symlinks || (symlinks = ts.discoverProbableSymlinks(files, getCanonicalFileName, host.getCurrentDirectory()));
+            if (!symlinks) {
+                symlinks = ts.createSymlinkCache(currentDirectory, getCanonicalFileName);
+            }
+            if (files && resolvedTypeReferenceDirectives && !symlinks.hasProcessedResolutions()) {
+                symlinks.setSymlinksFromResolutions(files, resolvedTypeReferenceDirectives);
+            }
+            return symlinks;
         }
     }
     ts.createProgram = createProgram;
@@ -112146,7 +114375,7 @@
         // get any preEmit diagnostics, not just the ones
         if (!options.noEmitOnError)
             return undefined;
-        var diagnostics = __spreadArray(__spreadArray(__spreadArray(__spreadArray([], program.getOptionsDiagnostics(cancellationToken)), program.getSyntacticDiagnostics(sourceFile, cancellationToken)), program.getGlobalDiagnostics(cancellationToken)), program.getSemanticDiagnostics(sourceFile, cancellationToken));
+        var diagnostics = __spreadArray(__spreadArray(__spreadArray(__spreadArray([], program.getOptionsDiagnostics(cancellationToken), true), program.getSyntacticDiagnostics(sourceFile, cancellationToken), true), program.getGlobalDiagnostics(cancellationToken), true), program.getSemanticDiagnostics(sourceFile, cancellationToken), true);
         if (diagnostics.length === 0 && ts.getEmitDeclarations(program.getCompilerOptions())) {
             diagnostics = program.getDeclarationDiagnostics(/*sourceFile*/ undefined, cancellationToken);
         }
@@ -112156,17 +114385,17 @@
         if (!sourceFile && !ts.outFile(options)) {
             var emitResult = program.emitBuildInfo(writeFile, cancellationToken);
             if (emitResult.diagnostics)
-                diagnostics = __spreadArray(__spreadArray([], diagnostics), emitResult.diagnostics);
+                diagnostics = __spreadArray(__spreadArray([], diagnostics, true), emitResult.diagnostics, true);
             emittedFiles = emitResult.emittedFiles;
         }
         return { diagnostics: diagnostics, sourceMaps: undefined, emittedFiles: emittedFiles, emitSkipped: true };
     }
     ts.handleNoEmitOptions = handleNoEmitOptions;
     /*@internal*/
-    function filterSemanticDiagnotics(diagnostic, option) {
+    function filterSemanticDiagnostics(diagnostic, option) {
         return ts.filter(diagnostic, function (d) { return !d.skippedOn || !option[d.skippedOn]; });
     }
-    ts.filterSemanticDiagnotics = filterSemanticDiagnotics;
+    ts.filterSemanticDiagnostics = filterSemanticDiagnostics;
     /* @internal */
     function parseConfigHostFromCompilerHostLike(host, directoryStructureHost) {
         if (directoryStructureHost === void 0) { directoryStructureHost = host; }
@@ -112288,21 +114517,86 @@
     ts.getFileEmitOutput = getFileEmitOutput;
     var BuilderState;
     (function (BuilderState) {
-        /**
-         * Get the referencedFile from the imported module symbol
-         */
-        function getReferencedFileFromImportedModuleSymbol(symbol) {
-            if (symbol.declarations && symbol.declarations[0]) {
-                var declarationSourceFile = ts.getSourceFileOfNode(symbol.declarations[0]);
-                return declarationSourceFile && declarationSourceFile.resolvedPath;
+        var manyToManyPathMapCount = 0;
+        function createManyToManyPathMap() {
+            function create(forward, reverse, deleted) {
+                var version = 0;
+                var map = {
+                    id: manyToManyPathMapCount++,
+                    version: function () { return version; },
+                    clone: function () { return create(new ts.Map(forward), new ts.Map(reverse), deleted && new ts.Set(deleted)); },
+                    forEach: function (fn) { return forward.forEach(fn); },
+                    getKeys: function (v) { return reverse.get(v); },
+                    getValues: function (k) { return forward.get(k); },
+                    hasKey: function (k) { return forward.has(k); },
+                    keys: function () { return forward.keys(); },
+                    deletedKeys: function () { return deleted; },
+                    deleteKey: function (k) {
+                        (deleted || (deleted = new ts.Set())).add(k);
+                        var set = forward.get(k);
+                        if (!set) {
+                            return false;
+                        }
+                        set.forEach(function (v) { return deleteFromMultimap(reverse, v, k); });
+                        forward.delete(k);
+                        version++;
+                        return true;
+                    },
+                    set: function (k, vSet) {
+                        var changed = !!(deleted === null || deleted === void 0 ? void 0 : deleted.delete(k));
+                        var existingVSet = forward.get(k);
+                        forward.set(k, vSet);
+                        existingVSet === null || existingVSet === void 0 ? void 0 : existingVSet.forEach(function (v) {
+                            if (!vSet.has(v)) {
+                                changed = true;
+                                deleteFromMultimap(reverse, v, k);
+                            }
+                        });
+                        vSet.forEach(function (v) {
+                            if (!(existingVSet === null || existingVSet === void 0 ? void 0 : existingVSet.has(v))) {
+                                changed = true;
+                                addToMultimap(reverse, v, k);
+                            }
+                        });
+                        if (changed) {
+                            version++;
+                        }
+                        return map;
+                    },
+                };
+                return map;
             }
+            return create(new ts.Map(), new ts.Map(), /*deleted*/ undefined);
+        }
+        BuilderState.createManyToManyPathMap = createManyToManyPathMap;
+        function addToMultimap(map, k, v) {
+            var set = map.get(k);
+            if (!set) {
+                set = new ts.Set();
+                map.set(k, set);
+            }
+            set.add(v);
+        }
+        function deleteFromMultimap(map, k, v, removeEmpty) {
+            if (removeEmpty === void 0) { removeEmpty = true; }
+            var set = map.get(k);
+            if (set === null || set === void 0 ? void 0 : set.delete(v)) {
+                if (removeEmpty && !set.size) {
+                    map.delete(k);
+                }
+                return true;
+            }
+            return false;
+        }
+        function getReferencedFilesFromImportedModuleSymbol(symbol) {
+            return ts.mapDefined(symbol.declarations, function (declaration) { var _a; return (_a = ts.getSourceFileOfNode(declaration)) === null || _a === void 0 ? void 0 : _a.resolvedPath; });
         }
         /**
-         * Get the referencedFile from the import name node from file
+         * Get the module source file and all augmenting files from the import name node from file
          */
-        function getReferencedFileFromImportLiteral(checker, importName) {
+        function getReferencedFilesFromImportLiteral(checker, importName) {
             var symbol = checker.getSymbolAtLocation(importName);
-            return symbol && getReferencedFileFromImportedModuleSymbol(symbol);
+            return symbol && getReferencedFilesFromImportedModuleSymbol(symbol);
         }
         /**
          * Gets the path to reference file from file name, it could be resolvedPath if present otherwise path
@@ -112322,10 +114616,8 @@
                 var checker = program.getTypeChecker();
                 for (var _i = 0, _a = sourceFile.imports; _i < _a.length; _i++) {
                     var importName = _a[_i];
-                    var declarationSourceFilePath = getReferencedFileFromImportLiteral(checker, importName);
-                    if (declarationSourceFilePath) {
-                        addReferencedFile(declarationSourceFilePath);
-                    }
+                    var declarationSourceFilePaths = getReferencedFilesFromImportLiteral(checker, importName);
+                    declarationSourceFilePaths === null || declarationSourceFilePaths === void 0 ? void 0 : declarationSourceFilePaths.forEach(addReferencedFile);
                 }
             }
             var sourceFileDirectory = ts.getDirectoryPath(sourceFile.resolvedPath);
@@ -112402,8 +114694,8 @@
          */
         function create(newProgram, getCanonicalFileName, oldState, disableUseFileVersionAsSignature) {
             var fileInfos = new ts.Map();
-            var referencedMap = newProgram.getCompilerOptions().module !== ts.ModuleKind.None ? new ts.Map() : undefined;
-            var exportedModulesMap = referencedMap ? new ts.Map() : undefined;
+            var referencedMap = newProgram.getCompilerOptions().module !== ts.ModuleKind.None ? createManyToManyPathMap() : undefined;
+            var exportedModulesMap = referencedMap ? createManyToManyPathMap() : undefined;
             var hasCalledUpdateShapeSignature = new ts.Set();
             var useOldState = canReuseOldState(referencedMap, oldState);
             // Ensure source files have parent pointers set
@@ -112420,7 +114712,7 @@
                     }
                     // Copy old visible to outside files map
                     if (useOldState) {
-                        var exportedModules = oldState.exportedModulesMap.get(sourceFile.resolvedPath);
+                        var exportedModules = oldState.exportedModulesMap.getValues(sourceFile.resolvedPath);
                         if (exportedModules) {
                             exportedModulesMap.set(sourceFile.resolvedPath, exportedModules);
                         }
@@ -112449,11 +114741,12 @@
          * Creates a clone of the state
          */
         function clone(state) {
+            var _a, _b;
             // Dont need to backup allFiles info since its cache anyway
             return {
                 fileInfos: new ts.Map(state.fileInfos),
-                referencedMap: state.referencedMap && new ts.Map(state.referencedMap),
-                exportedModulesMap: state.exportedModulesMap && new ts.Map(state.exportedModulesMap),
+                referencedMap: (_a = state.referencedMap) === null || _a === void 0 ? void 0 : _a.clone(),
+                exportedModulesMap: (_b = state.exportedModulesMap) === null || _b === void 0 ? void 0 : _b.clone(),
                 hasCalledUpdateShapeSignature: new ts.Set(state.hasCalledUpdateShapeSignature),
                 useFileVersionAsSignature: state.useFileVersionAsSignature,
             };
@@ -112499,7 +114792,8 @@
         /**
          * Returns if the shape of the signature has changed since last emit
          */
-        function updateShapeSignature(state, programOfThisState, sourceFile, cacheToUpdateSignature, cancellationToken, computeHash, exportedModulesMapCache) {
+        function updateShapeSignature(state, programOfThisState, sourceFile, cacheToUpdateSignature, cancellationToken, computeHash, exportedModulesMapCache, useFileVersionAsSignature) {
+            if (useFileVersionAsSignature === void 0) { useFileVersionAsSignature = state.useFileVersionAsSignature; }
             ts.Debug.assert(!!sourceFile);
             ts.Debug.assert(!exportedModulesMapCache || !!state.exportedModulesMap, "Compute visible to outside map only if visibleToOutsideReferencedMap present in the state");
             // If we have cached the result for this file, that means hence forth we should assume file shape is uptodate
@@ -112511,7 +114805,7 @@
                 return ts.Debug.fail();
             var prevSignature = info.signature;
             var latestSignature;
-            if (!sourceFile.isDeclarationFile && !state.useFileVersionAsSignature) {
+            if (!sourceFile.isDeclarationFile && !useFileVersionAsSignature) {
                 var emitOutput_1 = getFileEmitOutput(programOfThisState, sourceFile, 
                 /*emitOnlyDtsFiles*/ true, cancellationToken, 
                 /*customTransformers*/ undefined, 
@@ -112530,8 +114824,13 @@
                 latestSignature = sourceFile.version;
                 if (exportedModulesMapCache && latestSignature !== prevSignature) {
                     // All the references in this file are exported
-                    var references = state.referencedMap ? state.referencedMap.get(sourceFile.resolvedPath) : undefined;
-                    exportedModulesMapCache.set(sourceFile.resolvedPath, references || false);
+                    var references = state.referencedMap ? state.referencedMap.getValues(sourceFile.resolvedPath) : undefined;
+                    if (references) {
+                        exportedModulesMapCache.set(sourceFile.resolvedPath, references);
+                    }
+                    else {
+                        exportedModulesMapCache.deleteKey(sourceFile.resolvedPath);
+                    }
                 }
             }
             cacheToUpdateSignature.set(sourceFile.resolvedPath, latestSignature);
@@ -112543,18 +114842,23 @@
          */
         function updateExportedModules(sourceFile, exportedModulesFromDeclarationEmit, exportedModulesMapCache) {
             if (!exportedModulesFromDeclarationEmit) {
-                exportedModulesMapCache.set(sourceFile.resolvedPath, false);
+                exportedModulesMapCache.deleteKey(sourceFile.resolvedPath);
                 return;
             }
             var exportedModules;
-            exportedModulesFromDeclarationEmit.forEach(function (symbol) { return addExportedModule(getReferencedFileFromImportedModuleSymbol(symbol)); });
-            exportedModulesMapCache.set(sourceFile.resolvedPath, exportedModules || false);
-            function addExportedModule(exportedModulePath) {
-                if (exportedModulePath) {
+            exportedModulesFromDeclarationEmit.forEach(function (symbol) { return addExportedModule(getReferencedFilesFromImportedModuleSymbol(symbol)); });
+            if (exportedModules) {
+                exportedModulesMapCache.set(sourceFile.resolvedPath, exportedModules);
+            }
+            else {
+                exportedModulesMapCache.deleteKey(sourceFile.resolvedPath);
+            }
+            function addExportedModule(exportedModulePaths) {
+                if (exportedModulePaths === null || exportedModulePaths === void 0 ? void 0 : exportedModulePaths.length) {
                     if (!exportedModules) {
                         exportedModules = new ts.Set();
                     }
-                    exportedModules.add(exportedModulePath);
+                    exportedModulePaths.forEach(function (path) { return exportedModules.add(path); });
                 }
             }
         }
@@ -112563,16 +114867,25 @@
          * This should be called whenever it is safe to commit the state of the builder
          */
         function updateExportedFilesMapFromCache(state, exportedModulesMapCache) {
+            var _a;
             if (exportedModulesMapCache) {
                 ts.Debug.assert(!!state.exportedModulesMap);
-                exportedModulesMapCache.forEach(function (exportedModules, path) {
-                    if (exportedModules) {
-                        state.exportedModulesMap.set(path, exportedModules);
+                var cacheId = exportedModulesMapCache.id;
+                var cacheVersion = exportedModulesMapCache.version();
+                if (state.previousCache) {
+                    if (state.previousCache.id === cacheId && state.previousCache.version === cacheVersion) {
+                        // If this is the same cache at the same version as last time this BuilderState
+                        // was updated, there's no need to update again
+                        return;
                     }
-                    else {
-                        state.exportedModulesMap.delete(path);
-                    }
-                });
+                    state.previousCache.id = cacheId;
+                    state.previousCache.version = cacheVersion;
+                }
+                else {
+                    state.previousCache = { id: cacheId, version: cacheVersion };
+                }
+                (_a = exportedModulesMapCache.deletedKeys()) === null || _a === void 0 ? void 0 : _a.forEach(function (path) { return state.exportedModulesMap.deleteKey(path); });
+                exportedModulesMapCache.forEach(function (exportedModules, path) { return state.exportedModulesMap.set(path, exportedModules); });
             }
         }
         BuilderState.updateExportedFilesMapFromCache = updateExportedFilesMapFromCache;
@@ -112596,7 +114909,7 @@
                 var path = queue.pop();
                 if (!seenMap.has(path)) {
                     seenMap.add(path);
-                    var references = state.referencedMap.get(path);
+                    var references = state.referencedMap.getValues(path);
                     if (references) {
                         var iterator = references.keys();
                         for (var iterResult = iterator.next(); !iterResult.done; iterResult = iterator.next()) {
@@ -112622,10 +114935,8 @@
          * Gets the files referenced by the the file path
          */
         function getReferencedByPaths(state, referencedFilePath) {
-            return ts.arrayFrom(ts.mapDefinedIterator(state.referencedMap.entries(), function (_a) {
-                var filePath = _a[0], referencesInFile = _a[1];
-                return referencesInFile.has(referencedFilePath) ? filePath : undefined;
-            }));
+            var keys = state.referencedMap.getKeys(referencedFilePath);
+            return keys ? ts.arrayFrom(keys.keys()) : [];
         }
         BuilderState.getReferencedByPaths = getReferencedByPaths;
         /**
@@ -112655,7 +114966,7 @@
          */
         function isFileAffectingGlobalScope(sourceFile) {
             return containsGlobalScopeAugmentation(sourceFile) ||
-                !ts.isExternalOrCommonJsModule(sourceFile) && !containsOnlyAmbientModules(sourceFile);
+                !ts.isExternalOrCommonJsModule(sourceFile) && !ts.isJsonSourceFile(sourceFile) && !containsOnlyAmbientModules(sourceFile);
         }
         /**
          * Gets all files of the program excluding the default library file
@@ -112791,7 +115102,7 @@
                 // versions dont match
                 oldInfo.version !== info.version ||
                 // Referenced files changed
-                !hasSameKeys(newReferences = referencedMap && referencedMap.get(sourceFilePath), oldReferencedMap && oldReferencedMap.get(sourceFilePath)) ||
+                !hasSameKeys(newReferences = referencedMap && referencedMap.getValues(sourceFilePath), oldReferencedMap && oldReferencedMap.getValues(sourceFilePath)) ||
                 // Referenced file was deleted in the new program
                 newReferences && ts.forEachKey(newReferences, function (path) { return !state.fileInfos.has(path) && oldState.fileInfos.has(path); })) {
                 // Register file as changed file and do not copy semantic diagnostics, since all changed files need to be re-evaluated
@@ -112867,6 +115178,7 @@
      * Creates a clone of the state
      */
     function cloneBuilderProgramState(state) {
+        var _a;
         var newState = ts.BuilderState.clone(state);
         newState.semanticDiagnosticsPerFile = state.semanticDiagnosticsPerFile && new ts.Map(state.semanticDiagnosticsPerFile);
         newState.changedFilesSet = new ts.Set(state.changedFilesSet);
@@ -112874,7 +115186,7 @@
         newState.affectedFilesIndex = state.affectedFilesIndex;
         newState.currentChangedFilePath = state.currentChangedFilePath;
         newState.currentAffectedFilesSignatures = state.currentAffectedFilesSignatures && new ts.Map(state.currentAffectedFilesSignatures);
-        newState.currentAffectedFilesExportedModulesMap = state.currentAffectedFilesExportedModulesMap && new ts.Map(state.currentAffectedFilesExportedModulesMap);
+        newState.currentAffectedFilesExportedModulesMap = (_a = state.currentAffectedFilesExportedModulesMap) === null || _a === void 0 ? void 0 : _a.clone();
         newState.seenAffectedFiles = state.seenAffectedFiles && new ts.Set(state.seenAffectedFiles);
         newState.cleanedDiagnosticsOfLibFiles = state.cleanedDiagnosticsOfLibFiles;
         newState.semanticDiagnosticsFromOldState = state.semanticDiagnosticsFromOldState && new ts.Set(state.semanticDiagnosticsFromOldState);
@@ -112942,8 +115254,7 @@
             if (!state.currentAffectedFilesSignatures)
                 state.currentAffectedFilesSignatures = new ts.Map();
             if (state.exportedModulesMap) {
-                if (!state.currentAffectedFilesExportedModulesMap)
-                    state.currentAffectedFilesExportedModulesMap = new ts.Map();
+                state.currentAffectedFilesExportedModulesMap || (state.currentAffectedFilesExportedModulesMap = ts.BuilderState.createManyToManyPathMap());
             }
             state.affectedFiles = ts.BuilderState.getFilesAffectedBy(state, program, nextKey.value, cancellationToken, computeHash, state.currentAffectedFilesSignatures, state.currentAffectedFilesExportedModulesMap);
             state.currentChangedFilePath = nextKey.value;
@@ -113023,14 +115334,15 @@
                 // we need to update the signature to reflect correctness of the signature(which is output d.ts emit) of this file
                 // This ensures that we dont later during incremental builds considering wrong signature.
                 // Eg where this also is needed to ensure that .tsbuildinfo generated by incremental build should be same as if it was first fresh build
-                ts.BuilderState.updateShapeSignature(state, program, sourceFile, ts.Debug.checkDefined(state.currentAffectedFilesSignatures), cancellationToken, computeHash, state.currentAffectedFilesExportedModulesMap);
+                // But we avoid expensive full shape computation, as using file version as shape is enough for correctness.
+                ts.BuilderState.updateShapeSignature(state, program, sourceFile, ts.Debug.checkDefined(state.currentAffectedFilesSignatures), cancellationToken, computeHash, state.currentAffectedFilesExportedModulesMap, 
+                /* useFileVersionAsSignature */ true);
                 // If not dts emit, nothing more to do
                 if (ts.getEmitDeclarations(state.compilerOptions)) {
                     addToAffectedFilesPendingEmit(state, path, 0 /* DtsOnly */);
                 }
             }
         }
-        return false;
     }
     /**
      * Removes semantic diagnostics for path and
@@ -113053,6 +115365,7 @@
      * Iterate on referencing modules that export entities from affected file
      */
     function forEachReferencingModulesOfExportOfAffectedFile(state, affectedFile, fn) {
+        var _a, _b;
         // If there was change in signature (dts output) for the changed file,
         // then only we need to handle pending file emit
         if (!state.exportedModulesMap || !state.changedFilesSet.has(affectedFile.resolvedPath)) {
@@ -113070,8 +115383,8 @@
                 var currentPath = queue.pop();
                 if (!seenFileNamesMap.has(currentPath)) {
                     seenFileNamesMap.set(currentPath, true);
-                    var result = fn(state, currentPath);
-                    if (result && isChangedSignature(state, currentPath)) {
+                    fn(state, currentPath);
+                    if (isChangedSignature(state, currentPath)) {
                         var currentSourceFile = ts.Debug.checkDefined(state.program).getSourceFileByPath(currentPath);
                         queue.push.apply(queue, ts.BuilderState.getReferencedByPaths(state, currentSourceFile.resolvedPath));
                     }
@@ -113082,17 +115395,15 @@
         var seenFileAndExportsOfFile = new ts.Set();
         // Go through exported modules from cache first
         // If exported modules has path, all files referencing file exported from are affected
-        if (ts.forEachEntry(state.currentAffectedFilesExportedModulesMap, function (exportedModules, exportedFromPath) {
-            return exportedModules &&
-                exportedModules.has(affectedFile.resolvedPath) &&
-                forEachFilesReferencingPath(state, exportedFromPath, seenFileAndExportsOfFile, fn);
-        })) {
-            return;
-        }
+        (_a = state.currentAffectedFilesExportedModulesMap.getKeys(affectedFile.resolvedPath)) === null || _a === void 0 ? void 0 : _a.forEach(function (exportedFromPath) {
+            return forEachFilesReferencingPath(state, exportedFromPath, seenFileAndExportsOfFile, fn);
+        });
         // If exported from path is not from cache and exported modules has path, all files referencing file exported from are affected
-        ts.forEachEntry(state.exportedModulesMap, function (exportedModules, exportedFromPath) {
-            return !state.currentAffectedFilesExportedModulesMap.has(exportedFromPath) && // If we already iterated this through cache, ignore it
-                exportedModules.has(affectedFile.resolvedPath) &&
+        (_b = state.exportedModulesMap.getKeys(affectedFile.resolvedPath)) === null || _b === void 0 ? void 0 : _b.forEach(function (exportedFromPath) {
+            var _a;
+            // If the cache had an updated value, skip
+            return !state.currentAffectedFilesExportedModulesMap.hasKey(exportedFromPath) &&
+                !((_a = state.currentAffectedFilesExportedModulesMap.deletedKeys()) === null || _a === void 0 ? void 0 : _a.has(exportedFromPath)) &&
                 forEachFilesReferencingPath(state, exportedFromPath, seenFileAndExportsOfFile, fn);
         });
     }
@@ -113100,43 +115411,37 @@
      * Iterate on files referencing referencedPath
      */
     function forEachFilesReferencingPath(state, referencedPath, seenFileAndExportsOfFile, fn) {
-        return ts.forEachEntry(state.referencedMap, function (referencesInFile, filePath) {
-            return referencesInFile.has(referencedPath) && forEachFileAndExportsOfFile(state, filePath, seenFileAndExportsOfFile, fn);
+        var _a;
+        (_a = state.referencedMap.getKeys(referencedPath)) === null || _a === void 0 ? void 0 : _a.forEach(function (filePath) {
+            return forEachFileAndExportsOfFile(state, filePath, seenFileAndExportsOfFile, fn);
         });
     }
     /**
      * fn on file and iterate on anything that exports this file
      */
     function forEachFileAndExportsOfFile(state, filePath, seenFileAndExportsOfFile, fn) {
+        var _a, _b, _c;
         if (!ts.tryAddToSet(seenFileAndExportsOfFile, filePath)) {
-            return false;
+            return;
         }
-        if (fn(state, filePath)) {
-            // If there are no more diagnostics from old cache, done
-            return true;
-        }
+        fn(state, filePath);
         ts.Debug.assert(!!state.currentAffectedFilesExportedModulesMap);
         // Go through exported modules from cache first
         // If exported modules has path, all files referencing file exported from are affected
-        if (ts.forEachEntry(state.currentAffectedFilesExportedModulesMap, function (exportedModules, exportedFromPath) {
-            return exportedModules &&
-                exportedModules.has(filePath) &&
-                forEachFileAndExportsOfFile(state, exportedFromPath, seenFileAndExportsOfFile, fn);
-        })) {
-            return true;
-        }
+        (_a = state.currentAffectedFilesExportedModulesMap.getKeys(filePath)) === null || _a === void 0 ? void 0 : _a.forEach(function (exportedFromPath) {
+            return forEachFileAndExportsOfFile(state, exportedFromPath, seenFileAndExportsOfFile, fn);
+        });
         // If exported from path is not from cache and exported modules has path, all files referencing file exported from are affected
-        if (ts.forEachEntry(state.exportedModulesMap, function (exportedModules, exportedFromPath) {
-            return !state.currentAffectedFilesExportedModulesMap.has(exportedFromPath) && // If we already iterated this through cache, ignore it
-                exportedModules.has(filePath) &&
+        (_b = state.exportedModulesMap.getKeys(filePath)) === null || _b === void 0 ? void 0 : _b.forEach(function (exportedFromPath) {
+            var _a;
+            // If the cache had an updated value, skip
+            return !state.currentAffectedFilesExportedModulesMap.hasKey(exportedFromPath) &&
+                !((_a = state.currentAffectedFilesExportedModulesMap.deletedKeys()) === null || _a === void 0 ? void 0 : _a.has(exportedFromPath)) &&
                 forEachFileAndExportsOfFile(state, exportedFromPath, seenFileAndExportsOfFile, fn);
-        })) {
-            return true;
-        }
+        });
         // Remove diagnostics of files that import this file (without going to exports of referencing files)
-        return !!ts.forEachEntry(state.referencedMap, function (referencesInFile, referencingFilePath) {
-            return referencesInFile.has(filePath) &&
-                !seenFileAndExportsOfFile.has(referencingFilePath) && // Not already removed diagnostic file
+        (_c = state.referencedMap.getKeys(filePath)) === null || _c === void 0 ? void 0 : _c.forEach(function (referencingFilePath) {
+            return !seenFileAndExportsOfFile.has(referencingFilePath) && // Not already removed diagnostic file
                 fn(state, referencingFilePath);
         } // Dont add to seen since this is not yet done with the export removal
         );
@@ -113198,7 +115503,7 @@
             var cachedDiagnostics = state.semanticDiagnosticsPerFile.get(path);
             // Report the bind and check diagnostics from the cache if we already have those diagnostics present
             if (cachedDiagnostics) {
-                return ts.filterSemanticDiagnotics(cachedDiagnostics, state.compilerOptions);
+                return ts.filterSemanticDiagnostics(cachedDiagnostics, state.compilerOptions);
             }
         }
         // Diagnostics werent cached, get them from program, and cache the result
@@ -113206,7 +115511,7 @@
         if (state.semanticDiagnosticsPerFile) {
             state.semanticDiagnosticsPerFile.set(path, diagnostics);
         }
-        return ts.filterSemanticDiagnotics(diagnostics, state.compilerOptions);
+        return ts.filterSemanticDiagnostics(diagnostics, state.compilerOptions);
     }
     /**
      * Gets the program information to be emitted in buildInfo so that we can use it to create new program
@@ -113241,19 +115546,24 @@
         if (state.referencedMap) {
             referencedMap = ts.arrayFrom(state.referencedMap.keys()).sort(ts.compareStringsCaseSensitive).map(function (key) { return [
                 toFileId(key),
-                toFileIdListId(state.referencedMap.get(key))
+                toFileIdListId(state.referencedMap.getValues(key))
             ]; });
         }
         var exportedModulesMap;
         if (state.exportedModulesMap) {
             exportedModulesMap = ts.mapDefined(ts.arrayFrom(state.exportedModulesMap.keys()).sort(ts.compareStringsCaseSensitive), function (key) {
-                var newValue = state.currentAffectedFilesExportedModulesMap && state.currentAffectedFilesExportedModulesMap.get(key);
+                var _a;
+                if (state.currentAffectedFilesExportedModulesMap) {
+                    if ((_a = state.currentAffectedFilesExportedModulesMap.deletedKeys()) === null || _a === void 0 ? void 0 : _a.has(key)) {
+                        return undefined;
+                    }
+                    var newValue = state.currentAffectedFilesExportedModulesMap.getValues(key);
+                    if (newValue) {
+                        return [toFileId(key), toFileIdListId(newValue)];
+                    }
+                }
                 // Not in temporary cache, use existing value
-                if (newValue === undefined)
-                    return [toFileId(key), toFileIdListId(state.exportedModulesMap.get(key))];
-                // Value in cache and has updated value map, use that
-                else if (newValue)
-                    return [toFileId(key), toFileIdListId(newValue)];
+                return [toFileId(key), toFileIdListId(state.exportedModulesMap.getValues(key))];
             });
         }
         var semanticDiagnosticsPerFile;
@@ -113430,8 +115740,9 @@
         newProgram = undefined; // TODO: GH#18217
         oldProgram = undefined;
         oldState = undefined;
-        var builderProgram = createRedirectedBuilderProgram(state, configFileParsingDiagnostics);
-        builderProgram.getState = function () { return state; };
+        var getState = function () { return state; };
+        var builderProgram = createRedirectedBuilderProgram(getState, configFileParsingDiagnostics);
+        builderProgram.getState = getState;
         builderProgram.backupState = function () {
             ts.Debug.assert(backupState === undefined);
             backupState = cloneBuilderProgramState(state);
@@ -113666,8 +115977,8 @@
         var state = {
             fileInfos: fileInfos,
             compilerOptions: program.options ? ts.convertToOptionsWithAbsolutePaths(program.options, toAbsolutePath) : {},
-            referencedMap: toMapOfReferencedSet(program.referencedMap),
-            exportedModulesMap: toMapOfReferencedSet(program.exportedModulesMap),
+            referencedMap: toManyToManyPathMap(program.referencedMap),
+            exportedModulesMap: toManyToManyPathMap(program.exportedModulesMap),
             semanticDiagnosticsPerFile: program.semanticDiagnosticsPerFile && ts.arrayToMap(program.semanticDiagnosticsPerFile, function (value) { return toFilePath(ts.isNumber(value) ? value : value[0]); }, function (value) { return ts.isNumber(value) ? ts.emptyArray : value[1]; }),
             hasReusableDiagnostic: true,
             affectedFilesPendingEmit: ts.map(program.affectedFilesPendingEmit, function (value) { return toFilePath(value[0]); }),
@@ -113710,20 +116021,28 @@
         function toFilePathsSet(fileIdsListId) {
             return filePathsSetList[fileIdsListId - 1];
         }
-        function toMapOfReferencedSet(referenceMap) {
-            return referenceMap && ts.arrayToMap(referenceMap, function (value) { return toFilePath(value[0]); }, function (value) { return toFilePathsSet(value[1]); });
+        function toManyToManyPathMap(referenceMap) {
+            if (!referenceMap) {
+                return undefined;
+            }
+            var map = ts.BuilderState.createManyToManyPathMap();
+            referenceMap.forEach(function (_a) {
+                var fileId = _a[0], fileIdListId = _a[1];
+                return map.set(toFilePath(fileId), toFilePathsSet(fileIdListId));
+            });
+            return map;
         }
     }
     ts.createBuildProgramUsingProgramBuildInfo = createBuildProgramUsingProgramBuildInfo;
-    function createRedirectedBuilderProgram(state, configFileParsingDiagnostics) {
+    function createRedirectedBuilderProgram(getState, configFileParsingDiagnostics) {
         return {
             getState: ts.notImplemented,
             backupState: ts.noop,
             restoreState: ts.noop,
             getProgram: getProgram,
-            getProgramOrUndefined: function () { return state.program; },
-            releaseProgram: function () { return state.program = undefined; },
-            getCompilerOptions: function () { return state.compilerOptions; },
+            getProgramOrUndefined: function () { return getState().program; },
+            releaseProgram: function () { return getState().program = undefined; },
+            getCompilerOptions: function () { return getState().compilerOptions; },
             getSourceFile: function (fileName) { return getProgram().getSourceFile(fileName); },
             getSourceFiles: function () { return getProgram().getSourceFiles(); },
             getOptionsDiagnostics: function (cancellationToken) { return getProgram().getOptionsDiagnostics(cancellationToken); },
@@ -113739,7 +116058,7 @@
             close: ts.noop,
         };
         function getProgram() {
-            return ts.Debug.checkDefined(state.program);
+            return ts.Debug.checkDefined(getState().program);
         }
     }
     ts.createRedirectedBuilderProgram = createRedirectedBuilderProgram;
@@ -113756,7 +116075,7 @@
     ts.createEmitAndSemanticDiagnosticsBuilderProgram = createEmitAndSemanticDiagnosticsBuilderProgram;
     function createAbstractBuilder(newProgramOrRootNames, hostOrOptions, oldProgramOrHost, configFileParsingDiagnosticsOrOldProgram, configFileParsingDiagnostics, projectReferences) {
         var _a = ts.getBuilderCreationParameters(newProgramOrRootNames, hostOrOptions, oldProgramOrHost, configFileParsingDiagnosticsOrOldProgram, configFileParsingDiagnostics, projectReferences), newProgram = _a.newProgram, newConfigFileParsingDiagnostics = _a.configFileParsingDiagnostics;
-        return ts.createRedirectedBuilderProgram({ program: newProgram, compilerOptions: newProgram.getCompilerOptions() }, newConfigFileParsingDiagnostics);
+        return ts.createRedirectedBuilderProgram(function () { return ({ program: newProgram, compilerOptions: newProgram.getCompilerOptions() }); }, newConfigFileParsingDiagnostics);
     }
     ts.createAbstractBuilder = createAbstractBuilder;
 })(ts || (ts = {}));
@@ -113857,6 +116176,7 @@
         // TypeRoot watches for the types that get added as part of getAutomaticTypeDirectiveNames
         var typeRootsWatches = new ts.Map();
         return {
+            getModuleResolutionCache: function () { return moduleResolutionCache; },
             startRecordingFilesWithChangedResolutions: startRecordingFilesWithChangedResolutions,
             finishRecordingFilesWithChangedResolutions: finishRecordingFilesWithChangedResolutions,
             // perDirectoryResolvedModuleNames and perDirectoryResolvedTypeReferenceDirectives could be non empty if there was exception during program update
@@ -113980,7 +116300,7 @@
             return ts.resolveTypeReferenceDirective(typeReferenceDirectiveName, containingFile, options, host, redirectedReference, typeReferenceDirectiveResolutionCache);
         }
         function resolveNamesWithLocalCache(_a) {
-            var _b;
+            var _b, _c, _d;
             var names = _a.names, containingFile = _a.containingFile, redirectedReference = _a.redirectedReference, cache = _a.cache, perDirectoryCacheWithRedirects = _a.perDirectoryCacheWithRedirects, loader = _a.loader, getResolutionWithResolvedFileName = _a.getResolutionWithResolvedFileName, shouldRetryResolution = _a.shouldRetryResolution, reusedNames = _a.reusedNames, logChanges = _a.logChanges;
             var path = resolutionHost.toPath(containingFile);
             var resolutionsInFile = cache.get(path) || cache.set(path, new ts.Map()).get(path);
@@ -114013,9 +116333,24 @@
                     var resolutionInDirectory = perDirectoryResolution.get(name);
                     if (resolutionInDirectory) {
                         resolution = resolutionInDirectory;
+                        var host = ((_b = resolutionHost.getCompilerHost) === null || _b === void 0 ? void 0 : _b.call(resolutionHost)) || resolutionHost;
+                        if (ts.isTraceEnabled(compilerOptions, host)) {
+                            var resolved = getResolutionWithResolvedFileName(resolution);
+                            ts.trace(host, loader === resolveModuleName ?
+                                (resolved === null || resolved === void 0 ? void 0 : resolved.resolvedFileName) ?
+                                    resolved.packagetId ?
+                                        ts.Diagnostics.Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_3_with_Package_ID_4 :
+                                        ts.Diagnostics.Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_3 :
+                                    ts.Diagnostics.Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_not_resolved :
+                                (resolved === null || resolved === void 0 ? void 0 : resolved.resolvedFileName) ?
+                                    resolved.packagetId ?
+                                        ts.Diagnostics.Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_3_with_Package_ID_4 :
+                                        ts.Diagnostics.Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_3 :
+                                    ts.Diagnostics.Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_not_resolved, name, containingFile, ts.getDirectoryPath(containingFile), resolved === null || resolved === void 0 ? void 0 : resolved.resolvedFileName, (resolved === null || resolved === void 0 ? void 0 : resolved.packagetId) && ts.packageIdToString(resolved.packagetId));
+                        }
                     }
                     else {
-                        resolution = loader(name, containingFile, compilerOptions, ((_b = resolutionHost.getCompilerHost) === null || _b === void 0 ? void 0 : _b.call(resolutionHost)) || resolutionHost, redirectedReference);
+                        resolution = loader(name, containingFile, compilerOptions, ((_c = resolutionHost.getCompilerHost) === null || _c === void 0 ? void 0 : _c.call(resolutionHost)) || resolutionHost, redirectedReference);
                         perDirectoryResolution.set(name, resolution);
                     }
                     resolutionsInFile.set(name, resolution);
@@ -114029,6 +116364,23 @@
                         logChanges = false;
                     }
                 }
+                else {
+                    var host = ((_d = resolutionHost.getCompilerHost) === null || _d === void 0 ? void 0 : _d.call(resolutionHost)) || resolutionHost;
+                    if (ts.isTraceEnabled(compilerOptions, host) && !seenNamesInFile.has(name)) {
+                        var resolved = getResolutionWithResolvedFileName(resolution);
+                        ts.trace(host, loader === resolveModuleName ?
+                            (resolved === null || resolved === void 0 ? void 0 : resolved.resolvedFileName) ?
+                                resolved.packagetId ?
+                                    ts.Diagnostics.Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2_with_Package_ID_3 :
+                                    ts.Diagnostics.Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2 :
+                                ts.Diagnostics.Reusing_resolution_of_module_0_from_1_of_old_program_it_was_not_resolved :
+                            (resolved === null || resolved === void 0 ? void 0 : resolved.resolvedFileName) ?
+                                resolved.packagetId ?
+                                    ts.Diagnostics.Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved_to_2_with_Package_ID_3 :
+                                    ts.Diagnostics.Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved_to_2 :
+                                ts.Diagnostics.Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_not_resolved, name, containingFile, resolved === null || resolved === void 0 ? void 0 : resolved.resolvedFileName, (resolved === null || resolved === void 0 ? void 0 : resolved.packagetId) && ts.packageIdToString(resolved.packagetId));
+                    }
+                }
                 ts.Debug.assert(resolution !== undefined && !resolution.isInvalidated);
                 seenNamesInFile.set(name, true);
                 resolvedModules.push(getResolutionWithResolvedFileName(resolution));
@@ -114474,7 +116826,7 @@
 var ts;
 (function (ts) {
     var moduleSpecifiers;
-    (function (moduleSpecifiers) {
+    (function (moduleSpecifiers_1) {
         var RelativePreference;
         (function (RelativePreference) {
             RelativePreference[RelativePreference["Relative"] = 0] = "Relative";
@@ -114517,41 +116869,68 @@
             };
         }
         function updateModuleSpecifier(compilerOptions, importingSourceFileName, toFileName, host, oldImportSpecifier) {
-            var res = getModuleSpecifierWorker(compilerOptions, importingSourceFileName, toFileName, host, getPreferencesForUpdate(compilerOptions, oldImportSpecifier));
+            var res = getModuleSpecifierWorker(compilerOptions, importingSourceFileName, toFileName, host, getPreferencesForUpdate(compilerOptions, oldImportSpecifier), {});
             if (res === oldImportSpecifier)
                 return undefined;
             return res;
         }
-        moduleSpecifiers.updateModuleSpecifier = updateModuleSpecifier;
+        moduleSpecifiers_1.updateModuleSpecifier = updateModuleSpecifier;
         // Note: importingSourceFile is just for usesJsExtensionOnImports
-        function getModuleSpecifier(compilerOptions, importingSourceFile, importingSourceFileName, toFileName, host, preferences) {
-            if (preferences === void 0) { preferences = {}; }
-            return getModuleSpecifierWorker(compilerOptions, importingSourceFileName, toFileName, host, getPreferences(preferences, compilerOptions, importingSourceFile));
+        function getModuleSpecifier(compilerOptions, importingSourceFile, importingSourceFileName, toFileName, host) {
+            return getModuleSpecifierWorker(compilerOptions, importingSourceFileName, toFileName, host, getPreferences({}, compilerOptions, importingSourceFile), {});
         }
-        moduleSpecifiers.getModuleSpecifier = getModuleSpecifier;
-        function getNodeModulesPackageName(compilerOptions, importingSourceFileName, nodeModulesFileName, host) {
+        moduleSpecifiers_1.getModuleSpecifier = getModuleSpecifier;
+        function getNodeModulesPackageName(compilerOptions, importingSourceFileName, nodeModulesFileName, host, preferences) {
             var info = getInfo(importingSourceFileName, host);
-            var modulePaths = getAllModulePaths(importingSourceFileName, nodeModulesFileName, host);
+            var modulePaths = getAllModulePaths(importingSourceFileName, nodeModulesFileName, host, preferences);
             return ts.firstDefined(modulePaths, function (modulePath) { return tryGetModuleNameAsNodeModule(modulePath, info, host, compilerOptions, /*packageNameOnly*/ true); });
         }
-        moduleSpecifiers.getNodeModulesPackageName = getNodeModulesPackageName;
-        function getModuleSpecifierWorker(compilerOptions, importingSourceFileName, toFileName, host, preferences) {
+        moduleSpecifiers_1.getNodeModulesPackageName = getNodeModulesPackageName;
+        function getModuleSpecifierWorker(compilerOptions, importingSourceFileName, toFileName, host, preferences, userPreferences) {
             var info = getInfo(importingSourceFileName, host);
-            var modulePaths = getAllModulePaths(importingSourceFileName, toFileName, host);
+            var modulePaths = getAllModulePaths(importingSourceFileName, toFileName, host, userPreferences);
             return ts.firstDefined(modulePaths, function (modulePath) { return tryGetModuleNameAsNodeModule(modulePath, info, host, compilerOptions); }) ||
                 getLocalModuleSpecifier(toFileName, info, compilerOptions, host, preferences);
         }
+        function tryGetModuleSpecifiersFromCache(moduleSymbol, importingSourceFile, host, userPreferences) {
+            return tryGetModuleSpecifiersFromCacheWorker(moduleSymbol, importingSourceFile, host, userPreferences)[0];
+        }
+        moduleSpecifiers_1.tryGetModuleSpecifiersFromCache = tryGetModuleSpecifiersFromCache;
+        function tryGetModuleSpecifiersFromCacheWorker(moduleSymbol, importingSourceFile, host, userPreferences) {
+            var _a;
+            var moduleSourceFile = ts.getSourceFileOfModule(moduleSymbol);
+            if (!moduleSourceFile) {
+                return ts.emptyArray;
+            }
+            var cache = (_a = host.getModuleSpecifierCache) === null || _a === void 0 ? void 0 : _a.call(host);
+            var cached = cache === null || cache === void 0 ? void 0 : cache.get(importingSourceFile.path, moduleSourceFile.path, userPreferences);
+            return [cached === null || cached === void 0 ? void 0 : cached.moduleSpecifiers, moduleSourceFile, cached === null || cached === void 0 ? void 0 : cached.modulePaths, cache];
+        }
         /** Returns an import for each symlink and for the realpath. */
         function getModuleSpecifiers(moduleSymbol, checker, compilerOptions, importingSourceFile, host, userPreferences) {
+            return getModuleSpecifiersWithCacheInfo(moduleSymbol, checker, compilerOptions, importingSourceFile, host, userPreferences).moduleSpecifiers;
+        }
+        moduleSpecifiers_1.getModuleSpecifiers = getModuleSpecifiers;
+        function getModuleSpecifiersWithCacheInfo(moduleSymbol, checker, compilerOptions, importingSourceFile, host, userPreferences) {
+            var computedWithoutCache = false;
             var ambient = tryGetModuleNameFromAmbientModule(moduleSymbol, checker);
             if (ambient)
-                return [ambient];
+                return { moduleSpecifiers: [ambient], computedWithoutCache: computedWithoutCache };
+            // eslint-disable-next-line prefer-const
+            var _a = tryGetModuleSpecifiersFromCacheWorker(moduleSymbol, importingSourceFile, host, userPreferences), specifiers = _a[0], moduleSourceFile = _a[1], modulePaths = _a[2], cache = _a[3];
+            if (specifiers)
+                return { moduleSpecifiers: specifiers, computedWithoutCache: computedWithoutCache };
+            if (!moduleSourceFile)
+                return { moduleSpecifiers: ts.emptyArray, computedWithoutCache: computedWithoutCache };
+            computedWithoutCache = true;
+            modulePaths || (modulePaths = getAllModulePathsWorker(importingSourceFile.path, moduleSourceFile.originalFileName, host));
+            var result = computeModuleSpecifiers(modulePaths, compilerOptions, importingSourceFile, host, userPreferences);
+            cache === null || cache === void 0 ? void 0 : cache.set(importingSourceFile.path, moduleSourceFile.path, userPreferences, modulePaths, result);
+            return { moduleSpecifiers: result, computedWithoutCache: computedWithoutCache };
+        }
+        moduleSpecifiers_1.getModuleSpecifiersWithCacheInfo = getModuleSpecifiersWithCacheInfo;
+        function computeModuleSpecifiers(modulePaths, compilerOptions, importingSourceFile, host, userPreferences) {
             var info = getInfo(importingSourceFile.path, host);
-            var moduleSourceFile = ts.getSourceFileOfNode(moduleSymbol.valueDeclaration || ts.getNonAugmentationDeclaration(moduleSymbol));
-            if (!moduleSourceFile) {
-                return [];
-            }
-            var modulePaths = getAllModulePaths(importingSourceFile.path, moduleSourceFile.originalFileName, host);
             var preferences = getPreferences(userPreferences, compilerOptions, importingSourceFile);
             var existingSpecifier = ts.forEach(modulePaths, function (modulePath) { return ts.forEach(host.getFileIncludeReasons().get(ts.toPath(modulePath.path, host.getCurrentDirectory(), info.getCanonicalFileName)), function (reason) {
                 if (reason.kind !== ts.FileIncludeKind.Import || reason.file !== importingSourceFile.path)
@@ -114562,8 +116941,10 @@
                     specifier :
                     undefined;
             }); });
-            if (existingSpecifier)
-                return [existingSpecifier];
+            if (existingSpecifier) {
+                var moduleSpecifiers_2 = [existingSpecifier];
+                return moduleSpecifiers_2;
+            }
             var importedFileIsInNodeModules = ts.some(modulePaths, function (p) { return p.isInNodeModules; });
             // Module specifier priority:
             //   1. "Bare package specifiers" (e.g. "@foo/bar") resulting from a path through node_modules to a package.json's "types" entry
@@ -114605,7 +116986,6 @@
                 (nodeModulesSpecifiers === null || nodeModulesSpecifiers === void 0 ? void 0 : nodeModulesSpecifiers.length) ? nodeModulesSpecifiers :
                     ts.Debug.checkDefined(relativeSpecifiers);
         }
-        moduleSpecifiers.getModuleSpecifiers = getModuleSpecifiers;
         // importingSourceFileName is separate because getEditsForFileRename may need to specify an updated path
         function getInfo(importingSourceFileName, host) {
             var getCanonicalFileName = ts.createGetCanonicalFileName(host.useCaseSensitiveFileNames ? host.useCaseSensitiveFileNames() : true);
@@ -114682,7 +117062,7 @@
             }
             return count;
         }
-        moduleSpecifiers.countPathComponents = countPathComponents;
+        moduleSpecifiers_1.countPathComponents = countPathComponents;
         function usesJsExtensionOnImports(_a) {
             var imports = _a.imports;
             return ts.firstDefined(imports, function (_a) {
@@ -114702,25 +117082,23 @@
             });
         }
         function forEachFileNameOfModule(importingFileName, importedFileName, host, preferSymlinks, cb) {
+            var _a;
             var getCanonicalFileName = ts.hostGetCanonicalFileName(host);
             var cwd = host.getCurrentDirectory();
             var referenceRedirect = host.isSourceOfProjectReferenceRedirect(importedFileName) ? host.getProjectReferenceRedirect(importedFileName) : undefined;
             var importedPath = ts.toPath(importedFileName, cwd, getCanonicalFileName);
             var redirects = host.redirectTargetsMap.get(importedPath) || ts.emptyArray;
-            var importedFileNames = __spreadArray(__spreadArray(__spreadArray([], (referenceRedirect ? [referenceRedirect] : ts.emptyArray)), [importedFileName]), redirects);
+            var importedFileNames = __spreadArray(__spreadArray(__spreadArray([], (referenceRedirect ? [referenceRedirect] : ts.emptyArray), true), [importedFileName], false), redirects, true);
             var targets = importedFileNames.map(function (f) { return ts.getNormalizedAbsolutePath(f, cwd); });
             var shouldFilterIgnoredPaths = !ts.every(targets, ts.containsIgnoredPath);
             if (!preferSymlinks) {
                 // Symlinks inside ignored paths are already filtered out of the symlink cache,
                 // so we only need to remove them from the realpath filenames.
-                var result_16 = ts.forEach(targets, function (p) { return !(shouldFilterIgnoredPaths && ts.containsIgnoredPath(p)) && cb(p, referenceRedirect === p); });
-                if (result_16)
-                    return result_16;
+                var result_15 = ts.forEach(targets, function (p) { return !(shouldFilterIgnoredPaths && ts.containsIgnoredPath(p)) && cb(p, referenceRedirect === p); });
+                if (result_15)
+                    return result_15;
             }
-            var links = host.getSymlinkCache
-                ? host.getSymlinkCache()
-                : ts.discoverProbableSymlinks(host.getSourceFiles(), getCanonicalFileName, cwd);
-            var symlinkedDirectories = links.getSymlinkedDirectoriesByRealpath();
+            var symlinkedDirectories = (_a = host.getSymlinkCache) === null || _a === void 0 ? void 0 : _a.call(host).getSymlinkedDirectoriesByRealpath();
             var fullImportedFileName = ts.getNormalizedAbsolutePath(importedFileName, cwd);
             var result = symlinkedDirectories && ts.forEachAncestorDirectory(ts.getDirectoryPath(fullImportedFileName), function (realPathDirectory) {
                 var symlinkDirectories = symlinkedDirectories.get(ts.ensureTrailingDirectorySeparator(ts.toPath(realPathDirectory, cwd, getCanonicalFileName)));
@@ -114738,10 +117116,10 @@
                     for (var _i = 0, symlinkDirectories_1 = symlinkDirectories; _i < symlinkDirectories_1.length; _i++) {
                         var symlinkDirectory = symlinkDirectories_1[_i];
                         var option = ts.resolvePath(symlinkDirectory, relative);
-                        var result_17 = cb(option, target === referenceRedirect);
+                        var result_16 = cb(option, target === referenceRedirect);
                         shouldFilterIgnoredPaths = true; // We found a non-ignored path in symlinks, so we can reject ignored-path realpaths
-                        if (result_17)
-                            return result_17;
+                        if (result_16)
+                            return result_16;
                     }
                 });
             });
@@ -114749,20 +117127,28 @@
                 ? ts.forEach(targets, function (p) { return shouldFilterIgnoredPaths && ts.containsIgnoredPath(p) ? undefined : cb(p, p === referenceRedirect); })
                 : undefined);
         }
-        moduleSpecifiers.forEachFileNameOfModule = forEachFileNameOfModule;
+        moduleSpecifiers_1.forEachFileNameOfModule = forEachFileNameOfModule;
         /**
          * Looks for existing imports that use symlinks to this module.
          * Symlinks will be returned first so they are preferred over the real path.
          */
-        function getAllModulePaths(importingFileName, importedFileName, host) {
+        function getAllModulePaths(importingFilePath, importedFileName, host, preferences, importedFilePath) {
             var _a;
+            if (importedFilePath === void 0) { importedFilePath = ts.toPath(importedFileName, host.getCurrentDirectory(), ts.hostGetCanonicalFileName(host)); }
             var cache = (_a = host.getModuleSpecifierCache) === null || _a === void 0 ? void 0 : _a.call(host);
-            var getCanonicalFileName = ts.hostGetCanonicalFileName(host);
             if (cache) {
-                var cached = cache.get(importingFileName, ts.toPath(importedFileName, host.getCurrentDirectory(), getCanonicalFileName));
-                if (typeof cached === "object")
-                    return cached;
+                var cached = cache.get(importingFilePath, importedFilePath, preferences);
+                if (cached === null || cached === void 0 ? void 0 : cached.modulePaths)
+                    return cached.modulePaths;
             }
+            var modulePaths = getAllModulePathsWorker(importingFilePath, importedFileName, host);
+            if (cache) {
+                cache.setModulePaths(importingFilePath, importedFilePath, preferences, modulePaths);
+            }
+            return modulePaths;
+        }
+        function getAllModulePathsWorker(importingFileName, importedFileName, host) {
+            var getCanonicalFileName = ts.hostGetCanonicalFileName(host);
             var allFileNames = new ts.Map();
             var importedFileFromNodeModules = false;
             forEachFileNameOfModule(importingFileName, importedFileName, host, 
@@ -114774,7 +117160,7 @@
             });
             // Sort by paths closest to importing file Name directory
             var sortedPaths = [];
-            var _loop_26 = function (directory) {
+            var _loop_31 = function (directory) {
                 var directoryStart = ts.ensureTrailingDirectorySeparator(directory);
                 var pathsInDirectory;
                 allFileNames.forEach(function (_a, fileName) {
@@ -114798,7 +117184,7 @@
             };
             var out_directory_1;
             for (var directory = ts.getDirectoryPath(importingFileName); allFileNames.size !== 0;) {
-                var state_9 = _loop_26(directory);
+                var state_9 = _loop_31(directory);
                 directory = out_directory_1;
                 if (state_9 === "break")
                     break;
@@ -114809,9 +117195,6 @@
                     remainingPaths.sort(comparePathsByRedirectAndNumberOfDirectorySeparators);
                 sortedPaths.push.apply(sortedPaths, remainingPaths);
             }
-            if (cache) {
-                cache.set(importingFileName, ts.toPath(importedFileName, host.getCurrentDirectory(), getCanonicalFileName), sortedPaths);
-            }
             return sortedPaths;
         }
         function tryGetModuleNameFromAmbientModule(moduleSymbol, checker) {
@@ -115067,7 +117450,11 @@
             }
         }
         function getJSExtensionForFile(fileName, options) {
-            var ext = ts.extensionFromPath(fileName);
+            var _a;
+            return (_a = tryGetJSExtensionForFile(fileName, options)) !== null && _a !== void 0 ? _a : ts.Debug.fail("Extension " + ts.extensionFromPath(fileName) + " is unsupported:: FileName:: " + fileName);
+        }
+        function tryGetJSExtensionForFile(fileName, options) {
+            var ext = ts.tryGetExtensionFromPath(fileName);
             switch (ext) {
                 case ".ts" /* Ts */:
                 case ".d.ts" /* Dts */:
@@ -115078,12 +117465,11 @@
                 case ".jsx" /* Jsx */:
                 case ".json" /* Json */:
                     return ext;
-                case ".tsbuildinfo" /* TsBuildInfo */:
-                    return ts.Debug.fail("Extension " + ".tsbuildinfo" /* TsBuildInfo */ + " is unsupported:: FileName:: " + fileName);
                 default:
-                    return ts.Debug.assertNever(ext);
+                    return undefined;
             }
         }
+        moduleSpecifiers_1.tryGetJSExtensionForFile = tryGetJSExtensionForFile;
         function getRelativePathIfInDirectory(path, directoryPath, getCanonicalFileName) {
             var relativePath = ts.getRelativePathToDirectoryOrUrl(directoryPath, path, directoryPath, getCanonicalFileName, /*isAbsolutePathAnUrl*/ false);
             return ts.isRootedDiskPath(relativePath) ? undefined : relativePath;
@@ -115100,12 +117486,12 @@
         getCurrentDirectory: function () { return ts.sys.getCurrentDirectory(); },
         getNewLine: function () { return ts.sys.newLine; },
         getCanonicalFileName: ts.createGetCanonicalFileName(ts.sys.useCaseSensitiveFileNames)
-    } : undefined; // TODO: GH#18217
+    } : undefined;
     /**
      * Create a function that reports error by writing to the system and handles the formating of the diagnostic
      */
     function createDiagnosticReporter(system, pretty) {
-        var host = system === ts.sys ? sysFormatDiagnosticsHost : {
+        var host = system === ts.sys && sysFormatDiagnosticsHost ? sysFormatDiagnosticsHost : {
             getCurrentDirectory: function () { return system.getCurrentDirectory(); },
             getNewLine: function () { return system.newLine; },
             getCanonicalFileName: ts.createGetCanonicalFileName(system.useCaseSensitiveFileNames),
@@ -115451,6 +117837,7 @@
         ConfigFileOfReferencedProject: "Config file of referened project",
         ExtendedConfigOfReferencedProject: "Extended config file of referenced project",
         WildcardDirectoryOfReferencedProject: "Wild card directory of referenced project",
+        PackageJson: "package.json file",
     };
     function createWatchFactory(host, options) {
         var watchLogLevel = host.trace ? options.extendedDiagnostics ? ts.WatchLogLevel.Verbose : options.diagnostics ? ts.WatchLogLevel.TriggerOnly : ts.WatchLogLevel.None : ts.WatchLogLevel.None;
@@ -115525,7 +117912,7 @@
             for (var _i = 0; _i < arguments.length; _i++) {
                 args[_i] = arguments[_i];
             }
-            var result = originalGetSourceFile.call.apply(originalGetSourceFile, __spreadArray([compilerHost], args));
+            var result = originalGetSourceFile.call.apply(originalGetSourceFile, __spreadArray([compilerHost], args, false));
             if (result) {
                 result.version = computeHash(result.text);
             }
@@ -115689,12 +118076,14 @@
         var builderProgram;
         var reloadLevel; // level to indicate if the program needs to be reloaded from config file/just filenames etc
         var missingFilesMap; // Map of file watchers for the missing files
+        var packageJsonMap; // map of watchers for package json files used in module resolution
         var watchedWildcardDirectories; // map of watchers for the wild card directories in the config file
         var timerToUpdateProgram; // timer callback to recompile the program
         var timerToInvalidateFailedLookupResolutions; // timer callback to invalidate resolutions for changes in failed lookup locations
         var parsedConfigs; // Parsed commandline and watching cached for referenced projects
         var sharedExtendedConfigFileWatchers; // Map of file watchers for extended files, shared between different referenced projects
         var extendedConfigCache = host.extendedConfigCache; // Cache for extended config evaluation
+        var changesAffectResolution = false; // Flag for indicating non-config changes affect module resolution
         var sourceFilesCache = new ts.Map(); // Cache that stores the source file and version info
         var missingFilePathsRequestedForRelease; // These paths are held temporarily so that we can remove the entry from source file cache if the file is not tracked by missing files
         var hasChangedCompilerOptions = false; // True if the compiler options have changed between compilations
@@ -115738,7 +118127,7 @@
             for (var _i = 1; _i < arguments.length; _i++) {
                 args[_i - 1] = arguments[_i];
             }
-            return getVersionedSourceFileByPath.apply(void 0, __spreadArray([fileName, toPath(fileName)], args));
+            return getVersionedSourceFileByPath.apply(void 0, __spreadArray([fileName, toPath(fileName)], args, false));
         };
         compilerHost.getSourceFileByPath = getVersionedSourceFileByPath;
         compilerHost.getNewLine = function () { return newLine; };
@@ -115845,12 +118234,12 @@
             var program = getCurrentBuilderProgram();
             if (hasChangedCompilerOptions) {
                 newLine = updateNewLine();
-                if (program && ts.changesAffectModuleResolution(program.getCompilerOptions(), compilerOptions)) {
+                if (program && (changesAffectResolution || ts.changesAffectModuleResolution(program.getCompilerOptions(), compilerOptions))) {
                     resolutionCache.clear();
                 }
             }
             // All resolutions are invalid if user provided resolutions
-            var hasInvalidatedResolution = resolutionCache.createHasInvalidatedResolution(userProvidedResolution);
+            var hasInvalidatedResolution = resolutionCache.createHasInvalidatedResolution(userProvidedResolution || changesAffectResolution);
             if (ts.isProgramUptoDate(getCurrentProgram(), rootFileNames, compilerOptions, getSourceVersion, fileExists, hasInvalidatedResolution, hasChangedAutomaticTypeDirectiveNames, getParsedCommandLine, projectReferences)) {
                 if (hasChangedConfigFileParsingErrors) {
                     builderProgram = createProgram(/*rootNames*/ undefined, /*options*/ undefined, compilerHost, builderProgram, configFileParsingDiagnostics, projectReferences);
@@ -115860,6 +118249,7 @@
             else {
                 createNewProgram(hasInvalidatedResolution);
             }
+            changesAffectResolution = false; // reset for next sync
             if (host.afterProgramCreate && program !== builderProgram) {
                 host.afterProgramCreate(builderProgram);
             }
@@ -115879,9 +118269,15 @@
             compilerHost.hasInvalidatedResolution = hasInvalidatedResolution;
             compilerHost.hasChangedAutomaticTypeDirectiveNames = hasChangedAutomaticTypeDirectiveNames;
             builderProgram = createProgram(rootFileNames, compilerOptions, compilerHost, builderProgram, configFileParsingDiagnostics, projectReferences);
+            // map package json cache entries to their realpaths so we don't try to watch across symlinks
+            var packageCacheEntries = ts.map(resolutionCache.getModuleResolutionCache().getPackageJsonInfoCache().entries(), function (_a) {
+                var path = _a[0], data = _a[1];
+                return [compilerHost.realpath ? toPath(compilerHost.realpath(path)) : path, data];
+            });
             resolutionCache.finishCachingPerDirectoryResolution();
             // Update watches
             ts.updateMissingFilePathsWatch(builderProgram.getProgram(), missingFilesMap || (missingFilesMap = new ts.Map()), watchMissingFilePath);
+            ts.updatePackageJsonWatch(packageCacheEntries, packageJsonMap || (packageJsonMap = new ts.Map()), watchPackageJsonLookupPath);
             if (needsUpdateInTypeRootWatch) {
                 resolutionCache.updateTypeRootsWatch();
             }
@@ -116183,6 +118579,21 @@
                 ts.noopFileWatcher :
                 watchFilePath(missingFilePath, missingFilePath, onMissingFileChange, ts.PollingInterval.Medium, watchOptions, ts.WatchType.MissingFile);
         }
+        function watchPackageJsonLookupPath(packageJsonPath) {
+            // If the package.json is pulled into the compilation itself (eg, via json imports), don't add a second watcher here
+            return sourceFilesCache.has(packageJsonPath) ?
+                ts.noopFileWatcher :
+                watchFilePath(packageJsonPath, packageJsonPath, onPackageJsonChange, ts.PollingInterval.High, watchOptions, ts.WatchType.PackageJson);
+        }
+        function onPackageJsonChange(fileName, eventKind, path) {
+            updateCachedSystemWithFile(fileName, path, eventKind);
+            // package.json changes invalidate module resolution and can change the set of loaded files
+            // so if we witness a change to one, we have to do a full reload
+            reloadLevel = ts.ConfigFileProgramReloadLevel.Full;
+            changesAffectResolution = true;
+            // Update the program
+            scheduleProgramUpdate();
+        }
         function onMissingFileChange(fileName, eventKind, missingFilePath) {
             updateCachedSystemWithFile(fileName, missingFilePath, eventKind);
             if (eventKind === ts.FileWatcherEventKind.Created && missingFilesMap.has(missingFilePath)) {
@@ -116526,6 +118937,8 @@
             allWatchedInputFiles: new ts.Map(),
             allWatchedConfigFiles: new ts.Map(),
             allWatchedExtendedConfigFiles: new ts.Map(),
+            allWatchedPackageJsonFiles: new ts.Map(),
+            lastCachedPackageJsonLookups: new ts.Map(),
             timerToBuildInvalidatedProject: undefined,
             reportFileChangeDetected: false,
             watchFile: watchFile,
@@ -116649,6 +119062,7 @@
             });
             ts.mutateMapSkippingNewValues(state.allWatchedWildcardDirectories, currentProjects, { onDeleteValue: function (existingMap) { return existingMap.forEach(ts.closeFileWatcherOf); } });
             ts.mutateMapSkippingNewValues(state.allWatchedInputFiles, currentProjects, { onDeleteValue: function (existingMap) { return existingMap.forEach(ts.closeFileWatcher); } });
+            ts.mutateMapSkippingNewValues(state.allWatchedPackageJsonFiles, currentProjects, { onDeleteValue: function (existingMap) { return existingMap.forEach(ts.closeFileWatcher); } });
         }
         return state.buildOrder = buildOrder;
     }
@@ -116681,7 +119095,7 @@
             for (var _i = 0; _i < arguments.length; _i++) {
                 args[_i] = arguments[_i];
             }
-            return originalGetSourceFile.call.apply(originalGetSourceFile, __spreadArray([compilerHost], args));
+            return originalGetSourceFile.call.apply(originalGetSourceFile, __spreadArray([compilerHost], args, false));
         }), originalReadFile = _a.originalReadFile, originalFileExists = _a.originalFileExists, originalDirectoryExists = _a.originalDirectoryExists, originalCreateDirectory = _a.originalCreateDirectory, originalWriteFile = _a.originalWriteFile, getSourceFileWithCache = _a.getSourceFileWithCache, readFileWithCache = _a.readFileWithCache;
         state.readFileWithCache = readFileWithCache;
         compilerHost.getSourceFile = getSourceFileWithCache;
@@ -116899,6 +119313,10 @@
             (_b = state.typeReferenceDirectiveResolutionCache) === null || _b === void 0 ? void 0 : _b.update(config.options);
             // Create program
             program = host.createProgram(config.fileNames, config.options, compilerHost, getOldProgram(state, projectPath, config), ts.getConfigFileParsingDiagnostics(config), config.projectReferences);
+            state.lastCachedPackageJsonLookups.set(projectPath, state.moduleResolutionCache && ts.map(state.moduleResolutionCache.getPackageJsonInfoCache().entries(), function (_a) {
+                var path = _a[0], data = _a[1];
+                return [state.host.realpath ? toPath(state, state.host.realpath(path)) : path, data];
+            }));
             if (state.watch) {
                 state.builderPrograms.set(projectPath, program);
             }
@@ -116915,7 +119333,7 @@
         }
         function getSyntaxDiagnostics(cancellationToken) {
             ts.Debug.assertIsDefined(program);
-            handleDiagnostics(__spreadArray(__spreadArray(__spreadArray(__spreadArray([], program.getConfigFileParsingDiagnostics()), program.getOptionsDiagnostics(cancellationToken)), program.getGlobalDiagnostics(cancellationToken)), program.getSyntacticDiagnostics(/*sourceFile*/ undefined, cancellationToken)), BuildResultFlags.SyntaxErrors, "Syntactic");
+            handleDiagnostics(__spreadArray(__spreadArray(__spreadArray(__spreadArray([], program.getConfigFileParsingDiagnostics(), true), program.getOptionsDiagnostics(cancellationToken), true), program.getGlobalDiagnostics(cancellationToken), true), program.getSyntacticDiagnostics(/*sourceFile*/ undefined, cancellationToken), true), BuildResultFlags.SyntaxErrors, "Syntactic");
         }
         function getSemanticDiagnostics(cancellationToken) {
             handleDiagnostics(ts.Debug.checkDefined(program).getSemanticDiagnostics(/*sourceFile*/ undefined, cancellationToken), BuildResultFlags.TypeErrors, "Semantic");
@@ -116979,7 +119397,7 @@
             var emitResult = program.emitBuildInfo(writeFileCallback, cancellationToken);
             if (emitResult.diagnostics.length) {
                 reportErrors(state, emitResult.diagnostics);
-                state.diagnostics.set(projectPath, __spreadArray(__spreadArray([], state.diagnostics.get(projectPath)), emitResult.diagnostics));
+                state.diagnostics.set(projectPath, __spreadArray(__spreadArray([], state.diagnostics.get(projectPath), true), emitResult.diagnostics, true));
                 buildResult = BuildResultFlags.EmitErrors & buildResult;
             }
             if (emitResult.emittedFiles && state.write) {
@@ -117130,12 +119548,14 @@
                 watchExtendedConfigFiles(state, projectPath, config);
                 watchWildCardDirectories(state, project, projectPath, config);
                 watchInputFiles(state, project, projectPath, config);
+                watchPackageJsonFiles(state, project, projectPath, config);
             }
             else if (reloadLevel === ts.ConfigFileProgramReloadLevel.Partial) {
                 // Update file names
                 config.fileNames = ts.getFileNamesFromConfigSpecs(config.options.configFile.configFileSpecs, ts.getDirectoryPath(project), config.options, state.parseConfigFileHost);
                 ts.updateErrorForNoInputFiles(config.fileNames, project, config.options.configFile.configFileSpecs, config.errors, ts.canJsonReportNoInputFiles(config.raw));
                 watchInputFiles(state, project, projectPath, config);
+                watchPackageJsonFiles(state, project, projectPath, config);
             }
             var status = getUpToDateStatus(state, config, projectPath);
             verboseReportProjectStatus(state, project, status);
@@ -117378,6 +119798,13 @@
             var extendedConfigStatus = ts.forEach(project.options.configFile.extendedSourceFiles || ts.emptyArray, function (configFile) { return checkConfigFileUpToDateStatus(state, configFile, oldestOutputFileTime, oldestOutputFileName); });
             if (extendedConfigStatus)
                 return extendedConfigStatus;
+            // Check package file time
+            var dependentPackageFileStatus = ts.forEach(state.lastCachedPackageJsonLookups.get(resolvedPath) || ts.emptyArray, function (_a) {
+                var path = _a[0];
+                return checkConfigFileUpToDateStatus(state, path, oldestOutputFileTime, oldestOutputFileName);
+            });
+            if (dependentPackageFileStatus)
+                return dependentPackageFileStatus;
         }
         if (!force && !state.buildInfoChecked.has(resolvedPath)) {
             state.buildInfoChecked.set(resolvedPath, true);
@@ -117424,6 +119851,8 @@
         return actual;
     }
     function updateOutputTimestampsWorker(state, proj, priorNewestUpdateTime, verboseMessage, skipOutputs) {
+        if (proj.options.noEmit)
+            return priorNewestUpdateTime;
         var host = state.host;
         var outputs = ts.getAllProjectOutputs(proj, !host.useCaseSensitiveFileNames());
         if (!skipOutputs || outputs.length !== skipOutputs.size) {
@@ -117687,6 +120116,14 @@
             onDeleteValue: ts.closeFileWatcher,
         });
     }
+    function watchPackageJsonFiles(state, resolved, resolvedPath, parsed) {
+        if (!state.watch || !state.lastCachedPackageJsonLookups)
+            return;
+        ts.mutateMap(getOrCreateValueMapFromConfigFileMap(state.allWatchedPackageJsonFiles, resolvedPath), new ts.Map(state.lastCachedPackageJsonLookups.get(resolvedPath)), {
+            createNewValue: function (path, _input) { return state.watchFile(path, function () { return invalidateProjectAndScheduleBuilds(state, resolvedPath, ts.ConfigFileProgramReloadLevel.Full); }, ts.PollingInterval.High, parsed === null || parsed === void 0 ? void 0 : parsed.watchOptions, ts.WatchType.PackageJson, resolved); },
+            onDeleteValue: ts.closeFileWatcher,
+        });
+    }
     function startWatching(state, buildOrder) {
         if (!state.watchAllProjectsPending)
             return;
@@ -117703,6 +120140,8 @@
                 watchWildCardDirectories(state, resolved, resolvedPath, cfg);
                 // Watch input files
                 watchInputFiles(state, resolved, resolvedPath, cfg);
+                // Watch package json files
+                watchPackageJsonFiles(state, resolved, resolvedPath, cfg);
             }
         }
     }
@@ -117711,6 +120150,7 @@
         ts.clearMap(state.allWatchedExtendedConfigFiles, ts.closeFileWatcherOf);
         ts.clearMap(state.allWatchedWildcardDirectories, function (watchedWildcardDirectories) { return ts.clearMap(watchedWildcardDirectories, ts.closeFileWatcherOf); });
         ts.clearMap(state.allWatchedInputFiles, function (watchedWildcardDirectories) { return ts.clearMap(watchedWildcardDirectories, ts.closeFileWatcher); });
+        ts.clearMap(state.allWatchedPackageJsonFiles, function (watchedPacageJsonFiles) { return ts.clearMap(watchedPacageJsonFiles, ts.closeFileWatcher); });
     }
     function createSolutionBuilderWorker(watch, hostOrHostWithWatch, rootNames, options, baseWatchOptions) {
         var state = createSolutionBuilderState(watch, hostOrHostWithWatch, rootNames, options, baseWatchOptions);
@@ -117743,7 +120183,7 @@
         for (var _i = 2; _i < arguments.length; _i++) {
             args[_i - 2] = arguments[_i];
         }
-        state.host.reportSolutionBuilderStatus(ts.createCompilerDiagnostic.apply(void 0, __spreadArray([message], args)));
+        state.host.reportSolutionBuilderStatus(ts.createCompilerDiagnostic.apply(void 0, __spreadArray([message], args, false)));
     }
     function reportWatchStatus(state, message) {
         var _a, _b;
@@ -117751,7 +120191,7 @@
         for (var _i = 2; _i < arguments.length; _i++) {
             args[_i - 2] = arguments[_i];
         }
-        (_b = (_a = state.hostWithWatch).onWatchStatusChange) === null || _b === void 0 ? void 0 : _b.call(_a, ts.createCompilerDiagnostic.apply(void 0, __spreadArray([message], args)), state.host.getNewLine(), state.baseCompilerOptions);
+        (_b = (_a = state.hostWithWatch).onWatchStatusChange) === null || _b === void 0 ? void 0 : _b.call(_a, ts.createCompilerDiagnostic.apply(void 0, __spreadArray([message], args, false)), state.host.getNewLine(), state.baseCompilerOptions);
     }
     function reportErrors(_a, errors) {
         var host = _a.host;
@@ -117925,8 +120365,9 @@
             return availableVersion.compareTo(cachedTyping.version) <= 0;
         }
         JsTyping.isTypingUpToDate = isTypingUpToDate;
-        JsTyping.nodeCoreModuleList = [
+        var unprefixedNodeCoreModuleList = [
             "assert",
+            "assert/strict",
             "async_hooks",
             "buffer",
             "child_process",
@@ -117935,14 +120376,18 @@
             "constants",
             "crypto",
             "dgram",
+            "diagnostics_channel",
             "dns",
+            "dns/promises",
             "domain",
             "events",
             "fs",
+            "fs/promises",
             "http",
             "https",
             "http2",
             "inspector",
+            "module",
             "net",
             "os",
             "path",
@@ -117953,16 +120398,24 @@
             "readline",
             "repl",
             "stream",
+            "stream/promises",
             "string_decoder",
             "timers",
+            "timers/promises",
             "tls",
+            "trace_events",
             "tty",
             "url",
             "util",
+            "util/types",
             "v8",
             "vm",
+            "wasi",
+            "worker_threads",
             "zlib"
         ];
+        JsTyping.prefixedNodeCoreModuleList = unprefixedNodeCoreModuleList.map(function (name) { return "node:" + name; });
+        JsTyping.nodeCoreModuleList = __spreadArray(__spreadArray([], unprefixedNodeCoreModuleList, true), JsTyping.prefixedNodeCoreModuleList, true);
         JsTyping.nodeCoreModules = new ts.Set(JsTyping.nodeCoreModuleList);
         function nonRelativeModuleNameForTypingCache(moduleName) {
             return JsTyping.nodeCoreModules.has(moduleName) ? "node" : moduleName;
@@ -118288,6 +120741,21 @@
         SemanticClassificationFormat["Original"] = "original";
         SemanticClassificationFormat["TwentyTwenty"] = "2020";
     })(SemanticClassificationFormat = ts.SemanticClassificationFormat || (ts.SemanticClassificationFormat = {}));
+    var CompletionTriggerKind;
+    (function (CompletionTriggerKind) {
+        /** Completion was triggered by typing an identifier, manual invocation (e.g Ctrl+Space) or via API. */
+        CompletionTriggerKind[CompletionTriggerKind["Invoked"] = 1] = "Invoked";
+        /** Completion was triggered by a trigger character. */
+        CompletionTriggerKind[CompletionTriggerKind["TriggerCharacter"] = 2] = "TriggerCharacter";
+        /** Completion was re-triggered as the current completion list is incomplete. */
+        CompletionTriggerKind[CompletionTriggerKind["TriggerForIncompleteCompletions"] = 3] = "TriggerForIncompleteCompletions";
+    })(CompletionTriggerKind = ts.CompletionTriggerKind || (ts.CompletionTriggerKind = {}));
+    var InlayHintKind;
+    (function (InlayHintKind) {
+        InlayHintKind["Type"] = "Type";
+        InlayHintKind["Parameter"] = "Parameter";
+        InlayHintKind["Enum"] = "Enum";
+    })(InlayHintKind = ts.InlayHintKind || (ts.InlayHintKind = {}));
     var HighlightSpanKind;
     (function (HighlightSpanKind) {
         HighlightSpanKind["none"] = "none";
@@ -118448,7 +120916,10 @@
          * interface Y { foo:number; }
          */
         ScriptElementKind["memberVariableElement"] = "property";
-        /** class X { constructor() { } } */
+        /**
+         * class X { constructor() { } }
+         * class X { static { } }
+         */
         ScriptElementKind["constructorImplementationElement"] = "constructor";
         /** interface Y { ():number; } */
         ScriptElementKind["callSignatureElement"] = "call";
@@ -118570,37 +121041,37 @@
     })(SemanticMeaning = ts.SemanticMeaning || (ts.SemanticMeaning = {}));
     function getMeaningFromDeclaration(node) {
         switch (node.kind) {
-            case 250 /* VariableDeclaration */:
+            case 252 /* VariableDeclaration */:
                 return ts.isInJSFile(node) && ts.getJSDocEnumTag(node) ? 7 /* All */ : 1 /* Value */;
-            case 161 /* Parameter */:
-            case 199 /* BindingElement */:
-            case 164 /* PropertyDeclaration */:
-            case 163 /* PropertySignature */:
-            case 289 /* PropertyAssignment */:
-            case 290 /* ShorthandPropertyAssignment */:
-            case 166 /* MethodDeclaration */:
-            case 165 /* MethodSignature */:
-            case 167 /* Constructor */:
-            case 168 /* GetAccessor */:
-            case 169 /* SetAccessor */:
-            case 252 /* FunctionDeclaration */:
-            case 209 /* FunctionExpression */:
-            case 210 /* ArrowFunction */:
-            case 288 /* CatchClause */:
-            case 281 /* JsxAttribute */:
+            case 162 /* Parameter */:
+            case 201 /* BindingElement */:
+            case 165 /* PropertyDeclaration */:
+            case 164 /* PropertySignature */:
+            case 291 /* PropertyAssignment */:
+            case 292 /* ShorthandPropertyAssignment */:
+            case 167 /* MethodDeclaration */:
+            case 166 /* MethodSignature */:
+            case 169 /* Constructor */:
+            case 170 /* GetAccessor */:
+            case 171 /* SetAccessor */:
+            case 254 /* FunctionDeclaration */:
+            case 211 /* FunctionExpression */:
+            case 212 /* ArrowFunction */:
+            case 290 /* CatchClause */:
+            case 283 /* JsxAttribute */:
                 return 1 /* Value */;
-            case 160 /* TypeParameter */:
-            case 254 /* InterfaceDeclaration */:
-            case 255 /* TypeAliasDeclaration */:
-            case 178 /* TypeLiteral */:
+            case 161 /* TypeParameter */:
+            case 256 /* InterfaceDeclaration */:
+            case 257 /* TypeAliasDeclaration */:
+            case 180 /* TypeLiteral */:
                 return 2 /* Type */;
-            case 335 /* JSDocTypedefTag */:
+            case 340 /* JSDocTypedefTag */:
                 // If it has no name node, it shares the name with the value declaration below it.
                 return node.name === undefined ? 1 /* Value */ | 2 /* Type */ : 2 /* Type */;
-            case 292 /* EnumMember */:
-            case 253 /* ClassDeclaration */:
+            case 294 /* EnumMember */:
+            case 255 /* ClassDeclaration */:
                 return 1 /* Value */ | 2 /* Type */;
-            case 257 /* ModuleDeclaration */:
+            case 259 /* ModuleDeclaration */:
                 if (ts.isAmbientModule(node)) {
                     return 4 /* Namespace */ | 1 /* Value */;
                 }
@@ -118610,16 +121081,16 @@
                 else {
                     return 4 /* Namespace */;
                 }
-            case 256 /* EnumDeclaration */:
-            case 265 /* NamedImports */:
-            case 266 /* ImportSpecifier */:
-            case 261 /* ImportEqualsDeclaration */:
-            case 262 /* ImportDeclaration */:
-            case 267 /* ExportAssignment */:
-            case 268 /* ExportDeclaration */:
+            case 258 /* EnumDeclaration */:
+            case 267 /* NamedImports */:
+            case 268 /* ImportSpecifier */:
+            case 263 /* ImportEqualsDeclaration */:
+            case 264 /* ImportDeclaration */:
+            case 269 /* ExportAssignment */:
+            case 270 /* ExportDeclaration */:
                 return 7 /* All */;
             // An external module can be a Value
-            case 298 /* SourceFile */:
+            case 300 /* SourceFile */:
                 return 4 /* Namespace */ | 1 /* Value */;
         }
         return 7 /* All */;
@@ -118627,23 +121098,32 @@
     ts.getMeaningFromDeclaration = getMeaningFromDeclaration;
     function getMeaningFromLocation(node) {
         node = getAdjustedReferenceLocation(node);
-        if (node.kind === 298 /* SourceFile */) {
+        var parent = node.parent;
+        if (node.kind === 300 /* SourceFile */) {
             return 1 /* Value */;
         }
-        else if (node.parent.kind === 267 /* ExportAssignment */
-            || node.parent.kind === 273 /* ExternalModuleReference */
-            || node.parent.kind === 266 /* ImportSpecifier */
-            || node.parent.kind === 263 /* ImportClause */
-            || ts.isImportEqualsDeclaration(node.parent) && node === node.parent.name) {
+        else if (ts.isExportAssignment(parent)
+            || ts.isExportSpecifier(parent)
+            || ts.isExternalModuleReference(parent)
+            || ts.isImportSpecifier(parent)
+            || ts.isImportClause(parent)
+            || ts.isImportEqualsDeclaration(parent) && node === parent.name) {
+            var decl = parent;
+            while (decl) {
+                if (ts.isImportEqualsDeclaration(decl) || ts.isImportClause(decl) || ts.isExportDeclaration(decl)) {
+                    return decl.isTypeOnly ? 2 /* Type */ : 7 /* All */;
+                }
+                decl = decl.parent;
+            }
             return 7 /* All */;
         }
         else if (isInRightSideOfInternalImportEqualsDeclaration(node)) {
             return getMeaningFromRightHandSideOfImportEquals(node);
         }
         else if (ts.isDeclarationName(node)) {
-            return getMeaningFromDeclaration(node.parent);
+            return getMeaningFromDeclaration(parent);
         }
-        else if (ts.isEntityName(node) && (ts.isJSDocNameReference(node.parent) || ts.isJSDocLink(node.parent))) {
+        else if (ts.isEntityName(node) && ts.findAncestor(node, ts.or(ts.isJSDocNameReference, ts.isJSDocLinkLike, ts.isJSDocMemberName))) {
             return 7 /* All */;
         }
         else if (isTypeReference(node)) {
@@ -118652,11 +121132,11 @@
         else if (isNamespaceReference(node)) {
             return 4 /* Namespace */;
         }
-        else if (ts.isTypeParameterDeclaration(node.parent)) {
-            ts.Debug.assert(ts.isJSDocTemplateTag(node.parent.parent)); // Else would be handled by isDeclarationName
+        else if (ts.isTypeParameterDeclaration(parent)) {
+            ts.Debug.assert(ts.isJSDocTemplateTag(parent.parent)); // Else would be handled by isDeclarationName
             return 2 /* Type */;
         }
-        else if (ts.isLiteralTypeNode(node.parent)) {
+        else if (ts.isLiteralTypeNode(parent)) {
             // This might be T["name"], which is actually referencing a property and not a type. So allow both meanings.
             return 2 /* Type */ | 1 /* Value */;
         }
@@ -118669,11 +121149,11 @@
         //     import a = |b|; // Namespace
         //     import a = |b.c|; // Value, type, namespace
         //     import a = |b.c|.d; // Namespace
-        var name = node.kind === 158 /* QualifiedName */ ? node : ts.isQualifiedName(node.parent) && node.parent.right === node ? node.parent : undefined;
-        return name && name.parent.kind === 261 /* ImportEqualsDeclaration */ ? 7 /* All */ : 4 /* Namespace */;
+        var name = node.kind === 159 /* QualifiedName */ ? node : ts.isQualifiedName(node.parent) && node.parent.right === node ? node.parent : undefined;
+        return name && name.parent.kind === 263 /* ImportEqualsDeclaration */ ? 7 /* All */ : 4 /* Namespace */;
     }
     function isInRightSideOfInternalImportEqualsDeclaration(node) {
-        while (node.parent.kind === 158 /* QualifiedName */) {
+        while (node.parent.kind === 159 /* QualifiedName */) {
             node = node.parent;
         }
         return ts.isInternalModuleImportEqualsDeclaration(node.parent) && node.parent.moduleReference === node;
@@ -118685,27 +121165,27 @@
     function isQualifiedNameNamespaceReference(node) {
         var root = node;
         var isLastClause = true;
-        if (root.parent.kind === 158 /* QualifiedName */) {
-            while (root.parent && root.parent.kind === 158 /* QualifiedName */) {
+        if (root.parent.kind === 159 /* QualifiedName */) {
+            while (root.parent && root.parent.kind === 159 /* QualifiedName */) {
                 root = root.parent;
             }
             isLastClause = root.right === node;
         }
-        return root.parent.kind === 174 /* TypeReference */ && !isLastClause;
+        return root.parent.kind === 176 /* TypeReference */ && !isLastClause;
     }
     function isPropertyAccessNamespaceReference(node) {
         var root = node;
         var isLastClause = true;
-        if (root.parent.kind === 202 /* PropertyAccessExpression */) {
-            while (root.parent && root.parent.kind === 202 /* PropertyAccessExpression */) {
+        if (root.parent.kind === 204 /* PropertyAccessExpression */) {
+            while (root.parent && root.parent.kind === 204 /* PropertyAccessExpression */) {
                 root = root.parent;
             }
             isLastClause = root.name === node;
         }
-        if (!isLastClause && root.parent.kind === 224 /* ExpressionWithTypeArguments */ && root.parent.parent.kind === 287 /* HeritageClause */) {
+        if (!isLastClause && root.parent.kind === 226 /* ExpressionWithTypeArguments */ && root.parent.parent.kind === 289 /* HeritageClause */) {
             var decl = root.parent.parent.parent;
-            return (decl.kind === 253 /* ClassDeclaration */ && root.parent.parent.token === 116 /* ImplementsKeyword */) ||
-                (decl.kind === 254 /* InterfaceDeclaration */ && root.parent.parent.token === 93 /* ExtendsKeyword */);
+            return (decl.kind === 255 /* ClassDeclaration */ && root.parent.parent.token === 117 /* ImplementsKeyword */) ||
+                (decl.kind === 256 /* InterfaceDeclaration */ && root.parent.parent.token === 94 /* ExtendsKeyword */);
         }
         return false;
     }
@@ -118714,17 +121194,17 @@
             node = node.parent;
         }
         switch (node.kind) {
-            case 107 /* ThisKeyword */:
+            case 108 /* ThisKeyword */:
                 return !ts.isExpressionNode(node);
-            case 188 /* ThisType */:
+            case 190 /* ThisType */:
                 return true;
         }
         switch (node.parent.kind) {
-            case 174 /* TypeReference */:
+            case 176 /* TypeReference */:
                 return true;
-            case 196 /* ImportType */:
+            case 198 /* ImportType */:
                 return !node.parent.isTypeOf;
-            case 224 /* ExpressionWithTypeArguments */:
+            case 226 /* ExpressionWithTypeArguments */:
                 return !ts.isExpressionWithTypeArgumentsInClassExtendsClause(node.parent);
         }
         return false;
@@ -118791,7 +121271,7 @@
     ts.climbPastPropertyOrElementAccess = climbPastPropertyOrElementAccess;
     function getTargetLabel(referenceNode, labelName) {
         while (referenceNode) {
-            if (referenceNode.kind === 246 /* LabeledStatement */ && referenceNode.label.escapedText === labelName) {
+            if (referenceNode.kind === 248 /* LabeledStatement */ && referenceNode.label.escapedText === labelName) {
                 return referenceNode.label;
             }
             referenceNode = referenceNode.parent;
@@ -118852,22 +121332,22 @@
     ts.isNameOfFunctionDeclaration = isNameOfFunctionDeclaration;
     function isLiteralNameOfPropertyDeclarationOrIndexAccess(node) {
         switch (node.parent.kind) {
-            case 164 /* PropertyDeclaration */:
-            case 163 /* PropertySignature */:
-            case 289 /* PropertyAssignment */:
-            case 292 /* EnumMember */:
-            case 166 /* MethodDeclaration */:
-            case 165 /* MethodSignature */:
-            case 168 /* GetAccessor */:
-            case 169 /* SetAccessor */:
-            case 257 /* ModuleDeclaration */:
+            case 165 /* PropertyDeclaration */:
+            case 164 /* PropertySignature */:
+            case 291 /* PropertyAssignment */:
+            case 294 /* EnumMember */:
+            case 167 /* MethodDeclaration */:
+            case 166 /* MethodSignature */:
+            case 170 /* GetAccessor */:
+            case 171 /* SetAccessor */:
+            case 259 /* ModuleDeclaration */:
                 return ts.getNameOfDeclaration(node.parent) === node;
-            case 203 /* ElementAccessExpression */:
+            case 205 /* ElementAccessExpression */:
                 return node.parent.argumentExpression === node;
-            case 159 /* ComputedPropertyName */:
+            case 160 /* ComputedPropertyName */:
                 return true;
-            case 192 /* LiteralType */:
-                return node.parent.parent.kind === 190 /* IndexedAccessType */;
+            case 194 /* LiteralType */:
+                return node.parent.parent.kind === 192 /* IndexedAccessType */;
             default:
                 return false;
         }
@@ -118891,17 +121371,17 @@
                 return undefined;
             }
             switch (node.kind) {
-                case 298 /* SourceFile */:
-                case 166 /* MethodDeclaration */:
-                case 165 /* MethodSignature */:
-                case 252 /* FunctionDeclaration */:
-                case 209 /* FunctionExpression */:
-                case 168 /* GetAccessor */:
-                case 169 /* SetAccessor */:
-                case 253 /* ClassDeclaration */:
-                case 254 /* InterfaceDeclaration */:
-                case 256 /* EnumDeclaration */:
-                case 257 /* ModuleDeclaration */:
+                case 300 /* SourceFile */:
+                case 167 /* MethodDeclaration */:
+                case 166 /* MethodSignature */:
+                case 254 /* FunctionDeclaration */:
+                case 211 /* FunctionExpression */:
+                case 170 /* GetAccessor */:
+                case 171 /* SetAccessor */:
+                case 255 /* ClassDeclaration */:
+                case 256 /* InterfaceDeclaration */:
+                case 258 /* EnumDeclaration */:
+                case 259 /* ModuleDeclaration */:
                     return node;
             }
         }
@@ -118909,54 +121389,56 @@
     ts.getContainerNode = getContainerNode;
     function getNodeKind(node) {
         switch (node.kind) {
-            case 298 /* SourceFile */:
+            case 300 /* SourceFile */:
                 return ts.isExternalModule(node) ? "module" /* moduleElement */ : "script" /* scriptElement */;
-            case 257 /* ModuleDeclaration */:
+            case 259 /* ModuleDeclaration */:
                 return "module" /* moduleElement */;
-            case 253 /* ClassDeclaration */:
-            case 222 /* ClassExpression */:
+            case 255 /* ClassDeclaration */:
+            case 224 /* ClassExpression */:
                 return "class" /* classElement */;
-            case 254 /* InterfaceDeclaration */: return "interface" /* interfaceElement */;
-            case 255 /* TypeAliasDeclaration */:
-            case 328 /* JSDocCallbackTag */:
-            case 335 /* JSDocTypedefTag */:
+            case 256 /* InterfaceDeclaration */: return "interface" /* interfaceElement */;
+            case 257 /* TypeAliasDeclaration */:
+            case 333 /* JSDocCallbackTag */:
+            case 340 /* JSDocTypedefTag */:
                 return "type" /* typeElement */;
-            case 256 /* EnumDeclaration */: return "enum" /* enumElement */;
-            case 250 /* VariableDeclaration */:
+            case 258 /* EnumDeclaration */: return "enum" /* enumElement */;
+            case 252 /* VariableDeclaration */:
                 return getKindOfVariableDeclaration(node);
-            case 199 /* BindingElement */:
+            case 201 /* BindingElement */:
                 return getKindOfVariableDeclaration(ts.getRootDeclaration(node));
-            case 210 /* ArrowFunction */:
-            case 252 /* FunctionDeclaration */:
-            case 209 /* FunctionExpression */:
+            case 212 /* ArrowFunction */:
+            case 254 /* FunctionDeclaration */:
+            case 211 /* FunctionExpression */:
                 return "function" /* functionElement */;
-            case 168 /* GetAccessor */: return "getter" /* memberGetAccessorElement */;
-            case 169 /* SetAccessor */: return "setter" /* memberSetAccessorElement */;
-            case 166 /* MethodDeclaration */:
-            case 165 /* MethodSignature */:
+            case 170 /* GetAccessor */: return "getter" /* memberGetAccessorElement */;
+            case 171 /* SetAccessor */: return "setter" /* memberSetAccessorElement */;
+            case 167 /* MethodDeclaration */:
+            case 166 /* MethodSignature */:
                 return "method" /* memberFunctionElement */;
-            case 289 /* PropertyAssignment */:
+            case 291 /* PropertyAssignment */:
                 var initializer = node.initializer;
                 return ts.isFunctionLike(initializer) ? "method" /* memberFunctionElement */ : "property" /* memberVariableElement */;
-            case 164 /* PropertyDeclaration */:
-            case 163 /* PropertySignature */:
-            case 290 /* ShorthandPropertyAssignment */:
-            case 291 /* SpreadAssignment */:
+            case 165 /* PropertyDeclaration */:
+            case 164 /* PropertySignature */:
+            case 292 /* ShorthandPropertyAssignment */:
+            case 293 /* SpreadAssignment */:
                 return "property" /* memberVariableElement */;
-            case 172 /* IndexSignature */: return "index" /* indexSignatureElement */;
-            case 171 /* ConstructSignature */: return "construct" /* constructSignatureElement */;
-            case 170 /* CallSignature */: return "call" /* callSignatureElement */;
-            case 167 /* Constructor */: return "constructor" /* constructorImplementationElement */;
-            case 160 /* TypeParameter */: return "type parameter" /* typeParameterElement */;
-            case 292 /* EnumMember */: return "enum member" /* enumMemberElement */;
-            case 161 /* Parameter */: return ts.hasSyntacticModifier(node, 16476 /* ParameterPropertyModifier */) ? "property" /* memberVariableElement */ : "parameter" /* parameterElement */;
-            case 261 /* ImportEqualsDeclaration */:
-            case 266 /* ImportSpecifier */:
-            case 271 /* ExportSpecifier */:
-            case 264 /* NamespaceImport */:
-            case 270 /* NamespaceExport */:
+            case 174 /* IndexSignature */: return "index" /* indexSignatureElement */;
+            case 173 /* ConstructSignature */: return "construct" /* constructSignatureElement */;
+            case 172 /* CallSignature */: return "call" /* callSignatureElement */;
+            case 169 /* Constructor */:
+            case 168 /* ClassStaticBlockDeclaration */:
+                return "constructor" /* constructorImplementationElement */;
+            case 161 /* TypeParameter */: return "type parameter" /* typeParameterElement */;
+            case 294 /* EnumMember */: return "enum member" /* enumMemberElement */;
+            case 162 /* Parameter */: return ts.hasSyntacticModifier(node, 16476 /* ParameterPropertyModifier */) ? "property" /* memberVariableElement */ : "parameter" /* parameterElement */;
+            case 263 /* ImportEqualsDeclaration */:
+            case 268 /* ImportSpecifier */:
+            case 273 /* ExportSpecifier */:
+            case 266 /* NamespaceImport */:
+            case 272 /* NamespaceExport */:
                 return "alias" /* alias */;
-            case 217 /* BinaryExpression */:
+            case 219 /* BinaryExpression */:
                 var kind = ts.getAssignmentDeclarationKind(node);
                 var right = node.right;
                 switch (kind) {
@@ -118983,9 +121465,9 @@
                         return "" /* unknown */;
                     }
                 }
-            case 78 /* Identifier */:
+            case 79 /* Identifier */:
                 return ts.isImportClause(node.parent) ? "alias" /* alias */ : "" /* unknown */;
-            case 267 /* ExportAssignment */:
+            case 269 /* ExportAssignment */:
                 var scriptKind = getNodeKind(node.expression);
                 // If the expression didn't come back with something (like it does for an identifiers)
                 return scriptKind === "" /* unknown */ ? "const" /* constElement */ : scriptKind;
@@ -119003,12 +121485,12 @@
     ts.getNodeKind = getNodeKind;
     function isThis(node) {
         switch (node.kind) {
-            case 107 /* ThisKeyword */:
+            case 108 /* ThisKeyword */:
                 // case SyntaxKind.ThisType: TODO: GH#9267
                 return true;
-            case 78 /* Identifier */:
+            case 79 /* Identifier */:
                 // 'this' as a parameter
-                return ts.identifierIsThisKeyword(node) && node.parent.kind === 161 /* Parameter */;
+                return ts.identifierIsThisKeyword(node) && node.parent.kind === 162 /* Parameter */;
             default:
                 return false;
         }
@@ -119073,42 +121555,42 @@
             return false;
         }
         switch (n.kind) {
-            case 253 /* ClassDeclaration */:
-            case 254 /* InterfaceDeclaration */:
-            case 256 /* EnumDeclaration */:
-            case 201 /* ObjectLiteralExpression */:
-            case 197 /* ObjectBindingPattern */:
-            case 178 /* TypeLiteral */:
-            case 231 /* Block */:
-            case 258 /* ModuleBlock */:
-            case 259 /* CaseBlock */:
-            case 265 /* NamedImports */:
-            case 269 /* NamedExports */:
+            case 255 /* ClassDeclaration */:
+            case 256 /* InterfaceDeclaration */:
+            case 258 /* EnumDeclaration */:
+            case 203 /* ObjectLiteralExpression */:
+            case 199 /* ObjectBindingPattern */:
+            case 180 /* TypeLiteral */:
+            case 233 /* Block */:
+            case 260 /* ModuleBlock */:
+            case 261 /* CaseBlock */:
+            case 267 /* NamedImports */:
+            case 271 /* NamedExports */:
                 return nodeEndsWith(n, 19 /* CloseBraceToken */, sourceFile);
-            case 288 /* CatchClause */:
+            case 290 /* CatchClause */:
                 return isCompletedNode(n.block, sourceFile);
-            case 205 /* NewExpression */:
+            case 207 /* NewExpression */:
                 if (!n.arguments) {
                     return true;
                 }
             // falls through
-            case 204 /* CallExpression */:
-            case 208 /* ParenthesizedExpression */:
-            case 187 /* ParenthesizedType */:
+            case 206 /* CallExpression */:
+            case 210 /* ParenthesizedExpression */:
+            case 189 /* ParenthesizedType */:
                 return nodeEndsWith(n, 21 /* CloseParenToken */, sourceFile);
-            case 175 /* FunctionType */:
-            case 176 /* ConstructorType */:
+            case 177 /* FunctionType */:
+            case 178 /* ConstructorType */:
                 return isCompletedNode(n.type, sourceFile);
-            case 167 /* Constructor */:
-            case 168 /* GetAccessor */:
-            case 169 /* SetAccessor */:
-            case 252 /* FunctionDeclaration */:
-            case 209 /* FunctionExpression */:
-            case 166 /* MethodDeclaration */:
-            case 165 /* MethodSignature */:
-            case 171 /* ConstructSignature */:
-            case 170 /* CallSignature */:
-            case 210 /* ArrowFunction */:
+            case 169 /* Constructor */:
+            case 170 /* GetAccessor */:
+            case 171 /* SetAccessor */:
+            case 254 /* FunctionDeclaration */:
+            case 211 /* FunctionExpression */:
+            case 167 /* MethodDeclaration */:
+            case 166 /* MethodSignature */:
+            case 173 /* ConstructSignature */:
+            case 172 /* CallSignature */:
+            case 212 /* ArrowFunction */:
                 if (n.body) {
                     return isCompletedNode(n.body, sourceFile);
                 }
@@ -119118,65 +121600,65 @@
                 // Even though type parameters can be unclosed, we can get away with
                 // having at least a closing paren.
                 return hasChildOfKind(n, 21 /* CloseParenToken */, sourceFile);
-            case 257 /* ModuleDeclaration */:
+            case 259 /* ModuleDeclaration */:
                 return !!n.body && isCompletedNode(n.body, sourceFile);
-            case 235 /* IfStatement */:
+            case 237 /* IfStatement */:
                 if (n.elseStatement) {
                     return isCompletedNode(n.elseStatement, sourceFile);
                 }
                 return isCompletedNode(n.thenStatement, sourceFile);
-            case 234 /* ExpressionStatement */:
+            case 236 /* ExpressionStatement */:
                 return isCompletedNode(n.expression, sourceFile) ||
                     hasChildOfKind(n, 26 /* SemicolonToken */, sourceFile);
-            case 200 /* ArrayLiteralExpression */:
-            case 198 /* ArrayBindingPattern */:
-            case 203 /* ElementAccessExpression */:
-            case 159 /* ComputedPropertyName */:
-            case 180 /* TupleType */:
+            case 202 /* ArrayLiteralExpression */:
+            case 200 /* ArrayBindingPattern */:
+            case 205 /* ElementAccessExpression */:
+            case 160 /* ComputedPropertyName */:
+            case 182 /* TupleType */:
                 return nodeEndsWith(n, 23 /* CloseBracketToken */, sourceFile);
-            case 172 /* IndexSignature */:
+            case 174 /* IndexSignature */:
                 if (n.type) {
                     return isCompletedNode(n.type, sourceFile);
                 }
                 return hasChildOfKind(n, 23 /* CloseBracketToken */, sourceFile);
-            case 285 /* CaseClause */:
-            case 286 /* DefaultClause */:
+            case 287 /* CaseClause */:
+            case 288 /* DefaultClause */:
                 // there is no such thing as terminator token for CaseClause/DefaultClause so for simplicity always consider them non-completed
                 return false;
-            case 238 /* ForStatement */:
-            case 239 /* ForInStatement */:
-            case 240 /* ForOfStatement */:
-            case 237 /* WhileStatement */:
+            case 240 /* ForStatement */:
+            case 241 /* ForInStatement */:
+            case 242 /* ForOfStatement */:
+            case 239 /* WhileStatement */:
                 return isCompletedNode(n.statement, sourceFile);
-            case 236 /* DoStatement */:
+            case 238 /* DoStatement */:
                 // rough approximation: if DoStatement has While keyword - then if node is completed is checking the presence of ')';
-                return hasChildOfKind(n, 114 /* WhileKeyword */, sourceFile)
+                return hasChildOfKind(n, 115 /* WhileKeyword */, sourceFile)
                     ? nodeEndsWith(n, 21 /* CloseParenToken */, sourceFile)
                     : isCompletedNode(n.statement, sourceFile);
-            case 177 /* TypeQuery */:
+            case 179 /* TypeQuery */:
                 return isCompletedNode(n.exprName, sourceFile);
-            case 212 /* TypeOfExpression */:
-            case 211 /* DeleteExpression */:
-            case 213 /* VoidExpression */:
-            case 220 /* YieldExpression */:
-            case 221 /* SpreadElement */:
+            case 214 /* TypeOfExpression */:
+            case 213 /* DeleteExpression */:
+            case 215 /* VoidExpression */:
+            case 222 /* YieldExpression */:
+            case 223 /* SpreadElement */:
                 var unaryWordExpression = n;
                 return isCompletedNode(unaryWordExpression.expression, sourceFile);
-            case 206 /* TaggedTemplateExpression */:
+            case 208 /* TaggedTemplateExpression */:
                 return isCompletedNode(n.template, sourceFile);
-            case 219 /* TemplateExpression */:
+            case 221 /* TemplateExpression */:
                 var lastSpan = ts.lastOrUndefined(n.templateSpans);
                 return isCompletedNode(lastSpan, sourceFile);
-            case 229 /* TemplateSpan */:
+            case 231 /* TemplateSpan */:
                 return ts.nodeIsPresent(n.literal);
-            case 268 /* ExportDeclaration */:
-            case 262 /* ImportDeclaration */:
+            case 270 /* ExportDeclaration */:
+            case 264 /* ImportDeclaration */:
                 return ts.nodeIsPresent(n.moduleSpecifier);
-            case 215 /* PrefixUnaryExpression */:
+            case 217 /* PrefixUnaryExpression */:
                 return isCompletedNode(n.operand, sourceFile);
-            case 217 /* BinaryExpression */:
+            case 219 /* BinaryExpression */:
                 return isCompletedNode(n.right, sourceFile);
-            case 218 /* ConditionalExpression */:
+            case 220 /* ConditionalExpression */:
                 return isCompletedNode(n.whenFalse, sourceFile);
             default:
                 return true;
@@ -119236,13 +121718,13 @@
     }
     ts.findContainingList = findContainingList;
     function isDefaultModifier(node) {
-        return node.kind === 87 /* DefaultKeyword */;
+        return node.kind === 88 /* DefaultKeyword */;
     }
     function isClassKeyword(node) {
-        return node.kind === 83 /* ClassKeyword */;
+        return node.kind === 84 /* ClassKeyword */;
     }
     function isFunctionKeyword(node) {
-        return node.kind === 97 /* FunctionKeyword */;
+        return node.kind === 98 /* FunctionKeyword */;
     }
     function getAdjustedLocationForClass(node) {
         if (ts.isNamedDeclaration(node)) {
@@ -119251,7 +121733,7 @@
         if (ts.isClassDeclaration(node)) {
             // for class and function declarations, use the `default` modifier
             // when the declaration is unnamed.
-            var defaultModifier = ts.find(node.modifiers, isDefaultModifier);
+            var defaultModifier = node.modifiers && ts.find(node.modifiers, isDefaultModifier);
             if (defaultModifier)
                 return defaultModifier;
         }
@@ -119295,6 +121777,10 @@
         if (contextualType) {
             return contextualType;
         }
+        var parent = node.parent;
+        if (parent && ts.isBinaryExpression(parent) && isEqualityOperatorKind(parent.operatorToken.kind)) {
+            return checker.getTypeAtLocation(node === parent.left ? parent.right : parent.left);
+        }
         var ancestorTypeNode = getAncestorTypeNode(node);
         return ancestorTypeNode && checker.getTypeAtLocation(ancestorTypeNode);
     }
@@ -119302,11 +121788,11 @@
     function getAdjustedLocationForDeclaration(node, forRename) {
         if (!forRename) {
             switch (node.kind) {
-                case 253 /* ClassDeclaration */:
-                case 222 /* ClassExpression */:
+                case 255 /* ClassDeclaration */:
+                case 224 /* ClassExpression */:
                     return getAdjustedLocationForClass(node);
-                case 252 /* FunctionDeclaration */:
-                case 209 /* FunctionExpression */:
+                case 254 /* FunctionDeclaration */:
+                case 211 /* FunctionExpression */:
                     return getAdjustedLocationForFunction(node);
             }
         }
@@ -119396,30 +121882,30 @@
         //
         // NOTE: If the node is a modifier, we don't adjust its location if it is the `default` modifier as that is handled
         // specially by `getSymbolAtLocation`.
-        if (ts.isModifier(node) && (forRename || node.kind !== 87 /* DefaultKeyword */) ? ts.contains(parent.modifiers, node) :
-            node.kind === 83 /* ClassKeyword */ ? ts.isClassDeclaration(parent) || ts.isClassExpression(node) :
-                node.kind === 97 /* FunctionKeyword */ ? ts.isFunctionDeclaration(parent) || ts.isFunctionExpression(node) :
-                    node.kind === 117 /* InterfaceKeyword */ ? ts.isInterfaceDeclaration(parent) :
-                        node.kind === 91 /* EnumKeyword */ ? ts.isEnumDeclaration(parent) :
-                            node.kind === 149 /* TypeKeyword */ ? ts.isTypeAliasDeclaration(parent) :
-                                node.kind === 140 /* NamespaceKeyword */ || node.kind === 139 /* ModuleKeyword */ ? ts.isModuleDeclaration(parent) :
-                                    node.kind === 99 /* ImportKeyword */ ? ts.isImportEqualsDeclaration(parent) :
-                                        node.kind === 134 /* GetKeyword */ ? ts.isGetAccessorDeclaration(parent) :
-                                            node.kind === 146 /* SetKeyword */ && ts.isSetAccessorDeclaration(parent)) {
+        if (ts.isModifier(node) && (forRename || node.kind !== 88 /* DefaultKeyword */) ? ts.contains(parent.modifiers, node) :
+            node.kind === 84 /* ClassKeyword */ ? ts.isClassDeclaration(parent) || ts.isClassExpression(node) :
+                node.kind === 98 /* FunctionKeyword */ ? ts.isFunctionDeclaration(parent) || ts.isFunctionExpression(node) :
+                    node.kind === 118 /* InterfaceKeyword */ ? ts.isInterfaceDeclaration(parent) :
+                        node.kind === 92 /* EnumKeyword */ ? ts.isEnumDeclaration(parent) :
+                            node.kind === 150 /* TypeKeyword */ ? ts.isTypeAliasDeclaration(parent) :
+                                node.kind === 141 /* NamespaceKeyword */ || node.kind === 140 /* ModuleKeyword */ ? ts.isModuleDeclaration(parent) :
+                                    node.kind === 100 /* ImportKeyword */ ? ts.isImportEqualsDeclaration(parent) :
+                                        node.kind === 135 /* GetKeyword */ ? ts.isGetAccessorDeclaration(parent) :
+                                            node.kind === 147 /* SetKeyword */ && ts.isSetAccessorDeclaration(parent)) {
             var location = getAdjustedLocationForDeclaration(parent, forRename);
             if (location) {
                 return location;
             }
         }
         // /**/<var|let|const> [|name|] ...
-        if ((node.kind === 112 /* VarKeyword */ || node.kind === 84 /* ConstKeyword */ || node.kind === 118 /* LetKeyword */) &&
+        if ((node.kind === 113 /* VarKeyword */ || node.kind === 85 /* ConstKeyword */ || node.kind === 119 /* LetKeyword */) &&
             ts.isVariableDeclarationList(parent) && parent.declarations.length === 1) {
             var decl = parent.declarations[0];
             if (ts.isIdentifier(decl.name)) {
                 return decl.name;
             }
         }
-        if (node.kind === 149 /* TypeKeyword */) {
+        if (node.kind === 150 /* TypeKeyword */) {
             // import /**/type [|name|] from ...;
             // import /**/type { [|name|] } from ...;
             // import /**/type { propertyName as [|name|] } from ...;
@@ -119445,7 +121931,7 @@
         // import * /**/as [|name|] ...
         // export { propertyName /**/as [|name|] } ...
         // export * /**/as [|name|] ...
-        if (node.kind === 126 /* AsKeyword */) {
+        if (node.kind === 127 /* AsKeyword */) {
             if (ts.isImportSpecifier(parent) && parent.propertyName ||
                 ts.isExportSpecifier(parent) && parent.propertyName ||
                 ts.isNamespaceImport(parent) ||
@@ -119461,13 +121947,13 @@
         // /**/import { propertyName as [|name|] } from ...;
         // /**/import ... from "[|module|]";
         // /**/import "[|module|]";
-        if (node.kind === 99 /* ImportKeyword */ && ts.isImportDeclaration(parent)) {
+        if (node.kind === 100 /* ImportKeyword */ && ts.isImportDeclaration(parent)) {
             var location = getAdjustedLocationForImportDeclaration(parent, forRename);
             if (location) {
                 return location;
             }
         }
-        if (node.kind === 92 /* ExportKeyword */) {
+        if (node.kind === 93 /* ExportKeyword */) {
             // /**/export { [|name|] } ...;
             // /**/export { propertyName as [|name|] } ...;
             // /**/export * from "[|module|]";
@@ -119486,12 +121972,12 @@
             }
         }
         // import name = /**/require("[|module|]");
-        if (node.kind === 143 /* RequireKeyword */ && ts.isExternalModuleReference(parent)) {
+        if (node.kind === 144 /* RequireKeyword */ && ts.isExternalModuleReference(parent)) {
             return parent.expression;
         }
         // import ... /**/from "[|module|]";
         // export ... /**/from "[|module|]";
-        if (node.kind === 153 /* FromKeyword */ && (ts.isImportDeclaration(parent) || ts.isExportDeclaration(parent)) && parent.moduleSpecifier) {
+        if (node.kind === 154 /* FromKeyword */ && (ts.isImportDeclaration(parent) || ts.isExportDeclaration(parent)) && parent.moduleSpecifier) {
             return parent.moduleSpecifier;
         }
         // class ... /**/extends [|name|] ...
@@ -119499,13 +121985,13 @@
         // class ... /**/implements name1, name2 ...
         // interface ... /**/extends [|name|] ...
         // interface ... /**/extends name1, name2 ...
-        if ((node.kind === 93 /* ExtendsKeyword */ || node.kind === 116 /* ImplementsKeyword */) && ts.isHeritageClause(parent) && parent.token === node.kind) {
+        if ((node.kind === 94 /* ExtendsKeyword */ || node.kind === 117 /* ImplementsKeyword */) && ts.isHeritageClause(parent) && parent.token === node.kind) {
             var location = getAdjustedLocationForHeritageClause(parent);
             if (location) {
                 return location;
             }
         }
-        if (node.kind === 93 /* ExtendsKeyword */) {
+        if (node.kind === 94 /* ExtendsKeyword */) {
             // ... <T /**/extends [|U|]> ...
             if (ts.isTypeParameterDeclaration(parent) && parent.constraint && ts.isTypeReferenceNode(parent.constraint)) {
                 return parent.constraint.typeName;
@@ -119516,20 +122002,20 @@
             }
         }
         // ... T extends /**/infer [|U|] ? ...
-        if (node.kind === 135 /* InferKeyword */ && ts.isInferTypeNode(parent)) {
+        if (node.kind === 136 /* InferKeyword */ && ts.isInferTypeNode(parent)) {
             return parent.typeParameter.name;
         }
         // { [ [|K|] /**/in keyof T]: ... }
-        if (node.kind === 100 /* InKeyword */ && ts.isTypeParameterDeclaration(parent) && ts.isMappedTypeNode(parent.parent)) {
+        if (node.kind === 101 /* InKeyword */ && ts.isTypeParameterDeclaration(parent) && ts.isMappedTypeNode(parent.parent)) {
             return parent.name;
         }
         // /**/keyof [|T|]
-        if (node.kind === 138 /* KeyOfKeyword */ && ts.isTypeOperatorNode(parent) && parent.operator === 138 /* KeyOfKeyword */ &&
+        if (node.kind === 139 /* KeyOfKeyword */ && ts.isTypeOperatorNode(parent) && parent.operator === 139 /* KeyOfKeyword */ &&
             ts.isTypeReferenceNode(parent.type)) {
             return parent.type.typeName;
         }
         // /**/readonly [|name|][]
-        if (node.kind === 142 /* ReadonlyKeyword */ && ts.isTypeOperatorNode(parent) && parent.operator === 142 /* ReadonlyKeyword */ &&
+        if (node.kind === 143 /* ReadonlyKeyword */ && ts.isTypeOperatorNode(parent) && parent.operator === 143 /* ReadonlyKeyword */ &&
             ts.isArrayTypeNode(parent.type) && ts.isTypeReferenceNode(parent.type.elementType)) {
             return parent.type.elementType.typeName;
         }
@@ -119544,29 +122030,29 @@
             // /**/yield [|name|]
             // /**/yield obj.[|name|]
             // /**/delete obj.[|name|]
-            if (node.kind === 102 /* NewKeyword */ && ts.isNewExpression(parent) ||
-                node.kind === 113 /* VoidKeyword */ && ts.isVoidExpression(parent) ||
-                node.kind === 111 /* TypeOfKeyword */ && ts.isTypeOfExpression(parent) ||
-                node.kind === 130 /* AwaitKeyword */ && ts.isAwaitExpression(parent) ||
-                node.kind === 124 /* YieldKeyword */ && ts.isYieldExpression(parent) ||
-                node.kind === 88 /* DeleteKeyword */ && ts.isDeleteExpression(parent)) {
+            if (node.kind === 103 /* NewKeyword */ && ts.isNewExpression(parent) ||
+                node.kind === 114 /* VoidKeyword */ && ts.isVoidExpression(parent) ||
+                node.kind === 112 /* TypeOfKeyword */ && ts.isTypeOfExpression(parent) ||
+                node.kind === 131 /* AwaitKeyword */ && ts.isAwaitExpression(parent) ||
+                node.kind === 125 /* YieldKeyword */ && ts.isYieldExpression(parent) ||
+                node.kind === 89 /* DeleteKeyword */ && ts.isDeleteExpression(parent)) {
                 if (parent.expression) {
                     return ts.skipOuterExpressions(parent.expression);
                 }
             }
             // left /**/in [|name|]
             // left /**/instanceof [|name|]
-            if ((node.kind === 100 /* InKeyword */ || node.kind === 101 /* InstanceOfKeyword */) && ts.isBinaryExpression(parent) && parent.operatorToken === node) {
+            if ((node.kind === 101 /* InKeyword */ || node.kind === 102 /* InstanceOfKeyword */) && ts.isBinaryExpression(parent) && parent.operatorToken === node) {
                 return ts.skipOuterExpressions(parent.right);
             }
             // left /**/as [|name|]
-            if (node.kind === 126 /* AsKeyword */ && ts.isAsExpression(parent) && ts.isTypeReferenceNode(parent.type)) {
+            if (node.kind === 127 /* AsKeyword */ && ts.isAsExpression(parent) && ts.isTypeReferenceNode(parent.type)) {
                 return parent.type.typeName;
             }
             // for (... /**/in [|name|])
             // for (... /**/of [|name|])
-            if (node.kind === 100 /* InKeyword */ && ts.isForInStatement(parent) ||
-                node.kind === 157 /* OfKeyword */ && ts.isForOfStatement(parent)) {
+            if (node.kind === 101 /* InKeyword */ && ts.isForInStatement(parent) ||
+                node.kind === 158 /* OfKeyword */ && ts.isForOfStatement(parent)) {
                 return ts.skipOuterExpressions(parent.expression);
             }
         }
@@ -119736,7 +122222,7 @@
                     }
                 }
             }
-            ts.Debug.assert(startNode !== undefined || n.kind === 298 /* SourceFile */ || n.kind === 1 /* EndOfFileToken */ || ts.isJSDocCommentContainingNode(n));
+            ts.Debug.assert(startNode !== undefined || n.kind === 300 /* SourceFile */ || n.kind === 1 /* EndOfFileToken */ || ts.isJSDocCommentContainingNode(n));
             // Here we know that none of child token nodes embrace the position,
             // the only known case is when position is at the end of the file.
             // Try to find the rightmost token in the file without filtering.
@@ -119809,17 +122295,17 @@
             return true;
         }
         // <div> { | </div> or <div a={| </div>
-        if (token.kind === 29 /* LessThanToken */ && token.parent.kind === 284 /* JsxExpression */) {
+        if (token.kind === 29 /* LessThanToken */ && token.parent.kind === 286 /* JsxExpression */) {
             return true;
         }
         // <div> {
         // |
         // } < /div>
-        if (token && token.kind === 19 /* CloseBraceToken */ && token.parent.kind === 284 /* JsxExpression */) {
+        if (token && token.kind === 19 /* CloseBraceToken */ && token.parent.kind === 286 /* JsxExpression */) {
             return true;
         }
         // <div>|</div>
-        if (token.kind === 29 /* LessThanToken */ && token.parent.kind === 277 /* JsxClosingElement */) {
+        if (token.kind === 29 /* LessThanToken */ && token.parent.kind === 279 /* JsxClosingElement */) {
             return true;
         }
         return false;
@@ -119850,17 +122336,17 @@
     function isInsideJsxElement(sourceFile, position) {
         function isInsideJsxElementTraversal(node) {
             while (node) {
-                if (node.kind >= 275 /* JsxSelfClosingElement */ && node.kind <= 284 /* JsxExpression */
+                if (node.kind >= 277 /* JsxSelfClosingElement */ && node.kind <= 286 /* JsxExpression */
                     || node.kind === 11 /* JsxText */
                     || node.kind === 29 /* LessThanToken */
                     || node.kind === 31 /* GreaterThanToken */
-                    || node.kind === 78 /* Identifier */
+                    || node.kind === 79 /* Identifier */
                     || node.kind === 19 /* CloseBraceToken */
                     || node.kind === 18 /* OpenBraceToken */
                     || node.kind === 43 /* SlashToken */) {
                     node = node.parent;
                 }
-                else if (node.kind === 274 /* JsxElement */) {
+                else if (node.kind === 276 /* JsxElement */) {
                     if (position > node.getStart(sourceFile))
                         return true;
                     node = node.parent;
@@ -119999,16 +122485,16 @@
                     break;
                 case 38 /* EqualsGreaterThanToken */:
                 // falls through
-                case 78 /* Identifier */:
+                case 79 /* Identifier */:
                 case 10 /* StringLiteral */:
                 case 8 /* NumericLiteral */:
                 case 9 /* BigIntLiteral */:
-                case 109 /* TrueKeyword */:
-                case 94 /* FalseKeyword */:
+                case 110 /* TrueKeyword */:
+                case 95 /* FalseKeyword */:
                 // falls through
-                case 111 /* TypeOfKeyword */:
-                case 93 /* ExtendsKeyword */:
-                case 138 /* KeyOfKeyword */:
+                case 112 /* TypeOfKeyword */:
+                case 94 /* ExtendsKeyword */:
+                case 139 /* KeyOfKeyword */:
                 case 24 /* DotToken */:
                 case 51 /* BarToken */:
                 case 57 /* QuestionToken */:
@@ -120058,7 +122544,7 @@
             result.push("protected" /* protectedMemberModifier */);
         if (flags & 4 /* Public */)
             result.push("public" /* publicMemberModifier */);
-        if (flags & 32 /* Static */)
+        if (flags & 32 /* Static */ || ts.isClassStaticBlockDeclaration(node))
             result.push("static" /* staticModifier */);
         if (flags & 128 /* Abstract */)
             result.push("abstract" /* abstractModifier */);
@@ -120068,16 +122554,16 @@
             result.push("deprecated" /* deprecatedModifier */);
         if (node.flags & 8388608 /* Ambient */)
             result.push("declare" /* ambientModifier */);
-        if (node.kind === 267 /* ExportAssignment */)
+        if (node.kind === 269 /* ExportAssignment */)
             result.push("export" /* exportedModifier */);
         return result.length > 0 ? result.join(",") : "" /* none */;
     }
     ts.getNodeModifiers = getNodeModifiers;
     function getTypeArgumentOrTypeParameterList(node) {
-        if (node.kind === 174 /* TypeReference */ || node.kind === 204 /* CallExpression */) {
+        if (node.kind === 176 /* TypeReference */ || node.kind === 206 /* CallExpression */) {
             return node.typeArguments;
         }
-        if (ts.isFunctionLike(node) || node.kind === 253 /* ClassDeclaration */ || node.kind === 254 /* InterfaceDeclaration */) {
+        if (ts.isFunctionLike(node) || node.kind === 255 /* ClassDeclaration */ || node.kind === 256 /* InterfaceDeclaration */) {
             return node.typeParameters;
         }
         return undefined;
@@ -120097,7 +122583,7 @@
     }
     ts.isStringOrRegularExpressionOrTemplateLiteral = isStringOrRegularExpressionOrTemplateLiteral;
     function isPunctuation(kind) {
-        return 18 /* FirstPunctuation */ <= kind && kind <= 77 /* LastPunctuation */;
+        return 18 /* FirstPunctuation */ <= kind && kind <= 78 /* LastPunctuation */;
     }
     ts.isPunctuation = isPunctuation;
     function isInsideTemplateLiteral(node, position, sourceFile) {
@@ -120107,9 +122593,9 @@
     ts.isInsideTemplateLiteral = isInsideTemplateLiteral;
     function isAccessibilityModifier(kind) {
         switch (kind) {
-            case 122 /* PublicKeyword */:
-            case 120 /* PrivateKeyword */:
-            case 121 /* ProtectedKeyword */:
+            case 123 /* PublicKeyword */:
+            case 121 /* PrivateKeyword */:
+            case 122 /* ProtectedKeyword */:
                 return true;
         }
         return false;
@@ -120122,18 +122608,18 @@
     }
     ts.cloneCompilerOptions = cloneCompilerOptions;
     function isArrayLiteralOrObjectLiteralDestructuringPattern(node) {
-        if (node.kind === 200 /* ArrayLiteralExpression */ ||
-            node.kind === 201 /* ObjectLiteralExpression */) {
+        if (node.kind === 202 /* ArrayLiteralExpression */ ||
+            node.kind === 203 /* ObjectLiteralExpression */) {
             // [a,b,c] from:
             // [a, b, c] = someExpression;
-            if (node.parent.kind === 217 /* BinaryExpression */ &&
+            if (node.parent.kind === 219 /* BinaryExpression */ &&
                 node.parent.left === node &&
-                node.parent.operatorToken.kind === 62 /* EqualsToken */) {
+                node.parent.operatorToken.kind === 63 /* EqualsToken */) {
                 return true;
             }
             // [a, b, c] from:
             // for([a, b, c] of expression)
-            if (node.parent.kind === 240 /* ForOfStatement */ &&
+            if (node.parent.kind === 242 /* ForOfStatement */ &&
                 node.parent.initializer === node) {
                 return true;
             }
@@ -120141,7 +122627,7 @@
             // [x, [a, b, c] ] = someExpression
             // or
             // {x, a: {a, b, c} } = someExpression
-            if (isArrayLiteralOrObjectLiteralDestructuringPattern(node.parent.kind === 289 /* PropertyAssignment */ ? node.parent.parent : node.parent)) {
+            if (isArrayLiteralOrObjectLiteralDestructuringPattern(node.parent.kind === 291 /* PropertyAssignment */ ? node.parent.parent : node.parent)) {
                 return true;
             }
         }
@@ -120203,32 +122689,32 @@
     }
     ts.createTextChange = createTextChange;
     ts.typeKeywords = [
-        128 /* AnyKeyword */,
-        127 /* AssertsKeyword */,
-        155 /* BigIntKeyword */,
-        131 /* BooleanKeyword */,
-        94 /* FalseKeyword */,
-        135 /* InferKeyword */,
-        138 /* KeyOfKeyword */,
-        141 /* NeverKeyword */,
-        103 /* NullKeyword */,
-        144 /* NumberKeyword */,
-        145 /* ObjectKeyword */,
-        142 /* ReadonlyKeyword */,
-        147 /* StringKeyword */,
-        148 /* SymbolKeyword */,
-        109 /* TrueKeyword */,
-        113 /* VoidKeyword */,
-        150 /* UndefinedKeyword */,
-        151 /* UniqueKeyword */,
-        152 /* UnknownKeyword */,
+        129 /* AnyKeyword */,
+        128 /* AssertsKeyword */,
+        156 /* BigIntKeyword */,
+        132 /* BooleanKeyword */,
+        95 /* FalseKeyword */,
+        136 /* InferKeyword */,
+        139 /* KeyOfKeyword */,
+        142 /* NeverKeyword */,
+        104 /* NullKeyword */,
+        145 /* NumberKeyword */,
+        146 /* ObjectKeyword */,
+        143 /* ReadonlyKeyword */,
+        148 /* StringKeyword */,
+        149 /* SymbolKeyword */,
+        110 /* TrueKeyword */,
+        114 /* VoidKeyword */,
+        151 /* UndefinedKeyword */,
+        152 /* UniqueKeyword */,
+        153 /* UnknownKeyword */,
     ];
     function isTypeKeyword(kind) {
         return ts.contains(ts.typeKeywords, kind);
     }
     ts.isTypeKeyword = isTypeKeyword;
     function isTypeKeywordToken(node) {
-        return node.kind === 149 /* TypeKeyword */;
+        return node.kind === 150 /* TypeKeyword */;
     }
     ts.isTypeKeywordToken = isTypeKeywordToken;
     /** True if the symbol is for an external module, as opposed to a namespace. */
@@ -120261,7 +122747,7 @@
     }
     ts.skipConstraint = skipConstraint;
     function getNameFromPropertyName(name) {
-        return name.kind === 159 /* ComputedPropertyName */
+        return name.kind === 160 /* ComputedPropertyName */
             // treat computed property names where expression is string/numeric literal as just string/numeric literal
             ? ts.isStringOrNumericLiteralLike(name.expression) ? name.expression.text : undefined
             : ts.isPrivateIdentifier(name) ? ts.idText(name) : ts.getTextOfIdentifierOrLiteral(name);
@@ -120290,7 +122776,6 @@
             getSymlinkCache: ts.maybeBind(host, host.getSymlinkCache) || program.getSymlinkCache,
             getModuleSpecifierCache: ts.maybeBind(host, host.getModuleSpecifierCache),
             getGlobalTypingsCacheLocation: ts.maybeBind(host, host.getGlobalTypingsCacheLocation),
-            getSourceFiles: function () { return program.getSourceFiles(); },
             redirectTargetsMap: program.redirectTargetsMap,
             getProjectReferenceRedirect: function (fileName) { return program.getProjectReferenceRedirect(fileName); },
             isSourceOfProjectReferenceRedirect: function (fileName) { return program.isSourceOfProjectReferenceRedirect(fileName); },
@@ -120359,7 +122844,7 @@
         }
         return ts.firstDefined(symbol.declarations, function (decl) {
             var name = ts.getNameOfDeclaration(decl);
-            return name && name.kind === 78 /* Identifier */ ? name.escapedText : undefined;
+            return name && name.kind === 79 /* Identifier */ ? name.escapedText : undefined;
         });
     }
     ts.symbolEscapedNameNoDefault = symbolEscapedNameNoDefault;
@@ -120403,7 +122888,7 @@
     ts.findModifier = findModifier;
     function insertImports(changes, sourceFile, imports, blankLineBetween) {
         var decl = ts.isArray(imports) ? imports[0] : imports;
-        var importKindPredicate = decl.kind === 233 /* VariableStatement */ ? ts.isRequireVariableStatement : ts.isAnyImportSyntax;
+        var importKindPredicate = decl.kind === 235 /* VariableStatement */ ? ts.isRequireVariableStatement : ts.isAnyImportSyntax;
         var existingImportStatements = ts.filter(sourceFile.statements, importKindPredicate);
         var sortedNewImports = ts.isArray(imports) ? ts.stableSort(imports, ts.OrganizeImports.compareImportsOrRequireStatements) : [imports];
         if (!existingImportStatements.length) {
@@ -120481,7 +122966,7 @@
     // Display-part writer helpers
     // #region
     function isFirstDeclarationOfSymbolParameter(symbol) {
-        return symbol.declarations && symbol.declarations.length > 0 && symbol.declarations[0].kind === 161 /* Parameter */;
+        return symbol.declarations && symbol.declarations.length > 0 && symbol.declarations[0].kind === 162 /* Parameter */;
     }
     ts.isFirstDeclarationOfSymbolParameter = isFirstDeclarationOfSymbolParameter;
     var displayPartWriter = getDisplayPartWriter();
@@ -120529,7 +123014,7 @@
             increaseIndent: function () { indent++; },
             decreaseIndent: function () { indent--; },
             clear: resetWriter,
-            trackSymbol: ts.noop,
+            trackSymbol: function () { return false; },
             reportInaccessibleThisError: ts.noop,
             reportInaccessibleUniqueSymbolError: ts.noop,
             reportPrivateInBaseOfClassExpression: ts.noop,
@@ -120692,7 +123177,10 @@
     ts.linkPart = linkPart;
     function buildLinkParts(link, checker) {
         var _a;
-        var parts = [linkPart("{@link ")];
+        var prefix = ts.isJSDocLink(link) ? "link"
+            : ts.isJSDocLinkCode(link) ? "linkcode"
+                : "linkplain";
+        var parts = [linkPart("{@" + prefix + " ")];
         if (!link.name) {
             if (link.text) {
                 parts.push(linkTextPart(link.text));
@@ -120708,7 +123196,7 @@
                 }
             }
             else {
-                parts.push(linkTextPart(ts.getTextOfNode(link.name) + link.text));
+                parts.push(linkTextPart(ts.getTextOfNode(link.name) + " " + link.text));
             }
         }
         parts.push(linkPart("}"));
@@ -120837,9 +123325,13 @@
     }
     ts.getSynthesizedDeepCloneWithReplacements = getSynthesizedDeepCloneWithReplacements;
     function getSynthesizedDeepCloneWorker(node, replaceNode) {
-        var visited = replaceNode ?
-            ts.visitEachChild(node, function (n) { return getSynthesizedDeepCloneWithReplacements(n, /*includeTrivia*/ true, replaceNode); }, ts.nullTransformationContext) :
-            ts.visitEachChild(node, getSynthesizedDeepClone, ts.nullTransformationContext);
+        var nodeClone = replaceNode
+            ? function (n) { return getSynthesizedDeepCloneWithReplacements(n, /*includeTrivia*/ true, replaceNode); }
+            : getSynthesizedDeepClone;
+        var nodesClone = replaceNode
+            ? function (ns) { return ns && getSynthesizedDeepClonesWithReplacements(ns, /*includeTrivia*/ true, replaceNode); }
+            : function (ns) { return ns && getSynthesizedDeepClones(ns); };
+        var visited = ts.visitEachChild(node, nodeClone, ts.nullTransformationContext, nodesClone, nodeClone);
         if (visited === node) {
             // This only happens for leaf nodes - internal nodes always see their children change.
             var clone_1 = ts.isStringLiteral(node) ? ts.setOriginalNode(ts.factory.createStringLiteralFromNode(node), node) :
@@ -120847,8 +123339,8 @@
                     ts.factory.cloneNode(node);
             return ts.setTextRange(clone_1, node);
         }
-        // PERF: As an optimization, rather than calling getSynthesizedClone, we'll update
-        // the new node created by visitEachChild with the extra changes getSynthesizedClone
+        // PERF: As an optimization, rather than calling factory.cloneNode, we'll update
+        // the new node created by visitEachChild with the extra changes factory.cloneNode
         // would have made.
         visited.parent = undefined;
         return visited;
@@ -121008,15 +123500,15 @@
     function getContextualTypeFromParent(node, checker) {
         var parent = node.parent;
         switch (parent.kind) {
-            case 205 /* NewExpression */:
+            case 207 /* NewExpression */:
                 return checker.getContextualType(parent);
-            case 217 /* BinaryExpression */: {
+            case 219 /* BinaryExpression */: {
                 var _a = parent, left = _a.left, operatorToken = _a.operatorToken, right = _a.right;
                 return isEqualityOperatorKind(operatorToken.kind)
                     ? checker.getTypeAtLocation(node === right ? left : right)
                     : checker.getContextualType(node);
             }
-            case 285 /* CaseClause */:
+            case 287 /* CaseClause */:
                 return parent.expression === node ? getSwitchedType(parent, checker) : undefined;
             default:
                 return checker.getContextualType(node);
@@ -121046,8 +123538,8 @@
         switch (node.kind) {
             case 10 /* StringLiteral */:
             case 14 /* NoSubstitutionTemplateLiteral */:
-            case 219 /* TemplateExpression */:
-            case 206 /* TaggedTemplateExpression */:
+            case 221 /* TemplateExpression */:
+            case 208 /* TaggedTemplateExpression */:
                 return true;
             default:
                 return false;
@@ -121070,6 +123562,7 @@
         var res = checker.typeToTypeNode(type, enclosingScope, 1 /* NoTruncation */, {
             trackSymbol: function (symbol, declaration, meaning) {
                 typeIsAccessible = typeIsAccessible && checker.isSymbolAccessible(symbol, declaration, meaning, /*shouldComputeAliasToMarkVisible*/ false).accessibility === 0 /* Accessible */;
+                return !typeIsAccessible;
             },
             reportInaccessibleThisError: notAccessible,
             reportPrivateInBaseOfClassExpression: notAccessible,
@@ -121080,41 +123573,41 @@
     }
     ts.getTypeNodeIfAccessible = getTypeNodeIfAccessible;
     function syntaxRequiresTrailingCommaOrSemicolonOrASI(kind) {
-        return kind === 170 /* CallSignature */
-            || kind === 171 /* ConstructSignature */
-            || kind === 172 /* IndexSignature */
-            || kind === 163 /* PropertySignature */
-            || kind === 165 /* MethodSignature */;
+        return kind === 172 /* CallSignature */
+            || kind === 173 /* ConstructSignature */
+            || kind === 174 /* IndexSignature */
+            || kind === 164 /* PropertySignature */
+            || kind === 166 /* MethodSignature */;
     }
     ts.syntaxRequiresTrailingCommaOrSemicolonOrASI = syntaxRequiresTrailingCommaOrSemicolonOrASI;
     function syntaxRequiresTrailingFunctionBlockOrSemicolonOrASI(kind) {
-        return kind === 252 /* FunctionDeclaration */
-            || kind === 167 /* Constructor */
-            || kind === 166 /* MethodDeclaration */
-            || kind === 168 /* GetAccessor */
-            || kind === 169 /* SetAccessor */;
+        return kind === 254 /* FunctionDeclaration */
+            || kind === 169 /* Constructor */
+            || kind === 167 /* MethodDeclaration */
+            || kind === 170 /* GetAccessor */
+            || kind === 171 /* SetAccessor */;
     }
     ts.syntaxRequiresTrailingFunctionBlockOrSemicolonOrASI = syntaxRequiresTrailingFunctionBlockOrSemicolonOrASI;
     function syntaxRequiresTrailingModuleBlockOrSemicolonOrASI(kind) {
-        return kind === 257 /* ModuleDeclaration */;
+        return kind === 259 /* ModuleDeclaration */;
     }
     ts.syntaxRequiresTrailingModuleBlockOrSemicolonOrASI = syntaxRequiresTrailingModuleBlockOrSemicolonOrASI;
     function syntaxRequiresTrailingSemicolonOrASI(kind) {
-        return kind === 233 /* VariableStatement */
-            || kind === 234 /* ExpressionStatement */
-            || kind === 236 /* DoStatement */
-            || kind === 241 /* ContinueStatement */
-            || kind === 242 /* BreakStatement */
-            || kind === 243 /* ReturnStatement */
-            || kind === 247 /* ThrowStatement */
-            || kind === 249 /* DebuggerStatement */
-            || kind === 164 /* PropertyDeclaration */
-            || kind === 255 /* TypeAliasDeclaration */
-            || kind === 262 /* ImportDeclaration */
-            || kind === 261 /* ImportEqualsDeclaration */
-            || kind === 268 /* ExportDeclaration */
-            || kind === 260 /* NamespaceExportDeclaration */
-            || kind === 267 /* ExportAssignment */;
+        return kind === 235 /* VariableStatement */
+            || kind === 236 /* ExpressionStatement */
+            || kind === 238 /* DoStatement */
+            || kind === 243 /* ContinueStatement */
+            || kind === 244 /* BreakStatement */
+            || kind === 245 /* ReturnStatement */
+            || kind === 249 /* ThrowStatement */
+            || kind === 251 /* DebuggerStatement */
+            || kind === 165 /* PropertyDeclaration */
+            || kind === 257 /* TypeAliasDeclaration */
+            || kind === 264 /* ImportDeclaration */
+            || kind === 263 /* ImportEqualsDeclaration */
+            || kind === 270 /* ExportDeclaration */
+            || kind === 262 /* NamespaceExportDeclaration */
+            || kind === 269 /* ExportAssignment */;
     }
     ts.syntaxRequiresTrailingSemicolonOrASI = syntaxRequiresTrailingSemicolonOrASI;
     ts.syntaxMayBeASICandidate = ts.or(syntaxRequiresTrailingCommaOrSemicolonOrASI, syntaxRequiresTrailingFunctionBlockOrSemicolonOrASI, syntaxRequiresTrailingModuleBlockOrSemicolonOrASI, syntaxRequiresTrailingSemicolonOrASI);
@@ -121144,7 +123637,7 @@
             return false;
         }
         // See comment in parser’s `parseDoStatement`
-        if (node.kind === 236 /* DoStatement */) {
+        if (node.kind === 238 /* DoStatement */) {
             return true;
         }
         var topNode = ts.findAncestor(node, function (ancestor) { return !ancestor.parent; });
@@ -121316,7 +123809,7 @@
         }
     }
     ts.createPackageJsonInfo = createPackageJsonInfo;
-    function createPackageJsonImportFilter(fromFile, host) {
+    function createPackageJsonImportFilter(fromFile, preferences, host) {
         var packageJsons = ((host.getPackageJsonsVisibleToFile && host.getPackageJsonsVisibleToFile(fromFile.fileName)) || getPackageJsonsVisibleToFile(fromFile.fileName, host)).filter(function (p) { return p.parseable; });
         var usesNodeCoreModules;
         return { allowsImportingAmbientModule: allowsImportingAmbientModule, allowsImportingSourceFile: allowsImportingSourceFile, allowsImportingSpecifier: allowsImportingSpecifier };
@@ -121384,7 +123877,7 @@
             if (!ts.stringContains(importedFileName, "node_modules")) {
                 return undefined;
             }
-            var specifier = ts.moduleSpecifiers.getNodeModulesPackageName(host.getCompilationSettings(), fromFile.path, importedFileName, moduleSpecifierResolutionHost);
+            var specifier = ts.moduleSpecifiers.getNodeModulesPackageName(host.getCompilationSettings(), fromFile.path, importedFileName, moduleSpecifierResolutionHost, preferences);
             if (!specifier) {
                 return undefined;
             }
@@ -121546,6 +124039,24 @@
         return ts.isInJSFile(declaration) || !ts.findAncestor(declaration, ts.isGlobalScopeAugmentation);
     }
     ts.isNonGlobalDeclaration = isNonGlobalDeclaration;
+    function isDeprecatedDeclaration(decl) {
+        return !!(ts.getCombinedNodeFlagsAlwaysIncludeJSDoc(decl) & 8192 /* Deprecated */);
+    }
+    ts.isDeprecatedDeclaration = isDeprecatedDeclaration;
+    function shouldUseUriStyleNodeCoreModules(file, program) {
+        var decisionFromFile = ts.firstDefined(file.imports, function (node) {
+            if (ts.JsTyping.nodeCoreModules.has(node.text)) {
+                return ts.startsWith(node.text, "node:");
+            }
+        });
+        return decisionFromFile !== null && decisionFromFile !== void 0 ? decisionFromFile : program.usesUriStyleNodeCoreModules;
+    }
+    ts.shouldUseUriStyleNodeCoreModules = shouldUseUriStyleNodeCoreModules;
+    // #endregion
+})(ts || (ts = {}));
+/*@internal*/
+var ts;
+(function (ts) {
     var ImportKind;
     (function (ImportKind) {
         ImportKind[ImportKind["Named"] = 0] = "Named";
@@ -121560,49 +124071,68 @@
         ExportKind[ExportKind["ExportEquals"] = 2] = "ExportEquals";
         ExportKind[ExportKind["UMD"] = 3] = "UMD";
     })(ExportKind = ts.ExportKind || (ts.ExportKind = {}));
-    function createExportMapCache() {
-        var cache;
-        var projectVersion;
+    function createCacheableExportInfoMap(host) {
+        var exportInfoId = 1;
+        var exportInfo = ts.createMultiMap();
+        var symbols = new ts.Map();
         var usableByFileName;
-        var wrapped = {
-            isEmpty: function () {
-                return !cache;
-            },
+        var cache = {
+            isUsableByFile: function (importingFile) { return importingFile === usableByFileName; },
+            isEmpty: function () { return !exportInfo.size; },
             clear: function () {
-                cache = undefined;
-                projectVersion = undefined;
+                exportInfo.clear();
+                symbols.clear();
+                usableByFileName = undefined;
             },
-            set: function (suggestions, version) {
-                cache = suggestions;
-                if (version) {
-                    projectVersion = version;
+            add: function (importingFile, symbol, symbolTableKey, moduleSymbol, moduleFile, exportKind, isFromPackageJson, scriptTarget, checker) {
+                if (importingFile !== usableByFileName) {
+                    cache.clear();
+                    usableByFileName = importingFile;
                 }
-            },
-            get: function (file, checker, version) {
-                if (usableByFileName && file !== usableByFileName) {
-                    return undefined;
-                }
-                if (version && projectVersion === version) {
-                    return cache;
-                }
-                cache === null || cache === void 0 ? void 0 : cache.forEach(function (infos) {
-                    var _a, _b, _c;
-                    for (var _i = 0, infos_1 = infos; _i < infos_1.length; _i++) {
-                        var info = infos_1[_i];
-                        // If the symbol/moduleSymbol was a merged symbol, it will have a new identity
-                        // in the checker, even though the symbols to merge are the same (guaranteed by
-                        // cache invalidation in synchronizeHostData).
-                        if ((_a = info.symbol.declarations) === null || _a === void 0 ? void 0 : _a.length) {
-                            info.symbol = checker.getMergedSymbol(info.exportKind === 1 /* Default */
-                                ? (_b = info.symbol.declarations[0].localSymbol) !== null && _b !== void 0 ? _b : info.symbol.declarations[0].symbol
-                                : info.symbol.declarations[0].symbol);
-                        }
-                        if ((_c = info.moduleSymbol.declarations) === null || _c === void 0 ? void 0 : _c.length) {
-                            info.moduleSymbol = checker.getMergedSymbol(info.moduleSymbol.declarations[0].symbol);
-                        }
-                    }
+                var isDefault = exportKind === 1 /* Default */;
+                var namedSymbol = isDefault && ts.getLocalSymbolForExportDefault(symbol) || symbol;
+                // A re-export merged with an export from a module augmentation can result in `symbol`
+                // being an external module symbol; the name it is re-exported by will be `symbolTableKey`
+                // (which comes from the keys of `moduleSymbol.exports`.)
+                var importedName = ts.isExternalModuleSymbol(namedSymbol)
+                    ? ts.unescapeLeadingUnderscores(symbolTableKey)
+                    : ts.getNameForExportedSymbol(namedSymbol, scriptTarget);
+                var moduleName = ts.stripQuotes(moduleSymbol.name);
+                var id = exportInfoId++;
+                var storedSymbol = symbol.flags & 33554432 /* Transient */ ? undefined : symbol;
+                var storedModuleSymbol = moduleSymbol.flags & 33554432 /* Transient */ ? undefined : moduleSymbol;
+                if (!storedSymbol || !storedModuleSymbol)
+                    symbols.set(id, [symbol, moduleSymbol]);
+                exportInfo.add(key(importedName, symbol, moduleName, checker), {
+                    id: id,
+                    symbolTableKey: symbolTableKey,
+                    symbolName: importedName,
+                    moduleName: moduleName,
+                    moduleFile: moduleFile,
+                    moduleFileName: moduleFile === null || moduleFile === void 0 ? void 0 : moduleFile.fileName,
+                    exportKind: exportKind,
+                    targetFlags: ts.skipAlias(symbol, checker).flags,
+                    isFromPackageJson: isFromPackageJson,
+                    symbol: storedSymbol,
+                    moduleSymbol: storedModuleSymbol,
                 });
-                return cache;
+            },
+            get: function (importingFile, importedName, symbol, moduleName, checker) {
+                if (importingFile !== usableByFileName)
+                    return;
+                var result = exportInfo.get(key(importedName, symbol, moduleName, checker));
+                return result === null || result === void 0 ? void 0 : result.map(rehydrateCachedInfo);
+            },
+            forEach: function (importingFile, action) {
+                if (importingFile !== usableByFileName)
+                    return;
+                exportInfo.forEach(function (info, key) {
+                    var _a = parseKey(key), symbolName = _a.symbolName, ambientModuleName = _a.ambientModuleName;
+                    action(info.map(rehydrateCachedInfo), symbolName, !!ambientModuleName);
+                });
+            },
+            releaseSymbols: function () {
+                symbols.clear();
             },
             onFileChanged: function (oldSourceFile, newSourceFile, typeAcquisitionEnabled) {
                 if (fileIsGlobalOnly(oldSourceFile) && fileIsGlobalOnly(newSourceFile)) {
@@ -121612,13 +124142,13 @@
                 if (usableByFileName && usableByFileName !== newSourceFile.path ||
                     // If ATA is enabled, auto-imports uses existing imports to guess whether you want auto-imports from node.
                     // Adding or removing imports from node could change the outcome of that guess, so could change the suggestions list.
-                    typeAcquisitionEnabled && consumesNodeCoreModules(oldSourceFile) !== consumesNodeCoreModules(newSourceFile) ||
+                    typeAcquisitionEnabled && ts.consumesNodeCoreModules(oldSourceFile) !== ts.consumesNodeCoreModules(newSourceFile) ||
                     // Module agumentation and ambient module changes can add or remove exports available to be auto-imported.
                     // Changes elsewhere in the file can change the *type* of an export in a module augmentation,
                     // but type info is gathered in getCompletionEntryDetails, which doesn’t use the cache.
                     !ts.arrayIsEqualTo(oldSourceFile.moduleAugmentations, newSourceFile.moduleAugmentations) ||
                     !ambientModuleDeclarationsAreEqual(oldSourceFile, newSourceFile)) {
-                    this.clear();
+                    cache.clear();
                     return true;
                 }
                 usableByFileName = newSourceFile.path;
@@ -121626,9 +124156,63 @@
             },
         };
         if (ts.Debug.isDebugging) {
-            Object.defineProperty(wrapped, "__cache", { get: function () { return cache; } });
+            Object.defineProperty(cache, "__cache", { get: function () { return exportInfo; } });
         }
-        return wrapped;
+        return cache;
+        function rehydrateCachedInfo(info) {
+            if (info.symbol && info.moduleSymbol)
+                return info;
+            var id = info.id, exportKind = info.exportKind, targetFlags = info.targetFlags, isFromPackageJson = info.isFromPackageJson, moduleFileName = info.moduleFileName;
+            var _a = symbols.get(id) || ts.emptyArray, cachedSymbol = _a[0], cachedModuleSymbol = _a[1];
+            if (cachedSymbol && cachedModuleSymbol) {
+                return {
+                    symbol: cachedSymbol,
+                    moduleSymbol: cachedModuleSymbol,
+                    moduleFileName: moduleFileName,
+                    exportKind: exportKind,
+                    targetFlags: targetFlags,
+                    isFromPackageJson: isFromPackageJson,
+                };
+            }
+            var checker = (isFromPackageJson
+                ? host.getPackageJsonAutoImportProvider()
+                : host.getCurrentProgram()).getTypeChecker();
+            var moduleSymbol = info.moduleSymbol || cachedModuleSymbol || ts.Debug.checkDefined(info.moduleFile
+                ? checker.getMergedSymbol(info.moduleFile.symbol)
+                : checker.tryFindAmbientModule(info.moduleName));
+            var symbol = info.symbol || cachedSymbol || ts.Debug.checkDefined(exportKind === 2 /* ExportEquals */
+                ? checker.resolveExternalModuleSymbol(moduleSymbol)
+                : checker.tryGetMemberInModuleExportsAndProperties(ts.unescapeLeadingUnderscores(info.symbolTableKey), moduleSymbol), "Could not find symbol '" + info.symbolName + "' by key '" + info.symbolTableKey + "' in module " + moduleSymbol.name);
+            symbols.set(id, [symbol, moduleSymbol]);
+            return {
+                symbol: symbol,
+                moduleSymbol: moduleSymbol,
+                moduleFileName: moduleFileName,
+                exportKind: exportKind,
+                targetFlags: targetFlags,
+                isFromPackageJson: isFromPackageJson,
+            };
+        }
+        function key(importedName, symbol, moduleName, checker) {
+            var unquoted = ts.stripQuotes(moduleName);
+            var moduleKey = ts.isExternalModuleNameRelative(unquoted) ? "/" : unquoted;
+            var target = ts.skipAlias(symbol, checker);
+            return importedName + "|" + createSymbolKey(target) + "|" + moduleKey;
+        }
+        function parseKey(key) {
+            var symbolName = key.substring(0, key.indexOf("|"));
+            var moduleKey = key.substring(key.lastIndexOf("|") + 1);
+            var ambientModuleName = moduleKey === "/" ? undefined : moduleKey;
+            return { symbolName: symbolName, ambientModuleName: ambientModuleName };
+        }
+        function createSymbolKey(symbol) {
+            var key = symbol.name;
+            while (symbol.parent) {
+                key += "," + symbol.parent.name;
+                symbol = symbol.parent;
+            }
+            return key;
+        }
         function fileIsGlobalOnly(file) {
             return !file.commonJsModuleIndicator && !file.externalModuleIndicator && !file.moduleAugmentations && !file.ambientModuleNames;
         }
@@ -121655,44 +124239,14 @@
             return true;
         }
     }
-    ts.createExportMapCache = createExportMapCache;
-    function createModuleSpecifierCache() {
-        var cache;
-        var importingFileName;
-        var wrapped = {
-            get: function (fromFileName, toFileName) {
-                if (!cache || fromFileName !== importingFileName)
-                    return undefined;
-                return cache.get(toFileName);
-            },
-            set: function (fromFileName, toFileName, moduleSpecifiers) {
-                if (cache && fromFileName !== importingFileName) {
-                    cache.clear();
-                }
-                importingFileName = fromFileName;
-                (cache || (cache = new ts.Map())).set(toFileName, moduleSpecifiers);
-            },
-            clear: function () {
-                cache = undefined;
-                importingFileName = undefined;
-            },
-            count: function () {
-                return cache ? cache.size : 0;
-            }
-        };
-        if (ts.Debug.isDebugging) {
-            Object.defineProperty(wrapped, "__cache", { get: function () { return cache; } });
-        }
-        return wrapped;
-    }
-    ts.createModuleSpecifierCache = createModuleSpecifierCache;
-    function isImportableFile(program, from, to, packageJsonFilter, moduleSpecifierResolutionHost, moduleSpecifierCache) {
+    ts.createCacheableExportInfoMap = createCacheableExportInfoMap;
+    function isImportableFile(program, from, to, preferences, packageJsonFilter, moduleSpecifierResolutionHost, moduleSpecifierCache) {
         var _a;
         if (from === to)
             return false;
-        var cachedResult = moduleSpecifierCache === null || moduleSpecifierCache === void 0 ? void 0 : moduleSpecifierCache.get(from.path, to.path);
-        if (cachedResult !== undefined) {
-            return !!cachedResult;
+        var cachedResult = moduleSpecifierCache === null || moduleSpecifierCache === void 0 ? void 0 : moduleSpecifierCache.get(from.path, to.path, preferences);
+        if ((cachedResult === null || cachedResult === void 0 ? void 0 : cachedResult.isAutoImportable) !== undefined) {
+            return cachedResult.isAutoImportable;
         }
         var getCanonicalFileName = ts.hostGetCanonicalFileName(moduleSpecifierResolutionHost);
         var globalTypingsCache = (_a = moduleSpecifierResolutionHost.getGlobalTypingsCacheLocation) === null || _a === void 0 ? void 0 : _a.call(moduleSpecifierResolutionHost);
@@ -121705,9 +124259,9 @@
                 isImportablePath(from.fileName, toPath, getCanonicalFileName, globalTypingsCache);
         });
         if (packageJsonFilter) {
-            var isImportable = hasImportablePath && packageJsonFilter.allowsImportingSourceFile(to, moduleSpecifierResolutionHost);
-            moduleSpecifierCache === null || moduleSpecifierCache === void 0 ? void 0 : moduleSpecifierCache.set(from.path, to.path, isImportable);
-            return isImportable;
+            var isAutoImportable = hasImportablePath && packageJsonFilter.allowsImportingSourceFile(to, moduleSpecifierResolutionHost);
+            moduleSpecifierCache === null || moduleSpecifierCache === void 0 ? void 0 : moduleSpecifierCache.setIsAutoImportable(from.path, to.path, preferences, isAutoImportable);
+            return isAutoImportable;
         }
         return hasImportablePath;
     }
@@ -121724,7 +124278,126 @@
             || ts.startsWith(getCanonicalFileName(fromPath), toNodeModulesParent)
             || (!!globalCachePath && ts.startsWith(getCanonicalFileName(globalCachePath), toNodeModulesParent));
     }
-    // #endregion
+    function forEachExternalModuleToImportFrom(program, host, useAutoImportProvider, cb) {
+        var _a, _b;
+        forEachExternalModule(program.getTypeChecker(), program.getSourceFiles(), function (module, file) { return cb(module, file, program, /*isFromPackageJson*/ false); });
+        var autoImportProvider = useAutoImportProvider && ((_a = host.getPackageJsonAutoImportProvider) === null || _a === void 0 ? void 0 : _a.call(host));
+        if (autoImportProvider) {
+            var start = ts.timestamp();
+            forEachExternalModule(autoImportProvider.getTypeChecker(), autoImportProvider.getSourceFiles(), function (module, file) { return cb(module, file, autoImportProvider, /*isFromPackageJson*/ true); });
+            (_b = host.log) === null || _b === void 0 ? void 0 : _b.call(host, "forEachExternalModuleToImportFrom autoImportProvider: " + (ts.timestamp() - start));
+        }
+    }
+    ts.forEachExternalModuleToImportFrom = forEachExternalModuleToImportFrom;
+    function forEachExternalModule(checker, allSourceFiles, cb) {
+        for (var _i = 0, _a = checker.getAmbientModules(); _i < _a.length; _i++) {
+            var ambient = _a[_i];
+            if (!ts.stringContains(ambient.name, "*")) {
+                cb(ambient, /*sourceFile*/ undefined);
+            }
+        }
+        for (var _b = 0, allSourceFiles_1 = allSourceFiles; _b < allSourceFiles_1.length; _b++) {
+            var sourceFile = allSourceFiles_1[_b];
+            if (ts.isExternalOrCommonJsModule(sourceFile)) {
+                cb(checker.getMergedSymbol(sourceFile.symbol), sourceFile);
+            }
+        }
+    }
+    function getExportInfoMap(importingFile, host, program, cancellationToken) {
+        var _a, _b, _c, _d, _e;
+        var start = ts.timestamp();
+        // Pulling the AutoImportProvider project will trigger its updateGraph if pending,
+        // which will invalidate the export map cache if things change, so pull it before
+        // checking the cache.
+        (_a = host.getPackageJsonAutoImportProvider) === null || _a === void 0 ? void 0 : _a.call(host);
+        var cache = ((_b = host.getCachedExportInfoMap) === null || _b === void 0 ? void 0 : _b.call(host)) || createCacheableExportInfoMap({
+            getCurrentProgram: function () { return program; },
+            getPackageJsonAutoImportProvider: function () { var _a; return (_a = host.getPackageJsonAutoImportProvider) === null || _a === void 0 ? void 0 : _a.call(host); },
+        });
+        if (cache.isUsableByFile(importingFile.path)) {
+            (_c = host.log) === null || _c === void 0 ? void 0 : _c.call(host, "getExportInfoMap: cache hit");
+            return cache;
+        }
+        (_d = host.log) === null || _d === void 0 ? void 0 : _d.call(host, "getExportInfoMap: cache miss or empty; calculating new results");
+        var compilerOptions = program.getCompilerOptions();
+        var scriptTarget = ts.getEmitScriptTarget(compilerOptions);
+        var moduleCount = 0;
+        forEachExternalModuleToImportFrom(program, host, /*useAutoImportProvider*/ true, function (moduleSymbol, moduleFile, program, isFromPackageJson) {
+            if (++moduleCount % 100 === 0)
+                cancellationToken === null || cancellationToken === void 0 ? void 0 : cancellationToken.throwIfCancellationRequested();
+            var seenExports = new ts.Map();
+            var checker = program.getTypeChecker();
+            var defaultInfo = getDefaultLikeExportInfo(moduleSymbol, checker, compilerOptions);
+            // Note: I think we shouldn't actually see resolved module symbols here, but weird merges
+            // can cause it to happen: see 'completionsImport_mergedReExport.ts'
+            if (defaultInfo && isImportableSymbol(defaultInfo.symbol, checker)) {
+                cache.add(importingFile.path, defaultInfo.symbol, defaultInfo.exportKind === 1 /* Default */ ? "default" /* Default */ : "export=" /* ExportEquals */, moduleSymbol, moduleFile, defaultInfo.exportKind, isFromPackageJson, scriptTarget, checker);
+            }
+            checker.forEachExportAndPropertyOfModule(moduleSymbol, function (exported, key) {
+                if (exported !== (defaultInfo === null || defaultInfo === void 0 ? void 0 : defaultInfo.symbol) && isImportableSymbol(exported, checker) && ts.addToSeen(seenExports, exported)) {
+                    cache.add(importingFile.path, exported, key, moduleSymbol, moduleFile, 0 /* Named */, isFromPackageJson, scriptTarget, checker);
+                }
+            });
+        });
+        (_e = host.log) === null || _e === void 0 ? void 0 : _e.call(host, "getExportInfoMap: done in " + (ts.timestamp() - start) + " ms");
+        return cache;
+    }
+    ts.getExportInfoMap = getExportInfoMap;
+    function getDefaultLikeExportInfo(moduleSymbol, checker, compilerOptions) {
+        var exported = getDefaultLikeExportWorker(moduleSymbol, checker);
+        if (!exported)
+            return undefined;
+        var symbol = exported.symbol, exportKind = exported.exportKind;
+        var info = getDefaultExportInfoWorker(symbol, checker, compilerOptions);
+        return info && __assign({ symbol: symbol, exportKind: exportKind }, info);
+    }
+    ts.getDefaultLikeExportInfo = getDefaultLikeExportInfo;
+    function isImportableSymbol(symbol, checker) {
+        return !checker.isUndefinedSymbol(symbol) && !checker.isUnknownSymbol(symbol) && !ts.isKnownSymbol(symbol) && !ts.isPrivateIdentifierSymbol(symbol);
+    }
+    function getDefaultLikeExportWorker(moduleSymbol, checker) {
+        var exportEquals = checker.resolveExternalModuleSymbol(moduleSymbol);
+        if (exportEquals !== moduleSymbol)
+            return { symbol: exportEquals, exportKind: 2 /* ExportEquals */ };
+        var defaultExport = checker.tryGetMemberInModuleExports("default" /* Default */, moduleSymbol);
+        if (defaultExport)
+            return { symbol: defaultExport, exportKind: 1 /* Default */ };
+    }
+    function getDefaultExportInfoWorker(defaultExport, checker, compilerOptions) {
+        var localSymbol = ts.getLocalSymbolForExportDefault(defaultExport);
+        if (localSymbol)
+            return { symbolForMeaning: localSymbol, name: localSymbol.name };
+        var name = getNameForExportDefault(defaultExport);
+        if (name !== undefined)
+            return { symbolForMeaning: defaultExport, name: name };
+        if (defaultExport.flags & 2097152 /* Alias */) {
+            var aliased = checker.getImmediateAliasedSymbol(defaultExport);
+            if (aliased && aliased.parent) {
+                // - `aliased` will be undefined if the module is exporting an unresolvable name,
+                //    but we can still offer completions for it.
+                // - `aliased.parent` will be undefined if the module is exporting `globalThis.something`,
+                //    or another expression that resolves to a global.
+                return getDefaultExportInfoWorker(aliased, checker, compilerOptions);
+            }
+        }
+        if (defaultExport.escapedName !== "default" /* Default */ &&
+            defaultExport.escapedName !== "export=" /* ExportEquals */) {
+            return { symbolForMeaning: defaultExport, name: defaultExport.getName() };
+        }
+        return { symbolForMeaning: defaultExport, name: ts.getNameForExportedSymbol(defaultExport, compilerOptions.target) };
+    }
+    function getNameForExportDefault(symbol) {
+        return symbol.declarations && ts.firstDefined(symbol.declarations, function (declaration) {
+            var _a;
+            if (ts.isExportAssignment(declaration)) {
+                return (_a = ts.tryCast(ts.skipOuterExpressions(declaration.expression), ts.isIdentifier)) === null || _a === void 0 ? void 0 : _a.text;
+            }
+            else if (ts.isExportSpecifier(declaration)) {
+                ts.Debug.assert(declaration.name.text === "default" /* Default */, "Expected the specifier to be a default export");
+                return declaration.propertyName && declaration.propertyName.text;
+            }
+        });
+    }
 })(ts || (ts = {}));
 var ts;
 (function (ts) {
@@ -121807,13 +124480,13 @@
             function handleToken() {
                 switch (token) {
                     case 43 /* SlashToken */:
-                    case 67 /* SlashEqualsToken */:
+                    case 68 /* SlashEqualsToken */:
                         if (!noRegexTable[lastNonTriviaToken] && scanner.reScanSlashToken() === 13 /* RegularExpressionLiteral */) {
                             token = 13 /* RegularExpressionLiteral */;
                         }
                         break;
                     case 29 /* LessThanToken */:
-                        if (lastNonTriviaToken === 78 /* Identifier */) {
+                        if (lastNonTriviaToken === 79 /* Identifier */) {
                             // Could be the start of something generic.  Keep track of that by bumping
                             // up the current count of generic contexts we may be in.
                             angleBracketStack++;
@@ -121826,16 +124499,16 @@
                             angleBracketStack--;
                         }
                         break;
-                    case 128 /* AnyKeyword */:
-                    case 147 /* StringKeyword */:
-                    case 144 /* NumberKeyword */:
-                    case 131 /* BooleanKeyword */:
-                    case 148 /* SymbolKeyword */:
+                    case 129 /* AnyKeyword */:
+                    case 148 /* StringKeyword */:
+                    case 145 /* NumberKeyword */:
+                    case 132 /* BooleanKeyword */:
+                    case 149 /* SymbolKeyword */:
                         if (angleBracketStack > 0 && !syntacticClassifierAbsent) {
                             // If it looks like we're could be in something generic, don't classify this
                             // as a keyword.  We may just get overwritten by the syntactic classifier,
                             // causing a noisy experience for the user.
-                            token = 78 /* Identifier */;
+                            token = 79 /* Identifier */;
                         }
                         break;
                     case 15 /* TemplateHead */:
@@ -121874,14 +124547,14 @@
                             break;
                         }
                         if (lastNonTriviaToken === 24 /* DotToken */) {
-                            token = 78 /* Identifier */;
+                            token = 79 /* Identifier */;
                         }
                         else if (ts.isKeyword(lastNonTriviaToken) && ts.isKeyword(token) && !canFollow(lastNonTriviaToken, token)) {
                             // We have two keywords in a row.  Only treat the second as a keyword if
                             // it's a sequence that could legally occur in the language.  Otherwise
                             // treat it as an identifier.  This way, if someone writes "private var"
                             // we recognize that 'var' is actually an identifier here.
-                            token = 78 /* Identifier */;
+                            token = 79 /* Identifier */;
                         }
                 }
             }
@@ -121895,19 +124568,19 @@
     /// we have a series of divide operator. this list allows us to be more accurate by ruling out
     /// locations where a regexp cannot exist.
     var noRegexTable = ts.arrayToNumericMap([
-        78 /* Identifier */,
+        79 /* Identifier */,
         10 /* StringLiteral */,
         8 /* NumericLiteral */,
         9 /* BigIntLiteral */,
         13 /* RegularExpressionLiteral */,
-        107 /* ThisKeyword */,
+        108 /* ThisKeyword */,
         45 /* PlusPlusToken */,
         46 /* MinusMinusToken */,
         21 /* CloseParenToken */,
         23 /* CloseBracketToken */,
         19 /* CloseBraceToken */,
-        109 /* TrueKeyword */,
-        94 /* FalseKeyword */,
+        110 /* TrueKeyword */,
+        95 /* FalseKeyword */,
     ], function (token) { return token; }, function () { return true; });
     function getNewEndOfLineState(scanner, token, lastOnTemplateStack) {
         switch (token) {
@@ -122019,10 +124692,10 @@
             return true;
         }
         switch (keyword2) {
-            case 134 /* GetKeyword */:
-            case 146 /* SetKeyword */:
-            case 132 /* ConstructorKeyword */:
-            case 123 /* StaticKeyword */:
+            case 135 /* GetKeyword */:
+            case 147 /* SetKeyword */:
+            case 133 /* ConstructorKeyword */:
+            case 124 /* StaticKeyword */:
                 return true; // Allow things like "public get", "public constructor" and "public static".
             default:
                 return false; // Any other keyword following "public" is actually an identifier, not a real keyword.
@@ -122067,9 +124740,9 @@
             case 31 /* GreaterThanToken */:
             case 32 /* LessThanEqualsToken */:
             case 33 /* GreaterThanEqualsToken */:
-            case 101 /* InstanceOfKeyword */:
-            case 100 /* InKeyword */:
-            case 126 /* AsKeyword */:
+            case 102 /* InstanceOfKeyword */:
+            case 101 /* InKeyword */:
+            case 127 /* AsKeyword */:
             case 34 /* EqualsEqualsToken */:
             case 35 /* ExclamationEqualsToken */:
             case 36 /* EqualsEqualsEqualsToken */:
@@ -122079,23 +124752,23 @@
             case 51 /* BarToken */:
             case 55 /* AmpersandAmpersandToken */:
             case 56 /* BarBarToken */:
-            case 73 /* BarEqualsToken */:
-            case 72 /* AmpersandEqualsToken */:
-            case 77 /* CaretEqualsToken */:
-            case 69 /* LessThanLessThanEqualsToken */:
-            case 70 /* GreaterThanGreaterThanEqualsToken */:
-            case 71 /* GreaterThanGreaterThanGreaterThanEqualsToken */:
-            case 63 /* PlusEqualsToken */:
-            case 64 /* MinusEqualsToken */:
-            case 65 /* AsteriskEqualsToken */:
-            case 67 /* SlashEqualsToken */:
-            case 68 /* PercentEqualsToken */:
-            case 62 /* EqualsToken */:
+            case 74 /* BarEqualsToken */:
+            case 73 /* AmpersandEqualsToken */:
+            case 78 /* CaretEqualsToken */:
+            case 70 /* LessThanLessThanEqualsToken */:
+            case 71 /* GreaterThanGreaterThanEqualsToken */:
+            case 72 /* GreaterThanGreaterThanGreaterThanEqualsToken */:
+            case 64 /* PlusEqualsToken */:
+            case 65 /* MinusEqualsToken */:
+            case 66 /* AsteriskEqualsToken */:
+            case 68 /* SlashEqualsToken */:
+            case 69 /* PercentEqualsToken */:
+            case 63 /* EqualsToken */:
             case 27 /* CommaToken */:
             case 60 /* QuestionQuestionToken */:
-            case 74 /* BarBarEqualsToken */:
-            case 75 /* AmpersandAmpersandEqualsToken */:
-            case 76 /* QuestionQuestionEqualsToken */:
+            case 75 /* BarBarEqualsToken */:
+            case 76 /* AmpersandAmpersandEqualsToken */:
+            case 77 /* QuestionQuestionEqualsToken */:
                 return true;
             default:
                 return false;
@@ -122121,7 +124794,7 @@
         else if (isBinaryExpressionOperatorToken(token) || isPrefixUnaryExpressionOperatorToken(token)) {
             return 5 /* operator */;
         }
-        else if (token >= 18 /* FirstPunctuation */ && token <= 77 /* LastPunctuation */) {
+        else if (token >= 18 /* FirstPunctuation */ && token <= 78 /* LastPunctuation */) {
             return 10 /* punctuation */;
         }
         switch (token) {
@@ -122140,7 +124813,7 @@
             case 5 /* WhitespaceTrivia */:
             case 4 /* NewLineTrivia */:
                 return 8 /* whiteSpace */;
-            case 78 /* Identifier */:
+            case 79 /* Identifier */:
             default:
                 if (ts.isTemplateLiteralKind(token)) {
                     return 6 /* stringLiteral */;
@@ -122165,13 +124838,13 @@
         // That means we're calling back into the host around every 1.2k of the file we process.
         // Lib.d.ts has similar numbers.
         switch (kind) {
-            case 257 /* ModuleDeclaration */:
-            case 253 /* ClassDeclaration */:
-            case 254 /* InterfaceDeclaration */:
-            case 252 /* FunctionDeclaration */:
-            case 222 /* ClassExpression */:
-            case 209 /* FunctionExpression */:
-            case 210 /* ArrowFunction */:
+            case 259 /* ModuleDeclaration */:
+            case 255 /* ClassDeclaration */:
+            case 256 /* InterfaceDeclaration */:
+            case 254 /* FunctionDeclaration */:
+            case 224 /* ClassExpression */:
+            case 211 /* FunctionExpression */:
+            case 212 /* ArrowFunction */:
                 cancellationToken.throwIfCancellationRequested();
         }
     }
@@ -122393,46 +125066,46 @@
                     pos = tag.tagName.end;
                     var commentStart = tag.tagName.end;
                     switch (tag.kind) {
-                        case 330 /* JSDocParameterTag */:
+                        case 335 /* JSDocParameterTag */:
                             var param = tag;
                             processJSDocParameterTag(param);
                             commentStart = param.isNameFirst && ((_a = param.typeExpression) === null || _a === void 0 ? void 0 : _a.end) || param.name.end;
                             break;
-                        case 337 /* JSDocPropertyTag */:
+                        case 342 /* JSDocPropertyTag */:
                             var prop = tag;
                             commentStart = prop.isNameFirst && ((_b = prop.typeExpression) === null || _b === void 0 ? void 0 : _b.end) || prop.name.end;
                             break;
-                        case 334 /* JSDocTemplateTag */:
+                        case 339 /* JSDocTemplateTag */:
                             processJSDocTemplateTag(tag);
                             pos = tag.end;
                             commentStart = tag.typeParameters.end;
                             break;
-                        case 335 /* JSDocTypedefTag */:
+                        case 340 /* JSDocTypedefTag */:
                             var type = tag;
-                            commentStart = ((_c = type.typeExpression) === null || _c === void 0 ? void 0 : _c.kind) === 302 /* JSDocTypeExpression */ && ((_d = type.fullName) === null || _d === void 0 ? void 0 : _d.end) || ((_e = type.typeExpression) === null || _e === void 0 ? void 0 : _e.end) || commentStart;
+                            commentStart = ((_c = type.typeExpression) === null || _c === void 0 ? void 0 : _c.kind) === 304 /* JSDocTypeExpression */ && ((_d = type.fullName) === null || _d === void 0 ? void 0 : _d.end) || ((_e = type.typeExpression) === null || _e === void 0 ? void 0 : _e.end) || commentStart;
                             break;
-                        case 328 /* JSDocCallbackTag */:
+                        case 333 /* JSDocCallbackTag */:
                             commentStart = tag.typeExpression.end;
                             break;
-                        case 333 /* JSDocTypeTag */:
+                        case 338 /* JSDocTypeTag */:
                             processElement(tag.typeExpression);
                             pos = tag.end;
                             commentStart = tag.typeExpression.end;
                             break;
-                        case 332 /* JSDocThisTag */:
-                        case 329 /* JSDocEnumTag */:
+                        case 337 /* JSDocThisTag */:
+                        case 334 /* JSDocEnumTag */:
                             commentStart = tag.typeExpression.end;
                             break;
-                        case 331 /* JSDocReturnTag */:
+                        case 336 /* JSDocReturnTag */:
                             processElement(tag.typeExpression);
                             pos = tag.end;
                             commentStart = ((_f = tag.typeExpression) === null || _f === void 0 ? void 0 : _f.end) || commentStart;
                             break;
-                        case 336 /* JSDocSeeTag */:
+                        case 341 /* JSDocSeeTag */:
                             commentStart = ((_g = tag.name) === null || _g === void 0 ? void 0 : _g.end) || commentStart;
                             break;
-                        case 318 /* JSDocAugmentsTag */:
-                        case 319 /* JSDocImplementsTag */:
+                        case 323 /* JSDocAugmentsTag */:
+                        case 324 /* JSDocImplementsTag */:
                             commentStart = tag.class.end;
                             break;
                     }
@@ -122468,7 +125141,8 @@
         }
         function tryClassifyTripleSlashComment(start, width) {
             var tripleSlashXMLCommentRegEx = /^(\/\/\/\s*)(<)(?:(\S+)((?:[^/]|\/[^>])*)(\/>)?)?/im;
-            var attributeRegex = /(\S+)(\s*)(=)(\s*)('[^']+'|"[^"]+")/img;
+            // Require a leading whitespace character (the parser already does) to prevent terrible backtracking performance
+            var attributeRegex = /(\s)(\S+)(\s*)(=)(\s*)('[^']+'|"[^"]+")/img;
             var text = sourceFile.text.substr(start, width);
             var match = tripleSlashXMLCommentRegEx.exec(text);
             if (!match) {
@@ -122496,25 +125170,25 @@
                 if (!attrMatch) {
                     break;
                 }
-                var newAttrPos = pos + attrMatch.index;
+                var newAttrPos = pos + attrMatch.index + attrMatch[1].length; // whitespace
                 if (newAttrPos > attrPos) {
                     pushCommentRange(attrPos, newAttrPos - attrPos);
                     attrPos = newAttrPos;
                 }
-                pushClassification(attrPos, attrMatch[1].length, 22 /* jsxAttribute */); // attribute name
-                attrPos += attrMatch[1].length;
-                if (attrMatch[2].length) {
-                    pushCommentRange(attrPos, attrMatch[2].length); // whitespace
-                    attrPos += attrMatch[2].length;
+                pushClassification(attrPos, attrMatch[2].length, 22 /* jsxAttribute */); // attribute name
+                attrPos += attrMatch[2].length;
+                if (attrMatch[3].length) {
+                    pushCommentRange(attrPos, attrMatch[3].length); // whitespace
+                    attrPos += attrMatch[3].length;
                 }
-                pushClassification(attrPos, attrMatch[3].length, 5 /* operator */); // =
-                attrPos += attrMatch[3].length;
-                if (attrMatch[4].length) {
-                    pushCommentRange(attrPos, attrMatch[4].length); // whitespace
-                    attrPos += attrMatch[4].length;
+                pushClassification(attrPos, attrMatch[4].length, 5 /* operator */); // =
+                attrPos += attrMatch[4].length;
+                if (attrMatch[5].length) {
+                    pushCommentRange(attrPos, attrMatch[5].length); // whitespace
+                    attrPos += attrMatch[5].length;
                 }
-                pushClassification(attrPos, attrMatch[5].length, 24 /* jsxAttributeStringLiteralValue */); // attribute value
-                attrPos += attrMatch[5].length;
+                pushClassification(attrPos, attrMatch[6].length, 24 /* jsxAttributeStringLiteralValue */); // attribute value
+                attrPos += attrMatch[6].length;
             }
             pos += match[4].length;
             if (pos > attrPos) {
@@ -122588,22 +125262,22 @@
         }
         function tryClassifyJsxElementName(token) {
             switch (token.parent && token.parent.kind) {
-                case 276 /* JsxOpeningElement */:
+                case 278 /* JsxOpeningElement */:
                     if (token.parent.tagName === token) {
                         return 19 /* jsxOpenTagName */;
                     }
                     break;
-                case 277 /* JsxClosingElement */:
+                case 279 /* JsxClosingElement */:
                     if (token.parent.tagName === token) {
                         return 20 /* jsxCloseTagName */;
                     }
                     break;
-                case 275 /* JsxSelfClosingElement */:
+                case 277 /* JsxSelfClosingElement */:
                     if (token.parent.tagName === token) {
                         return 21 /* jsxSelfClosingTagName */;
                     }
                     break;
-                case 281 /* JsxAttribute */:
+                case 283 /* JsxAttribute */:
                     if (token.parent.name === token) {
                         return 22 /* jsxAttribute */;
                     }
@@ -122630,19 +125304,19 @@
             if (ts.isPunctuation(tokenKind)) {
                 if (token) {
                     var parent = token.parent;
-                    if (tokenKind === 62 /* EqualsToken */) {
+                    if (tokenKind === 63 /* EqualsToken */) {
                         // the '=' in a variable declaration is special cased here.
-                        if (parent.kind === 250 /* VariableDeclaration */ ||
-                            parent.kind === 164 /* PropertyDeclaration */ ||
-                            parent.kind === 161 /* Parameter */ ||
-                            parent.kind === 281 /* JsxAttribute */) {
+                        if (parent.kind === 252 /* VariableDeclaration */ ||
+                            parent.kind === 165 /* PropertyDeclaration */ ||
+                            parent.kind === 162 /* Parameter */ ||
+                            parent.kind === 283 /* JsxAttribute */) {
                             return 5 /* operator */;
                         }
                     }
-                    if (parent.kind === 217 /* BinaryExpression */ ||
-                        parent.kind === 215 /* PrefixUnaryExpression */ ||
-                        parent.kind === 216 /* PostfixUnaryExpression */ ||
-                        parent.kind === 218 /* ConditionalExpression */) {
+                    if (parent.kind === 219 /* BinaryExpression */ ||
+                        parent.kind === 217 /* PrefixUnaryExpression */ ||
+                        parent.kind === 218 /* PostfixUnaryExpression */ ||
+                        parent.kind === 220 /* ConditionalExpression */) {
                         return 5 /* operator */;
                     }
                 }
@@ -122655,7 +125329,7 @@
                 return 25 /* bigintLiteral */;
             }
             else if (tokenKind === 10 /* StringLiteral */) {
-                return token && token.parent.kind === 281 /* JsxAttribute */ ? 24 /* jsxAttributeStringLiteralValue */ : 6 /* stringLiteral */;
+                return token && token.parent.kind === 283 /* JsxAttribute */ ? 24 /* jsxAttributeStringLiteralValue */ : 6 /* stringLiteral */;
             }
             else if (tokenKind === 13 /* RegularExpressionLiteral */) {
                 // TODO: we should get another classification type for these literals.
@@ -122668,35 +125342,35 @@
             else if (tokenKind === 11 /* JsxText */) {
                 return 23 /* jsxText */;
             }
-            else if (tokenKind === 78 /* Identifier */) {
+            else if (tokenKind === 79 /* Identifier */) {
                 if (token) {
                     switch (token.parent.kind) {
-                        case 253 /* ClassDeclaration */:
+                        case 255 /* ClassDeclaration */:
                             if (token.parent.name === token) {
                                 return 11 /* className */;
                             }
                             return;
-                        case 160 /* TypeParameter */:
+                        case 161 /* TypeParameter */:
                             if (token.parent.name === token) {
                                 return 15 /* typeParameterName */;
                             }
                             return;
-                        case 254 /* InterfaceDeclaration */:
+                        case 256 /* InterfaceDeclaration */:
                             if (token.parent.name === token) {
                                 return 13 /* interfaceName */;
                             }
                             return;
-                        case 256 /* EnumDeclaration */:
+                        case 258 /* EnumDeclaration */:
                             if (token.parent.name === token) {
                                 return 12 /* enumName */;
                             }
                             return;
-                        case 257 /* ModuleDeclaration */:
+                        case 259 /* ModuleDeclaration */:
                             if (token.parent.name === token) {
                                 return 14 /* moduleName */;
                             }
                             return;
-                        case 161 /* Parameter */:
+                        case 162 /* Parameter */:
                             if (token.parent.name === token) {
                                 return ts.isThisIdentifier(token) ? 3 /* keyword */ : 17 /* parameterName */;
                             }
@@ -122798,13 +125472,13 @@
                 var inJSXElement = false;
                 function visit(node) {
                     switch (node.kind) {
-                        case 257 /* ModuleDeclaration */:
-                        case 253 /* ClassDeclaration */:
-                        case 254 /* InterfaceDeclaration */:
-                        case 252 /* FunctionDeclaration */:
-                        case 222 /* ClassExpression */:
-                        case 209 /* FunctionExpression */:
-                        case 210 /* ArrowFunction */:
+                        case 259 /* ModuleDeclaration */:
+                        case 255 /* ClassDeclaration */:
+                        case 256 /* InterfaceDeclaration */:
+                        case 254 /* FunctionDeclaration */:
+                        case 224 /* ClassExpression */:
+                        case 211 /* FunctionExpression */:
+                        case 212 /* ArrowFunction */:
                             cancellationToken.throwIfCancellationRequested();
                     }
                     if (!node || !ts.textSpanIntersectsWith(span, node.pos, node.getFullWidth()) || node.getFullWidth() === 0) {
@@ -122817,7 +125491,7 @@
                     if (ts.isJsxExpression(node)) {
                         inJSXElement = false;
                     }
-                    if (ts.isIdentifier(node) && !inJSXElement && !inImportClause(node)) {
+                    if (ts.isIdentifier(node) && !inJSXElement && !inImportClause(node) && !ts.isInfinityOrNaNString(node.escapedText)) {
                         var symbol = typeChecker.getSymbolAtLocation(node);
                         if (symbol) {
                             if (symbol.flags & 2097152 /* Alias */) {
@@ -122950,25 +125624,25 @@
                 return (ts.isQualifiedName(node.parent) && node.parent.right === node) || (ts.isPropertyAccessExpression(node.parent) && node.parent.name === node);
             }
             var tokenFromDeclarationMapping = new ts.Map([
-                [250 /* VariableDeclaration */, 7 /* variable */],
-                [161 /* Parameter */, 6 /* parameter */],
-                [164 /* PropertyDeclaration */, 9 /* property */],
-                [257 /* ModuleDeclaration */, 3 /* namespace */],
-                [256 /* EnumDeclaration */, 1 /* enum */],
-                [292 /* EnumMember */, 8 /* enumMember */],
-                [253 /* ClassDeclaration */, 0 /* class */],
-                [166 /* MethodDeclaration */, 11 /* member */],
-                [252 /* FunctionDeclaration */, 10 /* function */],
-                [209 /* FunctionExpression */, 10 /* function */],
-                [165 /* MethodSignature */, 11 /* member */],
-                [168 /* GetAccessor */, 9 /* property */],
-                [169 /* SetAccessor */, 9 /* property */],
-                [163 /* PropertySignature */, 9 /* property */],
-                [254 /* InterfaceDeclaration */, 2 /* interface */],
-                [255 /* TypeAliasDeclaration */, 5 /* type */],
-                [160 /* TypeParameter */, 4 /* typeParameter */],
-                [289 /* PropertyAssignment */, 9 /* property */],
-                [290 /* ShorthandPropertyAssignment */, 9 /* property */]
+                [252 /* VariableDeclaration */, 7 /* variable */],
+                [162 /* Parameter */, 6 /* parameter */],
+                [165 /* PropertyDeclaration */, 9 /* property */],
+                [259 /* ModuleDeclaration */, 3 /* namespace */],
+                [258 /* EnumDeclaration */, 1 /* enum */],
+                [294 /* EnumMember */, 8 /* enumMember */],
+                [255 /* ClassDeclaration */, 0 /* class */],
+                [167 /* MethodDeclaration */, 11 /* member */],
+                [254 /* FunctionDeclaration */, 10 /* function */],
+                [211 /* FunctionExpression */, 10 /* function */],
+                [166 /* MethodSignature */, 11 /* member */],
+                [170 /* GetAccessor */, 9 /* property */],
+                [171 /* SetAccessor */, 9 /* property */],
+                [164 /* PropertySignature */, 9 /* property */],
+                [256 /* InterfaceDeclaration */, 2 /* interface */],
+                [257 /* TypeAliasDeclaration */, 5 /* type */],
+                [161 /* TypeParameter */, 4 /* typeParameter */],
+                [291 /* PropertyAssignment */, 9 /* property */],
+                [292 /* ShorthandPropertyAssignment */, 9 /* property */]
             ]);
         })(v2020 = classifier.v2020 || (classifier.v2020 = {}));
     })(classifier = ts.classifier || (ts.classifier = {}));
@@ -123075,10 +125749,10 @@
             function getStringLiteralCompletionEntries(sourceFile, node, position, typeChecker, compilerOptions, host, preferences) {
                 var parent = walkUpParentheses(node.parent);
                 switch (parent.kind) {
-                    case 192 /* LiteralType */: {
+                    case 194 /* LiteralType */: {
                         var grandParent = walkUpParentheses(parent.parent);
                         switch (grandParent.kind) {
-                            case 174 /* TypeReference */: {
+                            case 176 /* TypeReference */: {
                                 var typeReference_1 = grandParent;
                                 var typeArgument = ts.findAncestor(parent, function (n) { return n.parent === typeReference_1; });
                                 if (typeArgument) {
@@ -123086,7 +125760,7 @@
                                 }
                                 return undefined;
                             }
-                            case 190 /* IndexedAccessType */:
+                            case 192 /* IndexedAccessType */:
                                 // Get all apparent property names
                                 // i.e. interface Foo {
                                 //          foo: string;
@@ -123098,9 +125772,9 @@
                                     return undefined;
                                 }
                                 return stringLiteralCompletionsFromProperties(typeChecker.getTypeFromTypeNode(objectType));
-                            case 196 /* ImportType */:
+                            case 198 /* ImportType */:
                                 return { kind: 0 /* Paths */, paths: getStringLiteralCompletionsFromModuleNames(sourceFile, node, compilerOptions, host, typeChecker, preferences) };
-                            case 183 /* UnionType */: {
+                            case 185 /* UnionType */: {
                                 if (!ts.isTypeReferenceNode(grandParent.parent)) {
                                     return undefined;
                                 }
@@ -123112,7 +125786,7 @@
                                 return undefined;
                         }
                     }
-                    case 289 /* PropertyAssignment */:
+                    case 291 /* PropertyAssignment */:
                         if (ts.isObjectLiteralExpression(parent.parent) && parent.name === node) {
                             // Get quoted name of properties of the object literal expression
                             // i.e. interface ConfigFiles {
@@ -123129,7 +125803,7 @@
                             return stringLiteralCompletionsForObjectLiteral(typeChecker, parent.parent);
                         }
                         return fromContextualType();
-                    case 203 /* ElementAccessExpression */: {
+                    case 205 /* ElementAccessExpression */: {
                         var _b = parent, expression = _b.expression, argumentExpression = _b.argumentExpression;
                         if (node === ts.skipParentheses(argumentExpression)) {
                             // Get all names of properties on the expression
@@ -123142,19 +125816,19 @@
                         }
                         return undefined;
                     }
-                    case 204 /* CallExpression */:
-                    case 205 /* NewExpression */:
-                        if (!ts.isRequireCall(parent, /*checkArgumentIsStringLiteralLike*/ false) && !ts.isImportCall(parent)) {
+                    case 206 /* CallExpression */:
+                    case 207 /* NewExpression */:
+                        if (!isRequireCallArgument(node) && !ts.isImportCall(parent)) {
                             var argumentInfo = ts.SignatureHelp.getArgumentInfoForCompletions(node, position, sourceFile);
                             // Get string literal completions from specialized signatures of the target
                             // i.e. declare function f(a: 'A');
                             // f("/*completion position*/")
                             return argumentInfo ? getStringLiteralCompletionsFromSignature(argumentInfo, typeChecker) : fromContextualType();
                         }
-                    // falls through (is `require("")` or `import("")`)
-                    case 262 /* ImportDeclaration */:
-                    case 268 /* ExportDeclaration */:
-                    case 273 /* ExternalModuleReference */:
+                    // falls through (is `require("")` or `require(""` or `import("")`)
+                    case 264 /* ImportDeclaration */:
+                    case 270 /* ExportDeclaration */:
+                    case 275 /* ExternalModuleReference */:
                         // Get all known external module names or complete a path to a module
                         // i.e. import * as ns from "/*completion position*/";
                         //      var y = import("/*completion position*/");
@@ -123173,9 +125847,9 @@
             }
             function walkUpParentheses(node) {
                 switch (node.kind) {
-                    case 187 /* ParenthesizedType */:
+                    case 189 /* ParenthesizedType */:
                         return ts.walkUpParenthesizedTypes(node);
-                    case 208 /* ParenthesizedExpression */:
+                    case 210 /* ParenthesizedExpression */:
                         return ts.walkUpParenthesizedExpressions(node);
                     default:
                         return node;
@@ -123252,12 +125926,13 @@
                     ? getCompletionEntriesForRelativeModules(literalValue, scriptDirectory, compilerOptions, host, scriptPath, preferences)
                     : getCompletionEntriesForNonRelativeModules(literalValue, scriptDirectory, compilerOptions, host, typeChecker);
             }
-            function getExtensionOptions(compilerOptions, includeExtensions) {
-                if (includeExtensions === void 0) { includeExtensions = false; }
-                return { extensions: getSupportedExtensionsForModuleResolution(compilerOptions), includeExtensions: includeExtensions };
+            function getExtensionOptions(compilerOptions, includeExtensionsOption) {
+                if (includeExtensionsOption === void 0) { includeExtensionsOption = 0 /* Exclude */; }
+                return { extensions: getSupportedExtensionsForModuleResolution(compilerOptions), includeExtensionsOption: includeExtensionsOption };
             }
             function getCompletionEntriesForRelativeModules(literalValue, scriptDirectory, compilerOptions, host, scriptPath, preferences) {
-                var extensionOptions = getExtensionOptions(compilerOptions, preferences.importModuleSpecifierEnding === "js");
+                var includeExtensions = preferences.importModuleSpecifierEnding === "js" ? 2 /* ModuleSpecifierCompletion */ : 0 /* Exclude */;
+                var extensionOptions = getExtensionOptions(compilerOptions, includeExtensions);
                 if (compilerOptions.rootDirs) {
                     return getCompletionEntriesForDirectoryFragmentWithRootDirs(compilerOptions.rootDirs, literalValue, scriptDirectory, extensionOptions, compilerOptions, host, scriptPath);
                 }
@@ -123283,7 +125958,7 @@
                     return ts.containsPath(rootDirectory, scriptDirectory, basePath, ignoreCase) ? scriptDirectory.substr(rootDirectory.length) : undefined;
                 }); // TODO: GH#18217
                 // Now find a path for each potential directory that is to be merged with the one containing the script
-                return ts.deduplicate(__spreadArray(__spreadArray([], rootDirs.map(function (rootDirectory) { return ts.combinePaths(rootDirectory, relativeDirectory); })), [scriptDirectory]), ts.equateStringsCaseSensitive, ts.compareStringsCaseSensitive);
+                return ts.deduplicate(__spreadArray(__spreadArray([], rootDirs.map(function (rootDirectory) { return ts.combinePaths(rootDirectory, relativeDirectory); }), true), [scriptDirectory], false), ts.equateStringsCaseSensitive, ts.compareStringsCaseSensitive);
             }
             function getCompletionEntriesForDirectoryFragmentWithRootDirs(rootDirs, fragment, scriptDirectory, extensionOptions, compilerOptions, host, exclude) {
                 var basePath = compilerOptions.project || host.getCurrentDirectory();
@@ -123291,11 +125966,17 @@
                 var baseDirectories = getBaseDirectoriesFromRootDirs(rootDirs, basePath, scriptDirectory, ignoreCase);
                 return ts.flatMap(baseDirectories, function (baseDirectory) { return getCompletionEntriesForDirectoryFragment(fragment, baseDirectory, extensionOptions, host, exclude); });
             }
+            var IncludeExtensionsOption;
+            (function (IncludeExtensionsOption) {
+                IncludeExtensionsOption[IncludeExtensionsOption["Exclude"] = 0] = "Exclude";
+                IncludeExtensionsOption[IncludeExtensionsOption["Include"] = 1] = "Include";
+                IncludeExtensionsOption[IncludeExtensionsOption["ModuleSpecifierCompletion"] = 2] = "ModuleSpecifierCompletion";
+            })(IncludeExtensionsOption || (IncludeExtensionsOption = {}));
             /**
              * Given a path ending at a directory, gets the completions for the path, and filters for those entries containing the basename.
              */
             function getCompletionEntriesForDirectoryFragment(fragment, scriptPath, _a, host, exclude, result) {
-                var extensions = _a.extensions, includeExtensions = _a.includeExtensions;
+                var extensions = _a.extensions, includeExtensionsOption = _a.includeExtensionsOption;
                 if (result === void 0) { result = []; }
                 if (fragment === undefined) {
                     fragment = "";
@@ -123323,7 +126004,7 @@
                 if (files) {
                     /**
                      * Multiple file entries might map to the same truncated name once we remove extensions
-                     * (happens iff includeExtensions === false)so we use a set-like data structure. Eg:
+                     * (happens iff includeExtensionsOption === includeExtensionsOption.Exclude) so we use a set-like data structure. Eg:
                      *
                      * both foo.ts and foo.tsx become foo
                      */
@@ -123334,8 +126015,20 @@
                         if (exclude && ts.comparePaths(filePath, exclude, scriptPath, ignoreCase) === 0 /* EqualTo */) {
                             continue;
                         }
-                        var foundFileName = includeExtensions || ts.fileExtensionIs(filePath, ".json" /* Json */) ? ts.getBaseFileName(filePath) : ts.removeFileExtension(ts.getBaseFileName(filePath));
-                        foundFiles.set(foundFileName, ts.tryGetExtensionFromPath(filePath));
+                        var foundFileName = void 0;
+                        var outputExtension = ts.moduleSpecifiers.tryGetJSExtensionForFile(filePath, host.getCompilationSettings());
+                        if (includeExtensionsOption === 0 /* Exclude */ && !ts.fileExtensionIs(filePath, ".json" /* Json */)) {
+                            foundFileName = ts.removeFileExtension(ts.getBaseFileName(filePath));
+                            foundFiles.set(foundFileName, ts.tryGetExtensionFromPath(filePath));
+                        }
+                        else if (includeExtensionsOption === 2 /* ModuleSpecifierCompletion */ && outputExtension) {
+                            foundFileName = ts.changeExtension(ts.getBaseFileName(filePath), outputExtension);
+                            foundFiles.set(foundFileName, outputExtension);
+                        }
+                        else {
+                            foundFileName = ts.getBaseFileName(filePath);
+                            foundFiles.set(foundFileName, ts.tryGetExtensionFromPath(filePath));
+                        }
                     }
                     foundFiles.forEach(function (ext, foundFile) {
                         result.push(nameAndKind(foundFile, "script" /* scriptElement */, ext));
@@ -123460,8 +126153,8 @@
                 if (!host.readDirectory) {
                     return undefined;
                 }
-                var parsed = ts.hasZeroOrOneAsteriskCharacter(pattern) ? ts.tryParsePattern(pattern) : undefined;
-                if (!parsed) {
+                var parsed = ts.tryParsePattern(pattern);
+                if (parsed === undefined || ts.isString(parsed)) {
                     return undefined;
                 }
                 // The prefix has two effective parts: the directory path and the base component after the filepath that is not a
@@ -123490,7 +126183,7 @@
                     var name = trimPrefixAndSuffix(dir);
                     return name === undefined ? undefined : directoryResult(name);
                 });
-                return __spreadArray(__spreadArray([], matches), directories);
+                return __spreadArray(__spreadArray([], matches, true), directories, true);
                 function trimPrefixAndSuffix(path) {
                     var inner = withoutStartAndEnd(ts.normalizePath(path), completePrefix, normalizedSuffix);
                     return inner === undefined ? undefined : removeLeadingDirectorySeparator(inner);
@@ -123529,7 +126222,7 @@
                 }
                 var prefix = match[1], kind = match[2], toComplete = match[3];
                 var scriptPath = ts.getDirectoryPath(sourceFile.path);
-                var names = kind === "path" ? getCompletionEntriesForDirectoryFragment(toComplete, scriptPath, getExtensionOptions(compilerOptions, /*includeExtensions*/ true), host, sourceFile.path)
+                var names = kind === "path" ? getCompletionEntriesForDirectoryFragment(toComplete, scriptPath, getExtensionOptions(compilerOptions, 1 /* Include */), host, sourceFile.path)
                     : kind === "types" ? getCompletionEntriesFromTypings(host, compilerOptions, scriptPath, getFragmentDirectory(toComplete), getExtensionOptions(compilerOptions))
                         : ts.Debug.fail();
                 return addReplacementSpans(toComplete, range.pos + prefix.length, names);
@@ -123630,6 +126323,15 @@
             function containsSlash(fragment) {
                 return ts.stringContains(fragment, ts.directorySeparator);
             }
+            /**
+             * Matches
+             *   require(""
+             *   require("")
+             */
+            function isRequireCallArgument(node) {
+                return ts.isCallExpression(node.parent) && ts.firstOrUndefined(node.parent.arguments) === node
+                    && ts.isIdentifier(node.parent.expression) && node.parent.expression.escapedText === "require";
+            }
         })(StringCompletions = Completions.StringCompletions || (Completions.StringCompletions = {}));
     })(Completions = ts.Completions || (ts.Completions = {}));
 })(ts || (ts = {}));
@@ -123638,17 +126340,45 @@
 (function (ts) {
     var Completions;
     (function (Completions) {
+        // Exported only for tests
+        Completions.moduleSpecifierResolutionLimit = 100;
+        Completions.moduleSpecifierResolutionCacheAttemptLimit = 1000;
+        // NOTE: Make sure that each entry has the exact same number of digits
+        //       since many implementations will sort by string contents,
+        //       where "10" is considered less than "2".
         var SortText;
         (function (SortText) {
-            SortText["LocalDeclarationPriority"] = "0";
-            SortText["LocationPriority"] = "1";
-            SortText["OptionalMember"] = "2";
-            SortText["MemberDeclaredBySpreadAssignment"] = "3";
-            SortText["SuggestedClassMembers"] = "4";
-            SortText["GlobalsOrKeywords"] = "5";
-            SortText["AutoImportSuggestions"] = "6";
-            SortText["JavascriptIdentifiers"] = "7";
+            SortText["LocalDeclarationPriority"] = "10";
+            SortText["LocationPriority"] = "11";
+            SortText["OptionalMember"] = "12";
+            SortText["MemberDeclaredBySpreadAssignment"] = "13";
+            SortText["SuggestedClassMembers"] = "14";
+            SortText["GlobalsOrKeywords"] = "15";
+            SortText["AutoImportSuggestions"] = "16";
+            SortText["JavascriptIdentifiers"] = "17";
+            SortText["DeprecatedLocalDeclarationPriority"] = "18";
+            SortText["DeprecatedLocationPriority"] = "19";
+            SortText["DeprecatedOptionalMember"] = "20";
+            SortText["DeprecatedMemberDeclaredBySpreadAssignment"] = "21";
+            SortText["DeprecatedSuggestedClassMembers"] = "22";
+            SortText["DeprecatedGlobalsOrKeywords"] = "23";
+            SortText["DeprecatedAutoImportSuggestions"] = "24";
         })(SortText = Completions.SortText || (Completions.SortText = {}));
+        var SortTextId;
+        (function (SortTextId) {
+            SortTextId[SortTextId["LocalDeclarationPriority"] = 10] = "LocalDeclarationPriority";
+            SortTextId[SortTextId["LocationPriority"] = 11] = "LocationPriority";
+            SortTextId[SortTextId["OptionalMember"] = 12] = "OptionalMember";
+            SortTextId[SortTextId["MemberDeclaredBySpreadAssignment"] = 13] = "MemberDeclaredBySpreadAssignment";
+            SortTextId[SortTextId["SuggestedClassMembers"] = 14] = "SuggestedClassMembers";
+            SortTextId[SortTextId["GlobalsOrKeywords"] = 15] = "GlobalsOrKeywords";
+            SortTextId[SortTextId["AutoImportSuggestions"] = 16] = "AutoImportSuggestions";
+            // Don't use these directly.
+            SortTextId[SortTextId["_JavaScriptIdentifiers"] = 17] = "_JavaScriptIdentifiers";
+            SortTextId[SortTextId["_DeprecatedStart"] = 18] = "_DeprecatedStart";
+            SortTextId[SortTextId["_First"] = 10] = "_First";
+            SortTextId[SortTextId["DeprecatedOffset"] = 8] = "DeprecatedOffset";
+        })(SortTextId || (SortTextId = {}));
         /**
          * Special values for `CompletionInfo['source']` used to disambiguate
          * completion items with the same `name`. (Each completion item must
@@ -123718,11 +126448,48 @@
             GlobalsSearch[GlobalsSearch["Success"] = 1] = "Success";
             GlobalsSearch[GlobalsSearch["Fail"] = 2] = "Fail";
         })(GlobalsSearch || (GlobalsSearch = {}));
-        function getCompletionsAtPosition(host, program, log, sourceFile, position, preferences, triggerCharacter) {
-            var typeChecker = program.getTypeChecker();
-            var compilerOptions = program.getCompilerOptions();
-            var contextToken = ts.findPrecedingToken(position, sourceFile);
-            if (triggerCharacter && !ts.isInString(sourceFile, position, contextToken) && !isValidTrigger(sourceFile, triggerCharacter, contextToken, position)) {
+        function resolvingModuleSpecifiers(logPrefix, host, program, sourceFile, preferences, isForImportStatementCompletion, cb) {
+            var _a, _b, _c;
+            var start = ts.timestamp();
+            var resolutionLimitExceeded = false;
+            var ambientCount = 0;
+            var resolvedCount = 0;
+            var resolvedFromCacheCount = 0;
+            var cacheAttemptCount = 0;
+            var result = cb({ tryResolve: tryResolve, resolutionLimitExceeded: function () { return resolutionLimitExceeded; } });
+            var hitRateMessage = cacheAttemptCount ? " (" + (resolvedFromCacheCount / cacheAttemptCount * 100).toFixed(1) + "% hit rate)" : "";
+            (_a = host.log) === null || _a === void 0 ? void 0 : _a.call(host, logPrefix + ": resolved " + resolvedCount + " module specifiers, plus " + ambientCount + " ambient and " + resolvedFromCacheCount + " from cache" + hitRateMessage);
+            (_b = host.log) === null || _b === void 0 ? void 0 : _b.call(host, logPrefix + ": response is " + (resolutionLimitExceeded ? "incomplete" : "complete"));
+            (_c = host.log) === null || _c === void 0 ? void 0 : _c.call(host, logPrefix + ": " + (ts.timestamp() - start));
+            return result;
+            function tryResolve(exportInfo, isFromAmbientModule) {
+                if (isFromAmbientModule) {
+                    var result_1 = ts.codefix.getModuleSpecifierForBestExportInfo(exportInfo, sourceFile, program, host, preferences);
+                    if (result_1) {
+                        ambientCount++;
+                    }
+                    return result_1;
+                }
+                var shouldResolveModuleSpecifier = isForImportStatementCompletion || preferences.allowIncompleteCompletions && resolvedCount < Completions.moduleSpecifierResolutionLimit;
+                var shouldGetModuleSpecifierFromCache = !shouldResolveModuleSpecifier && preferences.allowIncompleteCompletions && cacheAttemptCount < Completions.moduleSpecifierResolutionCacheAttemptLimit;
+                var result = (shouldResolveModuleSpecifier || shouldGetModuleSpecifierFromCache)
+                    ? ts.codefix.getModuleSpecifierForBestExportInfo(exportInfo, sourceFile, program, host, preferences, shouldGetModuleSpecifierFromCache)
+                    : undefined;
+                if (!shouldResolveModuleSpecifier && !shouldGetModuleSpecifierFromCache || shouldGetModuleSpecifierFromCache && !result) {
+                    resolutionLimitExceeded = true;
+                }
+                resolvedCount += (result === null || result === void 0 ? void 0 : result.computedWithoutCacheCount) || 0;
+                resolvedFromCacheCount += exportInfo.length - resolvedCount;
+                if (shouldGetModuleSpecifierFromCache) {
+                    cacheAttemptCount++;
+                }
+                return result;
+            }
+        }
+        function getCompletionsAtPosition(host, program, log, sourceFile, position, preferences, triggerCharacter, completionKind, cancellationToken) {
+            var _a;
+            var previousToken = getRelevantTokens(position, sourceFile).previousToken;
+            if (triggerCharacter && !ts.isInString(sourceFile, position, previousToken) && !isValidTrigger(sourceFile, triggerCharacter, previousToken, position)) {
                 return undefined;
             }
             if (triggerCharacter === " ") {
@@ -123732,21 +126499,39 @@
                 }
                 return undefined;
             }
-            var stringCompletions = Completions.StringCompletions.getStringLiteralCompletions(sourceFile, position, contextToken, typeChecker, compilerOptions, host, log, preferences);
+            // If the request is a continuation of an earlier `isIncomplete` response,
+            // we can continue it from the cached previous response.
+            var typeChecker = program.getTypeChecker();
+            var compilerOptions = program.getCompilerOptions();
+            var incompleteCompletionsCache = preferences.allowIncompleteCompletions ? (_a = host.getIncompleteCompletionsCache) === null || _a === void 0 ? void 0 : _a.call(host) : undefined;
+            if (incompleteCompletionsCache && completionKind === 3 /* TriggerForIncompleteCompletions */ && previousToken && ts.isIdentifier(previousToken)) {
+                var incompleteContinuation = continuePreviousIncompleteResponse(incompleteCompletionsCache, sourceFile, previousToken, program, host, preferences, cancellationToken);
+                if (incompleteContinuation) {
+                    return incompleteContinuation;
+                }
+            }
+            else {
+                incompleteCompletionsCache === null || incompleteCompletionsCache === void 0 ? void 0 : incompleteCompletionsCache.clear();
+            }
+            var stringCompletions = Completions.StringCompletions.getStringLiteralCompletions(sourceFile, position, previousToken, typeChecker, compilerOptions, host, log, preferences);
             if (stringCompletions) {
                 return stringCompletions;
             }
-            if (contextToken && ts.isBreakOrContinueStatement(contextToken.parent)
-                && (contextToken.kind === 80 /* BreakKeyword */ || contextToken.kind === 85 /* ContinueKeyword */ || contextToken.kind === 78 /* Identifier */)) {
-                return getLabelCompletionAtPosition(contextToken.parent);
+            if (previousToken && ts.isBreakOrContinueStatement(previousToken.parent)
+                && (previousToken.kind === 81 /* BreakKeyword */ || previousToken.kind === 86 /* ContinueKeyword */ || previousToken.kind === 79 /* Identifier */)) {
+                return getLabelCompletionAtPosition(previousToken.parent);
             }
-            var completionData = getCompletionData(program, log, sourceFile, isUncheckedFile(sourceFile, compilerOptions), position, preferences, /*detailsEntryId*/ undefined, host);
+            var completionData = getCompletionData(program, log, sourceFile, isUncheckedFile(sourceFile, compilerOptions), position, preferences, /*detailsEntryId*/ undefined, host, cancellationToken);
             if (!completionData) {
                 return undefined;
             }
             switch (completionData.kind) {
                 case 0 /* Data */:
-                    return completionInfoFromData(sourceFile, typeChecker, compilerOptions, log, completionData, preferences);
+                    var response = completionInfoFromData(sourceFile, typeChecker, compilerOptions, log, completionData, preferences);
+                    if (response === null || response === void 0 ? void 0 : response.isIncomplete) {
+                        incompleteCompletionsCache === null || incompleteCompletionsCache === void 0 ? void 0 : incompleteCompletionsCache.set(response);
+                    }
+                    return response;
                 case 1 /* JsDocTagName */:
                     // If the current position is a jsDoc tag name, only tag names should be provided for completion
                     return jsdocCompletionInfo(ts.JsDoc.getJSDocTagNameCompletions());
@@ -123762,6 +126547,48 @@
             }
         }
         Completions.getCompletionsAtPosition = getCompletionsAtPosition;
+        function continuePreviousIncompleteResponse(cache, file, location, program, host, preferences, cancellationToken) {
+            var _a;
+            var previousResponse = cache.get();
+            if (!previousResponse)
+                return undefined;
+            var lowerCaseTokenText = location.text.toLowerCase();
+            var exportMap = ts.getExportInfoMap(file, host, program, cancellationToken);
+            var checker = program.getTypeChecker();
+            var autoImportProvider = (_a = host.getPackageJsonAutoImportProvider) === null || _a === void 0 ? void 0 : _a.call(host);
+            var autoImportProviderChecker = autoImportProvider === null || autoImportProvider === void 0 ? void 0 : autoImportProvider.getTypeChecker();
+            var newEntries = resolvingModuleSpecifiers("continuePreviousIncompleteResponse", host, program, file, preferences, 
+            /*isForImportStatementCompletion*/ false, function (context) {
+                var entries = ts.mapDefined(previousResponse.entries, function (entry) {
+                    if (!entry.hasAction || !entry.source || !entry.data || entry.data.moduleSpecifier) {
+                        // Not an auto import or already resolved; keep as is
+                        return entry;
+                    }
+                    if (!charactersFuzzyMatchInString(entry.name, lowerCaseTokenText)) {
+                        // No longer matches typed characters; filter out
+                        return undefined;
+                    }
+                    var _a = ts.Debug.checkDefined(getAutoImportSymbolFromCompletionEntryData(entry.name, entry.data, program, host)), symbol = _a.symbol, origin = _a.origin;
+                    var info = exportMap.get(file.path, entry.name, symbol, origin.moduleSymbol.name, origin.isFromPackageJson ? autoImportProviderChecker : checker);
+                    var result = info && context.tryResolve(info, !ts.isExternalModuleNameRelative(ts.stripQuotes(origin.moduleSymbol.name)));
+                    if (!result)
+                        return entry;
+                    var newOrigin = __assign(__assign({}, origin), { kind: 32 /* ResolvedExport */, moduleSpecifier: result.moduleSpecifier });
+                    // Mutating for performance... feels sketchy but nobody else uses the cache,
+                    // so why bother allocating a bunch of new objects?
+                    entry.data = originToCompletionEntryData(newOrigin);
+                    entry.source = getSourceFromOrigin(newOrigin);
+                    entry.sourceDisplay = [ts.textPart(newOrigin.moduleSpecifier)];
+                    return entry;
+                });
+                if (!context.resolutionLimitExceeded()) {
+                    previousResponse.isIncomplete = undefined;
+                }
+                return entries;
+            });
+            previousResponse.entries = newEntries;
+            return previousResponse;
+        }
         function jsdocCompletionInfo(entries) {
             return { isGlobalCompletion: false, isMemberCompletion: false, isNewIdentifierLocation: false, entries: entries };
         }
@@ -123780,10 +126607,10 @@
         }
         function getOptionalReplacementSpan(location) {
             // StringLiteralLike locations are handled separately in stringCompletions.ts
-            return (location === null || location === void 0 ? void 0 : location.kind) === 78 /* Identifier */ ? ts.createTextSpanFromNode(location) : undefined;
+            return (location === null || location === void 0 ? void 0 : location.kind) === 79 /* Identifier */ ? ts.createTextSpanFromNode(location) : undefined;
         }
         function completionInfoFromData(sourceFile, typeChecker, compilerOptions, log, completionData, preferences) {
-            var symbols = completionData.symbols, completionKind = completionData.completionKind, isInSnippetScope = completionData.isInSnippetScope, isNewIdentifierLocation = completionData.isNewIdentifierLocation, location = completionData.location, propertyAccessToConvert = completionData.propertyAccessToConvert, keywordFilters = completionData.keywordFilters, literals = completionData.literals, symbolToOriginInfoMap = completionData.symbolToOriginInfoMap, recommendedCompletion = completionData.recommendedCompletion, isJsxInitializer = completionData.isJsxInitializer, isTypeOnlyLocation = completionData.isTypeOnlyLocation, isJsxIdentifierExpected = completionData.isJsxIdentifierExpected, importCompletionNode = completionData.importCompletionNode, insideJsDocTagTypeExpression = completionData.insideJsDocTagTypeExpression, symbolToSortTextMap = completionData.symbolToSortTextMap;
+            var symbols = completionData.symbols, completionKind = completionData.completionKind, isInSnippetScope = completionData.isInSnippetScope, isNewIdentifierLocation = completionData.isNewIdentifierLocation, location = completionData.location, propertyAccessToConvert = completionData.propertyAccessToConvert, keywordFilters = completionData.keywordFilters, literals = completionData.literals, symbolToOriginInfoMap = completionData.symbolToOriginInfoMap, recommendedCompletion = completionData.recommendedCompletion, isJsxInitializer = completionData.isJsxInitializer, isTypeOnlyLocation = completionData.isTypeOnlyLocation, isJsxIdentifierExpected = completionData.isJsxIdentifierExpected, importCompletionNode = completionData.importCompletionNode, insideJsDocTagTypeExpression = completionData.insideJsDocTagTypeExpression, symbolToSortTextIdMap = completionData.symbolToSortTextIdMap, hasUnresolvedAutoImports = completionData.hasUnresolvedAutoImports;
             // Verify if the file is JSX language variant
             if (ts.getLanguageVariant(sourceFile.scriptKind) === 1 /* JSX */) {
                 var completionInfo = getJsxClosingTagCompletion(location, sourceFile);
@@ -123794,7 +126621,7 @@
             var entries = [];
             if (isUncheckedFile(sourceFile, compilerOptions)) {
                 var uniqueNames = getCompletionEntriesFromSymbols(symbols, entries, 
-                /* contextToken */ undefined, location, sourceFile, typeChecker, compilerOptions.target, log, completionKind, preferences, compilerOptions, isTypeOnlyLocation, propertyAccessToConvert, isJsxIdentifierExpected, isJsxInitializer, importCompletionNode, recommendedCompletion, symbolToOriginInfoMap, symbolToSortTextMap);
+                /* contextToken */ undefined, location, sourceFile, typeChecker, compilerOptions.target, log, completionKind, preferences, compilerOptions, isTypeOnlyLocation, propertyAccessToConvert, isJsxIdentifierExpected, isJsxInitializer, importCompletionNode, recommendedCompletion, symbolToOriginInfoMap, symbolToSortTextIdMap);
                 getJSCompletionEntries(sourceFile, location.pos, uniqueNames, compilerOptions.target, entries); // TODO: GH#18217
             }
             else {
@@ -123802,7 +126629,7 @@
                     return undefined;
                 }
                 getCompletionEntriesFromSymbols(symbols, entries, 
-                /* contextToken */ undefined, location, sourceFile, typeChecker, compilerOptions.target, log, completionKind, preferences, compilerOptions, isTypeOnlyLocation, propertyAccessToConvert, isJsxIdentifierExpected, isJsxInitializer, importCompletionNode, recommendedCompletion, symbolToOriginInfoMap, symbolToSortTextMap);
+                /* contextToken */ undefined, location, sourceFile, typeChecker, compilerOptions.target, log, completionKind, preferences, compilerOptions, isTypeOnlyLocation, propertyAccessToConvert, isJsxIdentifierExpected, isJsxInitializer, importCompletionNode, recommendedCompletion, symbolToOriginInfoMap, symbolToSortTextIdMap);
             }
             if (keywordFilters !== 0 /* None */) {
                 var entryNames = new ts.Set(entries.map(function (e) { return e.name; }));
@@ -123819,6 +126646,7 @@
             }
             return {
                 isGlobalCompletion: isInSnippetScope,
+                isIncomplete: preferences.allowIncompleteCompletions && hasUnresolvedAutoImports ? true : undefined,
                 isMemberCompletion: isMemberCompletionKind(completionKind),
                 isNewIdentifierLocation: isNewIdentifierLocation,
                 optionalReplacementSpan: getOptionalReplacementSpan(location),
@@ -123842,12 +126670,12 @@
             // We wanna walk up the tree till we find a JSX closing element
             var jsxClosingElement = ts.findAncestor(location, function (node) {
                 switch (node.kind) {
-                    case 277 /* JsxClosingElement */:
+                    case 279 /* JsxClosingElement */:
                         return true;
                     case 43 /* SlashToken */:
                     case 31 /* GreaterThanToken */:
-                    case 78 /* Identifier */:
-                    case 202 /* PropertyAccessExpression */:
+                    case 79 /* Identifier */:
+                    case 204 /* PropertyAccessExpression */:
                         return false;
                     default:
                         return "quit";
@@ -123914,6 +126742,7 @@
             var data;
             var isSnippet;
             var sourceDisplay;
+            var hasAction;
             var insertQuestionDot = origin && originIsNullableMember(origin);
             var useBraces = origin && originIsSymbolMember(origin) || needsConvertPropertyAccess;
             if (origin && originIsThisType(origin)) {
@@ -123958,22 +126787,18 @@
                 replacementSpan = ts.createTextSpanFromBounds(propertyAccessToConvert.getStart(sourceFile), propertyAccessToConvert.end);
             }
             if (originIsResolvedExport(origin)) {
-                ts.Debug.assertIsDefined(importCompletionNode);
-                (_a = getInsertTextAndReplacementSpanForImportCompletion(name, importCompletionNode, origin, useSemicolons, options, preferences), insertText = _a.insertText, replacementSpan = _a.replacementSpan);
                 sourceDisplay = [ts.textPart(origin.moduleSpecifier)];
-                isSnippet = preferences.includeCompletionsWithSnippetText ? true : undefined;
+                if (importCompletionNode) {
+                    (_a = getInsertTextAndReplacementSpanForImportCompletion(name, importCompletionNode, origin, useSemicolons, options, preferences), insertText = _a.insertText, replacementSpan = _a.replacementSpan);
+                    isSnippet = preferences.includeCompletionsWithSnippetText ? true : undefined;
+                }
             }
             if (insertText !== undefined && !preferences.includeCompletionsWithInsertText) {
                 return undefined;
             }
             if (originIsExport(origin) || originIsResolvedExport(origin)) {
-                data = {
-                    exportName: origin.exportName,
-                    fileName: origin.fileName,
-                    ambientModuleName: origin.fileName ? undefined : ts.stripQuotes(origin.moduleSymbol.name),
-                    isPackageJsonImport: origin.isFromPackageJson ? true : undefined,
-                    moduleSpecifier: originIsResolvedExport(origin) ? origin.moduleSpecifier : undefined,
-                };
+                data = originToCompletionEntryData(origin);
+                hasAction = !importCompletionNode;
             }
             // TODO(drosen): Right now we just permit *all* semantic meanings when calling
             // 'getSymbolKind' which is permissible given that it is backwards compatible; but
@@ -123988,17 +126813,26 @@
                 kindModifiers: ts.SymbolDisplay.getSymbolModifiers(typeChecker, symbol),
                 sortText: sortText,
                 source: getSourceFromOrigin(origin),
-                hasAction: origin && originIsExport(origin) || undefined,
+                hasAction: hasAction ? true : undefined,
                 isRecommended: isRecommendedCompletionMatch(symbol, recommendedCompletion, typeChecker) || undefined,
                 insertText: insertText,
                 replacementSpan: replacementSpan,
                 sourceDisplay: sourceDisplay,
                 isSnippet: isSnippet,
                 isPackageJsonImport: originIsPackageJsonImport(origin) || undefined,
-                isImportStatementCompletion: originIsResolvedExport(origin) || undefined,
+                isImportStatementCompletion: !!importCompletionNode || undefined,
                 data: data,
             };
         }
+        function originToCompletionEntryData(origin) {
+            return {
+                exportName: origin.exportName,
+                fileName: origin.fileName,
+                ambientModuleName: origin.fileName ? undefined : ts.stripQuotes(origin.moduleSymbol.name),
+                isPackageJsonImport: origin.isFromPackageJson ? true : undefined,
+                moduleSpecifier: originIsResolvedExport(origin) ? origin.moduleSpecifier : undefined,
+            };
+        }
         function getInsertTextAndReplacementSpanForImportCompletion(name, importCompletionNode, origin, useSemicolons, options, preferences) {
             var sourceFile = importCompletionNode.getSourceFile();
             var replacementSpan = ts.createTextSpanFromNode(importCompletionNode, sourceFile);
@@ -124007,12 +126841,12 @@
                 origin.exportName === "export=" /* ExportEquals */ ? 2 /* ExportEquals */ :
                     0 /* Named */;
             var tabStop = preferences.includeCompletionsWithSnippetText ? "$1" : "";
-            var importKind = ts.codefix.getImportKind(sourceFile, exportKind, options);
+            var importKind = ts.codefix.getImportKind(sourceFile, exportKind, options, /*forceImportKeyword*/ true);
             var suffix = useSemicolons ? ";" : "";
             switch (importKind) {
                 case 3 /* CommonJS */: return { replacementSpan: replacementSpan, insertText: "import " + name + tabStop + " = require(" + quotedModuleSpecifier + ")" + suffix };
                 case 1 /* Default */: return { replacementSpan: replacementSpan, insertText: "import " + name + tabStop + " from " + quotedModuleSpecifier + suffix };
-                case 2 /* Namespace */: return { replacementSpan: replacementSpan, insertText: "import * as " + name + tabStop + " from " + quotedModuleSpecifier + suffix };
+                case 2 /* Namespace */: return { replacementSpan: replacementSpan, insertText: "import * as " + name + " from " + quotedModuleSpecifier + suffix };
                 case 0 /* Named */: return { replacementSpan: replacementSpan, insertText: "import { " + name + tabStop + " } from " + quotedModuleSpecifier + suffix };
             }
         }
@@ -124037,7 +126871,8 @@
                 return CompletionSource.ThisProperty;
             }
         }
-        function getCompletionEntriesFromSymbols(symbols, entries, contextToken, location, sourceFile, typeChecker, target, log, kind, preferences, compilerOptions, isTypeOnlyLocation, propertyAccessToConvert, jsxIdentifierExpected, isJsxInitializer, importCompletionNode, recommendedCompletion, symbolToOriginInfoMap, symbolToSortTextMap) {
+        function getCompletionEntriesFromSymbols(symbols, entries, contextToken, location, sourceFile, typeChecker, target, log, kind, preferences, compilerOptions, isTypeOnlyLocation, propertyAccessToConvert, jsxIdentifierExpected, isJsxInitializer, importCompletionNode, recommendedCompletion, symbolToOriginInfoMap, symbolToSortTextIdMap) {
+            var _a;
             var start = ts.timestamp();
             var variableDeclaration = getVariableDeclaration(location);
             var useSemicolons = ts.probablyUsesSemicolons(sourceFile);
@@ -124050,11 +126885,13 @@
                 var symbol = symbols[i];
                 var origin = symbolToOriginInfoMap === null || symbolToOriginInfoMap === void 0 ? void 0 : symbolToOriginInfoMap[i];
                 var info = getCompletionEntryDisplayNameForSymbol(symbol, target, origin, kind, !!jsxIdentifierExpected);
-                if (!info || uniques.get(info.name) || kind === 1 /* Global */ && symbolToSortTextMap && !shouldIncludeSymbol(symbol, symbolToSortTextMap)) {
+                if (!info || uniques.get(info.name) || kind === 1 /* Global */ && symbolToSortTextIdMap && !shouldIncludeSymbol(symbol, symbolToSortTextIdMap)) {
                     continue;
                 }
                 var name = info.name, needsConvertPropertyAccess = info.needsConvertPropertyAccess;
-                var entry = createCompletionEntry(symbol, symbolToSortTextMap && symbolToSortTextMap[ts.getSymbolId(symbol)] || SortText.LocationPriority, contextToken, location, sourceFile, typeChecker, name, needsConvertPropertyAccess, origin, recommendedCompletion, propertyAccessToConvert, isJsxInitializer, importCompletionNode, useSemicolons, compilerOptions, preferences);
+                var sortTextId = (_a = symbolToSortTextIdMap === null || symbolToSortTextIdMap === void 0 ? void 0 : symbolToSortTextIdMap[ts.getSymbolId(symbol)]) !== null && _a !== void 0 ? _a : 11 /* LocationPriority */;
+                var sortText = (isDeprecated(symbol, typeChecker) ? 8 /* DeprecatedOffset */ + sortTextId : sortTextId).toString();
+                var entry = createCompletionEntry(symbol, sortText, contextToken, location, sourceFile, typeChecker, name, needsConvertPropertyAccess, origin, recommendedCompletion, propertyAccessToConvert, isJsxInitializer, importCompletionNode, useSemicolons, compilerOptions, preferences);
                 if (!entry) {
                     continue;
                 }
@@ -124071,7 +126908,7 @@
                 has: function (name) { return uniques.has(name); },
                 add: function (name) { return uniques.set(name, true); },
             };
-            function shouldIncludeSymbol(symbol, symbolToSortTextMap) {
+            function shouldIncludeSymbol(symbol, symbolToSortTextIdMap) {
                 if (!ts.isSourceFile(location)) {
                     // export = /**/ here we want to get all meanings, so any symbol is ok
                     if (ts.isExportAssignment(location.parent)) {
@@ -124092,9 +126929,9 @@
                     // Auto Imports are not available for scripts so this conditional is always false
                     if (!!sourceFile.externalModuleIndicator
                         && !compilerOptions.allowUmdGlobalAccess
-                        && symbolToSortTextMap[ts.getSymbolId(symbol)] === SortText.GlobalsOrKeywords
-                        && (symbolToSortTextMap[ts.getSymbolId(symbolOrigin)] === SortText.AutoImportSuggestions
-                            || symbolToSortTextMap[ts.getSymbolId(symbolOrigin)] === SortText.LocationPriority)) {
+                        && symbolToSortTextIdMap[ts.getSymbolId(symbol)] === 15 /* GlobalsOrKeywords */
+                        && (symbolToSortTextIdMap[ts.getSymbolId(symbolOrigin)] === 16 /* AutoImportSuggestions */
+                            || symbolToSortTextIdMap[ts.getSymbolId(symbolOrigin)] === 11 /* LocationPriority */)) {
                         return false;
                     }
                     // Continue with origin symbol
@@ -124210,7 +127047,7 @@
                 }
                 case "symbol": {
                     var symbol = symbolCompletion.symbol, location = symbolCompletion.location, origin = symbolCompletion.origin, previousToken = symbolCompletion.previousToken;
-                    var _a = getCompletionEntryCodeActionsAndSourceDisplay(origin, symbol, program, typeChecker, host, compilerOptions, sourceFile, position, previousToken, formatContext, preferences, entryId.data), codeActions = _a.codeActions, sourceDisplay = _a.sourceDisplay;
+                    var _a = getCompletionEntryCodeActionsAndSourceDisplay(origin, symbol, program, host, compilerOptions, sourceFile, position, previousToken, formatContext, preferences, entryId.data), codeActions = _a.codeActions, sourceDisplay = _a.sourceDisplay;
                     return createCompletionDetailsForSymbol(symbol, typeChecker, sourceFile, location, cancellationToken, codeActions, sourceDisplay); // TODO: GH#18217
                 }
                 case "literal": {
@@ -124239,16 +127076,22 @@
             return { name: name, kindModifiers: kindModifiers, kind: kind, displayParts: displayParts, documentation: documentation, tags: tags, codeActions: codeActions, source: source, sourceDisplay: source };
         }
         Completions.createCompletionDetails = createCompletionDetails;
-        function getCompletionEntryCodeActionsAndSourceDisplay(origin, symbol, program, checker, host, compilerOptions, sourceFile, position, previousToken, formatContext, preferences, data) {
+        function getCompletionEntryCodeActionsAndSourceDisplay(origin, symbol, program, host, compilerOptions, sourceFile, position, previousToken, formatContext, preferences, data) {
             if (data === null || data === void 0 ? void 0 : data.moduleSpecifier) {
-                return { codeActions: undefined, sourceDisplay: [ts.textPart(data.moduleSpecifier)] };
+                var _a = getRelevantTokens(position, sourceFile), contextToken = _a.contextToken, previousToken_1 = _a.previousToken;
+                if (previousToken_1 && getImportCompletionNode(contextToken || previousToken_1)) {
+                    // Import statement completion: 'import c|'
+                    return { codeActions: undefined, sourceDisplay: [ts.textPart(data.moduleSpecifier)] };
+                }
             }
-            if (!origin || !originIsExport(origin)) {
+            if (!origin || !(originIsExport(origin) || originIsResolvedExport(origin))) {
                 return { codeActions: undefined, sourceDisplay: undefined };
             }
+            var checker = origin.isFromPackageJson ? host.getPackageJsonAutoImportProvider().getTypeChecker() : program.getTypeChecker();
             var moduleSymbol = origin.moduleSymbol;
             var exportedSymbol = checker.getMergedSymbol(ts.skipAlias(symbol.exportSymbol || symbol, checker));
-            var _a = ts.codefix.getImportCompletionAction(exportedSymbol, moduleSymbol, sourceFile, ts.getNameForExportedSymbol(symbol, compilerOptions.target), host, program, formatContext, previousToken && ts.isIdentifier(previousToken) ? previousToken.getStart(sourceFile) : position, preferences), moduleSpecifier = _a.moduleSpecifier, codeAction = _a.codeAction;
+            var _b = ts.codefix.getImportCompletionAction(exportedSymbol, moduleSymbol, sourceFile, ts.getNameForExportedSymbol(symbol, compilerOptions.target), host, program, formatContext, previousToken && ts.isIdentifier(previousToken) ? previousToken.getStart(sourceFile) : position, preferences), moduleSpecifier = _b.moduleSpecifier, codeAction = _b.codeAction;
+            ts.Debug.assert(!(data === null || data === void 0 ? void 0 : data.moduleSpecifier) || moduleSpecifier === data.moduleSpecifier);
             return { sourceDisplay: [ts.textPart(moduleSpecifier)], codeActions: [codeAction] };
         }
         function getCompletionEntrySymbol(program, log, sourceFile, position, entryId, host, preferences) {
@@ -124286,25 +127129,25 @@
         function getContextualType(previousToken, position, sourceFile, checker) {
             var parent = previousToken.parent;
             switch (previousToken.kind) {
-                case 78 /* Identifier */:
+                case 79 /* Identifier */:
                     return ts.getContextualTypeFromParent(previousToken, checker);
-                case 62 /* EqualsToken */:
+                case 63 /* EqualsToken */:
                     switch (parent.kind) {
-                        case 250 /* VariableDeclaration */:
+                        case 252 /* VariableDeclaration */:
                             return checker.getContextualType(parent.initializer); // TODO: GH#18217
-                        case 217 /* BinaryExpression */:
+                        case 219 /* BinaryExpression */:
                             return checker.getTypeAtLocation(parent.left);
-                        case 281 /* JsxAttribute */:
+                        case 283 /* JsxAttribute */:
                             return checker.getContextualTypeForJsxAttribute(parent);
                         default:
                             return undefined;
                     }
-                case 102 /* NewKeyword */:
+                case 103 /* NewKeyword */:
                     return checker.getContextualType(parent);
-                case 81 /* CaseKeyword */:
+                case 82 /* CaseKeyword */:
                     return ts.getSwitchedType(ts.cast(parent, ts.isCaseClause), checker);
                 case 18 /* OpenBraceToken */:
-                    return ts.isJsxExpression(parent) && parent.parent.kind !== 274 /* JsxElement */ ? checker.getContextualTypeForJsxAttribute(parent.parent) : undefined;
+                    return ts.isJsxExpression(parent) && parent.parent.kind !== 276 /* JsxElement */ ? checker.getContextualTypeForJsxAttribute(parent.parent) : undefined;
                 default:
                     var argInfo = ts.SignatureHelp.getArgumentInfoForCompletions(previousToken, position, sourceFile);
                     return argInfo ?
@@ -124324,9 +127167,9 @@
         }
         function isModuleSymbol(symbol) {
             var _a;
-            return !!((_a = symbol.declarations) === null || _a === void 0 ? void 0 : _a.some(function (d) { return d.kind === 298 /* SourceFile */; }));
+            return !!((_a = symbol.declarations) === null || _a === void 0 ? void 0 : _a.some(function (d) { return d.kind === 300 /* SourceFile */; }));
         }
-        function getCompletionData(program, log, sourceFile, isUncheckedFile, position, preferences, detailsEntryId, host) {
+        function getCompletionData(program, log, sourceFile, isUncheckedFile, position, preferences, detailsEntryId, host, cancellationToken) {
             var typeChecker = program.getTypeChecker();
             var start = ts.timestamp();
             var currentToken = ts.getTokenAtPosition(sourceFile, position); // TODO: GH#15853
@@ -124375,11 +127218,11 @@
                     if (tag.tagName.pos <= position && position <= tag.tagName.end) {
                         return { kind: 1 /* JsDocTagName */ };
                     }
-                    if (isTagWithTypeExpression(tag) && tag.typeExpression && tag.typeExpression.kind === 302 /* JSDocTypeExpression */) {
+                    if (isTagWithTypeExpression(tag) && tag.typeExpression && tag.typeExpression.kind === 304 /* JSDocTypeExpression */) {
                         currentToken = ts.getTokenAtPosition(sourceFile, position);
                         if (!currentToken ||
                             (!ts.isDeclarationName(currentToken) &&
-                                (currentToken.parent.kind !== 337 /* JSDocPropertyTag */ ||
+                                (currentToken.parent.kind !== 342 /* JSDocPropertyTag */ ||
                                     currentToken.parent.name !== currentToken))) {
                             // Use as type location if inside tag's type expression
                             insideJsDocTagTypeExpression = isCurrentlyEditingNode(tag.typeExpression);
@@ -124397,18 +127240,12 @@
                 }
             }
             start = ts.timestamp();
-            var previousToken = ts.findPrecedingToken(position, sourceFile, /*startNode*/ undefined); // TODO: GH#18217
-            log("getCompletionData: Get previous token 1: " + (ts.timestamp() - start));
             // The decision to provide completion depends on the contextToken, which is determined through the previousToken.
             // Note: 'previousToken' (and thus 'contextToken') can be undefined if we are the beginning of the file
-            var contextToken = previousToken;
-            // Check if the caret is at the end of an identifier; this is a partial identifier that we want to complete: e.g. a.toS|
-            // Skip this partial identifier and adjust the contextToken to the token that precedes it.
-            if (contextToken && position <= contextToken.end && (ts.isMemberName(contextToken) || ts.isKeyword(contextToken.kind))) {
-                var start_1 = ts.timestamp();
-                contextToken = ts.findPrecedingToken(contextToken.getFullStart(), sourceFile, /*startNode*/ undefined); // TODO: GH#18217
-                log("getCompletionData: Get previous token 2: " + (ts.timestamp() - start_1));
-            }
+            var tokens = getRelevantTokens(position, sourceFile);
+            var previousToken = tokens.previousToken;
+            var contextToken = tokens.contextToken;
+            log("getCompletionData: Get previous token: " + (ts.timestamp() - start));
             // Find the node where completion is requested on.
             // Also determine whether we are trying to complete with members of that node
             // or attributes of a JSX tag.
@@ -124424,8 +127261,8 @@
             var location = ts.getTouchingPropertyName(sourceFile, position);
             if (contextToken) {
                 var importCompletionCandidate = getImportCompletionNode(contextToken);
-                if (importCompletionCandidate === 153 /* FromKeyword */) {
-                    return { kind: 4 /* Keywords */, keywords: [153 /* FromKeyword */] };
+                if (importCompletionCandidate === 154 /* FromKeyword */) {
+                    return { kind: 4 /* Keywords */, keywords: [154 /* FromKeyword */] };
                 }
                 // Import statement completions use `insertText`, and also require the `data` property of `CompletionEntryIdentifier`
                 // added in TypeScript 4.3 to be sent back from the client during `getCompletionEntryDetails`. Since this feature
@@ -124444,7 +127281,7 @@
                     isRightOfDot = contextToken.kind === 24 /* DotToken */;
                     isRightOfQuestionDot = contextToken.kind === 28 /* QuestionDotToken */;
                     switch (parent.kind) {
-                        case 202 /* PropertyAccessExpression */:
+                        case 204 /* PropertyAccessExpression */:
                             propertyAccessToConvert = parent;
                             node = propertyAccessToConvert.expression;
                             if ((ts.isCallExpression(node) || ts.isFunctionLike(node)) &&
@@ -124457,16 +127294,19 @@
                                 return undefined;
                             }
                             break;
-                        case 158 /* QualifiedName */:
+                        case 159 /* QualifiedName */:
                             node = parent.left;
                             break;
-                        case 257 /* ModuleDeclaration */:
+                        case 259 /* ModuleDeclaration */:
                             node = parent.name;
                             break;
-                        case 196 /* ImportType */:
-                        case 227 /* MetaProperty */:
+                        case 198 /* ImportType */:
                             node = parent;
                             break;
+                        case 229 /* MetaProperty */:
+                            node = parent.getFirstToken(sourceFile);
+                            ts.Debug.assert(node.kind === 100 /* ImportKeyword */ || node.kind === 103 /* NewKeyword */);
+                            break;
                         default:
                             // There is nothing that precedes the dot, so this likely just a stray character
                             // or leading into a '...' token. Just bail out instead.
@@ -124477,7 +127317,7 @@
                     // <UI.Test /* completion position */ />
                     // If the tagname is a property access expression, we will then walk up to the top most of property access expression.
                     // Then, try to get a JSX container and its associated attributes type.
-                    if (parent && parent.kind === 202 /* PropertyAccessExpression */) {
+                    if (parent && parent.kind === 204 /* PropertyAccessExpression */) {
                         contextToken = parent;
                         parent = parent.parent;
                     }
@@ -124485,45 +127325,46 @@
                     if (currentToken.parent === location) {
                         switch (currentToken.kind) {
                             case 31 /* GreaterThanToken */:
-                                if (currentToken.parent.kind === 274 /* JsxElement */ || currentToken.parent.kind === 276 /* JsxOpeningElement */) {
+                                if (currentToken.parent.kind === 276 /* JsxElement */ || currentToken.parent.kind === 278 /* JsxOpeningElement */) {
                                     location = currentToken;
                                 }
                                 break;
                             case 43 /* SlashToken */:
-                                if (currentToken.parent.kind === 275 /* JsxSelfClosingElement */) {
+                                if (currentToken.parent.kind === 277 /* JsxSelfClosingElement */) {
                                     location = currentToken;
                                 }
                                 break;
                         }
                     }
                     switch (parent.kind) {
-                        case 277 /* JsxClosingElement */:
+                        case 279 /* JsxClosingElement */:
                             if (contextToken.kind === 43 /* SlashToken */) {
                                 isStartingCloseTag = true;
                                 location = contextToken;
                             }
                             break;
-                        case 217 /* BinaryExpression */:
+                        case 219 /* BinaryExpression */:
                             if (!binaryExpressionMayBeOpenTag(parent)) {
                                 break;
                             }
                         // falls through
-                        case 275 /* JsxSelfClosingElement */:
-                        case 274 /* JsxElement */:
-                        case 276 /* JsxOpeningElement */:
+                        case 277 /* JsxSelfClosingElement */:
+                        case 276 /* JsxElement */:
+                        case 278 /* JsxOpeningElement */:
                             isJsxIdentifierExpected = true;
                             if (contextToken.kind === 29 /* LessThanToken */) {
                                 isRightOfOpenTag = true;
                                 location = contextToken;
                             }
                             break;
-                        case 284 /* JsxExpression */:
+                        case 286 /* JsxExpression */:
+                        case 285 /* JsxSpreadAttribute */:
                             // For `<div foo={true} [||] ></div>`, `parent` will be `{true}` and `previousToken` will be `}`
                             if (previousToken.kind === 19 /* CloseBraceToken */ && currentToken.kind === 31 /* GreaterThanToken */) {
                                 isJsxIdentifierExpected = true;
                             }
                             break;
-                        case 281 /* JsxAttribute */:
+                        case 283 /* JsxAttribute */:
                             // For `<div className="x" [||] ></div>`, `parent` will be JsxAttribute and `previousToken` will be its initializer
                             if (parent.initializer === previousToken &&
                                 previousToken.end < position) {
@@ -124531,16 +127372,16 @@
                                 break;
                             }
                             switch (previousToken.kind) {
-                                case 62 /* EqualsToken */:
+                                case 63 /* EqualsToken */:
                                     isJsxInitializer = true;
                                     break;
-                                case 78 /* Identifier */:
+                                case 79 /* Identifier */:
                                     isJsxIdentifierExpected = true;
                                     // For `<div x=[|f/**/|]`, `parent` will be `x` and `previousToken.parent` will be `f` (which is its own JsxAttribute)
                                     // Note for `<div someBool f>` we don't want to treat this as a jsx inializer, instead it's the attribute name.
                                     if (parent !== previousToken.parent &&
                                         !parent.initializer &&
-                                        ts.findChildOfKind(parent, 62 /* EqualsToken */, sourceFile)) {
+                                        ts.findChildOfKind(parent, 63 /* EqualsToken */, sourceFile)) {
                                         isJsxInitializer = previousToken;
                                     }
                             }
@@ -124552,13 +127393,14 @@
             var completionKind = 5 /* None */;
             var isNewIdentifierLocation = false;
             var isNonContextualObjectLiteral = false;
+            var hasUnresolvedAutoImports = false;
             var keywordFilters = 0 /* None */;
             // This also gets mutated in nested-functions after the return
             var symbols = [];
             var symbolToOriginInfoMap = [];
-            var symbolToSortTextMap = [];
+            var symbolToSortTextIdMap = [];
             var seenPropertySymbols = new ts.Map();
-            var isTypeOnly = isTypeOnlyCompletion();
+            var isTypeOnlyLocation = isTypeOnlyCompletion();
             var getModuleSpecifierResolutionHost = ts.memoizeOne(function (isFromPackageJson) {
                 return ts.createModuleSpecifierResolutionHost(isFromPackageJson ? host.getPackageJsonAutoImportProvider() : program, host);
             });
@@ -124608,18 +127450,19 @@
                 previousToken: previousToken,
                 isJsxInitializer: isJsxInitializer,
                 insideJsDocTagTypeExpression: insideJsDocTagTypeExpression,
-                symbolToSortTextMap: symbolToSortTextMap,
-                isTypeOnlyLocation: isTypeOnly,
+                symbolToSortTextIdMap: symbolToSortTextIdMap,
+                isTypeOnlyLocation: isTypeOnlyLocation,
                 isJsxIdentifierExpected: isJsxIdentifierExpected,
                 importCompletionNode: importCompletionNode,
+                hasUnresolvedAutoImports: hasUnresolvedAutoImports,
             };
             function isTagWithTypeExpression(tag) {
                 switch (tag.kind) {
-                    case 330 /* JSDocParameterTag */:
-                    case 337 /* JSDocPropertyTag */:
-                    case 331 /* JSDocReturnTag */:
-                    case 333 /* JSDocTypeTag */:
-                    case 335 /* JSDocTypedefTag */:
+                    case 335 /* JSDocParameterTag */:
+                    case 342 /* JSDocPropertyTag */:
+                    case 336 /* JSDocReturnTag */:
+                    case 338 /* JSDocTypeTag */:
+                    case 340 /* JSDocTypedefTag */:
                         return true;
                     default:
                         return false;
@@ -124646,7 +127489,7 @@
                             // Extract module or enum members
                             var exportedSymbols = typeChecker.getExportsOfModule(symbol);
                             ts.Debug.assertEachIsDefined(exportedSymbols, "getExportsOfModule() should all be defined");
-                            var isValidValueAccess_1 = function (symbol) { return typeChecker.isValidPropertyAccess(isImportType ? node : (node.parent), symbol.name); };
+                            var isValidValueAccess_1 = function (symbol) { return typeChecker.isValidPropertyAccess(isImportType ? node : node.parent, symbol.name); };
                             var isValidTypeAccess_1 = function (symbol) { return symbolCanBeReferencedAtTypeLocation(symbol, typeChecker); };
                             var isValidAccess = isNamespaceName
                                 // At `namespace N.M/**/`, if this is the only declaration of `M`, don't include `M` as a completion.
@@ -124664,7 +127507,7 @@
                             // If the module is merged with a value, we must get the type of the class and add its propertes (for inherited static methods).
                             if (!isTypeLocation &&
                                 symbol.declarations &&
-                                symbol.declarations.some(function (d) { return d.kind !== 298 /* SourceFile */ && d.kind !== 257 /* ModuleDeclaration */ && d.kind !== 256 /* EnumDeclaration */; })) {
+                                symbol.declarations.some(function (d) { return d.kind !== 300 /* SourceFile */ && d.kind !== 259 /* ModuleDeclaration */ && d.kind !== 258 /* EnumDeclaration */; })) {
                                 var type = typeChecker.getTypeOfSymbolAtLocation(symbol, node).getNonOptionalType();
                                 var insertQuestionDot = false;
                                 if (type.isNullableType()) {
@@ -124684,12 +127527,13 @@
                         }
                     }
                 }
-                if (ts.isMetaProperty(node) && (node.keywordToken === 102 /* NewKeyword */ || node.keywordToken === 99 /* ImportKeyword */) && contextToken === node.getChildAt(1)) {
-                    var completion = (node.keywordToken === 102 /* NewKeyword */) ? "target" : "meta";
-                    symbols.push(typeChecker.createSymbol(4 /* Property */, ts.escapeLeadingUnderscores(completion)));
-                    return;
-                }
                 if (!isTypeLocation) {
+                    // GH#39946. Pulling on the type of a node inside of a function with a contextual `this` parameter can result in a circularity
+                    // if the `node` is part of the exprssion of a `yield` or `return`. This circularity doesn't exist at compile time because
+                    // we will check (and cache) the type of `this` *before* checking the type of the node.
+                    var container = ts.getThisContainer(node, /*includeArrowFunctions*/ false);
+                    if (!ts.isSourceFile(container) && container.parent)
+                        typeChecker.getTypeAtLocation(container);
                     var type = typeChecker.getTypeAtLocation(node).getNonOptionalType();
                     var insertQuestionDot = false;
                     if (type.isNullableType()) {
@@ -124711,7 +127555,7 @@
                 if (isRightOfQuestionDot && ts.some(type.getCallSignatures())) {
                     isNewIdentifierLocation = true;
                 }
-                var propertyAccess = node.kind === 196 /* ImportType */ ? node : node.parent;
+                var propertyAccess = node.kind === 198 /* ImportType */ ? node : node.parent;
                 if (isUncheckedFile) {
                     // In javascript files, for union types, we don't just get the members that
                     // the individual types have in common, we also include all the members that
@@ -124782,7 +127626,7 @@
                 }
                 function addSymbolSortInfo(symbol) {
                     if (isStaticProperty(symbol)) {
-                        symbolToSortTextMap[ts.getSymbolId(symbol)] = SortText.LocalDeclarationPriority;
+                        symbolToSortTextIdMap[ts.getSymbolId(symbol)] = 10 /* LocalDeclarationPriority */;
                     }
                 }
                 function addSymbolOriginInfo(symbol) {
@@ -124842,7 +127686,8 @@
             function tryGetImportCompletionSymbols() {
                 if (!importCompletionNode)
                     return 0 /* Continue */;
-                collectAutoImports(/*resolveModuleSpecifiers*/ true);
+                isNewIdentifierLocation = true;
+                collectAutoImports();
                 return 1 /* Success */;
             }
             function getGlobalCompletions() {
@@ -124883,30 +127728,30 @@
                     position;
                 var scopeNode = getScopeNode(contextToken, adjustedPosition, sourceFile) || sourceFile;
                 isInSnippetScope = isSnippetScope(scopeNode);
-                var symbolMeanings = (isTypeOnly ? 0 /* None */ : 111551 /* Value */) | 788968 /* Type */ | 1920 /* Namespace */ | 2097152 /* Alias */;
+                var symbolMeanings = (isTypeOnlyLocation ? 0 /* None */ : 111551 /* Value */) | 788968 /* Type */ | 1920 /* Namespace */ | 2097152 /* Alias */;
                 symbols = ts.concatenate(symbols, typeChecker.getSymbolsInScope(scopeNode, symbolMeanings));
                 ts.Debug.assertEachIsDefined(symbols, "getSymbolsInScope() should all be defined");
                 for (var _i = 0, symbols_1 = symbols; _i < symbols_1.length; _i++) {
                     var symbol = symbols_1[_i];
                     if (!typeChecker.isArgumentsSymbol(symbol) &&
                         !ts.some(symbol.declarations, function (d) { return d.getSourceFile() === sourceFile; })) {
-                        symbolToSortTextMap[ts.getSymbolId(symbol)] = SortText.GlobalsOrKeywords;
+                        symbolToSortTextIdMap[ts.getSymbolId(symbol)] = 15 /* GlobalsOrKeywords */;
                     }
                 }
                 // Need to insert 'this.' before properties of `this` type, so only do that if `includeInsertTextCompletions`
-                if (preferences.includeCompletionsWithInsertText && scopeNode.kind !== 298 /* SourceFile */) {
+                if (preferences.includeCompletionsWithInsertText && scopeNode.kind !== 300 /* SourceFile */) {
                     var thisType = typeChecker.tryGetThisTypeAt(scopeNode, /*includeGlobalThis*/ false);
                     if (thisType && !isProbablyGlobalType(thisType, sourceFile, typeChecker)) {
                         for (var _a = 0, _b = getPropertiesForCompletion(thisType, typeChecker); _a < _b.length; _a++) {
                             var symbol = _b[_a];
                             symbolToOriginInfoMap[symbols.length] = { kind: 1 /* ThisType */ };
                             symbols.push(symbol);
-                            symbolToSortTextMap[ts.getSymbolId(symbol)] = SortText.SuggestedClassMembers;
+                            symbolToSortTextIdMap[ts.getSymbolId(symbol)] = 14 /* SuggestedClassMembers */;
                         }
                     }
                 }
-                collectAutoImports(/*resolveModuleSpecifier*/ false);
-                if (isTypeOnly) {
+                collectAutoImports();
+                if (isTypeOnlyLocation) {
                     keywordFilters = contextToken && ts.isAssertionExpression(contextToken.parent)
                         ? 6 /* TypeAssertionKeywords */
                         : 7 /* TypeKeywords */;
@@ -124933,10 +127778,10 @@
             }
             function isSnippetScope(scopeNode) {
                 switch (scopeNode.kind) {
-                    case 298 /* SourceFile */:
-                    case 219 /* TemplateExpression */:
-                    case 284 /* JsxExpression */:
-                    case 231 /* Block */:
+                    case 300 /* SourceFile */:
+                    case 221 /* TemplateExpression */:
+                    case 286 /* JsxExpression */:
+                    case 233 /* Block */:
                         return true;
                     default:
                         return ts.isStatement(scopeNode);
@@ -124951,129 +127796,109 @@
             }
             function isContextTokenValueLocation(contextToken) {
                 return contextToken &&
-                    ((contextToken.kind === 111 /* TypeOfKeyword */ &&
-                        (contextToken.parent.kind === 177 /* TypeQuery */ || ts.isTypeOfExpression(contextToken.parent))) ||
-                        (contextToken.kind === 127 /* AssertsKeyword */ && contextToken.parent.kind === 173 /* TypePredicate */));
+                    ((contextToken.kind === 112 /* TypeOfKeyword */ &&
+                        (contextToken.parent.kind === 179 /* TypeQuery */ || ts.isTypeOfExpression(contextToken.parent))) ||
+                        (contextToken.kind === 128 /* AssertsKeyword */ && contextToken.parent.kind === 175 /* TypePredicate */));
             }
             function isContextTokenTypeLocation(contextToken) {
                 if (contextToken) {
                     var parentKind = contextToken.parent.kind;
                     switch (contextToken.kind) {
                         case 58 /* ColonToken */:
-                            return parentKind === 164 /* PropertyDeclaration */ ||
-                                parentKind === 163 /* PropertySignature */ ||
-                                parentKind === 161 /* Parameter */ ||
-                                parentKind === 250 /* VariableDeclaration */ ||
+                            return parentKind === 165 /* PropertyDeclaration */ ||
+                                parentKind === 164 /* PropertySignature */ ||
+                                parentKind === 162 /* Parameter */ ||
+                                parentKind === 252 /* VariableDeclaration */ ||
                                 ts.isFunctionLikeKind(parentKind);
-                        case 62 /* EqualsToken */:
-                            return parentKind === 255 /* TypeAliasDeclaration */;
-                        case 126 /* AsKeyword */:
-                            return parentKind === 225 /* AsExpression */;
+                        case 63 /* EqualsToken */:
+                            return parentKind === 257 /* TypeAliasDeclaration */;
+                        case 127 /* AsKeyword */:
+                            return parentKind === 227 /* AsExpression */;
                         case 29 /* LessThanToken */:
-                            return parentKind === 174 /* TypeReference */ ||
-                                parentKind === 207 /* TypeAssertionExpression */;
-                        case 93 /* ExtendsKeyword */:
-                            return parentKind === 160 /* TypeParameter */;
+                            return parentKind === 176 /* TypeReference */ ||
+                                parentKind === 209 /* TypeAssertionExpression */;
+                        case 94 /* ExtendsKeyword */:
+                            return parentKind === 161 /* TypeParameter */;
                     }
                 }
                 return false;
             }
-            /** Mutates `symbols`, `symbolToOriginInfoMap`, and `symbolToSortTextMap` */
-            function collectAutoImports(resolveModuleSpecifiers) {
-                var _a, _b, _c, _d, _e;
+            /** Mutates `symbols`, `symbolToOriginInfoMap`, and `symbolToSortTextIdMap` */
+            function collectAutoImports() {
+                var _a, _b;
                 if (!shouldOfferImportCompletions())
                     return;
-                ts.Debug.assert(!(detailsEntryId === null || detailsEntryId === void 0 ? void 0 : detailsEntryId.data));
-                var start = ts.timestamp();
+                ts.Debug.assert(!(detailsEntryId === null || detailsEntryId === void 0 ? void 0 : detailsEntryId.data), "Should not run 'collectAutoImports' when faster path is available via `data`");
+                if (detailsEntryId && !detailsEntryId.source) {
+                    // Asking for completion details for an item that is not an auto-import
+                    return;
+                }
                 var moduleSpecifierCache = (_a = host.getModuleSpecifierCache) === null || _a === void 0 ? void 0 : _a.call(host);
-                (_b = host.log) === null || _b === void 0 ? void 0 : _b.call(host, "collectAutoImports: starting, " + (resolveModuleSpecifiers ? "" : "not ") + "resolving module specifiers");
-                if (moduleSpecifierCache) {
-                    (_c = host.log) === null || _c === void 0 ? void 0 : _c.call(host, "collectAutoImports: module specifier cache size: " + moduleSpecifierCache.count());
-                }
                 var lowerCaseTokenText = previousToken && ts.isIdentifier(previousToken) ? previousToken.text.toLowerCase() : "";
-                var exportInfo = ts.codefix.getSymbolToExportInfoMap(sourceFile, host, program);
-                var packageJsonAutoImportProvider = (_d = host.getPackageJsonAutoImportProvider) === null || _d === void 0 ? void 0 : _d.call(host);
-                var packageJsonFilter = detailsEntryId ? undefined : ts.createPackageJsonImportFilter(sourceFile, host);
-                exportInfo.forEach(function (info, key) {
-                    var symbolName = key.substring(0, key.indexOf("|"));
-                    if (!detailsEntryId && ts.isStringANonContextualKeyword(symbolName))
-                        return;
-                    var isCompletionDetailsMatch = detailsEntryId && ts.some(info, function (i) { return detailsEntryId.source === ts.stripQuotes(i.moduleSymbol.name); });
-                    if (isCompletionDetailsMatch || isNameMatch(symbolName)) {
-                        // If we don't need to resolve module specifiers, we can use any re-export that is importable at all
-                        // (We need to ensure that at least one is importable to show a completion.)
-                        var _a = resolveModuleSpecifiers
-                            ? ts.codefix.getModuleSpecifierForBestExportInfo(info, sourceFile, program, host, preferences)
-                            : { moduleSpecifier: undefined, exportInfo: ts.find(info, isImportableExportInfo) }, moduleSpecifier = _a.moduleSpecifier, exportInfo_1 = _a.exportInfo;
-                        if (!exportInfo_1)
+                var exportInfo = ts.getExportInfoMap(sourceFile, host, program, cancellationToken);
+                var packageJsonAutoImportProvider = (_b = host.getPackageJsonAutoImportProvider) === null || _b === void 0 ? void 0 : _b.call(host);
+                var packageJsonFilter = detailsEntryId ? undefined : ts.createPackageJsonImportFilter(sourceFile, preferences, host);
+                resolvingModuleSpecifiers("collectAutoImports", host, program, sourceFile, preferences, !!importCompletionNode, function (context) {
+                    exportInfo.forEach(sourceFile.path, function (info, symbolName, isFromAmbientModule) {
+                        if (!ts.isIdentifierText(symbolName, ts.getEmitScriptTarget(host.getCompilationSettings())))
                             return;
-                        var moduleFile = ts.tryCast(exportInfo_1.moduleSymbol.valueDeclaration, ts.isSourceFile);
-                        var isDefaultExport = exportInfo_1.exportKind === 1 /* Default */;
-                        var symbol = isDefaultExport && ts.getLocalSymbolForExportDefault(exportInfo_1.symbol) || exportInfo_1.symbol;
-                        pushAutoImportSymbol(symbol, {
-                            kind: resolveModuleSpecifiers ? 32 /* ResolvedExport */ : 4 /* Export */,
-                            moduleSpecifier: moduleSpecifier,
-                            symbolName: symbolName,
-                            exportName: exportInfo_1.exportKind === 2 /* ExportEquals */ ? "export=" /* ExportEquals */ : exportInfo_1.symbol.name,
-                            fileName: moduleFile === null || moduleFile === void 0 ? void 0 : moduleFile.fileName,
-                            isDefaultExport: isDefaultExport,
-                            moduleSymbol: exportInfo_1.moduleSymbol,
-                            isFromPackageJson: exportInfo_1.isFromPackageJson,
-                        });
-                    }
+                        if (!detailsEntryId && ts.isStringANonContextualKeyword(symbolName))
+                            return;
+                        // `targetFlags` should be the same for each `info`
+                        if (!isTypeOnlyLocation && !importCompletionNode && !(info[0].targetFlags & 111551 /* Value */))
+                            return;
+                        if (isTypeOnlyLocation && !(info[0].targetFlags & (1536 /* Module */ | 788968 /* Type */)))
+                            return;
+                        var isCompletionDetailsMatch = detailsEntryId && ts.some(info, function (i) { return detailsEntryId.source === ts.stripQuotes(i.moduleSymbol.name); });
+                        if (isCompletionDetailsMatch || !detailsEntryId && charactersFuzzyMatchInString(symbolName, lowerCaseTokenText)) {
+                            var defaultExportInfo = ts.find(info, isImportableExportInfo);
+                            if (!defaultExportInfo) {
+                                return;
+                            }
+                            // If we don't need to resolve module specifiers, we can use any re-export that is importable at all
+                            // (We need to ensure that at least one is importable to show a completion.)
+                            var _a = context.tryResolve(info, isFromAmbientModule) || {}, _b = _a.exportInfo, exportInfo_1 = _b === void 0 ? defaultExportInfo : _b, moduleSpecifier = _a.moduleSpecifier;
+                            var isDefaultExport = exportInfo_1.exportKind === 1 /* Default */;
+                            var symbol = isDefaultExport && ts.getLocalSymbolForExportDefault(exportInfo_1.symbol) || exportInfo_1.symbol;
+                            pushAutoImportSymbol(symbol, {
+                                kind: moduleSpecifier ? 32 /* ResolvedExport */ : 4 /* Export */,
+                                moduleSpecifier: moduleSpecifier,
+                                symbolName: symbolName,
+                                exportName: exportInfo_1.exportKind === 2 /* ExportEquals */ ? "export=" /* ExportEquals */ : exportInfo_1.symbol.name,
+                                fileName: exportInfo_1.moduleFileName,
+                                isDefaultExport: isDefaultExport,
+                                moduleSymbol: exportInfo_1.moduleSymbol,
+                                isFromPackageJson: exportInfo_1.isFromPackageJson,
+                            });
+                        }
+                    });
+                    hasUnresolvedAutoImports = context.resolutionLimitExceeded();
                 });
-                (_e = host.log) === null || _e === void 0 ? void 0 : _e.call(host, "collectAutoImports: done in " + (ts.timestamp() - start) + " ms");
-                function isNameMatch(symbolName) {
-                    var lowerCaseSymbolName = symbolName.toLowerCase();
-                    if (resolveModuleSpecifiers && lowerCaseTokenText) {
-                        // Use a more restrictive filter if resolving module specifiers since resolving module specifiers is expensive.
-                        return lowerCaseTokenText[0] === lowerCaseSymbolName[0] && stringContainsCharactersInOrder(lowerCaseSymbolName, lowerCaseTokenText);
-                    }
-                    return stringContainsCharactersInOrder(lowerCaseSymbolName, lowerCaseTokenText);
-                }
                 function isImportableExportInfo(info) {
                     var moduleFile = ts.tryCast(info.moduleSymbol.valueDeclaration, ts.isSourceFile);
                     if (!moduleFile) {
+                        var moduleName = ts.stripQuotes(info.moduleSymbol.name);
+                        if (ts.JsTyping.nodeCoreModules.has(moduleName) && ts.startsWith(moduleName, "node:") !== ts.shouldUseUriStyleNodeCoreModules(sourceFile, program)) {
+                            return false;
+                        }
                         return packageJsonFilter
                             ? packageJsonFilter.allowsImportingAmbientModule(info.moduleSymbol, getModuleSpecifierResolutionHost(info.isFromPackageJson))
                             : true;
                     }
-                    return ts.isImportableFile(info.isFromPackageJson ? packageJsonAutoImportProvider : program, sourceFile, moduleFile, packageJsonFilter, getModuleSpecifierResolutionHost(info.isFromPackageJson), moduleSpecifierCache);
+                    return ts.isImportableFile(info.isFromPackageJson ? packageJsonAutoImportProvider : program, sourceFile, moduleFile, preferences, packageJsonFilter, getModuleSpecifierResolutionHost(info.isFromPackageJson), moduleSpecifierCache);
                 }
             }
             function pushAutoImportSymbol(symbol, origin) {
                 var symbolId = ts.getSymbolId(symbol);
-                if (symbolToSortTextMap[symbolId] === SortText.GlobalsOrKeywords) {
+                if (symbolToSortTextIdMap[symbolId] === 15 /* GlobalsOrKeywords */) {
                     // If an auto-importable symbol is available as a global, don't add the auto import
                     return;
                 }
                 symbolToOriginInfoMap[symbols.length] = origin;
-                symbolToSortTextMap[symbolId] = importCompletionNode ? SortText.LocationPriority : SortText.AutoImportSuggestions;
+                symbolToSortTextIdMap[symbolId] = importCompletionNode ? 11 /* LocationPriority */ : 16 /* AutoImportSuggestions */;
                 symbols.push(symbol);
             }
             /**
-             * True if you could remove some characters in `a` to get `b`.
-             * E.g., true for "abcdef" and "bdf".
-             * But not true for "abcdef" and "dbf".
-             */
-            function stringContainsCharactersInOrder(str, characters) {
-                if (characters.length === 0) {
-                    return true;
-                }
-                var characterIndex = 0;
-                var len = str.length;
-                for (var strIndex = 0; strIndex < len; strIndex++) {
-                    if (str.charCodeAt(strIndex) === characters.charCodeAt(characterIndex)) {
-                        characterIndex++;
-                        if (characterIndex === characters.length) {
-                            return true;
-                        }
-                    }
-                }
-                // Did not find all characters
-                return false;
-            }
-            /**
              * Finds the first node that "embraces" the position, so that one may
              * accurately aggregate locals from the closest containing scope.
              */
@@ -125089,7 +127914,8 @@
                 var result = isInStringOrRegularExpressionOrTemplateLiteral(contextToken) ||
                     isSolelyIdentifierDefinitionLocation(contextToken) ||
                     isDotOfNumericLiteral(contextToken) ||
-                    isInJsxText(contextToken);
+                    isInJsxText(contextToken) ||
+                    ts.isBigIntLiteral(contextToken);
                 log("getCompletionsAtPosition: isCompletionListBlocker: " + (ts.timestamp() - start));
                 return result;
             }
@@ -125098,7 +127924,7 @@
                     return true;
                 }
                 if (contextToken.kind === 31 /* GreaterThanToken */ && contextToken.parent) {
-                    if (contextToken.parent.kind === 276 /* JsxOpeningElement */) {
+                    if (contextToken.parent.kind === 278 /* JsxOpeningElement */) {
                         // Two possibilities:
                         //   1. <div>/**/
                         //      - contextToken: GreaterThanToken (before cursor)
@@ -125108,10 +127934,10 @@
                         //      - contextToken: GreaterThanToken (before cursor)
                         //      - location: GreaterThanToken (after cursor)
                         //      - same parent (JSXOpeningElement)
-                        return location.parent.kind !== 276 /* JsxOpeningElement */;
+                        return location.parent.kind !== 278 /* JsxOpeningElement */;
                     }
-                    if (contextToken.parent.kind === 277 /* JsxClosingElement */ || contextToken.parent.kind === 275 /* JsxSelfClosingElement */) {
-                        return !!contextToken.parent.parent && contextToken.parent.parent.kind === 274 /* JsxElement */;
+                    if (contextToken.parent.kind === 279 /* JsxClosingElement */ || contextToken.parent.kind === 277 /* JsxSelfClosingElement */) {
+                        return !!contextToken.parent.parent && contextToken.parent.parent.kind === 276 /* JsxElement */;
                     }
                 }
                 return false;
@@ -125122,42 +127948,42 @@
                     // Previous token may have been a keyword that was converted to an identifier.
                     switch (keywordForNode(contextToken)) {
                         case 27 /* CommaToken */:
-                            return containingNodeKind === 204 /* CallExpression */ // func( a, |
-                                || containingNodeKind === 167 /* Constructor */ // constructor( a, |   /* public, protected, private keywords are allowed here, so show completion */
-                                || containingNodeKind === 205 /* NewExpression */ // new C(a, |
-                                || containingNodeKind === 200 /* ArrayLiteralExpression */ // [a, |
-                                || containingNodeKind === 217 /* BinaryExpression */ // const x = (a, |
-                                || containingNodeKind === 175 /* FunctionType */ // var x: (s: string, list|
-                                || containingNodeKind === 201 /* ObjectLiteralExpression */; // const obj = { x, |
+                            return containingNodeKind === 206 /* CallExpression */ // func( a, |
+                                || containingNodeKind === 169 /* Constructor */ // constructor( a, |   /* public, protected, private keywords are allowed here, so show completion */
+                                || containingNodeKind === 207 /* NewExpression */ // new C(a, |
+                                || containingNodeKind === 202 /* ArrayLiteralExpression */ // [a, |
+                                || containingNodeKind === 219 /* BinaryExpression */ // const x = (a, |
+                                || containingNodeKind === 177 /* FunctionType */ // var x: (s: string, list|
+                                || containingNodeKind === 203 /* ObjectLiteralExpression */; // const obj = { x, |
                         case 20 /* OpenParenToken */:
-                            return containingNodeKind === 204 /* CallExpression */ // func( |
-                                || containingNodeKind === 167 /* Constructor */ // constructor( |
-                                || containingNodeKind === 205 /* NewExpression */ // new C(a|
-                                || containingNodeKind === 208 /* ParenthesizedExpression */ // const x = (a|
-                                || containingNodeKind === 187 /* ParenthesizedType */; // function F(pred: (a| /* this can become an arrow function, where 'a' is the argument */
+                            return containingNodeKind === 206 /* CallExpression */ // func( |
+                                || containingNodeKind === 169 /* Constructor */ // constructor( |
+                                || containingNodeKind === 207 /* NewExpression */ // new C(a|
+                                || containingNodeKind === 210 /* ParenthesizedExpression */ // const x = (a|
+                                || containingNodeKind === 189 /* ParenthesizedType */; // function F(pred: (a| /* this can become an arrow function, where 'a' is the argument */
                         case 22 /* OpenBracketToken */:
-                            return containingNodeKind === 200 /* ArrayLiteralExpression */ // [ |
-                                || containingNodeKind === 172 /* IndexSignature */ // [ | : string ]
-                                || containingNodeKind === 159 /* ComputedPropertyName */; // [ |    /* this can become an index signature */
-                        case 139 /* ModuleKeyword */: // module |
-                        case 140 /* NamespaceKeyword */: // namespace |
+                            return containingNodeKind === 202 /* ArrayLiteralExpression */ // [ |
+                                || containingNodeKind === 174 /* IndexSignature */ // [ | : string ]
+                                || containingNodeKind === 160 /* ComputedPropertyName */; // [ |    /* this can become an index signature */
+                        case 140 /* ModuleKeyword */: // module |
+                        case 141 /* NamespaceKeyword */: // namespace |
                             return true;
                         case 24 /* DotToken */:
-                            return containingNodeKind === 257 /* ModuleDeclaration */; // module A.|
+                            return containingNodeKind === 259 /* ModuleDeclaration */; // module A.|
                         case 18 /* OpenBraceToken */:
-                            return containingNodeKind === 253 /* ClassDeclaration */ // class A { |
-                                || containingNodeKind === 201 /* ObjectLiteralExpression */; // const obj = { |
-                        case 62 /* EqualsToken */:
-                            return containingNodeKind === 250 /* VariableDeclaration */ // const x = a|
-                                || containingNodeKind === 217 /* BinaryExpression */; // x = a|
+                            return containingNodeKind === 255 /* ClassDeclaration */ // class A { |
+                                || containingNodeKind === 203 /* ObjectLiteralExpression */; // const obj = { |
+                        case 63 /* EqualsToken */:
+                            return containingNodeKind === 252 /* VariableDeclaration */ // const x = a|
+                                || containingNodeKind === 219 /* BinaryExpression */; // x = a|
                         case 15 /* TemplateHead */:
-                            return containingNodeKind === 219 /* TemplateExpression */; // `aa ${|
+                            return containingNodeKind === 221 /* TemplateExpression */; // `aa ${|
                         case 16 /* TemplateMiddle */:
-                            return containingNodeKind === 229 /* TemplateSpan */; // `aa ${10} dd ${|
-                        case 122 /* PublicKeyword */:
-                        case 120 /* PrivateKeyword */:
-                        case 121 /* ProtectedKeyword */:
-                            return containingNodeKind === 164 /* PropertyDeclaration */; // class A{ public |
+                            return containingNodeKind === 231 /* TemplateSpan */; // `aa ${10} dd ${|
+                        case 123 /* PublicKeyword */:
+                        case 121 /* PrivateKeyword */:
+                        case 122 /* ProtectedKeyword */:
+                            return containingNodeKind === 165 /* PropertyDeclaration */; // class A{ public |
                     }
                 }
                 return false;
@@ -125203,7 +128029,7 @@
                 completionKind = 0 /* ObjectPropertyDeclaration */;
                 var typeMembers;
                 var existingMembers;
-                if (objectLikeContainer.kind === 201 /* ObjectLiteralExpression */) {
+                if (objectLikeContainer.kind === 203 /* ObjectLiteralExpression */) {
                     var instantiatedType = tryGetObjectLiteralContextualType(objectLikeContainer, typeChecker);
                     // Check completions for Object property value shorthand
                     if (instantiatedType === undefined) {
@@ -125228,7 +128054,7 @@
                     }
                 }
                 else {
-                    ts.Debug.assert(objectLikeContainer.kind === 197 /* ObjectBindingPattern */);
+                    ts.Debug.assert(objectLikeContainer.kind === 199 /* ObjectBindingPattern */);
                     // We are *only* completing on properties from the type being destructured.
                     isNewIdentifierLocation = false;
                     var rootDeclaration = ts.getRootDeclaration(objectLikeContainer.parent);
@@ -125239,12 +128065,12 @@
                     // through type declaration or inference.
                     // Also proceed if rootDeclaration is a parameter and if its containing function expression/arrow function is contextually typed -
                     // type of parameter will flow in from the contextual type of the function
-                    var canGetType = ts.hasInitializer(rootDeclaration) || ts.hasType(rootDeclaration) || rootDeclaration.parent.parent.kind === 240 /* ForOfStatement */;
-                    if (!canGetType && rootDeclaration.kind === 161 /* Parameter */) {
+                    var canGetType = ts.hasInitializer(rootDeclaration) || ts.hasType(rootDeclaration) || rootDeclaration.parent.parent.kind === 242 /* ForOfStatement */;
+                    if (!canGetType && rootDeclaration.kind === 162 /* Parameter */) {
                         if (ts.isExpression(rootDeclaration.parent)) {
                             canGetType = !!typeChecker.getContextualType(rootDeclaration.parent);
                         }
-                        else if (rootDeclaration.parent.kind === 166 /* MethodDeclaration */ || rootDeclaration.parent.kind === 169 /* SetAccessor */) {
+                        else if (rootDeclaration.parent.kind === 167 /* MethodDeclaration */ || rootDeclaration.parent.kind === 171 /* SetAccessor */) {
                             canGetType = ts.isExpression(rootDeclaration.parent.parent) && !!typeChecker.getContextualType(rootDeclaration.parent.parent);
                         }
                     }
@@ -125291,9 +128117,9 @@
                 if (!namedImportsOrExports)
                     return 0 /* Continue */;
                 // try to show exported member for imported/re-exported module
-                var moduleSpecifier = (namedImportsOrExports.kind === 265 /* NamedImports */ ? namedImportsOrExports.parent.parent : namedImportsOrExports.parent).moduleSpecifier;
+                var moduleSpecifier = (namedImportsOrExports.kind === 267 /* NamedImports */ ? namedImportsOrExports.parent.parent : namedImportsOrExports.parent).moduleSpecifier;
                 if (!moduleSpecifier)
-                    return namedImportsOrExports.kind === 265 /* NamedImports */ ? 2 /* Fail */ : 0 /* Continue */;
+                    return namedImportsOrExports.kind === 267 /* NamedImports */ ? 2 /* Fail */ : 0 /* Continue */;
                 var moduleSpecifierSymbol = typeChecker.getSymbolAtLocation(moduleSpecifier); // TODO: GH#18217
                 if (!moduleSpecifierSymbol)
                     return 2 /* Fail */;
@@ -125328,7 +128154,7 @@
                     var _a, _b;
                     symbols.push(symbol);
                     if ((_b = (_a = localsContainer.symbol) === null || _a === void 0 ? void 0 : _a.exports) === null || _b === void 0 ? void 0 : _b.has(name)) {
-                        symbolToSortTextMap[ts.getSymbolId(symbol)] = SortText.OptionalMember;
+                        symbolToSortTextIdMap[ts.getSymbolId(symbol)] = 12 /* OptionalMember */;
                     }
                 });
                 return 1 /* Success */;
@@ -125353,7 +128179,7 @@
                 var classElement = contextToken.kind === 26 /* SemicolonToken */ ? contextToken.parent.parent : contextToken.parent;
                 var classElementModifierFlags = ts.isClassElement(classElement) ? ts.getEffectiveModifierFlags(classElement) : 0 /* None */;
                 // If this is context token is not something we are editing now, consider if this would lead to be modifier
-                if (contextToken.kind === 78 /* Identifier */ && !isCurrentlyEditingNode(contextToken)) {
+                if (contextToken.kind === 79 /* Identifier */ && !isCurrentlyEditingNode(contextToken)) {
                     switch (contextToken.getText()) {
                         case "private":
                             classElementModifierFlags = classElementModifierFlags | 8 /* Private */;
@@ -125366,6 +128192,9 @@
                             break;
                     }
                 }
+                if (ts.isClassStaticBlockDeclaration(classElement)) {
+                    classElementModifierFlags |= 32 /* Static */;
+                }
                 // No member list for private methods
                 if (!(classElementModifierFlags & 8 /* Private */)) {
                     // List of property symbols of base type that are not private and already implemented
@@ -125396,7 +128225,7 @@
                             break;
                         case 41 /* AsteriskToken */:
                             return ts.isMethodDeclaration(parent) ? ts.tryCast(parent.parent, ts.isObjectLiteralExpression) : undefined;
-                        case 78 /* Identifier */:
+                        case 79 /* Identifier */:
                             return contextToken.text === "async" && ts.isShorthandPropertyAssignment(contextToken.parent)
                                 ? contextToken.parent.parent : undefined;
                     }
@@ -125449,12 +128278,12 @@
                         case 31 /* GreaterThanToken */: // End of a type argument list
                         case 30 /* LessThanSlashToken */:
                         case 43 /* SlashToken */:
-                        case 78 /* Identifier */:
-                        case 202 /* PropertyAccessExpression */:
-                        case 282 /* JsxAttributes */:
-                        case 281 /* JsxAttribute */:
-                        case 283 /* JsxSpreadAttribute */:
-                            if (parent && (parent.kind === 275 /* JsxSelfClosingElement */ || parent.kind === 276 /* JsxOpeningElement */)) {
+                        case 79 /* Identifier */:
+                        case 204 /* PropertyAccessExpression */:
+                        case 284 /* JsxAttributes */:
+                        case 283 /* JsxAttribute */:
+                        case 285 /* JsxSpreadAttribute */:
+                            if (parent && (parent.kind === 277 /* JsxSelfClosingElement */ || parent.kind === 278 /* JsxOpeningElement */)) {
                                 if (contextToken.kind === 31 /* GreaterThanToken */) {
                                     var precedingToken = ts.findPrecedingToken(contextToken.pos, sourceFile, /*startNode*/ undefined);
                                     if (!parent.typeArguments || (precedingToken && precedingToken.kind === 43 /* SlashToken */))
@@ -125462,7 +128291,7 @@
                                 }
                                 return parent;
                             }
-                            else if (parent.kind === 281 /* JsxAttribute */) {
+                            else if (parent.kind === 283 /* JsxAttribute */) {
                                 // Currently we parse JsxOpeningLikeElement as:
                                 //      JsxOpeningLikeElement
                                 //          attributes: JsxAttributes
@@ -125474,7 +128303,7 @@
                         // its parent is a JsxExpression, whose parent is a JsxAttribute,
                         // whose parent is a JsxOpeningLikeElement
                         case 10 /* StringLiteral */:
-                            if (parent && ((parent.kind === 281 /* JsxAttribute */) || (parent.kind === 283 /* JsxSpreadAttribute */))) {
+                            if (parent && ((parent.kind === 283 /* JsxAttribute */) || (parent.kind === 285 /* JsxSpreadAttribute */))) {
                                 // Currently we parse JsxOpeningLikeElement as:
                                 //      JsxOpeningLikeElement
                                 //          attributes: JsxAttributes
@@ -125484,8 +128313,8 @@
                             break;
                         case 19 /* CloseBraceToken */:
                             if (parent &&
-                                parent.kind === 284 /* JsxExpression */ &&
-                                parent.parent && parent.parent.kind === 281 /* JsxAttribute */) {
+                                parent.kind === 286 /* JsxExpression */ &&
+                                parent.parent && parent.parent.kind === 283 /* JsxAttribute */) {
                                 // Currently we parse JsxOpeningLikeElement as:
                                 //      JsxOpeningLikeElement
                                 //          attributes: JsxAttributes
@@ -125493,7 +128322,7 @@
                                 //                  each JsxAttribute can have initializer as JsxExpression
                                 return parent.parent.parent.parent;
                             }
-                            if (parent && parent.kind === 283 /* JsxSpreadAttribute */) {
+                            if (parent && parent.kind === 285 /* JsxSpreadAttribute */) {
                                 // Currently we parse JsxOpeningLikeElement as:
                                 //      JsxOpeningLikeElement
                                 //          attributes: JsxAttributes
@@ -125513,62 +128342,62 @@
                 var containingNodeKind = parent.kind;
                 switch (contextToken.kind) {
                     case 27 /* CommaToken */:
-                        return containingNodeKind === 250 /* VariableDeclaration */ ||
+                        return containingNodeKind === 252 /* VariableDeclaration */ ||
                             isVariableDeclarationListButNotTypeArgument(contextToken) ||
-                            containingNodeKind === 233 /* VariableStatement */ ||
-                            containingNodeKind === 256 /* EnumDeclaration */ || // enum a { foo, |
+                            containingNodeKind === 235 /* VariableStatement */ ||
+                            containingNodeKind === 258 /* EnumDeclaration */ || // enum a { foo, |
                             isFunctionLikeButNotConstructor(containingNodeKind) ||
-                            containingNodeKind === 254 /* InterfaceDeclaration */ || // interface A<T, |
-                            containingNodeKind === 198 /* ArrayBindingPattern */ || // var [x, y|
-                            containingNodeKind === 255 /* TypeAliasDeclaration */ || // type Map, K, |
+                            containingNodeKind === 256 /* InterfaceDeclaration */ || // interface A<T, |
+                            containingNodeKind === 200 /* ArrayBindingPattern */ || // var [x, y|
+                            containingNodeKind === 257 /* TypeAliasDeclaration */ || // type Map, K, |
                             // class A<T, |
                             // var C = class D<T, |
                             (ts.isClassLike(parent) &&
                                 !!parent.typeParameters &&
                                 parent.typeParameters.end >= contextToken.pos);
                     case 24 /* DotToken */:
-                        return containingNodeKind === 198 /* ArrayBindingPattern */; // var [.|
+                        return containingNodeKind === 200 /* ArrayBindingPattern */; // var [.|
                     case 58 /* ColonToken */:
-                        return containingNodeKind === 199 /* BindingElement */; // var {x :html|
+                        return containingNodeKind === 201 /* BindingElement */; // var {x :html|
                     case 22 /* OpenBracketToken */:
-                        return containingNodeKind === 198 /* ArrayBindingPattern */; // var [x|
+                        return containingNodeKind === 200 /* ArrayBindingPattern */; // var [x|
                     case 20 /* OpenParenToken */:
-                        return containingNodeKind === 288 /* CatchClause */ ||
+                        return containingNodeKind === 290 /* CatchClause */ ||
                             isFunctionLikeButNotConstructor(containingNodeKind);
                     case 18 /* OpenBraceToken */:
-                        return containingNodeKind === 256 /* EnumDeclaration */; // enum a { |
+                        return containingNodeKind === 258 /* EnumDeclaration */; // enum a { |
                     case 29 /* LessThanToken */:
-                        return containingNodeKind === 253 /* ClassDeclaration */ || // class A< |
-                            containingNodeKind === 222 /* ClassExpression */ || // var C = class D< |
-                            containingNodeKind === 254 /* InterfaceDeclaration */ || // interface A< |
-                            containingNodeKind === 255 /* TypeAliasDeclaration */ || // type List< |
+                        return containingNodeKind === 255 /* ClassDeclaration */ || // class A< |
+                            containingNodeKind === 224 /* ClassExpression */ || // var C = class D< |
+                            containingNodeKind === 256 /* InterfaceDeclaration */ || // interface A< |
+                            containingNodeKind === 257 /* TypeAliasDeclaration */ || // type List< |
                             ts.isFunctionLikeKind(containingNodeKind);
-                    case 123 /* StaticKeyword */:
-                        return containingNodeKind === 164 /* PropertyDeclaration */ && !ts.isClassLike(parent.parent);
+                    case 124 /* StaticKeyword */:
+                        return containingNodeKind === 165 /* PropertyDeclaration */ && !ts.isClassLike(parent.parent);
                     case 25 /* DotDotDotToken */:
-                        return containingNodeKind === 161 /* Parameter */ ||
-                            (!!parent.parent && parent.parent.kind === 198 /* ArrayBindingPattern */); // var [...z|
-                    case 122 /* PublicKeyword */:
-                    case 120 /* PrivateKeyword */:
-                    case 121 /* ProtectedKeyword */:
-                        return containingNodeKind === 161 /* Parameter */ && !ts.isConstructorDeclaration(parent.parent);
-                    case 126 /* AsKeyword */:
-                        return containingNodeKind === 266 /* ImportSpecifier */ ||
-                            containingNodeKind === 271 /* ExportSpecifier */ ||
-                            containingNodeKind === 264 /* NamespaceImport */;
-                    case 134 /* GetKeyword */:
-                    case 146 /* SetKeyword */:
+                        return containingNodeKind === 162 /* Parameter */ ||
+                            (!!parent.parent && parent.parent.kind === 200 /* ArrayBindingPattern */); // var [...z|
+                    case 123 /* PublicKeyword */:
+                    case 121 /* PrivateKeyword */:
+                    case 122 /* ProtectedKeyword */:
+                        return containingNodeKind === 162 /* Parameter */ && !ts.isConstructorDeclaration(parent.parent);
+                    case 127 /* AsKeyword */:
+                        return containingNodeKind === 268 /* ImportSpecifier */ ||
+                            containingNodeKind === 273 /* ExportSpecifier */ ||
+                            containingNodeKind === 266 /* NamespaceImport */;
+                    case 135 /* GetKeyword */:
+                    case 147 /* SetKeyword */:
                         return !isFromObjectTypeDeclaration(contextToken);
-                    case 83 /* ClassKeyword */:
-                    case 91 /* EnumKeyword */:
-                    case 117 /* InterfaceKeyword */:
-                    case 97 /* FunctionKeyword */:
-                    case 112 /* VarKeyword */:
-                    case 99 /* ImportKeyword */:
-                    case 118 /* LetKeyword */:
-                    case 84 /* ConstKeyword */:
-                    case 135 /* InferKeyword */:
-                    case 149 /* TypeKeyword */: // type htm|
+                    case 84 /* ClassKeyword */:
+                    case 92 /* EnumKeyword */:
+                    case 118 /* InterfaceKeyword */:
+                    case 98 /* FunctionKeyword */:
+                    case 113 /* VarKeyword */:
+                    case 100 /* ImportKeyword */:
+                    case 119 /* LetKeyword */:
+                    case 85 /* ConstKeyword */:
+                    case 136 /* InferKeyword */:
+                    case 150 /* TypeKeyword */: // type htm|
                         return true;
                     case 41 /* AsteriskToken */:
                         return ts.isFunctionLike(contextToken.parent) && !ts.isMethodDeclaration(contextToken.parent);
@@ -125591,21 +128420,21 @@
                 }
                 // Previous token may have been a keyword that was converted to an identifier.
                 switch (keywordForNode(contextToken)) {
-                    case 125 /* AbstractKeyword */:
-                    case 83 /* ClassKeyword */:
-                    case 84 /* ConstKeyword */:
-                    case 133 /* DeclareKeyword */:
-                    case 91 /* EnumKeyword */:
-                    case 97 /* FunctionKeyword */:
-                    case 117 /* InterfaceKeyword */:
-                    case 118 /* LetKeyword */:
-                    case 120 /* PrivateKeyword */:
-                    case 121 /* ProtectedKeyword */:
-                    case 122 /* PublicKeyword */:
-                    case 123 /* StaticKeyword */:
-                    case 112 /* VarKeyword */:
+                    case 126 /* AbstractKeyword */:
+                    case 84 /* ClassKeyword */:
+                    case 85 /* ConstKeyword */:
+                    case 134 /* DeclareKeyword */:
+                    case 92 /* EnumKeyword */:
+                    case 98 /* FunctionKeyword */:
+                    case 118 /* InterfaceKeyword */:
+                    case 119 /* LetKeyword */:
+                    case 121 /* PrivateKeyword */:
+                    case 122 /* ProtectedKeyword */:
+                    case 123 /* PublicKeyword */:
+                    case 124 /* StaticKeyword */:
+                    case 113 /* VarKeyword */:
                         return true;
-                    case 129 /* AsyncKeyword */:
+                    case 130 /* AsyncKeyword */:
                         return ts.isPropertyDeclaration(contextToken.parent);
                 }
                 // If we are inside a class declaration, and `constructor` is totally not present,
@@ -125614,7 +128443,7 @@
                 if (ancestorClassLike && contextToken === previousToken && isPreviousPropertyDeclarationTerminated(contextToken, position)) {
                     return false; // Don't block completions.
                 }
-                var ancestorPropertyDeclaraion = ts.getAncestor(contextToken.parent, 164 /* PropertyDeclaration */);
+                var ancestorPropertyDeclaraion = ts.getAncestor(contextToken.parent, 165 /* PropertyDeclaration */);
                 // If we are inside a class declaration and typing `constructor` after property declaration...
                 if (ancestorPropertyDeclaraion
                     && contextToken !== previousToken
@@ -125625,7 +128454,7 @@
                     if (isPreviousPropertyDeclarationTerminated(contextToken, previousToken.end)) {
                         return false; // Don't block completions.
                     }
-                    else if (contextToken.kind !== 62 /* EqualsToken */
+                    else if (contextToken.kind !== 63 /* EqualsToken */
                         // Should not block: `class C { blah = c/**/ }`
                         // But should block: `class C { blah = somewhat c/**/ }` and `class C { blah: SomeType c/**/ }`
                         && (ts.isInitializedProperty(ancestorPropertyDeclaraion)
@@ -125641,12 +128470,12 @@
                     && !(ts.isClassLike(contextToken.parent) && (contextToken !== previousToken || position > previousToken.end));
             }
             function isPreviousPropertyDeclarationTerminated(contextToken, position) {
-                return contextToken.kind !== 62 /* EqualsToken */ &&
+                return contextToken.kind !== 63 /* EqualsToken */ &&
                     (contextToken.kind === 26 /* SemicolonToken */
                         || !ts.positionsAreOnSameLine(contextToken.end, position, sourceFile));
             }
             function isFunctionLikeButNotConstructor(kind) {
-                return ts.isFunctionLikeKind(kind) && kind !== 167 /* Constructor */;
+                return ts.isFunctionLikeKind(kind) && kind !== 169 /* Constructor */;
             }
             function isDotOfNumericLiteral(contextToken) {
                 if (contextToken.kind === 8 /* NumericLiteral */) {
@@ -125656,7 +128485,7 @@
                 return false;
             }
             function isVariableDeclarationListButNotTypeArgument(node) {
-                return node.parent.kind === 251 /* VariableDeclarationList */
+                return node.parent.kind === 253 /* VariableDeclarationList */
                     && !ts.isPossiblyTypeArgumentPosition(node, sourceFile, typeChecker);
             }
             /**
@@ -125674,13 +128503,13 @@
                 for (var _i = 0, existingMembers_1 = existingMembers; _i < existingMembers_1.length; _i++) {
                     var m = existingMembers_1[_i];
                     // Ignore omitted expressions for missing members
-                    if (m.kind !== 289 /* PropertyAssignment */ &&
-                        m.kind !== 290 /* ShorthandPropertyAssignment */ &&
-                        m.kind !== 199 /* BindingElement */ &&
-                        m.kind !== 166 /* MethodDeclaration */ &&
-                        m.kind !== 168 /* GetAccessor */ &&
-                        m.kind !== 169 /* SetAccessor */ &&
-                        m.kind !== 291 /* SpreadAssignment */) {
+                    if (m.kind !== 291 /* PropertyAssignment */ &&
+                        m.kind !== 292 /* ShorthandPropertyAssignment */ &&
+                        m.kind !== 201 /* BindingElement */ &&
+                        m.kind !== 167 /* MethodDeclaration */ &&
+                        m.kind !== 170 /* GetAccessor */ &&
+                        m.kind !== 171 /* SetAccessor */ &&
+                        m.kind !== 293 /* SpreadAssignment */) {
                         continue;
                     }
                     // If this is the current item we are editing right now, do not filter it out
@@ -125693,7 +128522,7 @@
                     }
                     else if (ts.isBindingElement(m) && m.propertyName) {
                         // include only identifiers in completion list
-                        if (m.propertyName.kind === 78 /* Identifier */) {
+                        if (m.propertyName.kind === 79 /* Identifier */) {
                             existingName = m.propertyName.escapedText;
                         }
                     }
@@ -125726,8 +128555,10 @@
             // Set SortText to OptionalMember if it is an optional member
             function setSortTextToOptionalMember() {
                 symbols.forEach(function (m) {
+                    var _a;
                     if (m.flags & 16777216 /* Optional */) {
-                        symbolToSortTextMap[ts.getSymbolId(m)] = symbolToSortTextMap[ts.getSymbolId(m)] || SortText.OptionalMember;
+                        var symbolId = ts.getSymbolId(m);
+                        symbolToSortTextIdMap[symbolId] = (_a = symbolToSortTextIdMap[symbolId]) !== null && _a !== void 0 ? _a : 12 /* OptionalMember */;
                     }
                 });
             }
@@ -125739,7 +128570,7 @@
                 for (var _i = 0, contextualMemberSymbols_1 = contextualMemberSymbols; _i < contextualMemberSymbols_1.length; _i++) {
                     var contextualMemberSymbol = contextualMemberSymbols_1[_i];
                     if (membersDeclaredBySpreadAssignment.has(contextualMemberSymbol.name)) {
-                        symbolToSortTextMap[ts.getSymbolId(contextualMemberSymbol)] = SortText.MemberDeclaredBySpreadAssignment;
+                        symbolToSortTextIdMap[ts.getSymbolId(contextualMemberSymbol)] = 13 /* MemberDeclaredBySpreadAssignment */;
                     }
                 }
             }
@@ -125753,10 +128584,10 @@
                 for (var _i = 0, existingMembers_2 = existingMembers; _i < existingMembers_2.length; _i++) {
                     var m = existingMembers_2[_i];
                     // Ignore omitted expressions for missing members
-                    if (m.kind !== 164 /* PropertyDeclaration */ &&
-                        m.kind !== 166 /* MethodDeclaration */ &&
-                        m.kind !== 168 /* GetAccessor */ &&
-                        m.kind !== 169 /* SetAccessor */) {
+                    if (m.kind !== 165 /* PropertyDeclaration */ &&
+                        m.kind !== 167 /* MethodDeclaration */ &&
+                        m.kind !== 170 /* GetAccessor */ &&
+                        m.kind !== 171 /* SetAccessor */) {
                         continue;
                     }
                     // If this is the current item we are editing right now, do not filter it out
@@ -125768,7 +128599,7 @@
                         continue;
                     }
                     // do not filter it out if the static presence doesnt match
-                    if (ts.hasEffectiveModifier(m, 32 /* Static */) !== !!(currentClassElementModifierFlags & 32 /* Static */)) {
+                    if (ts.isStatic(m) !== !!(currentClassElementModifierFlags & 32 /* Static */)) {
                         continue;
                     }
                     var existingName = ts.getPropertyNameForPropertyNameNode(m.name);
@@ -125798,7 +128629,7 @@
                     if (isCurrentlyEditingNode(attr)) {
                         continue;
                     }
-                    if (attr.kind === 281 /* JsxAttribute */) {
+                    if (attr.kind === 283 /* JsxAttribute */) {
                         seenNames.add(attr.name.escapedText);
                     }
                     else if (ts.isJsxSpreadAttribute(attr)) {
@@ -125813,6 +128644,14 @@
                 return node.getStart(sourceFile) <= position && position <= node.getEnd();
             }
         }
+        function getRelevantTokens(position, sourceFile) {
+            var previousToken = ts.findPrecedingToken(position, sourceFile);
+            if (previousToken && position <= previousToken.end && (ts.isMemberName(previousToken) || ts.isKeyword(previousToken.kind))) {
+                var contextToken = ts.findPrecedingToken(previousToken.getFullStart(), sourceFile, /*startNode*/ undefined); // TODO: GH#18217
+                return { contextToken: contextToken, previousToken: previousToken };
+            }
+            return { contextToken: previousToken, previousToken: previousToken };
+        }
         function getAutoImportSymbolFromCompletionEntryData(name, data, program, host) {
             var containingProgram = data.isPackageJsonImport ? host.getPackageJsonAutoImportProvider() : program;
             var checker = containingProgram.getTypeChecker();
@@ -125837,6 +128676,7 @@
                     isDefaultExport: isDefaultExport,
                     exportName: data.exportName,
                     fileName: data.fileName,
+                    isFromPackageJson: !!data.isPackageJsonImport,
                 }
             };
         }
@@ -125875,7 +128715,7 @@
         var _keywordCompletions = [];
         var allKeywordsCompletions = ts.memoize(function () {
             var res = [];
-            for (var i = 80 /* FirstKeyword */; i <= 157 /* LastKeyword */; i++) {
+            for (var i = 81 /* FirstKeyword */; i <= 158 /* LastKeyword */; i++) {
                 res.push({
                     name: ts.tokenToString(i),
                     kind: "keyword" /* keyword */,
@@ -125901,11 +128741,11 @@
                         return false;
                     case 1 /* All */:
                         return isFunctionLikeBodyKeyword(kind)
-                            || kind === 133 /* DeclareKeyword */
-                            || kind === 139 /* ModuleKeyword */
-                            || kind === 149 /* TypeKeyword */
-                            || kind === 140 /* NamespaceKeyword */
-                            || ts.isTypeKeyword(kind) && kind !== 150 /* UndefinedKeyword */;
+                            || kind === 134 /* DeclareKeyword */
+                            || kind === 140 /* ModuleKeyword */
+                            || kind === 150 /* TypeKeyword */
+                            || kind === 141 /* NamespaceKeyword */
+                            || ts.isTypeKeyword(kind) && kind !== 151 /* UndefinedKeyword */;
                     case 5 /* FunctionLikeBodyKeywords */:
                         return isFunctionLikeBodyKeyword(kind);
                     case 2 /* ClassElementKeywords */:
@@ -125915,7 +128755,7 @@
                     case 4 /* ConstructorParameterKeywords */:
                         return ts.isParameterPropertyModifier(kind);
                     case 6 /* TypeAssertionKeywords */:
-                        return ts.isTypeKeyword(kind) || kind === 84 /* ConstKeyword */;
+                        return ts.isTypeKeyword(kind) || kind === 85 /* ConstKeyword */;
                     case 7 /* TypeKeywords */:
                         return ts.isTypeKeyword(kind);
                     default:
@@ -125925,59 +128765,59 @@
         }
         function isTypeScriptOnlyKeyword(kind) {
             switch (kind) {
-                case 125 /* AbstractKeyword */:
-                case 128 /* AnyKeyword */:
-                case 155 /* BigIntKeyword */:
-                case 131 /* BooleanKeyword */:
-                case 133 /* DeclareKeyword */:
-                case 91 /* EnumKeyword */:
-                case 154 /* GlobalKeyword */:
-                case 116 /* ImplementsKeyword */:
-                case 135 /* InferKeyword */:
-                case 117 /* InterfaceKeyword */:
-                case 137 /* IsKeyword */:
-                case 138 /* KeyOfKeyword */:
-                case 139 /* ModuleKeyword */:
-                case 140 /* NamespaceKeyword */:
-                case 141 /* NeverKeyword */:
-                case 144 /* NumberKeyword */:
-                case 145 /* ObjectKeyword */:
-                case 156 /* OverrideKeyword */:
-                case 120 /* PrivateKeyword */:
-                case 121 /* ProtectedKeyword */:
-                case 122 /* PublicKeyword */:
-                case 142 /* ReadonlyKeyword */:
-                case 147 /* StringKeyword */:
-                case 148 /* SymbolKeyword */:
-                case 149 /* TypeKeyword */:
-                case 151 /* UniqueKeyword */:
-                case 152 /* UnknownKeyword */:
+                case 126 /* AbstractKeyword */:
+                case 129 /* AnyKeyword */:
+                case 156 /* BigIntKeyword */:
+                case 132 /* BooleanKeyword */:
+                case 134 /* DeclareKeyword */:
+                case 92 /* EnumKeyword */:
+                case 155 /* GlobalKeyword */:
+                case 117 /* ImplementsKeyword */:
+                case 136 /* InferKeyword */:
+                case 118 /* InterfaceKeyword */:
+                case 138 /* IsKeyword */:
+                case 139 /* KeyOfKeyword */:
+                case 140 /* ModuleKeyword */:
+                case 141 /* NamespaceKeyword */:
+                case 142 /* NeverKeyword */:
+                case 145 /* NumberKeyword */:
+                case 146 /* ObjectKeyword */:
+                case 157 /* OverrideKeyword */:
+                case 121 /* PrivateKeyword */:
+                case 122 /* ProtectedKeyword */:
+                case 123 /* PublicKeyword */:
+                case 143 /* ReadonlyKeyword */:
+                case 148 /* StringKeyword */:
+                case 149 /* SymbolKeyword */:
+                case 150 /* TypeKeyword */:
+                case 152 /* UniqueKeyword */:
+                case 153 /* UnknownKeyword */:
                     return true;
                 default:
                     return false;
             }
         }
         function isInterfaceOrTypeLiteralCompletionKeyword(kind) {
-            return kind === 142 /* ReadonlyKeyword */;
+            return kind === 143 /* ReadonlyKeyword */;
         }
         function isClassMemberCompletionKeyword(kind) {
             switch (kind) {
-                case 125 /* AbstractKeyword */:
-                case 132 /* ConstructorKeyword */:
-                case 134 /* GetKeyword */:
-                case 146 /* SetKeyword */:
-                case 129 /* AsyncKeyword */:
-                case 133 /* DeclareKeyword */:
-                case 156 /* OverrideKeyword */:
+                case 126 /* AbstractKeyword */:
+                case 133 /* ConstructorKeyword */:
+                case 135 /* GetKeyword */:
+                case 147 /* SetKeyword */:
+                case 130 /* AsyncKeyword */:
+                case 134 /* DeclareKeyword */:
+                case 157 /* OverrideKeyword */:
                     return true;
                 default:
                     return ts.isClassMemberModifier(kind);
             }
         }
         function isFunctionLikeBodyKeyword(kind) {
-            return kind === 129 /* AsyncKeyword */
-                || kind === 130 /* AwaitKeyword */
-                || kind === 126 /* AsKeyword */
+            return kind === 130 /* AsyncKeyword */
+                || kind === 131 /* AwaitKeyword */
+                || kind === 127 /* AsKeyword */
                 || !ts.isContextualKeyword(kind) && !isClassMemberCompletionKeyword(kind);
         }
         function keywordForNode(node) {
@@ -126029,7 +128869,7 @@
         function tryGetObjectTypeDeclarationCompletionContainer(sourceFile, contextToken, location, position) {
             // class c { method() { } | method2() { } }
             switch (location.kind) {
-                case 338 /* SyntaxList */:
+                case 343 /* SyntaxList */:
                     return ts.tryCast(location.parent, ts.isObjectTypeDeclaration);
                 case 1 /* EndOfFileToken */:
                     var cls = ts.tryCast(ts.lastOrUndefined(ts.cast(location.parent, ts.isSourceFile).statements), ts.isObjectTypeDeclaration);
@@ -126037,7 +128877,7 @@
                         return cls;
                     }
                     break;
-                case 78 /* Identifier */: {
+                case 79 /* Identifier */: {
                     // class c { public prop = c| }
                     if (ts.isPropertyDeclaration(location.parent) && location.parent.initializer === location) {
                         return undefined;
@@ -126051,13 +128891,13 @@
             if (!contextToken)
                 return undefined;
             // class C { blah; constructor/**/ } and so on
-            if (location.kind === 132 /* ConstructorKeyword */
+            if (location.kind === 133 /* ConstructorKeyword */
                 // class C { blah \n constructor/**/ }
                 || (ts.isIdentifier(contextToken) && ts.isPropertyDeclaration(contextToken.parent) && ts.isClassLike(location))) {
                 return ts.findAncestor(contextToken, ts.isClassLike);
             }
             switch (contextToken.kind) {
-                case 62 /* EqualsToken */: // class c { public prop = | /* global completions */ }
+                case 63 /* EqualsToken */: // class c { public prop = | /* global completions */ }
                     return undefined;
                 case 26 /* SemicolonToken */: // class c {getValue(): number; | }
                 case 19 /* CloseBraceToken */: // class c { method() { } | }
@@ -126093,8 +128933,8 @@
                     break;
                 case 26 /* SemicolonToken */:
                 case 27 /* CommaToken */:
-                case 78 /* Identifier */:
-                    if (parent.kind === 163 /* PropertySignature */ && ts.isTypeLiteralNode(parent.parent)) {
+                case 79 /* Identifier */:
+                    if (parent.kind === 164 /* PropertySignature */ && ts.isTypeLiteralNode(parent.parent)) {
                         return parent.parent;
                     }
                     break;
@@ -126111,11 +128951,11 @@
             if (!t)
                 return undefined;
             switch (node.kind) {
-                case 163 /* PropertySignature */:
+                case 164 /* PropertySignature */:
                     return checker.getTypeOfPropertyOfContextualType(t, node.symbol.escapedName);
-                case 184 /* IntersectionType */:
-                case 178 /* TypeLiteral */:
-                case 183 /* UnionType */:
+                case 186 /* IntersectionType */:
+                case 180 /* TypeLiteral */:
+                case 185 /* UnionType */:
                     return t;
             }
         }
@@ -126143,7 +128983,7 @@
                         ? !!ts.tryGetImportFromModuleSpecifier(contextToken)
                         : contextToken.kind === 43 /* SlashToken */ && ts.isJsxClosingElement(contextToken.parent));
                 case " ":
-                    return !!contextToken && ts.isImportKeyword(contextToken) && contextToken.parent.kind === 298 /* SourceFile */;
+                    return !!contextToken && ts.isImportKeyword(contextToken) && contextToken.parent.kind === 300 /* SourceFile */;
                 default:
                     return ts.Debug.assertNever(triggerCharacter);
             }
@@ -126178,7 +129018,7 @@
             if (type) {
                 return type;
             }
-            if (ts.isBinaryExpression(node.parent) && node.parent.operatorToken.kind === 62 /* EqualsToken */ && node === node.parent.left) {
+            if (ts.isBinaryExpression(node.parent) && node.parent.operatorToken.kind === 63 /* EqualsToken */ && node === node.parent.left) {
                 // Object literal is assignment pattern: ({ | } = x)
                 return typeChecker.getTypeAtLocation(node.parent);
             }
@@ -126186,7 +129026,7 @@
         }
         function getImportCompletionNode(contextToken) {
             var candidate = getCandidate();
-            return candidate === 153 /* FromKeyword */ || candidate && ts.rangeIsOnSingleLine(candidate, candidate.getSourceFile()) ? candidate : undefined;
+            return candidate === 154 /* FromKeyword */ || candidate && ts.rangeIsOnSingleLine(candidate, candidate.getSourceFile()) ? candidate : undefined;
             function getCandidate() {
                 var parent = contextToken.parent;
                 if (ts.isImportEqualsDeclaration(parent)) {
@@ -126195,8 +129035,8 @@
                 if (ts.isNamedImports(parent) || ts.isNamespaceImport(parent)) {
                     if (isModuleSpecifierMissingOrEmpty(parent.parent.parent.moduleSpecifier) && (ts.isNamespaceImport(parent) || parent.elements.length < 2) && !parent.parent.name) {
                         // At `import { ... } |` or `import * as Foo |`, the only possible completion is `from`
-                        return contextToken.kind === 19 /* CloseBraceToken */ || contextToken.kind === 78 /* Identifier */
-                            ? 153 /* FromKeyword */
+                        return contextToken.kind === 19 /* CloseBraceToken */ || contextToken.kind === 79 /* Identifier */
+                            ? 154 /* FromKeyword */
                             : parent.parent.parent;
                     }
                     return undefined;
@@ -126234,11 +129074,63 @@
         function symbolCanBeReferencedAtTypeLocation(symbol, checker, seenModules) {
             if (seenModules === void 0) { seenModules = new ts.Map(); }
             var sym = ts.skipAlias(symbol.exportSymbol || symbol, checker);
-            return !!(sym.flags & 788968 /* Type */) ||
-                !!(sym.flags & 1536 /* Module */) &&
-                    ts.addToSeen(seenModules, ts.getSymbolId(sym)) &&
+            return !!(sym.flags & 788968 /* Type */) || checker.isUnknownSymbol(sym) ||
+                !!(sym.flags & 1536 /* Module */) && ts.addToSeen(seenModules, ts.getSymbolId(sym)) &&
                     checker.getExportsOfModule(sym).some(function (e) { return symbolCanBeReferencedAtTypeLocation(e, checker, seenModules); });
         }
+        function isDeprecated(symbol, checker) {
+            var declarations = ts.skipAlias(symbol, checker).declarations;
+            return !!ts.length(declarations) && ts.every(declarations, ts.isDeprecatedDeclaration);
+        }
+        /**
+         * True if the first character of `lowercaseCharacters` is the first character
+         * of some "word" in `identiferString` (where the string is split into "words"
+         * by camelCase and snake_case segments), then if the remaining characters of
+         * `lowercaseCharacters` appear, in order, in the rest of `identifierString`.
+         *
+         * True:
+         * 'state' in 'useState'
+         * 'sae' in 'useState'
+         * 'viable' in 'ENVIRONMENT_VARIABLE'
+         *
+         * False:
+         * 'staet' in 'useState'
+         * 'tate' in 'useState'
+         * 'ment' in 'ENVIRONMENT_VARIABLE'
+         */
+        function charactersFuzzyMatchInString(identifierString, lowercaseCharacters) {
+            if (lowercaseCharacters.length === 0) {
+                return true;
+            }
+            var matchedFirstCharacter = false;
+            var prevChar;
+            var characterIndex = 0;
+            var len = identifierString.length;
+            for (var strIndex = 0; strIndex < len; strIndex++) {
+                var strChar = identifierString.charCodeAt(strIndex);
+                var testChar = lowercaseCharacters.charCodeAt(characterIndex);
+                if (strChar === testChar || strChar === toUpperCharCode(testChar)) {
+                    matchedFirstCharacter || (matchedFirstCharacter = prevChar === undefined || // Beginning of word
+                        97 /* a */ <= prevChar && prevChar <= 122 /* z */ && 65 /* A */ <= strChar && strChar <= 90 /* Z */ || // camelCase transition
+                        prevChar === 95 /* _ */ && strChar !== 95 /* _ */); // snake_case transition
+                    if (matchedFirstCharacter) {
+                        characterIndex++;
+                    }
+                    if (characterIndex === lowercaseCharacters.length) {
+                        return true;
+                    }
+                }
+                prevChar = strChar;
+            }
+            // Did not find all characters
+            return false;
+        }
+        function toUpperCharCode(charCode) {
+            if (97 /* a */ <= charCode && charCode <= 122 /* z */) {
+                return charCode - 32;
+            }
+            return charCode;
+        }
     })(Completions = ts.Completions || (ts.Completions = {}));
 })(ts || (ts = {}));
 var ts;
@@ -126273,10 +129165,11 @@
             if (!referenceEntries)
                 return undefined;
             var map = ts.arrayToMultiMap(referenceEntries.map(ts.FindAllReferences.toHighlightSpan), function (e) { return e.fileName; }, function (e) { return e.span; });
+            var getCanonicalFileName = ts.createGetCanonicalFileName(program.useCaseSensitiveFileNames());
             return ts.mapDefined(ts.arrayFrom(map.entries()), function (_a) {
                 var fileName = _a[0], highlightSpans = _a[1];
                 if (!sourceFilesSet.has(fileName)) {
-                    if (!program.redirectTargetsMap.has(fileName)) {
+                    if (!program.redirectTargetsMap.has(ts.toPath(fileName, program.getCurrentDirectory(), getCanonicalFileName))) {
                         return undefined;
                     }
                     var redirectTarget_1 = program.getSourceFile(fileName);
@@ -126293,44 +129186,44 @@
         }
         function getHighlightSpans(node, sourceFile) {
             switch (node.kind) {
-                case 98 /* IfKeyword */:
-                case 90 /* ElseKeyword */:
+                case 99 /* IfKeyword */:
+                case 91 /* ElseKeyword */:
                     return ts.isIfStatement(node.parent) ? getIfElseOccurrences(node.parent, sourceFile) : undefined;
-                case 104 /* ReturnKeyword */:
+                case 105 /* ReturnKeyword */:
                     return useParent(node.parent, ts.isReturnStatement, getReturnOccurrences);
-                case 108 /* ThrowKeyword */:
+                case 109 /* ThrowKeyword */:
                     return useParent(node.parent, ts.isThrowStatement, getThrowOccurrences);
-                case 110 /* TryKeyword */:
-                case 82 /* CatchKeyword */:
-                case 95 /* FinallyKeyword */:
-                    var tryStatement = node.kind === 82 /* CatchKeyword */ ? node.parent.parent : node.parent;
+                case 111 /* TryKeyword */:
+                case 83 /* CatchKeyword */:
+                case 96 /* FinallyKeyword */:
+                    var tryStatement = node.kind === 83 /* CatchKeyword */ ? node.parent.parent : node.parent;
                     return useParent(tryStatement, ts.isTryStatement, getTryCatchFinallyOccurrences);
-                case 106 /* SwitchKeyword */:
+                case 107 /* SwitchKeyword */:
                     return useParent(node.parent, ts.isSwitchStatement, getSwitchCaseDefaultOccurrences);
-                case 81 /* CaseKeyword */:
-                case 87 /* DefaultKeyword */: {
+                case 82 /* CaseKeyword */:
+                case 88 /* DefaultKeyword */: {
                     if (ts.isDefaultClause(node.parent) || ts.isCaseClause(node.parent)) {
                         return useParent(node.parent.parent.parent, ts.isSwitchStatement, getSwitchCaseDefaultOccurrences);
                     }
                     return undefined;
                 }
-                case 80 /* BreakKeyword */:
-                case 85 /* ContinueKeyword */:
+                case 81 /* BreakKeyword */:
+                case 86 /* ContinueKeyword */:
                     return useParent(node.parent, ts.isBreakOrContinueStatement, getBreakOrContinueStatementOccurrences);
-                case 96 /* ForKeyword */:
-                case 114 /* WhileKeyword */:
-                case 89 /* DoKeyword */:
+                case 97 /* ForKeyword */:
+                case 115 /* WhileKeyword */:
+                case 90 /* DoKeyword */:
                     return useParent(node.parent, function (n) { return ts.isIterationStatement(n, /*lookInLabeledStatements*/ true); }, getLoopBreakContinueOccurrences);
-                case 132 /* ConstructorKeyword */:
-                    return getFromAllDeclarations(ts.isConstructorDeclaration, [132 /* ConstructorKeyword */]);
-                case 134 /* GetKeyword */:
-                case 146 /* SetKeyword */:
-                    return getFromAllDeclarations(ts.isAccessor, [134 /* GetKeyword */, 146 /* SetKeyword */]);
-                case 130 /* AwaitKeyword */:
+                case 133 /* ConstructorKeyword */:
+                    return getFromAllDeclarations(ts.isConstructorDeclaration, [133 /* ConstructorKeyword */]);
+                case 135 /* GetKeyword */:
+                case 147 /* SetKeyword */:
+                    return getFromAllDeclarations(ts.isAccessor, [135 /* GetKeyword */, 147 /* SetKeyword */]);
+                case 131 /* AwaitKeyword */:
                     return useParent(node.parent, ts.isAwaitExpression, getAsyncAndAwaitOccurrences);
-                case 129 /* AsyncKeyword */:
+                case 130 /* AsyncKeyword */:
                     return highlightSpans(getAsyncAndAwaitOccurrences(node));
-                case 124 /* YieldKeyword */:
+                case 125 /* YieldKeyword */:
                     return highlightSpans(getYieldOccurrences(node));
                 default:
                     return ts.isModifierKind(node.kind) && (ts.isDeclaration(node.parent) || ts.isVariableStatement(node.parent))
@@ -126373,7 +129266,7 @@
             var child = throwStatement;
             while (child.parent) {
                 var parent = child.parent;
-                if (ts.isFunctionBlock(parent) || parent.kind === 298 /* SourceFile */) {
+                if (ts.isFunctionBlock(parent) || parent.kind === 300 /* SourceFile */) {
                     return parent;
                 }
                 // A throw-statement is only owned by a try-statement if the try-statement has
@@ -126405,16 +129298,16 @@
         function getBreakOrContinueOwner(statement) {
             return ts.findAncestor(statement, function (node) {
                 switch (node.kind) {
-                    case 245 /* SwitchStatement */:
-                        if (statement.kind === 241 /* ContinueStatement */) {
+                    case 247 /* SwitchStatement */:
+                        if (statement.kind === 243 /* ContinueStatement */) {
                             return false;
                         }
                     // falls through
-                    case 238 /* ForStatement */:
-                    case 239 /* ForInStatement */:
-                    case 240 /* ForOfStatement */:
-                    case 237 /* WhileStatement */:
-                    case 236 /* DoStatement */:
+                    case 240 /* ForStatement */:
+                    case 241 /* ForInStatement */:
+                    case 242 /* ForOfStatement */:
+                    case 239 /* WhileStatement */:
+                    case 238 /* DoStatement */:
                         return !statement.label || isLabeledBy(node, statement.label.escapedText);
                     default:
                         // Don't cross function boundaries.
@@ -126430,41 +129323,41 @@
             // Types of node whose children might have modifiers.
             var container = declaration.parent;
             switch (container.kind) {
-                case 258 /* ModuleBlock */:
-                case 298 /* SourceFile */:
-                case 231 /* Block */:
-                case 285 /* CaseClause */:
-                case 286 /* DefaultClause */:
+                case 260 /* ModuleBlock */:
+                case 300 /* SourceFile */:
+                case 233 /* Block */:
+                case 287 /* CaseClause */:
+                case 288 /* DefaultClause */:
                     // Container is either a class declaration or the declaration is a classDeclaration
                     if (modifierFlag & 128 /* Abstract */ && ts.isClassDeclaration(declaration)) {
-                        return __spreadArray(__spreadArray([], declaration.members), [declaration]);
+                        return __spreadArray(__spreadArray([], declaration.members, true), [declaration], false);
                     }
                     else {
                         return container.statements;
                     }
-                case 167 /* Constructor */:
-                case 166 /* MethodDeclaration */:
-                case 252 /* FunctionDeclaration */:
-                    return __spreadArray(__spreadArray([], container.parameters), (ts.isClassLike(container.parent) ? container.parent.members : []));
-                case 253 /* ClassDeclaration */:
-                case 222 /* ClassExpression */:
-                case 254 /* InterfaceDeclaration */:
-                case 178 /* TypeLiteral */:
+                case 169 /* Constructor */:
+                case 167 /* MethodDeclaration */:
+                case 254 /* FunctionDeclaration */:
+                    return __spreadArray(__spreadArray([], container.parameters, true), (ts.isClassLike(container.parent) ? container.parent.members : []), true);
+                case 255 /* ClassDeclaration */:
+                case 224 /* ClassExpression */:
+                case 256 /* InterfaceDeclaration */:
+                case 180 /* TypeLiteral */:
                     var nodes = container.members;
                     // If we're an accessibility modifier, we're in an instance member and should search
                     // the constructor's parameter list for instance members as well.
                     if (modifierFlag & (28 /* AccessibilityModifier */ | 64 /* Readonly */)) {
                         var constructor = ts.find(container.members, ts.isConstructorDeclaration);
                         if (constructor) {
-                            return __spreadArray(__spreadArray([], nodes), constructor.parameters);
+                            return __spreadArray(__spreadArray([], nodes, true), constructor.parameters, true);
                         }
                     }
                     else if (modifierFlag & 128 /* Abstract */) {
-                        return __spreadArray(__spreadArray([], nodes), [container]);
+                        return __spreadArray(__spreadArray([], nodes, true), [container], false);
                     }
                     return nodes;
                 // Syntactically invalid positions that the parser might produce anyway
-                case 201 /* ObjectLiteralExpression */:
+                case 203 /* ObjectLiteralExpression */:
                     return undefined;
                 default:
                     ts.Debug.assertNever(container, "Invalid container kind.");
@@ -126483,12 +129376,12 @@
         }
         function getLoopBreakContinueOccurrences(loopNode) {
             var keywords = [];
-            if (pushKeywordIf(keywords, loopNode.getFirstToken(), 96 /* ForKeyword */, 114 /* WhileKeyword */, 89 /* DoKeyword */)) {
+            if (pushKeywordIf(keywords, loopNode.getFirstToken(), 97 /* ForKeyword */, 115 /* WhileKeyword */, 90 /* DoKeyword */)) {
                 // If we succeeded and got a do-while loop, then start looking for a 'while' keyword.
-                if (loopNode.kind === 236 /* DoStatement */) {
+                if (loopNode.kind === 238 /* DoStatement */) {
                     var loopTokens = loopNode.getChildren();
                     for (var i = loopTokens.length - 1; i >= 0; i--) {
-                        if (pushKeywordIf(keywords, loopTokens[i], 114 /* WhileKeyword */)) {
+                        if (pushKeywordIf(keywords, loopTokens[i], 115 /* WhileKeyword */)) {
                             break;
                         }
                     }
@@ -126496,7 +129389,7 @@
             }
             ts.forEach(aggregateAllBreakAndContinueStatements(loopNode.statement), function (statement) {
                 if (ownsBreakOrContinueStatement(loopNode, statement)) {
-                    pushKeywordIf(keywords, statement.getFirstToken(), 80 /* BreakKeyword */, 85 /* ContinueKeyword */);
+                    pushKeywordIf(keywords, statement.getFirstToken(), 81 /* BreakKeyword */, 86 /* ContinueKeyword */);
                 }
             });
             return keywords;
@@ -126505,13 +129398,13 @@
             var owner = getBreakOrContinueOwner(breakOrContinueStatement);
             if (owner) {
                 switch (owner.kind) {
-                    case 238 /* ForStatement */:
-                    case 239 /* ForInStatement */:
-                    case 240 /* ForOfStatement */:
-                    case 236 /* DoStatement */:
-                    case 237 /* WhileStatement */:
+                    case 240 /* ForStatement */:
+                    case 241 /* ForInStatement */:
+                    case 242 /* ForOfStatement */:
+                    case 238 /* DoStatement */:
+                    case 239 /* WhileStatement */:
                         return getLoopBreakContinueOccurrences(owner);
-                    case 245 /* SwitchStatement */:
+                    case 247 /* SwitchStatement */:
                         return getSwitchCaseDefaultOccurrences(owner);
                 }
             }
@@ -126519,13 +129412,13 @@
         }
         function getSwitchCaseDefaultOccurrences(switchStatement) {
             var keywords = [];
-            pushKeywordIf(keywords, switchStatement.getFirstToken(), 106 /* SwitchKeyword */);
+            pushKeywordIf(keywords, switchStatement.getFirstToken(), 107 /* SwitchKeyword */);
             // Go through each clause in the switch statement, collecting the 'case'/'default' keywords.
             ts.forEach(switchStatement.caseBlock.clauses, function (clause) {
-                pushKeywordIf(keywords, clause.getFirstToken(), 81 /* CaseKeyword */, 87 /* DefaultKeyword */);
+                pushKeywordIf(keywords, clause.getFirstToken(), 82 /* CaseKeyword */, 88 /* DefaultKeyword */);
                 ts.forEach(aggregateAllBreakAndContinueStatements(clause), function (statement) {
                     if (ownsBreakOrContinueStatement(switchStatement, statement)) {
-                        pushKeywordIf(keywords, statement.getFirstToken(), 80 /* BreakKeyword */);
+                        pushKeywordIf(keywords, statement.getFirstToken(), 81 /* BreakKeyword */);
                     }
                 });
             });
@@ -126533,13 +129426,13 @@
         }
         function getTryCatchFinallyOccurrences(tryStatement, sourceFile) {
             var keywords = [];
-            pushKeywordIf(keywords, tryStatement.getFirstToken(), 110 /* TryKeyword */);
+            pushKeywordIf(keywords, tryStatement.getFirstToken(), 111 /* TryKeyword */);
             if (tryStatement.catchClause) {
-                pushKeywordIf(keywords, tryStatement.catchClause.getFirstToken(), 82 /* CatchKeyword */);
+                pushKeywordIf(keywords, tryStatement.catchClause.getFirstToken(), 83 /* CatchKeyword */);
             }
             if (tryStatement.finallyBlock) {
-                var finallyKeyword = ts.findChildOfKind(tryStatement, 95 /* FinallyKeyword */, sourceFile);
-                pushKeywordIf(keywords, finallyKeyword, 95 /* FinallyKeyword */);
+                var finallyKeyword = ts.findChildOfKind(tryStatement, 96 /* FinallyKeyword */, sourceFile);
+                pushKeywordIf(keywords, finallyKeyword, 96 /* FinallyKeyword */);
             }
             return keywords;
         }
@@ -126550,13 +129443,13 @@
             }
             var keywords = [];
             ts.forEach(aggregateOwnedThrowStatements(owner), function (throwStatement) {
-                keywords.push(ts.findChildOfKind(throwStatement, 108 /* ThrowKeyword */, sourceFile));
+                keywords.push(ts.findChildOfKind(throwStatement, 109 /* ThrowKeyword */, sourceFile));
             });
             // If the "owner" is a function, then we equate 'return' and 'throw' statements in their
             // ability to "jump out" of the function, and include occurrences for both.
             if (ts.isFunctionBlock(owner)) {
                 ts.forEachReturnStatement(owner, function (returnStatement) {
-                    keywords.push(ts.findChildOfKind(returnStatement, 104 /* ReturnKeyword */, sourceFile));
+                    keywords.push(ts.findChildOfKind(returnStatement, 105 /* ReturnKeyword */, sourceFile));
                 });
             }
             return keywords;
@@ -126568,11 +129461,11 @@
             }
             var keywords = [];
             ts.forEachReturnStatement(ts.cast(func.body, ts.isBlock), function (returnStatement) {
-                keywords.push(ts.findChildOfKind(returnStatement, 104 /* ReturnKeyword */, sourceFile));
+                keywords.push(ts.findChildOfKind(returnStatement, 105 /* ReturnKeyword */, sourceFile));
             });
             // Include 'throw' statements that do not occur within a try block.
             ts.forEach(aggregateOwnedThrowStatements(func.body), function (throwStatement) {
-                keywords.push(ts.findChildOfKind(throwStatement, 108 /* ThrowKeyword */, sourceFile));
+                keywords.push(ts.findChildOfKind(throwStatement, 109 /* ThrowKeyword */, sourceFile));
             });
             return keywords;
         }
@@ -126584,13 +129477,13 @@
             var keywords = [];
             if (func.modifiers) {
                 func.modifiers.forEach(function (modifier) {
-                    pushKeywordIf(keywords, modifier, 129 /* AsyncKeyword */);
+                    pushKeywordIf(keywords, modifier, 130 /* AsyncKeyword */);
                 });
             }
             ts.forEachChild(func, function (child) {
                 traverseWithoutCrossingFunction(child, function (node) {
                     if (ts.isAwaitExpression(node)) {
-                        pushKeywordIf(keywords, node.getFirstToken(), 130 /* AwaitKeyword */);
+                        pushKeywordIf(keywords, node.getFirstToken(), 131 /* AwaitKeyword */);
                     }
                 });
             });
@@ -126605,7 +129498,7 @@
             ts.forEachChild(func, function (child) {
                 traverseWithoutCrossingFunction(child, function (node) {
                     if (ts.isYieldExpression(node)) {
-                        pushKeywordIf(keywords, node.getFirstToken(), 124 /* YieldKeyword */);
+                        pushKeywordIf(keywords, node.getFirstToken(), 125 /* YieldKeyword */);
                     }
                 });
             });
@@ -126624,7 +129517,7 @@
             // We'd like to highlight else/ifs together if they are only separated by whitespace
             // (i.e. the keywords are separated by no comments, no newlines).
             for (var i = 0; i < keywords.length; i++) {
-                if (keywords[i].kind === 90 /* ElseKeyword */ && i < keywords.length - 1) {
+                if (keywords[i].kind === 91 /* ElseKeyword */ && i < keywords.length - 1) {
                     var elseKeyword = keywords[i];
                     var ifKeyword = keywords[i + 1]; // this *should* always be an 'if' keyword.
                     var shouldCombineElseAndIf = true;
@@ -126659,10 +129552,10 @@
             // Now traverse back down through the else branches, aggregating if/else keywords of if-statements.
             while (true) {
                 var children = ifStatement.getChildren(sourceFile);
-                pushKeywordIf(keywords, children[0], 98 /* IfKeyword */);
+                pushKeywordIf(keywords, children[0], 99 /* IfKeyword */);
                 // Generally the 'else' keyword is second-to-last, so we traverse backwards.
                 for (var i = children.length - 1; i >= 0; i--) {
-                    if (pushKeywordIf(keywords, children[i], 90 /* ElseKeyword */)) {
+                    if (pushKeywordIf(keywords, children[i], 91 /* ElseKeyword */)) {
                         break;
                     }
                 }
@@ -126920,43 +129813,43 @@
                         if (cancellationToken)
                             cancellationToken.throwIfCancellationRequested();
                         switch (direct.kind) {
-                            case 204 /* CallExpression */:
+                            case 206 /* CallExpression */:
                                 if (ts.isImportCall(direct)) {
                                     handleImportCall(direct);
                                     break;
                                 }
                                 if (!isAvailableThroughGlobal) {
                                     var parent = direct.parent;
-                                    if (exportKind === 2 /* ExportEquals */ && parent.kind === 250 /* VariableDeclaration */) {
+                                    if (exportKind === 2 /* ExportEquals */ && parent.kind === 252 /* VariableDeclaration */) {
                                         var name = parent.name;
-                                        if (name.kind === 78 /* Identifier */) {
+                                        if (name.kind === 79 /* Identifier */) {
                                             directImports.push(name);
                                             break;
                                         }
                                     }
                                 }
                                 break;
-                            case 78 /* Identifier */: // for 'const x = require("y");
+                            case 79 /* Identifier */: // for 'const x = require("y");
                                 break; // TODO: GH#23879
-                            case 261 /* ImportEqualsDeclaration */:
+                            case 263 /* ImportEqualsDeclaration */:
                                 handleNamespaceImport(direct, direct.name, ts.hasSyntacticModifier(direct, 1 /* Export */), /*alreadyAddedDirect*/ false);
                                 break;
-                            case 262 /* ImportDeclaration */:
+                            case 264 /* ImportDeclaration */:
                                 directImports.push(direct);
                                 var namedBindings = direct.importClause && direct.importClause.namedBindings;
-                                if (namedBindings && namedBindings.kind === 264 /* NamespaceImport */) {
+                                if (namedBindings && namedBindings.kind === 266 /* NamespaceImport */) {
                                     handleNamespaceImport(direct, namedBindings.name, /*isReExport*/ false, /*alreadyAddedDirect*/ true);
                                 }
                                 else if (!isAvailableThroughGlobal && ts.isDefaultImport(direct)) {
                                     addIndirectUser(getSourceFileLikeForImportDeclaration(direct)); // Add a check for indirect uses to handle synthetic default imports
                                 }
                                 break;
-                            case 268 /* ExportDeclaration */:
+                            case 270 /* ExportDeclaration */:
                                 if (!direct.exportClause) {
                                     // This is `export * from "foo"`, so imports of this module may import the export too.
                                     handleDirectImports(getContainingModuleSymbol(direct, checker));
                                 }
-                                else if (direct.exportClause.kind === 270 /* NamespaceExport */) {
+                                else if (direct.exportClause.kind === 272 /* NamespaceExport */) {
                                     // `export * as foo from "foo"` add to indirect uses
                                     addIndirectUser(getSourceFileLikeForImportDeclaration(direct), /** addTransitiveDependencies */ true);
                                 }
@@ -126965,7 +129858,7 @@
                                     directImports.push(direct);
                                 }
                                 break;
-                            case 196 /* ImportType */:
+                            case 198 /* ImportType */:
                                 // Only check for typeof import('xyz')
                                 if (direct.isTypeOf && !direct.qualifier && isExported(direct)) {
                                     addIndirectUser(direct.getSourceFile(), /** addTransitiveDependencies */ true);
@@ -126987,7 +129880,7 @@
                 return ts.findAncestor(node, function (node) {
                     if (stopAtAmbientModule && isAmbientModuleDeclaration(node))
                         return "quit";
-                    return ts.some(node.modifiers, function (mod) { return mod.kind === 92 /* ExportKeyword */; });
+                    return ts.some(node.modifiers, function (mod) { return mod.kind === 93 /* ExportKeyword */; });
                 });
             }
             function handleNamespaceImport(importDeclaration, name, isReExport, alreadyAddedDirect) {
@@ -126998,7 +129891,7 @@
                 }
                 else if (!isAvailableThroughGlobal) {
                     var sourceFileLike = getSourceFileLikeForImportDeclaration(importDeclaration);
-                    ts.Debug.assert(sourceFileLike.kind === 298 /* SourceFile */ || sourceFileLike.kind === 257 /* ModuleDeclaration */);
+                    ts.Debug.assert(sourceFileLike.kind === 300 /* SourceFile */ || sourceFileLike.kind === 259 /* ModuleDeclaration */);
                     if (isReExport || findNamespaceReExports(sourceFileLike, name, checker)) {
                         addIndirectUser(sourceFileLike, /** addTransitiveDependencies */ true);
                     }
@@ -127054,17 +129947,17 @@
             }
             return { importSearches: importSearches, singleReferences: singleReferences };
             function handleImport(decl) {
-                if (decl.kind === 261 /* ImportEqualsDeclaration */) {
+                if (decl.kind === 263 /* ImportEqualsDeclaration */) {
                     if (isExternalModuleImportEquals(decl)) {
                         handleNamespaceImportLike(decl.name);
                     }
                     return;
                 }
-                if (decl.kind === 78 /* Identifier */) {
+                if (decl.kind === 79 /* Identifier */) {
                     handleNamespaceImportLike(decl);
                     return;
                 }
-                if (decl.kind === 196 /* ImportType */) {
+                if (decl.kind === 198 /* ImportType */) {
                     if (decl.qualifier) {
                         var firstIdentifier = ts.getFirstIdentifier(decl.qualifier);
                         if (firstIdentifier.escapedText === ts.symbolName(exportSymbol)) {
@@ -127080,7 +129973,7 @@
                 if (decl.moduleSpecifier.kind !== 10 /* StringLiteral */) {
                     return;
                 }
-                if (decl.kind === 268 /* ExportDeclaration */) {
+                if (decl.kind === 270 /* ExportDeclaration */) {
                     if (decl.exportClause && ts.isNamedExports(decl.exportClause)) {
                         searchForNamedImport(decl.exportClause);
                     }
@@ -127089,10 +129982,10 @@
                 var _a = decl.importClause || { name: undefined, namedBindings: undefined }, name = _a.name, namedBindings = _a.namedBindings;
                 if (namedBindings) {
                     switch (namedBindings.kind) {
-                        case 264 /* NamespaceImport */:
+                        case 266 /* NamespaceImport */:
                             handleNamespaceImportLike(namedBindings.name);
                             break;
-                        case 265 /* NamedImports */:
+                        case 267 /* NamedImports */:
                             // 'default' might be accessed as a named import `{ default as foo }`.
                             if (exportKind === 0 /* Named */ || exportKind === 1 /* Default */) {
                                 searchForNamedImport(namedBindings);
@@ -127142,7 +130035,7 @@
                         }
                     }
                     else {
-                        var localSymbol = element.kind === 271 /* ExportSpecifier */ && element.propertyName
+                        var localSymbol = element.kind === 273 /* ExportSpecifier */ && element.propertyName
                             ? checker.getExportSpecifierLocalTargetSymbol(element) // For re-exporting under a different name, we want to get the re-exported symbol.
                             : checker.getSymbolAtLocation(name);
                         addSearch(name, localSymbol);
@@ -127171,7 +130064,7 @@
             for (var _i = 0, sourceFiles_1 = sourceFiles; _i < sourceFiles_1.length; _i++) {
                 var referencingFile = sourceFiles_1[_i];
                 var searchSourceFile = searchModuleSymbol.valueDeclaration;
-                if ((searchSourceFile === null || searchSourceFile === void 0 ? void 0 : searchSourceFile.kind) === 298 /* SourceFile */) {
+                if ((searchSourceFile === null || searchSourceFile === void 0 ? void 0 : searchSourceFile.kind) === 300 /* SourceFile */) {
                     for (var _a = 0, _b = referencingFile.referencedFiles; _a < _b.length; _a++) {
                         var ref = _b[_a];
                         if (program.getSourceFileFromReference(referencingFile, ref) === searchSourceFile) {
@@ -127219,7 +130112,7 @@
         }
         /** Iterates over all statements at the top level or in module declarations. Returns the first truthy result. */
         function forEachPossibleImportOrExportStatement(sourceFileLike, action) {
-            return ts.forEach(sourceFileLike.kind === 298 /* SourceFile */ ? sourceFileLike.statements : sourceFileLike.body.statements, function (statement) {
+            return ts.forEach(sourceFileLike.kind === 300 /* SourceFile */ ? sourceFileLike.statements : sourceFileLike.body.statements, function (statement) {
                 return action(statement) || (isAmbientModuleDeclaration(statement) && ts.forEach(statement.body && statement.body.statements, action));
             });
         }
@@ -127234,15 +130127,15 @@
             else {
                 forEachPossibleImportOrExportStatement(sourceFile, function (statement) {
                     switch (statement.kind) {
-                        case 268 /* ExportDeclaration */:
-                        case 262 /* ImportDeclaration */: {
+                        case 270 /* ExportDeclaration */:
+                        case 264 /* ImportDeclaration */: {
                             var decl = statement;
                             if (decl.moduleSpecifier && ts.isStringLiteral(decl.moduleSpecifier)) {
                                 action(decl, decl.moduleSpecifier);
                             }
                             break;
                         }
-                        case 261 /* ImportEqualsDeclaration */: {
+                        case 263 /* ImportEqualsDeclaration */: {
                             var decl = statement;
                             if (isExternalModuleImportEquals(decl)) {
                                 action(decl, decl.moduleReference.expression);
@@ -127267,7 +130160,7 @@
                 var parent = node.parent;
                 var grandparent = parent.parent;
                 if (symbol.exportSymbol) {
-                    if (parent.kind === 202 /* PropertyAccessExpression */) {
+                    if (parent.kind === 204 /* PropertyAccessExpression */) {
                         // When accessing an export of a JS module, there's no alias. The symbol will still be flagged as an export even though we're at the use.
                         // So check that we are at the declaration.
                         return ((_a = symbol.declarations) === null || _a === void 0 ? void 0 : _a.some(function (d) { return d === parent; })) && ts.isBinaryExpression(grandparent)
@@ -127401,16 +130294,16 @@
         function isNodeImport(node) {
             var parent = node.parent;
             switch (parent.kind) {
-                case 261 /* ImportEqualsDeclaration */:
+                case 263 /* ImportEqualsDeclaration */:
                     return parent.name === node && isExternalModuleImportEquals(parent);
-                case 266 /* ImportSpecifier */:
+                case 268 /* ImportSpecifier */:
                     // For a rename import `{ foo as bar }`, don't search for the imported symbol. Just find local uses of `bar`.
                     return !parent.propertyName;
-                case 263 /* ImportClause */:
-                case 264 /* NamespaceImport */:
+                case 265 /* ImportClause */:
+                case 266 /* NamespaceImport */:
                     ts.Debug.assert(parent.name === node);
                     return true;
-                case 199 /* BindingElement */:
+                case 201 /* BindingElement */:
                     return ts.isInJSFile(node) && ts.isRequireVariableDeclaration(parent);
                 default:
                     return false;
@@ -127451,21 +130344,21 @@
             return checker.getMergedSymbol(getSourceFileLikeForImportDeclaration(importer).symbol);
         }
         function getSourceFileLikeForImportDeclaration(node) {
-            if (node.kind === 204 /* CallExpression */) {
+            if (node.kind === 206 /* CallExpression */) {
                 return node.getSourceFile();
             }
             var parent = node.parent;
-            if (parent.kind === 298 /* SourceFile */) {
+            if (parent.kind === 300 /* SourceFile */) {
                 return parent;
             }
-            ts.Debug.assert(parent.kind === 258 /* ModuleBlock */);
+            ts.Debug.assert(parent.kind === 260 /* ModuleBlock */);
             return ts.cast(parent.parent, isAmbientModuleDeclaration);
         }
         function isAmbientModuleDeclaration(node) {
-            return node.kind === 257 /* ModuleDeclaration */ && node.name.kind === 10 /* StringLiteral */;
+            return node.kind === 259 /* ModuleDeclaration */ && node.name.kind === 10 /* StringLiteral */;
         }
         function isExternalModuleImportEquals(eq) {
-            return eq.moduleReference.kind === 273 /* ExternalModuleReference */ && eq.moduleReference.expression.kind === 10 /* StringLiteral */;
+            return eq.moduleReference.kind === 275 /* ExternalModuleReference */ && eq.moduleReference.expression.kind === 10 /* StringLiteral */;
         }
     })(FindAllReferences = ts.FindAllReferences || (ts.FindAllReferences = {}));
 })(ts || (ts = {}));
@@ -127559,7 +130452,7 @@
                 ((ts.isImportOrExportSpecifier(node.parent) || ts.isBindingElement(node.parent))
                     && node.parent.propertyName === node) ||
                 // Is default export
-                (node.kind === 87 /* DefaultKeyword */ && ts.hasSyntacticModifier(node.parent, 513 /* ExportDefault */))) {
+                (node.kind === 88 /* DefaultKeyword */ && ts.hasSyntacticModifier(node.parent, 513 /* ExportDefault */))) {
                 return getContextNode(node.parent);
             }
             return undefined;
@@ -127568,7 +130461,7 @@
             if (!node)
                 return undefined;
             switch (node.kind) {
-                case 250 /* VariableDeclaration */:
+                case 252 /* VariableDeclaration */:
                     return !ts.isVariableDeclarationList(node.parent) || node.parent.declarations.length !== 1 ?
                         node :
                         ts.isVariableStatement(node.parent.parent) ?
@@ -127576,28 +130469,28 @@
                             ts.isForInOrOfStatement(node.parent.parent) ?
                                 getContextNode(node.parent.parent) :
                                 node.parent;
-                case 199 /* BindingElement */:
+                case 201 /* BindingElement */:
                     return getContextNode(node.parent.parent);
-                case 266 /* ImportSpecifier */:
+                case 268 /* ImportSpecifier */:
                     return node.parent.parent.parent;
-                case 271 /* ExportSpecifier */:
-                case 264 /* NamespaceImport */:
+                case 273 /* ExportSpecifier */:
+                case 266 /* NamespaceImport */:
                     return node.parent.parent;
-                case 263 /* ImportClause */:
-                case 270 /* NamespaceExport */:
+                case 265 /* ImportClause */:
+                case 272 /* NamespaceExport */:
                     return node.parent;
-                case 217 /* BinaryExpression */:
+                case 219 /* BinaryExpression */:
                     return ts.isExpressionStatement(node.parent) ?
                         node.parent :
                         node;
-                case 240 /* ForOfStatement */:
-                case 239 /* ForInStatement */:
+                case 242 /* ForOfStatement */:
+                case 241 /* ForInStatement */:
                     return {
                         start: node.initializer,
                         end: node.expression
                     };
-                case 289 /* PropertyAssignment */:
-                case 290 /* ShorthandPropertyAssignment */:
+                case 291 /* PropertyAssignment */:
+                case 292 /* ShorthandPropertyAssignment */:
                     return ts.isArrayLiteralOrObjectLiteralDestructuringPattern(node.parent) ?
                         getContextNode(ts.findAncestor(node.parent, function (node) {
                             return ts.isBinaryExpression(node) || ts.isForInOrOfStatement(node);
@@ -127654,14 +130547,14 @@
             var node = ts.getTouchingPropertyName(sourceFile, position);
             var referenceEntries;
             var entries = getImplementationReferenceEntries(program, cancellationToken, sourceFiles, node, position);
-            if (node.parent.kind === 202 /* PropertyAccessExpression */
-                || node.parent.kind === 199 /* BindingElement */
-                || node.parent.kind === 203 /* ElementAccessExpression */
-                || node.kind === 105 /* SuperKeyword */) {
-                referenceEntries = entries && __spreadArray([], entries);
+            if (node.parent.kind === 204 /* PropertyAccessExpression */
+                || node.parent.kind === 201 /* BindingElement */
+                || node.parent.kind === 205 /* ElementAccessExpression */
+                || node.kind === 106 /* SuperKeyword */) {
+                referenceEntries = entries && __spreadArray([], entries, true);
             }
             else {
-                var queue = entries && __spreadArray([], entries);
+                var queue = entries && __spreadArray([], entries, true);
                 var seenNodes = new ts.Map();
                 while (queue && queue.length) {
                     var entry = queue.shift();
@@ -127680,18 +130573,18 @@
         }
         FindAllReferences.getImplementationsAtPosition = getImplementationsAtPosition;
         function getImplementationReferenceEntries(program, cancellationToken, sourceFiles, node, position) {
-            if (node.kind === 298 /* SourceFile */) {
+            if (node.kind === 300 /* SourceFile */) {
                 return undefined;
             }
             var checker = program.getTypeChecker();
             // If invoked directly on a shorthand property assignment, then return
             // the declaration of the symbol being assigned (not the symbol being assigned to).
-            if (node.parent.kind === 290 /* ShorthandPropertyAssignment */) {
-                var result_1 = [];
-                Core.getReferenceEntriesForShorthandPropertyAssignment(node, checker, function (node) { return result_1.push(nodeEntry(node)); });
-                return result_1;
+            if (node.parent.kind === 292 /* ShorthandPropertyAssignment */) {
+                var result_2 = [];
+                Core.getReferenceEntriesForShorthandPropertyAssignment(node, checker, function (node) { return result_2.push(nodeEntry(node)); });
+                return result_2;
             }
-            else if (node.kind === 105 /* SuperKeyword */ || ts.isSuperProperty(node.parent)) {
+            else if (node.kind === 106 /* SuperKeyword */ || ts.isSuperProperty(node.parent)) {
                 // References to and accesses on the super keyword only have one possible implementation, so no
                 // need to "Find all References"
                 var symbol = checker.getSymbolAtLocation(node);
@@ -127856,13 +130749,13 @@
             if (symbol) {
                 return getDefinitionKindAndDisplayParts(symbol, checker, node);
             }
-            else if (node.kind === 201 /* ObjectLiteralExpression */) {
+            else if (node.kind === 203 /* ObjectLiteralExpression */) {
                 return {
                     kind: "interface" /* interfaceElement */,
                     displayParts: [ts.punctuationPart(20 /* OpenParenToken */), ts.textPart("object literal"), ts.punctuationPart(21 /* CloseParenToken */)]
                 };
             }
-            else if (node.kind === 222 /* ClassExpression */) {
+            else if (node.kind === 224 /* ClassExpression */) {
                 return {
                     kind: "local class" /* localClassElement */,
                     displayParts: [ts.punctuationPart(20 /* OpenParenToken */), ts.textPart("anonymous local class"), ts.punctuationPart(21 /* CloseParenToken */)]
@@ -127906,13 +130799,13 @@
         /** A node is considered a writeAccess iff it is a name of a declaration or a target of an assignment */
         function isWriteAccessForReference(node) {
             var decl = ts.getDeclarationFromName(node);
-            return !!decl && declarationIsWriteAccess(decl) || node.kind === 87 /* DefaultKeyword */ || ts.isWriteAccess(node);
+            return !!decl && declarationIsWriteAccess(decl) || node.kind === 88 /* DefaultKeyword */ || ts.isWriteAccess(node);
         }
         function isDefinitionForReference(node) {
-            return node.kind === 87 /* DefaultKeyword */
+            return node.kind === 88 /* DefaultKeyword */
                 || !!ts.getDeclarationFromName(node)
                 || ts.isLiteralComputedPropertyDeclarationName(node)
-                || (node.kind === 132 /* ConstructorKeyword */ && ts.isConstructorDeclaration(node.parent));
+                || (node.kind === 133 /* ConstructorKeyword */ && ts.isConstructorDeclaration(node.parent));
         }
         /**
          * True if 'decl' provides a value, as in `function f() {}`;
@@ -127923,47 +130816,47 @@
             if (!!(decl.flags & 8388608 /* Ambient */))
                 return true;
             switch (decl.kind) {
-                case 217 /* BinaryExpression */:
-                case 199 /* BindingElement */:
-                case 253 /* ClassDeclaration */:
-                case 222 /* ClassExpression */:
-                case 87 /* DefaultKeyword */:
-                case 256 /* EnumDeclaration */:
-                case 292 /* EnumMember */:
-                case 271 /* ExportSpecifier */:
-                case 263 /* ImportClause */: // default import
-                case 261 /* ImportEqualsDeclaration */:
-                case 266 /* ImportSpecifier */:
-                case 254 /* InterfaceDeclaration */:
-                case 328 /* JSDocCallbackTag */:
-                case 335 /* JSDocTypedefTag */:
-                case 281 /* JsxAttribute */:
-                case 257 /* ModuleDeclaration */:
-                case 260 /* NamespaceExportDeclaration */:
-                case 264 /* NamespaceImport */:
-                case 270 /* NamespaceExport */:
-                case 161 /* Parameter */:
-                case 290 /* ShorthandPropertyAssignment */:
-                case 255 /* TypeAliasDeclaration */:
-                case 160 /* TypeParameter */:
+                case 219 /* BinaryExpression */:
+                case 201 /* BindingElement */:
+                case 255 /* ClassDeclaration */:
+                case 224 /* ClassExpression */:
+                case 88 /* DefaultKeyword */:
+                case 258 /* EnumDeclaration */:
+                case 294 /* EnumMember */:
+                case 273 /* ExportSpecifier */:
+                case 265 /* ImportClause */: // default import
+                case 263 /* ImportEqualsDeclaration */:
+                case 268 /* ImportSpecifier */:
+                case 256 /* InterfaceDeclaration */:
+                case 333 /* JSDocCallbackTag */:
+                case 340 /* JSDocTypedefTag */:
+                case 283 /* JsxAttribute */:
+                case 259 /* ModuleDeclaration */:
+                case 262 /* NamespaceExportDeclaration */:
+                case 266 /* NamespaceImport */:
+                case 272 /* NamespaceExport */:
+                case 162 /* Parameter */:
+                case 292 /* ShorthandPropertyAssignment */:
+                case 257 /* TypeAliasDeclaration */:
+                case 161 /* TypeParameter */:
                     return true;
-                case 289 /* PropertyAssignment */:
+                case 291 /* PropertyAssignment */:
                     // In `({ x: y } = 0);`, `x` is not a write access. (Won't call this function for `y`.)
                     return !ts.isArrayLiteralOrObjectLiteralDestructuringPattern(decl.parent);
-                case 252 /* FunctionDeclaration */:
-                case 209 /* FunctionExpression */:
-                case 167 /* Constructor */:
-                case 166 /* MethodDeclaration */:
-                case 168 /* GetAccessor */:
-                case 169 /* SetAccessor */:
+                case 254 /* FunctionDeclaration */:
+                case 211 /* FunctionExpression */:
+                case 169 /* Constructor */:
+                case 167 /* MethodDeclaration */:
+                case 170 /* GetAccessor */:
+                case 171 /* SetAccessor */:
                     return !!decl.body;
-                case 250 /* VariableDeclaration */:
-                case 164 /* PropertyDeclaration */:
+                case 252 /* VariableDeclaration */:
+                case 165 /* PropertyDeclaration */:
                     return !!decl.initializer || ts.isCatchClause(decl.parent);
-                case 165 /* MethodSignature */:
-                case 163 /* PropertySignature */:
-                case 337 /* JSDocPropertyTag */:
-                case 330 /* JSDocParameterTag */:
+                case 166 /* MethodSignature */:
+                case 164 /* PropertySignature */:
+                case 342 /* JSDocPropertyTag */:
+                case 335 /* JSDocParameterTag */:
                     return false;
                 default:
                     return ts.Debug.failBadSyntaxKind(decl);
@@ -128184,10 +131077,10 @@
                     for (var _i = 0, _a = symbol.declarations; _i < _a.length; _i++) {
                         var decl = _a[_i];
                         switch (decl.kind) {
-                            case 298 /* SourceFile */:
+                            case 300 /* SourceFile */:
                                 // Don't include the source file itself. (This may not be ideal behavior, but awkward to include an entire file as a reference.)
                                 break;
-                            case 257 /* ModuleDeclaration */:
+                            case 259 /* ModuleDeclaration */:
                                 if (sourceFilesSet.has(decl.getSourceFile().fileName)) {
                                     references.push(nodeEntry(decl.name));
                                 }
@@ -128206,7 +131099,7 @@
                         if (sourceFilesSet.has(sourceFile.fileName)) {
                             // At `module.exports = ...`, reference node is `module`
                             var node = ts.isBinaryExpression(decl) && ts.isPropertyAccessExpression(decl.left) ? decl.left.expression :
-                                ts.isExportAssignment(decl) ? ts.Debug.checkDefined(ts.findChildOfKind(decl, 92 /* ExportKeyword */, sourceFile)) :
+                                ts.isExportAssignment(decl) ? ts.Debug.checkDefined(ts.findChildOfKind(decl, 93 /* ExportKeyword */, sourceFile)) :
                                     ts.getNameOfDeclaration(decl) || decl;
                             references.push(nodeEntry(node));
                         }
@@ -128216,25 +131109,28 @@
             }
             /** As in a `readonly prop: any` or `constructor(readonly prop: any)`, not a `readonly any[]`. */
             function isReadonlyTypeOperator(node) {
-                return node.kind === 142 /* ReadonlyKeyword */
+                return node.kind === 143 /* ReadonlyKeyword */
                     && ts.isTypeOperatorNode(node.parent)
-                    && node.parent.operator === 142 /* ReadonlyKeyword */;
+                    && node.parent.operator === 143 /* ReadonlyKeyword */;
             }
             /** getReferencedSymbols for special node kinds. */
             function getReferencedSymbolsSpecial(node, sourceFiles, cancellationToken) {
                 if (ts.isTypeKeyword(node.kind)) {
                     // A void expression (i.e., `void foo()`) is not special, but the `void` type is.
-                    if (node.kind === 113 /* VoidKeyword */ && ts.isVoidExpression(node.parent)) {
+                    if (node.kind === 114 /* VoidKeyword */ && ts.isVoidExpression(node.parent)) {
                         return undefined;
                     }
                     // A modifier readonly (like on a property declaration) is not special;
                     // a readonly type keyword (like `readonly string[]`) is.
-                    if (node.kind === 142 /* ReadonlyKeyword */ && !isReadonlyTypeOperator(node)) {
+                    if (node.kind === 143 /* ReadonlyKeyword */ && !isReadonlyTypeOperator(node)) {
                         return undefined;
                     }
                     // Likewise, when we *are* looking for a special keyword, make sure we
                     // *don’t* include readonly member modifiers.
-                    return getAllReferencesForKeyword(sourceFiles, node.kind, cancellationToken, node.kind === 142 /* ReadonlyKeyword */ ? isReadonlyTypeOperator : undefined);
+                    return getAllReferencesForKeyword(sourceFiles, node.kind, cancellationToken, node.kind === 143 /* ReadonlyKeyword */ ? isReadonlyTypeOperator : undefined);
+                }
+                if (ts.isStaticModifier(node) && ts.isClassStaticBlockDeclaration(node.parent)) {
+                    return [{ definition: { type: 2 /* Keyword */, node: node }, references: [nodeEntry(node)] }];
                 }
                 // Labels
                 if (ts.isJumpStatementTarget(node)) {
@@ -128250,7 +131146,7 @@
                 if (ts.isThis(node)) {
                     return getReferencesForThisKeyword(node, sourceFiles, cancellationToken);
                 }
-                if (node.kind === 105 /* SuperKeyword */) {
+                if (node.kind === 106 /* SuperKeyword */) {
                     return getReferencesForSuperKeyword(node);
                 }
                 return undefined;
@@ -128267,7 +131163,7 @@
                     // When renaming at an export specifier, rename the export and not the thing being exported.
                     getReferencesAtExportSpecifier(exportSpecifier.name, symbol, exportSpecifier, state.createSearch(node, originalSymbol, /*comingFrom*/ undefined), state, /*addReferencesHere*/ true, /*alwaysGetReferences*/ true);
                 }
-                else if (node && node.kind === 87 /* DefaultKeyword */ && symbol.escapedName === "default" /* Default */ && symbol.parent) {
+                else if (node && node.kind === 88 /* DefaultKeyword */ && symbol.escapedName === "default" /* Default */ && symbol.parent) {
                     addReference(node, symbol, state);
                     searchForImportsOfExport(node, symbol, { exportingModuleSymbol: symbol.parent, exportKind: 1 /* Default */ }, state);
                 }
@@ -128295,10 +131191,10 @@
             }
             function getSpecialSearchKind(node) {
                 switch (node.kind) {
-                    case 167 /* Constructor */:
-                    case 132 /* ConstructorKeyword */:
+                    case 169 /* Constructor */:
+                    case 133 /* ConstructorKeyword */:
                         return 1 /* Constructor */;
-                    case 78 /* Identifier */:
+                    case 79 /* Identifier */:
                         if (ts.isClassLike(node.parent)) {
                             ts.Debug.assert(node.parent.name === node);
                             return 2 /* Class */;
@@ -128538,7 +131434,7 @@
                 // If this is the symbol of a named function expression or named class expression,
                 // then named references are limited to its own scope.
                 var declarations = symbol.declarations, flags = symbol.flags, parent = symbol.parent, valueDeclaration = symbol.valueDeclaration;
-                if (valueDeclaration && (valueDeclaration.kind === 209 /* FunctionExpression */ || valueDeclaration.kind === 222 /* ClassExpression */)) {
+                if (valueDeclaration && (valueDeclaration.kind === 211 /* FunctionExpression */ || valueDeclaration.kind === 224 /* ClassExpression */)) {
                     return valueDeclaration;
                 }
                 if (!declarations) {
@@ -128548,7 +131444,7 @@
                 if (flags & (4 /* Property */ | 8192 /* Method */)) {
                     var privateDeclaration = ts.find(declarations, function (d) { return ts.hasEffectiveModifier(d, 8 /* Private */) || ts.isPrivateIdentifierClassElementDeclaration(d); });
                     if (privateDeclaration) {
-                        return ts.getAncestor(privateDeclaration, 253 /* ClassDeclaration */);
+                        return ts.getAncestor(privateDeclaration, 255 /* ClassDeclaration */);
                     }
                     // Else this is a public property and could be accessed from anywhere.
                     return undefined;
@@ -128577,7 +131473,7 @@
                         // Different declarations have different containers, bail out
                         return undefined;
                     }
-                    if (!container || container.kind === 298 /* SourceFile */ && !ts.isExternalOrCommonJsModule(container)) {
+                    if (!container || container.kind === 300 /* SourceFile */ && !ts.isExternalOrCommonJsModule(container)) {
                         // This is a global variable and not an external module, any declaration defined
                         // within this scope is visible outside the file
                         return undefined;
@@ -128693,8 +131589,12 @@
             function isValidReferencePosition(node, searchSymbolName) {
                 // Compare the length so we filter out strict superstrings of the symbol we are looking for
                 switch (node.kind) {
-                    case 79 /* PrivateIdentifier */:
-                    case 78 /* Identifier */:
+                    case 80 /* PrivateIdentifier */:
+                        if (ts.isJSDocMemberName(node.parent)) {
+                            return true;
+                        }
+                    // falls through I guess
+                    case 79 /* Identifier */:
                         return node.text.length === searchSymbolName.length;
                     case 14 /* NoSubstitutionTemplateLiteral */:
                     case 10 /* StringLiteral */: {
@@ -128704,7 +131604,7 @@
                     }
                     case 8 /* NumericLiteral */:
                         return ts.isLiteralNameOfPropertyDeclarationOrIndexAccess(node) && node.text.length === searchSymbolName.length;
-                    case 87 /* DefaultKeyword */:
+                    case 88 /* DefaultKeyword */:
                         return "default".length === searchSymbolName.length;
                     default:
                         return false;
@@ -128770,7 +131670,7 @@
                     return;
                 }
                 if (ts.isExportSpecifier(parent)) {
-                    ts.Debug.assert(referenceLocation.kind === 78 /* Identifier */);
+                    ts.Debug.assert(referenceLocation.kind === 79 /* Identifier */);
                     getReferencesAtExportSpecifier(referenceLocation, referenceSymbol, parent, search, state, addReferencesHere);
                     return;
                 }
@@ -128794,7 +131694,7 @@
                         ts.Debug.assertNever(state.specialSearchKind);
                 }
                 // Use the parent symbol if the location is commonjs require syntax on javascript files only.
-                referenceSymbol = ts.isInJSFile(referenceLocation) && referenceLocation.parent.kind === 199 /* BindingElement */ && ts.isRequireVariableDeclaration(referenceLocation.parent)
+                referenceSymbol = ts.isInJSFile(referenceLocation) && referenceLocation.parent.kind === 201 /* BindingElement */ && ts.isRequireVariableDeclaration(referenceLocation.parent)
                     ? referenceLocation.parent.symbol
                     : referenceSymbol;
                 getImportOrExportReferences(referenceLocation, referenceSymbol, search, state);
@@ -128830,8 +131730,8 @@
                 }
                 // For `export { foo as bar }`, rename `foo`, but not `bar`.
                 if (!isForRenameWithPrefixAndSuffixText(state.options) || alwaysGetReferences) {
-                    var isDefaultExport = referenceLocation.originalKeywordKind === 87 /* DefaultKeyword */
-                        || exportSpecifier.name.originalKeywordKind === 87 /* DefaultKeyword */;
+                    var isDefaultExport = referenceLocation.originalKeywordKind === 88 /* DefaultKeyword */
+                        || exportSpecifier.name.originalKeywordKind === 88 /* DefaultKeyword */;
                     var exportKind = isDefaultExport ? 1 /* Default */ : 0 /* Named */;
                     var exportSymbol = ts.Debug.checkDefined(exportSpecifier.symbol);
                     var exportInfo = FindAllReferences.getExportInfo(exportSymbol, exportKind, state.checker);
@@ -128912,7 +131812,7 @@
                 }
                 var pusher = function () { return state.referenceAdder(search.symbol); };
                 if (ts.isClassLike(referenceLocation.parent)) {
-                    ts.Debug.assert(referenceLocation.kind === 87 /* DefaultKeyword */ || referenceLocation.parent.name === referenceLocation);
+                    ts.Debug.assert(referenceLocation.kind === 88 /* DefaultKeyword */ || referenceLocation.parent.name === referenceLocation);
                     // This is the class declaration containing the constructor.
                     findOwnConstructorReferences(search.symbol, sourceFile, pusher());
                 }
@@ -128934,12 +131834,12 @@
                 var addRef = state.referenceAdder(search.symbol);
                 for (var _i = 0, _a = classLike.members; _i < _a.length; _i++) {
                     var member = _a[_i];
-                    if (!(ts.isMethodOrAccessor(member) && ts.hasSyntacticModifier(member, 32 /* Static */))) {
+                    if (!(ts.isMethodOrAccessor(member) && ts.isStatic(member))) {
                         continue;
                     }
                     if (member.body) {
                         member.body.forEachChild(function cb(node) {
-                            if (node.kind === 107 /* ThisKeyword */) {
+                            if (node.kind === 108 /* ThisKeyword */) {
                                 addRef(node);
                             }
                             else if (!ts.isFunctionLike(node) && !ts.isClassLike(node)) {
@@ -128958,18 +131858,18 @@
                 if (constructorSymbol && constructorSymbol.declarations) {
                     for (var _i = 0, _a = constructorSymbol.declarations; _i < _a.length; _i++) {
                         var decl = _a[_i];
-                        var ctrKeyword = ts.findChildOfKind(decl, 132 /* ConstructorKeyword */, sourceFile);
-                        ts.Debug.assert(decl.kind === 167 /* Constructor */ && !!ctrKeyword);
+                        var ctrKeyword = ts.findChildOfKind(decl, 133 /* ConstructorKeyword */, sourceFile);
+                        ts.Debug.assert(decl.kind === 169 /* Constructor */ && !!ctrKeyword);
                         addNode(ctrKeyword);
                     }
                 }
                 if (classSymbol.exports) {
                     classSymbol.exports.forEach(function (member) {
                         var decl = member.valueDeclaration;
-                        if (decl && decl.kind === 166 /* MethodDeclaration */) {
+                        if (decl && decl.kind === 167 /* MethodDeclaration */) {
                             var body = decl.body;
                             if (body) {
-                                forEachDescendantOfKind(body, 107 /* ThisKeyword */, function (thisKeyword) {
+                                forEachDescendantOfKind(body, 108 /* ThisKeyword */, function (thisKeyword) {
                                     if (ts.isNewExpressionTarget(thisKeyword)) {
                                         addNode(thisKeyword);
                                     }
@@ -128990,10 +131890,10 @@
                 }
                 for (var _i = 0, _a = constructor.declarations; _i < _a.length; _i++) {
                     var decl = _a[_i];
-                    ts.Debug.assert(decl.kind === 167 /* Constructor */);
+                    ts.Debug.assert(decl.kind === 169 /* Constructor */);
                     var body = decl.body;
                     if (body) {
-                        forEachDescendantOfKind(body, 105 /* SuperKeyword */, function (node) {
+                        forEachDescendantOfKind(body, 106 /* SuperKeyword */, function (node) {
                             if (ts.isCallExpressionTarget(node)) {
                                 addNode(node);
                             }
@@ -129017,10 +131917,10 @@
                     addReference(refNode);
                     return;
                 }
-                if (refNode.kind !== 78 /* Identifier */) {
+                if (refNode.kind !== 79 /* Identifier */) {
                     return;
                 }
-                if (refNode.parent.kind === 290 /* ShorthandPropertyAssignment */) {
+                if (refNode.parent.kind === 292 /* ShorthandPropertyAssignment */) {
                     // Go ahead and dereference the shorthand assignment by going to its definition
                     getReferenceEntriesForShorthandPropertyAssignment(refNode, state.checker, addReference);
                 }
@@ -129040,7 +131940,7 @@
                     }
                     else if (ts.isFunctionLike(typeHavingNode) && typeHavingNode.body) {
                         var body = typeHavingNode.body;
-                        if (body.kind === 231 /* Block */) {
+                        if (body.kind === 233 /* Block */) {
                             ts.forEachReturnStatement(body, function (returnStatement) {
                                 if (returnStatement.expression)
                                     addIfImplementation(returnStatement.expression);
@@ -129068,13 +131968,13 @@
              */
             function isImplementationExpression(node) {
                 switch (node.kind) {
-                    case 208 /* ParenthesizedExpression */:
+                    case 210 /* ParenthesizedExpression */:
                         return isImplementationExpression(node.expression);
-                    case 210 /* ArrowFunction */:
-                    case 209 /* FunctionExpression */:
-                    case 201 /* ObjectLiteralExpression */:
-                    case 222 /* ClassExpression */:
-                    case 200 /* ArrayLiteralExpression */:
+                    case 212 /* ArrowFunction */:
+                    case 211 /* FunctionExpression */:
+                    case 203 /* ObjectLiteralExpression */:
+                    case 224 /* ClassExpression */:
+                    case 202 /* ArrayLiteralExpression */:
                         return true;
                     default:
                         return false;
@@ -129127,13 +132027,13 @@
                 // Whether 'super' occurs in a static context within a class.
                 var staticFlag = 32 /* Static */;
                 switch (searchSpaceNode.kind) {
-                    case 164 /* PropertyDeclaration */:
-                    case 163 /* PropertySignature */:
-                    case 166 /* MethodDeclaration */:
-                    case 165 /* MethodSignature */:
-                    case 167 /* Constructor */:
-                    case 168 /* GetAccessor */:
-                    case 169 /* SetAccessor */:
+                    case 165 /* PropertyDeclaration */:
+                    case 164 /* PropertySignature */:
+                    case 167 /* MethodDeclaration */:
+                    case 166 /* MethodSignature */:
+                    case 169 /* Constructor */:
+                    case 170 /* GetAccessor */:
+                    case 171 /* SetAccessor */:
                         staticFlag &= ts.getSyntacticModifierFlags(searchSpaceNode);
                         searchSpaceNode = searchSpaceNode.parent; // re-assign to be the owning class
                         break;
@@ -129142,55 +132042,55 @@
                 }
                 var sourceFile = searchSpaceNode.getSourceFile();
                 var references = ts.mapDefined(getPossibleSymbolReferenceNodes(sourceFile, "super", searchSpaceNode), function (node) {
-                    if (node.kind !== 105 /* SuperKeyword */) {
+                    if (node.kind !== 106 /* SuperKeyword */) {
                         return;
                     }
                     var container = ts.getSuperContainer(node, /*stopOnFunctions*/ false);
                     // If we have a 'super' container, we must have an enclosing class.
                     // Now make sure the owning class is the same as the search-space
                     // and has the same static qualifier as the original 'super's owner.
-                    return container && (32 /* Static */ & ts.getSyntacticModifierFlags(container)) === staticFlag && container.parent.symbol === searchSpaceNode.symbol ? nodeEntry(node) : undefined;
+                    return container && ts.isStatic(container) === !!staticFlag && container.parent.symbol === searchSpaceNode.symbol ? nodeEntry(node) : undefined;
                 });
                 return [{ definition: { type: 0 /* Symbol */, symbol: searchSpaceNode.symbol }, references: references }];
             }
             function isParameterName(node) {
-                return node.kind === 78 /* Identifier */ && node.parent.kind === 161 /* Parameter */ && node.parent.name === node;
+                return node.kind === 79 /* Identifier */ && node.parent.kind === 162 /* Parameter */ && node.parent.name === node;
             }
             function getReferencesForThisKeyword(thisOrSuperKeyword, sourceFiles, cancellationToken) {
                 var searchSpaceNode = ts.getThisContainer(thisOrSuperKeyword, /* includeArrowFunctions */ false);
                 // Whether 'this' occurs in a static context within a class.
                 var staticFlag = 32 /* Static */;
                 switch (searchSpaceNode.kind) {
-                    case 166 /* MethodDeclaration */:
-                    case 165 /* MethodSignature */:
+                    case 167 /* MethodDeclaration */:
+                    case 166 /* MethodSignature */:
                         if (ts.isObjectLiteralMethod(searchSpaceNode)) {
                             staticFlag &= ts.getSyntacticModifierFlags(searchSpaceNode);
                             searchSpaceNode = searchSpaceNode.parent; // re-assign to be the owning object literals
                             break;
                         }
                     // falls through
-                    case 164 /* PropertyDeclaration */:
-                    case 163 /* PropertySignature */:
-                    case 167 /* Constructor */:
-                    case 168 /* GetAccessor */:
-                    case 169 /* SetAccessor */:
+                    case 165 /* PropertyDeclaration */:
+                    case 164 /* PropertySignature */:
+                    case 169 /* Constructor */:
+                    case 170 /* GetAccessor */:
+                    case 171 /* SetAccessor */:
                         staticFlag &= ts.getSyntacticModifierFlags(searchSpaceNode);
                         searchSpaceNode = searchSpaceNode.parent; // re-assign to be the owning class
                         break;
-                    case 298 /* SourceFile */:
+                    case 300 /* SourceFile */:
                         if (ts.isExternalModule(searchSpaceNode) || isParameterName(thisOrSuperKeyword)) {
                             return undefined;
                         }
                     // falls through
-                    case 252 /* FunctionDeclaration */:
-                    case 209 /* FunctionExpression */:
+                    case 254 /* FunctionDeclaration */:
+                    case 211 /* FunctionExpression */:
                         break;
                     // Computed properties in classes are not handled here because references to this are illegal,
                     // so there is no point finding references to them.
                     default:
                         return undefined;
                 }
-                var references = ts.flatMap(searchSpaceNode.kind === 298 /* SourceFile */ ? sourceFiles : [searchSpaceNode.getSourceFile()], function (sourceFile) {
+                var references = ts.flatMap(searchSpaceNode.kind === 300 /* SourceFile */ ? sourceFiles : [searchSpaceNode.getSourceFile()], function (sourceFile) {
                     cancellationToken.throwIfCancellationRequested();
                     return getPossibleSymbolReferenceNodes(sourceFile, "this", ts.isSourceFile(searchSpaceNode) ? sourceFile : searchSpaceNode).filter(function (node) {
                         if (!ts.isThis(node)) {
@@ -129198,20 +132098,20 @@
                         }
                         var container = ts.getThisContainer(node, /* includeArrowFunctions */ false);
                         switch (searchSpaceNode.kind) {
-                            case 209 /* FunctionExpression */:
-                            case 252 /* FunctionDeclaration */:
+                            case 211 /* FunctionExpression */:
+                            case 254 /* FunctionDeclaration */:
                                 return searchSpaceNode.symbol === container.symbol;
-                            case 166 /* MethodDeclaration */:
-                            case 165 /* MethodSignature */:
+                            case 167 /* MethodDeclaration */:
+                            case 166 /* MethodSignature */:
                                 return ts.isObjectLiteralMethod(searchSpaceNode) && searchSpaceNode.symbol === container.symbol;
-                            case 222 /* ClassExpression */:
-                            case 253 /* ClassDeclaration */:
-                            case 201 /* ObjectLiteralExpression */:
+                            case 224 /* ClassExpression */:
+                            case 255 /* ClassDeclaration */:
+                            case 203 /* ObjectLiteralExpression */:
                                 // Make sure the container belongs to the same class/object literals
                                 // and has the appropriate static modifier from the original container.
-                                return container.parent && searchSpaceNode.symbol === container.parent.symbol && (ts.getSyntacticModifierFlags(container) & 32 /* Static */) === staticFlag;
-                            case 298 /* SourceFile */:
-                                return container.kind === 298 /* SourceFile */ && !ts.isExternalModule(container) && !isParameterName(node);
+                                return container.parent && searchSpaceNode.symbol === container.parent.symbol && ts.isStatic(container) === !!staticFlag;
+                            case 300 /* SourceFile */:
+                                return container.kind === 300 /* SourceFile */ && !ts.isExternalModule(container) && !isParameterName(node);
                         }
                     });
                 }).map(function (n) { return nodeEntry(n); });
@@ -129251,7 +132151,7 @@
                 forEachRelatedSymbol(symbol, location, checker, isForRename, !(isForRename && providePrefixAndSuffixText), function (sym, root, base) {
                     // static method/property and instance method/property might have the same name. Only include static or only include instance.
                     if (base) {
-                        if (isStatic(symbol) !== isStatic(base)) {
+                        if (isStaticSymbol(symbol) !== isStaticSymbol(base)) {
                             base = undefined;
                         }
                     }
@@ -129321,7 +132221,7 @@
                     ts.Debug.assert(paramProps.length === 2 && !!(paramProps[0].flags & 1 /* FunctionScopedVariable */) && !!(paramProps[1].flags & 4 /* Property */)); // is [parameter, property]
                     return fromRoot(symbol.flags & 1 /* FunctionScopedVariable */ ? paramProps[1] : paramProps[0]);
                 }
-                var exportSpecifier = ts.getDeclarationOfKind(symbol, 271 /* ExportSpecifier */);
+                var exportSpecifier = ts.getDeclarationOfKind(symbol, 273 /* ExportSpecifier */);
                 if (!isForRenamePopulateSearchSymbolSet || exportSpecifier && !exportSpecifier.propertyName) {
                     var localSymbol = exportSpecifier && checker.getExportSpecifierLocalTargetSymbol(exportSpecifier);
                     if (localSymbol) {
@@ -129366,7 +132266,7 @@
                     });
                 }
                 function getPropertySymbolOfObjectBindingPatternWithoutPropertyName(symbol, checker) {
-                    var bindingElement = ts.getDeclarationOfKind(symbol, 199 /* BindingElement */);
+                    var bindingElement = ts.getDeclarationOfKind(symbol, 201 /* BindingElement */);
                     if (bindingElement && ts.isObjectBindingElementWithoutPropertyName(bindingElement)) {
                         return ts.getPropertySymbolFromBindingElement(checker, bindingElement);
                     }
@@ -129398,7 +132298,7 @@
                     }); });
                 }
             }
-            function isStatic(symbol) {
+            function isStaticSymbol(symbol) {
                 if (!symbol.valueDeclaration) {
                     return false;
                 }
@@ -129412,7 +132312,7 @@
                     // check whether the symbol used to search itself is just the searched one.
                     if (baseSymbol) {
                         // static method/property and instance method/property might have the same name. Only check static or only check instance.
-                        if (isStatic(referenceSymbol) !== isStatic(baseSymbol)) {
+                        if (isStaticSymbol(referenceSymbol) !== isStaticSymbol(baseSymbol)) {
                             baseSymbol = undefined;
                         }
                     }
@@ -129537,6 +132437,7 @@
                 || ts.isFunctionExpression(node)
                 || ts.isClassDeclaration(node)
                 || ts.isClassExpression(node)
+                || ts.isClassStaticBlockDeclaration(node)
                 || ts.isMethodDeclaration(node)
                 || ts.isMethodSignature(node)
                 || ts.isGetAccessorDeclaration(node)
@@ -129552,6 +132453,7 @@
                 || ts.isModuleDeclaration(node) && ts.isIdentifier(node.name)
                 || ts.isFunctionDeclaration(node)
                 || ts.isClassDeclaration(node)
+                || ts.isClassStaticBlockDeclaration(node)
                 || ts.isMethodDeclaration(node)
                 || ts.isMethodSignature(node)
                 || ts.isGetAccessorDeclaration(node)
@@ -129570,7 +132472,7 @@
             return ts.Debug.checkDefined(node.modifiers && ts.find(node.modifiers, isDefaultModifier));
         }
         function isDefaultModifier(node) {
-            return node.kind === 87 /* DefaultKeyword */;
+            return node.kind === 88 /* DefaultKeyword */;
         }
         /** Gets the symbol for a call hierarchy declaration. */
         function getSymbolOfCallHierarchyDeclaration(typeChecker, node) {
@@ -129588,6 +132490,15 @@
                     return { text: "default", pos: defaultModifier.getStart(), end: defaultModifier.getEnd() };
                 }
             }
+            if (ts.isClassStaticBlockDeclaration(node)) {
+                var sourceFile = node.getSourceFile();
+                var pos = ts.skipTrivia(sourceFile.text, ts.moveRangePastModifiers(node).pos);
+                var end = pos + 6; /* "static".length */
+                var typeChecker = program.getTypeChecker();
+                var symbol = typeChecker.getSymbolAtLocation(node.parent);
+                var prefix = symbol ? typeChecker.symbolToString(symbol, node.parent) + " " : "";
+                return { text: prefix + "static {}", pos: pos, end: end };
+            }
             var declName = isConstNamedExpression(node) ? node.parent.name :
                 ts.Debug.checkDefined(ts.getNameOfDeclaration(node), "Expected call hierarchy item to have a name");
             var text = ts.isIdentifier(declName) ? ts.idText(declName) :
@@ -129619,16 +132530,16 @@
                 return;
             }
             switch (node.kind) {
-                case 168 /* GetAccessor */:
-                case 169 /* SetAccessor */:
-                case 166 /* MethodDeclaration */:
-                    if (node.parent.kind === 201 /* ObjectLiteralExpression */) {
+                case 170 /* GetAccessor */:
+                case 171 /* SetAccessor */:
+                case 167 /* MethodDeclaration */:
+                    if (node.parent.kind === 203 /* ObjectLiteralExpression */) {
                         return (_a = ts.getAssignedName(node.parent)) === null || _a === void 0 ? void 0 : _a.getText();
                     }
                     return (_b = ts.getNameOfDeclaration(node.parent)) === null || _b === void 0 ? void 0 : _b.getText();
-                case 252 /* FunctionDeclaration */:
-                case 253 /* ClassDeclaration */:
-                case 257 /* ModuleDeclaration */:
+                case 254 /* FunctionDeclaration */:
+                case 255 /* ClassDeclaration */:
+                case 259 /* ModuleDeclaration */:
                     if (ts.isModuleBlock(node.parent) && ts.isIdentifier(node.parent.parent.name)) {
                         return node.parent.parent.name.getText();
                     }
@@ -129674,6 +132585,9 @@
         /** Find the implementation or the first declaration for a call hierarchy declaration. */
         function findImplementationOrAllInitialDeclarations(typeChecker, node) {
             var _a, _b, _c;
+            if (ts.isClassStaticBlockDeclaration(node)) {
+                return node;
+            }
             if (ts.isFunctionLikeDeclaration(node)) {
                 return (_b = (_a = findImplementation(typeChecker, node)) !== null && _a !== void 0 ? _a : findAllInitialDeclarations(typeChecker, node)) !== null && _b !== void 0 ? _b : node;
             }
@@ -129681,13 +132595,14 @@
         }
         /** Resolves the call hierarchy declaration for a node. */
         function resolveCallHierarchyDeclaration(program, location) {
-            // A call hierarchy item must refer to either a SourceFile, Module Declaration, or something intrinsically callable that has a name:
+            // A call hierarchy item must refer to either a SourceFile, Module Declaration, Class Static Block, or something intrinsically callable that has a name:
             // - Class Declarations
             // - Class Expressions (with a name)
             // - Function Declarations
             // - Function Expressions (with a name or assigned to a const variable)
             // - Arrow Functions (assigned to a const variable)
             // - Constructors
+            // - Class `static {}` initializer blocks
             // - Methods
             // - Accessors
             //
@@ -129722,6 +132637,10 @@
                     }
                     return undefined;
                 }
+                if (location.kind === 124 /* StaticKeyword */ && ts.isClassStaticBlockDeclaration(location.parent)) {
+                    location = location.parent;
+                    continue;
+                }
                 // #39453
                 if (ts.isVariableDeclaration(location) && location.initializer && isConstNamedExpression(location.initializer)) {
                     return location.initializer;
@@ -129785,7 +132704,7 @@
         /** Gets the call sites that call into the provided call hierarchy declaration. */
         function getIncomingCalls(program, declaration, cancellationToken) {
             // Source files and modules have no incoming calls.
-            if (ts.isSourceFile(declaration) || ts.isModuleDeclaration(declaration)) {
+            if (ts.isSourceFile(declaration) || ts.isModuleDeclaration(declaration) || ts.isClassStaticBlockDeclaration(declaration)) {
                 return [];
             }
             var location = getCallHierarchyDeclarationReferenceNode(declaration);
@@ -129798,7 +132717,8 @@
                 var target = ts.isTaggedTemplateExpression(node) ? node.tag :
                     ts.isJsxOpeningLikeElement(node) ? node.tagName :
                         ts.isAccessExpression(node) ? node :
-                            node.expression;
+                            ts.isClassStaticBlockDeclaration(node) ? node :
+                                node.expression;
                 var declaration = resolveCallHierarchyDeclaration(program, target);
                 if (declaration) {
                     var range = ts.createTextRangeFromNode(target, node.getSourceFile());
@@ -129833,56 +132753,59 @@
                     return;
                 }
                 switch (node.kind) {
-                    case 78 /* Identifier */:
-                    case 261 /* ImportEqualsDeclaration */:
-                    case 262 /* ImportDeclaration */:
-                    case 268 /* ExportDeclaration */:
-                    case 254 /* InterfaceDeclaration */:
-                    case 255 /* TypeAliasDeclaration */:
+                    case 79 /* Identifier */:
+                    case 263 /* ImportEqualsDeclaration */:
+                    case 264 /* ImportDeclaration */:
+                    case 270 /* ExportDeclaration */:
+                    case 256 /* InterfaceDeclaration */:
+                    case 257 /* TypeAliasDeclaration */:
                         // do not descend into nodes that cannot contain callable nodes
                         return;
-                    case 207 /* TypeAssertionExpression */:
-                    case 225 /* AsExpression */:
+                    case 168 /* ClassStaticBlockDeclaration */:
+                        recordCallSite(node);
+                        return;
+                    case 209 /* TypeAssertionExpression */:
+                    case 227 /* AsExpression */:
                         // do not descend into the type side of an assertion
                         collect(node.expression);
                         return;
-                    case 250 /* VariableDeclaration */:
-                    case 161 /* Parameter */:
+                    case 252 /* VariableDeclaration */:
+                    case 162 /* Parameter */:
                         // do not descend into the type of a variable or parameter declaration
                         collect(node.name);
                         collect(node.initializer);
                         return;
-                    case 204 /* CallExpression */:
+                    case 206 /* CallExpression */:
                         // do not descend into the type arguments of a call expression
                         recordCallSite(node);
                         collect(node.expression);
                         ts.forEach(node.arguments, collect);
                         return;
-                    case 205 /* NewExpression */:
+                    case 207 /* NewExpression */:
                         // do not descend into the type arguments of a new expression
                         recordCallSite(node);
                         collect(node.expression);
                         ts.forEach(node.arguments, collect);
                         return;
-                    case 206 /* TaggedTemplateExpression */:
+                    case 208 /* TaggedTemplateExpression */:
                         // do not descend into the type arguments of a tagged template expression
                         recordCallSite(node);
                         collect(node.tag);
                         collect(node.template);
                         return;
-                    case 276 /* JsxOpeningElement */:
-                    case 275 /* JsxSelfClosingElement */:
+                    case 278 /* JsxOpeningElement */:
+                    case 277 /* JsxSelfClosingElement */:
                         // do not descend into the type arguments of a JsxOpeningLikeElement
                         recordCallSite(node);
                         collect(node.tagName);
                         collect(node.attributes);
                         return;
-                    case 162 /* Decorator */:
+                    case 163 /* Decorator */:
                         recordCallSite(node);
                         collect(node.expression);
                         return;
-                    case 202 /* PropertyAccessExpression */:
-                    case 203 /* ElementAccessExpression */:
+                    case 204 /* PropertyAccessExpression */:
+                    case 205 /* ElementAccessExpression */:
                         recordCallSite(node);
                         ts.forEachChild(node, collect);
                         break;
@@ -129910,6 +132833,9 @@
                 collect(implementation.body);
             }
         }
+        function collectCallSitesOfClassStaticBlockDeclaration(node, collect) {
+            collect(node.body);
+        }
         function collectCallSitesOfClassLikeDeclaration(node, collect) {
             ts.forEach(node.decorators, collect);
             var heritage = ts.getClassExtendsHeritageElement(node);
@@ -129926,30 +132852,36 @@
                     ts.forEach(member.parameters, collect);
                     collect(member.body);
                 }
+                else if (ts.isClassStaticBlockDeclaration(member)) {
+                    collect(member);
+                }
             }
         }
         function collectCallSites(program, node) {
             var callSites = [];
             var collect = createCallSiteCollector(program, callSites);
             switch (node.kind) {
-                case 298 /* SourceFile */:
+                case 300 /* SourceFile */:
                     collectCallSitesOfSourceFile(node, collect);
                     break;
-                case 257 /* ModuleDeclaration */:
+                case 259 /* ModuleDeclaration */:
                     collectCallSitesOfModuleDeclaration(node, collect);
                     break;
-                case 252 /* FunctionDeclaration */:
-                case 209 /* FunctionExpression */:
-                case 210 /* ArrowFunction */:
-                case 166 /* MethodDeclaration */:
-                case 168 /* GetAccessor */:
-                case 169 /* SetAccessor */:
+                case 254 /* FunctionDeclaration */:
+                case 211 /* FunctionExpression */:
+                case 212 /* ArrowFunction */:
+                case 167 /* MethodDeclaration */:
+                case 170 /* GetAccessor */:
+                case 171 /* SetAccessor */:
                     collectCallSitesOfFunctionLikeDeclaration(program.getTypeChecker(), node, collect);
                     break;
-                case 253 /* ClassDeclaration */:
-                case 222 /* ClassExpression */:
+                case 255 /* ClassDeclaration */:
+                case 224 /* ClassExpression */:
                     collectCallSitesOfClassLikeDeclaration(node, collect);
                     break;
+                case 168 /* ClassStaticBlockDeclaration */:
+                    collectCallSitesOfClassStaticBlockDeclaration(node, collect);
+                    break;
                 default:
                     ts.Debug.assertNever(node);
             }
@@ -130022,16 +132954,18 @@
                 case "include":
                 case "exclude": {
                     var foundExactMatch = updatePaths(property);
-                    if (!foundExactMatch && propertyName === "include" && ts.isArrayLiteralExpression(property.initializer)) {
-                        var includes = ts.mapDefined(property.initializer.elements, function (e) { return ts.isStringLiteral(e) ? e.text : undefined; });
-                        var matchers = ts.getFileMatcherPatterns(configDir, /*excludes*/ [], includes, useCaseSensitiveFileNames, currentDirectory);
-                        // If there isn't some include for this, add a new one.
-                        if (ts.getRegexFromPattern(ts.Debug.checkDefined(matchers.includeFilePattern), useCaseSensitiveFileNames).test(oldFileOrDirPath) &&
-                            !ts.getRegexFromPattern(ts.Debug.checkDefined(matchers.includeFilePattern), useCaseSensitiveFileNames).test(newFileOrDirPath)) {
-                            changeTracker.insertNodeAfter(configFile, ts.last(property.initializer.elements), ts.factory.createStringLiteral(relativePath(newFileOrDirPath)));
-                        }
+                    if (foundExactMatch || propertyName !== "include" || !ts.isArrayLiteralExpression(property.initializer))
+                        return;
+                    var includes = ts.mapDefined(property.initializer.elements, function (e) { return ts.isStringLiteral(e) ? e.text : undefined; });
+                    if (includes.length === 0)
+                        return;
+                    var matchers = ts.getFileMatcherPatterns(configDir, /*excludes*/ [], includes, useCaseSensitiveFileNames, currentDirectory);
+                    // If there isn't some include for this, add a new one.
+                    if (ts.getRegexFromPattern(ts.Debug.checkDefined(matchers.includeFilePattern), useCaseSensitiveFileNames).test(oldFileOrDirPath) &&
+                        !ts.getRegexFromPattern(ts.Debug.checkDefined(matchers.includeFilePattern), useCaseSensitiveFileNames).test(newFileOrDirPath)) {
+                        changeTracker.insertNodeAfter(configFile, ts.last(property.initializer.elements), ts.factory.createStringLiteral(relativePath(newFileOrDirPath)));
                     }
-                    break;
+                    return;
                 }
                 case "compilerOptions":
                     forEachProperty(property.initializer, function (property, propertyName) {
@@ -130050,11 +132984,10 @@
                             });
                         }
                     });
-                    break;
+                    return;
             }
         });
         function updatePaths(property) {
-            // Type annotation needed due to #7294
             var elements = ts.isArrayLiteralExpression(property.initializer) ? property.initializer.elements : [property.initializer];
             var foundExactMatch = false;
             for (var _i = 0, elements_1 = elements; _i < elements_1.length; _i++) {
@@ -130142,9 +133075,9 @@
             return undefined;
         // First try resolved module
         if (resolved.resolvedModule) {
-            var result_2 = tryChange(resolved.resolvedModule.resolvedFileName);
-            if (result_2)
-                return result_2;
+            var result_3 = tryChange(resolved.resolvedModule.resolvedFileName);
+            if (result_3)
+                return result_3;
         }
         // Then failed lookups that are in the list of sources
         var result = ts.forEach(resolved.failedLookupLocations, tryChangeWithIgnoringPackageJsonExisting)
@@ -130214,11 +133147,26 @@
             }
             var parent = node.parent;
             var typeChecker = program.getTypeChecker();
+            if (node.kind === 157 /* OverrideKeyword */ || (ts.isJSDocOverrideTag(node) && ts.rangeContainsPosition(node.tagName, position))) {
+                return getDefinitionFromOverriddenMember(typeChecker, node) || ts.emptyArray;
+            }
             // Labels
             if (ts.isJumpStatementTarget(node)) {
                 var label = ts.getTargetLabel(node.parent, node.text);
                 return label ? [createDefinitionInfoFromName(typeChecker, label, "label" /* label */, node.text, /*containerName*/ undefined)] : undefined; // TODO: GH#18217
             }
+            if (ts.isStaticModifier(node) && ts.isClassStaticBlockDeclaration(node.parent)) {
+                var classDecl = node.parent.parent;
+                var symbol_1 = getSymbol(classDecl, typeChecker);
+                var staticBlocks = ts.filter(classDecl.members, ts.isClassStaticBlockDeclaration);
+                var containerName_1 = symbol_1 ? typeChecker.symbolToString(symbol_1, classDecl) : "";
+                var sourceFile_1 = node.getSourceFile();
+                return ts.map(staticBlocks, function (staticBlock) {
+                    var pos = ts.moveRangePastModifiers(staticBlock).pos;
+                    pos = ts.skipTrivia(sourceFile_1.text, pos);
+                    return createDefinitionInfoFromName(typeChecker, staticBlock, "constructor" /* constructorImplementationElement */, "static {}", containerName_1, { start: pos, length: "static".length });
+                });
+            }
             var symbol = getSymbol(node, typeChecker);
             // Could not find a symbol e.g. node is string or number keyword,
             // or the symbol was an internal symbol and does not have a declaration e.g. undefined symbol
@@ -130237,7 +133185,7 @@
                 else {
                     var defs = getDefinitionFromSymbol(typeChecker, symbol, node, calledDeclaration) || ts.emptyArray;
                     // For a 'super()' call, put the signature first, else put the variable first.
-                    return node.kind === 105 /* SuperKeyword */ ? __spreadArray([sigInfo], defs) : __spreadArray(__spreadArray([], defs), [sigInfo]);
+                    return node.kind === 106 /* SuperKeyword */ ? __spreadArray([sigInfo], defs, true) : __spreadArray(__spreadArray([], defs, true), [sigInfo], false);
                 }
             }
             // Because name in short-hand property assignment has two different meanings: property name and property value,
@@ -130245,7 +133193,7 @@
             // go to the declaration of the property name (in this case stay at the same position). However, if go-to-definition
             // is performed at the location of property access, we would like to go to definition of the property in the short-hand
             // assignment. This case and others are handled by the following code.
-            if (node.parent.kind === 290 /* ShorthandPropertyAssignment */) {
+            if (node.parent.kind === 292 /* ShorthandPropertyAssignment */) {
                 var shorthandSymbol_1 = typeChecker.getShorthandAssignmentValueSymbol(symbol.valueDeclaration);
                 var definitions = (shorthandSymbol_1 === null || shorthandSymbol_1 === void 0 ? void 0 : shorthandSymbol_1.declarations) ? shorthandSymbol_1.declarations.map(function (decl) { return createDefinitionInfo(decl, typeChecker, shorthandSymbol_1, node); }) : ts.emptyArray;
                 return ts.concatenate(definitions, getDefinitionFromObjectLiteralElement(typeChecker, node) || ts.emptyArray);
@@ -130304,6 +133252,25 @@
                 }
             }
         }
+        function getDefinitionFromOverriddenMember(typeChecker, node) {
+            var classElement = ts.findAncestor(node, ts.isClassElement);
+            if (!(classElement && classElement.name))
+                return;
+            var baseDeclaration = ts.findAncestor(classElement, ts.isClassLike);
+            if (!baseDeclaration)
+                return;
+            var baseTypeNode = ts.getEffectiveBaseTypeNode(baseDeclaration);
+            var baseType = baseTypeNode ? typeChecker.getTypeAtLocation(baseTypeNode) : undefined;
+            if (!baseType)
+                return;
+            var name = ts.unescapeLeadingUnderscores(ts.getTextOfPropertyName(classElement.name));
+            var symbol = ts.hasStaticModifier(classElement)
+                ? typeChecker.getPropertyOfType(typeChecker.getTypeOfSymbolAtLocation(baseType.symbol, baseDeclaration), name)
+                : typeChecker.getPropertyOfType(baseType, name);
+            if (!symbol)
+                return;
+            return getDefinitionFromSymbol(typeChecker, symbol, node);
+        }
         function getReferenceAtPosition(sourceFile, position, program) {
             var _a, _b;
             var referencePath = findReferenceInPosition(sourceFile.referencedFiles, position);
@@ -130394,13 +133361,7 @@
         GoToDefinition.getDefinitionAndBoundSpan = getDefinitionAndBoundSpan;
         // At 'x.foo', see if the type of 'x' has an index signature, and if so find its declarations.
         function getDefinitionInfoForIndexSignatures(node, checker) {
-            if (!ts.isPropertyAccessExpression(node.parent) || node.parent.name !== node)
-                return;
-            var type = checker.getTypeAtLocation(node.parent.expression);
-            return ts.mapDefined(type.isUnionOrIntersection() ? type.types : [type], function (nonUnionType) {
-                var info = checker.getIndexInfoOfType(nonUnionType, 0 /* String */);
-                return info && info.declaration && createDefinitionFromSignatureDeclaration(checker, info.declaration);
-            });
+            return ts.mapDefined(checker.getIndexInfosAtLocation(node), function (info) { return info.declaration && createDefinitionFromSignatureDeclaration(checker, info.declaration); });
         }
         function getSymbol(node, checker) {
             var symbol = checker.getSymbolAtLocation(node);
@@ -130422,20 +133383,20 @@
         //   (2) when the aliased symbol is originating from an import.
         //
         function shouldSkipAlias(node, declaration) {
-            if (node.kind !== 78 /* Identifier */) {
+            if (node.kind !== 79 /* Identifier */) {
                 return false;
             }
             if (node.parent === declaration) {
                 return true;
             }
             switch (declaration.kind) {
-                case 263 /* ImportClause */:
-                case 261 /* ImportEqualsDeclaration */:
+                case 265 /* ImportClause */:
+                case 263 /* ImportEqualsDeclaration */:
                     return true;
-                case 266 /* ImportSpecifier */:
-                    return declaration.parent.kind === 265 /* NamedImports */;
-                case 199 /* BindingElement */:
-                case 250 /* VariableDeclaration */:
+                case 268 /* ImportSpecifier */:
+                    return declaration.parent.kind === 267 /* NamedImports */;
+                case 201 /* BindingElement */:
+                case 252 /* VariableDeclaration */:
                     return ts.isInJSFile(declaration) && ts.isRequireVariableDeclaration(declaration);
                 default:
                     return false;
@@ -130451,7 +133412,7 @@
             function getConstructSignatureDefinition() {
                 // Applicable only if we are in a new expression, or we are on a constructor declaration
                 // and in either case the symbol has a construct signature definition, i.e. class
-                if (symbol.flags & 32 /* Class */ && !(symbol.flags & (16 /* Function */ | 3 /* Variable */)) && (ts.isNewExpressionTarget(node) || node.kind === 132 /* ConstructorKeyword */)) {
+                if (symbol.flags & 32 /* Class */ && !(symbol.flags & (16 /* Function */ | 3 /* Variable */)) && (ts.isNewExpressionTarget(node) || node.kind === 133 /* ConstructorKeyword */)) {
                     var cls = ts.find(filteredDeclarations, ts.isClassLike) || ts.Debug.fail("Expected declaration to have at least one class-like declaration");
                     return getSignatureDefinition(cls.members, /*selectConstructors*/ true);
                 }
@@ -130483,10 +133444,12 @@
             return createDefinitionInfoFromName(checker, declaration, symbolKind, symbolName, containerName);
         }
         /** Creates a DefinitionInfo directly from the name of a declaration. */
-        function createDefinitionInfoFromName(checker, declaration, symbolKind, symbolName, containerName) {
-            var name = ts.getNameOfDeclaration(declaration) || declaration;
-            var sourceFile = name.getSourceFile();
-            var textSpan = ts.createTextSpanFromNode(name, sourceFile);
+        function createDefinitionInfoFromName(checker, declaration, symbolKind, symbolName, containerName, textSpan) {
+            var sourceFile = declaration.getSourceFile();
+            if (!textSpan) {
+                var name = ts.getNameOfDeclaration(declaration) || declaration;
+                textSpan = ts.createTextSpanFromNode(name, sourceFile);
+            }
             return __assign(__assign({ fileName: sourceFile.fileName, textSpan: textSpan, kind: symbolKind, name: symbolName, containerKind: undefined, // TODO: GH#18217
                 containerName: containerName }, ts.FindAllReferences.toContextSpan(textSpan, sourceFile, ts.FindAllReferences.getContextNode(declaration))), { isLocal: !isDefinitionVisible(checker, declaration) });
         }
@@ -130500,22 +133463,22 @@
                 return isDefinitionVisible(checker, declaration.parent);
             // Handle some exceptions here like arrow function, members of class and object literal expression which are technically not visible but we want the definition to be determined by its parent
             switch (declaration.kind) {
-                case 164 /* PropertyDeclaration */:
-                case 168 /* GetAccessor */:
-                case 169 /* SetAccessor */:
-                case 166 /* MethodDeclaration */:
+                case 165 /* PropertyDeclaration */:
+                case 170 /* GetAccessor */:
+                case 171 /* SetAccessor */:
+                case 167 /* MethodDeclaration */:
                     // Private/protected properties/methods are not visible
                     if (ts.hasEffectiveModifier(declaration, 8 /* Private */))
                         return false;
                 // Public properties/methods are visible if its parents are visible, so:
                 // falls through
-                case 167 /* Constructor */:
-                case 289 /* PropertyAssignment */:
-                case 290 /* ShorthandPropertyAssignment */:
-                case 201 /* ObjectLiteralExpression */:
-                case 222 /* ClassExpression */:
-                case 210 /* ArrowFunction */:
-                case 209 /* FunctionExpression */:
+                case 169 /* Constructor */:
+                case 291 /* PropertyAssignment */:
+                case 292 /* ShorthandPropertyAssignment */:
+                case 203 /* ObjectLiteralExpression */:
+                case 224 /* ClassExpression */:
+                case 212 /* ArrowFunction */:
+                case 211 /* FunctionExpression */:
                     return isDefinitionVisible(checker, declaration.parent);
                 default:
                     return false;
@@ -130553,9 +133516,9 @@
         }
         function isConstructorLike(node) {
             switch (node.kind) {
-                case 167 /* Constructor */:
-                case 176 /* ConstructorType */:
-                case 171 /* ConstructSignature */:
+                case 169 /* Constructor */:
+                case 178 /* ConstructorType */:
+                case 173 /* ConstructSignature */:
                     return true;
                 default:
                     return false;
@@ -130660,10 +133623,20 @@
             var parts = [];
             ts.forEachUnique(declarations, function (declaration) {
                 for (var _i = 0, _a = getCommentHavingNodes(declaration); _i < _a.length; _i++) {
-                    var comment = _a[_i].comment;
-                    if (comment === undefined)
+                    var jsdoc = _a[_i];
+                    // skip comments containing @typedefs since they're not associated with particular declarations
+                    // Exceptions:
+                    // - @typedefs are themselves declarations with associated comments
+                    // - @param or @return indicate that the author thinks of it as a 'local' @typedef that's part of the function documentation
+                    if (jsdoc.comment === undefined
+                        || ts.isJSDoc(jsdoc)
+                            && declaration.kind !== 340 /* JSDocTypedefTag */ && declaration.kind !== 333 /* JSDocCallbackTag */
+                            && jsdoc.tags
+                            && jsdoc.tags.some(function (t) { return t.kind === 340 /* JSDocTypedefTag */ || t.kind === 333 /* JSDocCallbackTag */; })
+                            && !jsdoc.tags.some(function (t) { return t.kind === 335 /* JSDocParameterTag */ || t.kind === 336 /* JSDocReturnTag */; })) {
                         continue;
-                    var newparts = getDisplayPartsFromComment(comment, checker);
+                    }
+                    var newparts = getDisplayPartsFromComment(jsdoc.comment, checker);
                     if (!ts.contains(parts, newparts, isIdenticalListOfDisplayParts)) {
                         parts.push(newparts);
                     }
@@ -130677,11 +133650,11 @@
         }
         function getCommentHavingNodes(declaration) {
             switch (declaration.kind) {
-                case 330 /* JSDocParameterTag */:
-                case 337 /* JSDocPropertyTag */:
+                case 335 /* JSDocParameterTag */:
+                case 342 /* JSDocPropertyTag */:
                     return [declaration];
-                case 328 /* JSDocCallbackTag */:
-                case 335 /* JSDocTypedefTag */:
+                case 333 /* JSDocCallbackTag */:
+                case 340 /* JSDocTypedefTag */:
                     return [declaration, declaration.parent];
                 default:
                     return ts.getJSDocCommentsAndTags(declaration);
@@ -130689,39 +133662,47 @@
         }
         function getJsDocTagsFromDeclarations(declarations, checker) {
             // Only collect doc comments from duplicate declarations once.
-            var tags = [];
+            var infos = [];
             ts.forEachUnique(declarations, function (declaration) {
-                for (var _i = 0, _a = ts.getJSDocTags(declaration); _i < _a.length; _i++) {
-                    var tag = _a[_i];
-                    tags.push({ name: tag.tagName.text, text: getCommentDisplayParts(tag, checker) });
+                var tags = ts.getJSDocTags(declaration);
+                // skip comments containing @typedefs since they're not associated with particular declarations
+                // Exceptions:
+                // - @param or @return indicate that the author thinks of it as a 'local' @typedef that's part of the function documentation
+                if (tags.some(function (t) { return t.kind === 340 /* JSDocTypedefTag */ || t.kind === 333 /* JSDocCallbackTag */; })
+                    && !tags.some(function (t) { return t.kind === 335 /* JSDocParameterTag */ || t.kind === 336 /* JSDocReturnTag */; })) {
+                    return;
+                }
+                for (var _i = 0, tags_1 = tags; _i < tags_1.length; _i++) {
+                    var tag = tags_1[_i];
+                    infos.push({ name: tag.tagName.text, text: getCommentDisplayParts(tag, checker) });
                 }
             });
-            return tags;
+            return infos;
         }
         JsDoc.getJsDocTagsFromDeclarations = getJsDocTagsFromDeclarations;
         function getDisplayPartsFromComment(comment, checker) {
             if (typeof comment === "string") {
                 return [ts.textPart(comment)];
             }
-            return ts.flatMap(comment, function (node) { return node.kind === 313 /* JSDocText */ ? [ts.textPart(node.text)] : ts.buildLinkParts(node, checker); });
+            return ts.flatMap(comment, function (node) { return node.kind === 316 /* JSDocText */ ? [ts.textPart(node.text)] : ts.buildLinkParts(node, checker); });
         }
         function getCommentDisplayParts(tag, checker) {
             var comment = tag.comment, kind = tag.kind;
             var namePart = getTagNameDisplayPart(kind);
             switch (kind) {
-                case 319 /* JSDocImplementsTag */:
+                case 324 /* JSDocImplementsTag */:
                     return withNode(tag.class);
-                case 318 /* JSDocAugmentsTag */:
+                case 323 /* JSDocAugmentsTag */:
                     return withNode(tag.class);
-                case 334 /* JSDocTemplateTag */:
+                case 339 /* JSDocTemplateTag */:
                     return addComment(tag.typeParameters.map(function (tp) { return tp.getText(); }).join(", "));
-                case 333 /* JSDocTypeTag */:
+                case 338 /* JSDocTypeTag */:
                     return withNode(tag.typeExpression);
-                case 335 /* JSDocTypedefTag */:
-                case 328 /* JSDocCallbackTag */:
-                case 337 /* JSDocPropertyTag */:
-                case 330 /* JSDocParameterTag */:
-                case 336 /* JSDocSeeTag */:
+                case 340 /* JSDocTypedefTag */:
+                case 333 /* JSDocCallbackTag */:
+                case 342 /* JSDocPropertyTag */:
+                case 335 /* JSDocParameterTag */:
+                case 341 /* JSDocSeeTag */:
                     var name = tag.name;
                     return name ? withNode(name)
                         : comment === undefined ? undefined
@@ -130735,10 +133716,10 @@
             function addComment(s) {
                 if (comment) {
                     if (s.match(/^https?$/)) {
-                        return __spreadArray([ts.textPart(s)], getDisplayPartsFromComment(comment, checker));
+                        return __spreadArray([ts.textPart(s)], getDisplayPartsFromComment(comment, checker), true);
                     }
                     else {
-                        return __spreadArray([namePart(s), ts.spacePart()], getDisplayPartsFromComment(comment, checker));
+                        return __spreadArray([namePart(s), ts.spacePart()], getDisplayPartsFromComment(comment, checker), true);
                     }
                 }
                 else {
@@ -130748,14 +133729,14 @@
         }
         function getTagNameDisplayPart(kind) {
             switch (kind) {
-                case 330 /* JSDocParameterTag */:
+                case 335 /* JSDocParameterTag */:
                     return ts.parameterNamePart;
-                case 337 /* JSDocPropertyTag */:
+                case 342 /* JSDocPropertyTag */:
                     return ts.propertyNamePart;
-                case 334 /* JSDocTemplateTag */:
+                case 339 /* JSDocTemplateTag */:
                     return ts.typeParameterNamePart;
-                case 335 /* JSDocTypedefTag */:
-                case 328 /* JSDocCallbackTag */:
+                case 340 /* JSDocTypedefTag */:
+                case 333 /* JSDocCallbackTag */:
                     return ts.typeAliasNamePart;
                 default:
                     return ts.textPart;
@@ -130906,7 +133887,7 @@
         function parameterDocComments(parameters, isJavaScriptFile, indentationStr, newLine) {
             return parameters.map(function (_a, i) {
                 var name = _a.name, dotDotDotToken = _a.dotDotDotToken;
-                var paramName = name.kind === 78 /* Identifier */ ? name.text : "param" + i;
+                var paramName = name.kind === 79 /* Identifier */ ? name.text : "param" + i;
                 var type = isJavaScriptFile ? (dotDotDotToken ? "{...any} " : "{any} ") : "";
                 return indentationStr + " * @param " + type + paramName + newLine;
             }).join("");
@@ -130919,24 +133900,24 @@
         }
         function getCommentOwnerInfoWorker(commentOwner, options) {
             switch (commentOwner.kind) {
-                case 252 /* FunctionDeclaration */:
-                case 209 /* FunctionExpression */:
-                case 166 /* MethodDeclaration */:
-                case 167 /* Constructor */:
-                case 165 /* MethodSignature */:
-                case 210 /* ArrowFunction */:
+                case 254 /* FunctionDeclaration */:
+                case 211 /* FunctionExpression */:
+                case 167 /* MethodDeclaration */:
+                case 169 /* Constructor */:
+                case 166 /* MethodSignature */:
+                case 212 /* ArrowFunction */:
                     var host = commentOwner;
                     return { commentOwner: commentOwner, parameters: host.parameters, hasReturn: hasReturn(host, options) };
-                case 289 /* PropertyAssignment */:
+                case 291 /* PropertyAssignment */:
                     return getCommentOwnerInfoWorker(commentOwner.initializer, options);
-                case 253 /* ClassDeclaration */:
-                case 254 /* InterfaceDeclaration */:
-                case 163 /* PropertySignature */:
-                case 256 /* EnumDeclaration */:
-                case 292 /* EnumMember */:
-                case 255 /* TypeAliasDeclaration */:
+                case 255 /* ClassDeclaration */:
+                case 256 /* InterfaceDeclaration */:
+                case 164 /* PropertySignature */:
+                case 258 /* EnumDeclaration */:
+                case 294 /* EnumMember */:
+                case 257 /* TypeAliasDeclaration */:
                     return { commentOwner: commentOwner };
-                case 233 /* VariableStatement */: {
+                case 235 /* VariableStatement */: {
                     var varStatement = commentOwner;
                     var varDeclarations = varStatement.declarationList.declarations;
                     var host_1 = varDeclarations.length === 1 && varDeclarations[0].initializer
@@ -130946,16 +133927,16 @@
                         ? { commentOwner: commentOwner, parameters: host_1.parameters, hasReturn: hasReturn(host_1, options) }
                         : { commentOwner: commentOwner };
                 }
-                case 298 /* SourceFile */:
+                case 300 /* SourceFile */:
                     return "quit";
-                case 257 /* ModuleDeclaration */:
+                case 259 /* ModuleDeclaration */:
                     // If in walking up the tree, we hit a a nested namespace declaration,
                     // then we must be somewhere within a dotted namespace name; however we don't
                     // want to give back a JSDoc template for the 'b' or 'c' in 'namespace a.b.c { }'.
-                    return commentOwner.parent.kind === 257 /* ModuleDeclaration */ ? undefined : { commentOwner: commentOwner };
-                case 234 /* ExpressionStatement */:
+                    return commentOwner.parent.kind === 259 /* ModuleDeclaration */ ? undefined : { commentOwner: commentOwner };
+                case 236 /* ExpressionStatement */:
                     return getCommentOwnerInfoWorker(commentOwner.expression, options);
-                case 217 /* BinaryExpression */: {
+                case 219 /* BinaryExpression */: {
                     var be = commentOwner;
                     if (ts.getAssignmentDeclarationKind(be) === 0 /* None */) {
                         return "quit";
@@ -130964,7 +133945,7 @@
                         ? { commentOwner: commentOwner, parameters: be.right.parameters, hasReturn: hasReturn(be.right, options) }
                         : { commentOwner: commentOwner };
                 }
-                case 164 /* PropertyDeclaration */:
+                case 165 /* PropertyDeclaration */:
                     var init = commentOwner.initializer;
                     if (init && (ts.isFunctionExpression(init) || ts.isArrowFunction(init))) {
                         return { commentOwner: commentOwner, parameters: init.parameters, hasReturn: hasReturn(init, options) };
@@ -130977,14 +133958,14 @@
                     || ts.isFunctionLikeDeclaration(node) && node.body && ts.isBlock(node.body) && !!ts.forEachReturnStatement(node.body, function (n) { return n; }));
         }
         function getRightHandSideOfAssignment(rightHandSide) {
-            while (rightHandSide.kind === 208 /* ParenthesizedExpression */) {
+            while (rightHandSide.kind === 210 /* ParenthesizedExpression */) {
                 rightHandSide = rightHandSide.expression;
             }
             switch (rightHandSide.kind) {
-                case 209 /* FunctionExpression */:
-                case 210 /* ArrowFunction */:
+                case 211 /* FunctionExpression */:
+                case 212 /* ArrowFunction */:
                     return rightHandSide;
-                case 222 /* ClassExpression */:
+                case 224 /* ClassExpression */:
                     return ts.find(rightHandSide.members, ts.isConstructorDeclaration);
             }
         }
@@ -131043,9 +134024,9 @@
         }
         function shouldKeepItem(declaration, checker) {
             switch (declaration.kind) {
-                case 263 /* ImportClause */:
-                case 266 /* ImportSpecifier */:
-                case 261 /* ImportEqualsDeclaration */:
+                case 265 /* ImportClause */:
+                case 268 /* ImportSpecifier */:
+                case 263 /* ImportEqualsDeclaration */:
                     var importer = checker.getSymbolAtLocation(declaration.name); // TODO: GH#18217
                     var imported = checker.getAliasedSymbol(importer);
                     return importer.escapedName !== imported.escapedName;
@@ -131055,7 +134036,7 @@
         }
         function tryAddSingleDeclarationName(declaration, containers) {
             var name = ts.getNameOfDeclaration(declaration);
-            return !!name && (pushLiteral(name, containers) || name.kind === 159 /* ComputedPropertyName */ && tryAddComputedPropertyName(name.expression, containers));
+            return !!name && (pushLiteral(name, containers) || name.kind === 160 /* ComputedPropertyName */ && tryAddComputedPropertyName(name.expression, containers));
         }
         // Only added the names of computed properties if they're simple dotted expressions, like:
         //
@@ -131072,7 +134053,7 @@
             // First, if we started with a computed property name, then add all but the last
             // portion into the container array.
             var name = ts.getNameOfDeclaration(declaration);
-            if (name && name.kind === 159 /* ComputedPropertyName */ && !tryAddComputedPropertyName(name.expression, containers)) {
+            if (name && name.kind === 160 /* ComputedPropertyName */ && !tryAddComputedPropertyName(name.expression, containers)) {
                 return ts.emptyArray;
             }
             // Don't include the last portion.
@@ -131289,7 +134270,7 @@
          */
         function hasNavigationBarName(node) {
             return !ts.hasDynamicName(node) ||
-                (node.kind !== 217 /* BinaryExpression */ &&
+                (node.kind !== 219 /* BinaryExpression */ &&
                     ts.isPropertyAccessExpression(node.name.expression) &&
                     ts.isIdentifier(node.name.expression.expression) &&
                     ts.idText(node.name.expression.expression) === "Symbol");
@@ -131302,7 +134283,7 @@
                 return;
             }
             switch (node.kind) {
-                case 167 /* Constructor */:
+                case 169 /* Constructor */:
                     // Get parameter properties, and treat them as being on the *same* level as the constructor, not under it.
                     var ctr = node;
                     addNodeWithRecursiveChild(ctr, ctr.body);
@@ -131314,25 +134295,25 @@
                         }
                     }
                     break;
-                case 166 /* MethodDeclaration */:
-                case 168 /* GetAccessor */:
-                case 169 /* SetAccessor */:
-                case 165 /* MethodSignature */:
+                case 167 /* MethodDeclaration */:
+                case 170 /* GetAccessor */:
+                case 171 /* SetAccessor */:
+                case 166 /* MethodSignature */:
                     if (hasNavigationBarName(node)) {
                         addNodeWithRecursiveChild(node, node.body);
                     }
                     break;
-                case 164 /* PropertyDeclaration */:
+                case 165 /* PropertyDeclaration */:
                     if (hasNavigationBarName(node)) {
                         addNodeWithRecursiveInitializer(node);
                     }
                     break;
-                case 163 /* PropertySignature */:
+                case 164 /* PropertySignature */:
                     if (hasNavigationBarName(node)) {
                         addLeafNode(node);
                     }
                     break;
-                case 263 /* ImportClause */:
+                case 265 /* ImportClause */:
                     var importClause = node;
                     // Handle default import case e.g.:
                     //    import d from "mod";
@@ -131344,7 +134325,7 @@
                     //    import {a, b as B} from "mod";
                     var namedBindings = importClause.namedBindings;
                     if (namedBindings) {
-                        if (namedBindings.kind === 264 /* NamespaceImport */) {
+                        if (namedBindings.kind === 266 /* NamespaceImport */) {
                             addLeafNode(namedBindings);
                         }
                         else {
@@ -131355,17 +134336,17 @@
                         }
                     }
                     break;
-                case 290 /* ShorthandPropertyAssignment */:
+                case 292 /* ShorthandPropertyAssignment */:
                     addNodeWithRecursiveChild(node, node.name);
                     break;
-                case 291 /* SpreadAssignment */:
+                case 293 /* SpreadAssignment */:
                     var expression = node.expression;
                     // Use the expression as the name of the SpreadAssignment, otherwise show as <unknown>.
                     ts.isIdentifier(expression) ? addLeafNode(node, expression) : addLeafNode(node);
                     break;
-                case 199 /* BindingElement */:
-                case 289 /* PropertyAssignment */:
-                case 250 /* VariableDeclaration */: {
+                case 201 /* BindingElement */:
+                case 291 /* PropertyAssignment */:
+                case 252 /* VariableDeclaration */: {
                     var child = node;
                     if (ts.isBindingPattern(child.name)) {
                         addChildrenRecursively(child.name);
@@ -131375,7 +134356,7 @@
                     }
                     break;
                 }
-                case 252 /* FunctionDeclaration */:
+                case 254 /* FunctionDeclaration */:
                     var nameNode = node.name;
                     // If we see a function declaration track as a possible ES5 class
                     if (nameNode && ts.isIdentifier(nameNode)) {
@@ -131383,11 +134364,11 @@
                     }
                     addNodeWithRecursiveChild(node, node.body);
                     break;
-                case 210 /* ArrowFunction */:
-                case 209 /* FunctionExpression */:
+                case 212 /* ArrowFunction */:
+                case 211 /* FunctionExpression */:
                     addNodeWithRecursiveChild(node, node.body);
                     break;
-                case 256 /* EnumDeclaration */:
+                case 258 /* EnumDeclaration */:
                     startNode(node);
                     for (var _e = 0, _f = node.members; _e < _f.length; _e++) {
                         var member = _f[_e];
@@ -131397,9 +134378,9 @@
                     }
                     endNode();
                     break;
-                case 253 /* ClassDeclaration */:
-                case 222 /* ClassExpression */:
-                case 254 /* InterfaceDeclaration */:
+                case 255 /* ClassDeclaration */:
+                case 224 /* ClassExpression */:
+                case 256 /* InterfaceDeclaration */:
                     startNode(node);
                     for (var _g = 0, _h = node.members; _g < _h.length; _g++) {
                         var member = _h[_g];
@@ -131407,10 +134388,10 @@
                     }
                     endNode();
                     break;
-                case 257 /* ModuleDeclaration */:
+                case 259 /* ModuleDeclaration */:
                     addNodeWithRecursiveChild(node, getInteriorModule(node).body);
                     break;
-                case 267 /* ExportAssignment */: {
+                case 269 /* ExportAssignment */: {
                     var expression_1 = node.expression;
                     var child = ts.isObjectLiteralExpression(expression_1) || ts.isCallExpression(expression_1) ? expression_1 :
                         ts.isArrowFunction(expression_1) || ts.isFunctionExpression(expression_1) ? expression_1.body : undefined;
@@ -131424,16 +134405,16 @@
                     }
                     break;
                 }
-                case 271 /* ExportSpecifier */:
-                case 261 /* ImportEqualsDeclaration */:
-                case 172 /* IndexSignature */:
-                case 170 /* CallSignature */:
-                case 171 /* ConstructSignature */:
-                case 255 /* TypeAliasDeclaration */:
+                case 273 /* ExportSpecifier */:
+                case 263 /* ImportEqualsDeclaration */:
+                case 174 /* IndexSignature */:
+                case 172 /* CallSignature */:
+                case 173 /* ConstructSignature */:
+                case 257 /* TypeAliasDeclaration */:
                     addLeafNode(node);
                     break;
-                case 204 /* CallExpression */:
-                case 217 /* BinaryExpression */: {
+                case 206 /* CallExpression */:
+                case 219 /* BinaryExpression */: {
                     var special = ts.getAssignmentDeclarationKind(node);
                     switch (special) {
                         case 1 /* ExportsProperty */:
@@ -131675,12 +134656,12 @@
                 return false;
             }
             switch (a.kind) {
-                case 164 /* PropertyDeclaration */:
-                case 166 /* MethodDeclaration */:
-                case 168 /* GetAccessor */:
-                case 169 /* SetAccessor */:
-                    return ts.hasSyntacticModifier(a, 32 /* Static */) === ts.hasSyntacticModifier(b, 32 /* Static */);
-                case 257 /* ModuleDeclaration */:
+                case 165 /* PropertyDeclaration */:
+                case 167 /* MethodDeclaration */:
+                case 170 /* GetAccessor */:
+                case 171 /* SetAccessor */:
+                    return ts.isStatic(a) === ts.isStatic(b);
+                case 259 /* ModuleDeclaration */:
                     return areSameModule(a, b)
                         && getFullyQualifiedModuleName(a) === getFullyQualifiedModuleName(b);
                 default:
@@ -131699,7 +134680,7 @@
         // We use 1 NavNode to represent 'A.B.C', but there are multiple source nodes.
         // Only merge module nodes that have the same chain. Don't merge 'A.B.C' with 'A'!
         function areSameModule(a, b) {
-            return a.body.kind === b.body.kind && (a.body.kind !== 257 /* ModuleDeclaration */ || areSameModule(a.body, b.body));
+            return a.body.kind === b.body.kind && (a.body.kind !== 259 /* ModuleDeclaration */ || areSameModule(a.body, b.body));
         }
         /** Merge source into target. Source should be thrown away after this is called. */
         function merge(target, source) {
@@ -131729,7 +134710,7 @@
          * So `new()` can still come before an `aardvark` method.
          */
         function tryGetName(node) {
-            if (node.kind === 257 /* ModuleDeclaration */) {
+            if (node.kind === 259 /* ModuleDeclaration */) {
                 return getModuleName(node);
             }
             var declName = ts.getNameOfDeclaration(node);
@@ -131738,16 +134719,16 @@
                 return propertyName && ts.unescapeLeadingUnderscores(propertyName);
             }
             switch (node.kind) {
-                case 209 /* FunctionExpression */:
-                case 210 /* ArrowFunction */:
-                case 222 /* ClassExpression */:
+                case 211 /* FunctionExpression */:
+                case 212 /* ArrowFunction */:
+                case 224 /* ClassExpression */:
                     return getFunctionOrClassName(node);
                 default:
                     return undefined;
             }
         }
         function getItemName(node, name) {
-            if (node.kind === 257 /* ModuleDeclaration */) {
+            if (node.kind === 259 /* ModuleDeclaration */) {
                 return cleanText(getModuleName(node));
             }
             if (name) {
@@ -131759,18 +134740,18 @@
                 }
             }
             switch (node.kind) {
-                case 298 /* SourceFile */:
+                case 300 /* SourceFile */:
                     var sourceFile = node;
                     return ts.isExternalModule(sourceFile)
                         ? "\"" + ts.escapeString(ts.getBaseFileName(ts.removeFileExtension(ts.normalizePath(sourceFile.fileName)))) + "\""
                         : "<global>";
-                case 267 /* ExportAssignment */:
+                case 269 /* ExportAssignment */:
                     return ts.isExportAssignment(node) && node.isExportEquals ? "export=" /* ExportEquals */ : "default" /* Default */;
-                case 210 /* ArrowFunction */:
-                case 252 /* FunctionDeclaration */:
-                case 209 /* FunctionExpression */:
-                case 253 /* ClassDeclaration */:
-                case 222 /* ClassExpression */:
+                case 212 /* ArrowFunction */:
+                case 254 /* FunctionDeclaration */:
+                case 211 /* FunctionExpression */:
+                case 255 /* ClassDeclaration */:
+                case 224 /* ClassExpression */:
                     if (ts.getSyntacticModifierFlags(node) & 512 /* Default */) {
                         return "default";
                     }
@@ -131778,13 +134759,13 @@
                     // (eg: "app\n.onactivated"), so we should remove the whitespace for readability in the
                     // navigation bar.
                     return getFunctionOrClassName(node);
-                case 167 /* Constructor */:
+                case 169 /* Constructor */:
                     return "constructor";
-                case 171 /* ConstructSignature */:
+                case 173 /* ConstructSignature */:
                     return "new()";
-                case 170 /* CallSignature */:
+                case 172 /* CallSignature */:
                     return "()";
-                case 172 /* IndexSignature */:
+                case 174 /* IndexSignature */:
                     return "[]";
                 default:
                     return "<unknown>";
@@ -131817,19 +134798,19 @@
                 }
                 // Some nodes are otherwise important enough to always include in the primary navigation menu.
                 switch (navigationBarNodeKind(item)) {
-                    case 253 /* ClassDeclaration */:
-                    case 222 /* ClassExpression */:
-                    case 256 /* EnumDeclaration */:
-                    case 254 /* InterfaceDeclaration */:
-                    case 257 /* ModuleDeclaration */:
-                    case 298 /* SourceFile */:
-                    case 255 /* TypeAliasDeclaration */:
-                    case 335 /* JSDocTypedefTag */:
-                    case 328 /* JSDocCallbackTag */:
+                    case 255 /* ClassDeclaration */:
+                    case 224 /* ClassExpression */:
+                    case 258 /* EnumDeclaration */:
+                    case 256 /* InterfaceDeclaration */:
+                    case 259 /* ModuleDeclaration */:
+                    case 300 /* SourceFile */:
+                    case 257 /* TypeAliasDeclaration */:
+                    case 340 /* JSDocTypedefTag */:
+                    case 333 /* JSDocCallbackTag */:
                         return true;
-                    case 210 /* ArrowFunction */:
-                    case 252 /* FunctionDeclaration */:
-                    case 209 /* FunctionExpression */:
+                    case 212 /* ArrowFunction */:
+                    case 254 /* FunctionDeclaration */:
+                    case 211 /* FunctionExpression */:
                         return isTopLevelFunctionDeclaration(item);
                     default:
                         return false;
@@ -131839,10 +134820,10 @@
                         return false;
                     }
                     switch (navigationBarNodeKind(item.parent)) {
-                        case 258 /* ModuleBlock */:
-                        case 298 /* SourceFile */:
-                        case 166 /* MethodDeclaration */:
-                        case 167 /* Constructor */:
+                        case 260 /* ModuleBlock */:
+                        case 300 /* SourceFile */:
+                        case 167 /* MethodDeclaration */:
+                        case 169 /* Constructor */:
                             return true;
                         default:
                             return false;
@@ -131904,7 +134885,7 @@
         function getFullyQualifiedModuleName(moduleDeclaration) {
             // Otherwise, we need to aggregate each identifier to build up the qualified name.
             var result = [ts.getTextOfIdentifierOrLiteral(moduleDeclaration.name)];
-            while (moduleDeclaration.body && moduleDeclaration.body.kind === 257 /* ModuleDeclaration */) {
+            while (moduleDeclaration.body && moduleDeclaration.body.kind === 259 /* ModuleDeclaration */) {
                 moduleDeclaration = moduleDeclaration.body;
                 result.push(ts.getTextOfIdentifierOrLiteral(moduleDeclaration.name));
             }
@@ -131918,13 +134899,13 @@
             return decl.body && ts.isModuleDeclaration(decl.body) ? getInteriorModule(decl.body) : decl;
         }
         function isComputedProperty(member) {
-            return !member.name || member.name.kind === 159 /* ComputedPropertyName */;
+            return !member.name || member.name.kind === 160 /* ComputedPropertyName */;
         }
         function getNodeSpan(node) {
-            return node.kind === 298 /* SourceFile */ ? ts.createTextSpanFromRange(node) : ts.createTextSpanFromNode(node, curSourceFile);
+            return node.kind === 300 /* SourceFile */ ? ts.createTextSpanFromRange(node) : ts.createTextSpanFromNode(node, curSourceFile);
         }
         function getModifiers(node) {
-            if (node.parent && node.parent.kind === 250 /* VariableDeclaration */) {
+            if (node.parent && node.parent.kind === 252 /* VariableDeclaration */) {
                 node = node.parent;
             }
             return ts.getNodeModifiers(node);
@@ -131939,7 +134920,7 @@
                 return cleanText(ts.declarationNameToString(parent.name));
             }
             // See if it is of the form "<expr> = function(){...}". If so, use the text from the left-hand side.
-            else if (ts.isBinaryExpression(parent) && parent.operatorToken.kind === 62 /* EqualsToken */) {
+            else if (ts.isBinaryExpression(parent) && parent.operatorToken.kind === 63 /* EqualsToken */) {
                 return nodeText(parent.left).replace(whiteSpaceRegex, "");
             }
             // See if it is a property assignment, and if so use the property name
@@ -131982,9 +134963,9 @@
         }
         function isFunctionOrClassExpression(node) {
             switch (node.kind) {
-                case 210 /* ArrowFunction */:
-                case 209 /* FunctionExpression */:
-                case 222 /* ClassExpression */:
+                case 212 /* ArrowFunction */:
+                case 211 /* FunctionExpression */:
+                case 224 /* ClassExpression */:
                     return true;
                 default:
                     return false;
@@ -132349,11 +135330,11 @@
         function getModuleSpecifierExpression(declaration) {
             var _a;
             switch (declaration.kind) {
-                case 261 /* ImportEqualsDeclaration */:
+                case 263 /* ImportEqualsDeclaration */:
                     return (_a = ts.tryCast(declaration.moduleReference, ts.isExternalModuleReference)) === null || _a === void 0 ? void 0 : _a.expression;
-                case 262 /* ImportDeclaration */:
+                case 264 /* ImportDeclaration */:
                     return declaration.moduleSpecifier;
-                case 233 /* VariableStatement */:
+                case 235 /* VariableStatement */:
                     return declaration.declarationList.declarations[0].initializer.arguments[0];
             }
         }
@@ -132392,19 +135373,19 @@
         function getImportKindOrder(s1) {
             var _a;
             switch (s1.kind) {
-                case 262 /* ImportDeclaration */:
+                case 264 /* ImportDeclaration */:
                     if (!s1.importClause)
                         return 0;
                     if (s1.importClause.isTypeOnly)
                         return 1;
-                    if (((_a = s1.importClause.namedBindings) === null || _a === void 0 ? void 0 : _a.kind) === 264 /* NamespaceImport */)
+                    if (((_a = s1.importClause.namedBindings) === null || _a === void 0 ? void 0 : _a.kind) === 266 /* NamespaceImport */)
                         return 2;
                     if (s1.importClause.name)
                         return 3;
                     return 4;
-                case 261 /* ImportEqualsDeclaration */:
+                case 263 /* ImportEqualsDeclaration */:
                     return 5;
-                case 233 /* VariableStatement */:
+                case 235 /* VariableStatement */:
                     return 6;
             }
         }
@@ -132426,7 +135407,7 @@
             var depthRemaining = 40;
             var current = 0;
             // Includes the EOF Token so that comments which aren't attached to statements are included
-            var statements = __spreadArray(__spreadArray([], sourceFile.statements), [sourceFile.endOfFileToken]);
+            var statements = __spreadArray(__spreadArray([], sourceFile.statements, true), [sourceFile.endOfFileToken], false);
             var n = statements.length;
             while (current < n) {
                 while (current < n && !ts.isAnyImportSyntax(statements[current])) {
@@ -132442,7 +135423,7 @@
                 }
                 var lastImport = current - 1;
                 if (lastImport !== firstImport) {
-                    out.push(createOutliningSpanFromBounds(ts.findChildOfKind(statements[firstImport], 99 /* ImportKeyword */, sourceFile).getStart(sourceFile), statements[lastImport].getEnd(), "imports" /* Imports */));
+                    out.push(createOutliningSpanFromBounds(ts.findChildOfKind(statements[firstImport], 100 /* ImportKeyword */, sourceFile).getStart(sourceFile), statements[lastImport].getEnd(), "imports" /* Imports */));
                 }
             }
             function visitNonImportNode(n) {
@@ -132450,12 +135431,18 @@
                 if (depthRemaining === 0)
                     return;
                 cancellationToken.throwIfCancellationRequested();
-                if (ts.isDeclaration(n) || ts.isVariableStatement(n) || n.kind === 1 /* EndOfFileToken */) {
+                if (ts.isDeclaration(n) || ts.isVariableStatement(n) || ts.isReturnStatement(n) || n.kind === 1 /* EndOfFileToken */) {
                     addOutliningForLeadingCommentsForNode(n, sourceFile, cancellationToken, out);
                 }
                 if (ts.isFunctionLike(n) && ts.isBinaryExpression(n.parent) && ts.isPropertyAccessExpression(n.parent.left)) {
                     addOutliningForLeadingCommentsForNode(n.parent.left, sourceFile, cancellationToken, out);
                 }
+                if (ts.isBlock(n) || ts.isModuleBlock(n)) {
+                    addOutliningForLeadingCommentsForPos(n.statements.end, sourceFile, cancellationToken, out);
+                }
+                if (ts.isClassLike(n) || ts.isInterfaceDeclaration(n)) {
+                    addOutliningForLeadingCommentsForPos(n.members.end, sourceFile, cancellationToken, out);
+                }
                 var span = getOutliningSpanForNode(n, sourceFile);
                 if (span)
                     out.push(span);
@@ -132506,12 +135493,19 @@
                 }
             }
         }
-        var regionDelimiterRegExp = /^\s*\/\/\s*#(end)?region(?:\s+(.*))?(?:\r)?$/;
+        var regionDelimiterRegExp = /^#(end)?region(?:\s+(.*))?(?:\r)?$/;
         function isRegionDelimiter(lineText) {
+            // We trim the leading whitespace and // without the regex since the
+            // multiple potential whitespace matches can make for some gnarly backtracking behavior
+            lineText = ts.trimStringStart(lineText);
+            if (!ts.startsWith(lineText, "\/\/")) {
+                return null; // eslint-disable-line no-null/no-null
+            }
+            lineText = ts.trimString(lineText.slice(2));
             return regionDelimiterRegExp.exec(lineText);
         }
-        function addOutliningForLeadingCommentsForNode(n, sourceFile, cancellationToken, out) {
-            var comments = ts.getLeadingCommentRangesOfNode(n, sourceFile);
+        function addOutliningForLeadingCommentsForPos(pos, sourceFile, cancellationToken, out) {
+            var comments = ts.getLeadingCommentRanges(sourceFile.text, pos);
             if (!comments)
                 return;
             var firstSingleLineCommentStart = -1;
@@ -132519,12 +135513,12 @@
             var singleLineCommentCount = 0;
             var sourceText = sourceFile.getFullText();
             for (var _i = 0, comments_1 = comments; _i < comments_1.length; _i++) {
-                var _a = comments_1[_i], kind = _a.kind, pos = _a.pos, end = _a.end;
+                var _a = comments_1[_i], kind = _a.kind, pos_1 = _a.pos, end = _a.end;
                 cancellationToken.throwIfCancellationRequested();
                 switch (kind) {
                     case 2 /* SingleLineCommentTrivia */:
                         // never fold region delimiters into single-line comment regions
-                        var commentText = sourceText.slice(pos, end);
+                        var commentText = sourceText.slice(pos_1, end);
                         if (isRegionDelimiter(commentText)) {
                             combineAndAddMultipleSingleLineComments();
                             singleLineCommentCount = 0;
@@ -132533,14 +135527,14 @@
                         // For single line comments, combine consecutive ones (2 or more) into
                         // a single span from the start of the first till the end of the last
                         if (singleLineCommentCount === 0) {
-                            firstSingleLineCommentStart = pos;
+                            firstSingleLineCommentStart = pos_1;
                         }
                         lastSingleLineCommentEnd = end;
                         singleLineCommentCount++;
                         break;
                     case 3 /* MultiLineCommentTrivia */:
                         combineAndAddMultipleSingleLineComments();
-                        out.push(createOutliningSpanFromBounds(pos, end, "comment" /* Comment */));
+                        out.push(createOutliningSpanFromBounds(pos_1, end, "comment" /* Comment */));
                         singleLineCommentCount = 0;
                         break;
                     default:
@@ -132555,12 +135549,17 @@
                 }
             }
         }
+        function addOutliningForLeadingCommentsForNode(n, sourceFile, cancellationToken, out) {
+            if (ts.isJsxText(n))
+                return;
+            addOutliningForLeadingCommentsForPos(n.pos, sourceFile, cancellationToken, out);
+        }
         function createOutliningSpanFromBounds(pos, end, kind) {
             return createOutliningSpan(ts.createTextSpanFromBounds(pos, end), kind);
         }
         function getOutliningSpanForNode(n, sourceFile) {
             switch (n.kind) {
-                case 231 /* Block */:
+                case 233 /* Block */:
                     if (ts.isFunctionLike(n.parent)) {
                         return functionSpan(n.parent, n, sourceFile);
                     }
@@ -132568,23 +135567,23 @@
                     // If the latter, we want to collapse the block, but consider its hint span
                     // to be the entire span of the parent.
                     switch (n.parent.kind) {
-                        case 236 /* DoStatement */:
-                        case 239 /* ForInStatement */:
-                        case 240 /* ForOfStatement */:
-                        case 238 /* ForStatement */:
-                        case 235 /* IfStatement */:
-                        case 237 /* WhileStatement */:
-                        case 244 /* WithStatement */:
-                        case 288 /* CatchClause */:
+                        case 238 /* DoStatement */:
+                        case 241 /* ForInStatement */:
+                        case 242 /* ForOfStatement */:
+                        case 240 /* ForStatement */:
+                        case 237 /* IfStatement */:
+                        case 239 /* WhileStatement */:
+                        case 246 /* WithStatement */:
+                        case 290 /* CatchClause */:
                             return spanForNode(n.parent);
-                        case 248 /* TryStatement */:
+                        case 250 /* TryStatement */:
                             // Could be the try-block, or the finally-block.
                             var tryStatement = n.parent;
                             if (tryStatement.tryBlock === n) {
                                 return spanForNode(n.parent);
                             }
                             else if (tryStatement.finallyBlock === n) {
-                                var node = ts.findChildOfKind(tryStatement, 95 /* FinallyKeyword */, sourceFile);
+                                var node = ts.findChildOfKind(tryStatement, 96 /* FinallyKeyword */, sourceFile);
                                 if (node)
                                     return spanForNode(node);
                             }
@@ -132594,40 +135593,40 @@
                             // the span of the block, independent of any parent span.
                             return createOutliningSpan(ts.createTextSpanFromNode(n, sourceFile), "code" /* Code */);
                     }
-                case 258 /* ModuleBlock */:
+                case 260 /* ModuleBlock */:
                     return spanForNode(n.parent);
-                case 253 /* ClassDeclaration */:
-                case 222 /* ClassExpression */:
-                case 254 /* InterfaceDeclaration */:
-                case 256 /* EnumDeclaration */:
-                case 259 /* CaseBlock */:
-                case 178 /* TypeLiteral */:
-                case 197 /* ObjectBindingPattern */:
+                case 255 /* ClassDeclaration */:
+                case 224 /* ClassExpression */:
+                case 256 /* InterfaceDeclaration */:
+                case 258 /* EnumDeclaration */:
+                case 261 /* CaseBlock */:
+                case 180 /* TypeLiteral */:
+                case 199 /* ObjectBindingPattern */:
                     return spanForNode(n);
-                case 180 /* TupleType */:
+                case 182 /* TupleType */:
                     return spanForNode(n, /*autoCollapse*/ false, /*useFullStart*/ !ts.isTupleTypeNode(n.parent), 22 /* OpenBracketToken */);
-                case 285 /* CaseClause */:
-                case 286 /* DefaultClause */:
+                case 287 /* CaseClause */:
+                case 288 /* DefaultClause */:
                     return spanForNodeArray(n.statements);
-                case 201 /* ObjectLiteralExpression */:
+                case 203 /* ObjectLiteralExpression */:
                     return spanForObjectOrArrayLiteral(n);
-                case 200 /* ArrayLiteralExpression */:
+                case 202 /* ArrayLiteralExpression */:
                     return spanForObjectOrArrayLiteral(n, 22 /* OpenBracketToken */);
-                case 274 /* JsxElement */:
+                case 276 /* JsxElement */:
                     return spanForJSXElement(n);
-                case 278 /* JsxFragment */:
+                case 280 /* JsxFragment */:
                     return spanForJSXFragment(n);
-                case 275 /* JsxSelfClosingElement */:
-                case 276 /* JsxOpeningElement */:
+                case 277 /* JsxSelfClosingElement */:
+                case 278 /* JsxOpeningElement */:
                     return spanForJSXAttributes(n.attributes);
-                case 219 /* TemplateExpression */:
+                case 221 /* TemplateExpression */:
                 case 14 /* NoSubstitutionTemplateLiteral */:
                     return spanForTemplateLiteral(n);
-                case 198 /* ArrayBindingPattern */:
+                case 200 /* ArrayBindingPattern */:
                     return spanForNode(n, /*autoCollapse*/ false, /*useFullStart*/ !ts.isBindingElement(n.parent), 22 /* OpenBracketToken */);
-                case 210 /* ArrowFunction */:
+                case 212 /* ArrowFunction */:
                     return spanForArrowFunction(n);
-                case 204 /* CallExpression */:
+                case 206 /* CallExpression */:
                     return spanForCallExpression(n);
             }
             function spanForCallExpression(node) {
@@ -132694,7 +135693,7 @@
         function functionSpan(node, body, sourceFile) {
             var openToken = tryGetFunctionOpenToken(node, body, sourceFile);
             var closeToken = ts.findChildOfKind(body, 19 /* CloseBraceToken */, sourceFile);
-            return openToken && closeToken && spanBetweenTokens(openToken, closeToken, node, sourceFile, /*autoCollapse*/ node.kind !== 210 /* ArrowFunction */);
+            return openToken && closeToken && spanBetweenTokens(openToken, closeToken, node, sourceFile, /*autoCollapse*/ node.kind !== 212 /* ArrowFunction */);
         }
         function spanBetweenTokens(openToken, closeToken, hintSpanNode, sourceFile, autoCollapse, useFullStart) {
             if (autoCollapse === void 0) { autoCollapse = false; }
@@ -133238,10 +136237,10 @@
          */
         function tryConsumeDeclare() {
             var token = ts.scanner.getToken();
-            if (token === 133 /* DeclareKeyword */) {
+            if (token === 134 /* DeclareKeyword */) {
                 // declare module "mod"
                 token = nextToken();
-                if (token === 139 /* ModuleKeyword */) {
+                if (token === 140 /* ModuleKeyword */) {
                     token = nextToken();
                     if (token === 10 /* StringLiteral */) {
                         recordAmbientExternalModule();
@@ -133259,7 +136258,7 @@
                 return false;
             }
             var token = ts.scanner.getToken();
-            if (token === 99 /* ImportKeyword */) {
+            if (token === 100 /* ImportKeyword */) {
                 token = nextToken();
                 if (token === 20 /* OpenParenToken */) {
                     token = nextToken();
@@ -133275,21 +136274,21 @@
                     return true;
                 }
                 else {
-                    if (token === 149 /* TypeKeyword */) {
+                    if (token === 150 /* TypeKeyword */) {
                         var skipTypeKeyword = ts.scanner.lookAhead(function () {
                             var token = ts.scanner.scan();
-                            return token !== 153 /* FromKeyword */ && (token === 41 /* AsteriskToken */ ||
+                            return token !== 154 /* FromKeyword */ && (token === 41 /* AsteriskToken */ ||
                                 token === 18 /* OpenBraceToken */ ||
-                                token === 78 /* Identifier */ ||
+                                token === 79 /* Identifier */ ||
                                 ts.isKeyword(token));
                         });
                         if (skipTypeKeyword) {
                             token = nextToken();
                         }
                     }
-                    if (token === 78 /* Identifier */ || ts.isKeyword(token)) {
+                    if (token === 79 /* Identifier */ || ts.isKeyword(token)) {
                         token = nextToken();
-                        if (token === 153 /* FromKeyword */) {
+                        if (token === 154 /* FromKeyword */) {
                             token = nextToken();
                             if (token === 10 /* StringLiteral */) {
                                 // import d from "mod";
@@ -133297,7 +136296,7 @@
                                 return true;
                             }
                         }
-                        else if (token === 62 /* EqualsToken */) {
+                        else if (token === 63 /* EqualsToken */) {
                             if (tryConsumeRequireCall(/*skipCurrentToken*/ true)) {
                                 return true;
                             }
@@ -133320,7 +136319,7 @@
                         }
                         if (token === 19 /* CloseBraceToken */) {
                             token = nextToken();
-                            if (token === 153 /* FromKeyword */) {
+                            if (token === 154 /* FromKeyword */) {
                                 token = nextToken();
                                 if (token === 10 /* StringLiteral */) {
                                     // import {a as A} from "mod";
@@ -133332,11 +136331,11 @@
                     }
                     else if (token === 41 /* AsteriskToken */) {
                         token = nextToken();
-                        if (token === 126 /* AsKeyword */) {
+                        if (token === 127 /* AsKeyword */) {
                             token = nextToken();
-                            if (token === 78 /* Identifier */ || ts.isKeyword(token)) {
+                            if (token === 79 /* Identifier */ || ts.isKeyword(token)) {
                                 token = nextToken();
-                                if (token === 153 /* FromKeyword */) {
+                                if (token === 154 /* FromKeyword */) {
                                     token = nextToken();
                                     if (token === 10 /* StringLiteral */) {
                                         // import * as NS from "mod"
@@ -133354,10 +136353,10 @@
         }
         function tryConsumeExport() {
             var token = ts.scanner.getToken();
-            if (token === 92 /* ExportKeyword */) {
+            if (token === 93 /* ExportKeyword */) {
                 markAsExternalModuleIfTopLevel();
                 token = nextToken();
-                if (token === 149 /* TypeKeyword */) {
+                if (token === 150 /* TypeKeyword */) {
                     var skipTypeKeyword = ts.scanner.lookAhead(function () {
                         var token = ts.scanner.scan();
                         return token === 41 /* AsteriskToken */ ||
@@ -133376,7 +136375,7 @@
                     }
                     if (token === 19 /* CloseBraceToken */) {
                         token = nextToken();
-                        if (token === 153 /* FromKeyword */) {
+                        if (token === 154 /* FromKeyword */) {
                             token = nextToken();
                             if (token === 10 /* StringLiteral */) {
                                 // export {a as A} from "mod";
@@ -133388,7 +136387,7 @@
                 }
                 else if (token === 41 /* AsteriskToken */) {
                     token = nextToken();
-                    if (token === 153 /* FromKeyword */) {
+                    if (token === 154 /* FromKeyword */) {
                         token = nextToken();
                         if (token === 10 /* StringLiteral */) {
                             // export * from "mod"
@@ -133396,21 +136395,21 @@
                         }
                     }
                 }
-                else if (token === 99 /* ImportKeyword */) {
+                else if (token === 100 /* ImportKeyword */) {
                     token = nextToken();
-                    if (token === 149 /* TypeKeyword */) {
+                    if (token === 150 /* TypeKeyword */) {
                         var skipTypeKeyword = ts.scanner.lookAhead(function () {
                             var token = ts.scanner.scan();
-                            return token === 78 /* Identifier */ ||
+                            return token === 79 /* Identifier */ ||
                                 ts.isKeyword(token);
                         });
                         if (skipTypeKeyword) {
                             token = nextToken();
                         }
                     }
-                    if (token === 78 /* Identifier */ || ts.isKeyword(token)) {
+                    if (token === 79 /* Identifier */ || ts.isKeyword(token)) {
                         token = nextToken();
-                        if (token === 62 /* EqualsToken */) {
+                        if (token === 63 /* EqualsToken */) {
                             if (tryConsumeRequireCall(/*skipCurrentToken*/ true)) {
                                 return true;
                             }
@@ -133424,7 +136423,7 @@
         function tryConsumeRequireCall(skipCurrentToken, allowTemplateLiterals) {
             if (allowTemplateLiterals === void 0) { allowTemplateLiterals = false; }
             var token = skipCurrentToken ? nextToken() : ts.scanner.getToken();
-            if (token === 143 /* RequireKeyword */) {
+            if (token === 144 /* RequireKeyword */) {
                 token = nextToken();
                 if (token === 20 /* OpenParenToken */) {
                     token = nextToken();
@@ -133440,7 +136439,7 @@
         }
         function tryConsumeDefine() {
             var token = ts.scanner.getToken();
-            if (token === 78 /* Identifier */ && ts.scanner.getTokenValue() === "define") {
+            if (token === 79 /* Identifier */ && ts.scanner.getTokenValue() === "define") {
                 token = nextToken();
                 if (token !== 20 /* OpenParenToken */) {
                     return true;
@@ -133589,14 +136588,14 @@
                 return getRenameInfoError(ts.Diagnostics.You_cannot_rename_elements_that_are_defined_in_the_standard_TypeScript_library);
             }
             // Cannot rename `default` as in `import { default as foo } from "./someModule";
-            if (ts.isIdentifier(node) && node.originalKeywordKind === 87 /* DefaultKeyword */ && symbol.parent && symbol.parent.flags & 1536 /* Module */) {
+            if (ts.isIdentifier(node) && node.originalKeywordKind === 88 /* DefaultKeyword */ && symbol.parent && symbol.parent.flags & 1536 /* Module */) {
                 return undefined;
             }
             if (ts.isStringLiteralLike(node) && ts.tryGetImportFromModuleSpecifier(node)) {
                 return options && options.allowRenameOfImportPath ? getRenameInfoForModule(node, sourceFile, symbol) : undefined;
             }
             var kind = ts.SymbolDisplay.getSymbolKind(typeChecker, symbol, node);
-            var specifierName = (ts.isImportOrExportSpecifierName(node) || ts.isStringOrNumericLiteralLike(node) && node.parent.kind === 159 /* ComputedPropertyName */)
+            var specifierName = (ts.isImportOrExportSpecifierName(node) || ts.isStringOrNumericLiteralLike(node) && node.parent.kind === 160 /* ComputedPropertyName */)
                 ? ts.stripQuotes(ts.getTextOfIdentifierOrLiteral(node))
                 : undefined;
             var displayName = specifierName || typeChecker.symbolToString(symbol);
@@ -133656,11 +136655,11 @@
         }
         function nodeIsEligibleForRename(node) {
             switch (node.kind) {
-                case 78 /* Identifier */:
-                case 79 /* PrivateIdentifier */:
+                case 79 /* Identifier */:
+                case 80 /* PrivateIdentifier */:
                 case 10 /* StringLiteral */:
                 case 14 /* NoSubstitutionTemplateLiteral */:
-                case 107 /* ThisKeyword */:
+                case 108 /* ThisKeyword */:
                     return true;
                 case 8 /* NumericLiteral */:
                     return ts.isLiteralNameOfPropertyDeclarationOrIndexAccess(node);
@@ -133715,9 +136714,9 @@
                         }
                         // Synthesize a stop for '${ ... }' since '${' and '}' actually belong to siblings.
                         if (ts.isTemplateSpan(parentNode) && nextNode && ts.isTemplateMiddleOrTemplateTail(nextNode)) {
-                            var start_2 = node.getFullStart() - "${".length;
+                            var start_1 = node.getFullStart() - "${".length;
                             var end_2 = nextNode.getStart() + "}".length;
-                            pushSelectionRange(start_2, end_2);
+                            pushSelectionRange(start_1, end_2);
                         }
                         // Blocks with braces, brackets, parens, or JSX tags on separate lines should be
                         // selected from open to close, including whitespace but not including the braces/etc. themselves.
@@ -133822,14 +136821,14 @@
                 ts.Debug.assertEqual(closeBraceToken.kind, 19 /* CloseBraceToken */);
                 // Group `-/+readonly` and `-/+?`
                 var groupedWithPlusMinusTokens = groupChildren(children, function (child) {
-                    return child === node.readonlyToken || child.kind === 142 /* ReadonlyKeyword */ ||
+                    return child === node.readonlyToken || child.kind === 143 /* ReadonlyKeyword */ ||
                         child === node.questionToken || child.kind === 57 /* QuestionToken */;
                 });
                 // Group type parameter with surrounding brackets
                 var groupedWithBrackets = groupChildren(groupedWithPlusMinusTokens, function (_a) {
                     var kind = _a.kind;
                     return kind === 22 /* OpenBracketToken */ ||
-                        kind === 160 /* TypeParameter */ ||
+                        kind === 161 /* TypeParameter */ ||
                         kind === 23 /* CloseBracketToken */;
                 });
                 return [
@@ -133862,14 +136861,14 @@
                 });
                 return splitChildren(groupedWithQuestionToken, function (_a) {
                     var kind = _a.kind;
-                    return kind === 62 /* EqualsToken */;
+                    return kind === 63 /* EqualsToken */;
                 });
             }
             // Pivot on '='
             if (ts.isBindingElement(node)) {
                 return splitChildren(node.getChildren(), function (_a) {
                     var kind = _a.kind;
-                    return kind === 62 /* EqualsToken */;
+                    return kind === 63 /* EqualsToken */;
                 });
             }
             return node.getChildren();
@@ -133943,22 +136942,22 @@
             return kind === 18 /* OpenBraceToken */
                 || kind === 22 /* OpenBracketToken */
                 || kind === 20 /* OpenParenToken */
-                || kind === 276 /* JsxOpeningElement */;
+                || kind === 278 /* JsxOpeningElement */;
         }
         function isListCloser(token) {
             var kind = token && token.kind;
             return kind === 19 /* CloseBraceToken */
                 || kind === 23 /* CloseBracketToken */
                 || kind === 21 /* CloseParenToken */
-                || kind === 277 /* JsxClosingElement */;
+                || kind === 279 /* JsxClosingElement */;
         }
         function getEndPos(sourceFile, node) {
             switch (node.kind) {
-                case 330 /* JSDocParameterTag */:
-                case 328 /* JSDocCallbackTag */:
-                case 337 /* JSDocPropertyTag */:
-                case 335 /* JSDocTypedefTag */:
-                case 332 /* JSDocThisTag */:
+                case 335 /* JSDocParameterTag */:
+                case 333 /* JSDocCallbackTag */:
+                case 342 /* JSDocPropertyTag */:
+                case 340 /* JSDocTypedefTag */:
+                case 337 /* JSDocThisTag */:
                     return sourceFile.getLineEndOfPosition(node.getStart());
                 default:
                     return node.getEnd();
@@ -134168,10 +137167,10 @@
                 }
                 return undefined;
             }
-            else if (ts.isTemplateHead(node) && parent.parent.kind === 206 /* TaggedTemplateExpression */) {
+            else if (ts.isTemplateHead(node) && parent.parent.kind === 208 /* TaggedTemplateExpression */) {
                 var templateExpression = parent;
                 var tagExpression = templateExpression.parent;
-                ts.Debug.assert(templateExpression.kind === 219 /* TemplateExpression */);
+                ts.Debug.assert(templateExpression.kind === 221 /* TemplateExpression */);
                 var argumentIndex = ts.isInsideTemplateLiteral(node, position, sourceFile) ? 0 : 1;
                 return getArgumentListInfoForTemplate(tagExpression, argumentIndex, sourceFile);
             }
@@ -134240,17 +137239,17 @@
                 return undefined;
             var parent = startingToken.parent;
             switch (parent.kind) {
-                case 208 /* ParenthesizedExpression */:
-                case 166 /* MethodDeclaration */:
-                case 209 /* FunctionExpression */:
-                case 210 /* ArrowFunction */:
+                case 210 /* ParenthesizedExpression */:
+                case 167 /* MethodDeclaration */:
+                case 211 /* FunctionExpression */:
+                case 212 /* ArrowFunction */:
                     var info = getArgumentOrParameterListInfo(startingToken, sourceFile);
                     if (!info)
                         return undefined;
                     var argumentIndex = info.argumentIndex, argumentCount = info.argumentCount, argumentsSpan = info.argumentsSpan;
                     var contextualType = ts.isMethodDeclaration(parent) ? checker.getContextualTypeForObjectLiteralElement(parent) : checker.getContextualType(parent);
                     return contextualType && { contextualType: contextualType, argumentIndex: argumentIndex, argumentCount: argumentCount, argumentsSpan: argumentsSpan };
-                case 217 /* BinaryExpression */: {
+                case 219 /* BinaryExpression */: {
                     var highestBinary = getHighestBinary(parent);
                     var contextualType_1 = checker.getContextualType(highestBinary);
                     var argumentIndex_1 = startingToken.kind === 20 /* OpenParenToken */ ? 0 : countBinaryExpressionParameters(parent) - 1;
@@ -134374,7 +137373,7 @@
             //       |       |
             // This is because a Missing node has no width. However, what we actually want is to include trivia
             // leading up to the next token in case the user is about to type in a TemplateMiddle or TemplateTail.
-            if (template.kind === 219 /* TemplateExpression */) {
+            if (template.kind === 221 /* TemplateExpression */) {
                 var lastSpan = ts.last(template.templateSpans);
                 if (lastSpan.literal.getFullWidth() === 0) {
                     applicableSpanEnd = ts.skipTrivia(sourceFile.text, applicableSpanEnd, /*stopAfterLineBreak*/ false);
@@ -134473,7 +137472,7 @@
             var parameters = typeParameters.map(function (t) { return createSignatureHelpParameterForTypeParameter(t, checker, enclosingDeclaration, sourceFile, printer); });
             var documentation = symbol.getDocumentationComment(checker);
             var tags = symbol.getJsDocTags(checker);
-            var prefixDisplayParts = __spreadArray(__spreadArray([], typeSymbolDisplay), [ts.punctuationPart(29 /* LessThanToken */)]);
+            var prefixDisplayParts = __spreadArray(__spreadArray([], typeSymbolDisplay, true), [ts.punctuationPart(29 /* LessThanToken */)], false);
             return { isVariadic: false, prefixDisplayParts: prefixDisplayParts, suffixDisplayParts: [ts.punctuationPart(31 /* GreaterThanToken */)], separatorDisplayParts: separatorDisplayParts, parameters: parameters, documentation: documentation, tags: tags };
         }
         var separatorDisplayParts = [ts.punctuationPart(27 /* CommaToken */), ts.spacePart()];
@@ -134481,8 +137480,8 @@
             var infos = (isTypeParameterList ? itemInfoForTypeParameters : itemInfoForParameters)(candidateSignature, checker, enclosingDeclaration, sourceFile);
             return ts.map(infos, function (_a) {
                 var isVariadic = _a.isVariadic, parameters = _a.parameters, prefix = _a.prefix, suffix = _a.suffix;
-                var prefixDisplayParts = __spreadArray(__spreadArray([], callTargetDisplayParts), prefix);
-                var suffixDisplayParts = __spreadArray(__spreadArray([], suffix), returnTypeToDisplayParts(candidateSignature, enclosingDeclaration, checker));
+                var prefixDisplayParts = __spreadArray(__spreadArray([], callTargetDisplayParts, true), prefix, true);
+                var suffixDisplayParts = __spreadArray(__spreadArray([], suffix, true), returnTypeToDisplayParts(candidateSignature, enclosingDeclaration, checker), true);
                 var documentation = candidateSignature.getDocumentationComment(checker);
                 var tags = candidateSignature.getJsDocTags();
                 return { isVariadic: isVariadic, prefixDisplayParts: prefixDisplayParts, suffixDisplayParts: suffixDisplayParts, separatorDisplayParts: separatorDisplayParts, parameters: parameters, documentation: documentation, tags: tags };
@@ -134507,15 +137506,14 @@
             var parameters = (typeParameters || ts.emptyArray).map(function (t) { return createSignatureHelpParameterForTypeParameter(t, checker, enclosingDeclaration, sourceFile, printer); });
             var thisParameter = candidateSignature.thisParameter ? [checker.symbolToParameterDeclaration(candidateSignature.thisParameter, enclosingDeclaration, signatureHelpNodeBuilderFlags)] : [];
             return checker.getExpandedParameters(candidateSignature).map(function (paramList) {
-                var params = ts.factory.createNodeArray(__spreadArray(__spreadArray([], thisParameter), ts.map(paramList, function (param) { return checker.symbolToParameterDeclaration(param, enclosingDeclaration, signatureHelpNodeBuilderFlags); })));
+                var params = ts.factory.createNodeArray(__spreadArray(__spreadArray([], thisParameter, true), ts.map(paramList, function (param) { return checker.symbolToParameterDeclaration(param, enclosingDeclaration, signatureHelpNodeBuilderFlags); }), true));
                 var parameterParts = ts.mapToDisplayParts(function (writer) {
                     printer.writeList(2576 /* CallExpressionArguments */, params, sourceFile, writer);
                 });
-                return { isVariadic: false, parameters: parameters, prefix: [ts.punctuationPart(29 /* LessThanToken */)], suffix: __spreadArray([ts.punctuationPart(31 /* GreaterThanToken */)], parameterParts) };
+                return { isVariadic: false, parameters: parameters, prefix: [ts.punctuationPart(29 /* LessThanToken */)], suffix: __spreadArray([ts.punctuationPart(31 /* GreaterThanToken */)], parameterParts, true) };
             });
         }
         function itemInfoForParameters(candidateSignature, checker, enclosingDeclaration, sourceFile) {
-            var isVariadic = checker.hasEffectiveRestParameter(candidateSignature);
             var printer = ts.createPrinter({ removeComments: true });
             var typeParameterParts = ts.mapToDisplayParts(function (writer) {
                 if (candidateSignature.typeParameters && candidateSignature.typeParameters.length) {
@@ -134524,14 +137522,15 @@
                 }
             });
             var lists = checker.getExpandedParameters(candidateSignature);
-            return lists.map(function (parameterList) {
-                return {
-                    isVariadic: isVariadic && (lists.length === 1 || !!(parameterList[parameterList.length - 1].checkFlags & 32768 /* RestParameter */)),
-                    parameters: parameterList.map(function (p) { return createSignatureHelpParameterForParameter(p, checker, enclosingDeclaration, sourceFile, printer); }),
-                    prefix: __spreadArray(__spreadArray([], typeParameterParts), [ts.punctuationPart(20 /* OpenParenToken */)]),
-                    suffix: [ts.punctuationPart(21 /* CloseParenToken */)]
-                };
-            });
+            var isVariadic = !checker.hasEffectiveRestParameter(candidateSignature) ? function (_) { return false; }
+                : lists.length === 1 ? function (_) { return true; }
+                    : function (pList) { return !!(pList.length && pList[pList.length - 1].checkFlags & 32768 /* RestParameter */); };
+            return lists.map(function (parameterList) { return ({
+                isVariadic: isVariadic(parameterList),
+                parameters: parameterList.map(function (p) { return createSignatureHelpParameterForParameter(p, checker, enclosingDeclaration, sourceFile, printer); }),
+                prefix: __spreadArray(__spreadArray([], typeParameterParts, true), [ts.punctuationPart(20 /* OpenParenToken */)], false),
+                suffix: [ts.punctuationPart(21 /* CloseParenToken */)]
+            }); });
         }
         function createSignatureHelpParameterForParameter(parameter, checker, enclosingDeclaration, sourceFile, printer) {
             var displayParts = ts.mapToDisplayParts(function (writer) {
@@ -134554,6 +137553,279 @@
 /* @internal */
 var ts;
 (function (ts) {
+    var InlayHints;
+    (function (InlayHints) {
+        var maxHintsLength = 30;
+        var leadingParameterNameCommentRegexFactory = function (name) {
+            return new RegExp("^\\s?/\\*\\*?\\s?" + name + "\\s?\\*\\/\\s?$");
+        };
+        function shouldShowParameterNameHints(preferences) {
+            return preferences.includeInlayParameterNameHints === "literals" || preferences.includeInlayParameterNameHints === "all";
+        }
+        function shouldShowLiteralParameterNameHintsOnly(preferences) {
+            return preferences.includeInlayParameterNameHints === "literals";
+        }
+        function provideInlayHints(context) {
+            var file = context.file, program = context.program, span = context.span, cancellationToken = context.cancellationToken, preferences = context.preferences;
+            var sourceFileText = file.text;
+            var compilerOptions = program.getCompilerOptions();
+            var checker = program.getTypeChecker();
+            var result = [];
+            visitor(file);
+            return result;
+            function visitor(node) {
+                if (!node || node.getFullWidth() === 0) {
+                    return;
+                }
+                switch (node.kind) {
+                    case 259 /* ModuleDeclaration */:
+                    case 255 /* ClassDeclaration */:
+                    case 256 /* InterfaceDeclaration */:
+                    case 254 /* FunctionDeclaration */:
+                    case 224 /* ClassExpression */:
+                    case 211 /* FunctionExpression */:
+                    case 167 /* MethodDeclaration */:
+                    case 212 /* ArrowFunction */:
+                        cancellationToken.throwIfCancellationRequested();
+                }
+                if (!ts.textSpanIntersectsWith(span, node.pos, node.getFullWidth())) {
+                    return;
+                }
+                if (ts.isTypeNode(node)) {
+                    return;
+                }
+                if (preferences.includeInlayVariableTypeHints && ts.isVariableDeclaration(node)) {
+                    visitVariableLikeDeclaration(node);
+                }
+                else if (preferences.includeInlayPropertyDeclarationTypeHints && ts.isPropertyDeclaration(node)) {
+                    visitVariableLikeDeclaration(node);
+                }
+                else if (preferences.includeInlayEnumMemberValueHints && ts.isEnumMember(node)) {
+                    visitEnumMember(node);
+                }
+                else if (shouldShowParameterNameHints(preferences) && (ts.isCallExpression(node) || ts.isNewExpression(node))) {
+                    visitCallOrNewExpression(node);
+                }
+                else {
+                    if (preferences.includeInlayFunctionParameterTypeHints && ts.isFunctionLikeDeclaration(node) && ts.hasContextSensitiveParameters(node)) {
+                        visitFunctionLikeForParameterType(node);
+                    }
+                    if (preferences.includeInlayFunctionLikeReturnTypeHints && isSignatureSupportingReturnAnnotation(node)) {
+                        visitFunctionDeclarationLikeForReturnType(node);
+                    }
+                }
+                return ts.forEachChild(node, visitor);
+            }
+            function isSignatureSupportingReturnAnnotation(node) {
+                return ts.isArrowFunction(node) || ts.isFunctionExpression(node) || ts.isFunctionDeclaration(node) || ts.isMethodDeclaration(node) || ts.isGetAccessorDeclaration(node);
+            }
+            function addParameterHints(text, position, isFirstVariadicArgument) {
+                result.push({
+                    text: "" + (isFirstVariadicArgument ? "..." : "") + truncation(text, maxHintsLength) + ":",
+                    position: position,
+                    kind: "Parameter" /* Parameter */,
+                    whitespaceAfter: true,
+                });
+            }
+            function addTypeHints(text, position) {
+                result.push({
+                    text: ": " + truncation(text, maxHintsLength),
+                    position: position,
+                    kind: "Type" /* Type */,
+                    whitespaceBefore: true,
+                });
+            }
+            function addEnumMemberValueHints(text, position) {
+                result.push({
+                    text: "= " + truncation(text, maxHintsLength),
+                    position: position,
+                    kind: "Enum" /* Enum */,
+                    whitespaceBefore: true,
+                });
+            }
+            function visitEnumMember(member) {
+                if (member.initializer) {
+                    return;
+                }
+                var enumValue = checker.getConstantValue(member);
+                if (enumValue !== undefined) {
+                    addEnumMemberValueHints(enumValue.toString(), member.end);
+                }
+            }
+            function isModuleReferenceType(type) {
+                return type.symbol && (type.symbol.flags & 1536 /* Module */);
+            }
+            function visitVariableLikeDeclaration(decl) {
+                if (!decl.initializer || ts.isBindingPattern(decl.name)) {
+                    return;
+                }
+                var effectiveTypeAnnotation = ts.getEffectiveTypeAnnotationNode(decl);
+                if (effectiveTypeAnnotation) {
+                    return;
+                }
+                var declarationType = checker.getTypeAtLocation(decl);
+                if (isModuleReferenceType(declarationType)) {
+                    return;
+                }
+                var typeDisplayString = printTypeInSingleLine(declarationType);
+                if (typeDisplayString) {
+                    addTypeHints(typeDisplayString, decl.name.end);
+                }
+            }
+            function visitCallOrNewExpression(expr) {
+                var args = expr.arguments;
+                if (!args || !args.length) {
+                    return;
+                }
+                var candidates = [];
+                var signature = checker.getResolvedSignatureForSignatureHelp(expr, candidates);
+                if (!signature || !candidates.length) {
+                    return;
+                }
+                for (var i = 0; i < args.length; ++i) {
+                    var originalArg = args[i];
+                    var arg = ts.skipParentheses(originalArg);
+                    if (shouldShowLiteralParameterNameHintsOnly(preferences) && !isHintableLiteral(arg)) {
+                        continue;
+                    }
+                    var identifierNameInfo = checker.getParameterIdentifierNameAtPosition(signature, i);
+                    if (identifierNameInfo) {
+                        var parameterName = identifierNameInfo[0], isFirstVariadicArgument = identifierNameInfo[1];
+                        var isParameterNameNotSameAsArgument = preferences.includeInlayParameterNameHintsWhenArgumentMatchesName || !identifierOrAccessExpressionPostfixMatchesParameterName(arg, parameterName);
+                        if (!isParameterNameNotSameAsArgument && !isFirstVariadicArgument) {
+                            continue;
+                        }
+                        var name = ts.unescapeLeadingUnderscores(parameterName);
+                        if (leadingCommentsContainsParameterName(arg, name)) {
+                            continue;
+                        }
+                        addParameterHints(name, originalArg.getStart(), isFirstVariadicArgument);
+                    }
+                }
+            }
+            function identifierOrAccessExpressionPostfixMatchesParameterName(expr, parameterName) {
+                if (ts.isIdentifier(expr)) {
+                    return expr.text === parameterName;
+                }
+                if (ts.isPropertyAccessExpression(expr)) {
+                    return expr.name.text === parameterName;
+                }
+                return false;
+            }
+            function leadingCommentsContainsParameterName(node, name) {
+                if (!ts.isIdentifierText(name, compilerOptions.target, ts.getLanguageVariant(file.scriptKind))) {
+                    return false;
+                }
+                var ranges = ts.getLeadingCommentRanges(sourceFileText, node.pos);
+                if (!(ranges === null || ranges === void 0 ? void 0 : ranges.length)) {
+                    return false;
+                }
+                var regex = leadingParameterNameCommentRegexFactory(name);
+                return ts.some(ranges, function (range) { return regex.test(sourceFileText.substring(range.pos, range.end)); });
+            }
+            function isHintableLiteral(node) {
+                switch (node.kind) {
+                    case 217 /* PrefixUnaryExpression */: {
+                        var operand = node.operand;
+                        return ts.isLiteralExpression(operand) || ts.isIdentifier(operand) && ts.isInfinityOrNaNString(operand.escapedText);
+                    }
+                    case 110 /* TrueKeyword */:
+                    case 95 /* FalseKeyword */:
+                    case 104 /* NullKeyword */:
+                        return true;
+                    case 79 /* Identifier */: {
+                        var name = node.escapedText;
+                        return isUndefined(name) || ts.isInfinityOrNaNString(name);
+                    }
+                }
+                return ts.isLiteralExpression(node);
+            }
+            function visitFunctionDeclarationLikeForReturnType(decl) {
+                if (ts.isArrowFunction(decl)) {
+                    if (!ts.findChildOfKind(decl, 20 /* OpenParenToken */, file)) {
+                        return;
+                    }
+                }
+                var effectiveTypeAnnotation = ts.getEffectiveReturnTypeNode(decl);
+                if (effectiveTypeAnnotation || !decl.body) {
+                    return;
+                }
+                var signature = checker.getSignatureFromDeclaration(decl);
+                if (!signature) {
+                    return;
+                }
+                var returnType = checker.getReturnTypeOfSignature(signature);
+                if (isModuleReferenceType(returnType)) {
+                    return;
+                }
+                var typeDisplayString = printTypeInSingleLine(returnType);
+                if (!typeDisplayString) {
+                    return;
+                }
+                addTypeHints(typeDisplayString, getTypeAnnotationPosition(decl));
+            }
+            function getTypeAnnotationPosition(decl) {
+                var closeParenToken = ts.findChildOfKind(decl, 21 /* CloseParenToken */, file);
+                if (closeParenToken) {
+                    return closeParenToken.end;
+                }
+                return decl.parameters.end;
+            }
+            function visitFunctionLikeForParameterType(node) {
+                var signature = checker.getSignatureFromDeclaration(node);
+                if (!signature) {
+                    return;
+                }
+                for (var i = 0; i < node.parameters.length && i < signature.parameters.length; ++i) {
+                    var param = node.parameters[i];
+                    var effectiveTypeAnnotation = ts.getEffectiveTypeAnnotationNode(param);
+                    if (effectiveTypeAnnotation) {
+                        continue;
+                    }
+                    var typeDisplayString = getParameterDeclarationTypeDisplayString(signature.parameters[i]);
+                    if (!typeDisplayString) {
+                        continue;
+                    }
+                    addTypeHints(typeDisplayString, param.end);
+                }
+            }
+            function getParameterDeclarationTypeDisplayString(symbol) {
+                var valueDeclaration = symbol.valueDeclaration;
+                if (!valueDeclaration || !ts.isParameter(valueDeclaration)) {
+                    return undefined;
+                }
+                var signatureParamType = checker.getTypeOfSymbolAtLocation(symbol, valueDeclaration);
+                if (isModuleReferenceType(signatureParamType)) {
+                    return undefined;
+                }
+                return printTypeInSingleLine(signatureParamType);
+            }
+            function truncation(text, maxLength) {
+                if (text.length > maxLength) {
+                    return text.substr(0, maxLength - "...".length) + "...";
+                }
+                return text;
+            }
+            function printTypeInSingleLine(type) {
+                var flags = 70221824 /* IgnoreErrors */ | 1048576 /* AllowUniqueESSymbolType */ | 16384 /* UseAliasDefinedOutsideCurrentScope */;
+                var options = { removeComments: true };
+                var printer = ts.createPrinter(options);
+                return ts.usingSingleLineStringWriter(function (writer) {
+                    var typeNode = checker.typeToTypeNode(type, /*enclosingDeclaration*/ undefined, flags, writer);
+                    ts.Debug.assertIsDefined(typeNode, "should always get typenode");
+                    printer.writeNode(4 /* Unspecified */, typeNode, /*sourceFile*/ file, writer);
+                });
+            }
+            function isUndefined(name) {
+                return name === "undefined";
+            }
+        }
+        InlayHints.provideInlayHints = provideInlayHints;
+    })(InlayHints = ts.InlayHints || (ts.InlayHints = {}));
+})(ts || (ts = {}));
+/* @internal */
+var ts;
+(function (ts) {
     var base64UrlRegExp = /^data:(?:application\/json(?:;charset=[uU][tT][fF]-8);base64,([A-Za-z0-9+\/=]+)$)?/;
     function getSourceMapper(host) {
         var getCanonicalFileName = ts.createGetCanonicalFileName(host.useCaseSensitiveFileNames());
@@ -134768,11 +138040,11 @@
     function containsTopLevelCommonjs(sourceFile) {
         return sourceFile.statements.some(function (statement) {
             switch (statement.kind) {
-                case 233 /* VariableStatement */:
+                case 235 /* VariableStatement */:
                     return statement.declarationList.declarations.some(function (decl) {
                         return !!decl.initializer && ts.isRequireCall(propertyAccessLeftHandSide(decl.initializer), /*checkArgumentIsStringLiteralLike*/ true);
                     });
-                case 234 /* ExpressionStatement */: {
+                case 236 /* ExpressionStatement */: {
                     var expression = statement.expression;
                     if (!ts.isBinaryExpression(expression))
                         return ts.isRequireCall(expression, /*checkArgumentIsStringLiteralLike*/ true);
@@ -134789,12 +138061,12 @@
     }
     function importNameForConvertToDefaultImport(node) {
         switch (node.kind) {
-            case 262 /* ImportDeclaration */:
+            case 264 /* ImportDeclaration */:
                 var importClause = node.importClause, moduleSpecifier = node.moduleSpecifier;
-                return importClause && !importClause.name && importClause.namedBindings && importClause.namedBindings.kind === 264 /* NamespaceImport */ && ts.isStringLiteral(moduleSpecifier)
+                return importClause && !importClause.name && importClause.namedBindings && importClause.namedBindings.kind === 266 /* NamespaceImport */ && ts.isStringLiteral(moduleSpecifier)
                     ? importClause.namedBindings.name
                     : undefined;
-            case 261 /* ImportEqualsDeclaration */:
+            case 263 /* ImportEqualsDeclaration */:
                 return node.name;
             default:
                 return undefined;
@@ -134856,22 +138128,27 @@
         if (node.arguments.length < 2)
             return true;
         return ts.some(node.arguments, function (arg) {
-            return arg.kind === 103 /* NullKeyword */ ||
+            return arg.kind === 104 /* NullKeyword */ ||
                 ts.isIdentifier(arg) && arg.text === "undefined";
         });
     }
     // should be kept up to date with getTransformationBody in convertToAsyncFunction.ts
     function isFixablePromiseArgument(arg, checker) {
         switch (arg.kind) {
-            case 252 /* FunctionDeclaration */:
-            case 209 /* FunctionExpression */:
-            case 210 /* ArrowFunction */:
+            case 254 /* FunctionDeclaration */:
+            case 211 /* FunctionExpression */:
+                var functionFlags = ts.getFunctionFlags(arg);
+                if (functionFlags & 1 /* Generator */) {
+                    return false;
+                }
+            // falls through
+            case 212 /* ArrowFunction */:
                 visitedNestedConvertibleFunctions.set(getKeyFromNode(arg), true);
             // falls through
-            case 103 /* NullKeyword */:
+            case 104 /* NullKeyword */:
                 return true;
-            case 78 /* Identifier */:
-            case 202 /* PropertyAccessExpression */: {
+            case 79 /* Identifier */:
+            case 204 /* PropertyAccessExpression */: {
                 var symbol = checker.getSymbolAtLocation(arg);
                 if (!symbol) {
                     return false;
@@ -134888,24 +138165,24 @@
     }
     function canBeConvertedToClass(node, checker) {
         var _a, _b, _c, _d;
-        if (node.kind === 209 /* FunctionExpression */) {
+        if (node.kind === 211 /* FunctionExpression */) {
             if (ts.isVariableDeclaration(node.parent) && ((_a = node.symbol.members) === null || _a === void 0 ? void 0 : _a.size)) {
                 return true;
             }
             var symbol = checker.getSymbolOfExpando(node, /*allowDeclaration*/ false);
             return !!(symbol && (((_b = symbol.exports) === null || _b === void 0 ? void 0 : _b.size) || ((_c = symbol.members) === null || _c === void 0 ? void 0 : _c.size)));
         }
-        if (node.kind === 252 /* FunctionDeclaration */) {
+        if (node.kind === 254 /* FunctionDeclaration */) {
             return !!((_d = node.symbol.members) === null || _d === void 0 ? void 0 : _d.size);
         }
         return false;
     }
     function canBeConvertedToAsync(node) {
         switch (node.kind) {
-            case 252 /* FunctionDeclaration */:
-            case 166 /* MethodDeclaration */:
-            case 209 /* FunctionExpression */:
-            case 210 /* ArrowFunction */:
+            case 254 /* FunctionDeclaration */:
+            case 167 /* MethodDeclaration */:
+            case 211 /* FunctionExpression */:
+            case 212 /* ArrowFunction */:
                 return true;
             default:
                 return false;
@@ -134927,7 +138204,7 @@
             }
             var flags = ts.getCombinedLocalAndExportSymbolFlags(symbol);
             if (flags & 32 /* Class */) {
-                return ts.getDeclarationOfKind(symbol, 222 /* ClassExpression */) ?
+                return ts.getDeclarationOfKind(symbol, 224 /* ClassExpression */) ?
                     "local class" /* localClassElement */ : "class" /* classElement */;
             }
             if (flags & 384 /* Enum */)
@@ -134962,7 +138239,7 @@
             if (typeChecker.isArgumentsSymbol(symbol)) {
                 return "local var" /* localVariableElement */;
             }
-            if (location.kind === 107 /* ThisKeyword */ && ts.isExpression(location)) {
+            if (location.kind === 108 /* ThisKeyword */ && ts.isExpression(location)) {
                 return "parameter" /* parameterElement */;
             }
             var flags = ts.getCombinedLocalAndExportSymbolFlags(symbol);
@@ -135011,11 +138288,11 @@
                 // If we requested completions after `x.` at the top-level, we may be at a source file location.
                 switch (location.parent && location.parent.kind) {
                     // If we've typed a character of the attribute name, will be 'JsxAttribute', else will be 'JsxOpeningElement'.
-                    case 276 /* JsxOpeningElement */:
-                    case 274 /* JsxElement */:
-                    case 275 /* JsxSelfClosingElement */:
-                        return location.kind === 78 /* Identifier */ ? "property" /* memberVariableElement */ : "JSX attribute" /* jsxAttribute */;
-                    case 281 /* JsxAttribute */:
+                    case 278 /* JsxOpeningElement */:
+                    case 276 /* JsxElement */:
+                    case 277 /* JsxSelfClosingElement */:
+                        return location.kind === 79 /* Identifier */ ? "property" /* memberVariableElement */ : "JSX attribute" /* jsxAttribute */;
+                    case 283 /* JsxAttribute */:
                         return "JSX attribute" /* jsxAttribute */;
                     default:
                         return "property" /* memberVariableElement */;
@@ -135023,14 +138300,11 @@
             }
             return "" /* unknown */;
         }
-        function isDeprecatedDeclaration(decl) {
-            return !!(ts.getCombinedNodeFlagsAlwaysIncludeJSDoc(decl) & 8192 /* Deprecated */);
-        }
         function getNormalizedSymbolModifiers(symbol) {
             if (symbol.declarations && symbol.declarations.length) {
                 var _a = symbol.declarations, declaration = _a[0], declarations = _a.slice(1);
                 // omit deprecated flag if some declarations are not deprecated
-                var excludeFlags = ts.length(declarations) && isDeprecatedDeclaration(declaration) && ts.some(declarations, function (d) { return !isDeprecatedDeclaration(d); })
+                var excludeFlags = ts.length(declarations) && ts.isDeprecatedDeclaration(declaration) && ts.some(declarations, function (d) { return !ts.isDeprecatedDeclaration(d); })
                     ? 8192 /* Deprecated */
                     : 0 /* None */;
                 var modifiers = ts.getNodeModifiers(declaration, excludeFlags);
@@ -135069,14 +138343,14 @@
             var symbolFlags = ts.getCombinedLocalAndExportSymbolFlags(symbol);
             var symbolKind = semanticMeaning & 1 /* Value */ ? getSymbolKindOfConstructorPropertyMethodAccessorFunctionOrVar(typeChecker, symbol, location) : "" /* unknown */;
             var hasAddedSymbolInfo = false;
-            var isThisExpression = location.kind === 107 /* ThisKeyword */ && ts.isInExpressionContext(location);
+            var isThisExpression = location.kind === 108 /* ThisKeyword */ && ts.isInExpressionContext(location);
             var type;
             var printer;
             var documentationFromAlias;
             var tagsFromAlias;
             var hasMultipleSignatures = false;
-            if (location.kind === 107 /* ThisKeyword */ && !isThisExpression) {
-                return { displayParts: [ts.keywordPart(107 /* ThisKeyword */)], documentation: [], symbolKind: "primitive type" /* primitiveType */, tags: undefined };
+            if (location.kind === 108 /* ThisKeyword */ && !isThisExpression) {
+                return { displayParts: [ts.keywordPart(108 /* ThisKeyword */)], documentation: [], symbolKind: "primitive type" /* primitiveType */, tags: undefined };
             }
             // Class at constructor site need to be shown as constructor apart from property,method, vars
             if (symbolKind !== "" /* unknown */ || symbolFlags & 32 /* Class */ || symbolFlags & 2097152 /* Alias */) {
@@ -135086,7 +138360,7 @@
                 }
                 var signature = void 0;
                 type = isThisExpression ? typeChecker.getTypeAtLocation(location) : typeChecker.getTypeOfSymbolAtLocation(symbol, location);
-                if (location.parent && location.parent.kind === 202 /* PropertyAccessExpression */) {
+                if (location.parent && location.parent.kind === 204 /* PropertyAccessExpression */) {
                     var right = location.parent.name;
                     // Either the location is on the right of a property access, or on the left and the right is missing
                     if (right === location || (right && right.getFullWidth() === 0)) {
@@ -135106,7 +138380,7 @@
                 }
                 if (callExpressionLike) {
                     signature = typeChecker.getResolvedSignature(callExpressionLike); // TODO: GH#18217
-                    var useConstructSignatures = callExpressionLike.kind === 205 /* NewExpression */ || (ts.isCallExpression(callExpressionLike) && callExpressionLike.expression.kind === 105 /* SuperKeyword */);
+                    var useConstructSignatures = callExpressionLike.kind === 207 /* NewExpression */ || (ts.isCallExpression(callExpressionLike) && callExpressionLike.expression.kind === 106 /* SuperKeyword */);
                     var allSignatures = useConstructSignatures ? type.getConstructSignatures() : type.getCallSignatures();
                     if (signature && !ts.contains(allSignatures, signature.target) && !ts.contains(allSignatures, signature)) {
                         // Get the first signature if there is one -- allSignatures may contain
@@ -135125,10 +138399,10 @@
                             displayParts.push(ts.spacePart());
                             if (useConstructSignatures) {
                                 if (signature.flags & 4 /* Abstract */) {
-                                    displayParts.push(ts.keywordPart(125 /* AbstractKeyword */));
+                                    displayParts.push(ts.keywordPart(126 /* AbstractKeyword */));
                                     displayParts.push(ts.spacePart());
                                 }
-                                displayParts.push(ts.keywordPart(102 /* NewKeyword */));
+                                displayParts.push(ts.keywordPart(103 /* NewKeyword */));
                                 displayParts.push(ts.spacePart());
                             }
                             addFullSymbolName(symbol);
@@ -135153,10 +138427,10 @@
                                 }
                                 if (useConstructSignatures) {
                                     if (signature.flags & 4 /* Abstract */) {
-                                        displayParts.push(ts.keywordPart(125 /* AbstractKeyword */));
+                                        displayParts.push(ts.keywordPart(126 /* AbstractKeyword */));
                                         displayParts.push(ts.spacePart());
                                     }
-                                    displayParts.push(ts.keywordPart(102 /* NewKeyword */));
+                                    displayParts.push(ts.keywordPart(103 /* NewKeyword */));
                                     displayParts.push(ts.spacePart());
                                 }
                                 addSignatureDisplayParts(signature, allSignatures, 262144 /* WriteArrowStyleSignature */);
@@ -135170,29 +138444,29 @@
                     }
                 }
                 else if ((ts.isNameOfFunctionDeclaration(location) && !(symbolFlags & 98304 /* Accessor */)) || // name of function declaration
-                    (location.kind === 132 /* ConstructorKeyword */ && location.parent.kind === 167 /* Constructor */)) { // At constructor keyword of constructor declaration
+                    (location.kind === 133 /* ConstructorKeyword */ && location.parent.kind === 169 /* Constructor */)) { // At constructor keyword of constructor declaration
                     // get the signature from the declaration and write it
                     var functionDeclaration_1 = location.parent;
                     // Use function declaration to write the signatures only if the symbol corresponding to this declaration
                     var locationIsSymbolDeclaration = symbol.declarations && ts.find(symbol.declarations, function (declaration) {
-                        return declaration === (location.kind === 132 /* ConstructorKeyword */ ? functionDeclaration_1.parent : functionDeclaration_1);
+                        return declaration === (location.kind === 133 /* ConstructorKeyword */ ? functionDeclaration_1.parent : functionDeclaration_1);
                     });
                     if (locationIsSymbolDeclaration) {
-                        var allSignatures = functionDeclaration_1.kind === 167 /* Constructor */ ? type.getNonNullableType().getConstructSignatures() : type.getNonNullableType().getCallSignatures();
+                        var allSignatures = functionDeclaration_1.kind === 169 /* Constructor */ ? type.getNonNullableType().getConstructSignatures() : type.getNonNullableType().getCallSignatures();
                         if (!typeChecker.isImplementationOfOverload(functionDeclaration_1)) {
                             signature = typeChecker.getSignatureFromDeclaration(functionDeclaration_1); // TODO: GH#18217
                         }
                         else {
                             signature = allSignatures[0];
                         }
-                        if (functionDeclaration_1.kind === 167 /* Constructor */) {
+                        if (functionDeclaration_1.kind === 169 /* Constructor */) {
                             // show (constructor) Type(...) signature
                             symbolKind = "constructor" /* constructorImplementationElement */;
                             addPrefixForAnyFunctionOrVar(type.symbol, symbolKind);
                         }
                         else {
                             // (function/method) symbol(..signature)
-                            addPrefixForAnyFunctionOrVar(functionDeclaration_1.kind === 170 /* CallSignature */ &&
+                            addPrefixForAnyFunctionOrVar(functionDeclaration_1.kind === 172 /* CallSignature */ &&
                                 !(type.symbol.flags & 2048 /* TypeLiteral */ || type.symbol.flags & 4096 /* ObjectLiteral */) ? type.symbol : symbol, symbolKind);
                         }
                         if (signature) {
@@ -135205,7 +138479,7 @@
             }
             if (symbolFlags & 32 /* Class */ && !hasAddedSymbolInfo && !isThisExpression) {
                 addAliasPrefixIfNecessary();
-                if (ts.getDeclarationOfKind(symbol, 222 /* ClassExpression */)) {
+                if (ts.getDeclarationOfKind(symbol, 224 /* ClassExpression */)) {
                     // Special case for class expressions because we would like to indicate that
                     // the class name is local to the class body (similar to function expression)
                     //      (local class) class <className>
@@ -135213,7 +138487,7 @@
                 }
                 else {
                     // Class declaration has name which is not local.
-                    displayParts.push(ts.keywordPart(83 /* ClassKeyword */));
+                    displayParts.push(ts.keywordPart(84 /* ClassKeyword */));
                 }
                 displayParts.push(ts.spacePart());
                 addFullSymbolName(symbol);
@@ -135221,37 +138495,37 @@
             }
             if ((symbolFlags & 64 /* Interface */) && (semanticMeaning & 2 /* Type */)) {
                 prefixNextMeaning();
-                displayParts.push(ts.keywordPart(117 /* InterfaceKeyword */));
+                displayParts.push(ts.keywordPart(118 /* InterfaceKeyword */));
                 displayParts.push(ts.spacePart());
                 addFullSymbolName(symbol);
                 writeTypeParametersOfSymbol(symbol, sourceFile);
             }
             if ((symbolFlags & 524288 /* TypeAlias */) && (semanticMeaning & 2 /* Type */)) {
                 prefixNextMeaning();
-                displayParts.push(ts.keywordPart(149 /* TypeKeyword */));
+                displayParts.push(ts.keywordPart(150 /* TypeKeyword */));
                 displayParts.push(ts.spacePart());
                 addFullSymbolName(symbol);
                 writeTypeParametersOfSymbol(symbol, sourceFile);
                 displayParts.push(ts.spacePart());
-                displayParts.push(ts.operatorPart(62 /* EqualsToken */));
+                displayParts.push(ts.operatorPart(63 /* EqualsToken */));
                 displayParts.push(ts.spacePart());
                 ts.addRange(displayParts, ts.typeToDisplayParts(typeChecker, typeChecker.getDeclaredTypeOfSymbol(symbol), enclosingDeclaration, 8388608 /* InTypeAlias */));
             }
             if (symbolFlags & 384 /* Enum */) {
                 prefixNextMeaning();
                 if (ts.some(symbol.declarations, function (d) { return ts.isEnumDeclaration(d) && ts.isEnumConst(d); })) {
-                    displayParts.push(ts.keywordPart(84 /* ConstKeyword */));
+                    displayParts.push(ts.keywordPart(85 /* ConstKeyword */));
                     displayParts.push(ts.spacePart());
                 }
-                displayParts.push(ts.keywordPart(91 /* EnumKeyword */));
+                displayParts.push(ts.keywordPart(92 /* EnumKeyword */));
                 displayParts.push(ts.spacePart());
                 addFullSymbolName(symbol);
             }
             if (symbolFlags & 1536 /* Module */ && !isThisExpression) {
                 prefixNextMeaning();
-                var declaration = ts.getDeclarationOfKind(symbol, 257 /* ModuleDeclaration */);
-                var isNamespace = declaration && declaration.name && declaration.name.kind === 78 /* Identifier */;
-                displayParts.push(ts.keywordPart(isNamespace ? 140 /* NamespaceKeyword */ : 139 /* ModuleKeyword */));
+                var declaration = ts.getDeclarationOfKind(symbol, 259 /* ModuleDeclaration */);
+                var isNamespace = declaration && declaration.name && declaration.name.kind === 79 /* Identifier */;
+                displayParts.push(ts.keywordPart(isNamespace ? 141 /* NamespaceKeyword */ : 140 /* ModuleKeyword */));
                 displayParts.push(ts.spacePart());
                 addFullSymbolName(symbol);
             }
@@ -135270,7 +138544,7 @@
                 }
                 else {
                     // Method/function type parameter
-                    var decl = ts.getDeclarationOfKind(symbol, 160 /* TypeParameter */);
+                    var decl = ts.getDeclarationOfKind(symbol, 161 /* TypeParameter */);
                     if (decl === undefined)
                         return ts.Debug.fail();
                     var declaration = decl.parent;
@@ -135278,21 +138552,21 @@
                         if (ts.isFunctionLikeKind(declaration.kind)) {
                             addInPrefix();
                             var signature = typeChecker.getSignatureFromDeclaration(declaration); // TODO: GH#18217
-                            if (declaration.kind === 171 /* ConstructSignature */) {
-                                displayParts.push(ts.keywordPart(102 /* NewKeyword */));
+                            if (declaration.kind === 173 /* ConstructSignature */) {
+                                displayParts.push(ts.keywordPart(103 /* NewKeyword */));
                                 displayParts.push(ts.spacePart());
                             }
-                            else if (declaration.kind !== 170 /* CallSignature */ && declaration.name) {
+                            else if (declaration.kind !== 172 /* CallSignature */ && declaration.name) {
                                 addFullSymbolName(declaration.symbol);
                             }
                             ts.addRange(displayParts, ts.signatureToDisplayParts(typeChecker, signature, sourceFile, 32 /* WriteTypeArgumentsOfSignature */));
                         }
-                        else if (declaration.kind === 255 /* TypeAliasDeclaration */) {
+                        else if (declaration.kind === 257 /* TypeAliasDeclaration */) {
                             // Type alias type parameter
                             // For example
                             //      type list<T> = T[]; // Both T will go through same code path
                             addInPrefix();
-                            displayParts.push(ts.keywordPart(149 /* TypeKeyword */));
+                            displayParts.push(ts.keywordPart(150 /* TypeKeyword */));
                             displayParts.push(ts.spacePart());
                             addFullSymbolName(declaration.symbol);
                             writeTypeParametersOfSymbol(declaration.symbol, sourceFile);
@@ -135304,11 +138578,11 @@
                 symbolKind = "enum member" /* enumMemberElement */;
                 addPrefixForAnyFunctionOrVar(symbol, "enum member");
                 var declaration = (_a = symbol.declarations) === null || _a === void 0 ? void 0 : _a[0];
-                if ((declaration === null || declaration === void 0 ? void 0 : declaration.kind) === 292 /* EnumMember */) {
+                if ((declaration === null || declaration === void 0 ? void 0 : declaration.kind) === 294 /* EnumMember */) {
                     var constantValue = typeChecker.getConstantValue(declaration);
                     if (constantValue !== undefined) {
                         displayParts.push(ts.spacePart());
-                        displayParts.push(ts.operatorPart(62 /* EqualsToken */));
+                        displayParts.push(ts.operatorPart(63 /* EqualsToken */));
                         displayParts.push(ts.spacePart());
                         displayParts.push(ts.displayPart(ts.getTextOfConstantValue(constantValue), typeof constantValue === "number" ? ts.SymbolDisplayPartKind.numericLiteral : ts.SymbolDisplayPartKind.stringLiteral));
                     }
@@ -135340,33 +138614,33 @@
                 }
                 if (symbol.declarations) {
                     switch (symbol.declarations[0].kind) {
-                        case 260 /* NamespaceExportDeclaration */:
-                            displayParts.push(ts.keywordPart(92 /* ExportKeyword */));
+                        case 262 /* NamespaceExportDeclaration */:
+                            displayParts.push(ts.keywordPart(93 /* ExportKeyword */));
                             displayParts.push(ts.spacePart());
-                            displayParts.push(ts.keywordPart(140 /* NamespaceKeyword */));
+                            displayParts.push(ts.keywordPart(141 /* NamespaceKeyword */));
                             break;
-                        case 267 /* ExportAssignment */:
-                            displayParts.push(ts.keywordPart(92 /* ExportKeyword */));
+                        case 269 /* ExportAssignment */:
+                            displayParts.push(ts.keywordPart(93 /* ExportKeyword */));
                             displayParts.push(ts.spacePart());
-                            displayParts.push(ts.keywordPart(symbol.declarations[0].isExportEquals ? 62 /* EqualsToken */ : 87 /* DefaultKeyword */));
+                            displayParts.push(ts.keywordPart(symbol.declarations[0].isExportEquals ? 63 /* EqualsToken */ : 88 /* DefaultKeyword */));
                             break;
-                        case 271 /* ExportSpecifier */:
-                            displayParts.push(ts.keywordPart(92 /* ExportKeyword */));
+                        case 273 /* ExportSpecifier */:
+                            displayParts.push(ts.keywordPart(93 /* ExportKeyword */));
                             break;
                         default:
-                            displayParts.push(ts.keywordPart(99 /* ImportKeyword */));
+                            displayParts.push(ts.keywordPart(100 /* ImportKeyword */));
                     }
                 }
                 displayParts.push(ts.spacePart());
                 addFullSymbolName(symbol);
                 ts.forEach(symbol.declarations, function (declaration) {
-                    if (declaration.kind === 261 /* ImportEqualsDeclaration */) {
+                    if (declaration.kind === 263 /* ImportEqualsDeclaration */) {
                         var importEqualsDeclaration = declaration;
                         if (ts.isExternalModuleImportEqualsDeclaration(importEqualsDeclaration)) {
                             displayParts.push(ts.spacePart());
-                            displayParts.push(ts.operatorPart(62 /* EqualsToken */));
+                            displayParts.push(ts.operatorPart(63 /* EqualsToken */));
                             displayParts.push(ts.spacePart());
-                            displayParts.push(ts.keywordPart(143 /* RequireKeyword */));
+                            displayParts.push(ts.keywordPart(144 /* RequireKeyword */));
                             displayParts.push(ts.punctuationPart(20 /* OpenParenToken */));
                             displayParts.push(ts.displayPart(ts.getTextOfNode(ts.getExternalModuleImportEqualsDeclarationExpression(importEqualsDeclaration)), ts.SymbolDisplayPartKind.stringLiteral));
                             displayParts.push(ts.punctuationPart(21 /* CloseParenToken */));
@@ -135375,7 +138649,7 @@
                             var internalAliasSymbol = typeChecker.getSymbolAtLocation(importEqualsDeclaration.moduleReference);
                             if (internalAliasSymbol) {
                                 displayParts.push(ts.spacePart());
-                                displayParts.push(ts.operatorPart(62 /* EqualsToken */));
+                                displayParts.push(ts.operatorPart(63 /* EqualsToken */));
                                 displayParts.push(ts.spacePart());
                                 addFullSymbolName(internalAliasSymbol, enclosingDeclaration);
                             }
@@ -135389,7 +138663,7 @@
                     if (type) {
                         if (isThisExpression) {
                             prefixNextMeaning();
-                            displayParts.push(ts.keywordPart(107 /* ThisKeyword */));
+                            displayParts.push(ts.keywordPart(108 /* ThisKeyword */));
                         }
                         else {
                             addPrefixForAnyFunctionOrVar(symbol, symbolKind);
@@ -135447,10 +138721,10 @@
                 // For some special property access expressions like `exports.foo = foo` or `module.exports.foo = foo`
                 // there documentation comments might be attached to the right hand side symbol of their declarations.
                 // The pattern of such special property access is that the parent symbol is the symbol of the file.
-                if (symbol.parent && symbol.declarations && ts.forEach(symbol.parent.declarations, function (declaration) { return declaration.kind === 298 /* SourceFile */; })) {
+                if (symbol.parent && symbol.declarations && ts.forEach(symbol.parent.declarations, function (declaration) { return declaration.kind === 300 /* SourceFile */; })) {
                     for (var _i = 0, _b = symbol.declarations; _i < _b.length; _i++) {
                         var declaration = _b[_i];
-                        if (!declaration.parent || declaration.parent.kind !== 217 /* BinaryExpression */) {
+                        if (!declaration.parent || declaration.parent.kind !== 219 /* BinaryExpression */) {
                             continue;
                         }
                         var rhsSymbol = typeChecker.getSymbolAtLocation(declaration.parent.right);
@@ -135495,7 +138769,7 @@
             }
             function addInPrefix() {
                 displayParts.push(ts.spacePart());
-                displayParts.push(ts.keywordPart(100 /* InKeyword */));
+                displayParts.push(ts.keywordPart(101 /* InKeyword */));
                 displayParts.push(ts.spacePart());
             }
             function addFullSymbolName(symbolToDisplay, enclosingDeclaration) {
@@ -135568,16 +138842,16 @@
             }
             return ts.forEach(symbol.declarations, function (declaration) {
                 // Function expressions are local
-                if (declaration.kind === 209 /* FunctionExpression */) {
+                if (declaration.kind === 211 /* FunctionExpression */) {
                     return true;
                 }
-                if (declaration.kind !== 250 /* VariableDeclaration */ && declaration.kind !== 252 /* FunctionDeclaration */) {
+                if (declaration.kind !== 252 /* VariableDeclaration */ && declaration.kind !== 254 /* FunctionDeclaration */) {
                     return false;
                 }
                 // If the parent is not sourceFile or module block it is local variable
                 for (var parent = declaration.parent; !ts.isFunctionBlock(parent); parent = parent.parent) {
                     // Reached source file or module block
-                    if (parent.kind === 298 /* SourceFile */ || parent.kind === 258 /* ModuleBlock */) {
+                    if (parent.kind === 300 /* SourceFile */ || parent.kind === 260 /* ModuleBlock */) {
                         return false;
                     }
                 }
@@ -135679,9 +138953,8 @@
     /*@internal*/
     function fixupCompilerOptions(options, diagnostics) {
         // Lazily create this value to fix module loading errors.
-        commandLineOptionsStringToEnum = commandLineOptionsStringToEnum || ts.filter(ts.optionDeclarations, function (o) {
-            return typeof o.type === "object" && !ts.forEachEntry(o.type, function (v) { return typeof v !== "number"; });
-        });
+        commandLineOptionsStringToEnum = commandLineOptionsStringToEnum ||
+            ts.filter(ts.optionDeclarations, function (o) { return typeof o.type === "object" && !ts.forEachEntry(o.type, function (v) { return typeof v !== "number"; }); });
         options = ts.cloneCompilerOptions(options);
         var _loop_9 = function (opt) {
             if (!ts.hasProperty(options, opt.name)) {
@@ -135867,8 +139140,8 @@
             function shouldRescanGreaterThanToken(node) {
                 switch (node.kind) {
                     case 33 /* GreaterThanEqualsToken */:
-                    case 70 /* GreaterThanGreaterThanEqualsToken */:
-                    case 71 /* GreaterThanGreaterThanGreaterThanEqualsToken */:
+                    case 71 /* GreaterThanGreaterThanEqualsToken */:
+                    case 72 /* GreaterThanGreaterThanGreaterThanEqualsToken */:
                     case 49 /* GreaterThanGreaterThanGreaterThanToken */:
                     case 48 /* GreaterThanGreaterThanToken */:
                         return true;
@@ -135878,12 +139151,12 @@
             function shouldRescanJsxIdentifier(node) {
                 if (node.parent) {
                     switch (node.parent.kind) {
-                        case 281 /* JsxAttribute */:
-                        case 276 /* JsxOpeningElement */:
-                        case 277 /* JsxClosingElement */:
-                        case 275 /* JsxSelfClosingElement */:
+                        case 283 /* JsxAttribute */:
+                        case 278 /* JsxOpeningElement */:
+                        case 279 /* JsxClosingElement */:
+                        case 277 /* JsxSelfClosingElement */:
                             // May parse an identifier like `module-layout`; that will be scanned as a keyword at first, but we should parse the whole thing to get an identifier.
-                            return ts.isKeyword(node.kind) || node.kind === 78 /* Identifier */;
+                            return ts.isKeyword(node.kind) || node.kind === 79 /* Identifier */;
                     }
                 }
                 return false;
@@ -135902,7 +139175,7 @@
                 return node.parent && ts.isJsxAttribute(node.parent) && node.parent.initializer === node;
             }
             function startsWithSlashToken(t) {
-                return t === 43 /* SlashToken */ || t === 67 /* SlashEqualsToken */;
+                return t === 43 /* SlashToken */ || t === 68 /* SlashEqualsToken */;
             }
             function readTokenInfo(n) {
                 ts.Debug.assert(isOnToken());
@@ -136075,7 +139348,7 @@
     (function (formatting) {
         function getAllRules() {
             var allTokens = [];
-            for (var token = 0 /* FirstToken */; token <= 157 /* LastToken */; token++) {
+            for (var token = 0 /* FirstToken */; token <= 158 /* LastToken */; token++) {
                 if (token !== 1 /* EndOfFileToken */) {
                     allTokens.push(token);
                 }
@@ -136088,29 +139361,29 @@
                 return { tokens: allTokens.filter(function (t) { return !tokens.some(function (t2) { return t2 === t; }); }), isSpecific: false };
             }
             var anyToken = { tokens: allTokens, isSpecific: false };
-            var anyTokenIncludingMultilineComments = tokenRangeFrom(__spreadArray(__spreadArray([], allTokens), [3 /* MultiLineCommentTrivia */]));
-            var anyTokenIncludingEOF = tokenRangeFrom(__spreadArray(__spreadArray([], allTokens), [1 /* EndOfFileToken */]));
-            var keywords = tokenRangeFromRange(80 /* FirstKeyword */, 157 /* LastKeyword */);
-            var binaryOperators = tokenRangeFromRange(29 /* FirstBinaryOperator */, 77 /* LastBinaryOperator */);
-            var binaryKeywordOperators = [100 /* InKeyword */, 101 /* InstanceOfKeyword */, 157 /* OfKeyword */, 126 /* AsKeyword */, 137 /* IsKeyword */];
+            var anyTokenIncludingMultilineComments = tokenRangeFrom(__spreadArray(__spreadArray([], allTokens, true), [3 /* MultiLineCommentTrivia */], false));
+            var anyTokenIncludingEOF = tokenRangeFrom(__spreadArray(__spreadArray([], allTokens, true), [1 /* EndOfFileToken */], false));
+            var keywords = tokenRangeFromRange(81 /* FirstKeyword */, 158 /* LastKeyword */);
+            var binaryOperators = tokenRangeFromRange(29 /* FirstBinaryOperator */, 78 /* LastBinaryOperator */);
+            var binaryKeywordOperators = [101 /* InKeyword */, 102 /* InstanceOfKeyword */, 158 /* OfKeyword */, 127 /* AsKeyword */, 138 /* IsKeyword */];
             var unaryPrefixOperators = [45 /* PlusPlusToken */, 46 /* MinusMinusToken */, 54 /* TildeToken */, 53 /* ExclamationToken */];
             var unaryPrefixExpressions = [
-                8 /* NumericLiteral */, 9 /* BigIntLiteral */, 78 /* Identifier */, 20 /* OpenParenToken */,
-                22 /* OpenBracketToken */, 18 /* OpenBraceToken */, 107 /* ThisKeyword */, 102 /* NewKeyword */
+                8 /* NumericLiteral */, 9 /* BigIntLiteral */, 79 /* Identifier */, 20 /* OpenParenToken */,
+                22 /* OpenBracketToken */, 18 /* OpenBraceToken */, 108 /* ThisKeyword */, 103 /* NewKeyword */
             ];
-            var unaryPreincrementExpressions = [78 /* Identifier */, 20 /* OpenParenToken */, 107 /* ThisKeyword */, 102 /* NewKeyword */];
-            var unaryPostincrementExpressions = [78 /* Identifier */, 21 /* CloseParenToken */, 23 /* CloseBracketToken */, 102 /* NewKeyword */];
-            var unaryPredecrementExpressions = [78 /* Identifier */, 20 /* OpenParenToken */, 107 /* ThisKeyword */, 102 /* NewKeyword */];
-            var unaryPostdecrementExpressions = [78 /* Identifier */, 21 /* CloseParenToken */, 23 /* CloseBracketToken */, 102 /* NewKeyword */];
+            var unaryPreincrementExpressions = [79 /* Identifier */, 20 /* OpenParenToken */, 108 /* ThisKeyword */, 103 /* NewKeyword */];
+            var unaryPostincrementExpressions = [79 /* Identifier */, 21 /* CloseParenToken */, 23 /* CloseBracketToken */, 103 /* NewKeyword */];
+            var unaryPredecrementExpressions = [79 /* Identifier */, 20 /* OpenParenToken */, 108 /* ThisKeyword */, 103 /* NewKeyword */];
+            var unaryPostdecrementExpressions = [79 /* Identifier */, 21 /* CloseParenToken */, 23 /* CloseBracketToken */, 103 /* NewKeyword */];
             var comments = [2 /* SingleLineCommentTrivia */, 3 /* MultiLineCommentTrivia */];
-            var typeNames = __spreadArray([78 /* Identifier */], ts.typeKeywords);
+            var typeNames = __spreadArray([79 /* Identifier */], ts.typeKeywords, true);
             // Place a space before open brace in a function declaration
             // TypeScript: Function can have return types, which can be made of tons of different token kinds
             var functionOpenBraceLeftTokenRange = anyTokenIncludingMultilineComments;
             // Place a space before open brace in a TypeScript declaration that has braces as children (class, module, enum, etc)
-            var typeScriptOpenBraceLeftTokenRange = tokenRangeFrom([78 /* Identifier */, 3 /* MultiLineCommentTrivia */, 83 /* ClassKeyword */, 92 /* ExportKeyword */, 99 /* ImportKeyword */]);
+            var typeScriptOpenBraceLeftTokenRange = tokenRangeFrom([79 /* Identifier */, 3 /* MultiLineCommentTrivia */, 84 /* ClassKeyword */, 93 /* ExportKeyword */, 100 /* ImportKeyword */]);
             // Place a space before open brace in a control flow construct
-            var controlOpenBraceLeftTokenRange = tokenRangeFrom([21 /* CloseParenToken */, 3 /* MultiLineCommentTrivia */, 89 /* DoKeyword */, 110 /* TryKeyword */, 95 /* FinallyKeyword */, 90 /* ElseKeyword */]);
+            var controlOpenBraceLeftTokenRange = tokenRangeFrom([21 /* CloseParenToken */, 3 /* MultiLineCommentTrivia */, 90 /* DoKeyword */, 111 /* TryKeyword */, 96 /* FinallyKeyword */, 91 /* ElseKeyword */]);
             // These rules are higher in priority than user-configurable
             var highPriorityCommonRules = [
                 // Leave comments alone
@@ -136125,7 +139398,7 @@
                 rule("NoSpaceAfterQuestionMark", 57 /* QuestionToken */, anyToken, [isNonJsxSameLineTokenContext], 16 /* DeleteSpace */),
                 rule("NoSpaceBeforeDot", anyToken, [24 /* DotToken */, 28 /* QuestionDotToken */], [isNonJsxSameLineTokenContext], 16 /* DeleteSpace */),
                 rule("NoSpaceAfterDot", [24 /* DotToken */, 28 /* QuestionDotToken */], anyToken, [isNonJsxSameLineTokenContext], 16 /* DeleteSpace */),
-                rule("NoSpaceBetweenImportParenInImportType", 99 /* ImportKeyword */, 20 /* OpenParenToken */, [isNonJsxSameLineTokenContext, isImportTypeContext], 16 /* DeleteSpace */),
+                rule("NoSpaceBetweenImportParenInImportType", 100 /* ImportKeyword */, 20 /* OpenParenToken */, [isNonJsxSameLineTokenContext, isImportTypeContext], 16 /* DeleteSpace */),
                 // Special handling of unary operators.
                 // Prefix operators generally shouldn't have a space between
                 // them and their target unary expression.
@@ -136152,79 +139425,79 @@
                 rule("SpaceAfterCloseBrace", 19 /* CloseBraceToken */, anyTokenExcept(21 /* CloseParenToken */), [isNonJsxSameLineTokenContext, isAfterCodeBlockContext], 4 /* InsertSpace */),
                 // Special case for (}, else) and (}, while) since else & while tokens are not part of the tree which makes SpaceAfterCloseBrace rule not applied
                 // Also should not apply to })
-                rule("SpaceBetweenCloseBraceAndElse", 19 /* CloseBraceToken */, 90 /* ElseKeyword */, [isNonJsxSameLineTokenContext], 4 /* InsertSpace */),
-                rule("SpaceBetweenCloseBraceAndWhile", 19 /* CloseBraceToken */, 114 /* WhileKeyword */, [isNonJsxSameLineTokenContext], 4 /* InsertSpace */),
+                rule("SpaceBetweenCloseBraceAndElse", 19 /* CloseBraceToken */, 91 /* ElseKeyword */, [isNonJsxSameLineTokenContext], 4 /* InsertSpace */),
+                rule("SpaceBetweenCloseBraceAndWhile", 19 /* CloseBraceToken */, 115 /* WhileKeyword */, [isNonJsxSameLineTokenContext], 4 /* InsertSpace */),
                 rule("NoSpaceBetweenEmptyBraceBrackets", 18 /* OpenBraceToken */, 19 /* CloseBraceToken */, [isNonJsxSameLineTokenContext, isObjectContext], 16 /* DeleteSpace */),
                 // Add a space after control dec context if the next character is an open bracket ex: 'if (false)[a, b] = [1, 2];' -> 'if (false) [a, b] = [1, 2];'
                 rule("SpaceAfterConditionalClosingParen", 21 /* CloseParenToken */, 22 /* OpenBracketToken */, [isControlDeclContext], 4 /* InsertSpace */),
-                rule("NoSpaceBetweenFunctionKeywordAndStar", 97 /* FunctionKeyword */, 41 /* AsteriskToken */, [isFunctionDeclarationOrFunctionExpressionContext], 16 /* DeleteSpace */),
-                rule("SpaceAfterStarInGeneratorDeclaration", 41 /* AsteriskToken */, 78 /* Identifier */, [isFunctionDeclarationOrFunctionExpressionContext], 4 /* InsertSpace */),
-                rule("SpaceAfterFunctionInFuncDecl", 97 /* FunctionKeyword */, anyToken, [isFunctionDeclContext], 4 /* InsertSpace */),
+                rule("NoSpaceBetweenFunctionKeywordAndStar", 98 /* FunctionKeyword */, 41 /* AsteriskToken */, [isFunctionDeclarationOrFunctionExpressionContext], 16 /* DeleteSpace */),
+                rule("SpaceAfterStarInGeneratorDeclaration", 41 /* AsteriskToken */, 79 /* Identifier */, [isFunctionDeclarationOrFunctionExpressionContext], 4 /* InsertSpace */),
+                rule("SpaceAfterFunctionInFuncDecl", 98 /* FunctionKeyword */, anyToken, [isFunctionDeclContext], 4 /* InsertSpace */),
                 // Insert new line after { and before } in multi-line contexts.
                 rule("NewLineAfterOpenBraceInBlockContext", 18 /* OpenBraceToken */, anyToken, [isMultilineBlockContext], 8 /* InsertNewLine */),
                 // For get/set members, we check for (identifier,identifier) since get/set don't have tokens and they are represented as just an identifier token.
                 // Though, we do extra check on the context to make sure we are dealing with get/set node. Example:
                 //      get x() {}
                 //      set x(val) {}
-                rule("SpaceAfterGetSetInMember", [134 /* GetKeyword */, 146 /* SetKeyword */], 78 /* Identifier */, [isFunctionDeclContext], 4 /* InsertSpace */),
-                rule("NoSpaceBetweenYieldKeywordAndStar", 124 /* YieldKeyword */, 41 /* AsteriskToken */, [isNonJsxSameLineTokenContext, isYieldOrYieldStarWithOperand], 16 /* DeleteSpace */),
-                rule("SpaceBetweenYieldOrYieldStarAndOperand", [124 /* YieldKeyword */, 41 /* AsteriskToken */], anyToken, [isNonJsxSameLineTokenContext, isYieldOrYieldStarWithOperand], 4 /* InsertSpace */),
-                rule("NoSpaceBetweenReturnAndSemicolon", 104 /* ReturnKeyword */, 26 /* SemicolonToken */, [isNonJsxSameLineTokenContext], 16 /* DeleteSpace */),
-                rule("SpaceAfterCertainKeywords", [112 /* VarKeyword */, 108 /* ThrowKeyword */, 102 /* NewKeyword */, 88 /* DeleteKeyword */, 104 /* ReturnKeyword */, 111 /* TypeOfKeyword */, 130 /* AwaitKeyword */], anyToken, [isNonJsxSameLineTokenContext], 4 /* InsertSpace */),
-                rule("SpaceAfterLetConstInVariableDeclaration", [118 /* LetKeyword */, 84 /* ConstKeyword */], anyToken, [isNonJsxSameLineTokenContext, isStartOfVariableDeclarationList], 4 /* InsertSpace */),
+                rule("SpaceAfterGetSetInMember", [135 /* GetKeyword */, 147 /* SetKeyword */], 79 /* Identifier */, [isFunctionDeclContext], 4 /* InsertSpace */),
+                rule("NoSpaceBetweenYieldKeywordAndStar", 125 /* YieldKeyword */, 41 /* AsteriskToken */, [isNonJsxSameLineTokenContext, isYieldOrYieldStarWithOperand], 16 /* DeleteSpace */),
+                rule("SpaceBetweenYieldOrYieldStarAndOperand", [125 /* YieldKeyword */, 41 /* AsteriskToken */], anyToken, [isNonJsxSameLineTokenContext, isYieldOrYieldStarWithOperand], 4 /* InsertSpace */),
+                rule("NoSpaceBetweenReturnAndSemicolon", 105 /* ReturnKeyword */, 26 /* SemicolonToken */, [isNonJsxSameLineTokenContext], 16 /* DeleteSpace */),
+                rule("SpaceAfterCertainKeywords", [113 /* VarKeyword */, 109 /* ThrowKeyword */, 103 /* NewKeyword */, 89 /* DeleteKeyword */, 105 /* ReturnKeyword */, 112 /* TypeOfKeyword */, 131 /* AwaitKeyword */], anyToken, [isNonJsxSameLineTokenContext], 4 /* InsertSpace */),
+                rule("SpaceAfterLetConstInVariableDeclaration", [119 /* LetKeyword */, 85 /* ConstKeyword */], anyToken, [isNonJsxSameLineTokenContext, isStartOfVariableDeclarationList], 4 /* InsertSpace */),
                 rule("NoSpaceBeforeOpenParenInFuncCall", anyToken, 20 /* OpenParenToken */, [isNonJsxSameLineTokenContext, isFunctionCallOrNewContext, isPreviousTokenNotComma], 16 /* DeleteSpace */),
                 // Special case for binary operators (that are keywords). For these we have to add a space and shouldn't follow any user options.
                 rule("SpaceBeforeBinaryKeywordOperator", anyToken, binaryKeywordOperators, [isNonJsxSameLineTokenContext, isBinaryOpContext], 4 /* InsertSpace */),
                 rule("SpaceAfterBinaryKeywordOperator", binaryKeywordOperators, anyToken, [isNonJsxSameLineTokenContext, isBinaryOpContext], 4 /* InsertSpace */),
-                rule("SpaceAfterVoidOperator", 113 /* VoidKeyword */, anyToken, [isNonJsxSameLineTokenContext, isVoidOpContext], 4 /* InsertSpace */),
+                rule("SpaceAfterVoidOperator", 114 /* VoidKeyword */, anyToken, [isNonJsxSameLineTokenContext, isVoidOpContext], 4 /* InsertSpace */),
                 // Async-await
-                rule("SpaceBetweenAsyncAndOpenParen", 129 /* AsyncKeyword */, 20 /* OpenParenToken */, [isArrowFunctionContext, isNonJsxSameLineTokenContext], 4 /* InsertSpace */),
-                rule("SpaceBetweenAsyncAndFunctionKeyword", 129 /* AsyncKeyword */, [97 /* FunctionKeyword */, 78 /* Identifier */], [isNonJsxSameLineTokenContext], 4 /* InsertSpace */),
+                rule("SpaceBetweenAsyncAndOpenParen", 130 /* AsyncKeyword */, 20 /* OpenParenToken */, [isArrowFunctionContext, isNonJsxSameLineTokenContext], 4 /* InsertSpace */),
+                rule("SpaceBetweenAsyncAndFunctionKeyword", 130 /* AsyncKeyword */, [98 /* FunctionKeyword */, 79 /* Identifier */], [isNonJsxSameLineTokenContext], 4 /* InsertSpace */),
                 // Template string
-                rule("NoSpaceBetweenTagAndTemplateString", [78 /* Identifier */, 21 /* CloseParenToken */], [14 /* NoSubstitutionTemplateLiteral */, 15 /* TemplateHead */], [isNonJsxSameLineTokenContext], 16 /* DeleteSpace */),
+                rule("NoSpaceBetweenTagAndTemplateString", [79 /* Identifier */, 21 /* CloseParenToken */], [14 /* NoSubstitutionTemplateLiteral */, 15 /* TemplateHead */], [isNonJsxSameLineTokenContext], 16 /* DeleteSpace */),
                 // JSX opening elements
-                rule("SpaceBeforeJsxAttribute", anyToken, 78 /* Identifier */, [isNextTokenParentJsxAttribute, isNonJsxSameLineTokenContext], 4 /* InsertSpace */),
+                rule("SpaceBeforeJsxAttribute", anyToken, 79 /* Identifier */, [isNextTokenParentJsxAttribute, isNonJsxSameLineTokenContext], 4 /* InsertSpace */),
                 rule("SpaceBeforeSlashInJsxOpeningElement", anyToken, 43 /* SlashToken */, [isJsxSelfClosingElementContext, isNonJsxSameLineTokenContext], 4 /* InsertSpace */),
                 rule("NoSpaceBeforeGreaterThanTokenInJsxOpeningElement", 43 /* SlashToken */, 31 /* GreaterThanToken */, [isJsxSelfClosingElementContext, isNonJsxSameLineTokenContext], 16 /* DeleteSpace */),
-                rule("NoSpaceBeforeEqualInJsxAttribute", anyToken, 62 /* EqualsToken */, [isJsxAttributeContext, isNonJsxSameLineTokenContext], 16 /* DeleteSpace */),
-                rule("NoSpaceAfterEqualInJsxAttribute", 62 /* EqualsToken */, anyToken, [isJsxAttributeContext, isNonJsxSameLineTokenContext], 16 /* DeleteSpace */),
+                rule("NoSpaceBeforeEqualInJsxAttribute", anyToken, 63 /* EqualsToken */, [isJsxAttributeContext, isNonJsxSameLineTokenContext], 16 /* DeleteSpace */),
+                rule("NoSpaceAfterEqualInJsxAttribute", 63 /* EqualsToken */, anyToken, [isJsxAttributeContext, isNonJsxSameLineTokenContext], 16 /* DeleteSpace */),
                 // TypeScript-specific rules
                 // Use of module as a function call. e.g.: import m2 = module("m2");
-                rule("NoSpaceAfterModuleImport", [139 /* ModuleKeyword */, 143 /* RequireKeyword */], 20 /* OpenParenToken */, [isNonJsxSameLineTokenContext], 16 /* DeleteSpace */),
+                rule("NoSpaceAfterModuleImport", [140 /* ModuleKeyword */, 144 /* RequireKeyword */], 20 /* OpenParenToken */, [isNonJsxSameLineTokenContext], 16 /* DeleteSpace */),
                 // Add a space around certain TypeScript keywords
                 rule("SpaceAfterCertainTypeScriptKeywords", [
-                    125 /* AbstractKeyword */,
-                    83 /* ClassKeyword */,
-                    133 /* DeclareKeyword */,
-                    87 /* DefaultKeyword */,
-                    91 /* EnumKeyword */,
-                    92 /* ExportKeyword */,
-                    93 /* ExtendsKeyword */,
-                    134 /* GetKeyword */,
-                    116 /* ImplementsKeyword */,
-                    99 /* ImportKeyword */,
-                    117 /* InterfaceKeyword */,
-                    139 /* ModuleKeyword */,
-                    140 /* NamespaceKeyword */,
-                    120 /* PrivateKeyword */,
-                    122 /* PublicKeyword */,
-                    121 /* ProtectedKeyword */,
-                    142 /* ReadonlyKeyword */,
-                    146 /* SetKeyword */,
-                    123 /* StaticKeyword */,
-                    149 /* TypeKeyword */,
-                    153 /* FromKeyword */,
-                    138 /* KeyOfKeyword */,
-                    135 /* InferKeyword */,
+                    126 /* AbstractKeyword */,
+                    84 /* ClassKeyword */,
+                    134 /* DeclareKeyword */,
+                    88 /* DefaultKeyword */,
+                    92 /* EnumKeyword */,
+                    93 /* ExportKeyword */,
+                    94 /* ExtendsKeyword */,
+                    135 /* GetKeyword */,
+                    117 /* ImplementsKeyword */,
+                    100 /* ImportKeyword */,
+                    118 /* InterfaceKeyword */,
+                    140 /* ModuleKeyword */,
+                    141 /* NamespaceKeyword */,
+                    121 /* PrivateKeyword */,
+                    123 /* PublicKeyword */,
+                    122 /* ProtectedKeyword */,
+                    143 /* ReadonlyKeyword */,
+                    147 /* SetKeyword */,
+                    124 /* StaticKeyword */,
+                    150 /* TypeKeyword */,
+                    154 /* FromKeyword */,
+                    139 /* KeyOfKeyword */,
+                    136 /* InferKeyword */,
                 ], anyToken, [isNonJsxSameLineTokenContext], 4 /* InsertSpace */),
-                rule("SpaceBeforeCertainTypeScriptKeywords", anyToken, [93 /* ExtendsKeyword */, 116 /* ImplementsKeyword */, 153 /* FromKeyword */], [isNonJsxSameLineTokenContext], 4 /* InsertSpace */),
+                rule("SpaceBeforeCertainTypeScriptKeywords", anyToken, [94 /* ExtendsKeyword */, 117 /* ImplementsKeyword */, 154 /* FromKeyword */], [isNonJsxSameLineTokenContext], 4 /* InsertSpace */),
                 // Treat string literals in module names as identifiers, and add a space between the literal and the opening Brace braces, e.g.: module "m2" {
                 rule("SpaceAfterModuleName", 10 /* StringLiteral */, 18 /* OpenBraceToken */, [isModuleDeclContext], 4 /* InsertSpace */),
                 // Lambda expressions
                 rule("SpaceBeforeArrow", anyToken, 38 /* EqualsGreaterThanToken */, [isNonJsxSameLineTokenContext], 4 /* InsertSpace */),
                 rule("SpaceAfterArrow", 38 /* EqualsGreaterThanToken */, anyToken, [isNonJsxSameLineTokenContext], 4 /* InsertSpace */),
                 // Optional parameters and let args
-                rule("NoSpaceAfterEllipsis", 25 /* DotDotDotToken */, 78 /* Identifier */, [isNonJsxSameLineTokenContext], 16 /* DeleteSpace */),
+                rule("NoSpaceAfterEllipsis", 25 /* DotDotDotToken */, 79 /* Identifier */, [isNonJsxSameLineTokenContext], 16 /* DeleteSpace */),
                 rule("NoSpaceAfterOptionalParameters", 57 /* QuestionToken */, [21 /* CloseParenToken */, 27 /* CommaToken */], [isNonJsxSameLineTokenContext, isNotBinaryOpContext], 16 /* DeleteSpace */),
                 // Remove spaces in empty interface literals. e.g.: x: {}
                 rule("NoSpaceBetweenEmptyInterfaceBraceBrackets", 18 /* OpenBraceToken */, 19 /* CloseBraceToken */, [isNonJsxSameLineTokenContext, isObjectTypeContext], 16 /* DeleteSpace */),
@@ -136235,38 +139508,38 @@
                 rule("NoSpaceBeforeCloseAngularBracket", anyToken, 31 /* GreaterThanToken */, [isNonJsxSameLineTokenContext, isTypeArgumentOrParameterOrAssertionContext], 16 /* DeleteSpace */),
                 rule("NoSpaceAfterCloseAngularBracket", 31 /* GreaterThanToken */, [20 /* OpenParenToken */, 22 /* OpenBracketToken */, 31 /* GreaterThanToken */, 27 /* CommaToken */], [isNonJsxSameLineTokenContext, isTypeArgumentOrParameterOrAssertionContext, isNotFunctionDeclContext /*To prevent an interference with the SpaceBeforeOpenParenInFuncDecl rule*/], 16 /* DeleteSpace */),
                 // decorators
-                rule("SpaceBeforeAt", [21 /* CloseParenToken */, 78 /* Identifier */], 59 /* AtToken */, [isNonJsxSameLineTokenContext], 4 /* InsertSpace */),
+                rule("SpaceBeforeAt", [21 /* CloseParenToken */, 79 /* Identifier */], 59 /* AtToken */, [isNonJsxSameLineTokenContext], 4 /* InsertSpace */),
                 rule("NoSpaceAfterAt", 59 /* AtToken */, anyToken, [isNonJsxSameLineTokenContext], 16 /* DeleteSpace */),
                 // Insert space after @ in decorator
                 rule("SpaceAfterDecorator", anyToken, [
-                    125 /* AbstractKeyword */,
-                    78 /* Identifier */,
-                    92 /* ExportKeyword */,
-                    87 /* DefaultKeyword */,
-                    83 /* ClassKeyword */,
-                    123 /* StaticKeyword */,
-                    122 /* PublicKeyword */,
-                    120 /* PrivateKeyword */,
-                    121 /* ProtectedKeyword */,
-                    134 /* GetKeyword */,
-                    146 /* SetKeyword */,
+                    126 /* AbstractKeyword */,
+                    79 /* Identifier */,
+                    93 /* ExportKeyword */,
+                    88 /* DefaultKeyword */,
+                    84 /* ClassKeyword */,
+                    124 /* StaticKeyword */,
+                    123 /* PublicKeyword */,
+                    121 /* PrivateKeyword */,
+                    122 /* ProtectedKeyword */,
+                    135 /* GetKeyword */,
+                    147 /* SetKeyword */,
                     22 /* OpenBracketToken */,
                     41 /* AsteriskToken */,
                 ], [isEndOfDecoratorContextOnSameLine], 4 /* InsertSpace */),
                 rule("NoSpaceBeforeNonNullAssertionOperator", anyToken, 53 /* ExclamationToken */, [isNonJsxSameLineTokenContext, isNonNullAssertionContext], 16 /* DeleteSpace */),
-                rule("NoSpaceAfterNewKeywordOnConstructorSignature", 102 /* NewKeyword */, 20 /* OpenParenToken */, [isNonJsxSameLineTokenContext, isConstructorSignatureContext], 16 /* DeleteSpace */),
+                rule("NoSpaceAfterNewKeywordOnConstructorSignature", 103 /* NewKeyword */, 20 /* OpenParenToken */, [isNonJsxSameLineTokenContext, isConstructorSignatureContext], 16 /* DeleteSpace */),
                 rule("SpaceLessThanAndNonJSXTypeAnnotation", 29 /* LessThanToken */, 29 /* LessThanToken */, [isNonJsxSameLineTokenContext], 4 /* InsertSpace */),
             ];
             // These rules are applied after high priority
             var userConfigurableRules = [
                 // Treat constructor as an identifier in a function declaration, and remove spaces between constructor and following left parentheses
-                rule("SpaceAfterConstructor", 132 /* ConstructorKeyword */, 20 /* OpenParenToken */, [isOptionEnabled("insertSpaceAfterConstructor"), isNonJsxSameLineTokenContext], 4 /* InsertSpace */),
-                rule("NoSpaceAfterConstructor", 132 /* ConstructorKeyword */, 20 /* OpenParenToken */, [isOptionDisabledOrUndefined("insertSpaceAfterConstructor"), isNonJsxSameLineTokenContext], 16 /* DeleteSpace */),
+                rule("SpaceAfterConstructor", 133 /* ConstructorKeyword */, 20 /* OpenParenToken */, [isOptionEnabled("insertSpaceAfterConstructor"), isNonJsxSameLineTokenContext], 4 /* InsertSpace */),
+                rule("NoSpaceAfterConstructor", 133 /* ConstructorKeyword */, 20 /* OpenParenToken */, [isOptionDisabledOrUndefined("insertSpaceAfterConstructor"), isNonJsxSameLineTokenContext], 16 /* DeleteSpace */),
                 rule("SpaceAfterComma", 27 /* CommaToken */, anyToken, [isOptionEnabled("insertSpaceAfterCommaDelimiter"), isNonJsxSameLineTokenContext, isNonJsxElementOrFragmentContext, isNextTokenNotCloseBracket, isNextTokenNotCloseParen], 4 /* InsertSpace */),
                 rule("NoSpaceAfterComma", 27 /* CommaToken */, anyToken, [isOptionDisabledOrUndefined("insertSpaceAfterCommaDelimiter"), isNonJsxSameLineTokenContext, isNonJsxElementOrFragmentContext], 16 /* DeleteSpace */),
                 // Insert space after function keyword for anonymous functions
-                rule("SpaceAfterAnonymousFunctionKeyword", [97 /* FunctionKeyword */, 41 /* AsteriskToken */], 20 /* OpenParenToken */, [isOptionEnabled("insertSpaceAfterFunctionKeywordForAnonymousFunctions"), isFunctionDeclContext], 4 /* InsertSpace */),
-                rule("NoSpaceAfterAnonymousFunctionKeyword", [97 /* FunctionKeyword */, 41 /* AsteriskToken */], 20 /* OpenParenToken */, [isOptionDisabledOrUndefined("insertSpaceAfterFunctionKeywordForAnonymousFunctions"), isFunctionDeclContext], 16 /* DeleteSpace */),
+                rule("SpaceAfterAnonymousFunctionKeyword", [98 /* FunctionKeyword */, 41 /* AsteriskToken */], 20 /* OpenParenToken */, [isOptionEnabled("insertSpaceAfterFunctionKeywordForAnonymousFunctions"), isFunctionDeclContext], 4 /* InsertSpace */),
+                rule("NoSpaceAfterAnonymousFunctionKeyword", [98 /* FunctionKeyword */, 41 /* AsteriskToken */], 20 /* OpenParenToken */, [isOptionDisabledOrUndefined("insertSpaceAfterFunctionKeywordForAnonymousFunctions"), isFunctionDeclContext], 16 /* DeleteSpace */),
                 // Insert space after keywords in control flow statements
                 rule("SpaceAfterKeywordInControl", keywords, 20 /* OpenParenToken */, [isOptionEnabled("insertSpaceAfterKeywordsInControlFlowStatements"), isControlDeclContext], 4 /* InsertSpace */),
                 rule("NoSpaceAfterKeywordInControl", keywords, 20 /* OpenParenToken */, [isOptionDisabledOrUndefined("insertSpaceAfterKeywordsInControlFlowStatements"), isControlDeclContext], 16 /* DeleteSpace */),
@@ -136335,18 +139608,18 @@
                 rule("SpaceBeforeOpenBraceInTypeScriptDeclWithBlock", typeScriptOpenBraceLeftTokenRange, 18 /* OpenBraceToken */, [isOptionDisabledOrUndefinedOrTokensOnSameLine("placeOpenBraceOnNewLineForFunctions"), isTypeScriptDeclWithBlockContext, isNotFormatOnEnter, isSameLineTokenOrBeforeBlockContext], 4 /* InsertSpace */, 1 /* CanDeleteNewLines */),
                 rule("NoSpaceBeforeComma", anyToken, 27 /* CommaToken */, [isNonJsxSameLineTokenContext], 16 /* DeleteSpace */),
                 // No space before and after indexer `x[]`
-                rule("NoSpaceBeforeOpenBracket", anyTokenExcept(129 /* AsyncKeyword */, 81 /* CaseKeyword */), 22 /* OpenBracketToken */, [isNonJsxSameLineTokenContext], 16 /* DeleteSpace */),
+                rule("NoSpaceBeforeOpenBracket", anyTokenExcept(130 /* AsyncKeyword */, 82 /* CaseKeyword */), 22 /* OpenBracketToken */, [isNonJsxSameLineTokenContext], 16 /* DeleteSpace */),
                 rule("NoSpaceAfterCloseBracket", 23 /* CloseBracketToken */, anyToken, [isNonJsxSameLineTokenContext, isNotBeforeBlockInFunctionDeclarationContext], 16 /* DeleteSpace */),
                 rule("SpaceAfterSemicolon", 26 /* SemicolonToken */, anyToken, [isNonJsxSameLineTokenContext], 4 /* InsertSpace */),
                 // Remove extra space between for and await
-                rule("SpaceBetweenForAndAwaitKeyword", 96 /* ForKeyword */, 130 /* AwaitKeyword */, [isNonJsxSameLineTokenContext], 4 /* InsertSpace */),
+                rule("SpaceBetweenForAndAwaitKeyword", 97 /* ForKeyword */, 131 /* AwaitKeyword */, [isNonJsxSameLineTokenContext], 4 /* InsertSpace */),
                 // Add a space between statements. All keywords except (do,else,case) has open/close parens after them.
                 // So, we have a rule to add a space for [),Any], [do,Any], [else,Any], and [case,Any]
-                rule("SpaceBetweenStatements", [21 /* CloseParenToken */, 89 /* DoKeyword */, 90 /* ElseKeyword */, 81 /* CaseKeyword */], anyToken, [isNonJsxSameLineTokenContext, isNonJsxElementOrFragmentContext, isNotForContext], 4 /* InsertSpace */),
+                rule("SpaceBetweenStatements", [21 /* CloseParenToken */, 90 /* DoKeyword */, 91 /* ElseKeyword */, 82 /* CaseKeyword */], anyToken, [isNonJsxSameLineTokenContext, isNonJsxElementOrFragmentContext, isNotForContext], 4 /* InsertSpace */),
                 // This low-pri rule takes care of "try {", "catch {" and "finally {" in case the rule SpaceBeforeOpenBraceInControl didn't execute on FormatOnEnter.
-                rule("SpaceAfterTryCatchFinally", [110 /* TryKeyword */, 82 /* CatchKeyword */, 95 /* FinallyKeyword */], 18 /* OpenBraceToken */, [isNonJsxSameLineTokenContext], 4 /* InsertSpace */),
+                rule("SpaceAfterTryCatchFinally", [111 /* TryKeyword */, 83 /* CatchKeyword */, 96 /* FinallyKeyword */], 18 /* OpenBraceToken */, [isNonJsxSameLineTokenContext], 4 /* InsertSpace */),
             ];
-            return __spreadArray(__spreadArray(__spreadArray([], highPriorityCommonRules), userConfigurableRules), lowPriorityCommonRules);
+            return __spreadArray(__spreadArray(__spreadArray([], highPriorityCommonRules, true), userConfigurableRules, true), lowPriorityCommonRules, true);
         }
         formatting.getAllRules = getAllRules;
         /**
@@ -136403,51 +139676,54 @@
             return function (context) { return !context.options || !context.options.hasOwnProperty(optionName) || !!context.options[optionName]; };
         }
         function isForContext(context) {
-            return context.contextNode.kind === 238 /* ForStatement */;
+            return context.contextNode.kind === 240 /* ForStatement */;
         }
         function isNotForContext(context) {
             return !isForContext(context);
         }
         function isBinaryOpContext(context) {
             switch (context.contextNode.kind) {
-                case 217 /* BinaryExpression */:
+                case 219 /* BinaryExpression */:
                     return context.contextNode.operatorToken.kind !== 27 /* CommaToken */;
-                case 218 /* ConditionalExpression */:
-                case 185 /* ConditionalType */:
-                case 225 /* AsExpression */:
-                case 271 /* ExportSpecifier */:
-                case 266 /* ImportSpecifier */:
-                case 173 /* TypePredicate */:
-                case 183 /* UnionType */:
-                case 184 /* IntersectionType */:
+                case 220 /* ConditionalExpression */:
+                case 187 /* ConditionalType */:
+                case 227 /* AsExpression */:
+                case 273 /* ExportSpecifier */:
+                case 268 /* ImportSpecifier */:
+                case 175 /* TypePredicate */:
+                case 185 /* UnionType */:
+                case 186 /* IntersectionType */:
                     return true;
                 // equals in binding elements: function foo([[x, y] = [1, 2]])
-                case 199 /* BindingElement */:
+                case 201 /* BindingElement */:
                 // equals in type X = ...
                 // falls through
-                case 255 /* TypeAliasDeclaration */:
+                case 257 /* TypeAliasDeclaration */:
                 // equal in import a = module('a');
                 // falls through
-                case 261 /* ImportEqualsDeclaration */:
+                case 263 /* ImportEqualsDeclaration */:
+                // equal in export = 1
+                // falls through
+                case 269 /* ExportAssignment */:
                 // equal in let a = 0
                 // falls through
-                case 250 /* VariableDeclaration */:
+                case 252 /* VariableDeclaration */:
                 // equal in p = 0
                 // falls through
-                case 161 /* Parameter */:
-                case 292 /* EnumMember */:
-                case 164 /* PropertyDeclaration */:
-                case 163 /* PropertySignature */:
-                    return context.currentTokenSpan.kind === 62 /* EqualsToken */ || context.nextTokenSpan.kind === 62 /* EqualsToken */;
+                case 162 /* Parameter */:
+                case 294 /* EnumMember */:
+                case 165 /* PropertyDeclaration */:
+                case 164 /* PropertySignature */:
+                    return context.currentTokenSpan.kind === 63 /* EqualsToken */ || context.nextTokenSpan.kind === 63 /* EqualsToken */;
                 // "in" keyword in for (let x in []) { }
-                case 239 /* ForInStatement */:
+                case 241 /* ForInStatement */:
                 // "in" keyword in [P in keyof T]: T[P]
                 // falls through
-                case 160 /* TypeParameter */:
-                    return context.currentTokenSpan.kind === 100 /* InKeyword */ || context.nextTokenSpan.kind === 100 /* InKeyword */ || context.currentTokenSpan.kind === 62 /* EqualsToken */ || context.nextTokenSpan.kind === 62 /* EqualsToken */;
+                case 161 /* TypeParameter */:
+                    return context.currentTokenSpan.kind === 101 /* InKeyword */ || context.nextTokenSpan.kind === 101 /* InKeyword */ || context.currentTokenSpan.kind === 63 /* EqualsToken */ || context.nextTokenSpan.kind === 63 /* EqualsToken */;
                 // Technically, "of" is not a binary operator, but format it the same way as "in"
-                case 240 /* ForOfStatement */:
-                    return context.currentTokenSpan.kind === 157 /* OfKeyword */ || context.nextTokenSpan.kind === 157 /* OfKeyword */;
+                case 242 /* ForOfStatement */:
+                    return context.currentTokenSpan.kind === 158 /* OfKeyword */ || context.nextTokenSpan.kind === 158 /* OfKeyword */;
             }
             return false;
         }
@@ -136459,22 +139735,22 @@
         }
         function isTypeAnnotationContext(context) {
             var contextKind = context.contextNode.kind;
-            return contextKind === 164 /* PropertyDeclaration */ ||
-                contextKind === 163 /* PropertySignature */ ||
-                contextKind === 161 /* Parameter */ ||
-                contextKind === 250 /* VariableDeclaration */ ||
+            return contextKind === 165 /* PropertyDeclaration */ ||
+                contextKind === 164 /* PropertySignature */ ||
+                contextKind === 162 /* Parameter */ ||
+                contextKind === 252 /* VariableDeclaration */ ||
                 ts.isFunctionLikeKind(contextKind);
         }
         function isConditionalOperatorContext(context) {
-            return context.contextNode.kind === 218 /* ConditionalExpression */ ||
-                context.contextNode.kind === 185 /* ConditionalType */;
+            return context.contextNode.kind === 220 /* ConditionalExpression */ ||
+                context.contextNode.kind === 187 /* ConditionalType */;
         }
         function isSameLineTokenOrBeforeBlockContext(context) {
             return context.TokensAreOnSameLine() || isBeforeBlockContext(context);
         }
         function isBraceWrappedContext(context) {
-            return context.contextNode.kind === 197 /* ObjectBindingPattern */ ||
-                context.contextNode.kind === 191 /* MappedType */ ||
+            return context.contextNode.kind === 199 /* ObjectBindingPattern */ ||
+                context.contextNode.kind === 193 /* MappedType */ ||
                 isSingleLineBlockContext(context);
         }
         // This check is done before an open brace in a control construct, a function, or a typescript block declaration
@@ -136500,34 +139776,34 @@
                 return true;
             }
             switch (node.kind) {
-                case 231 /* Block */:
-                case 259 /* CaseBlock */:
-                case 201 /* ObjectLiteralExpression */:
-                case 258 /* ModuleBlock */:
+                case 233 /* Block */:
+                case 261 /* CaseBlock */:
+                case 203 /* ObjectLiteralExpression */:
+                case 260 /* ModuleBlock */:
                     return true;
             }
             return false;
         }
         function isFunctionDeclContext(context) {
             switch (context.contextNode.kind) {
-                case 252 /* FunctionDeclaration */:
-                case 166 /* MethodDeclaration */:
-                case 165 /* MethodSignature */:
+                case 254 /* FunctionDeclaration */:
+                case 167 /* MethodDeclaration */:
+                case 166 /* MethodSignature */:
                 // case SyntaxKind.MemberFunctionDeclaration:
                 // falls through
-                case 168 /* GetAccessor */:
-                case 169 /* SetAccessor */:
+                case 170 /* GetAccessor */:
+                case 171 /* SetAccessor */:
                 // case SyntaxKind.MethodSignature:
                 // falls through
-                case 170 /* CallSignature */:
-                case 209 /* FunctionExpression */:
-                case 167 /* Constructor */:
-                case 210 /* ArrowFunction */:
+                case 172 /* CallSignature */:
+                case 211 /* FunctionExpression */:
+                case 169 /* Constructor */:
+                case 212 /* ArrowFunction */:
                 // case SyntaxKind.ConstructorDeclaration:
                 // case SyntaxKind.SimpleArrowFunctionExpression:
                 // case SyntaxKind.ParenthesizedArrowFunctionExpression:
                 // falls through
-                case 254 /* InterfaceDeclaration */: // This one is not truly a function, but for formatting purposes, it acts just like one
+                case 256 /* InterfaceDeclaration */: // This one is not truly a function, but for formatting purposes, it acts just like one
                     return true;
             }
             return false;
@@ -136536,40 +139812,40 @@
             return !isFunctionDeclContext(context);
         }
         function isFunctionDeclarationOrFunctionExpressionContext(context) {
-            return context.contextNode.kind === 252 /* FunctionDeclaration */ || context.contextNode.kind === 209 /* FunctionExpression */;
+            return context.contextNode.kind === 254 /* FunctionDeclaration */ || context.contextNode.kind === 211 /* FunctionExpression */;
         }
         function isTypeScriptDeclWithBlockContext(context) {
             return nodeIsTypeScriptDeclWithBlockContext(context.contextNode);
         }
         function nodeIsTypeScriptDeclWithBlockContext(node) {
             switch (node.kind) {
-                case 253 /* ClassDeclaration */:
-                case 222 /* ClassExpression */:
-                case 254 /* InterfaceDeclaration */:
-                case 256 /* EnumDeclaration */:
-                case 178 /* TypeLiteral */:
-                case 257 /* ModuleDeclaration */:
-                case 268 /* ExportDeclaration */:
-                case 269 /* NamedExports */:
-                case 262 /* ImportDeclaration */:
-                case 265 /* NamedImports */:
+                case 255 /* ClassDeclaration */:
+                case 224 /* ClassExpression */:
+                case 256 /* InterfaceDeclaration */:
+                case 258 /* EnumDeclaration */:
+                case 180 /* TypeLiteral */:
+                case 259 /* ModuleDeclaration */:
+                case 270 /* ExportDeclaration */:
+                case 271 /* NamedExports */:
+                case 264 /* ImportDeclaration */:
+                case 267 /* NamedImports */:
                     return true;
             }
             return false;
         }
         function isAfterCodeBlockContext(context) {
             switch (context.currentTokenParent.kind) {
-                case 253 /* ClassDeclaration */:
-                case 257 /* ModuleDeclaration */:
-                case 256 /* EnumDeclaration */:
-                case 288 /* CatchClause */:
-                case 258 /* ModuleBlock */:
-                case 245 /* SwitchStatement */:
+                case 255 /* ClassDeclaration */:
+                case 259 /* ModuleDeclaration */:
+                case 258 /* EnumDeclaration */:
+                case 290 /* CatchClause */:
+                case 260 /* ModuleBlock */:
+                case 247 /* SwitchStatement */:
                     return true;
-                case 231 /* Block */: {
+                case 233 /* Block */: {
                     var blockParent = context.currentTokenParent.parent;
                     // In a codefix scenario, we can't rely on parents being set. So just always return true.
-                    if (!blockParent || blockParent.kind !== 210 /* ArrowFunction */ && blockParent.kind !== 209 /* FunctionExpression */) {
+                    if (!blockParent || blockParent.kind !== 212 /* ArrowFunction */ && blockParent.kind !== 211 /* FunctionExpression */) {
                         return true;
                     }
                 }
@@ -136578,32 +139854,32 @@
         }
         function isControlDeclContext(context) {
             switch (context.contextNode.kind) {
-                case 235 /* IfStatement */:
-                case 245 /* SwitchStatement */:
-                case 238 /* ForStatement */:
-                case 239 /* ForInStatement */:
-                case 240 /* ForOfStatement */:
-                case 237 /* WhileStatement */:
-                case 248 /* TryStatement */:
-                case 236 /* DoStatement */:
-                case 244 /* WithStatement */:
+                case 237 /* IfStatement */:
+                case 247 /* SwitchStatement */:
+                case 240 /* ForStatement */:
+                case 241 /* ForInStatement */:
+                case 242 /* ForOfStatement */:
+                case 239 /* WhileStatement */:
+                case 250 /* TryStatement */:
+                case 238 /* DoStatement */:
+                case 246 /* WithStatement */:
                 // TODO
                 // case SyntaxKind.ElseClause:
                 // falls through
-                case 288 /* CatchClause */:
+                case 290 /* CatchClause */:
                     return true;
                 default:
                     return false;
             }
         }
         function isObjectContext(context) {
-            return context.contextNode.kind === 201 /* ObjectLiteralExpression */;
+            return context.contextNode.kind === 203 /* ObjectLiteralExpression */;
         }
         function isFunctionCallContext(context) {
-            return context.contextNode.kind === 204 /* CallExpression */;
+            return context.contextNode.kind === 206 /* CallExpression */;
         }
         function isNewContext(context) {
-            return context.contextNode.kind === 205 /* NewExpression */;
+            return context.contextNode.kind === 207 /* NewExpression */;
         }
         function isFunctionCallOrNewContext(context) {
             return isFunctionCallContext(context) || isNewContext(context);
@@ -136618,10 +139894,10 @@
             return context.nextTokenSpan.kind !== 21 /* CloseParenToken */;
         }
         function isArrowFunctionContext(context) {
-            return context.contextNode.kind === 210 /* ArrowFunction */;
+            return context.contextNode.kind === 212 /* ArrowFunction */;
         }
         function isImportTypeContext(context) {
-            return context.contextNode.kind === 196 /* ImportType */;
+            return context.contextNode.kind === 198 /* ImportType */;
         }
         function isNonJsxSameLineTokenContext(context) {
             return context.TokensAreOnSameLine() && context.contextNode.kind !== 11 /* JsxText */;
@@ -136630,19 +139906,19 @@
             return context.contextNode.kind !== 11 /* JsxText */;
         }
         function isNonJsxElementOrFragmentContext(context) {
-            return context.contextNode.kind !== 274 /* JsxElement */ && context.contextNode.kind !== 278 /* JsxFragment */;
+            return context.contextNode.kind !== 276 /* JsxElement */ && context.contextNode.kind !== 280 /* JsxFragment */;
         }
         function isJsxExpressionContext(context) {
-            return context.contextNode.kind === 284 /* JsxExpression */ || context.contextNode.kind === 283 /* JsxSpreadAttribute */;
+            return context.contextNode.kind === 286 /* JsxExpression */ || context.contextNode.kind === 285 /* JsxSpreadAttribute */;
         }
         function isNextTokenParentJsxAttribute(context) {
-            return context.nextTokenParent.kind === 281 /* JsxAttribute */;
+            return context.nextTokenParent.kind === 283 /* JsxAttribute */;
         }
         function isJsxAttributeContext(context) {
-            return context.contextNode.kind === 281 /* JsxAttribute */;
+            return context.contextNode.kind === 283 /* JsxAttribute */;
         }
         function isJsxSelfClosingElementContext(context) {
-            return context.contextNode.kind === 275 /* JsxSelfClosingElement */;
+            return context.contextNode.kind === 277 /* JsxSelfClosingElement */;
         }
         function isNotBeforeBlockInFunctionDeclarationContext(context) {
             return !isFunctionDeclContext(context) && !isBeforeBlockContext(context);
@@ -136657,45 +139933,45 @@
             while (ts.isExpressionNode(node)) {
                 node = node.parent;
             }
-            return node.kind === 162 /* Decorator */;
+            return node.kind === 163 /* Decorator */;
         }
         function isStartOfVariableDeclarationList(context) {
-            return context.currentTokenParent.kind === 251 /* VariableDeclarationList */ &&
+            return context.currentTokenParent.kind === 253 /* VariableDeclarationList */ &&
                 context.currentTokenParent.getStart(context.sourceFile) === context.currentTokenSpan.pos;
         }
         function isNotFormatOnEnter(context) {
             return context.formattingRequestKind !== 2 /* FormatOnEnter */;
         }
         function isModuleDeclContext(context) {
-            return context.contextNode.kind === 257 /* ModuleDeclaration */;
+            return context.contextNode.kind === 259 /* ModuleDeclaration */;
         }
         function isObjectTypeContext(context) {
-            return context.contextNode.kind === 178 /* TypeLiteral */; // && context.contextNode.parent.kind !== SyntaxKind.InterfaceDeclaration;
+            return context.contextNode.kind === 180 /* TypeLiteral */; // && context.contextNode.parent.kind !== SyntaxKind.InterfaceDeclaration;
         }
         function isConstructorSignatureContext(context) {
-            return context.contextNode.kind === 171 /* ConstructSignature */;
+            return context.contextNode.kind === 173 /* ConstructSignature */;
         }
         function isTypeArgumentOrParameterOrAssertion(token, parent) {
             if (token.kind !== 29 /* LessThanToken */ && token.kind !== 31 /* GreaterThanToken */) {
                 return false;
             }
             switch (parent.kind) {
-                case 174 /* TypeReference */:
-                case 207 /* TypeAssertionExpression */:
-                case 255 /* TypeAliasDeclaration */:
-                case 253 /* ClassDeclaration */:
-                case 222 /* ClassExpression */:
-                case 254 /* InterfaceDeclaration */:
-                case 252 /* FunctionDeclaration */:
-                case 209 /* FunctionExpression */:
-                case 210 /* ArrowFunction */:
-                case 166 /* MethodDeclaration */:
-                case 165 /* MethodSignature */:
-                case 170 /* CallSignature */:
-                case 171 /* ConstructSignature */:
-                case 204 /* CallExpression */:
-                case 205 /* NewExpression */:
-                case 224 /* ExpressionWithTypeArguments */:
+                case 176 /* TypeReference */:
+                case 209 /* TypeAssertionExpression */:
+                case 257 /* TypeAliasDeclaration */:
+                case 255 /* ClassDeclaration */:
+                case 224 /* ClassExpression */:
+                case 256 /* InterfaceDeclaration */:
+                case 254 /* FunctionDeclaration */:
+                case 211 /* FunctionExpression */:
+                case 212 /* ArrowFunction */:
+                case 167 /* MethodDeclaration */:
+                case 166 /* MethodSignature */:
+                case 172 /* CallSignature */:
+                case 173 /* ConstructSignature */:
+                case 206 /* CallExpression */:
+                case 207 /* NewExpression */:
+                case 226 /* ExpressionWithTypeArguments */:
                     return true;
                 default:
                     return false;
@@ -136706,28 +139982,28 @@
                 isTypeArgumentOrParameterOrAssertion(context.nextTokenSpan, context.nextTokenParent);
         }
         function isTypeAssertionContext(context) {
-            return context.contextNode.kind === 207 /* TypeAssertionExpression */;
+            return context.contextNode.kind === 209 /* TypeAssertionExpression */;
         }
         function isVoidOpContext(context) {
-            return context.currentTokenSpan.kind === 113 /* VoidKeyword */ && context.currentTokenParent.kind === 213 /* VoidExpression */;
+            return context.currentTokenSpan.kind === 114 /* VoidKeyword */ && context.currentTokenParent.kind === 215 /* VoidExpression */;
         }
         function isYieldOrYieldStarWithOperand(context) {
-            return context.contextNode.kind === 220 /* YieldExpression */ && context.contextNode.expression !== undefined;
+            return context.contextNode.kind === 222 /* YieldExpression */ && context.contextNode.expression !== undefined;
         }
         function isNonNullAssertionContext(context) {
-            return context.contextNode.kind === 226 /* NonNullExpression */;
+            return context.contextNode.kind === 228 /* NonNullExpression */;
         }
         function isNotStatementConditionContext(context) {
             return !isStatementConditionContext(context);
         }
         function isStatementConditionContext(context) {
             switch (context.contextNode.kind) {
-                case 235 /* IfStatement */:
-                case 238 /* ForStatement */:
-                case 239 /* ForInStatement */:
-                case 240 /* ForOfStatement */:
-                case 236 /* DoStatement */:
-                case 237 /* WhileStatement */:
+                case 237 /* IfStatement */:
+                case 240 /* ForStatement */:
+                case 241 /* ForInStatement */:
+                case 242 /* ForOfStatement */:
+                case 238 /* DoStatement */:
+                case 239 /* WhileStatement */:
                     return true;
                 default:
                     return false;
@@ -136752,12 +140028,12 @@
                 return nextTokenKind === 19 /* CloseBraceToken */
                     || nextTokenKind === 1 /* EndOfFileToken */;
             }
-            if (nextTokenKind === 230 /* SemicolonClassElement */ ||
+            if (nextTokenKind === 232 /* SemicolonClassElement */ ||
                 nextTokenKind === 26 /* SemicolonToken */) {
                 return false;
             }
-            if (context.contextNode.kind === 254 /* InterfaceDeclaration */ ||
-                context.contextNode.kind === 255 /* TypeAliasDeclaration */) {
+            if (context.contextNode.kind === 256 /* InterfaceDeclaration */ ||
+                context.contextNode.kind === 257 /* TypeAliasDeclaration */) {
                 // Can’t remove semicolon after `foo`; it would parse as a method declaration:
                 //
                 // interface I {
@@ -136771,9 +140047,9 @@
             if (ts.isPropertyDeclaration(context.currentTokenParent)) {
                 return !context.currentTokenParent.initializer;
             }
-            return context.currentTokenParent.kind !== 238 /* ForStatement */
-                && context.currentTokenParent.kind !== 232 /* EmptyStatement */
-                && context.currentTokenParent.kind !== 230 /* SemicolonClassElement */
+            return context.currentTokenParent.kind !== 240 /* ForStatement */
+                && context.currentTokenParent.kind !== 234 /* EmptyStatement */
+                && context.currentTokenParent.kind !== 232 /* SemicolonClassElement */
                 && nextTokenKind !== 22 /* OpenBracketToken */
                 && nextTokenKind !== 20 /* OpenParenToken */
                 && nextTokenKind !== 39 /* PlusToken */
@@ -136781,7 +140057,7 @@
                 && nextTokenKind !== 43 /* SlashToken */
                 && nextTokenKind !== 13 /* RegularExpressionLiteral */
                 && nextTokenKind !== 27 /* CommaToken */
-                && nextTokenKind !== 219 /* TemplateExpression */
+                && nextTokenKind !== 221 /* TemplateExpression */
                 && nextTokenKind !== 15 /* TemplateHead */
                 && nextTokenKind !== 14 /* NoSubstitutionTemplateLiteral */
                 && nextTokenKind !== 24 /* DotToken */;
@@ -136872,12 +140148,12 @@
             return map;
         }
         function getRuleBucketIndex(row, column) {
-            ts.Debug.assert(row <= 157 /* LastKeyword */ && column <= 157 /* LastKeyword */, "Must compute formatting context from tokens");
+            ts.Debug.assert(row <= 158 /* LastKeyword */ && column <= 158 /* LastKeyword */, "Must compute formatting context from tokens");
             return (row * mapRowLength) + column;
         }
         var maskBitSize = 5;
         var mask = 31; // MaskBitSize bits
-        var mapRowLength = 157 /* LastToken */ + 1;
+        var mapRowLength = 158 /* LastToken */ + 1;
         var RulesPosition;
         (function (RulesPosition) {
             RulesPosition[RulesPosition["StopRulesSpecific"] = 0] = "StopRulesSpecific";
@@ -137065,17 +140341,17 @@
         // i.e. parent is class declaration with the list of members and node is one of members.
         function isListElement(parent, node) {
             switch (parent.kind) {
-                case 253 /* ClassDeclaration */:
-                case 254 /* InterfaceDeclaration */:
+                case 255 /* ClassDeclaration */:
+                case 256 /* InterfaceDeclaration */:
                     return ts.rangeContainsRange(parent.members, node);
-                case 257 /* ModuleDeclaration */:
+                case 259 /* ModuleDeclaration */:
                     var body = parent.body;
-                    return !!body && body.kind === 258 /* ModuleBlock */ && ts.rangeContainsRange(body.statements, node);
-                case 298 /* SourceFile */:
-                case 231 /* Block */:
-                case 258 /* ModuleBlock */:
+                    return !!body && body.kind === 260 /* ModuleBlock */ && ts.rangeContainsRange(body.statements, node);
+                case 300 /* SourceFile */:
+                case 233 /* Block */:
+                case 260 /* ModuleBlock */:
                     return ts.rangeContainsRange(parent.statements, node);
-                case 288 /* CatchClause */:
+                case 290 /* CatchClause */:
                     return ts.rangeContainsRange(parent.block.statements, node);
             }
             return false;
@@ -137304,19 +140580,19 @@
                     return node.modifiers[0].kind;
                 }
                 switch (node.kind) {
-                    case 253 /* ClassDeclaration */: return 83 /* ClassKeyword */;
-                    case 254 /* InterfaceDeclaration */: return 117 /* InterfaceKeyword */;
-                    case 252 /* FunctionDeclaration */: return 97 /* FunctionKeyword */;
-                    case 256 /* EnumDeclaration */: return 256 /* EnumDeclaration */;
-                    case 168 /* GetAccessor */: return 134 /* GetKeyword */;
-                    case 169 /* SetAccessor */: return 146 /* SetKeyword */;
-                    case 166 /* MethodDeclaration */:
+                    case 255 /* ClassDeclaration */: return 84 /* ClassKeyword */;
+                    case 256 /* InterfaceDeclaration */: return 118 /* InterfaceKeyword */;
+                    case 254 /* FunctionDeclaration */: return 98 /* FunctionKeyword */;
+                    case 258 /* EnumDeclaration */: return 258 /* EnumDeclaration */;
+                    case 170 /* GetAccessor */: return 135 /* GetKeyword */;
+                    case 171 /* SetAccessor */: return 147 /* SetKeyword */;
+                    case 167 /* MethodDeclaration */:
                         if (node.asteriskToken) {
                             return 41 /* AsteriskToken */;
                         }
                     // falls through
-                    case 164 /* PropertyDeclaration */:
-                    case 161 /* Parameter */:
+                    case 165 /* PropertyDeclaration */:
+                    case 162 /* Parameter */:
                         var name = ts.getNameOfDeclaration(node);
                         if (name) {
                             return name.kind;
@@ -137366,23 +140642,23 @@
                         case 18 /* OpenBraceToken */:
                         case 19 /* CloseBraceToken */:
                         case 21 /* CloseParenToken */:
-                        case 90 /* ElseKeyword */:
-                        case 114 /* WhileKeyword */:
+                        case 91 /* ElseKeyword */:
+                        case 115 /* WhileKeyword */:
                         case 59 /* AtToken */:
                             return false;
                         case 43 /* SlashToken */:
                         case 31 /* GreaterThanToken */:
                             switch (container.kind) {
-                                case 276 /* JsxOpeningElement */:
-                                case 277 /* JsxClosingElement */:
-                                case 275 /* JsxSelfClosingElement */:
-                                case 224 /* ExpressionWithTypeArguments */:
+                                case 278 /* JsxOpeningElement */:
+                                case 279 /* JsxClosingElement */:
+                                case 277 /* JsxSelfClosingElement */:
+                                case 226 /* ExpressionWithTypeArguments */:
                                     return false;
                             }
                             break;
                         case 22 /* OpenBracketToken */:
                         case 23 /* CloseBracketToken */:
-                            if (container.kind !== 191 /* MappedType */) {
+                            if (container.kind !== 193 /* MappedType */) {
                                 return false;
                             }
                             break;
@@ -137485,11 +140761,11 @@
                             return inheritedIndentation;
                         }
                     }
-                    var effectiveParentStartLine = child.kind === 162 /* Decorator */ ? childStartLine : undecoratedParentStartLine;
+                    var effectiveParentStartLine = child.kind === 163 /* Decorator */ ? childStartLine : undecoratedParentStartLine;
                     var childIndentation = computeIndentation(child, childStartLine, childIndentationAmount, node, parentDynamicIndentation, effectiveParentStartLine);
                     processNode(child, childContextNode, childStartLine, undecoratedChildStartLine, childIndentation.indentation, childIndentation.delta);
                     childContextNode = node;
-                    if (isFirstListItem && parent.kind === 200 /* ArrayLiteralExpression */ && inheritedIndentation === -1 /* Unknown */) {
+                    if (isFirstListItem && parent.kind === 202 /* ArrayLiteralExpression */ && inheritedIndentation === -1 /* Unknown */) {
                         inheritedIndentation = childIndentation.indentation;
                     }
                     return inheritedIndentation;
@@ -137922,12 +141198,12 @@
         formatting.getRangeOfEnclosingComment = getRangeOfEnclosingComment;
         function getOpenTokenForList(node, list) {
             switch (node.kind) {
-                case 167 /* Constructor */:
-                case 252 /* FunctionDeclaration */:
-                case 209 /* FunctionExpression */:
-                case 166 /* MethodDeclaration */:
-                case 165 /* MethodSignature */:
-                case 210 /* ArrowFunction */:
+                case 169 /* Constructor */:
+                case 254 /* FunctionDeclaration */:
+                case 211 /* FunctionExpression */:
+                case 167 /* MethodDeclaration */:
+                case 166 /* MethodSignature */:
+                case 212 /* ArrowFunction */:
                     if (node.typeParameters === list) {
                         return 29 /* LessThanToken */;
                     }
@@ -137935,8 +141211,8 @@
                         return 20 /* OpenParenToken */;
                     }
                     break;
-                case 204 /* CallExpression */:
-                case 205 /* NewExpression */:
+                case 206 /* CallExpression */:
+                case 207 /* NewExpression */:
                     if (node.typeArguments === list) {
                         return 29 /* LessThanToken */;
                     }
@@ -137944,12 +141220,12 @@
                         return 20 /* OpenParenToken */;
                     }
                     break;
-                case 174 /* TypeReference */:
+                case 176 /* TypeReference */:
                     if (node.typeArguments === list) {
                         return 29 /* LessThanToken */;
                     }
                     break;
-                case 178 /* TypeLiteral */:
+                case 180 /* TypeLiteral */:
                     return 18 /* OpenBraceToken */;
             }
             return 0 /* Unknown */;
@@ -138067,7 +141343,7 @@
                 if (options.indentStyle === ts.IndentStyle.Block) {
                     return getBlockIndent(sourceFile, position, options);
                 }
-                if (precedingToken.kind === 27 /* CommaToken */ && precedingToken.parent.kind !== 217 /* BinaryExpression */) {
+                if (precedingToken.kind === 27 /* CommaToken */ && precedingToken.parent.kind !== 219 /* BinaryExpression */) {
                     // previous token is comma that separates items in list - find the previous item and try to derive indentation from it
                     var actualIndentation = getActualIndentationForListItemBeforeComma(precedingToken, sourceFile, options);
                     if (actualIndentation !== -1 /* Unknown */) {
@@ -138240,7 +141516,7 @@
                 // - parent is SourceFile - by default immediate children of SourceFile are not indented except when user indents them manually
                 // - parent and child are not on the same line
                 var useActualIndentation = (ts.isDeclaration(current) || ts.isStatementButNotDeclaration(current)) &&
-                    (parent.kind === 298 /* SourceFile */ || !parentAndChildShareLine);
+                    (parent.kind === 300 /* SourceFile */ || !parentAndChildShareLine);
                 if (!useActualIndentation) {
                     return -1 /* Unknown */;
                 }
@@ -138288,8 +141564,8 @@
             }
             SmartIndenter.isArgumentAndStartLineOverlapsExpressionBeingCalled = isArgumentAndStartLineOverlapsExpressionBeingCalled;
             function childStartsOnTheSameLineWithElseInIfStatement(parent, child, childStartLine, sourceFile) {
-                if (parent.kind === 235 /* IfStatement */ && parent.elseStatement === child) {
-                    var elseKeyword = ts.findChildOfKind(parent, 90 /* ElseKeyword */, sourceFile);
+                if (parent.kind === 237 /* IfStatement */ && parent.elseStatement === child) {
+                    var elseKeyword = ts.findChildOfKind(parent, 91 /* ElseKeyword */, sourceFile);
                     ts.Debug.assert(elseKeyword !== undefined);
                     var elseKeywordStartLine = getStartLineAndCharacterForNode(elseKeyword, sourceFile).line;
                     return elseKeywordStartLine === childStartLine;
@@ -138369,40 +141645,40 @@
             }
             function getListByRange(start, end, node, sourceFile) {
                 switch (node.kind) {
-                    case 174 /* TypeReference */:
+                    case 176 /* TypeReference */:
                         return getList(node.typeArguments);
-                    case 201 /* ObjectLiteralExpression */:
+                    case 203 /* ObjectLiteralExpression */:
                         return getList(node.properties);
-                    case 200 /* ArrayLiteralExpression */:
+                    case 202 /* ArrayLiteralExpression */:
                         return getList(node.elements);
-                    case 178 /* TypeLiteral */:
+                    case 180 /* TypeLiteral */:
                         return getList(node.members);
-                    case 252 /* FunctionDeclaration */:
-                    case 209 /* FunctionExpression */:
-                    case 210 /* ArrowFunction */:
-                    case 166 /* MethodDeclaration */:
-                    case 165 /* MethodSignature */:
-                    case 170 /* CallSignature */:
-                    case 167 /* Constructor */:
-                    case 176 /* ConstructorType */:
-                    case 171 /* ConstructSignature */:
+                    case 254 /* FunctionDeclaration */:
+                    case 211 /* FunctionExpression */:
+                    case 212 /* ArrowFunction */:
+                    case 167 /* MethodDeclaration */:
+                    case 166 /* MethodSignature */:
+                    case 172 /* CallSignature */:
+                    case 169 /* Constructor */:
+                    case 178 /* ConstructorType */:
+                    case 173 /* ConstructSignature */:
                         return getList(node.typeParameters) || getList(node.parameters);
-                    case 253 /* ClassDeclaration */:
-                    case 222 /* ClassExpression */:
-                    case 254 /* InterfaceDeclaration */:
-                    case 255 /* TypeAliasDeclaration */:
-                    case 334 /* JSDocTemplateTag */:
+                    case 255 /* ClassDeclaration */:
+                    case 224 /* ClassExpression */:
+                    case 256 /* InterfaceDeclaration */:
+                    case 257 /* TypeAliasDeclaration */:
+                    case 339 /* JSDocTemplateTag */:
                         return getList(node.typeParameters);
-                    case 205 /* NewExpression */:
-                    case 204 /* CallExpression */:
+                    case 207 /* NewExpression */:
+                    case 206 /* CallExpression */:
                         return getList(node.typeArguments) || getList(node.arguments);
-                    case 251 /* VariableDeclarationList */:
+                    case 253 /* VariableDeclarationList */:
                         return getList(node.declarations);
-                    case 265 /* NamedImports */:
-                    case 269 /* NamedExports */:
+                    case 267 /* NamedImports */:
+                    case 271 /* NamedExports */:
                         return getList(node.elements);
-                    case 197 /* ObjectBindingPattern */:
-                    case 198 /* ArrayBindingPattern */:
+                    case 199 /* ObjectBindingPattern */:
+                    case 200 /* ArrayBindingPattern */:
                         return getList(node.elements);
                 }
                 function getList(list) {
@@ -138425,7 +141701,7 @@
                 return findColumnForFirstNonWhitespaceCharacterInLine(sourceFile.getLineAndCharacterOfPosition(list.pos), sourceFile, options);
             }
             function getActualIndentationForListItem(node, sourceFile, options, listIndentsChild) {
-                if (node.parent && node.parent.kind === 251 /* VariableDeclarationList */) {
+                if (node.parent && node.parent.kind === 253 /* VariableDeclarationList */) {
                     // VariableDeclarationList has no wrapping tokens
                     return -1 /* Unknown */;
                 }
@@ -138498,91 +141774,91 @@
             function nodeWillIndentChild(settings, parent, child, sourceFile, indentByDefault) {
                 var childKind = child ? child.kind : 0 /* Unknown */;
                 switch (parent.kind) {
-                    case 234 /* ExpressionStatement */:
-                    case 253 /* ClassDeclaration */:
-                    case 222 /* ClassExpression */:
-                    case 254 /* InterfaceDeclaration */:
-                    case 256 /* EnumDeclaration */:
-                    case 255 /* TypeAliasDeclaration */:
-                    case 200 /* ArrayLiteralExpression */:
-                    case 231 /* Block */:
-                    case 258 /* ModuleBlock */:
-                    case 201 /* ObjectLiteralExpression */:
-                    case 178 /* TypeLiteral */:
-                    case 191 /* MappedType */:
-                    case 180 /* TupleType */:
-                    case 259 /* CaseBlock */:
-                    case 286 /* DefaultClause */:
-                    case 285 /* CaseClause */:
-                    case 208 /* ParenthesizedExpression */:
-                    case 202 /* PropertyAccessExpression */:
-                    case 204 /* CallExpression */:
-                    case 205 /* NewExpression */:
-                    case 233 /* VariableStatement */:
-                    case 267 /* ExportAssignment */:
-                    case 243 /* ReturnStatement */:
-                    case 218 /* ConditionalExpression */:
-                    case 198 /* ArrayBindingPattern */:
-                    case 197 /* ObjectBindingPattern */:
-                    case 276 /* JsxOpeningElement */:
-                    case 279 /* JsxOpeningFragment */:
-                    case 275 /* JsxSelfClosingElement */:
-                    case 284 /* JsxExpression */:
-                    case 165 /* MethodSignature */:
-                    case 170 /* CallSignature */:
-                    case 171 /* ConstructSignature */:
-                    case 161 /* Parameter */:
-                    case 175 /* FunctionType */:
-                    case 176 /* ConstructorType */:
-                    case 187 /* ParenthesizedType */:
-                    case 206 /* TaggedTemplateExpression */:
-                    case 214 /* AwaitExpression */:
-                    case 269 /* NamedExports */:
-                    case 265 /* NamedImports */:
-                    case 271 /* ExportSpecifier */:
-                    case 266 /* ImportSpecifier */:
-                    case 164 /* PropertyDeclaration */:
+                    case 236 /* ExpressionStatement */:
+                    case 255 /* ClassDeclaration */:
+                    case 224 /* ClassExpression */:
+                    case 256 /* InterfaceDeclaration */:
+                    case 258 /* EnumDeclaration */:
+                    case 257 /* TypeAliasDeclaration */:
+                    case 202 /* ArrayLiteralExpression */:
+                    case 233 /* Block */:
+                    case 260 /* ModuleBlock */:
+                    case 203 /* ObjectLiteralExpression */:
+                    case 180 /* TypeLiteral */:
+                    case 193 /* MappedType */:
+                    case 182 /* TupleType */:
+                    case 261 /* CaseBlock */:
+                    case 288 /* DefaultClause */:
+                    case 287 /* CaseClause */:
+                    case 210 /* ParenthesizedExpression */:
+                    case 204 /* PropertyAccessExpression */:
+                    case 206 /* CallExpression */:
+                    case 207 /* NewExpression */:
+                    case 235 /* VariableStatement */:
+                    case 269 /* ExportAssignment */:
+                    case 245 /* ReturnStatement */:
+                    case 220 /* ConditionalExpression */:
+                    case 200 /* ArrayBindingPattern */:
+                    case 199 /* ObjectBindingPattern */:
+                    case 278 /* JsxOpeningElement */:
+                    case 281 /* JsxOpeningFragment */:
+                    case 277 /* JsxSelfClosingElement */:
+                    case 286 /* JsxExpression */:
+                    case 166 /* MethodSignature */:
+                    case 172 /* CallSignature */:
+                    case 173 /* ConstructSignature */:
+                    case 162 /* Parameter */:
+                    case 177 /* FunctionType */:
+                    case 178 /* ConstructorType */:
+                    case 189 /* ParenthesizedType */:
+                    case 208 /* TaggedTemplateExpression */:
+                    case 216 /* AwaitExpression */:
+                    case 271 /* NamedExports */:
+                    case 267 /* NamedImports */:
+                    case 273 /* ExportSpecifier */:
+                    case 268 /* ImportSpecifier */:
+                    case 165 /* PropertyDeclaration */:
                         return true;
-                    case 250 /* VariableDeclaration */:
-                    case 289 /* PropertyAssignment */:
-                    case 217 /* BinaryExpression */:
-                        if (!settings.indentMultiLineObjectLiteralBeginningOnBlankLine && sourceFile && childKind === 201 /* ObjectLiteralExpression */) { // TODO: GH#18217
+                    case 252 /* VariableDeclaration */:
+                    case 291 /* PropertyAssignment */:
+                    case 219 /* BinaryExpression */:
+                        if (!settings.indentMultiLineObjectLiteralBeginningOnBlankLine && sourceFile && childKind === 203 /* ObjectLiteralExpression */) { // TODO: GH#18217
                             return rangeIsOnOneLine(sourceFile, child);
                         }
-                        if (parent.kind !== 217 /* BinaryExpression */) {
+                        if (parent.kind !== 219 /* BinaryExpression */) {
                             return true;
                         }
                         break;
-                    case 236 /* DoStatement */:
-                    case 237 /* WhileStatement */:
-                    case 239 /* ForInStatement */:
-                    case 240 /* ForOfStatement */:
-                    case 238 /* ForStatement */:
-                    case 235 /* IfStatement */:
-                    case 252 /* FunctionDeclaration */:
-                    case 209 /* FunctionExpression */:
-                    case 166 /* MethodDeclaration */:
-                    case 167 /* Constructor */:
-                    case 168 /* GetAccessor */:
-                    case 169 /* SetAccessor */:
-                        return childKind !== 231 /* Block */;
-                    case 210 /* ArrowFunction */:
-                        if (sourceFile && childKind === 208 /* ParenthesizedExpression */) {
+                    case 238 /* DoStatement */:
+                    case 239 /* WhileStatement */:
+                    case 241 /* ForInStatement */:
+                    case 242 /* ForOfStatement */:
+                    case 240 /* ForStatement */:
+                    case 237 /* IfStatement */:
+                    case 254 /* FunctionDeclaration */:
+                    case 211 /* FunctionExpression */:
+                    case 167 /* MethodDeclaration */:
+                    case 169 /* Constructor */:
+                    case 170 /* GetAccessor */:
+                    case 171 /* SetAccessor */:
+                        return childKind !== 233 /* Block */;
+                    case 212 /* ArrowFunction */:
+                        if (sourceFile && childKind === 210 /* ParenthesizedExpression */) {
                             return rangeIsOnOneLine(sourceFile, child);
                         }
-                        return childKind !== 231 /* Block */;
-                    case 268 /* ExportDeclaration */:
-                        return childKind !== 269 /* NamedExports */;
-                    case 262 /* ImportDeclaration */:
-                        return childKind !== 263 /* ImportClause */ ||
-                            (!!child.namedBindings && child.namedBindings.kind !== 265 /* NamedImports */);
-                    case 274 /* JsxElement */:
-                        return childKind !== 277 /* JsxClosingElement */;
-                    case 278 /* JsxFragment */:
-                        return childKind !== 280 /* JsxClosingFragment */;
-                    case 184 /* IntersectionType */:
-                    case 183 /* UnionType */:
-                        if (childKind === 178 /* TypeLiteral */ || childKind === 180 /* TupleType */) {
+                        return childKind !== 233 /* Block */;
+                    case 270 /* ExportDeclaration */:
+                        return childKind !== 271 /* NamedExports */;
+                    case 264 /* ImportDeclaration */:
+                        return childKind !== 265 /* ImportClause */ ||
+                            (!!child.namedBindings && child.namedBindings.kind !== 267 /* NamedImports */);
+                    case 276 /* JsxElement */:
+                        return childKind !== 279 /* JsxClosingElement */;
+                    case 280 /* JsxFragment */:
+                        return childKind !== 282 /* JsxClosingFragment */;
+                    case 186 /* IntersectionType */:
+                    case 185 /* UnionType */:
+                        if (childKind === 180 /* TypeLiteral */ || childKind === 182 /* TupleType */) {
                             return false;
                         }
                         break;
@@ -138593,11 +141869,11 @@
             SmartIndenter.nodeWillIndentChild = nodeWillIndentChild;
             function isControlFlowEndingStatement(kind, parent) {
                 switch (kind) {
-                    case 243 /* ReturnStatement */:
-                    case 247 /* ThrowStatement */:
-                    case 241 /* ContinueStatement */:
-                    case 242 /* BreakStatement */:
-                        return parent.kind !== 231 /* Block */;
+                    case 245 /* ReturnStatement */:
+                    case 249 /* ThrowStatement */:
+                    case 243 /* ContinueStatement */:
+                    case 244 /* BreakStatement */:
+                        return parent.kind !== 233 /* Block */;
                     default:
                         return false;
                 }
@@ -138713,7 +141989,9 @@
                 return node.getStart(sourceFile);
             }
             if (leadingTriviaOption === LeadingTriviaOption.StartLine) {
-                return ts.getLineStartPositionForPosition(node.getStart(sourceFile), sourceFile);
+                var startPos = node.getStart(sourceFile);
+                var pos = ts.getLineStartPositionForPosition(startPos, sourceFile);
+                return ts.rangeContainsPosition(node, pos) ? pos : startPos;
             }
             if (leadingTriviaOption === LeadingTriviaOption.JSDoc) {
                 var JSDocComments = ts.getJSDocCommentRanges(node, sourceFile.text);
@@ -138812,7 +142090,7 @@
          * Checks if 'candidate' argument is a legal separator in the list that contains 'node' as an element
          */
         function isSeparator(node, candidate) {
-            return !!candidate && !!node.parent && (candidate.kind === 27 /* CommaToken */ || (candidate.kind === 26 /* SemicolonToken */ && node.parent.kind === 201 /* ObjectLiteralExpression */));
+            return !!candidate && !!node.parent && (candidate.kind === 27 /* CommaToken */ || (candidate.kind === 26 /* SemicolonToken */ && node.parent.kind === 203 /* ObjectLiteralExpression */));
         }
         function isThisTypeAnnotatable(containingFunction) {
             return ts.isFunctionExpression(containingFunction) || ts.isFunctionDeclaration(containingFunction);
@@ -139019,7 +142297,7 @@
                     }
                 }
                 else {
-                    endNode = (_a = (node.kind === 250 /* VariableDeclaration */ ? node.exclamationToken : node.questionToken)) !== null && _a !== void 0 ? _a : node.name;
+                    endNode = (_a = (node.kind === 252 /* VariableDeclaration */ ? node.exclamationToken : node.questionToken)) !== null && _a !== void 0 ? _a : node.name;
                 }
                 this.insertNodeAt(sourceFile, endNode.end, type, { prefix: ": " });
                 return true;
@@ -139055,7 +142333,7 @@
             ChangeTracker.prototype.insertNodeAtConstructorStart = function (sourceFile, ctr, newStatement) {
                 var firstStatement = ts.firstOrUndefined(ctr.body.statements);
                 if (!firstStatement || !ctr.body.multiLine) {
-                    this.replaceConstructorBody(sourceFile, ctr, __spreadArray([newStatement], ctr.body.statements));
+                    this.replaceConstructorBody(sourceFile, ctr, __spreadArray([newStatement], ctr.body.statements, true));
                 }
                 else {
                     this.insertNodeBefore(sourceFile, firstStatement, newStatement);
@@ -139064,7 +142342,7 @@
             ChangeTracker.prototype.insertNodeAtConstructorStartAfterSuperCall = function (sourceFile, ctr, newStatement) {
                 var superCallStatement = ts.find(ctr.body.statements, function (stmt) { return ts.isExpressionStatement(stmt) && ts.isSuperCall(stmt.expression); });
                 if (!superCallStatement || !ctr.body.multiLine) {
-                    this.replaceConstructorBody(sourceFile, ctr, __spreadArray(__spreadArray([], ctr.body.statements), [newStatement]));
+                    this.replaceConstructorBody(sourceFile, ctr, __spreadArray(__spreadArray([], ctr.body.statements, true), [newStatement], false));
                 }
                 else {
                     this.insertNodeAfter(sourceFile, superCallStatement, newStatement);
@@ -139073,7 +142351,7 @@
             ChangeTracker.prototype.insertNodeAtConstructorEnd = function (sourceFile, ctr, newStatement) {
                 var lastStatement = ts.lastOrUndefined(ctr.body.statements);
                 if (!lastStatement || !ctr.body.multiLine) {
-                    this.replaceConstructorBody(sourceFile, ctr, __spreadArray(__spreadArray([], ctr.body.statements), [newStatement]));
+                    this.replaceConstructorBody(sourceFile, ctr, __spreadArray(__spreadArray([], ctr.body.statements, true), [newStatement], false));
                 }
                 else {
                     this.insertNodeAfter(sourceFile, lastStatement, newStatement);
@@ -139185,18 +142463,18 @@
             };
             ChangeTracker.prototype.getInsertNodeAfterOptionsWorker = function (node) {
                 switch (node.kind) {
-                    case 253 /* ClassDeclaration */:
-                    case 257 /* ModuleDeclaration */:
+                    case 255 /* ClassDeclaration */:
+                    case 259 /* ModuleDeclaration */:
                         return { prefix: this.newLineCharacter, suffix: this.newLineCharacter };
-                    case 250 /* VariableDeclaration */:
+                    case 252 /* VariableDeclaration */:
                     case 10 /* StringLiteral */:
-                    case 78 /* Identifier */:
+                    case 79 /* Identifier */:
                         return { prefix: ", " };
-                    case 289 /* PropertyAssignment */:
+                    case 291 /* PropertyAssignment */:
                         return { suffix: "," + this.newLineCharacter };
-                    case 92 /* ExportKeyword */:
+                    case 93 /* ExportKeyword */:
                         return { prefix: " " };
-                    case 161 /* Parameter */:
+                    case 162 /* Parameter */:
                         return {};
                     default:
                         ts.Debug.assert(ts.isStatement(node) || ts.isClassOrTypeElement(node)); // Else we haven't handled this kind of node yet -- add it
@@ -139205,12 +142483,12 @@
             };
             ChangeTracker.prototype.insertName = function (sourceFile, node, name) {
                 ts.Debug.assert(!node.name);
-                if (node.kind === 210 /* ArrowFunction */) {
+                if (node.kind === 212 /* ArrowFunction */) {
                     var arrow = ts.findChildOfKind(node, 38 /* EqualsGreaterThanToken */, sourceFile);
                     var lparen = ts.findChildOfKind(node, 20 /* OpenParenToken */, sourceFile);
                     if (lparen) {
                         // `() => {}` --> `function f() {}`
-                        this.insertNodesAt(sourceFile, lparen.getStart(sourceFile), [ts.factory.createToken(97 /* FunctionKeyword */), ts.factory.createIdentifier(name)], { joiner: " " });
+                        this.insertNodesAt(sourceFile, lparen.getStart(sourceFile), [ts.factory.createToken(98 /* FunctionKeyword */), ts.factory.createIdentifier(name)], { joiner: " " });
                         deleteNode(this, sourceFile, arrow);
                     }
                     else {
@@ -139219,14 +142497,14 @@
                         // Replacing full range of arrow to get rid of the leading space -- replace ` =>` with `)`
                         this.replaceRange(sourceFile, arrow, ts.factory.createToken(21 /* CloseParenToken */));
                     }
-                    if (node.body.kind !== 231 /* Block */) {
+                    if (node.body.kind !== 233 /* Block */) {
                         // `() => 0` => `function f() { return 0; }`
-                        this.insertNodesAt(sourceFile, node.body.getStart(sourceFile), [ts.factory.createToken(18 /* OpenBraceToken */), ts.factory.createToken(104 /* ReturnKeyword */)], { joiner: " ", suffix: " " });
+                        this.insertNodesAt(sourceFile, node.body.getStart(sourceFile), [ts.factory.createToken(18 /* OpenBraceToken */), ts.factory.createToken(105 /* ReturnKeyword */)], { joiner: " ", suffix: " " });
                         this.insertNodesAt(sourceFile, node.body.end, [ts.factory.createToken(26 /* SemicolonToken */), ts.factory.createToken(19 /* CloseBraceToken */)], { joiner: " " });
                     }
                 }
                 else {
-                    var pos = ts.findChildOfKind(node, node.kind === 209 /* FunctionExpression */ ? 97 /* FunctionKeyword */ : 83 /* ClassKeyword */, sourceFile).end;
+                    var pos = ts.findChildOfKind(node, node.kind === 211 /* FunctionExpression */ ? 98 /* FunctionKeyword */ : 84 /* ClassKeyword */, sourceFile).end;
                     this.insertNodeAt(sourceFile, pos, ts.factory.createIdentifier(name), { prefix: " " });
                 }
             };
@@ -139453,16 +142731,17 @@
             }
             changesToText.newFileChangesWorker = newFileChangesWorker;
             function computeNewText(change, sourceFile, newLineCharacter, formatContext, validate) {
+                var _a;
                 if (change.kind === ChangeKind.Remove) {
                     return "";
                 }
                 if (change.kind === ChangeKind.Text) {
                     return change.text;
                 }
-                var _a = change.options, options = _a === void 0 ? {} : _a, pos = change.range.pos;
+                var _b = change.options, options = _b === void 0 ? {} : _b, pos = change.range.pos;
                 var format = function (n) { return getFormattedTextOfNode(n, sourceFile, pos, options, newLineCharacter, formatContext, validate); };
                 var text = change.kind === ChangeKind.ReplaceWithMultipleNodes
-                    ? change.nodes.map(function (n) { return ts.removeSuffix(format(n), newLineCharacter); }).join(change.options.joiner || newLineCharacter) // TODO: GH#18217
+                    ? change.nodes.map(function (n) { return ts.removeSuffix(format(n), newLineCharacter); }).join(((_a = change.options) === null || _a === void 0 ? void 0 : _a.joiner) || newLineCharacter)
                     : format(change.node);
                 // strip initial indentation (spaces or tabs) if text will be inserted in the middle of the line
                 var noIndent = (options.preserveLeadingWhitespace || options.indentation !== undefined || ts.getLineStartPositionForPosition(pos, sourceFile) === pos) ? text : text.replace(/^\s+/, "");
@@ -139519,7 +142798,7 @@
             return ts.skipTrivia(s, 0) === s.length;
         }
         function assignPositionsToNode(node) {
-            var visited = ts.visitEachChild(node, assignPositionsToNode, ts.nullTransformationContext, assignPositionsToNodeArray, assignPositionsToNode); // TODO: GH#18217
+            var visited = ts.visitEachChild(node, assignPositionsToNode, ts.nullTransformationContext, assignPositionsToNodeArray, assignPositionsToNode);
             // create proxy node for non synthesized nodes
             var newNode = ts.nodeIsSynthesized(visited) ? visited : Object.create(visited);
             ts.setTextRangePosEnd(newNode, getPos(node), getEnd(node));
@@ -139778,14 +143057,14 @@
         }
         textChanges_3.isValidLocationToAddComment = isValidLocationToAddComment;
         function needSemicolonBetween(a, b) {
-            return (ts.isPropertySignature(a) || ts.isPropertyDeclaration(a)) && ts.isClassOrTypeElement(b) && b.name.kind === 159 /* ComputedPropertyName */
+            return (ts.isPropertySignature(a) || ts.isPropertyDeclaration(a)) && ts.isClassOrTypeElement(b) && b.name.kind === 160 /* ComputedPropertyName */
                 || ts.isStatementButNotDeclaration(a) && ts.isStatementButNotDeclaration(b); // TODO: only if b would start with a `(` or `[`
         }
         var deleteDeclaration;
         (function (deleteDeclaration_1) {
             function deleteDeclaration(changes, deletedNodesInLists, sourceFile, node) {
                 switch (node.kind) {
-                    case 161 /* Parameter */: {
+                    case 162 /* Parameter */: {
                         var oldFunction = node.parent;
                         if (ts.isArrowFunction(oldFunction) &&
                             oldFunction.parameters.length === 1 &&
@@ -139800,17 +143079,17 @@
                         }
                         break;
                     }
-                    case 262 /* ImportDeclaration */:
-                    case 261 /* ImportEqualsDeclaration */:
+                    case 264 /* ImportDeclaration */:
+                    case 263 /* ImportEqualsDeclaration */:
                         var isFirstImport = sourceFile.imports.length && node === ts.first(sourceFile.imports).parent || node === ts.find(sourceFile.statements, ts.isAnyImportSyntax);
                         // For first import, leave header comment in place, otherwise only delete JSDoc comments
                         deleteNode(changes, sourceFile, node, {
                             leadingTriviaOption: isFirstImport ? LeadingTriviaOption.Exclude : ts.hasJSDocNodes(node) ? LeadingTriviaOption.JSDoc : LeadingTriviaOption.StartLine,
                         });
                         break;
-                    case 199 /* BindingElement */:
+                    case 201 /* BindingElement */:
                         var pattern = node.parent;
-                        var preserveComma = pattern.kind === 198 /* ArrayBindingPattern */ && node !== ts.last(pattern.elements);
+                        var preserveComma = pattern.kind === 200 /* ArrayBindingPattern */ && node !== ts.last(pattern.elements);
                         if (preserveComma) {
                             deleteNode(changes, sourceFile, node);
                         }
@@ -139818,13 +143097,13 @@
                             deleteNodeInList(changes, deletedNodesInLists, sourceFile, node);
                         }
                         break;
-                    case 250 /* VariableDeclaration */:
+                    case 252 /* VariableDeclaration */:
                         deleteVariableDeclaration(changes, deletedNodesInLists, sourceFile, node);
                         break;
-                    case 160 /* TypeParameter */:
+                    case 161 /* TypeParameter */:
                         deleteNodeInList(changes, deletedNodesInLists, sourceFile, node);
                         break;
-                    case 266 /* ImportSpecifier */:
+                    case 268 /* ImportSpecifier */:
                         var namedImports = node.parent;
                         if (namedImports.elements.length === 1) {
                             deleteImportBinding(changes, sourceFile, namedImports);
@@ -139833,17 +143112,17 @@
                             deleteNodeInList(changes, deletedNodesInLists, sourceFile, node);
                         }
                         break;
-                    case 264 /* NamespaceImport */:
+                    case 266 /* NamespaceImport */:
                         deleteImportBinding(changes, sourceFile, node);
                         break;
                     case 26 /* SemicolonToken */:
                         deleteNode(changes, sourceFile, node, { trailingTriviaOption: TrailingTriviaOption.Exclude });
                         break;
-                    case 97 /* FunctionKeyword */:
+                    case 98 /* FunctionKeyword */:
                         deleteNode(changes, sourceFile, node, { leadingTriviaOption: LeadingTriviaOption.Exclude });
                         break;
-                    case 253 /* ClassDeclaration */:
-                    case 252 /* FunctionDeclaration */:
+                    case 255 /* ClassDeclaration */:
+                    case 254 /* FunctionDeclaration */:
                         deleteNode(changes, sourceFile, node, { leadingTriviaOption: ts.hasJSDocNodes(node) ? LeadingTriviaOption.JSDoc : LeadingTriviaOption.StartLine });
                         break;
                     default:
@@ -139894,13 +143173,13 @@
                     // Delete the entire import declaration
                     // |import * as ns from './file'|
                     // |import { a } from './file'|
-                    var importDecl = ts.getAncestor(node, 262 /* ImportDeclaration */);
+                    var importDecl = ts.getAncestor(node, 264 /* ImportDeclaration */);
                     deleteNode(changes, sourceFile, importDecl);
                 }
             }
             function deleteVariableDeclaration(changes, deletedNodesInLists, sourceFile, node) {
                 var parent = node.parent;
-                if (parent.kind === 288 /* CatchClause */) {
+                if (parent.kind === 290 /* CatchClause */) {
                     // TODO: There's currently no unused diagnostic for this, could be a suggestion
                     changes.deleteNodeRange(sourceFile, ts.findChildOfKind(parent, 20 /* OpenParenToken */, sourceFile), ts.findChildOfKind(parent, 21 /* CloseParenToken */, sourceFile));
                     return;
@@ -139911,14 +143190,14 @@
                 }
                 var gp = parent.parent;
                 switch (gp.kind) {
-                    case 240 /* ForOfStatement */:
-                    case 239 /* ForInStatement */:
+                    case 242 /* ForOfStatement */:
+                    case 241 /* ForInStatement */:
                         changes.replaceNode(sourceFile, node, ts.factory.createObjectLiteralExpression());
                         break;
-                    case 238 /* ForStatement */:
+                    case 240 /* ForStatement */:
                         deleteNode(changes, sourceFile, parent);
                         break;
-                    case 233 /* VariableStatement */:
+                    case 235 /* VariableStatement */:
                         deleteNode(changes, sourceFile, gp, { leadingTriviaOption: ts.hasJSDocNodes(gp) ? LeadingTriviaOption.JSDoc : LeadingTriviaOption.StartLine });
                         break;
                     default:
@@ -140051,7 +143330,7 @@
         codefix.eachDiagnostic = eachDiagnostic;
         function getDiagnostics(_a) {
             var program = _a.program, sourceFile = _a.sourceFile, cancellationToken = _a.cancellationToken;
-            return __spreadArray(__spreadArray(__spreadArray([], program.getSemanticDiagnostics(sourceFile, cancellationToken)), program.getSyntacticDiagnostics(sourceFile, cancellationToken)), ts.computeSuggestionDiagnostics(sourceFile, program, cancellationToken));
+            return __spreadArray(__spreadArray(__spreadArray([], program.getSemanticDiagnostics(sourceFile, cancellationToken), true), program.getSyntacticDiagnostics(sourceFile, cancellationToken), true), ts.computeSuggestionDiagnostics(sourceFile, program, cancellationToken), true);
         }
     })(codefix = ts.codefix || (ts.codefix = {}));
 })(ts || (ts = {}));
@@ -140104,8 +143383,8 @@
             var token = ts.getTokenAtPosition(sourceFile, pos);
             var assertion = ts.Debug.checkDefined(ts.findAncestor(token, function (n) { return ts.isAsExpression(n) || ts.isTypeAssertionExpression(n); }), "Expected to find an assertion expression");
             var replacement = ts.isAsExpression(assertion)
-                ? ts.factory.createAsExpression(assertion.expression, ts.factory.createKeywordTypeNode(152 /* UnknownKeyword */))
-                : ts.factory.createTypeAssertion(ts.factory.createKeywordTypeNode(152 /* UnknownKeyword */), assertion.expression);
+                ? ts.factory.createAsExpression(assertion.expression, ts.factory.createKeywordTypeNode(153 /* UnknownKeyword */))
+                : ts.factory.createTypeAssertion(ts.factory.createKeywordTypeNode(153 /* UnknownKeyword */), assertion.expression);
             changeTracker.replaceNode(sourceFile, assertion.expression, replacement);
         }
     })(codefix = ts.codefix || (ts.codefix = {}));
@@ -140242,7 +143521,7 @@
             ts.Diagnostics.Type_0_must_have_a_Symbol_asyncIterator_method_that_returns_an_async_iterator.code,
             ts.Diagnostics.Argument_of_type_0_is_not_assignable_to_parameter_of_type_1.code,
             propertyAccessCode
-        ], callableConstructableErrorCodes);
+        ], callableConstructableErrorCodes, true);
         codefix.registerCodeFix({
             fixIds: [fixId],
             errorCodes: errorCodes,
@@ -140338,7 +143617,7 @@
                 }
                 var declaration = ts.tryCast(symbol.valueDeclaration, ts.isVariableDeclaration);
                 var variableName = declaration && ts.tryCast(declaration.name, ts.isIdentifier);
-                var variableStatement = ts.getAncestor(declaration, 233 /* VariableStatement */);
+                var variableStatement = ts.getAncestor(declaration, 235 /* VariableStatement */);
                 if (!declaration || !variableStatement ||
                     declaration.type ||
                     !declaration.initializer ||
@@ -140416,10 +143695,10 @@
         function isInsideAwaitableBody(node) {
             return node.kind & 32768 /* AwaitContext */ || !!ts.findAncestor(node, function (ancestor) {
                 return ancestor.parent && ts.isArrowFunction(ancestor.parent) && ancestor.parent.body === ancestor ||
-                    ts.isBlock(ancestor) && (ancestor.parent.kind === 252 /* FunctionDeclaration */ ||
-                        ancestor.parent.kind === 209 /* FunctionExpression */ ||
-                        ancestor.parent.kind === 210 /* ArrowFunction */ ||
-                        ancestor.parent.kind === 166 /* MethodDeclaration */);
+                    ts.isBlock(ancestor) && (ancestor.parent.kind === 254 /* FunctionDeclaration */ ||
+                        ancestor.parent.kind === 211 /* FunctionExpression */ ||
+                        ancestor.parent.kind === 212 /* ArrowFunction */ ||
+                        ancestor.parent.kind === 167 /* MethodDeclaration */);
             });
         }
         function makeChange(changeTracker, errorCode, sourceFile, checker, insertionSite, fixedDeclarations) {
@@ -140508,7 +143787,7 @@
             if (forInitializer)
                 return applyChange(changeTracker, forInitializer, sourceFile, fixedNodes);
             var parent = token.parent;
-            if (ts.isBinaryExpression(parent) && parent.operatorToken.kind === 62 /* EqualsToken */ && ts.isExpressionStatement(parent.parent)) {
+            if (ts.isBinaryExpression(parent) && parent.operatorToken.kind === 63 /* EqualsToken */ && ts.isExpressionStatement(parent.parent)) {
                 return applyChange(changeTracker, token, sourceFile, fixedNodes);
             }
             if (ts.isArrayLiteralExpression(parent)) {
@@ -140532,16 +143811,16 @@
         }
         function applyChange(changeTracker, initializer, sourceFile, fixedNodes) {
             if (!fixedNodes || ts.tryAddToSet(fixedNodes, initializer)) {
-                changeTracker.insertModifierBefore(sourceFile, 84 /* ConstKeyword */, initializer);
+                changeTracker.insertModifierBefore(sourceFile, 85 /* ConstKeyword */, initializer);
             }
         }
         function isPossiblyPartOfDestructuring(node) {
             switch (node.kind) {
-                case 78 /* Identifier */:
-                case 200 /* ArrayLiteralExpression */:
-                case 201 /* ObjectLiteralExpression */:
-                case 289 /* PropertyAssignment */:
-                case 290 /* ShorthandPropertyAssignment */:
+                case 79 /* Identifier */:
+                case 202 /* ArrayLiteralExpression */:
+                case 203 /* ObjectLiteralExpression */:
+                case 291 /* PropertyAssignment */:
+                case 292 /* ShorthandPropertyAssignment */:
                     return true;
                 default:
                     return false;
@@ -140555,8 +143834,8 @@
         }
         function isPossiblyPartOfCommaSeperatedInitializer(node) {
             switch (node.kind) {
-                case 78 /* Identifier */:
-                case 217 /* BinaryExpression */:
+                case 79 /* Identifier */:
+                case 219 /* BinaryExpression */:
                 case 27 /* CommaToken */:
                     return true;
                 default:
@@ -140570,7 +143849,7 @@
             if (expression.operatorToken.kind === 27 /* CommaToken */) {
                 return ts.every([expression.left, expression.right], function (expression) { return expressionCouldBeVariableDeclaration(expression, checker); });
             }
-            return expression.operatorToken.kind === 62 /* EqualsToken */
+            return expression.operatorToken.kind === 63 /* EqualsToken */
                 && ts.isIdentifier(expression.left)
                 && !checker.getSymbolAtLocation(expression.left);
         }
@@ -140605,9 +143884,9 @@
                 return;
             }
             var declaration = token.parent;
-            if (declaration.kind === 164 /* PropertyDeclaration */ &&
+            if (declaration.kind === 165 /* PropertyDeclaration */ &&
                 (!fixedNodes || ts.tryAddToSet(fixedNodes, declaration))) {
-                changeTracker.insertModifierBefore(sourceFile, 133 /* DeclareKeyword */, declaration);
+                changeTracker.insertModifierBefore(sourceFile, 134 /* DeclareKeyword */, declaration);
             }
         }
     })(codefix = ts.codefix || (ts.codefix = {}));
@@ -140742,26 +144021,26 @@
         }
         function isDeclarationWithType(node) {
             return ts.isFunctionLikeDeclaration(node) ||
-                node.kind === 250 /* VariableDeclaration */ ||
-                node.kind === 163 /* PropertySignature */ ||
-                node.kind === 164 /* PropertyDeclaration */;
+                node.kind === 252 /* VariableDeclaration */ ||
+                node.kind === 164 /* PropertySignature */ ||
+                node.kind === 165 /* PropertyDeclaration */;
         }
         function transformJSDocType(node) {
             switch (node.kind) {
-                case 304 /* JSDocAllType */:
-                case 305 /* JSDocUnknownType */:
+                case 307 /* JSDocAllType */:
+                case 308 /* JSDocUnknownType */:
                     return ts.factory.createTypeReferenceNode("any", ts.emptyArray);
-                case 308 /* JSDocOptionalType */:
+                case 311 /* JSDocOptionalType */:
                     return transformJSDocOptionalType(node);
-                case 307 /* JSDocNonNullableType */:
+                case 310 /* JSDocNonNullableType */:
                     return transformJSDocType(node.type);
-                case 306 /* JSDocNullableType */:
+                case 309 /* JSDocNullableType */:
                     return transformJSDocNullableType(node);
-                case 310 /* JSDocVariadicType */:
+                case 313 /* JSDocVariadicType */:
                     return transformJSDocVariadicType(node);
-                case 309 /* JSDocFunctionType */:
+                case 312 /* JSDocFunctionType */:
                     return transformJSDocFunctionType(node);
-                case 174 /* TypeReference */:
+                case 176 /* TypeReference */:
                     return transformJSDocTypeReference(node);
                 default:
                     var visited = ts.visitEachChild(node, transformJSDocType, ts.nullTransformationContext);
@@ -140782,11 +144061,11 @@
             var _a;
             // TODO: This does not properly handle `function(new:C, string)` per https://github.com/google/closure-compiler/wiki/Types-in-the-Closure-Type-System#the-javascript-type-language
             //       however we do handle it correctly in `serializeTypeForDeclaration` in checker.ts
-            return ts.factory.createFunctionTypeNode(ts.emptyArray, node.parameters.map(transformJSDocParameter), (_a = node.type) !== null && _a !== void 0 ? _a : ts.factory.createKeywordTypeNode(128 /* AnyKeyword */));
+            return ts.factory.createFunctionTypeNode(ts.emptyArray, node.parameters.map(transformJSDocParameter), (_a = node.type) !== null && _a !== void 0 ? _a : ts.factory.createKeywordTypeNode(129 /* AnyKeyword */));
         }
         function transformJSDocParameter(node) {
             var index = node.parent.parameters.indexOf(node);
-            var isRest = node.type.kind === 310 /* JSDocVariadicType */ && index === node.parent.parameters.length - 1; // TODO: GH#18217
+            var isRest = node.type.kind === 313 /* JSDocVariadicType */ && index === node.parent.parameters.length - 1; // TODO: GH#18217
             var name = node.name || (isRest ? "rest" : "arg" + index);
             var dotdotdot = isRest ? ts.factory.createToken(25 /* DotDotDotToken */) : node.dotDotDotToken;
             return ts.factory.createParameterDeclaration(node.decorators, node.modifiers, dotdotdot, name, node.questionToken, ts.visitNode(node.type, transformJSDocType), node.initializer);
@@ -140826,8 +144105,8 @@
             var index = ts.factory.createParameterDeclaration(
             /*decorators*/ undefined, 
             /*modifiers*/ undefined, 
-            /*dotDotDotToken*/ undefined, node.typeArguments[0].kind === 144 /* NumberKeyword */ ? "n" : "s", 
-            /*questionToken*/ undefined, ts.factory.createTypeReferenceNode(node.typeArguments[0].kind === 144 /* NumberKeyword */ ? "number" : "string", []), 
+            /*dotDotDotToken*/ undefined, node.typeArguments[0].kind === 145 /* NumberKeyword */ ? "n" : "s", 
+            /*questionToken*/ undefined, ts.factory.createTypeReferenceNode(node.typeArguments[0].kind === 145 /* NumberKeyword */ ? "number" : "string", []), 
             /*initializer*/ undefined);
             var indexSignature = ts.factory.createTypeLiteralNode([ts.factory.createIndexSignature(/*decorators*/ undefined, /*modifiers*/ undefined, [index], node.typeArguments[1])]);
             ts.setEmitFlags(indexSignature, 1 /* SingleLine */);
@@ -140904,7 +144183,7 @@
                             if (member.declarations.length === 1 &&
                                 ts.isPropertyAccessExpression(firstDeclaration) &&
                                 ts.isBinaryExpression(firstDeclaration.parent) &&
-                                firstDeclaration.parent.operatorToken.kind === 62 /* EqualsToken */ &&
+                                firstDeclaration.parent.operatorToken.kind === 63 /* EqualsToken */ &&
                                 ts.isObjectLiteralExpression(firstDeclaration.parent.right)) {
                                 var prototypes = firstDeclaration.parent.right;
                                 var memberElement = createClassElement(prototypes.symbol, /** modifiers */ undefined);
@@ -140914,7 +144193,7 @@
                             }
                         }
                         else {
-                            var memberElement = createClassElement(member, [ts.factory.createToken(123 /* StaticKeyword */)]);
+                            var memberElement = createClassElement(member, [ts.factory.createToken(124 /* StaticKeyword */)]);
                             if (memberElement) {
                                 memberElements.push.apply(memberElements, memberElement);
                             }
@@ -140960,7 +144239,7 @@
                         return members;
                     }
                     // delete the entire statement if this expression is the sole expression to take care of the semicolon at the end
-                    var nodeToDelete = assignmentBinaryExpression.parent && assignmentBinaryExpression.parent.kind === 234 /* ExpressionStatement */
+                    var nodeToDelete = assignmentBinaryExpression.parent && assignmentBinaryExpression.parent.kind === 236 /* ExpressionStatement */
                         ? assignmentBinaryExpression.parent : assignmentBinaryExpression;
                     changes.delete(sourceFile, nodeToDelete);
                     if (!assignmentExpr) {
@@ -141011,7 +144290,7 @@
                             return createArrowFunctionExpressionMember(members, expression, name);
                     }
                     function createFunctionExpressionMember(members, functionExpression, name) {
-                        var fullModifiers = ts.concatenate(modifiers, getModifierKindFromSource(functionExpression, 129 /* AsyncKeyword */));
+                        var fullModifiers = ts.concatenate(modifiers, getModifierKindFromSource(functionExpression, 130 /* AsyncKeyword */));
                         var method = ts.factory.createMethodDeclaration(/*decorators*/ undefined, fullModifiers, /*asteriskToken*/ undefined, name, /*questionToken*/ undefined, 
                         /*typeParameters*/ undefined, functionExpression.parameters, /*type*/ undefined, functionExpression.body);
                         ts.copyLeadingComments(assignmentBinaryExpression, method, sourceFile);
@@ -141021,14 +144300,14 @@
                         var arrowFunctionBody = arrowFunction.body;
                         var bodyBlock;
                         // case 1: () => { return [1,2,3] }
-                        if (arrowFunctionBody.kind === 231 /* Block */) {
+                        if (arrowFunctionBody.kind === 233 /* Block */) {
                             bodyBlock = arrowFunctionBody;
                         }
                         // case 2: () => [1,2,3]
                         else {
                             bodyBlock = ts.factory.createBlock([ts.factory.createReturnStatement(arrowFunctionBody)]);
                         }
-                        var fullModifiers = ts.concatenate(modifiers, getModifierKindFromSource(arrowFunction, 129 /* AsyncKeyword */));
+                        var fullModifiers = ts.concatenate(modifiers, getModifierKindFromSource(arrowFunction, 130 /* AsyncKeyword */));
                         var method = ts.factory.createMethodDeclaration(/*decorators*/ undefined, fullModifiers, /*asteriskToken*/ undefined, name, /*questionToken*/ undefined, 
                         /*typeParameters*/ undefined, arrowFunction.parameters, /*type*/ undefined, bodyBlock);
                         ts.copyLeadingComments(assignmentBinaryExpression, method, sourceFile);
@@ -141045,7 +144324,7 @@
                 if (initializer.body) {
                     memberElements.unshift(ts.factory.createConstructorDeclaration(/*decorators*/ undefined, /*modifiers*/ undefined, initializer.parameters, initializer.body));
                 }
-                var modifiers = getModifierKindFromSource(node.parent.parent, 92 /* ExportKeyword */);
+                var modifiers = getModifierKindFromSource(node.parent.parent, 93 /* ExportKeyword */);
                 var cls = ts.factory.createClassDeclaration(/*decorators*/ undefined, modifiers, node.name, 
                 /*typeParameters*/ undefined, /*heritageClauses*/ undefined, memberElements);
                 // Don't call copyComments here because we'll already leave them in place
@@ -141056,7 +144335,7 @@
                 if (node.body) {
                     memberElements.unshift(ts.factory.createConstructorDeclaration(/*decorators*/ undefined, /*modifiers*/ undefined, node.parameters, node.body));
                 }
-                var modifiers = getModifierKindFromSource(node, 92 /* ExportKeyword */);
+                var modifiers = getModifierKindFromSource(node, 93 /* ExportKeyword */);
                 var cls = ts.factory.createClassDeclaration(/*decorators*/ undefined, modifiers, node.name, 
                 /*typeParameters*/ undefined, /*heritageClauses*/ undefined, memberElements);
                 // Don't call copyComments here because we'll already leave them in place
@@ -141144,7 +144423,7 @@
                 functionToConvert.decorators ? ts.skipTrivia(sourceFile.text, functionToConvert.decorators.end) :
                     functionToConvert.getStart(sourceFile);
             var options = functionToConvert.modifiers ? { prefix: " " } : { suffix: " " };
-            changes.insertModifierAt(sourceFile, pos, 129 /* AsyncKeyword */, options);
+            changes.insertModifierAt(sourceFile, pos, 130 /* AsyncKeyword */, options);
             var _loop_13 = function (returnStatement) {
                 ts.forEachChild(returnStatement, function visit(node) {
                     if (ts.isCallExpression(node)) {
@@ -141403,9 +144682,9 @@
         function maybeAnnotateAndReturn(expressionToReturn, typeAnnotation) {
             if (typeAnnotation && expressionToReturn) {
                 var name = ts.factory.createUniqueName("result", 16 /* Optimistic */);
-                return __spreadArray(__spreadArray([], createVariableOrAssignmentOrExpressionStatement(createSynthIdentifier(name), expressionToReturn, typeAnnotation)), [
+                return __spreadArray(__spreadArray([], createVariableOrAssignmentOrExpressionStatement(createSynthIdentifier(name), expressionToReturn, typeAnnotation), true), [
                     ts.factory.createReturnStatement(name)
-                ]);
+                ], false);
             }
             return [ts.factory.createReturnStatement(expressionToReturn)];
         }
@@ -141413,11 +144692,11 @@
         function getTransformationBody(func, prevArgName, argName, parent, transformer) {
             var _a, _b, _c, _d, _e;
             switch (func.kind) {
-                case 103 /* NullKeyword */:
+                case 104 /* NullKeyword */:
                     // do not produce a transformed statement for a null argument
                     break;
-                case 202 /* PropertyAccessExpression */:
-                case 78 /* Identifier */: // identifier includes undefined
+                case 204 /* PropertyAccessExpression */:
+                case 79 /* Identifier */: // identifier includes undefined
                     if (!argName) {
                         // undefined was argument passed to promise handler
                         break;
@@ -141438,8 +144717,8 @@
                         prevArgName.types.push(returnType);
                     }
                     return varDeclOrAssignment;
-                case 209 /* FunctionExpression */:
-                case 210 /* ArrowFunction */: {
+                case 211 /* FunctionExpression */:
+                case 212 /* ArrowFunction */: {
                     var funcBody = func.body;
                     var returnType_1 = (_c = getLastCallSignature(transformer.checker.getTypeAtLocation(func), transformer.checker)) === null || _c === void 0 ? void 0 : _c.getReturnType();
                     // Arrow functions with block bodies { } will enter this control flow
@@ -141658,10 +144937,10 @@
                 }
                 var importNode = ts.importFromModuleSpecifier(moduleSpecifier);
                 switch (importNode.kind) {
-                    case 261 /* ImportEqualsDeclaration */:
+                    case 263 /* ImportEqualsDeclaration */:
                         changes.replaceNode(importingFile, importNode, ts.makeImport(importNode.name, /*namedImports*/ undefined, moduleSpecifier, quotePreference));
                         break;
-                    case 204 /* CallExpression */:
+                    case 206 /* CallExpression */:
                         if (ts.isRequireCall(importNode, /*checkArgumentIsStringLiteralLike*/ false)) {
                             changes.replaceNode(importingFile, importNode, ts.factory.createPropertyAccessExpression(ts.getSynthesizedDeepClone(importNode), "default"));
                         }
@@ -141721,29 +145000,29 @@
             sourceFile.forEachChild(function recur(node) {
                 if (ts.isPropertyAccessExpression(node) && ts.isExportsOrModuleExportsOrAlias(sourceFile, node.expression) && ts.isIdentifier(node.name)) {
                     var parent = node.parent;
-                    cb(node, ts.isBinaryExpression(parent) && parent.left === node && parent.operatorToken.kind === 62 /* EqualsToken */);
+                    cb(node, ts.isBinaryExpression(parent) && parent.left === node && parent.operatorToken.kind === 63 /* EqualsToken */);
                 }
                 node.forEachChild(recur);
             });
         }
         function convertStatement(sourceFile, statement, checker, changes, identifiers, target, exports, useSitesToUnqualify, quotePreference) {
             switch (statement.kind) {
-                case 233 /* VariableStatement */:
+                case 235 /* VariableStatement */:
                     convertVariableStatement(sourceFile, statement, changes, checker, identifiers, target, quotePreference);
                     return false;
-                case 234 /* ExpressionStatement */: {
+                case 236 /* ExpressionStatement */: {
                     var expression = statement.expression;
                     switch (expression.kind) {
-                        case 204 /* CallExpression */: {
+                        case 206 /* CallExpression */: {
                             if (ts.isRequireCall(expression, /*checkArgumentIsStringLiteralLike*/ true)) {
                                 // For side-effecting require() call, just make a side-effecting import.
                                 changes.replaceNode(sourceFile, statement, ts.makeImport(/*name*/ undefined, /*namedImports*/ undefined, expression.arguments[0], quotePreference));
                             }
                             return false;
                         }
-                        case 217 /* BinaryExpression */: {
+                        case 219 /* BinaryExpression */: {
                             var operatorToken = expression.operatorToken;
-                            return operatorToken.kind === 62 /* EqualsToken */ && convertAssignment(sourceFile, checker, expression, changes, exports, useSitesToUnqualify);
+                            return operatorToken.kind === 63 /* EqualsToken */ && convertAssignment(sourceFile, checker, expression, changes, exports, useSitesToUnqualify);
                         }
                     }
                 }
@@ -141790,8 +145069,8 @@
         /** Converts `const name = require("moduleSpecifier").propertyName` */
         function convertPropertyAccessImport(name, propertyName, moduleSpecifier, identifiers, quotePreference) {
             switch (name.kind) {
-                case 197 /* ObjectBindingPattern */:
-                case 198 /* ArrayBindingPattern */: {
+                case 199 /* ObjectBindingPattern */:
+                case 200 /* ArrayBindingPattern */: {
                     // `const [a, b] = require("c").d` --> `import { d } from "c"; const [a, b] = d;`
                     var tmp = makeUniqueName(propertyName, identifiers);
                     return convertedImports([
@@ -141799,7 +145078,7 @@
                         makeConst(/*modifiers*/ undefined, name, ts.factory.createIdentifier(tmp)),
                     ]);
                 }
-                case 78 /* Identifier */:
+                case 79 /* Identifier */:
                     // `const a = require("b").c` --> `import { c as a } from "./b";
                     return convertedImports([makeSingleImport(name.text, propertyName, moduleSpecifier, quotePreference)]);
                 default:
@@ -141842,17 +145121,17 @@
         function tryChangeModuleExportsObject(object, useSitesToUnqualify) {
             var statements = ts.mapAllOrFail(object.properties, function (prop) {
                 switch (prop.kind) {
-                    case 168 /* GetAccessor */:
-                    case 169 /* SetAccessor */:
+                    case 170 /* GetAccessor */:
+                    case 171 /* SetAccessor */:
                     // TODO: Maybe we should handle this? See fourslash test `refactorConvertToEs6Module_export_object_shorthand.ts`.
                     // falls through
-                    case 290 /* ShorthandPropertyAssignment */:
-                    case 291 /* SpreadAssignment */:
+                    case 292 /* ShorthandPropertyAssignment */:
+                    case 293 /* SpreadAssignment */:
                         return undefined;
-                    case 289 /* PropertyAssignment */:
+                    case 291 /* PropertyAssignment */:
                         return !ts.isIdentifier(prop.name) ? undefined : convertExportsDotXEquals_replaceNode(prop.name.text, prop.initializer, useSitesToUnqualify);
-                    case 166 /* MethodDeclaration */:
-                        return !ts.isIdentifier(prop.name) ? undefined : functionExpressionToDeclaration(prop.name.text, [ts.factory.createToken(92 /* ExportKeyword */)], prop, useSitesToUnqualify);
+                    case 167 /* MethodDeclaration */:
+                        return !ts.isIdentifier(prop.name) ? undefined : functionExpressionToDeclaration(prop.name.text, [ts.factory.createToken(93 /* ExportKeyword */)], prop, useSitesToUnqualify);
                     default:
                         ts.Debug.assertNever(prop, "Convert to ES6 got invalid prop kind " + prop.kind);
                 }
@@ -141899,7 +145178,7 @@
             var name = left.name.text;
             if ((ts.isFunctionExpression(right) || ts.isArrowFunction(right) || ts.isClassExpression(right)) && (!right.name || right.name.text === name)) {
                 // `exports.f = function() {}` -> `export function f() {}` -- Replace `exports.f = ` with `export `, and insert the name after `function`.
-                changes.replaceRange(sourceFile, { pos: left.getStart(sourceFile), end: right.getStart(sourceFile) }, ts.factory.createToken(92 /* ExportKeyword */), { suffix: " " });
+                changes.replaceRange(sourceFile, { pos: left.getStart(sourceFile), end: right.getStart(sourceFile) }, ts.factory.createToken(93 /* ExportKeyword */), { suffix: " " });
                 if (!right.name)
                     changes.insertName(sourceFile, right, name);
                 var semi = ts.findChildOfKind(parent, 26 /* SemicolonToken */, sourceFile);
@@ -141908,14 +145187,14 @@
             }
             else {
                 // `exports.f = function g() {}` -> `export const f = function g() {}` -- just replace `exports.` with `export const `
-                changes.replaceNodeRangeWithNodes(sourceFile, left.expression, ts.findChildOfKind(left, 24 /* DotToken */, sourceFile), [ts.factory.createToken(92 /* ExportKeyword */), ts.factory.createToken(84 /* ConstKeyword */)], { joiner: " ", suffix: " " });
+                changes.replaceNodeRangeWithNodes(sourceFile, left.expression, ts.findChildOfKind(left, 24 /* DotToken */, sourceFile), [ts.factory.createToken(93 /* ExportKeyword */), ts.factory.createToken(85 /* ConstKeyword */)], { joiner: " ", suffix: " " });
             }
         }
         // TODO: GH#22492 this will cause an error if a change has been made inside the body of the node.
         function convertExportsDotXEquals_replaceNode(name, exported, useSitesToUnqualify) {
-            var modifiers = [ts.factory.createToken(92 /* ExportKeyword */)];
+            var modifiers = [ts.factory.createToken(93 /* ExportKeyword */)];
             switch (exported.kind) {
-                case 209 /* FunctionExpression */: {
+                case 211 /* FunctionExpression */: {
                     var expressionName = exported.name;
                     if (expressionName && expressionName.text !== name) {
                         // `exports.f = function g() {}` -> `export const f = function g() {}`
@@ -141923,10 +145202,10 @@
                     }
                 }
                 // falls through
-                case 210 /* ArrowFunction */:
+                case 212 /* ArrowFunction */:
                     // `exports.f = function() {}` --> `export function f() {}`
                     return functionExpressionToDeclaration(name, modifiers, exported, useSitesToUnqualify);
-                case 222 /* ClassExpression */:
+                case 224 /* ClassExpression */:
                     // `exports.C = class {}` --> `export class C {}`
                     return classExpressionToDeclaration(name, modifiers, exported, useSitesToUnqualify);
                 default:
@@ -141946,7 +145225,7 @@
                 : ts.getSynthesizedDeepCloneWithReplacements(nodeOrNodes, /*includeTrivia*/ true, replaceNode);
             function replaceNode(original) {
                 // We are replacing `mod.SomeExport` wih `SomeExport`, so we only need to look at PropertyAccessExpressions
-                if (original.kind === 202 /* PropertyAccessExpression */) {
+                if (original.kind === 204 /* PropertyAccessExpression */) {
                     var replacement = useSitesToUnqualify.get(original);
                     // Remove entry from `useSitesToUnqualify` so the refactor knows it's taken care of by the parent statement we're replacing
                     useSitesToUnqualify.delete(original);
@@ -141961,7 +145240,7 @@
          */
         function convertSingleImport(name, moduleSpecifier, checker, identifiers, target, quotePreference) {
             switch (name.kind) {
-                case 197 /* ObjectBindingPattern */: {
+                case 199 /* ObjectBindingPattern */: {
                     var importSpecifiers = ts.mapAllOrFail(name.elements, function (e) {
                         return e.dotDotDotToken || e.initializer || e.propertyName && !ts.isIdentifier(e.propertyName) || !ts.isIdentifier(e.name)
                             ? undefined
@@ -141974,7 +145253,7 @@
                     }
                 }
                 // falls through -- object destructuring has an interesting pattern and must be a variable declaration
-                case 198 /* ArrayBindingPattern */: {
+                case 200 /* ArrayBindingPattern */: {
                     /*
                     import x from "x";
                     const [a, b, c] = x;
@@ -141985,7 +145264,7 @@
                         makeConst(/*modifiers*/ undefined, ts.getSynthesizedDeepClone(name), ts.factory.createIdentifier(tmp)),
                     ]);
                 }
-                case 78 /* Identifier */:
+                case 79 /* Identifier */:
                     return convertSingleIdentifierImport(name, moduleSpecifier, checker, identifiers, quotePreference);
                 default:
                     return ts.Debug.assertNever(name, "Convert to ES6 module got invalid name kind " + name.kind);
@@ -142067,11 +145346,11 @@
         function isFreeIdentifier(node) {
             var parent = node.parent;
             switch (parent.kind) {
-                case 202 /* PropertyAccessExpression */:
+                case 204 /* PropertyAccessExpression */:
                     return parent.name !== node;
-                case 199 /* BindingElement */:
+                case 201 /* BindingElement */:
                     return parent.propertyName !== node;
-                case 266 /* ImportSpecifier */:
+                case 268 /* ImportSpecifier */:
                     return parent.propertyName !== node;
                 default:
                     return true;
@@ -142185,7 +145464,7 @@
             var exportDeclaration = exportClause.parent;
             var typeExportSpecifiers = getTypeExportSpecifiers(exportSpecifier, context);
             if (typeExportSpecifiers.length === exportClause.elements.length) {
-                changes.insertModifierBefore(context.sourceFile, 149 /* TypeKeyword */, exportClause);
+                changes.insertModifierBefore(context.sourceFile, 150 /* TypeKeyword */, exportClause);
             }
             else {
                 var valueExportDeclaration = ts.factory.updateExportDeclaration(exportDeclaration, exportDeclaration.decorators, exportDeclaration.modifiers, 
@@ -142371,7 +145650,7 @@
             function createMissingIndexSignatureDeclaration(type, kind) {
                 var indexInfoOfKind = checker.getIndexInfoOfType(type, kind);
                 if (indexInfoOfKind) {
-                    insertInterfaceMemberNode(sourceFile, classDeclaration, checker.indexInfoToIndexSignatureDeclaration(indexInfoOfKind, kind, classDeclaration, /*flags*/ undefined, codefix.getNoopSymbolTrackerWithResolver(context)));
+                    insertInterfaceMemberNode(sourceFile, classDeclaration, checker.indexInfoToIndexSignatureDeclaration(indexInfoOfKind, classDeclaration, /*flags*/ undefined, codefix.getNoopSymbolTrackerWithResolver(context)));
                 }
             }
             // Either adds the node at the top of the class, or if there's a constructor right after that
@@ -142409,6 +145688,7 @@
             ts.Diagnostics.Cannot_find_namespace_0.code,
             ts.Diagnostics._0_refers_to_a_UMD_global_but_the_current_file_is_a_module_Consider_adding_an_import_instead.code,
             ts.Diagnostics._0_only_refers_to_a_type_but_is_being_used_as_a_value_here.code,
+            ts.Diagnostics.No_value_exists_in_scope_for_the_shorthand_property_0_Either_declare_one_or_provide_an_initializer.code
         ];
         codefix.registerCodeFix({
             errorCodes: errorCodes,
@@ -142453,11 +145733,13 @@
                 var symbolName = ts.getNameForExportedSymbol(exportedSymbol, ts.getEmitScriptTarget(compilerOptions));
                 var checker = program.getTypeChecker();
                 var symbol = checker.getMergedSymbol(ts.skipAlias(exportedSymbol, checker));
-                var exportInfos = getAllReExportingModules(sourceFile, symbol, moduleSymbol, symbolName, host, program, useAutoImportProvider);
+                var exportInfos = getAllReExportingModules(sourceFile, symbol, moduleSymbol, symbolName, host, program, preferences, useAutoImportProvider);
                 var preferTypeOnlyImport = !!usageIsTypeOnly && compilerOptions.importsNotUsedAsValues === 2 /* Error */;
                 var useRequire = shouldUseRequire(sourceFile, program);
                 var fix = getImportFixForSymbol(sourceFile, exportInfos, moduleSymbol, symbolName, program, /*position*/ undefined, preferTypeOnlyImport, useRequire, host, preferences);
-                addImport({ fixes: [fix], symbolName: symbolName });
+                if (fix) {
+                    addImport({ fixes: [fix], symbolName: symbolName });
+                }
             }
             function addImport(info) {
                 var fixes = info.fixes, symbolName = info.symbolName;
@@ -142552,16 +145834,16 @@
             var compilerOptions = program.getCompilerOptions();
             var exportInfos = ts.pathIsBareSpecifier(ts.stripQuotes(moduleSymbol.name))
                 ? [getSymbolExportInfoForSymbol(exportedSymbol, moduleSymbol, program, host)]
-                : getAllReExportingModules(sourceFile, exportedSymbol, moduleSymbol, symbolName, host, program, /*useAutoImportProvider*/ true);
+                : getAllReExportingModules(sourceFile, exportedSymbol, moduleSymbol, symbolName, host, program, preferences, /*useAutoImportProvider*/ true);
             var useRequire = shouldUseRequire(sourceFile, program);
             var preferTypeOnlyImport = compilerOptions.importsNotUsedAsValues === 2 /* Error */ && !ts.isSourceFileJS(sourceFile) && ts.isValidTypeOnlyAliasUseSite(ts.getTokenAtPosition(sourceFile, position));
-            var fix = getImportFixForSymbol(sourceFile, exportInfos, moduleSymbol, symbolName, program, position, preferTypeOnlyImport, useRequire, host, preferences);
+            var fix = ts.Debug.checkDefined(getImportFixForSymbol(sourceFile, exportInfos, moduleSymbol, symbolName, program, position, preferTypeOnlyImport, useRequire, host, preferences));
             return { moduleSpecifier: fix.moduleSpecifier, codeAction: codeFixActionToCodeAction(codeActionForFix({ host: host, formatContext: formatContext, preferences: preferences }, sourceFile, symbolName, fix, ts.getQuotePreference(sourceFile, preferences))) };
         }
         codefix.getImportCompletionAction = getImportCompletionAction;
         function getImportFixForSymbol(sourceFile, exportInfos, moduleSymbol, symbolName, program, position, preferTypeOnlyImport, useRequire, host, preferences) {
-            ts.Debug.assert(exportInfos.some(function (info) { return info.moduleSymbol === moduleSymbol; }), "Some exportInfo should match the specified moduleSymbol");
-            return getBestFix(getImportFixes(exportInfos, symbolName, position, preferTypeOnlyImport, useRequire, program, sourceFile, host, preferences), sourceFile, host);
+            ts.Debug.assert(exportInfos.some(function (info) { return info.moduleSymbol === moduleSymbol || info.symbol.parent === moduleSymbol; }), "Some exportInfo should match the specified moduleSymbol");
+            return getBestFix(getImportFixes(exportInfos, symbolName, position, preferTypeOnlyImport, useRequire, program, sourceFile, host, preferences), sourceFile, program, host, preferences);
         }
         function codeFixActionToCodeAction(_a) {
             var description = _a.description, changes = _a.changes, commands = _a.commands;
@@ -142577,101 +145859,54 @@
             var autoImportProvider = (_b = (_a = host.getPackageJsonAutoImportProvider) === null || _a === void 0 ? void 0 : _a.call(host)) === null || _b === void 0 ? void 0 : _b.getTypeChecker();
             return ts.Debug.checkDefined(autoImportProvider && getInfoWithChecker(autoImportProvider, /*isFromPackageJson*/ true), "Could not find symbol in specified module for code actions");
             function getInfoWithChecker(checker, isFromPackageJson) {
-                var defaultInfo = getDefaultLikeExportInfo(moduleSymbol, checker, compilerOptions);
+                var defaultInfo = ts.getDefaultLikeExportInfo(moduleSymbol, checker, compilerOptions);
                 if (defaultInfo && ts.skipAlias(defaultInfo.symbol, checker) === symbol) {
-                    return { symbol: defaultInfo.symbol, moduleSymbol: moduleSymbol, exportKind: defaultInfo.exportKind, exportedSymbolIsTypeOnly: isTypeOnlySymbol(symbol, checker), isFromPackageJson: isFromPackageJson };
+                    return { symbol: defaultInfo.symbol, moduleSymbol: moduleSymbol, moduleFileName: undefined, exportKind: defaultInfo.exportKind, targetFlags: ts.skipAlias(symbol, checker).flags, isFromPackageJson: isFromPackageJson };
                 }
                 var named = checker.tryGetMemberInModuleExportsAndProperties(symbol.name, moduleSymbol);
                 if (named && ts.skipAlias(named, checker) === symbol) {
-                    return { symbol: named, moduleSymbol: moduleSymbol, exportKind: 0 /* Named */, exportedSymbolIsTypeOnly: isTypeOnlySymbol(symbol, checker), isFromPackageJson: isFromPackageJson };
+                    return { symbol: named, moduleSymbol: moduleSymbol, moduleFileName: undefined, exportKind: 0 /* Named */, targetFlags: ts.skipAlias(symbol, checker).flags, isFromPackageJson: isFromPackageJson };
                 }
             }
         }
-        function getAllReExportingModules(importingFile, exportedSymbol, exportingModuleSymbol, symbolName, host, program, useAutoImportProvider) {
+        function getAllReExportingModules(importingFile, exportedSymbol, exportingModuleSymbol, symbolName, host, program, preferences, useAutoImportProvider) {
             var result = [];
             var compilerOptions = program.getCompilerOptions();
             var getModuleSpecifierResolutionHost = ts.memoizeOne(function (isFromPackageJson) {
                 return ts.createModuleSpecifierResolutionHost(isFromPackageJson ? host.getPackageJsonAutoImportProvider() : program, host);
             });
-            forEachExternalModuleToImportFrom(program, host, useAutoImportProvider, function (moduleSymbol, moduleFile, program, isFromPackageJson) {
+            ts.forEachExternalModuleToImportFrom(program, host, useAutoImportProvider, function (moduleSymbol, moduleFile, program, isFromPackageJson) {
                 var checker = program.getTypeChecker();
                 // Don't import from a re-export when looking "up" like to `./index` or `../index`.
                 if (moduleFile && moduleSymbol !== exportingModuleSymbol && ts.startsWith(importingFile.fileName, ts.getDirectoryPath(moduleFile.fileName))) {
                     return;
                 }
-                var defaultInfo = getDefaultLikeExportInfo(moduleSymbol, checker, compilerOptions);
+                var defaultInfo = ts.getDefaultLikeExportInfo(moduleSymbol, checker, compilerOptions);
                 if (defaultInfo && (defaultInfo.name === symbolName || moduleSymbolToValidIdentifier(moduleSymbol, compilerOptions.target) === symbolName) && ts.skipAlias(defaultInfo.symbol, checker) === exportedSymbol && isImportable(program, moduleFile, isFromPackageJson)) {
-                    result.push({ symbol: defaultInfo.symbol, moduleSymbol: moduleSymbol, exportKind: defaultInfo.exportKind, exportedSymbolIsTypeOnly: isTypeOnlySymbol(defaultInfo.symbol, checker), isFromPackageJson: isFromPackageJson });
+                    result.push({ symbol: defaultInfo.symbol, moduleSymbol: moduleSymbol, moduleFileName: moduleFile === null || moduleFile === void 0 ? void 0 : moduleFile.fileName, exportKind: defaultInfo.exportKind, targetFlags: ts.skipAlias(defaultInfo.symbol, checker).flags, isFromPackageJson: isFromPackageJson });
                 }
                 for (var _i = 0, _a = checker.getExportsAndPropertiesOfModule(moduleSymbol); _i < _a.length; _i++) {
                     var exported = _a[_i];
                     if (exported.name === symbolName && ts.skipAlias(exported, checker) === exportedSymbol && isImportable(program, moduleFile, isFromPackageJson)) {
-                        result.push({ symbol: exported, moduleSymbol: moduleSymbol, exportKind: 0 /* Named */, exportedSymbolIsTypeOnly: isTypeOnlySymbol(exported, checker), isFromPackageJson: isFromPackageJson });
+                        result.push({ symbol: exported, moduleSymbol: moduleSymbol, moduleFileName: moduleFile === null || moduleFile === void 0 ? void 0 : moduleFile.fileName, exportKind: 0 /* Named */, targetFlags: ts.skipAlias(exported, checker).flags, isFromPackageJson: isFromPackageJson });
                     }
                 }
             });
             return result;
             function isImportable(program, moduleFile, isFromPackageJson) {
                 var _a;
-                return !moduleFile || ts.isImportableFile(program, importingFile, moduleFile, /*packageJsonFilter*/ undefined, getModuleSpecifierResolutionHost(isFromPackageJson), (_a = host.getModuleSpecifierCache) === null || _a === void 0 ? void 0 : _a.call(host));
+                return !moduleFile || ts.isImportableFile(program, importingFile, moduleFile, preferences, /*packageJsonFilter*/ undefined, getModuleSpecifierResolutionHost(isFromPackageJson), (_a = host.getModuleSpecifierCache) === null || _a === void 0 ? void 0 : _a.call(host));
             }
         }
-        function getModuleSpecifierForBestExportInfo(exportInfo, importingFile, program, host, preferences) {
-            return getBestFix(getNewImportFixes(program, importingFile, /*position*/ undefined, /*preferTypeOnlyImport*/ false, /*useRequire*/ false, exportInfo, host, preferences), importingFile, host);
+        function getModuleSpecifierForBestExportInfo(exportInfo, importingFile, program, host, preferences, fromCacheOnly) {
+            var _a = getNewImportFixes(program, importingFile, 
+            /*position*/ undefined, 
+            /*preferTypeOnlyImport*/ false, 
+            /*useRequire*/ false, exportInfo, host, preferences, fromCacheOnly), fixes = _a.fixes, computedWithoutCacheCount = _a.computedWithoutCacheCount;
+            var result = getBestFix(fixes, importingFile, program, host, preferences);
+            return result && __assign(__assign({}, result), { computedWithoutCacheCount: computedWithoutCacheCount });
         }
         codefix.getModuleSpecifierForBestExportInfo = getModuleSpecifierForBestExportInfo;
-        function getSymbolToExportInfoMap(importingFile, host, program) {
-            var _a, _b, _c, _d, _e, _f, _g, _h;
-            var start = ts.timestamp();
-            // Pulling the AutoImportProvider project will trigger its updateGraph if pending,
-            // which will invalidate the export map cache if things change, so pull it before
-            // checking the cache.
-            (_a = host.getPackageJsonAutoImportProvider) === null || _a === void 0 ? void 0 : _a.call(host);
-            var cache = (_b = host.getExportMapCache) === null || _b === void 0 ? void 0 : _b.call(host);
-            if (cache) {
-                var cached = cache.get(importingFile.path, program.getTypeChecker(), (_c = host.getProjectVersion) === null || _c === void 0 ? void 0 : _c.call(host));
-                if (cached) {
-                    (_d = host.log) === null || _d === void 0 ? void 0 : _d.call(host, "getSymbolToExportInfoMap: cache hit");
-                    return cached;
-                }
-                else {
-                    (_e = host.log) === null || _e === void 0 ? void 0 : _e.call(host, "getSymbolToExportInfoMap: cache miss or empty; calculating new results");
-                }
-            }
-            var result = ts.createMultiMap();
-            var compilerOptions = program.getCompilerOptions();
-            var target = ts.getEmitScriptTarget(compilerOptions);
-            forEachExternalModuleToImportFrom(program, host, /*useAutoImportProvider*/ true, function (moduleSymbol, _moduleFile, program, isFromPackageJson) {
-                var checker = program.getTypeChecker();
-                var defaultInfo = getDefaultLikeExportInfo(moduleSymbol, checker, compilerOptions);
-                if (defaultInfo) {
-                    var name = ts.getNameForExportedSymbol(ts.getLocalSymbolForExportDefault(defaultInfo.symbol) || defaultInfo.symbol, target);
-                    result.add(key(name, defaultInfo.symbol, moduleSymbol, checker), { symbol: defaultInfo.symbol, moduleSymbol: moduleSymbol, exportKind: defaultInfo.exportKind, exportedSymbolIsTypeOnly: isTypeOnlySymbol(defaultInfo.symbol, checker), isFromPackageJson: isFromPackageJson });
-                }
-                var seenExports = new ts.Map();
-                for (var _i = 0, _a = checker.getExportsAndPropertiesOfModule(moduleSymbol); _i < _a.length; _i++) {
-                    var exported = _a[_i];
-                    if (exported !== (defaultInfo === null || defaultInfo === void 0 ? void 0 : defaultInfo.symbol) && ts.addToSeen(seenExports, exported)) {
-                        result.add(key(ts.getNameForExportedSymbol(exported, target), exported, moduleSymbol, checker), { symbol: exported, moduleSymbol: moduleSymbol, exportKind: 0 /* Named */, exportedSymbolIsTypeOnly: isTypeOnlySymbol(exported, checker), isFromPackageJson: isFromPackageJson });
-                    }
-                }
-            });
-            if (cache) {
-                (_f = host.log) === null || _f === void 0 ? void 0 : _f.call(host, "getSymbolToExportInfoMap: caching results");
-                cache.set(result, (_g = host.getProjectVersion) === null || _g === void 0 ? void 0 : _g.call(host));
-            }
-            (_h = host.log) === null || _h === void 0 ? void 0 : _h.call(host, "getSymbolToExportInfoMap: done in " + (ts.timestamp() - start) + " ms");
-            return result;
-            function key(name, alias, moduleSymbol, checker) {
-                var moduleName = ts.stripQuotes(moduleSymbol.name);
-                var moduleKey = ts.isExternalModuleNameRelative(moduleName) ? "/" : moduleName;
-                return name + "|" + ts.getSymbolId(ts.skipAlias(alias, checker)) + "|" + moduleKey;
-            }
-        }
-        codefix.getSymbolToExportInfoMap = getSymbolToExportInfoMap;
-        function isTypeOnlySymbol(s, checker) {
-            return !(ts.skipAlias(s, checker).flags & 111551 /* Value */);
-        }
         function isTypeOnlyPosition(sourceFile, position) {
             return ts.isValidTypeOnlyAliasUseSite(ts.getTokenAtPosition(sourceFile, position));
         }
@@ -142684,7 +145919,7 @@
             var addToExisting = tryAddToExistingImport(existingImports, position !== undefined && isTypeOnlyPosition(sourceFile, position));
             // Don't bother providing an action to add a new import if we can add to an existing one.
             var addImport = addToExisting ? [addToExisting] : getFixesForAddImport(exportInfos, existingImports, program, sourceFile, position, preferTypeOnlyImport, useRequire, host, preferences);
-            return __spreadArray(__spreadArray([], (useNamespace ? [useNamespace] : ts.emptyArray)), addImport);
+            return __spreadArray(__spreadArray([], (useNamespace ? [useNamespace] : ts.emptyArray), true), addImport, true);
         }
         function tryUseExistingNamespaceImport(existingImports, symbolName, position, checker) {
             // It is possible that multiple import statements with the same specifier exist in the file.
@@ -142714,11 +145949,11 @@
         function getTargetModuleFromNamespaceLikeImport(declaration, checker) {
             var _a;
             switch (declaration.kind) {
-                case 250 /* VariableDeclaration */:
+                case 252 /* VariableDeclaration */:
                     return checker.resolveExternalModuleName(declaration.initializer.arguments[0]);
-                case 261 /* ImportEqualsDeclaration */:
+                case 263 /* ImportEqualsDeclaration */:
                     return checker.getAliasedSymbol(declaration.symbol);
-                case 262 /* ImportDeclaration */:
+                case 264 /* ImportDeclaration */:
                     var namespaceImport = ts.tryCast((_a = declaration.importClause) === null || _a === void 0 ? void 0 : _a.namedBindings, ts.isNamespaceImport);
                     return namespaceImport && checker.getAliasedSymbol(namespaceImport.symbol);
                 default:
@@ -142728,11 +145963,11 @@
         function getNamespaceLikeImportText(declaration) {
             var _a, _b, _c;
             switch (declaration.kind) {
-                case 250 /* VariableDeclaration */:
+                case 252 /* VariableDeclaration */:
                     return (_a = ts.tryCast(declaration.name, ts.isIdentifier)) === null || _a === void 0 ? void 0 : _a.text;
-                case 261 /* ImportEqualsDeclaration */:
+                case 263 /* ImportEqualsDeclaration */:
                     return declaration.name.text;
-                case 262 /* ImportDeclaration */:
+                case 264 /* ImportDeclaration */:
                     return (_c = ts.tryCast((_b = declaration.importClause) === null || _b === void 0 ? void 0 : _b.namedBindings, ts.isNamespaceImport)) === null || _c === void 0 ? void 0 : _c.name.text;
                 default:
                     return ts.Debug.assertNever(declaration);
@@ -142741,10 +145976,10 @@
         function tryAddToExistingImport(existingImports, canUseTypeOnlyImport) {
             return ts.firstDefined(existingImports, function (_a) {
                 var declaration = _a.declaration, importKind = _a.importKind;
-                if (declaration.kind === 261 /* ImportEqualsDeclaration */)
+                if (declaration.kind === 263 /* ImportEqualsDeclaration */)
                     return undefined;
-                if (declaration.kind === 250 /* VariableDeclaration */) {
-                    return (importKind === 0 /* Named */ || importKind === 1 /* Default */) && declaration.name.kind === 197 /* ObjectBindingPattern */
+                if (declaration.kind === 252 /* VariableDeclaration */) {
+                    return (importKind === 0 /* Named */ || importKind === 1 /* Default */) && declaration.name.kind === 199 /* ObjectBindingPattern */
                         ? { kind: 2 /* AddToExisting */, importClauseOrBindingPattern: declaration.name, importKind: importKind, moduleSpecifier: declaration.initializer.arguments[0].text, canUseTypeOnlyImport: false }
                         : undefined;
                 }
@@ -142756,15 +145991,15 @@
                 // be added to an existing type-only import is adding a named import to existing named bindings.
                 if (importClause.isTypeOnly && !(importKind === 0 /* Named */ && namedBindings))
                     return undefined;
-                return importKind === 1 /* Default */ && !name || importKind === 0 /* Named */ && (!namedBindings || namedBindings.kind === 265 /* NamedImports */)
+                return importKind === 1 /* Default */ && !name || importKind === 0 /* Named */ && (!namedBindings || namedBindings.kind === 267 /* NamedImports */)
                     ? { kind: 2 /* AddToExisting */, importClauseOrBindingPattern: importClause, importKind: importKind, moduleSpecifier: declaration.moduleSpecifier.text, canUseTypeOnlyImport: canUseTypeOnlyImport }
                     : undefined;
             });
         }
         function getExistingImportDeclarations(_a, checker, importingFile, compilerOptions) {
-            var moduleSymbol = _a.moduleSymbol, exportKind = _a.exportKind, exportedSymbolIsTypeOnly = _a.exportedSymbolIsTypeOnly;
+            var moduleSymbol = _a.moduleSymbol, exportKind = _a.exportKind, targetFlags = _a.targetFlags;
             // Can't use an es6 import for a type in JS.
-            if (exportedSymbolIsTypeOnly && ts.isSourceFileJS(importingFile))
+            if (!(targetFlags & 111551 /* Value */) && ts.isSourceFileJS(importingFile))
                 return ts.emptyArray;
             var importKind = getImportKind(importingFile, exportKind, compilerOptions);
             return ts.mapDefined(importingFile.imports, function (moduleSpecifier) {
@@ -142772,7 +146007,7 @@
                 if (ts.isRequireVariableDeclaration(i.parent)) {
                     return checker.resolveExternalModuleName(moduleSpecifier) === moduleSymbol ? { declaration: i.parent, importKind: importKind } : undefined;
                 }
-                if (i.kind === 262 /* ImportDeclaration */ || i.kind === 261 /* ImportEqualsDeclaration */) {
+                if (i.kind === 264 /* ImportDeclaration */ || i.kind === 263 /* ImportEqualsDeclaration */) {
                     return checker.getSymbolAtLocation(moduleSpecifier) === moduleSymbol ? { declaration: i, importKind: importKind } : undefined;
                 }
             });
@@ -142805,23 +146040,37 @@
             // 5. Literally nothing to go on
             return true;
         }
-        function getNewImportFixes(program, sourceFile, position, preferTypeOnlyImport, useRequire, moduleSymbols, host, preferences) {
+        function getNewImportFixes(program, sourceFile, position, preferTypeOnlyImport, useRequire, moduleSymbols, host, preferences, fromCacheOnly) {
             var isJs = ts.isSourceFileJS(sourceFile);
             var compilerOptions = program.getCompilerOptions();
             var moduleSpecifierResolutionHost = ts.createModuleSpecifierResolutionHost(program, host);
-            return ts.flatMap(moduleSymbols, function (exportInfo) {
-                return ts.moduleSpecifiers.getModuleSpecifiers(exportInfo.moduleSymbol, program.getTypeChecker(), compilerOptions, sourceFile, moduleSpecifierResolutionHost, preferences)
-                    .map(function (moduleSpecifier) {
+            var checker = program.getTypeChecker();
+            var getModuleSpecifiers = fromCacheOnly
+                ? function (moduleSymbol) { return ({ moduleSpecifiers: ts.moduleSpecifiers.tryGetModuleSpecifiersFromCache(moduleSymbol, sourceFile, moduleSpecifierResolutionHost, preferences), computedWithoutCache: false }); }
+                : function (moduleSymbol) { return ts.moduleSpecifiers.getModuleSpecifiersWithCacheInfo(moduleSymbol, checker, compilerOptions, sourceFile, moduleSpecifierResolutionHost, preferences); };
+            var computedWithoutCacheCount = 0;
+            var fixes = ts.flatMap(moduleSymbols, function (exportInfo) {
+                var _a = getModuleSpecifiers(exportInfo.moduleSymbol), computedWithoutCache = _a.computedWithoutCache, moduleSpecifiers = _a.moduleSpecifiers;
+                computedWithoutCacheCount += computedWithoutCache ? 1 : 0;
+                return moduleSpecifiers === null || moduleSpecifiers === void 0 ? void 0 : moduleSpecifiers.map(function (moduleSpecifier) {
                     // `position` should only be undefined at a missing jsx namespace, in which case we shouldn't be looking for pure types.
-                    return exportInfo.exportedSymbolIsTypeOnly && isJs && position !== undefined
+                    return !(exportInfo.targetFlags & 111551 /* Value */) && isJs && position !== undefined
                         ? { kind: 1 /* ImportType */, moduleSpecifier: moduleSpecifier, position: position, exportInfo: exportInfo }
-                        : { kind: 3 /* AddNew */, moduleSpecifier: moduleSpecifier, importKind: getImportKind(sourceFile, exportInfo.exportKind, compilerOptions), useRequire: useRequire, typeOnly: preferTypeOnlyImport, exportInfo: exportInfo };
+                        : {
+                            kind: 3 /* AddNew */,
+                            moduleSpecifier: moduleSpecifier,
+                            importKind: getImportKind(sourceFile, exportInfo.exportKind, compilerOptions),
+                            useRequire: useRequire,
+                            typeOnly: preferTypeOnlyImport,
+                            exportInfo: exportInfo,
+                        };
                 });
             });
+            return { computedWithoutCacheCount: computedWithoutCacheCount, fixes: fixes };
         }
         function getFixesForAddImport(exportInfos, existingImports, program, sourceFile, position, preferTypeOnlyImport, useRequire, host, preferences) {
             var existingDeclaration = ts.firstDefined(existingImports, function (info) { return newImportInfoFromExistingSpecifier(info, preferTypeOnlyImport, useRequire); });
-            return existingDeclaration ? [existingDeclaration] : getNewImportFixes(program, sourceFile, position, preferTypeOnlyImport, useRequire, exportInfos, host, preferences);
+            return existingDeclaration ? [existingDeclaration] : getNewImportFixes(program, sourceFile, position, preferTypeOnlyImport, useRequire, exportInfos, host, preferences).fixes;
         }
         function newImportInfoFromExistingSpecifier(_a, preferTypeOnlyImport, useRequire) {
             var declaration = _a.declaration, importKind = _a.importKind;
@@ -142835,29 +146084,39 @@
             var info = errorCode === ts.Diagnostics._0_refers_to_a_UMD_global_but_the_current_file_is_a_module_Consider_adding_an_import_instead.code
                 ? getFixesInfoForUMDImport(context, symbolToken)
                 : ts.isIdentifier(symbolToken) ? getFixesInfoForNonUMDImport(context, symbolToken, useAutoImportProvider) : undefined;
-            return info && __assign(__assign({}, info), { fixes: sortFixes(info.fixes, context.sourceFile, context.host) });
+            return info && __assign(__assign({}, info), { fixes: sortFixes(info.fixes, context.sourceFile, context.program, context.host, context.preferences) });
         }
-        function sortFixes(fixes, sourceFile, host) {
-            var allowsImportingSpecifier = ts.createPackageJsonImportFilter(sourceFile, host).allowsImportingSpecifier;
-            return ts.sort(fixes, function (a, b) { return ts.compareValues(a.kind, b.kind) || compareModuleSpecifiers(a, b, allowsImportingSpecifier); });
+        function sortFixes(fixes, sourceFile, program, host, preferences) {
+            var allowsImportingSpecifier = ts.createPackageJsonImportFilter(sourceFile, preferences, host).allowsImportingSpecifier;
+            return ts.sort(fixes, function (a, b) { return ts.compareValues(a.kind, b.kind) || compareModuleSpecifiers(a, b, sourceFile, program, allowsImportingSpecifier); });
         }
-        function getBestFix(fixes, sourceFile, host) {
+        function getBestFix(fixes, sourceFile, program, host, preferences) {
+            if (!ts.some(fixes))
+                return;
             // These will always be placed first if available, and are better than other kinds
             if (fixes[0].kind === 0 /* UseNamespace */ || fixes[0].kind === 2 /* AddToExisting */) {
                 return fixes[0];
             }
-            var allowsImportingSpecifier = ts.createPackageJsonImportFilter(sourceFile, host).allowsImportingSpecifier;
+            var allowsImportingSpecifier = ts.createPackageJsonImportFilter(sourceFile, preferences, host).allowsImportingSpecifier;
             return fixes.reduce(function (best, fix) {
-                return compareModuleSpecifiers(fix, best, allowsImportingSpecifier) === -1 /* LessThan */ ? fix : best;
+                return compareModuleSpecifiers(fix, best, sourceFile, program, allowsImportingSpecifier) === -1 /* LessThan */ ? fix : best;
             });
         }
-        function compareModuleSpecifiers(a, b, allowsImportingSpecifier) {
+        function compareModuleSpecifiers(a, b, importingFile, program, allowsImportingSpecifier) {
             if (a.kind !== 0 /* UseNamespace */ && b.kind !== 0 /* UseNamespace */) {
                 return ts.compareBooleans(allowsImportingSpecifier(a.moduleSpecifier), allowsImportingSpecifier(b.moduleSpecifier))
+                    || compareNodeCoreModuleSpecifiers(a.moduleSpecifier, b.moduleSpecifier, importingFile, program)
                     || ts.compareNumberOfDirectorySeparators(a.moduleSpecifier, b.moduleSpecifier);
             }
             return 0 /* EqualTo */;
         }
+        function compareNodeCoreModuleSpecifiers(a, b, importingFile, program) {
+            if (ts.startsWith(a, "node:") && !ts.startsWith(b, "node:"))
+                return ts.shouldUseUriStyleNodeCoreModules(importingFile, program) ? -1 /* LessThan */ : 1 /* GreaterThan */;
+            if (ts.startsWith(b, "node:") && !ts.startsWith(a, "node:"))
+                return ts.shouldUseUriStyleNodeCoreModules(importingFile, program) ? 1 /* GreaterThan */ : -1 /* LessThan */;
+            return 0 /* EqualTo */;
+        }
         function getFixesInfoForUMDImport(_a, token) {
             var sourceFile = _a.sourceFile, program = _a.program, host = _a.host, preferences = _a.preferences;
             var checker = program.getTypeChecker();
@@ -142866,7 +146125,7 @@
                 return undefined;
             var symbol = checker.getAliasedSymbol(umdSymbol);
             var symbolName = umdSymbol.name;
-            var exportInfos = [{ symbol: umdSymbol, moduleSymbol: symbol, exportKind: 3 /* UMD */, exportedSymbolIsTypeOnly: false, isFromPackageJson: false }];
+            var exportInfos = [{ symbol: umdSymbol, moduleSymbol: symbol, moduleFileName: undefined, exportKind: 3 /* UMD */, targetFlags: symbol.flags, isFromPackageJson: false }];
             var useRequire = shouldUseRequire(sourceFile, program);
             var fixes = getImportFixes(exportInfos, symbolName, ts.isIdentifier(token) ? token.getStart(sourceFile) : undefined, /*preferTypeOnlyImport*/ false, useRequire, program, sourceFile, host, preferences);
             return { fixes: fixes, symbolName: symbolName };
@@ -142882,17 +146141,21 @@
                 ? ts.tryCast(checker.resolveName(checker.getJsxNamespace(parent), ts.isJsxOpeningLikeElement(parent) ? token : parent, 111551 /* Value */, /*excludeGlobals*/ false), ts.isUMDExportSymbol)
                 : undefined;
         }
-        function getImportKind(importingFile, exportKind, compilerOptions) {
+        /**
+         * @param forceImportKeyword Indicates that the user has already typed `import`, so the result must start with `import`.
+         * (In other words, do not allow `const x = require("...")` for JS files.)
+         */
+        function getImportKind(importingFile, exportKind, compilerOptions, forceImportKeyword) {
             switch (exportKind) {
                 case 0 /* Named */: return 0 /* Named */;
                 case 1 /* Default */: return 1 /* Default */;
-                case 2 /* ExportEquals */: return getExportEqualsImportKind(importingFile, compilerOptions);
-                case 3 /* UMD */: return getUmdImportKind(importingFile, compilerOptions);
+                case 2 /* ExportEquals */: return getExportEqualsImportKind(importingFile, compilerOptions, !!forceImportKeyword);
+                case 3 /* UMD */: return getUmdImportKind(importingFile, compilerOptions, !!forceImportKeyword);
                 default: return ts.Debug.assertNever(exportKind);
             }
         }
         codefix.getImportKind = getImportKind;
-        function getUmdImportKind(importingFile, compilerOptions) {
+        function getUmdImportKind(importingFile, compilerOptions, forceImportKeyword) {
             // Import a synthetic `default` if enabled.
             if (ts.getAllowSyntheticDefaultImports(compilerOptions)) {
                 return 1 /* Default */;
@@ -142904,7 +146167,7 @@
                 case ts.ModuleKind.CommonJS:
                 case ts.ModuleKind.UMD:
                     if (ts.isInJSFile(importingFile)) {
-                        return ts.isExternalModule(importingFile) ? 2 /* Namespace */ : 3 /* CommonJS */;
+                        return ts.isExternalModule(importingFile) || forceImportKeyword ? 2 /* Namespace */ : 3 /* CommonJS */;
                     }
                     return 3 /* CommonJS */;
                 case ts.ModuleKind.System:
@@ -142927,7 +146190,7 @@
             ts.Debug.assert(symbolName !== "default" /* Default */, "'default' isn't a legal identifier and couldn't occur here");
             var preferTypeOnlyImport = compilerOptions.importsNotUsedAsValues === 2 /* Error */ && ts.isValidTypeOnlyAliasUseSite(symbolToken);
             var useRequire = shouldUseRequire(sourceFile, program);
-            var exportInfos = getExportInfos(symbolName, ts.getMeaningFromLocation(symbolToken), cancellationToken, sourceFile, program, useAutoImportProvider, host);
+            var exportInfos = getExportInfos(symbolName, ts.getMeaningFromLocation(symbolToken), cancellationToken, sourceFile, program, useAutoImportProvider, host, preferences);
             var fixes = ts.arrayFrom(ts.flatMapIterator(exportInfos.entries(), function (_a) {
                 var _ = _a[0], exportInfos = _a[1];
                 return getImportFixes(exportInfos, symbolName, symbolToken.getStart(sourceFile), preferTypeOnlyImport, useRequire, program, sourceFile, host, preferences);
@@ -142945,29 +146208,29 @@
             return symbolToken.text;
         }
         // Returns a map from an exported symbol's ID to a list of every way it's (re-)exported.
-        function getExportInfos(symbolName, currentTokenMeaning, cancellationToken, fromFile, program, useAutoImportProvider, host) {
+        function getExportInfos(symbolName, currentTokenMeaning, cancellationToken, fromFile, program, useAutoImportProvider, host, preferences) {
             var _a;
             // For each original symbol, keep all re-exports of that symbol together so we can call `getCodeActionsForImport` on the whole group at once.
             // Maps symbol id to info for modules providing that symbol (original export + re-exports).
             var originalSymbolToExportInfos = ts.createMultiMap();
-            var packageJsonFilter = ts.createPackageJsonImportFilter(fromFile, host);
+            var packageJsonFilter = ts.createPackageJsonImportFilter(fromFile, preferences, host);
             var moduleSpecifierCache = (_a = host.getModuleSpecifierCache) === null || _a === void 0 ? void 0 : _a.call(host);
             var getModuleSpecifierResolutionHost = ts.memoizeOne(function (isFromPackageJson) {
                 return ts.createModuleSpecifierResolutionHost(isFromPackageJson ? host.getPackageJsonAutoImportProvider() : program, host);
             });
             function addSymbol(moduleSymbol, toFile, exportedSymbol, exportKind, program, isFromPackageJson) {
                 var moduleSpecifierResolutionHost = getModuleSpecifierResolutionHost(isFromPackageJson);
-                if (toFile && ts.isImportableFile(program, fromFile, toFile, packageJsonFilter, moduleSpecifierResolutionHost, moduleSpecifierCache) ||
+                if (toFile && ts.isImportableFile(program, fromFile, toFile, preferences, packageJsonFilter, moduleSpecifierResolutionHost, moduleSpecifierCache) ||
                     !toFile && packageJsonFilter.allowsImportingAmbientModule(moduleSymbol, moduleSpecifierResolutionHost)) {
                     var checker = program.getTypeChecker();
-                    originalSymbolToExportInfos.add(ts.getUniqueSymbolId(exportedSymbol, checker).toString(), { symbol: exportedSymbol, moduleSymbol: moduleSymbol, exportKind: exportKind, exportedSymbolIsTypeOnly: isTypeOnlySymbol(exportedSymbol, checker), isFromPackageJson: isFromPackageJson });
+                    originalSymbolToExportInfos.add(ts.getUniqueSymbolId(exportedSymbol, checker).toString(), { symbol: exportedSymbol, moduleSymbol: moduleSymbol, moduleFileName: toFile === null || toFile === void 0 ? void 0 : toFile.fileName, exportKind: exportKind, targetFlags: ts.skipAlias(exportedSymbol, checker).flags, isFromPackageJson: isFromPackageJson });
                 }
             }
-            forEachExternalModuleToImportFrom(program, host, useAutoImportProvider, function (moduleSymbol, sourceFile, program, isFromPackageJson) {
+            ts.forEachExternalModuleToImportFrom(program, host, useAutoImportProvider, function (moduleSymbol, sourceFile, program, isFromPackageJson) {
                 var checker = program.getTypeChecker();
                 cancellationToken.throwIfCancellationRequested();
                 var compilerOptions = program.getCompilerOptions();
-                var defaultInfo = getDefaultLikeExportInfo(moduleSymbol, checker, compilerOptions);
+                var defaultInfo = ts.getDefaultLikeExportInfo(moduleSymbol, checker, compilerOptions);
                 if (defaultInfo && (defaultInfo.name === symbolName || moduleSymbolToValidIdentifier(moduleSymbol, compilerOptions.target) === symbolName) && symbolHasMeaning(defaultInfo.symbolForMeaning, currentTokenMeaning)) {
                     addSymbol(moduleSymbol, sourceFile, defaultInfo.symbol, defaultInfo.exportKind, program, isFromPackageJson);
                 }
@@ -142979,33 +146242,20 @@
             });
             return originalSymbolToExportInfos;
         }
-        function getDefaultLikeExportInfo(moduleSymbol, checker, compilerOptions) {
-            var exported = getDefaultLikeExportWorker(moduleSymbol, checker);
-            if (!exported)
-                return undefined;
-            var symbol = exported.symbol, exportKind = exported.exportKind;
-            var info = getDefaultExportInfoWorker(symbol, checker, compilerOptions);
-            return info && __assign({ symbol: symbol, exportKind: exportKind }, info);
-        }
-        function getDefaultLikeExportWorker(moduleSymbol, checker) {
-            var exportEquals = checker.resolveExternalModuleSymbol(moduleSymbol);
-            if (exportEquals !== moduleSymbol)
-                return { symbol: exportEquals, exportKind: 2 /* ExportEquals */ };
-            var defaultExport = checker.tryGetMemberInModuleExports("default" /* Default */, moduleSymbol);
-            if (defaultExport)
-                return { symbol: defaultExport, exportKind: 1 /* Default */ };
-        }
-        function getExportEqualsImportKind(importingFile, compilerOptions) {
+        function getExportEqualsImportKind(importingFile, compilerOptions, forceImportKeyword) {
             var allowSyntheticDefaults = ts.getAllowSyntheticDefaultImports(compilerOptions);
-            // 1. 'import =' will not work in es2015+, so the decision is between a default
+            var isJS = ts.isInJSFile(importingFile);
+            // 1. 'import =' will not work in es2015+ TS files, so the decision is between a default
             //    and a namespace import, based on allowSyntheticDefaultImports/esModuleInterop.
-            if (ts.getEmitModuleKind(compilerOptions) >= ts.ModuleKind.ES2015) {
+            if (!isJS && ts.getEmitModuleKind(compilerOptions) >= ts.ModuleKind.ES2015) {
                 return allowSyntheticDefaults ? 1 /* Default */ : 2 /* Namespace */;
             }
-            // 2. 'import =' will not work in JavaScript, so the decision is between a default
-            //    and const/require.
-            if (ts.isInJSFile(importingFile)) {
-                return ts.isExternalModule(importingFile) ? 1 /* Default */ : 3 /* CommonJS */;
+            // 2. 'import =' will not work in JavaScript, so the decision is between a default import,
+            //    a namespace import, and const/require.
+            if (isJS) {
+                return ts.isExternalModule(importingFile) || forceImportKeyword
+                    ? allowSyntheticDefaults ? 1 /* Default */ : 2 /* Namespace */
+                    : 3 /* CommonJS */;
             }
             // 3. At this point the most correct choice is probably 'import =', but people
             //    really hate that, so look to see if the importing file has any precedent
@@ -143021,41 +146271,6 @@
             //    allowSyntheticDefaultImports/esModuleInterop is enabled.
             return allowSyntheticDefaults ? 1 /* Default */ : 3 /* CommonJS */;
         }
-        function getDefaultExportInfoWorker(defaultExport, checker, compilerOptions) {
-            var localSymbol = ts.getLocalSymbolForExportDefault(defaultExport);
-            if (localSymbol)
-                return { symbolForMeaning: localSymbol, name: localSymbol.name };
-            var name = getNameForExportDefault(defaultExport);
-            if (name !== undefined)
-                return { symbolForMeaning: defaultExport, name: name };
-            if (defaultExport.flags & 2097152 /* Alias */) {
-                var aliased = checker.getImmediateAliasedSymbol(defaultExport);
-                if (aliased && aliased.parent) {
-                    // - `aliased` will be undefined if the module is exporting an unresolvable name,
-                    //    but we can still offer completions for it.
-                    // - `aliased.parent` will be undefined if the module is exporting `globalThis.something`,
-                    //    or another expression that resolves to a global.
-                    return getDefaultExportInfoWorker(aliased, checker, compilerOptions);
-                }
-            }
-            if (defaultExport.escapedName !== "default" /* Default */ &&
-                defaultExport.escapedName !== "export=" /* ExportEquals */) {
-                return { symbolForMeaning: defaultExport, name: defaultExport.getName() };
-            }
-            return { symbolForMeaning: defaultExport, name: ts.getNameForExportedSymbol(defaultExport, compilerOptions.target) };
-        }
-        function getNameForExportDefault(symbol) {
-            return symbol.declarations && ts.firstDefined(symbol.declarations, function (declaration) {
-                var _a;
-                if (ts.isExportAssignment(declaration)) {
-                    return (_a = ts.tryCast(ts.skipOuterExpressions(declaration.expression), ts.isIdentifier)) === null || _a === void 0 ? void 0 : _a.text;
-                }
-                else if (ts.isExportSpecifier(declaration)) {
-                    ts.Debug.assert(declaration.name.text === "default" /* Default */, "Expected the specifier to be a default export");
-                    return declaration.propertyName && declaration.propertyName.text;
-                }
-            });
-        }
         function codeActionForFix(context, sourceFile, symbolName, fix, quotePreference) {
             var diag;
             var changes = ts.textChanges.ChangeTracker.with(context, function (tracker) {
@@ -143091,7 +146306,7 @@
             }
         }
         function doAddExistingFix(changes, sourceFile, clause, defaultImport, namedImports, canUseTypeOnlyImport) {
-            if (clause.kind === 197 /* ObjectBindingPattern */) {
+            if (clause.kind === 199 /* ObjectBindingPattern */) {
                 if (defaultImport) {
                     addElementToBindingPattern(clause, defaultImport, "default");
                 }
@@ -143218,31 +146433,6 @@
             var declarations = _a.declarations;
             return ts.some(declarations, function (decl) { return !!(ts.getMeaningFromDeclaration(decl) & meaning); });
         }
-        function forEachExternalModuleToImportFrom(program, host, useAutoImportProvider, cb) {
-            var _a, _b;
-            forEachExternalModule(program.getTypeChecker(), program.getSourceFiles(), function (module, file) { return cb(module, file, program, /*isFromPackageJson*/ false); });
-            var autoImportProvider = useAutoImportProvider && ((_a = host.getPackageJsonAutoImportProvider) === null || _a === void 0 ? void 0 : _a.call(host));
-            if (autoImportProvider) {
-                var start = ts.timestamp();
-                forEachExternalModule(autoImportProvider.getTypeChecker(), autoImportProvider.getSourceFiles(), function (module, file) { return cb(module, file, autoImportProvider, /*isFromPackageJson*/ true); });
-                (_b = host.log) === null || _b === void 0 ? void 0 : _b.call(host, "forEachExternalModuleToImportFrom autoImportProvider: " + (ts.timestamp() - start));
-            }
-        }
-        codefix.forEachExternalModuleToImportFrom = forEachExternalModuleToImportFrom;
-        function forEachExternalModule(checker, allSourceFiles, cb) {
-            for (var _i = 0, _a = checker.getAmbientModules(); _i < _a.length; _i++) {
-                var ambient = _a[_i];
-                if (!ts.stringContains(ambient.name, "*")) {
-                    cb(ambient, /*sourceFile*/ undefined);
-                }
-            }
-            for (var _b = 0, allSourceFiles_1 = allSourceFiles; _b < allSourceFiles_1.length; _b++) {
-                var sourceFile = allSourceFiles_1[_b];
-                if (ts.isExternalOrCommonJsModule(sourceFile)) {
-                    cb(checker.getMergedSymbol(sourceFile.symbol), sourceFile);
-                }
-            }
-        }
         function moduleSymbolToValidIdentifier(moduleSymbol, target) {
             return moduleSpecifierToValidIdentifier(ts.removeFileExtension(ts.stripQuotes(moduleSymbol.name)), target);
         }
@@ -143353,28 +146543,30 @@
             var classElement = findContainerClassElementLike(sourceFile, pos);
             var modifiers = classElement.modifiers || ts.emptyArray;
             var staticModifier = ts.find(modifiers, ts.isStaticModifier);
+            var abstractModifier = ts.find(modifiers, ts.isAbstractModifier);
             var accessibilityModifier = ts.find(modifiers, function (m) { return ts.isAccessibilityModifier(m.kind); });
-            var modifierPos = staticModifier ? staticModifier.end :
-                accessibilityModifier ? accessibilityModifier.end :
-                    classElement.decorators ? ts.skipTrivia(sourceFile.text, classElement.decorators.end) : classElement.getStart(sourceFile);
-            var options = accessibilityModifier || staticModifier ? { prefix: " " } : { suffix: " " };
-            changeTracker.insertModifierAt(sourceFile, modifierPos, 156 /* OverrideKeyword */, options);
+            var modifierPos = abstractModifier ? abstractModifier.end :
+                staticModifier ? staticModifier.end :
+                    accessibilityModifier ? accessibilityModifier.end :
+                        classElement.decorators ? ts.skipTrivia(sourceFile.text, classElement.decorators.end) : classElement.getStart(sourceFile);
+            var options = accessibilityModifier || staticModifier || abstractModifier ? { prefix: " " } : { suffix: " " };
+            changeTracker.insertModifierAt(sourceFile, modifierPos, 157 /* OverrideKeyword */, options);
         }
         function doRemoveOverrideModifierChange(changeTracker, sourceFile, pos) {
             var classElement = findContainerClassElementLike(sourceFile, pos);
-            var overrideModifier = classElement.modifiers && ts.find(classElement.modifiers, function (modifier) { return modifier.kind === 156 /* OverrideKeyword */; });
+            var overrideModifier = classElement.modifiers && ts.find(classElement.modifiers, function (modifier) { return modifier.kind === 157 /* OverrideKeyword */; });
             ts.Debug.assertIsDefined(overrideModifier);
             changeTracker.deleteModifier(sourceFile, overrideModifier);
         }
         function isClassElementLikeHasJSDoc(node) {
             switch (node.kind) {
-                case 167 /* Constructor */:
-                case 164 /* PropertyDeclaration */:
-                case 166 /* MethodDeclaration */:
-                case 168 /* GetAccessor */:
-                case 169 /* SetAccessor */:
+                case 169 /* Constructor */:
+                case 165 /* PropertyDeclaration */:
+                case 167 /* MethodDeclaration */:
+                case 170 /* GetAccessor */:
+                case 171 /* SetAccessor */:
                     return true;
-                case 161 /* Parameter */:
+                case 162 /* Parameter */:
                     return ts.isParameterPropertyDeclaration(node, node.parent);
                 default:
                     return false;
@@ -143450,12 +146642,12 @@
         });
         function doChange(changes, sourceFile, pos, checker) {
             var token = ts.getTokenAtPosition(sourceFile, pos);
-            ts.Debug.assert(token.kind === 107 /* ThisKeyword */);
+            ts.Debug.assert(token.kind === 108 /* ThisKeyword */);
             var fn = ts.getThisContainer(token, /*includeArrowFunctions*/ false);
             if (!ts.isFunctionDeclaration(fn) && !ts.isFunctionExpression(fn))
                 return undefined;
             if (!ts.isSourceFile(ts.getThisContainer(fn, /*includeArrowFunctions*/ false))) { // 'this' is defined outside, convert to arrow function
-                var fnKeyword = ts.Debug.assertDefined(ts.findChildOfKind(fn, 97 /* FunctionKeyword */, sourceFile));
+                var fnKeyword = ts.Debug.assertDefined(ts.findChildOfKind(fn, 98 /* FunctionKeyword */, sourceFile));
                 var name = fn.name;
                 var body = ts.Debug.assertDefined(fn.body); // Should be defined because the function contained a 'this' expression
                 if (ts.isFunctionExpression(fn)) {
@@ -143474,7 +146666,7 @@
                 else {
                     // `function f() {}` => `const f = () => {}`
                     // `name` should be defined because we only do this in inner contexts, and name is only undefined for `export default function() {}`.
-                    changes.replaceNode(sourceFile, fnKeyword, ts.factory.createToken(84 /* ConstKeyword */));
+                    changes.replaceNode(sourceFile, fnKeyword, ts.factory.createToken(85 /* ConstKeyword */));
                     changes.insertText(sourceFile, name.end, " = ");
                     changes.insertText(sourceFile, body.pos, " =>");
                     return [ts.Diagnostics.Convert_function_declaration_0_to_arrow_function, name.text];
@@ -143505,7 +146697,7 @@
         });
         function getNamedTupleMember(sourceFile, pos) {
             var token = ts.getTokenAtPosition(sourceFile, pos);
-            return ts.findAncestor(token, function (t) { return t.kind === 193 /* NamedTupleMember */; });
+            return ts.findAncestor(token, function (t) { return t.kind === 195 /* NamedTupleMember */; });
         }
         function doChange(changes, sourceFile, namedTupleMember) {
             if (!namedTupleMember) {
@@ -143514,11 +146706,11 @@
             var unwrappedType = namedTupleMember.type;
             var sawOptional = false;
             var sawRest = false;
-            while (unwrappedType.kind === 181 /* OptionalType */ || unwrappedType.kind === 182 /* RestType */ || unwrappedType.kind === 187 /* ParenthesizedType */) {
-                if (unwrappedType.kind === 181 /* OptionalType */) {
+            while (unwrappedType.kind === 183 /* OptionalType */ || unwrappedType.kind === 184 /* RestType */ || unwrappedType.kind === 189 /* ParenthesizedType */) {
+                if (unwrappedType.kind === 183 /* OptionalType */) {
                     sawOptional = true;
                 }
-                else if (unwrappedType.kind === 182 /* RestType */) {
+                else if (unwrappedType.kind === 184 /* RestType */) {
                     sawRest = true;
                 }
                 unwrappedType = unwrappedType.type;
@@ -143539,10 +146731,13 @@
         var fixId = "fixSpelling";
         var errorCodes = [
             ts.Diagnostics.Property_0_does_not_exist_on_type_1_Did_you_mean_2.code,
+            ts.Diagnostics.Property_0_may_not_exist_on_type_1_Did_you_mean_2.code,
             ts.Diagnostics.Cannot_find_name_0_Did_you_mean_1.code,
+            ts.Diagnostics.Could_not_find_name_0_Did_you_mean_1.code,
             ts.Diagnostics.Cannot_find_name_0_Did_you_mean_the_instance_member_this_0.code,
             ts.Diagnostics.Cannot_find_name_0_Did_you_mean_the_static_member_1_0.code,
             ts.Diagnostics._0_has_no_exported_member_named_1_Did_you_mean_2.code,
+            ts.Diagnostics.This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0_Did_you_mean_1.code,
             // for JSX class components
             ts.Diagnostics.No_overload_matches_this_call.code,
             // for JSX FC
@@ -143609,6 +146804,14 @@
                 var props = checker.getContextualTypeForArgumentAtIndex(tag, 0);
                 suggestedSymbol = checker.getSuggestedSymbolForNonexistentJSXAttribute(node, props);
             }
+            else if (ts.hasSyntacticModifier(parent, 16384 /* Override */) && ts.isClassElement(parent) && parent.name === node) {
+                var baseDeclaration = ts.findAncestor(node, ts.isClassLike);
+                var baseTypeNode = baseDeclaration ? ts.getEffectiveBaseTypeNode(baseDeclaration) : undefined;
+                var baseType = baseTypeNode ? checker.getTypeAtLocation(baseTypeNode) : undefined;
+                if (baseType) {
+                    suggestedSymbol = checker.getSuggestedSymbolForNonexistentClassMember(ts.getTextOfNode(node), baseType);
+                }
+            }
             else {
                 var meaning = ts.getMeaningFromLocation(node);
                 var name = ts.getTextOfNode(node);
@@ -143716,7 +146919,7 @@
             var member = checker.createSymbol(4 /* Property */, label.escapedText);
             member.type = checker.getTypeAtLocation(expression);
             var members = ts.createSymbolTable([member]);
-            return checker.createAnonymousType(/*symbol*/ undefined, members, [], [], /*stringIndexInfo*/ undefined, /*numberIndexInfo*/ undefined);
+            return checker.createAnonymousType(/*symbol*/ undefined, members, [], [], []);
         }
         function getFixInfo(checker, declaration, expectType, isFunctionType) {
             if (!declaration.body || !ts.isBlock(declaration.body) || ts.length(declaration.body.statements) !== 1)
@@ -143778,9 +146981,7 @@
                     var newSig = checker.createSignature(declaration, sig.typeParameters, sig.thisParameter, sig.parameters, exprType, 
                     /*typePredicate*/ undefined, sig.minArgumentCount, sig.flags);
                     exprType = checker.createAnonymousType(
-                    /*symbol*/ undefined, ts.createSymbolTable(), [newSig], [], 
-                    /*stringIndexInfo*/ undefined, 
-                    /*numberIndexInfo*/ undefined);
+                    /*symbol*/ undefined, ts.createSymbolTable(), [newSig], [], []);
                 }
                 else {
                     exprType = checker.getAnyType();
@@ -143818,19 +147019,19 @@
         }
         function getVariableLikeInitializer(declaration) {
             switch (declaration.kind) {
-                case 250 /* VariableDeclaration */:
-                case 161 /* Parameter */:
-                case 199 /* BindingElement */:
-                case 164 /* PropertyDeclaration */:
-                case 289 /* PropertyAssignment */:
+                case 252 /* VariableDeclaration */:
+                case 162 /* Parameter */:
+                case 201 /* BindingElement */:
+                case 165 /* PropertyDeclaration */:
+                case 291 /* PropertyAssignment */:
                     return declaration.initializer;
-                case 281 /* JsxAttribute */:
+                case 283 /* JsxAttribute */:
                     return declaration.initializer && (ts.isJsxExpression(declaration.initializer) ? declaration.initializer.expression : undefined);
-                case 290 /* ShorthandPropertyAssignment */:
-                case 163 /* PropertySignature */:
-                case 292 /* EnumMember */:
-                case 337 /* JSDocPropertyTag */:
-                case 330 /* JSDocParameterTag */:
+                case 292 /* ShorthandPropertyAssignment */:
+                case 164 /* PropertySignature */:
+                case 294 /* EnumMember */:
+                case 342 /* JSDocPropertyTag */:
+                case 335 /* JSDocParameterTag */:
                     return undefined;
             }
         }
@@ -143872,6 +147073,8 @@
     var codefix;
     (function (codefix) {
         var fixMissingMember = "fixMissingMember";
+        var fixMissingProperties = "fixMissingProperties";
+        var fixMissingAttributes = "fixMissingAttributes";
         var fixMissingFunctionDeclaration = "fixMissingFunctionDeclaration";
         var errorCodes = [
             ts.Diagnostics.Property_0_does_not_exist_on_type_1.code,
@@ -143889,6 +147092,14 @@
                 if (!info) {
                     return undefined;
                 }
+                if (info.kind === 3 /* ObjectLiteral */) {
+                    var changes = ts.textChanges.ChangeTracker.with(context, function (t) { return addObjectLiteralProperties(t, context, info); });
+                    return [codefix.createCodeFixAction(fixMissingProperties, changes, ts.Diagnostics.Add_missing_properties, fixMissingProperties, ts.Diagnostics.Add_all_missing_properties)];
+                }
+                if (info.kind === 4 /* JsxAttributes */) {
+                    var changes = ts.textChanges.ChangeTracker.with(context, function (t) { return addJsxAttributes(t, context, info); });
+                    return [codefix.createCodeFixAction(fixMissingAttributes, changes, ts.Diagnostics.Add_missing_attributes, fixMissingAttributes, ts.Diagnostics.Add_all_missing_attributes)];
+                }
                 if (info.kind === 2 /* Function */) {
                     var changes = ts.textChanges.ChangeTracker.with(context, function (t) { return addFunctionDeclaration(t, context, info); });
                     return [codefix.createCodeFixAction(fixMissingFunctionDeclaration, changes, [ts.Diagnostics.Add_missing_function_declaration_0, info.token.text], fixMissingFunctionDeclaration, ts.Diagnostics.Add_all_missing_function_declarations)];
@@ -143899,7 +147110,7 @@
                 }
                 return ts.concatenate(getActionsForMissingMethodDeclaration(context, info), getActionsForMissingMemberDeclaration(context, info));
             },
-            fixIds: [fixMissingMember, fixMissingFunctionDeclaration],
+            fixIds: [fixMissingMember, fixMissingFunctionDeclaration, fixMissingProperties, fixMissingAttributes],
             getAllCodeActions: function (context) {
                 var program = context.program, fixId = context.fixId;
                 var checker = program.getTypeChecker();
@@ -143911,10 +147122,14 @@
                         if (!info || !ts.addToSeen(seen, ts.getNodeId(info.parentDeclaration) + "#" + info.token.text)) {
                             return;
                         }
-                        if (fixId === fixMissingFunctionDeclaration) {
-                            if (info.kind === 2 /* Function */) {
-                                addFunctionDeclaration(changes, context, info);
-                            }
+                        if (fixId === fixMissingFunctionDeclaration && info.kind === 2 /* Function */) {
+                            addFunctionDeclaration(changes, context, info);
+                        }
+                        else if (fixId === fixMissingProperties && info.kind === 3 /* ObjectLiteral */) {
+                            addObjectLiteralProperties(changes, context, info);
+                        }
+                        else if (fixId === fixMissingAttributes && info.kind === 4 /* JsxAttributes */) {
+                            addJsxAttributes(changes, context, info);
                         }
                         else {
                             if (info.kind === 0 /* Enum */) {
@@ -143956,8 +147171,8 @@
                                 }
                             }
                         };
-                        for (var _i = 0, infos_2 = infos; _i < infos_2.length; _i++) {
-                            var info = infos_2[_i];
+                        for (var _i = 0, infos_1 = infos; _i < infos_1.length; _i++) {
+                            var info = infos_1[_i];
                             _loop_14(info);
                         }
                     });
@@ -143969,6 +147184,8 @@
             InfoKind[InfoKind["Enum"] = 0] = "Enum";
             InfoKind[InfoKind["ClassOrInterface"] = 1] = "ClassOrInterface";
             InfoKind[InfoKind["Function"] = 2] = "Function";
+            InfoKind[InfoKind["ObjectLiteral"] = 3] = "ObjectLiteral";
+            InfoKind[InfoKind["JsxAttributes"] = 4] = "JsxAttributes";
         })(InfoKind || (InfoKind = {}));
         function getInfo(sourceFile, tokenPos, checker, program) {
             // The identifier of the missing property. eg:
@@ -143979,6 +147196,18 @@
                 return undefined;
             }
             var parent = token.parent;
+            if (ts.isIdentifier(token) && ts.hasInitializer(parent) && parent.initializer && ts.isObjectLiteralExpression(parent.initializer)) {
+                var properties = ts.arrayFrom(checker.getUnmatchedProperties(checker.getTypeAtLocation(parent.initializer), checker.getTypeAtLocation(token), /* requireOptionalProperties */ false, /* matchDiscriminantProperties */ false));
+                if (ts.length(properties)) {
+                    return { kind: 3 /* ObjectLiteral */, token: token, properties: properties, parentDeclaration: parent.initializer };
+                }
+            }
+            if (ts.isIdentifier(token) && ts.isJsxOpeningLikeElement(token.parent)) {
+                var attributes = getUnmatchedAttributes(checker, token.parent);
+                if (ts.length(attributes)) {
+                    return { kind: 4 /* JsxAttributes */, token: token, attributes: attributes, parentDeclaration: token.parent };
+                }
+            }
             if (ts.isIdentifier(token) && ts.isCallExpression(parent)) {
                 return { kind: 2 /* Function */, token: token, call: parent, sourceFile: sourceFile, modifierFlags: 0 /* None */, parentDeclaration: sourceFile };
             }
@@ -143993,14 +147222,14 @@
             if (ts.isIdentifier(token) && ts.isCallExpression(parent.parent)) {
                 var moduleDeclaration = ts.find(symbol.declarations, ts.isModuleDeclaration);
                 var moduleDeclarationSourceFile = moduleDeclaration === null || moduleDeclaration === void 0 ? void 0 : moduleDeclaration.getSourceFile();
-                if (moduleDeclaration && moduleDeclarationSourceFile && !program.isSourceFileFromExternalLibrary(moduleDeclarationSourceFile)) {
+                if (moduleDeclaration && moduleDeclarationSourceFile && !isSourceFileFromLibrary(program, moduleDeclarationSourceFile)) {
                     return { kind: 2 /* Function */, token: token, call: parent.parent, sourceFile: sourceFile, modifierFlags: 1 /* Export */, parentDeclaration: moduleDeclaration };
                 }
                 var moduleSourceFile = ts.find(symbol.declarations, ts.isSourceFile);
                 if (sourceFile.commonJsModuleIndicator) {
                     return;
                 }
-                if (moduleSourceFile && !program.isSourceFileFromExternalLibrary(moduleSourceFile)) {
+                if (moduleSourceFile && !isSourceFileFromLibrary(program, moduleSourceFile)) {
                     return { kind: 2 /* Function */, token: token, call: parent.parent, sourceFile: moduleSourceFile, modifierFlags: 1 /* Export */, parentDeclaration: moduleSourceFile };
                 }
             }
@@ -144011,7 +147240,7 @@
             }
             // Prefer to change the class instead of the interface if they are merged
             var classOrInterface = classDeclaration || ts.find(symbol.declarations, ts.isInterfaceDeclaration);
-            if (classOrInterface && !program.isSourceFileFromExternalLibrary(classOrInterface.getSourceFile())) {
+            if (classOrInterface && !isSourceFileFromLibrary(program, classOrInterface.getSourceFile())) {
                 var makeStatic = (leftExpressionType.target || leftExpressionType) !== checker.getDeclaredTypeOfSymbol(symbol);
                 if (makeStatic && (ts.isPrivateIdentifier(token) || ts.isInterfaceDeclaration(classOrInterface))) {
                     return undefined;
@@ -144023,11 +147252,14 @@
                 return { kind: 1 /* ClassOrInterface */, token: token, call: call, modifierFlags: modifierFlags, parentDeclaration: classOrInterface, declSourceFile: declSourceFile, isJSFile: isJSFile };
             }
             var enumDeclaration = ts.find(symbol.declarations, ts.isEnumDeclaration);
-            if (enumDeclaration && !ts.isPrivateIdentifier(token) && !program.isSourceFileFromExternalLibrary(enumDeclaration.getSourceFile())) {
+            if (enumDeclaration && !ts.isPrivateIdentifier(token) && !isSourceFileFromLibrary(program, enumDeclaration.getSourceFile())) {
                 return { kind: 0 /* Enum */, token: token, parentDeclaration: enumDeclaration };
             }
             return undefined;
         }
+        function isSourceFileFromLibrary(program, node) {
+            return program.isSourceFileFromExternalLibrary(node) || program.isSourceFileDefaultLibrary(node);
+        }
         function getActionsForMissingMemberDeclaration(context, info) {
             return info.isJSFile ? ts.singleElementArray(createActionForAddMissingMemberInJavascriptFile(context, info)) :
                 createActionsForAddMissingMemberInTypeScriptFile(context, info);
@@ -144048,7 +147280,7 @@
         function addMissingMemberInJs(changeTracker, declSourceFile, classDeclaration, token, makeStatic) {
             var tokenName = token.text;
             if (makeStatic) {
-                if (classDeclaration.kind === 222 /* ClassExpression */) {
+                if (classDeclaration.kind === 224 /* ClassExpression */) {
                     return;
                 }
                 var className = classDeclaration.name.getText();
@@ -144080,7 +147312,7 @@
             }
         }
         function initializePropertyToUndefined(obj, propertyName) {
-            return ts.factory.createExpressionStatement(ts.factory.createAssignment(ts.factory.createPropertyAccessExpression(obj, propertyName), ts.factory.createIdentifier("undefined")));
+            return ts.factory.createExpressionStatement(ts.factory.createAssignment(ts.factory.createPropertyAccessExpression(obj, propertyName), createUndefined()));
         }
         function createActionsForAddMissingMemberInTypeScriptFile(context, _a) {
             var parentDeclaration = _a.parentDeclaration, declSourceFile = _a.declSourceFile, modifierFlags = _a.modifierFlags, token = _a.token;
@@ -144100,7 +147332,7 @@
         }
         function getTypeNode(checker, classDeclaration, token) {
             var typeNode;
-            if (token.parent.parent.kind === 217 /* BinaryExpression */) {
+            if (token.parent.parent.kind === 219 /* BinaryExpression */) {
                 var binaryExpression = token.parent.parent;
                 var otherExpression = token.parent === binaryExpression.left ? binaryExpression.right : binaryExpression.left;
                 var widenedType = checker.getWidenedType(checker.getBaseTypeOfLiteralType(checker.getTypeAtLocation(otherExpression)));
@@ -144110,7 +147342,7 @@
                 var contextualType = checker.getContextualType(token.parent);
                 typeNode = contextualType ? checker.typeToTypeNode(contextualType, /*enclosingDeclaration*/ undefined, 1 /* NoTruncation */) : undefined;
             }
-            return typeNode || ts.factory.createKeywordTypeNode(128 /* AnyKeyword */);
+            return typeNode || ts.factory.createKeywordTypeNode(129 /* AnyKeyword */);
         }
         function addPropertyDeclaration(changeTracker, declSourceFile, classDeclaration, tokenName, typeNode, modifierFlags) {
             var property = ts.factory.createPropertyDeclaration(
@@ -144139,7 +147371,7 @@
         }
         function createAddIndexSignatureAction(context, declSourceFile, classDeclaration, tokenName, typeNode) {
             // Index signatures cannot have the static modifier.
-            var stringTypeNode = ts.factory.createKeywordTypeNode(147 /* StringKeyword */);
+            var stringTypeNode = ts.factory.createKeywordTypeNode(148 /* StringKeyword */);
             var indexingParameter = ts.factory.createParameterDeclaration(
             /*decorators*/ undefined, 
             /*modifiers*/ undefined, 
@@ -144172,7 +147404,7 @@
         }
         function addMethodDeclaration(context, changes, callExpression, name, modifierFlags, parentDeclaration, sourceFile) {
             var importAdder = codefix.createImportAdder(sourceFile, context.program, context.preferences, context.host);
-            var methodDeclaration = codefix.createSignatureDeclarationFromCallExpression(166 /* MethodDeclaration */, context, importAdder, callExpression, name, modifierFlags, parentDeclaration);
+            var methodDeclaration = codefix.createSignatureDeclarationFromCallExpression(167 /* MethodDeclaration */, context, importAdder, callExpression, name, modifierFlags, parentDeclaration);
             var containingMethodDeclaration = ts.findAncestor(callExpression, function (n) { return ts.isMethodDeclaration(n) || ts.isConstructorDeclaration(n); });
             if (containingMethodDeclaration && containingMethodDeclaration.parent === parentDeclaration) {
                 changes.insertNodeAfter(sourceFile, containingMethodDeclaration, methodDeclaration);
@@ -144201,9 +147433,136 @@
         }
         function addFunctionDeclaration(changes, context, info) {
             var importAdder = codefix.createImportAdder(context.sourceFile, context.program, context.preferences, context.host);
-            var functionDeclaration = codefix.createSignatureDeclarationFromCallExpression(252 /* FunctionDeclaration */, context, importAdder, info.call, ts.idText(info.token), info.modifierFlags, info.parentDeclaration);
+            var functionDeclaration = codefix.createSignatureDeclarationFromCallExpression(254 /* FunctionDeclaration */, context, importAdder, info.call, ts.idText(info.token), info.modifierFlags, info.parentDeclaration);
             changes.insertNodeAtEndOfScope(info.sourceFile, info.parentDeclaration, functionDeclaration);
         }
+        function addJsxAttributes(changes, context, info) {
+            var importAdder = codefix.createImportAdder(context.sourceFile, context.program, context.preferences, context.host);
+            var quotePreference = ts.getQuotePreference(context.sourceFile, context.preferences);
+            var checker = context.program.getTypeChecker();
+            var jsxAttributesNode = info.parentDeclaration.attributes;
+            var hasSpreadAttribute = ts.some(jsxAttributesNode.properties, ts.isJsxSpreadAttribute);
+            var attrs = ts.map(info.attributes, function (attr) {
+                var value = attr.valueDeclaration ? tryGetValueFromType(context, checker, importAdder, quotePreference, checker.getTypeAtLocation(attr.valueDeclaration)) : createUndefined();
+                return ts.factory.createJsxAttribute(ts.factory.createIdentifier(attr.name), ts.factory.createJsxExpression(/*dotDotDotToken*/ undefined, value));
+            });
+            var jsxAttributes = ts.factory.createJsxAttributes(hasSpreadAttribute ? __spreadArray(__spreadArray([], attrs, true), jsxAttributesNode.properties, true) : __spreadArray(__spreadArray([], jsxAttributesNode.properties, true), attrs, true));
+            var options = { prefix: jsxAttributesNode.pos === jsxAttributesNode.end ? " " : undefined };
+            changes.replaceNode(context.sourceFile, jsxAttributesNode, jsxAttributes, options);
+        }
+        function addObjectLiteralProperties(changes, context, info) {
+            var importAdder = codefix.createImportAdder(context.sourceFile, context.program, context.preferences, context.host);
+            var quotePreference = ts.getQuotePreference(context.sourceFile, context.preferences);
+            var checker = context.program.getTypeChecker();
+            var props = ts.map(info.properties, function (prop) {
+                var initializer = prop.valueDeclaration ? tryGetValueFromType(context, checker, importAdder, quotePreference, checker.getTypeAtLocation(prop.valueDeclaration)) : createUndefined();
+                return ts.factory.createPropertyAssignment(prop.name, initializer);
+            });
+            changes.replaceNode(context.sourceFile, info.parentDeclaration, ts.factory.createObjectLiteralExpression(__spreadArray(__spreadArray([], info.parentDeclaration.properties, true), props, true), /*multiLine*/ true));
+        }
+        function tryGetValueFromType(context, checker, importAdder, quotePreference, type) {
+            if (type.flags & 3 /* AnyOrUnknown */) {
+                return createUndefined();
+            }
+            if (type.flags & (4 /* String */ | 134217728 /* TemplateLiteral */)) {
+                return ts.factory.createStringLiteral("", /* isSingleQuote */ quotePreference === 0 /* Single */);
+            }
+            if (type.flags & 8 /* Number */) {
+                return ts.factory.createNumericLiteral(0);
+            }
+            if (type.flags & 64 /* BigInt */) {
+                return ts.factory.createBigIntLiteral("0n");
+            }
+            if (type.flags & 16 /* Boolean */) {
+                return ts.factory.createFalse();
+            }
+            if (type.flags & 1056 /* EnumLike */) {
+                var enumMember = type.symbol.exports ? ts.firstOrUndefined(ts.arrayFrom(type.symbol.exports.values())) : type.symbol;
+                var name = checker.symbolToExpression(type.symbol.parent ? type.symbol.parent : type.symbol, 111551 /* Value */, /*enclosingDeclaration*/ undefined, /*flags*/ undefined);
+                return enumMember === undefined || name === undefined ? ts.factory.createNumericLiteral(0) : ts.factory.createPropertyAccessExpression(name, checker.symbolToString(enumMember));
+            }
+            if (type.flags & 256 /* NumberLiteral */) {
+                return ts.factory.createNumericLiteral(type.value);
+            }
+            if (type.flags & 2048 /* BigIntLiteral */) {
+                return ts.factory.createBigIntLiteral(type.value);
+            }
+            if (type.flags & 128 /* StringLiteral */) {
+                return ts.factory.createStringLiteral(type.value, /* isSingleQuote */ quotePreference === 0 /* Single */);
+            }
+            if (type.flags & 512 /* BooleanLiteral */) {
+                return (type === checker.getFalseType() || type === checker.getFalseType(/*fresh*/ true)) ? ts.factory.createFalse() : ts.factory.createTrue();
+            }
+            if (type.flags & 65536 /* Null */) {
+                return ts.factory.createNull();
+            }
+            if (type.flags & 1048576 /* Union */) {
+                var expression = ts.firstDefined(type.types, function (t) { return tryGetValueFromType(context, checker, importAdder, quotePreference, t); });
+                return expression !== null && expression !== void 0 ? expression : createUndefined();
+            }
+            if (checker.isArrayLikeType(type)) {
+                return ts.factory.createArrayLiteralExpression();
+            }
+            if (isObjectLiteralType(type)) {
+                var props = ts.map(checker.getPropertiesOfType(type), function (prop) {
+                    var initializer = prop.valueDeclaration ? tryGetValueFromType(context, checker, importAdder, quotePreference, checker.getTypeAtLocation(prop.valueDeclaration)) : createUndefined();
+                    return ts.factory.createPropertyAssignment(prop.name, initializer);
+                });
+                return ts.factory.createObjectLiteralExpression(props, /*multiLine*/ true);
+            }
+            if (ts.getObjectFlags(type) & 16 /* Anonymous */) {
+                var decl = ts.find(type.symbol.declarations || ts.emptyArray, ts.or(ts.isFunctionTypeNode, ts.isMethodSignature, ts.isMethodDeclaration));
+                if (decl === undefined)
+                    return createUndefined();
+                var signature = checker.getSignaturesOfType(type, 0 /* Call */);
+                if (signature === undefined)
+                    return createUndefined();
+                var func = codefix.createSignatureDeclarationFromSignature(211 /* FunctionExpression */, context, quotePreference, signature[0], codefix.createStubbedBody(ts.Diagnostics.Function_not_implemented.message, quotePreference), /*name*/ undefined, /*modifiers*/ undefined, /*optional*/ undefined, /*enclosingDeclaration*/ undefined, importAdder);
+                return func !== null && func !== void 0 ? func : createUndefined();
+            }
+            if (ts.getObjectFlags(type) & 1 /* Class */) {
+                var classDeclaration = ts.getClassLikeDeclarationOfSymbol(type.symbol);
+                if (classDeclaration === undefined || ts.hasAbstractModifier(classDeclaration))
+                    return createUndefined();
+                var constructorDeclaration = ts.getFirstConstructorWithBody(classDeclaration);
+                if (constructorDeclaration && ts.length(constructorDeclaration.parameters))
+                    return createUndefined();
+                return ts.factory.createNewExpression(ts.factory.createIdentifier(type.symbol.name), /*typeArguments*/ undefined, /*argumentsArray*/ undefined);
+            }
+            return createUndefined();
+        }
+        function createUndefined() {
+            return ts.factory.createIdentifier("undefined");
+        }
+        function isObjectLiteralType(type) {
+            return (type.flags & 524288 /* Object */) &&
+                ((ts.getObjectFlags(type) & 128 /* ObjectLiteral */) || (type.symbol && ts.tryCast(ts.singleOrUndefined(type.symbol.declarations), ts.isTypeLiteralNode)));
+        }
+        function getUnmatchedAttributes(checker, source) {
+            var attrsType = checker.getContextualType(source.attributes);
+            if (attrsType === undefined)
+                return ts.emptyArray;
+            var targetProps = attrsType.getProperties();
+            if (!ts.length(targetProps))
+                return ts.emptyArray;
+            var seenNames = new ts.Set();
+            for (var _i = 0, _a = source.attributes.properties; _i < _a.length; _i++) {
+                var sourceProp = _a[_i];
+                if (ts.isJsxAttribute(sourceProp)) {
+                    seenNames.add(sourceProp.name.escapedText);
+                }
+                if (ts.isJsxSpreadAttribute(sourceProp)) {
+                    var type = checker.getTypeAtLocation(sourceProp.expression);
+                    for (var _b = 0, _c = type.getProperties(); _b < _c.length; _b++) {
+                        var prop = _c[_b];
+                        seenNames.add(prop.escapedName);
+                    }
+                }
+            }
+            return ts.filter(targetProps, function (targetProp) {
+                return !((targetProp.flags & 16777216 /* Optional */ || ts.getCheckFlags(targetProp) & 48 /* Partial */) || seenNames.has(targetProp.escapedName));
+            });
+        }
     })(codefix = ts.codefix || (ts.codefix = {}));
 })(ts || (ts = {}));
 /* @internal */
@@ -144397,7 +147756,7 @@
         }
         function getNodes(sourceFile, pos) {
             var token = ts.getTokenAtPosition(sourceFile, pos);
-            if (token.kind !== 107 /* ThisKeyword */)
+            if (token.kind !== 108 /* ThisKeyword */)
                 return undefined;
             var constructor = ts.getContainingFunction(token);
             var superCall = findSuperCall(constructor.body);
@@ -144620,14 +147979,14 @@
             var token = ts.getTokenAtPosition(sourceFile, pos);
             var heritageClauses = ts.getContainingClass(token).heritageClauses;
             var extendsToken = heritageClauses[0].getFirstToken();
-            return extendsToken.kind === 93 /* ExtendsKeyword */ ? { extendsToken: extendsToken, heritageClauses: heritageClauses } : undefined;
+            return extendsToken.kind === 94 /* ExtendsKeyword */ ? { extendsToken: extendsToken, heritageClauses: heritageClauses } : undefined;
         }
         function doChanges(changes, sourceFile, extendsToken, heritageClauses) {
-            changes.replaceNode(sourceFile, extendsToken, ts.factory.createToken(116 /* ImplementsKeyword */));
+            changes.replaceNode(sourceFile, extendsToken, ts.factory.createToken(117 /* ImplementsKeyword */));
             // If there is already an implements clause, replace the implements keyword with a comma.
             if (heritageClauses.length === 2 &&
-                heritageClauses[0].token === 93 /* ExtendsKeyword */ &&
-                heritageClauses[1].token === 116 /* ImplementsKeyword */) {
+                heritageClauses[0].token === 94 /* ExtendsKeyword */ &&
+                heritageClauses[1].token === 117 /* ImplementsKeyword */) {
                 var implementsToken = heritageClauses[1].getFirstToken();
                 var implementsFullStart = implementsToken.getFullStart();
                 changes.replaceRange(sourceFile, { pos: implementsFullStart, end: implementsFullStart }, ts.factory.createToken(27 /* CommaToken */));
@@ -144803,7 +148162,7 @@
                     ];
                 }
                 var result = [];
-                if (token.kind === 135 /* InferKeyword */) {
+                if (token.kind === 136 /* InferKeyword */) {
                     var changes = ts.textChanges.ChangeTracker.with(context, function (t) { return changeInferToUnknown(t, sourceFile, token); });
                     var name = ts.cast(token.parent, ts.isInferTypeNode).typeParameter.name.text;
                     result.push(codefix.createCodeFixAction(fixName, changes, [ts.Diagnostics.Replace_infer_0_with_unknown, name], fixIdInfer, ts.Diagnostics.Replace_all_unused_infer_with_unknown));
@@ -144845,7 +148204,7 @@
                             break;
                         }
                         case fixIdDelete: {
-                            if (token.kind === 135 /* InferKeyword */ || isImport(token)) {
+                            if (token.kind === 136 /* InferKeyword */ || isImport(token)) {
                                 break; // Can't delete
                             }
                             else if (ts.isJSDocTemplateTag(token)) {
@@ -144874,7 +148233,7 @@
                             break;
                         }
                         case fixIdInfer:
-                            if (token.kind === 135 /* InferKeyword */) {
+                            if (token.kind === 136 /* InferKeyword */) {
                                 changeInferToUnknown(changes, sourceFile, token);
                             }
                             break;
@@ -144885,7 +148244,7 @@
             },
         });
         function changeInferToUnknown(changes, sourceFile, token) {
-            changes.replaceNode(sourceFile, token.parent, ts.factory.createKeywordTypeNode(152 /* UnknownKeyword */));
+            changes.replaceNode(sourceFile, token.parent, ts.factory.createKeywordTypeNode(153 /* UnknownKeyword */));
         }
         function createDeleteFix(changes, diag) {
             return codefix.createCodeFixAction(fixName, changes, diag, fixIdDelete, ts.Diagnostics.Delete_all_unused_declarations);
@@ -144894,18 +148253,18 @@
             changes.delete(sourceFile, ts.Debug.checkDefined(ts.cast(token.parent, ts.isDeclarationWithTypeParameterChildren).typeParameters, "The type parameter to delete should exist"));
         }
         function isImport(token) {
-            return token.kind === 99 /* ImportKeyword */
-                || token.kind === 78 /* Identifier */ && (token.parent.kind === 266 /* ImportSpecifier */ || token.parent.kind === 263 /* ImportClause */);
+            return token.kind === 100 /* ImportKeyword */
+                || token.kind === 79 /* Identifier */ && (token.parent.kind === 268 /* ImportSpecifier */ || token.parent.kind === 265 /* ImportClause */);
         }
         /** Sometimes the diagnostic span is an entire ImportDeclaration, so we should remove the whole thing. */
         function tryGetFullImport(token) {
-            return token.kind === 99 /* ImportKeyword */ ? ts.tryCast(token.parent, ts.isImportDeclaration) : undefined;
+            return token.kind === 100 /* ImportKeyword */ ? ts.tryCast(token.parent, ts.isImportDeclaration) : undefined;
         }
         function canDeleteEntireVariableStatement(sourceFile, token) {
             return ts.isVariableDeclarationList(token.parent) && ts.first(token.parent.getChildren(sourceFile)) === token;
         }
         function deleteEntireVariableStatement(changes, sourceFile, node) {
-            changes.delete(sourceFile, node.parent.kind === 233 /* VariableStatement */ ? node.parent : node);
+            changes.delete(sourceFile, node.parent.kind === 235 /* VariableStatement */ ? node.parent : node);
         }
         function deleteDestructuringElements(changes, sourceFile, node) {
             ts.forEach(node.elements, function (n) { return changes.delete(sourceFile, n); });
@@ -144914,7 +148273,7 @@
             // Don't offer to prefix a property.
             if (errorCode === ts.Diagnostics.Property_0_is_declared_but_its_value_is_never_read.code)
                 return;
-            if (token.kind === 135 /* InferKeyword */) {
+            if (token.kind === 136 /* InferKeyword */) {
                 token = ts.cast(token.parent, ts.isInferTypeNode).typeParameter.name;
             }
             if (ts.isIdentifier(token) && canPrefix(token)) {
@@ -144930,14 +148289,14 @@
         }
         function canPrefix(token) {
             switch (token.parent.kind) {
-                case 161 /* Parameter */:
-                case 160 /* TypeParameter */:
+                case 162 /* Parameter */:
+                case 161 /* TypeParameter */:
                     return true;
-                case 250 /* VariableDeclaration */: {
+                case 252 /* VariableDeclaration */: {
                     var varDecl = token.parent;
                     switch (varDecl.parent.parent.kind) {
-                        case 240 /* ForOfStatement */:
-                        case 239 /* ForInStatement */:
+                        case 242 /* ForOfStatement */:
+                        case 241 /* ForInStatement */:
                             return true;
                     }
                 }
@@ -144987,8 +148346,8 @@
         function mayDeleteParameter(checker, sourceFile, parameter, sourceFiles, program, cancellationToken, isFixAll) {
             var parent = parameter.parent;
             switch (parent.kind) {
-                case 166 /* MethodDeclaration */:
-                case 167 /* Constructor */:
+                case 167 /* MethodDeclaration */:
+                case 169 /* Constructor */:
                     var index = parent.parameters.indexOf(parameter);
                     var referent = ts.isMethodDeclaration(parent) ? parent.name : parent;
                     var entries = ts.FindAllReferences.Core.getReferencedSymbolsForNode(parent.pos, referent, program, sourceFiles, cancellationToken);
@@ -145018,17 +148377,17 @@
                         }
                     }
                     return true;
-                case 252 /* FunctionDeclaration */: {
+                case 254 /* FunctionDeclaration */: {
                     if (parent.name && isCallbackLike(checker, sourceFile, parent.name)) {
                         return isLastParameter(parent, parameter, isFixAll);
                     }
                     return true;
                 }
-                case 209 /* FunctionExpression */:
-                case 210 /* ArrowFunction */:
+                case 211 /* FunctionExpression */:
+                case 212 /* ArrowFunction */:
                     // Can't remove a non-last parameter in a callback. Can remove a parameter in code-fix-all if future parameters are also unused.
                     return isLastParameter(parent, parameter, isFixAll);
-                case 169 /* SetAccessor */:
+                case 171 /* SetAccessor */:
                     // Setter must have a parameter
                     return false;
                 default:
@@ -145086,7 +148445,7 @@
             var container = (ts.isBlock(statement.parent) ? statement.parent : statement).parent;
             if (!ts.isBlock(statement.parent) || statement === ts.first(statement.parent.statements)) {
                 switch (container.kind) {
-                    case 235 /* IfStatement */:
+                    case 237 /* IfStatement */:
                         if (container.elseStatement) {
                             if (ts.isBlock(statement.parent)) {
                                 break;
@@ -145097,8 +148456,8 @@
                             return;
                         }
                     // falls through
-                    case 237 /* WhileStatement */:
-                    case 238 /* ForStatement */:
+                    case 239 /* WhileStatement */:
+                    case 240 /* ForStatement */:
                         changes.delete(sourceFile, container);
                         return;
                 }
@@ -145171,7 +148530,7 @@
                 var typeNode = info.typeNode, type = info.type;
                 var original = typeNode.getText(sourceFile);
                 var actions = [fix(type, fixIdPlain, ts.Diagnostics.Change_all_jsdoc_style_types_to_TypeScript)];
-                if (typeNode.kind === 306 /* JSDocNullableType */) {
+                if (typeNode.kind === 309 /* JSDocNullableType */) {
                     // for nullable types, suggest the flow-compatible `T | null | undefined`
                     // in addition to the jsdoc/closure-compatible `T | null`
                     actions.push(fix(checker.getNullableType(type, 32768 /* Undefined */), fixIdNullable, ts.Diagnostics.Change_all_jsdoc_style_types_to_TypeScript_and_add_undefined_to_nullable_types));
@@ -145191,7 +148550,7 @@
                     if (!info)
                         return;
                     var typeNode = info.typeNode, type = info.type;
-                    var fixedType = typeNode.kind === 306 /* JSDocNullableType */ && fixId === fixIdNullable ? checker.getNullableType(type, 32768 /* Undefined */) : type;
+                    var fixedType = typeNode.kind === 309 /* JSDocNullableType */ && fixId === fixIdNullable ? checker.getNullableType(type, 32768 /* Undefined */) : type;
                     doChange(changes, sourceFile, typeNode, fixedType, checker);
                 });
             }
@@ -145208,22 +148567,22 @@
             // NOTE: Some locations are not handled yet:
             // MappedTypeNode.typeParameters and SignatureDeclaration.typeParameters, as well as CallExpression.typeArguments
             switch (node.kind) {
-                case 225 /* AsExpression */:
-                case 170 /* CallSignature */:
-                case 171 /* ConstructSignature */:
-                case 252 /* FunctionDeclaration */:
-                case 168 /* GetAccessor */:
-                case 172 /* IndexSignature */:
-                case 191 /* MappedType */:
-                case 166 /* MethodDeclaration */:
-                case 165 /* MethodSignature */:
-                case 161 /* Parameter */:
-                case 164 /* PropertyDeclaration */:
-                case 163 /* PropertySignature */:
-                case 169 /* SetAccessor */:
-                case 255 /* TypeAliasDeclaration */:
-                case 207 /* TypeAssertionExpression */:
-                case 250 /* VariableDeclaration */:
+                case 227 /* AsExpression */:
+                case 172 /* CallSignature */:
+                case 173 /* ConstructSignature */:
+                case 254 /* FunctionDeclaration */:
+                case 170 /* GetAccessor */:
+                case 174 /* IndexSignature */:
+                case 193 /* MappedType */:
+                case 167 /* MethodDeclaration */:
+                case 166 /* MethodSignature */:
+                case 162 /* Parameter */:
+                case 165 /* PropertyDeclaration */:
+                case 164 /* PropertySignature */:
+                case 171 /* SetAccessor */:
+                case 257 /* TypeAliasDeclaration */:
+                case 209 /* TypeAssertionExpression */:
+                case 252 /* VariableDeclaration */:
                     return true;
                 default:
                     return false;
@@ -145325,14 +148684,14 @@
             }
             var insertBefore;
             switch (containingFunction.kind) {
-                case 166 /* MethodDeclaration */:
+                case 167 /* MethodDeclaration */:
                     insertBefore = containingFunction.name;
                     break;
-                case 252 /* FunctionDeclaration */:
-                case 209 /* FunctionExpression */:
-                    insertBefore = ts.findChildOfKind(containingFunction, 97 /* FunctionKeyword */, sourceFile);
+                case 254 /* FunctionDeclaration */:
+                case 211 /* FunctionExpression */:
+                    insertBefore = ts.findChildOfKind(containingFunction, 98 /* FunctionKeyword */, sourceFile);
                     break;
-                case 210 /* ArrowFunction */:
+                case 212 /* ArrowFunction */:
                     insertBefore = ts.findChildOfKind(containingFunction, 20 /* OpenParenToken */, sourceFile) || ts.first(containingFunction.parameters);
                     break;
                 default:
@@ -145347,11 +148706,11 @@
             var insertBefore = _a.insertBefore, returnType = _a.returnType;
             if (returnType) {
                 var entityName = ts.getEntityNameFromTypeNode(returnType);
-                if (!entityName || entityName.kind !== 78 /* Identifier */ || entityName.text !== "Promise") {
+                if (!entityName || entityName.kind !== 79 /* Identifier */ || entityName.text !== "Promise") {
                     changes.replaceNode(sourceFile, returnType, ts.factory.createTypeReferenceNode("Promise", ts.factory.createNodeArray([returnType])));
                 }
             }
-            changes.insertModifierBefore(sourceFile, 129 /* AsyncKeyword */, insertBefore);
+            changes.insertModifierBefore(sourceFile, 130 /* AsyncKeyword */, insertBefore);
         }
     })(codefix = ts.codefix || (ts.codefix = {}));
 })(ts || (ts = {}));
@@ -145511,7 +148870,7 @@
             return errorCode;
         }
         function doChange(changes, sourceFile, token, errorCode, program, cancellationToken, markSeen, host, preferences) {
-            if (!ts.isParameterPropertyModifier(token.kind) && token.kind !== 78 /* Identifier */ && token.kind !== 25 /* DotDotDotToken */ && token.kind !== 107 /* ThisKeyword */) {
+            if (!ts.isParameterPropertyModifier(token.kind) && token.kind !== 79 /* Identifier */ && token.kind !== 25 /* DotDotDotToken */ && token.kind !== 108 /* ThisKeyword */) {
                 return undefined;
             }
             var parent = token.parent;
@@ -145665,7 +149024,7 @@
         function annotate(changes, importAdder, sourceFile, declaration, type, program, host) {
             var typeNode = ts.getTypeNodeIfAccessible(type, declaration, program, host);
             if (typeNode) {
-                if (ts.isInJSFile(sourceFile) && declaration.kind !== 163 /* PropertySignature */) {
+                if (ts.isInJSFile(sourceFile) && declaration.kind !== 164 /* PropertySignature */) {
                     var parent = ts.isVariableDeclaration(declaration) ? ts.tryCast(declaration.parent.parent, ts.isVariableStatement) : declaration;
                     if (!parent) {
                         return;
@@ -145740,15 +149099,15 @@
                     oldTags[i] = merged;
                 return !!merged;
             }); });
-            var tag = ts.factory.createJSDocComment(ts.factory.createNodeArray(ts.intersperse(comments, ts.factory.createJSDocText("\n"))), ts.factory.createNodeArray(__spreadArray(__spreadArray([], (oldTags || ts.emptyArray)), unmergedNewTags)));
-            var jsDocNode = parent.kind === 210 /* ArrowFunction */ ? getJsDocNodeForArrowFunction(parent) : parent;
+            var tag = ts.factory.createJSDocComment(ts.factory.createNodeArray(ts.intersperse(comments, ts.factory.createJSDocText("\n"))), ts.factory.createNodeArray(__spreadArray(__spreadArray([], (oldTags || ts.emptyArray), true), unmergedNewTags, true)));
+            var jsDocNode = parent.kind === 212 /* ArrowFunction */ ? getJsDocNodeForArrowFunction(parent) : parent;
             jsDocNode.jsDoc = parent.jsDoc;
             jsDocNode.jsDocCache = parent.jsDocCache;
             changes.insertJsdocCommentBefore(sourceFile, jsDocNode, tag);
         }
         codefix.addJSDocTags = addJSDocTags;
         function getJsDocNodeForArrowFunction(signature) {
-            if (signature.parent.kind === 164 /* PropertyDeclaration */) {
+            if (signature.parent.kind === 165 /* PropertyDeclaration */) {
                 return signature.parent;
             }
             return signature.parent.parent;
@@ -145758,14 +149117,14 @@
                 return undefined;
             }
             switch (oldTag.kind) {
-                case 330 /* JSDocParameterTag */: {
+                case 335 /* JSDocParameterTag */: {
                     var oldParam = oldTag;
                     var newParam = newTag;
                     return ts.isIdentifier(oldParam.name) && ts.isIdentifier(newParam.name) && oldParam.name.escapedText === newParam.name.escapedText
                         ? ts.factory.createJSDocParameterTag(/*tagName*/ undefined, newParam.name, /*isBracketed*/ false, newParam.typeExpression, newParam.isNameFirst, oldParam.comment)
                         : undefined;
                 }
-                case 331 /* JSDocReturnTag */:
+                case 336 /* JSDocReturnTag */:
                     return ts.factory.createJSDocReturnTag(/*tagName*/ undefined, newTag.typeExpression, oldTag.comment);
             }
         }
@@ -145790,19 +149149,19 @@
         function getFunctionReferences(containingFunction, sourceFile, program, cancellationToken) {
             var searchToken;
             switch (containingFunction.kind) {
-                case 167 /* Constructor */:
-                    searchToken = ts.findChildOfKind(containingFunction, 132 /* ConstructorKeyword */, sourceFile);
+                case 169 /* Constructor */:
+                    searchToken = ts.findChildOfKind(containingFunction, 133 /* ConstructorKeyword */, sourceFile);
                     break;
-                case 210 /* ArrowFunction */:
-                case 209 /* FunctionExpression */:
+                case 212 /* ArrowFunction */:
+                case 211 /* FunctionExpression */:
                     var parent = containingFunction.parent;
                     searchToken = (ts.isVariableDeclaration(parent) || ts.isPropertyDeclaration(parent)) && ts.isIdentifier(parent.name) ?
                         parent.name :
                         containingFunction.name;
                     break;
-                case 252 /* FunctionDeclaration */:
-                case 166 /* MethodDeclaration */:
-                case 165 /* MethodSignature */:
+                case 254 /* FunctionDeclaration */:
+                case 167 /* MethodDeclaration */:
+                case 166 /* MethodSignature */:
                     searchToken = containingFunction.name;
                     break;
             }
@@ -145889,7 +149248,7 @@
                     cancellationToken.throwIfCancellationRequested();
                     calculateUsageOfNode(reference, usage);
                 }
-                var calls = __spreadArray(__spreadArray([], usage.constructs || []), usage.calls || []);
+                var calls = __spreadArray(__spreadArray([], usage.constructs || [], true), usage.calls || [], true);
                 return declaration.parameters.map(function (parameter, parameterIndex) {
                     var types = [];
                     var isRest = ts.isRestParameter(parameter);
@@ -145944,24 +149303,24 @@
                     node = node.parent;
                 }
                 switch (node.parent.kind) {
-                    case 234 /* ExpressionStatement */:
+                    case 236 /* ExpressionStatement */:
                         inferTypeFromExpressionStatement(node, usage);
                         break;
-                    case 216 /* PostfixUnaryExpression */:
+                    case 218 /* PostfixUnaryExpression */:
                         usage.isNumber = true;
                         break;
-                    case 215 /* PrefixUnaryExpression */:
+                    case 217 /* PrefixUnaryExpression */:
                         inferTypeFromPrefixUnaryExpression(node.parent, usage);
                         break;
-                    case 217 /* BinaryExpression */:
+                    case 219 /* BinaryExpression */:
                         inferTypeFromBinaryExpression(node, node.parent, usage);
                         break;
-                    case 285 /* CaseClause */:
-                    case 286 /* DefaultClause */:
+                    case 287 /* CaseClause */:
+                    case 288 /* DefaultClause */:
                         inferTypeFromSwitchStatementLabel(node.parent, usage);
                         break;
-                    case 204 /* CallExpression */:
-                    case 205 /* NewExpression */:
+                    case 206 /* CallExpression */:
+                    case 207 /* NewExpression */:
                         if (node.parent.expression === node) {
                             inferTypeFromCallExpression(node.parent, usage);
                         }
@@ -145969,20 +149328,20 @@
                             inferTypeFromContextualType(node, usage);
                         }
                         break;
-                    case 202 /* PropertyAccessExpression */:
+                    case 204 /* PropertyAccessExpression */:
                         inferTypeFromPropertyAccessExpression(node.parent, usage);
                         break;
-                    case 203 /* ElementAccessExpression */:
+                    case 205 /* ElementAccessExpression */:
                         inferTypeFromPropertyElementExpression(node.parent, node, usage);
                         break;
-                    case 289 /* PropertyAssignment */:
-                    case 290 /* ShorthandPropertyAssignment */:
+                    case 291 /* PropertyAssignment */:
+                    case 292 /* ShorthandPropertyAssignment */:
                         inferTypeFromPropertyAssignment(node.parent, usage);
                         break;
-                    case 164 /* PropertyDeclaration */:
+                    case 165 /* PropertyDeclaration */:
                         inferTypeFromPropertyDeclaration(node.parent, usage);
                         break;
-                    case 250 /* VariableDeclaration */: {
+                    case 252 /* VariableDeclaration */: {
                         var _a = node.parent, name = _a.name, initializer = _a.initializer;
                         if (node === name) {
                             if (initializer) { // This can happen for `let x = null;` which still has an implicit-any error.
@@ -146040,17 +149399,17 @@
                     case 52 /* CaretToken */:
                     // CompoundAssignmentOperator
                     // falls through
-                    case 64 /* MinusEqualsToken */:
-                    case 66 /* AsteriskAsteriskEqualsToken */:
-                    case 65 /* AsteriskEqualsToken */:
-                    case 67 /* SlashEqualsToken */:
-                    case 68 /* PercentEqualsToken */:
-                    case 72 /* AmpersandEqualsToken */:
-                    case 73 /* BarEqualsToken */:
-                    case 77 /* CaretEqualsToken */:
-                    case 69 /* LessThanLessThanEqualsToken */:
-                    case 71 /* GreaterThanGreaterThanGreaterThanEqualsToken */:
-                    case 70 /* GreaterThanGreaterThanEqualsToken */:
+                    case 65 /* MinusEqualsToken */:
+                    case 67 /* AsteriskAsteriskEqualsToken */:
+                    case 66 /* AsteriskEqualsToken */:
+                    case 68 /* SlashEqualsToken */:
+                    case 69 /* PercentEqualsToken */:
+                    case 73 /* AmpersandEqualsToken */:
+                    case 74 /* BarEqualsToken */:
+                    case 78 /* CaretEqualsToken */:
+                    case 70 /* LessThanLessThanEqualsToken */:
+                    case 72 /* GreaterThanGreaterThanGreaterThanEqualsToken */:
+                    case 71 /* GreaterThanGreaterThanEqualsToken */:
                     // AdditiveOperator
                     // falls through
                     case 40 /* MinusToken */:
@@ -146068,7 +149427,7 @@
                             usage.isNumber = true;
                         }
                         break;
-                    case 63 /* PlusEqualsToken */:
+                    case 64 /* PlusEqualsToken */:
                     case 39 /* PlusToken */:
                         var otherOperandType = checker.getTypeAtLocation(parent.left === node ? parent.right : parent.left);
                         if (otherOperandType.flags & 1056 /* EnumLike */) {
@@ -146088,14 +149447,14 @@
                         }
                         break;
                     //  AssignmentOperators
-                    case 62 /* EqualsToken */:
+                    case 63 /* EqualsToken */:
                     case 34 /* EqualsEqualsToken */:
                     case 36 /* EqualsEqualsEqualsToken */:
                     case 37 /* ExclamationEqualsEqualsToken */:
                     case 35 /* ExclamationEqualsToken */:
                         addCandidateType(usage, checker.getTypeAtLocation(parent.left === node ? parent.right : parent.left));
                         break;
-                    case 100 /* InKeyword */:
+                    case 101 /* InKeyword */:
                         if (node === parent.left) {
                             usage.isString = true;
                         }
@@ -146104,7 +149463,7 @@
                     case 56 /* BarBarToken */:
                     case 60 /* QuestionQuestionToken */:
                         if (node === parent.left &&
-                            (node.parent.parent.kind === 250 /* VariableDeclaration */ || ts.isAssignmentExpression(node.parent.parent, /*excludeCompoundAssignment*/ true))) {
+                            (node.parent.parent.kind === 252 /* VariableDeclaration */ || ts.isAssignmentExpression(node.parent.parent, /*excludeCompoundAssignment*/ true))) {
                             // var x = x || {};
                             // TODO: use getFalsyflagsOfType
                             addCandidateType(usage, checker.getTypeAtLocation(parent.right));
@@ -146112,7 +149471,7 @@
                         break;
                     case 55 /* AmpersandAmpersandToken */:
                     case 27 /* CommaToken */:
-                    case 101 /* InstanceOfKeyword */:
+                    case 102 /* InstanceOfKeyword */:
                         // nothing to infer here
                         break;
                 }
@@ -146132,7 +149491,7 @@
                     }
                 }
                 calculateUsageOfNode(parent, call.return_);
-                if (parent.kind === 204 /* CallExpression */) {
+                if (parent.kind === 206 /* CallExpression */) {
                     (usage.calls || (usage.calls = [])).push(call);
                 }
                 else {
@@ -146239,13 +149598,15 @@
                     }
                     calls.push.apply(calls, checker.getSignaturesOfType(anon, 0 /* Call */));
                     constructs.push.apply(constructs, checker.getSignaturesOfType(anon, 1 /* Construct */));
-                    if (anon.stringIndexInfo) {
-                        stringIndices.push(anon.stringIndexInfo.type);
-                        stringIndexReadonly = stringIndexReadonly || anon.stringIndexInfo.isReadonly;
+                    var stringIndexInfo = checker.getIndexInfoOfType(anon, 0 /* String */);
+                    if (stringIndexInfo) {
+                        stringIndices.push(stringIndexInfo.type);
+                        stringIndexReadonly = stringIndexReadonly || stringIndexInfo.isReadonly;
                     }
-                    if (anon.numberIndexInfo) {
-                        numberIndices.push(anon.numberIndexInfo.type);
-                        numberIndexReadonly = numberIndexReadonly || anon.numberIndexInfo.isReadonly;
+                    var numberIndexInfo = checker.getIndexInfoOfType(anon, 1 /* Number */);
+                    if (numberIndexInfo) {
+                        numberIndices.push(numberIndexInfo.type);
+                        numberIndexReadonly = numberIndexReadonly || numberIndexInfo.isReadonly;
                     }
                 }
                 var members = ts.mapEntries(props, function (name, types) {
@@ -146254,7 +149615,12 @@
                     s.type = checker.getUnionType(types);
                     return [name, s];
                 });
-                return checker.createAnonymousType(anons[0].symbol, members, calls, constructs, stringIndices.length ? checker.createIndexInfo(checker.getUnionType(stringIndices), stringIndexReadonly) : undefined, numberIndices.length ? checker.createIndexInfo(checker.getUnionType(numberIndices), numberIndexReadonly) : undefined);
+                var indexInfos = [];
+                if (stringIndices.length)
+                    indexInfos.push(checker.createIndexInfo(checker.getStringType(), checker.getUnionType(stringIndices), stringIndexReadonly));
+                if (numberIndices.length)
+                    indexInfos.push(checker.createIndexInfo(checker.getNumberType(), checker.getUnionType(numberIndices), numberIndexReadonly));
+                return checker.createAnonymousType(anons[0].symbol, members, calls, constructs, indexInfos);
             }
             function inferTypes(usage) {
                 var _a, _b, _c;
@@ -146289,8 +149655,8 @@
                 }
                 var callSignatures = usage.calls ? [getSignatureFromCalls(usage.calls)] : [];
                 var constructSignatures = usage.constructs ? [getSignatureFromCalls(usage.constructs)] : [];
-                var stringIndexInfo = usage.stringIndex && checker.createIndexInfo(combineFromUsage(usage.stringIndex), /*isReadonly*/ false);
-                return checker.createAnonymousType(/*symbol*/ undefined, members, callSignatures, constructSignatures, stringIndexInfo, /*numberIndexInfo*/ undefined);
+                var indexInfos = usage.stringIndex ? [checker.createIndexInfo(checker.getStringType(), combineFromUsage(usage.stringIndex), /*isReadonly*/ false)] : [];
+                return checker.createAnonymousType(/*symbol*/ undefined, members, callSignatures, constructSignatures, indexInfos);
             }
             function inferNamedTypesFromProperties(usage) {
                 if (!usage.properties || !usage.properties.size)
@@ -146391,7 +149757,7 @@
                 return types;
             }
             function getFunctionFromCalls(calls) {
-                return checker.createAnonymousType(/*symbol*/ undefined, ts.createSymbolTable(), [getSignatureFromCalls(calls)], ts.emptyArray, /*stringIndexInfo*/ undefined, /*numberIndexInfo*/ undefined);
+                return checker.createAnonymousType(/*symbol*/ undefined, ts.createSymbolTable(), [getSignatureFromCalls(calls)], ts.emptyArray, ts.emptyArray);
             }
             function getSignatureFromCalls(calls) {
                 var parameters = [];
@@ -146408,7 +149774,6 @@
                     _loop_15(i);
                 }
                 var returnType = combineFromUsage(combineUsages(calls.map(function (call) { return call.return_; })));
-                // TODO: GH#18217
                 return checker.createSignature(/*declaration*/ undefined, /*typeParameters*/ undefined, /*thisParameter*/ undefined, parameters, returnType, /*typePredicate*/ undefined, length, 0 /* None */);
             }
             function addCandidateType(usage, type) {
@@ -146552,7 +149917,7 @@
         codefix.createMissingMemberNodes = createMissingMemberNodes;
         function getNoopSymbolTrackerWithResolver(context) {
             return {
-                trackSymbol: ts.noop,
+                trackSymbol: function () { return false; },
                 moduleResolverHost: ts.getModuleSpecifierResolverHost(context.program, context.host),
             };
         }
@@ -146576,8 +149941,8 @@
             var ambient = !!(enclosingDeclaration.flags & 8388608 /* Ambient */);
             var quotePreference = ts.getQuotePreference(sourceFile, preferences);
             switch (declaration.kind) {
-                case 163 /* PropertySignature */:
-                case 164 /* PropertyDeclaration */:
+                case 164 /* PropertySignature */:
+                case 165 /* PropertyDeclaration */:
                     var flags = quotePreference === 0 /* Single */ ? 268435456 /* UseSingleQuotesForStringLiteralType */ : undefined;
                     var typeNode = checker.typeToTypeNode(type, enclosingDeclaration, flags, getNoopSymbolTrackerWithResolver(context));
                     if (importAdder) {
@@ -146591,8 +149956,8 @@
                     /*decorators*/ undefined, modifiers, name, optional ? ts.factory.createToken(57 /* QuestionToken */) : undefined, typeNode, 
                     /*initializer*/ undefined));
                     break;
-                case 168 /* GetAccessor */:
-                case 169 /* SetAccessor */: {
+                case 170 /* GetAccessor */:
+                case 171 /* SetAccessor */: {
                     var typeNode_1 = checker.typeToTypeNode(type, enclosingDeclaration, /*flags*/ undefined, getNoopSymbolTrackerWithResolver(context));
                     var allAccessors = ts.getAllAccessorDeclarations(declarations, declaration);
                     var orderedAccessors = allAccessors.secondAccessor
@@ -146621,8 +149986,8 @@
                     }
                     break;
                 }
-                case 165 /* MethodSignature */:
-                case 166 /* MethodDeclaration */:
+                case 166 /* MethodSignature */:
+                case 167 /* MethodDeclaration */:
                     // The signature for the implementation appears as an entry in `signatures` iff
                     // there is only one signature.
                     // If there are overloads and an implementation signature, it appears as an
@@ -146642,7 +150007,7 @@
                     }
                     for (var _a = 0, signatures_1 = signatures; _a < signatures_1.length; _a++) {
                         var signature = signatures_1[_a];
-                        // Need to ensure nodes are fresh each time so they can have different positions.
+                        // Ensure nodes are fresh so they can have different positions when going through formatting.
                         outputMethod(quotePreference, signature, ts.getSynthesizedDeepClones(modifiers, /*includeTrivia*/ false), ts.getSynthesizedDeepClone(name, /*includeTrivia*/ false));
                     }
                     if (!ambient) {
@@ -146658,17 +150023,17 @@
                     break;
             }
             function outputMethod(quotePreference, signature, modifiers, name, body) {
-                var method = signatureToMethodDeclaration(context, quotePreference, signature, enclosingDeclaration, modifiers, name, optional, body, importAdder);
+                var method = createSignatureDeclarationFromSignature(167 /* MethodDeclaration */, context, quotePreference, signature, body, name, modifiers, optional, enclosingDeclaration, importAdder);
                 if (method)
                     addClassElement(method);
             }
         }
-        function signatureToMethodDeclaration(context, quotePreference, signature, enclosingDeclaration, modifiers, name, optional, body, importAdder) {
+        function createSignatureDeclarationFromSignature(kind, context, quotePreference, signature, body, name, modifiers, optional, enclosingDeclaration, importAdder) {
             var program = context.program;
             var checker = program.getTypeChecker();
             var scriptTarget = ts.getEmitScriptTarget(program.getCompilerOptions());
             var flags = 1 /* NoTruncation */ | 1073741824 /* NoUndefinedOptionalParameterType */ | 256 /* SuppressAnyReturnType */ | (quotePreference === 0 /* Single */ ? 268435456 /* UseSingleQuotesForStringLiteralType */ : 0);
-            var signatureDeclaration = checker.signatureToSignatureDeclaration(signature, 166 /* MethodDeclaration */, enclosingDeclaration, flags, getNoopSymbolTrackerWithResolver(context));
+            var signatureDeclaration = checker.signatureToSignatureDeclaration(signature, kind, enclosingDeclaration, flags, getNoopSymbolTrackerWithResolver(context));
             if (!signatureDeclaration) {
                 return undefined;
             }
@@ -146720,9 +150085,20 @@
                     }
                 }
             }
-            return ts.factory.updateMethodDeclaration(signatureDeclaration, 
-            /*decorators*/ undefined, modifiers, signatureDeclaration.asteriskToken, name, optional ? ts.factory.createToken(57 /* QuestionToken */) : undefined, typeParameters, parameters, type, body);
+            var questionToken = optional ? ts.factory.createToken(57 /* QuestionToken */) : undefined;
+            var asteriskToken = signatureDeclaration.asteriskToken;
+            if (ts.isFunctionExpression(signatureDeclaration)) {
+                return ts.factory.updateFunctionExpression(signatureDeclaration, modifiers, signatureDeclaration.asteriskToken, ts.tryCast(name, ts.isIdentifier), typeParameters, parameters, type, body !== null && body !== void 0 ? body : signatureDeclaration.body);
+            }
+            if (ts.isArrowFunction(signatureDeclaration)) {
+                return ts.factory.updateArrowFunction(signatureDeclaration, modifiers, typeParameters, parameters, type, signatureDeclaration.equalsGreaterThanToken, body !== null && body !== void 0 ? body : signatureDeclaration.body);
+            }
+            if (ts.isMethodDeclaration(signatureDeclaration)) {
+                return ts.factory.updateMethodDeclaration(signatureDeclaration, /* decorators */ undefined, modifiers, asteriskToken, name !== null && name !== void 0 ? name : ts.factory.createIdentifier(""), questionToken, typeParameters, parameters, type, body);
+            }
+            return undefined;
         }
+        codefix.createSignatureDeclarationFromSignature = createSignatureDeclarationFromSignature;
         function createSignatureDeclarationFromCallExpression(kind, context, importAdder, call, name, modifierFlags, contextNode) {
             var quotePreference = ts.getQuotePreference(context.sourceFile, context.preferences);
             var scriptTarget = ts.getEmitScriptTarget(context.program.getCompilerOptions());
@@ -146752,7 +150128,7 @@
             var type = isJs || contextualType === undefined
                 ? undefined
                 : checker.typeToTypeNode(contextualType, contextNode, /*flags*/ undefined, tracker);
-            if (kind === 166 /* MethodDeclaration */) {
+            if (kind === 167 /* MethodDeclaration */) {
                 return ts.factory.createMethodDeclaration(
                 /*decorators*/ undefined, modifiers, asteriskToken, name, 
                 /*questionToken*/ undefined, typeParameters, parameters, type, ts.isInterfaceDeclaration(contextNode) ? undefined : createStubbedMethodBody(quotePreference));
@@ -146767,10 +150143,11 @@
                 var importableReference = tryGetAutoImportableReferenceFromTypeNode(typeNode, scriptTarget);
                 if (importableReference) {
                     importSymbols(importAdder, importableReference.symbols);
-                    return importableReference.typeNode;
+                    typeNode = importableReference.typeNode;
                 }
             }
-            return typeNode;
+            // Ensure nodes are fresh so they can have different positions when going through formatting.
+            return ts.getSynthesizedDeepClone(typeNode);
         }
         codefix.typeToAutoImportableTypeNode = typeToAutoImportableTypeNode;
         function createDummyParameters(argCount, names, types, minArgumentCount, inJs) {
@@ -146782,7 +150159,7 @@
                 /*dotDotDotToken*/ undefined, 
                 /*name*/ names && names[i] || "arg" + i, 
                 /*questionToken*/ minArgumentCount !== undefined && i >= minArgumentCount ? ts.factory.createToken(57 /* QuestionToken */) : undefined, 
-                /*type*/ inJs ? undefined : types && types[i] || ts.factory.createKeywordTypeNode(128 /* AnyKeyword */), 
+                /*type*/ inJs ? undefined : types && types[i] || ts.factory.createKeywordTypeNode(129 /* AnyKeyword */), 
                 /*initializer*/ undefined);
                 parameters.push(newParameter);
             }
@@ -146810,7 +150187,7 @@
             var maxArgsParameterSymbolNames = maxArgsSignature.parameters.map(function (symbol) { return symbol.name; });
             var parameters = createDummyParameters(maxNonRestArgs, maxArgsParameterSymbolNames, /* types */ undefined, minArgumentCount, /*inJs*/ false);
             if (someSigHasRestParameter) {
-                var anyArrayType = ts.factory.createArrayTypeNode(ts.factory.createKeywordTypeNode(128 /* AnyKeyword */));
+                var anyArrayType = ts.factory.createArrayTypeNode(ts.factory.createKeywordTypeNode(129 /* AnyKeyword */));
                 var restParameter = ts.factory.createParameterDeclaration(
                 /*decorators*/ undefined, 
                 /*modifiers*/ undefined, ts.factory.createToken(25 /* DotDotDotToken */), maxArgsParameterSymbolNames[maxNonRestArgs] || "rest", 
@@ -146845,10 +150222,10 @@
         codefix.createStubbedBody = createStubbedBody;
         function createVisibilityModifier(flags) {
             if (flags & 4 /* Public */) {
-                return ts.factory.createToken(122 /* PublicKeyword */);
+                return ts.factory.createToken(123 /* PublicKeyword */);
             }
             else if (flags & 16 /* Protected */) {
-                return ts.factory.createToken(121 /* ProtectedKeyword */);
+                return ts.factory.createToken(122 /* ProtectedKeyword */);
             }
             return undefined;
         }
@@ -146921,7 +150298,7 @@
         }
         codefix.tryGetAutoImportableReferenceFromTypeNode = tryGetAutoImportableReferenceFromTypeNode;
         function replaceFirstIdentifierOfEntityName(name, newIdentifier) {
-            if (name.kind === 78 /* Identifier */) {
+            if (name.kind === 79 /* Identifier */) {
                 return newIdentifier;
             }
             return ts.factory.createQualifiedName(replaceFirstIdentifierOfEntityName(name.left, newIdentifier), name.right);
@@ -147037,7 +150414,7 @@
                 isStatic: ts.hasStaticModifier(declaration),
                 isReadonly: ts.hasEffectiveReadonlyModifier(declaration),
                 type: getDeclarationType(declaration, program),
-                container: declaration.kind === 161 /* Parameter */ ? declaration.parent.parent : declaration.parent,
+                container: declaration.kind === 162 /* Parameter */ ? declaration.parent.parent : declaration.parent,
                 originalName: declaration.name.text,
                 declaration: declaration,
                 fieldName: fieldName,
@@ -147093,13 +150470,13 @@
                 return;
             constructor.body.forEachChild(function recur(node) {
                 if (ts.isElementAccessExpression(node) &&
-                    node.expression.kind === 107 /* ThisKeyword */ &&
+                    node.expression.kind === 108 /* ThisKeyword */ &&
                     ts.isStringLiteral(node.argumentExpression) &&
                     node.argumentExpression.text === originalName &&
                     ts.isWriteAccess(node)) {
                     changeTracker.replaceNode(file, node.argumentExpression, ts.factory.createStringLiteral(fieldName));
                 }
-                if (ts.isPropertyAccessExpression(node) && node.expression.kind === 107 /* ThisKeyword */ && node.name.text === originalName && ts.isWriteAccess(node)) {
+                if (ts.isPropertyAccessExpression(node) && node.expression.kind === 108 /* ThisKeyword */ && node.name.text === originalName && ts.isWriteAccess(node)) {
                     changeTracker.replaceNode(file, node.name, ts.factory.createIdentifier(fieldName));
                 }
                 if (!ts.isFunctionLike(node) && !ts.isClassLike(node)) {
@@ -147114,7 +150491,7 @@
                 var type = typeChecker.getTypeFromTypeNode(typeNode);
                 if (!typeChecker.isTypeAssignableTo(typeChecker.getUndefinedType(), type)) {
                     var types = ts.isUnionTypeNode(typeNode) ? typeNode.types : [typeNode];
-                    return ts.factory.createUnionTypeNode(__spreadArray(__spreadArray([], types), [ts.factory.createKeywordTypeNode(150 /* UndefinedKeyword */)]));
+                    return ts.factory.createUnionTypeNode(__spreadArray(__spreadArray([], types, true), [ts.factory.createKeywordTypeNode(151 /* UndefinedKeyword */)], false));
                 }
             }
             return typeNode;
@@ -147173,7 +150550,7 @@
         });
         function getActionsForUsageOfInvalidImport(context) {
             var sourceFile = context.sourceFile;
-            var targetKind = ts.Diagnostics.This_expression_is_not_callable.code === context.errorCode ? 204 /* CallExpression */ : 205 /* NewExpression */;
+            var targetKind = ts.Diagnostics.This_expression_is_not_callable.code === context.errorCode ? 206 /* CallExpression */ : 207 /* NewExpression */;
             var node = ts.findAncestor(ts.getTokenAtPosition(sourceFile, context.span.start), function (a) { return a.kind === targetKind; });
             if (!node) {
                 return [];
@@ -147189,9 +150566,8 @@
                 ts.Diagnostics.Type_0_is_not_assignable_to_type_1.code,
                 ts.Diagnostics.Type_0_is_not_assignable_to_type_1_Two_different_types_with_this_name_exist_but_they_are_unrelated.code,
                 ts.Diagnostics.Type_predicate_0_is_not_assignable_to_1.code,
-                ts.Diagnostics.Property_0_of_type_1_is_not_assignable_to_string_index_type_2.code,
-                ts.Diagnostics.Property_0_of_type_1_is_not_assignable_to_numeric_index_type_2.code,
-                ts.Diagnostics.Numeric_index_type_0_is_not_assignable_to_string_index_type_1.code,
+                ts.Diagnostics.Property_0_of_type_1_is_not_assignable_to_2_index_type_3.code,
+                ts.Diagnostics._0_index_type_1_is_not_assignable_to_2_index_type_3.code,
                 ts.Diagnostics.Property_0_in_type_1_is_not_assignable_to_the_same_property_in_base_type_2.code,
                 ts.Diagnostics.Property_0_in_type_1_is_not_assignable_to_type_2.code,
                 ts.Diagnostics.Property_0_of_JSX_spread_attribute_is_not_assignable_to_target_property.code,
@@ -147218,8 +150594,8 @@
                 ts.addRange(fixes, getCodeFixesForImportDeclaration(context, relatedImport));
             }
             if (ts.isExpression(expr) && !(ts.isNamedDeclaration(expr.parent) && expr.parent.name === expr)) {
-                var sourceFile_1 = context.sourceFile;
-                var changes = ts.textChanges.ChangeTracker.with(context, function (t) { return t.replaceNode(sourceFile_1, expr, ts.factory.createPropertyAccessExpression(expr, "default"), {}); });
+                var sourceFile_2 = context.sourceFile;
+                var changes = ts.textChanges.ChangeTracker.with(context, function (t) { return t.replaceNode(sourceFile_2, expr, ts.factory.createPropertyAccessExpression(expr, "default"), {}); });
                 fixes.push(codefix.createCodeFixActionWithoutFixAll(fixName, changes, ts.Diagnostics.Use_synthetic_default_member));
             }
             return fixes;
@@ -147292,7 +150668,7 @@
             return codefix.createCodeFixAction(fixName, changes, [ts.Diagnostics.Add_undefined_type_to_property_0, propertyDeclaration.name.getText()], fixIdAddUndefinedType, ts.Diagnostics.Add_undefined_type_to_all_uninitialized_properties);
         }
         function addUndefinedType(changeTracker, propertyDeclarationSourceFile, propertyDeclaration) {
-            var undefinedTypeNode = ts.factory.createKeywordTypeNode(150 /* UndefinedKeyword */);
+            var undefinedTypeNode = ts.factory.createKeywordTypeNode(151 /* UndefinedKeyword */);
             var type = propertyDeclaration.type; // TODO: GH#18217
             var types = ts.isUnionTypeNode(type) ? type.types.concat(undefinedTypeNode) : [type, undefinedTypeNode];
             changeTracker.replaceNode(propertyDeclarationSourceFile, type, ts.factory.createUnionTypeNode(types));
@@ -147506,8 +150882,8 @@
         });
         function getImportTypeNode(sourceFile, pos) {
             var token = ts.getTokenAtPosition(sourceFile, pos);
-            ts.Debug.assert(token.kind === 99 /* ImportKeyword */, "This token should be an ImportKeyword");
-            ts.Debug.assert(token.parent.kind === 196 /* ImportType */, "Token parent should be an ImportType");
+            ts.Debug.assert(token.kind === 100 /* ImportKeyword */, "This token should be an ImportKeyword");
+            ts.Debug.assert(token.parent.kind === 198 /* ImportType */, "Token parent should be an ImportType");
             return token.parent;
         }
         function doChange(changes, sourceFile, importType) {
@@ -147526,10 +150902,6 @@
         codefix.registerCodeFix({
             errorCodes: errorCodes,
             getCodeActions: function (context) {
-                var jsx = context.program.getCompilerOptions().jsx;
-                if (jsx !== 2 /* React */ && jsx !== 3 /* ReactNative */) {
-                    return undefined;
-                }
                 var sourceFile = context.sourceFile, span = context.span;
                 var node = findNodeToFix(sourceFile, span.start);
                 if (!node)
@@ -147603,7 +150975,7 @@
     (function (codefix) {
         var fixIdAddMissingTypeof = "fixConvertToMappedObjectType";
         var fixId = fixIdAddMissingTypeof;
-        var errorCodes = [ts.Diagnostics.An_index_signature_parameter_type_cannot_be_a_union_type_Consider_using_a_mapped_object_type_instead.code];
+        var errorCodes = [ts.Diagnostics.An_index_signature_parameter_type_cannot_be_a_literal_type_or_generic_type_Consider_using_a_mapped_object_type_instead.code];
         codefix.registerCodeFix({
             errorCodes: errorCodes,
             getCodeActions: function (context) {
@@ -147639,11 +151011,11 @@
             var otherMembers = members.filter(function (member) { return !ts.isIndexSignatureDeclaration(member); });
             var parameter = ts.first(indexSignature.parameters);
             var mappedTypeParameter = ts.factory.createTypeParameterDeclaration(ts.cast(parameter.name, ts.isIdentifier), parameter.type);
-            var mappedIntersectionType = ts.factory.createMappedTypeNode(ts.hasEffectiveReadonlyModifier(indexSignature) ? ts.factory.createModifier(142 /* ReadonlyKeyword */) : undefined, mappedTypeParameter, 
+            var mappedIntersectionType = ts.factory.createMappedTypeNode(ts.hasEffectiveReadonlyModifier(indexSignature) ? ts.factory.createModifier(143 /* ReadonlyKeyword */) : undefined, mappedTypeParameter, 
             /*nameType*/ undefined, indexSignature.questionToken, indexSignature.type);
-            var intersectionType = ts.factory.createIntersectionTypeNode(__spreadArray(__spreadArray(__spreadArray([], ts.getAllSuperTypeNodes(container)), [
+            var intersectionType = ts.factory.createIntersectionTypeNode(__spreadArray(__spreadArray(__spreadArray([], ts.getAllSuperTypeNodes(container), true), [
                 mappedIntersectionType
-            ]), (otherMembers.length ? [ts.factory.createTypeLiteralNode(otherMembers)] : ts.emptyArray)));
+            ], false), (otherMembers.length ? [ts.factory.createTypeLiteralNode(otherMembers)] : ts.emptyArray), true));
             changes.replaceNode(sourceFile, container, createTypeAliasFromInterface(container, intersectionType));
         }
     })(codefix = ts.codefix || (ts.codefix = {}));
@@ -147696,7 +151068,7 @@
             },
         });
         function makeChange(changeTracker, sourceFile, span) {
-            var awaitKeyword = ts.tryCast(ts.getTokenAtPosition(sourceFile, span.start), function (node) { return node.kind === 130 /* AwaitKeyword */; });
+            var awaitKeyword = ts.tryCast(ts.getTokenAtPosition(sourceFile, span.start), function (node) { return node.kind === 131 /* AwaitKeyword */; });
             var awaitExpression = awaitKeyword && ts.tryCast(awaitKeyword.parent, ts.isAwaitExpression);
             if (!awaitExpression) {
                 return;
@@ -147707,7 +151079,7 @@
                 var leftMostExpression = ts.getLeftmostExpression(awaitExpression.expression, /*stopAtCallExpressions*/ false);
                 if (ts.isIdentifier(leftMostExpression)) {
                     var precedingToken = ts.findPrecedingToken(awaitExpression.parent.pos, sourceFile);
-                    if (precedingToken && precedingToken.kind !== 102 /* NewKeyword */) {
+                    if (precedingToken && precedingToken.kind !== 103 /* NewKeyword */) {
                         expressionToReplace = awaitExpression.parent;
                     }
                 }
@@ -147764,26 +151136,28 @@
             errorCodes: errorCodes,
             getCodeActions: function (context) {
                 var sourceFile = context.sourceFile, span = context.span, program = context.program;
-                var variableStatement = getVariableStatement(sourceFile, span.start, program);
-                var changes = ts.textChanges.ChangeTracker.with(context, function (t) { return doChange(t, sourceFile, variableStatement); });
+                var range = getConstTokenRange(sourceFile, span.start, program);
+                if (range === undefined)
+                    return;
+                var changes = ts.textChanges.ChangeTracker.with(context, function (t) { return doChange(t, sourceFile, range); });
                 return [codefix.createCodeFixAction(fixId, changes, ts.Diagnostics.Convert_const_to_let, fixId, ts.Diagnostics.Convert_const_to_let)];
             },
             fixIds: [fixId]
         });
-        function getVariableStatement(sourceFile, pos, program) {
-            var token = ts.getTokenAtPosition(sourceFile, pos);
+        function getConstTokenRange(sourceFile, pos, program) {
+            var _a;
             var checker = program.getTypeChecker();
-            var symbol = checker.getSymbolAtLocation(token);
-            if (symbol === null || symbol === void 0 ? void 0 : symbol.valueDeclaration) {
-                return symbol.valueDeclaration.parent.parent;
-            }
-        }
-        function doChange(changes, sourceFile, variableStatement) {
-            if (!variableStatement) {
+            var symbol = checker.getSymbolAtLocation(ts.getTokenAtPosition(sourceFile, pos));
+            var declaration = ts.tryCast((_a = symbol === null || symbol === void 0 ? void 0 : symbol.valueDeclaration) === null || _a === void 0 ? void 0 : _a.parent, ts.isVariableDeclarationList);
+            if (declaration === undefined)
                 return;
-            }
-            var start = variableStatement.getStart();
-            changes.replaceRangeWithText(sourceFile, { pos: start, end: start + 5 }, "let");
+            var constToken = ts.findChildOfKind(declaration, 85 /* ConstKeyword */, sourceFile);
+            if (constToken === undefined)
+                return;
+            return ts.createRange(constToken.pos, constToken.end);
+        }
+        function doChange(changes, sourceFile, range) {
+            changes.replaceRangeWithText(sourceFile, range, "let");
         }
     })(codefix = ts.codefix || (ts.codefix = {}));
 })(ts || (ts = {}));
@@ -147869,7 +151243,7 @@
                 // append ` | void` to type argument
                 var typeArgument = typeArguments[0];
                 var needsParens = !ts.isUnionTypeNode(typeArgument) && !ts.isParenthesizedTypeNode(typeArgument) &&
-                    ts.isParenthesizedTypeNode(ts.factory.createUnionTypeNode([typeArgument, ts.factory.createKeywordTypeNode(113 /* VoidKeyword */)]).types[0]);
+                    ts.isParenthesizedTypeNode(ts.factory.createUnionTypeNode([typeArgument, ts.factory.createKeywordTypeNode(114 /* VoidKeyword */)]).types[0]);
                 if (needsParens) {
                     changes.insertText(sourceFile, typeArgument.pos, "(");
                 }
@@ -147961,7 +151335,7 @@
         ;
         function getInfo(context, considerPartialSpans) {
             if (considerPartialSpans === void 0) { considerPartialSpans = true; }
-            var file = context.file;
+            var file = context.file, program = context.program;
             var span = ts.getRefactorContextSpan(context);
             var token = ts.getTokenAtPosition(file, span.start);
             var exportNode = !!(token.parent && ts.getSyntacticModifierFlags(token.parent) & 1 /* Export */) && considerPartialSpans ? token.parent : ts.getParentNodeInSpan(token, file, span);
@@ -147975,17 +151349,25 @@
             if (!(flags & 1 /* Export */) || !wasDefault && exportingModuleSymbol.exports.has("default" /* Default */)) {
                 return { error: ts.getLocaleSpecificMessage(ts.Diagnostics.This_file_already_has_a_default_export) };
             }
+            var checker = program.getTypeChecker();
+            var noSymbolError = function (id) {
+                return (ts.isIdentifier(id) && checker.getSymbolAtLocation(id)) ? undefined
+                    : { error: ts.getLocaleSpecificMessage(ts.Diagnostics.Can_only_convert_named_export) };
+            };
             switch (exportNode.kind) {
-                case 252 /* FunctionDeclaration */:
-                case 253 /* ClassDeclaration */:
-                case 254 /* InterfaceDeclaration */:
-                case 256 /* EnumDeclaration */:
-                case 255 /* TypeAliasDeclaration */:
-                case 257 /* ModuleDeclaration */: {
+                case 254 /* FunctionDeclaration */:
+                case 255 /* ClassDeclaration */:
+                case 256 /* InterfaceDeclaration */:
+                case 258 /* EnumDeclaration */:
+                case 257 /* TypeAliasDeclaration */:
+                case 259 /* ModuleDeclaration */: {
                     var node = exportNode;
-                    return node.name && ts.isIdentifier(node.name) ? { exportNode: node, exportName: node.name, wasDefault: wasDefault, exportingModuleSymbol: exportingModuleSymbol } : undefined;
+                    if (!node.name)
+                        return undefined;
+                    return noSymbolError(node.name)
+                        || { exportNode: node, exportName: node.name, wasDefault: wasDefault, exportingModuleSymbol: exportingModuleSymbol };
                 }
-                case 233 /* VariableStatement */: {
+                case 235 /* VariableStatement */: {
                     var vs = exportNode;
                     // Must be `export const x = something;`.
                     if (!(vs.declarationList.flags & 2 /* Const */) || vs.declarationList.declarations.length !== 1) {
@@ -147995,12 +151377,15 @@
                     if (!decl.initializer)
                         return undefined;
                     ts.Debug.assert(!wasDefault, "Can't have a default flag here");
-                    return ts.isIdentifier(decl.name) ? { exportNode: vs, exportName: decl.name, wasDefault: wasDefault, exportingModuleSymbol: exportingModuleSymbol } : undefined;
+                    return noSymbolError(decl.name)
+                        || { exportNode: vs, exportName: decl.name, wasDefault: wasDefault, exportingModuleSymbol: exportingModuleSymbol };
                 }
-                case 267 /* ExportAssignment */: {
+                case 269 /* ExportAssignment */: {
                     var node = exportNode;
-                    var exp = node.expression;
-                    return node.isExportEquals ? undefined : { exportNode: node, exportName: exp, wasDefault: wasDefault, exportingModuleSymbol: exportingModuleSymbol };
+                    if (node.isExportEquals)
+                        return undefined;
+                    return noSymbolError(node.expression)
+                        || { exportNode: node, exportName: node.expression, wasDefault: wasDefault, exportingModuleSymbol: exportingModuleSymbol };
                 }
                 default:
                     return undefined;
@@ -148019,18 +151404,18 @@
                     changes.replaceNode(exportingSourceFile, exportNode, ts.factory.createExportDeclaration(/*decorators*/ undefined, /*modifiers*/ undefined, /*isTypeOnly*/ false, ts.factory.createNamedExports([spec])));
                 }
                 else {
-                    changes.delete(exportingSourceFile, ts.Debug.checkDefined(ts.findModifier(exportNode, 87 /* DefaultKeyword */), "Should find a default keyword in modifier list"));
+                    changes.delete(exportingSourceFile, ts.Debug.checkDefined(ts.findModifier(exportNode, 88 /* DefaultKeyword */), "Should find a default keyword in modifier list"));
                 }
             }
             else {
-                var exportKeyword = ts.Debug.checkDefined(ts.findModifier(exportNode, 92 /* ExportKeyword */), "Should find an export keyword in modifier list");
+                var exportKeyword = ts.Debug.checkDefined(ts.findModifier(exportNode, 93 /* ExportKeyword */), "Should find an export keyword in modifier list");
                 switch (exportNode.kind) {
-                    case 252 /* FunctionDeclaration */:
-                    case 253 /* ClassDeclaration */:
-                    case 254 /* InterfaceDeclaration */:
-                        changes.insertNodeAfter(exportingSourceFile, exportKeyword, ts.factory.createToken(87 /* DefaultKeyword */));
+                    case 254 /* FunctionDeclaration */:
+                    case 255 /* ClassDeclaration */:
+                    case 256 /* InterfaceDeclaration */:
+                        changes.insertNodeAfter(exportingSourceFile, exportKeyword, ts.factory.createToken(88 /* DefaultKeyword */));
                         break;
-                    case 233 /* VariableStatement */:
+                    case 235 /* VariableStatement */:
                         // If 'x' isn't used in this file and doesn't have type definition, `export const x = 0;` --> `export default 0;`
                         var decl = ts.first(exportNode.declarationList.declarations);
                         if (!ts.FindAllReferences.Core.isSymbolReferencedInFile(exportName, checker, exportingSourceFile) && !decl.type) {
@@ -148039,9 +151424,9 @@
                             break;
                         }
                     // falls through
-                    case 256 /* EnumDeclaration */:
-                    case 255 /* TypeAliasDeclaration */:
-                    case 257 /* ModuleDeclaration */:
+                    case 258 /* EnumDeclaration */:
+                    case 257 /* TypeAliasDeclaration */:
+                    case 259 /* ModuleDeclaration */:
                         // `export type T = number;` -> `type T = number; export default T;`
                         changes.deleteModifier(exportingSourceFile, exportKeyword);
                         changes.insertNodeAfter(exportingSourceFile, exportNode, ts.factory.createExportDefault(ts.factory.createIdentifier(exportName.text)));
@@ -148068,18 +151453,18 @@
         function changeDefaultToNamedImport(importingSourceFile, ref, changes, exportName) {
             var parent = ref.parent;
             switch (parent.kind) {
-                case 202 /* PropertyAccessExpression */:
+                case 204 /* PropertyAccessExpression */:
                     // `a.default` --> `a.foo`
                     changes.replaceNode(importingSourceFile, ref, ts.factory.createIdentifier(exportName));
                     break;
-                case 266 /* ImportSpecifier */:
-                case 271 /* ExportSpecifier */: {
+                case 268 /* ImportSpecifier */:
+                case 273 /* ExportSpecifier */: {
                     var spec = parent;
                     // `default as foo` --> `foo`, `default as bar` --> `foo as bar`
                     changes.replaceNode(importingSourceFile, spec, makeImportSpecifier(exportName, spec.name.text));
                     break;
                 }
-                case 263 /* ImportClause */: {
+                case 265 /* ImportClause */: {
                     var clause = parent;
                     ts.Debug.assert(clause.name === ref, "Import clause name should match provided ref");
                     var spec = makeImportSpecifier(exportName, ref.text);
@@ -148088,7 +151473,7 @@
                         // `import foo from "./a";` --> `import { foo } from "./a";`
                         changes.replaceNode(importingSourceFile, ref, ts.factory.createNamedImports([spec]));
                     }
-                    else if (namedBindings.kind === 264 /* NamespaceImport */) {
+                    else if (namedBindings.kind === 266 /* NamespaceImport */) {
                         // `import foo, * as a from "./a";` --> `import * as a from ".a/"; import { foo } from "./a";`
                         changes.deleteRange(importingSourceFile, { pos: ref.getStart(importingSourceFile), end: namedBindings.getStart(importingSourceFile) });
                         var quotePreference = ts.isStringLiteral(clause.parent.moduleSpecifier) ? ts.quotePreferenceFromString(clause.parent.moduleSpecifier, importingSourceFile) : 1 /* Double */;
@@ -148109,11 +151494,11 @@
         function changeNamedToDefaultImport(importingSourceFile, ref, changes) {
             var parent = ref.parent;
             switch (parent.kind) {
-                case 202 /* PropertyAccessExpression */:
+                case 204 /* PropertyAccessExpression */:
                     // `a.foo` --> `a.default`
                     changes.replaceNode(importingSourceFile, ref, ts.factory.createIdentifier("default"));
                     break;
-                case 266 /* ImportSpecifier */: {
+                case 268 /* ImportSpecifier */: {
                     // `import { foo } from "./a";` --> `import foo from "./a";`
                     // `import { foo as bar } from "./a";` --> `import bar from "./a";`
                     var defaultImport = ts.factory.createIdentifier(parent.name.text);
@@ -148126,7 +151511,7 @@
                     }
                     break;
                 }
-                case 271 /* ExportSpecifier */: {
+                case 273 /* ExportSpecifier */: {
                     // `export { foo } from "./a";` --> `export { default as foo } from "./a";`
                     // `export { foo as bar } from "./a";` --> `export { default as bar } from "./a";`
                     // `export { foo as default } from "./a";` --> `export { default } from "./a";`
@@ -148172,7 +151557,7 @@
                 if (!info)
                     return ts.emptyArray;
                 if (!refactor.isRefactorErrorInfo(info)) {
-                    var namespaceImport = info.kind === 264 /* NamespaceImport */;
+                    var namespaceImport = info.kind === 266 /* NamespaceImport */;
                     var action = namespaceImport ? namespaceToNamedAction : namedToNamespaceAction;
                     return [{ name: refactorName, description: action.description, actions: [action] }];
                 }
@@ -148216,7 +151601,7 @@
         }
         function doChange(sourceFile, program, changes, toConvert) {
             var checker = program.getTypeChecker();
-            if (toConvert.kind === 264 /* NamespaceImport */) {
+            if (toConvert.kind === 266 /* NamespaceImport */) {
                 doChangeNamespaceToNamed(sourceFile, checker, changes, toConvert, ts.getAllowSyntheticDefaultImports(program.getCompilerOptions()));
             }
             else {
@@ -148273,14 +151658,35 @@
         function doChangeNamedToNamespace(sourceFile, checker, changes, toConvert) {
             var importDecl = toConvert.parent.parent;
             var moduleSpecifier = importDecl.moduleSpecifier;
-            var preferredName = moduleSpecifier && ts.isStringLiteral(moduleSpecifier) ? ts.codefix.moduleSpecifierToValidIdentifier(moduleSpecifier.text, 99 /* ESNext */) : "module";
-            var namespaceNameConflicts = toConvert.elements.some(function (element) {
-                return ts.FindAllReferences.Core.eachSymbolReferenceInFile(element.name, checker, sourceFile, function (id) {
-                    return !!checker.resolveName(preferredName, id, 67108863 /* All */, /*excludeGlobals*/ true);
-                }) || false;
+            var toConvertSymbols = new ts.Set();
+            toConvert.elements.forEach(function (namedImport) {
+                var symbol = checker.getSymbolAtLocation(namedImport.name);
+                if (symbol) {
+                    toConvertSymbols.add(symbol);
+                }
             });
+            var preferredName = moduleSpecifier && ts.isStringLiteral(moduleSpecifier) ? ts.codefix.moduleSpecifierToValidIdentifier(moduleSpecifier.text, 99 /* ESNext */) : "module";
+            function hasNamespaceNameConflict(namedImport) {
+                // We need to check if the preferred namespace name (`preferredName`) we'd like to use in the refactored code will present a name conflict.
+                // A name conflict means that, in a scope where we would like to use the preferred namespace name, there already exists a symbol with that name in that scope.
+                // We are going to use the namespace name in the scopes the named imports being refactored are referenced,
+                // so we look for conflicts by looking at every reference to those named imports.
+                return !!ts.FindAllReferences.Core.eachSymbolReferenceInFile(namedImport.name, checker, sourceFile, function (id) {
+                    var symbol = checker.resolveName(preferredName, id, 67108863 /* All */, /*excludeGlobals*/ true);
+                    if (symbol) { // There already is a symbol with the same name as the preferred namespace name.
+                        if (toConvertSymbols.has(symbol)) { // `preferredName` resolves to a symbol for one of the named import references we are going to transform into namespace import references...
+                            return ts.isExportSpecifier(id.parent); // ...but if this reference is an export specifier, it will not be transformed, so it is a conflict; otherwise, it will be renamed and is not a conflict.
+                        }
+                        return true; // `preferredName` resolves to any other symbol, which will be present in the refactored code and so poses a name conflict.
+                    }
+                    return false; // There is no symbol with the same name as the preferred namespace name, so no conflict.
+                });
+            }
+            var namespaceNameConflicts = toConvert.elements.some(hasNamespaceNameConflict);
             var namespaceImportName = namespaceNameConflicts ? ts.getUniqueName(preferredName, sourceFile) : preferredName;
-            var neededNamedImports = [];
+            // Imports that need to be kept as named imports in the refactored code, to avoid changing the semantics.
+            // More specifically, those are named imports that appear in named exports in the original code, e.g. `a` in `import { a } from "m"; export { a }`.
+            var neededNamedImports = new ts.Set();
             var _loop_16 = function (element) {
                 var propertyName = (element.propertyName || element.name).text;
                 ts.FindAllReferences.Core.eachSymbolReferenceInFile(element.name, checker, sourceFile, function (id) {
@@ -148288,10 +151694,8 @@
                     if (ts.isShorthandPropertyAssignment(id.parent)) {
                         changes.replaceNode(sourceFile, id.parent, ts.factory.createPropertyAssignment(id.text, access));
                     }
-                    else if (ts.isExportSpecifier(id.parent) && !id.parent.propertyName) {
-                        if (!neededNamedImports.some(function (n) { return n.name === element.name; })) {
-                            neededNamedImports.push(ts.factory.createImportSpecifier(element.propertyName && ts.factory.createIdentifier(element.propertyName.text), ts.factory.createIdentifier(element.name.text)));
-                        }
+                    else if (ts.isExportSpecifier(id.parent)) {
+                        neededNamedImports.add(element);
                     }
                     else {
                         changes.replaceNode(sourceFile, id, access);
@@ -148303,8 +151707,11 @@
                 _loop_16(element);
             }
             changes.replaceNode(sourceFile, toConvert, ts.factory.createNamespaceImport(ts.factory.createIdentifier(namespaceImportName)));
-            if (neededNamedImports.length) {
-                changes.insertNodeAfter(sourceFile, toConvert.parent.parent, updateImport(importDecl, /*defaultImportName*/ undefined, neededNamedImports));
+            if (neededNamedImports.size) {
+                var newNamedImports = ts.arrayFrom(neededNamedImports.values()).map(function (element) {
+                    return ts.factory.createImportSpecifier(element.propertyName && ts.factory.createIdentifier(element.propertyName.text), ts.factory.createIdentifier(element.name.text));
+                });
+                changes.insertNodeAfter(sourceFile, toConvert.parent.parent, updateImport(importDecl, /*defaultImportName*/ undefined, newNamedImports));
             }
         }
         function updateImport(old, defaultImportName, elements) {
@@ -148617,27 +152024,27 @@
                 var lastDeclaration = signatureDecls[signatureDecls.length - 1];
                 var updated = lastDeclaration;
                 switch (lastDeclaration.kind) {
-                    case 165 /* MethodSignature */: {
+                    case 166 /* MethodSignature */: {
                         updated = ts.factory.updateMethodSignature(lastDeclaration, lastDeclaration.modifiers, lastDeclaration.name, lastDeclaration.questionToken, lastDeclaration.typeParameters, getNewParametersForCombinedSignature(signatureDecls), lastDeclaration.type);
                         break;
                     }
-                    case 166 /* MethodDeclaration */: {
+                    case 167 /* MethodDeclaration */: {
                         updated = ts.factory.updateMethodDeclaration(lastDeclaration, lastDeclaration.decorators, lastDeclaration.modifiers, lastDeclaration.asteriskToken, lastDeclaration.name, lastDeclaration.questionToken, lastDeclaration.typeParameters, getNewParametersForCombinedSignature(signatureDecls), lastDeclaration.type, lastDeclaration.body);
                         break;
                     }
-                    case 170 /* CallSignature */: {
+                    case 172 /* CallSignature */: {
                         updated = ts.factory.updateCallSignature(lastDeclaration, lastDeclaration.typeParameters, getNewParametersForCombinedSignature(signatureDecls), lastDeclaration.type);
                         break;
                     }
-                    case 167 /* Constructor */: {
+                    case 169 /* Constructor */: {
                         updated = ts.factory.updateConstructorDeclaration(lastDeclaration, lastDeclaration.decorators, lastDeclaration.modifiers, getNewParametersForCombinedSignature(signatureDecls), lastDeclaration.body);
                         break;
                     }
-                    case 171 /* ConstructSignature */: {
+                    case 173 /* ConstructSignature */: {
                         updated = ts.factory.updateConstructSignature(lastDeclaration, lastDeclaration.typeParameters, getNewParametersForCombinedSignature(signatureDecls), lastDeclaration.type);
                         break;
                     }
-                    case 252 /* FunctionDeclaration */: {
+                    case 254 /* FunctionDeclaration */: {
                         updated = ts.factory.updateFunctionDeclaration(lastDeclaration, lastDeclaration.decorators, lastDeclaration.modifiers, lastDeclaration.asteriskToken, lastDeclaration.name, lastDeclaration.typeParameters, getNewParametersForCombinedSignature(signatureDecls), lastDeclaration.type, lastDeclaration.body);
                         break;
                     }
@@ -148669,7 +152076,7 @@
                 }
                 function convertParameterToNamedTupleMember(p) {
                     ts.Debug.assert(ts.isIdentifier(p.name)); // This is checked during refactoring applicability checking
-                    var result = ts.setTextRange(ts.factory.createNamedTupleMember(p.dotDotDotToken, p.name, p.questionToken, p.type || ts.factory.createKeywordTypeNode(128 /* AnyKeyword */)), p);
+                    var result = ts.setTextRange(ts.factory.createNamedTupleMember(p.dotDotDotToken, p.name, p.questionToken, p.type || ts.factory.createKeywordTypeNode(129 /* AnyKeyword */)), p);
                     var parameterDocComment = p.symbol && p.symbol.getDocumentationComment(checker);
                     if (parameterDocComment) {
                         var newComment = ts.displayPartsToString(parameterDocComment);
@@ -148689,12 +152096,12 @@
             }
             function isConvertableSignatureDeclaration(d) {
                 switch (d.kind) {
-                    case 165 /* MethodSignature */:
-                    case 166 /* MethodDeclaration */:
-                    case 170 /* CallSignature */:
-                    case 167 /* Constructor */:
-                    case 171 /* ConstructSignature */:
-                    case 252 /* FunctionDeclaration */:
+                    case 166 /* MethodSignature */:
+                    case 167 /* MethodDeclaration */:
+                    case 172 /* CallSignature */:
+                    case 169 /* Constructor */:
+                    case 173 /* ConstructSignature */:
+                    case 254 /* FunctionDeclaration */:
                         return true;
                 }
                 return false;
@@ -148946,7 +152353,6 @@
                 Messages.cannotExtractReadonlyPropertyInitializerOutsideConstructor = createMessage("Cannot move initialization of read-only class property outside of the constructor");
                 Messages.cannotExtractAmbientBlock = createMessage("Cannot extract code from ambient contexts");
                 Messages.cannotAccessVariablesFromNestedScopes = createMessage("Cannot access variables from nested scopes");
-                Messages.cannotExtractToOtherFunctionLike = createMessage("Cannot extract method to a function-like scope that is not a function");
                 Messages.cannotExtractToJSClass = createMessage("Cannot extract constant to a class scope in JS");
                 Messages.cannotExtractToExpressionArrowFunction = createMessage("Cannot extract constant to an arrow function without a block");
             })(Messages = extractSymbol.Messages || (extractSymbol.Messages = {}));
@@ -149084,21 +152490,21 @@
                 function checkForStaticContext(nodeToCheck, containingClass) {
                     var current = nodeToCheck;
                     while (current !== containingClass) {
-                        if (current.kind === 164 /* PropertyDeclaration */) {
-                            if (ts.hasSyntacticModifier(current, 32 /* Static */)) {
+                        if (current.kind === 165 /* PropertyDeclaration */) {
+                            if (ts.isStatic(current)) {
                                 rangeFacts |= RangeFacts.InStaticRegion;
                             }
                             break;
                         }
-                        else if (current.kind === 161 /* Parameter */) {
+                        else if (current.kind === 162 /* Parameter */) {
                             var ctorOrMethod = ts.getContainingFunction(current);
-                            if (ctorOrMethod.kind === 167 /* Constructor */) {
+                            if (ctorOrMethod.kind === 169 /* Constructor */) {
                                 rangeFacts |= RangeFacts.InStaticRegion;
                             }
                             break;
                         }
-                        else if (current.kind === 166 /* MethodDeclaration */) {
-                            if (ts.hasSyntacticModifier(current, 32 /* Static */)) {
+                        else if (current.kind === 167 /* MethodDeclaration */) {
+                            if (ts.isStatic(current)) {
                                 rangeFacts |= RangeFacts.InStaticRegion;
                             }
                         }
@@ -149140,7 +152546,7 @@
                             return true;
                         }
                         if (ts.isDeclaration(node)) {
-                            var declaringNode = (node.kind === 250 /* VariableDeclaration */) ? node.parent.parent : node;
+                            var declaringNode = (node.kind === 252 /* VariableDeclaration */) ? node.parent.parent : node;
                             if (ts.hasSyntacticModifier(declaringNode, 1 /* Export */)) {
                                 // TODO: GH#18217 Silly to use `errors ||` since it's definitely not defined (see top of `visit`)
                                 // Also, if we're only pushing one error, just use `let error: Diagnostic | undefined`!
@@ -149152,16 +152558,16 @@
                         }
                         // Some things can't be extracted in certain situations
                         switch (node.kind) {
-                            case 262 /* ImportDeclaration */:
+                            case 264 /* ImportDeclaration */:
                                 (errors || (errors = [])).push(ts.createDiagnosticForNode(node, Messages.cannotExtractImport));
                                 return true;
-                            case 267 /* ExportAssignment */:
+                            case 269 /* ExportAssignment */:
                                 (errors || (errors = [])).push(ts.createDiagnosticForNode(node, Messages.cannotExtractExportedEntity));
                                 return true;
-                            case 105 /* SuperKeyword */:
+                            case 106 /* SuperKeyword */:
                                 // For a super *constructor call*, we have to be extracting the entire class,
                                 // but a super *method call* simply implies a 'this' reference
-                                if (node.parent.kind === 204 /* CallExpression */) {
+                                if (node.parent.kind === 206 /* CallExpression */) {
                                     // Super constructor call
                                     var containingClass_1 = ts.getContainingClass(node); // TODO:GH#18217
                                     if (containingClass_1.pos < span.start || containingClass_1.end >= (span.start + span.length)) {
@@ -149173,7 +152579,7 @@
                                     rangeFacts |= RangeFacts.UsesThis;
                                 }
                                 break;
-                            case 210 /* ArrowFunction */:
+                            case 212 /* ArrowFunction */:
                                 // check if arrow function uses this
                                 ts.forEachChild(node, function check(n) {
                                     if (ts.isThis(n)) {
@@ -149187,39 +152593,39 @@
                                     }
                                 });
                             // falls through
-                            case 253 /* ClassDeclaration */:
-                            case 252 /* FunctionDeclaration */:
+                            case 255 /* ClassDeclaration */:
+                            case 254 /* FunctionDeclaration */:
                                 if (ts.isSourceFile(node.parent) && node.parent.externalModuleIndicator === undefined) {
                                     // You cannot extract global declarations
                                     (errors || (errors = [])).push(ts.createDiagnosticForNode(node, Messages.functionWillNotBeVisibleInTheNewScope));
                                 }
                             // falls through
-                            case 222 /* ClassExpression */:
-                            case 209 /* FunctionExpression */:
-                            case 166 /* MethodDeclaration */:
-                            case 167 /* Constructor */:
-                            case 168 /* GetAccessor */:
-                            case 169 /* SetAccessor */:
+                            case 224 /* ClassExpression */:
+                            case 211 /* FunctionExpression */:
+                            case 167 /* MethodDeclaration */:
+                            case 169 /* Constructor */:
+                            case 170 /* GetAccessor */:
+                            case 171 /* SetAccessor */:
                                 // do not dive into functions or classes
                                 return false;
                         }
                         var savedPermittedJumps = permittedJumps;
                         switch (node.kind) {
-                            case 235 /* IfStatement */:
+                            case 237 /* IfStatement */:
                                 permittedJumps = 0 /* None */;
                                 break;
-                            case 248 /* TryStatement */:
+                            case 250 /* TryStatement */:
                                 // forbid all jumps inside try blocks
                                 permittedJumps = 0 /* None */;
                                 break;
-                            case 231 /* Block */:
-                                if (node.parent && node.parent.kind === 248 /* TryStatement */ && node.parent.finallyBlock === node) {
+                            case 233 /* Block */:
+                                if (node.parent && node.parent.kind === 250 /* TryStatement */ && node.parent.finallyBlock === node) {
                                     // allow unconditional returns from finally blocks
                                     permittedJumps = 4 /* Return */;
                                 }
                                 break;
-                            case 286 /* DefaultClause */:
-                            case 285 /* CaseClause */:
+                            case 288 /* DefaultClause */:
+                            case 287 /* CaseClause */:
                                 // allow unlabeled break inside case clauses
                                 permittedJumps |= 1 /* Break */;
                                 break;
@@ -149231,19 +152637,19 @@
                                 break;
                         }
                         switch (node.kind) {
-                            case 188 /* ThisType */:
-                            case 107 /* ThisKeyword */:
+                            case 190 /* ThisType */:
+                            case 108 /* ThisKeyword */:
                                 rangeFacts |= RangeFacts.UsesThis;
                                 break;
-                            case 246 /* LabeledStatement */: {
+                            case 248 /* LabeledStatement */: {
                                 var label = node.label;
                                 (seenLabels || (seenLabels = [])).push(label.escapedText);
                                 ts.forEachChild(node, visit);
                                 seenLabels.pop();
                                 break;
                             }
-                            case 242 /* BreakStatement */:
-                            case 241 /* ContinueStatement */: {
+                            case 244 /* BreakStatement */:
+                            case 243 /* ContinueStatement */: {
                                 var label = node.label;
                                 if (label) {
                                     if (!ts.contains(seenLabels, label.escapedText)) {
@@ -149252,20 +152658,20 @@
                                     }
                                 }
                                 else {
-                                    if (!(permittedJumps & (node.kind === 242 /* BreakStatement */ ? 1 /* Break */ : 2 /* Continue */))) {
+                                    if (!(permittedJumps & (node.kind === 244 /* BreakStatement */ ? 1 /* Break */ : 2 /* Continue */))) {
                                         // attempt to break or continue in a forbidden context
                                         (errors || (errors = [])).push(ts.createDiagnosticForNode(node, Messages.cannotExtractRangeContainingConditionalBreakOrContinueStatements));
                                     }
                                 }
                                 break;
                             }
-                            case 214 /* AwaitExpression */:
+                            case 216 /* AwaitExpression */:
                                 rangeFacts |= RangeFacts.IsAsyncFunction;
                                 break;
-                            case 220 /* YieldExpression */:
+                            case 222 /* YieldExpression */:
                                 rangeFacts |= RangeFacts.IsGenerator;
                                 break;
-                            case 243 /* ReturnStatement */:
+                            case 245 /* ReturnStatement */:
                                 if (permittedJumps & 4 /* Return */) {
                                     rangeFacts |= RangeFacts.HasReturn;
                                 }
@@ -149331,7 +152737,7 @@
                 while (true) {
                     current = current.parent;
                     // A function parameter's initializer is actually in the outer scope, not the function declaration
-                    if (current.kind === 161 /* Parameter */) {
+                    if (current.kind === 162 /* Parameter */) {
                         // Skip all the way to the outer scope of the function that declared this parameter
                         current = ts.findAncestor(current, function (parent) { return ts.isFunctionLikeDeclaration(parent); }).parent;
                     }
@@ -149342,7 +152748,7 @@
                     //  * Module/namespace or source file
                     if (isScope(current)) {
                         scopes.push(current);
-                        if (current.kind === 298 /* SourceFile */) {
+                        if (current.kind === 300 /* SourceFile */) {
                             return scopes;
                         }
                     }
@@ -149432,32 +152838,32 @@
             }
             function getDescriptionForFunctionLikeDeclaration(scope) {
                 switch (scope.kind) {
-                    case 167 /* Constructor */:
+                    case 169 /* Constructor */:
                         return "constructor";
-                    case 209 /* FunctionExpression */:
-                    case 252 /* FunctionDeclaration */:
+                    case 211 /* FunctionExpression */:
+                    case 254 /* FunctionDeclaration */:
                         return scope.name
                             ? "function '" + scope.name.text + "'"
                             : ts.ANONYMOUS;
-                    case 210 /* ArrowFunction */:
+                    case 212 /* ArrowFunction */:
                         return "arrow function";
-                    case 166 /* MethodDeclaration */:
+                    case 167 /* MethodDeclaration */:
                         return "method '" + scope.name.getText() + "'";
-                    case 168 /* GetAccessor */:
+                    case 170 /* GetAccessor */:
                         return "'get " + scope.name.getText() + "'";
-                    case 169 /* SetAccessor */:
+                    case 171 /* SetAccessor */:
                         return "'set " + scope.name.getText() + "'";
                     default:
                         throw ts.Debug.assertNever(scope, "Unexpected scope kind " + scope.kind);
                 }
             }
             function getDescriptionForClassLikeDeclaration(scope) {
-                return scope.kind === 253 /* ClassDeclaration */
+                return scope.kind === 255 /* ClassDeclaration */
                     ? scope.name ? "class '" + scope.name.text + "'" : "anonymous class declaration"
                     : scope.name ? "class expression '" + scope.name.text + "'" : "anonymous class expression";
             }
             function getDescriptionForModuleLikeDeclaration(scope) {
-                return scope.kind === 258 /* ModuleBlock */
+                return scope.kind === 260 /* ModuleBlock */
                     ? "namespace '" + scope.parent.name.getText() + "'"
                     : scope.externalModuleIndicator ? 0 /* Module */ : 1 /* Global */;
             }
@@ -149525,12 +152931,12 @@
                 var newFunction;
                 if (ts.isClassLike(scope)) {
                     // always create private method in TypeScript files
-                    var modifiers = isJS ? [] : [ts.factory.createModifier(120 /* PrivateKeyword */)];
+                    var modifiers = isJS ? [] : [ts.factory.createModifier(121 /* PrivateKeyword */)];
                     if (range.facts & RangeFacts.InStaticRegion) {
-                        modifiers.push(ts.factory.createModifier(123 /* StaticKeyword */));
+                        modifiers.push(ts.factory.createModifier(124 /* StaticKeyword */));
                     }
                     if (range.facts & RangeFacts.IsAsyncFunction) {
-                        modifiers.push(ts.factory.createModifier(129 /* AsyncKeyword */));
+                        modifiers.push(ts.factory.createModifier(130 /* AsyncKeyword */));
                     }
                     newFunction = ts.factory.createMethodDeclaration(
                     /*decorators*/ undefined, modifiers.length ? modifiers : undefined, range.facts & RangeFacts.IsGenerator ? ts.factory.createToken(41 /* AsteriskToken */) : undefined, functionName, 
@@ -149538,7 +152944,7 @@
                 }
                 else {
                     newFunction = ts.factory.createFunctionDeclaration(
-                    /*decorators*/ undefined, range.facts & RangeFacts.IsAsyncFunction ? [ts.factory.createToken(129 /* AsyncKeyword */)] : undefined, range.facts & RangeFacts.IsGenerator ? ts.factory.createToken(41 /* AsteriskToken */) : undefined, functionName, typeParameters, parameters, returnType, body);
+                    /*decorators*/ undefined, range.facts & RangeFacts.IsAsyncFunction ? [ts.factory.createToken(130 /* AsyncKeyword */)] : undefined, range.facts & RangeFacts.IsGenerator ? ts.factory.createToken(41 /* AsteriskToken */) : undefined, functionName, typeParameters, parameters, returnType, body);
                 }
                 var changeTracker = ts.textChanges.ChangeTracker.fromContext(context);
                 var minInsertionPos = (isReadonlyArray(range.range) ? ts.last(range.range) : range.range).end;
@@ -149683,9 +153089,9 @@
                     while (ts.isParenthesizedTypeNode(withoutParens)) {
                         withoutParens = withoutParens.type;
                     }
-                    return ts.isUnionTypeNode(withoutParens) && ts.find(withoutParens.types, function (t) { return t.kind === 150 /* UndefinedKeyword */; })
+                    return ts.isUnionTypeNode(withoutParens) && ts.find(withoutParens.types, function (t) { return t.kind === 151 /* UndefinedKeyword */; })
                         ? clone
-                        : ts.factory.createUnionTypeNode([clone, ts.factory.createKeywordTypeNode(150 /* UndefinedKeyword */)]);
+                        : ts.factory.createUnionTypeNode([clone, ts.factory.createKeywordTypeNode(151 /* UndefinedKeyword */)]);
                 }
             }
             /**
@@ -149710,11 +153116,11 @@
                 if (ts.isClassLike(scope)) {
                     ts.Debug.assert(!isJS, "Cannot extract to a JS class"); // See CannotExtractToJSClass
                     var modifiers = [];
-                    modifiers.push(ts.factory.createModifier(120 /* PrivateKeyword */));
+                    modifiers.push(ts.factory.createModifier(121 /* PrivateKeyword */));
                     if (rangeFacts & RangeFacts.InStaticRegion) {
-                        modifiers.push(ts.factory.createModifier(123 /* StaticKeyword */));
+                        modifiers.push(ts.factory.createModifier(124 /* StaticKeyword */));
                     }
-                    modifiers.push(ts.factory.createModifier(142 /* ReadonlyKeyword */));
+                    modifiers.push(ts.factory.createModifier(143 /* ReadonlyKeyword */));
                     var newVariable = ts.factory.createPropertyDeclaration(
                     /*decorators*/ undefined, modifiers, localNameText, 
                     /*questionToken*/ undefined, variableType, initializer);
@@ -149746,7 +153152,7 @@
                         var localReference = ts.factory.createIdentifier(localNameText);
                         changeTracker.replaceNode(context.file, node, localReference);
                     }
-                    else if (node.parent.kind === 234 /* ExpressionStatement */ && scope === ts.findAncestor(node, isScope)) {
+                    else if (node.parent.kind === 236 /* ExpressionStatement */ && scope === ts.findAncestor(node, isScope)) {
                         // If the parent is an expression statement and the target scope is the immediately enclosing one,
                         // replace the statement with the declaration.
                         var newVariableStatement = ts.factory.createVariableStatement(
@@ -149765,7 +153171,7 @@
                             changeTracker.insertNodeBefore(context.file, nodeToInsertBefore, newVariableStatement, /*blankLineBetween*/ false);
                         }
                         // Consume
-                        if (node.parent.kind === 234 /* ExpressionStatement */) {
+                        if (node.parent.kind === 236 /* ExpressionStatement */) {
                             // If the parent is an expression statement, delete it.
                             changeTracker.delete(context.file, node.parent);
                         }
@@ -150092,9 +153498,7 @@
                     var scope = scopes_1[_i];
                     usagesPerScope.push({ usages: new ts.Map(), typeParameterUsages: new ts.Map(), substitutions: new ts.Map() });
                     substitutionsPerScope.push(new ts.Map());
-                    functionErrorsPerScope.push(ts.isFunctionLikeDeclaration(scope) && scope.kind !== 252 /* FunctionDeclaration */
-                        ? [ts.createDiagnosticForNode(scope, Messages.cannotExtractToOtherFunctionLike)]
-                        : []);
+                    functionErrorsPerScope.push([]);
                     var constantErrors = [];
                     if (expressionDiagnostic) {
                         constantErrors.push(expressionDiagnostic);
@@ -150411,37 +153815,37 @@
             function isExtractableExpression(node) {
                 var parent = node.parent;
                 switch (parent.kind) {
-                    case 292 /* EnumMember */:
+                    case 294 /* EnumMember */:
                         return false;
                 }
                 switch (node.kind) {
                     case 10 /* StringLiteral */:
-                        return parent.kind !== 262 /* ImportDeclaration */ &&
-                            parent.kind !== 266 /* ImportSpecifier */;
-                    case 221 /* SpreadElement */:
-                    case 197 /* ObjectBindingPattern */:
-                    case 199 /* BindingElement */:
+                        return parent.kind !== 264 /* ImportDeclaration */ &&
+                            parent.kind !== 268 /* ImportSpecifier */;
+                    case 223 /* SpreadElement */:
+                    case 199 /* ObjectBindingPattern */:
+                    case 201 /* BindingElement */:
                         return false;
-                    case 78 /* Identifier */:
-                        return parent.kind !== 199 /* BindingElement */ &&
-                            parent.kind !== 266 /* ImportSpecifier */ &&
-                            parent.kind !== 271 /* ExportSpecifier */;
+                    case 79 /* Identifier */:
+                        return parent.kind !== 201 /* BindingElement */ &&
+                            parent.kind !== 268 /* ImportSpecifier */ &&
+                            parent.kind !== 273 /* ExportSpecifier */;
                 }
                 return true;
             }
             function isBlockLike(node) {
                 switch (node.kind) {
-                    case 231 /* Block */:
-                    case 298 /* SourceFile */:
-                    case 258 /* ModuleBlock */:
-                    case 285 /* CaseClause */:
+                    case 233 /* Block */:
+                    case 300 /* SourceFile */:
+                    case 260 /* ModuleBlock */:
+                    case 287 /* CaseClause */:
                         return true;
                     default:
                         return false;
                 }
             }
             function isInJSXContent(node) {
-                return (ts.isJsxElement(node) || ts.isJsxSelfClosingElement(node) || ts.isJsxFragment(node)) && ts.isJsxElement(node.parent);
+                return (ts.isJsxElement(node) || ts.isJsxSelfClosingElement(node) || ts.isJsxFragment(node)) && (ts.isJsxElement(node.parent) || ts.isJsxFragment(node.parent));
             }
         })(extractSymbol = refactor.extractSymbol || (refactor.extractSymbol = {}));
     })(refactor = ts.refactor || (ts.refactor = {}));
@@ -150819,11 +154223,11 @@
         }
         function isPureImport(node) {
             switch (node.kind) {
-                case 262 /* ImportDeclaration */:
+                case 264 /* ImportDeclaration */:
                     return true;
-                case 261 /* ImportEqualsDeclaration */:
+                case 263 /* ImportEqualsDeclaration */:
                     return !ts.hasSyntacticModifier(node, 1 /* Export */);
-                case 233 /* VariableStatement */:
+                case 235 /* VariableStatement */:
                     return node.declarationList.declarations.every(function (d) { return !!d.initializer && ts.isRequireCall(d.initializer, /*checkArgumentIsStringLiteralLike*/ true); });
                 default:
                     return false;
@@ -150848,7 +154252,7 @@
             var prologueDirectives = ts.takeWhile(oldFile.statements, ts.isPrologueDirective);
             if (!oldFile.externalModuleIndicator && !oldFile.commonJsModuleIndicator) {
                 deleteMovedStatements(oldFile, toMove.ranges, changes);
-                return __spreadArray(__spreadArray([], prologueDirectives), toMove.all);
+                return __spreadArray(__spreadArray([], prologueDirectives, true), toMove.all, true);
             }
             var useEs6ModuleSyntax = !!oldFile.externalModuleIndicator;
             var quotePreference = ts.getQuotePreference(oldFile, preferences);
@@ -150862,11 +154266,11 @@
             var imports = getNewFileImportsAndAddExportInOldFile(oldFile, usage.oldImportsNeededByNewFile, usage.newFileImportsFromOldFile, changes, checker, useEs6ModuleSyntax, quotePreference);
             var body = addExports(oldFile, toMove.all, usage.oldFileImportsFromNewFile, useEs6ModuleSyntax);
             if (imports.length && body.length) {
-                return __spreadArray(__spreadArray(__spreadArray(__spreadArray([], prologueDirectives), imports), [
+                return __spreadArray(__spreadArray(__spreadArray(__spreadArray([], prologueDirectives, true), imports, true), [
                     4 /* NewLineTrivia */
-                ]), body);
+                ], false), body, true);
             }
-            return __spreadArray(__spreadArray(__spreadArray([], prologueDirectives), imports), body);
+            return __spreadArray(__spreadArray(__spreadArray([], prologueDirectives, true), imports, true), body, true);
         }
         function deleteMovedStatements(sourceFile, moved, changes) {
             for (var _i = 0, moved_1 = moved; _i < moved_1.length; _i++) {
@@ -150919,12 +154323,12 @@
         }
         function getNamespaceLikeImport(node) {
             switch (node.kind) {
-                case 262 /* ImportDeclaration */:
-                    return node.importClause && node.importClause.namedBindings && node.importClause.namedBindings.kind === 264 /* NamespaceImport */ ?
+                case 264 /* ImportDeclaration */:
+                    return node.importClause && node.importClause.namedBindings && node.importClause.namedBindings.kind === 266 /* NamespaceImport */ ?
                         node.importClause.namedBindings.name : undefined;
-                case 261 /* ImportEqualsDeclaration */:
+                case 263 /* ImportEqualsDeclaration */:
                     return node.name;
-                case 250 /* VariableDeclaration */:
+                case 252 /* VariableDeclaration */:
                     return ts.tryCast(node.name, ts.isIdentifier);
                 default:
                     return ts.Debug.assertNever(node, "Unexpected node kind " + node.kind);
@@ -150955,20 +154359,20 @@
             var newNamespaceId = ts.factory.createIdentifier(newNamespaceName);
             var newModuleString = ts.factory.createStringLiteral(newModuleSpecifier);
             switch (node.kind) {
-                case 262 /* ImportDeclaration */:
+                case 264 /* ImportDeclaration */:
                     return ts.factory.createImportDeclaration(
                     /*decorators*/ undefined, /*modifiers*/ undefined, ts.factory.createImportClause(/*isTypeOnly*/ false, /*name*/ undefined, ts.factory.createNamespaceImport(newNamespaceId)), newModuleString);
-                case 261 /* ImportEqualsDeclaration */:
+                case 263 /* ImportEqualsDeclaration */:
                     return ts.factory.createImportEqualsDeclaration(/*decorators*/ undefined, /*modifiers*/ undefined, /*isTypeOnly*/ false, newNamespaceId, ts.factory.createExternalModuleReference(newModuleString));
-                case 250 /* VariableDeclaration */:
+                case 252 /* VariableDeclaration */:
                     return ts.factory.createVariableDeclaration(newNamespaceId, /*exclamationToken*/ undefined, /*type*/ undefined, createRequireCall(newModuleString));
                 default:
                     return ts.Debug.assertNever(node, "Unexpected node kind " + node.kind);
             }
         }
         function moduleSpecifierFromImport(i) {
-            return (i.kind === 262 /* ImportDeclaration */ ? i.moduleSpecifier
-                : i.kind === 261 /* ImportEqualsDeclaration */ ? i.moduleReference.expression
+            return (i.kind === 264 /* ImportDeclaration */ ? i.moduleSpecifier
+                : i.kind === 263 /* ImportEqualsDeclaration */ ? i.moduleReference.expression
                     : i.initializer.arguments[0]);
         }
         function forEachImportInStatement(statement, cb) {
@@ -151038,15 +154442,15 @@
         }
         function deleteUnusedImports(sourceFile, importDecl, changes, isUnused) {
             switch (importDecl.kind) {
-                case 262 /* ImportDeclaration */:
+                case 264 /* ImportDeclaration */:
                     deleteUnusedImportsInDeclaration(sourceFile, importDecl, changes, isUnused);
                     break;
-                case 261 /* ImportEqualsDeclaration */:
+                case 263 /* ImportEqualsDeclaration */:
                     if (isUnused(importDecl.name)) {
                         changes.delete(sourceFile, importDecl);
                     }
                     break;
-                case 250 /* VariableDeclaration */:
+                case 252 /* VariableDeclaration */:
                     deleteUnusedImportsInVariableDeclaration(sourceFile, importDecl, changes, isUnused);
                     break;
                 default:
@@ -151059,7 +154463,7 @@
             var _a = importDecl.importClause, name = _a.name, namedBindings = _a.namedBindings;
             var defaultUnused = !name || isUnused(name);
             var namedBindingsUnused = !namedBindings ||
-                (namedBindings.kind === 264 /* NamespaceImport */ ? isUnused(namedBindings.name) : namedBindings.elements.length !== 0 && namedBindings.elements.every(function (e) { return isUnused(e.name); }));
+                (namedBindings.kind === 266 /* NamespaceImport */ ? isUnused(namedBindings.name) : namedBindings.elements.length !== 0 && namedBindings.elements.every(function (e) { return isUnused(e.name); }));
             if (defaultUnused && namedBindingsUnused) {
                 changes.delete(sourceFile, importDecl);
             }
@@ -151071,7 +154475,7 @@
                     if (namedBindingsUnused) {
                         changes.replaceNode(sourceFile, importDecl.importClause, ts.factory.updateImportClause(importDecl.importClause, importDecl.importClause.isTypeOnly, name, /*namedBindings*/ undefined));
                     }
-                    else if (namedBindings.kind === 265 /* NamedImports */) {
+                    else if (namedBindings.kind === 267 /* NamedImports */) {
                         for (var _i = 0, _b = namedBindings.elements; _i < _b.length; _i++) {
                             var element = _b[_i];
                             if (isUnused(element.name))
@@ -151084,14 +154488,14 @@
         function deleteUnusedImportsInVariableDeclaration(sourceFile, varDecl, changes, isUnused) {
             var name = varDecl.name;
             switch (name.kind) {
-                case 78 /* Identifier */:
+                case 79 /* Identifier */:
                     if (isUnused(name)) {
                         changes.delete(sourceFile, name);
                     }
                     break;
-                case 198 /* ArrayBindingPattern */:
+                case 200 /* ArrayBindingPattern */:
                     break;
-                case 197 /* ObjectBindingPattern */:
+                case 199 /* ObjectBindingPattern */:
                     if (name.elements.every(function (e) { return ts.isIdentifier(e.name) && isUnused(e.name); })) {
                         changes.delete(sourceFile, ts.isVariableDeclarationList(varDecl.parent) && varDecl.parent.declarations.length === 1 ? varDecl.parent.parent : varDecl);
                     }
@@ -151131,7 +154535,7 @@
                         continue;
                     var top = getTopLevelDeclarationStatement(decl);
                     if (markSeenTop(top)) {
-                        addExportToChanges(oldFile, top, changes, useEs6ModuleSyntax);
+                        addExportToChanges(oldFile, top, name, changes, useEs6ModuleSyntax);
                     }
                     if (ts.hasSyntacticModifier(decl, 512 /* Default */)) {
                         oldFileDefault = name;
@@ -151221,14 +154625,14 @@
         // Below should all be utilities
         function isInImport(decl) {
             switch (decl.kind) {
-                case 261 /* ImportEqualsDeclaration */:
-                case 266 /* ImportSpecifier */:
-                case 263 /* ImportClause */:
-                case 264 /* NamespaceImport */:
+                case 263 /* ImportEqualsDeclaration */:
+                case 268 /* ImportSpecifier */:
+                case 265 /* ImportClause */:
+                case 266 /* NamespaceImport */:
                     return true;
-                case 250 /* VariableDeclaration */:
+                case 252 /* VariableDeclaration */:
                     return isVariableDeclarationInImport(decl);
-                case 199 /* BindingElement */:
+                case 201 /* BindingElement */:
                     return ts.isVariableDeclaration(decl.parent.parent) && isVariableDeclarationInImport(decl.parent.parent);
                 default:
                     return false;
@@ -151240,7 +154644,7 @@
         }
         function filterImport(i, moduleSpecifier, keep) {
             switch (i.kind) {
-                case 262 /* ImportDeclaration */: {
+                case 264 /* ImportDeclaration */: {
                     var clause = i.importClause;
                     if (!clause)
                         return undefined;
@@ -151250,9 +154654,9 @@
                         ? ts.factory.createImportDeclaration(/*decorators*/ undefined, /*modifiers*/ undefined, ts.factory.createImportClause(/*isTypeOnly*/ false, defaultImport, namedBindings), moduleSpecifier)
                         : undefined;
                 }
-                case 261 /* ImportEqualsDeclaration */:
+                case 263 /* ImportEqualsDeclaration */:
                     return keep(i.name) ? i : undefined;
-                case 250 /* VariableDeclaration */: {
+                case 252 /* VariableDeclaration */: {
                     var name = filterBindingName(i.name, keep);
                     return name ? makeVariableStatement(name, i.type, createRequireCall(moduleSpecifier), i.parent.flags) : undefined;
                 }
@@ -151261,7 +154665,7 @@
             }
         }
         function filterNamedBindings(namedBindings, keep) {
-            if (namedBindings.kind === 264 /* NamespaceImport */) {
+            if (namedBindings.kind === 266 /* NamespaceImport */) {
                 return keep(namedBindings.name) ? namedBindings : undefined;
             }
             else {
@@ -151271,11 +154675,11 @@
         }
         function filterBindingName(name, keep) {
             switch (name.kind) {
-                case 78 /* Identifier */:
+                case 79 /* Identifier */:
                     return keep(name) ? name : undefined;
-                case 198 /* ArrayBindingPattern */:
+                case 200 /* ArrayBindingPattern */:
                     return name;
-                case 197 /* ObjectBindingPattern */: {
+                case 199 /* ObjectBindingPattern */: {
                     // We can't handle nested destructurings or property names well here, so just copy them all.
                     var newElements = name.elements.filter(function (prop) { return prop.propertyName || !ts.isIdentifier(prop.name) || keep(prop.name); });
                     return newElements.length ? ts.factory.createObjectBindingPattern(newElements) : undefined;
@@ -151332,13 +154736,13 @@
         }
         function isNonVariableTopLevelDeclaration(node) {
             switch (node.kind) {
-                case 252 /* FunctionDeclaration */:
-                case 253 /* ClassDeclaration */:
-                case 257 /* ModuleDeclaration */:
-                case 256 /* EnumDeclaration */:
-                case 255 /* TypeAliasDeclaration */:
-                case 254 /* InterfaceDeclaration */:
-                case 261 /* ImportEqualsDeclaration */:
+                case 254 /* FunctionDeclaration */:
+                case 255 /* ClassDeclaration */:
+                case 259 /* ModuleDeclaration */:
+                case 258 /* EnumDeclaration */:
+                case 257 /* TypeAliasDeclaration */:
+                case 256 /* InterfaceDeclaration */:
+                case 263 /* ImportEqualsDeclaration */:
                     return true;
                 default:
                     return false;
@@ -151346,17 +154750,17 @@
         }
         function forEachTopLevelDeclaration(statement, cb) {
             switch (statement.kind) {
-                case 252 /* FunctionDeclaration */:
-                case 253 /* ClassDeclaration */:
-                case 257 /* ModuleDeclaration */:
-                case 256 /* EnumDeclaration */:
-                case 255 /* TypeAliasDeclaration */:
-                case 254 /* InterfaceDeclaration */:
-                case 261 /* ImportEqualsDeclaration */:
+                case 254 /* FunctionDeclaration */:
+                case 255 /* ClassDeclaration */:
+                case 259 /* ModuleDeclaration */:
+                case 258 /* EnumDeclaration */:
+                case 257 /* TypeAliasDeclaration */:
+                case 256 /* InterfaceDeclaration */:
+                case 263 /* ImportEqualsDeclaration */:
                     return cb(statement);
-                case 233 /* VariableStatement */:
+                case 235 /* VariableStatement */:
                     return ts.firstDefined(statement.declarationList.declarations, function (decl) { return forEachTopLevelDeclarationInBindingName(decl.name, cb); });
-                case 234 /* ExpressionStatement */: {
+                case 236 /* ExpressionStatement */: {
                     var expression = statement.expression;
                     return ts.isBinaryExpression(expression) && ts.getAssignmentDeclarationKind(expression) === 1 /* ExportsProperty */
                         ? cb(statement)
@@ -151366,10 +154770,10 @@
         }
         function forEachTopLevelDeclarationInBindingName(name, cb) {
             switch (name.kind) {
-                case 78 /* Identifier */:
+                case 79 /* Identifier */:
                     return cb(ts.cast(name.parent, function (x) { return ts.isVariableDeclaration(x) || ts.isBindingElement(x); }));
-                case 198 /* ArrayBindingPattern */:
-                case 197 /* ObjectBindingPattern */:
+                case 200 /* ArrayBindingPattern */:
+                case 199 /* ObjectBindingPattern */:
                     return ts.firstDefined(name.elements, function (em) { return ts.isOmittedExpression(em) ? undefined : forEachTopLevelDeclarationInBindingName(em.name, cb); });
                 default:
                     return ts.Debug.assertNever(name, "Unexpected name kind " + name.kind);
@@ -151380,16 +154784,16 @@
         }
         function getTopLevelDeclarationStatement(d) {
             switch (d.kind) {
-                case 250 /* VariableDeclaration */:
+                case 252 /* VariableDeclaration */:
                     return d.parent.parent;
-                case 199 /* BindingElement */:
+                case 201 /* BindingElement */:
                     return getTopLevelDeclarationStatement(ts.cast(d.parent.parent, function (p) { return ts.isVariableDeclaration(p) || ts.isBindingElement(p); }));
                 default:
                     return d;
             }
         }
-        function addExportToChanges(sourceFile, decl, changes, useEs6Exports) {
-            if (isExported(sourceFile, decl, useEs6Exports))
+        function addExportToChanges(sourceFile, decl, name, changes, useEs6Exports) {
+            if (isExported(sourceFile, decl, useEs6Exports, name))
                 return;
             if (useEs6Exports) {
                 if (!ts.isExpressionStatement(decl))
@@ -151401,59 +154805,58 @@
                     changes.insertNodesAfter(sourceFile, decl, names.map(createExportAssignment));
             }
         }
-        function isExported(sourceFile, decl, useEs6Exports) {
+        function isExported(sourceFile, decl, useEs6Exports, name) {
+            var _a;
             if (useEs6Exports) {
-                return !ts.isExpressionStatement(decl) && ts.hasSyntacticModifier(decl, 1 /* Export */);
+                return !ts.isExpressionStatement(decl) && ts.hasSyntacticModifier(decl, 1 /* Export */) || !!(name && ((_a = sourceFile.symbol.exports) === null || _a === void 0 ? void 0 : _a.has(name.escapedText)));
             }
-            else {
-                return getNamesToExportInCommonJS(decl).some(function (name) { return sourceFile.symbol.exports.has(ts.escapeLeadingUnderscores(name)); });
-            }
+            return getNamesToExportInCommonJS(decl).some(function (name) { return sourceFile.symbol.exports.has(ts.escapeLeadingUnderscores(name)); });
         }
         function addExport(decl, useEs6Exports) {
             return useEs6Exports ? [addEs6Export(decl)] : addCommonjsExport(decl);
         }
         function addEs6Export(d) {
-            var modifiers = ts.concatenate([ts.factory.createModifier(92 /* ExportKeyword */)], d.modifiers);
+            var modifiers = ts.concatenate([ts.factory.createModifier(93 /* ExportKeyword */)], d.modifiers);
             switch (d.kind) {
-                case 252 /* FunctionDeclaration */:
+                case 254 /* FunctionDeclaration */:
                     return ts.factory.updateFunctionDeclaration(d, d.decorators, modifiers, d.asteriskToken, d.name, d.typeParameters, d.parameters, d.type, d.body);
-                case 253 /* ClassDeclaration */:
+                case 255 /* ClassDeclaration */:
                     return ts.factory.updateClassDeclaration(d, d.decorators, modifiers, d.name, d.typeParameters, d.heritageClauses, d.members);
-                case 233 /* VariableStatement */:
+                case 235 /* VariableStatement */:
                     return ts.factory.updateVariableStatement(d, modifiers, d.declarationList);
-                case 257 /* ModuleDeclaration */:
+                case 259 /* ModuleDeclaration */:
                     return ts.factory.updateModuleDeclaration(d, d.decorators, modifiers, d.name, d.body);
-                case 256 /* EnumDeclaration */:
+                case 258 /* EnumDeclaration */:
                     return ts.factory.updateEnumDeclaration(d, d.decorators, modifiers, d.name, d.members);
-                case 255 /* TypeAliasDeclaration */:
+                case 257 /* TypeAliasDeclaration */:
                     return ts.factory.updateTypeAliasDeclaration(d, d.decorators, modifiers, d.name, d.typeParameters, d.type);
-                case 254 /* InterfaceDeclaration */:
+                case 256 /* InterfaceDeclaration */:
                     return ts.factory.updateInterfaceDeclaration(d, d.decorators, modifiers, d.name, d.typeParameters, d.heritageClauses, d.members);
-                case 261 /* ImportEqualsDeclaration */:
+                case 263 /* ImportEqualsDeclaration */:
                     return ts.factory.updateImportEqualsDeclaration(d, d.decorators, modifiers, d.isTypeOnly, d.name, d.moduleReference);
-                case 234 /* ExpressionStatement */:
+                case 236 /* ExpressionStatement */:
                     return ts.Debug.fail(); // Shouldn't try to add 'export' keyword to `exports.x = ...`
                 default:
                     return ts.Debug.assertNever(d, "Unexpected declaration kind " + d.kind);
             }
         }
         function addCommonjsExport(decl) {
-            return __spreadArray([decl], getNamesToExportInCommonJS(decl).map(createExportAssignment));
+            return __spreadArray([decl], getNamesToExportInCommonJS(decl).map(createExportAssignment), true);
         }
         function getNamesToExportInCommonJS(decl) {
             switch (decl.kind) {
-                case 252 /* FunctionDeclaration */:
-                case 253 /* ClassDeclaration */:
+                case 254 /* FunctionDeclaration */:
+                case 255 /* ClassDeclaration */:
                     return [decl.name.text]; // TODO: GH#18217
-                case 233 /* VariableStatement */:
+                case 235 /* VariableStatement */:
                     return ts.mapDefined(decl.declarationList.declarations, function (d) { return ts.isIdentifier(d.name) ? d.name.text : undefined; });
-                case 257 /* ModuleDeclaration */:
-                case 256 /* EnumDeclaration */:
-                case 255 /* TypeAliasDeclaration */:
-                case 254 /* InterfaceDeclaration */:
-                case 261 /* ImportEqualsDeclaration */:
+                case 259 /* ModuleDeclaration */:
+                case 258 /* EnumDeclaration */:
+                case 257 /* TypeAliasDeclaration */:
+                case 256 /* InterfaceDeclaration */:
+                case 263 /* ImportEqualsDeclaration */:
                     return ts.emptyArray;
-                case 234 /* ExpressionStatement */:
+                case 236 /* ExpressionStatement */:
                     return ts.Debug.fail("Can't export an ExpressionStatement"); // Shouldn't try to add 'export' keyword to `exports.x = ...`
                 default:
                     return ts.Debug.assertNever(decl, "Unexpected decl kind " + decl.kind);
@@ -151461,7 +154864,7 @@
         }
         /** Creates `exports.x = x;` */
         function createExportAssignment(name) {
-            return ts.factory.createExpressionStatement(ts.factory.createBinaryExpression(ts.factory.createPropertyAccessExpression(ts.factory.createIdentifier("exports"), ts.factory.createIdentifier(name)), 62 /* EqualsToken */, ts.factory.createIdentifier(name)));
+            return ts.factory.createExpressionStatement(ts.factory.createBinaryExpression(ts.factory.createPropertyAccessExpression(ts.factory.createIdentifier("exports"), ts.factory.createIdentifier(name)), 63 /* EqualsToken */, ts.factory.createIdentifier(name)));
         }
     })(refactor = ts.refactor || (ts.refactor = {}));
 })(ts || (ts = {}));
@@ -151650,7 +155053,7 @@
             function getGroupedReferences(functionDeclaration, program, cancellationToken) {
                 var functionNames = getFunctionNames(functionDeclaration);
                 var classNames = ts.isConstructorDeclaration(functionDeclaration) ? getClassNames(functionDeclaration) : [];
-                var names = ts.deduplicate(__spreadArray(__spreadArray([], functionNames), classNames), ts.equateValues);
+                var names = ts.deduplicate(__spreadArray(__spreadArray([], functionNames, true), classNames, true), ts.equateValues);
                 var checker = program.getTypeChecker();
                 var references = ts.flatMap(names, /*mapfn*/ function (/*mapfn*/ name) { return ts.FindAllReferences.getReferenceEntriesForNode(-1, name, program, program.getSourceFiles(), cancellationToken); });
                 var groupedReferences = groupReferences(references);
@@ -151796,15 +155199,15 @@
                     var parent = functionReference.parent;
                     switch (parent.kind) {
                         // foo(...) or super(...) or new Foo(...)
-                        case 204 /* CallExpression */:
-                        case 205 /* NewExpression */:
+                        case 206 /* CallExpression */:
+                        case 207 /* NewExpression */:
                             var callOrNewExpression = ts.tryCast(parent, ts.isCallOrNewExpression);
                             if (callOrNewExpression && callOrNewExpression.expression === functionReference) {
                                 return callOrNewExpression;
                             }
                             break;
                         // x.foo(...)
-                        case 202 /* PropertyAccessExpression */:
+                        case 204 /* PropertyAccessExpression */:
                             var propertyAccessExpression = ts.tryCast(parent, ts.isPropertyAccessExpression);
                             if (propertyAccessExpression && propertyAccessExpression.parent && propertyAccessExpression.name === functionReference) {
                                 var callOrNewExpression_1 = ts.tryCast(propertyAccessExpression.parent, ts.isCallOrNewExpression);
@@ -151814,7 +155217,7 @@
                             }
                             break;
                         // x["foo"](...)
-                        case 203 /* ElementAccessExpression */:
+                        case 205 /* ElementAccessExpression */:
                             var elementAccessExpression = ts.tryCast(parent, ts.isElementAccessExpression);
                             if (elementAccessExpression && elementAccessExpression.parent && elementAccessExpression.argumentExpression === functionReference) {
                                 var callOrNewExpression_2 = ts.tryCast(elementAccessExpression.parent, ts.isCallOrNewExpression);
@@ -151833,14 +155236,14 @@
                     var parent = reference.parent;
                     switch (parent.kind) {
                         // `C.foo`
-                        case 202 /* PropertyAccessExpression */:
+                        case 204 /* PropertyAccessExpression */:
                             var propertyAccessExpression = ts.tryCast(parent, ts.isPropertyAccessExpression);
                             if (propertyAccessExpression && propertyAccessExpression.expression === reference) {
                                 return propertyAccessExpression;
                             }
                             break;
                         // `C["foo"]`
-                        case 203 /* ElementAccessExpression */:
+                        case 205 /* ElementAccessExpression */:
                             var elementAccessExpression = ts.tryCast(parent, ts.isElementAccessExpression);
                             if (elementAccessExpression && elementAccessExpression.expression === reference) {
                                 return elementAccessExpression;
@@ -151886,16 +155289,16 @@
                 if (!isValidParameterNodeArray(functionDeclaration.parameters, checker))
                     return false;
                 switch (functionDeclaration.kind) {
-                    case 252 /* FunctionDeclaration */:
+                    case 254 /* FunctionDeclaration */:
                         return hasNameOrDefault(functionDeclaration) && isSingleImplementation(functionDeclaration, checker);
-                    case 166 /* MethodDeclaration */:
+                    case 167 /* MethodDeclaration */:
                         if (ts.isObjectLiteralExpression(functionDeclaration.parent)) {
                             var contextualSymbol = getSymbolForContextualType(functionDeclaration.name, checker);
                             // don't offer the refactor when there are multiple signatures since we won't know which ones the user wants to change
                             return ((_a = contextualSymbol === null || contextualSymbol === void 0 ? void 0 : contextualSymbol.declarations) === null || _a === void 0 ? void 0 : _a.length) === 1 && isSingleImplementation(functionDeclaration, checker);
                         }
                         return isSingleImplementation(functionDeclaration, checker);
-                    case 167 /* Constructor */:
+                    case 169 /* Constructor */:
                         if (ts.isClassDeclaration(functionDeclaration.parent)) {
                             return hasNameOrDefault(functionDeclaration.parent) && isSingleImplementation(functionDeclaration, checker);
                         }
@@ -151903,8 +155306,8 @@
                             return isValidVariableDeclaration(functionDeclaration.parent.parent)
                                 && isSingleImplementation(functionDeclaration, checker);
                         }
-                    case 209 /* FunctionExpression */:
-                    case 210 /* ArrowFunction */:
+                    case 211 /* FunctionExpression */:
+                    case 212 /* ArrowFunction */:
                         return isValidVariableDeclaration(functionDeclaration.parent);
                 }
                 return false;
@@ -151914,7 +155317,7 @@
             }
             function hasNameOrDefault(functionOrClassDeclaration) {
                 if (!functionOrClassDeclaration.name) {
-                    var defaultKeyword = ts.findModifier(functionOrClassDeclaration, 87 /* DefaultKeyword */);
+                    var defaultKeyword = ts.findModifier(functionOrClassDeclaration, 88 /* DefaultKeyword */);
                     return !!defaultKeyword;
                 }
                 return true;
@@ -152054,15 +155457,15 @@
             }
             function getClassNames(constructorDeclaration) {
                 switch (constructorDeclaration.parent.kind) {
-                    case 253 /* ClassDeclaration */:
+                    case 255 /* ClassDeclaration */:
                         var classDeclaration = constructorDeclaration.parent;
                         if (classDeclaration.name)
                             return [classDeclaration.name];
                         // If the class declaration doesn't have a name, it should have a default modifier.
                         // We validated this in `isValidFunctionDeclaration` through `hasNameOrDefault`
-                        var defaultModifier = ts.Debug.checkDefined(ts.findModifier(classDeclaration, 87 /* DefaultKeyword */), "Nameless class declaration should be a default export");
+                        var defaultModifier = ts.Debug.checkDefined(ts.findModifier(classDeclaration, 88 /* DefaultKeyword */), "Nameless class declaration should be a default export");
                         return [defaultModifier];
-                    case 222 /* ClassExpression */:
+                    case 224 /* ClassExpression */:
                         var classExpression = constructorDeclaration.parent;
                         var variableDeclaration = constructorDeclaration.parent.parent;
                         var className = classExpression.name;
@@ -152073,25 +155476,25 @@
             }
             function getFunctionNames(functionDeclaration) {
                 switch (functionDeclaration.kind) {
-                    case 252 /* FunctionDeclaration */:
+                    case 254 /* FunctionDeclaration */:
                         if (functionDeclaration.name)
                             return [functionDeclaration.name];
                         // If the function declaration doesn't have a name, it should have a default modifier.
                         // We validated this in `isValidFunctionDeclaration` through `hasNameOrDefault`
-                        var defaultModifier = ts.Debug.checkDefined(ts.findModifier(functionDeclaration, 87 /* DefaultKeyword */), "Nameless function declaration should be a default export");
+                        var defaultModifier = ts.Debug.checkDefined(ts.findModifier(functionDeclaration, 88 /* DefaultKeyword */), "Nameless function declaration should be a default export");
                         return [defaultModifier];
-                    case 166 /* MethodDeclaration */:
+                    case 167 /* MethodDeclaration */:
                         return [functionDeclaration.name];
-                    case 167 /* Constructor */:
-                        var ctrKeyword = ts.Debug.checkDefined(ts.findChildOfKind(functionDeclaration, 132 /* ConstructorKeyword */, functionDeclaration.getSourceFile()), "Constructor declaration should have constructor keyword");
-                        if (functionDeclaration.parent.kind === 222 /* ClassExpression */) {
+                    case 169 /* Constructor */:
+                        var ctrKeyword = ts.Debug.checkDefined(ts.findChildOfKind(functionDeclaration, 133 /* ConstructorKeyword */, functionDeclaration.getSourceFile()), "Constructor declaration should have constructor keyword");
+                        if (functionDeclaration.parent.kind === 224 /* ClassExpression */) {
                             var variableDeclaration = functionDeclaration.parent.parent;
                             return [variableDeclaration.name, ctrKeyword];
                         }
                         return [ctrKeyword];
-                    case 210 /* ArrowFunction */:
+                    case 212 /* ArrowFunction */:
                         return [functionDeclaration.parent.name];
-                    case 209 /* FunctionExpression */:
+                    case 211 /* FunctionExpression */:
                         if (functionDeclaration.name)
                             return [functionDeclaration.name, functionDeclaration.parent.name];
                         return [functionDeclaration.parent.name];
@@ -152126,7 +155529,7 @@
                 var node = getNodeOrParentOfParentheses(file, startPosition);
                 var maybeBinary = getParentBinaryExpression(node);
                 var refactorInfo = { name: refactorName, description: refactorDescription, actions: [] };
-                if (ts.isBinaryExpression(maybeBinary) && isStringConcatenationValid(maybeBinary)) {
+                if (ts.isBinaryExpression(maybeBinary) && treeToArray(maybeBinary).isValidConcatenation) {
                     refactorInfo.actions.push(convertStringAction);
                     return [refactorInfo];
                 }
@@ -152139,7 +155542,7 @@
             function getNodeOrParentOfParentheses(file, startPosition) {
                 var node = ts.getTokenAtPosition(file, startPosition);
                 var nestedBinary = getParentBinaryExpression(node);
-                var isNonStringBinary = !isStringConcatenationValid(nestedBinary);
+                var isNonStringBinary = !treeToArray(nestedBinary).isValidConcatenation;
                 if (isNonStringBinary &&
                     ts.isParenthesizedExpression(nestedBinary.parent) &&
                     ts.isBinaryExpression(nestedBinary.parent.parent)) {
@@ -152177,40 +155580,41 @@
                 }
             }
             function isNotEqualsOperator(node) {
-                return node.operatorToken.kind !== 62 /* EqualsToken */;
+                return node.operatorToken.kind !== 63 /* EqualsToken */;
             }
             function getParentBinaryExpression(expr) {
                 var container = ts.findAncestor(expr.parent, function (n) {
                     switch (n.kind) {
-                        case 202 /* PropertyAccessExpression */:
-                        case 203 /* ElementAccessExpression */:
+                        case 204 /* PropertyAccessExpression */:
+                        case 205 /* ElementAccessExpression */:
                             return false;
-                        case 219 /* TemplateExpression */:
-                        case 217 /* BinaryExpression */:
+                        case 221 /* TemplateExpression */:
+                        case 219 /* BinaryExpression */:
                             return !(ts.isBinaryExpression(n.parent) && isNotEqualsOperator(n.parent));
                         default:
                             return "quit";
                     }
                 });
-                return container || expr;
-            }
-            function isStringConcatenationValid(node) {
-                var _a = treeToArray(node), containsString = _a.containsString, areOperatorsValid = _a.areOperatorsValid;
-                return containsString && areOperatorsValid;
+                return (container || expr);
             }
             function treeToArray(current) {
-                if (ts.isBinaryExpression(current)) {
-                    var _a = treeToArray(current.left), nodes = _a.nodes, operators = _a.operators, leftHasString = _a.containsString, leftOperatorValid = _a.areOperatorsValid;
-                    if (!leftHasString && !ts.isStringLiteral(current.right) && !ts.isTemplateExpression(current.right)) {
-                        return { nodes: [current], operators: [], containsString: false, areOperatorsValid: true };
+                var loop = function (current) {
+                    if (!ts.isBinaryExpression(current)) {
+                        return { nodes: [current], operators: [], validOperators: true,
+                            hasString: ts.isStringLiteral(current) || ts.isNoSubstitutionTemplateLiteral(current) };
+                    }
+                    var _a = loop(current.left), nodes = _a.nodes, operators = _a.operators, leftHasString = _a.hasString, leftOperatorValid = _a.validOperators;
+                    if (!(leftHasString || ts.isStringLiteral(current.right) || ts.isTemplateExpression(current.right))) {
+                        return { nodes: [current], operators: [], hasString: false, validOperators: true };
                     }
                     var currentOperatorValid = current.operatorToken.kind === 39 /* PlusToken */;
-                    var areOperatorsValid = leftOperatorValid && currentOperatorValid;
+                    var validOperators = leftOperatorValid && currentOperatorValid;
                     nodes.push(current.right);
                     operators.push(current.operatorToken);
-                    return { nodes: nodes, operators: operators, containsString: true, areOperatorsValid: areOperatorsValid };
-                }
-                return { nodes: [current], operators: [], containsString: ts.isStringLiteral(current), areOperatorsValid: true };
+                    return { nodes: nodes, operators: operators, hasString: true, validOperators: validOperators };
+                };
+                var _a = loop(current), nodes = _a.nodes, operators = _a.operators, validOperators = _a.validOperators, hasString = _a.hasString;
+                return { nodes: nodes, operators: operators, isValidConcatenation: validOperators && hasString };
             }
             // to copy comments following the operator
             // "foo" + /* comment */ "bar"
@@ -152230,56 +155634,77 @@
                     }
                 };
             };
+            function escapeRawStringForTemplate(s) {
+                // Escaping for $s in strings that are to be used in template strings
+                // Naive implementation: replace \x by itself and otherwise $ and ` by \$ and \`.
+                // But to complicate it a bit, this should work for raw strings too.
+                return s.replace(/\\.|[$`]/g, function (m) { return m[0] === "\\" ? m : "\\" + m; });
+                // Finally, a less-backslash-happy version can work too, doing only ${ instead of all $s:
+                //     s.replace(/\\.|\${|`/g, m => m[0] === "\\" ? m : "\\" + m);
+                // but `\$${foo}` is likely more clear than the more-confusing-but-still-working `$${foo}`.
+            }
+            function getRawTextOfTemplate(node) {
+                // in these cases the right side is ${
+                var rightShaving = ts.isTemplateHead(node) || ts.isTemplateMiddle(node) ? -2 : -1;
+                return ts.getTextOfNode(node).slice(1, rightShaving);
+            }
             function concatConsecutiveString(index, nodes) {
                 var indexes = [];
-                var text = "";
+                var text = "", rawText = "";
                 while (index < nodes.length) {
                     var node = nodes[index];
-                    if (ts.isStringLiteralLike(node)) {
-                        text = text + node.text;
+                    if (ts.isStringLiteralLike(node)) { // includes isNoSubstitutionTemplateLiteral(node)
+                        text += node.text;
+                        rawText += escapeRawStringForTemplate(ts.getTextOfNode(node).slice(1, -1));
                         indexes.push(index);
                         index++;
                     }
                     else if (ts.isTemplateExpression(node)) {
-                        text = text + node.head.text;
+                        text += node.head.text;
+                        rawText += getRawTextOfTemplate(node.head);
                         break;
                     }
                     else {
                         break;
                     }
                 }
-                return [index, text, indexes];
+                return [index, text, rawText, indexes];
             }
             function nodesToTemplate(_a, file) {
                 var nodes = _a.nodes, operators = _a.operators;
                 var copyOperatorComments = copyTrailingOperatorComments(operators, file);
                 var copyCommentFromStringLiterals = copyCommentFromMultiNode(nodes, file, copyOperatorComments);
-                var _b = concatConsecutiveString(0, nodes), begin = _b[0], headText = _b[1], headIndexes = _b[2];
+                var _b = concatConsecutiveString(0, nodes), begin = _b[0], headText = _b[1], rawHeadText = _b[2], headIndexes = _b[3];
                 if (begin === nodes.length) {
-                    var noSubstitutionTemplateLiteral = ts.factory.createNoSubstitutionTemplateLiteral(headText);
+                    var noSubstitutionTemplateLiteral = ts.factory.createNoSubstitutionTemplateLiteral(headText, rawHeadText);
                     copyCommentFromStringLiterals(headIndexes, noSubstitutionTemplateLiteral);
                     return noSubstitutionTemplateLiteral;
                 }
                 var templateSpans = [];
-                var templateHead = ts.factory.createTemplateHead(headText);
+                var templateHead = ts.factory.createTemplateHead(headText, rawHeadText);
                 copyCommentFromStringLiterals(headIndexes, templateHead);
                 var _loop_20 = function (i) {
                     var currentNode = getExpressionFromParenthesesOrExpression(nodes[i]);
                     copyOperatorComments(i, currentNode);
-                    var _c = concatConsecutiveString(i + 1, nodes), newIndex = _c[0], subsequentText = _c[1], stringIndexes = _c[2];
+                    var _c = concatConsecutiveString(i + 1, nodes), newIndex = _c[0], subsequentText = _c[1], rawSubsequentText = _c[2], stringIndexes = _c[3];
                     i = newIndex - 1;
                     var isLast = i === nodes.length - 1;
                     if (ts.isTemplateExpression(currentNode)) {
                         var spans = ts.map(currentNode.templateSpans, function (span, index) {
                             copyExpressionComments(span);
-                            var nextSpan = currentNode.templateSpans[index + 1];
-                            var text = span.literal.text + (nextSpan ? "" : subsequentText);
-                            return ts.factory.createTemplateSpan(span.expression, isLast ? ts.factory.createTemplateTail(text) : ts.factory.createTemplateMiddle(text));
+                            var isLastSpan = index === currentNode.templateSpans.length - 1;
+                            var text = span.literal.text + (isLastSpan ? subsequentText : "");
+                            var rawText = getRawTextOfTemplate(span.literal) + (isLastSpan ? rawSubsequentText : "");
+                            return ts.factory.createTemplateSpan(span.expression, isLast
+                                ? ts.factory.createTemplateTail(text, rawText)
+                                : ts.factory.createTemplateMiddle(text, rawText));
                         });
                         templateSpans.push.apply(templateSpans, spans);
                     }
                     else {
-                        var templatePart = isLast ? ts.factory.createTemplateTail(subsequentText) : ts.factory.createTemplateMiddle(subsequentText);
+                        var templatePart = isLast
+                            ? ts.factory.createTemplateTail(subsequentText, rawSubsequentText)
+                            : ts.factory.createTemplateMiddle(subsequentText, rawSubsequentText);
                         copyCommentFromStringLiterals(stringIndexes, templatePart);
                         templateSpans.push(ts.factory.createTemplateSpan(currentNode, templatePart));
                     }
@@ -152430,14 +155855,15 @@
                 var token = ts.getTokenAtPosition(file, startPosition);
                 var typeChecker = program.getTypeChecker();
                 var func = tryGetFunctionFromVariableDeclaration(file, typeChecker, token.parent);
-                if (func && !containingThis(func.body)) {
+                if (func && !containingThis(func.body) && !typeChecker.containsArgumentsReference(func)) {
                     return { selectedVariableDeclaration: true, func: func };
                 }
                 var maybeFunc = ts.getContainingFunction(token);
                 if (maybeFunc &&
                     (ts.isFunctionExpression(maybeFunc) || ts.isArrowFunction(maybeFunc)) &&
                     !ts.rangeContainsRange(maybeFunc.body, token) &&
-                    !containingThis(maybeFunc.body)) {
+                    !containingThis(maybeFunc.body) &&
+                    !typeChecker.containsArgumentsReference(maybeFunc)) {
                     if (ts.isFunctionExpression(maybeFunc) && isFunctionReferencedInFile(file, typeChecker, maybeFunc))
                         return undefined;
                     return { selectedVariableDeclaration: false, func: maybeFunc };
@@ -152460,7 +155886,11 @@
             }
             function convertToBlock(body) {
                 if (ts.isExpression(body)) {
-                    return ts.factory.createBlock([ts.factory.createReturnStatement(body)], /* multiLine */ true);
+                    var returnStatement = ts.factory.createReturnStatement(body);
+                    var file = body.getSourceFile();
+                    ts.suppressLeadingAndTrailingTrivia(returnStatement);
+                    ts.copyTrailingAsLeadingComments(body, returnStatement, file, /* commentKind */ undefined, /* hasTrailingNewLine */ true);
+                    return ts.factory.createBlock([returnStatement], /* multiLine */ true);
                 }
                 else {
                     return body;
@@ -152607,10 +156037,10 @@
             }
             function isConvertibleDeclaration(node) {
                 switch (node.kind) {
-                    case 252 /* FunctionDeclaration */:
-                    case 209 /* FunctionExpression */:
-                    case 210 /* ArrowFunction */:
-                    case 166 /* MethodDeclaration */:
+                    case 254 /* FunctionDeclaration */:
+                    case 211 /* FunctionExpression */:
+                    case 212 /* ArrowFunction */:
+                    case 167 /* MethodDeclaration */:
                         return true;
                     default:
                         return false;
@@ -152637,8 +156067,8 @@
     ts.servicesVersion = "0.8";
     function createNode(kind, pos, end, parent) {
         var node = ts.isNodeKind(kind) ? new NodeObject(kind, pos, end) :
-            kind === 78 /* Identifier */ ? new IdentifierObject(78 /* Identifier */, pos, end) :
-                kind === 79 /* PrivateIdentifier */ ? new PrivateIdentifierObject(79 /* PrivateIdentifier */, pos, end) :
+            kind === 79 /* Identifier */ ? new IdentifierObject(79 /* Identifier */, pos, end) :
+                kind === 80 /* PrivateIdentifier */ ? new PrivateIdentifierObject(80 /* PrivateIdentifier */, pos, end) :
                     new TokenObject(kind, pos, end);
         node.parent = parent;
         node.flags = parent.flags & 25358336 /* ContextFlags */;
@@ -152712,8 +156142,8 @@
             if (!children.length) {
                 return undefined;
             }
-            var child = ts.find(children, function (kid) { return kid.kind < 302 /* FirstJSDocNode */ || kid.kind > 337 /* LastJSDocNode */; });
-            return child.kind < 158 /* FirstNode */ ?
+            var child = ts.find(children, function (kid) { return kid.kind < 304 /* FirstJSDocNode */ || kid.kind > 342 /* LastJSDocNode */; });
+            return child.kind < 159 /* FirstNode */ ?
                 child :
                 child.getFirstToken(sourceFile);
         };
@@ -152724,7 +156154,7 @@
             if (!child) {
                 return undefined;
             }
-            return child.kind < 158 /* FirstNode */ ? child : child.getLastToken(sourceFile);
+            return child.kind < 159 /* FirstNode */ ? child : child.getLastToken(sourceFile);
         };
         NodeObject.prototype.forEachChild = function (cbNode, cbNodeArray) {
             return ts.forEachChild(this, cbNode, cbNodeArray);
@@ -152770,7 +156200,7 @@
             var token = ts.scanner.scan();
             var textPos = ts.scanner.getTextPos();
             if (textPos <= end) {
-                if (token === 78 /* Identifier */) {
+                if (token === 79 /* Identifier */) {
                     ts.Debug.fail("Did not expect " + ts.Debug.formatSyntaxKind(parent.kind) + " to have an Identifier in its trivia");
                 }
                 nodes.push(createNode(token, pos, textPos, parent));
@@ -152782,7 +156212,7 @@
         }
     }
     function createSyntaxList(nodes, parent) {
-        var list = createNode(338 /* SyntaxList */, nodes.pos, nodes.end, parent);
+        var list = createNode(343 /* SyntaxList */, nodes.pos, nodes.end, parent);
         list._children = [];
         var pos = nodes.pos;
         for (var _i = 0, nodes_2 = nodes; _i < nodes_2.length; _i++) {
@@ -152835,10 +156265,10 @@
             return sourceFile.text.substring(this.getStart(sourceFile), this.getEnd());
         };
         TokenOrIdentifierObject.prototype.getChildCount = function () {
-            return 0;
+            return this.getChildren().length;
         };
-        TokenOrIdentifierObject.prototype.getChildAt = function () {
-            return undefined; // TODO: GH#18217
+        TokenOrIdentifierObject.prototype.getChildAt = function (index) {
+            return this.getChildren()[index];
         };
         TokenOrIdentifierObject.prototype.getChildren = function () {
             return this.kind === 1 /* EndOfFileToken */ ? this.jsDoc || ts.emptyArray : ts.emptyArray;
@@ -152893,13 +156323,13 @@
         };
         SymbolObject.prototype.getContextualDocumentationComment = function (context, checker) {
             switch (context === null || context === void 0 ? void 0 : context.kind) {
-                case 168 /* GetAccessor */:
+                case 170 /* GetAccessor */:
                     if (!this.contextualGetAccessorDocumentationComment) {
                         this.contextualGetAccessorDocumentationComment = ts.emptyArray;
                         this.contextualGetAccessorDocumentationComment = getDocumentationComment(ts.filter(this.declarations, ts.isGetAccessor), checker);
                     }
                     return this.contextualGetAccessorDocumentationComment;
-                case 169 /* SetAccessor */:
+                case 171 /* SetAccessor */:
                     if (!this.contextualSetAccessorDocumentationComment) {
                         this.contextualSetAccessorDocumentationComment = ts.emptyArray;
                         this.contextualSetAccessorDocumentationComment = getDocumentationComment(ts.filter(this.declarations, ts.isSetAccessor), checker);
@@ -152930,7 +156360,7 @@
         __extends(IdentifierObject, _super);
         function IdentifierObject(_kind, pos, end) {
             var _this = _super.call(this, pos, end) || this;
-            _this.kind = 78 /* Identifier */;
+            _this.kind = 79 /* Identifier */;
             return _this;
         }
         Object.defineProperty(IdentifierObject.prototype, "text", {
@@ -152942,7 +156372,7 @@
         });
         return IdentifierObject;
     }(TokenOrIdentifierObject));
-    IdentifierObject.prototype.kind = 78 /* Identifier */;
+    IdentifierObject.prototype.kind = 79 /* Identifier */;
     var PrivateIdentifierObject = /** @class */ (function (_super) {
         __extends(PrivateIdentifierObject, _super);
         function PrivateIdentifierObject(_kind, pos, end) {
@@ -152957,7 +156387,7 @@
         });
         return PrivateIdentifierObject;
     }(TokenOrIdentifierObject));
-    PrivateIdentifierObject.prototype.kind = 79 /* PrivateIdentifier */;
+    PrivateIdentifierObject.prototype.kind = 80 /* PrivateIdentifier */;
     var TypeObject = /** @class */ (function () {
         function TypeObject(checker, flags) {
             this.checker = checker;
@@ -153091,7 +156521,7 @@
         if (tags.length === 0 || hasJSDocInheritDocTag(declaration)) {
             var inheritedTags = findBaseOfDeclaration(checker, declaration, function (symbol) { var _a; return ((_a = symbol.declarations) === null || _a === void 0 ? void 0 : _a.length) === 1 ? symbol.getJsDocTags() : undefined; });
             if (inheritedTags) {
-                tags = __spreadArray(__spreadArray([], inheritedTags), tags);
+                tags = __spreadArray(__spreadArray([], inheritedTags, true), tags, true);
             }
         }
         return tags;
@@ -153118,7 +156548,12 @@
         return doc;
     }
     function findBaseOfDeclaration(checker, declaration, cb) {
-        return ts.firstDefined(declaration.parent ? ts.getAllSuperTypeNodes(declaration.parent) : ts.emptyArray, function (superTypeNode) {
+        var _a;
+        var classOrInterfaceDeclaration = ((_a = declaration.parent) === null || _a === void 0 ? void 0 : _a.kind) === 169 /* Constructor */ ? declaration.parent.parent : declaration.parent;
+        if (!classOrInterfaceDeclaration) {
+            return;
+        }
+        return ts.firstDefined(ts.getAllSuperTypeNodes(classOrInterfaceDeclaration), function (superTypeNode) {
             var symbol = checker.getPropertyOfType(checker.getTypeAtLocation(superTypeNode), declaration.symbol.name);
             return symbol ? cb(symbol) : undefined;
         });
@@ -153127,7 +156562,7 @@
         __extends(SourceFileObject, _super);
         function SourceFileObject(kind, pos, end) {
             var _this = _super.call(this, kind, pos, end) || this;
-            _this.kind = 298 /* SourceFile */;
+            _this.kind = 300 /* SourceFile */;
             return _this;
         }
         SourceFileObject.prototype.update = function (newText, textChangeRange) {
@@ -153186,10 +156621,10 @@
             }
             function visit(node) {
                 switch (node.kind) {
-                    case 252 /* FunctionDeclaration */:
-                    case 209 /* FunctionExpression */:
-                    case 166 /* MethodDeclaration */:
-                    case 165 /* MethodSignature */:
+                    case 254 /* FunctionDeclaration */:
+                    case 211 /* FunctionExpression */:
+                    case 167 /* MethodDeclaration */:
+                    case 166 /* MethodSignature */:
                         var functionDeclaration = node;
                         var declarationName = getDeclarationName(functionDeclaration);
                         if (declarationName) {
@@ -153209,31 +156644,31 @@
                         }
                         ts.forEachChild(node, visit);
                         break;
-                    case 253 /* ClassDeclaration */:
-                    case 222 /* ClassExpression */:
-                    case 254 /* InterfaceDeclaration */:
-                    case 255 /* TypeAliasDeclaration */:
-                    case 256 /* EnumDeclaration */:
-                    case 257 /* ModuleDeclaration */:
-                    case 261 /* ImportEqualsDeclaration */:
-                    case 271 /* ExportSpecifier */:
-                    case 266 /* ImportSpecifier */:
-                    case 263 /* ImportClause */:
-                    case 264 /* NamespaceImport */:
-                    case 168 /* GetAccessor */:
-                    case 169 /* SetAccessor */:
-                    case 178 /* TypeLiteral */:
+                    case 255 /* ClassDeclaration */:
+                    case 224 /* ClassExpression */:
+                    case 256 /* InterfaceDeclaration */:
+                    case 257 /* TypeAliasDeclaration */:
+                    case 258 /* EnumDeclaration */:
+                    case 259 /* ModuleDeclaration */:
+                    case 263 /* ImportEqualsDeclaration */:
+                    case 273 /* ExportSpecifier */:
+                    case 268 /* ImportSpecifier */:
+                    case 265 /* ImportClause */:
+                    case 266 /* NamespaceImport */:
+                    case 170 /* GetAccessor */:
+                    case 171 /* SetAccessor */:
+                    case 180 /* TypeLiteral */:
                         addDeclaration(node);
                         ts.forEachChild(node, visit);
                         break;
-                    case 161 /* Parameter */:
+                    case 162 /* Parameter */:
                         // Only consider parameter properties
                         if (!ts.hasSyntacticModifier(node, 16476 /* ParameterPropertyModifier */)) {
                             break;
                         }
                     // falls through
-                    case 250 /* VariableDeclaration */:
-                    case 199 /* BindingElement */: {
+                    case 252 /* VariableDeclaration */:
+                    case 201 /* BindingElement */: {
                         var decl = node;
                         if (ts.isBindingPattern(decl.name)) {
                             ts.forEachChild(decl.name, visit);
@@ -153244,12 +156679,12 @@
                         }
                     }
                     // falls through
-                    case 292 /* EnumMember */:
-                    case 164 /* PropertyDeclaration */:
-                    case 163 /* PropertySignature */:
+                    case 294 /* EnumMember */:
+                    case 165 /* PropertyDeclaration */:
+                    case 164 /* PropertySignature */:
                         addDeclaration(node);
                         break;
-                    case 268 /* ExportDeclaration */:
+                    case 270 /* ExportDeclaration */:
                         // Handle named exports case e.g.:
                         //    export {a, b as B} from "mod";
                         var exportDeclaration = node;
@@ -153262,7 +156697,7 @@
                             }
                         }
                         break;
-                    case 262 /* ImportDeclaration */:
+                    case 264 /* ImportDeclaration */:
                         var importClause = node.importClause;
                         if (importClause) {
                             // Handle default import case e.g.:
@@ -153274,7 +156709,7 @@
                             //    import * as NS from "mod";
                             //    import {a, b as B} from "mod";
                             if (importClause.namedBindings) {
-                                if (importClause.namedBindings.kind === 264 /* NamespaceImport */) {
+                                if (importClause.namedBindings.kind === 266 /* NamespaceImport */) {
                                     addDeclaration(importClause.namedBindings);
                                 }
                                 else {
@@ -153283,7 +156718,7 @@
                             }
                         }
                         break;
-                    case 217 /* BinaryExpression */:
+                    case 219 /* BinaryExpression */:
                         if (ts.getAssignmentDeclarationKind(node) !== 0 /* None */) {
                             addDeclaration(node);
                         }
@@ -153565,7 +157000,6 @@
     }());
     ts.ThrottledCancellationToken = ThrottledCancellationToken;
     var invalidOperationsInPartialSemanticMode = [
-        "getSyntacticDiagnostics",
         "getSemanticDiagnostics",
         "getSuggestionDiagnostics",
         "getCompilerOptionsDiagnostics",
@@ -153582,8 +157016,9 @@
         "prepareCallHierarchy",
         "provideCallHierarchyIncomingCalls",
         "provideCallHierarchyOutgoingCalls",
+        "provideInlayHints"
     ];
-    var invalidOperationsInSyntacticMode = __spreadArray(__spreadArray([], invalidOperationsInPartialSemanticMode), [
+    var invalidOperationsInSyntacticMode = __spreadArray(__spreadArray([], invalidOperationsInPartialSemanticMode, true), [
         "getCompletionsAtPosition",
         "getCompletionEntryDetails",
         "getCompletionEntrySymbol",
@@ -153601,7 +157036,7 @@
         "getRenameInfo",
         "findRenameLocations",
         "getApplicableRefactors",
-    ]);
+    ], false);
     function createLanguageService(host, documentRegistry, syntaxOnlyOrLanguageServiceMode) {
         var _a;
         if (documentRegistry === void 0) { documentRegistry = ts.createDocumentRegistry(host.useCaseSensitiveFileNames && host.useCaseSensitiveFileNames(), host.getCurrentDirectory()); }
@@ -153915,7 +157350,7 @@
             }
             // If '-d' is enabled, check for emitter error. One example of emitter error is export class implements non-export interface
             var declarationDiagnostics = program.getDeclarationDiagnostics(targetSourceFile, cancellationToken);
-            return __spreadArray(__spreadArray([], semanticDiagnostics), declarationDiagnostics);
+            return __spreadArray(__spreadArray([], semanticDiagnostics, true), declarationDiagnostics, true);
         }
         function getSuggestionDiagnostics(fileName) {
             synchronizeHostData();
@@ -153923,14 +157358,14 @@
         }
         function getCompilerOptionsDiagnostics() {
             synchronizeHostData();
-            return __spreadArray(__spreadArray([], program.getOptionsDiagnostics(cancellationToken)), program.getGlobalDiagnostics(cancellationToken));
+            return __spreadArray(__spreadArray([], program.getOptionsDiagnostics(cancellationToken), true), program.getGlobalDiagnostics(cancellationToken), true);
         }
         function getCompletionsAtPosition(fileName, position, options) {
             if (options === void 0) { options = ts.emptyOptions; }
             // Convert from deprecated options names to new names
             var fullPreferences = __assign(__assign({}, ts.identity(options)), { includeCompletionsForModuleExports: options.includeCompletionsForModuleExports || options.includeExternalModuleExports, includeCompletionsWithInsertText: options.includeCompletionsWithInsertText || options.includeInsertTextCompletions });
             synchronizeHostData();
-            return ts.Completions.getCompletionsAtPosition(host, program, log, getValidSourceFile(fileName), position, fullPreferences, options.triggerCharacter);
+            return ts.Completions.getCompletionsAtPosition(host, program, log, getValidSourceFile(fileName), position, fullPreferences, options.triggerCharacter, options.triggerKind, cancellationToken);
         }
         function getCompletionEntryDetails(fileName, position, name, formattingOptions, source, preferences, data) {
             if (preferences === void 0) { preferences = ts.emptyOptions; }
@@ -153988,16 +157423,16 @@
         }
         function shouldGetType(sourceFile, node, position) {
             switch (node.kind) {
-                case 78 /* Identifier */:
+                case 79 /* Identifier */:
                     return !ts.isLabelName(node) && !ts.isTagName(node) && !ts.isConstTypeReference(node.parent);
-                case 202 /* PropertyAccessExpression */:
-                case 158 /* QualifiedName */:
+                case 204 /* PropertyAccessExpression */:
+                case 159 /* QualifiedName */:
                     // Don't return quickInfo if inside the comment in `a/**/.b`
                     return !ts.isInComment(sourceFile, position);
-                case 107 /* ThisKeyword */:
-                case 188 /* ThisType */:
-                case 105 /* SuperKeyword */:
-                case 193 /* NamedTupleMember */:
+                case 108 /* ThisKeyword */:
+                case 190 /* ThisType */:
+                case 106 /* SuperKeyword */:
+                case 195 /* NamedTupleMember */:
                     return true;
                 default:
                     return false;
@@ -154102,16 +157537,16 @@
                 return undefined;
             }
             switch (node.kind) {
-                case 202 /* PropertyAccessExpression */:
-                case 158 /* QualifiedName */:
+                case 204 /* PropertyAccessExpression */:
+                case 159 /* QualifiedName */:
                 case 10 /* StringLiteral */:
-                case 94 /* FalseKeyword */:
-                case 109 /* TrueKeyword */:
-                case 103 /* NullKeyword */:
-                case 105 /* SuperKeyword */:
-                case 107 /* ThisKeyword */:
-                case 188 /* ThisType */:
-                case 78 /* Identifier */:
+                case 95 /* FalseKeyword */:
+                case 110 /* TrueKeyword */:
+                case 104 /* NullKeyword */:
+                case 106 /* SuperKeyword */:
+                case 108 /* ThisKeyword */:
+                case 190 /* ThisType */:
+                case 79 /* Identifier */:
                     break;
                 // Cant create the text span
                 default:
@@ -154127,7 +157562,7 @@
                     // If this is name of a module declarations, check if this is right side of dotted module name
                     // If parent of the module declaration which is parent of this node is module declaration and its body is the module declaration that this node is name of
                     // Then this name is name from dotted module
-                    if (nodeForStartPos.parent.parent.kind === 257 /* ModuleDeclaration */ &&
+                    if (nodeForStartPos.parent.parent.kind === 259 /* ModuleDeclaration */ &&
                         nodeForStartPos.parent.parent.body === nodeForStartPos.parent) {
                         // Use parent module declarations name for start pos
                         nodeForStartPos = nodeForStartPos.parent.parent.name;
@@ -154480,14 +157915,14 @@
             else {
                 // If is not commenting then remove all comments found.
                 for (var _i = 0, positions_1 = positions; _i < positions_1.length; _i++) {
-                    var pos_1 = positions_1[_i];
-                    var from = pos_1 - closeMultiline.length > 0 ? pos_1 - closeMultiline.length : 0;
+                    var pos_2 = positions_1[_i];
+                    var from = pos_2 - closeMultiline.length > 0 ? pos_2 - closeMultiline.length : 0;
                     var offset = text.substr(from, closeMultiline.length) === closeMultiline ? closeMultiline.length : 0;
                     textChanges.push({
                         newText: "",
                         span: {
                             length: openMultiline.length,
-                            start: pos_1 - offset
+                            start: pos_2 - offset
                         }
                     });
                 }
@@ -154680,6 +158115,16 @@
                 kind: kind
             };
         }
+        function getInlayHintsContext(file, span, preferences) {
+            return {
+                file: file,
+                program: getProgram(),
+                host: host,
+                span: span,
+                preferences: preferences,
+                cancellationToken: cancellationToken,
+            };
+        }
         function getSmartSelectionRange(fileName, position) {
             return ts.SmartSelectionRange.getSmartSelectionRange(position, syntaxTreeCache.getCurrentSourceFile(fileName));
         }
@@ -154722,6 +158167,12 @@
             var declaration = ts.firstOrOnly(ts.CallHierarchy.resolveCallHierarchyDeclaration(program, position === 0 ? sourceFile : ts.getTouchingPropertyName(sourceFile, position)));
             return declaration ? ts.CallHierarchy.getOutgoingCalls(program, declaration) : [];
         }
+        function provideInlayHints(fileName, span, preferences) {
+            if (preferences === void 0) { preferences = ts.emptyOptions; }
+            synchronizeHostData();
+            var sourceFile = getValidSourceFile(fileName);
+            return ts.InlayHints.provideInlayHints(getInlayHintsContext(sourceFile, span, preferences));
+        }
         var ls = {
             dispose: dispose,
             cleanupSemanticCache: cleanupSemanticCache,
@@ -154787,6 +158238,7 @@
             toggleMultilineComment: toggleMultilineComment,
             commentSelection: commentSelection,
             uncommentSelection: uncommentSelection,
+            provideInlayHints: provideInlayHints,
         };
         switch (languageServiceMode) {
             case ts.LanguageServiceMode.Semantic:
@@ -154848,7 +158300,7 @@
      */
     function literalIsName(node) {
         return ts.isDeclarationName(node) ||
-            node.parent.kind === 273 /* ExternalModuleReference */ ||
+            node.parent.kind === 275 /* ExternalModuleReference */ ||
             isArgumentOfElementAccessExpression(node) ||
             ts.isLiteralComputedPropertyDeclarationName(node);
     }
@@ -154866,13 +158318,13 @@
             case 10 /* StringLiteral */:
             case 14 /* NoSubstitutionTemplateLiteral */:
             case 8 /* NumericLiteral */:
-                if (node.parent.kind === 159 /* ComputedPropertyName */) {
+                if (node.parent.kind === 160 /* ComputedPropertyName */) {
                     return ts.isObjectLiteralElement(node.parent.parent) ? node.parent.parent : undefined;
                 }
             // falls through
-            case 78 /* Identifier */:
+            case 79 /* Identifier */:
                 return ts.isObjectLiteralElement(node.parent) &&
-                    (node.parent.parent.kind === 201 /* ObjectLiteralExpression */ || node.parent.parent.kind === 282 /* JsxAttributes */) &&
+                    (node.parent.parent.kind === 203 /* ObjectLiteralExpression */ || node.parent.parent.kind === 284 /* JsxAttributes */) &&
                     node.parent.name === node ? node.parent : undefined;
         }
         return undefined;
@@ -154914,7 +158366,7 @@
     function isArgumentOfElementAccessExpression(node) {
         return node &&
             node.parent &&
-            node.parent.kind === 203 /* ElementAccessExpression */ &&
+            node.parent.kind === 205 /* ElementAccessExpression */ &&
             node.parent.argumentExpression === node;
     }
     /**
@@ -154994,114 +158446,114 @@
                 if (node) {
                     var parent = node.parent;
                     switch (node.kind) {
-                        case 233 /* VariableStatement */:
+                        case 235 /* VariableStatement */:
                             // Span on first variable declaration
                             return spanInVariableDeclaration(node.declarationList.declarations[0]);
-                        case 250 /* VariableDeclaration */:
-                        case 164 /* PropertyDeclaration */:
-                        case 163 /* PropertySignature */:
+                        case 252 /* VariableDeclaration */:
+                        case 165 /* PropertyDeclaration */:
+                        case 164 /* PropertySignature */:
                             return spanInVariableDeclaration(node);
-                        case 161 /* Parameter */:
+                        case 162 /* Parameter */:
                             return spanInParameterDeclaration(node);
-                        case 252 /* FunctionDeclaration */:
-                        case 166 /* MethodDeclaration */:
-                        case 165 /* MethodSignature */:
-                        case 168 /* GetAccessor */:
-                        case 169 /* SetAccessor */:
-                        case 167 /* Constructor */:
-                        case 209 /* FunctionExpression */:
-                        case 210 /* ArrowFunction */:
+                        case 254 /* FunctionDeclaration */:
+                        case 167 /* MethodDeclaration */:
+                        case 166 /* MethodSignature */:
+                        case 170 /* GetAccessor */:
+                        case 171 /* SetAccessor */:
+                        case 169 /* Constructor */:
+                        case 211 /* FunctionExpression */:
+                        case 212 /* ArrowFunction */:
                             return spanInFunctionDeclaration(node);
-                        case 231 /* Block */:
+                        case 233 /* Block */:
                             if (ts.isFunctionBlock(node)) {
                                 return spanInFunctionBlock(node);
                             }
                         // falls through
-                        case 258 /* ModuleBlock */:
+                        case 260 /* ModuleBlock */:
                             return spanInBlock(node);
-                        case 288 /* CatchClause */:
+                        case 290 /* CatchClause */:
                             return spanInBlock(node.block);
-                        case 234 /* ExpressionStatement */:
+                        case 236 /* ExpressionStatement */:
                             // span on the expression
                             return textSpan(node.expression);
-                        case 243 /* ReturnStatement */:
+                        case 245 /* ReturnStatement */:
                             // span on return keyword and expression if present
                             return textSpan(node.getChildAt(0), node.expression);
-                        case 237 /* WhileStatement */:
+                        case 239 /* WhileStatement */:
                             // Span on while(...)
                             return textSpanEndingAtNextToken(node, node.expression);
-                        case 236 /* DoStatement */:
+                        case 238 /* DoStatement */:
                             // span in statement of the do statement
                             return spanInNode(node.statement);
-                        case 249 /* DebuggerStatement */:
+                        case 251 /* DebuggerStatement */:
                             // span on debugger keyword
                             return textSpan(node.getChildAt(0));
-                        case 235 /* IfStatement */:
+                        case 237 /* IfStatement */:
                             // set on if(..) span
                             return textSpanEndingAtNextToken(node, node.expression);
-                        case 246 /* LabeledStatement */:
+                        case 248 /* LabeledStatement */:
                             // span in statement
                             return spanInNode(node.statement);
-                        case 242 /* BreakStatement */:
-                        case 241 /* ContinueStatement */:
+                        case 244 /* BreakStatement */:
+                        case 243 /* ContinueStatement */:
                             // On break or continue keyword and label if present
                             return textSpan(node.getChildAt(0), node.label);
-                        case 238 /* ForStatement */:
+                        case 240 /* ForStatement */:
                             return spanInForStatement(node);
-                        case 239 /* ForInStatement */:
+                        case 241 /* ForInStatement */:
                             // span of for (a in ...)
                             return textSpanEndingAtNextToken(node, node.expression);
-                        case 240 /* ForOfStatement */:
+                        case 242 /* ForOfStatement */:
                             // span in initializer
                             return spanInInitializerOfForLike(node);
-                        case 245 /* SwitchStatement */:
+                        case 247 /* SwitchStatement */:
                             // span on switch(...)
                             return textSpanEndingAtNextToken(node, node.expression);
-                        case 285 /* CaseClause */:
-                        case 286 /* DefaultClause */:
+                        case 287 /* CaseClause */:
+                        case 288 /* DefaultClause */:
                             // span in first statement of the clause
                             return spanInNode(node.statements[0]);
-                        case 248 /* TryStatement */:
+                        case 250 /* TryStatement */:
                             // span in try block
                             return spanInBlock(node.tryBlock);
-                        case 247 /* ThrowStatement */:
+                        case 249 /* ThrowStatement */:
                             // span in throw ...
                             return textSpan(node, node.expression);
-                        case 267 /* ExportAssignment */:
+                        case 269 /* ExportAssignment */:
                             // span on export = id
                             return textSpan(node, node.expression);
-                        case 261 /* ImportEqualsDeclaration */:
+                        case 263 /* ImportEqualsDeclaration */:
                             // import statement without including semicolon
                             return textSpan(node, node.moduleReference);
-                        case 262 /* ImportDeclaration */:
+                        case 264 /* ImportDeclaration */:
                             // import statement without including semicolon
                             return textSpan(node, node.moduleSpecifier);
-                        case 268 /* ExportDeclaration */:
+                        case 270 /* ExportDeclaration */:
                             // import statement without including semicolon
                             return textSpan(node, node.moduleSpecifier);
-                        case 257 /* ModuleDeclaration */:
+                        case 259 /* ModuleDeclaration */:
                             // span on complete module if it is instantiated
                             if (ts.getModuleInstanceState(node) !== 1 /* Instantiated */) {
                                 return undefined;
                             }
                         // falls through
-                        case 253 /* ClassDeclaration */:
-                        case 256 /* EnumDeclaration */:
-                        case 292 /* EnumMember */:
-                        case 199 /* BindingElement */:
+                        case 255 /* ClassDeclaration */:
+                        case 258 /* EnumDeclaration */:
+                        case 294 /* EnumMember */:
+                        case 201 /* BindingElement */:
                             // span on complete node
                             return textSpan(node);
-                        case 244 /* WithStatement */:
+                        case 246 /* WithStatement */:
                             // span in statement
                             return spanInNode(node.statement);
-                        case 162 /* Decorator */:
+                        case 163 /* Decorator */:
                             return spanInNodeArray(parent.decorators);
-                        case 197 /* ObjectBindingPattern */:
-                        case 198 /* ArrayBindingPattern */:
+                        case 199 /* ObjectBindingPattern */:
+                        case 200 /* ArrayBindingPattern */:
                             return spanInBindingPattern(node);
                         // No breakpoint in interface, type alias
-                        case 254 /* InterfaceDeclaration */:
-                        case 255 /* TypeAliasDeclaration */:
+                        case 256 /* InterfaceDeclaration */:
+                        case 257 /* TypeAliasDeclaration */:
                             return undefined;
                         // Tokens:
                         case 26 /* SemicolonToken */:
@@ -155125,13 +158577,13 @@
                         case 29 /* LessThanToken */:
                             return spanInGreaterThanOrLessThanToken(node);
                         // Keywords:
-                        case 114 /* WhileKeyword */:
+                        case 115 /* WhileKeyword */:
                             return spanInWhileKeyword(node);
-                        case 90 /* ElseKeyword */:
-                        case 82 /* CatchKeyword */:
-                        case 95 /* FinallyKeyword */:
+                        case 91 /* ElseKeyword */:
+                        case 83 /* CatchKeyword */:
+                        case 96 /* FinallyKeyword */:
                             return spanInNextNode(node);
-                        case 157 /* OfKeyword */:
+                        case 158 /* OfKeyword */:
                             return spanInOfKeyword(node);
                         default:
                             // Destructuring pattern in destructuring assignment
@@ -155143,14 +158595,14 @@
                             // Set breakpoint on identifier element of destructuring pattern
                             // `a` or `...c` or `d: x` from
                             // `[a, b, ...c]` or `{ a, b }` or `{ d: x }` from destructuring pattern
-                            if ((node.kind === 78 /* Identifier */ ||
-                                node.kind === 221 /* SpreadElement */ ||
-                                node.kind === 289 /* PropertyAssignment */ ||
-                                node.kind === 290 /* ShorthandPropertyAssignment */) &&
+                            if ((node.kind === 79 /* Identifier */ ||
+                                node.kind === 223 /* SpreadElement */ ||
+                                node.kind === 291 /* PropertyAssignment */ ||
+                                node.kind === 292 /* ShorthandPropertyAssignment */) &&
                                 ts.isArrayLiteralOrObjectLiteralDestructuringPattern(parent)) {
                                 return textSpan(node);
                             }
-                            if (node.kind === 217 /* BinaryExpression */) {
+                            if (node.kind === 219 /* BinaryExpression */) {
                                 var _a = node, left = _a.left, operatorToken = _a.operatorToken;
                                 // Set breakpoint in destructuring pattern if its destructuring assignment
                                 // [a, b, c] or {a, b, c} of
@@ -155159,7 +158611,7 @@
                                 if (ts.isArrayLiteralOrObjectLiteralDestructuringPattern(left)) {
                                     return spanInArrayLiteralOrObjectLiteralDestructuringPattern(left);
                                 }
-                                if (operatorToken.kind === 62 /* EqualsToken */ && ts.isArrayLiteralOrObjectLiteralDestructuringPattern(node.parent)) {
+                                if (operatorToken.kind === 63 /* EqualsToken */ && ts.isArrayLiteralOrObjectLiteralDestructuringPattern(node.parent)) {
                                     // Set breakpoint on assignment expression element of destructuring pattern
                                     // a = expression of
                                     // [a = expression, b, c] = someExpression or
@@ -155172,22 +158624,22 @@
                             }
                             if (ts.isExpressionNode(node)) {
                                 switch (parent.kind) {
-                                    case 236 /* DoStatement */:
+                                    case 238 /* DoStatement */:
                                         // Set span as if on while keyword
                                         return spanInPreviousNode(node);
-                                    case 162 /* Decorator */:
+                                    case 163 /* Decorator */:
                                         // Set breakpoint on the decorator emit
                                         return spanInNode(node.parent);
-                                    case 238 /* ForStatement */:
-                                    case 240 /* ForOfStatement */:
+                                    case 240 /* ForStatement */:
+                                    case 242 /* ForOfStatement */:
                                         return textSpan(node);
-                                    case 217 /* BinaryExpression */:
+                                    case 219 /* BinaryExpression */:
                                         if (node.parent.operatorToken.kind === 27 /* CommaToken */) {
                                             // If this is a comma expression, the breakpoint is possible in this expression
                                             return textSpan(node);
                                         }
                                         break;
-                                    case 210 /* ArrowFunction */:
+                                    case 212 /* ArrowFunction */:
                                         if (node.parent.body === node) {
                                             // If this is body of arrow function, it is allowed to have the breakpoint
                                             return textSpan(node);
@@ -155196,21 +158648,21 @@
                                 }
                             }
                             switch (node.parent.kind) {
-                                case 289 /* PropertyAssignment */:
+                                case 291 /* PropertyAssignment */:
                                     // If this is name of property assignment, set breakpoint in the initializer
                                     if (node.parent.name === node &&
                                         !ts.isArrayLiteralOrObjectLiteralDestructuringPattern(node.parent.parent)) {
                                         return spanInNode(node.parent.initializer);
                                     }
                                     break;
-                                case 207 /* TypeAssertionExpression */:
+                                case 209 /* TypeAssertionExpression */:
                                     // Breakpoint in type assertion goes to its operand
                                     if (node.parent.type === node) {
                                         return spanInNextNode(node.parent.type);
                                     }
                                     break;
-                                case 250 /* VariableDeclaration */:
-                                case 161 /* Parameter */: {
+                                case 252 /* VariableDeclaration */:
+                                case 162 /* Parameter */: {
                                     // initializer of variable/parameter declaration go to previous node
                                     var _b = node.parent, initializer = _b.initializer, type = _b.type;
                                     if (initializer === node || type === node || ts.isAssignmentOperator(node.kind)) {
@@ -155218,7 +158670,7 @@
                                     }
                                     break;
                                 }
-                                case 217 /* BinaryExpression */: {
+                                case 219 /* BinaryExpression */: {
                                     var left = node.parent.left;
                                     if (ts.isArrayLiteralOrObjectLiteralDestructuringPattern(left) && node !== left) {
                                         // If initializer of destructuring assignment move to previous token
@@ -155248,7 +158700,7 @@
                 }
                 function spanInVariableDeclaration(variableDeclaration) {
                     // If declaration of for in statement, just set the span in parent
-                    if (variableDeclaration.parent.parent.kind === 239 /* ForInStatement */) {
+                    if (variableDeclaration.parent.parent.kind === 241 /* ForInStatement */) {
                         return spanInNode(variableDeclaration.parent.parent);
                     }
                     var parent = variableDeclaration.parent;
@@ -155260,7 +158712,7 @@
                     // or its declaration from 'for of'
                     if (variableDeclaration.initializer ||
                         ts.hasSyntacticModifier(variableDeclaration, 1 /* Export */) ||
-                        parent.parent.kind === 240 /* ForOfStatement */) {
+                        parent.parent.kind === 242 /* ForOfStatement */) {
                         return textSpanFromVariableDeclaration(variableDeclaration);
                     }
                     if (ts.isVariableDeclarationList(variableDeclaration.parent) &&
@@ -155301,7 +158753,7 @@
                 }
                 function canFunctionHaveSpanInWholeDeclaration(functionDeclaration) {
                     return ts.hasSyntacticModifier(functionDeclaration, 1 /* Export */) ||
-                        (functionDeclaration.parent.kind === 253 /* ClassDeclaration */ && functionDeclaration.kind !== 167 /* Constructor */);
+                        (functionDeclaration.parent.kind === 255 /* ClassDeclaration */ && functionDeclaration.kind !== 169 /* Constructor */);
                 }
                 function spanInFunctionDeclaration(functionDeclaration) {
                     // No breakpoints in the function signature
@@ -155324,26 +158776,26 @@
                 }
                 function spanInBlock(block) {
                     switch (block.parent.kind) {
-                        case 257 /* ModuleDeclaration */:
+                        case 259 /* ModuleDeclaration */:
                             if (ts.getModuleInstanceState(block.parent) !== 1 /* Instantiated */) {
                                 return undefined;
                             }
                         // Set on parent if on same line otherwise on first statement
                         // falls through
-                        case 237 /* WhileStatement */:
-                        case 235 /* IfStatement */:
-                        case 239 /* ForInStatement */:
+                        case 239 /* WhileStatement */:
+                        case 237 /* IfStatement */:
+                        case 241 /* ForInStatement */:
                             return spanInNodeIfStartsOnSameLine(block.parent, block.statements[0]);
                         // Set span on previous token if it starts on same line otherwise on the first statement of the block
-                        case 238 /* ForStatement */:
-                        case 240 /* ForOfStatement */:
+                        case 240 /* ForStatement */:
+                        case 242 /* ForOfStatement */:
                             return spanInNodeIfStartsOnSameLine(ts.findPrecedingToken(block.pos, sourceFile, block.parent), block.statements[0]);
                     }
                     // Default action is to set on first statement
                     return spanInNode(block.statements[0]);
                 }
                 function spanInInitializerOfForLike(forLikeStatement) {
-                    if (forLikeStatement.initializer.kind === 251 /* VariableDeclarationList */) {
+                    if (forLikeStatement.initializer.kind === 253 /* VariableDeclarationList */) {
                         // Declaration list - set breakpoint in first declaration
                         var variableDeclarationList = forLikeStatement.initializer;
                         if (variableDeclarationList.declarations.length > 0) {
@@ -155368,21 +158820,21 @@
                 }
                 function spanInBindingPattern(bindingPattern) {
                     // Set breakpoint in first binding element
-                    var firstBindingElement = ts.forEach(bindingPattern.elements, function (element) { return element.kind !== 223 /* OmittedExpression */ ? element : undefined; });
+                    var firstBindingElement = ts.forEach(bindingPattern.elements, function (element) { return element.kind !== 225 /* OmittedExpression */ ? element : undefined; });
                     if (firstBindingElement) {
                         return spanInNode(firstBindingElement);
                     }
                     // Empty binding pattern of binding element, set breakpoint on binding element
-                    if (bindingPattern.parent.kind === 199 /* BindingElement */) {
+                    if (bindingPattern.parent.kind === 201 /* BindingElement */) {
                         return textSpan(bindingPattern.parent);
                     }
                     // Variable declaration is used as the span
                     return textSpanFromVariableDeclaration(bindingPattern.parent);
                 }
                 function spanInArrayLiteralOrObjectLiteralDestructuringPattern(node) {
-                    ts.Debug.assert(node.kind !== 198 /* ArrayBindingPattern */ && node.kind !== 197 /* ObjectBindingPattern */);
-                    var elements = node.kind === 200 /* ArrayLiteralExpression */ ? node.elements : node.properties;
-                    var firstBindingElement = ts.forEach(elements, function (element) { return element.kind !== 223 /* OmittedExpression */ ? element : undefined; });
+                    ts.Debug.assert(node.kind !== 200 /* ArrayBindingPattern */ && node.kind !== 199 /* ObjectBindingPattern */);
+                    var elements = node.kind === 202 /* ArrayLiteralExpression */ ? node.elements : node.properties;
+                    var firstBindingElement = ts.forEach(elements, function (element) { return element.kind !== 225 /* OmittedExpression */ ? element : undefined; });
                     if (firstBindingElement) {
                         return spanInNode(firstBindingElement);
                     }
@@ -155390,18 +158842,18 @@
                     // just nested element in another destructuring assignment
                     // set breakpoint on assignment when parent is destructuring assignment
                     // Otherwise set breakpoint for this element
-                    return textSpan(node.parent.kind === 217 /* BinaryExpression */ ? node.parent : node);
+                    return textSpan(node.parent.kind === 219 /* BinaryExpression */ ? node.parent : node);
                 }
                 // Tokens:
                 function spanInOpenBraceToken(node) {
                     switch (node.parent.kind) {
-                        case 256 /* EnumDeclaration */:
+                        case 258 /* EnumDeclaration */:
                             var enumDeclaration = node.parent;
                             return spanInNodeIfStartsOnSameLine(ts.findPrecedingToken(node.pos, sourceFile, node.parent), enumDeclaration.members.length ? enumDeclaration.members[0] : enumDeclaration.getLastToken(sourceFile));
-                        case 253 /* ClassDeclaration */:
+                        case 255 /* ClassDeclaration */:
                             var classDeclaration = node.parent;
                             return spanInNodeIfStartsOnSameLine(ts.findPrecedingToken(node.pos, sourceFile, node.parent), classDeclaration.members.length ? classDeclaration.members[0] : classDeclaration.getLastToken(sourceFile));
-                        case 259 /* CaseBlock */:
+                        case 261 /* CaseBlock */:
                             return spanInNodeIfStartsOnSameLine(node.parent.parent, node.parent.clauses[0]);
                     }
                     // Default to parent node
@@ -155409,25 +158861,25 @@
                 }
                 function spanInCloseBraceToken(node) {
                     switch (node.parent.kind) {
-                        case 258 /* ModuleBlock */:
+                        case 260 /* ModuleBlock */:
                             // If this is not an instantiated module block, no bp span
                             if (ts.getModuleInstanceState(node.parent.parent) !== 1 /* Instantiated */) {
                                 return undefined;
                             }
                         // falls through
-                        case 256 /* EnumDeclaration */:
-                        case 253 /* ClassDeclaration */:
+                        case 258 /* EnumDeclaration */:
+                        case 255 /* ClassDeclaration */:
                             // Span on close brace token
                             return textSpan(node);
-                        case 231 /* Block */:
+                        case 233 /* Block */:
                             if (ts.isFunctionBlock(node.parent)) {
                                 // Span on close brace token
                                 return textSpan(node);
                             }
                         // falls through
-                        case 288 /* CatchClause */:
+                        case 290 /* CatchClause */:
                             return spanInNode(ts.lastOrUndefined(node.parent.statements));
-                        case 259 /* CaseBlock */:
+                        case 261 /* CaseBlock */:
                             // breakpoint in last statement of the last clause
                             var caseBlock = node.parent;
                             var lastClause = ts.lastOrUndefined(caseBlock.clauses);
@@ -155435,7 +158887,7 @@
                                 return spanInNode(ts.lastOrUndefined(lastClause.statements));
                             }
                             return undefined;
-                        case 197 /* ObjectBindingPattern */:
+                        case 199 /* ObjectBindingPattern */:
                             // Breakpoint in last binding element or binding pattern if it contains no elements
                             var bindingPattern = node.parent;
                             return spanInNode(ts.lastOrUndefined(bindingPattern.elements) || bindingPattern);
@@ -155451,7 +158903,7 @@
                 }
                 function spanInCloseBracketToken(node) {
                     switch (node.parent.kind) {
-                        case 198 /* ArrayBindingPattern */:
+                        case 200 /* ArrayBindingPattern */:
                             // Breakpoint in last binding element or binding pattern if it contains no elements
                             var bindingPattern = node.parent;
                             return textSpan(ts.lastOrUndefined(bindingPattern.elements) || bindingPattern);
@@ -155466,12 +158918,12 @@
                     }
                 }
                 function spanInOpenParenToken(node) {
-                    if (node.parent.kind === 236 /* DoStatement */ || // Go to while keyword and do action instead
-                        node.parent.kind === 204 /* CallExpression */ ||
-                        node.parent.kind === 205 /* NewExpression */) {
+                    if (node.parent.kind === 238 /* DoStatement */ || // Go to while keyword and do action instead
+                        node.parent.kind === 206 /* CallExpression */ ||
+                        node.parent.kind === 207 /* NewExpression */) {
                         return spanInPreviousNode(node);
                     }
-                    if (node.parent.kind === 208 /* ParenthesizedExpression */) {
+                    if (node.parent.kind === 210 /* ParenthesizedExpression */) {
                         return spanInNextNode(node);
                     }
                     // Default to parent node
@@ -155480,21 +158932,21 @@
                 function spanInCloseParenToken(node) {
                     // Is this close paren token of parameter list, set span in previous token
                     switch (node.parent.kind) {
-                        case 209 /* FunctionExpression */:
-                        case 252 /* FunctionDeclaration */:
-                        case 210 /* ArrowFunction */:
-                        case 166 /* MethodDeclaration */:
-                        case 165 /* MethodSignature */:
-                        case 168 /* GetAccessor */:
-                        case 169 /* SetAccessor */:
-                        case 167 /* Constructor */:
-                        case 237 /* WhileStatement */:
-                        case 236 /* DoStatement */:
-                        case 238 /* ForStatement */:
-                        case 240 /* ForOfStatement */:
-                        case 204 /* CallExpression */:
-                        case 205 /* NewExpression */:
-                        case 208 /* ParenthesizedExpression */:
+                        case 211 /* FunctionExpression */:
+                        case 254 /* FunctionDeclaration */:
+                        case 212 /* ArrowFunction */:
+                        case 167 /* MethodDeclaration */:
+                        case 166 /* MethodSignature */:
+                        case 170 /* GetAccessor */:
+                        case 171 /* SetAccessor */:
+                        case 169 /* Constructor */:
+                        case 239 /* WhileStatement */:
+                        case 238 /* DoStatement */:
+                        case 240 /* ForStatement */:
+                        case 242 /* ForOfStatement */:
+                        case 206 /* CallExpression */:
+                        case 207 /* NewExpression */:
+                        case 210 /* ParenthesizedExpression */:
                             return spanInPreviousNode(node);
                         // Default to parent node
                         default:
@@ -155504,20 +158956,20 @@
                 function spanInColonToken(node) {
                     // Is this : specifying return annotation of the function declaration
                     if (ts.isFunctionLike(node.parent) ||
-                        node.parent.kind === 289 /* PropertyAssignment */ ||
-                        node.parent.kind === 161 /* Parameter */) {
+                        node.parent.kind === 291 /* PropertyAssignment */ ||
+                        node.parent.kind === 162 /* Parameter */) {
                         return spanInPreviousNode(node);
                     }
                     return spanInNode(node.parent);
                 }
                 function spanInGreaterThanOrLessThanToken(node) {
-                    if (node.parent.kind === 207 /* TypeAssertionExpression */) {
+                    if (node.parent.kind === 209 /* TypeAssertionExpression */) {
                         return spanInNextNode(node);
                     }
                     return spanInNode(node.parent);
                 }
                 function spanInWhileKeyword(node) {
-                    if (node.parent.kind === 236 /* DoStatement */) {
+                    if (node.parent.kind === 238 /* DoStatement */) {
                         // Set span on while expression
                         return textSpanEndingAtNextToken(node, node.parent.expression);
                     }
@@ -155525,7 +158977,7 @@
                     return spanInNode(node.parent);
                 }
                 function spanInOfKeyword(node) {
-                    if (node.parent.kind === 240 /* ForOfStatement */) {
+                    if (node.parent.kind === 242 /* ForOfStatement */) {
                         // Set using next token
                         return spanInNextNode(node);
                     }
@@ -156133,6 +159585,10 @@
             var _this = this;
             return this.forwardJSONCall("provideCallHierarchyOutgoingCalls('" + fileName + "', " + position + ")", function () { return _this.languageService.provideCallHierarchyOutgoingCalls(fileName, position); });
         };
+        LanguageServiceShimObject.prototype.provideInlayHints = function (fileName, span, preference) {
+            var _this = this;
+            return this.forwardJSONCall("provideInlayHints('" + fileName + "', '" + JSON.stringify(span) + "', " + JSON.stringify(preference) + ")", function () { return _this.languageService.provideInlayHints(fileName, span, preference); });
+        };
         /// Emit
         LanguageServiceShimObject.prototype.getEmitOutput = function (fileName) {
             var _this = this;
@@ -156283,7 +159739,7 @@
                     typeAcquisition: configFile.typeAcquisition,
                     files: configFile.fileNames,
                     raw: configFile.raw,
-                    errors: realizeDiagnostics(__spreadArray(__spreadArray([], result.parseDiagnostics), configFile.errors), "\r\n")
+                    errors: realizeDiagnostics(__spreadArray(__spreadArray([], result.parseDiagnostics, true), configFile.errors, true), "\r\n")
                 };
             });
         };
@@ -156631,7 +160087,7 @@
 (function (ts) {
     ts.WatchType.ClosedScriptInfo = "Closed Script info";
     ts.WatchType.ConfigFileForInferredRoot = "Config file for the inferred project root";
-    ts.WatchType.NodeModulesForClosedScriptInfo = "node_modules for closed script infos in them";
+    ts.WatchType.NodeModules = "node_modules for closed script infos and package.jsons affecting module specifier cache";
     ts.WatchType.MissingSourceMapFile = "Missing source map file";
     ts.WatchType.NoopConfigFileForInferredRoot = "Noop Config file for the inferred project root";
     ts.WatchType.MissingGeneratedFile = "Missing generated file";
@@ -156796,6 +160252,7 @@
                 CommandTypes["PrepareCallHierarchy"] = "prepareCallHierarchy";
                 CommandTypes["ProvideCallHierarchyIncomingCalls"] = "provideCallHierarchyIncomingCalls";
                 CommandTypes["ProvideCallHierarchyOutgoingCalls"] = "provideCallHierarchyOutgoingCalls";
+                CommandTypes["ProvideInlayHints"] = "provideInlayHints";
                 // NOTE: If updating this, be sure to also update `allCommandNames` in `testRunner/unittests/tsserver/session.ts`.
             })(CommandTypes = protocol.CommandTypes || (protocol.CommandTypes = {}));
             var WatchFileKind;
@@ -156821,6 +160278,15 @@
                 PollingWatchKind["DynamicPriority"] = "DynamicPriority";
                 PollingWatchKind["FixedChunkSize"] = "FixedChunkSize";
             })(PollingWatchKind = protocol.PollingWatchKind || (protocol.PollingWatchKind = {}));
+            var CompletionTriggerKind;
+            (function (CompletionTriggerKind) {
+                /** Completion was triggered by typing an identifier, manual invocation (e.g Ctrl+Space) or via API. */
+                CompletionTriggerKind[CompletionTriggerKind["Invoked"] = 1] = "Invoked";
+                /** Completion was triggered by a trigger character. */
+                CompletionTriggerKind[CompletionTriggerKind["TriggerCharacter"] = 2] = "TriggerCharacter";
+                /** Completion was re-triggered as the current completion list is incomplete. */
+                CompletionTriggerKind[CompletionTriggerKind["TriggerForIncompleteCompletions"] = 3] = "TriggerForIncompleteCompletions";
+            })(CompletionTriggerKind = protocol.CompletionTriggerKind || (protocol.CompletionTriggerKind = {}));
             var IndentStyle;
             (function (IndentStyle) {
                 IndentStyle["None"] = "None";
@@ -157702,9 +161168,7 @@
                 /*@internal*/
                 this.typingFiles = server.emptyArray;
                 /*@internal*/
-                this.exportMapCache = ts.createExportMapCache();
-                /*@internal*/
-                this.moduleSpecifierCache = ts.createModuleSpecifierCache();
+                this.moduleSpecifierCache = server.createModuleSpecifierCache(this);
                 /*@internal*/
                 this.globalCacheResolutionModuleName = ts.JsTyping.nonRelativeModuleNameForTypingCache;
                 this.directoryStructureHost = directoryStructureHost;
@@ -157800,8 +161264,13 @@
             });
             /*@internal*/
             Project.prototype.getSymlinkCache = function () {
-                var _a;
-                return this.symlinks || (this.symlinks = ts.discoverProbableSymlinks(((_a = this.program) === null || _a === void 0 ? void 0 : _a.getSourceFiles()) || server.emptyArray, this.getCanonicalFileName, this.getCurrentDirectory()));
+                if (!this.symlinks) {
+                    this.symlinks = ts.createSymlinkCache(this.getCurrentDirectory(), this.getCanonicalFileName);
+                }
+                if (this.program && !this.symlinks.hasProcessedResolutions()) {
+                    this.symlinks.setSymlinksFromResolutions(this.program.getSourceFiles(), this.program.getResolvedTypeReferenceDirectives());
+                }
+                return this.symlinks;
             };
             // Method of LanguageServiceHost
             Project.prototype.getCompilationSettings = function () {
@@ -158150,7 +161619,9 @@
                 this.resolutionCache.clear();
                 this.resolutionCache = undefined;
                 this.cachedUnresolvedImportsPerFile = undefined;
+                this.moduleSpecifierCache = undefined;
                 this.directoryStructureHost = undefined;
+                this.exportMapCache = undefined;
                 this.projectErrors = undefined;
                 // Clean up file watchers waiting for missing files
                 if (this.missingFilesMap) {
@@ -158330,7 +161801,7 @@
             /*@internal*/
             Project.prototype.markFileAsDirty = function (changedFile) {
                 this.markAsDirty();
-                if (!this.exportMapCache.isEmpty()) {
+                if (this.exportMapCache && !this.exportMapCache.isEmpty()) {
                     (this.changedFilesForExportMapCache || (this.changedFilesForExportMapCache = new ts.Set())).add(changedFile);
                 }
             };
@@ -158402,7 +161873,7 @@
                 else {
                     this.lastCachedUnresolvedImportsList = undefined;
                 }
-                var isFirstLoad = this.projectProgramVersion === 0;
+                var isFirstProgramLoad = this.projectProgramVersion === 0 && hasNewProgram;
                 if (hasNewProgram) {
                     this.projectProgramVersion++;
                 }
@@ -158411,7 +161882,7 @@
                         this.autoImportProviderHost = undefined;
                     (_a = this.autoImportProviderHost) === null || _a === void 0 ? void 0 : _a.markAsDirty();
                 }
-                if (isFirstLoad) {
+                if (isFirstProgramLoad) {
                     // Preload auto import provider so it's not created during completions request
                     this.getPackageJsonAutoImportProvider();
                 }
@@ -158440,7 +161911,6 @@
             };
             Project.prototype.updateGraphWorker = function () {
                 var _this = this;
-                var _a;
                 var oldProgram = this.program;
                 ts.Debug.assert(!this.isClosed(), "Called update graph worker of closed project");
                 this.writeLog("Starting updateGraphWorker: Project: " + this.getProjectName());
@@ -158458,8 +161928,8 @@
                 if (this.program && (!oldProgram || (this.program !== oldProgram && this.program.structureIsReused !== 2 /* Completely */))) {
                     hasNewProgram = true;
                     if (oldProgram) {
-                        for (var _i = 0, _b = oldProgram.getSourceFiles(); _i < _b.length; _i++) {
-                            var f = _b[_i];
+                        for (var _i = 0, _a = oldProgram.getSourceFiles(); _i < _a.length; _i++) {
+                            var f = _a[_i];
                             var newFile = this.program.getSourceFileByPath(f.resolvedPath);
                             if (!newFile || (f.resolvedPath === f.path && newFile.resolvedPath !== f.path)) {
                                 // new program does not contain this file - detach it from the project
@@ -158508,7 +161978,8 @@
                         this.resolutionCache.updateTypeRootsWatch();
                     }
                 }
-                if (!this.exportMapCache.isEmpty()) {
+                if (this.exportMapCache && !this.exportMapCache.isEmpty()) {
+                    this.exportMapCache.releaseSymbols();
                     if (this.hasAddedorRemovedFiles || oldProgram && !this.program.structureIsReused) {
                         this.exportMapCache.clear();
                     }
@@ -158544,12 +162015,12 @@
                 }, function (removed) { return _this.detachScriptInfoFromProject(removed); });
                 var elapsed = ts.timestamp() - start;
                 this.sendPerformanceEvent("UpdateGraph", elapsed);
-                this.writeLog("Finishing updateGraphWorker: Project: " + this.getProjectName() + " Version: " + this.getProjectVersion() + " structureChanged: " + hasNewProgram + " Elapsed: " + elapsed + "ms");
+                this.writeLog("Finishing updateGraphWorker: Project: " + this.getProjectName() + " Version: " + this.getProjectVersion() + " structureChanged: " + hasNewProgram + (this.program ? " structureIsReused:: " + ts.StructureIsReused[this.program.structureIsReused] : "") + " Elapsed: " + elapsed + "ms");
                 if (this.hasAddedorRemovedFiles) {
                     this.print(/*writeProjectFileNames*/ true);
                 }
                 else if (this.program !== oldProgram) {
-                    this.writeLog("Different program with same set of files:: structureIsReused:: " + ((_a = this.program) === null || _a === void 0 ? void 0 : _a.structureIsReused));
+                    this.writeLog("Different program with same set of files");
                 }
                 return hasNewProgram;
             };
@@ -158687,6 +162158,7 @@
                         this.cachedUnresolvedImportsPerFile.clear();
                         this.lastCachedUnresolvedImportsList = undefined;
                         this.resolutionCache.clear();
+                        this.moduleSpecifierCache.clear();
                     }
                     this.markAsDirty();
                 }
@@ -158817,10 +162289,10 @@
                     return;
                 }
                 // Search any globally-specified probe paths, then our peer node_modules
-                var searchPaths = __spreadArray(__spreadArray([], this.projectService.pluginProbeLocations), [
+                var searchPaths = __spreadArray(__spreadArray([], this.projectService.pluginProbeLocations, true), [
                     // ../../.. to walk from X/node_modules/typescript/lib/tsserver.js to X/node_modules/
                     ts.combinePaths(this.projectService.getExecutingFilePath(), "../../.."),
-                ]);
+                ], false);
                 if (this.projectService.globalPlugins) {
                     var _loop_1 = function (globalPluginName) {
                         // Skip empty names from odd commandline parses
@@ -158880,7 +162352,8 @@
                         project: this,
                         languageService: this.languageService,
                         languageServiceHost: this,
-                        serverHost: this.projectService.host
+                        serverHost: this.projectService.host,
+                        session: this.projectService.session
                     };
                     var pluginModule = pluginModuleFactory({ typescript: ts });
                     var newLS = pluginModule.create(info);
@@ -158929,8 +162402,13 @@
                 return packageJsons;
             };
             /*@internal*/
-            Project.prototype.getExportMapCache = function () {
-                return this.exportMapCache;
+            Project.prototype.getCachedExportInfoMap = function () {
+                return this.exportMapCache || (this.exportMapCache = ts.createCacheableExportInfoMap(this));
+            };
+            /*@internal*/
+            Project.prototype.clearCachedExportInfoMap = function () {
+                var _a;
+                (_a = this.exportMapCache) === null || _a === void 0 ? void 0 : _a.clear();
             };
             /*@internal*/
             Project.prototype.getModuleSpecifierCache = function () {
@@ -158996,6 +162474,14 @@
                 var _this = this;
                 return !!ts.forEachEntry(this.projectService.openFiles, function (_, fileName) { return _this.projectService.tryGetDefaultProjectForFile(server.toNormalizedPath(fileName)) === _this; });
             };
+            /*@internal*/
+            Project.prototype.watchNodeModulesForPackageJsonChanges = function (directoryPath) {
+                return this.projectService.watchPackageJsonsInNodeModules(this.toPath(directoryPath), this);
+            };
+            /*@internal*/
+            Project.prototype.getIncompleteCompletionsCache = function () {
+                return this.projectService.getIncompleteCompletionsCache();
+            };
             return Project;
         }());
         server.Project = Project;
@@ -159021,10 +162507,6 @@
                 return unresolvedImports || server.emptyArray;
             });
         }
-        function createProjectNameFactoryWithCounter(nameFactory) {
-            var nextId = 1;
-            return function () { return nameFactory(nextId++); };
-        }
         /**
          * If a file is opened and no tsconfig (or jsconfig) is found,
          * the file and its imports/references are put into an InferredProject.
@@ -159033,7 +162515,7 @@
             __extends(InferredProject, _super);
             /*@internal*/
             function InferredProject(projectService, documentRegistry, compilerOptions, watchOptions, projectRootPath, currentDirectory, pluginConfigOverrides, typeAcquisition) {
-                var _this = _super.call(this, InferredProject.newName(), ProjectKind.Inferred, projectService, documentRegistry, 
+                var _this = _super.call(this, projectService.newInferredProjectName(), ProjectKind.Inferred, projectService, documentRegistry, 
                 // TODO: GH#18217
                 /*files*/ undefined, 
                 /*lastFileExceededProgramSize*/ undefined, compilerOptions, 
@@ -159108,7 +162590,6 @@
                     exclude: ts.emptyArray
                 };
             };
-            InferredProject.newName = createProjectNameFactoryWithCounter(server.makeInferredProjectName);
             return InferredProject;
         }(Project));
         server.InferredProject = InferredProject;
@@ -159116,7 +162597,7 @@
             __extends(AutoImportProviderProject, _super);
             /*@internal*/
             function AutoImportProviderProject(hostProject, initialRootNames, documentRegistry, compilerOptions) {
-                var _this = _super.call(this, AutoImportProviderProject.newName(), ProjectKind.AutoImportProvider, hostProject.projectService, documentRegistry, 
+                var _this = _super.call(this, hostProject.projectService.newAutoImportProviderProjectName(), ProjectKind.AutoImportProvider, hostProject.projectService, documentRegistry, 
                 /*hasExplicitListOfFiles*/ false, 
                 /*lastFileExceededProgramSize*/ undefined, compilerOptions, 
                 /*compileOnSaveEnabled*/ false, hostProject.getWatchOptions(), hostProject.projectService.host, hostProject.currentDirectory) || this;
@@ -159132,6 +162613,10 @@
                 if (!dependencySelection) {
                     return ts.emptyArray;
                 }
+                var program = hostProject.getCurrentProgram();
+                if (!program) {
+                    return ts.emptyArray;
+                }
                 var dependencyNames;
                 var rootNames;
                 var rootFileName = ts.combinePaths(hostProject.currentDirectory, ts.inferredTypesContainingFile);
@@ -159143,7 +162628,6 @@
                 }
                 if (dependencyNames) {
                     var resolutions = ts.map(ts.arrayFrom(dependencyNames.keys()), function (name) { return ts.resolveTypeReferenceDirective(name, rootFileName, compilerOptions, moduleResolutionHost); });
-                    var program = hostProject.getCurrentProgram();
                     var symlinkCache = hostProject.getSymlinkCache();
                     for (var _d = 0, resolutions_1 = resolutions; _d < resolutions_1.length; _d++) {
                         var resolution = resolutions_1[_d];
@@ -159174,7 +162658,7 @@
                 if (dependencySelection === 0 /* Off */) {
                     return undefined;
                 }
-                var compilerOptions = __assign(__assign({}, hostProject.getCompilerOptions()), { noLib: true, diagnostics: false, skipLibCheck: true, types: ts.emptyArray, lib: ts.emptyArray, sourceMap: false });
+                var compilerOptions = __assign(__assign({}, hostProject.getCompilerOptions()), this.compilerOptionsOverrides);
                 var rootNames = this.getRootFileNames(dependencySelection, hostProject, moduleResolutionHost, compilerOptions);
                 if (!rootNames.length) {
                     return undefined;
@@ -159198,7 +162682,7 @@
                 var oldProgram = this.getCurrentProgram();
                 var hasSameSetOfFiles = _super.prototype.updateGraph.call(this);
                 if (oldProgram && oldProgram !== this.getCurrentProgram()) {
-                    this.hostProject.getExportMapCache().clear();
+                    this.hostProject.clearCachedExportInfoMap();
                 }
                 return hasSameSetOfFiles;
             };
@@ -159241,9 +162725,17 @@
             AutoImportProviderProject.prototype.getSymlinkCache = function () {
                 return this.hostProject.getSymlinkCache();
             };
-            AutoImportProviderProject.newName = createProjectNameFactoryWithCounter(server.makeAutoImportProviderProjectName);
             /*@internal*/
             AutoImportProviderProject.maxDependencies = 10;
+            /*@internal*/
+            AutoImportProviderProject.compilerOptionsOverrides = {
+                diagnostics: false,
+                skipLibCheck: true,
+                sourceMap: false,
+                types: ts.emptyArray,
+                lib: ts.emptyArray,
+                noLib: true,
+            };
             return AutoImportProviderProject;
         }(Project));
         server.AutoImportProviderProject = AutoImportProviderProject;
@@ -159381,7 +162873,7 @@
                 }
                 // Search our peer node_modules, then any globally-specified probe paths
                 // ../../.. to walk from X/node_modules/typescript/lib/tsserver.js to X/node_modules/
-                var searchPaths = __spreadArray([ts.combinePaths(this.projectService.getExecutingFilePath(), "../../..")], this.projectService.pluginProbeLocations);
+                var searchPaths = __spreadArray([ts.combinePaths(this.projectService.getExecutingFilePath(), "../../..")], this.projectService.pluginProbeLocations, true);
                 if (this.projectService.allowLocalPluginLoads) {
                     var local = ts.getDirectoryPath(this.canonicalConfigFilePath);
                     this.projectService.logger.info("Local plugin loading enabled; adding " + local + " to search paths");
@@ -159833,6 +163325,10 @@
                 project.projectOptions = true;
             }
         }
+        function createProjectNameFactoryWithCounter(nameFactory) {
+            var nextId = 1;
+            return function () { return nameFactory(nextId++); };
+        }
         var ProjectService = /** @class */ (function () {
             function ProjectService(opts) {
                 var _this = this;
@@ -159841,7 +163337,7 @@
                  */
                 /*@internal*/
                 this.filenameToScriptInfo = new ts.Map();
-                this.scriptInfoInNodeModulesWatchers = new ts.Map();
+                this.nodeModulesWatchers = new ts.Map();
                 /**
                  * Contains all the deleted script info's version information so that
                  * it does not reset when creating script info again
@@ -159866,6 +163362,10 @@
                  * projects specified by a tsconfig.json file
                  */
                 this.configuredProjects = new ts.Map();
+                /*@internal*/
+                this.newInferredProjectName = createProjectNameFactoryWithCounter(server.makeInferredProjectName);
+                /*@internal*/
+                this.newAutoImportProviderProjectName = createProjectNameFactoryWithCounter(server.makeAutoImportProviderProjectName);
                 /**
                  * Open files: with value being project root path, and key being Path of the file that is open
                  */
@@ -159915,6 +163415,7 @@
                 this.pluginProbeLocations = opts.pluginProbeLocations || server.emptyArray;
                 this.allowLocalPluginLoads = !!opts.allowLocalPluginLoads;
                 this.typesMapLocation = (opts.typesMapLocation === undefined) ? ts.combinePaths(ts.getDirectoryPath(this.getExecutingFilePath()), "typesMap.json") : opts.typesMapLocation;
+                this.session = opts.session;
                 if (opts.serverMode !== undefined) {
                     this.serverMode = opts.serverMode;
                     this.syntaxOnly = this.serverMode === ts.LanguageServiceMode.Syntactic;
@@ -161198,8 +164699,10 @@
                 // If any of the project is still watching wild cards dont close the watcher
                 if (ts.forEachEntry(configFileExistenceInfo.config.projects, ts.identity))
                     return;
-                ts.clearMap(configFileExistenceInfo.config.watchedDirectories, ts.closeFileWatcherOf);
-                configFileExistenceInfo.config.watchedDirectories = undefined;
+                if (configFileExistenceInfo.config.watchedDirectories) {
+                    ts.clearMap(configFileExistenceInfo.config.watchedDirectories, ts.closeFileWatcherOf);
+                    configFileExistenceInfo.config.watchedDirectories = undefined;
+                }
                 configFileExistenceInfo.config.watchedDirectoriesStale = undefined;
             };
             ProjectService.prototype.updateNonInferredProjectFiles = function (project, files, propertyReader) {
@@ -161510,52 +165013,78 @@
                     }
                 }
             };
-            ProjectService.prototype.watchClosedScriptInfoInNodeModules = function (dir) {
+            ProjectService.prototype.createNodeModulesWatcher = function (dir) {
                 var _this = this;
-                // Watch only directory
-                var existing = this.scriptInfoInNodeModulesWatchers.get(dir);
-                if (existing) {
-                    existing.refCount++;
-                    return existing;
-                }
-                var watchDir = dir + "/node_modules";
-                var watcher = this.watchFactory.watchDirectory(watchDir, function (fileOrDirectory) {
+                var watcher = this.watchFactory.watchDirectory(dir, function (fileOrDirectory) {
+                    var _a;
                     var fileOrDirectoryPath = ts.removeIgnoredPath(_this.toPath(fileOrDirectory));
                     if (!fileOrDirectoryPath)
                         return;
-                    // Has extension
-                    ts.Debug.assert(result.refCount > 0);
-                    if (watchDir === fileOrDirectoryPath) {
-                        _this.refreshScriptInfosInDirectory(watchDir);
+                    // Clear module specifier cache for any projects whose cache was affected by
+                    // dependency package.jsons in this node_modules directory
+                    var basename = ts.getBaseFileName(fileOrDirectoryPath);
+                    if (((_a = result.affectedModuleSpecifierCacheProjects) === null || _a === void 0 ? void 0 : _a.size) && (basename === "package.json" || basename === "node_modules")) {
+                        result.affectedModuleSpecifierCacheProjects.forEach(function (projectName) {
+                            var _a, _b;
+                            (_b = (_a = _this.findProject(projectName)) === null || _a === void 0 ? void 0 : _a.getModuleSpecifierCache()) === null || _b === void 0 ? void 0 : _b.clear();
+                        });
                     }
-                    else {
-                        var info = _this.getScriptInfoForPath(fileOrDirectoryPath);
-                        if (info) {
-                            if (isScriptInfoWatchedFromNodeModules(info)) {
-                                _this.refreshScriptInfo(info);
-                            }
-                        }
-                        // Folder
-                        else if (!ts.hasExtension(fileOrDirectoryPath)) {
-                            _this.refreshScriptInfosInDirectory(fileOrDirectoryPath);
-                        }
-                    }
-                }, 1 /* Recursive */, this.hostConfiguration.watchOptions, ts.WatchType.NodeModulesForClosedScriptInfo);
-                var result = {
-                    close: function () {
-                        if (result.refCount === 1) {
-                            watcher.close();
-                            _this.scriptInfoInNodeModulesWatchers.delete(dir);
+                    // Refresh closed script info after an npm install
+                    if (result.refreshScriptInfoRefCount) {
+                        if (dir === fileOrDirectoryPath) {
+                            _this.refreshScriptInfosInDirectory(dir);
                         }
                         else {
-                            result.refCount--;
+                            var info = _this.getScriptInfoForPath(fileOrDirectoryPath);
+                            if (info) {
+                                if (isScriptInfoWatchedFromNodeModules(info)) {
+                                    _this.refreshScriptInfo(info);
+                                }
+                            }
+                            // Folder
+                            else if (!ts.hasExtension(fileOrDirectoryPath)) {
+                                _this.refreshScriptInfosInDirectory(fileOrDirectoryPath);
+                            }
+                        }
+                    }
+                }, 1 /* Recursive */, this.hostConfiguration.watchOptions, ts.WatchType.NodeModules);
+                var result = {
+                    refreshScriptInfoRefCount: 0,
+                    affectedModuleSpecifierCacheProjects: undefined,
+                    close: function () {
+                        var _a;
+                        if (!result.refreshScriptInfoRefCount && !((_a = result.affectedModuleSpecifierCacheProjects) === null || _a === void 0 ? void 0 : _a.size)) {
+                            watcher.close();
+                            _this.nodeModulesWatchers.delete(dir);
                         }
                     },
-                    refCount: 1
                 };
-                this.scriptInfoInNodeModulesWatchers.set(dir, result);
+                this.nodeModulesWatchers.set(dir, result);
                 return result;
             };
+            /*@internal*/
+            ProjectService.prototype.watchPackageJsonsInNodeModules = function (dir, project) {
+                var watcher = this.nodeModulesWatchers.get(dir) || this.createNodeModulesWatcher(dir);
+                (watcher.affectedModuleSpecifierCacheProjects || (watcher.affectedModuleSpecifierCacheProjects = new ts.Set())).add(project.getProjectName());
+                return {
+                    close: function () {
+                        var _a;
+                        (_a = watcher.affectedModuleSpecifierCacheProjects) === null || _a === void 0 ? void 0 : _a.delete(project.getProjectName());
+                        watcher.close();
+                    },
+                };
+            };
+            ProjectService.prototype.watchClosedScriptInfoInNodeModules = function (dir) {
+                var watchDir = dir + "/node_modules";
+                var watcher = this.nodeModulesWatchers.get(watchDir) || this.createNodeModulesWatcher(watchDir);
+                watcher.refreshScriptInfoRefCount++;
+                return {
+                    close: function () {
+                        watcher.refreshScriptInfoRefCount--;
+                        watcher.close();
+                    },
+                };
+            };
             ProjectService.prototype.getModifiedTime = function (info) {
                 return (this.host.getModifiedTime(info.path) || ts.missingFileModifiedTime).getTime();
             };
@@ -162011,20 +165540,37 @@
             /*@internal*/
             ProjectService.prototype.getOriginalLocationEnsuringConfiguredProject = function (project, location) {
                 var _this = this;
-                var originalLocation = project.isSourceOfProjectReferenceRedirect(location.fileName) ?
+                var isSourceOfProjectReferenceRedirect = project.isSourceOfProjectReferenceRedirect(location.fileName);
+                var originalLocation = isSourceOfProjectReferenceRedirect ?
                     location :
                     project.getSourceMapper().tryGetSourcePosition(location);
                 if (!originalLocation)
                     return undefined;
                 var fileName = originalLocation.fileName;
-                if (!this.getScriptInfo(fileName) && !this.host.fileExists(fileName))
+                var scriptInfo = this.getScriptInfo(fileName);
+                if (!scriptInfo && !this.host.fileExists(fileName))
                     return undefined;
                 var originalFileInfo = { fileName: server.toNormalizedPath(fileName), path: this.toPath(fileName) };
                 var configFileName = this.getConfigFileNameForFile(originalFileInfo);
                 if (!configFileName)
                     return undefined;
-                var configuredProject = this.findConfiguredProjectByProjectName(configFileName) ||
-                    this.createAndLoadConfiguredProject(configFileName, "Creating project for original file: " + originalFileInfo.fileName + (location !== originalLocation ? " for location: " + location.fileName : ""));
+                var configuredProject = this.findConfiguredProjectByProjectName(configFileName);
+                if (!configuredProject) {
+                    if (project.getCompilerOptions().disableReferencedProjectLoad) {
+                        // If location was a project reference redirect, then `location` and `originalLocation` are the same.
+                        if (isSourceOfProjectReferenceRedirect) {
+                            return location;
+                        }
+                        // Otherwise, if we found `originalLocation` via a source map instead, then we check whether it's in
+                        // an open project.  If it is, we should search the containing project(s), even though the "default"
+                        // configured project isn't open.  However, if it's not in an open project, we need to stick with
+                        // `location` (i.e. the .d.ts file) because otherwise we'll miss the references in that file.
+                        return (scriptInfo === null || scriptInfo === void 0 ? void 0 : scriptInfo.containingProjects.length)
+                            ? originalLocation
+                            : location;
+                    }
+                    configuredProject = this.createAndLoadConfiguredProject(configFileName, "Creating project for original file: " + originalFileInfo.fileName + (location !== originalLocation ? " for location: " + location.fileName : ""));
+                }
                 updateProjectIfDirty(configuredProject);
                 var projectContainsOriginalInfo = function (project) {
                     var info = _this.getScriptInfo(fileName);
@@ -162856,11 +166402,29 @@
                     }
                 }
             };
+            /*@internal*/
+            ProjectService.prototype.getIncompleteCompletionsCache = function () {
+                return this.incompleteCompletionsCache || (this.incompleteCompletionsCache = createIncompleteCompletionsCache());
+            };
             /** Makes a filename safe to insert in a RegExp */
             ProjectService.filenameEscapeRegexp = /[-\/\\^$*+?.()|[\]{}]/g;
             return ProjectService;
         }());
         server.ProjectService = ProjectService;
+        function createIncompleteCompletionsCache() {
+            var info;
+            return {
+                get: function () {
+                    return info;
+                },
+                set: function (newInfo) {
+                    info = newInfo;
+                },
+                clear: function () {
+                    info = undefined;
+                }
+            };
+        }
         /* @internal */
         function isConfigFile(config) {
             return config.kind !== undefined;
@@ -162876,6 +166440,93 @@
 (function (ts) {
     var server;
     (function (server) {
+        function createModuleSpecifierCache(host) {
+            var containedNodeModulesWatchers;
+            var cache;
+            var currentKey;
+            var result = {
+                get: function (fromFileName, toFileName, preferences) {
+                    if (!cache || currentKey !== key(fromFileName, preferences))
+                        return undefined;
+                    return cache.get(toFileName);
+                },
+                set: function (fromFileName, toFileName, preferences, modulePaths, moduleSpecifiers) {
+                    ensureCache(fromFileName, preferences).set(toFileName, createInfo(modulePaths, moduleSpecifiers, /*isAutoImportable*/ true));
+                    // If any module specifiers were generated based off paths in node_modules,
+                    // a package.json file in that package was read and is an input to the cached.
+                    // Instead of watching each individual package.json file, set up a wildcard
+                    // directory watcher for any node_modules referenced and clear the cache when
+                    // it sees any changes.
+                    if (moduleSpecifiers) {
+                        for (var _i = 0, modulePaths_1 = modulePaths; _i < modulePaths_1.length; _i++) {
+                            var p = modulePaths_1[_i];
+                            if (p.isInNodeModules) {
+                                // No trailing slash
+                                var nodeModulesPath = p.path.substring(0, p.path.indexOf(ts.nodeModulesPathPart) + ts.nodeModulesPathPart.length - 1);
+                                if (!(containedNodeModulesWatchers === null || containedNodeModulesWatchers === void 0 ? void 0 : containedNodeModulesWatchers.has(nodeModulesPath))) {
+                                    (containedNodeModulesWatchers || (containedNodeModulesWatchers = new ts.Map())).set(nodeModulesPath, host.watchNodeModulesForPackageJsonChanges(nodeModulesPath));
+                                }
+                            }
+                        }
+                    }
+                },
+                setModulePaths: function (fromFileName, toFileName, preferences, modulePaths) {
+                    var cache = ensureCache(fromFileName, preferences);
+                    var info = cache.get(toFileName);
+                    if (info) {
+                        info.modulePaths = modulePaths;
+                    }
+                    else {
+                        cache.set(toFileName, createInfo(modulePaths, /*moduleSpecifiers*/ undefined, /*isAutoImportable*/ undefined));
+                    }
+                },
+                setIsAutoImportable: function (fromFileName, toFileName, preferences, isAutoImportable) {
+                    var cache = ensureCache(fromFileName, preferences);
+                    var info = cache.get(toFileName);
+                    if (info) {
+                        info.isAutoImportable = isAutoImportable;
+                    }
+                    else {
+                        cache.set(toFileName, createInfo(/*modulePaths*/ undefined, /*moduleSpecifiers*/ undefined, isAutoImportable));
+                    }
+                },
+                clear: function () {
+                    containedNodeModulesWatchers === null || containedNodeModulesWatchers === void 0 ? void 0 : containedNodeModulesWatchers.forEach(function (watcher) { return watcher.close(); });
+                    cache === null || cache === void 0 ? void 0 : cache.clear();
+                    containedNodeModulesWatchers === null || containedNodeModulesWatchers === void 0 ? void 0 : containedNodeModulesWatchers.clear();
+                    currentKey = undefined;
+                },
+                count: function () {
+                    return cache ? cache.size : 0;
+                }
+            };
+            if (ts.Debug.isDebugging) {
+                Object.defineProperty(result, "__cache", { get: function () { return cache; } });
+            }
+            return result;
+            function ensureCache(fromFileName, preferences) {
+                var newKey = key(fromFileName, preferences);
+                if (cache && (currentKey !== newKey)) {
+                    result.clear();
+                }
+                currentKey = newKey;
+                return cache || (cache = new ts.Map());
+            }
+            function key(fromFileName, preferences) {
+                return fromFileName + "," + preferences.importModuleSpecifierEnding + "," + preferences.importModuleSpecifierPreference;
+            }
+            function createInfo(modulePaths, moduleSpecifiers, isAutoImportable) {
+                return { modulePaths: modulePaths, moduleSpecifiers: moduleSpecifiers, isAutoImportable: isAutoImportable };
+            }
+        }
+        server.createModuleSpecifierCache = createModuleSpecifierCache;
+    })(server = ts.server || (ts.server = {}));
+})(ts || (ts = {}));
+/*@internal*/
+var ts;
+(function (ts) {
+    var server;
+    (function (server) {
         function createPackageJsonCache(host) {
             var packageJsons = new ts.Map();
             var directoriesWithoutPackageJson = new ts.Map();
@@ -163387,9 +167038,7 @@
             server.CommandNames.CompilerOptionsDiagnosticsFull,
             server.CommandNames.EncodedSemanticClassificationsFull,
             server.CommandNames.SemanticDiagnosticsSync,
-            server.CommandNames.SyntacticDiagnosticsSync,
             server.CommandNames.SuggestionDiagnosticsSync,
-            server.CommandNames.Geterr,
             server.CommandNames.GeterrForProject,
             server.CommandNames.Reload,
             server.CommandNames.ReloadProjects,
@@ -163411,7 +167060,7 @@
             server.CommandNames.ProvideCallHierarchyIncomingCalls,
             server.CommandNames.ProvideCallHierarchyOutgoingCalls,
         ];
-        var invalidSyntacticModeCommands = __spreadArray(__spreadArray([], invalidPartialSemanticModeCommands), [
+        var invalidSyntacticModeCommands = __spreadArray(__spreadArray([], invalidPartialSemanticModeCommands, true), [
             server.CommandNames.Definition,
             server.CommandNames.DefinitionFull,
             server.CommandNames.DefinitionAndBoundSpan,
@@ -163438,7 +167087,7 @@
             server.CommandNames.Occurrences,
             server.CommandNames.DocumentHighlights,
             server.CommandNames.DocumentHighlightsFull,
-        ]);
+        ], false);
         var Session = /** @class */ (function () {
             function Session(opts) {
                 var _a;
@@ -163822,6 +167471,9 @@
                     _a[server.CommandNames.UncommentSelectionFull] = function (request) {
                         return _this.requiredResponse(_this.uncommentSelection(request.arguments, /*simplifiedResult*/ false));
                     },
+                    _a[server.CommandNames.ProvideInlayHints] = function (request) {
+                        return _this.requiredResponse(_this.provideInlayHints(request.arguments));
+                    },
                     _a)));
                 this.host = opts.host;
                 this.cancellationToken = opts.cancellationToken;
@@ -163861,6 +167513,7 @@
                     typesMapLocation: opts.typesMapLocation,
                     syntaxOnly: opts.syntaxOnly,
                     serverMode: opts.serverMode,
+                    session: this
                 };
                 this.projectService = new server.ProjectService(settings);
                 this.projectService.setPerformanceEventHandler(this.performanceEventHandler.bind(this));
@@ -164115,7 +167768,7 @@
                         }
                     }
                     var fileName = item.fileName, project = item.project;
-                    // Ensure the project is upto date before checking if this file is present in the project
+                    // Ensure the project is up to date before checking if this file is present in the project.
                     server.updateProjectIfDirty(project);
                     if (!project.containsFile(fileName, requireOpen)) {
                         return;
@@ -164124,6 +167777,11 @@
                     if (_this.changeSeq !== seq) {
                         return;
                     }
+                    // Don't provide semantic diagnostics unless we're in full semantic mode.
+                    if (project.projectService.serverMode !== ts.LanguageServiceMode.Semantic) {
+                        goNext();
+                        return;
+                    }
                     next.immediate(function () {
                         _this.semanticCheck(fileName, project);
                         if (_this.changeSeq !== seq) {
@@ -164131,13 +167789,12 @@
                         }
                         if (_this.getPreferences(fileName).disableSuggestions) {
                             goNext();
+                            return;
                         }
-                        else {
-                            next.immediate(function () {
-                                _this.suggestionCheck(fileName, project);
-                                goNext();
-                            });
-                        }
+                        next.immediate(function () {
+                            _this.suggestionCheck(fileName, project);
+                            goNext();
+                        });
                     });
                 };
                 if (checkList.length > index && this.changeSeq === seq) {
@@ -164427,6 +168084,12 @@
                     };
                 });
             };
+            Session.prototype.provideInlayHints = function (args) {
+                var _a = this.getFileAndProject(args), file = _a.file, project = _a.project;
+                var scriptInfo = this.projectService.getScriptInfoForNormalizedPath(file);
+                var hints = project.getLanguageService().provideInlayHints(file, args, this.getPreferences(file));
+                return hints.map(function (hint) { return (__assign(__assign({}, hint), { position: scriptInfo.positionToLineOffset(hint.position) })); });
+            };
             Session.prototype.setCompilerOptionsForInferredProjects = function (args) {
                 this.projectService.setCompilerOptionsForInferredProjects(args.options, args.projectRootPath);
             };
@@ -164752,7 +168415,7 @@
                 var _a = this.getFileAndProject(args), file = _a.file, project = _a.project;
                 var scriptInfo = this.projectService.getScriptInfoForNormalizedPath(file);
                 var position = this.getPosition(args, scriptInfo);
-                var completions = project.getLanguageService().getCompletionsAtPosition(file, position, __assign(__assign({}, server.convertUserPreferences(this.getPreferences(file))), { triggerCharacter: args.triggerCharacter, includeExternalModuleExports: args.includeExternalModuleExports, includeInsertTextCompletions: args.includeInsertTextCompletions }));
+                var completions = project.getLanguageService().getCompletionsAtPosition(file, position, __assign(__assign({}, server.convertUserPreferences(this.getPreferences(file))), { triggerCharacter: args.triggerCharacter, triggerKind: args.triggerKind, includeExternalModuleExports: args.includeExternalModuleExports, includeInsertTextCompletions: args.includeInsertTextCompletions }));
                 if (completions === undefined)
                     return undefined;
                 if (kind === "completions-full" /* CompletionsFull */)
@@ -165092,7 +168755,7 @@
                 }
                 catch (e) {
                     var ls = project.getLanguageService();
-                    var existingDiagCodes_1 = __spreadArray(__spreadArray(__spreadArray([], ls.getSyntacticDiagnostics(file)), ls.getSemanticDiagnostics(file)), ls.getSuggestionDiagnostics(file)).map(function (d) {
+                    var existingDiagCodes_1 = __spreadArray(__spreadArray(__spreadArray([], ls.getSyntacticDiagnostics(file), true), ls.getSemanticDiagnostics(file), true), ls.getSuggestionDiagnostics(file), true).map(function (d) {
                         return ts.decodedTextSpanIntersectsWith(startPosition, endPosition - startPosition, d.start, d.length)
                             && d.code;
                     });
@@ -165226,7 +168889,7 @@
                         }
                     }
                 }
-                var sortedFiles = __spreadArray(__spreadArray(__spreadArray(__spreadArray([], highPriorityFiles), mediumPriorityFiles), lowPriorityFiles), veryLowPriorityFiles);
+                var sortedFiles = __spreadArray(__spreadArray(__spreadArray(__spreadArray([], highPriorityFiles, true), mediumPriorityFiles, true), lowPriorityFiles, true), veryLowPriorityFiles, true);
                 var checkList = sortedFiles.map(function (fileName) { return ({ fileName: fileName, project: project }); });
                 // Project level error analysis runs on background files too, therefore
                 // doesn't require the file to be opened
@@ -165595,10 +169258,8 @@
                 }
                 var lm = LineIndex.linesFromText(insertedText);
                 var lines = lm.lines;
-                if (lines.length > 1) {
-                    if (lines[lines.length - 1] === "") {
-                        lines.pop();
-                    }
+                if (lines.length > 1 && lines[lines.length - 1] === "") {
+                    lines.pop();
                 }
                 var branchParent;
                 var lastZeroCount;
@@ -166173,8 +169834,12 @@
                     }
                 }
                 // Skipped all children
-                var leaf = this.lineNumberToInfo(this.lineCount(), 0).leaf;
-                return { oneBasedLine: this.lineCount(), zeroBasedColumn: leaf ? leaf.charCount() : 0, lineText: undefined };
+                var lineCount = this.lineCount();
+                if (lineCount === 0) { // it's empty! (and lineNumberToInfo expects a one-based line)
+                    return { oneBasedLine: 1, zeroBasedColumn: 0, lineText: undefined };
+                }
+                var leaf = ts.Debug.checkDefined(this.lineNumberToInfo(lineCount, 0).leaf);
+                return { oneBasedLine: lineCount, zeroBasedColumn: leaf.charCount(), lineText: undefined };
             };
             /**
              * Input line number is relative to the start of this node.
@@ -167000,7 +170665,7 @@
         }
         else {
             type = operatorOrType;
-            operator = 138 /* KeyOfKeyword */;
+            operator = 139 /* KeyOfKeyword */;
         }
         return ts.factory.createTypeOperatorNode(operator, type);
     }, factoryDeprecation);
@@ -167178,9 +170843,9 @@
     ts.createNode = ts.Debug.deprecate(function createNode(kind, pos, end) {
         if (pos === void 0) { pos = 0; }
         if (end === void 0) { end = 0; }
-        return ts.setTextRangePosEnd(kind === 298 /* SourceFile */ ? ts.parseBaseNodeFactory.createBaseSourceFileNode(kind) :
-            kind === 78 /* Identifier */ ? ts.parseBaseNodeFactory.createBaseIdentifierNode(kind) :
-                kind === 79 /* PrivateIdentifier */ ? ts.parseBaseNodeFactory.createBasePrivateIdentifierNode(kind) :
+        return ts.setTextRangePosEnd(kind === 300 /* SourceFile */ ? ts.parseBaseNodeFactory.createBaseSourceFileNode(kind) :
+            kind === 79 /* Identifier */ ? ts.parseBaseNodeFactory.createBaseIdentifierNode(kind) :
+                kind === 80 /* PrivateIdentifier */ ? ts.parseBaseNodeFactory.createBasePrivateIdentifierNode(kind) :
                     !ts.isNodeKind(kind) ? ts.parseBaseNodeFactory.createBaseTokenNode(kind) :
                         ts.parseBaseNodeFactory.createBaseNode(kind), pos, end);
     }, { since: "4.0", warnAfter: "4.1", message: "Use an appropriate `factory` method instead." });
@@ -167207,7 +170872,7 @@
     // #region Renamed node Tests
     /** @deprecated Use `isTypeAssertionExpression` instead. */
     ts.isTypeAssertion = ts.Debug.deprecate(function isTypeAssertion(node) {
-        return node.kind === 207 /* TypeAssertionExpression */;
+        return node.kind === 209 /* TypeAssertionExpression */;
     }, {
         since: "4.0",
         warnAfter: "4.1",
diff --git a/node_modules/typescript/lib/typescript.d.ts b/node_modules/typescript/lib/typescript.d.ts
index 0cae150..4902d45 100644
--- a/node_modules/typescript/lib/typescript.d.ts
+++ b/node_modules/typescript/lib/typescript.d.ts
@@ -14,7 +14,7 @@
 ***************************************************************************** */
 
 declare namespace ts {
-    const versionMajorMinor = "4.3";
+    const versionMajorMinor = "4.4";
     /** The version of the TypeScript compiler release */
     const version: string;
     /**
@@ -166,306 +166,312 @@
         QuestionQuestionToken = 60,
         /** Only the JSDoc scanner produces BacktickToken. The normal scanner produces NoSubstitutionTemplateLiteral and related kinds. */
         BacktickToken = 61,
-        EqualsToken = 62,
-        PlusEqualsToken = 63,
-        MinusEqualsToken = 64,
-        AsteriskEqualsToken = 65,
-        AsteriskAsteriskEqualsToken = 66,
-        SlashEqualsToken = 67,
-        PercentEqualsToken = 68,
-        LessThanLessThanEqualsToken = 69,
-        GreaterThanGreaterThanEqualsToken = 70,
-        GreaterThanGreaterThanGreaterThanEqualsToken = 71,
-        AmpersandEqualsToken = 72,
-        BarEqualsToken = 73,
-        BarBarEqualsToken = 74,
-        AmpersandAmpersandEqualsToken = 75,
-        QuestionQuestionEqualsToken = 76,
-        CaretEqualsToken = 77,
-        Identifier = 78,
-        PrivateIdentifier = 79,
-        BreakKeyword = 80,
-        CaseKeyword = 81,
-        CatchKeyword = 82,
-        ClassKeyword = 83,
-        ConstKeyword = 84,
-        ContinueKeyword = 85,
-        DebuggerKeyword = 86,
-        DefaultKeyword = 87,
-        DeleteKeyword = 88,
-        DoKeyword = 89,
-        ElseKeyword = 90,
-        EnumKeyword = 91,
-        ExportKeyword = 92,
-        ExtendsKeyword = 93,
-        FalseKeyword = 94,
-        FinallyKeyword = 95,
-        ForKeyword = 96,
-        FunctionKeyword = 97,
-        IfKeyword = 98,
-        ImportKeyword = 99,
-        InKeyword = 100,
-        InstanceOfKeyword = 101,
-        NewKeyword = 102,
-        NullKeyword = 103,
-        ReturnKeyword = 104,
-        SuperKeyword = 105,
-        SwitchKeyword = 106,
-        ThisKeyword = 107,
-        ThrowKeyword = 108,
-        TrueKeyword = 109,
-        TryKeyword = 110,
-        TypeOfKeyword = 111,
-        VarKeyword = 112,
-        VoidKeyword = 113,
-        WhileKeyword = 114,
-        WithKeyword = 115,
-        ImplementsKeyword = 116,
-        InterfaceKeyword = 117,
-        LetKeyword = 118,
-        PackageKeyword = 119,
-        PrivateKeyword = 120,
-        ProtectedKeyword = 121,
-        PublicKeyword = 122,
-        StaticKeyword = 123,
-        YieldKeyword = 124,
-        AbstractKeyword = 125,
-        AsKeyword = 126,
-        AssertsKeyword = 127,
-        AnyKeyword = 128,
-        AsyncKeyword = 129,
-        AwaitKeyword = 130,
-        BooleanKeyword = 131,
-        ConstructorKeyword = 132,
-        DeclareKeyword = 133,
-        GetKeyword = 134,
-        InferKeyword = 135,
-        IntrinsicKeyword = 136,
-        IsKeyword = 137,
-        KeyOfKeyword = 138,
-        ModuleKeyword = 139,
-        NamespaceKeyword = 140,
-        NeverKeyword = 141,
-        ReadonlyKeyword = 142,
-        RequireKeyword = 143,
-        NumberKeyword = 144,
-        ObjectKeyword = 145,
-        SetKeyword = 146,
-        StringKeyword = 147,
-        SymbolKeyword = 148,
-        TypeKeyword = 149,
-        UndefinedKeyword = 150,
-        UniqueKeyword = 151,
-        UnknownKeyword = 152,
-        FromKeyword = 153,
-        GlobalKeyword = 154,
-        BigIntKeyword = 155,
-        OverrideKeyword = 156,
-        OfKeyword = 157,
-        QualifiedName = 158,
-        ComputedPropertyName = 159,
-        TypeParameter = 160,
-        Parameter = 161,
-        Decorator = 162,
-        PropertySignature = 163,
-        PropertyDeclaration = 164,
-        MethodSignature = 165,
-        MethodDeclaration = 166,
-        Constructor = 167,
-        GetAccessor = 168,
-        SetAccessor = 169,
-        CallSignature = 170,
-        ConstructSignature = 171,
-        IndexSignature = 172,
-        TypePredicate = 173,
-        TypeReference = 174,
-        FunctionType = 175,
-        ConstructorType = 176,
-        TypeQuery = 177,
-        TypeLiteral = 178,
-        ArrayType = 179,
-        TupleType = 180,
-        OptionalType = 181,
-        RestType = 182,
-        UnionType = 183,
-        IntersectionType = 184,
-        ConditionalType = 185,
-        InferType = 186,
-        ParenthesizedType = 187,
-        ThisType = 188,
-        TypeOperator = 189,
-        IndexedAccessType = 190,
-        MappedType = 191,
-        LiteralType = 192,
-        NamedTupleMember = 193,
-        TemplateLiteralType = 194,
-        TemplateLiteralTypeSpan = 195,
-        ImportType = 196,
-        ObjectBindingPattern = 197,
-        ArrayBindingPattern = 198,
-        BindingElement = 199,
-        ArrayLiteralExpression = 200,
-        ObjectLiteralExpression = 201,
-        PropertyAccessExpression = 202,
-        ElementAccessExpression = 203,
-        CallExpression = 204,
-        NewExpression = 205,
-        TaggedTemplateExpression = 206,
-        TypeAssertionExpression = 207,
-        ParenthesizedExpression = 208,
-        FunctionExpression = 209,
-        ArrowFunction = 210,
-        DeleteExpression = 211,
-        TypeOfExpression = 212,
-        VoidExpression = 213,
-        AwaitExpression = 214,
-        PrefixUnaryExpression = 215,
-        PostfixUnaryExpression = 216,
-        BinaryExpression = 217,
-        ConditionalExpression = 218,
-        TemplateExpression = 219,
-        YieldExpression = 220,
-        SpreadElement = 221,
-        ClassExpression = 222,
-        OmittedExpression = 223,
-        ExpressionWithTypeArguments = 224,
-        AsExpression = 225,
-        NonNullExpression = 226,
-        MetaProperty = 227,
-        SyntheticExpression = 228,
-        TemplateSpan = 229,
-        SemicolonClassElement = 230,
-        Block = 231,
-        EmptyStatement = 232,
-        VariableStatement = 233,
-        ExpressionStatement = 234,
-        IfStatement = 235,
-        DoStatement = 236,
-        WhileStatement = 237,
-        ForStatement = 238,
-        ForInStatement = 239,
-        ForOfStatement = 240,
-        ContinueStatement = 241,
-        BreakStatement = 242,
-        ReturnStatement = 243,
-        WithStatement = 244,
-        SwitchStatement = 245,
-        LabeledStatement = 246,
-        ThrowStatement = 247,
-        TryStatement = 248,
-        DebuggerStatement = 249,
-        VariableDeclaration = 250,
-        VariableDeclarationList = 251,
-        FunctionDeclaration = 252,
-        ClassDeclaration = 253,
-        InterfaceDeclaration = 254,
-        TypeAliasDeclaration = 255,
-        EnumDeclaration = 256,
-        ModuleDeclaration = 257,
-        ModuleBlock = 258,
-        CaseBlock = 259,
-        NamespaceExportDeclaration = 260,
-        ImportEqualsDeclaration = 261,
-        ImportDeclaration = 262,
-        ImportClause = 263,
-        NamespaceImport = 264,
-        NamedImports = 265,
-        ImportSpecifier = 266,
-        ExportAssignment = 267,
-        ExportDeclaration = 268,
-        NamedExports = 269,
-        NamespaceExport = 270,
-        ExportSpecifier = 271,
-        MissingDeclaration = 272,
-        ExternalModuleReference = 273,
-        JsxElement = 274,
-        JsxSelfClosingElement = 275,
-        JsxOpeningElement = 276,
-        JsxClosingElement = 277,
-        JsxFragment = 278,
-        JsxOpeningFragment = 279,
-        JsxClosingFragment = 280,
-        JsxAttribute = 281,
-        JsxAttributes = 282,
-        JsxSpreadAttribute = 283,
-        JsxExpression = 284,
-        CaseClause = 285,
-        DefaultClause = 286,
-        HeritageClause = 287,
-        CatchClause = 288,
-        PropertyAssignment = 289,
-        ShorthandPropertyAssignment = 290,
-        SpreadAssignment = 291,
-        EnumMember = 292,
-        UnparsedPrologue = 293,
-        UnparsedPrepend = 294,
-        UnparsedText = 295,
-        UnparsedInternalText = 296,
-        UnparsedSyntheticReference = 297,
-        SourceFile = 298,
-        Bundle = 299,
-        UnparsedSource = 300,
-        InputFiles = 301,
-        JSDocTypeExpression = 302,
-        JSDocNameReference = 303,
-        JSDocAllType = 304,
-        JSDocUnknownType = 305,
-        JSDocNullableType = 306,
-        JSDocNonNullableType = 307,
-        JSDocOptionalType = 308,
-        JSDocFunctionType = 309,
-        JSDocVariadicType = 310,
-        JSDocNamepathType = 311,
-        JSDocComment = 312,
-        JSDocText = 313,
-        JSDocTypeLiteral = 314,
-        JSDocSignature = 315,
-        JSDocLink = 316,
-        JSDocTag = 317,
-        JSDocAugmentsTag = 318,
-        JSDocImplementsTag = 319,
-        JSDocAuthorTag = 320,
-        JSDocDeprecatedTag = 321,
-        JSDocClassTag = 322,
-        JSDocPublicTag = 323,
-        JSDocPrivateTag = 324,
-        JSDocProtectedTag = 325,
-        JSDocReadonlyTag = 326,
-        JSDocOverrideTag = 327,
-        JSDocCallbackTag = 328,
-        JSDocEnumTag = 329,
-        JSDocParameterTag = 330,
-        JSDocReturnTag = 331,
-        JSDocThisTag = 332,
-        JSDocTypeTag = 333,
-        JSDocTemplateTag = 334,
-        JSDocTypedefTag = 335,
-        JSDocSeeTag = 336,
-        JSDocPropertyTag = 337,
-        SyntaxList = 338,
-        NotEmittedStatement = 339,
-        PartiallyEmittedExpression = 340,
-        CommaListExpression = 341,
-        MergeDeclarationMarker = 342,
-        EndOfDeclarationMarker = 343,
-        SyntheticReferenceExpression = 344,
-        Count = 345,
-        FirstAssignment = 62,
-        LastAssignment = 77,
-        FirstCompoundAssignment = 63,
-        LastCompoundAssignment = 77,
-        FirstReservedWord = 80,
-        LastReservedWord = 115,
-        FirstKeyword = 80,
-        LastKeyword = 157,
-        FirstFutureReservedWord = 116,
-        LastFutureReservedWord = 124,
-        FirstTypeNode = 173,
-        LastTypeNode = 196,
+        /** Only the JSDoc scanner produces HashToken. The normal scanner produces PrivateIdentifier. */
+        HashToken = 62,
+        EqualsToken = 63,
+        PlusEqualsToken = 64,
+        MinusEqualsToken = 65,
+        AsteriskEqualsToken = 66,
+        AsteriskAsteriskEqualsToken = 67,
+        SlashEqualsToken = 68,
+        PercentEqualsToken = 69,
+        LessThanLessThanEqualsToken = 70,
+        GreaterThanGreaterThanEqualsToken = 71,
+        GreaterThanGreaterThanGreaterThanEqualsToken = 72,
+        AmpersandEqualsToken = 73,
+        BarEqualsToken = 74,
+        BarBarEqualsToken = 75,
+        AmpersandAmpersandEqualsToken = 76,
+        QuestionQuestionEqualsToken = 77,
+        CaretEqualsToken = 78,
+        Identifier = 79,
+        PrivateIdentifier = 80,
+        BreakKeyword = 81,
+        CaseKeyword = 82,
+        CatchKeyword = 83,
+        ClassKeyword = 84,
+        ConstKeyword = 85,
+        ContinueKeyword = 86,
+        DebuggerKeyword = 87,
+        DefaultKeyword = 88,
+        DeleteKeyword = 89,
+        DoKeyword = 90,
+        ElseKeyword = 91,
+        EnumKeyword = 92,
+        ExportKeyword = 93,
+        ExtendsKeyword = 94,
+        FalseKeyword = 95,
+        FinallyKeyword = 96,
+        ForKeyword = 97,
+        FunctionKeyword = 98,
+        IfKeyword = 99,
+        ImportKeyword = 100,
+        InKeyword = 101,
+        InstanceOfKeyword = 102,
+        NewKeyword = 103,
+        NullKeyword = 104,
+        ReturnKeyword = 105,
+        SuperKeyword = 106,
+        SwitchKeyword = 107,
+        ThisKeyword = 108,
+        ThrowKeyword = 109,
+        TrueKeyword = 110,
+        TryKeyword = 111,
+        TypeOfKeyword = 112,
+        VarKeyword = 113,
+        VoidKeyword = 114,
+        WhileKeyword = 115,
+        WithKeyword = 116,
+        ImplementsKeyword = 117,
+        InterfaceKeyword = 118,
+        LetKeyword = 119,
+        PackageKeyword = 120,
+        PrivateKeyword = 121,
+        ProtectedKeyword = 122,
+        PublicKeyword = 123,
+        StaticKeyword = 124,
+        YieldKeyword = 125,
+        AbstractKeyword = 126,
+        AsKeyword = 127,
+        AssertsKeyword = 128,
+        AnyKeyword = 129,
+        AsyncKeyword = 130,
+        AwaitKeyword = 131,
+        BooleanKeyword = 132,
+        ConstructorKeyword = 133,
+        DeclareKeyword = 134,
+        GetKeyword = 135,
+        InferKeyword = 136,
+        IntrinsicKeyword = 137,
+        IsKeyword = 138,
+        KeyOfKeyword = 139,
+        ModuleKeyword = 140,
+        NamespaceKeyword = 141,
+        NeverKeyword = 142,
+        ReadonlyKeyword = 143,
+        RequireKeyword = 144,
+        NumberKeyword = 145,
+        ObjectKeyword = 146,
+        SetKeyword = 147,
+        StringKeyword = 148,
+        SymbolKeyword = 149,
+        TypeKeyword = 150,
+        UndefinedKeyword = 151,
+        UniqueKeyword = 152,
+        UnknownKeyword = 153,
+        FromKeyword = 154,
+        GlobalKeyword = 155,
+        BigIntKeyword = 156,
+        OverrideKeyword = 157,
+        OfKeyword = 158,
+        QualifiedName = 159,
+        ComputedPropertyName = 160,
+        TypeParameter = 161,
+        Parameter = 162,
+        Decorator = 163,
+        PropertySignature = 164,
+        PropertyDeclaration = 165,
+        MethodSignature = 166,
+        MethodDeclaration = 167,
+        ClassStaticBlockDeclaration = 168,
+        Constructor = 169,
+        GetAccessor = 170,
+        SetAccessor = 171,
+        CallSignature = 172,
+        ConstructSignature = 173,
+        IndexSignature = 174,
+        TypePredicate = 175,
+        TypeReference = 176,
+        FunctionType = 177,
+        ConstructorType = 178,
+        TypeQuery = 179,
+        TypeLiteral = 180,
+        ArrayType = 181,
+        TupleType = 182,
+        OptionalType = 183,
+        RestType = 184,
+        UnionType = 185,
+        IntersectionType = 186,
+        ConditionalType = 187,
+        InferType = 188,
+        ParenthesizedType = 189,
+        ThisType = 190,
+        TypeOperator = 191,
+        IndexedAccessType = 192,
+        MappedType = 193,
+        LiteralType = 194,
+        NamedTupleMember = 195,
+        TemplateLiteralType = 196,
+        TemplateLiteralTypeSpan = 197,
+        ImportType = 198,
+        ObjectBindingPattern = 199,
+        ArrayBindingPattern = 200,
+        BindingElement = 201,
+        ArrayLiteralExpression = 202,
+        ObjectLiteralExpression = 203,
+        PropertyAccessExpression = 204,
+        ElementAccessExpression = 205,
+        CallExpression = 206,
+        NewExpression = 207,
+        TaggedTemplateExpression = 208,
+        TypeAssertionExpression = 209,
+        ParenthesizedExpression = 210,
+        FunctionExpression = 211,
+        ArrowFunction = 212,
+        DeleteExpression = 213,
+        TypeOfExpression = 214,
+        VoidExpression = 215,
+        AwaitExpression = 216,
+        PrefixUnaryExpression = 217,
+        PostfixUnaryExpression = 218,
+        BinaryExpression = 219,
+        ConditionalExpression = 220,
+        TemplateExpression = 221,
+        YieldExpression = 222,
+        SpreadElement = 223,
+        ClassExpression = 224,
+        OmittedExpression = 225,
+        ExpressionWithTypeArguments = 226,
+        AsExpression = 227,
+        NonNullExpression = 228,
+        MetaProperty = 229,
+        SyntheticExpression = 230,
+        TemplateSpan = 231,
+        SemicolonClassElement = 232,
+        Block = 233,
+        EmptyStatement = 234,
+        VariableStatement = 235,
+        ExpressionStatement = 236,
+        IfStatement = 237,
+        DoStatement = 238,
+        WhileStatement = 239,
+        ForStatement = 240,
+        ForInStatement = 241,
+        ForOfStatement = 242,
+        ContinueStatement = 243,
+        BreakStatement = 244,
+        ReturnStatement = 245,
+        WithStatement = 246,
+        SwitchStatement = 247,
+        LabeledStatement = 248,
+        ThrowStatement = 249,
+        TryStatement = 250,
+        DebuggerStatement = 251,
+        VariableDeclaration = 252,
+        VariableDeclarationList = 253,
+        FunctionDeclaration = 254,
+        ClassDeclaration = 255,
+        InterfaceDeclaration = 256,
+        TypeAliasDeclaration = 257,
+        EnumDeclaration = 258,
+        ModuleDeclaration = 259,
+        ModuleBlock = 260,
+        CaseBlock = 261,
+        NamespaceExportDeclaration = 262,
+        ImportEqualsDeclaration = 263,
+        ImportDeclaration = 264,
+        ImportClause = 265,
+        NamespaceImport = 266,
+        NamedImports = 267,
+        ImportSpecifier = 268,
+        ExportAssignment = 269,
+        ExportDeclaration = 270,
+        NamedExports = 271,
+        NamespaceExport = 272,
+        ExportSpecifier = 273,
+        MissingDeclaration = 274,
+        ExternalModuleReference = 275,
+        JsxElement = 276,
+        JsxSelfClosingElement = 277,
+        JsxOpeningElement = 278,
+        JsxClosingElement = 279,
+        JsxFragment = 280,
+        JsxOpeningFragment = 281,
+        JsxClosingFragment = 282,
+        JsxAttribute = 283,
+        JsxAttributes = 284,
+        JsxSpreadAttribute = 285,
+        JsxExpression = 286,
+        CaseClause = 287,
+        DefaultClause = 288,
+        HeritageClause = 289,
+        CatchClause = 290,
+        PropertyAssignment = 291,
+        ShorthandPropertyAssignment = 292,
+        SpreadAssignment = 293,
+        EnumMember = 294,
+        UnparsedPrologue = 295,
+        UnparsedPrepend = 296,
+        UnparsedText = 297,
+        UnparsedInternalText = 298,
+        UnparsedSyntheticReference = 299,
+        SourceFile = 300,
+        Bundle = 301,
+        UnparsedSource = 302,
+        InputFiles = 303,
+        JSDocTypeExpression = 304,
+        JSDocNameReference = 305,
+        JSDocMemberName = 306,
+        JSDocAllType = 307,
+        JSDocUnknownType = 308,
+        JSDocNullableType = 309,
+        JSDocNonNullableType = 310,
+        JSDocOptionalType = 311,
+        JSDocFunctionType = 312,
+        JSDocVariadicType = 313,
+        JSDocNamepathType = 314,
+        JSDocComment = 315,
+        JSDocText = 316,
+        JSDocTypeLiteral = 317,
+        JSDocSignature = 318,
+        JSDocLink = 319,
+        JSDocLinkCode = 320,
+        JSDocLinkPlain = 321,
+        JSDocTag = 322,
+        JSDocAugmentsTag = 323,
+        JSDocImplementsTag = 324,
+        JSDocAuthorTag = 325,
+        JSDocDeprecatedTag = 326,
+        JSDocClassTag = 327,
+        JSDocPublicTag = 328,
+        JSDocPrivateTag = 329,
+        JSDocProtectedTag = 330,
+        JSDocReadonlyTag = 331,
+        JSDocOverrideTag = 332,
+        JSDocCallbackTag = 333,
+        JSDocEnumTag = 334,
+        JSDocParameterTag = 335,
+        JSDocReturnTag = 336,
+        JSDocThisTag = 337,
+        JSDocTypeTag = 338,
+        JSDocTemplateTag = 339,
+        JSDocTypedefTag = 340,
+        JSDocSeeTag = 341,
+        JSDocPropertyTag = 342,
+        SyntaxList = 343,
+        NotEmittedStatement = 344,
+        PartiallyEmittedExpression = 345,
+        CommaListExpression = 346,
+        MergeDeclarationMarker = 347,
+        EndOfDeclarationMarker = 348,
+        SyntheticReferenceExpression = 349,
+        Count = 350,
+        FirstAssignment = 63,
+        LastAssignment = 78,
+        FirstCompoundAssignment = 64,
+        LastCompoundAssignment = 78,
+        FirstReservedWord = 81,
+        LastReservedWord = 116,
+        FirstKeyword = 81,
+        LastKeyword = 158,
+        FirstFutureReservedWord = 117,
+        LastFutureReservedWord = 125,
+        FirstTypeNode = 175,
+        LastTypeNode = 198,
         FirstPunctuation = 18,
-        LastPunctuation = 77,
+        LastPunctuation = 78,
         FirstToken = 0,
-        LastToken = 157,
+        LastToken = 158,
         FirstTriviaToken = 2,
         LastTriviaToken = 7,
         FirstLiteralToken = 8,
@@ -473,25 +479,25 @@
         FirstTemplateToken = 14,
         LastTemplateToken = 17,
         FirstBinaryOperator = 29,
-        LastBinaryOperator = 77,
-        FirstStatement = 233,
-        LastStatement = 249,
-        FirstNode = 158,
-        FirstJSDocNode = 302,
-        LastJSDocNode = 337,
-        FirstJSDocTagNode = 317,
-        LastJSDocTagNode = 337,
+        LastBinaryOperator = 78,
+        FirstStatement = 235,
+        LastStatement = 251,
+        FirstNode = 159,
+        FirstJSDocNode = 304,
+        LastJSDocNode = 342,
+        FirstJSDocTagNode = 322,
+        LastJSDocTagNode = 342,
     }
     export type TriviaSyntaxKind = SyntaxKind.SingleLineCommentTrivia | SyntaxKind.MultiLineCommentTrivia | SyntaxKind.NewLineTrivia | SyntaxKind.WhitespaceTrivia | SyntaxKind.ShebangTrivia | SyntaxKind.ConflictMarkerTrivia;
     export type LiteralSyntaxKind = SyntaxKind.NumericLiteral | SyntaxKind.BigIntLiteral | SyntaxKind.StringLiteral | SyntaxKind.JsxText | SyntaxKind.JsxTextAllWhiteSpaces | SyntaxKind.RegularExpressionLiteral | SyntaxKind.NoSubstitutionTemplateLiteral;
     export type PseudoLiteralSyntaxKind = SyntaxKind.TemplateHead | SyntaxKind.TemplateMiddle | SyntaxKind.TemplateTail;
-    export type PunctuationSyntaxKind = SyntaxKind.OpenBraceToken | SyntaxKind.CloseBraceToken | SyntaxKind.OpenParenToken | SyntaxKind.CloseParenToken | SyntaxKind.OpenBracketToken | SyntaxKind.CloseBracketToken | SyntaxKind.DotToken | SyntaxKind.DotDotDotToken | SyntaxKind.SemicolonToken | SyntaxKind.CommaToken | SyntaxKind.QuestionDotToken | SyntaxKind.LessThanToken | SyntaxKind.LessThanSlashToken | SyntaxKind.GreaterThanToken | SyntaxKind.LessThanEqualsToken | SyntaxKind.GreaterThanEqualsToken | SyntaxKind.EqualsEqualsToken | SyntaxKind.ExclamationEqualsToken | SyntaxKind.EqualsEqualsEqualsToken | SyntaxKind.ExclamationEqualsEqualsToken | SyntaxKind.EqualsGreaterThanToken | SyntaxKind.PlusToken | SyntaxKind.MinusToken | SyntaxKind.AsteriskToken | SyntaxKind.AsteriskAsteriskToken | SyntaxKind.SlashToken | SyntaxKind.PercentToken | SyntaxKind.PlusPlusToken | SyntaxKind.MinusMinusToken | SyntaxKind.LessThanLessThanToken | SyntaxKind.GreaterThanGreaterThanToken | SyntaxKind.GreaterThanGreaterThanGreaterThanToken | SyntaxKind.AmpersandToken | SyntaxKind.BarToken | SyntaxKind.CaretToken | SyntaxKind.ExclamationToken | SyntaxKind.TildeToken | SyntaxKind.AmpersandAmpersandToken | SyntaxKind.BarBarToken | SyntaxKind.QuestionQuestionToken | SyntaxKind.QuestionToken | SyntaxKind.ColonToken | SyntaxKind.AtToken | SyntaxKind.BacktickToken | SyntaxKind.EqualsToken | SyntaxKind.PlusEqualsToken | SyntaxKind.MinusEqualsToken | SyntaxKind.AsteriskEqualsToken | SyntaxKind.AsteriskAsteriskEqualsToken | SyntaxKind.SlashEqualsToken | SyntaxKind.PercentEqualsToken | SyntaxKind.LessThanLessThanEqualsToken | SyntaxKind.GreaterThanGreaterThanEqualsToken | SyntaxKind.GreaterThanGreaterThanGreaterThanEqualsToken | SyntaxKind.AmpersandEqualsToken | SyntaxKind.BarEqualsToken | SyntaxKind.CaretEqualsToken;
+    export type PunctuationSyntaxKind = SyntaxKind.OpenBraceToken | SyntaxKind.CloseBraceToken | SyntaxKind.OpenParenToken | SyntaxKind.CloseParenToken | SyntaxKind.OpenBracketToken | SyntaxKind.CloseBracketToken | SyntaxKind.DotToken | SyntaxKind.DotDotDotToken | SyntaxKind.SemicolonToken | SyntaxKind.CommaToken | SyntaxKind.QuestionDotToken | SyntaxKind.LessThanToken | SyntaxKind.LessThanSlashToken | SyntaxKind.GreaterThanToken | SyntaxKind.LessThanEqualsToken | SyntaxKind.GreaterThanEqualsToken | SyntaxKind.EqualsEqualsToken | SyntaxKind.ExclamationEqualsToken | SyntaxKind.EqualsEqualsEqualsToken | SyntaxKind.ExclamationEqualsEqualsToken | SyntaxKind.EqualsGreaterThanToken | SyntaxKind.PlusToken | SyntaxKind.MinusToken | SyntaxKind.AsteriskToken | SyntaxKind.AsteriskAsteriskToken | SyntaxKind.SlashToken | SyntaxKind.PercentToken | SyntaxKind.PlusPlusToken | SyntaxKind.MinusMinusToken | SyntaxKind.LessThanLessThanToken | SyntaxKind.GreaterThanGreaterThanToken | SyntaxKind.GreaterThanGreaterThanGreaterThanToken | SyntaxKind.AmpersandToken | SyntaxKind.BarToken | SyntaxKind.CaretToken | SyntaxKind.ExclamationToken | SyntaxKind.TildeToken | SyntaxKind.AmpersandAmpersandToken | SyntaxKind.BarBarToken | SyntaxKind.QuestionQuestionToken | SyntaxKind.QuestionToken | SyntaxKind.ColonToken | SyntaxKind.AtToken | SyntaxKind.BacktickToken | SyntaxKind.HashToken | SyntaxKind.EqualsToken | SyntaxKind.PlusEqualsToken | SyntaxKind.MinusEqualsToken | SyntaxKind.AsteriskEqualsToken | SyntaxKind.AsteriskAsteriskEqualsToken | SyntaxKind.SlashEqualsToken | SyntaxKind.PercentEqualsToken | SyntaxKind.LessThanLessThanEqualsToken | SyntaxKind.GreaterThanGreaterThanEqualsToken | SyntaxKind.GreaterThanGreaterThanGreaterThanEqualsToken | SyntaxKind.AmpersandEqualsToken | SyntaxKind.BarEqualsToken | SyntaxKind.CaretEqualsToken;
     export type KeywordSyntaxKind = SyntaxKind.AbstractKeyword | SyntaxKind.AnyKeyword | SyntaxKind.AsKeyword | SyntaxKind.AssertsKeyword | SyntaxKind.AsyncKeyword | SyntaxKind.AwaitKeyword | SyntaxKind.BigIntKeyword | SyntaxKind.BooleanKeyword | SyntaxKind.BreakKeyword | SyntaxKind.CaseKeyword | SyntaxKind.CatchKeyword | SyntaxKind.ClassKeyword | SyntaxKind.ConstKeyword | SyntaxKind.ConstructorKeyword | SyntaxKind.ContinueKeyword | SyntaxKind.DebuggerKeyword | SyntaxKind.DeclareKeyword | SyntaxKind.DefaultKeyword | SyntaxKind.DeleteKeyword | SyntaxKind.DoKeyword | SyntaxKind.ElseKeyword | SyntaxKind.EnumKeyword | SyntaxKind.ExportKeyword | SyntaxKind.ExtendsKeyword | SyntaxKind.FalseKeyword | SyntaxKind.FinallyKeyword | SyntaxKind.ForKeyword | SyntaxKind.FromKeyword | SyntaxKind.FunctionKeyword | SyntaxKind.GetKeyword | SyntaxKind.GlobalKeyword | SyntaxKind.IfKeyword | SyntaxKind.ImplementsKeyword | SyntaxKind.ImportKeyword | SyntaxKind.InferKeyword | SyntaxKind.InKeyword | SyntaxKind.InstanceOfKeyword | SyntaxKind.InterfaceKeyword | SyntaxKind.IntrinsicKeyword | SyntaxKind.IsKeyword | SyntaxKind.KeyOfKeyword | SyntaxKind.LetKeyword | SyntaxKind.ModuleKeyword | SyntaxKind.NamespaceKeyword | SyntaxKind.NeverKeyword | SyntaxKind.NewKeyword | SyntaxKind.NullKeyword | SyntaxKind.NumberKeyword | SyntaxKind.ObjectKeyword | SyntaxKind.OfKeyword | SyntaxKind.PackageKeyword | SyntaxKind.PrivateKeyword | SyntaxKind.ProtectedKeyword | SyntaxKind.PublicKeyword | SyntaxKind.ReadonlyKeyword | SyntaxKind.OverrideKeyword | SyntaxKind.RequireKeyword | SyntaxKind.ReturnKeyword | SyntaxKind.SetKeyword | SyntaxKind.StaticKeyword | SyntaxKind.StringKeyword | SyntaxKind.SuperKeyword | SyntaxKind.SwitchKeyword | SyntaxKind.SymbolKeyword | SyntaxKind.ThisKeyword | SyntaxKind.ThrowKeyword | SyntaxKind.TrueKeyword | SyntaxKind.TryKeyword | SyntaxKind.TypeKeyword | SyntaxKind.TypeOfKeyword | SyntaxKind.UndefinedKeyword | SyntaxKind.UniqueKeyword | SyntaxKind.UnknownKeyword | SyntaxKind.VarKeyword | SyntaxKind.VoidKeyword | SyntaxKind.WhileKeyword | SyntaxKind.WithKeyword | SyntaxKind.YieldKeyword;
     export type ModifierSyntaxKind = SyntaxKind.AbstractKeyword | SyntaxKind.AsyncKeyword | SyntaxKind.ConstKeyword | SyntaxKind.DeclareKeyword | SyntaxKind.DefaultKeyword | SyntaxKind.ExportKeyword | SyntaxKind.PrivateKeyword | SyntaxKind.ProtectedKeyword | SyntaxKind.PublicKeyword | SyntaxKind.ReadonlyKeyword | SyntaxKind.OverrideKeyword | SyntaxKind.StaticKeyword;
     export type KeywordTypeSyntaxKind = SyntaxKind.AnyKeyword | SyntaxKind.BigIntKeyword | SyntaxKind.BooleanKeyword | SyntaxKind.IntrinsicKeyword | SyntaxKind.NeverKeyword | SyntaxKind.NumberKeyword | SyntaxKind.ObjectKeyword | SyntaxKind.StringKeyword | SyntaxKind.SymbolKeyword | SyntaxKind.UndefinedKeyword | SyntaxKind.UnknownKeyword | SyntaxKind.VoidKeyword;
     export type TokenSyntaxKind = SyntaxKind.Unknown | SyntaxKind.EndOfFileToken | TriviaSyntaxKind | LiteralSyntaxKind | PseudoLiteralSyntaxKind | PunctuationSyntaxKind | SyntaxKind.Identifier | KeywordSyntaxKind;
     export type JsxTokenSyntaxKind = SyntaxKind.LessThanSlashToken | SyntaxKind.EndOfFileToken | SyntaxKind.ConflictMarkerTrivia | SyntaxKind.JsxText | SyntaxKind.JsxTextAllWhiteSpaces | SyntaxKind.OpenBraceToken | SyntaxKind.LessThanToken;
-    export type JSDocSyntaxKind = SyntaxKind.EndOfFileToken | SyntaxKind.WhitespaceTrivia | SyntaxKind.AtToken | SyntaxKind.NewLineTrivia | SyntaxKind.AsteriskToken | SyntaxKind.OpenBraceToken | SyntaxKind.CloseBraceToken | SyntaxKind.LessThanToken | SyntaxKind.GreaterThanToken | SyntaxKind.OpenBracketToken | SyntaxKind.CloseBracketToken | SyntaxKind.EqualsToken | SyntaxKind.CommaToken | SyntaxKind.DotToken | SyntaxKind.Identifier | SyntaxKind.BacktickToken | SyntaxKind.Unknown | KeywordSyntaxKind;
+    export type JSDocSyntaxKind = SyntaxKind.EndOfFileToken | SyntaxKind.WhitespaceTrivia | SyntaxKind.AtToken | SyntaxKind.NewLineTrivia | SyntaxKind.AsteriskToken | SyntaxKind.OpenBraceToken | SyntaxKind.CloseBraceToken | SyntaxKind.LessThanToken | SyntaxKind.GreaterThanToken | SyntaxKind.OpenBracketToken | SyntaxKind.CloseBracketToken | SyntaxKind.EqualsToken | SyntaxKind.CommaToken | SyntaxKind.DotToken | SyntaxKind.Identifier | SyntaxKind.BacktickToken | SyntaxKind.HashToken | SyntaxKind.Unknown | KeywordSyntaxKind;
     export enum NodeFlags {
         None = 0,
         Let = 1,
@@ -563,13 +569,13 @@
     }
     export interface JSDocContainer {
     }
-    export type HasJSDoc = ParameterDeclaration | CallSignatureDeclaration | ConstructSignatureDeclaration | MethodSignature | PropertySignature | ArrowFunction | ParenthesizedExpression | SpreadAssignment | ShorthandPropertyAssignment | PropertyAssignment | FunctionExpression | EmptyStatement | DebuggerStatement | Block | VariableStatement | ExpressionStatement | IfStatement | DoStatement | WhileStatement | ForStatement | ForInStatement | ForOfStatement | BreakStatement | ContinueStatement | ReturnStatement | WithStatement | SwitchStatement | LabeledStatement | ThrowStatement | TryStatement | FunctionDeclaration | ConstructorDeclaration | MethodDeclaration | VariableDeclaration | PropertyDeclaration | AccessorDeclaration | ClassLikeDeclaration | InterfaceDeclaration | TypeAliasDeclaration | EnumMember | EnumDeclaration | ModuleDeclaration | ImportEqualsDeclaration | ImportDeclaration | NamespaceExportDeclaration | ExportAssignment | IndexSignatureDeclaration | FunctionTypeNode | ConstructorTypeNode | JSDocFunctionType | ExportDeclaration | NamedTupleMember | EndOfFileToken;
+    export type HasJSDoc = ParameterDeclaration | CallSignatureDeclaration | ClassStaticBlockDeclaration | ConstructSignatureDeclaration | MethodSignature | PropertySignature | ArrowFunction | ParenthesizedExpression | SpreadAssignment | ShorthandPropertyAssignment | PropertyAssignment | FunctionExpression | EmptyStatement | DebuggerStatement | Block | VariableStatement | ExpressionStatement | IfStatement | DoStatement | WhileStatement | ForStatement | ForInStatement | ForOfStatement | BreakStatement | ContinueStatement | ReturnStatement | WithStatement | SwitchStatement | LabeledStatement | ThrowStatement | TryStatement | FunctionDeclaration | ConstructorDeclaration | MethodDeclaration | VariableDeclaration | PropertyDeclaration | AccessorDeclaration | ClassLikeDeclaration | InterfaceDeclaration | TypeAliasDeclaration | EnumMember | EnumDeclaration | ModuleDeclaration | ImportEqualsDeclaration | ImportDeclaration | NamespaceExportDeclaration | ExportAssignment | IndexSignatureDeclaration | FunctionTypeNode | ConstructorTypeNode | JSDocFunctionType | ExportDeclaration | NamedTupleMember | EndOfFileToken;
     export type HasType = SignatureDeclaration | VariableDeclaration | ParameterDeclaration | PropertySignature | PropertyDeclaration | TypePredicateNode | ParenthesizedTypeNode | TypeOperatorNode | MappedTypeNode | AssertionExpression | TypeAliasDeclaration | JSDocTypeExpression | JSDocNonNullableType | JSDocNullableType | JSDocOptionalType | JSDocVariadicType;
     export type HasTypeArguments = CallExpression | NewExpression | TaggedTemplateExpression | JsxOpeningElement | JsxSelfClosingElement;
     export type HasInitializer = HasExpressionInitializer | ForStatement | ForInStatement | ForOfStatement | JsxAttribute;
     export type HasExpressionInitializer = VariableDeclaration | ParameterDeclaration | BindingElement | PropertySignature | PropertyDeclaration | PropertyAssignment | EnumMember;
     export interface NodeArray<T extends Node> extends ReadonlyArray<T>, ReadonlyTextRange {
-        hasTrailingComma?: boolean;
+        readonly hasTrailingComma: boolean;
     }
     export interface Token<TKind extends SyntaxKind> extends Node {
         readonly kind: TKind;
@@ -845,6 +851,11 @@
         readonly parent: ObjectTypeDeclaration;
         readonly type: TypeNode;
     }
+    export interface ClassStaticBlockDeclaration extends ClassElement, JSDocContainer {
+        readonly kind: SyntaxKind.ClassStaticBlockDeclaration;
+        readonly parent: ClassDeclaration | ClassExpression;
+        readonly body: Block;
+    }
     export interface TypeNode extends Node {
         _typeNodeBrand: any;
     }
@@ -1710,7 +1721,13 @@
     }
     export interface JSDocNameReference extends Node {
         readonly kind: SyntaxKind.JSDocNameReference;
-        readonly name: EntityName;
+        readonly name: EntityName | JSDocMemberName;
+    }
+    /** Class#method reference in JSDoc */
+    export interface JSDocMemberName extends Node {
+        readonly kind: SyntaxKind.JSDocMemberName;
+        readonly left: EntityName | JSDocMemberName;
+        readonly right: Identifier;
     }
     export interface JSDocType extends TypeNode {
         _jsDocTypeBrand: any;
@@ -1749,18 +1766,29 @@
         readonly kind: SyntaxKind.JSDocComment;
         readonly parent: HasJSDoc;
         readonly tags?: NodeArray<JSDocTag>;
-        readonly comment?: string | NodeArray<JSDocText | JSDocLink>;
+        readonly comment?: string | NodeArray<JSDocComment>;
     }
     export interface JSDocTag extends Node {
         readonly parent: JSDoc | JSDocTypeLiteral;
         readonly tagName: Identifier;
-        readonly comment?: string | NodeArray<JSDocText | JSDocLink>;
+        readonly comment?: string | NodeArray<JSDocComment>;
     }
     export interface JSDocLink extends Node {
         readonly kind: SyntaxKind.JSDocLink;
-        readonly name?: EntityName;
+        readonly name?: EntityName | JSDocMemberName;
         text: string;
     }
+    export interface JSDocLinkCode extends Node {
+        readonly kind: SyntaxKind.JSDocLinkCode;
+        readonly name?: EntityName | JSDocMemberName;
+        text: string;
+    }
+    export interface JSDocLinkPlain extends Node {
+        readonly kind: SyntaxKind.JSDocLinkPlain;
+        readonly name?: EntityName | JSDocMemberName;
+        text: string;
+    }
+    export type JSDocComment = JSDocText | JSDocLink | JSDocLinkCode | JSDocLinkPlain;
     export interface JSDocText extends Node {
         readonly kind: SyntaxKind.JSDocText;
         text: string;
@@ -2170,6 +2198,7 @@
         getPropertyOfType(type: Type, propertyName: string): Symbol | undefined;
         getPrivateIdentifierPropertyOfType(leftType: Type, name: string, location: Node): Symbol | undefined;
         getIndexInfoOfType(type: Type, kind: IndexKind): IndexInfo | undefined;
+        getIndexInfosOfType(type: Type): readonly IndexInfo[];
         getSignaturesOfType(type: Type, kind: SignatureKind): readonly Signature[];
         getIndexTypeOfType(type: Type, kind: IndexKind): Type | undefined;
         getBaseTypes(type: InterfaceType): BaseType[];
@@ -2186,7 +2215,7 @@
             typeArguments?: NodeArray<TypeNode>;
         } | undefined;
         /** Note that the resulting nodes cannot be checked. */
-        indexInfoToIndexSignatureDeclaration(indexInfo: IndexInfo, kind: IndexKind, enclosingDeclaration: Node | undefined, flags: NodeBuilderFlags | undefined): IndexSignatureDeclaration | undefined;
+        indexInfoToIndexSignatureDeclaration(indexInfo: IndexInfo, enclosingDeclaration: Node | undefined, flags: NodeBuilderFlags | undefined): IndexSignatureDeclaration | undefined;
         /** Note that the resulting nodes cannot be checked. */
         symbolToEntityName(symbol: Symbol, meaning: SymbolFlags, enclosingDeclaration: Node | undefined, flags: NodeBuilderFlags | undefined): EntityName | undefined;
         /** Note that the resulting nodes cannot be checked. */
@@ -2243,6 +2272,8 @@
         isValidPropertyAccess(node: PropertyAccessExpression | QualifiedName | ImportTypeNode, propertyName: string): boolean;
         /** Follow all aliases to get the original symbol. */
         getAliasedSymbol(symbol: Symbol): Symbol;
+        /** Follow a *single* alias to get the immediately aliased symbol. */
+        getImmediateAliasedSymbol(symbol: Symbol): Symbol | undefined;
         getExportsOfModule(moduleSymbol: Symbol): Symbol[];
         getJsxIntrinsicTagNamesAt(location: Node): Symbol[];
         isOptionalParameter(node: ParameterDeclaration): boolean;
@@ -2584,8 +2615,7 @@
         declaredProperties: Symbol[];
         declaredCallSignatures: Signature[];
         declaredConstructSignatures: Signature[];
-        declaredStringIndexInfo?: IndexInfo;
-        declaredNumberIndexInfo?: IndexInfo;
+        declaredIndexInfos: IndexInfo[];
     }
     /**
      * Type references (ObjectFlags.Reference). When a class or interface has type parameters or
@@ -2699,6 +2729,7 @@
         Number = 1
     }
     export interface IndexInfo {
+        keyType: Type;
         type: Type;
         isReadonly: boolean;
         declaration?: IndexSignatureDeclaration;
@@ -2831,6 +2862,7 @@
         downlevelIteration?: boolean;
         emitBOM?: boolean;
         emitDecoratorMetadata?: boolean;
+        exactOptionalPropertyTypes?: boolean;
         experimentalDecorators?: boolean;
         forceConsistentCasingInFileNames?: boolean;
         importHelpers?: boolean;
@@ -2896,6 +2928,7 @@
         suppressImplicitAnyIndexErrors?: boolean;
         target?: ScriptTarget;
         traceResolution?: boolean;
+        useUnknownInCatchVariables?: boolean;
         resolveJsonModule?: boolean;
         types?: string[];
         /** Paths used to compute primary types search locations */
@@ -3267,6 +3300,8 @@
         updateIndexSignature(node: IndexSignatureDeclaration, decorators: readonly Decorator[] | undefined, modifiers: readonly Modifier[] | undefined, parameters: readonly ParameterDeclaration[], type: TypeNode): IndexSignatureDeclaration;
         createTemplateLiteralTypeSpan(type: TypeNode, literal: TemplateMiddle | TemplateTail): TemplateLiteralTypeSpan;
         updateTemplateLiteralTypeSpan(node: TemplateLiteralTypeSpan, type: TypeNode, literal: TemplateMiddle | TemplateTail): TemplateLiteralTypeSpan;
+        createClassStaticBlockDeclaration(decorators: readonly Decorator[] | undefined, modifiers: readonly Modifier[] | undefined, body: Block): ClassStaticBlockDeclaration;
+        updateClassStaticBlockDeclaration(node: ClassStaticBlockDeclaration, decorators: readonly Decorator[] | undefined, modifiers: readonly Modifier[] | undefined, body: Block): ClassStaticBlockDeclaration;
         createKeywordTypeNode<TKind extends KeywordTypeSyntaxKind>(kind: TKind): KeywordTypeNode<TKind>;
         createTypePredicateNode(assertsModifier: AssertsKeyword | undefined, parameterName: Identifier | ThisTypeNode | string, type: TypeNode | undefined): TypePredicateNode;
         updateTypePredicateNode(node: TypePredicateNode, assertsModifier: AssertsKeyword | undefined, parameterName: Identifier | ThisTypeNode, type: TypeNode | undefined): TypePredicateNode;
@@ -3496,60 +3531,66 @@
         updateJSDocNamepathType(node: JSDocNamepathType, type: TypeNode): JSDocNamepathType;
         createJSDocTypeExpression(type: TypeNode): JSDocTypeExpression;
         updateJSDocTypeExpression(node: JSDocTypeExpression, type: TypeNode): JSDocTypeExpression;
-        createJSDocNameReference(name: EntityName): JSDocNameReference;
-        updateJSDocNameReference(node: JSDocNameReference, name: EntityName): JSDocNameReference;
-        createJSDocLink(name: EntityName | undefined, text: string): JSDocLink;
-        updateJSDocLink(node: JSDocLink, name: EntityName | undefined, text: string): JSDocLink;
+        createJSDocNameReference(name: EntityName | JSDocMemberName): JSDocNameReference;
+        updateJSDocNameReference(node: JSDocNameReference, name: EntityName | JSDocMemberName): JSDocNameReference;
+        createJSDocMemberName(left: EntityName | JSDocMemberName, right: Identifier): JSDocMemberName;
+        updateJSDocMemberName(node: JSDocMemberName, left: EntityName | JSDocMemberName, right: Identifier): JSDocMemberName;
+        createJSDocLink(name: EntityName | JSDocMemberName | undefined, text: string): JSDocLink;
+        updateJSDocLink(node: JSDocLink, name: EntityName | JSDocMemberName | undefined, text: string): JSDocLink;
+        createJSDocLinkCode(name: EntityName | JSDocMemberName | undefined, text: string): JSDocLinkCode;
+        updateJSDocLinkCode(node: JSDocLinkCode, name: EntityName | JSDocMemberName | undefined, text: string): JSDocLinkCode;
+        createJSDocLinkPlain(name: EntityName | JSDocMemberName | undefined, text: string): JSDocLinkPlain;
+        updateJSDocLinkPlain(node: JSDocLinkPlain, name: EntityName | JSDocMemberName | undefined, text: string): JSDocLinkPlain;
         createJSDocTypeLiteral(jsDocPropertyTags?: readonly JSDocPropertyLikeTag[], isArrayType?: boolean): JSDocTypeLiteral;
         updateJSDocTypeLiteral(node: JSDocTypeLiteral, jsDocPropertyTags: readonly JSDocPropertyLikeTag[] | undefined, isArrayType: boolean | undefined): JSDocTypeLiteral;
         createJSDocSignature(typeParameters: readonly JSDocTemplateTag[] | undefined, parameters: readonly JSDocParameterTag[], type?: JSDocReturnTag): JSDocSignature;
         updateJSDocSignature(node: JSDocSignature, typeParameters: readonly JSDocTemplateTag[] | undefined, parameters: readonly JSDocParameterTag[], type: JSDocReturnTag | undefined): JSDocSignature;
-        createJSDocTemplateTag(tagName: Identifier | undefined, constraint: JSDocTypeExpression | undefined, typeParameters: readonly TypeParameterDeclaration[], comment?: string | NodeArray<JSDocText | JSDocLink>): JSDocTemplateTag;
-        updateJSDocTemplateTag(node: JSDocTemplateTag, tagName: Identifier | undefined, constraint: JSDocTypeExpression | undefined, typeParameters: readonly TypeParameterDeclaration[], comment: string | NodeArray<JSDocText | JSDocLink> | undefined): JSDocTemplateTag;
-        createJSDocTypedefTag(tagName: Identifier | undefined, typeExpression?: JSDocTypeExpression | JSDocTypeLiteral, fullName?: Identifier | JSDocNamespaceDeclaration, comment?: string | NodeArray<JSDocText | JSDocLink>): JSDocTypedefTag;
-        updateJSDocTypedefTag(node: JSDocTypedefTag, tagName: Identifier | undefined, typeExpression: JSDocTypeExpression | JSDocTypeLiteral | undefined, fullName: Identifier | JSDocNamespaceDeclaration | undefined, comment: string | NodeArray<JSDocText | JSDocLink> | undefined): JSDocTypedefTag;
-        createJSDocParameterTag(tagName: Identifier | undefined, name: EntityName, isBracketed: boolean, typeExpression?: JSDocTypeExpression, isNameFirst?: boolean, comment?: string | NodeArray<JSDocText | JSDocLink>): JSDocParameterTag;
-        updateJSDocParameterTag(node: JSDocParameterTag, tagName: Identifier | undefined, name: EntityName, isBracketed: boolean, typeExpression: JSDocTypeExpression | undefined, isNameFirst: boolean, comment: string | NodeArray<JSDocText | JSDocLink> | undefined): JSDocParameterTag;
-        createJSDocPropertyTag(tagName: Identifier | undefined, name: EntityName, isBracketed: boolean, typeExpression?: JSDocTypeExpression, isNameFirst?: boolean, comment?: string | NodeArray<JSDocText | JSDocLink>): JSDocPropertyTag;
-        updateJSDocPropertyTag(node: JSDocPropertyTag, tagName: Identifier | undefined, name: EntityName, isBracketed: boolean, typeExpression: JSDocTypeExpression | undefined, isNameFirst: boolean, comment: string | NodeArray<JSDocText | JSDocLink> | undefined): JSDocPropertyTag;
-        createJSDocTypeTag(tagName: Identifier | undefined, typeExpression: JSDocTypeExpression, comment?: string | NodeArray<JSDocText | JSDocLink>): JSDocTypeTag;
-        updateJSDocTypeTag(node: JSDocTypeTag, tagName: Identifier | undefined, typeExpression: JSDocTypeExpression, comment: string | NodeArray<JSDocText | JSDocLink> | undefined): JSDocTypeTag;
-        createJSDocSeeTag(tagName: Identifier | undefined, nameExpression: JSDocNameReference | undefined, comment?: string | NodeArray<JSDocText | JSDocLink>): JSDocSeeTag;
-        updateJSDocSeeTag(node: JSDocSeeTag, tagName: Identifier | undefined, nameExpression: JSDocNameReference | undefined, comment?: string | NodeArray<JSDocText | JSDocLink>): JSDocSeeTag;
-        createJSDocReturnTag(tagName: Identifier | undefined, typeExpression?: JSDocTypeExpression, comment?: string | NodeArray<JSDocText | JSDocLink>): JSDocReturnTag;
-        updateJSDocReturnTag(node: JSDocReturnTag, tagName: Identifier | undefined, typeExpression: JSDocTypeExpression | undefined, comment: string | NodeArray<JSDocText | JSDocLink> | undefined): JSDocReturnTag;
-        createJSDocThisTag(tagName: Identifier | undefined, typeExpression: JSDocTypeExpression, comment?: string | NodeArray<JSDocText | JSDocLink>): JSDocThisTag;
-        updateJSDocThisTag(node: JSDocThisTag, tagName: Identifier | undefined, typeExpression: JSDocTypeExpression | undefined, comment: string | NodeArray<JSDocText | JSDocLink> | undefined): JSDocThisTag;
-        createJSDocEnumTag(tagName: Identifier | undefined, typeExpression: JSDocTypeExpression, comment?: string | NodeArray<JSDocText | JSDocLink>): JSDocEnumTag;
-        updateJSDocEnumTag(node: JSDocEnumTag, tagName: Identifier | undefined, typeExpression: JSDocTypeExpression, comment: string | NodeArray<JSDocText | JSDocLink> | undefined): JSDocEnumTag;
-        createJSDocCallbackTag(tagName: Identifier | undefined, typeExpression: JSDocSignature, fullName?: Identifier | JSDocNamespaceDeclaration, comment?: string | NodeArray<JSDocText | JSDocLink>): JSDocCallbackTag;
-        updateJSDocCallbackTag(node: JSDocCallbackTag, tagName: Identifier | undefined, typeExpression: JSDocSignature, fullName: Identifier | JSDocNamespaceDeclaration | undefined, comment: string | NodeArray<JSDocText | JSDocLink> | undefined): JSDocCallbackTag;
-        createJSDocAugmentsTag(tagName: Identifier | undefined, className: JSDocAugmentsTag["class"], comment?: string | NodeArray<JSDocText | JSDocLink>): JSDocAugmentsTag;
-        updateJSDocAugmentsTag(node: JSDocAugmentsTag, tagName: Identifier | undefined, className: JSDocAugmentsTag["class"], comment: string | NodeArray<JSDocText | JSDocLink> | undefined): JSDocAugmentsTag;
-        createJSDocImplementsTag(tagName: Identifier | undefined, className: JSDocImplementsTag["class"], comment?: string | NodeArray<JSDocText | JSDocLink>): JSDocImplementsTag;
-        updateJSDocImplementsTag(node: JSDocImplementsTag, tagName: Identifier | undefined, className: JSDocImplementsTag["class"], comment: string | NodeArray<JSDocText | JSDocLink> | undefined): JSDocImplementsTag;
-        createJSDocAuthorTag(tagName: Identifier | undefined, comment?: string | NodeArray<JSDocText | JSDocLink>): JSDocAuthorTag;
-        updateJSDocAuthorTag(node: JSDocAuthorTag, tagName: Identifier | undefined, comment: string | NodeArray<JSDocText | JSDocLink> | undefined): JSDocAuthorTag;
-        createJSDocClassTag(tagName: Identifier | undefined, comment?: string | NodeArray<JSDocText | JSDocLink>): JSDocClassTag;
-        updateJSDocClassTag(node: JSDocClassTag, tagName: Identifier | undefined, comment: string | NodeArray<JSDocText | JSDocLink> | undefined): JSDocClassTag;
-        createJSDocPublicTag(tagName: Identifier | undefined, comment?: string | NodeArray<JSDocText | JSDocLink>): JSDocPublicTag;
-        updateJSDocPublicTag(node: JSDocPublicTag, tagName: Identifier | undefined, comment: string | NodeArray<JSDocText | JSDocLink> | undefined): JSDocPublicTag;
-        createJSDocPrivateTag(tagName: Identifier | undefined, comment?: string | NodeArray<JSDocText | JSDocLink>): JSDocPrivateTag;
-        updateJSDocPrivateTag(node: JSDocPrivateTag, tagName: Identifier | undefined, comment: string | NodeArray<JSDocText | JSDocLink> | undefined): JSDocPrivateTag;
-        createJSDocProtectedTag(tagName: Identifier | undefined, comment?: string | NodeArray<JSDocText | JSDocLink>): JSDocProtectedTag;
-        updateJSDocProtectedTag(node: JSDocProtectedTag, tagName: Identifier | undefined, comment: string | NodeArray<JSDocText | JSDocLink> | undefined): JSDocProtectedTag;
-        createJSDocReadonlyTag(tagName: Identifier | undefined, comment?: string | NodeArray<JSDocText | JSDocLink>): JSDocReadonlyTag;
-        updateJSDocReadonlyTag(node: JSDocReadonlyTag, tagName: Identifier | undefined, comment: string | NodeArray<JSDocText | JSDocLink> | undefined): JSDocReadonlyTag;
-        createJSDocUnknownTag(tagName: Identifier, comment?: string | NodeArray<JSDocText | JSDocLink>): JSDocUnknownTag;
-        updateJSDocUnknownTag(node: JSDocUnknownTag, tagName: Identifier, comment: string | NodeArray<JSDocText | JSDocLink> | undefined): JSDocUnknownTag;
-        createJSDocDeprecatedTag(tagName: Identifier, comment?: string | NodeArray<JSDocText | JSDocLink>): JSDocDeprecatedTag;
-        updateJSDocDeprecatedTag(node: JSDocDeprecatedTag, tagName: Identifier, comment?: string | NodeArray<JSDocText | JSDocLink>): JSDocDeprecatedTag;
-        createJSDocOverrideTag(tagName: Identifier, comment?: string | NodeArray<JSDocText | JSDocLink>): JSDocOverrideTag;
-        updateJSDocOverrideTag(node: JSDocOverrideTag, tagName: Identifier, comment?: string | NodeArray<JSDocText | JSDocLink>): JSDocOverrideTag;
+        createJSDocTemplateTag(tagName: Identifier | undefined, constraint: JSDocTypeExpression | undefined, typeParameters: readonly TypeParameterDeclaration[], comment?: string | NodeArray<JSDocComment>): JSDocTemplateTag;
+        updateJSDocTemplateTag(node: JSDocTemplateTag, tagName: Identifier | undefined, constraint: JSDocTypeExpression | undefined, typeParameters: readonly TypeParameterDeclaration[], comment: string | NodeArray<JSDocComment> | undefined): JSDocTemplateTag;
+        createJSDocTypedefTag(tagName: Identifier | undefined, typeExpression?: JSDocTypeExpression | JSDocTypeLiteral, fullName?: Identifier | JSDocNamespaceDeclaration, comment?: string | NodeArray<JSDocComment>): JSDocTypedefTag;
+        updateJSDocTypedefTag(node: JSDocTypedefTag, tagName: Identifier | undefined, typeExpression: JSDocTypeExpression | JSDocTypeLiteral | undefined, fullName: Identifier | JSDocNamespaceDeclaration | undefined, comment: string | NodeArray<JSDocComment> | undefined): JSDocTypedefTag;
+        createJSDocParameterTag(tagName: Identifier | undefined, name: EntityName, isBracketed: boolean, typeExpression?: JSDocTypeExpression, isNameFirst?: boolean, comment?: string | NodeArray<JSDocComment>): JSDocParameterTag;
+        updateJSDocParameterTag(node: JSDocParameterTag, tagName: Identifier | undefined, name: EntityName, isBracketed: boolean, typeExpression: JSDocTypeExpression | undefined, isNameFirst: boolean, comment: string | NodeArray<JSDocComment> | undefined): JSDocParameterTag;
+        createJSDocPropertyTag(tagName: Identifier | undefined, name: EntityName, isBracketed: boolean, typeExpression?: JSDocTypeExpression, isNameFirst?: boolean, comment?: string | NodeArray<JSDocComment>): JSDocPropertyTag;
+        updateJSDocPropertyTag(node: JSDocPropertyTag, tagName: Identifier | undefined, name: EntityName, isBracketed: boolean, typeExpression: JSDocTypeExpression | undefined, isNameFirst: boolean, comment: string | NodeArray<JSDocComment> | undefined): JSDocPropertyTag;
+        createJSDocTypeTag(tagName: Identifier | undefined, typeExpression: JSDocTypeExpression, comment?: string | NodeArray<JSDocComment>): JSDocTypeTag;
+        updateJSDocTypeTag(node: JSDocTypeTag, tagName: Identifier | undefined, typeExpression: JSDocTypeExpression, comment: string | NodeArray<JSDocComment> | undefined): JSDocTypeTag;
+        createJSDocSeeTag(tagName: Identifier | undefined, nameExpression: JSDocNameReference | undefined, comment?: string | NodeArray<JSDocComment>): JSDocSeeTag;
+        updateJSDocSeeTag(node: JSDocSeeTag, tagName: Identifier | undefined, nameExpression: JSDocNameReference | undefined, comment?: string | NodeArray<JSDocComment>): JSDocSeeTag;
+        createJSDocReturnTag(tagName: Identifier | undefined, typeExpression?: JSDocTypeExpression, comment?: string | NodeArray<JSDocComment>): JSDocReturnTag;
+        updateJSDocReturnTag(node: JSDocReturnTag, tagName: Identifier | undefined, typeExpression: JSDocTypeExpression | undefined, comment: string | NodeArray<JSDocComment> | undefined): JSDocReturnTag;
+        createJSDocThisTag(tagName: Identifier | undefined, typeExpression: JSDocTypeExpression, comment?: string | NodeArray<JSDocComment>): JSDocThisTag;
+        updateJSDocThisTag(node: JSDocThisTag, tagName: Identifier | undefined, typeExpression: JSDocTypeExpression | undefined, comment: string | NodeArray<JSDocComment> | undefined): JSDocThisTag;
+        createJSDocEnumTag(tagName: Identifier | undefined, typeExpression: JSDocTypeExpression, comment?: string | NodeArray<JSDocComment>): JSDocEnumTag;
+        updateJSDocEnumTag(node: JSDocEnumTag, tagName: Identifier | undefined, typeExpression: JSDocTypeExpression, comment: string | NodeArray<JSDocComment> | undefined): JSDocEnumTag;
+        createJSDocCallbackTag(tagName: Identifier | undefined, typeExpression: JSDocSignature, fullName?: Identifier | JSDocNamespaceDeclaration, comment?: string | NodeArray<JSDocComment>): JSDocCallbackTag;
+        updateJSDocCallbackTag(node: JSDocCallbackTag, tagName: Identifier | undefined, typeExpression: JSDocSignature, fullName: Identifier | JSDocNamespaceDeclaration | undefined, comment: string | NodeArray<JSDocComment> | undefined): JSDocCallbackTag;
+        createJSDocAugmentsTag(tagName: Identifier | undefined, className: JSDocAugmentsTag["class"], comment?: string | NodeArray<JSDocComment>): JSDocAugmentsTag;
+        updateJSDocAugmentsTag(node: JSDocAugmentsTag, tagName: Identifier | undefined, className: JSDocAugmentsTag["class"], comment: string | NodeArray<JSDocComment> | undefined): JSDocAugmentsTag;
+        createJSDocImplementsTag(tagName: Identifier | undefined, className: JSDocImplementsTag["class"], comment?: string | NodeArray<JSDocComment>): JSDocImplementsTag;
+        updateJSDocImplementsTag(node: JSDocImplementsTag, tagName: Identifier | undefined, className: JSDocImplementsTag["class"], comment: string | NodeArray<JSDocComment> | undefined): JSDocImplementsTag;
+        createJSDocAuthorTag(tagName: Identifier | undefined, comment?: string | NodeArray<JSDocComment>): JSDocAuthorTag;
+        updateJSDocAuthorTag(node: JSDocAuthorTag, tagName: Identifier | undefined, comment: string | NodeArray<JSDocComment> | undefined): JSDocAuthorTag;
+        createJSDocClassTag(tagName: Identifier | undefined, comment?: string | NodeArray<JSDocComment>): JSDocClassTag;
+        updateJSDocClassTag(node: JSDocClassTag, tagName: Identifier | undefined, comment: string | NodeArray<JSDocComment> | undefined): JSDocClassTag;
+        createJSDocPublicTag(tagName: Identifier | undefined, comment?: string | NodeArray<JSDocComment>): JSDocPublicTag;
+        updateJSDocPublicTag(node: JSDocPublicTag, tagName: Identifier | undefined, comment: string | NodeArray<JSDocComment> | undefined): JSDocPublicTag;
+        createJSDocPrivateTag(tagName: Identifier | undefined, comment?: string | NodeArray<JSDocComment>): JSDocPrivateTag;
+        updateJSDocPrivateTag(node: JSDocPrivateTag, tagName: Identifier | undefined, comment: string | NodeArray<JSDocComment> | undefined): JSDocPrivateTag;
+        createJSDocProtectedTag(tagName: Identifier | undefined, comment?: string | NodeArray<JSDocComment>): JSDocProtectedTag;
+        updateJSDocProtectedTag(node: JSDocProtectedTag, tagName: Identifier | undefined, comment: string | NodeArray<JSDocComment> | undefined): JSDocProtectedTag;
+        createJSDocReadonlyTag(tagName: Identifier | undefined, comment?: string | NodeArray<JSDocComment>): JSDocReadonlyTag;
+        updateJSDocReadonlyTag(node: JSDocReadonlyTag, tagName: Identifier | undefined, comment: string | NodeArray<JSDocComment> | undefined): JSDocReadonlyTag;
+        createJSDocUnknownTag(tagName: Identifier, comment?: string | NodeArray<JSDocComment>): JSDocUnknownTag;
+        updateJSDocUnknownTag(node: JSDocUnknownTag, tagName: Identifier, comment: string | NodeArray<JSDocComment> | undefined): JSDocUnknownTag;
+        createJSDocDeprecatedTag(tagName: Identifier, comment?: string | NodeArray<JSDocComment>): JSDocDeprecatedTag;
+        updateJSDocDeprecatedTag(node: JSDocDeprecatedTag, tagName: Identifier, comment?: string | NodeArray<JSDocComment>): JSDocDeprecatedTag;
+        createJSDocOverrideTag(tagName: Identifier, comment?: string | NodeArray<JSDocComment>): JSDocOverrideTag;
+        updateJSDocOverrideTag(node: JSDocOverrideTag, tagName: Identifier, comment?: string | NodeArray<JSDocComment>): JSDocOverrideTag;
         createJSDocText(text: string): JSDocText;
         updateJSDocText(node: JSDocText, text: string): JSDocText;
-        createJSDocComment(comment?: string | NodeArray<JSDocText | JSDocLink> | undefined, tags?: readonly JSDocTag[] | undefined): JSDoc;
-        updateJSDocComment(node: JSDoc, comment: string | NodeArray<JSDocText | JSDocLink> | undefined, tags: readonly JSDocTag[] | undefined): JSDoc;
+        createJSDocComment(comment?: string | NodeArray<JSDocComment> | undefined, tags?: readonly JSDocTag[] | undefined): JSDoc;
+        updateJSDocComment(node: JSDoc, comment: string | NodeArray<JSDocComment> | undefined, tags: readonly JSDocTag[] | undefined): JSDoc;
         createJsxElement(openingElement: JsxOpeningElement, children: readonly JsxChild[], closingElement: JsxClosingElement): JsxElement;
         updateJsxElement(node: JsxElement, openingElement: JsxOpeningElement, children: readonly JsxChild[], closingElement: JsxClosingElement): JsxElement;
         createJsxSelfClosingElement(tagName: JsxTagNameExpression, typeArguments: readonly TypeNode[] | undefined, attributes: JsxAttributes): JsxSelfClosingElement;
@@ -3920,6 +3961,7 @@
         readonly includeCompletionsWithSnippetText?: boolean;
         readonly includeAutomaticOptionalChainCompletions?: boolean;
         readonly includeCompletionsWithInsertText?: boolean;
+        readonly allowIncompleteCompletions?: boolean;
         readonly importModuleSpecifierPreference?: "shortest" | "project-relative" | "relative" | "non-relative";
         /** Determines whether we import `foo/index.ts` as "foo", "foo/index", or "foo/index.js" */
         readonly importModuleSpecifierEnding?: "auto" | "minimal" | "index" | "js";
@@ -3951,6 +3993,7 @@
         useCaseSensitiveFileNames: boolean;
         write(s: string): void;
         writeOutputIsTTY?(): boolean;
+        getWidthOfTerminal?(): number;
         readFile(path: string, encoding?: string): string | undefined;
         getFileSize?(path: string): number;
         writeFile(path: string, data: string, writeByteOrderMark?: boolean): void;
@@ -4018,6 +4061,7 @@
         reScanJsxAttributeValue(): SyntaxKind;
         reScanJsxToken(allowMultilineJsxText?: boolean): JsxTokenSyntaxKind;
         reScanLessThanToken(): SyntaxKind;
+        reScanHashToken(): SyntaxKind;
         reScanQuestionToken(): SyntaxKind;
         reScanInvalidIdentifier(): SyntaxKind;
         scanJsxToken(): JsxTokenSyntaxKind;
@@ -4236,7 +4280,7 @@
     /** Gets all JSDoc tags of a specified kind */
     function getAllJSDocTagsOfKind(node: Node, kind: SyntaxKind): readonly JSDocTag[];
     /** Gets the text of a jsdoc comment, flattening links to their text. */
-    function getTextOfJSDocComment(comment?: string | NodeArray<JSDocText | JSDocLink>): string | undefined;
+    function getTextOfJSDocComment(comment?: string | NodeArray<JSDocComment>): string | undefined;
     /**
      * Gets the effective type parameters. If the node was parsed in a
      * JavaScript file, gets the type parameters from the `@template` tag from JSDoc.
@@ -4311,6 +4355,7 @@
     function hasOnlyExpressionInitializer(node: Node): node is HasExpressionInitializer;
     function isObjectLiteralElement(node: Node): node is ObjectLiteralElement;
     function isStringLiteralLike(node: Node): node is StringLiteralLike;
+    function isJSDocLinkLike(node: Node): node is JSDocLink | JSDocLinkCode | JSDocLinkPlain;
 }
 declare namespace ts {
     const factory: NodeFactory;
@@ -4421,6 +4466,7 @@
     function isPropertyDeclaration(node: Node): node is PropertyDeclaration;
     function isMethodSignature(node: Node): node is MethodSignature;
     function isMethodDeclaration(node: Node): node is MethodDeclaration;
+    function isClassStaticBlockDeclaration(node: Node): node is ClassStaticBlockDeclaration;
     function isConstructorDeclaration(node: Node): node is ConstructorDeclaration;
     function isGetAccessorDeclaration(node: Node): node is GetAccessorDeclaration;
     function isSetAccessorDeclaration(node: Node): node is SetAccessorDeclaration;
@@ -4556,7 +4602,10 @@
     function isUnparsedSource(node: Node): node is UnparsedSource;
     function isJSDocTypeExpression(node: Node): node is JSDocTypeExpression;
     function isJSDocNameReference(node: Node): node is JSDocNameReference;
+    function isJSDocMemberName(node: Node): node is JSDocMemberName;
     function isJSDocLink(node: Node): node is JSDocLink;
+    function isJSDocLinkCode(node: Node): node is JSDocLinkCode;
+    function isJSDocLinkPlain(node: Node): node is JSDocLinkPlain;
     function isJSDocAllType(node: Node): node is JSDocAllType;
     function isJSDocUnknownType(node: Node): node is JSDocUnknownType;
     function isJSDocNullableType(node: Node): node is JSDocNullableType;
@@ -5478,6 +5527,11 @@
         PartialSemantic = 1,
         Syntactic = 2
     }
+    interface IncompleteCompletionsCache {
+        get(): CompletionInfo | undefined;
+        set(response: CompletionInfo): void;
+        clear(): void;
+    }
     interface LanguageServiceHost extends GetEffectiveTypeRootsHost {
         getCompilationSettings(): CompilerOptions;
         getNewLine?(): string;
@@ -5639,6 +5693,7 @@
         prepareCallHierarchy(fileName: string, position: number): CallHierarchyItem | CallHierarchyItem[] | undefined;
         provideCallHierarchyIncomingCalls(fileName: string, position: number): CallHierarchyIncomingCall[];
         provideCallHierarchyOutgoingCalls(fileName: string, position: number): CallHierarchyOutgoingCall[];
+        provideInlayHints(fileName: string, span: TextSpan, preferences: UserPreferences | undefined): InlayHint[];
         getOutliningSpans(fileName: string): OutliningSpan[];
         getTodoComments(fileName: string, descriptors: TodoCommentDescriptor[]): TodoComment[];
         getBraceMatchingAtPosition(fileName: string, position: number): TextSpan[];
@@ -5689,17 +5744,35 @@
         skipDestructiveCodeActions?: boolean;
     }
     type CompletionsTriggerCharacter = "." | '"' | "'" | "`" | "/" | "@" | "<" | "#" | " ";
+    enum CompletionTriggerKind {
+        /** Completion was triggered by typing an identifier, manual invocation (e.g Ctrl+Space) or via API. */
+        Invoked = 1,
+        /** Completion was triggered by a trigger character. */
+        TriggerCharacter = 2,
+        /** Completion was re-triggered as the current completion list is incomplete. */
+        TriggerForIncompleteCompletions = 3
+    }
     interface GetCompletionsAtPositionOptions extends UserPreferences {
         /**
          * If the editor is asking for completions because a certain character was typed
          * (as opposed to when the user explicitly requested them) this should be set.
          */
         triggerCharacter?: CompletionsTriggerCharacter;
+        triggerKind?: CompletionTriggerKind;
         /** @deprecated Use includeCompletionsForModuleExports */
         includeExternalModuleExports?: boolean;
         /** @deprecated Use includeCompletionsWithInsertText */
         includeInsertTextCompletions?: boolean;
     }
+    interface InlayHintsOptions extends UserPreferences {
+        readonly includeInlayParameterNameHints?: "none" | "literals" | "all";
+        readonly includeInlayParameterNameHintsWhenArgumentMatchesName?: boolean;
+        readonly includeInlayFunctionParameterTypeHints?: boolean;
+        readonly includeInlayVariableTypeHints?: boolean;
+        readonly includeInlayPropertyDeclarationTypeHints?: boolean;
+        readonly includeInlayFunctionLikeReturnTypeHints?: boolean;
+        readonly includeInlayEnumMemberValueHints?: boolean;
+    }
     type SignatureHelpTriggerCharacter = "," | "(" | "<";
     type SignatureHelpRetriggerCharacter = SignatureHelpTriggerCharacter | ")";
     interface SignatureHelpItemsOptions {
@@ -5805,6 +5878,18 @@
         to: CallHierarchyItem;
         fromSpans: TextSpan[];
     }
+    enum InlayHintKind {
+        Type = "Type",
+        Parameter = "Parameter",
+        Enum = "Enum"
+    }
+    interface InlayHint {
+        text: string;
+        position: number;
+        kind: InlayHintKind;
+        whitespaceBefore?: boolean;
+        whitespaceAfter?: boolean;
+    }
     interface TodoCommentDescriptor {
         text: string;
         priority: number;
@@ -6368,7 +6453,10 @@
          * interface Y { foo:number; }
          */
         memberVariableElement = "property",
-        /** class X { constructor() { } } */
+        /**
+         * class X { constructor() { } }
+         * class X { static { } }
+         */
         constructorImplementationElement = "constructor",
         /** interface Y { ():number; } */
         callSignatureElement = "call",
@@ -6470,6 +6558,14 @@
         jsxAttributeStringLiteralValue = 24,
         bigintLiteral = 25
     }
+    interface InlayHintsContext {
+        file: SourceFile;
+        program: Program;
+        cancellationToken: CancellationToken;
+        host: LanguageServiceHost;
+        span: TextSpan;
+        preferences: InlayHintsOptions;
+    }
 }
 declare namespace ts {
     /** The classifier is used for syntactic highlighting in editors via the TSServer */
@@ -7073,51 +7169,51 @@
     /** @deprecated Use `factory.createJSDocTypeExpression` or the factory supplied by your transformation context instead. */
     const createJSDocTypeExpression: (type: TypeNode) => JSDocTypeExpression;
     /** @deprecated Use `factory.createJSDocTypeTag` or the factory supplied by your transformation context instead. */
-    const createJSDocTypeTag: (tagName: Identifier | undefined, typeExpression: JSDocTypeExpression, comment?: string | NodeArray<JSDocText | JSDocLink> | undefined) => JSDocTypeTag;
+    const createJSDocTypeTag: (tagName: Identifier | undefined, typeExpression: JSDocTypeExpression, comment?: string | NodeArray<JSDocComment> | undefined) => JSDocTypeTag;
     /** @deprecated Use `factory.createJSDocReturnTag` or the factory supplied by your transformation context instead. */
-    const createJSDocReturnTag: (tagName: Identifier | undefined, typeExpression?: JSDocTypeExpression | undefined, comment?: string | NodeArray<JSDocText | JSDocLink> | undefined) => JSDocReturnTag;
+    const createJSDocReturnTag: (tagName: Identifier | undefined, typeExpression?: JSDocTypeExpression | undefined, comment?: string | NodeArray<JSDocComment> | undefined) => JSDocReturnTag;
     /** @deprecated Use `factory.createJSDocThisTag` or the factory supplied by your transformation context instead. */
-    const createJSDocThisTag: (tagName: Identifier | undefined, typeExpression: JSDocTypeExpression, comment?: string | NodeArray<JSDocText | JSDocLink> | undefined) => JSDocThisTag;
+    const createJSDocThisTag: (tagName: Identifier | undefined, typeExpression: JSDocTypeExpression, comment?: string | NodeArray<JSDocComment> | undefined) => JSDocThisTag;
     /** @deprecated Use `factory.createJSDocComment` or the factory supplied by your transformation context instead. */
-    const createJSDocComment: (comment?: string | NodeArray<JSDocText | JSDocLink> | undefined, tags?: readonly JSDocTag[] | undefined) => JSDoc;
+    const createJSDocComment: (comment?: string | NodeArray<JSDocComment> | undefined, tags?: readonly JSDocTag[] | undefined) => JSDoc;
     /** @deprecated Use `factory.createJSDocParameterTag` or the factory supplied by your transformation context instead. */
-    const createJSDocParameterTag: (tagName: Identifier | undefined, name: EntityName, isBracketed: boolean, typeExpression?: JSDocTypeExpression | undefined, isNameFirst?: boolean | undefined, comment?: string | NodeArray<JSDocText | JSDocLink> | undefined) => JSDocParameterTag;
+    const createJSDocParameterTag: (tagName: Identifier | undefined, name: EntityName, isBracketed: boolean, typeExpression?: JSDocTypeExpression | undefined, isNameFirst?: boolean | undefined, comment?: string | NodeArray<JSDocComment> | undefined) => JSDocParameterTag;
     /** @deprecated Use `factory.createJSDocClassTag` or the factory supplied by your transformation context instead. */
-    const createJSDocClassTag: (tagName: Identifier | undefined, comment?: string | NodeArray<JSDocText | JSDocLink> | undefined) => JSDocClassTag;
+    const createJSDocClassTag: (tagName: Identifier | undefined, comment?: string | NodeArray<JSDocComment> | undefined) => JSDocClassTag;
     /** @deprecated Use `factory.createJSDocAugmentsTag` or the factory supplied by your transformation context instead. */
     const createJSDocAugmentsTag: (tagName: Identifier | undefined, className: ExpressionWithTypeArguments & {
         readonly expression: Identifier | PropertyAccessEntityNameExpression;
-    }, comment?: string | NodeArray<JSDocText | JSDocLink> | undefined) => JSDocAugmentsTag;
+    }, comment?: string | NodeArray<JSDocComment> | undefined) => JSDocAugmentsTag;
     /** @deprecated Use `factory.createJSDocEnumTag` or the factory supplied by your transformation context instead. */
-    const createJSDocEnumTag: (tagName: Identifier | undefined, typeExpression: JSDocTypeExpression, comment?: string | NodeArray<JSDocText | JSDocLink> | undefined) => JSDocEnumTag;
+    const createJSDocEnumTag: (tagName: Identifier | undefined, typeExpression: JSDocTypeExpression, comment?: string | NodeArray<JSDocComment> | undefined) => JSDocEnumTag;
     /** @deprecated Use `factory.createJSDocTemplateTag` or the factory supplied by your transformation context instead. */
-    const createJSDocTemplateTag: (tagName: Identifier | undefined, constraint: JSDocTypeExpression | undefined, typeParameters: readonly TypeParameterDeclaration[], comment?: string | NodeArray<JSDocText | JSDocLink> | undefined) => JSDocTemplateTag;
+    const createJSDocTemplateTag: (tagName: Identifier | undefined, constraint: JSDocTypeExpression | undefined, typeParameters: readonly TypeParameterDeclaration[], comment?: string | NodeArray<JSDocComment> | undefined) => JSDocTemplateTag;
     /** @deprecated Use `factory.createJSDocTypedefTag` or the factory supplied by your transformation context instead. */
-    const createJSDocTypedefTag: (tagName: Identifier | undefined, typeExpression?: JSDocTypeLiteral | JSDocTypeExpression | undefined, fullName?: Identifier | JSDocNamespaceDeclaration | undefined, comment?: string | NodeArray<JSDocText | JSDocLink> | undefined) => JSDocTypedefTag;
+    const createJSDocTypedefTag: (tagName: Identifier | undefined, typeExpression?: JSDocTypeLiteral | JSDocTypeExpression | undefined, fullName?: Identifier | JSDocNamespaceDeclaration | undefined, comment?: string | NodeArray<JSDocComment> | undefined) => JSDocTypedefTag;
     /** @deprecated Use `factory.createJSDocCallbackTag` or the factory supplied by your transformation context instead. */
-    const createJSDocCallbackTag: (tagName: Identifier | undefined, typeExpression: JSDocSignature, fullName?: Identifier | JSDocNamespaceDeclaration | undefined, comment?: string | NodeArray<JSDocText | JSDocLink> | undefined) => JSDocCallbackTag;
+    const createJSDocCallbackTag: (tagName: Identifier | undefined, typeExpression: JSDocSignature, fullName?: Identifier | JSDocNamespaceDeclaration | undefined, comment?: string | NodeArray<JSDocComment> | undefined) => JSDocCallbackTag;
     /** @deprecated Use `factory.createJSDocSignature` or the factory supplied by your transformation context instead. */
     const createJSDocSignature: (typeParameters: readonly JSDocTemplateTag[] | undefined, parameters: readonly JSDocParameterTag[], type?: JSDocReturnTag | undefined) => JSDocSignature;
     /** @deprecated Use `factory.createJSDocPropertyTag` or the factory supplied by your transformation context instead. */
-    const createJSDocPropertyTag: (tagName: Identifier | undefined, name: EntityName, isBracketed: boolean, typeExpression?: JSDocTypeExpression | undefined, isNameFirst?: boolean | undefined, comment?: string | NodeArray<JSDocText | JSDocLink> | undefined) => JSDocPropertyTag;
+    const createJSDocPropertyTag: (tagName: Identifier | undefined, name: EntityName, isBracketed: boolean, typeExpression?: JSDocTypeExpression | undefined, isNameFirst?: boolean | undefined, comment?: string | NodeArray<JSDocComment> | undefined) => JSDocPropertyTag;
     /** @deprecated Use `factory.createJSDocTypeLiteral` or the factory supplied by your transformation context instead. */
     const createJSDocTypeLiteral: (jsDocPropertyTags?: readonly JSDocPropertyLikeTag[] | undefined, isArrayType?: boolean | undefined) => JSDocTypeLiteral;
     /** @deprecated Use `factory.createJSDocImplementsTag` or the factory supplied by your transformation context instead. */
     const createJSDocImplementsTag: (tagName: Identifier | undefined, className: ExpressionWithTypeArguments & {
         readonly expression: Identifier | PropertyAccessEntityNameExpression;
-    }, comment?: string | NodeArray<JSDocText | JSDocLink> | undefined) => JSDocImplementsTag;
+    }, comment?: string | NodeArray<JSDocComment> | undefined) => JSDocImplementsTag;
     /** @deprecated Use `factory.createJSDocAuthorTag` or the factory supplied by your transformation context instead. */
-    const createJSDocAuthorTag: (tagName: Identifier | undefined, comment?: string | NodeArray<JSDocText | JSDocLink> | undefined) => JSDocAuthorTag;
+    const createJSDocAuthorTag: (tagName: Identifier | undefined, comment?: string | NodeArray<JSDocComment> | undefined) => JSDocAuthorTag;
     /** @deprecated Use `factory.createJSDocPublicTag` or the factory supplied by your transformation context instead. */
-    const createJSDocPublicTag: (tagName: Identifier | undefined, comment?: string | NodeArray<JSDocText | JSDocLink> | undefined) => JSDocPublicTag;
+    const createJSDocPublicTag: (tagName: Identifier | undefined, comment?: string | NodeArray<JSDocComment> | undefined) => JSDocPublicTag;
     /** @deprecated Use `factory.createJSDocPrivateTag` or the factory supplied by your transformation context instead. */
-    const createJSDocPrivateTag: (tagName: Identifier | undefined, comment?: string | NodeArray<JSDocText | JSDocLink> | undefined) => JSDocPrivateTag;
+    const createJSDocPrivateTag: (tagName: Identifier | undefined, comment?: string | NodeArray<JSDocComment> | undefined) => JSDocPrivateTag;
     /** @deprecated Use `factory.createJSDocProtectedTag` or the factory supplied by your transformation context instead. */
-    const createJSDocProtectedTag: (tagName: Identifier | undefined, comment?: string | NodeArray<JSDocText | JSDocLink> | undefined) => JSDocProtectedTag;
+    const createJSDocProtectedTag: (tagName: Identifier | undefined, comment?: string | NodeArray<JSDocComment> | undefined) => JSDocProtectedTag;
     /** @deprecated Use `factory.createJSDocReadonlyTag` or the factory supplied by your transformation context instead. */
-    const createJSDocReadonlyTag: (tagName: Identifier | undefined, comment?: string | NodeArray<JSDocText | JSDocLink> | undefined) => JSDocReadonlyTag;
+    const createJSDocReadonlyTag: (tagName: Identifier | undefined, comment?: string | NodeArray<JSDocComment> | undefined) => JSDocReadonlyTag;
     /** @deprecated Use `factory.createJSDocUnknownTag` or the factory supplied by your transformation context instead. */
-    const createJSDocTag: (tagName: Identifier, comment?: string | NodeArray<JSDocText | JSDocLink> | undefined) => JSDocUnknownTag;
+    const createJSDocTag: (tagName: Identifier, comment?: string | NodeArray<JSDocComment> | undefined) => JSDocUnknownTag;
     /** @deprecated Use `factory.createJsxElement` or the factory supplied by your transformation context instead. */
     const createJsxElement: (openingElement: JsxOpeningElement, children: readonly JsxChild[], closingElement: JsxClosingElement) => JsxElement;
     /** @deprecated Use `factory.updateJsxElement` or the factory supplied by your transformation context instead. */
diff --git a/node_modules/typescript/lib/typescript.js b/node_modules/typescript/lib/typescript.js
index 85a70c4..4446297 100644
--- a/node_modules/typescript/lib/typescript.js
+++ b/node_modules/typescript/lib/typescript.js
@@ -14,10 +14,14 @@
 ***************************************************************************** */
 
 "use strict";
-var __spreadArray = (this && this.__spreadArray) || function (to, from) {
-    for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)
-        to[j] = from[i];
-    return to;
+var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
+    if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
+        if (ar || !(i in from)) {
+            if (!ar) ar = Array.prototype.slice.call(from, 0, i);
+            ar[i] = from[i];
+        }
+    }
+    return to.concat(ar || Array.prototype.slice.call(from));
 };
 var __assign = (this && this.__assign) || function () {
     __assign = Object.assign || function(t) {
@@ -286,11 +290,11 @@
 (function (ts) {
     // WARNING: The script `configurePrerelease.ts` uses a regexp to parse out these values.
     // If changing the text in this section, be sure to test `configurePrerelease` too.
-    ts.versionMajorMinor = "4.3";
+    ts.versionMajorMinor = "4.4";
     // The following is baselined as a literal template type without intervention
     /** The version of the TypeScript compiler release */
     // eslint-disable-next-line @typescript-eslint/no-inferrable-types
-    ts.version = "4.3.5";
+    ts.version = "4.4.2";
     /* @internal */
     var Comparison;
     (function (Comparison) {
@@ -975,7 +979,7 @@
             return array1;
         if (!some(array1))
             return array2;
-        return __spreadArray(__spreadArray([], array1), array2);
+        return __spreadArray(__spreadArray([], array1, true), array2, true);
     }
     ts.concatenate = concatenate;
     function selectIndex(_, i) {
@@ -2133,10 +2137,46 @@
      * Takes a string like "jquery-min.4.2.3" and returns "jquery"
      */
     function removeMinAndVersionNumbers(fileName) {
-        // Match a "." or "-" followed by a version number or 'min' at the end of the name
-        var trailingMinOrVersion = /[.-]((min)|(\d+(\.\d+)*))$/;
-        // The "min" or version may both be present, in either order, so try applying the above twice.
-        return fileName.replace(trailingMinOrVersion, "").replace(trailingMinOrVersion, "");
+        // We used to use the regex /[.-]((min)|(\d+(\.\d+)*))$/ and would just .replace it twice.
+        // Unfortunately, that regex has O(n^2) performance because v8 doesn't match from the end of the string.
+        // Instead, we now essentially scan the filename (backwards) ourselves.
+        var end = fileName.length;
+        for (var pos = end - 1; pos > 0; pos--) {
+            var ch = fileName.charCodeAt(pos);
+            if (ch >= 48 /* _0 */ && ch <= 57 /* _9 */) {
+                // Match a \d+ segment
+                do {
+                    --pos;
+                    ch = fileName.charCodeAt(pos);
+                } while (pos > 0 && ch >= 48 /* _0 */ && ch <= 57 /* _9 */);
+            }
+            else if (pos > 4 && (ch === 110 /* n */ || ch === 78 /* N */)) {
+                // Looking for "min" or "min"
+                // Already matched the 'n'
+                --pos;
+                ch = fileName.charCodeAt(pos);
+                if (ch !== 105 /* i */ && ch !== 73 /* I */) {
+                    break;
+                }
+                --pos;
+                ch = fileName.charCodeAt(pos);
+                if (ch !== 109 /* m */ && ch !== 77 /* M */) {
+                    break;
+                }
+                --pos;
+                ch = fileName.charCodeAt(pos);
+            }
+            else {
+                // This character is not part of either suffix pattern
+                break;
+            }
+            if (ch !== 45 /* minus */ && ch !== 46 /* dot */) {
+                break;
+            }
+            end = pos;
+        }
+        // end might be fileName.length, in which case this should internally no-op
+        return end === fileName.length ? fileName : fileName.slice(0, end);
     }
     ts.removeMinAndVersionNumbers = removeMinAndVersionNumbers;
     /** Remove an item from an array, moving everything to its right one space left. */
@@ -2377,6 +2417,33 @@
         return array.slice(0, index);
     }
     ts.takeWhile = takeWhile;
+    /**
+     * Removes the leading and trailing white space and line terminator characters from a string.
+     */
+    ts.trimString = !!String.prototype.trim ? (function (s) { return s.trim(); }) : function (s) { return ts.trimStringEnd(ts.trimStringStart(s)); };
+    /**
+     * Returns a copy with trailing whitespace removed.
+     */
+    ts.trimStringEnd = !!String.prototype.trimEnd ? (function (s) { return s.trimEnd(); }) : trimEndImpl;
+    /**
+     * Returns a copy with leading whitespace removed.
+     */
+    ts.trimStringStart = !!String.prototype.trimStart ? (function (s) { return s.trimStart(); }) : function (s) { return s.replace(/^\s+/g, ""); };
+    /**
+     * https://jsbench.me/gjkoxld4au/1
+     * The simple regex for this, /\s+$/g is O(n^2) in v8.
+     * The native .trimEnd method is by far best, but since that's technically ES2019,
+     * we provide a (still much faster than the simple regex) fallback.
+     */
+    function trimEndImpl(s) {
+        var end = s.length - 1;
+        while (end >= 0) {
+            if (!ts.isWhiteSpaceLike(s.charCodeAt(end)))
+                break;
+            end--;
+        }
+        return s.slice(0, end + 1);
+    }
 })(ts || (ts = {}));
 /* @internal */
 var ts;
@@ -2566,7 +2633,7 @@
         Debug.assertEachNode = assertEachNode;
         function assertNode(node, test, message, stackCrawlMark) {
             if (shouldAssertFunction(1 /* Normal */, "assertNode")) {
-                assert(node !== undefined && (test === undefined || test(node)), message || "Unexpected node.", function () { return "Node " + formatSyntaxKind(node.kind) + " did not pass test '" + getFunctionName(test) + "'."; }, stackCrawlMark || assertNode);
+                assert(node !== undefined && (test === undefined || test(node)), message || "Unexpected node.", function () { return "Node " + formatSyntaxKind(node === null || node === void 0 ? void 0 : node.kind) + " did not pass test '" + getFunctionName(test) + "'."; }, stackCrawlMark || assertNode);
             }
         }
         Debug.assertNode = assertNode;
@@ -2578,13 +2645,13 @@
         Debug.assertNotNode = assertNotNode;
         function assertOptionalNode(node, test, message, stackCrawlMark) {
             if (shouldAssertFunction(1 /* Normal */, "assertOptionalNode")) {
-                assert(test === undefined || node === undefined || test(node), message || "Unexpected node.", function () { return "Node " + formatSyntaxKind(node.kind) + " did not pass test '" + getFunctionName(test) + "'."; }, stackCrawlMark || assertOptionalNode);
+                assert(test === undefined || node === undefined || test(node), message || "Unexpected node.", function () { return "Node " + formatSyntaxKind(node === null || node === void 0 ? void 0 : node.kind) + " did not pass test '" + getFunctionName(test) + "'."; }, stackCrawlMark || assertOptionalNode);
             }
         }
         Debug.assertOptionalNode = assertOptionalNode;
         function assertOptionalToken(node, kind, message, stackCrawlMark) {
             if (shouldAssertFunction(1 /* Normal */, "assertOptionalToken")) {
-                assert(kind === undefined || node === undefined || node.kind === kind, message || "Unexpected node.", function () { return "Node " + formatSyntaxKind(node.kind) + " was not a '" + formatSyntaxKind(kind) + "' token."; }, stackCrawlMark || assertOptionalToken);
+                assert(kind === undefined || node === undefined || node.kind === kind, message || "Unexpected node.", function () { return "Node " + formatSyntaxKind(node === null || node === void 0 ? void 0 : node.kind) + " was not a '" + formatSyntaxKind(kind) + "' token."; }, stackCrawlMark || assertOptionalToken);
             }
         }
         Debug.assertOptionalToken = assertOptionalToken;
@@ -2773,6 +2840,9 @@
                             // An `Array` with extra properties is rendered as `[A, B, prop1: 1, prop2: 2]`. Most of
                             // these aren't immediately useful so we trim off the `prop1: ..., prop2: ...` part from the
                             // formatted string.
+                            // This regex can trigger slow backtracking because of overlapping potential captures.
+                            // We don't care, this is debug code that's only enabled with a debugger attached -
+                            // we're just taking note of it for anyone checking regex performance in the future.
                             defaultValue = String(defaultValue).replace(/(?:,[\s\w\d_]+:[^,]+)+\]$/, "]");
                             return "NodeArray " + defaultValue;
                         }
@@ -3221,7 +3291,7 @@
     // range-set    ::= range ( logical-or range ) *
     // range        ::= hyphen | simple ( ' ' simple ) * | ''
     // logical-or   ::= ( ' ' ) * '||' ( ' ' ) *
-    var logicalOrRegExp = /\s*\|\|\s*/g;
+    var logicalOrRegExp = /\|\|/g;
     var whitespaceRegExp = /\s+/g;
     // https://github.com/npm/node-semver#range-grammar
     //
@@ -3244,14 +3314,15 @@
     // primitive    ::= ( '<' | '>' | '>=' | '<=' | '=' ) partial
     // tilde        ::= '~' partial
     // caret        ::= '^' partial
-    var rangeRegExp = /^\s*(~|\^|<|<=|>|>=|=)?\s*([a-z0-9-+.*]+)$/i;
+    var rangeRegExp = /^(~|\^|<|<=|>|>=|=)?\s*([a-z0-9-+.*]+)$/i;
     function parseRange(text) {
         var alternatives = [];
-        for (var _i = 0, _a = text.trim().split(logicalOrRegExp); _i < _a.length; _i++) {
+        for (var _i = 0, _a = ts.trimString(text).split(logicalOrRegExp); _i < _a.length; _i++) {
             var range = _a[_i];
             if (!range)
                 continue;
             var comparators = [];
+            range = ts.trimString(range);
             var match = hyphenRegExp.exec(range);
             if (match) {
                 if (!parseHyphen(match[1], match[2], comparators))
@@ -3260,7 +3331,7 @@
             else {
                 for (var _b = 0, _c = range.split(whitespaceRegExp); _b < _c.length; _b++) {
                     var simple = _c[_b];
-                    var match_1 = rangeRegExp.exec(simple);
+                    var match_1 = rangeRegExp.exec(ts.trimString(simple));
                     if (!match_1 || !parseComparator(match_1[1], match_1[2], comparators))
                         return undefined;
                 }
@@ -4007,332 +4078,338 @@
         SyntaxKind[SyntaxKind["QuestionQuestionToken"] = 60] = "QuestionQuestionToken";
         /** Only the JSDoc scanner produces BacktickToken. The normal scanner produces NoSubstitutionTemplateLiteral and related kinds. */
         SyntaxKind[SyntaxKind["BacktickToken"] = 61] = "BacktickToken";
+        /** Only the JSDoc scanner produces HashToken. The normal scanner produces PrivateIdentifier. */
+        SyntaxKind[SyntaxKind["HashToken"] = 62] = "HashToken";
         // Assignments
-        SyntaxKind[SyntaxKind["EqualsToken"] = 62] = "EqualsToken";
-        SyntaxKind[SyntaxKind["PlusEqualsToken"] = 63] = "PlusEqualsToken";
-        SyntaxKind[SyntaxKind["MinusEqualsToken"] = 64] = "MinusEqualsToken";
-        SyntaxKind[SyntaxKind["AsteriskEqualsToken"] = 65] = "AsteriskEqualsToken";
-        SyntaxKind[SyntaxKind["AsteriskAsteriskEqualsToken"] = 66] = "AsteriskAsteriskEqualsToken";
-        SyntaxKind[SyntaxKind["SlashEqualsToken"] = 67] = "SlashEqualsToken";
-        SyntaxKind[SyntaxKind["PercentEqualsToken"] = 68] = "PercentEqualsToken";
-        SyntaxKind[SyntaxKind["LessThanLessThanEqualsToken"] = 69] = "LessThanLessThanEqualsToken";
-        SyntaxKind[SyntaxKind["GreaterThanGreaterThanEqualsToken"] = 70] = "GreaterThanGreaterThanEqualsToken";
-        SyntaxKind[SyntaxKind["GreaterThanGreaterThanGreaterThanEqualsToken"] = 71] = "GreaterThanGreaterThanGreaterThanEqualsToken";
-        SyntaxKind[SyntaxKind["AmpersandEqualsToken"] = 72] = "AmpersandEqualsToken";
-        SyntaxKind[SyntaxKind["BarEqualsToken"] = 73] = "BarEqualsToken";
-        SyntaxKind[SyntaxKind["BarBarEqualsToken"] = 74] = "BarBarEqualsToken";
-        SyntaxKind[SyntaxKind["AmpersandAmpersandEqualsToken"] = 75] = "AmpersandAmpersandEqualsToken";
-        SyntaxKind[SyntaxKind["QuestionQuestionEqualsToken"] = 76] = "QuestionQuestionEqualsToken";
-        SyntaxKind[SyntaxKind["CaretEqualsToken"] = 77] = "CaretEqualsToken";
+        SyntaxKind[SyntaxKind["EqualsToken"] = 63] = "EqualsToken";
+        SyntaxKind[SyntaxKind["PlusEqualsToken"] = 64] = "PlusEqualsToken";
+        SyntaxKind[SyntaxKind["MinusEqualsToken"] = 65] = "MinusEqualsToken";
+        SyntaxKind[SyntaxKind["AsteriskEqualsToken"] = 66] = "AsteriskEqualsToken";
+        SyntaxKind[SyntaxKind["AsteriskAsteriskEqualsToken"] = 67] = "AsteriskAsteriskEqualsToken";
+        SyntaxKind[SyntaxKind["SlashEqualsToken"] = 68] = "SlashEqualsToken";
+        SyntaxKind[SyntaxKind["PercentEqualsToken"] = 69] = "PercentEqualsToken";
+        SyntaxKind[SyntaxKind["LessThanLessThanEqualsToken"] = 70] = "LessThanLessThanEqualsToken";
+        SyntaxKind[SyntaxKind["GreaterThanGreaterThanEqualsToken"] = 71] = "GreaterThanGreaterThanEqualsToken";
+        SyntaxKind[SyntaxKind["GreaterThanGreaterThanGreaterThanEqualsToken"] = 72] = "GreaterThanGreaterThanGreaterThanEqualsToken";
+        SyntaxKind[SyntaxKind["AmpersandEqualsToken"] = 73] = "AmpersandEqualsToken";
+        SyntaxKind[SyntaxKind["BarEqualsToken"] = 74] = "BarEqualsToken";
+        SyntaxKind[SyntaxKind["BarBarEqualsToken"] = 75] = "BarBarEqualsToken";
+        SyntaxKind[SyntaxKind["AmpersandAmpersandEqualsToken"] = 76] = "AmpersandAmpersandEqualsToken";
+        SyntaxKind[SyntaxKind["QuestionQuestionEqualsToken"] = 77] = "QuestionQuestionEqualsToken";
+        SyntaxKind[SyntaxKind["CaretEqualsToken"] = 78] = "CaretEqualsToken";
         // Identifiers and PrivateIdentifiers
-        SyntaxKind[SyntaxKind["Identifier"] = 78] = "Identifier";
-        SyntaxKind[SyntaxKind["PrivateIdentifier"] = 79] = "PrivateIdentifier";
+        SyntaxKind[SyntaxKind["Identifier"] = 79] = "Identifier";
+        SyntaxKind[SyntaxKind["PrivateIdentifier"] = 80] = "PrivateIdentifier";
         // Reserved words
-        SyntaxKind[SyntaxKind["BreakKeyword"] = 80] = "BreakKeyword";
-        SyntaxKind[SyntaxKind["CaseKeyword"] = 81] = "CaseKeyword";
-        SyntaxKind[SyntaxKind["CatchKeyword"] = 82] = "CatchKeyword";
-        SyntaxKind[SyntaxKind["ClassKeyword"] = 83] = "ClassKeyword";
-        SyntaxKind[SyntaxKind["ConstKeyword"] = 84] = "ConstKeyword";
-        SyntaxKind[SyntaxKind["ContinueKeyword"] = 85] = "ContinueKeyword";
-        SyntaxKind[SyntaxKind["DebuggerKeyword"] = 86] = "DebuggerKeyword";
-        SyntaxKind[SyntaxKind["DefaultKeyword"] = 87] = "DefaultKeyword";
-        SyntaxKind[SyntaxKind["DeleteKeyword"] = 88] = "DeleteKeyword";
-        SyntaxKind[SyntaxKind["DoKeyword"] = 89] = "DoKeyword";
-        SyntaxKind[SyntaxKind["ElseKeyword"] = 90] = "ElseKeyword";
-        SyntaxKind[SyntaxKind["EnumKeyword"] = 91] = "EnumKeyword";
-        SyntaxKind[SyntaxKind["ExportKeyword"] = 92] = "ExportKeyword";
-        SyntaxKind[SyntaxKind["ExtendsKeyword"] = 93] = "ExtendsKeyword";
-        SyntaxKind[SyntaxKind["FalseKeyword"] = 94] = "FalseKeyword";
-        SyntaxKind[SyntaxKind["FinallyKeyword"] = 95] = "FinallyKeyword";
-        SyntaxKind[SyntaxKind["ForKeyword"] = 96] = "ForKeyword";
-        SyntaxKind[SyntaxKind["FunctionKeyword"] = 97] = "FunctionKeyword";
-        SyntaxKind[SyntaxKind["IfKeyword"] = 98] = "IfKeyword";
-        SyntaxKind[SyntaxKind["ImportKeyword"] = 99] = "ImportKeyword";
-        SyntaxKind[SyntaxKind["InKeyword"] = 100] = "InKeyword";
-        SyntaxKind[SyntaxKind["InstanceOfKeyword"] = 101] = "InstanceOfKeyword";
-        SyntaxKind[SyntaxKind["NewKeyword"] = 102] = "NewKeyword";
-        SyntaxKind[SyntaxKind["NullKeyword"] = 103] = "NullKeyword";
-        SyntaxKind[SyntaxKind["ReturnKeyword"] = 104] = "ReturnKeyword";
-        SyntaxKind[SyntaxKind["SuperKeyword"] = 105] = "SuperKeyword";
-        SyntaxKind[SyntaxKind["SwitchKeyword"] = 106] = "SwitchKeyword";
-        SyntaxKind[SyntaxKind["ThisKeyword"] = 107] = "ThisKeyword";
-        SyntaxKind[SyntaxKind["ThrowKeyword"] = 108] = "ThrowKeyword";
-        SyntaxKind[SyntaxKind["TrueKeyword"] = 109] = "TrueKeyword";
-        SyntaxKind[SyntaxKind["TryKeyword"] = 110] = "TryKeyword";
-        SyntaxKind[SyntaxKind["TypeOfKeyword"] = 111] = "TypeOfKeyword";
-        SyntaxKind[SyntaxKind["VarKeyword"] = 112] = "VarKeyword";
-        SyntaxKind[SyntaxKind["VoidKeyword"] = 113] = "VoidKeyword";
-        SyntaxKind[SyntaxKind["WhileKeyword"] = 114] = "WhileKeyword";
-        SyntaxKind[SyntaxKind["WithKeyword"] = 115] = "WithKeyword";
+        SyntaxKind[SyntaxKind["BreakKeyword"] = 81] = "BreakKeyword";
+        SyntaxKind[SyntaxKind["CaseKeyword"] = 82] = "CaseKeyword";
+        SyntaxKind[SyntaxKind["CatchKeyword"] = 83] = "CatchKeyword";
+        SyntaxKind[SyntaxKind["ClassKeyword"] = 84] = "ClassKeyword";
+        SyntaxKind[SyntaxKind["ConstKeyword"] = 85] = "ConstKeyword";
+        SyntaxKind[SyntaxKind["ContinueKeyword"] = 86] = "ContinueKeyword";
+        SyntaxKind[SyntaxKind["DebuggerKeyword"] = 87] = "DebuggerKeyword";
+        SyntaxKind[SyntaxKind["DefaultKeyword"] = 88] = "DefaultKeyword";
+        SyntaxKind[SyntaxKind["DeleteKeyword"] = 89] = "DeleteKeyword";
+        SyntaxKind[SyntaxKind["DoKeyword"] = 90] = "DoKeyword";
+        SyntaxKind[SyntaxKind["ElseKeyword"] = 91] = "ElseKeyword";
+        SyntaxKind[SyntaxKind["EnumKeyword"] = 92] = "EnumKeyword";
+        SyntaxKind[SyntaxKind["ExportKeyword"] = 93] = "ExportKeyword";
+        SyntaxKind[SyntaxKind["ExtendsKeyword"] = 94] = "ExtendsKeyword";
+        SyntaxKind[SyntaxKind["FalseKeyword"] = 95] = "FalseKeyword";
+        SyntaxKind[SyntaxKind["FinallyKeyword"] = 96] = "FinallyKeyword";
+        SyntaxKind[SyntaxKind["ForKeyword"] = 97] = "ForKeyword";
+        SyntaxKind[SyntaxKind["FunctionKeyword"] = 98] = "FunctionKeyword";
+        SyntaxKind[SyntaxKind["IfKeyword"] = 99] = "IfKeyword";
+        SyntaxKind[SyntaxKind["ImportKeyword"] = 100] = "ImportKeyword";
+        SyntaxKind[SyntaxKind["InKeyword"] = 101] = "InKeyword";
+        SyntaxKind[SyntaxKind["InstanceOfKeyword"] = 102] = "InstanceOfKeyword";
+        SyntaxKind[SyntaxKind["NewKeyword"] = 103] = "NewKeyword";
+        SyntaxKind[SyntaxKind["NullKeyword"] = 104] = "NullKeyword";
+        SyntaxKind[SyntaxKind["ReturnKeyword"] = 105] = "ReturnKeyword";
+        SyntaxKind[SyntaxKind["SuperKeyword"] = 106] = "SuperKeyword";
+        SyntaxKind[SyntaxKind["SwitchKeyword"] = 107] = "SwitchKeyword";
+        SyntaxKind[SyntaxKind["ThisKeyword"] = 108] = "ThisKeyword";
+        SyntaxKind[SyntaxKind["ThrowKeyword"] = 109] = "ThrowKeyword";
+        SyntaxKind[SyntaxKind["TrueKeyword"] = 110] = "TrueKeyword";
+        SyntaxKind[SyntaxKind["TryKeyword"] = 111] = "TryKeyword";
+        SyntaxKind[SyntaxKind["TypeOfKeyword"] = 112] = "TypeOfKeyword";
+        SyntaxKind[SyntaxKind["VarKeyword"] = 113] = "VarKeyword";
+        SyntaxKind[SyntaxKind["VoidKeyword"] = 114] = "VoidKeyword";
+        SyntaxKind[SyntaxKind["WhileKeyword"] = 115] = "WhileKeyword";
+        SyntaxKind[SyntaxKind["WithKeyword"] = 116] = "WithKeyword";
         // Strict mode reserved words
-        SyntaxKind[SyntaxKind["ImplementsKeyword"] = 116] = "ImplementsKeyword";
-        SyntaxKind[SyntaxKind["InterfaceKeyword"] = 117] = "InterfaceKeyword";
-        SyntaxKind[SyntaxKind["LetKeyword"] = 118] = "LetKeyword";
-        SyntaxKind[SyntaxKind["PackageKeyword"] = 119] = "PackageKeyword";
-        SyntaxKind[SyntaxKind["PrivateKeyword"] = 120] = "PrivateKeyword";
-        SyntaxKind[SyntaxKind["ProtectedKeyword"] = 121] = "ProtectedKeyword";
-        SyntaxKind[SyntaxKind["PublicKeyword"] = 122] = "PublicKeyword";
-        SyntaxKind[SyntaxKind["StaticKeyword"] = 123] = "StaticKeyword";
-        SyntaxKind[SyntaxKind["YieldKeyword"] = 124] = "YieldKeyword";
+        SyntaxKind[SyntaxKind["ImplementsKeyword"] = 117] = "ImplementsKeyword";
+        SyntaxKind[SyntaxKind["InterfaceKeyword"] = 118] = "InterfaceKeyword";
+        SyntaxKind[SyntaxKind["LetKeyword"] = 119] = "LetKeyword";
+        SyntaxKind[SyntaxKind["PackageKeyword"] = 120] = "PackageKeyword";
+        SyntaxKind[SyntaxKind["PrivateKeyword"] = 121] = "PrivateKeyword";
+        SyntaxKind[SyntaxKind["ProtectedKeyword"] = 122] = "ProtectedKeyword";
+        SyntaxKind[SyntaxKind["PublicKeyword"] = 123] = "PublicKeyword";
+        SyntaxKind[SyntaxKind["StaticKeyword"] = 124] = "StaticKeyword";
+        SyntaxKind[SyntaxKind["YieldKeyword"] = 125] = "YieldKeyword";
         // Contextual keywords
-        SyntaxKind[SyntaxKind["AbstractKeyword"] = 125] = "AbstractKeyword";
-        SyntaxKind[SyntaxKind["AsKeyword"] = 126] = "AsKeyword";
-        SyntaxKind[SyntaxKind["AssertsKeyword"] = 127] = "AssertsKeyword";
-        SyntaxKind[SyntaxKind["AnyKeyword"] = 128] = "AnyKeyword";
-        SyntaxKind[SyntaxKind["AsyncKeyword"] = 129] = "AsyncKeyword";
-        SyntaxKind[SyntaxKind["AwaitKeyword"] = 130] = "AwaitKeyword";
-        SyntaxKind[SyntaxKind["BooleanKeyword"] = 131] = "BooleanKeyword";
-        SyntaxKind[SyntaxKind["ConstructorKeyword"] = 132] = "ConstructorKeyword";
-        SyntaxKind[SyntaxKind["DeclareKeyword"] = 133] = "DeclareKeyword";
-        SyntaxKind[SyntaxKind["GetKeyword"] = 134] = "GetKeyword";
-        SyntaxKind[SyntaxKind["InferKeyword"] = 135] = "InferKeyword";
-        SyntaxKind[SyntaxKind["IntrinsicKeyword"] = 136] = "IntrinsicKeyword";
-        SyntaxKind[SyntaxKind["IsKeyword"] = 137] = "IsKeyword";
-        SyntaxKind[SyntaxKind["KeyOfKeyword"] = 138] = "KeyOfKeyword";
-        SyntaxKind[SyntaxKind["ModuleKeyword"] = 139] = "ModuleKeyword";
-        SyntaxKind[SyntaxKind["NamespaceKeyword"] = 140] = "NamespaceKeyword";
-        SyntaxKind[SyntaxKind["NeverKeyword"] = 141] = "NeverKeyword";
-        SyntaxKind[SyntaxKind["ReadonlyKeyword"] = 142] = "ReadonlyKeyword";
-        SyntaxKind[SyntaxKind["RequireKeyword"] = 143] = "RequireKeyword";
-        SyntaxKind[SyntaxKind["NumberKeyword"] = 144] = "NumberKeyword";
-        SyntaxKind[SyntaxKind["ObjectKeyword"] = 145] = "ObjectKeyword";
-        SyntaxKind[SyntaxKind["SetKeyword"] = 146] = "SetKeyword";
-        SyntaxKind[SyntaxKind["StringKeyword"] = 147] = "StringKeyword";
-        SyntaxKind[SyntaxKind["SymbolKeyword"] = 148] = "SymbolKeyword";
-        SyntaxKind[SyntaxKind["TypeKeyword"] = 149] = "TypeKeyword";
-        SyntaxKind[SyntaxKind["UndefinedKeyword"] = 150] = "UndefinedKeyword";
-        SyntaxKind[SyntaxKind["UniqueKeyword"] = 151] = "UniqueKeyword";
-        SyntaxKind[SyntaxKind["UnknownKeyword"] = 152] = "UnknownKeyword";
-        SyntaxKind[SyntaxKind["FromKeyword"] = 153] = "FromKeyword";
-        SyntaxKind[SyntaxKind["GlobalKeyword"] = 154] = "GlobalKeyword";
-        SyntaxKind[SyntaxKind["BigIntKeyword"] = 155] = "BigIntKeyword";
-        SyntaxKind[SyntaxKind["OverrideKeyword"] = 156] = "OverrideKeyword";
-        SyntaxKind[SyntaxKind["OfKeyword"] = 157] = "OfKeyword";
+        SyntaxKind[SyntaxKind["AbstractKeyword"] = 126] = "AbstractKeyword";
+        SyntaxKind[SyntaxKind["AsKeyword"] = 127] = "AsKeyword";
+        SyntaxKind[SyntaxKind["AssertsKeyword"] = 128] = "AssertsKeyword";
+        SyntaxKind[SyntaxKind["AnyKeyword"] = 129] = "AnyKeyword";
+        SyntaxKind[SyntaxKind["AsyncKeyword"] = 130] = "AsyncKeyword";
+        SyntaxKind[SyntaxKind["AwaitKeyword"] = 131] = "AwaitKeyword";
+        SyntaxKind[SyntaxKind["BooleanKeyword"] = 132] = "BooleanKeyword";
+        SyntaxKind[SyntaxKind["ConstructorKeyword"] = 133] = "ConstructorKeyword";
+        SyntaxKind[SyntaxKind["DeclareKeyword"] = 134] = "DeclareKeyword";
+        SyntaxKind[SyntaxKind["GetKeyword"] = 135] = "GetKeyword";
+        SyntaxKind[SyntaxKind["InferKeyword"] = 136] = "InferKeyword";
+        SyntaxKind[SyntaxKind["IntrinsicKeyword"] = 137] = "IntrinsicKeyword";
+        SyntaxKind[SyntaxKind["IsKeyword"] = 138] = "IsKeyword";
+        SyntaxKind[SyntaxKind["KeyOfKeyword"] = 139] = "KeyOfKeyword";
+        SyntaxKind[SyntaxKind["ModuleKeyword"] = 140] = "ModuleKeyword";
+        SyntaxKind[SyntaxKind["NamespaceKeyword"] = 141] = "NamespaceKeyword";
+        SyntaxKind[SyntaxKind["NeverKeyword"] = 142] = "NeverKeyword";
+        SyntaxKind[SyntaxKind["ReadonlyKeyword"] = 143] = "ReadonlyKeyword";
+        SyntaxKind[SyntaxKind["RequireKeyword"] = 144] = "RequireKeyword";
+        SyntaxKind[SyntaxKind["NumberKeyword"] = 145] = "NumberKeyword";
+        SyntaxKind[SyntaxKind["ObjectKeyword"] = 146] = "ObjectKeyword";
+        SyntaxKind[SyntaxKind["SetKeyword"] = 147] = "SetKeyword";
+        SyntaxKind[SyntaxKind["StringKeyword"] = 148] = "StringKeyword";
+        SyntaxKind[SyntaxKind["SymbolKeyword"] = 149] = "SymbolKeyword";
+        SyntaxKind[SyntaxKind["TypeKeyword"] = 150] = "TypeKeyword";
+        SyntaxKind[SyntaxKind["UndefinedKeyword"] = 151] = "UndefinedKeyword";
+        SyntaxKind[SyntaxKind["UniqueKeyword"] = 152] = "UniqueKeyword";
+        SyntaxKind[SyntaxKind["UnknownKeyword"] = 153] = "UnknownKeyword";
+        SyntaxKind[SyntaxKind["FromKeyword"] = 154] = "FromKeyword";
+        SyntaxKind[SyntaxKind["GlobalKeyword"] = 155] = "GlobalKeyword";
+        SyntaxKind[SyntaxKind["BigIntKeyword"] = 156] = "BigIntKeyword";
+        SyntaxKind[SyntaxKind["OverrideKeyword"] = 157] = "OverrideKeyword";
+        SyntaxKind[SyntaxKind["OfKeyword"] = 158] = "OfKeyword";
         // Parse tree nodes
         // Names
-        SyntaxKind[SyntaxKind["QualifiedName"] = 158] = "QualifiedName";
-        SyntaxKind[SyntaxKind["ComputedPropertyName"] = 159] = "ComputedPropertyName";
+        SyntaxKind[SyntaxKind["QualifiedName"] = 159] = "QualifiedName";
+        SyntaxKind[SyntaxKind["ComputedPropertyName"] = 160] = "ComputedPropertyName";
         // Signature elements
-        SyntaxKind[SyntaxKind["TypeParameter"] = 160] = "TypeParameter";
-        SyntaxKind[SyntaxKind["Parameter"] = 161] = "Parameter";
-        SyntaxKind[SyntaxKind["Decorator"] = 162] = "Decorator";
+        SyntaxKind[SyntaxKind["TypeParameter"] = 161] = "TypeParameter";
+        SyntaxKind[SyntaxKind["Parameter"] = 162] = "Parameter";
+        SyntaxKind[SyntaxKind["Decorator"] = 163] = "Decorator";
         // TypeMember
-        SyntaxKind[SyntaxKind["PropertySignature"] = 163] = "PropertySignature";
-        SyntaxKind[SyntaxKind["PropertyDeclaration"] = 164] = "PropertyDeclaration";
-        SyntaxKind[SyntaxKind["MethodSignature"] = 165] = "MethodSignature";
-        SyntaxKind[SyntaxKind["MethodDeclaration"] = 166] = "MethodDeclaration";
-        SyntaxKind[SyntaxKind["Constructor"] = 167] = "Constructor";
-        SyntaxKind[SyntaxKind["GetAccessor"] = 168] = "GetAccessor";
-        SyntaxKind[SyntaxKind["SetAccessor"] = 169] = "SetAccessor";
-        SyntaxKind[SyntaxKind["CallSignature"] = 170] = "CallSignature";
-        SyntaxKind[SyntaxKind["ConstructSignature"] = 171] = "ConstructSignature";
-        SyntaxKind[SyntaxKind["IndexSignature"] = 172] = "IndexSignature";
+        SyntaxKind[SyntaxKind["PropertySignature"] = 164] = "PropertySignature";
+        SyntaxKind[SyntaxKind["PropertyDeclaration"] = 165] = "PropertyDeclaration";
+        SyntaxKind[SyntaxKind["MethodSignature"] = 166] = "MethodSignature";
+        SyntaxKind[SyntaxKind["MethodDeclaration"] = 167] = "MethodDeclaration";
+        SyntaxKind[SyntaxKind["ClassStaticBlockDeclaration"] = 168] = "ClassStaticBlockDeclaration";
+        SyntaxKind[SyntaxKind["Constructor"] = 169] = "Constructor";
+        SyntaxKind[SyntaxKind["GetAccessor"] = 170] = "GetAccessor";
+        SyntaxKind[SyntaxKind["SetAccessor"] = 171] = "SetAccessor";
+        SyntaxKind[SyntaxKind["CallSignature"] = 172] = "CallSignature";
+        SyntaxKind[SyntaxKind["ConstructSignature"] = 173] = "ConstructSignature";
+        SyntaxKind[SyntaxKind["IndexSignature"] = 174] = "IndexSignature";
         // Type
-        SyntaxKind[SyntaxKind["TypePredicate"] = 173] = "TypePredicate";
-        SyntaxKind[SyntaxKind["TypeReference"] = 174] = "TypeReference";
-        SyntaxKind[SyntaxKind["FunctionType"] = 175] = "FunctionType";
-        SyntaxKind[SyntaxKind["ConstructorType"] = 176] = "ConstructorType";
-        SyntaxKind[SyntaxKind["TypeQuery"] = 177] = "TypeQuery";
-        SyntaxKind[SyntaxKind["TypeLiteral"] = 178] = "TypeLiteral";
-        SyntaxKind[SyntaxKind["ArrayType"] = 179] = "ArrayType";
-        SyntaxKind[SyntaxKind["TupleType"] = 180] = "TupleType";
-        SyntaxKind[SyntaxKind["OptionalType"] = 181] = "OptionalType";
-        SyntaxKind[SyntaxKind["RestType"] = 182] = "RestType";
-        SyntaxKind[SyntaxKind["UnionType"] = 183] = "UnionType";
-        SyntaxKind[SyntaxKind["IntersectionType"] = 184] = "IntersectionType";
-        SyntaxKind[SyntaxKind["ConditionalType"] = 185] = "ConditionalType";
-        SyntaxKind[SyntaxKind["InferType"] = 186] = "InferType";
-        SyntaxKind[SyntaxKind["ParenthesizedType"] = 187] = "ParenthesizedType";
-        SyntaxKind[SyntaxKind["ThisType"] = 188] = "ThisType";
-        SyntaxKind[SyntaxKind["TypeOperator"] = 189] = "TypeOperator";
-        SyntaxKind[SyntaxKind["IndexedAccessType"] = 190] = "IndexedAccessType";
-        SyntaxKind[SyntaxKind["MappedType"] = 191] = "MappedType";
-        SyntaxKind[SyntaxKind["LiteralType"] = 192] = "LiteralType";
-        SyntaxKind[SyntaxKind["NamedTupleMember"] = 193] = "NamedTupleMember";
-        SyntaxKind[SyntaxKind["TemplateLiteralType"] = 194] = "TemplateLiteralType";
-        SyntaxKind[SyntaxKind["TemplateLiteralTypeSpan"] = 195] = "TemplateLiteralTypeSpan";
-        SyntaxKind[SyntaxKind["ImportType"] = 196] = "ImportType";
+        SyntaxKind[SyntaxKind["TypePredicate"] = 175] = "TypePredicate";
+        SyntaxKind[SyntaxKind["TypeReference"] = 176] = "TypeReference";
+        SyntaxKind[SyntaxKind["FunctionType"] = 177] = "FunctionType";
+        SyntaxKind[SyntaxKind["ConstructorType"] = 178] = "ConstructorType";
+        SyntaxKind[SyntaxKind["TypeQuery"] = 179] = "TypeQuery";
+        SyntaxKind[SyntaxKind["TypeLiteral"] = 180] = "TypeLiteral";
+        SyntaxKind[SyntaxKind["ArrayType"] = 181] = "ArrayType";
+        SyntaxKind[SyntaxKind["TupleType"] = 182] = "TupleType";
+        SyntaxKind[SyntaxKind["OptionalType"] = 183] = "OptionalType";
+        SyntaxKind[SyntaxKind["RestType"] = 184] = "RestType";
+        SyntaxKind[SyntaxKind["UnionType"] = 185] = "UnionType";
+        SyntaxKind[SyntaxKind["IntersectionType"] = 186] = "IntersectionType";
+        SyntaxKind[SyntaxKind["ConditionalType"] = 187] = "ConditionalType";
+        SyntaxKind[SyntaxKind["InferType"] = 188] = "InferType";
+        SyntaxKind[SyntaxKind["ParenthesizedType"] = 189] = "ParenthesizedType";
+        SyntaxKind[SyntaxKind["ThisType"] = 190] = "ThisType";
+        SyntaxKind[SyntaxKind["TypeOperator"] = 191] = "TypeOperator";
+        SyntaxKind[SyntaxKind["IndexedAccessType"] = 192] = "IndexedAccessType";
+        SyntaxKind[SyntaxKind["MappedType"] = 193] = "MappedType";
+        SyntaxKind[SyntaxKind["LiteralType"] = 194] = "LiteralType";
+        SyntaxKind[SyntaxKind["NamedTupleMember"] = 195] = "NamedTupleMember";
+        SyntaxKind[SyntaxKind["TemplateLiteralType"] = 196] = "TemplateLiteralType";
+        SyntaxKind[SyntaxKind["TemplateLiteralTypeSpan"] = 197] = "TemplateLiteralTypeSpan";
+        SyntaxKind[SyntaxKind["ImportType"] = 198] = "ImportType";
         // Binding patterns
-        SyntaxKind[SyntaxKind["ObjectBindingPattern"] = 197] = "ObjectBindingPattern";
-        SyntaxKind[SyntaxKind["ArrayBindingPattern"] = 198] = "ArrayBindingPattern";
-        SyntaxKind[SyntaxKind["BindingElement"] = 199] = "BindingElement";
+        SyntaxKind[SyntaxKind["ObjectBindingPattern"] = 199] = "ObjectBindingPattern";
+        SyntaxKind[SyntaxKind["ArrayBindingPattern"] = 200] = "ArrayBindingPattern";
+        SyntaxKind[SyntaxKind["BindingElement"] = 201] = "BindingElement";
         // Expression
-        SyntaxKind[SyntaxKind["ArrayLiteralExpression"] = 200] = "ArrayLiteralExpression";
-        SyntaxKind[SyntaxKind["ObjectLiteralExpression"] = 201] = "ObjectLiteralExpression";
-        SyntaxKind[SyntaxKind["PropertyAccessExpression"] = 202] = "PropertyAccessExpression";
-        SyntaxKind[SyntaxKind["ElementAccessExpression"] = 203] = "ElementAccessExpression";
-        SyntaxKind[SyntaxKind["CallExpression"] = 204] = "CallExpression";
-        SyntaxKind[SyntaxKind["NewExpression"] = 205] = "NewExpression";
-        SyntaxKind[SyntaxKind["TaggedTemplateExpression"] = 206] = "TaggedTemplateExpression";
-        SyntaxKind[SyntaxKind["TypeAssertionExpression"] = 207] = "TypeAssertionExpression";
-        SyntaxKind[SyntaxKind["ParenthesizedExpression"] = 208] = "ParenthesizedExpression";
-        SyntaxKind[SyntaxKind["FunctionExpression"] = 209] = "FunctionExpression";
-        SyntaxKind[SyntaxKind["ArrowFunction"] = 210] = "ArrowFunction";
-        SyntaxKind[SyntaxKind["DeleteExpression"] = 211] = "DeleteExpression";
-        SyntaxKind[SyntaxKind["TypeOfExpression"] = 212] = "TypeOfExpression";
-        SyntaxKind[SyntaxKind["VoidExpression"] = 213] = "VoidExpression";
-        SyntaxKind[SyntaxKind["AwaitExpression"] = 214] = "AwaitExpression";
-        SyntaxKind[SyntaxKind["PrefixUnaryExpression"] = 215] = "PrefixUnaryExpression";
-        SyntaxKind[SyntaxKind["PostfixUnaryExpression"] = 216] = "PostfixUnaryExpression";
-        SyntaxKind[SyntaxKind["BinaryExpression"] = 217] = "BinaryExpression";
-        SyntaxKind[SyntaxKind["ConditionalExpression"] = 218] = "ConditionalExpression";
-        SyntaxKind[SyntaxKind["TemplateExpression"] = 219] = "TemplateExpression";
-        SyntaxKind[SyntaxKind["YieldExpression"] = 220] = "YieldExpression";
-        SyntaxKind[SyntaxKind["SpreadElement"] = 221] = "SpreadElement";
-        SyntaxKind[SyntaxKind["ClassExpression"] = 222] = "ClassExpression";
-        SyntaxKind[SyntaxKind["OmittedExpression"] = 223] = "OmittedExpression";
-        SyntaxKind[SyntaxKind["ExpressionWithTypeArguments"] = 224] = "ExpressionWithTypeArguments";
-        SyntaxKind[SyntaxKind["AsExpression"] = 225] = "AsExpression";
-        SyntaxKind[SyntaxKind["NonNullExpression"] = 226] = "NonNullExpression";
-        SyntaxKind[SyntaxKind["MetaProperty"] = 227] = "MetaProperty";
-        SyntaxKind[SyntaxKind["SyntheticExpression"] = 228] = "SyntheticExpression";
+        SyntaxKind[SyntaxKind["ArrayLiteralExpression"] = 202] = "ArrayLiteralExpression";
+        SyntaxKind[SyntaxKind["ObjectLiteralExpression"] = 203] = "ObjectLiteralExpression";
+        SyntaxKind[SyntaxKind["PropertyAccessExpression"] = 204] = "PropertyAccessExpression";
+        SyntaxKind[SyntaxKind["ElementAccessExpression"] = 205] = "ElementAccessExpression";
+        SyntaxKind[SyntaxKind["CallExpression"] = 206] = "CallExpression";
+        SyntaxKind[SyntaxKind["NewExpression"] = 207] = "NewExpression";
+        SyntaxKind[SyntaxKind["TaggedTemplateExpression"] = 208] = "TaggedTemplateExpression";
+        SyntaxKind[SyntaxKind["TypeAssertionExpression"] = 209] = "TypeAssertionExpression";
+        SyntaxKind[SyntaxKind["ParenthesizedExpression"] = 210] = "ParenthesizedExpression";
+        SyntaxKind[SyntaxKind["FunctionExpression"] = 211] = "FunctionExpression";
+        SyntaxKind[SyntaxKind["ArrowFunction"] = 212] = "ArrowFunction";
+        SyntaxKind[SyntaxKind["DeleteExpression"] = 213] = "DeleteExpression";
+        SyntaxKind[SyntaxKind["TypeOfExpression"] = 214] = "TypeOfExpression";
+        SyntaxKind[SyntaxKind["VoidExpression"] = 215] = "VoidExpression";
+        SyntaxKind[SyntaxKind["AwaitExpression"] = 216] = "AwaitExpression";
+        SyntaxKind[SyntaxKind["PrefixUnaryExpression"] = 217] = "PrefixUnaryExpression";
+        SyntaxKind[SyntaxKind["PostfixUnaryExpression"] = 218] = "PostfixUnaryExpression";
+        SyntaxKind[SyntaxKind["BinaryExpression"] = 219] = "BinaryExpression";
+        SyntaxKind[SyntaxKind["ConditionalExpression"] = 220] = "ConditionalExpression";
+        SyntaxKind[SyntaxKind["TemplateExpression"] = 221] = "TemplateExpression";
+        SyntaxKind[SyntaxKind["YieldExpression"] = 222] = "YieldExpression";
+        SyntaxKind[SyntaxKind["SpreadElement"] = 223] = "SpreadElement";
+        SyntaxKind[SyntaxKind["ClassExpression"] = 224] = "ClassExpression";
+        SyntaxKind[SyntaxKind["OmittedExpression"] = 225] = "OmittedExpression";
+        SyntaxKind[SyntaxKind["ExpressionWithTypeArguments"] = 226] = "ExpressionWithTypeArguments";
+        SyntaxKind[SyntaxKind["AsExpression"] = 227] = "AsExpression";
+        SyntaxKind[SyntaxKind["NonNullExpression"] = 228] = "NonNullExpression";
+        SyntaxKind[SyntaxKind["MetaProperty"] = 229] = "MetaProperty";
+        SyntaxKind[SyntaxKind["SyntheticExpression"] = 230] = "SyntheticExpression";
         // Misc
-        SyntaxKind[SyntaxKind["TemplateSpan"] = 229] = "TemplateSpan";
-        SyntaxKind[SyntaxKind["SemicolonClassElement"] = 230] = "SemicolonClassElement";
+        SyntaxKind[SyntaxKind["TemplateSpan"] = 231] = "TemplateSpan";
+        SyntaxKind[SyntaxKind["SemicolonClassElement"] = 232] = "SemicolonClassElement";
         // Element
-        SyntaxKind[SyntaxKind["Block"] = 231] = "Block";
-        SyntaxKind[SyntaxKind["EmptyStatement"] = 232] = "EmptyStatement";
-        SyntaxKind[SyntaxKind["VariableStatement"] = 233] = "VariableStatement";
-        SyntaxKind[SyntaxKind["ExpressionStatement"] = 234] = "ExpressionStatement";
-        SyntaxKind[SyntaxKind["IfStatement"] = 235] = "IfStatement";
-        SyntaxKind[SyntaxKind["DoStatement"] = 236] = "DoStatement";
-        SyntaxKind[SyntaxKind["WhileStatement"] = 237] = "WhileStatement";
-        SyntaxKind[SyntaxKind["ForStatement"] = 238] = "ForStatement";
-        SyntaxKind[SyntaxKind["ForInStatement"] = 239] = "ForInStatement";
-        SyntaxKind[SyntaxKind["ForOfStatement"] = 240] = "ForOfStatement";
-        SyntaxKind[SyntaxKind["ContinueStatement"] = 241] = "ContinueStatement";
-        SyntaxKind[SyntaxKind["BreakStatement"] = 242] = "BreakStatement";
-        SyntaxKind[SyntaxKind["ReturnStatement"] = 243] = "ReturnStatement";
-        SyntaxKind[SyntaxKind["WithStatement"] = 244] = "WithStatement";
-        SyntaxKind[SyntaxKind["SwitchStatement"] = 245] = "SwitchStatement";
-        SyntaxKind[SyntaxKind["LabeledStatement"] = 246] = "LabeledStatement";
-        SyntaxKind[SyntaxKind["ThrowStatement"] = 247] = "ThrowStatement";
-        SyntaxKind[SyntaxKind["TryStatement"] = 248] = "TryStatement";
-        SyntaxKind[SyntaxKind["DebuggerStatement"] = 249] = "DebuggerStatement";
-        SyntaxKind[SyntaxKind["VariableDeclaration"] = 250] = "VariableDeclaration";
-        SyntaxKind[SyntaxKind["VariableDeclarationList"] = 251] = "VariableDeclarationList";
-        SyntaxKind[SyntaxKind["FunctionDeclaration"] = 252] = "FunctionDeclaration";
-        SyntaxKind[SyntaxKind["ClassDeclaration"] = 253] = "ClassDeclaration";
-        SyntaxKind[SyntaxKind["InterfaceDeclaration"] = 254] = "InterfaceDeclaration";
-        SyntaxKind[SyntaxKind["TypeAliasDeclaration"] = 255] = "TypeAliasDeclaration";
-        SyntaxKind[SyntaxKind["EnumDeclaration"] = 256] = "EnumDeclaration";
-        SyntaxKind[SyntaxKind["ModuleDeclaration"] = 257] = "ModuleDeclaration";
-        SyntaxKind[SyntaxKind["ModuleBlock"] = 258] = "ModuleBlock";
-        SyntaxKind[SyntaxKind["CaseBlock"] = 259] = "CaseBlock";
-        SyntaxKind[SyntaxKind["NamespaceExportDeclaration"] = 260] = "NamespaceExportDeclaration";
-        SyntaxKind[SyntaxKind["ImportEqualsDeclaration"] = 261] = "ImportEqualsDeclaration";
-        SyntaxKind[SyntaxKind["ImportDeclaration"] = 262] = "ImportDeclaration";
-        SyntaxKind[SyntaxKind["ImportClause"] = 263] = "ImportClause";
-        SyntaxKind[SyntaxKind["NamespaceImport"] = 264] = "NamespaceImport";
-        SyntaxKind[SyntaxKind["NamedImports"] = 265] = "NamedImports";
-        SyntaxKind[SyntaxKind["ImportSpecifier"] = 266] = "ImportSpecifier";
-        SyntaxKind[SyntaxKind["ExportAssignment"] = 267] = "ExportAssignment";
-        SyntaxKind[SyntaxKind["ExportDeclaration"] = 268] = "ExportDeclaration";
-        SyntaxKind[SyntaxKind["NamedExports"] = 269] = "NamedExports";
-        SyntaxKind[SyntaxKind["NamespaceExport"] = 270] = "NamespaceExport";
-        SyntaxKind[SyntaxKind["ExportSpecifier"] = 271] = "ExportSpecifier";
-        SyntaxKind[SyntaxKind["MissingDeclaration"] = 272] = "MissingDeclaration";
+        SyntaxKind[SyntaxKind["Block"] = 233] = "Block";
+        SyntaxKind[SyntaxKind["EmptyStatement"] = 234] = "EmptyStatement";
+        SyntaxKind[SyntaxKind["VariableStatement"] = 235] = "VariableStatement";
+        SyntaxKind[SyntaxKind["ExpressionStatement"] = 236] = "ExpressionStatement";
+        SyntaxKind[SyntaxKind["IfStatement"] = 237] = "IfStatement";
+        SyntaxKind[SyntaxKind["DoStatement"] = 238] = "DoStatement";
+        SyntaxKind[SyntaxKind["WhileStatement"] = 239] = "WhileStatement";
+        SyntaxKind[SyntaxKind["ForStatement"] = 240] = "ForStatement";
+        SyntaxKind[SyntaxKind["ForInStatement"] = 241] = "ForInStatement";
+        SyntaxKind[SyntaxKind["ForOfStatement"] = 242] = "ForOfStatement";
+        SyntaxKind[SyntaxKind["ContinueStatement"] = 243] = "ContinueStatement";
+        SyntaxKind[SyntaxKind["BreakStatement"] = 244] = "BreakStatement";
+        SyntaxKind[SyntaxKind["ReturnStatement"] = 245] = "ReturnStatement";
+        SyntaxKind[SyntaxKind["WithStatement"] = 246] = "WithStatement";
+        SyntaxKind[SyntaxKind["SwitchStatement"] = 247] = "SwitchStatement";
+        SyntaxKind[SyntaxKind["LabeledStatement"] = 248] = "LabeledStatement";
+        SyntaxKind[SyntaxKind["ThrowStatement"] = 249] = "ThrowStatement";
+        SyntaxKind[SyntaxKind["TryStatement"] = 250] = "TryStatement";
+        SyntaxKind[SyntaxKind["DebuggerStatement"] = 251] = "DebuggerStatement";
+        SyntaxKind[SyntaxKind["VariableDeclaration"] = 252] = "VariableDeclaration";
+        SyntaxKind[SyntaxKind["VariableDeclarationList"] = 253] = "VariableDeclarationList";
+        SyntaxKind[SyntaxKind["FunctionDeclaration"] = 254] = "FunctionDeclaration";
+        SyntaxKind[SyntaxKind["ClassDeclaration"] = 255] = "ClassDeclaration";
+        SyntaxKind[SyntaxKind["InterfaceDeclaration"] = 256] = "InterfaceDeclaration";
+        SyntaxKind[SyntaxKind["TypeAliasDeclaration"] = 257] = "TypeAliasDeclaration";
+        SyntaxKind[SyntaxKind["EnumDeclaration"] = 258] = "EnumDeclaration";
+        SyntaxKind[SyntaxKind["ModuleDeclaration"] = 259] = "ModuleDeclaration";
+        SyntaxKind[SyntaxKind["ModuleBlock"] = 260] = "ModuleBlock";
+        SyntaxKind[SyntaxKind["CaseBlock"] = 261] = "CaseBlock";
+        SyntaxKind[SyntaxKind["NamespaceExportDeclaration"] = 262] = "NamespaceExportDeclaration";
+        SyntaxKind[SyntaxKind["ImportEqualsDeclaration"] = 263] = "ImportEqualsDeclaration";
+        SyntaxKind[SyntaxKind["ImportDeclaration"] = 264] = "ImportDeclaration";
+        SyntaxKind[SyntaxKind["ImportClause"] = 265] = "ImportClause";
+        SyntaxKind[SyntaxKind["NamespaceImport"] = 266] = "NamespaceImport";
+        SyntaxKind[SyntaxKind["NamedImports"] = 267] = "NamedImports";
+        SyntaxKind[SyntaxKind["ImportSpecifier"] = 268] = "ImportSpecifier";
+        SyntaxKind[SyntaxKind["ExportAssignment"] = 269] = "ExportAssignment";
+        SyntaxKind[SyntaxKind["ExportDeclaration"] = 270] = "ExportDeclaration";
+        SyntaxKind[SyntaxKind["NamedExports"] = 271] = "NamedExports";
+        SyntaxKind[SyntaxKind["NamespaceExport"] = 272] = "NamespaceExport";
+        SyntaxKind[SyntaxKind["ExportSpecifier"] = 273] = "ExportSpecifier";
+        SyntaxKind[SyntaxKind["MissingDeclaration"] = 274] = "MissingDeclaration";
         // Module references
-        SyntaxKind[SyntaxKind["ExternalModuleReference"] = 273] = "ExternalModuleReference";
+        SyntaxKind[SyntaxKind["ExternalModuleReference"] = 275] = "ExternalModuleReference";
         // JSX
-        SyntaxKind[SyntaxKind["JsxElement"] = 274] = "JsxElement";
-        SyntaxKind[SyntaxKind["JsxSelfClosingElement"] = 275] = "JsxSelfClosingElement";
-        SyntaxKind[SyntaxKind["JsxOpeningElement"] = 276] = "JsxOpeningElement";
-        SyntaxKind[SyntaxKind["JsxClosingElement"] = 277] = "JsxClosingElement";
-        SyntaxKind[SyntaxKind["JsxFragment"] = 278] = "JsxFragment";
-        SyntaxKind[SyntaxKind["JsxOpeningFragment"] = 279] = "JsxOpeningFragment";
-        SyntaxKind[SyntaxKind["JsxClosingFragment"] = 280] = "JsxClosingFragment";
-        SyntaxKind[SyntaxKind["JsxAttribute"] = 281] = "JsxAttribute";
-        SyntaxKind[SyntaxKind["JsxAttributes"] = 282] = "JsxAttributes";
-        SyntaxKind[SyntaxKind["JsxSpreadAttribute"] = 283] = "JsxSpreadAttribute";
-        SyntaxKind[SyntaxKind["JsxExpression"] = 284] = "JsxExpression";
+        SyntaxKind[SyntaxKind["JsxElement"] = 276] = "JsxElement";
+        SyntaxKind[SyntaxKind["JsxSelfClosingElement"] = 277] = "JsxSelfClosingElement";
+        SyntaxKind[SyntaxKind["JsxOpeningElement"] = 278] = "JsxOpeningElement";
+        SyntaxKind[SyntaxKind["JsxClosingElement"] = 279] = "JsxClosingElement";
+        SyntaxKind[SyntaxKind["JsxFragment"] = 280] = "JsxFragment";
+        SyntaxKind[SyntaxKind["JsxOpeningFragment"] = 281] = "JsxOpeningFragment";
+        SyntaxKind[SyntaxKind["JsxClosingFragment"] = 282] = "JsxClosingFragment";
+        SyntaxKind[SyntaxKind["JsxAttribute"] = 283] = "JsxAttribute";
+        SyntaxKind[SyntaxKind["JsxAttributes"] = 284] = "JsxAttributes";
+        SyntaxKind[SyntaxKind["JsxSpreadAttribute"] = 285] = "JsxSpreadAttribute";
+        SyntaxKind[SyntaxKind["JsxExpression"] = 286] = "JsxExpression";
         // Clauses
-        SyntaxKind[SyntaxKind["CaseClause"] = 285] = "CaseClause";
-        SyntaxKind[SyntaxKind["DefaultClause"] = 286] = "DefaultClause";
-        SyntaxKind[SyntaxKind["HeritageClause"] = 287] = "HeritageClause";
-        SyntaxKind[SyntaxKind["CatchClause"] = 288] = "CatchClause";
+        SyntaxKind[SyntaxKind["CaseClause"] = 287] = "CaseClause";
+        SyntaxKind[SyntaxKind["DefaultClause"] = 288] = "DefaultClause";
+        SyntaxKind[SyntaxKind["HeritageClause"] = 289] = "HeritageClause";
+        SyntaxKind[SyntaxKind["CatchClause"] = 290] = "CatchClause";
         // Property assignments
-        SyntaxKind[SyntaxKind["PropertyAssignment"] = 289] = "PropertyAssignment";
-        SyntaxKind[SyntaxKind["ShorthandPropertyAssignment"] = 290] = "ShorthandPropertyAssignment";
-        SyntaxKind[SyntaxKind["SpreadAssignment"] = 291] = "SpreadAssignment";
+        SyntaxKind[SyntaxKind["PropertyAssignment"] = 291] = "PropertyAssignment";
+        SyntaxKind[SyntaxKind["ShorthandPropertyAssignment"] = 292] = "ShorthandPropertyAssignment";
+        SyntaxKind[SyntaxKind["SpreadAssignment"] = 293] = "SpreadAssignment";
         // Enum
-        SyntaxKind[SyntaxKind["EnumMember"] = 292] = "EnumMember";
+        SyntaxKind[SyntaxKind["EnumMember"] = 294] = "EnumMember";
         // Unparsed
-        SyntaxKind[SyntaxKind["UnparsedPrologue"] = 293] = "UnparsedPrologue";
-        SyntaxKind[SyntaxKind["UnparsedPrepend"] = 294] = "UnparsedPrepend";
-        SyntaxKind[SyntaxKind["UnparsedText"] = 295] = "UnparsedText";
-        SyntaxKind[SyntaxKind["UnparsedInternalText"] = 296] = "UnparsedInternalText";
-        SyntaxKind[SyntaxKind["UnparsedSyntheticReference"] = 297] = "UnparsedSyntheticReference";
+        SyntaxKind[SyntaxKind["UnparsedPrologue"] = 295] = "UnparsedPrologue";
+        SyntaxKind[SyntaxKind["UnparsedPrepend"] = 296] = "UnparsedPrepend";
+        SyntaxKind[SyntaxKind["UnparsedText"] = 297] = "UnparsedText";
+        SyntaxKind[SyntaxKind["UnparsedInternalText"] = 298] = "UnparsedInternalText";
+        SyntaxKind[SyntaxKind["UnparsedSyntheticReference"] = 299] = "UnparsedSyntheticReference";
         // Top-level nodes
-        SyntaxKind[SyntaxKind["SourceFile"] = 298] = "SourceFile";
-        SyntaxKind[SyntaxKind["Bundle"] = 299] = "Bundle";
-        SyntaxKind[SyntaxKind["UnparsedSource"] = 300] = "UnparsedSource";
-        SyntaxKind[SyntaxKind["InputFiles"] = 301] = "InputFiles";
+        SyntaxKind[SyntaxKind["SourceFile"] = 300] = "SourceFile";
+        SyntaxKind[SyntaxKind["Bundle"] = 301] = "Bundle";
+        SyntaxKind[SyntaxKind["UnparsedSource"] = 302] = "UnparsedSource";
+        SyntaxKind[SyntaxKind["InputFiles"] = 303] = "InputFiles";
         // JSDoc nodes
-        SyntaxKind[SyntaxKind["JSDocTypeExpression"] = 302] = "JSDocTypeExpression";
-        SyntaxKind[SyntaxKind["JSDocNameReference"] = 303] = "JSDocNameReference";
-        SyntaxKind[SyntaxKind["JSDocAllType"] = 304] = "JSDocAllType";
-        SyntaxKind[SyntaxKind["JSDocUnknownType"] = 305] = "JSDocUnknownType";
-        SyntaxKind[SyntaxKind["JSDocNullableType"] = 306] = "JSDocNullableType";
-        SyntaxKind[SyntaxKind["JSDocNonNullableType"] = 307] = "JSDocNonNullableType";
-        SyntaxKind[SyntaxKind["JSDocOptionalType"] = 308] = "JSDocOptionalType";
-        SyntaxKind[SyntaxKind["JSDocFunctionType"] = 309] = "JSDocFunctionType";
-        SyntaxKind[SyntaxKind["JSDocVariadicType"] = 310] = "JSDocVariadicType";
-        SyntaxKind[SyntaxKind["JSDocNamepathType"] = 311] = "JSDocNamepathType";
-        SyntaxKind[SyntaxKind["JSDocComment"] = 312] = "JSDocComment";
-        SyntaxKind[SyntaxKind["JSDocText"] = 313] = "JSDocText";
-        SyntaxKind[SyntaxKind["JSDocTypeLiteral"] = 314] = "JSDocTypeLiteral";
-        SyntaxKind[SyntaxKind["JSDocSignature"] = 315] = "JSDocSignature";
-        SyntaxKind[SyntaxKind["JSDocLink"] = 316] = "JSDocLink";
-        SyntaxKind[SyntaxKind["JSDocTag"] = 317] = "JSDocTag";
-        SyntaxKind[SyntaxKind["JSDocAugmentsTag"] = 318] = "JSDocAugmentsTag";
-        SyntaxKind[SyntaxKind["JSDocImplementsTag"] = 319] = "JSDocImplementsTag";
-        SyntaxKind[SyntaxKind["JSDocAuthorTag"] = 320] = "JSDocAuthorTag";
-        SyntaxKind[SyntaxKind["JSDocDeprecatedTag"] = 321] = "JSDocDeprecatedTag";
-        SyntaxKind[SyntaxKind["JSDocClassTag"] = 322] = "JSDocClassTag";
-        SyntaxKind[SyntaxKind["JSDocPublicTag"] = 323] = "JSDocPublicTag";
-        SyntaxKind[SyntaxKind["JSDocPrivateTag"] = 324] = "JSDocPrivateTag";
-        SyntaxKind[SyntaxKind["JSDocProtectedTag"] = 325] = "JSDocProtectedTag";
-        SyntaxKind[SyntaxKind["JSDocReadonlyTag"] = 326] = "JSDocReadonlyTag";
-        SyntaxKind[SyntaxKind["JSDocOverrideTag"] = 327] = "JSDocOverrideTag";
-        SyntaxKind[SyntaxKind["JSDocCallbackTag"] = 328] = "JSDocCallbackTag";
-        SyntaxKind[SyntaxKind["JSDocEnumTag"] = 329] = "JSDocEnumTag";
-        SyntaxKind[SyntaxKind["JSDocParameterTag"] = 330] = "JSDocParameterTag";
-        SyntaxKind[SyntaxKind["JSDocReturnTag"] = 331] = "JSDocReturnTag";
-        SyntaxKind[SyntaxKind["JSDocThisTag"] = 332] = "JSDocThisTag";
-        SyntaxKind[SyntaxKind["JSDocTypeTag"] = 333] = "JSDocTypeTag";
-        SyntaxKind[SyntaxKind["JSDocTemplateTag"] = 334] = "JSDocTemplateTag";
-        SyntaxKind[SyntaxKind["JSDocTypedefTag"] = 335] = "JSDocTypedefTag";
-        SyntaxKind[SyntaxKind["JSDocSeeTag"] = 336] = "JSDocSeeTag";
-        SyntaxKind[SyntaxKind["JSDocPropertyTag"] = 337] = "JSDocPropertyTag";
+        SyntaxKind[SyntaxKind["JSDocTypeExpression"] = 304] = "JSDocTypeExpression";
+        SyntaxKind[SyntaxKind["JSDocNameReference"] = 305] = "JSDocNameReference";
+        SyntaxKind[SyntaxKind["JSDocMemberName"] = 306] = "JSDocMemberName";
+        SyntaxKind[SyntaxKind["JSDocAllType"] = 307] = "JSDocAllType";
+        SyntaxKind[SyntaxKind["JSDocUnknownType"] = 308] = "JSDocUnknownType";
+        SyntaxKind[SyntaxKind["JSDocNullableType"] = 309] = "JSDocNullableType";
+        SyntaxKind[SyntaxKind["JSDocNonNullableType"] = 310] = "JSDocNonNullableType";
+        SyntaxKind[SyntaxKind["JSDocOptionalType"] = 311] = "JSDocOptionalType";
+        SyntaxKind[SyntaxKind["JSDocFunctionType"] = 312] = "JSDocFunctionType";
+        SyntaxKind[SyntaxKind["JSDocVariadicType"] = 313] = "JSDocVariadicType";
+        SyntaxKind[SyntaxKind["JSDocNamepathType"] = 314] = "JSDocNamepathType";
+        SyntaxKind[SyntaxKind["JSDocComment"] = 315] = "JSDocComment";
+        SyntaxKind[SyntaxKind["JSDocText"] = 316] = "JSDocText";
+        SyntaxKind[SyntaxKind["JSDocTypeLiteral"] = 317] = "JSDocTypeLiteral";
+        SyntaxKind[SyntaxKind["JSDocSignature"] = 318] = "JSDocSignature";
+        SyntaxKind[SyntaxKind["JSDocLink"] = 319] = "JSDocLink";
+        SyntaxKind[SyntaxKind["JSDocLinkCode"] = 320] = "JSDocLinkCode";
+        SyntaxKind[SyntaxKind["JSDocLinkPlain"] = 321] = "JSDocLinkPlain";
+        SyntaxKind[SyntaxKind["JSDocTag"] = 322] = "JSDocTag";
+        SyntaxKind[SyntaxKind["JSDocAugmentsTag"] = 323] = "JSDocAugmentsTag";
+        SyntaxKind[SyntaxKind["JSDocImplementsTag"] = 324] = "JSDocImplementsTag";
+        SyntaxKind[SyntaxKind["JSDocAuthorTag"] = 325] = "JSDocAuthorTag";
+        SyntaxKind[SyntaxKind["JSDocDeprecatedTag"] = 326] = "JSDocDeprecatedTag";
+        SyntaxKind[SyntaxKind["JSDocClassTag"] = 327] = "JSDocClassTag";
+        SyntaxKind[SyntaxKind["JSDocPublicTag"] = 328] = "JSDocPublicTag";
+        SyntaxKind[SyntaxKind["JSDocPrivateTag"] = 329] = "JSDocPrivateTag";
+        SyntaxKind[SyntaxKind["JSDocProtectedTag"] = 330] = "JSDocProtectedTag";
+        SyntaxKind[SyntaxKind["JSDocReadonlyTag"] = 331] = "JSDocReadonlyTag";
+        SyntaxKind[SyntaxKind["JSDocOverrideTag"] = 332] = "JSDocOverrideTag";
+        SyntaxKind[SyntaxKind["JSDocCallbackTag"] = 333] = "JSDocCallbackTag";
+        SyntaxKind[SyntaxKind["JSDocEnumTag"] = 334] = "JSDocEnumTag";
+        SyntaxKind[SyntaxKind["JSDocParameterTag"] = 335] = "JSDocParameterTag";
+        SyntaxKind[SyntaxKind["JSDocReturnTag"] = 336] = "JSDocReturnTag";
+        SyntaxKind[SyntaxKind["JSDocThisTag"] = 337] = "JSDocThisTag";
+        SyntaxKind[SyntaxKind["JSDocTypeTag"] = 338] = "JSDocTypeTag";
+        SyntaxKind[SyntaxKind["JSDocTemplateTag"] = 339] = "JSDocTemplateTag";
+        SyntaxKind[SyntaxKind["JSDocTypedefTag"] = 340] = "JSDocTypedefTag";
+        SyntaxKind[SyntaxKind["JSDocSeeTag"] = 341] = "JSDocSeeTag";
+        SyntaxKind[SyntaxKind["JSDocPropertyTag"] = 342] = "JSDocPropertyTag";
         // Synthesized list
-        SyntaxKind[SyntaxKind["SyntaxList"] = 338] = "SyntaxList";
+        SyntaxKind[SyntaxKind["SyntaxList"] = 343] = "SyntaxList";
         // Transformation nodes
-        SyntaxKind[SyntaxKind["NotEmittedStatement"] = 339] = "NotEmittedStatement";
-        SyntaxKind[SyntaxKind["PartiallyEmittedExpression"] = 340] = "PartiallyEmittedExpression";
-        SyntaxKind[SyntaxKind["CommaListExpression"] = 341] = "CommaListExpression";
-        SyntaxKind[SyntaxKind["MergeDeclarationMarker"] = 342] = "MergeDeclarationMarker";
-        SyntaxKind[SyntaxKind["EndOfDeclarationMarker"] = 343] = "EndOfDeclarationMarker";
-        SyntaxKind[SyntaxKind["SyntheticReferenceExpression"] = 344] = "SyntheticReferenceExpression";
+        SyntaxKind[SyntaxKind["NotEmittedStatement"] = 344] = "NotEmittedStatement";
+        SyntaxKind[SyntaxKind["PartiallyEmittedExpression"] = 345] = "PartiallyEmittedExpression";
+        SyntaxKind[SyntaxKind["CommaListExpression"] = 346] = "CommaListExpression";
+        SyntaxKind[SyntaxKind["MergeDeclarationMarker"] = 347] = "MergeDeclarationMarker";
+        SyntaxKind[SyntaxKind["EndOfDeclarationMarker"] = 348] = "EndOfDeclarationMarker";
+        SyntaxKind[SyntaxKind["SyntheticReferenceExpression"] = 349] = "SyntheticReferenceExpression";
         // Enum value count
-        SyntaxKind[SyntaxKind["Count"] = 345] = "Count";
+        SyntaxKind[SyntaxKind["Count"] = 350] = "Count";
         // Markers
-        SyntaxKind[SyntaxKind["FirstAssignment"] = 62] = "FirstAssignment";
-        SyntaxKind[SyntaxKind["LastAssignment"] = 77] = "LastAssignment";
-        SyntaxKind[SyntaxKind["FirstCompoundAssignment"] = 63] = "FirstCompoundAssignment";
-        SyntaxKind[SyntaxKind["LastCompoundAssignment"] = 77] = "LastCompoundAssignment";
-        SyntaxKind[SyntaxKind["FirstReservedWord"] = 80] = "FirstReservedWord";
-        SyntaxKind[SyntaxKind["LastReservedWord"] = 115] = "LastReservedWord";
-        SyntaxKind[SyntaxKind["FirstKeyword"] = 80] = "FirstKeyword";
-        SyntaxKind[SyntaxKind["LastKeyword"] = 157] = "LastKeyword";
-        SyntaxKind[SyntaxKind["FirstFutureReservedWord"] = 116] = "FirstFutureReservedWord";
-        SyntaxKind[SyntaxKind["LastFutureReservedWord"] = 124] = "LastFutureReservedWord";
-        SyntaxKind[SyntaxKind["FirstTypeNode"] = 173] = "FirstTypeNode";
-        SyntaxKind[SyntaxKind["LastTypeNode"] = 196] = "LastTypeNode";
+        SyntaxKind[SyntaxKind["FirstAssignment"] = 63] = "FirstAssignment";
+        SyntaxKind[SyntaxKind["LastAssignment"] = 78] = "LastAssignment";
+        SyntaxKind[SyntaxKind["FirstCompoundAssignment"] = 64] = "FirstCompoundAssignment";
+        SyntaxKind[SyntaxKind["LastCompoundAssignment"] = 78] = "LastCompoundAssignment";
+        SyntaxKind[SyntaxKind["FirstReservedWord"] = 81] = "FirstReservedWord";
+        SyntaxKind[SyntaxKind["LastReservedWord"] = 116] = "LastReservedWord";
+        SyntaxKind[SyntaxKind["FirstKeyword"] = 81] = "FirstKeyword";
+        SyntaxKind[SyntaxKind["LastKeyword"] = 158] = "LastKeyword";
+        SyntaxKind[SyntaxKind["FirstFutureReservedWord"] = 117] = "FirstFutureReservedWord";
+        SyntaxKind[SyntaxKind["LastFutureReservedWord"] = 125] = "LastFutureReservedWord";
+        SyntaxKind[SyntaxKind["FirstTypeNode"] = 175] = "FirstTypeNode";
+        SyntaxKind[SyntaxKind["LastTypeNode"] = 198] = "LastTypeNode";
         SyntaxKind[SyntaxKind["FirstPunctuation"] = 18] = "FirstPunctuation";
-        SyntaxKind[SyntaxKind["LastPunctuation"] = 77] = "LastPunctuation";
+        SyntaxKind[SyntaxKind["LastPunctuation"] = 78] = "LastPunctuation";
         SyntaxKind[SyntaxKind["FirstToken"] = 0] = "FirstToken";
-        SyntaxKind[SyntaxKind["LastToken"] = 157] = "LastToken";
+        SyntaxKind[SyntaxKind["LastToken"] = 158] = "LastToken";
         SyntaxKind[SyntaxKind["FirstTriviaToken"] = 2] = "FirstTriviaToken";
         SyntaxKind[SyntaxKind["LastTriviaToken"] = 7] = "LastTriviaToken";
         SyntaxKind[SyntaxKind["FirstLiteralToken"] = 8] = "FirstLiteralToken";
@@ -4340,16 +4417,16 @@
         SyntaxKind[SyntaxKind["FirstTemplateToken"] = 14] = "FirstTemplateToken";
         SyntaxKind[SyntaxKind["LastTemplateToken"] = 17] = "LastTemplateToken";
         SyntaxKind[SyntaxKind["FirstBinaryOperator"] = 29] = "FirstBinaryOperator";
-        SyntaxKind[SyntaxKind["LastBinaryOperator"] = 77] = "LastBinaryOperator";
-        SyntaxKind[SyntaxKind["FirstStatement"] = 233] = "FirstStatement";
-        SyntaxKind[SyntaxKind["LastStatement"] = 249] = "LastStatement";
-        SyntaxKind[SyntaxKind["FirstNode"] = 158] = "FirstNode";
-        SyntaxKind[SyntaxKind["FirstJSDocNode"] = 302] = "FirstJSDocNode";
-        SyntaxKind[SyntaxKind["LastJSDocNode"] = 337] = "LastJSDocNode";
-        SyntaxKind[SyntaxKind["FirstJSDocTagNode"] = 317] = "FirstJSDocTagNode";
-        SyntaxKind[SyntaxKind["LastJSDocTagNode"] = 337] = "LastJSDocTagNode";
-        /* @internal */ SyntaxKind[SyntaxKind["FirstContextualKeyword"] = 125] = "FirstContextualKeyword";
-        /* @internal */ SyntaxKind[SyntaxKind["LastContextualKeyword"] = 157] = "LastContextualKeyword";
+        SyntaxKind[SyntaxKind["LastBinaryOperator"] = 78] = "LastBinaryOperator";
+        SyntaxKind[SyntaxKind["FirstStatement"] = 235] = "FirstStatement";
+        SyntaxKind[SyntaxKind["LastStatement"] = 251] = "LastStatement";
+        SyntaxKind[SyntaxKind["FirstNode"] = 159] = "FirstNode";
+        SyntaxKind[SyntaxKind["FirstJSDocNode"] = 304] = "FirstJSDocNode";
+        SyntaxKind[SyntaxKind["LastJSDocNode"] = 342] = "LastJSDocNode";
+        SyntaxKind[SyntaxKind["FirstJSDocTagNode"] = 322] = "FirstJSDocTagNode";
+        SyntaxKind[SyntaxKind["LastJSDocTagNode"] = 342] = "LastJSDocTagNode";
+        /* @internal */ SyntaxKind[SyntaxKind["FirstContextualKeyword"] = 126] = "FirstContextualKeyword";
+        /* @internal */ SyntaxKind[SyntaxKind["LastContextualKeyword"] = 158] = "LastContextualKeyword";
     })(SyntaxKind = ts.SyntaxKind || (ts.SyntaxKind = {}));
     var NodeFlags;
     (function (NodeFlags) {
@@ -4888,6 +4965,7 @@
         NodeCheckFlags[NodeCheckFlags["ClassWithConstructorReference"] = 16777216] = "ClassWithConstructorReference";
         NodeCheckFlags[NodeCheckFlags["ConstructorReferenceInClass"] = 33554432] = "ConstructorReferenceInClass";
         NodeCheckFlags[NodeCheckFlags["ContainsClassWithPrivateIdentifiers"] = 67108864] = "ContainsClassWithPrivateIdentifiers";
+        NodeCheckFlags[NodeCheckFlags["ContainsSuperPropertyInStaticInitializer"] = 134217728] = "ContainsSuperPropertyInStaticInitializer";
     })(NodeCheckFlags = ts.NodeCheckFlags || (ts.NodeCheckFlags = {}));
     var TypeFlags;
     (function (TypeFlags) {
@@ -4957,7 +5035,7 @@
         /* @internal */
         TypeFlags[TypeFlags["Simplifiable"] = 25165824] = "Simplifiable";
         /* @internal */
-        TypeFlags[TypeFlags["Substructure"] = 469237760] = "Substructure";
+        TypeFlags[TypeFlags["Singleton"] = 67358815] = "Singleton";
         // 'Narrowable' types are types where narrowing actually narrows.
         // This *should* be every type other than null, undefined, void, and never
         TypeFlags[TypeFlags["Narrowable"] = 536624127] = "Narrowable";
@@ -5029,21 +5107,21 @@
         ObjectFlags[ObjectFlags["IdenticalBaseTypeExists"] = 67108864] = "IdenticalBaseTypeExists";
         // Flags that require TypeFlags.UnionOrIntersection or TypeFlags.Substitution
         /* @internal */
-        ObjectFlags[ObjectFlags["IsGenericObjectTypeComputed"] = 4194304] = "IsGenericObjectTypeComputed";
+        ObjectFlags[ObjectFlags["IsGenericTypeComputed"] = 4194304] = "IsGenericTypeComputed";
         /* @internal */
         ObjectFlags[ObjectFlags["IsGenericObjectType"] = 8388608] = "IsGenericObjectType";
         /* @internal */
-        ObjectFlags[ObjectFlags["IsGenericIndexTypeComputed"] = 16777216] = "IsGenericIndexTypeComputed";
+        ObjectFlags[ObjectFlags["IsGenericIndexType"] = 16777216] = "IsGenericIndexType";
         /* @internal */
-        ObjectFlags[ObjectFlags["IsGenericIndexType"] = 33554432] = "IsGenericIndexType";
+        ObjectFlags[ObjectFlags["IsGenericType"] = 25165824] = "IsGenericType";
         // Flags that require TypeFlags.Union
         /* @internal */
-        ObjectFlags[ObjectFlags["ContainsIntersections"] = 67108864] = "ContainsIntersections";
+        ObjectFlags[ObjectFlags["ContainsIntersections"] = 33554432] = "ContainsIntersections";
         // Flags that require TypeFlags.Intersection
         /* @internal */
-        ObjectFlags[ObjectFlags["IsNeverIntersectionComputed"] = 67108864] = "IsNeverIntersectionComputed";
+        ObjectFlags[ObjectFlags["IsNeverIntersectionComputed"] = 33554432] = "IsNeverIntersectionComputed";
         /* @internal */
-        ObjectFlags[ObjectFlags["IsNeverIntersection"] = 134217728] = "IsNeverIntersection";
+        ObjectFlags[ObjectFlags["IsNeverIntersection"] = 67108864] = "IsNeverIntersection";
     })(ObjectFlags = ts.ObjectFlags || (ts.ObjectFlags = {}));
     /* @internal */
     var VarianceFlags;
@@ -5070,6 +5148,21 @@
         ElementFlags[ElementFlags["NonRest"] = 11] = "NonRest";
     })(ElementFlags = ts.ElementFlags || (ts.ElementFlags = {}));
     /* @internal */
+    var AccessFlags;
+    (function (AccessFlags) {
+        AccessFlags[AccessFlags["None"] = 0] = "None";
+        AccessFlags[AccessFlags["IncludeUndefined"] = 1] = "IncludeUndefined";
+        AccessFlags[AccessFlags["NoIndexSignatures"] = 2] = "NoIndexSignatures";
+        AccessFlags[AccessFlags["Writing"] = 4] = "Writing";
+        AccessFlags[AccessFlags["CacheSymbol"] = 8] = "CacheSymbol";
+        AccessFlags[AccessFlags["NoTupleBoundsCheck"] = 16] = "NoTupleBoundsCheck";
+        AccessFlags[AccessFlags["ExpressionPosition"] = 32] = "ExpressionPosition";
+        AccessFlags[AccessFlags["ReportDeprecated"] = 64] = "ReportDeprecated";
+        AccessFlags[AccessFlags["SuppressNoImplicitAnyError"] = 128] = "SuppressNoImplicitAnyError";
+        AccessFlags[AccessFlags["Contextual"] = 256] = "Contextual";
+        AccessFlags[AccessFlags["Persistent"] = 1] = "Persistent";
+    })(AccessFlags = ts.AccessFlags || (ts.AccessFlags = {}));
+    /* @internal */
     var JsxReferenceKind;
     (function (JsxReferenceKind) {
         JsxReferenceKind[JsxReferenceKind["Component"] = 0] = "Component";
@@ -5469,6 +5562,8 @@
         TransformFlags[TransformFlags["ContainsDynamicImport"] = 4194304] = "ContainsDynamicImport";
         TransformFlags[TransformFlags["ContainsClassFields"] = 8388608] = "ContainsClassFields";
         TransformFlags[TransformFlags["ContainsPossibleTopLevelAwait"] = 16777216] = "ContainsPossibleTopLevelAwait";
+        TransformFlags[TransformFlags["ContainsLexicalSuper"] = 33554432] = "ContainsLexicalSuper";
+        TransformFlags[TransformFlags["ContainsUpdateExpressionForIdentifier"] = 67108864] = "ContainsUpdateExpressionForIdentifier";
         // Please leave this as 1 << 29.
         // It is the maximum bit we can set before we outgrow the size of a v8 small integer (SMI) on an x86 system.
         // It is a good reminder of how much room we have left
@@ -5494,12 +5589,12 @@
         TransformFlags[TransformFlags["PropertyAccessExcludes"] = 536870912] = "PropertyAccessExcludes";
         TransformFlags[TransformFlags["NodeExcludes"] = 536870912] = "NodeExcludes";
         TransformFlags[TransformFlags["ArrowFunctionExcludes"] = 557748224] = "ArrowFunctionExcludes";
-        TransformFlags[TransformFlags["FunctionExcludes"] = 557756416] = "FunctionExcludes";
-        TransformFlags[TransformFlags["ConstructorExcludes"] = 557752320] = "ConstructorExcludes";
-        TransformFlags[TransformFlags["MethodOrAccessorExcludes"] = 540975104] = "MethodOrAccessorExcludes";
-        TransformFlags[TransformFlags["PropertyExcludes"] = 536879104] = "PropertyExcludes";
+        TransformFlags[TransformFlags["FunctionExcludes"] = 591310848] = "FunctionExcludes";
+        TransformFlags[TransformFlags["ConstructorExcludes"] = 591306752] = "ConstructorExcludes";
+        TransformFlags[TransformFlags["MethodOrAccessorExcludes"] = 574529536] = "MethodOrAccessorExcludes";
+        TransformFlags[TransformFlags["PropertyExcludes"] = 570433536] = "PropertyExcludes";
         TransformFlags[TransformFlags["ClassExcludes"] = 536940544] = "ClassExcludes";
-        TransformFlags[TransformFlags["ModuleExcludes"] = 555888640] = "ModuleExcludes";
+        TransformFlags[TransformFlags["ModuleExcludes"] = 589443072] = "ModuleExcludes";
         TransformFlags[TransformFlags["TypeExcludes"] = -2] = "TypeExcludes";
         TransformFlags[TransformFlags["ObjectLiteralExcludes"] = 536973312] = "ObjectLiteralExcludes";
         TransformFlags[TransformFlags["ArrayLiteralOrCallOrNewExcludes"] = 536887296] = "ArrayLiteralOrCallOrNewExcludes";
@@ -5507,9 +5602,10 @@
         TransformFlags[TransformFlags["ParameterExcludes"] = 536870912] = "ParameterExcludes";
         TransformFlags[TransformFlags["CatchClauseExcludes"] = 536903680] = "CatchClauseExcludes";
         TransformFlags[TransformFlags["BindingPatternExcludes"] = 536887296] = "BindingPatternExcludes";
+        TransformFlags[TransformFlags["ContainsLexicalThisOrSuper"] = 33562624] = "ContainsLexicalThisOrSuper";
         // Propagating flags
         // - Bitmasks for flags that should propagate from a child
-        TransformFlags[TransformFlags["PropertyNamePropagatingFlags"] = 8192] = "PropertyNamePropagatingFlags";
+        TransformFlags[TransformFlags["PropertyNamePropagatingFlags"] = 33562624] = "PropertyNamePropagatingFlags";
         // Masks
         // - Additional bitmasks
     })(TransformFlags = ts.TransformFlags || (ts.TransformFlags = {}));
@@ -5547,6 +5643,8 @@
         /*@internal*/ EmitFlags[EmitFlags["TypeScriptClassWrapper"] = 33554432] = "TypeScriptClassWrapper";
         /*@internal*/ EmitFlags[EmitFlags["NeverApplyImportHelper"] = 67108864] = "NeverApplyImportHelper";
         /*@internal*/ EmitFlags[EmitFlags["IgnoreSourceNewlines"] = 134217728] = "IgnoreSourceNewlines";
+        /*@internal*/ EmitFlags[EmitFlags["Immutable"] = 268435456] = "Immutable";
+        /*@internal*/ EmitFlags[EmitFlags["IndirectCall"] = 536870912] = "IndirectCall";
     })(EmitFlags = ts.EmitFlags || (ts.EmitFlags = {}));
     /**
      * Used by the checker, this enum keeps track of external emit helpers that should be type
@@ -6048,7 +6146,7 @@
         var rest = path.substring(rootLength).split(ts.directorySeparator);
         if (rest.length && !ts.lastOrUndefined(rest))
             rest.pop();
-        return __spreadArray([root], rest);
+        return __spreadArray([root], rest, true);
     }
     /**
      * Parse a path into an array containing a root component (at index 0) and zero or more path
@@ -6107,6 +6205,11 @@
      * Normalize path separators, converting `\` into `/`.
      */
     function normalizeSlashes(path) {
+        var index = path.indexOf("\\");
+        if (index === -1) {
+            return path;
+        }
+        backslashRegExp.lastIndex = index; // prime regex with known position
         return path.replace(backslashRegExp, ts.directorySeparator);
     }
     ts.normalizeSlashes = normalizeSlashes;
@@ -6194,7 +6297,7 @@
         for (var _i = 1; _i < arguments.length; _i++) {
             paths[_i - 1] = arguments[_i];
         }
-        return normalizePath(ts.some(paths) ? combinePaths.apply(void 0, __spreadArray([path], paths)) : normalizeSlashes(path));
+        return normalizePath(ts.some(paths) ? combinePaths.apply(void 0, __spreadArray([path], paths, false)) : normalizeSlashes(path));
     }
     ts.resolvePath = resolvePath;
     /**
@@ -6217,6 +6320,19 @@
     ts.getNormalizedAbsolutePath = getNormalizedAbsolutePath;
     function normalizePath(path) {
         path = normalizeSlashes(path);
+        // Most paths don't require normalization
+        if (!relativePathSegmentRegExp.test(path)) {
+            return path;
+        }
+        // Some paths only require cleanup of `/./` or leading `./`
+        var simplified = path.replace(/\/\.\//g, "/").replace(/^\.\//, "");
+        if (simplified !== path) {
+            path = simplified;
+            if (!relativePathSegmentRegExp.test(path)) {
+                return path;
+            }
+        }
+        // Other paths require full normalization
         var normalized = getPathFromPathComponents(reducePathComponents(getPathComponents(path)));
         return normalized && hasTrailingDirectorySeparator(path) ? ensureTrailingDirectorySeparator(normalized) : normalized;
     }
@@ -6285,7 +6401,7 @@
     ts.changeAnyExtension = changeAnyExtension;
     //// Path Comparisons
     // check path for these segments: '', '.'. '..'
-    var relativePathSegmentRegExp = /(^|\/)\.{0,2}($|\/)/;
+    var relativePathSegmentRegExp = /(?:\/\/)|(?:^|\/)\.\.?(?:$|\/)/;
     function comparePathsWorker(a, b, componentComparer) {
         if (a === b)
             return 0 /* EqualTo */;
@@ -6405,7 +6521,7 @@
         for (; start < fromComponents.length; start++) {
             relative.push("..");
         }
-        return __spreadArray(__spreadArray([""], relative), components);
+        return __spreadArray(__spreadArray([""], relative, true), components, true);
     }
     ts.getPathComponentsRelativeTo = getPathComponentsRelativeTo;
     function getRelativePathFromDirectory(fromDirectory, to, getCanonicalFileNameOrIgnoreCase) {
@@ -7300,6 +7416,7 @@
             }
             var activeSession;
             var profilePath = "./profile.cpuprofile";
+            var hitSystemWatcherLimit = false;
             var Buffer = require("buffer").Buffer;
             var nodeVersion = getNodeMajorVersion();
             var isNode4OrLater = nodeVersion >= 4;
@@ -7336,6 +7453,9 @@
                 write: function (s) {
                     process.stdout.write(s);
                 },
+                getWidthOfTerminal: function () {
+                    return process.stdout.columns;
+                },
                 writeOutputIsTTY: function () {
                     return process.stdout.isTTY;
                 },
@@ -7625,6 +7745,10 @@
                             options = { persistent: true };
                         }
                     }
+                    if (hitSystemWatcherLimit) {
+                        ts.sysLog("sysLog:: " + fileOrDirectory + ":: Defaulting to fsWatchFile");
+                        return watchPresentFileSystemEntryWithFsWatchFile();
+                    }
                     try {
                         var presentWatcher = _fs.watch(fileOrDirectory, options, isLinuxOrMacOs ?
                             callbackChangingToMissingFileSystemEntry :
@@ -7637,6 +7761,8 @@
                         // Catch the exception and use polling instead
                         // Eg. on linux the number of watches are limited and one could easily exhaust watches and the exception ENOSPC is thrown when creating watcher at that point
                         // so instead of throwing error, use fs.watchFile
+                        hitSystemWatcherLimit || (hitSystemWatcherLimit = e.code === "ENOSPC");
+                        ts.sysLog("sysLog:: " + fileOrDirectory + ":: Changing to fsWatchFile");
                         return watchPresentFileSystemEntryWithFsWatchFile();
                     }
                 }
@@ -7656,7 +7782,6 @@
                  * Eg. on linux the number of watches are limited and one could easily exhaust watches and the exception ENOSPC is thrown when creating watcher at that point
                  */
                 function watchPresentFileSystemEntryWithFsWatchFile() {
-                    ts.sysLog("sysLog:: " + fileOrDirectory + ":: Changing to fsWatchFile");
                     return watchFile(fileOrDirectory, createFileWatcherCallback(callback), fallbackPollingInterval, fallbackOptions);
                 }
                 /**
@@ -7775,7 +7900,7 @@
                 }
             }
             function readDirectory(path, extensions, excludes, includes, depth) {
-                return ts.matchFiles(path, extensions, excludes, includes, useCaseSensitiveFileNames, process.cwd(), depth, getAccessibleFileSystemEntries, realpath);
+                return ts.matchFiles(path, extensions, excludes, includes, useCaseSensitiveFileNames, process.cwd(), depth, getAccessibleFileSystemEntries, realpath, directoryExists);
             }
             function fileSystemEntryExists(path, entryKind) {
                 // Since the error thrown by fs.statSync isn't used, we can avoid collecting a stack trace to improve
@@ -7898,7 +8023,6 @@
         An_index_signature_parameter_cannot_have_an_initializer: diag(1020, ts.DiagnosticCategory.Error, "An_index_signature_parameter_cannot_have_an_initializer_1020", "An index signature parameter cannot have an initializer."),
         An_index_signature_must_have_a_type_annotation: diag(1021, ts.DiagnosticCategory.Error, "An_index_signature_must_have_a_type_annotation_1021", "An index signature must have a type annotation."),
         An_index_signature_parameter_must_have_a_type_annotation: diag(1022, ts.DiagnosticCategory.Error, "An_index_signature_parameter_must_have_a_type_annotation_1022", "An index signature parameter must have a type annotation."),
-        An_index_signature_parameter_type_must_be_either_string_or_number: diag(1023, ts.DiagnosticCategory.Error, "An_index_signature_parameter_type_must_be_either_string_or_number_1023", "An index signature parameter type must be either 'string' or 'number'."),
         readonly_modifier_can_only_appear_on_a_property_declaration_or_index_signature: diag(1024, ts.DiagnosticCategory.Error, "readonly_modifier_can_only_appear_on_a_property_declaration_or_index_signature_1024", "'readonly' modifier can only appear on a property declaration or index signature."),
         An_index_signature_cannot_have_a_trailing_comma: diag(1025, ts.DiagnosticCategory.Error, "An_index_signature_cannot_have_a_trailing_comma_1025", "An index signature cannot have a trailing comma."),
         Accessibility_modifier_already_seen: diag(1028, ts.DiagnosticCategory.Error, "Accessibility_modifier_already_seen_1028", "Accessibility modifier already seen."),
@@ -7959,6 +8083,7 @@
         for_await_loops_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules: diag(1103, ts.DiagnosticCategory.Error, "for_await_loops_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_1103", "'for await' loops are only allowed within async functions and at the top levels of modules."),
         A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement: diag(1104, ts.DiagnosticCategory.Error, "A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement_1104", "A 'continue' statement can only be used within an enclosing iteration statement."),
         A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement: diag(1105, ts.DiagnosticCategory.Error, "A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement_1105", "A 'break' statement can only be used within an enclosing iteration or switch statement."),
+        The_left_hand_side_of_a_for_of_statement_may_not_be_async: diag(1106, ts.DiagnosticCategory.Error, "The_left_hand_side_of_a_for_of_statement_may_not_be_async_1106", "The left-hand side of a 'for...of' statement may not be 'async'."),
         Jump_target_cannot_cross_function_boundary: diag(1107, ts.DiagnosticCategory.Error, "Jump_target_cannot_cross_function_boundary_1107", "Jump target cannot cross function boundary."),
         A_return_statement_can_only_be_used_within_a_function_body: diag(1108, ts.DiagnosticCategory.Error, "A_return_statement_can_only_be_used_within_a_function_body_1108", "A 'return' statement can only be used within a function body."),
         Expression_expected: diag(1109, ts.DiagnosticCategory.Error, "Expression_expected_1109", "Expression expected."),
@@ -8045,7 +8170,7 @@
         Decorators_are_not_valid_here: diag(1206, ts.DiagnosticCategory.Error, "Decorators_are_not_valid_here_1206", "Decorators are not valid here."),
         Decorators_cannot_be_applied_to_multiple_get_Slashset_accessors_of_the_same_name: diag(1207, ts.DiagnosticCategory.Error, "Decorators_cannot_be_applied_to_multiple_get_Slashset_accessors_of_the_same_name_1207", "Decorators cannot be applied to multiple get/set accessors of the same name."),
         _0_cannot_be_compiled_under_isolatedModules_because_it_is_considered_a_global_script_file_Add_an_import_export_or_an_empty_export_statement_to_make_it_a_module: diag(1208, ts.DiagnosticCategory.Error, "_0_cannot_be_compiled_under_isolatedModules_because_it_is_considered_a_global_script_file_Add_an_imp_1208", "'{0}' cannot be compiled under '--isolatedModules' because it is considered a global script file. Add an import, export, or an empty 'export {}' statement to make it a module."),
-        Invalid_use_of_0_Class_definitions_are_automatically_in_strict_mode: diag(1210, ts.DiagnosticCategory.Error, "Invalid_use_of_0_Class_definitions_are_automatically_in_strict_mode_1210", "Invalid use of '{0}'. Class definitions are automatically in strict mode."),
+        Code_contained_in_a_class_is_evaluated_in_JavaScript_s_strict_mode_which_does_not_allow_this_use_of_0_For_more_information_see_https_Colon_Slash_Slashdeveloper_mozilla_org_Slashen_US_Slashdocs_SlashWeb_SlashJavaScript_SlashReference_SlashStrict_mode: diag(1210, ts.DiagnosticCategory.Error, "Code_contained_in_a_class_is_evaluated_in_JavaScript_s_strict_mode_which_does_not_allow_this_use_of__1210", "Code contained in a class is evaluated in JavaScript's strict mode which does not allow this use of '{0}'. For more information, see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Strict_mode."),
         A_class_declaration_without_the_default_modifier_must_have_a_name: diag(1211, ts.DiagnosticCategory.Error, "A_class_declaration_without_the_default_modifier_must_have_a_name_1211", "A class declaration without the 'default' modifier must have a name."),
         Identifier_expected_0_is_a_reserved_word_in_strict_mode: diag(1212, ts.DiagnosticCategory.Error, "Identifier_expected_0_is_a_reserved_word_in_strict_mode_1212", "Identifier expected. '{0}' is a reserved word in strict mode."),
         Identifier_expected_0_is_a_reserved_word_in_strict_mode_Class_definitions_are_automatically_in_strict_mode: diag(1213, ts.DiagnosticCategory.Error, "Identifier_expected_0_is_a_reserved_word_in_strict_mode_Class_definitions_are_automatically_in_stric_1213", "Identifier expected. '{0}' is a reserved word in strict mode. Class definitions are automatically in strict mode."),
@@ -8100,6 +8225,8 @@
         Declarations_with_definite_assignment_assertions_must_also_have_type_annotations: diag(1264, ts.DiagnosticCategory.Error, "Declarations_with_definite_assignment_assertions_must_also_have_type_annotations_1264", "Declarations with definite assignment assertions must also have type annotations."),
         A_rest_element_cannot_follow_another_rest_element: diag(1265, ts.DiagnosticCategory.Error, "A_rest_element_cannot_follow_another_rest_element_1265", "A rest element cannot follow another rest element."),
         An_optional_element_cannot_follow_a_rest_element: diag(1266, ts.DiagnosticCategory.Error, "An_optional_element_cannot_follow_a_rest_element_1266", "An optional element cannot follow a rest element."),
+        Property_0_cannot_have_an_initializer_because_it_is_marked_abstract: diag(1267, ts.DiagnosticCategory.Error, "Property_0_cannot_have_an_initializer_because_it_is_marked_abstract_1267", "Property '{0}' cannot have an initializer because it is marked abstract."),
+        An_index_signature_parameter_type_must_be_string_number_symbol_or_a_template_literal_type: diag(1268, ts.DiagnosticCategory.Error, "An_index_signature_parameter_type_must_be_string_number_symbol_or_a_template_literal_type_1268", "An index signature parameter type must be 'string', 'number', 'symbol', or a template literal type."),
         with_statements_are_not_allowed_in_an_async_function_block: diag(1300, ts.DiagnosticCategory.Error, "with_statements_are_not_allowed_in_an_async_function_block_1300", "'with' statements are not allowed in an async function block."),
         await_expressions_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules: diag(1308, ts.DiagnosticCategory.Error, "await_expressions_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_1308", "'await' expressions are only allowed within async functions and at the top levels of modules."),
         Did_you_mean_to_use_a_Colon_An_can_only_follow_a_property_name_when_the_containing_object_literal_is_part_of_a_destructuring_pattern: diag(1312, ts.DiagnosticCategory.Error, "Did_you_mean_to_use_a_Colon_An_can_only_follow_a_property_name_when_the_containing_object_literal_is_1312", "Did you mean to use a ':'? An '=' can only follow a property name when the containing object literal is part of a destructuring pattern."),
@@ -8126,8 +8253,7 @@
         unique_symbol_types_may_not_be_used_on_a_variable_declaration_with_a_binding_name: diag(1333, ts.DiagnosticCategory.Error, "unique_symbol_types_may_not_be_used_on_a_variable_declaration_with_a_binding_name_1333", "'unique symbol' types may not be used on a variable declaration with a binding name."),
         unique_symbol_types_are_only_allowed_on_variables_in_a_variable_statement: diag(1334, ts.DiagnosticCategory.Error, "unique_symbol_types_are_only_allowed_on_variables_in_a_variable_statement_1334", "'unique symbol' types are only allowed on variables in a variable statement."),
         unique_symbol_types_are_not_allowed_here: diag(1335, ts.DiagnosticCategory.Error, "unique_symbol_types_are_not_allowed_here_1335", "'unique symbol' types are not allowed here."),
-        An_index_signature_parameter_type_cannot_be_a_type_alias_Consider_writing_0_Colon_1_Colon_2_instead: diag(1336, ts.DiagnosticCategory.Error, "An_index_signature_parameter_type_cannot_be_a_type_alias_Consider_writing_0_Colon_1_Colon_2_instead_1336", "An index signature parameter type cannot be a type alias. Consider writing '[{0}: {1}]: {2}' instead."),
-        An_index_signature_parameter_type_cannot_be_a_union_type_Consider_using_a_mapped_object_type_instead: diag(1337, ts.DiagnosticCategory.Error, "An_index_signature_parameter_type_cannot_be_a_union_type_Consider_using_a_mapped_object_type_instead_1337", "An index signature parameter type cannot be a union type. Consider using a mapped object type instead."),
+        An_index_signature_parameter_type_cannot_be_a_literal_type_or_generic_type_Consider_using_a_mapped_object_type_instead: diag(1337, ts.DiagnosticCategory.Error, "An_index_signature_parameter_type_cannot_be_a_literal_type_or_generic_type_Consider_using_a_mapped_o_1337", "An index signature parameter type cannot be a literal type or generic type. Consider using a mapped object type instead."),
         infer_declarations_are_only_permitted_in_the_extends_clause_of_a_conditional_type: diag(1338, ts.DiagnosticCategory.Error, "infer_declarations_are_only_permitted_in_the_extends_clause_of_a_conditional_type_1338", "'infer' declarations are only permitted in the 'extends' clause of a conditional type."),
         Module_0_does_not_refer_to_a_value_but_is_used_as_a_value_here: diag(1339, ts.DiagnosticCategory.Error, "Module_0_does_not_refer_to_a_value_but_is_used_as_a_value_here_1339", "Module '{0}' does not refer to a value, but is used as a value here."),
         Module_0_does_not_refer_to_a_type_but_is_used_as_a_type_here_Did_you_mean_typeof_import_0: diag(1340, ts.DiagnosticCategory.Error, "Module_0_does_not_refer_to_a_type_but_is_used_as_a_type_here_Did_you_mean_typeof_import_0_1340", "Module '{0}' does not refer to a type, but is used as a type here. Did you mean 'typeof import('{0}')'?"),
@@ -8157,7 +8283,6 @@
         Convert_all_re_exported_types_to_type_only_exports: diag(1365, ts.DiagnosticCategory.Message, "Convert_all_re_exported_types_to_type_only_exports_1365", "Convert all re-exported types to type-only exports"),
         Split_into_two_separate_import_declarations: diag(1366, ts.DiagnosticCategory.Message, "Split_into_two_separate_import_declarations_1366", "Split into two separate import declarations"),
         Split_all_invalid_type_only_imports: diag(1367, ts.DiagnosticCategory.Message, "Split_all_invalid_type_only_imports_1367", "Split all invalid type-only imports"),
-        Specify_emit_Slashchecking_behavior_for_imports_that_are_only_used_for_types: diag(1368, ts.DiagnosticCategory.Message, "Specify_emit_Slashchecking_behavior_for_imports_that_are_only_used_for_types_1368", "Specify emit/checking behavior for imports that are only used for types"),
         Did_you_mean_0: diag(1369, ts.DiagnosticCategory.Message, "Did_you_mean_0_1369", "Did you mean '{0}'?"),
         This_import_is_never_used_as_a_value_and_must_use_import_type_because_importsNotUsedAsValues_is_set_to_error: diag(1371, ts.DiagnosticCategory.Error, "This_import_is_never_used_as_a_value_and_must_use_import_type_because_importsNotUsedAsValues_is_set__1371", "This import is never used as a value and must use 'import type' because 'importsNotUsedAsValues' is set to 'error'."),
         Convert_to_type_only_import: diag(1373, ts.DiagnosticCategory.Message, "Convert_to_type_only_import_1373", "Convert to type-only import"),
@@ -8221,6 +8346,16 @@
         for_await_loops_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_file_has_no_imports_or_exports_Consider_adding_an_empty_export_to_make_this_file_a_module: diag(1431, ts.DiagnosticCategory.Error, "for_await_loops_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_file_1431", "'for await' loops are only allowed at the top level of a file when that file is a module, but this file has no imports or exports. Consider adding an empty 'export {}' to make this file a module."),
         Top_level_for_await_loops_are_only_allowed_when_the_module_option_is_set_to_esnext_or_system_and_the_target_option_is_set_to_es2017_or_higher: diag(1432, ts.DiagnosticCategory.Error, "Top_level_for_await_loops_are_only_allowed_when_the_module_option_is_set_to_esnext_or_system_and_the_1432", "Top-level 'for await' loops are only allowed when the 'module' option is set to 'esnext' or 'system', and the 'target' option is set to 'es2017' or higher."),
         Decorators_may_not_be_applied_to_this_parameters: diag(1433, ts.DiagnosticCategory.Error, "Decorators_may_not_be_applied_to_this_parameters_1433", "Decorators may not be applied to 'this' parameters."),
+        Unexpected_keyword_or_identifier: diag(1434, ts.DiagnosticCategory.Error, "Unexpected_keyword_or_identifier_1434", "Unexpected keyword or identifier."),
+        Unknown_keyword_or_identifier_Did_you_mean_0: diag(1435, ts.DiagnosticCategory.Error, "Unknown_keyword_or_identifier_Did_you_mean_0_1435", "Unknown keyword or identifier. Did you mean '{0}'?"),
+        Decorators_must_precede_the_name_and_all_keywords_of_property_declarations: diag(1436, ts.DiagnosticCategory.Error, "Decorators_must_precede_the_name_and_all_keywords_of_property_declarations_1436", "Decorators must precede the name and all keywords of property declarations."),
+        Namespace_must_be_given_a_name: diag(1437, ts.DiagnosticCategory.Error, "Namespace_must_be_given_a_name_1437", "Namespace must be given a name."),
+        Interface_must_be_given_a_name: diag(1438, ts.DiagnosticCategory.Error, "Interface_must_be_given_a_name_1438", "Interface must be given a name."),
+        Type_alias_must_be_given_a_name: diag(1439, ts.DiagnosticCategory.Error, "Type_alias_must_be_given_a_name_1439", "Type alias must be given a name."),
+        Variable_declaration_not_allowed_at_this_location: diag(1440, ts.DiagnosticCategory.Error, "Variable_declaration_not_allowed_at_this_location_1440", "Variable declaration not allowed at this location."),
+        Cannot_start_a_function_call_in_a_type_annotation: diag(1441, ts.DiagnosticCategory.Error, "Cannot_start_a_function_call_in_a_type_annotation_1441", "Cannot start a function call in a type annotation."),
+        Expected_for_property_initializer: diag(1442, ts.DiagnosticCategory.Error, "Expected_for_property_initializer_1442", "Expected '=' for property initializer."),
+        Module_declaration_names_may_only_use_or_quoted_strings: diag(1443, ts.DiagnosticCategory.Error, "Module_declaration_names_may_only_use_or_quoted_strings_1443", "Module declaration names may only use ' or \" quoted strings."),
         The_types_of_0_are_incompatible_between_these_types: diag(2200, ts.DiagnosticCategory.Error, "The_types_of_0_are_incompatible_between_these_types_2200", "The types of '{0}' are incompatible between these types."),
         The_types_returned_by_0_are_incompatible_between_these_types: diag(2201, ts.DiagnosticCategory.Error, "The_types_returned_by_0_are_incompatible_between_these_types_2201", "The types returned by '{0}' are incompatible between these types."),
         Call_signature_return_types_0_and_1_are_incompatible: diag(2202, ts.DiagnosticCategory.Error, "Call_signature_return_types_0_and_1_are_incompatible_2202", "Call signature return types '{0}' and '{1}' are incompatible.", /*reportsUnnecessary*/ undefined, /*elidedInCompatabilityPyramid*/ true),
@@ -8256,8 +8391,8 @@
         Types_of_property_0_are_incompatible: diag(2326, ts.DiagnosticCategory.Error, "Types_of_property_0_are_incompatible_2326", "Types of property '{0}' are incompatible."),
         Property_0_is_optional_in_type_1_but_required_in_type_2: diag(2327, ts.DiagnosticCategory.Error, "Property_0_is_optional_in_type_1_but_required_in_type_2_2327", "Property '{0}' is optional in type '{1}' but required in type '{2}'."),
         Types_of_parameters_0_and_1_are_incompatible: diag(2328, ts.DiagnosticCategory.Error, "Types_of_parameters_0_and_1_are_incompatible_2328", "Types of parameters '{0}' and '{1}' are incompatible."),
-        Index_signature_is_missing_in_type_0: diag(2329, ts.DiagnosticCategory.Error, "Index_signature_is_missing_in_type_0_2329", "Index signature is missing in type '{0}'."),
-        Index_signatures_are_incompatible: diag(2330, ts.DiagnosticCategory.Error, "Index_signatures_are_incompatible_2330", "Index signatures are incompatible."),
+        Index_signature_for_type_0_is_missing_in_type_1: diag(2329, ts.DiagnosticCategory.Error, "Index_signature_for_type_0_is_missing_in_type_1_2329", "Index signature for type '{0}' is missing in type '{1}'."),
+        _0_and_1_index_signatures_are_incompatible: diag(2330, ts.DiagnosticCategory.Error, "_0_and_1_index_signatures_are_incompatible_2330", "'{0}' and '{1}' index signatures are incompatible."),
         this_cannot_be_referenced_in_a_module_or_namespace_body: diag(2331, ts.DiagnosticCategory.Error, "this_cannot_be_referenced_in_a_module_or_namespace_body_2331", "'this' cannot be referenced in a module or namespace body."),
         this_cannot_be_referenced_in_current_location: diag(2332, ts.DiagnosticCategory.Error, "this_cannot_be_referenced_in_current_location_2332", "'this' cannot be referenced in current location."),
         this_cannot_be_referenced_in_constructor_arguments: diag(2333, ts.DiagnosticCategory.Error, "this_cannot_be_referenced_in_constructor_arguments_2333", "'this' cannot be referenced in constructor arguments."),
@@ -8301,8 +8436,7 @@
         A_parameter_initializer_is_only_allowed_in_a_function_or_constructor_implementation: diag(2371, ts.DiagnosticCategory.Error, "A_parameter_initializer_is_only_allowed_in_a_function_or_constructor_implementation_2371", "A parameter initializer is only allowed in a function or constructor implementation."),
         Parameter_0_cannot_reference_itself: diag(2372, ts.DiagnosticCategory.Error, "Parameter_0_cannot_reference_itself_2372", "Parameter '{0}' cannot reference itself."),
         Parameter_0_cannot_reference_identifier_1_declared_after_it: diag(2373, ts.DiagnosticCategory.Error, "Parameter_0_cannot_reference_identifier_1_declared_after_it_2373", "Parameter '{0}' cannot reference identifier '{1}' declared after it."),
-        Duplicate_string_index_signature: diag(2374, ts.DiagnosticCategory.Error, "Duplicate_string_index_signature_2374", "Duplicate string index signature."),
-        Duplicate_number_index_signature: diag(2375, ts.DiagnosticCategory.Error, "Duplicate_number_index_signature_2375", "Duplicate number index signature."),
+        Duplicate_index_signature_for_type_0: diag(2374, ts.DiagnosticCategory.Error, "Duplicate_index_signature_for_type_0_2374", "Duplicate index signature for type '{0}'."),
         A_super_call_must_be_the_first_statement_in_the_constructor_when_a_class_contains_initialized_properties_parameter_properties_or_private_identifiers: diag(2376, ts.DiagnosticCategory.Error, "A_super_call_must_be_the_first_statement_in_the_constructor_when_a_class_contains_initialized_proper_2376", "A 'super' call must be the first statement in the constructor when a class contains initialized properties, parameter properties, or private identifiers."),
         Constructors_for_derived_classes_must_contain_a_super_call: diag(2377, ts.DiagnosticCategory.Error, "Constructors_for_derived_classes_must_contain_a_super_call_2377", "Constructors for derived classes must contain a 'super' call."),
         A_get_accessor_must_return_a_value: diag(2378, ts.DiagnosticCategory.Error, "A_get_accessor_must_return_a_value_2378", "A 'get' accessor must return a value."),
@@ -8337,9 +8471,8 @@
         Setters_cannot_return_a_value: diag(2408, ts.DiagnosticCategory.Error, "Setters_cannot_return_a_value_2408", "Setters cannot return a value."),
         Return_type_of_constructor_signature_must_be_assignable_to_the_instance_type_of_the_class: diag(2409, ts.DiagnosticCategory.Error, "Return_type_of_constructor_signature_must_be_assignable_to_the_instance_type_of_the_class_2409", "Return type of constructor signature must be assignable to the instance type of the class."),
         The_with_statement_is_not_supported_All_symbols_in_a_with_block_will_have_type_any: diag(2410, ts.DiagnosticCategory.Error, "The_with_statement_is_not_supported_All_symbols_in_a_with_block_will_have_type_any_2410", "The 'with' statement is not supported. All symbols in a 'with' block will have type 'any'."),
-        Property_0_of_type_1_is_not_assignable_to_string_index_type_2: diag(2411, ts.DiagnosticCategory.Error, "Property_0_of_type_1_is_not_assignable_to_string_index_type_2_2411", "Property '{0}' of type '{1}' is not assignable to string index type '{2}'."),
-        Property_0_of_type_1_is_not_assignable_to_numeric_index_type_2: diag(2412, ts.DiagnosticCategory.Error, "Property_0_of_type_1_is_not_assignable_to_numeric_index_type_2_2412", "Property '{0}' of type '{1}' is not assignable to numeric index type '{2}'."),
-        Numeric_index_type_0_is_not_assignable_to_string_index_type_1: diag(2413, ts.DiagnosticCategory.Error, "Numeric_index_type_0_is_not_assignable_to_string_index_type_1_2413", "Numeric index type '{0}' is not assignable to string index type '{1}'."),
+        Property_0_of_type_1_is_not_assignable_to_2_index_type_3: diag(2411, ts.DiagnosticCategory.Error, "Property_0_of_type_1_is_not_assignable_to_2_index_type_3_2411", "Property '{0}' of type '{1}' is not assignable to '{2}' index type '{3}'."),
+        _0_index_type_1_is_not_assignable_to_2_index_type_3: diag(2413, ts.DiagnosticCategory.Error, "_0_index_type_1_is_not_assignable_to_2_index_type_3_2413", "'{0}' index type '{1}' is not assignable to '{2}' index type '{3}'."),
         Class_name_cannot_be_0: diag(2414, ts.DiagnosticCategory.Error, "Class_name_cannot_be_0_2414", "Class name cannot be '{0}'."),
         Class_0_incorrectly_extends_base_class_1: diag(2415, ts.DiagnosticCategory.Error, "Class_0_incorrectly_extends_base_class_1_2415", "Class '{0}' incorrectly extends base class '{1}'."),
         Property_0_in_type_1_is_not_assignable_to_the_same_property_in_base_type_2: diag(2416, ts.DiagnosticCategory.Error, "Property_0_in_type_1_is_not_assignable_to_the_same_property_in_base_type_2_2416", "Property '{0}' in type '{1}' is not assignable to the same property in base type '{2}'."),
@@ -8486,7 +8619,9 @@
         Property_0_is_used_before_being_assigned: diag(2565, ts.DiagnosticCategory.Error, "Property_0_is_used_before_being_assigned_2565", "Property '{0}' is used before being assigned."),
         A_rest_element_cannot_have_a_property_name: diag(2566, ts.DiagnosticCategory.Error, "A_rest_element_cannot_have_a_property_name_2566", "A rest element cannot have a property name."),
         Enum_declarations_can_only_merge_with_namespace_or_other_enum_declarations: diag(2567, ts.DiagnosticCategory.Error, "Enum_declarations_can_only_merge_with_namespace_or_other_enum_declarations_2567", "Enum declarations can only merge with namespace or other enum declarations."),
+        Property_0_may_not_exist_on_type_1_Did_you_mean_2: diag(2568, ts.DiagnosticCategory.Error, "Property_0_may_not_exist_on_type_1_Did_you_mean_2_2568", "Property '{0}' may not exist on type '{1}'. Did you mean '{2}'?"),
         Type_0_is_not_an_array_type_or_a_string_type_Use_compiler_option_downlevelIteration_to_allow_iterating_of_iterators: diag(2569, ts.DiagnosticCategory.Error, "Type_0_is_not_an_array_type_or_a_string_type_Use_compiler_option_downlevelIteration_to_allow_iterati_2569", "Type '{0}' is not an array type or a string type. Use compiler option '--downlevelIteration' to allow iterating of iterators."),
+        Could_not_find_name_0_Did_you_mean_1: diag(2570, ts.DiagnosticCategory.Error, "Could_not_find_name_0_Did_you_mean_1_2570", "Could not find name '{0}'. Did you mean '{1}'?"),
         Object_is_of_type_unknown: diag(2571, ts.DiagnosticCategory.Error, "Object_is_of_type_unknown_2571", "Object is of type 'unknown'."),
         Rest_signatures_are_incompatible: diag(2572, ts.DiagnosticCategory.Error, "Rest_signatures_are_incompatible_2572", "Rest signatures are incompatible."),
         Property_0_is_incompatible_with_rest_element_type: diag(2573, ts.DiagnosticCategory.Error, "Property_0_is_incompatible_with_rest_element_type_2573", "Property '{0}' is incompatible with rest element type."),
@@ -8547,6 +8682,7 @@
         Cannot_assign_to_0_because_it_is_a_namespace: diag(2631, ts.DiagnosticCategory.Error, "Cannot_assign_to_0_because_it_is_a_namespace_2631", "Cannot assign to '{0}' because it is a namespace."),
         Cannot_assign_to_0_because_it_is_an_import: diag(2632, ts.DiagnosticCategory.Error, "Cannot_assign_to_0_because_it_is_an_import_2632", "Cannot assign to '{0}' because it is an import."),
         JSX_property_access_expressions_cannot_include_JSX_namespace_names: diag(2633, ts.DiagnosticCategory.Error, "JSX_property_access_expressions_cannot_include_JSX_namespace_names_2633", "JSX property access expressions cannot include JSX namespace names"),
+        _0_index_signatures_are_incompatible: diag(2634, ts.DiagnosticCategory.Error, "_0_index_signatures_are_incompatible_2634", "'{0}' index signatures are incompatible."),
         Cannot_augment_module_0_with_value_exports_because_it_resolves_to_a_non_module_entity: diag(2649, ts.DiagnosticCategory.Error, "Cannot_augment_module_0_with_value_exports_because_it_resolves_to_a_non_module_entity_2649", "Cannot augment module '{0}' with value exports because it resolves to a non-module entity."),
         A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_members_defined_in_other_enums: diag(2651, ts.DiagnosticCategory.Error, "A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_memb_2651", "A member initializer in a enum declaration cannot reference members declared after it, including members defined in other enums."),
         Merged_declaration_0_cannot_include_a_default_export_declaration_Consider_adding_a_separate_export_default_0_declaration_instead: diag(2652, ts.DiagnosticCategory.Error, "Merged_declaration_0_cannot_include_a_default_export_declaration_Consider_adding_a_separate_export_d_2652", "Merged declaration '{0}' cannot include a default export declaration. Consider adding a separate 'export default {0}' declaration instead."),
@@ -8709,6 +8845,13 @@
         Property_0_may_not_be_used_in_a_static_property_s_initializer_in_the_same_class_when_target_is_esnext_and_useDefineForClassFields_is_false: diag(2810, ts.DiagnosticCategory.Error, "Property_0_may_not_be_used_in_a_static_property_s_initializer_in_the_same_class_when_target_is_esnex_2810", "Property '{0}' may not be used in a static property's initializer in the same class when 'target' is 'esnext' and 'useDefineForClassFields' is 'false'."),
         Initializer_for_property_0: diag(2811, ts.DiagnosticCategory.Error, "Initializer_for_property_0_2811", "Initializer for property '{0}'"),
         Property_0_does_not_exist_on_type_1_Try_changing_the_lib_compiler_option_to_include_dom: diag(2812, ts.DiagnosticCategory.Error, "Property_0_does_not_exist_on_type_1_Try_changing_the_lib_compiler_option_to_include_dom_2812", "Property '{0}' does not exist on type '{1}'. Try changing the 'lib' compiler option to include 'dom'."),
+        Class_declaration_cannot_implement_overload_list_for_0: diag(2813, ts.DiagnosticCategory.Error, "Class_declaration_cannot_implement_overload_list_for_0_2813", "Class declaration cannot implement overload list for '{0}'."),
+        Function_with_bodies_can_only_merge_with_classes_that_are_ambient: diag(2814, ts.DiagnosticCategory.Error, "Function_with_bodies_can_only_merge_with_classes_that_are_ambient_2814", "Function with bodies can only merge with classes that are ambient."),
+        arguments_cannot_be_referenced_in_property_initializers: diag(2815, ts.DiagnosticCategory.Error, "arguments_cannot_be_referenced_in_property_initializers_2815", "'arguments' cannot be referenced in property initializers."),
+        Cannot_use_this_in_a_static_property_initializer_of_a_decorated_class: diag(2816, ts.DiagnosticCategory.Error, "Cannot_use_this_in_a_static_property_initializer_of_a_decorated_class_2816", "Cannot use 'this' in a static property initializer of a decorated class."),
+        Property_0_has_no_initializer_and_is_not_definitely_assigned_in_a_class_static_block: diag(2817, ts.DiagnosticCategory.Error, "Property_0_has_no_initializer_and_is_not_definitely_assigned_in_a_class_static_block_2817", "Property '{0}' has no initializer and is not definitely assigned in a class static block."),
+        Duplicate_identifier_0_Compiler_reserves_name_1_when_emitting_super_references_in_static_initializers: diag(2818, ts.DiagnosticCategory.Error, "Duplicate_identifier_0_Compiler_reserves_name_1_when_emitting_super_references_in_static_initializer_2818", "Duplicate identifier '{0}'. Compiler reserves name '{1}' when emitting 'super' references in static initializers."),
+        Namespace_name_cannot_be_0: diag(2819, ts.DiagnosticCategory.Error, "Namespace_name_cannot_be_0_2819", "Namespace name cannot be '{0}'."),
         Import_declaration_0_is_using_private_name_1: diag(4000, ts.DiagnosticCategory.Error, "Import_declaration_0_is_using_private_name_1_4000", "Import declaration '{0}' is using private name '{1}'."),
         Type_parameter_0_of_exported_class_has_or_is_using_private_name_1: diag(4002, ts.DiagnosticCategory.Error, "Type_parameter_0_of_exported_class_has_or_is_using_private_name_1_4002", "Type parameter '{0}' of exported class has or is using private name '{1}'."),
         Type_parameter_0_of_exported_interface_has_or_is_using_private_name_1: diag(4004, ts.DiagnosticCategory.Error, "Type_parameter_0_of_exported_interface_has_or_is_using_private_name_1_4004", "Type parameter '{0}' of exported interface has or is using private name '{1}'."),
@@ -8808,6 +8951,8 @@
         This_member_must_have_an_override_modifier_because_it_overrides_a_member_in_the_base_class_0: diag(4114, ts.DiagnosticCategory.Error, "This_member_must_have_an_override_modifier_because_it_overrides_a_member_in_the_base_class_0_4114", "This member must have an 'override' modifier because it overrides a member in the base class '{0}'."),
         This_parameter_property_must_have_an_override_modifier_because_it_overrides_a_member_in_base_class_0: diag(4115, ts.DiagnosticCategory.Error, "This_parameter_property_must_have_an_override_modifier_because_it_overrides_a_member_in_base_class_0_4115", "This parameter property must have an 'override' modifier because it overrides a member in base class '{0}'."),
         This_member_must_have_an_override_modifier_because_it_overrides_an_abstract_method_that_is_declared_in_the_base_class_0: diag(4116, ts.DiagnosticCategory.Error, "This_member_must_have_an_override_modifier_because_it_overrides_an_abstract_method_that_is_declared__4116", "This member must have an 'override' modifier because it overrides an abstract method that is declared in the base class '{0}'."),
+        This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0_Did_you_mean_1: diag(4117, ts.DiagnosticCategory.Error, "This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0_Did_you__4117", "This member cannot have an 'override' modifier because it is not declared in the base class '{0}'. Did you mean '{1}'?"),
+        The_type_of_this_node_cannot_be_serialized_because_its_property_0_cannot_be_serialized: diag(4118, ts.DiagnosticCategory.Error, "The_type_of_this_node_cannot_be_serialized_because_its_property_0_cannot_be_serialized_4118", "The type of this node cannot be serialized because its property '{0}' cannot be serialized."),
         The_current_host_does_not_support_the_0_option: diag(5001, ts.DiagnosticCategory.Error, "The_current_host_does_not_support_the_0_option_5001", "The current host does not support the '{0}' option."),
         Cannot_find_the_common_subdirectory_path_for_the_input_files: diag(5009, ts.DiagnosticCategory.Error, "Cannot_find_the_common_subdirectory_path_for_the_input_files_5009", "Cannot find the common subdirectory path for the input files."),
         File_specification_cannot_end_in_a_recursive_directory_wildcard_Asterisk_Asterisk_Colon_0: diag(5010, ts.DiagnosticCategory.Error, "File_specification_cannot_end_in_a_recursive_directory_wildcard_Asterisk_Asterisk_Colon_0_5010", "File specification cannot end in a recursive directory wildcard ('**'): '{0}'."),
@@ -8866,7 +9011,7 @@
         Generates_a_sourcemap_for_each_corresponding_d_ts_file: diag(6000, ts.DiagnosticCategory.Message, "Generates_a_sourcemap_for_each_corresponding_d_ts_file_6000", "Generates a sourcemap for each corresponding '.d.ts' file."),
         Concatenate_and_emit_output_to_single_file: diag(6001, ts.DiagnosticCategory.Message, "Concatenate_and_emit_output_to_single_file_6001", "Concatenate and emit output to single file."),
         Generates_corresponding_d_ts_file: diag(6002, ts.DiagnosticCategory.Message, "Generates_corresponding_d_ts_file_6002", "Generates corresponding '.d.ts' file."),
-        Specify_the_location_where_debugger_should_locate_map_files_instead_of_generated_locations: diag(6003, ts.DiagnosticCategory.Message, "Specify_the_location_where_debugger_should_locate_map_files_instead_of_generated_locations_6003", "Specify the location where debugger should locate map files instead of generated locations."),
+        Specify_the_location_where_debugger_should_locate_map_files_instead_of_generated_locations: diag(6655, ts.DiagnosticCategory.Message, "Specify_the_location_where_debugger_should_locate_map_files_instead_of_generated_locations_6655", "Specify the location where debugger should locate map files instead of generated locations."),
         Specify_the_location_where_debugger_should_locate_TypeScript_files_instead_of_source_locations: diag(6004, ts.DiagnosticCategory.Message, "Specify_the_location_where_debugger_should_locate_TypeScript_files_instead_of_source_locations_6004", "Specify the location where debugger should locate TypeScript files instead of source locations."),
         Watch_input_files: diag(6005, ts.DiagnosticCategory.Message, "Watch_input_files_6005", "Watch input files."),
         Redirect_output_structure_to_the_directory: diag(6006, ts.DiagnosticCategory.Message, "Redirect_output_structure_to_the_directory_6006", "Redirect output structure to the directory."),
@@ -8878,8 +9023,8 @@
         Skip_type_checking_of_declaration_files: diag(6012, ts.DiagnosticCategory.Message, "Skip_type_checking_of_declaration_files_6012", "Skip type checking of declaration files."),
         Do_not_resolve_the_real_path_of_symlinks: diag(6013, ts.DiagnosticCategory.Message, "Do_not_resolve_the_real_path_of_symlinks_6013", "Do not resolve the real path of symlinks."),
         Only_emit_d_ts_declaration_files: diag(6014, ts.DiagnosticCategory.Message, "Only_emit_d_ts_declaration_files_6014", "Only emit '.d.ts' declaration files."),
-        Specify_ECMAScript_target_version_Colon_ES3_default_ES5_ES2015_ES2016_ES2017_ES2018_ES2019_ES2020_ES2021_or_ESNEXT: diag(6015, ts.DiagnosticCategory.Message, "Specify_ECMAScript_target_version_Colon_ES3_default_ES5_ES2015_ES2016_ES2017_ES2018_ES2019_ES2020_ES_6015", "Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019', 'ES2020', 'ES2021', or 'ESNEXT'."),
-        Specify_module_code_generation_Colon_none_commonjs_amd_system_umd_es2015_es2020_or_ESNext: diag(6016, ts.DiagnosticCategory.Message, "Specify_module_code_generation_Colon_none_commonjs_amd_system_umd_es2015_es2020_or_ESNext_6016", "Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', 'es2020', or 'ESNext'."),
+        Specify_ECMAScript_target_version: diag(6015, ts.DiagnosticCategory.Message, "Specify_ECMAScript_target_version_6015", "Specify ECMAScript target version."),
+        Specify_module_code_generation: diag(6016, ts.DiagnosticCategory.Message, "Specify_module_code_generation_6016", "Specify module code generation."),
         Print_this_message: diag(6017, ts.DiagnosticCategory.Message, "Print_this_message_6017", "Print this message."),
         Print_the_compiler_s_version: diag(6019, ts.DiagnosticCategory.Message, "Print_the_compiler_s_version_6019", "Print the compiler's version."),
         Compile_the_project_given_the_path_to_its_configuration_file_or_to_a_folder_with_a_tsconfig_json: diag(6020, ts.DiagnosticCategory.Message, "Compile_the_project_given_the_path_to_its_configuration_file_or_to_a_folder_with_a_tsconfig_json_6020", "Compile the project given the path to its configuration file, or to a folder with a 'tsconfig.json'."),
@@ -8931,7 +9076,7 @@
         Do_not_report_errors_on_unreachable_code: diag(6077, ts.DiagnosticCategory.Message, "Do_not_report_errors_on_unreachable_code_6077", "Do not report errors on unreachable code."),
         Disallow_inconsistently_cased_references_to_the_same_file: diag(6078, ts.DiagnosticCategory.Message, "Disallow_inconsistently_cased_references_to_the_same_file_6078", "Disallow inconsistently-cased references to the same file."),
         Specify_library_files_to_be_included_in_the_compilation: diag(6079, ts.DiagnosticCategory.Message, "Specify_library_files_to_be_included_in_the_compilation_6079", "Specify library files to be included in the compilation."),
-        Specify_JSX_code_generation_Colon_preserve_react_native_react_react_jsx_or_react_jsxdev: diag(6080, ts.DiagnosticCategory.Message, "Specify_JSX_code_generation_Colon_preserve_react_native_react_react_jsx_or_react_jsxdev_6080", "Specify JSX code generation: 'preserve', 'react-native', 'react', 'react-jsx' or 'react-jsxdev'."),
+        Specify_JSX_code_generation: diag(6080, ts.DiagnosticCategory.Message, "Specify_JSX_code_generation_6080", "Specify JSX code generation."),
         File_0_has_an_unsupported_extension_so_skipping_it: diag(6081, ts.DiagnosticCategory.Message, "File_0_has_an_unsupported_extension_so_skipping_it_6081", "File '{0}' has an unsupported extension, so skipping it."),
         Only_amd_and_system_modules_are_supported_alongside_0: diag(6082, ts.DiagnosticCategory.Error, "Only_amd_and_system_modules_are_supported_alongside_0_6082", "Only 'amd' and 'system' modules are supported alongside --{0}."),
         Base_directory_to_resolve_non_absolute_module_names: diag(6083, ts.DiagnosticCategory.Message, "Base_directory_to_resolve_non_absolute_module_names_6083", "Base directory to resolve non-absolute module names."),
@@ -9013,7 +9158,7 @@
         List_of_folders_to_include_type_definitions_from: diag(6161, ts.DiagnosticCategory.Message, "List_of_folders_to_include_type_definitions_from_6161", "List of folders to include type definitions from."),
         Disable_size_limitations_on_JavaScript_projects: diag(6162, ts.DiagnosticCategory.Message, "Disable_size_limitations_on_JavaScript_projects_6162", "Disable size limitations on JavaScript projects."),
         The_character_set_of_the_input_files: diag(6163, ts.DiagnosticCategory.Message, "The_character_set_of_the_input_files_6163", "The character set of the input files."),
-        Emit_a_UTF_8_Byte_Order_Mark_BOM_in_the_beginning_of_output_files: diag(6164, ts.DiagnosticCategory.Message, "Emit_a_UTF_8_Byte_Order_Mark_BOM_in_the_beginning_of_output_files_6164", "Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files."),
+        Emit_a_UTF_8_Byte_Order_Mark_BOM_in_the_beginning_of_output_files: diag(6622, ts.DiagnosticCategory.Message, "Emit_a_UTF_8_Byte_Order_Mark_BOM_in_the_beginning_of_output_files_6622", "Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files."),
         Do_not_truncate_error_messages: diag(6165, ts.DiagnosticCategory.Message, "Do_not_truncate_error_messages_6165", "Do not truncate error messages."),
         Output_directory_for_generated_declaration_files: diag(6166, ts.DiagnosticCategory.Message, "Output_directory_for_generated_declaration_files_6166", "Output directory for generated declaration files."),
         A_series_of_entries_which_re_map_imports_to_lookup_locations_relative_to_the_baseUrl: diag(6167, ts.DiagnosticCategory.Message, "A_series_of_entries_which_re_map_imports_to_lookup_locations_relative_to_the_baseUrl_6167", "A series of entries which re-map imports to lookup locations relative to the 'baseUrl'."),
@@ -9021,20 +9166,12 @@
         Show_all_compiler_options: diag(6169, ts.DiagnosticCategory.Message, "Show_all_compiler_options_6169", "Show all compiler options."),
         Deprecated_Use_outFile_instead_Concatenate_and_emit_output_to_single_file: diag(6170, ts.DiagnosticCategory.Message, "Deprecated_Use_outFile_instead_Concatenate_and_emit_output_to_single_file_6170", "[Deprecated] Use '--outFile' instead. Concatenate and emit output to single file"),
         Command_line_Options: diag(6171, ts.DiagnosticCategory.Message, "Command_line_Options_6171", "Command-line Options"),
-        Basic_Options: diag(6172, ts.DiagnosticCategory.Message, "Basic_Options_6172", "Basic Options"),
-        Strict_Type_Checking_Options: diag(6173, ts.DiagnosticCategory.Message, "Strict_Type_Checking_Options_6173", "Strict Type-Checking Options"),
-        Module_Resolution_Options: diag(6174, ts.DiagnosticCategory.Message, "Module_Resolution_Options_6174", "Module Resolution Options"),
-        Source_Map_Options: diag(6175, ts.DiagnosticCategory.Message, "Source_Map_Options_6175", "Source Map Options"),
-        Additional_Checks: diag(6176, ts.DiagnosticCategory.Message, "Additional_Checks_6176", "Additional Checks"),
-        Experimental_Options: diag(6177, ts.DiagnosticCategory.Message, "Experimental_Options_6177", "Experimental Options"),
-        Advanced_Options: diag(6178, ts.DiagnosticCategory.Message, "Advanced_Options_6178", "Advanced Options"),
         Provide_full_support_for_iterables_in_for_of_spread_and_destructuring_when_targeting_ES5_or_ES3: diag(6179, ts.DiagnosticCategory.Message, "Provide_full_support_for_iterables_in_for_of_spread_and_destructuring_when_targeting_ES5_or_ES3_6179", "Provide full support for iterables in 'for-of', spread, and destructuring when targeting 'ES5' or 'ES3'."),
         Enable_all_strict_type_checking_options: diag(6180, ts.DiagnosticCategory.Message, "Enable_all_strict_type_checking_options_6180", "Enable all strict type-checking options."),
         List_of_language_service_plugins: diag(6181, ts.DiagnosticCategory.Message, "List_of_language_service_plugins_6181", "List of language service plugins."),
         Scoped_package_detected_looking_in_0: diag(6182, ts.DiagnosticCategory.Message, "Scoped_package_detected_looking_in_0_6182", "Scoped package detected, looking in '{0}'"),
-        Reusing_resolution_of_module_0_to_file_1_from_old_program: diag(6183, ts.DiagnosticCategory.Message, "Reusing_resolution_of_module_0_to_file_1_from_old_program_6183", "Reusing resolution of module '{0}' to file '{1}' from old program."),
-        Reusing_module_resolutions_originating_in_0_since_resolutions_are_unchanged_from_old_program: diag(6184, ts.DiagnosticCategory.Message, "Reusing_module_resolutions_originating_in_0_since_resolutions_are_unchanged_from_old_program_6184", "Reusing module resolutions originating in '{0}' since resolutions are unchanged from old program."),
-        Disable_strict_checking_of_generic_signatures_in_function_types: diag(6185, ts.DiagnosticCategory.Message, "Disable_strict_checking_of_generic_signatures_in_function_types_6185", "Disable strict checking of generic signatures in function types."),
+        Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2: diag(6183, ts.DiagnosticCategory.Message, "Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2_6183", "Reusing resolution of module '{0}' from '{1}' of old program, it was successfully resolved to '{2}'."),
+        Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2_with_Package_ID_3: diag(6184, ts.DiagnosticCategory.Message, "Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2_with_Package__6184", "Reusing resolution of module '{0}' from '{1}' of old program, it was successfully resolved to '{2}' with Package ID '{3}'."),
         Enable_strict_checking_of_function_types: diag(6186, ts.DiagnosticCategory.Message, "Enable_strict_checking_of_function_types_6186", "Enable strict checking of function types."),
         Enable_strict_checking_of_property_initialization_in_classes: diag(6187, ts.DiagnosticCategory.Message, "Enable_strict_checking_of_property_initialization_in_classes_6187", "Enable strict checking of property initialization in classes."),
         Numeric_separators_are_not_allowed_here: diag(6188, ts.DiagnosticCategory.Error, "Numeric_separators_are_not_allowed_here_6188", "Numeric separators are not allowed here."),
@@ -9076,7 +9213,6 @@
         Specify_strategy_for_watching_file_Colon_FixedPollingInterval_default_PriorityPollingInterval_DynamicPriorityPolling_FixedChunkSizePolling_UseFsEvents_UseFsEventsOnParentDirectory: diag(6225, ts.DiagnosticCategory.Message, "Specify_strategy_for_watching_file_Colon_FixedPollingInterval_default_PriorityPollingInterval_Dynami_6225", "Specify strategy for watching file: 'FixedPollingInterval' (default), 'PriorityPollingInterval', 'DynamicPriorityPolling', 'FixedChunkSizePolling', 'UseFsEvents', 'UseFsEventsOnParentDirectory'."),
         Specify_strategy_for_watching_directory_on_platforms_that_don_t_support_recursive_watching_natively_Colon_UseFsEvents_default_FixedPollingInterval_DynamicPriorityPolling_FixedChunkSizePolling: diag(6226, ts.DiagnosticCategory.Message, "Specify_strategy_for_watching_directory_on_platforms_that_don_t_support_recursive_watching_natively__6226", "Specify strategy for watching directory on platforms that don't support recursive watching natively: 'UseFsEvents' (default), 'FixedPollingInterval', 'DynamicPriorityPolling', 'FixedChunkSizePolling'."),
         Specify_strategy_for_creating_a_polling_watch_when_it_fails_to_create_using_file_system_events_Colon_FixedInterval_default_PriorityInterval_DynamicPriority_FixedChunkSize: diag(6227, ts.DiagnosticCategory.Message, "Specify_strategy_for_creating_a_polling_watch_when_it_fails_to_create_using_file_system_events_Colon_6227", "Specify strategy for creating a polling watch when it fails to create using file system events: 'FixedInterval' (default), 'PriorityInterval', 'DynamicPriority', 'FixedChunkSize'."),
-        Synchronously_call_callbacks_and_update_the_state_of_directory_watchers_on_platforms_that_don_t_support_recursive_watching_natively: diag(6228, ts.DiagnosticCategory.Message, "Synchronously_call_callbacks_and_update_the_state_of_directory_watchers_on_platforms_that_don_t_supp_6228", "Synchronously call callbacks and update the state of directory watchers on platforms that don't support recursive watching natively."),
         Tag_0_expects_at_least_1_arguments_but_the_JSX_factory_2_provides_at_most_3: diag(6229, ts.DiagnosticCategory.Error, "Tag_0_expects_at_least_1_arguments_but_the_JSX_factory_2_provides_at_most_3_6229", "Tag '{0}' expects at least '{1}' arguments, but the JSX factory '{2}' provides at most '{3}'."),
         Option_0_can_only_be_specified_in_tsconfig_json_file_or_set_to_false_or_null_on_command_line: diag(6230, ts.DiagnosticCategory.Error, "Option_0_can_only_be_specified_in_tsconfig_json_file_or_set_to_false_or_null_on_command_line_6230", "Option '{0}' can only be specified in 'tsconfig.json' file or set to 'false' or 'null' on command line."),
         Could_not_resolve_the_path_0_with_the_extensions_Colon_1: diag(6231, ts.DiagnosticCategory.Error, "Could_not_resolve_the_path_0_with_the_extensions_Colon_1_6231", "Could not resolve the path '{0}' with the extensions: {1}."),
@@ -9091,6 +9227,21 @@
         File_0_does_not_exist_according_to_earlier_cached_lookups: diag(6240, ts.DiagnosticCategory.Message, "File_0_does_not_exist_according_to_earlier_cached_lookups_6240", "File '{0}' does not exist according to earlier cached lookups."),
         Resolution_for_type_reference_directive_0_was_found_in_cache_from_location_1: diag(6241, ts.DiagnosticCategory.Message, "Resolution_for_type_reference_directive_0_was_found_in_cache_from_location_1_6241", "Resolution for type reference directive '{0}' was found in cache from location '{1}'."),
         Resolving_type_reference_directive_0_containing_file_1: diag(6242, ts.DiagnosticCategory.Message, "Resolving_type_reference_directive_0_containing_file_1_6242", "======== Resolving type reference directive '{0}', containing file '{1}'. ========"),
+        Interpret_optional_property_types_as_written_rather_than_adding_undefined: diag(6243, ts.DiagnosticCategory.Message, "Interpret_optional_property_types_as_written_rather_than_adding_undefined_6243", "Interpret optional property types as written, rather than adding 'undefined'."),
+        Modules: diag(6244, ts.DiagnosticCategory.Message, "Modules_6244", "Modules"),
+        File_Management: diag(6245, ts.DiagnosticCategory.Message, "File_Management_6245", "File Management"),
+        Emit: diag(6246, ts.DiagnosticCategory.Message, "Emit_6246", "Emit"),
+        JavaScript_Support: diag(6247, ts.DiagnosticCategory.Message, "JavaScript_Support_6247", "JavaScript Support"),
+        Type_Checking: diag(6248, ts.DiagnosticCategory.Message, "Type_Checking_6248", "Type Checking"),
+        Editor_Support: diag(6249, ts.DiagnosticCategory.Message, "Editor_Support_6249", "Editor Support"),
+        Watch_and_Build_Modes: diag(6250, ts.DiagnosticCategory.Message, "Watch_and_Build_Modes_6250", "Watch and Build Modes"),
+        Compiler_Diagnostics: diag(6251, ts.DiagnosticCategory.Message, "Compiler_Diagnostics_6251", "Compiler Diagnostics"),
+        Interop_Constraints: diag(6252, ts.DiagnosticCategory.Message, "Interop_Constraints_6252", "Interop Constraints"),
+        Backwards_Compatibility: diag(6253, ts.DiagnosticCategory.Message, "Backwards_Compatibility_6253", "Backwards Compatibility"),
+        Language_and_Environment: diag(6254, ts.DiagnosticCategory.Message, "Language_and_Environment_6254", "Language and Environment"),
+        Projects: diag(6255, ts.DiagnosticCategory.Message, "Projects_6255", "Projects"),
+        Output_Formatting: diag(6256, ts.DiagnosticCategory.Message, "Output_Formatting_6256", "Output Formatting"),
+        Completeness: diag(6257, ts.DiagnosticCategory.Message, "Completeness_6257", "Completeness"),
         Projects_to_reference: diag(6300, ts.DiagnosticCategory.Message, "Projects_to_reference_6300", "Projects to reference"),
         Enable_project_compilation: diag(6302, ts.DiagnosticCategory.Message, "Enable_project_compilation_6302", "Enable project compilation"),
         Composite_projects_may_not_disable_declaration_emit: diag(6304, ts.DiagnosticCategory.Error, "Composite_projects_may_not_disable_declaration_emit_6304", "Composite projects may not disable declaration emit."),
@@ -9116,9 +9267,7 @@
         Project_0_can_t_be_built_because_its_dependency_1_has_errors: diag(6363, ts.DiagnosticCategory.Message, "Project_0_can_t_be_built_because_its_dependency_1_has_errors_6363", "Project '{0}' can't be built because its dependency '{1}' has errors"),
         Build_one_or_more_projects_and_their_dependencies_if_out_of_date: diag(6364, ts.DiagnosticCategory.Message, "Build_one_or_more_projects_and_their_dependencies_if_out_of_date_6364", "Build one or more projects and their dependencies, if out of date"),
         Delete_the_outputs_of_all_projects: diag(6365, ts.DiagnosticCategory.Message, "Delete_the_outputs_of_all_projects_6365", "Delete the outputs of all projects"),
-        Enable_verbose_logging: diag(6366, ts.DiagnosticCategory.Message, "Enable_verbose_logging_6366", "Enable verbose logging"),
         Show_what_would_be_built_or_deleted_if_specified_with_clean: diag(6367, ts.DiagnosticCategory.Message, "Show_what_would_be_built_or_deleted_if_specified_with_clean_6367", "Show what would be built (or deleted, if specified with '--clean')"),
-        Build_all_projects_including_those_that_appear_to_be_up_to_date: diag(6368, ts.DiagnosticCategory.Message, "Build_all_projects_including_those_that_appear_to_be_up_to_date_6368", "Build all projects, including those that appear to be up to date"),
         Option_build_must_be_the_first_command_line_argument: diag(6369, ts.DiagnosticCategory.Error, "Option_build_must_be_the_first_command_line_argument_6369", "Option '--build' must be the first command line argument."),
         Options_0_and_1_cannot_be_combined: diag(6370, ts.DiagnosticCategory.Error, "Options_0_and_1_cannot_be_combined_6370", "Options '{0}' and '{1}' cannot be combined."),
         Updating_unchanged_output_timestamps_of_project_0: diag(6371, ts.DiagnosticCategory.Message, "Updating_unchanged_output_timestamps_of_project_0_6371", "Updating unchanged output timestamps of project '{0}'..."),
@@ -9139,15 +9288,167 @@
         Performance_timings_for_diagnostics_or_extendedDiagnostics_are_not_available_in_this_session_A_native_implementation_of_the_Web_Performance_API_could_not_be_found: diag(6386, ts.DiagnosticCategory.Message, "Performance_timings_for_diagnostics_or_extendedDiagnostics_are_not_available_in_this_session_A_nativ_6386", "Performance timings for '--diagnostics' or '--extendedDiagnostics' are not available in this session. A native implementation of the Web Performance API could not be found."),
         The_signature_0_of_1_is_deprecated: diag(6387, ts.DiagnosticCategory.Suggestion, "The_signature_0_of_1_is_deprecated_6387", "The signature '{0}' of '{1}' is deprecated.", /*reportsUnnecessary*/ undefined, /*elidedInCompatabilityPyramid*/ undefined, /*reportsDeprecated*/ true),
         Project_0_is_being_forcibly_rebuilt: diag(6388, ts.DiagnosticCategory.Message, "Project_0_is_being_forcibly_rebuilt_6388", "Project '{0}' is being forcibly rebuilt"),
+        Reusing_resolution_of_module_0_from_1_of_old_program_it_was_not_resolved: diag(6389, ts.DiagnosticCategory.Message, "Reusing_resolution_of_module_0_from_1_of_old_program_it_was_not_resolved_6389", "Reusing resolution of module '{0}' from '{1}' of old program, it was not resolved."),
+        Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved_to_2: diag(6390, ts.DiagnosticCategory.Message, "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved__6390", "Reusing resolution of type reference directive '{0}' from '{1}' of old program, it was successfully resolved to '{2}'."),
+        Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved_to_2_with_Package_ID_3: diag(6391, ts.DiagnosticCategory.Message, "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved__6391", "Reusing resolution of type reference directive '{0}' from '{1}' of old program, it was successfully resolved to '{2}' with Package ID '{3}'."),
+        Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_not_resolved: diag(6392, ts.DiagnosticCategory.Message, "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_not_resolved_6392", "Reusing resolution of type reference directive '{0}' from '{1}' of old program, it was not resolved."),
+        Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_3: diag(6393, ts.DiagnosticCategory.Message, "Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_6393", "Reusing resolution of module '{0}' from '{1}' found in cache from location '{2}', it was successfully resolved to '{3}'."),
+        Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_3_with_Package_ID_4: diag(6394, ts.DiagnosticCategory.Message, "Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_6394", "Reusing resolution of module '{0}' from '{1}' found in cache from location '{2}', it was successfully resolved to '{3}' with Package ID '{4}'."),
+        Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_not_resolved: diag(6395, ts.DiagnosticCategory.Message, "Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_not_resolved_6395", "Reusing resolution of module '{0}' from '{1}' found in cache from location '{2}', it was not resolved."),
+        Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_3: diag(6396, ts.DiagnosticCategory.Message, "Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_succes_6396", "Reusing resolution of type reference directive '{0}' from '{1}' found in cache from location '{2}', it was successfully resolved to '{3}'."),
+        Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_3_with_Package_ID_4: diag(6397, ts.DiagnosticCategory.Message, "Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_succes_6397", "Reusing resolution of type reference directive '{0}' from '{1}' found in cache from location '{2}', it was successfully resolved to '{3}' with Package ID '{4}'."),
+        Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_not_resolved: diag(6398, ts.DiagnosticCategory.Message, "Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_not_re_6398", "Reusing resolution of type reference directive '{0}' from '{1}' found in cache from location '{2}', it was not resolved."),
         The_expected_type_comes_from_property_0_which_is_declared_here_on_type_1: diag(6500, ts.DiagnosticCategory.Message, "The_expected_type_comes_from_property_0_which_is_declared_here_on_type_1_6500", "The expected type comes from property '{0}' which is declared here on type '{1}'"),
         The_expected_type_comes_from_this_index_signature: diag(6501, ts.DiagnosticCategory.Message, "The_expected_type_comes_from_this_index_signature_6501", "The expected type comes from this index signature."),
         The_expected_type_comes_from_the_return_type_of_this_signature: diag(6502, ts.DiagnosticCategory.Message, "The_expected_type_comes_from_the_return_type_of_this_signature_6502", "The expected type comes from the return type of this signature."),
         Print_names_of_files_that_are_part_of_the_compilation_and_then_stop_processing: diag(6503, ts.DiagnosticCategory.Message, "Print_names_of_files_that_are_part_of_the_compilation_and_then_stop_processing_6503", "Print names of files that are part of the compilation and then stop processing."),
         File_0_is_a_JavaScript_file_Did_you_mean_to_enable_the_allowJs_option: diag(6504, ts.DiagnosticCategory.Error, "File_0_is_a_JavaScript_file_Did_you_mean_to_enable_the_allowJs_option_6504", "File '{0}' is a JavaScript file. Did you mean to enable the 'allowJs' option?"),
         Print_names_of_files_and_the_reason_they_are_part_of_the_compilation: diag(6505, ts.DiagnosticCategory.Message, "Print_names_of_files_and_the_reason_they_are_part_of_the_compilation_6505", "Print names of files and the reason they are part of the compilation."),
-        Include_undefined_in_index_signature_results: diag(6800, ts.DiagnosticCategory.Message, "Include_undefined_in_index_signature_results_6800", "Include 'undefined' in index signature results"),
-        Ensure_overriding_members_in_derived_classes_are_marked_with_an_override_modifier: diag(6801, ts.DiagnosticCategory.Message, "Ensure_overriding_members_in_derived_classes_are_marked_with_an_override_modifier_6801", "Ensure overriding members in derived classes are marked with an 'override' modifier."),
-        Require_undeclared_properties_from_index_signatures_to_use_element_accesses: diag(6802, ts.DiagnosticCategory.Message, "Require_undeclared_properties_from_index_signatures_to_use_element_accesses_6802", "Require undeclared properties from index signatures to use element accesses."),
+        Consider_adding_a_declare_modifier_to_this_class: diag(6506, ts.DiagnosticCategory.Message, "Consider_adding_a_declare_modifier_to_this_class_6506", "Consider adding a 'declare' modifier to this class."),
+        Allow_JavaScript_files_to_be_a_part_of_your_program_Use_the_checkJS_option_to_get_errors_from_these_files: diag(6600, ts.DiagnosticCategory.Message, "Allow_JavaScript_files_to_be_a_part_of_your_program_Use_the_checkJS_option_to_get_errors_from_these__6600", "Allow JavaScript files to be a part of your program. Use the `checkJS` option to get errors from these files."),
+        Allow_import_x_from_y_when_a_module_doesn_t_have_a_default_export: diag(6601, ts.DiagnosticCategory.Message, "Allow_import_x_from_y_when_a_module_doesn_t_have_a_default_export_6601", "Allow 'import x from y' when a module doesn't have a default export."),
+        Allow_accessing_UMD_globals_from_modules: diag(6602, ts.DiagnosticCategory.Message, "Allow_accessing_UMD_globals_from_modules_6602", "Allow accessing UMD globals from modules."),
+        Disable_error_reporting_for_unreachable_code: diag(6603, ts.DiagnosticCategory.Message, "Disable_error_reporting_for_unreachable_code_6603", "Disable error reporting for unreachable code."),
+        Disable_error_reporting_for_unused_labels: diag(6604, ts.DiagnosticCategory.Message, "Disable_error_reporting_for_unused_labels_6604", "Disable error reporting for unused labels."),
+        Ensure_use_strict_is_always_emitted: diag(6605, ts.DiagnosticCategory.Message, "Ensure_use_strict_is_always_emitted_6605", "Ensure 'use strict' is always emitted."),
+        Have_recompiles_in_projects_that_use_incremental_and_watch_mode_assume_that_changes_within_a_file_will_only_affect_files_directly_depending_on_it: diag(6606, ts.DiagnosticCategory.Message, "Have_recompiles_in_projects_that_use_incremental_and_watch_mode_assume_that_changes_within_a_file_wi_6606", "Have recompiles in projects that use `incremental` and `watch` mode assume that changes within a file will only affect files directly depending on it."),
+        Specify_the_base_directory_to_resolve_non_relative_module_names: diag(6607, ts.DiagnosticCategory.Message, "Specify_the_base_directory_to_resolve_non_relative_module_names_6607", "Specify the base directory to resolve non-relative module names."),
+        No_longer_supported_In_early_versions_manually_set_the_text_encoding_for_reading_files: diag(6608, ts.DiagnosticCategory.Message, "No_longer_supported_In_early_versions_manually_set_the_text_encoding_for_reading_files_6608", "No longer supported. In early versions, manually set the text encoding for reading files."),
+        Enable_error_reporting_in_type_checked_JavaScript_files: diag(6609, ts.DiagnosticCategory.Message, "Enable_error_reporting_in_type_checked_JavaScript_files_6609", "Enable error reporting in type-checked JavaScript files."),
+        Enable_constraints_that_allow_a_TypeScript_project_to_be_used_with_project_references: diag(6611, ts.DiagnosticCategory.Message, "Enable_constraints_that_allow_a_TypeScript_project_to_be_used_with_project_references_6611", "Enable constraints that allow a TypeScript project to be used with project references."),
+        Generate_d_ts_files_from_TypeScript_and_JavaScript_files_in_your_project: diag(6612, ts.DiagnosticCategory.Message, "Generate_d_ts_files_from_TypeScript_and_JavaScript_files_in_your_project_6612", "Generate .d.ts files from TypeScript and JavaScript files in your project."),
+        Specify_the_output_directory_for_generated_declaration_files: diag(6613, ts.DiagnosticCategory.Message, "Specify_the_output_directory_for_generated_declaration_files_6613", "Specify the output directory for generated declaration files."),
+        Create_sourcemaps_for_d_ts_files: diag(6614, ts.DiagnosticCategory.Message, "Create_sourcemaps_for_d_ts_files_6614", "Create sourcemaps for d.ts files."),
+        Output_compiler_performance_information_after_building: diag(6615, ts.DiagnosticCategory.Message, "Output_compiler_performance_information_after_building_6615", "Output compiler performance information after building."),
+        Disables_inference_for_type_acquisition_by_looking_at_filenames_in_a_project: diag(6616, ts.DiagnosticCategory.Message, "Disables_inference_for_type_acquisition_by_looking_at_filenames_in_a_project_6616", "Disables inference for type acquisition by looking at filenames in a project."),
+        Reduce_the_number_of_projects_loaded_automatically_by_TypeScript: diag(6617, ts.DiagnosticCategory.Message, "Reduce_the_number_of_projects_loaded_automatically_by_TypeScript_6617", "Reduce the number of projects loaded automatically by TypeScript."),
+        Remove_the_20mb_cap_on_total_source_code_size_for_JavaScript_files_in_the_TypeScript_language_server: diag(6618, ts.DiagnosticCategory.Message, "Remove_the_20mb_cap_on_total_source_code_size_for_JavaScript_files_in_the_TypeScript_language_server_6618", "Remove the 20mb cap on total source code size for JavaScript files in the TypeScript language server."),
+        Opt_a_project_out_of_multi_project_reference_checking_when_editing: diag(6619, ts.DiagnosticCategory.Message, "Opt_a_project_out_of_multi_project_reference_checking_when_editing_6619", "Opt a project out of multi-project reference checking when editing."),
+        Disable_preferring_source_files_instead_of_declaration_files_when_referencing_composite_projects: diag(6620, ts.DiagnosticCategory.Message, "Disable_preferring_source_files_instead_of_declaration_files_when_referencing_composite_projects_6620", "Disable preferring source files instead of declaration files when referencing composite projects"),
+        Emit_more_compliant_but_verbose_and_less_performant_JavaScript_for_iteration: diag(6621, ts.DiagnosticCategory.Message, "Emit_more_compliant_but_verbose_and_less_performant_JavaScript_for_iteration_6621", "Emit more compliant, but verbose and less performant JavaScript for iteration."),
+        Only_output_d_ts_files_and_not_JavaScript_files: diag(6623, ts.DiagnosticCategory.Message, "Only_output_d_ts_files_and_not_JavaScript_files_6623", "Only output d.ts files and not JavaScript files."),
+        Emit_design_type_metadata_for_decorated_declarations_in_source_files: diag(6624, ts.DiagnosticCategory.Message, "Emit_design_type_metadata_for_decorated_declarations_in_source_files_6624", "Emit design-type metadata for decorated declarations in source files."),
+        Disable_the_type_acquisition_for_JavaScript_projects: diag(6625, ts.DiagnosticCategory.Message, "Disable_the_type_acquisition_for_JavaScript_projects_6625", "Disable the type acquisition for JavaScript projects"),
+        Emit_additional_JavaScript_to_ease_support_for_importing_CommonJS_modules_This_enables_allowSyntheticDefaultImports_for_type_compatibility: diag(6626, ts.DiagnosticCategory.Message, "Emit_additional_JavaScript_to_ease_support_for_importing_CommonJS_modules_This_enables_allowSyntheti_6626", "Emit additional JavaScript to ease support for importing CommonJS modules. This enables `allowSyntheticDefaultImports` for type compatibility."),
+        Filters_results_from_the_include_option: diag(6627, ts.DiagnosticCategory.Message, "Filters_results_from_the_include_option_6627", "Filters results from the `include` option."),
+        Remove_a_list_of_directories_from_the_watch_process: diag(6628, ts.DiagnosticCategory.Message, "Remove_a_list_of_directories_from_the_watch_process_6628", "Remove a list of directories from the watch process."),
+        Remove_a_list_of_files_from_the_watch_mode_s_processing: diag(6629, ts.DiagnosticCategory.Message, "Remove_a_list_of_files_from_the_watch_mode_s_processing_6629", "Remove a list of files from the watch mode's processing."),
+        Enable_experimental_support_for_TC39_stage_2_draft_decorators: diag(6630, ts.DiagnosticCategory.Message, "Enable_experimental_support_for_TC39_stage_2_draft_decorators_6630", "Enable experimental support for TC39 stage 2 draft decorators."),
+        Print_files_read_during_the_compilation_including_why_it_was_included: diag(6631, ts.DiagnosticCategory.Message, "Print_files_read_during_the_compilation_including_why_it_was_included_6631", "Print files read during the compilation including why it was included."),
+        Output_more_detailed_compiler_performance_information_after_building: diag(6632, ts.DiagnosticCategory.Message, "Output_more_detailed_compiler_performance_information_after_building_6632", "Output more detailed compiler performance information after building."),
+        Specify_one_or_more_path_or_node_module_references_to_base_configuration_files_from_which_settings_are_inherited: diag(6633, ts.DiagnosticCategory.Message, "Specify_one_or_more_path_or_node_module_references_to_base_configuration_files_from_which_settings_a_6633", "Specify one or more path or node module references to base configuration files from which settings are inherited."),
+        Specify_what_approach_the_watcher_should_use_if_the_system_runs_out_of_native_file_watchers: diag(6634, ts.DiagnosticCategory.Message, "Specify_what_approach_the_watcher_should_use_if_the_system_runs_out_of_native_file_watchers_6634", "Specify what approach the watcher should use if the system runs out of native file watchers."),
+        Include_a_list_of_files_This_does_not_support_glob_patterns_as_opposed_to_include: diag(6635, ts.DiagnosticCategory.Message, "Include_a_list_of_files_This_does_not_support_glob_patterns_as_opposed_to_include_6635", "Include a list of files. This does not support glob patterns, as opposed to `include`."),
+        Build_all_projects_including_those_that_appear_to_be_up_to_date: diag(6636, ts.DiagnosticCategory.Message, "Build_all_projects_including_those_that_appear_to_be_up_to_date_6636", "Build all projects, including those that appear to be up to date"),
+        Ensure_that_casing_is_correct_in_imports: diag(6637, ts.DiagnosticCategory.Message, "Ensure_that_casing_is_correct_in_imports_6637", "Ensure that casing is correct in imports."),
+        Emit_a_v8_CPU_profile_of_the_compiler_run_for_debugging: diag(6638, ts.DiagnosticCategory.Message, "Emit_a_v8_CPU_profile_of_the_compiler_run_for_debugging_6638", "Emit a v8 CPU profile of the compiler run for debugging."),
+        Allow_importing_helper_functions_from_tslib_once_per_project_instead_of_including_them_per_file: diag(6639, ts.DiagnosticCategory.Message, "Allow_importing_helper_functions_from_tslib_once_per_project_instead_of_including_them_per_file_6639", "Allow importing helper functions from tslib once per project, instead of including them per-file."),
+        Specify_a_list_of_glob_patterns_that_match_files_to_be_included_in_compilation: diag(6641, ts.DiagnosticCategory.Message, "Specify_a_list_of_glob_patterns_that_match_files_to_be_included_in_compilation_6641", "Specify a list of glob patterns that match files to be included in compilation."),
+        Save_tsbuildinfo_files_to_allow_for_incremental_compilation_of_projects: diag(6642, ts.DiagnosticCategory.Message, "Save_tsbuildinfo_files_to_allow_for_incremental_compilation_of_projects_6642", "Save .tsbuildinfo files to allow for incremental compilation of projects."),
+        Include_sourcemap_files_inside_the_emitted_JavaScript: diag(6643, ts.DiagnosticCategory.Message, "Include_sourcemap_files_inside_the_emitted_JavaScript_6643", "Include sourcemap files inside the emitted JavaScript."),
+        Include_source_code_in_the_sourcemaps_inside_the_emitted_JavaScript: diag(6644, ts.DiagnosticCategory.Message, "Include_source_code_in_the_sourcemaps_inside_the_emitted_JavaScript_6644", "Include source code in the sourcemaps inside the emitted JavaScript."),
+        Ensure_that_each_file_can_be_safely_transpiled_without_relying_on_other_imports: diag(6645, ts.DiagnosticCategory.Message, "Ensure_that_each_file_can_be_safely_transpiled_without_relying_on_other_imports_6645", "Ensure that each file can be safely transpiled without relying on other imports."),
+        Specify_what_JSX_code_is_generated: diag(6646, ts.DiagnosticCategory.Message, "Specify_what_JSX_code_is_generated_6646", "Specify what JSX code is generated."),
+        Specify_the_JSX_factory_function_used_when_targeting_React_JSX_emit_e_g_React_createElement_or_h: diag(6647, ts.DiagnosticCategory.Message, "Specify_the_JSX_factory_function_used_when_targeting_React_JSX_emit_e_g_React_createElement_or_h_6647", "Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'"),
+        Specify_the_JSX_Fragment_reference_used_for_fragments_when_targeting_React_JSX_emit_e_g_React_Fragment_or_Fragment: diag(6648, ts.DiagnosticCategory.Message, "Specify_the_JSX_Fragment_reference_used_for_fragments_when_targeting_React_JSX_emit_e_g_React_Fragme_6648", "Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'."),
+        Specify_module_specifier_used_to_import_the_JSX_factory_functions_when_using_jsx_Colon_react_jsx_Asterisk: diag(6649, ts.DiagnosticCategory.Message, "Specify_module_specifier_used_to_import_the_JSX_factory_functions_when_using_jsx_Colon_react_jsx_Ast_6649", "Specify module specifier used to import the JSX factory functions when using `jsx: react-jsx*`.`"),
+        Make_keyof_only_return_strings_instead_of_string_numbers_or_symbols_Legacy_option: diag(6650, ts.DiagnosticCategory.Message, "Make_keyof_only_return_strings_instead_of_string_numbers_or_symbols_Legacy_option_6650", "Make keyof only return strings instead of string, numbers or symbols. Legacy option."),
+        Specify_a_set_of_bundled_library_declaration_files_that_describe_the_target_runtime_environment: diag(6651, ts.DiagnosticCategory.Message, "Specify_a_set_of_bundled_library_declaration_files_that_describe_the_target_runtime_environment_6651", "Specify a set of bundled library declaration files that describe the target runtime environment."),
+        Print_the_names_of_emitted_files_after_a_compilation: diag(6652, ts.DiagnosticCategory.Message, "Print_the_names_of_emitted_files_after_a_compilation_6652", "Print the names of emitted files after a compilation."),
+        Print_all_of_the_files_read_during_the_compilation: diag(6653, ts.DiagnosticCategory.Message, "Print_all_of_the_files_read_during_the_compilation_6653", "Print all of the files read during the compilation."),
+        Set_the_language_of_the_messaging_from_TypeScript_This_does_not_affect_emit: diag(6654, ts.DiagnosticCategory.Message, "Set_the_language_of_the_messaging_from_TypeScript_This_does_not_affect_emit_6654", "Set the language of the messaging from TypeScript. This does not affect emit."),
+        Specify_the_maximum_folder_depth_used_for_checking_JavaScript_files_from_node_modules_Only_applicable_with_allowJs: diag(6656, ts.DiagnosticCategory.Message, "Specify_the_maximum_folder_depth_used_for_checking_JavaScript_files_from_node_modules_Only_applicabl_6656", "Specify the maximum folder depth used for checking JavaScript files from `node_modules`. Only applicable with `allowJs`."),
+        Specify_what_module_code_is_generated: diag(6657, ts.DiagnosticCategory.Message, "Specify_what_module_code_is_generated_6657", "Specify what module code is generated."),
+        Specify_how_TypeScript_looks_up_a_file_from_a_given_module_specifier: diag(6658, ts.DiagnosticCategory.Message, "Specify_how_TypeScript_looks_up_a_file_from_a_given_module_specifier_6658", "Specify how TypeScript looks up a file from a given module specifier."),
+        Set_the_newline_character_for_emitting_files: diag(6659, ts.DiagnosticCategory.Message, "Set_the_newline_character_for_emitting_files_6659", "Set the newline character for emitting files."),
+        Disable_emitting_files_from_a_compilation: diag(6660, ts.DiagnosticCategory.Message, "Disable_emitting_files_from_a_compilation_6660", "Disable emitting files from a compilation."),
+        Disable_generating_custom_helper_functions_like_extends_in_compiled_output: diag(6661, ts.DiagnosticCategory.Message, "Disable_generating_custom_helper_functions_like_extends_in_compiled_output_6661", "Disable generating custom helper functions like `__extends` in compiled output."),
+        Disable_emitting_files_if_any_type_checking_errors_are_reported: diag(6662, ts.DiagnosticCategory.Message, "Disable_emitting_files_if_any_type_checking_errors_are_reported_6662", "Disable emitting files if any type checking errors are reported."),
+        Disable_truncating_types_in_error_messages: diag(6663, ts.DiagnosticCategory.Message, "Disable_truncating_types_in_error_messages_6663", "Disable truncating types in error messages."),
+        Enable_error_reporting_for_fallthrough_cases_in_switch_statements: diag(6664, ts.DiagnosticCategory.Message, "Enable_error_reporting_for_fallthrough_cases_in_switch_statements_6664", "Enable error reporting for fallthrough cases in switch statements."),
+        Enable_error_reporting_for_expressions_and_declarations_with_an_implied_any_type: diag(6665, ts.DiagnosticCategory.Message, "Enable_error_reporting_for_expressions_and_declarations_with_an_implied_any_type_6665", "Enable error reporting for expressions and declarations with an implied `any` type.."),
+        Ensure_overriding_members_in_derived_classes_are_marked_with_an_override_modifier: diag(6666, ts.DiagnosticCategory.Message, "Ensure_overriding_members_in_derived_classes_are_marked_with_an_override_modifier_6666", "Ensure overriding members in derived classes are marked with an override modifier."),
+        Enable_error_reporting_for_codepaths_that_do_not_explicitly_return_in_a_function: diag(6667, ts.DiagnosticCategory.Message, "Enable_error_reporting_for_codepaths_that_do_not_explicitly_return_in_a_function_6667", "Enable error reporting for codepaths that do not explicitly return in a function."),
+        Enable_error_reporting_when_this_is_given_the_type_any: diag(6668, ts.DiagnosticCategory.Message, "Enable_error_reporting_when_this_is_given_the_type_any_6668", "Enable error reporting when `this` is given the type `any`."),
+        Disable_adding_use_strict_directives_in_emitted_JavaScript_files: diag(6669, ts.DiagnosticCategory.Message, "Disable_adding_use_strict_directives_in_emitted_JavaScript_files_6669", "Disable adding 'use strict' directives in emitted JavaScript files."),
+        Disable_including_any_library_files_including_the_default_lib_d_ts: diag(6670, ts.DiagnosticCategory.Message, "Disable_including_any_library_files_including_the_default_lib_d_ts_6670", "Disable including any library files, including the default lib.d.ts."),
+        Enforces_using_indexed_accessors_for_keys_declared_using_an_indexed_type: diag(6671, ts.DiagnosticCategory.Message, "Enforces_using_indexed_accessors_for_keys_declared_using_an_indexed_type_6671", "Enforces using indexed accessors for keys declared using an indexed type"),
+        Disallow_import_s_require_s_or_reference_s_from_expanding_the_number_of_files_TypeScript_should_add_to_a_project: diag(6672, ts.DiagnosticCategory.Message, "Disallow_import_s_require_s_or_reference_s_from_expanding_the_number_of_files_TypeScript_should_add__6672", "Disallow `import`s, `require`s or `<reference>`s from expanding the number of files TypeScript should add to a project."),
+        Disable_strict_checking_of_generic_signatures_in_function_types: diag(6673, ts.DiagnosticCategory.Message, "Disable_strict_checking_of_generic_signatures_in_function_types_6673", "Disable strict checking of generic signatures in function types."),
+        Add_undefined_to_a_type_when_accessed_using_an_index: diag(6674, ts.DiagnosticCategory.Message, "Add_undefined_to_a_type_when_accessed_using_an_index_6674", "Add `undefined` to a type when accessed using an index."),
+        Enable_error_reporting_when_a_local_variables_aren_t_read: diag(6675, ts.DiagnosticCategory.Message, "Enable_error_reporting_when_a_local_variables_aren_t_read_6675", "Enable error reporting when a local variables aren't read."),
+        Raise_an_error_when_a_function_parameter_isn_t_read: diag(6676, ts.DiagnosticCategory.Message, "Raise_an_error_when_a_function_parameter_isn_t_read_6676", "Raise an error when a function parameter isn't read"),
+        Deprecated_setting_Use_outFile_instead: diag(6677, ts.DiagnosticCategory.Message, "Deprecated_setting_Use_outFile_instead_6677", "Deprecated setting. Use `outFile` instead."),
+        Specify_an_output_folder_for_all_emitted_files: diag(6678, ts.DiagnosticCategory.Message, "Specify_an_output_folder_for_all_emitted_files_6678", "Specify an output folder for all emitted files."),
+        Specify_a_file_that_bundles_all_outputs_into_one_JavaScript_file_If_declaration_is_true_also_designates_a_file_that_bundles_all_d_ts_output: diag(6679, ts.DiagnosticCategory.Message, "Specify_a_file_that_bundles_all_outputs_into_one_JavaScript_file_If_declaration_is_true_also_designa_6679", "Specify a file that bundles all outputs into one JavaScript file. If `declaration` is true, also designates a file that bundles all .d.ts output."),
+        Specify_a_set_of_entries_that_re_map_imports_to_additional_lookup_locations: diag(6680, ts.DiagnosticCategory.Message, "Specify_a_set_of_entries_that_re_map_imports_to_additional_lookup_locations_6680", "Specify a set of entries that re-map imports to additional lookup locations."),
+        Specify_a_list_of_language_service_plugins_to_include: diag(6681, ts.DiagnosticCategory.Message, "Specify_a_list_of_language_service_plugins_to_include_6681", "Specify a list of language service plugins to include."),
+        Disable_erasing_const_enum_declarations_in_generated_code: diag(6682, ts.DiagnosticCategory.Message, "Disable_erasing_const_enum_declarations_in_generated_code_6682", "Disable erasing `const enum` declarations in generated code."),
+        Disable_resolving_symlinks_to_their_realpath_This_correlates_to_the_same_flag_in_node: diag(6683, ts.DiagnosticCategory.Message, "Disable_resolving_symlinks_to_their_realpath_This_correlates_to_the_same_flag_in_node_6683", "Disable resolving symlinks to their realpath. This correlates to the same flag in node."),
+        Disable_wiping_the_console_in_watch_mode: diag(6684, ts.DiagnosticCategory.Message, "Disable_wiping_the_console_in_watch_mode_6684", "Disable wiping the console in watch mode"),
+        Enable_color_and_formatting_in_TypeScript_s_output_to_make_compiler_errors_easier_to_read: diag(6685, ts.DiagnosticCategory.Message, "Enable_color_and_formatting_in_TypeScript_s_output_to_make_compiler_errors_easier_to_read_6685", "Enable color and formatting in TypeScript's output to make compiler errors easier to read"),
+        Specify_the_object_invoked_for_createElement_This_only_applies_when_targeting_react_JSX_emit: diag(6686, ts.DiagnosticCategory.Message, "Specify_the_object_invoked_for_createElement_This_only_applies_when_targeting_react_JSX_emit_6686", "Specify the object invoked for `createElement`. This only applies when targeting `react` JSX emit."),
+        Specify_an_array_of_objects_that_specify_paths_for_projects_Used_in_project_references: diag(6687, ts.DiagnosticCategory.Message, "Specify_an_array_of_objects_that_specify_paths_for_projects_Used_in_project_references_6687", "Specify an array of objects that specify paths for projects. Used in project references."),
+        Disable_emitting_comments: diag(6688, ts.DiagnosticCategory.Message, "Disable_emitting_comments_6688", "Disable emitting comments."),
+        Enable_importing_json_files: diag(6689, ts.DiagnosticCategory.Message, "Enable_importing_json_files_6689", "Enable importing .json files"),
+        Specify_the_root_folder_within_your_source_files: diag(6690, ts.DiagnosticCategory.Message, "Specify_the_root_folder_within_your_source_files_6690", "Specify the root folder within your source files."),
+        Allow_multiple_folders_to_be_treated_as_one_when_resolving_modules: diag(6691, ts.DiagnosticCategory.Message, "Allow_multiple_folders_to_be_treated_as_one_when_resolving_modules_6691", "Allow multiple folders to be treated as one when resolving modules."),
+        Skip_type_checking_d_ts_files_that_are_included_with_TypeScript: diag(6692, ts.DiagnosticCategory.Message, "Skip_type_checking_d_ts_files_that_are_included_with_TypeScript_6692", "Skip type checking .d.ts files that are included with TypeScript."),
+        Skip_type_checking_all_d_ts_files: diag(6693, ts.DiagnosticCategory.Message, "Skip_type_checking_all_d_ts_files_6693", "Skip type checking all .d.ts files."),
+        Create_source_map_files_for_emitted_JavaScript_files: diag(6694, ts.DiagnosticCategory.Message, "Create_source_map_files_for_emitted_JavaScript_files_6694", "Create source map files for emitted JavaScript files."),
+        Specify_the_root_path_for_debuggers_to_find_the_reference_source_code: diag(6695, ts.DiagnosticCategory.Message, "Specify_the_root_path_for_debuggers_to_find_the_reference_source_code_6695", "Specify the root path for debuggers to find the reference source code."),
+        Check_that_the_arguments_for_bind_call_and_apply_methods_match_the_original_function: diag(6697, ts.DiagnosticCategory.Message, "Check_that_the_arguments_for_bind_call_and_apply_methods_match_the_original_function_6697", "Check that the arguments for `bind`, `call`, and `apply` methods match the original function."),
+        When_assigning_functions_check_to_ensure_parameters_and_the_return_values_are_subtype_compatible: diag(6698, ts.DiagnosticCategory.Message, "When_assigning_functions_check_to_ensure_parameters_and_the_return_values_are_subtype_compatible_6698", "When assigning functions, check to ensure parameters and the return values are subtype-compatible."),
+        When_type_checking_take_into_account_null_and_undefined: diag(6699, ts.DiagnosticCategory.Message, "When_type_checking_take_into_account_null_and_undefined_6699", "When type checking, take into account `null` and `undefined`."),
+        Check_for_class_properties_that_are_declared_but_not_set_in_the_constructor: diag(6700, ts.DiagnosticCategory.Message, "Check_for_class_properties_that_are_declared_but_not_set_in_the_constructor_6700", "Check for class properties that are declared but not set in the constructor."),
+        Disable_emitting_declarations_that_have_internal_in_their_JSDoc_comments: diag(6701, ts.DiagnosticCategory.Message, "Disable_emitting_declarations_that_have_internal_in_their_JSDoc_comments_6701", "Disable emitting declarations that have `@internal` in their JSDoc comments."),
+        Disable_reporting_of_excess_property_errors_during_the_creation_of_object_literals: diag(6702, ts.DiagnosticCategory.Message, "Disable_reporting_of_excess_property_errors_during_the_creation_of_object_literals_6702", "Disable reporting of excess property errors during the creation of object literals."),
+        Suppress_noImplicitAny_errors_when_indexing_objects_that_lack_index_signatures: diag(6703, ts.DiagnosticCategory.Message, "Suppress_noImplicitAny_errors_when_indexing_objects_that_lack_index_signatures_6703", "Suppress `noImplicitAny` errors when indexing objects that lack index signatures."),
+        Synchronously_call_callbacks_and_update_the_state_of_directory_watchers_on_platforms_that_don_t_support_recursive_watching_natively: diag(6704, ts.DiagnosticCategory.Message, "Synchronously_call_callbacks_and_update_the_state_of_directory_watchers_on_platforms_that_don_t_supp_6704", "Synchronously call callbacks and update the state of directory watchers on platforms that don`t support recursive watching natively."),
+        Set_the_JavaScript_language_version_for_emitted_JavaScript_and_include_compatible_library_declarations: diag(6705, ts.DiagnosticCategory.Message, "Set_the_JavaScript_language_version_for_emitted_JavaScript_and_include_compatible_library_declaratio_6705", "Set the JavaScript language version for emitted JavaScript and include compatible library declarations."),
+        Log_paths_used_during_the_moduleResolution_process: diag(6706, ts.DiagnosticCategory.Message, "Log_paths_used_during_the_moduleResolution_process_6706", "Log paths used during the `moduleResolution` process."),
+        Specify_the_folder_for_tsbuildinfo_incremental_compilation_files: diag(6707, ts.DiagnosticCategory.Message, "Specify_the_folder_for_tsbuildinfo_incremental_compilation_files_6707", "Specify the folder for .tsbuildinfo incremental compilation files."),
+        Specify_options_for_automatic_acquisition_of_declaration_files: diag(6709, ts.DiagnosticCategory.Message, "Specify_options_for_automatic_acquisition_of_declaration_files_6709", "Specify options for automatic acquisition of declaration files."),
+        Specify_multiple_folders_that_act_like_Slashnode_modules_Slash_types: diag(6710, ts.DiagnosticCategory.Message, "Specify_multiple_folders_that_act_like_Slashnode_modules_Slash_types_6710", "Specify multiple folders that act like `./node_modules/@types`."),
+        Specify_type_package_names_to_be_included_without_being_referenced_in_a_source_file: diag(6711, ts.DiagnosticCategory.Message, "Specify_type_package_names_to_be_included_without_being_referenced_in_a_source_file_6711", "Specify type package names to be included without being referenced in a source file."),
+        Emit_ECMAScript_standard_compliant_class_fields: diag(6712, ts.DiagnosticCategory.Message, "Emit_ECMAScript_standard_compliant_class_fields_6712", "Emit ECMAScript-standard-compliant class fields."),
+        Enable_verbose_logging: diag(6713, ts.DiagnosticCategory.Message, "Enable_verbose_logging_6713", "Enable verbose logging"),
+        Specify_how_directories_are_watched_on_systems_that_lack_recursive_file_watching_functionality: diag(6714, ts.DiagnosticCategory.Message, "Specify_how_directories_are_watched_on_systems_that_lack_recursive_file_watching_functionality_6714", "Specify how directories are watched on systems that lack recursive file-watching functionality."),
+        Specify_how_the_TypeScript_watch_mode_works: diag(6715, ts.DiagnosticCategory.Message, "Specify_how_the_TypeScript_watch_mode_works_6715", "Specify how the TypeScript watch mode works."),
+        Include_undefined_in_index_signature_results: diag(6716, ts.DiagnosticCategory.Message, "Include_undefined_in_index_signature_results_6716", "Include 'undefined' in index signature results"),
+        Require_undeclared_properties_from_index_signatures_to_use_element_accesses: diag(6717, ts.DiagnosticCategory.Message, "Require_undeclared_properties_from_index_signatures_to_use_element_accesses_6717", "Require undeclared properties from index signatures to use element accesses."),
+        Specify_emit_Slashchecking_behavior_for_imports_that_are_only_used_for_types: diag(6718, ts.DiagnosticCategory.Message, "Specify_emit_Slashchecking_behavior_for_imports_that_are_only_used_for_types_6718", "Specify emit/checking behavior for imports that are only used for types"),
+        Type_catch_clause_variables_as_unknown_instead_of_any: diag(6803, ts.DiagnosticCategory.Message, "Type_catch_clause_variables_as_unknown_instead_of_any_6803", "Type catch clause variables as 'unknown' instead of 'any'."),
+        one_of_Colon: diag(6900, ts.DiagnosticCategory.Message, "one_of_Colon_6900", "one of:"),
+        one_or_more_Colon: diag(6901, ts.DiagnosticCategory.Message, "one_or_more_Colon_6901", "one or more:"),
+        type_Colon: diag(6902, ts.DiagnosticCategory.Message, "type_Colon_6902", "type:"),
+        default_Colon: diag(6903, ts.DiagnosticCategory.Message, "default_Colon_6903", "default:"),
+        module_system_or_esModuleInterop: diag(6904, ts.DiagnosticCategory.Message, "module_system_or_esModuleInterop_6904", "module === \"system\" or esModuleInterop"),
+        false_unless_strict_is_set: diag(6905, ts.DiagnosticCategory.Message, "false_unless_strict_is_set_6905", "`false`, unless `strict` is set"),
+        false_unless_composite_is_set: diag(6906, ts.DiagnosticCategory.Message, "false_unless_composite_is_set_6906", "`false`, unless `composite` is set"),
+        node_modules_bower_components_jspm_packages_plus_the_value_of_outDir_if_one_is_specified: diag(6907, ts.DiagnosticCategory.Message, "node_modules_bower_components_jspm_packages_plus_the_value_of_outDir_if_one_is_specified_6907", "`[\"node_modules\", \"bower_components\", \"jspm_packages\"]`, plus the value of `outDir` if one is specified."),
+        if_files_is_specified_otherwise_Asterisk_Asterisk_Slash_Asterisk: diag(6908, ts.DiagnosticCategory.Message, "if_files_is_specified_otherwise_Asterisk_Asterisk_Slash_Asterisk_6908", "`[]` if `files` is specified, otherwise `[\"**/*\"]`"),
+        true_if_composite_false_otherwise: diag(6909, ts.DiagnosticCategory.Message, "true_if_composite_false_otherwise_6909", "`true` if `composite`, `false` otherwise"),
+        module_AMD_or_UMD_or_System_or_ES6_then_Classic_Otherwise_Node: diag(69010, ts.DiagnosticCategory.Message, "module_AMD_or_UMD_or_System_or_ES6_then_Classic_Otherwise_Node_69010", "module === `AMD` or `UMD` or `System` or `ES6`, then `Classic`, Otherwise `Node`"),
+        Computed_from_the_list_of_input_files: diag(6911, ts.DiagnosticCategory.Message, "Computed_from_the_list_of_input_files_6911", "Computed from the list of input files"),
+        Platform_specific: diag(6912, ts.DiagnosticCategory.Message, "Platform_specific_6912", "Platform specific"),
+        You_can_learn_about_all_of_the_compiler_options_at_0: diag(6913, ts.DiagnosticCategory.Message, "You_can_learn_about_all_of_the_compiler_options_at_0_6913", "You can learn about all of the compiler options at {0}"),
+        Including_watch_w_will_start_watching_the_current_project_for_the_file_changes_Once_set_you_can_config_watch_mode_with_Colon: diag(6914, ts.DiagnosticCategory.Message, "Including_watch_w_will_start_watching_the_current_project_for_the_file_changes_Once_set_you_can_conf_6914", "Including --watch, -w will start watching the current project for the file changes. Once set, you can config watch mode with:"),
+        Using_build_b_will_make_tsc_behave_more_like_a_build_orchestrator_than_a_compiler_This_is_used_to_trigger_building_composite_projects_which_you_can_learn_more_about_at_0: diag(6915, ts.DiagnosticCategory.Message, "Using_build_b_will_make_tsc_behave_more_like_a_build_orchestrator_than_a_compiler_This_is_used_to_tr_6915", "Using --build, -b will make tsc behave more like a build orchestrator than a compiler. This is used to trigger building composite projects which you can learn more about at {0}"),
+        COMMON_COMMANDS: diag(6916, ts.DiagnosticCategory.Message, "COMMON_COMMANDS_6916", "COMMON COMMANDS"),
+        ALL_COMPILER_OPTIONS: diag(6917, ts.DiagnosticCategory.Message, "ALL_COMPILER_OPTIONS_6917", "ALL COMPILER OPTIONS"),
+        WATCH_OPTIONS: diag(6918, ts.DiagnosticCategory.Message, "WATCH_OPTIONS_6918", "WATCH OPTIONS"),
+        BUILD_OPTIONS: diag(6919, ts.DiagnosticCategory.Message, "BUILD_OPTIONS_6919", "BUILD OPTIONS"),
+        COMMON_COMPILER_OPTIONS: diag(6920, ts.DiagnosticCategory.Message, "COMMON_COMPILER_OPTIONS_6920", "COMMON COMPILER OPTIONS"),
+        COMMAND_LINE_FLAGS: diag(6921, ts.DiagnosticCategory.Message, "COMMAND_LINE_FLAGS_6921", "COMMAND LINE FLAGS"),
+        tsc_Colon_The_TypeScript_Compiler: diag(6922, ts.DiagnosticCategory.Message, "tsc_Colon_The_TypeScript_Compiler_6922", "tsc: The TypeScript Compiler"),
+        Compiles_the_current_project_tsconfig_json_in_the_working_directory: diag(6923, ts.DiagnosticCategory.Message, "Compiles_the_current_project_tsconfig_json_in_the_working_directory_6923", "Compiles the current project (tsconfig.json in the working directory.)"),
+        Ignoring_tsconfig_json_compiles_the_specified_files_with_default_compiler_options: diag(6924, ts.DiagnosticCategory.Message, "Ignoring_tsconfig_json_compiles_the_specified_files_with_default_compiler_options_6924", "Ignoring tsconfig.json, compiles the specified files with default compiler options."),
+        Build_a_composite_project_in_the_working_directory: diag(6925, ts.DiagnosticCategory.Message, "Build_a_composite_project_in_the_working_directory_6925", "Build a composite project in the working directory."),
+        Creates_a_tsconfig_json_with_the_recommended_settings_in_the_working_directory: diag(6926, ts.DiagnosticCategory.Message, "Creates_a_tsconfig_json_with_the_recommended_settings_in_the_working_directory_6926", "Creates a tsconfig.json with the recommended settings in the working directory."),
+        Compiles_the_TypeScript_project_located_at_the_specified_path: diag(6927, ts.DiagnosticCategory.Message, "Compiles_the_TypeScript_project_located_at_the_specified_path_6927", "Compiles the TypeScript project located at the specified path."),
+        An_expanded_version_of_this_information_showing_all_possible_compiler_options: diag(6928, ts.DiagnosticCategory.Message, "An_expanded_version_of_this_information_showing_all_possible_compiler_options_6928", "An expanded version of this information, showing all possible compiler options"),
+        Compiles_the_current_project_with_additional_settings: diag(6929, ts.DiagnosticCategory.Message, "Compiles_the_current_project_with_additional_settings_6929", "Compiles the current project, with additional settings."),
         Variable_0_implicitly_has_an_1_type: diag(7005, ts.DiagnosticCategory.Error, "Variable_0_implicitly_has_an_1_type_7005", "Variable '{0}' implicitly has an '{1}' type."),
         Parameter_0_implicitly_has_an_1_type: diag(7006, ts.DiagnosticCategory.Error, "Parameter_0_implicitly_has_an_1_type_7006", "Parameter '{0}' implicitly has an '{1}' type."),
         Member_0_implicitly_has_an_1_type: diag(7008, ts.DiagnosticCategory.Error, "Member_0_implicitly_has_an_1_type_7008", "Member '{0}' implicitly has an '{1}' type."),
@@ -9381,7 +9682,6 @@
         Add_names_to_all_parameters_without_names: diag(95073, ts.DiagnosticCategory.Message, "Add_names_to_all_parameters_without_names_95073", "Add names to all parameters without names"),
         Enable_the_experimentalDecorators_option_in_your_configuration_file: diag(95074, ts.DiagnosticCategory.Message, "Enable_the_experimentalDecorators_option_in_your_configuration_file_95074", "Enable the 'experimentalDecorators' option in your configuration file"),
         Convert_parameters_to_destructured_object: diag(95075, ts.DiagnosticCategory.Message, "Convert_parameters_to_destructured_object_95075", "Convert parameters to destructured object"),
-        Allow_accessing_UMD_globals_from_modules: diag(95076, ts.DiagnosticCategory.Message, "Allow_accessing_UMD_globals_from_modules_95076", "Allow accessing UMD globals from modules."),
         Extract_type: diag(95077, ts.DiagnosticCategory.Message, "Extract_type_95077", "Extract type"),
         Extract_to_type_alias: diag(95078, ts.DiagnosticCategory.Message, "Extract_to_type_alias_95078", "Extract to type alias"),
         Extract_to_typedef: diag(95079, ts.DiagnosticCategory.Message, "Extract_to_typedef_95079", "Extract to typedef"),
@@ -9469,6 +9769,11 @@
         Remove_override_modifier: diag(95161, ts.DiagnosticCategory.Message, "Remove_override_modifier_95161", "Remove 'override' modifier"),
         Add_all_missing_override_modifiers: diag(95162, ts.DiagnosticCategory.Message, "Add_all_missing_override_modifiers_95162", "Add all missing 'override' modifiers"),
         Remove_all_unnecessary_override_modifiers: diag(95163, ts.DiagnosticCategory.Message, "Remove_all_unnecessary_override_modifiers_95163", "Remove all unnecessary 'override' modifiers"),
+        Can_only_convert_named_export: diag(95164, ts.DiagnosticCategory.Message, "Can_only_convert_named_export_95164", "Can only convert named export"),
+        Add_missing_properties: diag(95165, ts.DiagnosticCategory.Message, "Add_missing_properties_95165", "Add missing properties"),
+        Add_all_missing_properties: diag(95166, ts.DiagnosticCategory.Message, "Add_all_missing_properties_95166", "Add all missing properties"),
+        Add_missing_attributes: diag(95167, ts.DiagnosticCategory.Message, "Add_missing_attributes_95167", "Add missing attributes"),
+        Add_all_missing_attributes: diag(95168, ts.DiagnosticCategory.Message, "Add_all_missing_attributes_95168", "Add all missing attributes"),
         No_value_exists_in_scope_for_the_shorthand_property_0_Either_declare_one_or_provide_an_initializer: diag(18004, ts.DiagnosticCategory.Error, "No_value_exists_in_scope_for_the_shorthand_property_0_Either_declare_one_or_provide_an_initializer_18004", "No value exists in scope for the shorthand property '{0}'. Either declare one or provide an initializer."),
         Classes_may_not_have_a_field_named_constructor: diag(18006, ts.DiagnosticCategory.Error, "Classes_may_not_have_a_field_named_constructor_18006", "Classes may not have a field named 'constructor'."),
         JSX_expressions_may_not_use_the_comma_operator_Did_you_mean_to_write_an_array: diag(18007, ts.DiagnosticCategory.Error, "JSX_expressions_may_not_use_the_comma_operator_Did_you_mean_to_write_an_array_18007", "JSX expressions may not use the comma operator. Did you mean to write an array?"),
@@ -9495,6 +9800,10 @@
         Specify_the_JSX_fragment_factory_function_to_use_when_targeting_react_JSX_emit_with_jsxFactory_compiler_option_is_specified_e_g_Fragment: diag(18034, ts.DiagnosticCategory.Message, "Specify_the_JSX_fragment_factory_function_to_use_when_targeting_react_JSX_emit_with_jsxFactory_compi_18034", "Specify the JSX fragment factory function to use when targeting 'react' JSX emit with 'jsxFactory' compiler option is specified, e.g. 'Fragment'."),
         Invalid_value_for_jsxFragmentFactory_0_is_not_a_valid_identifier_or_qualified_name: diag(18035, ts.DiagnosticCategory.Error, "Invalid_value_for_jsxFragmentFactory_0_is_not_a_valid_identifier_or_qualified_name_18035", "Invalid value for 'jsxFragmentFactory'. '{0}' is not a valid identifier or qualified-name."),
         Class_decorators_can_t_be_used_with_static_private_identifier_Consider_removing_the_experimental_decorator: diag(18036, ts.DiagnosticCategory.Error, "Class_decorators_can_t_be_used_with_static_private_identifier_Consider_removing_the_experimental_dec_18036", "Class decorators can't be used with static private identifier. Consider removing the experimental decorator."),
+        Await_expression_cannot_be_used_inside_a_class_static_block: diag(18037, ts.DiagnosticCategory.Error, "Await_expression_cannot_be_used_inside_a_class_static_block_18037", "Await expression cannot be used inside a class static block."),
+        For_await_loops_cannot_be_used_inside_a_class_static_block: diag(18038, ts.DiagnosticCategory.Error, "For_await_loops_cannot_be_used_inside_a_class_static_block_18038", "'For await' loops cannot be used inside a class static block."),
+        Invalid_use_of_0_It_cannot_be_used_inside_a_class_static_block: diag(18039, ts.DiagnosticCategory.Error, "Invalid_use_of_0_It_cannot_be_used_inside_a_class_static_block_18039", "Invalid use of '{0}'. It cannot be used inside a class static block."),
+        A_return_statement_cannot_be_used_inside_a_class_static_block: diag(18041, ts.DiagnosticCategory.Error, "A_return_statement_cannot_be_used_inside_a_class_static_block_18041", "A 'return' statement cannot be used inside a class static block."),
     };
 })(ts || (ts = {}));
 var ts;
@@ -9502,7 +9811,7 @@
     var _a;
     /* @internal */
     function tokenIsIdentifierOrKeyword(token) {
-        return token >= 78 /* Identifier */;
+        return token >= 79 /* Identifier */;
     }
     ts.tokenIsIdentifierOrKeyword = tokenIsIdentifierOrKeyword;
     /* @internal */
@@ -9510,89 +9819,90 @@
         return token === 31 /* GreaterThanToken */ || tokenIsIdentifierOrKeyword(token);
     }
     ts.tokenIsIdentifierOrKeywordOrGreaterThan = tokenIsIdentifierOrKeywordOrGreaterThan;
-    var textToKeywordObj = (_a = {
-            abstract: 125 /* AbstractKeyword */,
-            any: 128 /* AnyKeyword */,
-            as: 126 /* AsKeyword */,
-            asserts: 127 /* AssertsKeyword */,
-            bigint: 155 /* BigIntKeyword */,
-            boolean: 131 /* BooleanKeyword */,
-            break: 80 /* BreakKeyword */,
-            case: 81 /* CaseKeyword */,
-            catch: 82 /* CatchKeyword */,
-            class: 83 /* ClassKeyword */,
-            continue: 85 /* ContinueKeyword */,
-            const: 84 /* ConstKeyword */
+    /** @internal */
+    ts.textToKeywordObj = (_a = {
+            abstract: 126 /* AbstractKeyword */,
+            any: 129 /* AnyKeyword */,
+            as: 127 /* AsKeyword */,
+            asserts: 128 /* AssertsKeyword */,
+            bigint: 156 /* BigIntKeyword */,
+            boolean: 132 /* BooleanKeyword */,
+            break: 81 /* BreakKeyword */,
+            case: 82 /* CaseKeyword */,
+            catch: 83 /* CatchKeyword */,
+            class: 84 /* ClassKeyword */,
+            continue: 86 /* ContinueKeyword */,
+            const: 85 /* ConstKeyword */
         },
-        _a["" + "constructor"] = 132 /* ConstructorKeyword */,
-        _a.debugger = 86 /* DebuggerKeyword */,
-        _a.declare = 133 /* DeclareKeyword */,
-        _a.default = 87 /* DefaultKeyword */,
-        _a.delete = 88 /* DeleteKeyword */,
-        _a.do = 89 /* DoKeyword */,
-        _a.else = 90 /* ElseKeyword */,
-        _a.enum = 91 /* EnumKeyword */,
-        _a.export = 92 /* ExportKeyword */,
-        _a.extends = 93 /* ExtendsKeyword */,
-        _a.false = 94 /* FalseKeyword */,
-        _a.finally = 95 /* FinallyKeyword */,
-        _a.for = 96 /* ForKeyword */,
-        _a.from = 153 /* FromKeyword */,
-        _a.function = 97 /* FunctionKeyword */,
-        _a.get = 134 /* GetKeyword */,
-        _a.if = 98 /* IfKeyword */,
-        _a.implements = 116 /* ImplementsKeyword */,
-        _a.import = 99 /* ImportKeyword */,
-        _a.in = 100 /* InKeyword */,
-        _a.infer = 135 /* InferKeyword */,
-        _a.instanceof = 101 /* InstanceOfKeyword */,
-        _a.interface = 117 /* InterfaceKeyword */,
-        _a.intrinsic = 136 /* IntrinsicKeyword */,
-        _a.is = 137 /* IsKeyword */,
-        _a.keyof = 138 /* KeyOfKeyword */,
-        _a.let = 118 /* LetKeyword */,
-        _a.module = 139 /* ModuleKeyword */,
-        _a.namespace = 140 /* NamespaceKeyword */,
-        _a.never = 141 /* NeverKeyword */,
-        _a.new = 102 /* NewKeyword */,
-        _a.null = 103 /* NullKeyword */,
-        _a.number = 144 /* NumberKeyword */,
-        _a.object = 145 /* ObjectKeyword */,
-        _a.package = 119 /* PackageKeyword */,
-        _a.private = 120 /* PrivateKeyword */,
-        _a.protected = 121 /* ProtectedKeyword */,
-        _a.public = 122 /* PublicKeyword */,
-        _a.override = 156 /* OverrideKeyword */,
-        _a.readonly = 142 /* ReadonlyKeyword */,
-        _a.require = 143 /* RequireKeyword */,
-        _a.global = 154 /* GlobalKeyword */,
-        _a.return = 104 /* ReturnKeyword */,
-        _a.set = 146 /* SetKeyword */,
-        _a.static = 123 /* StaticKeyword */,
-        _a.string = 147 /* StringKeyword */,
-        _a.super = 105 /* SuperKeyword */,
-        _a.switch = 106 /* SwitchKeyword */,
-        _a.symbol = 148 /* SymbolKeyword */,
-        _a.this = 107 /* ThisKeyword */,
-        _a.throw = 108 /* ThrowKeyword */,
-        _a.true = 109 /* TrueKeyword */,
-        _a.try = 110 /* TryKeyword */,
-        _a.type = 149 /* TypeKeyword */,
-        _a.typeof = 111 /* TypeOfKeyword */,
-        _a.undefined = 150 /* UndefinedKeyword */,
-        _a.unique = 151 /* UniqueKeyword */,
-        _a.unknown = 152 /* UnknownKeyword */,
-        _a.var = 112 /* VarKeyword */,
-        _a.void = 113 /* VoidKeyword */,
-        _a.while = 114 /* WhileKeyword */,
-        _a.with = 115 /* WithKeyword */,
-        _a.yield = 124 /* YieldKeyword */,
-        _a.async = 129 /* AsyncKeyword */,
-        _a.await = 130 /* AwaitKeyword */,
-        _a.of = 157 /* OfKeyword */,
+        _a["" + "constructor"] = 133 /* ConstructorKeyword */,
+        _a.debugger = 87 /* DebuggerKeyword */,
+        _a.declare = 134 /* DeclareKeyword */,
+        _a.default = 88 /* DefaultKeyword */,
+        _a.delete = 89 /* DeleteKeyword */,
+        _a.do = 90 /* DoKeyword */,
+        _a.else = 91 /* ElseKeyword */,
+        _a.enum = 92 /* EnumKeyword */,
+        _a.export = 93 /* ExportKeyword */,
+        _a.extends = 94 /* ExtendsKeyword */,
+        _a.false = 95 /* FalseKeyword */,
+        _a.finally = 96 /* FinallyKeyword */,
+        _a.for = 97 /* ForKeyword */,
+        _a.from = 154 /* FromKeyword */,
+        _a.function = 98 /* FunctionKeyword */,
+        _a.get = 135 /* GetKeyword */,
+        _a.if = 99 /* IfKeyword */,
+        _a.implements = 117 /* ImplementsKeyword */,
+        _a.import = 100 /* ImportKeyword */,
+        _a.in = 101 /* InKeyword */,
+        _a.infer = 136 /* InferKeyword */,
+        _a.instanceof = 102 /* InstanceOfKeyword */,
+        _a.interface = 118 /* InterfaceKeyword */,
+        _a.intrinsic = 137 /* IntrinsicKeyword */,
+        _a.is = 138 /* IsKeyword */,
+        _a.keyof = 139 /* KeyOfKeyword */,
+        _a.let = 119 /* LetKeyword */,
+        _a.module = 140 /* ModuleKeyword */,
+        _a.namespace = 141 /* NamespaceKeyword */,
+        _a.never = 142 /* NeverKeyword */,
+        _a.new = 103 /* NewKeyword */,
+        _a.null = 104 /* NullKeyword */,
+        _a.number = 145 /* NumberKeyword */,
+        _a.object = 146 /* ObjectKeyword */,
+        _a.package = 120 /* PackageKeyword */,
+        _a.private = 121 /* PrivateKeyword */,
+        _a.protected = 122 /* ProtectedKeyword */,
+        _a.public = 123 /* PublicKeyword */,
+        _a.override = 157 /* OverrideKeyword */,
+        _a.readonly = 143 /* ReadonlyKeyword */,
+        _a.require = 144 /* RequireKeyword */,
+        _a.global = 155 /* GlobalKeyword */,
+        _a.return = 105 /* ReturnKeyword */,
+        _a.set = 147 /* SetKeyword */,
+        _a.static = 124 /* StaticKeyword */,
+        _a.string = 148 /* StringKeyword */,
+        _a.super = 106 /* SuperKeyword */,
+        _a.switch = 107 /* SwitchKeyword */,
+        _a.symbol = 149 /* SymbolKeyword */,
+        _a.this = 108 /* ThisKeyword */,
+        _a.throw = 109 /* ThrowKeyword */,
+        _a.true = 110 /* TrueKeyword */,
+        _a.try = 111 /* TryKeyword */,
+        _a.type = 150 /* TypeKeyword */,
+        _a.typeof = 112 /* TypeOfKeyword */,
+        _a.undefined = 151 /* UndefinedKeyword */,
+        _a.unique = 152 /* UniqueKeyword */,
+        _a.unknown = 153 /* UnknownKeyword */,
+        _a.var = 113 /* VarKeyword */,
+        _a.void = 114 /* VoidKeyword */,
+        _a.while = 115 /* WhileKeyword */,
+        _a.with = 116 /* WithKeyword */,
+        _a.yield = 125 /* YieldKeyword */,
+        _a.async = 130 /* AsyncKeyword */,
+        _a.await = 131 /* AwaitKeyword */,
+        _a.of = 158 /* OfKeyword */,
         _a);
-    var textToKeyword = new ts.Map(ts.getEntries(textToKeywordObj));
-    var textToToken = new ts.Map(ts.getEntries(__assign(__assign({}, textToKeywordObj), { "{": 18 /* OpenBraceToken */, "}": 19 /* CloseBraceToken */, "(": 20 /* OpenParenToken */, ")": 21 /* CloseParenToken */, "[": 22 /* OpenBracketToken */, "]": 23 /* CloseBracketToken */, ".": 24 /* DotToken */, "...": 25 /* DotDotDotToken */, ";": 26 /* SemicolonToken */, ",": 27 /* CommaToken */, "<": 29 /* LessThanToken */, ">": 31 /* GreaterThanToken */, "<=": 32 /* LessThanEqualsToken */, ">=": 33 /* GreaterThanEqualsToken */, "==": 34 /* EqualsEqualsToken */, "!=": 35 /* ExclamationEqualsToken */, "===": 36 /* EqualsEqualsEqualsToken */, "!==": 37 /* ExclamationEqualsEqualsToken */, "=>": 38 /* EqualsGreaterThanToken */, "+": 39 /* PlusToken */, "-": 40 /* MinusToken */, "**": 42 /* AsteriskAsteriskToken */, "*": 41 /* AsteriskToken */, "/": 43 /* SlashToken */, "%": 44 /* PercentToken */, "++": 45 /* PlusPlusToken */, "--": 46 /* MinusMinusToken */, "<<": 47 /* LessThanLessThanToken */, "</": 30 /* LessThanSlashToken */, ">>": 48 /* GreaterThanGreaterThanToken */, ">>>": 49 /* GreaterThanGreaterThanGreaterThanToken */, "&": 50 /* AmpersandToken */, "|": 51 /* BarToken */, "^": 52 /* CaretToken */, "!": 53 /* ExclamationToken */, "~": 54 /* TildeToken */, "&&": 55 /* AmpersandAmpersandToken */, "||": 56 /* BarBarToken */, "?": 57 /* QuestionToken */, "??": 60 /* QuestionQuestionToken */, "?.": 28 /* QuestionDotToken */, ":": 58 /* ColonToken */, "=": 62 /* EqualsToken */, "+=": 63 /* PlusEqualsToken */, "-=": 64 /* MinusEqualsToken */, "*=": 65 /* AsteriskEqualsToken */, "**=": 66 /* AsteriskAsteriskEqualsToken */, "/=": 67 /* SlashEqualsToken */, "%=": 68 /* PercentEqualsToken */, "<<=": 69 /* LessThanLessThanEqualsToken */, ">>=": 70 /* GreaterThanGreaterThanEqualsToken */, ">>>=": 71 /* GreaterThanGreaterThanGreaterThanEqualsToken */, "&=": 72 /* AmpersandEqualsToken */, "|=": 73 /* BarEqualsToken */, "^=": 77 /* CaretEqualsToken */, "||=": 74 /* BarBarEqualsToken */, "&&=": 75 /* AmpersandAmpersandEqualsToken */, "??=": 76 /* QuestionQuestionEqualsToken */, "@": 59 /* AtToken */, "`": 61 /* BacktickToken */ })));
+    var textToKeyword = new ts.Map(ts.getEntries(ts.textToKeywordObj));
+    var textToToken = new ts.Map(ts.getEntries(__assign(__assign({}, ts.textToKeywordObj), { "{": 18 /* OpenBraceToken */, "}": 19 /* CloseBraceToken */, "(": 20 /* OpenParenToken */, ")": 21 /* CloseParenToken */, "[": 22 /* OpenBracketToken */, "]": 23 /* CloseBracketToken */, ".": 24 /* DotToken */, "...": 25 /* DotDotDotToken */, ";": 26 /* SemicolonToken */, ",": 27 /* CommaToken */, "<": 29 /* LessThanToken */, ">": 31 /* GreaterThanToken */, "<=": 32 /* LessThanEqualsToken */, ">=": 33 /* GreaterThanEqualsToken */, "==": 34 /* EqualsEqualsToken */, "!=": 35 /* ExclamationEqualsToken */, "===": 36 /* EqualsEqualsEqualsToken */, "!==": 37 /* ExclamationEqualsEqualsToken */, "=>": 38 /* EqualsGreaterThanToken */, "+": 39 /* PlusToken */, "-": 40 /* MinusToken */, "**": 42 /* AsteriskAsteriskToken */, "*": 41 /* AsteriskToken */, "/": 43 /* SlashToken */, "%": 44 /* PercentToken */, "++": 45 /* PlusPlusToken */, "--": 46 /* MinusMinusToken */, "<<": 47 /* LessThanLessThanToken */, "</": 30 /* LessThanSlashToken */, ">>": 48 /* GreaterThanGreaterThanToken */, ">>>": 49 /* GreaterThanGreaterThanGreaterThanToken */, "&": 50 /* AmpersandToken */, "|": 51 /* BarToken */, "^": 52 /* CaretToken */, "!": 53 /* ExclamationToken */, "~": 54 /* TildeToken */, "&&": 55 /* AmpersandAmpersandToken */, "||": 56 /* BarBarToken */, "?": 57 /* QuestionToken */, "??": 60 /* QuestionQuestionToken */, "?.": 28 /* QuestionDotToken */, ":": 58 /* ColonToken */, "=": 63 /* EqualsToken */, "+=": 64 /* PlusEqualsToken */, "-=": 65 /* MinusEqualsToken */, "*=": 66 /* AsteriskEqualsToken */, "**=": 67 /* AsteriskAsteriskEqualsToken */, "/=": 68 /* SlashEqualsToken */, "%=": 69 /* PercentEqualsToken */, "<<=": 70 /* LessThanLessThanEqualsToken */, ">>=": 71 /* GreaterThanGreaterThanEqualsToken */, ">>>=": 72 /* GreaterThanGreaterThanGreaterThanEqualsToken */, "&=": 73 /* AmpersandEqualsToken */, "|=": 74 /* BarEqualsToken */, "^=": 78 /* CaretEqualsToken */, "||=": 75 /* BarBarEqualsToken */, "&&=": 76 /* AmpersandAmpersandEqualsToken */, "??=": 77 /* QuestionQuestionEqualsToken */, "@": 59 /* AtToken */, "#": 62 /* HashToken */, "`": 61 /* BacktickToken */ })));
     /*
         As per ECMAScript Language Specification 3th Edition, Section 7.6: Identifiers
         IdentifierStart ::
@@ -9648,13 +9958,13 @@
     var unicodeESNextIdentifierStart = [65, 90, 97, 122, 170, 170, 181, 181, 186, 186, 192, 214, 216, 246, 248, 705, 710, 721, 736, 740, 748, 748, 750, 750, 880, 884, 886, 887, 890, 893, 895, 895, 902, 902, 904, 906, 908, 908, 910, 929, 931, 1013, 1015, 1153, 1162, 1327, 1329, 1366, 1369, 1369, 1376, 1416, 1488, 1514, 1519, 1522, 1568, 1610, 1646, 1647, 1649, 1747, 1749, 1749, 1765, 1766, 1774, 1775, 1786, 1788, 1791, 1791, 1808, 1808, 1810, 1839, 1869, 1957, 1969, 1969, 1994, 2026, 2036, 2037, 2042, 2042, 2048, 2069, 2074, 2074, 2084, 2084, 2088, 2088, 2112, 2136, 2144, 2154, 2208, 2228, 2230, 2237, 2308, 2361, 2365, 2365, 2384, 2384, 2392, 2401, 2417, 2432, 2437, 2444, 2447, 2448, 2451, 2472, 2474, 2480, 2482, 2482, 2486, 2489, 2493, 2493, 2510, 2510, 2524, 2525, 2527, 2529, 2544, 2545, 2556, 2556, 2565, 2570, 2575, 2576, 2579, 2600, 2602, 2608, 2610, 2611, 2613, 2614, 2616, 2617, 2649, 2652, 2654, 2654, 2674, 2676, 2693, 2701, 2703, 2705, 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2749, 2749, 2768, 2768, 2784, 2785, 2809, 2809, 2821, 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2869, 2873, 2877, 2877, 2908, 2909, 2911, 2913, 2929, 2929, 2947, 2947, 2949, 2954, 2958, 2960, 2962, 2965, 2969, 2970, 2972, 2972, 2974, 2975, 2979, 2980, 2984, 2986, 2990, 3001, 3024, 3024, 3077, 3084, 3086, 3088, 3090, 3112, 3114, 3129, 3133, 3133, 3160, 3162, 3168, 3169, 3200, 3200, 3205, 3212, 3214, 3216, 3218, 3240, 3242, 3251, 3253, 3257, 3261, 3261, 3294, 3294, 3296, 3297, 3313, 3314, 3333, 3340, 3342, 3344, 3346, 3386, 3389, 3389, 3406, 3406, 3412, 3414, 3423, 3425, 3450, 3455, 3461, 3478, 3482, 3505, 3507, 3515, 3517, 3517, 3520, 3526, 3585, 3632, 3634, 3635, 3648, 3654, 3713, 3714, 3716, 3716, 3718, 3722, 3724, 3747, 3749, 3749, 3751, 3760, 3762, 3763, 3773, 3773, 3776, 3780, 3782, 3782, 3804, 3807, 3840, 3840, 3904, 3911, 3913, 3948, 3976, 3980, 4096, 4138, 4159, 4159, 4176, 4181, 4186, 4189, 4193, 4193, 4197, 4198, 4206, 4208, 4213, 4225, 4238, 4238, 4256, 4293, 4295, 4295, 4301, 4301, 4304, 4346, 4348, 4680, 4682, 4685, 4688, 4694, 4696, 4696, 4698, 4701, 4704, 4744, 4746, 4749, 4752, 4784, 4786, 4789, 4792, 4798, 4800, 4800, 4802, 4805, 4808, 4822, 4824, 4880, 4882, 4885, 4888, 4954, 4992, 5007, 5024, 5109, 5112, 5117, 5121, 5740, 5743, 5759, 5761, 5786, 5792, 5866, 5870, 5880, 5888, 5900, 5902, 5905, 5920, 5937, 5952, 5969, 5984, 5996, 5998, 6000, 6016, 6067, 6103, 6103, 6108, 6108, 6176, 6264, 6272, 6312, 6314, 6314, 6320, 6389, 6400, 6430, 6480, 6509, 6512, 6516, 6528, 6571, 6576, 6601, 6656, 6678, 6688, 6740, 6823, 6823, 6917, 6963, 6981, 6987, 7043, 7072, 7086, 7087, 7098, 7141, 7168, 7203, 7245, 7247, 7258, 7293, 7296, 7304, 7312, 7354, 7357, 7359, 7401, 7404, 7406, 7411, 7413, 7414, 7418, 7418, 7424, 7615, 7680, 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025, 8027, 8027, 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130, 8132, 8134, 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188, 8305, 8305, 8319, 8319, 8336, 8348, 8450, 8450, 8455, 8455, 8458, 8467, 8469, 8469, 8472, 8477, 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8505, 8508, 8511, 8517, 8521, 8526, 8526, 8544, 8584, 11264, 11310, 11312, 11358, 11360, 11492, 11499, 11502, 11506, 11507, 11520, 11557, 11559, 11559, 11565, 11565, 11568, 11623, 11631, 11631, 11648, 11670, 11680, 11686, 11688, 11694, 11696, 11702, 11704, 11710, 11712, 11718, 11720, 11726, 11728, 11734, 11736, 11742, 12293, 12295, 12321, 12329, 12337, 12341, 12344, 12348, 12353, 12438, 12443, 12447, 12449, 12538, 12540, 12543, 12549, 12591, 12593, 12686, 12704, 12730, 12784, 12799, 13312, 19893, 19968, 40943, 40960, 42124, 42192, 42237, 42240, 42508, 42512, 42527, 42538, 42539, 42560, 42606, 42623, 42653, 42656, 42735, 42775, 42783, 42786, 42888, 42891, 42943, 42946, 42950, 42999, 43009, 43011, 43013, 43015, 43018, 43020, 43042, 43072, 43123, 43138, 43187, 43250, 43255, 43259, 43259, 43261, 43262, 43274, 43301, 43312, 43334, 43360, 43388, 43396, 43442, 43471, 43471, 43488, 43492, 43494, 43503, 43514, 43518, 43520, 43560, 43584, 43586, 43588, 43595, 43616, 43638, 43642, 43642, 43646, 43695, 43697, 43697, 43701, 43702, 43705, 43709, 43712, 43712, 43714, 43714, 43739, 43741, 43744, 43754, 43762, 43764, 43777, 43782, 43785, 43790, 43793, 43798, 43808, 43814, 43816, 43822, 43824, 43866, 43868, 43879, 43888, 44002, 44032, 55203, 55216, 55238, 55243, 55291, 63744, 64109, 64112, 64217, 64256, 64262, 64275, 64279, 64285, 64285, 64287, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321, 64323, 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008, 65019, 65136, 65140, 65142, 65276, 65313, 65338, 65345, 65370, 65382, 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500, 65536, 65547, 65549, 65574, 65576, 65594, 65596, 65597, 65599, 65613, 65616, 65629, 65664, 65786, 65856, 65908, 66176, 66204, 66208, 66256, 66304, 66335, 66349, 66378, 66384, 66421, 66432, 66461, 66464, 66499, 66504, 66511, 66513, 66517, 66560, 66717, 66736, 66771, 66776, 66811, 66816, 66855, 66864, 66915, 67072, 67382, 67392, 67413, 67424, 67431, 67584, 67589, 67592, 67592, 67594, 67637, 67639, 67640, 67644, 67644, 67647, 67669, 67680, 67702, 67712, 67742, 67808, 67826, 67828, 67829, 67840, 67861, 67872, 67897, 67968, 68023, 68030, 68031, 68096, 68096, 68112, 68115, 68117, 68119, 68121, 68149, 68192, 68220, 68224, 68252, 68288, 68295, 68297, 68324, 68352, 68405, 68416, 68437, 68448, 68466, 68480, 68497, 68608, 68680, 68736, 68786, 68800, 68850, 68864, 68899, 69376, 69404, 69415, 69415, 69424, 69445, 69600, 69622, 69635, 69687, 69763, 69807, 69840, 69864, 69891, 69926, 69956, 69956, 69968, 70002, 70006, 70006, 70019, 70066, 70081, 70084, 70106, 70106, 70108, 70108, 70144, 70161, 70163, 70187, 70272, 70278, 70280, 70280, 70282, 70285, 70287, 70301, 70303, 70312, 70320, 70366, 70405, 70412, 70415, 70416, 70419, 70440, 70442, 70448, 70450, 70451, 70453, 70457, 70461, 70461, 70480, 70480, 70493, 70497, 70656, 70708, 70727, 70730, 70751, 70751, 70784, 70831, 70852, 70853, 70855, 70855, 71040, 71086, 71128, 71131, 71168, 71215, 71236, 71236, 71296, 71338, 71352, 71352, 71424, 71450, 71680, 71723, 71840, 71903, 71935, 71935, 72096, 72103, 72106, 72144, 72161, 72161, 72163, 72163, 72192, 72192, 72203, 72242, 72250, 72250, 72272, 72272, 72284, 72329, 72349, 72349, 72384, 72440, 72704, 72712, 72714, 72750, 72768, 72768, 72818, 72847, 72960, 72966, 72968, 72969, 72971, 73008, 73030, 73030, 73056, 73061, 73063, 73064, 73066, 73097, 73112, 73112, 73440, 73458, 73728, 74649, 74752, 74862, 74880, 75075, 77824, 78894, 82944, 83526, 92160, 92728, 92736, 92766, 92880, 92909, 92928, 92975, 92992, 92995, 93027, 93047, 93053, 93071, 93760, 93823, 93952, 94026, 94032, 94032, 94099, 94111, 94176, 94177, 94179, 94179, 94208, 100343, 100352, 101106, 110592, 110878, 110928, 110930, 110948, 110951, 110960, 111355, 113664, 113770, 113776, 113788, 113792, 113800, 113808, 113817, 119808, 119892, 119894, 119964, 119966, 119967, 119970, 119970, 119973, 119974, 119977, 119980, 119982, 119993, 119995, 119995, 119997, 120003, 120005, 120069, 120071, 120074, 120077, 120084, 120086, 120092, 120094, 120121, 120123, 120126, 120128, 120132, 120134, 120134, 120138, 120144, 120146, 120485, 120488, 120512, 120514, 120538, 120540, 120570, 120572, 120596, 120598, 120628, 120630, 120654, 120656, 120686, 120688, 120712, 120714, 120744, 120746, 120770, 120772, 120779, 123136, 123180, 123191, 123197, 123214, 123214, 123584, 123627, 124928, 125124, 125184, 125251, 125259, 125259, 126464, 126467, 126469, 126495, 126497, 126498, 126500, 126500, 126503, 126503, 126505, 126514, 126516, 126519, 126521, 126521, 126523, 126523, 126530, 126530, 126535, 126535, 126537, 126537, 126539, 126539, 126541, 126543, 126545, 126546, 126548, 126548, 126551, 126551, 126553, 126553, 126555, 126555, 126557, 126557, 126559, 126559, 126561, 126562, 126564, 126564, 126567, 126570, 126572, 126578, 126580, 126583, 126585, 126588, 126590, 126590, 126592, 126601, 126603, 126619, 126625, 126627, 126629, 126633, 126635, 126651, 131072, 173782, 173824, 177972, 177984, 178205, 178208, 183969, 183984, 191456, 194560, 195101];
     var unicodeESNextIdentifierPart = [48, 57, 65, 90, 95, 95, 97, 122, 170, 170, 181, 181, 183, 183, 186, 186, 192, 214, 216, 246, 248, 705, 710, 721, 736, 740, 748, 748, 750, 750, 768, 884, 886, 887, 890, 893, 895, 895, 902, 906, 908, 908, 910, 929, 931, 1013, 1015, 1153, 1155, 1159, 1162, 1327, 1329, 1366, 1369, 1369, 1376, 1416, 1425, 1469, 1471, 1471, 1473, 1474, 1476, 1477, 1479, 1479, 1488, 1514, 1519, 1522, 1552, 1562, 1568, 1641, 1646, 1747, 1749, 1756, 1759, 1768, 1770, 1788, 1791, 1791, 1808, 1866, 1869, 1969, 1984, 2037, 2042, 2042, 2045, 2045, 2048, 2093, 2112, 2139, 2144, 2154, 2208, 2228, 2230, 2237, 2259, 2273, 2275, 2403, 2406, 2415, 2417, 2435, 2437, 2444, 2447, 2448, 2451, 2472, 2474, 2480, 2482, 2482, 2486, 2489, 2492, 2500, 2503, 2504, 2507, 2510, 2519, 2519, 2524, 2525, 2527, 2531, 2534, 2545, 2556, 2556, 2558, 2558, 2561, 2563, 2565, 2570, 2575, 2576, 2579, 2600, 2602, 2608, 2610, 2611, 2613, 2614, 2616, 2617, 2620, 2620, 2622, 2626, 2631, 2632, 2635, 2637, 2641, 2641, 2649, 2652, 2654, 2654, 2662, 2677, 2689, 2691, 2693, 2701, 2703, 2705, 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2748, 2757, 2759, 2761, 2763, 2765, 2768, 2768, 2784, 2787, 2790, 2799, 2809, 2815, 2817, 2819, 2821, 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2869, 2873, 2876, 2884, 2887, 2888, 2891, 2893, 2902, 2903, 2908, 2909, 2911, 2915, 2918, 2927, 2929, 2929, 2946, 2947, 2949, 2954, 2958, 2960, 2962, 2965, 2969, 2970, 2972, 2972, 2974, 2975, 2979, 2980, 2984, 2986, 2990, 3001, 3006, 3010, 3014, 3016, 3018, 3021, 3024, 3024, 3031, 3031, 3046, 3055, 3072, 3084, 3086, 3088, 3090, 3112, 3114, 3129, 3133, 3140, 3142, 3144, 3146, 3149, 3157, 3158, 3160, 3162, 3168, 3171, 3174, 3183, 3200, 3203, 3205, 3212, 3214, 3216, 3218, 3240, 3242, 3251, 3253, 3257, 3260, 3268, 3270, 3272, 3274, 3277, 3285, 3286, 3294, 3294, 3296, 3299, 3302, 3311, 3313, 3314, 3328, 3331, 3333, 3340, 3342, 3344, 3346, 3396, 3398, 3400, 3402, 3406, 3412, 3415, 3423, 3427, 3430, 3439, 3450, 3455, 3458, 3459, 3461, 3478, 3482, 3505, 3507, 3515, 3517, 3517, 3520, 3526, 3530, 3530, 3535, 3540, 3542, 3542, 3544, 3551, 3558, 3567, 3570, 3571, 3585, 3642, 3648, 3662, 3664, 3673, 3713, 3714, 3716, 3716, 3718, 3722, 3724, 3747, 3749, 3749, 3751, 3773, 3776, 3780, 3782, 3782, 3784, 3789, 3792, 3801, 3804, 3807, 3840, 3840, 3864, 3865, 3872, 3881, 3893, 3893, 3895, 3895, 3897, 3897, 3902, 3911, 3913, 3948, 3953, 3972, 3974, 3991, 3993, 4028, 4038, 4038, 4096, 4169, 4176, 4253, 4256, 4293, 4295, 4295, 4301, 4301, 4304, 4346, 4348, 4680, 4682, 4685, 4688, 4694, 4696, 4696, 4698, 4701, 4704, 4744, 4746, 4749, 4752, 4784, 4786, 4789, 4792, 4798, 4800, 4800, 4802, 4805, 4808, 4822, 4824, 4880, 4882, 4885, 4888, 4954, 4957, 4959, 4969, 4977, 4992, 5007, 5024, 5109, 5112, 5117, 5121, 5740, 5743, 5759, 5761, 5786, 5792, 5866, 5870, 5880, 5888, 5900, 5902, 5908, 5920, 5940, 5952, 5971, 5984, 5996, 5998, 6000, 6002, 6003, 6016, 6099, 6103, 6103, 6108, 6109, 6112, 6121, 6155, 6157, 6160, 6169, 6176, 6264, 6272, 6314, 6320, 6389, 6400, 6430, 6432, 6443, 6448, 6459, 6470, 6509, 6512, 6516, 6528, 6571, 6576, 6601, 6608, 6618, 6656, 6683, 6688, 6750, 6752, 6780, 6783, 6793, 6800, 6809, 6823, 6823, 6832, 6845, 6912, 6987, 6992, 7001, 7019, 7027, 7040, 7155, 7168, 7223, 7232, 7241, 7245, 7293, 7296, 7304, 7312, 7354, 7357, 7359, 7376, 7378, 7380, 7418, 7424, 7673, 7675, 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025, 8027, 8027, 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130, 8132, 8134, 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188, 8255, 8256, 8276, 8276, 8305, 8305, 8319, 8319, 8336, 8348, 8400, 8412, 8417, 8417, 8421, 8432, 8450, 8450, 8455, 8455, 8458, 8467, 8469, 8469, 8472, 8477, 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8505, 8508, 8511, 8517, 8521, 8526, 8526, 8544, 8584, 11264, 11310, 11312, 11358, 11360, 11492, 11499, 11507, 11520, 11557, 11559, 11559, 11565, 11565, 11568, 11623, 11631, 11631, 11647, 11670, 11680, 11686, 11688, 11694, 11696, 11702, 11704, 11710, 11712, 11718, 11720, 11726, 11728, 11734, 11736, 11742, 11744, 11775, 12293, 12295, 12321, 12335, 12337, 12341, 12344, 12348, 12353, 12438, 12441, 12447, 12449, 12538, 12540, 12543, 12549, 12591, 12593, 12686, 12704, 12730, 12784, 12799, 13312, 19893, 19968, 40943, 40960, 42124, 42192, 42237, 42240, 42508, 42512, 42539, 42560, 42607, 42612, 42621, 42623, 42737, 42775, 42783, 42786, 42888, 42891, 42943, 42946, 42950, 42999, 43047, 43072, 43123, 43136, 43205, 43216, 43225, 43232, 43255, 43259, 43259, 43261, 43309, 43312, 43347, 43360, 43388, 43392, 43456, 43471, 43481, 43488, 43518, 43520, 43574, 43584, 43597, 43600, 43609, 43616, 43638, 43642, 43714, 43739, 43741, 43744, 43759, 43762, 43766, 43777, 43782, 43785, 43790, 43793, 43798, 43808, 43814, 43816, 43822, 43824, 43866, 43868, 43879, 43888, 44010, 44012, 44013, 44016, 44025, 44032, 55203, 55216, 55238, 55243, 55291, 63744, 64109, 64112, 64217, 64256, 64262, 64275, 64279, 64285, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321, 64323, 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008, 65019, 65024, 65039, 65056, 65071, 65075, 65076, 65101, 65103, 65136, 65140, 65142, 65276, 65296, 65305, 65313, 65338, 65343, 65343, 65345, 65370, 65382, 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500, 65536, 65547, 65549, 65574, 65576, 65594, 65596, 65597, 65599, 65613, 65616, 65629, 65664, 65786, 65856, 65908, 66045, 66045, 66176, 66204, 66208, 66256, 66272, 66272, 66304, 66335, 66349, 66378, 66384, 66426, 66432, 66461, 66464, 66499, 66504, 66511, 66513, 66517, 66560, 66717, 66720, 66729, 66736, 66771, 66776, 66811, 66816, 66855, 66864, 66915, 67072, 67382, 67392, 67413, 67424, 67431, 67584, 67589, 67592, 67592, 67594, 67637, 67639, 67640, 67644, 67644, 67647, 67669, 67680, 67702, 67712, 67742, 67808, 67826, 67828, 67829, 67840, 67861, 67872, 67897, 67968, 68023, 68030, 68031, 68096, 68099, 68101, 68102, 68108, 68115, 68117, 68119, 68121, 68149, 68152, 68154, 68159, 68159, 68192, 68220, 68224, 68252, 68288, 68295, 68297, 68326, 68352, 68405, 68416, 68437, 68448, 68466, 68480, 68497, 68608, 68680, 68736, 68786, 68800, 68850, 68864, 68903, 68912, 68921, 69376, 69404, 69415, 69415, 69424, 69456, 69600, 69622, 69632, 69702, 69734, 69743, 69759, 69818, 69840, 69864, 69872, 69881, 69888, 69940, 69942, 69951, 69956, 69958, 69968, 70003, 70006, 70006, 70016, 70084, 70089, 70092, 70096, 70106, 70108, 70108, 70144, 70161, 70163, 70199, 70206, 70206, 70272, 70278, 70280, 70280, 70282, 70285, 70287, 70301, 70303, 70312, 70320, 70378, 70384, 70393, 70400, 70403, 70405, 70412, 70415, 70416, 70419, 70440, 70442, 70448, 70450, 70451, 70453, 70457, 70459, 70468, 70471, 70472, 70475, 70477, 70480, 70480, 70487, 70487, 70493, 70499, 70502, 70508, 70512, 70516, 70656, 70730, 70736, 70745, 70750, 70751, 70784, 70853, 70855, 70855, 70864, 70873, 71040, 71093, 71096, 71104, 71128, 71133, 71168, 71232, 71236, 71236, 71248, 71257, 71296, 71352, 71360, 71369, 71424, 71450, 71453, 71467, 71472, 71481, 71680, 71738, 71840, 71913, 71935, 71935, 72096, 72103, 72106, 72151, 72154, 72161, 72163, 72164, 72192, 72254, 72263, 72263, 72272, 72345, 72349, 72349, 72384, 72440, 72704, 72712, 72714, 72758, 72760, 72768, 72784, 72793, 72818, 72847, 72850, 72871, 72873, 72886, 72960, 72966, 72968, 72969, 72971, 73014, 73018, 73018, 73020, 73021, 73023, 73031, 73040, 73049, 73056, 73061, 73063, 73064, 73066, 73102, 73104, 73105, 73107, 73112, 73120, 73129, 73440, 73462, 73728, 74649, 74752, 74862, 74880, 75075, 77824, 78894, 82944, 83526, 92160, 92728, 92736, 92766, 92768, 92777, 92880, 92909, 92912, 92916, 92928, 92982, 92992, 92995, 93008, 93017, 93027, 93047, 93053, 93071, 93760, 93823, 93952, 94026, 94031, 94087, 94095, 94111, 94176, 94177, 94179, 94179, 94208, 100343, 100352, 101106, 110592, 110878, 110928, 110930, 110948, 110951, 110960, 111355, 113664, 113770, 113776, 113788, 113792, 113800, 113808, 113817, 113821, 113822, 119141, 119145, 119149, 119154, 119163, 119170, 119173, 119179, 119210, 119213, 119362, 119364, 119808, 119892, 119894, 119964, 119966, 119967, 119970, 119970, 119973, 119974, 119977, 119980, 119982, 119993, 119995, 119995, 119997, 120003, 120005, 120069, 120071, 120074, 120077, 120084, 120086, 120092, 120094, 120121, 120123, 120126, 120128, 120132, 120134, 120134, 120138, 120144, 120146, 120485, 120488, 120512, 120514, 120538, 120540, 120570, 120572, 120596, 120598, 120628, 120630, 120654, 120656, 120686, 120688, 120712, 120714, 120744, 120746, 120770, 120772, 120779, 120782, 120831, 121344, 121398, 121403, 121452, 121461, 121461, 121476, 121476, 121499, 121503, 121505, 121519, 122880, 122886, 122888, 122904, 122907, 122913, 122915, 122916, 122918, 122922, 123136, 123180, 123184, 123197, 123200, 123209, 123214, 123214, 123584, 123641, 124928, 125124, 125136, 125142, 125184, 125259, 125264, 125273, 126464, 126467, 126469, 126495, 126497, 126498, 126500, 126500, 126503, 126503, 126505, 126514, 126516, 126519, 126521, 126521, 126523, 126523, 126530, 126530, 126535, 126535, 126537, 126537, 126539, 126539, 126541, 126543, 126545, 126546, 126548, 126548, 126551, 126551, 126553, 126553, 126555, 126555, 126557, 126557, 126559, 126559, 126561, 126562, 126564, 126564, 126567, 126570, 126572, 126578, 126580, 126583, 126585, 126588, 126590, 126590, 126592, 126601, 126603, 126619, 126625, 126627, 126629, 126633, 126635, 126651, 131072, 173782, 173824, 177972, 177984, 178205, 178208, 183969, 183984, 191456, 194560, 195101, 917760, 917999];
     /**
-     * Test for whether a single line comment's text contains a directive.
+     * Test for whether a single line comment with leading whitespace trimmed's text contains a directive.
      */
-    var commentDirectiveRegExSingleLine = /^\s*\/\/\/?\s*@(ts-expect-error|ts-ignore)/;
+    var commentDirectiveRegExSingleLine = /^\/\/\/?\s*@(ts-expect-error|ts-ignore)/;
     /**
-     * Test for whether a multi-line comment's last line contains a directive.
+     * Test for whether a multi-line comment with leading whitespace trimmed's last line contains a directive.
      */
-    var commentDirectiveRegExMultiLine = /^\s*(?:\/|\*)*\s*@(ts-expect-error|ts-ignore)/;
+    var commentDirectiveRegExMultiLine = /^(?:\/|\*)*\s*@(ts-expect-error|ts-ignore)/;
     function lookupInUnicodeMap(code, map) {
         // Bail out quickly if it couldn't possibly be in the map.
         if (code < map[0]) {
@@ -10268,8 +10578,8 @@
             hasExtendedUnicodeEscape: function () { return (tokenFlags & 8 /* ExtendedUnicodeEscape */) !== 0; },
             hasPrecedingLineBreak: function () { return (tokenFlags & 1 /* PrecedingLineBreak */) !== 0; },
             hasPrecedingJSDocComment: function () { return (tokenFlags & 2 /* PrecedingJSDocComment */) !== 0; },
-            isIdentifier: function () { return token === 78 /* Identifier */ || token > 115 /* LastReservedWord */; },
-            isReservedWord: function () { return token >= 80 /* FirstReservedWord */ && token <= 115 /* LastReservedWord */; },
+            isIdentifier: function () { return token === 79 /* Identifier */ || token > 116 /* LastReservedWord */; },
+            isReservedWord: function () { return token >= 81 /* FirstReservedWord */ && token <= 116 /* LastReservedWord */; },
             isUnterminated: function () { return (tokenFlags & 4 /* Unterminated */) !== 0; },
             getCommentDirectives: function () { return commentDirectives; },
             getNumericLiteralFlags: function () { return tokenFlags & 1008 /* NumericLiteralFlags */; },
@@ -10284,6 +10594,7 @@
             reScanJsxAttributeValue: reScanJsxAttributeValue,
             reScanJsxToken: reScanJsxToken,
             reScanLessThanToken: reScanLessThanToken,
+            reScanHashToken: reScanHashToken,
             reScanQuestionToken: reScanQuestionToken,
             reScanInvalidIdentifier: reScanInvalidIdentifier,
             scanJsxToken: scanJsxToken,
@@ -10794,7 +11105,7 @@
                     }
                 }
             }
-            return token = 78 /* Identifier */;
+            return token = 79 /* Identifier */;
         }
         function scanBinaryOrOctalDigits(base) {
             var value = "";
@@ -10943,19 +11254,19 @@
                         return token = scanTemplateAndSetTokenValue(/* isTaggedTemplate */ false);
                     case 37 /* percent */:
                         if (text.charCodeAt(pos + 1) === 61 /* equals */) {
-                            return pos += 2, token = 68 /* PercentEqualsToken */;
+                            return pos += 2, token = 69 /* PercentEqualsToken */;
                         }
                         pos++;
                         return token = 44 /* PercentToken */;
                     case 38 /* ampersand */:
                         if (text.charCodeAt(pos + 1) === 38 /* ampersand */) {
                             if (text.charCodeAt(pos + 2) === 61 /* equals */) {
-                                return pos += 3, token = 75 /* AmpersandAmpersandEqualsToken */;
+                                return pos += 3, token = 76 /* AmpersandAmpersandEqualsToken */;
                             }
                             return pos += 2, token = 55 /* AmpersandAmpersandToken */;
                         }
                         if (text.charCodeAt(pos + 1) === 61 /* equals */) {
-                            return pos += 2, token = 72 /* AmpersandEqualsToken */;
+                            return pos += 2, token = 73 /* AmpersandEqualsToken */;
                         }
                         pos++;
                         return token = 50 /* AmpersandToken */;
@@ -10967,11 +11278,11 @@
                         return token = 21 /* CloseParenToken */;
                     case 42 /* asterisk */:
                         if (text.charCodeAt(pos + 1) === 61 /* equals */) {
-                            return pos += 2, token = 65 /* AsteriskEqualsToken */;
+                            return pos += 2, token = 66 /* AsteriskEqualsToken */;
                         }
                         if (text.charCodeAt(pos + 1) === 42 /* asterisk */) {
                             if (text.charCodeAt(pos + 2) === 61 /* equals */) {
-                                return pos += 3, token = 66 /* AsteriskAsteriskEqualsToken */;
+                                return pos += 3, token = 67 /* AsteriskAsteriskEqualsToken */;
                             }
                             return pos += 2, token = 42 /* AsteriskAsteriskToken */;
                         }
@@ -10987,7 +11298,7 @@
                             return pos += 2, token = 45 /* PlusPlusToken */;
                         }
                         if (text.charCodeAt(pos + 1) === 61 /* equals */) {
-                            return pos += 2, token = 63 /* PlusEqualsToken */;
+                            return pos += 2, token = 64 /* PlusEqualsToken */;
                         }
                         pos++;
                         return token = 39 /* PlusToken */;
@@ -10999,7 +11310,7 @@
                             return pos += 2, token = 46 /* MinusMinusToken */;
                         }
                         if (text.charCodeAt(pos + 1) === 61 /* equals */) {
-                            return pos += 2, token = 64 /* MinusEqualsToken */;
+                            return pos += 2, token = 65 /* MinusEqualsToken */;
                         }
                         pos++;
                         return token = 40 /* MinusToken */;
@@ -11067,7 +11378,7 @@
                             }
                         }
                         if (text.charCodeAt(pos + 1) === 61 /* equals */) {
-                            return pos += 2, token = 67 /* SlashEqualsToken */;
+                            return pos += 2, token = 68 /* SlashEqualsToken */;
                         }
                         pos++;
                         return token = 43 /* SlashToken */;
@@ -11144,7 +11455,7 @@
                         }
                         if (text.charCodeAt(pos + 1) === 60 /* lessThan */) {
                             if (text.charCodeAt(pos + 2) === 61 /* equals */) {
-                                return pos += 3, token = 69 /* LessThanLessThanEqualsToken */;
+                                return pos += 3, token = 70 /* LessThanLessThanEqualsToken */;
                             }
                             return pos += 2, token = 47 /* LessThanLessThanToken */;
                         }
@@ -11178,7 +11489,7 @@
                             return pos += 2, token = 38 /* EqualsGreaterThanToken */;
                         }
                         pos++;
-                        return token = 62 /* EqualsToken */;
+                        return token = 63 /* EqualsToken */;
                     case 62 /* greaterThan */:
                         if (isConflictMarkerTrivia(text, pos)) {
                             pos = scanConflictMarkerTrivia(text, pos, error);
@@ -11197,7 +11508,7 @@
                         }
                         if (text.charCodeAt(pos + 1) === 63 /* question */) {
                             if (text.charCodeAt(pos + 2) === 61 /* equals */) {
-                                return pos += 3, token = 76 /* QuestionQuestionEqualsToken */;
+                                return pos += 3, token = 77 /* QuestionQuestionEqualsToken */;
                             }
                             return pos += 2, token = 60 /* QuestionQuestionToken */;
                         }
@@ -11211,7 +11522,7 @@
                         return token = 23 /* CloseBracketToken */;
                     case 94 /* caret */:
                         if (text.charCodeAt(pos + 1) === 61 /* equals */) {
-                            return pos += 2, token = 77 /* CaretEqualsToken */;
+                            return pos += 2, token = 78 /* CaretEqualsToken */;
                         }
                         pos++;
                         return token = 52 /* CaretToken */;
@@ -11230,12 +11541,12 @@
                         }
                         if (text.charCodeAt(pos + 1) === 124 /* bar */) {
                             if (text.charCodeAt(pos + 2) === 61 /* equals */) {
-                                return pos += 3, token = 74 /* BarBarEqualsToken */;
+                                return pos += 3, token = 75 /* BarBarEqualsToken */;
                             }
                             return pos += 2, token = 56 /* BarBarToken */;
                         }
                         if (text.charCodeAt(pos + 1) === 61 /* equals */) {
-                            return pos += 2, token = 73 /* BarEqualsToken */;
+                            return pos += 2, token = 74 /* BarEqualsToken */;
                         }
                         pos++;
                         return token = 51 /* BarToken */;
@@ -11272,21 +11583,15 @@
                             pos++;
                             return token = 0 /* Unknown */;
                         }
-                        pos++;
-                        if (isIdentifierStart(ch = text.charCodeAt(pos), languageVersion)) {
+                        if (isIdentifierStart(codePointAt(text, pos + 1), languageVersion)) {
                             pos++;
-                            while (pos < end && isIdentifierPart(ch = text.charCodeAt(pos), languageVersion))
-                                pos++;
-                            tokenValue = text.substring(tokenPos, pos);
-                            if (ch === 92 /* backslash */) {
-                                tokenValue += scanIdentifierParts();
-                            }
+                            scanIdentifier(codePointAt(text, pos), languageVersion);
                         }
                         else {
-                            tokenValue = "#";
-                            error(ts.Diagnostics.Invalid_character);
+                            tokenValue = String.fromCharCode(codePointAt(text, pos));
+                            error(ts.Diagnostics.Invalid_character, pos++, charSize(ch));
                         }
-                        return token = 79 /* PrivateIdentifier */;
+                        return token = 80 /* PrivateIdentifier */;
                     default:
                         var identifierKind = scanIdentifier(ch, languageVersion);
                         if (identifierKind) {
@@ -11301,8 +11606,9 @@
                             pos += charSize(ch);
                             continue;
                         }
-                        error(ts.Diagnostics.Invalid_character);
-                        pos += charSize(ch);
+                        var size = charSize(ch);
+                        error(ts.Diagnostics.Invalid_character, pos, size);
+                        pos += size;
                         return token = 0 /* Unknown */;
                 }
             }
@@ -11337,12 +11643,12 @@
                 if (text.charCodeAt(pos) === 62 /* greaterThan */) {
                     if (text.charCodeAt(pos + 1) === 62 /* greaterThan */) {
                         if (text.charCodeAt(pos + 2) === 61 /* equals */) {
-                            return pos += 3, token = 71 /* GreaterThanGreaterThanGreaterThanEqualsToken */;
+                            return pos += 3, token = 72 /* GreaterThanGreaterThanGreaterThanEqualsToken */;
                         }
                         return pos += 2, token = 49 /* GreaterThanGreaterThanGreaterThanToken */;
                     }
                     if (text.charCodeAt(pos + 1) === 61 /* equals */) {
-                        return pos += 2, token = 70 /* GreaterThanGreaterThanEqualsToken */;
+                        return pos += 2, token = 71 /* GreaterThanGreaterThanEqualsToken */;
                     }
                     pos++;
                     return token = 48 /* GreaterThanGreaterThanToken */;
@@ -11355,12 +11661,12 @@
             return token;
         }
         function reScanAsteriskEqualsToken() {
-            ts.Debug.assert(token === 65 /* AsteriskEqualsToken */, "'reScanAsteriskEqualsToken' should only be called on a '*='");
+            ts.Debug.assert(token === 66 /* AsteriskEqualsToken */, "'reScanAsteriskEqualsToken' should only be called on a '*='");
             pos = tokenPos + 1;
-            return token = 62 /* EqualsToken */;
+            return token = 63 /* EqualsToken */;
         }
         function reScanSlashToken() {
-            if (token === 43 /* SlashToken */ || token === 67 /* SlashEqualsToken */) {
+            if (token === 43 /* SlashToken */ || token === 68 /* SlashEqualsToken */) {
                 var p = tokenPos + 1;
                 var inEscape = false;
                 var inCharacterClass = false;
@@ -11410,7 +11716,7 @@
             return token;
         }
         function appendIfCommentDirective(commentDirectives, text, commentDirectiveRegEx, lineStart) {
-            var type = getDirectiveFromComment(text, commentDirectiveRegEx);
+            var type = getDirectiveFromComment(ts.trimStringStart(text), commentDirectiveRegEx);
             if (type === undefined) {
                 return commentDirectives;
             }
@@ -11456,6 +11762,13 @@
             }
             return token;
         }
+        function reScanHashToken() {
+            if (token === 80 /* PrivateIdentifier */) {
+                pos = tokenPos + 1;
+                return token = 62 /* HashToken */;
+            }
+            return token;
+        }
         function reScanQuestionToken() {
             ts.Debug.assert(token === 60 /* QuestionQuestionToken */, "'reScanQuestionToken' should only be called on a '??'");
             pos = tokenPos + 1;
@@ -11544,7 +11857,7 @@
                         tokenValue += ":";
                         pos++;
                         namespaceSeparator = true;
-                        token = 78 /* Identifier */; // swap from keyword kind to identifier kind
+                        token = 79 /* Identifier */; // swap from keyword kind to identifier kind
                         continue;
                     }
                     var oldPos = pos;
@@ -11619,13 +11932,15 @@
                 case 62 /* greaterThan */:
                     return token = 31 /* GreaterThanToken */;
                 case 61 /* equals */:
-                    return token = 62 /* EqualsToken */;
+                    return token = 63 /* EqualsToken */;
                 case 44 /* comma */:
                     return token = 27 /* CommaToken */;
                 case 46 /* dot */:
                     return token = 24 /* DotToken */;
                 case 96 /* backtick */:
                     return token = 61 /* BacktickToken */;
+                case 35 /* hash */:
+                    return token = 62 /* HashToken */;
                 case 92 /* backslash */:
                     pos--;
                     var extendedCookedChar = peekExtendedUnicodeEscape();
@@ -12021,9 +12336,9 @@
     }
     ts.collapseTextChangeRangesAcrossMultipleVersions = collapseTextChangeRangesAcrossMultipleVersions;
     function getTypeParameterOwner(d) {
-        if (d && d.kind === 160 /* TypeParameter */) {
+        if (d && d.kind === 161 /* TypeParameter */) {
             for (var current = d; current; current = current.parent) {
-                if (isFunctionLike(current) || isClassLike(current) || current.kind === 254 /* InterfaceDeclaration */) {
+                if (isFunctionLike(current) || isClassLike(current) || current.kind === 256 /* InterfaceDeclaration */) {
                     return current;
                 }
             }
@@ -12031,7 +12346,7 @@
     }
     ts.getTypeParameterOwner = getTypeParameterOwner;
     function isParameterPropertyDeclaration(node, parent) {
-        return ts.hasSyntacticModifier(node, 16476 /* ParameterPropertyModifier */) && parent.kind === 167 /* Constructor */;
+        return ts.hasSyntacticModifier(node, 16476 /* ParameterPropertyModifier */) && parent.kind === 169 /* Constructor */;
     }
     ts.isParameterPropertyDeclaration = isParameterPropertyDeclaration;
     function isEmptyBindingPattern(node) {
@@ -12061,14 +12376,14 @@
             node = walkUpBindingElementsAndPatterns(node);
         }
         var flags = getFlags(node);
-        if (node.kind === 250 /* VariableDeclaration */) {
+        if (node.kind === 252 /* VariableDeclaration */) {
             node = node.parent;
         }
-        if (node && node.kind === 251 /* VariableDeclarationList */) {
+        if (node && node.kind === 253 /* VariableDeclarationList */) {
             flags |= getFlags(node);
             node = node.parent;
         }
-        if (node && node.kind === 233 /* VariableStatement */) {
+        if (node && node.kind === 235 /* VariableStatement */) {
             flags |= getFlags(node);
         }
         return flags;
@@ -12241,30 +12556,30 @@
         }
         // Covers remaining cases (returning undefined if none match).
         switch (hostNode.kind) {
-            case 233 /* VariableStatement */:
+            case 235 /* VariableStatement */:
                 if (hostNode.declarationList && hostNode.declarationList.declarations[0]) {
                     return getDeclarationIdentifier(hostNode.declarationList.declarations[0]);
                 }
                 break;
-            case 234 /* ExpressionStatement */:
+            case 236 /* ExpressionStatement */:
                 var expr = hostNode.expression;
-                if (expr.kind === 217 /* BinaryExpression */ && expr.operatorToken.kind === 62 /* EqualsToken */) {
+                if (expr.kind === 219 /* BinaryExpression */ && expr.operatorToken.kind === 63 /* EqualsToken */) {
                     expr = expr.left;
                 }
                 switch (expr.kind) {
-                    case 202 /* PropertyAccessExpression */:
+                    case 204 /* PropertyAccessExpression */:
                         return expr.name;
-                    case 203 /* ElementAccessExpression */:
+                    case 205 /* ElementAccessExpression */:
                         var arg = expr.argumentExpression;
                         if (ts.isIdentifier(arg)) {
                             return arg;
                         }
                 }
                 break;
-            case 208 /* ParenthesizedExpression */: {
+            case 210 /* ParenthesizedExpression */: {
                 return getDeclarationIdentifier(hostNode.expression);
             }
-            case 246 /* LabeledStatement */: {
+            case 248 /* LabeledStatement */: {
                 if (isDeclaration(hostNode.statement) || isExpression(hostNode.statement)) {
                     return getDeclarationIdentifier(hostNode.statement);
                 }
@@ -12299,18 +12614,18 @@
     /** @internal */
     function getNonAssignedNameOfDeclaration(declaration) {
         switch (declaration.kind) {
-            case 78 /* Identifier */:
+            case 79 /* Identifier */:
                 return declaration;
-            case 337 /* JSDocPropertyTag */:
-            case 330 /* JSDocParameterTag */: {
+            case 342 /* JSDocPropertyTag */:
+            case 335 /* JSDocParameterTag */: {
                 var name = declaration.name;
-                if (name.kind === 158 /* QualifiedName */) {
+                if (name.kind === 159 /* QualifiedName */) {
                     return name.right;
                 }
                 break;
             }
-            case 204 /* CallExpression */:
-            case 217 /* BinaryExpression */: {
+            case 206 /* CallExpression */:
+            case 219 /* BinaryExpression */: {
                 var expr_1 = declaration;
                 switch (ts.getAssignmentDeclarationKind(expr_1)) {
                     case 1 /* ExportsProperty */:
@@ -12326,15 +12641,15 @@
                         return undefined;
                 }
             }
-            case 335 /* JSDocTypedefTag */:
+            case 340 /* JSDocTypedefTag */:
                 return getNameOfJSDocTypedef(declaration);
-            case 329 /* JSDocEnumTag */:
+            case 334 /* JSDocEnumTag */:
                 return nameForNamelessJSDocTypedef(declaration);
-            case 267 /* ExportAssignment */: {
+            case 269 /* ExportAssignment */: {
                 var expression = declaration.expression;
                 return ts.isIdentifier(expression) ? expression : undefined;
             }
-            case 203 /* ElementAccessExpression */:
+            case 205 /* ElementAccessExpression */:
                 var expr = declaration;
                 if (ts.isBindableStaticElementAccessExpression(expr)) {
                     return expr.argumentExpression;
@@ -12628,7 +12943,8 @@
     function getTextOfJSDocComment(comment) {
         return typeof comment === "string" ? comment
             : comment === null || comment === void 0 ? void 0 : comment.map(function (c) {
-                return c.kind === 313 /* JSDocText */ ? c.text : "{@link " + (c.name ? ts.entityNameToString(c.name) + " " : "") + c.text + "}";
+                // TODO: Other kinds here
+                return c.kind === 316 /* JSDocText */ ? c.text : "{@link " + (c.name ? ts.entityNameToString(c.name) + " " : "") + c.text + "}";
             }).join("");
     }
     ts.getTextOfJSDocComment = getTextOfJSDocComment;
@@ -12641,7 +12957,7 @@
             return ts.emptyArray;
         }
         if (ts.isJSDocTypeAlias(node)) {
-            ts.Debug.assert(node.parent.kind === 312 /* JSDocComment */);
+            ts.Debug.assert(node.parent.kind === 315 /* JSDocComment */);
             return ts.flatMap(node.parent.tags, function (tag) { return ts.isJSDocTemplateTag(tag) ? tag.typeParameters : undefined; });
         }
         if (node.typeParameters) {
@@ -12668,12 +12984,12 @@
     ts.getEffectiveConstraintOfTypeParameter = getEffectiveConstraintOfTypeParameter;
     // #region
     function isMemberName(node) {
-        return node.kind === 78 /* Identifier */ || node.kind === 79 /* PrivateIdentifier */;
+        return node.kind === 79 /* Identifier */ || node.kind === 80 /* PrivateIdentifier */;
     }
     ts.isMemberName = isMemberName;
     /* @internal */
     function isGetOrSetAccessorDeclaration(node) {
-        return node.kind === 169 /* SetAccessor */ || node.kind === 168 /* GetAccessor */;
+        return node.kind === 171 /* SetAccessor */ || node.kind === 170 /* GetAccessor */;
     }
     ts.isGetOrSetAccessorDeclaration = isGetOrSetAccessorDeclaration;
     function isPropertyAccessChain(node) {
@@ -12691,10 +13007,10 @@
     function isOptionalChain(node) {
         var kind = node.kind;
         return !!(node.flags & 32 /* OptionalChain */) &&
-            (kind === 202 /* PropertyAccessExpression */
-                || kind === 203 /* ElementAccessExpression */
-                || kind === 204 /* CallExpression */
-                || kind === 226 /* NonNullExpression */);
+            (kind === 204 /* PropertyAccessExpression */
+                || kind === 205 /* ElementAccessExpression */
+                || kind === 206 /* CallExpression */
+                || kind === 228 /* NonNullExpression */);
     }
     ts.isOptionalChain = isOptionalChain;
     /* @internal */
@@ -12729,7 +13045,7 @@
     }
     ts.isOutermostOptionalChain = isOutermostOptionalChain;
     function isNullishCoalesce(node) {
-        return node.kind === 217 /* BinaryExpression */ && node.operatorToken.kind === 60 /* QuestionQuestionToken */;
+        return node.kind === 219 /* BinaryExpression */ && node.operatorToken.kind === 60 /* QuestionQuestionToken */;
     }
     ts.isNullishCoalesce = isNullishCoalesce;
     function isConstTypeReference(node) {
@@ -12746,17 +13062,17 @@
     }
     ts.isNonNullChain = isNonNullChain;
     function isBreakOrContinueStatement(node) {
-        return node.kind === 242 /* BreakStatement */ || node.kind === 241 /* ContinueStatement */;
+        return node.kind === 244 /* BreakStatement */ || node.kind === 243 /* ContinueStatement */;
     }
     ts.isBreakOrContinueStatement = isBreakOrContinueStatement;
     function isNamedExportBindings(node) {
-        return node.kind === 270 /* NamespaceExport */ || node.kind === 269 /* NamedExports */;
+        return node.kind === 272 /* NamespaceExport */ || node.kind === 271 /* NamedExports */;
     }
     ts.isNamedExportBindings = isNamedExportBindings;
     function isUnparsedTextLike(node) {
         switch (node.kind) {
-            case 295 /* UnparsedText */:
-            case 296 /* UnparsedInternalText */:
+            case 297 /* UnparsedText */:
+            case 298 /* UnparsedInternalText */:
                 return true;
             default:
                 return false;
@@ -12765,12 +13081,12 @@
     ts.isUnparsedTextLike = isUnparsedTextLike;
     function isUnparsedNode(node) {
         return isUnparsedTextLike(node) ||
-            node.kind === 293 /* UnparsedPrologue */ ||
-            node.kind === 297 /* UnparsedSyntheticReference */;
+            node.kind === 295 /* UnparsedPrologue */ ||
+            node.kind === 299 /* UnparsedSyntheticReference */;
     }
     ts.isUnparsedNode = isUnparsedNode;
     function isJSDocPropertyLikeTag(node) {
-        return node.kind === 337 /* JSDocPropertyTag */ || node.kind === 330 /* JSDocParameterTag */;
+        return node.kind === 342 /* JSDocPropertyTag */ || node.kind === 335 /* JSDocParameterTag */;
     }
     ts.isJSDocPropertyLikeTag = isJSDocPropertyLikeTag;
     // #endregion
@@ -12786,7 +13102,7 @@
     ts.isNode = isNode;
     /* @internal */
     function isNodeKind(kind) {
-        return kind >= 158 /* FirstNode */;
+        return kind >= 159 /* FirstNode */;
     }
     ts.isNodeKind = isNodeKind;
     /**
@@ -12795,7 +13111,7 @@
      * Literals are considered tokens, except TemplateLiteral, but does include TemplateHead/Middle/Tail.
      */
     function isTokenKind(kind) {
-        return kind >= 0 /* FirstToken */ && kind <= 157 /* LastToken */;
+        return kind >= 0 /* FirstToken */ && kind <= 158 /* LastToken */;
     }
     ts.isTokenKind = isTokenKind;
     /**
@@ -12845,13 +13161,13 @@
     ts.isImportOrExportSpecifier = isImportOrExportSpecifier;
     function isTypeOnlyImportOrExportDeclaration(node) {
         switch (node.kind) {
-            case 266 /* ImportSpecifier */:
-            case 271 /* ExportSpecifier */:
+            case 268 /* ImportSpecifier */:
+            case 273 /* ExportSpecifier */:
                 return node.parent.parent.isTypeOnly;
-            case 264 /* NamespaceImport */:
+            case 266 /* NamespaceImport */:
                 return node.parent.isTypeOnly;
-            case 263 /* ImportClause */:
-            case 261 /* ImportEqualsDeclaration */:
+            case 265 /* ImportClause */:
+            case 263 /* ImportEqualsDeclaration */:
                 return node.isTypeOnly;
             default:
                 return false;
@@ -12883,18 +13199,18 @@
     /* @internal */
     function isModifierKind(token) {
         switch (token) {
-            case 125 /* AbstractKeyword */:
-            case 129 /* AsyncKeyword */:
-            case 84 /* ConstKeyword */:
-            case 133 /* DeclareKeyword */:
-            case 87 /* DefaultKeyword */:
-            case 92 /* ExportKeyword */:
-            case 122 /* PublicKeyword */:
-            case 120 /* PrivateKeyword */:
-            case 121 /* ProtectedKeyword */:
-            case 142 /* ReadonlyKeyword */:
-            case 123 /* StaticKeyword */:
-            case 156 /* OverrideKeyword */:
+            case 126 /* AbstractKeyword */:
+            case 130 /* AsyncKeyword */:
+            case 85 /* ConstKeyword */:
+            case 134 /* DeclareKeyword */:
+            case 88 /* DefaultKeyword */:
+            case 93 /* ExportKeyword */:
+            case 123 /* PublicKeyword */:
+            case 121 /* PrivateKeyword */:
+            case 122 /* ProtectedKeyword */:
+            case 143 /* ReadonlyKeyword */:
+            case 124 /* StaticKeyword */:
+            case 157 /* OverrideKeyword */:
                 return true;
         }
         return false;
@@ -12907,7 +13223,7 @@
     ts.isParameterPropertyModifier = isParameterPropertyModifier;
     /* @internal */
     function isClassMemberModifier(idToken) {
-        return isParameterPropertyModifier(idToken) || idToken === 123 /* StaticKeyword */ || idToken === 156 /* OverrideKeyword */;
+        return isParameterPropertyModifier(idToken) || idToken === 124 /* StaticKeyword */ || idToken === 157 /* OverrideKeyword */;
     }
     ts.isClassMemberModifier = isClassMemberModifier;
     function isModifier(node) {
@@ -12916,24 +13232,24 @@
     ts.isModifier = isModifier;
     function isEntityName(node) {
         var kind = node.kind;
-        return kind === 158 /* QualifiedName */
-            || kind === 78 /* Identifier */;
+        return kind === 159 /* QualifiedName */
+            || kind === 79 /* Identifier */;
     }
     ts.isEntityName = isEntityName;
     function isPropertyName(node) {
         var kind = node.kind;
-        return kind === 78 /* Identifier */
-            || kind === 79 /* PrivateIdentifier */
+        return kind === 79 /* Identifier */
+            || kind === 80 /* PrivateIdentifier */
             || kind === 10 /* StringLiteral */
             || kind === 8 /* NumericLiteral */
-            || kind === 159 /* ComputedPropertyName */;
+            || kind === 160 /* ComputedPropertyName */;
     }
     ts.isPropertyName = isPropertyName;
     function isBindingName(node) {
         var kind = node.kind;
-        return kind === 78 /* Identifier */
-            || kind === 197 /* ObjectBindingPattern */
-            || kind === 198 /* ArrayBindingPattern */;
+        return kind === 79 /* Identifier */
+            || kind === 199 /* ObjectBindingPattern */
+            || kind === 200 /* ArrayBindingPattern */;
     }
     ts.isBindingName = isBindingName;
     // Functions
@@ -12942,19 +13258,29 @@
     }
     ts.isFunctionLike = isFunctionLike;
     /* @internal */
+    function isFunctionLikeOrClassStaticBlockDeclaration(node) {
+        return !!node && (isFunctionLikeKind(node.kind) || ts.isClassStaticBlockDeclaration(node));
+    }
+    ts.isFunctionLikeOrClassStaticBlockDeclaration = isFunctionLikeOrClassStaticBlockDeclaration;
+    /* @internal */
     function isFunctionLikeDeclaration(node) {
         return node && isFunctionLikeDeclarationKind(node.kind);
     }
     ts.isFunctionLikeDeclaration = isFunctionLikeDeclaration;
+    /* @internal */
+    function isBooleanLiteral(node) {
+        return node.kind === 110 /* TrueKeyword */ || node.kind === 95 /* FalseKeyword */;
+    }
+    ts.isBooleanLiteral = isBooleanLiteral;
     function isFunctionLikeDeclarationKind(kind) {
         switch (kind) {
-            case 252 /* FunctionDeclaration */:
-            case 166 /* MethodDeclaration */:
-            case 167 /* Constructor */:
-            case 168 /* GetAccessor */:
-            case 169 /* SetAccessor */:
-            case 209 /* FunctionExpression */:
-            case 210 /* ArrowFunction */:
+            case 254 /* FunctionDeclaration */:
+            case 167 /* MethodDeclaration */:
+            case 169 /* Constructor */:
+            case 170 /* GetAccessor */:
+            case 171 /* SetAccessor */:
+            case 211 /* FunctionExpression */:
+            case 212 /* ArrowFunction */:
                 return true;
             default:
                 return false;
@@ -12963,14 +13289,14 @@
     /* @internal */
     function isFunctionLikeKind(kind) {
         switch (kind) {
-            case 165 /* MethodSignature */:
-            case 170 /* CallSignature */:
-            case 315 /* JSDocSignature */:
-            case 171 /* ConstructSignature */:
-            case 172 /* IndexSignature */:
-            case 175 /* FunctionType */:
-            case 309 /* JSDocFunctionType */:
-            case 176 /* ConstructorType */:
+            case 166 /* MethodSignature */:
+            case 172 /* CallSignature */:
+            case 318 /* JSDocSignature */:
+            case 173 /* ConstructSignature */:
+            case 174 /* IndexSignature */:
+            case 177 /* FunctionType */:
+            case 312 /* JSDocFunctionType */:
+            case 178 /* ConstructorType */:
                 return true;
             default:
                 return isFunctionLikeDeclarationKind(kind);
@@ -12985,29 +13311,30 @@
     // Classes
     function isClassElement(node) {
         var kind = node.kind;
-        return kind === 167 /* Constructor */
-            || kind === 164 /* PropertyDeclaration */
-            || kind === 166 /* MethodDeclaration */
-            || kind === 168 /* GetAccessor */
-            || kind === 169 /* SetAccessor */
-            || kind === 172 /* IndexSignature */
-            || kind === 230 /* SemicolonClassElement */;
+        return kind === 169 /* Constructor */
+            || kind === 165 /* PropertyDeclaration */
+            || kind === 167 /* MethodDeclaration */
+            || kind === 170 /* GetAccessor */
+            || kind === 171 /* SetAccessor */
+            || kind === 174 /* IndexSignature */
+            || kind === 168 /* ClassStaticBlockDeclaration */
+            || kind === 232 /* SemicolonClassElement */;
     }
     ts.isClassElement = isClassElement;
     function isClassLike(node) {
-        return node && (node.kind === 253 /* ClassDeclaration */ || node.kind === 222 /* ClassExpression */);
+        return node && (node.kind === 255 /* ClassDeclaration */ || node.kind === 224 /* ClassExpression */);
     }
     ts.isClassLike = isClassLike;
     function isAccessor(node) {
-        return node && (node.kind === 168 /* GetAccessor */ || node.kind === 169 /* SetAccessor */);
+        return node && (node.kind === 170 /* GetAccessor */ || node.kind === 171 /* SetAccessor */);
     }
     ts.isAccessor = isAccessor;
     /* @internal */
     function isMethodOrAccessor(node) {
         switch (node.kind) {
-            case 166 /* MethodDeclaration */:
-            case 168 /* GetAccessor */:
-            case 169 /* SetAccessor */:
+            case 167 /* MethodDeclaration */:
+            case 170 /* GetAccessor */:
+            case 171 /* SetAccessor */:
                 return true;
             default:
                 return false;
@@ -13017,11 +13344,11 @@
     // Type members
     function isTypeElement(node) {
         var kind = node.kind;
-        return kind === 171 /* ConstructSignature */
-            || kind === 170 /* CallSignature */
-            || kind === 163 /* PropertySignature */
-            || kind === 165 /* MethodSignature */
-            || kind === 172 /* IndexSignature */;
+        return kind === 173 /* ConstructSignature */
+            || kind === 172 /* CallSignature */
+            || kind === 164 /* PropertySignature */
+            || kind === 166 /* MethodSignature */
+            || kind === 174 /* IndexSignature */;
     }
     ts.isTypeElement = isTypeElement;
     function isClassOrTypeElement(node) {
@@ -13030,12 +13357,12 @@
     ts.isClassOrTypeElement = isClassOrTypeElement;
     function isObjectLiteralElementLike(node) {
         var kind = node.kind;
-        return kind === 289 /* PropertyAssignment */
-            || kind === 290 /* ShorthandPropertyAssignment */
-            || kind === 291 /* SpreadAssignment */
-            || kind === 166 /* MethodDeclaration */
-            || kind === 168 /* GetAccessor */
-            || kind === 169 /* SetAccessor */;
+        return kind === 291 /* PropertyAssignment */
+            || kind === 292 /* ShorthandPropertyAssignment */
+            || kind === 293 /* SpreadAssignment */
+            || kind === 167 /* MethodDeclaration */
+            || kind === 170 /* GetAccessor */
+            || kind === 171 /* SetAccessor */;
     }
     ts.isObjectLiteralElementLike = isObjectLiteralElementLike;
     // Type
@@ -13050,8 +13377,8 @@
     ts.isTypeNode = isTypeNode;
     function isFunctionOrConstructorTypeNode(node) {
         switch (node.kind) {
-            case 175 /* FunctionType */:
-            case 176 /* ConstructorType */:
+            case 177 /* FunctionType */:
+            case 178 /* ConstructorType */:
                 return true;
         }
         return false;
@@ -13062,8 +13389,8 @@
     function isBindingPattern(node) {
         if (node) {
             var kind = node.kind;
-            return kind === 198 /* ArrayBindingPattern */
-                || kind === 197 /* ObjectBindingPattern */;
+            return kind === 200 /* ArrayBindingPattern */
+                || kind === 199 /* ObjectBindingPattern */;
         }
         return false;
     }
@@ -13071,15 +13398,15 @@
     /* @internal */
     function isAssignmentPattern(node) {
         var kind = node.kind;
-        return kind === 200 /* ArrayLiteralExpression */
-            || kind === 201 /* ObjectLiteralExpression */;
+        return kind === 202 /* ArrayLiteralExpression */
+            || kind === 203 /* ObjectLiteralExpression */;
     }
     ts.isAssignmentPattern = isAssignmentPattern;
     /* @internal */
     function isArrayBindingElement(node) {
         var kind = node.kind;
-        return kind === 199 /* BindingElement */
-            || kind === 223 /* OmittedExpression */;
+        return kind === 201 /* BindingElement */
+            || kind === 225 /* OmittedExpression */;
     }
     ts.isArrayBindingElement = isArrayBindingElement;
     /**
@@ -13088,9 +13415,9 @@
     /* @internal */
     function isDeclarationBindingElement(bindingElement) {
         switch (bindingElement.kind) {
-            case 250 /* VariableDeclaration */:
-            case 161 /* Parameter */:
-            case 199 /* BindingElement */:
+            case 252 /* VariableDeclaration */:
+            case 162 /* Parameter */:
+            case 201 /* BindingElement */:
                 return true;
         }
         return false;
@@ -13111,21 +13438,33 @@
     /* @internal */
     function isObjectBindingOrAssignmentPattern(node) {
         switch (node.kind) {
-            case 197 /* ObjectBindingPattern */:
-            case 201 /* ObjectLiteralExpression */:
+            case 199 /* ObjectBindingPattern */:
+            case 203 /* ObjectLiteralExpression */:
                 return true;
         }
         return false;
     }
     ts.isObjectBindingOrAssignmentPattern = isObjectBindingOrAssignmentPattern;
+    /* @internal */
+    function isObjectBindingOrAssignmentElement(node) {
+        switch (node.kind) {
+            case 201 /* BindingElement */:
+            case 291 /* PropertyAssignment */: // AssignmentProperty
+            case 292 /* ShorthandPropertyAssignment */: // AssignmentProperty
+            case 293 /* SpreadAssignment */: // AssignmentRestProperty
+                return true;
+        }
+        return false;
+    }
+    ts.isObjectBindingOrAssignmentElement = isObjectBindingOrAssignmentElement;
     /**
      * Determines whether a node is an ArrayBindingOrAssignmentPattern
      */
     /* @internal */
     function isArrayBindingOrAssignmentPattern(node) {
         switch (node.kind) {
-            case 198 /* ArrayBindingPattern */:
-            case 200 /* ArrayLiteralExpression */:
+            case 200 /* ArrayBindingPattern */:
+            case 202 /* ArrayLiteralExpression */:
                 return true;
         }
         return false;
@@ -13134,26 +13473,26 @@
     /* @internal */
     function isPropertyAccessOrQualifiedNameOrImportTypeNode(node) {
         var kind = node.kind;
-        return kind === 202 /* PropertyAccessExpression */
-            || kind === 158 /* QualifiedName */
-            || kind === 196 /* ImportType */;
+        return kind === 204 /* PropertyAccessExpression */
+            || kind === 159 /* QualifiedName */
+            || kind === 198 /* ImportType */;
     }
     ts.isPropertyAccessOrQualifiedNameOrImportTypeNode = isPropertyAccessOrQualifiedNameOrImportTypeNode;
     // Expression
     function isPropertyAccessOrQualifiedName(node) {
         var kind = node.kind;
-        return kind === 202 /* PropertyAccessExpression */
-            || kind === 158 /* QualifiedName */;
+        return kind === 204 /* PropertyAccessExpression */
+            || kind === 159 /* QualifiedName */;
     }
     ts.isPropertyAccessOrQualifiedName = isPropertyAccessOrQualifiedName;
     function isCallLikeExpression(node) {
         switch (node.kind) {
-            case 276 /* JsxOpeningElement */:
-            case 275 /* JsxSelfClosingElement */:
-            case 204 /* CallExpression */:
-            case 205 /* NewExpression */:
-            case 206 /* TaggedTemplateExpression */:
-            case 162 /* Decorator */:
+            case 278 /* JsxOpeningElement */:
+            case 277 /* JsxSelfClosingElement */:
+            case 206 /* CallExpression */:
+            case 207 /* NewExpression */:
+            case 208 /* TaggedTemplateExpression */:
+            case 163 /* Decorator */:
                 return true;
             default:
                 return false;
@@ -13161,12 +13500,12 @@
     }
     ts.isCallLikeExpression = isCallLikeExpression;
     function isCallOrNewExpression(node) {
-        return node.kind === 204 /* CallExpression */ || node.kind === 205 /* NewExpression */;
+        return node.kind === 206 /* CallExpression */ || node.kind === 207 /* NewExpression */;
     }
     ts.isCallOrNewExpression = isCallOrNewExpression;
     function isTemplateLiteral(node) {
         var kind = node.kind;
-        return kind === 219 /* TemplateExpression */
+        return kind === 221 /* TemplateExpression */
             || kind === 14 /* NoSubstitutionTemplateLiteral */;
     }
     ts.isTemplateLiteral = isTemplateLiteral;
@@ -13177,34 +13516,34 @@
     ts.isLeftHandSideExpression = isLeftHandSideExpression;
     function isLeftHandSideExpressionKind(kind) {
         switch (kind) {
-            case 202 /* PropertyAccessExpression */:
-            case 203 /* ElementAccessExpression */:
-            case 205 /* NewExpression */:
-            case 204 /* CallExpression */:
-            case 274 /* JsxElement */:
-            case 275 /* JsxSelfClosingElement */:
-            case 278 /* JsxFragment */:
-            case 206 /* TaggedTemplateExpression */:
-            case 200 /* ArrayLiteralExpression */:
-            case 208 /* ParenthesizedExpression */:
-            case 201 /* ObjectLiteralExpression */:
-            case 222 /* ClassExpression */:
-            case 209 /* FunctionExpression */:
-            case 78 /* Identifier */:
+            case 204 /* PropertyAccessExpression */:
+            case 205 /* ElementAccessExpression */:
+            case 207 /* NewExpression */:
+            case 206 /* CallExpression */:
+            case 276 /* JsxElement */:
+            case 277 /* JsxSelfClosingElement */:
+            case 280 /* JsxFragment */:
+            case 208 /* TaggedTemplateExpression */:
+            case 202 /* ArrayLiteralExpression */:
+            case 210 /* ParenthesizedExpression */:
+            case 203 /* ObjectLiteralExpression */:
+            case 224 /* ClassExpression */:
+            case 211 /* FunctionExpression */:
+            case 79 /* Identifier */:
             case 13 /* RegularExpressionLiteral */:
             case 8 /* NumericLiteral */:
             case 9 /* BigIntLiteral */:
             case 10 /* StringLiteral */:
             case 14 /* NoSubstitutionTemplateLiteral */:
-            case 219 /* TemplateExpression */:
-            case 94 /* FalseKeyword */:
-            case 103 /* NullKeyword */:
-            case 107 /* ThisKeyword */:
-            case 109 /* TrueKeyword */:
-            case 105 /* SuperKeyword */:
-            case 226 /* NonNullExpression */:
-            case 227 /* MetaProperty */:
-            case 99 /* ImportKeyword */: // technically this is only an Expression if it's in a CallExpression
+            case 221 /* TemplateExpression */:
+            case 95 /* FalseKeyword */:
+            case 104 /* NullKeyword */:
+            case 108 /* ThisKeyword */:
+            case 110 /* TrueKeyword */:
+            case 106 /* SuperKeyword */:
+            case 228 /* NonNullExpression */:
+            case 229 /* MetaProperty */:
+            case 100 /* ImportKeyword */: // technically this is only an Expression if it's in a CallExpression
                 return true;
             default:
                 return false;
@@ -13217,13 +13556,13 @@
     ts.isUnaryExpression = isUnaryExpression;
     function isUnaryExpressionKind(kind) {
         switch (kind) {
-            case 215 /* PrefixUnaryExpression */:
-            case 216 /* PostfixUnaryExpression */:
-            case 211 /* DeleteExpression */:
-            case 212 /* TypeOfExpression */:
-            case 213 /* VoidExpression */:
-            case 214 /* AwaitExpression */:
-            case 207 /* TypeAssertionExpression */:
+            case 217 /* PrefixUnaryExpression */:
+            case 218 /* PostfixUnaryExpression */:
+            case 213 /* DeleteExpression */:
+            case 214 /* TypeOfExpression */:
+            case 215 /* VoidExpression */:
+            case 216 /* AwaitExpression */:
+            case 209 /* TypeAssertionExpression */:
                 return true;
             default:
                 return isLeftHandSideExpressionKind(kind);
@@ -13232,9 +13571,9 @@
     /* @internal */
     function isUnaryExpressionWithWrite(expr) {
         switch (expr.kind) {
-            case 216 /* PostfixUnaryExpression */:
+            case 218 /* PostfixUnaryExpression */:
                 return true;
-            case 215 /* PrefixUnaryExpression */:
+            case 217 /* PrefixUnaryExpression */:
                 return expr.operator === 45 /* PlusPlusToken */ ||
                     expr.operator === 46 /* MinusMinusToken */;
             default:
@@ -13253,15 +13592,15 @@
     ts.isExpression = isExpression;
     function isExpressionKind(kind) {
         switch (kind) {
-            case 218 /* ConditionalExpression */:
-            case 220 /* YieldExpression */:
-            case 210 /* ArrowFunction */:
-            case 217 /* BinaryExpression */:
-            case 221 /* SpreadElement */:
-            case 225 /* AsExpression */:
-            case 223 /* OmittedExpression */:
-            case 341 /* CommaListExpression */:
-            case 340 /* PartiallyEmittedExpression */:
+            case 220 /* ConditionalExpression */:
+            case 222 /* YieldExpression */:
+            case 212 /* ArrowFunction */:
+            case 219 /* BinaryExpression */:
+            case 223 /* SpreadElement */:
+            case 227 /* AsExpression */:
+            case 225 /* OmittedExpression */:
+            case 346 /* CommaListExpression */:
+            case 345 /* PartiallyEmittedExpression */:
                 return true;
             default:
                 return isUnaryExpressionKind(kind);
@@ -13269,8 +13608,8 @@
     }
     function isAssertionExpression(node) {
         var kind = node.kind;
-        return kind === 207 /* TypeAssertionExpression */
-            || kind === 225 /* AsExpression */;
+        return kind === 209 /* TypeAssertionExpression */
+            || kind === 227 /* AsExpression */;
     }
     ts.isAssertionExpression = isAssertionExpression;
     /* @internal */
@@ -13281,13 +13620,13 @@
     ts.isNotEmittedOrPartiallyEmittedNode = isNotEmittedOrPartiallyEmittedNode;
     function isIterationStatement(node, lookInLabeledStatements) {
         switch (node.kind) {
-            case 238 /* ForStatement */:
-            case 239 /* ForInStatement */:
-            case 240 /* ForOfStatement */:
-            case 236 /* DoStatement */:
-            case 237 /* WhileStatement */:
+            case 240 /* ForStatement */:
+            case 241 /* ForInStatement */:
+            case 242 /* ForOfStatement */:
+            case 238 /* DoStatement */:
+            case 239 /* WhileStatement */:
                 return true;
-            case 246 /* LabeledStatement */:
+            case 248 /* LabeledStatement */:
                 return lookInLabeledStatements && isIterationStatement(node.statement, lookInLabeledStatements);
         }
         return false;
@@ -13316,7 +13655,7 @@
     ts.isExternalModuleIndicator = isExternalModuleIndicator;
     /* @internal */
     function isForInOrOfStatement(node) {
-        return node.kind === 239 /* ForInStatement */ || node.kind === 240 /* ForOfStatement */;
+        return node.kind === 241 /* ForInStatement */ || node.kind === 242 /* ForOfStatement */;
     }
     ts.isForInOrOfStatement = isForInOrOfStatement;
     // Element
@@ -13340,114 +13679,115 @@
     /* @internal */
     function isModuleBody(node) {
         var kind = node.kind;
-        return kind === 258 /* ModuleBlock */
-            || kind === 257 /* ModuleDeclaration */
-            || kind === 78 /* Identifier */;
+        return kind === 260 /* ModuleBlock */
+            || kind === 259 /* ModuleDeclaration */
+            || kind === 79 /* Identifier */;
     }
     ts.isModuleBody = isModuleBody;
     /* @internal */
     function isNamespaceBody(node) {
         var kind = node.kind;
-        return kind === 258 /* ModuleBlock */
-            || kind === 257 /* ModuleDeclaration */;
+        return kind === 260 /* ModuleBlock */
+            || kind === 259 /* ModuleDeclaration */;
     }
     ts.isNamespaceBody = isNamespaceBody;
     /* @internal */
     function isJSDocNamespaceBody(node) {
         var kind = node.kind;
-        return kind === 78 /* Identifier */
-            || kind === 257 /* ModuleDeclaration */;
+        return kind === 79 /* Identifier */
+            || kind === 259 /* ModuleDeclaration */;
     }
     ts.isJSDocNamespaceBody = isJSDocNamespaceBody;
     /* @internal */
     function isNamedImportBindings(node) {
         var kind = node.kind;
-        return kind === 265 /* NamedImports */
-            || kind === 264 /* NamespaceImport */;
+        return kind === 267 /* NamedImports */
+            || kind === 266 /* NamespaceImport */;
     }
     ts.isNamedImportBindings = isNamedImportBindings;
     /* @internal */
     function isModuleOrEnumDeclaration(node) {
-        return node.kind === 257 /* ModuleDeclaration */ || node.kind === 256 /* EnumDeclaration */;
+        return node.kind === 259 /* ModuleDeclaration */ || node.kind === 258 /* EnumDeclaration */;
     }
     ts.isModuleOrEnumDeclaration = isModuleOrEnumDeclaration;
     function isDeclarationKind(kind) {
-        return kind === 210 /* ArrowFunction */
-            || kind === 199 /* BindingElement */
-            || kind === 253 /* ClassDeclaration */
-            || kind === 222 /* ClassExpression */
-            || kind === 167 /* Constructor */
-            || kind === 256 /* EnumDeclaration */
-            || kind === 292 /* EnumMember */
-            || kind === 271 /* ExportSpecifier */
-            || kind === 252 /* FunctionDeclaration */
-            || kind === 209 /* FunctionExpression */
-            || kind === 168 /* GetAccessor */
-            || kind === 263 /* ImportClause */
-            || kind === 261 /* ImportEqualsDeclaration */
-            || kind === 266 /* ImportSpecifier */
-            || kind === 254 /* InterfaceDeclaration */
-            || kind === 281 /* JsxAttribute */
-            || kind === 166 /* MethodDeclaration */
-            || kind === 165 /* MethodSignature */
-            || kind === 257 /* ModuleDeclaration */
-            || kind === 260 /* NamespaceExportDeclaration */
-            || kind === 264 /* NamespaceImport */
-            || kind === 270 /* NamespaceExport */
-            || kind === 161 /* Parameter */
-            || kind === 289 /* PropertyAssignment */
-            || kind === 164 /* PropertyDeclaration */
-            || kind === 163 /* PropertySignature */
-            || kind === 169 /* SetAccessor */
-            || kind === 290 /* ShorthandPropertyAssignment */
-            || kind === 255 /* TypeAliasDeclaration */
-            || kind === 160 /* TypeParameter */
-            || kind === 250 /* VariableDeclaration */
-            || kind === 335 /* JSDocTypedefTag */
-            || kind === 328 /* JSDocCallbackTag */
-            || kind === 337 /* JSDocPropertyTag */;
+        return kind === 212 /* ArrowFunction */
+            || kind === 201 /* BindingElement */
+            || kind === 255 /* ClassDeclaration */
+            || kind === 224 /* ClassExpression */
+            || kind === 168 /* ClassStaticBlockDeclaration */
+            || kind === 169 /* Constructor */
+            || kind === 258 /* EnumDeclaration */
+            || kind === 294 /* EnumMember */
+            || kind === 273 /* ExportSpecifier */
+            || kind === 254 /* FunctionDeclaration */
+            || kind === 211 /* FunctionExpression */
+            || kind === 170 /* GetAccessor */
+            || kind === 265 /* ImportClause */
+            || kind === 263 /* ImportEqualsDeclaration */
+            || kind === 268 /* ImportSpecifier */
+            || kind === 256 /* InterfaceDeclaration */
+            || kind === 283 /* JsxAttribute */
+            || kind === 167 /* MethodDeclaration */
+            || kind === 166 /* MethodSignature */
+            || kind === 259 /* ModuleDeclaration */
+            || kind === 262 /* NamespaceExportDeclaration */
+            || kind === 266 /* NamespaceImport */
+            || kind === 272 /* NamespaceExport */
+            || kind === 162 /* Parameter */
+            || kind === 291 /* PropertyAssignment */
+            || kind === 165 /* PropertyDeclaration */
+            || kind === 164 /* PropertySignature */
+            || kind === 171 /* SetAccessor */
+            || kind === 292 /* ShorthandPropertyAssignment */
+            || kind === 257 /* TypeAliasDeclaration */
+            || kind === 161 /* TypeParameter */
+            || kind === 252 /* VariableDeclaration */
+            || kind === 340 /* JSDocTypedefTag */
+            || kind === 333 /* JSDocCallbackTag */
+            || kind === 342 /* JSDocPropertyTag */;
     }
     function isDeclarationStatementKind(kind) {
-        return kind === 252 /* FunctionDeclaration */
-            || kind === 272 /* MissingDeclaration */
-            || kind === 253 /* ClassDeclaration */
-            || kind === 254 /* InterfaceDeclaration */
-            || kind === 255 /* TypeAliasDeclaration */
-            || kind === 256 /* EnumDeclaration */
-            || kind === 257 /* ModuleDeclaration */
-            || kind === 262 /* ImportDeclaration */
-            || kind === 261 /* ImportEqualsDeclaration */
-            || kind === 268 /* ExportDeclaration */
-            || kind === 267 /* ExportAssignment */
-            || kind === 260 /* NamespaceExportDeclaration */;
+        return kind === 254 /* FunctionDeclaration */
+            || kind === 274 /* MissingDeclaration */
+            || kind === 255 /* ClassDeclaration */
+            || kind === 256 /* InterfaceDeclaration */
+            || kind === 257 /* TypeAliasDeclaration */
+            || kind === 258 /* EnumDeclaration */
+            || kind === 259 /* ModuleDeclaration */
+            || kind === 264 /* ImportDeclaration */
+            || kind === 263 /* ImportEqualsDeclaration */
+            || kind === 270 /* ExportDeclaration */
+            || kind === 269 /* ExportAssignment */
+            || kind === 262 /* NamespaceExportDeclaration */;
     }
     function isStatementKindButNotDeclarationKind(kind) {
-        return kind === 242 /* BreakStatement */
-            || kind === 241 /* ContinueStatement */
-            || kind === 249 /* DebuggerStatement */
-            || kind === 236 /* DoStatement */
-            || kind === 234 /* ExpressionStatement */
-            || kind === 232 /* EmptyStatement */
-            || kind === 239 /* ForInStatement */
-            || kind === 240 /* ForOfStatement */
-            || kind === 238 /* ForStatement */
-            || kind === 235 /* IfStatement */
-            || kind === 246 /* LabeledStatement */
-            || kind === 243 /* ReturnStatement */
-            || kind === 245 /* SwitchStatement */
-            || kind === 247 /* ThrowStatement */
-            || kind === 248 /* TryStatement */
-            || kind === 233 /* VariableStatement */
-            || kind === 237 /* WhileStatement */
-            || kind === 244 /* WithStatement */
-            || kind === 339 /* NotEmittedStatement */
-            || kind === 343 /* EndOfDeclarationMarker */
-            || kind === 342 /* MergeDeclarationMarker */;
+        return kind === 244 /* BreakStatement */
+            || kind === 243 /* ContinueStatement */
+            || kind === 251 /* DebuggerStatement */
+            || kind === 238 /* DoStatement */
+            || kind === 236 /* ExpressionStatement */
+            || kind === 234 /* EmptyStatement */
+            || kind === 241 /* ForInStatement */
+            || kind === 242 /* ForOfStatement */
+            || kind === 240 /* ForStatement */
+            || kind === 237 /* IfStatement */
+            || kind === 248 /* LabeledStatement */
+            || kind === 245 /* ReturnStatement */
+            || kind === 247 /* SwitchStatement */
+            || kind === 249 /* ThrowStatement */
+            || kind === 250 /* TryStatement */
+            || kind === 235 /* VariableStatement */
+            || kind === 239 /* WhileStatement */
+            || kind === 246 /* WithStatement */
+            || kind === 344 /* NotEmittedStatement */
+            || kind === 348 /* EndOfDeclarationMarker */
+            || kind === 347 /* MergeDeclarationMarker */;
     }
     /* @internal */
     function isDeclaration(node) {
-        if (node.kind === 160 /* TypeParameter */) {
-            return (node.parent && node.parent.kind !== 334 /* JSDocTemplateTag */) || ts.isInJSFile(node);
+        if (node.kind === 161 /* TypeParameter */) {
+            return (node.parent && node.parent.kind !== 339 /* JSDocTemplateTag */) || ts.isInJSFile(node);
         }
         return isDeclarationKind(node.kind);
     }
@@ -13474,10 +13814,10 @@
     }
     ts.isStatement = isStatement;
     function isBlockStatement(node) {
-        if (node.kind !== 231 /* Block */)
+        if (node.kind !== 233 /* Block */)
             return false;
         if (node.parent !== undefined) {
-            if (node.parent.kind === 248 /* TryStatement */ || node.parent.kind === 288 /* CatchClause */) {
+            if (node.parent.kind === 250 /* TryStatement */ || node.parent.kind === 290 /* CatchClause */) {
                 return false;
             }
         }
@@ -13491,77 +13831,77 @@
         var kind = node.kind;
         return isStatementKindButNotDeclarationKind(kind)
             || isDeclarationStatementKind(kind)
-            || kind === 231 /* Block */;
+            || kind === 233 /* Block */;
     }
     ts.isStatementOrBlock = isStatementOrBlock;
     // Module references
     /* @internal */
     function isModuleReference(node) {
         var kind = node.kind;
-        return kind === 273 /* ExternalModuleReference */
-            || kind === 158 /* QualifiedName */
-            || kind === 78 /* Identifier */;
+        return kind === 275 /* ExternalModuleReference */
+            || kind === 159 /* QualifiedName */
+            || kind === 79 /* Identifier */;
     }
     ts.isModuleReference = isModuleReference;
     // JSX
     /* @internal */
     function isJsxTagNameExpression(node) {
         var kind = node.kind;
-        return kind === 107 /* ThisKeyword */
-            || kind === 78 /* Identifier */
-            || kind === 202 /* PropertyAccessExpression */;
+        return kind === 108 /* ThisKeyword */
+            || kind === 79 /* Identifier */
+            || kind === 204 /* PropertyAccessExpression */;
     }
     ts.isJsxTagNameExpression = isJsxTagNameExpression;
     /* @internal */
     function isJsxChild(node) {
         var kind = node.kind;
-        return kind === 274 /* JsxElement */
-            || kind === 284 /* JsxExpression */
-            || kind === 275 /* JsxSelfClosingElement */
+        return kind === 276 /* JsxElement */
+            || kind === 286 /* JsxExpression */
+            || kind === 277 /* JsxSelfClosingElement */
             || kind === 11 /* JsxText */
-            || kind === 278 /* JsxFragment */;
+            || kind === 280 /* JsxFragment */;
     }
     ts.isJsxChild = isJsxChild;
     /* @internal */
     function isJsxAttributeLike(node) {
         var kind = node.kind;
-        return kind === 281 /* JsxAttribute */
-            || kind === 283 /* JsxSpreadAttribute */;
+        return kind === 283 /* JsxAttribute */
+            || kind === 285 /* JsxSpreadAttribute */;
     }
     ts.isJsxAttributeLike = isJsxAttributeLike;
     /* @internal */
     function isStringLiteralOrJsxExpression(node) {
         var kind = node.kind;
         return kind === 10 /* StringLiteral */
-            || kind === 284 /* JsxExpression */;
+            || kind === 286 /* JsxExpression */;
     }
     ts.isStringLiteralOrJsxExpression = isStringLiteralOrJsxExpression;
     function isJsxOpeningLikeElement(node) {
         var kind = node.kind;
-        return kind === 276 /* JsxOpeningElement */
-            || kind === 275 /* JsxSelfClosingElement */;
+        return kind === 278 /* JsxOpeningElement */
+            || kind === 277 /* JsxSelfClosingElement */;
     }
     ts.isJsxOpeningLikeElement = isJsxOpeningLikeElement;
     // Clauses
     function isCaseOrDefaultClause(node) {
         var kind = node.kind;
-        return kind === 285 /* CaseClause */
-            || kind === 286 /* DefaultClause */;
+        return kind === 287 /* CaseClause */
+            || kind === 288 /* DefaultClause */;
     }
     ts.isCaseOrDefaultClause = isCaseOrDefaultClause;
     // JSDoc
     /** True if node is of some JSDoc syntax kind. */
     /* @internal */
     function isJSDocNode(node) {
-        return node.kind >= 302 /* FirstJSDocNode */ && node.kind <= 337 /* LastJSDocNode */;
+        return node.kind >= 304 /* FirstJSDocNode */ && node.kind <= 342 /* LastJSDocNode */;
     }
     ts.isJSDocNode = isJSDocNode;
     /** True if node is of a kind that may contain comment text. */
     function isJSDocCommentContainingNode(node) {
-        return node.kind === 312 /* JSDocComment */
-            || node.kind === 311 /* JSDocNamepathType */
-            || node.kind === 313 /* JSDocText */
-            || node.kind === 316 /* JSDocLink */
+        return node.kind === 315 /* JSDocComment */
+            || node.kind === 314 /* JSDocNamepathType */
+            || node.kind === 316 /* JSDocText */
+            || isJSDocLinkLike(node)
             || isJSDocTag(node)
             || ts.isJSDocTypeLiteral(node)
             || ts.isJSDocSignature(node);
@@ -13570,15 +13910,15 @@
     // TODO: determine what this does before making it public.
     /* @internal */
     function isJSDocTag(node) {
-        return node.kind >= 317 /* FirstJSDocTagNode */ && node.kind <= 337 /* LastJSDocTagNode */;
+        return node.kind >= 322 /* FirstJSDocTagNode */ && node.kind <= 342 /* LastJSDocTagNode */;
     }
     ts.isJSDocTag = isJSDocTag;
     function isSetAccessor(node) {
-        return node.kind === 169 /* SetAccessor */;
+        return node.kind === 171 /* SetAccessor */;
     }
     ts.isSetAccessor = isSetAccessor;
     function isGetAccessor(node) {
-        return node.kind === 168 /* GetAccessor */;
+        return node.kind === 170 /* GetAccessor */;
     }
     ts.isGetAccessor = isGetAccessor;
     /** True if has jsdoc nodes attached to it. */
@@ -13604,13 +13944,13 @@
     /** True if has initializer node attached to it. */
     function hasOnlyExpressionInitializer(node) {
         switch (node.kind) {
-            case 250 /* VariableDeclaration */:
-            case 161 /* Parameter */:
-            case 199 /* BindingElement */:
-            case 163 /* PropertySignature */:
-            case 164 /* PropertyDeclaration */:
-            case 289 /* PropertyAssignment */:
-            case 292 /* EnumMember */:
+            case 252 /* VariableDeclaration */:
+            case 162 /* Parameter */:
+            case 201 /* BindingElement */:
+            case 164 /* PropertySignature */:
+            case 165 /* PropertyDeclaration */:
+            case 291 /* PropertyAssignment */:
+            case 294 /* EnumMember */:
                 return true;
             default:
                 return false;
@@ -13618,12 +13958,12 @@
     }
     ts.hasOnlyExpressionInitializer = hasOnlyExpressionInitializer;
     function isObjectLiteralElement(node) {
-        return node.kind === 281 /* JsxAttribute */ || node.kind === 283 /* JsxSpreadAttribute */ || isObjectLiteralElementLike(node);
+        return node.kind === 283 /* JsxAttribute */ || node.kind === 285 /* JsxSpreadAttribute */ || isObjectLiteralElementLike(node);
     }
     ts.isObjectLiteralElement = isObjectLiteralElement;
     /* @internal */
     function isTypeReferenceType(node) {
-        return node.kind === 174 /* TypeReference */ || node.kind === 224 /* ExpressionWithTypeArguments */;
+        return node.kind === 176 /* TypeReference */ || node.kind === 226 /* ExpressionWithTypeArguments */;
     }
     ts.isTypeReferenceType = isTypeReferenceType;
     var MAX_SMI_X86 = 1073741823;
@@ -13655,6 +13995,10 @@
         return node.kind === 10 /* StringLiteral */ || node.kind === 14 /* NoSubstitutionTemplateLiteral */;
     }
     ts.isStringLiteralLike = isStringLiteralLike;
+    function isJSDocLinkLike(node) {
+        return node.kind === 319 /* JSDocLink */ || node.kind === 320 /* JSDocLinkCode */ || node.kind === 321 /* JSDocLinkPlain */;
+    }
+    ts.isJSDocLinkLike = isJSDocLinkLike;
     // #endregion
 })(ts || (ts = {}));
 /* @internal */
@@ -13739,7 +14083,7 @@
             increaseIndent: ts.noop,
             decreaseIndent: ts.noop,
             clear: function () { return str = ""; },
-            trackSymbol: ts.noop,
+            trackSymbol: function () { return false; },
             reportInaccessibleThisError: ts.noop,
             reportInaccessibleUniqueSymbolError: ts.noop,
             reportPrivateInBaseOfClassExpression: ts.noop,
@@ -13751,11 +14095,19 @@
     }
     ts.changesAffectModuleResolution = changesAffectModuleResolution;
     function optionsHaveModuleResolutionChanges(oldOptions, newOptions) {
-        return ts.moduleResolutionOptionDeclarations.some(function (o) {
+        return optionsHaveChanges(oldOptions, newOptions, ts.moduleResolutionOptionDeclarations);
+    }
+    ts.optionsHaveModuleResolutionChanges = optionsHaveModuleResolutionChanges;
+    function changesAffectingProgramStructure(oldOptions, newOptions) {
+        return optionsHaveChanges(oldOptions, newOptions, ts.optionsAffectingProgramStructure);
+    }
+    ts.changesAffectingProgramStructure = changesAffectingProgramStructure;
+    function optionsHaveChanges(oldOptions, newOptions, optionDeclarations) {
+        return oldOptions !== newOptions && optionDeclarations.some(function (o) {
             return !isJsonEqual(getCompilerOptionValue(oldOptions, o), getCompilerOptionValue(newOptions, o));
         });
     }
-    ts.optionsHaveModuleResolutionChanges = optionsHaveModuleResolutionChanges;
+    ts.optionsHaveChanges = optionsHaveChanges;
     function forEachAncestor(node, callback) {
         while (true) {
             var res = callback(node);
@@ -13906,19 +14258,23 @@
         }
     }
     function getSourceFileOfNode(node) {
-        while (node && node.kind !== 298 /* SourceFile */) {
+        while (node && node.kind !== 300 /* SourceFile */) {
             node = node.parent;
         }
         return node;
     }
     ts.getSourceFileOfNode = getSourceFileOfNode;
+    function getSourceFileOfModule(module) {
+        return getSourceFileOfNode(module.valueDeclaration || getNonAugmentationDeclaration(module));
+    }
+    ts.getSourceFileOfModule = getSourceFileOfModule;
     function isStatementWithLocals(node) {
         switch (node.kind) {
-            case 231 /* Block */:
-            case 259 /* CaseBlock */:
-            case 238 /* ForStatement */:
-            case 239 /* ForInStatement */:
-            case 240 /* ForOfStatement */:
+            case 233 /* Block */:
+            case 261 /* CaseBlock */:
+            case 240 /* ForStatement */:
+            case 241 /* ForInStatement */:
+            case 242 /* ForOfStatement */:
                 return true;
         }
         return false;
@@ -14003,7 +14359,7 @@
                 break;
             }
         }
-        to.splice.apply(to, __spreadArray([statementIndex, 0], from));
+        to.splice.apply(to, __spreadArray([statementIndex, 0], from, false));
         return to;
     }
     function insertStatementAfterPrologue(to, statement, isPrologueDirective) {
@@ -14056,10 +14412,10 @@
             commentPos + 2 < commentEnd &&
             text.charCodeAt(commentPos + 2) === 47 /* slash */) {
             var textSubStr = text.substring(commentPos, commentEnd);
-            return textSubStr.match(ts.fullTripleSlashReferencePathRegEx) ||
-                textSubStr.match(ts.fullTripleSlashAMDReferencePathRegEx) ||
-                textSubStr.match(fullTripleSlashReferenceTypeReferenceDirectiveRegEx) ||
-                textSubStr.match(defaultLibReferenceRegEx) ?
+            return ts.fullTripleSlashReferencePathRegEx.test(textSubStr) ||
+                ts.fullTripleSlashAMDReferencePathRegEx.test(textSubStr) ||
+                fullTripleSlashReferenceTypeReferenceDirectiveRegEx.test(textSubStr) ||
+                defaultLibReferenceRegEx.test(textSubStr) ?
                 true : false;
         }
         return false;
@@ -14114,7 +14470,7 @@
         // the syntax list itself considers them as normal trivia. Therefore if we simply skip
         // trivia for the list, we may have skipped the JSDocComment as well. So we should process its
         // first child to determine the actual position of its first token.
-        if (node.kind === 338 /* SyntaxList */ && node._children.length > 0) {
+        if (node.kind === 343 /* SyntaxList */ && node._children.length > 0) {
             return getTokenPosOfNode(node._children[0], sourceFile, includeJsDoc);
         }
         return ts.skipTrivia((sourceFile || getSourceFileOfNode(node)).text, node.pos, 
@@ -14149,7 +14505,7 @@
         var text = sourceText.substring(includeTrivia ? node.pos : ts.skipTrivia(sourceText, node.pos), node.end);
         if (isJSDocTypeExpressionOrChild(node)) {
             // strip space + asterisk at line start
-            text = text.replace(/(^|\r?\n|\r)\s*\*\s*/g, "$1");
+            text = text.split(/\r\n|\n|\r/).map(function (line) { return ts.trimStringStart(line.replace(/^\s*\*/, "")); }).join("\n");
         }
         return text;
     }
@@ -14257,6 +14613,7 @@
         GetLiteralTextFlags[GetLiteralTextFlags["AllowNumericSeparator"] = 8] = "AllowNumericSeparator";
     })(GetLiteralTextFlags = ts.GetLiteralTextFlags || (ts.GetLiteralTextFlags = {}));
     function getLiteralText(node, sourceFile, flags) {
+        var _a;
         // If we don't need to downlevel and we can reach the original source text using
         // the node's parent reference, then simply get the text as it was originally written.
         if (canUseOriginalText(node, flags)) {
@@ -14284,7 +14641,7 @@
                 // had to include a backslash: `not \${a} substitution`.
                 var escapeText = flags & 1 /* NeverAsciiEscape */ || (getEmitFlags(node) & 16777216 /* NoAsciiEscaping */) ? escapeString :
                     escapeNonAsciiString;
-                var rawText = node.rawText || escapeTemplateSubstitution(escapeText(node.text, 96 /* backtick */));
+                var rawText = (_a = node.rawText) !== null && _a !== void 0 ? _a : escapeTemplateSubstitution(escapeText(node.text, 96 /* backtick */));
                 switch (node.kind) {
                     case 14 /* NoSubstitutionTemplateLiteral */:
                         return "`" + rawText + "`";
@@ -14335,7 +14692,7 @@
     ts.isBlockOrCatchScoped = isBlockOrCatchScoped;
     function isCatchClauseVariableDeclarationOrBindingElement(declaration) {
         var node = getRootDeclaration(declaration);
-        return node.kind === 250 /* VariableDeclaration */ && node.parent.kind === 288 /* CatchClause */;
+        return node.kind === 252 /* VariableDeclaration */ && node.parent.kind === 290 /* CatchClause */;
     }
     ts.isCatchClauseVariableDeclarationOrBindingElement = isCatchClauseVariableDeclarationOrBindingElement;
     function isAmbientModule(node) {
@@ -14367,12 +14724,12 @@
     ts.isShorthandAmbientModuleSymbol = isShorthandAmbientModuleSymbol;
     function isShorthandAmbientModule(node) {
         // The only kind of module that can be missing a body is a shorthand ambient module.
-        return !!node && node.kind === 257 /* ModuleDeclaration */ && (!node.body);
+        return !!node && node.kind === 259 /* ModuleDeclaration */ && (!node.body);
     }
     function isBlockScopedContainerTopLevel(node) {
-        return node.kind === 298 /* SourceFile */ ||
-            node.kind === 257 /* ModuleDeclaration */ ||
-            ts.isFunctionLike(node);
+        return node.kind === 300 /* SourceFile */ ||
+            node.kind === 259 /* ModuleDeclaration */ ||
+            ts.isFunctionLikeOrClassStaticBlockDeclaration(node);
     }
     ts.isBlockScopedContainerTopLevel = isBlockScopedContainerTopLevel;
     function isGlobalScopeAugmentation(module) {
@@ -14388,9 +14745,9 @@
         // - defined in the top level scope and source file is an external module
         // - defined inside ambient module declaration located in the top level scope and source file not an external module
         switch (node.parent.kind) {
-            case 298 /* SourceFile */:
+            case 300 /* SourceFile */:
                 return ts.isExternalModule(node.parent);
-            case 258 /* ModuleBlock */:
+            case 260 /* ModuleBlock */:
                 return isAmbientModule(node.parent.parent) && ts.isSourceFile(node.parent.parent.parent) && !ts.isExternalModule(node.parent.parent.parent);
         }
         return false;
@@ -14444,34 +14801,36 @@
     ts.isEffectiveStrictModeSourceFile = isEffectiveStrictModeSourceFile;
     function isBlockScope(node, parentNode) {
         switch (node.kind) {
-            case 298 /* SourceFile */:
-            case 259 /* CaseBlock */:
-            case 288 /* CatchClause */:
-            case 257 /* ModuleDeclaration */:
-            case 238 /* ForStatement */:
-            case 239 /* ForInStatement */:
-            case 240 /* ForOfStatement */:
-            case 167 /* Constructor */:
-            case 166 /* MethodDeclaration */:
-            case 168 /* GetAccessor */:
-            case 169 /* SetAccessor */:
-            case 252 /* FunctionDeclaration */:
-            case 209 /* FunctionExpression */:
-            case 210 /* ArrowFunction */:
+            case 300 /* SourceFile */:
+            case 261 /* CaseBlock */:
+            case 290 /* CatchClause */:
+            case 259 /* ModuleDeclaration */:
+            case 240 /* ForStatement */:
+            case 241 /* ForInStatement */:
+            case 242 /* ForOfStatement */:
+            case 169 /* Constructor */:
+            case 167 /* MethodDeclaration */:
+            case 170 /* GetAccessor */:
+            case 171 /* SetAccessor */:
+            case 254 /* FunctionDeclaration */:
+            case 211 /* FunctionExpression */:
+            case 212 /* ArrowFunction */:
+            case 165 /* PropertyDeclaration */:
+            case 168 /* ClassStaticBlockDeclaration */:
                 return true;
-            case 231 /* Block */:
+            case 233 /* Block */:
                 // function block is not considered block-scope container
                 // see comment in binder.ts: bind(...), case for SyntaxKind.Block
-                return !ts.isFunctionLike(parentNode);
+                return !ts.isFunctionLikeOrClassStaticBlockDeclaration(parentNode);
         }
         return false;
     }
     ts.isBlockScope = isBlockScope;
     function isDeclarationWithTypeParameters(node) {
         switch (node.kind) {
-            case 328 /* JSDocCallbackTag */:
-            case 335 /* JSDocTypedefTag */:
-            case 315 /* JSDocSignature */:
+            case 333 /* JSDocCallbackTag */:
+            case 340 /* JSDocTypedefTag */:
+            case 318 /* JSDocSignature */:
                 return true;
             default:
                 ts.assertType(node);
@@ -14481,25 +14840,25 @@
     ts.isDeclarationWithTypeParameters = isDeclarationWithTypeParameters;
     function isDeclarationWithTypeParameterChildren(node) {
         switch (node.kind) {
-            case 170 /* CallSignature */:
-            case 171 /* ConstructSignature */:
-            case 165 /* MethodSignature */:
-            case 172 /* IndexSignature */:
-            case 175 /* FunctionType */:
-            case 176 /* ConstructorType */:
-            case 309 /* JSDocFunctionType */:
-            case 253 /* ClassDeclaration */:
-            case 222 /* ClassExpression */:
-            case 254 /* InterfaceDeclaration */:
-            case 255 /* TypeAliasDeclaration */:
-            case 334 /* JSDocTemplateTag */:
-            case 252 /* FunctionDeclaration */:
-            case 166 /* MethodDeclaration */:
-            case 167 /* Constructor */:
-            case 168 /* GetAccessor */:
-            case 169 /* SetAccessor */:
-            case 209 /* FunctionExpression */:
-            case 210 /* ArrowFunction */:
+            case 172 /* CallSignature */:
+            case 173 /* ConstructSignature */:
+            case 166 /* MethodSignature */:
+            case 174 /* IndexSignature */:
+            case 177 /* FunctionType */:
+            case 178 /* ConstructorType */:
+            case 312 /* JSDocFunctionType */:
+            case 255 /* ClassDeclaration */:
+            case 224 /* ClassExpression */:
+            case 256 /* InterfaceDeclaration */:
+            case 257 /* TypeAliasDeclaration */:
+            case 339 /* JSDocTemplateTag */:
+            case 254 /* FunctionDeclaration */:
+            case 167 /* MethodDeclaration */:
+            case 169 /* Constructor */:
+            case 170 /* GetAccessor */:
+            case 171 /* SetAccessor */:
+            case 211 /* FunctionExpression */:
+            case 212 /* ArrowFunction */:
                 return true;
             default:
                 ts.assertType(node);
@@ -14509,8 +14868,8 @@
     ts.isDeclarationWithTypeParameterChildren = isDeclarationWithTypeParameterChildren;
     function isAnyImportSyntax(node) {
         switch (node.kind) {
-            case 262 /* ImportDeclaration */:
-            case 261 /* ImportEqualsDeclaration */:
+            case 264 /* ImportDeclaration */:
+            case 263 /* ImportEqualsDeclaration */:
                 return true;
             default:
                 return false;
@@ -14519,15 +14878,15 @@
     ts.isAnyImportSyntax = isAnyImportSyntax;
     function isLateVisibilityPaintedStatement(node) {
         switch (node.kind) {
-            case 262 /* ImportDeclaration */:
-            case 261 /* ImportEqualsDeclaration */:
-            case 233 /* VariableStatement */:
-            case 253 /* ClassDeclaration */:
-            case 252 /* FunctionDeclaration */:
-            case 257 /* ModuleDeclaration */:
-            case 255 /* TypeAliasDeclaration */:
-            case 254 /* InterfaceDeclaration */:
-            case 256 /* EnumDeclaration */:
+            case 264 /* ImportDeclaration */:
+            case 263 /* ImportEqualsDeclaration */:
+            case 235 /* VariableStatement */:
+            case 255 /* ClassDeclaration */:
+            case 254 /* FunctionDeclaration */:
+            case 259 /* ModuleDeclaration */:
+            case 257 /* TypeAliasDeclaration */:
+            case 256 /* InterfaceDeclaration */:
+            case 258 /* EnumDeclaration */:
                 return true;
             default:
                 return false;
@@ -14548,6 +14907,14 @@
         return ts.findAncestor(node.parent, function (current) { return isBlockScope(current, current.parent); });
     }
     ts.getEnclosingBlockScopeContainer = getEnclosingBlockScopeContainer;
+    function forEachEnclosingBlockScopeContainer(node, cb) {
+        var container = getEnclosingBlockScopeContainer(node);
+        while (container) {
+            cb(container);
+            container = getEnclosingBlockScopeContainer(container);
+        }
+    }
+    ts.forEachEnclosingBlockScopeContainer = forEachEnclosingBlockScopeContainer;
     // Return display name of an identifier
     // Computed property names will just be emitted as "[<expr>]", where <expr> is the source
     // text of the expression in the computed property.
@@ -14560,19 +14927,19 @@
     }
     ts.getNameFromIndexInfo = getNameFromIndexInfo;
     function isComputedNonLiteralName(name) {
-        return name.kind === 159 /* ComputedPropertyName */ && !isStringOrNumericLiteralLike(name.expression);
+        return name.kind === 160 /* ComputedPropertyName */ && !isStringOrNumericLiteralLike(name.expression);
     }
     ts.isComputedNonLiteralName = isComputedNonLiteralName;
     function getTextOfPropertyName(name) {
         switch (name.kind) {
-            case 78 /* Identifier */:
-            case 79 /* PrivateIdentifier */:
+            case 79 /* Identifier */:
+            case 80 /* PrivateIdentifier */:
                 return name.escapedText;
             case 10 /* StringLiteral */:
             case 8 /* NumericLiteral */:
             case 14 /* NoSubstitutionTemplateLiteral */:
                 return ts.escapeLeadingUnderscores(name.text);
-            case 159 /* ComputedPropertyName */:
+            case 160 /* ComputedPropertyName */:
                 if (isStringOrNumericLiteralLike(name.expression))
                     return ts.escapeLeadingUnderscores(name.expression.text);
                 return ts.Debug.fail("Text of property name cannot be read from non-literal-valued ComputedPropertyNames");
@@ -14583,20 +14950,22 @@
     ts.getTextOfPropertyName = getTextOfPropertyName;
     function entityNameToString(name) {
         switch (name.kind) {
-            case 107 /* ThisKeyword */:
+            case 108 /* ThisKeyword */:
                 return "this";
-            case 79 /* PrivateIdentifier */:
-            case 78 /* Identifier */:
+            case 80 /* PrivateIdentifier */:
+            case 79 /* Identifier */:
                 return getFullWidth(name) === 0 ? ts.idText(name) : getTextOfNode(name);
-            case 158 /* QualifiedName */:
+            case 159 /* QualifiedName */:
                 return entityNameToString(name.left) + "." + entityNameToString(name.right);
-            case 202 /* PropertyAccessExpression */:
+            case 204 /* PropertyAccessExpression */:
                 if (ts.isIdentifier(name.name) || ts.isPrivateIdentifier(name.name)) {
                     return entityNameToString(name.expression) + "." + entityNameToString(name.name);
                 }
                 else {
                     return ts.Debug.assertNever(name.name);
                 }
+            case 306 /* JSDocMemberName */:
+                return entityNameToString(name.left) + entityNameToString(name.right);
             default:
                 return ts.Debug.assertNever(name);
         }
@@ -14676,7 +15045,7 @@
     ts.getSpanOfTokenAtPosition = getSpanOfTokenAtPosition;
     function getErrorSpanForArrowFunction(sourceFile, node) {
         var pos = ts.skipTrivia(sourceFile.text, node.pos);
-        if (node.body && node.body.kind === 231 /* Block */) {
+        if (node.body && node.body.kind === 233 /* Block */) {
             var startLine = ts.getLineAndCharacterOfPosition(sourceFile, node.body.pos).line;
             var endLine = ts.getLineAndCharacterOfPosition(sourceFile, node.body.end).line;
             if (startLine < endLine) {
@@ -14690,7 +15059,7 @@
     function getErrorSpanForNode(sourceFile, node) {
         var errorNode = node;
         switch (node.kind) {
-            case 298 /* SourceFile */:
+            case 300 /* SourceFile */:
                 var pos_1 = ts.skipTrivia(sourceFile.text, 0, /*stopAfterLineBreak*/ false);
                 if (pos_1 === sourceFile.text.length) {
                     // file is empty - return span for the beginning of the file
@@ -14699,28 +15068,29 @@
                 return getSpanOfTokenAtPosition(sourceFile, pos_1);
             // This list is a work in progress. Add missing node kinds to improve their error
             // spans.
-            case 250 /* VariableDeclaration */:
-            case 199 /* BindingElement */:
-            case 253 /* ClassDeclaration */:
-            case 222 /* ClassExpression */:
-            case 254 /* InterfaceDeclaration */:
-            case 257 /* ModuleDeclaration */:
-            case 256 /* EnumDeclaration */:
-            case 292 /* EnumMember */:
-            case 252 /* FunctionDeclaration */:
-            case 209 /* FunctionExpression */:
-            case 166 /* MethodDeclaration */:
-            case 168 /* GetAccessor */:
-            case 169 /* SetAccessor */:
-            case 255 /* TypeAliasDeclaration */:
-            case 164 /* PropertyDeclaration */:
-            case 163 /* PropertySignature */:
+            case 252 /* VariableDeclaration */:
+            case 201 /* BindingElement */:
+            case 255 /* ClassDeclaration */:
+            case 224 /* ClassExpression */:
+            case 256 /* InterfaceDeclaration */:
+            case 259 /* ModuleDeclaration */:
+            case 258 /* EnumDeclaration */:
+            case 294 /* EnumMember */:
+            case 254 /* FunctionDeclaration */:
+            case 211 /* FunctionExpression */:
+            case 167 /* MethodDeclaration */:
+            case 170 /* GetAccessor */:
+            case 171 /* SetAccessor */:
+            case 257 /* TypeAliasDeclaration */:
+            case 165 /* PropertyDeclaration */:
+            case 164 /* PropertySignature */:
+            case 266 /* NamespaceImport */:
                 errorNode = node.name;
                 break;
-            case 210 /* ArrowFunction */:
+            case 212 /* ArrowFunction */:
                 return getErrorSpanForArrowFunction(sourceFile, node);
-            case 285 /* CaseClause */:
-            case 286 /* DefaultClause */:
+            case 287 /* CaseClause */:
+            case 288 /* DefaultClause */:
                 var start = ts.skipTrivia(sourceFile.text, node.pos);
                 var end = node.statements.length > 0 ? node.statements[0].pos : node.end;
                 return ts.createTextSpanFromBounds(start, end);
@@ -14772,16 +15142,16 @@
     }
     ts.isLet = isLet;
     function isSuperCall(n) {
-        return n.kind === 204 /* CallExpression */ && n.expression.kind === 105 /* SuperKeyword */;
+        return n.kind === 206 /* CallExpression */ && n.expression.kind === 106 /* SuperKeyword */;
     }
     ts.isSuperCall = isSuperCall;
     function isImportCall(n) {
-        return n.kind === 204 /* CallExpression */ && n.expression.kind === 99 /* ImportKeyword */;
+        return n.kind === 206 /* CallExpression */ && n.expression.kind === 100 /* ImportKeyword */;
     }
     ts.isImportCall = isImportCall;
     function isImportMeta(n) {
         return ts.isMetaProperty(n)
-            && n.keywordToken === 99 /* ImportKeyword */
+            && n.keywordToken === 100 /* ImportKeyword */
             && n.name.escapedText === "meta";
     }
     ts.isImportMeta = isImportMeta;
@@ -14790,7 +15160,7 @@
     }
     ts.isLiteralImportTypeNode = isLiteralImportTypeNode;
     function isPrologueDirective(node) {
-        return node.kind === 234 /* ExpressionStatement */
+        return node.kind === 236 /* ExpressionStatement */
             && node.expression.kind === 10 /* StringLiteral */;
     }
     ts.isPrologueDirective = isPrologueDirective;
@@ -14818,12 +15188,12 @@
     }
     ts.getLeadingCommentRangesOfNode = getLeadingCommentRangesOfNode;
     function getJSDocCommentRanges(node, text) {
-        var commentRanges = (node.kind === 161 /* Parameter */ ||
-            node.kind === 160 /* TypeParameter */ ||
-            node.kind === 209 /* FunctionExpression */ ||
-            node.kind === 210 /* ArrowFunction */ ||
-            node.kind === 208 /* ParenthesizedExpression */ ||
-            node.kind === 250 /* VariableDeclaration */) ?
+        var commentRanges = (node.kind === 162 /* Parameter */ ||
+            node.kind === 161 /* TypeParameter */ ||
+            node.kind === 211 /* FunctionExpression */ ||
+            node.kind === 212 /* ArrowFunction */ ||
+            node.kind === 210 /* ParenthesizedExpression */ ||
+            node.kind === 252 /* VariableDeclaration */) ?
             ts.concatenate(ts.getTrailingCommentRanges(text, node.pos), ts.getLeadingCommentRanges(text, node.pos)) :
             ts.getLeadingCommentRanges(text, node.pos);
         // True if the comment starts with '/**' but not if it is '/**/'
@@ -14834,53 +15204,53 @@
         });
     }
     ts.getJSDocCommentRanges = getJSDocCommentRanges;
-    ts.fullTripleSlashReferencePathRegEx = /^(\/\/\/\s*<reference\s+path\s*=\s*)('|")(.+?)\2.*?\/>/;
-    var fullTripleSlashReferenceTypeReferenceDirectiveRegEx = /^(\/\/\/\s*<reference\s+types\s*=\s*)('|")(.+?)\2.*?\/>/;
-    ts.fullTripleSlashAMDReferencePathRegEx = /^(\/\/\/\s*<amd-dependency\s+path\s*=\s*)('|")(.+?)\2.*?\/>/;
-    var defaultLibReferenceRegEx = /^(\/\/\/\s*<reference\s+no-default-lib\s*=\s*)('|")(.+?)\2\s*\/>/;
+    ts.fullTripleSlashReferencePathRegEx = /^(\/\/\/\s*<reference\s+path\s*=\s*)(('[^']*')|("[^"]*")).*?\/>/;
+    var fullTripleSlashReferenceTypeReferenceDirectiveRegEx = /^(\/\/\/\s*<reference\s+types\s*=\s*)(('[^']*')|("[^"]*")).*?\/>/;
+    ts.fullTripleSlashAMDReferencePathRegEx = /^(\/\/\/\s*<amd-dependency\s+path\s*=\s*)(('[^']*')|("[^"]*")).*?\/>/;
+    var defaultLibReferenceRegEx = /^(\/\/\/\s*<reference\s+no-default-lib\s*=\s*)(('[^']*')|("[^"]*"))\s*\/>/;
     function isPartOfTypeNode(node) {
-        if (173 /* FirstTypeNode */ <= node.kind && node.kind <= 196 /* LastTypeNode */) {
+        if (175 /* FirstTypeNode */ <= node.kind && node.kind <= 198 /* LastTypeNode */) {
             return true;
         }
         switch (node.kind) {
-            case 128 /* AnyKeyword */:
-            case 152 /* UnknownKeyword */:
-            case 144 /* NumberKeyword */:
-            case 155 /* BigIntKeyword */:
-            case 147 /* StringKeyword */:
-            case 131 /* BooleanKeyword */:
-            case 148 /* SymbolKeyword */:
-            case 145 /* ObjectKeyword */:
-            case 150 /* UndefinedKeyword */:
-            case 141 /* NeverKeyword */:
+            case 129 /* AnyKeyword */:
+            case 153 /* UnknownKeyword */:
+            case 145 /* NumberKeyword */:
+            case 156 /* BigIntKeyword */:
+            case 148 /* StringKeyword */:
+            case 132 /* BooleanKeyword */:
+            case 149 /* SymbolKeyword */:
+            case 146 /* ObjectKeyword */:
+            case 151 /* UndefinedKeyword */:
+            case 142 /* NeverKeyword */:
                 return true;
-            case 113 /* VoidKeyword */:
-                return node.parent.kind !== 213 /* VoidExpression */;
-            case 224 /* ExpressionWithTypeArguments */:
+            case 114 /* VoidKeyword */:
+                return node.parent.kind !== 215 /* VoidExpression */;
+            case 226 /* ExpressionWithTypeArguments */:
                 return !isExpressionWithTypeArgumentsInClassExtendsClause(node);
-            case 160 /* TypeParameter */:
-                return node.parent.kind === 191 /* MappedType */ || node.parent.kind === 186 /* InferType */;
+            case 161 /* TypeParameter */:
+                return node.parent.kind === 193 /* MappedType */ || node.parent.kind === 188 /* InferType */;
             // Identifiers and qualified names may be type nodes, depending on their context. Climb
             // above them to find the lowest container
-            case 78 /* Identifier */:
+            case 79 /* Identifier */:
                 // If the identifier is the RHS of a qualified name, then it's a type iff its parent is.
-                if (node.parent.kind === 158 /* QualifiedName */ && node.parent.right === node) {
+                if (node.parent.kind === 159 /* QualifiedName */ && node.parent.right === node) {
                     node = node.parent;
                 }
-                else if (node.parent.kind === 202 /* PropertyAccessExpression */ && node.parent.name === node) {
+                else if (node.parent.kind === 204 /* PropertyAccessExpression */ && node.parent.name === node) {
                     node = node.parent;
                 }
                 // At this point, node is either a qualified name or an identifier
-                ts.Debug.assert(node.kind === 78 /* Identifier */ || node.kind === 158 /* QualifiedName */ || node.kind === 202 /* PropertyAccessExpression */, "'node' was expected to be a qualified name, identifier or property access in 'isPartOfTypeNode'.");
+                ts.Debug.assert(node.kind === 79 /* Identifier */ || node.kind === 159 /* QualifiedName */ || node.kind === 204 /* PropertyAccessExpression */, "'node' was expected to be a qualified name, identifier or property access in 'isPartOfTypeNode'.");
             // falls through
-            case 158 /* QualifiedName */:
-            case 202 /* PropertyAccessExpression */:
-            case 107 /* ThisKeyword */: {
+            case 159 /* QualifiedName */:
+            case 204 /* PropertyAccessExpression */:
+            case 108 /* ThisKeyword */: {
                 var parent = node.parent;
-                if (parent.kind === 177 /* TypeQuery */) {
+                if (parent.kind === 179 /* TypeQuery */) {
                     return false;
                 }
-                if (parent.kind === 196 /* ImportType */) {
+                if (parent.kind === 198 /* ImportType */) {
                     return !parent.isTypeOf;
                 }
                 // Do not recursively call isPartOfTypeNode on the parent. In the example:
@@ -14889,40 +15259,40 @@
                 //
                 // Calling isPartOfTypeNode would consider the qualified name A.B a type node.
                 // Only C and A.B.C are type nodes.
-                if (173 /* FirstTypeNode */ <= parent.kind && parent.kind <= 196 /* LastTypeNode */) {
+                if (175 /* FirstTypeNode */ <= parent.kind && parent.kind <= 198 /* LastTypeNode */) {
                     return true;
                 }
                 switch (parent.kind) {
-                    case 224 /* ExpressionWithTypeArguments */:
+                    case 226 /* ExpressionWithTypeArguments */:
                         return !isExpressionWithTypeArgumentsInClassExtendsClause(parent);
-                    case 160 /* TypeParameter */:
+                    case 161 /* TypeParameter */:
                         return node === parent.constraint;
-                    case 334 /* JSDocTemplateTag */:
+                    case 339 /* JSDocTemplateTag */:
                         return node === parent.constraint;
-                    case 164 /* PropertyDeclaration */:
-                    case 163 /* PropertySignature */:
-                    case 161 /* Parameter */:
-                    case 250 /* VariableDeclaration */:
+                    case 165 /* PropertyDeclaration */:
+                    case 164 /* PropertySignature */:
+                    case 162 /* Parameter */:
+                    case 252 /* VariableDeclaration */:
                         return node === parent.type;
-                    case 252 /* FunctionDeclaration */:
-                    case 209 /* FunctionExpression */:
-                    case 210 /* ArrowFunction */:
-                    case 167 /* Constructor */:
-                    case 166 /* MethodDeclaration */:
-                    case 165 /* MethodSignature */:
-                    case 168 /* GetAccessor */:
-                    case 169 /* SetAccessor */:
+                    case 254 /* FunctionDeclaration */:
+                    case 211 /* FunctionExpression */:
+                    case 212 /* ArrowFunction */:
+                    case 169 /* Constructor */:
+                    case 167 /* MethodDeclaration */:
+                    case 166 /* MethodSignature */:
+                    case 170 /* GetAccessor */:
+                    case 171 /* SetAccessor */:
                         return node === parent.type;
-                    case 170 /* CallSignature */:
-                    case 171 /* ConstructSignature */:
-                    case 172 /* IndexSignature */:
+                    case 172 /* CallSignature */:
+                    case 173 /* ConstructSignature */:
+                    case 174 /* IndexSignature */:
                         return node === parent.type;
-                    case 207 /* TypeAssertionExpression */:
+                    case 209 /* TypeAssertionExpression */:
                         return node === parent.type;
-                    case 204 /* CallExpression */:
-                    case 205 /* NewExpression */:
+                    case 206 /* CallExpression */:
+                    case 207 /* NewExpression */:
                         return ts.contains(parent.typeArguments, node);
-                    case 206 /* TaggedTemplateExpression */:
+                    case 208 /* TaggedTemplateExpression */:
                         // TODO (drosen): TaggedTemplateExpressions may eventually support type arguments.
                         return false;
                 }
@@ -14947,23 +15317,23 @@
         return traverse(body);
         function traverse(node) {
             switch (node.kind) {
-                case 243 /* ReturnStatement */:
+                case 245 /* ReturnStatement */:
                     return visitor(node);
-                case 259 /* CaseBlock */:
-                case 231 /* Block */:
-                case 235 /* IfStatement */:
-                case 236 /* DoStatement */:
-                case 237 /* WhileStatement */:
-                case 238 /* ForStatement */:
-                case 239 /* ForInStatement */:
-                case 240 /* ForOfStatement */:
-                case 244 /* WithStatement */:
-                case 245 /* SwitchStatement */:
-                case 285 /* CaseClause */:
-                case 286 /* DefaultClause */:
-                case 246 /* LabeledStatement */:
-                case 248 /* TryStatement */:
-                case 288 /* CatchClause */:
+                case 261 /* CaseBlock */:
+                case 233 /* Block */:
+                case 237 /* IfStatement */:
+                case 238 /* DoStatement */:
+                case 239 /* WhileStatement */:
+                case 240 /* ForStatement */:
+                case 241 /* ForInStatement */:
+                case 242 /* ForOfStatement */:
+                case 246 /* WithStatement */:
+                case 247 /* SwitchStatement */:
+                case 287 /* CaseClause */:
+                case 288 /* DefaultClause */:
+                case 248 /* LabeledStatement */:
+                case 250 /* TryStatement */:
+                case 290 /* CatchClause */:
                     return ts.forEachChild(node, traverse);
             }
         }
@@ -14973,23 +15343,23 @@
         return traverse(body);
         function traverse(node) {
             switch (node.kind) {
-                case 220 /* YieldExpression */:
+                case 222 /* YieldExpression */:
                     visitor(node);
                     var operand = node.expression;
                     if (operand) {
                         traverse(operand);
                     }
                     return;
-                case 256 /* EnumDeclaration */:
-                case 254 /* InterfaceDeclaration */:
-                case 257 /* ModuleDeclaration */:
-                case 255 /* TypeAliasDeclaration */:
+                case 258 /* EnumDeclaration */:
+                case 256 /* InterfaceDeclaration */:
+                case 259 /* ModuleDeclaration */:
+                case 257 /* TypeAliasDeclaration */:
                     // These are not allowed inside a generator now, but eventually they may be allowed
                     // as local types. Regardless, skip them to avoid the work.
                     return;
                 default:
                     if (ts.isFunctionLike(node)) {
-                        if (node.name && node.name.kind === 159 /* ComputedPropertyName */) {
+                        if (node.name && node.name.kind === 160 /* ComputedPropertyName */) {
                             // Note that we will not include methods/accessors of a class because they would require
                             // first descending into the class. This is by design.
                             traverse(node.name.expression);
@@ -15012,10 +15382,10 @@
      * @param node The type node.
      */
     function getRestParameterElementType(node) {
-        if (node && node.kind === 179 /* ArrayType */) {
+        if (node && node.kind === 181 /* ArrayType */) {
             return node.elementType;
         }
-        else if (node && node.kind === 174 /* TypeReference */) {
+        else if (node && node.kind === 176 /* TypeReference */) {
             return ts.singleOrUndefined(node.typeArguments);
         }
         else {
@@ -15025,12 +15395,12 @@
     ts.getRestParameterElementType = getRestParameterElementType;
     function getMembersOfDeclaration(node) {
         switch (node.kind) {
-            case 254 /* InterfaceDeclaration */:
-            case 253 /* ClassDeclaration */:
-            case 222 /* ClassExpression */:
-            case 178 /* TypeLiteral */:
+            case 256 /* InterfaceDeclaration */:
+            case 255 /* ClassDeclaration */:
+            case 224 /* ClassExpression */:
+            case 180 /* TypeLiteral */:
                 return node.members;
-            case 201 /* ObjectLiteralExpression */:
+            case 203 /* ObjectLiteralExpression */:
                 return node.properties;
         }
     }
@@ -15038,14 +15408,14 @@
     function isVariableLike(node) {
         if (node) {
             switch (node.kind) {
-                case 199 /* BindingElement */:
-                case 292 /* EnumMember */:
-                case 161 /* Parameter */:
-                case 289 /* PropertyAssignment */:
-                case 164 /* PropertyDeclaration */:
-                case 163 /* PropertySignature */:
-                case 290 /* ShorthandPropertyAssignment */:
-                case 250 /* VariableDeclaration */:
+                case 201 /* BindingElement */:
+                case 294 /* EnumMember */:
+                case 162 /* Parameter */:
+                case 291 /* PropertyAssignment */:
+                case 165 /* PropertyDeclaration */:
+                case 164 /* PropertySignature */:
+                case 292 /* ShorthandPropertyAssignment */:
+                case 252 /* VariableDeclaration */:
                     return true;
             }
         }
@@ -15057,8 +15427,8 @@
     }
     ts.isVariableLikeOrAccessor = isVariableLikeOrAccessor;
     function isVariableDeclarationInVariableStatement(node) {
-        return node.parent.kind === 251 /* VariableDeclarationList */
-            && node.parent.parent.kind === 233 /* VariableStatement */;
+        return node.parent.kind === 253 /* VariableDeclarationList */
+            && node.parent.parent.kind === 235 /* VariableStatement */;
     }
     ts.isVariableDeclarationInVariableStatement = isVariableDeclarationInVariableStatement;
     function isValidESSymbolDeclaration(node) {
@@ -15069,13 +15439,13 @@
     ts.isValidESSymbolDeclaration = isValidESSymbolDeclaration;
     function introducesArgumentsExoticObject(node) {
         switch (node.kind) {
-            case 166 /* MethodDeclaration */:
-            case 165 /* MethodSignature */:
-            case 167 /* Constructor */:
-            case 168 /* GetAccessor */:
-            case 169 /* SetAccessor */:
-            case 252 /* FunctionDeclaration */:
-            case 209 /* FunctionExpression */:
+            case 167 /* MethodDeclaration */:
+            case 166 /* MethodSignature */:
+            case 169 /* Constructor */:
+            case 170 /* GetAccessor */:
+            case 171 /* SetAccessor */:
+            case 254 /* FunctionDeclaration */:
+            case 211 /* FunctionExpression */:
                 return true;
         }
         return false;
@@ -15086,7 +15456,7 @@
             if (beforeUnwrapLabelCallback) {
                 beforeUnwrapLabelCallback(node);
             }
-            if (node.statement.kind !== 246 /* LabeledStatement */) {
+            if (node.statement.kind !== 248 /* LabeledStatement */) {
                 return node.statement;
             }
             node = node.statement;
@@ -15094,17 +15464,17 @@
     }
     ts.unwrapInnermostStatementOfLabel = unwrapInnermostStatementOfLabel;
     function isFunctionBlock(node) {
-        return node && node.kind === 231 /* Block */ && ts.isFunctionLike(node.parent);
+        return node && node.kind === 233 /* Block */ && ts.isFunctionLike(node.parent);
     }
     ts.isFunctionBlock = isFunctionBlock;
     function isObjectLiteralMethod(node) {
-        return node && node.kind === 166 /* MethodDeclaration */ && node.parent.kind === 201 /* ObjectLiteralExpression */;
+        return node && node.kind === 167 /* MethodDeclaration */ && node.parent.kind === 203 /* ObjectLiteralExpression */;
     }
     ts.isObjectLiteralMethod = isObjectLiteralMethod;
     function isObjectLiteralOrClassExpressionMethod(node) {
-        return node.kind === 166 /* MethodDeclaration */ &&
-            (node.parent.kind === 201 /* ObjectLiteralExpression */ ||
-                node.parent.kind === 222 /* ClassExpression */);
+        return node.kind === 167 /* MethodDeclaration */ &&
+            (node.parent.kind === 203 /* ObjectLiteralExpression */ ||
+                node.parent.kind === 224 /* ClassExpression */);
     }
     ts.isObjectLiteralOrClassExpressionMethod = isObjectLiteralOrClassExpressionMethod;
     function isIdentifierTypePredicate(predicate) {
@@ -15117,7 +15487,7 @@
     ts.isThisTypePredicate = isThisTypePredicate;
     function getPropertyAssignment(objectLiteral, key, key2) {
         return objectLiteral.properties.filter(function (property) {
-            if (property.kind === 289 /* PropertyAssignment */) {
+            if (property.kind === 291 /* PropertyAssignment */) {
                 var propName = getTextOfPropertyName(property.name);
                 return key === propName || (!!key2 && key2 === propName);
             }
@@ -15165,15 +15535,28 @@
         return ts.findAncestor(node.parent, ts.isClassLike);
     }
     ts.getContainingClass = getContainingClass;
+    function getContainingClassStaticBlock(node) {
+        return ts.findAncestor(node.parent, function (n) {
+            if (ts.isClassLike(n) || ts.isFunctionLike(n)) {
+                return "quit";
+            }
+            return ts.isClassStaticBlockDeclaration(n);
+        });
+    }
+    ts.getContainingClassStaticBlock = getContainingClassStaticBlock;
+    function getContainingFunctionOrClassStaticBlock(node) {
+        return ts.findAncestor(node.parent, ts.isFunctionLikeOrClassStaticBlockDeclaration);
+    }
+    ts.getContainingFunctionOrClassStaticBlock = getContainingFunctionOrClassStaticBlock;
     function getThisContainer(node, includeArrowFunctions) {
-        ts.Debug.assert(node.kind !== 298 /* SourceFile */);
+        ts.Debug.assert(node.kind !== 300 /* SourceFile */);
         while (true) {
             node = node.parent;
             if (!node) {
                 return ts.Debug.fail(); // If we never pass in a SourceFile, this should be unreachable, since we'll stop when we reach that.
             }
             switch (node.kind) {
-                case 159 /* ComputedPropertyName */:
+                case 160 /* ComputedPropertyName */:
                     // If the grandparent node is an object literal (as opposed to a class),
                     // then the computed property is not a 'this' container.
                     // A computed property name in a class needs to be a this container
@@ -15188,9 +15571,9 @@
                     // the *body* of the container.
                     node = node.parent;
                     break;
-                case 162 /* Decorator */:
+                case 163 /* Decorator */:
                     // Decorators are always applied outside of the body of a class or method.
-                    if (node.parent.kind === 161 /* Parameter */ && ts.isClassElement(node.parent.parent)) {
+                    if (node.parent.kind === 162 /* Parameter */ && ts.isClassElement(node.parent.parent)) {
                         // If the decorator's parent is a Parameter, we resolve the this container from
                         // the grandparent class declaration.
                         node = node.parent.parent;
@@ -15201,26 +15584,27 @@
                         node = node.parent;
                     }
                     break;
-                case 210 /* ArrowFunction */:
+                case 212 /* ArrowFunction */:
                     if (!includeArrowFunctions) {
                         continue;
                     }
                 // falls through
-                case 252 /* FunctionDeclaration */:
-                case 209 /* FunctionExpression */:
-                case 257 /* ModuleDeclaration */:
-                case 164 /* PropertyDeclaration */:
-                case 163 /* PropertySignature */:
-                case 166 /* MethodDeclaration */:
-                case 165 /* MethodSignature */:
-                case 167 /* Constructor */:
-                case 168 /* GetAccessor */:
-                case 169 /* SetAccessor */:
-                case 170 /* CallSignature */:
-                case 171 /* ConstructSignature */:
-                case 172 /* IndexSignature */:
-                case 256 /* EnumDeclaration */:
-                case 298 /* SourceFile */:
+                case 254 /* FunctionDeclaration */:
+                case 211 /* FunctionExpression */:
+                case 259 /* ModuleDeclaration */:
+                case 168 /* ClassStaticBlockDeclaration */:
+                case 165 /* PropertyDeclaration */:
+                case 164 /* PropertySignature */:
+                case 167 /* MethodDeclaration */:
+                case 166 /* MethodSignature */:
+                case 169 /* Constructor */:
+                case 170 /* GetAccessor */:
+                case 171 /* SetAccessor */:
+                case 172 /* CallSignature */:
+                case 173 /* ConstructSignature */:
+                case 174 /* IndexSignature */:
+                case 258 /* EnumDeclaration */:
+                case 300 /* SourceFile */:
                     return node;
             }
         }
@@ -15239,9 +15623,9 @@
         var container = getThisContainer(node, /*includeArrowFunctions*/ false);
         if (container) {
             switch (container.kind) {
-                case 167 /* Constructor */:
-                case 252 /* FunctionDeclaration */:
-                case 209 /* FunctionExpression */:
+                case 169 /* Constructor */:
+                case 254 /* FunctionDeclaration */:
+                case 211 /* FunctionExpression */:
                     return container;
             }
         }
@@ -15263,27 +15647,28 @@
                 return node;
             }
             switch (node.kind) {
-                case 159 /* ComputedPropertyName */:
+                case 160 /* ComputedPropertyName */:
                     node = node.parent;
                     break;
-                case 252 /* FunctionDeclaration */:
-                case 209 /* FunctionExpression */:
-                case 210 /* ArrowFunction */:
+                case 254 /* FunctionDeclaration */:
+                case 211 /* FunctionExpression */:
+                case 212 /* ArrowFunction */:
                     if (!stopOnFunctions) {
                         continue;
                     }
                 // falls through
-                case 164 /* PropertyDeclaration */:
-                case 163 /* PropertySignature */:
-                case 166 /* MethodDeclaration */:
-                case 165 /* MethodSignature */:
-                case 167 /* Constructor */:
-                case 168 /* GetAccessor */:
-                case 169 /* SetAccessor */:
+                case 165 /* PropertyDeclaration */:
+                case 164 /* PropertySignature */:
+                case 167 /* MethodDeclaration */:
+                case 166 /* MethodSignature */:
+                case 169 /* Constructor */:
+                case 170 /* GetAccessor */:
+                case 171 /* SetAccessor */:
+                case 168 /* ClassStaticBlockDeclaration */:
                     return node;
-                case 162 /* Decorator */:
+                case 163 /* Decorator */:
                     // Decorators are always applied outside of the body of a class or method.
-                    if (node.parent.kind === 161 /* Parameter */ && ts.isClassElement(node.parent.parent)) {
+                    if (node.parent.kind === 162 /* Parameter */ && ts.isClassElement(node.parent.parent)) {
                         // If the decorator's parent is a Parameter, we resolve the this container from
                         // the grandparent class declaration.
                         node = node.parent.parent;
@@ -15299,21 +15684,21 @@
     }
     ts.getSuperContainer = getSuperContainer;
     function getImmediatelyInvokedFunctionExpression(func) {
-        if (func.kind === 209 /* FunctionExpression */ || func.kind === 210 /* ArrowFunction */) {
+        if (func.kind === 211 /* FunctionExpression */ || func.kind === 212 /* ArrowFunction */) {
             var prev = func;
             var parent = func.parent;
-            while (parent.kind === 208 /* ParenthesizedExpression */) {
+            while (parent.kind === 210 /* ParenthesizedExpression */) {
                 prev = parent;
                 parent = parent.parent;
             }
-            if (parent.kind === 204 /* CallExpression */ && parent.expression === prev) {
+            if (parent.kind === 206 /* CallExpression */ && parent.expression === prev) {
                 return parent;
             }
         }
     }
     ts.getImmediatelyInvokedFunctionExpression = getImmediatelyInvokedFunctionExpression;
     function isSuperOrSuperProperty(node) {
-        return node.kind === 105 /* SuperKeyword */
+        return node.kind === 106 /* SuperKeyword */
             || isSuperProperty(node);
     }
     ts.isSuperOrSuperProperty = isSuperOrSuperProperty;
@@ -15322,8 +15707,8 @@
      */
     function isSuperProperty(node) {
         var kind = node.kind;
-        return (kind === 202 /* PropertyAccessExpression */ || kind === 203 /* ElementAccessExpression */)
-            && node.expression.kind === 105 /* SuperKeyword */;
+        return (kind === 204 /* PropertyAccessExpression */ || kind === 205 /* ElementAccessExpression */)
+            && node.expression.kind === 106 /* SuperKeyword */;
     }
     ts.isSuperProperty = isSuperProperty;
     /**
@@ -15331,34 +15716,34 @@
      */
     function isThisProperty(node) {
         var kind = node.kind;
-        return (kind === 202 /* PropertyAccessExpression */ || kind === 203 /* ElementAccessExpression */)
-            && node.expression.kind === 107 /* ThisKeyword */;
+        return (kind === 204 /* PropertyAccessExpression */ || kind === 205 /* ElementAccessExpression */)
+            && node.expression.kind === 108 /* ThisKeyword */;
     }
     ts.isThisProperty = isThisProperty;
     function isThisInitializedDeclaration(node) {
         var _a;
-        return !!node && ts.isVariableDeclaration(node) && ((_a = node.initializer) === null || _a === void 0 ? void 0 : _a.kind) === 107 /* ThisKeyword */;
+        return !!node && ts.isVariableDeclaration(node) && ((_a = node.initializer) === null || _a === void 0 ? void 0 : _a.kind) === 108 /* ThisKeyword */;
     }
     ts.isThisInitializedDeclaration = isThisInitializedDeclaration;
     function isThisInitializedObjectBindingExpression(node) {
         return !!node
             && (ts.isShorthandPropertyAssignment(node) || ts.isPropertyAssignment(node))
             && ts.isBinaryExpression(node.parent.parent)
-            && node.parent.parent.operatorToken.kind === 62 /* EqualsToken */
-            && node.parent.parent.right.kind === 107 /* ThisKeyword */;
+            && node.parent.parent.operatorToken.kind === 63 /* EqualsToken */
+            && node.parent.parent.right.kind === 108 /* ThisKeyword */;
     }
     ts.isThisInitializedObjectBindingExpression = isThisInitializedObjectBindingExpression;
     function getEntityNameFromTypeNode(node) {
         switch (node.kind) {
-            case 174 /* TypeReference */:
+            case 176 /* TypeReference */:
                 return node.typeName;
-            case 224 /* ExpressionWithTypeArguments */:
+            case 226 /* ExpressionWithTypeArguments */:
                 return isEntityNameExpression(node.expression)
                     ? node.expression
                     : undefined;
             // TODO(rbuckton): These aren't valid TypeNodes, but we treat them as such because of `isPartOfTypeNode`, which returns `true` for things that aren't `TypeNode`s.
-            case 78 /* Identifier */:
-            case 158 /* QualifiedName */:
+            case 79 /* Identifier */:
+            case 159 /* QualifiedName */:
                 return node;
         }
         return undefined;
@@ -15366,10 +15751,10 @@
     ts.getEntityNameFromTypeNode = getEntityNameFromTypeNode;
     function getInvokedExpression(node) {
         switch (node.kind) {
-            case 206 /* TaggedTemplateExpression */:
+            case 208 /* TaggedTemplateExpression */:
                 return node.tag;
-            case 276 /* JsxOpeningElement */:
-            case 275 /* JsxSelfClosingElement */:
+            case 278 /* JsxOpeningElement */:
+            case 277 /* JsxSelfClosingElement */:
                 return node.tagName;
             default:
                 return node.expression;
@@ -15382,25 +15767,25 @@
             return false;
         }
         switch (node.kind) {
-            case 253 /* ClassDeclaration */:
+            case 255 /* ClassDeclaration */:
                 // classes are valid targets
                 return true;
-            case 164 /* PropertyDeclaration */:
+            case 165 /* PropertyDeclaration */:
                 // property declarations are valid if their parent is a class declaration.
-                return parent.kind === 253 /* ClassDeclaration */;
-            case 168 /* GetAccessor */:
-            case 169 /* SetAccessor */:
-            case 166 /* MethodDeclaration */:
+                return parent.kind === 255 /* ClassDeclaration */;
+            case 170 /* GetAccessor */:
+            case 171 /* SetAccessor */:
+            case 167 /* MethodDeclaration */:
                 // if this method has a body and its parent is a class declaration, this is a valid target.
                 return node.body !== undefined
-                    && parent.kind === 253 /* ClassDeclaration */;
-            case 161 /* Parameter */:
+                    && parent.kind === 255 /* ClassDeclaration */;
+            case 162 /* Parameter */:
                 // if the parameter's parent has a body and its grandparent is a class declaration, this is a valid target;
                 return parent.body !== undefined
-                    && (parent.kind === 167 /* Constructor */
-                        || parent.kind === 166 /* MethodDeclaration */
-                        || parent.kind === 169 /* SetAccessor */)
-                    && grandparent.kind === 253 /* ClassDeclaration */;
+                    && (parent.kind === 169 /* Constructor */
+                        || parent.kind === 167 /* MethodDeclaration */
+                        || parent.kind === 171 /* SetAccessor */)
+                    && grandparent.kind === 255 /* ClassDeclaration */;
         }
         return false;
     }
@@ -15416,21 +15801,29 @@
     ts.nodeOrChildIsDecorated = nodeOrChildIsDecorated;
     function childIsDecorated(node, parent) {
         switch (node.kind) {
-            case 253 /* ClassDeclaration */:
+            case 255 /* ClassDeclaration */:
                 return ts.some(node.members, function (m) { return nodeOrChildIsDecorated(m, node, parent); }); // TODO: GH#18217
-            case 166 /* MethodDeclaration */:
-            case 169 /* SetAccessor */:
+            case 167 /* MethodDeclaration */:
+            case 171 /* SetAccessor */:
+            case 169 /* Constructor */:
                 return ts.some(node.parameters, function (p) { return nodeIsDecorated(p, node, parent); }); // TODO: GH#18217
             default:
                 return false;
         }
     }
     ts.childIsDecorated = childIsDecorated;
+    function classOrConstructorParameterIsDecorated(node) {
+        if (nodeIsDecorated(node))
+            return true;
+        var constructor = getFirstConstructorWithBody(node);
+        return !!constructor && childIsDecorated(constructor, node);
+    }
+    ts.classOrConstructorParameterIsDecorated = classOrConstructorParameterIsDecorated;
     function isJSXTagName(node) {
         var parent = node.parent;
-        if (parent.kind === 276 /* JsxOpeningElement */ ||
-            parent.kind === 275 /* JsxSelfClosingElement */ ||
-            parent.kind === 277 /* JsxClosingElement */) {
+        if (parent.kind === 278 /* JsxOpeningElement */ ||
+            parent.kind === 277 /* JsxSelfClosingElement */ ||
+            parent.kind === 279 /* JsxClosingElement */) {
             return parent.tagName === node;
         }
         return false;
@@ -15438,49 +15831,54 @@
     ts.isJSXTagName = isJSXTagName;
     function isExpressionNode(node) {
         switch (node.kind) {
-            case 105 /* SuperKeyword */:
-            case 103 /* NullKeyword */:
-            case 109 /* TrueKeyword */:
-            case 94 /* FalseKeyword */:
+            case 106 /* SuperKeyword */:
+            case 104 /* NullKeyword */:
+            case 110 /* TrueKeyword */:
+            case 95 /* FalseKeyword */:
             case 13 /* RegularExpressionLiteral */:
-            case 200 /* ArrayLiteralExpression */:
-            case 201 /* ObjectLiteralExpression */:
-            case 202 /* PropertyAccessExpression */:
-            case 203 /* ElementAccessExpression */:
-            case 204 /* CallExpression */:
-            case 205 /* NewExpression */:
-            case 206 /* TaggedTemplateExpression */:
-            case 225 /* AsExpression */:
-            case 207 /* TypeAssertionExpression */:
-            case 226 /* NonNullExpression */:
-            case 208 /* ParenthesizedExpression */:
-            case 209 /* FunctionExpression */:
-            case 222 /* ClassExpression */:
-            case 210 /* ArrowFunction */:
-            case 213 /* VoidExpression */:
-            case 211 /* DeleteExpression */:
-            case 212 /* TypeOfExpression */:
-            case 215 /* PrefixUnaryExpression */:
-            case 216 /* PostfixUnaryExpression */:
-            case 217 /* BinaryExpression */:
-            case 218 /* ConditionalExpression */:
-            case 221 /* SpreadElement */:
-            case 219 /* TemplateExpression */:
-            case 223 /* OmittedExpression */:
-            case 274 /* JsxElement */:
-            case 275 /* JsxSelfClosingElement */:
-            case 278 /* JsxFragment */:
-            case 220 /* YieldExpression */:
-            case 214 /* AwaitExpression */:
-            case 227 /* MetaProperty */:
+            case 202 /* ArrayLiteralExpression */:
+            case 203 /* ObjectLiteralExpression */:
+            case 204 /* PropertyAccessExpression */:
+            case 205 /* ElementAccessExpression */:
+            case 206 /* CallExpression */:
+            case 207 /* NewExpression */:
+            case 208 /* TaggedTemplateExpression */:
+            case 227 /* AsExpression */:
+            case 209 /* TypeAssertionExpression */:
+            case 228 /* NonNullExpression */:
+            case 210 /* ParenthesizedExpression */:
+            case 211 /* FunctionExpression */:
+            case 224 /* ClassExpression */:
+            case 212 /* ArrowFunction */:
+            case 215 /* VoidExpression */:
+            case 213 /* DeleteExpression */:
+            case 214 /* TypeOfExpression */:
+            case 217 /* PrefixUnaryExpression */:
+            case 218 /* PostfixUnaryExpression */:
+            case 219 /* BinaryExpression */:
+            case 220 /* ConditionalExpression */:
+            case 223 /* SpreadElement */:
+            case 221 /* TemplateExpression */:
+            case 225 /* OmittedExpression */:
+            case 276 /* JsxElement */:
+            case 277 /* JsxSelfClosingElement */:
+            case 280 /* JsxFragment */:
+            case 222 /* YieldExpression */:
+            case 216 /* AwaitExpression */:
+            case 229 /* MetaProperty */:
                 return true;
-            case 158 /* QualifiedName */:
-                while (node.parent.kind === 158 /* QualifiedName */) {
+            case 159 /* QualifiedName */:
+                while (node.parent.kind === 159 /* QualifiedName */) {
                     node = node.parent;
                 }
-                return node.parent.kind === 177 /* TypeQuery */ || isJSXTagName(node);
-            case 78 /* Identifier */:
-                if (node.parent.kind === 177 /* TypeQuery */ || isJSXTagName(node)) {
+                return node.parent.kind === 179 /* TypeQuery */ || ts.isJSDocLinkLike(node.parent) || ts.isJSDocNameReference(node.parent) || ts.isJSDocMemberName(node.parent) || isJSXTagName(node);
+            case 306 /* JSDocMemberName */:
+                while (ts.isJSDocMemberName(node.parent)) {
+                    node = node.parent;
+                }
+                return node.parent.kind === 179 /* TypeQuery */ || ts.isJSDocLinkLike(node.parent) || ts.isJSDocNameReference(node.parent) || ts.isJSDocMemberName(node.parent) || isJSXTagName(node);
+            case 79 /* Identifier */:
+                if (node.parent.kind === 179 /* TypeQuery */ || ts.isJSDocLinkLike(node.parent) || ts.isJSDocNameReference(node.parent) || ts.isJSDocMemberName(node.parent) || isJSXTagName(node)) {
                     return true;
                 }
             // falls through
@@ -15488,7 +15886,7 @@
             case 9 /* BigIntLiteral */:
             case 10 /* StringLiteral */:
             case 14 /* NoSubstitutionTemplateLiteral */:
-            case 107 /* ThisKeyword */:
+            case 108 /* ThisKeyword */:
                 return isInExpressionContext(node);
             default:
                 return false;
@@ -15498,49 +15896,49 @@
     function isInExpressionContext(node) {
         var parent = node.parent;
         switch (parent.kind) {
-            case 250 /* VariableDeclaration */:
-            case 161 /* Parameter */:
-            case 164 /* PropertyDeclaration */:
-            case 163 /* PropertySignature */:
-            case 292 /* EnumMember */:
-            case 289 /* PropertyAssignment */:
-            case 199 /* BindingElement */:
+            case 252 /* VariableDeclaration */:
+            case 162 /* Parameter */:
+            case 165 /* PropertyDeclaration */:
+            case 164 /* PropertySignature */:
+            case 294 /* EnumMember */:
+            case 291 /* PropertyAssignment */:
+            case 201 /* BindingElement */:
                 return parent.initializer === node;
-            case 234 /* ExpressionStatement */:
-            case 235 /* IfStatement */:
-            case 236 /* DoStatement */:
-            case 237 /* WhileStatement */:
-            case 243 /* ReturnStatement */:
-            case 244 /* WithStatement */:
-            case 245 /* SwitchStatement */:
-            case 285 /* CaseClause */:
-            case 247 /* ThrowStatement */:
+            case 236 /* ExpressionStatement */:
+            case 237 /* IfStatement */:
+            case 238 /* DoStatement */:
+            case 239 /* WhileStatement */:
+            case 245 /* ReturnStatement */:
+            case 246 /* WithStatement */:
+            case 247 /* SwitchStatement */:
+            case 287 /* CaseClause */:
+            case 249 /* ThrowStatement */:
                 return parent.expression === node;
-            case 238 /* ForStatement */:
+            case 240 /* ForStatement */:
                 var forStatement = parent;
-                return (forStatement.initializer === node && forStatement.initializer.kind !== 251 /* VariableDeclarationList */) ||
+                return (forStatement.initializer === node && forStatement.initializer.kind !== 253 /* VariableDeclarationList */) ||
                     forStatement.condition === node ||
                     forStatement.incrementor === node;
-            case 239 /* ForInStatement */:
-            case 240 /* ForOfStatement */:
+            case 241 /* ForInStatement */:
+            case 242 /* ForOfStatement */:
                 var forInStatement = parent;
-                return (forInStatement.initializer === node && forInStatement.initializer.kind !== 251 /* VariableDeclarationList */) ||
+                return (forInStatement.initializer === node && forInStatement.initializer.kind !== 253 /* VariableDeclarationList */) ||
                     forInStatement.expression === node;
-            case 207 /* TypeAssertionExpression */:
-            case 225 /* AsExpression */:
+            case 209 /* TypeAssertionExpression */:
+            case 227 /* AsExpression */:
                 return node === parent.expression;
-            case 229 /* TemplateSpan */:
+            case 231 /* TemplateSpan */:
                 return node === parent.expression;
-            case 159 /* ComputedPropertyName */:
+            case 160 /* ComputedPropertyName */:
                 return node === parent.expression;
-            case 162 /* Decorator */:
-            case 284 /* JsxExpression */:
-            case 283 /* JsxSpreadAttribute */:
-            case 291 /* SpreadAssignment */:
+            case 163 /* Decorator */:
+            case 286 /* JsxExpression */:
+            case 285 /* JsxSpreadAttribute */:
+            case 293 /* SpreadAssignment */:
                 return true;
-            case 224 /* ExpressionWithTypeArguments */:
+            case 226 /* ExpressionWithTypeArguments */:
                 return parent.expression === node && isExpressionWithTypeArgumentsInClassExtendsClause(parent);
-            case 290 /* ShorthandPropertyAssignment */:
+            case 292 /* ShorthandPropertyAssignment */:
                 return parent.objectAssignmentInitializer === node;
             default:
                 return isExpressionNode(parent);
@@ -15548,10 +15946,10 @@
     }
     ts.isInExpressionContext = isInExpressionContext;
     function isPartOfTypeQuery(node) {
-        while (node.kind === 158 /* QualifiedName */ || node.kind === 78 /* Identifier */) {
+        while (node.kind === 159 /* QualifiedName */ || node.kind === 79 /* Identifier */) {
             node = node.parent;
         }
-        return node.kind === 177 /* TypeQuery */;
+        return node.kind === 179 /* TypeQuery */;
     }
     ts.isPartOfTypeQuery = isPartOfTypeQuery;
     function isNamespaceReexportDeclaration(node) {
@@ -15559,7 +15957,7 @@
     }
     ts.isNamespaceReexportDeclaration = isNamespaceReexportDeclaration;
     function isExternalModuleImportEqualsDeclaration(node) {
-        return node.kind === 261 /* ImportEqualsDeclaration */ && node.moduleReference.kind === 273 /* ExternalModuleReference */;
+        return node.kind === 263 /* ImportEqualsDeclaration */ && node.moduleReference.kind === 275 /* ExternalModuleReference */;
     }
     ts.isExternalModuleImportEqualsDeclaration = isExternalModuleImportEqualsDeclaration;
     function getExternalModuleImportEqualsDeclarationExpression(node) {
@@ -15572,7 +15970,7 @@
     }
     ts.getExternalModuleRequireArgument = getExternalModuleRequireArgument;
     function isInternalModuleImportEqualsDeclaration(node) {
-        return node.kind === 261 /* ImportEqualsDeclaration */ && node.moduleReference.kind !== 273 /* ExternalModuleReference */;
+        return node.kind === 263 /* ImportEqualsDeclaration */ && node.moduleReference.kind !== 275 /* ExternalModuleReference */;
     }
     ts.isInternalModuleImportEqualsDeclaration = isInternalModuleImportEqualsDeclaration;
     function isSourceFileJS(file) {
@@ -15604,15 +16002,15 @@
             ts.isIdentifier(node.typeName) &&
             node.typeName.escapedText === "Object" &&
             node.typeArguments && node.typeArguments.length === 2 &&
-            (node.typeArguments[0].kind === 147 /* StringKeyword */ || node.typeArguments[0].kind === 144 /* NumberKeyword */);
+            (node.typeArguments[0].kind === 148 /* StringKeyword */ || node.typeArguments[0].kind === 145 /* NumberKeyword */);
     }
     ts.isJSDocIndexSignature = isJSDocIndexSignature;
     function isRequireCall(callExpression, requireStringLiteralLikeArgument) {
-        if (callExpression.kind !== 204 /* CallExpression */) {
+        if (callExpression.kind !== 206 /* CallExpression */) {
             return false;
         }
         var _a = callExpression, expression = _a.expression, args = _a.arguments;
-        if (expression.kind !== 78 /* Identifier */ || expression.escapedText !== "require") {
+        if (expression.kind !== 79 /* Identifier */ || expression.escapedText !== "require") {
             return false;
         }
         if (args.length !== 1) {
@@ -15627,7 +16025,7 @@
      * This function does not test if the node is in a JavaScript file or not.
      */
     function isRequireVariableDeclaration(node) {
-        if (node.kind === 199 /* BindingElement */) {
+        if (node.kind === 201 /* BindingElement */) {
             node = node.parent.parent;
         }
         return ts.isVariableDeclaration(node) && !!node.initializer && isRequireCall(getLeftmostAccessExpression(node.initializer), /*requireStringLiteralLikeArgument*/ true);
@@ -15682,7 +16080,7 @@
      * We treat the right hand side of assignments with container-like initializers as declarations.
      */
     function getAssignedExpandoInitializer(node) {
-        if (node && node.parent && ts.isBinaryExpression(node.parent) && node.parent.operatorToken.kind === 62 /* EqualsToken */) {
+        if (node && node.parent && ts.isBinaryExpression(node.parent) && node.parent.operatorToken.kind === 63 /* EqualsToken */) {
             var isPrototypeAssignment = isPrototypeAccess(node.parent.left);
             return getExpandoInitializer(node.parent.right, isPrototypeAssignment) ||
                 getDefaultedExpandoInitializer(node.parent.left, node.parent.right, isPrototypeAssignment);
@@ -15708,11 +16106,11 @@
     function getExpandoInitializer(initializer, isPrototypeAssignment) {
         if (ts.isCallExpression(initializer)) {
             var e = skipParentheses(initializer.expression);
-            return e.kind === 209 /* FunctionExpression */ || e.kind === 210 /* ArrowFunction */ ? initializer : undefined;
+            return e.kind === 211 /* FunctionExpression */ || e.kind === 212 /* ArrowFunction */ ? initializer : undefined;
         }
-        if (initializer.kind === 209 /* FunctionExpression */ ||
-            initializer.kind === 222 /* ClassExpression */ ||
-            initializer.kind === 210 /* ArrowFunction */) {
+        if (initializer.kind === 211 /* FunctionExpression */ ||
+            initializer.kind === 224 /* ClassExpression */ ||
+            initializer.kind === 212 /* ArrowFunction */) {
             return initializer;
         }
         if (ts.isObjectLiteralExpression(initializer) && (initializer.properties.length === 0 || isPrototypeAssignment)) {
@@ -15738,7 +16136,7 @@
     }
     function isDefaultedExpandoInitializer(node) {
         var name = ts.isVariableDeclaration(node.parent) ? node.parent.name :
-            ts.isBinaryExpression(node.parent) && node.parent.operatorToken.kind === 62 /* EqualsToken */ ? node.parent.left :
+            ts.isBinaryExpression(node.parent) && node.parent.operatorToken.kind === 63 /* EqualsToken */ ? node.parent.left :
                 undefined;
         return name && getExpandoInitializer(node.right, isPrototypeAccess(name)) && isEntityNameExpression(name) && isSameEntityName(name, node.left);
     }
@@ -15747,7 +16145,7 @@
     function getNameOfExpando(node) {
         if (ts.isBinaryExpression(node.parent)) {
             var parent = ((node.parent.operatorToken.kind === 56 /* BarBarToken */ || node.parent.operatorToken.kind === 60 /* QuestionQuestionToken */) && ts.isBinaryExpression(node.parent.parent)) ? node.parent.parent : node.parent;
-            if (parent.operatorToken.kind === 62 /* EqualsToken */ && ts.isIdentifier(parent.left)) {
+            if (parent.operatorToken.kind === 63 /* EqualsToken */ && ts.isIdentifier(parent.left)) {
                 return parent.left;
             }
         }
@@ -15770,7 +16168,7 @@
             return getTextOfIdentifierOrLiteral(name) === getTextOfIdentifierOrLiteral(initializer);
         }
         if (ts.isIdentifier(name) && isLiteralLikeAccess(initializer) &&
-            (initializer.expression.kind === 107 /* ThisKeyword */ ||
+            (initializer.expression.kind === 108 /* ThisKeyword */ ||
                 ts.isIdentifier(initializer.expression) &&
                     (initializer.expression.escapedText === "window" ||
                         initializer.expression.escapedText === "self" ||
@@ -15838,14 +16236,14 @@
     ts.isLiteralLikeElementAccess = isLiteralLikeElementAccess;
     /** Any series of property and element accesses. */
     function isBindableStaticAccessExpression(node, excludeThisKeyword) {
-        return ts.isPropertyAccessExpression(node) && (!excludeThisKeyword && node.expression.kind === 107 /* ThisKeyword */ || ts.isIdentifier(node.name) && isBindableStaticNameExpression(node.expression, /*excludeThisKeyword*/ true))
+        return ts.isPropertyAccessExpression(node) && (!excludeThisKeyword && node.expression.kind === 108 /* ThisKeyword */ || ts.isIdentifier(node.name) && isBindableStaticNameExpression(node.expression, /*excludeThisKeyword*/ true))
             || isBindableStaticElementAccessExpression(node, excludeThisKeyword);
     }
     ts.isBindableStaticAccessExpression = isBindableStaticAccessExpression;
     /** Any series of property and element accesses, ending in a literal element access */
     function isBindableStaticElementAccessExpression(node, excludeThisKeyword) {
         return isLiteralLikeElementAccess(node)
-            && ((!excludeThisKeyword && node.expression.kind === 107 /* ThisKeyword */) ||
+            && ((!excludeThisKeyword && node.expression.kind === 108 /* ThisKeyword */) ||
                 isEntityNameExpression(node.expression) ||
                 isBindableStaticAccessExpression(node.expression, /*excludeThisKeyword*/ true));
     }
@@ -15875,7 +16273,7 @@
             }
             return 7 /* ObjectDefinePropertyValue */;
         }
-        if (expr.operatorToken.kind !== 62 /* EqualsToken */ || !isAccessExpression(expr.left) || isVoidZero(getRightMostAssignedExpression(expr))) {
+        if (expr.operatorToken.kind !== 63 /* EqualsToken */ || !isAccessExpression(expr.left) || isVoidZero(getRightMostAssignedExpression(expr))) {
             return 0 /* None */;
         }
         if (isBindableStaticNameExpression(expr.left.expression, /*excludeThisKeyword*/ true) && getElementOrPropertyAccessName(expr.left) === "prototype" && ts.isObjectLiteralExpression(getInitializerOfBinaryExpression(expr))) {
@@ -15917,7 +16315,7 @@
     }
     ts.getElementOrPropertyAccessName = getElementOrPropertyAccessName;
     function getAssignmentDeclarationPropertyAccessKind(lhs) {
-        if (lhs.expression.kind === 107 /* ThisKeyword */) {
+        if (lhs.expression.kind === 108 /* ThisKeyword */) {
             return 4 /* ThisProperty */;
         }
         else if (isModuleExportsAccessExpression(lhs)) {
@@ -15962,7 +16360,7 @@
     ts.isPrototypePropertyAssignment = isPrototypePropertyAssignment;
     function isSpecialPropertyDeclaration(expr) {
         return isInJSFile(expr) &&
-            expr.parent && expr.parent.kind === 234 /* ExpressionStatement */ &&
+            expr.parent && expr.parent.kind === 236 /* ExpressionStatement */ &&
             (!ts.isElementAccessExpression(expr) || isLiteralLikeElementAccess(expr)) &&
             !!ts.getJSDocTypeTag(expr.parent);
     }
@@ -15983,17 +16381,17 @@
             return false;
         }
         var decl = symbol.valueDeclaration;
-        return decl.kind === 252 /* FunctionDeclaration */ || ts.isVariableDeclaration(decl) && decl.initializer && ts.isFunctionLike(decl.initializer);
+        return decl.kind === 254 /* FunctionDeclaration */ || ts.isVariableDeclaration(decl) && decl.initializer && ts.isFunctionLike(decl.initializer);
     }
     ts.isFunctionSymbol = isFunctionSymbol;
     function tryGetModuleSpecifierFromDeclaration(node) {
         var _a, _b, _c;
         switch (node.kind) {
-            case 250 /* VariableDeclaration */:
+            case 252 /* VariableDeclaration */:
                 return node.initializer.arguments[0].text;
-            case 262 /* ImportDeclaration */:
+            case 264 /* ImportDeclaration */:
                 return (_a = ts.tryCast(node.moduleSpecifier, ts.isStringLiteralLike)) === null || _a === void 0 ? void 0 : _a.text;
-            case 261 /* ImportEqualsDeclaration */:
+            case 263 /* ImportEqualsDeclaration */:
                 return (_c = ts.tryCast((_b = ts.tryCast(node.moduleReference, ts.isExternalModuleReference)) === null || _b === void 0 ? void 0 : _b.expression, ts.isStringLiteralLike)) === null || _c === void 0 ? void 0 : _c.text;
             default:
                 ts.Debug.assertNever(node);
@@ -16006,14 +16404,14 @@
     ts.importFromModuleSpecifier = importFromModuleSpecifier;
     function tryGetImportFromModuleSpecifier(node) {
         switch (node.parent.kind) {
-            case 262 /* ImportDeclaration */:
-            case 268 /* ExportDeclaration */:
+            case 264 /* ImportDeclaration */:
+            case 270 /* ExportDeclaration */:
                 return node.parent;
-            case 273 /* ExternalModuleReference */:
+            case 275 /* ExternalModuleReference */:
                 return node.parent.parent;
-            case 204 /* CallExpression */:
+            case 206 /* CallExpression */:
                 return isImportCall(node.parent) || isRequireCall(node.parent, /*checkArg*/ false) ? node.parent : undefined;
-            case 192 /* LiteralType */:
+            case 194 /* LiteralType */:
                 ts.Debug.assert(ts.isStringLiteral(node));
                 return ts.tryCast(node.parent.parent, ts.isImportTypeNode);
             default:
@@ -16023,16 +16421,16 @@
     ts.tryGetImportFromModuleSpecifier = tryGetImportFromModuleSpecifier;
     function getExternalModuleName(node) {
         switch (node.kind) {
-            case 262 /* ImportDeclaration */:
-            case 268 /* ExportDeclaration */:
+            case 264 /* ImportDeclaration */:
+            case 270 /* ExportDeclaration */:
                 return node.moduleSpecifier;
-            case 261 /* ImportEqualsDeclaration */:
-                return node.moduleReference.kind === 273 /* ExternalModuleReference */ ? node.moduleReference.expression : undefined;
-            case 196 /* ImportType */:
+            case 263 /* ImportEqualsDeclaration */:
+                return node.moduleReference.kind === 275 /* ExternalModuleReference */ ? node.moduleReference.expression : undefined;
+            case 198 /* ImportType */:
                 return isLiteralImportTypeNode(node) ? node.argument.literal : undefined;
-            case 204 /* CallExpression */:
+            case 206 /* CallExpression */:
                 return node.arguments[0];
-            case 257 /* ModuleDeclaration */:
+            case 259 /* ModuleDeclaration */:
                 return node.name.kind === 10 /* StringLiteral */ ? node.name : undefined;
             default:
                 return ts.Debug.assertNever(node);
@@ -16041,11 +16439,11 @@
     ts.getExternalModuleName = getExternalModuleName;
     function getNamespaceDeclarationNode(node) {
         switch (node.kind) {
-            case 262 /* ImportDeclaration */:
+            case 264 /* ImportDeclaration */:
                 return node.importClause && ts.tryCast(node.importClause.namedBindings, ts.isNamespaceImport);
-            case 261 /* ImportEqualsDeclaration */:
+            case 263 /* ImportEqualsDeclaration */:
                 return node;
-            case 268 /* ExportDeclaration */:
+            case 270 /* ExportDeclaration */:
                 return node.exportClause && ts.tryCast(node.exportClause, ts.isNamespaceExport);
             default:
                 return ts.Debug.assertNever(node);
@@ -16053,7 +16451,7 @@
     }
     ts.getNamespaceDeclarationNode = getNamespaceDeclarationNode;
     function isDefaultImport(node) {
-        return node.kind === 262 /* ImportDeclaration */ && !!node.importClause && !!node.importClause.name;
+        return node.kind === 264 /* ImportDeclaration */ && !!node.importClause && !!node.importClause.name;
     }
     ts.isDefaultImport = isDefaultImport;
     function forEachImportClauseDeclaration(node, action) {
@@ -16074,13 +16472,13 @@
     function hasQuestionToken(node) {
         if (node) {
             switch (node.kind) {
-                case 161 /* Parameter */:
-                case 166 /* MethodDeclaration */:
-                case 165 /* MethodSignature */:
-                case 290 /* ShorthandPropertyAssignment */:
-                case 289 /* PropertyAssignment */:
-                case 164 /* PropertyDeclaration */:
-                case 163 /* PropertySignature */:
+                case 162 /* Parameter */:
+                case 167 /* MethodDeclaration */:
+                case 166 /* MethodSignature */:
+                case 292 /* ShorthandPropertyAssignment */:
+                case 291 /* PropertyAssignment */:
+                case 165 /* PropertyDeclaration */:
+                case 164 /* PropertySignature */:
                     return node.questionToken !== undefined;
             }
         }
@@ -16094,7 +16492,7 @@
     }
     ts.isJSDocConstructSignature = isJSDocConstructSignature;
     function isJSDocTypeAlias(node) {
-        return node.kind === 335 /* JSDocTypedefTag */ || node.kind === 328 /* JSDocCallbackTag */ || node.kind === 329 /* JSDocEnumTag */;
+        return node.kind === 340 /* JSDocTypedefTag */ || node.kind === 333 /* JSDocCallbackTag */ || node.kind === 334 /* JSDocEnumTag */;
     }
     ts.isJSDocTypeAlias = isJSDocTypeAlias;
     function isTypeAlias(node) {
@@ -16104,7 +16502,7 @@
     function getSourceOfAssignment(node) {
         return ts.isExpressionStatement(node) &&
             ts.isBinaryExpression(node.expression) &&
-            node.expression.operatorToken.kind === 62 /* EqualsToken */
+            node.expression.operatorToken.kind === 63 /* EqualsToken */
             ? getRightMostAssignedExpression(node.expression)
             : undefined;
     }
@@ -16119,12 +16517,12 @@
     }
     function getSingleInitializerOfVariableStatementOrPropertyDeclaration(node) {
         switch (node.kind) {
-            case 233 /* VariableStatement */:
+            case 235 /* VariableStatement */:
                 var v = getSingleVariableOfVariableStatement(node);
                 return v && v.initializer;
-            case 164 /* PropertyDeclaration */:
+            case 165 /* PropertyDeclaration */:
                 return node.initializer;
-            case 289 /* PropertyAssignment */:
+            case 291 /* PropertyAssignment */:
                 return node.initializer;
         }
     }
@@ -16136,7 +16534,7 @@
     function getNestedModuleDeclaration(node) {
         return ts.isModuleDeclaration(node) &&
             node.body &&
-            node.body.kind === 257 /* ModuleDeclaration */
+            node.body.kind === 259 /* ModuleDeclaration */
             ? node.body
             : undefined;
     }
@@ -16151,11 +16549,11 @@
             if (ts.hasJSDocNodes(node)) {
                 result = ts.append(result, ts.last(node.jsDoc));
             }
-            if (node.kind === 161 /* Parameter */) {
+            if (node.kind === 162 /* Parameter */) {
                 result = ts.addRange(result, (noCache ? ts.getJSDocParameterTagsNoCache : ts.getJSDocParameterTags)(node));
                 break;
             }
-            if (node.kind === 160 /* TypeParameter */) {
+            if (node.kind === 161 /* TypeParameter */) {
                 result = ts.addRange(result, (noCache ? ts.getJSDocTypeParameterTagsNoCache : ts.getJSDocTypeParameterTags)(node));
                 break;
             }
@@ -16166,13 +16564,13 @@
     ts.getJSDocCommentsAndTags = getJSDocCommentsAndTags;
     function getNextJSDocCommentLocation(node) {
         var parent = node.parent;
-        if (parent.kind === 289 /* PropertyAssignment */ ||
-            parent.kind === 267 /* ExportAssignment */ ||
-            parent.kind === 164 /* PropertyDeclaration */ ||
-            parent.kind === 234 /* ExpressionStatement */ && node.kind === 202 /* PropertyAccessExpression */ ||
-            parent.kind === 243 /* ReturnStatement */ ||
+        if (parent.kind === 291 /* PropertyAssignment */ ||
+            parent.kind === 269 /* ExportAssignment */ ||
+            parent.kind === 165 /* PropertyDeclaration */ ||
+            parent.kind === 236 /* ExpressionStatement */ && node.kind === 204 /* PropertyAccessExpression */ ||
+            parent.kind === 245 /* ReturnStatement */ ||
             getNestedModuleDeclaration(parent) ||
-            ts.isBinaryExpression(node) && node.operatorToken.kind === 62 /* EqualsToken */) {
+            ts.isBinaryExpression(node) && node.operatorToken.kind === 63 /* EqualsToken */) {
             return parent;
         }
         // Try to recognize this pattern when node is initializer of variable declaration and JSDoc comments are on containing variable statement.
@@ -16183,7 +16581,7 @@
         // var x = function(name) { return name.length; }
         else if (parent.parent &&
             (getSingleVariableOfVariableStatement(parent.parent) === node ||
-                ts.isBinaryExpression(parent) && parent.operatorToken.kind === 62 /* EqualsToken */)) {
+                ts.isBinaryExpression(parent) && parent.operatorToken.kind === 63 /* EqualsToken */)) {
             return parent.parent;
         }
         else if (parent.parent && parent.parent.parent &&
@@ -16207,7 +16605,7 @@
         if (!decl) {
             return undefined;
         }
-        var parameter = ts.find(decl.parameters, function (p) { return p.name.kind === 78 /* Identifier */ && p.name.escapedText === name; });
+        var parameter = ts.find(decl.parameters, function (p) { return p.name.kind === 79 /* Identifier */ && p.name.escapedText === name; });
         return parameter && parameter.symbol;
     }
     ts.getParameterSymbolFromJSDoc = getParameterSymbolFromJSDoc;
@@ -16257,7 +16655,7 @@
     ts.hasRestParameter = hasRestParameter;
     function isRestParameter(node) {
         var type = ts.isJSDocParameterTag(node) ? (node.typeExpression && node.typeExpression.type) : node.type;
-        return node.dotDotDotToken !== undefined || !!type && type.kind === 310 /* JSDocVariadicType */;
+        return node.dotDotDotToken !== undefined || !!type && type.kind === 313 /* JSDocVariadicType */;
     }
     ts.isRestParameter = isRestParameter;
     function hasTypeArguments(node) {
@@ -16274,34 +16672,34 @@
         var parent = node.parent;
         while (true) {
             switch (parent.kind) {
-                case 217 /* BinaryExpression */:
+                case 219 /* BinaryExpression */:
                     var binaryOperator = parent.operatorToken.kind;
                     return isAssignmentOperator(binaryOperator) && parent.left === node ?
-                        binaryOperator === 62 /* EqualsToken */ || isLogicalOrCoalescingAssignmentOperator(binaryOperator) ? 1 /* Definite */ : 2 /* Compound */ :
+                        binaryOperator === 63 /* EqualsToken */ || isLogicalOrCoalescingAssignmentOperator(binaryOperator) ? 1 /* Definite */ : 2 /* Compound */ :
                         0 /* None */;
-                case 215 /* PrefixUnaryExpression */:
-                case 216 /* PostfixUnaryExpression */:
+                case 217 /* PrefixUnaryExpression */:
+                case 218 /* PostfixUnaryExpression */:
                     var unaryOperator = parent.operator;
                     return unaryOperator === 45 /* PlusPlusToken */ || unaryOperator === 46 /* MinusMinusToken */ ? 2 /* Compound */ : 0 /* None */;
-                case 239 /* ForInStatement */:
-                case 240 /* ForOfStatement */:
+                case 241 /* ForInStatement */:
+                case 242 /* ForOfStatement */:
                     return parent.initializer === node ? 1 /* Definite */ : 0 /* None */;
-                case 208 /* ParenthesizedExpression */:
-                case 200 /* ArrayLiteralExpression */:
-                case 221 /* SpreadElement */:
-                case 226 /* NonNullExpression */:
+                case 210 /* ParenthesizedExpression */:
+                case 202 /* ArrayLiteralExpression */:
+                case 223 /* SpreadElement */:
+                case 228 /* NonNullExpression */:
                     node = parent;
                     break;
-                case 291 /* SpreadAssignment */:
+                case 293 /* SpreadAssignment */:
                     node = parent.parent;
                     break;
-                case 290 /* ShorthandPropertyAssignment */:
+                case 292 /* ShorthandPropertyAssignment */:
                     if (parent.name !== node) {
                         return 0 /* None */;
                     }
                     node = parent.parent;
                     break;
-                case 289 /* PropertyAssignment */:
+                case 291 /* PropertyAssignment */:
                     if (parent.name === node) {
                         return 0 /* None */;
                     }
@@ -16328,22 +16726,22 @@
      */
     function isNodeWithPossibleHoistedDeclaration(node) {
         switch (node.kind) {
-            case 231 /* Block */:
-            case 233 /* VariableStatement */:
-            case 244 /* WithStatement */:
-            case 235 /* IfStatement */:
-            case 245 /* SwitchStatement */:
-            case 259 /* CaseBlock */:
-            case 285 /* CaseClause */:
-            case 286 /* DefaultClause */:
-            case 246 /* LabeledStatement */:
-            case 238 /* ForStatement */:
-            case 239 /* ForInStatement */:
-            case 240 /* ForOfStatement */:
-            case 236 /* DoStatement */:
-            case 237 /* WhileStatement */:
-            case 248 /* TryStatement */:
-            case 288 /* CatchClause */:
+            case 233 /* Block */:
+            case 235 /* VariableStatement */:
+            case 246 /* WithStatement */:
+            case 237 /* IfStatement */:
+            case 247 /* SwitchStatement */:
+            case 261 /* CaseBlock */:
+            case 287 /* CaseClause */:
+            case 288 /* DefaultClause */:
+            case 248 /* LabeledStatement */:
+            case 240 /* ForStatement */:
+            case 241 /* ForInStatement */:
+            case 242 /* ForOfStatement */:
+            case 238 /* DoStatement */:
+            case 239 /* WhileStatement */:
+            case 250 /* TryStatement */:
+            case 290 /* CatchClause */:
                 return true;
         }
         return false;
@@ -16360,11 +16758,11 @@
         return node;
     }
     function walkUpParenthesizedTypes(node) {
-        return walkUp(node, 187 /* ParenthesizedType */);
+        return walkUp(node, 189 /* ParenthesizedType */);
     }
     ts.walkUpParenthesizedTypes = walkUpParenthesizedTypes;
     function walkUpParenthesizedExpressions(node) {
-        return walkUp(node, 208 /* ParenthesizedExpression */);
+        return walkUp(node, 210 /* ParenthesizedExpression */);
     }
     ts.walkUpParenthesizedExpressions = walkUpParenthesizedExpressions;
     /**
@@ -16374,7 +16772,7 @@
      */
     function walkUpParenthesizedTypesAndGetParentAndChild(node) {
         var child;
-        while (node && node.kind === 187 /* ParenthesizedType */) {
+        while (node && node.kind === 189 /* ParenthesizedType */) {
             child = node;
             node = node.parent;
         }
@@ -16385,19 +16783,13 @@
         return ts.skipOuterExpressions(node, 1 /* Parentheses */);
     }
     ts.skipParentheses = skipParentheses;
-    function skipParenthesesUp(node) {
-        while (node.kind === 208 /* ParenthesizedExpression */) {
-            node = node.parent;
-        }
-        return node;
-    }
     // a node is delete target iff. it is PropertyAccessExpression/ElementAccessExpression with parentheses skipped
     function isDeleteTarget(node) {
-        if (node.kind !== 202 /* PropertyAccessExpression */ && node.kind !== 203 /* ElementAccessExpression */) {
+        if (node.kind !== 204 /* PropertyAccessExpression */ && node.kind !== 205 /* ElementAccessExpression */) {
             return false;
         }
         node = walkUpParenthesizedExpressions(node.parent);
-        return node && node.kind === 211 /* DeleteExpression */;
+        return node && node.kind === 213 /* DeleteExpression */;
     }
     ts.isDeleteTarget = isDeleteTarget;
     function isNodeDescendantOf(node, ancestor) {
@@ -16424,7 +16816,7 @@
                 if (ts.isComputedPropertyName(parent))
                     return parent.parent;
             // falls through
-            case 78 /* Identifier */:
+            case 79 /* Identifier */:
                 if (ts.isDeclaration(parent)) {
                     return parent.name === name ? parent : undefined;
                 }
@@ -16441,7 +16833,7 @@
                         ? binExp
                         : undefined;
                 }
-            case 79 /* PrivateIdentifier */:
+            case 80 /* PrivateIdentifier */:
                 return ts.isDeclaration(parent) && parent.name === name ? parent : undefined;
             default:
                 return undefined;
@@ -16450,7 +16842,7 @@
     ts.getDeclarationFromName = getDeclarationFromName;
     function isLiteralComputedPropertyDeclarationName(node) {
         return isStringOrNumericLiteralLike(node) &&
-            node.parent.kind === 159 /* ComputedPropertyName */ &&
+            node.parent.kind === 160 /* ComputedPropertyName */ &&
             ts.isDeclaration(node.parent.parent);
     }
     ts.isLiteralComputedPropertyDeclarationName = isLiteralComputedPropertyDeclarationName;
@@ -16458,26 +16850,26 @@
     function isIdentifierName(node) {
         var parent = node.parent;
         switch (parent.kind) {
-            case 164 /* PropertyDeclaration */:
-            case 163 /* PropertySignature */:
-            case 166 /* MethodDeclaration */:
-            case 165 /* MethodSignature */:
-            case 168 /* GetAccessor */:
-            case 169 /* SetAccessor */:
-            case 292 /* EnumMember */:
-            case 289 /* PropertyAssignment */:
-            case 202 /* PropertyAccessExpression */:
+            case 165 /* PropertyDeclaration */:
+            case 164 /* PropertySignature */:
+            case 167 /* MethodDeclaration */:
+            case 166 /* MethodSignature */:
+            case 170 /* GetAccessor */:
+            case 171 /* SetAccessor */:
+            case 294 /* EnumMember */:
+            case 291 /* PropertyAssignment */:
+            case 204 /* PropertyAccessExpression */:
                 // Name in member declaration or property name in property access
                 return parent.name === node;
-            case 158 /* QualifiedName */:
+            case 159 /* QualifiedName */:
                 // Name on right hand side of dot in a type query or type reference
                 return parent.right === node;
-            case 199 /* BindingElement */:
-            case 266 /* ImportSpecifier */:
+            case 201 /* BindingElement */:
+            case 268 /* ImportSpecifier */:
                 // Property name in binding element or import specifier
                 return parent.propertyName === node;
-            case 271 /* ExportSpecifier */:
-            case 281 /* JsxAttribute */:
+            case 273 /* ExportSpecifier */:
+            case 283 /* JsxAttribute */:
                 // Any name in an export specifier or JSX Attribute
                 return true;
         }
@@ -16497,33 +16889,33 @@
     // {<Identifier>}
     // {name: <EntityNameExpression>}
     function isAliasSymbolDeclaration(node) {
-        return node.kind === 261 /* ImportEqualsDeclaration */ ||
-            node.kind === 260 /* NamespaceExportDeclaration */ ||
-            node.kind === 263 /* ImportClause */ && !!node.name ||
-            node.kind === 264 /* NamespaceImport */ ||
-            node.kind === 270 /* NamespaceExport */ ||
-            node.kind === 266 /* ImportSpecifier */ ||
-            node.kind === 271 /* ExportSpecifier */ ||
-            node.kind === 267 /* ExportAssignment */ && exportAssignmentIsAlias(node) ||
+        return node.kind === 263 /* ImportEqualsDeclaration */ ||
+            node.kind === 262 /* NamespaceExportDeclaration */ ||
+            node.kind === 265 /* ImportClause */ && !!node.name ||
+            node.kind === 266 /* NamespaceImport */ ||
+            node.kind === 272 /* NamespaceExport */ ||
+            node.kind === 268 /* ImportSpecifier */ ||
+            node.kind === 273 /* ExportSpecifier */ ||
+            node.kind === 269 /* ExportAssignment */ && exportAssignmentIsAlias(node) ||
             ts.isBinaryExpression(node) && getAssignmentDeclarationKind(node) === 2 /* ModuleExports */ && exportAssignmentIsAlias(node) ||
-            ts.isPropertyAccessExpression(node) && ts.isBinaryExpression(node.parent) && node.parent.left === node && node.parent.operatorToken.kind === 62 /* EqualsToken */ && isAliasableExpression(node.parent.right) ||
-            node.kind === 290 /* ShorthandPropertyAssignment */ ||
-            node.kind === 289 /* PropertyAssignment */ && isAliasableExpression(node.initializer);
+            ts.isPropertyAccessExpression(node) && ts.isBinaryExpression(node.parent) && node.parent.left === node && node.parent.operatorToken.kind === 63 /* EqualsToken */ && isAliasableExpression(node.parent.right) ||
+            node.kind === 292 /* ShorthandPropertyAssignment */ ||
+            node.kind === 291 /* PropertyAssignment */ && isAliasableExpression(node.initializer);
     }
     ts.isAliasSymbolDeclaration = isAliasSymbolDeclaration;
     function getAliasDeclarationFromName(node) {
         switch (node.parent.kind) {
-            case 263 /* ImportClause */:
-            case 266 /* ImportSpecifier */:
-            case 264 /* NamespaceImport */:
-            case 271 /* ExportSpecifier */:
-            case 267 /* ExportAssignment */:
-            case 261 /* ImportEqualsDeclaration */:
+            case 265 /* ImportClause */:
+            case 268 /* ImportSpecifier */:
+            case 266 /* NamespaceImport */:
+            case 273 /* ExportSpecifier */:
+            case 269 /* ExportAssignment */:
+            case 263 /* ImportEqualsDeclaration */:
                 return node.parent;
-            case 158 /* QualifiedName */:
+            case 159 /* QualifiedName */:
                 do {
                     node = node.parent;
-                } while (node.parent.kind === 158 /* QualifiedName */);
+                } while (node.parent.kind === 159 /* QualifiedName */);
                 return getAliasDeclarationFromName(node);
         }
     }
@@ -16542,7 +16934,7 @@
     }
     ts.getExportAssignmentExpression = getExportAssignmentExpression;
     function getPropertyAssignmentAliasLikeExpression(node) {
-        return node.kind === 290 /* ShorthandPropertyAssignment */ ? node.name : node.kind === 289 /* PropertyAssignment */ ? node.initializer :
+        return node.kind === 292 /* ShorthandPropertyAssignment */ ? node.name : node.kind === 291 /* PropertyAssignment */ ? node.initializer :
             node.parent.right;
     }
     ts.getPropertyAssignmentAliasLikeExpression = getPropertyAssignmentAliasLikeExpression;
@@ -16559,7 +16951,7 @@
     }
     ts.getEffectiveBaseTypeNode = getEffectiveBaseTypeNode;
     function getClassExtendsHeritageElement(node) {
-        var heritageClause = getHeritageClause(node.heritageClauses, 93 /* ExtendsKeyword */);
+        var heritageClause = getHeritageClause(node.heritageClauses, 94 /* ExtendsKeyword */);
         return heritageClause && heritageClause.types.length > 0 ? heritageClause.types[0] : undefined;
     }
     ts.getClassExtendsHeritageElement = getClassExtendsHeritageElement;
@@ -16568,7 +16960,7 @@
             return ts.getJSDocImplementsTags(node).map(function (n) { return n.class; });
         }
         else {
-            var heritageClause = getHeritageClause(node.heritageClauses, 116 /* ImplementsKeyword */);
+            var heritageClause = getHeritageClause(node.heritageClauses, 117 /* ImplementsKeyword */);
             return heritageClause === null || heritageClause === void 0 ? void 0 : heritageClause.types;
         }
     }
@@ -16581,7 +16973,7 @@
     }
     ts.getAllSuperTypeNodes = getAllSuperTypeNodes;
     function getInterfaceBaseTypeNodes(node) {
-        var heritageClause = getHeritageClause(node.heritageClauses, 93 /* ExtendsKeyword */);
+        var heritageClause = getHeritageClause(node.heritageClauses, 94 /* ExtendsKeyword */);
         return heritageClause ? heritageClause.types : undefined;
     }
     ts.getInterfaceBaseTypeNodes = getInterfaceBaseTypeNodes;
@@ -16608,11 +17000,11 @@
     }
     ts.getAncestor = getAncestor;
     function isKeyword(token) {
-        return 80 /* FirstKeyword */ <= token && token <= 157 /* LastKeyword */;
+        return 81 /* FirstKeyword */ <= token && token <= 158 /* LastKeyword */;
     }
     ts.isKeyword = isKeyword;
     function isContextualKeyword(token) {
-        return 125 /* FirstContextualKeyword */ <= token && token <= 157 /* LastContextualKeyword */;
+        return 126 /* FirstContextualKeyword */ <= token && token <= 158 /* LastContextualKeyword */;
     }
     ts.isContextualKeyword = isContextualKeyword;
     function isNonContextualKeyword(token) {
@@ -16620,7 +17012,7 @@
     }
     ts.isNonContextualKeyword = isNonContextualKeyword;
     function isFutureReservedKeyword(token) {
-        return 116 /* FirstFutureReservedWord */ <= token && token <= 124 /* LastFutureReservedWord */;
+        return 117 /* FirstFutureReservedWord */ <= token && token <= 125 /* LastFutureReservedWord */;
     }
     ts.isFutureReservedKeyword = isFutureReservedKeyword;
     function isStringANonContextualKeyword(name) {
@@ -16656,14 +17048,14 @@
         }
         var flags = 0 /* Normal */;
         switch (node.kind) {
-            case 252 /* FunctionDeclaration */:
-            case 209 /* FunctionExpression */:
-            case 166 /* MethodDeclaration */:
+            case 254 /* FunctionDeclaration */:
+            case 211 /* FunctionExpression */:
+            case 167 /* MethodDeclaration */:
                 if (node.asteriskToken) {
                     flags |= 1 /* Generator */;
                 }
             // falls through
-            case 210 /* ArrowFunction */:
+            case 212 /* ArrowFunction */:
                 if (hasSyntacticModifier(node, 256 /* Async */)) {
                     flags |= 2 /* Async */;
                 }
@@ -16677,10 +17069,10 @@
     ts.getFunctionFlags = getFunctionFlags;
     function isAsyncFunction(node) {
         switch (node.kind) {
-            case 252 /* FunctionDeclaration */:
-            case 209 /* FunctionExpression */:
-            case 210 /* ArrowFunction */:
-            case 166 /* MethodDeclaration */:
+            case 254 /* FunctionDeclaration */:
+            case 211 /* FunctionExpression */:
+            case 212 /* ArrowFunction */:
+            case 167 /* MethodDeclaration */:
                 return node.body !== undefined
                     && node.asteriskToken === undefined
                     && hasSyntacticModifier(node, 256 /* Async */);
@@ -16710,7 +17102,7 @@
     }
     ts.hasDynamicName = hasDynamicName;
     function isDynamicName(name) {
-        if (!(name.kind === 159 /* ComputedPropertyName */ || name.kind === 203 /* ElementAccessExpression */)) {
+        if (!(name.kind === 160 /* ComputedPropertyName */ || name.kind === 205 /* ElementAccessExpression */)) {
             return false;
         }
         var expr = ts.isElementAccessExpression(name) ? skipParentheses(name.argumentExpression) : name.expression;
@@ -16720,13 +17112,13 @@
     ts.isDynamicName = isDynamicName;
     function getPropertyNameForPropertyNameNode(name) {
         switch (name.kind) {
-            case 78 /* Identifier */:
-            case 79 /* PrivateIdentifier */:
+            case 79 /* Identifier */:
+            case 80 /* PrivateIdentifier */:
                 return name.escapedText;
             case 10 /* StringLiteral */:
             case 8 /* NumericLiteral */:
                 return ts.escapeLeadingUnderscores(name.text);
-            case 159 /* ComputedPropertyName */:
+            case 160 /* ComputedPropertyName */:
                 var nameExpression = name.expression;
                 if (isStringOrNumericLiteralLike(nameExpression)) {
                     return ts.escapeLeadingUnderscores(nameExpression.text);
@@ -16745,7 +17137,7 @@
     ts.getPropertyNameForPropertyNameNode = getPropertyNameForPropertyNameNode;
     function isPropertyNameLiteral(node) {
         switch (node.kind) {
-            case 78 /* Identifier */:
+            case 79 /* Identifier */:
             case 10 /* StringLiteral */:
             case 14 /* NoSubstitutionTemplateLiteral */:
             case 8 /* NumericLiteral */:
@@ -16775,11 +17167,15 @@
         return ts.startsWith(symbol.escapedName, "__@");
     }
     ts.isKnownSymbol = isKnownSymbol;
+    function isPrivateIdentifierSymbol(symbol) {
+        return ts.startsWith(symbol.escapedName, "__#");
+    }
+    ts.isPrivateIdentifierSymbol = isPrivateIdentifierSymbol;
     /**
      * Includes the word "Symbol" with unicode escapes
      */
     function isESSymbolIdentifier(node) {
-        return node.kind === 78 /* Identifier */ && node.escapedText === "Symbol";
+        return node.kind === 79 /* Identifier */ && node.escapedText === "Symbol";
     }
     ts.isESSymbolIdentifier = isESSymbolIdentifier;
     function isPushOrUnshiftIdentifier(node) {
@@ -16788,11 +17184,11 @@
     ts.isPushOrUnshiftIdentifier = isPushOrUnshiftIdentifier;
     function isParameterDeclaration(node) {
         var root = getRootDeclaration(node);
-        return root.kind === 161 /* Parameter */;
+        return root.kind === 162 /* Parameter */;
     }
     ts.isParameterDeclaration = isParameterDeclaration;
     function getRootDeclaration(node) {
-        while (node.kind === 199 /* BindingElement */) {
+        while (node.kind === 201 /* BindingElement */) {
             node = node.parent.parent;
         }
         return node;
@@ -16800,15 +17196,15 @@
     ts.getRootDeclaration = getRootDeclaration;
     function nodeStartsNewLexicalEnvironment(node) {
         var kind = node.kind;
-        return kind === 167 /* Constructor */
-            || kind === 209 /* FunctionExpression */
-            || kind === 252 /* FunctionDeclaration */
-            || kind === 210 /* ArrowFunction */
-            || kind === 166 /* MethodDeclaration */
-            || kind === 168 /* GetAccessor */
-            || kind === 169 /* SetAccessor */
-            || kind === 257 /* ModuleDeclaration */
-            || kind === 298 /* SourceFile */;
+        return kind === 169 /* Constructor */
+            || kind === 211 /* FunctionExpression */
+            || kind === 254 /* FunctionDeclaration */
+            || kind === 212 /* ArrowFunction */
+            || kind === 167 /* MethodDeclaration */
+            || kind === 170 /* GetAccessor */
+            || kind === 171 /* SetAccessor */
+            || kind === 259 /* ModuleDeclaration */
+            || kind === 300 /* SourceFile */;
     }
     ts.nodeStartsNewLexicalEnvironment = nodeStartsNewLexicalEnvironment;
     function nodeIsSynthesized(range) {
@@ -16827,41 +17223,41 @@
     })(Associativity = ts.Associativity || (ts.Associativity = {}));
     function getExpressionAssociativity(expression) {
         var operator = getOperator(expression);
-        var hasArguments = expression.kind === 205 /* NewExpression */ && expression.arguments !== undefined;
+        var hasArguments = expression.kind === 207 /* NewExpression */ && expression.arguments !== undefined;
         return getOperatorAssociativity(expression.kind, operator, hasArguments);
     }
     ts.getExpressionAssociativity = getExpressionAssociativity;
     function getOperatorAssociativity(kind, operator, hasArguments) {
         switch (kind) {
-            case 205 /* NewExpression */:
+            case 207 /* NewExpression */:
                 return hasArguments ? 0 /* Left */ : 1 /* Right */;
-            case 215 /* PrefixUnaryExpression */:
-            case 212 /* TypeOfExpression */:
-            case 213 /* VoidExpression */:
-            case 211 /* DeleteExpression */:
-            case 214 /* AwaitExpression */:
-            case 218 /* ConditionalExpression */:
-            case 220 /* YieldExpression */:
+            case 217 /* PrefixUnaryExpression */:
+            case 214 /* TypeOfExpression */:
+            case 215 /* VoidExpression */:
+            case 213 /* DeleteExpression */:
+            case 216 /* AwaitExpression */:
+            case 220 /* ConditionalExpression */:
+            case 222 /* YieldExpression */:
                 return 1 /* Right */;
-            case 217 /* BinaryExpression */:
+            case 219 /* BinaryExpression */:
                 switch (operator) {
                     case 42 /* AsteriskAsteriskToken */:
-                    case 62 /* EqualsToken */:
-                    case 63 /* PlusEqualsToken */:
-                    case 64 /* MinusEqualsToken */:
-                    case 66 /* AsteriskAsteriskEqualsToken */:
-                    case 65 /* AsteriskEqualsToken */:
-                    case 67 /* SlashEqualsToken */:
-                    case 68 /* PercentEqualsToken */:
-                    case 69 /* LessThanLessThanEqualsToken */:
-                    case 70 /* GreaterThanGreaterThanEqualsToken */:
-                    case 71 /* GreaterThanGreaterThanGreaterThanEqualsToken */:
-                    case 72 /* AmpersandEqualsToken */:
-                    case 77 /* CaretEqualsToken */:
-                    case 73 /* BarEqualsToken */:
-                    case 74 /* BarBarEqualsToken */:
-                    case 75 /* AmpersandAmpersandEqualsToken */:
-                    case 76 /* QuestionQuestionEqualsToken */:
+                    case 63 /* EqualsToken */:
+                    case 64 /* PlusEqualsToken */:
+                    case 65 /* MinusEqualsToken */:
+                    case 67 /* AsteriskAsteriskEqualsToken */:
+                    case 66 /* AsteriskEqualsToken */:
+                    case 68 /* SlashEqualsToken */:
+                    case 69 /* PercentEqualsToken */:
+                    case 70 /* LessThanLessThanEqualsToken */:
+                    case 71 /* GreaterThanGreaterThanEqualsToken */:
+                    case 72 /* GreaterThanGreaterThanGreaterThanEqualsToken */:
+                    case 73 /* AmpersandEqualsToken */:
+                    case 78 /* CaretEqualsToken */:
+                    case 74 /* BarEqualsToken */:
+                    case 75 /* BarBarEqualsToken */:
+                    case 76 /* AmpersandAmpersandEqualsToken */:
+                    case 77 /* QuestionQuestionEqualsToken */:
                         return 1 /* Right */;
                 }
         }
@@ -16870,15 +17266,15 @@
     ts.getOperatorAssociativity = getOperatorAssociativity;
     function getExpressionPrecedence(expression) {
         var operator = getOperator(expression);
-        var hasArguments = expression.kind === 205 /* NewExpression */ && expression.arguments !== undefined;
+        var hasArguments = expression.kind === 207 /* NewExpression */ && expression.arguments !== undefined;
         return getOperatorPrecedence(expression.kind, operator, hasArguments);
     }
     ts.getExpressionPrecedence = getExpressionPrecedence;
     function getOperator(expression) {
-        if (expression.kind === 217 /* BinaryExpression */) {
+        if (expression.kind === 219 /* BinaryExpression */) {
             return expression.operatorToken.kind;
         }
-        else if (expression.kind === 215 /* PrefixUnaryExpression */ || expression.kind === 216 /* PostfixUnaryExpression */) {
+        else if (expression.kind === 217 /* PrefixUnaryExpression */ || expression.kind === 218 /* PostfixUnaryExpression */) {
             return expression.operator;
         }
         else {
@@ -17057,82 +17453,82 @@
     })(OperatorPrecedence = ts.OperatorPrecedence || (ts.OperatorPrecedence = {}));
     function getOperatorPrecedence(nodeKind, operatorKind, hasArguments) {
         switch (nodeKind) {
-            case 341 /* CommaListExpression */:
+            case 346 /* CommaListExpression */:
                 return 0 /* Comma */;
-            case 221 /* SpreadElement */:
+            case 223 /* SpreadElement */:
                 return 1 /* Spread */;
-            case 220 /* YieldExpression */:
+            case 222 /* YieldExpression */:
                 return 2 /* Yield */;
-            case 218 /* ConditionalExpression */:
+            case 220 /* ConditionalExpression */:
                 return 4 /* Conditional */;
-            case 217 /* BinaryExpression */:
+            case 219 /* BinaryExpression */:
                 switch (operatorKind) {
                     case 27 /* CommaToken */:
                         return 0 /* Comma */;
-                    case 62 /* EqualsToken */:
-                    case 63 /* PlusEqualsToken */:
-                    case 64 /* MinusEqualsToken */:
-                    case 66 /* AsteriskAsteriskEqualsToken */:
-                    case 65 /* AsteriskEqualsToken */:
-                    case 67 /* SlashEqualsToken */:
-                    case 68 /* PercentEqualsToken */:
-                    case 69 /* LessThanLessThanEqualsToken */:
-                    case 70 /* GreaterThanGreaterThanEqualsToken */:
-                    case 71 /* GreaterThanGreaterThanGreaterThanEqualsToken */:
-                    case 72 /* AmpersandEqualsToken */:
-                    case 77 /* CaretEqualsToken */:
-                    case 73 /* BarEqualsToken */:
-                    case 74 /* BarBarEqualsToken */:
-                    case 75 /* AmpersandAmpersandEqualsToken */:
-                    case 76 /* QuestionQuestionEqualsToken */:
+                    case 63 /* EqualsToken */:
+                    case 64 /* PlusEqualsToken */:
+                    case 65 /* MinusEqualsToken */:
+                    case 67 /* AsteriskAsteriskEqualsToken */:
+                    case 66 /* AsteriskEqualsToken */:
+                    case 68 /* SlashEqualsToken */:
+                    case 69 /* PercentEqualsToken */:
+                    case 70 /* LessThanLessThanEqualsToken */:
+                    case 71 /* GreaterThanGreaterThanEqualsToken */:
+                    case 72 /* GreaterThanGreaterThanGreaterThanEqualsToken */:
+                    case 73 /* AmpersandEqualsToken */:
+                    case 78 /* CaretEqualsToken */:
+                    case 74 /* BarEqualsToken */:
+                    case 75 /* BarBarEqualsToken */:
+                    case 76 /* AmpersandAmpersandEqualsToken */:
+                    case 77 /* QuestionQuestionEqualsToken */:
                         return 3 /* Assignment */;
                     default:
                         return getBinaryOperatorPrecedence(operatorKind);
                 }
             // TODO: Should prefix `++` and `--` be moved to the `Update` precedence?
-            case 207 /* TypeAssertionExpression */:
-            case 226 /* NonNullExpression */:
-            case 215 /* PrefixUnaryExpression */:
-            case 212 /* TypeOfExpression */:
-            case 213 /* VoidExpression */:
-            case 211 /* DeleteExpression */:
-            case 214 /* AwaitExpression */:
+            case 209 /* TypeAssertionExpression */:
+            case 228 /* NonNullExpression */:
+            case 217 /* PrefixUnaryExpression */:
+            case 214 /* TypeOfExpression */:
+            case 215 /* VoidExpression */:
+            case 213 /* DeleteExpression */:
+            case 216 /* AwaitExpression */:
                 return 16 /* Unary */;
-            case 216 /* PostfixUnaryExpression */:
+            case 218 /* PostfixUnaryExpression */:
                 return 17 /* Update */;
-            case 204 /* CallExpression */:
+            case 206 /* CallExpression */:
                 return 18 /* LeftHandSide */;
-            case 205 /* NewExpression */:
+            case 207 /* NewExpression */:
                 return hasArguments ? 19 /* Member */ : 18 /* LeftHandSide */;
-            case 206 /* TaggedTemplateExpression */:
-            case 202 /* PropertyAccessExpression */:
-            case 203 /* ElementAccessExpression */:
-            case 227 /* MetaProperty */:
+            case 208 /* TaggedTemplateExpression */:
+            case 204 /* PropertyAccessExpression */:
+            case 205 /* ElementAccessExpression */:
+            case 229 /* MetaProperty */:
                 return 19 /* Member */;
-            case 225 /* AsExpression */:
+            case 227 /* AsExpression */:
                 return 11 /* Relational */;
-            case 107 /* ThisKeyword */:
-            case 105 /* SuperKeyword */:
-            case 78 /* Identifier */:
-            case 103 /* NullKeyword */:
-            case 109 /* TrueKeyword */:
-            case 94 /* FalseKeyword */:
+            case 108 /* ThisKeyword */:
+            case 106 /* SuperKeyword */:
+            case 79 /* Identifier */:
+            case 104 /* NullKeyword */:
+            case 110 /* TrueKeyword */:
+            case 95 /* FalseKeyword */:
             case 8 /* NumericLiteral */:
             case 9 /* BigIntLiteral */:
             case 10 /* StringLiteral */:
-            case 200 /* ArrayLiteralExpression */:
-            case 201 /* ObjectLiteralExpression */:
-            case 209 /* FunctionExpression */:
-            case 210 /* ArrowFunction */:
-            case 222 /* ClassExpression */:
+            case 202 /* ArrayLiteralExpression */:
+            case 203 /* ObjectLiteralExpression */:
+            case 211 /* FunctionExpression */:
+            case 212 /* ArrowFunction */:
+            case 224 /* ClassExpression */:
             case 13 /* RegularExpressionLiteral */:
             case 14 /* NoSubstitutionTemplateLiteral */:
-            case 219 /* TemplateExpression */:
-            case 208 /* ParenthesizedExpression */:
-            case 223 /* OmittedExpression */:
-            case 274 /* JsxElement */:
-            case 275 /* JsxSelfClosingElement */:
-            case 278 /* JsxFragment */:
+            case 221 /* TemplateExpression */:
+            case 210 /* ParenthesizedExpression */:
+            case 225 /* OmittedExpression */:
+            case 276 /* JsxElement */:
+            case 277 /* JsxSelfClosingElement */:
+            case 280 /* JsxFragment */:
                 return 20 /* Primary */;
             default:
                 return -1 /* Invalid */;
@@ -17162,9 +17558,9 @@
             case 31 /* GreaterThanToken */:
             case 32 /* LessThanEqualsToken */:
             case 33 /* GreaterThanEqualsToken */:
-            case 101 /* InstanceOfKeyword */:
-            case 100 /* InKeyword */:
-            case 126 /* AsKeyword */:
+            case 102 /* InstanceOfKeyword */:
+            case 101 /* InKeyword */:
+            case 127 /* AsKeyword */:
                 return 11 /* Relational */;
             case 47 /* LessThanLessThanToken */:
             case 48 /* GreaterThanGreaterThanToken */:
@@ -17188,7 +17584,7 @@
     function getSemanticJsxChildren(children) {
         return ts.filter(children, function (i) {
             switch (i.kind) {
-                case 284 /* JsxExpression */:
+                case 286 /* JsxExpression */:
                     return !!i.expression;
                 case 11 /* JsxText */:
                     return !i.containsOnlyTriviaWhiteSpaces;
@@ -17281,8 +17677,8 @@
     // There is no reason for this other than that JSON.stringify does not handle it either.
     var doubleQuoteEscapedCharsRegExp = /[\\\"\u0000-\u001f\t\v\f\b\r\n\u2028\u2029\u0085]/g;
     var singleQuoteEscapedCharsRegExp = /[\\\'\u0000-\u001f\t\v\f\b\r\n\u2028\u2029\u0085]/g;
-    // Template strings should be preserved as much as possible
-    var backtickQuoteEscapedCharsRegExp = /[\\`]/g;
+    // Template strings preserve simple LF newlines, still encode CRLF (or CR)
+    var backtickQuoteEscapedCharsRegExp = /\r\n|[\\\`\u0000-\u001f\t\v\f\b\r\u2028\u2029\u0085]/g;
     var escapedCharsMap = new ts.Map(ts.getEntries({
         "\t": "\\t",
         "\v": "\\v",
@@ -17296,7 +17692,8 @@
         "\`": "\\\`",
         "\u2028": "\\u2028",
         "\u2029": "\\u2029",
-        "\u0085": "\\u0085" // nextLine
+        "\u0085": "\\u0085",
+        "\r\n": "\\r\\n", // special case for CRLFs in backticks
     }));
     function encodeUtf16EscapeSequence(charCode) {
         var hexCharCode = charCode.toString(16).toUpperCase();
@@ -17490,7 +17887,7 @@
             reportInaccessibleThisError: ts.noop,
             reportPrivateInBaseOfClassExpression: ts.noop,
             reportInaccessibleUniqueSymbolError: ts.noop,
-            trackSymbol: ts.noop,
+            trackSymbol: function () { return false; },
             writeKeyword: write,
             writeOperator: write,
             writeParameter: write,
@@ -17747,11 +18144,21 @@
     }
     ts.parameterIsThisKeyword = parameterIsThisKeyword;
     function isThisIdentifier(node) {
-        return !!node && node.kind === 78 /* Identifier */ && identifierIsThisKeyword(node);
+        return !!node && node.kind === 79 /* Identifier */ && identifierIsThisKeyword(node);
     }
     ts.isThisIdentifier = isThisIdentifier;
+    function isThisInTypeQuery(node) {
+        if (!isThisIdentifier(node)) {
+            return false;
+        }
+        while (ts.isQualifiedName(node.parent) && node.parent.left === node) {
+            node = node.parent;
+        }
+        return node.parent.kind === 179 /* TypeQuery */;
+    }
+    ts.isThisInTypeQuery = isThisInTypeQuery;
     function identifierIsThisKeyword(id) {
-        return id.originalKeywordKind === 107 /* ThisKeyword */;
+        return id.originalKeywordKind === 108 /* ThisKeyword */;
     }
     ts.identifierIsThisKeyword = identifierIsThisKeyword;
     function getAllAccessorDeclarations(declarations, accessor) {
@@ -17762,10 +18169,10 @@
         var setAccessor;
         if (hasDynamicName(accessor)) {
             firstAccessor = accessor;
-            if (accessor.kind === 168 /* GetAccessor */) {
+            if (accessor.kind === 170 /* GetAccessor */) {
                 getAccessor = accessor;
             }
-            else if (accessor.kind === 169 /* SetAccessor */) {
+            else if (accessor.kind === 171 /* SetAccessor */) {
                 setAccessor = accessor;
             }
             else {
@@ -17775,7 +18182,7 @@
         else {
             ts.forEach(declarations, function (member) {
                 if (ts.isAccessor(member)
-                    && hasSyntacticModifier(member, 32 /* Static */) === hasSyntacticModifier(accessor, 32 /* Static */)) {
+                    && isStatic(member) === isStatic(accessor)) {
                     var memberName = getPropertyNameForPropertyNameNode(member.name);
                     var accessorName = getPropertyNameForPropertyNameNode(accessor.name);
                     if (memberName === accessorName) {
@@ -17785,10 +18192,10 @@
                         else if (!secondAccessor) {
                             secondAccessor = member;
                         }
-                        if (member.kind === 168 /* GetAccessor */ && !getAccessor) {
+                        if (member.kind === 170 /* GetAccessor */ && !getAccessor) {
                             getAccessor = member;
                         }
-                        if (member.kind === 169 /* SetAccessor */ && !setAccessor) {
+                        if (member.kind === 171 /* SetAccessor */ && !setAccessor) {
                             setAccessor = member;
                         }
                     }
@@ -17837,7 +18244,7 @@
     ts.getJSDocTypeParameterDeclarations = getJSDocTypeParameterDeclarations;
     /** template tags are only available when a typedef isn't already using them */
     function isNonTypeAliasTemplate(tag) {
-        return ts.isJSDocTemplateTag(tag) && !(tag.parent.kind === 312 /* JSDocComment */ && tag.parent.tags.some(isJSDocTypeAlias));
+        return ts.isJSDocTemplateTag(tag) && !(tag.parent.kind === 315 /* JSDocComment */ && tag.parent.tags.some(isJSDocTypeAlias));
     }
     /**
      * Gets the effective type annotation of the value parameter of a set accessor. If the node
@@ -18013,7 +18420,7 @@
     ts.writeCommentRange = writeCommentRange;
     function writeTrimmedCurrentLine(text, commentEnd, writer, newLine, pos, nextLineStart) {
         var end = Math.min(commentEnd, nextLineStart - 1);
-        var currentLineText = text.substring(pos, end).replace(/^\s+|\s+$/g, "");
+        var currentLineText = ts.trimString(text.substring(pos, end));
         if (currentLineText) {
             // trimmed forward and ending spaces text
             writer.writeComment(currentLineText);
@@ -18056,6 +18463,11 @@
         return !!getSelectedSyntacticModifierFlags(node, flags);
     }
     ts.hasSyntacticModifier = hasSyntacticModifier;
+    function isStatic(node) {
+        // https://tc39.es/ecma262/#sec-static-semantics-isstatic
+        return ts.isClassElement(node) && hasStaticModifier(node) || ts.isClassStaticBlockDeclaration(node);
+    }
+    ts.isStatic = isStatic;
     function hasStaticModifier(node) {
         return hasSyntacticModifier(node, 32 /* Static */);
     }
@@ -18085,7 +18497,7 @@
     }
     ts.getSelectedSyntacticModifierFlags = getSelectedSyntacticModifierFlags;
     function getModifierFlagsWorker(node, includeJSDoc, alwaysIncludeJSDoc) {
-        if (node.kind >= 0 /* FirstToken */ && node.kind <= 157 /* LastToken */) {
+        if (node.kind >= 0 /* FirstToken */ && node.kind <= 158 /* LastToken */) {
             return 0 /* None */;
         }
         if (!(node.modifierFlagsCache & 536870912 /* HasComputedFlags */)) {
@@ -18154,7 +18566,7 @@
      */
     function getSyntacticModifierFlagsNoCache(node) {
         var flags = modifiersToFlags(node.modifiers);
-        if (node.flags & 4 /* NestedNamespace */ || (node.kind === 78 /* Identifier */ && node.isInJSDocNamespace)) {
+        if (node.flags & 4 /* NestedNamespace */ || (node.kind === 79 /* Identifier */ && node.isInJSDocNamespace)) {
             flags |= 1 /* Export */;
         }
         return flags;
@@ -18173,18 +18585,18 @@
     ts.modifiersToFlags = modifiersToFlags;
     function modifierToFlag(token) {
         switch (token) {
-            case 123 /* StaticKeyword */: return 32 /* Static */;
-            case 122 /* PublicKeyword */: return 4 /* Public */;
-            case 121 /* ProtectedKeyword */: return 16 /* Protected */;
-            case 120 /* PrivateKeyword */: return 8 /* Private */;
-            case 125 /* AbstractKeyword */: return 128 /* Abstract */;
-            case 92 /* ExportKeyword */: return 1 /* Export */;
-            case 133 /* DeclareKeyword */: return 2 /* Ambient */;
-            case 84 /* ConstKeyword */: return 2048 /* Const */;
-            case 87 /* DefaultKeyword */: return 512 /* Default */;
-            case 129 /* AsyncKeyword */: return 256 /* Async */;
-            case 142 /* ReadonlyKeyword */: return 64 /* Readonly */;
-            case 156 /* OverrideKeyword */: return 16384 /* Override */;
+            case 124 /* StaticKeyword */: return 32 /* Static */;
+            case 123 /* PublicKeyword */: return 4 /* Public */;
+            case 122 /* ProtectedKeyword */: return 16 /* Protected */;
+            case 121 /* PrivateKeyword */: return 8 /* Private */;
+            case 126 /* AbstractKeyword */: return 128 /* Abstract */;
+            case 93 /* ExportKeyword */: return 1 /* Export */;
+            case 134 /* DeclareKeyword */: return 2 /* Ambient */;
+            case 85 /* ConstKeyword */: return 2048 /* Const */;
+            case 88 /* DefaultKeyword */: return 512 /* Default */;
+            case 130 /* AsyncKeyword */: return 256 /* Async */;
+            case 143 /* ReadonlyKeyword */: return 64 /* Readonly */;
+            case 157 /* OverrideKeyword */: return 16384 /* Override */;
         }
         return 0 /* None */;
     }
@@ -18200,9 +18612,9 @@
     }
     ts.isLogicalOperator = isLogicalOperator;
     function isLogicalOrCoalescingAssignmentOperator(token) {
-        return token === 74 /* BarBarEqualsToken */
-            || token === 75 /* AmpersandAmpersandEqualsToken */
-            || token === 76 /* QuestionQuestionEqualsToken */;
+        return token === 75 /* BarBarEqualsToken */
+            || token === 76 /* AmpersandAmpersandEqualsToken */
+            || token === 77 /* QuestionQuestionEqualsToken */;
     }
     ts.isLogicalOrCoalescingAssignmentOperator = isLogicalOrCoalescingAssignmentOperator;
     function isLogicalOrCoalescingAssignmentExpression(expr) {
@@ -18210,7 +18622,7 @@
     }
     ts.isLogicalOrCoalescingAssignmentExpression = isLogicalOrCoalescingAssignmentExpression;
     function isAssignmentOperator(token) {
-        return token >= 62 /* FirstAssignment */ && token <= 77 /* LastAssignment */;
+        return token >= 63 /* FirstAssignment */ && token <= 78 /* LastAssignment */;
     }
     ts.isAssignmentOperator = isAssignmentOperator;
     /** Get `C` given `N` if `N` is in the position `class C extends N` where `N` is an ExpressionWithTypeArguments. */
@@ -18223,14 +18635,14 @@
         return ts.isExpressionWithTypeArguments(node)
             && ts.isHeritageClause(node.parent)
             && ts.isClassLike(node.parent.parent)
-            ? { class: node.parent.parent, isImplements: node.parent.token === 116 /* ImplementsKeyword */ }
+            ? { class: node.parent.parent, isImplements: node.parent.token === 117 /* ImplementsKeyword */ }
             : undefined;
     }
     ts.tryGetClassImplementingOrExtendingExpressionWithTypeArguments = tryGetClassImplementingOrExtendingExpressionWithTypeArguments;
     function isAssignmentExpression(node, excludeCompoundAssignment) {
         return ts.isBinaryExpression(node)
             && (excludeCompoundAssignment
-                ? node.operatorToken.kind === 62 /* EqualsToken */
+                ? node.operatorToken.kind === 63 /* EqualsToken */
                 : isAssignmentOperator(node.operatorToken.kind))
             && ts.isLeftHandSideExpression(node.left);
     }
@@ -18242,8 +18654,8 @@
     function isDestructuringAssignment(node) {
         if (isAssignmentExpression(node, /*excludeCompoundAssignment*/ true)) {
             var kind = node.left.kind;
-            return kind === 201 /* ObjectLiteralExpression */
-                || kind === 200 /* ArrayLiteralExpression */;
+            return kind === 203 /* ObjectLiteralExpression */
+                || kind === 202 /* ArrayLiteralExpression */;
         }
         return false;
     }
@@ -18253,33 +18665,33 @@
     }
     ts.isExpressionWithTypeArgumentsInClassExtendsClause = isExpressionWithTypeArgumentsInClassExtendsClause;
     function isEntityNameExpression(node) {
-        return node.kind === 78 /* Identifier */ || isPropertyAccessEntityNameExpression(node);
+        return node.kind === 79 /* Identifier */ || isPropertyAccessEntityNameExpression(node);
     }
     ts.isEntityNameExpression = isEntityNameExpression;
     function getFirstIdentifier(node) {
         switch (node.kind) {
-            case 78 /* Identifier */:
+            case 79 /* Identifier */:
                 return node;
-            case 158 /* QualifiedName */:
+            case 159 /* QualifiedName */:
                 do {
                     node = node.left;
-                } while (node.kind !== 78 /* Identifier */);
+                } while (node.kind !== 79 /* Identifier */);
                 return node;
-            case 202 /* PropertyAccessExpression */:
+            case 204 /* PropertyAccessExpression */:
                 do {
                     node = node.expression;
-                } while (node.kind !== 78 /* Identifier */);
+                } while (node.kind !== 79 /* Identifier */);
                 return node;
         }
     }
     ts.getFirstIdentifier = getFirstIdentifier;
     function isDottedName(node) {
-        return node.kind === 78 /* Identifier */
-            || node.kind === 107 /* ThisKeyword */
-            || node.kind === 105 /* SuperKeyword */
-            || node.kind === 227 /* MetaProperty */
-            || node.kind === 202 /* PropertyAccessExpression */ && isDottedName(node.expression)
-            || node.kind === 208 /* ParenthesizedExpression */ && isDottedName(node.expression);
+        return node.kind === 79 /* Identifier */
+            || node.kind === 108 /* ThisKeyword */
+            || node.kind === 106 /* SuperKeyword */
+            || node.kind === 229 /* MetaProperty */
+            || node.kind === 204 /* PropertyAccessExpression */ && isDottedName(node.expression)
+            || node.kind === 210 /* ParenthesizedExpression */ && isDottedName(node.expression);
     }
     ts.isDottedName = isDottedName;
     function isPropertyAccessEntityNameExpression(node) {
@@ -18310,17 +18722,23 @@
     }
     ts.isPrototypeAccess = isPrototypeAccess;
     function isRightSideOfQualifiedNameOrPropertyAccess(node) {
-        return (node.parent.kind === 158 /* QualifiedName */ && node.parent.right === node) ||
-            (node.parent.kind === 202 /* PropertyAccessExpression */ && node.parent.name === node);
+        return (node.parent.kind === 159 /* QualifiedName */ && node.parent.right === node) ||
+            (node.parent.kind === 204 /* PropertyAccessExpression */ && node.parent.name === node);
     }
     ts.isRightSideOfQualifiedNameOrPropertyAccess = isRightSideOfQualifiedNameOrPropertyAccess;
+    function isRightSideOfQualifiedNameOrPropertyAccessOrJSDocMemberName(node) {
+        return ts.isQualifiedName(node.parent) && node.parent.right === node
+            || ts.isPropertyAccessExpression(node.parent) && node.parent.name === node
+            || ts.isJSDocMemberName(node.parent) && node.parent.right === node;
+    }
+    ts.isRightSideOfQualifiedNameOrPropertyAccessOrJSDocMemberName = isRightSideOfQualifiedNameOrPropertyAccessOrJSDocMemberName;
     function isEmptyObjectLiteral(expression) {
-        return expression.kind === 201 /* ObjectLiteralExpression */ &&
+        return expression.kind === 203 /* ObjectLiteralExpression */ &&
             expression.properties.length === 0;
     }
     ts.isEmptyObjectLiteral = isEmptyObjectLiteral;
     function isEmptyArrayLiteral(expression) {
-        return expression.kind === 200 /* ArrayLiteralExpression */ &&
+        return expression.kind === 202 /* ArrayLiteralExpression */ &&
             expression.elements.length === 0;
     }
     ts.isEmptyArrayLiteral = isEmptyArrayLiteral;
@@ -18652,8 +19070,8 @@
         var parseNode = ts.getParseTreeNode(node);
         if (parseNode) {
             switch (parseNode.parent.kind) {
-                case 256 /* EnumDeclaration */:
-                case 257 /* ModuleDeclaration */:
+                case 258 /* EnumDeclaration */:
+                case 259 /* ModuleDeclaration */:
                     return parseNode === parseNode.parent.name;
             }
         }
@@ -18683,7 +19101,7 @@
     function getDeclarationModifierFlagsFromSymbol(s, isWrite) {
         if (isWrite === void 0) { isWrite = false; }
         if (s.valueDeclaration) {
-            var declaration = (isWrite && s.declarations && ts.find(s.declarations, function (d) { return d.kind === 169 /* SetAccessor */; })) || s.valueDeclaration;
+            var declaration = (isWrite && s.declarations && ts.find(s.declarations, function (d) { return d.kind === 171 /* SetAccessor */; })) || s.valueDeclaration;
             var flags = ts.getCombinedModifierFlags(declaration);
             return s.parent && s.parent.flags & 32 /* Class */ ? flags : flags & ~28 /* AccessibilityModifier */;
         }
@@ -18732,35 +19150,35 @@
         if (!parent)
             return 0 /* Read */;
         switch (parent.kind) {
-            case 208 /* ParenthesizedExpression */:
+            case 210 /* ParenthesizedExpression */:
                 return accessKind(parent);
-            case 216 /* PostfixUnaryExpression */:
-            case 215 /* PrefixUnaryExpression */:
+            case 218 /* PostfixUnaryExpression */:
+            case 217 /* PrefixUnaryExpression */:
                 var operator = parent.operator;
                 return operator === 45 /* PlusPlusToken */ || operator === 46 /* MinusMinusToken */ ? writeOrReadWrite() : 0 /* Read */;
-            case 217 /* BinaryExpression */:
+            case 219 /* BinaryExpression */:
                 var _a = parent, left = _a.left, operatorToken = _a.operatorToken;
                 return left === node && isAssignmentOperator(operatorToken.kind) ?
-                    operatorToken.kind === 62 /* EqualsToken */ ? 1 /* Write */ : writeOrReadWrite()
+                    operatorToken.kind === 63 /* EqualsToken */ ? 1 /* Write */ : writeOrReadWrite()
                     : 0 /* Read */;
-            case 202 /* PropertyAccessExpression */:
+            case 204 /* PropertyAccessExpression */:
                 return parent.name !== node ? 0 /* Read */ : accessKind(parent);
-            case 289 /* PropertyAssignment */: {
+            case 291 /* PropertyAssignment */: {
                 var parentAccess = accessKind(parent.parent);
                 // In `({ x: varname }) = { x: 1 }`, the left `x` is a read, the right `x` is a write.
                 return node === parent.name ? reverseAccessKind(parentAccess) : parentAccess;
             }
-            case 290 /* ShorthandPropertyAssignment */:
+            case 292 /* ShorthandPropertyAssignment */:
                 // Assume it's the local variable being accessed, since we don't check public properties for --noUnusedLocals.
                 return node === parent.objectAssignmentInitializer ? 0 /* Read */ : accessKind(parent.parent);
-            case 200 /* ArrayLiteralExpression */:
+            case 202 /* ArrayLiteralExpression */:
                 return accessKind(parent);
             default:
                 return 0 /* Read */;
         }
         function writeOrReadWrite() {
             // If grandparent is not an ExpressionStatement, this is used as an expression in addition to having a side effect.
-            return parent.parent && skipParenthesesUp(parent.parent).kind === 234 /* ExpressionStatement */ ? 1 /* Write */ : 2 /* ReadWrite */;
+            return parent.parent && walkUpParenthesizedExpressions(parent.parent).kind === 236 /* ExpressionStatement */ ? 1 /* Write */ : 2 /* ReadWrite */;
         }
     }
     function reverseAccessKind(a) {
@@ -18904,37 +19322,37 @@
     }
     ts.isObjectTypeDeclaration = isObjectTypeDeclaration;
     function isTypeNodeKind(kind) {
-        return (kind >= 173 /* FirstTypeNode */ && kind <= 196 /* LastTypeNode */)
-            || kind === 128 /* AnyKeyword */
-            || kind === 152 /* UnknownKeyword */
-            || kind === 144 /* NumberKeyword */
-            || kind === 155 /* BigIntKeyword */
-            || kind === 145 /* ObjectKeyword */
-            || kind === 131 /* BooleanKeyword */
-            || kind === 147 /* StringKeyword */
-            || kind === 148 /* SymbolKeyword */
-            || kind === 113 /* VoidKeyword */
-            || kind === 150 /* UndefinedKeyword */
-            || kind === 141 /* NeverKeyword */
-            || kind === 224 /* ExpressionWithTypeArguments */
-            || kind === 304 /* JSDocAllType */
-            || kind === 305 /* JSDocUnknownType */
-            || kind === 306 /* JSDocNullableType */
-            || kind === 307 /* JSDocNonNullableType */
-            || kind === 308 /* JSDocOptionalType */
-            || kind === 309 /* JSDocFunctionType */
-            || kind === 310 /* JSDocVariadicType */;
+        return (kind >= 175 /* FirstTypeNode */ && kind <= 198 /* LastTypeNode */)
+            || kind === 129 /* AnyKeyword */
+            || kind === 153 /* UnknownKeyword */
+            || kind === 145 /* NumberKeyword */
+            || kind === 156 /* BigIntKeyword */
+            || kind === 146 /* ObjectKeyword */
+            || kind === 132 /* BooleanKeyword */
+            || kind === 148 /* StringKeyword */
+            || kind === 149 /* SymbolKeyword */
+            || kind === 114 /* VoidKeyword */
+            || kind === 151 /* UndefinedKeyword */
+            || kind === 142 /* NeverKeyword */
+            || kind === 226 /* ExpressionWithTypeArguments */
+            || kind === 307 /* JSDocAllType */
+            || kind === 308 /* JSDocUnknownType */
+            || kind === 309 /* JSDocNullableType */
+            || kind === 310 /* JSDocNonNullableType */
+            || kind === 311 /* JSDocOptionalType */
+            || kind === 312 /* JSDocFunctionType */
+            || kind === 313 /* JSDocVariadicType */;
     }
     ts.isTypeNodeKind = isTypeNodeKind;
     function isAccessExpression(node) {
-        return node.kind === 202 /* PropertyAccessExpression */ || node.kind === 203 /* ElementAccessExpression */;
+        return node.kind === 204 /* PropertyAccessExpression */ || node.kind === 205 /* ElementAccessExpression */;
     }
     ts.isAccessExpression = isAccessExpression;
     function getNameOfAccessExpression(node) {
-        if (node.kind === 202 /* PropertyAccessExpression */) {
+        if (node.kind === 204 /* PropertyAccessExpression */) {
             return node.name;
         }
-        ts.Debug.assert(node.kind === 203 /* ElementAccessExpression */);
+        ts.Debug.assert(node.kind === 205 /* ElementAccessExpression */);
         return node.argumentExpression;
     }
     ts.getNameOfAccessExpression = getNameOfAccessExpression;
@@ -18949,7 +19367,7 @@
     }
     ts.isBundleFileTextLike = isBundleFileTextLike;
     function isNamedImportsOrExports(node) {
-        return node.kind === 265 /* NamedImports */ || node.kind === 269 /* NamedExports */;
+        return node.kind === 267 /* NamedImports */ || node.kind === 271 /* NamedExports */;
     }
     ts.isNamedImportsOrExports = isNamedImportsOrExports;
     function getLeftmostAccessExpression(expr) {
@@ -18962,28 +19380,28 @@
     function getLeftmostExpression(node, stopAtCallExpressions) {
         while (true) {
             switch (node.kind) {
-                case 216 /* PostfixUnaryExpression */:
+                case 218 /* PostfixUnaryExpression */:
                     node = node.operand;
                     continue;
-                case 217 /* BinaryExpression */:
+                case 219 /* BinaryExpression */:
                     node = node.left;
                     continue;
-                case 218 /* ConditionalExpression */:
+                case 220 /* ConditionalExpression */:
                     node = node.condition;
                     continue;
-                case 206 /* TaggedTemplateExpression */:
+                case 208 /* TaggedTemplateExpression */:
                     node = node.tag;
                     continue;
-                case 204 /* CallExpression */:
+                case 206 /* CallExpression */:
                     if (stopAtCallExpressions) {
                         return node;
                     }
                 // falls through
-                case 225 /* AsExpression */:
-                case 203 /* ElementAccessExpression */:
-                case 202 /* PropertyAccessExpression */:
-                case 226 /* NonNullExpression */:
-                case 340 /* PartiallyEmittedExpression */:
+                case 227 /* AsExpression */:
+                case 205 /* ElementAccessExpression */:
+                case 204 /* PropertyAccessExpression */:
+                case 228 /* NonNullExpression */:
+                case 345 /* PartiallyEmittedExpression */:
                     node = node.expression;
                     continue;
             }
@@ -19367,13 +19785,11 @@
     }
     ts.getUseDefineForClassFields = getUseDefineForClassFields;
     function compilerOptionsAffectSemanticDiagnostics(newOptions, oldOptions) {
-        return oldOptions !== newOptions &&
-            ts.semanticDiagnosticsOptionDeclarations.some(function (option) { return !isJsonEqual(getCompilerOptionValue(oldOptions, option), getCompilerOptionValue(newOptions, option)); });
+        return optionsHaveChanges(oldOptions, newOptions, ts.semanticDiagnosticsOptionDeclarations);
     }
     ts.compilerOptionsAffectSemanticDiagnostics = compilerOptionsAffectSemanticDiagnostics;
     function compilerOptionsAffectEmit(newOptions, oldOptions) {
-        return oldOptions !== newOptions &&
-            ts.affectsEmitOptionDeclarations.some(function (option) { return !isJsonEqual(getCompilerOptionValue(oldOptions, option), getCompilerOptionValue(newOptions, option)); });
+        return optionsHaveChanges(oldOptions, newOptions, ts.affectsEmitOptionDeclarations);
     }
     ts.compilerOptionsAffectEmit = compilerOptionsAffectEmit;
     function getCompilerOptionValue(options, option) {
@@ -19420,6 +19836,7 @@
         var symlinkedDirectories;
         var symlinkedDirectoriesByRealpath;
         var symlinkedFiles;
+        var hasProcessedResolutions = false;
         return {
             getSymlinkedFiles: function () { return symlinkedFiles; },
             getSymlinkedDirectories: function () { return symlinkedDirectories; },
@@ -19448,30 +19865,31 @@
                     });
                 }
             },
+            setSymlinksFromResolutions: function (files, typeReferenceDirectives) {
+                var _this = this;
+                var _a;
+                ts.Debug.assert(!hasProcessedResolutions);
+                hasProcessedResolutions = true;
+                for (var _i = 0, files_1 = files; _i < files_1.length; _i++) {
+                    var file = files_1[_i];
+                    (_a = file.resolvedModules) === null || _a === void 0 ? void 0 : _a.forEach(function (resolution) { return processResolution(_this, resolution); });
+                }
+                typeReferenceDirectives === null || typeReferenceDirectives === void 0 ? void 0 : typeReferenceDirectives.forEach(function (resolution) { return processResolution(_this, resolution); });
+            },
+            hasProcessedResolutions: function () { return hasProcessedResolutions; },
         };
-    }
-    ts.createSymlinkCache = createSymlinkCache;
-    function discoverProbableSymlinks(files, getCanonicalFileName, cwd) {
-        var cache = createSymlinkCache(cwd, getCanonicalFileName);
-        var symlinks = ts.flatMap(files, function (sf) {
-            var pairs = sf.resolvedModules && ts.arrayFrom(ts.mapDefinedIterator(sf.resolvedModules.values(), function (res) {
-                return (res === null || res === void 0 ? void 0 : res.originalPath) ? [res.resolvedFileName, res.originalPath] : undefined;
-            }));
-            return ts.concatenate(pairs, sf.resolvedTypeReferenceDirectiveNames && ts.arrayFrom(ts.mapDefinedIterator(sf.resolvedTypeReferenceDirectiveNames.values(), function (res) {
-                return (res === null || res === void 0 ? void 0 : res.originalPath) && res.resolvedFileName ? [res.resolvedFileName, res.originalPath] : undefined;
-            })));
-        });
-        for (var _i = 0, symlinks_1 = symlinks; _i < symlinks_1.length; _i++) {
-            var _a = symlinks_1[_i], resolvedPath = _a[0], originalPath = _a[1];
-            cache.setSymlinkedFile(ts.toPath(originalPath, cwd, getCanonicalFileName), resolvedPath);
-            var _b = guessDirectorySymlink(resolvedPath, originalPath, cwd, getCanonicalFileName) || ts.emptyArray, commonResolved = _b[0], commonOriginal = _b[1];
+        function processResolution(cache, resolution) {
+            if (!resolution || !resolution.originalPath || !resolution.resolvedFileName)
+                return;
+            var resolvedFileName = resolution.resolvedFileName, originalPath = resolution.originalPath;
+            cache.setSymlinkedFile(ts.toPath(originalPath, cwd, getCanonicalFileName), resolvedFileName);
+            var _a = guessDirectorySymlink(resolvedFileName, originalPath, cwd, getCanonicalFileName) || ts.emptyArray, commonResolved = _a[0], commonOriginal = _a[1];
             if (commonResolved && commonOriginal) {
                 cache.setSymlinkedDirectory(commonOriginal, { real: commonResolved, realPath: ts.toPath(commonResolved, cwd, getCanonicalFileName) });
             }
         }
-        return cache;
     }
-    ts.discoverProbableSymlinks = discoverProbableSymlinks;
+    ts.createSymlinkCache = createSymlinkCache;
     function guessDirectorySymlink(a, b, cwd, getCanonicalFileName) {
         var aParts = ts.getPathComponents(ts.getNormalizedAbsolutePath(a, cwd));
         var bParts = ts.getPathComponents(ts.getNormalizedAbsolutePath(b, cwd));
@@ -19667,7 +20085,7 @@
     }
     ts.getRegexFromPattern = getRegexFromPattern;
     /** @param path directory of the tsconfig.json */
-    function matchFiles(path, extensions, excludes, includes, useCaseSensitiveFileNames, currentDirectory, depth, getFileSystemEntries, realpath) {
+    function matchFiles(path, extensions, excludes, includes, useCaseSensitiveFileNames, currentDirectory, depth, getFileSystemEntries, realpath, directoryExists) {
         path = ts.normalizePath(path);
         currentDirectory = ts.normalizePath(currentDirectory);
         var patterns = getFileMatcherPatterns(path, excludes, includes, useCaseSensitiveFileNames, currentDirectory);
@@ -19681,7 +20099,9 @@
         var toCanonical = ts.createGetCanonicalFileName(useCaseSensitiveFileNames);
         for (var _i = 0, _a = patterns.basePaths; _i < _a.length; _i++) {
             var basePath = _a[_i];
-            visitDirectory(basePath, ts.combinePaths(currentDirectory, basePath), depth);
+            if (directoryExists(basePath)) {
+                visitDirectory(basePath, ts.combinePaths(currentDirectory, basePath), depth);
+            }
         }
         return ts.flatten(results);
         function visitDirectory(path, absolutePath, depth) {
@@ -19809,14 +20229,14 @@
     ts.supportedTSExtensionsForExtractExtension = [".d.ts" /* Dts */, ".ts" /* Ts */, ".tsx" /* Tsx */];
     ts.supportedJSExtensions = [".js" /* Js */, ".jsx" /* Jsx */];
     ts.supportedJSAndJsonExtensions = [".js" /* Js */, ".jsx" /* Jsx */, ".json" /* Json */];
-    var allSupportedExtensions = __spreadArray(__spreadArray([], ts.supportedTSExtensions), ts.supportedJSExtensions);
-    var allSupportedExtensionsWithJson = __spreadArray(__spreadArray(__spreadArray([], ts.supportedTSExtensions), ts.supportedJSExtensions), [".json" /* Json */]);
+    var allSupportedExtensions = __spreadArray(__spreadArray([], ts.supportedTSExtensions, true), ts.supportedJSExtensions, true);
+    var allSupportedExtensionsWithJson = __spreadArray(__spreadArray(__spreadArray([], ts.supportedTSExtensions, true), ts.supportedJSExtensions, true), [".json" /* Json */], false);
     function getSupportedExtensions(options, extraFileExtensions) {
         var needJsExtensions = options && getAllowJSCompilerOption(options);
         if (!extraFileExtensions || extraFileExtensions.length === 0) {
             return needJsExtensions ? allSupportedExtensions : ts.supportedTSExtensions;
         }
-        var extensions = __spreadArray(__spreadArray([], needJsExtensions ? allSupportedExtensions : ts.supportedTSExtensions), ts.mapDefined(extraFileExtensions, function (x) { return x.scriptKind === 7 /* Deferred */ || needJsExtensions && isJSLike(x.scriptKind) ? x.extension : undefined; }));
+        var extensions = __spreadArray(__spreadArray([], needJsExtensions ? allSupportedExtensions : ts.supportedTSExtensions, true), ts.mapDefined(extraFileExtensions, function (x) { return x.scriptKind === 7 /* Deferred */ || needJsExtensions && isJSLike(x.scriptKind) ? x.extension : undefined; }), true);
         return ts.deduplicate(extensions, ts.equateStringsCaseSensitive, ts.compareStringsCaseSensitive);
     }
     ts.getSupportedExtensions = getSupportedExtensions;
@@ -19830,7 +20250,7 @@
         if (supportedExtensions === ts.supportedTSExtensions) {
             return ts.supportedTSExtensionsWithJson;
         }
-        return __spreadArray(__spreadArray([], supportedExtensions), [".json" /* Json */]);
+        return __spreadArray(__spreadArray([], supportedExtensions, true), [".json" /* Json */], false);
     }
     ts.getSuppoertedExtensionsWithJsonIfResolveJsonModule = getSuppoertedExtensionsWithJsonIfResolveJsonModule;
     function isJSLike(scriptKind) {
@@ -19940,16 +20360,27 @@
         return ts.changeAnyExtension(path, newExtension, extensionsToRemove, /*ignoreCase*/ false);
     }
     ts.changeExtension = changeExtension;
+    /**
+     * Returns the input if there are no stars, a pattern if there is exactly one,
+     * and undefined if there are more.
+     */
     function tryParsePattern(pattern) {
-        // This should be verified outside of here and a proper error thrown.
-        ts.Debug.assert(hasZeroOrOneAsteriskCharacter(pattern));
         var indexOfStar = pattern.indexOf("*");
-        return indexOfStar === -1 ? undefined : {
-            prefix: pattern.substr(0, indexOfStar),
-            suffix: pattern.substr(indexOfStar + 1)
-        };
+        if (indexOfStar === -1) {
+            return pattern;
+        }
+        return pattern.indexOf("*", indexOfStar + 1) !== -1
+            ? undefined
+            : {
+                prefix: pattern.substr(0, indexOfStar),
+                suffix: pattern.substr(indexOfStar + 1)
+            };
     }
     ts.tryParsePattern = tryParsePattern;
+    function tryParsePatterns(paths) {
+        return ts.mapDefined(ts.getOwnKeys(paths), function (path) { return tryParsePattern(path); });
+    }
+    ts.tryParsePatterns = tryParsePatterns;
     function positionIsSynthesized(pos) {
         // This is a fast way of testing the following conditions:
         //  pos === undefined || pos === null || isNaN(pos) || pos < 0;
@@ -19991,23 +20422,19 @@
         directories: ts.emptyArray
     };
     /**
-     * patternStrings contains both pattern strings (containing "*") and regular strings.
+     * patternOrStrings contains both patterns (containing "*") and regular strings.
      * Return an exact match if possible, or a pattern match, or undefined.
      * (These are verified by verifyCompilerOptions to have 0 or 1 "*" characters.)
      */
-    function matchPatternOrExact(patternStrings, candidate) {
+    function matchPatternOrExact(patternOrStrings, candidate) {
         var patterns = [];
-        for (var _i = 0, patternStrings_1 = patternStrings; _i < patternStrings_1.length; _i++) {
-            var patternString = patternStrings_1[_i];
-            if (!hasZeroOrOneAsteriskCharacter(patternString))
-                continue;
-            var pattern = tryParsePattern(patternString);
-            if (pattern) {
-                patterns.push(pattern);
+        for (var _i = 0, patternOrStrings_1 = patternOrStrings; _i < patternOrStrings_1.length; _i++) {
+            var patternOrString = patternOrStrings_1[_i];
+            if (patternOrString === candidate) {
+                return candidate;
             }
-            else if (patternString === candidate) {
-                // pattern was matched as is - no need to search further
-                return patternString;
+            if (!ts.isString(patternOrString)) {
+                patterns.push(patternOrString);
             }
         }
         return ts.findBestPatternMatch(patterns, function (_) { return _; }, candidate);
@@ -20158,42 +20585,45 @@
             || isPartOfTypeQuery(useSite)
             || isIdentifierInNonEmittingHeritageClause(useSite)
             || isPartOfPossiblyValidTypeOrAbstractComputedPropertyName(useSite)
-            || !isExpressionNode(useSite);
+            || !(isExpressionNode(useSite) || isShorthandPropertyNameUseSite(useSite));
     }
     ts.isValidTypeOnlyAliasUseSite = isValidTypeOnlyAliasUseSite;
     function typeOnlyDeclarationIsExport(typeOnlyDeclaration) {
-        return typeOnlyDeclaration.kind === 271 /* ExportSpecifier */;
+        return typeOnlyDeclaration.kind === 273 /* ExportSpecifier */;
     }
     ts.typeOnlyDeclarationIsExport = typeOnlyDeclarationIsExport;
+    function isShorthandPropertyNameUseSite(useSite) {
+        return ts.isIdentifier(useSite) && ts.isShorthandPropertyAssignment(useSite.parent) && useSite.parent.name === useSite;
+    }
     function isPartOfPossiblyValidTypeOrAbstractComputedPropertyName(node) {
-        while (node.kind === 78 /* Identifier */ || node.kind === 202 /* PropertyAccessExpression */) {
+        while (node.kind === 79 /* Identifier */ || node.kind === 204 /* PropertyAccessExpression */) {
             node = node.parent;
         }
-        if (node.kind !== 159 /* ComputedPropertyName */) {
+        if (node.kind !== 160 /* ComputedPropertyName */) {
             return false;
         }
         if (hasSyntacticModifier(node.parent, 128 /* Abstract */)) {
             return true;
         }
         var containerKind = node.parent.parent.kind;
-        return containerKind === 254 /* InterfaceDeclaration */ || containerKind === 178 /* TypeLiteral */;
+        return containerKind === 256 /* InterfaceDeclaration */ || containerKind === 180 /* TypeLiteral */;
     }
     /** Returns true for an identifier in 1) an `implements` clause, and 2) an `extends` clause of an interface. */
     function isIdentifierInNonEmittingHeritageClause(node) {
-        if (node.kind !== 78 /* Identifier */)
+        if (node.kind !== 79 /* Identifier */)
             return false;
         var heritageClause = ts.findAncestor(node.parent, function (parent) {
             switch (parent.kind) {
-                case 287 /* HeritageClause */:
+                case 289 /* HeritageClause */:
                     return true;
-                case 202 /* PropertyAccessExpression */:
-                case 224 /* ExpressionWithTypeArguments */:
+                case 204 /* PropertyAccessExpression */:
+                case 226 /* ExpressionWithTypeArguments */:
                     return false;
                 default:
                     return "quit";
             }
         });
-        return (heritageClause === null || heritageClause === void 0 ? void 0 : heritageClause.token) === 116 /* ImplementsKeyword */ || (heritageClause === null || heritageClause === void 0 ? void 0 : heritageClause.parent.kind) === 254 /* InterfaceDeclaration */;
+        return (heritageClause === null || heritageClause === void 0 ? void 0 : heritageClause.token) === 117 /* ImplementsKeyword */ || (heritageClause === null || heritageClause === void 0 ? void 0 : heritageClause.parent.kind) === 256 /* InterfaceDeclaration */;
     }
     function isIdentifierTypeReference(node) {
         return ts.isTypeReferenceNode(node) && ts.isIdentifier(node.typeName);
@@ -20354,18 +20784,18 @@
         if (!node.parent)
             return undefined;
         switch (node.kind) {
-            case 160 /* TypeParameter */:
+            case 161 /* TypeParameter */:
                 var parent_1 = node.parent;
-                return parent_1.kind === 186 /* InferType */ ? undefined : parent_1.typeParameters;
-            case 161 /* Parameter */:
+                return parent_1.kind === 188 /* InferType */ ? undefined : parent_1.typeParameters;
+            case 162 /* Parameter */:
                 return node.parent.parameters;
-            case 195 /* TemplateLiteralTypeSpan */:
+            case 197 /* TemplateLiteralTypeSpan */:
                 return node.parent.templateSpans;
-            case 229 /* TemplateSpan */:
+            case 231 /* TemplateSpan */:
                 return node.parent.templateSpans;
-            case 162 /* Decorator */:
+            case 163 /* Decorator */:
                 return node.parent.decorators;
-            case 287 /* HeritageClause */:
+            case 289 /* HeritageClause */:
                 return node.parent.heritageClauses;
         }
         var parent = node.parent;
@@ -20373,49 +20803,73 @@
             return ts.isJSDocTypeLiteral(node.parent) ? undefined : node.parent.tags;
         }
         switch (parent.kind) {
-            case 178 /* TypeLiteral */:
-            case 254 /* InterfaceDeclaration */:
+            case 180 /* TypeLiteral */:
+            case 256 /* InterfaceDeclaration */:
                 return ts.isTypeElement(node) ? parent.members : undefined;
-            case 183 /* UnionType */:
-            case 184 /* IntersectionType */:
+            case 185 /* UnionType */:
+            case 186 /* IntersectionType */:
                 return parent.types;
-            case 180 /* TupleType */:
-            case 200 /* ArrayLiteralExpression */:
-            case 341 /* CommaListExpression */:
-            case 265 /* NamedImports */:
-            case 269 /* NamedExports */:
+            case 182 /* TupleType */:
+            case 202 /* ArrayLiteralExpression */:
+            case 346 /* CommaListExpression */:
+            case 267 /* NamedImports */:
+            case 271 /* NamedExports */:
                 return parent.elements;
-            case 201 /* ObjectLiteralExpression */:
-            case 282 /* JsxAttributes */:
+            case 203 /* ObjectLiteralExpression */:
+            case 284 /* JsxAttributes */:
                 return parent.properties;
-            case 204 /* CallExpression */:
-            case 205 /* NewExpression */:
+            case 206 /* CallExpression */:
+            case 207 /* NewExpression */:
                 return ts.isTypeNode(node) ? parent.typeArguments :
                     parent.expression === node ? undefined :
                         parent.arguments;
-            case 274 /* JsxElement */:
-            case 278 /* JsxFragment */:
+            case 276 /* JsxElement */:
+            case 280 /* JsxFragment */:
                 return ts.isJsxChild(node) ? parent.children : undefined;
-            case 276 /* JsxOpeningElement */:
-            case 275 /* JsxSelfClosingElement */:
+            case 278 /* JsxOpeningElement */:
+            case 277 /* JsxSelfClosingElement */:
                 return ts.isTypeNode(node) ? parent.typeArguments : undefined;
-            case 231 /* Block */:
-            case 285 /* CaseClause */:
-            case 286 /* DefaultClause */:
-            case 258 /* ModuleBlock */:
+            case 233 /* Block */:
+            case 287 /* CaseClause */:
+            case 288 /* DefaultClause */:
+            case 260 /* ModuleBlock */:
                 return parent.statements;
-            case 259 /* CaseBlock */:
+            case 261 /* CaseBlock */:
                 return parent.clauses;
-            case 253 /* ClassDeclaration */:
-            case 222 /* ClassExpression */:
+            case 255 /* ClassDeclaration */:
+            case 224 /* ClassExpression */:
                 return ts.isClassElement(node) ? parent.members : undefined;
-            case 256 /* EnumDeclaration */:
+            case 258 /* EnumDeclaration */:
                 return ts.isEnumMember(node) ? parent.members : undefined;
-            case 298 /* SourceFile */:
+            case 300 /* SourceFile */:
                 return parent.statements;
         }
     }
     ts.getContainingNodeArray = getContainingNodeArray;
+    function hasContextSensitiveParameters(node) {
+        // Functions with type parameters are not context sensitive.
+        if (!node.typeParameters) {
+            // Functions with any parameters that lack type annotations are context sensitive.
+            if (ts.some(node.parameters, function (p) { return !getEffectiveTypeAnnotationNode(p); })) {
+                return true;
+            }
+            if (node.kind !== 212 /* ArrowFunction */) {
+                // If the first parameter is not an explicit 'this' parameter, then the function has
+                // an implicit 'this' parameter which is subject to contextual typing.
+                var parameter = ts.firstOrUndefined(node.parameters);
+                if (!(parameter && parameterIsThisKeyword(parameter))) {
+                    return true;
+                }
+            }
+        }
+        return false;
+    }
+    ts.hasContextSensitiveParameters = hasContextSensitiveParameters;
+    /* @internal */
+    function isInfinityOrNaNString(name) {
+        return name === "Infinity" || name === "-Infinity" || name === "NaN";
+    }
+    ts.isInfinityOrNaNString = isInfinityOrNaNString;
 })(ts || (ts = {}));
 /* @internal */
 var ts;
@@ -20529,10 +20983,10 @@
             //
             // If `a ** d` is on the left of operator `**`, we need to parenthesize to preserve
             // the intended order of operations: `(a ** b) ** c`
-            var binaryOperatorPrecedence = ts.getOperatorPrecedence(217 /* BinaryExpression */, binaryOperator);
-            var binaryOperatorAssociativity = ts.getOperatorAssociativity(217 /* BinaryExpression */, binaryOperator);
+            var binaryOperatorPrecedence = ts.getOperatorPrecedence(219 /* BinaryExpression */, binaryOperator);
+            var binaryOperatorAssociativity = ts.getOperatorAssociativity(219 /* BinaryExpression */, binaryOperator);
             var emittedOperand = ts.skipPartiallyEmittedExpressions(operand);
-            if (!isLeftSideOfBinary && operand.kind === 210 /* ArrowFunction */ && binaryOperatorPrecedence > 3 /* Assignment */) {
+            if (!isLeftSideOfBinary && operand.kind === 212 /* ArrowFunction */ && binaryOperatorPrecedence > 3 /* Assignment */) {
                 // We need to parenthesize arrow functions on the right side to avoid it being
                 // parsed as parenthesized expression: `a && (() => {})`
                 return true;
@@ -20544,7 +20998,7 @@
                     // and is a yield expression, then we do not need parentheses.
                     if (!isLeftSideOfBinary
                         && binaryOperatorAssociativity === 1 /* Right */
-                        && operand.kind === 220 /* YieldExpression */) {
+                        && operand.kind === 222 /* YieldExpression */) {
                         return false;
                     }
                     return true;
@@ -20632,7 +21086,7 @@
             if (ts.isLiteralKind(node.kind)) {
                 return node.kind;
             }
-            if (node.kind === 217 /* BinaryExpression */ && node.operatorToken.kind === 39 /* PlusToken */) {
+            if (node.kind === 219 /* BinaryExpression */ && node.operatorToken.kind === 39 /* PlusToken */) {
                 if (node.cachedLiteralKind !== undefined) {
                     return node.cachedLiteralKind;
                 }
@@ -20658,7 +21112,7 @@
         function parenthesizeBinaryOperand(binaryOperator, operand, isLeftSideOfBinary, leftOperand) {
             var skipped = ts.skipPartiallyEmittedExpressions(operand);
             // If the resulting expression is already parenthesized, we do not need to do any further processing.
-            if (skipped.kind === 208 /* ParenthesizedExpression */) {
+            if (skipped.kind === 210 /* ParenthesizedExpression */) {
                 return operand;
             }
             return binaryOperandNeedsParentheses(binaryOperator, operand, isLeftSideOfBinary, leftOperand)
@@ -20675,7 +21129,7 @@
             return ts.isCommaSequence(expression) ? factory.createParenthesizedExpression(expression) : expression;
         }
         function parenthesizeConditionOfConditionalExpression(condition) {
-            var conditionalPrecedence = ts.getOperatorPrecedence(218 /* ConditionalExpression */, 57 /* QuestionToken */);
+            var conditionalPrecedence = ts.getOperatorPrecedence(220 /* ConditionalExpression */, 57 /* QuestionToken */);
             var emittedCondition = ts.skipPartiallyEmittedExpressions(condition);
             var conditionPrecedence = ts.getExpressionPrecedence(emittedCondition);
             if (ts.compareValues(conditionPrecedence, conditionalPrecedence) !== 1 /* GreaterThan */) {
@@ -20708,8 +21162,8 @@
             var needsParens = ts.isCommaSequence(check);
             if (!needsParens) {
                 switch (ts.getLeftmostExpression(check, /*stopAtCallExpression*/ false).kind) {
-                    case 222 /* ClassExpression */:
-                    case 209 /* FunctionExpression */:
+                    case 224 /* ClassExpression */:
+                    case 211 /* FunctionExpression */:
                         needsParens = true;
                 }
             }
@@ -20722,9 +21176,9 @@
         function parenthesizeExpressionOfNew(expression) {
             var leftmostExpr = ts.getLeftmostExpression(expression, /*stopAtCallExpressions*/ true);
             switch (leftmostExpr.kind) {
-                case 204 /* CallExpression */:
+                case 206 /* CallExpression */:
                     return factory.createParenthesizedExpression(expression);
-                case 205 /* NewExpression */:
+                case 207 /* NewExpression */:
                     return !leftmostExpr.arguments
                         ? factory.createParenthesizedExpression(expression)
                         : expression; // TODO(rbuckton): Verify this assertion holds
@@ -20744,7 +21198,7 @@
             //
             var emittedExpression = ts.skipPartiallyEmittedExpressions(expression);
             if (ts.isLeftHandSideExpression(emittedExpression)
-                && (emittedExpression.kind !== 205 /* NewExpression */ || emittedExpression.arguments)) {
+                && (emittedExpression.kind !== 207 /* NewExpression */ || emittedExpression.arguments)) {
                 // TODO(rbuckton): Verify whether this assertion holds.
                 return expression;
             }
@@ -20766,7 +21220,7 @@
         function parenthesizeExpressionForDisallowedComma(expression) {
             var emittedExpression = ts.skipPartiallyEmittedExpressions(expression);
             var expressionPrecedence = ts.getExpressionPrecedence(emittedExpression);
-            var commaPrecedence = ts.getOperatorPrecedence(217 /* BinaryExpression */, 27 /* CommaToken */);
+            var commaPrecedence = ts.getOperatorPrecedence(219 /* BinaryExpression */, 27 /* CommaToken */);
             // TODO(rbuckton): Verifiy whether `setTextRange` is needed.
             return expressionPrecedence > commaPrecedence ? expression : ts.setTextRange(factory.createParenthesizedExpression(expression), expression);
         }
@@ -20775,44 +21229,44 @@
             if (ts.isCallExpression(emittedExpression)) {
                 var callee = emittedExpression.expression;
                 var kind = ts.skipPartiallyEmittedExpressions(callee).kind;
-                if (kind === 209 /* FunctionExpression */ || kind === 210 /* ArrowFunction */) {
+                if (kind === 211 /* FunctionExpression */ || kind === 212 /* ArrowFunction */) {
                     // TODO(rbuckton): Verifiy whether `setTextRange` is needed.
                     var updated = factory.updateCallExpression(emittedExpression, ts.setTextRange(factory.createParenthesizedExpression(callee), callee), emittedExpression.typeArguments, emittedExpression.arguments);
                     return factory.restoreOuterExpressions(expression, updated, 8 /* PartiallyEmittedExpressions */);
                 }
             }
             var leftmostExpressionKind = ts.getLeftmostExpression(emittedExpression, /*stopAtCallExpressions*/ false).kind;
-            if (leftmostExpressionKind === 201 /* ObjectLiteralExpression */ || leftmostExpressionKind === 209 /* FunctionExpression */) {
+            if (leftmostExpressionKind === 203 /* ObjectLiteralExpression */ || leftmostExpressionKind === 211 /* FunctionExpression */) {
                 // TODO(rbuckton): Verifiy whether `setTextRange` is needed.
                 return ts.setTextRange(factory.createParenthesizedExpression(expression), expression);
             }
             return expression;
         }
         function parenthesizeConciseBodyOfArrowFunction(body) {
-            if (!ts.isBlock(body) && (ts.isCommaSequence(body) || ts.getLeftmostExpression(body, /*stopAtCallExpressions*/ false).kind === 201 /* ObjectLiteralExpression */)) {
+            if (!ts.isBlock(body) && (ts.isCommaSequence(body) || ts.getLeftmostExpression(body, /*stopAtCallExpressions*/ false).kind === 203 /* ObjectLiteralExpression */)) {
                 // TODO(rbuckton): Verifiy whether `setTextRange` is needed.
                 return ts.setTextRange(factory.createParenthesizedExpression(body), body);
             }
             return body;
         }
         function parenthesizeMemberOfConditionalType(member) {
-            return member.kind === 185 /* ConditionalType */ ? factory.createParenthesizedType(member) : member;
+            return member.kind === 187 /* ConditionalType */ ? factory.createParenthesizedType(member) : member;
         }
         function parenthesizeMemberOfElementType(member) {
             switch (member.kind) {
-                case 183 /* UnionType */:
-                case 184 /* IntersectionType */:
-                case 175 /* FunctionType */:
-                case 176 /* ConstructorType */:
+                case 185 /* UnionType */:
+                case 186 /* IntersectionType */:
+                case 177 /* FunctionType */:
+                case 178 /* ConstructorType */:
                     return factory.createParenthesizedType(member);
             }
             return parenthesizeMemberOfConditionalType(member);
         }
         function parenthesizeElementTypeOfArrayType(member) {
             switch (member.kind) {
-                case 177 /* TypeQuery */:
-                case 189 /* TypeOperator */:
-                case 186 /* InferType */:
+                case 179 /* TypeQuery */:
+                case 191 /* TypeOperator */:
+                case 188 /* InferType */:
                     return factory.createParenthesizedType(member);
             }
             return parenthesizeMemberOfElementType(member);
@@ -20918,11 +21372,11 @@
         }
         function convertToAssignmentPattern(node) {
             switch (node.kind) {
-                case 198 /* ArrayBindingPattern */:
-                case 200 /* ArrayLiteralExpression */:
+                case 200 /* ArrayBindingPattern */:
+                case 202 /* ArrayLiteralExpression */:
                     return convertToArrayAssignmentPattern(node);
-                case 197 /* ObjectBindingPattern */:
-                case 201 /* ObjectLiteralExpression */:
+                case 199 /* ObjectBindingPattern */:
+                case 203 /* ObjectLiteralExpression */:
                     return convertToObjectAssignmentPattern(node);
             }
         }
@@ -21050,6 +21504,8 @@
             updateConstructSignature: updateConstructSignature,
             createIndexSignature: createIndexSignature,
             updateIndexSignature: updateIndexSignature,
+            createClassStaticBlockDeclaration: createClassStaticBlockDeclaration,
+            updateClassStaticBlockDeclaration: updateClassStaticBlockDeclaration,
             createTemplateLiteralTypeSpan: createTemplateLiteralTypeSpan,
             updateTemplateLiteralTypeSpan: updateTemplateLiteralTypeSpan,
             createKeywordTypeNode: createKeywordTypeNode,
@@ -21263,18 +21719,18 @@
             createExternalModuleReference: createExternalModuleReference,
             updateExternalModuleReference: updateExternalModuleReference,
             // lazily load factory members for JSDoc types with similar structure
-            get createJSDocAllType() { return getJSDocPrimaryTypeCreateFunction(304 /* JSDocAllType */); },
-            get createJSDocUnknownType() { return getJSDocPrimaryTypeCreateFunction(305 /* JSDocUnknownType */); },
-            get createJSDocNonNullableType() { return getJSDocUnaryTypeCreateFunction(307 /* JSDocNonNullableType */); },
-            get updateJSDocNonNullableType() { return getJSDocUnaryTypeUpdateFunction(307 /* JSDocNonNullableType */); },
-            get createJSDocNullableType() { return getJSDocUnaryTypeCreateFunction(306 /* JSDocNullableType */); },
-            get updateJSDocNullableType() { return getJSDocUnaryTypeUpdateFunction(306 /* JSDocNullableType */); },
-            get createJSDocOptionalType() { return getJSDocUnaryTypeCreateFunction(308 /* JSDocOptionalType */); },
-            get updateJSDocOptionalType() { return getJSDocUnaryTypeUpdateFunction(308 /* JSDocOptionalType */); },
-            get createJSDocVariadicType() { return getJSDocUnaryTypeCreateFunction(310 /* JSDocVariadicType */); },
-            get updateJSDocVariadicType() { return getJSDocUnaryTypeUpdateFunction(310 /* JSDocVariadicType */); },
-            get createJSDocNamepathType() { return getJSDocUnaryTypeCreateFunction(311 /* JSDocNamepathType */); },
-            get updateJSDocNamepathType() { return getJSDocUnaryTypeUpdateFunction(311 /* JSDocNamepathType */); },
+            get createJSDocAllType() { return getJSDocPrimaryTypeCreateFunction(307 /* JSDocAllType */); },
+            get createJSDocUnknownType() { return getJSDocPrimaryTypeCreateFunction(308 /* JSDocUnknownType */); },
+            get createJSDocNonNullableType() { return getJSDocUnaryTypeCreateFunction(310 /* JSDocNonNullableType */); },
+            get updateJSDocNonNullableType() { return getJSDocUnaryTypeUpdateFunction(310 /* JSDocNonNullableType */); },
+            get createJSDocNullableType() { return getJSDocUnaryTypeCreateFunction(309 /* JSDocNullableType */); },
+            get updateJSDocNullableType() { return getJSDocUnaryTypeUpdateFunction(309 /* JSDocNullableType */); },
+            get createJSDocOptionalType() { return getJSDocUnaryTypeCreateFunction(311 /* JSDocOptionalType */); },
+            get updateJSDocOptionalType() { return getJSDocUnaryTypeUpdateFunction(311 /* JSDocOptionalType */); },
+            get createJSDocVariadicType() { return getJSDocUnaryTypeCreateFunction(313 /* JSDocVariadicType */); },
+            get updateJSDocVariadicType() { return getJSDocUnaryTypeUpdateFunction(313 /* JSDocVariadicType */); },
+            get createJSDocNamepathType() { return getJSDocUnaryTypeCreateFunction(314 /* JSDocNamepathType */); },
+            get updateJSDocNamepathType() { return getJSDocUnaryTypeUpdateFunction(314 /* JSDocNamepathType */); },
             createJSDocFunctionType: createJSDocFunctionType,
             updateJSDocFunctionType: updateJSDocFunctionType,
             createJSDocTypeLiteral: createJSDocTypeLiteral,
@@ -21301,33 +21757,39 @@
             updateJSDocSeeTag: updateJSDocSeeTag,
             createJSDocNameReference: createJSDocNameReference,
             updateJSDocNameReference: updateJSDocNameReference,
+            createJSDocMemberName: createJSDocMemberName,
+            updateJSDocMemberName: updateJSDocMemberName,
             createJSDocLink: createJSDocLink,
             updateJSDocLink: updateJSDocLink,
+            createJSDocLinkCode: createJSDocLinkCode,
+            updateJSDocLinkCode: updateJSDocLinkCode,
+            createJSDocLinkPlain: createJSDocLinkPlain,
+            updateJSDocLinkPlain: updateJSDocLinkPlain,
             // lazily load factory members for JSDoc tags with similar structure
-            get createJSDocTypeTag() { return getJSDocTypeLikeTagCreateFunction(333 /* JSDocTypeTag */); },
-            get updateJSDocTypeTag() { return getJSDocTypeLikeTagUpdateFunction(333 /* JSDocTypeTag */); },
-            get createJSDocReturnTag() { return getJSDocTypeLikeTagCreateFunction(331 /* JSDocReturnTag */); },
-            get updateJSDocReturnTag() { return getJSDocTypeLikeTagUpdateFunction(331 /* JSDocReturnTag */); },
-            get createJSDocThisTag() { return getJSDocTypeLikeTagCreateFunction(332 /* JSDocThisTag */); },
-            get updateJSDocThisTag() { return getJSDocTypeLikeTagUpdateFunction(332 /* JSDocThisTag */); },
-            get createJSDocEnumTag() { return getJSDocTypeLikeTagCreateFunction(329 /* JSDocEnumTag */); },
-            get updateJSDocEnumTag() { return getJSDocTypeLikeTagUpdateFunction(329 /* JSDocEnumTag */); },
-            get createJSDocAuthorTag() { return getJSDocSimpleTagCreateFunction(320 /* JSDocAuthorTag */); },
-            get updateJSDocAuthorTag() { return getJSDocSimpleTagUpdateFunction(320 /* JSDocAuthorTag */); },
-            get createJSDocClassTag() { return getJSDocSimpleTagCreateFunction(322 /* JSDocClassTag */); },
-            get updateJSDocClassTag() { return getJSDocSimpleTagUpdateFunction(322 /* JSDocClassTag */); },
-            get createJSDocPublicTag() { return getJSDocSimpleTagCreateFunction(323 /* JSDocPublicTag */); },
-            get updateJSDocPublicTag() { return getJSDocSimpleTagUpdateFunction(323 /* JSDocPublicTag */); },
-            get createJSDocPrivateTag() { return getJSDocSimpleTagCreateFunction(324 /* JSDocPrivateTag */); },
-            get updateJSDocPrivateTag() { return getJSDocSimpleTagUpdateFunction(324 /* JSDocPrivateTag */); },
-            get createJSDocProtectedTag() { return getJSDocSimpleTagCreateFunction(325 /* JSDocProtectedTag */); },
-            get updateJSDocProtectedTag() { return getJSDocSimpleTagUpdateFunction(325 /* JSDocProtectedTag */); },
-            get createJSDocReadonlyTag() { return getJSDocSimpleTagCreateFunction(326 /* JSDocReadonlyTag */); },
-            get updateJSDocReadonlyTag() { return getJSDocSimpleTagUpdateFunction(326 /* JSDocReadonlyTag */); },
-            get createJSDocOverrideTag() { return getJSDocSimpleTagCreateFunction(327 /* JSDocOverrideTag */); },
-            get updateJSDocOverrideTag() { return getJSDocSimpleTagUpdateFunction(327 /* JSDocOverrideTag */); },
-            get createJSDocDeprecatedTag() { return getJSDocSimpleTagCreateFunction(321 /* JSDocDeprecatedTag */); },
-            get updateJSDocDeprecatedTag() { return getJSDocSimpleTagUpdateFunction(321 /* JSDocDeprecatedTag */); },
+            get createJSDocTypeTag() { return getJSDocTypeLikeTagCreateFunction(338 /* JSDocTypeTag */); },
+            get updateJSDocTypeTag() { return getJSDocTypeLikeTagUpdateFunction(338 /* JSDocTypeTag */); },
+            get createJSDocReturnTag() { return getJSDocTypeLikeTagCreateFunction(336 /* JSDocReturnTag */); },
+            get updateJSDocReturnTag() { return getJSDocTypeLikeTagUpdateFunction(336 /* JSDocReturnTag */); },
+            get createJSDocThisTag() { return getJSDocTypeLikeTagCreateFunction(337 /* JSDocThisTag */); },
+            get updateJSDocThisTag() { return getJSDocTypeLikeTagUpdateFunction(337 /* JSDocThisTag */); },
+            get createJSDocEnumTag() { return getJSDocTypeLikeTagCreateFunction(334 /* JSDocEnumTag */); },
+            get updateJSDocEnumTag() { return getJSDocTypeLikeTagUpdateFunction(334 /* JSDocEnumTag */); },
+            get createJSDocAuthorTag() { return getJSDocSimpleTagCreateFunction(325 /* JSDocAuthorTag */); },
+            get updateJSDocAuthorTag() { return getJSDocSimpleTagUpdateFunction(325 /* JSDocAuthorTag */); },
+            get createJSDocClassTag() { return getJSDocSimpleTagCreateFunction(327 /* JSDocClassTag */); },
+            get updateJSDocClassTag() { return getJSDocSimpleTagUpdateFunction(327 /* JSDocClassTag */); },
+            get createJSDocPublicTag() { return getJSDocSimpleTagCreateFunction(328 /* JSDocPublicTag */); },
+            get updateJSDocPublicTag() { return getJSDocSimpleTagUpdateFunction(328 /* JSDocPublicTag */); },
+            get createJSDocPrivateTag() { return getJSDocSimpleTagCreateFunction(329 /* JSDocPrivateTag */); },
+            get updateJSDocPrivateTag() { return getJSDocSimpleTagUpdateFunction(329 /* JSDocPrivateTag */); },
+            get createJSDocProtectedTag() { return getJSDocSimpleTagCreateFunction(330 /* JSDocProtectedTag */); },
+            get updateJSDocProtectedTag() { return getJSDocSimpleTagUpdateFunction(330 /* JSDocProtectedTag */); },
+            get createJSDocReadonlyTag() { return getJSDocSimpleTagCreateFunction(331 /* JSDocReadonlyTag */); },
+            get updateJSDocReadonlyTag() { return getJSDocSimpleTagUpdateFunction(331 /* JSDocReadonlyTag */); },
+            get createJSDocOverrideTag() { return getJSDocSimpleTagCreateFunction(332 /* JSDocOverrideTag */); },
+            get updateJSDocOverrideTag() { return getJSDocSimpleTagUpdateFunction(332 /* JSDocOverrideTag */); },
+            get createJSDocDeprecatedTag() { return getJSDocSimpleTagCreateFunction(326 /* JSDocDeprecatedTag */); },
+            get updateJSDocDeprecatedTag() { return getJSDocSimpleTagUpdateFunction(326 /* JSDocDeprecatedTag */); },
             createJSDocUnknownTag: createJSDocUnknownTag,
             updateJSDocUnknownTag: updateJSDocUnknownTag,
             createJSDocText: createJSDocText,
@@ -21396,7 +21858,7 @@
             cloneNode: cloneNode,
             // Lazily load factory methods for common operator factories and utilities
             get createComma() { return getBinaryCreateFunction(27 /* CommaToken */); },
-            get createAssignment() { return getBinaryCreateFunction(62 /* EqualsToken */); },
+            get createAssignment() { return getBinaryCreateFunction(63 /* EqualsToken */); },
             get createLogicalOr() { return getBinaryCreateFunction(56 /* BarBarToken */); },
             get createLogicalAnd() { return getBinaryCreateFunction(55 /* AmpersandAmpersandToken */); },
             get createBitwiseOr() { return getBinaryCreateFunction(51 /* BarToken */); },
@@ -21442,8 +21904,11 @@
             createArraySliceCall: createArraySliceCall,
             createArrayConcatCall: createArrayConcatCall,
             createObjectDefinePropertyCall: createObjectDefinePropertyCall,
+            createReflectGetCall: createReflectGetCall,
+            createReflectSetCall: createReflectSetCall,
             createPropertyDescriptor: createPropertyDescriptor,
             createCallBinding: createCallBinding,
+            createAssignmentTargetWrapper: createAssignmentTargetWrapper,
             // Utilities
             inlineExpressions: inlineExpressions,
             getInternalName: getInternalName,
@@ -21470,12 +21935,24 @@
                 elements = [];
             }
             else if (ts.isNodeArray(elements)) {
-                // Ensure the transform flags have been aggregated for this NodeArray
-                if (elements.transformFlags === undefined) {
-                    aggregateChildrenFlags(elements);
+                if (hasTrailingComma === undefined || elements.hasTrailingComma === hasTrailingComma) {
+                    // Ensure the transform flags have been aggregated for this NodeArray
+                    if (elements.transformFlags === undefined) {
+                        aggregateChildrenFlags(elements);
+                    }
+                    ts.Debug.attachNodeArrayDebugInfo(elements);
+                    return elements;
                 }
-                ts.Debug.attachNodeArrayDebugInfo(elements);
-                return elements;
+                // This *was* a `NodeArray`, but the `hasTrailingComma` option differs. Recreate the
+                // array with the same elements, text range, and transform flags but with the updated
+                // value for `hasTrailingComma`
+                var array_8 = elements.slice();
+                array_8.pos = elements.pos;
+                array_8.end = elements.end;
+                array_8.hasTrailingComma = hasTrailingComma;
+                array_8.transformFlags = elements.transformFlags;
+                ts.Debug.attachNodeArrayDebugInfo(array_8);
+                return array_8;
             }
             // Since the element list of a node array is typically created by starting with an empty array and
             // repeatedly calling push(), the list may not have the optimal memory layout. We invoke slice() for
@@ -21515,11 +21992,11 @@
             // don't propagate child flags.
             if (name) {
                 switch (node.kind) {
-                    case 166 /* MethodDeclaration */:
-                    case 168 /* GetAccessor */:
-                    case 169 /* SetAccessor */:
-                    case 164 /* PropertyDeclaration */:
-                    case 289 /* PropertyAssignment */:
+                    case 167 /* MethodDeclaration */:
+                    case 170 /* GetAccessor */:
+                    case 171 /* SetAccessor */:
+                    case 165 /* PropertyDeclaration */:
+                    case 291 /* PropertyAssignment */:
                         if (ts.isIdentifier(name)) {
                             node.transformFlags |= propagateIdentifierNameFlags(name);
                             break;
@@ -21665,10 +22142,10 @@
             if (originalKeywordKind === undefined && text) {
                 originalKeywordKind = ts.stringToToken(text);
             }
-            if (originalKeywordKind === 78 /* Identifier */) {
+            if (originalKeywordKind === 79 /* Identifier */) {
                 originalKeywordKind = undefined;
             }
-            var node = baseFactory.createBaseIdentifierNode(78 /* Identifier */);
+            var node = baseFactory.createBaseIdentifierNode(79 /* Identifier */);
             node.originalKeywordKind = originalKeywordKind;
             node.escapedText = ts.escapeLeadingUnderscores(text);
             return node;
@@ -21687,7 +22164,7 @@
                 // NOTE: we do not use `setChildren` here because typeArguments in an identifier do not contribute to transformations
                 node.typeArguments = createNodeArray(typeArguments);
             }
-            if (node.originalKeywordKind === 130 /* AwaitKeyword */) {
+            if (node.originalKeywordKind === 131 /* AwaitKeyword */) {
                 node.transformFlags |= 16777216 /* ContainsPossibleTopLevelAwait */;
             }
             return node;
@@ -21738,7 +22215,7 @@
         function createPrivateIdentifier(text) {
             if (!ts.startsWith(text, "#"))
                 ts.Debug.fail("First character of private identifier must be #: " + text);
-            var node = baseFactory.createBasePrivateIdentifierNode(79 /* PrivateIdentifier */);
+            var node = baseFactory.createBasePrivateIdentifierNode(80 /* PrivateIdentifier */);
             node.escapedText = ts.escapeLeadingUnderscores(text);
             node.transformFlags |= 8388608 /* ContainsClassFields */;
             return node;
@@ -21750,45 +22227,47 @@
             return baseFactory.createBaseTokenNode(kind);
         }
         function createToken(token) {
-            ts.Debug.assert(token >= 0 /* FirstToken */ && token <= 157 /* LastToken */, "Invalid token");
+            ts.Debug.assert(token >= 0 /* FirstToken */ && token <= 158 /* LastToken */, "Invalid token");
             ts.Debug.assert(token <= 14 /* FirstTemplateToken */ || token >= 17 /* LastTemplateToken */, "Invalid token. Use 'createTemplateLiteralLikeNode' to create template literals.");
             ts.Debug.assert(token <= 8 /* FirstLiteralToken */ || token >= 14 /* LastLiteralToken */, "Invalid token. Use 'createLiteralLikeNode' to create literals.");
-            ts.Debug.assert(token !== 78 /* Identifier */, "Invalid token. Use 'createIdentifier' to create identifiers");
+            ts.Debug.assert(token !== 79 /* Identifier */, "Invalid token. Use 'createIdentifier' to create identifiers");
             var node = createBaseToken(token);
             var transformFlags = 0 /* None */;
             switch (token) {
-                case 129 /* AsyncKeyword */:
+                case 130 /* AsyncKeyword */:
                     // 'async' modifier is ES2017 (async functions) or ES2018 (async generators)
                     transformFlags =
                         128 /* ContainsES2017 */ |
                             64 /* ContainsES2018 */;
                     break;
-                case 122 /* PublicKeyword */:
-                case 120 /* PrivateKeyword */:
-                case 121 /* ProtectedKeyword */:
-                case 142 /* ReadonlyKeyword */:
-                case 125 /* AbstractKeyword */:
-                case 133 /* DeclareKeyword */:
-                case 84 /* ConstKeyword */:
-                case 128 /* AnyKeyword */:
-                case 144 /* NumberKeyword */:
-                case 155 /* BigIntKeyword */:
-                case 141 /* NeverKeyword */:
-                case 145 /* ObjectKeyword */:
-                case 156 /* OverrideKeyword */:
-                case 147 /* StringKeyword */:
-                case 131 /* BooleanKeyword */:
-                case 148 /* SymbolKeyword */:
-                case 113 /* VoidKeyword */:
-                case 152 /* UnknownKeyword */:
-                case 150 /* UndefinedKeyword */: // `undefined` is an Identifier in the expression case.
+                case 123 /* PublicKeyword */:
+                case 121 /* PrivateKeyword */:
+                case 122 /* ProtectedKeyword */:
+                case 143 /* ReadonlyKeyword */:
+                case 126 /* AbstractKeyword */:
+                case 134 /* DeclareKeyword */:
+                case 85 /* ConstKeyword */:
+                case 129 /* AnyKeyword */:
+                case 145 /* NumberKeyword */:
+                case 156 /* BigIntKeyword */:
+                case 142 /* NeverKeyword */:
+                case 146 /* ObjectKeyword */:
+                case 157 /* OverrideKeyword */:
+                case 148 /* StringKeyword */:
+                case 132 /* BooleanKeyword */:
+                case 149 /* SymbolKeyword */:
+                case 114 /* VoidKeyword */:
+                case 153 /* UnknownKeyword */:
+                case 151 /* UndefinedKeyword */: // `undefined` is an Identifier in the expression case.
                     transformFlags = 1 /* ContainsTypeScript */;
                     break;
-                case 123 /* StaticKeyword */:
-                case 105 /* SuperKeyword */:
+                case 106 /* SuperKeyword */:
+                    transformFlags = 512 /* ContainsES2015 */ | 33554432 /* ContainsLexicalSuper */;
+                    break;
+                case 124 /* StaticKeyword */:
                     transformFlags = 512 /* ContainsES2015 */;
                     break;
-                case 107 /* ThisKeyword */:
+                case 108 /* ThisKeyword */:
                     // 'this' indicates a lexical 'this'
                     transformFlags = 8192 /* ContainsLexicalThis */;
                     break;
@@ -21803,23 +22282,23 @@
         //
         // @api
         function createSuper() {
-            return createToken(105 /* SuperKeyword */);
+            return createToken(106 /* SuperKeyword */);
         }
         // @api
         function createThis() {
-            return createToken(107 /* ThisKeyword */);
+            return createToken(108 /* ThisKeyword */);
         }
         // @api
         function createNull() {
-            return createToken(103 /* NullKeyword */);
+            return createToken(104 /* NullKeyword */);
         }
         // @api
         function createTrue() {
-            return createToken(109 /* TrueKeyword */);
+            return createToken(110 /* TrueKeyword */);
         }
         // @api
         function createFalse() {
-            return createToken(94 /* FalseKeyword */);
+            return createToken(95 /* FalseKeyword */);
         }
         //
         // Modifiers
@@ -21832,40 +22311,40 @@
         function createModifiersFromModifierFlags(flags) {
             var result = [];
             if (flags & 1 /* Export */) {
-                result.push(createModifier(92 /* ExportKeyword */));
+                result.push(createModifier(93 /* ExportKeyword */));
             }
             if (flags & 2 /* Ambient */) {
-                result.push(createModifier(133 /* DeclareKeyword */));
+                result.push(createModifier(134 /* DeclareKeyword */));
             }
             if (flags & 512 /* Default */) {
-                result.push(createModifier(87 /* DefaultKeyword */));
+                result.push(createModifier(88 /* DefaultKeyword */));
             }
             if (flags & 2048 /* Const */) {
-                result.push(createModifier(84 /* ConstKeyword */));
+                result.push(createModifier(85 /* ConstKeyword */));
             }
             if (flags & 4 /* Public */) {
-                result.push(createModifier(122 /* PublicKeyword */));
+                result.push(createModifier(123 /* PublicKeyword */));
             }
             if (flags & 8 /* Private */) {
-                result.push(createModifier(120 /* PrivateKeyword */));
+                result.push(createModifier(121 /* PrivateKeyword */));
             }
             if (flags & 16 /* Protected */) {
-                result.push(createModifier(121 /* ProtectedKeyword */));
+                result.push(createModifier(122 /* ProtectedKeyword */));
             }
             if (flags & 128 /* Abstract */) {
-                result.push(createModifier(125 /* AbstractKeyword */));
+                result.push(createModifier(126 /* AbstractKeyword */));
             }
             if (flags & 32 /* Static */) {
-                result.push(createModifier(123 /* StaticKeyword */));
+                result.push(createModifier(124 /* StaticKeyword */));
             }
             if (flags & 16384 /* Override */) {
-                result.push(createModifier(156 /* OverrideKeyword */));
+                result.push(createModifier(157 /* OverrideKeyword */));
             }
             if (flags & 64 /* Readonly */) {
-                result.push(createModifier(142 /* ReadonlyKeyword */));
+                result.push(createModifier(143 /* ReadonlyKeyword */));
             }
             if (flags & 256 /* Async */) {
-                result.push(createModifier(129 /* AsyncKeyword */));
+                result.push(createModifier(130 /* AsyncKeyword */));
             }
             return result;
         }
@@ -21874,7 +22353,7 @@
         //
         // @api
         function createQualifiedName(left, right) {
-            var node = createBaseNode(158 /* QualifiedName */);
+            var node = createBaseNode(159 /* QualifiedName */);
             node.left = left;
             node.right = asName(right);
             node.transformFlags |=
@@ -21891,7 +22370,7 @@
         }
         // @api
         function createComputedPropertyName(expression) {
-            var node = createBaseNode(159 /* ComputedPropertyName */);
+            var node = createBaseNode(160 /* ComputedPropertyName */);
             node.expression = parenthesizerRules().parenthesizeExpressionOfComputedPropertyName(expression);
             node.transformFlags |=
                 propagateChildFlags(node.expression) |
@@ -21910,7 +22389,7 @@
         //
         // @api
         function createTypeParameterDeclaration(name, constraint, defaultType) {
-            var node = createBaseNamedDeclaration(160 /* TypeParameter */, 
+            var node = createBaseNamedDeclaration(161 /* TypeParameter */, 
             /*decorators*/ undefined, 
             /*modifiers*/ undefined, name);
             node.constraint = constraint;
@@ -21928,7 +22407,7 @@
         }
         // @api
         function createParameterDeclaration(decorators, modifiers, dotDotDotToken, name, questionToken, type, initializer) {
-            var node = createBaseVariableLikeDeclaration(161 /* Parameter */, decorators, modifiers, name, type, initializer && parenthesizerRules().parenthesizeExpressionForDisallowedComma(initializer));
+            var node = createBaseVariableLikeDeclaration(162 /* Parameter */, decorators, modifiers, name, type, initializer && parenthesizerRules().parenthesizeExpressionForDisallowedComma(initializer));
             node.dotDotDotToken = dotDotDotToken;
             node.questionToken = questionToken;
             if (ts.isThisIdentifier(node.name)) {
@@ -21961,7 +22440,7 @@
         }
         // @api
         function createDecorator(expression) {
-            var node = createBaseNode(162 /* Decorator */);
+            var node = createBaseNode(163 /* Decorator */);
             node.expression = parenthesizerRules().parenthesizeLeftSideOfAccess(expression);
             node.transformFlags |=
                 propagateChildFlags(node.expression) |
@@ -21980,7 +22459,7 @@
         //
         // @api
         function createPropertySignature(modifiers, name, questionToken, type) {
-            var node = createBaseNamedDeclaration(163 /* PropertySignature */, 
+            var node = createBaseNamedDeclaration(164 /* PropertySignature */, 
             /*decorators*/ undefined, modifiers, name);
             node.type = type;
             node.questionToken = questionToken;
@@ -21998,7 +22477,7 @@
         }
         // @api
         function createPropertyDeclaration(decorators, modifiers, name, questionOrExclamationToken, type, initializer) {
-            var node = createBaseVariableLikeDeclaration(164 /* PropertyDeclaration */, decorators, modifiers, name, type, initializer);
+            var node = createBaseVariableLikeDeclaration(165 /* PropertyDeclaration */, decorators, modifiers, name, type, initializer);
             node.questionToken = questionOrExclamationToken && ts.isQuestionToken(questionOrExclamationToken) ? questionOrExclamationToken : undefined;
             node.exclamationToken = questionOrExclamationToken && ts.isExclamationToken(questionOrExclamationToken) ? questionOrExclamationToken : undefined;
             node.transformFlags |=
@@ -22027,7 +22506,7 @@
         }
         // @api
         function createMethodSignature(modifiers, name, questionToken, typeParameters, parameters, type) {
-            var node = createBaseSignatureDeclaration(165 /* MethodSignature */, 
+            var node = createBaseSignatureDeclaration(166 /* MethodSignature */, 
             /*decorators*/ undefined, modifiers, name, typeParameters, parameters, type);
             node.questionToken = questionToken;
             node.transformFlags = 1 /* ContainsTypeScript */;
@@ -22046,7 +22525,7 @@
         }
         // @api
         function createMethodDeclaration(decorators, modifiers, asteriskToken, name, questionToken, typeParameters, parameters, type, body) {
-            var node = createBaseFunctionLikeDeclaration(166 /* MethodDeclaration */, decorators, modifiers, name, typeParameters, parameters, type, body);
+            var node = createBaseFunctionLikeDeclaration(167 /* MethodDeclaration */, decorators, modifiers, name, typeParameters, parameters, type, body);
             node.asteriskToken = asteriskToken;
             node.questionToken = questionToken;
             node.transformFlags |=
@@ -22084,8 +22563,25 @@
                 : node;
         }
         // @api
+        function createClassStaticBlockDeclaration(decorators, modifiers, body) {
+            var node = createBaseGenericNamedDeclaration(168 /* ClassStaticBlockDeclaration */, decorators, modifiers, 
+            /*name*/ undefined, 
+            /*typeParameters*/ undefined);
+            node.body = body;
+            node.transformFlags = propagateChildFlags(body) | 8388608 /* ContainsClassFields */;
+            return node;
+        }
+        // @api
+        function updateClassStaticBlockDeclaration(node, decorators, modifiers, body) {
+            return node.decorators !== decorators
+                || node.modifier !== modifiers
+                || node.body !== body
+                ? update(createClassStaticBlockDeclaration(decorators, modifiers, body), node)
+                : node;
+        }
+        // @api
         function createConstructorDeclaration(decorators, modifiers, parameters, body) {
-            var node = createBaseFunctionLikeDeclaration(167 /* Constructor */, decorators, modifiers, 
+            var node = createBaseFunctionLikeDeclaration(169 /* Constructor */, decorators, modifiers, 
             /*name*/ undefined, 
             /*typeParameters*/ undefined, parameters, 
             /*type*/ undefined, body);
@@ -22103,7 +22599,7 @@
         }
         // @api
         function createGetAccessorDeclaration(decorators, modifiers, name, parameters, type, body) {
-            return createBaseFunctionLikeDeclaration(168 /* GetAccessor */, decorators, modifiers, name, 
+            return createBaseFunctionLikeDeclaration(170 /* GetAccessor */, decorators, modifiers, name, 
             /*typeParameters*/ undefined, parameters, type, body);
         }
         // @api
@@ -22119,7 +22615,7 @@
         }
         // @api
         function createSetAccessorDeclaration(decorators, modifiers, name, parameters, body) {
-            return createBaseFunctionLikeDeclaration(169 /* SetAccessor */, decorators, modifiers, name, 
+            return createBaseFunctionLikeDeclaration(171 /* SetAccessor */, decorators, modifiers, name, 
             /*typeParameters*/ undefined, parameters, 
             /*type*/ undefined, body);
         }
@@ -22135,7 +22631,7 @@
         }
         // @api
         function createCallSignature(typeParameters, parameters, type) {
-            var node = createBaseSignatureDeclaration(170 /* CallSignature */, 
+            var node = createBaseSignatureDeclaration(172 /* CallSignature */, 
             /*decorators*/ undefined, 
             /*modifiers*/ undefined, 
             /*name*/ undefined, typeParameters, parameters, type);
@@ -22152,7 +22648,7 @@
         }
         // @api
         function createConstructSignature(typeParameters, parameters, type) {
-            var node = createBaseSignatureDeclaration(171 /* ConstructSignature */, 
+            var node = createBaseSignatureDeclaration(173 /* ConstructSignature */, 
             /*decorators*/ undefined, 
             /*modifiers*/ undefined, 
             /*name*/ undefined, typeParameters, parameters, type);
@@ -22169,7 +22665,7 @@
         }
         // @api
         function createIndexSignature(decorators, modifiers, parameters, type) {
-            var node = createBaseSignatureDeclaration(172 /* IndexSignature */, decorators, modifiers, 
+            var node = createBaseSignatureDeclaration(174 /* IndexSignature */, decorators, modifiers, 
             /*name*/ undefined, 
             /*typeParameters*/ undefined, parameters, type);
             node.transformFlags = 1 /* ContainsTypeScript */;
@@ -22186,7 +22682,7 @@
         }
         // @api
         function createTemplateLiteralTypeSpan(type, literal) {
-            var node = createBaseNode(195 /* TemplateLiteralTypeSpan */);
+            var node = createBaseNode(197 /* TemplateLiteralTypeSpan */);
             node.type = type;
             node.literal = literal;
             node.transformFlags = 1 /* ContainsTypeScript */;
@@ -22208,7 +22704,7 @@
         }
         // @api
         function createTypePredicateNode(assertsModifier, parameterName, type) {
-            var node = createBaseNode(173 /* TypePredicate */);
+            var node = createBaseNode(175 /* TypePredicate */);
             node.assertsModifier = assertsModifier;
             node.parameterName = asName(parameterName);
             node.type = type;
@@ -22225,7 +22721,7 @@
         }
         // @api
         function createTypeReferenceNode(typeName, typeArguments) {
-            var node = createBaseNode(174 /* TypeReference */);
+            var node = createBaseNode(176 /* TypeReference */);
             node.typeName = asName(typeName);
             node.typeArguments = typeArguments && parenthesizerRules().parenthesizeTypeArguments(createNodeArray(typeArguments));
             node.transformFlags = 1 /* ContainsTypeScript */;
@@ -22240,7 +22736,7 @@
         }
         // @api
         function createFunctionTypeNode(typeParameters, parameters, type) {
-            var node = createBaseSignatureDeclaration(175 /* FunctionType */, 
+            var node = createBaseSignatureDeclaration(177 /* FunctionType */, 
             /*decorators*/ undefined, 
             /*modifiers*/ undefined, 
             /*name*/ undefined, typeParameters, parameters, type);
@@ -22266,7 +22762,7 @@
                     ts.Debug.fail("Incorrect number of arguments specified.");
         }
         function createConstructorTypeNode1(modifiers, typeParameters, parameters, type) {
-            var node = createBaseSignatureDeclaration(176 /* ConstructorType */, 
+            var node = createBaseSignatureDeclaration(178 /* ConstructorType */, 
             /*decorators*/ undefined, modifiers, 
             /*name*/ undefined, typeParameters, parameters, type);
             node.transformFlags = 1 /* ContainsTypeScript */;
@@ -22300,7 +22796,7 @@
         }
         // @api
         function createTypeQueryNode(exprName) {
-            var node = createBaseNode(177 /* TypeQuery */);
+            var node = createBaseNode(179 /* TypeQuery */);
             node.exprName = exprName;
             node.transformFlags = 1 /* ContainsTypeScript */;
             return node;
@@ -22313,7 +22809,7 @@
         }
         // @api
         function createTypeLiteralNode(members) {
-            var node = createBaseNode(178 /* TypeLiteral */);
+            var node = createBaseNode(180 /* TypeLiteral */);
             node.members = createNodeArray(members);
             node.transformFlags = 1 /* ContainsTypeScript */;
             return node;
@@ -22326,7 +22822,7 @@
         }
         // @api
         function createArrayTypeNode(elementType) {
-            var node = createBaseNode(179 /* ArrayType */);
+            var node = createBaseNode(181 /* ArrayType */);
             node.elementType = parenthesizerRules().parenthesizeElementTypeOfArrayType(elementType);
             node.transformFlags = 1 /* ContainsTypeScript */;
             return node;
@@ -22339,7 +22835,7 @@
         }
         // @api
         function createTupleTypeNode(elements) {
-            var node = createBaseNode(180 /* TupleType */);
+            var node = createBaseNode(182 /* TupleType */);
             node.elements = createNodeArray(elements);
             node.transformFlags = 1 /* ContainsTypeScript */;
             return node;
@@ -22352,7 +22848,7 @@
         }
         // @api
         function createNamedTupleMember(dotDotDotToken, name, questionToken, type) {
-            var node = createBaseNode(193 /* NamedTupleMember */);
+            var node = createBaseNode(195 /* NamedTupleMember */);
             node.dotDotDotToken = dotDotDotToken;
             node.name = name;
             node.questionToken = questionToken;
@@ -22371,7 +22867,7 @@
         }
         // @api
         function createOptionalTypeNode(type) {
-            var node = createBaseNode(181 /* OptionalType */);
+            var node = createBaseNode(183 /* OptionalType */);
             node.type = parenthesizerRules().parenthesizeElementTypeOfArrayType(type);
             node.transformFlags = 1 /* ContainsTypeScript */;
             return node;
@@ -22384,7 +22880,7 @@
         }
         // @api
         function createRestTypeNode(type) {
-            var node = createBaseNode(182 /* RestType */);
+            var node = createBaseNode(184 /* RestType */);
             node.type = type;
             node.transformFlags = 1 /* ContainsTypeScript */;
             return node;
@@ -22408,7 +22904,7 @@
         }
         // @api
         function createUnionTypeNode(types) {
-            return createUnionOrIntersectionTypeNode(183 /* UnionType */, types);
+            return createUnionOrIntersectionTypeNode(185 /* UnionType */, types);
         }
         // @api
         function updateUnionTypeNode(node, types) {
@@ -22416,7 +22912,7 @@
         }
         // @api
         function createIntersectionTypeNode(types) {
-            return createUnionOrIntersectionTypeNode(184 /* IntersectionType */, types);
+            return createUnionOrIntersectionTypeNode(186 /* IntersectionType */, types);
         }
         // @api
         function updateIntersectionTypeNode(node, types) {
@@ -22424,7 +22920,7 @@
         }
         // @api
         function createConditionalTypeNode(checkType, extendsType, trueType, falseType) {
-            var node = createBaseNode(185 /* ConditionalType */);
+            var node = createBaseNode(187 /* ConditionalType */);
             node.checkType = parenthesizerRules().parenthesizeMemberOfConditionalType(checkType);
             node.extendsType = parenthesizerRules().parenthesizeMemberOfConditionalType(extendsType);
             node.trueType = trueType;
@@ -22443,7 +22939,7 @@
         }
         // @api
         function createInferTypeNode(typeParameter) {
-            var node = createBaseNode(186 /* InferType */);
+            var node = createBaseNode(188 /* InferType */);
             node.typeParameter = typeParameter;
             node.transformFlags = 1 /* ContainsTypeScript */;
             return node;
@@ -22456,7 +22952,7 @@
         }
         // @api
         function createTemplateLiteralType(head, templateSpans) {
-            var node = createBaseNode(194 /* TemplateLiteralType */);
+            var node = createBaseNode(196 /* TemplateLiteralType */);
             node.head = head;
             node.templateSpans = createNodeArray(templateSpans);
             node.transformFlags = 1 /* ContainsTypeScript */;
@@ -22472,7 +22968,7 @@
         // @api
         function createImportTypeNode(argument, qualifier, typeArguments, isTypeOf) {
             if (isTypeOf === void 0) { isTypeOf = false; }
-            var node = createBaseNode(196 /* ImportType */);
+            var node = createBaseNode(198 /* ImportType */);
             node.argument = argument;
             node.qualifier = qualifier;
             node.typeArguments = typeArguments && parenthesizerRules().parenthesizeTypeArguments(typeArguments);
@@ -22492,7 +22988,7 @@
         }
         // @api
         function createParenthesizedType(type) {
-            var node = createBaseNode(187 /* ParenthesizedType */);
+            var node = createBaseNode(189 /* ParenthesizedType */);
             node.type = type;
             node.transformFlags = 1 /* ContainsTypeScript */;
             return node;
@@ -22505,13 +23001,13 @@
         }
         // @api
         function createThisTypeNode() {
-            var node = createBaseNode(188 /* ThisType */);
+            var node = createBaseNode(190 /* ThisType */);
             node.transformFlags = 1 /* ContainsTypeScript */;
             return node;
         }
         // @api
         function createTypeOperatorNode(operator, type) {
-            var node = createBaseNode(189 /* TypeOperator */);
+            var node = createBaseNode(191 /* TypeOperator */);
             node.operator = operator;
             node.type = parenthesizerRules().parenthesizeMemberOfElementType(type);
             node.transformFlags = 1 /* ContainsTypeScript */;
@@ -22525,7 +23021,7 @@
         }
         // @api
         function createIndexedAccessTypeNode(objectType, indexType) {
-            var node = createBaseNode(190 /* IndexedAccessType */);
+            var node = createBaseNode(192 /* IndexedAccessType */);
             node.objectType = parenthesizerRules().parenthesizeMemberOfElementType(objectType);
             node.indexType = indexType;
             node.transformFlags = 1 /* ContainsTypeScript */;
@@ -22540,7 +23036,7 @@
         }
         // @api
         function createMappedTypeNode(readonlyToken, typeParameter, nameType, questionToken, type) {
-            var node = createBaseNode(191 /* MappedType */);
+            var node = createBaseNode(193 /* MappedType */);
             node.readonlyToken = readonlyToken;
             node.typeParameter = typeParameter;
             node.nameType = nameType;
@@ -22561,7 +23057,7 @@
         }
         // @api
         function createLiteralTypeNode(literal) {
-            var node = createBaseNode(192 /* LiteralType */);
+            var node = createBaseNode(194 /* LiteralType */);
             node.literal = literal;
             node.transformFlags = 1 /* ContainsTypeScript */;
             return node;
@@ -22577,7 +23073,7 @@
         //
         // @api
         function createObjectBindingPattern(elements) {
-            var node = createBaseNode(197 /* ObjectBindingPattern */);
+            var node = createBaseNode(199 /* ObjectBindingPattern */);
             node.elements = createNodeArray(elements);
             node.transformFlags |=
                 propagateChildrenFlags(node.elements) |
@@ -22598,7 +23094,7 @@
         }
         // @api
         function createArrayBindingPattern(elements) {
-            var node = createBaseNode(198 /* ArrayBindingPattern */);
+            var node = createBaseNode(200 /* ArrayBindingPattern */);
             node.elements = createNodeArray(elements);
             node.transformFlags |=
                 propagateChildrenFlags(node.elements) |
@@ -22614,7 +23110,7 @@
         }
         // @api
         function createBindingElement(dotDotDotToken, propertyName, name, initializer) {
-            var node = createBaseBindingLikeDeclaration(199 /* BindingElement */, 
+            var node = createBaseBindingLikeDeclaration(201 /* BindingElement */, 
             /*decorators*/ undefined, 
             /*modifiers*/ undefined, name, initializer && parenthesizerRules().parenthesizeExpressionForDisallowedComma(initializer));
             node.propertyName = asName(propertyName);
@@ -22650,8 +23146,13 @@
         }
         // @api
         function createArrayLiteralExpression(elements, multiLine) {
-            var node = createBaseExpression(200 /* ArrayLiteralExpression */);
-            node.elements = parenthesizerRules().parenthesizeExpressionsOfCommaDelimitedList(createNodeArray(elements));
+            var node = createBaseExpression(202 /* ArrayLiteralExpression */);
+            // Ensure we add a trailing comma for something like `[NumericLiteral(1), NumericLiteral(2), OmittedExpresion]` so that
+            // we end up with `[1, 2, ,]` instead of `[1, 2, ]` otherwise the `OmittedExpression` will just end up being treated like
+            // a trailing comma.
+            var lastElement = elements && ts.lastOrUndefined(elements);
+            var elementsArray = createNodeArray(elements, lastElement && ts.isOmittedExpression(lastElement) ? true : undefined);
+            node.elements = parenthesizerRules().parenthesizeExpressionsOfCommaDelimitedList(elementsArray);
             node.multiLine = multiLine;
             node.transformFlags |= propagateChildrenFlags(node.elements);
             return node;
@@ -22664,7 +23165,7 @@
         }
         // @api
         function createObjectLiteralExpression(properties, multiLine) {
-            var node = createBaseExpression(201 /* ObjectLiteralExpression */);
+            var node = createBaseExpression(203 /* ObjectLiteralExpression */);
             node.properties = createNodeArray(properties);
             node.multiLine = multiLine;
             node.transformFlags |= propagateChildrenFlags(node.properties);
@@ -22678,7 +23179,7 @@
         }
         // @api
         function createPropertyAccessExpression(expression, name) {
-            var node = createBaseExpression(202 /* PropertyAccessExpression */);
+            var node = createBaseExpression(204 /* PropertyAccessExpression */);
             node.expression = parenthesizerRules().parenthesizeLeftSideOfAccess(expression);
             node.name = asName(name);
             node.transformFlags =
@@ -22707,7 +23208,7 @@
         }
         // @api
         function createPropertyAccessChain(expression, questionDotToken, name) {
-            var node = createBaseExpression(202 /* PropertyAccessExpression */);
+            var node = createBaseExpression(204 /* PropertyAccessExpression */);
             node.flags |= 32 /* OptionalChain */;
             node.expression = parenthesizerRules().parenthesizeLeftSideOfAccess(expression);
             node.questionDotToken = questionDotToken;
@@ -22734,7 +23235,7 @@
         }
         // @api
         function createElementAccessExpression(expression, index) {
-            var node = createBaseExpression(203 /* ElementAccessExpression */);
+            var node = createBaseExpression(205 /* ElementAccessExpression */);
             node.expression = parenthesizerRules().parenthesizeLeftSideOfAccess(expression);
             node.argumentExpression = asExpression(index);
             node.transformFlags |=
@@ -22761,7 +23262,7 @@
         }
         // @api
         function createElementAccessChain(expression, questionDotToken, index) {
-            var node = createBaseExpression(203 /* ElementAccessExpression */);
+            var node = createBaseExpression(205 /* ElementAccessExpression */);
             node.flags |= 32 /* OptionalChain */;
             node.expression = parenthesizerRules().parenthesizeLeftSideOfAccess(expression);
             node.questionDotToken = questionDotToken;
@@ -22786,7 +23287,7 @@
         }
         // @api
         function createCallExpression(expression, typeArguments, argumentsArray) {
-            var node = createBaseExpression(204 /* CallExpression */);
+            var node = createBaseExpression(206 /* CallExpression */);
             node.expression = parenthesizerRules().parenthesizeLeftSideOfAccess(expression);
             node.typeArguments = asNodeArray(typeArguments);
             node.arguments = parenthesizerRules().parenthesizeExpressionsOfCommaDelimitedList(createNodeArray(argumentsArray));
@@ -22818,7 +23319,7 @@
         }
         // @api
         function createCallChain(expression, questionDotToken, typeArguments, argumentsArray) {
-            var node = createBaseExpression(204 /* CallExpression */);
+            var node = createBaseExpression(206 /* CallExpression */);
             node.flags |= 32 /* OptionalChain */;
             node.expression = parenthesizerRules().parenthesizeLeftSideOfAccess(expression);
             node.questionDotToken = questionDotToken;
@@ -22850,7 +23351,7 @@
         }
         // @api
         function createNewExpression(expression, typeArguments, argumentsArray) {
-            var node = createBaseExpression(205 /* NewExpression */);
+            var node = createBaseExpression(207 /* NewExpression */);
             node.expression = parenthesizerRules().parenthesizeExpressionOfNew(expression);
             node.typeArguments = asNodeArray(typeArguments);
             node.arguments = argumentsArray ? parenthesizerRules().parenthesizeExpressionsOfCommaDelimitedList(argumentsArray) : undefined;
@@ -22874,7 +23375,7 @@
         }
         // @api
         function createTaggedTemplateExpression(tag, typeArguments, template) {
-            var node = createBaseExpression(206 /* TaggedTemplateExpression */);
+            var node = createBaseExpression(208 /* TaggedTemplateExpression */);
             node.tag = parenthesizerRules().parenthesizeLeftSideOfAccess(tag);
             node.typeArguments = asNodeArray(typeArguments);
             node.template = template;
@@ -22901,7 +23402,7 @@
         }
         // @api
         function createTypeAssertion(type, expression) {
-            var node = createBaseExpression(207 /* TypeAssertionExpression */);
+            var node = createBaseExpression(209 /* TypeAssertionExpression */);
             node.expression = parenthesizerRules().parenthesizeOperandOfPrefixUnary(expression);
             node.type = type;
             node.transformFlags |=
@@ -22919,7 +23420,7 @@
         }
         // @api
         function createParenthesizedExpression(expression) {
-            var node = createBaseExpression(208 /* ParenthesizedExpression */);
+            var node = createBaseExpression(210 /* ParenthesizedExpression */);
             node.expression = expression;
             node.transformFlags = propagateChildFlags(node.expression);
             return node;
@@ -22932,7 +23433,7 @@
         }
         // @api
         function createFunctionExpression(modifiers, asteriskToken, name, typeParameters, parameters, type, body) {
-            var node = createBaseFunctionLikeDeclaration(209 /* FunctionExpression */, 
+            var node = createBaseFunctionLikeDeclaration(211 /* FunctionExpression */, 
             /*decorators*/ undefined, modifiers, name, typeParameters, parameters, type, body);
             node.asteriskToken = asteriskToken;
             node.transformFlags |= propagateChildFlags(node.asteriskToken);
@@ -22966,7 +23467,7 @@
         }
         // @api
         function createArrowFunction(modifiers, typeParameters, parameters, type, equalsGreaterThanToken, body) {
-            var node = createBaseFunctionLikeDeclaration(210 /* ArrowFunction */, 
+            var node = createBaseFunctionLikeDeclaration(212 /* ArrowFunction */, 
             /*decorators*/ undefined, modifiers, 
             /*name*/ undefined, typeParameters, parameters, type, parenthesizerRules().parenthesizeConciseBodyOfArrowFunction(body));
             node.equalsGreaterThanToken = equalsGreaterThanToken !== null && equalsGreaterThanToken !== void 0 ? equalsGreaterThanToken : createToken(38 /* EqualsGreaterThanToken */);
@@ -22974,7 +23475,7 @@
                 propagateChildFlags(node.equalsGreaterThanToken) |
                     512 /* ContainsES2015 */;
             if (ts.modifiersToFlags(node.modifiers) & 256 /* Async */) {
-                node.transformFlags |= 128 /* ContainsES2017 */;
+                node.transformFlags |= 128 /* ContainsES2017 */ | 8192 /* ContainsLexicalThis */;
             }
             return node;
         }
@@ -22991,7 +23492,7 @@
         }
         // @api
         function createDeleteExpression(expression) {
-            var node = createBaseExpression(211 /* DeleteExpression */);
+            var node = createBaseExpression(213 /* DeleteExpression */);
             node.expression = parenthesizerRules().parenthesizeOperandOfPrefixUnary(expression);
             node.transformFlags |= propagateChildFlags(node.expression);
             return node;
@@ -23004,7 +23505,7 @@
         }
         // @api
         function createTypeOfExpression(expression) {
-            var node = createBaseExpression(212 /* TypeOfExpression */);
+            var node = createBaseExpression(214 /* TypeOfExpression */);
             node.expression = parenthesizerRules().parenthesizeOperandOfPrefixUnary(expression);
             node.transformFlags |= propagateChildFlags(node.expression);
             return node;
@@ -23017,7 +23518,7 @@
         }
         // @api
         function createVoidExpression(expression) {
-            var node = createBaseExpression(213 /* VoidExpression */);
+            var node = createBaseExpression(215 /* VoidExpression */);
             node.expression = parenthesizerRules().parenthesizeOperandOfPrefixUnary(expression);
             node.transformFlags |= propagateChildFlags(node.expression);
             return node;
@@ -23030,7 +23531,7 @@
         }
         // @api
         function createAwaitExpression(expression) {
-            var node = createBaseExpression(214 /* AwaitExpression */);
+            var node = createBaseExpression(216 /* AwaitExpression */);
             node.expression = parenthesizerRules().parenthesizeOperandOfPrefixUnary(expression);
             node.transformFlags |=
                 propagateChildFlags(node.expression) |
@@ -23047,10 +23548,18 @@
         }
         // @api
         function createPrefixUnaryExpression(operator, operand) {
-            var node = createBaseExpression(215 /* PrefixUnaryExpression */);
+            var node = createBaseExpression(217 /* PrefixUnaryExpression */);
             node.operator = operator;
             node.operand = parenthesizerRules().parenthesizeOperandOfPrefixUnary(operand);
             node.transformFlags |= propagateChildFlags(node.operand);
+            // Only set this flag for non-generated identifiers and non-"local" names. See the
+            // comment in `visitPreOrPostfixUnaryExpression` in module.ts
+            if ((operator === 45 /* PlusPlusToken */ || operator === 46 /* MinusMinusToken */) &&
+                ts.isIdentifier(node.operand) &&
+                !ts.isGeneratedIdentifier(node.operand) &&
+                !ts.isLocalName(node.operand)) {
+                node.transformFlags |= 67108864 /* ContainsUpdateExpressionForIdentifier */;
+            }
             return node;
         }
         // @api
@@ -23061,10 +23570,17 @@
         }
         // @api
         function createPostfixUnaryExpression(operand, operator) {
-            var node = createBaseExpression(216 /* PostfixUnaryExpression */);
+            var node = createBaseExpression(218 /* PostfixUnaryExpression */);
             node.operator = operator;
             node.operand = parenthesizerRules().parenthesizeOperandOfPostfixUnary(operand);
-            node.transformFlags = propagateChildFlags(node.operand);
+            node.transformFlags |= propagateChildFlags(node.operand);
+            // Only set this flag for non-generated identifiers and non-"local" names. See the
+            // comment in `visitPreOrPostfixUnaryExpression` in module.ts
+            if (ts.isIdentifier(node.operand) &&
+                !ts.isGeneratedIdentifier(node.operand) &&
+                !ts.isLocalName(node.operand)) {
+                node.transformFlags |= 67108864 /* ContainsUpdateExpressionForIdentifier */;
+            }
             return node;
         }
         // @api
@@ -23075,7 +23591,7 @@
         }
         // @api
         function createBinaryExpression(left, operator, right) {
-            var node = createBaseExpression(217 /* BinaryExpression */);
+            var node = createBaseExpression(219 /* BinaryExpression */);
             var operatorToken = asToken(operator);
             var operatorKind = operatorToken.kind;
             node.left = parenthesizerRules().parenthesizeLeftSideOfBinary(operatorKind, left);
@@ -23088,7 +23604,7 @@
             if (operatorKind === 60 /* QuestionQuestionToken */) {
                 node.transformFlags |= 16 /* ContainsES2020 */;
             }
-            else if (operatorKind === 62 /* EqualsToken */) {
+            else if (operatorKind === 63 /* EqualsToken */) {
                 if (ts.isObjectLiteralExpression(node.left)) {
                     node.transformFlags |=
                         512 /* ContainsES2015 */ |
@@ -23103,7 +23619,7 @@
                             propagateAssignmentPatternFlags(node.left);
                 }
             }
-            else if (operatorKind === 42 /* AsteriskAsteriskToken */ || operatorKind === 66 /* AsteriskAsteriskEqualsToken */) {
+            else if (operatorKind === 42 /* AsteriskAsteriskToken */ || operatorKind === 67 /* AsteriskAsteriskEqualsToken */) {
                 node.transformFlags |= 256 /* ContainsES2016 */;
             }
             else if (ts.isLogicalOrCoalescingAssignmentOperator(operatorKind)) {
@@ -23144,7 +23660,7 @@
         }
         // @api
         function createConditionalExpression(condition, questionToken, whenTrue, colonToken, whenFalse) {
-            var node = createBaseExpression(218 /* ConditionalExpression */);
+            var node = createBaseExpression(220 /* ConditionalExpression */);
             node.condition = parenthesizerRules().parenthesizeConditionOfConditionalExpression(condition);
             node.questionToken = questionToken !== null && questionToken !== void 0 ? questionToken : createToken(57 /* QuestionToken */);
             node.whenTrue = parenthesizerRules().parenthesizeBranchOfConditionalExpression(whenTrue);
@@ -23170,7 +23686,7 @@
         }
         // @api
         function createTemplateExpression(head, templateSpans) {
-            var node = createBaseExpression(219 /* TemplateExpression */);
+            var node = createBaseExpression(221 /* TemplateExpression */);
             node.head = head;
             node.templateSpans = createNodeArray(templateSpans);
             node.transformFlags |=
@@ -23240,7 +23756,7 @@
         // @api
         function createYieldExpression(asteriskToken, expression) {
             ts.Debug.assert(!asteriskToken || !!expression, "A `YieldExpression` with an asteriskToken must have an expression.");
-            var node = createBaseExpression(220 /* YieldExpression */);
+            var node = createBaseExpression(222 /* YieldExpression */);
             node.expression = expression && parenthesizerRules().parenthesizeExpressionForDisallowedComma(expression);
             node.asteriskToken = asteriskToken;
             node.transformFlags |=
@@ -23260,7 +23776,7 @@
         }
         // @api
         function createSpreadElement(expression) {
-            var node = createBaseExpression(221 /* SpreadElement */);
+            var node = createBaseExpression(223 /* SpreadElement */);
             node.expression = parenthesizerRules().parenthesizeExpressionForDisallowedComma(expression);
             node.transformFlags |=
                 propagateChildFlags(node.expression) |
@@ -23276,7 +23792,7 @@
         }
         // @api
         function createClassExpression(decorators, modifiers, name, typeParameters, heritageClauses, members) {
-            var node = createBaseClassLikeDeclaration(222 /* ClassExpression */, decorators, modifiers, name, typeParameters, heritageClauses, members);
+            var node = createBaseClassLikeDeclaration(224 /* ClassExpression */, decorators, modifiers, name, typeParameters, heritageClauses, members);
             node.transformFlags |= 512 /* ContainsES2015 */;
             return node;
         }
@@ -23293,11 +23809,11 @@
         }
         // @api
         function createOmittedExpression() {
-            return createBaseExpression(223 /* OmittedExpression */);
+            return createBaseExpression(225 /* OmittedExpression */);
         }
         // @api
         function createExpressionWithTypeArguments(expression, typeArguments) {
-            var node = createBaseNode(224 /* ExpressionWithTypeArguments */);
+            var node = createBaseNode(226 /* ExpressionWithTypeArguments */);
             node.expression = parenthesizerRules().parenthesizeLeftSideOfAccess(expression);
             node.typeArguments = typeArguments && parenthesizerRules().parenthesizeTypeArguments(typeArguments);
             node.transformFlags |=
@@ -23315,7 +23831,7 @@
         }
         // @api
         function createAsExpression(expression, type) {
-            var node = createBaseExpression(225 /* AsExpression */);
+            var node = createBaseExpression(227 /* AsExpression */);
             node.expression = expression;
             node.type = type;
             node.transformFlags |=
@@ -23333,7 +23849,7 @@
         }
         // @api
         function createNonNullExpression(expression) {
-            var node = createBaseExpression(226 /* NonNullExpression */);
+            var node = createBaseExpression(228 /* NonNullExpression */);
             node.expression = parenthesizerRules().parenthesizeLeftSideOfAccess(expression);
             node.transformFlags |=
                 propagateChildFlags(node.expression) |
@@ -23351,7 +23867,7 @@
         }
         // @api
         function createNonNullChain(expression) {
-            var node = createBaseExpression(226 /* NonNullExpression */);
+            var node = createBaseExpression(228 /* NonNullExpression */);
             node.flags |= 32 /* OptionalChain */;
             node.expression = parenthesizerRules().parenthesizeLeftSideOfAccess(expression);
             node.transformFlags |=
@@ -23368,15 +23884,15 @@
         }
         // @api
         function createMetaProperty(keywordToken, name) {
-            var node = createBaseExpression(227 /* MetaProperty */);
+            var node = createBaseExpression(229 /* MetaProperty */);
             node.keywordToken = keywordToken;
             node.name = name;
             node.transformFlags |= propagateChildFlags(node.name);
             switch (keywordToken) {
-                case 102 /* NewKeyword */:
+                case 103 /* NewKeyword */:
                     node.transformFlags |= 512 /* ContainsES2015 */;
                     break;
-                case 99 /* ImportKeyword */:
+                case 100 /* ImportKeyword */:
                     node.transformFlags |= 4 /* ContainsESNext */;
                     break;
                 default:
@@ -23395,7 +23911,7 @@
         //
         // @api
         function createTemplateSpan(expression, literal) {
-            var node = createBaseNode(229 /* TemplateSpan */);
+            var node = createBaseNode(231 /* TemplateSpan */);
             node.expression = expression;
             node.literal = literal;
             node.transformFlags |=
@@ -23413,7 +23929,7 @@
         }
         // @api
         function createSemicolonClassElement() {
-            var node = createBaseNode(230 /* SemicolonClassElement */);
+            var node = createBaseNode(232 /* SemicolonClassElement */);
             node.transformFlags |= 512 /* ContainsES2015 */;
             return node;
         }
@@ -23422,7 +23938,7 @@
         //
         // @api
         function createBlock(statements, multiLine) {
-            var node = createBaseNode(231 /* Block */);
+            var node = createBaseNode(233 /* Block */);
             node.statements = createNodeArray(statements);
             node.multiLine = multiLine;
             node.transformFlags |= propagateChildrenFlags(node.statements);
@@ -23436,7 +23952,7 @@
         }
         // @api
         function createVariableStatement(modifiers, declarationList) {
-            var node = createBaseDeclaration(233 /* VariableStatement */, /*decorators*/ undefined, modifiers);
+            var node = createBaseDeclaration(235 /* VariableStatement */, /*decorators*/ undefined, modifiers);
             node.declarationList = ts.isArray(declarationList) ? createVariableDeclarationList(declarationList) : declarationList;
             node.transformFlags |=
                 propagateChildFlags(node.declarationList);
@@ -23454,11 +23970,11 @@
         }
         // @api
         function createEmptyStatement() {
-            return createBaseNode(232 /* EmptyStatement */);
+            return createBaseNode(234 /* EmptyStatement */);
         }
         // @api
         function createExpressionStatement(expression) {
-            var node = createBaseNode(234 /* ExpressionStatement */);
+            var node = createBaseNode(236 /* ExpressionStatement */);
             node.expression = parenthesizerRules().parenthesizeExpressionOfExpressionStatement(expression);
             node.transformFlags |= propagateChildFlags(node.expression);
             return node;
@@ -23471,7 +23987,7 @@
         }
         // @api
         function createIfStatement(expression, thenStatement, elseStatement) {
-            var node = createBaseNode(235 /* IfStatement */);
+            var node = createBaseNode(237 /* IfStatement */);
             node.expression = expression;
             node.thenStatement = asEmbeddedStatement(thenStatement);
             node.elseStatement = asEmbeddedStatement(elseStatement);
@@ -23491,7 +24007,7 @@
         }
         // @api
         function createDoStatement(statement, expression) {
-            var node = createBaseNode(236 /* DoStatement */);
+            var node = createBaseNode(238 /* DoStatement */);
             node.statement = asEmbeddedStatement(statement);
             node.expression = expression;
             node.transformFlags |=
@@ -23508,7 +24024,7 @@
         }
         // @api
         function createWhileStatement(expression, statement) {
-            var node = createBaseNode(237 /* WhileStatement */);
+            var node = createBaseNode(239 /* WhileStatement */);
             node.expression = expression;
             node.statement = asEmbeddedStatement(statement);
             node.transformFlags |=
@@ -23525,7 +24041,7 @@
         }
         // @api
         function createForStatement(initializer, condition, incrementor, statement) {
-            var node = createBaseNode(238 /* ForStatement */);
+            var node = createBaseNode(240 /* ForStatement */);
             node.initializer = initializer;
             node.condition = condition;
             node.incrementor = incrementor;
@@ -23548,7 +24064,7 @@
         }
         // @api
         function createForInStatement(initializer, expression, statement) {
-            var node = createBaseNode(239 /* ForInStatement */);
+            var node = createBaseNode(241 /* ForInStatement */);
             node.initializer = initializer;
             node.expression = expression;
             node.statement = asEmbeddedStatement(statement);
@@ -23568,7 +24084,7 @@
         }
         // @api
         function createForOfStatement(awaitModifier, initializer, expression, statement) {
-            var node = createBaseNode(240 /* ForOfStatement */);
+            var node = createBaseNode(242 /* ForOfStatement */);
             node.awaitModifier = awaitModifier;
             node.initializer = initializer;
             node.expression = parenthesizerRules().parenthesizeExpressionForDisallowedComma(expression);
@@ -23594,7 +24110,7 @@
         }
         // @api
         function createContinueStatement(label) {
-            var node = createBaseNode(241 /* ContinueStatement */);
+            var node = createBaseNode(243 /* ContinueStatement */);
             node.label = asName(label);
             node.transformFlags |=
                 propagateChildFlags(node.label) |
@@ -23609,7 +24125,7 @@
         }
         // @api
         function createBreakStatement(label) {
-            var node = createBaseNode(242 /* BreakStatement */);
+            var node = createBaseNode(244 /* BreakStatement */);
             node.label = asName(label);
             node.transformFlags |=
                 propagateChildFlags(node.label) |
@@ -23624,7 +24140,7 @@
         }
         // @api
         function createReturnStatement(expression) {
-            var node = createBaseNode(243 /* ReturnStatement */);
+            var node = createBaseNode(245 /* ReturnStatement */);
             node.expression = expression;
             // return in an ES2018 async generator must be awaited
             node.transformFlags |=
@@ -23641,7 +24157,7 @@
         }
         // @api
         function createWithStatement(expression, statement) {
-            var node = createBaseNode(244 /* WithStatement */);
+            var node = createBaseNode(246 /* WithStatement */);
             node.expression = expression;
             node.statement = asEmbeddedStatement(statement);
             node.transformFlags |=
@@ -23658,7 +24174,7 @@
         }
         // @api
         function createSwitchStatement(expression, caseBlock) {
-            var node = createBaseNode(245 /* SwitchStatement */);
+            var node = createBaseNode(247 /* SwitchStatement */);
             node.expression = parenthesizerRules().parenthesizeExpressionForDisallowedComma(expression);
             node.caseBlock = caseBlock;
             node.transformFlags |=
@@ -23675,7 +24191,7 @@
         }
         // @api
         function createLabeledStatement(label, statement) {
-            var node = createBaseNode(246 /* LabeledStatement */);
+            var node = createBaseNode(248 /* LabeledStatement */);
             node.label = asName(label);
             node.statement = asEmbeddedStatement(statement);
             node.transformFlags |=
@@ -23692,7 +24208,7 @@
         }
         // @api
         function createThrowStatement(expression) {
-            var node = createBaseNode(247 /* ThrowStatement */);
+            var node = createBaseNode(249 /* ThrowStatement */);
             node.expression = expression;
             node.transformFlags |= propagateChildFlags(node.expression);
             return node;
@@ -23705,7 +24221,7 @@
         }
         // @api
         function createTryStatement(tryBlock, catchClause, finallyBlock) {
-            var node = createBaseNode(248 /* TryStatement */);
+            var node = createBaseNode(250 /* TryStatement */);
             node.tryBlock = tryBlock;
             node.catchClause = catchClause;
             node.finallyBlock = finallyBlock;
@@ -23725,11 +24241,11 @@
         }
         // @api
         function createDebuggerStatement() {
-            return createBaseNode(249 /* DebuggerStatement */);
+            return createBaseNode(251 /* DebuggerStatement */);
         }
         // @api
         function createVariableDeclaration(name, exclamationToken, type, initializer) {
-            var node = createBaseVariableLikeDeclaration(250 /* VariableDeclaration */, 
+            var node = createBaseVariableLikeDeclaration(252 /* VariableDeclaration */, 
             /*decorators*/ undefined, 
             /*modifiers*/ undefined, name, type, initializer && parenthesizerRules().parenthesizeExpressionForDisallowedComma(initializer));
             node.exclamationToken = exclamationToken;
@@ -23751,7 +24267,7 @@
         // @api
         function createVariableDeclarationList(declarations, flags) {
             if (flags === void 0) { flags = 0 /* None */; }
-            var node = createBaseNode(251 /* VariableDeclarationList */);
+            var node = createBaseNode(253 /* VariableDeclarationList */);
             node.flags |= flags & 3 /* BlockScoped */;
             node.declarations = createNodeArray(declarations);
             node.transformFlags |=
@@ -23772,7 +24288,7 @@
         }
         // @api
         function createFunctionDeclaration(decorators, modifiers, asteriskToken, name, typeParameters, parameters, type, body) {
-            var node = createBaseFunctionLikeDeclaration(252 /* FunctionDeclaration */, decorators, modifiers, name, typeParameters, parameters, type, body);
+            var node = createBaseFunctionLikeDeclaration(254 /* FunctionDeclaration */, decorators, modifiers, name, typeParameters, parameters, type, body);
             node.asteriskToken = asteriskToken;
             if (!node.body || ts.modifiersToFlags(node.modifiers) & 2 /* Ambient */) {
                 node.transformFlags = 1 /* ContainsTypeScript */;
@@ -23810,7 +24326,7 @@
         }
         // @api
         function createClassDeclaration(decorators, modifiers, name, typeParameters, heritageClauses, members) {
-            var node = createBaseClassLikeDeclaration(253 /* ClassDeclaration */, decorators, modifiers, name, typeParameters, heritageClauses, members);
+            var node = createBaseClassLikeDeclaration(255 /* ClassDeclaration */, decorators, modifiers, name, typeParameters, heritageClauses, members);
             if (ts.modifiersToFlags(node.modifiers) & 2 /* Ambient */) {
                 node.transformFlags = 1 /* ContainsTypeScript */;
             }
@@ -23835,7 +24351,7 @@
         }
         // @api
         function createInterfaceDeclaration(decorators, modifiers, name, typeParameters, heritageClauses, members) {
-            var node = createBaseInterfaceOrClassLikeDeclaration(254 /* InterfaceDeclaration */, decorators, modifiers, name, typeParameters, heritageClauses);
+            var node = createBaseInterfaceOrClassLikeDeclaration(256 /* InterfaceDeclaration */, decorators, modifiers, name, typeParameters, heritageClauses);
             node.members = createNodeArray(members);
             node.transformFlags = 1 /* ContainsTypeScript */;
             return node;
@@ -23853,7 +24369,7 @@
         }
         // @api
         function createTypeAliasDeclaration(decorators, modifiers, name, typeParameters, type) {
-            var node = createBaseGenericNamedDeclaration(255 /* TypeAliasDeclaration */, decorators, modifiers, name, typeParameters);
+            var node = createBaseGenericNamedDeclaration(257 /* TypeAliasDeclaration */, decorators, modifiers, name, typeParameters);
             node.type = type;
             node.transformFlags = 1 /* ContainsTypeScript */;
             return node;
@@ -23870,7 +24386,7 @@
         }
         // @api
         function createEnumDeclaration(decorators, modifiers, name, members) {
-            var node = createBaseNamedDeclaration(256 /* EnumDeclaration */, decorators, modifiers, name);
+            var node = createBaseNamedDeclaration(258 /* EnumDeclaration */, decorators, modifiers, name);
             node.members = createNodeArray(members);
             node.transformFlags |=
                 propagateChildrenFlags(node.members) |
@@ -23890,7 +24406,7 @@
         // @api
         function createModuleDeclaration(decorators, modifiers, name, body, flags) {
             if (flags === void 0) { flags = 0 /* None */; }
-            var node = createBaseDeclaration(257 /* ModuleDeclaration */, decorators, modifiers);
+            var node = createBaseDeclaration(259 /* ModuleDeclaration */, decorators, modifiers);
             node.flags |= flags & (16 /* Namespace */ | 4 /* NestedNamespace */ | 1024 /* GlobalAugmentation */);
             node.name = name;
             node.body = body;
@@ -23917,7 +24433,7 @@
         }
         // @api
         function createModuleBlock(statements) {
-            var node = createBaseNode(258 /* ModuleBlock */);
+            var node = createBaseNode(260 /* ModuleBlock */);
             node.statements = createNodeArray(statements);
             node.transformFlags |= propagateChildrenFlags(node.statements);
             return node;
@@ -23930,7 +24446,7 @@
         }
         // @api
         function createCaseBlock(clauses) {
-            var node = createBaseNode(259 /* CaseBlock */);
+            var node = createBaseNode(261 /* CaseBlock */);
             node.clauses = createNodeArray(clauses);
             node.transformFlags |= propagateChildrenFlags(node.clauses);
             return node;
@@ -23943,7 +24459,7 @@
         }
         // @api
         function createNamespaceExportDeclaration(name) {
-            var node = createBaseNamedDeclaration(260 /* NamespaceExportDeclaration */, 
+            var node = createBaseNamedDeclaration(262 /* NamespaceExportDeclaration */, 
             /*decorators*/ undefined, 
             /*modifiers*/ undefined, name);
             node.transformFlags = 1 /* ContainsTypeScript */;
@@ -23957,7 +24473,7 @@
         }
         // @api
         function createImportEqualsDeclaration(decorators, modifiers, isTypeOnly, name, moduleReference) {
-            var node = createBaseNamedDeclaration(261 /* ImportEqualsDeclaration */, decorators, modifiers, name);
+            var node = createBaseNamedDeclaration(263 /* ImportEqualsDeclaration */, decorators, modifiers, name);
             node.isTypeOnly = isTypeOnly;
             node.moduleReference = moduleReference;
             node.transformFlags |= propagateChildFlags(node.moduleReference);
@@ -23978,7 +24494,7 @@
         }
         // @api
         function createImportDeclaration(decorators, modifiers, importClause, moduleSpecifier) {
-            var node = createBaseDeclaration(262 /* ImportDeclaration */, decorators, modifiers);
+            var node = createBaseDeclaration(264 /* ImportDeclaration */, decorators, modifiers);
             node.importClause = importClause;
             node.moduleSpecifier = moduleSpecifier;
             node.transformFlags |=
@@ -23998,7 +24514,7 @@
         }
         // @api
         function createImportClause(isTypeOnly, name, namedBindings) {
-            var node = createBaseNode(263 /* ImportClause */);
+            var node = createBaseNode(265 /* ImportClause */);
             node.isTypeOnly = isTypeOnly;
             node.name = name;
             node.namedBindings = namedBindings;
@@ -24021,7 +24537,7 @@
         }
         // @api
         function createNamespaceImport(name) {
-            var node = createBaseNode(264 /* NamespaceImport */);
+            var node = createBaseNode(266 /* NamespaceImport */);
             node.name = name;
             node.transformFlags |= propagateChildFlags(node.name);
             node.transformFlags &= ~16777216 /* ContainsPossibleTopLevelAwait */; // always parsed in an Await context
@@ -24035,7 +24551,7 @@
         }
         // @api
         function createNamespaceExport(name) {
-            var node = createBaseNode(270 /* NamespaceExport */);
+            var node = createBaseNode(272 /* NamespaceExport */);
             node.name = name;
             node.transformFlags |=
                 propagateChildFlags(node.name) |
@@ -24051,7 +24567,7 @@
         }
         // @api
         function createNamedImports(elements) {
-            var node = createBaseNode(265 /* NamedImports */);
+            var node = createBaseNode(267 /* NamedImports */);
             node.elements = createNodeArray(elements);
             node.transformFlags |= propagateChildrenFlags(node.elements);
             node.transformFlags &= ~16777216 /* ContainsPossibleTopLevelAwait */; // always parsed in an Await context
@@ -24065,7 +24581,7 @@
         }
         // @api
         function createImportSpecifier(propertyName, name) {
-            var node = createBaseNode(266 /* ImportSpecifier */);
+            var node = createBaseNode(268 /* ImportSpecifier */);
             node.propertyName = propertyName;
             node.name = name;
             node.transformFlags |=
@@ -24083,10 +24599,10 @@
         }
         // @api
         function createExportAssignment(decorators, modifiers, isExportEquals, expression) {
-            var node = createBaseDeclaration(267 /* ExportAssignment */, decorators, modifiers);
+            var node = createBaseDeclaration(269 /* ExportAssignment */, decorators, modifiers);
             node.isExportEquals = isExportEquals;
             node.expression = isExportEquals
-                ? parenthesizerRules().parenthesizeRightSideOfBinary(62 /* EqualsToken */, /*leftSide*/ undefined, expression)
+                ? parenthesizerRules().parenthesizeRightSideOfBinary(63 /* EqualsToken */, /*leftSide*/ undefined, expression)
                 : parenthesizerRules().parenthesizeExpressionOfExportDefault(expression);
             node.transformFlags |= propagateChildFlags(node.expression);
             node.transformFlags &= ~16777216 /* ContainsPossibleTopLevelAwait */; // always parsed in an Await context
@@ -24102,7 +24618,7 @@
         }
         // @api
         function createExportDeclaration(decorators, modifiers, isTypeOnly, exportClause, moduleSpecifier) {
-            var node = createBaseDeclaration(268 /* ExportDeclaration */, decorators, modifiers);
+            var node = createBaseDeclaration(270 /* ExportDeclaration */, decorators, modifiers);
             node.isTypeOnly = isTypeOnly;
             node.exportClause = exportClause;
             node.moduleSpecifier = moduleSpecifier;
@@ -24124,7 +24640,7 @@
         }
         // @api
         function createNamedExports(elements) {
-            var node = createBaseNode(269 /* NamedExports */);
+            var node = createBaseNode(271 /* NamedExports */);
             node.elements = createNodeArray(elements);
             node.transformFlags |= propagateChildrenFlags(node.elements);
             node.transformFlags &= ~16777216 /* ContainsPossibleTopLevelAwait */; // always parsed in an Await context
@@ -24138,7 +24654,7 @@
         }
         // @api
         function createExportSpecifier(propertyName, name) {
-            var node = createBaseNode(271 /* ExportSpecifier */);
+            var node = createBaseNode(273 /* ExportSpecifier */);
             node.propertyName = asName(propertyName);
             node.name = asName(name);
             node.transformFlags |=
@@ -24156,7 +24672,7 @@
         }
         // @api
         function createMissingDeclaration() {
-            var node = createBaseDeclaration(272 /* MissingDeclaration */, 
+            var node = createBaseDeclaration(274 /* MissingDeclaration */, 
             /*decorators*/ undefined, 
             /*modifiers*/ undefined);
             return node;
@@ -24166,7 +24682,7 @@
         //
         // @api
         function createExternalModuleReference(expression) {
-            var node = createBaseNode(273 /* ExternalModuleReference */);
+            var node = createBaseNode(275 /* ExternalModuleReference */);
             node.expression = expression;
             node.transformFlags |= propagateChildFlags(node.expression);
             node.transformFlags &= ~16777216 /* ContainsPossibleTopLevelAwait */; // always parsed in an Await context
@@ -24211,7 +24727,7 @@
         }
         // @api
         function createJSDocFunctionType(parameters, type) {
-            var node = createBaseSignatureDeclaration(309 /* JSDocFunctionType */, 
+            var node = createBaseSignatureDeclaration(312 /* JSDocFunctionType */, 
             /*decorators*/ undefined, 
             /*modifiers*/ undefined, 
             /*name*/ undefined, 
@@ -24228,7 +24744,7 @@
         // @api
         function createJSDocTypeLiteral(propertyTags, isArrayType) {
             if (isArrayType === void 0) { isArrayType = false; }
-            var node = createBaseNode(314 /* JSDocTypeLiteral */);
+            var node = createBaseNode(317 /* JSDocTypeLiteral */);
             node.jsDocPropertyTags = asNodeArray(propertyTags);
             node.isArrayType = isArrayType;
             return node;
@@ -24242,7 +24758,7 @@
         }
         // @api
         function createJSDocTypeExpression(type) {
-            var node = createBaseNode(302 /* JSDocTypeExpression */);
+            var node = createBaseNode(304 /* JSDocTypeExpression */);
             node.type = type;
             return node;
         }
@@ -24254,7 +24770,7 @@
         }
         // @api
         function createJSDocSignature(typeParameters, parameters, type) {
-            var node = createBaseNode(315 /* JSDocSignature */);
+            var node = createBaseNode(318 /* JSDocSignature */);
             node.typeParameters = asNodeArray(typeParameters);
             node.parameters = createNodeArray(parameters);
             node.type = type;
@@ -24283,7 +24799,7 @@
         }
         // @api
         function createJSDocTemplateTag(tagName, constraint, typeParameters, comment) {
-            var node = createBaseJSDocTag(334 /* JSDocTemplateTag */, tagName !== null && tagName !== void 0 ? tagName : createIdentifier("template"), comment);
+            var node = createBaseJSDocTag(339 /* JSDocTemplateTag */, tagName !== null && tagName !== void 0 ? tagName : createIdentifier("template"), comment);
             node.constraint = constraint;
             node.typeParameters = createNodeArray(typeParameters);
             return node;
@@ -24300,7 +24816,7 @@
         }
         // @api
         function createJSDocTypedefTag(tagName, typeExpression, fullName, comment) {
-            var node = createBaseJSDocTag(335 /* JSDocTypedefTag */, tagName !== null && tagName !== void 0 ? tagName : createIdentifier("typedef"), comment);
+            var node = createBaseJSDocTag(340 /* JSDocTypedefTag */, tagName !== null && tagName !== void 0 ? tagName : createIdentifier("typedef"), comment);
             node.typeExpression = typeExpression;
             node.fullName = fullName;
             node.name = ts.getJSDocTypeAliasName(fullName);
@@ -24318,7 +24834,7 @@
         }
         // @api
         function createJSDocParameterTag(tagName, name, isBracketed, typeExpression, isNameFirst, comment) {
-            var node = createBaseJSDocTag(330 /* JSDocParameterTag */, tagName !== null && tagName !== void 0 ? tagName : createIdentifier("param"), comment);
+            var node = createBaseJSDocTag(335 /* JSDocParameterTag */, tagName !== null && tagName !== void 0 ? tagName : createIdentifier("param"), comment);
             node.typeExpression = typeExpression;
             node.name = name;
             node.isNameFirst = !!isNameFirst;
@@ -24339,7 +24855,7 @@
         }
         // @api
         function createJSDocPropertyTag(tagName, name, isBracketed, typeExpression, isNameFirst, comment) {
-            var node = createBaseJSDocTag(337 /* JSDocPropertyTag */, tagName !== null && tagName !== void 0 ? tagName : createIdentifier("prop"), comment);
+            var node = createBaseJSDocTag(342 /* JSDocPropertyTag */, tagName !== null && tagName !== void 0 ? tagName : createIdentifier("prop"), comment);
             node.typeExpression = typeExpression;
             node.name = name;
             node.isNameFirst = !!isNameFirst;
@@ -24360,7 +24876,7 @@
         }
         // @api
         function createJSDocCallbackTag(tagName, typeExpression, fullName, comment) {
-            var node = createBaseJSDocTag(328 /* JSDocCallbackTag */, tagName !== null && tagName !== void 0 ? tagName : createIdentifier("callback"), comment);
+            var node = createBaseJSDocTag(333 /* JSDocCallbackTag */, tagName !== null && tagName !== void 0 ? tagName : createIdentifier("callback"), comment);
             node.typeExpression = typeExpression;
             node.fullName = fullName;
             node.name = ts.getJSDocTypeAliasName(fullName);
@@ -24378,7 +24894,7 @@
         }
         // @api
         function createJSDocAugmentsTag(tagName, className, comment) {
-            var node = createBaseJSDocTag(318 /* JSDocAugmentsTag */, tagName !== null && tagName !== void 0 ? tagName : createIdentifier("augments"), comment);
+            var node = createBaseJSDocTag(323 /* JSDocAugmentsTag */, tagName !== null && tagName !== void 0 ? tagName : createIdentifier("augments"), comment);
             node.class = className;
             return node;
         }
@@ -24393,13 +24909,13 @@
         }
         // @api
         function createJSDocImplementsTag(tagName, className, comment) {
-            var node = createBaseJSDocTag(319 /* JSDocImplementsTag */, tagName !== null && tagName !== void 0 ? tagName : createIdentifier("implements"), comment);
+            var node = createBaseJSDocTag(324 /* JSDocImplementsTag */, tagName !== null && tagName !== void 0 ? tagName : createIdentifier("implements"), comment);
             node.class = className;
             return node;
         }
         // @api
         function createJSDocSeeTag(tagName, name, comment) {
-            var node = createBaseJSDocTag(336 /* JSDocSeeTag */, tagName !== null && tagName !== void 0 ? tagName : createIdentifier("see"), comment);
+            var node = createBaseJSDocTag(341 /* JSDocSeeTag */, tagName !== null && tagName !== void 0 ? tagName : createIdentifier("see"), comment);
             node.name = name;
             return node;
         }
@@ -24413,7 +24929,7 @@
         }
         // @api
         function createJSDocNameReference(name) {
-            var node = createBaseNode(303 /* JSDocNameReference */);
+            var node = createBaseNode(305 /* JSDocNameReference */);
             node.name = name;
             return node;
         }
@@ -24424,8 +24940,25 @@
                 : node;
         }
         // @api
+        function createJSDocMemberName(left, right) {
+            var node = createBaseNode(306 /* JSDocMemberName */);
+            node.left = left;
+            node.right = right;
+            node.transformFlags |=
+                propagateChildFlags(node.left) |
+                    propagateChildFlags(node.right);
+            return node;
+        }
+        // @api
+        function updateJSDocMemberName(node, left, right) {
+            return node.left !== left
+                || node.right !== right
+                ? update(createJSDocMemberName(left, right), node)
+                : node;
+        }
+        // @api
         function createJSDocLink(name, text) {
-            var node = createBaseNode(316 /* JSDocLink */);
+            var node = createBaseNode(319 /* JSDocLink */);
             node.name = name;
             node.text = text;
             return node;
@@ -24437,6 +24970,32 @@
                 : node;
         }
         // @api
+        function createJSDocLinkCode(name, text) {
+            var node = createBaseNode(320 /* JSDocLinkCode */);
+            node.name = name;
+            node.text = text;
+            return node;
+        }
+        // @api
+        function updateJSDocLinkCode(node, name, text) {
+            return node.name !== name
+                ? update(createJSDocLinkCode(name, text), node)
+                : node;
+        }
+        // @api
+        function createJSDocLinkPlain(name, text) {
+            var node = createBaseNode(321 /* JSDocLinkPlain */);
+            node.name = name;
+            node.text = text;
+            return node;
+        }
+        // @api
+        function updateJSDocLinkPlain(node, name, text) {
+            return node.name !== name
+                ? update(createJSDocLinkPlain(name, text), node)
+                : node;
+        }
+        // @api
         function updateJSDocImplementsTag(node, tagName, className, comment) {
             if (tagName === void 0) { tagName = getDefaultTagName(node); }
             return node.tagName !== tagName
@@ -24497,7 +25056,7 @@
         }
         // @api
         function createJSDocUnknownTag(tagName, comment) {
-            var node = createBaseJSDocTag(317 /* JSDocTag */, tagName, comment);
+            var node = createBaseJSDocTag(322 /* JSDocTag */, tagName, comment);
             return node;
         }
         // @api
@@ -24509,7 +25068,7 @@
         }
         // @api
         function createJSDocText(text) {
-            var node = createBaseNode(313 /* JSDocText */);
+            var node = createBaseNode(316 /* JSDocText */);
             node.text = text;
             return node;
         }
@@ -24521,7 +25080,7 @@
         }
         // @api
         function createJSDocComment(comment, tags) {
-            var node = createBaseNode(312 /* JSDocComment */);
+            var node = createBaseNode(315 /* JSDocComment */);
             node.comment = comment;
             node.tags = asNodeArray(tags);
             return node;
@@ -24538,7 +25097,7 @@
         //
         // @api
         function createJsxElement(openingElement, children, closingElement) {
-            var node = createBaseNode(274 /* JsxElement */);
+            var node = createBaseNode(276 /* JsxElement */);
             node.openingElement = openingElement;
             node.children = createNodeArray(children);
             node.closingElement = closingElement;
@@ -24559,7 +25118,7 @@
         }
         // @api
         function createJsxSelfClosingElement(tagName, typeArguments, attributes) {
-            var node = createBaseNode(275 /* JsxSelfClosingElement */);
+            var node = createBaseNode(277 /* JsxSelfClosingElement */);
             node.tagName = tagName;
             node.typeArguments = asNodeArray(typeArguments);
             node.attributes = attributes;
@@ -24583,7 +25142,7 @@
         }
         // @api
         function createJsxOpeningElement(tagName, typeArguments, attributes) {
-            var node = createBaseNode(276 /* JsxOpeningElement */);
+            var node = createBaseNode(278 /* JsxOpeningElement */);
             node.tagName = tagName;
             node.typeArguments = asNodeArray(typeArguments);
             node.attributes = attributes;
@@ -24607,7 +25166,7 @@
         }
         // @api
         function createJsxClosingElement(tagName) {
-            var node = createBaseNode(277 /* JsxClosingElement */);
+            var node = createBaseNode(279 /* JsxClosingElement */);
             node.tagName = tagName;
             node.transformFlags |=
                 propagateChildFlags(node.tagName) |
@@ -24622,7 +25181,7 @@
         }
         // @api
         function createJsxFragment(openingFragment, children, closingFragment) {
-            var node = createBaseNode(278 /* JsxFragment */);
+            var node = createBaseNode(280 /* JsxFragment */);
             node.openingFragment = openingFragment;
             node.children = createNodeArray(children);
             node.closingFragment = closingFragment;
@@ -24658,19 +25217,19 @@
         }
         // @api
         function createJsxOpeningFragment() {
-            var node = createBaseNode(279 /* JsxOpeningFragment */);
+            var node = createBaseNode(281 /* JsxOpeningFragment */);
             node.transformFlags |= 2 /* ContainsJsx */;
             return node;
         }
         // @api
         function createJsxJsxClosingFragment() {
-            var node = createBaseNode(280 /* JsxClosingFragment */);
+            var node = createBaseNode(282 /* JsxClosingFragment */);
             node.transformFlags |= 2 /* ContainsJsx */;
             return node;
         }
         // @api
         function createJsxAttribute(name, initializer) {
-            var node = createBaseNode(281 /* JsxAttribute */);
+            var node = createBaseNode(283 /* JsxAttribute */);
             node.name = name;
             node.initializer = initializer;
             node.transformFlags |=
@@ -24688,7 +25247,7 @@
         }
         // @api
         function createJsxAttributes(properties) {
-            var node = createBaseNode(282 /* JsxAttributes */);
+            var node = createBaseNode(284 /* JsxAttributes */);
             node.properties = createNodeArray(properties);
             node.transformFlags |=
                 propagateChildrenFlags(node.properties) |
@@ -24703,7 +25262,7 @@
         }
         // @api
         function createJsxSpreadAttribute(expression) {
-            var node = createBaseNode(283 /* JsxSpreadAttribute */);
+            var node = createBaseNode(285 /* JsxSpreadAttribute */);
             node.expression = expression;
             node.transformFlags |=
                 propagateChildFlags(node.expression) |
@@ -24718,7 +25277,7 @@
         }
         // @api
         function createJsxExpression(dotDotDotToken, expression) {
-            var node = createBaseNode(284 /* JsxExpression */);
+            var node = createBaseNode(286 /* JsxExpression */);
             node.dotDotDotToken = dotDotDotToken;
             node.expression = expression;
             node.transformFlags |=
@@ -24738,7 +25297,7 @@
         //
         // @api
         function createCaseClause(expression, statements) {
-            var node = createBaseNode(285 /* CaseClause */);
+            var node = createBaseNode(287 /* CaseClause */);
             node.expression = parenthesizerRules().parenthesizeExpressionForDisallowedComma(expression);
             node.statements = createNodeArray(statements);
             node.transformFlags |=
@@ -24755,7 +25314,7 @@
         }
         // @api
         function createDefaultClause(statements) {
-            var node = createBaseNode(286 /* DefaultClause */);
+            var node = createBaseNode(288 /* DefaultClause */);
             node.statements = createNodeArray(statements);
             node.transformFlags = propagateChildrenFlags(node.statements);
             return node;
@@ -24768,15 +25327,15 @@
         }
         // @api
         function createHeritageClause(token, types) {
-            var node = createBaseNode(287 /* HeritageClause */);
+            var node = createBaseNode(289 /* HeritageClause */);
             node.token = token;
             node.types = createNodeArray(types);
             node.transformFlags |= propagateChildrenFlags(node.types);
             switch (token) {
-                case 93 /* ExtendsKeyword */:
+                case 94 /* ExtendsKeyword */:
                     node.transformFlags |= 512 /* ContainsES2015 */;
                     break;
-                case 116 /* ImplementsKeyword */:
+                case 117 /* ImplementsKeyword */:
                     node.transformFlags |= 1 /* ContainsTypeScript */;
                     break;
                 default:
@@ -24792,7 +25351,7 @@
         }
         // @api
         function createCatchClause(variableDeclaration, block) {
-            var node = createBaseNode(288 /* CatchClause */);
+            var node = createBaseNode(290 /* CatchClause */);
             variableDeclaration = !ts.isString(variableDeclaration) ? variableDeclaration : createVariableDeclaration(variableDeclaration, 
             /*exclamationToken*/ undefined, 
             /*type*/ undefined, 
@@ -24818,7 +25377,7 @@
         //
         // @api
         function createPropertyAssignment(name, initializer) {
-            var node = createBaseNamedDeclaration(289 /* PropertyAssignment */, 
+            var node = createBaseNamedDeclaration(291 /* PropertyAssignment */, 
             /*decorators*/ undefined, 
             /*modifiers*/ undefined, name);
             node.initializer = parenthesizerRules().parenthesizeExpressionForDisallowedComma(initializer);
@@ -24848,7 +25407,7 @@
         }
         // @api
         function createShorthandPropertyAssignment(name, objectAssignmentInitializer) {
-            var node = createBaseNamedDeclaration(290 /* ShorthandPropertyAssignment */, 
+            var node = createBaseNamedDeclaration(292 /* ShorthandPropertyAssignment */, 
             /*decorators*/ undefined, 
             /*modifiers*/ undefined, name);
             node.objectAssignmentInitializer = objectAssignmentInitializer && parenthesizerRules().parenthesizeExpressionForDisallowedComma(objectAssignmentInitializer);
@@ -24880,7 +25439,7 @@
         }
         // @api
         function createSpreadAssignment(expression) {
-            var node = createBaseNode(291 /* SpreadAssignment */);
+            var node = createBaseNode(293 /* SpreadAssignment */);
             node.expression = parenthesizerRules().parenthesizeExpressionForDisallowedComma(expression);
             node.transformFlags |=
                 propagateChildFlags(node.expression) |
@@ -24899,7 +25458,7 @@
         //
         // @api
         function createEnumMember(name, initializer) {
-            var node = createBaseNode(292 /* EnumMember */);
+            var node = createBaseNode(294 /* EnumMember */);
             node.name = asName(name);
             node.initializer = initializer && parenthesizerRules().parenthesizeExpressionForDisallowedComma(initializer);
             node.transformFlags |=
@@ -24920,7 +25479,7 @@
         //
         // @api
         function createSourceFile(statements, endOfFileToken, flags) {
-            var node = baseFactory.createBaseSourceFileNode(298 /* SourceFile */);
+            var node = baseFactory.createBaseSourceFileNode(300 /* SourceFile */);
             node.statements = createNodeArray(statements);
             node.endOfFileToken = endOfFileToken;
             node.flags |= flags;
@@ -24937,7 +25496,7 @@
             return node;
         }
         function cloneSourceFileWithChanges(source, statements, isDeclarationFile, referencedFiles, typeReferences, hasNoDefaultLib, libReferences) {
-            var node = baseFactory.createBaseSourceFileNode(298 /* SourceFile */);
+            var node = baseFactory.createBaseSourceFileNode(300 /* SourceFile */);
             for (var p in source) {
                 if (p === "emitNode" || ts.hasProperty(node, p) || !ts.hasProperty(source, p))
                     continue;
@@ -24975,7 +25534,7 @@
         // @api
         function createBundle(sourceFiles, prepends) {
             if (prepends === void 0) { prepends = ts.emptyArray; }
-            var node = createBaseNode(299 /* Bundle */);
+            var node = createBaseNode(301 /* Bundle */);
             node.prepends = prepends;
             node.sourceFiles = sourceFiles;
             return node;
@@ -24990,7 +25549,7 @@
         }
         // @api
         function createUnparsedSource(prologues, syntheticReferences, texts) {
-            var node = createBaseNode(300 /* UnparsedSource */);
+            var node = createBaseNode(302 /* UnparsedSource */);
             node.prologues = prologues;
             node.syntheticReferences = syntheticReferences;
             node.texts = texts;
@@ -25008,28 +25567,28 @@
         }
         // @api
         function createUnparsedPrologue(data) {
-            return createBaseUnparsedNode(293 /* UnparsedPrologue */, data);
+            return createBaseUnparsedNode(295 /* UnparsedPrologue */, data);
         }
         // @api
         function createUnparsedPrepend(data, texts) {
-            var node = createBaseUnparsedNode(294 /* UnparsedPrepend */, data);
+            var node = createBaseUnparsedNode(296 /* UnparsedPrepend */, data);
             node.texts = texts;
             return node;
         }
         // @api
         function createUnparsedTextLike(data, internal) {
-            return createBaseUnparsedNode(internal ? 296 /* UnparsedInternalText */ : 295 /* UnparsedText */, data);
+            return createBaseUnparsedNode(internal ? 298 /* UnparsedInternalText */ : 297 /* UnparsedText */, data);
         }
         // @api
         function createUnparsedSyntheticReference(section) {
-            var node = createBaseNode(297 /* UnparsedSyntheticReference */);
+            var node = createBaseNode(299 /* UnparsedSyntheticReference */);
             node.data = section.data;
             node.section = section;
             return node;
         }
         // @api
         function createInputFiles() {
-            var node = createBaseNode(301 /* InputFiles */);
+            var node = createBaseNode(303 /* InputFiles */);
             node.javascriptText = "";
             node.declarationText = "";
             return node;
@@ -25040,7 +25599,7 @@
         // @api
         function createSyntheticExpression(type, isSpread, tupleNameSource) {
             if (isSpread === void 0) { isSpread = false; }
-            var node = createBaseNode(228 /* SyntheticExpression */);
+            var node = createBaseNode(230 /* SyntheticExpression */);
             node.type = type;
             node.isSpread = isSpread;
             node.tupleNameSource = tupleNameSource;
@@ -25048,7 +25607,7 @@
         }
         // @api
         function createSyntaxList(children) {
-            var node = createBaseNode(338 /* SyntaxList */);
+            var node = createBaseNode(343 /* SyntaxList */);
             node._children = children;
             return node;
         }
@@ -25063,7 +25622,7 @@
          */
         // @api
         function createNotEmittedStatement(original) {
-            var node = createBaseNode(339 /* NotEmittedStatement */);
+            var node = createBaseNode(344 /* NotEmittedStatement */);
             node.original = original;
             ts.setTextRange(node, original);
             return node;
@@ -25077,7 +25636,7 @@
          */
         // @api
         function createPartiallyEmittedExpression(expression, original) {
-            var node = createBaseNode(340 /* PartiallyEmittedExpression */);
+            var node = createBaseNode(345 /* PartiallyEmittedExpression */);
             node.expression = expression;
             node.original = original;
             node.transformFlags |=
@@ -25105,7 +25664,7 @@
         }
         // @api
         function createCommaListExpression(elements) {
-            var node = createBaseNode(341 /* CommaListExpression */);
+            var node = createBaseNode(346 /* CommaListExpression */);
             node.elements = createNodeArray(ts.sameFlatMap(elements, flattenCommaElements));
             node.transformFlags |= propagateChildrenFlags(node.elements);
             return node;
@@ -25122,7 +25681,7 @@
          */
         // @api
         function createEndOfDeclarationMarker(original) {
-            var node = createBaseNode(343 /* EndOfDeclarationMarker */);
+            var node = createBaseNode(348 /* EndOfDeclarationMarker */);
             node.emitNode = {};
             node.original = original;
             return node;
@@ -25133,14 +25692,14 @@
          */
         // @api
         function createMergeDeclarationMarker(original) {
-            var node = createBaseNode(342 /* MergeDeclarationMarker */);
+            var node = createBaseNode(347 /* MergeDeclarationMarker */);
             node.emitNode = {};
             node.original = original;
             return node;
         }
         // @api
         function createSyntheticReferenceExpression(expression, thisArg) {
-            var node = createBaseNode(344 /* SyntheticReferenceExpression */);
+            var node = createBaseNode(349 /* SyntheticReferenceExpression */);
             node.expression = expression;
             node.thisArg = thisArg;
             node.transformFlags |=
@@ -25162,9 +25721,9 @@
             if (node === undefined) {
                 return node;
             }
-            var clone = ts.isSourceFile(node) ? baseFactory.createBaseSourceFileNode(298 /* SourceFile */) :
-                ts.isIdentifier(node) ? baseFactory.createBaseIdentifierNode(78 /* Identifier */) :
-                    ts.isPrivateIdentifier(node) ? baseFactory.createBasePrivateIdentifierNode(79 /* PrivateIdentifier */) :
+            var clone = ts.isSourceFile(node) ? baseFactory.createBaseSourceFileNode(300 /* SourceFile */) :
+                ts.isIdentifier(node) ? baseFactory.createBaseIdentifierNode(79 /* Identifier */) :
+                    ts.isPrivateIdentifier(node) ? baseFactory.createBasePrivateIdentifierNode(80 /* PrivateIdentifier */) :
                         !ts.isNodeKind(node.kind) ? baseFactory.createBaseTokenNode(node.kind) :
                             baseFactory.createBaseNode(node.kind);
             clone.flags |= (node.flags & ~8 /* Synthesized */);
@@ -25225,14 +25784,20 @@
                 : factory.createStrictEquality(createTypeOfExpression(value), createStringLiteral(tag));
         }
         function createMethodCall(object, methodName, argumentsList) {
+            // Preserve the optionality of `object`.
+            if (ts.isCallChain(object)) {
+                return createCallChain(createPropertyAccessChain(object, /*questionDotToken*/ undefined, methodName), 
+                /*questionDotToken*/ undefined, 
+                /*typeArguments*/ undefined, argumentsList);
+            }
             return createCallExpression(createPropertyAccessExpression(object, methodName), 
             /*typeArguments*/ undefined, argumentsList);
         }
         function createFunctionBindCall(target, thisArg, argumentsList) {
-            return createMethodCall(target, "bind", __spreadArray([thisArg], argumentsList));
+            return createMethodCall(target, "bind", __spreadArray([thisArg], argumentsList, true));
         }
         function createFunctionCallCall(target, thisArg, argumentsList) {
-            return createMethodCall(target, "call", __spreadArray([thisArg], argumentsList));
+            return createMethodCall(target, "call", __spreadArray([thisArg], argumentsList, true));
         }
         function createFunctionApplyCall(target, thisArg, argumentsExpression) {
             return createMethodCall(target, "apply", [thisArg, argumentsExpression]);
@@ -25249,6 +25814,12 @@
         function createObjectDefinePropertyCall(target, propertyName, attributes) {
             return createGlobalMethodCall("Object", "defineProperty", [target, asExpression(propertyName), attributes]);
         }
+        function createReflectGetCall(target, propertyKey, receiver) {
+            return createGlobalMethodCall("Reflect", "get", receiver ? [target, propertyKey, receiver] : [target, propertyKey]);
+        }
+        function createReflectSetCall(target, propertyKey, value, receiver) {
+            return createGlobalMethodCall("Reflect", "set", receiver ? [target, propertyKey, value, receiver] : [target, propertyKey, value]);
+        }
         function tryAddPropertyAssignment(properties, propertyName, expression) {
             if (expression) {
                 properties.push(createPropertyAssignment(propertyName, expression));
@@ -25269,11 +25840,11 @@
         }
         function updateOuterExpression(outerExpression, expression) {
             switch (outerExpression.kind) {
-                case 208 /* ParenthesizedExpression */: return updateParenthesizedExpression(outerExpression, expression);
-                case 207 /* TypeAssertionExpression */: return updateTypeAssertion(outerExpression, outerExpression.type, expression);
-                case 225 /* AsExpression */: return updateAsExpression(outerExpression, expression, outerExpression.type);
-                case 226 /* NonNullExpression */: return updateNonNullExpression(outerExpression, expression);
-                case 340 /* PartiallyEmittedExpression */: return updatePartiallyEmittedExpression(outerExpression, expression);
+                case 210 /* ParenthesizedExpression */: return updateParenthesizedExpression(outerExpression, expression);
+                case 209 /* TypeAssertionExpression */: return updateTypeAssertion(outerExpression, outerExpression.type, expression);
+                case 227 /* AsExpression */: return updateAsExpression(outerExpression, expression, outerExpression.type);
+                case 228 /* NonNullExpression */: return updateNonNullExpression(outerExpression, expression);
+                case 345 /* PartiallyEmittedExpression */: return updatePartiallyEmittedExpression(outerExpression, expression);
             }
         }
         /**
@@ -25320,20 +25891,20 @@
         function shouldBeCapturedInTempVariable(node, cacheIdentifiers) {
             var target = ts.skipParentheses(node);
             switch (target.kind) {
-                case 78 /* Identifier */:
+                case 79 /* Identifier */:
                     return cacheIdentifiers;
-                case 107 /* ThisKeyword */:
+                case 108 /* ThisKeyword */:
                 case 8 /* NumericLiteral */:
                 case 9 /* BigIntLiteral */:
                 case 10 /* StringLiteral */:
                     return false;
-                case 200 /* ArrayLiteralExpression */:
+                case 202 /* ArrayLiteralExpression */:
                     var elements = target.elements;
                     if (elements.length === 0) {
                         return false;
                     }
                     return true;
-                case 201 /* ObjectLiteralExpression */:
+                case 203 /* ObjectLiteralExpression */:
                     return target.properties.length > 0;
                 default:
                     return true;
@@ -25389,6 +25960,23 @@
             }
             return { target: target, thisArg: thisArg };
         }
+        function createAssignmentTargetWrapper(paramName, expression) {
+            return createPropertyAccessExpression(
+            // Explicit parens required because of v8 regression (https://bugs.chromium.org/p/v8/issues/detail?id=9560)
+            createParenthesizedExpression(createObjectLiteralExpression([
+                createSetAccessorDeclaration(
+                /*decorators*/ undefined, 
+                /*modifiers*/ undefined, "value", [createParameterDeclaration(
+                    /*decorators*/ undefined, 
+                    /*modifiers*/ undefined, 
+                    /*dotDotDotToken*/ undefined, paramName, 
+                    /*questionToken*/ undefined, 
+                    /*type*/ undefined, 
+                    /*initializer*/ undefined)], createBlock([
+                    createExpressionStatement(expression)
+                ]))
+            ])), "value");
+        }
         function inlineExpressions(expressions) {
             // Avoid deeply nested comma expressions as traversing them during emit can result in "Maximum call
             // stack size exceeded" errors.
@@ -25569,7 +26157,7 @@
         function ensureUseStrict(statements) {
             var foundUseStrict = ts.findUseStrictPrologue(statements);
             if (!foundUseStrict) {
-                return ts.setTextRange(createNodeArray(__spreadArray([createUseStrictPrologue()], statements)), statements);
+                return ts.setTextRange(createNodeArray(__spreadArray([createUseStrictPrologue()], statements, true)), statements);
             }
             return statements;
         }
@@ -25636,20 +26224,20 @@
             var left = ts.isNodeArray(statements) ? statements.slice() : statements;
             // splice other custom prologues from right into left
             if (rightCustomPrologueEnd > rightHoistedVariablesEnd) {
-                left.splice.apply(left, __spreadArray([leftHoistedVariablesEnd, 0], declarations.slice(rightHoistedVariablesEnd, rightCustomPrologueEnd)));
+                left.splice.apply(left, __spreadArray([leftHoistedVariablesEnd, 0], declarations.slice(rightHoistedVariablesEnd, rightCustomPrologueEnd), false));
             }
             // splice hoisted variables from right into left
             if (rightHoistedVariablesEnd > rightHoistedFunctionsEnd) {
-                left.splice.apply(left, __spreadArray([leftHoistedFunctionsEnd, 0], declarations.slice(rightHoistedFunctionsEnd, rightHoistedVariablesEnd)));
+                left.splice.apply(left, __spreadArray([leftHoistedFunctionsEnd, 0], declarations.slice(rightHoistedFunctionsEnd, rightHoistedVariablesEnd), false));
             }
             // splice hoisted functions from right into left
             if (rightHoistedFunctionsEnd > rightStandardPrologueEnd) {
-                left.splice.apply(left, __spreadArray([leftStandardPrologueEnd, 0], declarations.slice(rightStandardPrologueEnd, rightHoistedFunctionsEnd)));
+                left.splice.apply(left, __spreadArray([leftStandardPrologueEnd, 0], declarations.slice(rightStandardPrologueEnd, rightHoistedFunctionsEnd), false));
             }
             // splice standard prologues from right into left (that are not already in left)
             if (rightStandardPrologueEnd > 0) {
                 if (leftStandardPrologueEnd === 0) {
-                    left.splice.apply(left, __spreadArray([0, 0], declarations.slice(0, rightStandardPrologueEnd)));
+                    left.splice.apply(left, __spreadArray([0, 0], declarations.slice(0, rightStandardPrologueEnd), false));
                 }
                 else {
                     var leftPrologues = new ts.Map();
@@ -25736,24 +26324,24 @@
     }
     function getDefaultTagNameForKind(kind) {
         switch (kind) {
-            case 333 /* JSDocTypeTag */: return "type";
-            case 331 /* JSDocReturnTag */: return "returns";
-            case 332 /* JSDocThisTag */: return "this";
-            case 329 /* JSDocEnumTag */: return "enum";
-            case 320 /* JSDocAuthorTag */: return "author";
-            case 322 /* JSDocClassTag */: return "class";
-            case 323 /* JSDocPublicTag */: return "public";
-            case 324 /* JSDocPrivateTag */: return "private";
-            case 325 /* JSDocProtectedTag */: return "protected";
-            case 326 /* JSDocReadonlyTag */: return "readonly";
-            case 327 /* JSDocOverrideTag */: return "override";
-            case 334 /* JSDocTemplateTag */: return "template";
-            case 335 /* JSDocTypedefTag */: return "typedef";
-            case 330 /* JSDocParameterTag */: return "param";
-            case 337 /* JSDocPropertyTag */: return "prop";
-            case 328 /* JSDocCallbackTag */: return "callback";
-            case 318 /* JSDocAugmentsTag */: return "augments";
-            case 319 /* JSDocImplementsTag */: return "implements";
+            case 338 /* JSDocTypeTag */: return "type";
+            case 336 /* JSDocReturnTag */: return "returns";
+            case 337 /* JSDocThisTag */: return "this";
+            case 334 /* JSDocEnumTag */: return "enum";
+            case 325 /* JSDocAuthorTag */: return "author";
+            case 327 /* JSDocClassTag */: return "class";
+            case 328 /* JSDocPublicTag */: return "public";
+            case 329 /* JSDocPrivateTag */: return "private";
+            case 330 /* JSDocProtectedTag */: return "protected";
+            case 331 /* JSDocReadonlyTag */: return "readonly";
+            case 332 /* JSDocOverrideTag */: return "override";
+            case 339 /* JSDocTemplateTag */: return "template";
+            case 340 /* JSDocTypedefTag */: return "typedef";
+            case 335 /* JSDocParameterTag */: return "param";
+            case 342 /* JSDocPropertyTag */: return "prop";
+            case 333 /* JSDocCallbackTag */: return "callback";
+            case 323 /* JSDocAugmentsTag */: return "augments";
+            case 324 /* JSDocImplementsTag */: return "implements";
             default:
                 return ts.Debug.fail("Unsupported kind: " + ts.Debug.formatSyntaxKind(kind));
         }
@@ -25781,7 +26369,7 @@
                 break;
         }
         var token = rawTextScanner.scan();
-        if (token === 23 /* CloseBracketToken */) {
+        if (token === 19 /* CloseBraceToken */) {
             token = rawTextScanner.reScanTemplateToken(/*isTaggedTemplate*/ false);
         }
         if (rawTextScanner.isUnterminated()) {
@@ -25809,7 +26397,7 @@
         return propagateChildFlags(node) & ~16777216 /* ContainsPossibleTopLevelAwait */;
     }
     function propagatePropertyNameFlagsOfChild(node, transformFlags) {
-        return transformFlags | (node.transformFlags & 8192 /* PropertyNamePropagatingFlags */);
+        return transformFlags | (node.transformFlags & 33562624 /* PropertyNamePropagatingFlags */);
     }
     function propagateChildFlags(child) {
         if (!child)
@@ -25833,69 +26421,69 @@
      */
     /* @internal */
     function getTransformFlagsSubtreeExclusions(kind) {
-        if (kind >= 173 /* FirstTypeNode */ && kind <= 196 /* LastTypeNode */) {
+        if (kind >= 175 /* FirstTypeNode */ && kind <= 198 /* LastTypeNode */) {
             return -2 /* TypeExcludes */;
         }
         switch (kind) {
-            case 204 /* CallExpression */:
-            case 205 /* NewExpression */:
-            case 200 /* ArrayLiteralExpression */:
+            case 206 /* CallExpression */:
+            case 207 /* NewExpression */:
+            case 202 /* ArrayLiteralExpression */:
                 return 536887296 /* ArrayLiteralOrCallOrNewExcludes */;
-            case 257 /* ModuleDeclaration */:
-                return 555888640 /* ModuleExcludes */;
-            case 161 /* Parameter */:
+            case 259 /* ModuleDeclaration */:
+                return 589443072 /* ModuleExcludes */;
+            case 162 /* Parameter */:
                 return 536870912 /* ParameterExcludes */;
-            case 210 /* ArrowFunction */:
+            case 212 /* ArrowFunction */:
                 return 557748224 /* ArrowFunctionExcludes */;
-            case 209 /* FunctionExpression */:
-            case 252 /* FunctionDeclaration */:
-                return 557756416 /* FunctionExcludes */;
-            case 251 /* VariableDeclarationList */:
+            case 211 /* FunctionExpression */:
+            case 254 /* FunctionDeclaration */:
+                return 591310848 /* FunctionExcludes */;
+            case 253 /* VariableDeclarationList */:
                 return 537165824 /* VariableDeclarationListExcludes */;
-            case 253 /* ClassDeclaration */:
-            case 222 /* ClassExpression */:
+            case 255 /* ClassDeclaration */:
+            case 224 /* ClassExpression */:
                 return 536940544 /* ClassExcludes */;
-            case 167 /* Constructor */:
-                return 557752320 /* ConstructorExcludes */;
-            case 164 /* PropertyDeclaration */:
-                return 536879104 /* PropertyExcludes */;
-            case 166 /* MethodDeclaration */:
-            case 168 /* GetAccessor */:
-            case 169 /* SetAccessor */:
-                return 540975104 /* MethodOrAccessorExcludes */;
-            case 128 /* AnyKeyword */:
-            case 144 /* NumberKeyword */:
-            case 155 /* BigIntKeyword */:
-            case 141 /* NeverKeyword */:
-            case 147 /* StringKeyword */:
-            case 145 /* ObjectKeyword */:
-            case 131 /* BooleanKeyword */:
-            case 148 /* SymbolKeyword */:
-            case 113 /* VoidKeyword */:
-            case 160 /* TypeParameter */:
-            case 163 /* PropertySignature */:
-            case 165 /* MethodSignature */:
-            case 170 /* CallSignature */:
-            case 171 /* ConstructSignature */:
-            case 172 /* IndexSignature */:
-            case 254 /* InterfaceDeclaration */:
-            case 255 /* TypeAliasDeclaration */:
+            case 169 /* Constructor */:
+                return 591306752 /* ConstructorExcludes */;
+            case 165 /* PropertyDeclaration */:
+                return 570433536 /* PropertyExcludes */;
+            case 167 /* MethodDeclaration */:
+            case 170 /* GetAccessor */:
+            case 171 /* SetAccessor */:
+                return 574529536 /* MethodOrAccessorExcludes */;
+            case 129 /* AnyKeyword */:
+            case 145 /* NumberKeyword */:
+            case 156 /* BigIntKeyword */:
+            case 142 /* NeverKeyword */:
+            case 148 /* StringKeyword */:
+            case 146 /* ObjectKeyword */:
+            case 132 /* BooleanKeyword */:
+            case 149 /* SymbolKeyword */:
+            case 114 /* VoidKeyword */:
+            case 161 /* TypeParameter */:
+            case 164 /* PropertySignature */:
+            case 166 /* MethodSignature */:
+            case 172 /* CallSignature */:
+            case 173 /* ConstructSignature */:
+            case 174 /* IndexSignature */:
+            case 256 /* InterfaceDeclaration */:
+            case 257 /* TypeAliasDeclaration */:
                 return -2 /* TypeExcludes */;
-            case 201 /* ObjectLiteralExpression */:
+            case 203 /* ObjectLiteralExpression */:
                 return 536973312 /* ObjectLiteralExcludes */;
-            case 288 /* CatchClause */:
+            case 290 /* CatchClause */:
                 return 536903680 /* CatchClauseExcludes */;
-            case 197 /* ObjectBindingPattern */:
-            case 198 /* ArrayBindingPattern */:
+            case 199 /* ObjectBindingPattern */:
+            case 200 /* ArrayBindingPattern */:
                 return 536887296 /* BindingPatternExcludes */;
-            case 207 /* TypeAssertionExpression */:
-            case 225 /* AsExpression */:
-            case 340 /* PartiallyEmittedExpression */:
-            case 208 /* ParenthesizedExpression */:
-            case 105 /* SuperKeyword */:
+            case 209 /* TypeAssertionExpression */:
+            case 227 /* AsExpression */:
+            case 345 /* PartiallyEmittedExpression */:
+            case 210 /* ParenthesizedExpression */:
+            case 106 /* SuperKeyword */:
                 return 536870912 /* OuterExpressionExcludes */;
-            case 202 /* PropertyAccessExpression */:
-            case 203 /* ElementAccessExpression */:
+            case 204 /* PropertyAccessExpression */:
+            case 205 /* ElementAccessExpression */:
                 return 536870912 /* PropertyAccessExcludes */;
             default:
                 return 536870912 /* NodeExcludes */;
@@ -26152,7 +26740,7 @@
         if (trailingComments)
             destEmitNode.trailingComments = ts.addRange(trailingComments.slice(), destEmitNode.trailingComments);
         if (flags)
-            destEmitNode.flags = flags;
+            destEmitNode.flags = flags & ~268435456 /* Immutable */;
         if (commentRange)
             destEmitNode.commentRange = commentRange;
         if (sourceMapRange)
@@ -26194,7 +26782,7 @@
                 // To avoid holding onto transformation artifacts, we keep track of any
                 // parse tree node we are annotating. This allows us to clean them up after
                 // all transformations have completed.
-                if (node.kind === 298 /* SourceFile */) {
+                if (node.kind === 300 /* SourceFile */) {
                     return node.emitNode = { annotatedNodes: [node] };
                 }
                 var sourceFile = (_a = ts.getSourceFileOfNode(ts.getParseTreeNode(ts.getSourceFileOfNode(node)))) !== null && _a !== void 0 ? _a : ts.Debug.fail("Could not determine parsed source file.");
@@ -26202,6 +26790,9 @@
             }
             node.emitNode = {};
         }
+        else {
+            ts.Debug.assert(!(node.emitNode.flags & 268435456 /* Immutable */), "Invalid attempt to mutate an immutable node.");
+        }
         return node.emitNode;
     }
     ts.getOrCreateEmitNode = getOrCreateEmitNode;
@@ -26459,6 +27050,8 @@
 (function (ts) {
     function createEmitHelperFactory(context) {
         var factory = context.factory;
+        var immutableTrue = ts.memoize(function () { return ts.setEmitFlags(factory.createTrue(), 268435456 /* Immutable */); });
+        var immutableFalse = ts.memoize(function () { return ts.setEmitFlags(factory.createFalse(), 268435456 /* Immutable */); });
         return {
             getUnscopedHelperName: getUnscopedHelperName,
             // TypeScript Helpers
@@ -26629,10 +27222,10 @@
             return factory.createCallExpression(getUnscopedHelperName("__makeTemplateObject"), 
             /*typeArguments*/ undefined, [cooked, raw]);
         }
-        function createSpreadArrayHelper(to, from) {
+        function createSpreadArrayHelper(to, from, packFrom) {
             context.requestEmitHelper(ts.spreadArrayHelper);
             return factory.createCallExpression(getUnscopedHelperName("__spreadArray"), 
-            /*typeArguments*/ undefined, [to, from]);
+            /*typeArguments*/ undefined, [to, from, packFrom ? immutableTrue() : immutableFalse()]);
         }
         // ES2015 Destructuring Helpers
         function createValuesHelper(expression) {
@@ -26657,7 +27250,7 @@
         function createCreateBindingHelper(module, inputName, outputName) {
             context.requestEmitHelper(ts.createBindingHelper);
             return factory.createCallExpression(getUnscopedHelperName("__createBinding"), 
-            /*typeArguments*/ undefined, __spreadArray([factory.createIdentifier("exports"), module, inputName], (outputName ? [outputName] : [])));
+            /*typeArguments*/ undefined, __spreadArray([factory.createIdentifier("exports"), module, inputName], (outputName ? [outputName] : []), true));
         }
         function createImportStarHelper(expression) {
             context.requestEmitHelper(ts.importStarHelper);
@@ -26834,7 +27427,7 @@
         name: "typescript:spreadArray",
         importName: "__spreadArray",
         scoped: false,
-        text: "\n            var __spreadArray = (this && this.__spreadArray) || function (to, from) {\n                for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)\n                    to[j] = from[i];\n                return to;\n            };"
+        text: "\n            var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {\n                if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n                    if (ar || !(i in from)) {\n                        if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n                        ar[i] = from[i];\n                    }\n                }\n                return to.concat(ar || Array.prototype.slice.call(from));\n            };"
     };
     // ES2015 Destructuring Helpers
     ts.valuesHelper = {
@@ -27102,7 +27695,7 @@
     function isCallToHelper(firstSegment, helperName) {
         return ts.isCallExpression(firstSegment)
             && ts.isIdentifier(firstSegment.expression)
-            && (ts.getEmitFlags(firstSegment.expression) & 4096 /* HelperName */)
+            && (ts.getEmitFlags(firstSegment.expression) & 4096 /* HelperName */) !== 0
             && firstSegment.expression.escapedText === helperName;
     }
     ts.isCallToHelper = isCallToHelper;
@@ -27196,639 +27789,648 @@
     ts.isEqualsGreaterThanToken = isEqualsGreaterThanToken;
     // Identifiers
     function isIdentifier(node) {
-        return node.kind === 78 /* Identifier */;
+        return node.kind === 79 /* Identifier */;
     }
     ts.isIdentifier = isIdentifier;
     function isPrivateIdentifier(node) {
-        return node.kind === 79 /* PrivateIdentifier */;
+        return node.kind === 80 /* PrivateIdentifier */;
     }
     ts.isPrivateIdentifier = isPrivateIdentifier;
     // Reserved Words
     /* @internal */
     function isExportModifier(node) {
-        return node.kind === 92 /* ExportKeyword */;
+        return node.kind === 93 /* ExportKeyword */;
     }
     ts.isExportModifier = isExportModifier;
     /* @internal */
     function isAsyncModifier(node) {
-        return node.kind === 129 /* AsyncKeyword */;
+        return node.kind === 130 /* AsyncKeyword */;
     }
     ts.isAsyncModifier = isAsyncModifier;
     /* @internal */
     function isAssertsKeyword(node) {
-        return node.kind === 127 /* AssertsKeyword */;
+        return node.kind === 128 /* AssertsKeyword */;
     }
     ts.isAssertsKeyword = isAssertsKeyword;
     /* @internal */
     function isAwaitKeyword(node) {
-        return node.kind === 130 /* AwaitKeyword */;
+        return node.kind === 131 /* AwaitKeyword */;
     }
     ts.isAwaitKeyword = isAwaitKeyword;
     /* @internal */
     function isReadonlyKeyword(node) {
-        return node.kind === 142 /* ReadonlyKeyword */;
+        return node.kind === 143 /* ReadonlyKeyword */;
     }
     ts.isReadonlyKeyword = isReadonlyKeyword;
     /* @internal */
     function isStaticModifier(node) {
-        return node.kind === 123 /* StaticKeyword */;
+        return node.kind === 124 /* StaticKeyword */;
     }
     ts.isStaticModifier = isStaticModifier;
+    /* @internal */
+    function isAbstractModifier(node) {
+        return node.kind === 126 /* AbstractKeyword */;
+    }
+    ts.isAbstractModifier = isAbstractModifier;
     /*@internal*/
     function isSuperKeyword(node) {
-        return node.kind === 105 /* SuperKeyword */;
+        return node.kind === 106 /* SuperKeyword */;
     }
     ts.isSuperKeyword = isSuperKeyword;
     /*@internal*/
     function isImportKeyword(node) {
-        return node.kind === 99 /* ImportKeyword */;
+        return node.kind === 100 /* ImportKeyword */;
     }
     ts.isImportKeyword = isImportKeyword;
     // Names
     function isQualifiedName(node) {
-        return node.kind === 158 /* QualifiedName */;
+        return node.kind === 159 /* QualifiedName */;
     }
     ts.isQualifiedName = isQualifiedName;
     function isComputedPropertyName(node) {
-        return node.kind === 159 /* ComputedPropertyName */;
+        return node.kind === 160 /* ComputedPropertyName */;
     }
     ts.isComputedPropertyName = isComputedPropertyName;
     // Signature elements
     function isTypeParameterDeclaration(node) {
-        return node.kind === 160 /* TypeParameter */;
+        return node.kind === 161 /* TypeParameter */;
     }
     ts.isTypeParameterDeclaration = isTypeParameterDeclaration;
     // TODO(rbuckton): Rename to 'isParameterDeclaration'
     function isParameter(node) {
-        return node.kind === 161 /* Parameter */;
+        return node.kind === 162 /* Parameter */;
     }
     ts.isParameter = isParameter;
     function isDecorator(node) {
-        return node.kind === 162 /* Decorator */;
+        return node.kind === 163 /* Decorator */;
     }
     ts.isDecorator = isDecorator;
     // TypeMember
     function isPropertySignature(node) {
-        return node.kind === 163 /* PropertySignature */;
+        return node.kind === 164 /* PropertySignature */;
     }
     ts.isPropertySignature = isPropertySignature;
     function isPropertyDeclaration(node) {
-        return node.kind === 164 /* PropertyDeclaration */;
+        return node.kind === 165 /* PropertyDeclaration */;
     }
     ts.isPropertyDeclaration = isPropertyDeclaration;
     function isMethodSignature(node) {
-        return node.kind === 165 /* MethodSignature */;
+        return node.kind === 166 /* MethodSignature */;
     }
     ts.isMethodSignature = isMethodSignature;
     function isMethodDeclaration(node) {
-        return node.kind === 166 /* MethodDeclaration */;
+        return node.kind === 167 /* MethodDeclaration */;
     }
     ts.isMethodDeclaration = isMethodDeclaration;
+    function isClassStaticBlockDeclaration(node) {
+        return node.kind === 168 /* ClassStaticBlockDeclaration */;
+    }
+    ts.isClassStaticBlockDeclaration = isClassStaticBlockDeclaration;
     function isConstructorDeclaration(node) {
-        return node.kind === 167 /* Constructor */;
+        return node.kind === 169 /* Constructor */;
     }
     ts.isConstructorDeclaration = isConstructorDeclaration;
     function isGetAccessorDeclaration(node) {
-        return node.kind === 168 /* GetAccessor */;
+        return node.kind === 170 /* GetAccessor */;
     }
     ts.isGetAccessorDeclaration = isGetAccessorDeclaration;
     function isSetAccessorDeclaration(node) {
-        return node.kind === 169 /* SetAccessor */;
+        return node.kind === 171 /* SetAccessor */;
     }
     ts.isSetAccessorDeclaration = isSetAccessorDeclaration;
     function isCallSignatureDeclaration(node) {
-        return node.kind === 170 /* CallSignature */;
+        return node.kind === 172 /* CallSignature */;
     }
     ts.isCallSignatureDeclaration = isCallSignatureDeclaration;
     function isConstructSignatureDeclaration(node) {
-        return node.kind === 171 /* ConstructSignature */;
+        return node.kind === 173 /* ConstructSignature */;
     }
     ts.isConstructSignatureDeclaration = isConstructSignatureDeclaration;
     function isIndexSignatureDeclaration(node) {
-        return node.kind === 172 /* IndexSignature */;
+        return node.kind === 174 /* IndexSignature */;
     }
     ts.isIndexSignatureDeclaration = isIndexSignatureDeclaration;
     // Type
     function isTypePredicateNode(node) {
-        return node.kind === 173 /* TypePredicate */;
+        return node.kind === 175 /* TypePredicate */;
     }
     ts.isTypePredicateNode = isTypePredicateNode;
     function isTypeReferenceNode(node) {
-        return node.kind === 174 /* TypeReference */;
+        return node.kind === 176 /* TypeReference */;
     }
     ts.isTypeReferenceNode = isTypeReferenceNode;
     function isFunctionTypeNode(node) {
-        return node.kind === 175 /* FunctionType */;
+        return node.kind === 177 /* FunctionType */;
     }
     ts.isFunctionTypeNode = isFunctionTypeNode;
     function isConstructorTypeNode(node) {
-        return node.kind === 176 /* ConstructorType */;
+        return node.kind === 178 /* ConstructorType */;
     }
     ts.isConstructorTypeNode = isConstructorTypeNode;
     function isTypeQueryNode(node) {
-        return node.kind === 177 /* TypeQuery */;
+        return node.kind === 179 /* TypeQuery */;
     }
     ts.isTypeQueryNode = isTypeQueryNode;
     function isTypeLiteralNode(node) {
-        return node.kind === 178 /* TypeLiteral */;
+        return node.kind === 180 /* TypeLiteral */;
     }
     ts.isTypeLiteralNode = isTypeLiteralNode;
     function isArrayTypeNode(node) {
-        return node.kind === 179 /* ArrayType */;
+        return node.kind === 181 /* ArrayType */;
     }
     ts.isArrayTypeNode = isArrayTypeNode;
     function isTupleTypeNode(node) {
-        return node.kind === 180 /* TupleType */;
+        return node.kind === 182 /* TupleType */;
     }
     ts.isTupleTypeNode = isTupleTypeNode;
     function isNamedTupleMember(node) {
-        return node.kind === 193 /* NamedTupleMember */;
+        return node.kind === 195 /* NamedTupleMember */;
     }
     ts.isNamedTupleMember = isNamedTupleMember;
     function isOptionalTypeNode(node) {
-        return node.kind === 181 /* OptionalType */;
+        return node.kind === 183 /* OptionalType */;
     }
     ts.isOptionalTypeNode = isOptionalTypeNode;
     function isRestTypeNode(node) {
-        return node.kind === 182 /* RestType */;
+        return node.kind === 184 /* RestType */;
     }
     ts.isRestTypeNode = isRestTypeNode;
     function isUnionTypeNode(node) {
-        return node.kind === 183 /* UnionType */;
+        return node.kind === 185 /* UnionType */;
     }
     ts.isUnionTypeNode = isUnionTypeNode;
     function isIntersectionTypeNode(node) {
-        return node.kind === 184 /* IntersectionType */;
+        return node.kind === 186 /* IntersectionType */;
     }
     ts.isIntersectionTypeNode = isIntersectionTypeNode;
     function isConditionalTypeNode(node) {
-        return node.kind === 185 /* ConditionalType */;
+        return node.kind === 187 /* ConditionalType */;
     }
     ts.isConditionalTypeNode = isConditionalTypeNode;
     function isInferTypeNode(node) {
-        return node.kind === 186 /* InferType */;
+        return node.kind === 188 /* InferType */;
     }
     ts.isInferTypeNode = isInferTypeNode;
     function isParenthesizedTypeNode(node) {
-        return node.kind === 187 /* ParenthesizedType */;
+        return node.kind === 189 /* ParenthesizedType */;
     }
     ts.isParenthesizedTypeNode = isParenthesizedTypeNode;
     function isThisTypeNode(node) {
-        return node.kind === 188 /* ThisType */;
+        return node.kind === 190 /* ThisType */;
     }
     ts.isThisTypeNode = isThisTypeNode;
     function isTypeOperatorNode(node) {
-        return node.kind === 189 /* TypeOperator */;
+        return node.kind === 191 /* TypeOperator */;
     }
     ts.isTypeOperatorNode = isTypeOperatorNode;
     function isIndexedAccessTypeNode(node) {
-        return node.kind === 190 /* IndexedAccessType */;
+        return node.kind === 192 /* IndexedAccessType */;
     }
     ts.isIndexedAccessTypeNode = isIndexedAccessTypeNode;
     function isMappedTypeNode(node) {
-        return node.kind === 191 /* MappedType */;
+        return node.kind === 193 /* MappedType */;
     }
     ts.isMappedTypeNode = isMappedTypeNode;
     function isLiteralTypeNode(node) {
-        return node.kind === 192 /* LiteralType */;
+        return node.kind === 194 /* LiteralType */;
     }
     ts.isLiteralTypeNode = isLiteralTypeNode;
     function isImportTypeNode(node) {
-        return node.kind === 196 /* ImportType */;
+        return node.kind === 198 /* ImportType */;
     }
     ts.isImportTypeNode = isImportTypeNode;
     function isTemplateLiteralTypeSpan(node) {
-        return node.kind === 195 /* TemplateLiteralTypeSpan */;
+        return node.kind === 197 /* TemplateLiteralTypeSpan */;
     }
     ts.isTemplateLiteralTypeSpan = isTemplateLiteralTypeSpan;
     function isTemplateLiteralTypeNode(node) {
-        return node.kind === 194 /* TemplateLiteralType */;
+        return node.kind === 196 /* TemplateLiteralType */;
     }
     ts.isTemplateLiteralTypeNode = isTemplateLiteralTypeNode;
     // Binding patterns
     function isObjectBindingPattern(node) {
-        return node.kind === 197 /* ObjectBindingPattern */;
+        return node.kind === 199 /* ObjectBindingPattern */;
     }
     ts.isObjectBindingPattern = isObjectBindingPattern;
     function isArrayBindingPattern(node) {
-        return node.kind === 198 /* ArrayBindingPattern */;
+        return node.kind === 200 /* ArrayBindingPattern */;
     }
     ts.isArrayBindingPattern = isArrayBindingPattern;
     function isBindingElement(node) {
-        return node.kind === 199 /* BindingElement */;
+        return node.kind === 201 /* BindingElement */;
     }
     ts.isBindingElement = isBindingElement;
     // Expression
     function isArrayLiteralExpression(node) {
-        return node.kind === 200 /* ArrayLiteralExpression */;
+        return node.kind === 202 /* ArrayLiteralExpression */;
     }
     ts.isArrayLiteralExpression = isArrayLiteralExpression;
     function isObjectLiteralExpression(node) {
-        return node.kind === 201 /* ObjectLiteralExpression */;
+        return node.kind === 203 /* ObjectLiteralExpression */;
     }
     ts.isObjectLiteralExpression = isObjectLiteralExpression;
     function isPropertyAccessExpression(node) {
-        return node.kind === 202 /* PropertyAccessExpression */;
+        return node.kind === 204 /* PropertyAccessExpression */;
     }
     ts.isPropertyAccessExpression = isPropertyAccessExpression;
     function isElementAccessExpression(node) {
-        return node.kind === 203 /* ElementAccessExpression */;
+        return node.kind === 205 /* ElementAccessExpression */;
     }
     ts.isElementAccessExpression = isElementAccessExpression;
     function isCallExpression(node) {
-        return node.kind === 204 /* CallExpression */;
+        return node.kind === 206 /* CallExpression */;
     }
     ts.isCallExpression = isCallExpression;
     function isNewExpression(node) {
-        return node.kind === 205 /* NewExpression */;
+        return node.kind === 207 /* NewExpression */;
     }
     ts.isNewExpression = isNewExpression;
     function isTaggedTemplateExpression(node) {
-        return node.kind === 206 /* TaggedTemplateExpression */;
+        return node.kind === 208 /* TaggedTemplateExpression */;
     }
     ts.isTaggedTemplateExpression = isTaggedTemplateExpression;
     function isTypeAssertionExpression(node) {
-        return node.kind === 207 /* TypeAssertionExpression */;
+        return node.kind === 209 /* TypeAssertionExpression */;
     }
     ts.isTypeAssertionExpression = isTypeAssertionExpression;
     function isParenthesizedExpression(node) {
-        return node.kind === 208 /* ParenthesizedExpression */;
+        return node.kind === 210 /* ParenthesizedExpression */;
     }
     ts.isParenthesizedExpression = isParenthesizedExpression;
     function isFunctionExpression(node) {
-        return node.kind === 209 /* FunctionExpression */;
+        return node.kind === 211 /* FunctionExpression */;
     }
     ts.isFunctionExpression = isFunctionExpression;
     function isArrowFunction(node) {
-        return node.kind === 210 /* ArrowFunction */;
+        return node.kind === 212 /* ArrowFunction */;
     }
     ts.isArrowFunction = isArrowFunction;
     function isDeleteExpression(node) {
-        return node.kind === 211 /* DeleteExpression */;
+        return node.kind === 213 /* DeleteExpression */;
     }
     ts.isDeleteExpression = isDeleteExpression;
     function isTypeOfExpression(node) {
-        return node.kind === 212 /* TypeOfExpression */;
+        return node.kind === 214 /* TypeOfExpression */;
     }
     ts.isTypeOfExpression = isTypeOfExpression;
     function isVoidExpression(node) {
-        return node.kind === 213 /* VoidExpression */;
+        return node.kind === 215 /* VoidExpression */;
     }
     ts.isVoidExpression = isVoidExpression;
     function isAwaitExpression(node) {
-        return node.kind === 214 /* AwaitExpression */;
+        return node.kind === 216 /* AwaitExpression */;
     }
     ts.isAwaitExpression = isAwaitExpression;
     function isPrefixUnaryExpression(node) {
-        return node.kind === 215 /* PrefixUnaryExpression */;
+        return node.kind === 217 /* PrefixUnaryExpression */;
     }
     ts.isPrefixUnaryExpression = isPrefixUnaryExpression;
     function isPostfixUnaryExpression(node) {
-        return node.kind === 216 /* PostfixUnaryExpression */;
+        return node.kind === 218 /* PostfixUnaryExpression */;
     }
     ts.isPostfixUnaryExpression = isPostfixUnaryExpression;
     function isBinaryExpression(node) {
-        return node.kind === 217 /* BinaryExpression */;
+        return node.kind === 219 /* BinaryExpression */;
     }
     ts.isBinaryExpression = isBinaryExpression;
     function isConditionalExpression(node) {
-        return node.kind === 218 /* ConditionalExpression */;
+        return node.kind === 220 /* ConditionalExpression */;
     }
     ts.isConditionalExpression = isConditionalExpression;
     function isTemplateExpression(node) {
-        return node.kind === 219 /* TemplateExpression */;
+        return node.kind === 221 /* TemplateExpression */;
     }
     ts.isTemplateExpression = isTemplateExpression;
     function isYieldExpression(node) {
-        return node.kind === 220 /* YieldExpression */;
+        return node.kind === 222 /* YieldExpression */;
     }
     ts.isYieldExpression = isYieldExpression;
     function isSpreadElement(node) {
-        return node.kind === 221 /* SpreadElement */;
+        return node.kind === 223 /* SpreadElement */;
     }
     ts.isSpreadElement = isSpreadElement;
     function isClassExpression(node) {
-        return node.kind === 222 /* ClassExpression */;
+        return node.kind === 224 /* ClassExpression */;
     }
     ts.isClassExpression = isClassExpression;
     function isOmittedExpression(node) {
-        return node.kind === 223 /* OmittedExpression */;
+        return node.kind === 225 /* OmittedExpression */;
     }
     ts.isOmittedExpression = isOmittedExpression;
     function isExpressionWithTypeArguments(node) {
-        return node.kind === 224 /* ExpressionWithTypeArguments */;
+        return node.kind === 226 /* ExpressionWithTypeArguments */;
     }
     ts.isExpressionWithTypeArguments = isExpressionWithTypeArguments;
     function isAsExpression(node) {
-        return node.kind === 225 /* AsExpression */;
+        return node.kind === 227 /* AsExpression */;
     }
     ts.isAsExpression = isAsExpression;
     function isNonNullExpression(node) {
-        return node.kind === 226 /* NonNullExpression */;
+        return node.kind === 228 /* NonNullExpression */;
     }
     ts.isNonNullExpression = isNonNullExpression;
     function isMetaProperty(node) {
-        return node.kind === 227 /* MetaProperty */;
+        return node.kind === 229 /* MetaProperty */;
     }
     ts.isMetaProperty = isMetaProperty;
     function isSyntheticExpression(node) {
-        return node.kind === 228 /* SyntheticExpression */;
+        return node.kind === 230 /* SyntheticExpression */;
     }
     ts.isSyntheticExpression = isSyntheticExpression;
     function isPartiallyEmittedExpression(node) {
-        return node.kind === 340 /* PartiallyEmittedExpression */;
+        return node.kind === 345 /* PartiallyEmittedExpression */;
     }
     ts.isPartiallyEmittedExpression = isPartiallyEmittedExpression;
     function isCommaListExpression(node) {
-        return node.kind === 341 /* CommaListExpression */;
+        return node.kind === 346 /* CommaListExpression */;
     }
     ts.isCommaListExpression = isCommaListExpression;
     // Misc
     function isTemplateSpan(node) {
-        return node.kind === 229 /* TemplateSpan */;
+        return node.kind === 231 /* TemplateSpan */;
     }
     ts.isTemplateSpan = isTemplateSpan;
     function isSemicolonClassElement(node) {
-        return node.kind === 230 /* SemicolonClassElement */;
+        return node.kind === 232 /* SemicolonClassElement */;
     }
     ts.isSemicolonClassElement = isSemicolonClassElement;
     // Elements
     function isBlock(node) {
-        return node.kind === 231 /* Block */;
+        return node.kind === 233 /* Block */;
     }
     ts.isBlock = isBlock;
     function isVariableStatement(node) {
-        return node.kind === 233 /* VariableStatement */;
+        return node.kind === 235 /* VariableStatement */;
     }
     ts.isVariableStatement = isVariableStatement;
     function isEmptyStatement(node) {
-        return node.kind === 232 /* EmptyStatement */;
+        return node.kind === 234 /* EmptyStatement */;
     }
     ts.isEmptyStatement = isEmptyStatement;
     function isExpressionStatement(node) {
-        return node.kind === 234 /* ExpressionStatement */;
+        return node.kind === 236 /* ExpressionStatement */;
     }
     ts.isExpressionStatement = isExpressionStatement;
     function isIfStatement(node) {
-        return node.kind === 235 /* IfStatement */;
+        return node.kind === 237 /* IfStatement */;
     }
     ts.isIfStatement = isIfStatement;
     function isDoStatement(node) {
-        return node.kind === 236 /* DoStatement */;
+        return node.kind === 238 /* DoStatement */;
     }
     ts.isDoStatement = isDoStatement;
     function isWhileStatement(node) {
-        return node.kind === 237 /* WhileStatement */;
+        return node.kind === 239 /* WhileStatement */;
     }
     ts.isWhileStatement = isWhileStatement;
     function isForStatement(node) {
-        return node.kind === 238 /* ForStatement */;
+        return node.kind === 240 /* ForStatement */;
     }
     ts.isForStatement = isForStatement;
     function isForInStatement(node) {
-        return node.kind === 239 /* ForInStatement */;
+        return node.kind === 241 /* ForInStatement */;
     }
     ts.isForInStatement = isForInStatement;
     function isForOfStatement(node) {
-        return node.kind === 240 /* ForOfStatement */;
+        return node.kind === 242 /* ForOfStatement */;
     }
     ts.isForOfStatement = isForOfStatement;
     function isContinueStatement(node) {
-        return node.kind === 241 /* ContinueStatement */;
+        return node.kind === 243 /* ContinueStatement */;
     }
     ts.isContinueStatement = isContinueStatement;
     function isBreakStatement(node) {
-        return node.kind === 242 /* BreakStatement */;
+        return node.kind === 244 /* BreakStatement */;
     }
     ts.isBreakStatement = isBreakStatement;
     function isReturnStatement(node) {
-        return node.kind === 243 /* ReturnStatement */;
+        return node.kind === 245 /* ReturnStatement */;
     }
     ts.isReturnStatement = isReturnStatement;
     function isWithStatement(node) {
-        return node.kind === 244 /* WithStatement */;
+        return node.kind === 246 /* WithStatement */;
     }
     ts.isWithStatement = isWithStatement;
     function isSwitchStatement(node) {
-        return node.kind === 245 /* SwitchStatement */;
+        return node.kind === 247 /* SwitchStatement */;
     }
     ts.isSwitchStatement = isSwitchStatement;
     function isLabeledStatement(node) {
-        return node.kind === 246 /* LabeledStatement */;
+        return node.kind === 248 /* LabeledStatement */;
     }
     ts.isLabeledStatement = isLabeledStatement;
     function isThrowStatement(node) {
-        return node.kind === 247 /* ThrowStatement */;
+        return node.kind === 249 /* ThrowStatement */;
     }
     ts.isThrowStatement = isThrowStatement;
     function isTryStatement(node) {
-        return node.kind === 248 /* TryStatement */;
+        return node.kind === 250 /* TryStatement */;
     }
     ts.isTryStatement = isTryStatement;
     function isDebuggerStatement(node) {
-        return node.kind === 249 /* DebuggerStatement */;
+        return node.kind === 251 /* DebuggerStatement */;
     }
     ts.isDebuggerStatement = isDebuggerStatement;
     function isVariableDeclaration(node) {
-        return node.kind === 250 /* VariableDeclaration */;
+        return node.kind === 252 /* VariableDeclaration */;
     }
     ts.isVariableDeclaration = isVariableDeclaration;
     function isVariableDeclarationList(node) {
-        return node.kind === 251 /* VariableDeclarationList */;
+        return node.kind === 253 /* VariableDeclarationList */;
     }
     ts.isVariableDeclarationList = isVariableDeclarationList;
     function isFunctionDeclaration(node) {
-        return node.kind === 252 /* FunctionDeclaration */;
+        return node.kind === 254 /* FunctionDeclaration */;
     }
     ts.isFunctionDeclaration = isFunctionDeclaration;
     function isClassDeclaration(node) {
-        return node.kind === 253 /* ClassDeclaration */;
+        return node.kind === 255 /* ClassDeclaration */;
     }
     ts.isClassDeclaration = isClassDeclaration;
     function isInterfaceDeclaration(node) {
-        return node.kind === 254 /* InterfaceDeclaration */;
+        return node.kind === 256 /* InterfaceDeclaration */;
     }
     ts.isInterfaceDeclaration = isInterfaceDeclaration;
     function isTypeAliasDeclaration(node) {
-        return node.kind === 255 /* TypeAliasDeclaration */;
+        return node.kind === 257 /* TypeAliasDeclaration */;
     }
     ts.isTypeAliasDeclaration = isTypeAliasDeclaration;
     function isEnumDeclaration(node) {
-        return node.kind === 256 /* EnumDeclaration */;
+        return node.kind === 258 /* EnumDeclaration */;
     }
     ts.isEnumDeclaration = isEnumDeclaration;
     function isModuleDeclaration(node) {
-        return node.kind === 257 /* ModuleDeclaration */;
+        return node.kind === 259 /* ModuleDeclaration */;
     }
     ts.isModuleDeclaration = isModuleDeclaration;
     function isModuleBlock(node) {
-        return node.kind === 258 /* ModuleBlock */;
+        return node.kind === 260 /* ModuleBlock */;
     }
     ts.isModuleBlock = isModuleBlock;
     function isCaseBlock(node) {
-        return node.kind === 259 /* CaseBlock */;
+        return node.kind === 261 /* CaseBlock */;
     }
     ts.isCaseBlock = isCaseBlock;
     function isNamespaceExportDeclaration(node) {
-        return node.kind === 260 /* NamespaceExportDeclaration */;
+        return node.kind === 262 /* NamespaceExportDeclaration */;
     }
     ts.isNamespaceExportDeclaration = isNamespaceExportDeclaration;
     function isImportEqualsDeclaration(node) {
-        return node.kind === 261 /* ImportEqualsDeclaration */;
+        return node.kind === 263 /* ImportEqualsDeclaration */;
     }
     ts.isImportEqualsDeclaration = isImportEqualsDeclaration;
     function isImportDeclaration(node) {
-        return node.kind === 262 /* ImportDeclaration */;
+        return node.kind === 264 /* ImportDeclaration */;
     }
     ts.isImportDeclaration = isImportDeclaration;
     function isImportClause(node) {
-        return node.kind === 263 /* ImportClause */;
+        return node.kind === 265 /* ImportClause */;
     }
     ts.isImportClause = isImportClause;
     function isNamespaceImport(node) {
-        return node.kind === 264 /* NamespaceImport */;
+        return node.kind === 266 /* NamespaceImport */;
     }
     ts.isNamespaceImport = isNamespaceImport;
     function isNamespaceExport(node) {
-        return node.kind === 270 /* NamespaceExport */;
+        return node.kind === 272 /* NamespaceExport */;
     }
     ts.isNamespaceExport = isNamespaceExport;
     function isNamedImports(node) {
-        return node.kind === 265 /* NamedImports */;
+        return node.kind === 267 /* NamedImports */;
     }
     ts.isNamedImports = isNamedImports;
     function isImportSpecifier(node) {
-        return node.kind === 266 /* ImportSpecifier */;
+        return node.kind === 268 /* ImportSpecifier */;
     }
     ts.isImportSpecifier = isImportSpecifier;
     function isExportAssignment(node) {
-        return node.kind === 267 /* ExportAssignment */;
+        return node.kind === 269 /* ExportAssignment */;
     }
     ts.isExportAssignment = isExportAssignment;
     function isExportDeclaration(node) {
-        return node.kind === 268 /* ExportDeclaration */;
+        return node.kind === 270 /* ExportDeclaration */;
     }
     ts.isExportDeclaration = isExportDeclaration;
     function isNamedExports(node) {
-        return node.kind === 269 /* NamedExports */;
+        return node.kind === 271 /* NamedExports */;
     }
     ts.isNamedExports = isNamedExports;
     function isExportSpecifier(node) {
-        return node.kind === 271 /* ExportSpecifier */;
+        return node.kind === 273 /* ExportSpecifier */;
     }
     ts.isExportSpecifier = isExportSpecifier;
     function isMissingDeclaration(node) {
-        return node.kind === 272 /* MissingDeclaration */;
+        return node.kind === 274 /* MissingDeclaration */;
     }
     ts.isMissingDeclaration = isMissingDeclaration;
     function isNotEmittedStatement(node) {
-        return node.kind === 339 /* NotEmittedStatement */;
+        return node.kind === 344 /* NotEmittedStatement */;
     }
     ts.isNotEmittedStatement = isNotEmittedStatement;
     /* @internal */
     function isSyntheticReference(node) {
-        return node.kind === 344 /* SyntheticReferenceExpression */;
+        return node.kind === 349 /* SyntheticReferenceExpression */;
     }
     ts.isSyntheticReference = isSyntheticReference;
     /* @internal */
     function isMergeDeclarationMarker(node) {
-        return node.kind === 342 /* MergeDeclarationMarker */;
+        return node.kind === 347 /* MergeDeclarationMarker */;
     }
     ts.isMergeDeclarationMarker = isMergeDeclarationMarker;
     /* @internal */
     function isEndOfDeclarationMarker(node) {
-        return node.kind === 343 /* EndOfDeclarationMarker */;
+        return node.kind === 348 /* EndOfDeclarationMarker */;
     }
     ts.isEndOfDeclarationMarker = isEndOfDeclarationMarker;
     // Module References
     function isExternalModuleReference(node) {
-        return node.kind === 273 /* ExternalModuleReference */;
+        return node.kind === 275 /* ExternalModuleReference */;
     }
     ts.isExternalModuleReference = isExternalModuleReference;
     // JSX
     function isJsxElement(node) {
-        return node.kind === 274 /* JsxElement */;
+        return node.kind === 276 /* JsxElement */;
     }
     ts.isJsxElement = isJsxElement;
     function isJsxSelfClosingElement(node) {
-        return node.kind === 275 /* JsxSelfClosingElement */;
+        return node.kind === 277 /* JsxSelfClosingElement */;
     }
     ts.isJsxSelfClosingElement = isJsxSelfClosingElement;
     function isJsxOpeningElement(node) {
-        return node.kind === 276 /* JsxOpeningElement */;
+        return node.kind === 278 /* JsxOpeningElement */;
     }
     ts.isJsxOpeningElement = isJsxOpeningElement;
     function isJsxClosingElement(node) {
-        return node.kind === 277 /* JsxClosingElement */;
+        return node.kind === 279 /* JsxClosingElement */;
     }
     ts.isJsxClosingElement = isJsxClosingElement;
     function isJsxFragment(node) {
-        return node.kind === 278 /* JsxFragment */;
+        return node.kind === 280 /* JsxFragment */;
     }
     ts.isJsxFragment = isJsxFragment;
     function isJsxOpeningFragment(node) {
-        return node.kind === 279 /* JsxOpeningFragment */;
+        return node.kind === 281 /* JsxOpeningFragment */;
     }
     ts.isJsxOpeningFragment = isJsxOpeningFragment;
     function isJsxClosingFragment(node) {
-        return node.kind === 280 /* JsxClosingFragment */;
+        return node.kind === 282 /* JsxClosingFragment */;
     }
     ts.isJsxClosingFragment = isJsxClosingFragment;
     function isJsxAttribute(node) {
-        return node.kind === 281 /* JsxAttribute */;
+        return node.kind === 283 /* JsxAttribute */;
     }
     ts.isJsxAttribute = isJsxAttribute;
     function isJsxAttributes(node) {
-        return node.kind === 282 /* JsxAttributes */;
+        return node.kind === 284 /* JsxAttributes */;
     }
     ts.isJsxAttributes = isJsxAttributes;
     function isJsxSpreadAttribute(node) {
-        return node.kind === 283 /* JsxSpreadAttribute */;
+        return node.kind === 285 /* JsxSpreadAttribute */;
     }
     ts.isJsxSpreadAttribute = isJsxSpreadAttribute;
     function isJsxExpression(node) {
-        return node.kind === 284 /* JsxExpression */;
+        return node.kind === 286 /* JsxExpression */;
     }
     ts.isJsxExpression = isJsxExpression;
     // Clauses
     function isCaseClause(node) {
-        return node.kind === 285 /* CaseClause */;
+        return node.kind === 287 /* CaseClause */;
     }
     ts.isCaseClause = isCaseClause;
     function isDefaultClause(node) {
-        return node.kind === 286 /* DefaultClause */;
+        return node.kind === 288 /* DefaultClause */;
     }
     ts.isDefaultClause = isDefaultClause;
     function isHeritageClause(node) {
-        return node.kind === 287 /* HeritageClause */;
+        return node.kind === 289 /* HeritageClause */;
     }
     ts.isHeritageClause = isHeritageClause;
     function isCatchClause(node) {
-        return node.kind === 288 /* CatchClause */;
+        return node.kind === 290 /* CatchClause */;
     }
     ts.isCatchClause = isCatchClause;
     // Property assignments
     function isPropertyAssignment(node) {
-        return node.kind === 289 /* PropertyAssignment */;
+        return node.kind === 291 /* PropertyAssignment */;
     }
     ts.isPropertyAssignment = isPropertyAssignment;
     function isShorthandPropertyAssignment(node) {
-        return node.kind === 290 /* ShorthandPropertyAssignment */;
+        return node.kind === 292 /* ShorthandPropertyAssignment */;
     }
     ts.isShorthandPropertyAssignment = isShorthandPropertyAssignment;
     function isSpreadAssignment(node) {
-        return node.kind === 291 /* SpreadAssignment */;
+        return node.kind === 293 /* SpreadAssignment */;
     }
     ts.isSpreadAssignment = isSpreadAssignment;
     // Enum
     function isEnumMember(node) {
-        return node.kind === 292 /* EnumMember */;
+        return node.kind === 294 /* EnumMember */;
     }
     ts.isEnumMember = isEnumMember;
     // Unparsed
     // TODO(rbuckton): isUnparsedPrologue
     function isUnparsedPrepend(node) {
-        return node.kind === 294 /* UnparsedPrepend */;
+        return node.kind === 296 /* UnparsedPrepend */;
     }
     ts.isUnparsedPrepend = isUnparsedPrepend;
     // TODO(rbuckton): isUnparsedText
@@ -27836,164 +28438,176 @@
     // TODO(rbuckton): isUnparsedSyntheticReference
     // Top-level nodes
     function isSourceFile(node) {
-        return node.kind === 298 /* SourceFile */;
+        return node.kind === 300 /* SourceFile */;
     }
     ts.isSourceFile = isSourceFile;
     function isBundle(node) {
-        return node.kind === 299 /* Bundle */;
+        return node.kind === 301 /* Bundle */;
     }
     ts.isBundle = isBundle;
     function isUnparsedSource(node) {
-        return node.kind === 300 /* UnparsedSource */;
+        return node.kind === 302 /* UnparsedSource */;
     }
     ts.isUnparsedSource = isUnparsedSource;
     // TODO(rbuckton): isInputFiles
     // JSDoc Elements
     function isJSDocTypeExpression(node) {
-        return node.kind === 302 /* JSDocTypeExpression */;
+        return node.kind === 304 /* JSDocTypeExpression */;
     }
     ts.isJSDocTypeExpression = isJSDocTypeExpression;
     function isJSDocNameReference(node) {
-        return node.kind === 303 /* JSDocNameReference */;
+        return node.kind === 305 /* JSDocNameReference */;
     }
     ts.isJSDocNameReference = isJSDocNameReference;
+    function isJSDocMemberName(node) {
+        return node.kind === 306 /* JSDocMemberName */;
+    }
+    ts.isJSDocMemberName = isJSDocMemberName;
     function isJSDocLink(node) {
-        return node.kind === 316 /* JSDocLink */;
+        return node.kind === 319 /* JSDocLink */;
     }
     ts.isJSDocLink = isJSDocLink;
+    function isJSDocLinkCode(node) {
+        return node.kind === 320 /* JSDocLinkCode */;
+    }
+    ts.isJSDocLinkCode = isJSDocLinkCode;
+    function isJSDocLinkPlain(node) {
+        return node.kind === 321 /* JSDocLinkPlain */;
+    }
+    ts.isJSDocLinkPlain = isJSDocLinkPlain;
     function isJSDocAllType(node) {
-        return node.kind === 304 /* JSDocAllType */;
+        return node.kind === 307 /* JSDocAllType */;
     }
     ts.isJSDocAllType = isJSDocAllType;
     function isJSDocUnknownType(node) {
-        return node.kind === 305 /* JSDocUnknownType */;
+        return node.kind === 308 /* JSDocUnknownType */;
     }
     ts.isJSDocUnknownType = isJSDocUnknownType;
     function isJSDocNullableType(node) {
-        return node.kind === 306 /* JSDocNullableType */;
+        return node.kind === 309 /* JSDocNullableType */;
     }
     ts.isJSDocNullableType = isJSDocNullableType;
     function isJSDocNonNullableType(node) {
-        return node.kind === 307 /* JSDocNonNullableType */;
+        return node.kind === 310 /* JSDocNonNullableType */;
     }
     ts.isJSDocNonNullableType = isJSDocNonNullableType;
     function isJSDocOptionalType(node) {
-        return node.kind === 308 /* JSDocOptionalType */;
+        return node.kind === 311 /* JSDocOptionalType */;
     }
     ts.isJSDocOptionalType = isJSDocOptionalType;
     function isJSDocFunctionType(node) {
-        return node.kind === 309 /* JSDocFunctionType */;
+        return node.kind === 312 /* JSDocFunctionType */;
     }
     ts.isJSDocFunctionType = isJSDocFunctionType;
     function isJSDocVariadicType(node) {
-        return node.kind === 310 /* JSDocVariadicType */;
+        return node.kind === 313 /* JSDocVariadicType */;
     }
     ts.isJSDocVariadicType = isJSDocVariadicType;
     function isJSDocNamepathType(node) {
-        return node.kind === 311 /* JSDocNamepathType */;
+        return node.kind === 314 /* JSDocNamepathType */;
     }
     ts.isJSDocNamepathType = isJSDocNamepathType;
     function isJSDoc(node) {
-        return node.kind === 312 /* JSDocComment */;
+        return node.kind === 315 /* JSDocComment */;
     }
     ts.isJSDoc = isJSDoc;
     function isJSDocTypeLiteral(node) {
-        return node.kind === 314 /* JSDocTypeLiteral */;
+        return node.kind === 317 /* JSDocTypeLiteral */;
     }
     ts.isJSDocTypeLiteral = isJSDocTypeLiteral;
     function isJSDocSignature(node) {
-        return node.kind === 315 /* JSDocSignature */;
+        return node.kind === 318 /* JSDocSignature */;
     }
     ts.isJSDocSignature = isJSDocSignature;
     // JSDoc Tags
     function isJSDocAugmentsTag(node) {
-        return node.kind === 318 /* JSDocAugmentsTag */;
+        return node.kind === 323 /* JSDocAugmentsTag */;
     }
     ts.isJSDocAugmentsTag = isJSDocAugmentsTag;
     function isJSDocAuthorTag(node) {
-        return node.kind === 320 /* JSDocAuthorTag */;
+        return node.kind === 325 /* JSDocAuthorTag */;
     }
     ts.isJSDocAuthorTag = isJSDocAuthorTag;
     function isJSDocClassTag(node) {
-        return node.kind === 322 /* JSDocClassTag */;
+        return node.kind === 327 /* JSDocClassTag */;
     }
     ts.isJSDocClassTag = isJSDocClassTag;
     function isJSDocCallbackTag(node) {
-        return node.kind === 328 /* JSDocCallbackTag */;
+        return node.kind === 333 /* JSDocCallbackTag */;
     }
     ts.isJSDocCallbackTag = isJSDocCallbackTag;
     function isJSDocPublicTag(node) {
-        return node.kind === 323 /* JSDocPublicTag */;
+        return node.kind === 328 /* JSDocPublicTag */;
     }
     ts.isJSDocPublicTag = isJSDocPublicTag;
     function isJSDocPrivateTag(node) {
-        return node.kind === 324 /* JSDocPrivateTag */;
+        return node.kind === 329 /* JSDocPrivateTag */;
     }
     ts.isJSDocPrivateTag = isJSDocPrivateTag;
     function isJSDocProtectedTag(node) {
-        return node.kind === 325 /* JSDocProtectedTag */;
+        return node.kind === 330 /* JSDocProtectedTag */;
     }
     ts.isJSDocProtectedTag = isJSDocProtectedTag;
     function isJSDocReadonlyTag(node) {
-        return node.kind === 326 /* JSDocReadonlyTag */;
+        return node.kind === 331 /* JSDocReadonlyTag */;
     }
     ts.isJSDocReadonlyTag = isJSDocReadonlyTag;
     function isJSDocOverrideTag(node) {
-        return node.kind === 327 /* JSDocOverrideTag */;
+        return node.kind === 332 /* JSDocOverrideTag */;
     }
     ts.isJSDocOverrideTag = isJSDocOverrideTag;
     function isJSDocDeprecatedTag(node) {
-        return node.kind === 321 /* JSDocDeprecatedTag */;
+        return node.kind === 326 /* JSDocDeprecatedTag */;
     }
     ts.isJSDocDeprecatedTag = isJSDocDeprecatedTag;
     function isJSDocSeeTag(node) {
-        return node.kind === 336 /* JSDocSeeTag */;
+        return node.kind === 341 /* JSDocSeeTag */;
     }
     ts.isJSDocSeeTag = isJSDocSeeTag;
     function isJSDocEnumTag(node) {
-        return node.kind === 329 /* JSDocEnumTag */;
+        return node.kind === 334 /* JSDocEnumTag */;
     }
     ts.isJSDocEnumTag = isJSDocEnumTag;
     function isJSDocParameterTag(node) {
-        return node.kind === 330 /* JSDocParameterTag */;
+        return node.kind === 335 /* JSDocParameterTag */;
     }
     ts.isJSDocParameterTag = isJSDocParameterTag;
     function isJSDocReturnTag(node) {
-        return node.kind === 331 /* JSDocReturnTag */;
+        return node.kind === 336 /* JSDocReturnTag */;
     }
     ts.isJSDocReturnTag = isJSDocReturnTag;
     function isJSDocThisTag(node) {
-        return node.kind === 332 /* JSDocThisTag */;
+        return node.kind === 337 /* JSDocThisTag */;
     }
     ts.isJSDocThisTag = isJSDocThisTag;
     function isJSDocTypeTag(node) {
-        return node.kind === 333 /* JSDocTypeTag */;
+        return node.kind === 338 /* JSDocTypeTag */;
     }
     ts.isJSDocTypeTag = isJSDocTypeTag;
     function isJSDocTemplateTag(node) {
-        return node.kind === 334 /* JSDocTemplateTag */;
+        return node.kind === 339 /* JSDocTemplateTag */;
     }
     ts.isJSDocTemplateTag = isJSDocTemplateTag;
     function isJSDocTypedefTag(node) {
-        return node.kind === 335 /* JSDocTypedefTag */;
+        return node.kind === 340 /* JSDocTypedefTag */;
     }
     ts.isJSDocTypedefTag = isJSDocTypedefTag;
     function isJSDocUnknownTag(node) {
-        return node.kind === 317 /* JSDocTag */;
+        return node.kind === 322 /* JSDocTag */;
     }
     ts.isJSDocUnknownTag = isJSDocUnknownTag;
     function isJSDocPropertyTag(node) {
-        return node.kind === 337 /* JSDocPropertyTag */;
+        return node.kind === 342 /* JSDocPropertyTag */;
     }
     ts.isJSDocPropertyTag = isJSDocPropertyTag;
     function isJSDocImplementsTag(node) {
-        return node.kind === 319 /* JSDocImplementsTag */;
+        return node.kind === 324 /* JSDocImplementsTag */;
     }
     ts.isJSDocImplementsTag = isJSDocImplementsTag;
     // Synthesized list
     /* @internal */
     function isSyntaxList(n) {
-        return n.kind === 338 /* SyntaxList */;
+        return n.kind === 343 /* SyntaxList */;
     }
     ts.isSyntaxList = isSyntaxList;
 })(ts || (ts = {}));
@@ -28112,7 +28726,7 @@
     ts.createForOfBindingStatement = createForOfBindingStatement;
     function insertLeadingStatement(factory, dest, source) {
         if (ts.isBlock(dest)) {
-            return factory.updateBlock(dest, ts.setTextRange(factory.createNodeArray(__spreadArray([source], dest.statements)), dest.statements));
+            return factory.updateBlock(dest, ts.setTextRange(factory.createNodeArray(__spreadArray([source], dest.statements, true)), dest.statements));
         }
         else {
             return factory.createBlock(factory.createNodeArray([dest, source]), /*multiLine*/ true);
@@ -28192,19 +28806,74 @@
             ts.Debug.failBadSyntaxKind(property.name, "Private identifiers are not allowed in object literals.");
         }
         switch (property.kind) {
-            case 168 /* GetAccessor */:
-            case 169 /* SetAccessor */:
+            case 170 /* GetAccessor */:
+            case 171 /* SetAccessor */:
                 return createExpressionForAccessorDeclaration(factory, node.properties, property, receiver, !!node.multiLine);
-            case 289 /* PropertyAssignment */:
+            case 291 /* PropertyAssignment */:
                 return createExpressionForPropertyAssignment(factory, property, receiver);
-            case 290 /* ShorthandPropertyAssignment */:
+            case 292 /* ShorthandPropertyAssignment */:
                 return createExpressionForShorthandPropertyAssignment(factory, property, receiver);
-            case 166 /* MethodDeclaration */:
+            case 167 /* MethodDeclaration */:
                 return createExpressionForMethodDeclaration(factory, property, receiver);
         }
     }
     ts.createExpressionForObjectLiteralElementLike = createExpressionForObjectLiteralElementLike;
     /**
+     * Expand the read and increment/decrement operations a pre- or post-increment or pre- or post-decrement expression.
+     *
+     * ```ts
+     * // input
+     * <expression>++
+     * // output (if result is not discarded)
+     * var <temp>;
+     * (<temp> = <expression>, <resultVariable> = <temp>++, <temp>)
+     * // output (if result is discarded)
+     * var <temp>;
+     * (<temp> = <expression>, <temp>++, <temp>)
+     *
+     * // input
+     * ++<expression>
+     * // output (if result is not discarded)
+     * var <temp>;
+     * (<temp> = <expression>, <resultVariable> = ++<temp>)
+     * // output (if result is discarded)
+     * var <temp>;
+     * (<temp> = <expression>, ++<temp>)
+     * ```
+     *
+     * It is up to the caller to supply a temporary variable for `<resultVariable>` if one is needed.
+     * The temporary variable `<temp>` is injected so that `++` and `--` work uniformly with `number` and `bigint`.
+     * The result of the expression is always the final result of incrementing or decrementing the expression, so that it can be used for storage.
+     *
+     * @param factory {@link NodeFactory} used to create the expanded representation.
+     * @param node The original prefix or postfix unary node.
+     * @param expression The expression to use as the value to increment or decrement
+     * @param resultVariable A temporary variable in which to store the result. Pass `undefined` if the result is discarded, or if the value of `<temp>` is the expected result.
+     */
+    function expandPreOrPostfixIncrementOrDecrementExpression(factory, node, expression, recordTempVariable, resultVariable) {
+        var operator = node.operator;
+        ts.Debug.assert(operator === 45 /* PlusPlusToken */ || operator === 46 /* MinusMinusToken */, "Expected 'node' to be a pre- or post-increment or pre- or post-decrement expression");
+        var temp = factory.createTempVariable(recordTempVariable);
+        expression = factory.createAssignment(temp, expression);
+        ts.setTextRange(expression, node.operand);
+        var operation = ts.isPrefixUnaryExpression(node) ?
+            factory.createPrefixUnaryExpression(operator, temp) :
+            factory.createPostfixUnaryExpression(temp, operator);
+        ts.setTextRange(operation, node);
+        if (resultVariable) {
+            operation = factory.createAssignment(resultVariable, operation);
+            ts.setTextRange(operation, node);
+        }
+        expression = factory.createComma(expression, operation);
+        ts.setTextRange(expression, node);
+        if (ts.isPostfixUnaryExpression(node)) {
+            expression = factory.createComma(expression, temp);
+            ts.setTextRange(expression, node);
+        }
+        return expression;
+    }
+    ts.expandPreOrPostfixIncrementOrDecrementExpression = expandPreOrPostfixIncrementOrDecrementExpression;
+    /**
      * Gets whether an identifier should only be referred to by its internal name.
      */
     function isInternalName(node) {
@@ -28252,21 +28921,21 @@
     }
     ts.startsWithUseStrict = startsWithUseStrict;
     function isCommaSequence(node) {
-        return node.kind === 217 /* BinaryExpression */ && node.operatorToken.kind === 27 /* CommaToken */ ||
-            node.kind === 341 /* CommaListExpression */;
+        return node.kind === 219 /* BinaryExpression */ && node.operatorToken.kind === 27 /* CommaToken */ ||
+            node.kind === 346 /* CommaListExpression */;
     }
     ts.isCommaSequence = isCommaSequence;
     function isOuterExpression(node, kinds) {
         if (kinds === void 0) { kinds = 15 /* All */; }
         switch (node.kind) {
-            case 208 /* ParenthesizedExpression */:
+            case 210 /* ParenthesizedExpression */:
                 return (kinds & 1 /* Parentheses */) !== 0;
-            case 207 /* TypeAssertionExpression */:
-            case 225 /* AsExpression */:
+            case 209 /* TypeAssertionExpression */:
+            case 227 /* AsExpression */:
                 return (kinds & 2 /* TypeAssertions */) !== 0;
-            case 226 /* NonNullExpression */:
+            case 228 /* NonNullExpression */:
                 return (kinds & 4 /* NonNullAssertions */) !== 0;
-            case 340 /* PartiallyEmittedExpression */:
+            case 345 /* PartiallyEmittedExpression */:
                 return (kinds & 8 /* PartiallyEmittedExpressions */) !== 0;
         }
         return false;
@@ -28387,10 +29056,10 @@
             var name = namespaceDeclaration.name;
             return ts.isGeneratedIdentifier(name) ? name : factory.createIdentifier(ts.getSourceTextOfNodeFromSourceFile(sourceFile, name) || ts.idText(name));
         }
-        if (node.kind === 262 /* ImportDeclaration */ && node.importClause) {
+        if (node.kind === 264 /* ImportDeclaration */ && node.importClause) {
             return factory.getGeneratedNameForNode(node);
         }
-        if (node.kind === 268 /* ExportDeclaration */ && node.moduleSpecifier) {
+        if (node.kind === 270 /* ExportDeclaration */ && node.moduleSpecifier) {
             return factory.getGeneratedNameForNode(node);
         }
         return undefined;
@@ -28509,7 +29178,7 @@
         }
         if (ts.isObjectLiteralElementLike(bindingElement)) {
             switch (bindingElement.kind) {
-                case 289 /* PropertyAssignment */:
+                case 291 /* PropertyAssignment */:
                     // `b` in `({ a: b } = ...)`
                     // `b` in `({ a: b = 1 } = ...)`
                     // `{b}` in `({ a: {b} } = ...)`
@@ -28521,11 +29190,11 @@
                     // `b[0]` in `({ a: b[0] } = ...)`
                     // `b[0]` in `({ a: b[0] = 1 } = ...)`
                     return getTargetOfBindingOrAssignmentElement(bindingElement.initializer);
-                case 290 /* ShorthandPropertyAssignment */:
+                case 292 /* ShorthandPropertyAssignment */:
                     // `a` in `({ a } = ...)`
                     // `a` in `({ a = 1 } = ...)`
                     return bindingElement.name;
-                case 291 /* SpreadAssignment */:
+                case 293 /* SpreadAssignment */:
                     // `a` in `({ ...a } = ...)`
                     return getTargetOfBindingOrAssignmentElement(bindingElement.expression);
             }
@@ -28557,12 +29226,12 @@
      */
     function getRestIndicatorOfBindingOrAssignmentElement(bindingElement) {
         switch (bindingElement.kind) {
-            case 161 /* Parameter */:
-            case 199 /* BindingElement */:
+            case 162 /* Parameter */:
+            case 201 /* BindingElement */:
                 // `...` in `let [...a] = ...`
                 return bindingElement.dotDotDotToken;
-            case 221 /* SpreadElement */:
-            case 291 /* SpreadAssignment */:
+            case 223 /* SpreadElement */:
+            case 293 /* SpreadAssignment */:
                 // `...` in `[...a] = ...`
                 return bindingElement;
         }
@@ -28580,7 +29249,7 @@
     ts.getPropertyNameOfBindingOrAssignmentElement = getPropertyNameOfBindingOrAssignmentElement;
     function tryGetPropertyNameOfBindingOrAssignmentElement(bindingElement) {
         switch (bindingElement.kind) {
-            case 199 /* BindingElement */:
+            case 201 /* BindingElement */:
                 // `a` in `let { a: b } = ...`
                 // `[a]` in `let { [a]: b } = ...`
                 // `"a"` in `let { "a": b } = ...`
@@ -28595,7 +29264,7 @@
                         : propertyName;
                 }
                 break;
-            case 289 /* PropertyAssignment */:
+            case 291 /* PropertyAssignment */:
                 // `a` in `({ a: b } = ...)`
                 // `[a]` in `({ [a]: b } = ...)`
                 // `"a"` in `({ "a": b } = ...)`
@@ -28610,7 +29279,7 @@
                         : propertyName;
                 }
                 break;
-            case 291 /* SpreadAssignment */:
+            case 293 /* SpreadAssignment */:
                 // `a` in `({ ...a } = ...)`
                 if (bindingElement.name && ts.isPrivateIdentifier(bindingElement.name)) {
                     return ts.Debug.failBadSyntaxKind(bindingElement.name);
@@ -28633,13 +29302,13 @@
      */
     function getElementsOfBindingOrAssignmentPattern(name) {
         switch (name.kind) {
-            case 197 /* ObjectBindingPattern */:
-            case 198 /* ArrayBindingPattern */:
-            case 200 /* ArrayLiteralExpression */:
+            case 199 /* ObjectBindingPattern */:
+            case 200 /* ArrayBindingPattern */:
+            case 202 /* ArrayLiteralExpression */:
                 // `a` in `{a}`
                 // `a` in `[a]`
                 return name.elements;
-            case 201 /* ObjectLiteralExpression */:
+            case 203 /* ObjectLiteralExpression */:
                 // `a` in `{a}`
                 return name.properties;
         }
@@ -28660,29 +29329,29 @@
     ts.getJSDocTypeAliasName = getJSDocTypeAliasName;
     function canHaveModifiers(node) {
         var kind = node.kind;
-        return kind === 161 /* Parameter */
-            || kind === 163 /* PropertySignature */
-            || kind === 164 /* PropertyDeclaration */
-            || kind === 165 /* MethodSignature */
-            || kind === 166 /* MethodDeclaration */
-            || kind === 167 /* Constructor */
-            || kind === 168 /* GetAccessor */
-            || kind === 169 /* SetAccessor */
-            || kind === 172 /* IndexSignature */
-            || kind === 209 /* FunctionExpression */
-            || kind === 210 /* ArrowFunction */
-            || kind === 222 /* ClassExpression */
-            || kind === 233 /* VariableStatement */
-            || kind === 252 /* FunctionDeclaration */
-            || kind === 253 /* ClassDeclaration */
-            || kind === 254 /* InterfaceDeclaration */
-            || kind === 255 /* TypeAliasDeclaration */
-            || kind === 256 /* EnumDeclaration */
-            || kind === 257 /* ModuleDeclaration */
-            || kind === 261 /* ImportEqualsDeclaration */
-            || kind === 262 /* ImportDeclaration */
-            || kind === 267 /* ExportAssignment */
-            || kind === 268 /* ExportDeclaration */;
+        return kind === 162 /* Parameter */
+            || kind === 164 /* PropertySignature */
+            || kind === 165 /* PropertyDeclaration */
+            || kind === 166 /* MethodSignature */
+            || kind === 167 /* MethodDeclaration */
+            || kind === 169 /* Constructor */
+            || kind === 170 /* GetAccessor */
+            || kind === 171 /* SetAccessor */
+            || kind === 174 /* IndexSignature */
+            || kind === 211 /* FunctionExpression */
+            || kind === 212 /* ArrowFunction */
+            || kind === 224 /* ClassExpression */
+            || kind === 235 /* VariableStatement */
+            || kind === 254 /* FunctionDeclaration */
+            || kind === 255 /* ClassDeclaration */
+            || kind === 256 /* InterfaceDeclaration */
+            || kind === 257 /* TypeAliasDeclaration */
+            || kind === 258 /* EnumDeclaration */
+            || kind === 259 /* ModuleDeclaration */
+            || kind === 263 /* ImportEqualsDeclaration */
+            || kind === 264 /* ImportDeclaration */
+            || kind === 269 /* ExportAssignment */
+            || kind === 270 /* ExportDeclaration */;
     }
     ts.canHaveModifiers = canHaveModifiers;
     ts.isTypeNodeOrTypeParameterDeclaration = ts.or(ts.isTypeNode, ts.isTypeParameterDeclaration);
@@ -28693,9 +29362,9 @@
     ts.isModuleName = ts.or(ts.isIdentifier, ts.isStringLiteral);
     function isLiteralTypeLikeExpression(node) {
         var kind = node.kind;
-        return kind === 103 /* NullKeyword */
-            || kind === 109 /* TrueKeyword */
-            || kind === 94 /* FalseKeyword */
+        return kind === 104 /* NullKeyword */
+            || kind === 110 /* TrueKeyword */
+            || kind === 95 /* FalseKeyword */
             || ts.isLiteralExpression(node)
             || ts.isPrefixUnaryExpression(node);
     }
@@ -28734,8 +29403,8 @@
             || kind === 32 /* LessThanEqualsToken */
             || kind === 31 /* GreaterThanToken */
             || kind === 33 /* GreaterThanEqualsToken */
-            || kind === 101 /* InstanceOfKeyword */
-            || kind === 100 /* InKeyword */;
+            || kind === 102 /* InstanceOfKeyword */
+            || kind === 101 /* InKeyword */;
     }
     function isRelationalOperatorOrHigher(kind) {
         return isRelationalOperator(kind)
@@ -29029,19 +29698,19 @@
      * that they appear in the source code. The language service depends on this property to locate nodes by position.
      */
     function forEachChild(node, cbNode, cbNodes) {
-        if (!node || node.kind <= 157 /* LastToken */) {
+        if (!node || node.kind <= 158 /* LastToken */) {
             return;
         }
         switch (node.kind) {
-            case 158 /* QualifiedName */:
+            case 159 /* QualifiedName */:
                 return visitNode(cbNode, node.left) ||
                     visitNode(cbNode, node.right);
-            case 160 /* TypeParameter */:
+            case 161 /* TypeParameter */:
                 return visitNode(cbNode, node.name) ||
                     visitNode(cbNode, node.constraint) ||
                     visitNode(cbNode, node.default) ||
                     visitNode(cbNode, node.expression);
-            case 290 /* ShorthandPropertyAssignment */:
+            case 292 /* ShorthandPropertyAssignment */:
                 return visitNodes(cbNode, cbNodes, node.decorators) ||
                     visitNodes(cbNode, cbNodes, node.modifiers) ||
                     visitNode(cbNode, node.name) ||
@@ -29049,9 +29718,9 @@
                     visitNode(cbNode, node.exclamationToken) ||
                     visitNode(cbNode, node.equalsToken) ||
                     visitNode(cbNode, node.objectAssignmentInitializer);
-            case 291 /* SpreadAssignment */:
+            case 293 /* SpreadAssignment */:
                 return visitNode(cbNode, node.expression);
-            case 161 /* Parameter */:
+            case 162 /* Parameter */:
                 return visitNodes(cbNode, cbNodes, node.decorators) ||
                     visitNodes(cbNode, cbNodes, node.modifiers) ||
                     visitNode(cbNode, node.dotDotDotToken) ||
@@ -29059,7 +29728,7 @@
                     visitNode(cbNode, node.questionToken) ||
                     visitNode(cbNode, node.type) ||
                     visitNode(cbNode, node.initializer);
-            case 164 /* PropertyDeclaration */:
+            case 165 /* PropertyDeclaration */:
                 return visitNodes(cbNode, cbNodes, node.decorators) ||
                     visitNodes(cbNode, cbNodes, node.modifiers) ||
                     visitNode(cbNode, node.name) ||
@@ -29067,51 +29736,51 @@
                     visitNode(cbNode, node.exclamationToken) ||
                     visitNode(cbNode, node.type) ||
                     visitNode(cbNode, node.initializer);
-            case 163 /* PropertySignature */:
+            case 164 /* PropertySignature */:
                 return visitNodes(cbNode, cbNodes, node.decorators) ||
                     visitNodes(cbNode, cbNodes, node.modifiers) ||
                     visitNode(cbNode, node.name) ||
                     visitNode(cbNode, node.questionToken) ||
                     visitNode(cbNode, node.type) ||
                     visitNode(cbNode, node.initializer);
-            case 289 /* PropertyAssignment */:
+            case 291 /* PropertyAssignment */:
                 return visitNodes(cbNode, cbNodes, node.decorators) ||
                     visitNodes(cbNode, cbNodes, node.modifiers) ||
                     visitNode(cbNode, node.name) ||
                     visitNode(cbNode, node.questionToken) ||
                     visitNode(cbNode, node.initializer);
-            case 250 /* VariableDeclaration */:
+            case 252 /* VariableDeclaration */:
                 return visitNodes(cbNode, cbNodes, node.decorators) ||
                     visitNodes(cbNode, cbNodes, node.modifiers) ||
                     visitNode(cbNode, node.name) ||
                     visitNode(cbNode, node.exclamationToken) ||
                     visitNode(cbNode, node.type) ||
                     visitNode(cbNode, node.initializer);
-            case 199 /* BindingElement */:
+            case 201 /* BindingElement */:
                 return visitNodes(cbNode, cbNodes, node.decorators) ||
                     visitNodes(cbNode, cbNodes, node.modifiers) ||
                     visitNode(cbNode, node.dotDotDotToken) ||
                     visitNode(cbNode, node.propertyName) ||
                     visitNode(cbNode, node.name) ||
                     visitNode(cbNode, node.initializer);
-            case 175 /* FunctionType */:
-            case 176 /* ConstructorType */:
-            case 170 /* CallSignature */:
-            case 171 /* ConstructSignature */:
-            case 172 /* IndexSignature */:
+            case 177 /* FunctionType */:
+            case 178 /* ConstructorType */:
+            case 172 /* CallSignature */:
+            case 173 /* ConstructSignature */:
+            case 174 /* IndexSignature */:
                 return visitNodes(cbNode, cbNodes, node.decorators) ||
                     visitNodes(cbNode, cbNodes, node.modifiers) ||
                     visitNodes(cbNode, cbNodes, node.typeParameters) ||
                     visitNodes(cbNode, cbNodes, node.parameters) ||
                     visitNode(cbNode, node.type);
-            case 166 /* MethodDeclaration */:
-            case 165 /* MethodSignature */:
-            case 167 /* Constructor */:
-            case 168 /* GetAccessor */:
-            case 169 /* SetAccessor */:
-            case 209 /* FunctionExpression */:
-            case 252 /* FunctionDeclaration */:
-            case 210 /* ArrowFunction */:
+            case 167 /* MethodDeclaration */:
+            case 166 /* MethodSignature */:
+            case 169 /* Constructor */:
+            case 170 /* GetAccessor */:
+            case 171 /* SetAccessor */:
+            case 211 /* FunctionExpression */:
+            case 254 /* FunctionDeclaration */:
+            case 212 /* ArrowFunction */:
                 return visitNodes(cbNode, cbNodes, node.decorators) ||
                     visitNodes(cbNode, cbNodes, node.modifiers) ||
                     visitNode(cbNode, node.asteriskToken) ||
@@ -29123,326 +29792,333 @@
                     visitNode(cbNode, node.type) ||
                     visitNode(cbNode, node.equalsGreaterThanToken) ||
                     visitNode(cbNode, node.body);
-            case 174 /* TypeReference */:
+            case 168 /* ClassStaticBlockDeclaration */:
+                return visitNodes(cbNode, cbNodes, node.decorators) ||
+                    visitNodes(cbNode, cbNodes, node.modifiers) ||
+                    visitNode(cbNode, node.body);
+            case 176 /* TypeReference */:
                 return visitNode(cbNode, node.typeName) ||
                     visitNodes(cbNode, cbNodes, node.typeArguments);
-            case 173 /* TypePredicate */:
+            case 175 /* TypePredicate */:
                 return visitNode(cbNode, node.assertsModifier) ||
                     visitNode(cbNode, node.parameterName) ||
                     visitNode(cbNode, node.type);
-            case 177 /* TypeQuery */:
+            case 179 /* TypeQuery */:
                 return visitNode(cbNode, node.exprName);
-            case 178 /* TypeLiteral */:
+            case 180 /* TypeLiteral */:
                 return visitNodes(cbNode, cbNodes, node.members);
-            case 179 /* ArrayType */:
+            case 181 /* ArrayType */:
                 return visitNode(cbNode, node.elementType);
-            case 180 /* TupleType */:
+            case 182 /* TupleType */:
                 return visitNodes(cbNode, cbNodes, node.elements);
-            case 183 /* UnionType */:
-            case 184 /* IntersectionType */:
+            case 185 /* UnionType */:
+            case 186 /* IntersectionType */:
                 return visitNodes(cbNode, cbNodes, node.types);
-            case 185 /* ConditionalType */:
+            case 187 /* ConditionalType */:
                 return visitNode(cbNode, node.checkType) ||
                     visitNode(cbNode, node.extendsType) ||
                     visitNode(cbNode, node.trueType) ||
                     visitNode(cbNode, node.falseType);
-            case 186 /* InferType */:
+            case 188 /* InferType */:
                 return visitNode(cbNode, node.typeParameter);
-            case 196 /* ImportType */:
+            case 198 /* ImportType */:
                 return visitNode(cbNode, node.argument) ||
                     visitNode(cbNode, node.qualifier) ||
                     visitNodes(cbNode, cbNodes, node.typeArguments);
-            case 187 /* ParenthesizedType */:
-            case 189 /* TypeOperator */:
+            case 189 /* ParenthesizedType */:
+            case 191 /* TypeOperator */:
                 return visitNode(cbNode, node.type);
-            case 190 /* IndexedAccessType */:
+            case 192 /* IndexedAccessType */:
                 return visitNode(cbNode, node.objectType) ||
                     visitNode(cbNode, node.indexType);
-            case 191 /* MappedType */:
+            case 193 /* MappedType */:
                 return visitNode(cbNode, node.readonlyToken) ||
                     visitNode(cbNode, node.typeParameter) ||
                     visitNode(cbNode, node.nameType) ||
                     visitNode(cbNode, node.questionToken) ||
                     visitNode(cbNode, node.type);
-            case 192 /* LiteralType */:
+            case 194 /* LiteralType */:
                 return visitNode(cbNode, node.literal);
-            case 193 /* NamedTupleMember */:
+            case 195 /* NamedTupleMember */:
                 return visitNode(cbNode, node.dotDotDotToken) ||
                     visitNode(cbNode, node.name) ||
                     visitNode(cbNode, node.questionToken) ||
                     visitNode(cbNode, node.type);
-            case 197 /* ObjectBindingPattern */:
-            case 198 /* ArrayBindingPattern */:
+            case 199 /* ObjectBindingPattern */:
+            case 200 /* ArrayBindingPattern */:
                 return visitNodes(cbNode, cbNodes, node.elements);
-            case 200 /* ArrayLiteralExpression */:
+            case 202 /* ArrayLiteralExpression */:
                 return visitNodes(cbNode, cbNodes, node.elements);
-            case 201 /* ObjectLiteralExpression */:
+            case 203 /* ObjectLiteralExpression */:
                 return visitNodes(cbNode, cbNodes, node.properties);
-            case 202 /* PropertyAccessExpression */:
+            case 204 /* PropertyAccessExpression */:
                 return visitNode(cbNode, node.expression) ||
                     visitNode(cbNode, node.questionDotToken) ||
                     visitNode(cbNode, node.name);
-            case 203 /* ElementAccessExpression */:
+            case 205 /* ElementAccessExpression */:
                 return visitNode(cbNode, node.expression) ||
                     visitNode(cbNode, node.questionDotToken) ||
                     visitNode(cbNode, node.argumentExpression);
-            case 204 /* CallExpression */:
-            case 205 /* NewExpression */:
+            case 206 /* CallExpression */:
+            case 207 /* NewExpression */:
                 return visitNode(cbNode, node.expression) ||
                     visitNode(cbNode, node.questionDotToken) ||
                     visitNodes(cbNode, cbNodes, node.typeArguments) ||
                     visitNodes(cbNode, cbNodes, node.arguments);
-            case 206 /* TaggedTemplateExpression */:
+            case 208 /* TaggedTemplateExpression */:
                 return visitNode(cbNode, node.tag) ||
                     visitNode(cbNode, node.questionDotToken) ||
                     visitNodes(cbNode, cbNodes, node.typeArguments) ||
                     visitNode(cbNode, node.template);
-            case 207 /* TypeAssertionExpression */:
+            case 209 /* TypeAssertionExpression */:
                 return visitNode(cbNode, node.type) ||
                     visitNode(cbNode, node.expression);
-            case 208 /* ParenthesizedExpression */:
+            case 210 /* ParenthesizedExpression */:
                 return visitNode(cbNode, node.expression);
-            case 211 /* DeleteExpression */:
+            case 213 /* DeleteExpression */:
                 return visitNode(cbNode, node.expression);
-            case 212 /* TypeOfExpression */:
+            case 214 /* TypeOfExpression */:
                 return visitNode(cbNode, node.expression);
-            case 213 /* VoidExpression */:
+            case 215 /* VoidExpression */:
                 return visitNode(cbNode, node.expression);
-            case 215 /* PrefixUnaryExpression */:
+            case 217 /* PrefixUnaryExpression */:
                 return visitNode(cbNode, node.operand);
-            case 220 /* YieldExpression */:
+            case 222 /* YieldExpression */:
                 return visitNode(cbNode, node.asteriskToken) ||
                     visitNode(cbNode, node.expression);
-            case 214 /* AwaitExpression */:
+            case 216 /* AwaitExpression */:
                 return visitNode(cbNode, node.expression);
-            case 216 /* PostfixUnaryExpression */:
+            case 218 /* PostfixUnaryExpression */:
                 return visitNode(cbNode, node.operand);
-            case 217 /* BinaryExpression */:
+            case 219 /* BinaryExpression */:
                 return visitNode(cbNode, node.left) ||
                     visitNode(cbNode, node.operatorToken) ||
                     visitNode(cbNode, node.right);
-            case 225 /* AsExpression */:
+            case 227 /* AsExpression */:
                 return visitNode(cbNode, node.expression) ||
                     visitNode(cbNode, node.type);
-            case 226 /* NonNullExpression */:
+            case 228 /* NonNullExpression */:
                 return visitNode(cbNode, node.expression);
-            case 227 /* MetaProperty */:
+            case 229 /* MetaProperty */:
                 return visitNode(cbNode, node.name);
-            case 218 /* ConditionalExpression */:
+            case 220 /* ConditionalExpression */:
                 return visitNode(cbNode, node.condition) ||
                     visitNode(cbNode, node.questionToken) ||
                     visitNode(cbNode, node.whenTrue) ||
                     visitNode(cbNode, node.colonToken) ||
                     visitNode(cbNode, node.whenFalse);
-            case 221 /* SpreadElement */:
+            case 223 /* SpreadElement */:
                 return visitNode(cbNode, node.expression);
-            case 231 /* Block */:
-            case 258 /* ModuleBlock */:
+            case 233 /* Block */:
+            case 260 /* ModuleBlock */:
                 return visitNodes(cbNode, cbNodes, node.statements);
-            case 298 /* SourceFile */:
+            case 300 /* SourceFile */:
                 return visitNodes(cbNode, cbNodes, node.statements) ||
                     visitNode(cbNode, node.endOfFileToken);
-            case 233 /* VariableStatement */:
+            case 235 /* VariableStatement */:
                 return visitNodes(cbNode, cbNodes, node.decorators) ||
                     visitNodes(cbNode, cbNodes, node.modifiers) ||
                     visitNode(cbNode, node.declarationList);
-            case 251 /* VariableDeclarationList */:
+            case 253 /* VariableDeclarationList */:
                 return visitNodes(cbNode, cbNodes, node.declarations);
-            case 234 /* ExpressionStatement */:
+            case 236 /* ExpressionStatement */:
                 return visitNode(cbNode, node.expression);
-            case 235 /* IfStatement */:
+            case 237 /* IfStatement */:
                 return visitNode(cbNode, node.expression) ||
                     visitNode(cbNode, node.thenStatement) ||
                     visitNode(cbNode, node.elseStatement);
-            case 236 /* DoStatement */:
+            case 238 /* DoStatement */:
                 return visitNode(cbNode, node.statement) ||
                     visitNode(cbNode, node.expression);
-            case 237 /* WhileStatement */:
+            case 239 /* WhileStatement */:
                 return visitNode(cbNode, node.expression) ||
                     visitNode(cbNode, node.statement);
-            case 238 /* ForStatement */:
+            case 240 /* ForStatement */:
                 return visitNode(cbNode, node.initializer) ||
                     visitNode(cbNode, node.condition) ||
                     visitNode(cbNode, node.incrementor) ||
                     visitNode(cbNode, node.statement);
-            case 239 /* ForInStatement */:
+            case 241 /* ForInStatement */:
                 return visitNode(cbNode, node.initializer) ||
                     visitNode(cbNode, node.expression) ||
                     visitNode(cbNode, node.statement);
-            case 240 /* ForOfStatement */:
+            case 242 /* ForOfStatement */:
                 return visitNode(cbNode, node.awaitModifier) ||
                     visitNode(cbNode, node.initializer) ||
                     visitNode(cbNode, node.expression) ||
                     visitNode(cbNode, node.statement);
-            case 241 /* ContinueStatement */:
-            case 242 /* BreakStatement */:
+            case 243 /* ContinueStatement */:
+            case 244 /* BreakStatement */:
                 return visitNode(cbNode, node.label);
-            case 243 /* ReturnStatement */:
+            case 245 /* ReturnStatement */:
                 return visitNode(cbNode, node.expression);
-            case 244 /* WithStatement */:
+            case 246 /* WithStatement */:
                 return visitNode(cbNode, node.expression) ||
                     visitNode(cbNode, node.statement);
-            case 245 /* SwitchStatement */:
+            case 247 /* SwitchStatement */:
                 return visitNode(cbNode, node.expression) ||
                     visitNode(cbNode, node.caseBlock);
-            case 259 /* CaseBlock */:
+            case 261 /* CaseBlock */:
                 return visitNodes(cbNode, cbNodes, node.clauses);
-            case 285 /* CaseClause */:
+            case 287 /* CaseClause */:
                 return visitNode(cbNode, node.expression) ||
                     visitNodes(cbNode, cbNodes, node.statements);
-            case 286 /* DefaultClause */:
+            case 288 /* DefaultClause */:
                 return visitNodes(cbNode, cbNodes, node.statements);
-            case 246 /* LabeledStatement */:
+            case 248 /* LabeledStatement */:
                 return visitNode(cbNode, node.label) ||
                     visitNode(cbNode, node.statement);
-            case 247 /* ThrowStatement */:
+            case 249 /* ThrowStatement */:
                 return visitNode(cbNode, node.expression);
-            case 248 /* TryStatement */:
+            case 250 /* TryStatement */:
                 return visitNode(cbNode, node.tryBlock) ||
                     visitNode(cbNode, node.catchClause) ||
                     visitNode(cbNode, node.finallyBlock);
-            case 288 /* CatchClause */:
+            case 290 /* CatchClause */:
                 return visitNode(cbNode, node.variableDeclaration) ||
                     visitNode(cbNode, node.block);
-            case 162 /* Decorator */:
+            case 163 /* Decorator */:
                 return visitNode(cbNode, node.expression);
-            case 253 /* ClassDeclaration */:
-            case 222 /* ClassExpression */:
+            case 255 /* ClassDeclaration */:
+            case 224 /* ClassExpression */:
                 return visitNodes(cbNode, cbNodes, node.decorators) ||
                     visitNodes(cbNode, cbNodes, node.modifiers) ||
                     visitNode(cbNode, node.name) ||
                     visitNodes(cbNode, cbNodes, node.typeParameters) ||
                     visitNodes(cbNode, cbNodes, node.heritageClauses) ||
                     visitNodes(cbNode, cbNodes, node.members);
-            case 254 /* InterfaceDeclaration */:
+            case 256 /* InterfaceDeclaration */:
                 return visitNodes(cbNode, cbNodes, node.decorators) ||
                     visitNodes(cbNode, cbNodes, node.modifiers) ||
                     visitNode(cbNode, node.name) ||
                     visitNodes(cbNode, cbNodes, node.typeParameters) ||
                     visitNodes(cbNode, cbNodes, node.heritageClauses) ||
                     visitNodes(cbNode, cbNodes, node.members);
-            case 255 /* TypeAliasDeclaration */:
+            case 257 /* TypeAliasDeclaration */:
                 return visitNodes(cbNode, cbNodes, node.decorators) ||
                     visitNodes(cbNode, cbNodes, node.modifiers) ||
                     visitNode(cbNode, node.name) ||
                     visitNodes(cbNode, cbNodes, node.typeParameters) ||
                     visitNode(cbNode, node.type);
-            case 256 /* EnumDeclaration */:
+            case 258 /* EnumDeclaration */:
                 return visitNodes(cbNode, cbNodes, node.decorators) ||
                     visitNodes(cbNode, cbNodes, node.modifiers) ||
                     visitNode(cbNode, node.name) ||
                     visitNodes(cbNode, cbNodes, node.members);
-            case 292 /* EnumMember */:
+            case 294 /* EnumMember */:
                 return visitNode(cbNode, node.name) ||
                     visitNode(cbNode, node.initializer);
-            case 257 /* ModuleDeclaration */:
+            case 259 /* ModuleDeclaration */:
                 return visitNodes(cbNode, cbNodes, node.decorators) ||
                     visitNodes(cbNode, cbNodes, node.modifiers) ||
                     visitNode(cbNode, node.name) ||
                     visitNode(cbNode, node.body);
-            case 261 /* ImportEqualsDeclaration */:
+            case 263 /* ImportEqualsDeclaration */:
                 return visitNodes(cbNode, cbNodes, node.decorators) ||
                     visitNodes(cbNode, cbNodes, node.modifiers) ||
                     visitNode(cbNode, node.name) ||
                     visitNode(cbNode, node.moduleReference);
-            case 262 /* ImportDeclaration */:
+            case 264 /* ImportDeclaration */:
                 return visitNodes(cbNode, cbNodes, node.decorators) ||
                     visitNodes(cbNode, cbNodes, node.modifiers) ||
                     visitNode(cbNode, node.importClause) ||
                     visitNode(cbNode, node.moduleSpecifier);
-            case 263 /* ImportClause */:
+            case 265 /* ImportClause */:
                 return visitNode(cbNode, node.name) ||
                     visitNode(cbNode, node.namedBindings);
-            case 260 /* NamespaceExportDeclaration */:
+            case 262 /* NamespaceExportDeclaration */:
                 return visitNode(cbNode, node.name);
-            case 264 /* NamespaceImport */:
+            case 266 /* NamespaceImport */:
                 return visitNode(cbNode, node.name);
-            case 270 /* NamespaceExport */:
+            case 272 /* NamespaceExport */:
                 return visitNode(cbNode, node.name);
-            case 265 /* NamedImports */:
-            case 269 /* NamedExports */:
+            case 267 /* NamedImports */:
+            case 271 /* NamedExports */:
                 return visitNodes(cbNode, cbNodes, node.elements);
-            case 268 /* ExportDeclaration */:
+            case 270 /* ExportDeclaration */:
                 return visitNodes(cbNode, cbNodes, node.decorators) ||
                     visitNodes(cbNode, cbNodes, node.modifiers) ||
                     visitNode(cbNode, node.exportClause) ||
                     visitNode(cbNode, node.moduleSpecifier);
-            case 266 /* ImportSpecifier */:
-            case 271 /* ExportSpecifier */:
+            case 268 /* ImportSpecifier */:
+            case 273 /* ExportSpecifier */:
                 return visitNode(cbNode, node.propertyName) ||
                     visitNode(cbNode, node.name);
-            case 267 /* ExportAssignment */:
+            case 269 /* ExportAssignment */:
                 return visitNodes(cbNode, cbNodes, node.decorators) ||
                     visitNodes(cbNode, cbNodes, node.modifiers) ||
                     visitNode(cbNode, node.expression);
-            case 219 /* TemplateExpression */:
+            case 221 /* TemplateExpression */:
                 return visitNode(cbNode, node.head) || visitNodes(cbNode, cbNodes, node.templateSpans);
-            case 229 /* TemplateSpan */:
+            case 231 /* TemplateSpan */:
                 return visitNode(cbNode, node.expression) || visitNode(cbNode, node.literal);
-            case 194 /* TemplateLiteralType */:
+            case 196 /* TemplateLiteralType */:
                 return visitNode(cbNode, node.head) || visitNodes(cbNode, cbNodes, node.templateSpans);
-            case 195 /* TemplateLiteralTypeSpan */:
+            case 197 /* TemplateLiteralTypeSpan */:
                 return visitNode(cbNode, node.type) || visitNode(cbNode, node.literal);
-            case 159 /* ComputedPropertyName */:
+            case 160 /* ComputedPropertyName */:
                 return visitNode(cbNode, node.expression);
-            case 287 /* HeritageClause */:
+            case 289 /* HeritageClause */:
                 return visitNodes(cbNode, cbNodes, node.types);
-            case 224 /* ExpressionWithTypeArguments */:
+            case 226 /* ExpressionWithTypeArguments */:
                 return visitNode(cbNode, node.expression) ||
                     visitNodes(cbNode, cbNodes, node.typeArguments);
-            case 273 /* ExternalModuleReference */:
+            case 275 /* ExternalModuleReference */:
                 return visitNode(cbNode, node.expression);
-            case 272 /* MissingDeclaration */:
+            case 274 /* MissingDeclaration */:
                 return visitNodes(cbNode, cbNodes, node.decorators);
-            case 341 /* CommaListExpression */:
+            case 346 /* CommaListExpression */:
                 return visitNodes(cbNode, cbNodes, node.elements);
-            case 274 /* JsxElement */:
+            case 276 /* JsxElement */:
                 return visitNode(cbNode, node.openingElement) ||
                     visitNodes(cbNode, cbNodes, node.children) ||
                     visitNode(cbNode, node.closingElement);
-            case 278 /* JsxFragment */:
+            case 280 /* JsxFragment */:
                 return visitNode(cbNode, node.openingFragment) ||
                     visitNodes(cbNode, cbNodes, node.children) ||
                     visitNode(cbNode, node.closingFragment);
-            case 275 /* JsxSelfClosingElement */:
-            case 276 /* JsxOpeningElement */:
+            case 277 /* JsxSelfClosingElement */:
+            case 278 /* JsxOpeningElement */:
                 return visitNode(cbNode, node.tagName) ||
                     visitNodes(cbNode, cbNodes, node.typeArguments) ||
                     visitNode(cbNode, node.attributes);
-            case 282 /* JsxAttributes */:
+            case 284 /* JsxAttributes */:
                 return visitNodes(cbNode, cbNodes, node.properties);
-            case 281 /* JsxAttribute */:
+            case 283 /* JsxAttribute */:
                 return visitNode(cbNode, node.name) ||
                     visitNode(cbNode, node.initializer);
-            case 283 /* JsxSpreadAttribute */:
+            case 285 /* JsxSpreadAttribute */:
                 return visitNode(cbNode, node.expression);
-            case 284 /* JsxExpression */:
+            case 286 /* JsxExpression */:
                 return visitNode(cbNode, node.dotDotDotToken) ||
                     visitNode(cbNode, node.expression);
-            case 277 /* JsxClosingElement */:
+            case 279 /* JsxClosingElement */:
                 return visitNode(cbNode, node.tagName);
-            case 181 /* OptionalType */:
-            case 182 /* RestType */:
-            case 302 /* JSDocTypeExpression */:
-            case 307 /* JSDocNonNullableType */:
-            case 306 /* JSDocNullableType */:
-            case 308 /* JSDocOptionalType */:
-            case 310 /* JSDocVariadicType */:
+            case 183 /* OptionalType */:
+            case 184 /* RestType */:
+            case 304 /* JSDocTypeExpression */:
+            case 310 /* JSDocNonNullableType */:
+            case 309 /* JSDocNullableType */:
+            case 311 /* JSDocOptionalType */:
+            case 313 /* JSDocVariadicType */:
                 return visitNode(cbNode, node.type);
-            case 309 /* JSDocFunctionType */:
+            case 312 /* JSDocFunctionType */:
                 return visitNodes(cbNode, cbNodes, node.parameters) ||
                     visitNode(cbNode, node.type);
-            case 312 /* JSDocComment */:
+            case 315 /* JSDocComment */:
                 return (typeof node.comment === "string" ? undefined : visitNodes(cbNode, cbNodes, node.comment))
                     || visitNodes(cbNode, cbNodes, node.tags);
-            case 336 /* JSDocSeeTag */:
+            case 341 /* JSDocSeeTag */:
                 return visitNode(cbNode, node.tagName) ||
                     visitNode(cbNode, node.name) ||
                     (typeof node.comment === "string" ? undefined : visitNodes(cbNode, cbNodes, node.comment));
-            case 303 /* JSDocNameReference */:
+            case 305 /* JSDocNameReference */:
                 return visitNode(cbNode, node.name);
-            case 330 /* JSDocParameterTag */:
-            case 337 /* JSDocPropertyTag */:
+            case 306 /* JSDocMemberName */:
+                return visitNode(cbNode, node.left) ||
+                    visitNode(cbNode, node.right);
+            case 335 /* JSDocParameterTag */:
+            case 342 /* JSDocPropertyTag */:
                 return visitNode(cbNode, node.tagName) ||
                     (node.isNameFirst
                         ? visitNode(cbNode, node.name) ||
@@ -29451,62 +30127,64 @@
                         : visitNode(cbNode, node.typeExpression) ||
                             visitNode(cbNode, node.name) ||
                             (typeof node.comment === "string" ? undefined : visitNodes(cbNode, cbNodes, node.comment)));
-            case 320 /* JSDocAuthorTag */:
+            case 325 /* JSDocAuthorTag */:
                 return visitNode(cbNode, node.tagName) ||
                     (typeof node.comment === "string" ? undefined : visitNodes(cbNode, cbNodes, node.comment));
-            case 319 /* JSDocImplementsTag */:
+            case 324 /* JSDocImplementsTag */:
                 return visitNode(cbNode, node.tagName) ||
                     visitNode(cbNode, node.class) ||
                     (typeof node.comment === "string" ? undefined : visitNodes(cbNode, cbNodes, node.comment));
-            case 318 /* JSDocAugmentsTag */:
+            case 323 /* JSDocAugmentsTag */:
                 return visitNode(cbNode, node.tagName) ||
                     visitNode(cbNode, node.class) ||
                     (typeof node.comment === "string" ? undefined : visitNodes(cbNode, cbNodes, node.comment));
-            case 334 /* JSDocTemplateTag */:
+            case 339 /* JSDocTemplateTag */:
                 return visitNode(cbNode, node.tagName) ||
                     visitNode(cbNode, node.constraint) ||
                     visitNodes(cbNode, cbNodes, node.typeParameters) ||
                     (typeof node.comment === "string" ? undefined : visitNodes(cbNode, cbNodes, node.comment));
-            case 335 /* JSDocTypedefTag */:
+            case 340 /* JSDocTypedefTag */:
                 return visitNode(cbNode, node.tagName) ||
                     (node.typeExpression &&
-                        node.typeExpression.kind === 302 /* JSDocTypeExpression */
+                        node.typeExpression.kind === 304 /* JSDocTypeExpression */
                         ? visitNode(cbNode, node.typeExpression) ||
                             visitNode(cbNode, node.fullName) ||
                             (typeof node.comment === "string" ? undefined : visitNodes(cbNode, cbNodes, node.comment))
                         : visitNode(cbNode, node.fullName) ||
-                            visitNode(cbNode, node.typeExpression)) ||
-                    (typeof node.comment === "string" ? undefined : visitNodes(cbNode, cbNodes, node.comment));
-            case 328 /* JSDocCallbackTag */:
+                            visitNode(cbNode, node.typeExpression) ||
+                            (typeof node.comment === "string" ? undefined : visitNodes(cbNode, cbNodes, node.comment)));
+            case 333 /* JSDocCallbackTag */:
                 return visitNode(cbNode, node.tagName) ||
                     visitNode(cbNode, node.fullName) ||
                     visitNode(cbNode, node.typeExpression) ||
                     (typeof node.comment === "string" ? undefined : visitNodes(cbNode, cbNodes, node.comment));
-            case 331 /* JSDocReturnTag */:
-            case 333 /* JSDocTypeTag */:
-            case 332 /* JSDocThisTag */:
-            case 329 /* JSDocEnumTag */:
+            case 336 /* JSDocReturnTag */:
+            case 338 /* JSDocTypeTag */:
+            case 337 /* JSDocThisTag */:
+            case 334 /* JSDocEnumTag */:
                 return visitNode(cbNode, node.tagName) ||
                     visitNode(cbNode, node.typeExpression) ||
                     (typeof node.comment === "string" ? undefined : visitNodes(cbNode, cbNodes, node.comment));
-            case 315 /* JSDocSignature */:
+            case 318 /* JSDocSignature */:
                 return ts.forEach(node.typeParameters, cbNode) ||
                     ts.forEach(node.parameters, cbNode) ||
                     visitNode(cbNode, node.type);
-            case 316 /* JSDocLink */:
+            case 319 /* JSDocLink */:
+            case 320 /* JSDocLinkCode */:
+            case 321 /* JSDocLinkPlain */:
                 return visitNode(cbNode, node.name);
-            case 314 /* JSDocTypeLiteral */:
+            case 317 /* JSDocTypeLiteral */:
                 return ts.forEach(node.jsDocPropertyTags, cbNode);
-            case 317 /* JSDocTag */:
-            case 322 /* JSDocClassTag */:
-            case 323 /* JSDocPublicTag */:
-            case 324 /* JSDocPrivateTag */:
-            case 325 /* JSDocProtectedTag */:
-            case 326 /* JSDocReadonlyTag */:
-            case 321 /* JSDocDeprecatedTag */:
+            case 322 /* JSDocTag */:
+            case 327 /* JSDocClassTag */:
+            case 328 /* JSDocPublicTag */:
+            case 329 /* JSDocPrivateTag */:
+            case 330 /* JSDocProtectedTag */:
+            case 331 /* JSDocReadonlyTag */:
+            case 326 /* JSDocDeprecatedTag */:
                 return visitNode(cbNode, node.tagName)
                     || (typeof node.comment === "string" ? undefined : visitNodes(cbNode, cbNodes, node.comment));
-            case 340 /* PartiallyEmittedExpression */:
+            case 345 /* PartiallyEmittedExpression */:
                 return visitNode(cbNode, node.expression);
         }
     }
@@ -29555,7 +30233,7 @@
                         continue;
                     return res;
                 }
-                if (current.kind >= 158 /* FirstNode */) {
+                if (current.kind >= 159 /* FirstNode */) {
                     // add children in reverse order to the queue, so popping gives the first child
                     for (var _i = 0, _a = gatherPossibleChildren(current); _i < _a.length; _i++) {
                         var child = _a[_i];
@@ -29826,9 +30504,9 @@
                         case 22 /* OpenBracketToken */:
                             expression_1 = parseArrayLiteralExpression();
                             break;
-                        case 109 /* TrueKeyword */:
-                        case 94 /* FalseKeyword */:
-                        case 103 /* NullKeyword */:
+                        case 110 /* TrueKeyword */:
+                        case 95 /* FalseKeyword */:
+                        case 104 /* NullKeyword */:
                             expression_1 = parseTokenNode();
                             break;
                         case 40 /* MinusToken */:
@@ -30280,6 +30958,9 @@
         function reScanLessThanToken() {
             return currentToken = scanner.reScanLessThanToken();
         }
+        function reScanHashToken() {
+            return currentToken = scanner.reScanHashToken();
+        }
         function scanJsxIdentifier() {
             return currentToken = scanner.scanJsxIdentifier();
         }
@@ -30334,27 +31015,28 @@
             return speculationHelper(callback, 0 /* TryParse */);
         }
         function isBindingIdentifier() {
-            if (token() === 78 /* Identifier */) {
+            if (token() === 79 /* Identifier */) {
                 return true;
             }
-            return token() > 115 /* LastReservedWord */;
+            // `let await`/`let yield` in [Yield] or [Await] are allowed here and disallowed in the binder.
+            return token() > 116 /* LastReservedWord */;
         }
         // Ignore strict mode flag because we will report an error in type checker instead.
         function isIdentifier() {
-            if (token() === 78 /* Identifier */) {
+            if (token() === 79 /* Identifier */) {
                 return true;
             }
             // If we have a 'yield' keyword, and we're in the [yield] context, then 'yield' is
             // considered a keyword and is not an identifier.
-            if (token() === 124 /* YieldKeyword */ && inYieldContext()) {
+            if (token() === 125 /* YieldKeyword */ && inYieldContext()) {
                 return false;
             }
             // If we have a 'await' keyword, and we're in the [Await] context, then 'await' is
             // considered a keyword and is not an identifier.
-            if (token() === 130 /* AwaitKeyword */ && inAwaitContext()) {
+            if (token() === 131 /* AwaitKeyword */ && inAwaitContext()) {
                 return false;
             }
-            return token() > 115 /* LastReservedWord */;
+            return token() > 116 /* LastReservedWord */;
         }
         function parseExpected(kind, diagnosticMessage, shouldAdvance) {
             if (shouldAdvance === void 0) { shouldAdvance = true; }
@@ -30373,6 +31055,128 @@
             }
             return false;
         }
+        var viableKeywordSuggestions = Object.keys(ts.textToKeywordObj).filter(function (keyword) { return keyword.length > 2; });
+        /**
+         * Provides a better error message than the generic "';' expected" if possible for
+         * known common variants of a missing semicolon, such as from a mispelled names.
+         *
+         * @param node Node preceding the expected semicolon location.
+         */
+        function parseErrorForMissingSemicolonAfter(node) {
+            var _a;
+            // Tagged template literals are sometimes used in places where only simple strings are allowed, i.e.:
+            //   module `M1` {
+            //   ^^^^^^^^^^^ This block is parsed as a template literal like module`M1`.
+            if (ts.isTaggedTemplateExpression(node)) {
+                parseErrorAt(ts.skipTrivia(sourceText, node.template.pos), node.template.end, ts.Diagnostics.Module_declaration_names_may_only_use_or_quoted_strings);
+                return;
+            }
+            // Otherwise, if this isn't a well-known keyword-like identifier, give the generic fallback message.
+            var expressionText = ts.isIdentifier(node) ? ts.idText(node) : undefined;
+            if (!expressionText || !ts.isIdentifierText(expressionText, languageVersion)) {
+                parseErrorAtCurrentToken(ts.Diagnostics._0_expected, ts.tokenToString(26 /* SemicolonToken */));
+                return;
+            }
+            var pos = ts.skipTrivia(sourceText, node.pos);
+            // Some known keywords are likely signs of syntax being used improperly.
+            switch (expressionText) {
+                case "const":
+                case "let":
+                case "var":
+                    parseErrorAt(pos, node.end, ts.Diagnostics.Variable_declaration_not_allowed_at_this_location);
+                    return;
+                case "declare":
+                    // If a declared node failed to parse, it would have emitted a diagnostic already.
+                    return;
+                case "interface":
+                    parseErrorForInvalidName(ts.Diagnostics.Interface_name_cannot_be_0, ts.Diagnostics.Interface_must_be_given_a_name, 18 /* OpenBraceToken */);
+                    return;
+                case "is":
+                    parseErrorAt(pos, scanner.getTextPos(), ts.Diagnostics.A_type_predicate_is_only_allowed_in_return_type_position_for_functions_and_methods);
+                    return;
+                case "module":
+                case "namespace":
+                    parseErrorForInvalidName(ts.Diagnostics.Namespace_name_cannot_be_0, ts.Diagnostics.Namespace_must_be_given_a_name, 18 /* OpenBraceToken */);
+                    return;
+                case "type":
+                    parseErrorForInvalidName(ts.Diagnostics.Type_alias_name_cannot_be_0, ts.Diagnostics.Type_alias_must_be_given_a_name, 63 /* EqualsToken */);
+                    return;
+            }
+            // The user alternatively might have misspelled or forgotten to add a space after a common keyword.
+            var suggestion = (_a = ts.getSpellingSuggestion(expressionText, viableKeywordSuggestions, function (n) { return n; })) !== null && _a !== void 0 ? _a : getSpaceSuggestion(expressionText);
+            if (suggestion) {
+                parseErrorAt(pos, node.end, ts.Diagnostics.Unknown_keyword_or_identifier_Did_you_mean_0, suggestion);
+                return;
+            }
+            // Unknown tokens are handled with their own errors in the scanner
+            if (token() === 0 /* Unknown */) {
+                return;
+            }
+            // Otherwise, we know this some kind of unknown word, not just a missing expected semicolon.
+            parseErrorAt(pos, node.end, ts.Diagnostics.Unexpected_keyword_or_identifier);
+        }
+        /**
+         * Reports a diagnostic error for the current token being an invalid name.
+         *
+         * @param blankDiagnostic Diagnostic to report for the case of the name being blank (matched tokenIfBlankName).
+         * @param nameDiagnostic Diagnostic to report for all other cases.
+         * @param tokenIfBlankName Current token if the name was invalid for being blank (not provided / skipped).
+         */
+        function parseErrorForInvalidName(nameDiagnostic, blankDiagnostic, tokenIfBlankName) {
+            if (token() === tokenIfBlankName) {
+                parseErrorAtCurrentToken(blankDiagnostic);
+            }
+            else {
+                parseErrorAtCurrentToken(nameDiagnostic, ts.tokenToString(token()));
+            }
+        }
+        function getSpaceSuggestion(expressionText) {
+            for (var _i = 0, viableKeywordSuggestions_1 = viableKeywordSuggestions; _i < viableKeywordSuggestions_1.length; _i++) {
+                var keyword = viableKeywordSuggestions_1[_i];
+                if (expressionText.length > keyword.length + 2 && ts.startsWith(expressionText, keyword)) {
+                    return keyword + " " + expressionText.slice(keyword.length);
+                }
+            }
+            return undefined;
+        }
+        function parseSemicolonAfterPropertyName(name, type, initializer) {
+            if (token() === 59 /* AtToken */ && !scanner.hasPrecedingLineBreak()) {
+                parseErrorAtCurrentToken(ts.Diagnostics.Decorators_must_precede_the_name_and_all_keywords_of_property_declarations);
+                return;
+            }
+            if (token() === 20 /* OpenParenToken */) {
+                parseErrorAtCurrentToken(ts.Diagnostics.Cannot_start_a_function_call_in_a_type_annotation);
+                nextToken();
+                return;
+            }
+            if (type && !canParseSemicolon()) {
+                if (initializer) {
+                    parseErrorAtCurrentToken(ts.Diagnostics._0_expected, ts.tokenToString(26 /* SemicolonToken */));
+                }
+                else {
+                    parseErrorAtCurrentToken(ts.Diagnostics.Expected_for_property_initializer);
+                }
+                return;
+            }
+            if (tryParseSemicolon()) {
+                return;
+            }
+            // If an initializer was parsed but there is still an error in finding the next semicolon,
+            // we generally know there was an error already reported in the initializer...
+            //   class Example { a = new Map([), ) }
+            //                                ~
+            if (initializer) {
+                // ...unless we've found the start of a block after a property declaration, in which
+                // case we can know that regardless of the initializer we should complain on the block.
+                //   class Example { a = 0 {} }
+                //                         ~
+                if (token() === 18 /* OpenBraceToken */) {
+                    parseErrorAtCurrentToken(ts.Diagnostics._0_expected, ts.tokenToString(26 /* SemicolonToken */));
+                }
+                return;
+            }
+            parseErrorForMissingSemicolonAfter(name);
+        }
         function parseExpectedJSDoc(kind) {
             if (token() === kind) {
                 nextTokenJSDoc();
@@ -30428,17 +31232,18 @@
             // We can parse out an optional semicolon in ASI cases in the following cases.
             return token() === 19 /* CloseBraceToken */ || token() === 1 /* EndOfFileToken */ || scanner.hasPrecedingLineBreak();
         }
+        function tryParseSemicolon() {
+            if (!canParseSemicolon()) {
+                return false;
+            }
+            if (token() === 26 /* SemicolonToken */) {
+                // consume the semicolon if it was explicitly provided.
+                nextToken();
+            }
+            return true;
+        }
         function parseSemicolon() {
-            if (canParseSemicolon()) {
-                if (token() === 26 /* SemicolonToken */) {
-                    // consume the semicolon if it was explicitly provided.
-                    nextToken();
-                }
-                return true;
-            }
-            else {
-                return parseExpected(26 /* SemicolonToken */);
-            }
+            return tryParseSemicolon() || parseExpected(26 /* SemicolonToken */);
         }
         function createNodeArray(elements, pos, end, hasTrailingComma) {
             var array = factory.createNodeArray(elements, hasTrailingComma);
@@ -30467,11 +31272,11 @@
                 parseErrorAtCurrentToken(diagnosticMessage, arg0);
             }
             var pos = getNodePos();
-            var result = kind === 78 /* Identifier */ ? factory.createIdentifier("", /*typeArguments*/ undefined, /*originalKeywordKind*/ undefined) :
+            var result = kind === 79 /* Identifier */ ? factory.createIdentifier("", /*typeArguments*/ undefined, /*originalKeywordKind*/ undefined) :
                 ts.isTemplateLiteralKind(kind) ? factory.createTemplateLiteralLikeNode(kind, "", "", /*templateFlags*/ undefined) :
                     kind === 8 /* NumericLiteral */ ? factory.createNumericLiteral("", /*numericLiteralFlags*/ undefined) :
                         kind === 10 /* StringLiteral */ ? factory.createStringLiteral("", /*isSingleQuote*/ undefined) :
-                            kind === 272 /* MissingDeclaration */ ? factory.createMissingDeclaration() :
+                            kind === 274 /* MissingDeclaration */ ? factory.createMissingDeclaration() :
                                 factory.createToken(kind);
             return finishNode(result, pos);
         }
@@ -30495,11 +31300,11 @@
                 nextTokenWithoutCheck();
                 return finishNode(factory.createIdentifier(text, /*typeArguments*/ undefined, originalKeywordKind), pos);
             }
-            if (token() === 79 /* PrivateIdentifier */) {
+            if (token() === 80 /* PrivateIdentifier */) {
                 parseErrorAtCurrentToken(privateIdentifierDiagnosticMessage || ts.Diagnostics.Private_identifiers_are_not_allowed_outside_class_bodies);
                 return createIdentifier(/*isIdentifier*/ true);
             }
-            if (token() === 0 /* Unknown */ && scanner.tryScan(function () { return scanner.reScanInvalidIdentifier() === 78 /* Identifier */; })) {
+            if (token() === 0 /* Unknown */ && scanner.tryScan(function () { return scanner.reScanInvalidIdentifier() === 79 /* Identifier */; })) {
                 // Scanner has already recorded an 'Invalid character' error, so no need to add another from the parser.
                 return createIdentifier(/*isIdentifier*/ true);
             }
@@ -30511,7 +31316,7 @@
             var defaultMessage = isReservedWord ?
                 ts.Diagnostics.Identifier_expected_0_is_a_reserved_word_that_cannot_be_used_here :
                 ts.Diagnostics.Identifier_expected;
-            return createMissingNode(78 /* Identifier */, reportAtCurrentPosition, diagnosticMessage || defaultMessage, msgArg);
+            return createMissingNode(79 /* Identifier */, reportAtCurrentPosition, diagnosticMessage || defaultMessage, msgArg);
         }
         function parseBindingIdentifier(privateIdentifierDiagnosticMessage) {
             return createIdentifier(isBindingIdentifier(), /*diagnosticMessage*/ undefined, privateIdentifierDiagnosticMessage);
@@ -30536,7 +31341,7 @@
             if (allowComputedPropertyNames && token() === 22 /* OpenBracketToken */) {
                 return parseComputedPropertyName();
             }
-            if (token() === 79 /* PrivateIdentifier */) {
+            if (token() === 80 /* PrivateIdentifier */) {
                 return parsePrivateIdentifier();
             }
             return parseIdentifierName();
@@ -30582,24 +31387,24 @@
         }
         function nextTokenCanFollowModifier() {
             switch (token()) {
-                case 84 /* ConstKeyword */:
+                case 85 /* ConstKeyword */:
                     // 'const' is only a modifier if followed by 'enum'.
-                    return nextToken() === 91 /* EnumKeyword */;
-                case 92 /* ExportKeyword */:
+                    return nextToken() === 92 /* EnumKeyword */;
+                case 93 /* ExportKeyword */:
                     nextToken();
-                    if (token() === 87 /* DefaultKeyword */) {
+                    if (token() === 88 /* DefaultKeyword */) {
                         return lookAhead(nextTokenCanFollowDefaultKeyword);
                     }
-                    if (token() === 149 /* TypeKeyword */) {
+                    if (token() === 150 /* TypeKeyword */) {
                         return lookAhead(nextTokenCanFollowExportModifier);
                     }
                     return canFollowExportModifier();
-                case 87 /* DefaultKeyword */:
+                case 88 /* DefaultKeyword */:
                     return nextTokenCanFollowDefaultKeyword();
-                case 123 /* StaticKeyword */:
+                case 124 /* StaticKeyword */:
                     return nextTokenIsOnSameLineAndCanFollowModifier();
-                case 134 /* GetKeyword */:
-                case 146 /* SetKeyword */:
+                case 135 /* GetKeyword */:
+                case 147 /* SetKeyword */:
                     nextToken();
                     return canFollowModifier();
                 default:
@@ -30608,7 +31413,7 @@
         }
         function canFollowExportModifier() {
             return token() !== 41 /* AsteriskToken */
-                && token() !== 126 /* AsKeyword */
+                && token() !== 127 /* AsKeyword */
                 && token() !== 18 /* OpenBraceToken */
                 && canFollowModifier();
         }
@@ -30628,10 +31433,10 @@
         }
         function nextTokenCanFollowDefaultKeyword() {
             nextToken();
-            return token() === 83 /* ClassKeyword */ || token() === 97 /* FunctionKeyword */ ||
-                token() === 117 /* InterfaceKeyword */ ||
-                (token() === 125 /* AbstractKeyword */ && lookAhead(nextTokenIsClassKeywordOnSameLine)) ||
-                (token() === 129 /* AsyncKeyword */ && lookAhead(nextTokenIsFunctionKeywordOnSameLine));
+            return token() === 84 /* ClassKeyword */ || token() === 98 /* FunctionKeyword */ ||
+                token() === 118 /* InterfaceKeyword */ ||
+                (token() === 126 /* AbstractKeyword */ && lookAhead(nextTokenIsClassKeywordOnSameLine)) ||
+                (token() === 130 /* AsyncKeyword */ && lookAhead(nextTokenIsFunctionKeywordOnSameLine));
         }
         // True if positioned at the start of a list element
         function isListElement(parsingContext, inErrorRecovery) {
@@ -30651,7 +31456,7 @@
                     // outer module.  We just want to consume and move on.
                     return !(token() === 26 /* SemicolonToken */ && inErrorRecovery) && isStartOfStatement();
                 case 2 /* SwitchClauses */:
-                    return token() === 81 /* CaseKeyword */ || token() === 87 /* DefaultKeyword */;
+                    return token() === 82 /* CaseKeyword */ || token() === 88 /* DefaultKeyword */;
                 case 4 /* TypeMembers */:
                     return lookAhead(isTypeMemberStart);
                 case 5 /* ClassMembers */:
@@ -30737,7 +31542,7 @@
                 //      extends {} extends
                 //      extends {} implements
                 var next = nextToken();
-                return next === 27 /* CommaToken */ || next === 18 /* OpenBraceToken */ || next === 93 /* ExtendsKeyword */ || next === 116 /* ImplementsKeyword */;
+                return next === 27 /* CommaToken */ || next === 18 /* OpenBraceToken */ || next === 94 /* ExtendsKeyword */ || next === 117 /* ImplementsKeyword */;
             }
             return true;
         }
@@ -30754,8 +31559,8 @@
             return ts.tokenIsIdentifierOrKeywordOrGreaterThan(token());
         }
         function isHeritageClauseExtendsOrImplementsKeyword() {
-            if (token() === 116 /* ImplementsKeyword */ ||
-                token() === 93 /* ExtendsKeyword */) {
+            if (token() === 117 /* ImplementsKeyword */ ||
+                token() === 94 /* ExtendsKeyword */) {
                 return lookAhead(nextTokenIsStartOfExpression);
             }
             return false;
@@ -30785,14 +31590,14 @@
                 case 23 /* ImportOrExportSpecifiers */:
                     return token() === 19 /* CloseBraceToken */;
                 case 3 /* SwitchClauseStatements */:
-                    return token() === 19 /* CloseBraceToken */ || token() === 81 /* CaseKeyword */ || token() === 87 /* DefaultKeyword */;
+                    return token() === 19 /* CloseBraceToken */ || token() === 82 /* CaseKeyword */ || token() === 88 /* DefaultKeyword */;
                 case 7 /* HeritageClauseElement */:
-                    return token() === 18 /* OpenBraceToken */ || token() === 93 /* ExtendsKeyword */ || token() === 116 /* ImplementsKeyword */;
+                    return token() === 18 /* OpenBraceToken */ || token() === 94 /* ExtendsKeyword */ || token() === 117 /* ImplementsKeyword */;
                 case 8 /* VariableDeclarations */:
                     return isVariableDeclaratorListTerminator();
                 case 19 /* TypeParameters */:
                     // Tokens other than '>' are here for better error recovery
-                    return token() === 31 /* GreaterThanToken */ || token() === 20 /* OpenParenToken */ || token() === 18 /* OpenBraceToken */ || token() === 93 /* ExtendsKeyword */ || token() === 116 /* ImplementsKeyword */;
+                    return token() === 31 /* GreaterThanToken */ || token() === 20 /* OpenParenToken */ || token() === 18 /* OpenBraceToken */ || token() === 94 /* ExtendsKeyword */ || token() === 117 /* ImplementsKeyword */;
                 case 11 /* ArgumentExpressions */:
                     // Tokens other than ')' are here for better error recovery
                     return token() === 21 /* CloseParenToken */ || token() === 26 /* SemicolonToken */;
@@ -31008,20 +31813,20 @@
         function isReusableClassMember(node) {
             if (node) {
                 switch (node.kind) {
-                    case 167 /* Constructor */:
-                    case 172 /* IndexSignature */:
-                    case 168 /* GetAccessor */:
-                    case 169 /* SetAccessor */:
-                    case 164 /* PropertyDeclaration */:
-                    case 230 /* SemicolonClassElement */:
+                    case 169 /* Constructor */:
+                    case 174 /* IndexSignature */:
+                    case 170 /* GetAccessor */:
+                    case 171 /* SetAccessor */:
+                    case 165 /* PropertyDeclaration */:
+                    case 232 /* SemicolonClassElement */:
                         return true;
-                    case 166 /* MethodDeclaration */:
+                    case 167 /* MethodDeclaration */:
                         // Method declarations are not necessarily reusable.  An object-literal
                         // may have a method calls "constructor(...)" and we must reparse that
                         // into an actual .ConstructorDeclaration.
                         var methodDeclaration = node;
-                        var nameIsConstructor = methodDeclaration.name.kind === 78 /* Identifier */ &&
-                            methodDeclaration.name.originalKeywordKind === 132 /* ConstructorKeyword */;
+                        var nameIsConstructor = methodDeclaration.name.kind === 79 /* Identifier */ &&
+                            methodDeclaration.name.originalKeywordKind === 133 /* ConstructorKeyword */;
                         return !nameIsConstructor;
                 }
             }
@@ -31030,8 +31835,8 @@
         function isReusableSwitchClause(node) {
             if (node) {
                 switch (node.kind) {
-                    case 285 /* CaseClause */:
-                    case 286 /* DefaultClause */:
+                    case 287 /* CaseClause */:
+                    case 288 /* DefaultClause */:
                         return true;
                 }
             }
@@ -31040,58 +31845,58 @@
         function isReusableStatement(node) {
             if (node) {
                 switch (node.kind) {
-                    case 252 /* FunctionDeclaration */:
-                    case 233 /* VariableStatement */:
-                    case 231 /* Block */:
-                    case 235 /* IfStatement */:
-                    case 234 /* ExpressionStatement */:
-                    case 247 /* ThrowStatement */:
-                    case 243 /* ReturnStatement */:
-                    case 245 /* SwitchStatement */:
-                    case 242 /* BreakStatement */:
-                    case 241 /* ContinueStatement */:
-                    case 239 /* ForInStatement */:
-                    case 240 /* ForOfStatement */:
-                    case 238 /* ForStatement */:
-                    case 237 /* WhileStatement */:
-                    case 244 /* WithStatement */:
-                    case 232 /* EmptyStatement */:
-                    case 248 /* TryStatement */:
-                    case 246 /* LabeledStatement */:
-                    case 236 /* DoStatement */:
-                    case 249 /* DebuggerStatement */:
-                    case 262 /* ImportDeclaration */:
-                    case 261 /* ImportEqualsDeclaration */:
-                    case 268 /* ExportDeclaration */:
-                    case 267 /* ExportAssignment */:
-                    case 257 /* ModuleDeclaration */:
-                    case 253 /* ClassDeclaration */:
-                    case 254 /* InterfaceDeclaration */:
-                    case 256 /* EnumDeclaration */:
-                    case 255 /* TypeAliasDeclaration */:
+                    case 254 /* FunctionDeclaration */:
+                    case 235 /* VariableStatement */:
+                    case 233 /* Block */:
+                    case 237 /* IfStatement */:
+                    case 236 /* ExpressionStatement */:
+                    case 249 /* ThrowStatement */:
+                    case 245 /* ReturnStatement */:
+                    case 247 /* SwitchStatement */:
+                    case 244 /* BreakStatement */:
+                    case 243 /* ContinueStatement */:
+                    case 241 /* ForInStatement */:
+                    case 242 /* ForOfStatement */:
+                    case 240 /* ForStatement */:
+                    case 239 /* WhileStatement */:
+                    case 246 /* WithStatement */:
+                    case 234 /* EmptyStatement */:
+                    case 250 /* TryStatement */:
+                    case 248 /* LabeledStatement */:
+                    case 238 /* DoStatement */:
+                    case 251 /* DebuggerStatement */:
+                    case 264 /* ImportDeclaration */:
+                    case 263 /* ImportEqualsDeclaration */:
+                    case 270 /* ExportDeclaration */:
+                    case 269 /* ExportAssignment */:
+                    case 259 /* ModuleDeclaration */:
+                    case 255 /* ClassDeclaration */:
+                    case 256 /* InterfaceDeclaration */:
+                    case 258 /* EnumDeclaration */:
+                    case 257 /* TypeAliasDeclaration */:
                         return true;
                 }
             }
             return false;
         }
         function isReusableEnumMember(node) {
-            return node.kind === 292 /* EnumMember */;
+            return node.kind === 294 /* EnumMember */;
         }
         function isReusableTypeMember(node) {
             if (node) {
                 switch (node.kind) {
-                    case 171 /* ConstructSignature */:
-                    case 165 /* MethodSignature */:
-                    case 172 /* IndexSignature */:
-                    case 163 /* PropertySignature */:
-                    case 170 /* CallSignature */:
+                    case 173 /* ConstructSignature */:
+                    case 166 /* MethodSignature */:
+                    case 174 /* IndexSignature */:
+                    case 164 /* PropertySignature */:
+                    case 172 /* CallSignature */:
                         return true;
                 }
             }
             return false;
         }
         function isReusableVariableDeclaration(node) {
-            if (node.kind !== 250 /* VariableDeclaration */) {
+            if (node.kind !== 252 /* VariableDeclaration */) {
                 return false;
             }
             // Very subtle incremental parsing bug.  Consider the following code:
@@ -31112,7 +31917,7 @@
             return variableDeclarator.initializer === undefined;
         }
         function isReusableParameter(node) {
-            if (node.kind !== 161 /* Parameter */) {
+            if (node.kind !== 162 /* Parameter */) {
                 return false;
             }
             // See the comment in isReusableVariableDeclaration for why we do this.
@@ -31130,7 +31935,10 @@
         }
         function parsingContextErrors(context) {
             switch (context) {
-                case 0 /* SourceElements */: return parseErrorAtCurrentToken(ts.Diagnostics.Declaration_or_statement_expected);
+                case 0 /* SourceElements */:
+                    return token() === 88 /* DefaultKeyword */
+                        ? parseErrorAtCurrentToken(ts.Diagnostics._0_expected, ts.tokenToString(93 /* ExportKeyword */))
+                        : parseErrorAtCurrentToken(ts.Diagnostics.Declaration_or_statement_expected);
                 case 1 /* BlockStatements */: return parseErrorAtCurrentToken(ts.Diagnostics.Declaration_or_statement_expected);
                 case 2 /* SwitchClauses */: return parseErrorAtCurrentToken(ts.Diagnostics.case_or_default_expected);
                 case 3 /* SwitchClauseStatements */: return parseErrorAtCurrentToken(ts.Diagnostics.Statement_expected);
@@ -31279,12 +32087,12 @@
                     // Report that we need an identifier.  However, report it right after the dot,
                     // and not on the next token.  This is because the next token might actually
                     // be an identifier and the error would be quite confusing.
-                    return createMissingNode(78 /* Identifier */, /*reportAtCurrentPosition*/ true, ts.Diagnostics.Identifier_expected);
+                    return createMissingNode(79 /* Identifier */, /*reportAtCurrentPosition*/ true, ts.Diagnostics.Identifier_expected);
                 }
             }
-            if (token() === 79 /* PrivateIdentifier */) {
+            if (token() === 80 /* PrivateIdentifier */) {
                 var node = parsePrivateIdentifier();
-                return allowPrivateIdentifiers ? node : createMissingNode(78 /* Identifier */, /*reportAtCurrentPosition*/ true, ts.Diagnostics.Identifier_expected);
+                return allowPrivateIdentifiers ? node : createMissingNode(79 /* Identifier */, /*reportAtCurrentPosition*/ true, ts.Diagnostics.Identifier_expected);
             }
             return allowIdentifierNames ? parseIdentifierName() : parseIdentifier();
         }
@@ -31393,14 +32201,14 @@
         // If true, we should abort parsing an error function.
         function typeHasArrowFunctionBlockingParseError(node) {
             switch (node.kind) {
-                case 174 /* TypeReference */:
+                case 176 /* TypeReference */:
                     return ts.nodeIsMissing(node.typeName);
-                case 175 /* FunctionType */:
-                case 176 /* ConstructorType */: {
+                case 177 /* FunctionType */:
+                case 178 /* ConstructorType */: {
                     var _a = node, parameters = _a.parameters, type = _a.type;
                     return isMissingList(parameters) || typeHasArrowFunctionBlockingParseError(type);
                 }
-                case 187 /* ParenthesizedType */:
+                case 189 /* ParenthesizedType */:
                     return typeHasArrowFunctionBlockingParseError(node.type);
                 default:
                     return false;
@@ -31442,7 +32250,7 @@
                 token() === 19 /* CloseBraceToken */ ||
                 token() === 21 /* CloseParenToken */ ||
                 token() === 31 /* GreaterThanToken */ ||
-                token() === 62 /* EqualsToken */ ||
+                token() === 63 /* EqualsToken */ ||
                 token() === 51 /* BarToken */) {
                 return finishNode(factory.createJSDocUnknownType(), pos);
             }
@@ -31464,7 +32272,7 @@
         function parseJSDocParameter() {
             var pos = getNodePos();
             var name;
-            if (token() === 107 /* ThisKeyword */ || token() === 102 /* NewKeyword */) {
+            if (token() === 108 /* ThisKeyword */ || token() === 103 /* NewKeyword */) {
                 name = parseIdentifierName();
                 parseExpected(58 /* ColonToken */);
             }
@@ -31480,7 +32288,7 @@
         function parseJSDocType() {
             scanner.setInJSDocType(true);
             var pos = getNodePos();
-            if (parseOptional(139 /* ModuleKeyword */)) {
+            if (parseOptional(140 /* ModuleKeyword */)) {
                 // TODO(rbuckton): We never set the type for a JSDocNamepathType. What should we put here?
                 var moduleTag = factory.createJSDocNamepathType(/*type*/ undefined);
                 terminate: while (true) {
@@ -31503,7 +32311,7 @@
             if (hasDotDotDot) {
                 type = finishNode(factory.createJSDocVariadicType(type), pos);
             }
-            if (token() === 62 /* EqualsToken */) {
+            if (token() === 63 /* EqualsToken */) {
                 nextToken();
                 return finishNode(factory.createJSDocOptionalType(type), pos);
             }
@@ -31511,7 +32319,7 @@
         }
         function parseTypeQuery() {
             var pos = getNodePos();
-            parseExpected(111 /* TypeOfKeyword */);
+            parseExpected(112 /* TypeOfKeyword */);
             return finishNode(factory.createTypeQueryNode(parseEntityName(/*allowReservedWords*/ true)), pos);
         }
         function parseTypeParameter() {
@@ -31519,7 +32327,7 @@
             var name = parseIdentifier();
             var constraint;
             var expression;
-            if (parseOptional(93 /* ExtendsKeyword */)) {
+            if (parseOptional(94 /* ExtendsKeyword */)) {
                 // It's not uncommon for people to write improper constraints to a generic.  If the
                 // user writes a constraint that is an expression and not an actual type, then parse
                 // it out as an expression (so we can recover well), but report that a type is needed
@@ -31538,7 +32346,7 @@
                     expression = parseUnaryExpressionOrHigher();
                 }
             }
-            var defaultType = parseOptional(62 /* EqualsToken */) ? parseType() : undefined;
+            var defaultType = parseOptional(63 /* EqualsToken */) ? parseType() : undefined;
             var node = factory.createTypeParameterDeclaration(name, constraint, defaultType);
             node.expression = expression;
             return finishNode(node, pos);
@@ -31585,7 +32393,7 @@
             //      BindingElement[?Yield,?Await]
             // Decorators are parsed in the outer [Await] context, the rest of the parameter is parsed in the function's [Await] context.
             var decorators = inOuterAwaitContext ? doInAwaitContext(parseDecorators) : parseDecorators();
-            if (token() === 107 /* ThisKeyword */) {
+            if (token() === 108 /* ThisKeyword */) {
                 var node_1 = factory.createParameterDeclaration(decorators, 
                 /*modifiers*/ undefined, 
                 /*dotDotDotToken*/ undefined, createIdentifier(/*isIdentifier*/ true), 
@@ -31682,14 +32490,14 @@
         function parseSignatureMember(kind) {
             var pos = getNodePos();
             var hasJSDoc = hasPrecedingJSDocComment();
-            if (kind === 171 /* ConstructSignature */) {
-                parseExpected(102 /* NewKeyword */);
+            if (kind === 173 /* ConstructSignature */) {
+                parseExpected(103 /* NewKeyword */);
             }
             var typeParameters = parseTypeParameters();
             var parameters = parseParameters(4 /* Type */);
             var type = parseReturnType(58 /* ColonToken */, /*isType*/ true);
             parseTypeMemberSemicolon();
-            var node = kind === 170 /* CallSignature */
+            var node = kind === 172 /* CallSignature */
                 ? factory.createCallSignature(typeParameters, parameters, type)
                 : factory.createConstructSignature(typeParameters, parameters, type);
             return withJSDoc(finishNode(node, pos), hasJSDoc);
@@ -31772,7 +32580,7 @@
                 // Although type literal properties cannot not have initializers, we attempt
                 // to parse an initializer so we can report in the checker that an interface
                 // property or type literal property cannot have an initializer.
-                if (token() === 62 /* EqualsToken */)
+                if (token() === 63 /* EqualsToken */)
                     node.initializer = parseInitializer();
             }
             parseTypeMemberSemicolon();
@@ -31782,8 +32590,8 @@
             // Return true if we have the start of a signature member
             if (token() === 20 /* OpenParenToken */ ||
                 token() === 29 /* LessThanToken */ ||
-                token() === 134 /* GetKeyword */ ||
-                token() === 146 /* SetKeyword */) {
+                token() === 135 /* GetKeyword */ ||
+                token() === 147 /* SetKeyword */) {
                 return true;
             }
             var idToken = false;
@@ -31815,19 +32623,19 @@
         }
         function parseTypeMember() {
             if (token() === 20 /* OpenParenToken */ || token() === 29 /* LessThanToken */) {
-                return parseSignatureMember(170 /* CallSignature */);
+                return parseSignatureMember(172 /* CallSignature */);
             }
-            if (token() === 102 /* NewKeyword */ && lookAhead(nextTokenIsOpenParenOrLessThan)) {
-                return parseSignatureMember(171 /* ConstructSignature */);
+            if (token() === 103 /* NewKeyword */ && lookAhead(nextTokenIsOpenParenOrLessThan)) {
+                return parseSignatureMember(173 /* ConstructSignature */);
             }
             var pos = getNodePos();
             var hasJSDoc = hasPrecedingJSDocComment();
             var modifiers = parseModifiers();
-            if (parseContextualModifier(134 /* GetKeyword */)) {
-                return parseAccessorDeclaration(pos, hasJSDoc, /*decorators*/ undefined, modifiers, 168 /* GetAccessor */);
+            if (parseContextualModifier(135 /* GetKeyword */)) {
+                return parseAccessorDeclaration(pos, hasJSDoc, /*decorators*/ undefined, modifiers, 170 /* GetAccessor */);
             }
-            if (parseContextualModifier(146 /* SetKeyword */)) {
-                return parseAccessorDeclaration(pos, hasJSDoc, /*decorators*/ undefined, modifiers, 169 /* SetAccessor */);
+            if (parseContextualModifier(147 /* SetKeyword */)) {
+                return parseAccessorDeclaration(pos, hasJSDoc, /*decorators*/ undefined, modifiers, 171 /* SetAccessor */);
             }
             if (isIndexSignature()) {
                 return parseIndexSignatureDeclaration(pos, hasJSDoc, /*decorators*/ undefined, modifiers);
@@ -31868,17 +32676,17 @@
         function isStartOfMappedType() {
             nextToken();
             if (token() === 39 /* PlusToken */ || token() === 40 /* MinusToken */) {
-                return nextToken() === 142 /* ReadonlyKeyword */;
+                return nextToken() === 143 /* ReadonlyKeyword */;
             }
-            if (token() === 142 /* ReadonlyKeyword */) {
+            if (token() === 143 /* ReadonlyKeyword */) {
                 nextToken();
             }
-            return token() === 22 /* OpenBracketToken */ && nextTokenIsIdentifier() && nextToken() === 100 /* InKeyword */;
+            return token() === 22 /* OpenBracketToken */ && nextTokenIsIdentifier() && nextToken() === 101 /* InKeyword */;
         }
         function parseMappedTypeParameter() {
             var pos = getNodePos();
             var name = parseIdentifierName();
-            parseExpected(100 /* InKeyword */);
+            parseExpected(101 /* InKeyword */);
             var type = parseType();
             return finishNode(factory.createTypeParameterDeclaration(name, type, /*defaultType*/ undefined), pos);
         }
@@ -31886,15 +32694,15 @@
             var pos = getNodePos();
             parseExpected(18 /* OpenBraceToken */);
             var readonlyToken;
-            if (token() === 142 /* ReadonlyKeyword */ || token() === 39 /* PlusToken */ || token() === 40 /* MinusToken */) {
+            if (token() === 143 /* ReadonlyKeyword */ || token() === 39 /* PlusToken */ || token() === 40 /* MinusToken */) {
                 readonlyToken = parseTokenNode();
-                if (readonlyToken.kind !== 142 /* ReadonlyKeyword */) {
-                    parseExpected(142 /* ReadonlyKeyword */);
+                if (readonlyToken.kind !== 143 /* ReadonlyKeyword */) {
+                    parseExpected(143 /* ReadonlyKeyword */);
                 }
             }
             parseExpected(22 /* OpenBracketToken */);
             var typeParameter = parseMappedTypeParameter();
-            var nameType = parseOptional(126 /* AsKeyword */) ? parseType() : undefined;
+            var nameType = parseOptional(127 /* AsKeyword */) ? parseType() : undefined;
             parseExpected(23 /* CloseBracketToken */);
             var questionToken;
             if (token() === 57 /* QuestionToken */ || token() === 39 /* PlusToken */ || token() === 40 /* MinusToken */) {
@@ -31958,10 +32766,10 @@
         }
         function parseModifiersForConstructorType() {
             var modifiers;
-            if (token() === 125 /* AbstractKeyword */) {
+            if (token() === 126 /* AbstractKeyword */) {
                 var pos = getNodePos();
                 nextToken();
-                var modifier = finishNode(factory.createToken(125 /* AbstractKeyword */), pos);
+                var modifier = finishNode(factory.createToken(126 /* AbstractKeyword */), pos);
                 modifiers = createNodeArray([modifier], pos);
             }
             return modifiers;
@@ -31970,7 +32778,7 @@
             var pos = getNodePos();
             var hasJSDoc = hasPrecedingJSDocComment();
             var modifiers = parseModifiersForConstructorType();
-            var isConstructorType = parseOptional(102 /* NewKeyword */);
+            var isConstructorType = parseOptional(103 /* NewKeyword */);
             var typeParameters = parseTypeParameters();
             var parameters = parseParameters(4 /* Type */);
             var type = parseReturnType(38 /* EqualsGreaterThanToken */, /*isType*/ false);
@@ -31990,7 +32798,7 @@
             if (negative) {
                 nextToken();
             }
-            var expression = token() === 109 /* TrueKeyword */ || token() === 94 /* FalseKeyword */ || token() === 103 /* NullKeyword */ ?
+            var expression = token() === 110 /* TrueKeyword */ || token() === 95 /* FalseKeyword */ || token() === 104 /* NullKeyword */ ?
                 parseTokenNode() :
                 parseLiteralLikeNode(token());
             if (negative) {
@@ -32000,13 +32808,13 @@
         }
         function isStartOfTypeOfImportType() {
             nextToken();
-            return token() === 99 /* ImportKeyword */;
+            return token() === 100 /* ImportKeyword */;
         }
         function parseImportType() {
             sourceFlags |= 1048576 /* PossiblyContainsDynamicImport */;
             var pos = getNodePos();
-            var isTypeOf = parseOptional(111 /* TypeOfKeyword */);
-            parseExpected(99 /* ImportKeyword */);
+            var isTypeOf = parseOptional(112 /* TypeOfKeyword */);
+            parseExpected(100 /* ImportKeyword */);
             parseExpected(20 /* OpenParenToken */);
             var type = parseType();
             parseExpected(21 /* CloseParenToken */);
@@ -32020,19 +32828,19 @@
         }
         function parseNonArrayType() {
             switch (token()) {
-                case 128 /* AnyKeyword */:
-                case 152 /* UnknownKeyword */:
-                case 147 /* StringKeyword */:
-                case 144 /* NumberKeyword */:
-                case 155 /* BigIntKeyword */:
-                case 148 /* SymbolKeyword */:
-                case 131 /* BooleanKeyword */:
-                case 150 /* UndefinedKeyword */:
-                case 141 /* NeverKeyword */:
-                case 145 /* ObjectKeyword */:
+                case 129 /* AnyKeyword */:
+                case 153 /* UnknownKeyword */:
+                case 148 /* StringKeyword */:
+                case 145 /* NumberKeyword */:
+                case 156 /* BigIntKeyword */:
+                case 149 /* SymbolKeyword */:
+                case 132 /* BooleanKeyword */:
+                case 151 /* UndefinedKeyword */:
+                case 142 /* NeverKeyword */:
+                case 146 /* ObjectKeyword */:
                     // If these are followed by a dot, then parse these out as a dotted type reference instead.
                     return tryParse(parseKeywordAndNoDot) || parseTypeReference();
-                case 65 /* AsteriskEqualsToken */:
+                case 66 /* AsteriskEqualsToken */:
                     // If there is '*=', treat it as * followed by postfix =
                     scanner.reScanAsteriskEqualsToken();
                 // falls through
@@ -32044,7 +32852,7 @@
                 // falls through
                 case 57 /* QuestionToken */:
                     return parseJSDocUnknownOrNullableType();
-                case 97 /* FunctionKeyword */:
+                case 98 /* FunctionKeyword */:
                     return parseJSDocFunctionType();
                 case 53 /* ExclamationToken */:
                     return parseJSDocNonNullableType();
@@ -32052,24 +32860,24 @@
                 case 10 /* StringLiteral */:
                 case 8 /* NumericLiteral */:
                 case 9 /* BigIntLiteral */:
-                case 109 /* TrueKeyword */:
-                case 94 /* FalseKeyword */:
-                case 103 /* NullKeyword */:
+                case 110 /* TrueKeyword */:
+                case 95 /* FalseKeyword */:
+                case 104 /* NullKeyword */:
                     return parseLiteralTypeNode();
                 case 40 /* MinusToken */:
                     return lookAhead(nextTokenIsNumericOrBigIntLiteral) ? parseLiteralTypeNode(/*negative*/ true) : parseTypeReference();
-                case 113 /* VoidKeyword */:
+                case 114 /* VoidKeyword */:
                     return parseTokenNode();
-                case 107 /* ThisKeyword */: {
+                case 108 /* ThisKeyword */: {
                     var thisKeyword = parseThisTypeNode();
-                    if (token() === 137 /* IsKeyword */ && !scanner.hasPrecedingLineBreak()) {
+                    if (token() === 138 /* IsKeyword */ && !scanner.hasPrecedingLineBreak()) {
                         return parseThisTypePredicate(thisKeyword);
                     }
                     else {
                         return thisKeyword;
                     }
                 }
-                case 111 /* TypeOfKeyword */:
+                case 112 /* TypeOfKeyword */:
                     return lookAhead(isStartOfTypeOfImportType) ? parseImportType() : parseTypeQuery();
                 case 18 /* OpenBraceToken */:
                     return lookAhead(isStartOfMappedType) ? parseMappedType() : parseTypeLiteral();
@@ -32077,9 +32885,9 @@
                     return parseTupleType();
                 case 20 /* OpenParenToken */:
                     return parseParenthesizedType();
-                case 99 /* ImportKeyword */:
+                case 100 /* ImportKeyword */:
                     return parseImportType();
-                case 127 /* AssertsKeyword */:
+                case 128 /* AssertsKeyword */:
                     return lookAhead(nextTokenIsIdentifierOrKeywordOnSameLine) ? parseAssertsTypePredicate() : parseTypeReference();
                 case 15 /* TemplateHead */:
                     return parseTemplateType();
@@ -32089,44 +32897,44 @@
         }
         function isStartOfType(inStartOfParameter) {
             switch (token()) {
-                case 128 /* AnyKeyword */:
-                case 152 /* UnknownKeyword */:
-                case 147 /* StringKeyword */:
-                case 144 /* NumberKeyword */:
-                case 155 /* BigIntKeyword */:
-                case 131 /* BooleanKeyword */:
-                case 142 /* ReadonlyKeyword */:
-                case 148 /* SymbolKeyword */:
-                case 151 /* UniqueKeyword */:
-                case 113 /* VoidKeyword */:
-                case 150 /* UndefinedKeyword */:
-                case 103 /* NullKeyword */:
-                case 107 /* ThisKeyword */:
-                case 111 /* TypeOfKeyword */:
-                case 141 /* NeverKeyword */:
+                case 129 /* AnyKeyword */:
+                case 153 /* UnknownKeyword */:
+                case 148 /* StringKeyword */:
+                case 145 /* NumberKeyword */:
+                case 156 /* BigIntKeyword */:
+                case 132 /* BooleanKeyword */:
+                case 143 /* ReadonlyKeyword */:
+                case 149 /* SymbolKeyword */:
+                case 152 /* UniqueKeyword */:
+                case 114 /* VoidKeyword */:
+                case 151 /* UndefinedKeyword */:
+                case 104 /* NullKeyword */:
+                case 108 /* ThisKeyword */:
+                case 112 /* TypeOfKeyword */:
+                case 142 /* NeverKeyword */:
                 case 18 /* OpenBraceToken */:
                 case 22 /* OpenBracketToken */:
                 case 29 /* LessThanToken */:
                 case 51 /* BarToken */:
                 case 50 /* AmpersandToken */:
-                case 102 /* NewKeyword */:
+                case 103 /* NewKeyword */:
                 case 10 /* StringLiteral */:
                 case 8 /* NumericLiteral */:
                 case 9 /* BigIntLiteral */:
-                case 109 /* TrueKeyword */:
-                case 94 /* FalseKeyword */:
-                case 145 /* ObjectKeyword */:
+                case 110 /* TrueKeyword */:
+                case 95 /* FalseKeyword */:
+                case 146 /* ObjectKeyword */:
                 case 41 /* AsteriskToken */:
                 case 57 /* QuestionToken */:
                 case 53 /* ExclamationToken */:
                 case 25 /* DotDotDotToken */:
-                case 135 /* InferKeyword */:
-                case 99 /* ImportKeyword */:
-                case 127 /* AssertsKeyword */:
+                case 136 /* InferKeyword */:
+                case 100 /* ImportKeyword */:
+                case 128 /* AssertsKeyword */:
                 case 14 /* NoSubstitutionTemplateLiteral */:
                 case 15 /* TemplateHead */:
                     return true;
-                case 97 /* FunctionKeyword */:
+                case 98 /* FunctionKeyword */:
                     return !inStartOfParameter;
                 case 40 /* MinusToken */:
                     return !inStartOfParameter && lookAhead(nextTokenIsNumericOrBigIntLiteral);
@@ -32190,17 +32998,17 @@
         }
         function parseInferType() {
             var pos = getNodePos();
-            parseExpected(135 /* InferKeyword */);
+            parseExpected(136 /* InferKeyword */);
             return finishNode(factory.createInferTypeNode(parseTypeParameterOfInferType()), pos);
         }
         function parseTypeOperatorOrHigher() {
             var operator = token();
             switch (operator) {
-                case 138 /* KeyOfKeyword */:
-                case 151 /* UniqueKeyword */:
-                case 142 /* ReadonlyKeyword */:
+                case 139 /* KeyOfKeyword */:
+                case 152 /* UniqueKeyword */:
+                case 143 /* ReadonlyKeyword */:
                     return parseTypeOperator(operator);
-                case 135 /* InferKeyword */:
+                case 136 /* InferKeyword */:
                     return parseInferType();
             }
             return parsePostfixTypeOrHigher();
@@ -32250,7 +33058,7 @@
         }
         function nextTokenIsNewKeyword() {
             nextToken();
-            return token() === 102 /* NewKeyword */;
+            return token() === 103 /* NewKeyword */;
         }
         function isStartOfFunctionTypeOrConstructorType() {
             if (token() === 29 /* LessThanToken */) {
@@ -32259,15 +33067,15 @@
             if (token() === 20 /* OpenParenToken */ && lookAhead(isUnambiguouslyStartOfFunctionType)) {
                 return true;
             }
-            return token() === 102 /* NewKeyword */ ||
-                token() === 125 /* AbstractKeyword */ && lookAhead(nextTokenIsNewKeyword);
+            return token() === 103 /* NewKeyword */ ||
+                token() === 126 /* AbstractKeyword */ && lookAhead(nextTokenIsNewKeyword);
         }
         function skipParameterStart() {
             if (ts.isModifierKind(token())) {
                 // Skip modifiers
                 parseModifiers();
             }
-            if (isIdentifier() || token() === 107 /* ThisKeyword */) {
+            if (isIdentifier() || token() === 108 /* ThisKeyword */) {
                 nextToken();
                 return true;
             }
@@ -32290,7 +33098,7 @@
                 // We successfully skipped modifiers (if any) and an identifier or binding pattern,
                 // now see if we have something that indicates a parameter declaration
                 if (token() === 58 /* ColonToken */ || token() === 27 /* CommaToken */ ||
-                    token() === 57 /* QuestionToken */ || token() === 62 /* EqualsToken */) {
+                    token() === 57 /* QuestionToken */ || token() === 63 /* EqualsToken */) {
                     // ( xxx :
                     // ( xxx ,
                     // ( xxx ?
@@ -32320,16 +33128,16 @@
         }
         function parseTypePredicatePrefix() {
             var id = parseIdentifier();
-            if (token() === 137 /* IsKeyword */ && !scanner.hasPrecedingLineBreak()) {
+            if (token() === 138 /* IsKeyword */ && !scanner.hasPrecedingLineBreak()) {
                 nextToken();
                 return id;
             }
         }
         function parseAssertsTypePredicate() {
             var pos = getNodePos();
-            var assertsModifier = parseExpectedToken(127 /* AssertsKeyword */);
-            var parameterName = token() === 107 /* ThisKeyword */ ? parseThisTypeNode() : parseIdentifier();
-            var type = parseOptional(137 /* IsKeyword */) ? parseType() : undefined;
+            var assertsModifier = parseExpectedToken(128 /* AssertsKeyword */);
+            var parameterName = token() === 108 /* ThisKeyword */ ? parseThisTypeNode() : parseIdentifier();
+            var type = parseOptional(138 /* IsKeyword */) ? parseType() : undefined;
             return finishNode(factory.createTypePredicateNode(assertsModifier, parameterName, type), pos);
         }
         function parseType() {
@@ -32343,7 +33151,7 @@
             }
             var pos = getNodePos();
             var type = parseUnionTypeOrHigher();
-            if (!noConditionalTypes && !scanner.hasPrecedingLineBreak() && parseOptional(93 /* ExtendsKeyword */)) {
+            if (!noConditionalTypes && !scanner.hasPrecedingLineBreak() && parseOptional(94 /* ExtendsKeyword */)) {
                 // The type following 'extends' is not permitted to be another conditional type
                 var extendsType = parseTypeWorker(/*noConditionalTypes*/ true);
                 parseExpected(57 /* QuestionToken */);
@@ -32360,11 +33168,11 @@
         // EXPRESSIONS
         function isStartOfLeftHandSideExpression() {
             switch (token()) {
-                case 107 /* ThisKeyword */:
-                case 105 /* SuperKeyword */:
-                case 103 /* NullKeyword */:
-                case 109 /* TrueKeyword */:
-                case 94 /* FalseKeyword */:
+                case 108 /* ThisKeyword */:
+                case 106 /* SuperKeyword */:
+                case 104 /* NullKeyword */:
+                case 110 /* TrueKeyword */:
+                case 95 /* FalseKeyword */:
                 case 8 /* NumericLiteral */:
                 case 9 /* BigIntLiteral */:
                 case 10 /* StringLiteral */:
@@ -32373,14 +33181,14 @@
                 case 20 /* OpenParenToken */:
                 case 22 /* OpenBracketToken */:
                 case 18 /* OpenBraceToken */:
-                case 97 /* FunctionKeyword */:
-                case 83 /* ClassKeyword */:
-                case 102 /* NewKeyword */:
+                case 98 /* FunctionKeyword */:
+                case 84 /* ClassKeyword */:
+                case 103 /* NewKeyword */:
                 case 43 /* SlashToken */:
-                case 67 /* SlashEqualsToken */:
-                case 78 /* Identifier */:
+                case 68 /* SlashEqualsToken */:
+                case 79 /* Identifier */:
                     return true;
-                case 99 /* ImportKeyword */:
+                case 100 /* ImportKeyword */:
                     return lookAhead(nextTokenIsOpenParenOrLessThanOrDot);
                 default:
                     return isIdentifier();
@@ -32395,15 +33203,15 @@
                 case 40 /* MinusToken */:
                 case 54 /* TildeToken */:
                 case 53 /* ExclamationToken */:
-                case 88 /* DeleteKeyword */:
-                case 111 /* TypeOfKeyword */:
-                case 113 /* VoidKeyword */:
+                case 89 /* DeleteKeyword */:
+                case 112 /* TypeOfKeyword */:
+                case 114 /* VoidKeyword */:
                 case 45 /* PlusPlusToken */:
                 case 46 /* MinusMinusToken */:
                 case 29 /* LessThanToken */:
-                case 130 /* AwaitKeyword */:
-                case 124 /* YieldKeyword */:
-                case 79 /* PrivateIdentifier */:
+                case 131 /* AwaitKeyword */:
+                case 125 /* YieldKeyword */:
+                case 80 /* PrivateIdentifier */:
                     // Yield/await always starts an expression.  Either it is an identifier (in which case
                     // it is definitely an expression).  Or it's a keyword (either because we're in
                     // a generator or async function, or in strict mode (or both)) and it started a yield or await expression.
@@ -32422,8 +33230,8 @@
         function isStartOfExpressionStatement() {
             // As per the grammar, none of '{' or 'function' or 'class' can start an expression statement.
             return token() !== 18 /* OpenBraceToken */ &&
-                token() !== 97 /* FunctionKeyword */ &&
-                token() !== 83 /* ClassKeyword */ &&
+                token() !== 98 /* FunctionKeyword */ &&
+                token() !== 84 /* ClassKeyword */ &&
                 token() !== 59 /* AtToken */ &&
                 isStartOfExpression();
         }
@@ -32448,7 +33256,7 @@
             return expr;
         }
         function parseInitializer() {
-            return parseOptional(62 /* EqualsToken */) ? parseAssignmentExpressionOrHigher() : undefined;
+            return parseOptional(63 /* EqualsToken */) ? parseAssignmentExpressionOrHigher() : undefined;
         }
         function parseAssignmentExpressionOrHigher() {
             //  AssignmentExpression[in,yield]:
@@ -32494,7 +33302,7 @@
             // To avoid a look-ahead, we did not handle the case of an arrow function with a single un-parenthesized
             // parameter ('x => ...') above. We handle it here by checking if the parsed expression was a single
             // identifier and the current token is an arrow.
-            if (expr.kind === 78 /* Identifier */ && token() === 38 /* EqualsGreaterThanToken */) {
+            if (expr.kind === 79 /* Identifier */ && token() === 38 /* EqualsGreaterThanToken */) {
                 return parseSimpleArrowFunctionExpression(pos, expr, /*asyncModifier*/ undefined);
             }
             // Now see if we might be in cases '2' or '3'.
@@ -32510,7 +33318,7 @@
             return parseConditionalExpressionRest(expr, pos);
         }
         function isYieldExpression() {
-            if (token() === 124 /* YieldKeyword */) {
+            if (token() === 125 /* YieldKeyword */) {
                 // If we have a 'yield' keyword, and this is a context where yield expressions are
                 // allowed, then definitely parse out a yield expression.
                 if (inYieldContext()) {
@@ -32590,7 +33398,7 @@
         //  Unknown     -> There *might* be a parenthesized arrow function here.
         //                 Speculatively look ahead to be sure, and rollback if not.
         function isParenthesizedArrowFunctionExpression() {
-            if (token() === 20 /* OpenParenToken */ || token() === 29 /* LessThanToken */ || token() === 129 /* AsyncKeyword */) {
+            if (token() === 20 /* OpenParenToken */ || token() === 29 /* LessThanToken */ || token() === 130 /* AsyncKeyword */) {
                 return lookAhead(isParenthesizedArrowFunctionExpressionWorker);
             }
             if (token() === 38 /* EqualsGreaterThanToken */) {
@@ -32603,7 +33411,7 @@
             return 0 /* False */;
         }
         function isParenthesizedArrowFunctionExpressionWorker() {
-            if (token() === 129 /* AsyncKeyword */) {
+            if (token() === 130 /* AsyncKeyword */) {
                 nextToken();
                 if (scanner.hasPrecedingLineBreak()) {
                     return 0 /* False */;
@@ -32647,13 +33455,13 @@
                 // Check for "(xxx yyy", where xxx is a modifier and yyy is an identifier. This
                 // isn't actually allowed, but we want to treat it as a lambda so we can provide
                 // a good error message.
-                if (ts.isModifierKind(second) && second !== 129 /* AsyncKeyword */ && lookAhead(nextTokenIsIdentifier)) {
+                if (ts.isModifierKind(second) && second !== 130 /* AsyncKeyword */ && lookAhead(nextTokenIsIdentifier)) {
                     return 1 /* True */;
                 }
                 // If we had "(" followed by something that's not an identifier,
                 // then this definitely doesn't look like a lambda.  "this" is not
                 // valid, but we want to parse it and then give a semantic error.
-                if (!isIdentifier() && second !== 107 /* ThisKeyword */) {
+                if (!isIdentifier() && second !== 108 /* ThisKeyword */) {
                     return 0 /* False */;
                 }
                 switch (nextToken()) {
@@ -32664,13 +33472,13 @@
                     case 57 /* QuestionToken */:
                         nextToken();
                         // If we have "(a?:" or "(a?," or "(a?=" or "(a?)" then it is definitely a lambda.
-                        if (token() === 58 /* ColonToken */ || token() === 27 /* CommaToken */ || token() === 62 /* EqualsToken */ || token() === 21 /* CloseParenToken */) {
+                        if (token() === 58 /* ColonToken */ || token() === 27 /* CommaToken */ || token() === 63 /* EqualsToken */ || token() === 21 /* CloseParenToken */) {
                             return 1 /* True */;
                         }
                         // Otherwise it is definitely not a lambda.
                         return 0 /* False */;
                     case 27 /* CommaToken */:
-                    case 62 /* EqualsToken */:
+                    case 63 /* EqualsToken */:
                     case 21 /* CloseParenToken */:
                         // If we have "(a," or "(a=" or "(a)" this *could* be an arrow function
                         return 2 /* Unknown */;
@@ -32689,10 +33497,10 @@
                 if (languageVariant === 1 /* JSX */) {
                     var isArrowFunctionInJsx = lookAhead(function () {
                         var third = nextToken();
-                        if (third === 93 /* ExtendsKeyword */) {
+                        if (third === 94 /* ExtendsKeyword */) {
                             var fourth = nextToken();
                             switch (fourth) {
-                                case 62 /* EqualsToken */:
+                                case 63 /* EqualsToken */:
                                 case 31 /* GreaterThanToken */:
                                     return false;
                                 default:
@@ -32726,7 +33534,7 @@
         }
         function tryParseAsyncSimpleArrowFunctionExpression() {
             // We do a check here so that we won't be doing unnecessarily call to "lookAhead"
-            if (token() === 129 /* AsyncKeyword */) {
+            if (token() === 130 /* AsyncKeyword */) {
                 if (lookAhead(isUnParenthesizedAsyncArrowFunctionWorker) === 1 /* True */) {
                     var pos = getNodePos();
                     var asyncModifier = parseModifiersForArrowFunction();
@@ -32740,7 +33548,7 @@
             // AsyncArrowFunctionExpression:
             //      1) async[no LineTerminator here]AsyncArrowBindingIdentifier[?Yield][no LineTerminator here]=>AsyncConciseBody[?In]
             //      2) CoverCallExpressionAndAsyncArrowHead[?Yield, ?Await][no LineTerminator here]=>AsyncConciseBody[?In]
-            if (token() === 129 /* AsyncKeyword */) {
+            if (token() === 130 /* AsyncKeyword */) {
                 nextToken();
                 // If the "async" is followed by "=>" token then it is not a beginning of an async arrow-function
                 // but instead a simple arrow-function which will be parsed inside "parseAssignmentExpressionOrHigher"
@@ -32749,7 +33557,7 @@
                 }
                 // Check for un-parenthesized AsyncArrowFunction
                 var expr = parseBinaryExpressionOrHigher(0 /* Lowest */);
-                if (!scanner.hasPrecedingLineBreak() && expr.kind === 78 /* Identifier */ && token() === 38 /* EqualsGreaterThanToken */) {
+                if (!scanner.hasPrecedingLineBreak() && expr.kind === 79 /* Identifier */ && token() === 38 /* EqualsGreaterThanToken */) {
                     return 1 /* True */;
                 }
             }
@@ -32814,8 +33622,8 @@
                 return parseFunctionBlock(isAsync ? 2 /* Await */ : 0 /* None */);
             }
             if (token() !== 26 /* SemicolonToken */ &&
-                token() !== 97 /* FunctionKeyword */ &&
-                token() !== 83 /* ClassKeyword */ &&
+                token() !== 98 /* FunctionKeyword */ &&
+                token() !== 84 /* ClassKeyword */ &&
                 isStartOfStatement() &&
                 !isStartOfExpressionStatement()) {
                 // Check if we got a plain statement (i.e. no expression-statements, no function/class expressions/declarations)
@@ -32853,7 +33661,7 @@
             var colonToken;
             return finishNode(factory.createConditionalExpression(leftOperand, questionToken, doOutsideOfContext(disallowInAndDecoratorContext, parseAssignmentExpressionOrHigher), colonToken = parseExpectedToken(58 /* ColonToken */), ts.nodeIsPresent(colonToken)
                 ? parseAssignmentExpressionOrHigher()
-                : createMissingNode(78 /* Identifier */, /*reportAtCurrentPosition*/ false, ts.Diagnostics._0_expected, ts.tokenToString(58 /* ColonToken */))), pos);
+                : createMissingNode(79 /* Identifier */, /*reportAtCurrentPosition*/ false, ts.Diagnostics._0_expected, ts.tokenToString(58 /* ColonToken */))), pos);
         }
         function parseBinaryExpressionOrHigher(precedence) {
             var pos = getNodePos();
@@ -32861,7 +33669,7 @@
             return parseBinaryExpressionRest(precedence, leftOperand, pos);
         }
         function isInOrOfKeyword(t) {
-            return t === 100 /* InKeyword */ || t === 157 /* OfKeyword */;
+            return t === 101 /* InKeyword */ || t === 158 /* OfKeyword */;
         }
         function parseBinaryExpressionRest(precedence, leftOperand, pos) {
             while (true) {
@@ -32896,10 +33704,10 @@
                 if (!consumeCurrentOperator) {
                     break;
                 }
-                if (token() === 100 /* InKeyword */ && inDisallowInContext()) {
+                if (token() === 101 /* InKeyword */ && inDisallowInContext()) {
                     break;
                 }
-                if (token() === 126 /* AsKeyword */) {
+                if (token() === 127 /* AsKeyword */) {
                     // Make sure we *do* perform ASI for constructs like this:
                     //    var x = foo
                     //    as (Bar)
@@ -32920,7 +33728,7 @@
             return leftOperand;
         }
         function isBinaryOperator() {
-            if (inDisallowInContext() && token() === 100 /* InKeyword */) {
+            if (inDisallowInContext() && token() === 101 /* InKeyword */) {
                 return false;
             }
             return ts.getBinaryOperatorPrecedence(token()) > 0;
@@ -32948,7 +33756,7 @@
             return finishNode(factory.createVoidExpression(nextTokenAnd(parseSimpleUnaryExpression)), pos);
         }
         function isAwaitExpression() {
-            if (token() === 130 /* AwaitKeyword */) {
+            if (token() === 131 /* AwaitKeyword */) {
                 if (inAwaitContext()) {
                     return true;
                 }
@@ -33001,7 +33809,7 @@
             if (token() === 42 /* AsteriskAsteriskToken */) {
                 var pos = ts.skipTrivia(sourceText, simpleUnaryExpression.pos);
                 var end = simpleUnaryExpression.end;
-                if (simpleUnaryExpression.kind === 207 /* TypeAssertionExpression */) {
+                if (simpleUnaryExpression.kind === 209 /* TypeAssertionExpression */) {
                     parseErrorAt(pos, end, ts.Diagnostics.A_type_assertion_expression_is_not_allowed_in_the_left_hand_side_of_an_exponentiation_expression_Consider_enclosing_the_expression_in_parentheses);
                 }
                 else {
@@ -33031,18 +33839,18 @@
                 case 54 /* TildeToken */:
                 case 53 /* ExclamationToken */:
                     return parsePrefixUnaryExpression();
-                case 88 /* DeleteKeyword */:
+                case 89 /* DeleteKeyword */:
                     return parseDeleteExpression();
-                case 111 /* TypeOfKeyword */:
+                case 112 /* TypeOfKeyword */:
                     return parseTypeOfExpression();
-                case 113 /* VoidKeyword */:
+                case 114 /* VoidKeyword */:
                     return parseVoidExpression();
                 case 29 /* LessThanToken */:
                     // This is modified UnaryExpression grammar in TypeScript
                     //  UnaryExpression (modified):
                     //      < type > UnaryExpression
                     return parseTypeAssertion();
-                case 130 /* AwaitKeyword */:
+                case 131 /* AwaitKeyword */:
                     if (isAwaitExpression()) {
                         return parseAwaitExpression();
                     }
@@ -33069,10 +33877,10 @@
                 case 40 /* MinusToken */:
                 case 54 /* TildeToken */:
                 case 53 /* ExclamationToken */:
-                case 88 /* DeleteKeyword */:
-                case 111 /* TypeOfKeyword */:
-                case 113 /* VoidKeyword */:
-                case 130 /* AwaitKeyword */:
+                case 89 /* DeleteKeyword */:
+                case 112 /* TypeOfKeyword */:
+                case 114 /* VoidKeyword */:
+                case 131 /* AwaitKeyword */:
                     return false;
                 case 29 /* LessThanToken */:
                     // If we are not in JSX context, we are parsing TypeAssertion which is an UnaryExpression
@@ -33148,7 +33956,7 @@
             // or starts the beginning of the first four CallExpression productions.
             var pos = getNodePos();
             var expression;
-            if (token() === 99 /* ImportKeyword */) {
+            if (token() === 100 /* ImportKeyword */) {
                 if (lookAhead(nextTokenIsOpenParenOrLessThan)) {
                     // We don't want to eagerly consume all import keyword as import call expression so we look ahead to find "("
                     // For example:
@@ -33162,7 +33970,7 @@
                     // This is an 'import.*' metaproperty (i.e. 'import.meta')
                     nextToken(); // advance past the 'import'
                     nextToken(); // advance past the dot
-                    expression = finishNode(factory.createMetaProperty(99 /* ImportKeyword */, parseIdentifierName()), pos);
+                    expression = finishNode(factory.createMetaProperty(100 /* ImportKeyword */, parseIdentifierName()), pos);
                     sourceFlags |= 2097152 /* PossiblyContainsImportMeta */;
                 }
                 else {
@@ -33170,7 +33978,7 @@
                 }
             }
             else {
-                expression = token() === 105 /* SuperKeyword */ ? parseSuperExpression() : parseMemberExpressionOrHigher();
+                expression = token() === 106 /* SuperKeyword */ ? parseSuperExpression() : parseMemberExpressionOrHigher();
             }
             // Now, we *may* be complete.  However, we might have consumed the start of a
             // CallExpression or OptionalExpression.  As such, we need to consume the rest
@@ -33248,23 +34056,45 @@
             // private names will never work with `super` (`super.#foo`), but that's a semantic error, not syntactic
             return finishNode(factory.createPropertyAccessExpression(expression, parseRightSideOfDot(/*allowIdentifierNames*/ true, /*allowPrivateIdentifiers*/ true)), pos);
         }
-        function parseJsxElementOrSelfClosingElementOrFragment(inExpressionContext, topInvalidNodePosition) {
+        function parseJsxElementOrSelfClosingElementOrFragment(inExpressionContext, topInvalidNodePosition, openingTag) {
             var pos = getNodePos();
             var opening = parseJsxOpeningOrSelfClosingElementOrOpeningFragment(inExpressionContext);
             var result;
-            if (opening.kind === 276 /* JsxOpeningElement */) {
+            if (opening.kind === 278 /* JsxOpeningElement */) {
                 var children = parseJsxChildren(opening);
-                var closingElement = parseJsxClosingElement(inExpressionContext);
-                if (!tagNamesAreEquivalent(opening.tagName, closingElement.tagName)) {
-                    parseErrorAtRange(closingElement, ts.Diagnostics.Expected_corresponding_JSX_closing_tag_for_0, ts.getTextOfNodeFromSourceText(sourceText, opening.tagName));
+                var closingElement = void 0;
+                var lastChild = children[children.length - 1];
+                if ((lastChild === null || lastChild === void 0 ? void 0 : lastChild.kind) === 276 /* JsxElement */
+                    && !tagNamesAreEquivalent(lastChild.openingElement.tagName, lastChild.closingElement.tagName)
+                    && tagNamesAreEquivalent(opening.tagName, lastChild.closingElement.tagName)) {
+                    // when an unclosed JsxOpeningElement incorrectly parses its parent's JsxClosingElement,
+                    // restructure (<div>(...<span></div>)) --> (<div>(...<span></span>)</div>)
+                    // (no need to error; the parent will error)
+                    var end = lastChild.openingElement.end; // newly-created children and closing are both zero-width end/end
+                    var newLast = finishNode(factory.createJsxElement(lastChild.openingElement, createNodeArray([], end, end), finishNode(factory.createJsxClosingElement(finishNode(factory.createIdentifier(""), end, end)), end, end)), lastChild.openingElement.pos, end);
+                    children = createNodeArray(__spreadArray(__spreadArray([], children.slice(0, children.length - 1), true), [newLast], false), children.pos, end);
+                    closingElement = lastChild.closingElement;
+                }
+                else {
+                    closingElement = parseJsxClosingElement(opening, inExpressionContext);
+                    if (!tagNamesAreEquivalent(opening.tagName, closingElement.tagName)) {
+                        if (openingTag && ts.isJsxOpeningElement(openingTag) && tagNamesAreEquivalent(closingElement.tagName, openingTag.tagName)) {
+                            // opening incorrectly matched with its parent's closing -- put error on opening
+                            parseErrorAtRange(opening.tagName, ts.Diagnostics.JSX_element_0_has_no_corresponding_closing_tag, ts.getTextOfNodeFromSourceText(sourceText, opening.tagName));
+                        }
+                        else {
+                            // other opening/closing mismatches -- put error on closing
+                            parseErrorAtRange(closingElement.tagName, ts.Diagnostics.Expected_corresponding_JSX_closing_tag_for_0, ts.getTextOfNodeFromSourceText(sourceText, opening.tagName));
+                        }
+                    }
                 }
                 result = finishNode(factory.createJsxElement(opening, children, closingElement), pos);
             }
-            else if (opening.kind === 279 /* JsxOpeningFragment */) {
+            else if (opening.kind === 281 /* JsxOpeningFragment */) {
                 result = finishNode(factory.createJsxFragment(opening, parseJsxChildren(opening), parseJsxClosingFragment(inExpressionContext)), pos);
             }
             else {
-                ts.Debug.assert(opening.kind === 275 /* JsxSelfClosingElement */);
+                ts.Debug.assert(opening.kind === 277 /* JsxSelfClosingElement */);
                 // Nothing else to do for self-closing elements
                 result = opening;
             }
@@ -33318,7 +34148,7 @@
                 case 18 /* OpenBraceToken */:
                     return parseJsxExpression(/*inExpressionContext*/ false);
                 case 29 /* LessThanToken */:
-                    return parseJsxElementOrSelfClosingElementOrFragment(/*inExpressionContext*/ false);
+                    return parseJsxElementOrSelfClosingElementOrFragment(/*inExpressionContext*/ false, /*topInvalidNodePosition*/ undefined, openingTag);
                 default:
                     return ts.Debug.assertNever(token);
             }
@@ -33333,6 +34163,13 @@
                 if (!child)
                     break;
                 list.push(child);
+                if (ts.isJsxOpeningElement(openingTag)
+                    && (child === null || child === void 0 ? void 0 : child.kind) === 276 /* JsxElement */
+                    && !tagNamesAreEquivalent(child.openingElement.tagName, child.closingElement.tagName)
+                    && tagNamesAreEquivalent(openingTag.tagName, child.closingElement.tagName)) {
+                    // stop after parsing a mismatched child like <div>...(<span></div>) in order to reattach the </div> higher
+                    break;
+                }
             }
             parsingContext = saveParsingContext;
             return createNodeArray(list, listPos);
@@ -33362,12 +34199,14 @@
             }
             else {
                 parseExpected(43 /* SlashToken */);
-                if (inExpressionContext) {
-                    parseExpected(31 /* GreaterThanToken */);
-                }
-                else {
-                    parseExpected(31 /* GreaterThanToken */, /*diagnostic*/ undefined, /*shouldAdvance*/ false);
-                    scanJsxText();
+                if (parseExpected(31 /* GreaterThanToken */, /*diagnostic*/ undefined, /*shouldAdvance*/ false)) {
+                    // manually advance the scanner in order to look for jsx text inside jsx
+                    if (inExpressionContext) {
+                        nextToken();
+                    }
+                    else {
+                        scanJsxText();
+                    }
                 }
                 node = factory.createJsxSelfClosingElement(tagName, typeArguments, attributes);
             }
@@ -33381,7 +34220,7 @@
             //      primaryExpression in the form of an identifier and "this" keyword
             // We can't just simply use parseLeftHandSideExpressionOrHigher because then we will start consider class,function etc as a keyword
             // We only want to consider "this" as a primaryExpression
-            var expression = token() === 107 /* ThisKeyword */ ?
+            var expression = token() === 108 /* ThisKeyword */ ?
                 parseTokenNode() : parseIdentifierName();
             while (parseOptional(24 /* DotToken */)) {
                 expression = finishNode(factory.createPropertyAccessExpression(expression, parseRightSideOfDot(/*allowIdentifierNames*/ true, /*allowPrivateIdentifiers*/ false)), pos);
@@ -33418,7 +34257,7 @@
             }
             scanJsxIdentifier();
             var pos = getNodePos();
-            return finishNode(factory.createJsxAttribute(parseIdentifierName(), token() !== 62 /* EqualsToken */ ? undefined :
+            return finishNode(factory.createJsxAttribute(parseIdentifierName(), token() !== 63 /* EqualsToken */ ? undefined :
                 scanJsxAttributeValue() === 10 /* StringLiteral */ ? parseLiteralNode() :
                     parseJsxExpression(/*inExpressionContext*/ true)), pos);
         }
@@ -33430,16 +34269,18 @@
             parseExpected(19 /* CloseBraceToken */);
             return finishNode(factory.createJsxSpreadAttribute(expression), pos);
         }
-        function parseJsxClosingElement(inExpressionContext) {
+        function parseJsxClosingElement(open, inExpressionContext) {
             var pos = getNodePos();
             parseExpected(30 /* LessThanSlashToken */);
             var tagName = parseJsxElementName();
-            if (inExpressionContext) {
-                parseExpected(31 /* GreaterThanToken */);
-            }
-            else {
-                parseExpected(31 /* GreaterThanToken */, /*diagnostic*/ undefined, /*shouldAdvance*/ false);
-                scanJsxText();
+            if (parseExpected(31 /* GreaterThanToken */, /*diagnostic*/ undefined, /*shouldAdvance*/ false)) {
+                // manually advance the scanner in order to look for jsx text inside jsx
+                if (inExpressionContext || !tagNamesAreEquivalent(open.tagName, tagName)) {
+                    nextToken();
+                }
+                else {
+                    scanJsxText();
+                }
             }
             return finishNode(factory.createJsxClosingElement(tagName), pos);
         }
@@ -33449,12 +34290,14 @@
             if (ts.tokenIsIdentifierOrKeyword(token())) {
                 parseErrorAtRange(parseJsxElementName(), ts.Diagnostics.Expected_corresponding_closing_tag_for_JSX_fragment);
             }
-            if (inExpressionContext) {
-                parseExpected(31 /* GreaterThanToken */);
-            }
-            else {
-                parseExpected(31 /* GreaterThanToken */, /*diagnostic*/ undefined, /*shouldAdvance*/ false);
-                scanJsxText();
+            if (parseExpected(31 /* GreaterThanToken */, /*diagnostic*/ undefined, /*shouldAdvance*/ false)) {
+                // manually advance the scanner in order to look for jsx text inside jsx
+                if (inExpressionContext) {
+                    nextToken();
+                }
+                else {
+                    scanJsxText();
+                }
             }
             return finishNode(factory.createJsxJsxClosingFragment(), pos);
         }
@@ -33511,7 +34354,7 @@
         function parseElementAccessExpressionRest(pos, expression, questionDotToken) {
             var argumentExpression;
             if (token() === 23 /* CloseBracketToken */) {
-                argumentExpression = createMissingNode(78 /* Identifier */, /*reportAtCurrentPosition*/ true, ts.Diagnostics.An_element_access_expression_should_take_an_argument);
+                argumentExpression = createMissingNode(79 /* Identifier */, /*reportAtCurrentPosition*/ true, ts.Diagnostics.An_element_access_expression_should_take_an_argument);
             }
             else {
                 var argument = allowInAnd(parseExpression);
@@ -33606,7 +34449,7 @@
                 }
                 if (questionDotToken) {
                     // We failed to parse anything, so report a missing identifier here.
-                    var name = createMissingNode(78 /* Identifier */, /*reportAtCurrentPosition*/ false, ts.Diagnostics.Identifier_expected);
+                    var name = createMissingNode(79 /* Identifier */, /*reportAtCurrentPosition*/ false, ts.Diagnostics.Identifier_expected);
                     expression = finishNode(factory.createPropertyAccessChain(expression, questionDotToken, name), pos);
                 }
                 break;
@@ -33687,11 +34530,11 @@
                 case 10 /* StringLiteral */:
                 case 14 /* NoSubstitutionTemplateLiteral */:
                     return parseLiteralNode();
-                case 107 /* ThisKeyword */:
-                case 105 /* SuperKeyword */:
-                case 103 /* NullKeyword */:
-                case 109 /* TrueKeyword */:
-                case 94 /* FalseKeyword */:
+                case 108 /* ThisKeyword */:
+                case 106 /* SuperKeyword */:
+                case 104 /* NullKeyword */:
+                case 110 /* TrueKeyword */:
+                case 95 /* FalseKeyword */:
                     return parseTokenNode();
                 case 20 /* OpenParenToken */:
                     return parseParenthesizedExpression();
@@ -33699,7 +34542,7 @@
                     return parseArrayLiteralExpression();
                 case 18 /* OpenBraceToken */:
                     return parseObjectLiteralExpression();
-                case 129 /* AsyncKeyword */:
+                case 130 /* AsyncKeyword */:
                     // Async arrow functions are parsed earlier in parseAssignmentExpressionOrHigher.
                     // If we encounter `async [no LineTerminator here] function` then this is an async
                     // function; otherwise, its an identifier.
@@ -33707,14 +34550,14 @@
                         break;
                     }
                     return parseFunctionExpression();
-                case 83 /* ClassKeyword */:
+                case 84 /* ClassKeyword */:
                     return parseClassExpression();
-                case 97 /* FunctionKeyword */:
+                case 98 /* FunctionKeyword */:
                     return parseFunctionExpression();
-                case 102 /* NewKeyword */:
+                case 103 /* NewKeyword */:
                     return parseNewExpressionOrNewDotTarget();
                 case 43 /* SlashToken */:
-                case 67 /* SlashEqualsToken */:
+                case 68 /* SlashEqualsToken */:
                     if (reScanSlashToken() === 13 /* RegularExpressionLiteral */) {
                         return parseLiteralNode();
                     }
@@ -33763,11 +34606,11 @@
             }
             var decorators = parseDecorators();
             var modifiers = parseModifiers();
-            if (parseContextualModifier(134 /* GetKeyword */)) {
-                return parseAccessorDeclaration(pos, hasJSDoc, decorators, modifiers, 168 /* GetAccessor */);
+            if (parseContextualModifier(135 /* GetKeyword */)) {
+                return parseAccessorDeclaration(pos, hasJSDoc, decorators, modifiers, 170 /* GetAccessor */);
             }
-            if (parseContextualModifier(146 /* SetKeyword */)) {
-                return parseAccessorDeclaration(pos, hasJSDoc, decorators, modifiers, 169 /* SetAccessor */);
+            if (parseContextualModifier(147 /* SetKeyword */)) {
+                return parseAccessorDeclaration(pos, hasJSDoc, decorators, modifiers, 171 /* SetAccessor */);
             }
             var asteriskToken = parseOptionalToken(41 /* AsteriskToken */);
             var tokenIsIdentifier = isIdentifier();
@@ -33786,7 +34629,7 @@
             var node;
             var isShorthandPropertyAssignment = tokenIsIdentifier && (token() !== 58 /* ColonToken */);
             if (isShorthandPropertyAssignment) {
-                var equalsToken = parseOptionalToken(62 /* EqualsToken */);
+                var equalsToken = parseOptionalToken(63 /* EqualsToken */);
                 var objectAssignmentInitializer = equalsToken ? allowInAnd(parseAssignmentExpressionOrHigher) : undefined;
                 node = factory.createShorthandPropertyAssignment(name, objectAssignmentInitializer);
                 // Save equals token for error reporting.
@@ -33825,14 +34668,12 @@
             //
             // FunctionExpression:
             //      function BindingIdentifier[opt](FormalParameters){ FunctionBody }
-            var saveDecoratorContext = inDecoratorContext();
-            if (saveDecoratorContext) {
-                setDecoratorContext(/*val*/ false);
-            }
+            var savedDecoratorContext = inDecoratorContext();
+            setDecoratorContext(/*val*/ false);
             var pos = getNodePos();
             var hasJSDoc = hasPrecedingJSDocComment();
             var modifiers = parseModifiers();
-            parseExpected(97 /* FunctionKeyword */);
+            parseExpected(98 /* FunctionKeyword */);
             var asteriskToken = parseOptionalToken(41 /* AsteriskToken */);
             var isGenerator = asteriskToken ? 1 /* Yield */ : 0 /* None */;
             var isAsync = ts.some(modifiers, ts.isAsyncModifier) ? 2 /* Await */ : 0 /* None */;
@@ -33844,9 +34685,7 @@
             var parameters = parseParameters(isGenerator | isAsync);
             var type = parseReturnType(58 /* ColonToken */, /*isType*/ false);
             var body = parseFunctionBlock(isGenerator | isAsync);
-            if (saveDecoratorContext) {
-                setDecoratorContext(/*val*/ true);
-            }
+            setDecoratorContext(savedDecoratorContext);
             var node = factory.createFunctionExpression(modifiers, asteriskToken, name, typeParameters, parameters, type, body);
             return withJSDoc(finishNode(node, pos), hasJSDoc);
         }
@@ -33855,10 +34694,10 @@
         }
         function parseNewExpressionOrNewDotTarget() {
             var pos = getNodePos();
-            parseExpected(102 /* NewKeyword */);
+            parseExpected(103 /* NewKeyword */);
             if (parseOptional(24 /* DotToken */)) {
                 var name = parseIdentifierName();
-                return finishNode(factory.createMetaProperty(102 /* NewKeyword */, name), pos);
+                return finishNode(factory.createMetaProperty(103 /* NewKeyword */, name), pos);
             }
             var expressionPos = getNodePos();
             var expression = parsePrimaryExpression();
@@ -33897,7 +34736,7 @@
                     }
                 }
                 var result = withJSDoc(finishNode(factory.createBlock(statements, multiLine), pos), hasJSDoc);
-                if (token() === 62 /* EqualsToken */) {
+                if (token() === 63 /* EqualsToken */) {
                     parseErrorAtCurrentToken(ts.Diagnostics.Declaration_or_statement_expected_This_follows_a_block_of_statements_so_if_you_intended_to_write_a_destructuring_assignment_you_might_need_to_wrap_the_the_whole_assignment_in_parentheses);
                     nextToken();
                 }
@@ -33939,20 +34778,20 @@
         function parseIfStatement() {
             var pos = getNodePos();
             var hasJSDoc = hasPrecedingJSDocComment();
-            parseExpected(98 /* IfKeyword */);
+            parseExpected(99 /* IfKeyword */);
             parseExpected(20 /* OpenParenToken */);
             var expression = allowInAnd(parseExpression);
             parseExpected(21 /* CloseParenToken */);
             var thenStatement = parseStatement();
-            var elseStatement = parseOptional(90 /* ElseKeyword */) ? parseStatement() : undefined;
+            var elseStatement = parseOptional(91 /* ElseKeyword */) ? parseStatement() : undefined;
             return withJSDoc(finishNode(factory.createIfStatement(expression, thenStatement, elseStatement), pos), hasJSDoc);
         }
         function parseDoStatement() {
             var pos = getNodePos();
             var hasJSDoc = hasPrecedingJSDocComment();
-            parseExpected(89 /* DoKeyword */);
+            parseExpected(90 /* DoKeyword */);
             var statement = parseStatement();
-            parseExpected(114 /* WhileKeyword */);
+            parseExpected(115 /* WhileKeyword */);
             parseExpected(20 /* OpenParenToken */);
             var expression = allowInAnd(parseExpression);
             parseExpected(21 /* CloseParenToken */);
@@ -33966,7 +34805,7 @@
         function parseWhileStatement() {
             var pos = getNodePos();
             var hasJSDoc = hasPrecedingJSDocComment();
-            parseExpected(114 /* WhileKeyword */);
+            parseExpected(115 /* WhileKeyword */);
             parseExpected(20 /* OpenParenToken */);
             var expression = allowInAnd(parseExpression);
             parseExpected(21 /* CloseParenToken */);
@@ -33976,12 +34815,12 @@
         function parseForOrForInOrForOfStatement() {
             var pos = getNodePos();
             var hasJSDoc = hasPrecedingJSDocComment();
-            parseExpected(96 /* ForKeyword */);
-            var awaitToken = parseOptionalToken(130 /* AwaitKeyword */);
+            parseExpected(97 /* ForKeyword */);
+            var awaitToken = parseOptionalToken(131 /* AwaitKeyword */);
             parseExpected(20 /* OpenParenToken */);
             var initializer;
             if (token() !== 26 /* SemicolonToken */) {
-                if (token() === 112 /* VarKeyword */ || token() === 118 /* LetKeyword */ || token() === 84 /* ConstKeyword */) {
+                if (token() === 113 /* VarKeyword */ || token() === 119 /* LetKeyword */ || token() === 85 /* ConstKeyword */) {
                     initializer = parseVariableDeclarationList(/*inForStatementInitializer*/ true);
                 }
                 else {
@@ -33989,12 +34828,12 @@
                 }
             }
             var node;
-            if (awaitToken ? parseExpected(157 /* OfKeyword */) : parseOptional(157 /* OfKeyword */)) {
+            if (awaitToken ? parseExpected(158 /* OfKeyword */) : parseOptional(158 /* OfKeyword */)) {
                 var expression = allowInAnd(parseAssignmentExpressionOrHigher);
                 parseExpected(21 /* CloseParenToken */);
                 node = factory.createForOfStatement(awaitToken, initializer, expression, parseStatement());
             }
-            else if (parseOptional(100 /* InKeyword */)) {
+            else if (parseOptional(101 /* InKeyword */)) {
                 var expression = allowInAnd(parseExpression);
                 parseExpected(21 /* CloseParenToken */);
                 node = factory.createForInStatement(initializer, expression, parseStatement());
@@ -34016,10 +34855,10 @@
         function parseBreakOrContinueStatement(kind) {
             var pos = getNodePos();
             var hasJSDoc = hasPrecedingJSDocComment();
-            parseExpected(kind === 242 /* BreakStatement */ ? 80 /* BreakKeyword */ : 85 /* ContinueKeyword */);
+            parseExpected(kind === 244 /* BreakStatement */ ? 81 /* BreakKeyword */ : 86 /* ContinueKeyword */);
             var label = canParseSemicolon() ? undefined : parseIdentifier();
             parseSemicolon();
-            var node = kind === 242 /* BreakStatement */
+            var node = kind === 244 /* BreakStatement */
                 ? factory.createBreakStatement(label)
                 : factory.createContinueStatement(label);
             return withJSDoc(finishNode(node, pos), hasJSDoc);
@@ -34027,7 +34866,7 @@
         function parseReturnStatement() {
             var pos = getNodePos();
             var hasJSDoc = hasPrecedingJSDocComment();
-            parseExpected(104 /* ReturnKeyword */);
+            parseExpected(105 /* ReturnKeyword */);
             var expression = canParseSemicolon() ? undefined : allowInAnd(parseExpression);
             parseSemicolon();
             return withJSDoc(finishNode(factory.createReturnStatement(expression), pos), hasJSDoc);
@@ -34035,7 +34874,7 @@
         function parseWithStatement() {
             var pos = getNodePos();
             var hasJSDoc = hasPrecedingJSDocComment();
-            parseExpected(115 /* WithKeyword */);
+            parseExpected(116 /* WithKeyword */);
             parseExpected(20 /* OpenParenToken */);
             var expression = allowInAnd(parseExpression);
             parseExpected(21 /* CloseParenToken */);
@@ -34044,7 +34883,7 @@
         }
         function parseCaseClause() {
             var pos = getNodePos();
-            parseExpected(81 /* CaseKeyword */);
+            parseExpected(82 /* CaseKeyword */);
             var expression = allowInAnd(parseExpression);
             parseExpected(58 /* ColonToken */);
             var statements = parseList(3 /* SwitchClauseStatements */, parseStatement);
@@ -34052,13 +34891,13 @@
         }
         function parseDefaultClause() {
             var pos = getNodePos();
-            parseExpected(87 /* DefaultKeyword */);
+            parseExpected(88 /* DefaultKeyword */);
             parseExpected(58 /* ColonToken */);
             var statements = parseList(3 /* SwitchClauseStatements */, parseStatement);
             return finishNode(factory.createDefaultClause(statements), pos);
         }
         function parseCaseOrDefaultClause() {
-            return token() === 81 /* CaseKeyword */ ? parseCaseClause() : parseDefaultClause();
+            return token() === 82 /* CaseKeyword */ ? parseCaseClause() : parseDefaultClause();
         }
         function parseCaseBlock() {
             var pos = getNodePos();
@@ -34070,7 +34909,7 @@
         function parseSwitchStatement() {
             var pos = getNodePos();
             var hasJSDoc = hasPrecedingJSDocComment();
-            parseExpected(106 /* SwitchKeyword */);
+            parseExpected(107 /* SwitchKeyword */);
             parseExpected(20 /* OpenParenToken */);
             var expression = allowInAnd(parseExpression);
             parseExpected(21 /* CloseParenToken */);
@@ -34082,7 +34921,7 @@
             //      throw [no LineTerminator here]Expression[In, ?Yield];
             var pos = getNodePos();
             var hasJSDoc = hasPrecedingJSDocComment();
-            parseExpected(108 /* ThrowKeyword */);
+            parseExpected(109 /* ThrowKeyword */);
             // Because of automatic semicolon insertion, we need to report error if this
             // throw could be terminated with a semicolon.  Note: we can't call 'parseExpression'
             // directly as that might consume an expression on the following line.
@@ -34093,28 +34932,30 @@
                 identifierCount++;
                 expression = finishNode(factory.createIdentifier(""), getNodePos());
             }
-            parseSemicolon();
+            if (!tryParseSemicolon()) {
+                parseErrorForMissingSemicolonAfter(expression);
+            }
             return withJSDoc(finishNode(factory.createThrowStatement(expression), pos), hasJSDoc);
         }
         // TODO: Review for error recovery
         function parseTryStatement() {
             var pos = getNodePos();
             var hasJSDoc = hasPrecedingJSDocComment();
-            parseExpected(110 /* TryKeyword */);
+            parseExpected(111 /* TryKeyword */);
             var tryBlock = parseBlock(/*ignoreMissingOpenBrace*/ false);
-            var catchClause = token() === 82 /* CatchKeyword */ ? parseCatchClause() : undefined;
+            var catchClause = token() === 83 /* CatchKeyword */ ? parseCatchClause() : undefined;
             // If we don't have a catch clause, then we must have a finally clause.  Try to parse
             // one out no matter what.
             var finallyBlock;
-            if (!catchClause || token() === 95 /* FinallyKeyword */) {
-                parseExpected(95 /* FinallyKeyword */);
+            if (!catchClause || token() === 96 /* FinallyKeyword */) {
+                parseExpected(96 /* FinallyKeyword */);
                 finallyBlock = parseBlock(/*ignoreMissingOpenBrace*/ false);
             }
             return withJSDoc(finishNode(factory.createTryStatement(tryBlock, catchClause, finallyBlock), pos), hasJSDoc);
         }
         function parseCatchClause() {
             var pos = getNodePos();
-            parseExpected(82 /* CatchKeyword */);
+            parseExpected(83 /* CatchKeyword */);
             var variableDeclaration;
             if (parseOptional(20 /* OpenParenToken */)) {
                 variableDeclaration = parseVariableDeclaration();
@@ -34130,7 +34971,7 @@
         function parseDebuggerStatement() {
             var pos = getNodePos();
             var hasJSDoc = hasPrecedingJSDocComment();
-            parseExpected(86 /* DebuggerKeyword */);
+            parseExpected(87 /* DebuggerKeyword */);
             parseSemicolon();
             return withJSDoc(finishNode(factory.createDebuggerStatement(), pos), hasJSDoc);
         }
@@ -34147,7 +34988,9 @@
                 node = factory.createLabeledStatement(expression, parseStatement());
             }
             else {
-                parseSemicolon();
+                if (!tryParseSemicolon()) {
+                    parseErrorForMissingSemicolonAfter(expression);
+                }
                 node = factory.createExpressionStatement(expression);
                 if (hasParen) {
                     // do not parse the same jsdoc twice
@@ -34162,11 +35005,11 @@
         }
         function nextTokenIsClassKeywordOnSameLine() {
             nextToken();
-            return token() === 83 /* ClassKeyword */ && !scanner.hasPrecedingLineBreak();
+            return token() === 84 /* ClassKeyword */ && !scanner.hasPrecedingLineBreak();
         }
         function nextTokenIsFunctionKeywordOnSameLine() {
             nextToken();
-            return token() === 97 /* FunctionKeyword */ && !scanner.hasPrecedingLineBreak();
+            return token() === 98 /* FunctionKeyword */ && !scanner.hasPrecedingLineBreak();
         }
         function nextTokenIsIdentifierOrKeywordOrLiteralOnSameLine() {
             nextToken();
@@ -34175,12 +35018,12 @@
         function isDeclaration() {
             while (true) {
                 switch (token()) {
-                    case 112 /* VarKeyword */:
-                    case 118 /* LetKeyword */:
-                    case 84 /* ConstKeyword */:
-                    case 97 /* FunctionKeyword */:
-                    case 83 /* ClassKeyword */:
-                    case 91 /* EnumKeyword */:
+                    case 113 /* VarKeyword */:
+                    case 119 /* LetKeyword */:
+                    case 85 /* ConstKeyword */:
+                    case 98 /* FunctionKeyword */:
+                    case 84 /* ClassKeyword */:
+                    case 92 /* EnumKeyword */:
                         return true;
                     // 'declare', 'module', 'namespace', 'interface'* and 'type' are all legal JavaScript identifiers;
                     // however, an identifier cannot be followed by another identifier on the same line. This is what we
@@ -34203,44 +35046,44 @@
                     //   I {}
                     //
                     // could be legal, it would add complexity for very little gain.
-                    case 117 /* InterfaceKeyword */:
-                    case 149 /* TypeKeyword */:
+                    case 118 /* InterfaceKeyword */:
+                    case 150 /* TypeKeyword */:
                         return nextTokenIsIdentifierOnSameLine();
-                    case 139 /* ModuleKeyword */:
-                    case 140 /* NamespaceKeyword */:
+                    case 140 /* ModuleKeyword */:
+                    case 141 /* NamespaceKeyword */:
                         return nextTokenIsIdentifierOrStringLiteralOnSameLine();
-                    case 125 /* AbstractKeyword */:
-                    case 129 /* AsyncKeyword */:
-                    case 133 /* DeclareKeyword */:
-                    case 120 /* PrivateKeyword */:
-                    case 121 /* ProtectedKeyword */:
-                    case 122 /* PublicKeyword */:
-                    case 142 /* ReadonlyKeyword */:
+                    case 126 /* AbstractKeyword */:
+                    case 130 /* AsyncKeyword */:
+                    case 134 /* DeclareKeyword */:
+                    case 121 /* PrivateKeyword */:
+                    case 122 /* ProtectedKeyword */:
+                    case 123 /* PublicKeyword */:
+                    case 143 /* ReadonlyKeyword */:
                         nextToken();
                         // ASI takes effect for this modifier.
                         if (scanner.hasPrecedingLineBreak()) {
                             return false;
                         }
                         continue;
-                    case 154 /* GlobalKeyword */:
+                    case 155 /* GlobalKeyword */:
                         nextToken();
-                        return token() === 18 /* OpenBraceToken */ || token() === 78 /* Identifier */ || token() === 92 /* ExportKeyword */;
-                    case 99 /* ImportKeyword */:
+                        return token() === 18 /* OpenBraceToken */ || token() === 79 /* Identifier */ || token() === 93 /* ExportKeyword */;
+                    case 100 /* ImportKeyword */:
                         nextToken();
                         return token() === 10 /* StringLiteral */ || token() === 41 /* AsteriskToken */ ||
                             token() === 18 /* OpenBraceToken */ || ts.tokenIsIdentifierOrKeyword(token());
-                    case 92 /* ExportKeyword */:
+                    case 93 /* ExportKeyword */:
                         var currentToken_1 = nextToken();
-                        if (currentToken_1 === 149 /* TypeKeyword */) {
+                        if (currentToken_1 === 150 /* TypeKeyword */) {
                             currentToken_1 = lookAhead(nextToken);
                         }
-                        if (currentToken_1 === 62 /* EqualsToken */ || currentToken_1 === 41 /* AsteriskToken */ ||
-                            currentToken_1 === 18 /* OpenBraceToken */ || currentToken_1 === 87 /* DefaultKeyword */ ||
-                            currentToken_1 === 126 /* AsKeyword */) {
+                        if (currentToken_1 === 63 /* EqualsToken */ || currentToken_1 === 41 /* AsteriskToken */ ||
+                            currentToken_1 === 18 /* OpenBraceToken */ || currentToken_1 === 88 /* DefaultKeyword */ ||
+                            currentToken_1 === 127 /* AsKeyword */) {
                             return true;
                         }
                         continue;
-                    case 123 /* StaticKeyword */:
+                    case 124 /* StaticKeyword */:
                         nextToken();
                         continue;
                     default:
@@ -34256,48 +35099,48 @@
                 case 59 /* AtToken */:
                 case 26 /* SemicolonToken */:
                 case 18 /* OpenBraceToken */:
-                case 112 /* VarKeyword */:
-                case 118 /* LetKeyword */:
-                case 97 /* FunctionKeyword */:
-                case 83 /* ClassKeyword */:
-                case 91 /* EnumKeyword */:
-                case 98 /* IfKeyword */:
-                case 89 /* DoKeyword */:
-                case 114 /* WhileKeyword */:
-                case 96 /* ForKeyword */:
-                case 85 /* ContinueKeyword */:
-                case 80 /* BreakKeyword */:
-                case 104 /* ReturnKeyword */:
-                case 115 /* WithKeyword */:
-                case 106 /* SwitchKeyword */:
-                case 108 /* ThrowKeyword */:
-                case 110 /* TryKeyword */:
-                case 86 /* DebuggerKeyword */:
+                case 113 /* VarKeyword */:
+                case 119 /* LetKeyword */:
+                case 98 /* FunctionKeyword */:
+                case 84 /* ClassKeyword */:
+                case 92 /* EnumKeyword */:
+                case 99 /* IfKeyword */:
+                case 90 /* DoKeyword */:
+                case 115 /* WhileKeyword */:
+                case 97 /* ForKeyword */:
+                case 86 /* ContinueKeyword */:
+                case 81 /* BreakKeyword */:
+                case 105 /* ReturnKeyword */:
+                case 116 /* WithKeyword */:
+                case 107 /* SwitchKeyword */:
+                case 109 /* ThrowKeyword */:
+                case 111 /* TryKeyword */:
+                case 87 /* DebuggerKeyword */:
                 // 'catch' and 'finally' do not actually indicate that the code is part of a statement,
                 // however, we say they are here so that we may gracefully parse them and error later.
                 // falls through
-                case 82 /* CatchKeyword */:
-                case 95 /* FinallyKeyword */:
+                case 83 /* CatchKeyword */:
+                case 96 /* FinallyKeyword */:
                     return true;
-                case 99 /* ImportKeyword */:
+                case 100 /* ImportKeyword */:
                     return isStartOfDeclaration() || lookAhead(nextTokenIsOpenParenOrLessThanOrDot);
-                case 84 /* ConstKeyword */:
-                case 92 /* ExportKeyword */:
+                case 85 /* ConstKeyword */:
+                case 93 /* ExportKeyword */:
                     return isStartOfDeclaration();
-                case 129 /* AsyncKeyword */:
-                case 133 /* DeclareKeyword */:
-                case 117 /* InterfaceKeyword */:
-                case 139 /* ModuleKeyword */:
-                case 140 /* NamespaceKeyword */:
-                case 149 /* TypeKeyword */:
-                case 154 /* GlobalKeyword */:
+                case 130 /* AsyncKeyword */:
+                case 134 /* DeclareKeyword */:
+                case 118 /* InterfaceKeyword */:
+                case 140 /* ModuleKeyword */:
+                case 141 /* NamespaceKeyword */:
+                case 150 /* TypeKeyword */:
+                case 155 /* GlobalKeyword */:
                     // When these don't start a declaration, they're an identifier in an expression statement
                     return true;
-                case 122 /* PublicKeyword */:
-                case 120 /* PrivateKeyword */:
-                case 121 /* ProtectedKeyword */:
-                case 123 /* StaticKeyword */:
-                case 142 /* ReadonlyKeyword */:
+                case 123 /* PublicKeyword */:
+                case 121 /* PrivateKeyword */:
+                case 122 /* ProtectedKeyword */:
+                case 124 /* StaticKeyword */:
+                case 143 /* ReadonlyKeyword */:
                     // When these don't start a declaration, they may be the start of a class member if an identifier
                     // immediately follows. Otherwise they're an identifier in an expression statement.
                     return isStartOfDeclaration() || !lookAhead(nextTokenIsIdentifierOrKeywordOnSameLine);
@@ -34305,14 +35148,14 @@
                     return isStartOfExpression();
             }
         }
-        function nextTokenIsIdentifierOrStartOfDestructuring() {
+        function nextTokenIsBindingIdentifierOrStartOfDestructuring() {
             nextToken();
-            return isIdentifier() || token() === 18 /* OpenBraceToken */ || token() === 22 /* OpenBracketToken */;
+            return isBindingIdentifier() || token() === 18 /* OpenBraceToken */ || token() === 22 /* OpenBracketToken */;
         }
         function isLetDeclaration() {
             // In ES6 'let' always starts a lexical declaration if followed by an identifier or {
             // or [.
-            return lookAhead(nextTokenIsIdentifierOrStartOfDestructuring);
+            return lookAhead(nextTokenIsBindingIdentifierOrStartOfDestructuring);
         }
         function parseStatement() {
             switch (token()) {
@@ -34320,64 +35163,64 @@
                     return parseEmptyStatement();
                 case 18 /* OpenBraceToken */:
                     return parseBlock(/*ignoreMissingOpenBrace*/ false);
-                case 112 /* VarKeyword */:
+                case 113 /* VarKeyword */:
                     return parseVariableStatement(getNodePos(), hasPrecedingJSDocComment(), /*decorators*/ undefined, /*modifiers*/ undefined);
-                case 118 /* LetKeyword */:
+                case 119 /* LetKeyword */:
                     if (isLetDeclaration()) {
                         return parseVariableStatement(getNodePos(), hasPrecedingJSDocComment(), /*decorators*/ undefined, /*modifiers*/ undefined);
                     }
                     break;
-                case 97 /* FunctionKeyword */:
+                case 98 /* FunctionKeyword */:
                     return parseFunctionDeclaration(getNodePos(), hasPrecedingJSDocComment(), /*decorators*/ undefined, /*modifiers*/ undefined);
-                case 83 /* ClassKeyword */:
+                case 84 /* ClassKeyword */:
                     return parseClassDeclaration(getNodePos(), hasPrecedingJSDocComment(), /*decorators*/ undefined, /*modifiers*/ undefined);
-                case 98 /* IfKeyword */:
+                case 99 /* IfKeyword */:
                     return parseIfStatement();
-                case 89 /* DoKeyword */:
+                case 90 /* DoKeyword */:
                     return parseDoStatement();
-                case 114 /* WhileKeyword */:
+                case 115 /* WhileKeyword */:
                     return parseWhileStatement();
-                case 96 /* ForKeyword */:
+                case 97 /* ForKeyword */:
                     return parseForOrForInOrForOfStatement();
-                case 85 /* ContinueKeyword */:
-                    return parseBreakOrContinueStatement(241 /* ContinueStatement */);
-                case 80 /* BreakKeyword */:
-                    return parseBreakOrContinueStatement(242 /* BreakStatement */);
-                case 104 /* ReturnKeyword */:
+                case 86 /* ContinueKeyword */:
+                    return parseBreakOrContinueStatement(243 /* ContinueStatement */);
+                case 81 /* BreakKeyword */:
+                    return parseBreakOrContinueStatement(244 /* BreakStatement */);
+                case 105 /* ReturnKeyword */:
                     return parseReturnStatement();
-                case 115 /* WithKeyword */:
+                case 116 /* WithKeyword */:
                     return parseWithStatement();
-                case 106 /* SwitchKeyword */:
+                case 107 /* SwitchKeyword */:
                     return parseSwitchStatement();
-                case 108 /* ThrowKeyword */:
+                case 109 /* ThrowKeyword */:
                     return parseThrowStatement();
-                case 110 /* TryKeyword */:
+                case 111 /* TryKeyword */:
                 // Include 'catch' and 'finally' for error recovery.
                 // falls through
-                case 82 /* CatchKeyword */:
-                case 95 /* FinallyKeyword */:
+                case 83 /* CatchKeyword */:
+                case 96 /* FinallyKeyword */:
                     return parseTryStatement();
-                case 86 /* DebuggerKeyword */:
+                case 87 /* DebuggerKeyword */:
                     return parseDebuggerStatement();
                 case 59 /* AtToken */:
                     return parseDeclaration();
-                case 129 /* AsyncKeyword */:
-                case 117 /* InterfaceKeyword */:
-                case 149 /* TypeKeyword */:
-                case 139 /* ModuleKeyword */:
-                case 140 /* NamespaceKeyword */:
-                case 133 /* DeclareKeyword */:
-                case 84 /* ConstKeyword */:
-                case 91 /* EnumKeyword */:
-                case 92 /* ExportKeyword */:
-                case 99 /* ImportKeyword */:
-                case 120 /* PrivateKeyword */:
-                case 121 /* ProtectedKeyword */:
-                case 122 /* PublicKeyword */:
-                case 125 /* AbstractKeyword */:
-                case 123 /* StaticKeyword */:
-                case 142 /* ReadonlyKeyword */:
-                case 154 /* GlobalKeyword */:
+                case 130 /* AsyncKeyword */:
+                case 118 /* InterfaceKeyword */:
+                case 150 /* TypeKeyword */:
+                case 140 /* ModuleKeyword */:
+                case 141 /* NamespaceKeyword */:
+                case 134 /* DeclareKeyword */:
+                case 85 /* ConstKeyword */:
+                case 92 /* EnumKeyword */:
+                case 93 /* ExportKeyword */:
+                case 100 /* ImportKeyword */:
+                case 121 /* PrivateKeyword */:
+                case 122 /* ProtectedKeyword */:
+                case 123 /* PublicKeyword */:
+                case 126 /* AbstractKeyword */:
+                case 124 /* StaticKeyword */:
+                case 143 /* ReadonlyKeyword */:
+                case 155 /* GlobalKeyword */:
                     if (isStartOfDeclaration()) {
                         return parseDeclaration();
                     }
@@ -34386,7 +35229,7 @@
             return parseExpressionOrLabeledStatement();
         }
         function isDeclareModifier(modifier) {
-            return modifier.kind === 133 /* DeclareKeyword */;
+            return modifier.kind === 134 /* DeclareKeyword */;
         }
         function parseDeclaration() {
             // TODO: Can we hold onto the parsed decorators/modifiers and advance the scanner
@@ -34427,33 +35270,33 @@
         }
         function parseDeclarationWorker(pos, hasJSDoc, decorators, modifiers) {
             switch (token()) {
-                case 112 /* VarKeyword */:
-                case 118 /* LetKeyword */:
-                case 84 /* ConstKeyword */:
+                case 113 /* VarKeyword */:
+                case 119 /* LetKeyword */:
+                case 85 /* ConstKeyword */:
                     return parseVariableStatement(pos, hasJSDoc, decorators, modifiers);
-                case 97 /* FunctionKeyword */:
+                case 98 /* FunctionKeyword */:
                     return parseFunctionDeclaration(pos, hasJSDoc, decorators, modifiers);
-                case 83 /* ClassKeyword */:
+                case 84 /* ClassKeyword */:
                     return parseClassDeclaration(pos, hasJSDoc, decorators, modifiers);
-                case 117 /* InterfaceKeyword */:
+                case 118 /* InterfaceKeyword */:
                     return parseInterfaceDeclaration(pos, hasJSDoc, decorators, modifiers);
-                case 149 /* TypeKeyword */:
+                case 150 /* TypeKeyword */:
                     return parseTypeAliasDeclaration(pos, hasJSDoc, decorators, modifiers);
-                case 91 /* EnumKeyword */:
+                case 92 /* EnumKeyword */:
                     return parseEnumDeclaration(pos, hasJSDoc, decorators, modifiers);
-                case 154 /* GlobalKeyword */:
-                case 139 /* ModuleKeyword */:
-                case 140 /* NamespaceKeyword */:
+                case 155 /* GlobalKeyword */:
+                case 140 /* ModuleKeyword */:
+                case 141 /* NamespaceKeyword */:
                     return parseModuleDeclaration(pos, hasJSDoc, decorators, modifiers);
-                case 99 /* ImportKeyword */:
+                case 100 /* ImportKeyword */:
                     return parseImportDeclarationOrImportEqualsDeclaration(pos, hasJSDoc, decorators, modifiers);
-                case 92 /* ExportKeyword */:
+                case 93 /* ExportKeyword */:
                     nextToken();
                     switch (token()) {
-                        case 87 /* DefaultKeyword */:
-                        case 62 /* EqualsToken */:
+                        case 88 /* DefaultKeyword */:
+                        case 63 /* EqualsToken */:
                             return parseExportAssignment(pos, hasJSDoc, decorators, modifiers);
-                        case 126 /* AsKeyword */:
+                        case 127 /* AsKeyword */:
                             return parseNamespaceExportDeclaration(pos, hasJSDoc, decorators, modifiers);
                         default:
                             return parseExportDeclaration(pos, hasJSDoc, decorators, modifiers);
@@ -34462,7 +35305,7 @@
                     if (decorators || modifiers) {
                         // We reached this point because we encountered decorators and/or modifiers and assumed a declaration
                         // would follow. For recovery and error reporting purposes, return an incomplete declaration.
-                        var missing = createMissingNode(272 /* MissingDeclaration */, /*reportAtCurrentPosition*/ true, ts.Diagnostics.Declaration_expected);
+                        var missing = createMissingNode(274 /* MissingDeclaration */, /*reportAtCurrentPosition*/ true, ts.Diagnostics.Declaration_expected);
                         ts.setTextRangePos(missing, pos);
                         missing.decorators = decorators;
                         missing.modifiers = modifiers;
@@ -34527,7 +35370,7 @@
         function isBindingIdentifierOrPrivateIdentifierOrPattern() {
             return token() === 18 /* OpenBraceToken */
                 || token() === 22 /* OpenBracketToken */
-                || token() === 79 /* PrivateIdentifier */
+                || token() === 80 /* PrivateIdentifier */
                 || isBindingIdentifier();
         }
         function parseIdentifierOrPattern(privateIdentifierDiagnosticMessage) {
@@ -34547,7 +35390,7 @@
             var hasJSDoc = hasPrecedingJSDocComment();
             var name = parseIdentifierOrPattern(ts.Diagnostics.Private_identifiers_are_not_allowed_in_variable_declarations);
             var exclamationToken;
-            if (allowExclamation && name.kind === 78 /* Identifier */ &&
+            if (allowExclamation && name.kind === 79 /* Identifier */ &&
                 token() === 53 /* ExclamationToken */ && !scanner.hasPrecedingLineBreak()) {
                 exclamationToken = parseTokenNode();
             }
@@ -34560,12 +35403,12 @@
             var pos = getNodePos();
             var flags = 0;
             switch (token()) {
-                case 112 /* VarKeyword */:
+                case 113 /* VarKeyword */:
                     break;
-                case 118 /* LetKeyword */:
+                case 119 /* LetKeyword */:
                     flags |= 1 /* Let */;
                     break;
-                case 84 /* ConstKeyword */:
+                case 85 /* ConstKeyword */:
                     flags |= 2 /* Const */;
                     break;
                 default:
@@ -34582,7 +35425,7 @@
             // this context.
             // The checker will then give an error that there is an empty declaration list.
             var declarations;
-            if (token() === 157 /* OfKeyword */ && lookAhead(canFollowContextualOfKeyword)) {
+            if (token() === 158 /* OfKeyword */ && lookAhead(canFollowContextualOfKeyword)) {
                 declarations = createMissingList();
             }
             else {
@@ -34607,7 +35450,7 @@
         function parseFunctionDeclaration(pos, hasJSDoc, decorators, modifiers) {
             var savedAwaitContext = inAwaitContext();
             var modifierFlags = ts.modifiersToFlags(modifiers);
-            parseExpected(97 /* FunctionKeyword */);
+            parseExpected(98 /* FunctionKeyword */);
             var asteriskToken = parseOptionalToken(41 /* AsteriskToken */);
             // We don't parse the name here in await context, instead we will report a grammar error in the checker.
             var name = modifierFlags & 512 /* Default */ ? parseOptionalBindingIdentifier() : parseBindingIdentifier();
@@ -34624,8 +35467,8 @@
             return withJSDoc(finishNode(node, pos), hasJSDoc);
         }
         function parseConstructorName() {
-            if (token() === 132 /* ConstructorKeyword */) {
-                return parseExpected(132 /* ConstructorKeyword */);
+            if (token() === 133 /* ConstructorKeyword */) {
+                return parseExpected(133 /* ConstructorKeyword */);
             }
             if (token() === 10 /* StringLiteral */ && lookAhead(nextToken) === 20 /* OpenParenToken */) {
                 return tryParse(function () {
@@ -34665,7 +35508,7 @@
             var exclamationToken = !questionToken && !scanner.hasPrecedingLineBreak() ? parseOptionalToken(53 /* ExclamationToken */) : undefined;
             var type = parseTypeAnnotation();
             var initializer = doOutsideOfContext(8192 /* YieldContext */ | 32768 /* AwaitContext */ | 4096 /* DisallowInContext */, parseInitializer);
-            parseSemicolon();
+            parseSemicolonAfterPropertyName(name, type, initializer);
             var node = factory.createPropertyDeclaration(decorators, modifiers, name, questionToken || exclamationToken, type, initializer);
             return withJSDoc(finishNode(node, pos), hasJSDoc);
         }
@@ -34686,12 +35529,12 @@
             var parameters = parseParameters(0 /* None */);
             var type = parseReturnType(58 /* ColonToken */, /*isType*/ false);
             var body = parseFunctionBlockOrSemicolon(0 /* None */);
-            var node = kind === 168 /* GetAccessor */
+            var node = kind === 170 /* GetAccessor */
                 ? factory.createGetAccessorDeclaration(decorators, modifiers, name, parameters, type, body)
                 : factory.createSetAccessorDeclaration(decorators, modifiers, name, parameters, body);
             // Keep track of `typeParameters` (for both) and `type` (for setters) if they were parsed those indicate grammar errors
             node.typeParameters = typeParameters;
-            if (type && node.kind === 169 /* SetAccessor */)
+            if (type && node.kind === 171 /* SetAccessor */)
                 node.type = type;
             return withJSDoc(finishNode(node, pos), hasJSDoc);
         }
@@ -34730,7 +35573,7 @@
             // If we were able to get any potential identifier...
             if (idToken !== undefined) {
                 // If we have a non-keyword identifier, or if we have an accessor, then it's safe to parse.
-                if (!ts.isKeyword(idToken) || idToken === 146 /* SetKeyword */ || idToken === 134 /* GetKeyword */) {
+                if (!ts.isKeyword(idToken) || idToken === 147 /* SetKeyword */ || idToken === 135 /* GetKeyword */) {
                     return true;
                 }
                 // If it *is* a keyword, but not an accessor, check a little farther along
@@ -34740,7 +35583,7 @@
                     case 29 /* LessThanToken */: // Generic Method declaration
                     case 53 /* ExclamationToken */: // Non-null assertion on property name
                     case 58 /* ColonToken */: // Type Annotation for declaration
-                    case 62 /* EqualsToken */: // Initializer for declaration
+                    case 63 /* EqualsToken */: // Initializer for declaration
                     case 57 /* QuestionToken */: // Not valid, but permitted so that it gets caught later on.
                         return true;
                     default:
@@ -34754,8 +35597,23 @@
             }
             return false;
         }
+        function parseClassStaticBlockDeclaration(pos, hasJSDoc, decorators, modifiers) {
+            parseExpectedToken(124 /* StaticKeyword */);
+            var body = parseClassStaticBlockBody();
+            return withJSDoc(finishNode(factory.createClassStaticBlockDeclaration(decorators, modifiers, body), pos), hasJSDoc);
+        }
+        function parseClassStaticBlockBody() {
+            var savedYieldContext = inYieldContext();
+            var savedAwaitContext = inAwaitContext();
+            setYieldContext(false);
+            setAwaitContext(true);
+            var body = parseBlock(/*ignoreMissingOpenBrace*/ false);
+            setYieldContext(savedYieldContext);
+            setAwaitContext(savedAwaitContext);
+            return body;
+        }
         function parseDecoratorExpression() {
-            if (inAwaitContext() && token() === 130 /* AwaitKeyword */) {
+            if (inAwaitContext() && token() === 131 /* AwaitKeyword */) {
                 // `@await` is is disallowed in an [Await] context, but can cause parsing to go off the rails
                 // This simply parses the missing identifier and moves on.
                 var pos = getNodePos();
@@ -34782,16 +35640,19 @@
             }
             return list && createNodeArray(list, pos);
         }
-        function tryParseModifier(permitInvalidConstAsModifier) {
+        function tryParseModifier(permitInvalidConstAsModifier, stopOnStartOfClassStaticBlock) {
             var pos = getNodePos();
             var kind = token();
-            if (token() === 84 /* ConstKeyword */ && permitInvalidConstAsModifier) {
+            if (token() === 85 /* ConstKeyword */ && permitInvalidConstAsModifier) {
                 // We need to ensure that any subsequent modifiers appear on the same line
                 // so that when 'const' is a standalone declaration, we don't issue an error.
                 if (!tryParse(nextTokenIsOnSameLineAndCanFollowModifier)) {
                     return undefined;
                 }
             }
+            else if (stopOnStartOfClassStaticBlock && token() === 124 /* StaticKeyword */ && lookAhead(nextTokenIsOpenBrace)) {
+                return undefined;
+            }
             else {
                 if (!parseAnyContextualModifier()) {
                     return undefined;
@@ -34806,20 +35667,20 @@
          *
          * In such situations, 'permitInvalidConstAsModifier' should be set to true.
          */
-        function parseModifiers(permitInvalidConstAsModifier) {
+        function parseModifiers(permitInvalidConstAsModifier, stopOnStartOfClassStaticBlock) {
             var pos = getNodePos();
             var list, modifier;
-            while (modifier = tryParseModifier(permitInvalidConstAsModifier)) {
+            while (modifier = tryParseModifier(permitInvalidConstAsModifier, stopOnStartOfClassStaticBlock)) {
                 list = ts.append(list, modifier);
             }
             return list && createNodeArray(list, pos);
         }
         function parseModifiersForArrowFunction() {
             var modifiers;
-            if (token() === 129 /* AsyncKeyword */) {
+            if (token() === 130 /* AsyncKeyword */) {
                 var pos = getNodePos();
                 nextToken();
-                var modifier = finishNode(factory.createToken(129 /* AsyncKeyword */), pos);
+                var modifier = finishNode(factory.createToken(130 /* AsyncKeyword */), pos);
                 modifiers = createNodeArray([modifier], pos);
             }
             return modifiers;
@@ -34832,14 +35693,17 @@
             }
             var hasJSDoc = hasPrecedingJSDocComment();
             var decorators = parseDecorators();
-            var modifiers = parseModifiers(/*permitInvalidConstAsModifier*/ true);
-            if (parseContextualModifier(134 /* GetKeyword */)) {
-                return parseAccessorDeclaration(pos, hasJSDoc, decorators, modifiers, 168 /* GetAccessor */);
+            var modifiers = parseModifiers(/*permitInvalidConstAsModifier*/ true, /*stopOnStartOfClassStaticBlock*/ true);
+            if (token() === 124 /* StaticKeyword */ && lookAhead(nextTokenIsOpenBrace)) {
+                return parseClassStaticBlockDeclaration(pos, hasJSDoc, decorators, modifiers);
             }
-            if (parseContextualModifier(146 /* SetKeyword */)) {
-                return parseAccessorDeclaration(pos, hasJSDoc, decorators, modifiers, 169 /* SetAccessor */);
+            if (parseContextualModifier(135 /* GetKeyword */)) {
+                return parseAccessorDeclaration(pos, hasJSDoc, decorators, modifiers, 170 /* GetAccessor */);
             }
-            if (token() === 132 /* ConstructorKeyword */ || token() === 10 /* StringLiteral */) {
+            if (parseContextualModifier(147 /* SetKeyword */)) {
+                return parseAccessorDeclaration(pos, hasJSDoc, decorators, modifiers, 171 /* SetAccessor */);
+            }
+            if (token() === 133 /* ConstructorKeyword */ || token() === 10 /* StringLiteral */) {
                 var constructorDeclaration = tryParseConstructorDeclaration(pos, hasJSDoc, decorators, modifiers);
                 if (constructorDeclaration) {
                     return constructorDeclaration;
@@ -34869,21 +35733,21 @@
             }
             if (decorators || modifiers) {
                 // treat this as a property declaration with a missing name.
-                var name = createMissingNode(78 /* Identifier */, /*reportAtCurrentPosition*/ true, ts.Diagnostics.Declaration_expected);
+                var name = createMissingNode(79 /* Identifier */, /*reportAtCurrentPosition*/ true, ts.Diagnostics.Declaration_expected);
                 return parsePropertyDeclaration(pos, hasJSDoc, decorators, modifiers, name, /*questionToken*/ undefined);
             }
             // 'isClassMemberStart' should have hinted not to attempt parsing.
             return ts.Debug.fail("Should not have attempted to parse class member declaration.");
         }
         function parseClassExpression() {
-            return parseClassDeclarationOrExpression(getNodePos(), hasPrecedingJSDocComment(), /*decorators*/ undefined, /*modifiers*/ undefined, 222 /* ClassExpression */);
+            return parseClassDeclarationOrExpression(getNodePos(), hasPrecedingJSDocComment(), /*decorators*/ undefined, /*modifiers*/ undefined, 224 /* ClassExpression */);
         }
         function parseClassDeclaration(pos, hasJSDoc, decorators, modifiers) {
-            return parseClassDeclarationOrExpression(pos, hasJSDoc, decorators, modifiers, 253 /* ClassDeclaration */);
+            return parseClassDeclarationOrExpression(pos, hasJSDoc, decorators, modifiers, 255 /* ClassDeclaration */);
         }
         function parseClassDeclarationOrExpression(pos, hasJSDoc, decorators, modifiers, kind) {
             var savedAwaitContext = inAwaitContext();
-            parseExpected(83 /* ClassKeyword */);
+            parseExpected(84 /* ClassKeyword */);
             // We don't parse the name here in await context, instead we will report a grammar error in the checker.
             var name = parseNameOfClassDeclarationOrExpression();
             var typeParameters = parseTypeParameters();
@@ -34901,7 +35765,7 @@
                 members = createMissingList();
             }
             setAwaitContext(savedAwaitContext);
-            var node = kind === 253 /* ClassDeclaration */
+            var node = kind === 255 /* ClassDeclaration */
                 ? factory.createClassDeclaration(decorators, modifiers, name, typeParameters, heritageClauses, members)
                 : factory.createClassExpression(decorators, modifiers, name, typeParameters, heritageClauses, members);
             return withJSDoc(finishNode(node, pos), hasJSDoc);
@@ -34917,7 +35781,7 @@
                 : undefined;
         }
         function isImplementsClause() {
-            return token() === 116 /* ImplementsKeyword */ && lookAhead(nextTokenIsIdentifierOrKeyword);
+            return token() === 117 /* ImplementsKeyword */ && lookAhead(nextTokenIsIdentifierOrKeyword);
         }
         function parseHeritageClauses() {
             // ClassTail[Yield,Await] : (Modified) See 14.5
@@ -34930,7 +35794,7 @@
         function parseHeritageClause() {
             var pos = getNodePos();
             var tok = token();
-            ts.Debug.assert(tok === 93 /* ExtendsKeyword */ || tok === 116 /* ImplementsKeyword */); // isListElement() should ensure this.
+            ts.Debug.assert(tok === 94 /* ExtendsKeyword */ || tok === 117 /* ImplementsKeyword */); // isListElement() should ensure this.
             nextToken();
             var types = parseDelimitedList(7 /* HeritageClauseElement */, parseExpressionWithTypeArguments);
             return finishNode(factory.createHeritageClause(tok, types), pos);
@@ -34946,13 +35810,13 @@
                 parseBracketedList(20 /* TypeArguments */, parseType, 29 /* LessThanToken */, 31 /* GreaterThanToken */) : undefined;
         }
         function isHeritageClause() {
-            return token() === 93 /* ExtendsKeyword */ || token() === 116 /* ImplementsKeyword */;
+            return token() === 94 /* ExtendsKeyword */ || token() === 117 /* ImplementsKeyword */;
         }
         function parseClassMembers() {
             return parseList(5 /* ClassMembers */, parseClassElement);
         }
         function parseInterfaceDeclaration(pos, hasJSDoc, decorators, modifiers) {
-            parseExpected(117 /* InterfaceKeyword */);
+            parseExpected(118 /* InterfaceKeyword */);
             var name = parseIdentifier();
             var typeParameters = parseTypeParameters();
             var heritageClauses = parseHeritageClauses();
@@ -34961,11 +35825,11 @@
             return withJSDoc(finishNode(node, pos), hasJSDoc);
         }
         function parseTypeAliasDeclaration(pos, hasJSDoc, decorators, modifiers) {
-            parseExpected(149 /* TypeKeyword */);
+            parseExpected(150 /* TypeKeyword */);
             var name = parseIdentifier();
             var typeParameters = parseTypeParameters();
-            parseExpected(62 /* EqualsToken */);
-            var type = token() === 136 /* IntrinsicKeyword */ && tryParse(parseKeywordAndNoDot) || parseType();
+            parseExpected(63 /* EqualsToken */);
+            var type = token() === 137 /* IntrinsicKeyword */ && tryParse(parseKeywordAndNoDot) || parseType();
             parseSemicolon();
             var node = factory.createTypeAliasDeclaration(decorators, modifiers, name, typeParameters, type);
             return withJSDoc(finishNode(node, pos), hasJSDoc);
@@ -34982,7 +35846,7 @@
             return withJSDoc(finishNode(factory.createEnumMember(name, initializer), pos), hasJSDoc);
         }
         function parseEnumDeclaration(pos, hasJSDoc, decorators, modifiers) {
-            parseExpected(91 /* EnumKeyword */);
+            parseExpected(92 /* EnumKeyword */);
             var name = parseIdentifier();
             var members;
             if (parseExpected(18 /* OpenBraceToken */)) {
@@ -35021,7 +35885,7 @@
         function parseAmbientExternalModuleDeclaration(pos, hasJSDoc, decorators, modifiers) {
             var flags = 0;
             var name;
-            if (token() === 154 /* GlobalKeyword */) {
+            if (token() === 155 /* GlobalKeyword */) {
                 // parse 'global' as name of global scope augmentation
                 name = parseIdentifier();
                 flags |= 1024 /* GlobalAugmentation */;
@@ -35042,15 +35906,15 @@
         }
         function parseModuleDeclaration(pos, hasJSDoc, decorators, modifiers) {
             var flags = 0;
-            if (token() === 154 /* GlobalKeyword */) {
+            if (token() === 155 /* GlobalKeyword */) {
                 // global augmentation
                 return parseAmbientExternalModuleDeclaration(pos, hasJSDoc, decorators, modifiers);
             }
-            else if (parseOptional(140 /* NamespaceKeyword */)) {
+            else if (parseOptional(141 /* NamespaceKeyword */)) {
                 flags |= 16 /* Namespace */;
             }
             else {
-                parseExpected(139 /* ModuleKeyword */);
+                parseExpected(140 /* ModuleKeyword */);
                 if (token() === 10 /* StringLiteral */) {
                     return parseAmbientExternalModuleDeclaration(pos, hasJSDoc, decorators, modifiers);
                 }
@@ -35058,18 +35922,21 @@
             return parseModuleOrNamespaceDeclaration(pos, hasJSDoc, decorators, modifiers, flags);
         }
         function isExternalModuleReference() {
-            return token() === 143 /* RequireKeyword */ &&
+            return token() === 144 /* RequireKeyword */ &&
                 lookAhead(nextTokenIsOpenParen);
         }
         function nextTokenIsOpenParen() {
             return nextToken() === 20 /* OpenParenToken */;
         }
+        function nextTokenIsOpenBrace() {
+            return nextToken() === 18 /* OpenBraceToken */;
+        }
         function nextTokenIsSlash() {
             return nextToken() === 43 /* SlashToken */;
         }
         function parseNamespaceExportDeclaration(pos, hasJSDoc, decorators, modifiers) {
-            parseExpected(126 /* AsKeyword */);
-            parseExpected(140 /* NamespaceKeyword */);
+            parseExpected(127 /* AsKeyword */);
+            parseExpected(141 /* NamespaceKeyword */);
             var name = parseIdentifier();
             parseSemicolon();
             var node = factory.createNamespaceExportDeclaration(name);
@@ -35079,7 +35946,7 @@
             return withJSDoc(finishNode(node, pos), hasJSDoc);
         }
         function parseImportDeclarationOrImportEqualsDeclaration(pos, hasJSDoc, decorators, modifiers) {
-            parseExpected(99 /* ImportKeyword */);
+            parseExpected(100 /* ImportKeyword */);
             var afterImportPos = scanner.getStartPos();
             // We don't parse the identifier here in await context, instead we will report a grammar error in the checker.
             var identifier;
@@ -35087,7 +35954,7 @@
                 identifier = parseIdentifier();
             }
             var isTypeOnly = false;
-            if (token() !== 153 /* FromKeyword */ &&
+            if (token() !== 154 /* FromKeyword */ &&
                 (identifier === null || identifier === void 0 ? void 0 : identifier.escapedText) === "type" &&
                 (isIdentifier() || tokenAfterImportDefinitelyProducesImportDeclaration())) {
                 isTypeOnly = true;
@@ -35105,7 +35972,7 @@
                 token() === 18 /* OpenBraceToken */ // import {
             ) {
                 importClause = parseImportClause(identifier, afterImportPos, isTypeOnly);
-                parseExpected(153 /* FromKeyword */);
+                parseExpected(154 /* FromKeyword */);
             }
             var moduleSpecifier = parseModuleSpecifier();
             parseSemicolon();
@@ -35118,10 +35985,10 @@
         function tokenAfterImportedIdentifierDefinitelyProducesImportDeclaration() {
             // In `import id ___`, the current token decides whether to produce
             // an ImportDeclaration or ImportEqualsDeclaration.
-            return token() === 27 /* CommaToken */ || token() === 153 /* FromKeyword */;
+            return token() === 27 /* CommaToken */ || token() === 154 /* FromKeyword */;
         }
         function parseImportEqualsDeclaration(pos, hasJSDoc, decorators, modifiers, identifier, isTypeOnly) {
-            parseExpected(62 /* EqualsToken */);
+            parseExpected(63 /* EqualsToken */);
             var moduleReference = parseModuleReference();
             parseSemicolon();
             var node = factory.createImportEqualsDeclaration(decorators, modifiers, isTypeOnly, identifier, moduleReference);
@@ -35140,7 +36007,7 @@
             var namedBindings;
             if (!identifier ||
                 parseOptional(27 /* CommaToken */)) {
-                namedBindings = token() === 41 /* AsteriskToken */ ? parseNamespaceImport() : parseNamedImportsOrExports(265 /* NamedImports */);
+                namedBindings = token() === 41 /* AsteriskToken */ ? parseNamespaceImport() : parseNamedImportsOrExports(267 /* NamedImports */);
             }
             return finishNode(factory.createImportClause(isTypeOnly, identifier, namedBindings), pos);
         }
@@ -35151,7 +36018,7 @@
         }
         function parseExternalModuleReference() {
             var pos = getNodePos();
-            parseExpected(143 /* RequireKeyword */);
+            parseExpected(144 /* RequireKeyword */);
             parseExpected(20 /* OpenParenToken */);
             var expression = parseModuleSpecifier();
             parseExpected(21 /* CloseParenToken */);
@@ -35175,7 +36042,7 @@
             //  * as ImportedBinding
             var pos = getNodePos();
             parseExpected(41 /* AsteriskToken */);
-            parseExpected(126 /* AsKeyword */);
+            parseExpected(127 /* AsKeyword */);
             var name = parseIdentifier();
             return finishNode(factory.createNamespaceImport(name), pos);
         }
@@ -35188,16 +36055,16 @@
             // ImportsList:
             //  ImportSpecifier
             //  ImportsList, ImportSpecifier
-            var node = kind === 265 /* NamedImports */
+            var node = kind === 267 /* NamedImports */
                 ? factory.createNamedImports(parseBracketedList(23 /* ImportOrExportSpecifiers */, parseImportSpecifier, 18 /* OpenBraceToken */, 19 /* CloseBraceToken */))
                 : factory.createNamedExports(parseBracketedList(23 /* ImportOrExportSpecifiers */, parseExportSpecifier, 18 /* OpenBraceToken */, 19 /* CloseBraceToken */));
             return finishNode(node, pos);
         }
         function parseExportSpecifier() {
-            return parseImportOrExportSpecifier(271 /* ExportSpecifier */);
+            return parseImportOrExportSpecifier(273 /* ExportSpecifier */);
         }
         function parseImportSpecifier() {
-            return parseImportOrExportSpecifier(266 /* ImportSpecifier */);
+            return parseImportOrExportSpecifier(268 /* ImportSpecifier */);
         }
         function parseImportOrExportSpecifier(kind) {
             var pos = getNodePos();
@@ -35213,9 +36080,9 @@
             var identifierName = parseIdentifierName();
             var propertyName;
             var name;
-            if (token() === 126 /* AsKeyword */) {
+            if (token() === 127 /* AsKeyword */) {
                 propertyName = identifierName;
-                parseExpected(126 /* AsKeyword */);
+                parseExpected(127 /* AsKeyword */);
                 checkIdentifierIsKeyword = ts.isKeyword(token()) && !isIdentifier();
                 checkIdentifierStart = scanner.getTokenPos();
                 checkIdentifierEnd = scanner.getTextPos();
@@ -35224,10 +36091,10 @@
             else {
                 name = identifierName;
             }
-            if (kind === 266 /* ImportSpecifier */ && checkIdentifierIsKeyword) {
+            if (kind === 268 /* ImportSpecifier */ && checkIdentifierIsKeyword) {
                 parseErrorAt(checkIdentifierStart, checkIdentifierEnd, ts.Diagnostics.Identifier_expected);
             }
-            var node = kind === 266 /* ImportSpecifier */
+            var node = kind === 268 /* ImportSpecifier */
                 ? factory.createImportSpecifier(propertyName, name)
                 : factory.createExportSpecifier(propertyName, name);
             return finishNode(node, pos);
@@ -35240,22 +36107,22 @@
             setAwaitContext(/*value*/ true);
             var exportClause;
             var moduleSpecifier;
-            var isTypeOnly = parseOptional(149 /* TypeKeyword */);
+            var isTypeOnly = parseOptional(150 /* TypeKeyword */);
             var namespaceExportPos = getNodePos();
             if (parseOptional(41 /* AsteriskToken */)) {
-                if (parseOptional(126 /* AsKeyword */)) {
+                if (parseOptional(127 /* AsKeyword */)) {
                     exportClause = parseNamespaceExport(namespaceExportPos);
                 }
-                parseExpected(153 /* FromKeyword */);
+                parseExpected(154 /* FromKeyword */);
                 moduleSpecifier = parseModuleSpecifier();
             }
             else {
-                exportClause = parseNamedImportsOrExports(269 /* NamedExports */);
+                exportClause = parseNamedImportsOrExports(271 /* NamedExports */);
                 // It is not uncommon to accidentally omit the 'from' keyword. Additionally, in editing scenarios,
                 // the 'from' keyword can be parsed as a named export when the export clause is unterminated (i.e. `export { from "moduleName";`)
                 // If we don't have a 'from' keyword, see if we have a string literal such that ASI won't take effect.
-                if (token() === 153 /* FromKeyword */ || (token() === 10 /* StringLiteral */ && !scanner.hasPrecedingLineBreak())) {
-                    parseExpected(153 /* FromKeyword */);
+                if (token() === 154 /* FromKeyword */ || (token() === 10 /* StringLiteral */ && !scanner.hasPrecedingLineBreak())) {
+                    parseExpected(154 /* FromKeyword */);
                     moduleSpecifier = parseModuleSpecifier();
                 }
             }
@@ -35268,11 +36135,11 @@
             var savedAwaitContext = inAwaitContext();
             setAwaitContext(/*value*/ true);
             var isExportEquals;
-            if (parseOptional(62 /* EqualsToken */)) {
+            if (parseOptional(63 /* EqualsToken */)) {
                 isExportEquals = true;
             }
             else {
-                parseExpected(87 /* DefaultKeyword */);
+                parseExpected(88 /* DefaultKeyword */);
             }
             var expression = parseAssignmentExpressionOrHigher();
             parseSemicolon();
@@ -35288,7 +36155,7 @@
                     getImportMetaIfNecessary(sourceFile);
         }
         function isAnExternalModuleIndicatorNode(node) {
-            return hasModifierOfKind(node, 92 /* ExportKeyword */)
+            return hasModifierOfKind(node, 93 /* ExportKeyword */)
                 || ts.isImportEqualsDeclaration(node) && ts.isExternalModuleReference(node.moduleReference)
                 || ts.isImportDeclaration(node)
                 || ts.isExportAssignment(node)
@@ -35307,7 +36174,7 @@
             return ts.some(node.modifiers, function (m) { return m.kind === kind; });
         }
         function isImportMeta(node) {
-            return ts.isMetaProperty(node) && node.keywordToken === 99 /* ImportKeyword */ && node.name.escapedText === "meta";
+            return ts.isMetaProperty(node) && node.keywordToken === 100 /* ImportKeyword */ && node.name.escapedText === "meta";
         }
         var ParsingContext;
         (function (ParsingContext) {
@@ -35375,7 +36242,13 @@
             function parseJSDocNameReference() {
                 var pos = getNodePos();
                 var hasBrace = parseOptional(18 /* OpenBraceToken */);
+                var p2 = getNodePos();
                 var entityName = parseEntityName(/* allowReservedWords*/ false);
+                while (token() === 80 /* PrivateIdentifier */) {
+                    reScanHashToken(); // rescan #id as # id
+                    nextTokenJSDoc(); // then skip the #
+                    entityName = finishNode(factory.createJSDocMemberName(entityName, parseIdentifier()), p2);
+                }
                 if (hasBrace) {
                     parseExpectedJSDoc(19 /* CloseBraceToken */);
                 }
@@ -35804,28 +36677,44 @@
                     return next === 5 /* WhitespaceTrivia */ || next === 4 /* NewLineTrivia */;
                 }
                 function parseJSDocLink(start) {
-                    if (!tryParse(parseJSDocLinkPrefix)) {
+                    var linkType = tryParse(parseJSDocLinkPrefix);
+                    if (!linkType) {
                         return undefined;
                     }
                     nextTokenJSDoc(); // start at token after link, then skip any whitespace
                     skipWhitespace();
                     // parseEntityName logs an error for non-identifier, so create a MissingNode ourselves to avoid the error
+                    var p2 = getNodePos();
                     var name = ts.tokenIsIdentifierOrKeyword(token())
                         ? parseEntityName(/*allowReservedWords*/ true)
                         : undefined;
+                    if (name) {
+                        while (token() === 80 /* PrivateIdentifier */) {
+                            reScanHashToken(); // rescan #id as # id
+                            nextTokenJSDoc(); // then skip the #
+                            name = finishNode(factory.createJSDocMemberName(name, parseIdentifier()), p2);
+                        }
+                    }
                     var text = [];
                     while (token() !== 19 /* CloseBraceToken */ && token() !== 4 /* NewLineTrivia */ && token() !== 1 /* EndOfFileToken */) {
                         text.push(scanner.getTokenText());
                         nextTokenJSDoc();
                     }
-                    return finishNode(factory.createJSDocLink(name, text.join("")), start, scanner.getTextPos());
+                    var create = linkType === "link" ? factory.createJSDocLink
+                        : linkType === "linkcode" ? factory.createJSDocLinkCode
+                            : factory.createJSDocLinkPlain;
+                    return finishNode(create(name, text.join("")), start, scanner.getTextPos());
                 }
                 function parseJSDocLinkPrefix() {
                     skipWhitespaceOrAsterisk();
-                    return token() === 18 /* OpenBraceToken */
+                    if (token() === 18 /* OpenBraceToken */
                         && nextTokenJSDoc() === 59 /* AtToken */
-                        && ts.tokenIsIdentifierOrKeyword(nextTokenJSDoc())
-                        && scanner.getTokenValue() === "link";
+                        && ts.tokenIsIdentifierOrKeyword(nextTokenJSDoc())) {
+                        var kind = scanner.getTokenValue();
+                        if (kind === "link" || kind === "linkcode" || kind === "linkplain") {
+                            return kind;
+                        }
+                    }
                 }
                 function parseUnknownTag(start, tagName, indent, indentText) {
                     return finishNode(factory.createJSDocUnknownTag(tagName, parseTrailingTagComments(start, getNodePos(), indent, indentText)), start);
@@ -35862,7 +36751,7 @@
                     if (isBracketed) {
                         skipWhitespace();
                         // May have an optional default, e.g. '[foo = 42]'
-                        if (parseOptionalToken(62 /* EqualsToken */)) {
+                        if (parseOptionalToken(63 /* EqualsToken */)) {
                             parseExpression();
                         }
                         parseExpected(23 /* CloseBracketToken */);
@@ -35871,9 +36760,9 @@
                 }
                 function isObjectOrObjectArrayTypeReference(node) {
                     switch (node.kind) {
-                        case 145 /* ObjectKeyword */:
+                        case 146 /* ObjectKeyword */:
                             return true;
-                        case 179 /* ArrayType */:
+                        case 181 /* ArrayType */:
                             return isObjectOrObjectArrayTypeReference(node.elementType);
                         default:
                             return ts.isTypeReferenceNode(node) && ts.isIdentifier(node.typeName) && node.typeName.escapedText === "Object" && !node.typeArguments;
@@ -35905,12 +36794,12 @@
                         var child = void 0;
                         var children = void 0;
                         while (child = tryParse(function () { return parseChildParameterOrPropertyTag(target, indent, name); })) {
-                            if (child.kind === 330 /* JSDocParameterTag */ || child.kind === 337 /* JSDocPropertyTag */) {
+                            if (child.kind === 335 /* JSDocParameterTag */ || child.kind === 342 /* JSDocPropertyTag */) {
                                 children = ts.append(children, child);
                             }
                         }
                         if (children) {
-                            var literal = finishNode(factory.createJSDocTypeLiteral(children, typeExpression.type.kind === 179 /* ArrayType */), pos);
+                            var literal = finishNode(factory.createJSDocTypeLiteral(children, typeExpression.type.kind === 181 /* ArrayType */), pos);
                             return finishNode(factory.createJSDocTypeExpression(literal), pos);
                         }
                     }
@@ -36027,7 +36916,7 @@
                         var hasChildren = false;
                         while (child = tryParse(function () { return parseChildPropertyTag(indent); })) {
                             hasChildren = true;
-                            if (child.kind === 333 /* JSDocTypeTag */) {
+                            if (child.kind === 338 /* JSDocTypeTag */) {
                                 if (childTypeTag) {
                                     parseErrorAtCurrentToken(ts.Diagnostics.A_JSDoc_typedef_comment_may_not_contain_multiple_type_tags);
                                     var lastError = ts.lastOrUndefined(parseDiagnostics);
@@ -36045,7 +36934,7 @@
                             }
                         }
                         if (hasChildren) {
-                            var isArrayType = typeExpression && typeExpression.type.kind === 179 /* ArrayType */;
+                            var isArrayType = typeExpression && typeExpression.type.kind === 181 /* ArrayType */;
                             var jsdocTypeLiteral = factory.createJSDocTypeLiteral(jsDocPropertyTags, isArrayType);
                             typeExpression = childTypeTag && childTypeTag.typeExpression && !isObjectOrObjectArrayTypeReference(childTypeTag.typeExpression.type) ?
                                 childTypeTag.typeExpression :
@@ -36098,7 +36987,7 @@
                     var returnTag = tryParse(function () {
                         if (parseOptionalJsdoc(59 /* AtToken */)) {
                             var tag = parseTag(indent);
-                            if (tag && tag.kind === 331 /* JSDocReturnTag */) {
+                            if (tag && tag.kind === 336 /* JSDocReturnTag */) {
                                 return tag;
                             }
                         }
@@ -36132,7 +37021,7 @@
                             case 59 /* AtToken */:
                                 if (canParseTag) {
                                     var child = tryParseChildTag(target, indent);
-                                    if (child && (child.kind === 330 /* JSDocParameterTag */ || child.kind === 337 /* JSDocPropertyTag */) &&
+                                    if (child && (child.kind === 335 /* JSDocParameterTag */ || child.kind === 342 /* JSDocPropertyTag */) &&
                                         target !== 4 /* CallbackParameter */ &&
                                         name && (ts.isIdentifier(child.name) || !escapedTextsEqual(name, child.name.left))) {
                                         return false;
@@ -36151,7 +37040,7 @@
                                 }
                                 seenAsterisk = true;
                                 break;
-                            case 78 /* Identifier */:
+                            case 79 /* Identifier */:
                                 canParseTag = false;
                                 break;
                             case 1 /* EndOfFileToken */:
@@ -36249,7 +37138,7 @@
                 }
                 function parseJSDocIdentifierName(message) {
                     if (!ts.tokenIsIdentifierOrKeyword(token())) {
-                        return createMissingNode(78 /* Identifier */, /*reportAtCurrentPosition*/ !message, message || ts.Diagnostics.Identifier_expected);
+                        return createMissingNode(79 /* Identifier */, /*reportAtCurrentPosition*/ !message, message || ts.Diagnostics.Identifier_expected);
                     }
                     identifierCount++;
                     var pos = scanner.getTokenPos();
@@ -36412,8 +37301,8 @@
             function visitArray(array) {
                 array._children = undefined;
                 ts.setTextRangePosEnd(array, array.pos + delta, array.end + delta);
-                for (var _i = 0, array_8 = array; _i < array_8.length; _i++) {
-                    var node = array_8[_i];
+                for (var _i = 0, array_9 = array; _i < array_9.length; _i++) {
+                    var node = array_9[_i];
                     visitNode(node);
                 }
             }
@@ -36422,7 +37311,7 @@
             switch (node.kind) {
                 case 10 /* StringLiteral */:
                 case 8 /* NumericLiteral */:
-                case 78 /* Identifier */:
+                case 79 /* Identifier */:
                     return true;
             }
             return false;
@@ -36561,8 +37450,8 @@
                     array._children = undefined;
                     // Adjust the pos or end (or both) of the intersecting array accordingly.
                     adjustIntersectingElement(array, changeStart, changeRangeOldEnd, changeRangeNewEnd, delta);
-                    for (var _i = 0, array_9 = array; _i < array_9.length; _i++) {
-                        var node = array_9[_i];
+                    for (var _i = 0, array_10 = array; _i < array_10.length; _i++) {
+                        var node = array_10[_i];
                         visitNode(node);
                     }
                     return;
@@ -36896,7 +37785,7 @@
         if (namedArgRegExCache.has(name)) {
             return namedArgRegExCache.get(name);
         }
-        var result = new RegExp("(\\s" + name + "\\s*=\\s*)('|\")(.+?)\\2", "im");
+        var result = new RegExp("(\\s" + name + "\\s*=\\s*)(?:(?:'([^']*)')|(?:\"([^\"]*)\"))", "im");
         namedArgRegExCache.set(name, result);
         return result;
     }
@@ -36920,16 +37809,17 @@
                         return; // Missing required argument, don't parse
                     }
                     else if (matchResult) {
+                        var value = matchResult[2] || matchResult[3];
                         if (arg.captureSpan) {
-                            var startPos = range.pos + matchResult.index + matchResult[1].length + matchResult[2].length;
+                            var startPos = range.pos + matchResult.index + matchResult[1].length + 1;
                             argument[arg.name] = {
-                                value: matchResult[3],
+                                value: value,
                                 pos: startPos,
-                                end: startPos + matchResult[3].length
+                                end: startPos + value.length
                             };
                         }
                         else {
-                            argument[arg.name] = matchResult[3];
+                            argument[arg.name] = value;
                         }
                     }
                 }
@@ -36945,7 +37835,7 @@
             return addPragmaForMatch(pragmas, range, 2 /* SingleLine */, singleLine);
         }
         if (range.kind === 3 /* MultiLineCommentTrivia */) {
-            var multiLinePragmaRegEx = /\s*@(\S+)\s*(.*)\s*$/gim; // Defined inline since it uses the "g" flag, which keeps a persistent index (for iterating)
+            var multiLinePragmaRegEx = /@(\S+)(\s+.*)?$/gim; // Defined inline since it uses the "g" flag, which keeps a persistent index (for iterating)
             var multiLineMatch = void 0;
             while (multiLineMatch = multiLinePragmaRegEx.exec(text)) {
                 addPragmaForMatch(pragmas, range, 4 /* MultiLine */, multiLineMatch);
@@ -36972,7 +37862,7 @@
             return {};
         if (!pragma.args)
             return {};
-        var args = text.split(/\s+/);
+        var args = ts.trimString(text).split(/\s+/);
         var argMap = {};
         for (var i = 0; i < pragma.args.length; i++) {
             var argument = pragma.args[i];
@@ -36991,10 +37881,10 @@
         if (lhs.kind !== rhs.kind) {
             return false;
         }
-        if (lhs.kind === 78 /* Identifier */) {
+        if (lhs.kind === 79 /* Identifier */) {
             return lhs.escapedText === rhs.escapedText;
         }
-        if (lhs.kind === 107 /* ThisKeyword */) {
+        if (lhs.kind === 108 /* ThisKeyword */) {
             return true;
         }
         // If we are at this statement then we must have PropertyAccessExpression and because tag name in Jsx element can only
@@ -37114,8 +38004,8 @@
                 usefsevents: ts.WatchFileKind.UseFsEvents,
                 usefseventsonparentdirectory: ts.WatchFileKind.UseFsEventsOnParentDirectory,
             })),
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Specify_strategy_for_watching_file_Colon_FixedPollingInterval_default_PriorityPollingInterval_DynamicPriorityPolling_FixedChunkSizePolling_UseFsEvents_UseFsEventsOnParentDirectory,
+            category: ts.Diagnostics.Watch_and_Build_Modes,
+            description: ts.Diagnostics.Specify_how_the_TypeScript_watch_mode_works,
         },
         {
             name: "watchDirectory",
@@ -37125,8 +38015,8 @@
                 dynamicprioritypolling: ts.WatchDirectoryKind.DynamicPriorityPolling,
                 fixedchunksizepolling: ts.WatchDirectoryKind.FixedChunkSizePolling,
             })),
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Specify_strategy_for_watching_directory_on_platforms_that_don_t_support_recursive_watching_natively_Colon_UseFsEvents_default_FixedPollingInterval_DynamicPriorityPolling_FixedChunkSizePolling,
+            category: ts.Diagnostics.Watch_and_Build_Modes,
+            description: ts.Diagnostics.Specify_how_directories_are_watched_on_systems_that_lack_recursive_file_watching_functionality,
         },
         {
             name: "fallbackPolling",
@@ -37136,13 +38026,13 @@
                 dynamicpriority: ts.PollingWatchKind.DynamicPriority,
                 fixedchunksize: ts.PollingWatchKind.FixedChunkSize,
             })),
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Specify_strategy_for_creating_a_polling_watch_when_it_fails_to_create_using_file_system_events_Colon_FixedInterval_default_PriorityInterval_DynamicPriority_FixedChunkSize,
+            category: ts.Diagnostics.Watch_and_Build_Modes,
+            description: ts.Diagnostics.Specify_what_approach_the_watcher_should_use_if_the_system_runs_out_of_native_file_watchers,
         },
         {
             name: "synchronousWatchDirectory",
             type: "boolean",
-            category: ts.Diagnostics.Advanced_Options,
+            category: ts.Diagnostics.Watch_and_Build_Modes,
             description: ts.Diagnostics.Synchronously_call_callbacks_and_update_the_state_of_directory_watchers_on_platforms_that_don_t_support_recursive_watching_natively,
         },
         {
@@ -37154,8 +38044,8 @@
                 isFilePath: true,
                 extraValidation: specToDiagnostic
             },
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Synchronously_call_callbacks_and_update_the_state_of_directory_watchers_on_platforms_that_don_t_support_recursive_watching_natively,
+            category: ts.Diagnostics.Watch_and_Build_Modes,
+            description: ts.Diagnostics.Remove_a_list_of_directories_from_the_watch_process,
         },
         {
             name: "excludeFiles",
@@ -37166,8 +38056,8 @@
                 isFilePath: true,
                 extraValidation: specToDiagnostic
             },
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Synchronously_call_callbacks_and_update_the_state_of_directory_watchers_on_platforms_that_don_t_support_recursive_watching_natively,
+            category: ts.Diagnostics.Watch_and_Build_Modes,
+            description: ts.Diagnostics.Remove_a_list_of_files_from_the_watch_mode_s_processing,
         },
     ];
     /* @internal */
@@ -37190,6 +38080,7 @@
             shortName: "w",
             type: "boolean",
             showInSimplifiedHelpView: true,
+            isCommandLineOnly: true,
             category: ts.Diagnostics.Command_line_Options,
             description: ts.Diagnostics.Watch_input_files,
         },
@@ -37197,58 +38088,67 @@
             name: "preserveWatchOutput",
             type: "boolean",
             showInSimplifiedHelpView: false,
-            category: ts.Diagnostics.Command_line_Options,
-            description: ts.Diagnostics.Whether_to_keep_outdated_console_output_in_watch_mode_instead_of_clearing_the_screen,
+            category: ts.Diagnostics.Output_Formatting,
+            description: ts.Diagnostics.Disable_wiping_the_console_in_watch_mode,
+            defaultValueDescription: "n/a"
         },
         {
             name: "listFiles",
             type: "boolean",
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Print_names_of_files_part_of_the_compilation
+            category: ts.Diagnostics.Compiler_Diagnostics,
+            description: ts.Diagnostics.Print_all_of_the_files_read_during_the_compilation,
+            defaultValueDescription: "false"
         },
         {
             name: "explainFiles",
             type: "boolean",
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Print_names_of_files_and_the_reason_they_are_part_of_the_compilation
-        }, {
+            category: ts.Diagnostics.Compiler_Diagnostics,
+            description: ts.Diagnostics.Print_files_read_during_the_compilation_including_why_it_was_included
+        },
+        {
             name: "listEmittedFiles",
             type: "boolean",
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Print_names_of_generated_files_part_of_the_compilation
+            category: ts.Diagnostics.Compiler_Diagnostics,
+            description: ts.Diagnostics.Print_the_names_of_emitted_files_after_a_compilation,
+            defaultValueDescription: "false"
         },
         {
             name: "pretty",
             type: "boolean",
             showInSimplifiedHelpView: true,
-            category: ts.Diagnostics.Command_line_Options,
-            description: ts.Diagnostics.Stylize_errors_and_messages_using_color_and_context_experimental
+            category: ts.Diagnostics.Output_Formatting,
+            description: ts.Diagnostics.Enable_color_and_formatting_in_TypeScript_s_output_to_make_compiler_errors_easier_to_read,
+            defaultValueDescription: "true"
         },
         {
             name: "traceResolution",
             type: "boolean",
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Enable_tracing_of_the_name_resolution_process
+            category: ts.Diagnostics.Compiler_Diagnostics,
+            description: ts.Diagnostics.Log_paths_used_during_the_moduleResolution_process,
+            defaultValueDescription: "false"
         },
         {
             name: "diagnostics",
             type: "boolean",
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Show_diagnostic_information
+            category: ts.Diagnostics.Compiler_Diagnostics,
+            description: ts.Diagnostics.Output_compiler_performance_information_after_building,
+            defaultValueDescription: "false"
         },
         {
             name: "extendedDiagnostics",
             type: "boolean",
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Show_verbose_diagnostic_information
+            category: ts.Diagnostics.Compiler_Diagnostics,
+            description: ts.Diagnostics.Output_more_detailed_compiler_performance_information_after_building,
+            defaultValueDescription: "false"
         },
         {
             name: "generateCpuProfile",
             type: "string",
             isFilePath: true,
             paramType: ts.Diagnostics.FILE_OR_DIRECTORY,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Generates_a_CPU_profile
+            category: ts.Diagnostics.Compiler_Diagnostics,
+            description: ts.Diagnostics.Emit_a_v8_CPU_profile_of_the_compiler_run_for_debugging,
+            defaultValueDescription: "profile.cpuprofile"
         },
         {
             name: "generateTrace",
@@ -37256,30 +38156,33 @@
             isFilePath: true,
             isCommandLineOnly: true,
             paramType: ts.Diagnostics.DIRECTORY,
-            category: ts.Diagnostics.Advanced_Options,
+            category: ts.Diagnostics.Compiler_Diagnostics,
             description: ts.Diagnostics.Generates_an_event_trace_and_a_list_of_types
         },
         {
             name: "incremental",
             shortName: "i",
             type: "boolean",
-            category: ts.Diagnostics.Basic_Options,
+            category: ts.Diagnostics.Projects,
             description: ts.Diagnostics.Enable_incremental_compilation,
-            transpileOptionValue: undefined
+            transpileOptionValue: undefined,
+            defaultValueDescription: ts.Diagnostics.false_unless_composite_is_set
         },
         {
             name: "assumeChangesOnlyAffectDirectDependencies",
             type: "boolean",
             affectsSemanticDiagnostics: true,
             affectsEmit: true,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Have_recompiles_in_incremental_and_watch_assume_that_changes_within_a_file_will_only_affect_files_directly_depending_on_it
+            category: ts.Diagnostics.Watch_and_Build_Modes,
+            description: ts.Diagnostics.Have_recompiles_in_projects_that_use_incremental_and_watch_mode_assume_that_changes_within_a_file_will_only_affect_files_directly_depending_on_it
         },
         {
             name: "locale",
             type: "string",
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.The_locale_used_when_displaying_messages_to_the_user_e_g_en_us
+            category: ts.Diagnostics.Command_line_Options,
+            isCommandLineOnly: true,
+            description: ts.Diagnostics.Set_the_language_of_the_messaging_from_TypeScript_This_does_not_affect_emit,
+            defaultValueDescription: ts.Diagnostics.Platform_specific
         },
     ];
     /* @internal */
@@ -37304,8 +38207,9 @@
         affectsEmit: true,
         paramType: ts.Diagnostics.VERSION,
         showInSimplifiedHelpView: true,
-        category: ts.Diagnostics.Basic_Options,
-        description: ts.Diagnostics.Specify_ECMAScript_target_version_Colon_ES3_default_ES5_ES2015_ES2016_ES2017_ES2018_ES2019_ES2020_ES2021_or_ESNEXT,
+        category: ts.Diagnostics.Language_and_Environment,
+        description: ts.Diagnostics.Set_the_JavaScript_language_version_for_emitted_JavaScript_and_include_compatible_library_declarations,
+        defaultValueDescription: "ES3"
     };
     var commandOptionsWithoutBuild = [
         // CommandLine only options
@@ -37352,6 +38256,7 @@
         {
             name: "showConfig",
             type: "boolean",
+            showInSimplifiedHelpView: true,
             category: ts.Diagnostics.Command_line_Options,
             isCommandLineOnly: true,
             description: ts.Diagnostics.Print_the_final_configuration_instead_of_building
@@ -37385,8 +38290,8 @@
             affectsEmit: true,
             paramType: ts.Diagnostics.KIND,
             showInSimplifiedHelpView: true,
-            category: ts.Diagnostics.Basic_Options,
-            description: ts.Diagnostics.Specify_module_code_generation_Colon_none_commonjs_amd_system_umd_es2015_es2020_or_ESNext,
+            category: ts.Diagnostics.Modules,
+            description: ts.Diagnostics.Specify_what_module_code_is_generated,
         },
         {
             name: "lib",
@@ -37395,10 +38300,10 @@
                 name: "lib",
                 type: ts.libMap
             },
-            affectsModuleResolution: true,
+            affectsProgramStructure: true,
             showInSimplifiedHelpView: true,
-            category: ts.Diagnostics.Basic_Options,
-            description: ts.Diagnostics.Specify_library_files_to_be_included_in_the_compilation,
+            category: ts.Diagnostics.Language_and_Environment,
+            description: ts.Diagnostics.Specify_a_set_of_bundled_library_declaration_files_that_describe_the_target_runtime_environment,
             transpileOptionValue: undefined
         },
         {
@@ -37406,14 +38311,17 @@
             type: "boolean",
             affectsModuleResolution: true,
             showInSimplifiedHelpView: true,
-            category: ts.Diagnostics.Basic_Options,
-            description: ts.Diagnostics.Allow_javascript_files_to_be_compiled
+            category: ts.Diagnostics.JavaScript_Support,
+            description: ts.Diagnostics.Allow_JavaScript_files_to_be_a_part_of_your_program_Use_the_checkJS_option_to_get_errors_from_these_files,
+            defaultValueDescription: "false"
         },
         {
             name: "checkJs",
             type: "boolean",
-            category: ts.Diagnostics.Basic_Options,
-            description: ts.Diagnostics.Report_errors_in_js_files
+            showInSimplifiedHelpView: true,
+            category: ts.Diagnostics.JavaScript_Support,
+            description: ts.Diagnostics.Enable_error_reporting_in_type_checked_JavaScript_files,
+            defaultValueDescription: "false"
         },
         {
             name: "jsx",
@@ -37423,8 +38331,9 @@
             affectsModuleResolution: true,
             paramType: ts.Diagnostics.KIND,
             showInSimplifiedHelpView: true,
-            category: ts.Diagnostics.Basic_Options,
-            description: ts.Diagnostics.Specify_JSX_code_generation_Colon_preserve_react_native_react_react_jsx_or_react_jsxdev,
+            category: ts.Diagnostics.Language_and_Environment,
+            description: ts.Diagnostics.Specify_what_JSX_code_is_generated,
+            defaultValueDescription: "undefined"
         },
         {
             name: "declaration",
@@ -37432,34 +38341,39 @@
             type: "boolean",
             affectsEmit: true,
             showInSimplifiedHelpView: true,
-            category: ts.Diagnostics.Basic_Options,
-            description: ts.Diagnostics.Generates_corresponding_d_ts_file,
-            transpileOptionValue: undefined
+            category: ts.Diagnostics.Emit,
+            transpileOptionValue: undefined,
+            description: ts.Diagnostics.Generate_d_ts_files_from_TypeScript_and_JavaScript_files_in_your_project,
+            defaultValueDescription: ts.Diagnostics.false_unless_composite_is_set,
         },
         {
             name: "declarationMap",
             type: "boolean",
             affectsEmit: true,
             showInSimplifiedHelpView: true,
-            category: ts.Diagnostics.Basic_Options,
-            description: ts.Diagnostics.Generates_a_sourcemap_for_each_corresponding_d_ts_file,
-            transpileOptionValue: undefined
+            category: ts.Diagnostics.Emit,
+            transpileOptionValue: undefined,
+            defaultValueDescription: "false",
+            description: ts.Diagnostics.Create_sourcemaps_for_d_ts_files
         },
         {
             name: "emitDeclarationOnly",
             type: "boolean",
             affectsEmit: true,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Only_emit_d_ts_declaration_files,
-            transpileOptionValue: undefined
+            showInSimplifiedHelpView: true,
+            category: ts.Diagnostics.Emit,
+            description: ts.Diagnostics.Only_output_d_ts_files_and_not_JavaScript_files,
+            transpileOptionValue: undefined,
+            defaultValueDescription: "false",
         },
         {
             name: "sourceMap",
             type: "boolean",
             affectsEmit: true,
             showInSimplifiedHelpView: true,
-            category: ts.Diagnostics.Basic_Options,
-            description: ts.Diagnostics.Generates_corresponding_map_file,
+            category: ts.Diagnostics.Emit,
+            defaultValueDescription: "false",
+            description: ts.Diagnostics.Create_source_map_files_for_emitted_JavaScript_files,
         },
         {
             name: "outFile",
@@ -37468,9 +38382,10 @@
             isFilePath: true,
             paramType: ts.Diagnostics.FILE,
             showInSimplifiedHelpView: true,
-            category: ts.Diagnostics.Basic_Options,
-            description: ts.Diagnostics.Concatenate_and_emit_output_to_single_file,
-            transpileOptionValue: undefined
+            category: ts.Diagnostics.Emit,
+            description: ts.Diagnostics.Specify_a_file_that_bundles_all_outputs_into_one_JavaScript_file_If_declaration_is_true_also_designates_a_file_that_bundles_all_d_ts_output,
+            transpileOptionValue: undefined,
+            defaultValueDescription: "n/a"
         },
         {
             name: "outDir",
@@ -37479,8 +38394,9 @@
             isFilePath: true,
             paramType: ts.Diagnostics.DIRECTORY,
             showInSimplifiedHelpView: true,
-            category: ts.Diagnostics.Basic_Options,
-            description: ts.Diagnostics.Redirect_output_structure_to_the_directory,
+            category: ts.Diagnostics.Emit,
+            description: ts.Diagnostics.Specify_an_output_folder_for_all_emitted_files,
+            defaultValueDescription: "n/a"
         },
         {
             name: "rootDir",
@@ -37488,17 +38404,19 @@
             affectsEmit: true,
             isFilePath: true,
             paramType: ts.Diagnostics.LOCATION,
-            category: ts.Diagnostics.Basic_Options,
-            description: ts.Diagnostics.Specify_the_root_directory_of_input_files_Use_to_control_the_output_directory_structure_with_outDir,
+            category: ts.Diagnostics.Modules,
+            description: ts.Diagnostics.Specify_the_root_folder_within_your_source_files,
+            defaultValueDescription: ts.Diagnostics.Computed_from_the_list_of_input_files
         },
         {
             name: "composite",
             type: "boolean",
             affectsEmit: true,
             isTSConfigOnly: true,
-            category: ts.Diagnostics.Basic_Options,
-            description: ts.Diagnostics.Enable_project_compilation,
-            transpileOptionValue: undefined
+            category: ts.Diagnostics.Projects,
+            transpileOptionValue: undefined,
+            defaultValueDescription: "false",
+            description: ts.Diagnostics.Enable_constraints_that_allow_a_TypeScript_project_to_be_used_with_project_references,
         },
         {
             name: "tsBuildInfoFile",
@@ -37506,32 +38424,36 @@
             affectsEmit: true,
             isFilePath: true,
             paramType: ts.Diagnostics.FILE,
-            category: ts.Diagnostics.Basic_Options,
-            description: ts.Diagnostics.Specify_file_to_store_incremental_compilation_information,
-            transpileOptionValue: undefined
+            category: ts.Diagnostics.Projects,
+            transpileOptionValue: undefined,
+            defaultValueDescription: ".tsbuildinfo",
+            description: ts.Diagnostics.Specify_the_folder_for_tsbuildinfo_incremental_compilation_files,
         },
         {
             name: "removeComments",
             type: "boolean",
             affectsEmit: true,
             showInSimplifiedHelpView: true,
-            category: ts.Diagnostics.Basic_Options,
-            description: ts.Diagnostics.Do_not_emit_comments_to_output,
+            category: ts.Diagnostics.Emit,
+            defaultValueDescription: "false",
+            description: ts.Diagnostics.Disable_emitting_comments,
         },
         {
             name: "noEmit",
             type: "boolean",
             showInSimplifiedHelpView: true,
-            category: ts.Diagnostics.Basic_Options,
-            description: ts.Diagnostics.Do_not_emit_outputs,
-            transpileOptionValue: undefined
+            category: ts.Diagnostics.Emit,
+            description: ts.Diagnostics.Disable_emitting_files_from_a_compilation,
+            transpileOptionValue: undefined,
+            defaultValueDescription: "false"
         },
         {
             name: "importHelpers",
             type: "boolean",
             affectsEmit: true,
-            category: ts.Diagnostics.Basic_Options,
-            description: ts.Diagnostics.Import_emit_helpers_from_tslib
+            category: ts.Diagnostics.Emit,
+            description: ts.Diagnostics.Allow_importing_helper_functions_from_tslib_once_per_project_instead_of_including_them_per_file,
+            defaultValueDescription: "false"
         },
         {
             name: "importsNotUsedAsValues",
@@ -37542,22 +38464,24 @@
             })),
             affectsEmit: true,
             affectsSemanticDiagnostics: true,
-            category: ts.Diagnostics.Advanced_Options,
+            category: ts.Diagnostics.Emit,
             description: ts.Diagnostics.Specify_emit_Slashchecking_behavior_for_imports_that_are_only_used_for_types
         },
         {
             name: "downlevelIteration",
             type: "boolean",
             affectsEmit: true,
-            category: ts.Diagnostics.Basic_Options,
-            description: ts.Diagnostics.Provide_full_support_for_iterables_in_for_of_spread_and_destructuring_when_targeting_ES5_or_ES3
+            category: ts.Diagnostics.Emit,
+            description: ts.Diagnostics.Emit_more_compliant_but_verbose_and_less_performant_JavaScript_for_iteration,
+            defaultValueDescription: "false"
         },
         {
             name: "isolatedModules",
             type: "boolean",
-            category: ts.Diagnostics.Basic_Options,
-            description: ts.Diagnostics.Transpile_each_file_as_a_separate_module_similar_to_ts_transpileModule,
-            transpileOptionValue: true
+            category: ts.Diagnostics.Interop_Constraints,
+            description: ts.Diagnostics.Ensure_that_each_file_can_be_safely_transpiled_without_relying_on_other_imports,
+            transpileOptionValue: true,
+            defaultValueDescription: "false"
         },
         // Strict Type Checks
         {
@@ -37566,127 +38490,140 @@
             // Though this affects semantic diagnostics, affectsSemanticDiagnostics is not set here
             // The value of each strictFlag depends on own strictFlag value or this and never accessed directly.
             showInSimplifiedHelpView: true,
-            category: ts.Diagnostics.Strict_Type_Checking_Options,
-            description: ts.Diagnostics.Enable_all_strict_type_checking_options
+            category: ts.Diagnostics.Type_Checking,
+            description: ts.Diagnostics.Enable_all_strict_type_checking_options,
+            defaultValueDescription: "false"
         },
         {
             name: "noImplicitAny",
             type: "boolean",
             affectsSemanticDiagnostics: true,
             strictFlag: true,
-            showInSimplifiedHelpView: true,
-            category: ts.Diagnostics.Strict_Type_Checking_Options,
-            description: ts.Diagnostics.Raise_error_on_expressions_and_declarations_with_an_implied_any_type
+            category: ts.Diagnostics.Type_Checking,
+            description: ts.Diagnostics.Enable_error_reporting_for_expressions_and_declarations_with_an_implied_any_type,
+            defaultValueDescription: ts.Diagnostics.false_unless_strict_is_set
         },
         {
             name: "strictNullChecks",
             type: "boolean",
             affectsSemanticDiagnostics: true,
             strictFlag: true,
-            showInSimplifiedHelpView: true,
-            category: ts.Diagnostics.Strict_Type_Checking_Options,
-            description: ts.Diagnostics.Enable_strict_null_checks
+            category: ts.Diagnostics.Type_Checking,
+            description: ts.Diagnostics.When_type_checking_take_into_account_null_and_undefined,
+            defaultValueDescription: ts.Diagnostics.false_unless_strict_is_set
         },
         {
             name: "strictFunctionTypes",
             type: "boolean",
-            affectsSemanticDiagnostics: true,
             strictFlag: true,
-            showInSimplifiedHelpView: true,
-            category: ts.Diagnostics.Strict_Type_Checking_Options,
-            description: ts.Diagnostics.Enable_strict_checking_of_function_types
+            category: ts.Diagnostics.Type_Checking,
+            description: ts.Diagnostics.When_assigning_functions_check_to_ensure_parameters_and_the_return_values_are_subtype_compatible,
+            defaultValueDescription: ts.Diagnostics.false_unless_strict_is_set
         },
         {
             name: "strictBindCallApply",
             type: "boolean",
             strictFlag: true,
-            showInSimplifiedHelpView: true,
-            category: ts.Diagnostics.Strict_Type_Checking_Options,
-            description: ts.Diagnostics.Enable_strict_bind_call_and_apply_methods_on_functions
+            category: ts.Diagnostics.Type_Checking,
+            description: ts.Diagnostics.Check_that_the_arguments_for_bind_call_and_apply_methods_match_the_original_function,
+            defaultValueDescription: ts.Diagnostics.false_unless_strict_is_set
         },
         {
             name: "strictPropertyInitialization",
             type: "boolean",
             affectsSemanticDiagnostics: true,
             strictFlag: true,
-            showInSimplifiedHelpView: true,
-            category: ts.Diagnostics.Strict_Type_Checking_Options,
-            description: ts.Diagnostics.Enable_strict_checking_of_property_initialization_in_classes
+            category: ts.Diagnostics.Type_Checking,
+            description: ts.Diagnostics.Check_for_class_properties_that_are_declared_but_not_set_in_the_constructor,
+            defaultValueDescription: ts.Diagnostics.false_unless_strict_is_set
         },
         {
             name: "noImplicitThis",
             type: "boolean",
             affectsSemanticDiagnostics: true,
             strictFlag: true,
-            showInSimplifiedHelpView: true,
-            category: ts.Diagnostics.Strict_Type_Checking_Options,
-            description: ts.Diagnostics.Raise_error_on_this_expressions_with_an_implied_any_type,
+            category: ts.Diagnostics.Type_Checking,
+            description: ts.Diagnostics.Enable_error_reporting_when_this_is_given_the_type_any,
+            defaultValueDescription: ts.Diagnostics.false_unless_strict_is_set
+        },
+        {
+            name: "useUnknownInCatchVariables",
+            type: "boolean",
+            affectsSemanticDiagnostics: true,
+            strictFlag: true,
+            category: ts.Diagnostics.Type_Checking,
+            description: ts.Diagnostics.Type_catch_clause_variables_as_unknown_instead_of_any,
         },
         {
             name: "alwaysStrict",
             type: "boolean",
             affectsSourceFile: true,
             strictFlag: true,
-            showInSimplifiedHelpView: true,
-            category: ts.Diagnostics.Strict_Type_Checking_Options,
-            description: ts.Diagnostics.Parse_in_strict_mode_and_emit_use_strict_for_each_source_file
+            category: ts.Diagnostics.Type_Checking,
+            description: ts.Diagnostics.Ensure_use_strict_is_always_emitted,
+            defaultValueDescription: ts.Diagnostics.false_unless_strict_is_set
         },
         // Additional Checks
         {
             name: "noUnusedLocals",
             type: "boolean",
             affectsSemanticDiagnostics: true,
-            showInSimplifiedHelpView: true,
-            category: ts.Diagnostics.Additional_Checks,
-            description: ts.Diagnostics.Report_errors_on_unused_locals,
+            category: ts.Diagnostics.Type_Checking,
+            description: ts.Diagnostics.Enable_error_reporting_when_a_local_variables_aren_t_read,
+            defaultValueDescription: "false"
         },
         {
             name: "noUnusedParameters",
             type: "boolean",
             affectsSemanticDiagnostics: true,
-            showInSimplifiedHelpView: true,
-            category: ts.Diagnostics.Additional_Checks,
-            description: ts.Diagnostics.Report_errors_on_unused_parameters,
+            category: ts.Diagnostics.Type_Checking,
+            description: ts.Diagnostics.Raise_an_error_when_a_function_parameter_isn_t_read,
+            defaultValueDescription: "false"
+        },
+        {
+            name: "exactOptionalPropertyTypes",
+            type: "boolean",
+            affectsSemanticDiagnostics: true,
+            category: ts.Diagnostics.Type_Checking,
+            description: ts.Diagnostics.Interpret_optional_property_types_as_written_rather_than_adding_undefined
         },
         {
             name: "noImplicitReturns",
             type: "boolean",
             affectsSemanticDiagnostics: true,
-            showInSimplifiedHelpView: true,
-            category: ts.Diagnostics.Additional_Checks,
-            description: ts.Diagnostics.Report_error_when_not_all_code_paths_in_function_return_a_value
+            category: ts.Diagnostics.Type_Checking,
+            description: ts.Diagnostics.Enable_error_reporting_for_codepaths_that_do_not_explicitly_return_in_a_function,
+            defaultValueDescription: "false"
         },
         {
             name: "noFallthroughCasesInSwitch",
             type: "boolean",
             affectsBindDiagnostics: true,
             affectsSemanticDiagnostics: true,
-            showInSimplifiedHelpView: true,
-            category: ts.Diagnostics.Additional_Checks,
-            description: ts.Diagnostics.Report_errors_for_fallthrough_cases_in_switch_statement
+            category: ts.Diagnostics.Type_Checking,
+            description: ts.Diagnostics.Enable_error_reporting_for_fallthrough_cases_in_switch_statements
         },
         {
             name: "noUncheckedIndexedAccess",
             type: "boolean",
             affectsSemanticDiagnostics: true,
-            showInSimplifiedHelpView: false,
-            category: ts.Diagnostics.Additional_Checks,
+            category: ts.Diagnostics.Type_Checking,
             description: ts.Diagnostics.Include_undefined_in_index_signature_results
         },
         {
             name: "noImplicitOverride",
             type: "boolean",
             affectsSemanticDiagnostics: true,
-            showInSimplifiedHelpView: false,
-            category: ts.Diagnostics.Additional_Checks,
+            category: ts.Diagnostics.Type_Checking,
             description: ts.Diagnostics.Ensure_overriding_members_in_derived_classes_are_marked_with_an_override_modifier
         },
         {
             name: "noPropertyAccessFromIndexSignature",
             type: "boolean",
             showInSimplifiedHelpView: false,
-            category: ts.Diagnostics.Additional_Checks,
-            description: ts.Diagnostics.Require_undeclared_properties_from_index_signatures_to_use_element_accesses
+            category: ts.Diagnostics.Type_Checking,
+            description: ts.Diagnostics.Enforces_using_indexed_accessors_for_keys_declared_using_an_indexed_type,
+            defaultValueDescription: "false"
         },
         // Module Resolution
         {
@@ -37697,16 +38634,17 @@
             })),
             affectsModuleResolution: true,
             paramType: ts.Diagnostics.STRATEGY,
-            category: ts.Diagnostics.Module_Resolution_Options,
-            description: ts.Diagnostics.Specify_module_resolution_strategy_Colon_node_Node_js_or_classic_TypeScript_pre_1_6,
+            category: ts.Diagnostics.Modules,
+            description: ts.Diagnostics.Specify_how_TypeScript_looks_up_a_file_from_a_given_module_specifier,
+            defaultValueDescription: ts.Diagnostics.module_AMD_or_UMD_or_System_or_ES6_then_Classic_Otherwise_Node
         },
         {
             name: "baseUrl",
             type: "string",
             affectsModuleResolution: true,
             isFilePath: true,
-            category: ts.Diagnostics.Module_Resolution_Options,
-            description: ts.Diagnostics.Base_directory_to_resolve_non_absolute_module_names
+            category: ts.Diagnostics.Modules,
+            description: ts.Diagnostics.Specify_the_base_directory_to_resolve_non_relative_module_names
         },
         {
             // this option can only be specified in tsconfig.json
@@ -37715,8 +38653,8 @@
             type: "object",
             affectsModuleResolution: true,
             isTSConfigOnly: true,
-            category: ts.Diagnostics.Module_Resolution_Options,
-            description: ts.Diagnostics.A_series_of_entries_which_re_map_imports_to_lookup_locations_relative_to_the_baseUrl,
+            category: ts.Diagnostics.Modules,
+            description: ts.Diagnostics.Specify_a_set_of_entries_that_re_map_imports_to_additional_lookup_locations,
             transpileOptionValue: undefined
         },
         {
@@ -37731,9 +38669,10 @@
                 isFilePath: true
             },
             affectsModuleResolution: true,
-            category: ts.Diagnostics.Module_Resolution_Options,
-            description: ts.Diagnostics.List_of_root_folders_whose_combined_content_represents_the_structure_of_the_project_at_runtime,
-            transpileOptionValue: undefined
+            category: ts.Diagnostics.Modules,
+            description: ts.Diagnostics.Allow_multiple_folders_to_be_treated_as_one_when_resolving_modules,
+            transpileOptionValue: undefined,
+            defaultValueDescription: ts.Diagnostics.Computed_from_the_list_of_input_files
         },
         {
             name: "typeRoots",
@@ -37744,8 +38683,8 @@
                 isFilePath: true
             },
             affectsModuleResolution: true,
-            category: ts.Diagnostics.Module_Resolution_Options,
-            description: ts.Diagnostics.List_of_folders_to_include_type_definitions_from
+            category: ts.Diagnostics.Modules,
+            description: ts.Diagnostics.Specify_multiple_folders_that_act_like_Slashnode_modules_Slash_types
         },
         {
             name: "types",
@@ -37754,18 +38693,19 @@
                 name: "types",
                 type: "string"
             },
-            affectsModuleResolution: true,
+            affectsProgramStructure: true,
             showInSimplifiedHelpView: true,
-            category: ts.Diagnostics.Module_Resolution_Options,
-            description: ts.Diagnostics.Type_declaration_files_to_be_included_in_compilation,
+            category: ts.Diagnostics.Modules,
+            description: ts.Diagnostics.Specify_type_package_names_to_be_included_without_being_referenced_in_a_source_file,
             transpileOptionValue: undefined
         },
         {
             name: "allowSyntheticDefaultImports",
             type: "boolean",
             affectsSemanticDiagnostics: true,
-            category: ts.Diagnostics.Module_Resolution_Options,
-            description: ts.Diagnostics.Allow_default_imports_from_modules_with_no_default_export_This_does_not_affect_code_emit_just_typechecking
+            category: ts.Diagnostics.Interop_Constraints,
+            description: ts.Diagnostics.Allow_import_x_from_y_when_a_module_doesn_t_have_a_default_export,
+            defaultValueDescription: ts.Diagnostics.module_system_or_esModuleInterop
         },
         {
             name: "esModuleInterop",
@@ -37773,21 +38713,24 @@
             affectsSemanticDiagnostics: true,
             affectsEmit: true,
             showInSimplifiedHelpView: true,
-            category: ts.Diagnostics.Module_Resolution_Options,
-            description: ts.Diagnostics.Enables_emit_interoperability_between_CommonJS_and_ES_Modules_via_creation_of_namespace_objects_for_all_imports_Implies_allowSyntheticDefaultImports
+            category: ts.Diagnostics.Interop_Constraints,
+            description: ts.Diagnostics.Emit_additional_JavaScript_to_ease_support_for_importing_CommonJS_modules_This_enables_allowSyntheticDefaultImports_for_type_compatibility,
+            defaultValueDescription: "false"
         },
         {
             name: "preserveSymlinks",
             type: "boolean",
-            category: ts.Diagnostics.Module_Resolution_Options,
-            description: ts.Diagnostics.Do_not_resolve_the_real_path_of_symlinks,
+            category: ts.Diagnostics.Interop_Constraints,
+            description: ts.Diagnostics.Disable_resolving_symlinks_to_their_realpath_This_correlates_to_the_same_flag_in_node,
+            defaultValueDescription: "n/a"
         },
         {
             name: "allowUmdGlobalAccess",
             type: "boolean",
             affectsSemanticDiagnostics: true,
-            category: ts.Diagnostics.Module_Resolution_Options,
+            category: ts.Diagnostics.Modules,
             description: ts.Diagnostics.Allow_accessing_UMD_globals_from_modules,
+            defaultValueDescription: "false"
         },
         // Source Maps
         {
@@ -37795,59 +38738,62 @@
             type: "string",
             affectsEmit: true,
             paramType: ts.Diagnostics.LOCATION,
-            category: ts.Diagnostics.Source_Map_Options,
-            description: ts.Diagnostics.Specify_the_location_where_debugger_should_locate_TypeScript_files_instead_of_source_locations,
+            category: ts.Diagnostics.Emit,
+            description: ts.Diagnostics.Specify_the_root_path_for_debuggers_to_find_the_reference_source_code,
         },
         {
             name: "mapRoot",
             type: "string",
             affectsEmit: true,
             paramType: ts.Diagnostics.LOCATION,
-            category: ts.Diagnostics.Source_Map_Options,
+            category: ts.Diagnostics.Emit,
             description: ts.Diagnostics.Specify_the_location_where_debugger_should_locate_map_files_instead_of_generated_locations,
         },
         {
             name: "inlineSourceMap",
             type: "boolean",
             affectsEmit: true,
-            category: ts.Diagnostics.Source_Map_Options,
-            description: ts.Diagnostics.Emit_a_single_file_with_source_maps_instead_of_having_a_separate_file
+            category: ts.Diagnostics.Emit,
+            description: ts.Diagnostics.Include_sourcemap_files_inside_the_emitted_JavaScript,
+            defaultValueDescription: "false"
         },
         {
             name: "inlineSources",
             type: "boolean",
             affectsEmit: true,
-            category: ts.Diagnostics.Source_Map_Options,
-            description: ts.Diagnostics.Emit_the_source_alongside_the_sourcemaps_within_a_single_file_requires_inlineSourceMap_or_sourceMap_to_be_set
+            category: ts.Diagnostics.Emit,
+            description: ts.Diagnostics.Include_source_code_in_the_sourcemaps_inside_the_emitted_JavaScript,
+            defaultValueDescription: "false"
         },
         // Experimental
         {
             name: "experimentalDecorators",
             type: "boolean",
             affectsSemanticDiagnostics: true,
-            category: ts.Diagnostics.Experimental_Options,
-            description: ts.Diagnostics.Enables_experimental_support_for_ES7_decorators
+            category: ts.Diagnostics.Language_and_Environment,
+            description: ts.Diagnostics.Enable_experimental_support_for_TC39_stage_2_draft_decorators
         },
         {
             name: "emitDecoratorMetadata",
             type: "boolean",
             affectsSemanticDiagnostics: true,
             affectsEmit: true,
-            category: ts.Diagnostics.Experimental_Options,
-            description: ts.Diagnostics.Enables_experimental_support_for_emitting_type_metadata_for_decorators
+            category: ts.Diagnostics.Language_and_Environment,
+            description: ts.Diagnostics.Emit_design_type_metadata_for_decorated_declarations_in_source_files
         },
         // Advanced
         {
             name: "jsxFactory",
             type: "string",
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Specify_the_JSX_factory_function_to_use_when_targeting_react_JSX_emit_e_g_React_createElement_or_h
+            category: ts.Diagnostics.Language_and_Environment,
+            description: ts.Diagnostics.Specify_the_JSX_factory_function_used_when_targeting_React_JSX_emit_e_g_React_createElement_or_h,
+            defaultValueDescription: "`React.createElement`"
         },
         {
             name: "jsxFragmentFactory",
             type: "string",
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Specify_the_JSX_fragment_factory_function_to_use_when_targeting_react_JSX_emit_with_jsxFactory_compiler_option_is_specified_e_g_Fragment
+            category: ts.Diagnostics.Language_and_Environment,
+            description: ts.Diagnostics.Specify_the_JSX_Fragment_reference_used_for_fragments_when_targeting_React_JSX_emit_e_g_React_Fragment_or_Fragment
         },
         {
             name: "jsxImportSource",
@@ -37855,15 +38801,17 @@
             affectsSemanticDiagnostics: true,
             affectsEmit: true,
             affectsModuleResolution: true,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Specify_the_module_specifier_to_be_used_to_import_the_jsx_and_jsxs_factory_functions_from_eg_react
+            category: ts.Diagnostics.Language_and_Environment,
+            description: ts.Diagnostics.Specify_module_specifier_used_to_import_the_JSX_factory_functions_when_using_jsx_Colon_react_jsx_Asterisk,
+            defaultValueDescription: "react"
         },
         {
             name: "resolveJsonModule",
             type: "boolean",
             affectsModuleResolution: true,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Include_modules_imported_with_json_extension
+            category: ts.Diagnostics.Modules,
+            description: ts.Diagnostics.Enable_importing_json_files,
+            defaultValueDescription: "false"
         },
         {
             name: "out",
@@ -37871,36 +38819,41 @@
             affectsEmit: true,
             isFilePath: false,
             // for correct behaviour, please use outFile
-            category: ts.Diagnostics.Advanced_Options,
+            category: ts.Diagnostics.Backwards_Compatibility,
             paramType: ts.Diagnostics.FILE,
-            description: ts.Diagnostics.Deprecated_Use_outFile_instead_Concatenate_and_emit_output_to_single_file,
-            transpileOptionValue: undefined
+            transpileOptionValue: undefined,
+            defaultValueDescription: "n/a",
+            description: ts.Diagnostics.Deprecated_setting_Use_outFile_instead,
         },
         {
             name: "reactNamespace",
             type: "string",
             affectsEmit: true,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Deprecated_Use_jsxFactory_instead_Specify_the_object_invoked_for_createElement_when_targeting_react_JSX_emit
+            category: ts.Diagnostics.Language_and_Environment,
+            description: ts.Diagnostics.Specify_the_object_invoked_for_createElement_This_only_applies_when_targeting_react_JSX_emit,
+            defaultValueDescription: "`React`",
         },
         {
             name: "skipDefaultLibCheck",
             type: "boolean",
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Deprecated_Use_skipLibCheck_instead_Skip_type_checking_of_default_library_declaration_files
+            category: ts.Diagnostics.Completeness,
+            description: ts.Diagnostics.Skip_type_checking_d_ts_files_that_are_included_with_TypeScript,
+            defaultValueDescription: "false",
         },
         {
             name: "charset",
             type: "string",
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.The_character_set_of_the_input_files
+            category: ts.Diagnostics.Backwards_Compatibility,
+            description: ts.Diagnostics.No_longer_supported_In_early_versions_manually_set_the_text_encoding_for_reading_files,
+            defaultValueDescription: "utf8"
         },
         {
             name: "emitBOM",
             type: "boolean",
             affectsEmit: true,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Emit_a_UTF_8_Byte_Order_Mark_BOM_in_the_beginning_of_output_files
+            category: ts.Diagnostics.Emit,
+            description: ts.Diagnostics.Emit_a_UTF_8_Byte_Order_Mark_BOM_in_the_beginning_of_output_files,
+            defaultValueDescription: "false"
         },
         {
             name: "newLine",
@@ -37910,99 +38863,108 @@
             })),
             affectsEmit: true,
             paramType: ts.Diagnostics.NEWLINE,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Specify_the_end_of_line_sequence_to_be_used_when_emitting_files_Colon_CRLF_dos_or_LF_unix,
+            category: ts.Diagnostics.Emit,
+            description: ts.Diagnostics.Set_the_newline_character_for_emitting_files,
+            defaultValueDescription: ts.Diagnostics.Platform_specific
         },
         {
             name: "noErrorTruncation",
             type: "boolean",
             affectsSemanticDiagnostics: true,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Do_not_truncate_error_messages
+            category: ts.Diagnostics.Output_Formatting,
+            description: ts.Diagnostics.Disable_truncating_types_in_error_messages,
+            defaultValueDescription: "false"
         },
         {
             name: "noLib",
             type: "boolean",
-            affectsModuleResolution: true,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Do_not_include_the_default_library_file_lib_d_ts,
+            category: ts.Diagnostics.Language_and_Environment,
+            affectsProgramStructure: true,
+            description: ts.Diagnostics.Disable_including_any_library_files_including_the_default_lib_d_ts,
             // We are not returning a sourceFile for lib file when asked by the program,
             // so pass --noLib to avoid reporting a file not found error.
-            transpileOptionValue: true
+            transpileOptionValue: true,
+            defaultValueDescription: "false"
         },
         {
             name: "noResolve",
             type: "boolean",
             affectsModuleResolution: true,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Do_not_add_triple_slash_references_or_imported_modules_to_the_list_of_compiled_files,
+            category: ts.Diagnostics.Modules,
+            description: ts.Diagnostics.Disallow_import_s_require_s_or_reference_s_from_expanding_the_number_of_files_TypeScript_should_add_to_a_project,
             // We are not doing a full typecheck, we are not resolving the whole context,
             // so pass --noResolve to avoid reporting missing file errors.
-            transpileOptionValue: true
+            transpileOptionValue: true,
+            defaultValueDescription: "false"
         },
         {
             name: "stripInternal",
             type: "boolean",
             affectsEmit: true,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Do_not_emit_declarations_for_code_that_has_an_internal_annotation,
+            category: ts.Diagnostics.Emit,
+            description: ts.Diagnostics.Disable_emitting_declarations_that_have_internal_in_their_JSDoc_comments,
         },
         {
             name: "disableSizeLimit",
             type: "boolean",
-            affectsSourceFile: true,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Disable_size_limitations_on_JavaScript_projects
+            affectsProgramStructure: true,
+            category: ts.Diagnostics.Editor_Support,
+            description: ts.Diagnostics.Remove_the_20mb_cap_on_total_source_code_size_for_JavaScript_files_in_the_TypeScript_language_server,
+            defaultValueDescription: "false"
         },
         {
             name: "disableSourceOfProjectReferenceRedirect",
             type: "boolean",
             isTSConfigOnly: true,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Disable_use_of_source_files_instead_of_declaration_files_from_referenced_projects
+            category: ts.Diagnostics.Projects,
+            description: ts.Diagnostics.Disable_preferring_source_files_instead_of_declaration_files_when_referencing_composite_projects
         },
         {
             name: "disableSolutionSearching",
             type: "boolean",
             isTSConfigOnly: true,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Disable_solution_searching_for_this_project
+            category: ts.Diagnostics.Projects,
+            description: ts.Diagnostics.Opt_a_project_out_of_multi_project_reference_checking_when_editing
         },
         {
             name: "disableReferencedProjectLoad",
             type: "boolean",
             isTSConfigOnly: true,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Disable_loading_referenced_projects
+            category: ts.Diagnostics.Projects,
+            description: ts.Diagnostics.Reduce_the_number_of_projects_loaded_automatically_by_TypeScript
         },
         {
             name: "noImplicitUseStrict",
             type: "boolean",
             affectsSemanticDiagnostics: true,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Do_not_emit_use_strict_directives_in_module_output
+            category: ts.Diagnostics.Backwards_Compatibility,
+            description: ts.Diagnostics.Disable_adding_use_strict_directives_in_emitted_JavaScript_files,
+            defaultValueDescription: "false"
         },
         {
             name: "noEmitHelpers",
             type: "boolean",
             affectsEmit: true,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Do_not_generate_custom_helper_functions_like_extends_in_compiled_output
+            category: ts.Diagnostics.Emit,
+            description: ts.Diagnostics.Disable_generating_custom_helper_functions_like_extends_in_compiled_output,
+            defaultValueDescription: "false"
         },
         {
             name: "noEmitOnError",
             type: "boolean",
             affectsEmit: true,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Do_not_emit_outputs_if_any_errors_were_reported,
-            transpileOptionValue: undefined
+            category: ts.Diagnostics.Emit,
+            transpileOptionValue: undefined,
+            description: ts.Diagnostics.Disable_emitting_files_if_any_type_checking_errors_are_reported,
+            defaultValueDescription: "false"
         },
         {
             name: "preserveConstEnums",
             type: "boolean",
             affectsEmit: true,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Do_not_erase_const_enum_declarations_in_generated_code
+            category: ts.Diagnostics.Emit,
+            description: ts.Diagnostics.Disable_erasing_const_enum_declarations_in_generated_code,
+            defaultValueDescription: "n/a"
         },
         {
             name: "declarationDir",
@@ -38010,80 +38972,91 @@
             affectsEmit: true,
             isFilePath: true,
             paramType: ts.Diagnostics.DIRECTORY,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Output_directory_for_generated_declaration_files,
-            transpileOptionValue: undefined
+            category: ts.Diagnostics.Emit,
+            transpileOptionValue: undefined,
+            description: ts.Diagnostics.Specify_the_output_directory_for_generated_declaration_files,
+            defaultValueDescription: "n/a"
         },
         {
             name: "skipLibCheck",
             type: "boolean",
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Skip_type_checking_of_declaration_files,
+            category: ts.Diagnostics.Completeness,
+            description: ts.Diagnostics.Skip_type_checking_all_d_ts_files,
+            defaultValueDescription: "false"
         },
         {
             name: "allowUnusedLabels",
             type: "boolean",
             affectsBindDiagnostics: true,
             affectsSemanticDiagnostics: true,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Do_not_report_errors_on_unused_labels
+            category: ts.Diagnostics.Type_Checking,
+            description: ts.Diagnostics.Disable_error_reporting_for_unused_labels,
+            defaultValueDescription: "undefined"
         },
         {
             name: "allowUnreachableCode",
             type: "boolean",
             affectsBindDiagnostics: true,
             affectsSemanticDiagnostics: true,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Do_not_report_errors_on_unreachable_code
+            category: ts.Diagnostics.Type_Checking,
+            description: ts.Diagnostics.Disable_error_reporting_for_unreachable_code,
+            defaultValueDescription: "undefined"
         },
         {
             name: "suppressExcessPropertyErrors",
             type: "boolean",
             affectsSemanticDiagnostics: true,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Suppress_excess_property_checks_for_object_literals,
+            category: ts.Diagnostics.Backwards_Compatibility,
+            description: ts.Diagnostics.Disable_reporting_of_excess_property_errors_during_the_creation_of_object_literals,
+            defaultValueDescription: "false"
         },
         {
             name: "suppressImplicitAnyIndexErrors",
             type: "boolean",
             affectsSemanticDiagnostics: true,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Suppress_noImplicitAny_errors_for_indexing_objects_lacking_index_signatures,
+            category: ts.Diagnostics.Backwards_Compatibility,
+            description: ts.Diagnostics.Suppress_noImplicitAny_errors_when_indexing_objects_that_lack_index_signatures,
+            defaultValueDescription: "false"
         },
         {
             name: "forceConsistentCasingInFileNames",
             type: "boolean",
             affectsModuleResolution: true,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Disallow_inconsistently_cased_references_to_the_same_file
+            category: ts.Diagnostics.Interop_Constraints,
+            description: ts.Diagnostics.Ensure_that_casing_is_correct_in_imports,
+            defaultValueDescription: "false"
         },
         {
             name: "maxNodeModuleJsDepth",
             type: "number",
             affectsModuleResolution: true,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.The_maximum_dependency_depth_to_search_under_node_modules_and_load_JavaScript_files
+            category: ts.Diagnostics.JavaScript_Support,
+            description: ts.Diagnostics.Specify_the_maximum_folder_depth_used_for_checking_JavaScript_files_from_node_modules_Only_applicable_with_allowJs,
+            defaultValueDescription: "0"
         },
         {
             name: "noStrictGenericChecks",
             type: "boolean",
             affectsSemanticDiagnostics: true,
-            category: ts.Diagnostics.Advanced_Options,
+            category: ts.Diagnostics.Backwards_Compatibility,
             description: ts.Diagnostics.Disable_strict_checking_of_generic_signatures_in_function_types,
+            defaultValueDescription: "false"
         },
         {
             name: "useDefineForClassFields",
             type: "boolean",
             affectsSemanticDiagnostics: true,
             affectsEmit: true,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Emit_class_fields_with_Define_instead_of_Set,
+            category: ts.Diagnostics.Language_and_Environment,
+            description: ts.Diagnostics.Emit_ECMAScript_standard_compliant_class_fields,
+            defaultValueDescription: "false"
         },
         {
             name: "keyofStringsOnly",
             type: "boolean",
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Resolve_keyof_to_string_valued_property_names_only_no_numbers_or_symbols,
+            category: ts.Diagnostics.Backwards_Compatibility,
+            description: ts.Diagnostics.Make_keyof_only_return_strings_instead_of_string_numbers_or_symbols_Legacy_option,
+            defaultValueDescription: "false"
         },
         {
             // A list of plugins to load in the language service
@@ -38094,11 +39067,12 @@
                 name: "plugin",
                 type: "object"
             },
-            description: ts.Diagnostics.List_of_language_service_plugins
+            description: ts.Diagnostics.List_of_language_service_plugins,
+            category: ts.Diagnostics.Editor_Support,
         },
     ];
     /* @internal */
-    ts.optionDeclarations = __spreadArray(__spreadArray([], ts.commonOptionsWithBuild), commandOptionsWithoutBuild);
+    ts.optionDeclarations = __spreadArray(__spreadArray([], ts.commonOptionsWithBuild, true), commandOptionsWithoutBuild, true);
     /* @internal */
     ts.semanticDiagnosticsOptionDeclarations = ts.optionDeclarations.filter(function (option) { return !!option.affectsSemanticDiagnostics; });
     /* @internal */
@@ -38110,10 +39084,14 @@
         return !!option.affectsSourceFile || !!option.affectsModuleResolution || !!option.affectsBindDiagnostics;
     });
     /* @internal */
+    ts.optionsAffectingProgramStructure = ts.optionDeclarations.filter(function (option) { return !!option.affectsProgramStructure; });
+    /* @internal */
     ts.transpileOptionValueCompilerOptions = ts.optionDeclarations.filter(function (option) {
         return ts.hasProperty(option, "transpileOptionValue");
     });
-    var commandOptionsOnlyBuild = [
+    // Build related options
+    /* @internal */
+    ts.optionsForBuild = [
         {
             name: "verbose",
             shortName: "v",
@@ -38143,7 +39121,7 @@
         }
     ];
     /* @internal */
-    ts.buildOpts = __spreadArray(__spreadArray([], ts.commonOptionsWithBuild), commandOptionsOnlyBuild);
+    ts.buildOpts = __spreadArray(__spreadArray([], ts.commonOptionsWithBuild, true), ts.optionsForBuild, true);
     /* @internal */
     ts.typeAcquisitionDeclarations = [
         {
@@ -38234,13 +39212,13 @@
     }
     /* @internal */
     function parseCustomTypeOption(opt, value, errors) {
-        return convertJsonOptionOfCustomType(opt, trimString(value || ""), errors);
+        return convertJsonOptionOfCustomType(opt, ts.trimString(value || ""), errors);
     }
     ts.parseCustomTypeOption = parseCustomTypeOption;
     /* @internal */
     function parseListTypeOption(opt, value, errors) {
         if (value === void 0) { value = ""; }
-        value = trimString(value);
+        value = ts.trimString(value);
         if (ts.startsWith(value, "-")) {
             return undefined;
         }
@@ -38624,7 +39602,8 @@
                     },
                     {
                         name: "extends",
-                        type: "string"
+                        type: "string",
+                        category: ts.Diagnostics.File_Management,
                     },
                     {
                         name: "references",
@@ -38632,7 +39611,8 @@
                         element: {
                             name: "references",
                             type: "object"
-                        }
+                        },
+                        category: ts.Diagnostics.Projects,
                     },
                     {
                         name: "files",
@@ -38640,7 +39620,8 @@
                         element: {
                             name: "files",
                             type: "string"
-                        }
+                        },
+                        category: ts.Diagnostics.File_Management,
                     },
                     {
                         name: "include",
@@ -38648,7 +39629,9 @@
                         element: {
                             name: "include",
                             type: "string"
-                        }
+                        },
+                        category: ts.Diagnostics.File_Management,
+                        defaultValueDescription: ts.Diagnostics.if_files_is_specified_otherwise_Asterisk_Asterisk_Slash_Asterisk
                     },
                     {
                         name: "exclude",
@@ -38656,7 +39639,9 @@
                         element: {
                             name: "exclude",
                             type: "string"
-                        }
+                        },
+                        category: ts.Diagnostics.File_Management,
+                        defaultValueDescription: ts.Diagnostics.node_modules_bower_components_jspm_packages_plus_the_value_of_outDir_if_one_is_specified
                     },
                     ts.compileOnSaveCommandLineOption
                 ])
@@ -38668,7 +39653,7 @@
         var _a;
         var rootExpression = (_a = sourceFile.statements[0]) === null || _a === void 0 ? void 0 : _a.expression;
         var knownRootOptions = reportOptionsErrors ? getTsconfigRootOptionsMap() : undefined;
-        if (rootExpression && rootExpression.kind !== 201 /* ObjectLiteralExpression */) {
+        if (rootExpression && rootExpression.kind !== 203 /* ObjectLiteralExpression */) {
             errors.push(ts.createDiagnosticForNodeInSourceFile(sourceFile, rootExpression, ts.Diagnostics.The_root_value_of_a_0_file_must_be_an_object, ts.getBaseFileName(sourceFile.fileName) === "jsconfig.json" ? "jsconfig.json" : "tsconfig.json"));
             // Last-ditch error recovery. Somewhat useful because the JSON parser will recover from some parse errors by
             // synthesizing a top-level array literal expression. There's a reasonable chance the first element of that
@@ -38708,7 +39693,7 @@
         function convertObjectLiteralExpressionToJson(node, knownOptions, extraKeyDiagnostics, parentOption) {
             var result = returnValue ? {} : undefined;
             var _loop_4 = function (element) {
-                if (element.kind !== 289 /* PropertyAssignment */) {
+                if (element.kind !== 291 /* PropertyAssignment */) {
                     errors.push(ts.createDiagnosticForNodeInSourceFile(sourceFile, element, ts.Diagnostics.Property_assignment_expected));
                     return "continue";
                 }
@@ -38775,13 +39760,13 @@
         function convertPropertyValueToJson(valueExpression, option) {
             var invalidReported;
             switch (valueExpression.kind) {
-                case 109 /* TrueKeyword */:
+                case 110 /* TrueKeyword */:
                     reportInvalidOptionValue(option && option.type !== "boolean");
                     return validateValue(/*value*/ true);
-                case 94 /* FalseKeyword */:
+                case 95 /* FalseKeyword */:
                     reportInvalidOptionValue(option && option.type !== "boolean");
                     return validateValue(/*value*/ false);
-                case 103 /* NullKeyword */:
+                case 104 /* NullKeyword */:
                     reportInvalidOptionValue(option && option.name === "extends"); // "extends" is the only option we don't allow null/undefined for
                     return validateValue(/*value*/ null); // eslint-disable-line no-null/no-null
                 case 10 /* StringLiteral */:
@@ -38802,13 +39787,13 @@
                 case 8 /* NumericLiteral */:
                     reportInvalidOptionValue(option && option.type !== "number");
                     return validateValue(Number(valueExpression.text));
-                case 215 /* PrefixUnaryExpression */:
+                case 217 /* PrefixUnaryExpression */:
                     if (valueExpression.operator !== 40 /* MinusToken */ || valueExpression.operand.kind !== 8 /* NumericLiteral */) {
                         break; // not valid JSON syntax
                     }
                     reportInvalidOptionValue(option && option.type !== "number");
                     return validateValue(-Number(valueExpression.operand.text));
-                case 201 /* ObjectLiteralExpression */:
+                case 203 /* ObjectLiteralExpression */:
                     reportInvalidOptionValue(option && option.type !== "object");
                     var objectLiteralExpression = valueExpression;
                     // Currently having element option declaration in the tsconfig with type "object"
@@ -38825,7 +39810,7 @@
                         return validateValue(convertObjectLiteralExpressionToJson(objectLiteralExpression, /* knownOptions*/ undefined, 
                         /*extraKeyDiagnosticMessage */ undefined, /*parentOption*/ undefined));
                     }
-                case 200 /* ArrayLiteralExpression */:
+                case 202 /* ArrayLiteralExpression */:
                     reportInvalidOptionValue(option && option.type !== "list");
                     return validateValue(convertArrayLiteralExpressionToJson(valueExpression.elements, option && option.element));
             }
@@ -38842,7 +39827,7 @@
                 if (!invalidReported) {
                     var diagnostic = (_a = option === null || option === void 0 ? void 0 : option.extraValidation) === null || _a === void 0 ? void 0 : _a.call(option, value);
                     if (diagnostic) {
-                        errors.push(ts.createDiagnosticForNodeInSourceFile.apply(void 0, __spreadArray([sourceFile, valueExpression], diagnostic)));
+                        errors.push(ts.createDiagnosticForNodeInSourceFile.apply(void 0, __spreadArray([sourceFile, valueExpression], diagnostic, false)));
                         return undefined;
                     }
                 }
@@ -38963,7 +39948,7 @@
             if (ts.hasProperty(options, name)) {
                 // tsconfig only options cannot be specified via command line,
                 // so we can assume that only types that can appear here string | number | boolean
-                if (optionsNameMap.has(name) && optionsNameMap.get(name).category === ts.Diagnostics.Command_line_Options) {
+                if (optionsNameMap.has(name) && (optionsNameMap.get(name).category === ts.Diagnostics.Command_line_Options || optionsNameMap.get(name).category === ts.Diagnostics.Output_Formatting)) {
                     return "continue";
                 }
                 var value = options[name];
@@ -39029,13 +40014,11 @@
         function makePadding(paddingLength) {
             return Array(paddingLength + 1).join(" ");
         }
-        function isAllowedOption(_a) {
-            var category = _a.category, name = _a.name;
-            // Skip options which do not have a category or have category `Command_line_Options`
-            // Exclude all possible `Advanced_Options` in tsconfig.json which were NOT defined in command line
-            return category !== undefined
-                && category !== ts.Diagnostics.Command_line_Options
-                && (category !== ts.Diagnostics.Advanced_Options || compilerOptionsMap.has(name));
+        function isAllowedOptionForOutput(_a) {
+            var category = _a.category, name = _a.name, isCommandLineOnly = _a.isCommandLineOnly;
+            // Skip options which do not have a category or have categories which are more niche
+            var categoriesToSkip = [ts.Diagnostics.Command_line_Options, ts.Diagnostics.Editor_Support, ts.Diagnostics.Compiler_Diagnostics, ts.Diagnostics.Backwards_Compatibility, ts.Diagnostics.Watch_and_Build_Modes, ts.Diagnostics.Output_Formatting];
+            return !isCommandLineOnly && category !== undefined && (!categoriesToSkip.includes(category) || compilerOptionsMap.has(name));
         }
         function writeConfigurations() {
             // Filter applicable options to place in the file
@@ -39043,7 +40026,7 @@
             for (var _i = 0, optionDeclarations_1 = ts.optionDeclarations; _i < optionDeclarations_1.length; _i++) {
                 var option = optionDeclarations_1[_i];
                 var category = option.category;
-                if (isAllowedOption(option)) {
+                if (isAllowedOptionForOutput(option)) {
                     categorizedOptions.add(ts.getLocaleSpecificMessage(category), option);
                 }
             }
@@ -39260,6 +40243,7 @@
                 validatedFilesSpec: ts.filter(filesSpecs, ts.isString),
                 validatedIncludeSpecs: validatedIncludeSpecs,
                 validatedExcludeSpecs: validatedExcludeSpecs,
+                pathPatterns: undefined, // Initialized on first use
             };
         }
         function getFileNames(basePath) {
@@ -39357,7 +40341,7 @@
         basePath = ts.normalizeSlashes(basePath);
         var resolvedPath = ts.getNormalizedAbsolutePath(configFileName || "", basePath);
         if (resolutionStack.indexOf(resolvedPath) >= 0) {
-            errors.push(ts.createCompilerDiagnostic(ts.Diagnostics.Circularity_detected_while_resolving_configuration_Colon_0, __spreadArray(__spreadArray([], resolutionStack), [resolvedPath]).join(" -> ")));
+            errors.push(ts.createCompilerDiagnostic(ts.Diagnostics.Circularity_detected_while_resolving_configuration_Colon_0, __spreadArray(__spreadArray([], resolutionStack, true), [resolvedPath], false).join(" -> ")));
             return { raw: json || convertToObject(sourceFile, errors) };
         }
         var ownConfig = json ?
@@ -39657,9 +40641,6 @@
     function convertJsonOptionOfListType(option, values, basePath, errors) {
         return ts.filter(ts.map(values, function (v) { return convertJsonOption(option.element, v, basePath, errors); }), function (v) { return !!v; });
     }
-    function trimString(s) {
-        return typeof s.trim === "function" ? s.trim() : s.replace(/^[\s]+|[\s]+$/g, "");
-    }
     /**
      * Tests for a path that ends in a recursive directory wildcard.
      * Matches **, \**, **\, and \**\, but not a**b.
@@ -39673,34 +40654,6 @@
      */
     var invalidTrailingRecursionPattern = /(^|\/)\*\*\/?$/;
     /**
-     * Tests for a path where .. appears after a recursive directory wildcard.
-     * Matches **\..\*, **\a\..\*, and **\.., but not ..\**\*
-     *
-     * NOTE: used \ in place of / above to avoid issues with multiline comments.
-     *
-     * Breakdown:
-     *  (^|\/)      # matches either the beginning of the string or a directory separator.
-     *  \*\*\/      # matches a recursive directory wildcard "**" followed by a directory separator.
-     *  (.*\/)?     # optionally matches any number of characters followed by a directory separator.
-     *  \.\.        # matches a parent directory path component ".."
-     *  ($|\/)      # matches either the end of the string or a directory separator.
-     */
-    var invalidDotDotAfterRecursiveWildcardPattern = /(^|\/)\*\*\/(.*\/)?\.\.($|\/)/;
-    /**
-     * Tests for a path containing a wildcard character in a directory component of the path.
-     * Matches \*\, \?\, and \a*b\, but not \a\ or \a\*.
-     *
-     * NOTE: used \ in place of / above to avoid issues with multiline comments.
-     *
-     * Breakdown:
-     *  \/          # matches a directory separator.
-     *  [^/]*?      # matches any number of characters excluding directory separators (non-greedy).
-     *  [*?]        # matches either a wildcard character (* or ?)
-     *  [^/]*       # matches any number of characters excluding directory separators (greedy).
-     *  \/          # matches a directory separator.
-     */
-    var watchRecursivePattern = /\/[^/]*?[*?][^/]*\//;
-    /**
      * Matches the portion of a wildcard path that does not contain wildcards.
      * Matches \a of \a\*, or \a\b\c of \a\b\c\?\d.
      *
@@ -39740,7 +40693,7 @@
         // via wildcard of *.json kind
         var wildCardJsonFileMap = new ts.Map();
         var validatedFilesSpec = configFileSpecs.validatedFilesSpec, validatedIncludeSpecs = configFileSpecs.validatedIncludeSpecs, validatedExcludeSpecs = configFileSpecs.validatedExcludeSpecs;
-        // Rather than requery this for each file and filespec, we query the supported extensions
+        // Rather than re-query this for each file and filespec, we query the supported extensions
         // once and store it on the expansion context.
         var supportedExtensions = ts.getSupportedExtensions(options, extraFileExtensions);
         var supportedExtensionsWithJsonIfResolveJsonModule = ts.getSuppoertedExtensionsWithJsonIfResolveJsonModule(options, supportedExtensions);
@@ -39818,9 +40771,22 @@
         return matchesExcludeWorker(pathToCheck, validatedExcludeSpecs, useCaseSensitiveFileNames, currentDirectory, basePath);
     }
     ts.isExcludedFile = isExcludedFile;
+    function invalidDotDotAfterRecursiveWildcard(s) {
+        // We used to use the regex /(^|\/)\*\*\/(.*\/)?\.\.($|\/)/ to check for this case, but
+        // in v8, that has polynomial performance because the recursive wildcard match - **/ -
+        // can be matched in many arbitrary positions when multiple are present, resulting
+        // in bad backtracking (and we don't care which is matched - just that some /.. segment
+        // comes after some **/ segment).
+        var wildcardIndex = ts.startsWith(s, "**/") ? 0 : s.indexOf("/**/");
+        if (wildcardIndex === -1) {
+            return false;
+        }
+        var lastDotIndex = ts.endsWith(s, "/..") ? s.length : s.lastIndexOf("/../");
+        return lastDotIndex > wildcardIndex;
+    }
     /* @internal */
     function matchesExclude(pathToCheck, excludeSpecs, useCaseSensitiveFileNames, currentDirectory) {
-        return matchesExcludeWorker(pathToCheck, ts.filter(excludeSpecs, function (spec) { return !invalidDotDotAfterRecursiveWildcardPattern.test(spec); }), useCaseSensitiveFileNames, currentDirectory);
+        return matchesExcludeWorker(pathToCheck, ts.filter(excludeSpecs, function (spec) { return !invalidDotDotAfterRecursiveWildcard(spec); }), useCaseSensitiveFileNames, currentDirectory);
     }
     ts.matchesExclude = matchesExclude;
     function matchesExcludeWorker(pathToCheck, excludeSpecs, useCaseSensitiveFileNames, currentDirectory, basePath) {
@@ -39853,7 +40819,7 @@
         if (disallowTrailingRecursion && invalidTrailingRecursionPattern.test(spec)) {
             return [ts.Diagnostics.File_specification_cannot_end_in_a_recursive_directory_wildcard_Asterisk_Asterisk_Colon_0, spec];
         }
-        else if (invalidDotDotAfterRecursiveWildcardPattern.test(spec)) {
+        else if (invalidDotDotAfterRecursiveWildcard(spec)) {
             return [ts.Diagnostics.File_specification_cannot_contain_a_parent_directory_that_appears_after_a_recursive_directory_wildcard_Asterisk_Asterisk_Colon_0, spec];
         }
     }
@@ -39914,9 +40880,18 @@
     function getWildcardDirectoryFromSpec(spec, useCaseSensitiveFileNames) {
         var match = wildcardDirectoryPattern.exec(spec);
         if (match) {
+            // We check this with a few `indexOf` calls because 3 `indexOf`/`lastIndexOf` calls is
+            // less algorithmically complex (roughly O(3n) worst-case) than the regex we used to use,
+            // \/[^/]*?[*?][^/]*\/ which was polynominal in v8, since arbitrary sequences of wildcard
+            // characters could match any of the central patterns, resulting in bad backtracking.
+            var questionWildcardIndex = spec.indexOf("?");
+            var starWildcardIndex = spec.indexOf("*");
+            var lastDirectorySeperatorIndex = spec.lastIndexOf(ts.directorySeparator);
             return {
                 key: useCaseSensitiveFileNames ? match[0] : ts.toFileNameLowerCase(match[0]),
-                flags: watchRecursivePattern.test(spec) ? 1 /* Recursive */ : 0 /* None */
+                flags: (questionWildcardIndex !== -1 && questionWildcardIndex < lastDirectorySeperatorIndex)
+                    || (starWildcardIndex !== -1 && starWildcardIndex < lastDirectorySeperatorIndex)
+                    ? 1 /* Recursive */ : 0 /* None */
             };
         }
         if (ts.isImplicitGlob(spec)) {
@@ -40421,7 +41396,7 @@
     ts.createCacheWithRedirects = createCacheWithRedirects;
     function createPackageJsonInfoCache(currentDirectory, getCanonicalFileName) {
         var cache;
-        return { getPackageJsonInfo: getPackageJsonInfo, setPackageJsonInfo: setPackageJsonInfo, clear: clear };
+        return { getPackageJsonInfo: getPackageJsonInfo, setPackageJsonInfo: setPackageJsonInfo, clear: clear, entries: entries };
         function getPackageJsonInfo(packageJsonPath) {
             return cache === null || cache === void 0 ? void 0 : cache.get(ts.toPath(packageJsonPath, currentDirectory, getCanonicalFileName));
         }
@@ -40431,6 +41406,10 @@
         function clear() {
             cache = undefined;
         }
+        function entries() {
+            var iter = cache === null || cache === void 0 ? void 0 : cache.entries();
+            return iter ? ts.arrayFrom(iter) : [];
+        }
     }
     function getOrCreateCache(cacheWithRedirects, redirectedReference, key, create) {
         var cache = cacheWithRedirects.getOrCreateMapOfCacheRedirects(redirectedReference);
@@ -40724,7 +41703,8 @@
         }
     }
     function tryLoadModuleUsingPathsIfEligible(extensions, moduleName, loader, state) {
-        var _a = state.compilerOptions, baseUrl = _a.baseUrl, paths = _a.paths;
+        var _a;
+        var _b = state.compilerOptions, baseUrl = _b.baseUrl, paths = _b.paths, configFile = _b.configFile;
         if (paths && !ts.pathIsRelative(moduleName)) {
             if (state.traceEnabled) {
                 if (baseUrl) {
@@ -40733,7 +41713,8 @@
                 trace(state.host, ts.Diagnostics.paths_option_is_specified_looking_for_a_pattern_to_match_module_name_0, moduleName);
             }
             var baseDirectory = ts.getPathsBasePath(state.compilerOptions, state.host); // Always defined when 'paths' is defined
-            return tryLoadModuleUsingPaths(extensions, moduleName, baseDirectory, paths, loader, /*onlyRecordFailures*/ false, state);
+            var pathPatterns = (configFile === null || configFile === void 0 ? void 0 : configFile.configFileSpecs) ? (_a = configFile.configFileSpecs).pathPatterns || (_a.pathPatterns = ts.tryParsePatterns(paths)) : undefined;
+            return tryLoadModuleUsingPaths(extensions, moduleName, baseDirectory, paths, pathPatterns, loader, /*onlyRecordFailures*/ false, state);
         }
     }
     function tryLoadModuleUsingRootDirs(extensions, moduleName, containingDirectory, loader, state) {
@@ -40840,7 +41821,7 @@
     ts.tryResolveJSModule = tryResolveJSModule;
     var jsOnlyExtensions = [Extensions.JavaScript];
     var tsExtensions = [Extensions.TypeScript, Extensions.JavaScript];
-    var tsPlusJsonExtensions = __spreadArray(__spreadArray([], tsExtensions), [Extensions.Json]);
+    var tsPlusJsonExtensions = __spreadArray(__spreadArray([], tsExtensions, true), [Extensions.Json], false);
     var tsconfigExtensions = [Extensions.TSConfig];
     function tryResolveJSModuleWorker(moduleName, initialDir, host) {
         return nodeModuleNameResolverWorker(moduleName, initialDir, { moduleResolution: ts.ModuleResolutionKind.NodeJs, allowJs: true }, host, /*cache*/ undefined, jsOnlyExtensions, /*redirectedReferences*/ undefined);
@@ -41131,7 +42112,7 @@
             if (state.traceEnabled) {
                 trace(state.host, ts.Diagnostics.package_json_has_a_typesVersions_entry_0_that_matches_compiler_version_1_looking_for_a_pattern_to_match_module_name_2, versionPaths.version, ts.version, moduleName);
             }
-            var result = tryLoadModuleUsingPaths(extensions, moduleName, candidate, versionPaths.paths, loader, onlyRecordFailuresForPackageFile || onlyRecordFailuresForIndex, state);
+            var result = tryLoadModuleUsingPaths(extensions, moduleName, candidate, versionPaths.paths, /*pathPatterns*/ undefined, loader, onlyRecordFailuresForPackageFile || onlyRecordFailuresForIndex, state);
             if (result) {
                 return removeIgnoredPackageId(result.value);
             }
@@ -41238,7 +42219,7 @@
                     trace(state.host, ts.Diagnostics.package_json_has_a_typesVersions_entry_0_that_matches_compiler_version_1_looking_for_a_pattern_to_match_module_name_2, packageInfo.versionPaths.version, ts.version, rest);
                 }
                 var packageDirectoryExists = nodeModulesDirectoryExists && ts.directoryProbablyExists(packageDirectory, state.host);
-                var fromPaths = tryLoadModuleUsingPaths(extensions, rest, packageDirectory, packageInfo.versionPaths.paths, loader, !packageDirectoryExists, state);
+                var fromPaths = tryLoadModuleUsingPaths(extensions, rest, packageDirectory, packageInfo.versionPaths.paths, /*pathPatterns*/ undefined, loader, !packageDirectoryExists, state);
                 if (fromPaths) {
                     return fromPaths.value;
                 }
@@ -41246,8 +42227,9 @@
         }
         return loader(extensions, candidate, !nodeModulesDirectoryExists, state);
     }
-    function tryLoadModuleUsingPaths(extensions, moduleName, baseDirectory, paths, loader, onlyRecordFailures, state) {
-        var matchedPattern = ts.matchPatternOrExact(ts.getOwnKeys(paths), moduleName);
+    function tryLoadModuleUsingPaths(extensions, moduleName, baseDirectory, paths, pathPatterns, loader, onlyRecordFailures, state) {
+        pathPatterns || (pathPatterns = ts.tryParsePatterns(paths));
+        var matchedPattern = ts.matchPatternOrExact(pathPatterns, moduleName);
         if (matchedPattern) {
             var matchedStar_1 = ts.isString(matchedPattern) ? undefined : ts.matchedText(matchedPattern, moduleName);
             var matchedPatternText = ts.isString(matchedPattern) ? matchedPattern : ts.patternText(matchedPattern);
@@ -41422,26 +42404,26 @@
         // A module is uninstantiated if it contains only
         switch (node.kind) {
             // 1. interface declarations, type alias declarations
-            case 254 /* InterfaceDeclaration */:
-            case 255 /* TypeAliasDeclaration */:
+            case 256 /* InterfaceDeclaration */:
+            case 257 /* TypeAliasDeclaration */:
                 return 0 /* NonInstantiated */;
             // 2. const enum declarations
-            case 256 /* EnumDeclaration */:
+            case 258 /* EnumDeclaration */:
                 if (ts.isEnumConst(node)) {
                     return 2 /* ConstEnumOnly */;
                 }
                 break;
             // 3. non-exported import declarations
-            case 262 /* ImportDeclaration */:
-            case 261 /* ImportEqualsDeclaration */:
+            case 264 /* ImportDeclaration */:
+            case 263 /* ImportEqualsDeclaration */:
                 if (!(ts.hasSyntacticModifier(node, 1 /* Export */))) {
                     return 0 /* NonInstantiated */;
                 }
                 break;
             // 4. Export alias declarations pointing at only uninstantiated modules or things uninstantiated modules contain
-            case 268 /* ExportDeclaration */:
+            case 270 /* ExportDeclaration */:
                 var exportDeclaration = node;
-                if (!exportDeclaration.moduleSpecifier && exportDeclaration.exportClause && exportDeclaration.exportClause.kind === 269 /* NamedExports */) {
+                if (!exportDeclaration.moduleSpecifier && exportDeclaration.exportClause && exportDeclaration.exportClause.kind === 271 /* NamedExports */) {
                     var state = 0 /* NonInstantiated */;
                     for (var _i = 0, _a = exportDeclaration.exportClause.elements; _i < _a.length; _i++) {
                         var specifier = _a[_i];
@@ -41457,7 +42439,7 @@
                 }
                 break;
             // 5. other uninstantiated module declarations.
-            case 258 /* ModuleBlock */: {
+            case 260 /* ModuleBlock */: {
                 var state_1 = 0 /* NonInstantiated */;
                 ts.forEachChild(node, function (n) {
                     var childState = getModuleInstanceStateCached(n, visited);
@@ -41479,9 +42461,9 @@
                 });
                 return state_1;
             }
-            case 257 /* ModuleDeclaration */:
+            case 259 /* ModuleDeclaration */:
                 return getModuleInstanceState(node, visited);
-            case 78 /* Identifier */:
+            case 79 /* Identifier */:
                 // Only jsdoc typedef definition can exist in jsdoc namespace, and it should
                 // be considered the same as type alias
                 if (node.isInJSDocNamespace) {
@@ -41680,7 +42662,7 @@
         // Should not be called on a declaration with a computed property name,
         // unless it is a well known Symbol.
         function getDeclarationName(node) {
-            if (node.kind === 267 /* ExportAssignment */) {
+            if (node.kind === 269 /* ExportAssignment */) {
                 return node.isExportEquals ? "export=" /* ExportEquals */ : "default" /* Default */;
             }
             var name = ts.getNameOfDeclaration(node);
@@ -41689,7 +42671,7 @@
                     var moduleName = ts.getTextOfIdentifierOrLiteral(name);
                     return (ts.isGlobalScopeAugmentation(node) ? "__global" : "\"" + moduleName + "\"");
                 }
-                if (name.kind === 159 /* ComputedPropertyName */) {
+                if (name.kind === 160 /* ComputedPropertyName */) {
                     var nameExpression = name.expression;
                     // treat computed property names where expression is string/numeric literal as just string/numeric literal
                     if (ts.isStringOrNumericLiteralLike(nameExpression)) {
@@ -41715,36 +42697,36 @@
                 return ts.isPropertyNameLiteral(name) ? ts.getEscapedTextOfIdentifierOrLiteral(name) : undefined;
             }
             switch (node.kind) {
-                case 167 /* Constructor */:
+                case 169 /* Constructor */:
                     return "__constructor" /* Constructor */;
-                case 175 /* FunctionType */:
-                case 170 /* CallSignature */:
-                case 315 /* JSDocSignature */:
+                case 177 /* FunctionType */:
+                case 172 /* CallSignature */:
+                case 318 /* JSDocSignature */:
                     return "__call" /* Call */;
-                case 176 /* ConstructorType */:
-                case 171 /* ConstructSignature */:
+                case 178 /* ConstructorType */:
+                case 173 /* ConstructSignature */:
                     return "__new" /* New */;
-                case 172 /* IndexSignature */:
+                case 174 /* IndexSignature */:
                     return "__index" /* Index */;
-                case 268 /* ExportDeclaration */:
+                case 270 /* ExportDeclaration */:
                     return "__export" /* ExportStar */;
-                case 298 /* SourceFile */:
+                case 300 /* SourceFile */:
                     // json file should behave as
                     // module.exports = ...
                     return "export=" /* ExportEquals */;
-                case 217 /* BinaryExpression */:
+                case 219 /* BinaryExpression */:
                     if (ts.getAssignmentDeclarationKind(node) === 2 /* ModuleExports */) {
                         // module.exports = ...
                         return "export=" /* ExportEquals */;
                     }
                     ts.Debug.fail("Unknown binary declaration kind");
                     break;
-                case 309 /* JSDocFunctionType */:
+                case 312 /* JSDocFunctionType */:
                     return (ts.isJSDocConstructSignature(node) ? "__new" /* New */ : "__call" /* Call */);
-                case 161 /* Parameter */:
+                case 162 /* Parameter */:
                     // Parameters with names are handled at the top of this function.  Parameters
                     // without names can only come from JSDocFunctionTypes.
-                    ts.Debug.assert(node.parent.kind === 309 /* JSDocFunctionType */, "Impossible parameter parent kind", function () { return "parent is: " + (ts.SyntaxKind ? ts.SyntaxKind[node.parent.kind] : node.parent.kind) + ", expected JSDocFunctionType"; });
+                    ts.Debug.assert(node.parent.kind === 312 /* JSDocFunctionType */, "Impossible parameter parent kind", function () { return "parent is: " + (ts.SyntaxKind ? ts.SyntaxKind[node.parent.kind] : node.parent.kind) + ", expected JSDocFunctionType"; });
                     var functionType = node.parent;
                     var index = functionType.parameters.indexOf(node);
                     return "arg" + index;
@@ -41761,11 +42743,13 @@
          * @param includes - The SymbolFlags that node has in addition to its declaration type (eg: export, ambient, etc.)
          * @param excludes - The flags which node cannot be declared alongside in a symbol table. Used to report forbidden declarations.
          */
-        function declareSymbol(symbolTable, parent, node, includes, excludes, isReplaceableByMethod) {
-            ts.Debug.assert(!ts.hasDynamicName(node));
+        function declareSymbol(symbolTable, parent, node, includes, excludes, isReplaceableByMethod, isComputedName) {
+            ts.Debug.assert(isComputedName || !ts.hasDynamicName(node));
             var isDefaultExport = ts.hasSyntacticModifier(node, 512 /* Default */) || ts.isExportSpecifier(node) && node.name.escapedText === "default";
             // The exported symbol for an export default function/class node is always named "default"
-            var name = isDefaultExport && parent ? "default" /* Default */ : getDeclarationName(node);
+            var name = isComputedName ? "__computed" /* Computed */
+                : isDefaultExport && parent ? "default" /* Default */
+                    : getDeclarationName(node);
             var symbol;
             if (name === undefined) {
                 symbol = createSymbol(0 /* None */, "__missing" /* Missing */);
@@ -41844,7 +42828,7 @@
                                 // 1. multiple export default of class declaration or function declaration by checking NodeFlags.Default
                                 // 2. multiple export default of export assignment. This one doesn't have NodeFlags.Default on (as export default doesn't considered as modifiers)
                                 if (symbol.declarations && symbol.declarations.length &&
-                                    (node.kind === 267 /* ExportAssignment */ && !node.isExportEquals)) {
+                                    (node.kind === 269 /* ExportAssignment */ && !node.isExportEquals)) {
                                     message_1 = ts.Diagnostics.A_module_cannot_have_multiple_default_exports;
                                     messageNeedsName_1 = false;
                                     multipleDefaultExports_1 = true;
@@ -41866,7 +42850,7 @@
                             }
                         });
                         var diag = createDiagnosticForNode(declarationName_1, message_1, messageNeedsName_1 ? getDisplayName(node) : undefined);
-                        file.bindDiagnostics.push(ts.addRelatedInfo.apply(void 0, __spreadArray([diag], relatedInformation_1)));
+                        file.bindDiagnostics.push(ts.addRelatedInfo.apply(void 0, __spreadArray([diag], relatedInformation_1, false)));
                         symbol = createSymbol(0 /* None */, name);
                     }
                 }
@@ -41883,7 +42867,7 @@
         function declareModuleMember(node, symbolFlags, symbolExcludes) {
             var hasExportModifier = !!(ts.getCombinedModifierFlags(node) & 1 /* Export */) || jsdocTreatAsExported(node);
             if (symbolFlags & 2097152 /* Alias */) {
-                if (node.kind === 271 /* ExportSpecifier */ || (node.kind === 261 /* ImportEqualsDeclaration */ && hasExportModifier)) {
+                if (node.kind === 273 /* ExportSpecifier */ || (node.kind === 263 /* ImportEqualsDeclaration */ && hasExportModifier)) {
                     return declareSymbol(container.symbol.exports, container.symbol, node, symbolFlags, symbolExcludes);
                 }
                 else {
@@ -41972,7 +42956,7 @@
             // for it.  We must clear this so we don't accidentally move any stale data forward from
             // a previous compilation.
             if (containerFlags & 1 /* IsContainer */) {
-                if (node.kind !== 210 /* ArrowFunction */) {
+                if (node.kind !== 212 /* ArrowFunction */) {
                     thisParentContainer = container;
                 }
                 container = blockScopeContainer = node;
@@ -42005,7 +42989,7 @@
                 }
                 // We create a return control flow graph for IIFEs and constructors. For constructors
                 // we use the return control flow graph in strict property initialization checks.
-                currentReturnTarget = isIIFE || node.kind === 167 /* Constructor */ || (ts.isInJSFile(node) && (node.kind === 252 /* FunctionDeclaration */ || node.kind === 209 /* FunctionExpression */)) ? createBranchLabel() : undefined;
+                currentReturnTarget = isIIFE || node.kind === 169 /* Constructor */ || node.kind === 168 /* ClassStaticBlockDeclaration */ || (ts.isInJSFile(node) && (node.kind === 254 /* FunctionDeclaration */ || node.kind === 211 /* FunctionExpression */)) ? createBranchLabel() : undefined;
                 currentExceptionTarget = undefined;
                 currentBreakTarget = undefined;
                 currentContinueTarget = undefined;
@@ -42020,14 +43004,14 @@
                         node.flags |= 512 /* HasExplicitReturn */;
                     node.endFlowNode = currentFlow;
                 }
-                if (node.kind === 298 /* SourceFile */) {
+                if (node.kind === 300 /* SourceFile */) {
                     node.flags |= emitFlags;
                     node.endFlowNode = currentFlow;
                 }
                 if (currentReturnTarget) {
                     addAntecedent(currentReturnTarget, currentFlow);
                     currentFlow = finishFlowLabel(currentReturnTarget);
-                    if (node.kind === 167 /* Constructor */ || (ts.isInJSFile(node) && (node.kind === 252 /* FunctionDeclaration */ || node.kind === 209 /* FunctionExpression */))) {
+                    if (node.kind === 169 /* Constructor */ || node.kind === 168 /* ClassStaticBlockDeclaration */ || (ts.isInJSFile(node) && (node.kind === 254 /* FunctionDeclaration */ || node.kind === 211 /* FunctionExpression */))) {
                         node.returnFlowNode = currentFlow;
                     }
                 }
@@ -42054,8 +43038,8 @@
             blockScopeContainer = savedBlockScopeContainer;
         }
         function bindEachFunctionsFirst(nodes) {
-            bindEach(nodes, function (n) { return n.kind === 252 /* FunctionDeclaration */ ? bind(n) : undefined; });
-            bindEach(nodes, function (n) { return n.kind !== 252 /* FunctionDeclaration */ ? bind(n) : undefined; });
+            bindEach(nodes, function (n) { return n.kind === 254 /* FunctionDeclaration */ ? bind(n) : undefined; });
+            bindEach(nodes, function (n) { return n.kind !== 254 /* FunctionDeclaration */ ? bind(n) : undefined; });
         }
         function bindEach(nodes, bindFunction) {
             if (bindFunction === void 0) { bindFunction = bind; }
@@ -42078,59 +43062,59 @@
                 inAssignmentPattern = saveInAssignmentPattern;
                 return;
             }
-            if (node.kind >= 233 /* FirstStatement */ && node.kind <= 249 /* LastStatement */ && !options.allowUnreachableCode) {
+            if (node.kind >= 235 /* FirstStatement */ && node.kind <= 251 /* LastStatement */ && !options.allowUnreachableCode) {
                 node.flowNode = currentFlow;
             }
             switch (node.kind) {
-                case 237 /* WhileStatement */:
+                case 239 /* WhileStatement */:
                     bindWhileStatement(node);
                     break;
-                case 236 /* DoStatement */:
+                case 238 /* DoStatement */:
                     bindDoStatement(node);
                     break;
-                case 238 /* ForStatement */:
+                case 240 /* ForStatement */:
                     bindForStatement(node);
                     break;
-                case 239 /* ForInStatement */:
-                case 240 /* ForOfStatement */:
+                case 241 /* ForInStatement */:
+                case 242 /* ForOfStatement */:
                     bindForInOrForOfStatement(node);
                     break;
-                case 235 /* IfStatement */:
+                case 237 /* IfStatement */:
                     bindIfStatement(node);
                     break;
-                case 243 /* ReturnStatement */:
-                case 247 /* ThrowStatement */:
+                case 245 /* ReturnStatement */:
+                case 249 /* ThrowStatement */:
                     bindReturnOrThrow(node);
                     break;
-                case 242 /* BreakStatement */:
-                case 241 /* ContinueStatement */:
+                case 244 /* BreakStatement */:
+                case 243 /* ContinueStatement */:
                     bindBreakOrContinueStatement(node);
                     break;
-                case 248 /* TryStatement */:
+                case 250 /* TryStatement */:
                     bindTryStatement(node);
                     break;
-                case 245 /* SwitchStatement */:
+                case 247 /* SwitchStatement */:
                     bindSwitchStatement(node);
                     break;
-                case 259 /* CaseBlock */:
+                case 261 /* CaseBlock */:
                     bindCaseBlock(node);
                     break;
-                case 285 /* CaseClause */:
+                case 287 /* CaseClause */:
                     bindCaseClause(node);
                     break;
-                case 234 /* ExpressionStatement */:
+                case 236 /* ExpressionStatement */:
                     bindExpressionStatement(node);
                     break;
-                case 246 /* LabeledStatement */:
+                case 248 /* LabeledStatement */:
                     bindLabeledStatement(node);
                     break;
-                case 215 /* PrefixUnaryExpression */:
+                case 217 /* PrefixUnaryExpression */:
                     bindPrefixUnaryExpressionFlow(node);
                     break;
-                case 216 /* PostfixUnaryExpression */:
+                case 218 /* PostfixUnaryExpression */:
                     bindPostfixUnaryExpressionFlow(node);
                     break;
-                case 217 /* BinaryExpression */:
+                case 219 /* BinaryExpression */:
                     if (ts.isDestructuringAssignment(node)) {
                         // Carry over whether we are in an assignment pattern to
                         // binary expressions that could actually be an initializer
@@ -42140,47 +43124,47 @@
                     }
                     bindBinaryExpressionFlow(node);
                     break;
-                case 211 /* DeleteExpression */:
+                case 213 /* DeleteExpression */:
                     bindDeleteExpressionFlow(node);
                     break;
-                case 218 /* ConditionalExpression */:
+                case 220 /* ConditionalExpression */:
                     bindConditionalExpressionFlow(node);
                     break;
-                case 250 /* VariableDeclaration */:
+                case 252 /* VariableDeclaration */:
                     bindVariableDeclarationFlow(node);
                     break;
-                case 202 /* PropertyAccessExpression */:
-                case 203 /* ElementAccessExpression */:
+                case 204 /* PropertyAccessExpression */:
+                case 205 /* ElementAccessExpression */:
                     bindAccessExpressionFlow(node);
                     break;
-                case 204 /* CallExpression */:
+                case 206 /* CallExpression */:
                     bindCallExpressionFlow(node);
                     break;
-                case 226 /* NonNullExpression */:
+                case 228 /* NonNullExpression */:
                     bindNonNullExpressionFlow(node);
                     break;
-                case 335 /* JSDocTypedefTag */:
-                case 328 /* JSDocCallbackTag */:
-                case 329 /* JSDocEnumTag */:
+                case 340 /* JSDocTypedefTag */:
+                case 333 /* JSDocCallbackTag */:
+                case 334 /* JSDocEnumTag */:
                     bindJSDocTypeAlias(node);
                     break;
                 // In source files and blocks, bind functions first to match hoisting that occurs at runtime
-                case 298 /* SourceFile */: {
+                case 300 /* SourceFile */: {
                     bindEachFunctionsFirst(node.statements);
                     bind(node.endOfFileToken);
                     break;
                 }
-                case 231 /* Block */:
-                case 258 /* ModuleBlock */:
+                case 233 /* Block */:
+                case 260 /* ModuleBlock */:
                     bindEachFunctionsFirst(node.statements);
                     break;
-                case 199 /* BindingElement */:
+                case 201 /* BindingElement */:
                     bindBindingElementFlow(node);
                     break;
-                case 201 /* ObjectLiteralExpression */:
-                case 200 /* ArrayLiteralExpression */:
-                case 289 /* PropertyAssignment */:
-                case 221 /* SpreadElement */:
+                case 203 /* ObjectLiteralExpression */:
+                case 202 /* ArrayLiteralExpression */:
+                case 291 /* PropertyAssignment */:
+                case 223 /* SpreadElement */:
                     // Carry over whether we are in an assignment pattern of Object and Array literals
                     // as well as their children that are valid assignment targets.
                     inAssignmentPattern = saveInAssignmentPattern;
@@ -42194,22 +43178,22 @@
         }
         function isNarrowingExpression(expr) {
             switch (expr.kind) {
-                case 78 /* Identifier */:
-                case 79 /* PrivateIdentifier */:
-                case 107 /* ThisKeyword */:
-                case 202 /* PropertyAccessExpression */:
-                case 203 /* ElementAccessExpression */:
+                case 79 /* Identifier */:
+                case 80 /* PrivateIdentifier */:
+                case 108 /* ThisKeyword */:
+                case 204 /* PropertyAccessExpression */:
+                case 205 /* ElementAccessExpression */:
                     return containsNarrowableReference(expr);
-                case 204 /* CallExpression */:
+                case 206 /* CallExpression */:
                     return hasNarrowableArgument(expr);
-                case 208 /* ParenthesizedExpression */:
-                case 226 /* NonNullExpression */:
+                case 210 /* ParenthesizedExpression */:
+                case 228 /* NonNullExpression */:
                     return isNarrowingExpression(expr.expression);
-                case 217 /* BinaryExpression */:
+                case 219 /* BinaryExpression */:
                     return isNarrowingBinaryExpression(expr);
-                case 215 /* PrefixUnaryExpression */:
+                case 217 /* PrefixUnaryExpression */:
                     return expr.operator === 53 /* ExclamationToken */ && isNarrowingExpression(expr.operand);
-                case 212 /* TypeOfExpression */:
+                case 214 /* TypeOfExpression */:
                     return isNarrowingExpression(expr.expression);
             }
             return false;
@@ -42233,7 +43217,7 @@
                     }
                 }
             }
-            if (expr.expression.kind === 202 /* PropertyAccessExpression */ &&
+            if (expr.expression.kind === 204 /* PropertyAccessExpression */ &&
                 containsNarrowableReference(expr.expression.expression)) {
                 return true;
             }
@@ -42242,15 +43226,12 @@
         function isNarrowingTypeofOperands(expr1, expr2) {
             return ts.isTypeOfExpression(expr1) && isNarrowableOperand(expr1.expression) && ts.isStringLiteralLike(expr2);
         }
-        function isNarrowableInOperands(left, right) {
-            return ts.isStringLiteralLike(left) && isNarrowingExpression(right);
-        }
         function isNarrowingBinaryExpression(expr) {
             switch (expr.operatorToken.kind) {
-                case 62 /* EqualsToken */:
-                case 74 /* BarBarEqualsToken */:
-                case 75 /* AmpersandAmpersandEqualsToken */:
-                case 76 /* QuestionQuestionEqualsToken */:
+                case 63 /* EqualsToken */:
+                case 75 /* BarBarEqualsToken */:
+                case 76 /* AmpersandAmpersandEqualsToken */:
+                case 77 /* QuestionQuestionEqualsToken */:
                     return containsNarrowableReference(expr.left);
                 case 34 /* EqualsEqualsToken */:
                 case 35 /* ExclamationEqualsToken */:
@@ -42258,10 +43239,10 @@
                 case 37 /* ExclamationEqualsEqualsToken */:
                     return isNarrowableOperand(expr.left) || isNarrowableOperand(expr.right) ||
                         isNarrowingTypeofOperands(expr.right, expr.left) || isNarrowingTypeofOperands(expr.left, expr.right);
-                case 101 /* InstanceOfKeyword */:
+                case 102 /* InstanceOfKeyword */:
                     return isNarrowableOperand(expr.left);
-                case 100 /* InKeyword */:
-                    return isNarrowableInOperands(expr.left, expr.right);
+                case 101 /* InKeyword */:
+                    return isNarrowingExpression(expr.right);
                 case 27 /* CommaToken */:
                     return isNarrowingExpression(expr.right);
             }
@@ -42269,11 +43250,11 @@
         }
         function isNarrowableOperand(expr) {
             switch (expr.kind) {
-                case 208 /* ParenthesizedExpression */:
+                case 210 /* ParenthesizedExpression */:
                     return isNarrowableOperand(expr.expression);
-                case 217 /* BinaryExpression */:
+                case 219 /* BinaryExpression */:
                     switch (expr.operatorToken.kind) {
-                        case 62 /* EqualsToken */:
+                        case 63 /* EqualsToken */:
                             return isNarrowableOperand(expr.left);
                         case 27 /* CommaToken */:
                             return isNarrowableOperand(expr.right);
@@ -42307,8 +43288,8 @@
             if (!expression) {
                 return flags & 32 /* TrueCondition */ ? antecedent : unreachableFlow;
             }
-            if ((expression.kind === 109 /* TrueKeyword */ && flags & 64 /* FalseCondition */ ||
-                expression.kind === 94 /* FalseKeyword */ && flags & 32 /* TrueCondition */) &&
+            if ((expression.kind === 110 /* TrueKeyword */ && flags & 64 /* FalseCondition */ ||
+                expression.kind === 95 /* FalseKeyword */ && flags & 32 /* TrueCondition */) &&
                 !ts.isExpressionOfOptionalChainRoot(expression) && !ts.isNullishCoalesce(expression.parent)) {
                 return unreachableFlow;
             }
@@ -42347,26 +43328,26 @@
         function isStatementCondition(node) {
             var parent = node.parent;
             switch (parent.kind) {
-                case 235 /* IfStatement */:
-                case 237 /* WhileStatement */:
-                case 236 /* DoStatement */:
+                case 237 /* IfStatement */:
+                case 239 /* WhileStatement */:
+                case 238 /* DoStatement */:
                     return parent.expression === node;
-                case 238 /* ForStatement */:
-                case 218 /* ConditionalExpression */:
+                case 240 /* ForStatement */:
+                case 220 /* ConditionalExpression */:
                     return parent.condition === node;
             }
             return false;
         }
         function isLogicalExpression(node) {
             while (true) {
-                if (node.kind === 208 /* ParenthesizedExpression */) {
+                if (node.kind === 210 /* ParenthesizedExpression */) {
                     node = node.expression;
                 }
-                else if (node.kind === 215 /* PrefixUnaryExpression */ && node.operator === 53 /* ExclamationToken */) {
+                else if (node.kind === 217 /* PrefixUnaryExpression */ && node.operator === 53 /* ExclamationToken */) {
                     node = node.operand;
                 }
                 else {
-                    return node.kind === 217 /* BinaryExpression */ && (node.operatorToken.kind === 55 /* AmpersandAmpersandToken */ ||
+                    return node.kind === 219 /* BinaryExpression */ && (node.operatorToken.kind === 55 /* AmpersandAmpersandToken */ ||
                         node.operatorToken.kind === 56 /* BarBarToken */ ||
                         node.operatorToken.kind === 60 /* QuestionQuestionToken */);
                 }
@@ -42413,7 +43394,7 @@
         }
         function setContinueTarget(node, target) {
             var label = activeLabelList;
-            while (label && node.parent.kind === 246 /* LabeledStatement */) {
+            while (label && node.parent.kind === 248 /* LabeledStatement */) {
                 label.continueTarget = target;
                 label = label.next;
                 node = node.parent;
@@ -42464,12 +43445,12 @@
             bind(node.expression);
             addAntecedent(preLoopLabel, currentFlow);
             currentFlow = preLoopLabel;
-            if (node.kind === 240 /* ForOfStatement */) {
+            if (node.kind === 242 /* ForOfStatement */) {
                 bind(node.awaitModifier);
             }
             addAntecedent(postLoopLabel, currentFlow);
             bind(node.initializer);
-            if (node.initializer.kind !== 251 /* VariableDeclarationList */) {
+            if (node.initializer.kind !== 253 /* VariableDeclarationList */) {
                 bindAssignmentTargetFlow(node.initializer);
             }
             bindIterativeStatement(node.statement, postLoopLabel, preLoopLabel);
@@ -42491,7 +43472,7 @@
         }
         function bindReturnOrThrow(node) {
             bind(node.expression);
-            if (node.kind === 243 /* ReturnStatement */) {
+            if (node.kind === 245 /* ReturnStatement */) {
                 hasExplicitReturn = true;
                 if (currentReturnTarget) {
                     addAntecedent(currentReturnTarget, currentFlow);
@@ -42508,7 +43489,7 @@
             return undefined;
         }
         function bindBreakOrContinueFlow(node, breakTarget, continueTarget) {
-            var flowLabel = node.kind === 242 /* BreakStatement */ ? breakTarget : continueTarget;
+            var flowLabel = node.kind === 244 /* BreakStatement */ ? breakTarget : continueTarget;
             if (flowLabel) {
                 addAntecedent(flowLabel, currentFlow);
                 currentFlow = unreachableFlow;
@@ -42613,7 +43594,7 @@
             preSwitchCaseFlow = currentFlow;
             bind(node.caseBlock);
             addAntecedent(postSwitchLabel, currentFlow);
-            var hasDefault = ts.forEach(node.caseBlock.clauses, function (c) { return c.kind === 286 /* DefaultClause */; });
+            var hasDefault = ts.forEach(node.caseBlock.clauses, function (c) { return c.kind === 288 /* DefaultClause */; });
             // We mark a switch statement as possibly exhaustive if it has no default clause and if all
             // case clauses have unreachable end points (e.g. they all return). Note, we no longer need
             // this property in control flow analysis, it's there only for backwards compatibility.
@@ -42661,9 +43642,9 @@
         function maybeBindExpressionFlowIfCall(node) {
             // A top level or LHS of comma expression call expression with a dotted function name and at least one argument
             // is potentially an assertion and is therefore included in the control flow.
-            if (node.kind === 204 /* CallExpression */) {
+            if (node.kind === 206 /* CallExpression */) {
                 var call = node;
-                if (call.expression.kind !== 105 /* SuperKeyword */ && ts.isDottedName(call.expression)) {
+                if (call.expression.kind !== 106 /* SuperKeyword */ && ts.isDottedName(call.expression)) {
                     currentFlow = createFlowCall(currentFlow, call);
                 }
             }
@@ -42687,7 +43668,7 @@
             currentFlow = finishFlowLabel(postStatementLabel);
         }
         function bindDestructuringTargetFlow(node) {
-            if (node.kind === 217 /* BinaryExpression */ && node.operatorToken.kind === 62 /* EqualsToken */) {
+            if (node.kind === 219 /* BinaryExpression */ && node.operatorToken.kind === 63 /* EqualsToken */) {
                 bindAssignmentTargetFlow(node.left);
             }
             else {
@@ -42698,10 +43679,10 @@
             if (isNarrowableReference(node)) {
                 currentFlow = createFlowMutation(16 /* Assignment */, currentFlow, node);
             }
-            else if (node.kind === 200 /* ArrayLiteralExpression */) {
+            else if (node.kind === 202 /* ArrayLiteralExpression */) {
                 for (var _i = 0, _a = node.elements; _i < _a.length; _i++) {
                     var e = _a[_i];
-                    if (e.kind === 221 /* SpreadElement */) {
+                    if (e.kind === 223 /* SpreadElement */) {
                         bindAssignmentTargetFlow(e.expression);
                     }
                     else {
@@ -42709,16 +43690,16 @@
                     }
                 }
             }
-            else if (node.kind === 201 /* ObjectLiteralExpression */) {
+            else if (node.kind === 203 /* ObjectLiteralExpression */) {
                 for (var _b = 0, _c = node.properties; _b < _c.length; _b++) {
                     var p = _c[_b];
-                    if (p.kind === 289 /* PropertyAssignment */) {
+                    if (p.kind === 291 /* PropertyAssignment */) {
                         bindDestructuringTargetFlow(p.initializer);
                     }
-                    else if (p.kind === 290 /* ShorthandPropertyAssignment */) {
+                    else if (p.kind === 292 /* ShorthandPropertyAssignment */) {
                         bindAssignmentTargetFlow(p.name);
                     }
-                    else if (p.kind === 291 /* SpreadAssignment */) {
+                    else if (p.kind === 293 /* SpreadAssignment */) {
                         bindAssignmentTargetFlow(p.expression);
                     }
                 }
@@ -42726,7 +43707,7 @@
         }
         function bindLogicalLikeExpression(node, trueTarget, falseTarget) {
             var preRightLabel = createBranchLabel();
-            if (node.operatorToken.kind === 55 /* AmpersandAmpersandToken */ || node.operatorToken.kind === 75 /* AmpersandAmpersandEqualsToken */) {
+            if (node.operatorToken.kind === 55 /* AmpersandAmpersandToken */ || node.operatorToken.kind === 76 /* AmpersandAmpersandEqualsToken */) {
                 bindCondition(node.left, preRightLabel, falseTarget);
             }
             else {
@@ -42850,7 +43831,7 @@
                     var operator = node.operatorToken.kind;
                     if (ts.isAssignmentOperator(operator) && !ts.isAssignmentTarget(node)) {
                         bindAssignmentTargetFlow(node.left);
-                        if (operator === 62 /* EqualsToken */ && node.left.kind === 203 /* ElementAccessExpression */) {
+                        if (operator === 63 /* EqualsToken */ && node.left.kind === 205 /* ElementAccessExpression */) {
                             var elementAccess = node.left;
                             if (isNarrowableOperand(elementAccess.expression)) {
                                 currentFlow = createFlowMutation(256 /* ArrayMutation */, currentFlow, node);
@@ -42878,7 +43859,7 @@
         }
         function bindDeleteExpressionFlow(node) {
             bindEachChild(node);
-            if (node.expression.kind === 202 /* PropertyAccessExpression */) {
+            if (node.expression.kind === 204 /* PropertyAccessExpression */) {
                 bindAssignmentTargetFlow(node.expression);
             }
         }
@@ -42934,16 +43915,20 @@
             }
         }
         function bindJSDocTypeAlias(node) {
-            ts.setParent(node.tagName, node);
-            if (node.kind !== 329 /* JSDocEnumTag */ && node.fullName) {
+            bind(node.tagName);
+            if (node.kind !== 334 /* JSDocEnumTag */ && node.fullName) {
+                // don't bind the type name yet; that's delayed until delayedBindJSDocTypedefTag
                 ts.setParent(node.fullName, node);
                 ts.setParentRecursive(node.fullName, /*incremental*/ false);
             }
+            if (typeof node.comment !== "string") {
+                bindEach(node.comment);
+            }
         }
         function bindJSDocClassTag(node) {
             bindEachChild(node);
             var host = ts.getHostSignatureFromJSDoc(node);
-            if (host && host.kind !== 166 /* MethodDeclaration */) {
+            if (host && host.kind !== 167 /* MethodDeclaration */) {
                 addDeclarationToSymbol(host.symbol, host, 32 /* Class */);
             }
         }
@@ -42956,15 +43941,15 @@
         }
         function bindOptionalChainRest(node) {
             switch (node.kind) {
-                case 202 /* PropertyAccessExpression */:
+                case 204 /* PropertyAccessExpression */:
                     bind(node.questionDotToken);
                     bind(node.name);
                     break;
-                case 203 /* ElementAccessExpression */:
+                case 205 /* ElementAccessExpression */:
                     bind(node.questionDotToken);
                     bind(node.argumentExpression);
                     break;
-                case 204 /* CallExpression */:
+                case 206 /* CallExpression */:
                     bind(node.questionDotToken);
                     bindEach(node.typeArguments);
                     bindEach(node.arguments);
@@ -43029,19 +44014,19 @@
                 // an immediately invoked function expression (IIFE). Initialize the flowNode property to
                 // the current control flow (which includes evaluation of the IIFE arguments).
                 var expr = ts.skipParentheses(node.expression);
-                if (expr.kind === 209 /* FunctionExpression */ || expr.kind === 210 /* ArrowFunction */) {
+                if (expr.kind === 211 /* FunctionExpression */ || expr.kind === 212 /* ArrowFunction */) {
                     bindEach(node.typeArguments);
                     bindEach(node.arguments);
                     bind(node.expression);
                 }
                 else {
                     bindEachChild(node);
-                    if (node.expression.kind === 105 /* SuperKeyword */) {
+                    if (node.expression.kind === 106 /* SuperKeyword */) {
                         currentFlow = createFlowCall(currentFlow, node);
                     }
                 }
             }
-            if (node.expression.kind === 202 /* PropertyAccessExpression */) {
+            if (node.expression.kind === 204 /* PropertyAccessExpression */) {
                 var propertyAccess = node.expression;
                 if (ts.isIdentifier(propertyAccess.name) && isNarrowableOperand(propertyAccess.expression) && ts.isPushOrUnshiftIdentifier(propertyAccess.name)) {
                     currentFlow = createFlowMutation(256 /* ArrayMutation */, currentFlow, node);
@@ -43050,54 +44035,55 @@
         }
         function getContainerFlags(node) {
             switch (node.kind) {
-                case 222 /* ClassExpression */:
-                case 253 /* ClassDeclaration */:
-                case 256 /* EnumDeclaration */:
-                case 201 /* ObjectLiteralExpression */:
-                case 178 /* TypeLiteral */:
-                case 314 /* JSDocTypeLiteral */:
-                case 282 /* JsxAttributes */:
+                case 224 /* ClassExpression */:
+                case 255 /* ClassDeclaration */:
+                case 258 /* EnumDeclaration */:
+                case 203 /* ObjectLiteralExpression */:
+                case 180 /* TypeLiteral */:
+                case 317 /* JSDocTypeLiteral */:
+                case 284 /* JsxAttributes */:
                     return 1 /* IsContainer */;
-                case 254 /* InterfaceDeclaration */:
+                case 256 /* InterfaceDeclaration */:
                     return 1 /* IsContainer */ | 64 /* IsInterface */;
-                case 257 /* ModuleDeclaration */:
-                case 255 /* TypeAliasDeclaration */:
-                case 191 /* MappedType */:
+                case 259 /* ModuleDeclaration */:
+                case 257 /* TypeAliasDeclaration */:
+                case 193 /* MappedType */:
                     return 1 /* IsContainer */ | 32 /* HasLocals */;
-                case 298 /* SourceFile */:
+                case 300 /* SourceFile */:
                     return 1 /* IsContainer */ | 4 /* IsControlFlowContainer */ | 32 /* HasLocals */;
-                case 166 /* MethodDeclaration */:
+                case 167 /* MethodDeclaration */:
                     if (ts.isObjectLiteralOrClassExpressionMethod(node)) {
                         return 1 /* IsContainer */ | 4 /* IsControlFlowContainer */ | 32 /* HasLocals */ | 8 /* IsFunctionLike */ | 128 /* IsObjectLiteralOrClassExpressionMethod */;
                     }
                 // falls through
-                case 167 /* Constructor */:
-                case 252 /* FunctionDeclaration */:
-                case 165 /* MethodSignature */:
-                case 168 /* GetAccessor */:
-                case 169 /* SetAccessor */:
-                case 170 /* CallSignature */:
-                case 315 /* JSDocSignature */:
-                case 309 /* JSDocFunctionType */:
-                case 175 /* FunctionType */:
-                case 171 /* ConstructSignature */:
-                case 172 /* IndexSignature */:
-                case 176 /* ConstructorType */:
+                case 169 /* Constructor */:
+                case 254 /* FunctionDeclaration */:
+                case 166 /* MethodSignature */:
+                case 170 /* GetAccessor */:
+                case 171 /* SetAccessor */:
+                case 172 /* CallSignature */:
+                case 318 /* JSDocSignature */:
+                case 312 /* JSDocFunctionType */:
+                case 177 /* FunctionType */:
+                case 173 /* ConstructSignature */:
+                case 174 /* IndexSignature */:
+                case 178 /* ConstructorType */:
+                case 168 /* ClassStaticBlockDeclaration */:
                     return 1 /* IsContainer */ | 4 /* IsControlFlowContainer */ | 32 /* HasLocals */ | 8 /* IsFunctionLike */;
-                case 209 /* FunctionExpression */:
-                case 210 /* ArrowFunction */:
+                case 211 /* FunctionExpression */:
+                case 212 /* ArrowFunction */:
                     return 1 /* IsContainer */ | 4 /* IsControlFlowContainer */ | 32 /* HasLocals */ | 8 /* IsFunctionLike */ | 16 /* IsFunctionExpression */;
-                case 258 /* ModuleBlock */:
+                case 260 /* ModuleBlock */:
                     return 4 /* IsControlFlowContainer */;
-                case 164 /* PropertyDeclaration */:
+                case 165 /* PropertyDeclaration */:
                     return node.initializer ? 4 /* IsControlFlowContainer */ : 0;
-                case 288 /* CatchClause */:
-                case 238 /* ForStatement */:
-                case 239 /* ForInStatement */:
-                case 240 /* ForOfStatement */:
-                case 259 /* CaseBlock */:
+                case 290 /* CatchClause */:
+                case 240 /* ForStatement */:
+                case 241 /* ForInStatement */:
+                case 242 /* ForOfStatement */:
+                case 261 /* CaseBlock */:
                     return 2 /* IsBlockScopedContainer */;
-                case 231 /* Block */:
+                case 233 /* Block */:
                     // do not treat blocks directly inside a function as a block-scoped-container.
                     // Locals that reside in this block should go to the function locals. Otherwise 'x'
                     // would not appear to be a redeclaration of a block scoped local in the following
@@ -43114,7 +44100,7 @@
                     // By not creating a new block-scoped-container here, we ensure that both 'var x'
                     // and 'let x' go into the Function-container's locals, and we do get a collision
                     // conflict.
-                    return ts.isFunctionLike(node.parent) ? 0 /* None */ : 2 /* IsBlockScopedContainer */;
+                    return ts.isFunctionLike(node.parent) || ts.isClassStaticBlockDeclaration(node.parent) ? 0 /* None */ : 2 /* IsBlockScopedContainer */;
             }
             return 0 /* None */;
         }
@@ -43130,45 +44116,46 @@
                 // members are declared (for example, a member of a class will go into a specific
                 // symbol table depending on if it is static or not). We defer to specialized
                 // handlers to take care of declaring these child members.
-                case 257 /* ModuleDeclaration */:
+                case 259 /* ModuleDeclaration */:
                     return declareModuleMember(node, symbolFlags, symbolExcludes);
-                case 298 /* SourceFile */:
+                case 300 /* SourceFile */:
                     return declareSourceFileMember(node, symbolFlags, symbolExcludes);
-                case 222 /* ClassExpression */:
-                case 253 /* ClassDeclaration */:
+                case 224 /* ClassExpression */:
+                case 255 /* ClassDeclaration */:
                     return declareClassMember(node, symbolFlags, symbolExcludes);
-                case 256 /* EnumDeclaration */:
+                case 258 /* EnumDeclaration */:
                     return declareSymbol(container.symbol.exports, container.symbol, node, symbolFlags, symbolExcludes);
-                case 178 /* TypeLiteral */:
-                case 314 /* JSDocTypeLiteral */:
-                case 201 /* ObjectLiteralExpression */:
-                case 254 /* InterfaceDeclaration */:
-                case 282 /* JsxAttributes */:
+                case 180 /* TypeLiteral */:
+                case 317 /* JSDocTypeLiteral */:
+                case 203 /* ObjectLiteralExpression */:
+                case 256 /* InterfaceDeclaration */:
+                case 284 /* JsxAttributes */:
                     // Interface/Object-types always have their children added to the 'members' of
                     // their container. They are only accessible through an instance of their
                     // container, and are never in scope otherwise (even inside the body of the
                     // object / type / interface declaring them). An exception is type parameters,
                     // which are in scope without qualification (similar to 'locals').
                     return declareSymbol(container.symbol.members, container.symbol, node, symbolFlags, symbolExcludes);
-                case 175 /* FunctionType */:
-                case 176 /* ConstructorType */:
-                case 170 /* CallSignature */:
-                case 171 /* ConstructSignature */:
-                case 315 /* JSDocSignature */:
-                case 172 /* IndexSignature */:
-                case 166 /* MethodDeclaration */:
-                case 165 /* MethodSignature */:
-                case 167 /* Constructor */:
-                case 168 /* GetAccessor */:
-                case 169 /* SetAccessor */:
-                case 252 /* FunctionDeclaration */:
-                case 209 /* FunctionExpression */:
-                case 210 /* ArrowFunction */:
-                case 309 /* JSDocFunctionType */:
-                case 335 /* JSDocTypedefTag */:
-                case 328 /* JSDocCallbackTag */:
-                case 255 /* TypeAliasDeclaration */:
-                case 191 /* MappedType */:
+                case 177 /* FunctionType */:
+                case 178 /* ConstructorType */:
+                case 172 /* CallSignature */:
+                case 173 /* ConstructSignature */:
+                case 318 /* JSDocSignature */:
+                case 174 /* IndexSignature */:
+                case 167 /* MethodDeclaration */:
+                case 166 /* MethodSignature */:
+                case 169 /* Constructor */:
+                case 170 /* GetAccessor */:
+                case 171 /* SetAccessor */:
+                case 254 /* FunctionDeclaration */:
+                case 211 /* FunctionExpression */:
+                case 212 /* ArrowFunction */:
+                case 312 /* JSDocFunctionType */:
+                case 340 /* JSDocTypedefTag */:
+                case 333 /* JSDocCallbackTag */:
+                case 168 /* ClassStaticBlockDeclaration */:
+                case 257 /* TypeAliasDeclaration */:
+                case 193 /* MappedType */:
                     // All the children of these container types are never visible through another
                     // symbol (i.e. through another symbol's 'exports' or 'members').  Instead,
                     // they're only accessed 'lexically' (i.e. from code that exists underneath
@@ -43179,7 +44166,7 @@
             }
         }
         function declareClassMember(node, symbolFlags, symbolExcludes) {
-            return ts.hasSyntacticModifier(node, 32 /* Static */)
+            return ts.isStatic(node)
                 ? declareSymbol(container.symbol.exports, container.symbol, node, symbolFlags, symbolExcludes)
                 : declareSymbol(container.symbol.members, container.symbol, node, symbolFlags, symbolExcludes);
         }
@@ -43215,15 +44202,13 @@
                     var pattern = void 0;
                     if (node.name.kind === 10 /* StringLiteral */) {
                         var text = node.name.text;
-                        if (ts.hasZeroOrOneAsteriskCharacter(text)) {
-                            pattern = ts.tryParsePattern(text);
-                        }
-                        else {
+                        pattern = ts.tryParsePattern(text);
+                        if (pattern === undefined) {
                             errorOnFirstToken(node.name, ts.Diagnostics.Pattern_0_can_have_at_most_one_Asterisk_character, text);
                         }
                     }
                     var symbol = declareSymbolAndAddToSymbolTable(node, 512 /* ValueModule */, 110735 /* ValueModuleExcludes */);
-                    file.patternAmbientModules = ts.append(file.patternAmbientModules, pattern && { pattern: pattern, symbol: symbol });
+                    file.patternAmbientModules = ts.append(file.patternAmbientModules, pattern && !ts.isString(pattern) ? { pattern: pattern, symbol: symbol } : undefined);
                 }
             }
             else {
@@ -43269,7 +44254,7 @@
                 var seen = new ts.Map();
                 for (var _i = 0, _a = node.properties; _i < _a.length; _i++) {
                     var prop = _a[_i];
-                    if (prop.kind === 291 /* SpreadAssignment */ || prop.name.kind !== 78 /* Identifier */) {
+                    if (prop.kind === 293 /* SpreadAssignment */ || prop.name.kind !== 79 /* Identifier */) {
                         continue;
                     }
                     var identifier = prop.name;
@@ -43281,7 +44266,7 @@
                     //    c.IsAccessorDescriptor(previous) is true and IsDataDescriptor(propId.descriptor) is true.
                     //    d.IsAccessorDescriptor(previous) is true and IsAccessorDescriptor(propId.descriptor) is true
                     // and either both previous and propId.descriptor have[[Get]] fields or both previous and propId.descriptor have[[Set]] fields
-                    var currentKind = prop.kind === 289 /* PropertyAssignment */ || prop.kind === 290 /* ShorthandPropertyAssignment */ || prop.kind === 166 /* MethodDeclaration */
+                    var currentKind = prop.kind === 291 /* PropertyAssignment */ || prop.kind === 292 /* ShorthandPropertyAssignment */ || prop.kind === 167 /* MethodDeclaration */
                         ? 1 /* Property */
                         : 2 /* Accessor */;
                     var existingKind = seen.get(identifier.escapedText);
@@ -43313,10 +44298,10 @@
         }
         function bindBlockScopedDeclaration(node, symbolFlags, symbolExcludes) {
             switch (blockScopeContainer.kind) {
-                case 257 /* ModuleDeclaration */:
+                case 259 /* ModuleDeclaration */:
                     declareModuleMember(node, symbolFlags, symbolExcludes);
                     break;
-                case 298 /* SourceFile */:
+                case 300 /* SourceFile */:
                     if (ts.isExternalOrCommonJsModule(container)) {
                         declareModuleMember(node, symbolFlags, symbolExcludes);
                         break;
@@ -43384,7 +44369,7 @@
                         container = oldContainer;
                     }
                 }
-                else if (ts.isJSDocEnumTag(typeAlias) || !typeAlias.fullName || typeAlias.fullName.kind === 78 /* Identifier */) {
+                else if (ts.isJSDocEnumTag(typeAlias) || !typeAlias.fullName || typeAlias.fullName.kind === 79 /* Identifier */) {
                     parent = typeAlias.parent;
                     bindBlockScopedDeclaration(typeAlias, 524288 /* TypeAlias */, 788968 /* TypeAliasExcludes */);
                 }
@@ -43409,11 +44394,11 @@
                 !ts.isIdentifierName(node)) {
                 // strict mode identifiers
                 if (inStrictMode &&
-                    node.originalKeywordKind >= 116 /* FirstFutureReservedWord */ &&
-                    node.originalKeywordKind <= 124 /* LastFutureReservedWord */) {
+                    node.originalKeywordKind >= 117 /* FirstFutureReservedWord */ &&
+                    node.originalKeywordKind <= 125 /* LastFutureReservedWord */) {
                     file.bindDiagnostics.push(createDiagnosticForNode(node, getStrictModeIdentifierMessage(node), ts.declarationNameToString(node)));
                 }
-                else if (node.originalKeywordKind === 130 /* AwaitKeyword */) {
+                else if (node.originalKeywordKind === 131 /* AwaitKeyword */) {
                     if (ts.isExternalModule(file) && ts.isInTopLevelContext(node)) {
                         file.bindDiagnostics.push(createDiagnosticForNode(node, ts.Diagnostics.Identifier_expected_0_is_a_reserved_word_at_the_top_level_of_a_module, ts.declarationNameToString(node)));
                     }
@@ -43421,7 +44406,7 @@
                         file.bindDiagnostics.push(createDiagnosticForNode(node, ts.Diagnostics.Identifier_expected_0_is_a_reserved_word_that_cannot_be_used_here, ts.declarationNameToString(node)));
                     }
                 }
-                else if (node.originalKeywordKind === 124 /* YieldKeyword */ && node.flags & 8192 /* YieldContext */) {
+                else if (node.originalKeywordKind === 125 /* YieldKeyword */ && node.flags & 8192 /* YieldContext */) {
                     file.bindDiagnostics.push(createDiagnosticForNode(node, ts.Diagnostics.Identifier_expected_0_is_a_reserved_word_that_cannot_be_used_here, ts.declarationNameToString(node)));
                 }
             }
@@ -43463,7 +44448,7 @@
         }
         function checkStrictModeDeleteExpression(node) {
             // Grammar checking
-            if (inStrictMode && node.expression.kind === 78 /* Identifier */) {
+            if (inStrictMode && node.expression.kind === 79 /* Identifier */) {
                 // When a delete operator occurs within strict mode code, a SyntaxError is thrown if its
                 // UnaryExpression is a direct reference to a variable, function argument, or function name
                 var span = ts.getErrorSpanForNode(file, node.expression);
@@ -43474,7 +44459,7 @@
             return ts.isIdentifier(node) && (node.escapedText === "eval" || node.escapedText === "arguments");
         }
         function checkStrictModeEvalOrArguments(contextNode, name) {
-            if (name && name.kind === 78 /* Identifier */) {
+            if (name && name.kind === 79 /* Identifier */) {
                 var identifier = name;
                 if (isEvalOrArgumentsIdentifier(identifier)) {
                     // We check first if the name is inside class declaration or class expression; if so give explicit message
@@ -43488,7 +44473,7 @@
             // Provide specialized messages to help the user understand why we think they're in
             // strict mode.
             if (ts.getContainingClass(node)) {
-                return ts.Diagnostics.Invalid_use_of_0_Class_definitions_are_automatically_in_strict_mode;
+                return ts.Diagnostics.Code_contained_in_a_class_is_evaluated_in_JavaScript_s_strict_mode_which_does_not_allow_this_use_of_0_For_more_information_see_https_Colon_Slash_Slashdeveloper_mozilla_org_Slashen_US_Slashdocs_SlashWeb_SlashJavaScript_SlashReference_SlashStrict_mode;
             }
             if (file.externalModuleIndicator) {
                 return ts.Diagnostics.Invalid_use_of_0_Modules_are_automatically_in_strict_mode;
@@ -43515,9 +44500,9 @@
         function checkStrictModeFunctionDeclaration(node) {
             if (languageVersion < 2 /* ES2015 */) {
                 // Report error if function is not top level function declaration
-                if (blockScopeContainer.kind !== 298 /* SourceFile */ &&
-                    blockScopeContainer.kind !== 257 /* ModuleDeclaration */ &&
-                    !ts.isFunctionLike(blockScopeContainer)) {
+                if (blockScopeContainer.kind !== 300 /* SourceFile */ &&
+                    blockScopeContainer.kind !== 259 /* ModuleDeclaration */ &&
+                    !ts.isFunctionLikeOrClassStaticBlockDeclaration(blockScopeContainer)) {
                     // We check first if the name is inside class declaration or class expression; if so give explicit message
                     // otherwise report generic error message.
                     var errorSpan = ts.getErrorSpanForNode(file, node);
@@ -43611,7 +44596,7 @@
             // the current 'container' node when it changes. This helps us know which symbol table
             // a local should go into for example. Since terminal nodes are known not to have
             // children, as an optimization we don't process those.
-            if (node.kind > 157 /* LastToken */) {
+            if (node.kind > 158 /* LastToken */) {
                 var saveParent = parent;
                 parent = node;
                 var containerFlags = getContainerFlags(node);
@@ -43673,7 +44658,7 @@
         function bindWorker(node) {
             switch (node.kind) {
                 /* Strict mode checks */
-                case 78 /* Identifier */:
+                case 79 /* Identifier */:
                     // for typedef type names with namespaces, bind the new jsdoc type symbol here
                     // because it requires all containing namespaces to be in effect, namely the
                     // current "blockScopeContainer" needs to be set to its immediate namespace parent.
@@ -43686,24 +44671,24 @@
                         break;
                     }
                 // falls through
-                case 107 /* ThisKeyword */:
-                    if (currentFlow && (ts.isExpression(node) || parent.kind === 290 /* ShorthandPropertyAssignment */)) {
+                case 108 /* ThisKeyword */:
+                    if (currentFlow && (ts.isExpression(node) || parent.kind === 292 /* ShorthandPropertyAssignment */)) {
                         node.flowNode = currentFlow;
                     }
                     return checkContextualIdentifier(node);
-                case 158 /* QualifiedName */:
-                    if (currentFlow && parent.kind === 177 /* TypeQuery */) {
+                case 159 /* QualifiedName */:
+                    if (currentFlow && ts.isPartOfTypeQuery(node)) {
                         node.flowNode = currentFlow;
                     }
                     break;
-                case 227 /* MetaProperty */:
-                case 105 /* SuperKeyword */:
+                case 229 /* MetaProperty */:
+                case 106 /* SuperKeyword */:
                     node.flowNode = currentFlow;
                     break;
-                case 79 /* PrivateIdentifier */:
+                case 80 /* PrivateIdentifier */:
                     return checkPrivateIdentifier(node);
-                case 202 /* PropertyAccessExpression */:
-                case 203 /* ElementAccessExpression */:
+                case 204 /* PropertyAccessExpression */:
+                case 205 /* ElementAccessExpression */:
                     var expr = node;
                     if (currentFlow && isNarrowableReference(expr)) {
                         expr.flowNode = currentFlow;
@@ -43718,7 +44703,7 @@
                         declareSymbol(file.locals, /*parent*/ undefined, expr.expression, 1 /* FunctionScopedVariable */ | 134217728 /* ModuleExports */, 111550 /* FunctionScopedVariableExcludes */);
                     }
                     break;
-                case 217 /* BinaryExpression */:
+                case 219 /* BinaryExpression */:
                     var specialKind = ts.getAssignmentDeclarationKind(node);
                     switch (specialKind) {
                         case 1 /* ExportsProperty */:
@@ -43754,78 +44739,78 @@
                             ts.Debug.fail("Unknown binary expression special property assignment kind");
                     }
                     return checkStrictModeBinaryExpression(node);
-                case 288 /* CatchClause */:
+                case 290 /* CatchClause */:
                     return checkStrictModeCatchClause(node);
-                case 211 /* DeleteExpression */:
+                case 213 /* DeleteExpression */:
                     return checkStrictModeDeleteExpression(node);
                 case 8 /* NumericLiteral */:
                     return checkStrictModeNumericLiteral(node);
-                case 216 /* PostfixUnaryExpression */:
+                case 218 /* PostfixUnaryExpression */:
                     return checkStrictModePostfixUnaryExpression(node);
-                case 215 /* PrefixUnaryExpression */:
+                case 217 /* PrefixUnaryExpression */:
                     return checkStrictModePrefixUnaryExpression(node);
-                case 244 /* WithStatement */:
+                case 246 /* WithStatement */:
                     return checkStrictModeWithStatement(node);
-                case 246 /* LabeledStatement */:
+                case 248 /* LabeledStatement */:
                     return checkStrictModeLabeledStatement(node);
-                case 188 /* ThisType */:
+                case 190 /* ThisType */:
                     seenThisKeyword = true;
                     return;
-                case 173 /* TypePredicate */:
+                case 175 /* TypePredicate */:
                     break; // Binding the children will handle everything
-                case 160 /* TypeParameter */:
+                case 161 /* TypeParameter */:
                     return bindTypeParameter(node);
-                case 161 /* Parameter */:
+                case 162 /* Parameter */:
                     return bindParameter(node);
-                case 250 /* VariableDeclaration */:
+                case 252 /* VariableDeclaration */:
                     return bindVariableDeclarationOrBindingElement(node);
-                case 199 /* BindingElement */:
+                case 201 /* BindingElement */:
                     node.flowNode = currentFlow;
                     return bindVariableDeclarationOrBindingElement(node);
-                case 164 /* PropertyDeclaration */:
-                case 163 /* PropertySignature */:
+                case 165 /* PropertyDeclaration */:
+                case 164 /* PropertySignature */:
                     return bindPropertyWorker(node);
-                case 289 /* PropertyAssignment */:
-                case 290 /* ShorthandPropertyAssignment */:
+                case 291 /* PropertyAssignment */:
+                case 292 /* ShorthandPropertyAssignment */:
                     return bindPropertyOrMethodOrAccessor(node, 4 /* Property */, 0 /* PropertyExcludes */);
-                case 292 /* EnumMember */:
+                case 294 /* EnumMember */:
                     return bindPropertyOrMethodOrAccessor(node, 8 /* EnumMember */, 900095 /* EnumMemberExcludes */);
-                case 170 /* CallSignature */:
-                case 171 /* ConstructSignature */:
-                case 172 /* IndexSignature */:
+                case 172 /* CallSignature */:
+                case 173 /* ConstructSignature */:
+                case 174 /* IndexSignature */:
                     return declareSymbolAndAddToSymbolTable(node, 131072 /* Signature */, 0 /* None */);
-                case 166 /* MethodDeclaration */:
-                case 165 /* MethodSignature */:
+                case 167 /* MethodDeclaration */:
+                case 166 /* MethodSignature */:
                     // If this is an ObjectLiteralExpression method, then it sits in the same space
                     // as other properties in the object literal.  So we use SymbolFlags.PropertyExcludes
                     // so that it will conflict with any other object literal members with the same
                     // name.
                     return bindPropertyOrMethodOrAccessor(node, 8192 /* Method */ | (node.questionToken ? 16777216 /* Optional */ : 0 /* None */), ts.isObjectLiteralMethod(node) ? 0 /* PropertyExcludes */ : 103359 /* MethodExcludes */);
-                case 252 /* FunctionDeclaration */:
+                case 254 /* FunctionDeclaration */:
                     return bindFunctionDeclaration(node);
-                case 167 /* Constructor */:
+                case 169 /* Constructor */:
                     return declareSymbolAndAddToSymbolTable(node, 16384 /* Constructor */, /*symbolExcludes:*/ 0 /* None */);
-                case 168 /* GetAccessor */:
+                case 170 /* GetAccessor */:
                     return bindPropertyOrMethodOrAccessor(node, 32768 /* GetAccessor */, 46015 /* GetAccessorExcludes */);
-                case 169 /* SetAccessor */:
+                case 171 /* SetAccessor */:
                     return bindPropertyOrMethodOrAccessor(node, 65536 /* SetAccessor */, 78783 /* SetAccessorExcludes */);
-                case 175 /* FunctionType */:
-                case 309 /* JSDocFunctionType */:
-                case 315 /* JSDocSignature */:
-                case 176 /* ConstructorType */:
+                case 177 /* FunctionType */:
+                case 312 /* JSDocFunctionType */:
+                case 318 /* JSDocSignature */:
+                case 178 /* ConstructorType */:
                     return bindFunctionOrConstructorType(node);
-                case 178 /* TypeLiteral */:
-                case 314 /* JSDocTypeLiteral */:
-                case 191 /* MappedType */:
+                case 180 /* TypeLiteral */:
+                case 317 /* JSDocTypeLiteral */:
+                case 193 /* MappedType */:
                     return bindAnonymousTypeWorker(node);
-                case 322 /* JSDocClassTag */:
+                case 327 /* JSDocClassTag */:
                     return bindJSDocClassTag(node);
-                case 201 /* ObjectLiteralExpression */:
+                case 203 /* ObjectLiteralExpression */:
                     return bindObjectLiteralExpression(node);
-                case 209 /* FunctionExpression */:
-                case 210 /* ArrowFunction */:
+                case 211 /* FunctionExpression */:
+                case 212 /* ArrowFunction */:
                     return bindFunctionExpression(node);
-                case 204 /* CallExpression */:
+                case 206 /* CallExpression */:
                     var assignmentKind = ts.getAssignmentDeclarationKind(node);
                     switch (assignmentKind) {
                         case 7 /* ObjectDefinePropertyValue */:
@@ -43844,65 +44829,65 @@
                     }
                     break;
                 // Members of classes, interfaces, and modules
-                case 222 /* ClassExpression */:
-                case 253 /* ClassDeclaration */:
+                case 224 /* ClassExpression */:
+                case 255 /* ClassDeclaration */:
                     // All classes are automatically in strict mode in ES6.
                     inStrictMode = true;
                     return bindClassLikeDeclaration(node);
-                case 254 /* InterfaceDeclaration */:
+                case 256 /* InterfaceDeclaration */:
                     return bindBlockScopedDeclaration(node, 64 /* Interface */, 788872 /* InterfaceExcludes */);
-                case 255 /* TypeAliasDeclaration */:
+                case 257 /* TypeAliasDeclaration */:
                     return bindBlockScopedDeclaration(node, 524288 /* TypeAlias */, 788968 /* TypeAliasExcludes */);
-                case 256 /* EnumDeclaration */:
+                case 258 /* EnumDeclaration */:
                     return bindEnumDeclaration(node);
-                case 257 /* ModuleDeclaration */:
+                case 259 /* ModuleDeclaration */:
                     return bindModuleDeclaration(node);
                 // Jsx-attributes
-                case 282 /* JsxAttributes */:
+                case 284 /* JsxAttributes */:
                     return bindJsxAttributes(node);
-                case 281 /* JsxAttribute */:
+                case 283 /* JsxAttribute */:
                     return bindJsxAttribute(node, 4 /* Property */, 0 /* PropertyExcludes */);
                 // Imports and exports
-                case 261 /* ImportEqualsDeclaration */:
-                case 264 /* NamespaceImport */:
-                case 266 /* ImportSpecifier */:
-                case 271 /* ExportSpecifier */:
+                case 263 /* ImportEqualsDeclaration */:
+                case 266 /* NamespaceImport */:
+                case 268 /* ImportSpecifier */:
+                case 273 /* ExportSpecifier */:
                     return declareSymbolAndAddToSymbolTable(node, 2097152 /* Alias */, 2097152 /* AliasExcludes */);
-                case 260 /* NamespaceExportDeclaration */:
+                case 262 /* NamespaceExportDeclaration */:
                     return bindNamespaceExportDeclaration(node);
-                case 263 /* ImportClause */:
+                case 265 /* ImportClause */:
                     return bindImportClause(node);
-                case 268 /* ExportDeclaration */:
+                case 270 /* ExportDeclaration */:
                     return bindExportDeclaration(node);
-                case 267 /* ExportAssignment */:
+                case 269 /* ExportAssignment */:
                     return bindExportAssignment(node);
-                case 298 /* SourceFile */:
+                case 300 /* SourceFile */:
                     updateStrictModeStatementList(node.statements);
                     return bindSourceFileIfExternalModule();
-                case 231 /* Block */:
-                    if (!ts.isFunctionLike(node.parent)) {
+                case 233 /* Block */:
+                    if (!ts.isFunctionLikeOrClassStaticBlockDeclaration(node.parent)) {
                         return;
                     }
                 // falls through
-                case 258 /* ModuleBlock */:
+                case 260 /* ModuleBlock */:
                     return updateStrictModeStatementList(node.statements);
-                case 330 /* JSDocParameterTag */:
-                    if (node.parent.kind === 315 /* JSDocSignature */) {
+                case 335 /* JSDocParameterTag */:
+                    if (node.parent.kind === 318 /* JSDocSignature */) {
                         return bindParameter(node);
                     }
-                    if (node.parent.kind !== 314 /* JSDocTypeLiteral */) {
+                    if (node.parent.kind !== 317 /* JSDocTypeLiteral */) {
                         break;
                     }
                 // falls through
-                case 337 /* JSDocPropertyTag */:
+                case 342 /* JSDocPropertyTag */:
                     var propTag = node;
-                    var flags = propTag.isBracketed || propTag.typeExpression && propTag.typeExpression.type.kind === 308 /* JSDocOptionalType */ ?
+                    var flags = propTag.isBracketed || propTag.typeExpression && propTag.typeExpression.type.kind === 311 /* JSDocOptionalType */ ?
                         4 /* Property */ | 16777216 /* Optional */ :
                         4 /* Property */;
                     return declareSymbolAndAddToSymbolTable(propTag, flags, 0 /* PropertyExcludes */);
-                case 335 /* JSDocTypedefTag */:
-                case 328 /* JSDocCallbackTag */:
-                case 329 /* JSDocEnumTag */:
+                case 340 /* JSDocTypedefTag */:
+                case 333 /* JSDocCallbackTag */:
+                case 334 /* JSDocEnumTag */:
                     return (delayedTypeAliases || (delayedTypeAliases = [])).push(node);
             }
         }
@@ -44065,11 +45050,11 @@
             }
             var thisContainer = ts.getThisContainer(node, /*includeArrowFunctions*/ false);
             switch (thisContainer.kind) {
-                case 252 /* FunctionDeclaration */:
-                case 209 /* FunctionExpression */:
+                case 254 /* FunctionDeclaration */:
+                case 211 /* FunctionExpression */:
                     var constructorSymbol = thisContainer.symbol;
                     // For `f.prototype.m = function() { this.x = 0; }`, `this.x = 0` should modify `f`'s members, not the function expression.
-                    if (ts.isBinaryExpression(thisContainer.parent) && thisContainer.parent.operatorToken.kind === 62 /* EqualsToken */) {
+                    if (ts.isBinaryExpression(thisContainer.parent) && thisContainer.parent.operatorToken.kind === 63 /* EqualsToken */) {
                         var l = thisContainer.parent.left;
                         if (ts.isBindableStaticAccessExpression(l) && ts.isPrototypeAccess(l.expression)) {
                             constructorSymbol = lookupSymbolForPropertyAccess(l.expression.expression, thisParentContainer);
@@ -44080,7 +45065,7 @@
                         constructorSymbol.members = constructorSymbol.members || ts.createSymbolTable();
                         // It's acceptable for multiple 'this' assignments of the same identifier to occur
                         if (ts.hasDynamicName(node)) {
-                            bindDynamicallyNamedThisPropertyAssignment(node, constructorSymbol);
+                            bindDynamicallyNamedThisPropertyAssignment(node, constructorSymbol, constructorSymbol.members);
                         }
                         else {
                             declareSymbol(constructorSymbol.members, constructorSymbol, node, 4 /* Property */ | 67108864 /* Assignment */, 0 /* PropertyExcludes */ & ~4 /* Property */);
@@ -44088,23 +45073,23 @@
                         addDeclarationToSymbol(constructorSymbol, constructorSymbol.valueDeclaration, 32 /* Class */);
                     }
                     break;
-                case 167 /* Constructor */:
-                case 164 /* PropertyDeclaration */:
-                case 166 /* MethodDeclaration */:
-                case 168 /* GetAccessor */:
-                case 169 /* SetAccessor */:
+                case 169 /* Constructor */:
+                case 165 /* PropertyDeclaration */:
+                case 167 /* MethodDeclaration */:
+                case 170 /* GetAccessor */:
+                case 171 /* SetAccessor */:
                     // this.foo assignment in a JavaScript class
                     // Bind this property to the containing class
                     var containingClass = thisContainer.parent;
-                    var symbolTable = ts.hasSyntacticModifier(thisContainer, 32 /* Static */) ? containingClass.symbol.exports : containingClass.symbol.members;
+                    var symbolTable = ts.isStatic(thisContainer) ? containingClass.symbol.exports : containingClass.symbol.members;
                     if (ts.hasDynamicName(node)) {
-                        bindDynamicallyNamedThisPropertyAssignment(node, containingClass.symbol);
+                        bindDynamicallyNamedThisPropertyAssignment(node, containingClass.symbol, symbolTable);
                     }
                     else {
                         declareSymbol(symbolTable, containingClass.symbol, node, 4 /* Property */ | 67108864 /* Assignment */, 0 /* None */, /*isReplaceableByMethod*/ true);
                     }
                     break;
-                case 298 /* SourceFile */:
+                case 300 /* SourceFile */:
                     // this.property = assignment in a source file -- declare symbol in exports for a module, in locals for a script
                     if (ts.hasDynamicName(node)) {
                         break;
@@ -44120,8 +45105,8 @@
                     ts.Debug.failBadSyntaxKind(thisContainer);
             }
         }
-        function bindDynamicallyNamedThisPropertyAssignment(node, symbol) {
-            bindAnonymousDeclaration(node, 4 /* Property */, "__computed" /* Computed */);
+        function bindDynamicallyNamedThisPropertyAssignment(node, symbol, symbolTable) {
+            declareSymbol(symbolTable, symbol, node, 4 /* Property */, 0 /* None */, /*isReplaceableByMethod*/ true, /*isComputedName*/ true);
             addLateBoundAssignmentDeclarationToSymbol(node, symbol);
         }
         function addLateBoundAssignmentDeclarationToSymbol(node, symbol) {
@@ -44130,10 +45115,10 @@
             }
         }
         function bindSpecialPropertyDeclaration(node) {
-            if (node.expression.kind === 107 /* ThisKeyword */) {
+            if (node.expression.kind === 108 /* ThisKeyword */) {
                 bindThisPropertyAssignment(node);
             }
-            else if (ts.isBindableStaticAccessExpression(node) && node.parent.parent.kind === 298 /* SourceFile */) {
+            else if (ts.isBindableStaticAccessExpression(node) && node.parent.parent.kind === 300 /* SourceFile */) {
                 if (ts.isPrototypeAccess(node.expression)) {
                     bindPrototypePropertyAssignment(node, node.parent);
                 }
@@ -44173,7 +45158,7 @@
         }
         function bindObjectDefinePropertyAssignment(node) {
             var namespaceSymbol = lookupSymbolForPropertyAccess(node.arguments[0]);
-            var isToplevel = node.parent.parent.kind === 298 /* SourceFile */;
+            var isToplevel = node.parent.parent.kind === 300 /* SourceFile */;
             namespaceSymbol = bindPotentiallyMissingNamespaces(namespaceSymbol, node.arguments[0], isToplevel, /*isPrototypeProperty*/ false, /*containerIsClass*/ false);
             bindPotentiallyNewExpandoMemberToNamespace(node, namespaceSymbol, /*isPrototypeProperty*/ false);
         }
@@ -44282,8 +45267,8 @@
         }
         function isTopLevelNamespaceAssignment(propertyAccess) {
             return ts.isBinaryExpression(propertyAccess.parent)
-                ? getParentOfBinaryExpression(propertyAccess.parent).parent.kind === 298 /* SourceFile */
-                : propertyAccess.parent.parent.kind === 298 /* SourceFile */;
+                ? getParentOfBinaryExpression(propertyAccess.parent).parent.kind === 300 /* SourceFile */
+                : propertyAccess.parent.parent.kind === 300 /* SourceFile */;
         }
         function bindPropertyAssignment(name, propertyAccess, isPrototypeProperty, containerIsClass) {
             var namespaceSymbol = lookupSymbolForPropertyAccess(name, container) || lookupSymbolForPropertyAccess(name, blockScopeContainer);
@@ -44362,7 +45347,7 @@
             }
         }
         function bindClassLikeDeclaration(node) {
-            if (node.kind === 253 /* ClassDeclaration */) {
+            if (node.kind === 255 /* ClassDeclaration */) {
                 bindBlockScopedDeclaration(node, 32 /* Class */, 899503 /* ClassExcludes */);
             }
             else {
@@ -44428,7 +45413,7 @@
             }
         }
         function bindParameter(node) {
-            if (node.kind === 330 /* JSDocParameterTag */ && container.kind !== 315 /* JSDocSignature */) {
+            if (node.kind === 335 /* JSDocParameterTag */ && container.kind !== 318 /* JSDocSignature */) {
                 return;
             }
             if (inStrictMode && !(node.flags & 8388608 /* Ambient */)) {
@@ -44505,7 +45490,7 @@
                     declareSymbolAndAddToSymbolTable(node, 262144 /* TypeParameter */, 526824 /* TypeParameterExcludes */);
                 }
             }
-            else if (node.parent.kind === 186 /* InferType */) {
+            else if (node.parent.kind === 188 /* InferType */) {
                 var container_2 = getInferTypeContainer(node.parent);
                 if (container_2) {
                     if (!container_2.locals) {
@@ -44533,11 +45518,11 @@
             if (currentFlow === unreachableFlow) {
                 var reportError = 
                 // report error on all statements except empty ones
-                (ts.isStatementButNotDeclaration(node) && node.kind !== 232 /* EmptyStatement */) ||
+                (ts.isStatementButNotDeclaration(node) && node.kind !== 234 /* EmptyStatement */) ||
                     // report error on class declarations
-                    node.kind === 253 /* ClassDeclaration */ ||
+                    node.kind === 255 /* ClassDeclaration */ ||
                     // report error on instantiated modules or const-enums only modules if preserveConstEnums is set
-                    (node.kind === 257 /* ModuleDeclaration */ && shouldReportErrorOnModuleDeclaration(node));
+                    (node.kind === 259 /* ModuleDeclaration */ && shouldReportErrorOnModuleDeclaration(node));
                 if (reportError) {
                     currentFlow = reportedUnreachableFlow;
                     if (!options.allowUnreachableCode) {
@@ -44581,12 +45566,12 @@
     }
     function isPurelyTypeDeclaration(s) {
         switch (s.kind) {
-            case 254 /* InterfaceDeclaration */:
-            case 255 /* TypeAliasDeclaration */:
+            case 256 /* InterfaceDeclaration */:
+            case 257 /* TypeAliasDeclaration */:
                 return true;
-            case 257 /* ModuleDeclaration */:
+            case 259 /* ModuleDeclaration */:
                 return getModuleInstanceState(s) !== 1 /* Instantiated */;
-            case 256 /* EnumDeclaration */:
+            case 258 /* EnumDeclaration */:
                 return ts.hasSyntacticModifier(s, 2048 /* Const */);
             default:
                 return false;
@@ -44630,7 +45615,7 @@
 /** @internal */
 var ts;
 (function (ts) {
-    function createGetSymbolWalker(getRestTypeOfSignature, getTypePredicateOfSignature, getReturnTypeOfSignature, getBaseTypes, resolveStructuredTypeMembers, getTypeOfSymbol, getResolvedSymbol, getIndexTypeOfStructuredType, getConstraintOfTypeParameter, getFirstIdentifier, getTypeArguments) {
+    function createGetSymbolWalker(getRestTypeOfSignature, getTypePredicateOfSignature, getReturnTypeOfSignature, getBaseTypes, resolveStructuredTypeMembers, getTypeOfSymbol, getResolvedSymbol, getConstraintOfTypeParameter, getFirstIdentifier, getTypeArguments) {
         return getSymbolWalker;
         function getSymbolWalker(accept) {
             if (accept === void 0) { accept = function () { return true; }; }
@@ -44745,22 +45730,22 @@
                 visitType(interfaceT.thisType);
             }
             function visitObjectType(type) {
-                var stringIndexType = getIndexTypeOfStructuredType(type, 0 /* String */);
-                visitType(stringIndexType);
-                var numberIndexType = getIndexTypeOfStructuredType(type, 1 /* Number */);
-                visitType(numberIndexType);
-                // The two checks above *should* have already resolved the type (if needed), so this should be cached
                 var resolved = resolveStructuredTypeMembers(type);
-                for (var _i = 0, _a = resolved.callSignatures; _i < _a.length; _i++) {
-                    var signature = _a[_i];
-                    visitSignature(signature);
+                for (var _i = 0, _a = resolved.indexInfos; _i < _a.length; _i++) {
+                    var info = _a[_i];
+                    visitType(info.keyType);
+                    visitType(info.type);
                 }
-                for (var _b = 0, _c = resolved.constructSignatures; _b < _c.length; _b++) {
+                for (var _b = 0, _c = resolved.callSignatures; _b < _c.length; _b++) {
                     var signature = _c[_b];
                     visitSignature(signature);
                 }
-                for (var _d = 0, _e = resolved.properties; _d < _e.length; _d++) {
-                    var p = _e[_d];
+                for (var _d = 0, _e = resolved.constructSignatures; _d < _e.length; _d++) {
+                    var signature = _e[_d];
+                    visitSignature(signature);
+                }
+                for (var _f = 0, _g = resolved.properties; _f < _g.length; _f++) {
+                    var p = _g[_f];
                     visitSymbol(p);
                 }
             }
@@ -44786,7 +45771,7 @@
                     //  (their type resolved directly to the member deeply referenced)
                     // So to get the intervening symbols, we need to check if there's a type
                     // query node on any of the symbol's declarations and get symbols there
-                    if (d.type && d.type.kind === 177 /* TypeQuery */) {
+                    if (d.type && d.type.kind === 179 /* TypeQuery */) {
                         var query = d.type;
                         var entity = getResolvedSymbol(getFirstIdentifier(query.exprName));
                         visitSymbol(entity);
@@ -44956,15 +45941,6 @@
         CheckMode[CheckMode["SkipGenericFunctions"] = 8] = "SkipGenericFunctions";
         CheckMode[CheckMode["IsForSignatureHelp"] = 16] = "IsForSignatureHelp";
     })(CheckMode || (CheckMode = {}));
-    var AccessFlags;
-    (function (AccessFlags) {
-        AccessFlags[AccessFlags["None"] = 0] = "None";
-        AccessFlags[AccessFlags["NoIndexSignatures"] = 1] = "NoIndexSignatures";
-        AccessFlags[AccessFlags["Writing"] = 2] = "Writing";
-        AccessFlags[AccessFlags["CacheSymbol"] = 4] = "CacheSymbol";
-        AccessFlags[AccessFlags["NoTupleBoundsCheck"] = 8] = "NoTupleBoundsCheck";
-        AccessFlags[AccessFlags["ExpressionPosition"] = 16] = "ExpressionPosition";
-    })(AccessFlags || (AccessFlags = {}));
     var SignatureCheckMode;
     (function (SignatureCheckMode) {
         SignatureCheckMode[SignatureCheckMode["BivariantCallback"] = 1] = "BivariantCallback";
@@ -45118,8 +46094,10 @@
         var strictPropertyInitialization = ts.getStrictOptionValue(compilerOptions, "strictPropertyInitialization");
         var noImplicitAny = ts.getStrictOptionValue(compilerOptions, "noImplicitAny");
         var noImplicitThis = ts.getStrictOptionValue(compilerOptions, "noImplicitThis");
+        var useUnknownInCatchVariables = ts.getStrictOptionValue(compilerOptions, "useUnknownInCatchVariables");
         var keyofStringsOnly = !!compilerOptions.keyofStringsOnly;
         var freshObjectLiteralFlag = compilerOptions.suppressExcessPropertyErrors ? 0 : 16384 /* FreshLiteral */;
+        var exactOptionalPropertyTypes = compilerOptions.exactOptionalPropertyTypes;
         var checkBinaryExpression = createCheckBinaryExpression();
         var emitResolver = createResolver();
         var nodeBuilder = createNodeBuilder();
@@ -45158,6 +46136,7 @@
             getDiagnostics: getDiagnostics,
             getGlobalDiagnostics: getGlobalDiagnostics,
             getRecursionIdentity: getRecursionIdentity,
+            getUnmatchedProperties: getUnmatchedProperties,
             getTypeOfSymbolAtLocation: function (symbol, locationIn) {
                 var location = ts.getParseTreeNode(locationIn);
                 return location ? getTypeOfSymbolAtLocation(symbol, location) : errorType;
@@ -45181,9 +46160,10 @@
                 return lexicallyScopedIdentifier ? getPrivateIdentifierPropertyOfType(leftType, lexicallyScopedIdentifier) : undefined;
             },
             getTypeOfPropertyOfType: function (type, name) { return getTypeOfPropertyOfType(type, ts.escapeLeadingUnderscores(name)); },
-            getIndexInfoOfType: getIndexInfoOfType,
+            getIndexInfoOfType: function (type, kind) { return getIndexInfoOfType(type, kind === 0 /* String */ ? stringType : numberType); },
+            getIndexInfosOfType: getIndexInfosOfType,
             getSignaturesOfType: getSignaturesOfType,
-            getIndexTypeOfType: getIndexTypeOfType,
+            getIndexTypeOfType: function (type, kind) { return getIndexTypeOfType(type, kind === 0 /* String */ ? stringType : numberType); },
             getBaseTypes: getBaseTypes,
             getBaseTypeOfLiteralType: getBaseTypeOfLiteralType,
             getWidenedType: getWidenedType,
@@ -45192,6 +46172,7 @@
                 return node ? getTypeFromTypeNode(node) : errorType;
             },
             getParameterType: getTypeAtPosition,
+            getParameterIdentifierNameAtPosition: getParameterIdentifierNameAtPosition,
             getPromisedTypeOfPromise: getPromisedTypeOfPromise,
             getAwaitedType: function (type) { return getAwaitedType(type); },
             getReturnTypeOfSignature: getReturnTypeOfSignature,
@@ -45217,6 +46198,10 @@
                 // set ignoreErrors: true because any lookups invoked by the API shouldn't cause any new errors
                 return node ? getSymbolAtLocation(node, /*ignoreErrors*/ true) : undefined;
             },
+            getIndexInfosAtLocation: function (nodeIn) {
+                var node = ts.getParseTreeNode(nodeIn);
+                return node ? getIndexInfosAtLocation(node) : undefined;
+            },
             getShorthandAssignmentValueSymbol: function (nodeIn) {
                 var node = ts.getParseTreeNode(nodeIn);
                 return node ? getShorthandAssignmentValueSymbol(node) : undefined;
@@ -45316,6 +46301,7 @@
             },
             getExpandedParameters: getExpandedParameters,
             hasEffectiveRestParameter: hasEffectiveRestParameter,
+            containsArgumentsReference: containsArgumentsReference,
             getConstantValue: function (nodeIn) {
                 var node = ts.getParseTreeNode(nodeIn, canHaveConstantValue);
                 return node ? getConstantValue(node) : undefined;
@@ -45341,7 +46327,8 @@
             getEmitResolver: getEmitResolver,
             getExportsOfModule: getExportsOfModuleAsArray,
             getExportsAndPropertiesOfModule: getExportsAndPropertiesOfModule,
-            getSymbolWalker: ts.createGetSymbolWalker(getRestTypeOfSignature, getTypePredicateOfSignature, getReturnTypeOfSignature, getBaseTypes, resolveStructuredTypeMembers, getTypeOfSymbol, getResolvedSymbol, getIndexTypeOfStructuredType, getConstraintOfTypeParameter, ts.getFirstIdentifier, getTypeArguments),
+            forEachExportAndPropertyOfModule: forEachExportAndPropertyOfModule,
+            getSymbolWalker: ts.createGetSymbolWalker(getRestTypeOfSignature, getTypePredicateOfSignature, getReturnTypeOfSignature, getBaseTypes, resolveStructuredTypeMembers, getTypeOfSymbol, getResolvedSymbol, getConstraintOfTypeParameter, ts.getFirstIdentifier, getTypeArguments),
             getAmbientModules: getAmbientModules,
             getJsxIntrinsicTagNamesAt: getJsxIntrinsicTagNamesAt,
             isOptionalParameter: function (nodeIn) {
@@ -45391,6 +46378,7 @@
             getSuggestionForNonexistentSymbol: function (location, name, meaning) { return getSuggestionForNonexistentSymbol(location, ts.escapeLeadingUnderscores(name), meaning); },
             getSuggestedSymbolForNonexistentModule: getSuggestedSymbolForNonexistentModule,
             getSuggestionForNonexistentExport: getSuggestionForNonexistentExport,
+            getSuggestedSymbolForNonexistentClassMember: getSuggestedSymbolForNonexistentClassMember,
             getBaseConstraintOfType: getBaseConstraintOfType,
             getDefaultFromTypeParameter: function (type) { return type && type.flags & 262144 /* TypeParameter */ ? getDefaultFromTypeParameter(type) : undefined; },
             resolveName: function (name, location, meaning, excludeGlobals) {
@@ -45464,7 +46452,10 @@
         var tupleTypes = new ts.Map();
         var unionTypes = new ts.Map();
         var intersectionTypes = new ts.Map();
-        var literalTypes = new ts.Map();
+        var stringLiteralTypes = new ts.Map();
+        var numberLiteralTypes = new ts.Map();
+        var bigIntLiteralTypes = new ts.Map();
+        var enumLiteralTypes = new ts.Map();
         var indexedAccessTypes = new ts.Map();
         var templateLiteralTypes = new ts.Map();
         var stringMappingTypes = new ts.Map();
@@ -45484,6 +46475,7 @@
         var undefinedType = createIntrinsicType(32768 /* Undefined */, "undefined");
         var undefinedWideningType = strictNullChecks ? undefinedType : createIntrinsicType(32768 /* Undefined */, "undefined", 131072 /* ContainsWideningType */);
         var optionalType = createIntrinsicType(32768 /* Undefined */, "undefined");
+        var missingType = exactOptionalPropertyTypes ? createIntrinsicType(32768 /* Undefined */, "undefined") : undefinedType;
         var nullType = createIntrinsicType(65536 /* Null */, "null");
         var nullWideningType = strictNullChecks ? nullType : createIntrinsicType(65536 /* Null */, "null", 131072 /* ContainsWideningType */);
         var stringType = createIntrinsicType(4 /* String */, "string");
@@ -45501,12 +46493,7 @@
         falseType.freshType = falseType;
         regularFalseType.regularType = regularFalseType;
         regularFalseType.freshType = falseType;
-        var booleanType = createBooleanType([regularFalseType, regularTrueType]);
-        // Also mark all combinations of fresh/regular booleans as "Boolean" so they print as `boolean` instead of `true | false`
-        // (The union is cached, so simply doing the marking here is sufficient)
-        createBooleanType([regularFalseType, trueType]);
-        createBooleanType([falseType, regularTrueType]);
-        createBooleanType([falseType, trueType]);
+        var booleanType = getUnionType([regularFalseType, regularTrueType]);
         var esSymbolType = createIntrinsicType(4096 /* ESSymbol */, "symbol");
         var voidType = createIntrinsicType(16384 /* Void */, "void");
         var neverType = createIntrinsicType(131072 /* Never */, "never");
@@ -45515,27 +46502,28 @@
         var implicitNeverType = createIntrinsicType(131072 /* Never */, "never");
         var unreachableNeverType = createIntrinsicType(131072 /* Never */, "never");
         var nonPrimitiveType = createIntrinsicType(67108864 /* NonPrimitive */, "object");
+        var stringOrNumberType = getUnionType([stringType, numberType]);
         var stringNumberSymbolType = getUnionType([stringType, numberType, esSymbolType]);
         var keyofConstraintType = keyofStringsOnly ? stringType : stringNumberSymbolType;
         var numberOrBigIntType = getUnionType([numberType, bigintType]);
         var templateConstraintType = getUnionType([stringType, numberType, booleanType, bigintType, nullType, undefinedType]);
         var restrictiveMapper = makeFunctionTypeMapper(function (t) { return t.flags & 262144 /* TypeParameter */ ? getRestrictiveTypeParameter(t) : t; });
         var permissiveMapper = makeFunctionTypeMapper(function (t) { return t.flags & 262144 /* TypeParameter */ ? wildcardType : t; });
-        var emptyObjectType = createAnonymousType(undefined, emptySymbols, ts.emptyArray, ts.emptyArray, undefined, undefined);
-        var emptyJsxObjectType = createAnonymousType(undefined, emptySymbols, ts.emptyArray, ts.emptyArray, undefined, undefined);
+        var emptyObjectType = createAnonymousType(undefined, emptySymbols, ts.emptyArray, ts.emptyArray, ts.emptyArray);
+        var emptyJsxObjectType = createAnonymousType(undefined, emptySymbols, ts.emptyArray, ts.emptyArray, ts.emptyArray);
         emptyJsxObjectType.objectFlags |= 2048 /* JsxAttributes */;
         var emptyTypeLiteralSymbol = createSymbol(2048 /* TypeLiteral */, "__type" /* Type */);
         emptyTypeLiteralSymbol.members = ts.createSymbolTable();
-        var emptyTypeLiteralType = createAnonymousType(emptyTypeLiteralSymbol, emptySymbols, ts.emptyArray, ts.emptyArray, undefined, undefined);
-        var emptyGenericType = createAnonymousType(undefined, emptySymbols, ts.emptyArray, ts.emptyArray, undefined, undefined);
+        var emptyTypeLiteralType = createAnonymousType(emptyTypeLiteralSymbol, emptySymbols, ts.emptyArray, ts.emptyArray, ts.emptyArray);
+        var emptyGenericType = createAnonymousType(undefined, emptySymbols, ts.emptyArray, ts.emptyArray, ts.emptyArray);
         emptyGenericType.instantiations = new ts.Map();
-        var anyFunctionType = createAnonymousType(undefined, emptySymbols, ts.emptyArray, ts.emptyArray, undefined, undefined);
+        var anyFunctionType = createAnonymousType(undefined, emptySymbols, ts.emptyArray, ts.emptyArray, ts.emptyArray);
         // The anyFunctionType contains the anyFunctionType by definition. The flag is further propagated
         // in getPropagatingFlagsOfTypes, and it is checked in inferFromTypes.
         anyFunctionType.objectFlags |= 524288 /* NonInferrableType */;
-        var noConstraintType = createAnonymousType(undefined, emptySymbols, ts.emptyArray, ts.emptyArray, undefined, undefined);
-        var circularConstraintType = createAnonymousType(undefined, emptySymbols, ts.emptyArray, ts.emptyArray, undefined, undefined);
-        var resolvingDefaultType = createAnonymousType(undefined, emptySymbols, ts.emptyArray, ts.emptyArray, undefined, undefined);
+        var noConstraintType = createAnonymousType(undefined, emptySymbols, ts.emptyArray, ts.emptyArray, ts.emptyArray);
+        var circularConstraintType = createAnonymousType(undefined, emptySymbols, ts.emptyArray, ts.emptyArray, ts.emptyArray);
+        var resolvingDefaultType = createAnonymousType(undefined, emptySymbols, ts.emptyArray, ts.emptyArray, ts.emptyArray);
         var markerSuperType = createTypeParameter();
         var markerSubType = createTypeParameter();
         markerSubType.constraint = markerSuperType;
@@ -45545,7 +46533,7 @@
         var unknownSignature = createSignature(undefined, undefined, undefined, ts.emptyArray, errorType, /*resolvedTypePredicate*/ undefined, 0, 0 /* None */);
         var resolvingSignature = createSignature(undefined, undefined, undefined, ts.emptyArray, anyType, /*resolvedTypePredicate*/ undefined, 0, 0 /* None */);
         var silentNeverSignature = createSignature(undefined, undefined, undefined, ts.emptyArray, silentNeverType, /*resolvedTypePredicate*/ undefined, 0, 0 /* None */);
-        var enumNumberIndexInfo = createIndexInfo(stringType, /*isReadonly*/ true);
+        var enumNumberIndexInfo = createIndexInfo(numberType, stringType, /*isReadonly*/ true);
         var iterationTypesCache = new ts.Map(); // cache for common IterationTypes instances
         var noIterationTypes = {
             get yieldType() { return ts.Debug.fail("Not supported"); },
@@ -45631,6 +46619,7 @@
         var deferredGlobalAsyncGeneratorType;
         var deferredGlobalTemplateStringsArrayType;
         var deferredGlobalImportMetaType;
+        var deferredGlobalImportMetaExpressionType;
         var deferredGlobalExtractSymbol;
         var deferredGlobalOmitSymbol;
         var deferredGlobalBigIntType;
@@ -45643,9 +46632,9 @@
         var lastFlowNode;
         var lastFlowNodeReachable;
         var flowTypeCache;
-        var emptyStringType = getLiteralType("");
-        var zeroType = getLiteralType(0);
-        var zeroBigIntType = getLiteralType({ negative: false, base10Value: "0" });
+        var emptyStringType = getStringLiteralType("");
+        var zeroType = getNumberLiteralType(0);
+        var zeroBigIntType = getBigIntLiteralType({ negative: false, base10Value: "0" });
         var resolutionTargets = [];
         var resolutionResults = [];
         var resolutionPropertyNames = [];
@@ -45665,6 +46654,7 @@
         var potentialThisCollisions = [];
         var potentialNewTargetCollisions = [];
         var potentialWeakMapSetCollisions = [];
+        var potentialReflectCollisions = [];
         var awaitedTypeStack = [];
         var diagnostics = ts.createDiagnosticCollection();
         var suggestionDiagnostics = ts.createDiagnosticCollection();
@@ -45775,10 +46765,13 @@
             diagnostic.skippedOn = key;
             return diagnostic;
         }
-        function error(location, message, arg0, arg1, arg2, arg3) {
-            var diagnostic = location
+        function createError(location, message, arg0, arg1, arg2, arg3) {
+            return location
                 ? ts.createDiagnosticForNode(location, message, arg0, arg1, arg2, arg3)
                 : ts.createCompilerDiagnostic(message, arg0, arg1, arg2, arg3);
+        }
+        function error(location, message, arg0, arg1, arg2, arg3) {
+            var diagnostic = createError(location, message, arg0, arg1, arg2, arg3);
             diagnostics.add(diagnostic);
             return diagnostic;
         }
@@ -45832,7 +46825,7 @@
         }
         function createSymbol(flags, name, checkFlags) {
             symbolCount++;
-            var symbol = (new Symbol(flags | 33554432 /* Transient */, name));
+            var symbol = new Symbol(flags | 33554432 /* Transient */, name);
             symbol.checkFlags = checkFlags || 0;
             return symbol;
         }
@@ -46111,7 +47104,7 @@
             return nodeLinks[nodeId] || (nodeLinks[nodeId] = new NodeLinks());
         }
         function isGlobalSourceFile(node) {
-            return node.kind === 298 /* SourceFile */ && !ts.isExternalOrCommonJsModule(node);
+            return node.kind === 300 /* SourceFile */ && !ts.isExternalOrCommonJsModule(node);
         }
         function getSymbol(symbols, name, meaning) {
             if (meaning) {
@@ -46170,17 +47163,17 @@
             }
             if (declaration.pos <= usage.pos && !(ts.isPropertyDeclaration(declaration) && ts.isThisProperty(usage.parent) && !declaration.initializer && !declaration.exclamationToken)) {
                 // declaration is before usage
-                if (declaration.kind === 199 /* BindingElement */) {
+                if (declaration.kind === 201 /* BindingElement */) {
                     // still might be illegal if declaration and usage are both binding elements (eg var [a = b, b = b] = [1, 2])
-                    var errorBindingElement = ts.getAncestor(usage, 199 /* BindingElement */);
+                    var errorBindingElement = ts.getAncestor(usage, 201 /* BindingElement */);
                     if (errorBindingElement) {
                         return ts.findAncestor(errorBindingElement, ts.isBindingElement) !== ts.findAncestor(declaration, ts.isBindingElement) ||
                             declaration.pos < errorBindingElement.pos;
                     }
                     // or it might be illegal if usage happens before parent variable is declared (eg var [a] = a)
-                    return isBlockScopedNameDeclaredBeforeUse(ts.getAncestor(declaration, 250 /* VariableDeclaration */), usage);
+                    return isBlockScopedNameDeclaredBeforeUse(ts.getAncestor(declaration, 252 /* VariableDeclaration */), usage);
                 }
-                else if (declaration.kind === 250 /* VariableDeclaration */) {
+                else if (declaration.kind === 252 /* VariableDeclaration */) {
                     // still might be illegal if usage is in the initializer of the variable declaration (eg var a = a)
                     return !isImmediatelyUsedInInitializerOfBlockScopedVariable(declaration, usage);
                 }
@@ -46210,12 +47203,12 @@
             // or if usage is in a type context:
             // 1. inside a type query (typeof in type position)
             // 2. inside a jsdoc comment
-            if (usage.parent.kind === 271 /* ExportSpecifier */ || (usage.parent.kind === 267 /* ExportAssignment */ && usage.parent.isExportEquals)) {
+            if (usage.parent.kind === 273 /* ExportSpecifier */ || (usage.parent.kind === 269 /* ExportAssignment */ && usage.parent.isExportEquals)) {
                 // export specifiers do not use the variable, they only make it available for use
                 return true;
             }
             // When resolving symbols for exports, the `usage` location passed in can be the export site directly
-            if (usage.kind === 267 /* ExportAssignment */ && usage.isExportEquals) {
+            if (usage.kind === 269 /* ExportAssignment */ && usage.isExportEquals) {
                 return true;
             }
             if (!!(usage.flags & 4194304 /* JSDoc */) || isInTypeQuery(usage) || usageInTypeDeclaration()) {
@@ -46237,9 +47230,9 @@
             }
             function isImmediatelyUsedInInitializerOfBlockScopedVariable(declaration, usage) {
                 switch (declaration.parent.parent.kind) {
-                    case 233 /* VariableStatement */:
-                    case 238 /* ForStatement */:
-                    case 240 /* ForOfStatement */:
+                    case 235 /* VariableStatement */:
+                    case 240 /* ForStatement */:
+                    case 242 /* ForOfStatement */:
                         // variable statement/for/for-of statement case,
                         // use site should not be inside variable declaration (initializer of declaration or binding element)
                         if (isSameScopeDescendentOf(usage, declaration, declContainer)) {
@@ -46259,19 +47252,33 @@
                     if (ts.isFunctionLike(current)) {
                         return true;
                     }
-                    var initializerOfProperty = current.parent &&
-                        current.parent.kind === 164 /* PropertyDeclaration */ &&
-                        current.parent.initializer === current;
-                    if (initializerOfProperty) {
-                        if (ts.hasSyntacticModifier(current.parent, 32 /* Static */)) {
-                            if (declaration.kind === 166 /* MethodDeclaration */) {
-                                return true;
+                    if (ts.isClassStaticBlockDeclaration(current)) {
+                        return declaration.pos < usage.pos;
+                    }
+                    var propertyDeclaration = ts.tryCast(current.parent, ts.isPropertyDeclaration);
+                    if (propertyDeclaration) {
+                        var initializerOfProperty = propertyDeclaration.initializer === current;
+                        if (initializerOfProperty) {
+                            if (ts.isStatic(current.parent)) {
+                                if (declaration.kind === 167 /* MethodDeclaration */) {
+                                    return true;
+                                }
+                                if (ts.isPropertyDeclaration(declaration) && ts.getContainingClass(usage) === ts.getContainingClass(declaration)) {
+                                    var propName = declaration.name;
+                                    if (ts.isIdentifier(propName) || ts.isPrivateIdentifier(propName)) {
+                                        var type = getTypeOfSymbol(getSymbolOfNode(declaration));
+                                        var staticBlocks = ts.filter(declaration.parent.members, ts.isClassStaticBlockDeclaration);
+                                        if (isPropertyInitializedInStaticBlocks(propName, type, staticBlocks, declaration.parent.pos, current.pos)) {
+                                            return true;
+                                        }
+                                    }
+                                }
                             }
-                        }
-                        else {
-                            var isDeclarationInstanceProperty = declaration.kind === 164 /* PropertyDeclaration */ && !ts.hasSyntacticModifier(declaration, 32 /* Static */);
-                            if (!isDeclarationInstanceProperty || ts.getContainingClass(usage) !== ts.getContainingClass(declaration)) {
-                                return true;
+                            else {
+                                var isDeclarationInstanceProperty = declaration.kind === 165 /* PropertyDeclaration */ && !ts.isStatic(declaration);
+                                if (!isDeclarationInstanceProperty || ts.getContainingClass(usage) !== ts.getContainingClass(declaration)) {
+                                    return true;
+                                }
                             }
                         }
                     }
@@ -46291,19 +47298,19 @@
                         return "quit";
                     }
                     switch (node.kind) {
-                        case 210 /* ArrowFunction */:
+                        case 212 /* ArrowFunction */:
                             return true;
-                        case 164 /* PropertyDeclaration */:
+                        case 165 /* PropertyDeclaration */:
                             // even when stopping at any property declaration, they need to come from the same class
                             return stopAtAnyPropertyDeclaration &&
                                 (ts.isPropertyDeclaration(declaration) && node.parent === declaration.parent
                                     || ts.isParameterPropertyDeclaration(declaration, declaration.parent) && node.parent === declaration.parent.parent)
                                 ? "quit" : true;
-                        case 231 /* Block */:
+                        case 233 /* Block */:
                             switch (node.parent.kind) {
-                                case 168 /* GetAccessor */:
-                                case 166 /* MethodDeclaration */:
-                                case 169 /* SetAccessor */:
+                                case 170 /* GetAccessor */:
+                                case 167 /* MethodDeclaration */:
+                                case 171 /* SetAccessor */:
                                     return true;
                                 default:
                                     return false;
@@ -46343,18 +47350,18 @@
             }
             function requiresScopeChangeWorker(node) {
                 switch (node.kind) {
-                    case 210 /* ArrowFunction */:
-                    case 209 /* FunctionExpression */:
-                    case 252 /* FunctionDeclaration */:
-                    case 167 /* Constructor */:
+                    case 212 /* ArrowFunction */:
+                    case 211 /* FunctionExpression */:
+                    case 254 /* FunctionDeclaration */:
+                    case 169 /* Constructor */:
                         // do not descend into these
                         return false;
-                    case 166 /* MethodDeclaration */:
-                    case 168 /* GetAccessor */:
-                    case 169 /* SetAccessor */:
-                    case 289 /* PropertyAssignment */:
+                    case 167 /* MethodDeclaration */:
+                    case 170 /* GetAccessor */:
+                    case 171 /* SetAccessor */:
+                    case 291 /* PropertyAssignment */:
                         return requiresScopeChangeWorker(node.name);
-                    case 164 /* PropertyDeclaration */:
+                    case 165 /* PropertyDeclaration */:
                         // static properties in classes introduce temporary variables
                         if (ts.hasStaticModifier(node)) {
                             return target < 99 /* ESNext */ || !useDefineForClassFields;
@@ -46381,11 +47388,11 @@
          *
          * @param isUse If true, this will count towards --noUnusedLocals / --noUnusedParameters.
          */
-        function resolveName(location, name, meaning, nameNotFoundMessage, nameArg, isUse, excludeGlobals, suggestedNameNotFoundMessage) {
+        function resolveName(location, name, meaning, nameNotFoundMessage, nameArg, isUse, excludeGlobals, issueSuggestions) {
             if (excludeGlobals === void 0) { excludeGlobals = false; }
-            return resolveNameHelper(location, name, meaning, nameNotFoundMessage, nameArg, isUse, excludeGlobals, getSymbol, suggestedNameNotFoundMessage);
+            return resolveNameHelper(location, name, meaning, nameNotFoundMessage, nameArg, isUse, excludeGlobals, getSymbol, issueSuggestions);
         }
-        function resolveNameHelper(location, name, meaning, nameNotFoundMessage, nameArg, isUse, excludeGlobals, lookup, suggestedNameNotFoundMessage) {
+        function resolveNameHelper(location, name, meaning, nameNotFoundMessage, nameArg, isUse, excludeGlobals, lookup, issueSuggestions) {
             var _a;
             var originalLocation = location; // needed for did-you-mean error reporting, which gathers candidates starting from the original location
             var result;
@@ -46409,12 +47416,12 @@
                             // - parameters are only in the scope of function body
                             // This restriction does not apply to JSDoc comment types because they are parented
                             // at a higher level than type parameters would normally be
-                            if (meaning & result.flags & 788968 /* Type */ && lastLocation.kind !== 312 /* JSDocComment */) {
+                            if (meaning & result.flags & 788968 /* Type */ && lastLocation.kind !== 315 /* JSDocComment */) {
                                 useResult = result.flags & 262144 /* TypeParameter */
                                     // type parameters are visible in parameter list, return type and type parameter list
                                     ? lastLocation === location.type ||
-                                        lastLocation.kind === 161 /* Parameter */ ||
-                                        lastLocation.kind === 160 /* TypeParameter */
+                                        lastLocation.kind === 162 /* Parameter */ ||
+                                        lastLocation.kind === 161 /* TypeParameter */
                                     // local types not visible outside the function body
                                     : false;
                             }
@@ -46429,13 +47436,13 @@
                                     // however it is detected separately when checking initializers of parameters
                                     // to make sure that they reference no variables declared after them.
                                     useResult =
-                                        lastLocation.kind === 161 /* Parameter */ ||
+                                        lastLocation.kind === 162 /* Parameter */ ||
                                             (lastLocation === location.type &&
                                                 !!ts.findAncestor(result.valueDeclaration, ts.isParameter));
                                 }
                             }
                         }
-                        else if (location.kind === 185 /* ConditionalType */) {
+                        else if (location.kind === 187 /* ConditionalType */) {
                             // A type parameter declared using 'infer T' in a conditional type is visible only in
                             // the true branch of the conditional type.
                             useResult = lastLocation === location.trueType;
@@ -46450,14 +47457,14 @@
                 }
                 withinDeferredContext = withinDeferredContext || getIsDeferredContext(location, lastLocation);
                 switch (location.kind) {
-                    case 298 /* SourceFile */:
+                    case 300 /* SourceFile */:
                         if (!ts.isExternalOrCommonJsModule(location))
                             break;
                         isInExternalModule = true;
                     // falls through
-                    case 257 /* ModuleDeclaration */:
+                    case 259 /* ModuleDeclaration */:
                         var moduleExports = getSymbolOfNode(location).exports || emptySymbols;
-                        if (location.kind === 298 /* SourceFile */ || (ts.isModuleDeclaration(location) && location.flags & 8388608 /* Ambient */ && !ts.isGlobalScopeAugmentation(location))) {
+                        if (location.kind === 300 /* SourceFile */ || (ts.isModuleDeclaration(location) && location.flags & 8388608 /* Ambient */ && !ts.isGlobalScopeAugmentation(location))) {
                             // It's an external module. First see if the module has an export default and if the local
                             // name of that export default matches.
                             if (result = moduleExports.get("default" /* Default */)) {
@@ -46481,7 +47488,7 @@
                             var moduleExport = moduleExports.get(name);
                             if (moduleExport &&
                                 moduleExport.flags === 2097152 /* Alias */ &&
-                                (ts.getDeclarationOfKind(moduleExport, 271 /* ExportSpecifier */) || ts.getDeclarationOfKind(moduleExport, 270 /* NamespaceExport */))) {
+                                (ts.getDeclarationOfKind(moduleExport, 273 /* ExportSpecifier */) || ts.getDeclarationOfKind(moduleExport, 272 /* NamespaceExport */))) {
                                 break;
                             }
                         }
@@ -46495,19 +47502,19 @@
                             }
                         }
                         break;
-                    case 256 /* EnumDeclaration */:
+                    case 258 /* EnumDeclaration */:
                         if (result = lookup(getSymbolOfNode(location).exports, name, meaning & 8 /* EnumMember */)) {
                             break loop;
                         }
                         break;
-                    case 164 /* PropertyDeclaration */:
+                    case 165 /* PropertyDeclaration */:
                         // TypeScript 1.0 spec (April 2014): 8.4.1
                         // Initializer expressions for instance member variables are evaluated in the scope
                         // of the class constructor body but are not permitted to reference parameters or
                         // local variables of the constructor. This effectively means that entities from outer scopes
                         // by the same name as a constructor parameter or local variable are inaccessible
                         // in initializer expressions for instance member variables.
-                        if (!ts.hasSyntacticModifier(location, 32 /* Static */)) {
+                        if (!ts.isStatic(location)) {
                             var ctor = findConstructorDeclaration(location.parent);
                             if (ctor && ctor.locals) {
                                 if (lookup(ctor.locals, name, meaning & 111551 /* Value */)) {
@@ -46517,9 +47524,9 @@
                             }
                         }
                         break;
-                    case 253 /* ClassDeclaration */:
-                    case 222 /* ClassExpression */:
-                    case 254 /* InterfaceDeclaration */:
+                    case 255 /* ClassDeclaration */:
+                    case 224 /* ClassExpression */:
+                    case 256 /* InterfaceDeclaration */:
                         // The below is used to lookup type parameters within a class or interface, as they are added to the class/interface locals
                         // These can never be latebound, so the symbol's raw members are sufficient. `getMembersOfNode` cannot be used, as it would
                         // trigger resolving late-bound names, which we may already be in the process of doing while we're here!
@@ -46529,7 +47536,7 @@
                                 result = undefined;
                                 break;
                             }
-                            if (lastLocation && ts.hasSyntacticModifier(lastLocation, 32 /* Static */)) {
+                            if (lastLocation && ts.isStatic(lastLocation)) {
                                 // TypeScript 1.0 spec (April 2014): 3.4.1
                                 // The scope of a type parameter extends over the entire declaration with which the type
                                 // parameter list is associated, with the exception of static member declarations in classes.
@@ -46538,7 +47545,7 @@
                             }
                             break loop;
                         }
-                        if (location.kind === 222 /* ClassExpression */ && meaning & 32 /* Class */) {
+                        if (location.kind === 224 /* ClassExpression */ && meaning & 32 /* Class */) {
                             var className = location.name;
                             if (className && name === className.escapedText) {
                                 result = location.symbol;
@@ -46546,9 +47553,9 @@
                             }
                         }
                         break;
-                    case 224 /* ExpressionWithTypeArguments */:
+                    case 226 /* ExpressionWithTypeArguments */:
                         // The type parameters of a class are not in scope in the base class expression.
-                        if (lastLocation === location.expression && location.parent.token === 93 /* ExtendsKeyword */) {
+                        if (lastLocation === location.expression && location.parent.token === 94 /* ExtendsKeyword */) {
                             var container = location.parent.parent;
                             if (ts.isClassLike(container) && (result = lookup(getSymbolOfNode(container).members, name, meaning & 788968 /* Type */))) {
                                 if (nameNotFoundMessage) {
@@ -46566,9 +47573,9 @@
                     //       [foo<T>()]() { } // <-- Reference to T from class's own computed property
                     //   }
                     //
-                    case 159 /* ComputedPropertyName */:
+                    case 160 /* ComputedPropertyName */:
                         grandparent = location.parent.parent;
-                        if (ts.isClassLike(grandparent) || grandparent.kind === 254 /* InterfaceDeclaration */) {
+                        if (ts.isClassLike(grandparent) || grandparent.kind === 256 /* InterfaceDeclaration */) {
                             // A reference to this grandparent's type parameters would be an error
                             if (result = lookup(getSymbolOfNode(grandparent).members, name, meaning & 788968 /* Type */)) {
                                 error(errorLocation, ts.Diagnostics.A_computed_property_name_cannot_reference_a_type_parameter_from_its_containing_type);
@@ -46576,24 +47583,24 @@
                             }
                         }
                         break;
-                    case 210 /* ArrowFunction */:
+                    case 212 /* ArrowFunction */:
                         // when targeting ES6 or higher there is no 'arguments' in an arrow function
                         // for lower compile targets the resolved symbol is used to emit an error
                         if (compilerOptions.target >= 2 /* ES2015 */) {
                             break;
                         }
                     // falls through
-                    case 166 /* MethodDeclaration */:
-                    case 167 /* Constructor */:
-                    case 168 /* GetAccessor */:
-                    case 169 /* SetAccessor */:
-                    case 252 /* FunctionDeclaration */:
+                    case 167 /* MethodDeclaration */:
+                    case 169 /* Constructor */:
+                    case 170 /* GetAccessor */:
+                    case 171 /* SetAccessor */:
+                    case 254 /* FunctionDeclaration */:
                         if (meaning & 3 /* Variable */ && name === "arguments") {
                             result = argumentsSymbol;
                             break loop;
                         }
                         break;
-                    case 209 /* FunctionExpression */:
+                    case 211 /* FunctionExpression */:
                         if (meaning & 3 /* Variable */ && name === "arguments") {
                             result = argumentsSymbol;
                             break loop;
@@ -46606,7 +47613,7 @@
                             }
                         }
                         break;
-                    case 162 /* Decorator */:
+                    case 163 /* Decorator */:
                         // Decorators are resolved at the class declaration. Resolving at the parameter
                         // or member would result in looking up locals in the method.
                         //
@@ -46615,7 +47622,7 @@
                         //       method(@y x, y) {} // <-- decorator y should be resolved at the class declaration, not the parameter.
                         //   }
                         //
-                        if (location.parent && location.parent.kind === 161 /* Parameter */) {
+                        if (location.parent && location.parent.kind === 162 /* Parameter */) {
                             location = location.parent;
                         }
                         //
@@ -46630,20 +47637,20 @@
                         //   declare function y(x: T): any;
                         //   @param(1 as T) // <-- T should resolve to the type alias outside of class C
                         //   class C<T> {}
-                        if (location.parent && (ts.isClassElement(location.parent) || location.parent.kind === 253 /* ClassDeclaration */)) {
+                        if (location.parent && (ts.isClassElement(location.parent) || location.parent.kind === 255 /* ClassDeclaration */)) {
                             location = location.parent;
                         }
                         break;
-                    case 335 /* JSDocTypedefTag */:
-                    case 328 /* JSDocCallbackTag */:
-                    case 329 /* JSDocEnumTag */:
+                    case 340 /* JSDocTypedefTag */:
+                    case 333 /* JSDocCallbackTag */:
+                    case 334 /* JSDocEnumTag */:
                         // js type aliases do not resolve names from their host, so skip past it
                         var root = ts.getJSDocRoot(location);
                         if (root) {
                             location = root.parent;
                         }
                         break;
-                    case 161 /* Parameter */:
+                    case 162 /* Parameter */:
                         if (lastLocation && (lastLocation === location.initializer ||
                             lastLocation === location.name && ts.isBindingPattern(lastLocation))) {
                             if (!associatedDeclarationForContainingInitializerOrBindingName) {
@@ -46651,7 +47658,7 @@
                             }
                         }
                         break;
-                    case 199 /* BindingElement */:
+                    case 201 /* BindingElement */:
                         if (lastLocation && (lastLocation === location.initializer ||
                             lastLocation === location.name && ts.isBindingPattern(lastLocation))) {
                             if (ts.isParameterDeclaration(location) && !associatedDeclarationForContainingInitializerOrBindingName) {
@@ -46659,7 +47666,7 @@
                             }
                         }
                         break;
-                    case 186 /* InferType */:
+                    case 188 /* InferType */:
                         if (meaning & 262144 /* TypeParameter */) {
                             var parameterName = location.typeParameter.name;
                             if (parameterName && name === parameterName.escapedText) {
@@ -46683,7 +47690,7 @@
             }
             if (!result) {
                 if (lastLocation) {
-                    ts.Debug.assert(lastLocation.kind === 298 /* SourceFile */);
+                    ts.Debug.assert(lastLocation.kind === 300 /* SourceFile */);
                     if (lastLocation.commonJsModuleIndicator && name === "exports" && meaning & lastLocation.symbol.flags) {
                         return lastLocation.symbol;
                     }
@@ -46710,15 +47717,18 @@
                             !checkAndReportErrorForUsingNamespaceModuleAsValue(errorLocation, name, meaning) &&
                             !checkAndReportErrorForUsingValueAsType(errorLocation, name, meaning)) {
                         var suggestion = void 0;
-                        if (suggestedNameNotFoundMessage && suggestionCount < maximumSuggestionCount) {
+                        if (issueSuggestions && suggestionCount < maximumSuggestionCount) {
                             suggestion = getSuggestedSymbolForNonexistentSymbol(originalLocation, name, meaning);
-                            var isGlobalScopeAugmentationDeclaration = suggestion && suggestion.valueDeclaration && ts.isAmbientModule(suggestion.valueDeclaration) && ts.isGlobalScopeAugmentation(suggestion.valueDeclaration);
+                            var isGlobalScopeAugmentationDeclaration = (suggestion === null || suggestion === void 0 ? void 0 : suggestion.valueDeclaration) && ts.isAmbientModule(suggestion.valueDeclaration) && ts.isGlobalScopeAugmentation(suggestion.valueDeclaration);
                             if (isGlobalScopeAugmentationDeclaration) {
                                 suggestion = undefined;
                             }
                             if (suggestion) {
                                 var suggestionName = symbolToString(suggestion);
-                                var diagnostic = error(errorLocation, suggestedNameNotFoundMessage, diagnosticName(nameArg), suggestionName);
+                                var isUncheckedJS = isUncheckedJSSuggestion(originalLocation, suggestion, /*excludeClasses*/ false);
+                                var message = isUncheckedJS ? ts.Diagnostics.Could_not_find_name_0_Did_you_mean_1 : ts.Diagnostics.Cannot_find_name_0_Did_you_mean_1;
+                                var diagnostic = createError(errorLocation, message, diagnosticName(nameArg), suggestionName);
+                                addErrorOrSuggestion(!isUncheckedJS, diagnostic);
                                 if (suggestion.valueDeclaration) {
                                     ts.addRelatedInfo(diagnostic, ts.createDiagnosticForNode(suggestion.valueDeclaration, ts.Diagnostics._0_is_declared_here, suggestionName));
                                 }
@@ -46812,10 +47822,10 @@
             }
         }
         function getIsDeferredContext(location, lastLocation) {
-            if (location.kind !== 210 /* ArrowFunction */ && location.kind !== 209 /* FunctionExpression */) {
+            if (location.kind !== 212 /* ArrowFunction */ && location.kind !== 211 /* FunctionExpression */) {
                 // initializers in instance property declaration of class like entities are executed in constructor and thus deferred
                 return ts.isTypeQueryNode(location) || ((ts.isFunctionLikeDeclaration(location) ||
-                    (location.kind === 164 /* PropertyDeclaration */ && !ts.hasSyntacticModifier(location, 32 /* Static */))) && (!lastLocation || lastLocation !== location.name)); // A name is evaluated within the enclosing scope - so it shouldn't count as deferred
+                    (location.kind === 165 /* PropertyDeclaration */ && !ts.isStatic(location))) && (!lastLocation || lastLocation !== location.name)); // A name is evaluated within the enclosing scope - so it shouldn't count as deferred
             }
             if (lastLocation && lastLocation === location.name) {
                 return false;
@@ -46828,12 +47838,12 @@
         }
         function isSelfReferenceLocation(node) {
             switch (node.kind) {
-                case 252 /* FunctionDeclaration */:
-                case 253 /* ClassDeclaration */:
-                case 254 /* InterfaceDeclaration */:
-                case 256 /* EnumDeclaration */:
-                case 255 /* TypeAliasDeclaration */:
-                case 257 /* ModuleDeclaration */: // For `namespace N { N; }`
+                case 254 /* FunctionDeclaration */:
+                case 255 /* ClassDeclaration */:
+                case 256 /* InterfaceDeclaration */:
+                case 258 /* EnumDeclaration */:
+                case 257 /* TypeAliasDeclaration */:
+                case 259 /* ModuleDeclaration */: // For `namespace N { N; }`
                     return true;
                 default:
                     return false;
@@ -46846,7 +47856,7 @@
             if (symbol.declarations) {
                 for (var _i = 0, _a = symbol.declarations; _i < _a.length; _i++) {
                     var decl = _a[_i];
-                    if (decl.kind === 160 /* TypeParameter */) {
+                    if (decl.kind === 161 /* TypeParameter */) {
                         var parent = ts.isJSDocTemplateTag(decl.parent) ? ts.getJSDocHost(decl.parent) : decl.parent;
                         if (parent === container) {
                             return !(ts.isJSDocTemplateTag(decl.parent) && ts.find(decl.parent.parent.tags, ts.isJSDocTypeAlias)); // TODO: GH#18217
@@ -46876,7 +47886,7 @@
                     }
                     // No static member is present.
                     // Check if we're in an instance method and look for a relevant instance member.
-                    if (location === container && !ts.hasSyntacticModifier(location, 32 /* Static */)) {
+                    if (location === container && !ts.isStatic(location)) {
                         var instanceType = getDeclaredTypeOfSymbol(classSymbol).thisType; // TODO: GH#18217
                         if (getPropertyOfType(instanceType, name)) {
                             error(errorLocation, ts.Diagnostics.Cannot_find_name_0_Did_you_mean_the_instance_member_this_0, diagnosticName(nameArg));
@@ -46902,10 +47912,10 @@
          */
         function getEntityNameForExtendingInterface(node) {
             switch (node.kind) {
-                case 78 /* Identifier */:
-                case 202 /* PropertyAccessExpression */:
+                case 79 /* Identifier */:
+                case 204 /* PropertyAccessExpression */:
                     return node.parent ? getEntityNameForExtendingInterface(node.parent) : undefined;
-                case 224 /* ExpressionWithTypeArguments */:
+                case 226 /* ExpressionWithTypeArguments */:
                     if (ts.isEntityNameExpression(node.expression)) {
                         return node.expression;
                     }
@@ -46949,7 +47959,7 @@
             return name === "any" || name === "string" || name === "number" || name === "boolean" || name === "never" || name === "unknown";
         }
         function checkAndReportErrorForExportingPrimitiveType(errorLocation, name) {
-            if (isPrimitiveTypeName(name) && errorLocation.parent.kind === 271 /* ExportSpecifier */) {
+            if (isPrimitiveTypeName(name) && errorLocation.parent.kind === 273 /* ExportSpecifier */) {
                 error(errorLocation, ts.Diagnostics.Cannot_export_0_Only_local_declarations_can_be_exported_from_a_module, name);
                 return true;
             }
@@ -47025,7 +48035,7 @@
                 return;
             }
             // Block-scoped variables cannot be used before their definition
-            var declaration = (_a = result.declarations) === null || _a === void 0 ? void 0 : _a.find(function (d) { return ts.isBlockOrCatchScoped(d) || ts.isClassLike(d) || (d.kind === 256 /* EnumDeclaration */); });
+            var declaration = (_a = result.declarations) === null || _a === void 0 ? void 0 : _a.find(function (d) { return ts.isBlockOrCatchScoped(d) || ts.isClassLike(d) || (d.kind === 258 /* EnumDeclaration */); });
             if (declaration === undefined)
                 return ts.Debug.fail("checkResolvedBlockScopedVariable could not find block-scoped declaration");
             if (!(declaration.flags & 8388608 /* Ambient */) && !isBlockScopedNameDeclaredBeforeUse(declaration, errorLocation)) {
@@ -47060,13 +48070,13 @@
         }
         function getAnyImportSyntax(node) {
             switch (node.kind) {
-                case 261 /* ImportEqualsDeclaration */:
+                case 263 /* ImportEqualsDeclaration */:
                     return node;
-                case 263 /* ImportClause */:
+                case 265 /* ImportClause */:
                     return node.parent;
-                case 264 /* NamespaceImport */:
+                case 266 /* NamespaceImport */:
                     return node.parent.parent;
-                case 266 /* ImportSpecifier */:
+                case 268 /* ImportSpecifier */:
                     return node.parent.parent.parent;
                 default:
                     return undefined;
@@ -47091,22 +48101,22 @@
          * const { x } = require ...
          */
         function isAliasSymbolDeclaration(node) {
-            return node.kind === 261 /* ImportEqualsDeclaration */
-                || node.kind === 260 /* NamespaceExportDeclaration */
-                || node.kind === 263 /* ImportClause */ && !!node.name
-                || node.kind === 264 /* NamespaceImport */
-                || node.kind === 270 /* NamespaceExport */
-                || node.kind === 266 /* ImportSpecifier */
-                || node.kind === 271 /* ExportSpecifier */
-                || node.kind === 267 /* ExportAssignment */ && ts.exportAssignmentIsAlias(node)
+            return node.kind === 263 /* ImportEqualsDeclaration */
+                || node.kind === 262 /* NamespaceExportDeclaration */
+                || node.kind === 265 /* ImportClause */ && !!node.name
+                || node.kind === 266 /* NamespaceImport */
+                || node.kind === 272 /* NamespaceExport */
+                || node.kind === 268 /* ImportSpecifier */
+                || node.kind === 273 /* ExportSpecifier */
+                || node.kind === 269 /* ExportAssignment */ && ts.exportAssignmentIsAlias(node)
                 || ts.isBinaryExpression(node) && ts.getAssignmentDeclarationKind(node) === 2 /* ModuleExports */ && ts.exportAssignmentIsAlias(node)
                 || ts.isAccessExpression(node)
                     && ts.isBinaryExpression(node.parent)
                     && node.parent.left === node
-                    && node.parent.operatorToken.kind === 62 /* EqualsToken */
+                    && node.parent.operatorToken.kind === 63 /* EqualsToken */
                     && isAliasableOrJsExpression(node.parent.right)
-                || node.kind === 290 /* ShorthandPropertyAssignment */
-                || node.kind === 289 /* PropertyAssignment */ && isAliasableOrJsExpression(node.initializer)
+                || node.kind === 292 /* ShorthandPropertyAssignment */
+                || node.kind === 291 /* PropertyAssignment */ && isAliasableOrJsExpression(node.initializer)
                 || ts.isRequireVariableDeclaration(node);
         }
         function isAliasableOrJsExpression(e) {
@@ -47120,7 +48130,7 @@
                     ? resolveSymbol(getPropertyOfType(resolveExternalModuleTypeByLiteral(name), commonJSPropertyAccess.name.escapedText))
                     : undefined;
             }
-            if (ts.isVariableDeclaration(node) || node.moduleReference.kind === 273 /* ExternalModuleReference */) {
+            if (ts.isVariableDeclaration(node) || node.moduleReference.kind === 275 /* ExternalModuleReference */) {
                 var immediate = resolveExternalModuleName(node, ts.getExternalModuleRequireArgument(node) || ts.getExternalModuleImportEqualsDeclarationExpression(node));
                 var resolved_4 = resolveExternalModuleSymbol(immediate);
                 markSymbolOfAliasDeclarationIfTypeOnly(node, immediate, resolved_4, /*overwriteEmpty*/ false);
@@ -47386,7 +48396,7 @@
                     if (localSymbol.declarations) {
                         ts.addRelatedInfo.apply(void 0, __spreadArray([diagnostic], ts.map(localSymbol.declarations, function (decl, index) {
                             return ts.createDiagnosticForNode(decl, index === 0 ? ts.Diagnostics._0_is_declared_here : ts.Diagnostics.and_here, declarationName);
-                        })));
+                        }), false));
                     }
                 }
             }
@@ -47466,7 +48476,7 @@
             return getTargetOfAliasLikeExpression(expression, dontRecursivelyResolve);
         }
         function getTargetOfAccessExpression(node, dontRecursivelyResolve) {
-            if (!(ts.isBinaryExpression(node.parent) && node.parent.left === node && node.parent.operatorToken.kind === 62 /* EqualsToken */)) {
+            if (!(ts.isBinaryExpression(node.parent) && node.parent.left === node && node.parent.operatorToken.kind === 63 /* EqualsToken */)) {
                 return undefined;
             }
             return getTargetOfAliasLikeExpression(node.parent.right, dontRecursivelyResolve);
@@ -47474,31 +48484,31 @@
         function getTargetOfAliasDeclaration(node, dontRecursivelyResolve) {
             if (dontRecursivelyResolve === void 0) { dontRecursivelyResolve = false; }
             switch (node.kind) {
-                case 261 /* ImportEqualsDeclaration */:
-                case 250 /* VariableDeclaration */:
+                case 263 /* ImportEqualsDeclaration */:
+                case 252 /* VariableDeclaration */:
                     return getTargetOfImportEqualsDeclaration(node, dontRecursivelyResolve);
-                case 263 /* ImportClause */:
+                case 265 /* ImportClause */:
                     return getTargetOfImportClause(node, dontRecursivelyResolve);
-                case 264 /* NamespaceImport */:
+                case 266 /* NamespaceImport */:
                     return getTargetOfNamespaceImport(node, dontRecursivelyResolve);
-                case 270 /* NamespaceExport */:
+                case 272 /* NamespaceExport */:
                     return getTargetOfNamespaceExport(node, dontRecursivelyResolve);
-                case 266 /* ImportSpecifier */:
-                case 199 /* BindingElement */:
+                case 268 /* ImportSpecifier */:
+                case 201 /* BindingElement */:
                     return getTargetOfImportSpecifier(node, dontRecursivelyResolve);
-                case 271 /* ExportSpecifier */:
+                case 273 /* ExportSpecifier */:
                     return getTargetOfExportSpecifier(node, 111551 /* Value */ | 788968 /* Type */ | 1920 /* Namespace */, dontRecursivelyResolve);
-                case 267 /* ExportAssignment */:
-                case 217 /* BinaryExpression */:
+                case 269 /* ExportAssignment */:
+                case 219 /* BinaryExpression */:
                     return getTargetOfExportAssignment(node, dontRecursivelyResolve);
-                case 260 /* NamespaceExportDeclaration */:
+                case 262 /* NamespaceExportDeclaration */:
                     return getTargetOfNamespaceExportDeclaration(node, dontRecursivelyResolve);
-                case 290 /* ShorthandPropertyAssignment */:
+                case 292 /* ShorthandPropertyAssignment */:
                     return resolveEntityName(node.name, 111551 /* Value */ | 788968 /* Type */ | 1920 /* Namespace */, /*ignoreErrors*/ true, dontRecursivelyResolve);
-                case 289 /* PropertyAssignment */:
+                case 291 /* PropertyAssignment */:
                     return getTargetOfPropertyAssignment(node, dontRecursivelyResolve);
-                case 203 /* ElementAccessExpression */:
-                case 202 /* PropertyAccessExpression */:
+                case 205 /* ElementAccessExpression */:
+                case 204 /* PropertyAccessExpression */:
                     return getTargetOfAccessExpression(node, dontRecursivelyResolve);
                 default:
                     return ts.Debug.fail();
@@ -47646,17 +48656,17 @@
             //     import a = |b|; // Namespace
             //     import a = |b.c|; // Value, type, namespace
             //     import a = |b.c|.d; // Namespace
-            if (entityName.kind === 78 /* Identifier */ && ts.isRightSideOfQualifiedNameOrPropertyAccess(entityName)) {
+            if (entityName.kind === 79 /* Identifier */ && ts.isRightSideOfQualifiedNameOrPropertyAccess(entityName)) {
                 entityName = entityName.parent;
             }
             // Check for case 1 and 3 in the above example
-            if (entityName.kind === 78 /* Identifier */ || entityName.parent.kind === 158 /* QualifiedName */) {
+            if (entityName.kind === 79 /* Identifier */ || entityName.parent.kind === 159 /* QualifiedName */) {
                 return resolveEntityName(entityName, 1920 /* Namespace */, /*ignoreErrors*/ false, dontResolveAlias);
             }
             else {
                 // Case 2 in above example
                 // entityName.kind could be a QualifiedName or a Missing identifier
-                ts.Debug.assert(entityName.parent.kind === 261 /* ImportEqualsDeclaration */);
+                ts.Debug.assert(entityName.parent.kind === 263 /* ImportEqualsDeclaration */);
                 return resolveEntityName(entityName, 111551 /* Value */ | 788968 /* Type */ | 1920 /* Namespace */, /*ignoreErrors*/ false, dontResolveAlias);
             }
         }
@@ -47672,7 +48682,7 @@
             }
             var namespaceMeaning = 1920 /* Namespace */ | (ts.isInJSFile(name) ? meaning & 111551 /* Value */ : 0);
             var symbol;
-            if (name.kind === 78 /* Identifier */) {
+            if (name.kind === 79 /* Identifier */) {
                 var message = meaning === namespaceMeaning || ts.nodeIsSynthesized(name) ? ts.Diagnostics.Cannot_find_namespace_0 : getCannotFindNameDiagnosticForName(ts.getFirstIdentifier(name));
                 var symbolFromJSPrototype = ts.isInJSFile(name) && !ts.nodeIsSynthesized(name) ? resolveEntityNameFromAssignmentDeclaration(name, meaning) : undefined;
                 symbol = getMergedSymbol(resolveName(location || name, name.escapedText, meaning, ignoreErrors || symbolFromJSPrototype ? undefined : message, name, /*isUse*/ true));
@@ -47680,9 +48690,9 @@
                     return getMergedSymbol(symbolFromJSPrototype);
                 }
             }
-            else if (name.kind === 158 /* QualifiedName */ || name.kind === 202 /* PropertyAccessExpression */) {
-                var left = name.kind === 158 /* QualifiedName */ ? name.left : name.expression;
-                var right = name.kind === 158 /* QualifiedName */ ? name.right : name.name;
+            else if (name.kind === 159 /* QualifiedName */ || name.kind === 204 /* PropertyAccessExpression */) {
+                var left = name.kind === 159 /* QualifiedName */ ? name.left : name.expression;
+                var right = name.kind === 159 /* QualifiedName */ ? name.right : name.name;
                 var namespace = resolveEntityName(left, namespaceMeaning, ignoreErrors, /*dontResolveAlias*/ false, location);
                 if (!namespace || ts.nodeIsMissing(right)) {
                     return undefined;
@@ -47721,7 +48731,7 @@
                 throw ts.Debug.assertNever(name, "Unknown entity name kind.");
             }
             ts.Debug.assert((ts.getCheckFlags(symbol) & 1 /* Instantiated */) === 0, "Should never get an instantiated symbol here.");
-            if (!ts.nodeIsSynthesized(name) && ts.isEntityName(name) && (symbol.flags & 2097152 /* Alias */ || name.parent.kind === 267 /* ExportAssignment */)) {
+            if (!ts.nodeIsSynthesized(name) && ts.isEntityName(name) && (symbol.flags & 2097152 /* Alias */ || name.parent.kind === 269 /* ExportAssignment */)) {
                 markSymbolOfAliasDeclarationIfTypeOnly(ts.getAliasDeclarationFromName(name), symbol, /*finalTarget*/ undefined, /*overwriteEmpty*/ true);
             }
             return (symbol.flags & meaning) || dontResolveAlias ? symbol : resolveAlias(symbol);
@@ -47958,7 +48968,7 @@
         function resolveESModuleSymbol(moduleSymbol, referencingLocation, dontResolveAlias, suppressInteropError) {
             var symbol = resolveExternalModuleSymbol(moduleSymbol, dontResolveAlias);
             if (!dontResolveAlias && symbol) {
-                if (!suppressInteropError && !(symbol.flags & (1536 /* Module */ | 3 /* Variable */)) && !ts.getDeclarationOfKind(symbol, 298 /* SourceFile */)) {
+                if (!suppressInteropError && !(symbol.flags & (1536 /* Module */ | 3 /* Variable */)) && !ts.getDeclarationOfKind(symbol, 300 /* SourceFile */)) {
                     var compilerOptionName = moduleKind >= ts.ModuleKind.ES2015
                         ? "allowSyntheticDefaultImports"
                         : "esModuleInterop";
@@ -47991,7 +49001,7 @@
                             if (symbol.exports)
                                 result.exports = new ts.Map(symbol.exports);
                             var resolvedModuleType = resolveStructuredTypeMembers(moduleType); // Should already be resolved from the signature checks above
-                            result.type = createAnonymousType(result, resolvedModuleType.members, ts.emptyArray, ts.emptyArray, resolvedModuleType.stringIndexInfo, resolvedModuleType.numberIndexInfo);
+                            result.type = createAnonymousType(result, resolvedModuleType.members, ts.emptyArray, ts.emptyArray, resolvedModuleType.indexInfos);
                             return result;
                         }
                     }
@@ -48016,6 +49026,23 @@
             }
             return exports;
         }
+        function forEachExportAndPropertyOfModule(moduleSymbol, cb) {
+            var exports = getExportsOfModule(moduleSymbol);
+            exports.forEach(function (symbol, key) {
+                if (!isReservedMemberName(key)) {
+                    cb(symbol, key);
+                }
+            });
+            var exportEquals = resolveExternalModuleSymbol(moduleSymbol);
+            if (exportEquals !== moduleSymbol) {
+                var type = getTypeOfSymbol(exportEquals);
+                if (shouldTreatPropertiesOfExternalModuleAsExports(type)) {
+                    getPropertiesOfType(type).forEach(function (symbol) {
+                        cb(symbol, symbol.escapedName);
+                    });
+                }
+            }
+        }
         function tryGetMemberInModuleExports(memberName, moduleSymbol) {
             var symbolTable = getExportsOfModule(moduleSymbol);
             if (symbolTable) {
@@ -48204,7 +49231,7 @@
                             }
                         });
                     }) : undefined;
-                var res = firstVariableMatch ? __spreadArray(__spreadArray([firstVariableMatch], additionalContainers), [container]) : __spreadArray(__spreadArray([], additionalContainers), [container]);
+                var res = firstVariableMatch ? __spreadArray(__spreadArray([firstVariableMatch], additionalContainers, true), [container], false) : __spreadArray(__spreadArray([], additionalContainers, true), [container], false);
                 res = ts.append(res, objectLiteralContainer);
                 res = ts.addRange(res, reexportContainers);
                 return res;
@@ -48213,7 +49240,7 @@
                 if (!ts.isAmbientModule(d) && d.parent && hasNonGlobalAugmentationExternalModuleSymbol(d.parent)) {
                     return getSymbolOfNode(d.parent);
                 }
-                if (ts.isClassExpression(d) && ts.isBinaryExpression(d.parent) && d.parent.operatorToken.kind === 62 /* EqualsToken */ && ts.isAccessExpression(d.parent.left) && ts.isEntityNameExpression(d.parent.left.expression)) {
+                if (ts.isClassExpression(d) && ts.isBinaryExpression(d.parent) && d.parent.operatorToken.kind === 63 /* EqualsToken */ && ts.isAccessExpression(d.parent.left) && ts.isEntityNameExpression(d.parent.left.expression)) {
                     if (ts.isModuleExportsAccessExpression(d.parent.left) || ts.isExportsIdentifier(d.parent.left.expression)) {
                         return getSymbolOfNode(ts.getSourceFileOfNode(d));
                     }
@@ -48285,7 +49312,7 @@
             var members = node.members;
             for (var _i = 0, members_3 = members; _i < members_3.length; _i++) {
                 var member = members_3[_i];
-                if (member.kind === 167 /* Constructor */ && ts.nodeIsPresent(member.body)) {
+                if (member.kind === 169 /* Constructor */ && ts.nodeIsPresent(member.body)) {
                     return member;
                 }
             }
@@ -48309,12 +49336,6 @@
             type.objectFlags = objectFlags;
             return type;
         }
-        function createBooleanType(trueFalseTypes) {
-            var type = getUnionType(trueFalseTypes);
-            type.flags |= 16 /* Boolean */;
-            type.intrinsicName = "boolean";
-            return type;
-        }
         function createObjectType(objectFlags, symbol) {
             var type = createType(524288 /* Object */);
             type.objectFlags = objectFlags;
@@ -48323,12 +49344,11 @@
             type.properties = undefined;
             type.callSignatures = undefined;
             type.constructSignatures = undefined;
-            type.stringIndexInfo = undefined;
-            type.numberIndexInfo = undefined;
+            type.indexInfos = undefined;
             return type;
         }
         function createTypeofType() {
-            return getUnionType(ts.arrayFrom(typeofEQFacts.keys(), getLiteralType));
+            return getUnionType(ts.arrayFrom(typeofEQFacts.keys(), getStringLiteralType));
         }
         function createTypeParameter(symbol) {
             var type = createType(262144 /* TypeParameter */);
@@ -48361,21 +49381,20 @@
             var index = getIndexSymbolFromSymbolTable(members);
             return index ? ts.concatenate(result, [index]) : result;
         }
-        function setStructuredTypeMembers(type, members, callSignatures, constructSignatures, stringIndexInfo, numberIndexInfo) {
+        function setStructuredTypeMembers(type, members, callSignatures, constructSignatures, indexInfos) {
             var resolved = type;
             resolved.members = members;
             resolved.properties = ts.emptyArray;
             resolved.callSignatures = callSignatures;
             resolved.constructSignatures = constructSignatures;
-            resolved.stringIndexInfo = stringIndexInfo;
-            resolved.numberIndexInfo = numberIndexInfo;
+            resolved.indexInfos = indexInfos;
             // This can loop back to getPropertyOfType() which would crash if `callSignatures` & `constructSignatures` are not initialized.
             if (members !== emptySymbols)
                 resolved.properties = getNamedMembers(members);
             return resolved;
         }
-        function createAnonymousType(symbol, members, callSignatures, constructSignatures, stringIndexInfo, numberIndexInfo) {
-            return setStructuredTypeMembers(createObjectType(16 /* Anonymous */, symbol), members, callSignatures, constructSignatures, stringIndexInfo, numberIndexInfo);
+        function createAnonymousType(symbol, members, callSignatures, constructSignatures, indexInfos) {
+            return setStructuredTypeMembers(createObjectType(16 /* Anonymous */, symbol), members, callSignatures, constructSignatures, indexInfos);
         }
         function getResolvedTypeWithoutAbstractConstructSignatures(type) {
             if (type.constructSignatures.length === 0)
@@ -48385,7 +49404,7 @@
             var constructSignatures = ts.filter(type.constructSignatures, function (signature) { return !(signature.flags & 4 /* Abstract */); });
             if (type.constructSignatures === constructSignatures)
                 return type;
-            var typeCopy = createAnonymousType(type.symbol, type.members, type.callSignatures, ts.some(constructSignatures) ? constructSignatures : ts.emptyArray, type.stringIndexInfo, type.numberIndexInfo);
+            var typeCopy = createAnonymousType(type.symbol, type.members, type.callSignatures, ts.some(constructSignatures) ? constructSignatures : ts.emptyArray, type.indexInfos);
             type.objectTypeWithoutAbstractConstructSignatures = typeCopy;
             typeCopy.objectTypeWithoutAbstractConstructSignatures = typeCopy;
             return typeCopy;
@@ -48395,28 +49414,28 @@
             var _loop_8 = function (location) {
                 // Locals of a source file are not in scope (because they get merged into the global symbol table)
                 if (location.locals && !isGlobalSourceFile(location)) {
-                    if (result = callback(location.locals, /*ignoreQualification*/ undefined, /*isLocalNameLookup*/ true)) {
+                    if (result = callback(location.locals, /*ignoreQualification*/ undefined, /*isLocalNameLookup*/ true, location)) {
                         return { value: result };
                     }
                 }
                 switch (location.kind) {
-                    case 298 /* SourceFile */:
+                    case 300 /* SourceFile */:
                         if (!ts.isExternalOrCommonJsModule(location)) {
                             break;
                         }
                     // falls through
-                    case 257 /* ModuleDeclaration */:
+                    case 259 /* ModuleDeclaration */:
                         var sym = getSymbolOfNode(location);
                         // `sym` may not have exports if this module declaration is backed by the symbol for a `const` that's being rewritten
                         // into a namespace - in such cases, it's best to just let the namespace appear empty (the const members couldn't have referred
                         // to one another anyway)
-                        if (result = callback((sym === null || sym === void 0 ? void 0 : sym.exports) || emptySymbols, /*ignoreQualification*/ undefined, /*isLocalNameLookup*/ true)) {
+                        if (result = callback((sym === null || sym === void 0 ? void 0 : sym.exports) || emptySymbols, /*ignoreQualification*/ undefined, /*isLocalNameLookup*/ true, location)) {
                             return { value: result };
                         }
                         break;
-                    case 253 /* ClassDeclaration */:
-                    case 222 /* ClassExpression */:
-                    case 254 /* InterfaceDeclaration */:
+                    case 255 /* ClassDeclaration */:
+                    case 224 /* ClassExpression */:
+                    case 256 /* InterfaceDeclaration */:
                         // Type parameters are bound into `members` lists so they can merge across declarations
                         // This is troublesome, since in all other respects, they behave like locals :cries:
                         // TODO: the below is shared with similar code in `resolveName` - in fact, rephrasing all this symbol
@@ -48431,7 +49450,7 @@
                                 (table_1 || (table_1 = ts.createSymbolTable())).set(key, memberSymbol);
                             }
                         });
-                        if (table_1 && (result = callback(table_1))) {
+                        if (table_1 && (result = callback(table_1, /*ignoreQualification*/ undefined, /*isLocalNameLookup*/ false, location))) {
                             return { value: result };
                         }
                         break;
@@ -48453,12 +49472,22 @@
             if (!(symbol && !isPropertyOrMethodDeclarationSymbol(symbol))) {
                 return undefined;
             }
+            var links = getSymbolLinks(symbol);
+            var cache = (links.accessibleChainCache || (links.accessibleChainCache = new ts.Map()));
+            // Go from enclosingDeclaration to the first scope we check, so the cache is keyed off the scope and thus shared more
+            var firstRelevantLocation = forEachSymbolTableInScope(enclosingDeclaration, function (_, __, ___, node) { return node; });
+            var key = (useOnlyExternalAliasing ? 0 : 1) + "|" + (firstRelevantLocation && getNodeId(firstRelevantLocation)) + "|" + meaning;
+            if (cache.has(key)) {
+                return cache.get(key);
+            }
             var id = getSymbolId(symbol);
             var visitedSymbolTables = visitedSymbolTablesMap.get(id);
             if (!visitedSymbolTables) {
                 visitedSymbolTablesMap.set(id, visitedSymbolTables = []);
             }
-            return forEachSymbolTableInScope(enclosingDeclaration, getAccessibleSymbolChainFromSymbolTable);
+            var result = forEachSymbolTableInScope(enclosingDeclaration, getAccessibleSymbolChainFromSymbolTable);
+            cache.set(key, result);
+            return result;
             /**
              * @param {ignoreQualification} boolean Set when a symbol is being looked for through the exports of another symbol (meaning we have a route to qualify it already)
              */
@@ -48501,7 +49530,7 @@
                         && (isLocalNameLookup ? !ts.some(symbolFromSymbolTable.declarations, ts.isNamespaceReexportDeclaration) : true)
                         // While exports are generally considered to be in scope, export-specifier declared symbols are _not_
                         // See similar comment in `resolveName` for details
-                        && (ignoreQualification || !ts.getDeclarationOfKind(symbolFromSymbolTable, 271 /* ExportSpecifier */))) {
+                        && (ignoreQualification || !ts.getDeclarationOfKind(symbolFromSymbolTable, 273 /* ExportSpecifier */))) {
                         var resolvedImportedSymbol = resolveAlias(symbolFromSymbolTable);
                         var candidate = getCandidateListForSymbol(symbolFromSymbolTable, resolvedImportedSymbol, ignoreQualification);
                         if (candidate) {
@@ -48545,7 +49574,7 @@
                     return true;
                 }
                 // Qualify if the symbol from symbol table has same meaning as expected
-                symbolFromSymbolTable = (symbolFromSymbolTable.flags & 2097152 /* Alias */ && !ts.getDeclarationOfKind(symbolFromSymbolTable, 271 /* ExportSpecifier */)) ? resolveAlias(symbolFromSymbolTable) : symbolFromSymbolTable;
+                symbolFromSymbolTable = (symbolFromSymbolTable.flags & 2097152 /* Alias */ && !ts.getDeclarationOfKind(symbolFromSymbolTable, 273 /* ExportSpecifier */)) ? resolveAlias(symbolFromSymbolTable) : symbolFromSymbolTable;
                 if (symbolFromSymbolTable.flags & meaning) {
                     qualify = true;
                     return true;
@@ -48560,10 +49589,10 @@
                 for (var _i = 0, _a = symbol.declarations; _i < _a.length; _i++) {
                     var declaration = _a[_i];
                     switch (declaration.kind) {
-                        case 164 /* PropertyDeclaration */:
-                        case 166 /* MethodDeclaration */:
-                        case 168 /* GetAccessor */:
-                        case 169 /* SetAccessor */:
+                        case 165 /* PropertyDeclaration */:
+                        case 167 /* MethodDeclaration */:
+                        case 170 /* GetAccessor */:
+                        case 171 /* SetAccessor */:
                             continue;
                         default:
                             return false;
@@ -48693,14 +49722,14 @@
             return node && getSymbolOfNode(node);
         }
         function hasExternalModuleSymbol(declaration) {
-            return ts.isAmbientModule(declaration) || (declaration.kind === 298 /* SourceFile */ && ts.isExternalOrCommonJsModule(declaration));
+            return ts.isAmbientModule(declaration) || (declaration.kind === 300 /* SourceFile */ && ts.isExternalOrCommonJsModule(declaration));
         }
         function hasNonGlobalAugmentationExternalModuleSymbol(declaration) {
-            return ts.isModuleWithStringLiteralName(declaration) || (declaration.kind === 298 /* SourceFile */ && ts.isExternalOrCommonJsModule(declaration));
+            return ts.isModuleWithStringLiteralName(declaration) || (declaration.kind === 300 /* SourceFile */ && ts.isExternalOrCommonJsModule(declaration));
         }
         function hasVisibleDeclarations(symbol, shouldComputeAliasToMakeVisible) {
             var aliasesToMakeVisible;
-            if (!ts.every(ts.filter(symbol.declarations, function (d) { return d.kind !== 78 /* Identifier */; }), getIsDeclarationVisible)) {
+            if (!ts.every(ts.filter(symbol.declarations, function (d) { return d.kind !== 79 /* Identifier */; }), getIsDeclarationVisible)) {
                 return undefined;
             }
             return { accessibility: 0 /* Accessible */, aliasesToMakeVisible: aliasesToMakeVisible };
@@ -48752,14 +49781,14 @@
         function isEntityNameVisible(entityName, enclosingDeclaration) {
             // get symbol of the first identifier of the entityName
             var meaning;
-            if (entityName.parent.kind === 177 /* TypeQuery */ ||
+            if (entityName.parent.kind === 179 /* TypeQuery */ ||
                 ts.isExpressionWithTypeArgumentsInClassExtendsClause(entityName.parent) ||
-                entityName.parent.kind === 159 /* ComputedPropertyName */) {
+                entityName.parent.kind === 160 /* ComputedPropertyName */) {
                 // Typeof value
                 meaning = 111551 /* Value */ | 1048576 /* ExportValue */;
             }
-            else if (entityName.kind === 158 /* QualifiedName */ || entityName.kind === 202 /* PropertyAccessExpression */ ||
-                entityName.parent.kind === 261 /* ImportEqualsDeclaration */) {
+            else if (entityName.kind === 159 /* QualifiedName */ || entityName.kind === 204 /* PropertyAccessExpression */ ||
+                entityName.parent.kind === 263 /* ImportEqualsDeclaration */) {
                 // Left identifier from type reference or TypeAlias
                 // Entity name of the import declaration
                 meaning = 1920 /* Namespace */;
@@ -48800,7 +49829,7 @@
             function symbolToStringWorker(writer) {
                 var entity = builder(symbol, meaning, enclosingDeclaration, nodeFlags); // TODO: GH#18217
                 // add neverAsciiEscape for GH#39027
-                var printer = (enclosingDeclaration === null || enclosingDeclaration === void 0 ? void 0 : enclosingDeclaration.kind) === 298 /* SourceFile */ ? ts.createPrinter({ removeComments: true, neverAsciiEscape: true }) : ts.createPrinter({ removeComments: true });
+                var printer = (enclosingDeclaration === null || enclosingDeclaration === void 0 ? void 0 : enclosingDeclaration.kind) === 300 /* SourceFile */ ? ts.createPrinter({ removeComments: true, neverAsciiEscape: true }) : ts.createPrinter({ removeComments: true });
                 var sourceFile = enclosingDeclaration && ts.getSourceFileOfNode(enclosingDeclaration);
                 printer.writeNode(4 /* Unspecified */, entity, /*sourceFile*/ sourceFile, writer);
                 return writer;
@@ -48812,10 +49841,10 @@
             function signatureToStringWorker(writer) {
                 var sigOutput;
                 if (flags & 262144 /* WriteArrowStyleSignature */) {
-                    sigOutput = kind === 1 /* Construct */ ? 176 /* ConstructorType */ : 175 /* FunctionType */;
+                    sigOutput = kind === 1 /* Construct */ ? 178 /* ConstructorType */ : 177 /* FunctionType */;
                 }
                 else {
-                    sigOutput = kind === 1 /* Construct */ ? 171 /* ConstructSignature */ : 170 /* CallSignature */;
+                    sigOutput = kind === 1 /* Construct */ ? 173 /* ConstructSignature */ : 172 /* CallSignature */;
                 }
                 var sig = nodeBuilder.signatureToSignatureDeclaration(signature, sigOutput, enclosingDeclaration, toNodeBuilderFlags(flags) | 70221824 /* IgnoreErrors */ | 512 /* WriteTypeParametersInQualifiedName */);
                 var printer = ts.createPrinter({ removeComments: true, omitTrailingSemicolon: true });
@@ -48869,8 +49898,8 @@
                 typeToTypeNode: function (type, enclosingDeclaration, flags, tracker) {
                     return withContext(enclosingDeclaration, flags, tracker, function (context) { return typeToTypeNodeHelper(type, context); });
                 },
-                indexInfoToIndexSignatureDeclaration: function (indexInfo, kind, enclosingDeclaration, flags, tracker) {
-                    return withContext(enclosingDeclaration, flags, tracker, function (context) { return indexInfoToIndexSignatureDeclarationHelper(indexInfo, kind, context, /*typeNode*/ undefined); });
+                indexInfoToIndexSignatureDeclaration: function (indexInfo, enclosingDeclaration, flags, tracker) {
+                    return withContext(enclosingDeclaration, flags, tracker, function (context) { return indexInfoToIndexSignatureDeclarationHelper(indexInfo, context, /*typeNode*/ undefined); });
                 },
                 signatureToSignatureDeclaration: function (signature, kind, enclosingDeclaration, flags, tracker) {
                     return withContext(enclosingDeclaration, flags, tracker, function (context) { return signatureToSignatureDeclarationHelper(signature, kind, context); });
@@ -48901,9 +49930,8 @@
                     enclosingDeclaration: enclosingDeclaration,
                     flags: flags || 0 /* None */,
                     // If no full tracker is provided, fake up a dummy one with a basic limited-functionality moduleResolverHost
-                    tracker: tracker && tracker.trackSymbol ? tracker : { trackSymbol: ts.noop, moduleResolverHost: flags & 134217728 /* DoNotIncludeSymbolChain */ ? {
+                    tracker: tracker && tracker.trackSymbol ? tracker : { trackSymbol: function () { return false; }, moduleResolverHost: flags & 134217728 /* DoNotIncludeSymbolChain */ ? {
                             getCommonSourceDirectory: !!host.getCommonSourceDirectory ? function () { return host.getCommonSourceDirectory(); } : function () { return ""; },
-                            getSourceFiles: function () { return host.getSourceFiles(); },
                             getCurrentDirectory: function () { return host.getCurrentDirectory(); },
                             getSymlinkCache: ts.maybeBind(host, host.getSymlinkCache),
                             useCaseSensitiveFileNames: ts.maybeBind(host, host.useCaseSensitiveFileNames),
@@ -48914,17 +49942,46 @@
                             getFileIncludeReasons: function () { return host.getFileIncludeReasons(); },
                         } : undefined },
                     encounteredError: false,
+                    reportedDiagnostic: false,
                     visitedTypes: undefined,
                     symbolDepth: undefined,
                     inferTypeParameters: undefined,
                     approximateLength: 0
                 };
+                context.tracker = wrapSymbolTrackerToReportForContext(context, context.tracker);
                 var resultingNode = cb(context);
                 if (context.truncating && context.flags & 1 /* NoTruncation */) {
                     (_b = (_a = context.tracker) === null || _a === void 0 ? void 0 : _a.reportTruncationError) === null || _b === void 0 ? void 0 : _b.call(_a);
                 }
                 return context.encounteredError ? undefined : resultingNode;
             }
+            function wrapSymbolTrackerToReportForContext(context, tracker) {
+                var oldTrackSymbol = tracker.trackSymbol;
+                return __assign(__assign({}, tracker), { reportCyclicStructureError: wrapReportedDiagnostic(tracker.reportCyclicStructureError), reportInaccessibleThisError: wrapReportedDiagnostic(tracker.reportInaccessibleThisError), reportInaccessibleUniqueSymbolError: wrapReportedDiagnostic(tracker.reportInaccessibleUniqueSymbolError), reportLikelyUnsafeImportRequiredError: wrapReportedDiagnostic(tracker.reportLikelyUnsafeImportRequiredError), reportNonlocalAugmentation: wrapReportedDiagnostic(tracker.reportNonlocalAugmentation), reportPrivateInBaseOfClassExpression: wrapReportedDiagnostic(tracker.reportPrivateInBaseOfClassExpression), reportNonSerializableProperty: wrapReportedDiagnostic(tracker.reportNonSerializableProperty), trackSymbol: oldTrackSymbol && (function () {
+                        var args = [];
+                        for (var _i = 0; _i < arguments.length; _i++) {
+                            args[_i] = arguments[_i];
+                        }
+                        var result = oldTrackSymbol.apply(void 0, args);
+                        if (result) {
+                            context.reportedDiagnostic = true;
+                        }
+                        return result;
+                    }) });
+                function wrapReportedDiagnostic(method) {
+                    if (!method) {
+                        return method;
+                    }
+                    return (function () {
+                        var args = [];
+                        for (var _i = 0; _i < arguments.length; _i++) {
+                            args[_i] = arguments[_i];
+                        }
+                        context.reportedDiagnostic = true;
+                        return method.apply(void 0, args);
+                    });
+                }
+            }
             function checkTruncationLength(context) {
                 if (context.truncating)
                     return context.truncating;
@@ -48942,33 +49999,33 @@
                         return undefined; // TODO: GH#18217
                     }
                     context.approximateLength += 3;
-                    return ts.factory.createKeywordTypeNode(128 /* AnyKeyword */);
+                    return ts.factory.createKeywordTypeNode(129 /* AnyKeyword */);
                 }
                 if (!(context.flags & 536870912 /* NoTypeReduction */)) {
                     type = getReducedType(type);
                 }
                 if (type.flags & 1 /* Any */) {
                     context.approximateLength += 3;
-                    return ts.factory.createKeywordTypeNode(type === intrinsicMarkerType ? 136 /* IntrinsicKeyword */ : 128 /* AnyKeyword */);
+                    return ts.factory.createKeywordTypeNode(type === intrinsicMarkerType ? 137 /* IntrinsicKeyword */ : 129 /* AnyKeyword */);
                 }
                 if (type.flags & 2 /* Unknown */) {
-                    return ts.factory.createKeywordTypeNode(152 /* UnknownKeyword */);
+                    return ts.factory.createKeywordTypeNode(153 /* UnknownKeyword */);
                 }
                 if (type.flags & 4 /* String */) {
                     context.approximateLength += 6;
-                    return ts.factory.createKeywordTypeNode(147 /* StringKeyword */);
+                    return ts.factory.createKeywordTypeNode(148 /* StringKeyword */);
                 }
                 if (type.flags & 8 /* Number */) {
                     context.approximateLength += 6;
-                    return ts.factory.createKeywordTypeNode(144 /* NumberKeyword */);
+                    return ts.factory.createKeywordTypeNode(145 /* NumberKeyword */);
                 }
                 if (type.flags & 64 /* BigInt */) {
                     context.approximateLength += 6;
-                    return ts.factory.createKeywordTypeNode(155 /* BigIntKeyword */);
+                    return ts.factory.createKeywordTypeNode(156 /* BigIntKeyword */);
                 }
-                if (type.flags & 16 /* Boolean */) {
+                if (type.flags & 16 /* Boolean */ && !type.aliasSymbol) {
                     context.approximateLength += 7;
-                    return ts.factory.createKeywordTypeNode(131 /* BooleanKeyword */);
+                    return ts.factory.createKeywordTypeNode(132 /* BooleanKeyword */);
                 }
                 if (type.flags & 1024 /* EnumLiteral */ && !(type.flags & 1048576 /* Union */)) {
                     var parentSymbol = getParentOfSymbol(type.symbol);
@@ -49022,15 +50079,15 @@
                         }
                     }
                     context.approximateLength += 13;
-                    return ts.factory.createTypeOperatorNode(151 /* UniqueKeyword */, ts.factory.createKeywordTypeNode(148 /* SymbolKeyword */));
+                    return ts.factory.createTypeOperatorNode(152 /* UniqueKeyword */, ts.factory.createKeywordTypeNode(149 /* SymbolKeyword */));
                 }
                 if (type.flags & 16384 /* Void */) {
                     context.approximateLength += 4;
-                    return ts.factory.createKeywordTypeNode(113 /* VoidKeyword */);
+                    return ts.factory.createKeywordTypeNode(114 /* VoidKeyword */);
                 }
                 if (type.flags & 32768 /* Undefined */) {
                     context.approximateLength += 9;
-                    return ts.factory.createKeywordTypeNode(150 /* UndefinedKeyword */);
+                    return ts.factory.createKeywordTypeNode(151 /* UndefinedKeyword */);
                 }
                 if (type.flags & 65536 /* Null */) {
                     context.approximateLength += 4;
@@ -49038,15 +50095,15 @@
                 }
                 if (type.flags & 131072 /* Never */) {
                     context.approximateLength += 5;
-                    return ts.factory.createKeywordTypeNode(141 /* NeverKeyword */);
+                    return ts.factory.createKeywordTypeNode(142 /* NeverKeyword */);
                 }
                 if (type.flags & 4096 /* ESSymbol */) {
                     context.approximateLength += 6;
-                    return ts.factory.createKeywordTypeNode(148 /* SymbolKeyword */);
+                    return ts.factory.createKeywordTypeNode(149 /* SymbolKeyword */);
                 }
                 if (type.flags & 67108864 /* NonPrimitive */) {
                     context.approximateLength += 6;
-                    return ts.factory.createKeywordTypeNode(145 /* ObjectKeyword */);
+                    return ts.factory.createKeywordTypeNode(146 /* ObjectKeyword */);
                 }
                 if (isThisTypeParameter(type)) {
                     if (context.flags & 4194304 /* InObjectTypeLiteral */) {
@@ -49116,7 +50173,7 @@
                     var indexedType = type.type;
                     context.approximateLength += 6;
                     var indexTypeNode = typeToTypeNodeHelper(indexedType, context);
-                    return ts.factory.createTypeOperatorNode(138 /* KeyOfKeyword */, indexTypeNode);
+                    return ts.factory.createTypeOperatorNode(139 /* KeyOfKeyword */, indexTypeNode);
                 }
                 if (type.flags & 134217728 /* TemplateLiteral */) {
                     var texts_1 = type.texts;
@@ -49137,6 +50194,13 @@
                     return ts.factory.createIndexedAccessTypeNode(objectTypeNode, indexTypeNode);
                 }
                 if (type.flags & 16777216 /* Conditional */) {
+                    return visitAndTransformType(type, function (type) { return conditionalTypeToTypeNode(type); });
+                }
+                if (type.flags & 33554432 /* Substitution */) {
+                    return typeToTypeNodeHelper(type.baseType, context);
+                }
+                return ts.Debug.fail("Should be unreachable.");
+                function conditionalTypeToTypeNode(type) {
                     var checkTypeNode = typeToTypeNodeHelper(type.checkType, context);
                     var saveInferTypeParameters = context.inferTypeParameters;
                     context.inferTypeParameters = type.root.inferTypeParameters;
@@ -49147,10 +50211,6 @@
                     context.approximateLength += 15;
                     return ts.factory.createConditionalTypeNode(checkTypeNode, extendsTypeNode, trueTypeNode, falseTypeNode);
                 }
-                if (type.flags & 33554432 /* Substitution */) {
-                    return typeToTypeNodeHelper(type.baseType, context);
-                }
-                return ts.Debug.fail("Should be unreachable.");
                 function typeToTypeNodeOrCircularityElision(type) {
                     var _a, _b, _c;
                     if (type.flags & 1048576 /* Union */) {
@@ -49173,14 +50233,14 @@
                     if (isMappedTypeWithKeyofConstraintDeclaration(type)) {
                         // We have a { [P in keyof T]: X }
                         // We do this to ensure we retain the toplevel keyof-ness of the type which may be lost due to keyof distribution during `getConstraintTypeFromMappedType`
-                        appropriateConstraintTypeNode = ts.factory.createTypeOperatorNode(138 /* KeyOfKeyword */, typeToTypeNodeHelper(getModifiersTypeFromMappedType(type), context));
+                        appropriateConstraintTypeNode = ts.factory.createTypeOperatorNode(139 /* KeyOfKeyword */, typeToTypeNodeHelper(getModifiersTypeFromMappedType(type), context));
                     }
                     else {
                         appropriateConstraintTypeNode = typeToTypeNodeHelper(getConstraintTypeFromMappedType(type), context);
                     }
                     var typeParameterNode = typeParameterToDeclarationWithConstraint(getTypeParameterFromMappedType(type), context, appropriateConstraintTypeNode);
                     var nameTypeNode = type.declaration.nameType ? typeToTypeNodeHelper(getNameTypeFromMappedType(type), context) : undefined;
-                    var templateTypeNode = typeToTypeNodeHelper(getTemplateTypeFromMappedType(type), context);
+                    var templateTypeNode = typeToTypeNodeHelper(removeMissingType(getTemplateTypeFromMappedType(type), !!(getMappedTypeModifiers(type) & 4 /* IncludeOptional */)), context);
                     var mappedTypeNode = ts.factory.createMappedTypeNode(readonlyToken, typeParameterNode, nameTypeNode, questionToken, templateTypeNode);
                     context.approximateLength += 10;
                     return ts.setEmitFlags(mappedTypeNode, 1 /* SingleLine */);
@@ -49198,7 +50258,7 @@
                         // Always use 'typeof T' for type of class, enum, and module objects
                         else if (symbol.flags & 32 /* Class */
                             && !getBaseTypeVariableOfClass(symbol)
-                            && !(symbol.valueDeclaration && symbol.valueDeclaration.kind === 222 /* ClassExpression */ && context.flags & 2048 /* WriteClassExpressionAsTypeLiteral */) ||
+                            && !(symbol.valueDeclaration && symbol.valueDeclaration.kind === 224 /* ClassExpression */ && context.flags & 2048 /* WriteClassExpressionAsTypeLiteral */) ||
                             symbol.flags & (384 /* Enum */ | 512 /* ValueModule */) ||
                             shouldWriteTypeOfFunctionSymbol()) {
                             return symbolToTypeNode(symbol, context, isInstanceType);
@@ -49225,11 +50285,11 @@
                     function shouldWriteTypeOfFunctionSymbol() {
                         var _a;
                         var isStaticMethodSymbol = !!(symbol.flags & 8192 /* Method */) && // typeof static method
-                            ts.some(symbol.declarations, function (declaration) { return ts.hasSyntacticModifier(declaration, 32 /* Static */); });
+                            ts.some(symbol.declarations, function (declaration) { return ts.isStatic(declaration); });
                         var isNonLocalFunctionSymbol = !!(symbol.flags & 16 /* Function */) &&
                             (symbol.parent || // is exported function symbol
                                 ts.forEach(symbol.declarations, function (declaration) {
-                                    return declaration.parent.kind === 298 /* SourceFile */ || declaration.parent.kind === 258 /* ModuleBlock */;
+                                    return declaration.parent.kind === 300 /* SourceFile */ || declaration.parent.kind === 260 /* ModuleBlock */;
                                 }));
                         if (isStaticMethodSymbol || isNonLocalFunctionSymbol) {
                             // typeof is allowed only for static/non local functions
@@ -49239,11 +50299,13 @@
                     }
                 }
                 function visitAndTransformType(type, transform) {
+                    var _a, _b;
                     var typeId = type.id;
                     var isConstructorObject = ts.getObjectFlags(type) & 16 /* Anonymous */ && type.symbol && type.symbol.flags & 32 /* Class */;
                     var id = ts.getObjectFlags(type) & 4 /* Reference */ && type.node ? "N" + getNodeId(type.node) :
-                        type.symbol ? (isConstructorObject ? "+" : "") + getSymbolId(type.symbol) :
-                            undefined;
+                        type.flags & 16777216 /* Conditional */ ? "N" + getNodeId(type.root.node) :
+                            type.symbol ? (isConstructorObject ? "+" : "") + getSymbolId(type.symbol) :
+                                undefined;
                     // Since instantiations of the same anonymous type have the same symbol, tracking symbols instead
                     // of types allows us to catch circular references to instantiations of the same anonymous type
                     if (!context.visitedTypes) {
@@ -49252,6 +50314,19 @@
                     if (id && !context.symbolDepth) {
                         context.symbolDepth = new ts.Map();
                     }
+                    var links = context.enclosingDeclaration && getNodeLinks(context.enclosingDeclaration);
+                    var key = getTypeId(type) + "|" + context.flags;
+                    if (links) {
+                        links.serializedTypes || (links.serializedTypes = new ts.Map());
+                    }
+                    var cachedResult = (_a = links === null || links === void 0 ? void 0 : links.serializedTypes) === null || _a === void 0 ? void 0 : _a.get(key);
+                    if (cachedResult) {
+                        if (cachedResult.truncating) {
+                            context.truncating = true;
+                        }
+                        context.approximateLength += cachedResult.addedLength;
+                        return deepCloneOrReuseNode(cachedResult);
+                    }
                     var depth;
                     if (id) {
                         depth = context.symbolDepth.get(id) || 0;
@@ -49261,31 +50336,46 @@
                         context.symbolDepth.set(id, depth + 1);
                     }
                     context.visitedTypes.add(typeId);
+                    var startLength = context.approximateLength;
                     var result = transform(type);
+                    var addedLength = context.approximateLength - startLength;
+                    if (!context.reportedDiagnostic && !context.encounteredError) {
+                        if (context.truncating) {
+                            result.truncating = true;
+                        }
+                        result.addedLength = addedLength;
+                        (_b = links === null || links === void 0 ? void 0 : links.serializedTypes) === null || _b === void 0 ? void 0 : _b.set(key, result);
+                    }
                     context.visitedTypes.delete(typeId);
                     if (id) {
                         context.symbolDepth.set(id, depth);
                     }
                     return result;
+                    function deepCloneOrReuseNode(node) {
+                        if (!ts.nodeIsSynthesized(node) && ts.getParseTreeNode(node) === node) {
+                            return node;
+                        }
+                        return ts.setTextRange(ts.factory.cloneNode(ts.visitEachChild(node, deepCloneOrReuseNode, ts.nullTransformationContext)), node);
+                    }
                 }
                 function createTypeNodeFromObjectType(type) {
                     if (isGenericMappedType(type) || type.containsError) {
                         return createMappedTypeNodeFromType(type);
                     }
                     var resolved = resolveStructuredTypeMembers(type);
-                    if (!resolved.properties.length && !resolved.stringIndexInfo && !resolved.numberIndexInfo) {
+                    if (!resolved.properties.length && !resolved.indexInfos.length) {
                         if (!resolved.callSignatures.length && !resolved.constructSignatures.length) {
                             context.approximateLength += 2;
                             return ts.setEmitFlags(ts.factory.createTypeLiteralNode(/*members*/ undefined), 1 /* SingleLine */);
                         }
                         if (resolved.callSignatures.length === 1 && !resolved.constructSignatures.length) {
                             var signature = resolved.callSignatures[0];
-                            var signatureNode = signatureToSignatureDeclarationHelper(signature, 175 /* FunctionType */, context);
+                            var signatureNode = signatureToSignatureDeclarationHelper(signature, 177 /* FunctionType */, context);
                             return signatureNode;
                         }
                         if (resolved.constructSignatures.length === 1 && !resolved.callSignatures.length) {
                             var signature = resolved.constructSignatures[0];
-                            var signatureNode = signatureToSignatureDeclarationHelper(signature, 176 /* ConstructorType */, context);
+                            var signatureNode = signatureToSignatureDeclarationHelper(signature, 178 /* ConstructorType */, context);
                             return signatureNode;
                         }
                     }
@@ -49295,8 +50385,7 @@
                         // count the number of type elements excluding abstract constructors
                         var typeElementCount = resolved.callSignatures.length +
                             (resolved.constructSignatures.length - abstractSignatures.length) +
-                            (resolved.stringIndexInfo ? 1 : 0) +
-                            (resolved.numberIndexInfo ? 1 : 0) +
+                            resolved.indexInfos.length +
                             // exclude `prototype` when writing a class expression as a type literal, as per
                             // the logic in `createTypeNodesFromResolvedType`.
                             (context.flags & 2048 /* WriteClassExpressionAsTypeLiteral */ ?
@@ -49329,9 +50418,10 @@
                         }
                         var elementType = typeToTypeNodeHelper(typeArguments[0], context);
                         var arrayType = ts.factory.createArrayTypeNode(elementType);
-                        return type.target === globalArrayType ? arrayType : ts.factory.createTypeOperatorNode(142 /* ReadonlyKeyword */, arrayType);
+                        return type.target === globalArrayType ? arrayType : ts.factory.createTypeOperatorNode(143 /* ReadonlyKeyword */, arrayType);
                     }
                     else if (type.target.objectFlags & 8 /* Tuple */) {
+                        typeArguments = ts.sameMap(typeArguments, function (t, i) { return removeMissingType(t, !!(type.target.elementFlags[i] & 2 /* Optional */)); });
                         if (typeArguments.length > 0) {
                             var arity = getTypeReferenceArity(type);
                             var tupleConstituentNodes = mapToTypeNodes(typeArguments.slice(0, arity), context);
@@ -49353,12 +50443,12 @@
                                     }
                                 }
                                 var tupleTypeNode = ts.setEmitFlags(ts.factory.createTupleTypeNode(tupleConstituentNodes), 1 /* SingleLine */);
-                                return type.target.readonly ? ts.factory.createTypeOperatorNode(142 /* ReadonlyKeyword */, tupleTypeNode) : tupleTypeNode;
+                                return type.target.readonly ? ts.factory.createTypeOperatorNode(143 /* ReadonlyKeyword */, tupleTypeNode) : tupleTypeNode;
                             }
                         }
                         if (context.encounteredError || (context.flags & 524288 /* AllowEmptyTuple */)) {
                             var tupleTypeNode = ts.setEmitFlags(ts.factory.createTupleTypeNode([]), 1 /* SingleLine */);
-                            return type.target.readonly ? ts.factory.createTypeOperatorNode(142 /* ReadonlyKeyword */, tupleTypeNode) : tupleTypeNode;
+                            return type.target.readonly ? ts.factory.createTypeOperatorNode(143 /* ReadonlyKeyword */, tupleTypeNode) : tupleTypeNode;
                         }
                         context.encounteredError = true;
                         return undefined; // TODO: GH#18217
@@ -49465,34 +50555,25 @@
                     var typeElements = [];
                     for (var _i = 0, _a = resolvedType.callSignatures; _i < _a.length; _i++) {
                         var signature = _a[_i];
-                        typeElements.push(signatureToSignatureDeclarationHelper(signature, 170 /* CallSignature */, context));
+                        typeElements.push(signatureToSignatureDeclarationHelper(signature, 172 /* CallSignature */, context));
                     }
                     for (var _b = 0, _c = resolvedType.constructSignatures; _b < _c.length; _b++) {
                         var signature = _c[_b];
                         if (signature.flags & 4 /* Abstract */)
                             continue;
-                        typeElements.push(signatureToSignatureDeclarationHelper(signature, 171 /* ConstructSignature */, context));
+                        typeElements.push(signatureToSignatureDeclarationHelper(signature, 173 /* ConstructSignature */, context));
                     }
-                    if (resolvedType.stringIndexInfo) {
-                        var indexSignature = void 0;
-                        if (resolvedType.objectFlags & 1024 /* ReverseMapped */) {
-                            indexSignature = indexInfoToIndexSignatureDeclarationHelper(createIndexInfo(anyType, resolvedType.stringIndexInfo.isReadonly, resolvedType.stringIndexInfo.declaration), 0 /* String */, context, createElidedInformationPlaceholder(context));
-                        }
-                        else {
-                            indexSignature = indexInfoToIndexSignatureDeclarationHelper(resolvedType.stringIndexInfo, 0 /* String */, context, /*typeNode*/ undefined);
-                        }
-                        typeElements.push(indexSignature);
-                    }
-                    if (resolvedType.numberIndexInfo) {
-                        typeElements.push(indexInfoToIndexSignatureDeclarationHelper(resolvedType.numberIndexInfo, 1 /* Number */, context, /*typeNode*/ undefined));
+                    for (var _d = 0, _e = resolvedType.indexInfos; _d < _e.length; _d++) {
+                        var info = _e[_d];
+                        typeElements.push(indexInfoToIndexSignatureDeclarationHelper(info, context, resolvedType.objectFlags & 1024 /* ReverseMapped */ ? createElidedInformationPlaceholder(context) : undefined));
                     }
                     var properties = resolvedType.properties;
                     if (!properties) {
                         return typeElements;
                     }
                     var i = 0;
-                    for (var _d = 0, properties_1 = properties; _d < properties_1.length; _d++) {
-                        var propertySymbol = properties_1[_d];
+                    for (var _f = 0, properties_1 = properties; _f < properties_1.length; _f++) {
+                        var propertySymbol = properties_1[_f];
                         i++;
                         if (context.flags & 2048 /* WriteClassExpressionAsTypeLiteral */) {
                             if (propertySymbol.flags & 4194304 /* Prototype */) {
@@ -49517,7 +50598,7 @@
                 if (!(context.flags & 1 /* NoTruncation */)) {
                     return ts.factory.createTypeReferenceNode(ts.factory.createIdentifier("..."), /*typeArguments*/ undefined);
                 }
-                return ts.factory.createKeywordTypeNode(128 /* AnyKeyword */);
+                return ts.factory.createKeywordTypeNode(129 /* AnyKeyword */);
             }
             function shouldUsePlaceholderForProperty(propertySymbol, context) {
                 var _a;
@@ -49533,27 +50614,32 @@
                             && !(ts.getObjectFlags(ts.last(context.reverseMappedStack).propertyType) & 16 /* Anonymous */)));
             }
             function addPropertyToElementList(propertySymbol, context, typeElements) {
-                var _a;
+                var _a, _b;
                 var propertyIsReverseMapped = !!(ts.getCheckFlags(propertySymbol) & 8192 /* ReverseMapped */);
                 var propertyType = shouldUsePlaceholderForProperty(propertySymbol, context) ?
-                    anyType : getTypeOfSymbol(propertySymbol);
+                    anyType : getNonMissingTypeOfSymbol(propertySymbol);
                 var saveEnclosingDeclaration = context.enclosingDeclaration;
                 context.enclosingDeclaration = undefined;
                 if (context.tracker.trackSymbol && ts.getCheckFlags(propertySymbol) & 4096 /* Late */ && isLateBoundName(propertySymbol.escapedName)) {
-                    var decl = ts.first(propertySymbol.declarations);
-                    if (propertySymbol.declarations && hasLateBindableName(decl)) {
-                        if (ts.isBinaryExpression(decl)) {
-                            var name = ts.getNameOfDeclaration(decl);
-                            if (name && ts.isElementAccessExpression(name) && ts.isPropertyAccessEntityNameExpression(name.argumentExpression)) {
-                                trackComputedName(name.argumentExpression, saveEnclosingDeclaration, context);
+                    if (propertySymbol.declarations) {
+                        var decl = ts.first(propertySymbol.declarations);
+                        if (hasLateBindableName(decl)) {
+                            if (ts.isBinaryExpression(decl)) {
+                                var name = ts.getNameOfDeclaration(decl);
+                                if (name && ts.isElementAccessExpression(name) && ts.isPropertyAccessEntityNameExpression(name.argumentExpression)) {
+                                    trackComputedName(name.argumentExpression, saveEnclosingDeclaration, context);
+                                }
+                            }
+                            else {
+                                trackComputedName(decl.name.expression, saveEnclosingDeclaration, context);
                             }
                         }
-                        else {
-                            trackComputedName(decl.name.expression, saveEnclosingDeclaration, context);
-                        }
+                    }
+                    else if ((_a = context.tracker) === null || _a === void 0 ? void 0 : _a.reportNonSerializableProperty) {
+                        context.tracker.reportNonSerializableProperty(symbolToString(propertySymbol));
                     }
                 }
-                context.enclosingDeclaration = propertySymbol.valueDeclaration || ((_a = propertySymbol.declarations) === null || _a === void 0 ? void 0 : _a[0]) || saveEnclosingDeclaration;
+                context.enclosingDeclaration = propertySymbol.valueDeclaration || ((_b = propertySymbol.declarations) === null || _b === void 0 ? void 0 : _b[0]) || saveEnclosingDeclaration;
                 var propertyName = getPropertyNameNodeForSymbol(propertySymbol, context);
                 context.enclosingDeclaration = saveEnclosingDeclaration;
                 context.approximateLength += (ts.symbolName(propertySymbol).length + 1);
@@ -49562,7 +50648,7 @@
                     var signatures = getSignaturesOfType(filterType(propertyType, function (t) { return !(t.flags & 32768 /* Undefined */); }), 0 /* Call */);
                     for (var _i = 0, signatures_1 = signatures; _i < signatures_1.length; _i++) {
                         var signature = signatures_1[_i];
-                        var methodDeclaration = signatureToSignatureDeclarationHelper(signature, 165 /* MethodSignature */, context, { name: propertyName, questionToken: optionalToken });
+                        var methodDeclaration = signatureToSignatureDeclarationHelper(signature, 166 /* MethodSignature */, context, { name: propertyName, questionToken: optionalToken });
                         typeElements.push(preserveCommentsOn(methodDeclaration));
                     }
                 }
@@ -49576,12 +50662,12 @@
                             context.reverseMappedStack || (context.reverseMappedStack = []);
                             context.reverseMappedStack.push(propertySymbol);
                         }
-                        propertyTypeNode = propertyType ? serializeTypeForDeclaration(context, propertyType, propertySymbol, saveEnclosingDeclaration) : ts.factory.createKeywordTypeNode(128 /* AnyKeyword */);
+                        propertyTypeNode = propertyType ? serializeTypeForDeclaration(context, propertyType, propertySymbol, saveEnclosingDeclaration) : ts.factory.createKeywordTypeNode(129 /* AnyKeyword */);
                         if (propertyIsReverseMapped) {
                             context.reverseMappedStack.pop();
                         }
                     }
-                    var modifiers = isReadonlySymbol(propertySymbol) ? [ts.factory.createToken(142 /* ReadonlyKeyword */)] : undefined;
+                    var modifiers = isReadonlySymbol(propertySymbol) ? [ts.factory.createToken(143 /* ReadonlyKeyword */)] : undefined;
                     if (modifiers) {
                         context.approximateLength += 9;
                     }
@@ -49590,8 +50676,8 @@
                 }
                 function preserveCommentsOn(node) {
                     var _a;
-                    if (ts.some(propertySymbol.declarations, function (d) { return d.kind === 337 /* JSDocPropertyTag */; })) {
-                        var d = (_a = propertySymbol.declarations) === null || _a === void 0 ? void 0 : _a.find(function (d) { return d.kind === 337 /* JSDocPropertyTag */; });
+                    if (ts.some(propertySymbol.declarations, function (d) { return d.kind === 342 /* JSDocPropertyTag */; })) {
+                        var d = (_a = propertySymbol.declarations) === null || _a === void 0 ? void 0 : _a.find(function (d) { return d.kind === 342 /* JSDocPropertyTag */; });
                         var commentText = ts.getTextOfJSDocComment(d.comment);
                         if (commentText) {
                             ts.setSyntheticLeadingComments(node, [{ kind: 3 /* MultiLineCommentTrivia */, text: "*\n * " + commentText.replace(/\n/g, "\n * ") + "\n ", pos: -1, end: -1, hasTrailingNewLine: true }]);
@@ -49675,9 +50761,9 @@
                     || !!a.symbol && a.symbol === b.symbol
                     || !!a.aliasSymbol && a.aliasSymbol === b.aliasSymbol;
             }
-            function indexInfoToIndexSignatureDeclarationHelper(indexInfo, kind, context, typeNode) {
+            function indexInfoToIndexSignatureDeclarationHelper(indexInfo, context, typeNode) {
                 var name = ts.getNameFromIndexInfo(indexInfo) || "x";
-                var indexerTypeNode = ts.factory.createKeywordTypeNode(kind === 0 /* String */ ? 147 /* StringKeyword */ : 144 /* NumberKeyword */);
+                var indexerTypeNode = typeToTypeNodeHelper(indexInfo.keyType, context);
                 var indexingParameter = ts.factory.createParameterDeclaration(
                 /*decorators*/ undefined, 
                 /*modifiers*/ undefined, 
@@ -49692,13 +50778,14 @@
                 }
                 context.approximateLength += (name.length + 4);
                 return ts.factory.createIndexSignature(
-                /*decorators*/ undefined, indexInfo.isReadonly ? [ts.factory.createToken(142 /* ReadonlyKeyword */)] : undefined, [indexingParameter], typeNode);
+                /*decorators*/ undefined, indexInfo.isReadonly ? [ts.factory.createToken(143 /* ReadonlyKeyword */)] : undefined, [indexingParameter], typeNode);
             }
             function signatureToSignatureDeclarationHelper(signature, kind, context, options) {
                 var _a, _b, _c, _d;
                 var suppressAny = context.flags & 256 /* SuppressAnyReturnType */;
                 if (suppressAny)
                     context.flags &= ~256 /* SuppressAnyReturnType */; // suppress only toplevel `any`s
+                context.approximateLength += 3; // Usually a signature contributes a few more characters than this, but 3 is the minimum
                 var typeParameters;
                 var typeArguments;
                 if (context.flags & 32 /* WriteTypeArgumentsOfSignature */ && signature.target && signature.mapper && signature.target.typeParameters) {
@@ -49709,7 +50796,7 @@
                 }
                 var expandedParams = getExpandedParameters(signature, /*skipUnionExpanding*/ true)[0];
                 // If the expanded parameter list had a variadic in a non-trailing position, don't expand it
-                var parameters = (ts.some(expandedParams, function (p) { return p !== expandedParams[expandedParams.length - 1] && !!(ts.getCheckFlags(p) & 32768 /* RestParameter */); }) ? signature.parameters : expandedParams).map(function (parameter) { return symbolToParameterDeclaration(parameter, context, kind === 167 /* Constructor */, options === null || options === void 0 ? void 0 : options.privateSymbolVisitor, options === null || options === void 0 ? void 0 : options.bundledImports); });
+                var parameters = (ts.some(expandedParams, function (p) { return p !== expandedParams[expandedParams.length - 1] && !!(ts.getCheckFlags(p) & 32768 /* RestParameter */); }) ? signature.parameters : expandedParams).map(function (parameter) { return symbolToParameterDeclaration(parameter, context, kind === 169 /* Constructor */, options === null || options === void 0 ? void 0 : options.privateSymbolVisitor, options === null || options === void 0 ? void 0 : options.bundledImports); });
                 if (signature.thisParameter) {
                     var thisParameter = symbolToParameterDeclaration(signature.thisParameter, context);
                     parameters.unshift(thisParameter);
@@ -49718,7 +50805,7 @@
                 var typePredicate = getTypePredicateOfSignature(signature);
                 if (typePredicate) {
                     var assertsModifier = typePredicate.kind === 2 /* AssertsThis */ || typePredicate.kind === 3 /* AssertsIdentifier */ ?
-                        ts.factory.createToken(127 /* AssertsKeyword */) :
+                        ts.factory.createToken(128 /* AssertsKeyword */) :
                         undefined;
                     var parameterName = typePredicate.kind === 1 /* Identifier */ || typePredicate.kind === 3 /* AssertsIdentifier */ ?
                         ts.setEmitFlags(ts.factory.createIdentifier(typePredicate.parameterName), 16777216 /* NoAsciiEscaping */) :
@@ -49732,29 +50819,28 @@
                         returnTypeNode = serializeReturnTypeForSignature(context, returnType, signature, options === null || options === void 0 ? void 0 : options.privateSymbolVisitor, options === null || options === void 0 ? void 0 : options.bundledImports);
                     }
                     else if (!suppressAny) {
-                        returnTypeNode = ts.factory.createKeywordTypeNode(128 /* AnyKeyword */);
+                        returnTypeNode = ts.factory.createKeywordTypeNode(129 /* AnyKeyword */);
                     }
                 }
                 var modifiers = options === null || options === void 0 ? void 0 : options.modifiers;
-                if ((kind === 176 /* ConstructorType */) && signature.flags & 4 /* Abstract */) {
+                if ((kind === 178 /* ConstructorType */) && signature.flags & 4 /* Abstract */) {
                     var flags = ts.modifiersToFlags(modifiers);
                     modifiers = ts.factory.createModifiersFromModifierFlags(flags | 128 /* Abstract */);
                 }
-                context.approximateLength += 3; // Usually a signature contributes a few more characters than this, but 3 is the minimum
-                var node = kind === 170 /* CallSignature */ ? ts.factory.createCallSignature(typeParameters, parameters, returnTypeNode) :
-                    kind === 171 /* ConstructSignature */ ? ts.factory.createConstructSignature(typeParameters, parameters, returnTypeNode) :
-                        kind === 165 /* MethodSignature */ ? ts.factory.createMethodSignature(modifiers, (_a = options === null || options === void 0 ? void 0 : options.name) !== null && _a !== void 0 ? _a : ts.factory.createIdentifier(""), options === null || options === void 0 ? void 0 : options.questionToken, typeParameters, parameters, returnTypeNode) :
-                            kind === 166 /* MethodDeclaration */ ? ts.factory.createMethodDeclaration(/*decorators*/ undefined, modifiers, /*asteriskToken*/ undefined, (_b = options === null || options === void 0 ? void 0 : options.name) !== null && _b !== void 0 ? _b : ts.factory.createIdentifier(""), /*questionToken*/ undefined, typeParameters, parameters, returnTypeNode, /*body*/ undefined) :
-                                kind === 167 /* Constructor */ ? ts.factory.createConstructorDeclaration(/*decorators*/ undefined, modifiers, parameters, /*body*/ undefined) :
-                                    kind === 168 /* GetAccessor */ ? ts.factory.createGetAccessorDeclaration(/*decorators*/ undefined, modifiers, (_c = options === null || options === void 0 ? void 0 : options.name) !== null && _c !== void 0 ? _c : ts.factory.createIdentifier(""), parameters, returnTypeNode, /*body*/ undefined) :
-                                        kind === 169 /* SetAccessor */ ? ts.factory.createSetAccessorDeclaration(/*decorators*/ undefined, modifiers, (_d = options === null || options === void 0 ? void 0 : options.name) !== null && _d !== void 0 ? _d : ts.factory.createIdentifier(""), parameters, /*body*/ undefined) :
-                                            kind === 172 /* IndexSignature */ ? ts.factory.createIndexSignature(/*decorators*/ undefined, modifiers, parameters, returnTypeNode) :
-                                                kind === 309 /* JSDocFunctionType */ ? ts.factory.createJSDocFunctionType(parameters, returnTypeNode) :
-                                                    kind === 175 /* FunctionType */ ? ts.factory.createFunctionTypeNode(typeParameters, parameters, returnTypeNode !== null && returnTypeNode !== void 0 ? returnTypeNode : ts.factory.createTypeReferenceNode(ts.factory.createIdentifier(""))) :
-                                                        kind === 176 /* ConstructorType */ ? ts.factory.createConstructorTypeNode(modifiers, typeParameters, parameters, returnTypeNode !== null && returnTypeNode !== void 0 ? returnTypeNode : ts.factory.createTypeReferenceNode(ts.factory.createIdentifier(""))) :
-                                                            kind === 252 /* FunctionDeclaration */ ? ts.factory.createFunctionDeclaration(/*decorators*/ undefined, modifiers, /*asteriskToken*/ undefined, (options === null || options === void 0 ? void 0 : options.name) ? ts.cast(options.name, ts.isIdentifier) : ts.factory.createIdentifier(""), typeParameters, parameters, returnTypeNode, /*body*/ undefined) :
-                                                                kind === 209 /* FunctionExpression */ ? ts.factory.createFunctionExpression(modifiers, /*asteriskToken*/ undefined, (options === null || options === void 0 ? void 0 : options.name) ? ts.cast(options.name, ts.isIdentifier) : ts.factory.createIdentifier(""), typeParameters, parameters, returnTypeNode, ts.factory.createBlock([])) :
-                                                                    kind === 210 /* ArrowFunction */ ? ts.factory.createArrowFunction(modifiers, typeParameters, parameters, returnTypeNode, /*equalsGreaterThanToken*/ undefined, ts.factory.createBlock([])) :
+                var node = kind === 172 /* CallSignature */ ? ts.factory.createCallSignature(typeParameters, parameters, returnTypeNode) :
+                    kind === 173 /* ConstructSignature */ ? ts.factory.createConstructSignature(typeParameters, parameters, returnTypeNode) :
+                        kind === 166 /* MethodSignature */ ? ts.factory.createMethodSignature(modifiers, (_a = options === null || options === void 0 ? void 0 : options.name) !== null && _a !== void 0 ? _a : ts.factory.createIdentifier(""), options === null || options === void 0 ? void 0 : options.questionToken, typeParameters, parameters, returnTypeNode) :
+                            kind === 167 /* MethodDeclaration */ ? ts.factory.createMethodDeclaration(/*decorators*/ undefined, modifiers, /*asteriskToken*/ undefined, (_b = options === null || options === void 0 ? void 0 : options.name) !== null && _b !== void 0 ? _b : ts.factory.createIdentifier(""), /*questionToken*/ undefined, typeParameters, parameters, returnTypeNode, /*body*/ undefined) :
+                                kind === 169 /* Constructor */ ? ts.factory.createConstructorDeclaration(/*decorators*/ undefined, modifiers, parameters, /*body*/ undefined) :
+                                    kind === 170 /* GetAccessor */ ? ts.factory.createGetAccessorDeclaration(/*decorators*/ undefined, modifiers, (_c = options === null || options === void 0 ? void 0 : options.name) !== null && _c !== void 0 ? _c : ts.factory.createIdentifier(""), parameters, returnTypeNode, /*body*/ undefined) :
+                                        kind === 171 /* SetAccessor */ ? ts.factory.createSetAccessorDeclaration(/*decorators*/ undefined, modifiers, (_d = options === null || options === void 0 ? void 0 : options.name) !== null && _d !== void 0 ? _d : ts.factory.createIdentifier(""), parameters, /*body*/ undefined) :
+                                            kind === 174 /* IndexSignature */ ? ts.factory.createIndexSignature(/*decorators*/ undefined, modifiers, parameters, returnTypeNode) :
+                                                kind === 312 /* JSDocFunctionType */ ? ts.factory.createJSDocFunctionType(parameters, returnTypeNode) :
+                                                    kind === 177 /* FunctionType */ ? ts.factory.createFunctionTypeNode(typeParameters, parameters, returnTypeNode !== null && returnTypeNode !== void 0 ? returnTypeNode : ts.factory.createTypeReferenceNode(ts.factory.createIdentifier(""))) :
+                                                        kind === 178 /* ConstructorType */ ? ts.factory.createConstructorTypeNode(modifiers, typeParameters, parameters, returnTypeNode !== null && returnTypeNode !== void 0 ? returnTypeNode : ts.factory.createTypeReferenceNode(ts.factory.createIdentifier(""))) :
+                                                            kind === 254 /* FunctionDeclaration */ ? ts.factory.createFunctionDeclaration(/*decorators*/ undefined, modifiers, /*asteriskToken*/ undefined, (options === null || options === void 0 ? void 0 : options.name) ? ts.cast(options.name, ts.isIdentifier) : ts.factory.createIdentifier(""), typeParameters, parameters, returnTypeNode, /*body*/ undefined) :
+                                                                kind === 211 /* FunctionExpression */ ? ts.factory.createFunctionExpression(modifiers, /*asteriskToken*/ undefined, (options === null || options === void 0 ? void 0 : options.name) ? ts.cast(options.name, ts.isIdentifier) : ts.factory.createIdentifier(""), typeParameters, parameters, returnTypeNode, ts.factory.createBlock([])) :
+                                                                    kind === 212 /* ArrowFunction */ ? ts.factory.createArrowFunction(modifiers, typeParameters, parameters, returnTypeNode, /*equalsGreaterThanToken*/ undefined, ts.factory.createBlock([])) :
                                                                         ts.Debug.assertNever(kind);
                 if (typeArguments) {
                     node.typeArguments = ts.factory.createNodeArray(typeArguments);
@@ -49776,9 +50862,9 @@
                 return typeParameterToDeclarationWithConstraint(type, context, constraintNode);
             }
             function symbolToParameterDeclaration(parameterSymbol, context, preserveModifierFlags, privateSymbolVisitor, bundledImports) {
-                var parameterDeclaration = ts.getDeclarationOfKind(parameterSymbol, 161 /* Parameter */);
+                var parameterDeclaration = ts.getDeclarationOfKind(parameterSymbol, 162 /* Parameter */);
                 if (!parameterDeclaration && !ts.isTransientSymbol(parameterSymbol)) {
-                    parameterDeclaration = ts.getDeclarationOfKind(parameterSymbol, 330 /* JSDocParameterTag */);
+                    parameterDeclaration = ts.getDeclarationOfKind(parameterSymbol, 335 /* JSDocParameterTag */);
                 }
                 var parameterType = getTypeOfSymbol(parameterSymbol);
                 if (parameterDeclaration && isRequiredInitializedParameter(parameterDeclaration)) {
@@ -49792,8 +50878,8 @@
                 var isRest = parameterDeclaration && ts.isRestParameter(parameterDeclaration) || ts.getCheckFlags(parameterSymbol) & 32768 /* RestParameter */;
                 var dotDotDotToken = isRest ? ts.factory.createToken(25 /* DotDotDotToken */) : undefined;
                 var name = parameterDeclaration ? parameterDeclaration.name ?
-                    parameterDeclaration.name.kind === 78 /* Identifier */ ? ts.setEmitFlags(ts.factory.cloneNode(parameterDeclaration.name), 16777216 /* NoAsciiEscaping */) :
-                        parameterDeclaration.name.kind === 158 /* QualifiedName */ ? ts.setEmitFlags(ts.factory.cloneNode(parameterDeclaration.name.right), 16777216 /* NoAsciiEscaping */) :
+                    parameterDeclaration.name.kind === 79 /* Identifier */ ? ts.setEmitFlags(ts.factory.cloneNode(parameterDeclaration.name), 16777216 /* NoAsciiEscaping */) :
+                        parameterDeclaration.name.kind === 159 /* QualifiedName */ ? ts.setEmitFlags(ts.factory.cloneNode(parameterDeclaration.name.right), 16777216 /* NoAsciiEscaping */) :
                             cloneBindingName(parameterDeclaration.name) :
                     ts.symbolName(parameterSymbol) :
                     ts.symbolName(parameterSymbol);
@@ -49958,11 +51044,11 @@
             }
             function getSpecifierForModuleSymbol(symbol, context) {
                 var _a;
-                var file = ts.getDeclarationOfKind(symbol, 298 /* SourceFile */);
+                var file = ts.getDeclarationOfKind(symbol, 300 /* SourceFile */);
                 if (!file) {
                     var equivalentFileSymbol = ts.firstDefined(symbol.declarations, function (d) { return getFileSymbolIfFileSymbolExportEqualsContainer(d, symbol); });
                     if (equivalentFileSymbol) {
-                        file = ts.getDeclarationOfKind(equivalentFileSymbol, 298 /* SourceFile */);
+                        file = ts.getDeclarationOfKind(equivalentFileSymbol, 300 /* SourceFile */);
                     }
                 }
                 if (file && file.moduleName !== undefined) {
@@ -50114,7 +51200,7 @@
                 return false;
             }
             function typeParameterToName(type, context) {
-                var _a;
+                var _a, _b;
                 if (context.flags & 4 /* GenerateNamesForShadowedTypeParams */ && context.typeParameterNames) {
                     var cached = context.typeParameterNames.get(getTypeId(type));
                     if (cached) {
@@ -50122,22 +51208,25 @@
                     }
                 }
                 var result = symbolToName(type.symbol, context, 788968 /* Type */, /*expectsIdentifier*/ true);
-                if (!(result.kind & 78 /* Identifier */)) {
+                if (!(result.kind & 79 /* Identifier */)) {
                     return ts.factory.createIdentifier("(Missing type parameter)");
                 }
                 if (context.flags & 4 /* GenerateNamesForShadowedTypeParams */) {
                     var rawtext = result.escapedText;
-                    var i = 0;
+                    var i = ((_a = context.typeParameterNamesByTextNextNameCount) === null || _a === void 0 ? void 0 : _a.get(rawtext)) || 0;
                     var text = rawtext;
-                    while (((_a = context.typeParameterNamesByText) === null || _a === void 0 ? void 0 : _a.has(text)) || typeParameterShadowsNameInScope(text, context, type)) {
+                    while (((_b = context.typeParameterNamesByText) === null || _b === void 0 ? void 0 : _b.has(text)) || typeParameterShadowsNameInScope(text, context, type)) {
                         i++;
                         text = rawtext + "_" + i;
                     }
                     if (text !== rawtext) {
                         result = ts.factory.createIdentifier(text, result.typeArguments);
                     }
+                    // avoiding iterations of the above loop turns out to be worth it when `i` starts to get large, so we cache the max
+                    // `i` we've used thus far, to save work later
+                    (context.typeParameterNamesByTextNextNameCount || (context.typeParameterNamesByTextNextNameCount = new ts.Map())).set(rawtext, i);
                     (context.typeParameterNames || (context.typeParameterNames = new ts.Map())).set(getTypeId(type), result);
-                    (context.typeParameterNamesByText || (context.typeParameterNamesByText = new ts.Set())).add(result.escapedText);
+                    (context.typeParameterNamesByText || (context.typeParameterNamesByText = new ts.Set())).add(rawtext);
                 }
                 return result;
             }
@@ -50276,6 +51365,7 @@
                 if (initial.typeParameterSymbolList) {
                     initial.typeParameterSymbolList = new ts.Set(initial.typeParameterSymbolList);
                 }
+                initial.tracker = wrapSymbolTrackerToReportForContext(initial, initial.tracker);
                 return initial;
             }
             function getDeclarationWithTypeAnnotation(symbol, enclosingDeclaration) {
@@ -50365,17 +51455,17 @@
                 return transformed === existing ? ts.setTextRange(ts.factory.cloneNode(existing), existing) : transformed;
                 function visitExistingNodeTreeSymbols(node) {
                     // We don't _actually_ support jsdoc namepath types, emit `any` instead
-                    if (ts.isJSDocAllType(node) || node.kind === 311 /* JSDocNamepathType */) {
-                        return ts.factory.createKeywordTypeNode(128 /* AnyKeyword */);
+                    if (ts.isJSDocAllType(node) || node.kind === 314 /* JSDocNamepathType */) {
+                        return ts.factory.createKeywordTypeNode(129 /* AnyKeyword */);
                     }
                     if (ts.isJSDocUnknownType(node)) {
-                        return ts.factory.createKeywordTypeNode(152 /* UnknownKeyword */);
+                        return ts.factory.createKeywordTypeNode(153 /* UnknownKeyword */);
                     }
                     if (ts.isJSDocNullableType(node)) {
                         return ts.factory.createUnionTypeNode([ts.visitNode(node.type, visitExistingNodeTreeSymbols), ts.factory.createLiteralTypeNode(ts.factory.createNull())]);
                     }
                     if (ts.isJSDocOptionalType(node)) {
-                        return ts.factory.createUnionTypeNode([ts.visitNode(node.type, visitExistingNodeTreeSymbols), ts.factory.createKeywordTypeNode(150 /* UndefinedKeyword */)]);
+                        return ts.factory.createUnionTypeNode([ts.visitNode(node.type, visitExistingNodeTreeSymbols), ts.factory.createKeywordTypeNode(151 /* UndefinedKeyword */)]);
                     }
                     if (ts.isJSDocNonNullableType(node)) {
                         return ts.visitNode(node.type, visitExistingNodeTreeSymbols);
@@ -50389,11 +51479,11 @@
                             var typeViaParent = getTypeOfPropertyOfType(getTypeFromTypeNode(node), name.escapedText);
                             var overrideTypeNode = typeViaParent && t.typeExpression && getTypeFromTypeNode(t.typeExpression.type) !== typeViaParent ? typeToTypeNodeHelper(typeViaParent, context) : undefined;
                             return ts.factory.createPropertySignature(
-                            /*modifiers*/ undefined, name, t.isBracketed || t.typeExpression && ts.isJSDocOptionalType(t.typeExpression.type) ? ts.factory.createToken(57 /* QuestionToken */) : undefined, overrideTypeNode || (t.typeExpression && ts.visitNode(t.typeExpression.type, visitExistingNodeTreeSymbols)) || ts.factory.createKeywordTypeNode(128 /* AnyKeyword */));
+                            /*modifiers*/ undefined, name, t.isBracketed || t.typeExpression && ts.isJSDocOptionalType(t.typeExpression.type) ? ts.factory.createToken(57 /* QuestionToken */) : undefined, overrideTypeNode || (t.typeExpression && ts.visitNode(t.typeExpression.type, visitExistingNodeTreeSymbols)) || ts.factory.createKeywordTypeNode(129 /* AnyKeyword */));
                         }));
                     }
                     if (ts.isTypeReferenceNode(node) && ts.isIdentifier(node.typeName) && node.typeName.escapedText === "") {
-                        return ts.setOriginalNode(ts.factory.createKeywordTypeNode(128 /* AnyKeyword */), node);
+                        return ts.setOriginalNode(ts.factory.createKeywordTypeNode(129 /* AnyKeyword */), node);
                     }
                     if ((ts.isExpressionWithTypeArguments(node) || ts.isTypeReferenceNode(node)) && ts.isJSDocIndexSignature(node)) {
                         return ts.factory.createTypeLiteralNode([ts.factory.createIndexSignature(
@@ -50410,13 +51500,13 @@
                             return ts.factory.createConstructorTypeNode(node.modifiers, ts.visitNodes(node.typeParameters, visitExistingNodeTreeSymbols), ts.mapDefined(node.parameters, function (p, i) { return p.name && ts.isIdentifier(p.name) && p.name.escapedText === "new" ? (newTypeNode_1 = p.type, undefined) : ts.factory.createParameterDeclaration(
                             /*decorators*/ undefined, 
                             /*modifiers*/ undefined, getEffectiveDotDotDotForParameter(p), getNameForJSDocFunctionParameter(p, i), p.questionToken, ts.visitNode(p.type, visitExistingNodeTreeSymbols), 
-                            /*initializer*/ undefined); }), ts.visitNode(newTypeNode_1 || node.type, visitExistingNodeTreeSymbols) || ts.factory.createKeywordTypeNode(128 /* AnyKeyword */));
+                            /*initializer*/ undefined); }), ts.visitNode(newTypeNode_1 || node.type, visitExistingNodeTreeSymbols) || ts.factory.createKeywordTypeNode(129 /* AnyKeyword */));
                         }
                         else {
                             return ts.factory.createFunctionTypeNode(ts.visitNodes(node.typeParameters, visitExistingNodeTreeSymbols), ts.map(node.parameters, function (p, i) { return ts.factory.createParameterDeclaration(
                             /*decorators*/ undefined, 
                             /*modifiers*/ undefined, getEffectiveDotDotDotForParameter(p), getNameForJSDocFunctionParameter(p, i), p.questionToken, ts.visitNode(p.type, visitExistingNodeTreeSymbols), 
-                            /*initializer*/ undefined); }), ts.visitNode(node.type, visitExistingNodeTreeSymbols) || ts.factory.createKeywordTypeNode(128 /* AnyKeyword */));
+                            /*initializer*/ undefined); }), ts.visitNode(node.type, visitExistingNodeTreeSymbols) || ts.factory.createKeywordTypeNode(129 /* AnyKeyword */));
                         }
                     }
                     if (ts.isTypeReferenceNode(node) && ts.isInJSDoc(node) && (!existingTypeNodeIsNotReferenceOrIsReferenceWithCompatibleTypeArgumentCount(node, getTypeFromTypeNode(node)) || getIntendedTypeFromJSDocTypeReference(node) || unknownSymbol === resolveTypeReferenceName(getTypeReferenceName(node), 788968 /* Type */, /*ignoreErrors*/ true))) {
@@ -50484,8 +51574,8 @@
                 }
             }
             function symbolTableToDeclarationStatements(symbolTable, context, bundled) {
-                var serializePropertySymbolForClass = makeSerializePropertySymbol(ts.factory.createPropertyDeclaration, 166 /* MethodDeclaration */, /*useAcessors*/ true);
-                var serializePropertySymbolForInterfaceWorker = makeSerializePropertySymbol(function (_decorators, mods, name, question, type) { return ts.factory.createPropertySignature(mods, name, question, type); }, 165 /* MethodSignature */, /*useAcessors*/ false);
+                var serializePropertySymbolForClass = makeSerializePropertySymbol(ts.factory.createPropertyDeclaration, 167 /* MethodDeclaration */, /*useAcessors*/ true);
+                var serializePropertySymbolForInterfaceWorker = makeSerializePropertySymbol(function (_decorators, mods, name, question, type) { return ts.factory.createPropertySignature(mods, name, question, type); }, 166 /* MethodSignature */, /*useAcessors*/ false);
                 // TODO: Use `setOriginalNode` on original declaration names where possible so these declarations see some kind of
                 // declaration mapping
                 // We save the enclosing declaration off here so it's not adjusted by well-meaning declaration
@@ -50506,9 +51596,11 @@
                                 }
                             }
                             else if (oldcontext.tracker && oldcontext.tracker.trackSymbol) {
-                                oldcontext.tracker.trackSymbol(sym, decl, meaning);
+                                return oldcontext.tracker.trackSymbol(sym, decl, meaning);
                             }
+                            return false;
                         } }) });
+                context.tracker = wrapSymbolTrackerToReportForContext(context, context.tracker);
                 ts.forEachEntry(symbolTable, function (symbol, name) {
                     var baseName = ts.unescapeLeadingUnderscores(name);
                     void getInternalSymbolName(symbol, baseName); // Called to cache values into `usedSymbolNames` and `remappedSymbolNames`
@@ -50523,7 +51615,7 @@
                 visitSymbolTable(symbolTable);
                 return mergeRedundantStatements(results);
                 function isIdentifierAndNotUndefined(node) {
-                    return !!node && node.kind === 78 /* Identifier */;
+                    return !!node && node.kind === 79 /* Identifier */;
                 }
                 function getNamesOfDeclaration(statement) {
                     if (ts.isVariableStatement(statement)) {
@@ -50544,12 +51636,12 @@
                         var name_2 = ns.name;
                         var body = ns.body;
                         if (ts.length(excessExports)) {
-                            ns = ts.factory.updateModuleDeclaration(ns, ns.decorators, ns.modifiers, ns.name, body = ts.factory.updateModuleBlock(body, ts.factory.createNodeArray(__spreadArray(__spreadArray([], ns.body.statements), [ts.factory.createExportDeclaration(
+                            ns = ts.factory.updateModuleDeclaration(ns, ns.decorators, ns.modifiers, ns.name, body = ts.factory.updateModuleBlock(body, ts.factory.createNodeArray(__spreadArray(__spreadArray([], ns.body.statements, true), [ts.factory.createExportDeclaration(
                                 /*decorators*/ undefined, 
                                 /*modifiers*/ undefined, 
                                 /*isTypeOnly*/ false, ts.factory.createNamedExports(ts.map(ts.flatMap(excessExports, function (e) { return getNamesOfDeclaration(e); }), function (id) { return ts.factory.createExportSpecifier(/*alias*/ undefined, id); })), 
-                                /*moduleSpecifier*/ undefined)]))));
-                            statements = __spreadArray(__spreadArray(__spreadArray([], statements.slice(0, nsIndex)), [ns]), statements.slice(nsIndex + 1));
+                                /*moduleSpecifier*/ undefined)], false))));
+                            statements = __spreadArray(__spreadArray(__spreadArray([], statements.slice(0, nsIndex), true), [ns], false), statements.slice(nsIndex + 1), true);
                         }
                         // Pass 1: Flatten `export namespace _exports {} export = _exports;` so long as the `export=` only points at a single namespace declaration
                         if (!ts.find(statements, function (s) { return s !== ns && ts.nodeHasName(s, name_2); })) {
@@ -50560,7 +51652,7 @@
                             ts.forEach(body.statements, function (s) {
                                 addResult(s, mixinExportFlag_1 ? 1 /* Export */ : 0 /* None */); // Recalculates the ambient (and export, if applicable from above) flag
                             });
-                            statements = __spreadArray(__spreadArray([], ts.filter(statements, function (s) { return s !== ns && s !== exportAssignment; })), results);
+                            statements = __spreadArray(__spreadArray([], ts.filter(statements, function (s) { return s !== ns && s !== exportAssignment; }), true), results, true);
                         }
                     }
                     return statements;
@@ -50570,11 +51662,11 @@
                     var exports = ts.filter(statements, function (d) { return ts.isExportDeclaration(d) && !d.moduleSpecifier && !!d.exportClause && ts.isNamedExports(d.exportClause); });
                     if (ts.length(exports) > 1) {
                         var nonExports = ts.filter(statements, function (d) { return !ts.isExportDeclaration(d) || !!d.moduleSpecifier || !d.exportClause; });
-                        statements = __spreadArray(__spreadArray([], nonExports), [ts.factory.createExportDeclaration(
+                        statements = __spreadArray(__spreadArray([], nonExports, true), [ts.factory.createExportDeclaration(
                             /*decorators*/ undefined, 
                             /*modifiers*/ undefined, 
                             /*isTypeOnly*/ false, ts.factory.createNamedExports(ts.flatMap(exports, function (e) { return ts.cast(e.exportClause, ts.isNamedExports).elements; })), 
-                            /*moduleSpecifier*/ undefined)]);
+                            /*moduleSpecifier*/ undefined)], false);
                     }
                     // Pass 2b: Also combine all `export {} from "..."` declarations as needed
                     var reexports = ts.filter(statements, function (d) { return ts.isExportDeclaration(d) && !!d.moduleSpecifier && !!d.exportClause && ts.isNamedExports(d.exportClause); });
@@ -50584,12 +51676,12 @@
                             var _loop_9 = function (group_1) {
                                 if (group_1.length > 1) {
                                     // remove group members from statements and then merge group members and add back to statements
-                                    statements = __spreadArray(__spreadArray([], ts.filter(statements, function (s) { return group_1.indexOf(s) === -1; })), [
+                                    statements = __spreadArray(__spreadArray([], ts.filter(statements, function (s) { return group_1.indexOf(s) === -1; }), true), [
                                         ts.factory.createExportDeclaration(
                                         /*decorators*/ undefined, 
                                         /*modifiers*/ undefined, 
                                         /*isTypeOnly*/ false, ts.factory.createNamedExports(ts.flatMap(group_1, function (e) { return ts.cast(e.exportClause, ts.isNamedExports).elements; })), group_1[0].moduleSpecifier)
-                                    ]);
+                                    ], false);
                                 }
                             };
                             for (var _i = 0, groups_1 = groups; _i < groups_1.length; _i++) {
@@ -50692,6 +51784,9 @@
                         var oldContext = context;
                         context = cloneNodeBuilderContext(context);
                         var result = serializeSymbolWorker(symbol, isPrivate, propertyAsAlias);
+                        if (context.reportedDiagnostic) {
+                            oldcontext.reportedDiagnostic = context.reportedDiagnostic; // hoist diagnostic result into outer context
+                        }
                         context = oldContext;
                         return result;
                     }
@@ -50940,13 +52035,13 @@
                     var baseTypes = getBaseTypes(interfaceType);
                     var baseType = ts.length(baseTypes) ? getIntersectionType(baseTypes) : undefined;
                     var members = ts.flatMap(getPropertiesOfType(interfaceType), function (p) { return serializePropertySymbolForInterface(p, baseType); });
-                    var callSignatures = serializeSignatures(0 /* Call */, interfaceType, baseType, 170 /* CallSignature */);
-                    var constructSignatures = serializeSignatures(1 /* Construct */, interfaceType, baseType, 171 /* ConstructSignature */);
+                    var callSignatures = serializeSignatures(0 /* Call */, interfaceType, baseType, 172 /* CallSignature */);
+                    var constructSignatures = serializeSignatures(1 /* Construct */, interfaceType, baseType, 173 /* ConstructSignature */);
                     var indexSignatures = serializeIndexSignatures(interfaceType, baseType);
-                    var heritageClauses = !ts.length(baseTypes) ? undefined : [ts.factory.createHeritageClause(93 /* ExtendsKeyword */, ts.mapDefined(baseTypes, function (b) { return trySerializeAsTypeReference(b, 111551 /* Value */); }))];
+                    var heritageClauses = !ts.length(baseTypes) ? undefined : [ts.factory.createHeritageClause(94 /* ExtendsKeyword */, ts.mapDefined(baseTypes, function (b) { return trySerializeAsTypeReference(b, 111551 /* Value */); }))];
                     addResult(ts.factory.createInterfaceDeclaration(
                     /*decorators*/ undefined, 
-                    /*modifiers*/ undefined, getInternalSymbolName(symbol, symbolName), typeParamDecls, heritageClauses, __spreadArray(__spreadArray(__spreadArray(__spreadArray([], indexSignatures), constructSignatures), callSignatures), members)), modifierFlags);
+                    /*modifiers*/ undefined, getInternalSymbolName(symbol, symbolName), typeParamDecls, heritageClauses, __spreadArray(__spreadArray(__spreadArray(__spreadArray([], indexSignatures, true), constructSignatures, true), callSignatures, true), members, true)), modifierFlags);
                 }
                 function getNamespaceMembersForSerialization(symbol) {
                     return !symbol.exports ? [] : ts.filter(ts.arrayFrom(symbol.exports.values()), isNamespaceMember);
@@ -51010,7 +52105,7 @@
                     for (var _i = 0, signatures_2 = signatures; _i < signatures_2.length; _i++) {
                         var sig = signatures_2[_i];
                         // Each overload becomes a separate function declaration, in order
-                        var decl = signatureToSignatureDeclarationHelper(sig, 252 /* FunctionDeclaration */, context, { name: ts.factory.createIdentifier(localName), privateSymbolVisitor: includePrivateSymbol, bundledImports: bundled });
+                        var decl = signatureToSignatureDeclarationHelper(sig, 254 /* FunctionDeclaration */, context, { name: ts.factory.createIdentifier(localName), privateSymbolVisitor: includePrivateSymbol, bundledImports: bundled });
                         addResult(ts.setTextRange(decl, getSignatureTextRangeLocation(sig)), modifierFlags);
                     }
                     // Module symbol emit will take care of module-y members, provided it has exports
@@ -51084,7 +52179,7 @@
                 }
                 function isNamespaceMember(p) {
                     return !!(p.flags & (788968 /* Type */ | 1920 /* Namespace */ | 2097152 /* Alias */)) ||
-                        !(p.flags & 4194304 /* Prototype */ || p.escapedName === "prototype" || p.valueDeclaration && ts.getEffectiveModifierFlags(p.valueDeclaration) & 32 /* Static */ && ts.isClassLike(p.valueDeclaration.parent));
+                        !(p.flags & 4194304 /* Prototype */ || p.escapedName === "prototype" || p.valueDeclaration && ts.isStatic(p.valueDeclaration) && ts.isClassLike(p.valueDeclaration.parent));
                 }
                 function sanitizeJSDocImplements(clauses) {
                     var result = ts.mapDefined(clauses, function (e) {
@@ -51133,7 +52228,7 @@
                     var staticBaseType = isClass
                         ? getBaseConstructorTypeOfClass(staticType)
                         : anyType;
-                    var heritageClauses = __spreadArray(__spreadArray([], !ts.length(baseTypes) ? [] : [ts.factory.createHeritageClause(93 /* ExtendsKeyword */, ts.map(baseTypes, function (b) { return serializeBaseType(b, staticBaseType, localName); }))]), !ts.length(implementsExpressions) ? [] : [ts.factory.createHeritageClause(116 /* ImplementsKeyword */, implementsExpressions)]);
+                    var heritageClauses = __spreadArray(__spreadArray([], !ts.length(baseTypes) ? [] : [ts.factory.createHeritageClause(94 /* ExtendsKeyword */, ts.map(baseTypes, function (b) { return serializeBaseType(b, staticBaseType, localName); }))], true), !ts.length(implementsExpressions) ? [] : [ts.factory.createHeritageClause(117 /* ImplementsKeyword */, implementsExpressions)], true);
                     var symbolProps = getNonInterhitedProperties(classType, baseTypes, getPropertiesOfType(classType));
                     var publicSymbolProps = ts.filter(symbolProps, function (s) {
                         // `valueDeclaration` could be undefined if inherited from
@@ -51170,12 +52265,12 @@
                         !ts.some(getSignaturesOfType(staticType, 1 /* Construct */));
                     var constructors = isNonConstructableClassLikeInJsFile ?
                         [ts.factory.createConstructorDeclaration(/*decorators*/ undefined, ts.factory.createModifiersFromModifierFlags(8 /* Private */), [], /*body*/ undefined)] :
-                        serializeSignatures(1 /* Construct */, staticType, staticBaseType, 167 /* Constructor */);
+                        serializeSignatures(1 /* Construct */, staticType, staticBaseType, 169 /* Constructor */);
                     var indexSignatures = serializeIndexSignatures(classType, baseTypes[0]);
                     context.enclosingDeclaration = oldEnclosing;
                     addResult(ts.setTextRange(ts.factory.createClassDeclaration(
                     /*decorators*/ undefined, 
-                    /*modifiers*/ undefined, localName, typeParamDecls, heritageClauses, __spreadArray(__spreadArray(__spreadArray(__spreadArray(__spreadArray([], indexSignatures), staticMembers), constructors), publicProperties), privateProperties)), symbol.declarations && ts.filter(symbol.declarations, function (d) { return ts.isClassDeclaration(d) || ts.isClassExpression(d); })[0]), modifierFlags);
+                    /*modifiers*/ undefined, localName, typeParamDecls, heritageClauses, __spreadArray(__spreadArray(__spreadArray(__spreadArray(__spreadArray([], indexSignatures, true), staticMembers, true), constructors, true), publicProperties, true), privateProperties, true)), symbol.declarations && ts.filter(symbol.declarations, function (d) { return ts.isClassDeclaration(d) || ts.isClassExpression(d); })[0]), modifierFlags);
                 }
                 function serializeAsAlias(symbol, localName, modifierFlags) {
                     var _a, _b, _c, _d, _e;
@@ -51197,8 +52292,8 @@
                     var targetName = getInternalSymbolName(target, verbatimTargetName);
                     includePrivateSymbol(target); // the target may be within the same scope - attempt to serialize it first
                     switch (node.kind) {
-                        case 199 /* BindingElement */:
-                            if (((_b = (_a = node.parent) === null || _a === void 0 ? void 0 : _a.parent) === null || _b === void 0 ? void 0 : _b.kind) === 250 /* VariableDeclaration */) {
+                        case 201 /* BindingElement */:
+                            if (((_b = (_a = node.parent) === null || _a === void 0 ? void 0 : _a.parent) === null || _b === void 0 ? void 0 : _b.kind) === 252 /* VariableDeclaration */) {
                                 // const { SomeClass } = require('./lib');
                                 var specifier_1 = getSpecifierForModuleSymbol(target.parent || target, context); // './lib'
                                 var propertyName = node.propertyName;
@@ -51210,13 +52305,13 @@
                             // We don't know how to serialize this (nested?) binding element
                             ts.Debug.failBadSyntaxKind(((_c = node.parent) === null || _c === void 0 ? void 0 : _c.parent) || node, "Unhandled binding element grandparent kind in declaration serialization");
                             break;
-                        case 290 /* ShorthandPropertyAssignment */:
-                            if (((_e = (_d = node.parent) === null || _d === void 0 ? void 0 : _d.parent) === null || _e === void 0 ? void 0 : _e.kind) === 217 /* BinaryExpression */) {
+                        case 292 /* ShorthandPropertyAssignment */:
+                            if (((_e = (_d = node.parent) === null || _d === void 0 ? void 0 : _d.parent) === null || _e === void 0 ? void 0 : _e.kind) === 219 /* BinaryExpression */) {
                                 // module.exports = { SomeClass }
                                 serializeExportSpecifier(ts.unescapeLeadingUnderscores(symbol.escapedName), targetName);
                             }
                             break;
-                        case 250 /* VariableDeclaration */:
+                        case 252 /* VariableDeclaration */:
                             // commonjs require: const x = require('y')
                             if (ts.isPropertyAccessExpression(node.initializer)) {
                                 // const x = require('y').z
@@ -51236,7 +52331,7 @@
                                 break;
                             }
                         // else fall through and treat commonjs require just like import=
-                        case 261 /* ImportEqualsDeclaration */:
+                        case 263 /* ImportEqualsDeclaration */:
                             // This _specifically_ only exists to handle json declarations - where we make aliases, but since
                             // we emit no declarations for the json document, must not refer to it in the declarations
                             if (target.escapedName === "export=" /* ExportEquals */ && ts.some(target.declarations, ts.isJsonSourceFile)) {
@@ -51253,13 +52348,13 @@
                                 ? symbolToName(target, context, 67108863 /* All */, /*expectsIdentifier*/ false)
                                 : ts.factory.createExternalModuleReference(ts.factory.createStringLiteral(getSpecifierForModuleSymbol(target, context)))), isLocalImport ? modifierFlags : 0 /* None */);
                             break;
-                        case 260 /* NamespaceExportDeclaration */:
+                        case 262 /* NamespaceExportDeclaration */:
                             // export as namespace foo
                             // TODO: Not part of a file's local or export symbol tables
                             // Is bound into file.symbol.globalExports instead, which we don't currently traverse
                             addResult(ts.factory.createNamespaceExportDeclaration(ts.idText(node.name)), 0 /* None */);
                             break;
-                        case 263 /* ImportClause */:
+                        case 265 /* ImportClause */:
                             addResult(ts.factory.createImportDeclaration(
                             /*decorators*/ undefined, 
                             /*modifiers*/ undefined, ts.factory.createImportClause(/*isTypeOnly*/ false, ts.factory.createIdentifier(localName), /*namedBindings*/ undefined), 
@@ -51268,18 +52363,18 @@
                             // In such cases, the `target` refers to the module itself already
                             ts.factory.createStringLiteral(getSpecifierForModuleSymbol(target.parent || target, context))), 0 /* None */);
                             break;
-                        case 264 /* NamespaceImport */:
+                        case 266 /* NamespaceImport */:
                             addResult(ts.factory.createImportDeclaration(
                             /*decorators*/ undefined, 
                             /*modifiers*/ undefined, ts.factory.createImportClause(/*isTypeOnly*/ false, /*importClause*/ undefined, ts.factory.createNamespaceImport(ts.factory.createIdentifier(localName))), ts.factory.createStringLiteral(getSpecifierForModuleSymbol(target, context))), 0 /* None */);
                             break;
-                        case 270 /* NamespaceExport */:
+                        case 272 /* NamespaceExport */:
                             addResult(ts.factory.createExportDeclaration(
                             /*decorators*/ undefined, 
                             /*modifiers*/ undefined, 
                             /*isTypeOnly*/ false, ts.factory.createNamespaceExport(ts.factory.createIdentifier(localName)), ts.factory.createStringLiteral(getSpecifierForModuleSymbol(target, context))), 0 /* None */);
                             break;
-                        case 266 /* ImportSpecifier */:
+                        case 268 /* ImportSpecifier */:
                             addResult(ts.factory.createImportDeclaration(
                             /*decorators*/ undefined, 
                             /*modifiers*/ undefined, ts.factory.createImportClause(
@@ -51288,7 +52383,7 @@
                                 ts.factory.createImportSpecifier(localName !== verbatimTargetName ? ts.factory.createIdentifier(verbatimTargetName) : undefined, ts.factory.createIdentifier(localName))
                             ])), ts.factory.createStringLiteral(getSpecifierForModuleSymbol(target.parent || target, context))), 0 /* None */);
                             break;
-                        case 271 /* ExportSpecifier */:
+                        case 273 /* ExportSpecifier */:
                             // does not use localName because the symbol name in this case refers to the name in the exports table,
                             // which we must exactly preserve
                             var specifier = node.parent.parent.moduleSpecifier;
@@ -51296,12 +52391,12 @@
                             // another file
                             serializeExportSpecifier(ts.unescapeLeadingUnderscores(symbol.escapedName), specifier ? verbatimTargetName : targetName, specifier && ts.isStringLiteralLike(specifier) ? ts.factory.createStringLiteral(specifier.text) : undefined);
                             break;
-                        case 267 /* ExportAssignment */:
+                        case 269 /* ExportAssignment */:
                             serializeMaybeAliasAssignment(symbol);
                             break;
-                        case 217 /* BinaryExpression */:
-                        case 202 /* PropertyAccessExpression */:
-                        case 203 /* ElementAccessExpression */:
+                        case 219 /* BinaryExpression */:
+                        case 204 /* PropertyAccessExpression */:
+                        case 205 /* ElementAccessExpression */:
                             // Could be best encoded as though an export specifier or as though an export assignment
                             // If name is default or export=, do an export assignment
                             // Otherwise do an export specifier
@@ -51356,7 +52451,7 @@
                         // a visibility error here (as they're not visible within any scope), but we want to hoist them
                         // into the containing scope anyway, so we want to skip the visibility checks.
                         var oldTrack = context.tracker.trackSymbol;
-                        context.tracker.trackSymbol = ts.noop;
+                        context.tracker.trackSymbol = function () { return false; };
                         if (isExportAssignmentCompatibleSymbolName) {
                             results.push(ts.factory.createExportAssignment(
                             /*decorators*/ undefined, 
@@ -51422,8 +52517,7 @@
                     // whose input is not type annotated (if the input symbol has an annotation we can reuse, we should prefer it)
                     var ctxSrc = ts.getSourceFileOfNode(context.enclosingDeclaration);
                     return ts.getObjectFlags(typeToSerialize) & (16 /* Anonymous */ | 32 /* Mapped */) &&
-                        !getIndexInfoOfType(typeToSerialize, 0 /* String */) &&
-                        !getIndexInfoOfType(typeToSerialize, 1 /* Number */) &&
+                        !ts.length(getIndexInfosOfType(typeToSerialize)) &&
                         !isClassInstanceSide(typeToSerialize) && // While a class instance is potentially representable as a NS, prefer printing a reference to the instance type and serializing the class
                         !!(ts.length(ts.filter(getPropertiesOfType(typeToSerialize), isNamespaceMember)) || ts.length(getSignaturesOfType(typeToSerialize, 0 /* Call */))) &&
                         !ts.length(getSignaturesOfType(typeToSerialize, 1 /* Construct */)) && // TODO: could probably serialize as function + ns + class, now that that's OK
@@ -51561,20 +52655,17 @@
                 }
                 function serializeIndexSignatures(input, baseType) {
                     var results = [];
-                    for (var _i = 0, _a = [0 /* String */, 1 /* Number */]; _i < _a.length; _i++) {
-                        var type = _a[_i];
-                        var info = getIndexInfoOfType(input, type);
-                        if (info) {
-                            if (baseType) {
-                                var baseInfo = getIndexInfoOfType(baseType, type);
-                                if (baseInfo) {
-                                    if (isTypeIdenticalTo(info.type, baseInfo.type)) {
-                                        continue; // elide identical index signatures
-                                    }
+                    for (var _i = 0, _a = getIndexInfosOfType(input); _i < _a.length; _i++) {
+                        var info = _a[_i];
+                        if (baseType) {
+                            var baseInfo = getIndexInfoOfType(baseType, info.keyType);
+                            if (baseInfo) {
+                                if (isTypeIdenticalTo(info.type, baseInfo.type)) {
+                                    continue; // elide identical index signatures
                                 }
                             }
-                            results.push(indexInfoToIndexSignatureDeclarationHelper(info, type, context, /*typeNode*/ undefined));
                         }
+                        results.push(indexInfoToIndexSignatureDeclarationHelper(info, context, /*typeNode*/ undefined));
                     }
                     return results;
                 }
@@ -51671,7 +52762,7 @@
             if (flags === void 0) { flags = 16384 /* UseAliasDefinedOutsideCurrentScope */; }
             return writer ? typePredicateToStringWorker(writer).getText() : ts.usingSingleLineStringWriter(typePredicateToStringWorker);
             function typePredicateToStringWorker(writer) {
-                var predicate = ts.factory.createTypePredicateNode(typePredicate.kind === 2 /* AssertsThis */ || typePredicate.kind === 3 /* AssertsIdentifier */ ? ts.factory.createToken(127 /* AssertsKeyword */) : undefined, typePredicate.kind === 1 /* Identifier */ || typePredicate.kind === 3 /* AssertsIdentifier */ ? ts.factory.createIdentifier(typePredicate.parameterName) : ts.factory.createThisTypeNode(), typePredicate.type && nodeBuilder.typeToTypeNode(typePredicate.type, enclosingDeclaration, toNodeBuilderFlags(flags) | 70221824 /* IgnoreErrors */ | 512 /* WriteTypeParametersInQualifiedName */) // TODO: GH#18217
+                var predicate = ts.factory.createTypePredicateNode(typePredicate.kind === 2 /* AssertsThis */ || typePredicate.kind === 3 /* AssertsIdentifier */ ? ts.factory.createToken(128 /* AssertsKeyword */) : undefined, typePredicate.kind === 1 /* Identifier */ || typePredicate.kind === 3 /* AssertsIdentifier */ ? ts.factory.createIdentifier(typePredicate.parameterName) : ts.factory.createThisTypeNode(), typePredicate.type && nodeBuilder.typeToTypeNode(typePredicate.type, enclosingDeclaration, toNodeBuilderFlags(flags) | 70221824 /* IgnoreErrors */ | 512 /* WriteTypeParametersInQualifiedName */) // TODO: GH#18217
                 );
                 var printer = ts.createPrinter({ removeComments: true });
                 var sourceFile = enclosingDeclaration && ts.getSourceFileOfNode(enclosingDeclaration);
@@ -51718,7 +52809,7 @@
         function getTypeAliasForTypeLiteral(type) {
             if (type.symbol && type.symbol.flags & 2048 /* TypeLiteral */ && type.symbol.declarations) {
                 var node = ts.walkUpParenthesizedTypes(type.symbol.declarations[0].parent);
-                if (node.kind === 255 /* TypeAliasDeclaration */) {
+                if (node.kind === 257 /* TypeAliasDeclaration */) {
                     return getSymbolOfNode(node);
                 }
             }
@@ -51726,11 +52817,11 @@
         }
         function isTopLevelInExternalModuleAugmentation(node) {
             return node && node.parent &&
-                node.parent.kind === 258 /* ModuleBlock */ &&
+                node.parent.kind === 260 /* ModuleBlock */ &&
                 ts.isExternalModuleAugmentation(node.parent.parent);
         }
         function isDefaultBindingContext(location) {
-            return location.kind === 298 /* SourceFile */ || ts.isAmbientModule(location);
+            return location.kind === 300 /* SourceFile */ || ts.isAmbientModule(location);
         }
         function getNameOfSymbolFromNameType(symbol, context) {
             var nameType = getSymbolLinks(symbol).nameType;
@@ -51789,17 +52880,17 @@
                 if (!declaration) {
                     declaration = symbol.declarations[0]; // Declaration may be nameless, but we'll try anyway
                 }
-                if (declaration.parent && declaration.parent.kind === 250 /* VariableDeclaration */) {
+                if (declaration.parent && declaration.parent.kind === 252 /* VariableDeclaration */) {
                     return ts.declarationNameToString(declaration.parent.name);
                 }
                 switch (declaration.kind) {
-                    case 222 /* ClassExpression */:
-                    case 209 /* FunctionExpression */:
-                    case 210 /* ArrowFunction */:
+                    case 224 /* ClassExpression */:
+                    case 211 /* FunctionExpression */:
+                    case 212 /* ArrowFunction */:
                         if (context && !context.encounteredError && !(context.flags & 131072 /* AllowAnonymousIdentifier */)) {
                             context.encounteredError = true;
                         }
-                        return declaration.kind === 222 /* ClassExpression */ ? "(Anonymous class)" : "(Anonymous function)";
+                        return declaration.kind === 224 /* ClassExpression */ ? "(Anonymous class)" : "(Anonymous function)";
                 }
             }
             var name = getNameOfSymbolFromNameType(symbol, context);
@@ -51816,28 +52907,28 @@
             return false;
             function determineIfDeclarationIsVisible() {
                 switch (node.kind) {
-                    case 328 /* JSDocCallbackTag */:
-                    case 335 /* JSDocTypedefTag */:
-                    case 329 /* JSDocEnumTag */:
+                    case 333 /* JSDocCallbackTag */:
+                    case 340 /* JSDocTypedefTag */:
+                    case 334 /* JSDocEnumTag */:
                         // Top-level jsdoc type aliases are considered exported
                         // First parent is comment node, second is hosting declaration or token; we only care about those tokens or declarations whose parent is a source file
                         return !!(node.parent && node.parent.parent && node.parent.parent.parent && ts.isSourceFile(node.parent.parent.parent));
-                    case 199 /* BindingElement */:
+                    case 201 /* BindingElement */:
                         return isDeclarationVisible(node.parent.parent);
-                    case 250 /* VariableDeclaration */:
+                    case 252 /* VariableDeclaration */:
                         if (ts.isBindingPattern(node.name) &&
                             !node.name.elements.length) {
                             // If the binding pattern is empty, this variable declaration is not visible
                             return false;
                         }
                     // falls through
-                    case 257 /* ModuleDeclaration */:
-                    case 253 /* ClassDeclaration */:
-                    case 254 /* InterfaceDeclaration */:
-                    case 255 /* TypeAliasDeclaration */:
-                    case 252 /* FunctionDeclaration */:
-                    case 256 /* EnumDeclaration */:
-                    case 261 /* ImportEqualsDeclaration */:
+                    case 259 /* ModuleDeclaration */:
+                    case 255 /* ClassDeclaration */:
+                    case 256 /* InterfaceDeclaration */:
+                    case 257 /* TypeAliasDeclaration */:
+                    case 254 /* FunctionDeclaration */:
+                    case 258 /* EnumDeclaration */:
+                    case 263 /* ImportEqualsDeclaration */:
                         // external module augmentation is always visible
                         if (ts.isExternalModuleAugmentation(node)) {
                             return true;
@@ -51845,55 +52936,55 @@
                         var parent = getDeclarationContainer(node);
                         // If the node is not exported or it is not ambient module element (except import declaration)
                         if (!(ts.getCombinedModifierFlags(node) & 1 /* Export */) &&
-                            !(node.kind !== 261 /* ImportEqualsDeclaration */ && parent.kind !== 298 /* SourceFile */ && parent.flags & 8388608 /* Ambient */)) {
+                            !(node.kind !== 263 /* ImportEqualsDeclaration */ && parent.kind !== 300 /* SourceFile */ && parent.flags & 8388608 /* Ambient */)) {
                             return isGlobalSourceFile(parent);
                         }
                         // Exported members/ambient module elements (exception import declaration) are visible if parent is visible
                         return isDeclarationVisible(parent);
-                    case 164 /* PropertyDeclaration */:
-                    case 163 /* PropertySignature */:
-                    case 168 /* GetAccessor */:
-                    case 169 /* SetAccessor */:
-                    case 166 /* MethodDeclaration */:
-                    case 165 /* MethodSignature */:
+                    case 165 /* PropertyDeclaration */:
+                    case 164 /* PropertySignature */:
+                    case 170 /* GetAccessor */:
+                    case 171 /* SetAccessor */:
+                    case 167 /* MethodDeclaration */:
+                    case 166 /* MethodSignature */:
                         if (ts.hasEffectiveModifier(node, 8 /* Private */ | 16 /* Protected */)) {
                             // Private/protected properties/methods are not visible
                             return false;
                         }
                     // Public properties/methods are visible if its parents are visible, so:
                     // falls through
-                    case 167 /* Constructor */:
-                    case 171 /* ConstructSignature */:
-                    case 170 /* CallSignature */:
-                    case 172 /* IndexSignature */:
-                    case 161 /* Parameter */:
-                    case 258 /* ModuleBlock */:
-                    case 175 /* FunctionType */:
-                    case 176 /* ConstructorType */:
-                    case 178 /* TypeLiteral */:
-                    case 174 /* TypeReference */:
-                    case 179 /* ArrayType */:
-                    case 180 /* TupleType */:
-                    case 183 /* UnionType */:
-                    case 184 /* IntersectionType */:
-                    case 187 /* ParenthesizedType */:
-                    case 193 /* NamedTupleMember */:
+                    case 169 /* Constructor */:
+                    case 173 /* ConstructSignature */:
+                    case 172 /* CallSignature */:
+                    case 174 /* IndexSignature */:
+                    case 162 /* Parameter */:
+                    case 260 /* ModuleBlock */:
+                    case 177 /* FunctionType */:
+                    case 178 /* ConstructorType */:
+                    case 180 /* TypeLiteral */:
+                    case 176 /* TypeReference */:
+                    case 181 /* ArrayType */:
+                    case 182 /* TupleType */:
+                    case 185 /* UnionType */:
+                    case 186 /* IntersectionType */:
+                    case 189 /* ParenthesizedType */:
+                    case 195 /* NamedTupleMember */:
                         return isDeclarationVisible(node.parent);
                     // Default binding, import specifier and namespace import is visible
                     // only on demand so by default it is not visible
-                    case 263 /* ImportClause */:
-                    case 264 /* NamespaceImport */:
-                    case 266 /* ImportSpecifier */:
+                    case 265 /* ImportClause */:
+                    case 266 /* NamespaceImport */:
+                    case 268 /* ImportSpecifier */:
                         return false;
                     // Type parameters are always visible
-                    case 160 /* TypeParameter */:
+                    case 161 /* TypeParameter */:
                     // Source file and namespace export are always visible
                     // falls through
-                    case 298 /* SourceFile */:
-                    case 260 /* NamespaceExportDeclaration */:
+                    case 300 /* SourceFile */:
+                    case 262 /* NamespaceExportDeclaration */:
                         return true;
                     // Export assignments do not create name bindings outside the module
-                    case 267 /* ExportAssignment */:
+                    case 269 /* ExportAssignment */:
                         return false;
                     default:
                         return false;
@@ -51902,10 +52993,10 @@
         }
         function collectLinkedAliases(node, setVisibility) {
             var exportSymbol;
-            if (node.parent && node.parent.kind === 267 /* ExportAssignment */) {
+            if (node.parent && node.parent.kind === 269 /* ExportAssignment */) {
                 exportSymbol = resolveName(node, node.escapedText, 111551 /* Value */ | 788968 /* Type */ | 1920 /* Namespace */ | 2097152 /* Alias */, /*nameNotFoundMessage*/ undefined, node, /*isUse*/ false);
             }
-            else if (node.parent.kind === 271 /* ExportSpecifier */) {
+            else if (node.parent.kind === 273 /* ExportSpecifier */) {
                 exportSymbol = getTargetOfExportSpecifier(node.parent, 111551 /* Value */ | 788968 /* Type */ | 1920 /* Namespace */ | 2097152 /* Alias */);
             }
             var result;
@@ -52010,12 +53101,12 @@
         function getDeclarationContainer(node) {
             return ts.findAncestor(ts.getRootDeclaration(node), function (node) {
                 switch (node.kind) {
-                    case 250 /* VariableDeclaration */:
-                    case 251 /* VariableDeclarationList */:
-                    case 266 /* ImportSpecifier */:
-                    case 265 /* NamedImports */:
-                    case 264 /* NamespaceImport */:
-                    case 263 /* ImportClause */:
+                    case 252 /* VariableDeclaration */:
+                    case 253 /* VariableDeclarationList */:
+                    case 268 /* ImportSpecifier */:
+                    case 267 /* NamedImports */:
+                    case 266 /* NamespaceImport */:
+                    case 265 /* ImportClause */:
                         return false;
                     default:
                         return true;
@@ -52036,7 +53127,8 @@
             return prop ? getTypeOfSymbol(prop) : undefined;
         }
         function getTypeOfPropertyOrIndexSignature(type, name) {
-            return getTypeOfPropertyOfType(type, name) || isNumericLiteralName(name) && getIndexTypeOfType(type, 1 /* Number */) || getIndexTypeOfType(type, 0 /* String */) || unknownType;
+            var _a;
+            return getTypeOfPropertyOfType(type, name) || ((_a = getApplicableIndexInfoForName(type, name)) === null || _a === void 0 ? void 0 : _a.type) || unknownType;
         }
         function isTypeAny(type) {
             return type && (type.flags & 1 /* Any */) !== 0;
@@ -52075,9 +53167,7 @@
                     members.set(prop.escapedName, getSpreadSymbol(prop, /*readonly*/ false));
                 }
             }
-            var stringIndexInfo = getIndexInfoOfType(source, 0 /* String */);
-            var numberIndexInfo = getIndexInfoOfType(source, 1 /* Number */);
-            var result = createAnonymousType(symbol, members, ts.emptyArray, ts.emptyArray, stringIndexInfo, numberIndexInfo);
+            var result = createAnonymousType(symbol, members, ts.emptyArray, ts.emptyArray, getIndexInfosOfType(source));
             result.objectFlags |= 8388608 /* ObjectRestType */;
             return result;
         }
@@ -52122,23 +53212,23 @@
         function getParentElementAccess(node) {
             var ancestor = node.parent.parent;
             switch (ancestor.kind) {
-                case 199 /* BindingElement */:
-                case 289 /* PropertyAssignment */:
+                case 201 /* BindingElement */:
+                case 291 /* PropertyAssignment */:
                     return getSyntheticElementAccess(ancestor);
-                case 200 /* ArrayLiteralExpression */:
+                case 202 /* ArrayLiteralExpression */:
                     return getSyntheticElementAccess(node.parent);
-                case 250 /* VariableDeclaration */:
+                case 252 /* VariableDeclaration */:
                     return ancestor.initializer;
-                case 217 /* BinaryExpression */:
+                case 219 /* BinaryExpression */:
                     return ancestor.right;
             }
         }
         function getDestructuringPropertyName(node) {
             var parent = node.parent;
-            if (node.kind === 199 /* BindingElement */ && parent.kind === 197 /* ObjectBindingPattern */) {
+            if (node.kind === 201 /* BindingElement */ && parent.kind === 199 /* ObjectBindingPattern */) {
                 return getLiteralPropertyNameText(node.propertyName || node.name);
             }
-            if (node.kind === 289 /* PropertyAssignment */ || node.kind === 290 /* ShorthandPropertyAssignment */) {
+            if (node.kind === 291 /* PropertyAssignment */ || node.kind === 292 /* ShorthandPropertyAssignment */) {
                 return getLiteralPropertyNameText(node.name);
             }
             return "" + parent.elements.indexOf(node);
@@ -52164,7 +53254,7 @@
                 parentType = getTypeWithFacts(parentType, 524288 /* NEUndefined */);
             }
             var type;
-            if (pattern.kind === 197 /* ObjectBindingPattern */) {
+            if (pattern.kind === 199 /* ObjectBindingPattern */) {
                 if (declaration.dotDotDotToken) {
                     parentType = getReducedType(parentType);
                     if (parentType.flags & 2 /* Unknown */ || !isValidSpreadType(parentType)) {
@@ -52184,7 +53274,7 @@
                     // Use explicitly specified property name ({ p: xxx } form), or otherwise the implied name ({ p } form)
                     var name = declaration.propertyName || declaration.name;
                     var indexType = getLiteralTypeFromPropertyName(name);
-                    var declaredType = getIndexedAccessType(parentType, indexType, /*noUncheckedIndexedAccessCandidate*/ undefined, name, /*aliasSymbol*/ undefined, /*aliasTypeArguments*/ undefined, 16 /* ExpressionPosition */);
+                    var declaredType = getIndexedAccessType(parentType, indexType, 32 /* ExpressionPosition */, name);
                     type = getFlowTypeOfDestructuring(declaration, declaredType);
                 }
             }
@@ -52203,9 +53293,9 @@
                         createArrayType(elementType);
                 }
                 else if (isArrayLikeType(parentType)) {
-                    var indexType = getLiteralType(index_2);
-                    var accessFlags = hasDefaultValue(declaration) ? 8 /* NoTupleBoundsCheck */ : 0;
-                    var declaredType = getIndexedAccessTypeOrUndefined(parentType, indexType, /*noUncheckedIndexedAccessCandidate*/ undefined, declaration.name, accessFlags | 16 /* ExpressionPosition */) || errorType;
+                    var indexType = getNumberLiteralType(index_2);
+                    var accessFlags = 32 /* ExpressionPosition */ | (hasDefaultValue(declaration) ? 16 /* NoTupleBoundsCheck */ : 0);
+                    var declaredType = getIndexedAccessTypeOrUndefined(parentType, indexType, accessFlags, declaration.name) || errorType;
                     type = getFlowTypeOfDestructuring(declaration, declaredType);
                 }
                 else {
@@ -52231,25 +53321,26 @@
         }
         function isNullOrUndefined(node) {
             var expr = ts.skipParentheses(node);
-            return expr.kind === 103 /* NullKeyword */ || expr.kind === 78 /* Identifier */ && getResolvedSymbol(expr) === undefinedSymbol;
+            return expr.kind === 104 /* NullKeyword */ || expr.kind === 79 /* Identifier */ && getResolvedSymbol(expr) === undefinedSymbol;
         }
         function isEmptyArrayLiteral(node) {
             var expr = ts.skipParentheses(node);
-            return expr.kind === 200 /* ArrayLiteralExpression */ && expr.elements.length === 0;
+            return expr.kind === 202 /* ArrayLiteralExpression */ && expr.elements.length === 0;
         }
-        function addOptionality(type, optional) {
-            if (optional === void 0) { optional = true; }
-            return strictNullChecks && optional ? getOptionalType(type) : type;
+        function addOptionality(type, isProperty, isOptional) {
+            if (isProperty === void 0) { isProperty = false; }
+            if (isOptional === void 0) { isOptional = true; }
+            return strictNullChecks && isOptional ? getOptionalType(type, isProperty) : type;
         }
         // Return the inferred type for a variable, parameter, or property declaration
         function getTypeForVariableLikeDeclaration(declaration, includeOptionality) {
             // A variable declared in a for..in statement is of type string, or of type keyof T when the
             // right hand expression is of a type parameter type.
-            if (ts.isVariableDeclaration(declaration) && declaration.parent.parent.kind === 239 /* ForInStatement */) {
+            if (ts.isVariableDeclaration(declaration) && declaration.parent.parent.kind === 241 /* ForInStatement */) {
                 var indexType = getIndexType(getNonNullableTypeIfNeeded(checkExpression(declaration.parent.parent.expression)));
                 return indexType.flags & (262144 /* TypeParameter */ | 4194304 /* Index */) ? getExtractStringType(indexType) : stringType;
             }
-            if (ts.isVariableDeclaration(declaration) && declaration.parent.parent.kind === 240 /* ForOfStatement */) {
+            if (ts.isVariableDeclaration(declaration) && declaration.parent.parent.kind === 242 /* ForOfStatement */) {
                 // checkRightHandSideOfForOf will return undefined if the for-of expression type was
                 // missing properties/signatures required to get its iteratedType (like
                 // [Symbol.iterator] or next). This may be because we accessed properties from anyType,
@@ -52260,13 +53351,14 @@
             if (ts.isBindingPattern(declaration.parent)) {
                 return getTypeForBindingElement(declaration);
             }
-            var isOptional = includeOptionality && (ts.isParameter(declaration) && isJSDocOptionalParameter(declaration)
-                || isOptionalJSDocPropertyLikeTag(declaration)
-                || !ts.isBindingElement(declaration) && !ts.isVariableDeclaration(declaration) && !!declaration.questionToken);
+            var isProperty = ts.isPropertyDeclaration(declaration) || ts.isPropertySignature(declaration);
+            var isOptional = includeOptionality && (isProperty && !!declaration.questionToken ||
+                ts.isParameter(declaration) && (!!declaration.questionToken || isJSDocOptionalParameter(declaration)) ||
+                isOptionalJSDocPropertyLikeTag(declaration));
             // Use type from type annotation if one is present
             var declaredType = tryGetTypeFromEffectiveTypeNode(declaration);
             if (declaredType) {
-                return addOptionality(declaredType, isOptional);
+                return addOptionality(declaredType, isProperty, isOptional);
             }
             if ((noImplicitAny || ts.isInJSFile(declaration)) &&
                 ts.isVariableDeclaration(declaration) && !ts.isBindingPattern(declaration.name) &&
@@ -52286,8 +53378,8 @@
             if (ts.isParameter(declaration)) {
                 var func = declaration.parent;
                 // For a parameter of a set accessor, use the type of the get accessor if one is present
-                if (func.kind === 169 /* SetAccessor */ && hasBindableName(func)) {
-                    var getter = ts.getDeclarationOfKind(getSymbolOfNode(declaration.parent), 168 /* GetAccessor */);
+                if (func.kind === 171 /* SetAccessor */ && hasBindableName(func)) {
+                    var getter = ts.getDeclarationOfKind(getSymbolOfNode(declaration.parent), 170 /* GetAccessor */);
                     if (getter) {
                         var getterSignature = getSignatureFromDeclaration(getter);
                         var thisParameter = getAccessorThisParameter(func);
@@ -52310,7 +53402,7 @@
                 // Use contextual parameter type if one is available
                 var type = declaration.symbol.escapedName === "this" /* This */ ? getContextualThisParameterType(func) : getContextuallyTypedParameterType(declaration);
                 if (type) {
-                    return addOptionality(type, isOptional);
+                    return addOptionality(type, /*isProperty*/ false, isOptional);
                 }
             }
             // Use the type of the initializer expression if one is present and the declaration is
@@ -52323,16 +53415,25 @@
                     }
                 }
                 var type = widenTypeInferredFromInitializer(declaration, checkDeclarationInitializer(declaration));
-                return addOptionality(type, isOptional);
+                return addOptionality(type, isProperty, isOptional);
             }
-            if (ts.isPropertyDeclaration(declaration) && !ts.hasStaticModifier(declaration) && (noImplicitAny || ts.isInJSFile(declaration))) {
+            if (ts.isPropertyDeclaration(declaration) && (noImplicitAny || ts.isInJSFile(declaration))) {
                 // We have a property declaration with no type annotation or initializer, in noImplicitAny mode or a .js file.
-                // Use control flow analysis of this.xxx assignments in the constructor to determine the type of the property.
-                var constructor = findConstructorDeclaration(declaration.parent);
-                var type = constructor ? getFlowTypeInConstructor(declaration.symbol, constructor) :
-                    ts.getEffectiveModifierFlags(declaration) & 2 /* Ambient */ ? getTypeOfPropertyInBaseClass(declaration.symbol) :
-                        undefined;
-                return type && addOptionality(type, isOptional);
+                // Use control flow analysis of this.xxx assignments in the constructor or static block to determine the type of the property.
+                if (!ts.hasStaticModifier(declaration)) {
+                    var constructor = findConstructorDeclaration(declaration.parent);
+                    var type = constructor ? getFlowTypeInConstructor(declaration.symbol, constructor) :
+                        ts.getEffectiveModifierFlags(declaration) & 2 /* Ambient */ ? getTypeOfPropertyInBaseClass(declaration.symbol) :
+                            undefined;
+                    return type && addOptionality(type, /*isProperty*/ true, isOptional);
+                }
+                else {
+                    var staticBlocks = ts.filter(declaration.parent.members, ts.isClassStaticBlockDeclaration);
+                    var type = staticBlocks.length ? getFlowTypeInStaticBlocks(declaration.symbol, staticBlocks) :
+                        ts.getEffectiveModifierFlags(declaration) & 2 /* Ambient */ ? getTypeOfPropertyInBaseClass(declaration.symbol) :
+                            undefined;
+                    return type && addOptionality(type, /*isProperty*/ true, isOptional);
+                }
             }
             if (ts.isJsxAttribute(declaration)) {
                 // if JSX attribute doesn't have initializer, by default the attribute will have boolean value of true.
@@ -52358,7 +53459,7 @@
                     links.isConstructorDeclaredProperty = !!getDeclaringConstructor(symbol) && ts.every(symbol.declarations, function (declaration) {
                         return ts.isBinaryExpression(declaration) &&
                             isPossiblyAliasedThisProperty(declaration) &&
-                            (declaration.left.kind !== 203 /* ElementAccessExpression */ || ts.isStringOrNumericLiteralLike(declaration.left.argumentExpression)) &&
+                            (declaration.left.kind !== 205 /* ElementAccessExpression */ || ts.isStringOrNumericLiteralLike(declaration.left.argumentExpression)) &&
                             !getAnnotatedTypeForAssignmentDeclaration(/*declaredType*/ undefined, declaration, symbol, declaration);
                     });
                 }
@@ -52380,7 +53481,7 @@
             for (var _i = 0, _a = symbol.declarations; _i < _a.length; _i++) {
                 var declaration = _a[_i];
                 var container = ts.getThisContainer(declaration, /*includeArrowFunctions*/ false);
-                if (container && (container.kind === 167 /* Constructor */ || isJSConstructor(container))) {
+                if (container && (container.kind === 169 /* Constructor */ || isJSConstructor(container))) {
                     return container;
                 }
             }
@@ -52402,6 +53503,27 @@
             reference.flowNode = file.endFlowNode;
             return getFlowTypeOfReference(reference, autoType, undefinedType);
         }
+        function getFlowTypeInStaticBlocks(symbol, staticBlocks) {
+            var accessName = ts.startsWith(symbol.escapedName, "__#")
+                ? ts.factory.createPrivateIdentifier(symbol.escapedName.split("@")[1])
+                : ts.unescapeLeadingUnderscores(symbol.escapedName);
+            for (var _i = 0, staticBlocks_1 = staticBlocks; _i < staticBlocks_1.length; _i++) {
+                var staticBlock = staticBlocks_1[_i];
+                var reference = ts.factory.createPropertyAccessExpression(ts.factory.createThis(), accessName);
+                ts.setParent(reference.expression, reference);
+                ts.setParent(reference, staticBlock);
+                reference.flowNode = staticBlock.returnFlowNode;
+                var flowType = getFlowTypeOfProperty(reference, symbol);
+                if (noImplicitAny && (flowType === autoType || flowType === autoArrayType)) {
+                    error(symbol.valueDeclaration, ts.Diagnostics.Member_0_implicitly_has_an_1_type, symbolToString(symbol), typeToString(flowType));
+                }
+                // We don't infer a type if assignments are only null or undefined.
+                if (everyType(flowType, isNullableType)) {
+                    continue;
+                }
+                return convertAutoToAny(flowType);
+            }
+        }
         function getFlowTypeInConstructor(symbol, constructor) {
             var accessName = ts.startsWith(symbol.escapedName, "__#")
                 ? ts.factory.createPrivateIdentifier(symbol.escapedName.split("@")[1])
@@ -52492,7 +53614,7 @@
                     type = getUnionType(sourceTypes, 2 /* Subtype */);
                 }
             }
-            var widened = getWidenedType(addOptionality(type, definedInMethod && !definedInConstructor));
+            var widened = getWidenedType(addOptionality(type, /*isProperty*/ false, definedInMethod && !definedInConstructor));
             if (symbol.valueDeclaration && filterType(widened, function (t) { return !!(t.flags & ~98304 /* Nullable */); }) === neverType) {
                 reportImplicitAny(symbol.valueDeclaration, anyType);
                 return anyType;
@@ -52516,7 +53638,7 @@
             if ((_b = s === null || s === void 0 ? void 0 : s.exports) === null || _b === void 0 ? void 0 : _b.size) {
                 mergeSymbolTable(exports, s.exports);
             }
-            var type = createAnonymousType(symbol, exports, ts.emptyArray, ts.emptyArray, undefined, undefined);
+            var type = createAnonymousType(symbol, exports, ts.emptyArray, ts.emptyArray, ts.emptyArray);
             type.objectFlags |= 8192 /* JSLiteral */;
             return type;
         }
@@ -52535,7 +53657,10 @@
             if ((_a = symbol.parent) === null || _a === void 0 ? void 0 : _a.valueDeclaration) {
                 var typeNode_2 = ts.getEffectiveTypeAnnotationNode(symbol.parent.valueDeclaration);
                 if (typeNode_2) {
-                    return getTypeOfPropertyOfType(getTypeFromTypeNode(typeNode_2), symbol.escapedName);
+                    var annotationSymbol = getPropertyOfType(getTypeFromTypeNode(typeNode_2), symbol.escapedName);
+                    if (annotationSymbol) {
+                        return getNonMissingTypeOfSymbol(annotationSymbol);
+                    }
                 }
             }
             return declaredType;
@@ -52617,7 +53742,7 @@
                     }
                 });
                 var result = createAnonymousType(initialSize !== members_4.size ? undefined : exportedType.symbol, // Only set the type's symbol if it looks to be the same as the original type
-                members_4, exportedType.callSignatures, exportedType.constructSignatures, exportedType.stringIndexInfo, exportedType.numberIndexInfo);
+                members_4, exportedType.callSignatures, exportedType.constructSignatures, exportedType.indexInfos);
                 result.objectFlags |= (ts.getObjectFlags(type) & 8192 /* JSLiteral */); // Propagate JSLiteral flag
                 if (result.symbol && result.symbol.flags & 32 /* Class */ && type === getDeclaredTypeOfClassOrInterface(result.symbol)) {
                     result.objectFlags |= 16777216 /* IsClassInstanceClone */; // Propagate the knowledge that this type is equivalent to the symbol's class instance type
@@ -52632,16 +53757,16 @@
         }
         function containsSameNamedThisProperty(thisProperty, expression) {
             return ts.isPropertyAccessExpression(thisProperty)
-                && thisProperty.expression.kind === 107 /* ThisKeyword */
+                && thisProperty.expression.kind === 108 /* ThisKeyword */
                 && ts.forEachChildRecursively(expression, function (n) { return isMatchingReference(thisProperty, n); });
         }
         function isDeclarationInConstructor(expression) {
             var thisContainer = ts.getThisContainer(expression, /*includeArrowFunctions*/ false);
             // Properties defined in a constructor (or base constructor, or javascript constructor function) don't get undefined added.
             // Function expressions that are assigned to the prototype count as methods.
-            return thisContainer.kind === 167 /* Constructor */ ||
-                thisContainer.kind === 252 /* FunctionDeclaration */ ||
-                (thisContainer.kind === 209 /* FunctionExpression */ && !ts.isPrototypePropertyAssignment(thisContainer.parent));
+            return thisContainer.kind === 169 /* Constructor */ ||
+                thisContainer.kind === 254 /* FunctionDeclaration */ ||
+                (thisContainer.kind === 211 /* FunctionExpression */ && !ts.isPrototypePropertyAssignment(thisContainer.parent));
         }
         function getConstructorDefinedThisAssignmentTypes(types, declarations) {
             ts.Debug.assert(types.length === declarations.length);
@@ -52683,7 +53808,7 @@
             ts.forEach(pattern.elements, function (e) {
                 var name = e.propertyName || e.name;
                 if (e.dotDotDotToken) {
-                    stringIndexInfo = createIndexInfo(anyType, /*isReadonly*/ false);
+                    stringIndexInfo = createIndexInfo(stringType, anyType, /*isReadonly*/ false);
                     return;
                 }
                 var exprType = getLiteralTypeFromPropertyName(name);
@@ -52699,7 +53824,7 @@
                 symbol.bindingElement = e;
                 members.set(symbol.escapedName, symbol);
             });
-            var result = createAnonymousType(undefined, members, ts.emptyArray, ts.emptyArray, stringIndexInfo, undefined);
+            var result = createAnonymousType(undefined, members, ts.emptyArray, ts.emptyArray, stringIndexInfo ? [stringIndexInfo] : ts.emptyArray);
             result.objectFlags |= objectFlags;
             if (includePatternInType) {
                 result.pattern = pattern;
@@ -52711,7 +53836,7 @@
         function getTypeFromArrayBindingPattern(pattern, includePatternInType, reportErrors) {
             var elements = pattern.elements;
             var lastElement = ts.lastOrUndefined(elements);
-            var restElement = lastElement && lastElement.kind === 199 /* BindingElement */ && lastElement.dotDotDotToken ? lastElement : undefined;
+            var restElement = lastElement && lastElement.kind === 201 /* BindingElement */ && lastElement.dotDotDotToken ? lastElement : undefined;
             if (elements.length === 0 || elements.length === 1 && restElement) {
                 return languageVersion >= 2 /* ES2015 */ ? createIterableType(anyType) : anyArrayType;
             }
@@ -52736,7 +53861,7 @@
         function getTypeFromBindingPattern(pattern, includePatternInType, reportErrors) {
             if (includePatternInType === void 0) { includePatternInType = false; }
             if (reportErrors === void 0) { reportErrors = false; }
-            return pattern.kind === 197 /* ObjectBindingPattern */
+            return pattern.kind === 199 /* ObjectBindingPattern */
                 ? getTypeFromObjectBindingPattern(pattern, includePatternInType, reportErrors)
                 : getTypeFromArrayBindingPattern(pattern, includePatternInType, reportErrors);
         }
@@ -52784,7 +53909,7 @@
         }
         function declarationBelongsToPrivateAmbientMember(declaration) {
             var root = ts.getRootDeclaration(declaration);
-            var memberDeclaration = root.kind === 161 /* Parameter */ ? root.parent : root;
+            var memberDeclaration = root.kind === 162 /* Parameter */ ? root.parent : root;
             return isPrivateWithinAmbient(memberDeclaration);
         }
         function tryGetTypeFromEffectiveTypeNode(declaration) {
@@ -52829,7 +53954,7 @@
                     result.exports = new ts.Map(fileSymbol.exports);
                 var members = ts.createSymbolTable();
                 members.set("exports", result);
-                return createAnonymousType(symbol, members, ts.emptyArray, ts.emptyArray, undefined, undefined);
+                return createAnonymousType(symbol, members, ts.emptyArray, ts.emptyArray, ts.emptyArray);
             }
             // Handle catch clause variables
             ts.Debug.assertIsDefined(symbol.valueDeclaration);
@@ -52837,7 +53962,7 @@
             if (ts.isCatchClauseVariableDeclarationOrBindingElement(declaration)) {
                 var typeNode = ts.getEffectiveTypeAnnotationNode(declaration);
                 if (typeNode === undefined) {
-                    return anyType;
+                    return useUnknownInCatchVariables ? unknownType : anyType;
                 }
                 var type_1 = getTypeOfNode(typeNode);
                 // an errorType will make `checkTryStatement` issue an error
@@ -52859,7 +53984,7 @@
                 return reportCircularityError(symbol);
             }
             var type;
-            if (declaration.kind === 267 /* ExportAssignment */) {
+            if (declaration.kind === 269 /* ExportAssignment */) {
                 type = widenTypeForVariableLikeDeclaration(checkExpressionCached(declaration.expression), declaration);
             }
             else if (ts.isBinaryExpression(declaration) ||
@@ -52930,7 +54055,7 @@
         }
         function getAnnotatedAccessorTypeNode(accessor) {
             if (accessor) {
-                if (accessor.kind === 168 /* GetAccessor */) {
+                if (accessor.kind === 170 /* GetAccessor */) {
                     var getterTypeAnnotation = ts.getEffectiveReturnTypeNode(accessor);
                     return getterTypeAnnotation;
                 }
@@ -52969,7 +54094,7 @@
             if (!popTypeResolution()) {
                 type = anyType;
                 if (noImplicitAny) {
-                    var getter = ts.getDeclarationOfKind(symbol, 168 /* GetAccessor */);
+                    var getter = ts.getDeclarationOfKind(symbol, 170 /* GetAccessor */);
                     error(getter, ts.Diagnostics._0_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_referenced_directly_or_indirectly_in_one_of_its_return_expressions, symbolToString(symbol));
                 }
             }
@@ -52977,8 +54102,8 @@
         }
         function resolveTypeOfAccessors(symbol, writing) {
             if (writing === void 0) { writing = false; }
-            var getter = ts.getDeclarationOfKind(symbol, 168 /* GetAccessor */);
-            var setter = ts.getDeclarationOfKind(symbol, 169 /* SetAccessor */);
+            var getter = ts.getDeclarationOfKind(symbol, 170 /* GetAccessor */);
+            var setter = ts.getDeclarationOfKind(symbol, 171 /* SetAccessor */);
             var setterType = getAnnotatedAccessorType(setter);
             // For write operations, prioritize type annotations on the setter
             if (writing && setterType) {
@@ -53055,9 +54180,9 @@
             if (symbol.flags & 1536 /* Module */ && ts.isShorthandAmbientModuleSymbol(symbol)) {
                 return anyType;
             }
-            else if (declaration && (declaration.kind === 217 /* BinaryExpression */ ||
+            else if (declaration && (declaration.kind === 219 /* BinaryExpression */ ||
                 ts.isAccessExpression(declaration) &&
-                    declaration.parent.kind === 217 /* BinaryExpression */)) {
+                    declaration.parent.kind === 219 /* BinaryExpression */)) {
                 return getWidenedTypeForAssignmentDeclaration(symbol);
             }
             else if (symbol.flags & 512 /* ValueModule */ && declaration && ts.isSourceFile(declaration) && declaration.commonJsModuleIndicator) {
@@ -53126,7 +54251,7 @@
                 return errorType;
             }
             // Check if variable has initializer that circularly references the variable itself
-            if (noImplicitAny && (declaration.kind !== 161 /* Parameter */ || declaration.initializer)) {
+            if (noImplicitAny && (declaration.kind !== 162 /* Parameter */ || declaration.initializer)) {
                 error(symbol.valueDeclaration, ts.Diagnostics._0_implicitly_has_type_any_because_it_does_not_have_a_type_annotation_and_is_referenced_directly_or_indirectly_in_its_own_initializer, symbolToString(symbol));
             }
             // Circularities could also result from parameters in function expressions that end up
@@ -53183,6 +54308,9 @@
             }
             return errorType;
         }
+        function getNonMissingTypeOfSymbol(symbol) {
+            return removeMissingType(getTypeOfSymbol(symbol), !!(symbol.flags & 16777216 /* Optional */));
+        }
         function isReferenceToType(type, target) {
             return type !== undefined
                 && target !== undefined
@@ -53234,46 +54362,46 @@
                     return undefined;
                 }
                 switch (node.kind) {
-                    case 253 /* ClassDeclaration */:
-                    case 222 /* ClassExpression */:
-                    case 254 /* InterfaceDeclaration */:
-                    case 170 /* CallSignature */:
-                    case 171 /* ConstructSignature */:
-                    case 165 /* MethodSignature */:
-                    case 175 /* FunctionType */:
-                    case 176 /* ConstructorType */:
-                    case 309 /* JSDocFunctionType */:
-                    case 252 /* FunctionDeclaration */:
-                    case 166 /* MethodDeclaration */:
-                    case 209 /* FunctionExpression */:
-                    case 210 /* ArrowFunction */:
-                    case 255 /* TypeAliasDeclaration */:
-                    case 334 /* JSDocTemplateTag */:
-                    case 335 /* JSDocTypedefTag */:
-                    case 329 /* JSDocEnumTag */:
-                    case 328 /* JSDocCallbackTag */:
-                    case 191 /* MappedType */:
-                    case 185 /* ConditionalType */: {
+                    case 255 /* ClassDeclaration */:
+                    case 224 /* ClassExpression */:
+                    case 256 /* InterfaceDeclaration */:
+                    case 172 /* CallSignature */:
+                    case 173 /* ConstructSignature */:
+                    case 166 /* MethodSignature */:
+                    case 177 /* FunctionType */:
+                    case 178 /* ConstructorType */:
+                    case 312 /* JSDocFunctionType */:
+                    case 254 /* FunctionDeclaration */:
+                    case 167 /* MethodDeclaration */:
+                    case 211 /* FunctionExpression */:
+                    case 212 /* ArrowFunction */:
+                    case 257 /* TypeAliasDeclaration */:
+                    case 339 /* JSDocTemplateTag */:
+                    case 340 /* JSDocTypedefTag */:
+                    case 334 /* JSDocEnumTag */:
+                    case 333 /* JSDocCallbackTag */:
+                    case 193 /* MappedType */:
+                    case 187 /* ConditionalType */: {
                         var outerTypeParameters = getOuterTypeParameters(node, includeThisTypes);
-                        if (node.kind === 191 /* MappedType */) {
+                        if (node.kind === 193 /* MappedType */) {
                             return ts.append(outerTypeParameters, getDeclaredTypeOfTypeParameter(getSymbolOfNode(node.typeParameter)));
                         }
-                        else if (node.kind === 185 /* ConditionalType */) {
+                        else if (node.kind === 187 /* ConditionalType */) {
                             return ts.concatenate(outerTypeParameters, getInferTypeParameters(node));
                         }
                         var outerAndOwnTypeParameters = appendTypeParameters(outerTypeParameters, ts.getEffectiveTypeParameterDeclarations(node));
                         var thisType = includeThisTypes &&
-                            (node.kind === 253 /* ClassDeclaration */ || node.kind === 222 /* ClassExpression */ || node.kind === 254 /* InterfaceDeclaration */ || isJSConstructor(node)) &&
+                            (node.kind === 255 /* ClassDeclaration */ || node.kind === 224 /* ClassExpression */ || node.kind === 256 /* InterfaceDeclaration */ || isJSConstructor(node)) &&
                             getDeclaredTypeOfClassOrInterface(getSymbolOfNode(node)).thisType;
                         return thisType ? ts.append(outerAndOwnTypeParameters, thisType) : outerAndOwnTypeParameters;
                     }
-                    case 330 /* JSDocParameterTag */:
+                    case 335 /* JSDocParameterTag */:
                         var paramSymbol = ts.getParameterSymbolFromJSDoc(node);
                         if (paramSymbol) {
                             node = paramSymbol.valueDeclaration;
                         }
                         break;
-                    case 312 /* JSDocComment */: {
+                    case 315 /* JSDocComment */: {
                         var outerTypeParameters = getOuterTypeParameters(node, includeThisTypes);
                         return node.tags
                             ? appendTypeParameters(outerTypeParameters, ts.flatMap(node.tags, function (t) { return ts.isJSDocTemplateTag(t) ? t.typeParameters : undefined; }))
@@ -53284,7 +54412,7 @@
         }
         // The outer type parameters are those defined by enclosing generic classes, methods, or functions.
         function getOuterTypeParametersOfClassOrInterface(symbol) {
-            var declaration = symbol.flags & 32 /* Class */ ? symbol.valueDeclaration : ts.getDeclarationOfKind(symbol, 254 /* InterfaceDeclaration */);
+            var declaration = symbol.flags & 32 /* Class */ ? symbol.valueDeclaration : ts.getDeclarationOfKind(symbol, 256 /* InterfaceDeclaration */);
             ts.Debug.assert(!!declaration, "Class was missing valueDeclaration -OR- non-class had no interface declarations");
             return getOuterTypeParameters(declaration);
         }
@@ -53297,9 +54425,9 @@
             var result;
             for (var _i = 0, _a = symbol.declarations; _i < _a.length; _i++) {
                 var node = _a[_i];
-                if (node.kind === 254 /* InterfaceDeclaration */ ||
-                    node.kind === 253 /* ClassDeclaration */ ||
-                    node.kind === 222 /* ClassExpression */ ||
+                if (node.kind === 256 /* InterfaceDeclaration */ ||
+                    node.kind === 255 /* ClassDeclaration */ ||
+                    node.kind === 224 /* ClassExpression */ ||
                     isJSConstructor(node) ||
                     ts.isTypeAlias(node)) {
                     var declaration = node;
@@ -53450,7 +54578,7 @@
                     if (!popTypeResolution() && type.symbol.declarations) {
                         for (var _i = 0, _a = type.symbol.declarations; _i < _a.length; _i++) {
                             var declaration = _a[_i];
-                            if (declaration.kind === 253 /* ClassDeclaration */ || declaration.kind === 254 /* InterfaceDeclaration */) {
+                            if (declaration.kind === 255 /* ClassDeclaration */ || declaration.kind === 256 /* InterfaceDeclaration */) {
                                 reportCircularBaseType(declaration, type);
                             }
                         }
@@ -53546,7 +54674,7 @@
             if (type.symbol.declarations) {
                 for (var _i = 0, _a = type.symbol.declarations; _i < _a.length; _i++) {
                     var declaration = _a[_i];
-                    if (declaration.kind === 254 /* InterfaceDeclaration */ && ts.getInterfaceBaseTypeNodes(declaration)) {
+                    if (declaration.kind === 256 /* InterfaceDeclaration */ && ts.getInterfaceBaseTypeNodes(declaration)) {
                         for (var _b = 0, _c = ts.getInterfaceBaseTypeNodes(declaration); _b < _c.length; _b++) {
                             var node = _c[_b];
                             var baseType = getReducedType(getTypeFromTypeNode(node));
@@ -53586,7 +54714,7 @@
             }
             for (var _i = 0, _a = symbol.declarations; _i < _a.length; _i++) {
                 var declaration = _a[_i];
-                if (declaration.kind === 254 /* InterfaceDeclaration */) {
+                if (declaration.kind === 256 /* InterfaceDeclaration */) {
                     if (declaration.flags & 128 /* ContainsThis */) {
                         return false;
                     }
@@ -53665,7 +54793,12 @@
                 }
                 else {
                     type = errorType;
-                    error(ts.isNamedDeclaration(declaration) ? declaration.name : declaration || declaration, ts.Diagnostics.Type_alias_0_circularly_references_itself, symbolToString(symbol));
+                    if (declaration.kind === 334 /* JSDocEnumTag */) {
+                        error(declaration.typeExpression.type, ts.Diagnostics.Type_alias_0_circularly_references_itself, symbolToString(symbol));
+                    }
+                    else {
+                        error(ts.isNamedDeclaration(declaration) ? declaration.name : declaration || declaration, ts.Diagnostics.Type_alias_0_circularly_references_itself, symbolToString(symbol));
+                    }
                 }
                 links.declaredType = type;
             }
@@ -53675,7 +54808,7 @@
             if (ts.isStringLiteralLike(expr)) {
                 return true;
             }
-            else if (expr.kind === 217 /* BinaryExpression */) {
+            else if (expr.kind === 219 /* BinaryExpression */) {
                 return isStringConcatExpression(expr.left) && isStringConcatExpression(expr.right);
             }
             return false;
@@ -53690,12 +54823,12 @@
                 case 8 /* NumericLiteral */:
                 case 14 /* NoSubstitutionTemplateLiteral */:
                     return true;
-                case 215 /* PrefixUnaryExpression */:
+                case 217 /* PrefixUnaryExpression */:
                     return expr.operator === 40 /* MinusToken */ &&
                         expr.operand.kind === 8 /* NumericLiteral */;
-                case 78 /* Identifier */:
+                case 79 /* Identifier */:
                     return ts.nodeIsMissing(expr) || !!getSymbolOfNode(member.parent).exports.get(expr.escapedText);
-                case 217 /* BinaryExpression */:
+                case 219 /* BinaryExpression */:
                     return isStringConcatExpression(expr);
                 default:
                     return false;
@@ -53710,7 +54843,7 @@
             if (symbol.declarations) {
                 for (var _i = 0, _a = symbol.declarations; _i < _a.length; _i++) {
                     var declaration = _a[_i];
-                    if (declaration.kind === 256 /* EnumDeclaration */) {
+                    if (declaration.kind === 258 /* EnumDeclaration */) {
                         for (var _b = 0, _c = declaration.members; _b < _c.length; _b++) {
                             var member = _c[_b];
                             if (member.initializer && ts.isStringLiteralLike(member.initializer)) {
@@ -53739,11 +54872,11 @@
                 if (symbol.declarations) {
                     for (var _i = 0, _a = symbol.declarations; _i < _a.length; _i++) {
                         var declaration = _a[_i];
-                        if (declaration.kind === 256 /* EnumDeclaration */) {
+                        if (declaration.kind === 258 /* EnumDeclaration */) {
                             for (var _b = 0, _c = declaration.members; _b < _c.length; _b++) {
                                 var member = _c[_b];
                                 var value = getEnumMemberValue(member);
-                                var memberType = getFreshTypeOfLiteralType(getLiteralType(value !== undefined ? value : 0, enumCount, getSymbolOfNode(member)));
+                                var memberType = getFreshTypeOfLiteralType(getEnumLiteralType(value !== undefined ? value : 0, enumCount, getSymbolOfNode(member)));
                                 getSymbolLinks(getSymbolOfNode(member)).declaredType = memberType;
                                 memberTypeList.push(getRegularTypeOfLiteralType(memberType));
                             }
@@ -53812,22 +54945,22 @@
          */
         function isThislessType(node) {
             switch (node.kind) {
-                case 128 /* AnyKeyword */:
-                case 152 /* UnknownKeyword */:
-                case 147 /* StringKeyword */:
-                case 144 /* NumberKeyword */:
-                case 155 /* BigIntKeyword */:
-                case 131 /* BooleanKeyword */:
-                case 148 /* SymbolKeyword */:
-                case 145 /* ObjectKeyword */:
-                case 113 /* VoidKeyword */:
-                case 150 /* UndefinedKeyword */:
-                case 141 /* NeverKeyword */:
-                case 192 /* LiteralType */:
+                case 129 /* AnyKeyword */:
+                case 153 /* UnknownKeyword */:
+                case 148 /* StringKeyword */:
+                case 145 /* NumberKeyword */:
+                case 156 /* BigIntKeyword */:
+                case 132 /* BooleanKeyword */:
+                case 149 /* SymbolKeyword */:
+                case 146 /* ObjectKeyword */:
+                case 114 /* VoidKeyword */:
+                case 151 /* UndefinedKeyword */:
+                case 142 /* NeverKeyword */:
+                case 194 /* LiteralType */:
                     return true;
-                case 179 /* ArrayType */:
+                case 181 /* ArrayType */:
                     return isThislessType(node.elementType);
-                case 174 /* TypeReference */:
+                case 176 /* TypeReference */:
                     return !node.typeArguments || node.typeArguments.every(isThislessType);
             }
             return false;
@@ -53853,7 +54986,7 @@
         function isThislessFunctionLikeDeclaration(node) {
             var returnType = ts.getEffectiveReturnTypeNode(node);
             var typeParameters = ts.getEffectiveTypeParameterDeclarations(node);
-            return (node.kind === 167 /* Constructor */ || (!!returnType && isThislessType(returnType))) &&
+            return (node.kind === 169 /* Constructor */ || (!!returnType && isThislessType(returnType))) &&
                 node.parameters.every(isThislessVariableLikeDeclaration) &&
                 typeParameters.every(isThislessTypeParameter);
         }
@@ -53869,14 +55002,14 @@
                 var declaration = symbol.declarations[0];
                 if (declaration) {
                     switch (declaration.kind) {
-                        case 164 /* PropertyDeclaration */:
-                        case 163 /* PropertySignature */:
+                        case 165 /* PropertyDeclaration */:
+                        case 164 /* PropertySignature */:
                             return isThislessVariableLikeDeclaration(declaration);
-                        case 166 /* MethodDeclaration */:
-                        case 165 /* MethodSignature */:
-                        case 167 /* Constructor */:
-                        case 168 /* GetAccessor */:
-                        case 169 /* SetAccessor */:
+                        case 167 /* MethodDeclaration */:
+                        case 166 /* MethodSignature */:
+                        case 169 /* Constructor */:
+                        case 170 /* GetAccessor */:
+                        case 171 /* SetAccessor */:
                             return isThislessFunctionLikeDeclaration(declaration);
                     }
                 }
@@ -53902,7 +55035,7 @@
             }
         }
         function isStaticPrivateIdentifierProperty(s) {
-            return !!s.valueDeclaration && ts.isPrivateIdentifierClassElementDeclaration(s.valueDeclaration) && ts.hasSyntacticModifier(s.valueDeclaration, 32 /* Static */);
+            return !!s.valueDeclaration && ts.isPrivateIdentifierClassElementDeclaration(s.valueDeclaration) && ts.isStatic(s.valueDeclaration);
         }
         function resolveDeclaredMembers(type) {
             if (!type.declaredProperties) {
@@ -53912,10 +55045,10 @@
                 // Start with signatures at empty array in case of recursive types
                 type.declaredCallSignatures = ts.emptyArray;
                 type.declaredConstructSignatures = ts.emptyArray;
+                type.declaredIndexInfos = ts.emptyArray;
                 type.declaredCallSignatures = getSignaturesOfSymbol(members.get("__call" /* Call */));
                 type.declaredConstructSignatures = getSignaturesOfSymbol(members.get("__new" /* New */));
-                type.declaredStringIndexInfo = getIndexInfoOfSymbol(symbol, 0 /* String */);
-                type.declaredNumberIndexInfo = getIndexInfoOfSymbol(symbol, 1 /* Number */);
+                type.declaredIndexInfos = getIndexInfosOfSymbol(symbol);
             }
             return type;
         }
@@ -53989,7 +55122,7 @@
             if (!symbol.declarations) {
                 symbol.declarations = [member];
             }
-            else {
+            else if (!member.symbol.isReplaceableByMethod) {
                 symbol.declarations.push(member);
             }
             if (symbolFlags & 111551 /* Value */) {
@@ -54071,8 +55204,8 @@
         function getResolvedMembersOrExportsOfSymbol(symbol, resolutionKind) {
             var links = getSymbolLinks(symbol);
             if (!links[resolutionKind]) {
-                var isStatic = resolutionKind === "resolvedExports" /* resolvedExports */;
-                var earlySymbols = !isStatic ? symbol.members :
+                var isStatic_1 = resolutionKind === "resolvedExports" /* resolvedExports */;
+                var earlySymbols = !isStatic_1 ? symbol.members :
                     symbol.flags & 1536 /* Module */ ? getExportsOfModuleWorker(symbol) :
                         symbol.exports;
                 // In the event we recursively resolve the members/exports of the symbol, we
@@ -54087,7 +55220,7 @@
                     if (members) {
                         for (var _b = 0, members_5 = members; _b < members_5.length; _b++) {
                             var member = members_5[_b];
-                            if (isStatic === ts.hasStaticModifier(member) && hasLateBindableName(member)) {
+                            if (isStatic_1 === ts.hasStaticModifier(member) && hasLateBindableName(member)) {
                                 lateBindMember(symbol, earlySymbols, lateSymbols, member);
                             }
                         }
@@ -54103,7 +55236,7 @@
                             || ts.isBinaryExpression(member) && isPossiblyAliasedThisProperty(member, assignmentKind)
                             || assignmentKind === 9 /* ObjectDefinePrototypeProperty */
                             || assignmentKind === 6 /* Prototype */; // A straight `Prototype` assignment probably can never have a computed name
-                        if (isStatic === !isInstanceMember && hasLateBindableName(member)) {
+                        if (isStatic_1 === !isInstanceMember && hasLateBindableName(member)) {
                             lateBindMember(symbol, earlySymbols, lateSymbols, member);
                         }
                     }
@@ -54165,29 +55298,26 @@
             var members;
             var callSignatures;
             var constructSignatures;
-            var stringIndexInfo;
-            var numberIndexInfo;
+            var indexInfos;
             if (ts.rangeEquals(typeParameters, typeArguments, 0, typeParameters.length)) {
                 members = source.symbol ? getMembersOfSymbol(source.symbol) : ts.createSymbolTable(source.declaredProperties);
                 callSignatures = source.declaredCallSignatures;
                 constructSignatures = source.declaredConstructSignatures;
-                stringIndexInfo = source.declaredStringIndexInfo;
-                numberIndexInfo = source.declaredNumberIndexInfo;
+                indexInfos = source.declaredIndexInfos;
             }
             else {
                 mapper = createTypeMapper(typeParameters, typeArguments);
                 members = createInstantiatedSymbolTable(source.declaredProperties, mapper, /*mappingThisOnly*/ typeParameters.length === 1);
                 callSignatures = instantiateSignatures(source.declaredCallSignatures, mapper);
                 constructSignatures = instantiateSignatures(source.declaredConstructSignatures, mapper);
-                stringIndexInfo = instantiateIndexInfo(source.declaredStringIndexInfo, mapper);
-                numberIndexInfo = instantiateIndexInfo(source.declaredNumberIndexInfo, mapper);
+                indexInfos = instantiateIndexInfos(source.declaredIndexInfos, mapper);
             }
             var baseTypes = getBaseTypes(source);
             if (baseTypes.length) {
                 if (source.symbol && members === getMembersOfSymbol(source.symbol)) {
                     members = ts.createSymbolTable(source.declaredProperties);
                 }
-                setStructuredTypeMembers(type, members, callSignatures, constructSignatures, stringIndexInfo, numberIndexInfo);
+                setStructuredTypeMembers(type, members, callSignatures, constructSignatures, indexInfos);
                 var thisArgument = ts.lastOrUndefined(typeArguments);
                 for (var _i = 0, baseTypes_1 = baseTypes; _i < baseTypes_1.length; _i++) {
                     var baseType = baseTypes_1[_i];
@@ -54195,15 +55325,11 @@
                     addInheritedMembers(members, getPropertiesOfType(instantiatedBaseType));
                     callSignatures = ts.concatenate(callSignatures, getSignaturesOfType(instantiatedBaseType, 0 /* Call */));
                     constructSignatures = ts.concatenate(constructSignatures, getSignaturesOfType(instantiatedBaseType, 1 /* Construct */));
-                    if (!stringIndexInfo) {
-                        stringIndexInfo = instantiatedBaseType === anyType ?
-                            createIndexInfo(anyType, /*isReadonly*/ false) :
-                            getIndexInfoOfType(instantiatedBaseType, 0 /* String */);
-                    }
-                    numberIndexInfo = numberIndexInfo || getIndexInfoOfType(instantiatedBaseType, 1 /* Number */);
+                    var inheritedIndexInfos = instantiatedBaseType !== anyType ? getIndexInfosOfType(instantiatedBaseType) : [createIndexInfo(stringType, anyType, /*isReadonly*/ false)];
+                    indexInfos = ts.concatenate(indexInfos, ts.filter(inheritedIndexInfos, function (info) { return !findIndexInfo(indexInfos, info.keyType); }));
                 }
             }
-            setStructuredTypeMembers(type, members, callSignatures, constructSignatures, stringIndexInfo, numberIndexInfo);
+            setStructuredTypeMembers(type, members, callSignatures, constructSignatures, indexInfos);
         }
         function resolveClassOrInterfaceMembers(type) {
             resolveObjectTypeMembers(type, resolveDeclaredMembers(type), ts.emptyArray, ts.emptyArray);
@@ -54513,38 +55639,35 @@
             }
             return result;
         }
-        function getUnionIndexInfo(types, kind) {
-            var indexTypes = [];
-            var isAnyReadonly = false;
-            for (var _i = 0, types_4 = types; _i < types_4.length; _i++) {
-                var type = types_4[_i];
-                var indexInfo = getIndexInfoOfType(getApparentType(type), kind);
-                if (!indexInfo) {
-                    return undefined;
+        function getUnionIndexInfos(types) {
+            var sourceInfos = getIndexInfosOfType(types[0]);
+            if (sourceInfos) {
+                var result = [];
+                var _loop_11 = function (info) {
+                    var indexType = info.keyType;
+                    if (ts.every(types, function (t) { return !!getIndexInfoOfType(t, indexType); })) {
+                        result.push(createIndexInfo(indexType, getUnionType(ts.map(types, function (t) { return getIndexTypeOfType(t, indexType); })), ts.some(types, function (t) { return getIndexInfoOfType(t, indexType).isReadonly; })));
+                    }
+                };
+                for (var _i = 0, sourceInfos_1 = sourceInfos; _i < sourceInfos_1.length; _i++) {
+                    var info = sourceInfos_1[_i];
+                    _loop_11(info);
                 }
-                indexTypes.push(indexInfo.type);
-                isAnyReadonly = isAnyReadonly || indexInfo.isReadonly;
+                return result;
             }
-            return createIndexInfo(getUnionType(indexTypes, 2 /* Subtype */), isAnyReadonly);
+            return ts.emptyArray;
         }
         function resolveUnionTypeMembers(type) {
             // The members and properties collections are empty for union types. To get all properties of a union
             // type use getPropertiesOfType (only the language service uses this).
             var callSignatures = getUnionSignatures(ts.map(type.types, function (t) { return t === globalFunctionType ? [unknownSignature] : getSignaturesOfType(t, 0 /* Call */); }));
             var constructSignatures = getUnionSignatures(ts.map(type.types, function (t) { return getSignaturesOfType(t, 1 /* Construct */); }));
-            var stringIndexInfo = getUnionIndexInfo(type.types, 0 /* String */);
-            var numberIndexInfo = getUnionIndexInfo(type.types, 1 /* Number */);
-            setStructuredTypeMembers(type, emptySymbols, callSignatures, constructSignatures, stringIndexInfo, numberIndexInfo);
+            var indexInfos = getUnionIndexInfos(type.types);
+            setStructuredTypeMembers(type, emptySymbols, callSignatures, constructSignatures, indexInfos);
         }
         function intersectTypes(type1, type2) {
             return !type1 ? type2 : !type2 ? type1 : getIntersectionType([type1, type2]);
         }
-        function intersectIndexInfos(info1, info2) {
-            return !info1 ? info2 : !info2 ? info1 : createIndexInfo(getIntersectionType([info1.type, info2.type]), info1.isReadonly && info2.isReadonly);
-        }
-        function unionSpreadIndexInfos(info1, info2) {
-            return info1 && info2 && createIndexInfo(getUnionType([info1.type, info2.type]), info1.isReadonly || info2.isReadonly);
-        }
         function findMixins(types) {
             var constructorTypeCount = ts.countWhere(types, function (t) { return getSignaturesOfType(t, 1 /* Construct */).length > 0; });
             var mixinFlags = ts.map(types, isMixinConstructorType);
@@ -54571,12 +55694,11 @@
             // intersection type use getPropertiesOfType (only the language service uses this).
             var callSignatures;
             var constructSignatures;
-            var stringIndexInfo;
-            var numberIndexInfo;
+            var indexInfos;
             var types = type.types;
             var mixinFlags = findMixins(types);
             var mixinCount = ts.countWhere(mixinFlags, function (b) { return b; });
-            var _loop_11 = function (i) {
+            var _loop_12 = function (i) {
                 var t = type.types[i];
                 // When an intersection type contains mixin constructor types, the construct signatures from
                 // those types are discarded and their return types are mixed into the return types of all
@@ -54595,54 +55717,62 @@
                     constructSignatures = appendSignatures(constructSignatures, signatures);
                 }
                 callSignatures = appendSignatures(callSignatures, getSignaturesOfType(t, 0 /* Call */));
-                stringIndexInfo = intersectIndexInfos(stringIndexInfo, getIndexInfoOfType(t, 0 /* String */));
-                numberIndexInfo = intersectIndexInfos(numberIndexInfo, getIndexInfoOfType(t, 1 /* Number */));
+                indexInfos = ts.reduceLeft(getIndexInfosOfType(t), function (infos, newInfo) { return appendIndexInfo(infos, newInfo, /*union*/ false); }, indexInfos);
             };
             for (var i = 0; i < types.length; i++) {
-                _loop_11(i);
+                _loop_12(i);
             }
-            setStructuredTypeMembers(type, emptySymbols, callSignatures || ts.emptyArray, constructSignatures || ts.emptyArray, stringIndexInfo, numberIndexInfo);
+            setStructuredTypeMembers(type, emptySymbols, callSignatures || ts.emptyArray, constructSignatures || ts.emptyArray, indexInfos || ts.emptyArray);
         }
         function appendSignatures(signatures, newSignatures) {
-            var _loop_12 = function (sig) {
+            var _loop_13 = function (sig) {
                 if (!signatures || ts.every(signatures, function (s) { return !compareSignaturesIdentical(s, sig, /*partialMatch*/ false, /*ignoreThisTypes*/ false, /*ignoreReturnTypes*/ false, compareTypesIdentical); })) {
                     signatures = ts.append(signatures, sig);
                 }
             };
             for (var _i = 0, newSignatures_1 = newSignatures; _i < newSignatures_1.length; _i++) {
                 var sig = newSignatures_1[_i];
-                _loop_12(sig);
+                _loop_13(sig);
             }
             return signatures;
         }
+        function appendIndexInfo(indexInfos, newInfo, union) {
+            if (indexInfos) {
+                for (var i = 0; i < indexInfos.length; i++) {
+                    var info = indexInfos[i];
+                    if (info.keyType === newInfo.keyType) {
+                        indexInfos[i] = createIndexInfo(info.keyType, union ? getUnionType([info.type, newInfo.type]) : getIntersectionType([info.type, newInfo.type]), union ? info.isReadonly || newInfo.isReadonly : info.isReadonly && newInfo.isReadonly);
+                        return indexInfos;
+                    }
+                }
+            }
+            return ts.append(indexInfos, newInfo);
+        }
         /**
          * Converts an AnonymousType to a ResolvedType.
          */
         function resolveAnonymousTypeMembers(type) {
             var symbol = getMergedSymbol(type.symbol);
             if (type.target) {
-                setStructuredTypeMembers(type, emptySymbols, ts.emptyArray, ts.emptyArray, undefined, undefined);
+                setStructuredTypeMembers(type, emptySymbols, ts.emptyArray, ts.emptyArray, ts.emptyArray);
                 var members = createInstantiatedSymbolTable(getPropertiesOfObjectType(type.target), type.mapper, /*mappingThisOnly*/ false);
                 var callSignatures = instantiateSignatures(getSignaturesOfType(type.target, 0 /* Call */), type.mapper);
                 var constructSignatures = instantiateSignatures(getSignaturesOfType(type.target, 1 /* Construct */), type.mapper);
-                var stringIndexInfo = instantiateIndexInfo(getIndexInfoOfType(type.target, 0 /* String */), type.mapper);
-                var numberIndexInfo = instantiateIndexInfo(getIndexInfoOfType(type.target, 1 /* Number */), type.mapper);
-                setStructuredTypeMembers(type, members, callSignatures, constructSignatures, stringIndexInfo, numberIndexInfo);
+                var indexInfos = instantiateIndexInfos(getIndexInfosOfType(type.target), type.mapper);
+                setStructuredTypeMembers(type, members, callSignatures, constructSignatures, indexInfos);
             }
             else if (symbol.flags & 2048 /* TypeLiteral */) {
-                setStructuredTypeMembers(type, emptySymbols, ts.emptyArray, ts.emptyArray, undefined, undefined);
+                setStructuredTypeMembers(type, emptySymbols, ts.emptyArray, ts.emptyArray, ts.emptyArray);
                 var members = getMembersOfSymbol(symbol);
                 var callSignatures = getSignaturesOfSymbol(members.get("__call" /* Call */));
                 var constructSignatures = getSignaturesOfSymbol(members.get("__new" /* New */));
-                var stringIndexInfo = getIndexInfoOfSymbol(symbol, 0 /* String */);
-                var numberIndexInfo = getIndexInfoOfSymbol(symbol, 1 /* Number */);
-                setStructuredTypeMembers(type, members, callSignatures, constructSignatures, stringIndexInfo, numberIndexInfo);
+                var indexInfos = getIndexInfosOfSymbol(symbol);
+                setStructuredTypeMembers(type, members, callSignatures, constructSignatures, indexInfos);
             }
             else {
                 // Combinations of function, class, enum and module
                 var members = emptySymbols;
-                var stringIndexInfo = void 0;
-                var numberIndexInfo = void 0;
+                var indexInfos = void 0;
                 if (symbol.exports) {
                     members = getExportsOfSymbol(symbol);
                     if (symbol === globalThisSymbol) {
@@ -54656,7 +55786,7 @@
                     }
                 }
                 var baseConstructorIndexInfo = void 0;
-                setStructuredTypeMembers(type, members, ts.emptyArray, ts.emptyArray, undefined, undefined);
+                setStructuredTypeMembers(type, members, ts.emptyArray, ts.emptyArray, ts.emptyArray);
                 if (symbol.flags & 32 /* Class */) {
                     var classType = getDeclaredTypeOfClassOrInterface(symbol);
                     var baseConstructorType = getBaseConstructorTypeOfClass(classType);
@@ -54665,22 +55795,23 @@
                         addInheritedMembers(members, getPropertiesOfType(baseConstructorType));
                     }
                     else if (baseConstructorType === anyType) {
-                        baseConstructorIndexInfo = createIndexInfo(anyType, /*isReadonly*/ false);
+                        baseConstructorIndexInfo = createIndexInfo(stringType, anyType, /*isReadonly*/ false);
                     }
                 }
                 var indexSymbol = getIndexSymbolFromSymbolTable(members);
                 if (indexSymbol) {
-                    stringIndexInfo = getIndexInfoOfIndexSymbol(indexSymbol, 0 /* String */);
-                    numberIndexInfo = getIndexInfoOfIndexSymbol(indexSymbol, 1 /* Number */);
+                    indexInfos = getIndexInfosOfIndexSymbol(indexSymbol);
                 }
                 else {
-                    stringIndexInfo = baseConstructorIndexInfo;
+                    if (baseConstructorIndexInfo) {
+                        indexInfos = ts.append(indexInfos, baseConstructorIndexInfo);
+                    }
                     if (symbol.flags & 384 /* Enum */ && (getDeclaredTypeOfSymbol(symbol).flags & 32 /* Enum */ ||
                         ts.some(type.properties, function (prop) { return !!(getTypeOfSymbol(prop).flags & 296 /* NumberLike */); }))) {
-                        numberIndexInfo = enumNumberIndexInfo;
+                        indexInfos = ts.append(indexInfos, enumNumberIndexInfo);
                     }
                 }
-                setStructuredTypeMembers(type, members, ts.emptyArray, ts.emptyArray, stringIndexInfo, numberIndexInfo);
+                setStructuredTypeMembers(type, members, ts.emptyArray, ts.emptyArray, indexInfos || ts.emptyArray);
                 // We resolve the members before computing the signatures because a signature may use
                 // typeof with a qualified name expression that circularly references the type we are
                 // in the process of resolving (see issue #6072). The temporarily empty signature list
@@ -54708,20 +55839,14 @@
             // map type.indexType to 0
             // map type.objectType to `[TReplacement]`
             // thus making the indexed access `[TReplacement][0]` or `TReplacement`
-            return instantiateType(instantiable, createTypeMapper([type.indexType, type.objectType], [getLiteralType(0), createTupleType([replacement])]));
-        }
-        function getIndexInfoOfIndexSymbol(indexSymbol, indexKind) {
-            var declaration = getIndexDeclarationOfIndexSymbol(indexSymbol, indexKind);
-            if (!declaration)
-                return undefined;
-            return createIndexInfo(declaration.type ? getTypeFromTypeNode(declaration.type) : anyType, ts.hasEffectiveModifier(declaration, 64 /* Readonly */), declaration);
+            return instantiateType(instantiable, createTypeMapper([type.indexType, type.objectType], [getNumberLiteralType(0), createTupleType([replacement])]));
         }
         function resolveReverseMappedTypeMembers(type) {
-            var indexInfo = getIndexInfoOfType(type.source, 0 /* String */);
+            var indexInfo = getIndexInfoOfType(type.source, stringType);
             var modifiers = getMappedTypeModifiers(type.mappedType);
             var readonlyMask = modifiers & 1 /* IncludeReadonly */ ? false : true;
             var optionalMask = modifiers & 4 /* IncludeOptional */ ? 0 : 16777216 /* Optional */;
-            var stringIndexInfo = indexInfo && createIndexInfo(inferReverseMappedType(indexInfo.type, type.mappedType, type.constraintType), readonlyMask && indexInfo.isReadonly);
+            var indexInfos = indexInfo ? [createIndexInfo(stringType, inferReverseMappedType(indexInfo.type, type.mappedType, type.constraintType), readonlyMask && indexInfo.isReadonly)] : ts.emptyArray;
             var members = ts.createSymbolTable();
             for (var _i = 0, _a = getPropertiesOfType(type.source); _i < _a.length; _i++) {
                 var prop = _a[_i];
@@ -54747,7 +55872,7 @@
                 }
                 members.set(prop.escapedName, inferredProp);
             }
-            setStructuredTypeMembers(type, members, ts.emptyArray, ts.emptyArray, stringIndexInfo, undefined);
+            setStructuredTypeMembers(type, members, ts.emptyArray, ts.emptyArray, indexInfos);
         }
         // Return the lower bound of the key type in a mapped type. Intuitively, the lower
         // bound includes those keys that are known to always be present, for example because
@@ -54781,10 +55906,9 @@
         /** Resolve the members of a mapped type { [P in K]: T } */
         function resolveMappedTypeMembers(type) {
             var members = ts.createSymbolTable();
-            var stringIndexInfo;
-            var numberIndexInfo;
+            var indexInfos;
             // Resolve upfront such that recursive references see an empty object type.
-            setStructuredTypeMembers(type, emptySymbols, ts.emptyArray, ts.emptyArray, undefined, undefined);
+            setStructuredTypeMembers(type, emptySymbols, ts.emptyArray, ts.emptyArray, ts.emptyArray);
             // In { [P in K]: T }, we refer to P as the type parameter type, K as the constraint type,
             // and T as the template type.
             var typeParameter = getTypeParameterFromMappedType(type);
@@ -54800,17 +55924,22 @@
                     var prop = _a[_i];
                     addMemberForKeyType(getLiteralTypeFromProperty(prop, include));
                 }
-                if (modifiersType.flags & 1 /* Any */ || getIndexInfoOfType(modifiersType, 0 /* String */)) {
+                if (modifiersType.flags & 1 /* Any */) {
                     addMemberForKeyType(stringType);
                 }
-                if (!keyofStringsOnly && getIndexInfoOfType(modifiersType, 1 /* Number */)) {
-                    addMemberForKeyType(numberType);
+                else {
+                    for (var _b = 0, _c = getIndexInfosOfType(modifiersType); _b < _c.length; _b++) {
+                        var info = _c[_b];
+                        if (!keyofStringsOnly || info.keyType.flags & (4 /* String */ | 134217728 /* TemplateLiteral */)) {
+                            addMemberForKeyType(info.keyType);
+                        }
+                    }
                 }
             }
             else {
                 forEachType(getLowerBoundOfKeyType(constraintType), addMemberForKeyType);
             }
-            setStructuredTypeMembers(type, members, ts.emptyArray, ts.emptyArray, stringIndexInfo, numberIndexInfo);
+            setStructuredTypeMembers(type, members, ts.emptyArray, ts.emptyArray, indexInfos || ts.emptyArray);
             function addMemberForKeyType(keyType) {
                 var propNameType = nameType ? instantiateType(nameType, appendTypeMapping(type.mapper, typeParameter, keyType)) : keyType;
                 forEachType(propNameType, function (t) { return addMemberForKeyTypeWorker(keyType, t); });
@@ -54842,19 +55971,20 @@
                         prop.keyType = keyType;
                         if (modifiersProp) {
                             prop.syntheticOrigin = modifiersProp;
-                            prop.declarations = modifiersProp.declarations;
+                            // If the mapped type has an `as XXX` clause, the property name likely won't match the declaration name and
+                            // multiple properties may map to the same name. Thus, we attach no declarations to the symbol.
+                            prop.declarations = nameType ? undefined : modifiersProp.declarations;
                         }
                         members.set(propName, prop);
                     }
                 }
-                else if (propNameType.flags & (1 /* Any */ | 4 /* String */ | 8 /* Number */ | 32 /* Enum */)) {
+                else if (isValidIndexKeyType(propNameType) || propNameType.flags & (1 /* Any */ | 32 /* Enum */)) {
+                    var indexKeyType = propNameType.flags & (1 /* Any */ | 4 /* String */) ? stringType :
+                        propNameType.flags & (8 /* Number */ | 32 /* Enum */) ? numberType :
+                            propNameType;
                     var propType = instantiateType(templateType, appendTypeMapping(type.mapper, typeParameter, keyType));
-                    if (propNameType.flags & (1 /* Any */ | 4 /* String */)) {
-                        stringIndexInfo = createIndexInfo(stringIndexInfo ? getUnionType([stringIndexInfo.type, propType]) : propType, !!(templateModifiers & 1 /* IncludeReadonly */));
-                    }
-                    else {
-                        numberIndexInfo = createIndexInfo(numberIndexInfo ? getUnionType([numberIndexInfo.type, propType]) : propType, !!(templateModifiers & 1 /* IncludeReadonly */));
-                    }
+                    var indexInfo = createIndexInfo(indexKeyType, propType, !!(templateModifiers & 1 /* IncludeReadonly */));
+                    indexInfos = appendIndexInfo(indexInfos, indexInfo, /*union*/ true);
                 }
             }
         }
@@ -54871,8 +56001,8 @@
                 // When creating an optional property in strictNullChecks mode, if 'undefined' isn't assignable to the
                 // type, we include 'undefined' in the type. Similarly, when creating a non-optional property in strictNullChecks
                 // mode, if the underlying property is optional we remove 'undefined' from the type.
-                var type = strictNullChecks && symbol.flags & 16777216 /* Optional */ && !maybeTypeOfKind(propType, 32768 /* Undefined */ | 16384 /* Void */) ? getOptionalType(propType) :
-                    symbol.checkFlags & 524288 /* StripOptional */ ? getTypeWithFacts(propType, 524288 /* NEUndefined */) :
+                var type = strictNullChecks && symbol.flags & 16777216 /* Optional */ && !maybeTypeOfKind(propType, 32768 /* Undefined */ | 16384 /* Void */) ? getOptionalType(propType, /*isProperty*/ true) :
+                    symbol.checkFlags & 524288 /* StripOptional */ ? removeMissingOrUndefinedType(propType) :
                         propType;
                 if (!popTypeResolution()) {
                     error(currentNode, ts.Diagnostics.Type_of_property_0_circularly_references_itself_in_mapped_type_1, symbolToString(symbol), typeToString(mappedType));
@@ -54898,7 +56028,7 @@
         function getTemplateTypeFromMappedType(type) {
             return type.templateType ||
                 (type.templateType = type.declaration.type ?
-                    instantiateType(addOptionality(getTypeFromTypeNode(type.declaration.type), !!(getMappedTypeModifiers(type) & 4 /* IncludeOptional */)), type.mapper) :
+                    instantiateType(addOptionality(getTypeFromTypeNode(type.declaration.type), /*isProperty*/ true, !!(getMappedTypeModifiers(type) & 4 /* IncludeOptional */)), type.mapper) :
                     errorType);
         }
         function getConstraintDeclarationForMappedType(type) {
@@ -54906,8 +56036,8 @@
         }
         function isMappedTypeWithKeyofConstraintDeclaration(type) {
             var constraintDeclaration = getConstraintDeclarationForMappedType(type); // TODO: GH#18217
-            return constraintDeclaration.kind === 189 /* TypeOperator */ &&
-                constraintDeclaration.operator === 138 /* KeyOfKeyword */;
+            return constraintDeclaration.kind === 191 /* TypeOperator */ &&
+                constraintDeclaration.operator === 139 /* KeyOfKeyword */;
         }
         function getModifiersTypeFromMappedType(type) {
             if (!type.modifiersType) {
@@ -55012,7 +56142,7 @@
                     }
                     // The properties of a union type are those that are present in all constituent types, so
                     // we only need to check the properties of the first type without index signature
-                    if (type.flags & 1048576 /* Union */ && !getIndexInfoOfType(current, 0 /* String */) && !getIndexInfoOfType(current, 1 /* Number */)) {
+                    if (type.flags & 1048576 /* Union */ && getIndexInfosOfType(current).length === 0) {
                         break;
                     }
                 }
@@ -55041,8 +56171,8 @@
                 return getAugmentedPropertiesOfType(unionType);
             }
             var props = ts.createSymbolTable();
-            for (var _i = 0, types_5 = types; _i < types_5.length; _i++) {
-                var memberType = types_5[_i];
+            for (var _i = 0, types_4 = types; _i < types_4.length; _i++) {
+                var memberType = types_4[_i];
                 for (var _a = 0, _b = getAugmentedPropertiesOfType(memberType); _a < _b.length; _a++) {
                     var escapedName = _b[_a].escapedName;
                     if (!props.has(escapedName)) {
@@ -55074,14 +56204,14 @@
         function getConstraintFromIndexedAccess(type) {
             var indexConstraint = getSimplifiedTypeOrConstraint(type.indexType);
             if (indexConstraint && indexConstraint !== type.indexType) {
-                var indexedAccess = getIndexedAccessTypeOrUndefined(type.objectType, indexConstraint, type.noUncheckedIndexedAccessCandidate);
+                var indexedAccess = getIndexedAccessTypeOrUndefined(type.objectType, indexConstraint, type.accessFlags);
                 if (indexedAccess) {
                     return indexedAccess;
                 }
             }
             var objectConstraint = getSimplifiedTypeOrConstraint(type.objectType);
             if (objectConstraint && objectConstraint !== type.objectType) {
-                return getIndexedAccessTypeOrUndefined(objectConstraint, type.indexType, type.noUncheckedIndexedAccessCandidate);
+                return getIndexedAccessTypeOrUndefined(objectConstraint, type.indexType, type.accessFlags);
             }
             return undefined;
         }
@@ -55130,8 +56260,8 @@
         function getEffectiveConstraintOfIntersection(types, targetIsUnion) {
             var constraints;
             var hasDisjointDomainType = false;
-            for (var _i = 0, types_6 = types; _i < types_6.length; _i++) {
-                var t = types_6[_i];
+            for (var _i = 0, types_5 = types; _i < types_5.length; _i++) {
+                var t = types_5[_i];
                 if (t.flags & 465829888 /* Instantiable */) {
                     // We keep following constraints as long as we have an instantiable type that is known
                     // not to be circular or infinite (hence we stop on index access types).
@@ -55156,8 +56286,8 @@
                 if (hasDisjointDomainType) {
                     // We add any types belong to one of the disjoint domains because they might cause the final
                     // intersection operation to reduce the union constraints.
-                    for (var _a = 0, types_7 = types; _a < types_7.length; _a++) {
-                        var t = types_7[_a];
+                    for (var _a = 0, types_6 = types; _a < types_6.length; _a++) {
+                        var t = types_6[_a];
                         if (t.flags & 469892092 /* DisjointDomains */) {
                             constraints = ts.append(constraints, t);
                         }
@@ -55243,8 +56373,8 @@
                     var types = t.types;
                     var baseTypes = [];
                     var different = false;
-                    for (var _i = 0, types_8 = types; _i < types_8.length; _i++) {
-                        var type_3 = types_8[_i];
+                    for (var _i = 0, types_7 = types; _i < types_7.length; _i++) {
+                        var type_3 = types_7[_i];
                         var baseType = getBaseConstraint(type_3);
                         if (baseType) {
                             if (baseType !== type_3) {
@@ -55278,7 +56408,7 @@
                 if (t.flags & 8388608 /* IndexedAccess */) {
                     var baseObjectType = getBaseConstraint(t.objectType);
                     var baseIndexType = getBaseConstraint(t.indexType);
-                    var baseIndexedAccess = baseObjectType && baseIndexType && getIndexedAccessTypeOrUndefined(baseObjectType, baseIndexType, t.noUncheckedIndexedAccessCandidate);
+                    var baseIndexedAccess = baseObjectType && baseIndexType && getIndexedAccessTypeOrUndefined(baseObjectType, baseIndexType, t.accessFlags);
                     return baseIndexedAccess && getBaseConstraint(baseIndexedAccess);
                 }
                 if (t.flags & 16777216 /* Conditional */) {
@@ -55435,7 +56565,7 @@
                         }
                     }
                     else if (isUnion) {
-                        var indexInfo = !isLateBoundName(name) && (isNumericLiteralName(name) && getIndexInfoOfType(type, 1 /* Number */) || getIndexInfoOfType(type, 0 /* String */));
+                        var indexInfo = !isLateBoundName(name) && getApplicableIndexInfoForName(type, name);
                         if (indexInfo) {
                             checkFlags |= 32 /* WritePartial */ | (indexInfo.isReadonly ? 8 /* Readonly */ : 0);
                             indexTypes = ts.append(indexTypes, isTupleType(type) ? getRestTypeOfTupleType(type) || undefinedType : indexInfo.type);
@@ -55555,15 +56685,15 @@
          * no constituent property has type 'never', but the intersection of the constituent property types is 'never'.
          */
         function getReducedType(type) {
-            if (type.flags & 1048576 /* Union */ && type.objectFlags & 67108864 /* ContainsIntersections */) {
+            if (type.flags & 1048576 /* Union */ && type.objectFlags & 33554432 /* ContainsIntersections */) {
                 return type.resolvedReducedType || (type.resolvedReducedType = getReducedUnionType(type));
             }
             else if (type.flags & 2097152 /* Intersection */) {
-                if (!(type.objectFlags & 67108864 /* IsNeverIntersectionComputed */)) {
-                    type.objectFlags |= 67108864 /* IsNeverIntersectionComputed */ |
-                        (ts.some(getPropertiesOfUnionOrIntersectionType(type), isNeverReducedProperty) ? 134217728 /* IsNeverIntersection */ : 0);
+                if (!(type.objectFlags & 33554432 /* IsNeverIntersectionComputed */)) {
+                    type.objectFlags |= 33554432 /* IsNeverIntersectionComputed */ |
+                        (ts.some(getPropertiesOfUnionOrIntersectionType(type), isNeverReducedProperty) ? 67108864 /* IsNeverIntersection */ : 0);
                 }
-                return type.objectFlags & 134217728 /* IsNeverIntersection */ ? neverType : type;
+                return type.objectFlags & 67108864 /* IsNeverIntersection */ ? neverType : type;
             }
             return type;
         }
@@ -55593,7 +56723,7 @@
             return !prop.valueDeclaration && !!(ts.getCheckFlags(prop) & 1024 /* ContainsPrivate */);
         }
         function elaborateNeverIntersection(errorInfo, type) {
-            if (type.flags & 2097152 /* Intersection */ && ts.getObjectFlags(type) & 134217728 /* IsNeverIntersection */) {
+            if (type.flags & 2097152 /* Intersection */ && ts.getObjectFlags(type) & 67108864 /* IsNeverIntersection */) {
                 var neverProp = ts.find(getPropertiesOfUnionOrIntersectionType(type), isDiscriminantWithNeverType);
                 if (neverProp) {
                     return ts.chainDiagnosticMessages(errorInfo, ts.Diagnostics.The_intersection_0_was_reduced_to_never_because_property_1_has_conflicting_types_in_some_constituents, typeToString(type, /*enclosingDeclaration*/ undefined, 536870912 /* NoTypeReduction */), symbolToString(neverProp));
@@ -55654,44 +56784,72 @@
         function getSignaturesOfType(type, kind) {
             return getSignaturesOfStructuredType(getReducedApparentType(type), kind);
         }
-        function getIndexInfoOfStructuredType(type, kind) {
+        function findIndexInfo(indexInfos, keyType) {
+            return ts.find(indexInfos, function (info) { return info.keyType === keyType; });
+        }
+        function findApplicableIndexInfo(indexInfos, keyType) {
+            // Index signatures for type 'string' are considered only when no other index signatures apply.
+            var stringIndexInfo;
+            var applicableInfo;
+            var applicableInfos;
+            for (var _i = 0, indexInfos_1 = indexInfos; _i < indexInfos_1.length; _i++) {
+                var info = indexInfos_1[_i];
+                if (info.keyType === stringType) {
+                    stringIndexInfo = info;
+                }
+                else if (isApplicableIndexType(keyType, info.keyType)) {
+                    if (!applicableInfo) {
+                        applicableInfo = info;
+                    }
+                    else {
+                        (applicableInfos || (applicableInfos = [applicableInfo])).push(info);
+                    }
+                }
+            }
+            // When more than one index signature is applicable we create a synthetic IndexInfo. Instead of computing
+            // the intersected key type, we just use unknownType for the key type as nothing actually depends on the
+            // keyType property of the returned IndexInfo.
+            return applicableInfos ? createIndexInfo(unknownType, getIntersectionType(ts.map(applicableInfos, function (info) { return info.type; })), ts.reduceLeft(applicableInfos, function (isReadonly, info) { return isReadonly && info.isReadonly; }, /*initial*/ true)) :
+                applicableInfo ? applicableInfo :
+                    stringIndexInfo && isApplicableIndexType(keyType, stringType) ? stringIndexInfo :
+                        undefined;
+        }
+        function isApplicableIndexType(source, target) {
+            // A 'string' index signature applies to types assignable to 'string' or 'number', and a 'number' index
+            // signature applies to types assignable to 'number' and numeric string literal types.
+            return isTypeAssignableTo(source, target) ||
+                target === stringType && isTypeAssignableTo(source, numberType) ||
+                target === numberType && !!(source.flags & 128 /* StringLiteral */) && isNumericLiteralName(source.value);
+        }
+        function getIndexInfosOfStructuredType(type) {
             if (type.flags & 3670016 /* StructuredType */) {
                 var resolved = resolveStructuredTypeMembers(type);
-                return kind === 0 /* String */ ? resolved.stringIndexInfo : resolved.numberIndexInfo;
+                return resolved.indexInfos;
             }
+            return ts.emptyArray;
         }
-        function getIndexTypeOfStructuredType(type, kind) {
-            var info = getIndexInfoOfStructuredType(type, kind);
-            return info && info.type;
+        function getIndexInfosOfType(type) {
+            return getIndexInfosOfStructuredType(getReducedApparentType(type));
         }
         // Return the indexing info of the given kind in the given type. Creates synthetic union index types when necessary and
         // maps primitive types and type parameters are to their apparent types.
-        function getIndexInfoOfType(type, kind) {
-            return getIndexInfoOfStructuredType(getReducedApparentType(type), kind);
+        function getIndexInfoOfType(type, keyType) {
+            return findIndexInfo(getIndexInfosOfType(type), keyType);
         }
         // Return the index type of the given kind in the given type. Creates synthetic union index types when necessary and
         // maps primitive types and type parameters are to their apparent types.
-        function getIndexTypeOfType(type, kind) {
-            return getIndexTypeOfStructuredType(getReducedApparentType(type), kind);
+        function getIndexTypeOfType(type, keyType) {
+            var _a;
+            return (_a = getIndexInfoOfType(type, keyType)) === null || _a === void 0 ? void 0 : _a.type;
         }
-        function getImplicitIndexTypeOfType(type, kind) {
-            if (isObjectTypeWithInferableIndex(type)) {
-                var propTypes = [];
-                for (var _i = 0, _a = getPropertiesOfType(type); _i < _a.length; _i++) {
-                    var prop = _a[_i];
-                    if (kind === 0 /* String */ || isNumericLiteralName(prop.escapedName)) {
-                        var propType = getTypeOfSymbol(prop);
-                        propTypes.push(prop.flags & 16777216 /* Optional */ ? getTypeWithFacts(propType, 524288 /* NEUndefined */) : propType);
-                    }
-                }
-                if (kind === 0 /* String */) {
-                    ts.append(propTypes, getIndexTypeOfType(type, 1 /* Number */));
-                }
-                if (propTypes.length) {
-                    return getUnionType(propTypes);
-                }
-            }
-            return undefined;
+        function getApplicableIndexInfos(type, keyType) {
+            return getIndexInfosOfType(type).filter(function (info) { return isApplicableIndexType(keyType, info.keyType); });
+        }
+        function getApplicableIndexInfo(type, keyType) {
+            return findApplicableIndexInfo(getIndexInfosOfType(type), keyType);
+        }
+        function getApplicableIndexInfoForName(type, name) {
+            return getApplicableIndexInfo(type, isLateBoundName(name) ? esSymbolType : getStringLiteralType(ts.unescapeLeadingUnderscores(name)));
         }
         // Return list of type parameters with duplicates removed (duplicate identifier errors are generated in the actual
         // type checking functions).
@@ -55715,10 +56873,10 @@
         function isJSDocOptionalParameter(node) {
             return ts.isInJSFile(node) && (
             // node.type should only be a JSDocOptionalType when node is a parameter of a JSDocFunctionType
-            node.type && node.type.kind === 308 /* JSDocOptionalType */
+            node.type && node.type.kind === 311 /* JSDocOptionalType */
                 || ts.getJSDocParameterTags(node).some(function (_a) {
                     var isBracketed = _a.isBracketed, typeExpression = _a.typeExpression;
-                    return isBracketed || !!typeExpression && typeExpression.type.kind === 308 /* JSDocOptionalType */;
+                    return isBracketed || !!typeExpression && typeExpression.type.kind === 311 /* JSDocOptionalType */;
                 }));
         }
         function tryFindAmbientModule(moduleName, withAugmentations) {
@@ -55758,7 +56916,7 @@
                 return false;
             }
             var isBracketed = node.isBracketed, typeExpression = node.typeExpression;
-            return isBracketed || !!typeExpression && typeExpression.type.kind === 308 /* JSDocOptionalType */;
+            return isBracketed || !!typeExpression && typeExpression.type.kind === 311 /* JSDocOptionalType */;
         }
         function createTypePredicate(kind, parameterName, parameterIndex, type) {
             return { kind: kind, parameterName: parameterName, parameterIndex: parameterIndex, type: type };
@@ -55840,12 +56998,12 @@
                     else {
                         parameters.push(paramSymbol);
                     }
-                    if (type && type.kind === 192 /* LiteralType */) {
+                    if (type && type.kind === 194 /* LiteralType */) {
                         flags |= 2 /* HasLiteralTypes */;
                     }
                     // Record a new minimum argument count if this is not an optional parameter
                     var isOptionalParameter_1 = isOptionalJSDocPropertyLikeTag(param) ||
-                        param.initializer || param.questionToken || param.dotDotDotToken ||
+                        param.initializer || param.questionToken || ts.isRestParameter(param) ||
                         iife && parameters.length > iife.arguments.length && !type ||
                         isJSDocOptionalParameter(param);
                     if (!isOptionalParameter_1) {
@@ -55853,16 +57011,16 @@
                     }
                 }
                 // If only one accessor includes a this-type annotation, the other behaves as if it had the same type annotation
-                if ((declaration.kind === 168 /* GetAccessor */ || declaration.kind === 169 /* SetAccessor */) &&
+                if ((declaration.kind === 170 /* GetAccessor */ || declaration.kind === 171 /* SetAccessor */) &&
                     hasBindableName(declaration) &&
                     (!hasThisParameter || !thisParameter)) {
-                    var otherKind = declaration.kind === 168 /* GetAccessor */ ? 169 /* SetAccessor */ : 168 /* GetAccessor */;
+                    var otherKind = declaration.kind === 170 /* GetAccessor */ ? 171 /* SetAccessor */ : 170 /* GetAccessor */;
                     var other = ts.getDeclarationOfKind(getSymbolOfNode(declaration), otherKind);
                     if (other) {
                         thisParameter = getAnnotatedAccessorThisParameter(other);
                     }
                 }
-                var classType = declaration.kind === 167 /* Constructor */ ?
+                var classType = declaration.kind === 169 /* Constructor */ ?
                     getDeclaredTypeOfClassOrInterface(getMergedSymbol(declaration.parent.symbol))
                     : undefined;
                 var typeParameters = classType ? classType.localTypeParameters : getTypeParametersFromDeclaration(declaration);
@@ -55928,16 +57086,16 @@
                 if (!node)
                     return false;
                 switch (node.kind) {
-                    case 78 /* Identifier */:
+                    case 79 /* Identifier */:
                         return node.escapedText === argumentsSymbol.escapedName && getResolvedSymbol(node) === argumentsSymbol;
-                    case 164 /* PropertyDeclaration */:
-                    case 166 /* MethodDeclaration */:
-                    case 168 /* GetAccessor */:
-                    case 169 /* SetAccessor */:
-                        return node.name.kind === 159 /* ComputedPropertyName */
+                    case 165 /* PropertyDeclaration */:
+                    case 167 /* MethodDeclaration */:
+                    case 170 /* GetAccessor */:
+                    case 171 /* SetAccessor */:
+                        return node.name.kind === 160 /* ComputedPropertyName */
                             && traverse(node.name);
-                    case 202 /* PropertyAccessExpression */:
-                    case 203 /* ElementAccessExpression */:
+                    case 204 /* PropertyAccessExpression */:
+                    case 205 /* ElementAccessExpression */:
                         return traverse(node.expression);
                     default:
                         return !ts.nodeStartsNewLexicalEnvironment(node) && !ts.isPartOfTypeNode(node) && !!ts.forEachChild(node, traverse);
@@ -56009,7 +57167,7 @@
         function createTypePredicateFromTypePredicateNode(node, signature) {
             var parameterName = node.parameterName;
             var type = node.type && getTypeFromTypeNode(node.type);
-            return parameterName.kind === 188 /* ThisType */ ?
+            return parameterName.kind === 190 /* ThisType */ ?
                 createTypePredicate(node.assertsModifier ? 2 /* AssertsThis */ : 0 /* This */, /*parameterName*/ undefined, /*parameterIndex*/ undefined, type) :
                 createTypePredicate(node.assertsModifier ? 3 /* AssertsIdentifier */ : 1 /* Identifier */, parameterName.escapedText, ts.findIndex(signature.parameters, function (p) { return p.escapedName === parameterName.escapedText; }), type);
         }
@@ -56055,7 +57213,7 @@
             return signature.resolvedReturnType;
         }
         function getReturnTypeFromAnnotation(declaration) {
-            if (declaration.kind === 167 /* Constructor */) {
+            if (declaration.kind === 169 /* Constructor */) {
                 return getDeclaredTypeOfClassOrInterface(getMergedSymbol(declaration.parent.symbol));
             }
             if (ts.isJSDocConstructSignature(declaration)) {
@@ -56065,12 +57223,12 @@
             if (typeNode) {
                 return getTypeFromTypeNode(typeNode);
             }
-            if (declaration.kind === 168 /* GetAccessor */ && hasBindableName(declaration)) {
+            if (declaration.kind === 170 /* GetAccessor */ && hasBindableName(declaration)) {
                 var jsDocType = ts.isInJSFile(declaration) && getTypeForDeclarationFromJSDocComment(declaration);
                 if (jsDocType) {
                     return jsDocType;
                 }
-                var setter = ts.getDeclarationOfKind(getSymbolOfNode(declaration), 169 /* SetAccessor */);
+                var setter = ts.getDeclarationOfKind(getSymbolOfNode(declaration), 171 /* SetAccessor */);
                 var setterType = getAnnotatedAccessorType(setter);
                 if (setterType) {
                     return setterType;
@@ -56088,7 +57246,7 @@
             if (signatureHasRestParameter(signature)) {
                 var sigRestType = getTypeOfSymbol(signature.parameters[signature.parameters.length - 1]);
                 var restType = isTupleType(sigRestType) ? getRestTypeOfTupleType(sigRestType) : sigRestType;
-                return restType && getIndexTypeOfType(restType, 1 /* Number */);
+                return restType && getIndexTypeOfType(restType, numberType);
             }
             return undefined;
         }
@@ -56171,12 +57329,13 @@
             // will result in a different declaration kind.
             if (!signature.isolatedSignatureType) {
                 var kind = signature.declaration ? signature.declaration.kind : 0 /* Unknown */;
-                var isConstructor = kind === 167 /* Constructor */ || kind === 171 /* ConstructSignature */ || kind === 176 /* ConstructorType */;
+                var isConstructor = kind === 169 /* Constructor */ || kind === 173 /* ConstructSignature */ || kind === 178 /* ConstructorType */;
                 var type = createObjectType(16 /* Anonymous */);
                 type.members = emptySymbols;
                 type.properties = ts.emptyArray;
                 type.callSignatures = !isConstructor ? [signature] : ts.emptyArray;
                 type.constructSignatures = isConstructor ? [signature] : ts.emptyArray;
+                type.indexInfos = ts.emptyArray;
                 signature.isolatedSignatureType = type;
             }
             return signature.isolatedSignatureType;
@@ -56187,39 +57346,39 @@
         function getIndexSymbolFromSymbolTable(symbolTable) {
             return symbolTable.get("__index" /* Index */);
         }
-        function getIndexDeclarationOfSymbol(symbol, kind) {
-            var indexSymbol = symbol && getIndexSymbol(symbol);
-            return indexSymbol && getIndexDeclarationOfIndexSymbol(indexSymbol, kind);
+        function createIndexInfo(keyType, type, isReadonly, declaration) {
+            return { keyType: keyType, type: type, isReadonly: isReadonly, declaration: declaration };
         }
-        function getIndexDeclarationOfSymbolTable(symbolTable, kind) {
-            var indexSymbol = symbolTable && getIndexSymbolFromSymbolTable(symbolTable);
-            return indexSymbol && getIndexDeclarationOfIndexSymbol(indexSymbol, kind);
+        function getIndexInfosOfSymbol(symbol) {
+            var indexSymbol = getIndexSymbol(symbol);
+            return indexSymbol ? getIndexInfosOfIndexSymbol(indexSymbol) : ts.emptyArray;
         }
-        function getIndexDeclarationOfIndexSymbol(indexSymbol, kind) {
-            var syntaxKind = kind === 1 /* Number */ ? 144 /* NumberKeyword */ : 147 /* StringKeyword */;
-            if (indexSymbol === null || indexSymbol === void 0 ? void 0 : indexSymbol.declarations) {
-                for (var _i = 0, _a = indexSymbol.declarations; _i < _a.length; _i++) {
-                    var decl = _a[_i];
-                    var node = ts.cast(decl, ts.isIndexSignatureDeclaration);
-                    if (node.parameters.length === 1) {
-                        var parameter = node.parameters[0];
-                        if (parameter.type && parameter.type.kind === syntaxKind) {
-                            return node;
+        function getIndexInfosOfIndexSymbol(indexSymbol) {
+            if (indexSymbol.declarations) {
+                var indexInfos_2 = [];
+                var _loop_14 = function (declaration) {
+                    if (declaration.parameters.length === 1) {
+                        var parameter = declaration.parameters[0];
+                        if (parameter.type) {
+                            forEachType(getTypeFromTypeNode(parameter.type), function (keyType) {
+                                if (isValidIndexKeyType(keyType) && !findIndexInfo(indexInfos_2, keyType)) {
+                                    indexInfos_2.push(createIndexInfo(keyType, declaration.type ? getTypeFromTypeNode(declaration.type) : anyType, ts.hasEffectiveModifier(declaration, 64 /* Readonly */), declaration));
+                                }
+                            });
                         }
                     }
+                };
+                for (var _i = 0, _a = indexSymbol.declarations; _i < _a.length; _i++) {
+                    var declaration = _a[_i];
+                    _loop_14(declaration);
                 }
+                return indexInfos_2;
             }
-            return undefined;
+            return ts.emptyArray;
         }
-        function createIndexInfo(type, isReadonly, declaration) {
-            return { type: type, isReadonly: isReadonly, declaration: declaration };
-        }
-        function getIndexInfoOfSymbol(symbol, kind) {
-            var declaration = getIndexDeclarationOfSymbol(symbol, kind);
-            if (declaration) {
-                return createIndexInfo(declaration.type ? getTypeFromTypeNode(declaration.type) : anyType, ts.hasEffectiveModifier(declaration, 64 /* Readonly */), declaration);
-            }
-            return undefined;
+        function isValidIndexKeyType(type) {
+            return !!(type.flags & (4 /* String */ | 8 /* Number */ | 4096 /* ESSymbol */)) || isPatternLiteralType(type) ||
+                !!(type.flags & 2097152 /* Intersection */) && !isGenericIndexType(type) && !isGenericObjectType(type) && ts.some(type.types, isValidIndexKeyType);
         }
         function getConstraintDeclaration(type) {
             return ts.mapDefined(ts.filter(type.symbol && type.symbol.declarations, ts.isTypeParameterDeclaration), ts.getEffectiveConstraintOfTypeParameter)[0];
@@ -56230,13 +57389,13 @@
             if ((_a = typeParameter.symbol) === null || _a === void 0 ? void 0 : _a.declarations) {
                 for (var _i = 0, _b = typeParameter.symbol.declarations; _i < _b.length; _i++) {
                     var declaration = _b[_i];
-                    if (declaration.parent.kind === 186 /* InferType */) {
+                    if (declaration.parent.kind === 188 /* InferType */) {
                         // When an 'infer T' declaration is immediately contained in a type reference node
                         // (such as 'Foo<infer T>'), T's constraint is inferred from the constraint of the
                         // corresponding type parameter in 'Foo'. When multiple 'infer T' declarations are
                         // present, we form an intersection of the inferred constraint types.
                         var _c = ts.walkUpParenthesizedTypesAndGetParentAndChild(declaration.parent.parent), _d = _c[0], childTypeParameter = _d === void 0 ? declaration.parent : _d, grandParent = _c[1];
-                        if (grandParent.kind === 174 /* TypeReference */) {
+                        if (grandParent.kind === 176 /* TypeReference */) {
                             var typeReference = grandParent;
                             var typeParameters = getTypeParametersForTypeReference(typeReference);
                             if (typeParameters) {
@@ -56261,27 +57420,27 @@
                         }
                         // When an 'infer T' declaration is immediately contained in a rest parameter declaration, a rest type
                         // or a named rest tuple element, we infer an 'unknown[]' constraint.
-                        else if (grandParent.kind === 161 /* Parameter */ && grandParent.dotDotDotToken ||
-                            grandParent.kind === 182 /* RestType */ ||
-                            grandParent.kind === 193 /* NamedTupleMember */ && grandParent.dotDotDotToken) {
+                        else if (grandParent.kind === 162 /* Parameter */ && grandParent.dotDotDotToken ||
+                            grandParent.kind === 184 /* RestType */ ||
+                            grandParent.kind === 195 /* NamedTupleMember */ && grandParent.dotDotDotToken) {
                             inferences = ts.append(inferences, createArrayType(unknownType));
                         }
                         // When an 'infer T' declaration is immediately contained in a string template type, we infer a 'string'
                         // constraint.
-                        else if (grandParent.kind === 195 /* TemplateLiteralTypeSpan */) {
+                        else if (grandParent.kind === 197 /* TemplateLiteralTypeSpan */) {
                             inferences = ts.append(inferences, stringType);
                         }
                         // When an 'infer T' declaration is in the constraint position of a mapped type, we infer a 'keyof any'
                         // constraint.
-                        else if (grandParent.kind === 160 /* TypeParameter */ && grandParent.parent.kind === 191 /* MappedType */) {
+                        else if (grandParent.kind === 161 /* TypeParameter */ && grandParent.parent.kind === 193 /* MappedType */) {
                             inferences = ts.append(inferences, keyofConstraintType);
                         }
                         // When an 'infer T' declaration is the template of a mapped type, and that mapped type is the extends
                         // clause of a conditional whose check type is also a mapped type, give it a constraint equal to the template
                         // of the check type's mapped type
-                        else if (grandParent.kind === 191 /* MappedType */ && grandParent.type &&
-                            ts.skipParentheses(grandParent.type) === declaration.parent && grandParent.parent.kind === 185 /* ConditionalType */ &&
-                            grandParent.parent.extendsType === grandParent && grandParent.parent.checkType.kind === 191 /* MappedType */ &&
+                        else if (grandParent.kind === 193 /* MappedType */ && grandParent.type &&
+                            ts.skipParentheses(grandParent.type) === declaration.parent && grandParent.parent.kind === 187 /* ConditionalType */ &&
+                            grandParent.parent.extendsType === grandParent && grandParent.parent.checkType.kind === 193 /* MappedType */ &&
                             grandParent.parent.checkType.type) {
                             var checkMappedType_1 = grandParent.parent.checkType;
                             var nodeType = getTypeFromTypeNode(checkMappedType_1.type);
@@ -56309,7 +57468,7 @@
                         if (type.flags & 1 /* Any */ && type !== errorType) { // Allow errorType to propegate to keep downstream errors suppressed
                             // use keyofConstraintType as the base constraint for mapped type key constraints (unknown isn;t assignable to that, but `any` was),
                             // use unknown otherwise
-                            type = constraintDeclaration.parent.parent.kind === 191 /* MappedType */ ? keyofConstraintType : unknownType;
+                            type = constraintDeclaration.parent.parent.kind === 193 /* MappedType */ ? keyofConstraintType : unknownType;
                         }
                         typeParameter.constraint = type;
                     }
@@ -56318,7 +57477,7 @@
             return typeParameter.constraint === noConstraintType ? undefined : typeParameter.constraint;
         }
         function getParentSymbolOfTypeParameter(typeParameter) {
-            var tp = ts.getDeclarationOfKind(typeParameter.symbol, 160 /* TypeParameter */);
+            var tp = ts.getDeclarationOfKind(typeParameter.symbol, 161 /* TypeParameter */);
             var host = ts.isJSDocTemplateTag(tp.parent) ? ts.getHostSignatureFromJSDoc(tp.parent) : tp.parent;
             return host && getSymbolOfNode(host);
         }
@@ -56354,8 +57513,8 @@
         // that care about the presence of such types at arbitrary depth in a containing type.
         function getPropagatingFlagsOfTypes(types, excludeKinds) {
             var result = 0;
-            for (var _i = 0, types_9 = types; _i < types_9.length; _i++) {
-                var type = types_9[_i];
+            for (var _i = 0, types_8 = types; _i < types_8.length; _i++) {
+                var type = types_8[_i];
                 if (!(type.flags & excludeKinds)) {
                     result |= ts.getObjectFlags(type);
                 }
@@ -56404,8 +57563,8 @@
                 }
                 var node = type.node;
                 var typeArguments = !node ? ts.emptyArray :
-                    node.kind === 174 /* TypeReference */ ? ts.concatenate(type.target.outerTypeParameters, getEffectiveTypeArguments(node, type.target.localTypeParameters)) :
-                        node.kind === 179 /* ArrayType */ ? [getTypeFromTypeNode(node.elementType)] :
+                    node.kind === 176 /* TypeReference */ ? ts.concatenate(type.target.outerTypeParameters, getEffectiveTypeArguments(node, type.target.localTypeParameters)) :
+                        node.kind === 181 /* ArrayType */ ? [getTypeFromTypeNode(node.elementType)] :
                             ts.map(node.elements, getTypeFromTypeNode);
                 if (popTypeResolution()) {
                     type.resolvedTypeArguments = type.mapper ? instantiateTypes(typeArguments, type.mapper) : typeArguments;
@@ -56447,7 +57606,7 @@
                         return errorType;
                     }
                 }
-                if (node.kind === 174 /* TypeReference */ && isDeferredTypeReferenceNode(node, ts.length(node.typeArguments) !== typeParameters.length)) {
+                if (node.kind === 176 /* TypeReference */ && isDeferredTypeReferenceNode(node, ts.length(node.typeArguments) !== typeParameters.length)) {
                     return createDeferredTypeReference(type, node, /*mapper*/ undefined);
                 }
                 // In a type reference, the outer type parameters of the referenced class or interface are automatically
@@ -56506,9 +57665,9 @@
         }
         function getTypeReferenceName(node) {
             switch (node.kind) {
-                case 174 /* TypeReference */:
+                case 176 /* TypeReference */:
                     return node.typeName;
-                case 224 /* ExpressionWithTypeArguments */:
+                case 226 /* ExpressionWithTypeArguments */:
                     // We only support expressions that are simple qualified names. For other
                     // expressions this produces undefined.
                     var expr = node.expression;
@@ -56564,7 +57723,7 @@
                 var valueType = getTypeOfSymbol(symbol);
                 var typeType = valueType;
                 if (symbol.valueDeclaration) {
-                    var isImportTypeWithQualifier = node.kind === 196 /* ImportType */ && node.qualifier;
+                    var isImportTypeWithQualifier = node.kind === 198 /* ImportType */ && node.qualifier;
                     // valueType might not have a symbol, eg, {import('./b').STRING_LITERAL}
                     if (valueType.symbol && valueType.symbol !== symbol && isImportTypeWithQualifier) {
                         typeType = getTypeReferenceType(node, valueType.symbol);
@@ -56590,7 +57749,7 @@
             return result;
         }
         function isUnaryTupleTypeNode(node) {
-            return node.kind === 180 /* TupleType */ && node.elements.length === 1;
+            return node.kind === 182 /* TupleType */ && node.elements.length === 1;
         }
         function getImpliedConstraint(type, checkNode, extendsNode) {
             return isUnaryTupleTypeNode(checkNode) && isUnaryTupleTypeNode(extendsNode) ? getImpliedConstraint(type, checkNode.elements[0], extendsNode.elements[0]) :
@@ -56600,16 +57759,16 @@
         function getConditionalFlowTypeOfType(type, node) {
             var constraints;
             var covariant = true;
-            while (node && !ts.isStatement(node) && node.kind !== 312 /* JSDocComment */) {
+            while (node && !ts.isStatement(node) && node.kind !== 315 /* JSDocComment */) {
                 var parent = node.parent;
                 // only consider variance flipped by parameter locations - `keyof` types would usually be considered variance inverting, but
                 // often get used in indexed accesses where they behave sortof invariantly, but our checking is lax
-                if (parent.kind === 161 /* Parameter */) {
+                if (parent.kind === 162 /* Parameter */) {
                     covariant = !covariant;
                 }
                 // Always substitute on type parameters, regardless of variance, since even
                 // in contravariant positions, they may rely on substituted constraints to be valid
-                if ((covariant || type.flags & 8650752 /* TypeVariable */) && parent.kind === 185 /* ConditionalType */ && node === parent.trueType) {
+                if ((covariant || type.flags & 8650752 /* TypeVariable */) && parent.kind === 187 /* ConditionalType */ && node === parent.trueType) {
                     var constraint = getImpliedConstraint(type, parent.checkType, parent.extendsType);
                     if (constraint) {
                         constraints = ts.append(constraints, constraint);
@@ -56620,7 +57779,7 @@
             return constraints ? getSubstitutionType(type, getIntersectionType(ts.append(constraints, type))) : type;
         }
         function isJSDocTypeReference(node) {
-            return !!(node.flags & 4194304 /* JSDoc */) && (node.kind === 174 /* TypeReference */ || node.kind === 196 /* ImportType */);
+            return !!(node.flags & 4194304 /* JSDoc */) && (node.kind === 176 /* TypeReference */ || node.kind === 198 /* ImportType */);
         }
         function checkNoTypeArguments(node, symbol) {
             if (node.typeArguments) {
@@ -56664,8 +57823,8 @@
                             if (ts.isJSDocIndexSignature(node)) {
                                 var indexed = getTypeFromTypeNode(typeArgs[0]);
                                 var target = getTypeFromTypeNode(typeArgs[1]);
-                                var index = createIndexInfo(target, /*isReadonly*/ false);
-                                return createAnonymousType(undefined, emptySymbols, ts.emptyArray, ts.emptyArray, indexed === stringType ? index : undefined, indexed === numberType ? index : undefined);
+                                var indexInfo = indexed === stringType || indexed === numberType ? [createIndexInfo(indexed, target, /*isReadonly*/ false)] : ts.emptyArray;
+                                return createAnonymousType(undefined, emptySymbols, ts.emptyArray, ts.emptyArray, indexInfo);
                             }
                             return anyType;
                         }
@@ -56723,7 +57882,8 @@
                 // The expression is processed as an identifier expression (section 4.3)
                 // or property access expression(section 4.10),
                 // the widened type(section 3.9) of which becomes the result.
-                links.resolvedType = getRegularTypeOfLiteralType(getWidenedType(checkExpression(node.exprName)));
+                var type = ts.isThisIdentifier(node.exprName) ? checkThisExpression(node.exprName) : checkExpression(node.exprName);
+                links.resolvedType = getRegularTypeOfLiteralType(getWidenedType(type));
             }
             return links.resolvedType;
         }
@@ -56734,9 +57894,9 @@
                     for (var _i = 0, declarations_3 = declarations; _i < declarations_3.length; _i++) {
                         var declaration = declarations_3[_i];
                         switch (declaration.kind) {
-                            case 253 /* ClassDeclaration */:
-                            case 254 /* InterfaceDeclaration */:
-                            case 256 /* EnumDeclaration */:
+                            case 255 /* ClassDeclaration */:
+                            case 256 /* InterfaceDeclaration */:
+                            case 258 /* EnumDeclaration */:
                                 return declaration;
                         }
                     }
@@ -56779,6 +57939,20 @@
         function getGlobalImportMetaType() {
             return deferredGlobalImportMetaType || (deferredGlobalImportMetaType = getGlobalType("ImportMeta", /*arity*/ 0, /*reportErrors*/ true)) || emptyObjectType;
         }
+        function getGlobalImportMetaExpressionType() {
+            if (!deferredGlobalImportMetaExpressionType) {
+                // Create a synthetic type `ImportMetaExpression { meta: MetaProperty }`
+                var symbol = createSymbol(0 /* None */, "ImportMetaExpression");
+                var importMetaType = getGlobalImportMetaType();
+                var metaPropertySymbol = createSymbol(4 /* Property */, "meta", 8 /* Readonly */);
+                metaPropertySymbol.parent = symbol;
+                metaPropertySymbol.type = importMetaType;
+                var members = ts.createSymbolTable([metaPropertySymbol]);
+                symbol.members = members;
+                deferredGlobalImportMetaExpressionType = createAnonymousType(symbol, members, ts.emptyArray, ts.emptyArray, ts.emptyArray);
+            }
+            return deferredGlobalImportMetaExpressionType;
+        }
         function getGlobalESSymbolConstructorSymbol(reportErrors) {
             return deferredGlobalESSymbolConstructorSymbol || (deferredGlobalESSymbolConstructorSymbol = getGlobalValueSymbol("Symbol", reportErrors));
         }
@@ -56861,11 +58035,11 @@
         }
         function getTupleElementFlags(node) {
             switch (node.kind) {
-                case 181 /* OptionalType */:
+                case 183 /* OptionalType */:
                     return 2 /* Optional */;
-                case 182 /* RestType */:
+                case 184 /* RestType */:
                     return getRestTypeElementFlags(node);
-                case 193 /* NamedTupleMember */:
+                case 195 /* NamedTupleMember */:
                     return node.questionToken ? 2 /* Optional */ :
                         node.dotDotDotToken ? getRestTypeElementFlags(node) :
                             1 /* Required */;
@@ -56883,14 +58057,14 @@
                 return readonly ? globalReadonlyArrayType : globalArrayType;
             }
             var elementFlags = ts.map(node.elements, getTupleElementFlags);
-            var missingName = ts.some(node.elements, function (e) { return e.kind !== 193 /* NamedTupleMember */; });
+            var missingName = ts.some(node.elements, function (e) { return e.kind !== 195 /* NamedTupleMember */; });
             return getTupleTargetType(elementFlags, readonly, /*associatedNames*/ missingName ? undefined : node.elements);
         }
         // Return true if the given type reference node is directly aliased or if it needs to be deferred
         // because it is possibly contained in a circular chain of eagerly resolved types.
         function isDeferredTypeReferenceNode(node, hasDefaultTypeArguments) {
-            return !!getAliasSymbolForTypeNode(node) || isResolvedByTypeAlias(node) && (node.kind === 179 /* ArrayType */ ? mayResolveTypeAlias(node.elementType) :
-                node.kind === 180 /* TupleType */ ? ts.some(node.elements, mayResolveTypeAlias) :
+            return !!getAliasSymbolForTypeNode(node) || isResolvedByTypeAlias(node) && (node.kind === 181 /* ArrayType */ ? mayResolveTypeAlias(node.elementType) :
+                node.kind === 182 /* TupleType */ ? ts.some(node.elements, mayResolveTypeAlias) :
                     hasDefaultTypeArguments || ts.some(node.typeArguments, mayResolveTypeAlias));
         }
         // Return true when the given node is transitively contained in type constructs that eagerly
@@ -56899,18 +58073,18 @@
         function isResolvedByTypeAlias(node) {
             var parent = node.parent;
             switch (parent.kind) {
-                case 187 /* ParenthesizedType */:
-                case 193 /* NamedTupleMember */:
-                case 174 /* TypeReference */:
-                case 183 /* UnionType */:
-                case 184 /* IntersectionType */:
-                case 190 /* IndexedAccessType */:
-                case 185 /* ConditionalType */:
-                case 189 /* TypeOperator */:
-                case 179 /* ArrayType */:
-                case 180 /* TupleType */:
+                case 189 /* ParenthesizedType */:
+                case 195 /* NamedTupleMember */:
+                case 176 /* TypeReference */:
+                case 185 /* UnionType */:
+                case 186 /* IntersectionType */:
+                case 192 /* IndexedAccessType */:
+                case 187 /* ConditionalType */:
+                case 191 /* TypeOperator */:
+                case 181 /* ArrayType */:
+                case 182 /* TupleType */:
                     return isResolvedByTypeAlias(parent);
-                case 255 /* TypeAliasDeclaration */:
+                case 257 /* TypeAliasDeclaration */:
                     return true;
             }
             return false;
@@ -56919,28 +58093,28 @@
         // of a type alias.
         function mayResolveTypeAlias(node) {
             switch (node.kind) {
-                case 174 /* TypeReference */:
+                case 176 /* TypeReference */:
                     return isJSDocTypeReference(node) || !!(resolveTypeReferenceName(node.typeName, 788968 /* Type */).flags & 524288 /* TypeAlias */);
-                case 177 /* TypeQuery */:
+                case 179 /* TypeQuery */:
                     return true;
-                case 189 /* TypeOperator */:
-                    return node.operator !== 151 /* UniqueKeyword */ && mayResolveTypeAlias(node.type);
-                case 187 /* ParenthesizedType */:
-                case 181 /* OptionalType */:
-                case 193 /* NamedTupleMember */:
-                case 308 /* JSDocOptionalType */:
-                case 306 /* JSDocNullableType */:
-                case 307 /* JSDocNonNullableType */:
-                case 302 /* JSDocTypeExpression */:
+                case 191 /* TypeOperator */:
+                    return node.operator !== 152 /* UniqueKeyword */ && mayResolveTypeAlias(node.type);
+                case 189 /* ParenthesizedType */:
+                case 183 /* OptionalType */:
+                case 195 /* NamedTupleMember */:
+                case 311 /* JSDocOptionalType */:
+                case 309 /* JSDocNullableType */:
+                case 310 /* JSDocNonNullableType */:
+                case 304 /* JSDocTypeExpression */:
                     return mayResolveTypeAlias(node.type);
-                case 182 /* RestType */:
-                    return node.type.kind !== 179 /* ArrayType */ || mayResolveTypeAlias(node.type.elementType);
-                case 183 /* UnionType */:
-                case 184 /* IntersectionType */:
+                case 184 /* RestType */:
+                    return node.type.kind !== 181 /* ArrayType */ || mayResolveTypeAlias(node.type.elementType);
+                case 185 /* UnionType */:
+                case 186 /* IntersectionType */:
                     return ts.some(node.types, mayResolveTypeAlias);
-                case 190 /* IndexedAccessType */:
+                case 192 /* IndexedAccessType */:
                     return mayResolveTypeAlias(node.objectType) || mayResolveTypeAlias(node.indexType);
-                case 185 /* ConditionalType */:
+                case 187 /* ConditionalType */:
                     return mayResolveTypeAlias(node.checkType) || mayResolveTypeAlias(node.extendsType) ||
                         mayResolveTypeAlias(node.trueType) || mayResolveTypeAlias(node.falseType);
             }
@@ -56953,19 +58127,19 @@
                 if (target === emptyGenericType) {
                     links.resolvedType = emptyObjectType;
                 }
-                else if (!(node.kind === 180 /* TupleType */ && ts.some(node.elements, function (e) { return !!(getTupleElementFlags(e) & 8 /* Variadic */); })) && isDeferredTypeReferenceNode(node)) {
-                    links.resolvedType = node.kind === 180 /* TupleType */ && node.elements.length === 0 ? target :
+                else if (!(node.kind === 182 /* TupleType */ && ts.some(node.elements, function (e) { return !!(getTupleElementFlags(e) & 8 /* Variadic */); })) && isDeferredTypeReferenceNode(node)) {
+                    links.resolvedType = node.kind === 182 /* TupleType */ && node.elements.length === 0 ? target :
                         createDeferredTypeReference(target, node, /*mapper*/ undefined);
                 }
                 else {
-                    var elementTypes = node.kind === 179 /* ArrayType */ ? [getTypeFromTypeNode(node.elementType)] : ts.map(node.elements, getTypeFromTypeNode);
+                    var elementTypes = node.kind === 181 /* ArrayType */ ? [getTypeFromTypeNode(node.elementType)] : ts.map(node.elements, getTypeFromTypeNode);
                     links.resolvedType = createNormalizedTypeReference(target, elementTypes);
                 }
             }
             return links.resolvedType;
         }
         function isReadonlyTypeOperator(node) {
-            return ts.isTypeOperatorNode(node) && node.operator === 142 /* ReadonlyKeyword */;
+            return ts.isTypeOperatorNode(node) && node.operator === 143 /* ReadonlyKeyword */;
         }
         function createTupleType(elementTypes, elementFlags, readonly, namedMemberDeclarations) {
             if (readonly === void 0) { readonly = false; }
@@ -57021,10 +58195,10 @@
                 lengthSymbol.type = numberType;
             }
             else {
-                var literalTypes_1 = [];
+                var literalTypes = [];
                 for (var i = minLength; i <= arity; i++)
-                    literalTypes_1.push(getLiteralType(i));
-                lengthSymbol.type = getUnionType(literalTypes_1);
+                    literalTypes.push(getNumberLiteralType(i));
+                lengthSymbol.type = getUnionType(literalTypes);
             }
             properties.push(lengthSymbol);
             var type = createObjectType(8 /* Tuple */ | 4 /* Reference */);
@@ -57041,8 +58215,7 @@
             type.declaredProperties = properties;
             type.declaredCallSignatures = ts.emptyArray;
             type.declaredConstructSignatures = ts.emptyArray;
-            type.declaredStringIndexInfo = undefined;
-            type.declaredNumberIndexInfo = undefined;
+            type.declaredIndexInfos = ts.emptyArray;
             type.elementFlags = elementFlags;
             type.minLength = minLength;
             type.fixedLength = fixedLength;
@@ -57081,7 +58254,7 @@
             var lastRequiredIndex = -1;
             var firstRestIndex = -1;
             var lastOptionalOrRestIndex = -1;
-            var _loop_13 = function (i) {
+            var _loop_15 = function (i) {
                 var type = elementTypes[i];
                 var flags = target.elementFlags[i];
                 if (flags & 8 /* Variadic */) {
@@ -57102,7 +58275,7 @@
                     }
                     else {
                         // Treat everything else as an array type and create a rest element.
-                        addElement(isArrayLikeType(type) && getIndexTypeOfType(type, 1 /* Number */) || errorType, 4 /* Rest */, (_b = target.labeledElementDeclarations) === null || _b === void 0 ? void 0 : _b[i]);
+                        addElement(isArrayLikeType(type) && getIndexTypeOfType(type, numberType) || errorType, 4 /* Rest */, (_b = target.labeledElementDeclarations) === null || _b === void 0 ? void 0 : _b[i]);
                     }
                 }
                 else {
@@ -57111,7 +58284,7 @@
                 }
             };
             for (var i = 0; i < elementTypes.length; i++) {
-                var state_4 = _loop_13(i);
+                var state_4 = _loop_15(i);
                 if (typeof state_4 === "object")
                     return state_4.value;
             }
@@ -57160,7 +58333,7 @@
                 /*readonly*/ false, target.labeledElementDeclarations && target.labeledElementDeclarations.slice(index, endIndex));
         }
         function getKnownKeysOfTupleType(type) {
-            return getUnionType(ts.append(ts.arrayOf(type.target.fixedLength, function (i) { return getLiteralType("" + i); }), getIndexType(type.target.readonly ? globalReadonlyArrayType : globalArrayType)));
+            return getUnionType(ts.append(ts.arrayOf(type.target.fixedLength, function (i) { return getStringLiteralType("" + i); }), getIndexType(type.target.readonly ? globalReadonlyArrayType : globalArrayType)));
         }
         // Return count of starting consecutive tuple elements of the given kind(s)
         function getStartElementCount(type, flags) {
@@ -57172,8 +58345,7 @@
             return type.elementFlags.length - ts.findLastIndex(type.elementFlags, function (f) { return !(f & flags); }) - 1;
         }
         function getTypeFromOptionalTypeNode(node) {
-            var type = getTypeFromTypeNode(node.type);
-            return strictNullChecks ? getOptionalType(type) : type;
+            return addOptionality(getTypeFromTypeNode(node.type), /*isProperty*/ true);
         }
         function getTypeId(type) {
             return type.id;
@@ -57218,8 +58390,8 @@
         // Add the given types to the given type set. Order is preserved, duplicates are removed,
         // and nested types of the given kind are flattened into the set.
         function addTypesToUnion(typeSet, includes, types) {
-            for (var _i = 0, types_10 = types; _i < types_10.length; _i++) {
-                var type = types_10[_i];
+            for (var _i = 0, types_9 = types; _i < types_9.length; _i++) {
+                var type = types_9[_i];
                 includes = addTypeToUnion(typeSet, includes, type);
             }
             return includes;
@@ -57248,8 +58420,8 @@
                         ts.find(getPropertiesOfType(source), function (p) { return isUnitType(getTypeOfSymbol(p)); }) :
                         undefined;
                     var keyPropertyType = keyProperty && getRegularTypeOfLiteralType(getTypeOfSymbol(keyProperty));
-                    for (var _i = 0, types_11 = types; _i < types_11.length; _i++) {
-                        var target = types_11[_i];
+                    for (var _i = 0, types_10 = types; _i < types_10.length; _i++) {
+                        var target = types_10[_i];
                         if (source !== target) {
                             if (count === 100000) {
                                 // After 100000 subtype checks we estimate the remaining amount of work by assuming the
@@ -57289,7 +58461,7 @@
                 i--;
                 var t = types[i];
                 var flags = t.flags;
-                var remove = flags & 128 /* StringLiteral */ && includes & 4 /* String */ ||
+                var remove = flags & (128 /* StringLiteral */ | 134217728 /* TemplateLiteral */ | 268435456 /* StringMapping */) && includes & 4 /* String */ ||
                     flags & 256 /* NumberLiteral */ && includes & 8 /* Number */ ||
                     flags & 2048 /* BigIntLiteral */ && includes & 64 /* BigInt */ ||
                     flags & 8192 /* UniqueESSymbol */ && includes & 4096 /* ESSymbol */ ||
@@ -57304,7 +58476,7 @@
             var templates = ts.filter(types, isPatternLiteralType);
             if (templates.length) {
                 var i = types.length;
-                var _loop_14 = function () {
+                var _loop_16 = function () {
                     i--;
                     var t = types[i];
                     if (t.flags & 128 /* StringLiteral */ && ts.some(templates, function (template) { return isTypeSubtypeOf(t, template); })) {
@@ -57312,7 +58484,7 @@
                     }
                 };
                 while (i > 0) {
-                    _loop_14();
+                    _loop_16();
                 }
             }
         }
@@ -57320,8 +58492,8 @@
             return !!(type.flags & 1048576 /* Union */ && (type.aliasSymbol || type.origin));
         }
         function addNamedUnions(namedUnions, types) {
-            for (var _i = 0, types_12 = types; _i < types_12.length; _i++) {
-                var t = types_12[_i];
+            for (var _i = 0, types_11 = types; _i < types_11.length; _i++) {
+                var t = types_11[_i];
                 if (t.flags & 1048576 /* Union */) {
                     var origin = t.origin;
                     if (t.aliasSymbol || origin && !(origin.flags & 1048576 /* Union */)) {
@@ -57359,7 +58531,13 @@
                 if (includes & 3 /* AnyOrUnknown */) {
                     return includes & 1 /* Any */ ? includes & 8388608 /* IncludesWildcard */ ? wildcardType : anyType : unknownType;
                 }
-                if (includes & (2944 /* Literal */ | 8192 /* UniqueESSymbol */) || includes & 16384 /* Void */ && includes & 32768 /* Undefined */) {
+                if (exactOptionalPropertyTypes && includes & 32768 /* Undefined */) {
+                    var missingIndex = ts.binarySearch(typeSet, missingType, getTypeId, ts.compareValues);
+                    if (missingIndex >= 0 && containsType(typeSet, undefinedType)) {
+                        ts.orderedRemoveItemAt(typeSet, missingIndex);
+                    }
+                }
+                if (includes & (2944 /* Literal */ | 8192 /* UniqueESSymbol */ | 134217728 /* TemplateLiteral */ | 268435456 /* StringMapping */) || includes & 16384 /* Void */ && includes & 32768 /* Undefined */) {
                     removeRedundantLiteralTypes(typeSet, includes, !!(unionReduction & 2 /* Subtype */));
                 }
                 if (includes & 128 /* StringLiteral */ && includes & 134217728 /* TemplateLiteral */) {
@@ -57381,14 +58559,14 @@
                 var namedUnions = [];
                 addNamedUnions(namedUnions, types);
                 var reducedTypes = [];
-                var _loop_15 = function (t) {
+                var _loop_17 = function (t) {
                     if (!ts.some(namedUnions, function (union) { return containsType(union.types, t); })) {
                         reducedTypes.push(t);
                     }
                 };
                 for (var _i = 0, typeSet_1 = typeSet; _i < typeSet_1.length; _i++) {
                     var t = typeSet_1[_i];
-                    _loop_15(t);
+                    _loop_17(t);
                 }
                 if (!aliasSymbol && namedUnions.length === 1 && reducedTypes.length === 0) {
                     return namedUnions[0];
@@ -57405,7 +58583,7 @@
                 }
             }
             var objectFlags = (includes & 468598819 /* NotPrimitiveUnion */ ? 0 : 65536 /* PrimitiveUnion */) |
-                (includes & 2097152 /* Intersection */ ? 67108864 /* ContainsIntersections */ : 0);
+                (includes & 2097152 /* Intersection */ ? 33554432 /* ContainsIntersections */ : 0);
             return getUnionTypeFromSortedList(typeSet, objectFlags, aliasSymbol, aliasTypeArguments, origin);
         }
         function getUnionOrIntersectionTypePredicate(signatures, kind) {
@@ -57443,15 +58621,6 @@
         function typePredicateKindsMatch(a, b) {
             return a.kind === b.kind && a.parameterIndex === b.parameterIndex;
         }
-        function createUnionType(types, aliasSymbol, aliasTypeArguments, origin) {
-            var result = createType(1048576 /* Union */);
-            result.objectFlags = getPropagatingFlagsOfTypes(types, /*excludeKinds*/ 98304 /* Nullable */);
-            result.types = types;
-            result.origin = origin;
-            result.aliasSymbol = aliasSymbol;
-            result.aliasTypeArguments = aliasTypeArguments;
-            return result;
-        }
         // This function assumes the constituent type list is sorted and deduplicated.
         function getUnionTypeFromSortedList(types, objectFlags, aliasSymbol, aliasTypeArguments, origin) {
             if (types.length === 0) {
@@ -57467,8 +58636,16 @@
             var id = typeKey + getAliasId(aliasSymbol, aliasTypeArguments);
             var type = unionTypes.get(id);
             if (!type) {
-                type = createUnionType(types, aliasSymbol, aliasTypeArguments, origin);
-                type.objectFlags |= objectFlags;
+                type = createType(1048576 /* Union */);
+                type.objectFlags = objectFlags | getPropagatingFlagsOfTypes(types, /*excludeKinds*/ 98304 /* Nullable */);
+                type.types = types;
+                type.origin = origin;
+                type.aliasSymbol = aliasSymbol;
+                type.aliasTypeArguments = aliasTypeArguments;
+                if (types.length === 2 && types[0].flags & 512 /* BooleanLiteral */ && types[1].flags & 512 /* BooleanLiteral */) {
+                    type.flags |= 16 /* Boolean */;
+                    type.intrinsicName = "boolean";
+                }
                 unionTypes.set(id, type);
             }
             return type;
@@ -57512,8 +58689,8 @@
         // Add the given types to the given type set. Order is preserved, freshness is removed from literal
         // types, duplicates are removed, and nested types of the given kind are flattened into the set.
         function addTypesToIntersection(typeSet, includes, types) {
-            for (var _i = 0, types_13 = types; _i < types_13.length; _i++) {
-                var type = types_13[_i];
+            for (var _i = 0, types_12 = types; _i < types_12.length; _i++) {
+                var type = types_12[_i];
                 includes = addTypeToIntersection(typeSet, includes, getRegularTypeOfLiteralType(type));
             }
             return includes;
@@ -57662,8 +58839,10 @@
             // a symbol-like type and a type known to be non-symbol-like, or
             // a void-like type and a type known to be non-void-like, or
             // a non-primitive type and a type known to be primitive.
-            if (includes & 131072 /* Never */ ||
-                strictNullChecks && includes & 98304 /* Nullable */ && includes & (524288 /* Object */ | 67108864 /* NonPrimitive */ | 16777216 /* IncludesEmptyObject */) ||
+            if (includes & 131072 /* Never */) {
+                return ts.contains(typeSet, silentNeverType) ? silentNeverType : neverType;
+            }
+            if (strictNullChecks && includes & 98304 /* Nullable */ && includes & (524288 /* Object */ | 67108864 /* NonPrimitive */ | 16777216 /* IncludesEmptyObject */) ||
                 includes & 67108864 /* NonPrimitive */ && includes & (469892092 /* DisjointDomains */ & ~67108864 /* NonPrimitive */) ||
                 includes & 402653316 /* StringLike */ && includes & (469892092 /* DisjointDomains */ & ~402653316 /* StringLike */) ||
                 includes & 296 /* NumberLike */ && includes & (469892092 /* DisjointDomains */ & ~296 /* NumberLike */) ||
@@ -57803,40 +58982,37 @@
                 constraint;
         }
         // Ordinarily we reduce a keyof M, where M is a mapped type { [P in K as N<P>]: X }, to simply N<K>. This however presumes
-        // that N distributes over union types, i.e. that N<A | B | C> is equivalent to N<A> | N<B> | N<C>. That presumption may not
-        // be true when N is a non-distributive conditional type or an instantiable type with a non-distributive conditional type as
-        // a constituent. In those cases, we cannot reduce keyof M and need to preserve it as is.
-        function maybeNonDistributiveNameType(type) {
-            return !!(type && (type.flags & 16777216 /* Conditional */ && (!type.root.isDistributive || maybeNonDistributiveNameType(type.checkType)) ||
-                type.flags & (3145728 /* UnionOrIntersection */ | 134217728 /* TemplateLiteral */) && ts.some(type.types, maybeNonDistributiveNameType) ||
-                type.flags & (4194304 /* Index */ | 268435456 /* StringMapping */) && maybeNonDistributiveNameType(type.type) ||
-                type.flags & 8388608 /* IndexedAccess */ && maybeNonDistributiveNameType(type.indexType) ||
-                type.flags & 33554432 /* Substitution */ && maybeNonDistributiveNameType(type.substitute)));
+        // that N distributes over union types, i.e. that N<A | B | C> is equivalent to N<A> | N<B> | N<C>. Specifically, we only
+        // want to perform the reduction when the name type of a mapped type is distributive with respect to the type variable
+        // introduced by the 'in' clause of the mapped type. Note that non-generic types are considered to be distributive because
+        // they're the same type regardless of what's being distributed over.
+        function hasDistributiveNameType(mappedType) {
+            var typeVariable = getTypeParameterFromMappedType(mappedType);
+            return isDistributive(getNameTypeFromMappedType(mappedType) || typeVariable);
+            function isDistributive(type) {
+                return type.flags & (3 /* AnyOrUnknown */ | 131068 /* Primitive */ | 131072 /* Never */ | 262144 /* TypeParameter */ | 524288 /* Object */ | 67108864 /* NonPrimitive */) ? true :
+                    type.flags & 16777216 /* Conditional */ ? type.root.isDistributive && type.checkType === typeVariable :
+                        type.flags & (3145728 /* UnionOrIntersection */ | 134217728 /* TemplateLiteral */) ? ts.every(type.types, isDistributive) :
+                            type.flags & 8388608 /* IndexedAccess */ ? isDistributive(type.objectType) && isDistributive(type.indexType) :
+                                type.flags & 33554432 /* Substitution */ ? isDistributive(type.substitute) :
+                                    type.flags & 268435456 /* StringMapping */ ? isDistributive(type.type) :
+                                        false;
+            }
         }
         function getLiteralTypeFromPropertyName(name) {
             if (ts.isPrivateIdentifier(name)) {
                 return neverType;
             }
-            return ts.isIdentifier(name) ? getLiteralType(ts.unescapeLeadingUnderscores(name.escapedText)) :
+            return ts.isIdentifier(name) ? getStringLiteralType(ts.unescapeLeadingUnderscores(name.escapedText)) :
                 getRegularTypeOfLiteralType(ts.isComputedPropertyName(name) ? checkComputedPropertyName(name) : checkExpression(name));
         }
-        function getBigIntLiteralType(node) {
-            return getLiteralType({
-                negative: false,
-                base10Value: ts.parsePseudoBigInt(node.text)
-            });
-        }
-        function getLiteralTypeFromProperty(prop, include) {
-            if (!(ts.getDeclarationModifierFlagsFromSymbol(prop) & 24 /* NonPublicAccessibilityModifier */)) {
+        function getLiteralTypeFromProperty(prop, include, includeNonPublic) {
+            if (includeNonPublic || !(ts.getDeclarationModifierFlagsFromSymbol(prop) & 24 /* NonPublicAccessibilityModifier */)) {
                 var type = getSymbolLinks(getLateBoundSymbol(prop)).nameType;
                 if (!type) {
-                    if (prop.escapedName === "default" /* Default */) {
-                        type = getLiteralType("default");
-                    }
-                    else {
-                        var name = prop.valueDeclaration && ts.getNameOfDeclaration(prop.valueDeclaration);
-                        type = name && getLiteralTypeFromPropertyName(name) || (!ts.isKnownSymbol(prop) ? getLiteralType(ts.symbolName(prop)) : undefined);
-                    }
+                    var name = ts.getNameOfDeclaration(prop.valueDeclaration);
+                    type = prop.escapedName === "default" /* Default */ ? getStringLiteralType("default") :
+                        name && getLiteralTypeFromPropertyName(name) || (!ts.isKnownSymbol(prop) ? getStringLiteralType(ts.symbolName(prop)) : undefined);
                 }
                 if (type && type.flags & include) {
                     return type;
@@ -57846,28 +59022,23 @@
         }
         function getLiteralTypeFromProperties(type, include, includeOrigin) {
             var origin = includeOrigin && (ts.getObjectFlags(type) & (3 /* ClassOrInterface */ | 4 /* Reference */) || type.aliasSymbol) ? createOriginIndexType(type) : undefined;
-            return getUnionType(ts.map(getPropertiesOfType(type), function (p) { return getLiteralTypeFromProperty(p, include); }), 1 /* Literal */, 
+            var propertyTypes = ts.map(getPropertiesOfType(type), function (prop) { return getLiteralTypeFromProperty(prop, include); });
+            var indexKeyTypes = ts.map(getIndexInfosOfType(type), function (info) { return info !== enumNumberIndexInfo && info.keyType.flags & include ?
+                info.keyType === stringType && include & 8 /* Number */ ? stringOrNumberType : info.keyType : neverType; });
+            return getUnionType(ts.concatenate(propertyTypes, indexKeyTypes), 1 /* Literal */, 
             /*aliasSymbol*/ undefined, /*aliasTypeArguments*/ undefined, origin);
         }
-        function getNonEnumNumberIndexInfo(type) {
-            var numberIndexInfo = getIndexInfoOfType(type, 1 /* Number */);
-            return numberIndexInfo !== enumNumberIndexInfo ? numberIndexInfo : undefined;
-        }
         function getIndexType(type, stringsOnly, noIndexSignatures) {
             if (stringsOnly === void 0) { stringsOnly = keyofStringsOnly; }
-            var includeOrigin = stringsOnly === keyofStringsOnly && !noIndexSignatures;
             type = getReducedType(type);
             return type.flags & 1048576 /* Union */ ? getIntersectionType(ts.map(type.types, function (t) { return getIndexType(t, stringsOnly, noIndexSignatures); })) :
                 type.flags & 2097152 /* Intersection */ ? getUnionType(ts.map(type.types, function (t) { return getIndexType(t, stringsOnly, noIndexSignatures); })) :
-                    type.flags & 58982400 /* InstantiableNonPrimitive */ || isGenericTupleType(type) || isGenericMappedType(type) && maybeNonDistributiveNameType(getNameTypeFromMappedType(type)) ? getIndexTypeForGenericType(type, stringsOnly) :
+                    type.flags & 58982400 /* InstantiableNonPrimitive */ || isGenericTupleType(type) || isGenericMappedType(type) && !hasDistributiveNameType(type) ? getIndexTypeForGenericType(type, stringsOnly) :
                         ts.getObjectFlags(type) & 32 /* Mapped */ ? getIndexTypeForMappedType(type, noIndexSignatures) :
                             type === wildcardType ? wildcardType :
                                 type.flags & 2 /* Unknown */ ? neverType :
                                     type.flags & (1 /* Any */ | 131072 /* Never */) ? keyofConstraintType :
-                                        stringsOnly ? !noIndexSignatures && getIndexInfoOfType(type, 0 /* String */) ? stringType : getLiteralTypeFromProperties(type, 128 /* StringLiteral */, includeOrigin) :
-                                            !noIndexSignatures && getIndexInfoOfType(type, 0 /* String */) ? getUnionType([stringType, numberType, getLiteralTypeFromProperties(type, 8192 /* UniqueESSymbol */, includeOrigin)]) :
-                                                getNonEnumNumberIndexInfo(type) ? getUnionType([numberType, getLiteralTypeFromProperties(type, 128 /* StringLiteral */ | 8192 /* UniqueESSymbol */, includeOrigin)]) :
-                                                    getLiteralTypeFromProperties(type, 8576 /* StringOrNumberLiteralOrUnique */, includeOrigin);
+                                        getLiteralTypeFromProperties(type, (noIndexSignatures ? 128 /* StringLiteral */ : 402653316 /* StringLike */) | (stringsOnly ? 0 : 296 /* NumberLike */ | 12288 /* ESSymbolLike */), stringsOnly === keyofStringsOnly && !noIndexSignatures);
         }
         function getExtractStringType(type) {
             if (keyofStringsOnly) {
@@ -57884,15 +59055,15 @@
             var links = getNodeLinks(node);
             if (!links.resolvedType) {
                 switch (node.operator) {
-                    case 138 /* KeyOfKeyword */:
+                    case 139 /* KeyOfKeyword */:
                         links.resolvedType = getIndexType(getTypeFromTypeNode(node.type));
                         break;
-                    case 151 /* UniqueKeyword */:
-                        links.resolvedType = node.type.kind === 148 /* SymbolKeyword */
+                    case 152 /* UniqueKeyword */:
+                        links.resolvedType = node.type.kind === 149 /* SymbolKeyword */
                             ? getESSymbolLikeTypeForNode(ts.walkUpParenthesizedTypes(node.parent))
                             : errorType;
                         break;
-                    case 142 /* ReadonlyKeyword */:
+                    case 143 /* ReadonlyKeyword */:
                         links.resolvedType = getTypeFromTypeNode(node.type);
                         break;
                     default:
@@ -57904,7 +59075,7 @@
         function getTypeFromTemplateTypeNode(node) {
             var links = getNodeLinks(node);
             if (!links.resolvedType) {
-                links.resolvedType = getTemplateLiteralType(__spreadArray([node.head.text], ts.map(node.templateSpans, function (span) { return span.literal.text; })), ts.map(node.templateSpans, function (span) { return getTypeFromTypeNode(span.type); }));
+                links.resolvedType = getTemplateLiteralType(__spreadArray([node.head.text], ts.map(node.templateSpans, function (span) { return span.literal.text; }), true), ts.map(node.templateSpans, function (span) { return getTypeFromTypeNode(span.type); }));
             }
             return links.resolvedType;
         }
@@ -57925,7 +59096,7 @@
                 return stringType;
             }
             if (newTypes.length === 0) {
-                return getLiteralType(text);
+                return getStringLiteralType(text);
             }
             newTexts.push(text);
             if (ts.every(newTexts, function (t) { return t === ""; }) && ts.every(newTypes, function (t) { return !!(t.flags & 4 /* String */); })) {
@@ -57978,7 +59149,7 @@
         function getStringMappingType(symbol, type) {
             return type.flags & (1048576 /* Union */ | 131072 /* Never */) ? mapType(type, function (t) { return getStringMappingType(symbol, t); }) :
                 isGenericIndexType(type) ? getStringMappingTypeForGenericType(symbol, type) :
-                    type.flags & 128 /* StringLiteral */ ? getLiteralType(applyStringMapping(symbol, type.value)) :
+                    type.flags & 128 /* StringLiteral */ ? getStringLiteralType(applyStringMapping(symbol, type.value)) :
                         type;
         }
         function applyStringMapping(symbol, str) {
@@ -58004,13 +59175,13 @@
             result.type = type;
             return result;
         }
-        function createIndexedAccessType(objectType, indexType, aliasSymbol, aliasTypeArguments, shouldIncludeUndefined) {
+        function createIndexedAccessType(objectType, indexType, accessFlags, aliasSymbol, aliasTypeArguments) {
             var type = createType(8388608 /* IndexedAccess */);
             type.objectType = objectType;
             type.indexType = indexType;
+            type.accessFlags = accessFlags;
             type.aliasSymbol = aliasSymbol;
             type.aliasTypeArguments = aliasTypeArguments;
-            type.noUncheckedIndexedAccessCandidate = shouldIncludeUndefined;
             return type;
         }
         /**
@@ -58059,14 +59230,17 @@
             }
             return true;
         }
-        function getPropertyTypeForIndexType(originalObjectType, objectType, indexType, fullIndexType, suppressNoImplicitAnyError, accessNode, accessFlags, noUncheckedIndexedAccessCandidate, reportDeprecated) {
+        function getPropertyTypeForIndexType(originalObjectType, objectType, indexType, fullIndexType, accessNode, accessFlags) {
             var _a;
-            var accessExpression = accessNode && accessNode.kind === 203 /* ElementAccessExpression */ ? accessNode : undefined;
+            var accessExpression = accessNode && accessNode.kind === 205 /* ElementAccessExpression */ ? accessNode : undefined;
             var propName = accessNode && ts.isPrivateIdentifier(accessNode) ? undefined : getPropertyNameFromIndex(indexType, accessNode);
             if (propName !== undefined) {
+                if (accessFlags & 256 /* Contextual */) {
+                    return getTypeOfPropertyOfContextualType(objectType, propName) || anyType;
+                }
                 var prop = getPropertyOfType(objectType, propName);
                 if (prop) {
-                    if (reportDeprecated && accessNode && prop.declarations && getDeclarationNodeFlagsFromSymbol(prop) & 134217728 /* Deprecated */ && isUncalledFunctionReference(accessNode, prop)) {
+                    if (accessFlags & 64 /* ReportDeprecated */ && accessNode && prop.declarations && getDeclarationNodeFlagsFromSymbol(prop) & 134217728 /* Deprecated */ && isUncalledFunctionReference(accessNode, prop)) {
                         var deprecatedNode = (_a = accessExpression === null || accessExpression === void 0 ? void 0 : accessExpression.argumentExpression) !== null && _a !== void 0 ? _a : (ts.isIndexedAccessTypeNode(accessNode) ? accessNode.indexType : accessNode);
                         addDeprecatedSuggestion(deprecatedNode, prop.declarations, propName);
                     }
@@ -58076,7 +59250,7 @@
                             error(accessExpression.argumentExpression, ts.Diagnostics.Cannot_assign_to_0_because_it_is_a_read_only_property, symbolToString(prop));
                             return undefined;
                         }
-                        if (accessFlags & 4 /* CacheSymbol */) {
+                        if (accessFlags & 8 /* CacheSymbol */) {
                             getNodeLinks(accessNode).resolvedSymbol = prop;
                         }
                         if (isThisPropertyAccessInConstructor(accessExpression, prop)) {
@@ -58089,7 +59263,7 @@
                         propType;
                 }
                 if (everyType(objectType, isTupleType) && isNumericLiteralName(propName) && +propName >= 0) {
-                    if (accessNode && everyType(objectType, function (t) { return !t.target.hasRestElement; }) && !(accessFlags & 8 /* NoTupleBoundsCheck */)) {
+                    if (accessNode && everyType(objectType, function (t) { return !t.target.hasRestElement; }) && !(accessFlags & 16 /* NoTupleBoundsCheck */)) {
                         var indexNode = getIndexNodeForAccessExpression(accessNode);
                         if (isTupleType(objectType)) {
                             error(indexNode, ts.Diagnostics.Tuple_type_0_of_length_1_has_no_element_at_index_2, typeToString(objectType), getTypeReferenceArity(objectType), ts.unescapeLeadingUnderscores(propName));
@@ -58098,10 +59272,10 @@
                             error(indexNode, ts.Diagnostics.Property_0_does_not_exist_on_type_1, ts.unescapeLeadingUnderscores(propName), typeToString(objectType));
                         }
                     }
-                    errorIfWritingToReadonlyIndex(getIndexInfoOfType(objectType, 1 /* Number */));
+                    errorIfWritingToReadonlyIndex(getIndexInfoOfType(objectType, numberType));
                     return mapType(objectType, function (t) {
                         var restType = getRestTypeOfTupleType(t) || undefinedType;
-                        return noUncheckedIndexedAccessCandidate ? getUnionType([restType, undefinedType]) : restType;
+                        return accessFlags & 1 /* IncludeUndefined */ ? getUnionType([restType, undefinedType]) : restType;
                     });
                 }
             }
@@ -58109,22 +59283,23 @@
                 if (objectType.flags & (1 /* Any */ | 131072 /* Never */)) {
                     return objectType;
                 }
-                var stringIndexInfo = getIndexInfoOfType(objectType, 0 /* String */);
-                var indexInfo = isTypeAssignableToKind(indexType, 296 /* NumberLike */) && getIndexInfoOfType(objectType, 1 /* Number */) || stringIndexInfo;
+                // If no index signature is applicable, we default to the string index signature. In effect, this means the string
+                // index signature applies even when accessing with a symbol-like type.
+                var indexInfo = getApplicableIndexInfo(objectType, indexType) || getIndexInfoOfType(objectType, stringType);
                 if (indexInfo) {
-                    if (accessFlags & 1 /* NoIndexSignatures */ && indexInfo === stringIndexInfo) {
+                    if (accessFlags & 2 /* NoIndexSignatures */ && indexInfo.keyType !== numberType) {
                         if (accessExpression) {
                             error(accessExpression, ts.Diagnostics.Type_0_cannot_be_used_to_index_type_1, typeToString(indexType), typeToString(originalObjectType));
                         }
                         return undefined;
                     }
-                    if (accessNode && !isTypeAssignableToKind(indexType, 4 /* String */ | 8 /* Number */)) {
+                    if (accessNode && indexInfo.keyType === stringType && !isTypeAssignableToKind(indexType, 4 /* String */ | 8 /* Number */)) {
                         var indexNode = getIndexNodeForAccessExpression(accessNode);
                         error(indexNode, ts.Diagnostics.Type_0_cannot_be_used_as_an_index_type, typeToString(indexType));
-                        return noUncheckedIndexedAccessCandidate ? getUnionType([indexInfo.type, undefinedType]) : indexInfo.type;
+                        return accessFlags & 1 /* IncludeUndefined */ ? getUnionType([indexInfo.type, undefinedType]) : indexInfo.type;
                     }
                     errorIfWritingToReadonlyIndex(indexInfo);
-                    return noUncheckedIndexedAccessCandidate ? getUnionType([indexInfo.type, undefinedType]) : indexInfo.type;
+                    return accessFlags & 1 /* IncludeUndefined */ ? getUnionType([indexInfo.type, undefinedType]) : indexInfo.type;
                 }
                 if (indexType.flags & 131072 /* Never */) {
                     return neverType;
@@ -58148,12 +59323,12 @@
                     if (objectType.symbol === globalThisSymbol && propName !== undefined && globalThisSymbol.exports.has(propName) && (globalThisSymbol.exports.get(propName).flags & 418 /* BlockScoped */)) {
                         error(accessExpression, ts.Diagnostics.Property_0_does_not_exist_on_type_1, ts.unescapeLeadingUnderscores(propName), typeToString(objectType));
                     }
-                    else if (noImplicitAny && !compilerOptions.suppressImplicitAnyIndexErrors && !suppressNoImplicitAnyError) {
+                    else if (noImplicitAny && !compilerOptions.suppressImplicitAnyIndexErrors && !(accessFlags & 128 /* SuppressNoImplicitAnyError */)) {
                         if (propName !== undefined && typeHasStaticProperty(propName, objectType)) {
                             var typeName = typeToString(objectType);
                             error(accessExpression, ts.Diagnostics.Property_0_does_not_exist_on_type_1_Did_you_mean_to_access_the_static_member_2_instead, propName, typeName, typeName + "[" + ts.getTextOfNode(accessExpression.argumentExpression) + "]");
                         }
-                        else if (getIndexTypeOfType(objectType, 1 /* Number */)) {
+                        else if (getIndexTypeOfType(objectType, numberType)) {
                             error(accessExpression.argumentExpression, ts.Diagnostics.Element_implicitly_has_an_any_type_because_index_expression_is_not_of_type_number);
                         }
                         else {
@@ -58221,9 +59396,9 @@
             }
         }
         function getIndexNodeForAccessExpression(accessNode) {
-            return accessNode.kind === 203 /* ElementAccessExpression */ ? accessNode.argumentExpression :
-                accessNode.kind === 190 /* IndexedAccessType */ ? accessNode.indexType :
-                    accessNode.kind === 159 /* ComputedPropertyName */ ? accessNode.expression :
+            return accessNode.kind === 205 /* ElementAccessExpression */ ? accessNode.argumentExpression :
+                accessNode.kind === 192 /* IndexedAccessType */ ? accessNode.indexType :
+                    accessNode.kind === 160 /* ComputedPropertyName */ ? accessNode.expression :
                         accessNode;
         }
         function isPatternLiteralPlaceholderType(type) {
@@ -58232,39 +59407,32 @@
         function isPatternLiteralType(type) {
             return !!(type.flags & 134217728 /* TemplateLiteral */) && ts.every(type.types, isPatternLiteralPlaceholderType);
         }
+        function isGenericType(type) {
+            return !!getGenericObjectFlags(type);
+        }
         function isGenericObjectType(type) {
-            if (type.flags & 3145728 /* UnionOrIntersection */) {
-                if (!(type.objectFlags & 4194304 /* IsGenericObjectTypeComputed */)) {
-                    type.objectFlags |= 4194304 /* IsGenericObjectTypeComputed */ |
-                        (ts.some(type.types, isGenericObjectType) ? 8388608 /* IsGenericObjectType */ : 0);
-                }
-                return !!(type.objectFlags & 8388608 /* IsGenericObjectType */);
-            }
-            if (type.flags & 33554432 /* Substitution */) {
-                if (!(type.objectFlags & 4194304 /* IsGenericObjectTypeComputed */)) {
-                    type.objectFlags |= 4194304 /* IsGenericObjectTypeComputed */ |
-                        (isGenericObjectType(type.substitute) || isGenericObjectType(type.baseType) ? 8388608 /* IsGenericObjectType */ : 0);
-                }
-                return !!(type.objectFlags & 8388608 /* IsGenericObjectType */);
-            }
-            return !!(type.flags & 58982400 /* InstantiableNonPrimitive */) || isGenericMappedType(type) || isGenericTupleType(type);
+            return !!(getGenericObjectFlags(type) & 8388608 /* IsGenericObjectType */);
         }
         function isGenericIndexType(type) {
+            return !!(getGenericObjectFlags(type) & 16777216 /* IsGenericIndexType */);
+        }
+        function getGenericObjectFlags(type) {
             if (type.flags & 3145728 /* UnionOrIntersection */) {
-                if (!(type.objectFlags & 16777216 /* IsGenericIndexTypeComputed */)) {
-                    type.objectFlags |= 16777216 /* IsGenericIndexTypeComputed */ |
-                        (ts.some(type.types, isGenericIndexType) ? 33554432 /* IsGenericIndexType */ : 0);
+                if (!(type.objectFlags & 4194304 /* IsGenericTypeComputed */)) {
+                    type.objectFlags |= 4194304 /* IsGenericTypeComputed */ |
+                        ts.reduceLeft(type.types, function (flags, t) { return flags | getGenericObjectFlags(t); }, 0);
                 }
-                return !!(type.objectFlags & 33554432 /* IsGenericIndexType */);
+                return type.objectFlags & 25165824 /* IsGenericType */;
             }
             if (type.flags & 33554432 /* Substitution */) {
-                if (!(type.objectFlags & 16777216 /* IsGenericIndexTypeComputed */)) {
-                    type.objectFlags |= 16777216 /* IsGenericIndexTypeComputed */ |
-                        (isGenericIndexType(type.substitute) || isGenericIndexType(type.baseType) ? 33554432 /* IsGenericIndexType */ : 0);
+                if (!(type.objectFlags & 4194304 /* IsGenericTypeComputed */)) {
+                    type.objectFlags |= 4194304 /* IsGenericTypeComputed */ |
+                        getGenericObjectFlags(type.substitute) | getGenericObjectFlags(type.baseType);
                 }
-                return !!(type.objectFlags & 33554432 /* IsGenericIndexType */);
+                return type.objectFlags & 25165824 /* IsGenericType */;
             }
-            return !!(type.flags & (58982400 /* InstantiableNonPrimitive */ | 4194304 /* Index */ | 134217728 /* TemplateLiteral */ | 268435456 /* StringMapping */)) && !isPatternLiteralType(type);
+            return (type.flags & 58982400 /* InstantiableNonPrimitive */ || isGenericMappedType(type) || isGenericTupleType(type) ? 8388608 /* IsGenericObjectType */ : 0) |
+                (type.flags & (58982400 /* InstantiableNonPrimitive */ | 4194304 /* Index */ | 134217728 /* TemplateLiteral */ | 268435456 /* StringMapping */) && !isPatternLiteralType(type) ? 16777216 /* IsGenericIndexType */ : 0);
         }
         function isThisTypeParameter(type) {
             return !!(type.flags & 262144 /* TypeParameter */ && type.isThisType);
@@ -58380,9 +59548,9 @@
             var templateMapper = combineTypeMappers(objectType.mapper, mapper);
             return instantiateType(getTemplateTypeFromMappedType(objectType), templateMapper);
         }
-        function getIndexedAccessType(objectType, indexType, noUncheckedIndexedAccessCandidate, accessNode, aliasSymbol, aliasTypeArguments, accessFlags) {
+        function getIndexedAccessType(objectType, indexType, accessFlags, accessNode, aliasSymbol, aliasTypeArguments) {
             if (accessFlags === void 0) { accessFlags = 0 /* None */; }
-            return getIndexedAccessTypeOrUndefined(objectType, indexType, noUncheckedIndexedAccessCandidate, accessNode, accessFlags, aliasSymbol, aliasTypeArguments) || (accessNode ? errorType : unknownType);
+            return getIndexedAccessTypeOrUndefined(objectType, indexType, accessFlags, accessNode, aliasSymbol, aliasTypeArguments) || (accessNode ? errorType : unknownType);
         }
         function indexTypeLessThan(indexType, limit) {
             return everyType(indexType, function (t) {
@@ -58396,36 +59564,38 @@
                 return false;
             });
         }
-        function getIndexedAccessTypeOrUndefined(objectType, indexType, noUncheckedIndexedAccessCandidate, accessNode, accessFlags, aliasSymbol, aliasTypeArguments) {
+        function getIndexedAccessTypeOrUndefined(objectType, indexType, accessFlags, accessNode, aliasSymbol, aliasTypeArguments) {
             if (accessFlags === void 0) { accessFlags = 0 /* None */; }
             if (objectType === wildcardType || indexType === wildcardType) {
                 return wildcardType;
             }
-            var shouldIncludeUndefined = noUncheckedIndexedAccessCandidate ||
-                (!!compilerOptions.noUncheckedIndexedAccess &&
-                    (accessFlags & (2 /* Writing */ | 16 /* ExpressionPosition */)) === 16 /* ExpressionPosition */);
             // If the object type has a string index signature and no other members we know that the result will
             // always be the type of that index signature and we can simplify accordingly.
             if (isStringIndexSignatureOnlyType(objectType) && !(indexType.flags & 98304 /* Nullable */) && isTypeAssignableToKind(indexType, 4 /* String */ | 8 /* Number */)) {
                 indexType = stringType;
             }
+            // In noUncheckedIndexedAccess mode, indexed access operations that occur in an expression in a read position and resolve to
+            // an index signature have 'undefined' included in their type.
+            if (compilerOptions.noUncheckedIndexedAccess && accessFlags & 32 /* ExpressionPosition */)
+                accessFlags |= 1 /* IncludeUndefined */;
             // If the index type is generic, or if the object type is generic and doesn't originate in an expression and
             // the operation isn't exclusively indexing the fixed (non-variadic) portion of a tuple type, we are performing
             // a higher-order index access where we cannot meaningfully access the properties of the object type. Note that
             // for a generic T and a non-generic K, we eagerly resolve T[K] if it originates in an expression. This is to
             // preserve backwards compatibility. For example, an element access 'this["foo"]' has always been resolved
             // eagerly using the constraint type of 'this' at the given location.
-            if (isGenericIndexType(indexType) || (accessNode && accessNode.kind !== 190 /* IndexedAccessType */ ?
+            if (isGenericIndexType(indexType) || (accessNode && accessNode.kind !== 192 /* IndexedAccessType */ ?
                 isGenericTupleType(objectType) && !indexTypeLessThan(indexType, objectType.target.fixedLength) :
                 isGenericObjectType(objectType) && !(isTupleType(objectType) && indexTypeLessThan(indexType, objectType.target.fixedLength)))) {
                 if (objectType.flags & 3 /* AnyOrUnknown */) {
                     return objectType;
                 }
                 // Defer the operation by creating an indexed access type.
-                var id = objectType.id + "," + indexType.id + (shouldIncludeUndefined ? "?" : "") + getAliasId(aliasSymbol, aliasTypeArguments);
+                var persistentAccessFlags = accessFlags & 1 /* Persistent */;
+                var id = objectType.id + "," + indexType.id + "," + persistentAccessFlags + getAliasId(aliasSymbol, aliasTypeArguments);
                 var type = indexedAccessTypes.get(id);
                 if (!type) {
-                    indexedAccessTypes.set(id, type = createIndexedAccessType(objectType, indexType, aliasSymbol, aliasTypeArguments, shouldIncludeUndefined));
+                    indexedAccessTypes.set(id, type = createIndexedAccessType(objectType, indexType, persistentAccessFlags, aliasSymbol, aliasTypeArguments));
                 }
                 return type;
             }
@@ -58438,7 +59608,7 @@
                 var wasMissingProp = false;
                 for (var _i = 0, _a = indexType.types; _i < _a.length; _i++) {
                     var t = _a[_i];
-                    var propType = getPropertyTypeForIndexType(objectType, apparentObjectType, t, indexType, wasMissingProp, accessNode, accessFlags, shouldIncludeUndefined);
+                    var propType = getPropertyTypeForIndexType(objectType, apparentObjectType, t, indexType, accessNode, accessFlags | (wasMissingProp ? 128 /* SuppressNoImplicitAnyError */ : 0));
                     if (propType) {
                         propTypes.push(propType);
                     }
@@ -58454,11 +59624,11 @@
                 if (wasMissingProp) {
                     return undefined;
                 }
-                return accessFlags & 2 /* Writing */
+                return accessFlags & 4 /* Writing */
                     ? getIntersectionType(propTypes, aliasSymbol, aliasTypeArguments)
                     : getUnionType(propTypes, 1 /* Literal */, aliasSymbol, aliasTypeArguments);
             }
-            return getPropertyTypeForIndexType(objectType, apparentObjectType, indexType, indexType, /* supressNoImplicitAnyError */ false, accessNode, accessFlags | 4 /* CacheSymbol */, shouldIncludeUndefined, /* reportDeprecated */ true);
+            return getPropertyTypeForIndexType(objectType, apparentObjectType, indexType, indexType, accessNode, accessFlags | 8 /* CacheSymbol */ | 64 /* ReportDeprecated */);
         }
         function getTypeFromIndexedAccessTypeNode(node) {
             var links = getNodeLinks(node);
@@ -58466,7 +59636,7 @@
                 var objectType = getTypeFromTypeNode(node.objectType);
                 var indexType = getTypeFromTypeNode(node.indexType);
                 var potentialAlias = getAliasSymbolForTypeNode(node);
-                var resolved = getIndexedAccessType(objectType, indexType, /*noUncheckedIndexedAccessCandidate*/ undefined, node, potentialAlias, getTypeArgumentsForAliasSymbol(potentialAlias));
+                var resolved = getIndexedAccessType(objectType, indexType, 0 /* None */, node, potentialAlias, getTypeArgumentsForAliasSymbol(potentialAlias));
                 links.resolvedType = resolved.flags & 8388608 /* IndexedAccess */ &&
                     resolved.objectType === objectType &&
                     resolved.indexType === indexType ?
@@ -58499,11 +59669,10 @@
             return type;
         }
         function isTypicalNondistributiveConditional(root) {
-            return !root.isDistributive
-                && root.node.checkType.kind === 180 /* TupleType */
-                && ts.length(root.node.checkType.elements) === 1
-                && root.node.extendsType.kind === 180 /* TupleType */
-                && ts.length(root.node.extendsType.elements) === 1;
+            return !root.isDistributive && isSingletonTupleType(root.node.checkType) && isSingletonTupleType(root.node.extendsType);
+        }
+        function isSingletonTupleType(node) {
+            return ts.isTupleTypeNode(node) && ts.length(node.elements) === 1 && !ts.isOptionalTypeNode(node.elements[0]) && !ts.isRestTypeNode(node.elements[0]);
         }
         /**
          * We syntactually check for common nondistributive conditional shapes and unwrap them into
@@ -58518,11 +59687,11 @@
             var extraTypes;
             // We loop here for an immediately nested conditional type in the false position, effectively treating
             // types of the form 'A extends B ? X : C extends D ? Y : E extends F ? Z : ...' as a single construct for
-            // purposes of resolution. This means such types aren't subject to the instatiation depth limiter.
+            // purposes of resolution. This means such types aren't subject to the instantiation depth limiter.
             while (true) {
                 var isUnwrapped = isTypicalNondistributiveConditional(root);
                 var checkType = instantiateType(unwrapNondistributiveConditionalTuple(root, getActualTypeVariable(root.checkType)), mapper);
-                var checkTypeInstantiable = isGenericObjectType(checkType) || isGenericIndexType(checkType);
+                var checkTypeInstantiable = isGenericType(checkType);
                 var extendsType = instantiateType(unwrapNondistributiveConditionalTuple(root, root.extendsType), mapper);
                 if (checkType === wildcardType || extendsType === wildcardType) {
                     return wildcardType;
@@ -58544,7 +59713,7 @@
                 // Instantiate the extends type including inferences for 'infer T' type parameters
                 var inferredExtendsType = combinedMapper ? instantiateType(unwrapNondistributiveConditionalTuple(root, root.extendsType), combinedMapper) : extendsType;
                 // We attempt to resolve the conditional type only when the check and extends types are non-generic
-                if (!checkTypeInstantiable && !isGenericObjectType(inferredExtendsType) && !isGenericIndexType(inferredExtendsType)) {
+                if (!checkTypeInstantiable && !isGenericType(inferredExtendsType)) {
                     // Return falseType for a definitely false extends check. We check an instantiations of the two
                     // types with type parameters mapped to the wildcard type, the most permissive instantiations
                     // possible (the wildcard type is assignable to and from all types). If those are not related,
@@ -58744,7 +59913,7 @@
         }
         function getAliasSymbolForTypeNode(node) {
             var host = node.parent;
-            while (ts.isParenthesizedTypeNode(host) || ts.isJSDocTypeExpression(host) || ts.isTypeOperatorNode(host) && host.operator === 142 /* ReadonlyKeyword */) {
+            while (ts.isParenthesizedTypeNode(host) || ts.isJSDocTypeExpression(host) || ts.isTypeOperatorNode(host) && host.operator === 143 /* ReadonlyKeyword */) {
                 host = host.parent;
             }
             return ts.isTypeAlias(host) ? getSymbolOfNode(host) : undefined;
@@ -58759,16 +59928,19 @@
             return isEmptyObjectType(type) || !!(type.flags & (65536 /* Null */ | 32768 /* Undefined */ | 528 /* BooleanLike */ | 296 /* NumberLike */ | 2112 /* BigIntLike */ | 402653316 /* StringLike */ | 1056 /* EnumLike */ | 67108864 /* NonPrimitive */ | 4194304 /* Index */));
         }
         function tryMergeUnionOfObjectTypeAndEmptyObject(type, readonly) {
+            if (!(type.flags & 1048576 /* Union */)) {
+                return type;
+            }
             if (ts.every(type.types, isEmptyObjectTypeOrSpreadsIntoEmptyObject)) {
                 return ts.find(type.types, isEmptyObjectType) || emptyObjectType;
             }
             var firstType = ts.find(type.types, function (t) { return !isEmptyObjectTypeOrSpreadsIntoEmptyObject(t); });
             if (!firstType) {
-                return undefined;
+                return type;
             }
-            var secondType = firstType && ts.find(type.types, function (t) { return t !== firstType && !isEmptyObjectTypeOrSpreadsIntoEmptyObject(t); });
+            var secondType = ts.find(type.types, function (t) { return t !== firstType && !isEmptyObjectTypeOrSpreadsIntoEmptyObject(t); });
             if (secondType) {
-                return undefined;
+                return type;
             }
             return getAnonymousPartialType(firstType);
             function getAnonymousPartialType(type) {
@@ -58783,14 +59955,14 @@
                         var isSetonlyAccessor = prop.flags & 65536 /* SetAccessor */ && !(prop.flags & 32768 /* GetAccessor */);
                         var flags = 4 /* Property */ | 16777216 /* Optional */;
                         var result = createSymbol(flags, prop.escapedName, getIsLateCheckFlag(prop) | (readonly ? 8 /* Readonly */ : 0));
-                        result.type = isSetonlyAccessor ? undefinedType : getUnionType([getTypeOfSymbol(prop), undefinedType]);
+                        result.type = isSetonlyAccessor ? undefinedType : addOptionality(getTypeOfSymbol(prop), /*isProperty*/ true);
                         result.declarations = prop.declarations;
                         result.nameType = getSymbolLinks(prop).nameType;
                         result.syntheticOrigin = prop;
                         members.set(prop.escapedName, result);
                     }
                 }
-                var spread = createAnonymousType(type.symbol, members, ts.emptyArray, ts.emptyArray, getIndexInfoOfType(type, 0 /* String */), getIndexInfoOfType(type, 1 /* Number */));
+                var spread = createAnonymousType(type.symbol, members, ts.emptyArray, ts.emptyArray, getIndexInfosOfType(type));
                 spread.objectFlags |= 128 /* ObjectLiteral */ | 262144 /* ContainsObjectOrArrayLiteral */;
                 return spread;
             }
@@ -58813,20 +59985,14 @@
             if (right.flags & 131072 /* Never */) {
                 return left;
             }
+            left = tryMergeUnionOfObjectTypeAndEmptyObject(left, readonly);
             if (left.flags & 1048576 /* Union */) {
-                var merged = tryMergeUnionOfObjectTypeAndEmptyObject(left, readonly);
-                if (merged) {
-                    return getSpreadType(merged, right, symbol, objectFlags, readonly);
-                }
                 return checkCrossProductUnion([left, right])
                     ? mapType(left, function (t) { return getSpreadType(t, right, symbol, objectFlags, readonly); })
                     : errorType;
             }
+            right = tryMergeUnionOfObjectTypeAndEmptyObject(right, readonly);
             if (right.flags & 1048576 /* Union */) {
-                var merged = tryMergeUnionOfObjectTypeAndEmptyObject(right, readonly);
-                if (merged) {
-                    return getSpreadType(left, merged, symbol, objectFlags, readonly);
-                }
                 return checkCrossProductUnion([left, right])
                     ? mapType(right, function (t) { return getSpreadType(left, t, symbol, objectFlags, readonly); })
                     : errorType;
@@ -58852,17 +60018,7 @@
             }
             var members = ts.createSymbolTable();
             var skippedPrivateMembers = new ts.Set();
-            var stringIndexInfo;
-            var numberIndexInfo;
-            if (left === emptyObjectType) {
-                // for the first spread element, left === emptyObjectType, so take the right's string indexer
-                stringIndexInfo = getIndexInfoOfType(right, 0 /* String */);
-                numberIndexInfo = getIndexInfoOfType(right, 1 /* Number */);
-            }
-            else {
-                stringIndexInfo = unionSpreadIndexInfos(getIndexInfoOfType(left, 0 /* String */), getIndexInfoOfType(right, 0 /* String */));
-                numberIndexInfo = unionSpreadIndexInfos(getIndexInfoOfType(left, 1 /* Number */), getIndexInfoOfType(right, 1 /* Number */));
-            }
+            var indexInfos = left === emptyObjectType ? getIndexInfosOfType(right) : getUnionIndexInfos([left, right]);
             for (var _i = 0, _a = getPropertiesOfType(right); _i < _a.length; _i++) {
                 var rightProp = _a[_i];
                 if (ts.getDeclarationModifierFlagsFromSymbol(rightProp) & (8 /* Private */ | 16 /* Protected */)) {
@@ -58884,7 +60040,7 @@
                         var declarations = ts.concatenate(leftProp.declarations, rightProp.declarations);
                         var flags = 4 /* Property */ | (leftProp.flags & 16777216 /* Optional */);
                         var result = createSymbol(flags, leftProp.escapedName);
-                        result.type = getUnionType([getTypeOfSymbol(leftProp), getTypeWithFacts(rightType, 524288 /* NEUndefined */)]);
+                        result.type = getUnionType([getTypeOfSymbol(leftProp), removeMissingOrUndefinedType(rightType)]);
                         result.leftSpread = leftProp;
                         result.rightSpread = rightProp;
                         result.declarations = declarations;
@@ -58896,7 +60052,7 @@
                     members.set(leftProp.escapedName, getSpreadSymbol(leftProp, readonly));
                 }
             }
-            var spread = createAnonymousType(symbol, members, ts.emptyArray, ts.emptyArray, getIndexInfoWithReadonly(stringIndexInfo, readonly), getIndexInfoWithReadonly(numberIndexInfo, readonly));
+            var spread = createAnonymousType(symbol, members, ts.emptyArray, ts.emptyArray, ts.sameMap(indexInfos, function (info) { return getIndexInfoWithReadonly(info, readonly); }));
             spread.objectFlags |= 128 /* ObjectLiteral */ | 262144 /* ContainsObjectOrArrayLiteral */ | 4194304 /* ContainsSpread */ | objectFlags;
             return spread;
         }
@@ -58921,19 +60077,19 @@
             return result;
         }
         function getIndexInfoWithReadonly(info, readonly) {
-            return info && info.isReadonly !== readonly ? createIndexInfo(info.type, readonly, info.declaration) : info;
+            return info.isReadonly !== readonly ? createIndexInfo(info.keyType, info.type, readonly, info.declaration) : info;
         }
-        function createLiteralType(flags, value, symbol) {
+        function createLiteralType(flags, value, symbol, regularType) {
             var type = createType(flags);
             type.symbol = symbol;
             type.value = value;
+            type.regularType = regularType || type;
             return type;
         }
         function getFreshTypeOfLiteralType(type) {
             if (type.flags & 2944 /* Literal */) {
                 if (!type.freshType) {
-                    var freshType = createLiteralType(type.flags, type.value, type.symbol);
-                    freshType.regularType = type;
+                    var freshType = createLiteralType(type.flags, type.value, type.symbol, type);
                     freshType.freshType = freshType;
                     type.freshType = freshType;
                 }
@@ -58949,25 +60105,32 @@
         function isFreshLiteralType(type) {
             return !!(type.flags & 2944 /* Literal */) && type.freshType === type;
         }
-        function getLiteralType(value, enumId, symbol) {
-            // We store all literal types in a single map with keys of the form '#NNN' and '@SSS',
-            // where NNN is the text representation of a numeric literal and SSS are the characters
-            // of a string literal. For literal enum members we use 'EEE#NNN' and 'EEE@SSS', where
-            // EEE is a unique id for the containing enum type.
-            var qualifier = typeof value === "number" ? "#" : typeof value === "string" ? "@" : "n";
-            var key = (enumId ? enumId : "") + qualifier + (typeof value === "object" ? ts.pseudoBigIntToString(value) : value);
-            var type = literalTypes.get(key);
-            if (!type) {
-                var flags = (typeof value === "number" ? 256 /* NumberLiteral */ :
-                    typeof value === "string" ? 128 /* StringLiteral */ : 2048 /* BigIntLiteral */) |
-                    (enumId ? 1024 /* EnumLiteral */ : 0);
-                literalTypes.set(key, type = createLiteralType(flags, value, symbol));
-                type.regularType = type;
-            }
-            return type;
+        function getStringLiteralType(value) {
+            var type;
+            return stringLiteralTypes.get(value) ||
+                (stringLiteralTypes.set(value, type = createLiteralType(128 /* StringLiteral */, value)), type);
+        }
+        function getNumberLiteralType(value) {
+            var type;
+            return numberLiteralTypes.get(value) ||
+                (numberLiteralTypes.set(value, type = createLiteralType(256 /* NumberLiteral */, value)), type);
+        }
+        function getBigIntLiteralType(value) {
+            var type;
+            var key = ts.pseudoBigIntToString(value);
+            return bigIntLiteralTypes.get(key) ||
+                (bigIntLiteralTypes.set(key, type = createLiteralType(2048 /* BigIntLiteral */, value)), type);
+        }
+        function getEnumLiteralType(value, enumId, symbol) {
+            var type;
+            var qualifier = typeof value === "string" ? "@" : "#";
+            var key = enumId + qualifier + value;
+            var flags = 1024 /* EnumLiteral */ | (typeof value === "string" ? 128 /* StringLiteral */ : 256 /* NumberLiteral */);
+            return enumLiteralTypes.get(key) ||
+                (enumLiteralTypes.set(key, type = createLiteralType(flags, value, symbol)), type);
         }
         function getTypeFromLiteralTypeNode(node) {
-            if (node.literal.kind === 103 /* NullKeyword */) {
+            if (node.literal.kind === 104 /* NullKeyword */) {
                 return nullType;
             }
             var links = getNodeLinks(node);
@@ -58993,8 +60156,8 @@
         function getThisType(node) {
             var container = ts.getThisContainer(node, /*includeArrowFunctions*/ false);
             var parent = container && container.parent;
-            if (parent && (ts.isClassLike(parent) || parent.kind === 254 /* InterfaceDeclaration */)) {
-                if (!ts.hasSyntacticModifier(container, 32 /* Static */) &&
+            if (parent && (ts.isClassLike(parent) || parent.kind === 256 /* InterfaceDeclaration */)) {
+                if (!ts.isStatic(container) &&
                     (!ts.isConstructorDeclaration(container) || ts.isNodeDescendantOf(node, container.body))) {
                     return getDeclaredTypeOfClassOrInterface(getSymbolOfNode(parent)).thisType;
                 }
@@ -59028,17 +60191,17 @@
         }
         function getArrayElementTypeNode(node) {
             switch (node.kind) {
-                case 187 /* ParenthesizedType */:
+                case 189 /* ParenthesizedType */:
                     return getArrayElementTypeNode(node.type);
-                case 180 /* TupleType */:
+                case 182 /* TupleType */:
                     if (node.elements.length === 1) {
                         node = node.elements[0];
-                        if (node.kind === 182 /* RestType */ || node.kind === 193 /* NamedTupleMember */ && node.dotDotDotToken) {
+                        if (node.kind === 184 /* RestType */ || node.kind === 195 /* NamedTupleMember */ && node.dotDotDotToken) {
                             return getArrayElementTypeNode(node.type);
                         }
                     }
                     break;
-                case 179 /* ArrayType */:
+                case 181 /* ArrayType */:
                     return node.elementType;
             }
             return undefined;
@@ -59047,107 +60210,106 @@
             var links = getNodeLinks(node);
             return links.resolvedType || (links.resolvedType =
                 node.dotDotDotToken ? getTypeFromRestTypeNode(node) :
-                    node.questionToken && strictNullChecks ? getOptionalType(getTypeFromTypeNode(node.type)) :
-                        getTypeFromTypeNode(node.type));
+                    addOptionality(getTypeFromTypeNode(node.type), /*isProperty*/ true, !!node.questionToken));
         }
         function getTypeFromTypeNode(node) {
             return getConditionalFlowTypeOfType(getTypeFromTypeNodeWorker(node), node);
         }
         function getTypeFromTypeNodeWorker(node) {
             switch (node.kind) {
-                case 128 /* AnyKeyword */:
-                case 304 /* JSDocAllType */:
-                case 305 /* JSDocUnknownType */:
+                case 129 /* AnyKeyword */:
+                case 307 /* JSDocAllType */:
+                case 308 /* JSDocUnknownType */:
                     return anyType;
-                case 152 /* UnknownKeyword */:
+                case 153 /* UnknownKeyword */:
                     return unknownType;
-                case 147 /* StringKeyword */:
+                case 148 /* StringKeyword */:
                     return stringType;
-                case 144 /* NumberKeyword */:
+                case 145 /* NumberKeyword */:
                     return numberType;
-                case 155 /* BigIntKeyword */:
+                case 156 /* BigIntKeyword */:
                     return bigintType;
-                case 131 /* BooleanKeyword */:
+                case 132 /* BooleanKeyword */:
                     return booleanType;
-                case 148 /* SymbolKeyword */:
+                case 149 /* SymbolKeyword */:
                     return esSymbolType;
-                case 113 /* VoidKeyword */:
+                case 114 /* VoidKeyword */:
                     return voidType;
-                case 150 /* UndefinedKeyword */:
+                case 151 /* UndefinedKeyword */:
                     return undefinedType;
-                case 103 /* NullKeyword */:
+                case 104 /* NullKeyword */:
                     // TODO(rbuckton): `NullKeyword` is no longer a `TypeNode`, but we defensively allow it here because of incorrect casts in the Language Service.
                     return nullType;
-                case 141 /* NeverKeyword */:
+                case 142 /* NeverKeyword */:
                     return neverType;
-                case 145 /* ObjectKeyword */:
+                case 146 /* ObjectKeyword */:
                     return node.flags & 131072 /* JavaScriptFile */ && !noImplicitAny ? anyType : nonPrimitiveType;
-                case 136 /* IntrinsicKeyword */:
+                case 137 /* IntrinsicKeyword */:
                     return intrinsicMarkerType;
-                case 188 /* ThisType */:
-                case 107 /* ThisKeyword */:
+                case 190 /* ThisType */:
+                case 108 /* ThisKeyword */:
                     // TODO(rbuckton): `ThisKeyword` is no longer a `TypeNode`, but we defensively allow it here because of incorrect casts in the Language Service and because of `isPartOfTypeNode`.
                     return getTypeFromThisTypeNode(node);
-                case 192 /* LiteralType */:
+                case 194 /* LiteralType */:
                     return getTypeFromLiteralTypeNode(node);
-                case 174 /* TypeReference */:
+                case 176 /* TypeReference */:
                     return getTypeFromTypeReference(node);
-                case 173 /* TypePredicate */:
+                case 175 /* TypePredicate */:
                     return node.assertsModifier ? voidType : booleanType;
-                case 224 /* ExpressionWithTypeArguments */:
+                case 226 /* ExpressionWithTypeArguments */:
                     return getTypeFromTypeReference(node);
-                case 177 /* TypeQuery */:
+                case 179 /* TypeQuery */:
                     return getTypeFromTypeQueryNode(node);
-                case 179 /* ArrayType */:
-                case 180 /* TupleType */:
+                case 181 /* ArrayType */:
+                case 182 /* TupleType */:
                     return getTypeFromArrayOrTupleTypeNode(node);
-                case 181 /* OptionalType */:
+                case 183 /* OptionalType */:
                     return getTypeFromOptionalTypeNode(node);
-                case 183 /* UnionType */:
+                case 185 /* UnionType */:
                     return getTypeFromUnionTypeNode(node);
-                case 184 /* IntersectionType */:
+                case 186 /* IntersectionType */:
                     return getTypeFromIntersectionTypeNode(node);
-                case 306 /* JSDocNullableType */:
+                case 309 /* JSDocNullableType */:
                     return getTypeFromJSDocNullableTypeNode(node);
-                case 308 /* JSDocOptionalType */:
+                case 311 /* JSDocOptionalType */:
                     return addOptionality(getTypeFromTypeNode(node.type));
-                case 193 /* NamedTupleMember */:
+                case 195 /* NamedTupleMember */:
                     return getTypeFromNamedTupleTypeNode(node);
-                case 187 /* ParenthesizedType */:
-                case 307 /* JSDocNonNullableType */:
-                case 302 /* JSDocTypeExpression */:
+                case 189 /* ParenthesizedType */:
+                case 310 /* JSDocNonNullableType */:
+                case 304 /* JSDocTypeExpression */:
                     return getTypeFromTypeNode(node.type);
-                case 182 /* RestType */:
+                case 184 /* RestType */:
                     return getTypeFromRestTypeNode(node);
-                case 310 /* JSDocVariadicType */:
+                case 313 /* JSDocVariadicType */:
                     return getTypeFromJSDocVariadicType(node);
-                case 175 /* FunctionType */:
-                case 176 /* ConstructorType */:
-                case 178 /* TypeLiteral */:
-                case 314 /* JSDocTypeLiteral */:
-                case 309 /* JSDocFunctionType */:
-                case 315 /* JSDocSignature */:
+                case 177 /* FunctionType */:
+                case 178 /* ConstructorType */:
+                case 180 /* TypeLiteral */:
+                case 317 /* JSDocTypeLiteral */:
+                case 312 /* JSDocFunctionType */:
+                case 318 /* JSDocSignature */:
                     return getTypeFromTypeLiteralOrFunctionOrConstructorTypeNode(node);
-                case 189 /* TypeOperator */:
+                case 191 /* TypeOperator */:
                     return getTypeFromTypeOperatorNode(node);
-                case 190 /* IndexedAccessType */:
+                case 192 /* IndexedAccessType */:
                     return getTypeFromIndexedAccessTypeNode(node);
-                case 191 /* MappedType */:
+                case 193 /* MappedType */:
                     return getTypeFromMappedTypeNode(node);
-                case 185 /* ConditionalType */:
+                case 187 /* ConditionalType */:
                     return getTypeFromConditionalTypeNode(node);
-                case 186 /* InferType */:
+                case 188 /* InferType */:
                     return getTypeFromInferTypeNode(node);
-                case 194 /* TemplateLiteralType */:
+                case 196 /* TemplateLiteralType */:
                     return getTypeFromTemplateTypeNode(node);
-                case 196 /* ImportType */:
+                case 198 /* ImportType */:
                     return getTypeFromImportTypeNode(node);
                 // This function assumes that an identifier, qualified name, or property access expression is a type expression
                 // Callers should first ensure this by calling `isPartOfTypeNode`
                 // TODO(rbuckton): These aren't valid TypeNodes, but we treat them as such because of `isPartOfTypeNode`, which returns `true` for things that aren't `TypeNode`s.
-                case 78 /* Identifier */:
-                case 158 /* QualifiedName */:
-                case 202 /* PropertyAccessExpression */:
+                case 79 /* Identifier */:
+                case 159 /* QualifiedName */:
+                case 204 /* PropertyAccessExpression */:
                     var symbol = getSymbolAtLocation(node);
                     return symbol ? getDeclaredTypeOfSymbol(symbol) : errorType;
                 default:
@@ -59177,6 +60339,9 @@
         function instantiateSignatures(signatures, mapper) {
             return instantiateList(signatures, mapper, instantiateSignature);
         }
+        function instantiateIndexInfos(indexInfos, mapper) {
+            return instantiateList(indexInfos, mapper, instantiateIndexInfo);
+        }
         function createTypeMapper(sources, targets) {
             return sources.length === 1 ? makeUnaryTypeMapper(sources[0], targets ? targets[0] : anyType) : makeArrayTypeMapper(sources, targets);
         }
@@ -59349,8 +60514,8 @@
             return type;
         }
         function maybeTypeParameterReference(node) {
-            return !(node.parent.kind === 174 /* TypeReference */ && node.parent.typeArguments && node === node.parent.typeName ||
-                node.parent.kind === 196 /* ImportType */ && node.parent.typeArguments && node === node.parent.qualifier);
+            return !(node.parent.kind === 176 /* TypeReference */ && node.parent.typeArguments && node === node.parent.typeName ||
+                node.parent.kind === 198 /* ImportType */ && node.parent.typeArguments && node === node.parent.qualifier);
         }
         function isTypeParameterPossiblyReferenced(tp, node) {
             // If the type parameter doesn't have exactly one declaration, if there are invening statement blocks
@@ -59359,7 +60524,7 @@
             if (tp.symbol && tp.symbol.declarations && tp.symbol.declarations.length === 1) {
                 var container = tp.symbol.declarations[0].parent;
                 for (var n = node; n !== container; n = n.parent) {
-                    if (!n || n.kind === 231 /* Block */ || n.kind === 185 /* ConditionalType */ && ts.forEachChild(n.extendsType, containsReference)) {
+                    if (!n || n.kind === 233 /* Block */ || n.kind === 187 /* ConditionalType */ && ts.forEachChild(n.extendsType, containsReference)) {
                         return true;
                     }
                 }
@@ -59368,15 +60533,15 @@
             return true;
             function containsReference(node) {
                 switch (node.kind) {
-                    case 188 /* ThisType */:
+                    case 190 /* ThisType */:
                         return !!tp.isThisType;
-                    case 78 /* Identifier */:
+                    case 79 /* Identifier */:
                         return !tp.isThisType && ts.isPartOfTypeNode(node) && maybeTypeParameterReference(node) &&
                             getTypeFromTypeNodeWorker(node) === tp; // use worker because we're looking for === equality
-                    case 177 /* TypeQuery */:
+                    case 179 /* TypeQuery */:
                         return true;
-                    case 166 /* MethodDeclaration */:
-                    case 165 /* MethodSignature */:
+                    case 167 /* MethodDeclaration */:
+                    case 166 /* MethodSignature */:
                         return !node.type && !!node.body ||
                             ts.some(node.typeParameters, containsReference) ||
                             ts.some(node.parameters, containsReference) ||
@@ -59459,7 +60624,7 @@
         function instantiateMappedTupleType(tupleType, mappedType, mapper) {
             var elementFlags = tupleType.target.elementFlags;
             var elementTypes = ts.map(getTypeArguments(tupleType), function (_, i) {
-                return instantiateMappedTypeTemplate(mappedType, getLiteralType("" + i), !!(elementFlags[i] & 2 /* Optional */), mapper);
+                return instantiateMappedTypeTemplate(mappedType, getStringLiteralType("" + i), !!(elementFlags[i] & 2 /* Optional */), mapper);
             });
             var modifiers = getMappedTypeModifiers(mappedType);
             var newTupleModifiers = modifiers & 4 /* IncludeOptional */ ? ts.map(elementFlags, function (f) { return f & 1 /* Required */ ? 2 /* Optional */ : f; }) :
@@ -59473,7 +60638,7 @@
             var templateMapper = appendTypeMapping(mapper, getTypeParameterFromMappedType(type), key);
             var propType = instantiateType(getTemplateTypeFromMappedType(type.target || type), templateMapper);
             var modifiers = getMappedTypeModifiers(type);
-            return strictNullChecks && modifiers & 4 /* IncludeOptional */ && !maybeTypeOfKind(propType, 32768 /* Undefined */ | 16384 /* Void */) ? getOptionalType(propType) :
+            return strictNullChecks && modifiers & 4 /* IncludeOptional */ && !maybeTypeOfKind(propType, 32768 /* Undefined */ | 16384 /* Void */) ? getOptionalType(propType, /*isProperty*/ true) :
                 strictNullChecks && modifiers & 8 /* ExcludeOptional */ && isOptional ? getTypeWithFacts(propType, 524288 /* NEUndefined */) :
                     propType;
         }
@@ -59592,7 +60757,7 @@
             if (flags & 8388608 /* IndexedAccess */) {
                 var newAliasSymbol = aliasSymbol || type.aliasSymbol;
                 var newAliasTypeArguments = aliasSymbol ? aliasTypeArguments : instantiateTypes(type.aliasTypeArguments, mapper);
-                return getIndexedAccessType(instantiateType(type.objectType, mapper), instantiateType(type.indexType, mapper), type.noUncheckedIndexedAccessCandidate, /*accessNode*/ undefined, newAliasSymbol, newAliasTypeArguments);
+                return getIndexedAccessType(instantiateType(type.objectType, mapper), instantiateType(type.indexType, mapper), type.accessFlags, /*accessNode*/ undefined, newAliasSymbol, newAliasTypeArguments);
             }
             if (flags & 16777216 /* Conditional */) {
                 return getConditionalTypeInstantiation(type, combineTypeMappers(type.mapper, mapper), aliasSymbol, aliasTypeArguments);
@@ -59648,40 +60813,40 @@
             return type.restrictiveInstantiation;
         }
         function instantiateIndexInfo(info, mapper) {
-            return info && createIndexInfo(instantiateType(info.type, mapper), info.isReadonly, info.declaration);
+            return createIndexInfo(info.keyType, instantiateType(info.type, mapper), info.isReadonly, info.declaration);
         }
         // Returns true if the given expression contains (at any level of nesting) a function or arrow expression
         // that is subject to contextual typing.
         function isContextSensitive(node) {
-            ts.Debug.assert(node.kind !== 166 /* MethodDeclaration */ || ts.isObjectLiteralMethod(node));
+            ts.Debug.assert(node.kind !== 167 /* MethodDeclaration */ || ts.isObjectLiteralMethod(node));
             switch (node.kind) {
-                case 209 /* FunctionExpression */:
-                case 210 /* ArrowFunction */:
-                case 166 /* MethodDeclaration */:
-                case 252 /* FunctionDeclaration */: // Function declarations can have context when annotated with a jsdoc @type
+                case 211 /* FunctionExpression */:
+                case 212 /* ArrowFunction */:
+                case 167 /* MethodDeclaration */:
+                case 254 /* FunctionDeclaration */: // Function declarations can have context when annotated with a jsdoc @type
                     return isContextSensitiveFunctionLikeDeclaration(node);
-                case 201 /* ObjectLiteralExpression */:
+                case 203 /* ObjectLiteralExpression */:
                     return ts.some(node.properties, isContextSensitive);
-                case 200 /* ArrayLiteralExpression */:
+                case 202 /* ArrayLiteralExpression */:
                     return ts.some(node.elements, isContextSensitive);
-                case 218 /* ConditionalExpression */:
+                case 220 /* ConditionalExpression */:
                     return isContextSensitive(node.whenTrue) ||
                         isContextSensitive(node.whenFalse);
-                case 217 /* BinaryExpression */:
+                case 219 /* BinaryExpression */:
                     return (node.operatorToken.kind === 56 /* BarBarToken */ || node.operatorToken.kind === 60 /* QuestionQuestionToken */) &&
                         (isContextSensitive(node.left) || isContextSensitive(node.right));
-                case 289 /* PropertyAssignment */:
+                case 291 /* PropertyAssignment */:
                     return isContextSensitive(node.initializer);
-                case 208 /* ParenthesizedExpression */:
+                case 210 /* ParenthesizedExpression */:
                     return isContextSensitive(node.expression);
-                case 282 /* JsxAttributes */:
+                case 284 /* JsxAttributes */:
                     return ts.some(node.properties, isContextSensitive) || ts.isJsxOpeningElement(node.parent) && ts.some(node.parent.parent.children, isContextSensitive);
-                case 281 /* JsxAttribute */: {
+                case 283 /* JsxAttribute */: {
                     // If there is no initializer, JSX attribute has a boolean value of true which is not context sensitive.
                     var initializer = node.initializer;
                     return !!initializer && isContextSensitive(initializer);
                 }
-                case 284 /* JsxExpression */: {
+                case 286 /* JsxExpression */: {
                     // It is possible to that node.expression is undefined (e.g <div x={} />)
                     var expression = node.expression;
                     return !!expression && isContextSensitive(expression);
@@ -59691,29 +60856,11 @@
         }
         function isContextSensitiveFunctionLikeDeclaration(node) {
             return (!ts.isFunctionDeclaration(node) || ts.isInJSFile(node) && !!getTypeForDeclarationFromJSDocComment(node)) &&
-                (hasContextSensitiveParameters(node) || hasContextSensitiveReturnExpression(node));
-        }
-        function hasContextSensitiveParameters(node) {
-            // Functions with type parameters are not context sensitive.
-            if (!node.typeParameters) {
-                // Functions with any parameters that lack type annotations are context sensitive.
-                if (ts.some(node.parameters, function (p) { return !ts.getEffectiveTypeAnnotationNode(p); })) {
-                    return true;
-                }
-                if (node.kind !== 210 /* ArrowFunction */) {
-                    // If the first parameter is not an explicit 'this' parameter, then the function has
-                    // an implicit 'this' parameter which is subject to contextual typing.
-                    var parameter = ts.firstOrUndefined(node.parameters);
-                    if (!(parameter && ts.parameterIsThisKeyword(parameter))) {
-                        return true;
-                    }
-                }
-            }
-            return false;
+                (ts.hasContextSensitiveParameters(node) || hasContextSensitiveReturnExpression(node));
         }
         function hasContextSensitiveReturnExpression(node) {
             // TODO(anhans): A block should be context-sensitive if it has a context-sensitive return value.
-            return !node.typeParameters && !ts.getEffectiveReturnTypeNode(node) && !!node.body && node.body.kind !== 231 /* Block */ && isContextSensitive(node.body);
+            return !node.typeParameters && !ts.getEffectiveReturnTypeNode(node) && !!node.body && node.body.kind !== 233 /* Block */ && isContextSensitive(node.body);
         }
         function isContextSensitiveFunctionOrObjectLiteralMethod(func) {
             return (ts.isInJSFile(func) && ts.isFunctionDeclaration(func) || isFunctionExpressionOrArrowFunction(func) || ts.isObjectLiteralMethod(func)) &&
@@ -59728,6 +60875,7 @@
                     result.properties = resolved.properties;
                     result.callSignatures = ts.emptyArray;
                     result.constructSignatures = ts.emptyArray;
+                    result.indexInfos = ts.emptyArray;
                     return result;
                 }
             }
@@ -59816,23 +60964,23 @@
                 return true;
             }
             switch (node.kind) {
-                case 284 /* JsxExpression */:
-                case 208 /* ParenthesizedExpression */:
+                case 286 /* JsxExpression */:
+                case 210 /* ParenthesizedExpression */:
                     return elaborateError(node.expression, source, target, relation, headMessage, containingMessageChain, errorOutputContainer);
-                case 217 /* BinaryExpression */:
+                case 219 /* BinaryExpression */:
                     switch (node.operatorToken.kind) {
-                        case 62 /* EqualsToken */:
+                        case 63 /* EqualsToken */:
                         case 27 /* CommaToken */:
                             return elaborateError(node.right, source, target, relation, headMessage, containingMessageChain, errorOutputContainer);
                     }
                     break;
-                case 201 /* ObjectLiteralExpression */:
+                case 203 /* ObjectLiteralExpression */:
                     return elaborateObjectLiteral(node, source, target, relation, containingMessageChain, errorOutputContainer);
-                case 200 /* ArrayLiteralExpression */:
+                case 202 /* ArrayLiteralExpression */:
                     return elaborateArrayLiteral(node, source, target, relation, containingMessageChain, errorOutputContainer);
-                case 282 /* JsxAttributes */:
+                case 284 /* JsxAttributes */:
                     return elaborateJsxComponents(node, source, target, relation, containingMessageChain, errorOutputContainer);
-                case 210 /* ArrowFunction */:
+                case 212 /* ArrowFunction */:
                     return elaborateArrowFunction(node, source, target, relation, containingMessageChain, errorOutputContainer);
             }
             return false;
@@ -59933,7 +61081,14 @@
                 if (!targetPropType || targetPropType.flags & 8388608 /* IndexedAccess */)
                     continue; // Don't elaborate on indexes on generic variables
                 var sourcePropType = getIndexedAccessTypeOrUndefined(source, nameType);
-                if (sourcePropType && !checkTypeRelatedTo(sourcePropType, targetPropType, relation, /*errorNode*/ undefined)) {
+                if (!sourcePropType)
+                    continue;
+                var propName = getPropertyNameFromIndex(nameType, /*accessNode*/ undefined);
+                var targetIsOptional = !!(propName && (getPropertyOfType(target, propName) || unknownSymbol).flags & 16777216 /* Optional */);
+                var sourceIsOptional = !!(propName && (getPropertyOfType(source, propName) || unknownSymbol).flags & 16777216 /* Optional */);
+                targetPropType = removeMissingType(targetPropType, targetIsOptional);
+                sourcePropType = removeMissingType(sourcePropType, targetIsOptional && sourceIsOptional);
+                if (!checkTypeRelatedTo(sourcePropType, targetPropType, relation, /*errorNode*/ undefined)) {
                     var elaborated = next && elaborateError(next, sourcePropType, targetPropType, relation, /*headMessage*/ undefined, containingMessageChain, errorOutputContainer);
                     if (elaborated) {
                         reportedError = true;
@@ -59954,9 +61109,7 @@
                             var targetProp = propertyName !== undefined ? getPropertyOfType(target, propertyName) : undefined;
                             var issuedElaboration = false;
                             if (!targetProp) {
-                                var indexInfo = isTypeAssignableToKind(nameType, 296 /* NumberLike */) && getIndexInfoOfType(target, 1 /* Number */) ||
-                                    getIndexInfoOfType(target, 0 /* String */) ||
-                                    undefined;
+                                var indexInfo = getApplicableIndexInfo(target, nameType);
                                 if (indexInfo && indexInfo.declaration && !ts.getSourceFileOfNode(indexInfo.declaration).hasNoDefaultLib) {
                                     issuedElaboration = true;
                                     ts.addRelatedInfo(reportedDiag, ts.createDiagnosticForNode(indexInfo.declaration, ts.Diagnostics.The_expected_type_comes_from_this_index_signature));
@@ -59987,9 +61140,9 @@
                     case 1:
                         if (!(_i < _a.length)) return [3 /*break*/, 4];
                         prop = _a[_i];
-                        if (ts.isJsxSpreadAttribute(prop))
+                        if (ts.isJsxSpreadAttribute(prop) || isHyphenatedJsxName(ts.idText(prop.name)))
                             return [3 /*break*/, 3];
-                        return [4 /*yield*/, { errorNode: prop.name, innerExpression: prop.initializer, nameType: getLiteralType(ts.idText(prop.name)) }];
+                        return [4 /*yield*/, { errorNode: prop.name, innerExpression: prop.initializer, nameType: getStringLiteralType(ts.idText(prop.name)) }];
                     case 2:
                         _b.sent();
                         _b.label = 3;
@@ -60013,7 +61166,7 @@
                     case 1:
                         if (!(i < node.children.length)) return [3 /*break*/, 5];
                         child = node.children[i];
-                        nameType = getLiteralType(i - memberOffset);
+                        nameType = getNumberLiteralType(i - memberOffset);
                         elem = getElaborationElementForJsxChild(child, nameType, getInvalidTextDiagnostic);
                         if (!elem) return [3 /*break*/, 3];
                         return [4 /*yield*/, elem];
@@ -60032,7 +61185,7 @@
         }
         function getElaborationElementForJsxChild(child, nameType, getInvalidTextDiagnostic) {
             switch (child.kind) {
-                case 284 /* JsxExpression */:
+                case 286 /* JsxExpression */:
                     // child is of the type of the expression
                     return { errorNode: child, innerExpression: child.expression, nameType: nameType };
                 case 11 /* JsxText */:
@@ -60041,9 +61194,9 @@
                     }
                     // child is a string
                     return { errorNode: child, innerExpression: undefined, nameType: nameType, errorMessage: getInvalidTextDiagnostic() };
-                case 274 /* JsxElement */:
-                case 275 /* JsxSelfClosingElement */:
-                case 278 /* JsxFragment */:
+                case 276 /* JsxElement */:
+                case 277 /* JsxSelfClosingElement */:
+                case 280 /* JsxFragment */:
                     // child is of type JSX.Element
                     return { errorNode: child, innerExpression: child, nameType: nameType };
                 default:
@@ -60057,7 +61210,7 @@
                 var containingElement = node.parent.parent;
                 var childPropName = getJsxElementChildrenPropertyName(getJsxNamespaceAt(node));
                 var childrenPropName = childPropName === undefined ? "children" : ts.unescapeLeadingUnderscores(childPropName);
-                var childrenNameType = getLiteralType(childrenPropName);
+                var childrenNameType = getStringLiteralType(childrenPropName);
                 var childrenTargetType = getIndexedAccessType(target, childrenNameType);
                 var validChildren = ts.getSemanticJsxChildren(containingElement.children);
                 if (!ts.length(validChildren)) {
@@ -60112,7 +61265,7 @@
                     var tagNameText = ts.getTextOfNode(node.parent.tagName);
                     var childPropName = getJsxElementChildrenPropertyName(getJsxNamespaceAt(node));
                     var childrenPropName = childPropName === undefined ? "children" : ts.unescapeLeadingUnderscores(childPropName);
-                    var childrenTargetType = getIndexedAccessType(target, getLiteralType(childrenPropName));
+                    var childrenTargetType = getIndexedAccessType(target, getStringLiteralType(childrenPropName));
                     var diagnostic = ts.Diagnostics._0_components_don_t_accept_text_as_child_elements_Text_in_JSX_has_the_type_string_but_the_expected_type_of_1_is_2;
                     invalidTextDiagnostic = __assign(__assign({}, diagnostic), { key: "!!ALREADY FORMATTED!!", message: ts.formatMessage(/*_dummy*/ undefined, diagnostic, tagNameText, childrenPropName, typeToString(childrenTargetType)) });
                 }
@@ -60137,7 +61290,7 @@
                         elem = node.elements[i];
                         if (ts.isOmittedExpression(elem))
                             return [3 /*break*/, 3];
-                        nameType = getLiteralType(i);
+                        nameType = getNumberLiteralType(i);
                         return [4 /*yield*/, { errorNode: elem, innerExpression: elem, nameType: nameType }];
                     case 2:
                         _a.sent();
@@ -60191,11 +61344,11 @@
                         }
                         _b = prop.kind;
                         switch (_b) {
-                            case 169 /* SetAccessor */: return [3 /*break*/, 2];
-                            case 168 /* GetAccessor */: return [3 /*break*/, 2];
-                            case 166 /* MethodDeclaration */: return [3 /*break*/, 2];
-                            case 290 /* ShorthandPropertyAssignment */: return [3 /*break*/, 2];
-                            case 289 /* PropertyAssignment */: return [3 /*break*/, 4];
+                            case 171 /* SetAccessor */: return [3 /*break*/, 2];
+                            case 170 /* GetAccessor */: return [3 /*break*/, 2];
+                            case 167 /* MethodDeclaration */: return [3 /*break*/, 2];
+                            case 292 /* ShorthandPropertyAssignment */: return [3 /*break*/, 2];
+                            case 291 /* PropertyAssignment */: return [3 /*break*/, 4];
                         }
                         return [3 /*break*/, 6];
                     case 2: return [4 /*yield*/, { errorNode: prop.name, innerExpression: undefined, nameType: type }];
@@ -60272,8 +61425,8 @@
                 return 0 /* False */;
             }
             var kind = target.declaration ? target.declaration.kind : 0 /* Unknown */;
-            var strictVariance = !(checkMode & 3 /* Callback */) && strictFunctionTypes && kind !== 166 /* MethodDeclaration */ &&
-                kind !== 165 /* MethodSignature */ && kind !== 167 /* Constructor */;
+            var strictVariance = !(checkMode & 3 /* Callback */) && strictFunctionTypes && kind !== 167 /* MethodDeclaration */ &&
+                kind !== 166 /* MethodSignature */ && kind !== 169 /* Constructor */;
             var result = -1 /* True */;
             var sourceThisType = getThisTypeOfSignature(source);
             if (sourceThisType && sourceThisType !== voidType) {
@@ -60407,8 +61560,7 @@
                 t.properties.length === 0 &&
                 t.callSignatures.length === 0 &&
                 t.constructSignatures.length === 0 &&
-                !t.stringIndexInfo &&
-                !t.numberIndexInfo;
+                t.indexInfos.length === 0;
         }
         function isEmptyObjectType(type) {
             return type.flags & 524288 /* Object */ ? !isGenericMappedType(type) && isEmptyResolvedType(resolveStructuredTypeMembers(type)) :
@@ -60422,7 +61574,7 @@
                 type.symbol && type.symbol.flags & 2048 /* TypeLiteral */ && getMembersOfSymbol(type.symbol).size === 0));
         }
         function isStringIndexSignatureOnlyType(type) {
-            return type.flags & 524288 /* Object */ && !isGenericMappedType(type) && getPropertiesOfType(type).length === 0 && getIndexInfoOfType(type, 0 /* String */) && !getIndexInfoOfType(type, 1 /* Number */) ||
+            return type.flags & 524288 /* Object */ && !isGenericMappedType(type) && getPropertiesOfType(type).length === 0 && getIndexInfosOfType(type).length === 1 && !!getIndexInfoOfType(type, stringType) ||
                 type.flags & 3145728 /* UnionOrIntersection */ && ts.every(type.types, isStringIndexSignatureOnlyType) ||
                 false;
         }
@@ -60527,9 +61679,10 @@
                 }
             }
             else {
-                if (!(source.flags & 3145728 /* UnionOrIntersection */) && !(target.flags & 3145728 /* UnionOrIntersection */) &&
-                    source.flags !== target.flags && !(source.flags & 469237760 /* Substructure */))
+                if (source.flags !== target.flags)
                     return false;
+                if (source.flags & 67358815 /* Singleton */)
+                    return true;
             }
             if (source.flags & 524288 /* Object */ && target.flags & 524288 /* Object */) {
                 var related = relation.get(getRelationKey(source, target, 0 /* None */, relation));
@@ -60543,7 +61696,7 @@
             return false;
         }
         function isIgnoredJsxProperty(source, sourceProp) {
-            return ts.getObjectFlags(source) & 2048 /* JsxAttributes */ && !isUnhyphenatedJsxName(sourceProp.escapedName);
+            return ts.getObjectFlags(source) & 2048 /* JsxAttributes */ && isHyphenatedJsxName(sourceProp.escapedName);
         }
         function getNormalizedType(type, writing) {
             while (true) {
@@ -60620,7 +61773,7 @@
                 }
                 var diag = ts.createDiagnosticForNodeFromMessageChain(errorNode, errorInfo, relatedInformation);
                 if (relatedInfo) {
-                    ts.addRelatedInfo.apply(void 0, __spreadArray([diag], relatedInfo));
+                    ts.addRelatedInfo.apply(void 0, __spreadArray([diag], relatedInfo, false));
                 }
                 if (errorOutputContainer) {
                     (errorOutputContainer.errors || (errorOutputContainer.errors = [])).push(diag);
@@ -60663,7 +61816,7 @@
                     reportError.apply(void 0, stack[0]);
                     if (info) {
                         // Actually do the last relation error
-                        reportRelationError.apply(void 0, __spreadArray([/*headMessage*/ undefined], info));
+                        reportRelationError.apply(void 0, __spreadArray([/*headMessage*/ undefined], info, false));
                     }
                     return;
                 }
@@ -60752,12 +61905,12 @@
                     var _b = secondaryRootErrors_1[_i], msg = _b[0], args = _b.slice(1);
                     var originalValue = msg.elidedInCompatabilityPyramid;
                     msg.elidedInCompatabilityPyramid = false; // Temporarily override elision to ensure error is reported
-                    reportError.apply(void 0, __spreadArray([msg], args));
+                    reportError.apply(void 0, __spreadArray([msg], args, false));
                     msg.elidedInCompatabilityPyramid = originalValue;
                 }
                 if (info) {
                     // Actually do the last relation error
-                    reportRelationError.apply(void 0, __spreadArray([/*headMessage*/ undefined], info));
+                    reportRelationError.apply(void 0, __spreadArray([/*headMessage*/ undefined], info, false));
                 }
             }
             function reportError(message, arg0, arg1, arg2, arg3) {
@@ -61078,12 +62231,12 @@
                 }
             }
             function isIdenticalTo(source, target) {
-                var flags = source.flags & target.flags;
-                if (!(flags & 469237760 /* Substructure */)) {
+                if (source.flags !== target.flags)
                     return 0 /* False */;
-                }
+                if (source.flags & 67358815 /* Singleton */)
+                    return -1 /* True */;
                 traceUnionsOrIntersectionsTooLarge(source, target);
-                if (flags & 3145728 /* UnionOrIntersection */) {
+                if (source.flags & 3145728 /* UnionOrIntersection */) {
                     var result_7 = eachTypeRelatedToSomeType(source, target);
                     if (result_7) {
                         result_7 &= eachTypeRelatedToSomeType(target, source);
@@ -61094,9 +62247,10 @@
             }
             function getTypeOfPropertyInTypes(types, name) {
                 var appendPropType = function (propTypes, type) {
+                    var _a;
                     type = getApparentType(type);
                     var prop = type.flags & 3145728 /* UnionOrIntersection */ ? getPropertyOfUnionOrIntersectionType(type, name) : getPropertyOfObjectType(type, name);
-                    var propType = prop && getTypeOfSymbol(prop) || isNumericLiteralName(name) && getIndexTypeOfType(type, 1 /* Number */) || getIndexTypeOfType(type, 0 /* String */) || undefinedType;
+                    var propType = prop && getTypeOfSymbol(prop) || ((_a = getApplicableIndexInfoForName(type, name)) === null || _a === void 0 ? void 0 : _a.type) || undefinedType;
                     return ts.append(propTypes, propType);
                 };
                 return getUnionType(ts.reduceLeft(types, appendPropType, /*initial*/ undefined) || ts.emptyArray);
@@ -61117,7 +62271,7 @@
                     reducedTarget = findMatchingDiscriminantType(source, target, isRelatedTo) || filterPrimitivesIfContainsNonPrimitive(target);
                     checkTypes = reducedTarget.flags & 1048576 /* Union */ ? reducedTarget.types : [reducedTarget];
                 }
-                var _loop_16 = function (prop) {
+                var _loop_18 = function (prop) {
                     if (shouldCheckAsExcessProperty(prop, source.symbol) && !isIgnoredJsxProperty(source, prop)) {
                         if (!isKnownProperty(reducedTarget, prop.escapedName, isComparingJsxAttributes)) {
                             if (reportErrors) {
@@ -61180,7 +62334,7 @@
                 };
                 for (var _i = 0, _b = getPropertiesOfType(source); _i < _b.length; _i++) {
                     var prop = _b[_i];
-                    var state_5 = _loop_16(prop);
+                    var state_5 = _loop_18(prop);
                     if (typeof state_5 === "object")
                         return state_5.value;
                 }
@@ -61492,7 +62646,7 @@
                     // parameter 'T extends 1 | 2', the intersection 'T & 1' should be reduced to '1' such that it doesn't
                     // appear to be comparable to '2'.
                     if (relation === comparableRelation && target.flags & 131068 /* Primitive */) {
-                        var constraints = ts.sameMap(source.types, function (t) { return t.flags & 131068 /* Primitive */ ? t : getBaseConstraintOfType(t) || unknownType; });
+                        var constraints = ts.sameMap(source.types, getBaseConstraintOrType);
                         if (constraints !== source.types) {
                             source = getIntersectionType(constraints);
                             if (!(source.flags & 2097152 /* Intersection */)) {
@@ -61636,8 +62790,8 @@
                         var baseObjectType = getBaseConstraintOfType(objectType) || objectType;
                         var baseIndexType = getBaseConstraintOfType(indexType) || indexType;
                         if (!isGenericObjectType(baseObjectType) && !isGenericIndexType(baseIndexType)) {
-                            var accessFlags = 2 /* Writing */ | (baseObjectType !== objectType ? 1 /* NoIndexSignatures */ : 0);
-                            var constraint = getIndexedAccessTypeOrUndefined(baseObjectType, baseIndexType, target.noUncheckedIndexedAccessCandidate, /*accessNode*/ undefined, accessFlags);
+                            var accessFlags = 4 /* Writing */ | (baseObjectType !== objectType ? 2 /* NoIndexSignatures */ : 0);
+                            var constraint = getIndexedAccessTypeOrUndefined(baseObjectType, baseIndexType, accessFlags);
                             if (constraint) {
                                 if (reportErrors && originalErrorInfo) {
                                     // create a new chain for the constraint error
@@ -61861,7 +63015,7 @@
                         return 0 /* False */;
                     }
                     if (ts.getObjectFlags(source) & 4 /* Reference */ && ts.getObjectFlags(target) & 4 /* Reference */ && source.target === target.target &&
-                        !(ts.getObjectFlags(source) & 4096 /* MarkerType */ || ts.getObjectFlags(target) & 4096 /* MarkerType */)) {
+                        !isTupleType(source) && !(ts.getObjectFlags(source) & 4096 /* MarkerType */ || ts.getObjectFlags(target) & 4096 /* MarkerType */)) {
                         // We have type references to the same generic type, and the type references are not marker
                         // type references (which are intended by be compared structurally). Obtain the variance
                         // information for the type parameters and relate the type arguments accordingly.
@@ -61879,7 +63033,7 @@
                     }
                     else if (isReadonlyArrayType(target) ? isArrayType(source) || isTupleType(source) : isArrayType(target) && isTupleType(source) && !source.target.readonly) {
                         if (relation !== identityRelation) {
-                            return isRelatedTo(getIndexTypeOfType(source, 1 /* Number */) || anyType, getIndexTypeOfType(target, 1 /* Number */) || anyType, reportErrors);
+                            return isRelatedTo(getIndexTypeOfType(source, numberType) || anyType, getIndexTypeOfType(target, numberType) || anyType, reportErrors);
                         }
                         else {
                             // By flags alone, we know that the `target` is a readonly array while the source is a normal array or tuple
@@ -61906,10 +63060,7 @@
                             if (result) {
                                 result &= signaturesRelatedTo(source, target, 1 /* Construct */, reportStructuralErrors);
                                 if (result) {
-                                    result &= indexTypesRelatedTo(source, target, 0 /* String */, sourceIsPrimitive, reportStructuralErrors, intersectionState);
-                                    if (result) {
-                                        result &= indexTypesRelatedTo(source, target, 1 /* Number */, sourceIsPrimitive, reportStructuralErrors, intersectionState);
-                                    }
+                                    result &= indexSignaturesRelatedTo(source, target, sourceIsPrimitive, reportStructuralErrors, intersectionState);
                                 }
                             }
                         }
@@ -62035,7 +63186,7 @@
                 var numCombinations = 1;
                 for (var _i = 0, sourcePropertiesFiltered_1 = sourcePropertiesFiltered; _i < sourcePropertiesFiltered_1.length; _i++) {
                     var sourceProperty = sourcePropertiesFiltered_1[_i];
-                    numCombinations *= countTypes(getTypeOfSymbol(sourceProperty));
+                    numCombinations *= countTypes(getNonMissingTypeOfSymbol(sourceProperty));
                     if (numCombinations > 25) {
                         // We've reached the complexity limit.
                         ts.tracing === null || ts.tracing === void 0 ? void 0 : ts.tracing.instant("checkTypes" /* CheckTypes */, "typeRelatedToDiscriminatedType_DepthLimit", { sourceId: source.id, targetId: target.id, numCombinations: numCombinations });
@@ -62047,7 +63198,7 @@
                 var excludedProperties = new ts.Set();
                 for (var i = 0; i < sourcePropertiesFiltered.length; i++) {
                     var sourceProperty = sourcePropertiesFiltered[i];
-                    var sourcePropertyType = getTypeOfSymbol(sourceProperty);
+                    var sourcePropertyType = getNonMissingTypeOfSymbol(sourceProperty);
                     sourceDiscriminantTypes[i] = sourcePropertyType.flags & 1048576 /* Union */
                         ? sourcePropertyType.types
                         : [sourcePropertyType];
@@ -62057,11 +63208,11 @@
                 // constituents of 'target'. If any combination does not have a match then 'source' is not relatable.
                 var discriminantCombinations = ts.cartesianProduct(sourceDiscriminantTypes);
                 var matchingTypes = [];
-                var _loop_17 = function (combination) {
+                var _loop_19 = function (combination) {
                     var hasMatch = false;
                     outer: for (var _c = 0, _d = target.types; _c < _d.length; _c++) {
                         var type = _d[_c];
-                        var _loop_18 = function (i) {
+                        var _loop_20 = function (i) {
                             var sourceProperty = sourcePropertiesFiltered[i];
                             var targetProperty = getPropertyOfType(type, sourceProperty.escapedName);
                             if (!targetProperty)
@@ -62077,7 +63228,7 @@
                             }
                         };
                         for (var i = 0; i < sourcePropertiesFiltered.length; i++) {
-                            var state_7 = _loop_18(i);
+                            var state_7 = _loop_20(i);
                             switch (state_7) {
                                 case "continue-outer": continue outer;
                             }
@@ -62091,7 +63242,7 @@
                 };
                 for (var _a = 0, discriminantCombinations_1 = discriminantCombinations; _a < discriminantCombinations_1.length; _a++) {
                     var combination = discriminantCombinations_1[_a];
-                    var state_6 = _loop_17(combination);
+                    var state_6 = _loop_19(combination);
                     if (typeof state_6 === "object")
                         return state_6.value;
                 }
@@ -62104,15 +63255,12 @@
                         result &= signaturesRelatedTo(source, type, 0 /* Call */, /*reportStructuralErrors*/ false);
                         if (result) {
                             result &= signaturesRelatedTo(source, type, 1 /* Construct */, /*reportStructuralErrors*/ false);
-                            if (result) {
-                                result &= indexTypesRelatedTo(source, type, 0 /* String */, /*sourceIsPrimitive*/ false, /*reportStructuralErrors*/ false, 0 /* None */);
+                            if (result && !(isTupleType(source) && isTupleType(type))) {
                                 // Comparing numeric index types when both `source` and `type` are tuples is unnecessary as the
                                 // element types should be sufficiently covered by `propertiesRelatedTo`. It also causes problems
                                 // with index type assignability as the types for the excluded discriminants are still included
                                 // in the index type.
-                                if (result && !(isTupleType(source) && isTupleType(type))) {
-                                    result &= indexTypesRelatedTo(source, type, 1 /* Number */, /*sourceIsPrimitive*/ false, /*reportStructuralErrors*/ false, 0 /* None */);
-                                }
+                                result &= indexSignaturesRelatedTo(source, type, /*sourceIsPrimitive*/ false, /*reportStructuralErrors*/ false, 0 /* None */);
                             }
                         }
                     }
@@ -62140,46 +63288,9 @@
             }
             function isPropertySymbolTypeRelated(sourceProp, targetProp, getTypeOfSourceProperty, reportErrors, intersectionState) {
                 var targetIsOptional = strictNullChecks && !!(ts.getCheckFlags(targetProp) & 48 /* Partial */);
-                var source = getTypeOfSourceProperty(sourceProp);
-                if (ts.getCheckFlags(targetProp) & 65536 /* DeferredType */ && !getSymbolLinks(targetProp).type) {
-                    // Rather than resolving (and normalizing) the type, relate constituent-by-constituent without performing normalization or seconadary passes
-                    var links = getSymbolLinks(targetProp);
-                    ts.Debug.assertIsDefined(links.deferralParent);
-                    ts.Debug.assertIsDefined(links.deferralConstituents);
-                    var unionParent = !!(links.deferralParent.flags & 1048576 /* Union */);
-                    var result_12 = unionParent ? 0 /* False */ : -1 /* True */;
-                    var targetTypes = links.deferralConstituents;
-                    for (var _i = 0, targetTypes_3 = targetTypes; _i < targetTypes_3.length; _i++) {
-                        var targetType = targetTypes_3[_i];
-                        var related = isRelatedTo(source, targetType, /*reportErrors*/ false, /*headMessage*/ undefined, unionParent ? 0 : 2 /* Target */);
-                        if (!unionParent) {
-                            if (!related) {
-                                // Can't assign to a target individually - have to fallback to assigning to the _whole_ intersection (which forces normalization)
-                                return isRelatedTo(source, addOptionality(getTypeOfSymbol(targetProp), targetIsOptional), reportErrors);
-                            }
-                            result_12 &= related;
-                        }
-                        else {
-                            if (related) {
-                                return related;
-                            }
-                        }
-                    }
-                    if (unionParent && !result_12 && targetIsOptional) {
-                        result_12 = isRelatedTo(source, undefinedType);
-                    }
-                    if (unionParent && !result_12 && reportErrors) {
-                        // The easiest way to get the right errors here is to un-defer (which may be costly)
-                        // If it turns out this is too costly too often, we can replicate the error handling logic within
-                        // typeRelatedToSomeType without the discriminatable type branch (as that requires a manifest union
-                        // type on which to hand discriminable properties, which we are expressly trying to avoid here)
-                        return isRelatedTo(source, addOptionality(getTypeOfSymbol(targetProp), targetIsOptional), reportErrors);
-                    }
-                    return result_12;
-                }
-                else {
-                    return isRelatedTo(source, addOptionality(getTypeOfSymbol(targetProp), targetIsOptional), reportErrors, /*headMessage*/ undefined, intersectionState);
-                }
+                var effectiveTarget = addOptionality(getNonMissingTypeOfSymbol(targetProp), /*isProperty*/ false, targetIsOptional);
+                var effectiveSource = getTypeOfSourceProperty(sourceProp);
+                return isRelatedTo(effectiveSource, effectiveTarget, reportErrors, /*headMessage*/ undefined, intersectionState);
             }
             function propertyRelatedTo(source, target, sourceProp, targetProp, getTypeOfSourceProperty, reportErrors, intersectionState, skipOptional) {
                 var sourcePropFlags = ts.getDeclarationModifierFlagsFromSymbol(sourceProp);
@@ -62259,7 +63370,7 @@
                 }
                 if (props.length === 1) {
                     var propName = symbolToString(unmatchedProperty);
-                    reportError.apply(void 0, __spreadArray([ts.Diagnostics.Property_0_is_missing_in_type_1_but_required_in_type_2, propName], getTypeNamesForErrorDisplay(source, target)));
+                    reportError.apply(void 0, __spreadArray([ts.Diagnostics.Property_0_is_missing_in_type_1_but_required_in_type_2, propName], getTypeNamesForErrorDisplay(source, target), false));
                     if (ts.length(unmatchedProperty.declarations)) {
                         associateRelatedInfo(ts.createDiagnosticForNode(unmatchedProperty.declarations[0], ts.Diagnostics._0_is_declared_here, propName));
                     }
@@ -62308,7 +63419,7 @@
                             }
                             return 0 /* False */;
                         }
-                        if (!targetRestFlag && sourceRestFlag) {
+                        if (!targetRestFlag && (sourceRestFlag || targetArity < sourceArity)) {
                             if (reportErrors) {
                                 if (sourceMinLength < targetMinLength) {
                                     reportError(ts.Diagnostics.Target_requires_0_element_s_but_source_may_have_fewer, targetMinLength);
@@ -62356,13 +63467,14 @@
                                 }
                             }
                             var sourceType = !isTupleType(source) ? sourceTypeArguments[0] :
-                                i < startCount || i >= targetArity - endCount ? sourceTypeArguments[sourceIndex] :
+                                i < startCount || i >= targetArity - endCount ? removeMissingType(sourceTypeArguments[sourceIndex], !!(sourceFlags & targetFlags & 2 /* Optional */)) :
                                     getElementTypeOfSliceOfTupleType(source, startCount, endCount) || neverType;
                             var targetType = targetTypeArguments[i];
-                            var targetCheckType = sourceFlags & 8 /* Variadic */ && targetFlags & 4 /* Rest */ ? createArrayType(targetType) : targetType;
+                            var targetCheckType = sourceFlags & 8 /* Variadic */ && targetFlags & 4 /* Rest */ ? createArrayType(targetType) :
+                                removeMissingType(targetType, !!(targetFlags & 2 /* Optional */));
                             var related = isRelatedTo(sourceType, targetCheckType, reportErrors, /*headMessage*/ undefined, intersectionState);
                             if (!related) {
-                                if (reportErrors) {
+                                if (reportErrors && (targetArity > 1 || sourceArity > 1)) {
                                     if (i < startCount || i >= targetArity - endCount || sourceArity - startCount - endCount === 1) {
                                         reportIncompatibleError(ts.Diagnostics.Type_at_position_0_in_source_is_not_compatible_with_type_at_position_1_in_target, sourceIndex, i);
                                     }
@@ -62393,7 +63505,7 @@
                         var sourceProp = _a[_i];
                         if (!getPropertyOfObjectType(target, sourceProp.escapedName)) {
                             var sourceType = getTypeOfSymbol(sourceProp);
-                            if (!(sourceType === undefinedType || sourceType === undefinedWideningType || sourceType === optionalType)) {
+                            if (!(sourceType.flags & 32768 /* Undefined */)) {
                                 if (reportErrors) {
                                     reportError(ts.Diagnostics.Property_0_does_not_exist_on_type_1, symbolToString(sourceProp), typeToString(target));
                                 }
@@ -62412,7 +63524,7 @@
                     if (!(targetProp.flags & 4194304 /* Prototype */) && (!numericNamesOnly || isNumericLiteralName(name) || name === "length")) {
                         var sourceProp = getPropertyOfType(source, name);
                         if (sourceProp && sourceProp !== targetProp) {
-                            var related = propertyRelatedTo(source, target, sourceProp, targetProp, getTypeOfSymbol, reportErrors, intersectionState, relation === comparableRelation);
+                            var related = propertyRelatedTo(source, target, sourceProp, targetProp, getNonMissingTypeOfSymbol, reportErrors, intersectionState, relation === comparableRelation);
                             if (!related) {
                                 return 0 /* False */;
                             }
@@ -62506,7 +63618,7 @@
                     var targetSignature = ts.first(targetSignatures);
                     result = signatureRelatedTo(sourceSignature, targetSignature, eraseGenerics, reportErrors, incompatibleReporter(sourceSignature, targetSignature));
                     if (!result && reportErrors && kind === 1 /* Construct */ && (sourceObjectFlags & targetObjectFlags) &&
-                        (((_a = targetSignature.declaration) === null || _a === void 0 ? void 0 : _a.kind) === 167 /* Constructor */ || ((_b = sourceSignature.declaration) === null || _b === void 0 ? void 0 : _b.kind) === 167 /* Constructor */)) {
+                        (((_a = targetSignature.declaration) === null || _a === void 0 ? void 0 : _a.kind) === 169 /* Constructor */ || ((_b = sourceSignature.declaration) === null || _b === void 0 ? void 0 : _b.kind) === 169 /* Constructor */)) {
                         var constructSignatureToString = function (signature) {
                             return signatureToString(signature, /*enclosingDeclaration*/ undefined, 262144 /* WriteArrowStyleSignature */, kind);
                         };
@@ -62572,8 +63684,9 @@
                 }
                 return result;
             }
-            function eachPropertyRelatedTo(source, target, kind, reportErrors) {
+            function membersRelatedToIndexInfo(source, targetInfo, reportErrors) {
                 var result = -1 /* True */;
+                var keyType = targetInfo.keyType;
                 var props = source.flags & 2097152 /* Intersection */ ? getPropertiesOfUnionOrIntersectionType(source) : getPropertiesOfObjectType(source);
                 for (var _i = 0, props_2 = props; _i < props_2.length; _i++) {
                     var prop = props_2[_i];
@@ -62581,16 +63694,12 @@
                     if (isIgnoredJsxProperty(source, prop)) {
                         continue;
                     }
-                    var nameType = getSymbolLinks(prop).nameType;
-                    if (nameType && nameType.flags & 8192 /* UniqueESSymbol */) {
-                        continue;
-                    }
-                    if (kind === 0 /* String */ || isNumericLiteralName(prop.escapedName)) {
-                        var propType = getTypeOfSymbol(prop);
-                        var type = propType.flags & 32768 /* Undefined */ || !(kind === 0 /* String */ && prop.flags & 16777216 /* Optional */)
+                    if (isApplicableIndexType(getLiteralTypeFromProperty(prop, 8576 /* StringOrNumberLiteralOrUnique */), keyType)) {
+                        var propType = getNonMissingTypeOfSymbol(prop);
+                        var type = exactOptionalPropertyTypes || propType.flags & 32768 /* Undefined */ || keyType === numberType || !(prop.flags & 16777216 /* Optional */)
                             ? propType
                             : getTypeWithFacts(propType, 524288 /* NEUndefined */);
-                        var related = isRelatedTo(type, target, reportErrors);
+                        var related = isRelatedTo(type, targetInfo.type, reportErrors);
                         if (!related) {
                             if (reportErrors) {
                                 reportError(ts.Diagnostics.Property_0_is_incompatible_with_index_signature, symbolToString(prop));
@@ -62600,67 +63709,77 @@
                         result &= related;
                     }
                 }
+                for (var _a = 0, _b = getIndexInfosOfType(source); _a < _b.length; _a++) {
+                    var info = _b[_a];
+                    if (isApplicableIndexType(info.keyType, keyType)) {
+                        var related = indexInfoRelatedTo(info, targetInfo, reportErrors);
+                        if (!related) {
+                            return 0 /* False */;
+                        }
+                        result &= related;
+                    }
+                }
                 return result;
             }
-            function indexTypeRelatedTo(sourceType, targetType, reportErrors) {
-                var related = isRelatedTo(sourceType, targetType, reportErrors);
+            function indexInfoRelatedTo(sourceInfo, targetInfo, reportErrors) {
+                var related = isRelatedTo(sourceInfo.type, targetInfo.type, reportErrors);
                 if (!related && reportErrors) {
-                    reportError(ts.Diagnostics.Index_signatures_are_incompatible);
+                    if (sourceInfo.keyType === targetInfo.keyType) {
+                        reportError(ts.Diagnostics._0_index_signatures_are_incompatible, typeToString(sourceInfo.keyType));
+                    }
+                    else {
+                        reportError(ts.Diagnostics._0_and_1_index_signatures_are_incompatible, typeToString(sourceInfo.keyType), typeToString(targetInfo.keyType));
+                    }
                 }
                 return related;
             }
-            function indexTypesRelatedTo(source, target, kind, sourceIsPrimitive, reportErrors, intersectionState) {
+            function indexSignaturesRelatedTo(source, target, sourceIsPrimitive, reportErrors, intersectionState) {
                 if (relation === identityRelation) {
-                    return indexTypesIdenticalTo(source, target, kind);
+                    return indexSignaturesIdenticalTo(source, target);
                 }
-                var targetType = getIndexTypeOfType(target, kind);
-                if (!targetType) {
-                    return -1 /* True */;
-                }
-                if (targetType.flags & 1 /* Any */ && !sourceIsPrimitive) {
-                    // An index signature of type `any` permits assignment from everything but primitives,
-                    // provided that there is also a `string` index signature of type `any`.
-                    var stringIndexType = kind === 0 /* String */ ? targetType : getIndexTypeOfType(target, 0 /* String */);
-                    if (stringIndexType && stringIndexType.flags & 1 /* Any */) {
-                        return -1 /* True */;
+                var indexInfos = getIndexInfosOfType(target);
+                var targetHasStringIndex = ts.some(indexInfos, function (info) { return info.keyType === stringType; });
+                var result = -1 /* True */;
+                for (var _i = 0, indexInfos_3 = indexInfos; _i < indexInfos_3.length; _i++) {
+                    var targetInfo = indexInfos_3[_i];
+                    var related = !sourceIsPrimitive && targetHasStringIndex && targetInfo.type.flags & 1 /* Any */ ? -1 /* True */ :
+                        isGenericMappedType(source) && targetHasStringIndex ? isRelatedTo(getTemplateTypeFromMappedType(source), targetInfo.type, reportErrors) :
+                            typeRelatedToIndexInfo(source, targetInfo, reportErrors, intersectionState);
+                    if (!related) {
+                        return 0 /* False */;
                     }
+                    result &= related;
                 }
-                if (isGenericMappedType(source)) {
-                    // A generic mapped type { [P in K]: T } is related to a type with an index signature
-                    // { [x: string]: U }, and optionally with an index signature { [x: number]: V },
-                    // if T is related to U and V.
-                    return getIndexTypeOfType(target, 0 /* String */) ? isRelatedTo(getTemplateTypeFromMappedType(source), targetType, reportErrors) : 0 /* False */;
-                }
-                var indexType = getIndexTypeOfType(source, kind) || kind === 1 /* Number */ && getIndexTypeOfType(source, 0 /* String */);
-                if (indexType) {
-                    return indexTypeRelatedTo(indexType, targetType, reportErrors);
+                return result;
+            }
+            function typeRelatedToIndexInfo(source, targetInfo, reportErrors, intersectionState) {
+                var sourceInfo = getApplicableIndexInfo(source, targetInfo.keyType);
+                if (sourceInfo) {
+                    return indexInfoRelatedTo(sourceInfo, targetInfo, reportErrors);
                 }
                 if (!(intersectionState & 1 /* Source */) && isObjectTypeWithInferableIndex(source)) {
                     // Intersection constituents are never considered to have an inferred index signature
-                    var related = eachPropertyRelatedTo(source, targetType, kind, reportErrors);
-                    if (related && kind === 0 /* String */) {
-                        var numberIndexType = getIndexTypeOfType(source, 1 /* Number */);
-                        if (numberIndexType) {
-                            related &= indexTypeRelatedTo(numberIndexType, targetType, reportErrors);
-                        }
-                    }
-                    return related;
+                    return membersRelatedToIndexInfo(source, targetInfo, reportErrors);
                 }
                 if (reportErrors) {
-                    reportError(ts.Diagnostics.Index_signature_is_missing_in_type_0, typeToString(source));
+                    reportError(ts.Diagnostics.Index_signature_for_type_0_is_missing_in_type_1, typeToString(targetInfo.keyType), typeToString(source));
                 }
                 return 0 /* False */;
             }
-            function indexTypesIdenticalTo(source, target, indexKind) {
-                var targetInfo = getIndexInfoOfType(target, indexKind);
-                var sourceInfo = getIndexInfoOfType(source, indexKind);
-                if (!sourceInfo && !targetInfo) {
-                    return -1 /* True */;
+            function indexSignaturesIdenticalTo(source, target) {
+                var sourceInfos = getIndexInfosOfType(source);
+                var targetInfos = getIndexInfosOfType(target);
+                if (sourceInfos.length !== targetInfos.length) {
+                    return 0 /* False */;
                 }
-                if (sourceInfo && targetInfo && sourceInfo.isReadonly === targetInfo.isReadonly) {
-                    return isRelatedTo(sourceInfo.type, targetInfo.type);
+                for (var _i = 0, targetInfos_1 = targetInfos; _i < targetInfos_1.length; _i++) {
+                    var targetInfo = targetInfos_1[_i];
+                    var sourceInfo = getIndexInfoOfType(source, targetInfo.keyType);
+                    if (!(sourceInfo && isRelatedTo(sourceInfo.type, targetInfo.type) && sourceInfo.isReadonly === targetInfo.isReadonly)) {
+                        return 0 /* False */;
+                    }
                 }
-                return 0 /* False */;
+                return -1 /* True */;
             }
             function constructorVisibilitiesAreCompatible(sourceSignature, targetSignature, reportErrors) {
                 if (!sourceSignature.declaration || !targetSignature.declaration) {
@@ -62756,10 +63875,8 @@
         function isWeakType(type) {
             if (type.flags & 524288 /* Object */) {
                 var resolved = resolveStructuredTypeMembers(type);
-                return resolved.callSignatures.length === 0 && resolved.constructSignatures.length === 0 &&
-                    !resolved.stringIndexInfo && !resolved.numberIndexInfo &&
-                    resolved.properties.length > 0 &&
-                    ts.every(resolved.properties, function (p) { return !!(p.flags & 16777216 /* Optional */); });
+                return resolved.callSignatures.length === 0 && resolved.constructSignatures.length === 0 && resolved.indexInfos.length === 0 &&
+                    resolved.properties.length > 0 && ts.every(resolved.properties, function (p) { return !!(p.flags & 16777216 /* Optional */); });
             }
             if (type.flags & 2097152 /* Intersection */) {
                 return ts.every(type.types, isWeakType);
@@ -62804,7 +63921,7 @@
                 // The emptyArray singleton is used to signal a recursive invocation.
                 cache.variances = ts.emptyArray;
                 variances = [];
-                var _loop_19 = function (tp) {
+                var _loop_21 = function (tp) {
                     var unmeasurable = false;
                     var unreliable = false;
                     var oldHandler = outofbandVarianceMarkerHandler;
@@ -62836,7 +63953,7 @@
                 };
                 for (var _i = 0, typeParameters_1 = typeParameters; _i < typeParameters_1.length; _i++) {
                     var tp = typeParameters_1[_i];
-                    _loop_19(tp);
+                    _loop_21(tp);
                 }
                 cache.variances = variances;
                 ts.tracing === null || ts.tracing === void 0 ? void 0 : ts.tracing.pop();
@@ -63146,8 +64263,8 @@
         }
         function literalTypesWithSameBaseType(types) {
             var commonBaseType;
-            for (var _i = 0, types_14 = types; _i < types_14.length; _i++) {
-                var t = types_14[_i];
+            for (var _i = 0, types_13 = types; _i < types_13.length; _i++) {
+                var t = types_13[_i];
                 var baseType = getBaseTypeOfLiteralType(t);
                 if (!commonBaseType) {
                     commonBaseType = baseType;
@@ -63208,6 +64325,14 @@
             }
             type.objectFlags |= 33554432 /* IdenticalBaseTypeCalculated */;
             var target = type.target;
+            if (ts.getObjectFlags(target) & 1 /* Class */) {
+                var baseTypeNode = getBaseTypeNodeOfClass(target);
+                // A base type expression may circularly reference the class itself (e.g. as an argument to function call), so we only
+                // check for base types specified as simple qualified names.
+                if (baseTypeNode && baseTypeNode.expression.kind !== 79 /* Identifier */ && baseTypeNode.expression.kind !== 204 /* PropertyAccessExpression */) {
+                    return undefined;
+                }
+            }
             var bases = getBaseTypes(target);
             if (bases.length !== 1) {
                 return undefined;
@@ -63222,9 +64347,12 @@
             type.objectFlags |= 67108864 /* IdenticalBaseTypeExists */;
             return type.cachedEquivalentBaseType = instantiatedBase;
         }
+        function isEmptyLiteralType(type) {
+            return strictNullChecks ? type === implicitNeverType : type === undefinedWideningType;
+        }
         function isEmptyArrayLiteralType(type) {
             var elementType = getElementTypeOfArrayType(type);
-            return strictNullChecks ? elementType === implicitNeverType : elementType === undefinedWideningType;
+            return !!elementType && isEmptyLiteralType(elementType);
         }
         function isTupleLikeType(type) {
             return isTupleType(type) || !!getPropertyOfType(type, "0");
@@ -63351,8 +64479,8 @@
         }
         function getFalsyFlagsOfTypes(types) {
             var result = 0;
-            for (var _i = 0, types_15 = types; _i < types_15.length; _i++) {
-                var t = types_15[_i];
+            for (var _i = 0, types_14 = types; _i < types_14.length; _i++) {
+                var t = types_14[_i];
                 result |= getFalsyFlags(t);
             }
             return result;
@@ -63400,9 +64528,10 @@
                     missing === 65536 /* Null */ ? getUnionType([type, nullType]) :
                         getUnionType([type, undefinedType, nullType]);
         }
-        function getOptionalType(type) {
+        function getOptionalType(type, isProperty) {
+            if (isProperty === void 0) { isProperty = false; }
             ts.Debug.assert(strictNullChecks);
-            return type.flags & 32768 /* Undefined */ ? type : getUnionType([type, undefinedType]);
+            return type.flags & 32768 /* Undefined */ ? type : getUnionType([type, isProperty ? missingType : undefinedType]);
         }
         function getGlobalNonNullableTypeInstantiation(type) {
             // First reduce away any constituents that are assignable to 'undefined' or 'null'. This not only eliminates
@@ -63423,11 +64552,8 @@
         function addOptionalTypeMarker(type) {
             return strictNullChecks ? getUnionType([type, optionalType]) : type;
         }
-        function isNotOptionalTypeMarker(type) {
-            return type !== optionalType;
-        }
         function removeOptionalTypeMarker(type) {
-            return strictNullChecks ? filterType(type, isNotOptionalTypeMarker) : type;
+            return strictNullChecks ? removeType(type, optionalType) : type;
         }
         function propagateOptionalTypeMarker(type, node, wasOptional) {
             return wasOptional ? ts.isOutermostOptionalChain(node) ? getOptionalType(type) : addOptionalTypeMarker(type) : type;
@@ -63437,6 +64563,15 @@
                 ts.isOptionalChain(expression) ? removeOptionalTypeMarker(exprType) :
                     exprType;
         }
+        function removeMissingType(type, isOptional) {
+            return exactOptionalPropertyTypes && isOptional ? removeType(type, missingType) : type;
+        }
+        function containsMissingType(type) {
+            return exactOptionalPropertyTypes && (type === missingType || type.flags & 1048576 /* Union */ && containsType(type.types, missingType));
+        }
+        function removeMissingOrUndefinedType(type) {
+            return exactOptionalPropertyTypes ? removeType(type, missingType) : getTypeWithFacts(type, 524288 /* NEUndefined */);
+        }
         /**
          * Is source potentially coercible to target type under `==`.
          * Assumes that `source` is a constituent of a union, hence
@@ -63510,7 +64645,7 @@
             }
             var resolved = type;
             var members = transformTypeOfMembers(type, getRegularTypeOfObjectLiteral);
-            var regularNew = createAnonymousType(resolved.symbol, members, resolved.callSignatures, resolved.constructSignatures, resolved.stringIndexInfo, resolved.numberIndexInfo);
+            var regularNew = createAnonymousType(resolved.symbol, members, resolved.callSignatures, resolved.constructSignatures, resolved.indexInfos);
             regularNew.flags = resolved.flags;
             regularNew.objectFlags |= resolved.objectFlags & ~16384 /* FreshLiteral */;
             type.regularType = regularNew;
@@ -63569,7 +64704,7 @@
             if (cached) {
                 return cached;
             }
-            var result = createSymbolWithType(prop, undefinedType);
+            var result = createSymbolWithType(prop, missingType);
             result.flags |= 16777216 /* Optional */;
             undefinedProperties.set(prop.escapedName, result);
             return result;
@@ -63588,9 +64723,7 @@
                     }
                 }
             }
-            var stringIndexInfo = getIndexInfoOfType(type, 0 /* String */);
-            var numberIndexInfo = getIndexInfoOfType(type, 1 /* Number */);
-            var result = createAnonymousType(type.symbol, members, ts.emptyArray, ts.emptyArray, stringIndexInfo && createIndexInfo(getWidenedType(stringIndexInfo.type), stringIndexInfo.isReadonly), numberIndexInfo && createIndexInfo(getWidenedType(numberIndexInfo.type), numberIndexInfo.isReadonly));
+            var result = createAnonymousType(type.symbol, members, ts.emptyArray, ts.emptyArray, ts.sameMap(getIndexInfosOfType(type), function (info) { return createIndexInfo(info.keyType, getWidenedType(info.type), info.isReadonly); }));
             result.objectFlags |= (ts.getObjectFlags(type) & (8192 /* JSLiteral */ | 524288 /* NonInferrableType */)); // Retain js literal flag through widening
             return result;
         }
@@ -63688,12 +64821,12 @@
             }
             var diagnostic;
             switch (declaration.kind) {
-                case 217 /* BinaryExpression */:
-                case 164 /* PropertyDeclaration */:
-                case 163 /* PropertySignature */:
+                case 219 /* BinaryExpression */:
+                case 165 /* PropertyDeclaration */:
+                case 164 /* PropertySignature */:
                     diagnostic = noImplicitAny ? ts.Diagnostics.Member_0_implicitly_has_an_1_type : ts.Diagnostics.Member_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage;
                     break;
-                case 161 /* Parameter */:
+                case 162 /* Parameter */:
                     var param = declaration;
                     if (ts.isIdentifier(param.name) &&
                         (ts.isCallSignatureDeclaration(param.parent) || ts.isMethodSignature(param.parent) || ts.isFunctionTypeNode(param.parent)) &&
@@ -63708,23 +64841,23 @@
                         noImplicitAny ? ts.Diagnostics.Rest_parameter_0_implicitly_has_an_any_type : ts.Diagnostics.Rest_parameter_0_implicitly_has_an_any_type_but_a_better_type_may_be_inferred_from_usage :
                         noImplicitAny ? ts.Diagnostics.Parameter_0_implicitly_has_an_1_type : ts.Diagnostics.Parameter_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage;
                     break;
-                case 199 /* BindingElement */:
+                case 201 /* BindingElement */:
                     diagnostic = ts.Diagnostics.Binding_element_0_implicitly_has_an_1_type;
                     if (!noImplicitAny) {
                         // Don't issue a suggestion for binding elements since the codefix doesn't yet support them.
                         return;
                     }
                     break;
-                case 309 /* JSDocFunctionType */:
+                case 312 /* JSDocFunctionType */:
                     error(declaration, ts.Diagnostics.Function_type_which_lacks_return_type_annotation_implicitly_has_an_0_return_type, typeAsString);
                     return;
-                case 252 /* FunctionDeclaration */:
-                case 166 /* MethodDeclaration */:
-                case 165 /* MethodSignature */:
-                case 168 /* GetAccessor */:
-                case 169 /* SetAccessor */:
-                case 209 /* FunctionExpression */:
-                case 210 /* ArrowFunction */:
+                case 254 /* FunctionDeclaration */:
+                case 167 /* MethodDeclaration */:
+                case 166 /* MethodSignature */:
+                case 170 /* GetAccessor */:
+                case 171 /* SetAccessor */:
+                case 211 /* FunctionExpression */:
+                case 212 /* ArrowFunction */:
                     if (noImplicitAny && !declaration.name) {
                         if (wideningKind === 3 /* GeneratorYield */) {
                             error(declaration, ts.Diagnostics.Generator_implicitly_has_yield_type_0_because_it_does_not_yield_any_values_Consider_supplying_a_return_type_annotation, typeAsString);
@@ -63738,7 +64871,7 @@
                         wideningKind === 3 /* GeneratorYield */ ? ts.Diagnostics._0_which_lacks_return_type_annotation_implicitly_has_an_1_yield_type :
                             ts.Diagnostics._0_which_lacks_return_type_annotation_implicitly_has_an_1_return_type;
                     break;
-                case 191 /* MappedType */:
+                case 193 /* MappedType */:
                     if (noImplicitAny) {
                         error(declaration, ts.Diagnostics.Mapped_object_type_implicitly_has_an_any_template_type);
                     }
@@ -63880,8 +65013,8 @@
         }
         function isNonGenericTopLevelType(type) {
             if (type.aliasSymbol && !type.aliasTypeArguments) {
-                var declaration = ts.getDeclarationOfKind(type.aliasSymbol, 255 /* TypeAliasDeclaration */);
-                return !!(declaration && ts.findAncestor(declaration.parent, function (n) { return n.kind === 298 /* SourceFile */ ? true : n.kind === 257 /* ModuleDeclaration */ ? false : "quit"; }));
+                var declaration = ts.getDeclarationOfKind(type.aliasSymbol, 257 /* TypeAliasDeclaration */);
+                return !!(declaration && ts.findAncestor(declaration.parent, function (n) { return n.kind === 300 /* SourceFile */ ? true : n.kind === 259 /* ModuleDeclaration */ ? false : "quit"; }));
             }
             return false;
         }
@@ -63906,8 +65039,8 @@
                 }
                 members.set(name, literalProp);
             });
-            var indexInfo = type.flags & 4 /* String */ ? createIndexInfo(emptyObjectType, /*isReadonly*/ false) : undefined;
-            return createAnonymousType(undefined, members, ts.emptyArray, ts.emptyArray, indexInfo, undefined);
+            var indexInfos = type.flags & 4 /* String */ ? [createIndexInfo(stringType, emptyObjectType, /*isReadonly*/ false)] : ts.emptyArray;
+            return createAnonymousType(undefined, members, ts.emptyArray, ts.emptyArray, indexInfos);
         }
         /**
          * Infer a suitable input type for a homomorphic mapped type { [P in keyof T]: X }. We construct
@@ -63941,7 +65074,7 @@
         function createReverseMappedType(source, target, constraint) {
             // We consider a source type reverse mappable if it has a string index signature or if
             // it has one or more properties and is of a partially inferable type.
-            if (!(getIndexInfoOfType(source, 0 /* String */) || getPropertiesOfType(source).length !== 0 && isPartiallyInferableType(source))) {
+            if (!(getIndexInfoOfType(source, stringType) || getPropertiesOfType(source).length !== 0 && isPartiallyInferableType(source))) {
                 return undefined;
             }
             // For arrays and tuples we infer new arrays and tuples where the reverse mapping has been
@@ -64155,8 +65288,8 @@
             }
             function addMatch(s, p) {
                 var matchType = s === seg ?
-                    getLiteralType(getSourceText(s).slice(pos, p)) :
-                    getTemplateLiteralType(__spreadArray(__spreadArray([sourceTexts[seg].slice(pos)], sourceTexts.slice(seg + 1, s)), [getSourceText(s).slice(0, p)]), sourceTypes.slice(seg, s));
+                    getStringLiteralType(getSourceText(s).slice(pos, p)) :
+                    getTemplateLiteralType(__spreadArray(__spreadArray([sourceTexts[seg].slice(pos)], sourceTexts.slice(seg + 1, s), true), [getSourceText(s).slice(0, p)], false), sourceTypes.slice(seg, s));
                 matches.push(matchType);
                 seg = s;
                 pos = p;
@@ -64475,8 +65608,8 @@
             }
             function getSingleTypeVariableFromIntersectionTypes(types) {
                 var typeVariable;
-                for (var _i = 0, types_16 = types; _i < types_16.length; _i++) {
-                    var type = types_16[_i];
+                for (var _i = 0, types_15 = types; _i < types_15.length; _i++) {
+                    var type = types_15[_i];
                     var t = type.flags & 2097152 /* Intersection */ && ts.find(type.types, function (t) { return !!getInferenceInfoForType(t); });
                     if (!t || typeVariable && t !== typeVariable) {
                         return undefined;
@@ -64606,10 +65739,8 @@
                     // If no inferences can be made to K's constraint, infer from a union of the property types
                     // in the source to the template type X.
                     var propTypes = ts.map(getPropertiesOfType(source), getTypeOfSymbol);
-                    var stringIndexType = getIndexTypeOfType(source, 0 /* String */);
-                    var numberIndexInfo = getNonEnumNumberIndexInfo(source);
-                    var numberIndexType = numberIndexInfo && numberIndexInfo.type;
-                    inferFromTypes(getUnionType(ts.append(ts.append(propTypes, stringIndexType), numberIndexType)), getTemplateTypeFromMappedType(target));
+                    var indexTypes = ts.map(getIndexInfosOfType(source), function (info) { return info !== enumNumberIndexInfo ? info.type : neverType; });
+                    inferFromTypes(getUnionType(ts.concatenate(propTypes, indexTypes)), getTemplateTypeFromMappedType(target));
                     return true;
                 }
                 return false;
@@ -64756,7 +65887,7 @@
                     var saveBivariant = bivariant;
                     var kind = target.declaration ? target.declaration.kind : 0 /* Unknown */;
                     // Once we descend into a bivariant signature we remain bivariant for all nested inferences
-                    bivariant = bivariant || kind === 166 /* MethodDeclaration */ || kind === 165 /* MethodSignature */ || kind === 167 /* Constructor */;
+                    bivariant = bivariant || kind === 167 /* MethodDeclaration */ || kind === 166 /* MethodSignature */ || kind === 169 /* Constructor */;
                     applyToParameterTypes(source, target, inferFromContravariantTypes);
                     bivariant = saveBivariant;
                 }
@@ -64765,27 +65896,41 @@
             function inferFromIndexTypes(source, target) {
                 // Inferences across mapped type index signatures are pretty much the same a inferences to homomorphic variables
                 var priority = (ts.getObjectFlags(source) & ts.getObjectFlags(target) & 32 /* Mapped */) ? 8 /* HomomorphicMappedType */ : 0;
-                var targetStringIndexType = getIndexTypeOfType(target, 0 /* String */);
-                if (targetStringIndexType) {
-                    var sourceIndexType = getIndexTypeOfType(source, 0 /* String */) ||
-                        getImplicitIndexTypeOfType(source, 0 /* String */);
-                    if (sourceIndexType) {
-                        inferWithPriority(sourceIndexType, targetStringIndexType, priority);
+                var indexInfos = getIndexInfosOfType(target);
+                if (isObjectTypeWithInferableIndex(source)) {
+                    for (var _i = 0, indexInfos_4 = indexInfos; _i < indexInfos_4.length; _i++) {
+                        var targetInfo = indexInfos_4[_i];
+                        var propTypes = [];
+                        for (var _a = 0, _b = getPropertiesOfType(source); _a < _b.length; _a++) {
+                            var prop = _b[_a];
+                            if (isApplicableIndexType(getLiteralTypeFromProperty(prop, 8576 /* StringOrNumberLiteralOrUnique */), targetInfo.keyType)) {
+                                var propType = getTypeOfSymbol(prop);
+                                propTypes.push(prop.flags & 16777216 /* Optional */ ? removeMissingOrUndefinedType(propType) : propType);
+                            }
+                        }
+                        for (var _c = 0, _d = getIndexInfosOfType(source); _c < _d.length; _c++) {
+                            var info = _d[_c];
+                            if (isApplicableIndexType(info.keyType, targetInfo.keyType)) {
+                                propTypes.push(info.type);
+                            }
+                        }
+                        if (propTypes.length) {
+                            inferWithPriority(getUnionType(propTypes), targetInfo.type, priority);
+                        }
                     }
                 }
-                var targetNumberIndexType = getIndexTypeOfType(target, 1 /* Number */);
-                if (targetNumberIndexType) {
-                    var sourceIndexType = getIndexTypeOfType(source, 1 /* Number */) ||
-                        getIndexTypeOfType(source, 0 /* String */) ||
-                        getImplicitIndexTypeOfType(source, 1 /* Number */);
-                    if (sourceIndexType) {
-                        inferWithPriority(sourceIndexType, targetNumberIndexType, priority);
+                for (var _e = 0, indexInfos_5 = indexInfos; _e < indexInfos_5.length; _e++) {
+                    var targetInfo = indexInfos_5[_e];
+                    var sourceInfo = getApplicableIndexInfo(source, targetInfo.keyType);
+                    if (sourceInfo) {
+                        inferWithPriority(sourceInfo.type, targetInfo.type, priority);
                     }
                 }
             }
         }
         function isTypeOrBaseIdenticalTo(s, t) {
-            return isTypeIdenticalTo(s, t) || !!(t.flags & 4 /* String */ && s.flags & 128 /* StringLiteral */ || t.flags & 8 /* Number */ && s.flags & 256 /* NumberLiteral */);
+            return exactOptionalPropertyTypes && t === missingType ? s === t :
+                (isTypeIdenticalTo(s, t) || !!(t.flags & 4 /* String */ && s.flags & 128 /* StringLiteral */ || t.flags & 8 /* Number */ && s.flags & 256 /* NumberLiteral */));
         }
         function isTypeCloselyMatchedBy(s, t) {
             return !!(s.flags & 524288 /* Object */ && t.flags & 524288 /* Object */ && s.symbol && s.symbol === t.symbol ||
@@ -64938,7 +66083,7 @@
                 case "BigUint64Array":
                     return ts.Diagnostics.Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_1_or_later;
                 default:
-                    if (node.parent.kind === 290 /* ShorthandPropertyAssignment */) {
+                    if (node.parent.kind === 292 /* ShorthandPropertyAssignment */) {
                         return ts.Diagnostics.No_value_exists_in_scope_for_the_shorthand_property_0_Either_declare_one_or_provide_an_initializer;
                     }
                     else {
@@ -64951,7 +66096,8 @@
             if (!links.resolvedSymbol) {
                 links.resolvedSymbol = !ts.nodeIsMissing(node) &&
                     resolveName(node, node.escapedText, 111551 /* Value */ | 1048576 /* ExportValue */, getCannotFindNameDiagnosticForName(node), node, !ts.isWriteOnlyAccess(node), 
-                    /*excludeGlobals*/ false, ts.Diagnostics.Cannot_find_name_0_Did_you_mean_1) || unknownSymbol;
+                    /*excludeGlobals*/ false, 
+                    /*issueSuggestions*/ true) || unknownSymbol;
             }
             return links.resolvedSymbol;
         }
@@ -64959,7 +66105,7 @@
             // TypeScript 1.0 spec (April 2014): 3.6.3
             // A type query consists of the keyword typeof followed by an expression.
             // The expression is restricted to a single identifier or a sequence of identifiers separated by periods
-            return !!ts.findAncestor(node, function (n) { return n.kind === 177 /* TypeQuery */ ? true : n.kind === 78 /* Identifier */ || n.kind === 158 /* QualifiedName */ ? false : "quit"; });
+            return !!ts.findAncestor(node, function (n) { return n.kind === 179 /* TypeQuery */ ? true : n.kind === 79 /* Identifier */ || n.kind === 159 /* QualifiedName */ ? false : "quit"; });
         }
         // Return the flow cache key for a "dotted name" (i.e. a sequence of identifiers
         // separated by dots). The key consists of the id of the symbol referenced by the
@@ -64967,16 +66113,19 @@
         // The result is undefined if the reference isn't a dotted name.
         function getFlowCacheKey(node, declaredType, initialType, flowContainer) {
             switch (node.kind) {
-                case 78 /* Identifier */:
+                case 79 /* Identifier */:
                     var symbol = getResolvedSymbol(node);
                     return symbol !== unknownSymbol ? (flowContainer ? getNodeId(flowContainer) : "-1") + "|" + getTypeId(declaredType) + "|" + getTypeId(initialType) + "|" + getSymbolId(symbol) : undefined;
-                case 107 /* ThisKeyword */:
+                case 108 /* ThisKeyword */:
                     return "0|" + (flowContainer ? getNodeId(flowContainer) : "-1") + "|" + getTypeId(declaredType) + "|" + getTypeId(initialType);
-                case 226 /* NonNullExpression */:
-                case 208 /* ParenthesizedExpression */:
+                case 228 /* NonNullExpression */:
+                case 210 /* ParenthesizedExpression */:
                     return getFlowCacheKey(node.expression, declaredType, initialType, flowContainer);
-                case 202 /* PropertyAccessExpression */:
-                case 203 /* ElementAccessExpression */:
+                case 159 /* QualifiedName */:
+                    var left = getFlowCacheKey(node.left, declaredType, initialType, flowContainer);
+                    return left && left + "." + node.right.escapedText;
+                case 204 /* PropertyAccessExpression */:
+                case 205 /* ElementAccessExpression */:
                     var propName = getAccessedPropertyName(node);
                     if (propName !== undefined) {
                         var key = getFlowCacheKey(node.expression, declaredType, initialType, flowContainer);
@@ -64987,40 +66136,42 @@
         }
         function isMatchingReference(source, target) {
             switch (target.kind) {
-                case 208 /* ParenthesizedExpression */:
-                case 226 /* NonNullExpression */:
+                case 210 /* ParenthesizedExpression */:
+                case 228 /* NonNullExpression */:
                     return isMatchingReference(source, target.expression);
-                case 217 /* BinaryExpression */:
+                case 219 /* BinaryExpression */:
                     return (ts.isAssignmentExpression(target) && isMatchingReference(source, target.left)) ||
                         (ts.isBinaryExpression(target) && target.operatorToken.kind === 27 /* CommaToken */ && isMatchingReference(source, target.right));
             }
             switch (source.kind) {
-                case 227 /* MetaProperty */:
-                    return target.kind === 227 /* MetaProperty */
+                case 229 /* MetaProperty */:
+                    return target.kind === 229 /* MetaProperty */
                         && source.keywordToken === target.keywordToken
                         && source.name.escapedText === target.name.escapedText;
-                case 78 /* Identifier */:
-                case 79 /* PrivateIdentifier */:
-                    return target.kind === 78 /* Identifier */ && getResolvedSymbol(source) === getResolvedSymbol(target) ||
-                        (target.kind === 250 /* VariableDeclaration */ || target.kind === 199 /* BindingElement */) &&
-                            getExportSymbolOfValueSymbolIfExported(getResolvedSymbol(source)) === getSymbolOfNode(target);
-                case 107 /* ThisKeyword */:
-                    return target.kind === 107 /* ThisKeyword */;
-                case 105 /* SuperKeyword */:
-                    return target.kind === 105 /* SuperKeyword */;
-                case 226 /* NonNullExpression */:
-                case 208 /* ParenthesizedExpression */:
+                case 79 /* Identifier */:
+                case 80 /* PrivateIdentifier */:
+                    return ts.isThisInTypeQuery(source) ?
+                        target.kind === 108 /* ThisKeyword */ :
+                        target.kind === 79 /* Identifier */ && getResolvedSymbol(source) === getResolvedSymbol(target) ||
+                            (target.kind === 252 /* VariableDeclaration */ || target.kind === 201 /* BindingElement */) &&
+                                getExportSymbolOfValueSymbolIfExported(getResolvedSymbol(source)) === getSymbolOfNode(target);
+                case 108 /* ThisKeyword */:
+                    return target.kind === 108 /* ThisKeyword */;
+                case 106 /* SuperKeyword */:
+                    return target.kind === 106 /* SuperKeyword */;
+                case 228 /* NonNullExpression */:
+                case 210 /* ParenthesizedExpression */:
                     return isMatchingReference(source.expression, target);
-                case 202 /* PropertyAccessExpression */:
-                case 203 /* ElementAccessExpression */:
+                case 204 /* PropertyAccessExpression */:
+                case 205 /* ElementAccessExpression */:
                     return ts.isAccessExpression(target) &&
                         getAccessedPropertyName(source) === getAccessedPropertyName(target) &&
                         isMatchingReference(source.expression, target.expression);
-                case 158 /* QualifiedName */:
+                case 159 /* QualifiedName */:
                     return ts.isAccessExpression(target) &&
                         source.right.escapedText === getAccessedPropertyName(target) &&
                         isMatchingReference(source.left, target.expression);
-                case 217 /* BinaryExpression */:
+                case 219 /* BinaryExpression */:
                     return (ts.isBinaryExpression(source) && source.operatorToken.kind === 27 /* CommaToken */ && isMatchingReference(source.right, target));
             }
             return false;
@@ -65028,13 +66179,38 @@
         // Given a source x, check if target matches x or is an && operation with an operand that matches x.
         function containsTruthyCheck(source, target) {
             return isMatchingReference(source, target) ||
-                (target.kind === 217 /* BinaryExpression */ && target.operatorToken.kind === 55 /* AmpersandAmpersandToken */ &&
+                (target.kind === 219 /* BinaryExpression */ && target.operatorToken.kind === 55 /* AmpersandAmpersandToken */ &&
                     (containsTruthyCheck(source, target.left) || containsTruthyCheck(source, target.right)));
         }
+        function getPropertyAccess(expr) {
+            if (ts.isAccessExpression(expr)) {
+                return expr;
+            }
+            if (ts.isIdentifier(expr)) {
+                var symbol = getResolvedSymbol(expr);
+                if (isConstVariable(symbol)) {
+                    var declaration = symbol.valueDeclaration;
+                    // Given 'const x = obj.kind', allow 'x' as an alias for 'obj.kind'
+                    if (ts.isVariableDeclaration(declaration) && !declaration.type && declaration.initializer && ts.isAccessExpression(declaration.initializer)) {
+                        return declaration.initializer;
+                    }
+                    // Given 'const { kind: x } = obj', allow 'x' as an alias for 'obj.kind'
+                    if (ts.isBindingElement(declaration) && !declaration.initializer) {
+                        var parent = declaration.parent.parent;
+                        if (ts.isVariableDeclaration(parent) && !parent.type && parent.initializer && (ts.isIdentifier(parent.initializer) || ts.isAccessExpression(parent.initializer))) {
+                            return declaration;
+                        }
+                    }
+                }
+            }
+            return undefined;
+        }
         function getAccessedPropertyName(access) {
-            return access.kind === 202 /* PropertyAccessExpression */ ? access.name.escapedText :
-                ts.isStringOrNumericLiteralLike(access.argumentExpression) ? ts.escapeLeadingUnderscores(access.argumentExpression.text) :
-                    undefined;
+            var propertyName;
+            return access.kind === 204 /* PropertyAccessExpression */ ? access.name.escapedText :
+                access.kind === 205 /* ElementAccessExpression */ && ts.isStringOrNumericLiteralLike(access.argumentExpression) ? ts.escapeLeadingUnderscores(access.argumentExpression.text) :
+                    access.kind === 201 /* BindingElement */ && (propertyName = getDestructuringPropertyName(access)) ? ts.escapeLeadingUnderscores(propertyName) :
+                        undefined;
         }
         function containsMatchingReference(source, target) {
             while (ts.isAccessExpression(source)) {
@@ -65061,7 +66237,7 @@
                     if (prop.isDiscriminantProperty === undefined) {
                         prop.isDiscriminantProperty =
                             (prop.checkFlags & 192 /* Discriminant */) === 192 /* Discriminant */ &&
-                                !maybeTypeOfKind(getTypeOfSymbol(prop), 465829888 /* Instantiable */);
+                                !maybeTypeOfKind(getTypeOfSymbol(prop), 465829888 /* Instantiable */ & ~134217728 /* TemplateLiteral */);
                     }
                     return !!prop.isDiscriminantProperty;
                 }
@@ -65089,7 +66265,7 @@
         function mapTypesByKeyProperty(types, name) {
             var map = new ts.Map();
             var count = 0;
-            var _loop_20 = function (type) {
+            var _loop_22 = function (type) {
                 if (type.flags & (524288 /* Object */ | 2097152 /* Intersection */ | 58982400 /* InstantiableNonPrimitive */)) {
                     var discriminant = getTypeOfPropertyOfType(type, name);
                     if (discriminant) {
@@ -65113,9 +66289,9 @@
                     }
                 }
             };
-            for (var _i = 0, types_17 = types; _i < types_17.length; _i++) {
-                var type = types_17[_i];
-                var state_8 = _loop_20(type);
+            for (var _i = 0, types_16 = types; _i < types_16.length; _i++) {
+                var type = types_16[_i];
+                var state_8 = _loop_22(type);
                 if (typeof state_8 === "object")
                     return state_8.value;
             }
@@ -65157,7 +66333,7 @@
         }
         function getMatchingUnionConstituentForObjectLiteral(unionType, node) {
             var keyPropertyName = getKeyPropertyName(unionType);
-            var propNode = keyPropertyName && ts.find(node.properties, function (p) { return p.symbol && p.kind === 289 /* PropertyAssignment */ &&
+            var propNode = keyPropertyName && ts.find(node.properties, function (p) { return p.symbol && p.kind === 291 /* PropertyAssignment */ &&
                 p.symbol.escapedName === keyPropertyName && isPossiblyDiscriminantValue(p.initializer); });
             var propType = propNode && getTypeOfExpression(propNode.initializer);
             return propType && getConstituentTypeForKeyType(unionType, propType);
@@ -65174,7 +66350,7 @@
                     }
                 }
             }
-            if (expression.expression.kind === 202 /* PropertyAccessExpression */ &&
+            if (expression.expression.kind === 204 /* PropertyAccessExpression */ &&
                 isOrContainsMatchingReference(reference, expression.expression.expression)) {
                 return true;
             }
@@ -65312,14 +66488,12 @@
                 type;
         }
         function getTypeOfDestructuredProperty(type, name) {
+            var _a;
             var nameType = getLiteralTypeFromPropertyName(name);
             if (!isTypeUsableAsPropertyName(nameType))
                 return errorType;
             var text = getPropertyNameFromType(nameType);
-            return getTypeOfPropertyOfType(type, text) ||
-                isNumericLiteralName(text) && includeUndefinedInIndexSignature(getIndexTypeOfType(type, 1 /* Number */)) ||
-                includeUndefinedInIndexSignature(getIndexTypeOfType(type, 0 /* String */)) ||
-                errorType;
+            return getTypeOfPropertyOfType(type, text) || includeUndefinedInIndexSignature((_a = getApplicableIndexInfoForName(type, text)) === null || _a === void 0 ? void 0 : _a.type) || errorType;
         }
         function getTypeOfDestructuredArrayElement(type, index) {
             return everyType(type, isTupleLikeType) && getTupleElementType(type, index) ||
@@ -65337,15 +66511,15 @@
             return createArrayType(checkIteratedTypeOrElementType(65 /* Destructuring */, type, undefinedType, /*errorNode*/ undefined) || errorType);
         }
         function getAssignedTypeOfBinaryExpression(node) {
-            var isDestructuringDefaultAssignment = node.parent.kind === 200 /* ArrayLiteralExpression */ && isDestructuringAssignmentTarget(node.parent) ||
-                node.parent.kind === 289 /* PropertyAssignment */ && isDestructuringAssignmentTarget(node.parent.parent);
+            var isDestructuringDefaultAssignment = node.parent.kind === 202 /* ArrayLiteralExpression */ && isDestructuringAssignmentTarget(node.parent) ||
+                node.parent.kind === 291 /* PropertyAssignment */ && isDestructuringAssignmentTarget(node.parent.parent);
             return isDestructuringDefaultAssignment ?
                 getTypeWithDefault(getAssignedType(node), node.right) :
                 getTypeOfExpression(node.right);
         }
         function isDestructuringAssignmentTarget(parent) {
-            return parent.parent.kind === 217 /* BinaryExpression */ && parent.parent.left === parent ||
-                parent.parent.kind === 240 /* ForOfStatement */ && parent.parent.initializer === parent;
+            return parent.parent.kind === 219 /* BinaryExpression */ && parent.parent.left === parent ||
+                parent.parent.kind === 242 /* ForOfStatement */ && parent.parent.initializer === parent;
         }
         function getAssignedTypeOfArrayLiteralElement(node, element) {
             return getTypeOfDestructuredArrayElement(getAssignedType(node), node.elements.indexOf(element));
@@ -65362,21 +66536,21 @@
         function getAssignedType(node) {
             var parent = node.parent;
             switch (parent.kind) {
-                case 239 /* ForInStatement */:
+                case 241 /* ForInStatement */:
                     return stringType;
-                case 240 /* ForOfStatement */:
+                case 242 /* ForOfStatement */:
                     return checkRightHandSideOfForOf(parent) || errorType;
-                case 217 /* BinaryExpression */:
+                case 219 /* BinaryExpression */:
                     return getAssignedTypeOfBinaryExpression(parent);
-                case 211 /* DeleteExpression */:
+                case 213 /* DeleteExpression */:
                     return undefinedType;
-                case 200 /* ArrayLiteralExpression */:
+                case 202 /* ArrayLiteralExpression */:
                     return getAssignedTypeOfArrayLiteralElement(parent, node);
-                case 221 /* SpreadElement */:
+                case 223 /* SpreadElement */:
                     return getAssignedTypeOfSpreadExpression(parent);
-                case 289 /* PropertyAssignment */:
+                case 291 /* PropertyAssignment */:
                     return getAssignedTypeOfPropertyAssignment(parent);
-                case 290 /* ShorthandPropertyAssignment */:
+                case 292 /* ShorthandPropertyAssignment */:
                     return getAssignedTypeOfShorthandPropertyAssignment(parent);
             }
             return errorType;
@@ -65384,7 +66558,7 @@
         function getInitialTypeOfBindingElement(node) {
             var pattern = node.parent;
             var parentType = getInitialType(pattern.parent);
-            var type = pattern.kind === 197 /* ObjectBindingPattern */ ?
+            var type = pattern.kind === 199 /* ObjectBindingPattern */ ?
                 getTypeOfDestructuredProperty(parentType, node.propertyName || node.name) :
                 !node.dotDotDotToken ?
                     getTypeOfDestructuredArrayElement(parentType, pattern.elements.indexOf(node)) :
@@ -65402,35 +66576,35 @@
             if (node.initializer) {
                 return getTypeOfInitializer(node.initializer);
             }
-            if (node.parent.parent.kind === 239 /* ForInStatement */) {
+            if (node.parent.parent.kind === 241 /* ForInStatement */) {
                 return stringType;
             }
-            if (node.parent.parent.kind === 240 /* ForOfStatement */) {
+            if (node.parent.parent.kind === 242 /* ForOfStatement */) {
                 return checkRightHandSideOfForOf(node.parent.parent) || errorType;
             }
             return errorType;
         }
         function getInitialType(node) {
-            return node.kind === 250 /* VariableDeclaration */ ?
+            return node.kind === 252 /* VariableDeclaration */ ?
                 getInitialTypeOfVariableDeclaration(node) :
                 getInitialTypeOfBindingElement(node);
         }
         function isEmptyArrayAssignment(node) {
-            return node.kind === 250 /* VariableDeclaration */ && node.initializer &&
+            return node.kind === 252 /* VariableDeclaration */ && node.initializer &&
                 isEmptyArrayLiteral(node.initializer) ||
-                node.kind !== 199 /* BindingElement */ && node.parent.kind === 217 /* BinaryExpression */ &&
+                node.kind !== 201 /* BindingElement */ && node.parent.kind === 219 /* BinaryExpression */ &&
                     isEmptyArrayLiteral(node.parent.right);
         }
         function getReferenceCandidate(node) {
             switch (node.kind) {
-                case 208 /* ParenthesizedExpression */:
+                case 210 /* ParenthesizedExpression */:
                     return getReferenceCandidate(node.expression);
-                case 217 /* BinaryExpression */:
+                case 219 /* BinaryExpression */:
                     switch (node.operatorToken.kind) {
-                        case 62 /* EqualsToken */:
-                        case 74 /* BarBarEqualsToken */:
-                        case 75 /* AmpersandAmpersandEqualsToken */:
-                        case 76 /* QuestionQuestionEqualsToken */:
+                        case 63 /* EqualsToken */:
+                        case 75 /* BarBarEqualsToken */:
+                        case 76 /* AmpersandAmpersandEqualsToken */:
+                        case 77 /* QuestionQuestionEqualsToken */:
                             return getReferenceCandidate(node.left);
                         case 27 /* CommaToken */:
                             return getReferenceCandidate(node.right);
@@ -65440,13 +66614,13 @@
         }
         function getReferenceRoot(node) {
             var parent = node.parent;
-            return parent.kind === 208 /* ParenthesizedExpression */ ||
-                parent.kind === 217 /* BinaryExpression */ && parent.operatorToken.kind === 62 /* EqualsToken */ && parent.left === node ||
-                parent.kind === 217 /* BinaryExpression */ && parent.operatorToken.kind === 27 /* CommaToken */ && parent.right === node ?
+            return parent.kind === 210 /* ParenthesizedExpression */ ||
+                parent.kind === 219 /* BinaryExpression */ && parent.operatorToken.kind === 63 /* EqualsToken */ && parent.left === node ||
+                parent.kind === 219 /* BinaryExpression */ && parent.operatorToken.kind === 27 /* CommaToken */ && parent.right === node ?
                 getReferenceRoot(parent) : node;
         }
         function getTypeOfSwitchClause(clause) {
-            if (clause.kind === 285 /* CaseClause */) {
+            if (clause.kind === 287 /* CaseClause */) {
                 return getRegularTypeOfLiteralType(getTypeOfExpression(clause.expression));
             }
             return neverType;
@@ -65466,7 +66640,7 @@
             var witnesses = [];
             for (var _i = 0, _a = switchStatement.caseBlock.clauses; _i < _a.length; _i++) {
                 var clause = _a[_i];
-                if (clause.kind === 285 /* CaseClause */) {
+                if (clause.kind === 287 /* CaseClause */) {
                     if (ts.isStringLiteralLike(clause.expression)) {
                         witnesses.push(clause.expression.text);
                         continue;
@@ -65539,6 +66713,9 @@
             }
             return type.flags & 131072 /* Never */ || f(type) ? type : neverType;
         }
+        function removeType(type, targetType) {
+            return filterType(type, function (t) { return t !== targetType; });
+        }
         function countTypes(type) {
             return type.flags & 1048576 /* Union */ ? type.types.length : 1;
         }
@@ -65553,8 +66730,8 @@
             var types = origin && origin.flags & 1048576 /* Union */ ? origin.types : type.types;
             var mappedTypes;
             var changed = false;
-            for (var _i = 0, types_18 = types; _i < types_18.length; _i++) {
-                var t = types_18[_i];
+            for (var _i = 0, types_17 = types; _i < types_17.length; _i++) {
+                var t = types_17[_i];
                 var mapped = t.flags & 1048576 /* Union */ ? mapType(t, mapper, noReductions) : mapper(t);
                 changed || (changed = t !== mapped);
                 if (mapped) {
@@ -65641,8 +66818,8 @@
         }
         function isEvolvingArrayTypeList(types) {
             var hasEvolvingArrayType = false;
-            for (var _i = 0, types_19 = types; _i < types_19.length; _i++) {
-                var t = types_19[_i];
+            for (var _i = 0, types_18 = types; _i < types_18.length; _i++) {
+                var t = types_18[_i];
                 if (!(t.flags & 131072 /* Never */)) {
                     if (!(ts.getObjectFlags(t) & 256 /* EvolvingArray */)) {
                         return false;
@@ -65658,21 +66835,21 @@
             var root = getReferenceRoot(node);
             var parent = root.parent;
             var isLengthPushOrUnshift = ts.isPropertyAccessExpression(parent) && (parent.name.escapedText === "length" ||
-                parent.parent.kind === 204 /* CallExpression */
+                parent.parent.kind === 206 /* CallExpression */
                     && ts.isIdentifier(parent.name)
                     && ts.isPushOrUnshiftIdentifier(parent.name));
-            var isElementAssignment = parent.kind === 203 /* ElementAccessExpression */ &&
+            var isElementAssignment = parent.kind === 205 /* ElementAccessExpression */ &&
                 parent.expression === root &&
-                parent.parent.kind === 217 /* BinaryExpression */ &&
-                parent.parent.operatorToken.kind === 62 /* EqualsToken */ &&
+                parent.parent.kind === 219 /* BinaryExpression */ &&
+                parent.parent.operatorToken.kind === 63 /* EqualsToken */ &&
                 parent.parent.left === parent &&
                 !ts.isAssignmentTarget(parent.parent) &&
                 isTypeAssignableToKind(getTypeOfExpression(parent.argumentExpression), 296 /* NumberLike */);
             return isLengthPushOrUnshift || isElementAssignment;
         }
         function isDeclarationWithExplicitTypeAnnotation(declaration) {
-            return (declaration.kind === 250 /* VariableDeclaration */ || declaration.kind === 161 /* Parameter */ ||
-                declaration.kind === 164 /* PropertyDeclaration */ || declaration.kind === 163 /* PropertySignature */) &&
+            return (declaration.kind === 252 /* VariableDeclaration */ || declaration.kind === 162 /* Parameter */ ||
+                declaration.kind === 165 /* PropertyDeclaration */ || declaration.kind === 164 /* PropertySignature */) &&
                 !!ts.getEffectiveTypeAnnotationNode(declaration);
         }
         function getExplicitTypeOfSymbol(symbol, diagnostic) {
@@ -65691,7 +66868,7 @@
                     if (isDeclarationWithExplicitTypeAnnotation(declaration)) {
                         return getTypeOfSymbol(symbol);
                     }
-                    if (ts.isVariableDeclaration(declaration) && declaration.parent.parent.kind === 240 /* ForOfStatement */) {
+                    if (ts.isVariableDeclaration(declaration) && declaration.parent.parent.kind === 242 /* ForOfStatement */) {
                         var statement = declaration.parent.parent;
                         var expressionType = getTypeOfDottedName(statement.expression, /*diagnostic*/ undefined);
                         if (expressionType) {
@@ -65712,14 +66889,14 @@
         function getTypeOfDottedName(node, diagnostic) {
             if (!(node.flags & 16777216 /* InWithStatement */)) {
                 switch (node.kind) {
-                    case 78 /* Identifier */:
+                    case 79 /* Identifier */:
                         var symbol = getExportSymbolOfValueSymbolIfExported(getResolvedSymbol(node));
                         return getExplicitTypeOfSymbol(symbol.flags & 2097152 /* Alias */ ? resolveAlias(symbol) : symbol, diagnostic);
-                    case 107 /* ThisKeyword */:
+                    case 108 /* ThisKeyword */:
                         return getExplicitThisType(node);
-                    case 105 /* SuperKeyword */:
+                    case 106 /* SuperKeyword */:
                         return checkSuperExpression(node);
-                    case 202 /* PropertyAccessExpression */: {
+                    case 204 /* PropertyAccessExpression */: {
                         var type = getTypeOfDottedName(node.expression, diagnostic);
                         if (type) {
                             var name = node.name;
@@ -65737,7 +66914,7 @@
                         }
                         return undefined;
                     }
-                    case 208 /* ParenthesizedExpression */:
+                    case 210 /* ParenthesizedExpression */:
                         return getTypeOfDottedName(node.expression, diagnostic);
                 }
             }
@@ -65751,10 +66928,10 @@
                 // circularities in control flow analysis, we use getTypeOfDottedName when resolving the call
                 // target expression of an assertion.
                 var funcType = void 0;
-                if (node.parent.kind === 234 /* ExpressionStatement */) {
+                if (node.parent.kind === 236 /* ExpressionStatement */) {
                     funcType = getTypeOfDottedName(node.expression, /*diagnostic*/ undefined);
                 }
-                else if (node.expression.kind !== 105 /* SuperKeyword */) {
+                else if (node.expression.kind !== 106 /* SuperKeyword */) {
                     if (ts.isOptionalChain(node)) {
                         funcType = checkNonNullType(getOptionalExpressionType(checkExpression(node.expression), node.expression), node.expression);
                     }
@@ -65795,7 +66972,7 @@
         }
         function isFalseExpression(expr) {
             var node = ts.skipParentheses(expr);
-            return node.kind === 94 /* FalseKeyword */ || node.kind === 217 /* BinaryExpression */ && (node.operatorToken.kind === 55 /* AmpersandAmpersandToken */ && (isFalseExpression(node.left) || isFalseExpression(node.right)) ||
+            return node.kind === 95 /* FalseKeyword */ || node.kind === 219 /* BinaryExpression */ && (node.operatorToken.kind === 55 /* AmpersandAmpersandToken */ && (isFalseExpression(node.left) || isFalseExpression(node.right)) ||
                 node.operatorToken.kind === 56 /* BarBarToken */ && isFalseExpression(node.left) && isFalseExpression(node.right));
         }
         function isReachableFlowNodeWorker(flow, noCacheCheck) {
@@ -65883,7 +67060,7 @@
                     flow = flow.antecedent;
                 }
                 else if (flags & 512 /* Call */) {
-                    if (flow.node.expression.kind === 105 /* SuperKeyword */) {
+                    if (flow.node.expression.kind === 106 /* SuperKeyword */) {
                         return true;
                     }
                     flow = flow.antecedent;
@@ -65910,15 +67087,28 @@
                 }
             }
         }
-        function getFlowTypeOfReference(reference, declaredType, initialType, flowContainer, couldBeUninitialized) {
+        function isConstantReference(node) {
+            switch (node.kind) {
+                case 79 /* Identifier */:
+                    var symbol = getResolvedSymbol(node);
+                    return isConstVariable(symbol) || !!symbol.valueDeclaration && ts.getRootDeclaration(symbol.valueDeclaration).kind === 162 /* Parameter */ && !isParameterAssigned(symbol);
+                case 204 /* PropertyAccessExpression */:
+                case 205 /* ElementAccessExpression */:
+                    // The resolvedSymbol property is initialized by checkPropertyAccess or checkElementAccess before we get here.
+                    return isConstantReference(node.expression) && isReadonlySymbol(getNodeLinks(node).resolvedSymbol || unknownSymbol);
+            }
+            return false;
+        }
+        function getFlowTypeOfReference(reference, declaredType, initialType, flowContainer) {
             if (initialType === void 0) { initialType = declaredType; }
             var key;
             var isKeySet = false;
             var flowDepth = 0;
+            var inlineLevel = 0;
             if (flowAnalysisDisabled) {
                 return errorType;
             }
-            if (!reference.flowNode || !couldBeUninitialized && !(declaredType.flags & 536624127 /* Narrowable */)) {
+            if (!reference.flowNode) {
                 return declaredType;
             }
             flowInvocationCount++;
@@ -65930,7 +67120,7 @@
             // on empty arrays are possible without implicit any errors and new element types can be inferred without
             // type mismatch errors.
             var resultType = ts.getObjectFlags(evolvedType) & 256 /* EvolvingArray */ && isEvolvingArrayOperationTarget(reference) ? autoArrayType : finalizeEvolvingArrayType(evolvedType);
-            if (resultType === unreachableNeverType || reference.parent && reference.parent.kind === 226 /* NonNullExpression */ && !(resultType.flags & 131072 /* Never */) && getTypeWithFacts(resultType, 2097152 /* NEUndefinedOrNull */).flags & 131072 /* Never */) {
+            if (resultType === unreachableNeverType || reference.parent && reference.parent.kind === 228 /* NonNullExpression */ && !(resultType.flags & 131072 /* Never */) && getTypeWithFacts(resultType, 2097152 /* NEUndefinedOrNull */).flags & 131072 /* Never */) {
                 return declaredType;
             }
             return resultType;
@@ -66014,9 +67204,9 @@
                         // Check if we should continue with the control flow of the containing function.
                         var container = flow.node;
                         if (container && container !== flowContainer &&
-                            reference.kind !== 202 /* PropertyAccessExpression */ &&
-                            reference.kind !== 203 /* ElementAccessExpression */ &&
-                            reference.kind !== 107 /* ThisKeyword */) {
+                            reference.kind !== 204 /* PropertyAccessExpression */ &&
+                            reference.kind !== 205 /* ElementAccessExpression */ &&
+                            reference.kind !== 108 /* ThisKeyword */) {
                             flow = container.flowNode;
                             continue;
                         }
@@ -66040,7 +67230,7 @@
             }
             function getInitialOrAssignedType(flow) {
                 var node = flow.node;
-                return getNarrowableTypeForReference(node.kind === 250 /* VariableDeclaration */ || node.kind === 199 /* BindingElement */ ?
+                return getNarrowableTypeForReference(node.kind === 252 /* VariableDeclaration */ || node.kind === 201 /* BindingElement */ ?
                     getInitialType(node) :
                     getAssignedType(node), reference);
             }
@@ -66080,14 +67270,14 @@
                     // in which case we continue control flow analysis back to the function's declaration
                     if (ts.isVariableDeclaration(node) && (ts.isInJSFile(node) || ts.isVarConst(node))) {
                         var init = ts.getDeclaredExpandoInitializer(node);
-                        if (init && (init.kind === 209 /* FunctionExpression */ || init.kind === 210 /* ArrowFunction */)) {
+                        if (init && (init.kind === 211 /* FunctionExpression */ || init.kind === 212 /* ArrowFunction */)) {
                             return getTypeAtFlowNode(flow.antecedent);
                         }
                     }
                     return declaredType;
                 }
                 // for (const _ in ref) acts as a nonnull on ref
-                if (ts.isVariableDeclaration(node) && node.parent.parent.kind === 239 /* ForInStatement */ && isMatchingReference(reference, node.parent.parent.expression)) {
+                if (ts.isVariableDeclaration(node) && node.parent.parent.kind === 241 /* ForInStatement */ && isMatchingReference(reference, node.parent.parent.expression)) {
                     return getNonNullableTypeIfNeeded(getTypeFromFlowType(getTypeAtFlowNode(flow.antecedent)));
                 }
                 // Assignment doesn't affect reference
@@ -66095,10 +67285,10 @@
             }
             function narrowTypeByAssertion(type, expr) {
                 var node = ts.skipParentheses(expr);
-                if (node.kind === 94 /* FalseKeyword */) {
+                if (node.kind === 95 /* FalseKeyword */) {
                     return unreachableNeverType;
                 }
-                if (node.kind === 217 /* BinaryExpression */) {
+                if (node.kind === 219 /* BinaryExpression */) {
                     if (node.operatorToken.kind === 55 /* AmpersandAmpersandToken */) {
                         return narrowTypeByAssertion(narrowTypeByAssertion(type, node.left), node.right);
                     }
@@ -66129,7 +67319,7 @@
             function getTypeAtFlowArrayMutation(flow) {
                 if (declaredType === autoType || declaredType === autoArrayType) {
                     var node = flow.node;
-                    var expr = node.kind === 204 /* CallExpression */ ?
+                    var expr = node.kind === 206 /* CallExpression */ ?
                         node.expression.expression :
                         node.left.expression;
                     if (isMatchingReference(reference, getReferenceCandidate(expr))) {
@@ -66137,7 +67327,7 @@
                         var type = getTypeFromFlowType(flowType);
                         if (ts.getObjectFlags(type) & 256 /* EvolvingArray */) {
                             var evolvedType_1 = type;
-                            if (node.kind === 204 /* CallExpression */) {
+                            if (node.kind === 206 /* CallExpression */) {
                                 for (var _i = 0, _a = node.arguments; _i < _a.length; _i++) {
                                     var arg = _a[_i];
                                     evolvedType_1 = addEvolvingArrayElementType(evolvedType_1, arg);
@@ -66185,7 +67375,7 @@
                 if (isMatchingReference(reference, expr)) {
                     type = narrowTypeBySwitchOnDiscriminant(type, flow.switchStatement, flow.clauseStart, flow.clauseEnd);
                 }
-                else if (expr.kind === 212 /* TypeOfExpression */ && isMatchingReference(reference, expr.expression)) {
+                else if (expr.kind === 214 /* TypeOfExpression */ && isMatchingReference(reference, expr.expression)) {
                     type = narrowBySwitchOnTypeOf(type, flow.switchStatement, flow.clauseStart, flow.clauseEnd);
                 }
                 else {
@@ -66193,12 +67383,13 @@
                         if (optionalChainContainsReference(expr, reference)) {
                             type = narrowTypeBySwitchOptionalChainContainment(type, flow.switchStatement, flow.clauseStart, flow.clauseEnd, function (t) { return !(t.flags & (32768 /* Undefined */ | 131072 /* Never */)); });
                         }
-                        else if (expr.kind === 212 /* TypeOfExpression */ && optionalChainContainsReference(expr.expression, reference)) {
+                        else if (expr.kind === 214 /* TypeOfExpression */ && optionalChainContainsReference(expr.expression, reference)) {
                             type = narrowTypeBySwitchOptionalChainContainment(type, flow.switchStatement, flow.clauseStart, flow.clauseEnd, function (t) { return !(t.flags & 131072 /* Never */ || t.flags & 128 /* StringLiteral */ && t.value === "undefined"); });
                         }
                     }
-                    if (isMatchingReferenceDiscriminant(expr, type)) {
-                        type = narrowTypeBySwitchOnDiscriminantProperty(type, expr, flow.switchStatement, flow.clauseStart, flow.clauseEnd);
+                    var access = getDiscriminantPropertyAccess(expr, type);
+                    if (access) {
+                        type = narrowTypeBySwitchOnDiscriminantProperty(type, access, flow.switchStatement, flow.clauseStart, flow.clauseEnd);
                     }
                 }
                 return createFlowType(type, isIncomplete(flowType));
@@ -66353,16 +67544,13 @@
                 }
                 return result;
             }
-            function isMatchingReferenceDiscriminant(expr, computedType) {
+            function getDiscriminantPropertyAccess(expr, computedType) {
+                var access, name;
                 var type = declaredType.flags & 1048576 /* Union */ ? declaredType : computedType;
-                if (!(type.flags & 1048576 /* Union */) || !ts.isAccessExpression(expr)) {
-                    return false;
-                }
-                var name = getAccessedPropertyName(expr);
-                if (name === undefined) {
-                    return false;
-                }
-                return isMatchingReference(reference, expr.expression) && isDiscriminantProperty(type, name);
+                return type.flags & 1048576 /* Union */ && (access = getPropertyAccess(expr)) && (name = getAccessedPropertyName(access)) &&
+                    isMatchingReference(reference, ts.isAccessExpression(access) ? access.expression : access.parent.parent.initializer) &&
+                    isDiscriminantProperty(type, name) ?
+                    access : undefined;
             }
             function narrowTypeByDiscriminant(type, access, narrowType) {
                 var propName = getAccessedPropertyName(access);
@@ -66385,10 +67573,10 @@
                 if ((operator === 36 /* EqualsEqualsEqualsToken */ || operator === 37 /* ExclamationEqualsEqualsToken */) && type.flags & 1048576 /* Union */) {
                     var keyPropertyName = getKeyPropertyName(type);
                     if (keyPropertyName && keyPropertyName === getAccessedPropertyName(access)) {
-                        var candidate_2 = getConstituentTypeForKeyType(type, getTypeOfExpression(value));
-                        if (candidate_2) {
-                            return operator === (assumeTrue ? 36 /* EqualsEqualsEqualsToken */ : 37 /* ExclamationEqualsEqualsToken */) ? candidate_2 :
-                                isUnitType(getTypeOfPropertyOfType(candidate_2, keyPropertyName) || unknownType) ? filterType(type, function (t) { return t !== candidate_2; }) :
+                        var candidate = getConstituentTypeForKeyType(type, getTypeOfExpression(value));
+                        if (candidate) {
+                            return operator === (assumeTrue ? 36 /* EqualsEqualsEqualsToken */ : 37 /* ExclamationEqualsEqualsToken */) ? candidate :
+                                isUnitType(getTypeOfPropertyOfType(candidate, keyPropertyName) || unknownType) ? removeType(type, candidate) :
                                     type;
                         }
                     }
@@ -66412,37 +67600,34 @@
                 if (strictNullChecks && assumeTrue && optionalChainContainsReference(expr, reference)) {
                     type = getTypeWithFacts(type, 2097152 /* NEUndefinedOrNull */);
                 }
-                if (isMatchingReferenceDiscriminant(expr, type)) {
-                    return narrowTypeByDiscriminant(type, expr, function (t) { return getTypeWithFacts(t, assumeTrue ? 4194304 /* Truthy */ : 8388608 /* Falsy */); });
+                var access = getDiscriminantPropertyAccess(expr, type);
+                if (access) {
+                    return narrowTypeByDiscriminant(type, access, function (t) { return getTypeWithFacts(t, assumeTrue ? 4194304 /* Truthy */ : 8388608 /* Falsy */); });
                 }
                 return type;
             }
             function isTypePresencePossible(type, propName, assumeTrue) {
-                if (getIndexInfoOfType(type, 0 /* String */)) {
-                    return true;
-                }
                 var prop = getPropertyOfType(type, propName);
                 if (prop) {
                     return prop.flags & 16777216 /* Optional */ ? true : assumeTrue;
                 }
-                return !assumeTrue;
+                return getApplicableIndexInfoForName(type, propName) ? true : !assumeTrue;
             }
-            function narrowByInKeyword(type, literal, assumeTrue) {
+            function narrowByInKeyword(type, name, assumeTrue) {
                 if (type.flags & 1048576 /* Union */
                     || type.flags & 524288 /* Object */ && declaredType !== type
                     || isThisTypeParameter(type)
                     || type.flags & 2097152 /* Intersection */ && ts.every(type.types, function (t) { return t.symbol !== globalThisSymbol; })) {
-                    var propName_1 = ts.escapeLeadingUnderscores(literal.text);
-                    return filterType(type, function (t) { return isTypePresencePossible(t, propName_1, assumeTrue); });
+                    return filterType(type, function (t) { return isTypePresencePossible(t, name, assumeTrue); });
                 }
                 return type;
             }
             function narrowTypeByBinaryExpression(type, expr, assumeTrue) {
                 switch (expr.operatorToken.kind) {
-                    case 62 /* EqualsToken */:
-                    case 74 /* BarBarEqualsToken */:
-                    case 75 /* AmpersandAmpersandEqualsToken */:
-                    case 76 /* QuestionQuestionEqualsToken */:
+                    case 63 /* EqualsToken */:
+                    case 75 /* BarBarEqualsToken */:
+                    case 76 /* AmpersandAmpersandEqualsToken */:
+                    case 77 /* QuestionQuestionEqualsToken */:
                         return narrowTypeByTruthiness(narrowType(type, expr.right, assumeTrue), expr.left, assumeTrue);
                     case 34 /* EqualsEqualsToken */:
                     case 35 /* ExclamationEqualsToken */:
@@ -66451,10 +67636,10 @@
                         var operator = expr.operatorToken.kind;
                         var left = getReferenceCandidate(expr.left);
                         var right = getReferenceCandidate(expr.right);
-                        if (left.kind === 212 /* TypeOfExpression */ && ts.isStringLiteralLike(right)) {
+                        if (left.kind === 214 /* TypeOfExpression */ && ts.isStringLiteralLike(right)) {
                             return narrowTypeByTypeof(type, left, operator, right, assumeTrue);
                         }
-                        if (right.kind === 212 /* TypeOfExpression */ && ts.isStringLiteralLike(left)) {
+                        if (right.kind === 214 /* TypeOfExpression */ && ts.isStringLiteralLike(left)) {
                             return narrowTypeByTypeof(type, right, operator, left, assumeTrue);
                         }
                         if (isMatchingReference(reference, left)) {
@@ -66471,11 +67656,13 @@
                                 type = narrowTypeByOptionalChainContainment(type, operator, left, assumeTrue);
                             }
                         }
-                        if (isMatchingReferenceDiscriminant(left, type)) {
-                            return narrowTypeByDiscriminantProperty(type, left, operator, right, assumeTrue);
+                        var leftAccess = getDiscriminantPropertyAccess(left, type);
+                        if (leftAccess) {
+                            return narrowTypeByDiscriminantProperty(type, leftAccess, operator, right, assumeTrue);
                         }
-                        if (isMatchingReferenceDiscriminant(right, type)) {
-                            return narrowTypeByDiscriminantProperty(type, right, operator, left, assumeTrue);
+                        var rightAccess = getDiscriminantPropertyAccess(right, type);
+                        if (rightAccess) {
+                            return narrowTypeByDiscriminantProperty(type, rightAccess, operator, left, assumeTrue);
                         }
                         if (isMatchingConstructorReference(left)) {
                             return narrowTypeByConstructor(type, operator, right, assumeTrue);
@@ -66484,16 +67671,35 @@
                             return narrowTypeByConstructor(type, operator, left, assumeTrue);
                         }
                         break;
-                    case 101 /* InstanceOfKeyword */:
+                    case 102 /* InstanceOfKeyword */:
                         return narrowTypeByInstanceof(type, expr, assumeTrue);
-                    case 100 /* InKeyword */:
+                    case 101 /* InKeyword */:
                         var target = getReferenceCandidate(expr.right);
-                        if (ts.isStringLiteralLike(expr.left) && isMatchingReference(reference, target)) {
-                            return narrowByInKeyword(type, expr.left, assumeTrue);
+                        var leftType = getTypeOfNode(expr.left);
+                        if (leftType.flags & 128 /* StringLiteral */) {
+                            var name = ts.escapeLeadingUnderscores(leftType.value);
+                            if (containsMissingType(type) && ts.isAccessExpression(reference) && isMatchingReference(reference.expression, target) &&
+                                getAccessedPropertyName(reference) === name) {
+                                return getTypeWithFacts(type, assumeTrue ? 524288 /* NEUndefined */ : 65536 /* EQUndefined */);
+                            }
+                            if (isMatchingReference(reference, target)) {
+                                return narrowByInKeyword(type, name, assumeTrue);
+                            }
                         }
                         break;
                     case 27 /* CommaToken */:
                         return narrowType(type, expr.right, assumeTrue);
+                    // Ordinarily we won't see && and || expressions in control flow analysis because the Binder breaks those
+                    // expressions down to individual conditional control flows. However, we may encounter them when analyzing
+                    // aliased conditional expressions.
+                    case 55 /* AmpersandAmpersandToken */:
+                        return assumeTrue ?
+                            narrowType(narrowType(type, expr.left, /*assumeTrue*/ true), expr.right, /*assumeTrue*/ true) :
+                            getUnionType([narrowType(type, expr.left, /*assumeTrue*/ false), narrowType(type, expr.right, /*assumeTrue*/ false)]);
+                    case 56 /* BarBarToken */:
+                        return assumeTrue ?
+                            getUnionType([narrowType(type, expr.left, /*assumeTrue*/ true), narrowType(type, expr.right, /*assumeTrue*/ true)]) :
+                            narrowType(narrowType(type, expr.left, /*assumeTrue*/ false), expr.right, /*assumeTrue*/ false);
                 }
                 return type;
             }
@@ -66573,7 +67779,7 @@
                 if (assumeTrue && type.flags & 2 /* Unknown */ && literal.text === "object") {
                     // The pattern x && typeof x === 'object', where x is of type unknown, narrows x to type object. We don't
                     // need to check for the reverse typeof x === 'object' && x since that already narrows correctly.
-                    if (typeOfExpr.parent.parent.kind === 217 /* BinaryExpression */) {
+                    if (typeOfExpr.parent.parent.kind === 219 /* BinaryExpression */) {
                         var expr = typeOfExpr.parent.parent;
                         if (expr.operatorToken.kind === 55 /* AmpersandAmpersandToken */ && expr.right === typeOfExpr.parent && containsTruthyCheck(reference, expr.left)) {
                             return nonPrimitiveType;
@@ -66848,6 +68054,16 @@
                         return narrowTypeByTypePredicate(type, predicate, callExpression, assumeTrue);
                     }
                 }
+                if (containsMissingType(type) && ts.isAccessExpression(reference) && ts.isPropertyAccessExpression(callExpression.expression)) {
+                    var callAccess = callExpression.expression;
+                    if (isMatchingReference(reference.expression, getReferenceCandidate(callAccess.expression)) &&
+                        ts.isIdentifier(callAccess.name) && callAccess.name.escapedText === "hasOwnProperty" && callExpression.arguments.length === 1) {
+                        var argument = callExpression.arguments[0];
+                        if (ts.isStringLiteralLike(argument) && getAccessedPropertyName(reference) === ts.escapeLeadingUnderscores(argument.text)) {
+                            return getTypeWithFacts(type, assumeTrue ? 524288 /* NEUndefined */ : 65536 /* EQUndefined */);
+                        }
+                    }
+                }
                 return type;
             }
             function narrowTypeByTypePredicate(type, predicate, callExpression, assumeTrue) {
@@ -66862,8 +68078,9 @@
                             !(getTypeFacts(predicate.type) & 65536 /* EQUndefined */)) {
                             type = getTypeWithFacts(type, 2097152 /* NEUndefinedOrNull */);
                         }
-                        if (isMatchingReferenceDiscriminant(predicateArgument, type)) {
-                            return narrowTypeByDiscriminant(type, predicateArgument, function (t) { return getNarrowedType(t, predicate.type, assumeTrue, isTypeSubtypeOf); });
+                        var access = getDiscriminantPropertyAccess(predicateArgument, type);
+                        if (access) {
+                            return narrowTypeByDiscriminant(type, access, function (t) { return getNarrowedType(t, predicate.type, assumeTrue, isTypeSubtypeOf); });
                         }
                     }
                 }
@@ -66878,20 +68095,35 @@
                     return narrowTypeByOptionality(type, expr, assumeTrue);
                 }
                 switch (expr.kind) {
-                    case 78 /* Identifier */:
-                    case 107 /* ThisKeyword */:
-                    case 105 /* SuperKeyword */:
-                    case 202 /* PropertyAccessExpression */:
-                    case 203 /* ElementAccessExpression */:
+                    case 79 /* Identifier */:
+                        // When narrowing a reference to a const variable, non-assigned parameter, or readonly property, we inline
+                        // up to five levels of aliased conditional expressions that are themselves declared as const variables.
+                        if (!isMatchingReference(reference, expr) && inlineLevel < 5) {
+                            var symbol = getResolvedSymbol(expr);
+                            if (isConstVariable(symbol)) {
+                                var declaration = symbol.valueDeclaration;
+                                if (declaration && ts.isVariableDeclaration(declaration) && !declaration.type && declaration.initializer && isConstantReference(reference)) {
+                                    inlineLevel++;
+                                    var result = narrowType(type, declaration.initializer, assumeTrue);
+                                    inlineLevel--;
+                                    return result;
+                                }
+                            }
+                        }
+                    // falls through
+                    case 108 /* ThisKeyword */:
+                    case 106 /* SuperKeyword */:
+                    case 204 /* PropertyAccessExpression */:
+                    case 205 /* ElementAccessExpression */:
                         return narrowTypeByTruthiness(type, expr, assumeTrue);
-                    case 204 /* CallExpression */:
+                    case 206 /* CallExpression */:
                         return narrowTypeByCallExpression(type, expr, assumeTrue);
-                    case 208 /* ParenthesizedExpression */:
-                    case 226 /* NonNullExpression */:
+                    case 210 /* ParenthesizedExpression */:
+                    case 228 /* NonNullExpression */:
                         return narrowType(type, expr.expression, assumeTrue);
-                    case 217 /* BinaryExpression */:
+                    case 219 /* BinaryExpression */:
                         return narrowTypeByBinaryExpression(type, expr, assumeTrue);
-                    case 215 /* PrefixUnaryExpression */:
+                    case 217 /* PrefixUnaryExpression */:
                         if (expr.operator === 53 /* ExclamationToken */) {
                             return narrowType(type, expr.operand, !assumeTrue);
                         }
@@ -66903,8 +68135,9 @@
                 if (isMatchingReference(reference, expr)) {
                     return getTypeWithFacts(type, assumePresent ? 2097152 /* NEUndefinedOrNull */ : 262144 /* EQUndefinedOrNull */);
                 }
-                if (isMatchingReferenceDiscriminant(expr, type)) {
-                    return narrowTypeByDiscriminant(type, expr, function (t) { return getTypeWithFacts(t, assumePresent ? 2097152 /* NEUndefinedOrNull */ : 262144 /* EQUndefinedOrNull */); });
+                var access = getDiscriminantPropertyAccess(expr, type);
+                if (access) {
+                    return narrowTypeByDiscriminant(type, access, function (t) { return getTypeWithFacts(t, assumePresent ? 2097152 /* NEUndefinedOrNull */ : 262144 /* EQUndefinedOrNull */); });
                 }
                 return type;
             }
@@ -66915,7 +68148,7 @@
             // an dotted name expression, and if the location is not an assignment target, obtain the type
             // of the expression (which will reflect control flow analysis). If the expression indeed
             // resolved to the given symbol, return the narrowed type.
-            if (location.kind === 78 /* Identifier */ || location.kind === 79 /* PrivateIdentifier */) {
+            if (location.kind === 79 /* Identifier */ || location.kind === 80 /* PrivateIdentifier */) {
                 if (ts.isRightSideOfQualifiedNameOrPropertyAccess(location)) {
                     location = location.parent;
                 }
@@ -66934,14 +68167,14 @@
             // to it at the given location. Since we have no control flow information for the
             // hypothetical reference (control flow information is created and attached by the
             // binder), we simply return the declared type of the symbol.
-            return getTypeOfSymbol(symbol);
+            return getNonMissingTypeOfSymbol(symbol);
         }
         function getControlFlowContainer(node) {
             return ts.findAncestor(node.parent, function (node) {
                 return ts.isFunctionLike(node) && !ts.getImmediatelyInvokedFunctionExpression(node) ||
-                    node.kind === 258 /* ModuleBlock */ ||
-                    node.kind === 298 /* SourceFile */ ||
-                    node.kind === 164 /* PropertyDeclaration */;
+                    node.kind === 260 /* ModuleBlock */ ||
+                    node.kind === 300 /* SourceFile */ ||
+                    node.kind === 165 /* PropertyDeclaration */;
             });
         }
         // Check if a parameter is assigned anywhere within its declaring function.
@@ -66963,10 +68196,10 @@
             return !!ts.findAncestor(node.parent, function (node) { return ts.isFunctionLike(node) && !!(getNodeLinks(node).flags & 8388608 /* AssignmentsMarked */); });
         }
         function markParameterAssignments(node) {
-            if (node.kind === 78 /* Identifier */) {
+            if (node.kind === 79 /* Identifier */) {
                 if (ts.isAssignmentTarget(node)) {
                     var symbol = getResolvedSymbol(node);
-                    if (symbol.valueDeclaration && ts.getRootDeclaration(symbol.valueDeclaration).kind === 161 /* Parameter */) {
+                    if (symbol.valueDeclaration && ts.getRootDeclaration(symbol.valueDeclaration).kind === 162 /* Parameter */) {
                         symbol.isAssigned = true;
                     }
                 }
@@ -66976,13 +68209,13 @@
             }
         }
         function isConstVariable(symbol) {
-            return symbol.flags & 3 /* Variable */ && (getDeclarationNodeFlagsFromSymbol(symbol) & 2 /* Const */) !== 0 && getTypeOfSymbol(symbol) !== autoArrayType;
+            return symbol.flags & 3 /* Variable */ && (getDeclarationNodeFlagsFromSymbol(symbol) & 2 /* Const */) !== 0;
         }
         /** remove undefined from the annotated type of a parameter when there is an initializer (that doesn't include undefined) */
         function removeOptionalityFromDeclaredType(declaredType, declaration) {
             if (pushTypeResolution(declaration.symbol, 2 /* DeclaredType */)) {
                 var annotationIncludesUndefined = strictNullChecks &&
-                    declaration.kind === 161 /* Parameter */ &&
+                    declaration.kind === 162 /* Parameter */ &&
                     declaration.initializer &&
                     getFalsyFlags(declaredType) & 32768 /* Undefined */ &&
                     !(getFalsyFlags(checkExpression(declaration.initializer)) & 32768 /* Undefined */);
@@ -66994,29 +68227,29 @@
                 return declaredType;
             }
         }
-        function isConstraintPosition(node) {
+        function isConstraintPosition(type, node) {
             var parent = node.parent;
-            // In an element access obj[x], we consider obj to be in a constraint position only when x is not
-            // of a generic type. This is because when both obj and x are of generic types T and K, we want
-            // the resulting type to be T[K].
-            return parent.kind === 202 /* PropertyAccessExpression */ ||
-                parent.kind === 204 /* CallExpression */ && parent.expression === node ||
-                parent.kind === 203 /* ElementAccessExpression */ && parent.expression === node &&
-                    !isGenericIndexType(getTypeOfExpression(parent.argumentExpression));
+            // In an element access obj[x], we consider obj to be in a constraint position, except when obj is of
+            // a generic type without a nullable constraint and x is a generic type. This is because when both obj
+            // and x are of generic types T and K, we want the resulting type to be T[K].
+            return parent.kind === 204 /* PropertyAccessExpression */ ||
+                parent.kind === 206 /* CallExpression */ && parent.expression === node ||
+                parent.kind === 205 /* ElementAccessExpression */ && parent.expression === node &&
+                    !(isGenericTypeWithoutNullableConstraint(type) && isGenericIndexType(getTypeOfExpression(parent.argumentExpression)));
         }
         function isGenericTypeWithUnionConstraint(type) {
             return !!(type.flags & 465829888 /* Instantiable */ && getBaseConstraintOrType(type).flags & (98304 /* Nullable */ | 1048576 /* Union */));
         }
-        function containsGenericType(type) {
-            return !!(type.flags & 465829888 /* Instantiable */ || type.flags & 3145728 /* UnionOrIntersection */ && ts.some(type.types, containsGenericType));
+        function isGenericTypeWithoutNullableConstraint(type) {
+            return !!(type.flags & 465829888 /* Instantiable */ && !maybeTypeOfKind(getBaseConstraintOrType(type), 98304 /* Nullable */));
         }
-        function hasContextualTypeWithNoGenericTypes(node) {
+        function hasNonBindingPatternContextualTypeWithNoGenericTypes(node) {
             // Computing the contextual type for a child of a JSX element involves resolving the type of the
             // element's tag name, so we exclude that here to avoid circularities.
             var contextualType = (ts.isIdentifier(node) || ts.isPropertyAccessExpression(node) || ts.isElementAccessExpression(node)) &&
                 !((ts.isJsxOpeningElement(node.parent) || ts.isJsxSelfClosingElement(node.parent)) && node.parent.tagName === node) &&
-                getContextualType(node);
-            return contextualType && !someType(contextualType, containsGenericType);
+                getContextualType(node, 8 /* SkipBindingPatterns */);
+            return contextualType && !isGenericType(contextualType);
         }
         function getNarrowableTypeForReference(type, reference, checkMode) {
             // When the type of a reference is or contains an instantiable type with a union type constraint, and
@@ -67028,7 +68261,7 @@
             // 'string | undefined' to give control flow analysis the opportunity to narrow to type 'string'.
             var substituteConstraints = !(checkMode && checkMode & 2 /* Inferential */) &&
                 someType(type, isGenericTypeWithUnionConstraint) &&
-                (isConstraintPosition(reference) || hasContextualTypeWithNoGenericTypes(reference));
+                (isConstraintPosition(type, reference) || hasNonBindingPatternContextualTypeWithNoGenericTypes(reference));
             return substituteConstraints ? mapType(type, function (t) { return t.flags & 465829888 /* Instantiable */ ? getBaseConstraintOrType(t) : t; }) : type;
         }
         function isExportOrExportExpression(location) {
@@ -67064,9 +68297,13 @@
             // To avoid that we will give an error to users if they use arguments objects in arrow function so that they
             // can explicitly bound arguments objects
             if (symbol === argumentsSymbol) {
+                if (isInPropertyInitializerOrClassStaticBlock(node)) {
+                    error(node, ts.Diagnostics.arguments_cannot_be_referenced_in_property_initializers);
+                    return errorType;
+                }
                 var container = ts.getContainingFunction(node);
                 if (languageVersion < 2 /* ES2015 */) {
-                    if (container.kind === 210 /* ArrowFunction */) {
+                    if (container.kind === 212 /* ArrowFunction */) {
                         error(node, ts.Diagnostics.The_arguments_object_cannot_be_referenced_in_an_arrow_function_in_ES3_and_ES5_Consider_using_a_standard_function_expression);
                     }
                     else if (ts.hasSyntacticModifier(container, 256 /* Async */)) {
@@ -67091,7 +68328,7 @@
                 // Due to the emit for class decorators, any reference to the class from inside of the class body
                 // must instead be rewritten to point to a temporary variable to avoid issues with the double-bind
                 // behavior of class names in ES6.
-                if (declaration.kind === 253 /* ClassDeclaration */
+                if (declaration.kind === 255 /* ClassDeclaration */
                     && ts.nodeIsDecorated(declaration)) {
                     var container = ts.getContainingClass(node);
                     while (container !== undefined) {
@@ -67103,14 +68340,14 @@
                         container = ts.getContainingClass(container);
                     }
                 }
-                else if (declaration.kind === 222 /* ClassExpression */) {
+                else if (declaration.kind === 224 /* ClassExpression */) {
                     // When we emit a class expression with static members that contain a reference
                     // to the constructor in the initializer, we will need to substitute that
                     // binding with an alias as the class name is not in scope.
                     var container = ts.getThisContainer(node, /*includeArrowFunctions*/ false);
-                    while (container.kind !== 298 /* SourceFile */) {
+                    while (container.kind !== 300 /* SourceFile */) {
                         if (container.parent === declaration) {
-                            if (container.kind === 164 /* PropertyDeclaration */ && ts.hasSyntacticModifier(container, 32 /* Static */)) {
+                            if (ts.isPropertyDeclaration(container) && ts.isStatic(container) || ts.isClassStaticBlockDeclaration(container)) {
                                 getNodeLinks(declaration).flags |= 16777216 /* ClassWithConstructorReference */;
                                 getNodeLinks(node).flags |= 33554432 /* ConstructorReferenceInClass */;
                             }
@@ -67166,7 +68403,7 @@
             // The declaration container is the innermost function that encloses the declaration of the variable
             // or parameter. The flow container is the innermost function starting with which we analyze the control
             // flow graph to determine the control flow based type.
-            var isParameter = ts.getRootDeclaration(declaration).kind === 161 /* Parameter */;
+            var isParameter = ts.getRootDeclaration(declaration).kind === 162 /* Parameter */;
             var declarationContainer = getControlFlowContainer(declaration);
             var flowContainer = getControlFlowContainer(node);
             var isOuterVariable = flowContainer !== declarationContainer;
@@ -67175,9 +68412,9 @@
             // When the control flow originates in a function expression or arrow function and we are referencing
             // a const variable or parameter from an outer function, we extend the origin of the control flow
             // analysis to include the immediately enclosing function.
-            while (flowContainer !== declarationContainer && (flowContainer.kind === 209 /* FunctionExpression */ ||
-                flowContainer.kind === 210 /* ArrowFunction */ || ts.isObjectLiteralOrClassExpressionMethod(flowContainer)) &&
-                (isConstVariable(localOrExportSymbol) || isParameter && !isParameterAssigned(localOrExportSymbol))) {
+            while (flowContainer !== declarationContainer && (flowContainer.kind === 211 /* FunctionExpression */ ||
+                flowContainer.kind === 212 /* ArrowFunction */ || ts.isObjectLiteralOrClassExpressionMethod(flowContainer)) &&
+                (isConstVariable(localOrExportSymbol) && type !== autoArrayType || isParameter && !isParameterAssigned(localOrExportSymbol))) {
                 flowContainer = getControlFlowContainer(flowContainer);
             }
             // We only look for uninitialized variables in strict null checking mode, and only when we can analyze
@@ -67185,14 +68422,14 @@
             // declaration container are the same).
             var assumeInitialized = isParameter || isAlias || isOuterVariable || isSpreadDestructuringAssignmentTarget || isModuleExports || ts.isBindingElement(declaration) ||
                 type !== autoType && type !== autoArrayType && (!strictNullChecks || (type.flags & (3 /* AnyOrUnknown */ | 16384 /* Void */)) !== 0 ||
-                    isInTypeQuery(node) || node.parent.kind === 271 /* ExportSpecifier */) ||
-                node.parent.kind === 226 /* NonNullExpression */ ||
-                declaration.kind === 250 /* VariableDeclaration */ && declaration.exclamationToken ||
+                    isInTypeQuery(node) || node.parent.kind === 273 /* ExportSpecifier */) ||
+                node.parent.kind === 228 /* NonNullExpression */ ||
+                declaration.kind === 252 /* VariableDeclaration */ && declaration.exclamationToken ||
                 declaration.flags & 8388608 /* Ambient */;
             var initialType = assumeInitialized ? (isParameter ? removeOptionalityFromDeclaredType(type, declaration) : type) :
                 type === autoType || type === autoArrayType ? undefinedType :
                     getOptionalType(type);
-            var flowType = getFlowTypeOfReference(node, type, initialType, flowContainer, !assumeInitialized);
+            var flowType = getFlowTypeOfReference(node, type, initialType, flowContainer);
             // A variable is considered uninitialized when it is possible to analyze the entire control flow graph
             // from declaration to use, and when the variable's declared type doesn't include undefined but the
             // control flow based type does include undefined.
@@ -67226,7 +68463,7 @@
                 (symbol.flags & (2 /* BlockScopedVariable */ | 32 /* Class */)) === 0 ||
                 !symbol.valueDeclaration ||
                 ts.isSourceFile(symbol.valueDeclaration) ||
-                symbol.valueDeclaration.parent.kind === 288 /* CatchClause */) {
+                symbol.valueDeclaration.parent.kind === 290 /* CatchClause */) {
                 return;
             }
             // 1. walk from the use site up to the declaration and check
@@ -67241,7 +68478,7 @@
                     // mark iteration statement as containing block-scoped binding captured in some function
                     var capturesBlockScopeBindingInLoopBody = true;
                     if (ts.isForStatement(container)) {
-                        var varDeclList = ts.getAncestor(symbol.valueDeclaration, 251 /* VariableDeclarationList */);
+                        var varDeclList = ts.getAncestor(symbol.valueDeclaration, 253 /* VariableDeclarationList */);
                         if (varDeclList && varDeclList.parent === container) {
                             var part = getPartOfForStatementContainingNode(node.parent, container);
                             if (part) {
@@ -67262,7 +68499,7 @@
                 // mark variables that are declared in loop initializer and reassigned inside the body of ForStatement.
                 // if body of ForStatement will be converted to function then we'll need a extra machinery to propagate reassigned values back.
                 if (ts.isForStatement(container)) {
-                    var varDeclList = ts.getAncestor(symbol.valueDeclaration, 251 /* VariableDeclarationList */);
+                    var varDeclList = ts.getAncestor(symbol.valueDeclaration, 253 /* VariableDeclarationList */);
                     if (varDeclList && varDeclList.parent === container && isAssignedInBodyOfForStatement(node, container)) {
                         getNodeLinks(symbol.valueDeclaration).flags |= 4194304 /* NeedsLoopOutParameter */;
                     }
@@ -67281,7 +68518,7 @@
         function isAssignedInBodyOfForStatement(node, container) {
             // skip parenthesized nodes
             var current = node;
-            while (current.parent.kind === 208 /* ParenthesizedExpression */) {
+            while (current.parent.kind === 210 /* ParenthesizedExpression */) {
                 current = current.parent;
             }
             // check if node is used as LHS in some assignment expression
@@ -67289,7 +68526,7 @@
             if (ts.isAssignmentTarget(current)) {
                 isAssigned = true;
             }
-            else if ((current.parent.kind === 215 /* PrefixUnaryExpression */ || current.parent.kind === 216 /* PostfixUnaryExpression */)) {
+            else if ((current.parent.kind === 217 /* PrefixUnaryExpression */ || current.parent.kind === 218 /* PostfixUnaryExpression */)) {
                 var expr = current.parent;
                 isAssigned = expr.operator === 45 /* PlusPlusToken */ || expr.operator === 46 /* MinusMinusToken */;
             }
@@ -67302,7 +68539,7 @@
         }
         function captureLexicalThis(node, container) {
             getNodeLinks(node).flags |= 2 /* LexicalThis */;
-            if (container.kind === 164 /* PropertyDeclaration */ || container.kind === 167 /* Constructor */) {
+            if (container.kind === 165 /* PropertyDeclaration */ || container.kind === 169 /* Constructor */) {
                 var classNode = container.parent;
                 getNodeLinks(classNode).flags |= 4 /* CaptureThis */;
             }
@@ -67337,47 +68574,48 @@
                 }
             }
         }
+        function checkThisInStaticClassFieldInitializerInDecoratedClass(thisExpression, container) {
+            if (ts.isPropertyDeclaration(container) && ts.hasStaticModifier(container) &&
+                container.initializer && ts.textRangeContainsPositionInclusive(container.initializer, thisExpression.pos) && ts.length(container.parent.decorators)) {
+                error(thisExpression, ts.Diagnostics.Cannot_use_this_in_a_static_property_initializer_of_a_decorated_class);
+            }
+        }
         function checkThisExpression(node) {
+            var isNodeInTypeQuery = isInTypeQuery(node);
             // Stop at the first arrow function so that we can
             // tell whether 'this' needs to be captured.
             var container = ts.getThisContainer(node, /* includeArrowFunctions */ true);
             var capturedByArrowFunction = false;
-            if (container.kind === 167 /* Constructor */) {
+            if (container.kind === 169 /* Constructor */) {
                 checkThisBeforeSuper(node, container, ts.Diagnostics.super_must_be_called_before_accessing_this_in_the_constructor_of_a_derived_class);
             }
             // Now skip arrow functions to get the "real" owner of 'this'.
-            if (container.kind === 210 /* ArrowFunction */) {
+            if (container.kind === 212 /* ArrowFunction */) {
                 container = ts.getThisContainer(container, /* includeArrowFunctions */ false);
                 capturedByArrowFunction = true;
             }
+            checkThisInStaticClassFieldInitializerInDecoratedClass(node, container);
             switch (container.kind) {
-                case 257 /* ModuleDeclaration */:
+                case 259 /* ModuleDeclaration */:
                     error(node, ts.Diagnostics.this_cannot_be_referenced_in_a_module_or_namespace_body);
                     // do not return here so in case if lexical this is captured - it will be reflected in flags on NodeLinks
                     break;
-                case 256 /* EnumDeclaration */:
+                case 258 /* EnumDeclaration */:
                     error(node, ts.Diagnostics.this_cannot_be_referenced_in_current_location);
                     // do not return here so in case if lexical this is captured - it will be reflected in flags on NodeLinks
                     break;
-                case 167 /* Constructor */:
+                case 169 /* Constructor */:
                     if (isInConstructorArgumentInitializer(node, container)) {
                         error(node, ts.Diagnostics.this_cannot_be_referenced_in_constructor_arguments);
                         // do not return here so in case if lexical this is captured - it will be reflected in flags on NodeLinks
                     }
                     break;
-                case 164 /* PropertyDeclaration */:
-                case 163 /* PropertySignature */:
-                    if (ts.hasSyntacticModifier(container, 32 /* Static */) && !(compilerOptions.target === 99 /* ESNext */ && useDefineForClassFields)) {
-                        error(node, ts.Diagnostics.this_cannot_be_referenced_in_a_static_property_initializer);
-                        // do not return here so in case if lexical this is captured - it will be reflected in flags on NodeLinks
-                    }
-                    break;
-                case 159 /* ComputedPropertyName */:
+                case 160 /* ComputedPropertyName */:
                     error(node, ts.Diagnostics.this_cannot_be_referenced_in_a_computed_property_name);
                     break;
             }
             // When targeting es6, mark that we'll need to capture `this` in its lexically bound scope.
-            if (capturedByArrowFunction && languageVersion < 2 /* ES2015 */) {
+            if (!isNodeInTypeQuery && capturedByArrowFunction && languageVersion < 2 /* ES2015 */) {
                 captureLexicalThis(node, container);
             }
             var type = tryGetThisTypeAt(node, /*includeGlobalThis*/ true, container);
@@ -67427,7 +68665,7 @@
             }
             if (ts.isClassLike(container.parent)) {
                 var symbol = getSymbolOfNode(container.parent);
-                var type = ts.hasSyntacticModifier(container, 32 /* Static */) ? getTypeOfSymbol(symbol) : getDeclaredTypeOfSymbol(symbol).thisType;
+                var type = ts.isStatic(container) ? getTypeOfSymbol(symbol) : getDeclaredTypeOfSymbol(symbol).thisType;
                 return getFlowTypeOfReference(node, type);
             }
             if (ts.isSourceFile(container)) {
@@ -67455,12 +68693,12 @@
             }
             if (ts.isClassLike(container.parent)) {
                 var symbol = getSymbolOfNode(container.parent);
-                return ts.hasSyntacticModifier(container, 32 /* Static */) ? getTypeOfSymbol(symbol) : getDeclaredTypeOfSymbol(symbol).thisType;
+                return ts.isStatic(container) ? getTypeOfSymbol(symbol) : getDeclaredTypeOfSymbol(symbol).thisType;
             }
         }
         function getClassNameFromPrototypeMethod(container) {
             // Check if it's the RHS of a x.prototype.y = function [name]() { .... }
-            if (container.kind === 209 /* FunctionExpression */ &&
+            if (container.kind === 211 /* FunctionExpression */ &&
                 ts.isBinaryExpression(container.parent) &&
                 ts.getAssignmentDeclarationKind(container.parent) === 3 /* PrototypeProperty */) {
                 // Get the 'x' of 'x.prototype.y = container'
@@ -67470,16 +68708,16 @@
                     .expression; // x
             }
             // x.prototype = { method() { } }
-            else if (container.kind === 166 /* MethodDeclaration */ &&
-                container.parent.kind === 201 /* ObjectLiteralExpression */ &&
+            else if (container.kind === 167 /* MethodDeclaration */ &&
+                container.parent.kind === 203 /* ObjectLiteralExpression */ &&
                 ts.isBinaryExpression(container.parent.parent) &&
                 ts.getAssignmentDeclarationKind(container.parent.parent) === 6 /* Prototype */) {
                 return container.parent.parent.left.expression;
             }
             // x.prototype = { method: function() { } }
-            else if (container.kind === 209 /* FunctionExpression */ &&
-                container.parent.kind === 289 /* PropertyAssignment */ &&
-                container.parent.parent.kind === 201 /* ObjectLiteralExpression */ &&
+            else if (container.kind === 211 /* FunctionExpression */ &&
+                container.parent.kind === 291 /* PropertyAssignment */ &&
+                container.parent.parent.kind === 203 /* ObjectLiteralExpression */ &&
                 ts.isBinaryExpression(container.parent.parent.parent) &&
                 ts.getAssignmentDeclarationKind(container.parent.parent.parent) === 6 /* Prototype */) {
                 return container.parent.parent.parent.left.expression;
@@ -67487,7 +68725,7 @@
             // Object.defineProperty(x, "method", { value: function() { } });
             // Object.defineProperty(x, "method", { set: (x: () => void) => void });
             // Object.defineProperty(x, "method", { get: () => function() { }) });
-            else if (container.kind === 209 /* FunctionExpression */ &&
+            else if (container.kind === 211 /* FunctionExpression */ &&
                 ts.isPropertyAssignment(container.parent) &&
                 ts.isIdentifier(container.parent.name) &&
                 (container.parent.name.escapedText === "value" || container.parent.name.escapedText === "get" || container.parent.name.escapedText === "set") &&
@@ -67512,7 +68750,7 @@
         }
         function getTypeForThisExpressionFromJSDoc(node) {
             var jsdocType = ts.getJSDocType(node);
-            if (jsdocType && jsdocType.kind === 309 /* JSDocFunctionType */) {
+            if (jsdocType && jsdocType.kind === 312 /* JSDocFunctionType */) {
                 var jsDocFunctionType = jsdocType;
                 if (jsDocFunctionType.parameters.length > 0 &&
                     jsDocFunctionType.parameters[0].name &&
@@ -67526,16 +68764,16 @@
             }
         }
         function isInConstructorArgumentInitializer(node, constructorDecl) {
-            return !!ts.findAncestor(node, function (n) { return ts.isFunctionLikeDeclaration(n) ? "quit" : n.kind === 161 /* Parameter */ && n.parent === constructorDecl; });
+            return !!ts.findAncestor(node, function (n) { return ts.isFunctionLikeDeclaration(n) ? "quit" : n.kind === 162 /* Parameter */ && n.parent === constructorDecl; });
         }
         function checkSuperExpression(node) {
-            var isCallExpression = node.parent.kind === 204 /* CallExpression */ && node.parent.expression === node;
+            var isCallExpression = node.parent.kind === 206 /* CallExpression */ && node.parent.expression === node;
             var immediateContainer = ts.getSuperContainer(node, /*stopOnFunctions*/ true);
             var container = immediateContainer;
             var needToCaptureLexicalThis = false;
             // adjust the container reference in case if super is used inside arrow functions with arbitrarily deep nesting
             if (!isCallExpression) {
-                while (container && container.kind === 210 /* ArrowFunction */) {
+                while (container && container.kind === 212 /* ArrowFunction */) {
                     container = ts.getSuperContainer(container, /*stopOnFunctions*/ true);
                     needToCaptureLexicalThis = languageVersion < 2 /* ES2015 */;
                 }
@@ -67548,14 +68786,14 @@
                 // class B {
                 //     [super.foo()]() {}
                 // }
-                var current = ts.findAncestor(node, function (n) { return n === container ? "quit" : n.kind === 159 /* ComputedPropertyName */; });
-                if (current && current.kind === 159 /* ComputedPropertyName */) {
+                var current = ts.findAncestor(node, function (n) { return n === container ? "quit" : n.kind === 160 /* ComputedPropertyName */; });
+                if (current && current.kind === 160 /* ComputedPropertyName */) {
                     error(node, ts.Diagnostics.super_cannot_be_referenced_in_a_computed_property_name);
                 }
                 else if (isCallExpression) {
                     error(node, ts.Diagnostics.Super_calls_are_not_permitted_outside_constructors_or_in_nested_functions_inside_constructors);
                 }
-                else if (!container || !container.parent || !(ts.isClassLike(container.parent) || container.parent.kind === 201 /* ObjectLiteralExpression */)) {
+                else if (!container || !container.parent || !(ts.isClassLike(container.parent) || container.parent.kind === 203 /* ObjectLiteralExpression */)) {
                     error(node, ts.Diagnostics.super_can_only_be_referenced_in_members_of_derived_classes_or_object_literal_expressions);
                 }
                 else {
@@ -67563,11 +68801,23 @@
                 }
                 return errorType;
             }
-            if (!isCallExpression && immediateContainer.kind === 167 /* Constructor */) {
+            if (!isCallExpression && immediateContainer.kind === 169 /* Constructor */) {
                 checkThisBeforeSuper(node, container, ts.Diagnostics.super_must_be_called_before_accessing_a_property_of_super_in_the_constructor_of_a_derived_class);
             }
-            if (ts.hasSyntacticModifier(container, 32 /* Static */) || isCallExpression) {
+            if (ts.isStatic(container) || isCallExpression) {
                 nodeCheckFlag = 512 /* SuperStatic */;
+                if (!isCallExpression &&
+                    languageVersion >= 2 /* ES2015 */ && languageVersion <= 8 /* ES2021 */ &&
+                    (ts.isPropertyDeclaration(container) || ts.isClassStaticBlockDeclaration(container))) {
+                    // for `super.x` or `super[x]` in a static initializer, mark all enclosing
+                    // block scope containers so that we can report potential collisions with
+                    // `Reflect`.
+                    ts.forEachEnclosingBlockScopeContainer(node.parent, function (current) {
+                        if (!ts.isSourceFile(current) || ts.isExternalOrCommonJsModule(current)) {
+                            getNodeLinks(current).flags |= 134217728 /* ContainsSuperPropertyInStaticInitializer */;
+                        }
+                    });
+                }
             }
             else {
                 nodeCheckFlag = 256 /* SuperInstance */;
@@ -67632,7 +68882,7 @@
             // as a call expression cannot be used as the target of a destructuring assignment while a property access can.
             //
             // For element access expressions (`super[x]`), we emit a generic helper that forwards the element access in both situations.
-            if (container.kind === 166 /* MethodDeclaration */ && ts.hasSyntacticModifier(container, 256 /* Async */)) {
+            if (container.kind === 167 /* MethodDeclaration */ && ts.hasSyntacticModifier(container, 256 /* Async */)) {
                 if (ts.isSuperProperty(node.parent) && ts.isAssignmentTarget(node.parent)) {
                     getNodeLinks(container).flags |= 4096 /* AsyncMethodWithSuperBinding */;
                 }
@@ -67646,7 +68896,7 @@
                 // in this case they should also use correct lexical this
                 captureLexicalThis(node.parent, container);
             }
-            if (container.parent.kind === 201 /* ObjectLiteralExpression */) {
+            if (container.parent.kind === 203 /* ObjectLiteralExpression */) {
                 if (languageVersion < 2 /* ES2015 */) {
                     error(node, ts.Diagnostics.super_is_only_allowed_in_members_of_object_literal_expressions_when_option_target_is_ES2015_or_higher);
                     return errorType;
@@ -67667,7 +68917,7 @@
             if (!baseClassType) {
                 return errorType;
             }
-            if (container.kind === 167 /* Constructor */ && isInConstructorArgumentInitializer(node, container)) {
+            if (container.kind === 169 /* Constructor */ && isInConstructorArgumentInitializer(node, container)) {
                 // issue custom error message for super property access in constructor arguments (to be aligned with old compiler)
                 error(node, ts.Diagnostics.super_cannot_be_referenced_in_constructor_arguments);
                 return errorType;
@@ -67682,7 +68932,7 @@
                 if (isCallExpression) {
                     // TS 1.0 SPEC (April 2014): 4.8.1
                     // Super calls are only permitted in constructors of derived classes
-                    return container.kind === 167 /* Constructor */;
+                    return container.kind === 169 /* Constructor */;
                 }
                 else {
                     // TS 1.0 SPEC (April 2014)
@@ -67690,21 +68940,23 @@
                     // - In a constructor, instance member function, instance member accessor, or instance member variable initializer where this references a derived class instance
                     // - In a static member function or static member accessor
                     // topmost container must be something that is directly nested in the class declaration\object literal expression
-                    if (ts.isClassLike(container.parent) || container.parent.kind === 201 /* ObjectLiteralExpression */) {
-                        if (ts.hasSyntacticModifier(container, 32 /* Static */)) {
-                            return container.kind === 166 /* MethodDeclaration */ ||
-                                container.kind === 165 /* MethodSignature */ ||
-                                container.kind === 168 /* GetAccessor */ ||
-                                container.kind === 169 /* SetAccessor */;
+                    if (ts.isClassLike(container.parent) || container.parent.kind === 203 /* ObjectLiteralExpression */) {
+                        if (ts.isStatic(container)) {
+                            return container.kind === 167 /* MethodDeclaration */ ||
+                                container.kind === 166 /* MethodSignature */ ||
+                                container.kind === 170 /* GetAccessor */ ||
+                                container.kind === 171 /* SetAccessor */ ||
+                                container.kind === 165 /* PropertyDeclaration */ ||
+                                container.kind === 168 /* ClassStaticBlockDeclaration */;
                         }
                         else {
-                            return container.kind === 166 /* MethodDeclaration */ ||
-                                container.kind === 165 /* MethodSignature */ ||
-                                container.kind === 168 /* GetAccessor */ ||
-                                container.kind === 169 /* SetAccessor */ ||
-                                container.kind === 164 /* PropertyDeclaration */ ||
-                                container.kind === 163 /* PropertySignature */ ||
-                                container.kind === 167 /* Constructor */;
+                            return container.kind === 167 /* MethodDeclaration */ ||
+                                container.kind === 166 /* MethodSignature */ ||
+                                container.kind === 170 /* GetAccessor */ ||
+                                container.kind === 171 /* SetAccessor */ ||
+                                container.kind === 165 /* PropertyDeclaration */ ||
+                                container.kind === 164 /* PropertySignature */ ||
+                                container.kind === 169 /* Constructor */;
                         }
                     }
                 }
@@ -67712,10 +68964,10 @@
             }
         }
         function getContainingObjectLiteral(func) {
-            return (func.kind === 166 /* MethodDeclaration */ ||
-                func.kind === 168 /* GetAccessor */ ||
-                func.kind === 169 /* SetAccessor */) && func.parent.kind === 201 /* ObjectLiteralExpression */ ? func.parent :
-                func.kind === 209 /* FunctionExpression */ && func.parent.kind === 289 /* PropertyAssignment */ ? func.parent.parent :
+            return (func.kind === 167 /* MethodDeclaration */ ||
+                func.kind === 170 /* GetAccessor */ ||
+                func.kind === 171 /* SetAccessor */) && func.parent.kind === 203 /* ObjectLiteralExpression */ ? func.parent :
+                func.kind === 211 /* FunctionExpression */ && func.parent.kind === 291 /* PropertyAssignment */ ? func.parent.parent :
                     undefined;
         }
         function getThisTypeArgument(type) {
@@ -67727,7 +68979,7 @@
             });
         }
         function getContextualThisParameterType(func) {
-            if (func.kind === 210 /* ArrowFunction */) {
+            if (func.kind === 212 /* ArrowFunction */) {
                 return undefined;
             }
             if (isContextSensitiveFunctionOrObjectLiteralMethod(func)) {
@@ -67754,7 +69006,7 @@
                         if (thisType) {
                             return instantiateType(thisType, getMapperFromContext(getInferenceContext(containingLiteral)));
                         }
-                        if (literal.parent.kind !== 289 /* PropertyAssignment */) {
+                        if (literal.parent.kind !== 291 /* PropertyAssignment */) {
                             break;
                         }
                         literal = literal.parent.parent;
@@ -67768,7 +69020,7 @@
                 // In an assignment of the form 'obj.xxx = function(...)' or 'obj[xxx] = function(...)', the
                 // contextual type for 'this' is 'obj'.
                 var parent = ts.walkUpParenthesizedExpressions(func.parent);
-                if (parent.kind === 217 /* BinaryExpression */ && parent.operatorToken.kind === 62 /* EqualsToken */) {
+                if (parent.kind === 219 /* BinaryExpression */ && parent.operatorToken.kind === 63 /* EqualsToken */) {
                     var target = parent.left;
                     if (ts.isAccessExpression(target)) {
                         var expression = target.expression;
@@ -67821,12 +69073,12 @@
                 return getTypeFromTypeNode(typeNode);
             }
             switch (declaration.kind) {
-                case 161 /* Parameter */:
+                case 162 /* Parameter */:
                     return getContextuallyTypedParameterType(declaration);
-                case 199 /* BindingElement */:
+                case 201 /* BindingElement */:
                     return getContextualTypeForBindingElement(declaration);
-                case 164 /* PropertyDeclaration */:
-                    if (ts.hasSyntacticModifier(declaration, 32 /* Static */)) {
+                case 165 /* PropertyDeclaration */:
+                    if (ts.isStatic(declaration)) {
                         return getContextualTypeForStaticPropertyDeclaration(declaration);
                     }
                 // By default, do nothing and return undefined - only the above cases have context implied by a parent
@@ -67836,10 +69088,10 @@
             var parent = declaration.parent.parent;
             var name = declaration.propertyName || declaration.name;
             var parentType = getContextualTypeForVariableLikeDeclaration(parent) ||
-                parent.kind !== 199 /* BindingElement */ && parent.initializer && checkDeclarationInitializer(parent);
+                parent.kind !== 201 /* BindingElement */ && parent.initializer && checkDeclarationInitializer(parent);
             if (!parentType || ts.isBindingPattern(name) || ts.isComputedNonLiteralName(name))
                 return undefined;
-            if (parent.name.kind === 198 /* ArrayBindingPattern */) {
+            if (parent.name.kind === 200 /* ArrayBindingPattern */) {
                 var index = ts.indexOfNode(declaration.parent.elements, declaration);
                 if (index < 0)
                     return undefined;
@@ -67973,10 +69225,13 @@
             if (ts.isJsxOpeningLikeElement(callTarget) && argIndex === 0) {
                 return getEffectiveFirstArgumentForJsxSignature(signature, callTarget);
             }
-            return getTypeAtPosition(signature, argIndex);
+            var restIndex = signature.parameters.length - 1;
+            return signatureHasRestParameter(signature) && argIndex >= restIndex ?
+                getIndexedAccessType(getTypeOfSymbol(signature.parameters[restIndex]), getNumberLiteralType(argIndex - restIndex), 256 /* Contextual */) :
+                getTypeAtPosition(signature, argIndex);
         }
         function getContextualTypeForSubstitutionExpression(template, substitutionExpression) {
-            if (template.parent.kind === 206 /* TaggedTemplateExpression */) {
+            if (template.parent.kind === 208 /* TaggedTemplateExpression */) {
                 return getContextualTypeForArgument(template.parent, substitutionExpression);
             }
             return undefined;
@@ -67985,10 +69240,10 @@
             var binaryExpression = node.parent;
             var left = binaryExpression.left, operatorToken = binaryExpression.operatorToken, right = binaryExpression.right;
             switch (operatorToken.kind) {
-                case 62 /* EqualsToken */:
-                case 75 /* AmpersandAmpersandEqualsToken */:
-                case 74 /* BarBarEqualsToken */:
-                case 76 /* QuestionQuestionEqualsToken */:
+                case 63 /* EqualsToken */:
+                case 76 /* AmpersandAmpersandEqualsToken */:
+                case 75 /* BarBarEqualsToken */:
+                case 77 /* QuestionQuestionEqualsToken */:
                     return node === right ? getContextualTypeForAssignmentDeclaration(binaryExpression) : undefined;
                 case 56 /* BarBarToken */:
                 case 60 /* QuestionQuestionToken */:
@@ -68007,6 +69262,27 @@
                     return undefined;
             }
         }
+        /**
+         * Try to find a resolved symbol for an expression without also resolving its type, as
+         * getSymbolAtLocation would (as that could be reentrant into contextual typing)
+         */
+        function getSymbolForExpression(e) {
+            if (e.symbol) {
+                return e.symbol;
+            }
+            if (ts.isIdentifier(e)) {
+                return getResolvedSymbol(e);
+            }
+            if (ts.isPropertyAccessExpression(e)) {
+                var lhsType = getTypeOfExpression(e.expression);
+                return ts.isPrivateIdentifier(e.name) ? tryGetPrivateIdentifierPropertyOfType(lhsType, e.name) : getPropertyOfType(lhsType, e.name.escapedText);
+            }
+            return undefined;
+            function tryGetPrivateIdentifierPropertyOfType(type, id) {
+                var lexicallyScopedSymbol = lookupSymbolForPrivateIdentifierDeclaration(id.escapedText, id);
+                return lexicallyScopedSymbol && getPrivateIdentifierPropertyOfType(type, lexicallyScopedSymbol);
+            }
+        }
         // In an assignment expression, the right operand is contextually typed by the type of the left operand.
         // Don't do this for assignment declarations unless there is a type tag on the assignment, to avoid circularity from checking the right operand.
         function getContextualTypeForAssignmentDeclaration(binaryExpression) {
@@ -68014,8 +69290,19 @@
             var kind = ts.getAssignmentDeclarationKind(binaryExpression);
             switch (kind) {
                 case 0 /* None */:
-                    return getTypeOfExpression(binaryExpression.left);
                 case 4 /* ThisProperty */:
+                    var lhsSymbol = getSymbolForExpression(binaryExpression.left);
+                    var decl = lhsSymbol && lhsSymbol.valueDeclaration;
+                    // Unannotated, uninitialized property declarations have a type implied by their usage in the constructor.
+                    // We avoid calling back into `getTypeOfExpression` and reentering contextual typing to avoid a bogus circularity error in that case.
+                    if (decl && (ts.isPropertyDeclaration(decl) || ts.isPropertySignature(decl))) {
+                        var overallAnnotation = ts.getEffectiveTypeAnnotationNode(decl);
+                        return (overallAnnotation && instantiateType(getTypeFromTypeNode(overallAnnotation), getSymbolLinks(lhsSymbol).mapper)) ||
+                            (decl.initializer && getTypeOfExpression(binaryExpression.left));
+                    }
+                    if (kind === 0 /* None */) {
+                        return getTypeOfExpression(binaryExpression.left);
+                    }
                     return getContextualTypeForThisPropertyAssignment(binaryExpression);
                 case 5 /* Property */:
                     if (isPossiblyAliasedThisProperty(binaryExpression, kind)) {
@@ -68027,12 +69314,12 @@
                         return getTypeOfExpression(binaryExpression.left);
                     }
                     else {
-                        var decl = binaryExpression.left.symbol.valueDeclaration;
-                        if (!decl) {
+                        var decl_1 = binaryExpression.left.symbol.valueDeclaration;
+                        if (!decl_1) {
                             return undefined;
                         }
                         var lhs = ts.cast(binaryExpression.left, ts.isAccessExpression);
-                        var overallAnnotation = ts.getEffectiveTypeAnnotationNode(decl);
+                        var overallAnnotation = ts.getEffectiveTypeAnnotationNode(decl_1);
                         if (overallAnnotation) {
                             return getTypeFromTypeNode(overallAnnotation);
                         }
@@ -68050,7 +69337,7 @@
                                 return undefined;
                             }
                         }
-                        return ts.isInJSFile(decl) ? undefined : getTypeOfExpression(binaryExpression.left);
+                        return ts.isInJSFile(decl_1) ? undefined : getTypeOfExpression(binaryExpression.left);
                     }
                 case 1 /* ExportsProperty */:
                 case 6 /* Prototype */:
@@ -68106,10 +69393,11 @@
         }
         function getTypeOfPropertyOfContextualType(type, name) {
             return mapType(type, function (t) {
+                var _a;
                 if (isGenericMappedType(t)) {
                     var constraint = getConstraintTypeFromMappedType(t);
                     var constraintOfConstraint = getBaseConstraintOfType(constraint) || constraint;
-                    var propertyNameType = getLiteralType(ts.unescapeLeadingUnderscores(name));
+                    var propertyNameType = getStringLiteralType(ts.unescapeLeadingUnderscores(name));
                     if (isTypeAssignableTo(propertyNameType, constraintOfConstraint)) {
                         return substituteIndexedMappedType(t, propertyNameType);
                     }
@@ -68125,15 +69413,11 @@
                             return restType;
                         }
                     }
-                    return isNumericLiteralName(name) && getIndexTypeOfContextualType(t, 1 /* Number */) ||
-                        getIndexTypeOfContextualType(t, 0 /* String */);
+                    return (_a = findApplicableIndexInfo(getIndexInfosOfStructuredType(t), getStringLiteralType(ts.unescapeLeadingUnderscores(name)))) === null || _a === void 0 ? void 0 : _a.type;
                 }
                 return undefined;
             }, /*noReductions*/ true);
         }
-        function getIndexTypeOfContextualType(type, kind) {
-            return mapType(type, function (t) { return getIndexTypeOfStructuredType(t, kind); }, /*noReductions*/ true);
-        }
         // In an object literal contextually typed by a type T, the contextual type of a property assignment is the type of
         // the matching property in T, if one exists. Otherwise, it is the type of the numeric index signature in T, if one
         // exists. Otherwise, it is the type of the string index signature in T, if one exists.
@@ -68157,14 +69441,13 @@
                     // For a (non-symbol) computed property, there is no reason to look up the name
                     // in the type. It will just be "__computed", which does not appear in any
                     // SymbolTable.
-                    var symbolName_3 = getSymbolOfNode(element).escapedName;
-                    var propertyType = getTypeOfPropertyOfContextualType(type, symbolName_3);
-                    if (propertyType) {
-                        return propertyType;
-                    }
+                    return getTypeOfPropertyOfContextualType(type, getSymbolOfNode(element).escapedName);
                 }
-                return isNumericName(element.name) && getIndexTypeOfContextualType(type, 1 /* Number */) ||
-                    getIndexTypeOfContextualType(type, 0 /* String */);
+                if (element.name) {
+                    var nameType_1 = getLiteralTypeFromPropertyName(element.name);
+                    // We avoid calling getApplicableIndexInfo here because it performs potentially expensive intersection reduction.
+                    return mapType(type, function (t) { var _a; return (_a = findApplicableIndexInfo(getIndexInfosOfStructuredType(t), nameType_1)) === null || _a === void 0 ? void 0 : _a.type; }, /*noReductions*/ true);
+                }
             }
             return undefined;
         }
@@ -68194,7 +69477,7 @@
             var childFieldType = getTypeOfPropertyOfContextualType(attributesType, jsxChildrenPropertyName);
             return childFieldType && (realChildren.length === 1 ? childFieldType : mapType(childFieldType, function (t) {
                 if (isArrayLikeType(t)) {
-                    return getIndexedAccessType(t, getLiteralType(childIndex));
+                    return getIndexedAccessType(t, getNumberLiteralType(childIndex));
                 }
                 else {
                     return t;
@@ -68233,25 +69516,25 @@
                 case 8 /* NumericLiteral */:
                 case 9 /* BigIntLiteral */:
                 case 14 /* NoSubstitutionTemplateLiteral */:
-                case 109 /* TrueKeyword */:
-                case 94 /* FalseKeyword */:
-                case 103 /* NullKeyword */:
-                case 78 /* Identifier */:
-                case 150 /* UndefinedKeyword */:
+                case 110 /* TrueKeyword */:
+                case 95 /* FalseKeyword */:
+                case 104 /* NullKeyword */:
+                case 79 /* Identifier */:
+                case 151 /* UndefinedKeyword */:
                     return true;
-                case 202 /* PropertyAccessExpression */:
-                case 208 /* ParenthesizedExpression */:
+                case 204 /* PropertyAccessExpression */:
+                case 210 /* ParenthesizedExpression */:
                     return isPossiblyDiscriminantValue(node.expression);
-                case 284 /* JsxExpression */:
+                case 286 /* JsxExpression */:
                     return !node.expression || isPossiblyDiscriminantValue(node.expression);
             }
             return false;
         }
         function discriminateContextualTypeByObjectMembers(node, contextualType) {
-            return getMatchingUnionConstituentForObjectLiteral(contextualType, node) || discriminateTypeByDiscriminableItems(contextualType, ts.concatenate(ts.map(ts.filter(node.properties, function (p) { return !!p.symbol && p.kind === 289 /* PropertyAssignment */ && isPossiblyDiscriminantValue(p.initializer) && isDiscriminantProperty(contextualType, p.symbol.escapedName); }), function (prop) { return [function () { return getContextFreeTypeOfExpression(prop.initializer); }, prop.symbol.escapedName]; }), ts.map(ts.filter(getPropertiesOfType(contextualType), function (s) { var _a; return !!(s.flags & 16777216 /* Optional */) && !!((_a = node === null || node === void 0 ? void 0 : node.symbol) === null || _a === void 0 ? void 0 : _a.members) && !node.symbol.members.has(s.escapedName) && isDiscriminantProperty(contextualType, s.escapedName); }), function (s) { return [function () { return undefinedType; }, s.escapedName]; })), isTypeAssignableTo, contextualType);
+            return getMatchingUnionConstituentForObjectLiteral(contextualType, node) || discriminateTypeByDiscriminableItems(contextualType, ts.concatenate(ts.map(ts.filter(node.properties, function (p) { return !!p.symbol && p.kind === 291 /* PropertyAssignment */ && isPossiblyDiscriminantValue(p.initializer) && isDiscriminantProperty(contextualType, p.symbol.escapedName); }), function (prop) { return [function () { return getContextFreeTypeOfExpression(prop.initializer); }, prop.symbol.escapedName]; }), ts.map(ts.filter(getPropertiesOfType(contextualType), function (s) { var _a; return !!(s.flags & 16777216 /* Optional */) && !!((_a = node === null || node === void 0 ? void 0 : node.symbol) === null || _a === void 0 ? void 0 : _a.members) && !node.symbol.members.has(s.escapedName) && isDiscriminantProperty(contextualType, s.escapedName); }), function (s) { return [function () { return undefinedType; }, s.escapedName]; })), isTypeAssignableTo, contextualType);
         }
         function discriminateContextualTypeByJSXAttributes(node, contextualType) {
-            return discriminateTypeByDiscriminableItems(contextualType, ts.concatenate(ts.map(ts.filter(node.properties, function (p) { return !!p.symbol && p.kind === 281 /* JsxAttribute */ && isDiscriminantProperty(contextualType, p.symbol.escapedName) && (!p.initializer || isPossiblyDiscriminantValue(p.initializer)); }), function (prop) { return [!prop.initializer ? (function () { return trueType; }) : (function () { return checkExpression(prop.initializer); }), prop.symbol.escapedName]; }), ts.map(ts.filter(getPropertiesOfType(contextualType), function (s) { var _a; return !!(s.flags & 16777216 /* Optional */) && !!((_a = node === null || node === void 0 ? void 0 : node.symbol) === null || _a === void 0 ? void 0 : _a.members) && !node.symbol.members.has(s.escapedName) && isDiscriminantProperty(contextualType, s.escapedName); }), function (s) { return [function () { return undefinedType; }, s.escapedName]; })), isTypeAssignableTo, contextualType);
+            return discriminateTypeByDiscriminableItems(contextualType, ts.concatenate(ts.map(ts.filter(node.properties, function (p) { return !!p.symbol && p.kind === 283 /* JsxAttribute */ && isDiscriminantProperty(contextualType, p.symbol.escapedName) && (!p.initializer || isPossiblyDiscriminantValue(p.initializer)); }), function (prop) { return [!prop.initializer ? (function () { return trueType; }) : (function () { return checkExpression(prop.initializer); }), prop.symbol.escapedName]; }), ts.map(ts.filter(getPropertiesOfType(contextualType), function (s) { var _a; return !!(s.flags & 16777216 /* Optional */) && !!((_a = node === null || node === void 0 ? void 0 : node.symbol) === null || _a === void 0 ? void 0 : _a.members) && !node.symbol.members.has(s.escapedName) && isDiscriminantProperty(contextualType, s.escapedName); }), function (s) { return [function () { return undefinedType; }, s.escapedName]; })), isTypeAssignableTo, contextualType);
         }
         // Return the contextual type for a given expression node. During overload resolution, a contextual type may temporarily
         // be "pushed" onto a node using the contextualType property.
@@ -68331,60 +69614,60 @@
             }
             var parent = node.parent;
             switch (parent.kind) {
-                case 250 /* VariableDeclaration */:
-                case 161 /* Parameter */:
-                case 164 /* PropertyDeclaration */:
-                case 163 /* PropertySignature */:
-                case 199 /* BindingElement */:
+                case 252 /* VariableDeclaration */:
+                case 162 /* Parameter */:
+                case 165 /* PropertyDeclaration */:
+                case 164 /* PropertySignature */:
+                case 201 /* BindingElement */:
                     return getContextualTypeForInitializerExpression(node, contextFlags);
-                case 210 /* ArrowFunction */:
-                case 243 /* ReturnStatement */:
+                case 212 /* ArrowFunction */:
+                case 245 /* ReturnStatement */:
                     return getContextualTypeForReturnExpression(node);
-                case 220 /* YieldExpression */:
+                case 222 /* YieldExpression */:
                     return getContextualTypeForYieldOperand(parent);
-                case 214 /* AwaitExpression */:
+                case 216 /* AwaitExpression */:
                     return getContextualTypeForAwaitOperand(parent, contextFlags);
-                case 204 /* CallExpression */:
-                    if (parent.expression.kind === 99 /* ImportKeyword */) {
+                case 206 /* CallExpression */:
+                    if (parent.expression.kind === 100 /* ImportKeyword */) {
                         return stringType;
                     }
                 /* falls through */
-                case 205 /* NewExpression */:
+                case 207 /* NewExpression */:
                     return getContextualTypeForArgument(parent, node);
-                case 207 /* TypeAssertionExpression */:
-                case 225 /* AsExpression */:
+                case 209 /* TypeAssertionExpression */:
+                case 227 /* AsExpression */:
                     return ts.isConstTypeReference(parent.type) ? tryFindWhenConstTypeReference(parent) : getTypeFromTypeNode(parent.type);
-                case 217 /* BinaryExpression */:
+                case 219 /* BinaryExpression */:
                     return getContextualTypeForBinaryOperand(node, contextFlags);
-                case 289 /* PropertyAssignment */:
-                case 290 /* ShorthandPropertyAssignment */:
+                case 291 /* PropertyAssignment */:
+                case 292 /* ShorthandPropertyAssignment */:
                     return getContextualTypeForObjectLiteralElement(parent, contextFlags);
-                case 291 /* SpreadAssignment */:
+                case 293 /* SpreadAssignment */:
                     return getContextualType(parent.parent, contextFlags);
-                case 200 /* ArrayLiteralExpression */: {
+                case 202 /* ArrayLiteralExpression */: {
                     var arrayLiteral = parent;
                     var type = getApparentTypeOfContextualType(arrayLiteral, contextFlags);
                     return getContextualTypeForElementExpression(type, ts.indexOfNode(arrayLiteral.elements, node));
                 }
-                case 218 /* ConditionalExpression */:
+                case 220 /* ConditionalExpression */:
                     return getContextualTypeForConditionalOperand(node, contextFlags);
-                case 229 /* TemplateSpan */:
-                    ts.Debug.assert(parent.parent.kind === 219 /* TemplateExpression */);
+                case 231 /* TemplateSpan */:
+                    ts.Debug.assert(parent.parent.kind === 221 /* TemplateExpression */);
                     return getContextualTypeForSubstitutionExpression(parent.parent, node);
-                case 208 /* ParenthesizedExpression */: {
+                case 210 /* ParenthesizedExpression */: {
                     // Like in `checkParenthesizedExpression`, an `/** @type {xyz} */` comment before a parenthesized expression acts as a type cast.
                     var tag = ts.isInJSFile(parent) ? ts.getJSDocTypeTag(parent) : undefined;
                     return tag ? getTypeFromTypeNode(tag.typeExpression.type) : getContextualType(parent, contextFlags);
                 }
-                case 226 /* NonNullExpression */:
+                case 228 /* NonNullExpression */:
                     return getContextualType(parent, contextFlags);
-                case 284 /* JsxExpression */:
+                case 286 /* JsxExpression */:
                     return getContextualTypeForJsxExpression(parent);
-                case 281 /* JsxAttribute */:
-                case 283 /* JsxSpreadAttribute */:
+                case 283 /* JsxAttribute */:
+                case 285 /* JsxSpreadAttribute */:
                     return getContextualTypeForJsxAttribute(parent);
-                case 276 /* JsxOpeningElement */:
-                case 275 /* JsxSelfClosingElement */:
+                case 278 /* JsxOpeningElement */:
+                case 277 /* JsxSelfClosingElement */:
                     return getContextualJsxElementAttributesType(parent, contextFlags);
             }
             return undefined;
@@ -68624,7 +69907,7 @@
             return !hasEffectiveRestParameter(signature) && getParameterCount(signature) < targetParameterCount;
         }
         function isFunctionExpressionOrArrowFunction(node) {
-            return node.kind === 209 /* FunctionExpression */ || node.kind === 210 /* ArrowFunction */;
+            return node.kind === 211 /* FunctionExpression */ || node.kind === 212 /* ArrowFunction */;
         }
         function getContextualSignatureForFunctionLikeDeclaration(node) {
             // Only function expressions, arrow functions, and object literal methods are contextually typed.
@@ -68638,7 +69921,7 @@
         // all identical ignoring their return type, the result is same signature but with return type as
         // union type of return types from these signatures
         function getContextualSignature(node) {
-            ts.Debug.assert(node.kind !== 166 /* MethodDeclaration */ || ts.isObjectLiteralMethod(node));
+            ts.Debug.assert(node.kind !== 167 /* MethodDeclaration */ || ts.isObjectLiteralMethod(node));
             var typeTagSignature = getSignatureOfTypeTag(node);
             if (typeTagSignature) {
                 return typeTagSignature;
@@ -68652,8 +69935,8 @@
             }
             var signatureList;
             var types = type.types;
-            for (var _i = 0, types_20 = types; _i < types_20.length; _i++) {
-                var current = types_20[_i];
+            for (var _i = 0, types_19 = types; _i < types_19.length; _i++) {
+                var current = types_19[_i];
                 var signature = getContextualCallSignature(current, node);
                 if (signature) {
                     if (!signatureList) {
@@ -68686,8 +69969,8 @@
             return node.isSpread ? getIndexedAccessType(node.type, numberType) : node.type;
         }
         function hasDefaultValue(node) {
-            return (node.kind === 199 /* BindingElement */ && !!node.initializer) ||
-                (node.kind === 217 /* BinaryExpression */ && node.operatorToken.kind === 62 /* EqualsToken */);
+            return (node.kind === 201 /* BindingElement */ && !!node.initializer) ||
+                (node.kind === 219 /* BinaryExpression */ && node.operatorToken.kind === 63 /* EqualsToken */);
         }
         function checkArrayLiteral(node, checkMode, forceTuple) {
             var elements = node.elements;
@@ -68697,9 +69980,10 @@
             var contextualType = getApparentTypeOfContextualType(node);
             var inDestructuringPattern = ts.isAssignmentTarget(node);
             var inConstContext = isConstContext(node);
+            var hasOmittedExpression = false;
             for (var i = 0; i < elementCount; i++) {
                 var e = elements[i];
-                if (e.kind === 221 /* SpreadElement */) {
+                if (e.kind === 223 /* SpreadElement */) {
                     if (languageVersion < 2 /* ES2015 */) {
                         checkExternalEmitHelpers(e, compilerOptions.downlevelIteration ? 1536 /* SpreadIncludes */ : 1024 /* SpreadArray */);
                     }
@@ -68721,7 +70005,7 @@
                         // get the contextual element type from it. So we do something similar to
                         // getContextualTypeForElementExpression, which will crucially not error
                         // if there is no index type / iterated type.
-                        var restElementType = getIndexTypeOfType(spreadType, 1 /* Number */) ||
+                        var restElementType = getIndexTypeOfType(spreadType, numberType) ||
                             getIteratedTypeOrElementType(65 /* Destructuring */, spreadType, undefinedType, /*errorNode*/ undefined, /*checkAssignability*/ false) ||
                             unknownType;
                         elementTypes.push(restElementType);
@@ -68732,11 +70016,16 @@
                         elementFlags.push(4 /* Rest */);
                     }
                 }
+                else if (exactOptionalPropertyTypes && e.kind === 225 /* OmittedExpression */) {
+                    hasOmittedExpression = true;
+                    elementTypes.push(missingType);
+                    elementFlags.push(2 /* Optional */);
+                }
                 else {
                     var elementContextualType = getContextualTypeForElementExpression(contextualType, elementTypes.length);
                     var type = checkExpressionForMutableLocation(e, checkMode, elementContextualType, forceTuple);
-                    elementTypes.push(type);
-                    elementFlags.push(1 /* Required */);
+                    elementTypes.push(addOptionality(type, /*isProperty*/ true, hasOmittedExpression));
+                    elementFlags.push(hasOmittedExpression ? 2 /* Optional */ : 1 /* Required */);
                 }
             }
             if (inDestructuringPattern) {
@@ -68762,9 +70051,9 @@
         }
         function isNumericName(name) {
             switch (name.kind) {
-                case 159 /* ComputedPropertyName */:
+                case 160 /* ComputedPropertyName */:
                     return isNumericComputedName(name);
-                case 78 /* Identifier */:
+                case 79 /* Identifier */:
                     return isNumericLiteralName(name.escapedText);
                 case 8 /* NumericLiteral */:
                 case 10 /* StringLiteral */:
@@ -68778,9 +70067,6 @@
             // but this behavior is consistent with checkIndexedAccess
             return isTypeAssignableToKind(checkComputedPropertyName(name), 296 /* NumberLike */);
         }
-        function isInfinityOrNaNString(name) {
-            return name === "Infinity" || name === "-Infinity" || name === "NaN";
-        }
         function isNumericLiteralName(name) {
             // The intent of numeric names is that
             //     - they are names with text in a numeric form, and that
@@ -68838,15 +70124,24 @@
             var firstDecl = (_a = symbol.declarations) === null || _a === void 0 ? void 0 : _a[0];
             return isNumericLiteralName(symbol.escapedName) || (firstDecl && ts.isNamedDeclaration(firstDecl) && isNumericName(firstDecl.name));
         }
-        function getObjectLiteralIndexInfo(node, offset, properties, kind) {
+        function isSymbolWithSymbolName(symbol) {
+            var _a;
+            var firstDecl = (_a = symbol.declarations) === null || _a === void 0 ? void 0 : _a[0];
+            return ts.isKnownSymbol(symbol) || (firstDecl && ts.isNamedDeclaration(firstDecl) && ts.isComputedPropertyName(firstDecl.name) &&
+                isTypeAssignableToKind(checkComputedPropertyName(firstDecl.name), 4096 /* ESSymbol */));
+        }
+        function getObjectLiteralIndexInfo(node, offset, properties, keyType) {
             var propTypes = [];
             for (var i = offset; i < properties.length; i++) {
-                if (kind === 0 /* String */ || isSymbolWithNumericName(properties[i])) {
+                var prop = properties[i];
+                if (keyType === stringType && !isSymbolWithSymbolName(prop) ||
+                    keyType === numberType && isSymbolWithNumericName(prop) ||
+                    keyType === esSymbolType && isSymbolWithSymbolName(prop)) {
                     propTypes.push(getTypeOfSymbol(properties[i]));
                 }
             }
             var unionType = propTypes.length ? getUnionType(propTypes, 2 /* Subtype */) : undefinedType;
-            return createIndexInfo(unionType, isConstContext(node));
+            return createIndexInfo(keyType, unionType, isConstContext(node));
         }
         function getImmediateAliasedSymbol(symbol) {
             ts.Debug.assert((symbol.flags & 2097152 /* Alias */) !== 0, "Should only get Alias here.");
@@ -68869,7 +70164,7 @@
             var spread = emptyObjectType;
             var contextualType = getApparentTypeOfContextualType(node);
             var contextualTypeHasPattern = contextualType && contextualType.pattern &&
-                (contextualType.pattern.kind === 197 /* ObjectBindingPattern */ || contextualType.pattern.kind === 201 /* ObjectLiteralExpression */);
+                (contextualType.pattern.kind === 199 /* ObjectBindingPattern */ || contextualType.pattern.kind === 203 /* ObjectLiteralExpression */);
             var inConstContext = isConstContext(node);
             var checkFlags = inConstContext ? 8 /* Readonly */ : 0;
             var isInJavascript = ts.isInJSFile(node) && !ts.isInJsonFile(node);
@@ -68879,6 +70174,7 @@
             var patternWithComputedProperties = false;
             var hasComputedStringProperty = false;
             var hasComputedNumberProperty = false;
+            var hasComputedSymbolProperty = false;
             // Spreads may cause an early bail; ensure computed names are always checked (this is cached)
             // As otherwise they may not be checked until exports for the type at this position are retrieved,
             // which may never occur.
@@ -68892,16 +70188,16 @@
             for (var _b = 0, _c = node.properties; _b < _c.length; _b++) {
                 var memberDecl = _c[_b];
                 var member = getSymbolOfNode(memberDecl);
-                var computedNameType = memberDecl.name && memberDecl.name.kind === 159 /* ComputedPropertyName */ ?
+                var computedNameType = memberDecl.name && memberDecl.name.kind === 160 /* ComputedPropertyName */ ?
                     checkComputedPropertyName(memberDecl.name) : undefined;
-                if (memberDecl.kind === 289 /* PropertyAssignment */ ||
-                    memberDecl.kind === 290 /* ShorthandPropertyAssignment */ ||
+                if (memberDecl.kind === 291 /* PropertyAssignment */ ||
+                    memberDecl.kind === 292 /* ShorthandPropertyAssignment */ ||
                     ts.isObjectLiteralMethod(memberDecl)) {
-                    var type = memberDecl.kind === 289 /* PropertyAssignment */ ? checkPropertyAssignment(memberDecl, checkMode) :
+                    var type = memberDecl.kind === 291 /* PropertyAssignment */ ? checkPropertyAssignment(memberDecl, checkMode) :
                         // avoid resolving the left side of the ShorthandPropertyAssignment outside of the destructuring
                         // for error recovery purposes. For example, if a user wrote `{ a = 100 }` instead of `{ a: 100 }`.
                         // we don't want to say "could not find 'a'".
-                        memberDecl.kind === 290 /* ShorthandPropertyAssignment */ ? checkExpressionForMutableLocation(!inDestructuringPattern && memberDecl.objectAssignmentInitializer ? memberDecl.objectAssignmentInitializer : memberDecl.name, checkMode) :
+                        memberDecl.kind === 292 /* ShorthandPropertyAssignment */ ? checkExpressionForMutableLocation(!inDestructuringPattern && memberDecl.objectAssignmentInitializer ? memberDecl.objectAssignmentInitializer : memberDecl.name, checkMode) :
                             checkObjectLiteralMethod(memberDecl, checkMode);
                     if (isInJavascript) {
                         var jsDocType = getTypeForDeclarationFromJSDocComment(memberDecl);
@@ -68924,8 +70220,8 @@
                     if (inDestructuringPattern) {
                         // If object literal is an assignment pattern and if the assignment pattern specifies a default value
                         // for the property, make the property optional.
-                        var isOptional = (memberDecl.kind === 289 /* PropertyAssignment */ && hasDefaultValue(memberDecl.initializer)) ||
-                            (memberDecl.kind === 290 /* ShorthandPropertyAssignment */ && memberDecl.objectAssignmentInitializer);
+                        var isOptional = (memberDecl.kind === 291 /* PropertyAssignment */ && hasDefaultValue(memberDecl.initializer)) ||
+                            (memberDecl.kind === 292 /* ShorthandPropertyAssignment */ && memberDecl.objectAssignmentInitializer);
                         if (isOptional) {
                             prop.flags |= 16777216 /* Optional */;
                         }
@@ -68937,7 +70233,7 @@
                         if (impliedProp) {
                             prop.flags |= impliedProp.flags & 16777216 /* Optional */;
                         }
-                        else if (!compilerOptions.suppressExcessPropertyErrors && !getIndexInfoOfType(contextualType, 0 /* String */)) {
+                        else if (!compilerOptions.suppressExcessPropertyErrors && !getIndexInfoOfType(contextualType, stringType)) {
                             error(memberDecl.name, ts.Diagnostics.Object_literal_may_only_specify_known_properties_and_0_does_not_exist_in_type_1, symbolToString(member), typeToString(contextualType));
                         }
                     }
@@ -68951,7 +70247,7 @@
                     member = prop;
                     allPropertiesTable === null || allPropertiesTable === void 0 ? void 0 : allPropertiesTable.set(prop.escapedName, prop);
                 }
-                else if (memberDecl.kind === 291 /* SpreadAssignment */) {
+                else if (memberDecl.kind === 293 /* SpreadAssignment */) {
                     if (languageVersion < 2 /* ES2015 */) {
                         checkExternalEmitHelpers(memberDecl, 2 /* Assign */);
                     }
@@ -68961,17 +70257,19 @@
                         propertiesTable = ts.createSymbolTable();
                         hasComputedStringProperty = false;
                         hasComputedNumberProperty = false;
+                        hasComputedSymbolProperty = false;
                     }
                     var type = getReducedType(checkExpression(memberDecl.expression));
                     if (isValidSpreadType(type)) {
+                        var mergedType = tryMergeUnionOfObjectTypeAndEmptyObject(type, inConstContext);
                         if (allPropertiesTable) {
-                            checkSpreadPropOverrides(type, allPropertiesTable, memberDecl);
+                            checkSpreadPropOverrides(mergedType, allPropertiesTable, memberDecl);
                         }
                         offset = propertiesArray.length;
                         if (spread === errorType) {
                             continue;
                         }
-                        spread = getSpreadType(spread, type, node.symbol, objectFlags, inConstContext);
+                        spread = getSpreadType(spread, mergedType, node.symbol, objectFlags, inConstContext);
                     }
                     else {
                         error(memberDecl, ts.Diagnostics.Spread_types_may_only_be_created_from_object_types);
@@ -68985,7 +70283,7 @@
                     // an ordinary function declaration(section 6.1) with no parameters.
                     // A set accessor declaration is processed in the same manner
                     // as an ordinary function declaration with a single parameter and a Void return type.
-                    ts.Debug.assert(memberDecl.kind === 168 /* GetAccessor */ || memberDecl.kind === 169 /* SetAccessor */);
+                    ts.Debug.assert(memberDecl.kind === 170 /* GetAccessor */ || memberDecl.kind === 171 /* SetAccessor */);
                     checkNodeDeferred(memberDecl);
                 }
                 if (computedNameType && !(computedNameType.flags & 8576 /* StringOrNumberLiteralOrUnique */)) {
@@ -68993,6 +70291,9 @@
                         if (isTypeAssignableTo(computedNameType, numberType)) {
                             hasComputedNumberProperty = true;
                         }
+                        else if (isTypeAssignableTo(computedNameType, esSymbolType)) {
+                            hasComputedSymbolProperty = true;
+                        }
                         else {
                             hasComputedStringProperty = true;
                         }
@@ -69010,7 +70311,7 @@
             // type with those properties for which the binding pattern specifies a default value.
             // If the object literal is spread into another object literal, skip this step and let the top-level object
             // literal handle it instead.
-            if (contextualTypeHasPattern && node.parent.kind !== 291 /* SpreadAssignment */) {
+            if (contextualTypeHasPattern && node.parent.kind !== 293 /* SpreadAssignment */) {
                 for (var _d = 0, _e = getPropertiesOfType(contextualType); _d < _e.length; _d++) {
                     var prop = _e[_d];
                     if (!propertiesTable.get(prop.escapedName) && !getPropertyOfType(spread, prop.escapedName)) {
@@ -69038,9 +70339,14 @@
             }
             return createObjectLiteralType();
             function createObjectLiteralType() {
-                var stringIndexInfo = hasComputedStringProperty ? getObjectLiteralIndexInfo(node, offset, propertiesArray, 0 /* String */) : undefined;
-                var numberIndexInfo = hasComputedNumberProperty ? getObjectLiteralIndexInfo(node, offset, propertiesArray, 1 /* Number */) : undefined;
-                var result = createAnonymousType(node.symbol, propertiesTable, ts.emptyArray, ts.emptyArray, stringIndexInfo, numberIndexInfo);
+                var indexInfos = [];
+                if (hasComputedStringProperty)
+                    indexInfos.push(getObjectLiteralIndexInfo(node, offset, propertiesArray, stringType));
+                if (hasComputedNumberProperty)
+                    indexInfos.push(getObjectLiteralIndexInfo(node, offset, propertiesArray, numberType));
+                if (hasComputedSymbolProperty)
+                    indexInfos.push(getObjectLiteralIndexInfo(node, offset, propertiesArray, esSymbolType));
+                var result = createAnonymousType(node.symbol, propertiesTable, ts.emptyArray, ts.emptyArray, indexInfos);
                 result.objectFlags |= objectFlags | 128 /* ObjectLiteral */ | 262144 /* ContainsObjectOrArrayLiteral */;
                 if (isJSObjectLiteral) {
                     result.objectFlags |= 8192 /* JSLiteral */;
@@ -69102,14 +70408,14 @@
             checkJsxChildren(node);
             return getJsxElementTypeAt(node) || anyType;
         }
-        function isUnhyphenatedJsxName(name) {
-            return !ts.stringContains(name, "-");
+        function isHyphenatedJsxName(name) {
+            return ts.stringContains(name, "-");
         }
         /**
          * Returns true iff React would emit this tag name as a string rather than an identifier or qualified name
          */
         function isJsxIntrinsicIdentifier(tagName) {
-            return tagName.kind === 78 /* Identifier */ && ts.isIntrinsicJsxName(tagName.escapedText);
+            return tagName.kind === 79 /* Identifier */ && ts.isIntrinsicJsxName(tagName.escapedText);
         }
         function checkJsxAttribute(node, checkMode) {
             return node.initializer
@@ -69156,7 +70462,7 @@
                     }
                 }
                 else {
-                    ts.Debug.assert(attributeDecl.kind === 283 /* JsxSpreadAttribute */);
+                    ts.Debug.assert(attributeDecl.kind === 285 /* JsxSpreadAttribute */);
                     if (attributesTable.size > 0) {
                         spread = getSpreadType(spread, createJsxAttributesType(), attributes.symbol, objectFlags, /*readonly*/ false);
                         attributesTable = ts.createSymbolTable();
@@ -69182,7 +70488,7 @@
                 }
             }
             // Handle children attribute
-            var parent = openingLikeElement.parent.kind === 274 /* JsxElement */ ? openingLikeElement.parent : undefined;
+            var parent = openingLikeElement.parent.kind === 276 /* JsxElement */ ? openingLikeElement.parent : undefined;
             // We have to check that openingElement of the parent is the one we are visiting as this may not be true for selfClosingElement
             if (parent && parent.openingElement === openingLikeElement && parent.children.length > 0) {
                 var childrenTypes = checkJsxChildren(parent, checkMode);
@@ -69206,7 +70512,7 @@
                     childrenPropSymbol.valueDeclaration.symbol = childrenPropSymbol;
                     var childPropMap = ts.createSymbolTable();
                     childPropMap.set(jsxChildrenPropertyName, childrenPropSymbol);
-                    spread = getSpreadType(spread, createAnonymousType(attributes.symbol, childPropMap, ts.emptyArray, ts.emptyArray, /*stringIndexInfo*/ undefined, /*numberIndexInfo*/ undefined), attributes.symbol, objectFlags, /*readonly*/ false);
+                    spread = getSpreadType(spread, createAnonymousType(attributes.symbol, childPropMap, ts.emptyArray, ts.emptyArray, ts.emptyArray), attributes.symbol, objectFlags, /*readonly*/ false);
                 }
             }
             if (hasSpreadAnyType) {
@@ -69223,7 +70529,7 @@
              */
             function createJsxAttributesType() {
                 objectFlags |= freshObjectLiteralFlag;
-                var result = createAnonymousType(attributes.symbol, attributesTable, ts.emptyArray, ts.emptyArray, /*stringIndexInfo*/ undefined, /*numberIndexInfo*/ undefined);
+                var result = createAnonymousType(attributes.symbol, attributesTable, ts.emptyArray, ts.emptyArray, ts.emptyArray);
                 result.objectFlags |= objectFlags | 128 /* ObjectLiteral */ | 262144 /* ContainsObjectOrArrayLiteral */;
                 return result;
             }
@@ -69239,7 +70545,7 @@
                         childrenTypes.push(stringType);
                     }
                 }
-                else if (child.kind === 284 /* JsxExpression */ && !child.expression) {
+                else if (child.kind === 286 /* JsxExpression */ && !child.expression) {
                     continue; // empty jsx expressions don't *really* count as present children
                 }
                 else {
@@ -69251,11 +70557,12 @@
         function checkSpreadPropOverrides(type, props, spread) {
             for (var _i = 0, _a = getPropertiesOfType(type); _i < _a.length; _i++) {
                 var right = _a[_i];
-                var left = props.get(right.escapedName);
-                var rightType = getTypeOfSymbol(right);
-                if (left && !maybeTypeOfKind(rightType, 98304 /* Nullable */) && !(maybeTypeOfKind(rightType, 3 /* AnyOrUnknown */) && right.flags & 16777216 /* Optional */)) {
-                    var diagnostic = error(left.valueDeclaration, ts.Diagnostics._0_is_specified_more_than_once_so_this_usage_will_be_overwritten, ts.unescapeLeadingUnderscores(left.escapedName));
-                    ts.addRelatedInfo(diagnostic, ts.createDiagnosticForNode(spread, ts.Diagnostics.This_spread_always_overwrites_this_property));
+                if (!(right.flags & 16777216 /* Optional */)) {
+                    var left = props.get(right.escapedName);
+                    if (left) {
+                        var diagnostic = error(left.valueDeclaration, ts.Diagnostics._0_is_specified_more_than_once_so_this_usage_will_be_overwritten, ts.unescapeLeadingUnderscores(left.escapedName));
+                        ts.addRelatedInfo(diagnostic, ts.createDiagnosticForNode(spread, ts.Diagnostics.This_spread_always_overwrites_this_property));
+                    }
                 }
             }
         }
@@ -69293,7 +70600,7 @@
                         return links.resolvedSymbol = intrinsicProp;
                     }
                     // Intrinsic string indexer case
-                    var indexSignatureType = getIndexTypeOfType(intrinsicElementsType, 0 /* String */);
+                    var indexSignatureType = getIndexTypeOfType(intrinsicElementsType, stringType);
                     if (indexSignatureType) {
                         links.jsxFlags |= 2 /* IntrinsicIndexedElement */;
                         return links.resolvedSymbol = intrinsicElementsType.symbol;
@@ -69452,7 +70759,7 @@
                 if (intrinsicProp) {
                     return getTypeOfSymbol(intrinsicProp);
                 }
-                var indexSignatureType = getIndexTypeOfType(intrinsicElementsType, 0 /* String */);
+                var indexSignatureType = getIndexTypeOfType(intrinsicElementsType, stringType);
                 if (indexSignatureType) {
                     return indexSignatureType;
                 }
@@ -69504,7 +70811,7 @@
                 }
                 else if (links.jsxFlags & 2 /* IntrinsicIndexedElement */) {
                     return links.resolvedJsxElementAttributesType =
-                        getIndexTypeOfType(getJsxType(JsxNames.IntrinsicElements, node), 0 /* String */) || errorType;
+                        getIndexTypeOfType(getJsxType(JsxNames.IntrinsicElements, node), stringType) || errorType;
                 }
                 else {
                     return links.resolvedJsxElementAttributesType = errorType;
@@ -69594,11 +70901,13 @@
          */
         function isKnownProperty(targetType, name, isComparingJsxAttributes) {
             if (targetType.flags & 524288 /* Object */) {
-                var resolved = resolveStructuredTypeMembers(targetType);
-                if (resolved.stringIndexInfo ||
-                    resolved.numberIndexInfo && isNumericLiteralName(name) ||
-                    getPropertyOfObjectType(targetType, name) ||
-                    isComparingJsxAttributes && !isUnhyphenatedJsxName(name)) {
+                // For backwards compatibility a symbol-named property is satisfied by a string index signature. This
+                // is incorrect and inconsistent with element access expressions, where it is an error, so eventually
+                // we should remove this exception.
+                if (getPropertyOfObjectType(targetType, name) ||
+                    getApplicableIndexInfoForName(targetType, name) ||
+                    isLateBoundName(name) && getIndexInfoOfType(targetType, stringType) ||
+                    isComparingJsxAttributes && isHyphenatedJsxName(name)) {
                     // For JSXAttributes, if the attribute has a hyphenated name, consider that the attribute to be known.
                     return true;
                 }
@@ -69660,9 +70969,9 @@
         function checkPropertyAccessibility(node, isSuper, writing, type, prop, reportError) {
             if (reportError === void 0) { reportError = true; }
             var flags = ts.getDeclarationModifierFlagsFromSymbol(prop, writing);
-            var errorNode = node.kind === 158 /* QualifiedName */ ? node.right :
-                node.kind === 196 /* ImportType */ ? node :
-                    node.kind === 199 /* BindingElement */ && node.propertyName ? node.propertyName : node.name;
+            var errorNode = node.kind === 159 /* QualifiedName */ ? node.right :
+                node.kind === 198 /* ImportType */ ? node :
+                    node.kind === 201 /* BindingElement */ && node.propertyName ? node.propertyName : node.name;
             if (isSuper) {
                 // TS 1.0 spec (April 2014): 4.8.2
                 // - In a constructor, instance member function, instance member accessor, or
@@ -69819,10 +71128,11 @@
             return propagateOptionalTypeMarker(checkPropertyAccessExpressionOrQualifiedName(node, node.expression, checkNonNullType(nonOptionalType, node.expression), node.name, checkMode), node, nonOptionalType !== leftType);
         }
         function checkQualifiedName(node, checkMode) {
-            return checkPropertyAccessExpressionOrQualifiedName(node, node.left, checkNonNullExpression(node.left), node.right, checkMode);
+            var leftType = ts.isPartOfTypeQuery(node) && ts.isThisIdentifier(node.left) ? checkNonNullType(checkThisExpression(node.left), node.left) : checkNonNullExpression(node.left);
+            return checkPropertyAccessExpressionOrQualifiedName(node, node.left, leftType, node.right, checkMode);
         }
         function isMethodAccessForCall(node) {
-            while (node.parent.kind === 208 /* ParenthesizedExpression */) {
+            while (node.parent.kind === 210 /* ParenthesizedExpression */) {
                 node = node.parent;
             }
             return ts.isCallOrNewExpression(node.parent) && node.parent.expression === node;
@@ -69957,9 +71267,11 @@
             }
             var propType;
             if (!prop) {
-                var indexInfo = !ts.isPrivateIdentifier(right) && (assignmentKind === 0 /* None */ || !isGenericObjectType(leftType) || isThisTypeParameter(leftType)) ? getIndexInfoOfType(apparentType, 0 /* String */) : undefined;
+                var indexInfo = !ts.isPrivateIdentifier(right) && (assignmentKind === 0 /* None */ || !isGenericObjectType(leftType) || isThisTypeParameter(leftType)) ?
+                    getApplicableIndexInfoForName(apparentType, right.escapedText) : undefined;
                 if (!(indexInfo && indexInfo.type)) {
-                    if (isJSLiteralType(leftType)) {
+                    var isUncheckedJS = isUncheckedJSSuggestion(node, leftType.symbol, /*excludeClasses*/ true);
+                    if (!isUncheckedJS && isJSLiteralType(leftType)) {
                         return anyType;
                     }
                     if (leftType.symbol === globalThisSymbol) {
@@ -69972,7 +71284,7 @@
                         return anyType;
                     }
                     if (right.escapedText && !checkAndReportErrorForExtendingInterface(node)) {
-                        reportNonexistentProperty(right, isThisTypeParameter(leftType) ? apparentType : leftType);
+                        reportNonexistentProperty(right, isThisTypeParameter(leftType) ? apparentType : leftType, isUncheckedJS);
                     }
                     return errorType;
                 }
@@ -69992,7 +71304,7 @@
                 markPropertyAsReferenced(prop, node, isSelfTypeAccess(left, parentSymbol));
                 getNodeLinks(node).resolvedSymbol = prop;
                 var writing = ts.isWriteAccess(node);
-                checkPropertyAccessibility(node, left.kind === 105 /* SuperKeyword */, writing, apparentType, prop);
+                checkPropertyAccessibility(node, left.kind === 106 /* SuperKeyword */, writing, apparentType, prop);
                 if (isAssignmentToReadonlyEntity(node, prop, assignmentKind)) {
                     error(right, ts.Diagnostics.Cannot_assign_to_0_because_it_is_a_read_only_property, ts.idText(right));
                     return errorType;
@@ -70001,16 +71313,37 @@
             }
             return getFlowTypeOfAccessExpression(node, prop, propType, right, checkMode);
         }
+        /**
+         * Determines whether a did-you-mean error should be a suggestion in an unchecked JS file.
+         * Only applies to unchecked JS files without checkJS, // @ts-check or // @ts-nocheck
+         * It does not suggest when the suggestion:
+         * - Is from a global file that is different from the reference file, or
+         * - (optionally) Is a class, or is a this.x property access expression
+         */
+        function isUncheckedJSSuggestion(node, suggestion, excludeClasses) {
+            var file = ts.getSourceFileOfNode(node);
+            if (file) {
+                if (compilerOptions.checkJs === undefined && file.checkJsDirective === undefined && (file.scriptKind === 1 /* JS */ || file.scriptKind === 2 /* JSX */)) {
+                    var declarationFile = ts.forEach(suggestion === null || suggestion === void 0 ? void 0 : suggestion.declarations, ts.getSourceFileOfNode);
+                    return !(file !== declarationFile && !!declarationFile && isGlobalSourceFile(declarationFile))
+                        && !(excludeClasses && suggestion && suggestion.flags & 32 /* Class */)
+                        && !(!!node && excludeClasses && ts.isPropertyAccessExpression(node) && node.expression.kind === 108 /* ThisKeyword */);
+                }
+            }
+            return false;
+        }
         function getFlowTypeOfAccessExpression(node, prop, propType, errorNode, checkMode) {
             // Only compute control flow type if this is a property access expression that isn't an
             // assignment target, and the referenced property was declared as a variable, property,
             // accessor, or optional method.
             var assignmentKind = ts.getAssignmentTargetKind(node);
-            if (assignmentKind === 1 /* Definite */ ||
-                prop &&
-                    !(prop.flags & (3 /* Variable */ | 4 /* Property */ | 98304 /* Accessor */))
-                    && !(prop.flags & 8192 /* Method */ && propType.flags & 1048576 /* Union */)
-                    && !isDuplicatedCommonJSExport(prop.declarations)) {
+            if (assignmentKind === 1 /* Definite */) {
+                return removeMissingType(propType, !!(prop && prop.flags & 16777216 /* Optional */));
+            }
+            if (prop &&
+                !(prop.flags & (3 /* Variable */ | 4 /* Property */ | 98304 /* Accessor */))
+                && !(prop.flags & 8192 /* Method */ && propType.flags & 1048576 /* Union */)
+                && !isDuplicatedCommonJSExport(prop.declarations)) {
                 return propType;
             }
             if (propType === autoType) {
@@ -70022,12 +71355,14 @@
             // and if we are in a constructor of the same class as the property declaration, assume that
             // the property is uninitialized at the top of the control flow.
             var assumeUninitialized = false;
-            if (strictNullChecks && strictPropertyInitialization && ts.isAccessExpression(node) && node.expression.kind === 107 /* ThisKeyword */) {
+            if (strictNullChecks && strictPropertyInitialization && ts.isAccessExpression(node) && node.expression.kind === 108 /* ThisKeyword */) {
                 var declaration = prop && prop.valueDeclaration;
-                if (declaration && isInstancePropertyWithoutInitializer(declaration)) {
-                    var flowContainer = getControlFlowContainer(node);
-                    if (flowContainer.kind === 167 /* Constructor */ && flowContainer.parent === declaration.parent && !(declaration.flags & 8388608 /* Ambient */)) {
-                        assumeUninitialized = true;
+                if (declaration && isPropertyWithoutInitializer(declaration)) {
+                    if (!ts.isStatic(declaration)) {
+                        var flowContainer = getControlFlowContainer(node);
+                        if (flowContainer.kind === 169 /* Constructor */ && flowContainer.parent === declaration.parent && !(declaration.flags & 8388608 /* Ambient */)) {
+                            assumeUninitialized = true;
+                        }
                     }
                 }
             }
@@ -70052,15 +71387,15 @@
             }
             var diagnosticMessage;
             var declarationName = ts.idText(right);
-            if (isInPropertyInitializer(node)
+            if (isInPropertyInitializerOrClassStaticBlock(node)
                 && !isOptionalPropertyDeclaration(valueDeclaration)
                 && !(ts.isAccessExpression(node) && ts.isAccessExpression(node.expression))
                 && !isBlockScopedNameDeclaredBeforeUse(valueDeclaration, right)
                 && (compilerOptions.useDefineForClassFields || !isPropertyDeclaredInAncestorClass(prop))) {
                 diagnosticMessage = error(right, ts.Diagnostics.Property_0_is_used_before_its_initialization, declarationName);
             }
-            else if (valueDeclaration.kind === 253 /* ClassDeclaration */ &&
-                node.parent.kind !== 174 /* TypeReference */ &&
+            else if (valueDeclaration.kind === 255 /* ClassDeclaration */ &&
+                node.parent.kind !== 176 /* TypeReference */ &&
                 !(valueDeclaration.flags & 8388608 /* Ambient */) &&
                 !isBlockScopedNameDeclaredBeforeUse(valueDeclaration, right)) {
                 diagnosticMessage = error(right, ts.Diagnostics.Class_0_used_before_its_declaration, declarationName);
@@ -70069,26 +71404,29 @@
                 ts.addRelatedInfo(diagnosticMessage, ts.createDiagnosticForNode(valueDeclaration, ts.Diagnostics._0_is_declared_here, declarationName));
             }
         }
-        function isInPropertyInitializer(node) {
+        function isInPropertyInitializerOrClassStaticBlock(node) {
             return !!ts.findAncestor(node, function (node) {
                 switch (node.kind) {
-                    case 164 /* PropertyDeclaration */:
+                    case 165 /* PropertyDeclaration */:
                         return true;
-                    case 289 /* PropertyAssignment */:
-                    case 166 /* MethodDeclaration */:
-                    case 168 /* GetAccessor */:
-                    case 169 /* SetAccessor */:
-                    case 291 /* SpreadAssignment */:
-                    case 159 /* ComputedPropertyName */:
-                    case 229 /* TemplateSpan */:
-                    case 284 /* JsxExpression */:
-                    case 281 /* JsxAttribute */:
-                    case 282 /* JsxAttributes */:
-                    case 283 /* JsxSpreadAttribute */:
-                    case 276 /* JsxOpeningElement */:
-                    case 224 /* ExpressionWithTypeArguments */:
-                    case 287 /* HeritageClause */:
+                    case 291 /* PropertyAssignment */:
+                    case 167 /* MethodDeclaration */:
+                    case 170 /* GetAccessor */:
+                    case 171 /* SetAccessor */:
+                    case 293 /* SpreadAssignment */:
+                    case 160 /* ComputedPropertyName */:
+                    case 231 /* TemplateSpan */:
+                    case 286 /* JsxExpression */:
+                    case 283 /* JsxAttribute */:
+                    case 284 /* JsxAttributes */:
+                    case 285 /* JsxSpreadAttribute */:
+                    case 278 /* JsxOpeningElement */:
+                    case 226 /* ExpressionWithTypeArguments */:
+                    case 289 /* HeritageClause */:
                         return false;
+                    case 212 /* ArrowFunction */:
+                    case 236 /* ExpressionStatement */:
+                        return ts.isBlock(node.parent) && ts.isClassStaticBlockDeclaration(node.parent.parent) ? true : "quit";
                     default:
                         return ts.isExpressionNode(node) ? false : "quit";
                 }
@@ -70121,13 +71459,13 @@
             }
             return getIntersectionType(x);
         }
-        function reportNonexistentProperty(propNode, containingType) {
+        function reportNonexistentProperty(propNode, containingType, isUncheckedJS) {
             var errorInfo;
             var relatedInfo;
             if (!ts.isPrivateIdentifier(propNode) && containingType.flags & 1048576 /* Union */ && !(containingType.flags & 131068 /* Primitive */)) {
                 for (var _i = 0, _a = containingType.types; _i < _a.length; _i++) {
                     var subtype = _a[_i];
-                    if (!getPropertyOfType(subtype, propNode.escapedText) && !getIndexInfoOfType(subtype, 0 /* String */)) {
+                    if (!getPropertyOfType(subtype, propNode.escapedText) && !getApplicableIndexInfoForName(subtype, propNode.escapedText)) {
                         errorInfo = ts.chainDiagnosticMessages(errorInfo, ts.Diagnostics.Property_0_does_not_exist_on_type_1, ts.declarationNameToString(propNode), typeToString(subtype));
                         break;
                     }
@@ -70155,7 +71493,8 @@
                         var suggestion = getSuggestedSymbolForNonexistentProperty(propNode, containingType);
                         if (suggestion !== undefined) {
                             var suggestedName = ts.symbolName(suggestion);
-                            errorInfo = ts.chainDiagnosticMessages(errorInfo, ts.Diagnostics.Property_0_does_not_exist_on_type_1_Did_you_mean_2, missingProperty, container, suggestedName);
+                            var message = isUncheckedJS ? ts.Diagnostics.Property_0_may_not_exist_on_type_1_Did_you_mean_2 : ts.Diagnostics.Property_0_does_not_exist_on_type_1_Did_you_mean_2;
+                            errorInfo = ts.chainDiagnosticMessages(errorInfo, message, missingProperty, container, suggestedName);
                             relatedInfo = suggestion.valueDeclaration && ts.createDiagnosticForNode(suggestion.valueDeclaration, ts.Diagnostics._0_is_declared_here, suggestedName);
                         }
                         else {
@@ -70171,7 +71510,7 @@
             if (relatedInfo) {
                 ts.addRelatedInfo(resultDiagnostic, relatedInfo);
             }
-            diagnostics.add(resultDiagnostic);
+            addErrorOrSuggestion(!isUncheckedJS, resultDiagnostic);
         }
         function containerSeemsToBeEmptyDomElement(containingType) {
             return (compilerOptions.lib && !compilerOptions.lib.includes("dom")) &&
@@ -70180,7 +71519,7 @@
         }
         function typeHasStaticProperty(propName, containingType) {
             var prop = containingType.symbol && getPropertyOfType(getTypeOfSymbol(containingType.symbol), propName);
-            return prop !== undefined && !!prop.valueDeclaration && ts.hasSyntacticModifier(prop.valueDeclaration, 32 /* Static */);
+            return prop !== undefined && !!prop.valueDeclaration && ts.isStatic(prop.valueDeclaration);
         }
         function getSuggestedLibForNonExistentName(name) {
             var missingName = diagnosticName(name);
@@ -70210,6 +71549,9 @@
                 }
             }
         }
+        function getSuggestedSymbolForNonexistentClassMember(name, baseType) {
+            return getSpellingSuggestionForName(name, getPropertiesOfType(baseType), 106500 /* ClassMember */);
+        }
         function getSuggestedSymbolForNonexistentProperty(name, containingType) {
             var props = getPropertiesOfType(containingType);
             if (typeof name !== "string") {
@@ -70337,21 +71679,21 @@
             (ts.getCheckFlags(prop) & 1 /* Instantiated */ ? getSymbolLinks(prop).target : prop).isReferenced = 67108863 /* All */;
         }
         function isSelfTypeAccess(name, parent) {
-            return name.kind === 107 /* ThisKeyword */
+            return name.kind === 108 /* ThisKeyword */
                 || !!parent && ts.isEntityNameExpression(name) && parent === getResolvedSymbol(ts.getFirstIdentifier(name));
         }
         function isValidPropertyAccess(node, propertyName) {
             switch (node.kind) {
-                case 202 /* PropertyAccessExpression */:
-                    return isValidPropertyAccessWithType(node, node.expression.kind === 105 /* SuperKeyword */, propertyName, getWidenedType(checkExpression(node.expression)));
-                case 158 /* QualifiedName */:
+                case 204 /* PropertyAccessExpression */:
+                    return isValidPropertyAccessWithType(node, node.expression.kind === 106 /* SuperKeyword */, propertyName, getWidenedType(checkExpression(node.expression)));
+                case 159 /* QualifiedName */:
                     return isValidPropertyAccessWithType(node, /*isSuper*/ false, propertyName, getWidenedType(checkExpression(node.left)));
-                case 196 /* ImportType */:
+                case 198 /* ImportType */:
                     return isValidPropertyAccessWithType(node, /*isSuper*/ false, propertyName, getTypeFromTypeNode(node));
             }
         }
         function isValidPropertyAccessForCompletions(node, type, property) {
-            return isValidPropertyAccessWithType(node, node.kind === 202 /* PropertyAccessExpression */ && node.expression.kind === 105 /* SuperKeyword */, property.escapedName, type);
+            return isValidPropertyAccessWithType(node, node.kind === 204 /* PropertyAccessExpression */ && node.expression.kind === 106 /* SuperKeyword */, property.escapedName, type);
             // Previously we validated the 'this' type of methods but this adversely affected performance. See #31377 for more context.
         }
         function isValidPropertyAccessWithType(node, isSuper, propertyName, type) {
@@ -70374,13 +71716,13 @@
          */
         function getForInVariableSymbol(node) {
             var initializer = node.initializer;
-            if (initializer.kind === 251 /* VariableDeclarationList */) {
+            if (initializer.kind === 253 /* VariableDeclarationList */) {
                 var variable = initializer.declarations[0];
                 if (variable && !ts.isBindingPattern(variable.name)) {
                     return getSymbolOfNode(variable);
                 }
             }
-            else if (initializer.kind === 78 /* Identifier */) {
+            else if (initializer.kind === 79 /* Identifier */) {
                 return getResolvedSymbol(initializer);
             }
             return undefined;
@@ -70389,7 +71731,7 @@
          * Return true if the given type is considered to have numeric property names.
          */
         function hasNumericPropertyNames(type) {
-            return getIndexTypeOfType(type, 1 /* Number */) && !getIndexTypeOfType(type, 0 /* String */);
+            return getIndexInfosOfType(type).length === 1 && !!getIndexInfoOfType(type, numberType);
         }
         /**
          * Return true if given node is an expression consisting of an identifier (possibly parenthesized)
@@ -70397,13 +71739,13 @@
          */
         function isForInVariableForNumericPropertyNames(expr) {
             var e = ts.skipParentheses(expr);
-            if (e.kind === 78 /* Identifier */) {
+            if (e.kind === 79 /* Identifier */) {
                 var symbol = getResolvedSymbol(e);
                 if (symbol.flags & 3 /* Variable */) {
                     var child = expr;
                     var node = expr.parent;
                     while (node) {
-                        if (node.kind === 239 /* ForInStatement */ &&
+                        if (node.kind === 241 /* ForInStatement */ &&
                             child === node.statement &&
                             getForInVariableSymbol(node) === symbol &&
                             hasNumericPropertyNames(getTypeOfExpression(node.expression))) {
@@ -70438,9 +71780,9 @@
             }
             var effectiveIndexType = isForInVariableForNumericPropertyNames(indexExpression) ? numberType : indexType;
             var accessFlags = ts.isAssignmentTarget(node) ?
-                2 /* Writing */ | (isGenericObjectType(objectType) && !isThisTypeParameter(objectType) ? 1 /* NoIndexSignatures */ : 0) :
-                0 /* None */;
-            var indexedAccessType = getIndexedAccessTypeOrUndefined(objectType, effectiveIndexType, /*noUncheckedIndexedAccessCandidate*/ undefined, node, accessFlags | 16 /* ExpressionPosition */) || errorType;
+                4 /* Writing */ | (isGenericObjectType(objectType) && !isThisTypeParameter(objectType) ? 2 /* NoIndexSignatures */ : 0) :
+                32 /* ExpressionPosition */;
+            var indexedAccessType = getIndexedAccessTypeOrUndefined(objectType, effectiveIndexType, accessFlags, node) || errorType;
             return checkIndexedAccessIndexType(getFlowTypeOfAccessExpression(node, getNodeLinks(node).resolvedSymbol, indexedAccessType, indexExpression, checkMode), node);
         }
         function callLikeExpressionMayHaveTypeArguments(node) {
@@ -70452,13 +71794,13 @@
                 // This gets us diagnostics for the type arguments and marks them as referenced.
                 ts.forEach(node.typeArguments, checkSourceElement);
             }
-            if (node.kind === 206 /* TaggedTemplateExpression */) {
+            if (node.kind === 208 /* TaggedTemplateExpression */) {
                 checkExpression(node.template);
             }
             else if (ts.isJsxOpeningLikeElement(node)) {
                 checkExpression(node.attributes);
             }
-            else if (node.kind !== 162 /* Decorator */) {
+            else if (node.kind !== 163 /* Decorator */) {
                 ts.forEach(node.arguments, function (argument) {
                     checkExpression(argument);
                 });
@@ -70522,7 +71864,7 @@
             }
         }
         function isSpreadArgument(arg) {
-            return !!arg && (arg.kind === 221 /* SpreadElement */ || arg.kind === 228 /* SyntheticExpression */ && arg.isSpread);
+            return !!arg && (arg.kind === 223 /* SpreadElement */ || arg.kind === 230 /* SyntheticExpression */ && arg.isSpread);
         }
         function getSpreadArgumentIndex(args) {
             return ts.findIndex(args, isSpreadArgument);
@@ -70539,9 +71881,9 @@
             var callIsIncomplete = false; // In incomplete call we want to be lenient when we have too few arguments
             var effectiveParameterCount = getParameterCount(signature);
             var effectiveMinimumArguments = getMinArgumentCount(signature);
-            if (node.kind === 206 /* TaggedTemplateExpression */) {
+            if (node.kind === 208 /* TaggedTemplateExpression */) {
                 argCount = args.length;
-                if (node.template.kind === 219 /* TemplateExpression */) {
+                if (node.template.kind === 221 /* TemplateExpression */) {
                     // If a tagged template expression lacks a tail literal, the call is incomplete.
                     // Specifically, a template only can end in a TemplateTail or a Missing literal.
                     var lastSpan = ts.last(node.template.templateSpans); // we should always have at least one span.
@@ -70556,7 +71898,7 @@
                     callIsIncomplete = !!templateLiteral.isUnterminated;
                 }
             }
-            else if (node.kind === 162 /* Decorator */) {
+            else if (node.kind === 163 /* Decorator */) {
                 argCount = getDecoratorArgumentCount(node, signature);
             }
             else if (ts.isJsxOpeningLikeElement(node)) {
@@ -70570,7 +71912,7 @@
             }
             else if (!node.arguments) {
                 // This only happens when we have something of the form: 'new C'
-                ts.Debug.assert(node.kind === 205 /* NewExpression */);
+                ts.Debug.assert(node.kind === 207 /* NewExpression */);
                 return getMinArgumentCount(signature) === 0;
             }
             else {
@@ -70619,7 +71961,7 @@
         function getSingleSignature(type, kind, allowMembers) {
             if (type.flags & 524288 /* Object */) {
                 var resolved = resolveStructuredTypeMembers(type);
-                if (allowMembers || resolved.properties.length === 0 && !resolved.stringIndexInfo && !resolved.numberIndexInfo) {
+                if (allowMembers || resolved.properties.length === 0 && resolved.indexInfos.length === 0) {
                     if (kind === 0 /* Call */ && resolved.callSignatures.length === 1 && resolved.constructSignatures.length === 0) {
                         return resolved.callSignatures[0];
                     }
@@ -70673,7 +72015,7 @@
             // example, given a 'function wrap<T, U>(cb: (x: T) => U): (x: T) => U' and a call expression
             // 'let f: (x: string) => number = wrap(s => s.length)', we infer from the declared type of 'f' to the
             // return type of 'wrap'.
-            if (node.kind !== 162 /* Decorator */) {
+            if (node.kind !== 163 /* Decorator */) {
                 var contextualType = getContextualType(node, ts.every(signature.typeParameters, function (p) { return !!getDefaultFromTypeParameter(p); }) ? 8 /* SkipBindingPatterns */ : 0 /* None */);
                 if (contextualType) {
                     // We clone the inference context to avoid disturbing a resolution in progress for an
@@ -70721,7 +72063,7 @@
             }
             for (var i = 0; i < argCount; i++) {
                 var arg = args[i];
-                if (arg.kind !== 223 /* OmittedExpression */) {
+                if (arg.kind !== 225 /* OmittedExpression */) {
                     var paramType = getTypeAtPosition(signature, i);
                     var argType = checkExpressionWithContextualType(arg, paramType, context, checkMode);
                     inferTypes(context.inferences, argType, paramType);
@@ -70745,7 +72087,7 @@
                 if (isSpreadArgument(arg)) {
                     // We are inferring from a spread expression in the last argument position, i.e. both the parameter
                     // and the argument are ...x forms.
-                    return getMutableArrayOrTupleType(arg.kind === 228 /* SyntheticExpression */ ? arg.type :
+                    return getMutableArrayOrTupleType(arg.kind === 230 /* SyntheticExpression */ ? arg.type :
                         checkExpressionWithContextualType(arg.expression, restType, context, checkMode));
                 }
             }
@@ -70755,24 +72097,24 @@
             for (var i = index; i < argCount; i++) {
                 var arg = args[i];
                 if (isSpreadArgument(arg)) {
-                    var spreadType = arg.kind === 228 /* SyntheticExpression */ ? arg.type : checkExpression(arg.expression);
+                    var spreadType = arg.kind === 230 /* SyntheticExpression */ ? arg.type : checkExpression(arg.expression);
                     if (isArrayLikeType(spreadType)) {
                         types.push(spreadType);
                         flags.push(8 /* Variadic */);
                     }
                     else {
-                        types.push(checkIteratedTypeOrElementType(33 /* Spread */, spreadType, undefinedType, arg.kind === 221 /* SpreadElement */ ? arg.expression : arg));
+                        types.push(checkIteratedTypeOrElementType(33 /* Spread */, spreadType, undefinedType, arg.kind === 223 /* SpreadElement */ ? arg.expression : arg));
                         flags.push(4 /* Rest */);
                     }
                 }
                 else {
-                    var contextualType = getIndexedAccessType(restType, getLiteralType(i - index));
+                    var contextualType = getIndexedAccessType(restType, getNumberLiteralType(i - index), 256 /* Contextual */);
                     var argType = checkExpressionWithContextualType(arg, contextualType, context, checkMode);
                     var hasPrimitiveContextualType = maybeTypeOfKind(contextualType, 131068 /* Primitive */ | 4194304 /* Index */ | 134217728 /* TemplateLiteral */ | 268435456 /* StringMapping */);
                     types.push(hasPrimitiveContextualType ? getRegularTypeOfLiteralType(argType) : getWidenedLiteralType(argType));
                     flags.push(1 /* Required */);
                 }
-                if (arg.kind === 228 /* SyntheticExpression */ && arg.tupleNameSource) {
+                if (arg.kind === 230 /* SyntheticExpression */ && arg.tupleNameSource) {
                     names.push(arg.tupleNameSource);
                 }
             }
@@ -70916,7 +72258,7 @@
                 return undefined;
             }
             var thisType = getThisTypeOfSignature(signature);
-            if (thisType && thisType !== voidType && node.kind !== 205 /* NewExpression */) {
+            if (thisType && thisType !== voidType && node.kind !== 207 /* NewExpression */) {
                 // If the called expression is not of the form `x.f` or `x["f"]`, then sourceType = voidType
                 // If the signature's 'this' type is voidType, then the check is skipped -- anything is compatible.
                 // If the expression is a new expression, then the check is skipped.
@@ -70934,7 +72276,7 @@
             var argCount = restType ? Math.min(getParameterCount(signature) - 1, args.length) : args.length;
             for (var i = 0; i < argCount; i++) {
                 var arg = args[i];
-                if (arg.kind !== 223 /* OmittedExpression */) {
+                if (arg.kind !== 225 /* OmittedExpression */) {
                     var paramType = getTypeAtPosition(signature, i);
                     var argType = checkExpressionWithContextualType(arg, paramType, /*inferenceContext*/ undefined, checkMode);
                     // If one or more arguments are still excluded (as indicated by CheckMode.SkipContextSensitive),
@@ -70979,8 +72321,10 @@
          * Returns the this argument in calls like x.f(...) and x[f](...). Undefined otherwise.
          */
         function getThisArgumentOfCall(node) {
-            if (node.kind === 204 /* CallExpression */) {
-                var callee = ts.skipOuterExpressions(node.expression);
+            var expression = node.kind === 206 /* CallExpression */ ? node.expression :
+                node.kind === 208 /* TaggedTemplateExpression */ ? node.tag : undefined;
+            if (expression) {
+                var callee = ts.skipOuterExpressions(expression);
                 if (ts.isAccessExpression(callee)) {
                     return callee.expression;
                 }
@@ -70996,17 +72340,17 @@
          * Returns the effective arguments for an expression that works like a function invocation.
          */
         function getEffectiveCallArguments(node) {
-            if (node.kind === 206 /* TaggedTemplateExpression */) {
+            if (node.kind === 208 /* TaggedTemplateExpression */) {
                 var template = node.template;
                 var args_3 = [createSyntheticExpression(template, getGlobalTemplateStringsArrayType())];
-                if (template.kind === 219 /* TemplateExpression */) {
+                if (template.kind === 221 /* TemplateExpression */) {
                     ts.forEach(template.templateSpans, function (span) {
                         args_3.push(span.expression);
                     });
                 }
                 return args_3;
             }
-            if (node.kind === 162 /* Decorator */) {
+            if (node.kind === 163 /* Decorator */) {
                 return getEffectiveDecoratorArguments(node);
             }
             if (ts.isJsxOpeningLikeElement(node)) {
@@ -71017,10 +72361,10 @@
             if (spreadIndex >= 0) {
                 // Create synthetic arguments from spreads of tuple types.
                 var effectiveArgs_1 = args.slice(0, spreadIndex);
-                var _loop_21 = function (i) {
+                var _loop_23 = function (i) {
                     var arg = args[i];
                     // We can call checkExpressionCached because spread expressions never have a contextual type.
-                    var spreadType = arg.kind === 221 /* SpreadElement */ && (flowLoopCount ? checkExpression(arg.expression) : checkExpressionCached(arg.expression));
+                    var spreadType = arg.kind === 223 /* SpreadElement */ && (flowLoopCount ? checkExpression(arg.expression) : checkExpressionCached(arg.expression));
                     if (spreadType && isTupleType(spreadType)) {
                         ts.forEach(getTypeArguments(spreadType), function (t, i) {
                             var _a;
@@ -71034,7 +72378,7 @@
                     }
                 };
                 for (var i = spreadIndex; i < args.length; i++) {
-                    _loop_21(i);
+                    _loop_23(i);
                 }
                 return effectiveArgs_1;
             }
@@ -71047,30 +72391,30 @@
             var parent = node.parent;
             var expr = node.expression;
             switch (parent.kind) {
-                case 253 /* ClassDeclaration */:
-                case 222 /* ClassExpression */:
+                case 255 /* ClassDeclaration */:
+                case 224 /* ClassExpression */:
                     // For a class decorator, the `target` is the type of the class (e.g. the
                     // "static" or "constructor" side of the class).
                     return [
                         createSyntheticExpression(expr, getTypeOfSymbol(getSymbolOfNode(parent)))
                     ];
-                case 161 /* Parameter */:
+                case 162 /* Parameter */:
                     // A parameter declaration decorator will have three arguments (see
                     // `ParameterDecorator` in core.d.ts).
                     var func = parent.parent;
                     return [
-                        createSyntheticExpression(expr, parent.parent.kind === 167 /* Constructor */ ? getTypeOfSymbol(getSymbolOfNode(func)) : errorType),
+                        createSyntheticExpression(expr, parent.parent.kind === 169 /* Constructor */ ? getTypeOfSymbol(getSymbolOfNode(func)) : errorType),
                         createSyntheticExpression(expr, anyType),
                         createSyntheticExpression(expr, numberType)
                     ];
-                case 164 /* PropertyDeclaration */:
-                case 166 /* MethodDeclaration */:
-                case 168 /* GetAccessor */:
-                case 169 /* SetAccessor */:
+                case 165 /* PropertyDeclaration */:
+                case 167 /* MethodDeclaration */:
+                case 170 /* GetAccessor */:
+                case 171 /* SetAccessor */:
                     // A method or accessor declaration decorator will have two or three arguments (see
                     // `PropertyDecorator` and `MethodDecorator` in core.d.ts). If we are emitting decorators
                     // for ES3, we will only pass two arguments.
-                    var hasPropDesc = parent.kind !== 164 /* PropertyDeclaration */ && languageVersion !== 0 /* ES3 */;
+                    var hasPropDesc = parent.kind !== 165 /* PropertyDeclaration */ && languageVersion !== 0 /* ES3 */;
                     return [
                         createSyntheticExpression(expr, getParentTypeOfClassElement(parent)),
                         createSyntheticExpression(expr, getClassElementPropertyKeyType(parent)),
@@ -71084,17 +72428,17 @@
          */
         function getDecoratorArgumentCount(node, signature) {
             switch (node.parent.kind) {
-                case 253 /* ClassDeclaration */:
-                case 222 /* ClassExpression */:
+                case 255 /* ClassDeclaration */:
+                case 224 /* ClassExpression */:
                     return 1;
-                case 164 /* PropertyDeclaration */:
+                case 165 /* PropertyDeclaration */:
                     return 2;
-                case 166 /* MethodDeclaration */:
-                case 168 /* GetAccessor */:
-                case 169 /* SetAccessor */:
+                case 167 /* MethodDeclaration */:
+                case 170 /* GetAccessor */:
+                case 171 /* SetAccessor */:
                     // For ES3 or decorators with only two parameters we supply only two arguments
                     return languageVersion === 0 /* ES3 */ || signature.parameters.length <= 2 ? 2 : 3;
-                case 161 /* Parameter */:
+                case 162 /* Parameter */:
                     return 3;
                 default:
                     return ts.Debug.fail();
@@ -71230,15 +72574,15 @@
             return ts.createDiagnosticForNodeArray(ts.getSourceFileOfNode(node), typeArguments, ts.Diagnostics.Expected_0_type_arguments_but_got_1, belowArgCount === -Infinity ? aboveArgCount : belowArgCount, argCount);
         }
         function resolveCall(node, signatures, candidatesOutArray, checkMode, callChainFlags, fallbackError) {
-            var isTaggedTemplate = node.kind === 206 /* TaggedTemplateExpression */;
-            var isDecorator = node.kind === 162 /* Decorator */;
+            var isTaggedTemplate = node.kind === 208 /* TaggedTemplateExpression */;
+            var isDecorator = node.kind === 163 /* Decorator */;
             var isJsxOpeningOrSelfClosingElement = ts.isJsxOpeningLikeElement(node);
             var reportErrors = !candidatesOutArray && produceDiagnostics;
             var typeArguments;
             if (!isDecorator) {
                 typeArguments = node.typeArguments;
                 // We already perform checking on the type arguments on the class declaration itself.
-                if (isTaggedTemplate || isJsxOpeningOrSelfClosingElement || node.expression.kind !== 105 /* SuperKeyword */) {
+                if (isTaggedTemplate || isJsxOpeningOrSelfClosingElement || node.expression.kind !== 106 /* SuperKeyword */) {
                     ts.forEach(typeArguments, checkSourceElement);
                 }
             }
@@ -71293,7 +72637,7 @@
             var result;
             // If we are in signature help, a trailing comma indicates that we intend to provide another argument,
             // so we will only accept overloads with arity at least 1 higher than the current number of provided arguments.
-            var signatureHelpTrailingComma = !!(checkMode & 16 /* IsForSignatureHelp */) && node.kind === 204 /* CallExpression */ && node.arguments.hasTrailingComma;
+            var signatureHelpTrailingComma = !!(checkMode & 16 /* IsForSignatureHelp */) && node.kind === 206 /* CallExpression */ && node.arguments.hasTrailingComma;
             // Section 4.12.1:
             // if the candidate list contains one or more signatures for which the type of each argument
             // expression is a subtype of each corresponding parameter type, the return type of the first
@@ -71347,7 +72691,7 @@
                         var min_3 = Number.MAX_VALUE;
                         var minIndex = 0;
                         var i_1 = 0;
-                        var _loop_22 = function (c) {
+                        var _loop_24 = function (c) {
                             var chain_2 = function () { return ts.chainDiagnosticMessages(/*details*/ undefined, ts.Diagnostics.Overload_0_of_1_2_gave_the_following_error, i_1 + 1, candidates.length, signatureToString(c)); };
                             var diags_2 = getSignatureApplicabilityError(node, args, c, assignableRelation, 0 /* Normal */, /*reportErrors*/ true, chain_2);
                             if (diags_2) {
@@ -71365,14 +72709,14 @@
                         };
                         for (var _a = 0, candidatesForArgumentError_1 = candidatesForArgumentError; _a < candidatesForArgumentError_1.length; _a++) {
                             var c = candidatesForArgumentError_1[_a];
-                            _loop_22(c);
+                            _loop_24(c);
                         }
                         var diags_3 = max > 1 ? allDiagnostics[minIndex] : ts.flatten(allDiagnostics);
                         ts.Debug.assert(diags_3.length > 0, "No errors reported for 3 or fewer overload signatures");
                         var chain = ts.chainDiagnosticMessages(ts.map(diags_3, function (d) { return typeof d.messageText === "string" ? d : d.messageText; }), ts.Diagnostics.No_overload_matches_this_call);
                         // The below is a spread to guarantee we get a new (mutable) array - our `flatMap` helper tries to do "smart" optimizations where it reuses input
                         // arrays and the emptyArray singleton where possible, which is decidedly not what we want while we're still constructing this diagnostic
-                        var related = __spreadArray([], ts.flatMap(diags_3, function (d) { return d.relatedInformation; }));
+                        var related = __spreadArray([], ts.flatMap(diags_3, function (d) { return d.relatedInformation; }), true);
                         var diag = void 0;
                         if (ts.every(diags_3, function (d) { return d.start === diags_3[0].start && d.length === diags_3[0].length && d.file === diags_3[0].file; })) {
                             var _b = diags_3[0], file = _b.file, start = _b.start, length_7 = _b.length;
@@ -71523,7 +72867,7 @@
             }
             var _a = ts.minAndMax(candidates, getNumNonRestParameters), minArgumentCount = _a.min, maxNonRestParam = _a.max;
             var parameters = [];
-            var _loop_23 = function (i) {
+            var _loop_25 = function (i) {
                 var symbols = ts.mapDefined(candidates, function (s) { return signatureHasRestParameter(s) ?
                     i < s.parameters.length - 1 ? s.parameters[i] : ts.last(s.parameters) :
                     i < s.parameters.length ? s.parameters[i] : undefined; });
@@ -71531,7 +72875,7 @@
                 parameters.push(createCombinedSymbolFromTypes(symbols, ts.mapDefined(candidates, function (candidate) { return tryGetTypeAtPosition(candidate, i); })));
             };
             for (var i = 0; i < maxNonRestParam; i++) {
-                _loop_23(i);
+                _loop_25(i);
             }
             var restParameterSymbols = ts.mapDefined(candidates, function (c) { return signatureHasRestParameter(c) ? ts.last(c.parameters) : undefined; });
             var flags = 0 /* None */;
@@ -71612,7 +72956,7 @@
             return maxParamsIndex;
         }
         function resolveCallExpression(node, candidatesOutArray, checkMode) {
-            if (node.expression.kind === 105 /* SuperKeyword */) {
+            if (node.expression.kind === 106 /* SuperKeyword */) {
                 var superType = checkSuperExpression(node.expression);
                 if (isTypeAny(superType)) {
                     for (var _i = 0, _a = node.arguments; _i < _a.length; _i++) {
@@ -71838,7 +73182,7 @@
             var declaration = signature.declaration;
             var modifiers = ts.getSelectedEffectiveModifierFlags(declaration, 24 /* NonPublicAccessibilityModifier */);
             // (1) Public constructors and (2) constructor functions are always accessible.
-            if (!modifiers || declaration.kind !== 167 /* Constructor */) {
+            if (!modifiers || declaration.kind !== 169 /* Constructor */) {
                 return true;
             }
             var declaringClassDeclaration = ts.getClassLikeDeclarationOfSymbol(declaration.parent.symbol);
@@ -71870,8 +73214,8 @@
             if (apparentType.flags & 1048576 /* Union */) {
                 var types = apparentType.types;
                 var hasSignatures = false;
-                for (var _i = 0, types_21 = types; _i < types_21.length; _i++) {
-                    var constituent = types_21[_i];
+                for (var _i = 0, types_20 = types; _i < types_20.length; _i++) {
+                    var constituent = types_20[_i];
                     var signatures = getSignaturesOfType(constituent, kind);
                     if (signatures.length !== 0) {
                         hasSignatures = true;
@@ -71982,16 +73326,16 @@
          */
         function getDiagnosticHeadMessageForDecoratorResolution(node) {
             switch (node.parent.kind) {
-                case 253 /* ClassDeclaration */:
-                case 222 /* ClassExpression */:
+                case 255 /* ClassDeclaration */:
+                case 224 /* ClassExpression */:
                     return ts.Diagnostics.Unable_to_resolve_signature_of_class_decorator_when_called_as_an_expression;
-                case 161 /* Parameter */:
+                case 162 /* Parameter */:
                     return ts.Diagnostics.Unable_to_resolve_signature_of_parameter_decorator_when_called_as_an_expression;
-                case 164 /* PropertyDeclaration */:
+                case 165 /* PropertyDeclaration */:
                     return ts.Diagnostics.Unable_to_resolve_signature_of_property_decorator_when_called_as_an_expression;
-                case 166 /* MethodDeclaration */:
-                case 168 /* GetAccessor */:
-                case 169 /* SetAccessor */:
+                case 167 /* MethodDeclaration */:
+                case 170 /* GetAccessor */:
+                case 171 /* SetAccessor */:
                     return ts.Diagnostics.Unable_to_resolve_signature_of_method_decorator_when_called_as_an_expression;
                 default:
                     return ts.Debug.fail();
@@ -72037,7 +73381,7 @@
             // file would probably be preferable.
             var typeSymbol = exports && getSymbol(exports, JsxNames.Element, 788968 /* Type */);
             var returnNode = typeSymbol && nodeBuilder.symbolToEntityName(typeSymbol, 788968 /* Type */, node);
-            var declaration = ts.factory.createFunctionTypeNode(/*typeParameters*/ undefined, [ts.factory.createParameterDeclaration(/*decorators*/ undefined, /*modifiers*/ undefined, /*dotdotdot*/ undefined, "props", /*questionMark*/ undefined, nodeBuilder.typeToTypeNode(result, node))], returnNode ? ts.factory.createTypeReferenceNode(returnNode, /*typeArguments*/ undefined) : ts.factory.createKeywordTypeNode(128 /* AnyKeyword */));
+            var declaration = ts.factory.createFunctionTypeNode(/*typeParameters*/ undefined, [ts.factory.createParameterDeclaration(/*decorators*/ undefined, /*modifiers*/ undefined, /*dotdotdot*/ undefined, "props", /*questionMark*/ undefined, nodeBuilder.typeToTypeNode(result, node))], returnNode ? ts.factory.createTypeReferenceNode(returnNode, /*typeArguments*/ undefined) : ts.factory.createKeywordTypeNode(129 /* AnyKeyword */));
             var parameterSymbol = createSymbol(1 /* FunctionScopedVariable */, "props");
             parameterSymbol.type = result;
             return createSignature(declaration, 
@@ -72086,16 +73430,16 @@
         }
         function resolveSignature(node, candidatesOutArray, checkMode) {
             switch (node.kind) {
-                case 204 /* CallExpression */:
+                case 206 /* CallExpression */:
                     return resolveCallExpression(node, candidatesOutArray, checkMode);
-                case 205 /* NewExpression */:
+                case 207 /* NewExpression */:
                     return resolveNewExpression(node, candidatesOutArray, checkMode);
-                case 206 /* TaggedTemplateExpression */:
+                case 208 /* TaggedTemplateExpression */:
                     return resolveTaggedTemplateExpression(node, candidatesOutArray, checkMode);
-                case 162 /* Decorator */:
+                case 163 /* Decorator */:
                     return resolveDecorator(node, candidatesOutArray, checkMode);
-                case 276 /* JsxOpeningElement */:
-                case 275 /* JsxSelfClosingElement */:
+                case 278 /* JsxOpeningElement */:
+                case 277 /* JsxSelfClosingElement */:
                     return resolveJsxOpeningLikeElement(node, candidatesOutArray, checkMode);
             }
             throw ts.Debug.assertNever(node, "Branch in 'resolveSignature' should be unreachable.");
@@ -72195,7 +73539,7 @@
             else if (ts.isBinaryExpression(node.parent)) {
                 var parentNode = node.parent;
                 var parentNodeOperator = node.parent.operatorToken.kind;
-                if (parentNodeOperator === 62 /* EqualsToken */ && (allowDeclaration || parentNode.right === node)) {
+                if (parentNodeOperator === 63 /* EqualsToken */ && (allowDeclaration || parentNode.right === node)) {
                     name = parentNode.left;
                     decl = name;
                 }
@@ -72204,7 +73548,7 @@
                         name = parentNode.parent.name;
                         decl = parentNode.parent;
                     }
-                    else if (ts.isBinaryExpression(parentNode.parent) && parentNode.parent.operatorToken.kind === 62 /* EqualsToken */ && (allowDeclaration || parentNode.parent.right === parentNode)) {
+                    else if (ts.isBinaryExpression(parentNode.parent) && parentNode.parent.operatorToken.kind === 63 /* EqualsToken */ && (allowDeclaration || parentNode.parent.right === parentNode)) {
                         name = parentNode.parent.left;
                         decl = name;
                     }
@@ -72227,10 +73571,10 @@
                 return false;
             }
             var parent = node.parent;
-            while (parent && parent.kind === 202 /* PropertyAccessExpression */) {
+            while (parent && parent.kind === 204 /* PropertyAccessExpression */) {
                 parent = parent.parent;
             }
-            if (parent && ts.isBinaryExpression(parent) && ts.isPrototypeAccess(parent.left) && parent.operatorToken.kind === 62 /* EqualsToken */) {
+            if (parent && ts.isBinaryExpression(parent) && ts.isPrototypeAccess(parent.left) && parent.operatorToken.kind === 63 /* EqualsToken */) {
                 var right = ts.getInitializerOfBinaryExpression(parent);
                 return ts.isObjectLiteralExpression(right) && right;
             }
@@ -72251,15 +73595,15 @@
                 return nonInferrableType;
             }
             checkDeprecatedSignature(signature, node);
-            if (node.expression.kind === 105 /* SuperKeyword */) {
+            if (node.expression.kind === 106 /* SuperKeyword */) {
                 return voidType;
             }
-            if (node.kind === 205 /* NewExpression */) {
+            if (node.kind === 207 /* NewExpression */) {
                 var declaration = signature.declaration;
                 if (declaration &&
-                    declaration.kind !== 167 /* Constructor */ &&
-                    declaration.kind !== 171 /* ConstructSignature */ &&
-                    declaration.kind !== 176 /* ConstructorType */ &&
+                    declaration.kind !== 169 /* Constructor */ &&
+                    declaration.kind !== 173 /* ConstructSignature */ &&
+                    declaration.kind !== 178 /* ConstructorType */ &&
                     !ts.isJSDocConstructSignature(declaration) &&
                     !isJSConstructor(declaration)) {
                     // When resolved signature is a call signature (and not a construct signature) the result type is any
@@ -72279,7 +73623,7 @@
             if (returnType.flags & 12288 /* ESSymbolLike */ && isSymbolOrSymbolForCall(node)) {
                 return getESSymbolLikeTypeForNode(ts.walkUpParenthesizedExpressions(node.parent));
             }
-            if (node.kind === 204 /* CallExpression */ && !node.questionDotToken && node.parent.kind === 234 /* ExpressionStatement */ &&
+            if (node.kind === 206 /* CallExpression */ && !node.questionDotToken && node.parent.kind === 236 /* ExpressionStatement */ &&
                 returnType.flags & 16384 /* Void */ && getTypePredicateOfSignature(signature)) {
                 if (!ts.isDottedName(node.expression)) {
                     error(node.expression, ts.Diagnostics.Assertions_require_the_call_target_to_be_an_identifier_or_qualified_name);
@@ -72292,7 +73636,7 @@
             if (ts.isInJSFile(node)) {
                 var jsSymbol = getSymbolOfExpando(node, /*allowDeclaration*/ false);
                 if ((_a = jsSymbol === null || jsSymbol === void 0 ? void 0 : jsSymbol.exports) === null || _a === void 0 ? void 0 : _a.size) {
-                    var jsAssignmentType = createAnonymousType(jsSymbol, jsSymbol.exports, ts.emptyArray, ts.emptyArray, undefined, undefined);
+                    var jsAssignmentType = createAnonymousType(jsSymbol, jsSymbol.exports, ts.emptyArray, ts.emptyArray, ts.emptyArray);
                     jsAssignmentType.objectFlags |= 8192 /* JSLiteral */;
                     return getIntersectionType([returnType, jsAssignmentType]);
                 }
@@ -72309,20 +73653,20 @@
         function getDeprecatedSuggestionNode(node) {
             node = ts.skipParentheses(node);
             switch (node.kind) {
-                case 204 /* CallExpression */:
-                case 162 /* Decorator */:
-                case 205 /* NewExpression */:
+                case 206 /* CallExpression */:
+                case 163 /* Decorator */:
+                case 207 /* NewExpression */:
                     return getDeprecatedSuggestionNode(node.expression);
-                case 206 /* TaggedTemplateExpression */:
+                case 208 /* TaggedTemplateExpression */:
                     return getDeprecatedSuggestionNode(node.tag);
-                case 276 /* JsxOpeningElement */:
-                case 275 /* JsxSelfClosingElement */:
+                case 278 /* JsxOpeningElement */:
+                case 277 /* JsxSelfClosingElement */:
                     return getDeprecatedSuggestionNode(node.tagName);
-                case 203 /* ElementAccessExpression */:
+                case 205 /* ElementAccessExpression */:
                     return node.argumentExpression;
-                case 202 /* PropertyAccessExpression */:
+                case 204 /* PropertyAccessExpression */:
                     return node.name;
-                case 174 /* TypeReference */:
+                case 176 /* TypeReference */:
                     var typeReference = node;
                     return ts.isQualifiedName(typeReference.typeName) ? typeReference.typeName.right : typeReference;
                 default:
@@ -72383,11 +73727,11 @@
                         var memberTable = ts.createSymbolTable();
                         var newSymbol = createSymbol(2097152 /* Alias */, "default" /* Default */);
                         newSymbol.parent = originalSymbol;
-                        newSymbol.nameType = getLiteralType("default");
+                        newSymbol.nameType = getStringLiteralType("default");
                         newSymbol.target = resolveSymbol(symbol);
                         memberTable.set("default" /* Default */, newSymbol);
                         var anonymousSymbol = createSymbol(2048 /* TypeLiteral */, "__type" /* Type */);
-                        var defaultContainingObject = createAnonymousType(anonymousSymbol, memberTable, ts.emptyArray, ts.emptyArray, /*stringIndexInfo*/ undefined, /*numberIndexInfo*/ undefined);
+                        var defaultContainingObject = createAnonymousType(anonymousSymbol, memberTable, ts.emptyArray, ts.emptyArray, ts.emptyArray);
                         anonymousSymbol.type = defaultContainingObject;
                         synthType.syntheticType = isValidSpreadType(type) ? getSpreadType(type, defaultContainingObject, anonymousSymbol, /*objectFlags*/ 0, /*readonly*/ false) : defaultContainingObject;
                     }
@@ -72415,9 +73759,9 @@
                 return false;
             }
             var targetDeclarationKind = resolvedRequire.flags & 16 /* Function */
-                ? 252 /* FunctionDeclaration */
+                ? 254 /* FunctionDeclaration */
                 : resolvedRequire.flags & 3 /* Variable */
-                    ? 250 /* VariableDeclaration */
+                    ? 252 /* VariableDeclaration */
                     : 0 /* Unknown */;
             if (targetDeclarationKind !== 0 /* Unknown */) {
                 var decl = ts.getDeclarationOfKind(resolvedRequire, targetDeclarationKind);
@@ -72445,21 +73789,21 @@
                 case 14 /* NoSubstitutionTemplateLiteral */:
                 case 8 /* NumericLiteral */:
                 case 9 /* BigIntLiteral */:
-                case 109 /* TrueKeyword */:
-                case 94 /* FalseKeyword */:
-                case 200 /* ArrayLiteralExpression */:
-                case 201 /* ObjectLiteralExpression */:
-                case 219 /* TemplateExpression */:
+                case 110 /* TrueKeyword */:
+                case 95 /* FalseKeyword */:
+                case 202 /* ArrayLiteralExpression */:
+                case 203 /* ObjectLiteralExpression */:
+                case 221 /* TemplateExpression */:
                     return true;
-                case 208 /* ParenthesizedExpression */:
+                case 210 /* ParenthesizedExpression */:
                     return isValidConstAssertionArgument(node.expression);
-                case 215 /* PrefixUnaryExpression */:
+                case 217 /* PrefixUnaryExpression */:
                     var op = node.operator;
                     var arg = node.operand;
                     return op === 40 /* MinusToken */ && (arg.kind === 8 /* NumericLiteral */ || arg.kind === 9 /* BigIntLiteral */) ||
                         op === 39 /* PlusToken */ && arg.kind === 8 /* NumericLiteral */;
-                case 202 /* PropertyAccessExpression */:
-                case 203 /* ElementAccessExpression */:
+                case 204 /* PropertyAccessExpression */:
+                case 205 /* ElementAccessExpression */:
                     var expr = node.expression;
                     if (ts.isIdentifier(expr)) {
                         var symbol = getSymbolAtLocation(expr);
@@ -72501,21 +73845,32 @@
         }
         function checkMetaProperty(node) {
             checkGrammarMetaProperty(node);
-            if (node.keywordToken === 102 /* NewKeyword */) {
+            if (node.keywordToken === 103 /* NewKeyword */) {
                 return checkNewTargetMetaProperty(node);
             }
-            if (node.keywordToken === 99 /* ImportKeyword */) {
+            if (node.keywordToken === 100 /* ImportKeyword */) {
                 return checkImportMetaProperty(node);
             }
             return ts.Debug.assertNever(node.keywordToken);
         }
+        function checkMetaPropertyKeyword(node) {
+            switch (node.keywordToken) {
+                case 100 /* ImportKeyword */:
+                    return getGlobalImportMetaExpressionType();
+                case 103 /* NewKeyword */:
+                    var type = checkNewTargetMetaProperty(node);
+                    return type === errorType ? errorType : createNewTargetExpressionType(type);
+                default:
+                    ts.Debug.assertNever(node.keywordToken);
+            }
+        }
         function checkNewTargetMetaProperty(node) {
             var container = ts.getNewTargetContainer(node);
             if (!container) {
                 error(node, ts.Diagnostics.Meta_property_0_is_only_allowed_in_the_body_of_a_function_declaration_function_expression_or_constructor, "new.target");
                 return errorType;
             }
-            else if (container.kind === 167 /* Constructor */) {
+            else if (container.kind === 169 /* Constructor */) {
                 var symbol = getSymbolOfNode(container.parent);
                 return getTypeOfSymbol(symbol);
             }
@@ -72530,7 +73885,6 @@
             }
             var file = ts.getSourceFileOfNode(node);
             ts.Debug.assert(!!(file.flags & 2097152 /* PossiblyContainsImportMeta */), "Containing file is missing import meta node flag.");
-            ts.Debug.assert(!!file.externalModuleIndicator, "Containing file should be a module.");
             return node.name.escapedText === "meta" ? getGlobalImportMetaType() : errorType;
         }
         function getTypeOfParameter(symbol) {
@@ -72561,8 +73915,37 @@
             }
             return restParameter.escapedName;
         }
+        function getParameterIdentifierNameAtPosition(signature, pos) {
+            var paramCount = signature.parameters.length - (signatureHasRestParameter(signature) ? 1 : 0);
+            if (pos < paramCount) {
+                var param = signature.parameters[pos];
+                return isParameterDeclarationWithIdentifierName(param) ? [param.escapedName, false] : undefined;
+            }
+            var restParameter = signature.parameters[paramCount] || unknownSymbol;
+            if (!isParameterDeclarationWithIdentifierName(restParameter)) {
+                return undefined;
+            }
+            var restType = getTypeOfSymbol(restParameter);
+            if (isTupleType(restType)) {
+                var associatedNames = restType.target.labeledElementDeclarations;
+                var index = pos - paramCount;
+                var associatedName = associatedNames === null || associatedNames === void 0 ? void 0 : associatedNames[index];
+                var isRestTupleElement = !!(associatedName === null || associatedName === void 0 ? void 0 : associatedName.dotDotDotToken);
+                return associatedName ? [
+                    getTupleElementLabel(associatedName),
+                    isRestTupleElement
+                ] : undefined;
+            }
+            if (pos === paramCount) {
+                return [restParameter.escapedName, true];
+            }
+            return undefined;
+        }
+        function isParameterDeclarationWithIdentifierName(symbol) {
+            return symbol.valueDeclaration && ts.isParameter(symbol.valueDeclaration) && ts.isIdentifier(symbol.valueDeclaration.name);
+        }
         function isValidDeclarationForTupleLabel(d) {
-            return d.kind === 193 /* NamedTupleMember */ || (ts.isParameter(d) && d.name && ts.isIdentifier(d.name));
+            return d.kind === 195 /* NamedTupleMember */ || (ts.isParameter(d) && d.name && ts.isIdentifier(d.name));
         }
         function getNameableDeclarationAtPosition(signature, pos) {
             var paramCount = signature.parameters.length - (signatureHasRestParameter(signature) ? 1 : 0);
@@ -72594,7 +73977,7 @@
                 var restType = getTypeOfSymbol(signature.parameters[paramCount]);
                 var index = pos - paramCount;
                 if (!isTupleType(restType) || restType.target.hasRestElement || index < restType.target.fixedLength) {
-                    return getIndexedAccessType(restType, getLiteralType(index));
+                    return getIndexedAccessType(restType, getNumberLiteralType(index));
                 }
             }
             return undefined;
@@ -72775,7 +74158,7 @@
             if (!links.type) {
                 var declaration = parameter.valueDeclaration;
                 links.type = type || getWidenedTypeForVariableLikeDeclaration(declaration, /*includeOptionality*/ true);
-                if (declaration.name.kind !== 78 /* Identifier */) {
+                if (declaration.name.kind !== 79 /* Identifier */) {
                     // if inference didn't come up with anything but unknown, fall back to the binding pattern if present.
                     if (links.type === unknownType) {
                         links.type = getTypeFromBindingPattern(declaration.name);
@@ -72790,7 +74173,7 @@
             for (var _i = 0, _a = pattern.elements; _i < _a.length; _i++) {
                 var element = _a[_i];
                 if (!ts.isOmittedExpression(element)) {
-                    if (element.name.kind === 78 /* Identifier */) {
+                    if (element.name.kind === 79 /* Identifier */) {
                         getSymbolLinks(getSymbolOfNode(element)).type = getTypeForBindingElement(element);
                     }
                     else {
@@ -72834,6 +74217,16 @@
             }
             return promiseType;
         }
+        function createNewTargetExpressionType(targetType) {
+            // Create a synthetic type `NewTargetExpression { target: TargetType; }`
+            var symbol = createSymbol(0 /* None */, "NewTargetExpression");
+            var targetPropertySymbol = createSymbol(4 /* Property */, "target", 8 /* Readonly */);
+            targetPropertySymbol.parent = symbol;
+            targetPropertySymbol.type = targetType;
+            var members = ts.createSymbolTable([targetPropertySymbol]);
+            symbol.members = members;
+            return createAnonymousType(symbol, members, ts.emptyArray, ts.emptyArray, ts.emptyArray);
+        }
         function getReturnTypeFromBody(func, checkMode) {
             if (!func.body) {
                 return errorType;
@@ -72845,7 +74238,7 @@
             var yieldType;
             var nextType;
             var fallbackReturnType = voidType;
-            if (func.body.kind !== 231 /* Block */) { // Async or normal arrow function
+            if (func.body.kind !== 233 /* Block */) { // Async or normal arrow function
                 returnType = checkExpressionCached(func.body, checkMode && checkMode & ~8 /* SkipGenericFunctions */);
                 if (isAsync) {
                     // From within an async function you can return either a non-promise value or a promise. Any
@@ -73030,7 +74423,7 @@
             return links.isExhaustive !== undefined ? links.isExhaustive : (links.isExhaustive = computeExhaustiveSwitchStatement(node));
         }
         function computeExhaustiveSwitchStatement(node) {
-            if (node.expression.kind === 212 /* TypeOfExpression */) {
+            if (node.expression.kind === 214 /* TypeOfExpression */) {
                 var operandType = getTypeOfExpression(node.expression.expression);
                 var witnesses = getSwitchClauseTypeOfWitnesses(node, /*retainDefault*/ false);
                 // notEqualFacts states that the type of the switched value is not equal to every type in the switch.
@@ -73093,11 +74486,11 @@
         }
         function mayReturnNever(func) {
             switch (func.kind) {
-                case 209 /* FunctionExpression */:
-                case 210 /* ArrowFunction */:
+                case 211 /* FunctionExpression */:
+                case 212 /* ArrowFunction */:
                     return true;
-                case 166 /* MethodDeclaration */:
-                    return func.parent.kind === 201 /* ObjectLiteralExpression */;
+                case 167 /* MethodDeclaration */:
+                    return func.parent.kind === 203 /* ObjectLiteralExpression */;
                 default:
                     return false;
             }
@@ -73123,7 +74516,7 @@
             }
             // If all we have is a function signature, or an arrow function with an expression body, then there is nothing to check.
             // also if HasImplicitReturn flag is not set this means that all codepaths in function body end with return or throw
-            if (func.kind === 165 /* MethodSignature */ || ts.nodeIsMissing(func.body) || func.body.kind !== 231 /* Block */ || !functionHasImplicitReturn(func)) {
+            if (func.kind === 166 /* MethodSignature */ || ts.nodeIsMissing(func.body) || func.body.kind !== 233 /* Block */ || !functionHasImplicitReturn(func)) {
                 return;
             }
             var hasExplicitReturn = func.flags & 512 /* HasExplicitReturn */;
@@ -73156,12 +74549,15 @@
             }
         }
         function checkFunctionExpressionOrObjectLiteralMethod(node, checkMode) {
-            ts.Debug.assert(node.kind !== 166 /* MethodDeclaration */ || ts.isObjectLiteralMethod(node));
+            ts.Debug.assert(node.kind !== 167 /* MethodDeclaration */ || ts.isObjectLiteralMethod(node));
             checkNodeDeferred(node);
+            if (ts.isFunctionExpression(node)) {
+                checkCollisionsForDeclarationName(node, node.name);
+            }
             // The identityMapper object is used to indicate that function expressions are wildcards
             if (checkMode && checkMode & 4 /* SkipContextSensitive */ && isContextSensitive(node)) {
                 // Skip parameters, return signature with return type that retains noncontextual parts so inferences can still be drawn in an early stage
-                if (!ts.getEffectiveReturnTypeNode(node) && !hasContextSensitiveParameters(node)) {
+                if (!ts.getEffectiveReturnTypeNode(node) && !ts.hasContextSensitiveParameters(node)) {
                     // Return plain anyFunctionType if there is no possibility we'll make inferences from the return type
                     var contextualSignature = getContextualSignature(node);
                     if (contextualSignature && couldContainTypeVariables(getReturnTypeOfSignature(contextualSignature))) {
@@ -73171,7 +74567,7 @@
                         }
                         var returnType = getReturnTypeFromBody(node, checkMode);
                         var returnOnlySignature = createSignature(undefined, undefined, undefined, ts.emptyArray, returnType, /*resolvedTypePredicate*/ undefined, 0, 0 /* None */);
-                        var returnOnlyType = createAnonymousType(node.symbol, emptySymbols, [returnOnlySignature], ts.emptyArray, undefined, undefined);
+                        var returnOnlyType = createAnonymousType(node.symbol, emptySymbols, [returnOnlySignature], ts.emptyArray, ts.emptyArray);
                         returnOnlyType.objectFlags |= 524288 /* NonInferrableType */;
                         return links.contextFreeType = returnOnlyType;
                     }
@@ -73180,7 +74576,7 @@
             }
             // Grammar checking
             var hasGrammarError = checkGrammarFunctionLikeDeclaration(node);
-            if (!hasGrammarError && node.kind === 209 /* FunctionExpression */) {
+            if (!hasGrammarError && node.kind === 211 /* FunctionExpression */) {
                 checkGrammarForGenerator(node);
             }
             contextuallyCheckFunctionExpressionOrObjectLiteralMethod(node, checkMode);
@@ -73226,7 +74622,7 @@
             }
         }
         function checkFunctionExpressionOrObjectLiteralMethodDeferred(node) {
-            ts.Debug.assert(node.kind !== 166 /* MethodDeclaration */ || ts.isObjectLiteralMethod(node));
+            ts.Debug.assert(node.kind !== 167 /* MethodDeclaration */ || ts.isObjectLiteralMethod(node));
             var functionFlags = ts.getFunctionFlags(node);
             var returnType = getReturnTypeFromAnnotation(node);
             checkAllCodePathsInNonVoidFunctionReturnOrThrow(node, returnType);
@@ -73239,7 +74635,7 @@
                     // checkFunctionExpressionBodies). So it must be done now.
                     getReturnTypeOfSignature(getSignatureFromDeclaration(node));
                 }
-                if (node.body.kind === 231 /* Block */) {
+                if (node.body.kind === 233 /* Block */) {
                     checkSourceElement(node.body);
                 }
                 else {
@@ -73326,10 +74722,10 @@
                 // Allow assignments to readonly properties within constructors of the same class declaration.
                 if (symbol.flags & 4 /* Property */ &&
                     ts.isAccessExpression(expr) &&
-                    expr.expression.kind === 107 /* ThisKeyword */) {
+                    expr.expression.kind === 108 /* ThisKeyword */) {
                     // Look for if this is the constructor for the class that `symbol` is a property of.
                     var ctor = ts.getContainingFunction(expr);
-                    if (!(ctor && (ctor.kind === 167 /* Constructor */ || isJSConstructor(ctor)))) {
+                    if (!(ctor && (ctor.kind === 169 /* Constructor */ || isJSConstructor(ctor)))) {
                         return true;
                     }
                     if (symbol.valueDeclaration) {
@@ -73350,11 +74746,11 @@
             if (ts.isAccessExpression(expr)) {
                 // references through namespace import should be readonly
                 var node = ts.skipParentheses(expr.expression);
-                if (node.kind === 78 /* Identifier */) {
+                if (node.kind === 79 /* Identifier */) {
                     var symbol_2 = getNodeLinks(node).resolvedSymbol;
                     if (symbol_2.flags & 2097152 /* Alias */) {
                         var declaration = getDeclarationOfAliasSymbol(symbol_2);
-                        return !!declaration && declaration.kind === 264 /* NamespaceImport */;
+                        return !!declaration && declaration.kind === 266 /* NamespaceImport */;
                     }
                 }
             }
@@ -73363,7 +74759,7 @@
         function checkReferenceExpression(expr, invalidReferenceMessage, invalidOptionalChainMessage) {
             // References are combinations of identifiers, parentheses, and property accesses.
             var node = ts.skipOuterExpressions(expr, 6 /* Assertions */ | 1 /* Parentheses */);
-            if (node.kind !== 78 /* Identifier */ && !ts.isAccessExpression(node)) {
+            if (node.kind !== 79 /* Identifier */ && !ts.isAccessExpression(node)) {
                 error(expr, invalidReferenceMessage);
                 return false;
             }
@@ -73389,13 +74785,15 @@
                 if (isReadonlySymbol(symbol)) {
                     error(expr, ts.Diagnostics.The_operand_of_a_delete_operator_cannot_be_a_read_only_property);
                 }
-                checkDeleteExpressionMustBeOptional(expr, getTypeOfSymbol(symbol));
+                checkDeleteExpressionMustBeOptional(expr, symbol);
             }
             return booleanType;
         }
-        function checkDeleteExpressionMustBeOptional(expr, type) {
-            var AnyOrUnknownOrNeverFlags = 3 /* AnyOrUnknown */ | 131072 /* Never */;
-            if (strictNullChecks && !(type.flags & AnyOrUnknownOrNeverFlags) && !(getFalsyFlags(type) & 32768 /* Undefined */)) {
+        function checkDeleteExpressionMustBeOptional(expr, symbol) {
+            var type = getTypeOfSymbol(symbol);
+            if (strictNullChecks &&
+                !(type.flags & (3 /* AnyOrUnknown */ | 131072 /* Never */)) &&
+                !(exactOptionalPropertyTypes ? symbol.flags & 16777216 /* Optional */ : getFalsyFlags(type) & 32768 /* Undefined */)) {
                 error(expr, ts.Diagnostics.The_operand_of_a_delete_operator_must_be_optional);
             }
         }
@@ -73410,7 +74808,11 @@
         function checkAwaitExpression(node) {
             // Grammar checking
             if (produceDiagnostics) {
-                if (!(node.flags & 32768 /* AwaitContext */)) {
+                var container = ts.getContainingFunctionOrClassStaticBlock(node);
+                if (container && ts.isClassStaticBlockDeclaration(container)) {
+                    error(node, ts.Diagnostics.Await_expression_cannot_be_used_inside_a_class_static_block);
+                }
+                else if (!(node.flags & 32768 /* AwaitContext */)) {
                     if (ts.isInTopLevelContext(node)) {
                         var sourceFile = ts.getSourceFileOfNode(node);
                         if (!hasParseDiagnostics(sourceFile)) {
@@ -73434,9 +74836,8 @@
                         if (!hasParseDiagnostics(sourceFile)) {
                             var span = ts.getSpanOfTokenAtPosition(sourceFile, node.pos);
                             var diagnostic = ts.createFileDiagnostic(sourceFile, span.start, span.length, ts.Diagnostics.await_expressions_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules);
-                            var func = ts.getContainingFunction(node);
-                            if (func && func.kind !== 167 /* Constructor */ && (ts.getFunctionFlags(func) & 2 /* Async */) === 0) {
-                                var relatedInfo = ts.createDiagnosticForNode(func, ts.Diagnostics.Did_you_mean_to_mark_this_function_as_async);
+                            if (container && container.kind !== 169 /* Constructor */ && (ts.getFunctionFlags(container) & 2 /* Async */) === 0) {
+                                var relatedInfo = ts.createDiagnosticForNode(container, ts.Diagnostics.Did_you_mean_to_mark_this_function_as_async);
                                 ts.addRelatedInfo(diagnostic, relatedInfo);
                             }
                             diagnostics.add(diagnostic);
@@ -73463,14 +74864,14 @@
                 case 8 /* NumericLiteral */:
                     switch (node.operator) {
                         case 40 /* MinusToken */:
-                            return getFreshTypeOfLiteralType(getLiteralType(-node.operand.text));
+                            return getFreshTypeOfLiteralType(getNumberLiteralType(-node.operand.text));
                         case 39 /* PlusToken */:
-                            return getFreshTypeOfLiteralType(getLiteralType(+node.operand.text));
+                            return getFreshTypeOfLiteralType(getNumberLiteralType(+node.operand.text));
                     }
                     break;
                 case 9 /* BigIntLiteral */:
                     if (node.operator === 40 /* MinusToken */) {
-                        return getFreshTypeOfLiteralType(getLiteralType({
+                        return getFreshTypeOfLiteralType(getBigIntLiteralType({
                             negative: true,
                             base10Value: ts.parsePseudoBigInt(node.operand.text)
                         }));
@@ -73537,8 +74938,8 @@
             }
             if (type.flags & 3145728 /* UnionOrIntersection */) {
                 var types = type.types;
-                for (var _i = 0, types_22 = types; _i < types_22.length; _i++) {
-                    var t = types_22[_i];
+                for (var _i = 0, types_21 = types; _i < types_21.length; _i++) {
+                    var t = types_21[_i];
                     if (maybeTypeOfKind(t, kind)) {
                         return true;
                     }
@@ -73647,7 +75048,7 @@
             if (rightIsThis === void 0) { rightIsThis = false; }
             var properties = node.properties;
             var property = properties[propertyIndex];
-            if (property.kind === 289 /* PropertyAssignment */ || property.kind === 290 /* ShorthandPropertyAssignment */) {
+            if (property.kind === 291 /* PropertyAssignment */ || property.kind === 292 /* ShorthandPropertyAssignment */) {
                 var name = property.name;
                 var exprType = getLiteralTypeFromPropertyName(name);
                 if (isTypeUsableAsPropertyName(exprType)) {
@@ -73658,11 +75059,11 @@
                         checkPropertyAccessibility(property, /*isSuper*/ false, /*writing*/ true, objectLiteralType, prop);
                     }
                 }
-                var elementType = getIndexedAccessType(objectLiteralType, exprType, /*noUncheckedIndexedAccessCandidate*/ undefined, name, /*aliasSymbol*/ undefined, /*aliasTypeArguments*/ undefined, 16 /* ExpressionPosition */);
+                var elementType = getIndexedAccessType(objectLiteralType, exprType, 32 /* ExpressionPosition */, name);
                 var type = getFlowTypeOfDestructuring(property, elementType);
-                return checkDestructuringAssignment(property.kind === 290 /* ShorthandPropertyAssignment */ ? property : property.initializer, type);
+                return checkDestructuringAssignment(property.kind === 292 /* ShorthandPropertyAssignment */ ? property : property.initializer, type);
             }
-            else if (property.kind === 291 /* SpreadAssignment */) {
+            else if (property.kind === 293 /* SpreadAssignment */) {
                 if (propertyIndex < properties.length - 1) {
                     error(property, ts.Diagnostics.A_rest_element_must_be_last_in_a_destructuring_pattern);
                 }
@@ -73700,7 +75101,7 @@
             var inBoundsType = compilerOptions.noUncheckedIndexedAccess ? undefined : possiblyOutOfBoundsType;
             for (var i = 0; i < elements.length; i++) {
                 var type = possiblyOutOfBoundsType;
-                if (node.elements[i].kind === 221 /* SpreadElement */) {
+                if (node.elements[i].kind === 223 /* SpreadElement */) {
                     type = inBoundsType = inBoundsType !== null && inBoundsType !== void 0 ? inBoundsType : (checkIteratedTypeOrElementType(65 /* Destructuring */, sourceType, undefinedType, node) || errorType);
                 }
                 checkArrayLiteralDestructuringElementAssignment(node, sourceType, i, type, checkMode);
@@ -73710,14 +75111,14 @@
         function checkArrayLiteralDestructuringElementAssignment(node, sourceType, elementIndex, elementType, checkMode) {
             var elements = node.elements;
             var element = elements[elementIndex];
-            if (element.kind !== 223 /* OmittedExpression */) {
-                if (element.kind !== 221 /* SpreadElement */) {
-                    var indexType = getLiteralType(elementIndex);
+            if (element.kind !== 225 /* OmittedExpression */) {
+                if (element.kind !== 223 /* SpreadElement */) {
+                    var indexType = getNumberLiteralType(elementIndex);
                     if (isArrayLikeType(sourceType)) {
                         // We create a synthetic expression so that getIndexedAccessType doesn't get confused
                         // when the element is a SyntaxKind.ElementAccessExpression.
-                        var accessFlags = 16 /* ExpressionPosition */ | (hasDefaultValue(element) ? 8 /* NoTupleBoundsCheck */ : 0);
-                        var elementType_2 = getIndexedAccessTypeOrUndefined(sourceType, indexType, /*noUncheckedIndexedAccessCandidate*/ undefined, createSyntheticExpression(element, indexType), accessFlags) || errorType;
+                        var accessFlags = 32 /* ExpressionPosition */ | (hasDefaultValue(element) ? 16 /* NoTupleBoundsCheck */ : 0);
+                        var elementType_2 = getIndexedAccessTypeOrUndefined(sourceType, indexType, accessFlags, createSyntheticExpression(element, indexType)) || errorType;
                         var assignedType = hasDefaultValue(element) ? getTypeWithFacts(elementType_2, 524288 /* NEUndefined */) : elementType_2;
                         var type = getFlowTypeOfDestructuring(element, assignedType);
                         return checkDestructuringAssignment(element, type, checkMode);
@@ -73729,7 +75130,7 @@
                 }
                 else {
                     var restExpression = element.expression;
-                    if (restExpression.kind === 217 /* BinaryExpression */ && restExpression.operatorToken.kind === 62 /* EqualsToken */) {
+                    if (restExpression.kind === 219 /* BinaryExpression */ && restExpression.operatorToken.kind === 63 /* EqualsToken */) {
                         error(restExpression.operatorToken, ts.Diagnostics.A_rest_element_cannot_have_an_initializer);
                     }
                     else {
@@ -73745,7 +75146,7 @@
         }
         function checkDestructuringAssignment(exprOrAssignment, sourceType, checkMode, rightIsThis) {
             var target;
-            if (exprOrAssignment.kind === 290 /* ShorthandPropertyAssignment */) {
+            if (exprOrAssignment.kind === 292 /* ShorthandPropertyAssignment */) {
                 var prop = exprOrAssignment;
                 if (prop.objectAssignmentInitializer) {
                     // In strict null checking mode, if a default value of a non-undefined type is specified, remove
@@ -73761,24 +75162,24 @@
             else {
                 target = exprOrAssignment;
             }
-            if (target.kind === 217 /* BinaryExpression */ && target.operatorToken.kind === 62 /* EqualsToken */) {
+            if (target.kind === 219 /* BinaryExpression */ && target.operatorToken.kind === 63 /* EqualsToken */) {
                 checkBinaryExpression(target, checkMode);
                 target = target.left;
             }
-            if (target.kind === 201 /* ObjectLiteralExpression */) {
+            if (target.kind === 203 /* ObjectLiteralExpression */) {
                 return checkObjectLiteralAssignment(target, sourceType, rightIsThis);
             }
-            if (target.kind === 200 /* ArrayLiteralExpression */) {
+            if (target.kind === 202 /* ArrayLiteralExpression */) {
                 return checkArrayLiteralAssignment(target, sourceType, checkMode);
             }
             return checkReferenceAssignment(target, sourceType, checkMode);
         }
         function checkReferenceAssignment(target, sourceType, checkMode) {
             var targetType = checkExpression(target, checkMode);
-            var error = target.parent.kind === 291 /* SpreadAssignment */ ?
+            var error = target.parent.kind === 293 /* SpreadAssignment */ ?
                 ts.Diagnostics.The_target_of_an_object_rest_assignment_must_be_a_variable_or_a_property_access :
                 ts.Diagnostics.The_left_hand_side_of_an_assignment_expression_must_be_a_variable_or_a_property_access;
-            var optionalError = target.parent.kind === 291 /* SpreadAssignment */ ?
+            var optionalError = target.parent.kind === 293 /* SpreadAssignment */ ?
                 ts.Diagnostics.The_target_of_an_object_rest_assignment_may_not_be_an_optional_property_access :
                 ts.Diagnostics.The_left_hand_side_of_an_assignment_expression_may_not_be_an_optional_property_access;
             if (checkReferenceExpression(target, error, optionalError)) {
@@ -73800,39 +75201,39 @@
         function isSideEffectFree(node) {
             node = ts.skipParentheses(node);
             switch (node.kind) {
-                case 78 /* Identifier */:
+                case 79 /* Identifier */:
                 case 10 /* StringLiteral */:
                 case 13 /* RegularExpressionLiteral */:
-                case 206 /* TaggedTemplateExpression */:
-                case 219 /* TemplateExpression */:
+                case 208 /* TaggedTemplateExpression */:
+                case 221 /* TemplateExpression */:
                 case 14 /* NoSubstitutionTemplateLiteral */:
                 case 8 /* NumericLiteral */:
                 case 9 /* BigIntLiteral */:
-                case 109 /* TrueKeyword */:
-                case 94 /* FalseKeyword */:
-                case 103 /* NullKeyword */:
-                case 150 /* UndefinedKeyword */:
-                case 209 /* FunctionExpression */:
-                case 222 /* ClassExpression */:
-                case 210 /* ArrowFunction */:
-                case 200 /* ArrayLiteralExpression */:
-                case 201 /* ObjectLiteralExpression */:
-                case 212 /* TypeOfExpression */:
-                case 226 /* NonNullExpression */:
-                case 275 /* JsxSelfClosingElement */:
-                case 274 /* JsxElement */:
+                case 110 /* TrueKeyword */:
+                case 95 /* FalseKeyword */:
+                case 104 /* NullKeyword */:
+                case 151 /* UndefinedKeyword */:
+                case 211 /* FunctionExpression */:
+                case 224 /* ClassExpression */:
+                case 212 /* ArrowFunction */:
+                case 202 /* ArrayLiteralExpression */:
+                case 203 /* ObjectLiteralExpression */:
+                case 214 /* TypeOfExpression */:
+                case 228 /* NonNullExpression */:
+                case 277 /* JsxSelfClosingElement */:
+                case 276 /* JsxElement */:
                     return true;
-                case 218 /* ConditionalExpression */:
+                case 220 /* ConditionalExpression */:
                     return isSideEffectFree(node.whenTrue) &&
                         isSideEffectFree(node.whenFalse);
-                case 217 /* BinaryExpression */:
+                case 219 /* BinaryExpression */:
                     if (ts.isAssignmentOperator(node.operatorToken.kind)) {
                         return false;
                     }
                     return isSideEffectFree(node.left) &&
                         isSideEffectFree(node.right);
-                case 215 /* PrefixUnaryExpression */:
-                case 216 /* PostfixUnaryExpression */:
+                case 217 /* PrefixUnaryExpression */:
+                case 218 /* PostfixUnaryExpression */:
                     // Unary operators ~, !, +, and - have no side effects.
                     // The rest do.
                     switch (node.operator) {
@@ -73844,9 +75245,9 @@
                     }
                     return false;
                 // Some forms listed here for clarity
-                case 213 /* VoidExpression */: // Explicit opt-out
-                case 207 /* TypeAssertionExpression */: // Not SEF, but can produce useful type warnings
-                case 225 /* AsExpression */: // Not SEF, but can produce useful type warnings
+                case 215 /* VoidExpression */: // Explicit opt-out
+                case 209 /* TypeAssertionExpression */: // Not SEF, but can produce useful type warnings
+                case 227 /* AsExpression */: // Not SEF, but can produce useful type warnings
                 default:
                     return false;
             }
@@ -73883,9 +75284,9 @@
                 }
                 checkGrammarNullishCoalesceWithLogicalExpression(node);
                 var operator = node.operatorToken.kind;
-                if (operator === 62 /* EqualsToken */ && (node.left.kind === 201 /* ObjectLiteralExpression */ || node.left.kind === 200 /* ArrayLiteralExpression */)) {
+                if (operator === 63 /* EqualsToken */ && (node.left.kind === 203 /* ObjectLiteralExpression */ || node.left.kind === 202 /* ArrayLiteralExpression */)) {
                     state.skip = true;
-                    setLastResult(state, checkDestructuringAssignment(node.left, checkExpression(node.right, checkMode), checkMode, node.right.kind === 107 /* ThisKeyword */));
+                    setLastResult(state, checkDestructuringAssignment(node.left, checkExpression(node.right, checkMode), checkMode, node.right.kind === 108 /* ThisKeyword */));
                     return state;
                 }
                 return state;
@@ -73976,8 +75377,8 @@
         // expression-wide checks and does not use a work stack to fold nested binary expressions into the same callstack frame
         function checkBinaryLikeExpression(left, operatorToken, right, checkMode, errorNode) {
             var operator = operatorToken.kind;
-            if (operator === 62 /* EqualsToken */ && (left.kind === 201 /* ObjectLiteralExpression */ || left.kind === 200 /* ArrayLiteralExpression */)) {
-                return checkDestructuringAssignment(left, checkExpression(right, checkMode), checkMode, right.kind === 107 /* ThisKeyword */);
+            if (operator === 63 /* EqualsToken */ && (left.kind === 203 /* ObjectLiteralExpression */ || left.kind === 202 /* ArrayLiteralExpression */)) {
+                return checkDestructuringAssignment(left, checkExpression(right, checkMode), checkMode, right.kind === 108 /* ThisKeyword */);
             }
             var leftType;
             if (operator === 55 /* AmpersandAmpersandToken */ || operator === 56 /* BarBarToken */ || operator === 60 /* QuestionQuestionToken */) {
@@ -73994,26 +75395,26 @@
             switch (operator) {
                 case 41 /* AsteriskToken */:
                 case 42 /* AsteriskAsteriskToken */:
-                case 65 /* AsteriskEqualsToken */:
-                case 66 /* AsteriskAsteriskEqualsToken */:
+                case 66 /* AsteriskEqualsToken */:
+                case 67 /* AsteriskAsteriskEqualsToken */:
                 case 43 /* SlashToken */:
-                case 67 /* SlashEqualsToken */:
+                case 68 /* SlashEqualsToken */:
                 case 44 /* PercentToken */:
-                case 68 /* PercentEqualsToken */:
+                case 69 /* PercentEqualsToken */:
                 case 40 /* MinusToken */:
-                case 64 /* MinusEqualsToken */:
+                case 65 /* MinusEqualsToken */:
                 case 47 /* LessThanLessThanToken */:
-                case 69 /* LessThanLessThanEqualsToken */:
+                case 70 /* LessThanLessThanEqualsToken */:
                 case 48 /* GreaterThanGreaterThanToken */:
-                case 70 /* GreaterThanGreaterThanEqualsToken */:
+                case 71 /* GreaterThanGreaterThanEqualsToken */:
                 case 49 /* GreaterThanGreaterThanGreaterThanToken */:
-                case 71 /* GreaterThanGreaterThanGreaterThanEqualsToken */:
+                case 72 /* GreaterThanGreaterThanGreaterThanEqualsToken */:
                 case 51 /* BarToken */:
-                case 73 /* BarEqualsToken */:
+                case 74 /* BarEqualsToken */:
                 case 52 /* CaretToken */:
-                case 77 /* CaretEqualsToken */:
+                case 78 /* CaretEqualsToken */:
                 case 50 /* AmpersandToken */:
-                case 72 /* AmpersandEqualsToken */:
+                case 73 /* AmpersandEqualsToken */:
                     if (leftType === silentNeverType || rightType === silentNeverType) {
                         return silentNeverType;
                     }
@@ -74043,11 +75444,11 @@
                         else if (bothAreBigIntLike(leftType, rightType)) {
                             switch (operator) {
                                 case 49 /* GreaterThanGreaterThanGreaterThanToken */:
-                                case 71 /* GreaterThanGreaterThanGreaterThanEqualsToken */:
+                                case 72 /* GreaterThanGreaterThanGreaterThanEqualsToken */:
                                     reportOperatorError();
                                     break;
                                 case 42 /* AsteriskAsteriskToken */:
-                                case 66 /* AsteriskAsteriskEqualsToken */:
+                                case 67 /* AsteriskAsteriskEqualsToken */:
                                     if (languageVersion < 3 /* ES2016 */) {
                                         error(errorNode, ts.Diagnostics.Exponentiation_cannot_be_performed_on_bigint_values_unless_the_target_option_is_set_to_es2016_or_later);
                                     }
@@ -74065,7 +75466,7 @@
                         return resultType_1;
                     }
                 case 39 /* PlusToken */:
-                case 63 /* PlusEqualsToken */:
+                case 64 /* PlusEqualsToken */:
                     if (leftType === silentNeverType || rightType === silentNeverType) {
                         return silentNeverType;
                     }
@@ -74108,7 +75509,7 @@
                         });
                         return anyType;
                     }
-                    if (operator === 63 /* PlusEqualsToken */) {
+                    if (operator === 64 /* PlusEqualsToken */) {
                         checkAssignmentOperator(resultType);
                     }
                     return resultType;
@@ -74130,41 +75531,41 @@
                 case 37 /* ExclamationEqualsEqualsToken */:
                     reportOperatorErrorUnless(function (left, right) { return isTypeEqualityComparableTo(left, right) || isTypeEqualityComparableTo(right, left); });
                     return booleanType;
-                case 101 /* InstanceOfKeyword */:
+                case 102 /* InstanceOfKeyword */:
                     return checkInstanceOfExpression(left, right, leftType, rightType);
-                case 100 /* InKeyword */:
+                case 101 /* InKeyword */:
                     return checkInExpression(left, right, leftType, rightType);
                 case 55 /* AmpersandAmpersandToken */:
-                case 75 /* AmpersandAmpersandEqualsToken */: {
+                case 76 /* AmpersandAmpersandEqualsToken */: {
                     var resultType_2 = getTypeFacts(leftType) & 4194304 /* Truthy */ ?
                         getUnionType([extractDefinitelyFalsyTypes(strictNullChecks ? leftType : getBaseTypeOfLiteralType(rightType)), rightType]) :
                         leftType;
-                    if (operator === 75 /* AmpersandAmpersandEqualsToken */) {
+                    if (operator === 76 /* AmpersandAmpersandEqualsToken */) {
                         checkAssignmentOperator(rightType);
                     }
                     return resultType_2;
                 }
                 case 56 /* BarBarToken */:
-                case 74 /* BarBarEqualsToken */: {
+                case 75 /* BarBarEqualsToken */: {
                     var resultType_3 = getTypeFacts(leftType) & 8388608 /* Falsy */ ?
                         getUnionType([removeDefinitelyFalsyTypes(leftType), rightType], 2 /* Subtype */) :
                         leftType;
-                    if (operator === 74 /* BarBarEqualsToken */) {
+                    if (operator === 75 /* BarBarEqualsToken */) {
                         checkAssignmentOperator(rightType);
                     }
                     return resultType_3;
                 }
                 case 60 /* QuestionQuestionToken */:
-                case 76 /* QuestionQuestionEqualsToken */: {
+                case 77 /* QuestionQuestionEqualsToken */: {
                     var resultType_4 = getTypeFacts(leftType) & 262144 /* EQUndefinedOrNull */ ?
                         getUnionType([getNonNullableType(leftType), rightType], 2 /* Subtype */) :
                         leftType;
-                    if (operator === 76 /* QuestionQuestionEqualsToken */) {
+                    if (operator === 77 /* QuestionQuestionEqualsToken */) {
                         checkAssignmentOperator(rightType);
                     }
                     return resultType_4;
                 }
-                case 62 /* EqualsToken */:
+                case 63 /* EqualsToken */:
                     var declKind = ts.isBinaryExpression(left.parent) ? ts.getAssignmentDeclarationKind(left.parent) : 0 /* None */;
                     checkAssignmentDeclaration(declKind, rightType);
                     if (isAssignmentDeclaration(declKind)) {
@@ -74220,7 +75621,7 @@
                 }
             }
             function isEvalNode(node) {
-                return node.kind === 78 /* Identifier */ && node.escapedText === "eval";
+                return node.kind === 79 /* Identifier */ && node.escapedText === "eval";
             }
             // Return true if there was no error, false if there was an error.
             function checkForDisallowedESSymbolOperand(operator) {
@@ -74236,13 +75637,13 @@
             function getSuggestedBooleanOperator(operator) {
                 switch (operator) {
                     case 51 /* BarToken */:
-                    case 73 /* BarEqualsToken */:
+                    case 74 /* BarEqualsToken */:
                         return 56 /* BarBarToken */;
                     case 52 /* CaretToken */:
-                    case 77 /* CaretEqualsToken */:
+                    case 78 /* CaretEqualsToken */:
                         return 37 /* ExclamationEqualsEqualsToken */;
                     case 50 /* AmpersandToken */:
-                    case 72 /* AmpersandEqualsToken */:
+                    case 73 /* AmpersandEqualsToken */:
                         return 55 /* AmpersandAmpersandToken */;
                     default:
                         return undefined;
@@ -74411,6 +75812,11 @@
             var type2 = checkExpression(node.whenFalse, checkMode);
             return getUnionType([type1, type2], 2 /* Subtype */);
         }
+        function isTemplateLiteralContext(node) {
+            var parent = node.parent;
+            return ts.isParenthesizedExpression(parent) && isTemplateLiteralContext(parent) ||
+                ts.isElementAccessExpression(parent) && parent.argumentExpression === node;
+        }
         function checkTemplateExpression(node) {
             var texts = [node.head.text];
             var types = [];
@@ -74423,14 +75829,14 @@
                 texts.push(span.literal.text);
                 types.push(isTypeAssignableTo(type, templateConstraintType) ? type : stringType);
             }
-            return isConstContext(node) || someType(getContextualType(node) || unknownType, isTemplateLiteralContextualType) ? getTemplateLiteralType(texts, types) : stringType;
+            return isConstContext(node) || isTemplateLiteralContext(node) || someType(getContextualType(node) || unknownType, isTemplateLiteralContextualType) ? getTemplateLiteralType(texts, types) : stringType;
         }
         function isTemplateLiteralContextualType(type) {
             return !!(type.flags & (128 /* StringLiteral */ | 134217728 /* TemplateLiteral */) ||
                 type.flags & 58982400 /* InstantiableNonPrimitive */ && maybeTypeOfKind(getBaseConstraintOfType(type) || unknownType, 402653316 /* StringLike */));
         }
         function getContextNode(node) {
-            if (node.kind === 282 /* JsxAttributes */ && !ts.isJsxSelfClosingElement(node.parent)) {
+            if (node.kind === 284 /* JsxAttributes */ && !ts.isJsxSelfClosingElement(node.parent)) {
                 return node.parent.parent; // Needs to be the root JsxElement, so it encompasses the attributes _and_ the children (which are essentially part of the attributes)
             }
             return node;
@@ -74479,13 +75885,13 @@
         }
         function isTypeAssertion(node) {
             node = ts.skipParentheses(node);
-            return node.kind === 207 /* TypeAssertionExpression */ || node.kind === 225 /* AsExpression */;
+            return node.kind === 209 /* TypeAssertionExpression */ || node.kind === 227 /* AsExpression */;
         }
         function checkDeclarationInitializer(declaration, contextualType) {
             var initializer = ts.getEffectiveInitializer(declaration);
             var type = getQuickTypeOfExpression(initializer) ||
                 (contextualType ? checkExpressionWithContextualType(initializer, contextualType, /*inferenceContext*/ undefined, 0 /* Normal */) : checkExpressionCached(initializer));
-            return ts.isParameter(declaration) && declaration.name.kind === 198 /* ArrayBindingPattern */ &&
+            return ts.isParameter(declaration) && declaration.name.kind === 200 /* ArrayBindingPattern */ &&
                 isTupleType(type) && !type.target.hasRestElement && getTypeReferenceArity(type) < declaration.name.elements.length ?
                 padTupleType(type, declaration.name) : type;
         }
@@ -74495,7 +75901,7 @@
             var elementFlags = type.target.elementFlags.slice();
             for (var i = getTypeReferenceArity(type); i < patternElements.length; i++) {
                 var e = patternElements[i];
-                if (i < patternElements.length - 1 || !(e.kind === 199 /* BindingElement */ && e.dotDotDotToken)) {
+                if (i < patternElements.length - 1 || !(e.kind === 201 /* BindingElement */ && e.dotDotDotToken)) {
                     elementTypes.push(!ts.isOmittedExpression(e) && hasDefaultValue(e) ? getTypeFromBindingElement(e, /*includePatternInType*/ false, /*reportErrors*/ false) : anyType);
                     elementFlags.push(2 /* Optional */);
                     if (!ts.isOmittedExpression(e) && !hasDefaultValue(e)) {
@@ -74508,7 +75914,7 @@
         function widenTypeInferredFromInitializer(declaration, type) {
             var widened = ts.getCombinedNodeFlags(declaration) & 2 /* Const */ || ts.isDeclarationReadonly(declaration) ? type : getWidenedLiteralType(type);
             if (ts.isInJSFile(declaration)) {
-                if (widened.flags & 98304 /* Nullable */) {
+                if (isEmptyLiteralType(widened)) {
                     reportImplicitAny(declaration, anyType);
                     return anyType;
                 }
@@ -74562,7 +75968,7 @@
             // Do not use hasDynamicName here, because that returns false for well known symbols.
             // We want to perform checkComputedPropertyName for all computed properties, including
             // well known symbols.
-            if (node.name.kind === 159 /* ComputedPropertyName */) {
+            if (node.name.kind === 160 /* ComputedPropertyName */) {
                 checkComputedPropertyName(node.name);
             }
             return checkExpressionForMutableLocation(node.initializer, checkMode);
@@ -74573,7 +75979,7 @@
             // Do not use hasDynamicName here, because that returns false for well known symbols.
             // We want to perform checkComputedPropertyName for all computed properties, including
             // well known symbols.
-            if (node.name.kind === 159 /* ComputedPropertyName */) {
+            if (node.name.kind === 160 /* ComputedPropertyName */) {
                 checkComputedPropertyName(node.name);
             }
             var uninstantiatedType = checkFunctionExpressionOrObjectLiteralMethod(node, checkMode);
@@ -74700,7 +76106,7 @@
                 len--;
             var s = baseName.slice(0, len);
             for (var index = 1; true; index++) {
-                var augmentedName = (s + index);
+                var augmentedName = s + index;
                 if (!hasTypeParameterByName(typeParameters, augmentedName)) {
                     return augmentedName;
                 }
@@ -74749,7 +76155,7 @@
             var expr = ts.skipParentheses(node);
             // Optimize for the common case of a call to a function with a single non-generic call
             // signature where we can just fetch the return type without checking the arguments.
-            if (ts.isCallExpression(expr) && expr.expression.kind !== 105 /* SuperKeyword */ && !ts.isRequireCall(expr, /*checkArgumentIsStringLiteralLike*/ true) && !isSymbolOrSymbolForCall(expr)) {
+            if (ts.isCallExpression(expr) && expr.expression.kind !== 106 /* SuperKeyword */ && !ts.isRequireCall(expr, /*checkArgumentIsStringLiteralLike*/ true) && !isSymbolOrSymbolForCall(expr)) {
                 var type = ts.isCallChain(expr) ? getReturnTypeOfSingleNonGenericSignatureOfCallChain(expr) :
                     getReturnTypeOfSingleNonGenericCallSignature(checkNonNullExpression(expr.expression));
                 if (type) {
@@ -74760,7 +76166,7 @@
                 return getTypeFromTypeNode(expr.type);
             }
             else if (node.kind === 8 /* NumericLiteral */ || node.kind === 10 /* StringLiteral */ ||
-                node.kind === 109 /* TrueKeyword */ || node.kind === 94 /* FalseKeyword */) {
+                node.kind === 110 /* TrueKeyword */ || node.kind === 95 /* FalseKeyword */) {
                 return checkExpression(node);
             }
             return undefined;
@@ -74809,11 +76215,11 @@
             // - 'left' in property access
             // - 'object' in indexed access
             // - target in rhs of import statement
-            var ok = (node.parent.kind === 202 /* PropertyAccessExpression */ && node.parent.expression === node) ||
-                (node.parent.kind === 203 /* ElementAccessExpression */ && node.parent.expression === node) ||
-                ((node.kind === 78 /* Identifier */ || node.kind === 158 /* QualifiedName */) && isInRightSideOfImportOrExportAssignment(node) ||
-                    (node.parent.kind === 177 /* TypeQuery */ && node.parent.exprName === node)) ||
-                (node.parent.kind === 271 /* ExportSpecifier */); // We allow reexporting const enums
+            var ok = (node.parent.kind === 204 /* PropertyAccessExpression */ && node.parent.expression === node) ||
+                (node.parent.kind === 205 /* ElementAccessExpression */ && node.parent.expression === node) ||
+                ((node.kind === 79 /* Identifier */ || node.kind === 159 /* QualifiedName */) && isInRightSideOfImportOrExportAssignment(node) ||
+                    (node.parent.kind === 179 /* TypeQuery */ && node.parent.exprName === node)) ||
+                (node.parent.kind === 273 /* ExportSpecifier */); // We allow reexporting const enums
             if (!ok) {
                 error(node, ts.Diagnostics.const_enums_can_only_be_used_in_property_or_index_access_expressions_or_the_right_hand_side_of_an_import_declaration_or_export_assignment_or_type_query);
             }
@@ -74828,7 +76234,7 @@
         function checkParenthesizedExpression(node, checkMode) {
             var tag = ts.isInJSFile(node) ? ts.getJSDocTypeTag(node) : undefined;
             if (tag) {
-                return checkAssertionWorker(tag, tag.typeExpression.type, node.expression, checkMode);
+                return checkAssertionWorker(tag.typeExpression.type, tag.typeExpression.type, node.expression, checkMode);
             }
             return checkExpression(node.expression, checkMode);
         }
@@ -74838,106 +76244,109 @@
                 // Only bother checking on a few construct kinds.  We don't want to be excessively
                 // hitting the cancellation token on every node we check.
                 switch (kind) {
-                    case 222 /* ClassExpression */:
-                    case 209 /* FunctionExpression */:
-                    case 210 /* ArrowFunction */:
+                    case 224 /* ClassExpression */:
+                    case 211 /* FunctionExpression */:
+                    case 212 /* ArrowFunction */:
                         cancellationToken.throwIfCancellationRequested();
                 }
             }
             switch (kind) {
-                case 78 /* Identifier */:
+                case 79 /* Identifier */:
                     return checkIdentifier(node, checkMode);
-                case 107 /* ThisKeyword */:
+                case 108 /* ThisKeyword */:
                     return checkThisExpression(node);
-                case 105 /* SuperKeyword */:
+                case 106 /* SuperKeyword */:
                     return checkSuperExpression(node);
-                case 103 /* NullKeyword */:
+                case 104 /* NullKeyword */:
                     return nullWideningType;
                 case 14 /* NoSubstitutionTemplateLiteral */:
                 case 10 /* StringLiteral */:
-                    return getFreshTypeOfLiteralType(getLiteralType(node.text));
+                    return getFreshTypeOfLiteralType(getStringLiteralType(node.text));
                 case 8 /* NumericLiteral */:
                     checkGrammarNumericLiteral(node);
-                    return getFreshTypeOfLiteralType(getLiteralType(+node.text));
+                    return getFreshTypeOfLiteralType(getNumberLiteralType(+node.text));
                 case 9 /* BigIntLiteral */:
                     checkGrammarBigIntLiteral(node);
-                    return getFreshTypeOfLiteralType(getBigIntLiteralType(node));
-                case 109 /* TrueKeyword */:
+                    return getFreshTypeOfLiteralType(getBigIntLiteralType({
+                        negative: false,
+                        base10Value: ts.parsePseudoBigInt(node.text)
+                    }));
+                case 110 /* TrueKeyword */:
                     return trueType;
-                case 94 /* FalseKeyword */:
+                case 95 /* FalseKeyword */:
                     return falseType;
-                case 219 /* TemplateExpression */:
+                case 221 /* TemplateExpression */:
                     return checkTemplateExpression(node);
                 case 13 /* RegularExpressionLiteral */:
                     return globalRegExpType;
-                case 200 /* ArrayLiteralExpression */:
+                case 202 /* ArrayLiteralExpression */:
                     return checkArrayLiteral(node, checkMode, forceTuple);
-                case 201 /* ObjectLiteralExpression */:
+                case 203 /* ObjectLiteralExpression */:
                     return checkObjectLiteral(node, checkMode);
-                case 202 /* PropertyAccessExpression */:
+                case 204 /* PropertyAccessExpression */:
                     return checkPropertyAccessExpression(node, checkMode);
-                case 158 /* QualifiedName */:
+                case 159 /* QualifiedName */:
                     return checkQualifiedName(node, checkMode);
-                case 203 /* ElementAccessExpression */:
+                case 205 /* ElementAccessExpression */:
                     return checkIndexedAccess(node, checkMode);
-                case 204 /* CallExpression */:
-                    if (node.expression.kind === 99 /* ImportKeyword */) {
+                case 206 /* CallExpression */:
+                    if (node.expression.kind === 100 /* ImportKeyword */) {
                         return checkImportCallExpression(node);
                     }
                 // falls through
-                case 205 /* NewExpression */:
+                case 207 /* NewExpression */:
                     return checkCallExpression(node, checkMode);
-                case 206 /* TaggedTemplateExpression */:
+                case 208 /* TaggedTemplateExpression */:
                     return checkTaggedTemplateExpression(node);
-                case 208 /* ParenthesizedExpression */:
+                case 210 /* ParenthesizedExpression */:
                     return checkParenthesizedExpression(node, checkMode);
-                case 222 /* ClassExpression */:
+                case 224 /* ClassExpression */:
                     return checkClassExpression(node);
-                case 209 /* FunctionExpression */:
-                case 210 /* ArrowFunction */:
+                case 211 /* FunctionExpression */:
+                case 212 /* ArrowFunction */:
                     return checkFunctionExpressionOrObjectLiteralMethod(node, checkMode);
-                case 212 /* TypeOfExpression */:
+                case 214 /* TypeOfExpression */:
                     return checkTypeOfExpression(node);
-                case 207 /* TypeAssertionExpression */:
-                case 225 /* AsExpression */:
+                case 209 /* TypeAssertionExpression */:
+                case 227 /* AsExpression */:
                     return checkAssertion(node);
-                case 226 /* NonNullExpression */:
+                case 228 /* NonNullExpression */:
                     return checkNonNullAssertion(node);
-                case 227 /* MetaProperty */:
+                case 229 /* MetaProperty */:
                     return checkMetaProperty(node);
-                case 211 /* DeleteExpression */:
+                case 213 /* DeleteExpression */:
                     return checkDeleteExpression(node);
-                case 213 /* VoidExpression */:
+                case 215 /* VoidExpression */:
                     return checkVoidExpression(node);
-                case 214 /* AwaitExpression */:
+                case 216 /* AwaitExpression */:
                     return checkAwaitExpression(node);
-                case 215 /* PrefixUnaryExpression */:
+                case 217 /* PrefixUnaryExpression */:
                     return checkPrefixUnaryExpression(node);
-                case 216 /* PostfixUnaryExpression */:
+                case 218 /* PostfixUnaryExpression */:
                     return checkPostfixUnaryExpression(node);
-                case 217 /* BinaryExpression */:
+                case 219 /* BinaryExpression */:
                     return checkBinaryExpression(node, checkMode);
-                case 218 /* ConditionalExpression */:
+                case 220 /* ConditionalExpression */:
                     return checkConditionalExpression(node, checkMode);
-                case 221 /* SpreadElement */:
+                case 223 /* SpreadElement */:
                     return checkSpreadExpression(node, checkMode);
-                case 223 /* OmittedExpression */:
+                case 225 /* OmittedExpression */:
                     return undefinedWideningType;
-                case 220 /* YieldExpression */:
+                case 222 /* YieldExpression */:
                     return checkYieldExpression(node);
-                case 228 /* SyntheticExpression */:
+                case 230 /* SyntheticExpression */:
                     return checkSyntheticExpression(node);
-                case 284 /* JsxExpression */:
+                case 286 /* JsxExpression */:
                     return checkJsxExpression(node, checkMode);
-                case 274 /* JsxElement */:
+                case 276 /* JsxElement */:
                     return checkJsxElement(node, checkMode);
-                case 275 /* JsxSelfClosingElement */:
+                case 277 /* JsxSelfClosingElement */:
                     return checkJsxSelfClosingElement(node, checkMode);
-                case 278 /* JsxFragment */:
+                case 280 /* JsxFragment */:
                     return checkJsxFragment(node);
-                case 282 /* JsxAttributes */:
+                case 284 /* JsxAttributes */:
                     return checkJsxAttributes(node, checkMode);
-                case 276 /* JsxOpeningElement */:
+                case 278 /* JsxOpeningElement */:
                     ts.Debug.fail("Shouldn't ever directly check a JsxOpeningElement");
             }
             return errorType;
@@ -74974,10 +76383,10 @@
             checkVariableLikeDeclaration(node);
             var func = ts.getContainingFunction(node);
             if (ts.hasSyntacticModifier(node, 16476 /* ParameterPropertyModifier */)) {
-                if (!(func.kind === 167 /* Constructor */ && ts.nodeIsPresent(func.body))) {
+                if (!(func.kind === 169 /* Constructor */ && ts.nodeIsPresent(func.body))) {
                     error(node, ts.Diagnostics.A_parameter_property_is_only_allowed_in_a_constructor_implementation);
                 }
-                if (func.kind === 167 /* Constructor */ && ts.isIdentifier(node.name) && node.name.escapedText === "constructor") {
+                if (func.kind === 169 /* Constructor */ && ts.isIdentifier(node.name) && node.name.escapedText === "constructor") {
                     error(node.name, ts.Diagnostics.constructor_cannot_be_used_as_a_parameter_property_name);
                 }
             }
@@ -74988,13 +76397,13 @@
                 if (func.parameters.indexOf(node) !== 0) {
                     error(node, ts.Diagnostics.A_0_parameter_must_be_the_first_parameter, node.name.escapedText);
                 }
-                if (func.kind === 167 /* Constructor */ || func.kind === 171 /* ConstructSignature */ || func.kind === 176 /* ConstructorType */) {
+                if (func.kind === 169 /* Constructor */ || func.kind === 173 /* ConstructSignature */ || func.kind === 178 /* ConstructorType */) {
                     error(node, ts.Diagnostics.A_constructor_cannot_have_a_this_parameter);
                 }
-                if (func.kind === 210 /* ArrowFunction */) {
+                if (func.kind === 212 /* ArrowFunction */) {
                     error(node, ts.Diagnostics.An_arrow_function_cannot_have_a_this_parameter);
                 }
-                if (func.kind === 168 /* GetAccessor */ || func.kind === 169 /* SetAccessor */) {
+                if (func.kind === 170 /* GetAccessor */ || func.kind === 171 /* SetAccessor */) {
                     error(node, ts.Diagnostics.get_and_set_accessors_cannot_declare_this_parameters);
                 }
             }
@@ -75052,13 +76461,13 @@
         }
         function getTypePredicateParent(node) {
             switch (node.parent.kind) {
-                case 210 /* ArrowFunction */:
-                case 170 /* CallSignature */:
-                case 252 /* FunctionDeclaration */:
-                case 209 /* FunctionExpression */:
-                case 175 /* FunctionType */:
-                case 166 /* MethodDeclaration */:
-                case 165 /* MethodSignature */:
+                case 212 /* ArrowFunction */:
+                case 172 /* CallSignature */:
+                case 254 /* FunctionDeclaration */:
+                case 211 /* FunctionExpression */:
+                case 177 /* FunctionType */:
+                case 167 /* MethodDeclaration */:
+                case 166 /* MethodSignature */:
                     var parent = node.parent;
                     if (node === parent.type) {
                         return parent;
@@ -75072,11 +76481,11 @@
                     continue;
                 }
                 var name = element.name;
-                if (name.kind === 78 /* Identifier */ && name.escapedText === predicateVariableName) {
+                if (name.kind === 79 /* Identifier */ && name.escapedText === predicateVariableName) {
                     error(predicateVariableNode, ts.Diagnostics.A_type_predicate_cannot_reference_element_0_in_a_binding_pattern, predicateVariableName);
                     return true;
                 }
-                else if (name.kind === 198 /* ArrayBindingPattern */ || name.kind === 197 /* ObjectBindingPattern */) {
+                else if (name.kind === 200 /* ArrayBindingPattern */ || name.kind === 199 /* ObjectBindingPattern */) {
                     if (checkIfTypePredicateVariableIsDeclaredInBindingPattern(name, predicateVariableNode, predicateVariableName)) {
                         return true;
                     }
@@ -75085,13 +76494,13 @@
         }
         function checkSignatureDeclaration(node) {
             // Grammar checking
-            if (node.kind === 172 /* IndexSignature */) {
+            if (node.kind === 174 /* IndexSignature */) {
                 checkGrammarIndexSignature(node);
             }
             // TODO (yuisu): Remove this check in else-if when SyntaxKind.Construct is moved and ambient context is handled
-            else if (node.kind === 175 /* FunctionType */ || node.kind === 252 /* FunctionDeclaration */ || node.kind === 176 /* ConstructorType */ ||
-                node.kind === 170 /* CallSignature */ || node.kind === 167 /* Constructor */ ||
-                node.kind === 171 /* ConstructSignature */) {
+            else if (node.kind === 177 /* FunctionType */ || node.kind === 254 /* FunctionDeclaration */ || node.kind === 178 /* ConstructorType */ ||
+                node.kind === 172 /* CallSignature */ || node.kind === 169 /* Constructor */ ||
+                node.kind === 173 /* ConstructSignature */) {
                 checkGrammarFunctionLikeDeclaration(node);
             }
             var functionFlags = ts.getFunctionFlags(node);
@@ -75121,10 +76530,10 @@
                 var returnTypeNode = ts.getEffectiveReturnTypeNode(node);
                 if (noImplicitAny && !returnTypeNode) {
                     switch (node.kind) {
-                        case 171 /* ConstructSignature */:
+                        case 173 /* ConstructSignature */:
                             error(node, ts.Diagnostics.Construct_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type);
                             break;
-                        case 170 /* CallSignature */:
+                        case 172 /* CallSignature */:
                             error(node, ts.Diagnostics.Call_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type);
                             break;
                     }
@@ -75154,7 +76563,7 @@
                         checkAsyncFunctionReturnType(node, returnTypeNode);
                     }
                 }
-                if (node.kind !== 172 /* IndexSignature */ && node.kind !== 309 /* JSDocFunctionType */) {
+                if (node.kind !== 174 /* IndexSignature */ && node.kind !== 312 /* JSDocFunctionType */) {
                     registerForUnusedIdentifiersCheck(node);
                 }
             }
@@ -75166,7 +76575,7 @@
             var privateIdentifiers = new ts.Map();
             for (var _i = 0, _a = node.members; _i < _a.length; _i++) {
                 var member = _a[_i];
-                if (member.kind === 167 /* Constructor */) {
+                if (member.kind === 169 /* Constructor */) {
                     for (var _b = 0, _c = member.parameters; _b < _c.length; _b++) {
                         var param = _c[_b];
                         if (ts.isParameterPropertyDeclaration(param, member) && !ts.isBindingPattern(param.name)) {
@@ -75175,29 +76584,29 @@
                     }
                 }
                 else {
-                    var isStatic = ts.hasSyntacticModifier(member, 32 /* Static */);
+                    var isStaticMember = ts.isStatic(member);
                     var name = member.name;
                     if (!name) {
                         continue;
                     }
                     var isPrivate = ts.isPrivateIdentifier(name);
-                    var privateStaticFlags = isPrivate && isStatic ? 16 /* PrivateStatic */ : 0;
+                    var privateStaticFlags = isPrivate && isStaticMember ? 16 /* PrivateStatic */ : 0;
                     var names = isPrivate ? privateIdentifiers :
-                        isStatic ? staticNames :
+                        isStaticMember ? staticNames :
                             instanceNames;
                     var memberName = name && ts.getPropertyNameForPropertyNameNode(name);
                     if (memberName) {
                         switch (member.kind) {
-                            case 168 /* GetAccessor */:
+                            case 170 /* GetAccessor */:
                                 addName(names, name, memberName, 1 /* GetAccessor */ | privateStaticFlags);
                                 break;
-                            case 169 /* SetAccessor */:
+                            case 171 /* SetAccessor */:
                                 addName(names, name, memberName, 2 /* SetAccessor */ | privateStaticFlags);
                                 break;
-                            case 164 /* PropertyDeclaration */:
+                            case 165 /* PropertyDeclaration */:
                                 addName(names, name, memberName, 3 /* GetOrSetAccessor */ | privateStaticFlags);
                                 break;
-                            case 166 /* MethodDeclaration */:
+                            case 167 /* MethodDeclaration */:
                                 addName(names, name, memberName, 8 /* Method */ | privateStaticFlags);
                                 break;
                         }
@@ -75248,8 +76657,8 @@
             for (var _i = 0, _a = node.members; _i < _a.length; _i++) {
                 var member = _a[_i];
                 var memberNameNode = member.name;
-                var isStatic = ts.hasSyntacticModifier(member, 32 /* Static */);
-                if (isStatic && memberNameNode) {
+                var isStaticMember = ts.isStatic(member);
+                if (isStaticMember && memberNameNode) {
                     var memberName = ts.getPropertyNameForPropertyNameNode(memberNameNode);
                     switch (memberName) {
                         case "name":
@@ -75269,7 +76678,7 @@
             var names = new ts.Map();
             for (var _i = 0, _a = node.members; _i < _a.length; _i++) {
                 var member = _a[_i];
-                if (member.kind === 163 /* PropertySignature */) {
+                if (member.kind === 164 /* PropertySignature */) {
                     var memberName = void 0;
                     var name = member.name;
                     switch (name.kind) {
@@ -75277,7 +76686,7 @@
                         case 8 /* NumericLiteral */:
                             memberName = name.text;
                             break;
-                        case 78 /* Identifier */:
+                        case 79 /* Identifier */:
                             memberName = ts.idText(name);
                             break;
                         default:
@@ -75294,7 +76703,7 @@
             }
         }
         function checkTypeForDuplicateIndexSignatures(node) {
-            if (node.kind === 254 /* InterfaceDeclaration */) {
+            if (node.kind === 256 /* InterfaceDeclaration */) {
                 var nodeSymbol = getSymbolOfNode(node);
                 // in case of merging interface declaration it is possible that we'll enter this check procedure several times for every declaration
                 // to prevent this run check only for the first declaration of a given kind
@@ -75307,32 +76716,32 @@
             // 8.5: A class declaration can have at most one string index member declaration and one numeric index member declaration
             var indexSymbol = getIndexSymbol(getSymbolOfNode(node));
             if (indexSymbol === null || indexSymbol === void 0 ? void 0 : indexSymbol.declarations) {
-                var seenNumericIndexer = false;
-                var seenStringIndexer = false;
-                for (var _i = 0, _a = indexSymbol.declarations; _i < _a.length; _i++) {
-                    var decl = _a[_i];
-                    var declaration = decl;
+                var indexSignatureMap_1 = new ts.Map();
+                var _loop_26 = function (declaration) {
                     if (declaration.parameters.length === 1 && declaration.parameters[0].type) {
-                        switch (declaration.parameters[0].type.kind) {
-                            case 147 /* StringKeyword */:
-                                if (!seenStringIndexer) {
-                                    seenStringIndexer = true;
-                                }
-                                else {
-                                    error(declaration, ts.Diagnostics.Duplicate_string_index_signature);
-                                }
-                                break;
-                            case 144 /* NumberKeyword */:
-                                if (!seenNumericIndexer) {
-                                    seenNumericIndexer = true;
-                                }
-                                else {
-                                    error(declaration, ts.Diagnostics.Duplicate_number_index_signature);
-                                }
-                                break;
+                        forEachType(getTypeFromTypeNode(declaration.parameters[0].type), function (type) {
+                            var entry = indexSignatureMap_1.get(getTypeId(type));
+                            if (entry) {
+                                entry.declarations.push(declaration);
+                            }
+                            else {
+                                indexSignatureMap_1.set(getTypeId(type), { type: type, declarations: [declaration] });
+                            }
+                        });
+                    }
+                };
+                for (var _i = 0, _a = indexSymbol.declarations; _i < _a.length; _i++) {
+                    var declaration = _a[_i];
+                    _loop_26(declaration);
+                }
+                indexSignatureMap_1.forEach(function (entry) {
+                    if (entry.declarations.length > 1) {
+                        for (var _i = 0, _a = entry.declarations; _i < _a.length; _i++) {
+                            var declaration = _a[_i];
+                            error(declaration, ts.Diagnostics.Duplicate_index_signature_for_type_0, typeToString(entry.type));
                         }
                     }
-                }
+                });
             }
         }
         function checkPropertyDeclaration(node) {
@@ -75344,6 +76753,10 @@
             if (ts.isPrivateIdentifier(node.name) && ts.hasStaticModifier(node) && node.initializer && languageVersion === 99 /* ESNext */ && !compilerOptions.useDefineForClassFields) {
                 error(node.initializer, ts.Diagnostics.Static_fields_with_private_names_can_t_have_initializers_when_the_useDefineForClassFields_flag_is_not_specified_with_a_target_of_esnext_Consider_adding_the_useDefineForClassFields_flag);
             }
+            // property signatures already report "initializer not allowed in ambient context" elsewhere
+            if (ts.hasSyntacticModifier(node, 128 /* Abstract */) && node.kind === 165 /* PropertyDeclaration */ && node.initializer) {
+                error(node, ts.Diagnostics.Property_0_cannot_have_an_initializer_because_it_is_marked_abstract, ts.declarationNameToString(node.name));
+            }
         }
         function checkPropertySignature(node) {
             if (ts.isPrivateIdentifier(node.name)) {
@@ -75357,9 +76770,8 @@
                 checkGrammarComputedPropertyName(node.name);
             // Grammar checking for modifiers is done inside the function checkGrammarFunctionLikeDeclaration
             checkFunctionOrMethodDeclaration(node);
-            // Abstract methods cannot have an implementation.
-            // Extra checks are to avoid reporting multiple errors relating to the "abstractness" of the node.
-            if (ts.hasSyntacticModifier(node, 128 /* Abstract */) && node.kind === 166 /* MethodDeclaration */ && node.body) {
+            // method signatures already report "implementation not allowed in ambient context" elsewhere
+            if (ts.hasSyntacticModifier(node, 128 /* Abstract */) && node.kind === 167 /* MethodDeclaration */ && node.body) {
                 error(node, ts.Diagnostics.Method_0_cannot_have_an_implementation_because_it_is_marked_abstract, ts.declarationNameToString(node.name));
             }
             // Private named methods are only allowed in class declarations
@@ -75385,6 +76797,10 @@
                 }
             }
         }
+        function checkClassStaticBlockDeclaration(node) {
+            checkGrammarDecoratorsAndModifiers(node);
+            ts.forEachChild(node, checkSourceElement);
+        }
         function checkConstructorDeclaration(node) {
             // Grammar check on signature of constructor and modifier of the constructor is done in checkSignatureDeclaration function.
             checkSignatureDeclaration(node);
@@ -75409,8 +76825,8 @@
                 if (ts.isPrivateIdentifierClassElementDeclaration(n)) {
                     return true;
                 }
-                return n.kind === 164 /* PropertyDeclaration */ &&
-                    !ts.hasSyntacticModifier(n, 32 /* Static */) &&
+                return n.kind === 165 /* PropertyDeclaration */ &&
+                    !ts.isStatic(n) &&
                     !!n.initializer;
             }
             // TS 1.0 spec (April 2014): 8.3.2
@@ -75440,7 +76856,7 @@
                         var superCallStatement = void 0;
                         for (var _i = 0, statements_4 = statements; _i < statements_4.length; _i++) {
                             var statement = statements_4[_i];
-                            if (statement.kind === 234 /* ExpressionStatement */ && ts.isSuperCall(statement.expression)) {
+                            if (statement.kind === 236 /* ExpressionStatement */ && ts.isSuperCall(statement.expression)) {
                                 superCallStatement = statement;
                                 break;
                             }
@@ -75465,7 +76881,7 @@
                     checkGrammarComputedPropertyName(node.name);
                 checkDecorators(node);
                 checkSignatureDeclaration(node);
-                if (node.kind === 168 /* GetAccessor */) {
+                if (node.kind === 170 /* GetAccessor */) {
                     if (!(node.flags & 8388608 /* Ambient */) && ts.nodeIsPresent(node.body) && (node.flags & 256 /* HasImplicitReturn */)) {
                         if (!(node.flags & 512 /* HasExplicitReturn */)) {
                             error(node.name, ts.Diagnostics.A_get_accessor_must_return_a_value);
@@ -75475,15 +76891,15 @@
                 // Do not use hasDynamicName here, because that returns false for well known symbols.
                 // We want to perform checkComputedPropertyName for all computed properties, including
                 // well known symbols.
-                if (node.name.kind === 159 /* ComputedPropertyName */) {
+                if (node.name.kind === 160 /* ComputedPropertyName */) {
                     checkComputedPropertyName(node.name);
                 }
                 if (hasBindableName(node)) {
                     // TypeScript 1.0 spec (April 2014): 8.4.3
                     // Accessors for the same member name must specify the same accessibility.
                     var symbol = getSymbolOfNode(node);
-                    var getter = ts.getDeclarationOfKind(symbol, 168 /* GetAccessor */);
-                    var setter = ts.getDeclarationOfKind(symbol, 169 /* SetAccessor */);
+                    var getter = ts.getDeclarationOfKind(symbol, 170 /* GetAccessor */);
+                    var setter = ts.getDeclarationOfKind(symbol, 171 /* SetAccessor */);
                     if (getter && setter && !(getNodeCheckFlags(getter) & 1 /* TypeChecked */)) {
                         getNodeLinks(getter).flags |= 1 /* TypeChecked */;
                         var getterFlags = ts.getEffectiveModifierFlags(getter);
@@ -75505,7 +76921,7 @@
                     }
                 }
                 var returnType = getTypeOfAccessors(getSymbolOfNode(node));
-                if (node.kind === 168 /* GetAccessor */) {
+                if (node.kind === 170 /* GetAccessor */) {
                     checkAllCodePathsInNonVoidFunctionReturnOrThrow(node, returnType);
                 }
             }
@@ -75547,7 +76963,7 @@
         }
         function checkTypeReferenceNode(node) {
             checkGrammarTypeArguments(node, node.typeArguments);
-            if (node.kind === 174 /* TypeReference */ && node.typeName.jsdocDotPos !== undefined && !ts.isInJSFile(node) && !ts.isInJSDoc(node)) {
+            if (node.kind === 176 /* TypeReference */ && node.typeName.jsdocDotPos !== undefined && !ts.isInJSFile(node) && !ts.isInJSDoc(node)) {
                 grammarErrorAtPos(node, node.typeName.jsdocDotPos, 1, ts.Diagnostics.JSDoc_types_can_only_be_used_inside_documentation_comments);
             }
             ts.forEach(node.typeArguments, checkSourceElement);
@@ -75600,7 +77016,7 @@
             var hasNamedElement = ts.some(elementTypes, ts.isNamedTupleMember);
             for (var _i = 0, elementTypes_1 = elementTypes; _i < elementTypes_1.length; _i++) {
                 var e = elementTypes_1[_i];
-                if (e.kind !== 193 /* NamedTupleMember */ && hasNamedElement) {
+                if (e.kind !== 195 /* NamedTupleMember */ && hasNamedElement) {
                     grammarErrorOnNode(e, ts.Diagnostics.Tuple_members_must_all_have_names_or_all_not_have_names);
                     break;
                 }
@@ -75649,7 +77065,7 @@
             var objectType = type.objectType;
             var indexType = type.indexType;
             if (isTypeAssignableTo(indexType, getIndexType(objectType, /*stringsOnly*/ false))) {
-                if (accessNode.kind === 203 /* ElementAccessExpression */ && ts.isAssignmentTarget(accessNode) &&
+                if (accessNode.kind === 205 /* ElementAccessExpression */ && ts.isAssignmentTarget(accessNode) &&
                     ts.getObjectFlags(objectType) & 32 /* Mapped */ && getMappedTypeModifiers(objectType) & 1 /* IncludeReadonly */) {
                     error(accessNode, ts.Diagnostics.Index_signature_in_type_0_only_permits_reading, typeToString(objectType));
                 }
@@ -75658,7 +77074,7 @@
             // Check if we're indexing with a numeric type and if either object or index types
             // is a generic type with a constraint that has a numeric index signature.
             var apparentObjectType = getApparentType(objectType);
-            if (getIndexInfoOfType(apparentObjectType, 1 /* Number */) && isTypeAssignableToKind(indexType, 296 /* NumberLike */)) {
+            if (getIndexInfoOfType(apparentObjectType, numberType) && isTypeAssignableToKind(indexType, 296 /* NumberLike */)) {
                 return type;
             }
             if (isGenericObjectType(objectType)) {
@@ -75707,7 +77123,7 @@
             ts.forEachChild(node, checkSourceElement);
         }
         function checkInferType(node) {
-            if (!ts.findAncestor(node, function (n) { return n.parent && n.parent.kind === 185 /* ConditionalType */ && n.parent.extendsType === n; })) {
+            if (!ts.findAncestor(node, function (n) { return n.parent && n.parent.kind === 187 /* ConditionalType */ && n.parent.extendsType === n; })) {
                 grammarErrorOnNode(node, ts.Diagnostics.infer_declarations_are_only_permitted_in_the_extends_clause_of_a_conditional_type);
             }
             checkSourceElement(node.typeParameter);
@@ -75730,10 +77146,10 @@
             if (node.dotDotDotToken && node.questionToken) {
                 grammarErrorOnNode(node, ts.Diagnostics.A_tuple_member_cannot_be_both_optional_and_rest);
             }
-            if (node.type.kind === 181 /* OptionalType */) {
+            if (node.type.kind === 183 /* OptionalType */) {
                 grammarErrorOnNode(node.type, ts.Diagnostics.A_labeled_tuple_element_is_declared_as_optional_with_a_question_mark_after_the_name_and_before_the_colon_rather_than_after_the_type);
             }
-            if (node.type.kind === 182 /* RestType */) {
+            if (node.type.kind === 184 /* RestType */) {
                 grammarErrorOnNode(node.type, ts.Diagnostics.A_labeled_tuple_element_is_declared_as_rest_with_a_before_the_name_rather_than_before_the_type);
             }
             checkSourceElement(node.type);
@@ -75746,9 +77162,9 @@
             var flags = ts.getCombinedModifierFlags(n);
             // children of classes (even ambient classes) should not be marked as ambient or export
             // because those flags have no useful semantics there.
-            if (n.parent.kind !== 254 /* InterfaceDeclaration */ &&
-                n.parent.kind !== 253 /* ClassDeclaration */ &&
-                n.parent.kind !== 222 /* ClassExpression */ &&
+            if (n.parent.kind !== 256 /* InterfaceDeclaration */ &&
+                n.parent.kind !== 255 /* ClassDeclaration */ &&
+                n.parent.kind !== 224 /* ClassExpression */ &&
                 n.flags & 8388608 /* Ambient */) {
                 if (!(flags & 2 /* Ambient */) && !(ts.isModuleBlock(n.parent) && ts.isModuleDeclaration(n.parent.parent) && ts.isGlobalScopeAugmentation(n.parent.parent))) {
                     // It is nested in an ambient context, which means it is automatically exported
@@ -75844,14 +77260,14 @@
                             // Both are literal property names that are the same.
                             ts.isPropertyNameLiteral(node.name) && ts.isPropertyNameLiteral(subsequentName) &&
                                 ts.getEscapedTextOfIdentifierOrLiteral(node.name) === ts.getEscapedTextOfIdentifierOrLiteral(subsequentName))) {
-                            var reportError = (node.kind === 166 /* MethodDeclaration */ || node.kind === 165 /* MethodSignature */) &&
-                                ts.hasSyntacticModifier(node, 32 /* Static */) !== ts.hasSyntacticModifier(subsequentNode, 32 /* Static */);
+                            var reportError = (node.kind === 167 /* MethodDeclaration */ || node.kind === 166 /* MethodSignature */) &&
+                                ts.isStatic(node) !== ts.isStatic(subsequentNode);
                             // we can get here in two cases
                             // 1. mixed static and instance class members
                             // 2. something with the same name was defined before the set of overloads that prevents them from merging
                             // here we'll report error only for the first case since for second we should already report error in binder
                             if (reportError) {
-                                var diagnostic = ts.hasSyntacticModifier(node, 32 /* Static */) ? ts.Diagnostics.Function_overload_must_be_static : ts.Diagnostics.Function_overload_must_not_be_static;
+                                var diagnostic = ts.isStatic(node) ? ts.Diagnostics.Function_overload_must_be_static : ts.Diagnostics.Function_overload_must_not_be_static;
                                 error(errorNode_1, diagnostic);
                             }
                             return;
@@ -75886,7 +77302,7 @@
                     var current = declarations_4[_i];
                     var node = current;
                     var inAmbientContext = node.flags & 8388608 /* Ambient */;
-                    var inAmbientContextOrInterface = node.parent && (node.parent.kind === 254 /* InterfaceDeclaration */ || node.parent.kind === 178 /* TypeLiteral */) || inAmbientContext;
+                    var inAmbientContextOrInterface = node.parent && (node.parent.kind === 256 /* InterfaceDeclaration */ || node.parent.kind === 180 /* TypeLiteral */) || inAmbientContext;
                     if (inAmbientContextOrInterface) {
                         // check if declarations are consecutive only if they are non-ambient
                         // 1. ambient declarations can be interleaved
@@ -75897,10 +77313,10 @@
                         // 2. mixing ambient and non-ambient declarations is a separate error that will be reported - do not want to report an extra one
                         previousDeclaration = undefined;
                     }
-                    if ((node.kind === 253 /* ClassDeclaration */ || node.kind === 222 /* ClassExpression */) && !inAmbientContext) {
+                    if ((node.kind === 255 /* ClassDeclaration */ || node.kind === 224 /* ClassExpression */) && !inAmbientContext) {
                         hasNonAmbientClass = true;
                     }
-                    if (node.kind === 252 /* FunctionDeclaration */ || node.kind === 166 /* MethodDeclaration */ || node.kind === 165 /* MethodSignature */ || node.kind === 167 /* Constructor */) {
+                    if (node.kind === 254 /* FunctionDeclaration */ || node.kind === 167 /* MethodDeclaration */ || node.kind === 166 /* MethodSignature */ || node.kind === 169 /* Constructor */) {
                         functionDeclarations.push(node);
                         var currentNodeFlags = getEffectiveDeclarationFlags(node, flagsToCheck);
                         someNodeFlags |= currentNodeFlags;
@@ -75944,13 +77360,18 @@
                     error(ts.getNameOfDeclaration(declaration) || declaration, ts.Diagnostics.Duplicate_function_implementation);
                 });
             }
-            if (hasNonAmbientClass && !isConstructor && symbol.flags & 16 /* Function */) {
-                // A non-ambient class cannot be an implementation for a non-constructor function/class merge
-                // TODO: The below just replicates our older error from when classes and functions were
-                // entirely unable to merge - a more helpful message like "Class declaration cannot implement overload list"
-                // might be warranted. :shrug:
+            if (hasNonAmbientClass && !isConstructor && symbol.flags & 16 /* Function */ && declarations) {
+                var relatedDiagnostics_1 = ts.filter(declarations, function (d) { return d.kind === 255 /* ClassDeclaration */; })
+                    .map(function (d) { return ts.createDiagnosticForNode(d, ts.Diagnostics.Consider_adding_a_declare_modifier_to_this_class); });
                 ts.forEach(declarations, function (declaration) {
-                    addDuplicateDeclarationError(declaration, ts.Diagnostics.Duplicate_identifier_0, ts.symbolName(symbol), declarations);
+                    var diagnostic = declaration.kind === 255 /* ClassDeclaration */
+                        ? ts.Diagnostics.Class_declaration_cannot_implement_overload_list_for_0
+                        : declaration.kind === 254 /* FunctionDeclaration */
+                            ? ts.Diagnostics.Function_with_bodies_can_only_merge_with_classes_that_are_ambient
+                            : undefined;
+                    if (diagnostic) {
+                        ts.addRelatedInfo.apply(void 0, __spreadArray([error(ts.getNameOfDeclaration(declaration) || declaration, diagnostic, ts.symbolName(symbol))], relatedDiagnostics_1, false));
+                    }
                 });
             }
             // Abstract methods can't have an implementation -- in particular, they don't need one.
@@ -76036,26 +77457,26 @@
             function getDeclarationSpaces(decl) {
                 var d = decl;
                 switch (d.kind) {
-                    case 254 /* InterfaceDeclaration */:
-                    case 255 /* TypeAliasDeclaration */:
+                    case 256 /* InterfaceDeclaration */:
+                    case 257 /* TypeAliasDeclaration */:
                     // A jsdoc typedef and callback are, by definition, type aliases.
                     // falls through
-                    case 335 /* JSDocTypedefTag */:
-                    case 328 /* JSDocCallbackTag */:
-                    case 329 /* JSDocEnumTag */:
+                    case 340 /* JSDocTypedefTag */:
+                    case 333 /* JSDocCallbackTag */:
+                    case 334 /* JSDocEnumTag */:
                         return 2 /* ExportType */;
-                    case 257 /* ModuleDeclaration */:
+                    case 259 /* ModuleDeclaration */:
                         return ts.isAmbientModule(d) || ts.getModuleInstanceState(d) !== 0 /* NonInstantiated */
                             ? 4 /* ExportNamespace */ | 1 /* ExportValue */
                             : 4 /* ExportNamespace */;
-                    case 253 /* ClassDeclaration */:
-                    case 256 /* EnumDeclaration */:
-                    case 292 /* EnumMember */:
+                    case 255 /* ClassDeclaration */:
+                    case 258 /* EnumDeclaration */:
+                    case 294 /* EnumMember */:
                         return 2 /* ExportType */ | 1 /* ExportValue */;
-                    case 298 /* SourceFile */:
+                    case 300 /* SourceFile */:
                         return 2 /* ExportType */ | 1 /* ExportValue */ | 4 /* ExportNamespace */;
-                    case 267 /* ExportAssignment */:
-                    case 217 /* BinaryExpression */:
+                    case 269 /* ExportAssignment */:
+                    case 219 /* BinaryExpression */:
                         var node_2 = d;
                         var expression = ts.isExportAssignment(node_2) ? node_2.expression : node_2.right;
                         // Export assigned entity name expressions act as aliases and should fall through, otherwise they export values
@@ -76065,18 +77486,18 @@
                         d = expression;
                     // The below options all declare an Alias, which is allowed to merge with other values within the importing module.
                     // falls through
-                    case 261 /* ImportEqualsDeclaration */:
-                    case 264 /* NamespaceImport */:
-                    case 263 /* ImportClause */:
-                        var result_13 = 0 /* None */;
+                    case 263 /* ImportEqualsDeclaration */:
+                    case 266 /* NamespaceImport */:
+                    case 265 /* ImportClause */:
+                        var result_12 = 0 /* None */;
                         var target = resolveAlias(getSymbolOfNode(d));
-                        ts.forEach(target.declarations, function (d) { result_13 |= getDeclarationSpaces(d); });
-                        return result_13;
-                    case 250 /* VariableDeclaration */:
-                    case 199 /* BindingElement */:
-                    case 252 /* FunctionDeclaration */:
-                    case 266 /* ImportSpecifier */: // https://github.com/Microsoft/TypeScript/pull/7591
-                    case 78 /* Identifier */: // https://github.com/microsoft/TypeScript/issues/36098
+                        ts.forEach(target.declarations, function (d) { result_12 |= getDeclarationSpaces(d); });
+                        return result_12;
+                    case 252 /* VariableDeclaration */:
+                    case 201 /* BindingElement */:
+                    case 254 /* FunctionDeclaration */:
+                    case 268 /* ImportSpecifier */: // https://github.com/Microsoft/TypeScript/pull/7591
+                    case 79 /* Identifier */: // https://github.com/microsoft/TypeScript/issues/36098
                         // Identifiers are used as declarations of assignment declarations whose parents may be
                         // SyntaxKind.CallExpression - `Object.defineProperty(thing, "aField", {value: 42});`
                         // SyntaxKind.ElementAccessExpression - `thing["aField"] = 42;` or `thing["aField"];` (with a doc comment on it)
@@ -76328,7 +77749,7 @@
                 var promiseConstructorSymbol = resolveEntityName(promiseConstructorName, 111551 /* Value */, /*ignoreErrors*/ true);
                 var promiseConstructorType = promiseConstructorSymbol ? getTypeOfSymbol(promiseConstructorSymbol) : errorType;
                 if (promiseConstructorType === errorType) {
-                    if (promiseConstructorName.kind === 78 /* Identifier */ && promiseConstructorName.escapedText === "Promise" && getTargetType(returnType) === getGlobalPromiseType(/*reportErrors*/ false)) {
+                    if (promiseConstructorName.kind === 79 /* Identifier */ && promiseConstructorName.escapedText === "Promise" && getTargetType(returnType) === getGlobalPromiseType(/*reportErrors*/ false)) {
                         error(returnTypeNode, ts.Diagnostics.An_async_function_or_method_in_ES5_SlashES3_requires_the_Promise_constructor_Make_sure_you_have_a_declaration_for_the_Promise_constructor_or_include_ES2015_in_your_lib_option);
                     }
                     else {
@@ -76368,24 +77789,24 @@
             var headMessage = getDiagnosticHeadMessageForDecoratorResolution(node);
             var errorInfo;
             switch (node.parent.kind) {
-                case 253 /* ClassDeclaration */:
+                case 255 /* ClassDeclaration */:
                     var classSymbol = getSymbolOfNode(node.parent);
                     var classConstructorType = getTypeOfSymbol(classSymbol);
                     expectedReturnType = getUnionType([classConstructorType, voidType]);
                     break;
-                case 161 /* Parameter */:
+                case 162 /* Parameter */:
                     expectedReturnType = voidType;
                     errorInfo = ts.chainDiagnosticMessages(
                     /*details*/ undefined, ts.Diagnostics.The_return_type_of_a_parameter_decorator_function_must_be_either_void_or_any);
                     break;
-                case 164 /* PropertyDeclaration */:
+                case 165 /* PropertyDeclaration */:
                     expectedReturnType = voidType;
                     errorInfo = ts.chainDiagnosticMessages(
                     /*details*/ undefined, ts.Diagnostics.The_return_type_of_a_property_decorator_function_must_be_either_void_or_any);
                     break;
-                case 166 /* MethodDeclaration */:
-                case 168 /* GetAccessor */:
-                case 169 /* SetAccessor */:
+                case 167 /* MethodDeclaration */:
+                case 170 /* GetAccessor */:
+                case 171 /* SetAccessor */:
                     var methodType = getTypeOfNode(node.parent);
                     var descriptorType = createTypedPropertyDescriptorType(methodType);
                     expectedReturnType = getUnionType([descriptorType, voidType]);
@@ -76406,8 +77827,8 @@
             if (!typeName)
                 return;
             var rootName = ts.getFirstIdentifier(typeName);
-            var meaning = (typeName.kind === 78 /* Identifier */ ? 788968 /* Type */ : 1920 /* Namespace */) | 2097152 /* Alias */;
-            var rootSymbol = resolveName(rootName, rootName.escapedText, meaning, /*nameNotFoundMessage*/ undefined, /*nameArg*/ undefined, /*isRefernce*/ true);
+            var meaning = (typeName.kind === 79 /* Identifier */ ? 788968 /* Type */ : 1920 /* Namespace */) | 2097152 /* Alias */;
+            var rootSymbol = resolveName(rootName, rootName.escapedText, meaning, /*nameNotFoundMessage*/ undefined, /*nameArg*/ undefined, /*isReference*/ true);
             if (rootSymbol
                 && rootSymbol.flags & 2097152 /* Alias */
                 && symbolIsValue(rootSymbol)
@@ -76432,30 +77853,30 @@
         function getEntityNameForDecoratorMetadata(node) {
             if (node) {
                 switch (node.kind) {
-                    case 184 /* IntersectionType */:
-                    case 183 /* UnionType */:
+                    case 186 /* IntersectionType */:
+                    case 185 /* UnionType */:
                         return getEntityNameForDecoratorMetadataFromTypeList(node.types);
-                    case 185 /* ConditionalType */:
+                    case 187 /* ConditionalType */:
                         return getEntityNameForDecoratorMetadataFromTypeList([node.trueType, node.falseType]);
-                    case 187 /* ParenthesizedType */:
-                    case 193 /* NamedTupleMember */:
+                    case 189 /* ParenthesizedType */:
+                    case 195 /* NamedTupleMember */:
                         return getEntityNameForDecoratorMetadata(node.type);
-                    case 174 /* TypeReference */:
+                    case 176 /* TypeReference */:
                         return node.typeName;
                 }
             }
         }
         function getEntityNameForDecoratorMetadataFromTypeList(types) {
             var commonEntityName;
-            for (var _i = 0, types_23 = types; _i < types_23.length; _i++) {
-                var typeNode = types_23[_i];
-                while (typeNode.kind === 187 /* ParenthesizedType */ || typeNode.kind === 193 /* NamedTupleMember */) {
+            for (var _i = 0, types_22 = types; _i < types_22.length; _i++) {
+                var typeNode = types_22[_i];
+                while (typeNode.kind === 189 /* ParenthesizedType */ || typeNode.kind === 195 /* NamedTupleMember */) {
                     typeNode = typeNode.type; // Skip parens if need be
                 }
-                if (typeNode.kind === 141 /* NeverKeyword */) {
+                if (typeNode.kind === 142 /* NeverKeyword */) {
                     continue; // Always elide `never` from the union/intersection if possible
                 }
-                if (!strictNullChecks && (typeNode.kind === 192 /* LiteralType */ && typeNode.literal.kind === 103 /* NullKeyword */ || typeNode.kind === 150 /* UndefinedKeyword */)) {
+                if (!strictNullChecks && (typeNode.kind === 194 /* LiteralType */ && typeNode.literal.kind === 104 /* NullKeyword */ || typeNode.kind === 151 /* UndefinedKeyword */)) {
                     continue; // Elide null and undefined from unions for metadata, just like what we did prior to the implementation of strict null checks
                 }
                 var individualEntityName = getEntityNameForDecoratorMetadata(typeNode);
@@ -76501,14 +77922,14 @@
             }
             var firstDecorator = node.decorators[0];
             checkExternalEmitHelpers(firstDecorator, 8 /* Decorate */);
-            if (node.kind === 161 /* Parameter */) {
+            if (node.kind === 162 /* Parameter */) {
                 checkExternalEmitHelpers(firstDecorator, 32 /* Param */);
             }
             if (compilerOptions.emitDecoratorMetadata) {
                 checkExternalEmitHelpers(firstDecorator, 16 /* Metadata */);
                 // we only need to perform these checks if we are emitting serialized type metadata for the target of a decorator.
                 switch (node.kind) {
-                    case 253 /* ClassDeclaration */:
+                    case 255 /* ClassDeclaration */:
                         var constructor = ts.getFirstConstructorWithBody(node);
                         if (constructor) {
                             for (var _i = 0, _a = constructor.parameters; _i < _a.length; _i++) {
@@ -76517,23 +77938,23 @@
                             }
                         }
                         break;
-                    case 168 /* GetAccessor */:
-                    case 169 /* SetAccessor */:
-                        var otherKind = node.kind === 168 /* GetAccessor */ ? 169 /* SetAccessor */ : 168 /* GetAccessor */;
+                    case 170 /* GetAccessor */:
+                    case 171 /* SetAccessor */:
+                        var otherKind = node.kind === 170 /* GetAccessor */ ? 171 /* SetAccessor */ : 170 /* GetAccessor */;
                         var otherAccessor = ts.getDeclarationOfKind(getSymbolOfNode(node), otherKind);
                         markDecoratorMedataDataTypeNodeAsReferenced(getAnnotatedAccessorTypeNode(node) || otherAccessor && getAnnotatedAccessorTypeNode(otherAccessor));
                         break;
-                    case 166 /* MethodDeclaration */:
+                    case 167 /* MethodDeclaration */:
                         for (var _b = 0, _c = node.parameters; _b < _c.length; _b++) {
                             var parameter = _c[_b];
                             markDecoratorMedataDataTypeNodeAsReferenced(getParameterTypeNodeForDecoratorCheck(parameter));
                         }
                         markDecoratorMedataDataTypeNodeAsReferenced(ts.getEffectiveReturnTypeNode(node));
                         break;
-                    case 164 /* PropertyDeclaration */:
+                    case 165 /* PropertyDeclaration */:
                         markDecoratorMedataDataTypeNodeAsReferenced(ts.getEffectiveTypeAnnotationNode(node));
                         break;
-                    case 161 /* Parameter */:
+                    case 162 /* Parameter */:
                         markDecoratorMedataDataTypeNodeAsReferenced(getParameterTypeNodeForDecoratorCheck(node));
                         var containingSignature = node.parent;
                         for (var _d = 0, _e = containingSignature.parameters; _d < _e.length; _d++) {
@@ -76549,8 +77970,7 @@
             if (produceDiagnostics) {
                 checkFunctionOrMethodDeclaration(node);
                 checkGrammarForGenerator(node);
-                checkCollisionWithRequireExportsInGeneratedCode(node, node.name);
-                checkCollisionWithGlobalPromiseInGeneratedCode(node, node.name);
+                checkCollisionsForDeclarationName(node, node.name);
             }
         }
         function checkJSDocTypeAliasTag(node) {
@@ -76596,7 +78016,7 @@
                     else if (ts.findLast(ts.getJSDocTags(decl), ts.isJSDocParameterTag) === node &&
                         node.typeExpression && node.typeExpression.type &&
                         !isArrayType(getTypeFromTypeNode(node.typeExpression.type))) {
-                        error(node.name, ts.Diagnostics.JSDoc_param_tag_has_name_0_but_there_is_no_parameter_with_that_name_It_would_match_arguments_if_it_had_an_array_type, ts.idText(node.name.kind === 158 /* QualifiedName */ ? node.name.right : node.name));
+                        error(node.name, ts.Diagnostics.JSDoc_param_tag_has_name_0_but_there_is_no_parameter_with_that_name_It_would_match_arguments_if_it_had_an_array_type, ts.idText(node.name.kind === 159 /* QualifiedName */ ? node.name.right : node.name));
                     }
                 }
             }
@@ -76638,9 +78058,9 @@
         }
         function getIdentifierFromEntityNameExpression(node) {
             switch (node.kind) {
-                case 78 /* Identifier */:
+                case 79 /* Identifier */:
                     return node;
-                case 202 /* PropertyAccessExpression */:
+                case 204 /* PropertyAccessExpression */:
                     return node.name;
                 default:
                     return undefined;
@@ -76654,7 +78074,7 @@
             // Do not use hasDynamicName here, because that returns false for well known symbols.
             // We want to perform checkComputedPropertyName for all computed properties, including
             // well known symbols.
-            if (node.name && node.name.kind === 159 /* ComputedPropertyName */) {
+            if (node.name && node.name.kind === 160 /* ComputedPropertyName */) {
                 // This check will account for methods in class/interface declarations,
                 // as well as accessors in classes/object literals
                 checkComputedPropertyName(node.name);
@@ -76680,7 +78100,7 @@
                     checkFunctionOrConstructorSymbol(symbol);
                 }
             }
-            var body = node.kind === 165 /* MethodSignature */ ? undefined : node.body;
+            var body = node.kind === 166 /* MethodSignature */ ? undefined : node.body;
             checkSourceElement(body);
             checkAllCodePathsInNonVoidFunctionReturnOrThrow(node, getReturnTypeFromAnnotation(node));
             if (produceDiagnostics && !ts.getEffectiveReturnTypeNode(node)) {
@@ -76722,42 +78142,42 @@
             for (var _i = 0, potentiallyUnusedIdentifiers_1 = potentiallyUnusedIdentifiers; _i < potentiallyUnusedIdentifiers_1.length; _i++) {
                 var node = potentiallyUnusedIdentifiers_1[_i];
                 switch (node.kind) {
-                    case 253 /* ClassDeclaration */:
-                    case 222 /* ClassExpression */:
+                    case 255 /* ClassDeclaration */:
+                    case 224 /* ClassExpression */:
                         checkUnusedClassMembers(node, addDiagnostic);
                         checkUnusedTypeParameters(node, addDiagnostic);
                         break;
-                    case 298 /* SourceFile */:
-                    case 257 /* ModuleDeclaration */:
-                    case 231 /* Block */:
-                    case 259 /* CaseBlock */:
-                    case 238 /* ForStatement */:
-                    case 239 /* ForInStatement */:
-                    case 240 /* ForOfStatement */:
+                    case 300 /* SourceFile */:
+                    case 259 /* ModuleDeclaration */:
+                    case 233 /* Block */:
+                    case 261 /* CaseBlock */:
+                    case 240 /* ForStatement */:
+                    case 241 /* ForInStatement */:
+                    case 242 /* ForOfStatement */:
                         checkUnusedLocalsAndParameters(node, addDiagnostic);
                         break;
-                    case 167 /* Constructor */:
-                    case 209 /* FunctionExpression */:
-                    case 252 /* FunctionDeclaration */:
-                    case 210 /* ArrowFunction */:
-                    case 166 /* MethodDeclaration */:
-                    case 168 /* GetAccessor */:
-                    case 169 /* SetAccessor */:
+                    case 169 /* Constructor */:
+                    case 211 /* FunctionExpression */:
+                    case 254 /* FunctionDeclaration */:
+                    case 212 /* ArrowFunction */:
+                    case 167 /* MethodDeclaration */:
+                    case 170 /* GetAccessor */:
+                    case 171 /* SetAccessor */:
                         if (node.body) { // Don't report unused parameters in overloads
                             checkUnusedLocalsAndParameters(node, addDiagnostic);
                         }
                         checkUnusedTypeParameters(node, addDiagnostic);
                         break;
-                    case 165 /* MethodSignature */:
-                    case 170 /* CallSignature */:
-                    case 171 /* ConstructSignature */:
-                    case 175 /* FunctionType */:
-                    case 176 /* ConstructorType */:
-                    case 255 /* TypeAliasDeclaration */:
-                    case 254 /* InterfaceDeclaration */:
+                    case 166 /* MethodSignature */:
+                    case 172 /* CallSignature */:
+                    case 173 /* ConstructSignature */:
+                    case 177 /* FunctionType */:
+                    case 178 /* ConstructorType */:
+                    case 257 /* TypeAliasDeclaration */:
+                    case 256 /* InterfaceDeclaration */:
                         checkUnusedTypeParameters(node, addDiagnostic);
                         break;
-                    case 186 /* InferType */:
+                    case 188 /* InferType */:
                         checkUnusedInferTypeParameter(node, addDiagnostic);
                         break;
                     default:
@@ -76777,11 +78197,11 @@
             for (var _i = 0, _a = node.members; _i < _a.length; _i++) {
                 var member = _a[_i];
                 switch (member.kind) {
-                    case 166 /* MethodDeclaration */:
-                    case 164 /* PropertyDeclaration */:
-                    case 168 /* GetAccessor */:
-                    case 169 /* SetAccessor */:
-                        if (member.kind === 169 /* SetAccessor */ && member.symbol.flags & 32768 /* GetAccessor */) {
+                    case 167 /* MethodDeclaration */:
+                    case 165 /* PropertyDeclaration */:
+                    case 170 /* GetAccessor */:
+                    case 171 /* SetAccessor */:
+                        if (member.kind === 171 /* SetAccessor */ && member.symbol.flags & 32768 /* GetAccessor */) {
                             // Already would have reported an error on the getter.
                             break;
                         }
@@ -76792,7 +78212,7 @@
                             addDiagnostic(member, 0 /* Local */, ts.createDiagnosticForNode(member.name, ts.Diagnostics._0_is_declared_but_its_value_is_never_read, symbolToString(symbol)));
                         }
                         break;
-                    case 167 /* Constructor */:
+                    case 169 /* Constructor */:
                         for (var _b = 0, _c = member.parameters; _b < _c.length; _b++) {
                             var parameter = _c[_b];
                             if (!parameter.symbol.isReferenced && ts.hasSyntacticModifier(parameter, 8 /* Private */)) {
@@ -76800,12 +78220,13 @@
                             }
                         }
                         break;
-                    case 172 /* IndexSignature */:
-                    case 230 /* SemicolonClassElement */:
+                    case 174 /* IndexSignature */:
+                    case 232 /* SemicolonClassElement */:
+                    case 168 /* ClassStaticBlockDeclaration */:
                         // Can't be private
                         break;
                     default:
-                        ts.Debug.fail();
+                        ts.Debug.fail("Unexpected class member");
                 }
             }
         }
@@ -76829,7 +78250,7 @@
                     continue;
                 var name = ts.idText(typeParameter.name);
                 var parent = typeParameter.parent;
-                if (parent.kind !== 186 /* InferType */ && parent.typeParameters.every(isTypeParameterUnused)) {
+                if (parent.kind !== 188 /* InferType */ && parent.typeParameters.every(isTypeParameterUnused)) {
                     if (ts.tryAddToSet(seenParentsWithEveryUnused, parent)) {
                         var sourceFile = ts.getSourceFileOfNode(parent);
                         var range = ts.isJSDocTemplateTag(parent)
@@ -76838,12 +78259,14 @@
                             // Include the `<>` in the error message
                             : ts.rangeOfTypeParameters(sourceFile, parent.typeParameters);
                         var only = parent.typeParameters.length === 1;
+                        //TODO: following line is possible reason for bug #41974, unusedTypeParameters_TemplateTag
                         var message = only ? ts.Diagnostics._0_is_declared_but_its_value_is_never_read : ts.Diagnostics.All_type_parameters_are_unused;
                         var arg0 = only ? name : undefined;
                         addDiagnostic(typeParameter, 1 /* Parameter */, ts.createFileDiagnostic(sourceFile, range.pos, range.end - range.pos, message, arg0));
                     }
                 }
                 else {
+                    //TODO: following line is possible reason for bug #41974, unusedTypeParameters_TemplateTag
                     addDiagnostic(typeParameter, 1 /* Parameter */, ts.createDiagnosticForNode(typeParameter, ts.Diagnostics._0_is_declared_but_its_value_is_never_read, name));
                 }
             }
@@ -76933,7 +78356,7 @@
                 var importDecl = importClause.parent;
                 var nDeclarations = (importClause.name ? 1 : 0) +
                     (importClause.namedBindings ?
-                        (importClause.namedBindings.kind === 264 /* NamespaceImport */ ? 1 : importClause.namedBindings.elements.length)
+                        (importClause.namedBindings.kind === 266 /* NamespaceImport */ ? 1 : importClause.namedBindings.elements.length)
                         : 0);
                 if (nDeclarations === unuseds.length) {
                     addDiagnostic(importDecl, 0 /* Local */, unuseds.length === 1
@@ -76951,7 +78374,7 @@
                 var bindingPattern = _a[0], bindingElements = _a[1];
                 var kind = tryGetRootParameterDeclaration(bindingPattern.parent) ? 1 /* Parameter */ : 0 /* Local */;
                 if (bindingPattern.elements.length === bindingElements.length) {
-                    if (bindingElements.length === 1 && bindingPattern.parent.kind === 250 /* VariableDeclaration */ && bindingPattern.parent.parent.kind === 251 /* VariableDeclarationList */) {
+                    if (bindingElements.length === 1 && bindingPattern.parent.kind === 252 /* VariableDeclaration */ && bindingPattern.parent.parent.kind === 253 /* VariableDeclarationList */) {
                         addToGroup(unusedVariables, bindingPattern.parent.parent, bindingPattern.parent, getNodeId);
                     }
                     else {
@@ -76972,7 +78395,7 @@
                 if (declarationList.declarations.length === declarations.length) {
                     addDiagnostic(declarationList, 0 /* Local */, declarations.length === 1
                         ? ts.createDiagnosticForNode(ts.first(declarations).name, ts.Diagnostics._0_is_declared_but_its_value_is_never_read, bindingNameText(ts.first(declarations).name))
-                        : ts.createDiagnosticForNode(declarationList.parent.kind === 233 /* VariableStatement */ ? declarationList.parent : declarationList, ts.Diagnostics.All_variables_are_unused));
+                        : ts.createDiagnosticForNode(declarationList.parent.kind === 235 /* VariableStatement */ ? declarationList.parent : declarationList, ts.Diagnostics.All_variables_are_unused));
                 }
                 else {
                     for (var _i = 0, declarations_5 = declarations; _i < declarations_5.length; _i++) {
@@ -76984,24 +78407,24 @@
         }
         function bindingNameText(name) {
             switch (name.kind) {
-                case 78 /* Identifier */:
+                case 79 /* Identifier */:
                     return ts.idText(name);
-                case 198 /* ArrayBindingPattern */:
-                case 197 /* ObjectBindingPattern */:
+                case 200 /* ArrayBindingPattern */:
+                case 199 /* ObjectBindingPattern */:
                     return bindingNameText(ts.cast(ts.first(name.elements), ts.isBindingElement).name);
                 default:
                     return ts.Debug.assertNever(name);
             }
         }
         function isImportedDeclaration(node) {
-            return node.kind === 263 /* ImportClause */ || node.kind === 266 /* ImportSpecifier */ || node.kind === 264 /* NamespaceImport */;
+            return node.kind === 265 /* ImportClause */ || node.kind === 268 /* ImportSpecifier */ || node.kind === 266 /* NamespaceImport */;
         }
         function importClauseFromImported(decl) {
-            return decl.kind === 263 /* ImportClause */ ? decl : decl.kind === 264 /* NamespaceImport */ ? decl.parent : decl.parent.parent;
+            return decl.kind === 265 /* ImportClause */ ? decl : decl.kind === 266 /* NamespaceImport */ ? decl.parent : decl.parent.parent;
         }
         function checkBlock(node) {
             // Grammar checking for SyntaxKind.Block
-            if (node.kind === 231 /* Block */) {
+            if (node.kind === 233 /* Block */) {
                 checkGrammarStatementInAmbientContext(node);
             }
             if (ts.isFunctionOrModuleBlock(node)) {
@@ -77027,25 +78450,37 @@
                 }
             });
         }
+        /**
+         * Checks whether an {@link Identifier}, in the context of another {@link Node}, would collide with a runtime value
+         * of {@link name} in an outer scope. This is used to check for collisions for downlevel transformations that
+         * require names like `Object`, `Promise`, `Reflect`, `require`, `exports`, etc.
+         */
         function needCollisionCheckForIdentifier(node, identifier, name) {
-            if (!(identifier && identifier.escapedText === name)) {
+            if ((identifier === null || identifier === void 0 ? void 0 : identifier.escapedText) !== name) {
                 return false;
             }
-            if (node.kind === 164 /* PropertyDeclaration */ ||
-                node.kind === 163 /* PropertySignature */ ||
-                node.kind === 166 /* MethodDeclaration */ ||
-                node.kind === 165 /* MethodSignature */ ||
-                node.kind === 168 /* GetAccessor */ ||
-                node.kind === 169 /* SetAccessor */) {
-                // it is ok to have member named '_super' or '_this' - member access is always qualified
+            if (node.kind === 165 /* PropertyDeclaration */ ||
+                node.kind === 164 /* PropertySignature */ ||
+                node.kind === 167 /* MethodDeclaration */ ||
+                node.kind === 166 /* MethodSignature */ ||
+                node.kind === 170 /* GetAccessor */ ||
+                node.kind === 171 /* SetAccessor */ ||
+                node.kind === 291 /* PropertyAssignment */) {
+                // it is ok to have member named '_super', '_this', `Promise`, etc. - member access is always qualified
                 return false;
             }
             if (node.flags & 8388608 /* Ambient */) {
                 // ambient context - no codegen impact
                 return false;
             }
+            if (ts.isImportClause(node) || ts.isImportEqualsDeclaration(node) || ts.isImportSpecifier(node)) {
+                // type-only imports do not require collision checks against runtime values.
+                if (ts.isTypeOnlyImportOrExportDeclaration(node)) {
+                    return false;
+                }
+            }
             var root = ts.getRootDeclaration(node);
-            if (root.kind === 161 /* Parameter */ && ts.nodeIsMissing(root.parent.body)) {
+            if (ts.isParameter(root) && ts.nodeIsMissing(root.parent.body)) {
                 // just an overload - no codegen impact
                 return false;
             }
@@ -77055,7 +78490,7 @@
         function checkIfThisIsCapturedInEnclosingScope(node) {
             ts.findAncestor(node, function (current) {
                 if (getNodeCheckFlags(current) & 4 /* CaptureThis */) {
-                    var isDeclaration_1 = node.kind !== 78 /* Identifier */;
+                    var isDeclaration_1 = node.kind !== 79 /* Identifier */;
                     if (isDeclaration_1) {
                         error(ts.getNameOfDeclaration(node), ts.Diagnostics.Duplicate_identifier_this_Compiler_uses_variable_declaration_this_to_capture_this_reference);
                     }
@@ -77070,7 +78505,7 @@
         function checkIfNewTargetIsCapturedInEnclosingScope(node) {
             ts.findAncestor(node, function (current) {
                 if (getNodeCheckFlags(current) & 8 /* CaptureNewTarget */) {
-                    var isDeclaration_2 = node.kind !== 78 /* Identifier */;
+                    var isDeclaration_2 = node.kind !== 79 /* Identifier */;
                     if (isDeclaration_2) {
                         error(ts.getNameOfDeclaration(node), ts.Diagnostics.Duplicate_identifier_newTarget_Compiler_uses_variable_declaration_newTarget_to_capture_new_target_meta_property_reference);
                     }
@@ -77082,6 +78517,46 @@
                 return false;
             });
         }
+        function checkCollisionWithRequireExportsInGeneratedCode(node, name) {
+            // No need to check for require or exports for ES6 modules and later
+            if (moduleKind >= ts.ModuleKind.ES2015) {
+                return;
+            }
+            if (!name || !needCollisionCheckForIdentifier(node, name, "require") && !needCollisionCheckForIdentifier(node, name, "exports")) {
+                return;
+            }
+            // Uninstantiated modules shouldnt do this check
+            if (ts.isModuleDeclaration(node) && ts.getModuleInstanceState(node) !== 1 /* Instantiated */) {
+                return;
+            }
+            // In case of variable declaration, node.parent is variable statement so look at the variable statement's parent
+            var parent = getDeclarationContainer(node);
+            if (parent.kind === 300 /* SourceFile */ && ts.isExternalOrCommonJsModule(parent)) {
+                // If the declaration happens to be in external module, report error that require and exports are reserved keywords
+                errorSkippedOn("noEmit", name, ts.Diagnostics.Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module, ts.declarationNameToString(name), ts.declarationNameToString(name));
+            }
+        }
+        function checkCollisionWithGlobalPromiseInGeneratedCode(node, name) {
+            if (!name || languageVersion >= 4 /* ES2017 */ || !needCollisionCheckForIdentifier(node, name, "Promise")) {
+                return;
+            }
+            // Uninstantiated modules shouldnt do this check
+            if (ts.isModuleDeclaration(node) && ts.getModuleInstanceState(node) !== 1 /* Instantiated */) {
+                return;
+            }
+            // In case of variable declaration, node.parent is variable statement so look at the variable statement's parent
+            var parent = getDeclarationContainer(node);
+            if (parent.kind === 300 /* SourceFile */ && ts.isExternalOrCommonJsModule(parent) && parent.flags & 2048 /* HasAsyncFunctions */) {
+                // If the declaration happens to be in external module, report error that Promise is a reserved identifier.
+                errorSkippedOn("noEmit", name, ts.Diagnostics.Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module_containing_async_functions, ts.declarationNameToString(name), ts.declarationNameToString(name));
+            }
+        }
+        function recordPotentialCollisionWithWeakMapSetInGeneratedCode(node, name) {
+            if (languageVersion <= 8 /* ES2021 */
+                && (needCollisionCheckForIdentifier(node, name, "WeakMap") || needCollisionCheckForIdentifier(node, name, "WeakSet"))) {
+                potentialWeakMapSetCollisions.push(node);
+            }
+        }
         function checkWeakMapSetCollision(node) {
             var enclosingBlockScope = ts.getEnclosingBlockScopeContainer(node);
             if (getNodeCheckFlags(enclosingBlockScope) & 67108864 /* ContainsClassWithPrivateIdentifiers */) {
@@ -77089,38 +78564,56 @@
                 errorSkippedOn("noEmit", node, ts.Diagnostics.Compiler_reserves_name_0_when_emitting_private_identifier_downlevel, node.name.escapedText);
             }
         }
-        function checkCollisionWithRequireExportsInGeneratedCode(node, name) {
-            // No need to check for require or exports for ES6 modules and later
-            if (moduleKind >= ts.ModuleKind.ES2015) {
-                return;
-            }
-            if (!needCollisionCheckForIdentifier(node, name, "require") && !needCollisionCheckForIdentifier(node, name, "exports")) {
-                return;
-            }
-            // Uninstantiated modules shouldnt do this check
-            if (ts.isModuleDeclaration(node) && ts.getModuleInstanceState(node) !== 1 /* Instantiated */) {
-                return;
-            }
-            // In case of variable declaration, node.parent is variable statement so look at the variable statement's parent
-            var parent = getDeclarationContainer(node);
-            if (parent.kind === 298 /* SourceFile */ && ts.isExternalOrCommonJsModule(parent)) {
-                // If the declaration happens to be in external module, report error that require and exports are reserved keywords
-                errorSkippedOn("noEmit", name, ts.Diagnostics.Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module, ts.declarationNameToString(name), ts.declarationNameToString(name));
+        function recordPotentialCollisionWithReflectInGeneratedCode(node, name) {
+            if (name && languageVersion >= 2 /* ES2015 */ && languageVersion <= 8 /* ES2021 */
+                && needCollisionCheckForIdentifier(node, name, "Reflect")) {
+                potentialReflectCollisions.push(node);
             }
         }
-        function checkCollisionWithGlobalPromiseInGeneratedCode(node, name) {
-            if (languageVersion >= 4 /* ES2017 */ || !needCollisionCheckForIdentifier(node, name, "Promise")) {
-                return;
+        function checkReflectCollision(node) {
+            var hasCollision = false;
+            if (ts.isClassExpression(node)) {
+                // ClassExpression names don't contribute to their containers, but do matter for any of their block-scoped members.
+                for (var _i = 0, _a = node.members; _i < _a.length; _i++) {
+                    var member = _a[_i];
+                    if (getNodeCheckFlags(member) & 134217728 /* ContainsSuperPropertyInStaticInitializer */) {
+                        hasCollision = true;
+                        break;
+                    }
+                }
             }
-            // Uninstantiated modules shouldnt do this check
-            if (ts.isModuleDeclaration(node) && ts.getModuleInstanceState(node) !== 1 /* Instantiated */) {
-                return;
+            else if (ts.isFunctionExpression(node)) {
+                // FunctionExpression names don't contribute to their containers, but do matter for their contents
+                if (getNodeCheckFlags(node) & 134217728 /* ContainsSuperPropertyInStaticInitializer */) {
+                    hasCollision = true;
+                }
             }
-            // In case of variable declaration, node.parent is variable statement so look at the variable statement's parent
-            var parent = getDeclarationContainer(node);
-            if (parent.kind === 298 /* SourceFile */ && ts.isExternalOrCommonJsModule(parent) && parent.flags & 2048 /* HasAsyncFunctions */) {
-                // If the declaration happens to be in external module, report error that Promise is a reserved identifier.
-                errorSkippedOn("noEmit", name, ts.Diagnostics.Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module_containing_async_functions, ts.declarationNameToString(name), ts.declarationNameToString(name));
+            else {
+                var container = ts.getEnclosingBlockScopeContainer(node);
+                if (container && getNodeCheckFlags(container) & 134217728 /* ContainsSuperPropertyInStaticInitializer */) {
+                    hasCollision = true;
+                }
+            }
+            if (hasCollision) {
+                ts.Debug.assert(ts.isNamedDeclaration(node) && ts.isIdentifier(node.name), "The target of a Reflect collision check should be an identifier");
+                errorSkippedOn("noEmit", node, ts.Diagnostics.Duplicate_identifier_0_Compiler_reserves_name_1_when_emitting_super_references_in_static_initializers, ts.declarationNameToString(node.name), "Reflect");
+            }
+        }
+        function checkCollisionsForDeclarationName(node, name) {
+            if (!name)
+                return;
+            checkCollisionWithRequireExportsInGeneratedCode(node, name);
+            checkCollisionWithGlobalPromiseInGeneratedCode(node, name);
+            recordPotentialCollisionWithWeakMapSetInGeneratedCode(node, name);
+            recordPotentialCollisionWithReflectInGeneratedCode(node, name);
+            if (ts.isClassLike(node)) {
+                checkTypeNameIsReserved(name, ts.Diagnostics.Class_name_cannot_be_0);
+                if (!(node.flags & 8388608 /* Ambient */)) {
+                    checkClassNameCollisionWithObject(name);
+                }
+            }
+            else if (ts.isEnumDeclaration(node)) {
+                checkTypeNameIsReserved(name, ts.Diagnostics.Enum_name_cannot_be_0);
             }
         }
         function checkVarDeclaredNamesNotShadowed(node) {
@@ -77153,7 +78646,7 @@
             // skip variable declarations that don't have initializers
             // NOTE: in ES6 spec initializer is required in variable declarations where name is binding pattern
             // so we'll always treat binding elements as initialized
-            if (node.kind === 250 /* VariableDeclaration */ && !node.initializer) {
+            if (node.kind === 252 /* VariableDeclaration */ && !node.initializer) {
                 return;
             }
             var symbol = getSymbolOfNode(node);
@@ -77165,17 +78658,17 @@
                     localDeclarationSymbol !== symbol &&
                     localDeclarationSymbol.flags & 2 /* BlockScopedVariable */) {
                     if (getDeclarationNodeFlagsFromSymbol(localDeclarationSymbol) & 3 /* BlockScoped */) {
-                        var varDeclList = ts.getAncestor(localDeclarationSymbol.valueDeclaration, 251 /* VariableDeclarationList */);
-                        var container = varDeclList.parent.kind === 233 /* VariableStatement */ && varDeclList.parent.parent
+                        var varDeclList = ts.getAncestor(localDeclarationSymbol.valueDeclaration, 253 /* VariableDeclarationList */);
+                        var container = varDeclList.parent.kind === 235 /* VariableStatement */ && varDeclList.parent.parent
                             ? varDeclList.parent.parent
                             : undefined;
                         // names of block-scoped and function scoped variables can collide only
                         // if block scoped variable is defined in the function\module\source file scope (because of variable hoisting)
                         var namesShareScope = container &&
-                            (container.kind === 231 /* Block */ && ts.isFunctionLike(container.parent) ||
-                                container.kind === 258 /* ModuleBlock */ ||
-                                container.kind === 257 /* ModuleDeclaration */ ||
-                                container.kind === 298 /* SourceFile */);
+                            (container.kind === 233 /* Block */ && ts.isFunctionLike(container.parent) ||
+                                container.kind === 260 /* ModuleBlock */ ||
+                                container.kind === 259 /* ModuleDeclaration */ ||
+                                container.kind === 300 /* SourceFile */);
                         // here we know that function scoped variable is shadowed by block scoped one
                         // if they are defined in the same scope - binder has already reported redeclaration error
                         // otherwise if variable has an initializer - show error that initialization will fail
@@ -77206,7 +78699,7 @@
             // Do not use hasDynamicName here, because that returns false for well known symbols.
             // We want to perform checkComputedPropertyName for all computed properties, including
             // well known symbols.
-            if (node.name.kind === 159 /* ComputedPropertyName */) {
+            if (node.name.kind === 160 /* ComputedPropertyName */) {
                 checkComputedPropertyName(node.name);
                 if (node.initializer) {
                     checkExpressionCached(node.initializer);
@@ -77217,7 +78710,7 @@
                     checkExternalEmitHelpers(node, 4 /* Rest */);
                 }
                 // check computed properties inside property names of binding elements
-                if (node.propertyName && node.propertyName.kind === 159 /* ComputedPropertyName */) {
+                if (node.propertyName && node.propertyName.kind === 160 /* ComputedPropertyName */) {
                     checkComputedPropertyName(node.propertyName);
                 }
                 // check private/protected variable access
@@ -77231,14 +78724,14 @@
                         var property = getPropertyOfType(parentType, nameText);
                         if (property) {
                             markPropertyAsReferenced(property, /*nodeForCheckWriteOnly*/ undefined, /*isSelfTypeAccess*/ false); // A destructuring is never a write-only reference.
-                            checkPropertyAccessibility(node, !!parent.initializer && parent.initializer.kind === 105 /* SuperKeyword */, /*writing*/ false, parentType, property);
+                            checkPropertyAccessibility(node, !!parent.initializer && parent.initializer.kind === 106 /* SuperKeyword */, /*writing*/ false, parentType, property);
                         }
                     }
                 }
             }
             // For a binding pattern, check contained binding elements
             if (ts.isBindingPattern(node.name)) {
-                if (node.name.kind === 198 /* ArrayBindingPattern */ && languageVersion < 2 /* ES2015 */ && compilerOptions.downlevelIteration) {
+                if (node.name.kind === 200 /* ArrayBindingPattern */ && languageVersion < 2 /* ES2015 */ && compilerOptions.downlevelIteration) {
                     checkExternalEmitHelpers(node, 512 /* Read */);
                 }
                 ts.forEach(node.name.elements, checkSourceElement);
@@ -77250,7 +78743,7 @@
             }
             // For a binding pattern, validate the initializer and exit
             if (ts.isBindingPattern(node.name)) {
-                var needCheckInitializer = node.initializer && node.parent.parent.kind !== 239 /* ForInStatement */;
+                var needCheckInitializer = node.initializer && node.parent.parent.kind !== 241 /* ForInStatement */;
                 var needCheckWidenedType = node.name.elements.length === 0;
                 if (needCheckInitializer || needCheckWidenedType) {
                     // Don't validate for-in initializer as it is already an error
@@ -77292,7 +78785,7 @@
                         ts.isObjectLiteralExpression(initializer) &&
                         (initializer.properties.length === 0 || ts.isPrototypeAccess(node.name)) &&
                         !!((_a = symbol.exports) === null || _a === void 0 ? void 0 : _a.size);
-                    if (!isJSObjectLiteralInitializer && node.parent.parent.kind !== 239 /* ForInStatement */) {
+                    if (!isJSObjectLiteralInitializer && node.parent.parent.kind !== 241 /* ForInStatement */) {
                         checkTypeAssignableToAndOptionallyElaborate(checkExpressionCached(initializer), type, node, initializer, /*headMessage*/ undefined);
                     }
                 }
@@ -77318,23 +78811,18 @@
                     error(node.name, ts.Diagnostics.All_declarations_of_0_must_have_identical_modifiers, ts.declarationNameToString(node.name));
                 }
             }
-            if (node.kind !== 164 /* PropertyDeclaration */ && node.kind !== 163 /* PropertySignature */) {
+            if (node.kind !== 165 /* PropertyDeclaration */ && node.kind !== 164 /* PropertySignature */) {
                 // We know we don't have a binding pattern or computed name here
                 checkExportsOnMergedDeclarations(node);
-                if (node.kind === 250 /* VariableDeclaration */ || node.kind === 199 /* BindingElement */) {
+                if (node.kind === 252 /* VariableDeclaration */ || node.kind === 201 /* BindingElement */) {
                     checkVarDeclaredNamesNotShadowed(node);
                 }
-                checkCollisionWithRequireExportsInGeneratedCode(node, node.name);
-                checkCollisionWithGlobalPromiseInGeneratedCode(node, node.name);
-                if (languageVersion < 99 /* ESNext */
-                    && (needCollisionCheckForIdentifier(node, node.name, "WeakMap") || needCollisionCheckForIdentifier(node, node.name, "WeakSet"))) {
-                    potentialWeakMapSetCollisions.push(node);
-                }
+                checkCollisionsForDeclarationName(node, node.name);
             }
         }
         function errorNextVariableOrPropertyDeclarationMustHaveSameType(firstDeclaration, firstType, nextDeclaration, nextType) {
             var nextDeclarationName = ts.getNameOfDeclaration(nextDeclaration);
-            var message = nextDeclaration.kind === 164 /* PropertyDeclaration */ || nextDeclaration.kind === 163 /* PropertySignature */
+            var message = nextDeclaration.kind === 165 /* PropertyDeclaration */ || nextDeclaration.kind === 164 /* PropertySignature */
                 ? ts.Diagnostics.Subsequent_property_declarations_must_have_the_same_type_Property_0_must_be_of_type_1_but_here_has_type_2
                 : ts.Diagnostics.Subsequent_variable_declarations_must_have_the_same_type_Variable_0_must_be_of_type_1_but_here_has_type_2;
             var declName = ts.declarationNameToString(nextDeclarationName);
@@ -77344,8 +78832,8 @@
             }
         }
         function areDeclarationFlagsIdentical(left, right) {
-            if ((left.kind === 161 /* Parameter */ && right.kind === 250 /* VariableDeclaration */) ||
-                (left.kind === 250 /* VariableDeclaration */ && right.kind === 161 /* Parameter */)) {
+            if ((left.kind === 162 /* Parameter */ && right.kind === 252 /* VariableDeclaration */) ||
+                (left.kind === 252 /* VariableDeclaration */ && right.kind === 162 /* Parameter */)) {
                 // Differences in optionality between parameters and variables are allowed.
                 return true;
             }
@@ -77387,7 +78875,7 @@
             var type = checkTruthinessExpression(node.expression);
             checkTestingKnownTruthyCallableOrAwaitableType(node.expression, type, node.thenStatement);
             checkSourceElement(node.thenStatement);
-            if (node.thenStatement.kind === 232 /* EmptyStatement */) {
+            if (node.thenStatement.kind === 234 /* EmptyStatement */) {
                 error(node.thenStatement, ts.Diagnostics.The_body_of_an_if_statement_cannot_be_the_empty_statement);
             }
             checkSourceElement(node.elseStatement);
@@ -77398,15 +78886,13 @@
             if (getFalsyFlags(type))
                 return;
             var location = ts.isBinaryExpression(condExpr) ? condExpr.right : condExpr;
+            if (ts.isPropertyAccessExpression(location) && ts.isAssertionExpression(ts.skipParentheses(location.expression))) {
+                return;
+            }
             var testedNode = ts.isIdentifier(location) ? location
                 : ts.isPropertyAccessExpression(location) ? location.name
                     : ts.isBinaryExpression(location) && ts.isIdentifier(location.right) ? location.right
                         : undefined;
-            var isPropertyExpressionCast = ts.isPropertyAccessExpression(location)
-                && ts.isAssertionExpression(ts.skipParentheses(location.expression));
-            if (!testedNode || isPropertyExpressionCast) {
-                return;
-            }
             // While it technically should be invalid for any known-truthy value
             // to be tested, we de-scope to functions and Promises unreferenced in
             // the block as a heuristic to identify the most common bugs. There
@@ -77417,12 +78903,12 @@
             if (callSignatures.length === 0 && !isPromise) {
                 return;
             }
-            var testedSymbol = getSymbolAtLocation(testedNode);
-            if (!testedSymbol) {
+            var testedSymbol = testedNode && getSymbolAtLocation(testedNode);
+            if (!testedSymbol && !isPromise) {
                 return;
             }
-            var isUsed = ts.isBinaryExpression(condExpr.parent) && isSymbolUsedInBinaryExpressionChain(condExpr.parent, testedSymbol)
-                || body && isSymbolUsedInConditionBody(condExpr, body, testedNode, testedSymbol);
+            var isUsed = testedSymbol && ts.isBinaryExpression(condExpr.parent) && isSymbolUsedInBinaryExpressionChain(condExpr.parent, testedSymbol)
+                || testedSymbol && body && isSymbolUsedInConditionBody(condExpr, body, testedNode, testedSymbol);
             if (!isUsed) {
                 if (isPromise) {
                     errorAndMaybeSuggestAwait(location, 
@@ -77447,7 +78933,7 @@
                         var childExpression = childNode.parent;
                         while (testedExpression && childExpression) {
                             if (ts.isIdentifier(testedExpression) && ts.isIdentifier(childExpression) ||
-                                testedExpression.kind === 107 /* ThisKeyword */ && childExpression.kind === 107 /* ThisKeyword */) {
+                                testedExpression.kind === 108 /* ThisKeyword */ && childExpression.kind === 108 /* ThisKeyword */) {
                                 return getSymbolAtLocation(testedExpression) === getSymbolAtLocation(childExpression);
                             }
                             else if (ts.isPropertyAccessExpression(testedExpression) && ts.isPropertyAccessExpression(childExpression)) {
@@ -77512,12 +78998,12 @@
         function checkForStatement(node) {
             // Grammar checking
             if (!checkGrammarStatementInAmbientContext(node)) {
-                if (node.initializer && node.initializer.kind === 251 /* VariableDeclarationList */) {
+                if (node.initializer && node.initializer.kind === 253 /* VariableDeclarationList */) {
                     checkGrammarVariableDeclarationList(node.initializer);
                 }
             }
             if (node.initializer) {
-                if (node.initializer.kind === 251 /* VariableDeclarationList */) {
+                if (node.initializer.kind === 253 /* VariableDeclarationList */) {
                     ts.forEach(node.initializer.declarations, checkVariableDeclaration);
                 }
                 else {
@@ -77535,11 +79021,17 @@
         }
         function checkForOfStatement(node) {
             checkGrammarForInOrForOfStatement(node);
+            var container = ts.getContainingFunctionOrClassStaticBlock(node);
             if (node.awaitModifier) {
-                var functionFlags = ts.getFunctionFlags(ts.getContainingFunction(node));
-                if ((functionFlags & (4 /* Invalid */ | 2 /* Async */)) === 2 /* Async */ && languageVersion < 99 /* ESNext */) {
-                    // for..await..of in an async function or async generator function prior to ESNext requires the __asyncValues helper
-                    checkExternalEmitHelpers(node, 16384 /* ForAwaitOfIncludes */);
+                if (container && ts.isClassStaticBlockDeclaration(container)) {
+                    grammarErrorOnNode(node.awaitModifier, ts.Diagnostics.For_await_loops_cannot_be_used_inside_a_class_static_block);
+                }
+                else {
+                    var functionFlags = ts.getFunctionFlags(container);
+                    if ((functionFlags & (4 /* Invalid */ | 2 /* Async */)) === 2 /* Async */ && languageVersion < 99 /* ESNext */) {
+                        // for..await..of in an async function or async generator function prior to ESNext requires the __asyncValues helper
+                        checkExternalEmitHelpers(node, 16384 /* ForAwaitOfIncludes */);
+                    }
                 }
             }
             else if (compilerOptions.downlevelIteration && languageVersion < 2 /* ES2015 */) {
@@ -77551,14 +79043,14 @@
             // via checkRightHandSideOfForOf.
             // If the LHS is an expression, check the LHS, as a destructuring assignment or as a reference.
             // Then check that the RHS is assignable to it.
-            if (node.initializer.kind === 251 /* VariableDeclarationList */) {
+            if (node.initializer.kind === 253 /* VariableDeclarationList */) {
                 checkForInOrForOfVariableDeclaration(node);
             }
             else {
                 var varExpr = node.initializer;
                 var iteratedType = checkRightHandSideOfForOf(node);
                 // There may be a destructuring assignment on the left side
-                if (varExpr.kind === 200 /* ArrayLiteralExpression */ || varExpr.kind === 201 /* ObjectLiteralExpression */) {
+                if (varExpr.kind === 202 /* ArrayLiteralExpression */ || varExpr.kind === 203 /* ObjectLiteralExpression */) {
                     // iteratedType may be undefined. In this case, we still want to check the structure of
                     // varExpr, in particular making sure it's a valid LeftHandSideExpression. But we'd like
                     // to short circuit the type relation checking as much as possible, so we pass the unknownType.
@@ -77590,7 +79082,7 @@
             // for (let VarDecl in Expr) Statement
             //   VarDecl must be a variable declaration without a type annotation that declares a variable of type Any,
             //   and Expr must be an expression of type Any, an object type, or a type parameter type.
-            if (node.initializer.kind === 251 /* VariableDeclarationList */) {
+            if (node.initializer.kind === 253 /* VariableDeclarationList */) {
                 var variable = node.initializer.declarations[0];
                 if (variable && ts.isBindingPattern(variable.name)) {
                     error(variable.name, ts.Diagnostics.The_left_hand_side_of_a_for_in_statement_cannot_be_a_destructuring_pattern);
@@ -77604,7 +79096,7 @@
                 //   and Expr must be an expression of type Any, an object type, or a type parameter type.
                 var varExpr = node.initializer;
                 var leftType = checkExpression(varExpr);
-                if (varExpr.kind === 200 /* ArrayLiteralExpression */ || varExpr.kind === 201 /* ObjectLiteralExpression */) {
+                if (varExpr.kind === 202 /* ArrayLiteralExpression */ || varExpr.kind === 203 /* ObjectLiteralExpression */) {
                     error(varExpr, ts.Diagnostics.The_left_hand_side_of_a_for_in_statement_cannot_be_a_destructuring_pattern);
                 }
                 else if (!isTypeAssignableTo(getIndexTypeOrString(rightType), leftType)) {
@@ -77726,7 +79218,7 @@
                 }
                 return hasStringConstituent ? possibleOutOfBounds ? includeUndefinedInIndexSignature(stringType) : stringType : undefined;
             }
-            var arrayElementType = getIndexTypeOfType(arrayType, 1 /* Number */);
+            var arrayElementType = getIndexTypeOfType(arrayType, numberType);
             if (hasStringConstituent && arrayElementType) {
                 // This is just an optimization for the case where arrayOrStringType is string | string[]
                 if (arrayElementType.flags & 402653316 /* StringLike */ && !compilerOptions.noUncheckedIndexedAccess) {
@@ -77815,8 +79307,8 @@
             var yieldTypes;
             var returnTypes;
             var nextTypes;
-            for (var _i = 0, array_10 = array; _i < array_10.length; _i++) {
-                var iterationTypes = array_10[_i];
+            for (var _i = 0, array_11 = array; _i < array_11.length; _i++) {
+                var iterationTypes = array_11[_i];
                 if (iterationTypes === undefined || iterationTypes === noIterationTypes) {
                     continue;
                 }
@@ -78318,27 +79810,31 @@
             if (checkGrammarStatementInAmbientContext(node)) {
                 return;
             }
-            var func = ts.getContainingFunction(node);
-            if (!func) {
+            var container = ts.getContainingFunctionOrClassStaticBlock(node);
+            if (container && ts.isClassStaticBlockDeclaration(container)) {
+                grammarErrorOnFirstToken(node, ts.Diagnostics.A_return_statement_cannot_be_used_inside_a_class_static_block);
+                return;
+            }
+            if (!container) {
                 grammarErrorOnFirstToken(node, ts.Diagnostics.A_return_statement_can_only_be_used_within_a_function_body);
                 return;
             }
-            var signature = getSignatureFromDeclaration(func);
+            var signature = getSignatureFromDeclaration(container);
             var returnType = getReturnTypeOfSignature(signature);
-            var functionFlags = ts.getFunctionFlags(func);
+            var functionFlags = ts.getFunctionFlags(container);
             if (strictNullChecks || node.expression || returnType.flags & 131072 /* Never */) {
                 var exprType = node.expression ? checkExpressionCached(node.expression) : undefinedType;
-                if (func.kind === 169 /* SetAccessor */) {
+                if (container.kind === 171 /* SetAccessor */) {
                     if (node.expression) {
                         error(node, ts.Diagnostics.Setters_cannot_return_a_value);
                     }
                 }
-                else if (func.kind === 167 /* Constructor */) {
+                else if (container.kind === 169 /* Constructor */) {
                     if (node.expression && !checkTypeAssignableToAndOptionallyElaborate(exprType, returnType, node, node.expression)) {
                         error(node, ts.Diagnostics.Return_type_of_constructor_signature_must_be_assignable_to_the_instance_type_of_the_class);
                     }
                 }
-                else if (getReturnTypeFromAnnotation(func)) {
+                else if (getReturnTypeFromAnnotation(container)) {
                     var unwrappedReturnType = (_a = unwrapReturnType(returnType, functionFlags)) !== null && _a !== void 0 ? _a : returnType;
                     var unwrappedExprType = functionFlags & 2 /* Async */
                         ? checkAwaitedType(exprType, node, ts.Diagnostics.The_return_type_of_an_async_function_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member)
@@ -78351,7 +79847,7 @@
                     }
                 }
             }
-            else if (func.kind !== 167 /* Constructor */ && compilerOptions.noImplicitReturns && !isUnwrappedReturnTypeVoidOrAny(func, returnType)) {
+            else if (container.kind !== 169 /* Constructor */ && compilerOptions.noImplicitReturns && !isUnwrappedReturnTypeVoidOrAny(container, returnType)) {
                 // The function has a return type, but the return statement doesn't have an expression.
                 error(node, ts.Diagnostics.Not_all_code_paths_return_a_value);
             }
@@ -78380,7 +79876,7 @@
             var expressionIsLiteral = isLiteralType(expressionType);
             ts.forEach(node.caseBlock.clauses, function (clause) {
                 // Grammar check for duplicate default clauses, skip if we already report duplicate default clause
-                if (clause.kind === 286 /* DefaultClause */ && !hasDuplicateDefaultClause) {
+                if (clause.kind === 288 /* DefaultClause */ && !hasDuplicateDefaultClause) {
                     if (firstDefaultClause === undefined) {
                         firstDefaultClause = clause;
                     }
@@ -78389,7 +79885,7 @@
                         hasDuplicateDefaultClause = true;
                     }
                 }
-                if (produceDiagnostics && clause.kind === 285 /* CaseClause */) {
+                if (produceDiagnostics && clause.kind === 287 /* CaseClause */) {
                     // TypeScript 1.0 spec (April 2014): 5.9
                     // In a 'switch' statement, each 'case' expression must be of a type that is comparable
                     // to or from the type of the 'switch' expression.
@@ -78421,7 +79917,7 @@
                     if (ts.isFunctionLike(current)) {
                         return "quit";
                     }
-                    if (current.kind === 246 /* LabeledStatement */ && current.label.escapedText === node.label.escapedText) {
+                    if (current.kind === 248 /* LabeledStatement */ && current.label.escapedText === node.label.escapedText) {
                         grammarErrorOnNode(node.label, ts.Diagnostics.Duplicate_label_0, ts.getTextOfNode(node.label));
                         return true;
                     }
@@ -78479,87 +79975,83 @@
                 checkBlock(node.finallyBlock);
             }
         }
-        function checkIndexConstraints(type, isStatic) {
-            var _a, _b, _c, _d;
-            var declaredNumberIndexer = getIndexDeclarationOfSymbolTable(isStatic ? (_a = type.symbol) === null || _a === void 0 ? void 0 : _a.exports : (_b = type.symbol) === null || _b === void 0 ? void 0 : _b.members, 1 /* Number */);
-            var declaredStringIndexer = getIndexDeclarationOfSymbolTable(isStatic ? (_c = type.symbol) === null || _c === void 0 ? void 0 : _c.exports : (_d = type.symbol) === null || _d === void 0 ? void 0 : _d.members, 0 /* String */);
-            var stringIndexType = getIndexTypeOfType(type, 0 /* String */);
-            var numberIndexType = getIndexTypeOfType(type, 1 /* Number */);
-            if (stringIndexType || numberIndexType) {
-                ts.forEach(getPropertiesOfObjectType(type), function (prop) {
-                    if (isStatic && prop.flags & 4194304 /* Prototype */)
-                        return;
-                    var propType = getTypeOfSymbol(prop);
-                    checkIndexConstraintForProperty(prop, propType, type, declaredStringIndexer, stringIndexType, 0 /* String */);
-                    checkIndexConstraintForProperty(prop, propType, type, declaredNumberIndexer, numberIndexType, 1 /* Number */);
-                });
-                var classDeclaration = type.symbol.valueDeclaration;
-                if (ts.getObjectFlags(type) & 1 /* Class */ && classDeclaration && ts.isClassLike(classDeclaration)) {
-                    for (var _i = 0, _e = classDeclaration.members; _i < _e.length; _i++) {
-                        var member = _e[_i];
-                        // Only process instance properties with computed names here.
-                        // Static properties cannot be in conflict with indexers,
-                        // and properties with literal names were already checked.
-                        if (!ts.hasSyntacticModifier(member, 32 /* Static */) && !hasBindableName(member)) {
-                            var symbol = getSymbolOfNode(member);
-                            var propType = getTypeOfSymbol(symbol);
-                            checkIndexConstraintForProperty(symbol, propType, type, declaredStringIndexer, stringIndexType, 0 /* String */);
-                            checkIndexConstraintForProperty(symbol, propType, type, declaredNumberIndexer, numberIndexType, 1 /* Number */);
-                        }
+        function checkIndexConstraints(type, isStaticIndex) {
+            var indexInfos = getIndexInfosOfType(type);
+            if (indexInfos.length === 0) {
+                return;
+            }
+            for (var _i = 0, _a = getPropertiesOfObjectType(type); _i < _a.length; _i++) {
+                var prop = _a[_i];
+                if (!(isStaticIndex && prop.flags & 4194304 /* Prototype */)) {
+                    checkIndexConstraintForProperty(type, prop, getLiteralTypeFromProperty(prop, 8576 /* StringOrNumberLiteralOrUnique */, /*includeNonPublic*/ true), getNonMissingTypeOfSymbol(prop));
+                }
+            }
+            var typeDeclaration = type.symbol.valueDeclaration;
+            if (typeDeclaration && ts.isClassLike(typeDeclaration)) {
+                for (var _b = 0, _c = typeDeclaration.members; _b < _c.length; _b++) {
+                    var member = _c[_b];
+                    // Only process instance properties with computed names here. Static properties cannot be in conflict with indexers,
+                    // and properties with literal names were already checked.
+                    if (!ts.isStatic(member) && !hasBindableName(member)) {
+                        var symbol = getSymbolOfNode(member);
+                        checkIndexConstraintForProperty(type, symbol, getTypeOfExpression(member.name.expression), getNonMissingTypeOfSymbol(symbol));
                     }
                 }
             }
-            var errorNode;
-            if (stringIndexType && numberIndexType) {
-                errorNode = declaredNumberIndexer || declaredStringIndexer;
-                // condition 'errorNode === undefined' may appear if types does not declare nor string neither number indexer
-                if (!errorNode && (ts.getObjectFlags(type) & 2 /* Interface */)) {
-                    var someBaseTypeHasBothIndexers = ts.forEach(getBaseTypes(type), function (base) { return getIndexTypeOfType(base, 0 /* String */) && getIndexTypeOfType(base, 1 /* Number */); });
-                    errorNode = someBaseTypeHasBothIndexers || !type.symbol.declarations ? undefined : type.symbol.declarations[0];
+            if (indexInfos.length > 1) {
+                for (var _d = 0, indexInfos_6 = indexInfos; _d < indexInfos_6.length; _d++) {
+                    var info = indexInfos_6[_d];
+                    checkIndexConstraintForIndexSignature(type, info);
                 }
             }
-            if (errorNode && !isTypeAssignableTo(numberIndexType, stringIndexType)) { // TODO: GH#18217
-                error(errorNode, ts.Diagnostics.Numeric_index_type_0_is_not_assignable_to_string_index_type_1, typeToString(numberIndexType), typeToString(stringIndexType));
+        }
+        function checkIndexConstraintForProperty(type, prop, propNameType, propType) {
+            var declaration = prop.valueDeclaration;
+            var name = ts.getNameOfDeclaration(declaration);
+            if (name && ts.isPrivateIdentifier(name)) {
+                return;
             }
-            function checkIndexConstraintForProperty(prop, propertyType, containingType, indexDeclaration, indexType, indexKind) {
-                // ESSymbol properties apply to neither string nor numeric indexers.
-                if (!indexType || ts.isKnownSymbol(prop)) {
-                    return;
+            var indexInfos = getApplicableIndexInfos(type, propNameType);
+            var interfaceDeclaration = ts.getObjectFlags(type) & 2 /* Interface */ ? ts.getDeclarationOfKind(type.symbol, 256 /* InterfaceDeclaration */) : undefined;
+            var localPropDeclaration = declaration && declaration.kind === 219 /* BinaryExpression */ ||
+                name && name.kind === 160 /* ComputedPropertyName */ || getParentOfSymbol(prop) === type.symbol ? declaration : undefined;
+            var _loop_27 = function (info) {
+                var localIndexDeclaration = info.declaration && getParentOfSymbol(getSymbolOfNode(info.declaration)) === type.symbol ? info.declaration : undefined;
+                // We check only when (a) the property is declared in the containing type, or (b) the applicable index signature is declared
+                // in the containing type, or (c) the containing type is an interface and no base interface contains both the property and
+                // the index signature (i.e. property and index signature are declared in separate inherited interfaces).
+                var errorNode = localPropDeclaration || localIndexDeclaration ||
+                    (interfaceDeclaration && !ts.some(getBaseTypes(type), function (base) { return !!getPropertyOfObjectType(base, prop.escapedName) && !!getIndexTypeOfType(base, info.keyType); }) ? interfaceDeclaration : undefined);
+                if (errorNode && !isTypeAssignableTo(propType, info.type)) {
+                    error(errorNode, ts.Diagnostics.Property_0_of_type_1_is_not_assignable_to_2_index_type_3, symbolToString(prop), typeToString(propType), typeToString(info.keyType), typeToString(info.type));
                 }
-                var propDeclaration = prop.valueDeclaration;
-                var name = propDeclaration && ts.getNameOfDeclaration(propDeclaration);
-                if (name && ts.isPrivateIdentifier(name)) {
-                    return;
+            };
+            for (var _i = 0, indexInfos_7 = indexInfos; _i < indexInfos_7.length; _i++) {
+                var info = indexInfos_7[_i];
+                _loop_27(info);
+            }
+        }
+        function checkIndexConstraintForIndexSignature(type, checkInfo) {
+            var declaration = checkInfo.declaration;
+            var indexInfos = getApplicableIndexInfos(type, checkInfo.keyType);
+            var interfaceDeclaration = ts.getObjectFlags(type) & 2 /* Interface */ ? ts.getDeclarationOfKind(type.symbol, 256 /* InterfaceDeclaration */) : undefined;
+            var localCheckDeclaration = declaration && getParentOfSymbol(getSymbolOfNode(declaration)) === type.symbol ? declaration : undefined;
+            var _loop_28 = function (info) {
+                if (info === checkInfo)
+                    return "continue";
+                var localIndexDeclaration = info.declaration && getParentOfSymbol(getSymbolOfNode(info.declaration)) === type.symbol ? info.declaration : undefined;
+                // We check only when (a) the check index signature is declared in the containing type, or (b) the applicable index
+                // signature is declared in the containing type, or (c) the containing type is an interface and no base interface contains
+                // both index signatures (i.e. the index signatures are declared in separate inherited interfaces).
+                var errorNode = localCheckDeclaration || localIndexDeclaration ||
+                    (interfaceDeclaration && !ts.some(getBaseTypes(type), function (base) { return !!getIndexInfoOfType(base, checkInfo.keyType) && !!getIndexTypeOfType(base, info.keyType); }) ? interfaceDeclaration : undefined);
+                if (errorNode && !isTypeAssignableTo(checkInfo.type, info.type)) {
+                    error(errorNode, ts.Diagnostics._0_index_type_1_is_not_assignable_to_2_index_type_3, typeToString(checkInfo.keyType), typeToString(checkInfo.type), typeToString(info.keyType), typeToString(info.type));
                 }
-                // index is numeric and property name is not valid numeric literal
-                if (indexKind === 1 /* Number */ && !(name ? isNumericName(name) : isNumericLiteralName(prop.escapedName))) {
-                    return;
-                }
-                // perform property check if property or indexer is declared in 'type'
-                // this allows us to rule out cases when both property and indexer are inherited from the base class
-                var errorNode;
-                if (propDeclaration && name &&
-                    (propDeclaration.kind === 217 /* BinaryExpression */ ||
-                        name.kind === 159 /* ComputedPropertyName */ ||
-                        prop.parent === containingType.symbol)) {
-                    errorNode = propDeclaration;
-                }
-                else if (indexDeclaration) {
-                    errorNode = indexDeclaration;
-                }
-                else if (ts.getObjectFlags(containingType) & 2 /* Interface */) {
-                    // for interfaces property and indexer might be inherited from different bases
-                    // check if any base class already has both property and indexer.
-                    // check should be performed only if 'type' is the first type that brings property\indexer together
-                    var someBaseClassHasBothPropertyAndIndexer = ts.forEach(getBaseTypes(containingType), function (base) { return getPropertyOfObjectType(base, prop.escapedName) && getIndexTypeOfType(base, indexKind); });
-                    errorNode = someBaseClassHasBothPropertyAndIndexer || !containingType.symbol.declarations ? undefined : containingType.symbol.declarations[0];
-                }
-                if (errorNode && !isTypeAssignableTo(propertyType, indexType)) {
-                    var errorMessage = indexKind === 0 /* String */
-                        ? ts.Diagnostics.Property_0_of_type_1_is_not_assignable_to_string_index_type_2
-                        : ts.Diagnostics.Property_0_of_type_1_is_not_assignable_to_numeric_index_type_2;
-                    error(errorNode, errorMessage, symbolToString(prop), typeToString(propertyType), typeToString(indexType));
-                }
+            };
+            for (var _i = 0, indexInfos_8 = indexInfos; _i < indexInfos_8.length; _i++) {
+                var info = indexInfos_8[_i];
+                _loop_28(info);
             }
         }
         function checkTypeNameIsReserved(name, message) {
@@ -78618,7 +80110,7 @@
         function checkTypeParametersNotReferenced(root, typeParameters, index) {
             visit(root);
             function visit(node) {
-                if (node.kind === 174 /* TypeReference */) {
+                if (node.kind === 176 /* TypeReference */) {
                     var type = getTypeFromTypeReference(node);
                     if (type.flags & 262144 /* TypeParameter */) {
                         for (var i = index; i < typeParameters.length; i++) {
@@ -78717,14 +80209,7 @@
         function checkClassLikeDeclaration(node) {
             checkGrammarClassLikeDeclaration(node);
             checkDecorators(node);
-            if (node.name) {
-                checkTypeNameIsReserved(node.name, ts.Diagnostics.Class_name_cannot_be_0);
-                checkCollisionWithRequireExportsInGeneratedCode(node, node.name);
-                checkCollisionWithGlobalPromiseInGeneratedCode(node, node.name);
-                if (!(node.flags & 8388608 /* Ambient */)) {
-                    checkClassNameCollisionWithObject(node.name);
-                }
-            }
+            checkCollisionsForDeclarationName(node, node.name);
             checkTypeParameters(ts.getEffectiveTypeParameterDeclarations(node));
             checkExportsOnMergedDeclarations(node);
             var symbol = getSymbolOfNode(node);
@@ -78826,7 +80311,7 @@
             }
             if (produceDiagnostics) {
                 checkIndexConstraints(type);
-                checkIndexConstraints(staticType, /*isStatic*/ true);
+                checkIndexConstraints(staticType, /*isStaticIndex*/ true);
                 checkTypeForDuplicateIndexSignatures(node);
                 checkPropertyInitialization(node);
             }
@@ -78837,7 +80322,7 @@
             var baseTypes = baseTypeNode && getBaseTypes(type);
             var baseWithThis = (baseTypes === null || baseTypes === void 0 ? void 0 : baseTypes.length) ? getTypeWithThisArgument(ts.first(baseTypes), type.thisType) : undefined;
             var baseStaticType = getBaseConstructorTypeOfClass(type);
-            var _loop_24 = function (member) {
+            var _loop_29 = function (member) {
                 if (ts.hasAmbientModifier(member)) {
                     return "continue";
                 }
@@ -78852,11 +80337,11 @@
             };
             for (var _i = 0, _a = node.members; _i < _a.length; _i++) {
                 var member = _a[_i];
-                _loop_24(member);
+                _loop_29(member);
             }
             function checkClassMember(member, memberIsParameterProperty) {
                 var hasOverride = ts.hasOverrideModifier(member);
-                var hasStatic = ts.hasStaticModifier(member);
+                var hasStatic = ts.isStatic(member);
                 if (baseWithThis && (hasOverride || compilerOptions.noImplicitOverride)) {
                     var declaredProp = member.name && getSymbolAtLocation(member.name) || getSymbolAtLocation(member);
                     if (!declaredProp) {
@@ -78868,10 +80353,13 @@
                     var baseProp = getPropertyOfType(baseType, declaredProp.escapedName);
                     var baseClassName = typeToString(baseWithThis);
                     if (prop && !baseProp && hasOverride) {
-                        error(member, ts.Diagnostics.This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0, baseClassName);
+                        var suggestion = getSuggestedSymbolForNonexistentClassMember(ts.symbolName(declaredProp), baseType);
+                        suggestion ?
+                            error(member, ts.Diagnostics.This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0_Did_you_mean_1, baseClassName, symbolToString(suggestion)) :
+                            error(member, ts.Diagnostics.This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0, baseClassName);
                     }
-                    else if (prop && (baseProp === null || baseProp === void 0 ? void 0 : baseProp.valueDeclaration) && compilerOptions.noImplicitOverride && !nodeInAmbientContext) {
-                        var baseHasAbstract = ts.hasAbstractModifier(baseProp.valueDeclaration);
+                    else if (prop && (baseProp === null || baseProp === void 0 ? void 0 : baseProp.declarations) && compilerOptions.noImplicitOverride && !nodeInAmbientContext) {
+                        var baseHasAbstract = ts.some(baseProp.declarations, function (d) { return ts.hasAbstractModifier(d); });
                         if (hasOverride) {
                             return;
                         }
@@ -78895,8 +80383,8 @@
         function issueMemberSpecificError(node, typeWithThis, baseWithThis, broadDiag) {
             // iterate over all implemented properties and issue errors on each one which isn't compatible, rather than the class as a whole, if possible
             var issuedMemberError = false;
-            var _loop_25 = function (member) {
-                if (ts.hasStaticModifier(member)) {
+            var _loop_30 = function (member) {
+                if (ts.isStatic(member)) {
                     return "continue";
                 }
                 var declaredProp = member.name && getSymbolAtLocation(member.name) || getSymbolAtLocation(member);
@@ -78914,7 +80402,7 @@
             };
             for (var _i = 0, _a = node.members; _i < _a.length; _i++) {
                 var member = _a[_i];
-                _loop_25(member);
+                _loop_30(member);
             }
             if (!issuedMemberError) {
                 // check again with diagnostics to generate a less-specific error
@@ -78940,7 +80428,7 @@
         }
         function getClassOrInterfaceDeclarationsOfSymbol(symbol) {
             return ts.filter(symbol.declarations, function (d) {
-                return d.kind === 253 /* ClassDeclaration */ || d.kind === 254 /* InterfaceDeclaration */;
+                return d.kind === 255 /* ClassDeclaration */ || d.kind === 256 /* InterfaceDeclaration */;
             });
         }
         function checkKindsOfPropertyMemberOverrides(type, baseType) {
@@ -78996,7 +80484,7 @@
                                 continue basePropertyCheck;
                             }
                         }
-                        if (derivedClassDecl.kind === 222 /* ClassExpression */) {
+                        if (derivedClassDecl.kind === 224 /* ClassExpression */) {
                             error(derivedClassDecl, ts.Diagnostics.Non_abstract_class_expression_does_not_implement_inherited_abstract_member_0_from_class_1, symbolToString(baseProperty), typeToString(baseType));
                         }
                         else {
@@ -79017,7 +80505,7 @@
                     if (basePropertyFlags && derivedPropertyFlags) {
                         // property/accessor is overridden with property/accessor
                         if (baseDeclarationFlags & 128 /* Abstract */ && !(base.valueDeclaration && ts.isPropertyDeclaration(base.valueDeclaration) && base.valueDeclaration.initializer)
-                            || base.valueDeclaration && base.valueDeclaration.parent.kind === 254 /* InterfaceDeclaration */
+                            || base.valueDeclaration && base.valueDeclaration.parent.kind === 256 /* InterfaceDeclaration */
                             || derived.valueDeclaration && ts.isBinaryExpression(derived.valueDeclaration)) {
                             // when the base property is abstract or from an interface, base/derived flags don't need to match
                             // same when the derived property is from an assignment
@@ -79032,7 +80520,7 @@
                             error(ts.getNameOfDeclaration(derived.valueDeclaration) || derived.valueDeclaration, errorMessage_1, symbolToString(base), typeToString(baseType), typeToString(type));
                         }
                         else if (useDefineForClassFields) {
-                            var uninitialized = (_a = derived.declarations) === null || _a === void 0 ? void 0 : _a.find(function (d) { return d.kind === 164 /* PropertyDeclaration */ && !d.initializer; });
+                            var uninitialized = (_a = derived.declarations) === null || _a === void 0 ? void 0 : _a.find(function (d) { return d.kind === 165 /* PropertyDeclaration */ && !d.initializer; });
                             if (uninitialized
                                 && !(derived.flags & 33554432 /* Transient */)
                                 && !(baseDeclarationFlags & 128 /* Abstract */)
@@ -79134,7 +80622,7 @@
                 if (ts.getEffectiveModifierFlags(member) & 2 /* Ambient */) {
                     continue;
                 }
-                if (isInstancePropertyWithoutInitializer(member)) {
+                if (!ts.isStatic(member) && isPropertyWithoutInitializer(member)) {
                     var propName = member.name;
                     if (ts.isIdentifier(propName) || ts.isPrivateIdentifier(propName)) {
                         var type = getTypeOfSymbol(getSymbolOfNode(member));
@@ -79147,12 +80635,29 @@
                 }
             }
         }
-        function isInstancePropertyWithoutInitializer(node) {
-            return node.kind === 164 /* PropertyDeclaration */ &&
-                !ts.hasSyntacticModifier(node, 32 /* Static */ | 128 /* Abstract */) &&
+        function isPropertyWithoutInitializer(node) {
+            return node.kind === 165 /* PropertyDeclaration */ &&
+                !ts.hasAbstractModifier(node) &&
                 !node.exclamationToken &&
                 !node.initializer;
         }
+        function isPropertyInitializedInStaticBlocks(propName, propType, staticBlocks, startPos, endPos) {
+            for (var _i = 0, staticBlocks_2 = staticBlocks; _i < staticBlocks_2.length; _i++) {
+                var staticBlock = staticBlocks_2[_i];
+                // static block must be within the provided range as they are evaluated in document order (unlike constructors)
+                if (staticBlock.pos >= startPos && staticBlock.pos <= endPos) {
+                    var reference = ts.factory.createPropertyAccessExpression(ts.factory.createThis(), propName);
+                    ts.setParent(reference.expression, reference);
+                    ts.setParent(reference, staticBlock);
+                    reference.flowNode = staticBlock.returnFlowNode;
+                    var flowType = getFlowTypeOfReference(reference, propType, getOptionalType(propType));
+                    if (!(getFalsyFlags(flowType) & 32768 /* Undefined */)) {
+                        return true;
+                    }
+                }
+            }
+            return false;
+        }
         function isPropertyInitializedInConstructor(propName, propType, constructor) {
             var reference = ts.factory.createPropertyAccessExpression(ts.factory.createThis(), propName);
             ts.setParent(reference.expression, reference);
@@ -79172,7 +80677,7 @@
                 var symbol = getSymbolOfNode(node);
                 checkTypeParameterListsIdentical(symbol);
                 // Only check this symbol once
-                var firstInterfaceDecl = ts.getDeclarationOfKind(symbol, 254 /* InterfaceDeclaration */);
+                var firstInterfaceDecl = ts.getDeclarationOfKind(symbol, 256 /* InterfaceDeclaration */);
                 if (node === firstInterfaceDecl) {
                     var type = getDeclaredTypeOfSymbol(symbol);
                     var typeWithThis = getTypeWithThisArgument(type);
@@ -79205,7 +80710,7 @@
             checkTypeNameIsReserved(node.name, ts.Diagnostics.Type_alias_name_cannot_be_0);
             checkExportsOnMergedDeclarations(node);
             checkTypeParameters(node.typeParameters);
-            if (node.type.kind === 136 /* IntrinsicKeyword */) {
+            if (node.type.kind === 137 /* IntrinsicKeyword */) {
                 if (!intrinsicTypeKinds.has(node.name.escapedText) || ts.length(node.typeParameters) !== 1) {
                     error(node.type, ts.Diagnostics.The_intrinsic_keyword_can_only_be_used_to_declare_compiler_provided_intrinsic_types);
                 }
@@ -79234,7 +80739,7 @@
             }
             else {
                 var text = ts.getTextOfPropertyName(member.name);
-                if (isNumericLiteralName(text) && !isInfinityOrNaNString(text)) {
+                if (isNumericLiteralName(text) && !ts.isInfinityOrNaNString(text)) {
                     error(member.name, ts.Diagnostics.An_enum_member_cannot_have_a_numeric_name);
                 }
             }
@@ -79291,7 +80796,7 @@
             return value;
             function evaluate(expr) {
                 switch (expr.kind) {
-                    case 215 /* PrefixUnaryExpression */:
+                    case 217 /* PrefixUnaryExpression */:
                         var value_2 = evaluate(expr.operand);
                         if (typeof value_2 === "number") {
                             switch (expr.operator) {
@@ -79301,7 +80806,7 @@
                             }
                         }
                         break;
-                    case 217 /* BinaryExpression */:
+                    case 219 /* BinaryExpression */:
                         var left = evaluate(expr.left);
                         var right = evaluate(expr.right);
                         if (typeof left === "number" && typeof right === "number") {
@@ -79330,22 +80835,22 @@
                     case 8 /* NumericLiteral */:
                         checkGrammarNumericLiteral(expr);
                         return +expr.text;
-                    case 208 /* ParenthesizedExpression */:
+                    case 210 /* ParenthesizedExpression */:
                         return evaluate(expr.expression);
-                    case 78 /* Identifier */:
+                    case 79 /* Identifier */:
                         var identifier = expr;
-                        if (isInfinityOrNaNString(identifier.escapedText)) {
+                        if (ts.isInfinityOrNaNString(identifier.escapedText)) {
                             return +(identifier.escapedText);
                         }
                         return ts.nodeIsMissing(expr) ? 0 : evaluateEnumMember(expr, getSymbolOfNode(member.parent), identifier.escapedText);
-                    case 203 /* ElementAccessExpression */:
-                    case 202 /* PropertyAccessExpression */:
+                    case 205 /* ElementAccessExpression */:
+                    case 204 /* PropertyAccessExpression */:
                         var ex = expr;
                         if (isConstantMemberAccess(ex)) {
                             var type = getTypeOfExpression(ex.expression);
                             if (type.symbol && type.symbol.flags & 384 /* Enum */) {
                                 var name = void 0;
-                                if (ex.kind === 202 /* PropertyAccessExpression */) {
+                                if (ex.kind === 204 /* PropertyAccessExpression */) {
                                     name = ex.name.escapedText;
                                 }
                                 else {
@@ -79377,9 +80882,9 @@
             }
         }
         function isConstantMemberAccess(node) {
-            return node.kind === 78 /* Identifier */ ||
-                node.kind === 202 /* PropertyAccessExpression */ && isConstantMemberAccess(node.expression) ||
-                node.kind === 203 /* ElementAccessExpression */ && isConstantMemberAccess(node.expression) &&
+            return node.kind === 79 /* Identifier */ ||
+                node.kind === 204 /* PropertyAccessExpression */ && isConstantMemberAccess(node.expression) ||
+                node.kind === 205 /* ElementAccessExpression */ && isConstantMemberAccess(node.expression) &&
                     ts.isStringLiteralLike(node.argumentExpression);
         }
         function checkEnumDeclaration(node) {
@@ -79388,9 +80893,7 @@
             }
             // Grammar checking
             checkGrammarDecoratorsAndModifiers(node);
-            checkTypeNameIsReserved(node.name, ts.Diagnostics.Enum_name_cannot_be_0);
-            checkCollisionWithRequireExportsInGeneratedCode(node, node.name);
-            checkCollisionWithGlobalPromiseInGeneratedCode(node, node.name);
+            checkCollisionsForDeclarationName(node, node.name);
             checkExportsOnMergedDeclarations(node);
             node.members.forEach(checkEnumMember);
             computeEnumMemberValues(node);
@@ -79415,7 +80918,7 @@
                 var seenEnumMissingInitialInitializer_1 = false;
                 ts.forEach(enumSymbol.declarations, function (declaration) {
                     // return true if we hit a violation of the rule, false otherwise
-                    if (declaration.kind !== 256 /* EnumDeclaration */) {
+                    if (declaration.kind !== 258 /* EnumDeclaration */) {
                         return false;
                     }
                     var enumDeclaration = declaration;
@@ -79444,8 +80947,8 @@
             if (declarations) {
                 for (var _i = 0, declarations_8 = declarations; _i < declarations_8.length; _i++) {
                     var declaration = declarations_8[_i];
-                    if ((declaration.kind === 253 /* ClassDeclaration */ ||
-                        (declaration.kind === 252 /* FunctionDeclaration */ && ts.nodeIsPresent(declaration.body))) &&
+                    if ((declaration.kind === 255 /* ClassDeclaration */ ||
+                        (declaration.kind === 254 /* FunctionDeclaration */ && ts.nodeIsPresent(declaration.body))) &&
                         !(declaration.flags & 8388608 /* Ambient */)) {
                         return declaration;
                     }
@@ -79488,8 +80991,7 @@
                     }
                 }
                 if (ts.isIdentifier(node.name)) {
-                    checkCollisionWithRequireExportsInGeneratedCode(node, node.name);
-                    checkCollisionWithGlobalPromiseInGeneratedCode(node, node.name);
+                    checkCollisionsForDeclarationName(node, node.name);
                 }
                 checkExportsOnMergedDeclarations(node);
                 var symbol = getSymbolOfNode(node);
@@ -79510,7 +81012,7 @@
                     }
                     // if the module merges with a class declaration in the same lexical scope,
                     // we need to track this to ensure the correct emit.
-                    var mergedClass = ts.getDeclarationOfKind(symbol, 253 /* ClassDeclaration */);
+                    var mergedClass = ts.getDeclarationOfKind(symbol, 255 /* ClassDeclaration */);
                     if (mergedClass &&
                         inSameLexicalScope(node, mergedClass)) {
                         getNodeLinks(node).flags |= 32768 /* LexicalModuleMergesWithClass */;
@@ -79561,23 +81063,23 @@
         function checkModuleAugmentationElement(node, isGlobalAugmentation) {
             var _a;
             switch (node.kind) {
-                case 233 /* VariableStatement */:
+                case 235 /* VariableStatement */:
                     // error each individual name in variable statement instead of marking the entire variable statement
                     for (var _i = 0, _b = node.declarationList.declarations; _i < _b.length; _i++) {
                         var decl = _b[_i];
                         checkModuleAugmentationElement(decl, isGlobalAugmentation);
                     }
                     break;
-                case 267 /* ExportAssignment */:
-                case 268 /* ExportDeclaration */:
+                case 269 /* ExportAssignment */:
+                case 270 /* ExportDeclaration */:
                     grammarErrorOnFirstToken(node, ts.Diagnostics.Exports_and_export_assignments_are_not_permitted_in_module_augmentations);
                     break;
-                case 261 /* ImportEqualsDeclaration */:
-                case 262 /* ImportDeclaration */:
+                case 263 /* ImportEqualsDeclaration */:
+                case 264 /* ImportDeclaration */:
                     grammarErrorOnFirstToken(node, ts.Diagnostics.Imports_are_not_permitted_in_module_augmentations_Consider_moving_them_to_the_enclosing_external_module);
                     break;
-                case 199 /* BindingElement */:
-                case 250 /* VariableDeclaration */:
+                case 201 /* BindingElement */:
+                case 252 /* VariableDeclaration */:
                     var name = node.name;
                     if (ts.isBindingPattern(name)) {
                         for (var _c = 0, _d = name.elements; _c < _d.length; _c++) {
@@ -79588,12 +81090,12 @@
                         break;
                     }
                 // falls through
-                case 253 /* ClassDeclaration */:
-                case 256 /* EnumDeclaration */:
-                case 252 /* FunctionDeclaration */:
-                case 254 /* InterfaceDeclaration */:
-                case 257 /* ModuleDeclaration */:
-                case 255 /* TypeAliasDeclaration */:
+                case 255 /* ClassDeclaration */:
+                case 258 /* EnumDeclaration */:
+                case 254 /* FunctionDeclaration */:
+                case 256 /* InterfaceDeclaration */:
+                case 259 /* ModuleDeclaration */:
+                case 257 /* TypeAliasDeclaration */:
                     if (isGlobalAugmentation) {
                         return;
                     }
@@ -79614,20 +81116,20 @@
         }
         function getFirstNonModuleExportsIdentifier(node) {
             switch (node.kind) {
-                case 78 /* Identifier */:
+                case 79 /* Identifier */:
                     return node;
-                case 158 /* QualifiedName */:
+                case 159 /* QualifiedName */:
                     do {
                         node = node.left;
-                    } while (node.kind !== 78 /* Identifier */);
+                    } while (node.kind !== 79 /* Identifier */);
                     return node;
-                case 202 /* PropertyAccessExpression */:
+                case 204 /* PropertyAccessExpression */:
                     do {
                         if (ts.isModuleExportsAccessExpression(node.expression) && !ts.isPrivateIdentifier(node.name)) {
                             return node.name;
                         }
                         node = node.expression;
-                    } while (node.kind !== 78 /* Identifier */);
+                    } while (node.kind !== 79 /* Identifier */);
                     return node;
             }
         }
@@ -79641,9 +81143,9 @@
                 error(moduleName, ts.Diagnostics.String_literal_expected);
                 return false;
             }
-            var inAmbientExternalModule = node.parent.kind === 258 /* ModuleBlock */ && ts.isAmbientModule(node.parent.parent);
-            if (node.parent.kind !== 298 /* SourceFile */ && !inAmbientExternalModule) {
-                error(moduleName, node.kind === 268 /* ExportDeclaration */ ?
+            var inAmbientExternalModule = node.parent.kind === 260 /* ModuleBlock */ && ts.isAmbientModule(node.parent.parent);
+            if (node.parent.kind !== 300 /* SourceFile */ && !inAmbientExternalModule) {
+                error(moduleName, node.kind === 270 /* ExportDeclaration */ ?
                     ts.Diagnostics.Export_declarations_are_not_permitted_in_a_namespace :
                     ts.Diagnostics.Import_declarations_in_a_namespace_cannot_reference_a_module);
                 return false;
@@ -79678,14 +81180,14 @@
                     (symbol.flags & 788968 /* Type */ ? 788968 /* Type */ : 0) |
                     (symbol.flags & 1920 /* Namespace */ ? 1920 /* Namespace */ : 0);
                 if (target.flags & excludedMeanings) {
-                    var message = node.kind === 271 /* ExportSpecifier */ ?
+                    var message = node.kind === 273 /* ExportSpecifier */ ?
                         ts.Diagnostics.Export_declaration_conflicts_with_exported_declaration_of_0 :
                         ts.Diagnostics.Import_declaration_conflicts_with_local_declaration_of_0;
                     error(node, message, symbolToString(symbol));
                 }
                 // Don't allow to re-export something with no value side when `--isolatedModules` is set.
                 if (compilerOptions.isolatedModules
-                    && node.kind === 271 /* ExportSpecifier */
+                    && node.kind === 273 /* ExportSpecifier */
                     && !node.parent.parent.isTypeOnly
                     && !(target.flags & 111551 /* Value */)
                     && !(node.flags & 8388608 /* Ambient */)) {
@@ -79697,10 +81199,9 @@
             }
         }
         function checkImportBinding(node) {
-            checkCollisionWithRequireExportsInGeneratedCode(node, node.name);
-            checkCollisionWithGlobalPromiseInGeneratedCode(node, node.name);
+            checkCollisionsForDeclarationName(node, node.name);
             checkAliasSymbol(node);
-            if (node.kind === 266 /* ImportSpecifier */ &&
+            if (node.kind === 268 /* ImportSpecifier */ &&
                 ts.idText(node.propertyName || node.name) === "default" &&
                 compilerOptions.esModuleInterop &&
                 moduleKind !== ts.ModuleKind.System && moduleKind < ts.ModuleKind.ES2015) {
@@ -79722,7 +81223,7 @@
                         checkImportBinding(importClause);
                     }
                     if (importClause.namedBindings) {
-                        if (importClause.namedBindings.kind === 264 /* NamespaceImport */) {
+                        if (importClause.namedBindings.kind === 266 /* NamespaceImport */) {
                             checkImportBinding(importClause.namedBindings);
                             if (moduleKind !== ts.ModuleKind.System && moduleKind < ts.ModuleKind.ES2015 && compilerOptions.esModuleInterop) {
                                 // import * as ns from "foo";
@@ -79750,7 +81251,7 @@
                 if (ts.hasSyntacticModifier(node, 1 /* Export */)) {
                     markExportAsReferenced(node);
                 }
-                if (node.moduleReference.kind !== 273 /* ExternalModuleReference */) {
+                if (node.moduleReference.kind !== 275 /* ExternalModuleReference */) {
                     var target = resolveAlias(getSymbolOfNode(node));
                     if (target !== unknownSymbol) {
                         if (target.flags & 111551 /* Value */) {
@@ -79793,10 +81294,10 @@
                     // export { x, y }
                     // export { x, y } from "foo"
                     ts.forEach(node.exportClause.elements, checkExportSpecifier);
-                    var inAmbientExternalModule = node.parent.kind === 258 /* ModuleBlock */ && ts.isAmbientModule(node.parent.parent);
-                    var inAmbientNamespaceDeclaration = !inAmbientExternalModule && node.parent.kind === 258 /* ModuleBlock */ &&
+                    var inAmbientExternalModule = node.parent.kind === 260 /* ModuleBlock */ && ts.isAmbientModule(node.parent.parent);
+                    var inAmbientNamespaceDeclaration = !inAmbientExternalModule && node.parent.kind === 260 /* ModuleBlock */ &&
                         !node.moduleSpecifier && node.flags & 8388608 /* Ambient */;
-                    if (node.parent.kind !== 298 /* SourceFile */ && !inAmbientExternalModule && !inAmbientNamespaceDeclaration) {
+                    if (node.parent.kind !== 300 /* SourceFile */ && !inAmbientExternalModule && !inAmbientNamespaceDeclaration) {
                         error(node, ts.Diagnostics.Export_declarations_are_not_permitted_in_a_namespace);
                     }
                 }
@@ -79829,14 +81330,14 @@
         }
         function checkGrammarExportDeclaration(node) {
             var _a;
-            var isTypeOnlyExportStar = node.isTypeOnly && ((_a = node.exportClause) === null || _a === void 0 ? void 0 : _a.kind) !== 269 /* NamedExports */;
+            var isTypeOnlyExportStar = node.isTypeOnly && ((_a = node.exportClause) === null || _a === void 0 ? void 0 : _a.kind) !== 271 /* NamedExports */;
             if (isTypeOnlyExportStar) {
                 grammarErrorOnNode(node, ts.Diagnostics.Only_named_exports_may_use_export_type);
             }
             return !isTypeOnlyExportStar;
         }
         function checkGrammarModuleElementContext(node, errorMessage) {
-            var isInAppropriateContext = node.parent.kind === 298 /* SourceFile */ || node.parent.kind === 258 /* ModuleBlock */ || node.parent.kind === 257 /* ModuleDeclaration */;
+            var isInAppropriateContext = node.parent.kind === 300 /* SourceFile */ || node.parent.kind === 260 /* ModuleBlock */ || node.parent.kind === 259 /* ModuleDeclaration */;
             if (!isInAppropriateContext) {
                 grammarErrorOnFirstToken(node, errorMessage);
             }
@@ -79914,8 +81415,8 @@
                 // If we hit an export assignment in an illegal context, just bail out to avoid cascading errors.
                 return;
             }
-            var container = node.parent.kind === 298 /* SourceFile */ ? node.parent : node.parent.parent;
-            if (container.kind === 257 /* ModuleDeclaration */ && !ts.isAmbientModule(container)) {
+            var container = node.parent.kind === 300 /* SourceFile */ ? node.parent : node.parent.parent;
+            if (container.kind === 259 /* ModuleDeclaration */ && !ts.isAmbientModule(container)) {
                 if (node.isExportEquals) {
                     error(node, ts.Diagnostics.An_export_assignment_cannot_be_used_in_a_namespace);
                 }
@@ -79928,7 +81429,7 @@
             if (!checkGrammarDecoratorsAndModifiers(node) && ts.hasEffectiveModifiers(node)) {
                 grammarErrorOnFirstToken(node, ts.Diagnostics.An_export_assignment_cannot_have_modifiers);
             }
-            if (node.expression.kind === 78 /* Identifier */) {
+            if (node.expression.kind === 79 /* Identifier */) {
                 var id = node.expression;
                 var sym = resolveEntityName(id, 67108863 /* All */, /*ignoreErrors*/ true, /*dontResolveAlias*/ true, node);
                 if (sym) {
@@ -80039,171 +81540,173 @@
                 // Only bother checking on a few construct kinds.  We don't want to be excessively
                 // hitting the cancellation token on every node we check.
                 switch (kind) {
-                    case 257 /* ModuleDeclaration */:
-                    case 253 /* ClassDeclaration */:
-                    case 254 /* InterfaceDeclaration */:
-                    case 252 /* FunctionDeclaration */:
+                    case 259 /* ModuleDeclaration */:
+                    case 255 /* ClassDeclaration */:
+                    case 256 /* InterfaceDeclaration */:
+                    case 254 /* FunctionDeclaration */:
                         cancellationToken.throwIfCancellationRequested();
                 }
             }
-            if (kind >= 233 /* FirstStatement */ && kind <= 249 /* LastStatement */ && node.flowNode && !isReachableFlowNode(node.flowNode)) {
+            if (kind >= 235 /* FirstStatement */ && kind <= 251 /* LastStatement */ && node.flowNode && !isReachableFlowNode(node.flowNode)) {
                 errorOrSuggestion(compilerOptions.allowUnreachableCode === false, node, ts.Diagnostics.Unreachable_code_detected);
             }
             switch (kind) {
-                case 160 /* TypeParameter */:
+                case 161 /* TypeParameter */:
                     return checkTypeParameter(node);
-                case 161 /* Parameter */:
+                case 162 /* Parameter */:
                     return checkParameter(node);
-                case 164 /* PropertyDeclaration */:
+                case 165 /* PropertyDeclaration */:
                     return checkPropertyDeclaration(node);
-                case 163 /* PropertySignature */:
+                case 164 /* PropertySignature */:
                     return checkPropertySignature(node);
-                case 176 /* ConstructorType */:
-                case 175 /* FunctionType */:
-                case 170 /* CallSignature */:
-                case 171 /* ConstructSignature */:
-                case 172 /* IndexSignature */:
+                case 178 /* ConstructorType */:
+                case 177 /* FunctionType */:
+                case 172 /* CallSignature */:
+                case 173 /* ConstructSignature */:
+                case 174 /* IndexSignature */:
                     return checkSignatureDeclaration(node);
-                case 166 /* MethodDeclaration */:
-                case 165 /* MethodSignature */:
+                case 167 /* MethodDeclaration */:
+                case 166 /* MethodSignature */:
                     return checkMethodDeclaration(node);
-                case 167 /* Constructor */:
+                case 168 /* ClassStaticBlockDeclaration */:
+                    return checkClassStaticBlockDeclaration(node);
+                case 169 /* Constructor */:
                     return checkConstructorDeclaration(node);
-                case 168 /* GetAccessor */:
-                case 169 /* SetAccessor */:
+                case 170 /* GetAccessor */:
+                case 171 /* SetAccessor */:
                     return checkAccessorDeclaration(node);
-                case 174 /* TypeReference */:
+                case 176 /* TypeReference */:
                     return checkTypeReferenceNode(node);
-                case 173 /* TypePredicate */:
+                case 175 /* TypePredicate */:
                     return checkTypePredicate(node);
-                case 177 /* TypeQuery */:
+                case 179 /* TypeQuery */:
                     return checkTypeQuery(node);
-                case 178 /* TypeLiteral */:
+                case 180 /* TypeLiteral */:
                     return checkTypeLiteral(node);
-                case 179 /* ArrayType */:
+                case 181 /* ArrayType */:
                     return checkArrayType(node);
-                case 180 /* TupleType */:
+                case 182 /* TupleType */:
                     return checkTupleType(node);
-                case 183 /* UnionType */:
-                case 184 /* IntersectionType */:
+                case 185 /* UnionType */:
+                case 186 /* IntersectionType */:
                     return checkUnionOrIntersectionType(node);
-                case 187 /* ParenthesizedType */:
-                case 181 /* OptionalType */:
-                case 182 /* RestType */:
+                case 189 /* ParenthesizedType */:
+                case 183 /* OptionalType */:
+                case 184 /* RestType */:
                     return checkSourceElement(node.type);
-                case 188 /* ThisType */:
+                case 190 /* ThisType */:
                     return checkThisType(node);
-                case 189 /* TypeOperator */:
+                case 191 /* TypeOperator */:
                     return checkTypeOperator(node);
-                case 185 /* ConditionalType */:
+                case 187 /* ConditionalType */:
                     return checkConditionalType(node);
-                case 186 /* InferType */:
+                case 188 /* InferType */:
                     return checkInferType(node);
-                case 194 /* TemplateLiteralType */:
+                case 196 /* TemplateLiteralType */:
                     return checkTemplateLiteralType(node);
-                case 196 /* ImportType */:
+                case 198 /* ImportType */:
                     return checkImportType(node);
-                case 193 /* NamedTupleMember */:
+                case 195 /* NamedTupleMember */:
                     return checkNamedTupleMember(node);
-                case 318 /* JSDocAugmentsTag */:
+                case 323 /* JSDocAugmentsTag */:
                     return checkJSDocAugmentsTag(node);
-                case 319 /* JSDocImplementsTag */:
+                case 324 /* JSDocImplementsTag */:
                     return checkJSDocImplementsTag(node);
-                case 335 /* JSDocTypedefTag */:
-                case 328 /* JSDocCallbackTag */:
-                case 329 /* JSDocEnumTag */:
+                case 340 /* JSDocTypedefTag */:
+                case 333 /* JSDocCallbackTag */:
+                case 334 /* JSDocEnumTag */:
                     return checkJSDocTypeAliasTag(node);
-                case 334 /* JSDocTemplateTag */:
+                case 339 /* JSDocTemplateTag */:
                     return checkJSDocTemplateTag(node);
-                case 333 /* JSDocTypeTag */:
+                case 338 /* JSDocTypeTag */:
                     return checkJSDocTypeTag(node);
-                case 330 /* JSDocParameterTag */:
+                case 335 /* JSDocParameterTag */:
                     return checkJSDocParameterTag(node);
-                case 337 /* JSDocPropertyTag */:
+                case 342 /* JSDocPropertyTag */:
                     return checkJSDocPropertyTag(node);
-                case 309 /* JSDocFunctionType */:
+                case 312 /* JSDocFunctionType */:
                     checkJSDocFunctionType(node);
                 // falls through
-                case 307 /* JSDocNonNullableType */:
-                case 306 /* JSDocNullableType */:
-                case 304 /* JSDocAllType */:
-                case 305 /* JSDocUnknownType */:
-                case 314 /* JSDocTypeLiteral */:
+                case 310 /* JSDocNonNullableType */:
+                case 309 /* JSDocNullableType */:
+                case 307 /* JSDocAllType */:
+                case 308 /* JSDocUnknownType */:
+                case 317 /* JSDocTypeLiteral */:
                     checkJSDocTypeIsInJsFile(node);
                     ts.forEachChild(node, checkSourceElement);
                     return;
-                case 310 /* JSDocVariadicType */:
+                case 313 /* JSDocVariadicType */:
                     checkJSDocVariadicType(node);
                     return;
-                case 302 /* JSDocTypeExpression */:
+                case 304 /* JSDocTypeExpression */:
                     return checkSourceElement(node.type);
-                case 190 /* IndexedAccessType */:
+                case 192 /* IndexedAccessType */:
                     return checkIndexedAccessType(node);
-                case 191 /* MappedType */:
+                case 193 /* MappedType */:
                     return checkMappedType(node);
-                case 252 /* FunctionDeclaration */:
+                case 254 /* FunctionDeclaration */:
                     return checkFunctionDeclaration(node);
-                case 231 /* Block */:
-                case 258 /* ModuleBlock */:
+                case 233 /* Block */:
+                case 260 /* ModuleBlock */:
                     return checkBlock(node);
-                case 233 /* VariableStatement */:
+                case 235 /* VariableStatement */:
                     return checkVariableStatement(node);
-                case 234 /* ExpressionStatement */:
+                case 236 /* ExpressionStatement */:
                     return checkExpressionStatement(node);
-                case 235 /* IfStatement */:
+                case 237 /* IfStatement */:
                     return checkIfStatement(node);
-                case 236 /* DoStatement */:
+                case 238 /* DoStatement */:
                     return checkDoStatement(node);
-                case 237 /* WhileStatement */:
+                case 239 /* WhileStatement */:
                     return checkWhileStatement(node);
-                case 238 /* ForStatement */:
+                case 240 /* ForStatement */:
                     return checkForStatement(node);
-                case 239 /* ForInStatement */:
+                case 241 /* ForInStatement */:
                     return checkForInStatement(node);
-                case 240 /* ForOfStatement */:
+                case 242 /* ForOfStatement */:
                     return checkForOfStatement(node);
-                case 241 /* ContinueStatement */:
-                case 242 /* BreakStatement */:
+                case 243 /* ContinueStatement */:
+                case 244 /* BreakStatement */:
                     return checkBreakOrContinueStatement(node);
-                case 243 /* ReturnStatement */:
+                case 245 /* ReturnStatement */:
                     return checkReturnStatement(node);
-                case 244 /* WithStatement */:
+                case 246 /* WithStatement */:
                     return checkWithStatement(node);
-                case 245 /* SwitchStatement */:
+                case 247 /* SwitchStatement */:
                     return checkSwitchStatement(node);
-                case 246 /* LabeledStatement */:
+                case 248 /* LabeledStatement */:
                     return checkLabeledStatement(node);
-                case 247 /* ThrowStatement */:
+                case 249 /* ThrowStatement */:
                     return checkThrowStatement(node);
-                case 248 /* TryStatement */:
+                case 250 /* TryStatement */:
                     return checkTryStatement(node);
-                case 250 /* VariableDeclaration */:
+                case 252 /* VariableDeclaration */:
                     return checkVariableDeclaration(node);
-                case 199 /* BindingElement */:
+                case 201 /* BindingElement */:
                     return checkBindingElement(node);
-                case 253 /* ClassDeclaration */:
+                case 255 /* ClassDeclaration */:
                     return checkClassDeclaration(node);
-                case 254 /* InterfaceDeclaration */:
+                case 256 /* InterfaceDeclaration */:
                     return checkInterfaceDeclaration(node);
-                case 255 /* TypeAliasDeclaration */:
+                case 257 /* TypeAliasDeclaration */:
                     return checkTypeAliasDeclaration(node);
-                case 256 /* EnumDeclaration */:
+                case 258 /* EnumDeclaration */:
                     return checkEnumDeclaration(node);
-                case 257 /* ModuleDeclaration */:
+                case 259 /* ModuleDeclaration */:
                     return checkModuleDeclaration(node);
-                case 262 /* ImportDeclaration */:
+                case 264 /* ImportDeclaration */:
                     return checkImportDeclaration(node);
-                case 261 /* ImportEqualsDeclaration */:
+                case 263 /* ImportEqualsDeclaration */:
                     return checkImportEqualsDeclaration(node);
-                case 268 /* ExportDeclaration */:
+                case 270 /* ExportDeclaration */:
                     return checkExportDeclaration(node);
-                case 267 /* ExportAssignment */:
+                case 269 /* ExportAssignment */:
                     return checkExportAssignment(node);
-                case 232 /* EmptyStatement */:
-                case 249 /* DebuggerStatement */:
+                case 234 /* EmptyStatement */:
+                case 251 /* DebuggerStatement */:
                     checkGrammarStatementInAmbientContext(node);
                     return;
-                case 272 /* MissingDeclaration */:
+                case 274 /* MissingDeclaration */:
                     return checkMissingDeclaration(node);
             }
         }
@@ -80302,33 +81805,33 @@
             currentNode = node;
             instantiationCount = 0;
             switch (node.kind) {
-                case 204 /* CallExpression */:
-                case 205 /* NewExpression */:
-                case 206 /* TaggedTemplateExpression */:
-                case 162 /* Decorator */:
-                case 276 /* JsxOpeningElement */:
+                case 206 /* CallExpression */:
+                case 207 /* NewExpression */:
+                case 208 /* TaggedTemplateExpression */:
+                case 163 /* Decorator */:
+                case 278 /* JsxOpeningElement */:
                     // These node kinds are deferred checked when overload resolution fails
                     // To save on work, we ensure the arguments are checked just once, in
                     // a deferred way
                     resolveUntypedCall(node);
                     break;
-                case 209 /* FunctionExpression */:
-                case 210 /* ArrowFunction */:
-                case 166 /* MethodDeclaration */:
-                case 165 /* MethodSignature */:
+                case 211 /* FunctionExpression */:
+                case 212 /* ArrowFunction */:
+                case 167 /* MethodDeclaration */:
+                case 166 /* MethodSignature */:
                     checkFunctionExpressionOrObjectLiteralMethodDeferred(node);
                     break;
-                case 168 /* GetAccessor */:
-                case 169 /* SetAccessor */:
+                case 170 /* GetAccessor */:
+                case 171 /* SetAccessor */:
                     checkAccessorDeclaration(node);
                     break;
-                case 222 /* ClassExpression */:
+                case 224 /* ClassExpression */:
                     checkClassExpressionDeferred(node);
                     break;
-                case 275 /* JsxSelfClosingElement */:
+                case 277 /* JsxSelfClosingElement */:
                     checkJsxSelfClosingElementDeferred(node);
                     break;
-                case 274 /* JsxElement */:
+                case 276 /* JsxElement */:
                     checkJsxElementDeferred(node);
                     break;
             }
@@ -80371,6 +81874,7 @@
                 ts.clear(potentialThisCollisions);
                 ts.clear(potentialNewTargetCollisions);
                 ts.clear(potentialWeakMapSetCollisions);
+                ts.clear(potentialReflectCollisions);
                 ts.forEach(node.statements, checkSourceElement);
                 checkSourceElement(node.endOfFileToken);
                 checkDeferredNodes(node);
@@ -80404,6 +81908,10 @@
                     ts.forEach(potentialWeakMapSetCollisions, checkWeakMapSetCollision);
                     ts.clear(potentialWeakMapSetCollisions);
                 }
+                if (potentialReflectCollisions.length) {
+                    ts.forEach(potentialReflectCollisions, checkReflectCollision);
+                    ts.clear(potentialReflectCollisions);
+                }
                 links.flags |= 1 /* TypeChecked */;
             }
         }
@@ -80464,7 +81972,7 @@
                 return [];
             }
             var symbols = ts.createSymbolTable();
-            var isStatic = false;
+            var isStaticSymbol = false;
             populateSymbols();
             symbols.delete("this" /* This */); // Not a symbol, a keyword
             return symbolsToArray(symbols);
@@ -80474,17 +81982,17 @@
                         copySymbols(location.locals, meaning);
                     }
                     switch (location.kind) {
-                        case 298 /* SourceFile */:
+                        case 300 /* SourceFile */:
                             if (!ts.isExternalModule(location))
                                 break;
                         // falls through
-                        case 257 /* ModuleDeclaration */:
+                        case 259 /* ModuleDeclaration */:
                             copyLocallyVisibleExportSymbols(getSymbolOfNode(location).exports, meaning & 2623475 /* ModuleMember */);
                             break;
-                        case 256 /* EnumDeclaration */:
+                        case 258 /* EnumDeclaration */:
                             copySymbols(getSymbolOfNode(location).exports, meaning & 8 /* EnumMember */);
                             break;
-                        case 222 /* ClassExpression */:
+                        case 224 /* ClassExpression */:
                             var className = location.name;
                             if (className) {
                                 copySymbol(location.symbol, meaning);
@@ -80492,17 +82000,17 @@
                         // this fall-through is necessary because we would like to handle
                         // type parameter inside class expression similar to how we handle it in classDeclaration and interface Declaration.
                         // falls through
-                        case 253 /* ClassDeclaration */:
-                        case 254 /* InterfaceDeclaration */:
+                        case 255 /* ClassDeclaration */:
+                        case 256 /* InterfaceDeclaration */:
                             // If we didn't come from static member of class or interface,
                             // add the type parameters into the symbol table
                             // (type parameters of classDeclaration/classExpression and interface are in member property of the symbol.
                             // Note: that the memberFlags come from previous iteration.
-                            if (!isStatic) {
+                            if (!isStaticSymbol) {
                                 copySymbols(getMembersOfSymbol(getSymbolOfNode(location)), meaning & 788968 /* Type */);
                             }
                             break;
-                        case 209 /* FunctionExpression */:
+                        case 211 /* FunctionExpression */:
                             var funcName = location.name;
                             if (funcName) {
                                 copySymbol(location.symbol, meaning);
@@ -80512,7 +82020,7 @@
                     if (ts.introducesArgumentsExoticObject(location)) {
                         copySymbol(argumentsSymbol, meaning);
                     }
-                    isStatic = ts.hasSyntacticModifier(location, 32 /* Static */);
+                    isStaticSymbol = ts.isStatic(location);
                     location = location.parent;
                 }
                 copySymbols(globals, meaning);
@@ -80546,7 +82054,7 @@
                 if (meaning) {
                     source.forEach(function (symbol) {
                         // Similar condition as in `resolveNameHelper`
-                        if (!ts.getDeclarationOfKind(symbol, 271 /* ExportSpecifier */) && !ts.getDeclarationOfKind(symbol, 270 /* NamespaceExport */)) {
+                        if (!ts.getDeclarationOfKind(symbol, 273 /* ExportSpecifier */) && !ts.getDeclarationOfKind(symbol, 272 /* NamespaceExport */)) {
                             copySymbol(symbol, meaning);
                         }
                     });
@@ -80554,25 +82062,25 @@
             }
         }
         function isTypeDeclarationName(name) {
-            return name.kind === 78 /* Identifier */ &&
+            return name.kind === 79 /* Identifier */ &&
                 isTypeDeclaration(name.parent) &&
                 ts.getNameOfDeclaration(name.parent) === name;
         }
         function isTypeDeclaration(node) {
             switch (node.kind) {
-                case 160 /* TypeParameter */:
-                case 253 /* ClassDeclaration */:
-                case 254 /* InterfaceDeclaration */:
-                case 255 /* TypeAliasDeclaration */:
-                case 256 /* EnumDeclaration */:
-                case 335 /* JSDocTypedefTag */:
-                case 328 /* JSDocCallbackTag */:
-                case 329 /* JSDocEnumTag */:
+                case 161 /* TypeParameter */:
+                case 255 /* ClassDeclaration */:
+                case 256 /* InterfaceDeclaration */:
+                case 257 /* TypeAliasDeclaration */:
+                case 258 /* EnumDeclaration */:
+                case 340 /* JSDocTypedefTag */:
+                case 333 /* JSDocCallbackTag */:
+                case 334 /* JSDocEnumTag */:
                     return true;
-                case 263 /* ImportClause */:
+                case 265 /* ImportClause */:
                     return node.isTypeOnly;
-                case 266 /* ImportSpecifier */:
-                case 271 /* ExportSpecifier */:
+                case 268 /* ImportSpecifier */:
+                case 273 /* ExportSpecifier */:
                     return node.parent.parent.isTypeOnly;
                 default:
                     return false;
@@ -80580,25 +82088,16 @@
         }
         // True if the given identifier is part of a type reference
         function isTypeReferenceIdentifier(node) {
-            while (node.parent.kind === 158 /* QualifiedName */) {
+            while (node.parent.kind === 159 /* QualifiedName */) {
                 node = node.parent;
             }
-            return node.parent.kind === 174 /* TypeReference */;
+            return node.parent.kind === 176 /* TypeReference */;
         }
         function isHeritageClauseElementIdentifier(node) {
-            while (node.parent.kind === 202 /* PropertyAccessExpression */) {
+            while (node.parent.kind === 204 /* PropertyAccessExpression */) {
                 node = node.parent;
             }
-            return node.parent.kind === 224 /* ExpressionWithTypeArguments */;
-        }
-        function getJSDocEntryNameReference(node) {
-            while (node.parent.kind === 158 /* QualifiedName */) {
-                node = node.parent;
-            }
-            while (node.parent.kind === 202 /* PropertyAccessExpression */) {
-                node = node.parent;
-            }
-            return ts.isJSDocNameReference(node.parent) ? node.parent : undefined;
+            return node.parent.kind === 226 /* ExpressionWithTypeArguments */;
         }
         function forEachEnclosingClass(node, callback) {
             var result;
@@ -80626,13 +82125,13 @@
             return !!forEachEnclosingClass(node, function (n) { return n === classDeclaration; });
         }
         function getLeftSideOfImportEqualsOrExportAssignment(nodeOnRightSide) {
-            while (nodeOnRightSide.parent.kind === 158 /* QualifiedName */) {
+            while (nodeOnRightSide.parent.kind === 159 /* QualifiedName */) {
                 nodeOnRightSide = nodeOnRightSide.parent;
             }
-            if (nodeOnRightSide.parent.kind === 261 /* ImportEqualsDeclaration */) {
+            if (nodeOnRightSide.parent.kind === 263 /* ImportEqualsDeclaration */) {
                 return nodeOnRightSide.parent.moduleReference === nodeOnRightSide ? nodeOnRightSide.parent : undefined;
             }
-            if (nodeOnRightSide.parent.kind === 267 /* ExportAssignment */) {
+            if (nodeOnRightSide.parent.kind === 269 /* ExportAssignment */) {
                 return nodeOnRightSide.parent.expression === nodeOnRightSide ? nodeOnRightSide.parent : undefined;
             }
             return undefined;
@@ -80658,7 +82157,7 @@
                 node = parent;
                 parent = parent.parent;
             }
-            if (parent && parent.kind === 196 /* ImportType */ && parent.qualifier === node) {
+            if (parent && parent.kind === 198 /* ImportType */ && parent.qualifier === node) {
                 return parent;
             }
             return undefined;
@@ -80668,17 +82167,17 @@
                 return getSymbolOfNode(name.parent);
             }
             if (ts.isInJSFile(name) &&
-                name.parent.kind === 202 /* PropertyAccessExpression */ &&
+                name.parent.kind === 204 /* PropertyAccessExpression */ &&
                 name.parent === name.parent.parent.left) {
                 // Check if this is a special property assignment
-                if (!ts.isPrivateIdentifier(name)) {
+                if (!ts.isPrivateIdentifier(name) && !ts.isJSDocMemberName(name)) {
                     var specialPropertyAssignmentSymbol = getSpecialPropertyAssignmentSymbolFromEntityName(name);
                     if (specialPropertyAssignmentSymbol) {
                         return specialPropertyAssignmentSymbol;
                     }
                 }
             }
-            if (name.parent.kind === 267 /* ExportAssignment */ && ts.isEntityNameExpression(name)) {
+            if (name.parent.kind === 269 /* ExportAssignment */ && ts.isEntityNameExpression(name)) {
                 // Even an entity name expression that doesn't resolve as an entityname may still typecheck as a property access expression
                 var success = resolveEntityName(name, 
                 /*all meanings*/ 111551 /* Value */ | 788968 /* Type */ | 1920 /* Namespace */ | 2097152 /* Alias */, /*ignoreErrors*/ true);
@@ -80686,13 +82185,13 @@
                     return success;
                 }
             }
-            else if (!ts.isPropertyAccessExpression(name) && !ts.isPrivateIdentifier(name) && isInRightSideOfImportOrExportAssignment(name)) {
+            else if (ts.isEntityName(name) && isInRightSideOfImportOrExportAssignment(name)) {
                 // Since we already checked for ExportAssignment, this really could only be an Import
-                var importEqualsDeclaration = ts.getAncestor(name, 261 /* ImportEqualsDeclaration */);
+                var importEqualsDeclaration = ts.getAncestor(name, 263 /* ImportEqualsDeclaration */);
                 ts.Debug.assert(importEqualsDeclaration !== undefined);
                 return getSymbolOfPartOfRightHandSideOfImportEquals(name, /*dontResolveAlias*/ true);
             }
-            if (!ts.isPropertyAccessExpression(name) && !ts.isPrivateIdentifier(name)) {
+            if (ts.isEntityName(name)) {
                 var possibleImportNode = isImportTypeQualifierPart(name);
                 if (possibleImportNode) {
                     getTypeFromTypeNode(possibleImportNode);
@@ -80700,13 +82199,13 @@
                     return sym === unknownSymbol ? undefined : sym;
                 }
             }
-            while (ts.isRightSideOfQualifiedNameOrPropertyAccess(name)) {
+            while (ts.isRightSideOfQualifiedNameOrPropertyAccessOrJSDocMemberName(name)) {
                 name = name.parent;
             }
             if (isHeritageClauseElementIdentifier(name)) {
                 var meaning = 0 /* None */;
                 // In an interface or class, we're definitely interested in a type.
-                if (name.parent.kind === 224 /* ExpressionWithTypeArguments */) {
+                if (name.parent.kind === 226 /* ExpressionWithTypeArguments */) {
                     meaning = 788968 /* Type */;
                     // In a class 'extends' clause we are also looking for a value.
                     if (ts.isExpressionWithTypeArgumentsInClassExtendsClause(name.parent)) {
@@ -80722,10 +82221,10 @@
                     return entityNameSymbol;
                 }
             }
-            if (name.parent.kind === 330 /* JSDocParameterTag */) {
+            if (name.parent.kind === 335 /* JSDocParameterTag */) {
                 return ts.getParameterSymbolFromJSDoc(name.parent);
             }
-            if (name.parent.kind === 160 /* TypeParameter */ && name.parent.parent.kind === 334 /* JSDocTemplateTag */) {
+            if (name.parent.kind === 161 /* TypeParameter */ && name.parent.parent.kind === 339 /* JSDocTemplateTag */) {
                 ts.Debug.assert(!ts.isInJSFile(name)); // Otherwise `isDeclarationName` would have been true.
                 var typeParameter = ts.getTypeParameterFromJsDoc(name.parent);
                 return typeParameter && typeParameter.symbol;
@@ -80735,63 +82234,81 @@
                     // Missing entity name.
                     return undefined;
                 }
-                if (name.kind === 78 /* Identifier */) {
+                var isJSDoc_1 = ts.findAncestor(name, ts.or(ts.isJSDocLinkLike, ts.isJSDocNameReference, ts.isJSDocMemberName));
+                var meaning = isJSDoc_1 ? 788968 /* Type */ | 1920 /* Namespace */ | 111551 /* Value */ : 111551 /* Value */;
+                if (name.kind === 79 /* Identifier */) {
                     if (ts.isJSXTagName(name) && isJsxIntrinsicIdentifier(name)) {
                         var symbol = getIntrinsicTagSymbol(name.parent);
                         return symbol === unknownSymbol ? undefined : symbol;
                     }
-                    return resolveEntityName(name, 111551 /* Value */, /*ignoreErrors*/ false, /*dontResolveAlias*/ true);
+                    var result = resolveEntityName(name, meaning, /*ignoreErrors*/ false, /*dontResolveAlias*/ !isJSDoc_1, ts.getHostSignatureFromJSDoc(name));
+                    if (!result && isJSDoc_1) {
+                        var container = ts.findAncestor(name, ts.or(ts.isClassLike, ts.isInterfaceDeclaration));
+                        if (container) {
+                            return resolveJSDocMemberName(name, getSymbolOfNode(container));
+                        }
+                    }
+                    return result;
                 }
-                else if (name.kind === 202 /* PropertyAccessExpression */ || name.kind === 158 /* QualifiedName */) {
+                else if (name.kind === 204 /* PropertyAccessExpression */ || name.kind === 159 /* QualifiedName */) {
                     var links = getNodeLinks(name);
                     if (links.resolvedSymbol) {
                         return links.resolvedSymbol;
                     }
-                    if (name.kind === 202 /* PropertyAccessExpression */) {
+                    if (name.kind === 204 /* PropertyAccessExpression */) {
                         checkPropertyAccessExpression(name, 0 /* Normal */);
                     }
                     else {
                         checkQualifiedName(name, 0 /* Normal */);
                     }
+                    if (!links.resolvedSymbol && isJSDoc_1 && ts.isQualifiedName(name)) {
+                        return resolveJSDocMemberName(name);
+                    }
                     return links.resolvedSymbol;
                 }
+                else if (ts.isJSDocMemberName(name)) {
+                    return resolveJSDocMemberName(name);
+                }
             }
             else if (isTypeReferenceIdentifier(name)) {
-                var meaning = name.parent.kind === 174 /* TypeReference */ ? 788968 /* Type */ : 1920 /* Namespace */;
+                var meaning = name.parent.kind === 176 /* TypeReference */ ? 788968 /* Type */ : 1920 /* Namespace */;
                 return resolveEntityName(name, meaning, /*ignoreErrors*/ false, /*dontResolveAlias*/ true);
             }
-            var jsdocReference = getJSDocEntryNameReference(name);
-            if (jsdocReference || ts.isJSDocLink(name.parent)) {
-                var meaning = 788968 /* Type */ | 1920 /* Namespace */ | 111551 /* Value */;
-                var symbol = resolveEntityName(name, meaning, /*ignoreErrors*/ false, /*dontResolveAlias*/ false, ts.getHostSignatureFromJSDoc(name));
-                if (symbol) {
-                    return symbol;
-                }
-                else if (ts.isQualifiedName(name) && ts.isIdentifier(name.left)) {
-                    // resolve C.m as a static member first
-                    var links = getNodeLinks(name);
-                    if (links.resolvedSymbol) {
-                        return links.resolvedSymbol;
-                    }
-                    checkQualifiedName(name, 0 /* Normal */);
-                    if (links.resolvedSymbol) {
-                        return links.resolvedSymbol;
-                    }
-                    // then resolve it as an instance member
-                    var s = resolveEntityName(name.left, meaning, /*ignoreErrors*/ false);
-                    if (s) {
-                        var t = getDeclaredTypeOfSymbol(s);
-                        return getPropertyOfType(t, name.right.escapedText);
-                    }
-                }
-            }
-            if (name.parent.kind === 173 /* TypePredicate */) {
+            if (name.parent.kind === 175 /* TypePredicate */) {
                 return resolveEntityName(name, /*meaning*/ 1 /* FunctionScopedVariable */);
             }
             return undefined;
         }
+        /**
+         * Recursively resolve entity names and jsdoc instance references:
+         * 1. K#m as K.prototype.m for a class (or other value) K
+         * 2. K.m as K.prototype.m
+         * 3. I.m as I.m for a type I, or any other I.m that fails to resolve in (1) or (2)
+         *
+         * For unqualified names, a container K may be provided as a second argument.
+         */
+        function resolveJSDocMemberName(name, container) {
+            if (ts.isEntityName(name)) {
+                // resolve static values first
+                var meaning = 788968 /* Type */ | 1920 /* Namespace */ | 111551 /* Value */;
+                var symbol = resolveEntityName(name, meaning, /*ignoreErrors*/ false, /*dontResolveAlias*/ true, ts.getHostSignatureFromJSDoc(name));
+                if (!symbol && ts.isIdentifier(name) && container) {
+                    symbol = getMergedSymbol(getSymbol(getExportsOfSymbol(container), name.escapedText, meaning));
+                }
+                if (symbol) {
+                    return symbol;
+                }
+            }
+            var left = ts.isIdentifier(name) ? container : resolveJSDocMemberName(name.left);
+            var right = ts.isIdentifier(name) ? name.escapedText : name.right.escapedText;
+            if (left) {
+                var proto = left.flags & 111551 /* Value */ && getPropertyOfType(getTypeOfSymbol(left), "prototype");
+                var t = proto ? getTypeOfSymbol(proto) : getDeclaredTypeOfSymbol(left);
+                return getPropertyOfType(t, right);
+            }
+        }
         function getSymbolAtLocation(node, ignoreErrors) {
-            if (node.kind === 298 /* SourceFile */) {
+            if (node.kind === 300 /* SourceFile */) {
                 return ts.isExternalModule(node) ? getMergedSymbol(node.symbol) : undefined;
             }
             var parent = node.parent;
@@ -80810,12 +82327,12 @@
             else if (ts.isLiteralComputedPropertyDeclarationName(node)) {
                 return getSymbolOfNode(parent.parent);
             }
-            if (node.kind === 78 /* Identifier */) {
+            if (node.kind === 79 /* Identifier */) {
                 if (isInRightSideOfImportOrExportAssignment(node)) {
                     return getSymbolOfNameOrPropertyAccessExpression(node);
                 }
-                else if (parent.kind === 199 /* BindingElement */ &&
-                    grandParent.kind === 197 /* ObjectBindingPattern */ &&
+                else if (parent.kind === 201 /* BindingElement */ &&
+                    grandParent.kind === 199 /* ObjectBindingPattern */ &&
                     node === parent.propertyName) {
                     var typeOfPattern = getTypeOfNode(grandParent);
                     var propertyDeclaration = getPropertyOfType(typeOfPattern, node.escapedText);
@@ -80823,14 +82340,24 @@
                         return propertyDeclaration;
                     }
                 }
+                else if (ts.isMetaProperty(parent)) {
+                    var parentType = getTypeOfNode(parent);
+                    var propertyDeclaration = getPropertyOfType(parentType, node.escapedText);
+                    if (propertyDeclaration) {
+                        return propertyDeclaration;
+                    }
+                    if (parent.keywordToken === 103 /* NewKeyword */) {
+                        return checkNewTargetMetaProperty(parent).symbol;
+                    }
+                }
             }
             switch (node.kind) {
-                case 78 /* Identifier */:
-                case 79 /* PrivateIdentifier */:
-                case 202 /* PropertyAccessExpression */:
-                case 158 /* QualifiedName */:
+                case 79 /* Identifier */:
+                case 80 /* PrivateIdentifier */:
+                case 204 /* PropertyAccessExpression */:
+                case 159 /* QualifiedName */:
                     return getSymbolOfNameOrPropertyAccessExpression(node);
-                case 107 /* ThisKeyword */:
+                case 108 /* ThisKeyword */:
                     var container = ts.getThisContainer(node, /*includeArrowFunctions*/ false);
                     if (ts.isFunctionLike(container)) {
                         var sig = getSignatureFromDeclaration(container);
@@ -80842,14 +82369,14 @@
                         return checkExpression(node).symbol;
                     }
                 // falls through
-                case 188 /* ThisType */:
+                case 190 /* ThisType */:
                     return getTypeFromThisTypeNode(node).symbol;
-                case 105 /* SuperKeyword */:
+                case 106 /* SuperKeyword */:
                     return checkExpression(node).symbol;
-                case 132 /* ConstructorKeyword */:
+                case 133 /* ConstructorKeyword */:
                     // constructor keyword for an overload, should take us to the definition if it exist
                     var constructorDeclaration = node.parent;
-                    if (constructorDeclaration && constructorDeclaration.kind === 167 /* Constructor */) {
+                    if (constructorDeclaration && constructorDeclaration.kind === 169 /* Constructor */) {
                         return constructorDeclaration.parent.symbol;
                     }
                     return undefined;
@@ -80860,7 +82387,7 @@
                     // 3). Dynamic import call or require in javascript
                     // 4). type A = import("./f/*gotToDefinitionHere*/oo")
                     if ((ts.isExternalModuleImportEqualsDeclaration(node.parent.parent) && ts.getExternalModuleImportEqualsDeclarationExpression(node.parent.parent) === node) ||
-                        ((node.parent.kind === 262 /* ImportDeclaration */ || node.parent.kind === 268 /* ExportDeclaration */) && node.parent.moduleSpecifier === node) ||
+                        ((node.parent.kind === 264 /* ImportDeclaration */ || node.parent.kind === 270 /* ExportDeclaration */) && node.parent.moduleSpecifier === node) ||
                         ((ts.isInJSFile(node) && ts.isRequireCall(node.parent, /*checkArgumentIsStringLiteralLike*/ false)) || ts.isImportCall(node.parent)) ||
                         (ts.isLiteralTypeNode(node.parent) && ts.isLiteralImportTypeNode(node.parent.parent) && node.parent.parent.argument === node.parent)) {
                         return resolveExternalModuleName(node, node, ignoreErrors);
@@ -80877,21 +82404,35 @@
                             ? getTypeFromTypeNode(grandParent.objectType)
                             : undefined;
                     return objectType && getPropertyOfType(objectType, ts.escapeLeadingUnderscores(node.text));
-                case 87 /* DefaultKeyword */:
-                case 97 /* FunctionKeyword */:
+                case 88 /* DefaultKeyword */:
+                case 98 /* FunctionKeyword */:
                 case 38 /* EqualsGreaterThanToken */:
-                case 83 /* ClassKeyword */:
+                case 84 /* ClassKeyword */:
                     return getSymbolOfNode(node.parent);
-                case 196 /* ImportType */:
+                case 198 /* ImportType */:
                     return ts.isLiteralImportTypeNode(node) ? getSymbolAtLocation(node.argument.literal, ignoreErrors) : undefined;
-                case 92 /* ExportKeyword */:
+                case 93 /* ExportKeyword */:
                     return ts.isExportAssignment(node.parent) ? ts.Debug.checkDefined(node.parent.symbol) : undefined;
+                case 100 /* ImportKeyword */:
+                case 103 /* NewKeyword */:
+                    return ts.isMetaProperty(node.parent) ? checkMetaPropertyKeyword(node.parent).symbol : undefined;
+                case 229 /* MetaProperty */:
+                    return checkExpression(node).symbol;
                 default:
                     return undefined;
             }
         }
+        function getIndexInfosAtLocation(node) {
+            if (ts.isIdentifier(node) && ts.isPropertyAccessExpression(node.parent) && node.parent.name === node) {
+                var keyType_1 = getLiteralTypeFromPropertyName(node);
+                var objectType = getTypeOfExpression(node.parent.expression);
+                var objectTypes = objectType.flags & 1048576 /* Union */ ? objectType.types : [objectType];
+                return ts.flatMap(objectTypes, function (t) { return ts.filter(getIndexInfosOfType(t), function (info) { return isApplicableIndexType(keyType_1, info.keyType); }); });
+            }
+            return undefined;
+        }
         function getShorthandAssignmentValueSymbol(location) {
-            if (location && location.kind === 290 /* ShorthandPropertyAssignment */) {
+            if (location && location.kind === 292 /* ShorthandPropertyAssignment */) {
                 return resolveEntityName(location.name, 111551 /* Value */ | 2097152 /* Alias */);
             }
             return undefined;
@@ -80961,6 +82502,9 @@
                     return declaredType !== errorType ? declaredType : getTypeOfSymbol(symbol);
                 }
             }
+            if (ts.isMetaProperty(node.parent) && node.parent.keywordToken === node.kind) {
+                return checkMetaPropertyKeyword(node.parent);
+            }
             return errorType;
         }
         // Gets the type of object literal or array literal of destructuring assignment.
@@ -80970,23 +82514,23 @@
         // [ a ] from
         //     [a] = [ some array ...]
         function getTypeOfAssignmentPattern(expr) {
-            ts.Debug.assert(expr.kind === 201 /* ObjectLiteralExpression */ || expr.kind === 200 /* ArrayLiteralExpression */);
+            ts.Debug.assert(expr.kind === 203 /* ObjectLiteralExpression */ || expr.kind === 202 /* ArrayLiteralExpression */);
             // If this is from "for of"
             //     for ( { a } of elems) {
             //     }
-            if (expr.parent.kind === 240 /* ForOfStatement */) {
+            if (expr.parent.kind === 242 /* ForOfStatement */) {
                 var iteratedType = checkRightHandSideOfForOf(expr.parent);
                 return checkDestructuringAssignment(expr, iteratedType || errorType);
             }
             // If this is from "for" initializer
             //     for ({a } = elems[0];.....) { }
-            if (expr.parent.kind === 217 /* BinaryExpression */) {
+            if (expr.parent.kind === 219 /* BinaryExpression */) {
                 var iteratedType = getTypeOfExpression(expr.parent.right);
                 return checkDestructuringAssignment(expr, iteratedType || errorType);
             }
             // If this is from nested object binding pattern
             //     for ({ skills: { primary, secondary } } = multiRobot, i = 0; i < 1; i++) {
-            if (expr.parent.kind === 289 /* PropertyAssignment */) {
+            if (expr.parent.kind === 291 /* PropertyAssignment */) {
                 var node_3 = ts.cast(expr.parent.parent, ts.isObjectLiteralExpression);
                 var typeOfParentObjectLiteral = getTypeOfAssignmentPattern(node_3) || errorType;
                 var propertyIndex = ts.indexOfNode(node_3.properties, expr.parent);
@@ -81022,19 +82566,19 @@
          */
         function getParentTypeOfClassElement(node) {
             var classSymbol = getSymbolOfNode(node.parent);
-            return ts.hasSyntacticModifier(node, 32 /* Static */)
+            return ts.isStatic(node)
                 ? getTypeOfSymbol(classSymbol)
                 : getDeclaredTypeOfSymbol(classSymbol);
         }
         function getClassElementPropertyKeyType(element) {
             var name = element.name;
             switch (name.kind) {
-                case 78 /* Identifier */:
-                    return getLiteralType(ts.idText(name));
+                case 79 /* Identifier */:
+                    return getStringLiteralType(ts.idText(name));
                 case 8 /* NumericLiteral */:
                 case 10 /* StringLiteral */:
-                    return getLiteralType(name.text);
-                case 159 /* ComputedPropertyName */:
+                    return getStringLiteralType(name.text);
+                case 160 /* ComputedPropertyName */:
                     var nameType = checkComputedPropertyName(name);
                     return isTypeAssignableToKind(nameType, 12288 /* ESSymbolLike */) ? nameType : stringType;
                 default:
@@ -81152,7 +82696,7 @@
                     }
                     var parentSymbol_1 = getParentOfSymbol(symbol);
                     if (parentSymbol_1) {
-                        if (parentSymbol_1.flags & 512 /* ValueModule */ && ((_a = parentSymbol_1.valueDeclaration) === null || _a === void 0 ? void 0 : _a.kind) === 298 /* SourceFile */) {
+                        if (parentSymbol_1.flags & 512 /* ValueModule */ && ((_a = parentSymbol_1.valueDeclaration) === null || _a === void 0 ? void 0 : _a.kind) === 300 /* SourceFile */) {
                             var symbolFile = parentSymbol_1.valueDeclaration;
                             var referenceFile = ts.getSourceFileOfNode(node);
                             // If `node` accesses an export and that export isn't in the same file, then symbol is a namespace export, so return undefined.
@@ -81184,7 +82728,7 @@
         function isSymbolOfDestructuredElementOfCatchBinding(symbol) {
             return symbol.valueDeclaration
                 && ts.isBindingElement(symbol.valueDeclaration)
-                && ts.walkUpBindingElementsAndPatterns(symbol.valueDeclaration).parent.kind === 288 /* CatchClause */;
+                && ts.walkUpBindingElementsAndPatterns(symbol.valueDeclaration).parent.kind === 290 /* CatchClause */;
         }
         function isSymbolOfDeclarationWithCollidingName(symbol) {
             if (symbol.flags & 418 /* BlockScoped */ && symbol.valueDeclaration && !ts.isSourceFile(symbol.valueDeclaration)) {
@@ -81215,7 +82759,7 @@
                             //       they will not collide with anything
                             var isDeclaredInLoop = nodeLinks_1.flags & 524288 /* BlockScopedBindingInLoop */;
                             var inLoopInitializer = ts.isIterationStatement(container, /*lookInLabeledStatements*/ false);
-                            var inLoopBodyBlock = container.kind === 231 /* Block */ && ts.isIterationStatement(container.parent, /*lookInLabeledStatements*/ false);
+                            var inLoopBodyBlock = container.kind === 233 /* Block */ && ts.isIterationStatement(container.parent, /*lookInLabeledStatements*/ false);
                             links.isDeclarationWithCollidingName = !ts.isBlockScopedContainerTopLevel(container) && (!isDeclaredInLoop || (!inLoopInitializer && !inLoopBodyBlock));
                         }
                         else {
@@ -81256,20 +82800,20 @@
         }
         function isValueAliasDeclaration(node) {
             switch (node.kind) {
-                case 261 /* ImportEqualsDeclaration */:
+                case 263 /* ImportEqualsDeclaration */:
                     return isAliasResolvedToValue(getSymbolOfNode(node) || unknownSymbol);
-                case 263 /* ImportClause */:
-                case 264 /* NamespaceImport */:
-                case 266 /* ImportSpecifier */:
-                case 271 /* ExportSpecifier */:
+                case 265 /* ImportClause */:
+                case 266 /* NamespaceImport */:
+                case 268 /* ImportSpecifier */:
+                case 273 /* ExportSpecifier */:
                     var symbol = getSymbolOfNode(node) || unknownSymbol;
                     return isAliasResolvedToValue(symbol) && !getTypeOnlyAliasDeclaration(symbol);
-                case 268 /* ExportDeclaration */:
+                case 270 /* ExportDeclaration */:
                     var exportClause = node.exportClause;
                     return !!exportClause && (ts.isNamespaceExport(exportClause) ||
                         ts.some(exportClause.elements, isValueAliasDeclaration));
-                case 267 /* ExportAssignment */:
-                    return node.expression && node.expression.kind === 78 /* Identifier */ ?
+                case 269 /* ExportAssignment */:
+                    return node.expression && node.expression.kind === 79 /* Identifier */ ?
                         isAliasResolvedToValue(getSymbolOfNode(node) || unknownSymbol) :
                         true;
             }
@@ -81277,7 +82821,7 @@
         }
         function isTopLevelValueImportEqualsWithEntityName(nodeIn) {
             var node = ts.getParseTreeNode(nodeIn, ts.isImportEqualsDeclaration);
-            if (node === undefined || node.parent.kind !== 298 /* SourceFile */ || !ts.isInternalModuleImportEqualsDeclaration(node)) {
+            if (node === undefined || node.parent.kind !== 300 /* SourceFile */ || !ts.isInternalModuleImportEqualsDeclaration(node)) {
                 // parent is not source file or it is not reference to internal module
                 return false;
             }
@@ -81377,7 +82921,11 @@
             return symbol && getPropertiesOfType(getTypeOfSymbol(symbol)) || ts.emptyArray;
         }
         function getNodeCheckFlags(node) {
-            return getNodeLinks(node).flags || 0;
+            var _a;
+            var nodeId = node.id || 0;
+            if (nodeId < 0 || nodeId >= nodeLinks.length)
+                return 0;
+            return ((_a = nodeLinks[nodeId]) === null || _a === void 0 ? void 0 : _a.flags) || 0;
         }
         function getEnumMemberValue(node) {
             computeEnumMemberValues(node.parent);
@@ -81385,15 +82933,15 @@
         }
         function canHaveConstantValue(node) {
             switch (node.kind) {
-                case 292 /* EnumMember */:
-                case 202 /* PropertyAccessExpression */:
-                case 203 /* ElementAccessExpression */:
+                case 294 /* EnumMember */:
+                case 204 /* PropertyAccessExpression */:
+                case 205 /* ElementAccessExpression */:
                     return true;
             }
             return false;
         }
         function getConstantValue(node) {
-            if (node.kind === 292 /* EnumMember */) {
+            if (node.kind === 294 /* EnumMember */) {
                 return getEnumMemberValue(node);
             }
             var symbol = getNodeLinks(node).resolvedSymbol;
@@ -81410,7 +82958,7 @@
             return !!(type.flags & 524288 /* Object */) && getSignaturesOfType(type, 0 /* Call */).length > 0;
         }
         function getTypeReferenceSerializationKind(typeNameIn, location) {
-            var _a;
+            var _a, _b;
             // ensure both `typeName` and `location` are parse tree nodes.
             var typeName = ts.getParseTreeNode(typeNameIn, ts.isEntityName);
             if (!typeName)
@@ -81421,9 +82969,14 @@
                     return ts.TypeReferenceSerializationKind.Unknown;
             }
             // Resolve the symbol as a value to ensure the type can be reached at runtime during emit.
+            var isTypeOnly = false;
+            if (ts.isQualifiedName(typeName)) {
+                var rootValueSymbol = resolveEntityName(ts.getFirstIdentifier(typeName), 111551 /* Value */, /*ignoreErrors*/ true, /*dontResolveAlias*/ true, location);
+                isTypeOnly = !!((_a = rootValueSymbol === null || rootValueSymbol === void 0 ? void 0 : rootValueSymbol.declarations) === null || _a === void 0 ? void 0 : _a.every(ts.isTypeOnlyImportOrExportDeclaration));
+            }
             var valueSymbol = resolveEntityName(typeName, 111551 /* Value */, /*ignoreErrors*/ true, /*dontResolveAlias*/ true, location);
-            var isTypeOnly = ((_a = valueSymbol === null || valueSymbol === void 0 ? void 0 : valueSymbol.declarations) === null || _a === void 0 ? void 0 : _a.every(ts.isTypeOnlyImportOrExportDeclaration)) || false;
             var resolvedSymbol = valueSymbol && valueSymbol.flags & 2097152 /* Alias */ ? resolveAlias(valueSymbol) : valueSymbol;
+            isTypeOnly || (isTypeOnly = !!((_b = valueSymbol === null || valueSymbol === void 0 ? void 0 : valueSymbol.declarations) === null || _b === void 0 ? void 0 : _b.every(ts.isTypeOnlyImportOrExportDeclaration)));
             // Resolve the symbol as a type so that we can provide a more useful hint for the type serializer.
             var typeSymbol = resolveEntityName(typeName, 788968 /* Type */, /*ignoreErrors*/ true, /*dontResolveAlias*/ false, location);
             if (resolvedSymbol && resolvedSymbol === typeSymbol) {
@@ -81481,7 +83034,7 @@
         function createTypeOfDeclaration(declarationIn, enclosingDeclaration, flags, tracker, addUndefined) {
             var declaration = ts.getParseTreeNode(declarationIn, ts.isVariableLikeOrAccessor);
             if (!declaration) {
-                return ts.factory.createToken(128 /* AnyKeyword */);
+                return ts.factory.createToken(129 /* AnyKeyword */);
             }
             // Get type of the symbol if this is the valid symbol otherwise get type at location
             var symbol = getSymbolOfNode(declaration);
@@ -81500,7 +83053,7 @@
         function createReturnTypeOfSignatureDeclaration(signatureDeclarationIn, enclosingDeclaration, flags, tracker) {
             var signatureDeclaration = ts.getParseTreeNode(signatureDeclarationIn, ts.isFunctionLike);
             if (!signatureDeclaration) {
-                return ts.factory.createToken(128 /* AnyKeyword */);
+                return ts.factory.createToken(129 /* AnyKeyword */);
             }
             var signature = getSignatureFromDeclaration(signatureDeclaration);
             return nodeBuilder.typeToTypeNode(getReturnTypeOfSignature(signature), enclosingDeclaration, flags | 1024 /* MultilineObjectLiterals */, tracker);
@@ -81508,7 +83061,7 @@
         function createTypeOfExpression(exprIn, enclosingDeclaration, flags, tracker) {
             var expr = ts.getParseTreeNode(exprIn, ts.isExpression);
             if (!expr) {
-                return ts.factory.createToken(128 /* AnyKeyword */);
+                return ts.factory.createToken(129 /* AnyKeyword */);
             }
             var type = getWidenedType(getRegularTypeOfExpression(expr));
             return nodeBuilder.typeToTypeNode(type, enclosingDeclaration, flags | 1024 /* MultilineObjectLiterals */, tracker);
@@ -81665,12 +83218,12 @@
                 getJsxFragmentFactoryEntity: getJsxFragmentFactoryEntity,
                 getAllAccessorDeclarations: function (accessor) {
                     accessor = ts.getParseTreeNode(accessor, ts.isGetOrSetAccessorDeclaration); // TODO: GH#18217
-                    var otherKind = accessor.kind === 169 /* SetAccessor */ ? 168 /* GetAccessor */ : 169 /* SetAccessor */;
+                    var otherKind = accessor.kind === 171 /* SetAccessor */ ? 170 /* GetAccessor */ : 171 /* SetAccessor */;
                     var otherAccessor = ts.getDeclarationOfKind(getSymbolOfNode(accessor), otherKind);
                     var firstAccessor = otherAccessor && (otherAccessor.pos < accessor.pos) ? otherAccessor : accessor;
                     var secondAccessor = otherAccessor && (otherAccessor.pos < accessor.pos) ? accessor : otherAccessor;
-                    var setAccessor = accessor.kind === 169 /* SetAccessor */ ? accessor : otherAccessor;
-                    var getAccessor = accessor.kind === 168 /* GetAccessor */ ? accessor : otherAccessor;
+                    var setAccessor = accessor.kind === 171 /* SetAccessor */ ? accessor : otherAccessor;
+                    var getAccessor = accessor.kind === 170 /* GetAccessor */ ? accessor : otherAccessor;
                     return {
                         firstAccessor: firstAccessor,
                         secondAccessor: secondAccessor,
@@ -81686,7 +83239,7 @@
                 },
                 getDeclarationStatementsForSourceFile: function (node, flags, tracker, bundled) {
                     var n = ts.getParseTreeNode(node);
-                    ts.Debug.assert(n && n.kind === 298 /* SourceFile */, "Non-sourcefile node passed into getDeclarationsForSourceFile");
+                    ts.Debug.assert(n && n.kind === 300 /* SourceFile */, "Non-sourcefile node passed into getDeclarationsForSourceFile");
                     var sym = getSymbolOfNode(node);
                     if (!sym) {
                         return !node.locals ? [] : nodeBuilder.symbolTableToDeclarationStatements(node.locals, node, flags, tracker, bundled);
@@ -81723,7 +83276,7 @@
                 return false;
             }
             function isInHeritageClause(node) {
-                return node.parent && node.parent.kind === 224 /* ExpressionWithTypeArguments */ && node.parent.parent && node.parent.parent.kind === 287 /* HeritageClause */;
+                return node.parent && node.parent.kind === 226 /* ExpressionWithTypeArguments */ && node.parent.parent && node.parent.parent.kind === 289 /* HeritageClause */;
             }
             // defined here to avoid outer scope pollution
             function getTypeReferenceDirectivesForEntityName(node) {
@@ -81735,7 +83288,7 @@
                 // qualified names can only be used as types\namespaces
                 // identifiers are treated as values only if they appear in type queries
                 var meaning = 788968 /* Type */ | 1920 /* Namespace */;
-                if ((node.kind === 78 /* Identifier */ && isInTypeQuery(node)) || (node.kind === 202 /* PropertyAccessExpression */ && !isInHeritageClause(node))) {
+                if ((node.kind === 79 /* Identifier */ && isInTypeQuery(node)) || (node.kind === 204 /* PropertyAccessExpression */ && !isInHeritageClause(node))) {
                     meaning = 111551 /* Value */ | 1048576 /* ExportValue */;
                 }
                 var symbol = resolveEntityName(node, meaning, /*ignoreErrors*/ true);
@@ -81783,7 +83336,7 @@
                         break;
                     }
                 }
-                if (current.valueDeclaration && current.valueDeclaration.kind === 298 /* SourceFile */ && current.flags & 512 /* ValueModule */) {
+                if (current.valueDeclaration && current.valueDeclaration.kind === 300 /* SourceFile */ && current.flags & 512 /* ValueModule */) {
                     return false;
                 }
                 // check that at least one declaration of top level symbol originates from type declaration file
@@ -81811,12 +83364,12 @@
             }
         }
         function getExternalModuleFileFromDeclaration(declaration) {
-            var specifier = declaration.kind === 257 /* ModuleDeclaration */ ? ts.tryCast(declaration.name, ts.isStringLiteral) : ts.getExternalModuleName(declaration);
+            var specifier = declaration.kind === 259 /* ModuleDeclaration */ ? ts.tryCast(declaration.name, ts.isStringLiteral) : ts.getExternalModuleName(declaration);
             var moduleSymbol = resolveExternalModuleNameWorker(specifier, specifier, /*moduleNotFoundError*/ undefined); // TODO: GH#18217
             if (!moduleSymbol) {
                 return undefined;
             }
-            return ts.getDeclarationOfKind(moduleSymbol, 298 /* SourceFile */);
+            return ts.getDeclarationOfKind(moduleSymbol, 300 /* SourceFile */);
         }
         function initializeTypeChecker() {
             // Bind all source files and propagate errors
@@ -81902,7 +83455,7 @@
             autoArrayType = createArrayType(autoType);
             if (autoArrayType === emptyObjectType) {
                 // autoArrayType is used as a marker, so even if global Array type is not defined, it needs to be a unique type
-                autoArrayType = createAnonymousType(undefined, emptySymbols, ts.emptyArray, ts.emptyArray, undefined, undefined);
+                autoArrayType = createAnonymousType(undefined, emptySymbols, ts.emptyArray, ts.emptyArray, ts.emptyArray);
             }
             globalReadonlyArrayType = getGlobalTypeOrUndefined("ReadonlyArray", /*arity*/ 1) || globalArrayType;
             anyReadonlyArrayType = globalReadonlyArrayType ? createTypeFromGenericGlobalType(globalReadonlyArrayType, [anyType]) : anyArrayType;
@@ -81970,6 +83523,11 @@
                                         error(location, ts.Diagnostics.This_syntax_requires_an_imported_helper_named_1_with_2_parameters_which_is_not_compatible_with_the_one_in_0_Consider_upgrading_your_version_of_0, ts.externalHelpersModuleNameText, name, 5);
                                     }
                                 }
+                                else if (helper & 1024 /* SpreadArray */) {
+                                    if (!ts.some(getSignaturesOfSymbol(symbol), function (signature) { return getParameterCount(signature) > 2; })) {
+                                        error(location, ts.Diagnostics.This_syntax_requires_an_imported_helper_named_1_with_2_parameters_which_is_not_compatible_with_the_one_in_0_Consider_upgrading_your_version_of_0, ts.externalHelpersModuleNameText, name, 3);
+                                    }
+                                }
                             }
                         }
                     }
@@ -82019,14 +83577,14 @@
                 return false;
             }
             if (!ts.nodeCanBeDecorated(node, node.parent, node.parent.parent)) {
-                if (node.kind === 166 /* MethodDeclaration */ && !ts.nodeIsPresent(node.body)) {
+                if (node.kind === 167 /* MethodDeclaration */ && !ts.nodeIsPresent(node.body)) {
                     return grammarErrorOnFirstToken(node, ts.Diagnostics.A_decorator_can_only_decorate_a_method_implementation_not_an_overload);
                 }
                 else {
                     return grammarErrorOnFirstToken(node, ts.Diagnostics.Decorators_are_not_valid_here);
                 }
             }
-            else if (node.kind === 168 /* GetAccessor */ || node.kind === 169 /* SetAccessor */) {
+            else if (node.kind === 170 /* GetAccessor */ || node.kind === 171 /* SetAccessor */) {
                 var accessors = ts.getAllAccessorDeclarations(node.parent.members, node);
                 if (accessors.firstAccessor.decorators && node === accessors.secondAccessor) {
                     return grammarErrorOnFirstToken(node, ts.Diagnostics.Decorators_cannot_be_applied_to_multiple_get_Slashset_accessors_of_the_same_name);
@@ -82043,21 +83601,21 @@
             var flags = 0 /* None */;
             for (var _i = 0, _a = node.modifiers; _i < _a.length; _i++) {
                 var modifier = _a[_i];
-                if (modifier.kind !== 142 /* ReadonlyKeyword */) {
-                    if (node.kind === 163 /* PropertySignature */ || node.kind === 165 /* MethodSignature */) {
+                if (modifier.kind !== 143 /* ReadonlyKeyword */) {
+                    if (node.kind === 164 /* PropertySignature */ || node.kind === 166 /* MethodSignature */) {
                         return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_type_member, ts.tokenToString(modifier.kind));
                     }
-                    if (node.kind === 172 /* IndexSignature */ && (modifier.kind !== 123 /* StaticKeyword */ || !ts.isClassLike(node.parent))) {
+                    if (node.kind === 174 /* IndexSignature */ && (modifier.kind !== 124 /* StaticKeyword */ || !ts.isClassLike(node.parent))) {
                         return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_an_index_signature, ts.tokenToString(modifier.kind));
                     }
                 }
                 switch (modifier.kind) {
-                    case 84 /* ConstKeyword */:
-                        if (node.kind !== 256 /* EnumDeclaration */) {
-                            return grammarErrorOnNode(node, ts.Diagnostics.A_class_member_cannot_have_the_0_keyword, ts.tokenToString(84 /* ConstKeyword */));
+                    case 85 /* ConstKeyword */:
+                        if (node.kind !== 258 /* EnumDeclaration */) {
+                            return grammarErrorOnNode(node, ts.Diagnostics.A_class_member_cannot_have_the_0_keyword, ts.tokenToString(85 /* ConstKeyword */));
                         }
                         break;
-                    case 156 /* OverrideKeyword */:
+                    case 157 /* OverrideKeyword */:
                         // If node.kind === SyntaxKind.Parameter, checkParameter reports an error if it's not a parameter property.
                         if (flags & 16384 /* Override */) {
                             return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_already_seen, "override");
@@ -82074,9 +83632,9 @@
                         flags |= 16384 /* Override */;
                         lastOverride = modifier;
                         break;
-                    case 122 /* PublicKeyword */:
-                    case 121 /* ProtectedKeyword */:
-                    case 120 /* PrivateKeyword */:
+                    case 123 /* PublicKeyword */:
+                    case 122 /* ProtectedKeyword */:
+                    case 121 /* PrivateKeyword */:
                         var text = visibilityToString(ts.modifierToFlag(modifier.kind));
                         if (flags & 28 /* AccessibilityModifier */) {
                             return grammarErrorOnNode(modifier, ts.Diagnostics.Accessibility_modifier_already_seen);
@@ -82093,11 +83651,11 @@
                         else if (flags & 256 /* Async */) {
                             return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_must_precede_1_modifier, text, "async");
                         }
-                        else if (node.parent.kind === 258 /* ModuleBlock */ || node.parent.kind === 298 /* SourceFile */) {
+                        else if (node.parent.kind === 260 /* ModuleBlock */ || node.parent.kind === 300 /* SourceFile */) {
                             return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_module_or_namespace_element, text);
                         }
                         else if (flags & 128 /* Abstract */) {
-                            if (modifier.kind === 120 /* PrivateKeyword */) {
+                            if (modifier.kind === 121 /* PrivateKeyword */) {
                                 return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_be_used_with_1_modifier, text, "abstract");
                             }
                             else {
@@ -82109,7 +83667,7 @@
                         }
                         flags |= ts.modifierToFlag(modifier.kind);
                         break;
-                    case 123 /* StaticKeyword */:
+                    case 124 /* StaticKeyword */:
                         if (flags & 32 /* Static */) {
                             return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_already_seen, "static");
                         }
@@ -82119,10 +83677,10 @@
                         else if (flags & 256 /* Async */) {
                             return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_must_precede_1_modifier, "static", "async");
                         }
-                        else if (node.parent.kind === 258 /* ModuleBlock */ || node.parent.kind === 298 /* SourceFile */) {
+                        else if (node.parent.kind === 260 /* ModuleBlock */ || node.parent.kind === 300 /* SourceFile */) {
                             return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_module_or_namespace_element, "static");
                         }
-                        else if (node.kind === 161 /* Parameter */) {
+                        else if (node.kind === 162 /* Parameter */) {
                             return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_parameter, "static");
                         }
                         else if (flags & 128 /* Abstract */) {
@@ -82134,18 +83692,18 @@
                         flags |= 32 /* Static */;
                         lastStatic = modifier;
                         break;
-                    case 142 /* ReadonlyKeyword */:
+                    case 143 /* ReadonlyKeyword */:
                         if (flags & 64 /* Readonly */) {
                             return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_already_seen, "readonly");
                         }
-                        else if (node.kind !== 164 /* PropertyDeclaration */ && node.kind !== 163 /* PropertySignature */ && node.kind !== 172 /* IndexSignature */ && node.kind !== 161 /* Parameter */) {
+                        else if (node.kind !== 165 /* PropertyDeclaration */ && node.kind !== 164 /* PropertySignature */ && node.kind !== 174 /* IndexSignature */ && node.kind !== 162 /* Parameter */) {
                             // If node.kind === SyntaxKind.Parameter, checkParameter reports an error if it's not a parameter property.
                             return grammarErrorOnNode(modifier, ts.Diagnostics.readonly_modifier_can_only_appear_on_a_property_declaration_or_index_signature);
                         }
                         flags |= 64 /* Readonly */;
                         lastReadonly = modifier;
                         break;
-                    case 92 /* ExportKeyword */:
+                    case 93 /* ExportKeyword */:
                         if (flags & 1 /* Export */) {
                             return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_already_seen, "export");
                         }
@@ -82161,19 +83719,22 @@
                         else if (ts.isClassLike(node.parent)) {
                             return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_class_elements_of_this_kind, "export");
                         }
-                        else if (node.kind === 161 /* Parameter */) {
+                        else if (node.kind === 162 /* Parameter */) {
                             return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_parameter, "export");
                         }
                         flags |= 1 /* Export */;
                         break;
-                    case 87 /* DefaultKeyword */:
-                        var container = node.parent.kind === 298 /* SourceFile */ ? node.parent : node.parent.parent;
-                        if (container.kind === 257 /* ModuleDeclaration */ && !ts.isAmbientModule(container)) {
+                    case 88 /* DefaultKeyword */:
+                        var container = node.parent.kind === 300 /* SourceFile */ ? node.parent : node.parent.parent;
+                        if (container.kind === 259 /* ModuleDeclaration */ && !ts.isAmbientModule(container)) {
                             return grammarErrorOnNode(modifier, ts.Diagnostics.A_default_export_can_only_be_used_in_an_ECMAScript_style_module);
                         }
+                        else if (!(flags & 1 /* Export */)) {
+                            return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_must_precede_1_modifier, "export", "default");
+                        }
                         flags |= 512 /* Default */;
                         break;
-                    case 133 /* DeclareKeyword */:
+                    case 134 /* DeclareKeyword */:
                         if (flags & 2 /* Ambient */) {
                             return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_already_seen, "declare");
                         }
@@ -82186,10 +83747,10 @@
                         else if (ts.isClassLike(node.parent) && !ts.isPropertyDeclaration(node)) {
                             return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_class_elements_of_this_kind, "declare");
                         }
-                        else if (node.kind === 161 /* Parameter */) {
+                        else if (node.kind === 162 /* Parameter */) {
                             return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_parameter, "declare");
                         }
-                        else if ((node.parent.flags & 8388608 /* Ambient */) && node.parent.kind === 258 /* ModuleBlock */) {
+                        else if ((node.parent.flags & 8388608 /* Ambient */) && node.parent.kind === 260 /* ModuleBlock */) {
                             return grammarErrorOnNode(modifier, ts.Diagnostics.A_declare_modifier_cannot_be_used_in_an_already_ambient_context);
                         }
                         else if (ts.isPrivateIdentifierClassElementDeclaration(node)) {
@@ -82198,19 +83759,19 @@
                         flags |= 2 /* Ambient */;
                         lastDeclare = modifier;
                         break;
-                    case 125 /* AbstractKeyword */:
+                    case 126 /* AbstractKeyword */:
                         if (flags & 128 /* Abstract */) {
                             return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_already_seen, "abstract");
                         }
-                        if (node.kind !== 253 /* ClassDeclaration */ &&
-                            node.kind !== 176 /* ConstructorType */) {
-                            if (node.kind !== 166 /* MethodDeclaration */ &&
-                                node.kind !== 164 /* PropertyDeclaration */ &&
-                                node.kind !== 168 /* GetAccessor */ &&
-                                node.kind !== 169 /* SetAccessor */) {
+                        if (node.kind !== 255 /* ClassDeclaration */ &&
+                            node.kind !== 178 /* ConstructorType */) {
+                            if (node.kind !== 167 /* MethodDeclaration */ &&
+                                node.kind !== 165 /* PropertyDeclaration */ &&
+                                node.kind !== 170 /* GetAccessor */ &&
+                                node.kind !== 171 /* SetAccessor */) {
                                 return grammarErrorOnNode(modifier, ts.Diagnostics.abstract_modifier_can_only_appear_on_a_class_method_or_property_declaration);
                             }
-                            if (!(node.parent.kind === 253 /* ClassDeclaration */ && ts.hasSyntacticModifier(node.parent, 128 /* Abstract */))) {
+                            if (!(node.parent.kind === 255 /* ClassDeclaration */ && ts.hasSyntacticModifier(node.parent, 128 /* Abstract */))) {
                                 return grammarErrorOnNode(modifier, ts.Diagnostics.Abstract_methods_can_only_appear_within_an_abstract_class);
                             }
                             if (flags & 32 /* Static */) {
@@ -82226,19 +83787,19 @@
                                 return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_must_precede_1_modifier, "abstract", "override");
                             }
                         }
-                        if (ts.isNamedDeclaration(node) && node.name.kind === 79 /* PrivateIdentifier */) {
+                        if (ts.isNamedDeclaration(node) && node.name.kind === 80 /* PrivateIdentifier */) {
                             return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_be_used_with_a_private_identifier, "abstract");
                         }
                         flags |= 128 /* Abstract */;
                         break;
-                    case 129 /* AsyncKeyword */:
+                    case 130 /* AsyncKeyword */:
                         if (flags & 256 /* Async */) {
                             return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_already_seen, "async");
                         }
                         else if (flags & 2 /* Ambient */ || node.parent.flags & 8388608 /* Ambient */) {
                             return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_be_used_in_an_ambient_context, "async");
                         }
-                        else if (node.kind === 161 /* Parameter */) {
+                        else if (node.kind === 162 /* Parameter */) {
                             return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_parameter, "async");
                         }
                         if (flags & 128 /* Abstract */) {
@@ -82249,7 +83810,7 @@
                         break;
                 }
             }
-            if (node.kind === 167 /* Constructor */) {
+            if (node.kind === 169 /* Constructor */) {
                 if (flags & 32 /* Static */) {
                     return grammarErrorOnNode(lastStatic, ts.Diagnostics._0_modifier_cannot_appear_on_a_constructor_declaration, "static");
                 }
@@ -82267,13 +83828,13 @@
                 }
                 return false;
             }
-            else if ((node.kind === 262 /* ImportDeclaration */ || node.kind === 261 /* ImportEqualsDeclaration */) && flags & 2 /* Ambient */) {
+            else if ((node.kind === 264 /* ImportDeclaration */ || node.kind === 263 /* ImportEqualsDeclaration */) && flags & 2 /* Ambient */) {
                 return grammarErrorOnNode(lastDeclare, ts.Diagnostics.A_0_modifier_cannot_be_used_with_an_import_declaration, "declare");
             }
-            else if (node.kind === 161 /* Parameter */ && (flags & 16476 /* ParameterPropertyModifier */) && ts.isBindingPattern(node.name)) {
+            else if (node.kind === 162 /* Parameter */ && (flags & 16476 /* ParameterPropertyModifier */) && ts.isBindingPattern(node.name)) {
                 return grammarErrorOnNode(node, ts.Diagnostics.A_parameter_property_may_not_be_declared_using_a_binding_pattern);
             }
-            else if (node.kind === 161 /* Parameter */ && (flags & 16476 /* ParameterPropertyModifier */) && node.dotDotDotToken) {
+            else if (node.kind === 162 /* Parameter */ && (flags & 16476 /* ParameterPropertyModifier */) && node.dotDotDotToken) {
                 return grammarErrorOnNode(node, ts.Diagnostics.A_parameter_property_cannot_be_declared_using_a_rest_parameter);
             }
             if (flags & 256 /* Async */) {
@@ -82294,39 +83855,40 @@
         }
         function shouldReportBadModifier(node) {
             switch (node.kind) {
-                case 168 /* GetAccessor */:
-                case 169 /* SetAccessor */:
-                case 167 /* Constructor */:
-                case 164 /* PropertyDeclaration */:
-                case 163 /* PropertySignature */:
-                case 166 /* MethodDeclaration */:
-                case 165 /* MethodSignature */:
-                case 172 /* IndexSignature */:
-                case 257 /* ModuleDeclaration */:
-                case 262 /* ImportDeclaration */:
-                case 261 /* ImportEqualsDeclaration */:
-                case 268 /* ExportDeclaration */:
-                case 267 /* ExportAssignment */:
-                case 209 /* FunctionExpression */:
-                case 210 /* ArrowFunction */:
-                case 161 /* Parameter */:
+                case 170 /* GetAccessor */:
+                case 171 /* SetAccessor */:
+                case 169 /* Constructor */:
+                case 165 /* PropertyDeclaration */:
+                case 164 /* PropertySignature */:
+                case 167 /* MethodDeclaration */:
+                case 166 /* MethodSignature */:
+                case 174 /* IndexSignature */:
+                case 259 /* ModuleDeclaration */:
+                case 264 /* ImportDeclaration */:
+                case 263 /* ImportEqualsDeclaration */:
+                case 270 /* ExportDeclaration */:
+                case 269 /* ExportAssignment */:
+                case 211 /* FunctionExpression */:
+                case 212 /* ArrowFunction */:
+                case 162 /* Parameter */:
                     return false;
                 default:
-                    if (node.parent.kind === 258 /* ModuleBlock */ || node.parent.kind === 298 /* SourceFile */) {
+                    if (node.parent.kind === 260 /* ModuleBlock */ || node.parent.kind === 300 /* SourceFile */) {
                         return false;
                     }
                     switch (node.kind) {
-                        case 252 /* FunctionDeclaration */:
-                            return nodeHasAnyModifiersExcept(node, 129 /* AsyncKeyword */);
-                        case 253 /* ClassDeclaration */:
-                        case 176 /* ConstructorType */:
-                            return nodeHasAnyModifiersExcept(node, 125 /* AbstractKeyword */);
-                        case 254 /* InterfaceDeclaration */:
-                        case 233 /* VariableStatement */:
-                        case 255 /* TypeAliasDeclaration */:
+                        case 254 /* FunctionDeclaration */:
+                            return nodeHasAnyModifiersExcept(node, 130 /* AsyncKeyword */);
+                        case 255 /* ClassDeclaration */:
+                        case 178 /* ConstructorType */:
+                            return nodeHasAnyModifiersExcept(node, 126 /* AbstractKeyword */);
+                        case 256 /* InterfaceDeclaration */:
+                        case 235 /* VariableStatement */:
+                        case 257 /* TypeAliasDeclaration */:
+                        case 168 /* ClassStaticBlockDeclaration */:
                             return true;
-                        case 256 /* EnumDeclaration */:
-                            return nodeHasAnyModifiersExcept(node, 84 /* ConstKeyword */);
+                        case 258 /* EnumDeclaration */:
+                            return nodeHasAnyModifiersExcept(node, 85 /* ConstKeyword */);
                         default:
                             ts.Debug.fail();
                     }
@@ -82337,10 +83899,10 @@
         }
         function checkGrammarAsyncModifier(node, asyncModifier) {
             switch (node.kind) {
-                case 166 /* MethodDeclaration */:
-                case 252 /* FunctionDeclaration */:
-                case 209 /* FunctionExpression */:
-                case 210 /* ArrowFunction */:
+                case 167 /* MethodDeclaration */:
+                case 254 /* FunctionDeclaration */:
+                case 211 /* FunctionExpression */:
+                case 212 /* ArrowFunction */:
                     return false;
             }
             return grammarErrorOnNode(asyncModifier, ts.Diagnostics._0_modifier_cannot_be_used_here, "async");
@@ -82403,7 +83965,7 @@
                             ts.addRelatedInfo(error(parameter, ts.Diagnostics.This_parameter_is_not_allowed_with_use_strict_directive), ts.createDiagnosticForNode(useStrictDirective_1, ts.Diagnostics.use_strict_directive_used_here));
                         });
                         var diagnostics_2 = nonSimpleParameters.map(function (parameter, index) { return (index === 0 ? ts.createDiagnosticForNode(parameter, ts.Diagnostics.Non_simple_parameter_declared_here) : ts.createDiagnosticForNode(parameter, ts.Diagnostics.and_here)); });
-                        ts.addRelatedInfo.apply(void 0, __spreadArray([error(useStrictDirective_1, ts.Diagnostics.use_strict_directive_cannot_be_used_with_non_simple_parameter_list)], diagnostics_2));
+                        ts.addRelatedInfo.apply(void 0, __spreadArray([error(useStrictDirective_1, ts.Diagnostics.use_strict_directive_cannot_be_used_with_non_simple_parameter_list)], diagnostics_2, false));
                         return true;
                     }
                 }
@@ -82459,15 +84021,12 @@
             if (!parameter.type) {
                 return grammarErrorOnNode(parameter.name, ts.Diagnostics.An_index_signature_parameter_must_have_a_type_annotation);
             }
-            if (parameter.type.kind !== 147 /* StringKeyword */ && parameter.type.kind !== 144 /* NumberKeyword */) {
-                var type = getTypeFromTypeNode(parameter.type);
-                if (type.flags & 4 /* String */ || type.flags & 8 /* Number */) {
-                    return grammarErrorOnNode(parameter.name, ts.Diagnostics.An_index_signature_parameter_type_cannot_be_a_type_alias_Consider_writing_0_Colon_1_Colon_2_instead, ts.getTextOfNode(parameter.name), typeToString(type), typeToString(node.type ? getTypeFromTypeNode(node.type) : anyType));
-                }
-                if (type.flags & 1048576 /* Union */ && allTypesAssignableToKind(type, 384 /* StringOrNumberLiteral */, /*strict*/ true)) {
-                    return grammarErrorOnNode(parameter.name, ts.Diagnostics.An_index_signature_parameter_type_cannot_be_a_union_type_Consider_using_a_mapped_object_type_instead);
-                }
-                return grammarErrorOnNode(parameter.name, ts.Diagnostics.An_index_signature_parameter_type_must_be_either_string_or_number);
+            var type = getTypeFromTypeNode(parameter.type);
+            if (someType(type, function (t) { return !!(t.flags & 8576 /* StringOrNumberLiteralOrUnique */); }) || isGenericType(type)) {
+                return grammarErrorOnNode(parameter.name, ts.Diagnostics.An_index_signature_parameter_type_cannot_be_a_literal_type_or_generic_type_Consider_using_a_mapped_object_type_instead);
+            }
+            if (!everyType(type, isValidIndexKeyType)) {
+                return grammarErrorOnNode(parameter.name, ts.Diagnostics.An_index_signature_parameter_type_must_be_string_number_symbol_or_a_template_literal_type);
             }
             if (!node.type) {
                 return grammarErrorOnNode(node, ts.Diagnostics.An_index_signature_must_have_a_type_annotation);
@@ -82501,7 +84060,7 @@
             if (args) {
                 for (var _i = 0, args_4 = args; _i < args_4.length; _i++) {
                     var arg = args_4[_i];
-                    if (arg.kind === 223 /* OmittedExpression */) {
+                    if (arg.kind === 225 /* OmittedExpression */) {
                         return grammarErrorAtPos(arg, arg.pos, 0, ts.Diagnostics.Argument_expression_expected);
                     }
                 }
@@ -82531,7 +84090,7 @@
             if (!checkGrammarDecoratorsAndModifiers(node) && node.heritageClauses) {
                 for (var _i = 0, _a = node.heritageClauses; _i < _a.length; _i++) {
                     var heritageClause = _a[_i];
-                    if (heritageClause.token === 93 /* ExtendsKeyword */) {
+                    if (heritageClause.token === 94 /* ExtendsKeyword */) {
                         if (seenExtendsClause) {
                             return grammarErrorOnFirstToken(heritageClause, ts.Diagnostics.extends_clause_already_seen);
                         }
@@ -82544,7 +84103,7 @@
                         seenExtendsClause = true;
                     }
                     else {
-                        ts.Debug.assert(heritageClause.token === 116 /* ImplementsKeyword */);
+                        ts.Debug.assert(heritageClause.token === 117 /* ImplementsKeyword */);
                         if (seenImplementsClause) {
                             return grammarErrorOnFirstToken(heritageClause, ts.Diagnostics.implements_clause_already_seen);
                         }
@@ -82560,14 +84119,14 @@
             if (node.heritageClauses) {
                 for (var _i = 0, _a = node.heritageClauses; _i < _a.length; _i++) {
                     var heritageClause = _a[_i];
-                    if (heritageClause.token === 93 /* ExtendsKeyword */) {
+                    if (heritageClause.token === 94 /* ExtendsKeyword */) {
                         if (seenExtendsClause) {
                             return grammarErrorOnFirstToken(heritageClause, ts.Diagnostics.extends_clause_already_seen);
                         }
                         seenExtendsClause = true;
                     }
                     else {
-                        ts.Debug.assert(heritageClause.token === 116 /* ImplementsKeyword */);
+                        ts.Debug.assert(heritageClause.token === 117 /* ImplementsKeyword */);
                         return grammarErrorOnFirstToken(heritageClause, ts.Diagnostics.Interface_declaration_cannot_have_implements_clause);
                     }
                     // Grammar checking heritageClause inside class declaration
@@ -82578,20 +84137,20 @@
         }
         function checkGrammarComputedPropertyName(node) {
             // If node is not a computedPropertyName, just skip the grammar checking
-            if (node.kind !== 159 /* ComputedPropertyName */) {
+            if (node.kind !== 160 /* ComputedPropertyName */) {
                 return false;
             }
             var computedPropertyName = node;
-            if (computedPropertyName.expression.kind === 217 /* BinaryExpression */ && computedPropertyName.expression.operatorToken.kind === 27 /* CommaToken */) {
+            if (computedPropertyName.expression.kind === 219 /* BinaryExpression */ && computedPropertyName.expression.operatorToken.kind === 27 /* CommaToken */) {
                 return grammarErrorOnNode(computedPropertyName.expression, ts.Diagnostics.A_comma_expression_is_not_allowed_in_a_computed_property_name);
             }
             return false;
         }
         function checkGrammarForGenerator(node) {
             if (node.asteriskToken) {
-                ts.Debug.assert(node.kind === 252 /* FunctionDeclaration */ ||
-                    node.kind === 209 /* FunctionExpression */ ||
-                    node.kind === 166 /* MethodDeclaration */);
+                ts.Debug.assert(node.kind === 254 /* FunctionDeclaration */ ||
+                    node.kind === 211 /* FunctionExpression */ ||
+                    node.kind === 167 /* MethodDeclaration */);
                 if (node.flags & 8388608 /* Ambient */) {
                     return grammarErrorOnNode(node.asteriskToken, ts.Diagnostics.Generators_are_not_allowed_in_an_ambient_context);
                 }
@@ -82610,7 +84169,7 @@
             var seen = new ts.Map();
             for (var _i = 0, _a = node.properties; _i < _a.length; _i++) {
                 var prop = _a[_i];
-                if (prop.kind === 291 /* SpreadAssignment */) {
+                if (prop.kind === 293 /* SpreadAssignment */) {
                     if (inDestructuring) {
                         // a rest property cannot be destructured any further
                         var expression = ts.skipParentheses(prop.expression);
@@ -82621,16 +84180,16 @@
                     continue;
                 }
                 var name = prop.name;
-                if (name.kind === 159 /* ComputedPropertyName */) {
+                if (name.kind === 160 /* ComputedPropertyName */) {
                     // If the name is not a ComputedPropertyName, the grammar checking will skip it
                     checkGrammarComputedPropertyName(name);
                 }
-                if (prop.kind === 290 /* ShorthandPropertyAssignment */ && !inDestructuring && prop.objectAssignmentInitializer) {
+                if (prop.kind === 292 /* ShorthandPropertyAssignment */ && !inDestructuring && prop.objectAssignmentInitializer) {
                     // having objectAssignmentInitializer is only valid in ObjectAssignmentPattern
                     // outside of destructuring it is a syntax error
                     return grammarErrorOnNode(prop.equalsToken, ts.Diagnostics.Did_you_mean_to_use_a_Colon_An_can_only_follow_a_property_name_when_the_containing_object_literal_is_part_of_a_destructuring_pattern);
                 }
-                if (name.kind === 79 /* PrivateIdentifier */) {
+                if (name.kind === 80 /* PrivateIdentifier */) {
                     grammarErrorOnNode(name, ts.Diagnostics.Private_identifiers_are_not_allowed_outside_class_bodies);
                 }
                 // Modifiers are never allowed on properties except for 'async' on a method declaration
@@ -82638,7 +84197,7 @@
                     // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion
                     for (var _b = 0, _c = prop.modifiers; _b < _c.length; _b++) { // TODO: GH#19955
                         var mod = _c[_b];
-                        if (mod.kind !== 129 /* AsyncKeyword */ || prop.kind !== 166 /* MethodDeclaration */) {
+                        if (mod.kind !== 130 /* AsyncKeyword */ || prop.kind !== 167 /* MethodDeclaration */) {
                             grammarErrorOnNode(mod, ts.Diagnostics._0_modifier_cannot_be_used_here, ts.getTextOfNode(mod));
                         }
                     }
@@ -82653,10 +84212,10 @@
                 // and either both previous and propId.descriptor have[[Get]] fields or both previous and propId.descriptor have[[Set]] fields
                 var currentKind = void 0;
                 switch (prop.kind) {
-                    case 290 /* ShorthandPropertyAssignment */:
+                    case 292 /* ShorthandPropertyAssignment */:
                         checkGrammarForInvalidExclamationToken(prop.exclamationToken, ts.Diagnostics.A_definite_assignment_assertion_is_not_permitted_in_this_context);
                     // falls through
-                    case 289 /* PropertyAssignment */:
+                    case 291 /* PropertyAssignment */:
                         // Grammar checking for computedPropertyName and shorthandPropertyAssignment
                         checkGrammarForInvalidQuestionMark(prop.questionToken, ts.Diagnostics.An_object_member_cannot_be_declared_optional);
                         if (name.kind === 8 /* NumericLiteral */) {
@@ -82664,13 +84223,13 @@
                         }
                         currentKind = 4 /* PropertyAssignment */;
                         break;
-                    case 166 /* MethodDeclaration */:
+                    case 167 /* MethodDeclaration */:
                         currentKind = 8 /* Method */;
                         break;
-                    case 168 /* GetAccessor */:
+                    case 170 /* GetAccessor */:
                         currentKind = 1 /* GetAccessor */;
                         break;
-                    case 169 /* SetAccessor */:
+                    case 171 /* SetAccessor */:
                         currentKind = 2 /* SetAccessor */;
                         break;
                     default:
@@ -82710,7 +84269,7 @@
             var seen = new ts.Map();
             for (var _i = 0, _a = node.attributes.properties; _i < _a.length; _i++) {
                 var attr = _a[_i];
-                if (attr.kind === 283 /* JsxSpreadAttribute */) {
+                if (attr.kind === 285 /* JsxSpreadAttribute */) {
                     continue;
                 }
                 var name = attr.name, initializer = attr.initializer;
@@ -82720,7 +84279,7 @@
                 else {
                     return grammarErrorOnNode(name, ts.Diagnostics.JSX_elements_cannot_have_multiple_attributes_with_the_same_name);
                 }
-                if (initializer && initializer.kind === 284 /* JsxExpression */ && !initializer.expression) {
+                if (initializer && initializer.kind === 286 /* JsxExpression */ && !initializer.expression) {
                     return grammarErrorOnNode(initializer, ts.Diagnostics.JSX_attributes_must_only_be_assigned_a_non_empty_expression);
                 }
             }
@@ -82755,7 +84314,7 @@
             if (checkGrammarStatementInAmbientContext(forInOrOfStatement)) {
                 return true;
             }
-            if (forInOrOfStatement.kind === 240 /* ForOfStatement */ && forInOrOfStatement.awaitModifier) {
+            if (forInOrOfStatement.kind === 242 /* ForOfStatement */ && forInOrOfStatement.awaitModifier) {
                 if (!(forInOrOfStatement.flags & 32768 /* AwaitContext */)) {
                     var sourceFile = ts.getSourceFileOfNode(forInOrOfStatement);
                     if (ts.isInTopLevelContext(forInOrOfStatement)) {
@@ -82773,7 +84332,7 @@
                         if (!hasParseDiagnostics(sourceFile)) {
                             var diagnostic = ts.createDiagnosticForNode(forInOrOfStatement.awaitModifier, ts.Diagnostics.for_await_loops_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules);
                             var func = ts.getContainingFunction(forInOrOfStatement);
-                            if (func && func.kind !== 167 /* Constructor */) {
+                            if (func && func.kind !== 169 /* Constructor */) {
                                 ts.Debug.assert((ts.getFunctionFlags(func) & 2 /* Async */) === 0, "Enclosing function should never be an async function.");
                                 var relatedInfo = ts.createDiagnosticForNode(func, ts.Diagnostics.Did_you_mean_to_mark_this_function_as_async);
                                 ts.addRelatedInfo(diagnostic, relatedInfo);
@@ -82785,7 +84344,12 @@
                     return false;
                 }
             }
-            if (forInOrOfStatement.initializer.kind === 251 /* VariableDeclarationList */) {
+            if (ts.isForOfStatement(forInOrOfStatement) && !(forInOrOfStatement.flags & 32768 /* AwaitContext */) &&
+                ts.isIdentifier(forInOrOfStatement.initializer) && forInOrOfStatement.initializer.escapedText === "async") {
+                grammarErrorOnNode(forInOrOfStatement.initializer, ts.Diagnostics.The_left_hand_side_of_a_for_of_statement_may_not_be_async);
+                return false;
+            }
+            if (forInOrOfStatement.initializer.kind === 253 /* VariableDeclarationList */) {
                 var variableList = forInOrOfStatement.initializer;
                 if (!checkGrammarVariableDeclarationList(variableList)) {
                     var declarations = variableList.declarations;
@@ -82800,20 +84364,20 @@
                         return false;
                     }
                     if (declarations.length > 1) {
-                        var diagnostic = forInOrOfStatement.kind === 239 /* ForInStatement */
+                        var diagnostic = forInOrOfStatement.kind === 241 /* ForInStatement */
                             ? ts.Diagnostics.Only_a_single_variable_declaration_is_allowed_in_a_for_in_statement
                             : ts.Diagnostics.Only_a_single_variable_declaration_is_allowed_in_a_for_of_statement;
                         return grammarErrorOnFirstToken(variableList.declarations[1], diagnostic);
                     }
                     var firstDeclaration = declarations[0];
                     if (firstDeclaration.initializer) {
-                        var diagnostic = forInOrOfStatement.kind === 239 /* ForInStatement */
+                        var diagnostic = forInOrOfStatement.kind === 241 /* ForInStatement */
                             ? ts.Diagnostics.The_variable_declaration_of_a_for_in_statement_cannot_have_an_initializer
                             : ts.Diagnostics.The_variable_declaration_of_a_for_of_statement_cannot_have_an_initializer;
                         return grammarErrorOnNode(firstDeclaration.name, diagnostic);
                     }
                     if (firstDeclaration.type) {
-                        var diagnostic = forInOrOfStatement.kind === 239 /* ForInStatement */
+                        var diagnostic = forInOrOfStatement.kind === 241 /* ForInStatement */
                             ? ts.Diagnostics.The_left_hand_side_of_a_for_in_statement_cannot_use_a_type_annotation
                             : ts.Diagnostics.The_left_hand_side_of_a_for_of_statement_cannot_use_a_type_annotation;
                         return grammarErrorOnNode(firstDeclaration, diagnostic);
@@ -82823,7 +84387,7 @@
             return false;
         }
         function checkGrammarAccessor(accessor) {
-            if (!(accessor.flags & 8388608 /* Ambient */) && (accessor.parent.kind !== 178 /* TypeLiteral */) && (accessor.parent.kind !== 254 /* InterfaceDeclaration */)) {
+            if (!(accessor.flags & 8388608 /* Ambient */) && (accessor.parent.kind !== 180 /* TypeLiteral */) && (accessor.parent.kind !== 256 /* InterfaceDeclaration */)) {
                 if (languageVersion < 1 /* ES5 */) {
                     return grammarErrorOnNode(accessor.name, ts.Diagnostics.Accessors_are_only_available_when_targeting_ECMAScript_5_and_higher);
                 }
@@ -82838,7 +84402,7 @@
                 if (ts.hasSyntacticModifier(accessor, 128 /* Abstract */)) {
                     return grammarErrorOnNode(accessor, ts.Diagnostics.An_abstract_accessor_cannot_have_an_implementation);
                 }
-                if (accessor.parent.kind === 178 /* TypeLiteral */ || accessor.parent.kind === 254 /* InterfaceDeclaration */) {
+                if (accessor.parent.kind === 180 /* TypeLiteral */ || accessor.parent.kind === 256 /* InterfaceDeclaration */) {
                     return grammarErrorOnNode(accessor.body, ts.Diagnostics.An_implementation_cannot_be_declared_in_ambient_contexts);
                 }
             }
@@ -82846,11 +84410,11 @@
                 return grammarErrorOnNode(accessor.name, ts.Diagnostics.An_accessor_cannot_have_type_parameters);
             }
             if (!doesAccessorHaveCorrectParameterCount(accessor)) {
-                return grammarErrorOnNode(accessor.name, accessor.kind === 168 /* GetAccessor */ ?
+                return grammarErrorOnNode(accessor.name, accessor.kind === 170 /* GetAccessor */ ?
                     ts.Diagnostics.A_get_accessor_cannot_have_parameters :
                     ts.Diagnostics.A_set_accessor_must_have_exactly_one_parameter);
             }
-            if (accessor.kind === 169 /* SetAccessor */) {
+            if (accessor.kind === 171 /* SetAccessor */) {
                 if (accessor.type) {
                     return grammarErrorOnNode(accessor.name, ts.Diagnostics.A_set_accessor_cannot_have_a_return_type_annotation);
                 }
@@ -82872,17 +84436,17 @@
          * A set accessor has one parameter or a `this` parameter and one more parameter.
          */
         function doesAccessorHaveCorrectParameterCount(accessor) {
-            return getAccessorThisParameter(accessor) || accessor.parameters.length === (accessor.kind === 168 /* GetAccessor */ ? 0 : 1);
+            return getAccessorThisParameter(accessor) || accessor.parameters.length === (accessor.kind === 170 /* GetAccessor */ ? 0 : 1);
         }
         function getAccessorThisParameter(accessor) {
-            if (accessor.parameters.length === (accessor.kind === 168 /* GetAccessor */ ? 1 : 2)) {
+            if (accessor.parameters.length === (accessor.kind === 170 /* GetAccessor */ ? 1 : 2)) {
                 return ts.getThisParameter(accessor);
             }
         }
         function checkGrammarTypeOperatorNode(node) {
-            if (node.operator === 151 /* UniqueKeyword */) {
-                if (node.type.kind !== 148 /* SymbolKeyword */) {
-                    return grammarErrorOnNode(node.type, ts.Diagnostics._0_expected, ts.tokenToString(148 /* SymbolKeyword */));
+            if (node.operator === 152 /* UniqueKeyword */) {
+                if (node.type.kind !== 149 /* SymbolKeyword */) {
+                    return grammarErrorOnNode(node.type, ts.Diagnostics._0_expected, ts.tokenToString(149 /* SymbolKeyword */));
                 }
                 var parent = ts.walkUpParenthesizedTypes(node.parent);
                 if (ts.isInJSFile(parent) && ts.isJSDocTypeExpression(parent)) {
@@ -82893,9 +84457,9 @@
                     }
                 }
                 switch (parent.kind) {
-                    case 250 /* VariableDeclaration */:
+                    case 252 /* VariableDeclaration */:
                         var decl = parent;
-                        if (decl.name.kind !== 78 /* Identifier */) {
+                        if (decl.name.kind !== 79 /* Identifier */) {
                             return grammarErrorOnNode(node, ts.Diagnostics.unique_symbol_types_may_not_be_used_on_a_variable_declaration_with_a_binding_name);
                         }
                         if (!ts.isVariableDeclarationInVariableStatement(decl)) {
@@ -82905,13 +84469,13 @@
                             return grammarErrorOnNode(parent.name, ts.Diagnostics.A_variable_whose_type_is_a_unique_symbol_type_must_be_const);
                         }
                         break;
-                    case 164 /* PropertyDeclaration */:
-                        if (!ts.hasSyntacticModifier(parent, 32 /* Static */) ||
-                            !ts.hasEffectiveModifier(parent, 64 /* Readonly */)) {
+                    case 165 /* PropertyDeclaration */:
+                        if (!ts.isStatic(parent) ||
+                            !ts.hasEffectiveReadonlyModifier(parent)) {
                             return grammarErrorOnNode(parent.name, ts.Diagnostics.A_property_of_a_class_whose_type_is_a_unique_symbol_type_must_be_both_static_and_readonly);
                         }
                         break;
-                    case 163 /* PropertySignature */:
+                    case 164 /* PropertySignature */:
                         if (!ts.hasSyntacticModifier(parent, 64 /* Readonly */)) {
                             return grammarErrorOnNode(parent.name, ts.Diagnostics.A_property_of_an_interface_or_type_literal_whose_type_is_a_unique_symbol_type_must_be_readonly);
                         }
@@ -82920,9 +84484,9 @@
                         return grammarErrorOnNode(node, ts.Diagnostics.unique_symbol_types_are_not_allowed_here);
                 }
             }
-            else if (node.operator === 142 /* ReadonlyKeyword */) {
-                if (node.type.kind !== 179 /* ArrayType */ && node.type.kind !== 180 /* TupleType */) {
-                    return grammarErrorOnFirstToken(node, ts.Diagnostics.readonly_type_modifier_is_only_permitted_on_array_and_tuple_literal_types, ts.tokenToString(148 /* SymbolKeyword */));
+            else if (node.operator === 143 /* ReadonlyKeyword */) {
+                if (node.type.kind !== 181 /* ArrayType */ && node.type.kind !== 182 /* TupleType */) {
+                    return grammarErrorOnFirstToken(node, ts.Diagnostics.readonly_type_modifier_is_only_permitted_on_array_and_tuple_literal_types, ts.tokenToString(149 /* SymbolKeyword */));
                 }
             }
         }
@@ -82935,10 +84499,10 @@
             if (checkGrammarFunctionLikeDeclaration(node)) {
                 return true;
             }
-            if (node.kind === 166 /* MethodDeclaration */) {
-                if (node.parent.kind === 201 /* ObjectLiteralExpression */) {
+            if (node.kind === 167 /* MethodDeclaration */) {
+                if (node.parent.kind === 203 /* ObjectLiteralExpression */) {
                     // We only disallow modifier on a method declaration if it is a property of object-literal-expression
-                    if (node.modifiers && !(node.modifiers.length === 1 && ts.first(node.modifiers).kind === 129 /* AsyncKeyword */)) {
+                    if (node.modifiers && !(node.modifiers.length === 1 && ts.first(node.modifiers).kind === 130 /* AsyncKeyword */)) {
                         return grammarErrorOnFirstToken(node, ts.Diagnostics.Modifiers_cannot_appear_here);
                     }
                     else if (checkGrammarForInvalidQuestionMark(node.questionToken, ts.Diagnostics.An_object_member_cannot_be_declared_optional)) {
@@ -82967,29 +84531,29 @@
                 if (node.flags & 8388608 /* Ambient */) {
                     return checkGrammarForInvalidDynamicName(node.name, ts.Diagnostics.A_computed_property_name_in_an_ambient_context_must_refer_to_an_expression_whose_type_is_a_literal_type_or_a_unique_symbol_type);
                 }
-                else if (node.kind === 166 /* MethodDeclaration */ && !node.body) {
+                else if (node.kind === 167 /* MethodDeclaration */ && !node.body) {
                     return checkGrammarForInvalidDynamicName(node.name, ts.Diagnostics.A_computed_property_name_in_a_method_overload_must_refer_to_an_expression_whose_type_is_a_literal_type_or_a_unique_symbol_type);
                 }
             }
-            else if (node.parent.kind === 254 /* InterfaceDeclaration */) {
+            else if (node.parent.kind === 256 /* InterfaceDeclaration */) {
                 return checkGrammarForInvalidDynamicName(node.name, ts.Diagnostics.A_computed_property_name_in_an_interface_must_refer_to_an_expression_whose_type_is_a_literal_type_or_a_unique_symbol_type);
             }
-            else if (node.parent.kind === 178 /* TypeLiteral */) {
+            else if (node.parent.kind === 180 /* TypeLiteral */) {
                 return checkGrammarForInvalidDynamicName(node.name, ts.Diagnostics.A_computed_property_name_in_a_type_literal_must_refer_to_an_expression_whose_type_is_a_literal_type_or_a_unique_symbol_type);
             }
         }
         function checkGrammarBreakOrContinueStatement(node) {
             var current = node;
             while (current) {
-                if (ts.isFunctionLike(current)) {
+                if (ts.isFunctionLikeOrClassStaticBlockDeclaration(current)) {
                     return grammarErrorOnNode(node, ts.Diagnostics.Jump_target_cannot_cross_function_boundary);
                 }
                 switch (current.kind) {
-                    case 246 /* LabeledStatement */:
+                    case 248 /* LabeledStatement */:
                         if (node.label && current.label.escapedText === node.label.escapedText) {
                             // found matching label - verify that label usage is correct
                             // continue can only target labels that are on iteration statements
-                            var isMisplacedContinueLabel = node.kind === 241 /* ContinueStatement */
+                            var isMisplacedContinueLabel = node.kind === 243 /* ContinueStatement */
                                 && !ts.isIterationStatement(current.statement, /*lookInLabeledStatement*/ true);
                             if (isMisplacedContinueLabel) {
                                 return grammarErrorOnNode(node, ts.Diagnostics.A_continue_statement_can_only_jump_to_a_label_of_an_enclosing_iteration_statement);
@@ -82997,8 +84561,8 @@
                             return false;
                         }
                         break;
-                    case 245 /* SwitchStatement */:
-                        if (node.kind === 242 /* BreakStatement */ && !node.label) {
+                    case 247 /* SwitchStatement */:
+                        if (node.kind === 244 /* BreakStatement */ && !node.label) {
                             // unlabeled break within switch statement - ok
                             return false;
                         }
@@ -83013,13 +84577,13 @@
                 current = current.parent;
             }
             if (node.label) {
-                var message = node.kind === 242 /* BreakStatement */
+                var message = node.kind === 244 /* BreakStatement */
                     ? ts.Diagnostics.A_break_statement_can_only_jump_to_a_label_of_an_enclosing_statement
                     : ts.Diagnostics.A_continue_statement_can_only_jump_to_a_label_of_an_enclosing_iteration_statement;
                 return grammarErrorOnNode(node, message);
             }
             else {
-                var message = node.kind === 242 /* BreakStatement */
+                var message = node.kind === 244 /* BreakStatement */
                     ? ts.Diagnostics.A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement
                     : ts.Diagnostics.A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement;
                 return grammarErrorOnNode(node, message);
@@ -83043,12 +84607,12 @@
         }
         function isStringOrNumberLiteralExpression(expr) {
             return ts.isStringOrNumericLiteralLike(expr) ||
-                expr.kind === 215 /* PrefixUnaryExpression */ && expr.operator === 40 /* MinusToken */ &&
+                expr.kind === 217 /* PrefixUnaryExpression */ && expr.operator === 40 /* MinusToken */ &&
                     expr.operand.kind === 8 /* NumericLiteral */;
         }
         function isBigIntLiteralExpression(expr) {
             return expr.kind === 9 /* BigIntLiteral */ ||
-                expr.kind === 215 /* PrefixUnaryExpression */ && expr.operator === 40 /* MinusToken */ &&
+                expr.kind === 217 /* PrefixUnaryExpression */ && expr.operator === 40 /* MinusToken */ &&
                     expr.operand.kind === 9 /* BigIntLiteral */;
         }
         function isSimpleLiteralEnumReference(expr) {
@@ -83062,7 +84626,7 @@
             if (initializer) {
                 var isInvalidInitializer = !(isStringOrNumberLiteralExpression(initializer) ||
                     isSimpleLiteralEnumReference(initializer) ||
-                    initializer.kind === 109 /* TrueKeyword */ || initializer.kind === 94 /* FalseKeyword */ ||
+                    initializer.kind === 110 /* TrueKeyword */ || initializer.kind === 95 /* FalseKeyword */ ||
                     isBigIntLiteralExpression(initializer));
                 var isConstOrReadonly = ts.isDeclarationReadonly(node) || ts.isVariableDeclaration(node) && ts.isVarConst(node);
                 if (isConstOrReadonly && !node.type) {
@@ -83079,7 +84643,7 @@
             }
         }
         function checkGrammarVariableDeclaration(node) {
-            if (node.parent.parent.kind !== 239 /* ForInStatement */ && node.parent.parent.kind !== 240 /* ForOfStatement */) {
+            if (node.parent.parent.kind !== 241 /* ForInStatement */ && node.parent.parent.kind !== 242 /* ForOfStatement */) {
                 if (node.flags & 8388608 /* Ambient */) {
                     checkAmbientInitializer(node);
                 }
@@ -83092,7 +84656,7 @@
                     }
                 }
             }
-            if (node.exclamationToken && (node.parent.parent.kind !== 233 /* VariableStatement */ || !node.type || node.initializer || node.flags & 8388608 /* Ambient */)) {
+            if (node.exclamationToken && (node.parent.parent.kind !== 235 /* VariableStatement */ || !node.type || node.initializer || node.flags & 8388608 /* Ambient */)) {
                 var message = node.initializer
                     ? ts.Diagnostics.Declarations_with_initializers_cannot_also_have_definite_assignment_assertions
                     : !node.type
@@ -83115,7 +84679,7 @@
             return checkLetConstNames && checkGrammarNameInLetOrConstDeclarations(node.name);
         }
         function checkESModuleMarker(name) {
-            if (name.kind === 78 /* Identifier */) {
+            if (name.kind === 79 /* Identifier */) {
                 if (ts.idText(name) === "__esModule") {
                     return grammarErrorOnNodeSkippedOn("noEmit", name, ts.Diagnostics.Identifier_expected_esModule_is_reserved_as_an_exported_marker_when_transforming_ECMAScript_modules);
                 }
@@ -83132,8 +84696,8 @@
             return false;
         }
         function checkGrammarNameInLetOrConstDeclarations(name) {
-            if (name.kind === 78 /* Identifier */) {
-                if (name.originalKeywordKind === 118 /* LetKeyword */) {
+            if (name.kind === 79 /* Identifier */) {
+                if (name.originalKeywordKind === 119 /* LetKeyword */) {
                     return grammarErrorOnNode(name, ts.Diagnostics.let_is_not_allowed_to_be_used_as_a_name_in_let_or_const_declarations);
                 }
             }
@@ -83160,15 +84724,15 @@
         }
         function allowLetAndConstDeclarations(parent) {
             switch (parent.kind) {
-                case 235 /* IfStatement */:
-                case 236 /* DoStatement */:
-                case 237 /* WhileStatement */:
-                case 244 /* WithStatement */:
-                case 238 /* ForStatement */:
-                case 239 /* ForInStatement */:
-                case 240 /* ForOfStatement */:
+                case 237 /* IfStatement */:
+                case 238 /* DoStatement */:
+                case 239 /* WhileStatement */:
+                case 246 /* WithStatement */:
+                case 240 /* ForStatement */:
+                case 241 /* ForInStatement */:
+                case 242 /* ForOfStatement */:
                     return false;
-                case 246 /* LabeledStatement */:
+                case 248 /* LabeledStatement */:
                     return allowLetAndConstDeclarations(parent.parent);
             }
             return true;
@@ -83186,12 +84750,12 @@
         function checkGrammarMetaProperty(node) {
             var escapedText = node.name.escapedText;
             switch (node.keywordToken) {
-                case 102 /* NewKeyword */:
+                case 103 /* NewKeyword */:
                     if (escapedText !== "target") {
                         return grammarErrorOnNode(node.name, ts.Diagnostics._0_is_not_a_valid_meta_property_for_keyword_1_Did_you_mean_2, node.name.escapedText, ts.tokenToString(node.keywordToken), "target");
                     }
                     break;
-                case 99 /* ImportKeyword */:
+                case 100 /* ImportKeyword */:
                     if (escapedText !== "meta") {
                         return grammarErrorOnNode(node.name, ts.Diagnostics._0_is_not_a_valid_meta_property_for_keyword_1_Did_you_mean_2, node.name.escapedText, ts.tokenToString(node.keywordToken), "meta");
                     }
@@ -83260,7 +84824,7 @@
                     return grammarErrorOnNode(node.name, ts.Diagnostics.Private_identifiers_are_only_available_when_targeting_ECMAScript_2015_and_higher);
                 }
             }
-            else if (node.parent.kind === 254 /* InterfaceDeclaration */) {
+            else if (node.parent.kind === 256 /* InterfaceDeclaration */) {
                 if (checkGrammarForInvalidDynamicName(node.name, ts.Diagnostics.A_computed_property_name_in_an_interface_must_refer_to_an_expression_whose_type_is_a_literal_type_or_a_unique_symbol_type)) {
                     return true;
                 }
@@ -83268,7 +84832,7 @@
                     return grammarErrorOnNode(node.initializer, ts.Diagnostics.An_interface_property_cannot_have_an_initializer);
                 }
             }
-            else if (node.parent.kind === 178 /* TypeLiteral */) {
+            else if (node.parent.kind === 180 /* TypeLiteral */) {
                 if (checkGrammarForInvalidDynamicName(node.name, ts.Diagnostics.A_computed_property_name_in_a_type_literal_must_refer_to_an_expression_whose_type_is_a_literal_type_or_a_unique_symbol_type)) {
                     return true;
                 }
@@ -83280,7 +84844,7 @@
                 checkAmbientInitializer(node);
             }
             if (ts.isPropertyDeclaration(node) && node.exclamationToken && (!ts.isClassLike(node.parent) || !node.type || node.initializer ||
-                node.flags & 8388608 /* Ambient */ || ts.hasSyntacticModifier(node, 32 /* Static */ | 128 /* Abstract */))) {
+                node.flags & 8388608 /* Ambient */ || ts.isStatic(node) || ts.hasAbstractModifier(node))) {
                 var message = node.initializer
                     ? ts.Diagnostics.Declarations_with_initializers_cannot_also_have_definite_assignment_assertions
                     : !node.type
@@ -83302,13 +84866,13 @@
             //     export_opt   AmbientDeclaration
             //
             // TODO: The spec needs to be amended to reflect this grammar.
-            if (node.kind === 254 /* InterfaceDeclaration */ ||
-                node.kind === 255 /* TypeAliasDeclaration */ ||
-                node.kind === 262 /* ImportDeclaration */ ||
-                node.kind === 261 /* ImportEqualsDeclaration */ ||
-                node.kind === 268 /* ExportDeclaration */ ||
-                node.kind === 267 /* ExportAssignment */ ||
-                node.kind === 260 /* NamespaceExportDeclaration */ ||
+            if (node.kind === 256 /* InterfaceDeclaration */ ||
+                node.kind === 257 /* TypeAliasDeclaration */ ||
+                node.kind === 264 /* ImportDeclaration */ ||
+                node.kind === 263 /* ImportEqualsDeclaration */ ||
+                node.kind === 270 /* ExportDeclaration */ ||
+                node.kind === 269 /* ExportAssignment */ ||
+                node.kind === 262 /* NamespaceExportDeclaration */ ||
                 ts.hasSyntacticModifier(node, 2 /* Ambient */ | 1 /* Export */ | 512 /* Default */)) {
                 return false;
             }
@@ -83317,7 +84881,7 @@
         function checkGrammarTopLevelElementsForRequiredDeclareModifier(file) {
             for (var _i = 0, _a = file.statements; _i < _a.length; _i++) {
                 var decl = _a[_i];
-                if (ts.isDeclaration(decl) || decl.kind === 233 /* VariableStatement */) {
+                if (ts.isDeclaration(decl) || decl.kind === 235 /* VariableStatement */) {
                     if (checkGrammarTopLevelElementForRequiredDeclareModifier(decl)) {
                         return true;
                     }
@@ -83340,7 +84904,7 @@
                 // to prevent noisiness.  So use a bit on the block to indicate if
                 // this has already been reported, and don't report if it has.
                 //
-                if (node.parent.kind === 231 /* Block */ || node.parent.kind === 258 /* ModuleBlock */ || node.parent.kind === 298 /* SourceFile */) {
+                if (node.parent.kind === 233 /* Block */ || node.parent.kind === 260 /* ModuleBlock */ || node.parent.kind === 300 /* SourceFile */) {
                     var links_2 = getNodeLinks(node.parent);
                     // Check if the containing block ever report this error
                     if (!links_2.hasReportedStatementInAmbientContext) {
@@ -83362,10 +84926,10 @@
                 if (languageVersion >= 1 /* ES5 */) {
                     diagnosticMessage = ts.Diagnostics.Octal_literals_are_not_available_when_targeting_ECMAScript_5_and_higher_Use_the_syntax_0;
                 }
-                else if (ts.isChildOfNodeWithKind(node, 192 /* LiteralType */)) {
+                else if (ts.isChildOfNodeWithKind(node, 194 /* LiteralType */)) {
                     diagnosticMessage = ts.Diagnostics.Octal_literal_types_must_use_ES2015_syntax_Use_the_syntax_0;
                 }
-                else if (ts.isChildOfNodeWithKind(node, 292 /* EnumMember */)) {
+                else if (ts.isChildOfNodeWithKind(node, 294 /* EnumMember */)) {
                     diagnosticMessage = ts.Diagnostics.Octal_literals_are_not_allowed_in_enums_members_initializer_Use_the_syntax_0;
                 }
                 if (diagnosticMessage) {
@@ -83544,14 +85108,14 @@
         return !ts.isAccessor(declaration);
     }
     function isNotOverload(declaration) {
-        return (declaration.kind !== 252 /* FunctionDeclaration */ && declaration.kind !== 166 /* MethodDeclaration */) ||
+        return (declaration.kind !== 254 /* FunctionDeclaration */ && declaration.kind !== 167 /* MethodDeclaration */) ||
             !!declaration.body;
     }
     /** Like 'isDeclarationName', but returns true for LHS of `import { x as y }` or `export { x as y }`. */
     function isDeclarationNameOrImportPropertyName(name) {
         switch (name.parent.kind) {
-            case 266 /* ImportSpecifier */:
-            case 271 /* ExportSpecifier */:
+            case 268 /* ImportSpecifier */:
+            case 273 /* ExportSpecifier */:
                 return ts.isIdentifier(name);
             default:
                 return ts.isDeclarationName(name);
@@ -83801,432 +85365,437 @@
         }
         var kind = node.kind;
         // No need to visit nodes with no children.
-        if ((kind > 0 /* FirstToken */ && kind <= 157 /* LastToken */) || kind === 188 /* ThisType */) {
+        if ((kind > 0 /* FirstToken */ && kind <= 158 /* LastToken */) || kind === 190 /* ThisType */) {
             return node;
         }
         var factory = context.factory;
         switch (kind) {
             // Names
-            case 78 /* Identifier */:
+            case 79 /* Identifier */:
                 ts.Debug.type(node);
                 return factory.updateIdentifier(node, nodesVisitor(node.typeArguments, visitor, ts.isTypeNodeOrTypeParameterDeclaration));
-            case 158 /* QualifiedName */:
+            case 159 /* QualifiedName */:
                 ts.Debug.type(node);
                 return factory.updateQualifiedName(node, nodeVisitor(node.left, visitor, ts.isEntityName), nodeVisitor(node.right, visitor, ts.isIdentifier));
-            case 159 /* ComputedPropertyName */:
+            case 160 /* ComputedPropertyName */:
                 ts.Debug.type(node);
                 return factory.updateComputedPropertyName(node, nodeVisitor(node.expression, visitor, ts.isExpression));
             // Signature elements
-            case 160 /* TypeParameter */:
+            case 161 /* TypeParameter */:
                 ts.Debug.type(node);
                 return factory.updateTypeParameterDeclaration(node, nodeVisitor(node.name, visitor, ts.isIdentifier), nodeVisitor(node.constraint, visitor, ts.isTypeNode), nodeVisitor(node.default, visitor, ts.isTypeNode));
-            case 161 /* Parameter */:
+            case 162 /* Parameter */:
                 ts.Debug.type(node);
                 return factory.updateParameterDeclaration(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), nodeVisitor(node.dotDotDotToken, tokenVisitor, ts.isDotDotDotToken), nodeVisitor(node.name, visitor, ts.isBindingName), nodeVisitor(node.questionToken, tokenVisitor, ts.isQuestionToken), nodeVisitor(node.type, visitor, ts.isTypeNode), nodeVisitor(node.initializer, visitor, ts.isExpression));
-            case 162 /* Decorator */:
+            case 163 /* Decorator */:
                 ts.Debug.type(node);
                 return factory.updateDecorator(node, nodeVisitor(node.expression, visitor, ts.isExpression));
             // Type elements
-            case 163 /* PropertySignature */:
+            case 164 /* PropertySignature */:
                 ts.Debug.type(node);
                 return factory.updatePropertySignature(node, nodesVisitor(node.modifiers, visitor, ts.isModifier), nodeVisitor(node.name, visitor, ts.isPropertyName), nodeVisitor(node.questionToken, tokenVisitor, ts.isToken), nodeVisitor(node.type, visitor, ts.isTypeNode));
-            case 164 /* PropertyDeclaration */:
+            case 165 /* PropertyDeclaration */:
                 ts.Debug.type(node);
                 return factory.updatePropertyDeclaration(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), nodeVisitor(node.name, visitor, ts.isPropertyName), 
                 // QuestionToken and ExclamationToken is uniqued in Property Declaration and the signature of 'updateProperty' is that too
                 nodeVisitor(node.questionToken || node.exclamationToken, tokenVisitor, ts.isQuestionOrExclamationToken), nodeVisitor(node.type, visitor, ts.isTypeNode), nodeVisitor(node.initializer, visitor, ts.isExpression));
-            case 165 /* MethodSignature */:
+            case 166 /* MethodSignature */:
                 ts.Debug.type(node);
                 return factory.updateMethodSignature(node, nodesVisitor(node.modifiers, visitor, ts.isModifier), nodeVisitor(node.name, visitor, ts.isPropertyName), nodeVisitor(node.questionToken, tokenVisitor, ts.isQuestionToken), nodesVisitor(node.typeParameters, visitor, ts.isTypeParameterDeclaration), nodesVisitor(node.parameters, visitor, ts.isParameterDeclaration), nodeVisitor(node.type, visitor, ts.isTypeNode));
-            case 166 /* MethodDeclaration */:
+            case 167 /* MethodDeclaration */:
                 ts.Debug.type(node);
                 return factory.updateMethodDeclaration(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), nodeVisitor(node.asteriskToken, tokenVisitor, ts.isAsteriskToken), nodeVisitor(node.name, visitor, ts.isPropertyName), nodeVisitor(node.questionToken, tokenVisitor, ts.isQuestionToken), nodesVisitor(node.typeParameters, visitor, ts.isTypeParameterDeclaration), visitParameterList(node.parameters, visitor, context, nodesVisitor), nodeVisitor(node.type, visitor, ts.isTypeNode), visitFunctionBody(node.body, visitor, context, nodeVisitor));
-            case 167 /* Constructor */:
+            case 169 /* Constructor */:
                 ts.Debug.type(node);
                 return factory.updateConstructorDeclaration(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), visitParameterList(node.parameters, visitor, context, nodesVisitor), visitFunctionBody(node.body, visitor, context, nodeVisitor));
-            case 168 /* GetAccessor */:
+            case 170 /* GetAccessor */:
                 ts.Debug.type(node);
                 return factory.updateGetAccessorDeclaration(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), nodeVisitor(node.name, visitor, ts.isPropertyName), visitParameterList(node.parameters, visitor, context, nodesVisitor), nodeVisitor(node.type, visitor, ts.isTypeNode), visitFunctionBody(node.body, visitor, context, nodeVisitor));
-            case 169 /* SetAccessor */:
+            case 171 /* SetAccessor */:
                 ts.Debug.type(node);
                 return factory.updateSetAccessorDeclaration(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), nodeVisitor(node.name, visitor, ts.isPropertyName), visitParameterList(node.parameters, visitor, context, nodesVisitor), visitFunctionBody(node.body, visitor, context, nodeVisitor));
-            case 170 /* CallSignature */:
+            case 168 /* ClassStaticBlockDeclaration */:
+                ts.Debug.type(node);
+                context.startLexicalEnvironment();
+                context.suspendLexicalEnvironment();
+                return factory.updateClassStaticBlockDeclaration(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), visitFunctionBody(node.body, visitor, context, nodeVisitor));
+            case 172 /* CallSignature */:
                 ts.Debug.type(node);
                 return factory.updateCallSignature(node, nodesVisitor(node.typeParameters, visitor, ts.isTypeParameterDeclaration), nodesVisitor(node.parameters, visitor, ts.isParameterDeclaration), nodeVisitor(node.type, visitor, ts.isTypeNode));
-            case 171 /* ConstructSignature */:
+            case 173 /* ConstructSignature */:
                 ts.Debug.type(node);
                 return factory.updateConstructSignature(node, nodesVisitor(node.typeParameters, visitor, ts.isTypeParameterDeclaration), nodesVisitor(node.parameters, visitor, ts.isParameterDeclaration), nodeVisitor(node.type, visitor, ts.isTypeNode));
-            case 172 /* IndexSignature */:
+            case 174 /* IndexSignature */:
                 ts.Debug.type(node);
                 return factory.updateIndexSignature(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), nodesVisitor(node.parameters, visitor, ts.isParameterDeclaration), nodeVisitor(node.type, visitor, ts.isTypeNode));
             // Types
-            case 173 /* TypePredicate */:
+            case 175 /* TypePredicate */:
                 ts.Debug.type(node);
                 return factory.updateTypePredicateNode(node, nodeVisitor(node.assertsModifier, visitor, ts.isAssertsKeyword), nodeVisitor(node.parameterName, visitor, ts.isIdentifierOrThisTypeNode), nodeVisitor(node.type, visitor, ts.isTypeNode));
-            case 174 /* TypeReference */:
+            case 176 /* TypeReference */:
                 ts.Debug.type(node);
                 return factory.updateTypeReferenceNode(node, nodeVisitor(node.typeName, visitor, ts.isEntityName), nodesVisitor(node.typeArguments, visitor, ts.isTypeNode));
-            case 175 /* FunctionType */:
+            case 177 /* FunctionType */:
                 ts.Debug.type(node);
                 return factory.updateFunctionTypeNode(node, nodesVisitor(node.typeParameters, visitor, ts.isTypeParameterDeclaration), nodesVisitor(node.parameters, visitor, ts.isParameterDeclaration), nodeVisitor(node.type, visitor, ts.isTypeNode));
-            case 176 /* ConstructorType */:
+            case 178 /* ConstructorType */:
                 ts.Debug.type(node);
                 return factory.updateConstructorTypeNode(node, nodesVisitor(node.modifiers, visitor, ts.isModifier), nodesVisitor(node.typeParameters, visitor, ts.isTypeParameterDeclaration), nodesVisitor(node.parameters, visitor, ts.isParameterDeclaration), nodeVisitor(node.type, visitor, ts.isTypeNode));
-            case 177 /* TypeQuery */:
+            case 179 /* TypeQuery */:
                 ts.Debug.type(node);
                 return factory.updateTypeQueryNode(node, nodeVisitor(node.exprName, visitor, ts.isEntityName));
-            case 178 /* TypeLiteral */:
+            case 180 /* TypeLiteral */:
                 ts.Debug.type(node);
                 return factory.updateTypeLiteralNode(node, nodesVisitor(node.members, visitor, ts.isTypeElement));
-            case 179 /* ArrayType */:
+            case 181 /* ArrayType */:
                 ts.Debug.type(node);
                 return factory.updateArrayTypeNode(node, nodeVisitor(node.elementType, visitor, ts.isTypeNode));
-            case 180 /* TupleType */:
+            case 182 /* TupleType */:
                 ts.Debug.type(node);
                 return factory.updateTupleTypeNode(node, nodesVisitor(node.elements, visitor, ts.isTypeNode));
-            case 181 /* OptionalType */:
+            case 183 /* OptionalType */:
                 ts.Debug.type(node);
                 return factory.updateOptionalTypeNode(node, nodeVisitor(node.type, visitor, ts.isTypeNode));
-            case 182 /* RestType */:
+            case 184 /* RestType */:
                 ts.Debug.type(node);
                 return factory.updateRestTypeNode(node, nodeVisitor(node.type, visitor, ts.isTypeNode));
-            case 183 /* UnionType */:
+            case 185 /* UnionType */:
                 ts.Debug.type(node);
                 return factory.updateUnionTypeNode(node, nodesVisitor(node.types, visitor, ts.isTypeNode));
-            case 184 /* IntersectionType */:
+            case 186 /* IntersectionType */:
                 ts.Debug.type(node);
                 return factory.updateIntersectionTypeNode(node, nodesVisitor(node.types, visitor, ts.isTypeNode));
-            case 185 /* ConditionalType */:
+            case 187 /* ConditionalType */:
                 ts.Debug.type(node);
                 return factory.updateConditionalTypeNode(node, nodeVisitor(node.checkType, visitor, ts.isTypeNode), nodeVisitor(node.extendsType, visitor, ts.isTypeNode), nodeVisitor(node.trueType, visitor, ts.isTypeNode), nodeVisitor(node.falseType, visitor, ts.isTypeNode));
-            case 186 /* InferType */:
+            case 188 /* InferType */:
                 ts.Debug.type(node);
                 return factory.updateInferTypeNode(node, nodeVisitor(node.typeParameter, visitor, ts.isTypeParameterDeclaration));
-            case 196 /* ImportType */:
+            case 198 /* ImportType */:
                 ts.Debug.type(node);
                 return factory.updateImportTypeNode(node, nodeVisitor(node.argument, visitor, ts.isTypeNode), nodeVisitor(node.qualifier, visitor, ts.isEntityName), visitNodes(node.typeArguments, visitor, ts.isTypeNode), node.isTypeOf);
-            case 193 /* NamedTupleMember */:
+            case 195 /* NamedTupleMember */:
                 ts.Debug.type(node);
                 return factory.updateNamedTupleMember(node, visitNode(node.dotDotDotToken, visitor, ts.isDotDotDotToken), visitNode(node.name, visitor, ts.isIdentifier), visitNode(node.questionToken, visitor, ts.isQuestionToken), visitNode(node.type, visitor, ts.isTypeNode));
-            case 187 /* ParenthesizedType */:
+            case 189 /* ParenthesizedType */:
                 ts.Debug.type(node);
                 return factory.updateParenthesizedType(node, nodeVisitor(node.type, visitor, ts.isTypeNode));
-            case 189 /* TypeOperator */:
+            case 191 /* TypeOperator */:
                 ts.Debug.type(node);
                 return factory.updateTypeOperatorNode(node, nodeVisitor(node.type, visitor, ts.isTypeNode));
-            case 190 /* IndexedAccessType */:
+            case 192 /* IndexedAccessType */:
                 ts.Debug.type(node);
                 return factory.updateIndexedAccessTypeNode(node, nodeVisitor(node.objectType, visitor, ts.isTypeNode), nodeVisitor(node.indexType, visitor, ts.isTypeNode));
-            case 191 /* MappedType */:
+            case 193 /* MappedType */:
                 ts.Debug.type(node);
                 return factory.updateMappedTypeNode(node, nodeVisitor(node.readonlyToken, tokenVisitor, ts.isReadonlyKeywordOrPlusOrMinusToken), nodeVisitor(node.typeParameter, visitor, ts.isTypeParameterDeclaration), nodeVisitor(node.nameType, visitor, ts.isTypeNode), nodeVisitor(node.questionToken, tokenVisitor, ts.isQuestionOrPlusOrMinusToken), nodeVisitor(node.type, visitor, ts.isTypeNode));
-            case 192 /* LiteralType */:
+            case 194 /* LiteralType */:
                 ts.Debug.type(node);
                 return factory.updateLiteralTypeNode(node, nodeVisitor(node.literal, visitor, ts.isExpression));
-            case 194 /* TemplateLiteralType */:
+            case 196 /* TemplateLiteralType */:
                 ts.Debug.type(node);
                 return factory.updateTemplateLiteralType(node, nodeVisitor(node.head, visitor, ts.isTemplateHead), nodesVisitor(node.templateSpans, visitor, ts.isTemplateLiteralTypeSpan));
-            case 195 /* TemplateLiteralTypeSpan */:
+            case 197 /* TemplateLiteralTypeSpan */:
                 ts.Debug.type(node);
                 return factory.updateTemplateLiteralTypeSpan(node, nodeVisitor(node.type, visitor, ts.isTypeNode), nodeVisitor(node.literal, visitor, ts.isTemplateMiddleOrTemplateTail));
             // Binding patterns
-            case 197 /* ObjectBindingPattern */:
+            case 199 /* ObjectBindingPattern */:
                 ts.Debug.type(node);
                 return factory.updateObjectBindingPattern(node, nodesVisitor(node.elements, visitor, ts.isBindingElement));
-            case 198 /* ArrayBindingPattern */:
+            case 200 /* ArrayBindingPattern */:
                 ts.Debug.type(node);
                 return factory.updateArrayBindingPattern(node, nodesVisitor(node.elements, visitor, ts.isArrayBindingElement));
-            case 199 /* BindingElement */:
+            case 201 /* BindingElement */:
                 ts.Debug.type(node);
                 return factory.updateBindingElement(node, nodeVisitor(node.dotDotDotToken, tokenVisitor, ts.isDotDotDotToken), nodeVisitor(node.propertyName, visitor, ts.isPropertyName), nodeVisitor(node.name, visitor, ts.isBindingName), nodeVisitor(node.initializer, visitor, ts.isExpression));
             // Expression
-            case 200 /* ArrayLiteralExpression */:
+            case 202 /* ArrayLiteralExpression */:
                 ts.Debug.type(node);
                 return factory.updateArrayLiteralExpression(node, nodesVisitor(node.elements, visitor, ts.isExpression));
-            case 201 /* ObjectLiteralExpression */:
+            case 203 /* ObjectLiteralExpression */:
                 ts.Debug.type(node);
                 return factory.updateObjectLiteralExpression(node, nodesVisitor(node.properties, visitor, ts.isObjectLiteralElementLike));
-            case 202 /* PropertyAccessExpression */:
+            case 204 /* PropertyAccessExpression */:
                 if (node.flags & 32 /* OptionalChain */) {
                     ts.Debug.type(node);
                     return factory.updatePropertyAccessChain(node, nodeVisitor(node.expression, visitor, ts.isExpression), nodeVisitor(node.questionDotToken, tokenVisitor, ts.isQuestionDotToken), nodeVisitor(node.name, visitor, ts.isMemberName));
                 }
                 ts.Debug.type(node);
                 return factory.updatePropertyAccessExpression(node, nodeVisitor(node.expression, visitor, ts.isExpression), nodeVisitor(node.name, visitor, ts.isMemberName));
-            case 203 /* ElementAccessExpression */:
+            case 205 /* ElementAccessExpression */:
                 if (node.flags & 32 /* OptionalChain */) {
                     ts.Debug.type(node);
                     return factory.updateElementAccessChain(node, nodeVisitor(node.expression, visitor, ts.isExpression), nodeVisitor(node.questionDotToken, tokenVisitor, ts.isQuestionDotToken), nodeVisitor(node.argumentExpression, visitor, ts.isExpression));
                 }
                 ts.Debug.type(node);
                 return factory.updateElementAccessExpression(node, nodeVisitor(node.expression, visitor, ts.isExpression), nodeVisitor(node.argumentExpression, visitor, ts.isExpression));
-            case 204 /* CallExpression */:
+            case 206 /* CallExpression */:
                 if (node.flags & 32 /* OptionalChain */) {
                     ts.Debug.type(node);
                     return factory.updateCallChain(node, nodeVisitor(node.expression, visitor, ts.isExpression), nodeVisitor(node.questionDotToken, tokenVisitor, ts.isQuestionDotToken), nodesVisitor(node.typeArguments, visitor, ts.isTypeNode), nodesVisitor(node.arguments, visitor, ts.isExpression));
                 }
                 ts.Debug.type(node);
                 return factory.updateCallExpression(node, nodeVisitor(node.expression, visitor, ts.isExpression), nodesVisitor(node.typeArguments, visitor, ts.isTypeNode), nodesVisitor(node.arguments, visitor, ts.isExpression));
-            case 205 /* NewExpression */:
+            case 207 /* NewExpression */:
                 ts.Debug.type(node);
                 return factory.updateNewExpression(node, nodeVisitor(node.expression, visitor, ts.isExpression), nodesVisitor(node.typeArguments, visitor, ts.isTypeNode), nodesVisitor(node.arguments, visitor, ts.isExpression));
-            case 206 /* TaggedTemplateExpression */:
+            case 208 /* TaggedTemplateExpression */:
                 ts.Debug.type(node);
                 return factory.updateTaggedTemplateExpression(node, nodeVisitor(node.tag, visitor, ts.isExpression), visitNodes(node.typeArguments, visitor, ts.isTypeNode), nodeVisitor(node.template, visitor, ts.isTemplateLiteral));
-            case 207 /* TypeAssertionExpression */:
+            case 209 /* TypeAssertionExpression */:
                 ts.Debug.type(node);
                 return factory.updateTypeAssertion(node, nodeVisitor(node.type, visitor, ts.isTypeNode), nodeVisitor(node.expression, visitor, ts.isExpression));
-            case 208 /* ParenthesizedExpression */:
+            case 210 /* ParenthesizedExpression */:
                 ts.Debug.type(node);
                 return factory.updateParenthesizedExpression(node, nodeVisitor(node.expression, visitor, ts.isExpression));
-            case 209 /* FunctionExpression */:
+            case 211 /* FunctionExpression */:
                 ts.Debug.type(node);
                 return factory.updateFunctionExpression(node, nodesVisitor(node.modifiers, visitor, ts.isModifier), nodeVisitor(node.asteriskToken, tokenVisitor, ts.isAsteriskToken), nodeVisitor(node.name, visitor, ts.isIdentifier), nodesVisitor(node.typeParameters, visitor, ts.isTypeParameterDeclaration), visitParameterList(node.parameters, visitor, context, nodesVisitor), nodeVisitor(node.type, visitor, ts.isTypeNode), visitFunctionBody(node.body, visitor, context, nodeVisitor));
-            case 210 /* ArrowFunction */:
+            case 212 /* ArrowFunction */:
                 ts.Debug.type(node);
                 return factory.updateArrowFunction(node, nodesVisitor(node.modifiers, visitor, ts.isModifier), nodesVisitor(node.typeParameters, visitor, ts.isTypeParameterDeclaration), visitParameterList(node.parameters, visitor, context, nodesVisitor), nodeVisitor(node.type, visitor, ts.isTypeNode), nodeVisitor(node.equalsGreaterThanToken, tokenVisitor, ts.isEqualsGreaterThanToken), visitFunctionBody(node.body, visitor, context, nodeVisitor));
-            case 211 /* DeleteExpression */:
+            case 213 /* DeleteExpression */:
                 ts.Debug.type(node);
                 return factory.updateDeleteExpression(node, nodeVisitor(node.expression, visitor, ts.isExpression));
-            case 212 /* TypeOfExpression */:
+            case 214 /* TypeOfExpression */:
                 ts.Debug.type(node);
                 return factory.updateTypeOfExpression(node, nodeVisitor(node.expression, visitor, ts.isExpression));
-            case 213 /* VoidExpression */:
+            case 215 /* VoidExpression */:
                 ts.Debug.type(node);
                 return factory.updateVoidExpression(node, nodeVisitor(node.expression, visitor, ts.isExpression));
-            case 214 /* AwaitExpression */:
+            case 216 /* AwaitExpression */:
                 ts.Debug.type(node);
                 return factory.updateAwaitExpression(node, nodeVisitor(node.expression, visitor, ts.isExpression));
-            case 215 /* PrefixUnaryExpression */:
+            case 217 /* PrefixUnaryExpression */:
                 ts.Debug.type(node);
                 return factory.updatePrefixUnaryExpression(node, nodeVisitor(node.operand, visitor, ts.isExpression));
-            case 216 /* PostfixUnaryExpression */:
+            case 218 /* PostfixUnaryExpression */:
                 ts.Debug.type(node);
                 return factory.updatePostfixUnaryExpression(node, nodeVisitor(node.operand, visitor, ts.isExpression));
-            case 217 /* BinaryExpression */:
+            case 219 /* BinaryExpression */:
                 ts.Debug.type(node);
                 return factory.updateBinaryExpression(node, nodeVisitor(node.left, visitor, ts.isExpression), nodeVisitor(node.operatorToken, tokenVisitor, ts.isBinaryOperatorToken), nodeVisitor(node.right, visitor, ts.isExpression));
-            case 218 /* ConditionalExpression */:
+            case 220 /* ConditionalExpression */:
                 ts.Debug.type(node);
                 return factory.updateConditionalExpression(node, nodeVisitor(node.condition, visitor, ts.isExpression), nodeVisitor(node.questionToken, tokenVisitor, ts.isQuestionToken), nodeVisitor(node.whenTrue, visitor, ts.isExpression), nodeVisitor(node.colonToken, tokenVisitor, ts.isColonToken), nodeVisitor(node.whenFalse, visitor, ts.isExpression));
-            case 219 /* TemplateExpression */:
+            case 221 /* TemplateExpression */:
                 ts.Debug.type(node);
                 return factory.updateTemplateExpression(node, nodeVisitor(node.head, visitor, ts.isTemplateHead), nodesVisitor(node.templateSpans, visitor, ts.isTemplateSpan));
-            case 220 /* YieldExpression */:
+            case 222 /* YieldExpression */:
                 ts.Debug.type(node);
                 return factory.updateYieldExpression(node, nodeVisitor(node.asteriskToken, tokenVisitor, ts.isAsteriskToken), nodeVisitor(node.expression, visitor, ts.isExpression));
-            case 221 /* SpreadElement */:
+            case 223 /* SpreadElement */:
                 ts.Debug.type(node);
                 return factory.updateSpreadElement(node, nodeVisitor(node.expression, visitor, ts.isExpression));
-            case 222 /* ClassExpression */:
+            case 224 /* ClassExpression */:
                 ts.Debug.type(node);
                 return factory.updateClassExpression(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), nodeVisitor(node.name, visitor, ts.isIdentifier), nodesVisitor(node.typeParameters, visitor, ts.isTypeParameterDeclaration), nodesVisitor(node.heritageClauses, visitor, ts.isHeritageClause), nodesVisitor(node.members, visitor, ts.isClassElement));
-            case 224 /* ExpressionWithTypeArguments */:
+            case 226 /* ExpressionWithTypeArguments */:
                 ts.Debug.type(node);
                 return factory.updateExpressionWithTypeArguments(node, nodeVisitor(node.expression, visitor, ts.isExpression), nodesVisitor(node.typeArguments, visitor, ts.isTypeNode));
-            case 225 /* AsExpression */:
+            case 227 /* AsExpression */:
                 ts.Debug.type(node);
                 return factory.updateAsExpression(node, nodeVisitor(node.expression, visitor, ts.isExpression), nodeVisitor(node.type, visitor, ts.isTypeNode));
-            case 226 /* NonNullExpression */:
+            case 228 /* NonNullExpression */:
                 if (node.flags & 32 /* OptionalChain */) {
                     ts.Debug.type(node);
                     return factory.updateNonNullChain(node, nodeVisitor(node.expression, visitor, ts.isExpression));
                 }
                 ts.Debug.type(node);
                 return factory.updateNonNullExpression(node, nodeVisitor(node.expression, visitor, ts.isExpression));
-            case 227 /* MetaProperty */:
+            case 229 /* MetaProperty */:
                 ts.Debug.type(node);
                 return factory.updateMetaProperty(node, nodeVisitor(node.name, visitor, ts.isIdentifier));
             // Misc
-            case 229 /* TemplateSpan */:
+            case 231 /* TemplateSpan */:
                 ts.Debug.type(node);
                 return factory.updateTemplateSpan(node, nodeVisitor(node.expression, visitor, ts.isExpression), nodeVisitor(node.literal, visitor, ts.isTemplateMiddleOrTemplateTail));
             // Element
-            case 231 /* Block */:
+            case 233 /* Block */:
                 ts.Debug.type(node);
                 return factory.updateBlock(node, nodesVisitor(node.statements, visitor, ts.isStatement));
-            case 233 /* VariableStatement */:
+            case 235 /* VariableStatement */:
                 ts.Debug.type(node);
                 return factory.updateVariableStatement(node, nodesVisitor(node.modifiers, visitor, ts.isModifier), nodeVisitor(node.declarationList, visitor, ts.isVariableDeclarationList));
-            case 234 /* ExpressionStatement */:
+            case 236 /* ExpressionStatement */:
                 ts.Debug.type(node);
                 return factory.updateExpressionStatement(node, nodeVisitor(node.expression, visitor, ts.isExpression));
-            case 235 /* IfStatement */:
+            case 237 /* IfStatement */:
                 ts.Debug.type(node);
                 return factory.updateIfStatement(node, nodeVisitor(node.expression, visitor, ts.isExpression), nodeVisitor(node.thenStatement, visitor, ts.isStatement, factory.liftToBlock), nodeVisitor(node.elseStatement, visitor, ts.isStatement, factory.liftToBlock));
-            case 236 /* DoStatement */:
+            case 238 /* DoStatement */:
                 ts.Debug.type(node);
                 return factory.updateDoStatement(node, visitIterationBody(node.statement, visitor, context), nodeVisitor(node.expression, visitor, ts.isExpression));
-            case 237 /* WhileStatement */:
+            case 239 /* WhileStatement */:
                 ts.Debug.type(node);
                 return factory.updateWhileStatement(node, nodeVisitor(node.expression, visitor, ts.isExpression), visitIterationBody(node.statement, visitor, context));
-            case 238 /* ForStatement */:
+            case 240 /* ForStatement */:
                 ts.Debug.type(node);
                 return factory.updateForStatement(node, nodeVisitor(node.initializer, visitor, ts.isForInitializer), nodeVisitor(node.condition, visitor, ts.isExpression), nodeVisitor(node.incrementor, visitor, ts.isExpression), visitIterationBody(node.statement, visitor, context));
-            case 239 /* ForInStatement */:
+            case 241 /* ForInStatement */:
                 ts.Debug.type(node);
                 return factory.updateForInStatement(node, nodeVisitor(node.initializer, visitor, ts.isForInitializer), nodeVisitor(node.expression, visitor, ts.isExpression), visitIterationBody(node.statement, visitor, context));
-            case 240 /* ForOfStatement */:
+            case 242 /* ForOfStatement */:
                 ts.Debug.type(node);
                 return factory.updateForOfStatement(node, nodeVisitor(node.awaitModifier, tokenVisitor, ts.isAwaitKeyword), nodeVisitor(node.initializer, visitor, ts.isForInitializer), nodeVisitor(node.expression, visitor, ts.isExpression), visitIterationBody(node.statement, visitor, context));
-            case 241 /* ContinueStatement */:
+            case 243 /* ContinueStatement */:
                 ts.Debug.type(node);
                 return factory.updateContinueStatement(node, nodeVisitor(node.label, visitor, ts.isIdentifier));
-            case 242 /* BreakStatement */:
+            case 244 /* BreakStatement */:
                 ts.Debug.type(node);
                 return factory.updateBreakStatement(node, nodeVisitor(node.label, visitor, ts.isIdentifier));
-            case 243 /* ReturnStatement */:
+            case 245 /* ReturnStatement */:
                 ts.Debug.type(node);
                 return factory.updateReturnStatement(node, nodeVisitor(node.expression, visitor, ts.isExpression));
-            case 244 /* WithStatement */:
+            case 246 /* WithStatement */:
                 ts.Debug.type(node);
                 return factory.updateWithStatement(node, nodeVisitor(node.expression, visitor, ts.isExpression), nodeVisitor(node.statement, visitor, ts.isStatement, factory.liftToBlock));
-            case 245 /* SwitchStatement */:
+            case 247 /* SwitchStatement */:
                 ts.Debug.type(node);
                 return factory.updateSwitchStatement(node, nodeVisitor(node.expression, visitor, ts.isExpression), nodeVisitor(node.caseBlock, visitor, ts.isCaseBlock));
-            case 246 /* LabeledStatement */:
+            case 248 /* LabeledStatement */:
                 ts.Debug.type(node);
                 return factory.updateLabeledStatement(node, nodeVisitor(node.label, visitor, ts.isIdentifier), nodeVisitor(node.statement, visitor, ts.isStatement, factory.liftToBlock));
-            case 247 /* ThrowStatement */:
+            case 249 /* ThrowStatement */:
                 ts.Debug.type(node);
                 return factory.updateThrowStatement(node, nodeVisitor(node.expression, visitor, ts.isExpression));
-            case 248 /* TryStatement */:
+            case 250 /* TryStatement */:
                 ts.Debug.type(node);
                 return factory.updateTryStatement(node, nodeVisitor(node.tryBlock, visitor, ts.isBlock), nodeVisitor(node.catchClause, visitor, ts.isCatchClause), nodeVisitor(node.finallyBlock, visitor, ts.isBlock));
-            case 250 /* VariableDeclaration */:
+            case 252 /* VariableDeclaration */:
                 ts.Debug.type(node);
                 return factory.updateVariableDeclaration(node, nodeVisitor(node.name, visitor, ts.isBindingName), nodeVisitor(node.exclamationToken, tokenVisitor, ts.isExclamationToken), nodeVisitor(node.type, visitor, ts.isTypeNode), nodeVisitor(node.initializer, visitor, ts.isExpression));
-            case 251 /* VariableDeclarationList */:
+            case 253 /* VariableDeclarationList */:
                 ts.Debug.type(node);
                 return factory.updateVariableDeclarationList(node, nodesVisitor(node.declarations, visitor, ts.isVariableDeclaration));
-            case 252 /* FunctionDeclaration */:
+            case 254 /* FunctionDeclaration */:
                 ts.Debug.type(node);
                 return factory.updateFunctionDeclaration(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), nodeVisitor(node.asteriskToken, tokenVisitor, ts.isAsteriskToken), nodeVisitor(node.name, visitor, ts.isIdentifier), nodesVisitor(node.typeParameters, visitor, ts.isTypeParameterDeclaration), visitParameterList(node.parameters, visitor, context, nodesVisitor), nodeVisitor(node.type, visitor, ts.isTypeNode), visitFunctionBody(node.body, visitor, context, nodeVisitor));
-            case 253 /* ClassDeclaration */:
+            case 255 /* ClassDeclaration */:
                 ts.Debug.type(node);
                 return factory.updateClassDeclaration(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), nodeVisitor(node.name, visitor, ts.isIdentifier), nodesVisitor(node.typeParameters, visitor, ts.isTypeParameterDeclaration), nodesVisitor(node.heritageClauses, visitor, ts.isHeritageClause), nodesVisitor(node.members, visitor, ts.isClassElement));
-            case 254 /* InterfaceDeclaration */:
+            case 256 /* InterfaceDeclaration */:
                 ts.Debug.type(node);
                 return factory.updateInterfaceDeclaration(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), nodeVisitor(node.name, visitor, ts.isIdentifier), nodesVisitor(node.typeParameters, visitor, ts.isTypeParameterDeclaration), nodesVisitor(node.heritageClauses, visitor, ts.isHeritageClause), nodesVisitor(node.members, visitor, ts.isTypeElement));
-            case 255 /* TypeAliasDeclaration */:
+            case 257 /* TypeAliasDeclaration */:
                 ts.Debug.type(node);
                 return factory.updateTypeAliasDeclaration(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), nodeVisitor(node.name, visitor, ts.isIdentifier), nodesVisitor(node.typeParameters, visitor, ts.isTypeParameterDeclaration), nodeVisitor(node.type, visitor, ts.isTypeNode));
-            case 256 /* EnumDeclaration */:
+            case 258 /* EnumDeclaration */:
                 ts.Debug.type(node);
                 return factory.updateEnumDeclaration(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), nodeVisitor(node.name, visitor, ts.isIdentifier), nodesVisitor(node.members, visitor, ts.isEnumMember));
-            case 257 /* ModuleDeclaration */:
+            case 259 /* ModuleDeclaration */:
                 ts.Debug.type(node);
                 return factory.updateModuleDeclaration(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), nodeVisitor(node.name, visitor, ts.isModuleName), nodeVisitor(node.body, visitor, ts.isModuleBody));
-            case 258 /* ModuleBlock */:
+            case 260 /* ModuleBlock */:
                 ts.Debug.type(node);
                 return factory.updateModuleBlock(node, nodesVisitor(node.statements, visitor, ts.isStatement));
-            case 259 /* CaseBlock */:
+            case 261 /* CaseBlock */:
                 ts.Debug.type(node);
                 return factory.updateCaseBlock(node, nodesVisitor(node.clauses, visitor, ts.isCaseOrDefaultClause));
-            case 260 /* NamespaceExportDeclaration */:
+            case 262 /* NamespaceExportDeclaration */:
                 ts.Debug.type(node);
                 return factory.updateNamespaceExportDeclaration(node, nodeVisitor(node.name, visitor, ts.isIdentifier));
-            case 261 /* ImportEqualsDeclaration */:
+            case 263 /* ImportEqualsDeclaration */:
                 ts.Debug.type(node);
                 return factory.updateImportEqualsDeclaration(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), node.isTypeOnly, nodeVisitor(node.name, visitor, ts.isIdentifier), nodeVisitor(node.moduleReference, visitor, ts.isModuleReference));
-            case 262 /* ImportDeclaration */:
+            case 264 /* ImportDeclaration */:
                 ts.Debug.type(node);
                 return factory.updateImportDeclaration(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), nodeVisitor(node.importClause, visitor, ts.isImportClause), nodeVisitor(node.moduleSpecifier, visitor, ts.isExpression));
-            case 263 /* ImportClause */:
+            case 265 /* ImportClause */:
                 ts.Debug.type(node);
                 return factory.updateImportClause(node, node.isTypeOnly, nodeVisitor(node.name, visitor, ts.isIdentifier), nodeVisitor(node.namedBindings, visitor, ts.isNamedImportBindings));
-            case 264 /* NamespaceImport */:
+            case 266 /* NamespaceImport */:
                 ts.Debug.type(node);
                 return factory.updateNamespaceImport(node, nodeVisitor(node.name, visitor, ts.isIdentifier));
-            case 270 /* NamespaceExport */:
+            case 272 /* NamespaceExport */:
                 ts.Debug.type(node);
                 return factory.updateNamespaceExport(node, nodeVisitor(node.name, visitor, ts.isIdentifier));
-            case 265 /* NamedImports */:
+            case 267 /* NamedImports */:
                 ts.Debug.type(node);
                 return factory.updateNamedImports(node, nodesVisitor(node.elements, visitor, ts.isImportSpecifier));
-            case 266 /* ImportSpecifier */:
+            case 268 /* ImportSpecifier */:
                 ts.Debug.type(node);
                 return factory.updateImportSpecifier(node, nodeVisitor(node.propertyName, visitor, ts.isIdentifier), nodeVisitor(node.name, visitor, ts.isIdentifier));
-            case 267 /* ExportAssignment */:
+            case 269 /* ExportAssignment */:
                 ts.Debug.type(node);
                 return factory.updateExportAssignment(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), nodeVisitor(node.expression, visitor, ts.isExpression));
-            case 268 /* ExportDeclaration */:
+            case 270 /* ExportDeclaration */:
                 ts.Debug.type(node);
                 return factory.updateExportDeclaration(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), node.isTypeOnly, nodeVisitor(node.exportClause, visitor, ts.isNamedExportBindings), nodeVisitor(node.moduleSpecifier, visitor, ts.isExpression));
-            case 269 /* NamedExports */:
+            case 271 /* NamedExports */:
                 ts.Debug.type(node);
                 return factory.updateNamedExports(node, nodesVisitor(node.elements, visitor, ts.isExportSpecifier));
-            case 271 /* ExportSpecifier */:
+            case 273 /* ExportSpecifier */:
                 ts.Debug.type(node);
                 return factory.updateExportSpecifier(node, nodeVisitor(node.propertyName, visitor, ts.isIdentifier), nodeVisitor(node.name, visitor, ts.isIdentifier));
             // Module references
-            case 273 /* ExternalModuleReference */:
+            case 275 /* ExternalModuleReference */:
                 ts.Debug.type(node);
                 return factory.updateExternalModuleReference(node, nodeVisitor(node.expression, visitor, ts.isExpression));
             // JSX
-            case 274 /* JsxElement */:
+            case 276 /* JsxElement */:
                 ts.Debug.type(node);
                 return factory.updateJsxElement(node, nodeVisitor(node.openingElement, visitor, ts.isJsxOpeningElement), nodesVisitor(node.children, visitor, ts.isJsxChild), nodeVisitor(node.closingElement, visitor, ts.isJsxClosingElement));
-            case 275 /* JsxSelfClosingElement */:
+            case 277 /* JsxSelfClosingElement */:
                 ts.Debug.type(node);
                 return factory.updateJsxSelfClosingElement(node, nodeVisitor(node.tagName, visitor, ts.isJsxTagNameExpression), nodesVisitor(node.typeArguments, visitor, ts.isTypeNode), nodeVisitor(node.attributes, visitor, ts.isJsxAttributes));
-            case 276 /* JsxOpeningElement */:
+            case 278 /* JsxOpeningElement */:
                 ts.Debug.type(node);
                 return factory.updateJsxOpeningElement(node, nodeVisitor(node.tagName, visitor, ts.isJsxTagNameExpression), nodesVisitor(node.typeArguments, visitor, ts.isTypeNode), nodeVisitor(node.attributes, visitor, ts.isJsxAttributes));
-            case 277 /* JsxClosingElement */:
+            case 279 /* JsxClosingElement */:
                 ts.Debug.type(node);
                 return factory.updateJsxClosingElement(node, nodeVisitor(node.tagName, visitor, ts.isJsxTagNameExpression));
-            case 278 /* JsxFragment */:
+            case 280 /* JsxFragment */:
                 ts.Debug.type(node);
                 return factory.updateJsxFragment(node, nodeVisitor(node.openingFragment, visitor, ts.isJsxOpeningFragment), nodesVisitor(node.children, visitor, ts.isJsxChild), nodeVisitor(node.closingFragment, visitor, ts.isJsxClosingFragment));
-            case 281 /* JsxAttribute */:
+            case 283 /* JsxAttribute */:
                 ts.Debug.type(node);
                 return factory.updateJsxAttribute(node, nodeVisitor(node.name, visitor, ts.isIdentifier), nodeVisitor(node.initializer, visitor, ts.isStringLiteralOrJsxExpression));
-            case 282 /* JsxAttributes */:
+            case 284 /* JsxAttributes */:
                 ts.Debug.type(node);
                 return factory.updateJsxAttributes(node, nodesVisitor(node.properties, visitor, ts.isJsxAttributeLike));
-            case 283 /* JsxSpreadAttribute */:
+            case 285 /* JsxSpreadAttribute */:
                 ts.Debug.type(node);
                 return factory.updateJsxSpreadAttribute(node, nodeVisitor(node.expression, visitor, ts.isExpression));
-            case 284 /* JsxExpression */:
+            case 286 /* JsxExpression */:
                 ts.Debug.type(node);
                 return factory.updateJsxExpression(node, nodeVisitor(node.expression, visitor, ts.isExpression));
             // Clauses
-            case 285 /* CaseClause */:
+            case 287 /* CaseClause */:
                 ts.Debug.type(node);
                 return factory.updateCaseClause(node, nodeVisitor(node.expression, visitor, ts.isExpression), nodesVisitor(node.statements, visitor, ts.isStatement));
-            case 286 /* DefaultClause */:
+            case 288 /* DefaultClause */:
                 ts.Debug.type(node);
                 return factory.updateDefaultClause(node, nodesVisitor(node.statements, visitor, ts.isStatement));
-            case 287 /* HeritageClause */:
+            case 289 /* HeritageClause */:
                 ts.Debug.type(node);
                 return factory.updateHeritageClause(node, nodesVisitor(node.types, visitor, ts.isExpressionWithTypeArguments));
-            case 288 /* CatchClause */:
+            case 290 /* CatchClause */:
                 ts.Debug.type(node);
                 return factory.updateCatchClause(node, nodeVisitor(node.variableDeclaration, visitor, ts.isVariableDeclaration), nodeVisitor(node.block, visitor, ts.isBlock));
             // Property assignments
-            case 289 /* PropertyAssignment */:
+            case 291 /* PropertyAssignment */:
                 ts.Debug.type(node);
                 return factory.updatePropertyAssignment(node, nodeVisitor(node.name, visitor, ts.isPropertyName), nodeVisitor(node.initializer, visitor, ts.isExpression));
-            case 290 /* ShorthandPropertyAssignment */:
+            case 292 /* ShorthandPropertyAssignment */:
                 ts.Debug.type(node);
                 return factory.updateShorthandPropertyAssignment(node, nodeVisitor(node.name, visitor, ts.isIdentifier), nodeVisitor(node.objectAssignmentInitializer, visitor, ts.isExpression));
-            case 291 /* SpreadAssignment */:
+            case 293 /* SpreadAssignment */:
                 ts.Debug.type(node);
                 return factory.updateSpreadAssignment(node, nodeVisitor(node.expression, visitor, ts.isExpression));
             // Enum
-            case 292 /* EnumMember */:
+            case 294 /* EnumMember */:
                 ts.Debug.type(node);
                 return factory.updateEnumMember(node, nodeVisitor(node.name, visitor, ts.isPropertyName), nodeVisitor(node.initializer, visitor, ts.isExpression));
             // Top-level nodes
-            case 298 /* SourceFile */:
+            case 300 /* SourceFile */:
                 ts.Debug.type(node);
                 return factory.updateSourceFile(node, visitLexicalEnvironment(node.statements, visitor, context));
             // Transformation nodes
-            case 340 /* PartiallyEmittedExpression */:
+            case 345 /* PartiallyEmittedExpression */:
                 ts.Debug.type(node);
                 return factory.updatePartiallyEmittedExpression(node, nodeVisitor(node.expression, visitor, ts.isExpression));
-            case 341 /* CommaListExpression */:
+            case 346 /* CommaListExpression */:
                 ts.Debug.type(node);
                 return factory.updateCommaListExpression(node, nodesVisitor(node.elements, visitor, ts.isExpression));
             default:
@@ -84259,6 +85828,7 @@
         var sourcesContent;
         var names = [];
         var nameToNameIndexMap;
+        var mappingCharCodes = [];
         var mappings = "";
         // Last recorded and encoded mappings
         var lastGeneratedLine = 0;
@@ -84433,6 +86003,14 @@
                 || lastSourceCharacter !== pendingSourceCharacter
                 || lastNameIndex !== pendingNameIndex;
         }
+        function appendMappingCharCode(charCode) {
+            mappingCharCodes.push(charCode);
+            // String.fromCharCode accepts its arguments on the stack, so we have to chunk the input,
+            // otherwise we can get stack overflows for large source maps
+            if (mappingCharCodes.length >= 1024) {
+                flushMappingBuffer();
+            }
+        }
         function commitPendingMapping() {
             if (!hasPending || !shouldCommitMapping()) {
                 return;
@@ -84442,42 +86020,50 @@
             if (lastGeneratedLine < pendingGeneratedLine) {
                 // Emit line delimiters
                 do {
-                    mappings += ";";
+                    appendMappingCharCode(59 /* semicolon */);
                     lastGeneratedLine++;
-                    lastGeneratedCharacter = 0;
                 } while (lastGeneratedLine < pendingGeneratedLine);
+                // Only need to set this once
+                lastGeneratedCharacter = 0;
             }
             else {
                 ts.Debug.assertEqual(lastGeneratedLine, pendingGeneratedLine, "generatedLine cannot backtrack");
                 // Emit comma to separate the entry
                 if (hasLast) {
-                    mappings += ",";
+                    appendMappingCharCode(44 /* comma */);
                 }
             }
             // 1. Relative generated character
-            mappings += base64VLQFormatEncode(pendingGeneratedCharacter - lastGeneratedCharacter);
+            appendBase64VLQ(pendingGeneratedCharacter - lastGeneratedCharacter);
             lastGeneratedCharacter = pendingGeneratedCharacter;
             if (hasPendingSource) {
                 // 2. Relative sourceIndex
-                mappings += base64VLQFormatEncode(pendingSourceIndex - lastSourceIndex);
+                appendBase64VLQ(pendingSourceIndex - lastSourceIndex);
                 lastSourceIndex = pendingSourceIndex;
                 // 3. Relative source line
-                mappings += base64VLQFormatEncode(pendingSourceLine - lastSourceLine);
+                appendBase64VLQ(pendingSourceLine - lastSourceLine);
                 lastSourceLine = pendingSourceLine;
                 // 4. Relative source character
-                mappings += base64VLQFormatEncode(pendingSourceCharacter - lastSourceCharacter);
+                appendBase64VLQ(pendingSourceCharacter - lastSourceCharacter);
                 lastSourceCharacter = pendingSourceCharacter;
                 if (hasPendingName) {
                     // 5. Relative nameIndex
-                    mappings += base64VLQFormatEncode(pendingNameIndex - lastNameIndex);
+                    appendBase64VLQ(pendingNameIndex - lastNameIndex);
                     lastNameIndex = pendingNameIndex;
                 }
             }
             hasLast = true;
             exit();
         }
+        function flushMappingBuffer() {
+            if (mappingCharCodes.length > 0) {
+                mappings += String.fromCharCode.apply(undefined, mappingCharCodes);
+                mappingCharCodes.length = 0;
+            }
+        }
         function toJSON() {
             commitPendingMapping();
+            flushMappingBuffer();
             return {
                 version: 3,
                 file: file,
@@ -84488,10 +86074,33 @@
                 sourcesContent: sourcesContent,
             };
         }
+        function appendBase64VLQ(inValue) {
+            // Add a new least significant bit that has the sign of the value.
+            // if negative number the least significant bit that gets added to the number has value 1
+            // else least significant bit value that gets added is 0
+            // eg. -1 changes to binary : 01 [1] => 3
+            //     +1 changes to binary : 01 [0] => 2
+            if (inValue < 0) {
+                inValue = ((-inValue) << 1) + 1;
+            }
+            else {
+                inValue = inValue << 1;
+            }
+            // Encode 5 bits at a time starting from least significant bits
+            do {
+                var currentDigit = inValue & 31; // 11111
+                inValue = inValue >> 5;
+                if (inValue > 0) {
+                    // There are still more digits to decode, set the msb (6th bit)
+                    currentDigit = currentDigit | 32;
+                }
+                appendMappingCharCode(base64FormatEncode(currentDigit));
+            } while (inValue > 0);
+        }
     }
     ts.createSourceMapGenerator = createSourceMapGenerator;
     // Sometimes tools can see the following line as a source mapping url comment, so we mangle it a bit (the [M])
-    var sourceMapCommentRegExp = /^\/\/[@#] source[M]appingURL=(.+)\s*$/;
+    var sourceMapCommentRegExp = /^\/\/[@#] source[M]appingURL=(.+)$/;
     var whitespaceOrMapCommentRegExp = /^\s*(\/\/[@#] .*)?$/;
     function getLineInfo(text, lineStarts) {
         return {
@@ -84508,7 +86117,7 @@
             var line = lineInfo.getLineText(index);
             var comment = sourceMapCommentRegExp.exec(line);
             if (comment) {
-                return comment[1];
+                return ts.trimStringEnd(comment[1]);
             }
             // If we see a non-whitespace/map comment-like line, break, to avoid scanning up the entire file
             else if (!line.match(whitespaceOrMapCommentRegExp)) {
@@ -84714,31 +86323,6 @@
                         ch === 47 /* slash */ ? 63 :
                             -1;
     }
-    function base64VLQFormatEncode(inValue) {
-        // Add a new least significant bit that has the sign of the value.
-        // if negative number the least significant bit that gets added to the number has value 1
-        // else least significant bit value that gets added is 0
-        // eg. -1 changes to binary : 01 [1] => 3
-        //     +1 changes to binary : 01 [0] => 2
-        if (inValue < 0) {
-            inValue = ((-inValue) << 1) + 1;
-        }
-        else {
-            inValue = inValue << 1;
-        }
-        // Encode 5 bits at a time starting from least significant bits
-        var encodedStr = "";
-        do {
-            var currentDigit = inValue & 31; // 11111
-            inValue = inValue >> 5;
-            if (inValue > 0) {
-                // There are still more digits to decode, set the msb (6th bit)
-                currentDigit = currentDigit | 32;
-            }
-            encodedStr = encodedStr + String.fromCharCode(base64FormatEncode(currentDigit));
-        } while (inValue > 0);
-        return encodedStr;
-    }
     function isSourceMappedPosition(value) {
         return value.sourceIndex !== undefined
             && value.sourcePosition !== undefined;
@@ -84902,7 +86486,7 @@
     function chainBundle(context, transformSourceFile) {
         return transformSourceFileOrBundle;
         function transformSourceFileOrBundle(node) {
-            return node.kind === 298 /* SourceFile */ ? transformSourceFile(node) : transformBundle(node);
+            return node.kind === 300 /* SourceFile */ ? transformSourceFile(node) : transformBundle(node);
         }
         function transformBundle(node) {
             return context.factory.createBundle(ts.map(node.sourceFiles, transformSourceFile), node.prepends);
@@ -84953,7 +86537,7 @@
         for (var _i = 0, _a = sourceFile.statements; _i < _a.length; _i++) {
             var node = _a[_i];
             switch (node.kind) {
-                case 262 /* ImportDeclaration */:
+                case 264 /* ImportDeclaration */:
                     // import "mod"
                     // import x from "mod"
                     // import * as x from "mod"
@@ -84966,13 +86550,13 @@
                         hasImportDefault = true;
                     }
                     break;
-                case 261 /* ImportEqualsDeclaration */:
-                    if (node.moduleReference.kind === 273 /* ExternalModuleReference */) {
+                case 263 /* ImportEqualsDeclaration */:
+                    if (node.moduleReference.kind === 275 /* ExternalModuleReference */) {
                         // import x = require("mod")
                         externalImports.push(node);
                     }
                     break;
-                case 268 /* ExportDeclaration */:
+                case 270 /* ExportDeclaration */:
                     if (node.moduleSpecifier) {
                         if (!node.exportClause) {
                             // export * from "mod"
@@ -85003,13 +86587,13 @@
                         addExportedNamesForExportDeclaration(node);
                     }
                     break;
-                case 267 /* ExportAssignment */:
+                case 269 /* ExportAssignment */:
                     if (node.isExportEquals && !exportEquals) {
                         // export = x
                         exportEquals = node;
                     }
                     break;
-                case 233 /* VariableStatement */:
+                case 235 /* VariableStatement */:
                     if (ts.hasSyntacticModifier(node, 1 /* Export */)) {
                         for (var _b = 0, _c = node.declarationList.declarations; _b < _c.length; _b++) {
                             var decl = _c[_b];
@@ -85017,7 +86601,7 @@
                         }
                     }
                     break;
-                case 252 /* FunctionDeclaration */:
+                case 254 /* FunctionDeclaration */:
                     if (ts.hasSyntacticModifier(node, 1 /* Export */)) {
                         if (ts.hasSyntacticModifier(node, 512 /* Default */)) {
                             // export default function() { }
@@ -85037,7 +86621,7 @@
                         }
                     }
                     break;
-                case 253 /* ClassDeclaration */:
+                case 255 /* ClassDeclaration */:
                     if (ts.hasSyntacticModifier(node, 1 /* Export */)) {
                         if (ts.hasSyntacticModifier(node, 512 /* Default */)) {
                             // export default class { }
@@ -85135,27 +86719,27 @@
     }
     ts.isSimpleInlineableExpression = isSimpleInlineableExpression;
     function isCompoundAssignment(kind) {
-        return kind >= 63 /* FirstCompoundAssignment */
-            && kind <= 77 /* LastCompoundAssignment */;
+        return kind >= 64 /* FirstCompoundAssignment */
+            && kind <= 78 /* LastCompoundAssignment */;
     }
     ts.isCompoundAssignment = isCompoundAssignment;
     function getNonAssignmentOperatorForCompoundAssignment(kind) {
         switch (kind) {
-            case 63 /* PlusEqualsToken */: return 39 /* PlusToken */;
-            case 64 /* MinusEqualsToken */: return 40 /* MinusToken */;
-            case 65 /* AsteriskEqualsToken */: return 41 /* AsteriskToken */;
-            case 66 /* AsteriskAsteriskEqualsToken */: return 42 /* AsteriskAsteriskToken */;
-            case 67 /* SlashEqualsToken */: return 43 /* SlashToken */;
-            case 68 /* PercentEqualsToken */: return 44 /* PercentToken */;
-            case 69 /* LessThanLessThanEqualsToken */: return 47 /* LessThanLessThanToken */;
-            case 70 /* GreaterThanGreaterThanEqualsToken */: return 48 /* GreaterThanGreaterThanToken */;
-            case 71 /* GreaterThanGreaterThanGreaterThanEqualsToken */: return 49 /* GreaterThanGreaterThanGreaterThanToken */;
-            case 72 /* AmpersandEqualsToken */: return 50 /* AmpersandToken */;
-            case 73 /* BarEqualsToken */: return 51 /* BarToken */;
-            case 77 /* CaretEqualsToken */: return 52 /* CaretToken */;
-            case 74 /* BarBarEqualsToken */: return 56 /* BarBarToken */;
-            case 75 /* AmpersandAmpersandEqualsToken */: return 55 /* AmpersandAmpersandToken */;
-            case 76 /* QuestionQuestionEqualsToken */: return 60 /* QuestionQuestionToken */;
+            case 64 /* PlusEqualsToken */: return 39 /* PlusToken */;
+            case 65 /* MinusEqualsToken */: return 40 /* MinusToken */;
+            case 66 /* AsteriskEqualsToken */: return 41 /* AsteriskToken */;
+            case 67 /* AsteriskAsteriskEqualsToken */: return 42 /* AsteriskAsteriskToken */;
+            case 68 /* SlashEqualsToken */: return 43 /* SlashToken */;
+            case 69 /* PercentEqualsToken */: return 44 /* PercentToken */;
+            case 70 /* LessThanLessThanEqualsToken */: return 47 /* LessThanLessThanToken */;
+            case 71 /* GreaterThanGreaterThanEqualsToken */: return 48 /* GreaterThanGreaterThanToken */;
+            case 72 /* GreaterThanGreaterThanGreaterThanEqualsToken */: return 49 /* GreaterThanGreaterThanGreaterThanToken */;
+            case 73 /* AmpersandEqualsToken */: return 50 /* AmpersandToken */;
+            case 74 /* BarEqualsToken */: return 51 /* BarToken */;
+            case 78 /* CaretEqualsToken */: return 52 /* CaretToken */;
+            case 75 /* BarBarEqualsToken */: return 56 /* BarBarToken */;
+            case 76 /* AmpersandAmpersandEqualsToken */: return 55 /* AmpersandAmpersandToken */;
+            case 77 /* QuestionQuestionEqualsToken */: return 60 /* QuestionQuestionToken */;
         }
     }
     ts.getNonAssignmentOperatorForCompoundAssignment = getNonAssignmentOperatorForCompoundAssignment;
@@ -85192,6 +86776,13 @@
         return ts.filter(node.members, function (m) { return isInitializedOrStaticProperty(m, requireInitializer, isStatic); });
     }
     ts.getProperties = getProperties;
+    function isStaticPropertyDeclarationOrClassStaticBlockDeclaration(element) {
+        return isStaticPropertyDeclaration(element) || ts.isClassStaticBlockDeclaration(element);
+    }
+    function getStaticPropertiesAndClassStaticBlock(node) {
+        return ts.filter(node.members, isStaticPropertyDeclarationOrClassStaticBlockDeclaration);
+    }
+    ts.getStaticPropertiesAndClassStaticBlock = getStaticPropertiesAndClassStaticBlock;
     /**
      * Is a class element either a static or an instance property declaration with an initializer?
      *
@@ -85203,6 +86794,9 @@
             && (!!member.initializer || !requireInitializer)
             && ts.hasStaticModifier(member) === isStatic;
     }
+    function isStaticPropertyDeclaration(member) {
+        return ts.isPropertyDeclaration(member) && ts.hasStaticModifier(member);
+    }
     /**
      * Gets a value indicating whether a class element is either a static or an instance property declaration with an initializer.
      *
@@ -85210,7 +86804,7 @@
      * @param isStatic A value indicating whether the member should be a static or instance member.
      */
     function isInitializedProperty(member) {
-        return member.kind === 164 /* PropertyDeclaration */
+        return member.kind === 165 /* PropertyDeclaration */
             && member.initializer !== undefined;
     }
     ts.isInitializedProperty = isInitializedProperty;
@@ -85220,7 +86814,7 @@
      * @param member The class element node.
      */
     function isNonStaticMethodOrAccessorWithPrivateName(member) {
-        return !ts.hasStaticModifier(member) && ts.isMethodOrAccessor(member) && ts.isPrivateIdentifier(member.name);
+        return !ts.isStatic(member) && ts.isMethodOrAccessor(member) && ts.isPrivateIdentifier(member.name);
     }
     ts.isNonStaticMethodOrAccessorWithPrivateName = isNonStaticMethodOrAccessorWithPrivateName;
 })(ts || (ts = {}));
@@ -85760,6 +87354,7 @@
         // Examples: `\n` is converted to "\\n", a template string with a newline to "\n".
         var text = node.rawText;
         if (text === undefined) {
+            ts.Debug.assertIsDefined(currentSourceFile, "Template literal node is missing 'rawText' and does not have a source file. Possibly bad transform.");
             text = ts.getSourceTextOfNodeFromSourceFile(currentSourceFile, node);
             // text contains the original source, it will also contain quotes ("`"), dolar signs and braces ("${" and "}"),
             // thus we need to remove those characters.
@@ -85821,8 +87416,8 @@
         context.onEmitNode = onEmitNode;
         context.onSubstituteNode = onSubstituteNode;
         // Enable substitution for property/element access to emit const enum values.
-        context.enableSubstitution(202 /* PropertyAccessExpression */);
-        context.enableSubstitution(203 /* ElementAccessExpression */);
+        context.enableSubstitution(204 /* PropertyAccessExpression */);
+        context.enableSubstitution(205 /* ElementAccessExpression */);
         // These variables contain state that changes as we descend into the tree.
         var currentSourceFile;
         var currentNamespace;
@@ -85848,14 +87443,14 @@
         var applicableSubstitutions;
         return transformSourceFileOrBundle;
         function transformSourceFileOrBundle(node) {
-            if (node.kind === 299 /* Bundle */) {
+            if (node.kind === 301 /* Bundle */) {
                 return transformBundle(node);
             }
             return transformSourceFile(node);
         }
         function transformBundle(node) {
             return factory.createBundle(node.sourceFiles.map(transformSourceFile), ts.mapDefined(node.prepends, function (prepend) {
-                if (prepend.kind === 301 /* InputFiles */) {
+                if (prepend.kind === 303 /* InputFiles */) {
                     return ts.createUnparsedSourceFile(prepend, "js");
                 }
                 return prepend;
@@ -85906,16 +87501,16 @@
          */
         function onBeforeVisitNode(node) {
             switch (node.kind) {
-                case 298 /* SourceFile */:
-                case 259 /* CaseBlock */:
-                case 258 /* ModuleBlock */:
-                case 231 /* Block */:
+                case 300 /* SourceFile */:
+                case 261 /* CaseBlock */:
+                case 260 /* ModuleBlock */:
+                case 233 /* Block */:
                     currentLexicalScope = node;
                     currentNameScope = undefined;
                     currentScopeFirstDeclarationsOfName = undefined;
                     break;
-                case 253 /* ClassDeclaration */:
-                case 252 /* FunctionDeclaration */:
+                case 255 /* ClassDeclaration */:
+                case 254 /* FunctionDeclaration */:
                     if (ts.hasSyntacticModifier(node, 2 /* Ambient */)) {
                         break;
                     }
@@ -85927,7 +87522,7 @@
                         // These nodes should always have names unless they are default-exports;
                         // however, class declaration parsing allows for undefined names, so syntactically invalid
                         // programs may also have an undefined name.
-                        ts.Debug.assert(node.kind === 253 /* ClassDeclaration */ || ts.hasSyntacticModifier(node, 512 /* Default */));
+                        ts.Debug.assert(node.kind === 255 /* ClassDeclaration */ || ts.hasSyntacticModifier(node, 512 /* Default */));
                     }
                     if (ts.isClassDeclaration(node)) {
                         // XXX: should probably also cover interfaces and type aliases that can have type variables?
@@ -85970,10 +87565,10 @@
          */
         function sourceElementVisitorWorker(node) {
             switch (node.kind) {
-                case 262 /* ImportDeclaration */:
-                case 261 /* ImportEqualsDeclaration */:
-                case 267 /* ExportAssignment */:
-                case 268 /* ExportDeclaration */:
+                case 264 /* ImportDeclaration */:
+                case 263 /* ImportEqualsDeclaration */:
+                case 269 /* ExportAssignment */:
+                case 270 /* ExportDeclaration */:
                     return visitElidableStatement(node);
                 default:
                     return visitorWorker(node);
@@ -85994,13 +87589,13 @@
                 return node;
             }
             switch (node.kind) {
-                case 262 /* ImportDeclaration */:
+                case 264 /* ImportDeclaration */:
                     return visitImportDeclaration(node);
-                case 261 /* ImportEqualsDeclaration */:
+                case 263 /* ImportEqualsDeclaration */:
                     return visitImportEqualsDeclaration(node);
-                case 267 /* ExportAssignment */:
+                case 269 /* ExportAssignment */:
                     return visitExportAssignment(node);
-                case 268 /* ExportDeclaration */:
+                case 270 /* ExportDeclaration */:
                     return visitExportDeclaration(node);
                 default:
                     ts.Debug.fail("Unhandled ellided statement");
@@ -86020,11 +87615,11 @@
          * @param node The node to visit.
          */
         function namespaceElementVisitorWorker(node) {
-            if (node.kind === 268 /* ExportDeclaration */ ||
-                node.kind === 262 /* ImportDeclaration */ ||
-                node.kind === 263 /* ImportClause */ ||
-                (node.kind === 261 /* ImportEqualsDeclaration */ &&
-                    node.moduleReference.kind === 273 /* ExternalModuleReference */)) {
+            if (node.kind === 270 /* ExportDeclaration */ ||
+                node.kind === 264 /* ImportDeclaration */ ||
+                node.kind === 265 /* ImportClause */ ||
+                (node.kind === 263 /* ImportEqualsDeclaration */ &&
+                    node.moduleReference.kind === 275 /* ExternalModuleReference */)) {
                 // do not emit ES6 imports and exports since they are illegal inside a namespace
                 return undefined;
             }
@@ -86048,19 +87643,20 @@
          */
         function classElementVisitorWorker(node) {
             switch (node.kind) {
-                case 167 /* Constructor */:
+                case 169 /* Constructor */:
                     return visitConstructor(node);
-                case 164 /* PropertyDeclaration */:
+                case 165 /* PropertyDeclaration */:
                     // Property declarations are not TypeScript syntax, but they must be visited
                     // for the decorator transformation.
                     return visitPropertyDeclaration(node);
-                case 172 /* IndexSignature */:
-                case 168 /* GetAccessor */:
-                case 169 /* SetAccessor */:
-                case 166 /* MethodDeclaration */:
+                case 174 /* IndexSignature */:
+                case 170 /* GetAccessor */:
+                case 171 /* SetAccessor */:
+                case 167 /* MethodDeclaration */:
+                case 168 /* ClassStaticBlockDeclaration */:
                     // Fallback to the default visit behavior.
                     return visitorWorker(node);
-                case 230 /* SemicolonClassElement */:
+                case 232 /* SemicolonClassElement */:
                     return node;
                 default:
                     return ts.Debug.failBadSyntaxKind(node);
@@ -86070,7 +87666,7 @@
             if (ts.modifierToFlag(node.kind) & 18654 /* TypeScriptModifier */) {
                 return undefined;
             }
-            else if (currentNamespace && node.kind === 92 /* ExportKeyword */) {
+            else if (currentNamespace && node.kind === 93 /* ExportKeyword */) {
                 return undefined;
             }
             return node;
@@ -86087,72 +87683,72 @@
                 return factory.createNotEmittedStatement(node);
             }
             switch (node.kind) {
-                case 92 /* ExportKeyword */:
-                case 87 /* DefaultKeyword */:
+                case 93 /* ExportKeyword */:
+                case 88 /* DefaultKeyword */:
                     // ES6 export and default modifiers are elided when inside a namespace.
                     return currentNamespace ? undefined : node;
-                case 122 /* PublicKeyword */:
-                case 120 /* PrivateKeyword */:
-                case 121 /* ProtectedKeyword */:
-                case 125 /* AbstractKeyword */:
-                case 156 /* OverrideKeyword */:
-                case 84 /* ConstKeyword */:
-                case 133 /* DeclareKeyword */:
-                case 142 /* ReadonlyKeyword */:
+                case 123 /* PublicKeyword */:
+                case 121 /* PrivateKeyword */:
+                case 122 /* ProtectedKeyword */:
+                case 126 /* AbstractKeyword */:
+                case 157 /* OverrideKeyword */:
+                case 85 /* ConstKeyword */:
+                case 134 /* DeclareKeyword */:
+                case 143 /* ReadonlyKeyword */:
                 // TypeScript accessibility and readonly modifiers are elided
                 // falls through
-                case 179 /* ArrayType */:
-                case 180 /* TupleType */:
-                case 181 /* OptionalType */:
-                case 182 /* RestType */:
-                case 178 /* TypeLiteral */:
-                case 173 /* TypePredicate */:
-                case 160 /* TypeParameter */:
-                case 128 /* AnyKeyword */:
-                case 152 /* UnknownKeyword */:
-                case 131 /* BooleanKeyword */:
-                case 147 /* StringKeyword */:
-                case 144 /* NumberKeyword */:
-                case 141 /* NeverKeyword */:
-                case 113 /* VoidKeyword */:
-                case 148 /* SymbolKeyword */:
-                case 176 /* ConstructorType */:
-                case 175 /* FunctionType */:
-                case 177 /* TypeQuery */:
-                case 174 /* TypeReference */:
-                case 183 /* UnionType */:
-                case 184 /* IntersectionType */:
-                case 185 /* ConditionalType */:
-                case 187 /* ParenthesizedType */:
-                case 188 /* ThisType */:
-                case 189 /* TypeOperator */:
-                case 190 /* IndexedAccessType */:
-                case 191 /* MappedType */:
-                case 192 /* LiteralType */:
+                case 181 /* ArrayType */:
+                case 182 /* TupleType */:
+                case 183 /* OptionalType */:
+                case 184 /* RestType */:
+                case 180 /* TypeLiteral */:
+                case 175 /* TypePredicate */:
+                case 161 /* TypeParameter */:
+                case 129 /* AnyKeyword */:
+                case 153 /* UnknownKeyword */:
+                case 132 /* BooleanKeyword */:
+                case 148 /* StringKeyword */:
+                case 145 /* NumberKeyword */:
+                case 142 /* NeverKeyword */:
+                case 114 /* VoidKeyword */:
+                case 149 /* SymbolKeyword */:
+                case 178 /* ConstructorType */:
+                case 177 /* FunctionType */:
+                case 179 /* TypeQuery */:
+                case 176 /* TypeReference */:
+                case 185 /* UnionType */:
+                case 186 /* IntersectionType */:
+                case 187 /* ConditionalType */:
+                case 189 /* ParenthesizedType */:
+                case 190 /* ThisType */:
+                case 191 /* TypeOperator */:
+                case 192 /* IndexedAccessType */:
+                case 193 /* MappedType */:
+                case 194 /* LiteralType */:
                 // TypeScript type nodes are elided.
                 // falls through
-                case 172 /* IndexSignature */:
+                case 174 /* IndexSignature */:
                 // TypeScript index signatures are elided.
                 // falls through
-                case 162 /* Decorator */:
-                // TypeScript decorators are elided. They will be emitted as part of visitClassDeclaration.
-                // falls through
-                case 255 /* TypeAliasDeclaration */:
-                    // TypeScript type-only declarations are elided.
+                case 163 /* Decorator */:
+                    // TypeScript decorators are elided. They will be emitted as part of visitClassDeclaration.
                     return undefined;
-                case 164 /* PropertyDeclaration */:
+                case 257 /* TypeAliasDeclaration */:
+                    // TypeScript type-only declarations are elided.
+                    return factory.createNotEmittedStatement(node);
+                case 165 /* PropertyDeclaration */:
                     // TypeScript property declarations are elided. However their names are still visited, and can potentially be retained if they could have sideeffects
                     return visitPropertyDeclaration(node);
-                case 260 /* NamespaceExportDeclaration */:
+                case 262 /* NamespaceExportDeclaration */:
                     // TypeScript namespace export declarations are elided.
                     return undefined;
-                case 167 /* Constructor */:
+                case 169 /* Constructor */:
                     return visitConstructor(node);
-                case 254 /* InterfaceDeclaration */:
+                case 256 /* InterfaceDeclaration */:
                     // TypeScript interfaces are elided, but some comments may be preserved.
                     // See the implementation of `getLeadingComments` in comments.ts for more details.
                     return factory.createNotEmittedStatement(node);
-                case 253 /* ClassDeclaration */:
+                case 255 /* ClassDeclaration */:
                     // This may be a class declaration with TypeScript syntax extensions.
                     //
                     // TypeScript class syntax extensions include:
@@ -86162,7 +87758,7 @@
                     // - index signatures
                     // - method overload signatures
                     return visitClassDeclaration(node);
-                case 222 /* ClassExpression */:
+                case 224 /* ClassExpression */:
                     // This may be a class expression with TypeScript syntax extensions.
                     //
                     // TypeScript class syntax extensions include:
@@ -86172,35 +87768,35 @@
                     // - index signatures
                     // - method overload signatures
                     return visitClassExpression(node);
-                case 287 /* HeritageClause */:
+                case 289 /* HeritageClause */:
                     // This may be a heritage clause with TypeScript syntax extensions.
                     //
                     // TypeScript heritage clause extensions include:
                     // - `implements` clause
                     return visitHeritageClause(node);
-                case 224 /* ExpressionWithTypeArguments */:
+                case 226 /* ExpressionWithTypeArguments */:
                     // TypeScript supports type arguments on an expression in an `extends` heritage clause.
                     return visitExpressionWithTypeArguments(node);
-                case 166 /* MethodDeclaration */:
+                case 167 /* MethodDeclaration */:
                     // TypeScript method declarations may have decorators, modifiers
                     // or type annotations.
                     return visitMethodDeclaration(node);
-                case 168 /* GetAccessor */:
+                case 170 /* GetAccessor */:
                     // Get Accessors can have TypeScript modifiers, decorators, and type annotations.
                     return visitGetAccessor(node);
-                case 169 /* SetAccessor */:
+                case 171 /* SetAccessor */:
                     // Set Accessors can have TypeScript modifiers and type annotations.
                     return visitSetAccessor(node);
-                case 252 /* FunctionDeclaration */:
+                case 254 /* FunctionDeclaration */:
                     // Typescript function declarations can have modifiers, decorators, and type annotations.
                     return visitFunctionDeclaration(node);
-                case 209 /* FunctionExpression */:
+                case 211 /* FunctionExpression */:
                     // TypeScript function expressions can have modifiers and type annotations.
                     return visitFunctionExpression(node);
-                case 210 /* ArrowFunction */:
+                case 212 /* ArrowFunction */:
                     // TypeScript arrow functions can have modifiers and type annotations.
                     return visitArrowFunction(node);
-                case 161 /* Parameter */:
+                case 162 /* Parameter */:
                     // This may be a parameter declaration with TypeScript syntax extensions.
                     //
                     // TypeScript parameter declaration syntax extensions include:
@@ -86210,40 +87806,40 @@
                     // - type annotations
                     // - this parameters
                     return visitParameter(node);
-                case 208 /* ParenthesizedExpression */:
+                case 210 /* ParenthesizedExpression */:
                     // ParenthesizedExpressions are TypeScript if their expression is a
                     // TypeAssertion or AsExpression
                     return visitParenthesizedExpression(node);
-                case 207 /* TypeAssertionExpression */:
-                case 225 /* AsExpression */:
+                case 209 /* TypeAssertionExpression */:
+                case 227 /* AsExpression */:
                     // TypeScript type assertions are removed, but their subtrees are preserved.
                     return visitAssertionExpression(node);
-                case 204 /* CallExpression */:
+                case 206 /* CallExpression */:
                     return visitCallExpression(node);
-                case 205 /* NewExpression */:
+                case 207 /* NewExpression */:
                     return visitNewExpression(node);
-                case 206 /* TaggedTemplateExpression */:
+                case 208 /* TaggedTemplateExpression */:
                     return visitTaggedTemplateExpression(node);
-                case 226 /* NonNullExpression */:
+                case 228 /* NonNullExpression */:
                     // TypeScript non-null expressions are removed, but their subtrees are preserved.
                     return visitNonNullExpression(node);
-                case 256 /* EnumDeclaration */:
+                case 258 /* EnumDeclaration */:
                     // TypeScript enum declarations do not exist in ES6 and must be rewritten.
                     return visitEnumDeclaration(node);
-                case 233 /* VariableStatement */:
+                case 235 /* VariableStatement */:
                     // TypeScript namespace exports for variable statements must be transformed.
                     return visitVariableStatement(node);
-                case 250 /* VariableDeclaration */:
+                case 252 /* VariableDeclaration */:
                     return visitVariableDeclaration(node);
-                case 257 /* ModuleDeclaration */:
+                case 259 /* ModuleDeclaration */:
                     // TypeScript namespace declarations must be transformed.
                     return visitModuleDeclaration(node);
-                case 261 /* ImportEqualsDeclaration */:
+                case 263 /* ImportEqualsDeclaration */:
                     // TypeScript namespace or external module import.
                     return visitImportEqualsDeclaration(node);
-                case 275 /* JsxSelfClosingElement */:
+                case 277 /* JsxSelfClosingElement */:
                     return visitJsxSelfClosingElement(node);
-                case 276 /* JsxOpeningElement */:
+                case 278 /* JsxOpeningElement */:
                     return visitJsxJsxOpeningElement(node);
                 default:
                     // node contains some other TypeScript syntax
@@ -86256,33 +87852,14 @@
                 !ts.isJsonSourceFile(node);
             return factory.updateSourceFile(node, ts.visitLexicalEnvironment(node.statements, sourceElementVisitor, context, /*start*/ 0, alwaysStrict));
         }
-        /**
-         * Tests whether we should emit a __decorate call for a class declaration.
-         */
-        function shouldEmitDecorateCallForClass(node) {
-            if (node.decorators && node.decorators.length > 0) {
-                return true;
-            }
-            var constructor = ts.getFirstConstructorWithBody(node);
-            if (constructor) {
-                return ts.forEach(constructor.parameters, shouldEmitDecorateCallForParameter);
-            }
-            return false;
-        }
-        /**
-         * Tests whether we should emit a __decorate call for a parameter declaration.
-         */
-        function shouldEmitDecorateCallForParameter(parameter) {
-            return parameter.decorators !== undefined && parameter.decorators.length > 0;
-        }
         function getClassFacts(node, staticProperties) {
             var facts = 0 /* None */;
             if (ts.some(staticProperties))
                 facts |= 1 /* HasStaticInitializedProperties */;
             var extendsClauseElement = ts.getEffectiveBaseTypeNode(node);
-            if (extendsClauseElement && ts.skipOuterExpressions(extendsClauseElement.expression).kind !== 103 /* NullKeyword */)
+            if (extendsClauseElement && ts.skipOuterExpressions(extendsClauseElement.expression).kind !== 104 /* NullKeyword */)
                 facts |= 64 /* IsDerivedClass */;
-            if (shouldEmitDecorateCallForClass(node))
+            if (ts.classOrConstructorParameterIsDecorated(node))
                 facts |= 2 /* HasConstructorDecorators */;
             if (ts.childIsDecorated(node))
                 facts |= 4 /* HasMemberDecorators */;
@@ -86503,7 +88080,11 @@
             //
             var location = ts.moveRangePastDecorators(node);
             var classAlias = getClassAliasIfNeeded(node);
-            var declName = factory.getLocalName(node, /*allowComments*/ false, /*allowSourceMaps*/ true);
+            // When we transform to ES5/3 this will be moved inside an IIFE and should reference the name
+            // without any block-scoped variable collision handling
+            var declName = languageVersion <= 2 /* ES2015 */ ?
+                factory.getInternalName(node, /*allowComments*/ false, /*allowSourceMaps*/ true) :
+                factory.getLocalName(node, /*allowComments*/ false, /*allowSourceMaps*/ true);
             //  ... = class ${name} ${heritageClauses} {
             //      ${members}
             //  }
@@ -86581,7 +88162,7 @@
          * @param member The class member.
          */
         function isStaticDecoratedClassElement(member, parent) {
-            return isDecoratedClassElement(member, /*isStatic*/ true, parent);
+            return isDecoratedClassElement(member, /*isStaticElement*/ true, parent);
         }
         /**
          * Determines whether a class member is an instance member of a class that is decorated,
@@ -86590,7 +88171,7 @@
          * @param member The class member.
          */
         function isInstanceDecoratedClassElement(member, parent) {
-            return isDecoratedClassElement(member, /*isStatic*/ false, parent);
+            return isDecoratedClassElement(member, /*isStaticElement*/ false, parent);
         }
         /**
          * Determines whether a class member is either a static or an instance member of a class
@@ -86598,9 +88179,9 @@
          *
          * @param member The class member.
          */
-        function isDecoratedClassElement(member, isStatic, parent) {
+        function isDecoratedClassElement(member, isStaticElement, parent) {
             return ts.nodeOrChildIsDecorated(member, parent)
-                && isStatic === ts.hasSyntacticModifier(member, 32 /* Static */);
+                && isStaticElement === ts.isStatic(member);
         }
         /**
          * Gets an array of arrays of decorators for the parameters of a function-like node.
@@ -86652,12 +88233,12 @@
          */
         function getAllDecoratorsOfClassElement(node, member) {
             switch (member.kind) {
-                case 168 /* GetAccessor */:
-                case 169 /* SetAccessor */:
+                case 170 /* GetAccessor */:
+                case 171 /* SetAccessor */:
                     return getAllDecoratorsOfAccessors(node, member);
-                case 166 /* MethodDeclaration */:
+                case 167 /* MethodDeclaration */:
                     return getAllDecoratorsOfMethod(member);
-                case 164 /* PropertyDeclaration */:
+                case 165 /* PropertyDeclaration */:
                     return getAllDecoratorsOfProperty(member);
                 default:
                     return undefined;
@@ -86810,7 +88391,7 @@
             var prefix = getClassMemberPrefix(node, member);
             var memberName = getExpressionForPropertyName(member, /*generateNameForComputedPropertyName*/ true);
             var descriptor = languageVersion > 0 /* ES3 */
-                ? member.kind === 164 /* PropertyDeclaration */
+                ? member.kind === 165 /* PropertyDeclaration */
                     // We emit `void 0` here to indicate to `__decorate` that it can invoke `Object.defineProperty` directly, but that it
                     // should not invoke `Object.getOwnPropertyDescriptor`.
                     ? factory.createVoidZero()
@@ -86846,7 +88427,11 @@
                 return undefined;
             }
             var classAlias = classAliases && classAliases[ts.getOriginalNodeId(node)];
-            var localName = factory.getLocalName(node, /*allowComments*/ false, /*allowSourceMaps*/ true);
+            // When we transform to ES5/3 this will be moved inside an IIFE and should reference the name
+            // without any block-scoped variable collision handling
+            var localName = languageVersion <= 2 /* ES2015 */ ?
+                factory.getInternalName(node, /*allowComments*/ false, /*allowSourceMaps*/ true) :
+                factory.getLocalName(node, /*allowComments*/ false, /*allowSourceMaps*/ true);
             var decorate = emitHelpers().createDecorateHelper(decoratorExpressions, localName);
             var expression = factory.createAssignment(localName, classAlias ? factory.createAssignment(classAlias, decorate) : decorate);
             ts.setEmitFlags(expression, 1536 /* NoComments */);
@@ -86934,10 +88519,10 @@
          */
         function shouldAddTypeMetadata(node) {
             var kind = node.kind;
-            return kind === 166 /* MethodDeclaration */
-                || kind === 168 /* GetAccessor */
-                || kind === 169 /* SetAccessor */
-                || kind === 164 /* PropertyDeclaration */;
+            return kind === 167 /* MethodDeclaration */
+                || kind === 170 /* GetAccessor */
+                || kind === 171 /* SetAccessor */
+                || kind === 165 /* PropertyDeclaration */;
         }
         /**
          * Determines whether to emit the "design:returntype" metadata based on the node's kind.
@@ -86947,7 +88532,7 @@
          * @param node The node to test.
          */
         function shouldAddReturnTypeMetadata(node) {
-            return node.kind === 166 /* MethodDeclaration */;
+            return node.kind === 167 /* MethodDeclaration */;
         }
         /**
          * Determines whether to emit the "design:paramtypes" metadata based on the node's kind.
@@ -86958,12 +88543,12 @@
          */
         function shouldAddParamTypesMetadata(node) {
             switch (node.kind) {
-                case 253 /* ClassDeclaration */:
-                case 222 /* ClassExpression */:
+                case 255 /* ClassDeclaration */:
+                case 224 /* ClassExpression */:
                     return ts.getFirstConstructorWithBody(node) !== undefined;
-                case 166 /* MethodDeclaration */:
-                case 168 /* GetAccessor */:
-                case 169 /* SetAccessor */:
+                case 167 /* MethodDeclaration */:
+                case 170 /* GetAccessor */:
+                case 171 /* SetAccessor */:
                     return true;
             }
             return false;
@@ -86980,15 +88565,15 @@
          */
         function serializeTypeOfNode(node) {
             switch (node.kind) {
-                case 164 /* PropertyDeclaration */:
-                case 161 /* Parameter */:
+                case 165 /* PropertyDeclaration */:
+                case 162 /* Parameter */:
                     return serializeTypeNode(node.type);
-                case 169 /* SetAccessor */:
-                case 168 /* GetAccessor */:
+                case 171 /* SetAccessor */:
+                case 170 /* GetAccessor */:
                     return serializeTypeNode(getAccessorTypeNode(node));
-                case 253 /* ClassDeclaration */:
-                case 222 /* ClassExpression */:
-                case 166 /* MethodDeclaration */:
+                case 255 /* ClassDeclaration */:
+                case 224 /* ClassExpression */:
+                case 167 /* MethodDeclaration */:
                     return factory.createIdentifier("Function");
                 default:
                     return factory.createVoidZero();
@@ -87025,7 +88610,7 @@
             return factory.createArrayLiteralExpression(expressions);
         }
         function getParametersOfDecoratedDeclaration(node, container) {
-            if (container && node.kind === 168 /* GetAccessor */) {
+            if (container && node.kind === 170 /* GetAccessor */) {
                 var setAccessor = ts.getAllAccessorDeclarations(container.members, node).setAccessor;
                 if (setAccessor) {
                     return setAccessor.parameters;
@@ -87070,82 +88655,82 @@
                 return factory.createIdentifier("Object");
             }
             switch (node.kind) {
-                case 113 /* VoidKeyword */:
-                case 150 /* UndefinedKeyword */:
-                case 141 /* NeverKeyword */:
+                case 114 /* VoidKeyword */:
+                case 151 /* UndefinedKeyword */:
+                case 142 /* NeverKeyword */:
                     return factory.createVoidZero();
-                case 187 /* ParenthesizedType */:
+                case 189 /* ParenthesizedType */:
                     return serializeTypeNode(node.type);
-                case 175 /* FunctionType */:
-                case 176 /* ConstructorType */:
+                case 177 /* FunctionType */:
+                case 178 /* ConstructorType */:
                     return factory.createIdentifier("Function");
-                case 179 /* ArrayType */:
-                case 180 /* TupleType */:
+                case 181 /* ArrayType */:
+                case 182 /* TupleType */:
                     return factory.createIdentifier("Array");
-                case 173 /* TypePredicate */:
-                case 131 /* BooleanKeyword */:
+                case 175 /* TypePredicate */:
+                case 132 /* BooleanKeyword */:
                     return factory.createIdentifier("Boolean");
-                case 147 /* StringKeyword */:
+                case 148 /* StringKeyword */:
                     return factory.createIdentifier("String");
-                case 145 /* ObjectKeyword */:
+                case 146 /* ObjectKeyword */:
                     return factory.createIdentifier("Object");
-                case 192 /* LiteralType */:
+                case 194 /* LiteralType */:
                     switch (node.literal.kind) {
                         case 10 /* StringLiteral */:
                         case 14 /* NoSubstitutionTemplateLiteral */:
                             return factory.createIdentifier("String");
-                        case 215 /* PrefixUnaryExpression */:
+                        case 217 /* PrefixUnaryExpression */:
                         case 8 /* NumericLiteral */:
                             return factory.createIdentifier("Number");
                         case 9 /* BigIntLiteral */:
                             return getGlobalBigIntNameWithFallback();
-                        case 109 /* TrueKeyword */:
-                        case 94 /* FalseKeyword */:
+                        case 110 /* TrueKeyword */:
+                        case 95 /* FalseKeyword */:
                             return factory.createIdentifier("Boolean");
-                        case 103 /* NullKeyword */:
+                        case 104 /* NullKeyword */:
                             return factory.createVoidZero();
                         default:
                             return ts.Debug.failBadSyntaxKind(node.literal);
                     }
-                case 144 /* NumberKeyword */:
+                case 145 /* NumberKeyword */:
                     return factory.createIdentifier("Number");
-                case 155 /* BigIntKeyword */:
+                case 156 /* BigIntKeyword */:
                     return getGlobalBigIntNameWithFallback();
-                case 148 /* SymbolKeyword */:
+                case 149 /* SymbolKeyword */:
                     return languageVersion < 2 /* ES2015 */
                         ? getGlobalSymbolNameWithFallback()
                         : factory.createIdentifier("Symbol");
-                case 174 /* TypeReference */:
+                case 176 /* TypeReference */:
                     return serializeTypeReferenceNode(node);
-                case 184 /* IntersectionType */:
-                case 183 /* UnionType */:
+                case 186 /* IntersectionType */:
+                case 185 /* UnionType */:
                     return serializeTypeList(node.types);
-                case 185 /* ConditionalType */:
+                case 187 /* ConditionalType */:
                     return serializeTypeList([node.trueType, node.falseType]);
-                case 189 /* TypeOperator */:
-                    if (node.operator === 142 /* ReadonlyKeyword */) {
+                case 191 /* TypeOperator */:
+                    if (node.operator === 143 /* ReadonlyKeyword */) {
                         return serializeTypeNode(node.type);
                     }
                     break;
-                case 177 /* TypeQuery */:
-                case 190 /* IndexedAccessType */:
-                case 191 /* MappedType */:
-                case 178 /* TypeLiteral */:
-                case 128 /* AnyKeyword */:
-                case 152 /* UnknownKeyword */:
-                case 188 /* ThisType */:
-                case 196 /* ImportType */:
+                case 179 /* TypeQuery */:
+                case 192 /* IndexedAccessType */:
+                case 193 /* MappedType */:
+                case 180 /* TypeLiteral */:
+                case 129 /* AnyKeyword */:
+                case 153 /* UnknownKeyword */:
+                case 190 /* ThisType */:
+                case 198 /* ImportType */:
                     break;
                 // handle JSDoc types from an invalid parse
-                case 304 /* JSDocAllType */:
-                case 305 /* JSDocUnknownType */:
-                case 309 /* JSDocFunctionType */:
-                case 310 /* JSDocVariadicType */:
-                case 311 /* JSDocNamepathType */:
+                case 307 /* JSDocAllType */:
+                case 308 /* JSDocUnknownType */:
+                case 312 /* JSDocFunctionType */:
+                case 313 /* JSDocVariadicType */:
+                case 314 /* JSDocNamepathType */:
                     break;
-                case 306 /* JSDocNullableType */:
-                case 307 /* JSDocNonNullableType */:
-                case 308 /* JSDocOptionalType */:
+                case 309 /* JSDocNullableType */:
+                case 310 /* JSDocNonNullableType */:
+                case 311 /* JSDocOptionalType */:
                     return serializeTypeNode(node.type);
                 default:
                     return ts.Debug.failBadSyntaxKind(node);
@@ -87156,15 +88741,15 @@
             // Note when updating logic here also update getEntityNameForDecoratorMetadata
             // so that aliases can be marked as referenced
             var serializedUnion;
-            for (var _i = 0, types_24 = types; _i < types_24.length; _i++) {
-                var typeNode = types_24[_i];
-                while (typeNode.kind === 187 /* ParenthesizedType */) {
+            for (var _i = 0, types_23 = types; _i < types_23.length; _i++) {
+                var typeNode = types_23[_i];
+                while (typeNode.kind === 189 /* ParenthesizedType */) {
                     typeNode = typeNode.type; // Skip parens if need be
                 }
-                if (typeNode.kind === 141 /* NeverKeyword */) {
+                if (typeNode.kind === 142 /* NeverKeyword */) {
                     continue; // Always elide `never` from the union/intersection if possible
                 }
-                if (!strictNullChecks && (typeNode.kind === 192 /* LiteralType */ && typeNode.literal.kind === 103 /* NullKeyword */ || typeNode.kind === 150 /* UndefinedKeyword */)) {
+                if (!strictNullChecks && (typeNode.kind === 194 /* LiteralType */ && typeNode.literal.kind === 104 /* NullKeyword */ || typeNode.kind === 151 /* UndefinedKeyword */)) {
                     continue; // Elide null and undefined from unions for metadata, just like what we did prior to the implementation of strict null checks
                 }
                 var serializedIndividual = serializeTypeNode(typeNode);
@@ -87246,12 +88831,12 @@
          * @param node The entity name to serialize.
          */
         function serializeEntityNameAsExpressionFallback(node) {
-            if (node.kind === 78 /* Identifier */) {
+            if (node.kind === 79 /* Identifier */) {
                 // A -> typeof A !== undefined && A
                 var copied = serializeEntityNameAsExpression(node);
                 return createCheckedValue(copied, copied);
             }
-            if (node.left.kind === 78 /* Identifier */) {
+            if (node.left.kind === 79 /* Identifier */) {
                 // A.B -> typeof A !== undefined && A.B
                 return createCheckedValue(serializeEntityNameAsExpression(node.left), serializeEntityNameAsExpression(node));
             }
@@ -87267,14 +88852,14 @@
          */
         function serializeEntityNameAsExpression(node) {
             switch (node.kind) {
-                case 78 /* Identifier */:
+                case 79 /* Identifier */:
                     // Create a clone of the name with a new parent, and treat it as if it were
                     // a source tree node for the purposes of the checker.
                     var name = ts.setParent(ts.setTextRange(ts.parseNodeFactory.cloneNode(node), node), node.parent);
                     name.original = undefined;
                     ts.setParent(name, ts.getParseTreeNode(currentLexicalScope)); // ensure the parent is set to a parse tree node.
                     return name;
-                case 158 /* QualifiedName */:
+                case 159 /* QualifiedName */:
                     return serializeQualifiedNameAsExpression(node);
             }
         }
@@ -87365,7 +88950,7 @@
          * @param node The HeritageClause to transform.
          */
         function visitHeritageClause(node) {
-            if (node.token === 116 /* ImplementsKeyword */) {
+            if (node.token === 117 /* ImplementsKeyword */) {
                 // implements clauses are elided
                 return undefined;
             }
@@ -87847,12 +89432,12 @@
             // enums in any other scope are emitted as a `let` declaration.
             var statement = factory.createVariableStatement(ts.visitNodes(node.modifiers, modifierVisitor, ts.isModifier), factory.createVariableDeclarationList([
                 factory.createVariableDeclaration(factory.getLocalName(node, /*allowComments*/ false, /*allowSourceMaps*/ true))
-            ], currentLexicalScope.kind === 298 /* SourceFile */ ? 0 /* None */ : 1 /* Let */));
+            ], currentLexicalScope.kind === 300 /* SourceFile */ ? 0 /* None */ : 1 /* Let */));
             ts.setOriginalNode(statement, node);
             recordEmittedDeclarationInScope(node);
             if (isFirstEmittedDeclarationInScope(node)) {
                 // Adjust the source map emit to match the old emitter.
-                if (node.kind === 256 /* EnumDeclaration */) {
+                if (node.kind === 258 /* EnumDeclaration */) {
                     ts.setSourceMapRange(statement.declarationList, node);
                 }
                 else {
@@ -87977,7 +89562,7 @@
             var statementsLocation;
             var blockLocation;
             if (node.body) {
-                if (node.body.kind === 258 /* ModuleBlock */) {
+                if (node.body.kind === 260 /* ModuleBlock */) {
                     saveStateAndInvoke(node.body, function (body) { return ts.addRange(statements, ts.visitNodes(body.statements, namespaceElementVisitor, ts.isStatement)); });
                     statementsLocation = node.body.statements;
                     blockLocation = node.body;
@@ -88024,13 +89609,13 @@
             //     })(hi = hello.hi || (hello.hi = {}));
             // })(hello || (hello = {}));
             // We only want to emit comment on the namespace which contains block body itself, not the containing namespaces.
-            if (!node.body || node.body.kind !== 258 /* ModuleBlock */) {
+            if (!node.body || node.body.kind !== 260 /* ModuleBlock */) {
                 ts.setEmitFlags(block, ts.getEmitFlags(block) | 1536 /* NoComments */);
             }
             return block;
         }
         function getInnerMostModuleDeclarationFromDottedModule(moduleDeclaration) {
-            if (moduleDeclaration.body.kind === 257 /* ModuleDeclaration */) {
+            if (moduleDeclaration.body.kind === 259 /* ModuleDeclaration */) {
                 var recursiveInnerModule = getInnerMostModuleDeclarationFromDottedModule(moduleDeclaration.body);
                 return recursiveInnerModule || moduleDeclaration.body;
             }
@@ -88080,7 +89665,7 @@
          * @param node The named import bindings node.
          */
         function visitNamedImportBindings(node) {
-            if (node.kind === 264 /* NamespaceImport */) {
+            if (node.kind === 266 /* NamespaceImport */) {
                 // Elide a namespace import if it is not referenced.
                 return resolver.isReferencedAliasDeclaration(node) ? node : undefined;
             }
@@ -88307,14 +89892,14 @@
             return factory.createPropertyAccessExpression(factory.getDeclarationName(node), "prototype");
         }
         function getClassMemberPrefix(node, member) {
-            return ts.hasSyntacticModifier(member, 32 /* Static */)
+            return ts.isStatic(member)
                 ? factory.getDeclarationName(node)
                 : getClassPrototype(node);
         }
         function enableSubstitutionForNonQualifiedEnumMembers() {
             if ((enabledSubstitutions & 8 /* NonQualifiedEnumMembers */) === 0) {
                 enabledSubstitutions |= 8 /* NonQualifiedEnumMembers */;
-                context.enableSubstitution(78 /* Identifier */);
+                context.enableSubstitution(79 /* Identifier */);
             }
         }
         function enableSubstitutionForClassAliases() {
@@ -88322,7 +89907,7 @@
                 enabledSubstitutions |= 1 /* ClassAliases */;
                 // We need to enable substitutions for identifiers. This allows us to
                 // substitute class names inside of a class declaration.
-                context.enableSubstitution(78 /* Identifier */);
+                context.enableSubstitution(79 /* Identifier */);
                 // Keep track of class aliases.
                 classAliases = [];
             }
@@ -88332,17 +89917,17 @@
                 enabledSubstitutions |= 2 /* NamespaceExports */;
                 // We need to enable substitutions for identifiers and shorthand property assignments. This allows us to
                 // substitute the names of exported members of a namespace.
-                context.enableSubstitution(78 /* Identifier */);
-                context.enableSubstitution(290 /* ShorthandPropertyAssignment */);
+                context.enableSubstitution(79 /* Identifier */);
+                context.enableSubstitution(292 /* ShorthandPropertyAssignment */);
                 // We need to be notified when entering and exiting namespaces.
-                context.enableEmitNotification(257 /* ModuleDeclaration */);
+                context.enableEmitNotification(259 /* ModuleDeclaration */);
             }
         }
         function isTransformedModuleDeclaration(node) {
-            return ts.getOriginalNode(node).kind === 257 /* ModuleDeclaration */;
+            return ts.getOriginalNode(node).kind === 259 /* ModuleDeclaration */;
         }
         function isTransformedEnumDeclaration(node) {
-            return ts.getOriginalNode(node).kind === 256 /* EnumDeclaration */;
+            return ts.getOriginalNode(node).kind === 258 /* EnumDeclaration */;
         }
         /**
          * Hook for node emit.
@@ -88401,11 +89986,11 @@
         }
         function substituteExpression(node) {
             switch (node.kind) {
-                case 78 /* Identifier */:
+                case 79 /* Identifier */:
                     return substituteExpressionIdentifier(node);
-                case 202 /* PropertyAccessExpression */:
+                case 204 /* PropertyAccessExpression */:
                     return substitutePropertyAccessExpression(node);
-                case 203 /* ElementAccessExpression */:
+                case 205 /* ElementAccessExpression */:
                     return substituteElementAccessExpression(node);
             }
             return node;
@@ -88443,9 +90028,9 @@
                 // If we are nested within a namespace declaration, we may need to qualifiy
                 // an identifier that is exported from a merged namespace.
                 var container = resolver.getReferencedExportContainer(node, /*prefixLocals*/ false);
-                if (container && container.kind !== 298 /* SourceFile */) {
-                    var substitute = (applicableSubstitutions & 2 /* NamespaceExports */ && container.kind === 257 /* ModuleDeclaration */) ||
-                        (applicableSubstitutions & 8 /* NonQualifiedEnumMembers */ && container.kind === 256 /* EnumDeclaration */);
+                if (container && container.kind !== 300 /* SourceFile */) {
+                    var substitute = (applicableSubstitutions & 2 /* NamespaceExports */ && container.kind === 259 /* ModuleDeclaration */) ||
+                        (applicableSubstitutions & 8 /* NonQualifiedEnumMembers */ && container.kind === 258 /* EnumDeclaration */);
                     if (substitute) {
                         return ts.setTextRange(factory.createPropertyAccessExpression(factory.getGeneratedNameForNode(container), node), 
                         /*location*/ node);
@@ -88496,6 +90081,11 @@
          * which have initializers that reference the class name.
          */
         ClassPropertySubstitutionFlags[ClassPropertySubstitutionFlags["ClassAliases"] = 1] = "ClassAliases";
+        /**
+         * Enables substitutions for class expressions with static fields
+         * which have initializers that reference the 'this' or 'super'.
+         */
+        ClassPropertySubstitutionFlags[ClassPropertySubstitutionFlags["ClassStaticThisOrSuperReference"] = 2] = "ClassStaticThisOrSuperReference";
     })(ClassPropertySubstitutionFlags || (ClassPropertySubstitutionFlags = {}));
     var PrivateIdentifierKind;
     (function (PrivateIdentifierKind) {
@@ -88503,6 +90093,14 @@
         PrivateIdentifierKind["Method"] = "m";
         PrivateIdentifierKind["Accessor"] = "a";
     })(PrivateIdentifierKind = ts.PrivateIdentifierKind || (ts.PrivateIdentifierKind = {}));
+    var ClassFacts;
+    (function (ClassFacts) {
+        ClassFacts[ClassFacts["None"] = 0] = "None";
+        ClassFacts[ClassFacts["ClassWasDecorated"] = 1] = "ClassWasDecorated";
+        ClassFacts[ClassFacts["NeedsClassConstructorReference"] = 2] = "NeedsClassConstructorReference";
+        ClassFacts[ClassFacts["NeedsClassSuperReference"] = 4] = "NeedsClassSuperReference";
+        ClassFacts[ClassFacts["NeedsSubstitutionForThisInClassStaticField"] = 8] = "NeedsSubstitutionForThisInClassStaticField";
+    })(ClassFacts || (ClassFacts = {}));
     /**
      * Transforms ECMAScript Class Syntax.
      * TypeScript parameter property syntax is transformed in the TypeScript transformer.
@@ -88511,14 +90109,20 @@
      * When --useDefineForClassFields is on, this transforms to ECMAScript semantics, with Object.defineProperty.
      */
     function transformClassFields(context) {
-        var factory = context.factory, hoistVariableDeclaration = context.hoistVariableDeclaration, endLexicalEnvironment = context.endLexicalEnvironment, resumeLexicalEnvironment = context.resumeLexicalEnvironment, addBlockScopedVariable = context.addBlockScopedVariable;
+        var factory = context.factory, hoistVariableDeclaration = context.hoistVariableDeclaration, endLexicalEnvironment = context.endLexicalEnvironment, startLexicalEnvironment = context.startLexicalEnvironment, resumeLexicalEnvironment = context.resumeLexicalEnvironment, addBlockScopedVariable = context.addBlockScopedVariable;
         var resolver = context.getEmitResolver();
         var compilerOptions = context.getCompilerOptions();
         var languageVersion = ts.getEmitScriptTarget(compilerOptions);
         var useDefineForClassFields = ts.getUseDefineForClassFields(compilerOptions);
-        var shouldTransformPrivateElements = languageVersion < 99 /* ESNext */;
+        var shouldTransformPrivateElementsOrClassStaticBlocks = languageVersion < 99 /* ESNext */;
+        // We don't need to transform `super` property access when targeting ES5, ES3 because
+        // the es2015 transformation handles those.
+        var shouldTransformSuperInStaticInitializers = (languageVersion <= 8 /* ES2021 */ || !useDefineForClassFields) && languageVersion >= 2 /* ES2015 */;
+        var shouldTransformThisInStaticInitializers = languageVersion <= 8 /* ES2021 */ || !useDefineForClassFields;
         var previousOnSubstituteNode = context.onSubstituteNode;
         context.onSubstituteNode = onSubstituteNode;
+        var previousOnEmitNode = context.onEmitNode;
+        context.onEmitNode = onEmitNode;
         var enabledSubstitutions;
         var classAliases;
         /**
@@ -88531,8 +90135,11 @@
          * emitted at the next execution site, in document order (for decorated classes).
          */
         var pendingStatements;
-        var privateIdentifierEnvironmentStack = [];
-        var currentPrivateIdentifierEnvironment;
+        var classLexicalEnvironmentStack = [];
+        var classLexicalEnvironmentMap = new ts.Map();
+        var currentClassLexicalEnvironment;
+        var currentComputedPropertyNameClassLexicalEnvironment;
+        var currentStaticPropertyDeclarationOrStaticBlock;
         return ts.chainBundle(context, transformSourceFile);
         function transformSourceFile(node) {
             var options = context.getCompilerOptions();
@@ -88544,42 +90151,80 @@
             ts.addEmitHelpers(visited, context.readEmitHelpers());
             return visited;
         }
-        function visitor(node) {
-            if (!(node.transformFlags & 8388608 /* ContainsClassFields */))
-                return node;
-            switch (node.kind) {
-                case 222 /* ClassExpression */:
-                case 253 /* ClassDeclaration */:
-                    return visitClassLike(node);
-                case 164 /* PropertyDeclaration */:
-                    return visitPropertyDeclaration(node);
-                case 233 /* VariableStatement */:
-                    return visitVariableStatement(node);
-                case 202 /* PropertyAccessExpression */:
-                    return visitPropertyAccessExpression(node);
-                case 215 /* PrefixUnaryExpression */:
-                    return visitPrefixUnaryExpression(node);
-                case 216 /* PostfixUnaryExpression */:
-                    return visitPostfixUnaryExpression(node, /*valueIsDiscarded*/ false);
-                case 204 /* CallExpression */:
-                    return visitCallExpression(node);
-                case 217 /* BinaryExpression */:
-                    return visitBinaryExpression(node);
-                case 79 /* PrivateIdentifier */:
-                    return visitPrivateIdentifier(node);
-                case 234 /* ExpressionStatement */:
-                    return visitExpressionStatement(node);
-                case 238 /* ForStatement */:
-                    return visitForStatement(node);
-                case 206 /* TaggedTemplateExpression */:
-                    return visitTaggedTemplateExpression(node);
+        function visitorWorker(node, valueIsDiscarded) {
+            if (node.transformFlags & 8388608 /* ContainsClassFields */) {
+                switch (node.kind) {
+                    case 224 /* ClassExpression */:
+                    case 255 /* ClassDeclaration */:
+                        return visitClassLike(node);
+                    case 165 /* PropertyDeclaration */:
+                        return visitPropertyDeclaration(node);
+                    case 235 /* VariableStatement */:
+                        return visitVariableStatement(node);
+                    case 80 /* PrivateIdentifier */:
+                        return visitPrivateIdentifier(node);
+                    case 168 /* ClassStaticBlockDeclaration */:
+                        return visitClassStaticBlockDeclaration(node);
+                }
+            }
+            if (node.transformFlags & 8388608 /* ContainsClassFields */ ||
+                node.transformFlags & 33554432 /* ContainsLexicalSuper */ &&
+                    shouldTransformSuperInStaticInitializers &&
+                    currentStaticPropertyDeclarationOrStaticBlock &&
+                    currentClassLexicalEnvironment) {
+                switch (node.kind) {
+                    case 217 /* PrefixUnaryExpression */:
+                    case 218 /* PostfixUnaryExpression */:
+                        return visitPreOrPostfixUnaryExpression(node, valueIsDiscarded);
+                    case 219 /* BinaryExpression */:
+                        return visitBinaryExpression(node, valueIsDiscarded);
+                    case 206 /* CallExpression */:
+                        return visitCallExpression(node);
+                    case 208 /* TaggedTemplateExpression */:
+                        return visitTaggedTemplateExpression(node);
+                    case 204 /* PropertyAccessExpression */:
+                        return visitPropertyAccessExpression(node);
+                    case 205 /* ElementAccessExpression */:
+                        return visitElementAccessExpression(node);
+                    case 236 /* ExpressionStatement */:
+                        return visitExpressionStatement(node);
+                    case 240 /* ForStatement */:
+                        return visitForStatement(node);
+                    case 254 /* FunctionDeclaration */:
+                    case 211 /* FunctionExpression */:
+                    case 169 /* Constructor */:
+                    case 167 /* MethodDeclaration */:
+                    case 170 /* GetAccessor */:
+                    case 171 /* SetAccessor */: {
+                        var savedCurrentStaticPropertyDeclarationOrStaticBlock = currentStaticPropertyDeclarationOrStaticBlock;
+                        currentStaticPropertyDeclarationOrStaticBlock = undefined;
+                        var result = ts.visitEachChild(node, visitor, context);
+                        currentStaticPropertyDeclarationOrStaticBlock = savedCurrentStaticPropertyDeclarationOrStaticBlock;
+                        return result;
+                    }
+                }
             }
             return ts.visitEachChild(node, visitor, context);
         }
+        function discardedValueVisitor(node) {
+            return visitorWorker(node, /*valueIsDiscarded*/ true);
+        }
+        function visitor(node) {
+            return visitorWorker(node, /*valueIsDiscarded*/ false);
+        }
+        function heritageClauseVisitor(node) {
+            switch (node.kind) {
+                case 289 /* HeritageClause */:
+                    return ts.visitEachChild(node, heritageClauseVisitor, context);
+                case 226 /* ExpressionWithTypeArguments */:
+                    return visitExpressionWithTypeArguments(node);
+            }
+            return visitor(node);
+        }
         function visitorDestructuringTarget(node) {
             switch (node.kind) {
-                case 201 /* ObjectLiteralExpression */:
-                case 200 /* ArrayLiteralExpression */:
+                case 203 /* ObjectLiteralExpression */:
+                case 202 /* ArrayLiteralExpression */:
                     return visitAssignmentPattern(node);
                 default:
                     return visitor(node);
@@ -88590,7 +90235,7 @@
          * Replace it with an empty identifier to indicate a problem with the code.
          */
         function visitPrivateIdentifier(node) {
-            if (!shouldTransformPrivateElements) {
+            if (!shouldTransformPrivateElementsOrClassStaticBlocks) {
                 return node;
             }
             return ts.setOriginalNode(factory.createIdentifier(""), node);
@@ -88602,19 +90247,19 @@
          */
         function classElementVisitor(node) {
             switch (node.kind) {
-                case 167 /* Constructor */:
+                case 169 /* Constructor */:
                     // Constructors for classes using class fields are transformed in
                     // `visitClassDeclaration` or `visitClassExpression`.
                     return undefined;
-                case 168 /* GetAccessor */:
-                case 169 /* SetAccessor */:
-                case 166 /* MethodDeclaration */:
+                case 170 /* GetAccessor */:
+                case 171 /* SetAccessor */:
+                case 167 /* MethodDeclaration */:
                     return visitMethodOrAccessorDeclaration(node);
-                case 164 /* PropertyDeclaration */:
+                case 165 /* PropertyDeclaration */:
                     return visitPropertyDeclaration(node);
-                case 159 /* ComputedPropertyName */:
+                case 160 /* ComputedPropertyName */:
                     return visitComputedPropertyName(node);
-                case 230 /* SemicolonClassElement */:
+                case 232 /* SemicolonClassElement */:
                     return node;
                 default:
                     return visitor(node);
@@ -88624,7 +90269,7 @@
             var savedPendingStatements = pendingStatements;
             pendingStatements = [];
             var visitedNode = ts.visitEachChild(node, visitor, context);
-            var statement = ts.some(pendingStatements) ? __spreadArray([visitedNode], pendingStatements) :
+            var statement = ts.some(pendingStatements) ? __spreadArray([visitedNode], pendingStatements, true) :
                 visitedNode;
             pendingStatements = savedPendingStatements;
             return statement;
@@ -88641,7 +90286,7 @@
         }
         function visitMethodOrAccessorDeclaration(node) {
             ts.Debug.assert(!ts.some(node.decorators));
-            if (!shouldTransformPrivateElements || !ts.isPrivateIdentifier(node.name)) {
+            if (!shouldTransformPrivateElementsOrClassStaticBlocks || !ts.isPrivateIdentifier(node.name)) {
                 return ts.visitEachChild(node, classElementVisitor, context);
             }
             // leave invalid code untransformed
@@ -88678,7 +90323,7 @@
         function visitPropertyDeclaration(node) {
             ts.Debug.assert(!ts.some(node.decorators));
             if (ts.isPrivateIdentifier(node.name)) {
-                if (!shouldTransformPrivateElements) {
+                if (!shouldTransformPrivateElementsOrClassStaticBlocks) {
                     // Initializer is elided as the field is initialized in transformConstructor.
                     return factory.updatePropertyDeclaration(node, 
                     /*decorators*/ undefined, ts.visitNodes(node.modifiers, visitor, ts.isModifier), node.name, 
@@ -88719,60 +90364,130 @@
             }
         }
         function visitPropertyAccessExpression(node) {
-            if (shouldTransformPrivateElements && ts.isPrivateIdentifier(node.name)) {
+            if (shouldTransformPrivateElementsOrClassStaticBlocks && ts.isPrivateIdentifier(node.name)) {
                 var privateIdentifierInfo = accessPrivateIdentifier(node.name);
                 if (privateIdentifierInfo) {
                     return ts.setTextRange(ts.setOriginalNode(createPrivateIdentifierAccess(privateIdentifierInfo, node.expression), node), node);
                 }
             }
-            return ts.visitEachChild(node, visitor, context);
-        }
-        function visitPrefixUnaryExpression(node) {
-            if (shouldTransformPrivateElements && ts.isPrivateIdentifierPropertyAccessExpression(node.operand)) {
-                var operator = node.operator === 45 /* PlusPlusToken */ ?
-                    39 /* PlusToken */ : node.operator === 46 /* MinusMinusToken */ ?
-                    40 /* MinusToken */ : undefined;
-                var info = void 0;
-                if (operator && (info = accessPrivateIdentifier(node.operand.name))) {
-                    var receiver = ts.visitNode(node.operand.expression, visitor, ts.isExpression);
-                    var _a = createCopiableReceiverExpr(receiver), readExpression = _a.readExpression, initializeExpression = _a.initializeExpression;
-                    var existingValue = factory.createPrefixUnaryExpression(39 /* PlusToken */, createPrivateIdentifierAccess(info, readExpression));
-                    return ts.setOriginalNode(createPrivateIdentifierAssignment(info, initializeExpression || readExpression, factory.createBinaryExpression(existingValue, operator, factory.createNumericLiteral(1)), 62 /* EqualsToken */), node);
+            if (shouldTransformSuperInStaticInitializers &&
+                ts.isSuperProperty(node) &&
+                ts.isIdentifier(node.name) &&
+                currentStaticPropertyDeclarationOrStaticBlock &&
+                currentClassLexicalEnvironment) {
+                var classConstructor = currentClassLexicalEnvironment.classConstructor, superClassReference = currentClassLexicalEnvironment.superClassReference, facts = currentClassLexicalEnvironment.facts;
+                if (facts & 1 /* ClassWasDecorated */) {
+                    return visitInvalidSuperProperty(node);
+                }
+                if (classConstructor && superClassReference) {
+                    // converts `super.x` into `Reflect.get(_baseTemp, "x", _classTemp)`
+                    var superProperty = factory.createReflectGetCall(superClassReference, factory.createStringLiteralFromNode(node.name), classConstructor);
+                    ts.setOriginalNode(superProperty, node.expression);
+                    ts.setTextRange(superProperty, node.expression);
+                    return superProperty;
                 }
             }
             return ts.visitEachChild(node, visitor, context);
         }
-        function visitPostfixUnaryExpression(node, valueIsDiscarded) {
-            if (shouldTransformPrivateElements && ts.isPrivateIdentifierPropertyAccessExpression(node.operand)) {
-                var operator = node.operator === 45 /* PlusPlusToken */ ?
-                    39 /* PlusToken */ : node.operator === 46 /* MinusMinusToken */ ?
-                    40 /* MinusToken */ : undefined;
-                var info = void 0;
-                if (operator && (info = accessPrivateIdentifier(node.operand.name))) {
-                    var receiver = ts.visitNode(node.operand.expression, visitor, ts.isExpression);
-                    var _a = createCopiableReceiverExpr(receiver), readExpression = _a.readExpression, initializeExpression = _a.initializeExpression;
-                    var existingValue = factory.createPrefixUnaryExpression(39 /* PlusToken */, createPrivateIdentifierAccess(info, readExpression));
-                    // Create a temporary variable to store the value returned by the expression.
-                    var returnValue = valueIsDiscarded ? undefined : factory.createTempVariable(hoistVariableDeclaration);
-                    return ts.setOriginalNode(factory.inlineExpressions(ts.compact([
-                        createPrivateIdentifierAssignment(info, initializeExpression || readExpression, factory.createBinaryExpression(returnValue ? factory.createAssignment(returnValue, existingValue) : existingValue, operator, factory.createNumericLiteral(1)), 62 /* EqualsToken */),
-                        returnValue
-                    ])), node);
+        function visitElementAccessExpression(node) {
+            if (shouldTransformSuperInStaticInitializers &&
+                ts.isSuperProperty(node) &&
+                currentStaticPropertyDeclarationOrStaticBlock &&
+                currentClassLexicalEnvironment) {
+                var classConstructor = currentClassLexicalEnvironment.classConstructor, superClassReference = currentClassLexicalEnvironment.superClassReference, facts = currentClassLexicalEnvironment.facts;
+                if (facts & 1 /* ClassWasDecorated */) {
+                    return visitInvalidSuperProperty(node);
+                }
+                if (classConstructor && superClassReference) {
+                    // converts `super[x]` into `Reflect.get(_baseTemp, x, _classTemp)`
+                    var superProperty = factory.createReflectGetCall(superClassReference, ts.visitNode(node.argumentExpression, visitor, ts.isExpression), classConstructor);
+                    ts.setOriginalNode(superProperty, node.expression);
+                    ts.setTextRange(superProperty, node.expression);
+                    return superProperty;
+                }
+            }
+            return ts.visitEachChild(node, visitor, context);
+        }
+        function visitPreOrPostfixUnaryExpression(node, valueIsDiscarded) {
+            if (node.operator === 45 /* PlusPlusToken */ || node.operator === 46 /* MinusMinusToken */) {
+                if (shouldTransformPrivateElementsOrClassStaticBlocks && ts.isPrivateIdentifierPropertyAccessExpression(node.operand)) {
+                    var info = void 0;
+                    if (info = accessPrivateIdentifier(node.operand.name)) {
+                        var receiver = ts.visitNode(node.operand.expression, visitor, ts.isExpression);
+                        var _a = createCopiableReceiverExpr(receiver), readExpression = _a.readExpression, initializeExpression = _a.initializeExpression;
+                        var expression = createPrivateIdentifierAccess(info, readExpression);
+                        var temp = ts.isPrefixUnaryExpression(node) || valueIsDiscarded ? undefined : factory.createTempVariable(hoistVariableDeclaration);
+                        expression = ts.expandPreOrPostfixIncrementOrDecrementExpression(factory, node, expression, hoistVariableDeclaration, temp);
+                        expression = createPrivateIdentifierAssignment(info, initializeExpression || readExpression, expression, 63 /* EqualsToken */);
+                        ts.setOriginalNode(expression, node);
+                        ts.setTextRange(expression, node);
+                        if (temp) {
+                            expression = factory.createComma(expression, temp);
+                            ts.setTextRange(expression, node);
+                        }
+                        return expression;
+                    }
+                }
+                else if (shouldTransformSuperInStaticInitializers &&
+                    ts.isSuperProperty(node.operand) &&
+                    currentStaticPropertyDeclarationOrStaticBlock &&
+                    currentClassLexicalEnvironment) {
+                    // converts `++super.a` into `(Reflect.set(_baseTemp, "a", (_a = Reflect.get(_baseTemp, "a", _classTemp), _b = ++_a), _classTemp), _b)`
+                    // converts `++super[f()]` into `(Reflect.set(_baseTemp, _a = f(), (_b = Reflect.get(_baseTemp, _a, _classTemp), _c = ++_b), _classTemp), _c)`
+                    // converts `--super.a` into `(Reflect.set(_baseTemp, "a", (_a = Reflect.get(_baseTemp, "a", _classTemp), _b = --_a), _classTemp), _b)`
+                    // converts `--super[f()]` into `(Reflect.set(_baseTemp, _a = f(), (_b = Reflect.get(_baseTemp, _a, _classTemp), _c = --_b), _classTemp), _c)`
+                    // converts `super.a++` into `(Reflect.set(_baseTemp, "a", (_a = Reflect.get(_baseTemp, "a", _classTemp), _b = _a++), _classTemp), _b)`
+                    // converts `super[f()]++` into `(Reflect.set(_baseTemp, _a = f(), (_b = Reflect.get(_baseTemp, _a, _classTemp), _c = _b++), _classTemp), _c)`
+                    // converts `super.a--` into `(Reflect.set(_baseTemp, "a", (_a = Reflect.get(_baseTemp, "a", _classTemp), _b = _a--), _classTemp), _b)`
+                    // converts `super[f()]--` into `(Reflect.set(_baseTemp, _a = f(), (_b = Reflect.get(_baseTemp, _a, _classTemp), _c = _b--), _classTemp), _c)`
+                    var classConstructor = currentClassLexicalEnvironment.classConstructor, superClassReference = currentClassLexicalEnvironment.superClassReference, facts = currentClassLexicalEnvironment.facts;
+                    if (facts & 1 /* ClassWasDecorated */) {
+                        var operand = visitInvalidSuperProperty(node.operand);
+                        return ts.isPrefixUnaryExpression(node) ?
+                            factory.updatePrefixUnaryExpression(node, operand) :
+                            factory.updatePostfixUnaryExpression(node, operand);
+                    }
+                    if (classConstructor && superClassReference) {
+                        var setterName = void 0;
+                        var getterName = void 0;
+                        if (ts.isPropertyAccessExpression(node.operand)) {
+                            if (ts.isIdentifier(node.operand.name)) {
+                                getterName = setterName = factory.createStringLiteralFromNode(node.operand.name);
+                            }
+                        }
+                        else {
+                            if (ts.isSimpleInlineableExpression(node.operand.argumentExpression)) {
+                                getterName = setterName = node.operand.argumentExpression;
+                            }
+                            else {
+                                getterName = factory.createTempVariable(hoistVariableDeclaration);
+                                setterName = factory.createAssignment(getterName, ts.visitNode(node.operand.argumentExpression, visitor, ts.isExpression));
+                            }
+                        }
+                        if (setterName && getterName) {
+                            var expression = factory.createReflectGetCall(superClassReference, getterName, classConstructor);
+                            ts.setTextRange(expression, node.operand);
+                            var temp = valueIsDiscarded ? undefined : factory.createTempVariable(hoistVariableDeclaration);
+                            expression = ts.expandPreOrPostfixIncrementOrDecrementExpression(factory, node, expression, hoistVariableDeclaration, temp);
+                            expression = factory.createReflectSetCall(superClassReference, setterName, expression, classConstructor);
+                            ts.setOriginalNode(expression, node);
+                            ts.setTextRange(expression, node);
+                            if (temp) {
+                                expression = factory.createComma(expression, temp);
+                                ts.setTextRange(expression, node);
+                            }
+                            return expression;
+                        }
+                    }
                 }
             }
             return ts.visitEachChild(node, visitor, context);
         }
         function visitForStatement(node) {
-            if (node.incrementor && ts.isPostfixUnaryExpression(node.incrementor)) {
-                return factory.updateForStatement(node, ts.visitNode(node.initializer, visitor, ts.isForInitializer), ts.visitNode(node.condition, visitor, ts.isExpression), visitPostfixUnaryExpression(node.incrementor, /*valueIsDiscarded*/ true), ts.visitIterationBody(node.statement, visitor, context));
-            }
-            return ts.visitEachChild(node, visitor, context);
+            return factory.updateForStatement(node, ts.visitNode(node.initializer, discardedValueVisitor, ts.isForInitializer), ts.visitNode(node.condition, visitor, ts.isExpression), ts.visitNode(node.incrementor, discardedValueVisitor, ts.isExpression), ts.visitIterationBody(node.statement, visitor, context));
         }
         function visitExpressionStatement(node) {
-            if (ts.isPostfixUnaryExpression(node.expression)) {
-                return factory.updateExpressionStatement(node, visitPostfixUnaryExpression(node.expression, /*valueIsDiscarded*/ true));
-            }
-            return ts.visitEachChild(node, visitor, context);
+            return factory.updateExpressionStatement(node, ts.visitNode(node.expression, discardedValueVisitor, ts.isExpression));
         }
         function createCopiableReceiverExpr(receiver) {
             var clone = ts.nodeIsSynthesized(receiver) ? receiver : factory.cloneNode(receiver);
@@ -88784,47 +90499,132 @@
             return { readExpression: readExpression, initializeExpression: initializeExpression };
         }
         function visitCallExpression(node) {
-            if (shouldTransformPrivateElements && ts.isPrivateIdentifierPropertyAccessExpression(node.expression)) {
+            if (shouldTransformPrivateElementsOrClassStaticBlocks && ts.isPrivateIdentifierPropertyAccessExpression(node.expression)) {
                 // Transform call expressions of private names to properly bind the `this` parameter.
                 var _a = factory.createCallBinding(node.expression, hoistVariableDeclaration, languageVersion), thisArg = _a.thisArg, target = _a.target;
                 if (ts.isCallChain(node)) {
                     return factory.updateCallChain(node, factory.createPropertyAccessChain(ts.visitNode(target, visitor), node.questionDotToken, "call"), 
                     /*questionDotToken*/ undefined, 
-                    /*typeArguments*/ undefined, __spreadArray([ts.visitNode(thisArg, visitor, ts.isExpression)], ts.visitNodes(node.arguments, visitor, ts.isExpression)));
+                    /*typeArguments*/ undefined, __spreadArray([ts.visitNode(thisArg, visitor, ts.isExpression)], ts.visitNodes(node.arguments, visitor, ts.isExpression), true));
                 }
                 return factory.updateCallExpression(node, factory.createPropertyAccessExpression(ts.visitNode(target, visitor), "call"), 
-                /*typeArguments*/ undefined, __spreadArray([ts.visitNode(thisArg, visitor, ts.isExpression)], ts.visitNodes(node.arguments, visitor, ts.isExpression)));
+                /*typeArguments*/ undefined, __spreadArray([ts.visitNode(thisArg, visitor, ts.isExpression)], ts.visitNodes(node.arguments, visitor, ts.isExpression), true));
+            }
+            if (shouldTransformSuperInStaticInitializers &&
+                ts.isSuperProperty(node.expression) &&
+                currentStaticPropertyDeclarationOrStaticBlock &&
+                (currentClassLexicalEnvironment === null || currentClassLexicalEnvironment === void 0 ? void 0 : currentClassLexicalEnvironment.classConstructor)) {
+                // converts `super.f(...)` into `Reflect.get(_baseTemp, "f", _classTemp).call(_classTemp, ...)`
+                var invocation = factory.createFunctionCallCall(ts.visitNode(node.expression, visitor, ts.isExpression), currentClassLexicalEnvironment.classConstructor, ts.visitNodes(node.arguments, visitor, ts.isExpression));
+                ts.setOriginalNode(invocation, node);
+                ts.setTextRange(invocation, node);
+                return invocation;
             }
             return ts.visitEachChild(node, visitor, context);
         }
         function visitTaggedTemplateExpression(node) {
-            if (shouldTransformPrivateElements && ts.isPrivateIdentifierPropertyAccessExpression(node.tag)) {
+            if (shouldTransformPrivateElementsOrClassStaticBlocks && ts.isPrivateIdentifierPropertyAccessExpression(node.tag)) {
                 // Bind the `this` correctly for tagged template literals when the tag is a private identifier property access.
                 var _a = factory.createCallBinding(node.tag, hoistVariableDeclaration, languageVersion), thisArg = _a.thisArg, target = _a.target;
                 return factory.updateTaggedTemplateExpression(node, factory.createCallExpression(factory.createPropertyAccessExpression(ts.visitNode(target, visitor), "bind"), 
                 /*typeArguments*/ undefined, [ts.visitNode(thisArg, visitor, ts.isExpression)]), 
                 /*typeArguments*/ undefined, ts.visitNode(node.template, visitor, ts.isTemplateLiteral));
             }
+            if (shouldTransformSuperInStaticInitializers &&
+                ts.isSuperProperty(node.tag) &&
+                currentStaticPropertyDeclarationOrStaticBlock &&
+                (currentClassLexicalEnvironment === null || currentClassLexicalEnvironment === void 0 ? void 0 : currentClassLexicalEnvironment.classConstructor)) {
+                // converts `` super.f`x` `` into `` Reflect.get(_baseTemp, "f", _classTemp).bind(_classTemp)`x` ``
+                var invocation = factory.createFunctionBindCall(ts.visitNode(node.tag, visitor, ts.isExpression), currentClassLexicalEnvironment.classConstructor, []);
+                ts.setOriginalNode(invocation, node);
+                ts.setTextRange(invocation, node);
+                return factory.updateTaggedTemplateExpression(node, invocation, 
+                /*typeArguments*/ undefined, ts.visitNode(node.template, visitor, ts.isTemplateLiteral));
+            }
             return ts.visitEachChild(node, visitor, context);
         }
-        function visitBinaryExpression(node) {
-            if (shouldTransformPrivateElements) {
-                if (ts.isDestructuringAssignment(node)) {
-                    var savedPendingExpressions = pendingExpressions;
-                    pendingExpressions = undefined;
-                    node = factory.updateBinaryExpression(node, ts.visitNode(node.left, visitorDestructuringTarget), node.operatorToken, ts.visitNode(node.right, visitor));
-                    var expr = ts.some(pendingExpressions) ?
-                        factory.inlineExpressions(ts.compact(__spreadArray(__spreadArray([], pendingExpressions), [node]))) :
-                        node;
-                    pendingExpressions = savedPendingExpressions;
-                    return expr;
+        function transformClassStaticBlockDeclaration(node) {
+            if (shouldTransformPrivateElementsOrClassStaticBlocks) {
+                if (currentClassLexicalEnvironment) {
+                    classLexicalEnvironmentMap.set(ts.getOriginalNodeId(node), currentClassLexicalEnvironment);
                 }
-                if (ts.isAssignmentExpression(node) && ts.isPrivateIdentifierPropertyAccessExpression(node.left)) {
+                startLexicalEnvironment();
+                var savedCurrentStaticPropertyDeclarationOrStaticBlock = currentStaticPropertyDeclarationOrStaticBlock;
+                currentStaticPropertyDeclarationOrStaticBlock = node;
+                var statements = ts.visitNodes(node.body.statements, visitor, ts.isStatement);
+                statements = factory.mergeLexicalEnvironment(statements, endLexicalEnvironment());
+                currentStaticPropertyDeclarationOrStaticBlock = savedCurrentStaticPropertyDeclarationOrStaticBlock;
+                var iife = factory.createImmediatelyInvokedArrowFunction(statements);
+                ts.setOriginalNode(iife, node);
+                ts.setTextRange(iife, node);
+                ts.addEmitFlags(iife, 2 /* AdviseOnEmitNode */);
+                return iife;
+            }
+        }
+        function visitBinaryExpression(node, valueIsDiscarded) {
+            if (ts.isDestructuringAssignment(node)) {
+                var savedPendingExpressions = pendingExpressions;
+                pendingExpressions = undefined;
+                node = factory.updateBinaryExpression(node, ts.visitNode(node.left, visitorDestructuringTarget), node.operatorToken, ts.visitNode(node.right, visitor));
+                var expr = ts.some(pendingExpressions) ?
+                    factory.inlineExpressions(ts.compact(__spreadArray(__spreadArray([], pendingExpressions, true), [node], false))) :
+                    node;
+                pendingExpressions = savedPendingExpressions;
+                return expr;
+            }
+            if (ts.isAssignmentExpression(node)) {
+                if (shouldTransformPrivateElementsOrClassStaticBlocks && ts.isPrivateIdentifierPropertyAccessExpression(node.left)) {
                     var info = accessPrivateIdentifier(node.left.name);
                     if (info) {
                         return ts.setTextRange(ts.setOriginalNode(createPrivateIdentifierAssignment(info, node.left.expression, node.right, node.operatorToken.kind), node), node);
                     }
                 }
+                else if (shouldTransformSuperInStaticInitializers &&
+                    ts.isSuperProperty(node.left) &&
+                    currentStaticPropertyDeclarationOrStaticBlock &&
+                    currentClassLexicalEnvironment) {
+                    var classConstructor = currentClassLexicalEnvironment.classConstructor, superClassReference = currentClassLexicalEnvironment.superClassReference, facts = currentClassLexicalEnvironment.facts;
+                    if (facts & 1 /* ClassWasDecorated */) {
+                        return factory.updateBinaryExpression(node, visitInvalidSuperProperty(node.left), node.operatorToken, ts.visitNode(node.right, visitor, ts.isExpression));
+                    }
+                    if (classConstructor && superClassReference) {
+                        var setterName = ts.isElementAccessExpression(node.left) ? ts.visitNode(node.left.argumentExpression, visitor, ts.isExpression) :
+                            ts.isIdentifier(node.left.name) ? factory.createStringLiteralFromNode(node.left.name) :
+                                undefined;
+                        if (setterName) {
+                            // converts `super.x = 1` into `(Reflect.set(_baseTemp, "x", _a = 1, _classTemp), _a)`
+                            // converts `super[f()] = 1` into `(Reflect.set(_baseTemp, f(), _a = 1, _classTemp), _a)`
+                            // converts `super.x += 1` into `(Reflect.set(_baseTemp, "x", _a = Reflect.get(_baseTemp, "x", _classtemp) + 1, _classTemp), _a)`
+                            // converts `super[f()] += 1` into `(Reflect.set(_baseTemp, _a = f(), _b = Reflect.get(_baseTemp, _a, _classtemp) + 1, _classTemp), _b)`
+                            var expression = ts.visitNode(node.right, visitor, ts.isExpression);
+                            if (ts.isCompoundAssignment(node.operatorToken.kind)) {
+                                var getterName = setterName;
+                                if (!ts.isSimpleInlineableExpression(setterName)) {
+                                    getterName = factory.createTempVariable(hoistVariableDeclaration);
+                                    setterName = factory.createAssignment(getterName, setterName);
+                                }
+                                var superPropertyGet = factory.createReflectGetCall(superClassReference, getterName, classConstructor);
+                                ts.setOriginalNode(superPropertyGet, node.left);
+                                ts.setTextRange(superPropertyGet, node.left);
+                                expression = factory.createBinaryExpression(superPropertyGet, ts.getNonAssignmentOperatorForCompoundAssignment(node.operatorToken.kind), expression);
+                                ts.setTextRange(expression, node);
+                            }
+                            var temp = valueIsDiscarded ? undefined : factory.createTempVariable(hoistVariableDeclaration);
+                            if (temp) {
+                                expression = factory.createAssignment(temp, expression);
+                                ts.setTextRange(temp, node);
+                            }
+                            expression = factory.createReflectSetCall(superClassReference, setterName, expression, classConstructor);
+                            ts.setOriginalNode(expression, node);
+                            ts.setTextRange(expression, node);
+                            if (temp) {
+                                expression = factory.createComma(expression, temp);
+                                ts.setTextRange(expression, node);
+                            }
+                            return expression;
+                        }
+                    }
+                }
             }
             return ts.visitEachChild(node, visitor, context);
         }
@@ -88853,10 +90653,13 @@
          * Set up the environment for a class.
          */
         function visitClassLike(node) {
+            if (!ts.forEach(node.members, doesClassElementNeedTransform)) {
+                return ts.visitEachChild(node, visitor, context);
+            }
             var savedPendingExpressions = pendingExpressions;
             pendingExpressions = undefined;
-            if (shouldTransformPrivateElements) {
-                startPrivateIdentifierEnvironment();
+            startClassLexicalEnvironment();
+            if (shouldTransformPrivateElementsOrClassStaticBlocks) {
                 var name = ts.getNameOfDeclaration(node);
                 if (name && ts.isIdentifier(name)) {
                     getPrivateIdentifierEnvironment().className = ts.idText(name);
@@ -88869,38 +90672,81 @@
             var result = ts.isClassDeclaration(node) ?
                 visitClassDeclaration(node) :
                 visitClassExpression(node);
-            if (shouldTransformPrivateElements) {
-                endPrivateIdentifierEnvironment();
-            }
+            endClassLexicalEnvironment();
             pendingExpressions = savedPendingExpressions;
             return result;
         }
         function doesClassElementNeedTransform(node) {
-            return ts.isPropertyDeclaration(node) || (shouldTransformPrivateElements && node.name && ts.isPrivateIdentifier(node.name));
+            return ts.isPropertyDeclaration(node) || ts.isClassStaticBlockDeclaration(node) || (shouldTransformPrivateElementsOrClassStaticBlocks && node.name && ts.isPrivateIdentifier(node.name));
         }
         function getPrivateInstanceMethodsAndAccessors(node) {
             return ts.filter(node.members, ts.isNonStaticMethodOrAccessorWithPrivateName);
         }
-        function visitClassDeclaration(node) {
-            if (!ts.forEach(node.members, doesClassElementNeedTransform)) {
-                return ts.visitEachChild(node, visitor, context);
+        function getClassFacts(node) {
+            var facts = 0 /* None */;
+            var original = ts.getOriginalNode(node);
+            if (ts.isClassDeclaration(original) && ts.classOrConstructorParameterIsDecorated(original)) {
+                facts |= 1 /* ClassWasDecorated */;
             }
-            var staticProperties = ts.getProperties(node, /*requireInitializer*/ false, /*isStatic*/ true);
-            var pendingPrivateStateAssignment;
-            if (shouldTransformPrivateElements && ts.some(node.members, function (m) { return ts.hasStaticModifier(m) && !!m.name && ts.isPrivateIdentifier(m.name); })) {
-                var temp = factory.createTempVariable(hoistVariableDeclaration, /* reservedInNestedScopes */ true);
-                getPrivateIdentifierEnvironment().classConstructor = factory.cloneNode(temp);
-                pendingPrivateStateAssignment = factory.createAssignment(temp, factory.getInternalName(node));
+            for (var _i = 0, _a = node.members; _i < _a.length; _i++) {
+                var member = _a[_i];
+                if (!ts.isStatic(member))
+                    continue;
+                if (member.name && ts.isPrivateIdentifier(member.name) && shouldTransformPrivateElementsOrClassStaticBlocks) {
+                    facts |= 2 /* NeedsClassConstructorReference */;
+                }
+                if (ts.isPropertyDeclaration(member) || ts.isClassStaticBlockDeclaration(member)) {
+                    if (shouldTransformThisInStaticInitializers && member.transformFlags & 8192 /* ContainsLexicalThis */) {
+                        facts |= 8 /* NeedsSubstitutionForThisInClassStaticField */;
+                        if (!(facts & 1 /* ClassWasDecorated */)) {
+                            facts |= 2 /* NeedsClassConstructorReference */;
+                        }
+                    }
+                    if (shouldTransformSuperInStaticInitializers && member.transformFlags & 33554432 /* ContainsLexicalSuper */) {
+                        if (!(facts & 1 /* ClassWasDecorated */)) {
+                            facts |= 2 /* NeedsClassConstructorReference */ | 4 /* NeedsClassSuperReference */;
+                        }
+                    }
+                }
+            }
+            return facts;
+        }
+        function visitExpressionWithTypeArguments(node) {
+            var facts = (currentClassLexicalEnvironment === null || currentClassLexicalEnvironment === void 0 ? void 0 : currentClassLexicalEnvironment.facts) || 0 /* None */;
+            if (facts & 4 /* NeedsClassSuperReference */) {
+                var temp = factory.createTempVariable(hoistVariableDeclaration, /*reserveInNestedScopes*/ true);
+                getClassLexicalEnvironment().superClassReference = temp;
+                return factory.updateExpressionWithTypeArguments(node, factory.createAssignment(temp, ts.visitNode(node.expression, visitor, ts.isExpression)), 
+                /*typeArguments*/ undefined);
+            }
+            return ts.visitEachChild(node, visitor, context);
+        }
+        function visitClassDeclaration(node) {
+            var facts = getClassFacts(node);
+            if (facts) {
+                getClassLexicalEnvironment().facts = facts;
+            }
+            if (facts & 8 /* NeedsSubstitutionForThisInClassStaticField */) {
+                enableSubstitutionForClassStaticThisOrSuperReference();
+            }
+            var staticProperties = ts.getStaticPropertiesAndClassStaticBlock(node);
+            // If a class has private static fields, or a static field has a `this` or `super` reference,
+            // then we need to allocate a temp variable to hold on to that reference.
+            var pendingClassReferenceAssignment;
+            if (facts & 2 /* NeedsClassConstructorReference */) {
+                var temp = factory.createTempVariable(hoistVariableDeclaration, /*reservedInNestedScopes*/ true);
+                getClassLexicalEnvironment().classConstructor = factory.cloneNode(temp);
+                pendingClassReferenceAssignment = factory.createAssignment(temp, factory.getInternalName(node));
             }
             var extendsClauseElement = ts.getEffectiveBaseTypeNode(node);
-            var isDerivedClass = !!(extendsClauseElement && ts.skipOuterExpressions(extendsClauseElement.expression).kind !== 103 /* NullKeyword */);
+            var isDerivedClass = !!(extendsClauseElement && ts.skipOuterExpressions(extendsClauseElement.expression).kind !== 104 /* NullKeyword */);
             var statements = [
                 factory.updateClassDeclaration(node, 
                 /*decorators*/ undefined, node.modifiers, node.name, 
-                /*typeParameters*/ undefined, ts.visitNodes(node.heritageClauses, visitor, ts.isHeritageClause), transformClassMembers(node, isDerivedClass))
+                /*typeParameters*/ undefined, ts.visitNodes(node.heritageClauses, heritageClauseVisitor, ts.isHeritageClause), transformClassMembers(node, isDerivedClass))
             ];
-            if (pendingPrivateStateAssignment) {
-                getPendingExpressions().unshift(pendingPrivateStateAssignment);
+            if (pendingClassReferenceAssignment) {
+                getPendingExpressions().unshift(pendingClassReferenceAssignment);
             }
             // Write any pending expressions from elided or moved computed property names
             if (ts.some(pendingExpressions)) {
@@ -88912,13 +90758,17 @@
             //      HasLexicalDeclaration (N) : Determines if the argument identifier has a binding in this environment record that was created using
             //                                  a lexical declaration such as a LexicalDeclaration or a ClassDeclaration.
             if (ts.some(staticProperties)) {
-                addPropertyStatements(statements, staticProperties, factory.getInternalName(node));
+                addPropertyOrClassStaticBlockStatements(statements, staticProperties, factory.getInternalName(node));
             }
             return statements;
         }
         function visitClassExpression(node) {
-            if (!ts.forEach(node.members, doesClassElementNeedTransform)) {
-                return ts.visitEachChild(node, visitor, context);
+            var facts = getClassFacts(node);
+            if (facts) {
+                getClassLexicalEnvironment().facts = facts;
+            }
+            if (facts & 8 /* NeedsSubstitutionForThisInClassStaticField */) {
+                enableSubstitutionForClassStaticThisOrSuperReference();
             }
             // If this class expression is a transformation of a decorated class declaration,
             // then we want to output the pendingExpressions as statements, not as inlined
@@ -88927,10 +90777,10 @@
             // In this case, we use pendingStatements to produce the same output as the
             // class declaration transformation. The VariableStatement visitor will insert
             // these statements after the class expression variable statement.
-            var isDecoratedClassDeclaration = ts.isClassDeclaration(ts.getOriginalNode(node));
-            var staticProperties = ts.getProperties(node, /*requireInitializer*/ false, /*isStatic*/ true);
+            var isDecoratedClassDeclaration = !!(facts & 1 /* ClassWasDecorated */);
+            var staticPropertiesOrClassStaticBlocks = ts.getStaticPropertiesAndClassStaticBlock(node);
             var extendsClauseElement = ts.getEffectiveBaseTypeNode(node);
-            var isDerivedClass = !!(extendsClauseElement && ts.skipOuterExpressions(extendsClauseElement.expression).kind !== 103 /* NullKeyword */);
+            var isDerivedClass = !!(extendsClauseElement && ts.skipOuterExpressions(extendsClauseElement.expression).kind !== 104 /* NullKeyword */);
             var isClassWithConstructorReference = resolver.getNodeCheckFlags(node) & 16777216 /* ClassWithConstructorReference */;
             var temp;
             function createClassTempVar() {
@@ -88939,13 +90789,13 @@
                 var requiresBlockScopedVar = classCheckFlags & 524288 /* BlockScopedBindingInLoop */;
                 return factory.createTempVariable(requiresBlockScopedVar ? addBlockScopedVariable : hoistVariableDeclaration, !!isClassWithConstructorReference);
             }
-            if (shouldTransformPrivateElements && ts.some(node.members, function (m) { return ts.hasStaticModifier(m) && !!m.name && ts.isPrivateIdentifier(m.name); })) {
+            if (facts & 2 /* NeedsClassConstructorReference */) {
                 temp = createClassTempVar();
-                getPrivateIdentifierEnvironment().classConstructor = factory.cloneNode(temp);
+                getClassLexicalEnvironment().classConstructor = factory.cloneNode(temp);
             }
             var classExpression = factory.updateClassExpression(node, ts.visitNodes(node.decorators, visitor, ts.isDecorator), node.modifiers, node.name, 
-            /*typeParameters*/ undefined, ts.visitNodes(node.heritageClauses, visitor, ts.isHeritageClause), transformClassMembers(node, isDerivedClass));
-            var hasTransformableStatics = ts.some(staticProperties, function (p) { return !!p.initializer || (shouldTransformPrivateElements && ts.isPrivateIdentifier(p.name)); });
+            /*typeParameters*/ undefined, ts.visitNodes(node.heritageClauses, heritageClauseVisitor, ts.isHeritageClause), transformClassMembers(node, isDerivedClass));
+            var hasTransformableStatics = ts.some(staticPropertiesOrClassStaticBlocks, function (p) { return ts.isClassStaticBlockDeclaration(p) || !!p.initializer || (shouldTransformPrivateElementsOrClassStaticBlocks && ts.isPrivateIdentifier(p.name)); });
             if (hasTransformableStatics || ts.some(pendingExpressions)) {
                 if (isDecoratedClassDeclaration) {
                     ts.Debug.assertIsDefined(pendingStatements, "Decorated classes transformed by TypeScript are expected to be within a variable declaration.");
@@ -88953,8 +90803,8 @@
                     if (pendingStatements && pendingExpressions && ts.some(pendingExpressions)) {
                         pendingStatements.push(factory.createExpressionStatement(factory.inlineExpressions(pendingExpressions)));
                     }
-                    if (pendingStatements && ts.some(staticProperties)) {
-                        addPropertyStatements(pendingStatements, staticProperties, factory.getInternalName(node));
+                    if (pendingStatements && ts.some(staticPropertiesOrClassStaticBlocks)) {
+                        addPropertyOrClassStaticBlockStatements(pendingStatements, staticPropertiesOrClassStaticBlocks, factory.getInternalName(node));
                     }
                     if (temp) {
                         return factory.inlineExpressions([factory.createAssignment(temp, classExpression), temp]);
@@ -88977,15 +90827,22 @@
                     expressions.push(ts.startOnNewLine(factory.createAssignment(temp, classExpression)));
                     // Add any pending expressions leftover from elided or relocated computed property names
                     ts.addRange(expressions, ts.map(pendingExpressions, ts.startOnNewLine));
-                    ts.addRange(expressions, generateInitializedPropertyExpressions(staticProperties, temp));
+                    ts.addRange(expressions, generateInitializedPropertyExpressionsOrClassStaticBlock(staticPropertiesOrClassStaticBlocks, temp));
                     expressions.push(ts.startOnNewLine(temp));
                     return factory.inlineExpressions(expressions);
                 }
             }
             return classExpression;
         }
+        function visitClassStaticBlockDeclaration(node) {
+            if (!shouldTransformPrivateElementsOrClassStaticBlocks) {
+                return ts.visitEachChild(node, classElementVisitor, context);
+            }
+            // ClassStaticBlockDeclaration for classes are transformed in `visitClassDeclaration` or `visitClassExpression`.
+            return undefined;
+        }
         function transformClassMembers(node, isDerivedClass) {
-            if (shouldTransformPrivateElements) {
+            if (shouldTransformPrivateElementsOrClassStaticBlocks) {
                 // Declare private names.
                 for (var _i = 0, _a = node.members; _i < _a.length; _i++) {
                     var member = _a[_i];
@@ -89012,7 +90869,7 @@
             /*typeArguments*/ undefined, [])));
         }
         function isClassElementThatRequiresConstructorStatement(member) {
-            if (ts.hasStaticModifier(member) || ts.hasSyntacticModifier(ts.getOriginalNode(member), 128 /* Abstract */)) {
+            if (ts.isStatic(member) || ts.hasSyntacticModifier(ts.getOriginalNode(member), 128 /* Abstract */)) {
                 return false;
             }
             if (useDefineForClassFields) {
@@ -89020,7 +90877,7 @@
                 // then we don't need to transform any class properties.
                 return languageVersion < 99 /* ESNext */;
             }
-            return ts.isInitializedProperty(member) || shouldTransformPrivateElements && ts.isPrivateIdentifierClassElementDeclaration(member);
+            return ts.isInitializedProperty(member) || shouldTransformPrivateElementsOrClassStaticBlocks && ts.isPrivateIdentifierClassElementDeclaration(member);
         }
         function transformConstructor(node, isDerivedClass) {
             var constructor = ts.visitNode(ts.getFirstConstructorWithBody(node), visitor, ts.isConstructorDeclaration);
@@ -89087,7 +90944,7 @@
             var receiver = factory.createThis();
             // private methods can be called in property initializers, they should execute first.
             addMethodStatements(statements, privateMethodsAndAccessors, receiver);
-            addPropertyStatements(statements, properties, receiver);
+            addPropertyOrClassStaticBlockStatements(statements, properties, receiver);
             // Add existing statements, skipping the initial super call.
             if (constructor) {
                 ts.addRange(statements, ts.visitNodes(constructor.body.statements, visitor, ts.isStatement, indexOfFirstStatement));
@@ -89104,10 +90961,12 @@
          * @param properties An array of property declarations to transform.
          * @param receiver The receiver on which each property should be assigned.
          */
-        function addPropertyStatements(statements, properties, receiver) {
+        function addPropertyOrClassStaticBlockStatements(statements, properties, receiver) {
             for (var _i = 0, properties_7 = properties; _i < properties_7.length; _i++) {
                 var property = properties_7[_i];
-                var expression = transformProperty(property, receiver);
+                var expression = ts.isClassStaticBlockDeclaration(property) ?
+                    transformClassStaticBlockDeclaration(property) :
+                    transformProperty(property, receiver);
                 if (!expression) {
                     continue;
                 }
@@ -89121,14 +90980,14 @@
         /**
          * Generates assignment expressions for property initializers.
          *
-         * @param properties An array of property declarations to transform.
+         * @param propertiesOrClassStaticBlocks An array of property declarations to transform.
          * @param receiver The receiver on which each property should be assigned.
          */
-        function generateInitializedPropertyExpressions(properties, receiver) {
+        function generateInitializedPropertyExpressionsOrClassStaticBlock(propertiesOrClassStaticBlocks, receiver) {
             var expressions = [];
-            for (var _i = 0, properties_8 = properties; _i < properties_8.length; _i++) {
-                var property = properties_8[_i];
-                var expression = transformProperty(property, receiver);
+            for (var _i = 0, propertiesOrClassStaticBlocks_1 = propertiesOrClassStaticBlocks; _i < propertiesOrClassStaticBlocks_1.length; _i++) {
+                var property = propertiesOrClassStaticBlocks_1[_i];
+                var expression = ts.isClassStaticBlockDeclaration(property) ? transformClassStaticBlockDeclaration(property) : transformProperty(property, receiver);
                 if (!expression) {
                     continue;
                 }
@@ -89147,13 +91006,28 @@
          * @param receiver The object receiving the property assignment.
          */
         function transformProperty(property, receiver) {
+            var savedCurrentStaticPropertyDeclarationOrStaticBlock = currentStaticPropertyDeclarationOrStaticBlock;
+            var transformed = transformPropertyWorker(property, receiver);
+            if (transformed && ts.hasStaticModifier(property) && (currentClassLexicalEnvironment === null || currentClassLexicalEnvironment === void 0 ? void 0 : currentClassLexicalEnvironment.facts)) {
+                // capture the lexical environment for the member
+                ts.setOriginalNode(transformed, property);
+                ts.addEmitFlags(transformed, 2 /* AdviseOnEmitNode */);
+                classLexicalEnvironmentMap.set(ts.getOriginalNodeId(transformed), currentClassLexicalEnvironment);
+            }
+            currentStaticPropertyDeclarationOrStaticBlock = savedCurrentStaticPropertyDeclarationOrStaticBlock;
+            return transformed;
+        }
+        function transformPropertyWorker(property, receiver) {
             var _a;
             // We generate a name here in order to reuse the value cached by the relocated computed name expression (which uses the same generated name)
             var emitAssignment = !useDefineForClassFields;
             var propertyName = ts.isComputedPropertyName(property.name) && !ts.isSimpleInlineableExpression(property.name.expression)
                 ? factory.updateComputedPropertyName(property.name, factory.getGeneratedNameForNode(property.name))
                 : property.name;
-            if (shouldTransformPrivateElements && ts.isPrivateIdentifier(propertyName)) {
+            if (ts.hasStaticModifier(property)) {
+                currentStaticPropertyDeclarationOrStaticBlock = property;
+            }
+            if (shouldTransformPrivateElementsOrClassStaticBlocks && ts.isPrivateIdentifier(propertyName)) {
                 var privateIdentifierInfo = accessPrivateIdentifier(propertyName);
                 if (privateIdentifierInfo) {
                     if (privateIdentifierInfo.kind === "f" /* Field */) {
@@ -89199,11 +91073,30 @@
                 enabledSubstitutions |= 1 /* ClassAliases */;
                 // We need to enable substitutions for identifiers. This allows us to
                 // substitute class names inside of a class declaration.
-                context.enableSubstitution(78 /* Identifier */);
+                context.enableSubstitution(79 /* Identifier */);
                 // Keep track of class aliases.
                 classAliases = [];
             }
         }
+        function enableSubstitutionForClassStaticThisOrSuperReference() {
+            if ((enabledSubstitutions & 2 /* ClassStaticThisOrSuperReference */) === 0) {
+                enabledSubstitutions |= 2 /* ClassStaticThisOrSuperReference */;
+                // substitute `this` in a static field initializer
+                context.enableSubstitution(108 /* ThisKeyword */);
+                // these push a new lexical environment that is not the class lexical environment
+                context.enableEmitNotification(254 /* FunctionDeclaration */);
+                context.enableEmitNotification(211 /* FunctionExpression */);
+                context.enableEmitNotification(169 /* Constructor */);
+                // these push a new lexical environment that is not the class lexical environment, except
+                // when they have a computed property name
+                context.enableEmitNotification(170 /* GetAccessor */);
+                context.enableEmitNotification(171 /* SetAccessor */);
+                context.enableEmitNotification(167 /* MethodDeclaration */);
+                context.enableEmitNotification(165 /* PropertyDeclaration */);
+                // class lexical environments are restored when entering a computed property name
+                context.enableEmitNotification(160 /* ComputedPropertyName */);
+            }
+        }
         /**
          * Generates brand-check initializer for private methods.
          *
@@ -89212,13 +91105,76 @@
          * @param receiver The receiver on which each method should be assigned.
          */
         function addMethodStatements(statements, methods, receiver) {
-            if (!shouldTransformPrivateElements || !ts.some(methods)) {
+            if (!shouldTransformPrivateElementsOrClassStaticBlocks || !ts.some(methods)) {
                 return;
             }
             var weakSetName = getPrivateIdentifierEnvironment().weakSetName;
             ts.Debug.assert(weakSetName, "weakSetName should be set in private identifier environment");
             statements.push(factory.createExpressionStatement(createPrivateInstanceMethodInitializer(receiver, weakSetName)));
         }
+        function visitInvalidSuperProperty(node) {
+            return ts.isPropertyAccessExpression(node) ?
+                factory.updatePropertyAccessExpression(node, factory.createVoidZero(), node.name) :
+                factory.updateElementAccessExpression(node, factory.createVoidZero(), ts.visitNode(node.argumentExpression, visitor, ts.isExpression));
+        }
+        function onEmitNode(hint, node, emitCallback) {
+            var original = ts.getOriginalNode(node);
+            if (original.id) {
+                var classLexicalEnvironment = classLexicalEnvironmentMap.get(original.id);
+                if (classLexicalEnvironment) {
+                    var savedClassLexicalEnvironment = currentClassLexicalEnvironment;
+                    var savedCurrentComputedPropertyNameClassLexicalEnvironment = currentComputedPropertyNameClassLexicalEnvironment;
+                    currentClassLexicalEnvironment = classLexicalEnvironment;
+                    currentComputedPropertyNameClassLexicalEnvironment = classLexicalEnvironment;
+                    previousOnEmitNode(hint, node, emitCallback);
+                    currentClassLexicalEnvironment = savedClassLexicalEnvironment;
+                    currentComputedPropertyNameClassLexicalEnvironment = savedCurrentComputedPropertyNameClassLexicalEnvironment;
+                    return;
+                }
+            }
+            switch (node.kind) {
+                case 211 /* FunctionExpression */:
+                    if (ts.isArrowFunction(original) || ts.getEmitFlags(node) & 262144 /* AsyncFunctionBody */) {
+                        break;
+                    }
+                // falls through
+                case 254 /* FunctionDeclaration */:
+                case 169 /* Constructor */: {
+                    var savedClassLexicalEnvironment = currentClassLexicalEnvironment;
+                    var savedCurrentComputedPropertyNameClassLexicalEnvironment = currentComputedPropertyNameClassLexicalEnvironment;
+                    currentClassLexicalEnvironment = undefined;
+                    currentComputedPropertyNameClassLexicalEnvironment = undefined;
+                    previousOnEmitNode(hint, node, emitCallback);
+                    currentClassLexicalEnvironment = savedClassLexicalEnvironment;
+                    currentComputedPropertyNameClassLexicalEnvironment = savedCurrentComputedPropertyNameClassLexicalEnvironment;
+                    return;
+                }
+                case 170 /* GetAccessor */:
+                case 171 /* SetAccessor */:
+                case 167 /* MethodDeclaration */:
+                case 165 /* PropertyDeclaration */: {
+                    var savedClassLexicalEnvironment = currentClassLexicalEnvironment;
+                    var savedCurrentComputedPropertyNameClassLexicalEnvironment = currentComputedPropertyNameClassLexicalEnvironment;
+                    currentComputedPropertyNameClassLexicalEnvironment = currentClassLexicalEnvironment;
+                    currentClassLexicalEnvironment = undefined;
+                    previousOnEmitNode(hint, node, emitCallback);
+                    currentClassLexicalEnvironment = savedClassLexicalEnvironment;
+                    currentComputedPropertyNameClassLexicalEnvironment = savedCurrentComputedPropertyNameClassLexicalEnvironment;
+                    return;
+                }
+                case 160 /* ComputedPropertyName */: {
+                    var savedClassLexicalEnvironment = currentClassLexicalEnvironment;
+                    var savedCurrentComputedPropertyNameClassLexicalEnvironment = currentComputedPropertyNameClassLexicalEnvironment;
+                    currentClassLexicalEnvironment = currentComputedPropertyNameClassLexicalEnvironment;
+                    currentComputedPropertyNameClassLexicalEnvironment = undefined;
+                    previousOnEmitNode(hint, node, emitCallback);
+                    currentClassLexicalEnvironment = savedClassLexicalEnvironment;
+                    currentComputedPropertyNameClassLexicalEnvironment = savedCurrentComputedPropertyNameClassLexicalEnvironment;
+                    return;
+                }
+            }
+            previousOnEmitNode(hint, node, emitCallback);
+        }
         /**
          * Hooks node substitutions.
          *
@@ -89234,8 +91190,22 @@
         }
         function substituteExpression(node) {
             switch (node.kind) {
-                case 78 /* Identifier */:
+                case 79 /* Identifier */:
                     return substituteExpressionIdentifier(node);
+                case 108 /* ThisKeyword */:
+                    return substituteThisExpression(node);
+            }
+            return node;
+        }
+        function substituteThisExpression(node) {
+            if (enabledSubstitutions & 2 /* ClassStaticThisOrSuperReference */ && currentClassLexicalEnvironment) {
+                var facts = currentClassLexicalEnvironment.facts, classConstructor = currentClassLexicalEnvironment.classConstructor;
+                if (facts & 1 /* ClassWasDecorated */) {
+                    return factory.createParenthesizedExpression(factory.createVoidZero());
+                }
+                if (classConstructor) {
+                    return ts.setTextRange(ts.setOriginalNode(factory.cloneNode(classConstructor), node), node);
+                }
             }
             return node;
         }
@@ -89288,21 +91258,28 @@
                 return (inlinable || ts.isIdentifier(innerExpression)) ? undefined : expression;
             }
         }
-        function startPrivateIdentifierEnvironment() {
-            privateIdentifierEnvironmentStack.push(currentPrivateIdentifierEnvironment);
-            currentPrivateIdentifierEnvironment = undefined;
+        function startClassLexicalEnvironment() {
+            classLexicalEnvironmentStack.push(currentClassLexicalEnvironment);
+            currentClassLexicalEnvironment = undefined;
         }
-        function endPrivateIdentifierEnvironment() {
-            currentPrivateIdentifierEnvironment = privateIdentifierEnvironmentStack.pop();
+        function endClassLexicalEnvironment() {
+            currentClassLexicalEnvironment = classLexicalEnvironmentStack.pop();
+        }
+        function getClassLexicalEnvironment() {
+            return currentClassLexicalEnvironment || (currentClassLexicalEnvironment = {
+                facts: 0 /* None */,
+                classConstructor: undefined,
+                superClassReference: undefined,
+                privateIdentifierEnvironment: undefined,
+            });
         }
         function getPrivateIdentifierEnvironment() {
-            if (!currentPrivateIdentifierEnvironment) {
-                currentPrivateIdentifierEnvironment = {
-                    className: "",
-                    identifiers: new ts.Map()
-                };
-            }
-            return currentPrivateIdentifierEnvironment;
+            var lex = getClassLexicalEnvironment();
+            lex.privateIdentifierEnvironment || (lex.privateIdentifierEnvironment = {
+                className: "",
+                identifiers: new ts.Map()
+            });
+            return lex.privateIdentifierEnvironment;
         }
         function getPendingExpressions() {
             return pendingExpressions || (pendingExpressions = []);
@@ -89310,17 +91287,19 @@
         function addPrivateIdentifierToEnvironment(node) {
             var _a;
             var text = ts.getTextOfPropertyName(node.name);
-            var env = getPrivateIdentifierEnvironment();
-            var weakSetName = env.weakSetName, classConstructor = env.classConstructor;
+            var lex = getClassLexicalEnvironment();
+            var classConstructor = lex.classConstructor;
+            var privateEnv = getPrivateIdentifierEnvironment();
+            var weakSetName = privateEnv.weakSetName;
             var assignmentExpressions = [];
             var privateName = node.name.escapedText;
-            var previousInfo = env.identifiers.get(privateName);
+            var previousInfo = privateEnv.identifiers.get(privateName);
             var isValid = !isReservedPrivateName(node.name) && previousInfo === undefined;
             if (ts.hasStaticModifier(node)) {
                 ts.Debug.assert(classConstructor, "weakSetName should be set in private identifier environment");
                 if (ts.isPropertyDeclaration(node)) {
                     var variableName = createHoistedVariableForPrivateName(text, node);
-                    env.identifiers.set(privateName, {
+                    privateEnv.identifiers.set(privateName, {
                         kind: "f" /* Field */,
                         variableName: variableName,
                         brandCheckIdentifier: classConstructor,
@@ -89330,7 +91309,7 @@
                 }
                 else if (ts.isMethodDeclaration(node)) {
                     var functionName = createHoistedVariableForPrivateName(text, node);
-                    env.identifiers.set(privateName, {
+                    privateEnv.identifiers.set(privateName, {
                         kind: "m" /* Method */,
                         methodName: functionName,
                         brandCheckIdentifier: classConstructor,
@@ -89344,7 +91323,7 @@
                         previousInfo.getterName = getterName;
                     }
                     else {
-                        env.identifiers.set(privateName, {
+                        privateEnv.identifiers.set(privateName, {
                             kind: "a" /* Accessor */,
                             getterName: getterName,
                             setterName: undefined,
@@ -89360,7 +91339,7 @@
                         previousInfo.setterName = setterName;
                     }
                     else {
-                        env.identifiers.set(privateName, {
+                        privateEnv.identifiers.set(privateName, {
                             kind: "a" /* Accessor */,
                             getterName: undefined,
                             setterName: setterName,
@@ -89376,7 +91355,7 @@
             }
             else if (ts.isPropertyDeclaration(node)) {
                 var weakMapName = createHoistedVariableForPrivateName(text, node);
-                env.identifiers.set(privateName, {
+                privateEnv.identifiers.set(privateName, {
                     kind: "f" /* Field */,
                     brandCheckIdentifier: weakMapName,
                     isStatic: false,
@@ -89388,7 +91367,7 @@
             }
             else if (ts.isMethodDeclaration(node)) {
                 ts.Debug.assert(weakSetName, "weakSetName should be set in private identifier environment");
-                env.identifiers.set(privateName, {
+                privateEnv.identifiers.set(privateName, {
                     kind: "m" /* Method */,
                     methodName: createHoistedVariableForPrivateName(text, node),
                     brandCheckIdentifier: weakSetName,
@@ -89404,7 +91383,7 @@
                         previousInfo.getterName = getterName;
                     }
                     else {
-                        env.identifiers.set(privateName, {
+                        privateEnv.identifiers.set(privateName, {
                             kind: "a" /* Accessor */,
                             getterName: getterName,
                             setterName: undefined,
@@ -89420,7 +91399,7 @@
                         previousInfo.setterName = setterName;
                     }
                     else {
-                        env.identifiers.set(privateName, {
+                        privateEnv.identifiers.set(privateName, {
                             kind: "a" /* Accessor */,
                             getterName: undefined,
                             setterName: setterName,
@@ -89452,18 +91431,19 @@
             return createHoistedVariableForClass(privateName.substring(1), node.name);
         }
         function accessPrivateIdentifier(name) {
-            if (currentPrivateIdentifierEnvironment) {
-                var info = currentPrivateIdentifierEnvironment.identifiers.get(name.escapedText);
+            var _a;
+            if (currentClassLexicalEnvironment === null || currentClassLexicalEnvironment === void 0 ? void 0 : currentClassLexicalEnvironment.privateIdentifierEnvironment) {
+                var info = currentClassLexicalEnvironment.privateIdentifierEnvironment.identifiers.get(name.escapedText);
                 if (info) {
                     return info;
                 }
             }
-            for (var i = privateIdentifierEnvironmentStack.length - 1; i >= 0; --i) {
-                var env = privateIdentifierEnvironmentStack[i];
+            for (var i = classLexicalEnvironmentStack.length - 1; i >= 0; --i) {
+                var env = classLexicalEnvironmentStack[i];
                 if (!env) {
                     continue;
                 }
-                var info = env.identifiers.get(name.escapedText);
+                var info = (_a = env.privateIdentifierEnvironment) === null || _a === void 0 ? void 0 : _a.identifiers.get(name.escapedText);
                 if (info) {
                     return info;
                 }
@@ -89481,53 +91461,93 @@
             // differently inside the function.
             if (ts.isThisProperty(node) || ts.isSuperProperty(node) || !ts.isSimpleCopiableExpression(node.expression)) {
                 receiver = factory.createTempVariable(hoistVariableDeclaration, /*reservedInNestedScopes*/ true);
-                getPendingExpressions().push(factory.createBinaryExpression(receiver, 62 /* EqualsToken */, node.expression));
+                getPendingExpressions().push(factory.createBinaryExpression(receiver, 63 /* EqualsToken */, ts.visitNode(node.expression, visitor, ts.isExpression)));
             }
-            return factory.createPropertyAccessExpression(
-            // Explicit parens required because of v8 regression (https://bugs.chromium.org/p/v8/issues/detail?id=9560)
-            factory.createParenthesizedExpression(factory.createObjectLiteralExpression([
-                factory.createSetAccessorDeclaration(
-                /*decorators*/ undefined, 
-                /*modifiers*/ undefined, "value", [factory.createParameterDeclaration(
-                    /*decorators*/ undefined, 
-                    /*modifiers*/ undefined, 
-                    /*dotDotDotToken*/ undefined, parameter, 
-                    /*questionToken*/ undefined, 
-                    /*type*/ undefined, 
-                    /*initializer*/ undefined)], factory.createBlock([factory.createExpressionStatement(createPrivateIdentifierAssignment(info, receiver, parameter, 62 /* EqualsToken */))]))
-            ])), "value");
+            return factory.createAssignmentTargetWrapper(parameter, createPrivateIdentifierAssignment(info, receiver, parameter, 63 /* EqualsToken */));
         }
         function visitArrayAssignmentTarget(node) {
             var target = ts.getTargetOfBindingOrAssignmentElement(node);
-            if (target && ts.isPrivateIdentifierPropertyAccessExpression(target)) {
-                var wrapped = wrapPrivateIdentifierForDestructuringTarget(target);
-                if (ts.isAssignmentExpression(node)) {
-                    return factory.updateBinaryExpression(node, wrapped, node.operatorToken, ts.visitNode(node.right, visitor, ts.isExpression));
+            if (target) {
+                var wrapped = void 0;
+                if (ts.isPrivateIdentifierPropertyAccessExpression(target)) {
+                    wrapped = wrapPrivateIdentifierForDestructuringTarget(target);
                 }
-                else if (ts.isSpreadElement(node)) {
-                    return factory.updateSpreadElement(node, wrapped);
+                else if (shouldTransformSuperInStaticInitializers &&
+                    ts.isSuperProperty(target) &&
+                    currentStaticPropertyDeclarationOrStaticBlock &&
+                    currentClassLexicalEnvironment) {
+                    var classConstructor = currentClassLexicalEnvironment.classConstructor, superClassReference = currentClassLexicalEnvironment.superClassReference, facts = currentClassLexicalEnvironment.facts;
+                    if (facts & 1 /* ClassWasDecorated */) {
+                        wrapped = visitInvalidSuperProperty(target);
+                    }
+                    else if (classConstructor && superClassReference) {
+                        var name = ts.isElementAccessExpression(target) ? ts.visitNode(target.argumentExpression, visitor, ts.isExpression) :
+                            ts.isIdentifier(target.name) ? factory.createStringLiteralFromNode(target.name) :
+                                undefined;
+                        if (name) {
+                            var temp = factory.createTempVariable(/*recordTempVariable*/ undefined);
+                            wrapped = factory.createAssignmentTargetWrapper(temp, factory.createReflectSetCall(superClassReference, name, temp, classConstructor));
+                        }
+                    }
                 }
-                else {
-                    return wrapped;
+                if (wrapped) {
+                    if (ts.isAssignmentExpression(node)) {
+                        return factory.updateBinaryExpression(node, wrapped, node.operatorToken, ts.visitNode(node.right, visitor, ts.isExpression));
+                    }
+                    else if (ts.isSpreadElement(node)) {
+                        return factory.updateSpreadElement(node, wrapped);
+                    }
+                    else {
+                        return wrapped;
+                    }
                 }
             }
             return ts.visitNode(node, visitorDestructuringTarget);
         }
         function visitObjectAssignmentTarget(node) {
-            if (ts.isPropertyAssignment(node)) {
+            if (ts.isObjectBindingOrAssignmentElement(node) && !ts.isShorthandPropertyAssignment(node)) {
                 var target = ts.getTargetOfBindingOrAssignmentElement(node);
-                if (target && ts.isPrivateIdentifierPropertyAccessExpression(target)) {
-                    var initializer = ts.getInitializerOfBindingOrAssignmentElement(node);
-                    var wrapped = wrapPrivateIdentifierForDestructuringTarget(target);
-                    return factory.updatePropertyAssignment(node, ts.visitNode(node.name, visitor), initializer ? factory.createAssignment(wrapped, ts.visitNode(initializer, visitor)) : wrapped);
+                var wrapped = void 0;
+                if (target) {
+                    if (ts.isPrivateIdentifierPropertyAccessExpression(target)) {
+                        wrapped = wrapPrivateIdentifierForDestructuringTarget(target);
+                    }
+                    else if (shouldTransformSuperInStaticInitializers &&
+                        ts.isSuperProperty(target) &&
+                        currentStaticPropertyDeclarationOrStaticBlock &&
+                        currentClassLexicalEnvironment) {
+                        var classConstructor = currentClassLexicalEnvironment.classConstructor, superClassReference = currentClassLexicalEnvironment.superClassReference, facts = currentClassLexicalEnvironment.facts;
+                        if (facts & 1 /* ClassWasDecorated */) {
+                            wrapped = visitInvalidSuperProperty(target);
+                        }
+                        else if (classConstructor && superClassReference) {
+                            var name = ts.isElementAccessExpression(target) ? ts.visitNode(target.argumentExpression, visitor, ts.isExpression) :
+                                ts.isIdentifier(target.name) ? factory.createStringLiteralFromNode(target.name) :
+                                    undefined;
+                            if (name) {
+                                var temp = factory.createTempVariable(/*recordTempVariable*/ undefined);
+                                wrapped = factory.createAssignmentTargetWrapper(temp, factory.createReflectSetCall(superClassReference, name, temp, classConstructor));
+                            }
+                        }
+                    }
                 }
-                return factory.updatePropertyAssignment(node, ts.visitNode(node.name, visitor), ts.visitNode(node.initializer, visitorDestructuringTarget));
+                if (ts.isPropertyAssignment(node)) {
+                    var initializer = ts.getInitializerOfBindingOrAssignmentElement(node);
+                    return factory.updatePropertyAssignment(node, ts.visitNode(node.name, visitor, ts.isPropertyName), wrapped ?
+                        initializer ? factory.createAssignment(wrapped, ts.visitNode(initializer, visitor)) : wrapped :
+                        ts.visitNode(node.initializer, visitorDestructuringTarget, ts.isExpression));
+                }
+                if (ts.isSpreadAssignment(node)) {
+                    return factory.updateSpreadAssignment(node, wrapped || ts.visitNode(node.expression, visitorDestructuringTarget, ts.isExpression));
+                }
+                ts.Debug.assert(wrapped === undefined, "Should not have generated a wrapped target");
             }
             return ts.visitNode(node, visitor);
         }
         function visitAssignmentPattern(node) {
             if (ts.isArrayLiteralExpression(node)) {
                 // Transforms private names in destructuring assignment array bindings.
+                // Transforms SuperProperty assignments in destructuring assignment array bindings in static initializers.
                 //
                 // Source:
                 // ([ this.#myProp ] = [ "hello" ]);
@@ -89538,6 +91558,7 @@
             }
             else {
                 // Transforms private names in destructuring assignment object bindings.
+                // Transforms SuperProperty assignments in destructuring assignment object bindings in static initializers.
                 //
                 // Source:
                 // ({ stringProperty: this.#myProp } = { stringProperty: "hello" });
@@ -89651,34 +91672,34 @@
                 return node;
             }
             switch (node.kind) {
-                case 129 /* AsyncKeyword */:
+                case 130 /* AsyncKeyword */:
                     // ES2017 async modifier should be elided for targets < ES2017
                     return undefined;
-                case 214 /* AwaitExpression */:
+                case 216 /* AwaitExpression */:
                     return visitAwaitExpression(node);
-                case 166 /* MethodDeclaration */:
+                case 167 /* MethodDeclaration */:
                     return doWithContext(1 /* NonTopLevel */ | 2 /* HasLexicalThis */, visitMethodDeclaration, node);
-                case 252 /* FunctionDeclaration */:
+                case 254 /* FunctionDeclaration */:
                     return doWithContext(1 /* NonTopLevel */ | 2 /* HasLexicalThis */, visitFunctionDeclaration, node);
-                case 209 /* FunctionExpression */:
+                case 211 /* FunctionExpression */:
                     return doWithContext(1 /* NonTopLevel */ | 2 /* HasLexicalThis */, visitFunctionExpression, node);
-                case 210 /* ArrowFunction */:
+                case 212 /* ArrowFunction */:
                     return doWithContext(1 /* NonTopLevel */, visitArrowFunction, node);
-                case 202 /* PropertyAccessExpression */:
-                    if (capturedSuperProperties && ts.isPropertyAccessExpression(node) && node.expression.kind === 105 /* SuperKeyword */) {
+                case 204 /* PropertyAccessExpression */:
+                    if (capturedSuperProperties && ts.isPropertyAccessExpression(node) && node.expression.kind === 106 /* SuperKeyword */) {
                         capturedSuperProperties.add(node.name.escapedText);
                     }
                     return ts.visitEachChild(node, visitor, context);
-                case 203 /* ElementAccessExpression */:
-                    if (capturedSuperProperties && node.expression.kind === 105 /* SuperKeyword */) {
+                case 205 /* ElementAccessExpression */:
+                    if (capturedSuperProperties && node.expression.kind === 106 /* SuperKeyword */) {
                         hasSuperElementAccess = true;
                     }
                     return ts.visitEachChild(node, visitor, context);
-                case 168 /* GetAccessor */:
-                case 169 /* SetAccessor */:
-                case 167 /* Constructor */:
-                case 253 /* ClassDeclaration */:
-                case 222 /* ClassExpression */:
+                case 170 /* GetAccessor */:
+                case 171 /* SetAccessor */:
+                case 169 /* Constructor */:
+                case 255 /* ClassDeclaration */:
+                case 224 /* ClassExpression */:
                     return doWithContext(1 /* NonTopLevel */ | 2 /* HasLexicalThis */, visitDefault, node);
                 default:
                     return ts.visitEachChild(node, visitor, context);
@@ -89687,27 +91708,27 @@
         function asyncBodyVisitor(node) {
             if (ts.isNodeWithPossibleHoistedDeclaration(node)) {
                 switch (node.kind) {
-                    case 233 /* VariableStatement */:
+                    case 235 /* VariableStatement */:
                         return visitVariableStatementInAsyncBody(node);
-                    case 238 /* ForStatement */:
+                    case 240 /* ForStatement */:
                         return visitForStatementInAsyncBody(node);
-                    case 239 /* ForInStatement */:
+                    case 241 /* ForInStatement */:
                         return visitForInStatementInAsyncBody(node);
-                    case 240 /* ForOfStatement */:
+                    case 242 /* ForOfStatement */:
                         return visitForOfStatementInAsyncBody(node);
-                    case 288 /* CatchClause */:
+                    case 290 /* CatchClause */:
                         return visitCatchClauseInAsyncBody(node);
-                    case 231 /* Block */:
-                    case 245 /* SwitchStatement */:
-                    case 259 /* CaseBlock */:
-                    case 285 /* CaseClause */:
-                    case 286 /* DefaultClause */:
-                    case 248 /* TryStatement */:
-                    case 236 /* DoStatement */:
-                    case 237 /* WhileStatement */:
-                    case 235 /* IfStatement */:
-                    case 244 /* WithStatement */:
-                    case 246 /* LabeledStatement */:
+                    case 233 /* Block */:
+                    case 247 /* SwitchStatement */:
+                    case 261 /* CaseBlock */:
+                    case 287 /* CaseClause */:
+                    case 288 /* DefaultClause */:
+                    case 250 /* TryStatement */:
+                    case 238 /* DoStatement */:
+                    case 239 /* WhileStatement */:
+                    case 237 /* IfStatement */:
+                    case 246 /* WithStatement */:
+                    case 248 /* LabeledStatement */:
                         return ts.visitEachChild(node, asyncBodyVisitor, context);
                     default:
                         return ts.Debug.assertNever(node, "Unhandled node.");
@@ -89912,7 +91933,7 @@
             var original = ts.getOriginalNode(node, ts.isFunctionLike);
             var nodeType = original.type;
             var promiseConstructor = languageVersion < 2 /* ES2015 */ ? getPromiseConstructor(nodeType) : undefined;
-            var isArrowFunction = node.kind === 210 /* ArrowFunction */;
+            var isArrowFunction = node.kind === 212 /* ArrowFunction */;
             var hasLexicalArguments = (resolver.getNodeCheckFlags(node) & 8192 /* CaptureArguments */) !== 0;
             // An async function is emit as an outer function that calls an inner
             // generator function. To preserve lexical bindings, we pass the current
@@ -90003,17 +92024,17 @@
                 enabledSubstitutions |= 1 /* AsyncMethodsWithSuper */;
                 // We need to enable substitutions for call, property access, and element access
                 // if we need to rewrite super calls.
-                context.enableSubstitution(204 /* CallExpression */);
-                context.enableSubstitution(202 /* PropertyAccessExpression */);
-                context.enableSubstitution(203 /* ElementAccessExpression */);
+                context.enableSubstitution(206 /* CallExpression */);
+                context.enableSubstitution(204 /* PropertyAccessExpression */);
+                context.enableSubstitution(205 /* ElementAccessExpression */);
                 // We need to be notified when entering and exiting declarations that bind super.
-                context.enableEmitNotification(253 /* ClassDeclaration */);
-                context.enableEmitNotification(166 /* MethodDeclaration */);
-                context.enableEmitNotification(168 /* GetAccessor */);
-                context.enableEmitNotification(169 /* SetAccessor */);
-                context.enableEmitNotification(167 /* Constructor */);
+                context.enableEmitNotification(255 /* ClassDeclaration */);
+                context.enableEmitNotification(167 /* MethodDeclaration */);
+                context.enableEmitNotification(170 /* GetAccessor */);
+                context.enableEmitNotification(171 /* SetAccessor */);
+                context.enableEmitNotification(169 /* Constructor */);
                 // We need to be notified when entering the generated accessor arrow functions.
-                context.enableEmitNotification(233 /* VariableStatement */);
+                context.enableEmitNotification(235 /* VariableStatement */);
             }
         }
         /**
@@ -90061,23 +92082,23 @@
         }
         function substituteExpression(node) {
             switch (node.kind) {
-                case 202 /* PropertyAccessExpression */:
+                case 204 /* PropertyAccessExpression */:
                     return substitutePropertyAccessExpression(node);
-                case 203 /* ElementAccessExpression */:
+                case 205 /* ElementAccessExpression */:
                     return substituteElementAccessExpression(node);
-                case 204 /* CallExpression */:
+                case 206 /* CallExpression */:
                     return substituteCallExpression(node);
             }
             return node;
         }
         function substitutePropertyAccessExpression(node) {
-            if (node.expression.kind === 105 /* SuperKeyword */) {
+            if (node.expression.kind === 106 /* SuperKeyword */) {
                 return ts.setTextRange(factory.createPropertyAccessExpression(factory.createUniqueName("_super", 16 /* Optimistic */ | 32 /* FileLevel */), node.name), node);
             }
             return node;
         }
         function substituteElementAccessExpression(node) {
-            if (node.expression.kind === 105 /* SuperKeyword */) {
+            if (node.expression.kind === 106 /* SuperKeyword */) {
                 return createSuperElementAccessInAsyncMethod(node.argumentExpression, node);
             }
             return node;
@@ -90091,17 +92112,17 @@
                 return factory.createCallExpression(factory.createPropertyAccessExpression(argumentExpression, "call"), 
                 /*typeArguments*/ undefined, __spreadArray([
                     factory.createThis()
-                ], node.arguments));
+                ], node.arguments, true));
             }
             return node;
         }
         function isSuperContainer(node) {
             var kind = node.kind;
-            return kind === 253 /* ClassDeclaration */
-                || kind === 167 /* Constructor */
-                || kind === 166 /* MethodDeclaration */
-                || kind === 168 /* GetAccessor */
-                || kind === 169 /* SetAccessor */;
+            return kind === 255 /* ClassDeclaration */
+                || kind === 169 /* Constructor */
+                || kind === 167 /* MethodDeclaration */
+                || kind === 170 /* GetAccessor */
+                || kind === 171 /* SetAccessor */;
         }
         function createSuperElementAccessInAsyncMethod(argumentExpression, location) {
             if (enclosingSuperContainerFlags & 4096 /* AsyncMethodWithSuperBinding */) {
@@ -90258,7 +92279,7 @@
             return visitorWorker(node, /*expressionResultIsUnused*/ true);
         }
         function visitorNoAsyncModifier(node) {
-            if (node.kind === 129 /* AsyncKeyword */) {
+            if (node.kind === 130 /* AsyncKeyword */) {
                 return undefined;
             }
             return node;
@@ -90284,70 +92305,70 @@
                 return node;
             }
             switch (node.kind) {
-                case 214 /* AwaitExpression */:
+                case 216 /* AwaitExpression */:
                     return visitAwaitExpression(node);
-                case 220 /* YieldExpression */:
+                case 222 /* YieldExpression */:
                     return visitYieldExpression(node);
-                case 243 /* ReturnStatement */:
+                case 245 /* ReturnStatement */:
                     return visitReturnStatement(node);
-                case 246 /* LabeledStatement */:
+                case 248 /* LabeledStatement */:
                     return visitLabeledStatement(node);
-                case 201 /* ObjectLiteralExpression */:
+                case 203 /* ObjectLiteralExpression */:
                     return visitObjectLiteralExpression(node);
-                case 217 /* BinaryExpression */:
+                case 219 /* BinaryExpression */:
                     return visitBinaryExpression(node, expressionResultIsUnused);
-                case 341 /* CommaListExpression */:
+                case 346 /* CommaListExpression */:
                     return visitCommaListExpression(node, expressionResultIsUnused);
-                case 288 /* CatchClause */:
+                case 290 /* CatchClause */:
                     return visitCatchClause(node);
-                case 233 /* VariableStatement */:
+                case 235 /* VariableStatement */:
                     return visitVariableStatement(node);
-                case 250 /* VariableDeclaration */:
+                case 252 /* VariableDeclaration */:
                     return visitVariableDeclaration(node);
-                case 236 /* DoStatement */:
-                case 237 /* WhileStatement */:
-                case 239 /* ForInStatement */:
+                case 238 /* DoStatement */:
+                case 239 /* WhileStatement */:
+                case 241 /* ForInStatement */:
                     return doWithHierarchyFacts(visitDefault, node, 0 /* IterationStatementExcludes */, 2 /* IterationStatementIncludes */);
-                case 240 /* ForOfStatement */:
+                case 242 /* ForOfStatement */:
                     return visitForOfStatement(node, /*outermostLabeledStatement*/ undefined);
-                case 238 /* ForStatement */:
+                case 240 /* ForStatement */:
                     return doWithHierarchyFacts(visitForStatement, node, 0 /* IterationStatementExcludes */, 2 /* IterationStatementIncludes */);
-                case 213 /* VoidExpression */:
+                case 215 /* VoidExpression */:
                     return visitVoidExpression(node);
-                case 167 /* Constructor */:
+                case 169 /* Constructor */:
                     return doWithHierarchyFacts(visitConstructorDeclaration, node, 2 /* ClassOrFunctionExcludes */, 1 /* ClassOrFunctionIncludes */);
-                case 166 /* MethodDeclaration */:
+                case 167 /* MethodDeclaration */:
                     return doWithHierarchyFacts(visitMethodDeclaration, node, 2 /* ClassOrFunctionExcludes */, 1 /* ClassOrFunctionIncludes */);
-                case 168 /* GetAccessor */:
+                case 170 /* GetAccessor */:
                     return doWithHierarchyFacts(visitGetAccessorDeclaration, node, 2 /* ClassOrFunctionExcludes */, 1 /* ClassOrFunctionIncludes */);
-                case 169 /* SetAccessor */:
+                case 171 /* SetAccessor */:
                     return doWithHierarchyFacts(visitSetAccessorDeclaration, node, 2 /* ClassOrFunctionExcludes */, 1 /* ClassOrFunctionIncludes */);
-                case 252 /* FunctionDeclaration */:
+                case 254 /* FunctionDeclaration */:
                     return doWithHierarchyFacts(visitFunctionDeclaration, node, 2 /* ClassOrFunctionExcludes */, 1 /* ClassOrFunctionIncludes */);
-                case 209 /* FunctionExpression */:
+                case 211 /* FunctionExpression */:
                     return doWithHierarchyFacts(visitFunctionExpression, node, 2 /* ClassOrFunctionExcludes */, 1 /* ClassOrFunctionIncludes */);
-                case 210 /* ArrowFunction */:
+                case 212 /* ArrowFunction */:
                     return doWithHierarchyFacts(visitArrowFunction, node, 2 /* ArrowFunctionExcludes */, 0 /* ArrowFunctionIncludes */);
-                case 161 /* Parameter */:
+                case 162 /* Parameter */:
                     return visitParameter(node);
-                case 234 /* ExpressionStatement */:
+                case 236 /* ExpressionStatement */:
                     return visitExpressionStatement(node);
-                case 208 /* ParenthesizedExpression */:
+                case 210 /* ParenthesizedExpression */:
                     return visitParenthesizedExpression(node, expressionResultIsUnused);
-                case 206 /* TaggedTemplateExpression */:
+                case 208 /* TaggedTemplateExpression */:
                     return visitTaggedTemplateExpression(node);
-                case 202 /* PropertyAccessExpression */:
-                    if (capturedSuperProperties && ts.isPropertyAccessExpression(node) && node.expression.kind === 105 /* SuperKeyword */) {
+                case 204 /* PropertyAccessExpression */:
+                    if (capturedSuperProperties && ts.isPropertyAccessExpression(node) && node.expression.kind === 106 /* SuperKeyword */) {
                         capturedSuperProperties.add(node.name.escapedText);
                     }
                     return ts.visitEachChild(node, visitor, context);
-                case 203 /* ElementAccessExpression */:
-                    if (capturedSuperProperties && node.expression.kind === 105 /* SuperKeyword */) {
+                case 205 /* ElementAccessExpression */:
+                    if (capturedSuperProperties && node.expression.kind === 106 /* SuperKeyword */) {
                         hasSuperElementAccess = true;
                     }
                     return ts.visitEachChild(node, visitor, context);
-                case 253 /* ClassDeclaration */:
-                case 222 /* ClassExpression */:
+                case 255 /* ClassDeclaration */:
+                case 224 /* ClassExpression */:
                     return doWithHierarchyFacts(visitDefault, node, 2 /* ClassOrFunctionExcludes */, 1 /* ClassOrFunctionIncludes */);
                 default:
                     return ts.visitEachChild(node, visitor, context);
@@ -90383,7 +92404,7 @@
         function visitLabeledStatement(node) {
             if (enclosingFunctionFlags & 2 /* Async */) {
                 var statement = ts.unwrapInnermostStatementOfLabel(node);
-                if (statement.kind === 240 /* ForOfStatement */ && statement.awaitModifier) {
+                if (statement.kind === 242 /* ForOfStatement */ && statement.awaitModifier) {
                     return visitForOfStatement(statement, node);
                 }
                 return factory.restoreEnclosingLabel(ts.visitNode(statement, visitor, ts.isStatement, factory.liftToBlock), node);
@@ -90395,7 +92416,7 @@
             var objects = [];
             for (var _i = 0, elements_4 = elements; _i < elements_4.length; _i++) {
                 var e = elements_4[_i];
-                if (e.kind === 291 /* SpreadAssignment */) {
+                if (e.kind === 293 /* SpreadAssignment */) {
                     if (chunkObject) {
                         objects.push(factory.createObjectLiteralExpression(chunkObject));
                         chunkObject = undefined;
@@ -90404,7 +92425,7 @@
                     objects.push(ts.visitNode(target, visitor, ts.isExpression));
                 }
                 else {
-                    chunkObject = ts.append(chunkObject, e.kind === 289 /* PropertyAssignment */
+                    chunkObject = ts.append(chunkObject, e.kind === 291 /* PropertyAssignment */
                         ? factory.createPropertyAssignment(e.name, ts.visitNode(e.initializer, visitor, ts.isExpression))
                         : ts.visitNode(e, visitor, ts.isObjectLiteralElementLike));
                 }
@@ -90438,7 +92459,7 @@
                 // If we translate the above to `__assign({}, k, l)`, the `l` will evaluate before `k` is spread and we
                 // end up with `{ a: 1, b: 2, c: 3 }`
                 var objects = chunkObjectLiteralElements(node.properties);
-                if (objects.length && objects[0].kind !== 201 /* ObjectLiteralExpression */) {
+                if (objects.length && objects[0].kind !== 203 /* ObjectLiteralExpression */) {
                     objects.unshift(factory.createObjectLiteralExpression());
                 }
                 var expression = objects[0];
@@ -90527,7 +92548,7 @@
                 if (ts.some(visitedBindings)) {
                     block = factory.updateBlock(block, __spreadArray([
                         factory.createVariableStatement(/*modifiers*/ undefined, visitedBindings)
-                    ], block.statements));
+                    ], block.statements, true));
                 }
                 return factory.updateCatchClause(node, factory.updateVariableDeclaration(node.variableDeclaration, name, /*exclamationToken*/ undefined, /*type*/ undefined, /*initializer*/ undefined), block);
             }
@@ -90851,17 +92872,17 @@
                 enabledSubstitutions |= 1 /* AsyncMethodsWithSuper */;
                 // We need to enable substitutions for call, property access, and element access
                 // if we need to rewrite super calls.
-                context.enableSubstitution(204 /* CallExpression */);
-                context.enableSubstitution(202 /* PropertyAccessExpression */);
-                context.enableSubstitution(203 /* ElementAccessExpression */);
+                context.enableSubstitution(206 /* CallExpression */);
+                context.enableSubstitution(204 /* PropertyAccessExpression */);
+                context.enableSubstitution(205 /* ElementAccessExpression */);
                 // We need to be notified when entering and exiting declarations that bind super.
-                context.enableEmitNotification(253 /* ClassDeclaration */);
-                context.enableEmitNotification(166 /* MethodDeclaration */);
-                context.enableEmitNotification(168 /* GetAccessor */);
-                context.enableEmitNotification(169 /* SetAccessor */);
-                context.enableEmitNotification(167 /* Constructor */);
+                context.enableEmitNotification(255 /* ClassDeclaration */);
+                context.enableEmitNotification(167 /* MethodDeclaration */);
+                context.enableEmitNotification(170 /* GetAccessor */);
+                context.enableEmitNotification(171 /* SetAccessor */);
+                context.enableEmitNotification(169 /* Constructor */);
                 // We need to be notified when entering the generated accessor arrow functions.
-                context.enableEmitNotification(233 /* VariableStatement */);
+                context.enableEmitNotification(235 /* VariableStatement */);
             }
         }
         /**
@@ -90909,23 +92930,23 @@
         }
         function substituteExpression(node) {
             switch (node.kind) {
-                case 202 /* PropertyAccessExpression */:
+                case 204 /* PropertyAccessExpression */:
                     return substitutePropertyAccessExpression(node);
-                case 203 /* ElementAccessExpression */:
+                case 205 /* ElementAccessExpression */:
                     return substituteElementAccessExpression(node);
-                case 204 /* CallExpression */:
+                case 206 /* CallExpression */:
                     return substituteCallExpression(node);
             }
             return node;
         }
         function substitutePropertyAccessExpression(node) {
-            if (node.expression.kind === 105 /* SuperKeyword */) {
+            if (node.expression.kind === 106 /* SuperKeyword */) {
                 return ts.setTextRange(factory.createPropertyAccessExpression(factory.createUniqueName("_super", 16 /* Optimistic */ | 32 /* FileLevel */), node.name), node);
             }
             return node;
         }
         function substituteElementAccessExpression(node) {
-            if (node.expression.kind === 105 /* SuperKeyword */) {
+            if (node.expression.kind === 106 /* SuperKeyword */) {
                 return createSuperElementAccessInAsyncMethod(node.argumentExpression, node);
             }
             return node;
@@ -90939,17 +92960,17 @@
                 return factory.createCallExpression(factory.createPropertyAccessExpression(argumentExpression, "call"), 
                 /*typeArguments*/ undefined, __spreadArray([
                     factory.createThis()
-                ], node.arguments));
+                ], node.arguments, true));
             }
             return node;
         }
         function isSuperContainer(node) {
             var kind = node.kind;
-            return kind === 253 /* ClassDeclaration */
-                || kind === 167 /* Constructor */
-                || kind === 166 /* MethodDeclaration */
-                || kind === 168 /* GetAccessor */
-                || kind === 169 /* SetAccessor */;
+            return kind === 255 /* ClassDeclaration */
+                || kind === 169 /* Constructor */
+                || kind === 167 /* MethodDeclaration */
+                || kind === 170 /* GetAccessor */
+                || kind === 171 /* SetAccessor */;
         }
         function createSuperElementAccessInAsyncMethod(argumentExpression, location) {
             if (enclosingSuperContainerFlags & 4096 /* AsyncMethodWithSuperBinding */) {
@@ -90981,7 +93002,7 @@
                 return node;
             }
             switch (node.kind) {
-                case 288 /* CatchClause */:
+                case 290 /* CatchClause */:
                     return visitCatchClause(node);
                 default:
                     return ts.visitEachChild(node, visitor, context);
@@ -91013,25 +93034,25 @@
                 return node;
             }
             switch (node.kind) {
-                case 204 /* CallExpression */: {
+                case 206 /* CallExpression */: {
                     var updated = visitNonOptionalCallExpression(node, /*captureThisArg*/ false);
                     ts.Debug.assertNotNode(updated, ts.isSyntheticReference);
                     return updated;
                 }
-                case 202 /* PropertyAccessExpression */:
-                case 203 /* ElementAccessExpression */:
+                case 204 /* PropertyAccessExpression */:
+                case 205 /* ElementAccessExpression */:
                     if (ts.isOptionalChain(node)) {
                         var updated = visitOptionalExpression(node, /*captureThisArg*/ false, /*isDelete*/ false);
                         ts.Debug.assertNotNode(updated, ts.isSyntheticReference);
                         return updated;
                     }
                     return ts.visitEachChild(node, visitor, context);
-                case 217 /* BinaryExpression */:
+                case 219 /* BinaryExpression */:
                     if (node.operatorToken.kind === 60 /* QuestionQuestionToken */) {
                         return transformNullishCoalescingExpression(node);
                     }
                     return ts.visitEachChild(node, visitor, context);
-                case 211 /* DeleteExpression */:
+                case 213 /* DeleteExpression */:
                     return visitDeleteExpression(node);
                 default:
                     return ts.visitEachChild(node, visitor, context);
@@ -91073,7 +93094,7 @@
                     thisArg = expression;
                 }
             }
-            expression = node.kind === 202 /* PropertyAccessExpression */
+            expression = node.kind === 204 /* PropertyAccessExpression */
                 ? factory.updatePropertyAccessExpression(node, expression, ts.visitNode(node.name, visitor, ts.isIdentifier))
                 : factory.updateElementAccessExpression(node, expression, ts.visitNode(node.argumentExpression, visitor, ts.isExpression));
             return thisArg ? factory.createSyntheticReferenceExpression(expression, thisArg) : expression;
@@ -91096,10 +93117,10 @@
         }
         function visitNonOptionalExpression(node, captureThisArg, isDelete) {
             switch (node.kind) {
-                case 208 /* ParenthesizedExpression */: return visitNonOptionalParenthesizedExpression(node, captureThisArg, isDelete);
-                case 202 /* PropertyAccessExpression */:
-                case 203 /* ElementAccessExpression */: return visitNonOptionalPropertyOrElementAccessExpression(node, captureThisArg, isDelete);
-                case 204 /* CallExpression */: return visitNonOptionalCallExpression(node, captureThisArg);
+                case 210 /* ParenthesizedExpression */: return visitNonOptionalParenthesizedExpression(node, captureThisArg, isDelete);
+                case 204 /* PropertyAccessExpression */:
+                case 205 /* ElementAccessExpression */: return visitNonOptionalPropertyOrElementAccessExpression(node, captureThisArg, isDelete);
+                case 206 /* CallExpression */: return visitNonOptionalCallExpression(node, captureThisArg);
                 default: return ts.visitNode(node, visitor, ts.isExpression);
             }
         }
@@ -91118,8 +93139,8 @@
             for (var i = 0; i < chain.length; i++) {
                 var segment = chain[i];
                 switch (segment.kind) {
-                    case 202 /* PropertyAccessExpression */:
-                    case 203 /* ElementAccessExpression */:
+                    case 204 /* PropertyAccessExpression */:
+                    case 205 /* ElementAccessExpression */:
                         if (i === chain.length - 1 && captureThisArg) {
                             if (!ts.isSimpleCopiableExpression(rightExpression)) {
                                 thisArg = factory.createTempVariable(hoistVariableDeclaration);
@@ -91129,13 +93150,13 @@
                                 thisArg = rightExpression;
                             }
                         }
-                        rightExpression = segment.kind === 202 /* PropertyAccessExpression */
+                        rightExpression = segment.kind === 204 /* PropertyAccessExpression */
                             ? factory.createPropertyAccessExpression(rightExpression, ts.visitNode(segment.name, visitor, ts.isIdentifier))
                             : factory.createElementAccessExpression(rightExpression, ts.visitNode(segment.argumentExpression, visitor, ts.isExpression));
                         break;
-                    case 204 /* CallExpression */:
+                    case 206 /* CallExpression */:
                         if (i === 0 && leftThisArg) {
-                            rightExpression = factory.createFunctionCallCall(rightExpression, leftThisArg.kind === 105 /* SuperKeyword */ ? factory.createThis() : leftThisArg, ts.visitNodes(segment.arguments, visitor, ts.isExpression));
+                            rightExpression = factory.createFunctionCallCall(rightExpression, leftThisArg.kind === 106 /* SuperKeyword */ ? factory.createThis() : leftThisArg, ts.visitNodes(segment.arguments, visitor, ts.isExpression));
                         }
                         else {
                             rightExpression = factory.createCallExpression(rightExpression, 
@@ -91190,7 +93211,7 @@
                 return node;
             }
             switch (node.kind) {
-                case 217 /* BinaryExpression */:
+                case 219 /* BinaryExpression */:
                     var binaryExpression = node;
                     if (ts.isLogicalOrCoalescingAssignmentExpression(binaryExpression)) {
                         return transformLogicalAssignment(binaryExpression);
@@ -91359,13 +93380,13 @@
         }
         function visitorWorker(node) {
             switch (node.kind) {
-                case 274 /* JsxElement */:
+                case 276 /* JsxElement */:
                     return visitJsxElement(node, /*isChild*/ false);
-                case 275 /* JsxSelfClosingElement */:
+                case 277 /* JsxSelfClosingElement */:
                     return visitJsxSelfClosingElement(node, /*isChild*/ false);
-                case 278 /* JsxFragment */:
+                case 280 /* JsxFragment */:
                     return visitJsxFragment(node, /*isChild*/ false);
-                case 284 /* JsxExpression */:
+                case 286 /* JsxExpression */:
                     return visitJsxExpression(node);
                 default:
                     return ts.visitEachChild(node, visitor, context);
@@ -91375,13 +93396,13 @@
             switch (node.kind) {
                 case 11 /* JsxText */:
                     return visitJsxText(node);
-                case 284 /* JsxExpression */:
+                case 286 /* JsxExpression */:
                     return visitJsxExpression(node);
-                case 274 /* JsxElement */:
+                case 276 /* JsxElement */:
                     return visitJsxElement(node, /*isChild*/ true);
-                case 275 /* JsxSelfClosingElement */:
+                case 277 /* JsxSelfClosingElement */:
                     return visitJsxSelfClosingElement(node, /*isChild*/ true);
-                case 278 /* JsxFragment */:
+                case 280 /* JsxFragment */:
                     return visitJsxFragment(node, /*isChild*/ true);
                 default:
                     return ts.Debug.failBadSyntaxKind(node);
@@ -91421,9 +93442,9 @@
         function convertJsxChildrenToChildrenPropObject(children) {
             var nonWhitespaceChildren = ts.getSemanticJsxChildren(children);
             if (ts.length(nonWhitespaceChildren) === 1) {
-                var result_14 = transformJsxChildToExpression(nonWhitespaceChildren[0]);
-                return result_14 && factory.createObjectLiteralExpression([
-                    factory.createPropertyAssignment("children", result_14)
+                var result_13 = transformJsxChildToExpression(nonWhitespaceChildren[0]);
+                return result_13 && factory.createObjectLiteralExpression([
+                    factory.createPropertyAssignment("children", result_13)
                 ]);
             }
             var result = ts.mapDefined(children, transformJsxChildToExpression);
@@ -91575,7 +93596,7 @@
                 var literal = factory.createStringLiteral(tryDecodeEntities(node.text) || node.text, singleQuote);
                 return ts.setTextRange(literal, node);
             }
-            else if (node.kind === 284 /* JsxExpression */) {
+            else if (node.kind === 286 /* JsxExpression */) {
                 if (node.expression === undefined) {
                     return factory.createTrue();
                 }
@@ -91669,7 +93690,7 @@
             return decoded === text ? undefined : decoded;
         }
         function getTagName(node) {
-            if (node.kind === 274 /* JsxElement */) {
+            if (node.kind === 276 /* JsxElement */) {
                 return getTagName(node.openingElement);
             }
             else {
@@ -91975,7 +93996,7 @@
                 return node;
             }
             switch (node.kind) {
-                case 217 /* BinaryExpression */:
+                case 219 /* BinaryExpression */:
                     return visitBinaryExpression(node);
                 default:
                     return ts.visitEachChild(node, visitor, context);
@@ -91983,7 +94004,7 @@
         }
         function visitBinaryExpression(node) {
             switch (node.operatorToken.kind) {
-                case 66 /* AsteriskAsteriskEqualsToken */:
+                case 67 /* AsteriskAsteriskEqualsToken */:
                     return visitExponentiationAssignmentExpression(node);
                 case 42 /* AsteriskAsteriskToken */:
                     return visitExponentiationExpression(node);
@@ -92072,12 +94093,13 @@
         HierarchyFacts[HierarchyFacts["ForStatement"] = 2048] = "ForStatement";
         HierarchyFacts[HierarchyFacts["ForInOrForOfStatement"] = 4096] = "ForInOrForOfStatement";
         HierarchyFacts[HierarchyFacts["ConstructorWithCapturedSuper"] = 8192] = "ConstructorWithCapturedSuper";
+        HierarchyFacts[HierarchyFacts["StaticInitializer"] = 16384] = "StaticInitializer";
         // NOTE: do not add more ancestor flags without also updating AncestorFactsMask below.
         // NOTE: when adding a new ancestor flag, be sure to update the subtree flags below.
         //
         // Ancestor masks
         //
-        HierarchyFacts[HierarchyFacts["AncestorFactsMask"] = 16383] = "AncestorFactsMask";
+        HierarchyFacts[HierarchyFacts["AncestorFactsMask"] = 32767] = "AncestorFactsMask";
         // We are always in *some* kind of block scope, but only specific block-scope containers are
         // top-level or Blocks.
         HierarchyFacts[HierarchyFacts["BlockScopeIncludes"] = 0] = "BlockScopeIncludes";
@@ -92087,16 +94109,16 @@
         HierarchyFacts[HierarchyFacts["SourceFileExcludes"] = 8064] = "SourceFileExcludes";
         // Functions, methods, and accessors are both new lexical scopes and new block scopes.
         HierarchyFacts[HierarchyFacts["FunctionIncludes"] = 65] = "FunctionIncludes";
-        HierarchyFacts[HierarchyFacts["FunctionExcludes"] = 16286] = "FunctionExcludes";
+        HierarchyFacts[HierarchyFacts["FunctionExcludes"] = 32670] = "FunctionExcludes";
         HierarchyFacts[HierarchyFacts["AsyncFunctionBodyIncludes"] = 69] = "AsyncFunctionBodyIncludes";
-        HierarchyFacts[HierarchyFacts["AsyncFunctionBodyExcludes"] = 16278] = "AsyncFunctionBodyExcludes";
+        HierarchyFacts[HierarchyFacts["AsyncFunctionBodyExcludes"] = 32662] = "AsyncFunctionBodyExcludes";
         // Arrow functions are lexically scoped to their container, but are new block scopes.
         HierarchyFacts[HierarchyFacts["ArrowFunctionIncludes"] = 66] = "ArrowFunctionIncludes";
         HierarchyFacts[HierarchyFacts["ArrowFunctionExcludes"] = 15232] = "ArrowFunctionExcludes";
         // Constructors are both new lexical scopes and new block scopes. Constructors are also
         // always considered non-static members of a class.
         HierarchyFacts[HierarchyFacts["ConstructorIncludes"] = 73] = "ConstructorIncludes";
-        HierarchyFacts[HierarchyFacts["ConstructorExcludes"] = 16278] = "ConstructorExcludes";
+        HierarchyFacts[HierarchyFacts["ConstructorExcludes"] = 32662] = "ConstructorExcludes";
         // 'do' and 'while' statements are not block scopes. We track that the subtree is contained
         // within an IterationStatement to indicate whether the embedded statement is an
         // IterationStatementBlock.
@@ -92114,18 +94136,29 @@
         HierarchyFacts[HierarchyFacts["BlockExcludes"] = 6976] = "BlockExcludes";
         HierarchyFacts[HierarchyFacts["IterationStatementBlockIncludes"] = 512] = "IterationStatementBlockIncludes";
         HierarchyFacts[HierarchyFacts["IterationStatementBlockExcludes"] = 7104] = "IterationStatementBlockExcludes";
+        HierarchyFacts[HierarchyFacts["StaticInitializerIncludes"] = 16449] = "StaticInitializerIncludes";
+        HierarchyFacts[HierarchyFacts["StaticInitializerExcludes"] = 32670] = "StaticInitializerExcludes";
         //
         // Subtree facts
         //
-        HierarchyFacts[HierarchyFacts["NewTarget"] = 16384] = "NewTarget";
-        HierarchyFacts[HierarchyFacts["CapturedLexicalThis"] = 32768] = "CapturedLexicalThis";
+        HierarchyFacts[HierarchyFacts["NewTarget"] = 32768] = "NewTarget";
+        HierarchyFacts[HierarchyFacts["CapturedLexicalThis"] = 65536] = "CapturedLexicalThis";
         //
         // Subtree masks
         //
-        HierarchyFacts[HierarchyFacts["SubtreeFactsMask"] = -16384] = "SubtreeFactsMask";
+        HierarchyFacts[HierarchyFacts["SubtreeFactsMask"] = -32768] = "SubtreeFactsMask";
         HierarchyFacts[HierarchyFacts["ArrowFunctionSubtreeExcludes"] = 0] = "ArrowFunctionSubtreeExcludes";
-        HierarchyFacts[HierarchyFacts["FunctionSubtreeExcludes"] = 49152] = "FunctionSubtreeExcludes";
+        HierarchyFacts[HierarchyFacts["FunctionSubtreeExcludes"] = 98304] = "FunctionSubtreeExcludes";
     })(HierarchyFacts || (HierarchyFacts = {}));
+    var SpreadSegmentKind;
+    (function (SpreadSegmentKind) {
+        SpreadSegmentKind[SpreadSegmentKind["None"] = 0] = "None";
+        SpreadSegmentKind[SpreadSegmentKind["UnpackedSpread"] = 1] = "UnpackedSpread";
+        SpreadSegmentKind[SpreadSegmentKind["PackedSpread"] = 2] = "PackedSpread";
+    })(SpreadSegmentKind || (SpreadSegmentKind = {}));
+    function createSpreadSegment(kind, expression) {
+        return { kind: kind, expression: expression };
+    }
     function transformES2015(context) {
         var factory = context.factory, emitHelpers = context.getEmitHelperFactory, startLexicalEnvironment = context.startLexicalEnvironment, resumeLexicalEnvironment = context.resumeLexicalEnvironment, endLexicalEnvironment = context.endLexicalEnvironment, hoistVariableDeclaration = context.hoistVariableDeclaration;
         var compilerOptions = context.getCompilerOptions();
@@ -92173,7 +94206,7 @@
          */
         function enterSubtree(excludeFacts, includeFacts) {
             var ancestorFacts = hierarchyFacts;
-            hierarchyFacts = (hierarchyFacts & ~excludeFacts | includeFacts) & 16383 /* AncestorFactsMask */;
+            hierarchyFacts = (hierarchyFacts & ~excludeFacts | includeFacts) & 32767 /* AncestorFactsMask */;
             return ancestorFacts;
         }
         /**
@@ -92184,11 +94217,11 @@
          * @param includeFacts The new `HierarchyFacts` of the subtree that should be propagated.
          */
         function exitSubtree(ancestorFacts, excludeFacts, includeFacts) {
-            hierarchyFacts = (hierarchyFacts & ~excludeFacts | includeFacts) & -16384 /* SubtreeFactsMask */ | ancestorFacts;
+            hierarchyFacts = (hierarchyFacts & ~excludeFacts | includeFacts) & -32768 /* SubtreeFactsMask */ | ancestorFacts;
         }
         function isReturnVoidStatementInConstructorWithCapturedSuper(node) {
             return (hierarchyFacts & 8192 /* ConstructorWithCapturedSuper */) !== 0
-                && node.kind === 243 /* ReturnStatement */
+                && node.kind === 245 /* ReturnStatement */
                 && !node.expression;
         }
         function isOrMayContainReturnCompletion(node) {
@@ -92219,75 +94252,88 @@
         function visitorWithUnusedExpressionResult(node) {
             return shouldVisitNode(node) ? visitorWorker(node, /*expressionResultIsUnused*/ true) : node;
         }
+        function classWrapperStatementVisitor(node) {
+            if (shouldVisitNode(node)) {
+                var original = ts.getOriginalNode(node);
+                if (ts.isPropertyDeclaration(original) && ts.hasStaticModifier(original)) {
+                    var ancestorFacts = enterSubtree(32670 /* StaticInitializerExcludes */, 16449 /* StaticInitializerIncludes */);
+                    var result = visitorWorker(node, /*expressionResultIsUnused*/ false);
+                    exitSubtree(ancestorFacts, 98304 /* FunctionSubtreeExcludes */, 0 /* None */);
+                    return result;
+                }
+                return visitorWorker(node, /*expressionResultIsUnused*/ false);
+            }
+            return node;
+        }
         function callExpressionVisitor(node) {
-            if (node.kind === 105 /* SuperKeyword */) {
+            if (node.kind === 106 /* SuperKeyword */) {
                 return visitSuperKeyword(/*isExpressionOfCall*/ true);
             }
             return visitor(node);
         }
         function visitorWorker(node, expressionResultIsUnused) {
             switch (node.kind) {
-                case 123 /* StaticKeyword */:
+                case 124 /* StaticKeyword */:
                     return undefined; // elide static keyword
-                case 253 /* ClassDeclaration */:
+                case 255 /* ClassDeclaration */:
                     return visitClassDeclaration(node);
-                case 222 /* ClassExpression */:
+                case 224 /* ClassExpression */:
                     return visitClassExpression(node);
-                case 161 /* Parameter */:
+                case 162 /* Parameter */:
                     return visitParameter(node);
-                case 252 /* FunctionDeclaration */:
+                case 254 /* FunctionDeclaration */:
                     return visitFunctionDeclaration(node);
-                case 210 /* ArrowFunction */:
+                case 212 /* ArrowFunction */:
                     return visitArrowFunction(node);
-                case 209 /* FunctionExpression */:
+                case 211 /* FunctionExpression */:
                     return visitFunctionExpression(node);
-                case 250 /* VariableDeclaration */:
+                case 252 /* VariableDeclaration */:
                     return visitVariableDeclaration(node);
-                case 78 /* Identifier */:
+                case 79 /* Identifier */:
                     return visitIdentifier(node);
-                case 251 /* VariableDeclarationList */:
+                case 253 /* VariableDeclarationList */:
                     return visitVariableDeclarationList(node);
-                case 245 /* SwitchStatement */:
+                case 247 /* SwitchStatement */:
                     return visitSwitchStatement(node);
-                case 259 /* CaseBlock */:
+                case 261 /* CaseBlock */:
                     return visitCaseBlock(node);
-                case 231 /* Block */:
+                case 233 /* Block */:
                     return visitBlock(node, /*isFunctionBody*/ false);
-                case 242 /* BreakStatement */:
-                case 241 /* ContinueStatement */:
+                case 244 /* BreakStatement */:
+                case 243 /* ContinueStatement */:
                     return visitBreakOrContinueStatement(node);
-                case 246 /* LabeledStatement */:
+                case 248 /* LabeledStatement */:
                     return visitLabeledStatement(node);
-                case 236 /* DoStatement */:
-                case 237 /* WhileStatement */:
+                case 238 /* DoStatement */:
+                case 239 /* WhileStatement */:
                     return visitDoOrWhileStatement(node, /*outermostLabeledStatement*/ undefined);
-                case 238 /* ForStatement */:
+                case 240 /* ForStatement */:
                     return visitForStatement(node, /*outermostLabeledStatement*/ undefined);
-                case 239 /* ForInStatement */:
+                case 241 /* ForInStatement */:
                     return visitForInStatement(node, /*outermostLabeledStatement*/ undefined);
-                case 240 /* ForOfStatement */:
+                case 242 /* ForOfStatement */:
                     return visitForOfStatement(node, /*outermostLabeledStatement*/ undefined);
-                case 234 /* ExpressionStatement */:
+                case 236 /* ExpressionStatement */:
                     return visitExpressionStatement(node);
-                case 201 /* ObjectLiteralExpression */:
+                case 203 /* ObjectLiteralExpression */:
                     return visitObjectLiteralExpression(node);
-                case 288 /* CatchClause */:
+                case 290 /* CatchClause */:
                     return visitCatchClause(node);
-                case 290 /* ShorthandPropertyAssignment */:
+                case 292 /* ShorthandPropertyAssignment */:
                     return visitShorthandPropertyAssignment(node);
-                case 159 /* ComputedPropertyName */:
+                case 160 /* ComputedPropertyName */:
                     return visitComputedPropertyName(node);
-                case 200 /* ArrayLiteralExpression */:
+                case 202 /* ArrayLiteralExpression */:
                     return visitArrayLiteralExpression(node);
-                case 204 /* CallExpression */:
+                case 206 /* CallExpression */:
                     return visitCallExpression(node);
-                case 205 /* NewExpression */:
+                case 207 /* NewExpression */:
                     return visitNewExpression(node);
-                case 208 /* ParenthesizedExpression */:
+                case 210 /* ParenthesizedExpression */:
                     return visitParenthesizedExpression(node, expressionResultIsUnused);
-                case 217 /* BinaryExpression */:
+                case 219 /* BinaryExpression */:
                     return visitBinaryExpression(node, expressionResultIsUnused);
-                case 341 /* CommaListExpression */:
+                case 346 /* CommaListExpression */:
                     return visitCommaListExpression(node, expressionResultIsUnused);
                 case 14 /* NoSubstitutionTemplateLiteral */:
                 case 15 /* TemplateHead */:
@@ -92298,30 +94344,30 @@
                     return visitStringLiteral(node);
                 case 8 /* NumericLiteral */:
                     return visitNumericLiteral(node);
-                case 206 /* TaggedTemplateExpression */:
+                case 208 /* TaggedTemplateExpression */:
                     return visitTaggedTemplateExpression(node);
-                case 219 /* TemplateExpression */:
+                case 221 /* TemplateExpression */:
                     return visitTemplateExpression(node);
-                case 220 /* YieldExpression */:
+                case 222 /* YieldExpression */:
                     return visitYieldExpression(node);
-                case 221 /* SpreadElement */:
+                case 223 /* SpreadElement */:
                     return visitSpreadElement(node);
-                case 105 /* SuperKeyword */:
+                case 106 /* SuperKeyword */:
                     return visitSuperKeyword(/*isExpressionOfCall*/ false);
-                case 107 /* ThisKeyword */:
+                case 108 /* ThisKeyword */:
                     return visitThisKeyword(node);
-                case 227 /* MetaProperty */:
+                case 229 /* MetaProperty */:
                     return visitMetaProperty(node);
-                case 166 /* MethodDeclaration */:
+                case 167 /* MethodDeclaration */:
                     return visitMethodDeclaration(node);
-                case 168 /* GetAccessor */:
-                case 169 /* SetAccessor */:
+                case 170 /* GetAccessor */:
+                case 171 /* SetAccessor */:
                     return visitAccessorDeclaration(node);
-                case 233 /* VariableStatement */:
+                case 235 /* VariableStatement */:
                     return visitVariableStatement(node);
-                case 243 /* ReturnStatement */:
+                case 245 /* ReturnStatement */:
                     return visitReturnStatement(node);
-                case 213 /* VoidExpression */:
+                case 215 /* VoidExpression */:
                     return visitVoidExpression(node);
                 default:
                     return ts.visitEachChild(node, visitor, context);
@@ -92380,8 +94426,8 @@
             return ts.visitEachChild(node, visitor, context);
         }
         function visitThisKeyword(node) {
-            if (hierarchyFacts & 2 /* ArrowFunction */) {
-                hierarchyFacts |= 32768 /* CapturedLexicalThis */;
+            if (hierarchyFacts & 2 /* ArrowFunction */ && !(hierarchyFacts & 16384 /* StaticInitializer */)) {
+                hierarchyFacts |= 65536 /* CapturedLexicalThis */;
             }
             if (convertedLoopState) {
                 if (hierarchyFacts & 2 /* ArrowFunction */) {
@@ -92411,14 +94457,14 @@
                 // it is possible if either
                 //   - break/continue is labeled and label is located inside the converted loop
                 //   - break/continue is non-labeled and located in non-converted loop/switch statement
-                var jump = node.kind === 242 /* BreakStatement */ ? 2 /* Break */ : 4 /* Continue */;
+                var jump = node.kind === 244 /* BreakStatement */ ? 2 /* Break */ : 4 /* Continue */;
                 var canUseBreakOrContinue = (node.label && convertedLoopState.labels && convertedLoopState.labels.get(ts.idText(node.label))) ||
                     (!node.label && (convertedLoopState.allowedNonLabeledJumps & jump));
                 if (!canUseBreakOrContinue) {
                     var labelMarker = void 0;
                     var label = node.label;
                     if (!label) {
-                        if (node.kind === 242 /* BreakStatement */) {
+                        if (node.kind === 244 /* BreakStatement */) {
                             convertedLoopState.nonLocalJumps |= 2 /* Break */;
                             labelMarker = "break";
                         }
@@ -92429,7 +94475,7 @@
                         }
                     }
                     else {
-                        if (node.kind === 242 /* BreakStatement */) {
+                        if (node.kind === 244 /* BreakStatement */) {
                             labelMarker = "break-" + label.escapedText;
                             setLabeledJump(convertedLoopState, /*isBreak*/ true, ts.idText(label), labelMarker);
                         }
@@ -92626,7 +94672,7 @@
         function addConstructor(statements, node, name, extendsClauseElement) {
             var savedConvertedLoopState = convertedLoopState;
             convertedLoopState = undefined;
-            var ancestorFacts = enterSubtree(16278 /* ConstructorExcludes */, 73 /* ConstructorIncludes */);
+            var ancestorFacts = enterSubtree(32662 /* ConstructorExcludes */, 73 /* ConstructorIncludes */);
             var constructor = ts.getFirstConstructorWithBody(node);
             var hasSynthesizedSuper = hasSynthesizedDefaultSuperCall(constructor, extendsClauseElement !== undefined);
             var constructorFunction = factory.createFunctionDeclaration(
@@ -92640,7 +94686,7 @@
                 ts.setEmitFlags(constructorFunction, 8 /* CapturesThis */);
             }
             statements.push(constructorFunction);
-            exitSubtree(ancestorFacts, 49152 /* FunctionSubtreeExcludes */, 0 /* None */);
+            exitSubtree(ancestorFacts, 98304 /* FunctionSubtreeExcludes */, 0 /* None */);
             convertedLoopState = savedConvertedLoopState;
         }
         /**
@@ -92689,7 +94735,7 @@
         function transformConstructorBody(constructor, node, extendsClauseElement, hasSynthesizedSuper) {
             // determine whether the class is known syntactically to be a derived class (e.g. a
             // class that extends a value that is not syntactically known to be `null`).
-            var isDerivedClass = !!extendsClauseElement && ts.skipOuterExpressions(extendsClauseElement.expression).kind !== 103 /* NullKeyword */;
+            var isDerivedClass = !!extendsClauseElement && ts.skipOuterExpressions(extendsClauseElement.expression).kind !== 104 /* NullKeyword */;
             // When the subclass does not have a constructor, we synthesize a *default* constructor using the following
             // representation:
             //
@@ -92827,11 +94873,11 @@
          */
         function isSufficientlyCoveredByReturnStatements(statement) {
             // A return statement is considered covered.
-            if (statement.kind === 243 /* ReturnStatement */) {
+            if (statement.kind === 245 /* ReturnStatement */) {
                 return true;
             }
             // An if-statement with two covered branches is covered.
-            else if (statement.kind === 235 /* IfStatement */) {
+            else if (statement.kind === 237 /* IfStatement */) {
                 var ifStatement = statement;
                 if (ifStatement.elseStatement) {
                     return isSufficientlyCoveredByReturnStatements(ifStatement.thenStatement) &&
@@ -92839,7 +94885,7 @@
                 }
             }
             // A block is covered if it has a last statement which is covered.
-            else if (statement.kind === 231 /* Block */) {
+            else if (statement.kind === 233 /* Block */) {
                 var lastStatement = ts.lastOrUndefined(statement.statements);
                 if (lastStatement && isSufficientlyCoveredByReturnStatements(lastStatement)) {
                     return true;
@@ -92997,10 +95043,10 @@
             }
             // `declarationName` is the name of the local declaration for the parameter.
             // TODO(rbuckton): Does this need to be parented?
-            var declarationName = parameter.name.kind === 78 /* Identifier */ ? ts.setParent(ts.setTextRange(factory.cloneNode(parameter.name), parameter.name), parameter.name.parent) : factory.createTempVariable(/*recordTempVariable*/ undefined);
+            var declarationName = parameter.name.kind === 79 /* Identifier */ ? ts.setParent(ts.setTextRange(factory.cloneNode(parameter.name), parameter.name), parameter.name.parent) : factory.createTempVariable(/*recordTempVariable*/ undefined);
             ts.setEmitFlags(declarationName, 48 /* NoSourceMap */);
             // `expressionName` is the name of the parameter used in expressions.
-            var expressionName = parameter.name.kind === 78 /* Identifier */ ? factory.cloneNode(parameter.name) : declarationName;
+            var expressionName = parameter.name.kind === 79 /* Identifier */ ? factory.cloneNode(parameter.name) : declarationName;
             var restIndex = node.parameters.length - 1;
             var temp = factory.createLoopVariable();
             // var param = [];
@@ -93025,7 +95071,7 @@
             ts.setEmitFlags(forStatement, 1048576 /* CustomPrologue */);
             ts.startOnNewLine(forStatement);
             prologueStatements.push(forStatement);
-            if (parameter.name.kind !== 78 /* Identifier */) {
+            if (parameter.name.kind !== 79 /* Identifier */) {
                 // do the actual destructuring of the rest parameter if necessary
                 prologueStatements.push(ts.setEmitFlags(ts.setTextRange(factory.createVariableStatement(
                 /*modifiers*/ undefined, factory.createVariableDeclarationList(ts.flattenDestructuringBinding(parameter, visitor, context, 0 /* All */, expressionName))), parameter), 1048576 /* CustomPrologue */));
@@ -93041,7 +95087,7 @@
          * @param node A node.
          */
         function insertCaptureThisForNodeIfNeeded(statements, node) {
-            if (hierarchyFacts & 32768 /* CapturedLexicalThis */ && node.kind !== 210 /* ArrowFunction */) {
+            if (hierarchyFacts & 65536 /* CapturedLexicalThis */ && node.kind !== 212 /* ArrowFunction */) {
                 insertCaptureThisForNode(statements, node, factory.createThis());
                 return true;
             }
@@ -93060,28 +95106,28 @@
             ts.insertStatementAfterCustomPrologue(statements, captureThisStatement);
         }
         function insertCaptureNewTargetIfNeeded(statements, node, copyOnWrite) {
-            if (hierarchyFacts & 16384 /* NewTarget */) {
+            if (hierarchyFacts & 32768 /* NewTarget */) {
                 var newTarget = void 0;
                 switch (node.kind) {
-                    case 210 /* ArrowFunction */:
+                    case 212 /* ArrowFunction */:
                         return statements;
-                    case 166 /* MethodDeclaration */:
-                    case 168 /* GetAccessor */:
-                    case 169 /* SetAccessor */:
+                    case 167 /* MethodDeclaration */:
+                    case 170 /* GetAccessor */:
+                    case 171 /* SetAccessor */:
                         // Methods and accessors cannot be constructors, so 'new.target' will
                         // always return 'undefined'.
                         newTarget = factory.createVoidZero();
                         break;
-                    case 167 /* Constructor */:
+                    case 169 /* Constructor */:
                         // Class constructors can only be called with `new`, so `this.constructor`
                         // should be relatively safe to use.
                         newTarget = factory.createPropertyAccessExpression(ts.setEmitFlags(factory.createThis(), 4 /* NoSubstitution */), "constructor");
                         break;
-                    case 252 /* FunctionDeclaration */:
-                    case 209 /* FunctionExpression */:
+                    case 254 /* FunctionDeclaration */:
+                    case 211 /* FunctionExpression */:
                         // Functions can be called or constructed, and may have a `this` due to
                         // being a member or when calling an imported function via `other_1.f()`.
-                        newTarget = factory.createConditionalExpression(factory.createLogicalAnd(ts.setEmitFlags(factory.createThis(), 4 /* NoSubstitution */), factory.createBinaryExpression(ts.setEmitFlags(factory.createThis(), 4 /* NoSubstitution */), 101 /* InstanceOfKeyword */, factory.getLocalName(node))), 
+                        newTarget = factory.createConditionalExpression(factory.createLogicalAnd(ts.setEmitFlags(factory.createThis(), 4 /* NoSubstitution */), factory.createBinaryExpression(ts.setEmitFlags(factory.createThis(), 4 /* NoSubstitution */), 102 /* InstanceOfKeyword */, factory.getLocalName(node))), 
                         /*questionToken*/ undefined, factory.createPropertyAccessExpression(ts.setEmitFlags(factory.createThis(), 4 /* NoSubstitution */), "constructor"), 
                         /*colonToken*/ undefined, factory.createVoidZero());
                         break;
@@ -93113,20 +95159,21 @@
             for (var _i = 0, _a = node.members; _i < _a.length; _i++) {
                 var member = _a[_i];
                 switch (member.kind) {
-                    case 230 /* SemicolonClassElement */:
+                    case 232 /* SemicolonClassElement */:
                         statements.push(transformSemicolonClassElementToStatement(member));
                         break;
-                    case 166 /* MethodDeclaration */:
+                    case 167 /* MethodDeclaration */:
                         statements.push(transformClassMethodDeclarationToStatement(getClassMemberPrefix(node, member), member, node));
                         break;
-                    case 168 /* GetAccessor */:
-                    case 169 /* SetAccessor */:
+                    case 170 /* GetAccessor */:
+                    case 171 /* SetAccessor */:
                         var accessors = ts.getAllAccessorDeclarations(node.members, member);
                         if (member === accessors.firstAccessor) {
                             statements.push(transformAccessorsToStatement(getClassMemberPrefix(node, member), accessors, node));
                         }
                         break;
-                    case 167 /* Constructor */:
+                    case 169 /* Constructor */:
+                    case 168 /* ClassStaticBlockDeclaration */:
                         // Constructors are handled in visitClassExpression/visitClassDeclaration
                         break;
                     default:
@@ -93247,8 +95294,8 @@
          * @param node An ArrowFunction node.
          */
         function visitArrowFunction(node) {
-            if (node.transformFlags & 8192 /* ContainsLexicalThis */) {
-                hierarchyFacts |= 32768 /* CapturedLexicalThis */;
+            if (node.transformFlags & 8192 /* ContainsLexicalThis */ && !(hierarchyFacts & 16384 /* StaticInitializer */)) {
+                hierarchyFacts |= 65536 /* CapturedLexicalThis */;
             }
             var savedConvertedLoopState = convertedLoopState;
             convertedLoopState = undefined;
@@ -93262,9 +95309,6 @@
             ts.setTextRange(func, node);
             ts.setOriginalNode(func, node);
             ts.setEmitFlags(func, 8 /* CapturesThis */);
-            if (hierarchyFacts & 32768 /* CapturedLexicalThis */) {
-                enableSubstitutionsForCapturedThis();
-            }
             // If an arrow function contains
             exitSubtree(ancestorFacts, 0 /* ArrowFunctionSubtreeExcludes */, 0 /* None */);
             convertedLoopState = savedConvertedLoopState;
@@ -93277,16 +95321,16 @@
          */
         function visitFunctionExpression(node) {
             var ancestorFacts = ts.getEmitFlags(node) & 262144 /* AsyncFunctionBody */
-                ? enterSubtree(16278 /* AsyncFunctionBodyExcludes */, 69 /* AsyncFunctionBodyIncludes */)
-                : enterSubtree(16286 /* FunctionExcludes */, 65 /* FunctionIncludes */);
+                ? enterSubtree(32662 /* AsyncFunctionBodyExcludes */, 69 /* AsyncFunctionBodyIncludes */)
+                : enterSubtree(32670 /* FunctionExcludes */, 65 /* FunctionIncludes */);
             var savedConvertedLoopState = convertedLoopState;
             convertedLoopState = undefined;
             var parameters = ts.visitParameterList(node.parameters, visitor, context);
             var body = transformFunctionBody(node);
-            var name = hierarchyFacts & 16384 /* NewTarget */
+            var name = hierarchyFacts & 32768 /* NewTarget */
                 ? factory.getLocalName(node)
                 : node.name;
-            exitSubtree(ancestorFacts, 49152 /* FunctionSubtreeExcludes */, 0 /* None */);
+            exitSubtree(ancestorFacts, 98304 /* FunctionSubtreeExcludes */, 0 /* None */);
             convertedLoopState = savedConvertedLoopState;
             return factory.updateFunctionExpression(node, 
             /*modifiers*/ undefined, node.asteriskToken, name, 
@@ -93301,13 +95345,13 @@
         function visitFunctionDeclaration(node) {
             var savedConvertedLoopState = convertedLoopState;
             convertedLoopState = undefined;
-            var ancestorFacts = enterSubtree(16286 /* FunctionExcludes */, 65 /* FunctionIncludes */);
+            var ancestorFacts = enterSubtree(32670 /* FunctionExcludes */, 65 /* FunctionIncludes */);
             var parameters = ts.visitParameterList(node.parameters, visitor, context);
             var body = transformFunctionBody(node);
-            var name = hierarchyFacts & 16384 /* NewTarget */
+            var name = hierarchyFacts & 32768 /* NewTarget */
                 ? factory.getLocalName(node)
                 : node.name;
-            exitSubtree(ancestorFacts, 49152 /* FunctionSubtreeExcludes */, 0 /* None */);
+            exitSubtree(ancestorFacts, 98304 /* FunctionSubtreeExcludes */, 0 /* None */);
             convertedLoopState = savedConvertedLoopState;
             return factory.updateFunctionDeclaration(node, 
             /*decorators*/ undefined, ts.visitNodes(node.modifiers, visitor, ts.isModifier), node.asteriskToken, name, 
@@ -93324,15 +95368,15 @@
         function transformFunctionLikeToExpression(node, location, name, container) {
             var savedConvertedLoopState = convertedLoopState;
             convertedLoopState = undefined;
-            var ancestorFacts = container && ts.isClassLike(container) && !ts.hasSyntacticModifier(node, 32 /* Static */)
-                ? enterSubtree(16286 /* FunctionExcludes */, 65 /* FunctionIncludes */ | 8 /* NonStaticClassElement */)
-                : enterSubtree(16286 /* FunctionExcludes */, 65 /* FunctionIncludes */);
+            var ancestorFacts = container && ts.isClassLike(container) && !ts.isStatic(node)
+                ? enterSubtree(32670 /* FunctionExcludes */, 65 /* FunctionIncludes */ | 8 /* NonStaticClassElement */)
+                : enterSubtree(32670 /* FunctionExcludes */, 65 /* FunctionIncludes */);
             var parameters = ts.visitParameterList(node.parameters, visitor, context);
             var body = transformFunctionBody(node);
-            if (hierarchyFacts & 16384 /* NewTarget */ && !name && (node.kind === 252 /* FunctionDeclaration */ || node.kind === 209 /* FunctionExpression */)) {
+            if (hierarchyFacts & 32768 /* NewTarget */ && !name && (node.kind === 254 /* FunctionDeclaration */ || node.kind === 211 /* FunctionExpression */)) {
                 name = factory.getGeneratedNameForNode(node);
             }
-            exitSubtree(ancestorFacts, 49152 /* FunctionSubtreeExcludes */, 0 /* None */);
+            exitSubtree(ancestorFacts, 98304 /* FunctionSubtreeExcludes */, 0 /* None */);
             convertedLoopState = savedConvertedLoopState;
             return ts.setOriginalNode(ts.setTextRange(factory.createFunctionExpression(
             /*modifiers*/ undefined, node.asteriskToken, name, 
@@ -93375,7 +95419,7 @@
                 }
             }
             else {
-                ts.Debug.assert(node.kind === 210 /* ArrowFunction */);
+                ts.Debug.assert(node.kind === 212 /* ArrowFunction */);
                 // To align with the old emitter, we use a synthetic end position on the location
                 // for the statement list we synthesize when we down-level an arrow function with
                 // an expression function body. This prevents both comments and source maps from
@@ -93510,7 +95554,7 @@
                             assignment = ts.flattenDestructuringAssignment(decl, visitor, context, 0 /* All */);
                         }
                         else {
-                            assignment = factory.createBinaryExpression(decl.name, 62 /* EqualsToken */, ts.visitNode(decl.initializer, visitor, ts.isExpression));
+                            assignment = factory.createBinaryExpression(decl.name, 63 /* EqualsToken */, ts.visitNode(decl.initializer, visitor, ts.isExpression));
                             ts.setTextRange(assignment, decl);
                         }
                         assignments = ts.append(assignments, assignment);
@@ -93682,14 +95726,14 @@
         }
         function visitIterationStatement(node, outermostLabeledStatement) {
             switch (node.kind) {
-                case 236 /* DoStatement */:
-                case 237 /* WhileStatement */:
+                case 238 /* DoStatement */:
+                case 239 /* WhileStatement */:
                     return visitDoOrWhileStatement(node, outermostLabeledStatement);
-                case 238 /* ForStatement */:
+                case 240 /* ForStatement */:
                     return visitForStatement(node, outermostLabeledStatement);
-                case 239 /* ForInStatement */:
+                case 241 /* ForInStatement */:
                     return visitForInStatement(node, outermostLabeledStatement);
-                case 240 /* ForOfStatement */:
+                case 242 /* ForOfStatement */:
                     return visitForOfStatement(node, outermostLabeledStatement);
             }
         }
@@ -93875,7 +95919,7 @@
                 var property = properties[i];
                 if ((property.transformFlags & 524288 /* ContainsYield */ &&
                     hierarchyFacts & 4 /* AsyncFunctionBody */)
-                    || (hasComputed = ts.Debug.checkDefined(property.name).kind === 159 /* ComputedPropertyName */)) {
+                    || (hasComputed = ts.Debug.checkDefined(property.name).kind === 160 /* ComputedPropertyName */)) {
                     numInitialProperties = i;
                     break;
                 }
@@ -93927,7 +95971,7 @@
             }
             visit(node.name);
             function visit(node) {
-                if (node.kind === 78 /* Identifier */) {
+                if (node.kind === 79 /* Identifier */) {
                     state.hoistedLocalVariables.push(node);
                 }
                 else {
@@ -93991,11 +96035,11 @@
         }
         function convertIterationStatementCore(node, initializerFunction, convertedLoopBody) {
             switch (node.kind) {
-                case 238 /* ForStatement */: return convertForStatement(node, initializerFunction, convertedLoopBody);
-                case 239 /* ForInStatement */: return convertForInStatement(node, convertedLoopBody);
-                case 240 /* ForOfStatement */: return convertForOfStatement(node, convertedLoopBody);
-                case 236 /* DoStatement */: return convertDoStatement(node, convertedLoopBody);
-                case 237 /* WhileStatement */: return convertWhileStatement(node, convertedLoopBody);
+                case 240 /* ForStatement */: return convertForStatement(node, initializerFunction, convertedLoopBody);
+                case 241 /* ForInStatement */: return convertForInStatement(node, convertedLoopBody);
+                case 242 /* ForOfStatement */: return convertForOfStatement(node, convertedLoopBody);
+                case 238 /* DoStatement */: return convertDoStatement(node, convertedLoopBody);
+                case 239 /* WhileStatement */: return convertWhileStatement(node, convertedLoopBody);
                 default: return ts.Debug.failBadSyntaxKind(node, "IterationStatement expected");
             }
         }
@@ -94020,11 +96064,11 @@
         function createConvertedLoopState(node) {
             var loopInitializer;
             switch (node.kind) {
-                case 238 /* ForStatement */:
-                case 239 /* ForInStatement */:
-                case 240 /* ForOfStatement */:
+                case 240 /* ForStatement */:
+                case 241 /* ForInStatement */:
+                case 242 /* ForOfStatement */:
                     var initializer = node.initializer;
-                    if (initializer && initializer.kind === 251 /* VariableDeclarationList */) {
+                    if (initializer && initializer.kind === 253 /* VariableDeclarationList */) {
                         loopInitializer = initializer;
                     }
                     break;
@@ -94295,7 +96339,7 @@
         function copyOutParameter(outParam, copyDirection) {
             var source = copyDirection === 0 /* ToOriginal */ ? outParam.outParamName : outParam.originalName;
             var target = copyDirection === 0 /* ToOriginal */ ? outParam.originalName : outParam.outParamName;
-            return factory.createBinaryExpression(target, 62 /* EqualsToken */, source);
+            return factory.createBinaryExpression(target, 63 /* EqualsToken */, source);
         }
         function copyOutParameters(outParams, partFlags, copyDirection, statements) {
             for (var _i = 0, outParams_1 = outParams; _i < outParams_1.length; _i++) {
@@ -94432,20 +96476,20 @@
             for (var i = start; i < numProperties; i++) {
                 var property = properties[i];
                 switch (property.kind) {
-                    case 168 /* GetAccessor */:
-                    case 169 /* SetAccessor */:
+                    case 170 /* GetAccessor */:
+                    case 171 /* SetAccessor */:
                         var accessors = ts.getAllAccessorDeclarations(node.properties, property);
                         if (property === accessors.firstAccessor) {
                             expressions.push(transformAccessorsToExpression(receiver, accessors, node, !!node.multiLine));
                         }
                         break;
-                    case 166 /* MethodDeclaration */:
+                    case 167 /* MethodDeclaration */:
                         expressions.push(transformObjectLiteralMethodDeclarationToExpression(property, receiver, node, node.multiLine));
                         break;
-                    case 289 /* PropertyAssignment */:
+                    case 291 /* PropertyAssignment */:
                         expressions.push(transformPropertyAssignmentToExpression(property, receiver, node.multiLine));
                         break;
-                    case 290 /* ShorthandPropertyAssignment */:
+                    case 292 /* ShorthandPropertyAssignment */:
                         expressions.push(transformShorthandPropertyAssignmentToExpression(property, receiver, node.multiLine));
                         break;
                     default:
@@ -94521,7 +96565,7 @@
         }
         function addStatementToStartOfBlock(block, statement) {
             var transformedStatements = ts.visitNodes(block.statements, visitor, ts.isStatement);
-            return factory.updateBlock(block, __spreadArray([statement], transformedStatements));
+            return factory.updateBlock(block, __spreadArray([statement], transformedStatements, true));
         }
         /**
          * Visits a MethodDeclaration of an ObjectLiteralExpression and transforms it into a
@@ -94548,17 +96592,17 @@
             ts.Debug.assert(!ts.isComputedPropertyName(node.name));
             var savedConvertedLoopState = convertedLoopState;
             convertedLoopState = undefined;
-            var ancestorFacts = enterSubtree(16286 /* FunctionExcludes */, 65 /* FunctionIncludes */);
+            var ancestorFacts = enterSubtree(32670 /* FunctionExcludes */, 65 /* FunctionIncludes */);
             var updated;
             var parameters = ts.visitParameterList(node.parameters, visitor, context);
             var body = transformFunctionBody(node);
-            if (node.kind === 168 /* GetAccessor */) {
+            if (node.kind === 170 /* GetAccessor */) {
                 updated = factory.updateGetAccessorDeclaration(node, node.decorators, node.modifiers, node.name, parameters, node.type, body);
             }
             else {
                 updated = factory.updateSetAccessorDeclaration(node, node.decorators, node.modifiers, node.name, parameters, body);
             }
-            exitSubtree(ancestorFacts, 49152 /* FunctionSubtreeExcludes */, 0 /* None */);
+            exitSubtree(ancestorFacts, 98304 /* FunctionSubtreeExcludes */, 0 /* None */);
             convertedLoopState = savedConvertedLoopState;
             return updated;
         }
@@ -94591,7 +96635,7 @@
         function visitArrayLiteralExpression(node) {
             if (ts.some(node.elements, ts.isSpreadElement)) {
                 // We are here because we contain a SpreadElementExpression.
-                return transformAndSpreadElements(node.elements, /*needsUniqueCopy*/ true, !!node.multiLine, /*hasTrailingComma*/ !!node.elements.hasTrailingComma);
+                return transformAndSpreadElements(node.elements, /*isArgumentList*/ false, !!node.multiLine, /*hasTrailingComma*/ !!node.elements.hasTrailingComma);
             }
             return ts.visitEachChild(node, visitor, context);
         }
@@ -94605,7 +96649,7 @@
                 return visitTypeScriptClassWrapper(node);
             }
             var expression = ts.skipOuterExpressions(node.expression);
-            if (expression.kind === 105 /* SuperKeyword */ ||
+            if (expression.kind === 106 /* SuperKeyword */ ||
                 ts.isSuperProperty(expression) ||
                 ts.some(node.arguments, ts.isSpreadElement)) {
                 return visitCallExpressionWithPotentialCapturedThisAssignment(node, /*assignToCapturedThis*/ true);
@@ -94653,7 +96697,7 @@
             // visit the class body statements outside of any converted loop body.
             var savedConvertedLoopState = convertedLoopState;
             convertedLoopState = undefined;
-            var bodyStatements = ts.visitNodes(body.statements, visitor, ts.isStatement);
+            var bodyStatements = ts.visitNodes(body.statements, classWrapperStatementVisitor, ts.isStatement);
             convertedLoopState = savedConvertedLoopState;
             var classStatements = ts.filter(bodyStatements, isVariableStatementWithInitializer);
             var remainingStatements = ts.filter(bodyStatements, function (stmt) { return !isVariableStatementWithInitializer(stmt); });
@@ -94678,6 +96722,9 @@
             //  }())
             //
             var aliasAssignment = ts.tryCast(initializer, ts.isAssignmentExpression);
+            if (!aliasAssignment && ts.isBinaryExpression(initializer) && initializer.operatorToken.kind === 27 /* CommaToken */) {
+                aliasAssignment = ts.tryCast(initializer.left, ts.isAssignmentExpression);
+            }
             // The underlying call (3) is another IIFE that may contain a '_super' argument.
             var call = ts.cast(aliasAssignment ? ts.skipOuterExpressions(aliasAssignment.right) : initializer, ts.isCallExpression);
             var func = ts.cast(ts.skipOuterExpressions(call.expression), ts.isFunctionExpression);
@@ -94733,10 +96780,10 @@
             // We are here either because SuperKeyword was used somewhere in the expression, or
             // because we contain a SpreadElementExpression.
             if (node.transformFlags & 16384 /* ContainsRestOrSpread */ ||
-                node.expression.kind === 105 /* SuperKeyword */ ||
+                node.expression.kind === 106 /* SuperKeyword */ ||
                 ts.isSuperProperty(ts.skipOuterExpressions(node.expression))) {
                 var _a = factory.createCallBinding(node.expression, hoistVariableDeclaration), target = _a.target, thisArg = _a.thisArg;
-                if (node.expression.kind === 105 /* SuperKeyword */) {
+                if (node.expression.kind === 106 /* SuperKeyword */) {
                     ts.setEmitFlags(thisArg, 4 /* NoSubstitution */);
                 }
                 var resultingCall = void 0;
@@ -94754,7 +96801,7 @@
                     //      _super.apply(this, a.concat([b]))
                     //      _super.m.apply(this, a.concat([b]))
                     //      _super.prototype.m.apply(this, a.concat([b]))
-                    resultingCall = factory.createFunctionApplyCall(ts.visitNode(target, callExpressionVisitor, ts.isExpression), node.expression.kind === 105 /* SuperKeyword */ ? thisArg : ts.visitNode(thisArg, visitor, ts.isExpression), transformAndSpreadElements(node.arguments, /*needsUniqueCopy*/ false, /*multiLine*/ false, /*hasTrailingComma*/ false));
+                    resultingCall = factory.createFunctionApplyCall(ts.visitNode(target, callExpressionVisitor, ts.isExpression), node.expression.kind === 106 /* SuperKeyword */ ? thisArg : ts.visitNode(thisArg, visitor, ts.isExpression), transformAndSpreadElements(node.arguments, /*isArgumentList*/ true, /*multiLine*/ false, /*hasTrailingComma*/ false));
                 }
                 else {
                     // [source]
@@ -94766,9 +96813,9 @@
                     //      _super.call(this, a)
                     //      _super.m.call(this, a)
                     //      _super.prototype.m.call(this, a)
-                    resultingCall = ts.setTextRange(factory.createFunctionCallCall(ts.visitNode(target, callExpressionVisitor, ts.isExpression), node.expression.kind === 105 /* SuperKeyword */ ? thisArg : ts.visitNode(thisArg, visitor, ts.isExpression), ts.visitNodes(node.arguments, visitor, ts.isExpression)), node);
+                    resultingCall = ts.setTextRange(factory.createFunctionCallCall(ts.visitNode(target, callExpressionVisitor, ts.isExpression), node.expression.kind === 106 /* SuperKeyword */ ? thisArg : ts.visitNode(thisArg, visitor, ts.isExpression), ts.visitNodes(node.arguments, visitor, ts.isExpression)), node);
                 }
-                if (node.expression.kind === 105 /* SuperKeyword */) {
+                if (node.expression.kind === 106 /* SuperKeyword */) {
                     var initializer = factory.createLogicalOr(resultingCall, createActualThis());
                     resultingCall = assignToCapturedThis
                         ? factory.createAssignment(factory.createUniqueName("_this", 16 /* Optimistic */ | 32 /* FileLevel */), initializer)
@@ -94792,7 +96839,7 @@
                 // [output]
                 //      new ((_a = C).bind.apply(_a, [void 0].concat(a)))()
                 var _a = factory.createCallBinding(factory.createPropertyAccessExpression(node.expression, "bind"), hoistVariableDeclaration), target = _a.target, thisArg = _a.thisArg;
-                return factory.createNewExpression(factory.createFunctionApplyCall(ts.visitNode(target, visitor, ts.isExpression), thisArg, transformAndSpreadElements(factory.createNodeArray(__spreadArray([factory.createVoidZero()], node.arguments)), /*needsUniqueCopy*/ false, /*multiLine*/ false, /*hasTrailingComma*/ false)), 
+                return factory.createNewExpression(factory.createFunctionApplyCall(ts.visitNode(target, visitor, ts.isExpression), thisArg, transformAndSpreadElements(factory.createNodeArray(__spreadArray([factory.createVoidZero()], node.arguments, true)), /*isArgumentList*/ true, /*multiLine*/ false, /*hasTrailingComma*/ false)), 
                 /*typeArguments*/ undefined, []);
             }
             return ts.visitEachChild(node, visitor, context);
@@ -94801,12 +96848,12 @@
          * Transforms an array of Expression nodes that contains a SpreadExpression.
          *
          * @param elements The array of Expression nodes.
-         * @param needsUniqueCopy A value indicating whether to ensure that the result is a fresh array.
-         * This should be `true` when spreading into an `ArrayLiteral`, and `false` when spreading into an
+         * @param isArgumentList A value indicating whether to ensure that the result is a fresh array.
+         * This should be `false` when spreading into an `ArrayLiteral`, and `true` when spreading into an
          * argument list.
          * @param multiLine A value indicating whether the result should be emitted on multiple lines.
          */
-        function transformAndSpreadElements(elements, needsUniqueCopy, multiLine, hasTrailingComma) {
+        function transformAndSpreadElements(elements, isArgumentList, multiLine, hasTrailingComma) {
             // When there is no leading SpreadElement:
             //
             // [source]
@@ -94840,7 +96887,11 @@
             // Map spans of spread expressions into their expressions and spans of other
             // expressions into an array literal.
             var numElements = elements.length;
-            var segments = ts.flatten(ts.spanMap(elements, partitionSpread, function (partition, visitPartition, _start, end) {
+            var segments = ts.flatten(
+            // As we visit each element, we return one of two functions to use as the "key":
+            // - `visitSpanOfSpreads` for one or more contiguous `...` spread expressions, i.e. `...a, ...b` in `[1, 2, ...a, ...b]`
+            // - `visitSpanOfNonSpreads` for one or more contiguous non-spread elements, i.e. `1, 2`, in `[1, 2, ...a, ...b]`
+            ts.spanMap(elements, partitionSpread, function (partition, visitPartition, _start, end) {
                 return visitPartition(partition, multiLine, hasTrailingComma && end === numElements);
             }));
             if (segments.length === 1) {
@@ -94849,20 +96900,20 @@
                 // a CallExpression or NewExpression. When using `--downlevelIteration`, we need
                 // to coerce this into an array for use with `apply`, so we will use the code path
                 // that follows instead.
-                if (!needsUniqueCopy && !compilerOptions.downlevelIteration
-                    || ts.isPackedArrayLiteral(firstSegment) // see NOTE (above)
-                    || ts.isCallToHelper(firstSegment, "___spreadArray")) {
-                    return segments[0];
+                if (isArgumentList && !compilerOptions.downlevelIteration
+                    || ts.isPackedArrayLiteral(firstSegment.expression) // see NOTE (above)
+                    || ts.isCallToHelper(firstSegment.expression, "___spreadArray")) {
+                    return firstSegment.expression;
                 }
             }
             var helpers = emitHelpers();
-            var startsWithSpread = ts.isSpreadElement(elements[0]);
+            var startsWithSpread = segments[0].kind !== 0 /* None */;
             var expression = startsWithSpread ? factory.createArrayLiteralExpression() :
-                segments[0];
+                segments[0].expression;
             for (var i = startsWithSpread ? 0 : 1; i < segments.length; i++) {
-                expression = helpers.createSpreadArrayHelper(expression, compilerOptions.downlevelIteration && !ts.isPackedArrayLiteral(segments[i]) ? // see NOTE (above)
-                    helpers.createReadHelper(segments[i], /*count*/ undefined) :
-                    segments[i]);
+                var segment = segments[i];
+                // If this is for an argument list, it doesn't matter if the array is packed or sparse
+                expression = helpers.createSpreadArrayHelper(expression, segment.expression, segment.kind === 1 /* UnpackedSpread */ && !isArgumentList);
             }
             return expression;
         }
@@ -94874,21 +96925,29 @@
         function visitSpanOfSpreads(chunk) {
             return ts.map(chunk, visitExpressionOfSpread);
         }
+        function visitExpressionOfSpread(node) {
+            var expression = ts.visitNode(node.expression, visitor, ts.isExpression);
+            // We don't need to pack already packed array literals, or existing calls to the `__read` helper.
+            var isCallToReadHelper = ts.isCallToHelper(expression, "___read");
+            var kind = isCallToReadHelper || ts.isPackedArrayLiteral(expression) ? 2 /* PackedSpread */ : 1 /* UnpackedSpread */;
+            // We don't need the `__read` helper for array literals. Array packing will be performed by `__spreadArray`.
+            if (compilerOptions.downlevelIteration && kind === 1 /* UnpackedSpread */ && !ts.isArrayLiteralExpression(expression) && !isCallToReadHelper) {
+                expression = emitHelpers().createReadHelper(expression, /*count*/ undefined);
+                // the `__read` helper returns a packed array, so we don't need to ensure a packed array
+                kind = 2 /* PackedSpread */;
+            }
+            return createSpreadSegment(kind, expression);
+        }
         function visitSpanOfNonSpreads(chunk, multiLine, hasTrailingComma) {
-            return factory.createArrayLiteralExpression(ts.visitNodes(factory.createNodeArray(chunk, hasTrailingComma), visitor, ts.isExpression), multiLine);
+            var expression = factory.createArrayLiteralExpression(ts.visitNodes(factory.createNodeArray(chunk, hasTrailingComma), visitor, ts.isExpression), multiLine);
+            // We do not pack non-spread segments, this is so that `[1, , ...[2, , 3], , 4]` is properly downleveled to
+            // `[1, , 2, undefined, 3, , 4]`. See the NOTE in `transformAndSpreadElements`
+            return createSpreadSegment(0 /* None */, expression);
         }
         function visitSpreadElement(node) {
             return ts.visitNode(node.expression, visitor, ts.isExpression);
         }
         /**
-         * Transforms the expression of a SpreadExpression node.
-         *
-         * @param node A SpreadExpression node.
-         */
-        function visitExpressionOfSpread(node) {
-            return ts.visitNode(node.expression, visitor, ts.isExpression);
-        }
-        /**
          * Visits a template literal.
          *
          * @param node A template literal.
@@ -95015,8 +97074,8 @@
                 : factory.createUniqueName("_super", 16 /* Optimistic */ | 32 /* FileLevel */);
         }
         function visitMetaProperty(node) {
-            if (node.keywordToken === 102 /* NewKeyword */ && node.name.escapedText === "target") {
-                hierarchyFacts |= 16384 /* NewTarget */;
+            if (node.keywordToken === 103 /* NewKeyword */ && node.name.escapedText === "target") {
+                hierarchyFacts |= 32768 /* NewTarget */;
                 return factory.createUniqueName("_newTarget", 16 /* Optimistic */ | 32 /* FileLevel */);
             }
             return node;
@@ -95031,7 +97090,7 @@
         function onEmitNode(hint, node, emitCallback) {
             if (enabledSubstitutions & 1 /* CapturedThis */ && ts.isFunctionLike(node)) {
                 // If we are tracking a captured `this`, keep track of the enclosing function.
-                var ancestorFacts = enterSubtree(16286 /* FunctionExcludes */, ts.getEmitFlags(node) & 8 /* CapturesThis */
+                var ancestorFacts = enterSubtree(32670 /* FunctionExcludes */, ts.getEmitFlags(node) & 8 /* CapturesThis */
                     ? 65 /* FunctionIncludes */ | 16 /* CapturesThis */
                     : 65 /* FunctionIncludes */);
                 previousOnEmitNode(hint, node, emitCallback);
@@ -95047,7 +97106,7 @@
         function enableSubstitutionsForBlockScopedBindings() {
             if ((enabledSubstitutions & 2 /* BlockScopedBindings */) === 0) {
                 enabledSubstitutions |= 2 /* BlockScopedBindings */;
-                context.enableSubstitution(78 /* Identifier */);
+                context.enableSubstitution(79 /* Identifier */);
             }
         }
         /**
@@ -95057,14 +97116,14 @@
         function enableSubstitutionsForCapturedThis() {
             if ((enabledSubstitutions & 1 /* CapturedThis */) === 0) {
                 enabledSubstitutions |= 1 /* CapturedThis */;
-                context.enableSubstitution(107 /* ThisKeyword */);
-                context.enableEmitNotification(167 /* Constructor */);
-                context.enableEmitNotification(166 /* MethodDeclaration */);
-                context.enableEmitNotification(168 /* GetAccessor */);
-                context.enableEmitNotification(169 /* SetAccessor */);
-                context.enableEmitNotification(210 /* ArrowFunction */);
-                context.enableEmitNotification(209 /* FunctionExpression */);
-                context.enableEmitNotification(252 /* FunctionDeclaration */);
+                context.enableSubstitution(108 /* ThisKeyword */);
+                context.enableEmitNotification(169 /* Constructor */);
+                context.enableEmitNotification(167 /* MethodDeclaration */);
+                context.enableEmitNotification(170 /* GetAccessor */);
+                context.enableEmitNotification(171 /* SetAccessor */);
+                context.enableEmitNotification(212 /* ArrowFunction */);
+                context.enableEmitNotification(211 /* FunctionExpression */);
+                context.enableEmitNotification(254 /* FunctionDeclaration */);
             }
         }
         /**
@@ -95105,10 +97164,10 @@
          */
         function isNameOfDeclarationWithCollidingName(node) {
             switch (node.parent.kind) {
-                case 199 /* BindingElement */:
-                case 253 /* ClassDeclaration */:
-                case 256 /* EnumDeclaration */:
-                case 250 /* VariableDeclaration */:
+                case 201 /* BindingElement */:
+                case 255 /* ClassDeclaration */:
+                case 258 /* EnumDeclaration */:
+                case 252 /* VariableDeclaration */:
                     return node.parent.name === node
                         && resolver.isDeclarationWithCollidingName(node.parent);
             }
@@ -95121,9 +97180,9 @@
          */
         function substituteExpression(node) {
             switch (node.kind) {
-                case 78 /* Identifier */:
+                case 79 /* Identifier */:
                     return substituteExpressionIdentifier(node);
-                case 107 /* ThisKeyword */:
+                case 108 /* ThisKeyword */:
                     return substituteThisKeyword(node);
             }
             return node;
@@ -95178,7 +97237,7 @@
             return node;
         }
         function getClassMemberPrefix(node, member) {
-            return ts.hasSyntacticModifier(member, 32 /* Static */)
+            return ts.isStatic(member)
                 ? factory.getInternalName(node)
                 : factory.createPropertyAccessExpression(factory.getInternalName(node), "prototype");
         }
@@ -95190,19 +97249,19 @@
                 return false;
             }
             var statement = ts.firstOrUndefined(constructor.body.statements);
-            if (!statement || !ts.nodeIsSynthesized(statement) || statement.kind !== 234 /* ExpressionStatement */) {
+            if (!statement || !ts.nodeIsSynthesized(statement) || statement.kind !== 236 /* ExpressionStatement */) {
                 return false;
             }
             var statementExpression = statement.expression;
-            if (!ts.nodeIsSynthesized(statementExpression) || statementExpression.kind !== 204 /* CallExpression */) {
+            if (!ts.nodeIsSynthesized(statementExpression) || statementExpression.kind !== 206 /* CallExpression */) {
                 return false;
             }
             var callTarget = statementExpression.expression;
-            if (!ts.nodeIsSynthesized(callTarget) || callTarget.kind !== 105 /* SuperKeyword */) {
+            if (!ts.nodeIsSynthesized(callTarget) || callTarget.kind !== 106 /* SuperKeyword */) {
                 return false;
             }
             var callArgument = ts.singleOrUndefined(statementExpression.arguments);
-            if (!callArgument || !ts.nodeIsSynthesized(callArgument) || callArgument.kind !== 221 /* SpreadElement */) {
+            if (!callArgument || !ts.nodeIsSynthesized(callArgument) || callArgument.kind !== 223 /* SpreadElement */) {
                 return false;
             }
             var expression = callArgument.expression;
@@ -95228,15 +97287,15 @@
         if (compilerOptions.jsx === 1 /* Preserve */ || compilerOptions.jsx === 3 /* ReactNative */) {
             previousOnEmitNode = context.onEmitNode;
             context.onEmitNode = onEmitNode;
-            context.enableEmitNotification(276 /* JsxOpeningElement */);
-            context.enableEmitNotification(277 /* JsxClosingElement */);
-            context.enableEmitNotification(275 /* JsxSelfClosingElement */);
+            context.enableEmitNotification(278 /* JsxOpeningElement */);
+            context.enableEmitNotification(279 /* JsxClosingElement */);
+            context.enableEmitNotification(277 /* JsxSelfClosingElement */);
             noSubstitution = [];
         }
         var previousOnSubstituteNode = context.onSubstituteNode;
         context.onSubstituteNode = onSubstituteNode;
-        context.enableSubstitution(202 /* PropertyAccessExpression */);
-        context.enableSubstitution(289 /* PropertyAssignment */);
+        context.enableSubstitution(204 /* PropertyAccessExpression */);
+        context.enableSubstitution(291 /* PropertyAssignment */);
         return ts.chainBundle(context, transformSourceFile);
         /**
          * Transforms an ES5 source file to ES3.
@@ -95255,9 +97314,9 @@
          */
         function onEmitNode(hint, node, emitCallback) {
             switch (node.kind) {
-                case 276 /* JsxOpeningElement */:
-                case 277 /* JsxClosingElement */:
-                case 275 /* JsxSelfClosingElement */:
+                case 278 /* JsxOpeningElement */:
+                case 279 /* JsxClosingElement */:
+                case 277 /* JsxSelfClosingElement */:
                     var tagName = node.tagName;
                     noSubstitution[ts.getOriginalNodeId(tagName)] = true;
                     break;
@@ -95317,7 +97376,7 @@
          */
         function trySubstituteReservedName(name) {
             var token = name.originalKeywordKind || (ts.nodeIsSynthesized(name) ? ts.stringToToken(ts.idText(name)) : undefined);
-            if (token !== undefined && token >= 80 /* FirstReservedWord */ && token <= 115 /* LastReservedWord */) {
+            if (token !== undefined && token >= 81 /* FirstReservedWord */ && token <= 116 /* LastReservedWord */) {
                 return ts.setTextRange(factory.createStringLiteralFromNode(name), name);
             }
             return undefined;
@@ -95592,13 +97651,13 @@
          */
         function visitJavaScriptInStatementContainingYield(node) {
             switch (node.kind) {
-                case 236 /* DoStatement */:
+                case 238 /* DoStatement */:
                     return visitDoStatement(node);
-                case 237 /* WhileStatement */:
+                case 239 /* WhileStatement */:
                     return visitWhileStatement(node);
-                case 245 /* SwitchStatement */:
+                case 247 /* SwitchStatement */:
                     return visitSwitchStatement(node);
-                case 246 /* LabeledStatement */:
+                case 248 /* LabeledStatement */:
                     return visitLabeledStatement(node);
                 default:
                     return visitJavaScriptInGeneratorFunctionBody(node);
@@ -95611,24 +97670,24 @@
          */
         function visitJavaScriptInGeneratorFunctionBody(node) {
             switch (node.kind) {
-                case 252 /* FunctionDeclaration */:
+                case 254 /* FunctionDeclaration */:
                     return visitFunctionDeclaration(node);
-                case 209 /* FunctionExpression */:
+                case 211 /* FunctionExpression */:
                     return visitFunctionExpression(node);
-                case 168 /* GetAccessor */:
-                case 169 /* SetAccessor */:
+                case 170 /* GetAccessor */:
+                case 171 /* SetAccessor */:
                     return visitAccessorDeclaration(node);
-                case 233 /* VariableStatement */:
+                case 235 /* VariableStatement */:
                     return visitVariableStatement(node);
-                case 238 /* ForStatement */:
+                case 240 /* ForStatement */:
                     return visitForStatement(node);
-                case 239 /* ForInStatement */:
+                case 241 /* ForInStatement */:
                     return visitForInStatement(node);
-                case 242 /* BreakStatement */:
+                case 244 /* BreakStatement */:
                     return visitBreakStatement(node);
-                case 241 /* ContinueStatement */:
+                case 243 /* ContinueStatement */:
                     return visitContinueStatement(node);
-                case 243 /* ReturnStatement */:
+                case 245 /* ReturnStatement */:
                     return visitReturnStatement(node);
                 default:
                     if (node.transformFlags & 524288 /* ContainsYield */) {
@@ -95649,23 +97708,23 @@
          */
         function visitJavaScriptContainingYield(node) {
             switch (node.kind) {
-                case 217 /* BinaryExpression */:
+                case 219 /* BinaryExpression */:
                     return visitBinaryExpression(node);
-                case 341 /* CommaListExpression */:
+                case 346 /* CommaListExpression */:
                     return visitCommaListExpression(node);
-                case 218 /* ConditionalExpression */:
+                case 220 /* ConditionalExpression */:
                     return visitConditionalExpression(node);
-                case 220 /* YieldExpression */:
+                case 222 /* YieldExpression */:
                     return visitYieldExpression(node);
-                case 200 /* ArrayLiteralExpression */:
+                case 202 /* ArrayLiteralExpression */:
                     return visitArrayLiteralExpression(node);
-                case 201 /* ObjectLiteralExpression */:
+                case 203 /* ObjectLiteralExpression */:
                     return visitObjectLiteralExpression(node);
-                case 203 /* ElementAccessExpression */:
+                case 205 /* ElementAccessExpression */:
                     return visitElementAccessExpression(node);
-                case 204 /* CallExpression */:
+                case 206 /* CallExpression */:
                     return visitCallExpression(node);
-                case 205 /* NewExpression */:
+                case 207 /* NewExpression */:
                     return visitNewExpression(node);
                 default:
                     return ts.visitEachChild(node, visitor, context);
@@ -95678,9 +97737,9 @@
          */
         function visitGenerator(node) {
             switch (node.kind) {
-                case 252 /* FunctionDeclaration */:
+                case 254 /* FunctionDeclaration */:
                     return visitFunctionDeclaration(node);
-                case 209 /* FunctionExpression */:
+                case 211 /* FunctionExpression */:
                     return visitFunctionExpression(node);
                 default:
                     return ts.Debug.failBadSyntaxKind(node);
@@ -95888,7 +97947,7 @@
             if (containsYield(right)) {
                 var target = void 0;
                 switch (left.kind) {
-                    case 202 /* PropertyAccessExpression */:
+                    case 204 /* PropertyAccessExpression */:
                         // [source]
                         //      a.b = yield;
                         //
@@ -95900,7 +97959,7 @@
                         //      _a.b = %sent%;
                         target = factory.updatePropertyAccessExpression(left, cacheExpression(ts.visitNode(left.expression, visitor, ts.isLeftHandSideExpression)), left.name);
                         break;
-                    case 203 /* ElementAccessExpression */:
+                    case 205 /* ElementAccessExpression */:
                         // [source]
                         //      a[b] = yield;
                         //
@@ -96147,13 +98206,13 @@
                 temp = declareLocal();
                 var initialElements = ts.visitNodes(elements, visitor, ts.isExpression, 0, numInitialElements);
                 emitAssignment(temp, factory.createArrayLiteralExpression(leadingElement
-                    ? __spreadArray([leadingElement], initialElements) : initialElements));
+                    ? __spreadArray([leadingElement], initialElements, true) : initialElements));
                 leadingElement = undefined;
             }
             var expressions = ts.reduceLeft(elements, reduceElement, [], numInitialElements);
             return temp
                 ? factory.createArrayConcatCall(temp, [factory.createArrayLiteralExpression(expressions, multiLine)])
-                : ts.setTextRange(factory.createArrayLiteralExpression(leadingElement ? __spreadArray([leadingElement], expressions) : expressions, multiLine), location);
+                : ts.setTextRange(factory.createArrayLiteralExpression(leadingElement ? __spreadArray([leadingElement], expressions, true) : expressions, multiLine), location);
             function reduceElement(expressions, element) {
                 if (containsYield(element) && expressions.length > 0) {
                     var hasAssignedTemp = temp !== undefined;
@@ -96162,7 +98221,7 @@
                     }
                     emitAssignment(temp, hasAssignedTemp
                         ? factory.createArrayConcatCall(temp, [factory.createArrayLiteralExpression(expressions, multiLine)])
-                        : factory.createArrayLiteralExpression(leadingElement ? __spreadArray([leadingElement], expressions) : expressions, multiLine));
+                        : factory.createArrayLiteralExpression(leadingElement ? __spreadArray([leadingElement], expressions, true) : expressions, multiLine));
                     leadingElement = undefined;
                     expressions = [];
                 }
@@ -96294,35 +98353,35 @@
         }
         function transformAndEmitStatementWorker(node) {
             switch (node.kind) {
-                case 231 /* Block */:
+                case 233 /* Block */:
                     return transformAndEmitBlock(node);
-                case 234 /* ExpressionStatement */:
+                case 236 /* ExpressionStatement */:
                     return transformAndEmitExpressionStatement(node);
-                case 235 /* IfStatement */:
+                case 237 /* IfStatement */:
                     return transformAndEmitIfStatement(node);
-                case 236 /* DoStatement */:
+                case 238 /* DoStatement */:
                     return transformAndEmitDoStatement(node);
-                case 237 /* WhileStatement */:
+                case 239 /* WhileStatement */:
                     return transformAndEmitWhileStatement(node);
-                case 238 /* ForStatement */:
+                case 240 /* ForStatement */:
                     return transformAndEmitForStatement(node);
-                case 239 /* ForInStatement */:
+                case 241 /* ForInStatement */:
                     return transformAndEmitForInStatement(node);
-                case 241 /* ContinueStatement */:
+                case 243 /* ContinueStatement */:
                     return transformAndEmitContinueStatement(node);
-                case 242 /* BreakStatement */:
+                case 244 /* BreakStatement */:
                     return transformAndEmitBreakStatement(node);
-                case 243 /* ReturnStatement */:
+                case 245 /* ReturnStatement */:
                     return transformAndEmitReturnStatement(node);
-                case 244 /* WithStatement */:
+                case 246 /* WithStatement */:
                     return transformAndEmitWithStatement(node);
-                case 245 /* SwitchStatement */:
+                case 247 /* SwitchStatement */:
                     return transformAndEmitSwitchStatement(node);
-                case 246 /* LabeledStatement */:
+                case 248 /* LabeledStatement */:
                     return transformAndEmitLabeledStatement(node);
-                case 247 /* ThrowStatement */:
+                case 249 /* ThrowStatement */:
                     return transformAndEmitThrowStatement(node);
-                case 248 /* TryStatement */:
+                case 250 /* TryStatement */:
                     return transformAndEmitTryStatement(node);
                 default:
                     return emitStatement(ts.visitNode(node, visitor, ts.isStatement));
@@ -96752,7 +98811,7 @@
                 for (var i = 0; i < numClauses; i++) {
                     var clause = caseBlock.clauses[i];
                     clauseLabels.push(defineLabel());
-                    if (clause.kind === 286 /* DefaultClause */ && defaultClauseIndex === -1) {
+                    if (clause.kind === 288 /* DefaultClause */ && defaultClauseIndex === -1) {
                         defaultClauseIndex = i;
                     }
                 }
@@ -96765,7 +98824,7 @@
                     var defaultClausesSkipped = 0;
                     for (var i = clausesWritten; i < numClauses; i++) {
                         var clause = caseBlock.clauses[i];
-                        if (clause.kind === 285 /* CaseClause */) {
+                        if (clause.kind === 287 /* CaseClause */) {
                             if (containsYield(clause.expression) && pendingClauses.length > 0) {
                                 break;
                             }
@@ -97079,7 +99138,7 @@
                 if (!renamedCatchVariables) {
                     renamedCatchVariables = new ts.Map();
                     renamedCatchVariableDeclarations = [];
-                    context.enableSubstitution(78 /* Identifier */);
+                    context.enableSubstitution(79 /* Identifier */);
                 }
                 renamedCatchVariables.set(text, true);
                 renamedCatchVariableDeclarations[ts.getOriginalNodeId(variable)] = name;
@@ -97925,17 +99984,17 @@
         var previousOnEmitNode = context.onEmitNode;
         context.onSubstituteNode = onSubstituteNode;
         context.onEmitNode = onEmitNode;
-        context.enableSubstitution(78 /* Identifier */); // Substitutes expression identifiers with imported/exported symbols.
-        context.enableSubstitution(217 /* BinaryExpression */); // Substitutes assignments to exported symbols.
-        context.enableSubstitution(215 /* PrefixUnaryExpression */); // Substitutes updates to exported symbols.
-        context.enableSubstitution(216 /* PostfixUnaryExpression */); // Substitutes updates to exported symbols.
-        context.enableSubstitution(290 /* ShorthandPropertyAssignment */); // Substitutes shorthand property assignments for imported/exported symbols.
-        context.enableEmitNotification(298 /* SourceFile */); // Restore state when substituting nodes in a file.
+        context.enableSubstitution(206 /* CallExpression */); // Substitute calls to imported/exported symbols to avoid incorrect `this`.
+        context.enableSubstitution(208 /* TaggedTemplateExpression */); // Substitute calls to imported/exported symbols to avoid incorrect `this`.
+        context.enableSubstitution(79 /* Identifier */); // Substitutes expression identifiers with imported/exported symbols.
+        context.enableSubstitution(219 /* BinaryExpression */); // Substitutes assignments to exported symbols.
+        context.enableSubstitution(292 /* ShorthandPropertyAssignment */); // Substitutes shorthand property assignments for imported/exported symbols.
+        context.enableEmitNotification(300 /* SourceFile */); // Restore state when substituting nodes in a file.
         var moduleInfoMap = []; // The ExternalModuleInfo for each file.
         var deferredExports = []; // Exports to defer until an EndOfDeclarationMarker is found.
         var currentSourceFile; // The current file.
         var currentModuleInfo; // The ExternalModuleInfo for the current file.
-        var noSubstitution; // Set of nodes for which substitution rules should be ignored.
+        var noSubstitution = []; // Set of nodes for which substitution rules should be ignored.
         var needUMDDynamicImportHelper;
         return ts.chainBundle(context, transformSourceFile);
         /**
@@ -97976,7 +100035,7 @@
             startLexicalEnvironment();
             var statements = [];
             var ensureUseStrict = ts.getStrictOptionValue(compilerOptions, "alwaysStrict") || (!compilerOptions.noImplicitUseStrict && ts.isExternalModule(currentSourceFile));
-            var statementOffset = factory.copyPrologue(node.statements, statements, ensureUseStrict && !ts.isJsonSourceFile(node), sourceElementVisitor);
+            var statementOffset = factory.copyPrologue(node.statements, statements, ensureUseStrict && !ts.isJsonSourceFile(node), topLevelVisitor);
             if (shouldEmitUnderscoreUnderscoreESModule()) {
                 ts.append(statements, createUnderscoreUnderscoreESModule());
             }
@@ -97986,8 +100045,8 @@
                     ts.append(statements, factory.createExpressionStatement(ts.reduceLeft(currentModuleInfo.exportedNames.slice(i, i + chunkSize), function (prev, nextId) { return factory.createAssignment(factory.createPropertyAccessExpression(factory.createIdentifier("exports"), factory.createIdentifier(ts.idText(nextId))), prev); }, factory.createVoidZero())));
                 }
             }
-            ts.append(statements, ts.visitNode(currentModuleInfo.externalHelpersImportDeclaration, sourceElementVisitor, ts.isStatement));
-            ts.addRange(statements, ts.visitNodes(node.statements, sourceElementVisitor, ts.isStatement, statementOffset));
+            ts.append(statements, ts.visitNode(currentModuleInfo.externalHelpersImportDeclaration, topLevelVisitor, ts.isStatement));
+            ts.addRange(statements, ts.visitNodes(node.statements, topLevelVisitor, ts.isStatement, statementOffset));
             addExportEqualsIfNeeded(statements, /*emitAsReturn*/ false);
             ts.insertStatementsAfterStandardPrologue(statements, endLexicalEnvironment());
             var updated = factory.updateSourceFile(node, ts.setTextRange(factory.createNodeArray(statements), node.statements));
@@ -98029,14 +100088,14 @@
             //     define(mofactory.updateSourceFile", "module2"], function ...
             var updated = factory.updateSourceFile(node, ts.setTextRange(factory.createNodeArray([
                 factory.createExpressionStatement(factory.createCallExpression(define, 
-                /*typeArguments*/ undefined, __spreadArray(__spreadArray([], (moduleName ? [moduleName] : [])), [
+                /*typeArguments*/ undefined, __spreadArray(__spreadArray([], (moduleName ? [moduleName] : []), true), [
                     // Add the dependency array argument:
                     //
                     //     ["require", "exports", module1", "module2", ...]
                     factory.createArrayLiteralExpression(jsonSourceFile ? ts.emptyArray : __spreadArray(__spreadArray([
                         factory.createStringLiteral("require"),
                         factory.createStringLiteral("exports")
-                    ], aliasedModuleNames), unaliasedModuleNames)),
+                    ], aliasedModuleNames, true), unaliasedModuleNames, true)),
                     // Add the module body function argument:
                     //
                     //     function (require, exports, module1, module2) ...
@@ -98049,9 +100108,9 @@
                         /*typeParameters*/ undefined, __spreadArray([
                             factory.createParameterDeclaration(/*decorators*/ undefined, /*modifiers*/ undefined, /*dotDotDotToken*/ undefined, "require"),
                             factory.createParameterDeclaration(/*decorators*/ undefined, /*modifiers*/ undefined, /*dotDotDotToken*/ undefined, "exports")
-                        ], importAliasNames), 
+                        ], importAliasNames, true), 
                         /*type*/ undefined, transformAsynchronousModuleBody(node))
-                ])))
+                ], false)))
             ]), 
             /*location*/ node.statements));
             ts.addEmitHelpers(updated, context.readEmitHelpers());
@@ -98085,13 +100144,13 @@
                     ts.setEmitFlags(factory.createIfStatement(factory.createStrictInequality(factory.createIdentifier("v"), factory.createIdentifier("undefined")), factory.createExpressionStatement(factory.createAssignment(factory.createPropertyAccessExpression(factory.createIdentifier("module"), "exports"), factory.createIdentifier("v")))), 1 /* SingleLine */)
                 ]), factory.createIfStatement(factory.createLogicalAnd(factory.createTypeCheck(factory.createIdentifier("define"), "function"), factory.createPropertyAccessExpression(factory.createIdentifier("define"), "amd")), factory.createBlock([
                     factory.createExpressionStatement(factory.createCallExpression(factory.createIdentifier("define"), 
-                    /*typeArguments*/ undefined, __spreadArray(__spreadArray([], (moduleName ? [moduleName] : [])), [
+                    /*typeArguments*/ undefined, __spreadArray(__spreadArray([], (moduleName ? [moduleName] : []), true), [
                         factory.createArrayLiteralExpression(__spreadArray(__spreadArray([
                             factory.createStringLiteral("require"),
                             factory.createStringLiteral("exports")
-                        ], aliasedModuleNames), unaliasedModuleNames)),
+                        ], aliasedModuleNames, true), unaliasedModuleNames, true)),
                         factory.createIdentifier("factory")
-                    ])))
+                    ], false)))
                 ])))
             ], 
             /*multiLine*/ true), 
@@ -98120,7 +100179,7 @@
                     /*typeParameters*/ undefined, __spreadArray([
                         factory.createParameterDeclaration(/*decorators*/ undefined, /*modifiers*/ undefined, /*dotDotDotToken*/ undefined, "require"),
                         factory.createParameterDeclaration(/*decorators*/ undefined, /*modifiers*/ undefined, /*dotDotDotToken*/ undefined, "exports")
-                    ], importAliasNames), 
+                    ], importAliasNames, true), 
                     /*type*/ undefined, transformAsynchronousModuleBody(node))
                 ]))
             ]), 
@@ -98197,7 +100256,7 @@
         function transformAsynchronousModuleBody(node) {
             startLexicalEnvironment();
             var statements = [];
-            var statementOffset = factory.copyPrologue(node.statements, statements, /*ensureUseStrict*/ !compilerOptions.noImplicitUseStrict, sourceElementVisitor);
+            var statementOffset = factory.copyPrologue(node.statements, statements, /*ensureUseStrict*/ !compilerOptions.noImplicitUseStrict, topLevelVisitor);
             if (shouldEmitUnderscoreUnderscoreESModule()) {
                 ts.append(statements, createUnderscoreUnderscoreESModule());
             }
@@ -98205,11 +100264,11 @@
                 ts.append(statements, factory.createExpressionStatement(ts.reduceLeft(currentModuleInfo.exportedNames, function (prev, nextId) { return factory.createAssignment(factory.createPropertyAccessExpression(factory.createIdentifier("exports"), factory.createIdentifier(ts.idText(nextId))), prev); }, factory.createVoidZero())));
             }
             // Visit each statement of the module body.
-            ts.append(statements, ts.visitNode(currentModuleInfo.externalHelpersImportDeclaration, sourceElementVisitor, ts.isStatement));
+            ts.append(statements, ts.visitNode(currentModuleInfo.externalHelpersImportDeclaration, topLevelVisitor, ts.isStatement));
             if (moduleKind === ts.ModuleKind.AMD) {
                 ts.addRange(statements, ts.mapDefined(currentModuleInfo.externalImports, getAMDImportExpressionForImport));
             }
-            ts.addRange(statements, ts.visitNodes(node.statements, sourceElementVisitor, ts.isStatement, statementOffset));
+            ts.addRange(statements, ts.visitNodes(node.statements, topLevelVisitor, ts.isStatement, statementOffset));
             // Append the 'export =' statement if provided.
             addExportEqualsIfNeeded(statements, /*emitAsReturn*/ true);
             // End the lexical environment for the module body
@@ -98231,7 +100290,7 @@
          */
         function addExportEqualsIfNeeded(statements, emitAsReturn) {
             if (currentModuleInfo.exportEquals) {
-                var expressionResult = ts.visitNode(currentModuleInfo.exportEquals.expression, moduleExpressionElementVisitor);
+                var expressionResult = ts.visitNode(currentModuleInfo.exportEquals.expression, visitor);
                 if (expressionResult) {
                     if (emitAsReturn) {
                         var statement = factory.createReturnStatement(expressionResult);
@@ -98256,69 +100315,90 @@
          *
          * @param node The node to visit.
          */
-        function sourceElementVisitor(node) {
+        function topLevelVisitor(node) {
             switch (node.kind) {
-                case 262 /* ImportDeclaration */:
+                case 264 /* ImportDeclaration */:
                     return visitImportDeclaration(node);
-                case 261 /* ImportEqualsDeclaration */:
+                case 263 /* ImportEqualsDeclaration */:
                     return visitImportEqualsDeclaration(node);
-                case 268 /* ExportDeclaration */:
+                case 270 /* ExportDeclaration */:
                     return visitExportDeclaration(node);
-                case 267 /* ExportAssignment */:
+                case 269 /* ExportAssignment */:
                     return visitExportAssignment(node);
-                case 233 /* VariableStatement */:
+                case 235 /* VariableStatement */:
                     return visitVariableStatement(node);
-                case 252 /* FunctionDeclaration */:
+                case 254 /* FunctionDeclaration */:
                     return visitFunctionDeclaration(node);
-                case 253 /* ClassDeclaration */:
+                case 255 /* ClassDeclaration */:
                     return visitClassDeclaration(node);
-                case 342 /* MergeDeclarationMarker */:
+                case 347 /* MergeDeclarationMarker */:
                     return visitMergeDeclarationMarker(node);
-                case 343 /* EndOfDeclarationMarker */:
+                case 348 /* EndOfDeclarationMarker */:
                     return visitEndOfDeclarationMarker(node);
                 default:
-                    return ts.visitEachChild(node, moduleExpressionElementVisitor, context);
+                    return visitor(node);
             }
         }
-        function moduleExpressionElementVisitor(node) {
-            // This visitor does not need to descend into the tree if there is no dynamic import or destructuring assignment,
+        function visitorWorker(node, valueIsDiscarded) {
+            // This visitor does not need to descend into the tree if there is no dynamic import, destructuring assignment, or update expression
             // as export/import statements are only transformed at the top level of a file.
-            if (!(node.transformFlags & 4194304 /* ContainsDynamicImport */) && !(node.transformFlags & 2048 /* ContainsDestructuringAssignment */)) {
+            if (!(node.transformFlags & (4194304 /* ContainsDynamicImport */ | 2048 /* ContainsDestructuringAssignment */ | 67108864 /* ContainsUpdateExpressionForIdentifier */))) {
                 return node;
             }
-            if (ts.isImportCall(node)) {
-                return visitImportCallExpression(node);
+            switch (node.kind) {
+                case 240 /* ForStatement */:
+                    return visitForStatement(node);
+                case 236 /* ExpressionStatement */:
+                    return visitExpressionStatement(node);
+                case 210 /* ParenthesizedExpression */:
+                    return visitParenthesizedExpression(node, valueIsDiscarded);
+                case 345 /* PartiallyEmittedExpression */:
+                    return visitPartiallyEmittedExpression(node, valueIsDiscarded);
+                case 206 /* CallExpression */:
+                    if (ts.isImportCall(node)) {
+                        return visitImportCallExpression(node);
+                    }
+                    break;
+                case 219 /* BinaryExpression */:
+                    if (ts.isDestructuringAssignment(node)) {
+                        return visitDestructuringAssignment(node, valueIsDiscarded);
+                    }
+                    break;
+                case 217 /* PrefixUnaryExpression */:
+                case 218 /* PostfixUnaryExpression */:
+                    return visitPreOrPostfixUnaryExpression(node, valueIsDiscarded);
             }
-            else if (ts.isDestructuringAssignment(node)) {
-                return visitDestructuringAssignment(node);
-            }
-            else {
-                return ts.visitEachChild(node, moduleExpressionElementVisitor, context);
-            }
+            return ts.visitEachChild(node, visitor, context);
+        }
+        function visitor(node) {
+            return visitorWorker(node, /*valueIsDiscarded*/ false);
+        }
+        function discardedValueVisitor(node) {
+            return visitorWorker(node, /*valueIsDiscarded*/ true);
         }
         function destructuringNeedsFlattening(node) {
             if (ts.isObjectLiteralExpression(node)) {
                 for (var _i = 0, _a = node.properties; _i < _a.length; _i++) {
                     var elem = _a[_i];
                     switch (elem.kind) {
-                        case 289 /* PropertyAssignment */:
+                        case 291 /* PropertyAssignment */:
                             if (destructuringNeedsFlattening(elem.initializer)) {
                                 return true;
                             }
                             break;
-                        case 290 /* ShorthandPropertyAssignment */:
+                        case 292 /* ShorthandPropertyAssignment */:
                             if (destructuringNeedsFlattening(elem.name)) {
                                 return true;
                             }
                             break;
-                        case 291 /* SpreadAssignment */:
+                        case 293 /* SpreadAssignment */:
                             if (destructuringNeedsFlattening(elem.expression)) {
                                 return true;
                             }
                             break;
-                        case 166 /* MethodDeclaration */:
-                        case 168 /* GetAccessor */:
-                        case 169 /* SetAccessor */:
+                        case 167 /* MethodDeclaration */:
+                        case 170 /* GetAccessor */:
+                        case 171 /* SetAccessor */:
                             return false;
                         default: ts.Debug.assertNever(elem, "Unhandled object member kind");
                     }
@@ -98342,15 +100422,75 @@
             }
             return false;
         }
-        function visitDestructuringAssignment(node) {
+        function visitDestructuringAssignment(node, valueIsDiscarded) {
             if (destructuringNeedsFlattening(node.left)) {
-                return ts.flattenDestructuringAssignment(node, moduleExpressionElementVisitor, context, 0 /* All */, /*needsValue*/ false, createAllExportExpressions);
+                return ts.flattenDestructuringAssignment(node, visitor, context, 0 /* All */, !valueIsDiscarded, createAllExportExpressions);
             }
-            return ts.visitEachChild(node, moduleExpressionElementVisitor, context);
+            return ts.visitEachChild(node, visitor, context);
+        }
+        function visitForStatement(node) {
+            return factory.updateForStatement(node, ts.visitNode(node.initializer, discardedValueVisitor, ts.isForInitializer), ts.visitNode(node.condition, visitor, ts.isExpression), ts.visitNode(node.incrementor, discardedValueVisitor, ts.isExpression), ts.visitIterationBody(node.statement, visitor, context));
+        }
+        function visitExpressionStatement(node) {
+            return factory.updateExpressionStatement(node, ts.visitNode(node.expression, discardedValueVisitor, ts.isExpression));
+        }
+        function visitParenthesizedExpression(node, valueIsDiscarded) {
+            return factory.updateParenthesizedExpression(node, ts.visitNode(node.expression, valueIsDiscarded ? discardedValueVisitor : visitor, ts.isExpression));
+        }
+        function visitPartiallyEmittedExpression(node, valueIsDiscarded) {
+            return factory.updatePartiallyEmittedExpression(node, ts.visitNode(node.expression, valueIsDiscarded ? discardedValueVisitor : visitor, ts.isExpression));
+        }
+        function visitPreOrPostfixUnaryExpression(node, valueIsDiscarded) {
+            // When we see a prefix or postfix increment expression whose operand is an exported
+            // symbol, we should ensure all exports of that symbol are updated with the correct
+            // value.
+            //
+            // - We do not transform generated identifiers for any reason.
+            // - We do not transform identifiers tagged with the LocalName flag.
+            // - We do not transform identifiers that were originally the name of an enum or
+            //   namespace due to how they are transformed in TypeScript.
+            // - We only transform identifiers that are exported at the top level.
+            if ((node.operator === 45 /* PlusPlusToken */ || node.operator === 46 /* MinusMinusToken */)
+                && ts.isIdentifier(node.operand)
+                && !ts.isGeneratedIdentifier(node.operand)
+                && !ts.isLocalName(node.operand)
+                && !ts.isDeclarationNameOfEnumOrNamespace(node.operand)) {
+                var exportedNames = getExports(node.operand);
+                if (exportedNames) {
+                    var temp = void 0;
+                    var expression = ts.visitNode(node.operand, visitor, ts.isExpression);
+                    if (ts.isPrefixUnaryExpression(node)) {
+                        expression = factory.updatePrefixUnaryExpression(node, expression);
+                    }
+                    else {
+                        expression = factory.updatePostfixUnaryExpression(node, expression);
+                        if (!valueIsDiscarded) {
+                            temp = factory.createTempVariable(hoistVariableDeclaration);
+                            expression = factory.createAssignment(temp, expression);
+                            ts.setTextRange(expression, node);
+                        }
+                        expression = factory.createComma(expression, factory.cloneNode(node.operand));
+                        ts.setTextRange(expression, node);
+                    }
+                    for (var _i = 0, exportedNames_1 = exportedNames; _i < exportedNames_1.length; _i++) {
+                        var exportName = exportedNames_1[_i];
+                        noSubstitution[ts.getNodeId(expression)] = true;
+                        expression = createExportExpression(exportName, expression);
+                        ts.setTextRange(expression, node);
+                    }
+                    if (temp) {
+                        noSubstitution[ts.getNodeId(expression)] = true;
+                        expression = factory.createComma(expression, temp);
+                        ts.setTextRange(expression, node);
+                    }
+                    return expression;
+                }
+            }
+            return ts.visitEachChild(node, visitor, context);
         }
         function visitImportCallExpression(node) {
             var externalModuleName = ts.getExternalModuleNameLiteral(factory, node, currentSourceFile, host, resolver, compilerOptions);
-            var firstArgument = ts.visitNode(ts.firstOrUndefined(node.arguments), moduleExpressionElementVisitor);
+            var firstArgument = ts.visitNode(ts.firstOrUndefined(node.arguments), visitor);
             // Only use the external module name if it differs from the first argument. This allows us to preserve the quote style of the argument on output.
             var argument = externalModuleName && (!firstArgument || !ts.isStringLiteral(firstArgument) || firstArgument.text !== externalModuleName.text) ? externalModuleName : firstArgument;
             var containsLexicalThis = !!(node.transformFlags & 8192 /* ContainsLexicalThis */);
@@ -98682,10 +100822,10 @@
             if (original && hasAssociatedEndOfDeclarationMarker(original)) {
                 // Defer exports until we encounter an EndOfDeclarationMarker node
                 var id = ts.getOriginalNodeId(node);
-                deferredExports[id] = appendExportStatement(deferredExports[id], factory.createIdentifier("default"), ts.visitNode(node.expression, moduleExpressionElementVisitor), /*location*/ node, /*allowComments*/ true);
+                deferredExports[id] = appendExportStatement(deferredExports[id], factory.createIdentifier("default"), ts.visitNode(node.expression, visitor), /*location*/ node, /*allowComments*/ true);
             }
             else {
-                statements = appendExportStatement(statements, factory.createIdentifier("default"), ts.visitNode(node.expression, moduleExpressionElementVisitor), /*location*/ node, /*allowComments*/ true);
+                statements = appendExportStatement(statements, factory.createIdentifier("default"), ts.visitNode(node.expression, visitor), /*location*/ node, /*allowComments*/ true);
             }
             return ts.singleOrMany(statements);
         }
@@ -98699,13 +100839,13 @@
             if (ts.hasSyntacticModifier(node, 1 /* Export */)) {
                 statements = ts.append(statements, ts.setOriginalNode(ts.setTextRange(factory.createFunctionDeclaration(
                 /*decorators*/ undefined, ts.visitNodes(node.modifiers, modifierVisitor, ts.isModifier), node.asteriskToken, factory.getDeclarationName(node, /*allowComments*/ true, /*allowSourceMaps*/ true), 
-                /*typeParameters*/ undefined, ts.visitNodes(node.parameters, moduleExpressionElementVisitor), 
-                /*type*/ undefined, ts.visitEachChild(node.body, moduleExpressionElementVisitor, context)), 
+                /*typeParameters*/ undefined, ts.visitNodes(node.parameters, visitor), 
+                /*type*/ undefined, ts.visitEachChild(node.body, visitor, context)), 
                 /*location*/ node), 
                 /*original*/ node));
             }
             else {
-                statements = ts.append(statements, ts.visitEachChild(node, moduleExpressionElementVisitor, context));
+                statements = ts.append(statements, ts.visitEachChild(node, visitor, context));
             }
             if (hasAssociatedEndOfDeclarationMarker(node)) {
                 // Defer exports until we encounter an EndOfDeclarationMarker node
@@ -98727,10 +100867,10 @@
             if (ts.hasSyntacticModifier(node, 1 /* Export */)) {
                 statements = ts.append(statements, ts.setOriginalNode(ts.setTextRange(factory.createClassDeclaration(
                 /*decorators*/ undefined, ts.visitNodes(node.modifiers, modifierVisitor, ts.isModifier), factory.getDeclarationName(node, /*allowComments*/ true, /*allowSourceMaps*/ true), 
-                /*typeParameters*/ undefined, ts.visitNodes(node.heritageClauses, moduleExpressionElementVisitor), ts.visitNodes(node.members, moduleExpressionElementVisitor)), node), node));
+                /*typeParameters*/ undefined, ts.visitNodes(node.heritageClauses, visitor), ts.visitNodes(node.members, visitor)), node), node));
             }
             else {
-                statements = ts.append(statements, ts.visitEachChild(node, moduleExpressionElementVisitor, context));
+                statements = ts.append(statements, ts.visitEachChild(node, visitor, context));
             }
             if (hasAssociatedEndOfDeclarationMarker(node)) {
                 // Defer exports until we encounter an EndOfDeclarationMarker node
@@ -98767,7 +100907,7 @@
                         if (!ts.isBindingPattern(variable.name) && (ts.isArrowFunction(variable.initializer) || ts.isFunctionExpression(variable.initializer) || ts.isClassExpression(variable.initializer))) {
                             var expression = factory.createAssignment(ts.setTextRange(factory.createPropertyAccessExpression(factory.createIdentifier("exports"), variable.name), 
                             /*location*/ variable.name), factory.createIdentifier(ts.getTextOfIdentifierOrLiteral(variable.name)));
-                            var updatedVariable = factory.createVariableDeclaration(variable.name, variable.exclamationToken, variable.type, ts.visitNode(variable.initializer, moduleExpressionElementVisitor));
+                            var updatedVariable = factory.createVariableDeclaration(variable.name, variable.exclamationToken, variable.type, ts.visitNode(variable.initializer, visitor));
                             variables = ts.append(variables, updatedVariable);
                             expressions = ts.append(expressions, expression);
                             removeCommentsOnExpressions = true;
@@ -98789,7 +100929,7 @@
                 }
             }
             else {
-                statements = ts.append(statements, ts.visitEachChild(node, moduleExpressionElementVisitor, context));
+                statements = ts.append(statements, ts.visitEachChild(node, visitor, context));
             }
             if (hasAssociatedEndOfDeclarationMarker(node)) {
                 // Defer exports until we encounter an EndOfDeclarationMarker node
@@ -98806,8 +100946,8 @@
             if (exportedNames) {
                 // For each additional export of the declaration, apply an export assignment.
                 var expression = ts.isExportName(name) ? value : factory.createAssignment(name, value);
-                for (var _i = 0, exportedNames_1 = exportedNames; _i < exportedNames_1.length; _i++) {
-                    var exportName = exportedNames_1[_i];
+                for (var _i = 0, exportedNames_2 = exportedNames; _i < exportedNames_2.length; _i++) {
+                    var exportName = exportedNames_2[_i];
                     // Mark the node to prevent triggering substitution.
                     ts.setEmitFlags(expression, 4 /* NoSubstitution */);
                     expression = createExportExpression(exportName, expression, /*location*/ location);
@@ -98823,13 +100963,13 @@
          */
         function transformInitializedVariable(node) {
             if (ts.isBindingPattern(node.name)) {
-                return ts.flattenDestructuringAssignment(ts.visitNode(node, moduleExpressionElementVisitor), 
+                return ts.flattenDestructuringAssignment(ts.visitNode(node, visitor), 
                 /*visitor*/ undefined, context, 0 /* All */, 
                 /*needsValue*/ false, createAllExportExpressions);
             }
             else {
                 return factory.createAssignment(ts.setTextRange(factory.createPropertyAccessExpression(factory.createIdentifier("exports"), node.name), 
-                /*location*/ node.name), node.initializer ? ts.visitNode(node.initializer, moduleExpressionElementVisitor) : factory.createVoidZero());
+                /*location*/ node.name), node.initializer ? ts.visitNode(node.initializer, visitor) : factory.createVoidZero());
             }
         }
         /**
@@ -98846,7 +100986,7 @@
             //
             // To balance the declaration, add the exports of the elided variable
             // statement.
-            if (hasAssociatedEndOfDeclarationMarker(node) && node.original.kind === 233 /* VariableStatement */) {
+            if (hasAssociatedEndOfDeclarationMarker(node) && node.original.kind === 235 /* VariableStatement */) {
                 var id = ts.getOriginalNodeId(node);
                 deferredExports[id] = appendExportsOfVariableStatement(deferredExports[id], node.original);
             }
@@ -98901,10 +101041,10 @@
             var namedBindings = importClause.namedBindings;
             if (namedBindings) {
                 switch (namedBindings.kind) {
-                    case 264 /* NamespaceImport */:
+                    case 266 /* NamespaceImport */:
                         statements = appendExportsOfDeclaration(statements, namedBindings);
                         break;
-                    case 265 /* NamedImports */:
+                    case 267 /* NamedImports */:
                         for (var _i = 0, _a = namedBindings.elements; _i < _a.length; _i++) {
                             var importBinding = _a[_i];
                             statements = appendExportsOfDeclaration(statements, importBinding, /* liveBinding */ true);
@@ -99100,8 +101240,8 @@
         function modifierVisitor(node) {
             // Elide module-specific modifiers.
             switch (node.kind) {
-                case 92 /* ExportKeyword */:
-                case 87 /* DefaultKeyword */:
+                case 93 /* ExportKeyword */:
+                case 88 /* DefaultKeyword */:
                     return undefined;
             }
             return node;
@@ -99117,14 +101257,12 @@
          * @param emit A callback used to emit the node in the printer.
          */
         function onEmitNode(hint, node, emitCallback) {
-            if (node.kind === 298 /* SourceFile */) {
+            if (node.kind === 300 /* SourceFile */) {
                 currentSourceFile = node;
                 currentModuleInfo = moduleInfoMap[ts.getOriginalNodeId(currentSourceFile)];
-                noSubstitution = [];
                 previousOnEmitNode(hint, node, emitCallback);
                 currentSourceFile = undefined;
                 currentModuleInfo = undefined;
-                noSubstitution = undefined;
             }
             else {
                 previousOnEmitNode(hint, node, emitCallback);
@@ -99179,13 +101317,36 @@
          */
         function substituteExpression(node) {
             switch (node.kind) {
-                case 78 /* Identifier */:
+                case 79 /* Identifier */:
                     return substituteExpressionIdentifier(node);
-                case 217 /* BinaryExpression */:
+                case 206 /* CallExpression */:
+                    return substituteCallExpression(node);
+                case 208 /* TaggedTemplateExpression */:
+                    return substituteTaggedTemplateExpression(node);
+                case 219 /* BinaryExpression */:
                     return substituteBinaryExpression(node);
-                case 216 /* PostfixUnaryExpression */:
-                case 215 /* PrefixUnaryExpression */:
-                    return substituteUnaryExpression(node);
+            }
+            return node;
+        }
+        function substituteCallExpression(node) {
+            if (ts.isIdentifier(node.expression)) {
+                var expression = substituteExpressionIdentifier(node.expression);
+                noSubstitution[ts.getNodeId(expression)] = true;
+                if (!ts.isIdentifier(expression)) {
+                    return ts.addEmitFlags(factory.updateCallExpression(node, expression, 
+                    /*typeArguments*/ undefined, node.arguments), 536870912 /* IndirectCall */);
+                }
+            }
+            return node;
+        }
+        function substituteTaggedTemplateExpression(node) {
+            if (ts.isIdentifier(node.tag)) {
+                var tag = substituteExpressionIdentifier(node.tag);
+                noSubstitution[ts.getNodeId(tag)] = true;
+                if (!ts.isIdentifier(tag)) {
+                    return ts.addEmitFlags(factory.updateTaggedTemplateExpression(node, tag, 
+                    /*typeArguments*/ undefined, node.template), 536870912 /* IndirectCall */);
+                }
             }
             return node;
         }
@@ -99206,7 +101367,7 @@
             }
             else if (!(ts.isGeneratedIdentifier(node) && !(node.autoGenerateFlags & 64 /* AllowNameSubstitution */)) && !ts.isLocalName(node)) {
                 var exportContainer = resolver.getReferencedExportContainer(node, ts.isExportName(node));
-                if (exportContainer && exportContainer.kind === 298 /* SourceFile */) {
+                if (exportContainer && exportContainer.kind === 300 /* SourceFile */) {
                     return ts.setTextRange(factory.createPropertyAccessExpression(factory.createIdentifier("exports"), factory.cloneNode(node)), 
                     /*location*/ node);
                 }
@@ -99248,54 +101409,11 @@
                 if (exportedNames) {
                     // For each additional export of the declaration, apply an export assignment.
                     var expression = node;
-                    for (var _i = 0, exportedNames_2 = exportedNames; _i < exportedNames_2.length; _i++) {
-                        var exportName = exportedNames_2[_i];
-                        // Mark the node to prevent triggering this rule again.
-                        noSubstitution[ts.getNodeId(expression)] = true;
-                        expression = createExportExpression(exportName, expression, /*location*/ node);
-                    }
-                    return expression;
-                }
-            }
-            return node;
-        }
-        /**
-         * Substitution for a UnaryExpression that may contain an imported or exported symbol.
-         *
-         * @param node The node to substitute.
-         */
-        function substituteUnaryExpression(node) {
-            // When we see a prefix or postfix increment expression whose operand is an exported
-            // symbol, we should ensure all exports of that symbol are updated with the correct
-            // value.
-            //
-            // - We do not substitute generated identifiers for any reason.
-            // - We do not substitute identifiers tagged with the LocalName flag.
-            // - We do not substitute identifiers that were originally the name of an enum or
-            //   namespace due to how they are transformed in TypeScript.
-            // - We only substitute identifiers that are exported at the top level.
-            if ((node.operator === 45 /* PlusPlusToken */ || node.operator === 46 /* MinusMinusToken */)
-                && ts.isIdentifier(node.operand)
-                && !ts.isGeneratedIdentifier(node.operand)
-                && !ts.isLocalName(node.operand)
-                && !ts.isDeclarationNameOfEnumOrNamespace(node.operand)) {
-                var exportedNames = getExports(node.operand);
-                if (exportedNames) {
-                    var expression = node.kind === 216 /* PostfixUnaryExpression */
-                        ? ts.setTextRange(factory.createPrefixUnaryExpression(node.operator, node.operand), 
-                        /*location*/ node)
-                        : node;
                     for (var _i = 0, exportedNames_3 = exportedNames; _i < exportedNames_3.length; _i++) {
                         var exportName = exportedNames_3[_i];
                         // Mark the node to prevent triggering this rule again.
                         noSubstitution[ts.getNodeId(expression)] = true;
-                        expression = createExportExpression(exportName, expression);
-                    }
-                    if (node.kind === 216 /* PostfixUnaryExpression */) {
-                        noSubstitution[ts.getNodeId(expression)] = true;
-                        expression = node.operator === 45 /* PlusPlusToken */
-                            ? factory.createSubtract(expression, factory.createNumericLiteral(1))
-                            : factory.createAdd(expression, factory.createNumericLiteral(1));
+                        expression = createExportExpression(exportName, expression, /*location*/ node);
                     }
                     return expression;
                 }
@@ -99338,13 +101456,11 @@
         var previousOnEmitNode = context.onEmitNode;
         context.onSubstituteNode = onSubstituteNode;
         context.onEmitNode = onEmitNode;
-        context.enableSubstitution(78 /* Identifier */); // Substitutes expression identifiers for imported symbols.
-        context.enableSubstitution(290 /* ShorthandPropertyAssignment */); // Substitutes expression identifiers for imported symbols
-        context.enableSubstitution(217 /* BinaryExpression */); // Substitutes assignments to exported symbols.
-        context.enableSubstitution(215 /* PrefixUnaryExpression */); // Substitutes updates to exported symbols.
-        context.enableSubstitution(216 /* PostfixUnaryExpression */); // Substitutes updates to exported symbols.
-        context.enableSubstitution(227 /* MetaProperty */); // Substitutes 'import.meta'
-        context.enableEmitNotification(298 /* SourceFile */); // Restore state when substituting nodes in a file.
+        context.enableSubstitution(79 /* Identifier */); // Substitutes expression identifiers for imported symbols.
+        context.enableSubstitution(292 /* ShorthandPropertyAssignment */); // Substitutes expression identifiers for imported symbols
+        context.enableSubstitution(219 /* BinaryExpression */); // Substitutes assignments to exported symbols.
+        context.enableSubstitution(229 /* MetaProperty */); // Substitutes 'import.meta'
+        context.enableEmitNotification(300 /* SourceFile */); // Restore state when substituting nodes in a file.
         var moduleInfoMap = []; // The ExternalModuleInfo for each file.
         var deferredExports = []; // Exports to defer until an EndOfDeclarationMarker is found.
         var exportFunctionsMap = []; // The export function associated with a source file.
@@ -99510,7 +101626,7 @@
             startLexicalEnvironment();
             // Add any prologue directives.
             var ensureUseStrict = ts.getStrictOptionValue(compilerOptions, "alwaysStrict") || (!compilerOptions.noImplicitUseStrict && ts.isExternalModule(currentSourceFile));
-            var statementOffset = factory.copyPrologue(node.statements, statements, ensureUseStrict, sourceElementVisitor);
+            var statementOffset = factory.copyPrologue(node.statements, statements, ensureUseStrict, topLevelVisitor);
             // var __moduleName = context_1 && context_1.id;
             statements.push(factory.createVariableStatement(
             /*modifiers*/ undefined, factory.createVariableDeclarationList([
@@ -99519,13 +101635,13 @@
                 /*type*/ undefined, factory.createLogicalAnd(contextObject, factory.createPropertyAccessExpression(contextObject, "id")))
             ])));
             // Visit the synthetic external helpers import declaration if present
-            ts.visitNode(moduleInfo.externalHelpersImportDeclaration, sourceElementVisitor, ts.isStatement);
+            ts.visitNode(moduleInfo.externalHelpersImportDeclaration, topLevelVisitor, ts.isStatement);
             // Visit the statements of the source file, emitting any transformations into
             // the `executeStatements` array. We do this *before* we fill the `setters` array
             // as we both emit transformations as well as aggregate some data used when creating
             // setters. This allows us to reduce the number of times we need to loop through the
             // statements of the source file.
-            var executeStatements = ts.visitNodes(node.statements, sourceElementVisitor, ts.isStatement, statementOffset);
+            var executeStatements = ts.visitNodes(node.statements, topLevelVisitor, ts.isStatement, statementOffset);
             // Emit early exports for function declarations.
             ts.addRange(statements, hoistedStatements);
             // We emit hoisted variables early to align roughly with our previous emit output.
@@ -99568,7 +101684,7 @@
                 var hasExportDeclarationWithExportClause = false;
                 for (var _i = 0, _a = moduleInfo.externalImports; _i < _a.length; _i++) {
                     var externalImport = _a[_i];
-                    if (externalImport.kind === 268 /* ExportDeclaration */ && externalImport.exportClause) {
+                    if (externalImport.kind === 270 /* ExportDeclaration */ && externalImport.exportClause) {
                         hasExportDeclarationWithExportClause = true;
                         break;
                     }
@@ -99658,19 +101774,19 @@
                     var entry = _b[_a];
                     var importVariableName = ts.getLocalNameForExternalImport(factory, entry, currentSourceFile); // TODO: GH#18217
                     switch (entry.kind) {
-                        case 262 /* ImportDeclaration */:
+                        case 264 /* ImportDeclaration */:
                             if (!entry.importClause) {
                                 // 'import "..."' case
                                 // module is imported only for side-effects, no emit required
                                 break;
                             }
                         // falls through
-                        case 261 /* ImportEqualsDeclaration */:
+                        case 263 /* ImportEqualsDeclaration */:
                             ts.Debug.assert(importVariableName !== undefined);
                             // save import into the local
                             statements.push(factory.createExpressionStatement(factory.createAssignment(importVariableName, parameterName)));
                             break;
-                        case 268 /* ExportDeclaration */:
+                        case 270 /* ExportDeclaration */:
                             ts.Debug.assert(importVariableName !== undefined);
                             if (entry.exportClause) {
                                 if (ts.isNamedExports(entry.exportClause)) {
@@ -99727,18 +101843,18 @@
          *
          * @param node The node to visit.
          */
-        function sourceElementVisitor(node) {
+        function topLevelVisitor(node) {
             switch (node.kind) {
-                case 262 /* ImportDeclaration */:
+                case 264 /* ImportDeclaration */:
                     return visitImportDeclaration(node);
-                case 261 /* ImportEqualsDeclaration */:
+                case 263 /* ImportEqualsDeclaration */:
                     return visitImportEqualsDeclaration(node);
-                case 268 /* ExportDeclaration */:
+                case 270 /* ExportDeclaration */:
                     return visitExportDeclaration(node);
-                case 267 /* ExportAssignment */:
+                case 269 /* ExportAssignment */:
                     return visitExportAssignment(node);
                 default:
-                    return nestedElementVisitor(node);
+                    return topLevelNestedVisitor(node);
             }
         }
         /**
@@ -99794,7 +101910,7 @@
                 // Elide `export=` as it is illegal in a SystemJS module.
                 return undefined;
             }
-            var expression = ts.visitNode(node.expression, destructuringAndImportCallVisitor, ts.isExpression);
+            var expression = ts.visitNode(node.expression, visitor, ts.isExpression);
             var original = node.original;
             if (original && hasAssociatedEndOfDeclarationMarker(original)) {
                 // Defer exports until we encounter an EndOfDeclarationMarker node
@@ -99813,11 +101929,11 @@
         function visitFunctionDeclaration(node) {
             if (ts.hasSyntacticModifier(node, 1 /* Export */)) {
                 hoistedStatements = ts.append(hoistedStatements, factory.updateFunctionDeclaration(node, node.decorators, ts.visitNodes(node.modifiers, modifierVisitor, ts.isModifier), node.asteriskToken, factory.getDeclarationName(node, /*allowComments*/ true, /*allowSourceMaps*/ true), 
-                /*typeParameters*/ undefined, ts.visitNodes(node.parameters, destructuringAndImportCallVisitor, ts.isParameterDeclaration), 
-                /*type*/ undefined, ts.visitNode(node.body, destructuringAndImportCallVisitor, ts.isBlock)));
+                /*typeParameters*/ undefined, ts.visitNodes(node.parameters, visitor, ts.isParameterDeclaration), 
+                /*type*/ undefined, ts.visitNode(node.body, visitor, ts.isBlock)));
             }
             else {
-                hoistedStatements = ts.append(hoistedStatements, ts.visitEachChild(node, destructuringAndImportCallVisitor, context));
+                hoistedStatements = ts.append(hoistedStatements, ts.visitEachChild(node, visitor, context));
             }
             if (hasAssociatedEndOfDeclarationMarker(node)) {
                 // Defer exports until we encounter an EndOfDeclarationMarker node
@@ -99840,9 +101956,9 @@
             var name = factory.getLocalName(node);
             hoistVariableDeclaration(name);
             // Rewrite the class declaration into an assignment of a class expression.
-            statements = ts.append(statements, ts.setTextRange(factory.createExpressionStatement(factory.createAssignment(name, ts.setTextRange(factory.createClassExpression(ts.visitNodes(node.decorators, destructuringAndImportCallVisitor, ts.isDecorator), 
+            statements = ts.append(statements, ts.setTextRange(factory.createExpressionStatement(factory.createAssignment(name, ts.setTextRange(factory.createClassExpression(ts.visitNodes(node.decorators, visitor, ts.isDecorator), 
             /*modifiers*/ undefined, node.name, 
-            /*typeParameters*/ undefined, ts.visitNodes(node.heritageClauses, destructuringAndImportCallVisitor, ts.isHeritageClause), ts.visitNodes(node.members, destructuringAndImportCallVisitor, ts.isClassElement)), node))), node));
+            /*typeParameters*/ undefined, ts.visitNodes(node.heritageClauses, visitor, ts.isHeritageClause), ts.visitNodes(node.members, visitor, ts.isClassElement)), node))), node));
             if (hasAssociatedEndOfDeclarationMarker(node)) {
                 // Defer exports until we encounter an EndOfDeclarationMarker node
                 var id = ts.getOriginalNodeId(node);
@@ -99861,7 +101977,7 @@
          */
         function visitVariableStatement(node) {
             if (!shouldHoistVariableDeclarationList(node.declarationList)) {
-                return ts.visitNode(node, destructuringAndImportCallVisitor, ts.isStatement);
+                return ts.visitNode(node, visitor, ts.isStatement);
             }
             var expressions;
             var isExportedDeclaration = ts.hasSyntacticModifier(node, 1 /* Export */);
@@ -99915,7 +102031,7 @@
         function shouldHoistVariableDeclarationList(node) {
             // hoist only non-block scoped declarations or block scoped declarations parented by source file
             return (ts.getEmitFlags(node) & 2097152 /* NoHoisting */) === 0
-                && (enclosingBlockScopedContainer.kind === 298 /* SourceFile */
+                && (enclosingBlockScopedContainer.kind === 300 /* SourceFile */
                     || (ts.getOriginalNode(node).flags & 3 /* BlockScoped */) === 0);
         }
         /**
@@ -99927,9 +102043,9 @@
         function transformInitializedVariable(node, isExportedDeclaration) {
             var createAssignment = isExportedDeclaration ? createExportedVariableAssignment : createNonExportedVariableAssignment;
             return ts.isBindingPattern(node.name)
-                ? ts.flattenDestructuringAssignment(node, destructuringAndImportCallVisitor, context, 0 /* All */, 
+                ? ts.flattenDestructuringAssignment(node, visitor, context, 0 /* All */, 
                 /*needsValue*/ false, createAssignment)
-                : node.initializer ? createAssignment(node.name, ts.visitNode(node.initializer, destructuringAndImportCallVisitor, ts.isExpression)) : node.name;
+                : node.initializer ? createAssignment(node.name, ts.visitNode(node.initializer, visitor, ts.isExpression)) : node.name;
         }
         /**
          * Creates an assignment expression for an exported variable declaration.
@@ -99979,7 +102095,7 @@
             //
             // To balance the declaration, we defer the exports of the elided variable
             // statement until we visit this declaration's `EndOfDeclarationMarker`.
-            if (hasAssociatedEndOfDeclarationMarker(node) && node.original.kind === 233 /* VariableStatement */) {
+            if (hasAssociatedEndOfDeclarationMarker(node) && node.original.kind === 235 /* VariableStatement */) {
                 var id = ts.getOriginalNodeId(node);
                 var isExportedDeclaration = ts.hasSyntacticModifier(node.original, 1 /* Export */);
                 deferredExports[id] = appendExportsOfVariableStatement(deferredExports[id], node.original, isExportedDeclaration);
@@ -100041,10 +102157,10 @@
             var namedBindings = importClause.namedBindings;
             if (namedBindings) {
                 switch (namedBindings.kind) {
-                    case 264 /* NamespaceImport */:
+                    case 266 /* NamespaceImport */:
                         statements = appendExportsOfDeclaration(statements, namedBindings);
                         break;
-                    case 265 /* NamedImports */:
+                    case 267 /* NamedImports */:
                         for (var _i = 0, _a = namedBindings.elements; _i < _a.length; _i++) {
                             var importBinding = _a[_i];
                             statements = appendExportsOfDeclaration(statements, importBinding);
@@ -100222,48 +102338,48 @@
          *
          * @param node The node to visit.
          */
-        function nestedElementVisitor(node) {
+        function topLevelNestedVisitor(node) {
             switch (node.kind) {
-                case 233 /* VariableStatement */:
+                case 235 /* VariableStatement */:
                     return visitVariableStatement(node);
-                case 252 /* FunctionDeclaration */:
+                case 254 /* FunctionDeclaration */:
                     return visitFunctionDeclaration(node);
-                case 253 /* ClassDeclaration */:
+                case 255 /* ClassDeclaration */:
                     return visitClassDeclaration(node);
-                case 238 /* ForStatement */:
-                    return visitForStatement(node);
-                case 239 /* ForInStatement */:
+                case 240 /* ForStatement */:
+                    return visitForStatement(node, /*isTopLevel*/ true);
+                case 241 /* ForInStatement */:
                     return visitForInStatement(node);
-                case 240 /* ForOfStatement */:
+                case 242 /* ForOfStatement */:
                     return visitForOfStatement(node);
-                case 236 /* DoStatement */:
+                case 238 /* DoStatement */:
                     return visitDoStatement(node);
-                case 237 /* WhileStatement */:
+                case 239 /* WhileStatement */:
                     return visitWhileStatement(node);
-                case 246 /* LabeledStatement */:
+                case 248 /* LabeledStatement */:
                     return visitLabeledStatement(node);
-                case 244 /* WithStatement */:
+                case 246 /* WithStatement */:
                     return visitWithStatement(node);
-                case 245 /* SwitchStatement */:
+                case 247 /* SwitchStatement */:
                     return visitSwitchStatement(node);
-                case 259 /* CaseBlock */:
+                case 261 /* CaseBlock */:
                     return visitCaseBlock(node);
-                case 285 /* CaseClause */:
+                case 287 /* CaseClause */:
                     return visitCaseClause(node);
-                case 286 /* DefaultClause */:
+                case 288 /* DefaultClause */:
                     return visitDefaultClause(node);
-                case 248 /* TryStatement */:
+                case 250 /* TryStatement */:
                     return visitTryStatement(node);
-                case 288 /* CatchClause */:
+                case 290 /* CatchClause */:
                     return visitCatchClause(node);
-                case 231 /* Block */:
+                case 233 /* Block */:
                     return visitBlock(node);
-                case 342 /* MergeDeclarationMarker */:
+                case 347 /* MergeDeclarationMarker */:
                     return visitMergeDeclarationMarker(node);
-                case 343 /* EndOfDeclarationMarker */:
+                case 348 /* EndOfDeclarationMarker */:
                     return visitEndOfDeclarationMarker(node);
                 default:
-                    return destructuringAndImportCallVisitor(node);
+                    return visitor(node);
             }
         }
         /**
@@ -100271,10 +102387,10 @@
          *
          * @param node The node to visit.
          */
-        function visitForStatement(node) {
+        function visitForStatement(node, isTopLevel) {
             var savedEnclosingBlockScopedContainer = enclosingBlockScopedContainer;
             enclosingBlockScopedContainer = node;
-            node = factory.updateForStatement(node, node.initializer && visitForInitializer(node.initializer), ts.visitNode(node.condition, destructuringAndImportCallVisitor, ts.isExpression), ts.visitNode(node.incrementor, destructuringAndImportCallVisitor, ts.isExpression), ts.visitIterationBody(node.statement, nestedElementVisitor, context));
+            node = factory.updateForStatement(node, ts.visitNode(node.initializer, isTopLevel ? visitForInitializer : discardedValueVisitor, ts.isForInitializer), ts.visitNode(node.condition, visitor, ts.isExpression), ts.visitNode(node.incrementor, discardedValueVisitor, ts.isExpression), ts.visitIterationBody(node.statement, isTopLevel ? topLevelNestedVisitor : visitor, context));
             enclosingBlockScopedContainer = savedEnclosingBlockScopedContainer;
             return node;
         }
@@ -100286,7 +102402,7 @@
         function visitForInStatement(node) {
             var savedEnclosingBlockScopedContainer = enclosingBlockScopedContainer;
             enclosingBlockScopedContainer = node;
-            node = factory.updateForInStatement(node, visitForInitializer(node.initializer), ts.visitNode(node.expression, destructuringAndImportCallVisitor, ts.isExpression), ts.visitIterationBody(node.statement, nestedElementVisitor, context));
+            node = factory.updateForInStatement(node, visitForInitializer(node.initializer), ts.visitNode(node.expression, visitor, ts.isExpression), ts.visitIterationBody(node.statement, topLevelNestedVisitor, context));
             enclosingBlockScopedContainer = savedEnclosingBlockScopedContainer;
             return node;
         }
@@ -100298,7 +102414,7 @@
         function visitForOfStatement(node) {
             var savedEnclosingBlockScopedContainer = enclosingBlockScopedContainer;
             enclosingBlockScopedContainer = node;
-            node = factory.updateForOfStatement(node, node.awaitModifier, visitForInitializer(node.initializer), ts.visitNode(node.expression, destructuringAndImportCallVisitor, ts.isExpression), ts.visitIterationBody(node.statement, nestedElementVisitor, context));
+            node = factory.updateForOfStatement(node, node.awaitModifier, visitForInitializer(node.initializer), ts.visitNode(node.expression, visitor, ts.isExpression), ts.visitIterationBody(node.statement, topLevelNestedVisitor, context));
             enclosingBlockScopedContainer = savedEnclosingBlockScopedContainer;
             return node;
         }
@@ -100330,7 +102446,7 @@
                 return expressions ? factory.inlineExpressions(expressions) : factory.createOmittedExpression();
             }
             else {
-                return ts.visitEachChild(node, nestedElementVisitor, context);
+                return ts.visitNode(node, discardedValueVisitor, ts.isExpression);
             }
         }
         /**
@@ -100339,7 +102455,7 @@
          * @param node The node to visit.
          */
         function visitDoStatement(node) {
-            return factory.updateDoStatement(node, ts.visitIterationBody(node.statement, nestedElementVisitor, context), ts.visitNode(node.expression, destructuringAndImportCallVisitor, ts.isExpression));
+            return factory.updateDoStatement(node, ts.visitIterationBody(node.statement, topLevelNestedVisitor, context), ts.visitNode(node.expression, visitor, ts.isExpression));
         }
         /**
          * Visits the body of a WhileStatement to hoist declarations.
@@ -100347,7 +102463,7 @@
          * @param node The node to visit.
          */
         function visitWhileStatement(node) {
-            return factory.updateWhileStatement(node, ts.visitNode(node.expression, destructuringAndImportCallVisitor, ts.isExpression), ts.visitIterationBody(node.statement, nestedElementVisitor, context));
+            return factory.updateWhileStatement(node, ts.visitNode(node.expression, visitor, ts.isExpression), ts.visitIterationBody(node.statement, topLevelNestedVisitor, context));
         }
         /**
          * Visits the body of a LabeledStatement to hoist declarations.
@@ -100355,7 +102471,7 @@
          * @param node The node to visit.
          */
         function visitLabeledStatement(node) {
-            return factory.updateLabeledStatement(node, node.label, ts.visitNode(node.statement, nestedElementVisitor, ts.isStatement, factory.liftToBlock));
+            return factory.updateLabeledStatement(node, node.label, ts.visitNode(node.statement, topLevelNestedVisitor, ts.isStatement, factory.liftToBlock));
         }
         /**
          * Visits the body of a WithStatement to hoist declarations.
@@ -100363,7 +102479,7 @@
          * @param node The node to visit.
          */
         function visitWithStatement(node) {
-            return factory.updateWithStatement(node, ts.visitNode(node.expression, destructuringAndImportCallVisitor, ts.isExpression), ts.visitNode(node.statement, nestedElementVisitor, ts.isStatement, factory.liftToBlock));
+            return factory.updateWithStatement(node, ts.visitNode(node.expression, visitor, ts.isExpression), ts.visitNode(node.statement, topLevelNestedVisitor, ts.isStatement, factory.liftToBlock));
         }
         /**
          * Visits the body of a SwitchStatement to hoist declarations.
@@ -100371,7 +102487,7 @@
          * @param node The node to visit.
          */
         function visitSwitchStatement(node) {
-            return factory.updateSwitchStatement(node, ts.visitNode(node.expression, destructuringAndImportCallVisitor, ts.isExpression), ts.visitNode(node.caseBlock, nestedElementVisitor, ts.isCaseBlock));
+            return factory.updateSwitchStatement(node, ts.visitNode(node.expression, visitor, ts.isExpression), ts.visitNode(node.caseBlock, topLevelNestedVisitor, ts.isCaseBlock));
         }
         /**
          * Visits the body of a CaseBlock to hoist declarations.
@@ -100381,7 +102497,7 @@
         function visitCaseBlock(node) {
             var savedEnclosingBlockScopedContainer = enclosingBlockScopedContainer;
             enclosingBlockScopedContainer = node;
-            node = factory.updateCaseBlock(node, ts.visitNodes(node.clauses, nestedElementVisitor, ts.isCaseOrDefaultClause));
+            node = factory.updateCaseBlock(node, ts.visitNodes(node.clauses, topLevelNestedVisitor, ts.isCaseOrDefaultClause));
             enclosingBlockScopedContainer = savedEnclosingBlockScopedContainer;
             return node;
         }
@@ -100391,7 +102507,7 @@
          * @param node The node to visit.
          */
         function visitCaseClause(node) {
-            return factory.updateCaseClause(node, ts.visitNode(node.expression, destructuringAndImportCallVisitor, ts.isExpression), ts.visitNodes(node.statements, nestedElementVisitor, ts.isStatement));
+            return factory.updateCaseClause(node, ts.visitNode(node.expression, visitor, ts.isExpression), ts.visitNodes(node.statements, topLevelNestedVisitor, ts.isStatement));
         }
         /**
          * Visits the body of a DefaultClause to hoist declarations.
@@ -100399,7 +102515,7 @@
          * @param node The node to visit.
          */
         function visitDefaultClause(node) {
-            return ts.visitEachChild(node, nestedElementVisitor, context);
+            return ts.visitEachChild(node, topLevelNestedVisitor, context);
         }
         /**
          * Visits the body of a TryStatement to hoist declarations.
@@ -100407,7 +102523,7 @@
          * @param node The node to visit.
          */
         function visitTryStatement(node) {
-            return ts.visitEachChild(node, nestedElementVisitor, context);
+            return ts.visitEachChild(node, topLevelNestedVisitor, context);
         }
         /**
          * Visits the body of a CatchClause to hoist declarations.
@@ -100417,7 +102533,7 @@
         function visitCatchClause(node) {
             var savedEnclosingBlockScopedContainer = enclosingBlockScopedContainer;
             enclosingBlockScopedContainer = node;
-            node = factory.updateCatchClause(node, node.variableDeclaration, ts.visitNode(node.block, nestedElementVisitor, ts.isBlock));
+            node = factory.updateCatchClause(node, node.variableDeclaration, ts.visitNode(node.block, topLevelNestedVisitor, ts.isBlock));
             enclosingBlockScopedContainer = savedEnclosingBlockScopedContainer;
             return node;
         }
@@ -100429,7 +102545,7 @@
         function visitBlock(node) {
             var savedEnclosingBlockScopedContainer = enclosingBlockScopedContainer;
             enclosingBlockScopedContainer = node;
-            node = ts.visitEachChild(node, nestedElementVisitor, context);
+            node = ts.visitEachChild(node, topLevelNestedVisitor, context);
             enclosingBlockScopedContainer = savedEnclosingBlockScopedContainer;
             return node;
         }
@@ -100441,19 +102557,54 @@
          *
          * @param node The node to visit.
          */
-        function destructuringAndImportCallVisitor(node) {
-            if (ts.isDestructuringAssignment(node)) {
-                return visitDestructuringAssignment(node);
-            }
-            else if (ts.isImportCall(node)) {
-                return visitImportCallExpression(node);
-            }
-            else if ((node.transformFlags & 2048 /* ContainsDestructuringAssignment */) || (node.transformFlags & 4194304 /* ContainsDynamicImport */)) {
-                return ts.visitEachChild(node, destructuringAndImportCallVisitor, context);
-            }
-            else {
+        function visitorWorker(node, valueIsDiscarded) {
+            if (!(node.transformFlags & (2048 /* ContainsDestructuringAssignment */ | 4194304 /* ContainsDynamicImport */ | 67108864 /* ContainsUpdateExpressionForIdentifier */))) {
                 return node;
             }
+            switch (node.kind) {
+                case 240 /* ForStatement */:
+                    return visitForStatement(node, /*isTopLevel*/ false);
+                case 236 /* ExpressionStatement */:
+                    return visitExpressionStatement(node);
+                case 210 /* ParenthesizedExpression */:
+                    return visitParenthesizedExpression(node, valueIsDiscarded);
+                case 345 /* PartiallyEmittedExpression */:
+                    return visitPartiallyEmittedExpression(node, valueIsDiscarded);
+                case 219 /* BinaryExpression */:
+                    if (ts.isDestructuringAssignment(node)) {
+                        return visitDestructuringAssignment(node, valueIsDiscarded);
+                    }
+                    break;
+                case 206 /* CallExpression */:
+                    if (ts.isImportCall(node)) {
+                        return visitImportCallExpression(node);
+                    }
+                    break;
+                case 217 /* PrefixUnaryExpression */:
+                case 218 /* PostfixUnaryExpression */:
+                    return visitPrefixOrPostfixUnaryExpression(node, valueIsDiscarded);
+            }
+            return ts.visitEachChild(node, visitor, context);
+        }
+        /**
+         * Visit nodes to flatten destructuring assignments to exported symbols.
+         *
+         * @param node The node to visit.
+         */
+        function visitor(node) {
+            return visitorWorker(node, /*valueIsDiscarded*/ false);
+        }
+        function discardedValueVisitor(node) {
+            return visitorWorker(node, /*valueIsDiscarded*/ true);
+        }
+        function visitExpressionStatement(node) {
+            return factory.updateExpressionStatement(node, ts.visitNode(node.expression, discardedValueVisitor, ts.isExpression));
+        }
+        function visitParenthesizedExpression(node, valueIsDiscarded) {
+            return factory.updateParenthesizedExpression(node, ts.visitNode(node.expression, valueIsDiscarded ? discardedValueVisitor : visitor, ts.isExpression));
+        }
+        function visitPartiallyEmittedExpression(node, valueIsDiscarded) {
+            return factory.updatePartiallyEmittedExpression(node, ts.visitNode(node.expression, valueIsDiscarded ? discardedValueVisitor : visitor, ts.isExpression));
         }
         function visitImportCallExpression(node) {
             // import("./blah")
@@ -100467,7 +102618,7 @@
             //     };
             // });
             var externalModuleName = ts.getExternalModuleNameLiteral(factory, node, currentSourceFile, host, resolver, compilerOptions);
-            var firstArgument = ts.visitNode(ts.firstOrUndefined(node.arguments), destructuringAndImportCallVisitor);
+            var firstArgument = ts.visitNode(ts.firstOrUndefined(node.arguments), visitor);
             // Only use the external module name if it differs from the first argument. This allows us to preserve the quote style of the argument on output.
             var argument = externalModuleName && (!firstArgument || !ts.isStringLiteral(firstArgument) || firstArgument.text !== externalModuleName.text) ? externalModuleName : firstArgument;
             return factory.createCallExpression(factory.createPropertyAccessExpression(contextObject, factory.createIdentifier("import")), 
@@ -100478,12 +102629,11 @@
          *
          * @param node The node to visit.
          */
-        function visitDestructuringAssignment(node) {
+        function visitDestructuringAssignment(node, valueIsDiscarded) {
             if (hasExportedReferenceInDestructuringTarget(node.left)) {
-                return ts.flattenDestructuringAssignment(node, destructuringAndImportCallVisitor, context, 0 /* All */, 
-                /*needsValue*/ true);
+                return ts.flattenDestructuringAssignment(node, visitor, context, 0 /* All */, !valueIsDiscarded);
             }
-            return ts.visitEachChild(node, destructuringAndImportCallVisitor, context);
+            return ts.visitEachChild(node, visitor, context);
         }
         /**
          * Determines whether the target of a destructuring assignment refers to an exported symbol.
@@ -100511,12 +102661,57 @@
             }
             else if (ts.isIdentifier(node)) {
                 var container = resolver.getReferencedExportContainer(node);
-                return container !== undefined && container.kind === 298 /* SourceFile */;
+                return container !== undefined && container.kind === 300 /* SourceFile */;
             }
             else {
                 return false;
             }
         }
+        function visitPrefixOrPostfixUnaryExpression(node, valueIsDiscarded) {
+            // When we see a prefix or postfix increment expression whose operand is an exported
+            // symbol, we should ensure all exports of that symbol are updated with the correct
+            // value.
+            //
+            // - We do not transform generated identifiers for any reason.
+            // - We do not transform identifiers tagged with the LocalName flag.
+            // - We do not transform identifiers that were originally the name of an enum or
+            //   namespace due to how they are transformed in TypeScript.
+            // - We only transform identifiers that are exported at the top level.
+            if ((node.operator === 45 /* PlusPlusToken */ || node.operator === 46 /* MinusMinusToken */)
+                && ts.isIdentifier(node.operand)
+                && !ts.isGeneratedIdentifier(node.operand)
+                && !ts.isLocalName(node.operand)
+                && !ts.isDeclarationNameOfEnumOrNamespace(node.operand)) {
+                var exportedNames = getExports(node.operand);
+                if (exportedNames) {
+                    var temp = void 0;
+                    var expression = ts.visitNode(node.operand, visitor, ts.isExpression);
+                    if (ts.isPrefixUnaryExpression(node)) {
+                        expression = factory.updatePrefixUnaryExpression(node, expression);
+                    }
+                    else {
+                        expression = factory.updatePostfixUnaryExpression(node, expression);
+                        if (!valueIsDiscarded) {
+                            temp = factory.createTempVariable(hoistVariableDeclaration);
+                            expression = factory.createAssignment(temp, expression);
+                            ts.setTextRange(expression, node);
+                        }
+                        expression = factory.createComma(expression, factory.cloneNode(node.operand));
+                        ts.setTextRange(expression, node);
+                    }
+                    for (var _i = 0, exportedNames_4 = exportedNames; _i < exportedNames_4.length; _i++) {
+                        var exportName = exportedNames_4[_i];
+                        expression = createExportExpression(exportName, preventSubstitution(expression));
+                    }
+                    if (temp) {
+                        expression = factory.createComma(expression, temp);
+                        ts.setTextRange(expression, node);
+                    }
+                    return expression;
+                }
+            }
+            return ts.visitEachChild(node, visitor, context);
+        }
         //
         // Modifier Visitors
         //
@@ -100527,8 +102722,8 @@
          */
         function modifierVisitor(node) {
             switch (node.kind) {
-                case 92 /* ExportKeyword */:
-                case 87 /* DefaultKeyword */:
+                case 93 /* ExportKeyword */:
+                case 88 /* DefaultKeyword */:
                     return undefined;
             }
             return node;
@@ -100544,7 +102739,7 @@
          * @param emitCallback A callback used to emit the node in the printer.
          */
         function onEmitNode(hint, node, emitCallback) {
-            if (node.kind === 298 /* SourceFile */) {
+            if (node.kind === 300 /* SourceFile */) {
                 var id = ts.getOriginalNodeId(node);
                 currentSourceFile = node;
                 moduleInfo = moduleInfoMap[id];
@@ -100594,7 +102789,7 @@
          */
         function substituteUnspecified(node) {
             switch (node.kind) {
-                case 290 /* ShorthandPropertyAssignment */:
+                case 292 /* ShorthandPropertyAssignment */:
                     return substituteShorthandPropertyAssignment(node);
             }
             return node;
@@ -100629,14 +102824,11 @@
          */
         function substituteExpression(node) {
             switch (node.kind) {
-                case 78 /* Identifier */:
+                case 79 /* Identifier */:
                     return substituteExpressionIdentifier(node);
-                case 217 /* BinaryExpression */:
+                case 219 /* BinaryExpression */:
                     return substituteBinaryExpression(node);
-                case 215 /* PrefixUnaryExpression */:
-                case 216 /* PostfixUnaryExpression */:
-                    return substituteUnaryExpression(node);
-                case 227 /* MetaProperty */:
+                case 229 /* MetaProperty */:
                     return substituteMetaProperty(node);
             }
             return node;
@@ -100699,49 +102891,10 @@
                 if (exportedNames) {
                     // For each additional export of the declaration, apply an export assignment.
                     var expression = node;
-                    for (var _i = 0, exportedNames_4 = exportedNames; _i < exportedNames_4.length; _i++) {
-                        var exportName = exportedNames_4[_i];
-                        expression = createExportExpression(exportName, preventSubstitution(expression));
-                    }
-                    return expression;
-                }
-            }
-            return node;
-        }
-        /**
-         * Substitution for a UnaryExpression that may contain an imported or exported symbol.
-         *
-         * @param node The node to substitute.
-         */
-        function substituteUnaryExpression(node) {
-            // When we see a prefix or postfix increment expression whose operand is an exported
-            // symbol, we should ensure all exports of that symbol are updated with the correct
-            // value.
-            //
-            // - We do not substitute generated identifiers for any reason.
-            // - We do not substitute identifiers tagged with the LocalName flag.
-            // - We do not substitute identifiers that were originally the name of an enum or
-            //   namespace due to how they are transformed in TypeScript.
-            // - We only substitute identifiers that are exported at the top level.
-            if ((node.operator === 45 /* PlusPlusToken */ || node.operator === 46 /* MinusMinusToken */)
-                && ts.isIdentifier(node.operand)
-                && !ts.isGeneratedIdentifier(node.operand)
-                && !ts.isLocalName(node.operand)
-                && !ts.isDeclarationNameOfEnumOrNamespace(node.operand)) {
-                var exportedNames = getExports(node.operand);
-                if (exportedNames) {
-                    var expression = node.kind === 216 /* PostfixUnaryExpression */
-                        ? ts.setTextRange(factory.createPrefixUnaryExpression(node.operator, node.operand), node)
-                        : node;
                     for (var _i = 0, exportedNames_5 = exportedNames; _i < exportedNames_5.length; _i++) {
                         var exportName = exportedNames_5[_i];
                         expression = createExportExpression(exportName, preventSubstitution(expression));
                     }
-                    if (node.kind === 216 /* PostfixUnaryExpression */) {
-                        expression = node.operator === 45 /* PlusPlusToken */
-                            ? factory.createSubtract(preventSubstitution(expression), factory.createNumericLiteral(1))
-                            : factory.createAdd(preventSubstitution(expression), factory.createNumericLiteral(1));
-                    }
                     return expression;
                 }
             }
@@ -100765,7 +102918,7 @@
                     || resolver.getReferencedValueDeclaration(name);
                 if (valueDeclaration) {
                     var exportContainer = resolver.getReferencedExportContainer(name, /*prefixLocals*/ false);
-                    if (exportContainer && exportContainer.kind === 298 /* SourceFile */) {
+                    if (exportContainer && exportContainer.kind === 300 /* SourceFile */) {
                         exportedNames = ts.append(exportedNames, factory.getDeclarationName(valueDeclaration));
                     }
                     exportedNames = ts.addRange(exportedNames, moduleInfo && moduleInfo.exportedBindings[ts.getOriginalNodeId(valueDeclaration)]);
@@ -100805,8 +102958,8 @@
         var previousOnSubstituteNode = context.onSubstituteNode;
         context.onEmitNode = onEmitNode;
         context.onSubstituteNode = onSubstituteNode;
-        context.enableEmitNotification(298 /* SourceFile */);
-        context.enableSubstitution(78 /* Identifier */);
+        context.enableEmitNotification(300 /* SourceFile */);
+        context.enableSubstitution(79 /* Identifier */);
         var helperNameSubstitutions;
         return ts.chainBundle(context, transformSourceFile);
         function transformSourceFile(node) {
@@ -100818,7 +102971,7 @@
                 if (!ts.isExternalModule(node) || ts.some(result.statements, ts.isExternalModuleIndicator)) {
                     return result;
                 }
-                return factory.updateSourceFile(result, ts.setTextRange(factory.createNodeArray(__spreadArray(__spreadArray([], result.statements), [ts.createEmptyExports(factory)])), result.statements));
+                return factory.updateSourceFile(result, ts.setTextRange(factory.createNodeArray(__spreadArray(__spreadArray([], result.statements, true), [ts.createEmptyExports(factory)], false)), result.statements));
             }
             return node;
         }
@@ -100837,12 +102990,12 @@
         }
         function visitor(node) {
             switch (node.kind) {
-                case 261 /* ImportEqualsDeclaration */:
+                case 263 /* ImportEqualsDeclaration */:
                     // Elide `import=` as it is not legal with --module ES6
                     return undefined;
-                case 267 /* ExportAssignment */:
+                case 269 /* ExportAssignment */:
                     return visitExportAssignment(node);
-                case 268 /* ExportDeclaration */:
+                case 270 /* ExportDeclaration */:
                     var exportDecl = node;
                     return visitExportDeclaration(exportDecl);
             }
@@ -100970,14 +103123,14 @@
             } : undefined;
         }
         function getAccessorNameVisibilityDiagnosticMessage(symbolAccessibilityResult) {
-            if (ts.hasSyntacticModifier(node, 32 /* Static */)) {
+            if (ts.isStatic(node)) {
                 return symbolAccessibilityResult.errorModuleName ?
                     symbolAccessibilityResult.accessibility === 2 /* CannotBeNamed */ ?
                         ts.Diagnostics.Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named :
                         ts.Diagnostics.Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2 :
                     ts.Diagnostics.Public_static_property_0_of_exported_class_has_or_is_using_private_name_1;
             }
-            else if (node.parent.kind === 253 /* ClassDeclaration */) {
+            else if (node.parent.kind === 255 /* ClassDeclaration */) {
                 return symbolAccessibilityResult.errorModuleName ?
                     symbolAccessibilityResult.accessibility === 2 /* CannotBeNamed */ ?
                         ts.Diagnostics.Public_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named :
@@ -100999,14 +103152,14 @@
             } : undefined;
         }
         function getMethodNameVisibilityDiagnosticMessage(symbolAccessibilityResult) {
-            if (ts.hasSyntacticModifier(node, 32 /* Static */)) {
+            if (ts.isStatic(node)) {
                 return symbolAccessibilityResult.errorModuleName ?
                     symbolAccessibilityResult.accessibility === 2 /* CannotBeNamed */ ?
                         ts.Diagnostics.Public_static_method_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named :
                         ts.Diagnostics.Public_static_method_0_of_exported_class_has_or_is_using_name_1_from_private_module_2 :
                     ts.Diagnostics.Public_static_method_0_of_exported_class_has_or_is_using_private_name_1;
             }
-            else if (node.parent.kind === 253 /* ClassDeclaration */) {
+            else if (node.parent.kind === 255 /* ClassDeclaration */) {
                 return symbolAccessibilityResult.errorModuleName ?
                     symbolAccessibilityResult.accessibility === 2 /* CannotBeNamed */ ?
                         ts.Diagnostics.Public_method_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named :
@@ -101053,7 +103206,7 @@
             return ts.Debug.assertNever(node, "Attempted to set a declaration diagnostic context for unhandled node kind: " + ts.SyntaxKind[node.kind]);
         }
         function getVariableDeclarationTypeVisibilityDiagnosticMessage(symbolAccessibilityResult) {
-            if (node.kind === 250 /* VariableDeclaration */ || node.kind === 199 /* BindingElement */) {
+            if (node.kind === 252 /* VariableDeclaration */ || node.kind === 201 /* BindingElement */) {
                 return symbolAccessibilityResult.errorModuleName ?
                     symbolAccessibilityResult.accessibility === 2 /* CannotBeNamed */ ?
                         ts.Diagnostics.Exported_variable_0_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named :
@@ -101062,17 +103215,17 @@
             }
             // This check is to ensure we don't report error on constructor parameter property as that error would be reported during parameter emit
             // The only exception here is if the constructor was marked as private. we are not emitting the constructor parameters at all.
-            else if (node.kind === 164 /* PropertyDeclaration */ || node.kind === 202 /* PropertyAccessExpression */ || node.kind === 163 /* PropertySignature */ ||
-                (node.kind === 161 /* Parameter */ && ts.hasSyntacticModifier(node.parent, 8 /* Private */))) {
+            else if (node.kind === 165 /* PropertyDeclaration */ || node.kind === 204 /* PropertyAccessExpression */ || node.kind === 164 /* PropertySignature */ ||
+                (node.kind === 162 /* Parameter */ && ts.hasSyntacticModifier(node.parent, 8 /* Private */))) {
                 // TODO(jfreeman): Deal with computed properties in error reporting.
-                if (ts.hasSyntacticModifier(node, 32 /* Static */)) {
+                if (ts.isStatic(node)) {
                     return symbolAccessibilityResult.errorModuleName ?
                         symbolAccessibilityResult.accessibility === 2 /* CannotBeNamed */ ?
                             ts.Diagnostics.Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named :
                             ts.Diagnostics.Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2 :
                         ts.Diagnostics.Public_static_property_0_of_exported_class_has_or_is_using_private_name_1;
                 }
-                else if (node.parent.kind === 253 /* ClassDeclaration */ || node.kind === 161 /* Parameter */) {
+                else if (node.parent.kind === 255 /* ClassDeclaration */ || node.kind === 162 /* Parameter */) {
                     return symbolAccessibilityResult.errorModuleName ?
                         symbolAccessibilityResult.accessibility === 2 /* CannotBeNamed */ ?
                             ts.Diagnostics.Public_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named :
@@ -101097,10 +103250,10 @@
         }
         function getAccessorDeclarationTypeVisibilityError(symbolAccessibilityResult) {
             var diagnosticMessage;
-            if (node.kind === 169 /* SetAccessor */) {
+            if (node.kind === 171 /* SetAccessor */) {
                 // Getters can infer the return type from the returned expression, but setters cannot, so the
                 // "_from_external_module_1_but_cannot_be_named" case cannot occur.
-                if (ts.hasSyntacticModifier(node, 32 /* Static */)) {
+                if (ts.isStatic(node)) {
                     diagnosticMessage = symbolAccessibilityResult.errorModuleName ?
                         ts.Diagnostics.Parameter_type_of_public_static_setter_0_from_exported_class_has_or_is_using_name_1_from_private_module_2 :
                         ts.Diagnostics.Parameter_type_of_public_static_setter_0_from_exported_class_has_or_is_using_private_name_1;
@@ -101112,7 +103265,7 @@
                 }
             }
             else {
-                if (ts.hasSyntacticModifier(node, 32 /* Static */)) {
+                if (ts.isStatic(node)) {
                     diagnosticMessage = symbolAccessibilityResult.errorModuleName ?
                         symbolAccessibilityResult.accessibility === 2 /* CannotBeNamed */ ?
                             ts.Diagnostics.Return_type_of_public_static_getter_0_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named :
@@ -101136,34 +103289,34 @@
         function getReturnTypeVisibilityError(symbolAccessibilityResult) {
             var diagnosticMessage;
             switch (node.kind) {
-                case 171 /* ConstructSignature */:
+                case 173 /* ConstructSignature */:
                     // Interfaces cannot have return types that cannot be named
                     diagnosticMessage = symbolAccessibilityResult.errorModuleName ?
                         ts.Diagnostics.Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1 :
                         ts.Diagnostics.Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_0;
                     break;
-                case 170 /* CallSignature */:
+                case 172 /* CallSignature */:
                     // Interfaces cannot have return types that cannot be named
                     diagnosticMessage = symbolAccessibilityResult.errorModuleName ?
                         ts.Diagnostics.Return_type_of_call_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1 :
                         ts.Diagnostics.Return_type_of_call_signature_from_exported_interface_has_or_is_using_private_name_0;
                     break;
-                case 172 /* IndexSignature */:
+                case 174 /* IndexSignature */:
                     // Interfaces cannot have return types that cannot be named
                     diagnosticMessage = symbolAccessibilityResult.errorModuleName ?
                         ts.Diagnostics.Return_type_of_index_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1 :
                         ts.Diagnostics.Return_type_of_index_signature_from_exported_interface_has_or_is_using_private_name_0;
                     break;
-                case 166 /* MethodDeclaration */:
-                case 165 /* MethodSignature */:
-                    if (ts.hasSyntacticModifier(node, 32 /* Static */)) {
+                case 167 /* MethodDeclaration */:
+                case 166 /* MethodSignature */:
+                    if (ts.isStatic(node)) {
                         diagnosticMessage = symbolAccessibilityResult.errorModuleName ?
                             symbolAccessibilityResult.accessibility === 2 /* CannotBeNamed */ ?
                                 ts.Diagnostics.Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named :
                                 ts.Diagnostics.Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_private_module_1 :
                             ts.Diagnostics.Return_type_of_public_static_method_from_exported_class_has_or_is_using_private_name_0;
                     }
-                    else if (node.parent.kind === 253 /* ClassDeclaration */) {
+                    else if (node.parent.kind === 255 /* ClassDeclaration */) {
                         diagnosticMessage = symbolAccessibilityResult.errorModuleName ?
                             symbolAccessibilityResult.accessibility === 2 /* CannotBeNamed */ ?
                                 ts.Diagnostics.Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named :
@@ -101177,7 +103330,7 @@
                             ts.Diagnostics.Return_type_of_method_from_exported_interface_has_or_is_using_private_name_0;
                     }
                     break;
-                case 252 /* FunctionDeclaration */:
+                case 254 /* FunctionDeclaration */:
                     diagnosticMessage = symbolAccessibilityResult.errorModuleName ?
                         symbolAccessibilityResult.accessibility === 2 /* CannotBeNamed */ ?
                             ts.Diagnostics.Return_type_of_exported_function_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named :
@@ -101202,38 +103355,38 @@
         }
         function getParameterDeclarationTypeVisibilityDiagnosticMessage(symbolAccessibilityResult) {
             switch (node.parent.kind) {
-                case 167 /* Constructor */:
+                case 169 /* Constructor */:
                     return symbolAccessibilityResult.errorModuleName ?
                         symbolAccessibilityResult.accessibility === 2 /* CannotBeNamed */ ?
                             ts.Diagnostics.Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named :
                             ts.Diagnostics.Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_private_module_2 :
                         ts.Diagnostics.Parameter_0_of_constructor_from_exported_class_has_or_is_using_private_name_1;
-                case 171 /* ConstructSignature */:
-                case 176 /* ConstructorType */:
+                case 173 /* ConstructSignature */:
+                case 178 /* ConstructorType */:
                     // Interfaces cannot have parameter types that cannot be named
                     return symbolAccessibilityResult.errorModuleName ?
                         ts.Diagnostics.Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2 :
                         ts.Diagnostics.Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1;
-                case 170 /* CallSignature */:
+                case 172 /* CallSignature */:
                     // Interfaces cannot have parameter types that cannot be named
                     return symbolAccessibilityResult.errorModuleName ?
                         ts.Diagnostics.Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2 :
                         ts.Diagnostics.Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1;
-                case 172 /* IndexSignature */:
+                case 174 /* IndexSignature */:
                     // Interfaces cannot have parameter types that cannot be named
                     return symbolAccessibilityResult.errorModuleName ?
                         ts.Diagnostics.Parameter_0_of_index_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2 :
                         ts.Diagnostics.Parameter_0_of_index_signature_from_exported_interface_has_or_is_using_private_name_1;
-                case 166 /* MethodDeclaration */:
-                case 165 /* MethodSignature */:
-                    if (ts.hasSyntacticModifier(node.parent, 32 /* Static */)) {
+                case 167 /* MethodDeclaration */:
+                case 166 /* MethodSignature */:
+                    if (ts.isStatic(node.parent)) {
                         return symbolAccessibilityResult.errorModuleName ?
                             symbolAccessibilityResult.accessibility === 2 /* CannotBeNamed */ ?
                                 ts.Diagnostics.Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named :
                                 ts.Diagnostics.Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_private_module_2 :
                             ts.Diagnostics.Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1;
                     }
-                    else if (node.parent.parent.kind === 253 /* ClassDeclaration */) {
+                    else if (node.parent.parent.kind === 255 /* ClassDeclaration */) {
                         return symbolAccessibilityResult.errorModuleName ?
                             symbolAccessibilityResult.accessibility === 2 /* CannotBeNamed */ ?
                                 ts.Diagnostics.Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named :
@@ -101246,15 +103399,15 @@
                             ts.Diagnostics.Parameter_0_of_method_from_exported_interface_has_or_is_using_name_1_from_private_module_2 :
                             ts.Diagnostics.Parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1;
                     }
-                case 252 /* FunctionDeclaration */:
-                case 175 /* FunctionType */:
+                case 254 /* FunctionDeclaration */:
+                case 177 /* FunctionType */:
                     return symbolAccessibilityResult.errorModuleName ?
                         symbolAccessibilityResult.accessibility === 2 /* CannotBeNamed */ ?
                             ts.Diagnostics.Parameter_0_of_exported_function_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named :
                             ts.Diagnostics.Parameter_0_of_exported_function_has_or_is_using_name_1_from_private_module_2 :
                         ts.Diagnostics.Parameter_0_of_exported_function_has_or_is_using_private_name_1;
-                case 169 /* SetAccessor */:
-                case 168 /* GetAccessor */:
+                case 171 /* SetAccessor */:
+                case 170 /* GetAccessor */:
                     return symbolAccessibilityResult.errorModuleName ?
                         symbolAccessibilityResult.accessibility === 2 /* CannotBeNamed */ ?
                             ts.Diagnostics.Parameter_0_of_accessor_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named :
@@ -101268,39 +103421,39 @@
             // Type parameter constraints are named by user so we should always be able to name it
             var diagnosticMessage;
             switch (node.parent.kind) {
-                case 253 /* ClassDeclaration */:
+                case 255 /* ClassDeclaration */:
                     diagnosticMessage = ts.Diagnostics.Type_parameter_0_of_exported_class_has_or_is_using_private_name_1;
                     break;
-                case 254 /* InterfaceDeclaration */:
+                case 256 /* InterfaceDeclaration */:
                     diagnosticMessage = ts.Diagnostics.Type_parameter_0_of_exported_interface_has_or_is_using_private_name_1;
                     break;
-                case 191 /* MappedType */:
+                case 193 /* MappedType */:
                     diagnosticMessage = ts.Diagnostics.Type_parameter_0_of_exported_mapped_object_type_is_using_private_name_1;
                     break;
-                case 176 /* ConstructorType */:
-                case 171 /* ConstructSignature */:
+                case 178 /* ConstructorType */:
+                case 173 /* ConstructSignature */:
                     diagnosticMessage = ts.Diagnostics.Type_parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1;
                     break;
-                case 170 /* CallSignature */:
+                case 172 /* CallSignature */:
                     diagnosticMessage = ts.Diagnostics.Type_parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1;
                     break;
-                case 166 /* MethodDeclaration */:
-                case 165 /* MethodSignature */:
-                    if (ts.hasSyntacticModifier(node.parent, 32 /* Static */)) {
+                case 167 /* MethodDeclaration */:
+                case 166 /* MethodSignature */:
+                    if (ts.isStatic(node.parent)) {
                         diagnosticMessage = ts.Diagnostics.Type_parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1;
                     }
-                    else if (node.parent.parent.kind === 253 /* ClassDeclaration */) {
+                    else if (node.parent.parent.kind === 255 /* ClassDeclaration */) {
                         diagnosticMessage = ts.Diagnostics.Type_parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1;
                     }
                     else {
                         diagnosticMessage = ts.Diagnostics.Type_parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1;
                     }
                     break;
-                case 175 /* FunctionType */:
-                case 252 /* FunctionDeclaration */:
+                case 177 /* FunctionType */:
+                case 254 /* FunctionDeclaration */:
                     diagnosticMessage = ts.Diagnostics.Type_parameter_0_of_exported_function_has_or_is_using_private_name_1;
                     break;
-                case 255 /* TypeAliasDeclaration */:
+                case 257 /* TypeAliasDeclaration */:
                     diagnosticMessage = ts.Diagnostics.Type_parameter_0_of_exported_type_alias_has_or_is_using_private_name_1;
                     break;
                 default:
@@ -101317,7 +103470,7 @@
             // Heritage clause is written by user so it can always be named
             if (ts.isClassDeclaration(node.parent.parent)) {
                 // Class or Interface implemented/extended is inaccessible
-                diagnosticMessage = ts.isHeritageClause(node.parent) && node.parent.token === 116 /* ImplementsKeyword */ ?
+                diagnosticMessage = ts.isHeritageClause(node.parent) && node.parent.token === 117 /* ImplementsKeyword */ ?
                     ts.Diagnostics.Implements_clause_of_exported_class_0_has_or_is_using_private_name_1 :
                     node.parent.parent.name ? ts.Diagnostics.extends_clause_of_exported_class_0_has_or_is_using_private_name_1 :
                         ts.Diagnostics.extends_clause_of_exported_class_has_or_is_using_private_name_0;
@@ -101366,7 +103519,7 @@
     }
     function isInternalDeclaration(node, currentSourceFile) {
         var parseTreeNode = ts.getParseTreeNode(node);
-        if (parseTreeNode && parseTreeNode.kind === 161 /* Parameter */) {
+        if (parseTreeNode && parseTreeNode.kind === 162 /* Parameter */) {
             var paramIdx = parseTreeNode.parent.parameters.indexOf(parseTreeNode);
             var previousSibling = paramIdx > 0 ? parseTreeNode.parent.parameters[paramIdx - 1] : undefined;
             var text = currentSourceFile.text;
@@ -101425,7 +103578,8 @@
             moduleResolverHost: host,
             trackReferencedAmbientModule: trackReferencedAmbientModule,
             trackExternalModuleSymbolOfImportTypeNode: trackExternalModuleSymbolOfImportTypeNode,
-            reportNonlocalAugmentation: reportNonlocalAugmentation
+            reportNonlocalAugmentation: reportNonlocalAugmentation,
+            reportNonSerializableProperty: reportNonSerializableProperty
         };
         var errorNameNode;
         var errorFallbackNode;
@@ -101483,8 +103637,10 @@
                     else {
                         context.addDiagnostic(ts.createDiagnosticForNode(symbolAccessibilityResult.errorNode || errorInfo.errorNode, errorInfo.diagnosticMessage, symbolAccessibilityResult.errorSymbolName, symbolAccessibilityResult.errorModuleName));
                     }
+                    return true;
                 }
             }
+            return false;
         }
         function trackExternalModuleSymbolOfImportTypeNode(symbol) {
             if (!isBundledEmit) {
@@ -101493,33 +103649,40 @@
         }
         function trackSymbol(symbol, enclosingDeclaration, meaning) {
             if (symbol.flags & 262144 /* TypeParameter */)
-                return;
-            handleSymbolAccessibilityError(resolver.isSymbolAccessible(symbol, enclosingDeclaration, meaning, /*shouldComputeAliasesToMakeVisible*/ true));
+                return false;
+            var issuedDiagnostic = handleSymbolAccessibilityError(resolver.isSymbolAccessible(symbol, enclosingDeclaration, meaning, /*shouldComputeAliasesToMakeVisible*/ true));
             recordTypeReferenceDirectivesIfNecessary(resolver.getTypeReferenceDirectivesForSymbol(symbol, meaning));
+            return issuedDiagnostic;
         }
         function reportPrivateInBaseOfClassExpression(propertyName) {
             if (errorNameNode || errorFallbackNode) {
                 context.addDiagnostic(ts.createDiagnosticForNode((errorNameNode || errorFallbackNode), ts.Diagnostics.Property_0_of_exported_class_expression_may_not_be_private_or_protected, propertyName));
             }
         }
+        function errorDeclarationNameWithFallback() {
+            return errorNameNode ? ts.declarationNameToString(errorNameNode) :
+                errorFallbackNode && ts.getNameOfDeclaration(errorFallbackNode) ? ts.declarationNameToString(ts.getNameOfDeclaration(errorFallbackNode)) :
+                    errorFallbackNode && ts.isExportAssignment(errorFallbackNode) ? errorFallbackNode.isExportEquals ? "export=" : "default" :
+                        "(Missing)"; // same fallback declarationNameToString uses when node is zero-width (ie, nameless)
+        }
         function reportInaccessibleUniqueSymbolError() {
-            if (errorNameNode) {
-                context.addDiagnostic(ts.createDiagnosticForNode(errorNameNode, ts.Diagnostics.The_inferred_type_of_0_references_an_inaccessible_1_type_A_type_annotation_is_necessary, ts.declarationNameToString(errorNameNode), "unique symbol"));
+            if (errorNameNode || errorFallbackNode) {
+                context.addDiagnostic(ts.createDiagnosticForNode((errorNameNode || errorFallbackNode), ts.Diagnostics.The_inferred_type_of_0_references_an_inaccessible_1_type_A_type_annotation_is_necessary, errorDeclarationNameWithFallback(), "unique symbol"));
             }
         }
         function reportCyclicStructureError() {
-            if (errorNameNode) {
-                context.addDiagnostic(ts.createDiagnosticForNode(errorNameNode, ts.Diagnostics.The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialized_A_type_annotation_is_necessary, ts.declarationNameToString(errorNameNode)));
+            if (errorNameNode || errorFallbackNode) {
+                context.addDiagnostic(ts.createDiagnosticForNode((errorNameNode || errorFallbackNode), ts.Diagnostics.The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialized_A_type_annotation_is_necessary, errorDeclarationNameWithFallback()));
             }
         }
         function reportInaccessibleThisError() {
-            if (errorNameNode) {
-                context.addDiagnostic(ts.createDiagnosticForNode(errorNameNode, ts.Diagnostics.The_inferred_type_of_0_references_an_inaccessible_1_type_A_type_annotation_is_necessary, ts.declarationNameToString(errorNameNode), "this"));
+            if (errorNameNode || errorFallbackNode) {
+                context.addDiagnostic(ts.createDiagnosticForNode((errorNameNode || errorFallbackNode), ts.Diagnostics.The_inferred_type_of_0_references_an_inaccessible_1_type_A_type_annotation_is_necessary, errorDeclarationNameWithFallback(), "this"));
             }
         }
         function reportLikelyUnsafeImportRequiredError(specifier) {
-            if (errorNameNode) {
-                context.addDiagnostic(ts.createDiagnosticForNode(errorNameNode, ts.Diagnostics.The_inferred_type_of_0_cannot_be_named_without_a_reference_to_1_This_is_likely_not_portable_A_type_annotation_is_necessary, ts.declarationNameToString(errorNameNode), specifier));
+            if (errorNameNode || errorFallbackNode) {
+                context.addDiagnostic(ts.createDiagnosticForNode((errorNameNode || errorFallbackNode), ts.Diagnostics.The_inferred_type_of_0_cannot_be_named_without_a_reference_to_1_This_is_likely_not_portable_A_type_annotation_is_necessary, errorDeclarationNameWithFallback(), specifier));
             }
         }
         function reportTruncationError() {
@@ -101538,6 +103701,11 @@
                 }
             }
         }
+        function reportNonSerializableProperty(propertyName) {
+            if (errorNameNode || errorFallbackNode) {
+                context.addDiagnostic(ts.createDiagnosticForNode((errorNameNode || errorFallbackNode), ts.Diagnostics.The_type_of_this_node_cannot_be_serialized_because_its_property_0_cannot_be_serialized, propertyName));
+            }
+        }
         function transformDeclarationsForJS(sourceFile, bundled) {
             var oldDiag = getSymbolAccessibilityDiagnostic;
             getSymbolAccessibilityDiagnostic = function (s) { return (s.errorNode && ts.canProduceDiagnostics(s.errorNode) ? ts.createGetSymbolAccessibilityDiagnosticForNode(s.errorNode)(s) : ({
@@ -101551,10 +103719,10 @@
             return result;
         }
         function transformRoot(node) {
-            if (node.kind === 298 /* SourceFile */ && node.isDeclarationFile) {
+            if (node.kind === 300 /* SourceFile */ && node.isDeclarationFile) {
                 return node;
             }
-            if (node.kind === 299 /* Bundle */) {
+            if (node.kind === 301 /* Bundle */) {
                 isBundledEmit = true;
                 refs = new ts.Map();
                 libs = new ts.Map();
@@ -101577,14 +103745,14 @@
                         resultHasExternalModuleIndicator = false; // unused in external module bundle emit (all external modules are within module blocks, therefore are known to be modules)
                         needsDeclare = false;
                         var statements = ts.isSourceFileJS(sourceFile) ? factory.createNodeArray(transformDeclarationsForJS(sourceFile, /*bundled*/ true)) : ts.visitNodes(sourceFile.statements, visitDeclarationStatements);
-                        var newFile = factory.updateSourceFile(sourceFile, [factory.createModuleDeclaration([], [factory.createModifier(133 /* DeclareKeyword */)], factory.createStringLiteral(ts.getResolvedExternalModuleName(context.getEmitHost(), sourceFile)), factory.createModuleBlock(ts.setTextRange(factory.createNodeArray(transformAndReplaceLatePaintedStatements(statements)), sourceFile.statements)))], /*isDeclarationFile*/ true, /*referencedFiles*/ [], /*typeReferences*/ [], /*hasNoDefaultLib*/ false, /*libReferences*/ []);
+                        var newFile = factory.updateSourceFile(sourceFile, [factory.createModuleDeclaration([], [factory.createModifier(134 /* DeclareKeyword */)], factory.createStringLiteral(ts.getResolvedExternalModuleName(context.getEmitHost(), sourceFile)), factory.createModuleBlock(ts.setTextRange(factory.createNodeArray(transformAndReplaceLatePaintedStatements(statements)), sourceFile.statements)))], /*isDeclarationFile*/ true, /*referencedFiles*/ [], /*typeReferences*/ [], /*hasNoDefaultLib*/ false, /*libReferences*/ []);
                         return newFile;
                     }
                     needsDeclare = true;
                     var updated = ts.isSourceFileJS(sourceFile) ? factory.createNodeArray(transformDeclarationsForJS(sourceFile)) : ts.visitNodes(sourceFile.statements, visitDeclarationStatements);
                     return factory.updateSourceFile(sourceFile, transformAndReplaceLatePaintedStatements(updated), /*isDeclarationFile*/ true, /*referencedFiles*/ [], /*typeReferences*/ [], /*hasNoDefaultLib*/ false, /*libReferences*/ []);
                 }), ts.mapDefined(node.prepends, function (prepend) {
-                    if (prepend.kind === 301 /* InputFiles */) {
+                    if (prepend.kind === 303 /* InputFiles */) {
                         var sourceFile = ts.createUnparsedSourceFile(prepend, "dts", stripInternal);
                         hasNoDefaultLib_1 = hasNoDefaultLib_1 || !!sourceFile.hasNoDefaultLib;
                         collectReferences(sourceFile, refs);
@@ -101633,7 +103801,7 @@
                 refs.forEach(referenceVisitor);
                 emittedImports = ts.filter(combinedStatements, ts.isAnyImportSyntax);
                 if (ts.isExternalModule(node) && (!resultHasExternalModuleIndicator || (needsScopeFixMarker && !resultHasScopeMarker))) {
-                    combinedStatements = ts.setTextRange(factory.createNodeArray(__spreadArray(__spreadArray([], combinedStatements), [ts.createEmptyExports(factory)])), combinedStatements);
+                    combinedStatements = ts.setTextRange(factory.createNodeArray(__spreadArray(__spreadArray([], combinedStatements, true), [ts.createEmptyExports(factory)], false)), combinedStatements);
                 }
             }
             var updated = factory.updateSourceFile(node, combinedStatements, /*isDeclarationFile*/ true, references, getFileReferencesForUsedTypeReferences(), node.hasNoDefaultLib, getLibReferences());
@@ -101676,8 +103844,7 @@
                         declFileName = paths.declarationFilePath || paths.jsFilePath || file.fileName;
                     }
                     if (declFileName) {
-                        var specifier = ts.moduleSpecifiers.getModuleSpecifier(options, currentSourceFile, ts.toPath(outputFilePath, host.getCurrentDirectory(), host.getCanonicalFileName), ts.toPath(declFileName, host.getCurrentDirectory(), host.getCanonicalFileName), host, 
-                        /*preferences*/ undefined);
+                        var specifier = ts.moduleSpecifiers.getModuleSpecifier(options, currentSourceFile, ts.toPath(outputFilePath, host.getCurrentDirectory(), host.getCanonicalFileName), ts.toPath(declFileName, host.getCurrentDirectory(), host.getCanonicalFileName), host);
                         if (!ts.pathIsRelative(specifier)) {
                             // If some compiler option/symlink/whatever allows access to the file containing the ambient module declaration
                             // via a non-relative name, emit a type reference directive to that non-relative name, rather than
@@ -101721,11 +103888,11 @@
             return ret;
         }
         function filterBindingPatternInitializers(name) {
-            if (name.kind === 78 /* Identifier */) {
+            if (name.kind === 79 /* Identifier */) {
                 return name;
             }
             else {
-                if (name.kind === 198 /* ArrayBindingPattern */) {
+                if (name.kind === 200 /* ArrayBindingPattern */) {
                     return factory.updateArrayBindingPattern(name, ts.visitNodes(name.elements, visitBindingElement));
                 }
                 else {
@@ -101733,7 +103900,7 @@
                 }
             }
             function visitBindingElement(elem) {
-                if (elem.kind === 223 /* OmittedExpression */) {
+                if (elem.kind === 225 /* OmittedExpression */) {
                     return elem;
                 }
                 return factory.updateBindingElement(elem, elem.dotDotDotToken, elem.propertyName, filterBindingPatternInitializers(elem.name), shouldPrintWithInitializer(elem) ? elem.initializer : undefined);
@@ -101771,19 +103938,19 @@
                 // Literal const declarations will have an initializer ensured rather than a type
                 return;
             }
-            var shouldUseResolverType = node.kind === 161 /* Parameter */ &&
+            var shouldUseResolverType = node.kind === 162 /* Parameter */ &&
                 (resolver.isRequiredInitializedParameter(node) ||
                     resolver.isOptionalUninitializedParameterProperty(node));
             if (type && !shouldUseResolverType) {
                 return ts.visitNode(type, visitDeclarationSubtree);
             }
             if (!ts.getParseTreeNode(node)) {
-                return type ? ts.visitNode(type, visitDeclarationSubtree) : factory.createKeywordTypeNode(128 /* AnyKeyword */);
+                return type ? ts.visitNode(type, visitDeclarationSubtree) : factory.createKeywordTypeNode(129 /* AnyKeyword */);
             }
-            if (node.kind === 169 /* SetAccessor */) {
+            if (node.kind === 171 /* SetAccessor */) {
                 // Set accessors with no associated type node (from it's param or get accessor return) are `any` since they are never contextually typed right now
                 // (The inferred type here will be void, but the old declaration emitter printed `any`, so this replicates that)
-                return factory.createKeywordTypeNode(128 /* AnyKeyword */);
+                return factory.createKeywordTypeNode(129 /* AnyKeyword */);
             }
             errorNameNode = node.name;
             var oldDiag;
@@ -101791,12 +103958,12 @@
                 oldDiag = getSymbolAccessibilityDiagnostic;
                 getSymbolAccessibilityDiagnostic = ts.createGetSymbolAccessibilityDiagnosticForNode(node);
             }
-            if (node.kind === 250 /* VariableDeclaration */ || node.kind === 199 /* BindingElement */) {
+            if (node.kind === 252 /* VariableDeclaration */ || node.kind === 201 /* BindingElement */) {
                 return cleanup(resolver.createTypeOfDeclaration(node, enclosingDeclaration, declarationEmitNodeBuilderFlags, symbolTracker));
             }
-            if (node.kind === 161 /* Parameter */
-                || node.kind === 164 /* PropertyDeclaration */
-                || node.kind === 163 /* PropertySignature */) {
+            if (node.kind === 162 /* Parameter */
+                || node.kind === 165 /* PropertyDeclaration */
+                || node.kind === 164 /* PropertySignature */) {
                 if (!node.initializer)
                     return cleanup(resolver.createTypeOfDeclaration(node, enclosingDeclaration, declarationEmitNodeBuilderFlags, symbolTracker, shouldUseResolverType));
                 return cleanup(resolver.createTypeOfDeclaration(node, enclosingDeclaration, declarationEmitNodeBuilderFlags, symbolTracker, shouldUseResolverType) || resolver.createTypeOfExpression(node.initializer, enclosingDeclaration, declarationEmitNodeBuilderFlags, symbolTracker));
@@ -101807,30 +103974,41 @@
                 if (!suppressNewDiagnosticContexts) {
                     getSymbolAccessibilityDiagnostic = oldDiag;
                 }
-                return returnValue || factory.createKeywordTypeNode(128 /* AnyKeyword */);
+                return returnValue || factory.createKeywordTypeNode(129 /* AnyKeyword */);
             }
         }
         function isDeclarationAndNotVisible(node) {
             node = ts.getParseTreeNode(node);
             switch (node.kind) {
-                case 252 /* FunctionDeclaration */:
-                case 257 /* ModuleDeclaration */:
-                case 254 /* InterfaceDeclaration */:
-                case 253 /* ClassDeclaration */:
-                case 255 /* TypeAliasDeclaration */:
-                case 256 /* EnumDeclaration */:
+                case 254 /* FunctionDeclaration */:
+                case 259 /* ModuleDeclaration */:
+                case 256 /* InterfaceDeclaration */:
+                case 255 /* ClassDeclaration */:
+                case 257 /* TypeAliasDeclaration */:
+                case 258 /* EnumDeclaration */:
                     return !resolver.isDeclarationVisible(node);
                 // The following should be doing their own visibility checks based on filtering their members
-                case 250 /* VariableDeclaration */:
+                case 252 /* VariableDeclaration */:
                     return !getBindingNameVisible(node);
-                case 261 /* ImportEqualsDeclaration */:
-                case 262 /* ImportDeclaration */:
-                case 268 /* ExportDeclaration */:
-                case 267 /* ExportAssignment */:
+                case 263 /* ImportEqualsDeclaration */:
+                case 264 /* ImportDeclaration */:
+                case 270 /* ExportDeclaration */:
+                case 269 /* ExportAssignment */:
                     return false;
+                case 168 /* ClassStaticBlockDeclaration */:
+                    return true;
             }
             return false;
         }
+        // If the ExpandoFunctionDeclaration have multiple overloads, then we only need to emit properties for the last one.
+        function shouldEmitFunctionProperties(input) {
+            var _a;
+            if (input.body) {
+                return true;
+            }
+            var overloadSignatures = (_a = input.symbol.declarations) === null || _a === void 0 ? void 0 : _a.filter(function (decl) { return ts.isFunctionDeclaration(decl) && !decl.body; });
+            return !overloadSignatures || overloadSignatures.indexOf(input) === overloadSignatures.length - 1;
+        }
         function getBindingNameVisible(elem) {
             if (ts.isOmittedExpression(elem)) {
                 return false;
@@ -101907,7 +104085,7 @@
         function rewriteModuleSpecifier(parent, input) {
             if (!input)
                 return undefined; // TODO: GH#18217
-            resultHasExternalModuleIndicator = resultHasExternalModuleIndicator || (parent.kind !== 257 /* ModuleDeclaration */ && parent.kind !== 196 /* ImportType */);
+            resultHasExternalModuleIndicator = resultHasExternalModuleIndicator || (parent.kind !== 259 /* ModuleDeclaration */ && parent.kind !== 198 /* ImportType */);
             if (ts.isStringLiteralLike(input)) {
                 if (isBundledEmit) {
                     var newName = ts.getExternalModuleNameFromDeclaration(context.getEmitHost(), resolver, parent);
@@ -101927,7 +104105,7 @@
         function transformImportEqualsDeclaration(decl) {
             if (!resolver.isDeclarationVisible(decl))
                 return;
-            if (decl.moduleReference.kind === 273 /* ExternalModuleReference */) {
+            if (decl.moduleReference.kind === 275 /* ExternalModuleReference */) {
                 // Rewrite external module names if necessary
                 var specifier = ts.getExternalModuleImportEqualsDeclarationExpression(decl);
                 return factory.updateImportEqualsDeclaration(decl, 
@@ -101954,7 +104132,7 @@
                 return visibleDefaultBinding && factory.updateImportDeclaration(decl, /*decorators*/ undefined, decl.modifiers, factory.updateImportClause(decl.importClause, decl.importClause.isTypeOnly, visibleDefaultBinding, 
                 /*namedBindings*/ undefined), rewriteModuleSpecifier(decl, decl.moduleSpecifier));
             }
-            if (decl.importClause.namedBindings.kind === 264 /* NamespaceImport */) {
+            if (decl.importClause.namedBindings.kind === 266 /* NamespaceImport */) {
                 // Namespace import (optionally with visible default)
                 var namedBindings = resolver.isDeclarationVisible(decl.importClause.namedBindings) ? decl.importClause.namedBindings : /*namedBindings*/ undefined;
                 return visibleDefaultBinding || namedBindings ? factory.updateImportDeclaration(decl, /*decorators*/ undefined, decl.modifiers, factory.updateImportClause(decl.importClause, decl.importClause.isTypeOnly, visibleDefaultBinding, namedBindings), rewriteModuleSpecifier(decl, decl.moduleSpecifier)) : undefined;
@@ -102049,7 +104227,7 @@
             // We'd see a TDZ violation at runtime
             var canProduceDiagnostic = ts.canProduceDiagnostics(input);
             var oldWithinObjectLiteralType = suppressNewDiagnosticContexts;
-            var shouldEnterSuppressNewDiagnosticsContextContext = ((input.kind === 178 /* TypeLiteral */ || input.kind === 191 /* MappedType */) && input.parent.kind !== 255 /* TypeAliasDeclaration */);
+            var shouldEnterSuppressNewDiagnosticsContextContext = ((input.kind === 180 /* TypeLiteral */ || input.kind === 193 /* MappedType */) && input.parent.kind !== 257 /* TypeAliasDeclaration */);
             // Emit methods which are private as properties with no type information
             if (ts.isMethodDeclaration(input) || ts.isMethodSignature(input)) {
                 if (ts.hasEffectiveModifier(input, 8 /* Private */)) {
@@ -102070,21 +104248,21 @@
             }
             if (isProcessedComponent(input)) {
                 switch (input.kind) {
-                    case 224 /* ExpressionWithTypeArguments */: {
+                    case 226 /* ExpressionWithTypeArguments */: {
                         if ((ts.isEntityName(input.expression) || ts.isEntityNameExpression(input.expression))) {
                             checkEntityNameVisibility(input.expression, enclosingDeclaration);
                         }
                         var node = ts.visitEachChild(input, visitDeclarationSubtree, context);
                         return cleanup(factory.updateExpressionWithTypeArguments(node, node.expression, node.typeArguments));
                     }
-                    case 174 /* TypeReference */: {
+                    case 176 /* TypeReference */: {
                         checkEntityNameVisibility(input.typeName, enclosingDeclaration);
                         var node = ts.visitEachChild(input, visitDeclarationSubtree, context);
                         return cleanup(factory.updateTypeReferenceNode(node, node.typeName, node.typeArguments));
                     }
-                    case 171 /* ConstructSignature */:
+                    case 173 /* ConstructSignature */:
                         return cleanup(factory.updateConstructSignature(input, ensureTypeParams(input, input.typeParameters), updateParamsList(input, input.parameters), ensureType(input, input.type)));
-                    case 167 /* Constructor */: {
+                    case 169 /* Constructor */: {
                         // A constructor declaration may not have a type annotation
                         var ctor = factory.createConstructorDeclaration(
                         /*decorators*/ undefined, 
@@ -102092,7 +104270,7 @@
                         /*body*/ undefined);
                         return cleanup(ctor);
                     }
-                    case 166 /* MethodDeclaration */: {
+                    case 167 /* MethodDeclaration */: {
                         if (ts.isPrivateIdentifier(input.name)) {
                             return cleanup(/*returnValue*/ undefined);
                         }
@@ -102102,7 +104280,7 @@
                         /*body*/ undefined);
                         return cleanup(sig);
                     }
-                    case 168 /* GetAccessor */: {
+                    case 170 /* GetAccessor */: {
                         if (ts.isPrivateIdentifier(input.name)) {
                             return cleanup(/*returnValue*/ undefined);
                         }
@@ -102111,7 +104289,7 @@
                         /*decorators*/ undefined, ensureModifiers(input), input.name, updateAccessorParamsList(input, ts.hasEffectiveModifier(input, 8 /* Private */)), ensureType(input, accessorType), 
                         /*body*/ undefined));
                     }
-                    case 169 /* SetAccessor */: {
+                    case 171 /* SetAccessor */: {
                         if (ts.isPrivateIdentifier(input.name)) {
                             return cleanup(/*returnValue*/ undefined);
                         }
@@ -102119,31 +104297,31 @@
                         /*decorators*/ undefined, ensureModifiers(input), input.name, updateAccessorParamsList(input, ts.hasEffectiveModifier(input, 8 /* Private */)), 
                         /*body*/ undefined));
                     }
-                    case 164 /* PropertyDeclaration */:
+                    case 165 /* PropertyDeclaration */:
                         if (ts.isPrivateIdentifier(input.name)) {
                             return cleanup(/*returnValue*/ undefined);
                         }
                         return cleanup(factory.updatePropertyDeclaration(input, 
                         /*decorators*/ undefined, ensureModifiers(input), input.name, input.questionToken, ensureType(input, input.type), ensureNoInitializer(input)));
-                    case 163 /* PropertySignature */:
+                    case 164 /* PropertySignature */:
                         if (ts.isPrivateIdentifier(input.name)) {
                             return cleanup(/*returnValue*/ undefined);
                         }
                         return cleanup(factory.updatePropertySignature(input, ensureModifiers(input), input.name, input.questionToken, ensureType(input, input.type)));
-                    case 165 /* MethodSignature */: {
+                    case 166 /* MethodSignature */: {
                         if (ts.isPrivateIdentifier(input.name)) {
                             return cleanup(/*returnValue*/ undefined);
                         }
                         return cleanup(factory.updateMethodSignature(input, ensureModifiers(input), input.name, input.questionToken, ensureTypeParams(input, input.typeParameters), updateParamsList(input, input.parameters), ensureType(input, input.type)));
                     }
-                    case 170 /* CallSignature */: {
+                    case 172 /* CallSignature */: {
                         return cleanup(factory.updateCallSignature(input, ensureTypeParams(input, input.typeParameters), updateParamsList(input, input.parameters), ensureType(input, input.type)));
                     }
-                    case 172 /* IndexSignature */: {
+                    case 174 /* IndexSignature */: {
                         return cleanup(factory.updateIndexSignature(input, 
-                        /*decorators*/ undefined, ensureModifiers(input), updateParamsList(input, input.parameters), ts.visitNode(input.type, visitDeclarationSubtree) || factory.createKeywordTypeNode(128 /* AnyKeyword */)));
+                        /*decorators*/ undefined, ensureModifiers(input), updateParamsList(input, input.parameters), ts.visitNode(input.type, visitDeclarationSubtree) || factory.createKeywordTypeNode(129 /* AnyKeyword */)));
                     }
-                    case 250 /* VariableDeclaration */: {
+                    case 252 /* VariableDeclaration */: {
                         if (ts.isBindingPattern(input.name)) {
                             return recreateBindingPattern(input.name);
                         }
@@ -102151,13 +104329,13 @@
                         suppressNewDiagnosticContexts = true; // Variable declaration types also suppress new diagnostic contexts, provided the contexts wouldn't be made for binding pattern types
                         return cleanup(factory.updateVariableDeclaration(input, input.name, /*exclamationToken*/ undefined, ensureType(input, input.type), ensureNoInitializer(input)));
                     }
-                    case 160 /* TypeParameter */: {
+                    case 161 /* TypeParameter */: {
                         if (isPrivateMethodTypeParameter(input) && (input.default || input.constraint)) {
                             return cleanup(factory.updateTypeParameterDeclaration(input, input.name, /*constraint*/ undefined, /*defaultType*/ undefined));
                         }
                         return cleanup(ts.visitEachChild(input, visitDeclarationSubtree, context));
                     }
-                    case 185 /* ConditionalType */: {
+                    case 187 /* ConditionalType */: {
                         // We have to process conditional types in a special way because for visibility purposes we need to push a new enclosingDeclaration
                         // just for the `infer` types in the true branch. It's an implicit declaration scope that only applies to _part_ of the type.
                         var checkType = ts.visitNode(input.checkType, visitDeclarationSubtree);
@@ -102169,13 +104347,13 @@
                         var falseType = ts.visitNode(input.falseType, visitDeclarationSubtree);
                         return cleanup(factory.updateConditionalTypeNode(input, checkType, extendsType, trueType, falseType));
                     }
-                    case 175 /* FunctionType */: {
+                    case 177 /* FunctionType */: {
                         return cleanup(factory.updateFunctionTypeNode(input, ts.visitNodes(input.typeParameters, visitDeclarationSubtree), updateParamsList(input, input.parameters), ts.visitNode(input.type, visitDeclarationSubtree)));
                     }
-                    case 176 /* ConstructorType */: {
+                    case 178 /* ConstructorType */: {
                         return cleanup(factory.updateConstructorTypeNode(input, ensureModifiers(input), ts.visitNodes(input.typeParameters, visitDeclarationSubtree), updateParamsList(input, input.parameters), ts.visitNode(input.type, visitDeclarationSubtree)));
                     }
-                    case 196 /* ImportType */: {
+                    case 198 /* ImportType */: {
                         if (!ts.isLiteralImportTypeNode(input))
                             return cleanup(input);
                         return cleanup(factory.updateImportTypeNode(input, factory.updateLiteralTypeNode(input.argument, rewriteModuleSpecifier(input, input.argument.literal)), input.qualifier, ts.visitNodes(input.typeArguments, visitDeclarationSubtree, ts.isTypeNode), input.isTypeOf));
@@ -102207,7 +104385,7 @@
             }
         }
         function isPrivateMethodTypeParameter(node) {
-            return node.parent.kind === 166 /* MethodDeclaration */ && ts.hasEffectiveModifier(node.parent, 8 /* Private */);
+            return node.parent.kind === 167 /* MethodDeclaration */ && ts.hasEffectiveModifier(node.parent, 8 /* Private */);
         }
         function visitDeclarationStatements(input) {
             if (!isPreservedDeclarationStatement(input)) {
@@ -102217,7 +104395,7 @@
             if (shouldStripInternal(input))
                 return;
             switch (input.kind) {
-                case 268 /* ExportDeclaration */: {
+                case 270 /* ExportDeclaration */: {
                     if (ts.isSourceFile(input.parent)) {
                         resultHasExternalModuleIndicator = true;
                     }
@@ -102227,13 +104405,13 @@
                     return factory.updateExportDeclaration(input, 
                     /*decorators*/ undefined, input.modifiers, input.isTypeOnly, input.exportClause, rewriteModuleSpecifier(input, input.moduleSpecifier));
                 }
-                case 267 /* ExportAssignment */: {
+                case 269 /* ExportAssignment */: {
                     // Always visible if the parent node isn't dropped for being not visible
                     if (ts.isSourceFile(input.parent)) {
                         resultHasExternalModuleIndicator = true;
                     }
                     resultHasScopeMarker = true;
-                    if (input.expression.kind === 78 /* Identifier */) {
+                    if (input.expression.kind === 79 /* Identifier */) {
                         return input;
                     }
                     else {
@@ -102245,7 +104423,7 @@
                         errorFallbackNode = input;
                         var varDecl = factory.createVariableDeclaration(newId, /*exclamationToken*/ undefined, resolver.createTypeOfExpression(input.expression, input, declarationEmitNodeBuilderFlags, symbolTracker), /*initializer*/ undefined);
                         errorFallbackNode = undefined;
-                        var statement = factory.createVariableStatement(needsDeclare ? [factory.createModifier(133 /* DeclareKeyword */)] : [], factory.createVariableDeclarationList([varDecl], 2 /* Const */));
+                        var statement = factory.createVariableStatement(needsDeclare ? [factory.createModifier(134 /* DeclareKeyword */)] : [], factory.createVariableDeclarationList([varDecl], 2 /* Const */));
                         return [statement, factory.updateExportAssignment(input, input.decorators, input.modifiers, newId)];
                     }
                 }
@@ -102268,10 +104446,10 @@
             if (shouldStripInternal(input))
                 return;
             switch (input.kind) {
-                case 261 /* ImportEqualsDeclaration */: {
+                case 263 /* ImportEqualsDeclaration */: {
                     return transformImportEqualsDeclaration(input);
                 }
-                case 262 /* ImportDeclaration */: {
+                case 264 /* ImportDeclaration */: {
                     return transformImportDeclaration(input);
                 }
             }
@@ -102292,20 +104470,20 @@
             }
             var previousNeedsDeclare = needsDeclare;
             switch (input.kind) {
-                case 255 /* TypeAliasDeclaration */: // Type aliases get `declare`d if need be (for legacy support), but that's all
+                case 257 /* TypeAliasDeclaration */: // Type aliases get `declare`d if need be (for legacy support), but that's all
                     return cleanup(factory.updateTypeAliasDeclaration(input, 
                     /*decorators*/ undefined, ensureModifiers(input), input.name, ts.visitNodes(input.typeParameters, visitDeclarationSubtree, ts.isTypeParameterDeclaration), ts.visitNode(input.type, visitDeclarationSubtree, ts.isTypeNode)));
-                case 254 /* InterfaceDeclaration */: {
+                case 256 /* InterfaceDeclaration */: {
                     return cleanup(factory.updateInterfaceDeclaration(input, 
                     /*decorators*/ undefined, ensureModifiers(input), input.name, ensureTypeParams(input, input.typeParameters), transformHeritageClauses(input.heritageClauses), ts.visitNodes(input.members, visitDeclarationSubtree)));
                 }
-                case 252 /* FunctionDeclaration */: {
+                case 254 /* FunctionDeclaration */: {
                     // Generators lose their generator-ness, excepting their return type
                     var clean = cleanup(factory.updateFunctionDeclaration(input, 
                     /*decorators*/ undefined, ensureModifiers(input), 
                     /*asteriskToken*/ undefined, input.name, ensureTypeParams(input, input.typeParameters), updateParamsList(input, input.parameters), ensureType(input, input.type), 
                     /*body*/ undefined));
-                    if (clean && resolver.isExpandoFunctionDeclaration(input)) {
+                    if (clean && resolver.isExpandoFunctionDeclaration(input) && shouldEmitFunctionProperties(input)) {
                         var props = resolver.getPropertiesOfContainerFunction(input);
                         // Use parseNodeFactory so it is usable as an enclosing declaration
                         var fakespace_1 = ts.parseNodeFactory.createModuleDeclaration(/*decorators*/ undefined, /*modifiers*/ undefined, clean.name || factory.createIdentifier("_default"), factory.createModuleBlock([]), 16 /* Namespace */);
@@ -102327,7 +104505,7 @@
                                 exportMappings_1.push([name, nameStr]);
                             }
                             var varDecl = factory.createVariableDeclaration(name, /*exclamationToken*/ undefined, type, /*initializer*/ undefined);
-                            return factory.createVariableStatement(isNonContextualKeywordName ? undefined : [factory.createToken(92 /* ExportKeyword */)], factory.createVariableDeclarationList([varDecl]));
+                            return factory.createVariableStatement(isNonContextualKeywordName ? undefined : [factory.createToken(93 /* ExportKeyword */)], factory.createVariableDeclarationList([varDecl]));
                         });
                         if (!exportMappings_1.length) {
                             declarations = ts.mapDefined(declarations, function (declaration) { return factory.updateModifiers(declaration, 0 /* None */); });
@@ -102366,10 +104544,10 @@
                         return clean;
                     }
                 }
-                case 257 /* ModuleDeclaration */: {
+                case 259 /* ModuleDeclaration */: {
                     needsDeclare = false;
                     var inner = input.body;
-                    if (inner && inner.kind === 258 /* ModuleBlock */) {
+                    if (inner && inner.kind === 260 /* ModuleBlock */) {
                         var oldNeedsScopeFix = needsScopeFixMarker;
                         var oldHasScopeFix = resultHasScopeMarker;
                         resultHasScopeMarker = false;
@@ -102385,7 +104563,7 @@
                         // 3. Some things are exported, some are not, and there's no marker - add an empty marker
                         if (!ts.isGlobalScopeAugmentation(input) && !hasScopeMarker(lateStatements) && !resultHasScopeMarker) {
                             if (needsScopeFixMarker) {
-                                lateStatements = factory.createNodeArray(__spreadArray(__spreadArray([], lateStatements), [ts.createEmptyExports(factory)]));
+                                lateStatements = factory.createNodeArray(__spreadArray(__spreadArray([], lateStatements, true), [ts.createEmptyExports(factory)], false));
                             }
                             else {
                                 lateStatements = ts.visitNodes(lateStatements, stripExportModifiers);
@@ -102412,7 +104590,7 @@
                         /*decorators*/ undefined, mods, input.name, body));
                     }
                 }
-                case 253 /* ClassDeclaration */: {
+                case 255 /* ClassDeclaration */: {
                     errorNameNode = input.name;
                     errorFallbackNode = input;
                     var modifiers = factory.createNodeArray(ensureModifiers(input));
@@ -102425,7 +104603,7 @@
                             if (!ts.hasSyntacticModifier(param, 16476 /* ParameterPropertyModifier */) || shouldStripInternal(param))
                                 return;
                             getSymbolAccessibilityDiagnostic = ts.createGetSymbolAccessibilityDiagnosticForNode(param);
-                            if (param.name.kind === 78 /* Identifier */) {
+                            if (param.name.kind === 79 /* Identifier */) {
                                 return preserveJsDoc(factory.createPropertyDeclaration(
                                 /*decorators*/ undefined, ensureModifiers(param), param.name, param.questionToken, ensureType(param, param.type), ensureNoInitializer(param)), param);
                             }
@@ -102467,7 +104645,7 @@
                     var memberNodes = ts.concatenate(ts.concatenate(privateIdentifier, parameterProperties), ts.visitNodes(input.members, visitDeclarationSubtree));
                     var members = factory.createNodeArray(memberNodes);
                     var extendsClause_1 = ts.getEffectiveBaseTypeNode(input);
-                    if (extendsClause_1 && !ts.isEntityNameExpression(extendsClause_1.expression) && extendsClause_1.expression.kind !== 103 /* NullKeyword */) {
+                    if (extendsClause_1 && !ts.isEntityNameExpression(extendsClause_1.expression) && extendsClause_1.expression.kind !== 104 /* NullKeyword */) {
                         // We must add a temporary declaration for the extends clause expression
                         var oldId = input.name ? ts.unescapeLeadingUnderscores(input.name.escapedText) : "default";
                         var newId_1 = factory.createUniqueName(oldId + "_base", 16 /* Optimistic */);
@@ -102477,16 +104655,16 @@
                             typeName: input.name
                         }); };
                         var varDecl = factory.createVariableDeclaration(newId_1, /*exclamationToken*/ undefined, resolver.createTypeOfExpression(extendsClause_1.expression, input, declarationEmitNodeBuilderFlags, symbolTracker), /*initializer*/ undefined);
-                        var statement = factory.createVariableStatement(needsDeclare ? [factory.createModifier(133 /* DeclareKeyword */)] : [], factory.createVariableDeclarationList([varDecl], 2 /* Const */));
+                        var statement = factory.createVariableStatement(needsDeclare ? [factory.createModifier(134 /* DeclareKeyword */)] : [], factory.createVariableDeclarationList([varDecl], 2 /* Const */));
                         var heritageClauses = factory.createNodeArray(ts.map(input.heritageClauses, function (clause) {
-                            if (clause.token === 93 /* ExtendsKeyword */) {
+                            if (clause.token === 94 /* ExtendsKeyword */) {
                                 var oldDiag_2 = getSymbolAccessibilityDiagnostic;
                                 getSymbolAccessibilityDiagnostic = ts.createGetSymbolAccessibilityDiagnosticForNode(clause.types[0]);
                                 var newClause = factory.updateHeritageClause(clause, ts.map(clause.types, function (t) { return factory.updateExpressionWithTypeArguments(t, newId_1, ts.visitNodes(t.typeArguments, visitDeclarationSubtree)); }));
                                 getSymbolAccessibilityDiagnostic = oldDiag_2;
                                 return newClause;
                             }
-                            return factory.updateHeritageClause(clause, ts.visitNodes(factory.createNodeArray(ts.filter(clause.types, function (t) { return ts.isEntityNameExpression(t.expression) || t.expression.kind === 103 /* NullKeyword */; })), visitDeclarationSubtree));
+                            return factory.updateHeritageClause(clause, ts.visitNodes(factory.createNodeArray(ts.filter(clause.types, function (t) { return ts.isEntityNameExpression(t.expression) || t.expression.kind === 104 /* NullKeyword */; })), visitDeclarationSubtree));
                         }));
                         return [statement, cleanup(factory.updateClassDeclaration(input, 
                             /*decorators*/ undefined, modifiers, input.name, typeParameters, heritageClauses, members))]; // TODO: GH#18217
@@ -102497,10 +104675,10 @@
                         /*decorators*/ undefined, modifiers, input.name, typeParameters, heritageClauses, members));
                     }
                 }
-                case 233 /* VariableStatement */: {
+                case 235 /* VariableStatement */: {
                     return cleanup(transformVariableStatement(input));
                 }
-                case 256 /* EnumDeclaration */: {
+                case 258 /* EnumDeclaration */: {
                     return cleanup(factory.updateEnumDeclaration(input, /*decorators*/ undefined, factory.createNodeArray(ensureModifiers(input)), input.name, factory.createNodeArray(ts.mapDefined(input.members, function (m) {
                         if (shouldStripInternal(m))
                             return;
@@ -102519,7 +104697,7 @@
                 if (canProdiceDiagnostic) {
                     getSymbolAccessibilityDiagnostic = oldDiag;
                 }
-                if (input.kind === 257 /* ModuleDeclaration */) {
+                if (input.kind === 259 /* ModuleDeclaration */) {
                     needsDeclare = previousNeedsDeclare;
                 }
                 if (node === input) {
@@ -102542,7 +104720,7 @@
             return ts.flatten(ts.mapDefined(d.elements, function (e) { return recreateBindingElement(e); }));
         }
         function recreateBindingElement(e) {
-            if (e.kind === 223 /* OmittedExpression */) {
+            if (e.kind === 225 /* OmittedExpression */) {
                 return;
             }
             if (e.name) {
@@ -102592,7 +104770,7 @@
         function ensureModifierFlags(node) {
             var mask = 27647 /* All */ ^ (4 /* Public */ | 256 /* Async */ | 16384 /* Override */); // No async and override modifiers in declaration files
             var additions = (needsDeclare && !isAlwaysType(node)) ? 2 /* Ambient */ : 0 /* None */;
-            var parentIsFile = node.parent.kind === 298 /* SourceFile */;
+            var parentIsFile = node.parent.kind === 300 /* SourceFile */;
             if (!parentIsFile || (isBundledEmit && parentIsFile && ts.isExternalModule(node.parent))) {
                 mask ^= 2 /* Ambient */;
                 additions = 0 /* None */;
@@ -102615,13 +104793,13 @@
         }
         function transformHeritageClauses(nodes) {
             return factory.createNodeArray(ts.filter(ts.map(nodes, function (clause) { return factory.updateHeritageClause(clause, ts.visitNodes(factory.createNodeArray(ts.filter(clause.types, function (t) {
-                return ts.isEntityNameExpression(t.expression) || (clause.token === 93 /* ExtendsKeyword */ && t.expression.kind === 103 /* NullKeyword */);
+                return ts.isEntityNameExpression(t.expression) || (clause.token === 94 /* ExtendsKeyword */ && t.expression.kind === 104 /* NullKeyword */);
             })), visitDeclarationSubtree)); }), function (clause) { return clause.types && !!clause.types.length; }));
         }
     }
     ts.transformDeclarations = transformDeclarations;
     function isAlwaysType(node) {
-        if (node.kind === 254 /* InterfaceDeclaration */) {
+        if (node.kind === 256 /* InterfaceDeclaration */) {
             return true;
         }
         return false;
@@ -102646,7 +104824,7 @@
     }
     function getTypeAnnotationFromAccessor(accessor) {
         if (accessor) {
-            return accessor.kind === 168 /* GetAccessor */
+            return accessor.kind === 170 /* GetAccessor */
                 ? accessor.type // Getter - return type
                 : accessor.parameters.length > 0
                     ? accessor.parameters[0].type // Setter parameter type
@@ -102655,52 +104833,52 @@
     }
     function canHaveLiteralInitializer(node) {
         switch (node.kind) {
-            case 164 /* PropertyDeclaration */:
-            case 163 /* PropertySignature */:
+            case 165 /* PropertyDeclaration */:
+            case 164 /* PropertySignature */:
                 return !ts.hasEffectiveModifier(node, 8 /* Private */);
-            case 161 /* Parameter */:
-            case 250 /* VariableDeclaration */:
+            case 162 /* Parameter */:
+            case 252 /* VariableDeclaration */:
                 return true;
         }
         return false;
     }
     function isPreservedDeclarationStatement(node) {
         switch (node.kind) {
-            case 252 /* FunctionDeclaration */:
-            case 257 /* ModuleDeclaration */:
-            case 261 /* ImportEqualsDeclaration */:
-            case 254 /* InterfaceDeclaration */:
-            case 253 /* ClassDeclaration */:
-            case 255 /* TypeAliasDeclaration */:
-            case 256 /* EnumDeclaration */:
-            case 233 /* VariableStatement */:
-            case 262 /* ImportDeclaration */:
-            case 268 /* ExportDeclaration */:
-            case 267 /* ExportAssignment */:
+            case 254 /* FunctionDeclaration */:
+            case 259 /* ModuleDeclaration */:
+            case 263 /* ImportEqualsDeclaration */:
+            case 256 /* InterfaceDeclaration */:
+            case 255 /* ClassDeclaration */:
+            case 257 /* TypeAliasDeclaration */:
+            case 258 /* EnumDeclaration */:
+            case 235 /* VariableStatement */:
+            case 264 /* ImportDeclaration */:
+            case 270 /* ExportDeclaration */:
+            case 269 /* ExportAssignment */:
                 return true;
         }
         return false;
     }
     function isProcessedComponent(node) {
         switch (node.kind) {
-            case 171 /* ConstructSignature */:
-            case 167 /* Constructor */:
-            case 166 /* MethodDeclaration */:
-            case 168 /* GetAccessor */:
-            case 169 /* SetAccessor */:
-            case 164 /* PropertyDeclaration */:
-            case 163 /* PropertySignature */:
-            case 165 /* MethodSignature */:
-            case 170 /* CallSignature */:
-            case 172 /* IndexSignature */:
-            case 250 /* VariableDeclaration */:
-            case 160 /* TypeParameter */:
-            case 224 /* ExpressionWithTypeArguments */:
-            case 174 /* TypeReference */:
-            case 185 /* ConditionalType */:
-            case 175 /* FunctionType */:
-            case 176 /* ConstructorType */:
-            case 196 /* ImportType */:
+            case 173 /* ConstructSignature */:
+            case 169 /* Constructor */:
+            case 167 /* MethodDeclaration */:
+            case 170 /* GetAccessor */:
+            case 171 /* SetAccessor */:
+            case 165 /* PropertyDeclaration */:
+            case 164 /* PropertySignature */:
+            case 166 /* MethodSignature */:
+            case 172 /* CallSignature */:
+            case 174 /* IndexSignature */:
+            case 252 /* VariableDeclaration */:
+            case 161 /* TypeParameter */:
+            case 226 /* ExpressionWithTypeArguments */:
+            case 176 /* TypeReference */:
+            case 187 /* ConditionalType */:
+            case 177 /* FunctionType */:
+            case 178 /* ConstructorType */:
+            case 198 /* ImportType */:
                 return true;
         }
         return false;
@@ -102835,7 +105013,7 @@
      * @param allowDtsFiles A value indicating whether to allow the transformation of .d.ts files.
      */
     function transformNodes(resolver, host, factory, options, nodes, transformers, allowDtsFiles) {
-        var enabledSyntaxKindFeatures = new Array(345 /* Count */);
+        var enabledSyntaxKindFeatures = new Array(350 /* Count */);
         var lexicalEnvironmentVariableDeclarations;
         var lexicalEnvironmentFunctionDeclarations;
         var lexicalEnvironmentStatements;
@@ -102917,7 +105095,7 @@
         var transformed = [];
         for (var _a = 0, nodes_3 = nodes; _a < nodes_3.length; _a++) {
             var node = nodes_3[_a];
-            ts.tracing === null || ts.tracing === void 0 ? void 0 : ts.tracing.push("emit" /* Emit */, "transformNodes", node.kind === 298 /* SourceFile */ ? { path: node.path } : { kind: node.kind, pos: node.pos, end: node.end });
+            ts.tracing === null || ts.tracing === void 0 ? void 0 : ts.tracing.push("emit" /* Emit */, "transformNodes", node.kind === 300 /* SourceFile */ ? { path: node.path } : { kind: node.kind, pos: node.pos, end: node.end });
             transformed.push((allowDtsFiles ? transformation : transformRoot)(node));
             ts.tracing === null || ts.tracing === void 0 ? void 0 : ts.tracing.pop();
         }
@@ -103090,7 +105268,7 @@
                 lexicalEnvironmentFunctionDeclarations ||
                 lexicalEnvironmentStatements) {
                 if (lexicalEnvironmentFunctionDeclarations) {
-                    statements = __spreadArray([], lexicalEnvironmentFunctionDeclarations);
+                    statements = __spreadArray([], lexicalEnvironmentFunctionDeclarations, true);
                 }
                 if (lexicalEnvironmentVariableDeclarations) {
                     var statement = factory.createVariableStatement(
@@ -103105,10 +105283,10 @@
                 }
                 if (lexicalEnvironmentStatements) {
                     if (!statements) {
-                        statements = __spreadArray([], lexicalEnvironmentStatements);
+                        statements = __spreadArray([], lexicalEnvironmentStatements, true);
                     }
                     else {
-                        statements = __spreadArray(__spreadArray([], statements), lexicalEnvironmentStatements);
+                        statements = __spreadArray(__spreadArray([], statements, true), lexicalEnvironmentStatements, true);
                     }
                 }
             }
@@ -103323,7 +105501,7 @@
     /*@internal*/
     function getOutputPathsFor(sourceFile, host, forceDtsPaths) {
         var options = host.getCompilerOptions();
-        if (sourceFile.kind === 299 /* Bundle */) {
+        if (sourceFile.kind === 301 /* Bundle */) {
             return getOutputPathsForBundle(options, forceDtsPaths);
         }
         else {
@@ -103690,7 +105868,7 @@
                     extendedDiagnostics: compilerOptions.extendedDiagnostics,
                     // Explicitly do not passthru either `inline` option
                 });
-                if (forceDtsEmit && declarationTransform.transformed[0].kind === 298 /* SourceFile */) {
+                if (forceDtsEmit && declarationTransform.transformed[0].kind === 300 /* SourceFile */) {
                     var sourceFile = declarationTransform.transformed[0];
                     exportedModulesFromDeclarationEmit = sourceFile.exportedModulesFromDeclarationEmit;
                 }
@@ -103701,7 +105879,7 @@
         }
         function collectLinkedAliases(node) {
             if (ts.isExportAssignment(node)) {
-                if (node.expression.kind === 78 /* Identifier */) {
+                if (node.expression.kind === 79 /* Identifier */) {
                     resolver.collectLinkedAliases(node.expression, /*setVisibility*/ true);
                 }
                 return;
@@ -103713,8 +105891,8 @@
             ts.forEachChild(node, collectLinkedAliases);
         }
         function printSourceFileOrBundle(jsFilePath, sourceMapFilePath, sourceFileOrBundle, printer, mapOptions) {
-            var bundle = sourceFileOrBundle.kind === 299 /* Bundle */ ? sourceFileOrBundle : undefined;
-            var sourceFile = sourceFileOrBundle.kind === 298 /* SourceFile */ ? sourceFileOrBundle : undefined;
+            var bundle = sourceFileOrBundle.kind === 301 /* Bundle */ ? sourceFileOrBundle : undefined;
+            var sourceFile = sourceFileOrBundle.kind === 300 /* SourceFile */ ? sourceFileOrBundle : undefined;
             var sourceFiles = bundle ? bundle.sourceFiles : [sourceFile];
             var sourceMapGenerator;
             if (shouldEmitSourceMaps(mapOptions, sourceFileOrBundle)) {
@@ -103755,7 +105933,7 @@
         }
         function shouldEmitSourceMaps(mapOptions, sourceFileOrBundle) {
             return (mapOptions.sourceMap || mapOptions.inlineSourceMap)
-                && (sourceFileOrBundle.kind !== 298 /* SourceFile */ || !ts.fileExtensionIs(sourceFileOrBundle.fileName, ".json" /* Json */));
+                && (sourceFileOrBundle.kind !== 300 /* SourceFile */ || !ts.fileExtensionIs(sourceFileOrBundle.fileName, ".json" /* Json */));
         }
         function getSourceRoot(mapOptions) {
             // Normalize source root and make sure it has trailing "/" so that it can be used to combine paths with the
@@ -103921,7 +106099,7 @@
         var prependNodes = ts.createPrependNodes(config.projectReferences, getCommandLine, function (f) { return host.readFile(f); });
         var sourceFilesForJsEmit = createSourceFilesFromBundleBuildInfo(buildInfo.bundle, buildInfoDirectory, host);
         var emitHost = {
-            getPrependNodes: ts.memoize(function () { return __spreadArray(__spreadArray([], prependNodes), [ownPrependInput]); }),
+            getPrependNodes: ts.memoize(function () { return __spreadArray(__spreadArray([], prependNodes, true), [ownPrependInput], false); }),
             getCanonicalFileName: host.getCanonicalFileName,
             getCommonSourceDirectory: function () { return ts.getNormalizedAbsolutePath(buildInfo.bundle.commonSourceDirectory, buildInfoDirectory); },
             getCompilerOptions: function () { return config.options; },
@@ -104066,9 +106244,9 @@
                     break;
             }
             switch (node.kind) {
-                case 298 /* SourceFile */: return printFile(node);
-                case 299 /* Bundle */: return printBundle(node);
-                case 300 /* UnparsedSource */: return printUnparsedSource(node);
+                case 300 /* SourceFile */: return printFile(node);
+                case 301 /* Bundle */: return printBundle(node);
+                case 302 /* UnparsedSource */: return printUnparsedSource(node);
             }
             writeNode(hint, node, sourceFile, beginPrint());
             return endPrint();
@@ -104388,316 +106566,318 @@
                     case 17 /* TemplateTail */:
                         return emitLiteral(node, /*jsxAttributeEscape*/ false);
                     // Identifiers
-                    case 78 /* Identifier */:
+                    case 79 /* Identifier */:
                         return emitIdentifier(node);
                     // PrivateIdentifiers
-                    case 79 /* PrivateIdentifier */:
+                    case 80 /* PrivateIdentifier */:
                         return emitPrivateIdentifier(node);
                     // Parse tree nodes
                     // Names
-                    case 158 /* QualifiedName */:
+                    case 159 /* QualifiedName */:
                         return emitQualifiedName(node);
-                    case 159 /* ComputedPropertyName */:
+                    case 160 /* ComputedPropertyName */:
                         return emitComputedPropertyName(node);
                     // Signature elements
-                    case 160 /* TypeParameter */:
+                    case 161 /* TypeParameter */:
                         return emitTypeParameter(node);
-                    case 161 /* Parameter */:
+                    case 162 /* Parameter */:
                         return emitParameter(node);
-                    case 162 /* Decorator */:
+                    case 163 /* Decorator */:
                         return emitDecorator(node);
                     // Type members
-                    case 163 /* PropertySignature */:
+                    case 164 /* PropertySignature */:
                         return emitPropertySignature(node);
-                    case 164 /* PropertyDeclaration */:
+                    case 165 /* PropertyDeclaration */:
                         return emitPropertyDeclaration(node);
-                    case 165 /* MethodSignature */:
+                    case 166 /* MethodSignature */:
                         return emitMethodSignature(node);
-                    case 166 /* MethodDeclaration */:
+                    case 167 /* MethodDeclaration */:
                         return emitMethodDeclaration(node);
-                    case 167 /* Constructor */:
+                    case 168 /* ClassStaticBlockDeclaration */:
+                        return emitClassStaticBlockDeclaration(node);
+                    case 169 /* Constructor */:
                         return emitConstructor(node);
-                    case 168 /* GetAccessor */:
-                    case 169 /* SetAccessor */:
+                    case 170 /* GetAccessor */:
+                    case 171 /* SetAccessor */:
                         return emitAccessorDeclaration(node);
-                    case 170 /* CallSignature */:
+                    case 172 /* CallSignature */:
                         return emitCallSignature(node);
-                    case 171 /* ConstructSignature */:
+                    case 173 /* ConstructSignature */:
                         return emitConstructSignature(node);
-                    case 172 /* IndexSignature */:
+                    case 174 /* IndexSignature */:
                         return emitIndexSignature(node);
                     // Types
-                    case 173 /* TypePredicate */:
+                    case 175 /* TypePredicate */:
                         return emitTypePredicate(node);
-                    case 174 /* TypeReference */:
+                    case 176 /* TypeReference */:
                         return emitTypeReference(node);
-                    case 175 /* FunctionType */:
+                    case 177 /* FunctionType */:
                         return emitFunctionType(node);
-                    case 176 /* ConstructorType */:
+                    case 178 /* ConstructorType */:
                         return emitConstructorType(node);
-                    case 177 /* TypeQuery */:
+                    case 179 /* TypeQuery */:
                         return emitTypeQuery(node);
-                    case 178 /* TypeLiteral */:
+                    case 180 /* TypeLiteral */:
                         return emitTypeLiteral(node);
-                    case 179 /* ArrayType */:
+                    case 181 /* ArrayType */:
                         return emitArrayType(node);
-                    case 180 /* TupleType */:
+                    case 182 /* TupleType */:
                         return emitTupleType(node);
-                    case 181 /* OptionalType */:
+                    case 183 /* OptionalType */:
                         return emitOptionalType(node);
                     // SyntaxKind.RestType is handled below
-                    case 183 /* UnionType */:
+                    case 185 /* UnionType */:
                         return emitUnionType(node);
-                    case 184 /* IntersectionType */:
+                    case 186 /* IntersectionType */:
                         return emitIntersectionType(node);
-                    case 185 /* ConditionalType */:
+                    case 187 /* ConditionalType */:
                         return emitConditionalType(node);
-                    case 186 /* InferType */:
+                    case 188 /* InferType */:
                         return emitInferType(node);
-                    case 187 /* ParenthesizedType */:
+                    case 189 /* ParenthesizedType */:
                         return emitParenthesizedType(node);
-                    case 224 /* ExpressionWithTypeArguments */:
+                    case 226 /* ExpressionWithTypeArguments */:
                         return emitExpressionWithTypeArguments(node);
-                    case 188 /* ThisType */:
+                    case 190 /* ThisType */:
                         return emitThisType();
-                    case 189 /* TypeOperator */:
+                    case 191 /* TypeOperator */:
                         return emitTypeOperator(node);
-                    case 190 /* IndexedAccessType */:
+                    case 192 /* IndexedAccessType */:
                         return emitIndexedAccessType(node);
-                    case 191 /* MappedType */:
+                    case 193 /* MappedType */:
                         return emitMappedType(node);
-                    case 192 /* LiteralType */:
+                    case 194 /* LiteralType */:
                         return emitLiteralType(node);
-                    case 193 /* NamedTupleMember */:
+                    case 195 /* NamedTupleMember */:
                         return emitNamedTupleMember(node);
-                    case 194 /* TemplateLiteralType */:
+                    case 196 /* TemplateLiteralType */:
                         return emitTemplateType(node);
-                    case 195 /* TemplateLiteralTypeSpan */:
+                    case 197 /* TemplateLiteralTypeSpan */:
                         return emitTemplateTypeSpan(node);
-                    case 196 /* ImportType */:
+                    case 198 /* ImportType */:
                         return emitImportTypeNode(node);
                     // Binding patterns
-                    case 197 /* ObjectBindingPattern */:
+                    case 199 /* ObjectBindingPattern */:
                         return emitObjectBindingPattern(node);
-                    case 198 /* ArrayBindingPattern */:
+                    case 200 /* ArrayBindingPattern */:
                         return emitArrayBindingPattern(node);
-                    case 199 /* BindingElement */:
+                    case 201 /* BindingElement */:
                         return emitBindingElement(node);
                     // Misc
-                    case 229 /* TemplateSpan */:
+                    case 231 /* TemplateSpan */:
                         return emitTemplateSpan(node);
-                    case 230 /* SemicolonClassElement */:
+                    case 232 /* SemicolonClassElement */:
                         return emitSemicolonClassElement();
                     // Statements
-                    case 231 /* Block */:
+                    case 233 /* Block */:
                         return emitBlock(node);
-                    case 233 /* VariableStatement */:
+                    case 235 /* VariableStatement */:
                         return emitVariableStatement(node);
-                    case 232 /* EmptyStatement */:
+                    case 234 /* EmptyStatement */:
                         return emitEmptyStatement(/*isEmbeddedStatement*/ false);
-                    case 234 /* ExpressionStatement */:
+                    case 236 /* ExpressionStatement */:
                         return emitExpressionStatement(node);
-                    case 235 /* IfStatement */:
+                    case 237 /* IfStatement */:
                         return emitIfStatement(node);
-                    case 236 /* DoStatement */:
+                    case 238 /* DoStatement */:
                         return emitDoStatement(node);
-                    case 237 /* WhileStatement */:
+                    case 239 /* WhileStatement */:
                         return emitWhileStatement(node);
-                    case 238 /* ForStatement */:
+                    case 240 /* ForStatement */:
                         return emitForStatement(node);
-                    case 239 /* ForInStatement */:
+                    case 241 /* ForInStatement */:
                         return emitForInStatement(node);
-                    case 240 /* ForOfStatement */:
+                    case 242 /* ForOfStatement */:
                         return emitForOfStatement(node);
-                    case 241 /* ContinueStatement */:
+                    case 243 /* ContinueStatement */:
                         return emitContinueStatement(node);
-                    case 242 /* BreakStatement */:
+                    case 244 /* BreakStatement */:
                         return emitBreakStatement(node);
-                    case 243 /* ReturnStatement */:
+                    case 245 /* ReturnStatement */:
                         return emitReturnStatement(node);
-                    case 244 /* WithStatement */:
+                    case 246 /* WithStatement */:
                         return emitWithStatement(node);
-                    case 245 /* SwitchStatement */:
+                    case 247 /* SwitchStatement */:
                         return emitSwitchStatement(node);
-                    case 246 /* LabeledStatement */:
+                    case 248 /* LabeledStatement */:
                         return emitLabeledStatement(node);
-                    case 247 /* ThrowStatement */:
+                    case 249 /* ThrowStatement */:
                         return emitThrowStatement(node);
-                    case 248 /* TryStatement */:
+                    case 250 /* TryStatement */:
                         return emitTryStatement(node);
-                    case 249 /* DebuggerStatement */:
+                    case 251 /* DebuggerStatement */:
                         return emitDebuggerStatement(node);
                     // Declarations
-                    case 250 /* VariableDeclaration */:
+                    case 252 /* VariableDeclaration */:
                         return emitVariableDeclaration(node);
-                    case 251 /* VariableDeclarationList */:
+                    case 253 /* VariableDeclarationList */:
                         return emitVariableDeclarationList(node);
-                    case 252 /* FunctionDeclaration */:
+                    case 254 /* FunctionDeclaration */:
                         return emitFunctionDeclaration(node);
-                    case 253 /* ClassDeclaration */:
+                    case 255 /* ClassDeclaration */:
                         return emitClassDeclaration(node);
-                    case 254 /* InterfaceDeclaration */:
+                    case 256 /* InterfaceDeclaration */:
                         return emitInterfaceDeclaration(node);
-                    case 255 /* TypeAliasDeclaration */:
+                    case 257 /* TypeAliasDeclaration */:
                         return emitTypeAliasDeclaration(node);
-                    case 256 /* EnumDeclaration */:
+                    case 258 /* EnumDeclaration */:
                         return emitEnumDeclaration(node);
-                    case 257 /* ModuleDeclaration */:
+                    case 259 /* ModuleDeclaration */:
                         return emitModuleDeclaration(node);
-                    case 258 /* ModuleBlock */:
+                    case 260 /* ModuleBlock */:
                         return emitModuleBlock(node);
-                    case 259 /* CaseBlock */:
+                    case 261 /* CaseBlock */:
                         return emitCaseBlock(node);
-                    case 260 /* NamespaceExportDeclaration */:
+                    case 262 /* NamespaceExportDeclaration */:
                         return emitNamespaceExportDeclaration(node);
-                    case 261 /* ImportEqualsDeclaration */:
+                    case 263 /* ImportEqualsDeclaration */:
                         return emitImportEqualsDeclaration(node);
-                    case 262 /* ImportDeclaration */:
+                    case 264 /* ImportDeclaration */:
                         return emitImportDeclaration(node);
-                    case 263 /* ImportClause */:
+                    case 265 /* ImportClause */:
                         return emitImportClause(node);
-                    case 264 /* NamespaceImport */:
+                    case 266 /* NamespaceImport */:
                         return emitNamespaceImport(node);
-                    case 270 /* NamespaceExport */:
+                    case 272 /* NamespaceExport */:
                         return emitNamespaceExport(node);
-                    case 265 /* NamedImports */:
+                    case 267 /* NamedImports */:
                         return emitNamedImports(node);
-                    case 266 /* ImportSpecifier */:
+                    case 268 /* ImportSpecifier */:
                         return emitImportSpecifier(node);
-                    case 267 /* ExportAssignment */:
+                    case 269 /* ExportAssignment */:
                         return emitExportAssignment(node);
-                    case 268 /* ExportDeclaration */:
+                    case 270 /* ExportDeclaration */:
                         return emitExportDeclaration(node);
-                    case 269 /* NamedExports */:
+                    case 271 /* NamedExports */:
                         return emitNamedExports(node);
-                    case 271 /* ExportSpecifier */:
+                    case 273 /* ExportSpecifier */:
                         return emitExportSpecifier(node);
-                    case 272 /* MissingDeclaration */:
+                    case 274 /* MissingDeclaration */:
                         return;
                     // Module references
-                    case 273 /* ExternalModuleReference */:
+                    case 275 /* ExternalModuleReference */:
                         return emitExternalModuleReference(node);
                     // JSX (non-expression)
                     case 11 /* JsxText */:
                         return emitJsxText(node);
-                    case 276 /* JsxOpeningElement */:
-                    case 279 /* JsxOpeningFragment */:
+                    case 278 /* JsxOpeningElement */:
+                    case 281 /* JsxOpeningFragment */:
                         return emitJsxOpeningElementOrFragment(node);
-                    case 277 /* JsxClosingElement */:
-                    case 280 /* JsxClosingFragment */:
+                    case 279 /* JsxClosingElement */:
+                    case 282 /* JsxClosingFragment */:
                         return emitJsxClosingElementOrFragment(node);
-                    case 281 /* JsxAttribute */:
+                    case 283 /* JsxAttribute */:
                         return emitJsxAttribute(node);
-                    case 282 /* JsxAttributes */:
+                    case 284 /* JsxAttributes */:
                         return emitJsxAttributes(node);
-                    case 283 /* JsxSpreadAttribute */:
+                    case 285 /* JsxSpreadAttribute */:
                         return emitJsxSpreadAttribute(node);
-                    case 284 /* JsxExpression */:
+                    case 286 /* JsxExpression */:
                         return emitJsxExpression(node);
                     // Clauses
-                    case 285 /* CaseClause */:
+                    case 287 /* CaseClause */:
                         return emitCaseClause(node);
-                    case 286 /* DefaultClause */:
+                    case 288 /* DefaultClause */:
                         return emitDefaultClause(node);
-                    case 287 /* HeritageClause */:
+                    case 289 /* HeritageClause */:
                         return emitHeritageClause(node);
-                    case 288 /* CatchClause */:
+                    case 290 /* CatchClause */:
                         return emitCatchClause(node);
                     // Property assignments
-                    case 289 /* PropertyAssignment */:
+                    case 291 /* PropertyAssignment */:
                         return emitPropertyAssignment(node);
-                    case 290 /* ShorthandPropertyAssignment */:
+                    case 292 /* ShorthandPropertyAssignment */:
                         return emitShorthandPropertyAssignment(node);
-                    case 291 /* SpreadAssignment */:
+                    case 293 /* SpreadAssignment */:
                         return emitSpreadAssignment(node);
                     // Enum
-                    case 292 /* EnumMember */:
+                    case 294 /* EnumMember */:
                         return emitEnumMember(node);
                     // Unparsed
-                    case 293 /* UnparsedPrologue */:
+                    case 295 /* UnparsedPrologue */:
                         return writeUnparsedNode(node);
-                    case 300 /* UnparsedSource */:
-                    case 294 /* UnparsedPrepend */:
+                    case 302 /* UnparsedSource */:
+                    case 296 /* UnparsedPrepend */:
                         return emitUnparsedSourceOrPrepend(node);
-                    case 295 /* UnparsedText */:
-                    case 296 /* UnparsedInternalText */:
+                    case 297 /* UnparsedText */:
+                    case 298 /* UnparsedInternalText */:
                         return emitUnparsedTextLike(node);
-                    case 297 /* UnparsedSyntheticReference */:
+                    case 299 /* UnparsedSyntheticReference */:
                         return emitUnparsedSyntheticReference(node);
                     // Top-level nodes
-                    case 298 /* SourceFile */:
+                    case 300 /* SourceFile */:
                         return emitSourceFile(node);
-                    case 299 /* Bundle */:
+                    case 301 /* Bundle */:
                         return ts.Debug.fail("Bundles should be printed using printBundle");
                     // SyntaxKind.UnparsedSource (handled above)
-                    case 301 /* InputFiles */:
+                    case 303 /* InputFiles */:
                         return ts.Debug.fail("InputFiles should not be printed");
                     // JSDoc nodes (only used in codefixes currently)
-                    case 302 /* JSDocTypeExpression */:
+                    case 304 /* JSDocTypeExpression */:
                         return emitJSDocTypeExpression(node);
-                    case 303 /* JSDocNameReference */:
+                    case 305 /* JSDocNameReference */:
                         return emitJSDocNameReference(node);
-                    case 304 /* JSDocAllType */:
+                    case 307 /* JSDocAllType */:
                         return writePunctuation("*");
-                    case 305 /* JSDocUnknownType */:
+                    case 308 /* JSDocUnknownType */:
                         return writePunctuation("?");
-                    case 306 /* JSDocNullableType */:
+                    case 309 /* JSDocNullableType */:
                         return emitJSDocNullableType(node);
-                    case 307 /* JSDocNonNullableType */:
+                    case 310 /* JSDocNonNullableType */:
                         return emitJSDocNonNullableType(node);
-                    case 308 /* JSDocOptionalType */:
+                    case 311 /* JSDocOptionalType */:
                         return emitJSDocOptionalType(node);
-                    case 309 /* JSDocFunctionType */:
+                    case 312 /* JSDocFunctionType */:
                         return emitJSDocFunctionType(node);
-                    case 182 /* RestType */:
-                    case 310 /* JSDocVariadicType */:
+                    case 184 /* RestType */:
+                    case 313 /* JSDocVariadicType */:
                         return emitRestOrJSDocVariadicType(node);
-                    case 311 /* JSDocNamepathType */:
+                    case 314 /* JSDocNamepathType */:
                         return;
-                    case 312 /* JSDocComment */:
+                    case 315 /* JSDocComment */:
                         return emitJSDoc(node);
-                    case 314 /* JSDocTypeLiteral */:
+                    case 317 /* JSDocTypeLiteral */:
                         return emitJSDocTypeLiteral(node);
-                    case 315 /* JSDocSignature */:
+                    case 318 /* JSDocSignature */:
                         return emitJSDocSignature(node);
-                    case 317 /* JSDocTag */:
-                    case 322 /* JSDocClassTag */:
+                    case 322 /* JSDocTag */:
+                    case 327 /* JSDocClassTag */:
                         return emitJSDocSimpleTag(node);
-                    case 318 /* JSDocAugmentsTag */:
-                    case 319 /* JSDocImplementsTag */:
+                    case 323 /* JSDocAugmentsTag */:
+                    case 324 /* JSDocImplementsTag */:
                         return emitJSDocHeritageTag(node);
-                    case 320 /* JSDocAuthorTag */:
-                    case 321 /* JSDocDeprecatedTag */:
+                    case 325 /* JSDocAuthorTag */:
+                    case 326 /* JSDocDeprecatedTag */:
                         return;
                     // SyntaxKind.JSDocClassTag (see JSDocTag, above)
-                    case 323 /* JSDocPublicTag */:
-                    case 324 /* JSDocPrivateTag */:
-                    case 325 /* JSDocProtectedTag */:
-                    case 326 /* JSDocReadonlyTag */:
-                    case 327 /* JSDocOverrideTag */:
+                    case 328 /* JSDocPublicTag */:
+                    case 329 /* JSDocPrivateTag */:
+                    case 330 /* JSDocProtectedTag */:
+                    case 331 /* JSDocReadonlyTag */:
+                    case 332 /* JSDocOverrideTag */:
                         return;
-                    case 328 /* JSDocCallbackTag */:
+                    case 333 /* JSDocCallbackTag */:
                         return emitJSDocCallbackTag(node);
                     // SyntaxKind.JSDocEnumTag (see below)
-                    case 330 /* JSDocParameterTag */:
-                    case 337 /* JSDocPropertyTag */:
+                    case 335 /* JSDocParameterTag */:
+                    case 342 /* JSDocPropertyTag */:
                         return emitJSDocPropertyLikeTag(node);
-                    case 329 /* JSDocEnumTag */:
-                    case 331 /* JSDocReturnTag */:
-                    case 332 /* JSDocThisTag */:
-                    case 333 /* JSDocTypeTag */:
+                    case 334 /* JSDocEnumTag */:
+                    case 336 /* JSDocReturnTag */:
+                    case 337 /* JSDocThisTag */:
+                    case 338 /* JSDocTypeTag */:
                         return emitJSDocSimpleTypedTag(node);
-                    case 334 /* JSDocTemplateTag */:
+                    case 339 /* JSDocTemplateTag */:
                         return emitJSDocTemplateTag(node);
-                    case 335 /* JSDocTypedefTag */:
+                    case 340 /* JSDocTypedefTag */:
                         return emitJSDocTypedefTag(node);
-                    case 336 /* JSDocSeeTag */:
+                    case 341 /* JSDocSeeTag */:
                         return emitJSDocSeeTag(node);
                     // SyntaxKind.JSDocPropertyTag (see JSDocParameterTag, above)
                     // Transformation nodes
-                    case 339 /* NotEmittedStatement */:
-                    case 343 /* EndOfDeclarationMarker */:
-                    case 342 /* MergeDeclarationMarker */:
+                    case 344 /* NotEmittedStatement */:
+                    case 348 /* EndOfDeclarationMarker */:
+                    case 347 /* MergeDeclarationMarker */:
                         return;
                 }
                 if (ts.isExpression(node)) {
@@ -104724,86 +106904,86 @@
                     case 14 /* NoSubstitutionTemplateLiteral */:
                         return emitLiteral(node, /*jsxAttributeEscape*/ false);
                     // Identifiers
-                    case 78 /* Identifier */:
+                    case 79 /* Identifier */:
                         return emitIdentifier(node);
                     // Expressions
-                    case 200 /* ArrayLiteralExpression */:
+                    case 202 /* ArrayLiteralExpression */:
                         return emitArrayLiteralExpression(node);
-                    case 201 /* ObjectLiteralExpression */:
+                    case 203 /* ObjectLiteralExpression */:
                         return emitObjectLiteralExpression(node);
-                    case 202 /* PropertyAccessExpression */:
+                    case 204 /* PropertyAccessExpression */:
                         return emitPropertyAccessExpression(node);
-                    case 203 /* ElementAccessExpression */:
+                    case 205 /* ElementAccessExpression */:
                         return emitElementAccessExpression(node);
-                    case 204 /* CallExpression */:
+                    case 206 /* CallExpression */:
                         return emitCallExpression(node);
-                    case 205 /* NewExpression */:
+                    case 207 /* NewExpression */:
                         return emitNewExpression(node);
-                    case 206 /* TaggedTemplateExpression */:
+                    case 208 /* TaggedTemplateExpression */:
                         return emitTaggedTemplateExpression(node);
-                    case 207 /* TypeAssertionExpression */:
+                    case 209 /* TypeAssertionExpression */:
                         return emitTypeAssertionExpression(node);
-                    case 208 /* ParenthesizedExpression */:
+                    case 210 /* ParenthesizedExpression */:
                         return emitParenthesizedExpression(node);
-                    case 209 /* FunctionExpression */:
+                    case 211 /* FunctionExpression */:
                         return emitFunctionExpression(node);
-                    case 210 /* ArrowFunction */:
+                    case 212 /* ArrowFunction */:
                         return emitArrowFunction(node);
-                    case 211 /* DeleteExpression */:
+                    case 213 /* DeleteExpression */:
                         return emitDeleteExpression(node);
-                    case 212 /* TypeOfExpression */:
+                    case 214 /* TypeOfExpression */:
                         return emitTypeOfExpression(node);
-                    case 213 /* VoidExpression */:
+                    case 215 /* VoidExpression */:
                         return emitVoidExpression(node);
-                    case 214 /* AwaitExpression */:
+                    case 216 /* AwaitExpression */:
                         return emitAwaitExpression(node);
-                    case 215 /* PrefixUnaryExpression */:
+                    case 217 /* PrefixUnaryExpression */:
                         return emitPrefixUnaryExpression(node);
-                    case 216 /* PostfixUnaryExpression */:
+                    case 218 /* PostfixUnaryExpression */:
                         return emitPostfixUnaryExpression(node);
-                    case 217 /* BinaryExpression */:
+                    case 219 /* BinaryExpression */:
                         return emitBinaryExpression(node);
-                    case 218 /* ConditionalExpression */:
+                    case 220 /* ConditionalExpression */:
                         return emitConditionalExpression(node);
-                    case 219 /* TemplateExpression */:
+                    case 221 /* TemplateExpression */:
                         return emitTemplateExpression(node);
-                    case 220 /* YieldExpression */:
+                    case 222 /* YieldExpression */:
                         return emitYieldExpression(node);
-                    case 221 /* SpreadElement */:
+                    case 223 /* SpreadElement */:
                         return emitSpreadElement(node);
-                    case 222 /* ClassExpression */:
+                    case 224 /* ClassExpression */:
                         return emitClassExpression(node);
-                    case 223 /* OmittedExpression */:
+                    case 225 /* OmittedExpression */:
                         return;
-                    case 225 /* AsExpression */:
+                    case 227 /* AsExpression */:
                         return emitAsExpression(node);
-                    case 226 /* NonNullExpression */:
+                    case 228 /* NonNullExpression */:
                         return emitNonNullExpression(node);
-                    case 227 /* MetaProperty */:
+                    case 229 /* MetaProperty */:
                         return emitMetaProperty(node);
-                    case 228 /* SyntheticExpression */:
+                    case 230 /* SyntheticExpression */:
                         return ts.Debug.fail("SyntheticExpression should never be printed.");
                     // JSX
-                    case 274 /* JsxElement */:
+                    case 276 /* JsxElement */:
                         return emitJsxElement(node);
-                    case 275 /* JsxSelfClosingElement */:
+                    case 277 /* JsxSelfClosingElement */:
                         return emitJsxSelfClosingElement(node);
-                    case 278 /* JsxFragment */:
+                    case 280 /* JsxFragment */:
                         return emitJsxFragment(node);
                     // Synthesized list
-                    case 338 /* SyntaxList */:
+                    case 343 /* SyntaxList */:
                         return ts.Debug.fail("SyntaxList should not be printed");
                     // Transformation nodes
-                    case 339 /* NotEmittedStatement */:
+                    case 344 /* NotEmittedStatement */:
                         return;
-                    case 340 /* PartiallyEmittedExpression */:
+                    case 345 /* PartiallyEmittedExpression */:
                         return emitPartiallyEmittedExpression(node);
-                    case 341 /* CommaListExpression */:
+                    case 346 /* CommaListExpression */:
                         return emitCommaList(node);
-                    case 342 /* MergeDeclarationMarker */:
-                    case 343 /* EndOfDeclarationMarker */:
+                    case 347 /* MergeDeclarationMarker */:
+                    case 348 /* EndOfDeclarationMarker */:
                         return;
-                    case 344 /* SyntheticReferenceExpression */:
+                    case 349 /* SyntheticReferenceExpression */:
                         return ts.Debug.fail("SyntheticReferenceExpression should not be printed");
                 }
             }
@@ -104851,7 +107031,7 @@
         }
         function emitHelpers(node) {
             var helpersEmitted = false;
-            var bundle = node.kind === 299 /* Bundle */ ? node : undefined;
+            var bundle = node.kind === 301 /* Bundle */ ? node : undefined;
             if (bundle && moduleKind === ts.ModuleKind.None) {
                 return;
             }
@@ -104951,7 +107131,7 @@
             var pos = getTextPosWithWriteLine();
             writeUnparsedNode(unparsed);
             if (bundleFileInfo) {
-                updateOrPushBundleFileTextLike(pos, writer.getTextPos(), unparsed.kind === 295 /* UnparsedText */ ?
+                updateOrPushBundleFileTextLike(pos, writer.getTextPos(), unparsed.kind === 297 /* UnparsedText */ ?
                     "text" /* Text */ :
                     "internal" /* Internal */);
             }
@@ -104988,7 +107168,7 @@
             emit(node.right);
         }
         function emitEntityName(node) {
-            if (node.kind === 78 /* Identifier */) {
+            if (node.kind === 79 /* Identifier */) {
                 emitExpression(node);
             }
             else {
@@ -105024,7 +107204,7 @@
             emit(node.dotDotDotToken);
             emitNodeWithWriter(node.name, writeParameter);
             emit(node.questionToken);
-            if (node.parent && node.parent.kind === 309 /* JSDocFunctionType */ && !node.name) {
+            if (node.parent && node.parent.kind === 312 /* JSDocFunctionType */ && !node.name) {
                 emit(node.type);
             }
             else {
@@ -105078,6 +107258,12 @@
             emit(node.questionToken);
             emitSignatureAndBody(node, emitSignatureHead);
         }
+        function emitClassStaticBlockDeclaration(node) {
+            emitDecorators(node, node.decorators);
+            emitModifiers(node, node.modifiers);
+            writeKeyword("static");
+            emitBlockFunctionBody(node.body);
+        }
         function emitConstructor(node) {
             emitModifiers(node, node.modifiers);
             writeKeyword("constructor");
@@ -105086,7 +107272,7 @@
         function emitAccessorDeclaration(node) {
             emitDecorators(node, node.decorators);
             emitModifiers(node, node.modifiers);
-            writeKeyword(node.kind === 168 /* GetAccessor */ ? "get" : "set");
+            writeKeyword(node.kind === 170 /* GetAccessor */ ? "get" : "set");
             writeSpace();
             emit(node.name);
             emitSignatureAndBody(node, emitSignatureHead);
@@ -105283,7 +107469,7 @@
             }
             if (node.readonlyToken) {
                 emit(node.readonlyToken);
-                if (node.readonlyToken.kind !== 142 /* ReadonlyKeyword */) {
+                if (node.readonlyToken.kind !== 143 /* ReadonlyKeyword */) {
                     writeKeyword("readonly");
                 }
                 writeSpace();
@@ -105432,20 +107618,40 @@
             emitTokenWithComment(23 /* CloseBracketToken */, node.argumentExpression.end, writePunctuation, node);
         }
         function emitCallExpression(node) {
+            var indirectCall = ts.getEmitFlags(node) & 536870912 /* IndirectCall */;
+            if (indirectCall) {
+                writePunctuation("(");
+                writeLiteral("0");
+                writePunctuation(",");
+                writeSpace();
+            }
             emitExpression(node.expression, parenthesizer.parenthesizeLeftSideOfAccess);
+            if (indirectCall) {
+                writePunctuation(")");
+            }
             emit(node.questionDotToken);
             emitTypeArguments(node, node.typeArguments);
             emitExpressionList(node, node.arguments, 2576 /* CallExpressionArguments */, parenthesizer.parenthesizeExpressionForDisallowedComma);
         }
         function emitNewExpression(node) {
-            emitTokenWithComment(102 /* NewKeyword */, node.pos, writeKeyword, node);
+            emitTokenWithComment(103 /* NewKeyword */, node.pos, writeKeyword, node);
             writeSpace();
             emitExpression(node.expression, parenthesizer.parenthesizeExpressionOfNew);
             emitTypeArguments(node, node.typeArguments);
             emitExpressionList(node, node.arguments, 18960 /* NewExpressionArguments */, parenthesizer.parenthesizeExpressionForDisallowedComma);
         }
         function emitTaggedTemplateExpression(node) {
+            var indirectCall = ts.getEmitFlags(node) & 536870912 /* IndirectCall */;
+            if (indirectCall) {
+                writePunctuation("(");
+                writeLiteral("0");
+                writePunctuation(",");
+                writeSpace();
+            }
             emitExpression(node.tag, parenthesizer.parenthesizeLeftSideOfAccess);
+            if (indirectCall) {
+                writePunctuation(")");
+            }
             emitTypeArguments(node, node.typeArguments);
             writeSpace();
             emitExpression(node.template);
@@ -105481,22 +107687,22 @@
             emit(node.equalsGreaterThanToken);
         }
         function emitDeleteExpression(node) {
-            emitTokenWithComment(88 /* DeleteKeyword */, node.pos, writeKeyword, node);
+            emitTokenWithComment(89 /* DeleteKeyword */, node.pos, writeKeyword, node);
             writeSpace();
             emitExpression(node.expression, parenthesizer.parenthesizeOperandOfPrefixUnary);
         }
         function emitTypeOfExpression(node) {
-            emitTokenWithComment(111 /* TypeOfKeyword */, node.pos, writeKeyword, node);
+            emitTokenWithComment(112 /* TypeOfKeyword */, node.pos, writeKeyword, node);
             writeSpace();
             emitExpression(node.expression, parenthesizer.parenthesizeOperandOfPrefixUnary);
         }
         function emitVoidExpression(node) {
-            emitTokenWithComment(113 /* VoidKeyword */, node.pos, writeKeyword, node);
+            emitTokenWithComment(114 /* VoidKeyword */, node.pos, writeKeyword, node);
             writeSpace();
             emitExpression(node.expression, parenthesizer.parenthesizeOperandOfPrefixUnary);
         }
         function emitAwaitExpression(node) {
-            emitTokenWithComment(130 /* AwaitKeyword */, node.pos, writeKeyword, node);
+            emitTokenWithComment(131 /* AwaitKeyword */, node.pos, writeKeyword, node);
             writeSpace();
             emitExpression(node.expression, parenthesizer.parenthesizeOperandOfPrefixUnary);
         }
@@ -105521,7 +107727,7 @@
             // expression a prefix increment whose operand is a plus expression - (++(+x))
             // The same is true of minus of course.
             var operand = node.operand;
-            return operand.kind === 215 /* PrefixUnaryExpression */
+            return operand.kind === 217 /* PrefixUnaryExpression */
                 && ((node.operator === 39 /* PlusToken */ && (operand.operator === 39 /* PlusToken */ || operand.operator === 45 /* PlusPlusToken */))
                     || (node.operator === 40 /* MinusToken */ && (operand.operator === 40 /* MinusToken */ || operand.operator === 46 /* MinusMinusToken */)));
         }
@@ -105569,7 +107775,7 @@
                 var linesAfterOperator = getLinesBetweenNodes(node, operatorToken, node.right);
                 writeLinesAndIndent(linesBeforeOperator, isCommaOperator);
                 emitLeadingCommentsOfPosition(operatorToken.pos);
-                writeTokenNode(operatorToken, operatorToken.kind === 100 /* InKeyword */ ? writeKeyword : writeOperator);
+                writeTokenNode(operatorToken, operatorToken.kind === 101 /* InKeyword */ ? writeKeyword : writeOperator);
                 emitTrailingCommentsOfPosition(operatorToken.end, /*prefixSpace*/ true); // Binary operators should have a space before the comment starts
                 writeLinesAndIndent(linesAfterOperator, /*writeSpaceIfNotIndenting*/ true);
             }
@@ -105640,7 +107846,7 @@
             emitList(node, node.templateSpans, 262144 /* TemplateExpressionSpans */);
         }
         function emitYieldExpression(node) {
-            emitTokenWithComment(124 /* YieldKeyword */, node.pos, writeKeyword, node);
+            emitTokenWithComment(125 /* YieldKeyword */, node.pos, writeKeyword, node);
             emit(node.asteriskToken);
             emitExpressionWithLeadingSpace(node.expression, parenthesizer.parenthesizeExpressionForDisallowedComma);
         }
@@ -105717,7 +107923,7 @@
             }
         }
         function emitIfStatement(node) {
-            var openParenPos = emitTokenWithComment(98 /* IfKeyword */, node.pos, writeKeyword, node);
+            var openParenPos = emitTokenWithComment(99 /* IfKeyword */, node.pos, writeKeyword, node);
             writeSpace();
             emitTokenWithComment(20 /* OpenParenToken */, openParenPos, writePunctuation, node);
             emitExpression(node.expression);
@@ -105725,8 +107931,8 @@
             emitEmbeddedStatement(node, node.thenStatement);
             if (node.elseStatement) {
                 writeLineOrSpace(node, node.thenStatement, node.elseStatement);
-                emitTokenWithComment(90 /* ElseKeyword */, node.thenStatement.end, writeKeyword, node);
-                if (node.elseStatement.kind === 235 /* IfStatement */) {
+                emitTokenWithComment(91 /* ElseKeyword */, node.thenStatement.end, writeKeyword, node);
+                if (node.elseStatement.kind === 237 /* IfStatement */) {
                     writeSpace();
                     emit(node.elseStatement);
                 }
@@ -105736,14 +107942,14 @@
             }
         }
         function emitWhileClause(node, startPos) {
-            var openParenPos = emitTokenWithComment(114 /* WhileKeyword */, startPos, writeKeyword, node);
+            var openParenPos = emitTokenWithComment(115 /* WhileKeyword */, startPos, writeKeyword, node);
             writeSpace();
             emitTokenWithComment(20 /* OpenParenToken */, openParenPos, writePunctuation, node);
             emitExpression(node.expression);
             emitTokenWithComment(21 /* CloseParenToken */, node.expression.end, writePunctuation, node);
         }
         function emitDoStatement(node) {
-            emitTokenWithComment(89 /* DoKeyword */, node.pos, writeKeyword, node);
+            emitTokenWithComment(90 /* DoKeyword */, node.pos, writeKeyword, node);
             emitEmbeddedStatement(node, node.statement);
             if (ts.isBlock(node.statement) && !preserveSourceNewlines) {
                 writeSpace();
@@ -105759,7 +107965,7 @@
             emitEmbeddedStatement(node, node.statement);
         }
         function emitForStatement(node) {
-            var openParenPos = emitTokenWithComment(96 /* ForKeyword */, node.pos, writeKeyword, node);
+            var openParenPos = emitTokenWithComment(97 /* ForKeyword */, node.pos, writeKeyword, node);
             writeSpace();
             var pos = emitTokenWithComment(20 /* OpenParenToken */, openParenPos, writePunctuation, /*contextNode*/ node);
             emitForBinding(node.initializer);
@@ -105771,25 +107977,25 @@
             emitEmbeddedStatement(node, node.statement);
         }
         function emitForInStatement(node) {
-            var openParenPos = emitTokenWithComment(96 /* ForKeyword */, node.pos, writeKeyword, node);
+            var openParenPos = emitTokenWithComment(97 /* ForKeyword */, node.pos, writeKeyword, node);
             writeSpace();
             emitTokenWithComment(20 /* OpenParenToken */, openParenPos, writePunctuation, node);
             emitForBinding(node.initializer);
             writeSpace();
-            emitTokenWithComment(100 /* InKeyword */, node.initializer.end, writeKeyword, node);
+            emitTokenWithComment(101 /* InKeyword */, node.initializer.end, writeKeyword, node);
             writeSpace();
             emitExpression(node.expression);
             emitTokenWithComment(21 /* CloseParenToken */, node.expression.end, writePunctuation, node);
             emitEmbeddedStatement(node, node.statement);
         }
         function emitForOfStatement(node) {
-            var openParenPos = emitTokenWithComment(96 /* ForKeyword */, node.pos, writeKeyword, node);
+            var openParenPos = emitTokenWithComment(97 /* ForKeyword */, node.pos, writeKeyword, node);
             writeSpace();
             emitWithTrailingSpace(node.awaitModifier);
             emitTokenWithComment(20 /* OpenParenToken */, openParenPos, writePunctuation, node);
             emitForBinding(node.initializer);
             writeSpace();
-            emitTokenWithComment(157 /* OfKeyword */, node.initializer.end, writeKeyword, node);
+            emitTokenWithComment(158 /* OfKeyword */, node.initializer.end, writeKeyword, node);
             writeSpace();
             emitExpression(node.expression);
             emitTokenWithComment(21 /* CloseParenToken */, node.expression.end, writePunctuation, node);
@@ -105797,7 +108003,7 @@
         }
         function emitForBinding(node) {
             if (node !== undefined) {
-                if (node.kind === 251 /* VariableDeclarationList */) {
+                if (node.kind === 253 /* VariableDeclarationList */) {
                     emit(node);
                 }
                 else {
@@ -105806,12 +108012,12 @@
             }
         }
         function emitContinueStatement(node) {
-            emitTokenWithComment(85 /* ContinueKeyword */, node.pos, writeKeyword, node);
+            emitTokenWithComment(86 /* ContinueKeyword */, node.pos, writeKeyword, node);
             emitWithLeadingSpace(node.label);
             writeTrailingSemicolon();
         }
         function emitBreakStatement(node) {
-            emitTokenWithComment(80 /* BreakKeyword */, node.pos, writeKeyword, node);
+            emitTokenWithComment(81 /* BreakKeyword */, node.pos, writeKeyword, node);
             emitWithLeadingSpace(node.label);
             writeTrailingSemicolon();
         }
@@ -105834,18 +108040,18 @@
             }
             pos = writeTokenText(token, writer, pos);
             if (isSimilarNode && contextNode.end !== pos) {
-                var isJsxExprContext = contextNode.kind === 284 /* JsxExpression */;
+                var isJsxExprContext = contextNode.kind === 286 /* JsxExpression */;
                 emitTrailingCommentsOfPosition(pos, /*prefixSpace*/ !isJsxExprContext, /*forceNoNewline*/ isJsxExprContext);
             }
             return pos;
         }
         function emitReturnStatement(node) {
-            emitTokenWithComment(104 /* ReturnKeyword */, node.pos, writeKeyword, /*contextNode*/ node);
+            emitTokenWithComment(105 /* ReturnKeyword */, node.pos, writeKeyword, /*contextNode*/ node);
             emitExpressionWithLeadingSpace(node.expression);
             writeTrailingSemicolon();
         }
         function emitWithStatement(node) {
-            var openParenPos = emitTokenWithComment(115 /* WithKeyword */, node.pos, writeKeyword, node);
+            var openParenPos = emitTokenWithComment(116 /* WithKeyword */, node.pos, writeKeyword, node);
             writeSpace();
             emitTokenWithComment(20 /* OpenParenToken */, openParenPos, writePunctuation, node);
             emitExpression(node.expression);
@@ -105853,7 +108059,7 @@
             emitEmbeddedStatement(node, node.statement);
         }
         function emitSwitchStatement(node) {
-            var openParenPos = emitTokenWithComment(106 /* SwitchKeyword */, node.pos, writeKeyword, node);
+            var openParenPos = emitTokenWithComment(107 /* SwitchKeyword */, node.pos, writeKeyword, node);
             writeSpace();
             emitTokenWithComment(20 /* OpenParenToken */, openParenPos, writePunctuation, node);
             emitExpression(node.expression);
@@ -105868,12 +108074,12 @@
             emit(node.statement);
         }
         function emitThrowStatement(node) {
-            emitTokenWithComment(108 /* ThrowKeyword */, node.pos, writeKeyword, node);
+            emitTokenWithComment(109 /* ThrowKeyword */, node.pos, writeKeyword, node);
             emitExpressionWithLeadingSpace(node.expression);
             writeTrailingSemicolon();
         }
         function emitTryStatement(node) {
-            emitTokenWithComment(110 /* TryKeyword */, node.pos, writeKeyword, node);
+            emitTokenWithComment(111 /* TryKeyword */, node.pos, writeKeyword, node);
             writeSpace();
             emit(node.tryBlock);
             if (node.catchClause) {
@@ -105882,13 +108088,13 @@
             }
             if (node.finallyBlock) {
                 writeLineOrSpace(node, node.catchClause || node.tryBlock, node.finallyBlock);
-                emitTokenWithComment(95 /* FinallyKeyword */, (node.catchClause || node.tryBlock).end, writeKeyword, node);
+                emitTokenWithComment(96 /* FinallyKeyword */, (node.catchClause || node.tryBlock).end, writeKeyword, node);
                 writeSpace();
                 emit(node.finallyBlock);
             }
         }
         function emitDebuggerStatement(node) {
-            writeToken(86 /* DebuggerKeyword */, node.pos, writeKeyword);
+            writeToken(87 /* DebuggerKeyword */, node.pos, writeKeyword);
             writeTrailingSemicolon();
         }
         //
@@ -106109,21 +108315,21 @@
         }
         function emitImportEqualsDeclaration(node) {
             emitModifiers(node, node.modifiers);
-            emitTokenWithComment(99 /* ImportKeyword */, node.modifiers ? node.modifiers.end : node.pos, writeKeyword, node);
+            emitTokenWithComment(100 /* ImportKeyword */, node.modifiers ? node.modifiers.end : node.pos, writeKeyword, node);
             writeSpace();
             if (node.isTypeOnly) {
-                emitTokenWithComment(149 /* TypeKeyword */, node.pos, writeKeyword, node);
+                emitTokenWithComment(150 /* TypeKeyword */, node.pos, writeKeyword, node);
                 writeSpace();
             }
             emit(node.name);
             writeSpace();
-            emitTokenWithComment(62 /* EqualsToken */, node.name.end, writePunctuation, node);
+            emitTokenWithComment(63 /* EqualsToken */, node.name.end, writePunctuation, node);
             writeSpace();
             emitModuleReference(node.moduleReference);
             writeTrailingSemicolon();
         }
         function emitModuleReference(node) {
-            if (node.kind === 78 /* Identifier */) {
+            if (node.kind === 79 /* Identifier */) {
                 emitExpression(node);
             }
             else {
@@ -106132,12 +108338,12 @@
         }
         function emitImportDeclaration(node) {
             emitModifiers(node, node.modifiers);
-            emitTokenWithComment(99 /* ImportKeyword */, node.modifiers ? node.modifiers.end : node.pos, writeKeyword, node);
+            emitTokenWithComment(100 /* ImportKeyword */, node.modifiers ? node.modifiers.end : node.pos, writeKeyword, node);
             writeSpace();
             if (node.importClause) {
                 emit(node.importClause);
                 writeSpace();
-                emitTokenWithComment(153 /* FromKeyword */, node.importClause.end, writeKeyword, node);
+                emitTokenWithComment(154 /* FromKeyword */, node.importClause.end, writeKeyword, node);
                 writeSpace();
             }
             emitExpression(node.moduleSpecifier);
@@ -106145,7 +108351,7 @@
         }
         function emitImportClause(node) {
             if (node.isTypeOnly) {
-                emitTokenWithComment(149 /* TypeKeyword */, node.pos, writeKeyword, node);
+                emitTokenWithComment(150 /* TypeKeyword */, node.pos, writeKeyword, node);
                 writeSpace();
             }
             emit(node.name);
@@ -106158,7 +108364,7 @@
         function emitNamespaceImport(node) {
             var asPos = emitTokenWithComment(41 /* AsteriskToken */, node.pos, writePunctuation, node);
             writeSpace();
-            emitTokenWithComment(126 /* AsKeyword */, asPos, writeKeyword, node);
+            emitTokenWithComment(127 /* AsKeyword */, asPos, writeKeyword, node);
             writeSpace();
             emit(node.name);
         }
@@ -106169,25 +108375,25 @@
             emitImportOrExportSpecifier(node);
         }
         function emitExportAssignment(node) {
-            var nextPos = emitTokenWithComment(92 /* ExportKeyword */, node.pos, writeKeyword, node);
+            var nextPos = emitTokenWithComment(93 /* ExportKeyword */, node.pos, writeKeyword, node);
             writeSpace();
             if (node.isExportEquals) {
-                emitTokenWithComment(62 /* EqualsToken */, nextPos, writeOperator, node);
+                emitTokenWithComment(63 /* EqualsToken */, nextPos, writeOperator, node);
             }
             else {
-                emitTokenWithComment(87 /* DefaultKeyword */, nextPos, writeKeyword, node);
+                emitTokenWithComment(88 /* DefaultKeyword */, nextPos, writeKeyword, node);
             }
             writeSpace();
             emitExpression(node.expression, node.isExportEquals ?
-                parenthesizer.getParenthesizeRightSideOfBinaryForOperator(62 /* EqualsToken */) :
+                parenthesizer.getParenthesizeRightSideOfBinaryForOperator(63 /* EqualsToken */) :
                 parenthesizer.parenthesizeExpressionOfExportDefault);
             writeTrailingSemicolon();
         }
         function emitExportDeclaration(node) {
-            var nextPos = emitTokenWithComment(92 /* ExportKeyword */, node.pos, writeKeyword, node);
+            var nextPos = emitTokenWithComment(93 /* ExportKeyword */, node.pos, writeKeyword, node);
             writeSpace();
             if (node.isTypeOnly) {
-                nextPos = emitTokenWithComment(149 /* TypeKeyword */, nextPos, writeKeyword, node);
+                nextPos = emitTokenWithComment(150 /* TypeKeyword */, nextPos, writeKeyword, node);
                 writeSpace();
             }
             if (node.exportClause) {
@@ -106199,18 +108405,18 @@
             if (node.moduleSpecifier) {
                 writeSpace();
                 var fromPos = node.exportClause ? node.exportClause.end : nextPos;
-                emitTokenWithComment(153 /* FromKeyword */, fromPos, writeKeyword, node);
+                emitTokenWithComment(154 /* FromKeyword */, fromPos, writeKeyword, node);
                 writeSpace();
                 emitExpression(node.moduleSpecifier);
             }
             writeTrailingSemicolon();
         }
         function emitNamespaceExportDeclaration(node) {
-            var nextPos = emitTokenWithComment(92 /* ExportKeyword */, node.pos, writeKeyword, node);
+            var nextPos = emitTokenWithComment(93 /* ExportKeyword */, node.pos, writeKeyword, node);
             writeSpace();
-            nextPos = emitTokenWithComment(126 /* AsKeyword */, nextPos, writeKeyword, node);
+            nextPos = emitTokenWithComment(127 /* AsKeyword */, nextPos, writeKeyword, node);
             writeSpace();
-            nextPos = emitTokenWithComment(140 /* NamespaceKeyword */, nextPos, writeKeyword, node);
+            nextPos = emitTokenWithComment(141 /* NamespaceKeyword */, nextPos, writeKeyword, node);
             writeSpace();
             emit(node.name);
             writeTrailingSemicolon();
@@ -106218,7 +108424,7 @@
         function emitNamespaceExport(node) {
             var asPos = emitTokenWithComment(41 /* AsteriskToken */, node.pos, writePunctuation, node);
             writeSpace();
-            emitTokenWithComment(126 /* AsKeyword */, asPos, writeKeyword, node);
+            emitTokenWithComment(127 /* AsKeyword */, asPos, writeKeyword, node);
             writeSpace();
             emit(node.name);
         }
@@ -106237,7 +108443,7 @@
             if (node.propertyName) {
                 emit(node.propertyName);
                 writeSpace();
-                emitTokenWithComment(126 /* AsKeyword */, node.propertyName.end, writeKeyword, node);
+                emitTokenWithComment(127 /* AsKeyword */, node.propertyName.end, writeKeyword, node);
                 writeSpace();
             }
             emit(node.name);
@@ -106339,7 +108545,7 @@
             }
         }
         function emitJsxTagName(node) {
-            if (node.kind === 78 /* Identifier */) {
+            if (node.kind === 79 /* Identifier */) {
                 emitExpression(node);
             }
             else {
@@ -106350,13 +108556,13 @@
         // Clauses
         //
         function emitCaseClause(node) {
-            emitTokenWithComment(81 /* CaseKeyword */, node.pos, writeKeyword, node);
+            emitTokenWithComment(82 /* CaseKeyword */, node.pos, writeKeyword, node);
             writeSpace();
             emitExpression(node.expression, parenthesizer.parenthesizeExpressionForDisallowedComma);
             emitCaseOrDefaultClauseRest(node, node.statements, node.expression.end);
         }
         function emitDefaultClause(node) {
-            var pos = emitTokenWithComment(87 /* DefaultKeyword */, node.pos, writeKeyword, node);
+            var pos = emitTokenWithComment(88 /* DefaultKeyword */, node.pos, writeKeyword, node);
             emitCaseOrDefaultClauseRest(node, node.statements, pos);
         }
         function emitCaseOrDefaultClauseRest(parentNode, statements, colonPos) {
@@ -106384,7 +108590,7 @@
             emitList(node, node.types, 528 /* HeritageClauseTypes */);
         }
         function emitCatchClause(node) {
-            var openParenPos = emitTokenWithComment(82 /* CatchKeyword */, node.pos, writeKeyword, node);
+            var openParenPos = emitTokenWithComment(83 /* CatchKeyword */, node.pos, writeKeyword, node);
             writeSpace();
             if (node.variableDeclaration) {
                 emitTokenWithComment(20 /* OpenParenToken */, openParenPos, writePunctuation, node);
@@ -106457,7 +108663,7 @@
                 }
             }
             if (node.tags) {
-                if (node.tags.length === 1 && node.tags[0].kind === 333 /* JSDocTypeTag */ && !node.comment) {
+                if (node.tags.length === 1 && node.tags[0].kind === 338 /* JSDocTypeTag */ && !node.comment) {
                     writeSpace();
                     emit(node.tags[0]);
                 }
@@ -106502,7 +108708,7 @@
         function emitJSDocTypedefTag(tag) {
             emitJSDocTagName(tag.tagName);
             if (tag.typeExpression) {
-                if (tag.typeExpression.kind === 302 /* JSDocTypeExpression */) {
+                if (tag.typeExpression.kind === 304 /* JSDocTypeExpression */) {
                     emitJSDocTypeExpression(tag.typeExpression);
                 }
                 else {
@@ -106521,7 +108727,7 @@
                 emit(tag.fullName);
             }
             emitJSDocComment(tag.comment);
-            if (tag.typeExpression && tag.typeExpression.kind === 314 /* JSDocTypeLiteral */) {
+            if (tag.typeExpression && tag.typeExpression.kind === 317 /* JSDocTypeLiteral */) {
                 emitJSDocTypeLiteral(tag.typeExpression);
             }
         }
@@ -106648,16 +108854,16 @@
                     writeLine();
                 }
             }
-            for (var _c = 0, files_1 = files; _c < files_1.length; _c++) {
-                var directive = files_1[_c];
+            for (var _c = 0, files_2 = files; _c < files_2.length; _c++) {
+                var directive = files_2[_c];
                 var pos = writer.getTextPos();
                 writeComment("/// <reference path=\"" + directive.fileName + "\" />");
                 if (bundleFileInfo)
                     bundleFileInfo.sections.push({ pos: pos, end: writer.getTextPos(), kind: "reference" /* Reference */, data: directive.fileName });
                 writeLine();
             }
-            for (var _d = 0, types_25 = types; _d < types_25.length; _d++) {
-                var directive = types_25[_d];
+            for (var _d = 0, types_24 = types; _d < types_24.length; _d++) {
+                var directive = types_24[_d];
                 var pos = writer.getTextPos();
                 writeComment("/// <reference types=\"" + directive.fileName + "\" />");
                 if (bundleFileInfo)
@@ -106837,7 +109043,7 @@
         function emitInitializer(node, equalCommentStartPos, container, parenthesizerRule) {
             if (node) {
                 writeSpace();
-                emitTokenWithComment(62 /* EqualsToken */, equalCommentStartPos, writeOperator, container);
+                emitTokenWithComment(63 /* EqualsToken */, equalCommentStartPos, writeOperator, container);
                 writeSpace();
                 emitExpression(node, parenthesizerRule);
             }
@@ -107408,7 +109614,7 @@
                 && ts.rangeEndIsOnSameLineAsRangeStart(block, block, currentSourceFile);
         }
         function skipSynthesizedParentheses(node) {
-            while (node.kind === 208 /* ParenthesizedExpression */ && ts.nodeIsSynthesized(node)) {
+            while (node.kind === 210 /* ParenthesizedExpression */ && ts.nodeIsSynthesized(node)) {
                 node = node.expression;
             }
             return node;
@@ -107478,84 +109684,84 @@
             if (!node)
                 return;
             switch (node.kind) {
-                case 231 /* Block */:
+                case 233 /* Block */:
                     ts.forEach(node.statements, generateNames);
                     break;
-                case 246 /* LabeledStatement */:
-                case 244 /* WithStatement */:
-                case 236 /* DoStatement */:
-                case 237 /* WhileStatement */:
+                case 248 /* LabeledStatement */:
+                case 246 /* WithStatement */:
+                case 238 /* DoStatement */:
+                case 239 /* WhileStatement */:
                     generateNames(node.statement);
                     break;
-                case 235 /* IfStatement */:
+                case 237 /* IfStatement */:
                     generateNames(node.thenStatement);
                     generateNames(node.elseStatement);
                     break;
-                case 238 /* ForStatement */:
-                case 240 /* ForOfStatement */:
-                case 239 /* ForInStatement */:
+                case 240 /* ForStatement */:
+                case 242 /* ForOfStatement */:
+                case 241 /* ForInStatement */:
                     generateNames(node.initializer);
                     generateNames(node.statement);
                     break;
-                case 245 /* SwitchStatement */:
+                case 247 /* SwitchStatement */:
                     generateNames(node.caseBlock);
                     break;
-                case 259 /* CaseBlock */:
+                case 261 /* CaseBlock */:
                     ts.forEach(node.clauses, generateNames);
                     break;
-                case 285 /* CaseClause */:
-                case 286 /* DefaultClause */:
+                case 287 /* CaseClause */:
+                case 288 /* DefaultClause */:
                     ts.forEach(node.statements, generateNames);
                     break;
-                case 248 /* TryStatement */:
+                case 250 /* TryStatement */:
                     generateNames(node.tryBlock);
                     generateNames(node.catchClause);
                     generateNames(node.finallyBlock);
                     break;
-                case 288 /* CatchClause */:
+                case 290 /* CatchClause */:
                     generateNames(node.variableDeclaration);
                     generateNames(node.block);
                     break;
-                case 233 /* VariableStatement */:
+                case 235 /* VariableStatement */:
                     generateNames(node.declarationList);
                     break;
-                case 251 /* VariableDeclarationList */:
+                case 253 /* VariableDeclarationList */:
                     ts.forEach(node.declarations, generateNames);
                     break;
-                case 250 /* VariableDeclaration */:
-                case 161 /* Parameter */:
-                case 199 /* BindingElement */:
-                case 253 /* ClassDeclaration */:
+                case 252 /* VariableDeclaration */:
+                case 162 /* Parameter */:
+                case 201 /* BindingElement */:
+                case 255 /* ClassDeclaration */:
                     generateNameIfNeeded(node.name);
                     break;
-                case 252 /* FunctionDeclaration */:
+                case 254 /* FunctionDeclaration */:
                     generateNameIfNeeded(node.name);
                     if (ts.getEmitFlags(node) & 524288 /* ReuseTempVariableScope */) {
                         ts.forEach(node.parameters, generateNames);
                         generateNames(node.body);
                     }
                     break;
-                case 197 /* ObjectBindingPattern */:
-                case 198 /* ArrayBindingPattern */:
+                case 199 /* ObjectBindingPattern */:
+                case 200 /* ArrayBindingPattern */:
                     ts.forEach(node.elements, generateNames);
                     break;
-                case 262 /* ImportDeclaration */:
+                case 264 /* ImportDeclaration */:
                     generateNames(node.importClause);
                     break;
-                case 263 /* ImportClause */:
+                case 265 /* ImportClause */:
                     generateNameIfNeeded(node.name);
                     generateNames(node.namedBindings);
                     break;
-                case 264 /* NamespaceImport */:
+                case 266 /* NamespaceImport */:
                     generateNameIfNeeded(node.name);
                     break;
-                case 270 /* NamespaceExport */:
+                case 272 /* NamespaceExport */:
                     generateNameIfNeeded(node.name);
                     break;
-                case 265 /* NamedImports */:
+                case 267 /* NamedImports */:
                     ts.forEach(node.elements, generateNames);
                     break;
-                case 266 /* ImportSpecifier */:
+                case 268 /* ImportSpecifier */:
                     generateNameIfNeeded(node.propertyName || node.name);
                     break;
             }
@@ -107564,12 +109770,12 @@
             if (!node)
                 return;
             switch (node.kind) {
-                case 289 /* PropertyAssignment */:
-                case 290 /* ShorthandPropertyAssignment */:
-                case 164 /* PropertyDeclaration */:
-                case 166 /* MethodDeclaration */:
-                case 168 /* GetAccessor */:
-                case 169 /* SetAccessor */:
+                case 291 /* PropertyAssignment */:
+                case 292 /* ShorthandPropertyAssignment */:
+                case 165 /* PropertyDeclaration */:
+                case 167 /* MethodDeclaration */:
+                case 170 /* GetAccessor */:
+                case 171 /* SetAccessor */:
                     generateNameIfNeeded(node.name);
                     break;
             }
@@ -107749,25 +109955,25 @@
          */
         function generateNameForNode(node, flags) {
             switch (node.kind) {
-                case 78 /* Identifier */:
+                case 79 /* Identifier */:
                     return makeUniqueName(getTextOfNode(node), isUniqueName, !!(flags & 16 /* Optimistic */), !!(flags & 8 /* ReservedInNestedScopes */));
-                case 257 /* ModuleDeclaration */:
-                case 256 /* EnumDeclaration */:
+                case 259 /* ModuleDeclaration */:
+                case 258 /* EnumDeclaration */:
                     return generateNameForModuleOrEnum(node);
-                case 262 /* ImportDeclaration */:
-                case 268 /* ExportDeclaration */:
+                case 264 /* ImportDeclaration */:
+                case 270 /* ExportDeclaration */:
                     return generateNameForImportOrExportDeclaration(node);
-                case 252 /* FunctionDeclaration */:
-                case 253 /* ClassDeclaration */:
-                case 267 /* ExportAssignment */:
+                case 254 /* FunctionDeclaration */:
+                case 255 /* ClassDeclaration */:
+                case 269 /* ExportAssignment */:
                     return generateNameForExportDefault();
-                case 222 /* ClassExpression */:
+                case 224 /* ClassExpression */:
                     return generateNameForClassExpression();
-                case 166 /* MethodDeclaration */:
-                case 168 /* GetAccessor */:
-                case 169 /* SetAccessor */:
+                case 167 /* MethodDeclaration */:
+                case 170 /* GetAccessor */:
+                case 171 /* SetAccessor */:
                     return generateNameForMethodOrAccessor(node);
-                case 159 /* ComputedPropertyName */:
+                case 160 /* ComputedPropertyName */:
                     return makeTempVariableName(0 /* Auto */, /*reserveInNestedScopes*/ true);
                 default:
                     return makeTempVariableName(0 /* Auto */);
@@ -107848,7 +110054,7 @@
                 // Emit leading comments if the position is not synthesized and the node
                 // has not opted out from emitting leading comments.
                 if (!skipLeadingComments) {
-                    emitLeadingComments(pos, /*isEmittedNode*/ node.kind !== 339 /* NotEmittedStatement */);
+                    emitLeadingComments(pos, /*isEmittedNode*/ node.kind !== 344 /* NotEmittedStatement */);
                 }
                 if (!skipLeadingComments || (pos >= 0 && (emitFlags & 512 /* NoLeadingComments */) !== 0)) {
                     // Advance the container position if comments get emitted or if they've been disabled explicitly using NoLeadingComments.
@@ -107859,7 +110065,7 @@
                     containerEnd = end;
                     // To avoid invalid comment emit in a down-level binding pattern, we
                     // keep track of the last declaration list container's end
-                    if (node.kind === 251 /* VariableDeclarationList */) {
+                    if (node.kind === 253 /* VariableDeclarationList */) {
                         declarationListContainerEnd = end;
                     }
                 }
@@ -107878,7 +110084,7 @@
                 declarationListContainerEnd = savedDeclarationListContainerEnd;
                 // Emit trailing comments if the position is not synthesized and the node
                 // has not opted out from emitting leading comments and is an emitted node.
-                if (!skipTrailingComments && node.kind !== 339 /* NotEmittedStatement */) {
+                if (!skipTrailingComments && node.kind !== 344 /* NotEmittedStatement */) {
                     emitTrailingComments(end);
                 }
             }
@@ -108153,7 +110359,7 @@
             }
             else {
                 var source = sourceMapRange.source || sourceMapSource;
-                if (node.kind !== 339 /* NotEmittedStatement */
+                if (node.kind !== 344 /* NotEmittedStatement */
                     && (emitFlags & 16 /* NoLeadingSourceMap */) === 0
                     && sourceMapRange.pos >= 0) {
                     emitSourcePos(sourceMapRange.source || sourceMapSource, skipSourceTrivia(source, sourceMapRange.pos));
@@ -108171,7 +110377,7 @@
                 if (emitFlags & 64 /* NoNestedSourceMaps */) {
                     sourceMapsDisabled = false;
                 }
-                if (node.kind !== 339 /* NotEmittedStatement */
+                if (node.kind !== 344 /* NotEmittedStatement */
                     && (emitFlags & 32 /* NoTrailingSourceMap */) === 0
                     && sourceMapRange.end >= 0) {
                     emitSourcePos(sourceMapRange.source || sourceMapSource, sourceMapRange.end);
@@ -108421,7 +110627,7 @@
             var rootResult = tryReadDirectory(rootDir, rootDirPath);
             var rootSymLinkResult;
             if (rootResult !== undefined) {
-                return ts.matchFiles(rootDir, extensions, excludes, includes, useCaseSensitiveFileNames, currentDirectory, depth, getFileSystemEntries, realpath);
+                return ts.matchFiles(rootDir, extensions, excludes, includes, useCaseSensitiveFileNames, currentDirectory, depth, getFileSystemEntries, realpath, directoryExists);
             }
             return host.readDirectory(rootDir, extensions, excludes, includes, depth);
             function getFileSystemEntries(dir) {
@@ -108570,6 +110776,17 @@
     }
     ts.cleanExtendedConfigCache = cleanExtendedConfigCache;
     /**
+     * Updates watchers based on the package json files used in module resolution
+     */
+    function updatePackageJsonWatch(lookups, packageJsonWatches, createPackageJsonWatch) {
+        var newMap = new ts.Map(lookups);
+        ts.mutateMap(packageJsonWatches, newMap, {
+            createNewValue: createPackageJsonWatch,
+            onDeleteValue: ts.closeFileWatcher
+        });
+    }
+    ts.updatePackageJsonWatch = updatePackageJsonWatch;
+    /**
      * Updates the existing missing file watches with the new set of missing files after new program is created
      */
     function updateMissingFilePathsWatch(program, missingFileWatches, createMissingFileWatch) {
@@ -108643,7 +110860,7 @@
             return false;
         // We want to ignore emit file check if file is not going to be emitted next to source file
         // In that case we follow config file inclusion rules
-        if (options.outFile || options.outDir)
+        if (ts.outFile(options) || options.outDir)
             return false;
         // File if emitted next to input needs to be ignored
         if (ts.fileExtensionIs(fileOrDirectoryPath, ".d.ts" /* Dts */)) {
@@ -108770,7 +110987,7 @@
                 var triggerredInfo = (key === "watchFile" ? "FileWatcher" : "DirectoryWatcher") + ":: Triggered with " + args[0] + " " + (args[1] !== undefined ? args[1] : "") + ":: " + getWatchInfo(file, flags, options, detailInfo1, detailInfo2, getDetailWatchInfo);
                 log(triggerredInfo);
                 var start = ts.timestamp();
-                cb.call.apply(cb, __spreadArray([/*thisArg*/ undefined], args));
+                cb.call.apply(cb, __spreadArray([/*thisArg*/ undefined], args, false));
                 var elapsed = ts.timestamp() - start;
                 log("Elapsed:: " + elapsed + "ms " + triggerredInfo);
             }, flags, options, detailInfo1, detailInfo2); };
@@ -109142,7 +111359,7 @@
             var lineStart = ts.getPositionOfLineAndCharacter(file, i, 0);
             var lineEnd = i < lastLineInFile ? ts.getPositionOfLineAndCharacter(file, i + 1, 0) : file.text.length;
             var lineContent = file.text.slice(lineStart, lineEnd);
-            lineContent = lineContent.replace(/\s+$/g, ""); // trim from end
+            lineContent = ts.trimStringEnd(lineContent); // trim from end
             lineContent = lineContent.replace(/\t/g, " "); // convert tabs to single spaces
             // Output the gutter and the actual contents of the line.
             context += indent + formatColorAndReset(ts.padLeft(i + 1 + "", gutterWidth), gutterStyleSequence) + gutterSeparator;
@@ -109416,7 +111633,7 @@
     }
     ts.isProgramUptoDate = isProgramUptoDate;
     function getConfigFileParsingDiagnostics(configFileParseResult) {
-        return configFileParseResult.options.configFile ? __spreadArray(__spreadArray([], configFileParseResult.options.configFile.parseDiagnostics), configFileParseResult.errors) :
+        return configFileParseResult.options.configFile ? __spreadArray(__spreadArray([], configFileParseResult.options.configFile.parseDiagnostics, true), configFileParseResult.errors, true) :
             configFileParseResult.errors;
     }
     ts.getConfigFileParsingDiagnostics = getConfigFileParsingDiagnostics;
@@ -109428,10 +111645,7 @@
             return false;
         // If any compiler options change, we can't reuse old source file even if version match
         // The change in options like these could result in change in syntax tree or `sourceFile.bindDiagnostics`.
-        var oldOptions = program.getCompilerOptions();
-        return !!ts.sourceFileAffectingCompilerOptions.some(function (option) {
-            return !ts.isJsonEqual(ts.getCompilerOptionValue(oldOptions, option), ts.getCompilerOptionValue(newOptions, option));
-        });
+        return ts.optionsHaveChanges(program.getCompilerOptions(), newOptions, ts.sourceFileAffectingCompilerOptions);
     }
     function createCreateProgramOptions(rootNames, options, host, oldProgram, configFileParsingDiagnostics) {
         return {
@@ -109526,6 +111740,7 @@
         var sourceFileToPackageName = new ts.Map();
         // Key is a file name. Value is the (non-empty, or undefined) list of files that redirect to it.
         var redirectTargetsMap = ts.createMultiMap();
+        var usesUriStyleNodeCoreModules = false;
         /**
          * map with
          * - SourceFile if present
@@ -109681,6 +111896,7 @@
             getSourceFileByPath: getSourceFileByPath,
             getSourceFiles: function () { return files; },
             getMissingFilePaths: function () { return missingFilePaths; },
+            getModuleResolutionCache: function () { return moduleResolutionCache; },
             getFilesByNameMap: function () { return filesByName; },
             getCompilerOptions: function () { return options; },
             getSyntacticDiagnostics: getSyntacticDiagnostics,
@@ -109713,6 +111929,7 @@
             getLibFileFromReference: getLibFileFromReference,
             sourceFileToPackageName: sourceFileToPackageName,
             redirectTargetsMap: redirectTargetsMap,
+            usesUriStyleNodeCoreModules: usesUriStyleNodeCoreModules,
             isEmittedFile: isEmittedFile,
             getConfigFileParsingDiagnostics: getConfigFileParsingDiagnostics,
             getResolvedModuleWithFailedLookupLocationsFromCache: getResolvedModuleWithFailedLookupLocationsFromCache,
@@ -109740,7 +111957,7 @@
                     return programDiagnostics.add(createDiagnosticExplainingFile(diagnostic.file && getSourceFileByPath(diagnostic.file), diagnostic.fileProcessingReason, diagnostic.diagnostic, diagnostic.args || ts.emptyArray));
                 case 0 /* FilePreprocessingReferencedDiagnostic */:
                     var _a = getReferencedFileLocation(getSourceFileByPath, diagnostic.reason), file = _a.file, pos = _a.pos, end = _a.end;
-                    return programDiagnostics.add(ts.createFileDiagnostic.apply(void 0, __spreadArray([file, ts.Debug.checkDefined(pos), ts.Debug.checkDefined(end) - pos, diagnostic.diagnostic], diagnostic.args || ts.emptyArray)));
+                    return programDiagnostics.add(ts.createFileDiagnostic.apply(void 0, __spreadArray([file, ts.Debug.checkDefined(pos), ts.Debug.checkDefined(end) - pos, diagnostic.diagnostic], diagnostic.args || ts.emptyArray, false)));
                 default:
                     ts.Debug.assertNever(diagnostic);
             }
@@ -109843,8 +112060,8 @@
                 // Initialize a checker so that all our files are bound.
                 getTypeChecker();
                 classifiableNames = new ts.Set();
-                for (var _i = 0, files_2 = files; _i < files_2.length; _i++) {
-                    var sourceFile = files_2[_i];
+                for (var _i = 0, files_3 = files; _i < files_3.length; _i++) {
+                    var sourceFile = files_3[_i];
                     (_a = sourceFile.classifiableNames) === null || _a === void 0 ? void 0 : _a.forEach(function (value) { return classifiableNames.add(value); });
                 }
             }
@@ -109866,13 +112083,13 @@
                 // which per above occurred during the current program creation.
                 // Since we assume the filesystem does not change during program creation,
                 // it is safe to reuse resolutions from the earlier call.
-                var result_15 = [];
+                var result_14 = [];
                 for (var _i = 0, moduleNames_1 = moduleNames; _i < moduleNames_1.length; _i++) {
                     var moduleName = moduleNames_1[_i];
                     var resolvedModule = file.resolvedModules.get(moduleName);
-                    result_15.push(resolvedModule);
+                    result_14.push(resolvedModule);
                 }
-                return result_15;
+                return result_14;
             }
             // At this point, we know at least one of the following hold:
             // - file has local declarations for ambient modules
@@ -109900,7 +112117,9 @@
                     var oldResolvedModule = ts.getResolvedModule(oldSourceFile, moduleName);
                     if (oldResolvedModule) {
                         if (ts.isTraceEnabled(options, host)) {
-                            ts.trace(host, ts.Diagnostics.Reusing_resolution_of_module_0_to_file_1_from_old_program, moduleName, ts.getNormalizedAbsolutePath(file.originalFileName, currentDirectory));
+                            ts.trace(host, oldResolvedModule.packageId ?
+                                ts.Diagnostics.Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2_with_Package_ID_3 :
+                                ts.Diagnostics.Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2, moduleName, ts.getNormalizedAbsolutePath(file.originalFileName, currentDirectory), oldResolvedModule.resolvedFileName, oldResolvedModule.packageId && ts.packageIdToString(oldResolvedModule.packageId));
                         }
                         (result || (result = new Array(moduleNames.length)))[i] = oldResolvedModule;
                         (reusedNames || (reusedNames = [])).push(moduleName);
@@ -110013,9 +112232,6 @@
             if (!ts.arrayIsEqualTo(oldRootNames, rootNames)) {
                 return 0 /* Not */;
             }
-            if (!ts.arrayIsEqualTo(options.types, oldOptions.types)) {
-                return 0 /* Not */;
-            }
             // Check if any referenced project tsconfig files are different
             if (!canReuseProjectReferences()) {
                 return 0 /* Not */;
@@ -110090,7 +112306,7 @@
                     // The `newSourceFile` object was created for the new program.
                     if (!ts.arrayIsEqualTo(oldSourceFile.libReferenceDirectives, newSourceFile.libReferenceDirectives, fileReferenceIsEqualTo)) {
                         // 'lib' references has changed. Matches behavior in changesAffectModuleResolution
-                        return 0 /* Not */;
+                        structureIsReused = 1 /* SafeModules */;
                     }
                     if (oldSourceFile.hasNoDefaultLib !== newSourceFile.hasNoDefaultLib) {
                         // value of no-default-lib has changed
@@ -110175,7 +112391,7 @@
             if (structureIsReused !== 2 /* Completely */) {
                 return structureIsReused;
             }
-            if ((_a = host.hasChangedAutomaticTypeDirectiveNames) === null || _a === void 0 ? void 0 : _a.call(host)) {
+            if (ts.changesAffectingProgramStructure(oldOptions, options) || ((_a = host.hasChangedAutomaticTypeDirectiveNames) === null || _a === void 0 ? void 0 : _a.call(host))) {
                 return 1 /* SafeModules */;
             }
             missingFilePaths = oldProgram.getMissingFilePaths();
@@ -110206,6 +112422,7 @@
             resolvedTypeReferenceDirectives = oldProgram.getResolvedTypeReferenceDirectives();
             sourceFileToPackageName = oldProgram.sourceFileToPackageName;
             redirectTargetsMap = oldProgram.redirectTargetsMap;
+            usesUriStyleNodeCoreModules = oldProgram.usesUriStyleNodeCoreModules;
             return 2 /* Completely */;
         }
         function getEmitHost(writeFileCallback) {
@@ -110418,7 +112635,7 @@
             }
         }
         function getSemanticDiagnosticsForFile(sourceFile, cancellationToken) {
-            return ts.concatenate(filterSemanticDiagnotics(getBindAndCheckDiagnosticsForFile(sourceFile, cancellationToken), options), getProgramDiagnostics(sourceFile));
+            return ts.concatenate(filterSemanticDiagnostics(getBindAndCheckDiagnosticsForFile(sourceFile, cancellationToken), options), getProgramDiagnostics(sourceFile));
         }
         function getBindAndCheckDiagnosticsForFile(sourceFile, cancellationToken) {
             return getAndCacheDiagnostics(sourceFile, cancellationToken, cachedBindAndCheckDiagnosticsForFile, getBindAndCheckDiagnosticsForFileNoCache);
@@ -110433,8 +112650,8 @@
                 var isCheckJs = ts.isCheckJsEnabledForFile(sourceFile, options);
                 var isTsNoCheck = !!sourceFile.checkJsDirective && sourceFile.checkJsDirective.enabled === false;
                 // By default, only type-check .ts, .tsx, 'Deferred' and 'External' files (external files are added by plugins)
-                var includeBindAndCheckDiagnostics = !isTsNoCheck && (sourceFile.scriptKind === 3 /* TS */ || sourceFile.scriptKind === 4 /* TSX */ ||
-                    sourceFile.scriptKind === 5 /* External */ || isCheckJs || sourceFile.scriptKind === 7 /* Deferred */);
+                var includeBindAndCheckDiagnostics = !isTsNoCheck && (sourceFile.scriptKind === 3 /* TS */ || sourceFile.scriptKind === 4 /* TSX */
+                    || sourceFile.scriptKind === 5 /* External */ || isCheckJs || sourceFile.scriptKind === 7 /* Deferred */);
                 var bindDiagnostics = includeBindAndCheckDiagnostics ? sourceFile.bindDiagnostics : ts.emptyArray;
                 var checkDiagnostics = includeBindAndCheckDiagnostics ? typeChecker.getDiagnostics(sourceFile, cancellationToken) : ts.emptyArray;
                 return getMergedBindAndCheckDiagnostics(sourceFile, includeBindAndCheckDiagnostics, bindDiagnostics, checkDiagnostics, isCheckJs ? sourceFile.jsDocDiagnostics : undefined);
@@ -110508,22 +112725,22 @@
                     // Return directly from the case if the given node doesnt want to visit each child
                     // Otherwise break to visit each child
                     switch (parent.kind) {
-                        case 161 /* Parameter */:
-                        case 164 /* PropertyDeclaration */:
-                        case 166 /* MethodDeclaration */:
+                        case 162 /* Parameter */:
+                        case 165 /* PropertyDeclaration */:
+                        case 167 /* MethodDeclaration */:
                             if (parent.questionToken === node) {
                                 diagnostics.push(createDiagnosticForNode(node, ts.Diagnostics.The_0_modifier_can_only_be_used_in_TypeScript_files, "?"));
                                 return "skip";
                             }
                         // falls through
-                        case 165 /* MethodSignature */:
-                        case 167 /* Constructor */:
-                        case 168 /* GetAccessor */:
-                        case 169 /* SetAccessor */:
-                        case 209 /* FunctionExpression */:
-                        case 252 /* FunctionDeclaration */:
-                        case 210 /* ArrowFunction */:
-                        case 250 /* VariableDeclaration */:
+                        case 166 /* MethodSignature */:
+                        case 169 /* Constructor */:
+                        case 170 /* GetAccessor */:
+                        case 171 /* SetAccessor */:
+                        case 211 /* FunctionExpression */:
+                        case 254 /* FunctionDeclaration */:
+                        case 212 /* ArrowFunction */:
+                        case 252 /* VariableDeclaration */:
                             // type annotation
                             if (parent.type === node) {
                                 diagnostics.push(createDiagnosticForNode(node, ts.Diagnostics.Type_annotations_can_only_be_used_in_TypeScript_files));
@@ -110531,58 +112748,58 @@
                             }
                     }
                     switch (node.kind) {
-                        case 263 /* ImportClause */:
+                        case 265 /* ImportClause */:
                             if (node.isTypeOnly) {
                                 diagnostics.push(createDiagnosticForNode(parent, ts.Diagnostics._0_declarations_can_only_be_used_in_TypeScript_files, "import type"));
                                 return "skip";
                             }
                             break;
-                        case 268 /* ExportDeclaration */:
+                        case 270 /* ExportDeclaration */:
                             if (node.isTypeOnly) {
                                 diagnostics.push(createDiagnosticForNode(node, ts.Diagnostics._0_declarations_can_only_be_used_in_TypeScript_files, "export type"));
                                 return "skip";
                             }
                             break;
-                        case 261 /* ImportEqualsDeclaration */:
+                        case 263 /* ImportEqualsDeclaration */:
                             diagnostics.push(createDiagnosticForNode(node, ts.Diagnostics.import_can_only_be_used_in_TypeScript_files));
                             return "skip";
-                        case 267 /* ExportAssignment */:
+                        case 269 /* ExportAssignment */:
                             if (node.isExportEquals) {
                                 diagnostics.push(createDiagnosticForNode(node, ts.Diagnostics.export_can_only_be_used_in_TypeScript_files));
                                 return "skip";
                             }
                             break;
-                        case 287 /* HeritageClause */:
+                        case 289 /* HeritageClause */:
                             var heritageClause = node;
-                            if (heritageClause.token === 116 /* ImplementsKeyword */) {
+                            if (heritageClause.token === 117 /* ImplementsKeyword */) {
                                 diagnostics.push(createDiagnosticForNode(node, ts.Diagnostics.implements_clauses_can_only_be_used_in_TypeScript_files));
                                 return "skip";
                             }
                             break;
-                        case 254 /* InterfaceDeclaration */:
-                            var interfaceKeyword = ts.tokenToString(117 /* InterfaceKeyword */);
+                        case 256 /* InterfaceDeclaration */:
+                            var interfaceKeyword = ts.tokenToString(118 /* InterfaceKeyword */);
                             ts.Debug.assertIsDefined(interfaceKeyword);
                             diagnostics.push(createDiagnosticForNode(node, ts.Diagnostics._0_declarations_can_only_be_used_in_TypeScript_files, interfaceKeyword));
                             return "skip";
-                        case 257 /* ModuleDeclaration */:
-                            var moduleKeyword = node.flags & 16 /* Namespace */ ? ts.tokenToString(140 /* NamespaceKeyword */) : ts.tokenToString(139 /* ModuleKeyword */);
+                        case 259 /* ModuleDeclaration */:
+                            var moduleKeyword = node.flags & 16 /* Namespace */ ? ts.tokenToString(141 /* NamespaceKeyword */) : ts.tokenToString(140 /* ModuleKeyword */);
                             ts.Debug.assertIsDefined(moduleKeyword);
                             diagnostics.push(createDiagnosticForNode(node, ts.Diagnostics._0_declarations_can_only_be_used_in_TypeScript_files, moduleKeyword));
                             return "skip";
-                        case 255 /* TypeAliasDeclaration */:
+                        case 257 /* TypeAliasDeclaration */:
                             diagnostics.push(createDiagnosticForNode(node, ts.Diagnostics.Type_aliases_can_only_be_used_in_TypeScript_files));
                             return "skip";
-                        case 256 /* EnumDeclaration */:
-                            var enumKeyword = ts.Debug.checkDefined(ts.tokenToString(91 /* EnumKeyword */));
+                        case 258 /* EnumDeclaration */:
+                            var enumKeyword = ts.Debug.checkDefined(ts.tokenToString(92 /* EnumKeyword */));
                             diagnostics.push(createDiagnosticForNode(node, ts.Diagnostics._0_declarations_can_only_be_used_in_TypeScript_files, enumKeyword));
                             return "skip";
-                        case 226 /* NonNullExpression */:
+                        case 228 /* NonNullExpression */:
                             diagnostics.push(createDiagnosticForNode(node, ts.Diagnostics.Non_null_assertions_can_only_be_used_in_TypeScript_files));
                             return "skip";
-                        case 225 /* AsExpression */:
+                        case 227 /* AsExpression */:
                             diagnostics.push(createDiagnosticForNode(node.type, ts.Diagnostics.Type_assertion_expressions_can_only_be_used_in_TypeScript_files));
                             return "skip";
-                        case 207 /* TypeAssertionExpression */:
+                        case 209 /* TypeAssertionExpression */:
                             ts.Debug.fail(); // Won't parse these in a JS file anyway, as they are interpreted as JSX.
                     }
                 }
@@ -110591,53 +112808,53 @@
                         diagnostics.push(createDiagnosticForNode(parent, ts.Diagnostics.Experimental_support_for_decorators_is_a_feature_that_is_subject_to_change_in_a_future_release_Set_the_experimentalDecorators_option_in_your_tsconfig_or_jsconfig_to_remove_this_warning));
                     }
                     switch (parent.kind) {
-                        case 253 /* ClassDeclaration */:
-                        case 222 /* ClassExpression */:
-                        case 166 /* MethodDeclaration */:
-                        case 167 /* Constructor */:
-                        case 168 /* GetAccessor */:
-                        case 169 /* SetAccessor */:
-                        case 209 /* FunctionExpression */:
-                        case 252 /* FunctionDeclaration */:
-                        case 210 /* ArrowFunction */:
+                        case 255 /* ClassDeclaration */:
+                        case 224 /* ClassExpression */:
+                        case 167 /* MethodDeclaration */:
+                        case 169 /* Constructor */:
+                        case 170 /* GetAccessor */:
+                        case 171 /* SetAccessor */:
+                        case 211 /* FunctionExpression */:
+                        case 254 /* FunctionDeclaration */:
+                        case 212 /* ArrowFunction */:
                             // Check type parameters
                             if (nodes === parent.typeParameters) {
                                 diagnostics.push(createDiagnosticForNodeArray(nodes, ts.Diagnostics.Type_parameter_declarations_can_only_be_used_in_TypeScript_files));
                                 return "skip";
                             }
                         // falls through
-                        case 233 /* VariableStatement */:
+                        case 235 /* VariableStatement */:
                             // Check modifiers
                             if (nodes === parent.modifiers) {
-                                checkModifiers(parent.modifiers, parent.kind === 233 /* VariableStatement */);
+                                checkModifiers(parent.modifiers, parent.kind === 235 /* VariableStatement */);
                                 return "skip";
                             }
                             break;
-                        case 164 /* PropertyDeclaration */:
+                        case 165 /* PropertyDeclaration */:
                             // Check modifiers of property declaration
                             if (nodes === parent.modifiers) {
                                 for (var _i = 0, _a = nodes; _i < _a.length; _i++) {
                                     var modifier = _a[_i];
-                                    if (modifier.kind !== 123 /* StaticKeyword */) {
+                                    if (modifier.kind !== 124 /* StaticKeyword */) {
                                         diagnostics.push(createDiagnosticForNode(modifier, ts.Diagnostics.The_0_modifier_can_only_be_used_in_TypeScript_files, ts.tokenToString(modifier.kind)));
                                     }
                                 }
                                 return "skip";
                             }
                             break;
-                        case 161 /* Parameter */:
+                        case 162 /* Parameter */:
                             // Check modifiers of parameter declaration
                             if (nodes === parent.modifiers) {
                                 diagnostics.push(createDiagnosticForNodeArray(nodes, ts.Diagnostics.Parameter_modifiers_can_only_be_used_in_TypeScript_files));
                                 return "skip";
                             }
                             break;
-                        case 204 /* CallExpression */:
-                        case 205 /* NewExpression */:
-                        case 224 /* ExpressionWithTypeArguments */:
-                        case 275 /* JsxSelfClosingElement */:
-                        case 276 /* JsxOpeningElement */:
-                        case 206 /* TaggedTemplateExpression */:
+                        case 206 /* CallExpression */:
+                        case 207 /* NewExpression */:
+                        case 226 /* ExpressionWithTypeArguments */:
+                        case 277 /* JsxSelfClosingElement */:
+                        case 278 /* JsxOpeningElement */:
+                        case 208 /* TaggedTemplateExpression */:
                             // Check type arguments
                             if (nodes === parent.typeArguments) {
                                 diagnostics.push(createDiagnosticForNodeArray(nodes, ts.Diagnostics.Type_arguments_can_only_be_used_in_TypeScript_files));
@@ -110650,25 +112867,25 @@
                     for (var _i = 0, modifiers_2 = modifiers; _i < modifiers_2.length; _i++) {
                         var modifier = modifiers_2[_i];
                         switch (modifier.kind) {
-                            case 84 /* ConstKeyword */:
+                            case 85 /* ConstKeyword */:
                                 if (isConstValid) {
                                     continue;
                                 }
                             // to report error,
                             // falls through
-                            case 122 /* PublicKeyword */:
-                            case 120 /* PrivateKeyword */:
-                            case 121 /* ProtectedKeyword */:
-                            case 142 /* ReadonlyKeyword */:
-                            case 133 /* DeclareKeyword */:
-                            case 125 /* AbstractKeyword */:
-                            case 156 /* OverrideKeyword */:
+                            case 123 /* PublicKeyword */:
+                            case 121 /* PrivateKeyword */:
+                            case 122 /* ProtectedKeyword */:
+                            case 143 /* ReadonlyKeyword */:
+                            case 134 /* DeclareKeyword */:
+                            case 126 /* AbstractKeyword */:
+                            case 157 /* OverrideKeyword */:
                                 diagnostics.push(createDiagnosticForNode(modifier, ts.Diagnostics.The_0_modifier_can_only_be_used_in_TypeScript_files, ts.tokenToString(modifier.kind)));
                                 break;
                             // These are all legal modifiers.
-                            case 123 /* StaticKeyword */:
-                            case 92 /* ExportKeyword */:
-                            case 87 /* DefaultKeyword */:
+                            case 124 /* StaticKeyword */:
+                            case 93 /* ExportKeyword */:
+                            case 88 /* DefaultKeyword */:
                         }
                     }
                 }
@@ -110739,8 +112956,8 @@
             return a.fileName === b.fileName;
         }
         function moduleNameIsEqualTo(a, b) {
-            return a.kind === 78 /* Identifier */
-                ? b.kind === 78 /* Identifier */ && a.escapedText === b.escapedText
+            return a.kind === 79 /* Identifier */
+                ? b.kind === 79 /* Identifier */ && a.escapedText === b.escapedText
                 : b.kind === 10 /* StringLiteral */ && a.text === b.text;
         }
         function createSyntheticImport(text, file) {
@@ -110798,6 +113015,9 @@
                     // only through top - level external module names. Relative external module names are not permitted.
                     if (moduleNameExpr && ts.isStringLiteral(moduleNameExpr) && moduleNameExpr.text && (!inAmbientModule || !ts.isExternalModuleNameRelative(moduleNameExpr.text))) {
                         imports = ts.append(imports, moduleNameExpr);
+                        if (!usesUriStyleNodeCoreModules && currentNodeModulesDepth === 0 && !file.isDeclarationFile) {
+                            usesUriStyleNodeCoreModules = ts.startsWith(moduleNameExpr.text, "node:");
+                        }
                     }
                 }
                 else if (ts.isModuleDeclaration(node)) {
@@ -111424,6 +113644,9 @@
             if (options.strictPropertyInitialization && !ts.getStrictOptionValue(options, "strictNullChecks")) {
                 createDiagnosticForOptionName(ts.Diagnostics.Option_0_cannot_be_specified_without_specifying_option_1, "strictPropertyInitialization", "strictNullChecks");
             }
+            if (options.exactOptionalPropertyTypes && !ts.getStrictOptionValue(options, "strictNullChecks")) {
+                createDiagnosticForOptionName(ts.Diagnostics.Option_0_cannot_be_specified_without_specifying_option_1, "exactOptionalPropertyTypes", "strictNullChecks");
+            }
             if (options.isolatedModules) {
                 if (options.out) {
                     createDiagnosticForOptionName(ts.Diagnostics.Option_0_cannot_be_specified_with_option_1, "out", "isolatedModules");
@@ -111461,8 +113684,8 @@
             // List of collected files is complete; validate exhautiveness if this is a project with a file list
             if (options.composite) {
                 var rootPaths = new ts.Set(rootNames.map(toPath));
-                for (var _i = 0, files_3 = files; _i < files_3.length; _i++) {
-                    var file = files_3[_i];
+                for (var _i = 0, files_4 = files; _i < files_4.length; _i++) {
+                    var file = files_4[_i];
                     // Ignore file that is not emitted
                     if (ts.sourceFileMayBeEmitted(file, program) && !rootPaths.has(file.path)) {
                         addProgramDiagnosticExplainingFile(file, ts.Diagnostics.File_0_is_not_listed_within_the_file_list_of_project_1_Projects_must_list_all_files_or_use_an_include_pattern, [file.fileName, options.configFilePath || ""]);
@@ -111692,7 +113915,7 @@
             var location = locationReason && getReferencedFileLocation(getSourceFileByPath, locationReason);
             var fileIncludeReasonDetails = fileIncludeReasons && ts.chainDiagnosticMessages(fileIncludeReasons, ts.Diagnostics.The_file_is_in_the_program_because_Colon);
             var redirectInfo = file && ts.explainIfFileIsRedirect(file);
-            var chain = ts.chainDiagnosticMessages.apply(void 0, __spreadArray([redirectInfo ? fileIncludeReasonDetails ? __spreadArray([fileIncludeReasonDetails], redirectInfo) : redirectInfo : fileIncludeReasonDetails, diagnostic], args || ts.emptyArray));
+            var chain = ts.chainDiagnosticMessages.apply(void 0, __spreadArray([redirectInfo ? fileIncludeReasonDetails ? __spreadArray([fileIncludeReasonDetails], redirectInfo, true) : redirectInfo : fileIncludeReasonDetails, diagnostic], args || ts.emptyArray, false));
             return location && isReferenceFileLocation(location) ?
                 ts.createFileDiagnosticFromMessageChain(location.file, location.pos, location.end - location.pos, chain, relatedInfo) :
                 ts.createCompilerDiagnosticFromMessageChain(chain, relatedInfo);
@@ -111976,7 +114199,13 @@
             if (host.getSymlinkCache) {
                 return host.getSymlinkCache();
             }
-            return symlinks || (symlinks = ts.discoverProbableSymlinks(files, getCanonicalFileName, host.getCurrentDirectory()));
+            if (!symlinks) {
+                symlinks = ts.createSymlinkCache(currentDirectory, getCanonicalFileName);
+            }
+            if (files && resolvedTypeReferenceDirectives && !symlinks.hasProcessedResolutions()) {
+                symlinks.setSymlinksFromResolutions(files, resolvedTypeReferenceDirectives);
+            }
+            return symlinks;
         }
     }
     ts.createProgram = createProgram;
@@ -112146,7 +114375,7 @@
         // get any preEmit diagnostics, not just the ones
         if (!options.noEmitOnError)
             return undefined;
-        var diagnostics = __spreadArray(__spreadArray(__spreadArray(__spreadArray([], program.getOptionsDiagnostics(cancellationToken)), program.getSyntacticDiagnostics(sourceFile, cancellationToken)), program.getGlobalDiagnostics(cancellationToken)), program.getSemanticDiagnostics(sourceFile, cancellationToken));
+        var diagnostics = __spreadArray(__spreadArray(__spreadArray(__spreadArray([], program.getOptionsDiagnostics(cancellationToken), true), program.getSyntacticDiagnostics(sourceFile, cancellationToken), true), program.getGlobalDiagnostics(cancellationToken), true), program.getSemanticDiagnostics(sourceFile, cancellationToken), true);
         if (diagnostics.length === 0 && ts.getEmitDeclarations(program.getCompilerOptions())) {
             diagnostics = program.getDeclarationDiagnostics(/*sourceFile*/ undefined, cancellationToken);
         }
@@ -112156,17 +114385,17 @@
         if (!sourceFile && !ts.outFile(options)) {
             var emitResult = program.emitBuildInfo(writeFile, cancellationToken);
             if (emitResult.diagnostics)
-                diagnostics = __spreadArray(__spreadArray([], diagnostics), emitResult.diagnostics);
+                diagnostics = __spreadArray(__spreadArray([], diagnostics, true), emitResult.diagnostics, true);
             emittedFiles = emitResult.emittedFiles;
         }
         return { diagnostics: diagnostics, sourceMaps: undefined, emittedFiles: emittedFiles, emitSkipped: true };
     }
     ts.handleNoEmitOptions = handleNoEmitOptions;
     /*@internal*/
-    function filterSemanticDiagnotics(diagnostic, option) {
+    function filterSemanticDiagnostics(diagnostic, option) {
         return ts.filter(diagnostic, function (d) { return !d.skippedOn || !option[d.skippedOn]; });
     }
-    ts.filterSemanticDiagnotics = filterSemanticDiagnotics;
+    ts.filterSemanticDiagnostics = filterSemanticDiagnostics;
     /* @internal */
     function parseConfigHostFromCompilerHostLike(host, directoryStructureHost) {
         if (directoryStructureHost === void 0) { directoryStructureHost = host; }
@@ -112288,21 +114517,86 @@
     ts.getFileEmitOutput = getFileEmitOutput;
     var BuilderState;
     (function (BuilderState) {
-        /**
-         * Get the referencedFile from the imported module symbol
-         */
-        function getReferencedFileFromImportedModuleSymbol(symbol) {
-            if (symbol.declarations && symbol.declarations[0]) {
-                var declarationSourceFile = ts.getSourceFileOfNode(symbol.declarations[0]);
-                return declarationSourceFile && declarationSourceFile.resolvedPath;
+        var manyToManyPathMapCount = 0;
+        function createManyToManyPathMap() {
+            function create(forward, reverse, deleted) {
+                var version = 0;
+                var map = {
+                    id: manyToManyPathMapCount++,
+                    version: function () { return version; },
+                    clone: function () { return create(new ts.Map(forward), new ts.Map(reverse), deleted && new ts.Set(deleted)); },
+                    forEach: function (fn) { return forward.forEach(fn); },
+                    getKeys: function (v) { return reverse.get(v); },
+                    getValues: function (k) { return forward.get(k); },
+                    hasKey: function (k) { return forward.has(k); },
+                    keys: function () { return forward.keys(); },
+                    deletedKeys: function () { return deleted; },
+                    deleteKey: function (k) {
+                        (deleted || (deleted = new ts.Set())).add(k);
+                        var set = forward.get(k);
+                        if (!set) {
+                            return false;
+                        }
+                        set.forEach(function (v) { return deleteFromMultimap(reverse, v, k); });
+                        forward.delete(k);
+                        version++;
+                        return true;
+                    },
+                    set: function (k, vSet) {
+                        var changed = !!(deleted === null || deleted === void 0 ? void 0 : deleted.delete(k));
+                        var existingVSet = forward.get(k);
+                        forward.set(k, vSet);
+                        existingVSet === null || existingVSet === void 0 ? void 0 : existingVSet.forEach(function (v) {
+                            if (!vSet.has(v)) {
+                                changed = true;
+                                deleteFromMultimap(reverse, v, k);
+                            }
+                        });
+                        vSet.forEach(function (v) {
+                            if (!(existingVSet === null || existingVSet === void 0 ? void 0 : existingVSet.has(v))) {
+                                changed = true;
+                                addToMultimap(reverse, v, k);
+                            }
+                        });
+                        if (changed) {
+                            version++;
+                        }
+                        return map;
+                    },
+                };
+                return map;
             }
+            return create(new ts.Map(), new ts.Map(), /*deleted*/ undefined);
+        }
+        BuilderState.createManyToManyPathMap = createManyToManyPathMap;
+        function addToMultimap(map, k, v) {
+            var set = map.get(k);
+            if (!set) {
+                set = new ts.Set();
+                map.set(k, set);
+            }
+            set.add(v);
+        }
+        function deleteFromMultimap(map, k, v, removeEmpty) {
+            if (removeEmpty === void 0) { removeEmpty = true; }
+            var set = map.get(k);
+            if (set === null || set === void 0 ? void 0 : set.delete(v)) {
+                if (removeEmpty && !set.size) {
+                    map.delete(k);
+                }
+                return true;
+            }
+            return false;
+        }
+        function getReferencedFilesFromImportedModuleSymbol(symbol) {
+            return ts.mapDefined(symbol.declarations, function (declaration) { var _a; return (_a = ts.getSourceFileOfNode(declaration)) === null || _a === void 0 ? void 0 : _a.resolvedPath; });
         }
         /**
-         * Get the referencedFile from the import name node from file
+         * Get the module source file and all augmenting files from the import name node from file
          */
-        function getReferencedFileFromImportLiteral(checker, importName) {
+        function getReferencedFilesFromImportLiteral(checker, importName) {
             var symbol = checker.getSymbolAtLocation(importName);
-            return symbol && getReferencedFileFromImportedModuleSymbol(symbol);
+            return symbol && getReferencedFilesFromImportedModuleSymbol(symbol);
         }
         /**
          * Gets the path to reference file from file name, it could be resolvedPath if present otherwise path
@@ -112322,10 +114616,8 @@
                 var checker = program.getTypeChecker();
                 for (var _i = 0, _a = sourceFile.imports; _i < _a.length; _i++) {
                     var importName = _a[_i];
-                    var declarationSourceFilePath = getReferencedFileFromImportLiteral(checker, importName);
-                    if (declarationSourceFilePath) {
-                        addReferencedFile(declarationSourceFilePath);
-                    }
+                    var declarationSourceFilePaths = getReferencedFilesFromImportLiteral(checker, importName);
+                    declarationSourceFilePaths === null || declarationSourceFilePaths === void 0 ? void 0 : declarationSourceFilePaths.forEach(addReferencedFile);
                 }
             }
             var sourceFileDirectory = ts.getDirectoryPath(sourceFile.resolvedPath);
@@ -112402,8 +114694,8 @@
          */
         function create(newProgram, getCanonicalFileName, oldState, disableUseFileVersionAsSignature) {
             var fileInfos = new ts.Map();
-            var referencedMap = newProgram.getCompilerOptions().module !== ts.ModuleKind.None ? new ts.Map() : undefined;
-            var exportedModulesMap = referencedMap ? new ts.Map() : undefined;
+            var referencedMap = newProgram.getCompilerOptions().module !== ts.ModuleKind.None ? createManyToManyPathMap() : undefined;
+            var exportedModulesMap = referencedMap ? createManyToManyPathMap() : undefined;
             var hasCalledUpdateShapeSignature = new ts.Set();
             var useOldState = canReuseOldState(referencedMap, oldState);
             // Ensure source files have parent pointers set
@@ -112420,7 +114712,7 @@
                     }
                     // Copy old visible to outside files map
                     if (useOldState) {
-                        var exportedModules = oldState.exportedModulesMap.get(sourceFile.resolvedPath);
+                        var exportedModules = oldState.exportedModulesMap.getValues(sourceFile.resolvedPath);
                         if (exportedModules) {
                             exportedModulesMap.set(sourceFile.resolvedPath, exportedModules);
                         }
@@ -112449,11 +114741,12 @@
          * Creates a clone of the state
          */
         function clone(state) {
+            var _a, _b;
             // Dont need to backup allFiles info since its cache anyway
             return {
                 fileInfos: new ts.Map(state.fileInfos),
-                referencedMap: state.referencedMap && new ts.Map(state.referencedMap),
-                exportedModulesMap: state.exportedModulesMap && new ts.Map(state.exportedModulesMap),
+                referencedMap: (_a = state.referencedMap) === null || _a === void 0 ? void 0 : _a.clone(),
+                exportedModulesMap: (_b = state.exportedModulesMap) === null || _b === void 0 ? void 0 : _b.clone(),
                 hasCalledUpdateShapeSignature: new ts.Set(state.hasCalledUpdateShapeSignature),
                 useFileVersionAsSignature: state.useFileVersionAsSignature,
             };
@@ -112499,7 +114792,8 @@
         /**
          * Returns if the shape of the signature has changed since last emit
          */
-        function updateShapeSignature(state, programOfThisState, sourceFile, cacheToUpdateSignature, cancellationToken, computeHash, exportedModulesMapCache) {
+        function updateShapeSignature(state, programOfThisState, sourceFile, cacheToUpdateSignature, cancellationToken, computeHash, exportedModulesMapCache, useFileVersionAsSignature) {
+            if (useFileVersionAsSignature === void 0) { useFileVersionAsSignature = state.useFileVersionAsSignature; }
             ts.Debug.assert(!!sourceFile);
             ts.Debug.assert(!exportedModulesMapCache || !!state.exportedModulesMap, "Compute visible to outside map only if visibleToOutsideReferencedMap present in the state");
             // If we have cached the result for this file, that means hence forth we should assume file shape is uptodate
@@ -112511,7 +114805,7 @@
                 return ts.Debug.fail();
             var prevSignature = info.signature;
             var latestSignature;
-            if (!sourceFile.isDeclarationFile && !state.useFileVersionAsSignature) {
+            if (!sourceFile.isDeclarationFile && !useFileVersionAsSignature) {
                 var emitOutput_1 = getFileEmitOutput(programOfThisState, sourceFile, 
                 /*emitOnlyDtsFiles*/ true, cancellationToken, 
                 /*customTransformers*/ undefined, 
@@ -112530,8 +114824,13 @@
                 latestSignature = sourceFile.version;
                 if (exportedModulesMapCache && latestSignature !== prevSignature) {
                     // All the references in this file are exported
-                    var references = state.referencedMap ? state.referencedMap.get(sourceFile.resolvedPath) : undefined;
-                    exportedModulesMapCache.set(sourceFile.resolvedPath, references || false);
+                    var references = state.referencedMap ? state.referencedMap.getValues(sourceFile.resolvedPath) : undefined;
+                    if (references) {
+                        exportedModulesMapCache.set(sourceFile.resolvedPath, references);
+                    }
+                    else {
+                        exportedModulesMapCache.deleteKey(sourceFile.resolvedPath);
+                    }
                 }
             }
             cacheToUpdateSignature.set(sourceFile.resolvedPath, latestSignature);
@@ -112543,18 +114842,23 @@
          */
         function updateExportedModules(sourceFile, exportedModulesFromDeclarationEmit, exportedModulesMapCache) {
             if (!exportedModulesFromDeclarationEmit) {
-                exportedModulesMapCache.set(sourceFile.resolvedPath, false);
+                exportedModulesMapCache.deleteKey(sourceFile.resolvedPath);
                 return;
             }
             var exportedModules;
-            exportedModulesFromDeclarationEmit.forEach(function (symbol) { return addExportedModule(getReferencedFileFromImportedModuleSymbol(symbol)); });
-            exportedModulesMapCache.set(sourceFile.resolvedPath, exportedModules || false);
-            function addExportedModule(exportedModulePath) {
-                if (exportedModulePath) {
+            exportedModulesFromDeclarationEmit.forEach(function (symbol) { return addExportedModule(getReferencedFilesFromImportedModuleSymbol(symbol)); });
+            if (exportedModules) {
+                exportedModulesMapCache.set(sourceFile.resolvedPath, exportedModules);
+            }
+            else {
+                exportedModulesMapCache.deleteKey(sourceFile.resolvedPath);
+            }
+            function addExportedModule(exportedModulePaths) {
+                if (exportedModulePaths === null || exportedModulePaths === void 0 ? void 0 : exportedModulePaths.length) {
                     if (!exportedModules) {
                         exportedModules = new ts.Set();
                     }
-                    exportedModules.add(exportedModulePath);
+                    exportedModulePaths.forEach(function (path) { return exportedModules.add(path); });
                 }
             }
         }
@@ -112563,16 +114867,25 @@
          * This should be called whenever it is safe to commit the state of the builder
          */
         function updateExportedFilesMapFromCache(state, exportedModulesMapCache) {
+            var _a;
             if (exportedModulesMapCache) {
                 ts.Debug.assert(!!state.exportedModulesMap);
-                exportedModulesMapCache.forEach(function (exportedModules, path) {
-                    if (exportedModules) {
-                        state.exportedModulesMap.set(path, exportedModules);
+                var cacheId = exportedModulesMapCache.id;
+                var cacheVersion = exportedModulesMapCache.version();
+                if (state.previousCache) {
+                    if (state.previousCache.id === cacheId && state.previousCache.version === cacheVersion) {
+                        // If this is the same cache at the same version as last time this BuilderState
+                        // was updated, there's no need to update again
+                        return;
                     }
-                    else {
-                        state.exportedModulesMap.delete(path);
-                    }
-                });
+                    state.previousCache.id = cacheId;
+                    state.previousCache.version = cacheVersion;
+                }
+                else {
+                    state.previousCache = { id: cacheId, version: cacheVersion };
+                }
+                (_a = exportedModulesMapCache.deletedKeys()) === null || _a === void 0 ? void 0 : _a.forEach(function (path) { return state.exportedModulesMap.deleteKey(path); });
+                exportedModulesMapCache.forEach(function (exportedModules, path) { return state.exportedModulesMap.set(path, exportedModules); });
             }
         }
         BuilderState.updateExportedFilesMapFromCache = updateExportedFilesMapFromCache;
@@ -112596,7 +114909,7 @@
                 var path = queue.pop();
                 if (!seenMap.has(path)) {
                     seenMap.add(path);
-                    var references = state.referencedMap.get(path);
+                    var references = state.referencedMap.getValues(path);
                     if (references) {
                         var iterator = references.keys();
                         for (var iterResult = iterator.next(); !iterResult.done; iterResult = iterator.next()) {
@@ -112622,10 +114935,8 @@
          * Gets the files referenced by the the file path
          */
         function getReferencedByPaths(state, referencedFilePath) {
-            return ts.arrayFrom(ts.mapDefinedIterator(state.referencedMap.entries(), function (_a) {
-                var filePath = _a[0], referencesInFile = _a[1];
-                return referencesInFile.has(referencedFilePath) ? filePath : undefined;
-            }));
+            var keys = state.referencedMap.getKeys(referencedFilePath);
+            return keys ? ts.arrayFrom(keys.keys()) : [];
         }
         BuilderState.getReferencedByPaths = getReferencedByPaths;
         /**
@@ -112655,7 +114966,7 @@
          */
         function isFileAffectingGlobalScope(sourceFile) {
             return containsGlobalScopeAugmentation(sourceFile) ||
-                !ts.isExternalOrCommonJsModule(sourceFile) && !containsOnlyAmbientModules(sourceFile);
+                !ts.isExternalOrCommonJsModule(sourceFile) && !ts.isJsonSourceFile(sourceFile) && !containsOnlyAmbientModules(sourceFile);
         }
         /**
          * Gets all files of the program excluding the default library file
@@ -112791,7 +115102,7 @@
                 // versions dont match
                 oldInfo.version !== info.version ||
                 // Referenced files changed
-                !hasSameKeys(newReferences = referencedMap && referencedMap.get(sourceFilePath), oldReferencedMap && oldReferencedMap.get(sourceFilePath)) ||
+                !hasSameKeys(newReferences = referencedMap && referencedMap.getValues(sourceFilePath), oldReferencedMap && oldReferencedMap.getValues(sourceFilePath)) ||
                 // Referenced file was deleted in the new program
                 newReferences && ts.forEachKey(newReferences, function (path) { return !state.fileInfos.has(path) && oldState.fileInfos.has(path); })) {
                 // Register file as changed file and do not copy semantic diagnostics, since all changed files need to be re-evaluated
@@ -112867,6 +115178,7 @@
      * Creates a clone of the state
      */
     function cloneBuilderProgramState(state) {
+        var _a;
         var newState = ts.BuilderState.clone(state);
         newState.semanticDiagnosticsPerFile = state.semanticDiagnosticsPerFile && new ts.Map(state.semanticDiagnosticsPerFile);
         newState.changedFilesSet = new ts.Set(state.changedFilesSet);
@@ -112874,7 +115186,7 @@
         newState.affectedFilesIndex = state.affectedFilesIndex;
         newState.currentChangedFilePath = state.currentChangedFilePath;
         newState.currentAffectedFilesSignatures = state.currentAffectedFilesSignatures && new ts.Map(state.currentAffectedFilesSignatures);
-        newState.currentAffectedFilesExportedModulesMap = state.currentAffectedFilesExportedModulesMap && new ts.Map(state.currentAffectedFilesExportedModulesMap);
+        newState.currentAffectedFilesExportedModulesMap = (_a = state.currentAffectedFilesExportedModulesMap) === null || _a === void 0 ? void 0 : _a.clone();
         newState.seenAffectedFiles = state.seenAffectedFiles && new ts.Set(state.seenAffectedFiles);
         newState.cleanedDiagnosticsOfLibFiles = state.cleanedDiagnosticsOfLibFiles;
         newState.semanticDiagnosticsFromOldState = state.semanticDiagnosticsFromOldState && new ts.Set(state.semanticDiagnosticsFromOldState);
@@ -112942,8 +115254,7 @@
             if (!state.currentAffectedFilesSignatures)
                 state.currentAffectedFilesSignatures = new ts.Map();
             if (state.exportedModulesMap) {
-                if (!state.currentAffectedFilesExportedModulesMap)
-                    state.currentAffectedFilesExportedModulesMap = new ts.Map();
+                state.currentAffectedFilesExportedModulesMap || (state.currentAffectedFilesExportedModulesMap = ts.BuilderState.createManyToManyPathMap());
             }
             state.affectedFiles = ts.BuilderState.getFilesAffectedBy(state, program, nextKey.value, cancellationToken, computeHash, state.currentAffectedFilesSignatures, state.currentAffectedFilesExportedModulesMap);
             state.currentChangedFilePath = nextKey.value;
@@ -113023,14 +115334,15 @@
                 // we need to update the signature to reflect correctness of the signature(which is output d.ts emit) of this file
                 // This ensures that we dont later during incremental builds considering wrong signature.
                 // Eg where this also is needed to ensure that .tsbuildinfo generated by incremental build should be same as if it was first fresh build
-                ts.BuilderState.updateShapeSignature(state, program, sourceFile, ts.Debug.checkDefined(state.currentAffectedFilesSignatures), cancellationToken, computeHash, state.currentAffectedFilesExportedModulesMap);
+                // But we avoid expensive full shape computation, as using file version as shape is enough for correctness.
+                ts.BuilderState.updateShapeSignature(state, program, sourceFile, ts.Debug.checkDefined(state.currentAffectedFilesSignatures), cancellationToken, computeHash, state.currentAffectedFilesExportedModulesMap, 
+                /* useFileVersionAsSignature */ true);
                 // If not dts emit, nothing more to do
                 if (ts.getEmitDeclarations(state.compilerOptions)) {
                     addToAffectedFilesPendingEmit(state, path, 0 /* DtsOnly */);
                 }
             }
         }
-        return false;
     }
     /**
      * Removes semantic diagnostics for path and
@@ -113053,6 +115365,7 @@
      * Iterate on referencing modules that export entities from affected file
      */
     function forEachReferencingModulesOfExportOfAffectedFile(state, affectedFile, fn) {
+        var _a, _b;
         // If there was change in signature (dts output) for the changed file,
         // then only we need to handle pending file emit
         if (!state.exportedModulesMap || !state.changedFilesSet.has(affectedFile.resolvedPath)) {
@@ -113070,8 +115383,8 @@
                 var currentPath = queue.pop();
                 if (!seenFileNamesMap.has(currentPath)) {
                     seenFileNamesMap.set(currentPath, true);
-                    var result = fn(state, currentPath);
-                    if (result && isChangedSignature(state, currentPath)) {
+                    fn(state, currentPath);
+                    if (isChangedSignature(state, currentPath)) {
                         var currentSourceFile = ts.Debug.checkDefined(state.program).getSourceFileByPath(currentPath);
                         queue.push.apply(queue, ts.BuilderState.getReferencedByPaths(state, currentSourceFile.resolvedPath));
                     }
@@ -113082,17 +115395,15 @@
         var seenFileAndExportsOfFile = new ts.Set();
         // Go through exported modules from cache first
         // If exported modules has path, all files referencing file exported from are affected
-        if (ts.forEachEntry(state.currentAffectedFilesExportedModulesMap, function (exportedModules, exportedFromPath) {
-            return exportedModules &&
-                exportedModules.has(affectedFile.resolvedPath) &&
-                forEachFilesReferencingPath(state, exportedFromPath, seenFileAndExportsOfFile, fn);
-        })) {
-            return;
-        }
+        (_a = state.currentAffectedFilesExportedModulesMap.getKeys(affectedFile.resolvedPath)) === null || _a === void 0 ? void 0 : _a.forEach(function (exportedFromPath) {
+            return forEachFilesReferencingPath(state, exportedFromPath, seenFileAndExportsOfFile, fn);
+        });
         // If exported from path is not from cache and exported modules has path, all files referencing file exported from are affected
-        ts.forEachEntry(state.exportedModulesMap, function (exportedModules, exportedFromPath) {
-            return !state.currentAffectedFilesExportedModulesMap.has(exportedFromPath) && // If we already iterated this through cache, ignore it
-                exportedModules.has(affectedFile.resolvedPath) &&
+        (_b = state.exportedModulesMap.getKeys(affectedFile.resolvedPath)) === null || _b === void 0 ? void 0 : _b.forEach(function (exportedFromPath) {
+            var _a;
+            // If the cache had an updated value, skip
+            return !state.currentAffectedFilesExportedModulesMap.hasKey(exportedFromPath) &&
+                !((_a = state.currentAffectedFilesExportedModulesMap.deletedKeys()) === null || _a === void 0 ? void 0 : _a.has(exportedFromPath)) &&
                 forEachFilesReferencingPath(state, exportedFromPath, seenFileAndExportsOfFile, fn);
         });
     }
@@ -113100,43 +115411,37 @@
      * Iterate on files referencing referencedPath
      */
     function forEachFilesReferencingPath(state, referencedPath, seenFileAndExportsOfFile, fn) {
-        return ts.forEachEntry(state.referencedMap, function (referencesInFile, filePath) {
-            return referencesInFile.has(referencedPath) && forEachFileAndExportsOfFile(state, filePath, seenFileAndExportsOfFile, fn);
+        var _a;
+        (_a = state.referencedMap.getKeys(referencedPath)) === null || _a === void 0 ? void 0 : _a.forEach(function (filePath) {
+            return forEachFileAndExportsOfFile(state, filePath, seenFileAndExportsOfFile, fn);
         });
     }
     /**
      * fn on file and iterate on anything that exports this file
      */
     function forEachFileAndExportsOfFile(state, filePath, seenFileAndExportsOfFile, fn) {
+        var _a, _b, _c;
         if (!ts.tryAddToSet(seenFileAndExportsOfFile, filePath)) {
-            return false;
+            return;
         }
-        if (fn(state, filePath)) {
-            // If there are no more diagnostics from old cache, done
-            return true;
-        }
+        fn(state, filePath);
         ts.Debug.assert(!!state.currentAffectedFilesExportedModulesMap);
         // Go through exported modules from cache first
         // If exported modules has path, all files referencing file exported from are affected
-        if (ts.forEachEntry(state.currentAffectedFilesExportedModulesMap, function (exportedModules, exportedFromPath) {
-            return exportedModules &&
-                exportedModules.has(filePath) &&
-                forEachFileAndExportsOfFile(state, exportedFromPath, seenFileAndExportsOfFile, fn);
-        })) {
-            return true;
-        }
+        (_a = state.currentAffectedFilesExportedModulesMap.getKeys(filePath)) === null || _a === void 0 ? void 0 : _a.forEach(function (exportedFromPath) {
+            return forEachFileAndExportsOfFile(state, exportedFromPath, seenFileAndExportsOfFile, fn);
+        });
         // If exported from path is not from cache and exported modules has path, all files referencing file exported from are affected
-        if (ts.forEachEntry(state.exportedModulesMap, function (exportedModules, exportedFromPath) {
-            return !state.currentAffectedFilesExportedModulesMap.has(exportedFromPath) && // If we already iterated this through cache, ignore it
-                exportedModules.has(filePath) &&
+        (_b = state.exportedModulesMap.getKeys(filePath)) === null || _b === void 0 ? void 0 : _b.forEach(function (exportedFromPath) {
+            var _a;
+            // If the cache had an updated value, skip
+            return !state.currentAffectedFilesExportedModulesMap.hasKey(exportedFromPath) &&
+                !((_a = state.currentAffectedFilesExportedModulesMap.deletedKeys()) === null || _a === void 0 ? void 0 : _a.has(exportedFromPath)) &&
                 forEachFileAndExportsOfFile(state, exportedFromPath, seenFileAndExportsOfFile, fn);
-        })) {
-            return true;
-        }
+        });
         // Remove diagnostics of files that import this file (without going to exports of referencing files)
-        return !!ts.forEachEntry(state.referencedMap, function (referencesInFile, referencingFilePath) {
-            return referencesInFile.has(filePath) &&
-                !seenFileAndExportsOfFile.has(referencingFilePath) && // Not already removed diagnostic file
+        (_c = state.referencedMap.getKeys(filePath)) === null || _c === void 0 ? void 0 : _c.forEach(function (referencingFilePath) {
+            return !seenFileAndExportsOfFile.has(referencingFilePath) && // Not already removed diagnostic file
                 fn(state, referencingFilePath);
         } // Dont add to seen since this is not yet done with the export removal
         );
@@ -113198,7 +115503,7 @@
             var cachedDiagnostics = state.semanticDiagnosticsPerFile.get(path);
             // Report the bind and check diagnostics from the cache if we already have those diagnostics present
             if (cachedDiagnostics) {
-                return ts.filterSemanticDiagnotics(cachedDiagnostics, state.compilerOptions);
+                return ts.filterSemanticDiagnostics(cachedDiagnostics, state.compilerOptions);
             }
         }
         // Diagnostics werent cached, get them from program, and cache the result
@@ -113206,7 +115511,7 @@
         if (state.semanticDiagnosticsPerFile) {
             state.semanticDiagnosticsPerFile.set(path, diagnostics);
         }
-        return ts.filterSemanticDiagnotics(diagnostics, state.compilerOptions);
+        return ts.filterSemanticDiagnostics(diagnostics, state.compilerOptions);
     }
     /**
      * Gets the program information to be emitted in buildInfo so that we can use it to create new program
@@ -113241,19 +115546,24 @@
         if (state.referencedMap) {
             referencedMap = ts.arrayFrom(state.referencedMap.keys()).sort(ts.compareStringsCaseSensitive).map(function (key) { return [
                 toFileId(key),
-                toFileIdListId(state.referencedMap.get(key))
+                toFileIdListId(state.referencedMap.getValues(key))
             ]; });
         }
         var exportedModulesMap;
         if (state.exportedModulesMap) {
             exportedModulesMap = ts.mapDefined(ts.arrayFrom(state.exportedModulesMap.keys()).sort(ts.compareStringsCaseSensitive), function (key) {
-                var newValue = state.currentAffectedFilesExportedModulesMap && state.currentAffectedFilesExportedModulesMap.get(key);
+                var _a;
+                if (state.currentAffectedFilesExportedModulesMap) {
+                    if ((_a = state.currentAffectedFilesExportedModulesMap.deletedKeys()) === null || _a === void 0 ? void 0 : _a.has(key)) {
+                        return undefined;
+                    }
+                    var newValue = state.currentAffectedFilesExportedModulesMap.getValues(key);
+                    if (newValue) {
+                        return [toFileId(key), toFileIdListId(newValue)];
+                    }
+                }
                 // Not in temporary cache, use existing value
-                if (newValue === undefined)
-                    return [toFileId(key), toFileIdListId(state.exportedModulesMap.get(key))];
-                // Value in cache and has updated value map, use that
-                else if (newValue)
-                    return [toFileId(key), toFileIdListId(newValue)];
+                return [toFileId(key), toFileIdListId(state.exportedModulesMap.getValues(key))];
             });
         }
         var semanticDiagnosticsPerFile;
@@ -113430,8 +115740,9 @@
         newProgram = undefined; // TODO: GH#18217
         oldProgram = undefined;
         oldState = undefined;
-        var builderProgram = createRedirectedBuilderProgram(state, configFileParsingDiagnostics);
-        builderProgram.getState = function () { return state; };
+        var getState = function () { return state; };
+        var builderProgram = createRedirectedBuilderProgram(getState, configFileParsingDiagnostics);
+        builderProgram.getState = getState;
         builderProgram.backupState = function () {
             ts.Debug.assert(backupState === undefined);
             backupState = cloneBuilderProgramState(state);
@@ -113666,8 +115977,8 @@
         var state = {
             fileInfos: fileInfos,
             compilerOptions: program.options ? ts.convertToOptionsWithAbsolutePaths(program.options, toAbsolutePath) : {},
-            referencedMap: toMapOfReferencedSet(program.referencedMap),
-            exportedModulesMap: toMapOfReferencedSet(program.exportedModulesMap),
+            referencedMap: toManyToManyPathMap(program.referencedMap),
+            exportedModulesMap: toManyToManyPathMap(program.exportedModulesMap),
             semanticDiagnosticsPerFile: program.semanticDiagnosticsPerFile && ts.arrayToMap(program.semanticDiagnosticsPerFile, function (value) { return toFilePath(ts.isNumber(value) ? value : value[0]); }, function (value) { return ts.isNumber(value) ? ts.emptyArray : value[1]; }),
             hasReusableDiagnostic: true,
             affectedFilesPendingEmit: ts.map(program.affectedFilesPendingEmit, function (value) { return toFilePath(value[0]); }),
@@ -113710,20 +116021,28 @@
         function toFilePathsSet(fileIdsListId) {
             return filePathsSetList[fileIdsListId - 1];
         }
-        function toMapOfReferencedSet(referenceMap) {
-            return referenceMap && ts.arrayToMap(referenceMap, function (value) { return toFilePath(value[0]); }, function (value) { return toFilePathsSet(value[1]); });
+        function toManyToManyPathMap(referenceMap) {
+            if (!referenceMap) {
+                return undefined;
+            }
+            var map = ts.BuilderState.createManyToManyPathMap();
+            referenceMap.forEach(function (_a) {
+                var fileId = _a[0], fileIdListId = _a[1];
+                return map.set(toFilePath(fileId), toFilePathsSet(fileIdListId));
+            });
+            return map;
         }
     }
     ts.createBuildProgramUsingProgramBuildInfo = createBuildProgramUsingProgramBuildInfo;
-    function createRedirectedBuilderProgram(state, configFileParsingDiagnostics) {
+    function createRedirectedBuilderProgram(getState, configFileParsingDiagnostics) {
         return {
             getState: ts.notImplemented,
             backupState: ts.noop,
             restoreState: ts.noop,
             getProgram: getProgram,
-            getProgramOrUndefined: function () { return state.program; },
-            releaseProgram: function () { return state.program = undefined; },
-            getCompilerOptions: function () { return state.compilerOptions; },
+            getProgramOrUndefined: function () { return getState().program; },
+            releaseProgram: function () { return getState().program = undefined; },
+            getCompilerOptions: function () { return getState().compilerOptions; },
             getSourceFile: function (fileName) { return getProgram().getSourceFile(fileName); },
             getSourceFiles: function () { return getProgram().getSourceFiles(); },
             getOptionsDiagnostics: function (cancellationToken) { return getProgram().getOptionsDiagnostics(cancellationToken); },
@@ -113739,7 +116058,7 @@
             close: ts.noop,
         };
         function getProgram() {
-            return ts.Debug.checkDefined(state.program);
+            return ts.Debug.checkDefined(getState().program);
         }
     }
     ts.createRedirectedBuilderProgram = createRedirectedBuilderProgram;
@@ -113756,7 +116075,7 @@
     ts.createEmitAndSemanticDiagnosticsBuilderProgram = createEmitAndSemanticDiagnosticsBuilderProgram;
     function createAbstractBuilder(newProgramOrRootNames, hostOrOptions, oldProgramOrHost, configFileParsingDiagnosticsOrOldProgram, configFileParsingDiagnostics, projectReferences) {
         var _a = ts.getBuilderCreationParameters(newProgramOrRootNames, hostOrOptions, oldProgramOrHost, configFileParsingDiagnosticsOrOldProgram, configFileParsingDiagnostics, projectReferences), newProgram = _a.newProgram, newConfigFileParsingDiagnostics = _a.configFileParsingDiagnostics;
-        return ts.createRedirectedBuilderProgram({ program: newProgram, compilerOptions: newProgram.getCompilerOptions() }, newConfigFileParsingDiagnostics);
+        return ts.createRedirectedBuilderProgram(function () { return ({ program: newProgram, compilerOptions: newProgram.getCompilerOptions() }); }, newConfigFileParsingDiagnostics);
     }
     ts.createAbstractBuilder = createAbstractBuilder;
 })(ts || (ts = {}));
@@ -113857,6 +116176,7 @@
         // TypeRoot watches for the types that get added as part of getAutomaticTypeDirectiveNames
         var typeRootsWatches = new ts.Map();
         return {
+            getModuleResolutionCache: function () { return moduleResolutionCache; },
             startRecordingFilesWithChangedResolutions: startRecordingFilesWithChangedResolutions,
             finishRecordingFilesWithChangedResolutions: finishRecordingFilesWithChangedResolutions,
             // perDirectoryResolvedModuleNames and perDirectoryResolvedTypeReferenceDirectives could be non empty if there was exception during program update
@@ -113980,7 +116300,7 @@
             return ts.resolveTypeReferenceDirective(typeReferenceDirectiveName, containingFile, options, host, redirectedReference, typeReferenceDirectiveResolutionCache);
         }
         function resolveNamesWithLocalCache(_a) {
-            var _b;
+            var _b, _c, _d;
             var names = _a.names, containingFile = _a.containingFile, redirectedReference = _a.redirectedReference, cache = _a.cache, perDirectoryCacheWithRedirects = _a.perDirectoryCacheWithRedirects, loader = _a.loader, getResolutionWithResolvedFileName = _a.getResolutionWithResolvedFileName, shouldRetryResolution = _a.shouldRetryResolution, reusedNames = _a.reusedNames, logChanges = _a.logChanges;
             var path = resolutionHost.toPath(containingFile);
             var resolutionsInFile = cache.get(path) || cache.set(path, new ts.Map()).get(path);
@@ -114013,9 +116333,24 @@
                     var resolutionInDirectory = perDirectoryResolution.get(name);
                     if (resolutionInDirectory) {
                         resolution = resolutionInDirectory;
+                        var host = ((_b = resolutionHost.getCompilerHost) === null || _b === void 0 ? void 0 : _b.call(resolutionHost)) || resolutionHost;
+                        if (ts.isTraceEnabled(compilerOptions, host)) {
+                            var resolved = getResolutionWithResolvedFileName(resolution);
+                            ts.trace(host, loader === resolveModuleName ?
+                                (resolved === null || resolved === void 0 ? void 0 : resolved.resolvedFileName) ?
+                                    resolved.packagetId ?
+                                        ts.Diagnostics.Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_3_with_Package_ID_4 :
+                                        ts.Diagnostics.Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_3 :
+                                    ts.Diagnostics.Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_not_resolved :
+                                (resolved === null || resolved === void 0 ? void 0 : resolved.resolvedFileName) ?
+                                    resolved.packagetId ?
+                                        ts.Diagnostics.Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_3_with_Package_ID_4 :
+                                        ts.Diagnostics.Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_3 :
+                                    ts.Diagnostics.Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_not_resolved, name, containingFile, ts.getDirectoryPath(containingFile), resolved === null || resolved === void 0 ? void 0 : resolved.resolvedFileName, (resolved === null || resolved === void 0 ? void 0 : resolved.packagetId) && ts.packageIdToString(resolved.packagetId));
+                        }
                     }
                     else {
-                        resolution = loader(name, containingFile, compilerOptions, ((_b = resolutionHost.getCompilerHost) === null || _b === void 0 ? void 0 : _b.call(resolutionHost)) || resolutionHost, redirectedReference);
+                        resolution = loader(name, containingFile, compilerOptions, ((_c = resolutionHost.getCompilerHost) === null || _c === void 0 ? void 0 : _c.call(resolutionHost)) || resolutionHost, redirectedReference);
                         perDirectoryResolution.set(name, resolution);
                     }
                     resolutionsInFile.set(name, resolution);
@@ -114029,6 +116364,23 @@
                         logChanges = false;
                     }
                 }
+                else {
+                    var host = ((_d = resolutionHost.getCompilerHost) === null || _d === void 0 ? void 0 : _d.call(resolutionHost)) || resolutionHost;
+                    if (ts.isTraceEnabled(compilerOptions, host) && !seenNamesInFile.has(name)) {
+                        var resolved = getResolutionWithResolvedFileName(resolution);
+                        ts.trace(host, loader === resolveModuleName ?
+                            (resolved === null || resolved === void 0 ? void 0 : resolved.resolvedFileName) ?
+                                resolved.packagetId ?
+                                    ts.Diagnostics.Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2_with_Package_ID_3 :
+                                    ts.Diagnostics.Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2 :
+                                ts.Diagnostics.Reusing_resolution_of_module_0_from_1_of_old_program_it_was_not_resolved :
+                            (resolved === null || resolved === void 0 ? void 0 : resolved.resolvedFileName) ?
+                                resolved.packagetId ?
+                                    ts.Diagnostics.Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved_to_2_with_Package_ID_3 :
+                                    ts.Diagnostics.Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved_to_2 :
+                                ts.Diagnostics.Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_not_resolved, name, containingFile, resolved === null || resolved === void 0 ? void 0 : resolved.resolvedFileName, (resolved === null || resolved === void 0 ? void 0 : resolved.packagetId) && ts.packageIdToString(resolved.packagetId));
+                    }
+                }
                 ts.Debug.assert(resolution !== undefined && !resolution.isInvalidated);
                 seenNamesInFile.set(name, true);
                 resolvedModules.push(getResolutionWithResolvedFileName(resolution));
@@ -114474,7 +116826,7 @@
 var ts;
 (function (ts) {
     var moduleSpecifiers;
-    (function (moduleSpecifiers) {
+    (function (moduleSpecifiers_1) {
         var RelativePreference;
         (function (RelativePreference) {
             RelativePreference[RelativePreference["Relative"] = 0] = "Relative";
@@ -114517,41 +116869,68 @@
             };
         }
         function updateModuleSpecifier(compilerOptions, importingSourceFileName, toFileName, host, oldImportSpecifier) {
-            var res = getModuleSpecifierWorker(compilerOptions, importingSourceFileName, toFileName, host, getPreferencesForUpdate(compilerOptions, oldImportSpecifier));
+            var res = getModuleSpecifierWorker(compilerOptions, importingSourceFileName, toFileName, host, getPreferencesForUpdate(compilerOptions, oldImportSpecifier), {});
             if (res === oldImportSpecifier)
                 return undefined;
             return res;
         }
-        moduleSpecifiers.updateModuleSpecifier = updateModuleSpecifier;
+        moduleSpecifiers_1.updateModuleSpecifier = updateModuleSpecifier;
         // Note: importingSourceFile is just for usesJsExtensionOnImports
-        function getModuleSpecifier(compilerOptions, importingSourceFile, importingSourceFileName, toFileName, host, preferences) {
-            if (preferences === void 0) { preferences = {}; }
-            return getModuleSpecifierWorker(compilerOptions, importingSourceFileName, toFileName, host, getPreferences(preferences, compilerOptions, importingSourceFile));
+        function getModuleSpecifier(compilerOptions, importingSourceFile, importingSourceFileName, toFileName, host) {
+            return getModuleSpecifierWorker(compilerOptions, importingSourceFileName, toFileName, host, getPreferences({}, compilerOptions, importingSourceFile), {});
         }
-        moduleSpecifiers.getModuleSpecifier = getModuleSpecifier;
-        function getNodeModulesPackageName(compilerOptions, importingSourceFileName, nodeModulesFileName, host) {
+        moduleSpecifiers_1.getModuleSpecifier = getModuleSpecifier;
+        function getNodeModulesPackageName(compilerOptions, importingSourceFileName, nodeModulesFileName, host, preferences) {
             var info = getInfo(importingSourceFileName, host);
-            var modulePaths = getAllModulePaths(importingSourceFileName, nodeModulesFileName, host);
+            var modulePaths = getAllModulePaths(importingSourceFileName, nodeModulesFileName, host, preferences);
             return ts.firstDefined(modulePaths, function (modulePath) { return tryGetModuleNameAsNodeModule(modulePath, info, host, compilerOptions, /*packageNameOnly*/ true); });
         }
-        moduleSpecifiers.getNodeModulesPackageName = getNodeModulesPackageName;
-        function getModuleSpecifierWorker(compilerOptions, importingSourceFileName, toFileName, host, preferences) {
+        moduleSpecifiers_1.getNodeModulesPackageName = getNodeModulesPackageName;
+        function getModuleSpecifierWorker(compilerOptions, importingSourceFileName, toFileName, host, preferences, userPreferences) {
             var info = getInfo(importingSourceFileName, host);
-            var modulePaths = getAllModulePaths(importingSourceFileName, toFileName, host);
+            var modulePaths = getAllModulePaths(importingSourceFileName, toFileName, host, userPreferences);
             return ts.firstDefined(modulePaths, function (modulePath) { return tryGetModuleNameAsNodeModule(modulePath, info, host, compilerOptions); }) ||
                 getLocalModuleSpecifier(toFileName, info, compilerOptions, host, preferences);
         }
+        function tryGetModuleSpecifiersFromCache(moduleSymbol, importingSourceFile, host, userPreferences) {
+            return tryGetModuleSpecifiersFromCacheWorker(moduleSymbol, importingSourceFile, host, userPreferences)[0];
+        }
+        moduleSpecifiers_1.tryGetModuleSpecifiersFromCache = tryGetModuleSpecifiersFromCache;
+        function tryGetModuleSpecifiersFromCacheWorker(moduleSymbol, importingSourceFile, host, userPreferences) {
+            var _a;
+            var moduleSourceFile = ts.getSourceFileOfModule(moduleSymbol);
+            if (!moduleSourceFile) {
+                return ts.emptyArray;
+            }
+            var cache = (_a = host.getModuleSpecifierCache) === null || _a === void 0 ? void 0 : _a.call(host);
+            var cached = cache === null || cache === void 0 ? void 0 : cache.get(importingSourceFile.path, moduleSourceFile.path, userPreferences);
+            return [cached === null || cached === void 0 ? void 0 : cached.moduleSpecifiers, moduleSourceFile, cached === null || cached === void 0 ? void 0 : cached.modulePaths, cache];
+        }
         /** Returns an import for each symlink and for the realpath. */
         function getModuleSpecifiers(moduleSymbol, checker, compilerOptions, importingSourceFile, host, userPreferences) {
+            return getModuleSpecifiersWithCacheInfo(moduleSymbol, checker, compilerOptions, importingSourceFile, host, userPreferences).moduleSpecifiers;
+        }
+        moduleSpecifiers_1.getModuleSpecifiers = getModuleSpecifiers;
+        function getModuleSpecifiersWithCacheInfo(moduleSymbol, checker, compilerOptions, importingSourceFile, host, userPreferences) {
+            var computedWithoutCache = false;
             var ambient = tryGetModuleNameFromAmbientModule(moduleSymbol, checker);
             if (ambient)
-                return [ambient];
+                return { moduleSpecifiers: [ambient], computedWithoutCache: computedWithoutCache };
+            // eslint-disable-next-line prefer-const
+            var _a = tryGetModuleSpecifiersFromCacheWorker(moduleSymbol, importingSourceFile, host, userPreferences), specifiers = _a[0], moduleSourceFile = _a[1], modulePaths = _a[2], cache = _a[3];
+            if (specifiers)
+                return { moduleSpecifiers: specifiers, computedWithoutCache: computedWithoutCache };
+            if (!moduleSourceFile)
+                return { moduleSpecifiers: ts.emptyArray, computedWithoutCache: computedWithoutCache };
+            computedWithoutCache = true;
+            modulePaths || (modulePaths = getAllModulePathsWorker(importingSourceFile.path, moduleSourceFile.originalFileName, host));
+            var result = computeModuleSpecifiers(modulePaths, compilerOptions, importingSourceFile, host, userPreferences);
+            cache === null || cache === void 0 ? void 0 : cache.set(importingSourceFile.path, moduleSourceFile.path, userPreferences, modulePaths, result);
+            return { moduleSpecifiers: result, computedWithoutCache: computedWithoutCache };
+        }
+        moduleSpecifiers_1.getModuleSpecifiersWithCacheInfo = getModuleSpecifiersWithCacheInfo;
+        function computeModuleSpecifiers(modulePaths, compilerOptions, importingSourceFile, host, userPreferences) {
             var info = getInfo(importingSourceFile.path, host);
-            var moduleSourceFile = ts.getSourceFileOfNode(moduleSymbol.valueDeclaration || ts.getNonAugmentationDeclaration(moduleSymbol));
-            if (!moduleSourceFile) {
-                return [];
-            }
-            var modulePaths = getAllModulePaths(importingSourceFile.path, moduleSourceFile.originalFileName, host);
             var preferences = getPreferences(userPreferences, compilerOptions, importingSourceFile);
             var existingSpecifier = ts.forEach(modulePaths, function (modulePath) { return ts.forEach(host.getFileIncludeReasons().get(ts.toPath(modulePath.path, host.getCurrentDirectory(), info.getCanonicalFileName)), function (reason) {
                 if (reason.kind !== ts.FileIncludeKind.Import || reason.file !== importingSourceFile.path)
@@ -114562,8 +116941,10 @@
                     specifier :
                     undefined;
             }); });
-            if (existingSpecifier)
-                return [existingSpecifier];
+            if (existingSpecifier) {
+                var moduleSpecifiers_2 = [existingSpecifier];
+                return moduleSpecifiers_2;
+            }
             var importedFileIsInNodeModules = ts.some(modulePaths, function (p) { return p.isInNodeModules; });
             // Module specifier priority:
             //   1. "Bare package specifiers" (e.g. "@foo/bar") resulting from a path through node_modules to a package.json's "types" entry
@@ -114605,7 +116986,6 @@
                 (nodeModulesSpecifiers === null || nodeModulesSpecifiers === void 0 ? void 0 : nodeModulesSpecifiers.length) ? nodeModulesSpecifiers :
                     ts.Debug.checkDefined(relativeSpecifiers);
         }
-        moduleSpecifiers.getModuleSpecifiers = getModuleSpecifiers;
         // importingSourceFileName is separate because getEditsForFileRename may need to specify an updated path
         function getInfo(importingSourceFileName, host) {
             var getCanonicalFileName = ts.createGetCanonicalFileName(host.useCaseSensitiveFileNames ? host.useCaseSensitiveFileNames() : true);
@@ -114682,7 +117062,7 @@
             }
             return count;
         }
-        moduleSpecifiers.countPathComponents = countPathComponents;
+        moduleSpecifiers_1.countPathComponents = countPathComponents;
         function usesJsExtensionOnImports(_a) {
             var imports = _a.imports;
             return ts.firstDefined(imports, function (_a) {
@@ -114702,25 +117082,23 @@
             });
         }
         function forEachFileNameOfModule(importingFileName, importedFileName, host, preferSymlinks, cb) {
+            var _a;
             var getCanonicalFileName = ts.hostGetCanonicalFileName(host);
             var cwd = host.getCurrentDirectory();
             var referenceRedirect = host.isSourceOfProjectReferenceRedirect(importedFileName) ? host.getProjectReferenceRedirect(importedFileName) : undefined;
             var importedPath = ts.toPath(importedFileName, cwd, getCanonicalFileName);
             var redirects = host.redirectTargetsMap.get(importedPath) || ts.emptyArray;
-            var importedFileNames = __spreadArray(__spreadArray(__spreadArray([], (referenceRedirect ? [referenceRedirect] : ts.emptyArray)), [importedFileName]), redirects);
+            var importedFileNames = __spreadArray(__spreadArray(__spreadArray([], (referenceRedirect ? [referenceRedirect] : ts.emptyArray), true), [importedFileName], false), redirects, true);
             var targets = importedFileNames.map(function (f) { return ts.getNormalizedAbsolutePath(f, cwd); });
             var shouldFilterIgnoredPaths = !ts.every(targets, ts.containsIgnoredPath);
             if (!preferSymlinks) {
                 // Symlinks inside ignored paths are already filtered out of the symlink cache,
                 // so we only need to remove them from the realpath filenames.
-                var result_16 = ts.forEach(targets, function (p) { return !(shouldFilterIgnoredPaths && ts.containsIgnoredPath(p)) && cb(p, referenceRedirect === p); });
-                if (result_16)
-                    return result_16;
+                var result_15 = ts.forEach(targets, function (p) { return !(shouldFilterIgnoredPaths && ts.containsIgnoredPath(p)) && cb(p, referenceRedirect === p); });
+                if (result_15)
+                    return result_15;
             }
-            var links = host.getSymlinkCache
-                ? host.getSymlinkCache()
-                : ts.discoverProbableSymlinks(host.getSourceFiles(), getCanonicalFileName, cwd);
-            var symlinkedDirectories = links.getSymlinkedDirectoriesByRealpath();
+            var symlinkedDirectories = (_a = host.getSymlinkCache) === null || _a === void 0 ? void 0 : _a.call(host).getSymlinkedDirectoriesByRealpath();
             var fullImportedFileName = ts.getNormalizedAbsolutePath(importedFileName, cwd);
             var result = symlinkedDirectories && ts.forEachAncestorDirectory(ts.getDirectoryPath(fullImportedFileName), function (realPathDirectory) {
                 var symlinkDirectories = symlinkedDirectories.get(ts.ensureTrailingDirectorySeparator(ts.toPath(realPathDirectory, cwd, getCanonicalFileName)));
@@ -114738,10 +117116,10 @@
                     for (var _i = 0, symlinkDirectories_1 = symlinkDirectories; _i < symlinkDirectories_1.length; _i++) {
                         var symlinkDirectory = symlinkDirectories_1[_i];
                         var option = ts.resolvePath(symlinkDirectory, relative);
-                        var result_17 = cb(option, target === referenceRedirect);
+                        var result_16 = cb(option, target === referenceRedirect);
                         shouldFilterIgnoredPaths = true; // We found a non-ignored path in symlinks, so we can reject ignored-path realpaths
-                        if (result_17)
-                            return result_17;
+                        if (result_16)
+                            return result_16;
                     }
                 });
             });
@@ -114749,20 +117127,28 @@
                 ? ts.forEach(targets, function (p) { return shouldFilterIgnoredPaths && ts.containsIgnoredPath(p) ? undefined : cb(p, p === referenceRedirect); })
                 : undefined);
         }
-        moduleSpecifiers.forEachFileNameOfModule = forEachFileNameOfModule;
+        moduleSpecifiers_1.forEachFileNameOfModule = forEachFileNameOfModule;
         /**
          * Looks for existing imports that use symlinks to this module.
          * Symlinks will be returned first so they are preferred over the real path.
          */
-        function getAllModulePaths(importingFileName, importedFileName, host) {
+        function getAllModulePaths(importingFilePath, importedFileName, host, preferences, importedFilePath) {
             var _a;
+            if (importedFilePath === void 0) { importedFilePath = ts.toPath(importedFileName, host.getCurrentDirectory(), ts.hostGetCanonicalFileName(host)); }
             var cache = (_a = host.getModuleSpecifierCache) === null || _a === void 0 ? void 0 : _a.call(host);
-            var getCanonicalFileName = ts.hostGetCanonicalFileName(host);
             if (cache) {
-                var cached = cache.get(importingFileName, ts.toPath(importedFileName, host.getCurrentDirectory(), getCanonicalFileName));
-                if (typeof cached === "object")
-                    return cached;
+                var cached = cache.get(importingFilePath, importedFilePath, preferences);
+                if (cached === null || cached === void 0 ? void 0 : cached.modulePaths)
+                    return cached.modulePaths;
             }
+            var modulePaths = getAllModulePathsWorker(importingFilePath, importedFileName, host);
+            if (cache) {
+                cache.setModulePaths(importingFilePath, importedFilePath, preferences, modulePaths);
+            }
+            return modulePaths;
+        }
+        function getAllModulePathsWorker(importingFileName, importedFileName, host) {
+            var getCanonicalFileName = ts.hostGetCanonicalFileName(host);
             var allFileNames = new ts.Map();
             var importedFileFromNodeModules = false;
             forEachFileNameOfModule(importingFileName, importedFileName, host, 
@@ -114774,7 +117160,7 @@
             });
             // Sort by paths closest to importing file Name directory
             var sortedPaths = [];
-            var _loop_26 = function (directory) {
+            var _loop_31 = function (directory) {
                 var directoryStart = ts.ensureTrailingDirectorySeparator(directory);
                 var pathsInDirectory;
                 allFileNames.forEach(function (_a, fileName) {
@@ -114798,7 +117184,7 @@
             };
             var out_directory_1;
             for (var directory = ts.getDirectoryPath(importingFileName); allFileNames.size !== 0;) {
-                var state_9 = _loop_26(directory);
+                var state_9 = _loop_31(directory);
                 directory = out_directory_1;
                 if (state_9 === "break")
                     break;
@@ -114809,9 +117195,6 @@
                     remainingPaths.sort(comparePathsByRedirectAndNumberOfDirectorySeparators);
                 sortedPaths.push.apply(sortedPaths, remainingPaths);
             }
-            if (cache) {
-                cache.set(importingFileName, ts.toPath(importedFileName, host.getCurrentDirectory(), getCanonicalFileName), sortedPaths);
-            }
             return sortedPaths;
         }
         function tryGetModuleNameFromAmbientModule(moduleSymbol, checker) {
@@ -115067,7 +117450,11 @@
             }
         }
         function getJSExtensionForFile(fileName, options) {
-            var ext = ts.extensionFromPath(fileName);
+            var _a;
+            return (_a = tryGetJSExtensionForFile(fileName, options)) !== null && _a !== void 0 ? _a : ts.Debug.fail("Extension " + ts.extensionFromPath(fileName) + " is unsupported:: FileName:: " + fileName);
+        }
+        function tryGetJSExtensionForFile(fileName, options) {
+            var ext = ts.tryGetExtensionFromPath(fileName);
             switch (ext) {
                 case ".ts" /* Ts */:
                 case ".d.ts" /* Dts */:
@@ -115078,12 +117465,11 @@
                 case ".jsx" /* Jsx */:
                 case ".json" /* Json */:
                     return ext;
-                case ".tsbuildinfo" /* TsBuildInfo */:
-                    return ts.Debug.fail("Extension " + ".tsbuildinfo" /* TsBuildInfo */ + " is unsupported:: FileName:: " + fileName);
                 default:
-                    return ts.Debug.assertNever(ext);
+                    return undefined;
             }
         }
+        moduleSpecifiers_1.tryGetJSExtensionForFile = tryGetJSExtensionForFile;
         function getRelativePathIfInDirectory(path, directoryPath, getCanonicalFileName) {
             var relativePath = ts.getRelativePathToDirectoryOrUrl(directoryPath, path, directoryPath, getCanonicalFileName, /*isAbsolutePathAnUrl*/ false);
             return ts.isRootedDiskPath(relativePath) ? undefined : relativePath;
@@ -115100,12 +117486,12 @@
         getCurrentDirectory: function () { return ts.sys.getCurrentDirectory(); },
         getNewLine: function () { return ts.sys.newLine; },
         getCanonicalFileName: ts.createGetCanonicalFileName(ts.sys.useCaseSensitiveFileNames)
-    } : undefined; // TODO: GH#18217
+    } : undefined;
     /**
      * Create a function that reports error by writing to the system and handles the formating of the diagnostic
      */
     function createDiagnosticReporter(system, pretty) {
-        var host = system === ts.sys ? sysFormatDiagnosticsHost : {
+        var host = system === ts.sys && sysFormatDiagnosticsHost ? sysFormatDiagnosticsHost : {
             getCurrentDirectory: function () { return system.getCurrentDirectory(); },
             getNewLine: function () { return system.newLine; },
             getCanonicalFileName: ts.createGetCanonicalFileName(system.useCaseSensitiveFileNames),
@@ -115451,6 +117837,7 @@
         ConfigFileOfReferencedProject: "Config file of referened project",
         ExtendedConfigOfReferencedProject: "Extended config file of referenced project",
         WildcardDirectoryOfReferencedProject: "Wild card directory of referenced project",
+        PackageJson: "package.json file",
     };
     function createWatchFactory(host, options) {
         var watchLogLevel = host.trace ? options.extendedDiagnostics ? ts.WatchLogLevel.Verbose : options.diagnostics ? ts.WatchLogLevel.TriggerOnly : ts.WatchLogLevel.None : ts.WatchLogLevel.None;
@@ -115525,7 +117912,7 @@
             for (var _i = 0; _i < arguments.length; _i++) {
                 args[_i] = arguments[_i];
             }
-            var result = originalGetSourceFile.call.apply(originalGetSourceFile, __spreadArray([compilerHost], args));
+            var result = originalGetSourceFile.call.apply(originalGetSourceFile, __spreadArray([compilerHost], args, false));
             if (result) {
                 result.version = computeHash(result.text);
             }
@@ -115689,12 +118076,14 @@
         var builderProgram;
         var reloadLevel; // level to indicate if the program needs to be reloaded from config file/just filenames etc
         var missingFilesMap; // Map of file watchers for the missing files
+        var packageJsonMap; // map of watchers for package json files used in module resolution
         var watchedWildcardDirectories; // map of watchers for the wild card directories in the config file
         var timerToUpdateProgram; // timer callback to recompile the program
         var timerToInvalidateFailedLookupResolutions; // timer callback to invalidate resolutions for changes in failed lookup locations
         var parsedConfigs; // Parsed commandline and watching cached for referenced projects
         var sharedExtendedConfigFileWatchers; // Map of file watchers for extended files, shared between different referenced projects
         var extendedConfigCache = host.extendedConfigCache; // Cache for extended config evaluation
+        var changesAffectResolution = false; // Flag for indicating non-config changes affect module resolution
         var sourceFilesCache = new ts.Map(); // Cache that stores the source file and version info
         var missingFilePathsRequestedForRelease; // These paths are held temporarily so that we can remove the entry from source file cache if the file is not tracked by missing files
         var hasChangedCompilerOptions = false; // True if the compiler options have changed between compilations
@@ -115738,7 +118127,7 @@
             for (var _i = 1; _i < arguments.length; _i++) {
                 args[_i - 1] = arguments[_i];
             }
-            return getVersionedSourceFileByPath.apply(void 0, __spreadArray([fileName, toPath(fileName)], args));
+            return getVersionedSourceFileByPath.apply(void 0, __spreadArray([fileName, toPath(fileName)], args, false));
         };
         compilerHost.getSourceFileByPath = getVersionedSourceFileByPath;
         compilerHost.getNewLine = function () { return newLine; };
@@ -115845,12 +118234,12 @@
             var program = getCurrentBuilderProgram();
             if (hasChangedCompilerOptions) {
                 newLine = updateNewLine();
-                if (program && ts.changesAffectModuleResolution(program.getCompilerOptions(), compilerOptions)) {
+                if (program && (changesAffectResolution || ts.changesAffectModuleResolution(program.getCompilerOptions(), compilerOptions))) {
                     resolutionCache.clear();
                 }
             }
             // All resolutions are invalid if user provided resolutions
-            var hasInvalidatedResolution = resolutionCache.createHasInvalidatedResolution(userProvidedResolution);
+            var hasInvalidatedResolution = resolutionCache.createHasInvalidatedResolution(userProvidedResolution || changesAffectResolution);
             if (ts.isProgramUptoDate(getCurrentProgram(), rootFileNames, compilerOptions, getSourceVersion, fileExists, hasInvalidatedResolution, hasChangedAutomaticTypeDirectiveNames, getParsedCommandLine, projectReferences)) {
                 if (hasChangedConfigFileParsingErrors) {
                     builderProgram = createProgram(/*rootNames*/ undefined, /*options*/ undefined, compilerHost, builderProgram, configFileParsingDiagnostics, projectReferences);
@@ -115860,6 +118249,7 @@
             else {
                 createNewProgram(hasInvalidatedResolution);
             }
+            changesAffectResolution = false; // reset for next sync
             if (host.afterProgramCreate && program !== builderProgram) {
                 host.afterProgramCreate(builderProgram);
             }
@@ -115879,9 +118269,15 @@
             compilerHost.hasInvalidatedResolution = hasInvalidatedResolution;
             compilerHost.hasChangedAutomaticTypeDirectiveNames = hasChangedAutomaticTypeDirectiveNames;
             builderProgram = createProgram(rootFileNames, compilerOptions, compilerHost, builderProgram, configFileParsingDiagnostics, projectReferences);
+            // map package json cache entries to their realpaths so we don't try to watch across symlinks
+            var packageCacheEntries = ts.map(resolutionCache.getModuleResolutionCache().getPackageJsonInfoCache().entries(), function (_a) {
+                var path = _a[0], data = _a[1];
+                return [compilerHost.realpath ? toPath(compilerHost.realpath(path)) : path, data];
+            });
             resolutionCache.finishCachingPerDirectoryResolution();
             // Update watches
             ts.updateMissingFilePathsWatch(builderProgram.getProgram(), missingFilesMap || (missingFilesMap = new ts.Map()), watchMissingFilePath);
+            ts.updatePackageJsonWatch(packageCacheEntries, packageJsonMap || (packageJsonMap = new ts.Map()), watchPackageJsonLookupPath);
             if (needsUpdateInTypeRootWatch) {
                 resolutionCache.updateTypeRootsWatch();
             }
@@ -116183,6 +118579,21 @@
                 ts.noopFileWatcher :
                 watchFilePath(missingFilePath, missingFilePath, onMissingFileChange, ts.PollingInterval.Medium, watchOptions, ts.WatchType.MissingFile);
         }
+        function watchPackageJsonLookupPath(packageJsonPath) {
+            // If the package.json is pulled into the compilation itself (eg, via json imports), don't add a second watcher here
+            return sourceFilesCache.has(packageJsonPath) ?
+                ts.noopFileWatcher :
+                watchFilePath(packageJsonPath, packageJsonPath, onPackageJsonChange, ts.PollingInterval.High, watchOptions, ts.WatchType.PackageJson);
+        }
+        function onPackageJsonChange(fileName, eventKind, path) {
+            updateCachedSystemWithFile(fileName, path, eventKind);
+            // package.json changes invalidate module resolution and can change the set of loaded files
+            // so if we witness a change to one, we have to do a full reload
+            reloadLevel = ts.ConfigFileProgramReloadLevel.Full;
+            changesAffectResolution = true;
+            // Update the program
+            scheduleProgramUpdate();
+        }
         function onMissingFileChange(fileName, eventKind, missingFilePath) {
             updateCachedSystemWithFile(fileName, missingFilePath, eventKind);
             if (eventKind === ts.FileWatcherEventKind.Created && missingFilesMap.has(missingFilePath)) {
@@ -116526,6 +118937,8 @@
             allWatchedInputFiles: new ts.Map(),
             allWatchedConfigFiles: new ts.Map(),
             allWatchedExtendedConfigFiles: new ts.Map(),
+            allWatchedPackageJsonFiles: new ts.Map(),
+            lastCachedPackageJsonLookups: new ts.Map(),
             timerToBuildInvalidatedProject: undefined,
             reportFileChangeDetected: false,
             watchFile: watchFile,
@@ -116649,6 +119062,7 @@
             });
             ts.mutateMapSkippingNewValues(state.allWatchedWildcardDirectories, currentProjects, { onDeleteValue: function (existingMap) { return existingMap.forEach(ts.closeFileWatcherOf); } });
             ts.mutateMapSkippingNewValues(state.allWatchedInputFiles, currentProjects, { onDeleteValue: function (existingMap) { return existingMap.forEach(ts.closeFileWatcher); } });
+            ts.mutateMapSkippingNewValues(state.allWatchedPackageJsonFiles, currentProjects, { onDeleteValue: function (existingMap) { return existingMap.forEach(ts.closeFileWatcher); } });
         }
         return state.buildOrder = buildOrder;
     }
@@ -116681,7 +119095,7 @@
             for (var _i = 0; _i < arguments.length; _i++) {
                 args[_i] = arguments[_i];
             }
-            return originalGetSourceFile.call.apply(originalGetSourceFile, __spreadArray([compilerHost], args));
+            return originalGetSourceFile.call.apply(originalGetSourceFile, __spreadArray([compilerHost], args, false));
         }), originalReadFile = _a.originalReadFile, originalFileExists = _a.originalFileExists, originalDirectoryExists = _a.originalDirectoryExists, originalCreateDirectory = _a.originalCreateDirectory, originalWriteFile = _a.originalWriteFile, getSourceFileWithCache = _a.getSourceFileWithCache, readFileWithCache = _a.readFileWithCache;
         state.readFileWithCache = readFileWithCache;
         compilerHost.getSourceFile = getSourceFileWithCache;
@@ -116899,6 +119313,10 @@
             (_b = state.typeReferenceDirectiveResolutionCache) === null || _b === void 0 ? void 0 : _b.update(config.options);
             // Create program
             program = host.createProgram(config.fileNames, config.options, compilerHost, getOldProgram(state, projectPath, config), ts.getConfigFileParsingDiagnostics(config), config.projectReferences);
+            state.lastCachedPackageJsonLookups.set(projectPath, state.moduleResolutionCache && ts.map(state.moduleResolutionCache.getPackageJsonInfoCache().entries(), function (_a) {
+                var path = _a[0], data = _a[1];
+                return [state.host.realpath ? toPath(state, state.host.realpath(path)) : path, data];
+            }));
             if (state.watch) {
                 state.builderPrograms.set(projectPath, program);
             }
@@ -116915,7 +119333,7 @@
         }
         function getSyntaxDiagnostics(cancellationToken) {
             ts.Debug.assertIsDefined(program);
-            handleDiagnostics(__spreadArray(__spreadArray(__spreadArray(__spreadArray([], program.getConfigFileParsingDiagnostics()), program.getOptionsDiagnostics(cancellationToken)), program.getGlobalDiagnostics(cancellationToken)), program.getSyntacticDiagnostics(/*sourceFile*/ undefined, cancellationToken)), BuildResultFlags.SyntaxErrors, "Syntactic");
+            handleDiagnostics(__spreadArray(__spreadArray(__spreadArray(__spreadArray([], program.getConfigFileParsingDiagnostics(), true), program.getOptionsDiagnostics(cancellationToken), true), program.getGlobalDiagnostics(cancellationToken), true), program.getSyntacticDiagnostics(/*sourceFile*/ undefined, cancellationToken), true), BuildResultFlags.SyntaxErrors, "Syntactic");
         }
         function getSemanticDiagnostics(cancellationToken) {
             handleDiagnostics(ts.Debug.checkDefined(program).getSemanticDiagnostics(/*sourceFile*/ undefined, cancellationToken), BuildResultFlags.TypeErrors, "Semantic");
@@ -116979,7 +119397,7 @@
             var emitResult = program.emitBuildInfo(writeFileCallback, cancellationToken);
             if (emitResult.diagnostics.length) {
                 reportErrors(state, emitResult.diagnostics);
-                state.diagnostics.set(projectPath, __spreadArray(__spreadArray([], state.diagnostics.get(projectPath)), emitResult.diagnostics));
+                state.diagnostics.set(projectPath, __spreadArray(__spreadArray([], state.diagnostics.get(projectPath), true), emitResult.diagnostics, true));
                 buildResult = BuildResultFlags.EmitErrors & buildResult;
             }
             if (emitResult.emittedFiles && state.write) {
@@ -117130,12 +119548,14 @@
                 watchExtendedConfigFiles(state, projectPath, config);
                 watchWildCardDirectories(state, project, projectPath, config);
                 watchInputFiles(state, project, projectPath, config);
+                watchPackageJsonFiles(state, project, projectPath, config);
             }
             else if (reloadLevel === ts.ConfigFileProgramReloadLevel.Partial) {
                 // Update file names
                 config.fileNames = ts.getFileNamesFromConfigSpecs(config.options.configFile.configFileSpecs, ts.getDirectoryPath(project), config.options, state.parseConfigFileHost);
                 ts.updateErrorForNoInputFiles(config.fileNames, project, config.options.configFile.configFileSpecs, config.errors, ts.canJsonReportNoInputFiles(config.raw));
                 watchInputFiles(state, project, projectPath, config);
+                watchPackageJsonFiles(state, project, projectPath, config);
             }
             var status = getUpToDateStatus(state, config, projectPath);
             verboseReportProjectStatus(state, project, status);
@@ -117378,6 +119798,13 @@
             var extendedConfigStatus = ts.forEach(project.options.configFile.extendedSourceFiles || ts.emptyArray, function (configFile) { return checkConfigFileUpToDateStatus(state, configFile, oldestOutputFileTime, oldestOutputFileName); });
             if (extendedConfigStatus)
                 return extendedConfigStatus;
+            // Check package file time
+            var dependentPackageFileStatus = ts.forEach(state.lastCachedPackageJsonLookups.get(resolvedPath) || ts.emptyArray, function (_a) {
+                var path = _a[0];
+                return checkConfigFileUpToDateStatus(state, path, oldestOutputFileTime, oldestOutputFileName);
+            });
+            if (dependentPackageFileStatus)
+                return dependentPackageFileStatus;
         }
         if (!force && !state.buildInfoChecked.has(resolvedPath)) {
             state.buildInfoChecked.set(resolvedPath, true);
@@ -117424,6 +119851,8 @@
         return actual;
     }
     function updateOutputTimestampsWorker(state, proj, priorNewestUpdateTime, verboseMessage, skipOutputs) {
+        if (proj.options.noEmit)
+            return priorNewestUpdateTime;
         var host = state.host;
         var outputs = ts.getAllProjectOutputs(proj, !host.useCaseSensitiveFileNames());
         if (!skipOutputs || outputs.length !== skipOutputs.size) {
@@ -117687,6 +120116,14 @@
             onDeleteValue: ts.closeFileWatcher,
         });
     }
+    function watchPackageJsonFiles(state, resolved, resolvedPath, parsed) {
+        if (!state.watch || !state.lastCachedPackageJsonLookups)
+            return;
+        ts.mutateMap(getOrCreateValueMapFromConfigFileMap(state.allWatchedPackageJsonFiles, resolvedPath), new ts.Map(state.lastCachedPackageJsonLookups.get(resolvedPath)), {
+            createNewValue: function (path, _input) { return state.watchFile(path, function () { return invalidateProjectAndScheduleBuilds(state, resolvedPath, ts.ConfigFileProgramReloadLevel.Full); }, ts.PollingInterval.High, parsed === null || parsed === void 0 ? void 0 : parsed.watchOptions, ts.WatchType.PackageJson, resolved); },
+            onDeleteValue: ts.closeFileWatcher,
+        });
+    }
     function startWatching(state, buildOrder) {
         if (!state.watchAllProjectsPending)
             return;
@@ -117703,6 +120140,8 @@
                 watchWildCardDirectories(state, resolved, resolvedPath, cfg);
                 // Watch input files
                 watchInputFiles(state, resolved, resolvedPath, cfg);
+                // Watch package json files
+                watchPackageJsonFiles(state, resolved, resolvedPath, cfg);
             }
         }
     }
@@ -117711,6 +120150,7 @@
         ts.clearMap(state.allWatchedExtendedConfigFiles, ts.closeFileWatcherOf);
         ts.clearMap(state.allWatchedWildcardDirectories, function (watchedWildcardDirectories) { return ts.clearMap(watchedWildcardDirectories, ts.closeFileWatcherOf); });
         ts.clearMap(state.allWatchedInputFiles, function (watchedWildcardDirectories) { return ts.clearMap(watchedWildcardDirectories, ts.closeFileWatcher); });
+        ts.clearMap(state.allWatchedPackageJsonFiles, function (watchedPacageJsonFiles) { return ts.clearMap(watchedPacageJsonFiles, ts.closeFileWatcher); });
     }
     function createSolutionBuilderWorker(watch, hostOrHostWithWatch, rootNames, options, baseWatchOptions) {
         var state = createSolutionBuilderState(watch, hostOrHostWithWatch, rootNames, options, baseWatchOptions);
@@ -117743,7 +120183,7 @@
         for (var _i = 2; _i < arguments.length; _i++) {
             args[_i - 2] = arguments[_i];
         }
-        state.host.reportSolutionBuilderStatus(ts.createCompilerDiagnostic.apply(void 0, __spreadArray([message], args)));
+        state.host.reportSolutionBuilderStatus(ts.createCompilerDiagnostic.apply(void 0, __spreadArray([message], args, false)));
     }
     function reportWatchStatus(state, message) {
         var _a, _b;
@@ -117751,7 +120191,7 @@
         for (var _i = 2; _i < arguments.length; _i++) {
             args[_i - 2] = arguments[_i];
         }
-        (_b = (_a = state.hostWithWatch).onWatchStatusChange) === null || _b === void 0 ? void 0 : _b.call(_a, ts.createCompilerDiagnostic.apply(void 0, __spreadArray([message], args)), state.host.getNewLine(), state.baseCompilerOptions);
+        (_b = (_a = state.hostWithWatch).onWatchStatusChange) === null || _b === void 0 ? void 0 : _b.call(_a, ts.createCompilerDiagnostic.apply(void 0, __spreadArray([message], args, false)), state.host.getNewLine(), state.baseCompilerOptions);
     }
     function reportErrors(_a, errors) {
         var host = _a.host;
@@ -117925,8 +120365,9 @@
             return availableVersion.compareTo(cachedTyping.version) <= 0;
         }
         JsTyping.isTypingUpToDate = isTypingUpToDate;
-        JsTyping.nodeCoreModuleList = [
+        var unprefixedNodeCoreModuleList = [
             "assert",
+            "assert/strict",
             "async_hooks",
             "buffer",
             "child_process",
@@ -117935,14 +120376,18 @@
             "constants",
             "crypto",
             "dgram",
+            "diagnostics_channel",
             "dns",
+            "dns/promises",
             "domain",
             "events",
             "fs",
+            "fs/promises",
             "http",
             "https",
             "http2",
             "inspector",
+            "module",
             "net",
             "os",
             "path",
@@ -117953,16 +120398,24 @@
             "readline",
             "repl",
             "stream",
+            "stream/promises",
             "string_decoder",
             "timers",
+            "timers/promises",
             "tls",
+            "trace_events",
             "tty",
             "url",
             "util",
+            "util/types",
             "v8",
             "vm",
+            "wasi",
+            "worker_threads",
             "zlib"
         ];
+        JsTyping.prefixedNodeCoreModuleList = unprefixedNodeCoreModuleList.map(function (name) { return "node:" + name; });
+        JsTyping.nodeCoreModuleList = __spreadArray(__spreadArray([], unprefixedNodeCoreModuleList, true), JsTyping.prefixedNodeCoreModuleList, true);
         JsTyping.nodeCoreModules = new ts.Set(JsTyping.nodeCoreModuleList);
         function nonRelativeModuleNameForTypingCache(moduleName) {
             return JsTyping.nodeCoreModules.has(moduleName) ? "node" : moduleName;
@@ -118288,6 +120741,21 @@
         SemanticClassificationFormat["Original"] = "original";
         SemanticClassificationFormat["TwentyTwenty"] = "2020";
     })(SemanticClassificationFormat = ts.SemanticClassificationFormat || (ts.SemanticClassificationFormat = {}));
+    var CompletionTriggerKind;
+    (function (CompletionTriggerKind) {
+        /** Completion was triggered by typing an identifier, manual invocation (e.g Ctrl+Space) or via API. */
+        CompletionTriggerKind[CompletionTriggerKind["Invoked"] = 1] = "Invoked";
+        /** Completion was triggered by a trigger character. */
+        CompletionTriggerKind[CompletionTriggerKind["TriggerCharacter"] = 2] = "TriggerCharacter";
+        /** Completion was re-triggered as the current completion list is incomplete. */
+        CompletionTriggerKind[CompletionTriggerKind["TriggerForIncompleteCompletions"] = 3] = "TriggerForIncompleteCompletions";
+    })(CompletionTriggerKind = ts.CompletionTriggerKind || (ts.CompletionTriggerKind = {}));
+    var InlayHintKind;
+    (function (InlayHintKind) {
+        InlayHintKind["Type"] = "Type";
+        InlayHintKind["Parameter"] = "Parameter";
+        InlayHintKind["Enum"] = "Enum";
+    })(InlayHintKind = ts.InlayHintKind || (ts.InlayHintKind = {}));
     var HighlightSpanKind;
     (function (HighlightSpanKind) {
         HighlightSpanKind["none"] = "none";
@@ -118448,7 +120916,10 @@
          * interface Y { foo:number; }
          */
         ScriptElementKind["memberVariableElement"] = "property";
-        /** class X { constructor() { } } */
+        /**
+         * class X { constructor() { } }
+         * class X { static { } }
+         */
         ScriptElementKind["constructorImplementationElement"] = "constructor";
         /** interface Y { ():number; } */
         ScriptElementKind["callSignatureElement"] = "call";
@@ -118570,37 +121041,37 @@
     })(SemanticMeaning = ts.SemanticMeaning || (ts.SemanticMeaning = {}));
     function getMeaningFromDeclaration(node) {
         switch (node.kind) {
-            case 250 /* VariableDeclaration */:
+            case 252 /* VariableDeclaration */:
                 return ts.isInJSFile(node) && ts.getJSDocEnumTag(node) ? 7 /* All */ : 1 /* Value */;
-            case 161 /* Parameter */:
-            case 199 /* BindingElement */:
-            case 164 /* PropertyDeclaration */:
-            case 163 /* PropertySignature */:
-            case 289 /* PropertyAssignment */:
-            case 290 /* ShorthandPropertyAssignment */:
-            case 166 /* MethodDeclaration */:
-            case 165 /* MethodSignature */:
-            case 167 /* Constructor */:
-            case 168 /* GetAccessor */:
-            case 169 /* SetAccessor */:
-            case 252 /* FunctionDeclaration */:
-            case 209 /* FunctionExpression */:
-            case 210 /* ArrowFunction */:
-            case 288 /* CatchClause */:
-            case 281 /* JsxAttribute */:
+            case 162 /* Parameter */:
+            case 201 /* BindingElement */:
+            case 165 /* PropertyDeclaration */:
+            case 164 /* PropertySignature */:
+            case 291 /* PropertyAssignment */:
+            case 292 /* ShorthandPropertyAssignment */:
+            case 167 /* MethodDeclaration */:
+            case 166 /* MethodSignature */:
+            case 169 /* Constructor */:
+            case 170 /* GetAccessor */:
+            case 171 /* SetAccessor */:
+            case 254 /* FunctionDeclaration */:
+            case 211 /* FunctionExpression */:
+            case 212 /* ArrowFunction */:
+            case 290 /* CatchClause */:
+            case 283 /* JsxAttribute */:
                 return 1 /* Value */;
-            case 160 /* TypeParameter */:
-            case 254 /* InterfaceDeclaration */:
-            case 255 /* TypeAliasDeclaration */:
-            case 178 /* TypeLiteral */:
+            case 161 /* TypeParameter */:
+            case 256 /* InterfaceDeclaration */:
+            case 257 /* TypeAliasDeclaration */:
+            case 180 /* TypeLiteral */:
                 return 2 /* Type */;
-            case 335 /* JSDocTypedefTag */:
+            case 340 /* JSDocTypedefTag */:
                 // If it has no name node, it shares the name with the value declaration below it.
                 return node.name === undefined ? 1 /* Value */ | 2 /* Type */ : 2 /* Type */;
-            case 292 /* EnumMember */:
-            case 253 /* ClassDeclaration */:
+            case 294 /* EnumMember */:
+            case 255 /* ClassDeclaration */:
                 return 1 /* Value */ | 2 /* Type */;
-            case 257 /* ModuleDeclaration */:
+            case 259 /* ModuleDeclaration */:
                 if (ts.isAmbientModule(node)) {
                     return 4 /* Namespace */ | 1 /* Value */;
                 }
@@ -118610,16 +121081,16 @@
                 else {
                     return 4 /* Namespace */;
                 }
-            case 256 /* EnumDeclaration */:
-            case 265 /* NamedImports */:
-            case 266 /* ImportSpecifier */:
-            case 261 /* ImportEqualsDeclaration */:
-            case 262 /* ImportDeclaration */:
-            case 267 /* ExportAssignment */:
-            case 268 /* ExportDeclaration */:
+            case 258 /* EnumDeclaration */:
+            case 267 /* NamedImports */:
+            case 268 /* ImportSpecifier */:
+            case 263 /* ImportEqualsDeclaration */:
+            case 264 /* ImportDeclaration */:
+            case 269 /* ExportAssignment */:
+            case 270 /* ExportDeclaration */:
                 return 7 /* All */;
             // An external module can be a Value
-            case 298 /* SourceFile */:
+            case 300 /* SourceFile */:
                 return 4 /* Namespace */ | 1 /* Value */;
         }
         return 7 /* All */;
@@ -118627,23 +121098,32 @@
     ts.getMeaningFromDeclaration = getMeaningFromDeclaration;
     function getMeaningFromLocation(node) {
         node = getAdjustedReferenceLocation(node);
-        if (node.kind === 298 /* SourceFile */) {
+        var parent = node.parent;
+        if (node.kind === 300 /* SourceFile */) {
             return 1 /* Value */;
         }
-        else if (node.parent.kind === 267 /* ExportAssignment */
-            || node.parent.kind === 273 /* ExternalModuleReference */
-            || node.parent.kind === 266 /* ImportSpecifier */
-            || node.parent.kind === 263 /* ImportClause */
-            || ts.isImportEqualsDeclaration(node.parent) && node === node.parent.name) {
+        else if (ts.isExportAssignment(parent)
+            || ts.isExportSpecifier(parent)
+            || ts.isExternalModuleReference(parent)
+            || ts.isImportSpecifier(parent)
+            || ts.isImportClause(parent)
+            || ts.isImportEqualsDeclaration(parent) && node === parent.name) {
+            var decl = parent;
+            while (decl) {
+                if (ts.isImportEqualsDeclaration(decl) || ts.isImportClause(decl) || ts.isExportDeclaration(decl)) {
+                    return decl.isTypeOnly ? 2 /* Type */ : 7 /* All */;
+                }
+                decl = decl.parent;
+            }
             return 7 /* All */;
         }
         else if (isInRightSideOfInternalImportEqualsDeclaration(node)) {
             return getMeaningFromRightHandSideOfImportEquals(node);
         }
         else if (ts.isDeclarationName(node)) {
-            return getMeaningFromDeclaration(node.parent);
+            return getMeaningFromDeclaration(parent);
         }
-        else if (ts.isEntityName(node) && (ts.isJSDocNameReference(node.parent) || ts.isJSDocLink(node.parent))) {
+        else if (ts.isEntityName(node) && ts.findAncestor(node, ts.or(ts.isJSDocNameReference, ts.isJSDocLinkLike, ts.isJSDocMemberName))) {
             return 7 /* All */;
         }
         else if (isTypeReference(node)) {
@@ -118652,11 +121132,11 @@
         else if (isNamespaceReference(node)) {
             return 4 /* Namespace */;
         }
-        else if (ts.isTypeParameterDeclaration(node.parent)) {
-            ts.Debug.assert(ts.isJSDocTemplateTag(node.parent.parent)); // Else would be handled by isDeclarationName
+        else if (ts.isTypeParameterDeclaration(parent)) {
+            ts.Debug.assert(ts.isJSDocTemplateTag(parent.parent)); // Else would be handled by isDeclarationName
             return 2 /* Type */;
         }
-        else if (ts.isLiteralTypeNode(node.parent)) {
+        else if (ts.isLiteralTypeNode(parent)) {
             // This might be T["name"], which is actually referencing a property and not a type. So allow both meanings.
             return 2 /* Type */ | 1 /* Value */;
         }
@@ -118669,11 +121149,11 @@
         //     import a = |b|; // Namespace
         //     import a = |b.c|; // Value, type, namespace
         //     import a = |b.c|.d; // Namespace
-        var name = node.kind === 158 /* QualifiedName */ ? node : ts.isQualifiedName(node.parent) && node.parent.right === node ? node.parent : undefined;
-        return name && name.parent.kind === 261 /* ImportEqualsDeclaration */ ? 7 /* All */ : 4 /* Namespace */;
+        var name = node.kind === 159 /* QualifiedName */ ? node : ts.isQualifiedName(node.parent) && node.parent.right === node ? node.parent : undefined;
+        return name && name.parent.kind === 263 /* ImportEqualsDeclaration */ ? 7 /* All */ : 4 /* Namespace */;
     }
     function isInRightSideOfInternalImportEqualsDeclaration(node) {
-        while (node.parent.kind === 158 /* QualifiedName */) {
+        while (node.parent.kind === 159 /* QualifiedName */) {
             node = node.parent;
         }
         return ts.isInternalModuleImportEqualsDeclaration(node.parent) && node.parent.moduleReference === node;
@@ -118685,27 +121165,27 @@
     function isQualifiedNameNamespaceReference(node) {
         var root = node;
         var isLastClause = true;
-        if (root.parent.kind === 158 /* QualifiedName */) {
-            while (root.parent && root.parent.kind === 158 /* QualifiedName */) {
+        if (root.parent.kind === 159 /* QualifiedName */) {
+            while (root.parent && root.parent.kind === 159 /* QualifiedName */) {
                 root = root.parent;
             }
             isLastClause = root.right === node;
         }
-        return root.parent.kind === 174 /* TypeReference */ && !isLastClause;
+        return root.parent.kind === 176 /* TypeReference */ && !isLastClause;
     }
     function isPropertyAccessNamespaceReference(node) {
         var root = node;
         var isLastClause = true;
-        if (root.parent.kind === 202 /* PropertyAccessExpression */) {
-            while (root.parent && root.parent.kind === 202 /* PropertyAccessExpression */) {
+        if (root.parent.kind === 204 /* PropertyAccessExpression */) {
+            while (root.parent && root.parent.kind === 204 /* PropertyAccessExpression */) {
                 root = root.parent;
             }
             isLastClause = root.name === node;
         }
-        if (!isLastClause && root.parent.kind === 224 /* ExpressionWithTypeArguments */ && root.parent.parent.kind === 287 /* HeritageClause */) {
+        if (!isLastClause && root.parent.kind === 226 /* ExpressionWithTypeArguments */ && root.parent.parent.kind === 289 /* HeritageClause */) {
             var decl = root.parent.parent.parent;
-            return (decl.kind === 253 /* ClassDeclaration */ && root.parent.parent.token === 116 /* ImplementsKeyword */) ||
-                (decl.kind === 254 /* InterfaceDeclaration */ && root.parent.parent.token === 93 /* ExtendsKeyword */);
+            return (decl.kind === 255 /* ClassDeclaration */ && root.parent.parent.token === 117 /* ImplementsKeyword */) ||
+                (decl.kind === 256 /* InterfaceDeclaration */ && root.parent.parent.token === 94 /* ExtendsKeyword */);
         }
         return false;
     }
@@ -118714,17 +121194,17 @@
             node = node.parent;
         }
         switch (node.kind) {
-            case 107 /* ThisKeyword */:
+            case 108 /* ThisKeyword */:
                 return !ts.isExpressionNode(node);
-            case 188 /* ThisType */:
+            case 190 /* ThisType */:
                 return true;
         }
         switch (node.parent.kind) {
-            case 174 /* TypeReference */:
+            case 176 /* TypeReference */:
                 return true;
-            case 196 /* ImportType */:
+            case 198 /* ImportType */:
                 return !node.parent.isTypeOf;
-            case 224 /* ExpressionWithTypeArguments */:
+            case 226 /* ExpressionWithTypeArguments */:
                 return !ts.isExpressionWithTypeArgumentsInClassExtendsClause(node.parent);
         }
         return false;
@@ -118791,7 +121271,7 @@
     ts.climbPastPropertyOrElementAccess = climbPastPropertyOrElementAccess;
     function getTargetLabel(referenceNode, labelName) {
         while (referenceNode) {
-            if (referenceNode.kind === 246 /* LabeledStatement */ && referenceNode.label.escapedText === labelName) {
+            if (referenceNode.kind === 248 /* LabeledStatement */ && referenceNode.label.escapedText === labelName) {
                 return referenceNode.label;
             }
             referenceNode = referenceNode.parent;
@@ -118852,22 +121332,22 @@
     ts.isNameOfFunctionDeclaration = isNameOfFunctionDeclaration;
     function isLiteralNameOfPropertyDeclarationOrIndexAccess(node) {
         switch (node.parent.kind) {
-            case 164 /* PropertyDeclaration */:
-            case 163 /* PropertySignature */:
-            case 289 /* PropertyAssignment */:
-            case 292 /* EnumMember */:
-            case 166 /* MethodDeclaration */:
-            case 165 /* MethodSignature */:
-            case 168 /* GetAccessor */:
-            case 169 /* SetAccessor */:
-            case 257 /* ModuleDeclaration */:
+            case 165 /* PropertyDeclaration */:
+            case 164 /* PropertySignature */:
+            case 291 /* PropertyAssignment */:
+            case 294 /* EnumMember */:
+            case 167 /* MethodDeclaration */:
+            case 166 /* MethodSignature */:
+            case 170 /* GetAccessor */:
+            case 171 /* SetAccessor */:
+            case 259 /* ModuleDeclaration */:
                 return ts.getNameOfDeclaration(node.parent) === node;
-            case 203 /* ElementAccessExpression */:
+            case 205 /* ElementAccessExpression */:
                 return node.parent.argumentExpression === node;
-            case 159 /* ComputedPropertyName */:
+            case 160 /* ComputedPropertyName */:
                 return true;
-            case 192 /* LiteralType */:
-                return node.parent.parent.kind === 190 /* IndexedAccessType */;
+            case 194 /* LiteralType */:
+                return node.parent.parent.kind === 192 /* IndexedAccessType */;
             default:
                 return false;
         }
@@ -118891,17 +121371,17 @@
                 return undefined;
             }
             switch (node.kind) {
-                case 298 /* SourceFile */:
-                case 166 /* MethodDeclaration */:
-                case 165 /* MethodSignature */:
-                case 252 /* FunctionDeclaration */:
-                case 209 /* FunctionExpression */:
-                case 168 /* GetAccessor */:
-                case 169 /* SetAccessor */:
-                case 253 /* ClassDeclaration */:
-                case 254 /* InterfaceDeclaration */:
-                case 256 /* EnumDeclaration */:
-                case 257 /* ModuleDeclaration */:
+                case 300 /* SourceFile */:
+                case 167 /* MethodDeclaration */:
+                case 166 /* MethodSignature */:
+                case 254 /* FunctionDeclaration */:
+                case 211 /* FunctionExpression */:
+                case 170 /* GetAccessor */:
+                case 171 /* SetAccessor */:
+                case 255 /* ClassDeclaration */:
+                case 256 /* InterfaceDeclaration */:
+                case 258 /* EnumDeclaration */:
+                case 259 /* ModuleDeclaration */:
                     return node;
             }
         }
@@ -118909,54 +121389,56 @@
     ts.getContainerNode = getContainerNode;
     function getNodeKind(node) {
         switch (node.kind) {
-            case 298 /* SourceFile */:
+            case 300 /* SourceFile */:
                 return ts.isExternalModule(node) ? "module" /* moduleElement */ : "script" /* scriptElement */;
-            case 257 /* ModuleDeclaration */:
+            case 259 /* ModuleDeclaration */:
                 return "module" /* moduleElement */;
-            case 253 /* ClassDeclaration */:
-            case 222 /* ClassExpression */:
+            case 255 /* ClassDeclaration */:
+            case 224 /* ClassExpression */:
                 return "class" /* classElement */;
-            case 254 /* InterfaceDeclaration */: return "interface" /* interfaceElement */;
-            case 255 /* TypeAliasDeclaration */:
-            case 328 /* JSDocCallbackTag */:
-            case 335 /* JSDocTypedefTag */:
+            case 256 /* InterfaceDeclaration */: return "interface" /* interfaceElement */;
+            case 257 /* TypeAliasDeclaration */:
+            case 333 /* JSDocCallbackTag */:
+            case 340 /* JSDocTypedefTag */:
                 return "type" /* typeElement */;
-            case 256 /* EnumDeclaration */: return "enum" /* enumElement */;
-            case 250 /* VariableDeclaration */:
+            case 258 /* EnumDeclaration */: return "enum" /* enumElement */;
+            case 252 /* VariableDeclaration */:
                 return getKindOfVariableDeclaration(node);
-            case 199 /* BindingElement */:
+            case 201 /* BindingElement */:
                 return getKindOfVariableDeclaration(ts.getRootDeclaration(node));
-            case 210 /* ArrowFunction */:
-            case 252 /* FunctionDeclaration */:
-            case 209 /* FunctionExpression */:
+            case 212 /* ArrowFunction */:
+            case 254 /* FunctionDeclaration */:
+            case 211 /* FunctionExpression */:
                 return "function" /* functionElement */;
-            case 168 /* GetAccessor */: return "getter" /* memberGetAccessorElement */;
-            case 169 /* SetAccessor */: return "setter" /* memberSetAccessorElement */;
-            case 166 /* MethodDeclaration */:
-            case 165 /* MethodSignature */:
+            case 170 /* GetAccessor */: return "getter" /* memberGetAccessorElement */;
+            case 171 /* SetAccessor */: return "setter" /* memberSetAccessorElement */;
+            case 167 /* MethodDeclaration */:
+            case 166 /* MethodSignature */:
                 return "method" /* memberFunctionElement */;
-            case 289 /* PropertyAssignment */:
+            case 291 /* PropertyAssignment */:
                 var initializer = node.initializer;
                 return ts.isFunctionLike(initializer) ? "method" /* memberFunctionElement */ : "property" /* memberVariableElement */;
-            case 164 /* PropertyDeclaration */:
-            case 163 /* PropertySignature */:
-            case 290 /* ShorthandPropertyAssignment */:
-            case 291 /* SpreadAssignment */:
+            case 165 /* PropertyDeclaration */:
+            case 164 /* PropertySignature */:
+            case 292 /* ShorthandPropertyAssignment */:
+            case 293 /* SpreadAssignment */:
                 return "property" /* memberVariableElement */;
-            case 172 /* IndexSignature */: return "index" /* indexSignatureElement */;
-            case 171 /* ConstructSignature */: return "construct" /* constructSignatureElement */;
-            case 170 /* CallSignature */: return "call" /* callSignatureElement */;
-            case 167 /* Constructor */: return "constructor" /* constructorImplementationElement */;
-            case 160 /* TypeParameter */: return "type parameter" /* typeParameterElement */;
-            case 292 /* EnumMember */: return "enum member" /* enumMemberElement */;
-            case 161 /* Parameter */: return ts.hasSyntacticModifier(node, 16476 /* ParameterPropertyModifier */) ? "property" /* memberVariableElement */ : "parameter" /* parameterElement */;
-            case 261 /* ImportEqualsDeclaration */:
-            case 266 /* ImportSpecifier */:
-            case 271 /* ExportSpecifier */:
-            case 264 /* NamespaceImport */:
-            case 270 /* NamespaceExport */:
+            case 174 /* IndexSignature */: return "index" /* indexSignatureElement */;
+            case 173 /* ConstructSignature */: return "construct" /* constructSignatureElement */;
+            case 172 /* CallSignature */: return "call" /* callSignatureElement */;
+            case 169 /* Constructor */:
+            case 168 /* ClassStaticBlockDeclaration */:
+                return "constructor" /* constructorImplementationElement */;
+            case 161 /* TypeParameter */: return "type parameter" /* typeParameterElement */;
+            case 294 /* EnumMember */: return "enum member" /* enumMemberElement */;
+            case 162 /* Parameter */: return ts.hasSyntacticModifier(node, 16476 /* ParameterPropertyModifier */) ? "property" /* memberVariableElement */ : "parameter" /* parameterElement */;
+            case 263 /* ImportEqualsDeclaration */:
+            case 268 /* ImportSpecifier */:
+            case 273 /* ExportSpecifier */:
+            case 266 /* NamespaceImport */:
+            case 272 /* NamespaceExport */:
                 return "alias" /* alias */;
-            case 217 /* BinaryExpression */:
+            case 219 /* BinaryExpression */:
                 var kind = ts.getAssignmentDeclarationKind(node);
                 var right = node.right;
                 switch (kind) {
@@ -118983,9 +121465,9 @@
                         return "" /* unknown */;
                     }
                 }
-            case 78 /* Identifier */:
+            case 79 /* Identifier */:
                 return ts.isImportClause(node.parent) ? "alias" /* alias */ : "" /* unknown */;
-            case 267 /* ExportAssignment */:
+            case 269 /* ExportAssignment */:
                 var scriptKind = getNodeKind(node.expression);
                 // If the expression didn't come back with something (like it does for an identifiers)
                 return scriptKind === "" /* unknown */ ? "const" /* constElement */ : scriptKind;
@@ -119003,12 +121485,12 @@
     ts.getNodeKind = getNodeKind;
     function isThis(node) {
         switch (node.kind) {
-            case 107 /* ThisKeyword */:
+            case 108 /* ThisKeyword */:
                 // case SyntaxKind.ThisType: TODO: GH#9267
                 return true;
-            case 78 /* Identifier */:
+            case 79 /* Identifier */:
                 // 'this' as a parameter
-                return ts.identifierIsThisKeyword(node) && node.parent.kind === 161 /* Parameter */;
+                return ts.identifierIsThisKeyword(node) && node.parent.kind === 162 /* Parameter */;
             default:
                 return false;
         }
@@ -119073,42 +121555,42 @@
             return false;
         }
         switch (n.kind) {
-            case 253 /* ClassDeclaration */:
-            case 254 /* InterfaceDeclaration */:
-            case 256 /* EnumDeclaration */:
-            case 201 /* ObjectLiteralExpression */:
-            case 197 /* ObjectBindingPattern */:
-            case 178 /* TypeLiteral */:
-            case 231 /* Block */:
-            case 258 /* ModuleBlock */:
-            case 259 /* CaseBlock */:
-            case 265 /* NamedImports */:
-            case 269 /* NamedExports */:
+            case 255 /* ClassDeclaration */:
+            case 256 /* InterfaceDeclaration */:
+            case 258 /* EnumDeclaration */:
+            case 203 /* ObjectLiteralExpression */:
+            case 199 /* ObjectBindingPattern */:
+            case 180 /* TypeLiteral */:
+            case 233 /* Block */:
+            case 260 /* ModuleBlock */:
+            case 261 /* CaseBlock */:
+            case 267 /* NamedImports */:
+            case 271 /* NamedExports */:
                 return nodeEndsWith(n, 19 /* CloseBraceToken */, sourceFile);
-            case 288 /* CatchClause */:
+            case 290 /* CatchClause */:
                 return isCompletedNode(n.block, sourceFile);
-            case 205 /* NewExpression */:
+            case 207 /* NewExpression */:
                 if (!n.arguments) {
                     return true;
                 }
             // falls through
-            case 204 /* CallExpression */:
-            case 208 /* ParenthesizedExpression */:
-            case 187 /* ParenthesizedType */:
+            case 206 /* CallExpression */:
+            case 210 /* ParenthesizedExpression */:
+            case 189 /* ParenthesizedType */:
                 return nodeEndsWith(n, 21 /* CloseParenToken */, sourceFile);
-            case 175 /* FunctionType */:
-            case 176 /* ConstructorType */:
+            case 177 /* FunctionType */:
+            case 178 /* ConstructorType */:
                 return isCompletedNode(n.type, sourceFile);
-            case 167 /* Constructor */:
-            case 168 /* GetAccessor */:
-            case 169 /* SetAccessor */:
-            case 252 /* FunctionDeclaration */:
-            case 209 /* FunctionExpression */:
-            case 166 /* MethodDeclaration */:
-            case 165 /* MethodSignature */:
-            case 171 /* ConstructSignature */:
-            case 170 /* CallSignature */:
-            case 210 /* ArrowFunction */:
+            case 169 /* Constructor */:
+            case 170 /* GetAccessor */:
+            case 171 /* SetAccessor */:
+            case 254 /* FunctionDeclaration */:
+            case 211 /* FunctionExpression */:
+            case 167 /* MethodDeclaration */:
+            case 166 /* MethodSignature */:
+            case 173 /* ConstructSignature */:
+            case 172 /* CallSignature */:
+            case 212 /* ArrowFunction */:
                 if (n.body) {
                     return isCompletedNode(n.body, sourceFile);
                 }
@@ -119118,65 +121600,65 @@
                 // Even though type parameters can be unclosed, we can get away with
                 // having at least a closing paren.
                 return hasChildOfKind(n, 21 /* CloseParenToken */, sourceFile);
-            case 257 /* ModuleDeclaration */:
+            case 259 /* ModuleDeclaration */:
                 return !!n.body && isCompletedNode(n.body, sourceFile);
-            case 235 /* IfStatement */:
+            case 237 /* IfStatement */:
                 if (n.elseStatement) {
                     return isCompletedNode(n.elseStatement, sourceFile);
                 }
                 return isCompletedNode(n.thenStatement, sourceFile);
-            case 234 /* ExpressionStatement */:
+            case 236 /* ExpressionStatement */:
                 return isCompletedNode(n.expression, sourceFile) ||
                     hasChildOfKind(n, 26 /* SemicolonToken */, sourceFile);
-            case 200 /* ArrayLiteralExpression */:
-            case 198 /* ArrayBindingPattern */:
-            case 203 /* ElementAccessExpression */:
-            case 159 /* ComputedPropertyName */:
-            case 180 /* TupleType */:
+            case 202 /* ArrayLiteralExpression */:
+            case 200 /* ArrayBindingPattern */:
+            case 205 /* ElementAccessExpression */:
+            case 160 /* ComputedPropertyName */:
+            case 182 /* TupleType */:
                 return nodeEndsWith(n, 23 /* CloseBracketToken */, sourceFile);
-            case 172 /* IndexSignature */:
+            case 174 /* IndexSignature */:
                 if (n.type) {
                     return isCompletedNode(n.type, sourceFile);
                 }
                 return hasChildOfKind(n, 23 /* CloseBracketToken */, sourceFile);
-            case 285 /* CaseClause */:
-            case 286 /* DefaultClause */:
+            case 287 /* CaseClause */:
+            case 288 /* DefaultClause */:
                 // there is no such thing as terminator token for CaseClause/DefaultClause so for simplicity always consider them non-completed
                 return false;
-            case 238 /* ForStatement */:
-            case 239 /* ForInStatement */:
-            case 240 /* ForOfStatement */:
-            case 237 /* WhileStatement */:
+            case 240 /* ForStatement */:
+            case 241 /* ForInStatement */:
+            case 242 /* ForOfStatement */:
+            case 239 /* WhileStatement */:
                 return isCompletedNode(n.statement, sourceFile);
-            case 236 /* DoStatement */:
+            case 238 /* DoStatement */:
                 // rough approximation: if DoStatement has While keyword - then if node is completed is checking the presence of ')';
-                return hasChildOfKind(n, 114 /* WhileKeyword */, sourceFile)
+                return hasChildOfKind(n, 115 /* WhileKeyword */, sourceFile)
                     ? nodeEndsWith(n, 21 /* CloseParenToken */, sourceFile)
                     : isCompletedNode(n.statement, sourceFile);
-            case 177 /* TypeQuery */:
+            case 179 /* TypeQuery */:
                 return isCompletedNode(n.exprName, sourceFile);
-            case 212 /* TypeOfExpression */:
-            case 211 /* DeleteExpression */:
-            case 213 /* VoidExpression */:
-            case 220 /* YieldExpression */:
-            case 221 /* SpreadElement */:
+            case 214 /* TypeOfExpression */:
+            case 213 /* DeleteExpression */:
+            case 215 /* VoidExpression */:
+            case 222 /* YieldExpression */:
+            case 223 /* SpreadElement */:
                 var unaryWordExpression = n;
                 return isCompletedNode(unaryWordExpression.expression, sourceFile);
-            case 206 /* TaggedTemplateExpression */:
+            case 208 /* TaggedTemplateExpression */:
                 return isCompletedNode(n.template, sourceFile);
-            case 219 /* TemplateExpression */:
+            case 221 /* TemplateExpression */:
                 var lastSpan = ts.lastOrUndefined(n.templateSpans);
                 return isCompletedNode(lastSpan, sourceFile);
-            case 229 /* TemplateSpan */:
+            case 231 /* TemplateSpan */:
                 return ts.nodeIsPresent(n.literal);
-            case 268 /* ExportDeclaration */:
-            case 262 /* ImportDeclaration */:
+            case 270 /* ExportDeclaration */:
+            case 264 /* ImportDeclaration */:
                 return ts.nodeIsPresent(n.moduleSpecifier);
-            case 215 /* PrefixUnaryExpression */:
+            case 217 /* PrefixUnaryExpression */:
                 return isCompletedNode(n.operand, sourceFile);
-            case 217 /* BinaryExpression */:
+            case 219 /* BinaryExpression */:
                 return isCompletedNode(n.right, sourceFile);
-            case 218 /* ConditionalExpression */:
+            case 220 /* ConditionalExpression */:
                 return isCompletedNode(n.whenFalse, sourceFile);
             default:
                 return true;
@@ -119236,13 +121718,13 @@
     }
     ts.findContainingList = findContainingList;
     function isDefaultModifier(node) {
-        return node.kind === 87 /* DefaultKeyword */;
+        return node.kind === 88 /* DefaultKeyword */;
     }
     function isClassKeyword(node) {
-        return node.kind === 83 /* ClassKeyword */;
+        return node.kind === 84 /* ClassKeyword */;
     }
     function isFunctionKeyword(node) {
-        return node.kind === 97 /* FunctionKeyword */;
+        return node.kind === 98 /* FunctionKeyword */;
     }
     function getAdjustedLocationForClass(node) {
         if (ts.isNamedDeclaration(node)) {
@@ -119251,7 +121733,7 @@
         if (ts.isClassDeclaration(node)) {
             // for class and function declarations, use the `default` modifier
             // when the declaration is unnamed.
-            var defaultModifier = ts.find(node.modifiers, isDefaultModifier);
+            var defaultModifier = node.modifiers && ts.find(node.modifiers, isDefaultModifier);
             if (defaultModifier)
                 return defaultModifier;
         }
@@ -119295,6 +121777,10 @@
         if (contextualType) {
             return contextualType;
         }
+        var parent = node.parent;
+        if (parent && ts.isBinaryExpression(parent) && isEqualityOperatorKind(parent.operatorToken.kind)) {
+            return checker.getTypeAtLocation(node === parent.left ? parent.right : parent.left);
+        }
         var ancestorTypeNode = getAncestorTypeNode(node);
         return ancestorTypeNode && checker.getTypeAtLocation(ancestorTypeNode);
     }
@@ -119302,11 +121788,11 @@
     function getAdjustedLocationForDeclaration(node, forRename) {
         if (!forRename) {
             switch (node.kind) {
-                case 253 /* ClassDeclaration */:
-                case 222 /* ClassExpression */:
+                case 255 /* ClassDeclaration */:
+                case 224 /* ClassExpression */:
                     return getAdjustedLocationForClass(node);
-                case 252 /* FunctionDeclaration */:
-                case 209 /* FunctionExpression */:
+                case 254 /* FunctionDeclaration */:
+                case 211 /* FunctionExpression */:
                     return getAdjustedLocationForFunction(node);
             }
         }
@@ -119396,30 +121882,30 @@
         //
         // NOTE: If the node is a modifier, we don't adjust its location if it is the `default` modifier as that is handled
         // specially by `getSymbolAtLocation`.
-        if (ts.isModifier(node) && (forRename || node.kind !== 87 /* DefaultKeyword */) ? ts.contains(parent.modifiers, node) :
-            node.kind === 83 /* ClassKeyword */ ? ts.isClassDeclaration(parent) || ts.isClassExpression(node) :
-                node.kind === 97 /* FunctionKeyword */ ? ts.isFunctionDeclaration(parent) || ts.isFunctionExpression(node) :
-                    node.kind === 117 /* InterfaceKeyword */ ? ts.isInterfaceDeclaration(parent) :
-                        node.kind === 91 /* EnumKeyword */ ? ts.isEnumDeclaration(parent) :
-                            node.kind === 149 /* TypeKeyword */ ? ts.isTypeAliasDeclaration(parent) :
-                                node.kind === 140 /* NamespaceKeyword */ || node.kind === 139 /* ModuleKeyword */ ? ts.isModuleDeclaration(parent) :
-                                    node.kind === 99 /* ImportKeyword */ ? ts.isImportEqualsDeclaration(parent) :
-                                        node.kind === 134 /* GetKeyword */ ? ts.isGetAccessorDeclaration(parent) :
-                                            node.kind === 146 /* SetKeyword */ && ts.isSetAccessorDeclaration(parent)) {
+        if (ts.isModifier(node) && (forRename || node.kind !== 88 /* DefaultKeyword */) ? ts.contains(parent.modifiers, node) :
+            node.kind === 84 /* ClassKeyword */ ? ts.isClassDeclaration(parent) || ts.isClassExpression(node) :
+                node.kind === 98 /* FunctionKeyword */ ? ts.isFunctionDeclaration(parent) || ts.isFunctionExpression(node) :
+                    node.kind === 118 /* InterfaceKeyword */ ? ts.isInterfaceDeclaration(parent) :
+                        node.kind === 92 /* EnumKeyword */ ? ts.isEnumDeclaration(parent) :
+                            node.kind === 150 /* TypeKeyword */ ? ts.isTypeAliasDeclaration(parent) :
+                                node.kind === 141 /* NamespaceKeyword */ || node.kind === 140 /* ModuleKeyword */ ? ts.isModuleDeclaration(parent) :
+                                    node.kind === 100 /* ImportKeyword */ ? ts.isImportEqualsDeclaration(parent) :
+                                        node.kind === 135 /* GetKeyword */ ? ts.isGetAccessorDeclaration(parent) :
+                                            node.kind === 147 /* SetKeyword */ && ts.isSetAccessorDeclaration(parent)) {
             var location = getAdjustedLocationForDeclaration(parent, forRename);
             if (location) {
                 return location;
             }
         }
         // /**/<var|let|const> [|name|] ...
-        if ((node.kind === 112 /* VarKeyword */ || node.kind === 84 /* ConstKeyword */ || node.kind === 118 /* LetKeyword */) &&
+        if ((node.kind === 113 /* VarKeyword */ || node.kind === 85 /* ConstKeyword */ || node.kind === 119 /* LetKeyword */) &&
             ts.isVariableDeclarationList(parent) && parent.declarations.length === 1) {
             var decl = parent.declarations[0];
             if (ts.isIdentifier(decl.name)) {
                 return decl.name;
             }
         }
-        if (node.kind === 149 /* TypeKeyword */) {
+        if (node.kind === 150 /* TypeKeyword */) {
             // import /**/type [|name|] from ...;
             // import /**/type { [|name|] } from ...;
             // import /**/type { propertyName as [|name|] } from ...;
@@ -119445,7 +121931,7 @@
         // import * /**/as [|name|] ...
         // export { propertyName /**/as [|name|] } ...
         // export * /**/as [|name|] ...
-        if (node.kind === 126 /* AsKeyword */) {
+        if (node.kind === 127 /* AsKeyword */) {
             if (ts.isImportSpecifier(parent) && parent.propertyName ||
                 ts.isExportSpecifier(parent) && parent.propertyName ||
                 ts.isNamespaceImport(parent) ||
@@ -119461,13 +121947,13 @@
         // /**/import { propertyName as [|name|] } from ...;
         // /**/import ... from "[|module|]";
         // /**/import "[|module|]";
-        if (node.kind === 99 /* ImportKeyword */ && ts.isImportDeclaration(parent)) {
+        if (node.kind === 100 /* ImportKeyword */ && ts.isImportDeclaration(parent)) {
             var location = getAdjustedLocationForImportDeclaration(parent, forRename);
             if (location) {
                 return location;
             }
         }
-        if (node.kind === 92 /* ExportKeyword */) {
+        if (node.kind === 93 /* ExportKeyword */) {
             // /**/export { [|name|] } ...;
             // /**/export { propertyName as [|name|] } ...;
             // /**/export * from "[|module|]";
@@ -119486,12 +121972,12 @@
             }
         }
         // import name = /**/require("[|module|]");
-        if (node.kind === 143 /* RequireKeyword */ && ts.isExternalModuleReference(parent)) {
+        if (node.kind === 144 /* RequireKeyword */ && ts.isExternalModuleReference(parent)) {
             return parent.expression;
         }
         // import ... /**/from "[|module|]";
         // export ... /**/from "[|module|]";
-        if (node.kind === 153 /* FromKeyword */ && (ts.isImportDeclaration(parent) || ts.isExportDeclaration(parent)) && parent.moduleSpecifier) {
+        if (node.kind === 154 /* FromKeyword */ && (ts.isImportDeclaration(parent) || ts.isExportDeclaration(parent)) && parent.moduleSpecifier) {
             return parent.moduleSpecifier;
         }
         // class ... /**/extends [|name|] ...
@@ -119499,13 +121985,13 @@
         // class ... /**/implements name1, name2 ...
         // interface ... /**/extends [|name|] ...
         // interface ... /**/extends name1, name2 ...
-        if ((node.kind === 93 /* ExtendsKeyword */ || node.kind === 116 /* ImplementsKeyword */) && ts.isHeritageClause(parent) && parent.token === node.kind) {
+        if ((node.kind === 94 /* ExtendsKeyword */ || node.kind === 117 /* ImplementsKeyword */) && ts.isHeritageClause(parent) && parent.token === node.kind) {
             var location = getAdjustedLocationForHeritageClause(parent);
             if (location) {
                 return location;
             }
         }
-        if (node.kind === 93 /* ExtendsKeyword */) {
+        if (node.kind === 94 /* ExtendsKeyword */) {
             // ... <T /**/extends [|U|]> ...
             if (ts.isTypeParameterDeclaration(parent) && parent.constraint && ts.isTypeReferenceNode(parent.constraint)) {
                 return parent.constraint.typeName;
@@ -119516,20 +122002,20 @@
             }
         }
         // ... T extends /**/infer [|U|] ? ...
-        if (node.kind === 135 /* InferKeyword */ && ts.isInferTypeNode(parent)) {
+        if (node.kind === 136 /* InferKeyword */ && ts.isInferTypeNode(parent)) {
             return parent.typeParameter.name;
         }
         // { [ [|K|] /**/in keyof T]: ... }
-        if (node.kind === 100 /* InKeyword */ && ts.isTypeParameterDeclaration(parent) && ts.isMappedTypeNode(parent.parent)) {
+        if (node.kind === 101 /* InKeyword */ && ts.isTypeParameterDeclaration(parent) && ts.isMappedTypeNode(parent.parent)) {
             return parent.name;
         }
         // /**/keyof [|T|]
-        if (node.kind === 138 /* KeyOfKeyword */ && ts.isTypeOperatorNode(parent) && parent.operator === 138 /* KeyOfKeyword */ &&
+        if (node.kind === 139 /* KeyOfKeyword */ && ts.isTypeOperatorNode(parent) && parent.operator === 139 /* KeyOfKeyword */ &&
             ts.isTypeReferenceNode(parent.type)) {
             return parent.type.typeName;
         }
         // /**/readonly [|name|][]
-        if (node.kind === 142 /* ReadonlyKeyword */ && ts.isTypeOperatorNode(parent) && parent.operator === 142 /* ReadonlyKeyword */ &&
+        if (node.kind === 143 /* ReadonlyKeyword */ && ts.isTypeOperatorNode(parent) && parent.operator === 143 /* ReadonlyKeyword */ &&
             ts.isArrayTypeNode(parent.type) && ts.isTypeReferenceNode(parent.type.elementType)) {
             return parent.type.elementType.typeName;
         }
@@ -119544,29 +122030,29 @@
             // /**/yield [|name|]
             // /**/yield obj.[|name|]
             // /**/delete obj.[|name|]
-            if (node.kind === 102 /* NewKeyword */ && ts.isNewExpression(parent) ||
-                node.kind === 113 /* VoidKeyword */ && ts.isVoidExpression(parent) ||
-                node.kind === 111 /* TypeOfKeyword */ && ts.isTypeOfExpression(parent) ||
-                node.kind === 130 /* AwaitKeyword */ && ts.isAwaitExpression(parent) ||
-                node.kind === 124 /* YieldKeyword */ && ts.isYieldExpression(parent) ||
-                node.kind === 88 /* DeleteKeyword */ && ts.isDeleteExpression(parent)) {
+            if (node.kind === 103 /* NewKeyword */ && ts.isNewExpression(parent) ||
+                node.kind === 114 /* VoidKeyword */ && ts.isVoidExpression(parent) ||
+                node.kind === 112 /* TypeOfKeyword */ && ts.isTypeOfExpression(parent) ||
+                node.kind === 131 /* AwaitKeyword */ && ts.isAwaitExpression(parent) ||
+                node.kind === 125 /* YieldKeyword */ && ts.isYieldExpression(parent) ||
+                node.kind === 89 /* DeleteKeyword */ && ts.isDeleteExpression(parent)) {
                 if (parent.expression) {
                     return ts.skipOuterExpressions(parent.expression);
                 }
             }
             // left /**/in [|name|]
             // left /**/instanceof [|name|]
-            if ((node.kind === 100 /* InKeyword */ || node.kind === 101 /* InstanceOfKeyword */) && ts.isBinaryExpression(parent) && parent.operatorToken === node) {
+            if ((node.kind === 101 /* InKeyword */ || node.kind === 102 /* InstanceOfKeyword */) && ts.isBinaryExpression(parent) && parent.operatorToken === node) {
                 return ts.skipOuterExpressions(parent.right);
             }
             // left /**/as [|name|]
-            if (node.kind === 126 /* AsKeyword */ && ts.isAsExpression(parent) && ts.isTypeReferenceNode(parent.type)) {
+            if (node.kind === 127 /* AsKeyword */ && ts.isAsExpression(parent) && ts.isTypeReferenceNode(parent.type)) {
                 return parent.type.typeName;
             }
             // for (... /**/in [|name|])
             // for (... /**/of [|name|])
-            if (node.kind === 100 /* InKeyword */ && ts.isForInStatement(parent) ||
-                node.kind === 157 /* OfKeyword */ && ts.isForOfStatement(parent)) {
+            if (node.kind === 101 /* InKeyword */ && ts.isForInStatement(parent) ||
+                node.kind === 158 /* OfKeyword */ && ts.isForOfStatement(parent)) {
                 return ts.skipOuterExpressions(parent.expression);
             }
         }
@@ -119736,7 +122222,7 @@
                     }
                 }
             }
-            ts.Debug.assert(startNode !== undefined || n.kind === 298 /* SourceFile */ || n.kind === 1 /* EndOfFileToken */ || ts.isJSDocCommentContainingNode(n));
+            ts.Debug.assert(startNode !== undefined || n.kind === 300 /* SourceFile */ || n.kind === 1 /* EndOfFileToken */ || ts.isJSDocCommentContainingNode(n));
             // Here we know that none of child token nodes embrace the position,
             // the only known case is when position is at the end of the file.
             // Try to find the rightmost token in the file without filtering.
@@ -119809,17 +122295,17 @@
             return true;
         }
         // <div> { | </div> or <div a={| </div>
-        if (token.kind === 29 /* LessThanToken */ && token.parent.kind === 284 /* JsxExpression */) {
+        if (token.kind === 29 /* LessThanToken */ && token.parent.kind === 286 /* JsxExpression */) {
             return true;
         }
         // <div> {
         // |
         // } < /div>
-        if (token && token.kind === 19 /* CloseBraceToken */ && token.parent.kind === 284 /* JsxExpression */) {
+        if (token && token.kind === 19 /* CloseBraceToken */ && token.parent.kind === 286 /* JsxExpression */) {
             return true;
         }
         // <div>|</div>
-        if (token.kind === 29 /* LessThanToken */ && token.parent.kind === 277 /* JsxClosingElement */) {
+        if (token.kind === 29 /* LessThanToken */ && token.parent.kind === 279 /* JsxClosingElement */) {
             return true;
         }
         return false;
@@ -119850,17 +122336,17 @@
     function isInsideJsxElement(sourceFile, position) {
         function isInsideJsxElementTraversal(node) {
             while (node) {
-                if (node.kind >= 275 /* JsxSelfClosingElement */ && node.kind <= 284 /* JsxExpression */
+                if (node.kind >= 277 /* JsxSelfClosingElement */ && node.kind <= 286 /* JsxExpression */
                     || node.kind === 11 /* JsxText */
                     || node.kind === 29 /* LessThanToken */
                     || node.kind === 31 /* GreaterThanToken */
-                    || node.kind === 78 /* Identifier */
+                    || node.kind === 79 /* Identifier */
                     || node.kind === 19 /* CloseBraceToken */
                     || node.kind === 18 /* OpenBraceToken */
                     || node.kind === 43 /* SlashToken */) {
                     node = node.parent;
                 }
-                else if (node.kind === 274 /* JsxElement */) {
+                else if (node.kind === 276 /* JsxElement */) {
                     if (position > node.getStart(sourceFile))
                         return true;
                     node = node.parent;
@@ -119999,16 +122485,16 @@
                     break;
                 case 38 /* EqualsGreaterThanToken */:
                 // falls through
-                case 78 /* Identifier */:
+                case 79 /* Identifier */:
                 case 10 /* StringLiteral */:
                 case 8 /* NumericLiteral */:
                 case 9 /* BigIntLiteral */:
-                case 109 /* TrueKeyword */:
-                case 94 /* FalseKeyword */:
+                case 110 /* TrueKeyword */:
+                case 95 /* FalseKeyword */:
                 // falls through
-                case 111 /* TypeOfKeyword */:
-                case 93 /* ExtendsKeyword */:
-                case 138 /* KeyOfKeyword */:
+                case 112 /* TypeOfKeyword */:
+                case 94 /* ExtendsKeyword */:
+                case 139 /* KeyOfKeyword */:
                 case 24 /* DotToken */:
                 case 51 /* BarToken */:
                 case 57 /* QuestionToken */:
@@ -120058,7 +122544,7 @@
             result.push("protected" /* protectedMemberModifier */);
         if (flags & 4 /* Public */)
             result.push("public" /* publicMemberModifier */);
-        if (flags & 32 /* Static */)
+        if (flags & 32 /* Static */ || ts.isClassStaticBlockDeclaration(node))
             result.push("static" /* staticModifier */);
         if (flags & 128 /* Abstract */)
             result.push("abstract" /* abstractModifier */);
@@ -120068,16 +122554,16 @@
             result.push("deprecated" /* deprecatedModifier */);
         if (node.flags & 8388608 /* Ambient */)
             result.push("declare" /* ambientModifier */);
-        if (node.kind === 267 /* ExportAssignment */)
+        if (node.kind === 269 /* ExportAssignment */)
             result.push("export" /* exportedModifier */);
         return result.length > 0 ? result.join(",") : "" /* none */;
     }
     ts.getNodeModifiers = getNodeModifiers;
     function getTypeArgumentOrTypeParameterList(node) {
-        if (node.kind === 174 /* TypeReference */ || node.kind === 204 /* CallExpression */) {
+        if (node.kind === 176 /* TypeReference */ || node.kind === 206 /* CallExpression */) {
             return node.typeArguments;
         }
-        if (ts.isFunctionLike(node) || node.kind === 253 /* ClassDeclaration */ || node.kind === 254 /* InterfaceDeclaration */) {
+        if (ts.isFunctionLike(node) || node.kind === 255 /* ClassDeclaration */ || node.kind === 256 /* InterfaceDeclaration */) {
             return node.typeParameters;
         }
         return undefined;
@@ -120097,7 +122583,7 @@
     }
     ts.isStringOrRegularExpressionOrTemplateLiteral = isStringOrRegularExpressionOrTemplateLiteral;
     function isPunctuation(kind) {
-        return 18 /* FirstPunctuation */ <= kind && kind <= 77 /* LastPunctuation */;
+        return 18 /* FirstPunctuation */ <= kind && kind <= 78 /* LastPunctuation */;
     }
     ts.isPunctuation = isPunctuation;
     function isInsideTemplateLiteral(node, position, sourceFile) {
@@ -120107,9 +122593,9 @@
     ts.isInsideTemplateLiteral = isInsideTemplateLiteral;
     function isAccessibilityModifier(kind) {
         switch (kind) {
-            case 122 /* PublicKeyword */:
-            case 120 /* PrivateKeyword */:
-            case 121 /* ProtectedKeyword */:
+            case 123 /* PublicKeyword */:
+            case 121 /* PrivateKeyword */:
+            case 122 /* ProtectedKeyword */:
                 return true;
         }
         return false;
@@ -120122,18 +122608,18 @@
     }
     ts.cloneCompilerOptions = cloneCompilerOptions;
     function isArrayLiteralOrObjectLiteralDestructuringPattern(node) {
-        if (node.kind === 200 /* ArrayLiteralExpression */ ||
-            node.kind === 201 /* ObjectLiteralExpression */) {
+        if (node.kind === 202 /* ArrayLiteralExpression */ ||
+            node.kind === 203 /* ObjectLiteralExpression */) {
             // [a,b,c] from:
             // [a, b, c] = someExpression;
-            if (node.parent.kind === 217 /* BinaryExpression */ &&
+            if (node.parent.kind === 219 /* BinaryExpression */ &&
                 node.parent.left === node &&
-                node.parent.operatorToken.kind === 62 /* EqualsToken */) {
+                node.parent.operatorToken.kind === 63 /* EqualsToken */) {
                 return true;
             }
             // [a, b, c] from:
             // for([a, b, c] of expression)
-            if (node.parent.kind === 240 /* ForOfStatement */ &&
+            if (node.parent.kind === 242 /* ForOfStatement */ &&
                 node.parent.initializer === node) {
                 return true;
             }
@@ -120141,7 +122627,7 @@
             // [x, [a, b, c] ] = someExpression
             // or
             // {x, a: {a, b, c} } = someExpression
-            if (isArrayLiteralOrObjectLiteralDestructuringPattern(node.parent.kind === 289 /* PropertyAssignment */ ? node.parent.parent : node.parent)) {
+            if (isArrayLiteralOrObjectLiteralDestructuringPattern(node.parent.kind === 291 /* PropertyAssignment */ ? node.parent.parent : node.parent)) {
                 return true;
             }
         }
@@ -120203,32 +122689,32 @@
     }
     ts.createTextChange = createTextChange;
     ts.typeKeywords = [
-        128 /* AnyKeyword */,
-        127 /* AssertsKeyword */,
-        155 /* BigIntKeyword */,
-        131 /* BooleanKeyword */,
-        94 /* FalseKeyword */,
-        135 /* InferKeyword */,
-        138 /* KeyOfKeyword */,
-        141 /* NeverKeyword */,
-        103 /* NullKeyword */,
-        144 /* NumberKeyword */,
-        145 /* ObjectKeyword */,
-        142 /* ReadonlyKeyword */,
-        147 /* StringKeyword */,
-        148 /* SymbolKeyword */,
-        109 /* TrueKeyword */,
-        113 /* VoidKeyword */,
-        150 /* UndefinedKeyword */,
-        151 /* UniqueKeyword */,
-        152 /* UnknownKeyword */,
+        129 /* AnyKeyword */,
+        128 /* AssertsKeyword */,
+        156 /* BigIntKeyword */,
+        132 /* BooleanKeyword */,
+        95 /* FalseKeyword */,
+        136 /* InferKeyword */,
+        139 /* KeyOfKeyword */,
+        142 /* NeverKeyword */,
+        104 /* NullKeyword */,
+        145 /* NumberKeyword */,
+        146 /* ObjectKeyword */,
+        143 /* ReadonlyKeyword */,
+        148 /* StringKeyword */,
+        149 /* SymbolKeyword */,
+        110 /* TrueKeyword */,
+        114 /* VoidKeyword */,
+        151 /* UndefinedKeyword */,
+        152 /* UniqueKeyword */,
+        153 /* UnknownKeyword */,
     ];
     function isTypeKeyword(kind) {
         return ts.contains(ts.typeKeywords, kind);
     }
     ts.isTypeKeyword = isTypeKeyword;
     function isTypeKeywordToken(node) {
-        return node.kind === 149 /* TypeKeyword */;
+        return node.kind === 150 /* TypeKeyword */;
     }
     ts.isTypeKeywordToken = isTypeKeywordToken;
     /** True if the symbol is for an external module, as opposed to a namespace. */
@@ -120261,7 +122747,7 @@
     }
     ts.skipConstraint = skipConstraint;
     function getNameFromPropertyName(name) {
-        return name.kind === 159 /* ComputedPropertyName */
+        return name.kind === 160 /* ComputedPropertyName */
             // treat computed property names where expression is string/numeric literal as just string/numeric literal
             ? ts.isStringOrNumericLiteralLike(name.expression) ? name.expression.text : undefined
             : ts.isPrivateIdentifier(name) ? ts.idText(name) : ts.getTextOfIdentifierOrLiteral(name);
@@ -120290,7 +122776,6 @@
             getSymlinkCache: ts.maybeBind(host, host.getSymlinkCache) || program.getSymlinkCache,
             getModuleSpecifierCache: ts.maybeBind(host, host.getModuleSpecifierCache),
             getGlobalTypingsCacheLocation: ts.maybeBind(host, host.getGlobalTypingsCacheLocation),
-            getSourceFiles: function () { return program.getSourceFiles(); },
             redirectTargetsMap: program.redirectTargetsMap,
             getProjectReferenceRedirect: function (fileName) { return program.getProjectReferenceRedirect(fileName); },
             isSourceOfProjectReferenceRedirect: function (fileName) { return program.isSourceOfProjectReferenceRedirect(fileName); },
@@ -120359,7 +122844,7 @@
         }
         return ts.firstDefined(symbol.declarations, function (decl) {
             var name = ts.getNameOfDeclaration(decl);
-            return name && name.kind === 78 /* Identifier */ ? name.escapedText : undefined;
+            return name && name.kind === 79 /* Identifier */ ? name.escapedText : undefined;
         });
     }
     ts.symbolEscapedNameNoDefault = symbolEscapedNameNoDefault;
@@ -120403,7 +122888,7 @@
     ts.findModifier = findModifier;
     function insertImports(changes, sourceFile, imports, blankLineBetween) {
         var decl = ts.isArray(imports) ? imports[0] : imports;
-        var importKindPredicate = decl.kind === 233 /* VariableStatement */ ? ts.isRequireVariableStatement : ts.isAnyImportSyntax;
+        var importKindPredicate = decl.kind === 235 /* VariableStatement */ ? ts.isRequireVariableStatement : ts.isAnyImportSyntax;
         var existingImportStatements = ts.filter(sourceFile.statements, importKindPredicate);
         var sortedNewImports = ts.isArray(imports) ? ts.stableSort(imports, ts.OrganizeImports.compareImportsOrRequireStatements) : [imports];
         if (!existingImportStatements.length) {
@@ -120481,7 +122966,7 @@
     // Display-part writer helpers
     // #region
     function isFirstDeclarationOfSymbolParameter(symbol) {
-        return symbol.declarations && symbol.declarations.length > 0 && symbol.declarations[0].kind === 161 /* Parameter */;
+        return symbol.declarations && symbol.declarations.length > 0 && symbol.declarations[0].kind === 162 /* Parameter */;
     }
     ts.isFirstDeclarationOfSymbolParameter = isFirstDeclarationOfSymbolParameter;
     var displayPartWriter = getDisplayPartWriter();
@@ -120529,7 +123014,7 @@
             increaseIndent: function () { indent++; },
             decreaseIndent: function () { indent--; },
             clear: resetWriter,
-            trackSymbol: ts.noop,
+            trackSymbol: function () { return false; },
             reportInaccessibleThisError: ts.noop,
             reportInaccessibleUniqueSymbolError: ts.noop,
             reportPrivateInBaseOfClassExpression: ts.noop,
@@ -120692,7 +123177,10 @@
     ts.linkPart = linkPart;
     function buildLinkParts(link, checker) {
         var _a;
-        var parts = [linkPart("{@link ")];
+        var prefix = ts.isJSDocLink(link) ? "link"
+            : ts.isJSDocLinkCode(link) ? "linkcode"
+                : "linkplain";
+        var parts = [linkPart("{@" + prefix + " ")];
         if (!link.name) {
             if (link.text) {
                 parts.push(linkTextPart(link.text));
@@ -120708,7 +123196,7 @@
                 }
             }
             else {
-                parts.push(linkTextPart(ts.getTextOfNode(link.name) + link.text));
+                parts.push(linkTextPart(ts.getTextOfNode(link.name) + " " + link.text));
             }
         }
         parts.push(linkPart("}"));
@@ -120837,9 +123325,13 @@
     }
     ts.getSynthesizedDeepCloneWithReplacements = getSynthesizedDeepCloneWithReplacements;
     function getSynthesizedDeepCloneWorker(node, replaceNode) {
-        var visited = replaceNode ?
-            ts.visitEachChild(node, function (n) { return getSynthesizedDeepCloneWithReplacements(n, /*includeTrivia*/ true, replaceNode); }, ts.nullTransformationContext) :
-            ts.visitEachChild(node, getSynthesizedDeepClone, ts.nullTransformationContext);
+        var nodeClone = replaceNode
+            ? function (n) { return getSynthesizedDeepCloneWithReplacements(n, /*includeTrivia*/ true, replaceNode); }
+            : getSynthesizedDeepClone;
+        var nodesClone = replaceNode
+            ? function (ns) { return ns && getSynthesizedDeepClonesWithReplacements(ns, /*includeTrivia*/ true, replaceNode); }
+            : function (ns) { return ns && getSynthesizedDeepClones(ns); };
+        var visited = ts.visitEachChild(node, nodeClone, ts.nullTransformationContext, nodesClone, nodeClone);
         if (visited === node) {
             // This only happens for leaf nodes - internal nodes always see their children change.
             var clone_1 = ts.isStringLiteral(node) ? ts.setOriginalNode(ts.factory.createStringLiteralFromNode(node), node) :
@@ -120847,8 +123339,8 @@
                     ts.factory.cloneNode(node);
             return ts.setTextRange(clone_1, node);
         }
-        // PERF: As an optimization, rather than calling getSynthesizedClone, we'll update
-        // the new node created by visitEachChild with the extra changes getSynthesizedClone
+        // PERF: As an optimization, rather than calling factory.cloneNode, we'll update
+        // the new node created by visitEachChild with the extra changes factory.cloneNode
         // would have made.
         visited.parent = undefined;
         return visited;
@@ -121008,15 +123500,15 @@
     function getContextualTypeFromParent(node, checker) {
         var parent = node.parent;
         switch (parent.kind) {
-            case 205 /* NewExpression */:
+            case 207 /* NewExpression */:
                 return checker.getContextualType(parent);
-            case 217 /* BinaryExpression */: {
+            case 219 /* BinaryExpression */: {
                 var _a = parent, left = _a.left, operatorToken = _a.operatorToken, right = _a.right;
                 return isEqualityOperatorKind(operatorToken.kind)
                     ? checker.getTypeAtLocation(node === right ? left : right)
                     : checker.getContextualType(node);
             }
-            case 285 /* CaseClause */:
+            case 287 /* CaseClause */:
                 return parent.expression === node ? getSwitchedType(parent, checker) : undefined;
             default:
                 return checker.getContextualType(node);
@@ -121046,8 +123538,8 @@
         switch (node.kind) {
             case 10 /* StringLiteral */:
             case 14 /* NoSubstitutionTemplateLiteral */:
-            case 219 /* TemplateExpression */:
-            case 206 /* TaggedTemplateExpression */:
+            case 221 /* TemplateExpression */:
+            case 208 /* TaggedTemplateExpression */:
                 return true;
             default:
                 return false;
@@ -121070,6 +123562,7 @@
         var res = checker.typeToTypeNode(type, enclosingScope, 1 /* NoTruncation */, {
             trackSymbol: function (symbol, declaration, meaning) {
                 typeIsAccessible = typeIsAccessible && checker.isSymbolAccessible(symbol, declaration, meaning, /*shouldComputeAliasToMarkVisible*/ false).accessibility === 0 /* Accessible */;
+                return !typeIsAccessible;
             },
             reportInaccessibleThisError: notAccessible,
             reportPrivateInBaseOfClassExpression: notAccessible,
@@ -121080,41 +123573,41 @@
     }
     ts.getTypeNodeIfAccessible = getTypeNodeIfAccessible;
     function syntaxRequiresTrailingCommaOrSemicolonOrASI(kind) {
-        return kind === 170 /* CallSignature */
-            || kind === 171 /* ConstructSignature */
-            || kind === 172 /* IndexSignature */
-            || kind === 163 /* PropertySignature */
-            || kind === 165 /* MethodSignature */;
+        return kind === 172 /* CallSignature */
+            || kind === 173 /* ConstructSignature */
+            || kind === 174 /* IndexSignature */
+            || kind === 164 /* PropertySignature */
+            || kind === 166 /* MethodSignature */;
     }
     ts.syntaxRequiresTrailingCommaOrSemicolonOrASI = syntaxRequiresTrailingCommaOrSemicolonOrASI;
     function syntaxRequiresTrailingFunctionBlockOrSemicolonOrASI(kind) {
-        return kind === 252 /* FunctionDeclaration */
-            || kind === 167 /* Constructor */
-            || kind === 166 /* MethodDeclaration */
-            || kind === 168 /* GetAccessor */
-            || kind === 169 /* SetAccessor */;
+        return kind === 254 /* FunctionDeclaration */
+            || kind === 169 /* Constructor */
+            || kind === 167 /* MethodDeclaration */
+            || kind === 170 /* GetAccessor */
+            || kind === 171 /* SetAccessor */;
     }
     ts.syntaxRequiresTrailingFunctionBlockOrSemicolonOrASI = syntaxRequiresTrailingFunctionBlockOrSemicolonOrASI;
     function syntaxRequiresTrailingModuleBlockOrSemicolonOrASI(kind) {
-        return kind === 257 /* ModuleDeclaration */;
+        return kind === 259 /* ModuleDeclaration */;
     }
     ts.syntaxRequiresTrailingModuleBlockOrSemicolonOrASI = syntaxRequiresTrailingModuleBlockOrSemicolonOrASI;
     function syntaxRequiresTrailingSemicolonOrASI(kind) {
-        return kind === 233 /* VariableStatement */
-            || kind === 234 /* ExpressionStatement */
-            || kind === 236 /* DoStatement */
-            || kind === 241 /* ContinueStatement */
-            || kind === 242 /* BreakStatement */
-            || kind === 243 /* ReturnStatement */
-            || kind === 247 /* ThrowStatement */
-            || kind === 249 /* DebuggerStatement */
-            || kind === 164 /* PropertyDeclaration */
-            || kind === 255 /* TypeAliasDeclaration */
-            || kind === 262 /* ImportDeclaration */
-            || kind === 261 /* ImportEqualsDeclaration */
-            || kind === 268 /* ExportDeclaration */
-            || kind === 260 /* NamespaceExportDeclaration */
-            || kind === 267 /* ExportAssignment */;
+        return kind === 235 /* VariableStatement */
+            || kind === 236 /* ExpressionStatement */
+            || kind === 238 /* DoStatement */
+            || kind === 243 /* ContinueStatement */
+            || kind === 244 /* BreakStatement */
+            || kind === 245 /* ReturnStatement */
+            || kind === 249 /* ThrowStatement */
+            || kind === 251 /* DebuggerStatement */
+            || kind === 165 /* PropertyDeclaration */
+            || kind === 257 /* TypeAliasDeclaration */
+            || kind === 264 /* ImportDeclaration */
+            || kind === 263 /* ImportEqualsDeclaration */
+            || kind === 270 /* ExportDeclaration */
+            || kind === 262 /* NamespaceExportDeclaration */
+            || kind === 269 /* ExportAssignment */;
     }
     ts.syntaxRequiresTrailingSemicolonOrASI = syntaxRequiresTrailingSemicolonOrASI;
     ts.syntaxMayBeASICandidate = ts.or(syntaxRequiresTrailingCommaOrSemicolonOrASI, syntaxRequiresTrailingFunctionBlockOrSemicolonOrASI, syntaxRequiresTrailingModuleBlockOrSemicolonOrASI, syntaxRequiresTrailingSemicolonOrASI);
@@ -121144,7 +123637,7 @@
             return false;
         }
         // See comment in parser’s `parseDoStatement`
-        if (node.kind === 236 /* DoStatement */) {
+        if (node.kind === 238 /* DoStatement */) {
             return true;
         }
         var topNode = ts.findAncestor(node, function (ancestor) { return !ancestor.parent; });
@@ -121316,7 +123809,7 @@
         }
     }
     ts.createPackageJsonInfo = createPackageJsonInfo;
-    function createPackageJsonImportFilter(fromFile, host) {
+    function createPackageJsonImportFilter(fromFile, preferences, host) {
         var packageJsons = ((host.getPackageJsonsVisibleToFile && host.getPackageJsonsVisibleToFile(fromFile.fileName)) || getPackageJsonsVisibleToFile(fromFile.fileName, host)).filter(function (p) { return p.parseable; });
         var usesNodeCoreModules;
         return { allowsImportingAmbientModule: allowsImportingAmbientModule, allowsImportingSourceFile: allowsImportingSourceFile, allowsImportingSpecifier: allowsImportingSpecifier };
@@ -121384,7 +123877,7 @@
             if (!ts.stringContains(importedFileName, "node_modules")) {
                 return undefined;
             }
-            var specifier = ts.moduleSpecifiers.getNodeModulesPackageName(host.getCompilationSettings(), fromFile.path, importedFileName, moduleSpecifierResolutionHost);
+            var specifier = ts.moduleSpecifiers.getNodeModulesPackageName(host.getCompilationSettings(), fromFile.path, importedFileName, moduleSpecifierResolutionHost, preferences);
             if (!specifier) {
                 return undefined;
             }
@@ -121546,6 +124039,24 @@
         return ts.isInJSFile(declaration) || !ts.findAncestor(declaration, ts.isGlobalScopeAugmentation);
     }
     ts.isNonGlobalDeclaration = isNonGlobalDeclaration;
+    function isDeprecatedDeclaration(decl) {
+        return !!(ts.getCombinedNodeFlagsAlwaysIncludeJSDoc(decl) & 8192 /* Deprecated */);
+    }
+    ts.isDeprecatedDeclaration = isDeprecatedDeclaration;
+    function shouldUseUriStyleNodeCoreModules(file, program) {
+        var decisionFromFile = ts.firstDefined(file.imports, function (node) {
+            if (ts.JsTyping.nodeCoreModules.has(node.text)) {
+                return ts.startsWith(node.text, "node:");
+            }
+        });
+        return decisionFromFile !== null && decisionFromFile !== void 0 ? decisionFromFile : program.usesUriStyleNodeCoreModules;
+    }
+    ts.shouldUseUriStyleNodeCoreModules = shouldUseUriStyleNodeCoreModules;
+    // #endregion
+})(ts || (ts = {}));
+/*@internal*/
+var ts;
+(function (ts) {
     var ImportKind;
     (function (ImportKind) {
         ImportKind[ImportKind["Named"] = 0] = "Named";
@@ -121560,49 +124071,68 @@
         ExportKind[ExportKind["ExportEquals"] = 2] = "ExportEquals";
         ExportKind[ExportKind["UMD"] = 3] = "UMD";
     })(ExportKind = ts.ExportKind || (ts.ExportKind = {}));
-    function createExportMapCache() {
-        var cache;
-        var projectVersion;
+    function createCacheableExportInfoMap(host) {
+        var exportInfoId = 1;
+        var exportInfo = ts.createMultiMap();
+        var symbols = new ts.Map();
         var usableByFileName;
-        var wrapped = {
-            isEmpty: function () {
-                return !cache;
-            },
+        var cache = {
+            isUsableByFile: function (importingFile) { return importingFile === usableByFileName; },
+            isEmpty: function () { return !exportInfo.size; },
             clear: function () {
-                cache = undefined;
-                projectVersion = undefined;
+                exportInfo.clear();
+                symbols.clear();
+                usableByFileName = undefined;
             },
-            set: function (suggestions, version) {
-                cache = suggestions;
-                if (version) {
-                    projectVersion = version;
+            add: function (importingFile, symbol, symbolTableKey, moduleSymbol, moduleFile, exportKind, isFromPackageJson, scriptTarget, checker) {
+                if (importingFile !== usableByFileName) {
+                    cache.clear();
+                    usableByFileName = importingFile;
                 }
-            },
-            get: function (file, checker, version) {
-                if (usableByFileName && file !== usableByFileName) {
-                    return undefined;
-                }
-                if (version && projectVersion === version) {
-                    return cache;
-                }
-                cache === null || cache === void 0 ? void 0 : cache.forEach(function (infos) {
-                    var _a, _b, _c;
-                    for (var _i = 0, infos_1 = infos; _i < infos_1.length; _i++) {
-                        var info = infos_1[_i];
-                        // If the symbol/moduleSymbol was a merged symbol, it will have a new identity
-                        // in the checker, even though the symbols to merge are the same (guaranteed by
-                        // cache invalidation in synchronizeHostData).
-                        if ((_a = info.symbol.declarations) === null || _a === void 0 ? void 0 : _a.length) {
-                            info.symbol = checker.getMergedSymbol(info.exportKind === 1 /* Default */
-                                ? (_b = info.symbol.declarations[0].localSymbol) !== null && _b !== void 0 ? _b : info.symbol.declarations[0].symbol
-                                : info.symbol.declarations[0].symbol);
-                        }
-                        if ((_c = info.moduleSymbol.declarations) === null || _c === void 0 ? void 0 : _c.length) {
-                            info.moduleSymbol = checker.getMergedSymbol(info.moduleSymbol.declarations[0].symbol);
-                        }
-                    }
+                var isDefault = exportKind === 1 /* Default */;
+                var namedSymbol = isDefault && ts.getLocalSymbolForExportDefault(symbol) || symbol;
+                // A re-export merged with an export from a module augmentation can result in `symbol`
+                // being an external module symbol; the name it is re-exported by will be `symbolTableKey`
+                // (which comes from the keys of `moduleSymbol.exports`.)
+                var importedName = ts.isExternalModuleSymbol(namedSymbol)
+                    ? ts.unescapeLeadingUnderscores(symbolTableKey)
+                    : ts.getNameForExportedSymbol(namedSymbol, scriptTarget);
+                var moduleName = ts.stripQuotes(moduleSymbol.name);
+                var id = exportInfoId++;
+                var storedSymbol = symbol.flags & 33554432 /* Transient */ ? undefined : symbol;
+                var storedModuleSymbol = moduleSymbol.flags & 33554432 /* Transient */ ? undefined : moduleSymbol;
+                if (!storedSymbol || !storedModuleSymbol)
+                    symbols.set(id, [symbol, moduleSymbol]);
+                exportInfo.add(key(importedName, symbol, moduleName, checker), {
+                    id: id,
+                    symbolTableKey: symbolTableKey,
+                    symbolName: importedName,
+                    moduleName: moduleName,
+                    moduleFile: moduleFile,
+                    moduleFileName: moduleFile === null || moduleFile === void 0 ? void 0 : moduleFile.fileName,
+                    exportKind: exportKind,
+                    targetFlags: ts.skipAlias(symbol, checker).flags,
+                    isFromPackageJson: isFromPackageJson,
+                    symbol: storedSymbol,
+                    moduleSymbol: storedModuleSymbol,
                 });
-                return cache;
+            },
+            get: function (importingFile, importedName, symbol, moduleName, checker) {
+                if (importingFile !== usableByFileName)
+                    return;
+                var result = exportInfo.get(key(importedName, symbol, moduleName, checker));
+                return result === null || result === void 0 ? void 0 : result.map(rehydrateCachedInfo);
+            },
+            forEach: function (importingFile, action) {
+                if (importingFile !== usableByFileName)
+                    return;
+                exportInfo.forEach(function (info, key) {
+                    var _a = parseKey(key), symbolName = _a.symbolName, ambientModuleName = _a.ambientModuleName;
+                    action(info.map(rehydrateCachedInfo), symbolName, !!ambientModuleName);
+                });
+            },
+            releaseSymbols: function () {
+                symbols.clear();
             },
             onFileChanged: function (oldSourceFile, newSourceFile, typeAcquisitionEnabled) {
                 if (fileIsGlobalOnly(oldSourceFile) && fileIsGlobalOnly(newSourceFile)) {
@@ -121612,13 +124142,13 @@
                 if (usableByFileName && usableByFileName !== newSourceFile.path ||
                     // If ATA is enabled, auto-imports uses existing imports to guess whether you want auto-imports from node.
                     // Adding or removing imports from node could change the outcome of that guess, so could change the suggestions list.
-                    typeAcquisitionEnabled && consumesNodeCoreModules(oldSourceFile) !== consumesNodeCoreModules(newSourceFile) ||
+                    typeAcquisitionEnabled && ts.consumesNodeCoreModules(oldSourceFile) !== ts.consumesNodeCoreModules(newSourceFile) ||
                     // Module agumentation and ambient module changes can add or remove exports available to be auto-imported.
                     // Changes elsewhere in the file can change the *type* of an export in a module augmentation,
                     // but type info is gathered in getCompletionEntryDetails, which doesn’t use the cache.
                     !ts.arrayIsEqualTo(oldSourceFile.moduleAugmentations, newSourceFile.moduleAugmentations) ||
                     !ambientModuleDeclarationsAreEqual(oldSourceFile, newSourceFile)) {
-                    this.clear();
+                    cache.clear();
                     return true;
                 }
                 usableByFileName = newSourceFile.path;
@@ -121626,9 +124156,63 @@
             },
         };
         if (ts.Debug.isDebugging) {
-            Object.defineProperty(wrapped, "__cache", { get: function () { return cache; } });
+            Object.defineProperty(cache, "__cache", { get: function () { return exportInfo; } });
         }
-        return wrapped;
+        return cache;
+        function rehydrateCachedInfo(info) {
+            if (info.symbol && info.moduleSymbol)
+                return info;
+            var id = info.id, exportKind = info.exportKind, targetFlags = info.targetFlags, isFromPackageJson = info.isFromPackageJson, moduleFileName = info.moduleFileName;
+            var _a = symbols.get(id) || ts.emptyArray, cachedSymbol = _a[0], cachedModuleSymbol = _a[1];
+            if (cachedSymbol && cachedModuleSymbol) {
+                return {
+                    symbol: cachedSymbol,
+                    moduleSymbol: cachedModuleSymbol,
+                    moduleFileName: moduleFileName,
+                    exportKind: exportKind,
+                    targetFlags: targetFlags,
+                    isFromPackageJson: isFromPackageJson,
+                };
+            }
+            var checker = (isFromPackageJson
+                ? host.getPackageJsonAutoImportProvider()
+                : host.getCurrentProgram()).getTypeChecker();
+            var moduleSymbol = info.moduleSymbol || cachedModuleSymbol || ts.Debug.checkDefined(info.moduleFile
+                ? checker.getMergedSymbol(info.moduleFile.symbol)
+                : checker.tryFindAmbientModule(info.moduleName));
+            var symbol = info.symbol || cachedSymbol || ts.Debug.checkDefined(exportKind === 2 /* ExportEquals */
+                ? checker.resolveExternalModuleSymbol(moduleSymbol)
+                : checker.tryGetMemberInModuleExportsAndProperties(ts.unescapeLeadingUnderscores(info.symbolTableKey), moduleSymbol), "Could not find symbol '" + info.symbolName + "' by key '" + info.symbolTableKey + "' in module " + moduleSymbol.name);
+            symbols.set(id, [symbol, moduleSymbol]);
+            return {
+                symbol: symbol,
+                moduleSymbol: moduleSymbol,
+                moduleFileName: moduleFileName,
+                exportKind: exportKind,
+                targetFlags: targetFlags,
+                isFromPackageJson: isFromPackageJson,
+            };
+        }
+        function key(importedName, symbol, moduleName, checker) {
+            var unquoted = ts.stripQuotes(moduleName);
+            var moduleKey = ts.isExternalModuleNameRelative(unquoted) ? "/" : unquoted;
+            var target = ts.skipAlias(symbol, checker);
+            return importedName + "|" + createSymbolKey(target) + "|" + moduleKey;
+        }
+        function parseKey(key) {
+            var symbolName = key.substring(0, key.indexOf("|"));
+            var moduleKey = key.substring(key.lastIndexOf("|") + 1);
+            var ambientModuleName = moduleKey === "/" ? undefined : moduleKey;
+            return { symbolName: symbolName, ambientModuleName: ambientModuleName };
+        }
+        function createSymbolKey(symbol) {
+            var key = symbol.name;
+            while (symbol.parent) {
+                key += "," + symbol.parent.name;
+                symbol = symbol.parent;
+            }
+            return key;
+        }
         function fileIsGlobalOnly(file) {
             return !file.commonJsModuleIndicator && !file.externalModuleIndicator && !file.moduleAugmentations && !file.ambientModuleNames;
         }
@@ -121655,44 +124239,14 @@
             return true;
         }
     }
-    ts.createExportMapCache = createExportMapCache;
-    function createModuleSpecifierCache() {
-        var cache;
-        var importingFileName;
-        var wrapped = {
-            get: function (fromFileName, toFileName) {
-                if (!cache || fromFileName !== importingFileName)
-                    return undefined;
-                return cache.get(toFileName);
-            },
-            set: function (fromFileName, toFileName, moduleSpecifiers) {
-                if (cache && fromFileName !== importingFileName) {
-                    cache.clear();
-                }
-                importingFileName = fromFileName;
-                (cache || (cache = new ts.Map())).set(toFileName, moduleSpecifiers);
-            },
-            clear: function () {
-                cache = undefined;
-                importingFileName = undefined;
-            },
-            count: function () {
-                return cache ? cache.size : 0;
-            }
-        };
-        if (ts.Debug.isDebugging) {
-            Object.defineProperty(wrapped, "__cache", { get: function () { return cache; } });
-        }
-        return wrapped;
-    }
-    ts.createModuleSpecifierCache = createModuleSpecifierCache;
-    function isImportableFile(program, from, to, packageJsonFilter, moduleSpecifierResolutionHost, moduleSpecifierCache) {
+    ts.createCacheableExportInfoMap = createCacheableExportInfoMap;
+    function isImportableFile(program, from, to, preferences, packageJsonFilter, moduleSpecifierResolutionHost, moduleSpecifierCache) {
         var _a;
         if (from === to)
             return false;
-        var cachedResult = moduleSpecifierCache === null || moduleSpecifierCache === void 0 ? void 0 : moduleSpecifierCache.get(from.path, to.path);
-        if (cachedResult !== undefined) {
-            return !!cachedResult;
+        var cachedResult = moduleSpecifierCache === null || moduleSpecifierCache === void 0 ? void 0 : moduleSpecifierCache.get(from.path, to.path, preferences);
+        if ((cachedResult === null || cachedResult === void 0 ? void 0 : cachedResult.isAutoImportable) !== undefined) {
+            return cachedResult.isAutoImportable;
         }
         var getCanonicalFileName = ts.hostGetCanonicalFileName(moduleSpecifierResolutionHost);
         var globalTypingsCache = (_a = moduleSpecifierResolutionHost.getGlobalTypingsCacheLocation) === null || _a === void 0 ? void 0 : _a.call(moduleSpecifierResolutionHost);
@@ -121705,9 +124259,9 @@
                 isImportablePath(from.fileName, toPath, getCanonicalFileName, globalTypingsCache);
         });
         if (packageJsonFilter) {
-            var isImportable = hasImportablePath && packageJsonFilter.allowsImportingSourceFile(to, moduleSpecifierResolutionHost);
-            moduleSpecifierCache === null || moduleSpecifierCache === void 0 ? void 0 : moduleSpecifierCache.set(from.path, to.path, isImportable);
-            return isImportable;
+            var isAutoImportable = hasImportablePath && packageJsonFilter.allowsImportingSourceFile(to, moduleSpecifierResolutionHost);
+            moduleSpecifierCache === null || moduleSpecifierCache === void 0 ? void 0 : moduleSpecifierCache.setIsAutoImportable(from.path, to.path, preferences, isAutoImportable);
+            return isAutoImportable;
         }
         return hasImportablePath;
     }
@@ -121724,7 +124278,126 @@
             || ts.startsWith(getCanonicalFileName(fromPath), toNodeModulesParent)
             || (!!globalCachePath && ts.startsWith(getCanonicalFileName(globalCachePath), toNodeModulesParent));
     }
-    // #endregion
+    function forEachExternalModuleToImportFrom(program, host, useAutoImportProvider, cb) {
+        var _a, _b;
+        forEachExternalModule(program.getTypeChecker(), program.getSourceFiles(), function (module, file) { return cb(module, file, program, /*isFromPackageJson*/ false); });
+        var autoImportProvider = useAutoImportProvider && ((_a = host.getPackageJsonAutoImportProvider) === null || _a === void 0 ? void 0 : _a.call(host));
+        if (autoImportProvider) {
+            var start = ts.timestamp();
+            forEachExternalModule(autoImportProvider.getTypeChecker(), autoImportProvider.getSourceFiles(), function (module, file) { return cb(module, file, autoImportProvider, /*isFromPackageJson*/ true); });
+            (_b = host.log) === null || _b === void 0 ? void 0 : _b.call(host, "forEachExternalModuleToImportFrom autoImportProvider: " + (ts.timestamp() - start));
+        }
+    }
+    ts.forEachExternalModuleToImportFrom = forEachExternalModuleToImportFrom;
+    function forEachExternalModule(checker, allSourceFiles, cb) {
+        for (var _i = 0, _a = checker.getAmbientModules(); _i < _a.length; _i++) {
+            var ambient = _a[_i];
+            if (!ts.stringContains(ambient.name, "*")) {
+                cb(ambient, /*sourceFile*/ undefined);
+            }
+        }
+        for (var _b = 0, allSourceFiles_1 = allSourceFiles; _b < allSourceFiles_1.length; _b++) {
+            var sourceFile = allSourceFiles_1[_b];
+            if (ts.isExternalOrCommonJsModule(sourceFile)) {
+                cb(checker.getMergedSymbol(sourceFile.symbol), sourceFile);
+            }
+        }
+    }
+    function getExportInfoMap(importingFile, host, program, cancellationToken) {
+        var _a, _b, _c, _d, _e;
+        var start = ts.timestamp();
+        // Pulling the AutoImportProvider project will trigger its updateGraph if pending,
+        // which will invalidate the export map cache if things change, so pull it before
+        // checking the cache.
+        (_a = host.getPackageJsonAutoImportProvider) === null || _a === void 0 ? void 0 : _a.call(host);
+        var cache = ((_b = host.getCachedExportInfoMap) === null || _b === void 0 ? void 0 : _b.call(host)) || createCacheableExportInfoMap({
+            getCurrentProgram: function () { return program; },
+            getPackageJsonAutoImportProvider: function () { var _a; return (_a = host.getPackageJsonAutoImportProvider) === null || _a === void 0 ? void 0 : _a.call(host); },
+        });
+        if (cache.isUsableByFile(importingFile.path)) {
+            (_c = host.log) === null || _c === void 0 ? void 0 : _c.call(host, "getExportInfoMap: cache hit");
+            return cache;
+        }
+        (_d = host.log) === null || _d === void 0 ? void 0 : _d.call(host, "getExportInfoMap: cache miss or empty; calculating new results");
+        var compilerOptions = program.getCompilerOptions();
+        var scriptTarget = ts.getEmitScriptTarget(compilerOptions);
+        var moduleCount = 0;
+        forEachExternalModuleToImportFrom(program, host, /*useAutoImportProvider*/ true, function (moduleSymbol, moduleFile, program, isFromPackageJson) {
+            if (++moduleCount % 100 === 0)
+                cancellationToken === null || cancellationToken === void 0 ? void 0 : cancellationToken.throwIfCancellationRequested();
+            var seenExports = new ts.Map();
+            var checker = program.getTypeChecker();
+            var defaultInfo = getDefaultLikeExportInfo(moduleSymbol, checker, compilerOptions);
+            // Note: I think we shouldn't actually see resolved module symbols here, but weird merges
+            // can cause it to happen: see 'completionsImport_mergedReExport.ts'
+            if (defaultInfo && isImportableSymbol(defaultInfo.symbol, checker)) {
+                cache.add(importingFile.path, defaultInfo.symbol, defaultInfo.exportKind === 1 /* Default */ ? "default" /* Default */ : "export=" /* ExportEquals */, moduleSymbol, moduleFile, defaultInfo.exportKind, isFromPackageJson, scriptTarget, checker);
+            }
+            checker.forEachExportAndPropertyOfModule(moduleSymbol, function (exported, key) {
+                if (exported !== (defaultInfo === null || defaultInfo === void 0 ? void 0 : defaultInfo.symbol) && isImportableSymbol(exported, checker) && ts.addToSeen(seenExports, exported)) {
+                    cache.add(importingFile.path, exported, key, moduleSymbol, moduleFile, 0 /* Named */, isFromPackageJson, scriptTarget, checker);
+                }
+            });
+        });
+        (_e = host.log) === null || _e === void 0 ? void 0 : _e.call(host, "getExportInfoMap: done in " + (ts.timestamp() - start) + " ms");
+        return cache;
+    }
+    ts.getExportInfoMap = getExportInfoMap;
+    function getDefaultLikeExportInfo(moduleSymbol, checker, compilerOptions) {
+        var exported = getDefaultLikeExportWorker(moduleSymbol, checker);
+        if (!exported)
+            return undefined;
+        var symbol = exported.symbol, exportKind = exported.exportKind;
+        var info = getDefaultExportInfoWorker(symbol, checker, compilerOptions);
+        return info && __assign({ symbol: symbol, exportKind: exportKind }, info);
+    }
+    ts.getDefaultLikeExportInfo = getDefaultLikeExportInfo;
+    function isImportableSymbol(symbol, checker) {
+        return !checker.isUndefinedSymbol(symbol) && !checker.isUnknownSymbol(symbol) && !ts.isKnownSymbol(symbol) && !ts.isPrivateIdentifierSymbol(symbol);
+    }
+    function getDefaultLikeExportWorker(moduleSymbol, checker) {
+        var exportEquals = checker.resolveExternalModuleSymbol(moduleSymbol);
+        if (exportEquals !== moduleSymbol)
+            return { symbol: exportEquals, exportKind: 2 /* ExportEquals */ };
+        var defaultExport = checker.tryGetMemberInModuleExports("default" /* Default */, moduleSymbol);
+        if (defaultExport)
+            return { symbol: defaultExport, exportKind: 1 /* Default */ };
+    }
+    function getDefaultExportInfoWorker(defaultExport, checker, compilerOptions) {
+        var localSymbol = ts.getLocalSymbolForExportDefault(defaultExport);
+        if (localSymbol)
+            return { symbolForMeaning: localSymbol, name: localSymbol.name };
+        var name = getNameForExportDefault(defaultExport);
+        if (name !== undefined)
+            return { symbolForMeaning: defaultExport, name: name };
+        if (defaultExport.flags & 2097152 /* Alias */) {
+            var aliased = checker.getImmediateAliasedSymbol(defaultExport);
+            if (aliased && aliased.parent) {
+                // - `aliased` will be undefined if the module is exporting an unresolvable name,
+                //    but we can still offer completions for it.
+                // - `aliased.parent` will be undefined if the module is exporting `globalThis.something`,
+                //    or another expression that resolves to a global.
+                return getDefaultExportInfoWorker(aliased, checker, compilerOptions);
+            }
+        }
+        if (defaultExport.escapedName !== "default" /* Default */ &&
+            defaultExport.escapedName !== "export=" /* ExportEquals */) {
+            return { symbolForMeaning: defaultExport, name: defaultExport.getName() };
+        }
+        return { symbolForMeaning: defaultExport, name: ts.getNameForExportedSymbol(defaultExport, compilerOptions.target) };
+    }
+    function getNameForExportDefault(symbol) {
+        return symbol.declarations && ts.firstDefined(symbol.declarations, function (declaration) {
+            var _a;
+            if (ts.isExportAssignment(declaration)) {
+                return (_a = ts.tryCast(ts.skipOuterExpressions(declaration.expression), ts.isIdentifier)) === null || _a === void 0 ? void 0 : _a.text;
+            }
+            else if (ts.isExportSpecifier(declaration)) {
+                ts.Debug.assert(declaration.name.text === "default" /* Default */, "Expected the specifier to be a default export");
+                return declaration.propertyName && declaration.propertyName.text;
+            }
+        });
+    }
 })(ts || (ts = {}));
 var ts;
 (function (ts) {
@@ -121807,13 +124480,13 @@
             function handleToken() {
                 switch (token) {
                     case 43 /* SlashToken */:
-                    case 67 /* SlashEqualsToken */:
+                    case 68 /* SlashEqualsToken */:
                         if (!noRegexTable[lastNonTriviaToken] && scanner.reScanSlashToken() === 13 /* RegularExpressionLiteral */) {
                             token = 13 /* RegularExpressionLiteral */;
                         }
                         break;
                     case 29 /* LessThanToken */:
-                        if (lastNonTriviaToken === 78 /* Identifier */) {
+                        if (lastNonTriviaToken === 79 /* Identifier */) {
                             // Could be the start of something generic.  Keep track of that by bumping
                             // up the current count of generic contexts we may be in.
                             angleBracketStack++;
@@ -121826,16 +124499,16 @@
                             angleBracketStack--;
                         }
                         break;
-                    case 128 /* AnyKeyword */:
-                    case 147 /* StringKeyword */:
-                    case 144 /* NumberKeyword */:
-                    case 131 /* BooleanKeyword */:
-                    case 148 /* SymbolKeyword */:
+                    case 129 /* AnyKeyword */:
+                    case 148 /* StringKeyword */:
+                    case 145 /* NumberKeyword */:
+                    case 132 /* BooleanKeyword */:
+                    case 149 /* SymbolKeyword */:
                         if (angleBracketStack > 0 && !syntacticClassifierAbsent) {
                             // If it looks like we're could be in something generic, don't classify this
                             // as a keyword.  We may just get overwritten by the syntactic classifier,
                             // causing a noisy experience for the user.
-                            token = 78 /* Identifier */;
+                            token = 79 /* Identifier */;
                         }
                         break;
                     case 15 /* TemplateHead */:
@@ -121874,14 +124547,14 @@
                             break;
                         }
                         if (lastNonTriviaToken === 24 /* DotToken */) {
-                            token = 78 /* Identifier */;
+                            token = 79 /* Identifier */;
                         }
                         else if (ts.isKeyword(lastNonTriviaToken) && ts.isKeyword(token) && !canFollow(lastNonTriviaToken, token)) {
                             // We have two keywords in a row.  Only treat the second as a keyword if
                             // it's a sequence that could legally occur in the language.  Otherwise
                             // treat it as an identifier.  This way, if someone writes "private var"
                             // we recognize that 'var' is actually an identifier here.
-                            token = 78 /* Identifier */;
+                            token = 79 /* Identifier */;
                         }
                 }
             }
@@ -121895,19 +124568,19 @@
     /// we have a series of divide operator. this list allows us to be more accurate by ruling out
     /// locations where a regexp cannot exist.
     var noRegexTable = ts.arrayToNumericMap([
-        78 /* Identifier */,
+        79 /* Identifier */,
         10 /* StringLiteral */,
         8 /* NumericLiteral */,
         9 /* BigIntLiteral */,
         13 /* RegularExpressionLiteral */,
-        107 /* ThisKeyword */,
+        108 /* ThisKeyword */,
         45 /* PlusPlusToken */,
         46 /* MinusMinusToken */,
         21 /* CloseParenToken */,
         23 /* CloseBracketToken */,
         19 /* CloseBraceToken */,
-        109 /* TrueKeyword */,
-        94 /* FalseKeyword */,
+        110 /* TrueKeyword */,
+        95 /* FalseKeyword */,
     ], function (token) { return token; }, function () { return true; });
     function getNewEndOfLineState(scanner, token, lastOnTemplateStack) {
         switch (token) {
@@ -122019,10 +124692,10 @@
             return true;
         }
         switch (keyword2) {
-            case 134 /* GetKeyword */:
-            case 146 /* SetKeyword */:
-            case 132 /* ConstructorKeyword */:
-            case 123 /* StaticKeyword */:
+            case 135 /* GetKeyword */:
+            case 147 /* SetKeyword */:
+            case 133 /* ConstructorKeyword */:
+            case 124 /* StaticKeyword */:
                 return true; // Allow things like "public get", "public constructor" and "public static".
             default:
                 return false; // Any other keyword following "public" is actually an identifier, not a real keyword.
@@ -122067,9 +124740,9 @@
             case 31 /* GreaterThanToken */:
             case 32 /* LessThanEqualsToken */:
             case 33 /* GreaterThanEqualsToken */:
-            case 101 /* InstanceOfKeyword */:
-            case 100 /* InKeyword */:
-            case 126 /* AsKeyword */:
+            case 102 /* InstanceOfKeyword */:
+            case 101 /* InKeyword */:
+            case 127 /* AsKeyword */:
             case 34 /* EqualsEqualsToken */:
             case 35 /* ExclamationEqualsToken */:
             case 36 /* EqualsEqualsEqualsToken */:
@@ -122079,23 +124752,23 @@
             case 51 /* BarToken */:
             case 55 /* AmpersandAmpersandToken */:
             case 56 /* BarBarToken */:
-            case 73 /* BarEqualsToken */:
-            case 72 /* AmpersandEqualsToken */:
-            case 77 /* CaretEqualsToken */:
-            case 69 /* LessThanLessThanEqualsToken */:
-            case 70 /* GreaterThanGreaterThanEqualsToken */:
-            case 71 /* GreaterThanGreaterThanGreaterThanEqualsToken */:
-            case 63 /* PlusEqualsToken */:
-            case 64 /* MinusEqualsToken */:
-            case 65 /* AsteriskEqualsToken */:
-            case 67 /* SlashEqualsToken */:
-            case 68 /* PercentEqualsToken */:
-            case 62 /* EqualsToken */:
+            case 74 /* BarEqualsToken */:
+            case 73 /* AmpersandEqualsToken */:
+            case 78 /* CaretEqualsToken */:
+            case 70 /* LessThanLessThanEqualsToken */:
+            case 71 /* GreaterThanGreaterThanEqualsToken */:
+            case 72 /* GreaterThanGreaterThanGreaterThanEqualsToken */:
+            case 64 /* PlusEqualsToken */:
+            case 65 /* MinusEqualsToken */:
+            case 66 /* AsteriskEqualsToken */:
+            case 68 /* SlashEqualsToken */:
+            case 69 /* PercentEqualsToken */:
+            case 63 /* EqualsToken */:
             case 27 /* CommaToken */:
             case 60 /* QuestionQuestionToken */:
-            case 74 /* BarBarEqualsToken */:
-            case 75 /* AmpersandAmpersandEqualsToken */:
-            case 76 /* QuestionQuestionEqualsToken */:
+            case 75 /* BarBarEqualsToken */:
+            case 76 /* AmpersandAmpersandEqualsToken */:
+            case 77 /* QuestionQuestionEqualsToken */:
                 return true;
             default:
                 return false;
@@ -122121,7 +124794,7 @@
         else if (isBinaryExpressionOperatorToken(token) || isPrefixUnaryExpressionOperatorToken(token)) {
             return 5 /* operator */;
         }
-        else if (token >= 18 /* FirstPunctuation */ && token <= 77 /* LastPunctuation */) {
+        else if (token >= 18 /* FirstPunctuation */ && token <= 78 /* LastPunctuation */) {
             return 10 /* punctuation */;
         }
         switch (token) {
@@ -122140,7 +124813,7 @@
             case 5 /* WhitespaceTrivia */:
             case 4 /* NewLineTrivia */:
                 return 8 /* whiteSpace */;
-            case 78 /* Identifier */:
+            case 79 /* Identifier */:
             default:
                 if (ts.isTemplateLiteralKind(token)) {
                     return 6 /* stringLiteral */;
@@ -122165,13 +124838,13 @@
         // That means we're calling back into the host around every 1.2k of the file we process.
         // Lib.d.ts has similar numbers.
         switch (kind) {
-            case 257 /* ModuleDeclaration */:
-            case 253 /* ClassDeclaration */:
-            case 254 /* InterfaceDeclaration */:
-            case 252 /* FunctionDeclaration */:
-            case 222 /* ClassExpression */:
-            case 209 /* FunctionExpression */:
-            case 210 /* ArrowFunction */:
+            case 259 /* ModuleDeclaration */:
+            case 255 /* ClassDeclaration */:
+            case 256 /* InterfaceDeclaration */:
+            case 254 /* FunctionDeclaration */:
+            case 224 /* ClassExpression */:
+            case 211 /* FunctionExpression */:
+            case 212 /* ArrowFunction */:
                 cancellationToken.throwIfCancellationRequested();
         }
     }
@@ -122393,46 +125066,46 @@
                     pos = tag.tagName.end;
                     var commentStart = tag.tagName.end;
                     switch (tag.kind) {
-                        case 330 /* JSDocParameterTag */:
+                        case 335 /* JSDocParameterTag */:
                             var param = tag;
                             processJSDocParameterTag(param);
                             commentStart = param.isNameFirst && ((_a = param.typeExpression) === null || _a === void 0 ? void 0 : _a.end) || param.name.end;
                             break;
-                        case 337 /* JSDocPropertyTag */:
+                        case 342 /* JSDocPropertyTag */:
                             var prop = tag;
                             commentStart = prop.isNameFirst && ((_b = prop.typeExpression) === null || _b === void 0 ? void 0 : _b.end) || prop.name.end;
                             break;
-                        case 334 /* JSDocTemplateTag */:
+                        case 339 /* JSDocTemplateTag */:
                             processJSDocTemplateTag(tag);
                             pos = tag.end;
                             commentStart = tag.typeParameters.end;
                             break;
-                        case 335 /* JSDocTypedefTag */:
+                        case 340 /* JSDocTypedefTag */:
                             var type = tag;
-                            commentStart = ((_c = type.typeExpression) === null || _c === void 0 ? void 0 : _c.kind) === 302 /* JSDocTypeExpression */ && ((_d = type.fullName) === null || _d === void 0 ? void 0 : _d.end) || ((_e = type.typeExpression) === null || _e === void 0 ? void 0 : _e.end) || commentStart;
+                            commentStart = ((_c = type.typeExpression) === null || _c === void 0 ? void 0 : _c.kind) === 304 /* JSDocTypeExpression */ && ((_d = type.fullName) === null || _d === void 0 ? void 0 : _d.end) || ((_e = type.typeExpression) === null || _e === void 0 ? void 0 : _e.end) || commentStart;
                             break;
-                        case 328 /* JSDocCallbackTag */:
+                        case 333 /* JSDocCallbackTag */:
                             commentStart = tag.typeExpression.end;
                             break;
-                        case 333 /* JSDocTypeTag */:
+                        case 338 /* JSDocTypeTag */:
                             processElement(tag.typeExpression);
                             pos = tag.end;
                             commentStart = tag.typeExpression.end;
                             break;
-                        case 332 /* JSDocThisTag */:
-                        case 329 /* JSDocEnumTag */:
+                        case 337 /* JSDocThisTag */:
+                        case 334 /* JSDocEnumTag */:
                             commentStart = tag.typeExpression.end;
                             break;
-                        case 331 /* JSDocReturnTag */:
+                        case 336 /* JSDocReturnTag */:
                             processElement(tag.typeExpression);
                             pos = tag.end;
                             commentStart = ((_f = tag.typeExpression) === null || _f === void 0 ? void 0 : _f.end) || commentStart;
                             break;
-                        case 336 /* JSDocSeeTag */:
+                        case 341 /* JSDocSeeTag */:
                             commentStart = ((_g = tag.name) === null || _g === void 0 ? void 0 : _g.end) || commentStart;
                             break;
-                        case 318 /* JSDocAugmentsTag */:
-                        case 319 /* JSDocImplementsTag */:
+                        case 323 /* JSDocAugmentsTag */:
+                        case 324 /* JSDocImplementsTag */:
                             commentStart = tag.class.end;
                             break;
                     }
@@ -122468,7 +125141,8 @@
         }
         function tryClassifyTripleSlashComment(start, width) {
             var tripleSlashXMLCommentRegEx = /^(\/\/\/\s*)(<)(?:(\S+)((?:[^/]|\/[^>])*)(\/>)?)?/im;
-            var attributeRegex = /(\S+)(\s*)(=)(\s*)('[^']+'|"[^"]+")/img;
+            // Require a leading whitespace character (the parser already does) to prevent terrible backtracking performance
+            var attributeRegex = /(\s)(\S+)(\s*)(=)(\s*)('[^']+'|"[^"]+")/img;
             var text = sourceFile.text.substr(start, width);
             var match = tripleSlashXMLCommentRegEx.exec(text);
             if (!match) {
@@ -122496,25 +125170,25 @@
                 if (!attrMatch) {
                     break;
                 }
-                var newAttrPos = pos + attrMatch.index;
+                var newAttrPos = pos + attrMatch.index + attrMatch[1].length; // whitespace
                 if (newAttrPos > attrPos) {
                     pushCommentRange(attrPos, newAttrPos - attrPos);
                     attrPos = newAttrPos;
                 }
-                pushClassification(attrPos, attrMatch[1].length, 22 /* jsxAttribute */); // attribute name
-                attrPos += attrMatch[1].length;
-                if (attrMatch[2].length) {
-                    pushCommentRange(attrPos, attrMatch[2].length); // whitespace
-                    attrPos += attrMatch[2].length;
+                pushClassification(attrPos, attrMatch[2].length, 22 /* jsxAttribute */); // attribute name
+                attrPos += attrMatch[2].length;
+                if (attrMatch[3].length) {
+                    pushCommentRange(attrPos, attrMatch[3].length); // whitespace
+                    attrPos += attrMatch[3].length;
                 }
-                pushClassification(attrPos, attrMatch[3].length, 5 /* operator */); // =
-                attrPos += attrMatch[3].length;
-                if (attrMatch[4].length) {
-                    pushCommentRange(attrPos, attrMatch[4].length); // whitespace
-                    attrPos += attrMatch[4].length;
+                pushClassification(attrPos, attrMatch[4].length, 5 /* operator */); // =
+                attrPos += attrMatch[4].length;
+                if (attrMatch[5].length) {
+                    pushCommentRange(attrPos, attrMatch[5].length); // whitespace
+                    attrPos += attrMatch[5].length;
                 }
-                pushClassification(attrPos, attrMatch[5].length, 24 /* jsxAttributeStringLiteralValue */); // attribute value
-                attrPos += attrMatch[5].length;
+                pushClassification(attrPos, attrMatch[6].length, 24 /* jsxAttributeStringLiteralValue */); // attribute value
+                attrPos += attrMatch[6].length;
             }
             pos += match[4].length;
             if (pos > attrPos) {
@@ -122588,22 +125262,22 @@
         }
         function tryClassifyJsxElementName(token) {
             switch (token.parent && token.parent.kind) {
-                case 276 /* JsxOpeningElement */:
+                case 278 /* JsxOpeningElement */:
                     if (token.parent.tagName === token) {
                         return 19 /* jsxOpenTagName */;
                     }
                     break;
-                case 277 /* JsxClosingElement */:
+                case 279 /* JsxClosingElement */:
                     if (token.parent.tagName === token) {
                         return 20 /* jsxCloseTagName */;
                     }
                     break;
-                case 275 /* JsxSelfClosingElement */:
+                case 277 /* JsxSelfClosingElement */:
                     if (token.parent.tagName === token) {
                         return 21 /* jsxSelfClosingTagName */;
                     }
                     break;
-                case 281 /* JsxAttribute */:
+                case 283 /* JsxAttribute */:
                     if (token.parent.name === token) {
                         return 22 /* jsxAttribute */;
                     }
@@ -122630,19 +125304,19 @@
             if (ts.isPunctuation(tokenKind)) {
                 if (token) {
                     var parent = token.parent;
-                    if (tokenKind === 62 /* EqualsToken */) {
+                    if (tokenKind === 63 /* EqualsToken */) {
                         // the '=' in a variable declaration is special cased here.
-                        if (parent.kind === 250 /* VariableDeclaration */ ||
-                            parent.kind === 164 /* PropertyDeclaration */ ||
-                            parent.kind === 161 /* Parameter */ ||
-                            parent.kind === 281 /* JsxAttribute */) {
+                        if (parent.kind === 252 /* VariableDeclaration */ ||
+                            parent.kind === 165 /* PropertyDeclaration */ ||
+                            parent.kind === 162 /* Parameter */ ||
+                            parent.kind === 283 /* JsxAttribute */) {
                             return 5 /* operator */;
                         }
                     }
-                    if (parent.kind === 217 /* BinaryExpression */ ||
-                        parent.kind === 215 /* PrefixUnaryExpression */ ||
-                        parent.kind === 216 /* PostfixUnaryExpression */ ||
-                        parent.kind === 218 /* ConditionalExpression */) {
+                    if (parent.kind === 219 /* BinaryExpression */ ||
+                        parent.kind === 217 /* PrefixUnaryExpression */ ||
+                        parent.kind === 218 /* PostfixUnaryExpression */ ||
+                        parent.kind === 220 /* ConditionalExpression */) {
                         return 5 /* operator */;
                     }
                 }
@@ -122655,7 +125329,7 @@
                 return 25 /* bigintLiteral */;
             }
             else if (tokenKind === 10 /* StringLiteral */) {
-                return token && token.parent.kind === 281 /* JsxAttribute */ ? 24 /* jsxAttributeStringLiteralValue */ : 6 /* stringLiteral */;
+                return token && token.parent.kind === 283 /* JsxAttribute */ ? 24 /* jsxAttributeStringLiteralValue */ : 6 /* stringLiteral */;
             }
             else if (tokenKind === 13 /* RegularExpressionLiteral */) {
                 // TODO: we should get another classification type for these literals.
@@ -122668,35 +125342,35 @@
             else if (tokenKind === 11 /* JsxText */) {
                 return 23 /* jsxText */;
             }
-            else if (tokenKind === 78 /* Identifier */) {
+            else if (tokenKind === 79 /* Identifier */) {
                 if (token) {
                     switch (token.parent.kind) {
-                        case 253 /* ClassDeclaration */:
+                        case 255 /* ClassDeclaration */:
                             if (token.parent.name === token) {
                                 return 11 /* className */;
                             }
                             return;
-                        case 160 /* TypeParameter */:
+                        case 161 /* TypeParameter */:
                             if (token.parent.name === token) {
                                 return 15 /* typeParameterName */;
                             }
                             return;
-                        case 254 /* InterfaceDeclaration */:
+                        case 256 /* InterfaceDeclaration */:
                             if (token.parent.name === token) {
                                 return 13 /* interfaceName */;
                             }
                             return;
-                        case 256 /* EnumDeclaration */:
+                        case 258 /* EnumDeclaration */:
                             if (token.parent.name === token) {
                                 return 12 /* enumName */;
                             }
                             return;
-                        case 257 /* ModuleDeclaration */:
+                        case 259 /* ModuleDeclaration */:
                             if (token.parent.name === token) {
                                 return 14 /* moduleName */;
                             }
                             return;
-                        case 161 /* Parameter */:
+                        case 162 /* Parameter */:
                             if (token.parent.name === token) {
                                 return ts.isThisIdentifier(token) ? 3 /* keyword */ : 17 /* parameterName */;
                             }
@@ -122798,13 +125472,13 @@
                 var inJSXElement = false;
                 function visit(node) {
                     switch (node.kind) {
-                        case 257 /* ModuleDeclaration */:
-                        case 253 /* ClassDeclaration */:
-                        case 254 /* InterfaceDeclaration */:
-                        case 252 /* FunctionDeclaration */:
-                        case 222 /* ClassExpression */:
-                        case 209 /* FunctionExpression */:
-                        case 210 /* ArrowFunction */:
+                        case 259 /* ModuleDeclaration */:
+                        case 255 /* ClassDeclaration */:
+                        case 256 /* InterfaceDeclaration */:
+                        case 254 /* FunctionDeclaration */:
+                        case 224 /* ClassExpression */:
+                        case 211 /* FunctionExpression */:
+                        case 212 /* ArrowFunction */:
                             cancellationToken.throwIfCancellationRequested();
                     }
                     if (!node || !ts.textSpanIntersectsWith(span, node.pos, node.getFullWidth()) || node.getFullWidth() === 0) {
@@ -122817,7 +125491,7 @@
                     if (ts.isJsxExpression(node)) {
                         inJSXElement = false;
                     }
-                    if (ts.isIdentifier(node) && !inJSXElement && !inImportClause(node)) {
+                    if (ts.isIdentifier(node) && !inJSXElement && !inImportClause(node) && !ts.isInfinityOrNaNString(node.escapedText)) {
                         var symbol = typeChecker.getSymbolAtLocation(node);
                         if (symbol) {
                             if (symbol.flags & 2097152 /* Alias */) {
@@ -122950,25 +125624,25 @@
                 return (ts.isQualifiedName(node.parent) && node.parent.right === node) || (ts.isPropertyAccessExpression(node.parent) && node.parent.name === node);
             }
             var tokenFromDeclarationMapping = new ts.Map([
-                [250 /* VariableDeclaration */, 7 /* variable */],
-                [161 /* Parameter */, 6 /* parameter */],
-                [164 /* PropertyDeclaration */, 9 /* property */],
-                [257 /* ModuleDeclaration */, 3 /* namespace */],
-                [256 /* EnumDeclaration */, 1 /* enum */],
-                [292 /* EnumMember */, 8 /* enumMember */],
-                [253 /* ClassDeclaration */, 0 /* class */],
-                [166 /* MethodDeclaration */, 11 /* member */],
-                [252 /* FunctionDeclaration */, 10 /* function */],
-                [209 /* FunctionExpression */, 10 /* function */],
-                [165 /* MethodSignature */, 11 /* member */],
-                [168 /* GetAccessor */, 9 /* property */],
-                [169 /* SetAccessor */, 9 /* property */],
-                [163 /* PropertySignature */, 9 /* property */],
-                [254 /* InterfaceDeclaration */, 2 /* interface */],
-                [255 /* TypeAliasDeclaration */, 5 /* type */],
-                [160 /* TypeParameter */, 4 /* typeParameter */],
-                [289 /* PropertyAssignment */, 9 /* property */],
-                [290 /* ShorthandPropertyAssignment */, 9 /* property */]
+                [252 /* VariableDeclaration */, 7 /* variable */],
+                [162 /* Parameter */, 6 /* parameter */],
+                [165 /* PropertyDeclaration */, 9 /* property */],
+                [259 /* ModuleDeclaration */, 3 /* namespace */],
+                [258 /* EnumDeclaration */, 1 /* enum */],
+                [294 /* EnumMember */, 8 /* enumMember */],
+                [255 /* ClassDeclaration */, 0 /* class */],
+                [167 /* MethodDeclaration */, 11 /* member */],
+                [254 /* FunctionDeclaration */, 10 /* function */],
+                [211 /* FunctionExpression */, 10 /* function */],
+                [166 /* MethodSignature */, 11 /* member */],
+                [170 /* GetAccessor */, 9 /* property */],
+                [171 /* SetAccessor */, 9 /* property */],
+                [164 /* PropertySignature */, 9 /* property */],
+                [256 /* InterfaceDeclaration */, 2 /* interface */],
+                [257 /* TypeAliasDeclaration */, 5 /* type */],
+                [161 /* TypeParameter */, 4 /* typeParameter */],
+                [291 /* PropertyAssignment */, 9 /* property */],
+                [292 /* ShorthandPropertyAssignment */, 9 /* property */]
             ]);
         })(v2020 = classifier.v2020 || (classifier.v2020 = {}));
     })(classifier = ts.classifier || (ts.classifier = {}));
@@ -123075,10 +125749,10 @@
             function getStringLiteralCompletionEntries(sourceFile, node, position, typeChecker, compilerOptions, host, preferences) {
                 var parent = walkUpParentheses(node.parent);
                 switch (parent.kind) {
-                    case 192 /* LiteralType */: {
+                    case 194 /* LiteralType */: {
                         var grandParent = walkUpParentheses(parent.parent);
                         switch (grandParent.kind) {
-                            case 174 /* TypeReference */: {
+                            case 176 /* TypeReference */: {
                                 var typeReference_1 = grandParent;
                                 var typeArgument = ts.findAncestor(parent, function (n) { return n.parent === typeReference_1; });
                                 if (typeArgument) {
@@ -123086,7 +125760,7 @@
                                 }
                                 return undefined;
                             }
-                            case 190 /* IndexedAccessType */:
+                            case 192 /* IndexedAccessType */:
                                 // Get all apparent property names
                                 // i.e. interface Foo {
                                 //          foo: string;
@@ -123098,9 +125772,9 @@
                                     return undefined;
                                 }
                                 return stringLiteralCompletionsFromProperties(typeChecker.getTypeFromTypeNode(objectType));
-                            case 196 /* ImportType */:
+                            case 198 /* ImportType */:
                                 return { kind: 0 /* Paths */, paths: getStringLiteralCompletionsFromModuleNames(sourceFile, node, compilerOptions, host, typeChecker, preferences) };
-                            case 183 /* UnionType */: {
+                            case 185 /* UnionType */: {
                                 if (!ts.isTypeReferenceNode(grandParent.parent)) {
                                     return undefined;
                                 }
@@ -123112,7 +125786,7 @@
                                 return undefined;
                         }
                     }
-                    case 289 /* PropertyAssignment */:
+                    case 291 /* PropertyAssignment */:
                         if (ts.isObjectLiteralExpression(parent.parent) && parent.name === node) {
                             // Get quoted name of properties of the object literal expression
                             // i.e. interface ConfigFiles {
@@ -123129,7 +125803,7 @@
                             return stringLiteralCompletionsForObjectLiteral(typeChecker, parent.parent);
                         }
                         return fromContextualType();
-                    case 203 /* ElementAccessExpression */: {
+                    case 205 /* ElementAccessExpression */: {
                         var _b = parent, expression = _b.expression, argumentExpression = _b.argumentExpression;
                         if (node === ts.skipParentheses(argumentExpression)) {
                             // Get all names of properties on the expression
@@ -123142,19 +125816,19 @@
                         }
                         return undefined;
                     }
-                    case 204 /* CallExpression */:
-                    case 205 /* NewExpression */:
-                        if (!ts.isRequireCall(parent, /*checkArgumentIsStringLiteralLike*/ false) && !ts.isImportCall(parent)) {
+                    case 206 /* CallExpression */:
+                    case 207 /* NewExpression */:
+                        if (!isRequireCallArgument(node) && !ts.isImportCall(parent)) {
                             var argumentInfo = ts.SignatureHelp.getArgumentInfoForCompletions(node, position, sourceFile);
                             // Get string literal completions from specialized signatures of the target
                             // i.e. declare function f(a: 'A');
                             // f("/*completion position*/")
                             return argumentInfo ? getStringLiteralCompletionsFromSignature(argumentInfo, typeChecker) : fromContextualType();
                         }
-                    // falls through (is `require("")` or `import("")`)
-                    case 262 /* ImportDeclaration */:
-                    case 268 /* ExportDeclaration */:
-                    case 273 /* ExternalModuleReference */:
+                    // falls through (is `require("")` or `require(""` or `import("")`)
+                    case 264 /* ImportDeclaration */:
+                    case 270 /* ExportDeclaration */:
+                    case 275 /* ExternalModuleReference */:
                         // Get all known external module names or complete a path to a module
                         // i.e. import * as ns from "/*completion position*/";
                         //      var y = import("/*completion position*/");
@@ -123173,9 +125847,9 @@
             }
             function walkUpParentheses(node) {
                 switch (node.kind) {
-                    case 187 /* ParenthesizedType */:
+                    case 189 /* ParenthesizedType */:
                         return ts.walkUpParenthesizedTypes(node);
-                    case 208 /* ParenthesizedExpression */:
+                    case 210 /* ParenthesizedExpression */:
                         return ts.walkUpParenthesizedExpressions(node);
                     default:
                         return node;
@@ -123252,12 +125926,13 @@
                     ? getCompletionEntriesForRelativeModules(literalValue, scriptDirectory, compilerOptions, host, scriptPath, preferences)
                     : getCompletionEntriesForNonRelativeModules(literalValue, scriptDirectory, compilerOptions, host, typeChecker);
             }
-            function getExtensionOptions(compilerOptions, includeExtensions) {
-                if (includeExtensions === void 0) { includeExtensions = false; }
-                return { extensions: getSupportedExtensionsForModuleResolution(compilerOptions), includeExtensions: includeExtensions };
+            function getExtensionOptions(compilerOptions, includeExtensionsOption) {
+                if (includeExtensionsOption === void 0) { includeExtensionsOption = 0 /* Exclude */; }
+                return { extensions: getSupportedExtensionsForModuleResolution(compilerOptions), includeExtensionsOption: includeExtensionsOption };
             }
             function getCompletionEntriesForRelativeModules(literalValue, scriptDirectory, compilerOptions, host, scriptPath, preferences) {
-                var extensionOptions = getExtensionOptions(compilerOptions, preferences.importModuleSpecifierEnding === "js");
+                var includeExtensions = preferences.importModuleSpecifierEnding === "js" ? 2 /* ModuleSpecifierCompletion */ : 0 /* Exclude */;
+                var extensionOptions = getExtensionOptions(compilerOptions, includeExtensions);
                 if (compilerOptions.rootDirs) {
                     return getCompletionEntriesForDirectoryFragmentWithRootDirs(compilerOptions.rootDirs, literalValue, scriptDirectory, extensionOptions, compilerOptions, host, scriptPath);
                 }
@@ -123283,7 +125958,7 @@
                     return ts.containsPath(rootDirectory, scriptDirectory, basePath, ignoreCase) ? scriptDirectory.substr(rootDirectory.length) : undefined;
                 }); // TODO: GH#18217
                 // Now find a path for each potential directory that is to be merged with the one containing the script
-                return ts.deduplicate(__spreadArray(__spreadArray([], rootDirs.map(function (rootDirectory) { return ts.combinePaths(rootDirectory, relativeDirectory); })), [scriptDirectory]), ts.equateStringsCaseSensitive, ts.compareStringsCaseSensitive);
+                return ts.deduplicate(__spreadArray(__spreadArray([], rootDirs.map(function (rootDirectory) { return ts.combinePaths(rootDirectory, relativeDirectory); }), true), [scriptDirectory], false), ts.equateStringsCaseSensitive, ts.compareStringsCaseSensitive);
             }
             function getCompletionEntriesForDirectoryFragmentWithRootDirs(rootDirs, fragment, scriptDirectory, extensionOptions, compilerOptions, host, exclude) {
                 var basePath = compilerOptions.project || host.getCurrentDirectory();
@@ -123291,11 +125966,17 @@
                 var baseDirectories = getBaseDirectoriesFromRootDirs(rootDirs, basePath, scriptDirectory, ignoreCase);
                 return ts.flatMap(baseDirectories, function (baseDirectory) { return getCompletionEntriesForDirectoryFragment(fragment, baseDirectory, extensionOptions, host, exclude); });
             }
+            var IncludeExtensionsOption;
+            (function (IncludeExtensionsOption) {
+                IncludeExtensionsOption[IncludeExtensionsOption["Exclude"] = 0] = "Exclude";
+                IncludeExtensionsOption[IncludeExtensionsOption["Include"] = 1] = "Include";
+                IncludeExtensionsOption[IncludeExtensionsOption["ModuleSpecifierCompletion"] = 2] = "ModuleSpecifierCompletion";
+            })(IncludeExtensionsOption || (IncludeExtensionsOption = {}));
             /**
              * Given a path ending at a directory, gets the completions for the path, and filters for those entries containing the basename.
              */
             function getCompletionEntriesForDirectoryFragment(fragment, scriptPath, _a, host, exclude, result) {
-                var extensions = _a.extensions, includeExtensions = _a.includeExtensions;
+                var extensions = _a.extensions, includeExtensionsOption = _a.includeExtensionsOption;
                 if (result === void 0) { result = []; }
                 if (fragment === undefined) {
                     fragment = "";
@@ -123323,7 +126004,7 @@
                 if (files) {
                     /**
                      * Multiple file entries might map to the same truncated name once we remove extensions
-                     * (happens iff includeExtensions === false)so we use a set-like data structure. Eg:
+                     * (happens iff includeExtensionsOption === includeExtensionsOption.Exclude) so we use a set-like data structure. Eg:
                      *
                      * both foo.ts and foo.tsx become foo
                      */
@@ -123334,8 +126015,20 @@
                         if (exclude && ts.comparePaths(filePath, exclude, scriptPath, ignoreCase) === 0 /* EqualTo */) {
                             continue;
                         }
-                        var foundFileName = includeExtensions || ts.fileExtensionIs(filePath, ".json" /* Json */) ? ts.getBaseFileName(filePath) : ts.removeFileExtension(ts.getBaseFileName(filePath));
-                        foundFiles.set(foundFileName, ts.tryGetExtensionFromPath(filePath));
+                        var foundFileName = void 0;
+                        var outputExtension = ts.moduleSpecifiers.tryGetJSExtensionForFile(filePath, host.getCompilationSettings());
+                        if (includeExtensionsOption === 0 /* Exclude */ && !ts.fileExtensionIs(filePath, ".json" /* Json */)) {
+                            foundFileName = ts.removeFileExtension(ts.getBaseFileName(filePath));
+                            foundFiles.set(foundFileName, ts.tryGetExtensionFromPath(filePath));
+                        }
+                        else if (includeExtensionsOption === 2 /* ModuleSpecifierCompletion */ && outputExtension) {
+                            foundFileName = ts.changeExtension(ts.getBaseFileName(filePath), outputExtension);
+                            foundFiles.set(foundFileName, outputExtension);
+                        }
+                        else {
+                            foundFileName = ts.getBaseFileName(filePath);
+                            foundFiles.set(foundFileName, ts.tryGetExtensionFromPath(filePath));
+                        }
                     }
                     foundFiles.forEach(function (ext, foundFile) {
                         result.push(nameAndKind(foundFile, "script" /* scriptElement */, ext));
@@ -123460,8 +126153,8 @@
                 if (!host.readDirectory) {
                     return undefined;
                 }
-                var parsed = ts.hasZeroOrOneAsteriskCharacter(pattern) ? ts.tryParsePattern(pattern) : undefined;
-                if (!parsed) {
+                var parsed = ts.tryParsePattern(pattern);
+                if (parsed === undefined || ts.isString(parsed)) {
                     return undefined;
                 }
                 // The prefix has two effective parts: the directory path and the base component after the filepath that is not a
@@ -123490,7 +126183,7 @@
                     var name = trimPrefixAndSuffix(dir);
                     return name === undefined ? undefined : directoryResult(name);
                 });
-                return __spreadArray(__spreadArray([], matches), directories);
+                return __spreadArray(__spreadArray([], matches, true), directories, true);
                 function trimPrefixAndSuffix(path) {
                     var inner = withoutStartAndEnd(ts.normalizePath(path), completePrefix, normalizedSuffix);
                     return inner === undefined ? undefined : removeLeadingDirectorySeparator(inner);
@@ -123529,7 +126222,7 @@
                 }
                 var prefix = match[1], kind = match[2], toComplete = match[3];
                 var scriptPath = ts.getDirectoryPath(sourceFile.path);
-                var names = kind === "path" ? getCompletionEntriesForDirectoryFragment(toComplete, scriptPath, getExtensionOptions(compilerOptions, /*includeExtensions*/ true), host, sourceFile.path)
+                var names = kind === "path" ? getCompletionEntriesForDirectoryFragment(toComplete, scriptPath, getExtensionOptions(compilerOptions, 1 /* Include */), host, sourceFile.path)
                     : kind === "types" ? getCompletionEntriesFromTypings(host, compilerOptions, scriptPath, getFragmentDirectory(toComplete), getExtensionOptions(compilerOptions))
                         : ts.Debug.fail();
                 return addReplacementSpans(toComplete, range.pos + prefix.length, names);
@@ -123630,6 +126323,15 @@
             function containsSlash(fragment) {
                 return ts.stringContains(fragment, ts.directorySeparator);
             }
+            /**
+             * Matches
+             *   require(""
+             *   require("")
+             */
+            function isRequireCallArgument(node) {
+                return ts.isCallExpression(node.parent) && ts.firstOrUndefined(node.parent.arguments) === node
+                    && ts.isIdentifier(node.parent.expression) && node.parent.expression.escapedText === "require";
+            }
         })(StringCompletions = Completions.StringCompletions || (Completions.StringCompletions = {}));
     })(Completions = ts.Completions || (ts.Completions = {}));
 })(ts || (ts = {}));
@@ -123638,17 +126340,45 @@
 (function (ts) {
     var Completions;
     (function (Completions) {
+        // Exported only for tests
+        Completions.moduleSpecifierResolutionLimit = 100;
+        Completions.moduleSpecifierResolutionCacheAttemptLimit = 1000;
+        // NOTE: Make sure that each entry has the exact same number of digits
+        //       since many implementations will sort by string contents,
+        //       where "10" is considered less than "2".
         var SortText;
         (function (SortText) {
-            SortText["LocalDeclarationPriority"] = "0";
-            SortText["LocationPriority"] = "1";
-            SortText["OptionalMember"] = "2";
-            SortText["MemberDeclaredBySpreadAssignment"] = "3";
-            SortText["SuggestedClassMembers"] = "4";
-            SortText["GlobalsOrKeywords"] = "5";
-            SortText["AutoImportSuggestions"] = "6";
-            SortText["JavascriptIdentifiers"] = "7";
+            SortText["LocalDeclarationPriority"] = "10";
+            SortText["LocationPriority"] = "11";
+            SortText["OptionalMember"] = "12";
+            SortText["MemberDeclaredBySpreadAssignment"] = "13";
+            SortText["SuggestedClassMembers"] = "14";
+            SortText["GlobalsOrKeywords"] = "15";
+            SortText["AutoImportSuggestions"] = "16";
+            SortText["JavascriptIdentifiers"] = "17";
+            SortText["DeprecatedLocalDeclarationPriority"] = "18";
+            SortText["DeprecatedLocationPriority"] = "19";
+            SortText["DeprecatedOptionalMember"] = "20";
+            SortText["DeprecatedMemberDeclaredBySpreadAssignment"] = "21";
+            SortText["DeprecatedSuggestedClassMembers"] = "22";
+            SortText["DeprecatedGlobalsOrKeywords"] = "23";
+            SortText["DeprecatedAutoImportSuggestions"] = "24";
         })(SortText = Completions.SortText || (Completions.SortText = {}));
+        var SortTextId;
+        (function (SortTextId) {
+            SortTextId[SortTextId["LocalDeclarationPriority"] = 10] = "LocalDeclarationPriority";
+            SortTextId[SortTextId["LocationPriority"] = 11] = "LocationPriority";
+            SortTextId[SortTextId["OptionalMember"] = 12] = "OptionalMember";
+            SortTextId[SortTextId["MemberDeclaredBySpreadAssignment"] = 13] = "MemberDeclaredBySpreadAssignment";
+            SortTextId[SortTextId["SuggestedClassMembers"] = 14] = "SuggestedClassMembers";
+            SortTextId[SortTextId["GlobalsOrKeywords"] = 15] = "GlobalsOrKeywords";
+            SortTextId[SortTextId["AutoImportSuggestions"] = 16] = "AutoImportSuggestions";
+            // Don't use these directly.
+            SortTextId[SortTextId["_JavaScriptIdentifiers"] = 17] = "_JavaScriptIdentifiers";
+            SortTextId[SortTextId["_DeprecatedStart"] = 18] = "_DeprecatedStart";
+            SortTextId[SortTextId["_First"] = 10] = "_First";
+            SortTextId[SortTextId["DeprecatedOffset"] = 8] = "DeprecatedOffset";
+        })(SortTextId || (SortTextId = {}));
         /**
          * Special values for `CompletionInfo['source']` used to disambiguate
          * completion items with the same `name`. (Each completion item must
@@ -123718,11 +126448,48 @@
             GlobalsSearch[GlobalsSearch["Success"] = 1] = "Success";
             GlobalsSearch[GlobalsSearch["Fail"] = 2] = "Fail";
         })(GlobalsSearch || (GlobalsSearch = {}));
-        function getCompletionsAtPosition(host, program, log, sourceFile, position, preferences, triggerCharacter) {
-            var typeChecker = program.getTypeChecker();
-            var compilerOptions = program.getCompilerOptions();
-            var contextToken = ts.findPrecedingToken(position, sourceFile);
-            if (triggerCharacter && !ts.isInString(sourceFile, position, contextToken) && !isValidTrigger(sourceFile, triggerCharacter, contextToken, position)) {
+        function resolvingModuleSpecifiers(logPrefix, host, program, sourceFile, preferences, isForImportStatementCompletion, cb) {
+            var _a, _b, _c;
+            var start = ts.timestamp();
+            var resolutionLimitExceeded = false;
+            var ambientCount = 0;
+            var resolvedCount = 0;
+            var resolvedFromCacheCount = 0;
+            var cacheAttemptCount = 0;
+            var result = cb({ tryResolve: tryResolve, resolutionLimitExceeded: function () { return resolutionLimitExceeded; } });
+            var hitRateMessage = cacheAttemptCount ? " (" + (resolvedFromCacheCount / cacheAttemptCount * 100).toFixed(1) + "% hit rate)" : "";
+            (_a = host.log) === null || _a === void 0 ? void 0 : _a.call(host, logPrefix + ": resolved " + resolvedCount + " module specifiers, plus " + ambientCount + " ambient and " + resolvedFromCacheCount + " from cache" + hitRateMessage);
+            (_b = host.log) === null || _b === void 0 ? void 0 : _b.call(host, logPrefix + ": response is " + (resolutionLimitExceeded ? "incomplete" : "complete"));
+            (_c = host.log) === null || _c === void 0 ? void 0 : _c.call(host, logPrefix + ": " + (ts.timestamp() - start));
+            return result;
+            function tryResolve(exportInfo, isFromAmbientModule) {
+                if (isFromAmbientModule) {
+                    var result_1 = ts.codefix.getModuleSpecifierForBestExportInfo(exportInfo, sourceFile, program, host, preferences);
+                    if (result_1) {
+                        ambientCount++;
+                    }
+                    return result_1;
+                }
+                var shouldResolveModuleSpecifier = isForImportStatementCompletion || preferences.allowIncompleteCompletions && resolvedCount < Completions.moduleSpecifierResolutionLimit;
+                var shouldGetModuleSpecifierFromCache = !shouldResolveModuleSpecifier && preferences.allowIncompleteCompletions && cacheAttemptCount < Completions.moduleSpecifierResolutionCacheAttemptLimit;
+                var result = (shouldResolveModuleSpecifier || shouldGetModuleSpecifierFromCache)
+                    ? ts.codefix.getModuleSpecifierForBestExportInfo(exportInfo, sourceFile, program, host, preferences, shouldGetModuleSpecifierFromCache)
+                    : undefined;
+                if (!shouldResolveModuleSpecifier && !shouldGetModuleSpecifierFromCache || shouldGetModuleSpecifierFromCache && !result) {
+                    resolutionLimitExceeded = true;
+                }
+                resolvedCount += (result === null || result === void 0 ? void 0 : result.computedWithoutCacheCount) || 0;
+                resolvedFromCacheCount += exportInfo.length - resolvedCount;
+                if (shouldGetModuleSpecifierFromCache) {
+                    cacheAttemptCount++;
+                }
+                return result;
+            }
+        }
+        function getCompletionsAtPosition(host, program, log, sourceFile, position, preferences, triggerCharacter, completionKind, cancellationToken) {
+            var _a;
+            var previousToken = getRelevantTokens(position, sourceFile).previousToken;
+            if (triggerCharacter && !ts.isInString(sourceFile, position, previousToken) && !isValidTrigger(sourceFile, triggerCharacter, previousToken, position)) {
                 return undefined;
             }
             if (triggerCharacter === " ") {
@@ -123732,21 +126499,39 @@
                 }
                 return undefined;
             }
-            var stringCompletions = Completions.StringCompletions.getStringLiteralCompletions(sourceFile, position, contextToken, typeChecker, compilerOptions, host, log, preferences);
+            // If the request is a continuation of an earlier `isIncomplete` response,
+            // we can continue it from the cached previous response.
+            var typeChecker = program.getTypeChecker();
+            var compilerOptions = program.getCompilerOptions();
+            var incompleteCompletionsCache = preferences.allowIncompleteCompletions ? (_a = host.getIncompleteCompletionsCache) === null || _a === void 0 ? void 0 : _a.call(host) : undefined;
+            if (incompleteCompletionsCache && completionKind === 3 /* TriggerForIncompleteCompletions */ && previousToken && ts.isIdentifier(previousToken)) {
+                var incompleteContinuation = continuePreviousIncompleteResponse(incompleteCompletionsCache, sourceFile, previousToken, program, host, preferences, cancellationToken);
+                if (incompleteContinuation) {
+                    return incompleteContinuation;
+                }
+            }
+            else {
+                incompleteCompletionsCache === null || incompleteCompletionsCache === void 0 ? void 0 : incompleteCompletionsCache.clear();
+            }
+            var stringCompletions = Completions.StringCompletions.getStringLiteralCompletions(sourceFile, position, previousToken, typeChecker, compilerOptions, host, log, preferences);
             if (stringCompletions) {
                 return stringCompletions;
             }
-            if (contextToken && ts.isBreakOrContinueStatement(contextToken.parent)
-                && (contextToken.kind === 80 /* BreakKeyword */ || contextToken.kind === 85 /* ContinueKeyword */ || contextToken.kind === 78 /* Identifier */)) {
-                return getLabelCompletionAtPosition(contextToken.parent);
+            if (previousToken && ts.isBreakOrContinueStatement(previousToken.parent)
+                && (previousToken.kind === 81 /* BreakKeyword */ || previousToken.kind === 86 /* ContinueKeyword */ || previousToken.kind === 79 /* Identifier */)) {
+                return getLabelCompletionAtPosition(previousToken.parent);
             }
-            var completionData = getCompletionData(program, log, sourceFile, isUncheckedFile(sourceFile, compilerOptions), position, preferences, /*detailsEntryId*/ undefined, host);
+            var completionData = getCompletionData(program, log, sourceFile, isUncheckedFile(sourceFile, compilerOptions), position, preferences, /*detailsEntryId*/ undefined, host, cancellationToken);
             if (!completionData) {
                 return undefined;
             }
             switch (completionData.kind) {
                 case 0 /* Data */:
-                    return completionInfoFromData(sourceFile, typeChecker, compilerOptions, log, completionData, preferences);
+                    var response = completionInfoFromData(sourceFile, typeChecker, compilerOptions, log, completionData, preferences);
+                    if (response === null || response === void 0 ? void 0 : response.isIncomplete) {
+                        incompleteCompletionsCache === null || incompleteCompletionsCache === void 0 ? void 0 : incompleteCompletionsCache.set(response);
+                    }
+                    return response;
                 case 1 /* JsDocTagName */:
                     // If the current position is a jsDoc tag name, only tag names should be provided for completion
                     return jsdocCompletionInfo(ts.JsDoc.getJSDocTagNameCompletions());
@@ -123762,6 +126547,48 @@
             }
         }
         Completions.getCompletionsAtPosition = getCompletionsAtPosition;
+        function continuePreviousIncompleteResponse(cache, file, location, program, host, preferences, cancellationToken) {
+            var _a;
+            var previousResponse = cache.get();
+            if (!previousResponse)
+                return undefined;
+            var lowerCaseTokenText = location.text.toLowerCase();
+            var exportMap = ts.getExportInfoMap(file, host, program, cancellationToken);
+            var checker = program.getTypeChecker();
+            var autoImportProvider = (_a = host.getPackageJsonAutoImportProvider) === null || _a === void 0 ? void 0 : _a.call(host);
+            var autoImportProviderChecker = autoImportProvider === null || autoImportProvider === void 0 ? void 0 : autoImportProvider.getTypeChecker();
+            var newEntries = resolvingModuleSpecifiers("continuePreviousIncompleteResponse", host, program, file, preferences, 
+            /*isForImportStatementCompletion*/ false, function (context) {
+                var entries = ts.mapDefined(previousResponse.entries, function (entry) {
+                    if (!entry.hasAction || !entry.source || !entry.data || entry.data.moduleSpecifier) {
+                        // Not an auto import or already resolved; keep as is
+                        return entry;
+                    }
+                    if (!charactersFuzzyMatchInString(entry.name, lowerCaseTokenText)) {
+                        // No longer matches typed characters; filter out
+                        return undefined;
+                    }
+                    var _a = ts.Debug.checkDefined(getAutoImportSymbolFromCompletionEntryData(entry.name, entry.data, program, host)), symbol = _a.symbol, origin = _a.origin;
+                    var info = exportMap.get(file.path, entry.name, symbol, origin.moduleSymbol.name, origin.isFromPackageJson ? autoImportProviderChecker : checker);
+                    var result = info && context.tryResolve(info, !ts.isExternalModuleNameRelative(ts.stripQuotes(origin.moduleSymbol.name)));
+                    if (!result)
+                        return entry;
+                    var newOrigin = __assign(__assign({}, origin), { kind: 32 /* ResolvedExport */, moduleSpecifier: result.moduleSpecifier });
+                    // Mutating for performance... feels sketchy but nobody else uses the cache,
+                    // so why bother allocating a bunch of new objects?
+                    entry.data = originToCompletionEntryData(newOrigin);
+                    entry.source = getSourceFromOrigin(newOrigin);
+                    entry.sourceDisplay = [ts.textPart(newOrigin.moduleSpecifier)];
+                    return entry;
+                });
+                if (!context.resolutionLimitExceeded()) {
+                    previousResponse.isIncomplete = undefined;
+                }
+                return entries;
+            });
+            previousResponse.entries = newEntries;
+            return previousResponse;
+        }
         function jsdocCompletionInfo(entries) {
             return { isGlobalCompletion: false, isMemberCompletion: false, isNewIdentifierLocation: false, entries: entries };
         }
@@ -123780,10 +126607,10 @@
         }
         function getOptionalReplacementSpan(location) {
             // StringLiteralLike locations are handled separately in stringCompletions.ts
-            return (location === null || location === void 0 ? void 0 : location.kind) === 78 /* Identifier */ ? ts.createTextSpanFromNode(location) : undefined;
+            return (location === null || location === void 0 ? void 0 : location.kind) === 79 /* Identifier */ ? ts.createTextSpanFromNode(location) : undefined;
         }
         function completionInfoFromData(sourceFile, typeChecker, compilerOptions, log, completionData, preferences) {
-            var symbols = completionData.symbols, completionKind = completionData.completionKind, isInSnippetScope = completionData.isInSnippetScope, isNewIdentifierLocation = completionData.isNewIdentifierLocation, location = completionData.location, propertyAccessToConvert = completionData.propertyAccessToConvert, keywordFilters = completionData.keywordFilters, literals = completionData.literals, symbolToOriginInfoMap = completionData.symbolToOriginInfoMap, recommendedCompletion = completionData.recommendedCompletion, isJsxInitializer = completionData.isJsxInitializer, isTypeOnlyLocation = completionData.isTypeOnlyLocation, isJsxIdentifierExpected = completionData.isJsxIdentifierExpected, importCompletionNode = completionData.importCompletionNode, insideJsDocTagTypeExpression = completionData.insideJsDocTagTypeExpression, symbolToSortTextMap = completionData.symbolToSortTextMap;
+            var symbols = completionData.symbols, completionKind = completionData.completionKind, isInSnippetScope = completionData.isInSnippetScope, isNewIdentifierLocation = completionData.isNewIdentifierLocation, location = completionData.location, propertyAccessToConvert = completionData.propertyAccessToConvert, keywordFilters = completionData.keywordFilters, literals = completionData.literals, symbolToOriginInfoMap = completionData.symbolToOriginInfoMap, recommendedCompletion = completionData.recommendedCompletion, isJsxInitializer = completionData.isJsxInitializer, isTypeOnlyLocation = completionData.isTypeOnlyLocation, isJsxIdentifierExpected = completionData.isJsxIdentifierExpected, importCompletionNode = completionData.importCompletionNode, insideJsDocTagTypeExpression = completionData.insideJsDocTagTypeExpression, symbolToSortTextIdMap = completionData.symbolToSortTextIdMap, hasUnresolvedAutoImports = completionData.hasUnresolvedAutoImports;
             // Verify if the file is JSX language variant
             if (ts.getLanguageVariant(sourceFile.scriptKind) === 1 /* JSX */) {
                 var completionInfo = getJsxClosingTagCompletion(location, sourceFile);
@@ -123794,7 +126621,7 @@
             var entries = [];
             if (isUncheckedFile(sourceFile, compilerOptions)) {
                 var uniqueNames = getCompletionEntriesFromSymbols(symbols, entries, 
-                /* contextToken */ undefined, location, sourceFile, typeChecker, compilerOptions.target, log, completionKind, preferences, compilerOptions, isTypeOnlyLocation, propertyAccessToConvert, isJsxIdentifierExpected, isJsxInitializer, importCompletionNode, recommendedCompletion, symbolToOriginInfoMap, symbolToSortTextMap);
+                /* contextToken */ undefined, location, sourceFile, typeChecker, compilerOptions.target, log, completionKind, preferences, compilerOptions, isTypeOnlyLocation, propertyAccessToConvert, isJsxIdentifierExpected, isJsxInitializer, importCompletionNode, recommendedCompletion, symbolToOriginInfoMap, symbolToSortTextIdMap);
                 getJSCompletionEntries(sourceFile, location.pos, uniqueNames, compilerOptions.target, entries); // TODO: GH#18217
             }
             else {
@@ -123802,7 +126629,7 @@
                     return undefined;
                 }
                 getCompletionEntriesFromSymbols(symbols, entries, 
-                /* contextToken */ undefined, location, sourceFile, typeChecker, compilerOptions.target, log, completionKind, preferences, compilerOptions, isTypeOnlyLocation, propertyAccessToConvert, isJsxIdentifierExpected, isJsxInitializer, importCompletionNode, recommendedCompletion, symbolToOriginInfoMap, symbolToSortTextMap);
+                /* contextToken */ undefined, location, sourceFile, typeChecker, compilerOptions.target, log, completionKind, preferences, compilerOptions, isTypeOnlyLocation, propertyAccessToConvert, isJsxIdentifierExpected, isJsxInitializer, importCompletionNode, recommendedCompletion, symbolToOriginInfoMap, symbolToSortTextIdMap);
             }
             if (keywordFilters !== 0 /* None */) {
                 var entryNames = new ts.Set(entries.map(function (e) { return e.name; }));
@@ -123819,6 +126646,7 @@
             }
             return {
                 isGlobalCompletion: isInSnippetScope,
+                isIncomplete: preferences.allowIncompleteCompletions && hasUnresolvedAutoImports ? true : undefined,
                 isMemberCompletion: isMemberCompletionKind(completionKind),
                 isNewIdentifierLocation: isNewIdentifierLocation,
                 optionalReplacementSpan: getOptionalReplacementSpan(location),
@@ -123842,12 +126670,12 @@
             // We wanna walk up the tree till we find a JSX closing element
             var jsxClosingElement = ts.findAncestor(location, function (node) {
                 switch (node.kind) {
-                    case 277 /* JsxClosingElement */:
+                    case 279 /* JsxClosingElement */:
                         return true;
                     case 43 /* SlashToken */:
                     case 31 /* GreaterThanToken */:
-                    case 78 /* Identifier */:
-                    case 202 /* PropertyAccessExpression */:
+                    case 79 /* Identifier */:
+                    case 204 /* PropertyAccessExpression */:
                         return false;
                     default:
                         return "quit";
@@ -123914,6 +126742,7 @@
             var data;
             var isSnippet;
             var sourceDisplay;
+            var hasAction;
             var insertQuestionDot = origin && originIsNullableMember(origin);
             var useBraces = origin && originIsSymbolMember(origin) || needsConvertPropertyAccess;
             if (origin && originIsThisType(origin)) {
@@ -123958,22 +126787,18 @@
                 replacementSpan = ts.createTextSpanFromBounds(propertyAccessToConvert.getStart(sourceFile), propertyAccessToConvert.end);
             }
             if (originIsResolvedExport(origin)) {
-                ts.Debug.assertIsDefined(importCompletionNode);
-                (_a = getInsertTextAndReplacementSpanForImportCompletion(name, importCompletionNode, origin, useSemicolons, options, preferences), insertText = _a.insertText, replacementSpan = _a.replacementSpan);
                 sourceDisplay = [ts.textPart(origin.moduleSpecifier)];
-                isSnippet = preferences.includeCompletionsWithSnippetText ? true : undefined;
+                if (importCompletionNode) {
+                    (_a = getInsertTextAndReplacementSpanForImportCompletion(name, importCompletionNode, origin, useSemicolons, options, preferences), insertText = _a.insertText, replacementSpan = _a.replacementSpan);
+                    isSnippet = preferences.includeCompletionsWithSnippetText ? true : undefined;
+                }
             }
             if (insertText !== undefined && !preferences.includeCompletionsWithInsertText) {
                 return undefined;
             }
             if (originIsExport(origin) || originIsResolvedExport(origin)) {
-                data = {
-                    exportName: origin.exportName,
-                    fileName: origin.fileName,
-                    ambientModuleName: origin.fileName ? undefined : ts.stripQuotes(origin.moduleSymbol.name),
-                    isPackageJsonImport: origin.isFromPackageJson ? true : undefined,
-                    moduleSpecifier: originIsResolvedExport(origin) ? origin.moduleSpecifier : undefined,
-                };
+                data = originToCompletionEntryData(origin);
+                hasAction = !importCompletionNode;
             }
             // TODO(drosen): Right now we just permit *all* semantic meanings when calling
             // 'getSymbolKind' which is permissible given that it is backwards compatible; but
@@ -123988,17 +126813,26 @@
                 kindModifiers: ts.SymbolDisplay.getSymbolModifiers(typeChecker, symbol),
                 sortText: sortText,
                 source: getSourceFromOrigin(origin),
-                hasAction: origin && originIsExport(origin) || undefined,
+                hasAction: hasAction ? true : undefined,
                 isRecommended: isRecommendedCompletionMatch(symbol, recommendedCompletion, typeChecker) || undefined,
                 insertText: insertText,
                 replacementSpan: replacementSpan,
                 sourceDisplay: sourceDisplay,
                 isSnippet: isSnippet,
                 isPackageJsonImport: originIsPackageJsonImport(origin) || undefined,
-                isImportStatementCompletion: originIsResolvedExport(origin) || undefined,
+                isImportStatementCompletion: !!importCompletionNode || undefined,
                 data: data,
             };
         }
+        function originToCompletionEntryData(origin) {
+            return {
+                exportName: origin.exportName,
+                fileName: origin.fileName,
+                ambientModuleName: origin.fileName ? undefined : ts.stripQuotes(origin.moduleSymbol.name),
+                isPackageJsonImport: origin.isFromPackageJson ? true : undefined,
+                moduleSpecifier: originIsResolvedExport(origin) ? origin.moduleSpecifier : undefined,
+            };
+        }
         function getInsertTextAndReplacementSpanForImportCompletion(name, importCompletionNode, origin, useSemicolons, options, preferences) {
             var sourceFile = importCompletionNode.getSourceFile();
             var replacementSpan = ts.createTextSpanFromNode(importCompletionNode, sourceFile);
@@ -124007,12 +126841,12 @@
                 origin.exportName === "export=" /* ExportEquals */ ? 2 /* ExportEquals */ :
                     0 /* Named */;
             var tabStop = preferences.includeCompletionsWithSnippetText ? "$1" : "";
-            var importKind = ts.codefix.getImportKind(sourceFile, exportKind, options);
+            var importKind = ts.codefix.getImportKind(sourceFile, exportKind, options, /*forceImportKeyword*/ true);
             var suffix = useSemicolons ? ";" : "";
             switch (importKind) {
                 case 3 /* CommonJS */: return { replacementSpan: replacementSpan, insertText: "import " + name + tabStop + " = require(" + quotedModuleSpecifier + ")" + suffix };
                 case 1 /* Default */: return { replacementSpan: replacementSpan, insertText: "import " + name + tabStop + " from " + quotedModuleSpecifier + suffix };
-                case 2 /* Namespace */: return { replacementSpan: replacementSpan, insertText: "import * as " + name + tabStop + " from " + quotedModuleSpecifier + suffix };
+                case 2 /* Namespace */: return { replacementSpan: replacementSpan, insertText: "import * as " + name + " from " + quotedModuleSpecifier + suffix };
                 case 0 /* Named */: return { replacementSpan: replacementSpan, insertText: "import { " + name + tabStop + " } from " + quotedModuleSpecifier + suffix };
             }
         }
@@ -124037,7 +126871,8 @@
                 return CompletionSource.ThisProperty;
             }
         }
-        function getCompletionEntriesFromSymbols(symbols, entries, contextToken, location, sourceFile, typeChecker, target, log, kind, preferences, compilerOptions, isTypeOnlyLocation, propertyAccessToConvert, jsxIdentifierExpected, isJsxInitializer, importCompletionNode, recommendedCompletion, symbolToOriginInfoMap, symbolToSortTextMap) {
+        function getCompletionEntriesFromSymbols(symbols, entries, contextToken, location, sourceFile, typeChecker, target, log, kind, preferences, compilerOptions, isTypeOnlyLocation, propertyAccessToConvert, jsxIdentifierExpected, isJsxInitializer, importCompletionNode, recommendedCompletion, symbolToOriginInfoMap, symbolToSortTextIdMap) {
+            var _a;
             var start = ts.timestamp();
             var variableDeclaration = getVariableDeclaration(location);
             var useSemicolons = ts.probablyUsesSemicolons(sourceFile);
@@ -124050,11 +126885,13 @@
                 var symbol = symbols[i];
                 var origin = symbolToOriginInfoMap === null || symbolToOriginInfoMap === void 0 ? void 0 : symbolToOriginInfoMap[i];
                 var info = getCompletionEntryDisplayNameForSymbol(symbol, target, origin, kind, !!jsxIdentifierExpected);
-                if (!info || uniques.get(info.name) || kind === 1 /* Global */ && symbolToSortTextMap && !shouldIncludeSymbol(symbol, symbolToSortTextMap)) {
+                if (!info || uniques.get(info.name) || kind === 1 /* Global */ && symbolToSortTextIdMap && !shouldIncludeSymbol(symbol, symbolToSortTextIdMap)) {
                     continue;
                 }
                 var name = info.name, needsConvertPropertyAccess = info.needsConvertPropertyAccess;
-                var entry = createCompletionEntry(symbol, symbolToSortTextMap && symbolToSortTextMap[ts.getSymbolId(symbol)] || SortText.LocationPriority, contextToken, location, sourceFile, typeChecker, name, needsConvertPropertyAccess, origin, recommendedCompletion, propertyAccessToConvert, isJsxInitializer, importCompletionNode, useSemicolons, compilerOptions, preferences);
+                var sortTextId = (_a = symbolToSortTextIdMap === null || symbolToSortTextIdMap === void 0 ? void 0 : symbolToSortTextIdMap[ts.getSymbolId(symbol)]) !== null && _a !== void 0 ? _a : 11 /* LocationPriority */;
+                var sortText = (isDeprecated(symbol, typeChecker) ? 8 /* DeprecatedOffset */ + sortTextId : sortTextId).toString();
+                var entry = createCompletionEntry(symbol, sortText, contextToken, location, sourceFile, typeChecker, name, needsConvertPropertyAccess, origin, recommendedCompletion, propertyAccessToConvert, isJsxInitializer, importCompletionNode, useSemicolons, compilerOptions, preferences);
                 if (!entry) {
                     continue;
                 }
@@ -124071,7 +126908,7 @@
                 has: function (name) { return uniques.has(name); },
                 add: function (name) { return uniques.set(name, true); },
             };
-            function shouldIncludeSymbol(symbol, symbolToSortTextMap) {
+            function shouldIncludeSymbol(symbol, symbolToSortTextIdMap) {
                 if (!ts.isSourceFile(location)) {
                     // export = /**/ here we want to get all meanings, so any symbol is ok
                     if (ts.isExportAssignment(location.parent)) {
@@ -124092,9 +126929,9 @@
                     // Auto Imports are not available for scripts so this conditional is always false
                     if (!!sourceFile.externalModuleIndicator
                         && !compilerOptions.allowUmdGlobalAccess
-                        && symbolToSortTextMap[ts.getSymbolId(symbol)] === SortText.GlobalsOrKeywords
-                        && (symbolToSortTextMap[ts.getSymbolId(symbolOrigin)] === SortText.AutoImportSuggestions
-                            || symbolToSortTextMap[ts.getSymbolId(symbolOrigin)] === SortText.LocationPriority)) {
+                        && symbolToSortTextIdMap[ts.getSymbolId(symbol)] === 15 /* GlobalsOrKeywords */
+                        && (symbolToSortTextIdMap[ts.getSymbolId(symbolOrigin)] === 16 /* AutoImportSuggestions */
+                            || symbolToSortTextIdMap[ts.getSymbolId(symbolOrigin)] === 11 /* LocationPriority */)) {
                         return false;
                     }
                     // Continue with origin symbol
@@ -124210,7 +127047,7 @@
                 }
                 case "symbol": {
                     var symbol = symbolCompletion.symbol, location = symbolCompletion.location, origin = symbolCompletion.origin, previousToken = symbolCompletion.previousToken;
-                    var _a = getCompletionEntryCodeActionsAndSourceDisplay(origin, symbol, program, typeChecker, host, compilerOptions, sourceFile, position, previousToken, formatContext, preferences, entryId.data), codeActions = _a.codeActions, sourceDisplay = _a.sourceDisplay;
+                    var _a = getCompletionEntryCodeActionsAndSourceDisplay(origin, symbol, program, host, compilerOptions, sourceFile, position, previousToken, formatContext, preferences, entryId.data), codeActions = _a.codeActions, sourceDisplay = _a.sourceDisplay;
                     return createCompletionDetailsForSymbol(symbol, typeChecker, sourceFile, location, cancellationToken, codeActions, sourceDisplay); // TODO: GH#18217
                 }
                 case "literal": {
@@ -124239,16 +127076,22 @@
             return { name: name, kindModifiers: kindModifiers, kind: kind, displayParts: displayParts, documentation: documentation, tags: tags, codeActions: codeActions, source: source, sourceDisplay: source };
         }
         Completions.createCompletionDetails = createCompletionDetails;
-        function getCompletionEntryCodeActionsAndSourceDisplay(origin, symbol, program, checker, host, compilerOptions, sourceFile, position, previousToken, formatContext, preferences, data) {
+        function getCompletionEntryCodeActionsAndSourceDisplay(origin, symbol, program, host, compilerOptions, sourceFile, position, previousToken, formatContext, preferences, data) {
             if (data === null || data === void 0 ? void 0 : data.moduleSpecifier) {
-                return { codeActions: undefined, sourceDisplay: [ts.textPart(data.moduleSpecifier)] };
+                var _a = getRelevantTokens(position, sourceFile), contextToken = _a.contextToken, previousToken_1 = _a.previousToken;
+                if (previousToken_1 && getImportCompletionNode(contextToken || previousToken_1)) {
+                    // Import statement completion: 'import c|'
+                    return { codeActions: undefined, sourceDisplay: [ts.textPart(data.moduleSpecifier)] };
+                }
             }
-            if (!origin || !originIsExport(origin)) {
+            if (!origin || !(originIsExport(origin) || originIsResolvedExport(origin))) {
                 return { codeActions: undefined, sourceDisplay: undefined };
             }
+            var checker = origin.isFromPackageJson ? host.getPackageJsonAutoImportProvider().getTypeChecker() : program.getTypeChecker();
             var moduleSymbol = origin.moduleSymbol;
             var exportedSymbol = checker.getMergedSymbol(ts.skipAlias(symbol.exportSymbol || symbol, checker));
-            var _a = ts.codefix.getImportCompletionAction(exportedSymbol, moduleSymbol, sourceFile, ts.getNameForExportedSymbol(symbol, compilerOptions.target), host, program, formatContext, previousToken && ts.isIdentifier(previousToken) ? previousToken.getStart(sourceFile) : position, preferences), moduleSpecifier = _a.moduleSpecifier, codeAction = _a.codeAction;
+            var _b = ts.codefix.getImportCompletionAction(exportedSymbol, moduleSymbol, sourceFile, ts.getNameForExportedSymbol(symbol, compilerOptions.target), host, program, formatContext, previousToken && ts.isIdentifier(previousToken) ? previousToken.getStart(sourceFile) : position, preferences), moduleSpecifier = _b.moduleSpecifier, codeAction = _b.codeAction;
+            ts.Debug.assert(!(data === null || data === void 0 ? void 0 : data.moduleSpecifier) || moduleSpecifier === data.moduleSpecifier);
             return { sourceDisplay: [ts.textPart(moduleSpecifier)], codeActions: [codeAction] };
         }
         function getCompletionEntrySymbol(program, log, sourceFile, position, entryId, host, preferences) {
@@ -124286,25 +127129,25 @@
         function getContextualType(previousToken, position, sourceFile, checker) {
             var parent = previousToken.parent;
             switch (previousToken.kind) {
-                case 78 /* Identifier */:
+                case 79 /* Identifier */:
                     return ts.getContextualTypeFromParent(previousToken, checker);
-                case 62 /* EqualsToken */:
+                case 63 /* EqualsToken */:
                     switch (parent.kind) {
-                        case 250 /* VariableDeclaration */:
+                        case 252 /* VariableDeclaration */:
                             return checker.getContextualType(parent.initializer); // TODO: GH#18217
-                        case 217 /* BinaryExpression */:
+                        case 219 /* BinaryExpression */:
                             return checker.getTypeAtLocation(parent.left);
-                        case 281 /* JsxAttribute */:
+                        case 283 /* JsxAttribute */:
                             return checker.getContextualTypeForJsxAttribute(parent);
                         default:
                             return undefined;
                     }
-                case 102 /* NewKeyword */:
+                case 103 /* NewKeyword */:
                     return checker.getContextualType(parent);
-                case 81 /* CaseKeyword */:
+                case 82 /* CaseKeyword */:
                     return ts.getSwitchedType(ts.cast(parent, ts.isCaseClause), checker);
                 case 18 /* OpenBraceToken */:
-                    return ts.isJsxExpression(parent) && parent.parent.kind !== 274 /* JsxElement */ ? checker.getContextualTypeForJsxAttribute(parent.parent) : undefined;
+                    return ts.isJsxExpression(parent) && parent.parent.kind !== 276 /* JsxElement */ ? checker.getContextualTypeForJsxAttribute(parent.parent) : undefined;
                 default:
                     var argInfo = ts.SignatureHelp.getArgumentInfoForCompletions(previousToken, position, sourceFile);
                     return argInfo ?
@@ -124324,9 +127167,9 @@
         }
         function isModuleSymbol(symbol) {
             var _a;
-            return !!((_a = symbol.declarations) === null || _a === void 0 ? void 0 : _a.some(function (d) { return d.kind === 298 /* SourceFile */; }));
+            return !!((_a = symbol.declarations) === null || _a === void 0 ? void 0 : _a.some(function (d) { return d.kind === 300 /* SourceFile */; }));
         }
-        function getCompletionData(program, log, sourceFile, isUncheckedFile, position, preferences, detailsEntryId, host) {
+        function getCompletionData(program, log, sourceFile, isUncheckedFile, position, preferences, detailsEntryId, host, cancellationToken) {
             var typeChecker = program.getTypeChecker();
             var start = ts.timestamp();
             var currentToken = ts.getTokenAtPosition(sourceFile, position); // TODO: GH#15853
@@ -124375,11 +127218,11 @@
                     if (tag.tagName.pos <= position && position <= tag.tagName.end) {
                         return { kind: 1 /* JsDocTagName */ };
                     }
-                    if (isTagWithTypeExpression(tag) && tag.typeExpression && tag.typeExpression.kind === 302 /* JSDocTypeExpression */) {
+                    if (isTagWithTypeExpression(tag) && tag.typeExpression && tag.typeExpression.kind === 304 /* JSDocTypeExpression */) {
                         currentToken = ts.getTokenAtPosition(sourceFile, position);
                         if (!currentToken ||
                             (!ts.isDeclarationName(currentToken) &&
-                                (currentToken.parent.kind !== 337 /* JSDocPropertyTag */ ||
+                                (currentToken.parent.kind !== 342 /* JSDocPropertyTag */ ||
                                     currentToken.parent.name !== currentToken))) {
                             // Use as type location if inside tag's type expression
                             insideJsDocTagTypeExpression = isCurrentlyEditingNode(tag.typeExpression);
@@ -124397,18 +127240,12 @@
                 }
             }
             start = ts.timestamp();
-            var previousToken = ts.findPrecedingToken(position, sourceFile, /*startNode*/ undefined); // TODO: GH#18217
-            log("getCompletionData: Get previous token 1: " + (ts.timestamp() - start));
             // The decision to provide completion depends on the contextToken, which is determined through the previousToken.
             // Note: 'previousToken' (and thus 'contextToken') can be undefined if we are the beginning of the file
-            var contextToken = previousToken;
-            // Check if the caret is at the end of an identifier; this is a partial identifier that we want to complete: e.g. a.toS|
-            // Skip this partial identifier and adjust the contextToken to the token that precedes it.
-            if (contextToken && position <= contextToken.end && (ts.isMemberName(contextToken) || ts.isKeyword(contextToken.kind))) {
-                var start_1 = ts.timestamp();
-                contextToken = ts.findPrecedingToken(contextToken.getFullStart(), sourceFile, /*startNode*/ undefined); // TODO: GH#18217
-                log("getCompletionData: Get previous token 2: " + (ts.timestamp() - start_1));
-            }
+            var tokens = getRelevantTokens(position, sourceFile);
+            var previousToken = tokens.previousToken;
+            var contextToken = tokens.contextToken;
+            log("getCompletionData: Get previous token: " + (ts.timestamp() - start));
             // Find the node where completion is requested on.
             // Also determine whether we are trying to complete with members of that node
             // or attributes of a JSX tag.
@@ -124424,8 +127261,8 @@
             var location = ts.getTouchingPropertyName(sourceFile, position);
             if (contextToken) {
                 var importCompletionCandidate = getImportCompletionNode(contextToken);
-                if (importCompletionCandidate === 153 /* FromKeyword */) {
-                    return { kind: 4 /* Keywords */, keywords: [153 /* FromKeyword */] };
+                if (importCompletionCandidate === 154 /* FromKeyword */) {
+                    return { kind: 4 /* Keywords */, keywords: [154 /* FromKeyword */] };
                 }
                 // Import statement completions use `insertText`, and also require the `data` property of `CompletionEntryIdentifier`
                 // added in TypeScript 4.3 to be sent back from the client during `getCompletionEntryDetails`. Since this feature
@@ -124444,7 +127281,7 @@
                     isRightOfDot = contextToken.kind === 24 /* DotToken */;
                     isRightOfQuestionDot = contextToken.kind === 28 /* QuestionDotToken */;
                     switch (parent.kind) {
-                        case 202 /* PropertyAccessExpression */:
+                        case 204 /* PropertyAccessExpression */:
                             propertyAccessToConvert = parent;
                             node = propertyAccessToConvert.expression;
                             if ((ts.isCallExpression(node) || ts.isFunctionLike(node)) &&
@@ -124457,16 +127294,19 @@
                                 return undefined;
                             }
                             break;
-                        case 158 /* QualifiedName */:
+                        case 159 /* QualifiedName */:
                             node = parent.left;
                             break;
-                        case 257 /* ModuleDeclaration */:
+                        case 259 /* ModuleDeclaration */:
                             node = parent.name;
                             break;
-                        case 196 /* ImportType */:
-                        case 227 /* MetaProperty */:
+                        case 198 /* ImportType */:
                             node = parent;
                             break;
+                        case 229 /* MetaProperty */:
+                            node = parent.getFirstToken(sourceFile);
+                            ts.Debug.assert(node.kind === 100 /* ImportKeyword */ || node.kind === 103 /* NewKeyword */);
+                            break;
                         default:
                             // There is nothing that precedes the dot, so this likely just a stray character
                             // or leading into a '...' token. Just bail out instead.
@@ -124477,7 +127317,7 @@
                     // <UI.Test /* completion position */ />
                     // If the tagname is a property access expression, we will then walk up to the top most of property access expression.
                     // Then, try to get a JSX container and its associated attributes type.
-                    if (parent && parent.kind === 202 /* PropertyAccessExpression */) {
+                    if (parent && parent.kind === 204 /* PropertyAccessExpression */) {
                         contextToken = parent;
                         parent = parent.parent;
                     }
@@ -124485,45 +127325,46 @@
                     if (currentToken.parent === location) {
                         switch (currentToken.kind) {
                             case 31 /* GreaterThanToken */:
-                                if (currentToken.parent.kind === 274 /* JsxElement */ || currentToken.parent.kind === 276 /* JsxOpeningElement */) {
+                                if (currentToken.parent.kind === 276 /* JsxElement */ || currentToken.parent.kind === 278 /* JsxOpeningElement */) {
                                     location = currentToken;
                                 }
                                 break;
                             case 43 /* SlashToken */:
-                                if (currentToken.parent.kind === 275 /* JsxSelfClosingElement */) {
+                                if (currentToken.parent.kind === 277 /* JsxSelfClosingElement */) {
                                     location = currentToken;
                                 }
                                 break;
                         }
                     }
                     switch (parent.kind) {
-                        case 277 /* JsxClosingElement */:
+                        case 279 /* JsxClosingElement */:
                             if (contextToken.kind === 43 /* SlashToken */) {
                                 isStartingCloseTag = true;
                                 location = contextToken;
                             }
                             break;
-                        case 217 /* BinaryExpression */:
+                        case 219 /* BinaryExpression */:
                             if (!binaryExpressionMayBeOpenTag(parent)) {
                                 break;
                             }
                         // falls through
-                        case 275 /* JsxSelfClosingElement */:
-                        case 274 /* JsxElement */:
-                        case 276 /* JsxOpeningElement */:
+                        case 277 /* JsxSelfClosingElement */:
+                        case 276 /* JsxElement */:
+                        case 278 /* JsxOpeningElement */:
                             isJsxIdentifierExpected = true;
                             if (contextToken.kind === 29 /* LessThanToken */) {
                                 isRightOfOpenTag = true;
                                 location = contextToken;
                             }
                             break;
-                        case 284 /* JsxExpression */:
+                        case 286 /* JsxExpression */:
+                        case 285 /* JsxSpreadAttribute */:
                             // For `<div foo={true} [||] ></div>`, `parent` will be `{true}` and `previousToken` will be `}`
                             if (previousToken.kind === 19 /* CloseBraceToken */ && currentToken.kind === 31 /* GreaterThanToken */) {
                                 isJsxIdentifierExpected = true;
                             }
                             break;
-                        case 281 /* JsxAttribute */:
+                        case 283 /* JsxAttribute */:
                             // For `<div className="x" [||] ></div>`, `parent` will be JsxAttribute and `previousToken` will be its initializer
                             if (parent.initializer === previousToken &&
                                 previousToken.end < position) {
@@ -124531,16 +127372,16 @@
                                 break;
                             }
                             switch (previousToken.kind) {
-                                case 62 /* EqualsToken */:
+                                case 63 /* EqualsToken */:
                                     isJsxInitializer = true;
                                     break;
-                                case 78 /* Identifier */:
+                                case 79 /* Identifier */:
                                     isJsxIdentifierExpected = true;
                                     // For `<div x=[|f/**/|]`, `parent` will be `x` and `previousToken.parent` will be `f` (which is its own JsxAttribute)
                                     // Note for `<div someBool f>` we don't want to treat this as a jsx inializer, instead it's the attribute name.
                                     if (parent !== previousToken.parent &&
                                         !parent.initializer &&
-                                        ts.findChildOfKind(parent, 62 /* EqualsToken */, sourceFile)) {
+                                        ts.findChildOfKind(parent, 63 /* EqualsToken */, sourceFile)) {
                                         isJsxInitializer = previousToken;
                                     }
                             }
@@ -124552,13 +127393,14 @@
             var completionKind = 5 /* None */;
             var isNewIdentifierLocation = false;
             var isNonContextualObjectLiteral = false;
+            var hasUnresolvedAutoImports = false;
             var keywordFilters = 0 /* None */;
             // This also gets mutated in nested-functions after the return
             var symbols = [];
             var symbolToOriginInfoMap = [];
-            var symbolToSortTextMap = [];
+            var symbolToSortTextIdMap = [];
             var seenPropertySymbols = new ts.Map();
-            var isTypeOnly = isTypeOnlyCompletion();
+            var isTypeOnlyLocation = isTypeOnlyCompletion();
             var getModuleSpecifierResolutionHost = ts.memoizeOne(function (isFromPackageJson) {
                 return ts.createModuleSpecifierResolutionHost(isFromPackageJson ? host.getPackageJsonAutoImportProvider() : program, host);
             });
@@ -124608,18 +127450,19 @@
                 previousToken: previousToken,
                 isJsxInitializer: isJsxInitializer,
                 insideJsDocTagTypeExpression: insideJsDocTagTypeExpression,
-                symbolToSortTextMap: symbolToSortTextMap,
-                isTypeOnlyLocation: isTypeOnly,
+                symbolToSortTextIdMap: symbolToSortTextIdMap,
+                isTypeOnlyLocation: isTypeOnlyLocation,
                 isJsxIdentifierExpected: isJsxIdentifierExpected,
                 importCompletionNode: importCompletionNode,
+                hasUnresolvedAutoImports: hasUnresolvedAutoImports,
             };
             function isTagWithTypeExpression(tag) {
                 switch (tag.kind) {
-                    case 330 /* JSDocParameterTag */:
-                    case 337 /* JSDocPropertyTag */:
-                    case 331 /* JSDocReturnTag */:
-                    case 333 /* JSDocTypeTag */:
-                    case 335 /* JSDocTypedefTag */:
+                    case 335 /* JSDocParameterTag */:
+                    case 342 /* JSDocPropertyTag */:
+                    case 336 /* JSDocReturnTag */:
+                    case 338 /* JSDocTypeTag */:
+                    case 340 /* JSDocTypedefTag */:
                         return true;
                     default:
                         return false;
@@ -124646,7 +127489,7 @@
                             // Extract module or enum members
                             var exportedSymbols = typeChecker.getExportsOfModule(symbol);
                             ts.Debug.assertEachIsDefined(exportedSymbols, "getExportsOfModule() should all be defined");
-                            var isValidValueAccess_1 = function (symbol) { return typeChecker.isValidPropertyAccess(isImportType ? node : (node.parent), symbol.name); };
+                            var isValidValueAccess_1 = function (symbol) { return typeChecker.isValidPropertyAccess(isImportType ? node : node.parent, symbol.name); };
                             var isValidTypeAccess_1 = function (symbol) { return symbolCanBeReferencedAtTypeLocation(symbol, typeChecker); };
                             var isValidAccess = isNamespaceName
                                 // At `namespace N.M/**/`, if this is the only declaration of `M`, don't include `M` as a completion.
@@ -124664,7 +127507,7 @@
                             // If the module is merged with a value, we must get the type of the class and add its propertes (for inherited static methods).
                             if (!isTypeLocation &&
                                 symbol.declarations &&
-                                symbol.declarations.some(function (d) { return d.kind !== 298 /* SourceFile */ && d.kind !== 257 /* ModuleDeclaration */ && d.kind !== 256 /* EnumDeclaration */; })) {
+                                symbol.declarations.some(function (d) { return d.kind !== 300 /* SourceFile */ && d.kind !== 259 /* ModuleDeclaration */ && d.kind !== 258 /* EnumDeclaration */; })) {
                                 var type = typeChecker.getTypeOfSymbolAtLocation(symbol, node).getNonOptionalType();
                                 var insertQuestionDot = false;
                                 if (type.isNullableType()) {
@@ -124684,12 +127527,13 @@
                         }
                     }
                 }
-                if (ts.isMetaProperty(node) && (node.keywordToken === 102 /* NewKeyword */ || node.keywordToken === 99 /* ImportKeyword */) && contextToken === node.getChildAt(1)) {
-                    var completion = (node.keywordToken === 102 /* NewKeyword */) ? "target" : "meta";
-                    symbols.push(typeChecker.createSymbol(4 /* Property */, ts.escapeLeadingUnderscores(completion)));
-                    return;
-                }
                 if (!isTypeLocation) {
+                    // GH#39946. Pulling on the type of a node inside of a function with a contextual `this` parameter can result in a circularity
+                    // if the `node` is part of the exprssion of a `yield` or `return`. This circularity doesn't exist at compile time because
+                    // we will check (and cache) the type of `this` *before* checking the type of the node.
+                    var container = ts.getThisContainer(node, /*includeArrowFunctions*/ false);
+                    if (!ts.isSourceFile(container) && container.parent)
+                        typeChecker.getTypeAtLocation(container);
                     var type = typeChecker.getTypeAtLocation(node).getNonOptionalType();
                     var insertQuestionDot = false;
                     if (type.isNullableType()) {
@@ -124711,7 +127555,7 @@
                 if (isRightOfQuestionDot && ts.some(type.getCallSignatures())) {
                     isNewIdentifierLocation = true;
                 }
-                var propertyAccess = node.kind === 196 /* ImportType */ ? node : node.parent;
+                var propertyAccess = node.kind === 198 /* ImportType */ ? node : node.parent;
                 if (isUncheckedFile) {
                     // In javascript files, for union types, we don't just get the members that
                     // the individual types have in common, we also include all the members that
@@ -124782,7 +127626,7 @@
                 }
                 function addSymbolSortInfo(symbol) {
                     if (isStaticProperty(symbol)) {
-                        symbolToSortTextMap[ts.getSymbolId(symbol)] = SortText.LocalDeclarationPriority;
+                        symbolToSortTextIdMap[ts.getSymbolId(symbol)] = 10 /* LocalDeclarationPriority */;
                     }
                 }
                 function addSymbolOriginInfo(symbol) {
@@ -124842,7 +127686,8 @@
             function tryGetImportCompletionSymbols() {
                 if (!importCompletionNode)
                     return 0 /* Continue */;
-                collectAutoImports(/*resolveModuleSpecifiers*/ true);
+                isNewIdentifierLocation = true;
+                collectAutoImports();
                 return 1 /* Success */;
             }
             function getGlobalCompletions() {
@@ -124883,30 +127728,30 @@
                     position;
                 var scopeNode = getScopeNode(contextToken, adjustedPosition, sourceFile) || sourceFile;
                 isInSnippetScope = isSnippetScope(scopeNode);
-                var symbolMeanings = (isTypeOnly ? 0 /* None */ : 111551 /* Value */) | 788968 /* Type */ | 1920 /* Namespace */ | 2097152 /* Alias */;
+                var symbolMeanings = (isTypeOnlyLocation ? 0 /* None */ : 111551 /* Value */) | 788968 /* Type */ | 1920 /* Namespace */ | 2097152 /* Alias */;
                 symbols = ts.concatenate(symbols, typeChecker.getSymbolsInScope(scopeNode, symbolMeanings));
                 ts.Debug.assertEachIsDefined(symbols, "getSymbolsInScope() should all be defined");
                 for (var _i = 0, symbols_1 = symbols; _i < symbols_1.length; _i++) {
                     var symbol = symbols_1[_i];
                     if (!typeChecker.isArgumentsSymbol(symbol) &&
                         !ts.some(symbol.declarations, function (d) { return d.getSourceFile() === sourceFile; })) {
-                        symbolToSortTextMap[ts.getSymbolId(symbol)] = SortText.GlobalsOrKeywords;
+                        symbolToSortTextIdMap[ts.getSymbolId(symbol)] = 15 /* GlobalsOrKeywords */;
                     }
                 }
                 // Need to insert 'this.' before properties of `this` type, so only do that if `includeInsertTextCompletions`
-                if (preferences.includeCompletionsWithInsertText && scopeNode.kind !== 298 /* SourceFile */) {
+                if (preferences.includeCompletionsWithInsertText && scopeNode.kind !== 300 /* SourceFile */) {
                     var thisType = typeChecker.tryGetThisTypeAt(scopeNode, /*includeGlobalThis*/ false);
                     if (thisType && !isProbablyGlobalType(thisType, sourceFile, typeChecker)) {
                         for (var _a = 0, _b = getPropertiesForCompletion(thisType, typeChecker); _a < _b.length; _a++) {
                             var symbol = _b[_a];
                             symbolToOriginInfoMap[symbols.length] = { kind: 1 /* ThisType */ };
                             symbols.push(symbol);
-                            symbolToSortTextMap[ts.getSymbolId(symbol)] = SortText.SuggestedClassMembers;
+                            symbolToSortTextIdMap[ts.getSymbolId(symbol)] = 14 /* SuggestedClassMembers */;
                         }
                     }
                 }
-                collectAutoImports(/*resolveModuleSpecifier*/ false);
-                if (isTypeOnly) {
+                collectAutoImports();
+                if (isTypeOnlyLocation) {
                     keywordFilters = contextToken && ts.isAssertionExpression(contextToken.parent)
                         ? 6 /* TypeAssertionKeywords */
                         : 7 /* TypeKeywords */;
@@ -124933,10 +127778,10 @@
             }
             function isSnippetScope(scopeNode) {
                 switch (scopeNode.kind) {
-                    case 298 /* SourceFile */:
-                    case 219 /* TemplateExpression */:
-                    case 284 /* JsxExpression */:
-                    case 231 /* Block */:
+                    case 300 /* SourceFile */:
+                    case 221 /* TemplateExpression */:
+                    case 286 /* JsxExpression */:
+                    case 233 /* Block */:
                         return true;
                     default:
                         return ts.isStatement(scopeNode);
@@ -124951,129 +127796,109 @@
             }
             function isContextTokenValueLocation(contextToken) {
                 return contextToken &&
-                    ((contextToken.kind === 111 /* TypeOfKeyword */ &&
-                        (contextToken.parent.kind === 177 /* TypeQuery */ || ts.isTypeOfExpression(contextToken.parent))) ||
-                        (contextToken.kind === 127 /* AssertsKeyword */ && contextToken.parent.kind === 173 /* TypePredicate */));
+                    ((contextToken.kind === 112 /* TypeOfKeyword */ &&
+                        (contextToken.parent.kind === 179 /* TypeQuery */ || ts.isTypeOfExpression(contextToken.parent))) ||
+                        (contextToken.kind === 128 /* AssertsKeyword */ && contextToken.parent.kind === 175 /* TypePredicate */));
             }
             function isContextTokenTypeLocation(contextToken) {
                 if (contextToken) {
                     var parentKind = contextToken.parent.kind;
                     switch (contextToken.kind) {
                         case 58 /* ColonToken */:
-                            return parentKind === 164 /* PropertyDeclaration */ ||
-                                parentKind === 163 /* PropertySignature */ ||
-                                parentKind === 161 /* Parameter */ ||
-                                parentKind === 250 /* VariableDeclaration */ ||
+                            return parentKind === 165 /* PropertyDeclaration */ ||
+                                parentKind === 164 /* PropertySignature */ ||
+                                parentKind === 162 /* Parameter */ ||
+                                parentKind === 252 /* VariableDeclaration */ ||
                                 ts.isFunctionLikeKind(parentKind);
-                        case 62 /* EqualsToken */:
-                            return parentKind === 255 /* TypeAliasDeclaration */;
-                        case 126 /* AsKeyword */:
-                            return parentKind === 225 /* AsExpression */;
+                        case 63 /* EqualsToken */:
+                            return parentKind === 257 /* TypeAliasDeclaration */;
+                        case 127 /* AsKeyword */:
+                            return parentKind === 227 /* AsExpression */;
                         case 29 /* LessThanToken */:
-                            return parentKind === 174 /* TypeReference */ ||
-                                parentKind === 207 /* TypeAssertionExpression */;
-                        case 93 /* ExtendsKeyword */:
-                            return parentKind === 160 /* TypeParameter */;
+                            return parentKind === 176 /* TypeReference */ ||
+                                parentKind === 209 /* TypeAssertionExpression */;
+                        case 94 /* ExtendsKeyword */:
+                            return parentKind === 161 /* TypeParameter */;
                     }
                 }
                 return false;
             }
-            /** Mutates `symbols`, `symbolToOriginInfoMap`, and `symbolToSortTextMap` */
-            function collectAutoImports(resolveModuleSpecifiers) {
-                var _a, _b, _c, _d, _e;
+            /** Mutates `symbols`, `symbolToOriginInfoMap`, and `symbolToSortTextIdMap` */
+            function collectAutoImports() {
+                var _a, _b;
                 if (!shouldOfferImportCompletions())
                     return;
-                ts.Debug.assert(!(detailsEntryId === null || detailsEntryId === void 0 ? void 0 : detailsEntryId.data));
-                var start = ts.timestamp();
+                ts.Debug.assert(!(detailsEntryId === null || detailsEntryId === void 0 ? void 0 : detailsEntryId.data), "Should not run 'collectAutoImports' when faster path is available via `data`");
+                if (detailsEntryId && !detailsEntryId.source) {
+                    // Asking for completion details for an item that is not an auto-import
+                    return;
+                }
                 var moduleSpecifierCache = (_a = host.getModuleSpecifierCache) === null || _a === void 0 ? void 0 : _a.call(host);
-                (_b = host.log) === null || _b === void 0 ? void 0 : _b.call(host, "collectAutoImports: starting, " + (resolveModuleSpecifiers ? "" : "not ") + "resolving module specifiers");
-                if (moduleSpecifierCache) {
-                    (_c = host.log) === null || _c === void 0 ? void 0 : _c.call(host, "collectAutoImports: module specifier cache size: " + moduleSpecifierCache.count());
-                }
                 var lowerCaseTokenText = previousToken && ts.isIdentifier(previousToken) ? previousToken.text.toLowerCase() : "";
-                var exportInfo = ts.codefix.getSymbolToExportInfoMap(sourceFile, host, program);
-                var packageJsonAutoImportProvider = (_d = host.getPackageJsonAutoImportProvider) === null || _d === void 0 ? void 0 : _d.call(host);
-                var packageJsonFilter = detailsEntryId ? undefined : ts.createPackageJsonImportFilter(sourceFile, host);
-                exportInfo.forEach(function (info, key) {
-                    var symbolName = key.substring(0, key.indexOf("|"));
-                    if (!detailsEntryId && ts.isStringANonContextualKeyword(symbolName))
-                        return;
-                    var isCompletionDetailsMatch = detailsEntryId && ts.some(info, function (i) { return detailsEntryId.source === ts.stripQuotes(i.moduleSymbol.name); });
-                    if (isCompletionDetailsMatch || isNameMatch(symbolName)) {
-                        // If we don't need to resolve module specifiers, we can use any re-export that is importable at all
-                        // (We need to ensure that at least one is importable to show a completion.)
-                        var _a = resolveModuleSpecifiers
-                            ? ts.codefix.getModuleSpecifierForBestExportInfo(info, sourceFile, program, host, preferences)
-                            : { moduleSpecifier: undefined, exportInfo: ts.find(info, isImportableExportInfo) }, moduleSpecifier = _a.moduleSpecifier, exportInfo_1 = _a.exportInfo;
-                        if (!exportInfo_1)
+                var exportInfo = ts.getExportInfoMap(sourceFile, host, program, cancellationToken);
+                var packageJsonAutoImportProvider = (_b = host.getPackageJsonAutoImportProvider) === null || _b === void 0 ? void 0 : _b.call(host);
+                var packageJsonFilter = detailsEntryId ? undefined : ts.createPackageJsonImportFilter(sourceFile, preferences, host);
+                resolvingModuleSpecifiers("collectAutoImports", host, program, sourceFile, preferences, !!importCompletionNode, function (context) {
+                    exportInfo.forEach(sourceFile.path, function (info, symbolName, isFromAmbientModule) {
+                        if (!ts.isIdentifierText(symbolName, ts.getEmitScriptTarget(host.getCompilationSettings())))
                             return;
-                        var moduleFile = ts.tryCast(exportInfo_1.moduleSymbol.valueDeclaration, ts.isSourceFile);
-                        var isDefaultExport = exportInfo_1.exportKind === 1 /* Default */;
-                        var symbol = isDefaultExport && ts.getLocalSymbolForExportDefault(exportInfo_1.symbol) || exportInfo_1.symbol;
-                        pushAutoImportSymbol(symbol, {
-                            kind: resolveModuleSpecifiers ? 32 /* ResolvedExport */ : 4 /* Export */,
-                            moduleSpecifier: moduleSpecifier,
-                            symbolName: symbolName,
-                            exportName: exportInfo_1.exportKind === 2 /* ExportEquals */ ? "export=" /* ExportEquals */ : exportInfo_1.symbol.name,
-                            fileName: moduleFile === null || moduleFile === void 0 ? void 0 : moduleFile.fileName,
-                            isDefaultExport: isDefaultExport,
-                            moduleSymbol: exportInfo_1.moduleSymbol,
-                            isFromPackageJson: exportInfo_1.isFromPackageJson,
-                        });
-                    }
+                        if (!detailsEntryId && ts.isStringANonContextualKeyword(symbolName))
+                            return;
+                        // `targetFlags` should be the same for each `info`
+                        if (!isTypeOnlyLocation && !importCompletionNode && !(info[0].targetFlags & 111551 /* Value */))
+                            return;
+                        if (isTypeOnlyLocation && !(info[0].targetFlags & (1536 /* Module */ | 788968 /* Type */)))
+                            return;
+                        var isCompletionDetailsMatch = detailsEntryId && ts.some(info, function (i) { return detailsEntryId.source === ts.stripQuotes(i.moduleSymbol.name); });
+                        if (isCompletionDetailsMatch || !detailsEntryId && charactersFuzzyMatchInString(symbolName, lowerCaseTokenText)) {
+                            var defaultExportInfo = ts.find(info, isImportableExportInfo);
+                            if (!defaultExportInfo) {
+                                return;
+                            }
+                            // If we don't need to resolve module specifiers, we can use any re-export that is importable at all
+                            // (We need to ensure that at least one is importable to show a completion.)
+                            var _a = context.tryResolve(info, isFromAmbientModule) || {}, _b = _a.exportInfo, exportInfo_1 = _b === void 0 ? defaultExportInfo : _b, moduleSpecifier = _a.moduleSpecifier;
+                            var isDefaultExport = exportInfo_1.exportKind === 1 /* Default */;
+                            var symbol = isDefaultExport && ts.getLocalSymbolForExportDefault(exportInfo_1.symbol) || exportInfo_1.symbol;
+                            pushAutoImportSymbol(symbol, {
+                                kind: moduleSpecifier ? 32 /* ResolvedExport */ : 4 /* Export */,
+                                moduleSpecifier: moduleSpecifier,
+                                symbolName: symbolName,
+                                exportName: exportInfo_1.exportKind === 2 /* ExportEquals */ ? "export=" /* ExportEquals */ : exportInfo_1.symbol.name,
+                                fileName: exportInfo_1.moduleFileName,
+                                isDefaultExport: isDefaultExport,
+                                moduleSymbol: exportInfo_1.moduleSymbol,
+                                isFromPackageJson: exportInfo_1.isFromPackageJson,
+                            });
+                        }
+                    });
+                    hasUnresolvedAutoImports = context.resolutionLimitExceeded();
                 });
-                (_e = host.log) === null || _e === void 0 ? void 0 : _e.call(host, "collectAutoImports: done in " + (ts.timestamp() - start) + " ms");
-                function isNameMatch(symbolName) {
-                    var lowerCaseSymbolName = symbolName.toLowerCase();
-                    if (resolveModuleSpecifiers && lowerCaseTokenText) {
-                        // Use a more restrictive filter if resolving module specifiers since resolving module specifiers is expensive.
-                        return lowerCaseTokenText[0] === lowerCaseSymbolName[0] && stringContainsCharactersInOrder(lowerCaseSymbolName, lowerCaseTokenText);
-                    }
-                    return stringContainsCharactersInOrder(lowerCaseSymbolName, lowerCaseTokenText);
-                }
                 function isImportableExportInfo(info) {
                     var moduleFile = ts.tryCast(info.moduleSymbol.valueDeclaration, ts.isSourceFile);
                     if (!moduleFile) {
+                        var moduleName = ts.stripQuotes(info.moduleSymbol.name);
+                        if (ts.JsTyping.nodeCoreModules.has(moduleName) && ts.startsWith(moduleName, "node:") !== ts.shouldUseUriStyleNodeCoreModules(sourceFile, program)) {
+                            return false;
+                        }
                         return packageJsonFilter
                             ? packageJsonFilter.allowsImportingAmbientModule(info.moduleSymbol, getModuleSpecifierResolutionHost(info.isFromPackageJson))
                             : true;
                     }
-                    return ts.isImportableFile(info.isFromPackageJson ? packageJsonAutoImportProvider : program, sourceFile, moduleFile, packageJsonFilter, getModuleSpecifierResolutionHost(info.isFromPackageJson), moduleSpecifierCache);
+                    return ts.isImportableFile(info.isFromPackageJson ? packageJsonAutoImportProvider : program, sourceFile, moduleFile, preferences, packageJsonFilter, getModuleSpecifierResolutionHost(info.isFromPackageJson), moduleSpecifierCache);
                 }
             }
             function pushAutoImportSymbol(symbol, origin) {
                 var symbolId = ts.getSymbolId(symbol);
-                if (symbolToSortTextMap[symbolId] === SortText.GlobalsOrKeywords) {
+                if (symbolToSortTextIdMap[symbolId] === 15 /* GlobalsOrKeywords */) {
                     // If an auto-importable symbol is available as a global, don't add the auto import
                     return;
                 }
                 symbolToOriginInfoMap[symbols.length] = origin;
-                symbolToSortTextMap[symbolId] = importCompletionNode ? SortText.LocationPriority : SortText.AutoImportSuggestions;
+                symbolToSortTextIdMap[symbolId] = importCompletionNode ? 11 /* LocationPriority */ : 16 /* AutoImportSuggestions */;
                 symbols.push(symbol);
             }
             /**
-             * True if you could remove some characters in `a` to get `b`.
-             * E.g., true for "abcdef" and "bdf".
-             * But not true for "abcdef" and "dbf".
-             */
-            function stringContainsCharactersInOrder(str, characters) {
-                if (characters.length === 0) {
-                    return true;
-                }
-                var characterIndex = 0;
-                var len = str.length;
-                for (var strIndex = 0; strIndex < len; strIndex++) {
-                    if (str.charCodeAt(strIndex) === characters.charCodeAt(characterIndex)) {
-                        characterIndex++;
-                        if (characterIndex === characters.length) {
-                            return true;
-                        }
-                    }
-                }
-                // Did not find all characters
-                return false;
-            }
-            /**
              * Finds the first node that "embraces" the position, so that one may
              * accurately aggregate locals from the closest containing scope.
              */
@@ -125089,7 +127914,8 @@
                 var result = isInStringOrRegularExpressionOrTemplateLiteral(contextToken) ||
                     isSolelyIdentifierDefinitionLocation(contextToken) ||
                     isDotOfNumericLiteral(contextToken) ||
-                    isInJsxText(contextToken);
+                    isInJsxText(contextToken) ||
+                    ts.isBigIntLiteral(contextToken);
                 log("getCompletionsAtPosition: isCompletionListBlocker: " + (ts.timestamp() - start));
                 return result;
             }
@@ -125098,7 +127924,7 @@
                     return true;
                 }
                 if (contextToken.kind === 31 /* GreaterThanToken */ && contextToken.parent) {
-                    if (contextToken.parent.kind === 276 /* JsxOpeningElement */) {
+                    if (contextToken.parent.kind === 278 /* JsxOpeningElement */) {
                         // Two possibilities:
                         //   1. <div>/**/
                         //      - contextToken: GreaterThanToken (before cursor)
@@ -125108,10 +127934,10 @@
                         //      - contextToken: GreaterThanToken (before cursor)
                         //      - location: GreaterThanToken (after cursor)
                         //      - same parent (JSXOpeningElement)
-                        return location.parent.kind !== 276 /* JsxOpeningElement */;
+                        return location.parent.kind !== 278 /* JsxOpeningElement */;
                     }
-                    if (contextToken.parent.kind === 277 /* JsxClosingElement */ || contextToken.parent.kind === 275 /* JsxSelfClosingElement */) {
-                        return !!contextToken.parent.parent && contextToken.parent.parent.kind === 274 /* JsxElement */;
+                    if (contextToken.parent.kind === 279 /* JsxClosingElement */ || contextToken.parent.kind === 277 /* JsxSelfClosingElement */) {
+                        return !!contextToken.parent.parent && contextToken.parent.parent.kind === 276 /* JsxElement */;
                     }
                 }
                 return false;
@@ -125122,42 +127948,42 @@
                     // Previous token may have been a keyword that was converted to an identifier.
                     switch (keywordForNode(contextToken)) {
                         case 27 /* CommaToken */:
-                            return containingNodeKind === 204 /* CallExpression */ // func( a, |
-                                || containingNodeKind === 167 /* Constructor */ // constructor( a, |   /* public, protected, private keywords are allowed here, so show completion */
-                                || containingNodeKind === 205 /* NewExpression */ // new C(a, |
-                                || containingNodeKind === 200 /* ArrayLiteralExpression */ // [a, |
-                                || containingNodeKind === 217 /* BinaryExpression */ // const x = (a, |
-                                || containingNodeKind === 175 /* FunctionType */ // var x: (s: string, list|
-                                || containingNodeKind === 201 /* ObjectLiteralExpression */; // const obj = { x, |
+                            return containingNodeKind === 206 /* CallExpression */ // func( a, |
+                                || containingNodeKind === 169 /* Constructor */ // constructor( a, |   /* public, protected, private keywords are allowed here, so show completion */
+                                || containingNodeKind === 207 /* NewExpression */ // new C(a, |
+                                || containingNodeKind === 202 /* ArrayLiteralExpression */ // [a, |
+                                || containingNodeKind === 219 /* BinaryExpression */ // const x = (a, |
+                                || containingNodeKind === 177 /* FunctionType */ // var x: (s: string, list|
+                                || containingNodeKind === 203 /* ObjectLiteralExpression */; // const obj = { x, |
                         case 20 /* OpenParenToken */:
-                            return containingNodeKind === 204 /* CallExpression */ // func( |
-                                || containingNodeKind === 167 /* Constructor */ // constructor( |
-                                || containingNodeKind === 205 /* NewExpression */ // new C(a|
-                                || containingNodeKind === 208 /* ParenthesizedExpression */ // const x = (a|
-                                || containingNodeKind === 187 /* ParenthesizedType */; // function F(pred: (a| /* this can become an arrow function, where 'a' is the argument */
+                            return containingNodeKind === 206 /* CallExpression */ // func( |
+                                || containingNodeKind === 169 /* Constructor */ // constructor( |
+                                || containingNodeKind === 207 /* NewExpression */ // new C(a|
+                                || containingNodeKind === 210 /* ParenthesizedExpression */ // const x = (a|
+                                || containingNodeKind === 189 /* ParenthesizedType */; // function F(pred: (a| /* this can become an arrow function, where 'a' is the argument */
                         case 22 /* OpenBracketToken */:
-                            return containingNodeKind === 200 /* ArrayLiteralExpression */ // [ |
-                                || containingNodeKind === 172 /* IndexSignature */ // [ | : string ]
-                                || containingNodeKind === 159 /* ComputedPropertyName */; // [ |    /* this can become an index signature */
-                        case 139 /* ModuleKeyword */: // module |
-                        case 140 /* NamespaceKeyword */: // namespace |
+                            return containingNodeKind === 202 /* ArrayLiteralExpression */ // [ |
+                                || containingNodeKind === 174 /* IndexSignature */ // [ | : string ]
+                                || containingNodeKind === 160 /* ComputedPropertyName */; // [ |    /* this can become an index signature */
+                        case 140 /* ModuleKeyword */: // module |
+                        case 141 /* NamespaceKeyword */: // namespace |
                             return true;
                         case 24 /* DotToken */:
-                            return containingNodeKind === 257 /* ModuleDeclaration */; // module A.|
+                            return containingNodeKind === 259 /* ModuleDeclaration */; // module A.|
                         case 18 /* OpenBraceToken */:
-                            return containingNodeKind === 253 /* ClassDeclaration */ // class A { |
-                                || containingNodeKind === 201 /* ObjectLiteralExpression */; // const obj = { |
-                        case 62 /* EqualsToken */:
-                            return containingNodeKind === 250 /* VariableDeclaration */ // const x = a|
-                                || containingNodeKind === 217 /* BinaryExpression */; // x = a|
+                            return containingNodeKind === 255 /* ClassDeclaration */ // class A { |
+                                || containingNodeKind === 203 /* ObjectLiteralExpression */; // const obj = { |
+                        case 63 /* EqualsToken */:
+                            return containingNodeKind === 252 /* VariableDeclaration */ // const x = a|
+                                || containingNodeKind === 219 /* BinaryExpression */; // x = a|
                         case 15 /* TemplateHead */:
-                            return containingNodeKind === 219 /* TemplateExpression */; // `aa ${|
+                            return containingNodeKind === 221 /* TemplateExpression */; // `aa ${|
                         case 16 /* TemplateMiddle */:
-                            return containingNodeKind === 229 /* TemplateSpan */; // `aa ${10} dd ${|
-                        case 122 /* PublicKeyword */:
-                        case 120 /* PrivateKeyword */:
-                        case 121 /* ProtectedKeyword */:
-                            return containingNodeKind === 164 /* PropertyDeclaration */; // class A{ public |
+                            return containingNodeKind === 231 /* TemplateSpan */; // `aa ${10} dd ${|
+                        case 123 /* PublicKeyword */:
+                        case 121 /* PrivateKeyword */:
+                        case 122 /* ProtectedKeyword */:
+                            return containingNodeKind === 165 /* PropertyDeclaration */; // class A{ public |
                     }
                 }
                 return false;
@@ -125203,7 +128029,7 @@
                 completionKind = 0 /* ObjectPropertyDeclaration */;
                 var typeMembers;
                 var existingMembers;
-                if (objectLikeContainer.kind === 201 /* ObjectLiteralExpression */) {
+                if (objectLikeContainer.kind === 203 /* ObjectLiteralExpression */) {
                     var instantiatedType = tryGetObjectLiteralContextualType(objectLikeContainer, typeChecker);
                     // Check completions for Object property value shorthand
                     if (instantiatedType === undefined) {
@@ -125228,7 +128054,7 @@
                     }
                 }
                 else {
-                    ts.Debug.assert(objectLikeContainer.kind === 197 /* ObjectBindingPattern */);
+                    ts.Debug.assert(objectLikeContainer.kind === 199 /* ObjectBindingPattern */);
                     // We are *only* completing on properties from the type being destructured.
                     isNewIdentifierLocation = false;
                     var rootDeclaration = ts.getRootDeclaration(objectLikeContainer.parent);
@@ -125239,12 +128065,12 @@
                     // through type declaration or inference.
                     // Also proceed if rootDeclaration is a parameter and if its containing function expression/arrow function is contextually typed -
                     // type of parameter will flow in from the contextual type of the function
-                    var canGetType = ts.hasInitializer(rootDeclaration) || ts.hasType(rootDeclaration) || rootDeclaration.parent.parent.kind === 240 /* ForOfStatement */;
-                    if (!canGetType && rootDeclaration.kind === 161 /* Parameter */) {
+                    var canGetType = ts.hasInitializer(rootDeclaration) || ts.hasType(rootDeclaration) || rootDeclaration.parent.parent.kind === 242 /* ForOfStatement */;
+                    if (!canGetType && rootDeclaration.kind === 162 /* Parameter */) {
                         if (ts.isExpression(rootDeclaration.parent)) {
                             canGetType = !!typeChecker.getContextualType(rootDeclaration.parent);
                         }
-                        else if (rootDeclaration.parent.kind === 166 /* MethodDeclaration */ || rootDeclaration.parent.kind === 169 /* SetAccessor */) {
+                        else if (rootDeclaration.parent.kind === 167 /* MethodDeclaration */ || rootDeclaration.parent.kind === 171 /* SetAccessor */) {
                             canGetType = ts.isExpression(rootDeclaration.parent.parent) && !!typeChecker.getContextualType(rootDeclaration.parent.parent);
                         }
                     }
@@ -125291,9 +128117,9 @@
                 if (!namedImportsOrExports)
                     return 0 /* Continue */;
                 // try to show exported member for imported/re-exported module
-                var moduleSpecifier = (namedImportsOrExports.kind === 265 /* NamedImports */ ? namedImportsOrExports.parent.parent : namedImportsOrExports.parent).moduleSpecifier;
+                var moduleSpecifier = (namedImportsOrExports.kind === 267 /* NamedImports */ ? namedImportsOrExports.parent.parent : namedImportsOrExports.parent).moduleSpecifier;
                 if (!moduleSpecifier)
-                    return namedImportsOrExports.kind === 265 /* NamedImports */ ? 2 /* Fail */ : 0 /* Continue */;
+                    return namedImportsOrExports.kind === 267 /* NamedImports */ ? 2 /* Fail */ : 0 /* Continue */;
                 var moduleSpecifierSymbol = typeChecker.getSymbolAtLocation(moduleSpecifier); // TODO: GH#18217
                 if (!moduleSpecifierSymbol)
                     return 2 /* Fail */;
@@ -125328,7 +128154,7 @@
                     var _a, _b;
                     symbols.push(symbol);
                     if ((_b = (_a = localsContainer.symbol) === null || _a === void 0 ? void 0 : _a.exports) === null || _b === void 0 ? void 0 : _b.has(name)) {
-                        symbolToSortTextMap[ts.getSymbolId(symbol)] = SortText.OptionalMember;
+                        symbolToSortTextIdMap[ts.getSymbolId(symbol)] = 12 /* OptionalMember */;
                     }
                 });
                 return 1 /* Success */;
@@ -125353,7 +128179,7 @@
                 var classElement = contextToken.kind === 26 /* SemicolonToken */ ? contextToken.parent.parent : contextToken.parent;
                 var classElementModifierFlags = ts.isClassElement(classElement) ? ts.getEffectiveModifierFlags(classElement) : 0 /* None */;
                 // If this is context token is not something we are editing now, consider if this would lead to be modifier
-                if (contextToken.kind === 78 /* Identifier */ && !isCurrentlyEditingNode(contextToken)) {
+                if (contextToken.kind === 79 /* Identifier */ && !isCurrentlyEditingNode(contextToken)) {
                     switch (contextToken.getText()) {
                         case "private":
                             classElementModifierFlags = classElementModifierFlags | 8 /* Private */;
@@ -125366,6 +128192,9 @@
                             break;
                     }
                 }
+                if (ts.isClassStaticBlockDeclaration(classElement)) {
+                    classElementModifierFlags |= 32 /* Static */;
+                }
                 // No member list for private methods
                 if (!(classElementModifierFlags & 8 /* Private */)) {
                     // List of property symbols of base type that are not private and already implemented
@@ -125396,7 +128225,7 @@
                             break;
                         case 41 /* AsteriskToken */:
                             return ts.isMethodDeclaration(parent) ? ts.tryCast(parent.parent, ts.isObjectLiteralExpression) : undefined;
-                        case 78 /* Identifier */:
+                        case 79 /* Identifier */:
                             return contextToken.text === "async" && ts.isShorthandPropertyAssignment(contextToken.parent)
                                 ? contextToken.parent.parent : undefined;
                     }
@@ -125449,12 +128278,12 @@
                         case 31 /* GreaterThanToken */: // End of a type argument list
                         case 30 /* LessThanSlashToken */:
                         case 43 /* SlashToken */:
-                        case 78 /* Identifier */:
-                        case 202 /* PropertyAccessExpression */:
-                        case 282 /* JsxAttributes */:
-                        case 281 /* JsxAttribute */:
-                        case 283 /* JsxSpreadAttribute */:
-                            if (parent && (parent.kind === 275 /* JsxSelfClosingElement */ || parent.kind === 276 /* JsxOpeningElement */)) {
+                        case 79 /* Identifier */:
+                        case 204 /* PropertyAccessExpression */:
+                        case 284 /* JsxAttributes */:
+                        case 283 /* JsxAttribute */:
+                        case 285 /* JsxSpreadAttribute */:
+                            if (parent && (parent.kind === 277 /* JsxSelfClosingElement */ || parent.kind === 278 /* JsxOpeningElement */)) {
                                 if (contextToken.kind === 31 /* GreaterThanToken */) {
                                     var precedingToken = ts.findPrecedingToken(contextToken.pos, sourceFile, /*startNode*/ undefined);
                                     if (!parent.typeArguments || (precedingToken && precedingToken.kind === 43 /* SlashToken */))
@@ -125462,7 +128291,7 @@
                                 }
                                 return parent;
                             }
-                            else if (parent.kind === 281 /* JsxAttribute */) {
+                            else if (parent.kind === 283 /* JsxAttribute */) {
                                 // Currently we parse JsxOpeningLikeElement as:
                                 //      JsxOpeningLikeElement
                                 //          attributes: JsxAttributes
@@ -125474,7 +128303,7 @@
                         // its parent is a JsxExpression, whose parent is a JsxAttribute,
                         // whose parent is a JsxOpeningLikeElement
                         case 10 /* StringLiteral */:
-                            if (parent && ((parent.kind === 281 /* JsxAttribute */) || (parent.kind === 283 /* JsxSpreadAttribute */))) {
+                            if (parent && ((parent.kind === 283 /* JsxAttribute */) || (parent.kind === 285 /* JsxSpreadAttribute */))) {
                                 // Currently we parse JsxOpeningLikeElement as:
                                 //      JsxOpeningLikeElement
                                 //          attributes: JsxAttributes
@@ -125484,8 +128313,8 @@
                             break;
                         case 19 /* CloseBraceToken */:
                             if (parent &&
-                                parent.kind === 284 /* JsxExpression */ &&
-                                parent.parent && parent.parent.kind === 281 /* JsxAttribute */) {
+                                parent.kind === 286 /* JsxExpression */ &&
+                                parent.parent && parent.parent.kind === 283 /* JsxAttribute */) {
                                 // Currently we parse JsxOpeningLikeElement as:
                                 //      JsxOpeningLikeElement
                                 //          attributes: JsxAttributes
@@ -125493,7 +128322,7 @@
                                 //                  each JsxAttribute can have initializer as JsxExpression
                                 return parent.parent.parent.parent;
                             }
-                            if (parent && parent.kind === 283 /* JsxSpreadAttribute */) {
+                            if (parent && parent.kind === 285 /* JsxSpreadAttribute */) {
                                 // Currently we parse JsxOpeningLikeElement as:
                                 //      JsxOpeningLikeElement
                                 //          attributes: JsxAttributes
@@ -125513,62 +128342,62 @@
                 var containingNodeKind = parent.kind;
                 switch (contextToken.kind) {
                     case 27 /* CommaToken */:
-                        return containingNodeKind === 250 /* VariableDeclaration */ ||
+                        return containingNodeKind === 252 /* VariableDeclaration */ ||
                             isVariableDeclarationListButNotTypeArgument(contextToken) ||
-                            containingNodeKind === 233 /* VariableStatement */ ||
-                            containingNodeKind === 256 /* EnumDeclaration */ || // enum a { foo, |
+                            containingNodeKind === 235 /* VariableStatement */ ||
+                            containingNodeKind === 258 /* EnumDeclaration */ || // enum a { foo, |
                             isFunctionLikeButNotConstructor(containingNodeKind) ||
-                            containingNodeKind === 254 /* InterfaceDeclaration */ || // interface A<T, |
-                            containingNodeKind === 198 /* ArrayBindingPattern */ || // var [x, y|
-                            containingNodeKind === 255 /* TypeAliasDeclaration */ || // type Map, K, |
+                            containingNodeKind === 256 /* InterfaceDeclaration */ || // interface A<T, |
+                            containingNodeKind === 200 /* ArrayBindingPattern */ || // var [x, y|
+                            containingNodeKind === 257 /* TypeAliasDeclaration */ || // type Map, K, |
                             // class A<T, |
                             // var C = class D<T, |
                             (ts.isClassLike(parent) &&
                                 !!parent.typeParameters &&
                                 parent.typeParameters.end >= contextToken.pos);
                     case 24 /* DotToken */:
-                        return containingNodeKind === 198 /* ArrayBindingPattern */; // var [.|
+                        return containingNodeKind === 200 /* ArrayBindingPattern */; // var [.|
                     case 58 /* ColonToken */:
-                        return containingNodeKind === 199 /* BindingElement */; // var {x :html|
+                        return containingNodeKind === 201 /* BindingElement */; // var {x :html|
                     case 22 /* OpenBracketToken */:
-                        return containingNodeKind === 198 /* ArrayBindingPattern */; // var [x|
+                        return containingNodeKind === 200 /* ArrayBindingPattern */; // var [x|
                     case 20 /* OpenParenToken */:
-                        return containingNodeKind === 288 /* CatchClause */ ||
+                        return containingNodeKind === 290 /* CatchClause */ ||
                             isFunctionLikeButNotConstructor(containingNodeKind);
                     case 18 /* OpenBraceToken */:
-                        return containingNodeKind === 256 /* EnumDeclaration */; // enum a { |
+                        return containingNodeKind === 258 /* EnumDeclaration */; // enum a { |
                     case 29 /* LessThanToken */:
-                        return containingNodeKind === 253 /* ClassDeclaration */ || // class A< |
-                            containingNodeKind === 222 /* ClassExpression */ || // var C = class D< |
-                            containingNodeKind === 254 /* InterfaceDeclaration */ || // interface A< |
-                            containingNodeKind === 255 /* TypeAliasDeclaration */ || // type List< |
+                        return containingNodeKind === 255 /* ClassDeclaration */ || // class A< |
+                            containingNodeKind === 224 /* ClassExpression */ || // var C = class D< |
+                            containingNodeKind === 256 /* InterfaceDeclaration */ || // interface A< |
+                            containingNodeKind === 257 /* TypeAliasDeclaration */ || // type List< |
                             ts.isFunctionLikeKind(containingNodeKind);
-                    case 123 /* StaticKeyword */:
-                        return containingNodeKind === 164 /* PropertyDeclaration */ && !ts.isClassLike(parent.parent);
+                    case 124 /* StaticKeyword */:
+                        return containingNodeKind === 165 /* PropertyDeclaration */ && !ts.isClassLike(parent.parent);
                     case 25 /* DotDotDotToken */:
-                        return containingNodeKind === 161 /* Parameter */ ||
-                            (!!parent.parent && parent.parent.kind === 198 /* ArrayBindingPattern */); // var [...z|
-                    case 122 /* PublicKeyword */:
-                    case 120 /* PrivateKeyword */:
-                    case 121 /* ProtectedKeyword */:
-                        return containingNodeKind === 161 /* Parameter */ && !ts.isConstructorDeclaration(parent.parent);
-                    case 126 /* AsKeyword */:
-                        return containingNodeKind === 266 /* ImportSpecifier */ ||
-                            containingNodeKind === 271 /* ExportSpecifier */ ||
-                            containingNodeKind === 264 /* NamespaceImport */;
-                    case 134 /* GetKeyword */:
-                    case 146 /* SetKeyword */:
+                        return containingNodeKind === 162 /* Parameter */ ||
+                            (!!parent.parent && parent.parent.kind === 200 /* ArrayBindingPattern */); // var [...z|
+                    case 123 /* PublicKeyword */:
+                    case 121 /* PrivateKeyword */:
+                    case 122 /* ProtectedKeyword */:
+                        return containingNodeKind === 162 /* Parameter */ && !ts.isConstructorDeclaration(parent.parent);
+                    case 127 /* AsKeyword */:
+                        return containingNodeKind === 268 /* ImportSpecifier */ ||
+                            containingNodeKind === 273 /* ExportSpecifier */ ||
+                            containingNodeKind === 266 /* NamespaceImport */;
+                    case 135 /* GetKeyword */:
+                    case 147 /* SetKeyword */:
                         return !isFromObjectTypeDeclaration(contextToken);
-                    case 83 /* ClassKeyword */:
-                    case 91 /* EnumKeyword */:
-                    case 117 /* InterfaceKeyword */:
-                    case 97 /* FunctionKeyword */:
-                    case 112 /* VarKeyword */:
-                    case 99 /* ImportKeyword */:
-                    case 118 /* LetKeyword */:
-                    case 84 /* ConstKeyword */:
-                    case 135 /* InferKeyword */:
-                    case 149 /* TypeKeyword */: // type htm|
+                    case 84 /* ClassKeyword */:
+                    case 92 /* EnumKeyword */:
+                    case 118 /* InterfaceKeyword */:
+                    case 98 /* FunctionKeyword */:
+                    case 113 /* VarKeyword */:
+                    case 100 /* ImportKeyword */:
+                    case 119 /* LetKeyword */:
+                    case 85 /* ConstKeyword */:
+                    case 136 /* InferKeyword */:
+                    case 150 /* TypeKeyword */: // type htm|
                         return true;
                     case 41 /* AsteriskToken */:
                         return ts.isFunctionLike(contextToken.parent) && !ts.isMethodDeclaration(contextToken.parent);
@@ -125591,21 +128420,21 @@
                 }
                 // Previous token may have been a keyword that was converted to an identifier.
                 switch (keywordForNode(contextToken)) {
-                    case 125 /* AbstractKeyword */:
-                    case 83 /* ClassKeyword */:
-                    case 84 /* ConstKeyword */:
-                    case 133 /* DeclareKeyword */:
-                    case 91 /* EnumKeyword */:
-                    case 97 /* FunctionKeyword */:
-                    case 117 /* InterfaceKeyword */:
-                    case 118 /* LetKeyword */:
-                    case 120 /* PrivateKeyword */:
-                    case 121 /* ProtectedKeyword */:
-                    case 122 /* PublicKeyword */:
-                    case 123 /* StaticKeyword */:
-                    case 112 /* VarKeyword */:
+                    case 126 /* AbstractKeyword */:
+                    case 84 /* ClassKeyword */:
+                    case 85 /* ConstKeyword */:
+                    case 134 /* DeclareKeyword */:
+                    case 92 /* EnumKeyword */:
+                    case 98 /* FunctionKeyword */:
+                    case 118 /* InterfaceKeyword */:
+                    case 119 /* LetKeyword */:
+                    case 121 /* PrivateKeyword */:
+                    case 122 /* ProtectedKeyword */:
+                    case 123 /* PublicKeyword */:
+                    case 124 /* StaticKeyword */:
+                    case 113 /* VarKeyword */:
                         return true;
-                    case 129 /* AsyncKeyword */:
+                    case 130 /* AsyncKeyword */:
                         return ts.isPropertyDeclaration(contextToken.parent);
                 }
                 // If we are inside a class declaration, and `constructor` is totally not present,
@@ -125614,7 +128443,7 @@
                 if (ancestorClassLike && contextToken === previousToken && isPreviousPropertyDeclarationTerminated(contextToken, position)) {
                     return false; // Don't block completions.
                 }
-                var ancestorPropertyDeclaraion = ts.getAncestor(contextToken.parent, 164 /* PropertyDeclaration */);
+                var ancestorPropertyDeclaraion = ts.getAncestor(contextToken.parent, 165 /* PropertyDeclaration */);
                 // If we are inside a class declaration and typing `constructor` after property declaration...
                 if (ancestorPropertyDeclaraion
                     && contextToken !== previousToken
@@ -125625,7 +128454,7 @@
                     if (isPreviousPropertyDeclarationTerminated(contextToken, previousToken.end)) {
                         return false; // Don't block completions.
                     }
-                    else if (contextToken.kind !== 62 /* EqualsToken */
+                    else if (contextToken.kind !== 63 /* EqualsToken */
                         // Should not block: `class C { blah = c/**/ }`
                         // But should block: `class C { blah = somewhat c/**/ }` and `class C { blah: SomeType c/**/ }`
                         && (ts.isInitializedProperty(ancestorPropertyDeclaraion)
@@ -125641,12 +128470,12 @@
                     && !(ts.isClassLike(contextToken.parent) && (contextToken !== previousToken || position > previousToken.end));
             }
             function isPreviousPropertyDeclarationTerminated(contextToken, position) {
-                return contextToken.kind !== 62 /* EqualsToken */ &&
+                return contextToken.kind !== 63 /* EqualsToken */ &&
                     (contextToken.kind === 26 /* SemicolonToken */
                         || !ts.positionsAreOnSameLine(contextToken.end, position, sourceFile));
             }
             function isFunctionLikeButNotConstructor(kind) {
-                return ts.isFunctionLikeKind(kind) && kind !== 167 /* Constructor */;
+                return ts.isFunctionLikeKind(kind) && kind !== 169 /* Constructor */;
             }
             function isDotOfNumericLiteral(contextToken) {
                 if (contextToken.kind === 8 /* NumericLiteral */) {
@@ -125656,7 +128485,7 @@
                 return false;
             }
             function isVariableDeclarationListButNotTypeArgument(node) {
-                return node.parent.kind === 251 /* VariableDeclarationList */
+                return node.parent.kind === 253 /* VariableDeclarationList */
                     && !ts.isPossiblyTypeArgumentPosition(node, sourceFile, typeChecker);
             }
             /**
@@ -125674,13 +128503,13 @@
                 for (var _i = 0, existingMembers_1 = existingMembers; _i < existingMembers_1.length; _i++) {
                     var m = existingMembers_1[_i];
                     // Ignore omitted expressions for missing members
-                    if (m.kind !== 289 /* PropertyAssignment */ &&
-                        m.kind !== 290 /* ShorthandPropertyAssignment */ &&
-                        m.kind !== 199 /* BindingElement */ &&
-                        m.kind !== 166 /* MethodDeclaration */ &&
-                        m.kind !== 168 /* GetAccessor */ &&
-                        m.kind !== 169 /* SetAccessor */ &&
-                        m.kind !== 291 /* SpreadAssignment */) {
+                    if (m.kind !== 291 /* PropertyAssignment */ &&
+                        m.kind !== 292 /* ShorthandPropertyAssignment */ &&
+                        m.kind !== 201 /* BindingElement */ &&
+                        m.kind !== 167 /* MethodDeclaration */ &&
+                        m.kind !== 170 /* GetAccessor */ &&
+                        m.kind !== 171 /* SetAccessor */ &&
+                        m.kind !== 293 /* SpreadAssignment */) {
                         continue;
                     }
                     // If this is the current item we are editing right now, do not filter it out
@@ -125693,7 +128522,7 @@
                     }
                     else if (ts.isBindingElement(m) && m.propertyName) {
                         // include only identifiers in completion list
-                        if (m.propertyName.kind === 78 /* Identifier */) {
+                        if (m.propertyName.kind === 79 /* Identifier */) {
                             existingName = m.propertyName.escapedText;
                         }
                     }
@@ -125726,8 +128555,10 @@
             // Set SortText to OptionalMember if it is an optional member
             function setSortTextToOptionalMember() {
                 symbols.forEach(function (m) {
+                    var _a;
                     if (m.flags & 16777216 /* Optional */) {
-                        symbolToSortTextMap[ts.getSymbolId(m)] = symbolToSortTextMap[ts.getSymbolId(m)] || SortText.OptionalMember;
+                        var symbolId = ts.getSymbolId(m);
+                        symbolToSortTextIdMap[symbolId] = (_a = symbolToSortTextIdMap[symbolId]) !== null && _a !== void 0 ? _a : 12 /* OptionalMember */;
                     }
                 });
             }
@@ -125739,7 +128570,7 @@
                 for (var _i = 0, contextualMemberSymbols_1 = contextualMemberSymbols; _i < contextualMemberSymbols_1.length; _i++) {
                     var contextualMemberSymbol = contextualMemberSymbols_1[_i];
                     if (membersDeclaredBySpreadAssignment.has(contextualMemberSymbol.name)) {
-                        symbolToSortTextMap[ts.getSymbolId(contextualMemberSymbol)] = SortText.MemberDeclaredBySpreadAssignment;
+                        symbolToSortTextIdMap[ts.getSymbolId(contextualMemberSymbol)] = 13 /* MemberDeclaredBySpreadAssignment */;
                     }
                 }
             }
@@ -125753,10 +128584,10 @@
                 for (var _i = 0, existingMembers_2 = existingMembers; _i < existingMembers_2.length; _i++) {
                     var m = existingMembers_2[_i];
                     // Ignore omitted expressions for missing members
-                    if (m.kind !== 164 /* PropertyDeclaration */ &&
-                        m.kind !== 166 /* MethodDeclaration */ &&
-                        m.kind !== 168 /* GetAccessor */ &&
-                        m.kind !== 169 /* SetAccessor */) {
+                    if (m.kind !== 165 /* PropertyDeclaration */ &&
+                        m.kind !== 167 /* MethodDeclaration */ &&
+                        m.kind !== 170 /* GetAccessor */ &&
+                        m.kind !== 171 /* SetAccessor */) {
                         continue;
                     }
                     // If this is the current item we are editing right now, do not filter it out
@@ -125768,7 +128599,7 @@
                         continue;
                     }
                     // do not filter it out if the static presence doesnt match
-                    if (ts.hasEffectiveModifier(m, 32 /* Static */) !== !!(currentClassElementModifierFlags & 32 /* Static */)) {
+                    if (ts.isStatic(m) !== !!(currentClassElementModifierFlags & 32 /* Static */)) {
                         continue;
                     }
                     var existingName = ts.getPropertyNameForPropertyNameNode(m.name);
@@ -125798,7 +128629,7 @@
                     if (isCurrentlyEditingNode(attr)) {
                         continue;
                     }
-                    if (attr.kind === 281 /* JsxAttribute */) {
+                    if (attr.kind === 283 /* JsxAttribute */) {
                         seenNames.add(attr.name.escapedText);
                     }
                     else if (ts.isJsxSpreadAttribute(attr)) {
@@ -125813,6 +128644,14 @@
                 return node.getStart(sourceFile) <= position && position <= node.getEnd();
             }
         }
+        function getRelevantTokens(position, sourceFile) {
+            var previousToken = ts.findPrecedingToken(position, sourceFile);
+            if (previousToken && position <= previousToken.end && (ts.isMemberName(previousToken) || ts.isKeyword(previousToken.kind))) {
+                var contextToken = ts.findPrecedingToken(previousToken.getFullStart(), sourceFile, /*startNode*/ undefined); // TODO: GH#18217
+                return { contextToken: contextToken, previousToken: previousToken };
+            }
+            return { contextToken: previousToken, previousToken: previousToken };
+        }
         function getAutoImportSymbolFromCompletionEntryData(name, data, program, host) {
             var containingProgram = data.isPackageJsonImport ? host.getPackageJsonAutoImportProvider() : program;
             var checker = containingProgram.getTypeChecker();
@@ -125837,6 +128676,7 @@
                     isDefaultExport: isDefaultExport,
                     exportName: data.exportName,
                     fileName: data.fileName,
+                    isFromPackageJson: !!data.isPackageJsonImport,
                 }
             };
         }
@@ -125875,7 +128715,7 @@
         var _keywordCompletions = [];
         var allKeywordsCompletions = ts.memoize(function () {
             var res = [];
-            for (var i = 80 /* FirstKeyword */; i <= 157 /* LastKeyword */; i++) {
+            for (var i = 81 /* FirstKeyword */; i <= 158 /* LastKeyword */; i++) {
                 res.push({
                     name: ts.tokenToString(i),
                     kind: "keyword" /* keyword */,
@@ -125901,11 +128741,11 @@
                         return false;
                     case 1 /* All */:
                         return isFunctionLikeBodyKeyword(kind)
-                            || kind === 133 /* DeclareKeyword */
-                            || kind === 139 /* ModuleKeyword */
-                            || kind === 149 /* TypeKeyword */
-                            || kind === 140 /* NamespaceKeyword */
-                            || ts.isTypeKeyword(kind) && kind !== 150 /* UndefinedKeyword */;
+                            || kind === 134 /* DeclareKeyword */
+                            || kind === 140 /* ModuleKeyword */
+                            || kind === 150 /* TypeKeyword */
+                            || kind === 141 /* NamespaceKeyword */
+                            || ts.isTypeKeyword(kind) && kind !== 151 /* UndefinedKeyword */;
                     case 5 /* FunctionLikeBodyKeywords */:
                         return isFunctionLikeBodyKeyword(kind);
                     case 2 /* ClassElementKeywords */:
@@ -125915,7 +128755,7 @@
                     case 4 /* ConstructorParameterKeywords */:
                         return ts.isParameterPropertyModifier(kind);
                     case 6 /* TypeAssertionKeywords */:
-                        return ts.isTypeKeyword(kind) || kind === 84 /* ConstKeyword */;
+                        return ts.isTypeKeyword(kind) || kind === 85 /* ConstKeyword */;
                     case 7 /* TypeKeywords */:
                         return ts.isTypeKeyword(kind);
                     default:
@@ -125925,59 +128765,59 @@
         }
         function isTypeScriptOnlyKeyword(kind) {
             switch (kind) {
-                case 125 /* AbstractKeyword */:
-                case 128 /* AnyKeyword */:
-                case 155 /* BigIntKeyword */:
-                case 131 /* BooleanKeyword */:
-                case 133 /* DeclareKeyword */:
-                case 91 /* EnumKeyword */:
-                case 154 /* GlobalKeyword */:
-                case 116 /* ImplementsKeyword */:
-                case 135 /* InferKeyword */:
-                case 117 /* InterfaceKeyword */:
-                case 137 /* IsKeyword */:
-                case 138 /* KeyOfKeyword */:
-                case 139 /* ModuleKeyword */:
-                case 140 /* NamespaceKeyword */:
-                case 141 /* NeverKeyword */:
-                case 144 /* NumberKeyword */:
-                case 145 /* ObjectKeyword */:
-                case 156 /* OverrideKeyword */:
-                case 120 /* PrivateKeyword */:
-                case 121 /* ProtectedKeyword */:
-                case 122 /* PublicKeyword */:
-                case 142 /* ReadonlyKeyword */:
-                case 147 /* StringKeyword */:
-                case 148 /* SymbolKeyword */:
-                case 149 /* TypeKeyword */:
-                case 151 /* UniqueKeyword */:
-                case 152 /* UnknownKeyword */:
+                case 126 /* AbstractKeyword */:
+                case 129 /* AnyKeyword */:
+                case 156 /* BigIntKeyword */:
+                case 132 /* BooleanKeyword */:
+                case 134 /* DeclareKeyword */:
+                case 92 /* EnumKeyword */:
+                case 155 /* GlobalKeyword */:
+                case 117 /* ImplementsKeyword */:
+                case 136 /* InferKeyword */:
+                case 118 /* InterfaceKeyword */:
+                case 138 /* IsKeyword */:
+                case 139 /* KeyOfKeyword */:
+                case 140 /* ModuleKeyword */:
+                case 141 /* NamespaceKeyword */:
+                case 142 /* NeverKeyword */:
+                case 145 /* NumberKeyword */:
+                case 146 /* ObjectKeyword */:
+                case 157 /* OverrideKeyword */:
+                case 121 /* PrivateKeyword */:
+                case 122 /* ProtectedKeyword */:
+                case 123 /* PublicKeyword */:
+                case 143 /* ReadonlyKeyword */:
+                case 148 /* StringKeyword */:
+                case 149 /* SymbolKeyword */:
+                case 150 /* TypeKeyword */:
+                case 152 /* UniqueKeyword */:
+                case 153 /* UnknownKeyword */:
                     return true;
                 default:
                     return false;
             }
         }
         function isInterfaceOrTypeLiteralCompletionKeyword(kind) {
-            return kind === 142 /* ReadonlyKeyword */;
+            return kind === 143 /* ReadonlyKeyword */;
         }
         function isClassMemberCompletionKeyword(kind) {
             switch (kind) {
-                case 125 /* AbstractKeyword */:
-                case 132 /* ConstructorKeyword */:
-                case 134 /* GetKeyword */:
-                case 146 /* SetKeyword */:
-                case 129 /* AsyncKeyword */:
-                case 133 /* DeclareKeyword */:
-                case 156 /* OverrideKeyword */:
+                case 126 /* AbstractKeyword */:
+                case 133 /* ConstructorKeyword */:
+                case 135 /* GetKeyword */:
+                case 147 /* SetKeyword */:
+                case 130 /* AsyncKeyword */:
+                case 134 /* DeclareKeyword */:
+                case 157 /* OverrideKeyword */:
                     return true;
                 default:
                     return ts.isClassMemberModifier(kind);
             }
         }
         function isFunctionLikeBodyKeyword(kind) {
-            return kind === 129 /* AsyncKeyword */
-                || kind === 130 /* AwaitKeyword */
-                || kind === 126 /* AsKeyword */
+            return kind === 130 /* AsyncKeyword */
+                || kind === 131 /* AwaitKeyword */
+                || kind === 127 /* AsKeyword */
                 || !ts.isContextualKeyword(kind) && !isClassMemberCompletionKeyword(kind);
         }
         function keywordForNode(node) {
@@ -126029,7 +128869,7 @@
         function tryGetObjectTypeDeclarationCompletionContainer(sourceFile, contextToken, location, position) {
             // class c { method() { } | method2() { } }
             switch (location.kind) {
-                case 338 /* SyntaxList */:
+                case 343 /* SyntaxList */:
                     return ts.tryCast(location.parent, ts.isObjectTypeDeclaration);
                 case 1 /* EndOfFileToken */:
                     var cls = ts.tryCast(ts.lastOrUndefined(ts.cast(location.parent, ts.isSourceFile).statements), ts.isObjectTypeDeclaration);
@@ -126037,7 +128877,7 @@
                         return cls;
                     }
                     break;
-                case 78 /* Identifier */: {
+                case 79 /* Identifier */: {
                     // class c { public prop = c| }
                     if (ts.isPropertyDeclaration(location.parent) && location.parent.initializer === location) {
                         return undefined;
@@ -126051,13 +128891,13 @@
             if (!contextToken)
                 return undefined;
             // class C { blah; constructor/**/ } and so on
-            if (location.kind === 132 /* ConstructorKeyword */
+            if (location.kind === 133 /* ConstructorKeyword */
                 // class C { blah \n constructor/**/ }
                 || (ts.isIdentifier(contextToken) && ts.isPropertyDeclaration(contextToken.parent) && ts.isClassLike(location))) {
                 return ts.findAncestor(contextToken, ts.isClassLike);
             }
             switch (contextToken.kind) {
-                case 62 /* EqualsToken */: // class c { public prop = | /* global completions */ }
+                case 63 /* EqualsToken */: // class c { public prop = | /* global completions */ }
                     return undefined;
                 case 26 /* SemicolonToken */: // class c {getValue(): number; | }
                 case 19 /* CloseBraceToken */: // class c { method() { } | }
@@ -126093,8 +128933,8 @@
                     break;
                 case 26 /* SemicolonToken */:
                 case 27 /* CommaToken */:
-                case 78 /* Identifier */:
-                    if (parent.kind === 163 /* PropertySignature */ && ts.isTypeLiteralNode(parent.parent)) {
+                case 79 /* Identifier */:
+                    if (parent.kind === 164 /* PropertySignature */ && ts.isTypeLiteralNode(parent.parent)) {
                         return parent.parent;
                     }
                     break;
@@ -126111,11 +128951,11 @@
             if (!t)
                 return undefined;
             switch (node.kind) {
-                case 163 /* PropertySignature */:
+                case 164 /* PropertySignature */:
                     return checker.getTypeOfPropertyOfContextualType(t, node.symbol.escapedName);
-                case 184 /* IntersectionType */:
-                case 178 /* TypeLiteral */:
-                case 183 /* UnionType */:
+                case 186 /* IntersectionType */:
+                case 180 /* TypeLiteral */:
+                case 185 /* UnionType */:
                     return t;
             }
         }
@@ -126143,7 +128983,7 @@
                         ? !!ts.tryGetImportFromModuleSpecifier(contextToken)
                         : contextToken.kind === 43 /* SlashToken */ && ts.isJsxClosingElement(contextToken.parent));
                 case " ":
-                    return !!contextToken && ts.isImportKeyword(contextToken) && contextToken.parent.kind === 298 /* SourceFile */;
+                    return !!contextToken && ts.isImportKeyword(contextToken) && contextToken.parent.kind === 300 /* SourceFile */;
                 default:
                     return ts.Debug.assertNever(triggerCharacter);
             }
@@ -126178,7 +129018,7 @@
             if (type) {
                 return type;
             }
-            if (ts.isBinaryExpression(node.parent) && node.parent.operatorToken.kind === 62 /* EqualsToken */ && node === node.parent.left) {
+            if (ts.isBinaryExpression(node.parent) && node.parent.operatorToken.kind === 63 /* EqualsToken */ && node === node.parent.left) {
                 // Object literal is assignment pattern: ({ | } = x)
                 return typeChecker.getTypeAtLocation(node.parent);
             }
@@ -126186,7 +129026,7 @@
         }
         function getImportCompletionNode(contextToken) {
             var candidate = getCandidate();
-            return candidate === 153 /* FromKeyword */ || candidate && ts.rangeIsOnSingleLine(candidate, candidate.getSourceFile()) ? candidate : undefined;
+            return candidate === 154 /* FromKeyword */ || candidate && ts.rangeIsOnSingleLine(candidate, candidate.getSourceFile()) ? candidate : undefined;
             function getCandidate() {
                 var parent = contextToken.parent;
                 if (ts.isImportEqualsDeclaration(parent)) {
@@ -126195,8 +129035,8 @@
                 if (ts.isNamedImports(parent) || ts.isNamespaceImport(parent)) {
                     if (isModuleSpecifierMissingOrEmpty(parent.parent.parent.moduleSpecifier) && (ts.isNamespaceImport(parent) || parent.elements.length < 2) && !parent.parent.name) {
                         // At `import { ... } |` or `import * as Foo |`, the only possible completion is `from`
-                        return contextToken.kind === 19 /* CloseBraceToken */ || contextToken.kind === 78 /* Identifier */
-                            ? 153 /* FromKeyword */
+                        return contextToken.kind === 19 /* CloseBraceToken */ || contextToken.kind === 79 /* Identifier */
+                            ? 154 /* FromKeyword */
                             : parent.parent.parent;
                     }
                     return undefined;
@@ -126234,11 +129074,63 @@
         function symbolCanBeReferencedAtTypeLocation(symbol, checker, seenModules) {
             if (seenModules === void 0) { seenModules = new ts.Map(); }
             var sym = ts.skipAlias(symbol.exportSymbol || symbol, checker);
-            return !!(sym.flags & 788968 /* Type */) ||
-                !!(sym.flags & 1536 /* Module */) &&
-                    ts.addToSeen(seenModules, ts.getSymbolId(sym)) &&
+            return !!(sym.flags & 788968 /* Type */) || checker.isUnknownSymbol(sym) ||
+                !!(sym.flags & 1536 /* Module */) && ts.addToSeen(seenModules, ts.getSymbolId(sym)) &&
                     checker.getExportsOfModule(sym).some(function (e) { return symbolCanBeReferencedAtTypeLocation(e, checker, seenModules); });
         }
+        function isDeprecated(symbol, checker) {
+            var declarations = ts.skipAlias(symbol, checker).declarations;
+            return !!ts.length(declarations) && ts.every(declarations, ts.isDeprecatedDeclaration);
+        }
+        /**
+         * True if the first character of `lowercaseCharacters` is the first character
+         * of some "word" in `identiferString` (where the string is split into "words"
+         * by camelCase and snake_case segments), then if the remaining characters of
+         * `lowercaseCharacters` appear, in order, in the rest of `identifierString`.
+         *
+         * True:
+         * 'state' in 'useState'
+         * 'sae' in 'useState'
+         * 'viable' in 'ENVIRONMENT_VARIABLE'
+         *
+         * False:
+         * 'staet' in 'useState'
+         * 'tate' in 'useState'
+         * 'ment' in 'ENVIRONMENT_VARIABLE'
+         */
+        function charactersFuzzyMatchInString(identifierString, lowercaseCharacters) {
+            if (lowercaseCharacters.length === 0) {
+                return true;
+            }
+            var matchedFirstCharacter = false;
+            var prevChar;
+            var characterIndex = 0;
+            var len = identifierString.length;
+            for (var strIndex = 0; strIndex < len; strIndex++) {
+                var strChar = identifierString.charCodeAt(strIndex);
+                var testChar = lowercaseCharacters.charCodeAt(characterIndex);
+                if (strChar === testChar || strChar === toUpperCharCode(testChar)) {
+                    matchedFirstCharacter || (matchedFirstCharacter = prevChar === undefined || // Beginning of word
+                        97 /* a */ <= prevChar && prevChar <= 122 /* z */ && 65 /* A */ <= strChar && strChar <= 90 /* Z */ || // camelCase transition
+                        prevChar === 95 /* _ */ && strChar !== 95 /* _ */); // snake_case transition
+                    if (matchedFirstCharacter) {
+                        characterIndex++;
+                    }
+                    if (characterIndex === lowercaseCharacters.length) {
+                        return true;
+                    }
+                }
+                prevChar = strChar;
+            }
+            // Did not find all characters
+            return false;
+        }
+        function toUpperCharCode(charCode) {
+            if (97 /* a */ <= charCode && charCode <= 122 /* z */) {
+                return charCode - 32;
+            }
+            return charCode;
+        }
     })(Completions = ts.Completions || (ts.Completions = {}));
 })(ts || (ts = {}));
 var ts;
@@ -126273,10 +129165,11 @@
             if (!referenceEntries)
                 return undefined;
             var map = ts.arrayToMultiMap(referenceEntries.map(ts.FindAllReferences.toHighlightSpan), function (e) { return e.fileName; }, function (e) { return e.span; });
+            var getCanonicalFileName = ts.createGetCanonicalFileName(program.useCaseSensitiveFileNames());
             return ts.mapDefined(ts.arrayFrom(map.entries()), function (_a) {
                 var fileName = _a[0], highlightSpans = _a[1];
                 if (!sourceFilesSet.has(fileName)) {
-                    if (!program.redirectTargetsMap.has(fileName)) {
+                    if (!program.redirectTargetsMap.has(ts.toPath(fileName, program.getCurrentDirectory(), getCanonicalFileName))) {
                         return undefined;
                     }
                     var redirectTarget_1 = program.getSourceFile(fileName);
@@ -126293,44 +129186,44 @@
         }
         function getHighlightSpans(node, sourceFile) {
             switch (node.kind) {
-                case 98 /* IfKeyword */:
-                case 90 /* ElseKeyword */:
+                case 99 /* IfKeyword */:
+                case 91 /* ElseKeyword */:
                     return ts.isIfStatement(node.parent) ? getIfElseOccurrences(node.parent, sourceFile) : undefined;
-                case 104 /* ReturnKeyword */:
+                case 105 /* ReturnKeyword */:
                     return useParent(node.parent, ts.isReturnStatement, getReturnOccurrences);
-                case 108 /* ThrowKeyword */:
+                case 109 /* ThrowKeyword */:
                     return useParent(node.parent, ts.isThrowStatement, getThrowOccurrences);
-                case 110 /* TryKeyword */:
-                case 82 /* CatchKeyword */:
-                case 95 /* FinallyKeyword */:
-                    var tryStatement = node.kind === 82 /* CatchKeyword */ ? node.parent.parent : node.parent;
+                case 111 /* TryKeyword */:
+                case 83 /* CatchKeyword */:
+                case 96 /* FinallyKeyword */:
+                    var tryStatement = node.kind === 83 /* CatchKeyword */ ? node.parent.parent : node.parent;
                     return useParent(tryStatement, ts.isTryStatement, getTryCatchFinallyOccurrences);
-                case 106 /* SwitchKeyword */:
+                case 107 /* SwitchKeyword */:
                     return useParent(node.parent, ts.isSwitchStatement, getSwitchCaseDefaultOccurrences);
-                case 81 /* CaseKeyword */:
-                case 87 /* DefaultKeyword */: {
+                case 82 /* CaseKeyword */:
+                case 88 /* DefaultKeyword */: {
                     if (ts.isDefaultClause(node.parent) || ts.isCaseClause(node.parent)) {
                         return useParent(node.parent.parent.parent, ts.isSwitchStatement, getSwitchCaseDefaultOccurrences);
                     }
                     return undefined;
                 }
-                case 80 /* BreakKeyword */:
-                case 85 /* ContinueKeyword */:
+                case 81 /* BreakKeyword */:
+                case 86 /* ContinueKeyword */:
                     return useParent(node.parent, ts.isBreakOrContinueStatement, getBreakOrContinueStatementOccurrences);
-                case 96 /* ForKeyword */:
-                case 114 /* WhileKeyword */:
-                case 89 /* DoKeyword */:
+                case 97 /* ForKeyword */:
+                case 115 /* WhileKeyword */:
+                case 90 /* DoKeyword */:
                     return useParent(node.parent, function (n) { return ts.isIterationStatement(n, /*lookInLabeledStatements*/ true); }, getLoopBreakContinueOccurrences);
-                case 132 /* ConstructorKeyword */:
-                    return getFromAllDeclarations(ts.isConstructorDeclaration, [132 /* ConstructorKeyword */]);
-                case 134 /* GetKeyword */:
-                case 146 /* SetKeyword */:
-                    return getFromAllDeclarations(ts.isAccessor, [134 /* GetKeyword */, 146 /* SetKeyword */]);
-                case 130 /* AwaitKeyword */:
+                case 133 /* ConstructorKeyword */:
+                    return getFromAllDeclarations(ts.isConstructorDeclaration, [133 /* ConstructorKeyword */]);
+                case 135 /* GetKeyword */:
+                case 147 /* SetKeyword */:
+                    return getFromAllDeclarations(ts.isAccessor, [135 /* GetKeyword */, 147 /* SetKeyword */]);
+                case 131 /* AwaitKeyword */:
                     return useParent(node.parent, ts.isAwaitExpression, getAsyncAndAwaitOccurrences);
-                case 129 /* AsyncKeyword */:
+                case 130 /* AsyncKeyword */:
                     return highlightSpans(getAsyncAndAwaitOccurrences(node));
-                case 124 /* YieldKeyword */:
+                case 125 /* YieldKeyword */:
                     return highlightSpans(getYieldOccurrences(node));
                 default:
                     return ts.isModifierKind(node.kind) && (ts.isDeclaration(node.parent) || ts.isVariableStatement(node.parent))
@@ -126373,7 +129266,7 @@
             var child = throwStatement;
             while (child.parent) {
                 var parent = child.parent;
-                if (ts.isFunctionBlock(parent) || parent.kind === 298 /* SourceFile */) {
+                if (ts.isFunctionBlock(parent) || parent.kind === 300 /* SourceFile */) {
                     return parent;
                 }
                 // A throw-statement is only owned by a try-statement if the try-statement has
@@ -126405,16 +129298,16 @@
         function getBreakOrContinueOwner(statement) {
             return ts.findAncestor(statement, function (node) {
                 switch (node.kind) {
-                    case 245 /* SwitchStatement */:
-                        if (statement.kind === 241 /* ContinueStatement */) {
+                    case 247 /* SwitchStatement */:
+                        if (statement.kind === 243 /* ContinueStatement */) {
                             return false;
                         }
                     // falls through
-                    case 238 /* ForStatement */:
-                    case 239 /* ForInStatement */:
-                    case 240 /* ForOfStatement */:
-                    case 237 /* WhileStatement */:
-                    case 236 /* DoStatement */:
+                    case 240 /* ForStatement */:
+                    case 241 /* ForInStatement */:
+                    case 242 /* ForOfStatement */:
+                    case 239 /* WhileStatement */:
+                    case 238 /* DoStatement */:
                         return !statement.label || isLabeledBy(node, statement.label.escapedText);
                     default:
                         // Don't cross function boundaries.
@@ -126430,41 +129323,41 @@
             // Types of node whose children might have modifiers.
             var container = declaration.parent;
             switch (container.kind) {
-                case 258 /* ModuleBlock */:
-                case 298 /* SourceFile */:
-                case 231 /* Block */:
-                case 285 /* CaseClause */:
-                case 286 /* DefaultClause */:
+                case 260 /* ModuleBlock */:
+                case 300 /* SourceFile */:
+                case 233 /* Block */:
+                case 287 /* CaseClause */:
+                case 288 /* DefaultClause */:
                     // Container is either a class declaration or the declaration is a classDeclaration
                     if (modifierFlag & 128 /* Abstract */ && ts.isClassDeclaration(declaration)) {
-                        return __spreadArray(__spreadArray([], declaration.members), [declaration]);
+                        return __spreadArray(__spreadArray([], declaration.members, true), [declaration], false);
                     }
                     else {
                         return container.statements;
                     }
-                case 167 /* Constructor */:
-                case 166 /* MethodDeclaration */:
-                case 252 /* FunctionDeclaration */:
-                    return __spreadArray(__spreadArray([], container.parameters), (ts.isClassLike(container.parent) ? container.parent.members : []));
-                case 253 /* ClassDeclaration */:
-                case 222 /* ClassExpression */:
-                case 254 /* InterfaceDeclaration */:
-                case 178 /* TypeLiteral */:
+                case 169 /* Constructor */:
+                case 167 /* MethodDeclaration */:
+                case 254 /* FunctionDeclaration */:
+                    return __spreadArray(__spreadArray([], container.parameters, true), (ts.isClassLike(container.parent) ? container.parent.members : []), true);
+                case 255 /* ClassDeclaration */:
+                case 224 /* ClassExpression */:
+                case 256 /* InterfaceDeclaration */:
+                case 180 /* TypeLiteral */:
                     var nodes = container.members;
                     // If we're an accessibility modifier, we're in an instance member and should search
                     // the constructor's parameter list for instance members as well.
                     if (modifierFlag & (28 /* AccessibilityModifier */ | 64 /* Readonly */)) {
                         var constructor = ts.find(container.members, ts.isConstructorDeclaration);
                         if (constructor) {
-                            return __spreadArray(__spreadArray([], nodes), constructor.parameters);
+                            return __spreadArray(__spreadArray([], nodes, true), constructor.parameters, true);
                         }
                     }
                     else if (modifierFlag & 128 /* Abstract */) {
-                        return __spreadArray(__spreadArray([], nodes), [container]);
+                        return __spreadArray(__spreadArray([], nodes, true), [container], false);
                     }
                     return nodes;
                 // Syntactically invalid positions that the parser might produce anyway
-                case 201 /* ObjectLiteralExpression */:
+                case 203 /* ObjectLiteralExpression */:
                     return undefined;
                 default:
                     ts.Debug.assertNever(container, "Invalid container kind.");
@@ -126483,12 +129376,12 @@
         }
         function getLoopBreakContinueOccurrences(loopNode) {
             var keywords = [];
-            if (pushKeywordIf(keywords, loopNode.getFirstToken(), 96 /* ForKeyword */, 114 /* WhileKeyword */, 89 /* DoKeyword */)) {
+            if (pushKeywordIf(keywords, loopNode.getFirstToken(), 97 /* ForKeyword */, 115 /* WhileKeyword */, 90 /* DoKeyword */)) {
                 // If we succeeded and got a do-while loop, then start looking for a 'while' keyword.
-                if (loopNode.kind === 236 /* DoStatement */) {
+                if (loopNode.kind === 238 /* DoStatement */) {
                     var loopTokens = loopNode.getChildren();
                     for (var i = loopTokens.length - 1; i >= 0; i--) {
-                        if (pushKeywordIf(keywords, loopTokens[i], 114 /* WhileKeyword */)) {
+                        if (pushKeywordIf(keywords, loopTokens[i], 115 /* WhileKeyword */)) {
                             break;
                         }
                     }
@@ -126496,7 +129389,7 @@
             }
             ts.forEach(aggregateAllBreakAndContinueStatements(loopNode.statement), function (statement) {
                 if (ownsBreakOrContinueStatement(loopNode, statement)) {
-                    pushKeywordIf(keywords, statement.getFirstToken(), 80 /* BreakKeyword */, 85 /* ContinueKeyword */);
+                    pushKeywordIf(keywords, statement.getFirstToken(), 81 /* BreakKeyword */, 86 /* ContinueKeyword */);
                 }
             });
             return keywords;
@@ -126505,13 +129398,13 @@
             var owner = getBreakOrContinueOwner(breakOrContinueStatement);
             if (owner) {
                 switch (owner.kind) {
-                    case 238 /* ForStatement */:
-                    case 239 /* ForInStatement */:
-                    case 240 /* ForOfStatement */:
-                    case 236 /* DoStatement */:
-                    case 237 /* WhileStatement */:
+                    case 240 /* ForStatement */:
+                    case 241 /* ForInStatement */:
+                    case 242 /* ForOfStatement */:
+                    case 238 /* DoStatement */:
+                    case 239 /* WhileStatement */:
                         return getLoopBreakContinueOccurrences(owner);
-                    case 245 /* SwitchStatement */:
+                    case 247 /* SwitchStatement */:
                         return getSwitchCaseDefaultOccurrences(owner);
                 }
             }
@@ -126519,13 +129412,13 @@
         }
         function getSwitchCaseDefaultOccurrences(switchStatement) {
             var keywords = [];
-            pushKeywordIf(keywords, switchStatement.getFirstToken(), 106 /* SwitchKeyword */);
+            pushKeywordIf(keywords, switchStatement.getFirstToken(), 107 /* SwitchKeyword */);
             // Go through each clause in the switch statement, collecting the 'case'/'default' keywords.
             ts.forEach(switchStatement.caseBlock.clauses, function (clause) {
-                pushKeywordIf(keywords, clause.getFirstToken(), 81 /* CaseKeyword */, 87 /* DefaultKeyword */);
+                pushKeywordIf(keywords, clause.getFirstToken(), 82 /* CaseKeyword */, 88 /* DefaultKeyword */);
                 ts.forEach(aggregateAllBreakAndContinueStatements(clause), function (statement) {
                     if (ownsBreakOrContinueStatement(switchStatement, statement)) {
-                        pushKeywordIf(keywords, statement.getFirstToken(), 80 /* BreakKeyword */);
+                        pushKeywordIf(keywords, statement.getFirstToken(), 81 /* BreakKeyword */);
                     }
                 });
             });
@@ -126533,13 +129426,13 @@
         }
         function getTryCatchFinallyOccurrences(tryStatement, sourceFile) {
             var keywords = [];
-            pushKeywordIf(keywords, tryStatement.getFirstToken(), 110 /* TryKeyword */);
+            pushKeywordIf(keywords, tryStatement.getFirstToken(), 111 /* TryKeyword */);
             if (tryStatement.catchClause) {
-                pushKeywordIf(keywords, tryStatement.catchClause.getFirstToken(), 82 /* CatchKeyword */);
+                pushKeywordIf(keywords, tryStatement.catchClause.getFirstToken(), 83 /* CatchKeyword */);
             }
             if (tryStatement.finallyBlock) {
-                var finallyKeyword = ts.findChildOfKind(tryStatement, 95 /* FinallyKeyword */, sourceFile);
-                pushKeywordIf(keywords, finallyKeyword, 95 /* FinallyKeyword */);
+                var finallyKeyword = ts.findChildOfKind(tryStatement, 96 /* FinallyKeyword */, sourceFile);
+                pushKeywordIf(keywords, finallyKeyword, 96 /* FinallyKeyword */);
             }
             return keywords;
         }
@@ -126550,13 +129443,13 @@
             }
             var keywords = [];
             ts.forEach(aggregateOwnedThrowStatements(owner), function (throwStatement) {
-                keywords.push(ts.findChildOfKind(throwStatement, 108 /* ThrowKeyword */, sourceFile));
+                keywords.push(ts.findChildOfKind(throwStatement, 109 /* ThrowKeyword */, sourceFile));
             });
             // If the "owner" is a function, then we equate 'return' and 'throw' statements in their
             // ability to "jump out" of the function, and include occurrences for both.
             if (ts.isFunctionBlock(owner)) {
                 ts.forEachReturnStatement(owner, function (returnStatement) {
-                    keywords.push(ts.findChildOfKind(returnStatement, 104 /* ReturnKeyword */, sourceFile));
+                    keywords.push(ts.findChildOfKind(returnStatement, 105 /* ReturnKeyword */, sourceFile));
                 });
             }
             return keywords;
@@ -126568,11 +129461,11 @@
             }
             var keywords = [];
             ts.forEachReturnStatement(ts.cast(func.body, ts.isBlock), function (returnStatement) {
-                keywords.push(ts.findChildOfKind(returnStatement, 104 /* ReturnKeyword */, sourceFile));
+                keywords.push(ts.findChildOfKind(returnStatement, 105 /* ReturnKeyword */, sourceFile));
             });
             // Include 'throw' statements that do not occur within a try block.
             ts.forEach(aggregateOwnedThrowStatements(func.body), function (throwStatement) {
-                keywords.push(ts.findChildOfKind(throwStatement, 108 /* ThrowKeyword */, sourceFile));
+                keywords.push(ts.findChildOfKind(throwStatement, 109 /* ThrowKeyword */, sourceFile));
             });
             return keywords;
         }
@@ -126584,13 +129477,13 @@
             var keywords = [];
             if (func.modifiers) {
                 func.modifiers.forEach(function (modifier) {
-                    pushKeywordIf(keywords, modifier, 129 /* AsyncKeyword */);
+                    pushKeywordIf(keywords, modifier, 130 /* AsyncKeyword */);
                 });
             }
             ts.forEachChild(func, function (child) {
                 traverseWithoutCrossingFunction(child, function (node) {
                     if (ts.isAwaitExpression(node)) {
-                        pushKeywordIf(keywords, node.getFirstToken(), 130 /* AwaitKeyword */);
+                        pushKeywordIf(keywords, node.getFirstToken(), 131 /* AwaitKeyword */);
                     }
                 });
             });
@@ -126605,7 +129498,7 @@
             ts.forEachChild(func, function (child) {
                 traverseWithoutCrossingFunction(child, function (node) {
                     if (ts.isYieldExpression(node)) {
-                        pushKeywordIf(keywords, node.getFirstToken(), 124 /* YieldKeyword */);
+                        pushKeywordIf(keywords, node.getFirstToken(), 125 /* YieldKeyword */);
                     }
                 });
             });
@@ -126624,7 +129517,7 @@
             // We'd like to highlight else/ifs together if they are only separated by whitespace
             // (i.e. the keywords are separated by no comments, no newlines).
             for (var i = 0; i < keywords.length; i++) {
-                if (keywords[i].kind === 90 /* ElseKeyword */ && i < keywords.length - 1) {
+                if (keywords[i].kind === 91 /* ElseKeyword */ && i < keywords.length - 1) {
                     var elseKeyword = keywords[i];
                     var ifKeyword = keywords[i + 1]; // this *should* always be an 'if' keyword.
                     var shouldCombineElseAndIf = true;
@@ -126659,10 +129552,10 @@
             // Now traverse back down through the else branches, aggregating if/else keywords of if-statements.
             while (true) {
                 var children = ifStatement.getChildren(sourceFile);
-                pushKeywordIf(keywords, children[0], 98 /* IfKeyword */);
+                pushKeywordIf(keywords, children[0], 99 /* IfKeyword */);
                 // Generally the 'else' keyword is second-to-last, so we traverse backwards.
                 for (var i = children.length - 1; i >= 0; i--) {
-                    if (pushKeywordIf(keywords, children[i], 90 /* ElseKeyword */)) {
+                    if (pushKeywordIf(keywords, children[i], 91 /* ElseKeyword */)) {
                         break;
                     }
                 }
@@ -126920,43 +129813,43 @@
                         if (cancellationToken)
                             cancellationToken.throwIfCancellationRequested();
                         switch (direct.kind) {
-                            case 204 /* CallExpression */:
+                            case 206 /* CallExpression */:
                                 if (ts.isImportCall(direct)) {
                                     handleImportCall(direct);
                                     break;
                                 }
                                 if (!isAvailableThroughGlobal) {
                                     var parent = direct.parent;
-                                    if (exportKind === 2 /* ExportEquals */ && parent.kind === 250 /* VariableDeclaration */) {
+                                    if (exportKind === 2 /* ExportEquals */ && parent.kind === 252 /* VariableDeclaration */) {
                                         var name = parent.name;
-                                        if (name.kind === 78 /* Identifier */) {
+                                        if (name.kind === 79 /* Identifier */) {
                                             directImports.push(name);
                                             break;
                                         }
                                     }
                                 }
                                 break;
-                            case 78 /* Identifier */: // for 'const x = require("y");
+                            case 79 /* Identifier */: // for 'const x = require("y");
                                 break; // TODO: GH#23879
-                            case 261 /* ImportEqualsDeclaration */:
+                            case 263 /* ImportEqualsDeclaration */:
                                 handleNamespaceImport(direct, direct.name, ts.hasSyntacticModifier(direct, 1 /* Export */), /*alreadyAddedDirect*/ false);
                                 break;
-                            case 262 /* ImportDeclaration */:
+                            case 264 /* ImportDeclaration */:
                                 directImports.push(direct);
                                 var namedBindings = direct.importClause && direct.importClause.namedBindings;
-                                if (namedBindings && namedBindings.kind === 264 /* NamespaceImport */) {
+                                if (namedBindings && namedBindings.kind === 266 /* NamespaceImport */) {
                                     handleNamespaceImport(direct, namedBindings.name, /*isReExport*/ false, /*alreadyAddedDirect*/ true);
                                 }
                                 else if (!isAvailableThroughGlobal && ts.isDefaultImport(direct)) {
                                     addIndirectUser(getSourceFileLikeForImportDeclaration(direct)); // Add a check for indirect uses to handle synthetic default imports
                                 }
                                 break;
-                            case 268 /* ExportDeclaration */:
+                            case 270 /* ExportDeclaration */:
                                 if (!direct.exportClause) {
                                     // This is `export * from "foo"`, so imports of this module may import the export too.
                                     handleDirectImports(getContainingModuleSymbol(direct, checker));
                                 }
-                                else if (direct.exportClause.kind === 270 /* NamespaceExport */) {
+                                else if (direct.exportClause.kind === 272 /* NamespaceExport */) {
                                     // `export * as foo from "foo"` add to indirect uses
                                     addIndirectUser(getSourceFileLikeForImportDeclaration(direct), /** addTransitiveDependencies */ true);
                                 }
@@ -126965,7 +129858,7 @@
                                     directImports.push(direct);
                                 }
                                 break;
-                            case 196 /* ImportType */:
+                            case 198 /* ImportType */:
                                 // Only check for typeof import('xyz')
                                 if (direct.isTypeOf && !direct.qualifier && isExported(direct)) {
                                     addIndirectUser(direct.getSourceFile(), /** addTransitiveDependencies */ true);
@@ -126987,7 +129880,7 @@
                 return ts.findAncestor(node, function (node) {
                     if (stopAtAmbientModule && isAmbientModuleDeclaration(node))
                         return "quit";
-                    return ts.some(node.modifiers, function (mod) { return mod.kind === 92 /* ExportKeyword */; });
+                    return ts.some(node.modifiers, function (mod) { return mod.kind === 93 /* ExportKeyword */; });
                 });
             }
             function handleNamespaceImport(importDeclaration, name, isReExport, alreadyAddedDirect) {
@@ -126998,7 +129891,7 @@
                 }
                 else if (!isAvailableThroughGlobal) {
                     var sourceFileLike = getSourceFileLikeForImportDeclaration(importDeclaration);
-                    ts.Debug.assert(sourceFileLike.kind === 298 /* SourceFile */ || sourceFileLike.kind === 257 /* ModuleDeclaration */);
+                    ts.Debug.assert(sourceFileLike.kind === 300 /* SourceFile */ || sourceFileLike.kind === 259 /* ModuleDeclaration */);
                     if (isReExport || findNamespaceReExports(sourceFileLike, name, checker)) {
                         addIndirectUser(sourceFileLike, /** addTransitiveDependencies */ true);
                     }
@@ -127054,17 +129947,17 @@
             }
             return { importSearches: importSearches, singleReferences: singleReferences };
             function handleImport(decl) {
-                if (decl.kind === 261 /* ImportEqualsDeclaration */) {
+                if (decl.kind === 263 /* ImportEqualsDeclaration */) {
                     if (isExternalModuleImportEquals(decl)) {
                         handleNamespaceImportLike(decl.name);
                     }
                     return;
                 }
-                if (decl.kind === 78 /* Identifier */) {
+                if (decl.kind === 79 /* Identifier */) {
                     handleNamespaceImportLike(decl);
                     return;
                 }
-                if (decl.kind === 196 /* ImportType */) {
+                if (decl.kind === 198 /* ImportType */) {
                     if (decl.qualifier) {
                         var firstIdentifier = ts.getFirstIdentifier(decl.qualifier);
                         if (firstIdentifier.escapedText === ts.symbolName(exportSymbol)) {
@@ -127080,7 +129973,7 @@
                 if (decl.moduleSpecifier.kind !== 10 /* StringLiteral */) {
                     return;
                 }
-                if (decl.kind === 268 /* ExportDeclaration */) {
+                if (decl.kind === 270 /* ExportDeclaration */) {
                     if (decl.exportClause && ts.isNamedExports(decl.exportClause)) {
                         searchForNamedImport(decl.exportClause);
                     }
@@ -127089,10 +129982,10 @@
                 var _a = decl.importClause || { name: undefined, namedBindings: undefined }, name = _a.name, namedBindings = _a.namedBindings;
                 if (namedBindings) {
                     switch (namedBindings.kind) {
-                        case 264 /* NamespaceImport */:
+                        case 266 /* NamespaceImport */:
                             handleNamespaceImportLike(namedBindings.name);
                             break;
-                        case 265 /* NamedImports */:
+                        case 267 /* NamedImports */:
                             // 'default' might be accessed as a named import `{ default as foo }`.
                             if (exportKind === 0 /* Named */ || exportKind === 1 /* Default */) {
                                 searchForNamedImport(namedBindings);
@@ -127142,7 +130035,7 @@
                         }
                     }
                     else {
-                        var localSymbol = element.kind === 271 /* ExportSpecifier */ && element.propertyName
+                        var localSymbol = element.kind === 273 /* ExportSpecifier */ && element.propertyName
                             ? checker.getExportSpecifierLocalTargetSymbol(element) // For re-exporting under a different name, we want to get the re-exported symbol.
                             : checker.getSymbolAtLocation(name);
                         addSearch(name, localSymbol);
@@ -127171,7 +130064,7 @@
             for (var _i = 0, sourceFiles_1 = sourceFiles; _i < sourceFiles_1.length; _i++) {
                 var referencingFile = sourceFiles_1[_i];
                 var searchSourceFile = searchModuleSymbol.valueDeclaration;
-                if ((searchSourceFile === null || searchSourceFile === void 0 ? void 0 : searchSourceFile.kind) === 298 /* SourceFile */) {
+                if ((searchSourceFile === null || searchSourceFile === void 0 ? void 0 : searchSourceFile.kind) === 300 /* SourceFile */) {
                     for (var _a = 0, _b = referencingFile.referencedFiles; _a < _b.length; _a++) {
                         var ref = _b[_a];
                         if (program.getSourceFileFromReference(referencingFile, ref) === searchSourceFile) {
@@ -127219,7 +130112,7 @@
         }
         /** Iterates over all statements at the top level or in module declarations. Returns the first truthy result. */
         function forEachPossibleImportOrExportStatement(sourceFileLike, action) {
-            return ts.forEach(sourceFileLike.kind === 298 /* SourceFile */ ? sourceFileLike.statements : sourceFileLike.body.statements, function (statement) {
+            return ts.forEach(sourceFileLike.kind === 300 /* SourceFile */ ? sourceFileLike.statements : sourceFileLike.body.statements, function (statement) {
                 return action(statement) || (isAmbientModuleDeclaration(statement) && ts.forEach(statement.body && statement.body.statements, action));
             });
         }
@@ -127234,15 +130127,15 @@
             else {
                 forEachPossibleImportOrExportStatement(sourceFile, function (statement) {
                     switch (statement.kind) {
-                        case 268 /* ExportDeclaration */:
-                        case 262 /* ImportDeclaration */: {
+                        case 270 /* ExportDeclaration */:
+                        case 264 /* ImportDeclaration */: {
                             var decl = statement;
                             if (decl.moduleSpecifier && ts.isStringLiteral(decl.moduleSpecifier)) {
                                 action(decl, decl.moduleSpecifier);
                             }
                             break;
                         }
-                        case 261 /* ImportEqualsDeclaration */: {
+                        case 263 /* ImportEqualsDeclaration */: {
                             var decl = statement;
                             if (isExternalModuleImportEquals(decl)) {
                                 action(decl, decl.moduleReference.expression);
@@ -127267,7 +130160,7 @@
                 var parent = node.parent;
                 var grandparent = parent.parent;
                 if (symbol.exportSymbol) {
-                    if (parent.kind === 202 /* PropertyAccessExpression */) {
+                    if (parent.kind === 204 /* PropertyAccessExpression */) {
                         // When accessing an export of a JS module, there's no alias. The symbol will still be flagged as an export even though we're at the use.
                         // So check that we are at the declaration.
                         return ((_a = symbol.declarations) === null || _a === void 0 ? void 0 : _a.some(function (d) { return d === parent; })) && ts.isBinaryExpression(grandparent)
@@ -127401,16 +130294,16 @@
         function isNodeImport(node) {
             var parent = node.parent;
             switch (parent.kind) {
-                case 261 /* ImportEqualsDeclaration */:
+                case 263 /* ImportEqualsDeclaration */:
                     return parent.name === node && isExternalModuleImportEquals(parent);
-                case 266 /* ImportSpecifier */:
+                case 268 /* ImportSpecifier */:
                     // For a rename import `{ foo as bar }`, don't search for the imported symbol. Just find local uses of `bar`.
                     return !parent.propertyName;
-                case 263 /* ImportClause */:
-                case 264 /* NamespaceImport */:
+                case 265 /* ImportClause */:
+                case 266 /* NamespaceImport */:
                     ts.Debug.assert(parent.name === node);
                     return true;
-                case 199 /* BindingElement */:
+                case 201 /* BindingElement */:
                     return ts.isInJSFile(node) && ts.isRequireVariableDeclaration(parent);
                 default:
                     return false;
@@ -127451,21 +130344,21 @@
             return checker.getMergedSymbol(getSourceFileLikeForImportDeclaration(importer).symbol);
         }
         function getSourceFileLikeForImportDeclaration(node) {
-            if (node.kind === 204 /* CallExpression */) {
+            if (node.kind === 206 /* CallExpression */) {
                 return node.getSourceFile();
             }
             var parent = node.parent;
-            if (parent.kind === 298 /* SourceFile */) {
+            if (parent.kind === 300 /* SourceFile */) {
                 return parent;
             }
-            ts.Debug.assert(parent.kind === 258 /* ModuleBlock */);
+            ts.Debug.assert(parent.kind === 260 /* ModuleBlock */);
             return ts.cast(parent.parent, isAmbientModuleDeclaration);
         }
         function isAmbientModuleDeclaration(node) {
-            return node.kind === 257 /* ModuleDeclaration */ && node.name.kind === 10 /* StringLiteral */;
+            return node.kind === 259 /* ModuleDeclaration */ && node.name.kind === 10 /* StringLiteral */;
         }
         function isExternalModuleImportEquals(eq) {
-            return eq.moduleReference.kind === 273 /* ExternalModuleReference */ && eq.moduleReference.expression.kind === 10 /* StringLiteral */;
+            return eq.moduleReference.kind === 275 /* ExternalModuleReference */ && eq.moduleReference.expression.kind === 10 /* StringLiteral */;
         }
     })(FindAllReferences = ts.FindAllReferences || (ts.FindAllReferences = {}));
 })(ts || (ts = {}));
@@ -127559,7 +130452,7 @@
                 ((ts.isImportOrExportSpecifier(node.parent) || ts.isBindingElement(node.parent))
                     && node.parent.propertyName === node) ||
                 // Is default export
-                (node.kind === 87 /* DefaultKeyword */ && ts.hasSyntacticModifier(node.parent, 513 /* ExportDefault */))) {
+                (node.kind === 88 /* DefaultKeyword */ && ts.hasSyntacticModifier(node.parent, 513 /* ExportDefault */))) {
                 return getContextNode(node.parent);
             }
             return undefined;
@@ -127568,7 +130461,7 @@
             if (!node)
                 return undefined;
             switch (node.kind) {
-                case 250 /* VariableDeclaration */:
+                case 252 /* VariableDeclaration */:
                     return !ts.isVariableDeclarationList(node.parent) || node.parent.declarations.length !== 1 ?
                         node :
                         ts.isVariableStatement(node.parent.parent) ?
@@ -127576,28 +130469,28 @@
                             ts.isForInOrOfStatement(node.parent.parent) ?
                                 getContextNode(node.parent.parent) :
                                 node.parent;
-                case 199 /* BindingElement */:
+                case 201 /* BindingElement */:
                     return getContextNode(node.parent.parent);
-                case 266 /* ImportSpecifier */:
+                case 268 /* ImportSpecifier */:
                     return node.parent.parent.parent;
-                case 271 /* ExportSpecifier */:
-                case 264 /* NamespaceImport */:
+                case 273 /* ExportSpecifier */:
+                case 266 /* NamespaceImport */:
                     return node.parent.parent;
-                case 263 /* ImportClause */:
-                case 270 /* NamespaceExport */:
+                case 265 /* ImportClause */:
+                case 272 /* NamespaceExport */:
                     return node.parent;
-                case 217 /* BinaryExpression */:
+                case 219 /* BinaryExpression */:
                     return ts.isExpressionStatement(node.parent) ?
                         node.parent :
                         node;
-                case 240 /* ForOfStatement */:
-                case 239 /* ForInStatement */:
+                case 242 /* ForOfStatement */:
+                case 241 /* ForInStatement */:
                     return {
                         start: node.initializer,
                         end: node.expression
                     };
-                case 289 /* PropertyAssignment */:
-                case 290 /* ShorthandPropertyAssignment */:
+                case 291 /* PropertyAssignment */:
+                case 292 /* ShorthandPropertyAssignment */:
                     return ts.isArrayLiteralOrObjectLiteralDestructuringPattern(node.parent) ?
                         getContextNode(ts.findAncestor(node.parent, function (node) {
                             return ts.isBinaryExpression(node) || ts.isForInOrOfStatement(node);
@@ -127654,14 +130547,14 @@
             var node = ts.getTouchingPropertyName(sourceFile, position);
             var referenceEntries;
             var entries = getImplementationReferenceEntries(program, cancellationToken, sourceFiles, node, position);
-            if (node.parent.kind === 202 /* PropertyAccessExpression */
-                || node.parent.kind === 199 /* BindingElement */
-                || node.parent.kind === 203 /* ElementAccessExpression */
-                || node.kind === 105 /* SuperKeyword */) {
-                referenceEntries = entries && __spreadArray([], entries);
+            if (node.parent.kind === 204 /* PropertyAccessExpression */
+                || node.parent.kind === 201 /* BindingElement */
+                || node.parent.kind === 205 /* ElementAccessExpression */
+                || node.kind === 106 /* SuperKeyword */) {
+                referenceEntries = entries && __spreadArray([], entries, true);
             }
             else {
-                var queue = entries && __spreadArray([], entries);
+                var queue = entries && __spreadArray([], entries, true);
                 var seenNodes = new ts.Map();
                 while (queue && queue.length) {
                     var entry = queue.shift();
@@ -127680,18 +130573,18 @@
         }
         FindAllReferences.getImplementationsAtPosition = getImplementationsAtPosition;
         function getImplementationReferenceEntries(program, cancellationToken, sourceFiles, node, position) {
-            if (node.kind === 298 /* SourceFile */) {
+            if (node.kind === 300 /* SourceFile */) {
                 return undefined;
             }
             var checker = program.getTypeChecker();
             // If invoked directly on a shorthand property assignment, then return
             // the declaration of the symbol being assigned (not the symbol being assigned to).
-            if (node.parent.kind === 290 /* ShorthandPropertyAssignment */) {
-                var result_1 = [];
-                Core.getReferenceEntriesForShorthandPropertyAssignment(node, checker, function (node) { return result_1.push(nodeEntry(node)); });
-                return result_1;
+            if (node.parent.kind === 292 /* ShorthandPropertyAssignment */) {
+                var result_2 = [];
+                Core.getReferenceEntriesForShorthandPropertyAssignment(node, checker, function (node) { return result_2.push(nodeEntry(node)); });
+                return result_2;
             }
-            else if (node.kind === 105 /* SuperKeyword */ || ts.isSuperProperty(node.parent)) {
+            else if (node.kind === 106 /* SuperKeyword */ || ts.isSuperProperty(node.parent)) {
                 // References to and accesses on the super keyword only have one possible implementation, so no
                 // need to "Find all References"
                 var symbol = checker.getSymbolAtLocation(node);
@@ -127856,13 +130749,13 @@
             if (symbol) {
                 return getDefinitionKindAndDisplayParts(symbol, checker, node);
             }
-            else if (node.kind === 201 /* ObjectLiteralExpression */) {
+            else if (node.kind === 203 /* ObjectLiteralExpression */) {
                 return {
                     kind: "interface" /* interfaceElement */,
                     displayParts: [ts.punctuationPart(20 /* OpenParenToken */), ts.textPart("object literal"), ts.punctuationPart(21 /* CloseParenToken */)]
                 };
             }
-            else if (node.kind === 222 /* ClassExpression */) {
+            else if (node.kind === 224 /* ClassExpression */) {
                 return {
                     kind: "local class" /* localClassElement */,
                     displayParts: [ts.punctuationPart(20 /* OpenParenToken */), ts.textPart("anonymous local class"), ts.punctuationPart(21 /* CloseParenToken */)]
@@ -127906,13 +130799,13 @@
         /** A node is considered a writeAccess iff it is a name of a declaration or a target of an assignment */
         function isWriteAccessForReference(node) {
             var decl = ts.getDeclarationFromName(node);
-            return !!decl && declarationIsWriteAccess(decl) || node.kind === 87 /* DefaultKeyword */ || ts.isWriteAccess(node);
+            return !!decl && declarationIsWriteAccess(decl) || node.kind === 88 /* DefaultKeyword */ || ts.isWriteAccess(node);
         }
         function isDefinitionForReference(node) {
-            return node.kind === 87 /* DefaultKeyword */
+            return node.kind === 88 /* DefaultKeyword */
                 || !!ts.getDeclarationFromName(node)
                 || ts.isLiteralComputedPropertyDeclarationName(node)
-                || (node.kind === 132 /* ConstructorKeyword */ && ts.isConstructorDeclaration(node.parent));
+                || (node.kind === 133 /* ConstructorKeyword */ && ts.isConstructorDeclaration(node.parent));
         }
         /**
          * True if 'decl' provides a value, as in `function f() {}`;
@@ -127923,47 +130816,47 @@
             if (!!(decl.flags & 8388608 /* Ambient */))
                 return true;
             switch (decl.kind) {
-                case 217 /* BinaryExpression */:
-                case 199 /* BindingElement */:
-                case 253 /* ClassDeclaration */:
-                case 222 /* ClassExpression */:
-                case 87 /* DefaultKeyword */:
-                case 256 /* EnumDeclaration */:
-                case 292 /* EnumMember */:
-                case 271 /* ExportSpecifier */:
-                case 263 /* ImportClause */: // default import
-                case 261 /* ImportEqualsDeclaration */:
-                case 266 /* ImportSpecifier */:
-                case 254 /* InterfaceDeclaration */:
-                case 328 /* JSDocCallbackTag */:
-                case 335 /* JSDocTypedefTag */:
-                case 281 /* JsxAttribute */:
-                case 257 /* ModuleDeclaration */:
-                case 260 /* NamespaceExportDeclaration */:
-                case 264 /* NamespaceImport */:
-                case 270 /* NamespaceExport */:
-                case 161 /* Parameter */:
-                case 290 /* ShorthandPropertyAssignment */:
-                case 255 /* TypeAliasDeclaration */:
-                case 160 /* TypeParameter */:
+                case 219 /* BinaryExpression */:
+                case 201 /* BindingElement */:
+                case 255 /* ClassDeclaration */:
+                case 224 /* ClassExpression */:
+                case 88 /* DefaultKeyword */:
+                case 258 /* EnumDeclaration */:
+                case 294 /* EnumMember */:
+                case 273 /* ExportSpecifier */:
+                case 265 /* ImportClause */: // default import
+                case 263 /* ImportEqualsDeclaration */:
+                case 268 /* ImportSpecifier */:
+                case 256 /* InterfaceDeclaration */:
+                case 333 /* JSDocCallbackTag */:
+                case 340 /* JSDocTypedefTag */:
+                case 283 /* JsxAttribute */:
+                case 259 /* ModuleDeclaration */:
+                case 262 /* NamespaceExportDeclaration */:
+                case 266 /* NamespaceImport */:
+                case 272 /* NamespaceExport */:
+                case 162 /* Parameter */:
+                case 292 /* ShorthandPropertyAssignment */:
+                case 257 /* TypeAliasDeclaration */:
+                case 161 /* TypeParameter */:
                     return true;
-                case 289 /* PropertyAssignment */:
+                case 291 /* PropertyAssignment */:
                     // In `({ x: y } = 0);`, `x` is not a write access. (Won't call this function for `y`.)
                     return !ts.isArrayLiteralOrObjectLiteralDestructuringPattern(decl.parent);
-                case 252 /* FunctionDeclaration */:
-                case 209 /* FunctionExpression */:
-                case 167 /* Constructor */:
-                case 166 /* MethodDeclaration */:
-                case 168 /* GetAccessor */:
-                case 169 /* SetAccessor */:
+                case 254 /* FunctionDeclaration */:
+                case 211 /* FunctionExpression */:
+                case 169 /* Constructor */:
+                case 167 /* MethodDeclaration */:
+                case 170 /* GetAccessor */:
+                case 171 /* SetAccessor */:
                     return !!decl.body;
-                case 250 /* VariableDeclaration */:
-                case 164 /* PropertyDeclaration */:
+                case 252 /* VariableDeclaration */:
+                case 165 /* PropertyDeclaration */:
                     return !!decl.initializer || ts.isCatchClause(decl.parent);
-                case 165 /* MethodSignature */:
-                case 163 /* PropertySignature */:
-                case 337 /* JSDocPropertyTag */:
-                case 330 /* JSDocParameterTag */:
+                case 166 /* MethodSignature */:
+                case 164 /* PropertySignature */:
+                case 342 /* JSDocPropertyTag */:
+                case 335 /* JSDocParameterTag */:
                     return false;
                 default:
                     return ts.Debug.failBadSyntaxKind(decl);
@@ -128184,10 +131077,10 @@
                     for (var _i = 0, _a = symbol.declarations; _i < _a.length; _i++) {
                         var decl = _a[_i];
                         switch (decl.kind) {
-                            case 298 /* SourceFile */:
+                            case 300 /* SourceFile */:
                                 // Don't include the source file itself. (This may not be ideal behavior, but awkward to include an entire file as a reference.)
                                 break;
-                            case 257 /* ModuleDeclaration */:
+                            case 259 /* ModuleDeclaration */:
                                 if (sourceFilesSet.has(decl.getSourceFile().fileName)) {
                                     references.push(nodeEntry(decl.name));
                                 }
@@ -128206,7 +131099,7 @@
                         if (sourceFilesSet.has(sourceFile.fileName)) {
                             // At `module.exports = ...`, reference node is `module`
                             var node = ts.isBinaryExpression(decl) && ts.isPropertyAccessExpression(decl.left) ? decl.left.expression :
-                                ts.isExportAssignment(decl) ? ts.Debug.checkDefined(ts.findChildOfKind(decl, 92 /* ExportKeyword */, sourceFile)) :
+                                ts.isExportAssignment(decl) ? ts.Debug.checkDefined(ts.findChildOfKind(decl, 93 /* ExportKeyword */, sourceFile)) :
                                     ts.getNameOfDeclaration(decl) || decl;
                             references.push(nodeEntry(node));
                         }
@@ -128216,25 +131109,28 @@
             }
             /** As in a `readonly prop: any` or `constructor(readonly prop: any)`, not a `readonly any[]`. */
             function isReadonlyTypeOperator(node) {
-                return node.kind === 142 /* ReadonlyKeyword */
+                return node.kind === 143 /* ReadonlyKeyword */
                     && ts.isTypeOperatorNode(node.parent)
-                    && node.parent.operator === 142 /* ReadonlyKeyword */;
+                    && node.parent.operator === 143 /* ReadonlyKeyword */;
             }
             /** getReferencedSymbols for special node kinds. */
             function getReferencedSymbolsSpecial(node, sourceFiles, cancellationToken) {
                 if (ts.isTypeKeyword(node.kind)) {
                     // A void expression (i.e., `void foo()`) is not special, but the `void` type is.
-                    if (node.kind === 113 /* VoidKeyword */ && ts.isVoidExpression(node.parent)) {
+                    if (node.kind === 114 /* VoidKeyword */ && ts.isVoidExpression(node.parent)) {
                         return undefined;
                     }
                     // A modifier readonly (like on a property declaration) is not special;
                     // a readonly type keyword (like `readonly string[]`) is.
-                    if (node.kind === 142 /* ReadonlyKeyword */ && !isReadonlyTypeOperator(node)) {
+                    if (node.kind === 143 /* ReadonlyKeyword */ && !isReadonlyTypeOperator(node)) {
                         return undefined;
                     }
                     // Likewise, when we *are* looking for a special keyword, make sure we
                     // *don’t* include readonly member modifiers.
-                    return getAllReferencesForKeyword(sourceFiles, node.kind, cancellationToken, node.kind === 142 /* ReadonlyKeyword */ ? isReadonlyTypeOperator : undefined);
+                    return getAllReferencesForKeyword(sourceFiles, node.kind, cancellationToken, node.kind === 143 /* ReadonlyKeyword */ ? isReadonlyTypeOperator : undefined);
+                }
+                if (ts.isStaticModifier(node) && ts.isClassStaticBlockDeclaration(node.parent)) {
+                    return [{ definition: { type: 2 /* Keyword */, node: node }, references: [nodeEntry(node)] }];
                 }
                 // Labels
                 if (ts.isJumpStatementTarget(node)) {
@@ -128250,7 +131146,7 @@
                 if (ts.isThis(node)) {
                     return getReferencesForThisKeyword(node, sourceFiles, cancellationToken);
                 }
-                if (node.kind === 105 /* SuperKeyword */) {
+                if (node.kind === 106 /* SuperKeyword */) {
                     return getReferencesForSuperKeyword(node);
                 }
                 return undefined;
@@ -128267,7 +131163,7 @@
                     // When renaming at an export specifier, rename the export and not the thing being exported.
                     getReferencesAtExportSpecifier(exportSpecifier.name, symbol, exportSpecifier, state.createSearch(node, originalSymbol, /*comingFrom*/ undefined), state, /*addReferencesHere*/ true, /*alwaysGetReferences*/ true);
                 }
-                else if (node && node.kind === 87 /* DefaultKeyword */ && symbol.escapedName === "default" /* Default */ && symbol.parent) {
+                else if (node && node.kind === 88 /* DefaultKeyword */ && symbol.escapedName === "default" /* Default */ && symbol.parent) {
                     addReference(node, symbol, state);
                     searchForImportsOfExport(node, symbol, { exportingModuleSymbol: symbol.parent, exportKind: 1 /* Default */ }, state);
                 }
@@ -128295,10 +131191,10 @@
             }
             function getSpecialSearchKind(node) {
                 switch (node.kind) {
-                    case 167 /* Constructor */:
-                    case 132 /* ConstructorKeyword */:
+                    case 169 /* Constructor */:
+                    case 133 /* ConstructorKeyword */:
                         return 1 /* Constructor */;
-                    case 78 /* Identifier */:
+                    case 79 /* Identifier */:
                         if (ts.isClassLike(node.parent)) {
                             ts.Debug.assert(node.parent.name === node);
                             return 2 /* Class */;
@@ -128538,7 +131434,7 @@
                 // If this is the symbol of a named function expression or named class expression,
                 // then named references are limited to its own scope.
                 var declarations = symbol.declarations, flags = symbol.flags, parent = symbol.parent, valueDeclaration = symbol.valueDeclaration;
-                if (valueDeclaration && (valueDeclaration.kind === 209 /* FunctionExpression */ || valueDeclaration.kind === 222 /* ClassExpression */)) {
+                if (valueDeclaration && (valueDeclaration.kind === 211 /* FunctionExpression */ || valueDeclaration.kind === 224 /* ClassExpression */)) {
                     return valueDeclaration;
                 }
                 if (!declarations) {
@@ -128548,7 +131444,7 @@
                 if (flags & (4 /* Property */ | 8192 /* Method */)) {
                     var privateDeclaration = ts.find(declarations, function (d) { return ts.hasEffectiveModifier(d, 8 /* Private */) || ts.isPrivateIdentifierClassElementDeclaration(d); });
                     if (privateDeclaration) {
-                        return ts.getAncestor(privateDeclaration, 253 /* ClassDeclaration */);
+                        return ts.getAncestor(privateDeclaration, 255 /* ClassDeclaration */);
                     }
                     // Else this is a public property and could be accessed from anywhere.
                     return undefined;
@@ -128577,7 +131473,7 @@
                         // Different declarations have different containers, bail out
                         return undefined;
                     }
-                    if (!container || container.kind === 298 /* SourceFile */ && !ts.isExternalOrCommonJsModule(container)) {
+                    if (!container || container.kind === 300 /* SourceFile */ && !ts.isExternalOrCommonJsModule(container)) {
                         // This is a global variable and not an external module, any declaration defined
                         // within this scope is visible outside the file
                         return undefined;
@@ -128693,8 +131589,12 @@
             function isValidReferencePosition(node, searchSymbolName) {
                 // Compare the length so we filter out strict superstrings of the symbol we are looking for
                 switch (node.kind) {
-                    case 79 /* PrivateIdentifier */:
-                    case 78 /* Identifier */:
+                    case 80 /* PrivateIdentifier */:
+                        if (ts.isJSDocMemberName(node.parent)) {
+                            return true;
+                        }
+                    // falls through I guess
+                    case 79 /* Identifier */:
                         return node.text.length === searchSymbolName.length;
                     case 14 /* NoSubstitutionTemplateLiteral */:
                     case 10 /* StringLiteral */: {
@@ -128704,7 +131604,7 @@
                     }
                     case 8 /* NumericLiteral */:
                         return ts.isLiteralNameOfPropertyDeclarationOrIndexAccess(node) && node.text.length === searchSymbolName.length;
-                    case 87 /* DefaultKeyword */:
+                    case 88 /* DefaultKeyword */:
                         return "default".length === searchSymbolName.length;
                     default:
                         return false;
@@ -128770,7 +131670,7 @@
                     return;
                 }
                 if (ts.isExportSpecifier(parent)) {
-                    ts.Debug.assert(referenceLocation.kind === 78 /* Identifier */);
+                    ts.Debug.assert(referenceLocation.kind === 79 /* Identifier */);
                     getReferencesAtExportSpecifier(referenceLocation, referenceSymbol, parent, search, state, addReferencesHere);
                     return;
                 }
@@ -128794,7 +131694,7 @@
                         ts.Debug.assertNever(state.specialSearchKind);
                 }
                 // Use the parent symbol if the location is commonjs require syntax on javascript files only.
-                referenceSymbol = ts.isInJSFile(referenceLocation) && referenceLocation.parent.kind === 199 /* BindingElement */ && ts.isRequireVariableDeclaration(referenceLocation.parent)
+                referenceSymbol = ts.isInJSFile(referenceLocation) && referenceLocation.parent.kind === 201 /* BindingElement */ && ts.isRequireVariableDeclaration(referenceLocation.parent)
                     ? referenceLocation.parent.symbol
                     : referenceSymbol;
                 getImportOrExportReferences(referenceLocation, referenceSymbol, search, state);
@@ -128830,8 +131730,8 @@
                 }
                 // For `export { foo as bar }`, rename `foo`, but not `bar`.
                 if (!isForRenameWithPrefixAndSuffixText(state.options) || alwaysGetReferences) {
-                    var isDefaultExport = referenceLocation.originalKeywordKind === 87 /* DefaultKeyword */
-                        || exportSpecifier.name.originalKeywordKind === 87 /* DefaultKeyword */;
+                    var isDefaultExport = referenceLocation.originalKeywordKind === 88 /* DefaultKeyword */
+                        || exportSpecifier.name.originalKeywordKind === 88 /* DefaultKeyword */;
                     var exportKind = isDefaultExport ? 1 /* Default */ : 0 /* Named */;
                     var exportSymbol = ts.Debug.checkDefined(exportSpecifier.symbol);
                     var exportInfo = FindAllReferences.getExportInfo(exportSymbol, exportKind, state.checker);
@@ -128912,7 +131812,7 @@
                 }
                 var pusher = function () { return state.referenceAdder(search.symbol); };
                 if (ts.isClassLike(referenceLocation.parent)) {
-                    ts.Debug.assert(referenceLocation.kind === 87 /* DefaultKeyword */ || referenceLocation.parent.name === referenceLocation);
+                    ts.Debug.assert(referenceLocation.kind === 88 /* DefaultKeyword */ || referenceLocation.parent.name === referenceLocation);
                     // This is the class declaration containing the constructor.
                     findOwnConstructorReferences(search.symbol, sourceFile, pusher());
                 }
@@ -128934,12 +131834,12 @@
                 var addRef = state.referenceAdder(search.symbol);
                 for (var _i = 0, _a = classLike.members; _i < _a.length; _i++) {
                     var member = _a[_i];
-                    if (!(ts.isMethodOrAccessor(member) && ts.hasSyntacticModifier(member, 32 /* Static */))) {
+                    if (!(ts.isMethodOrAccessor(member) && ts.isStatic(member))) {
                         continue;
                     }
                     if (member.body) {
                         member.body.forEachChild(function cb(node) {
-                            if (node.kind === 107 /* ThisKeyword */) {
+                            if (node.kind === 108 /* ThisKeyword */) {
                                 addRef(node);
                             }
                             else if (!ts.isFunctionLike(node) && !ts.isClassLike(node)) {
@@ -128958,18 +131858,18 @@
                 if (constructorSymbol && constructorSymbol.declarations) {
                     for (var _i = 0, _a = constructorSymbol.declarations; _i < _a.length; _i++) {
                         var decl = _a[_i];
-                        var ctrKeyword = ts.findChildOfKind(decl, 132 /* ConstructorKeyword */, sourceFile);
-                        ts.Debug.assert(decl.kind === 167 /* Constructor */ && !!ctrKeyword);
+                        var ctrKeyword = ts.findChildOfKind(decl, 133 /* ConstructorKeyword */, sourceFile);
+                        ts.Debug.assert(decl.kind === 169 /* Constructor */ && !!ctrKeyword);
                         addNode(ctrKeyword);
                     }
                 }
                 if (classSymbol.exports) {
                     classSymbol.exports.forEach(function (member) {
                         var decl = member.valueDeclaration;
-                        if (decl && decl.kind === 166 /* MethodDeclaration */) {
+                        if (decl && decl.kind === 167 /* MethodDeclaration */) {
                             var body = decl.body;
                             if (body) {
-                                forEachDescendantOfKind(body, 107 /* ThisKeyword */, function (thisKeyword) {
+                                forEachDescendantOfKind(body, 108 /* ThisKeyword */, function (thisKeyword) {
                                     if (ts.isNewExpressionTarget(thisKeyword)) {
                                         addNode(thisKeyword);
                                     }
@@ -128990,10 +131890,10 @@
                 }
                 for (var _i = 0, _a = constructor.declarations; _i < _a.length; _i++) {
                     var decl = _a[_i];
-                    ts.Debug.assert(decl.kind === 167 /* Constructor */);
+                    ts.Debug.assert(decl.kind === 169 /* Constructor */);
                     var body = decl.body;
                     if (body) {
-                        forEachDescendantOfKind(body, 105 /* SuperKeyword */, function (node) {
+                        forEachDescendantOfKind(body, 106 /* SuperKeyword */, function (node) {
                             if (ts.isCallExpressionTarget(node)) {
                                 addNode(node);
                             }
@@ -129017,10 +131917,10 @@
                     addReference(refNode);
                     return;
                 }
-                if (refNode.kind !== 78 /* Identifier */) {
+                if (refNode.kind !== 79 /* Identifier */) {
                     return;
                 }
-                if (refNode.parent.kind === 290 /* ShorthandPropertyAssignment */) {
+                if (refNode.parent.kind === 292 /* ShorthandPropertyAssignment */) {
                     // Go ahead and dereference the shorthand assignment by going to its definition
                     getReferenceEntriesForShorthandPropertyAssignment(refNode, state.checker, addReference);
                 }
@@ -129040,7 +131940,7 @@
                     }
                     else if (ts.isFunctionLike(typeHavingNode) && typeHavingNode.body) {
                         var body = typeHavingNode.body;
-                        if (body.kind === 231 /* Block */) {
+                        if (body.kind === 233 /* Block */) {
                             ts.forEachReturnStatement(body, function (returnStatement) {
                                 if (returnStatement.expression)
                                     addIfImplementation(returnStatement.expression);
@@ -129068,13 +131968,13 @@
              */
             function isImplementationExpression(node) {
                 switch (node.kind) {
-                    case 208 /* ParenthesizedExpression */:
+                    case 210 /* ParenthesizedExpression */:
                         return isImplementationExpression(node.expression);
-                    case 210 /* ArrowFunction */:
-                    case 209 /* FunctionExpression */:
-                    case 201 /* ObjectLiteralExpression */:
-                    case 222 /* ClassExpression */:
-                    case 200 /* ArrayLiteralExpression */:
+                    case 212 /* ArrowFunction */:
+                    case 211 /* FunctionExpression */:
+                    case 203 /* ObjectLiteralExpression */:
+                    case 224 /* ClassExpression */:
+                    case 202 /* ArrayLiteralExpression */:
                         return true;
                     default:
                         return false;
@@ -129127,13 +132027,13 @@
                 // Whether 'super' occurs in a static context within a class.
                 var staticFlag = 32 /* Static */;
                 switch (searchSpaceNode.kind) {
-                    case 164 /* PropertyDeclaration */:
-                    case 163 /* PropertySignature */:
-                    case 166 /* MethodDeclaration */:
-                    case 165 /* MethodSignature */:
-                    case 167 /* Constructor */:
-                    case 168 /* GetAccessor */:
-                    case 169 /* SetAccessor */:
+                    case 165 /* PropertyDeclaration */:
+                    case 164 /* PropertySignature */:
+                    case 167 /* MethodDeclaration */:
+                    case 166 /* MethodSignature */:
+                    case 169 /* Constructor */:
+                    case 170 /* GetAccessor */:
+                    case 171 /* SetAccessor */:
                         staticFlag &= ts.getSyntacticModifierFlags(searchSpaceNode);
                         searchSpaceNode = searchSpaceNode.parent; // re-assign to be the owning class
                         break;
@@ -129142,55 +132042,55 @@
                 }
                 var sourceFile = searchSpaceNode.getSourceFile();
                 var references = ts.mapDefined(getPossibleSymbolReferenceNodes(sourceFile, "super", searchSpaceNode), function (node) {
-                    if (node.kind !== 105 /* SuperKeyword */) {
+                    if (node.kind !== 106 /* SuperKeyword */) {
                         return;
                     }
                     var container = ts.getSuperContainer(node, /*stopOnFunctions*/ false);
                     // If we have a 'super' container, we must have an enclosing class.
                     // Now make sure the owning class is the same as the search-space
                     // and has the same static qualifier as the original 'super's owner.
-                    return container && (32 /* Static */ & ts.getSyntacticModifierFlags(container)) === staticFlag && container.parent.symbol === searchSpaceNode.symbol ? nodeEntry(node) : undefined;
+                    return container && ts.isStatic(container) === !!staticFlag && container.parent.symbol === searchSpaceNode.symbol ? nodeEntry(node) : undefined;
                 });
                 return [{ definition: { type: 0 /* Symbol */, symbol: searchSpaceNode.symbol }, references: references }];
             }
             function isParameterName(node) {
-                return node.kind === 78 /* Identifier */ && node.parent.kind === 161 /* Parameter */ && node.parent.name === node;
+                return node.kind === 79 /* Identifier */ && node.parent.kind === 162 /* Parameter */ && node.parent.name === node;
             }
             function getReferencesForThisKeyword(thisOrSuperKeyword, sourceFiles, cancellationToken) {
                 var searchSpaceNode = ts.getThisContainer(thisOrSuperKeyword, /* includeArrowFunctions */ false);
                 // Whether 'this' occurs in a static context within a class.
                 var staticFlag = 32 /* Static */;
                 switch (searchSpaceNode.kind) {
-                    case 166 /* MethodDeclaration */:
-                    case 165 /* MethodSignature */:
+                    case 167 /* MethodDeclaration */:
+                    case 166 /* MethodSignature */:
                         if (ts.isObjectLiteralMethod(searchSpaceNode)) {
                             staticFlag &= ts.getSyntacticModifierFlags(searchSpaceNode);
                             searchSpaceNode = searchSpaceNode.parent; // re-assign to be the owning object literals
                             break;
                         }
                     // falls through
-                    case 164 /* PropertyDeclaration */:
-                    case 163 /* PropertySignature */:
-                    case 167 /* Constructor */:
-                    case 168 /* GetAccessor */:
-                    case 169 /* SetAccessor */:
+                    case 165 /* PropertyDeclaration */:
+                    case 164 /* PropertySignature */:
+                    case 169 /* Constructor */:
+                    case 170 /* GetAccessor */:
+                    case 171 /* SetAccessor */:
                         staticFlag &= ts.getSyntacticModifierFlags(searchSpaceNode);
                         searchSpaceNode = searchSpaceNode.parent; // re-assign to be the owning class
                         break;
-                    case 298 /* SourceFile */:
+                    case 300 /* SourceFile */:
                         if (ts.isExternalModule(searchSpaceNode) || isParameterName(thisOrSuperKeyword)) {
                             return undefined;
                         }
                     // falls through
-                    case 252 /* FunctionDeclaration */:
-                    case 209 /* FunctionExpression */:
+                    case 254 /* FunctionDeclaration */:
+                    case 211 /* FunctionExpression */:
                         break;
                     // Computed properties in classes are not handled here because references to this are illegal,
                     // so there is no point finding references to them.
                     default:
                         return undefined;
                 }
-                var references = ts.flatMap(searchSpaceNode.kind === 298 /* SourceFile */ ? sourceFiles : [searchSpaceNode.getSourceFile()], function (sourceFile) {
+                var references = ts.flatMap(searchSpaceNode.kind === 300 /* SourceFile */ ? sourceFiles : [searchSpaceNode.getSourceFile()], function (sourceFile) {
                     cancellationToken.throwIfCancellationRequested();
                     return getPossibleSymbolReferenceNodes(sourceFile, "this", ts.isSourceFile(searchSpaceNode) ? sourceFile : searchSpaceNode).filter(function (node) {
                         if (!ts.isThis(node)) {
@@ -129198,20 +132098,20 @@
                         }
                         var container = ts.getThisContainer(node, /* includeArrowFunctions */ false);
                         switch (searchSpaceNode.kind) {
-                            case 209 /* FunctionExpression */:
-                            case 252 /* FunctionDeclaration */:
+                            case 211 /* FunctionExpression */:
+                            case 254 /* FunctionDeclaration */:
                                 return searchSpaceNode.symbol === container.symbol;
-                            case 166 /* MethodDeclaration */:
-                            case 165 /* MethodSignature */:
+                            case 167 /* MethodDeclaration */:
+                            case 166 /* MethodSignature */:
                                 return ts.isObjectLiteralMethod(searchSpaceNode) && searchSpaceNode.symbol === container.symbol;
-                            case 222 /* ClassExpression */:
-                            case 253 /* ClassDeclaration */:
-                            case 201 /* ObjectLiteralExpression */:
+                            case 224 /* ClassExpression */:
+                            case 255 /* ClassDeclaration */:
+                            case 203 /* ObjectLiteralExpression */:
                                 // Make sure the container belongs to the same class/object literals
                                 // and has the appropriate static modifier from the original container.
-                                return container.parent && searchSpaceNode.symbol === container.parent.symbol && (ts.getSyntacticModifierFlags(container) & 32 /* Static */) === staticFlag;
-                            case 298 /* SourceFile */:
-                                return container.kind === 298 /* SourceFile */ && !ts.isExternalModule(container) && !isParameterName(node);
+                                return container.parent && searchSpaceNode.symbol === container.parent.symbol && ts.isStatic(container) === !!staticFlag;
+                            case 300 /* SourceFile */:
+                                return container.kind === 300 /* SourceFile */ && !ts.isExternalModule(container) && !isParameterName(node);
                         }
                     });
                 }).map(function (n) { return nodeEntry(n); });
@@ -129251,7 +132151,7 @@
                 forEachRelatedSymbol(symbol, location, checker, isForRename, !(isForRename && providePrefixAndSuffixText), function (sym, root, base) {
                     // static method/property and instance method/property might have the same name. Only include static or only include instance.
                     if (base) {
-                        if (isStatic(symbol) !== isStatic(base)) {
+                        if (isStaticSymbol(symbol) !== isStaticSymbol(base)) {
                             base = undefined;
                         }
                     }
@@ -129321,7 +132221,7 @@
                     ts.Debug.assert(paramProps.length === 2 && !!(paramProps[0].flags & 1 /* FunctionScopedVariable */) && !!(paramProps[1].flags & 4 /* Property */)); // is [parameter, property]
                     return fromRoot(symbol.flags & 1 /* FunctionScopedVariable */ ? paramProps[1] : paramProps[0]);
                 }
-                var exportSpecifier = ts.getDeclarationOfKind(symbol, 271 /* ExportSpecifier */);
+                var exportSpecifier = ts.getDeclarationOfKind(symbol, 273 /* ExportSpecifier */);
                 if (!isForRenamePopulateSearchSymbolSet || exportSpecifier && !exportSpecifier.propertyName) {
                     var localSymbol = exportSpecifier && checker.getExportSpecifierLocalTargetSymbol(exportSpecifier);
                     if (localSymbol) {
@@ -129366,7 +132266,7 @@
                     });
                 }
                 function getPropertySymbolOfObjectBindingPatternWithoutPropertyName(symbol, checker) {
-                    var bindingElement = ts.getDeclarationOfKind(symbol, 199 /* BindingElement */);
+                    var bindingElement = ts.getDeclarationOfKind(symbol, 201 /* BindingElement */);
                     if (bindingElement && ts.isObjectBindingElementWithoutPropertyName(bindingElement)) {
                         return ts.getPropertySymbolFromBindingElement(checker, bindingElement);
                     }
@@ -129398,7 +132298,7 @@
                     }); });
                 }
             }
-            function isStatic(symbol) {
+            function isStaticSymbol(symbol) {
                 if (!symbol.valueDeclaration) {
                     return false;
                 }
@@ -129412,7 +132312,7 @@
                     // check whether the symbol used to search itself is just the searched one.
                     if (baseSymbol) {
                         // static method/property and instance method/property might have the same name. Only check static or only check instance.
-                        if (isStatic(referenceSymbol) !== isStatic(baseSymbol)) {
+                        if (isStaticSymbol(referenceSymbol) !== isStaticSymbol(baseSymbol)) {
                             baseSymbol = undefined;
                         }
                     }
@@ -129537,6 +132437,7 @@
                 || ts.isFunctionExpression(node)
                 || ts.isClassDeclaration(node)
                 || ts.isClassExpression(node)
+                || ts.isClassStaticBlockDeclaration(node)
                 || ts.isMethodDeclaration(node)
                 || ts.isMethodSignature(node)
                 || ts.isGetAccessorDeclaration(node)
@@ -129552,6 +132453,7 @@
                 || ts.isModuleDeclaration(node) && ts.isIdentifier(node.name)
                 || ts.isFunctionDeclaration(node)
                 || ts.isClassDeclaration(node)
+                || ts.isClassStaticBlockDeclaration(node)
                 || ts.isMethodDeclaration(node)
                 || ts.isMethodSignature(node)
                 || ts.isGetAccessorDeclaration(node)
@@ -129570,7 +132472,7 @@
             return ts.Debug.checkDefined(node.modifiers && ts.find(node.modifiers, isDefaultModifier));
         }
         function isDefaultModifier(node) {
-            return node.kind === 87 /* DefaultKeyword */;
+            return node.kind === 88 /* DefaultKeyword */;
         }
         /** Gets the symbol for a call hierarchy declaration. */
         function getSymbolOfCallHierarchyDeclaration(typeChecker, node) {
@@ -129588,6 +132490,15 @@
                     return { text: "default", pos: defaultModifier.getStart(), end: defaultModifier.getEnd() };
                 }
             }
+            if (ts.isClassStaticBlockDeclaration(node)) {
+                var sourceFile = node.getSourceFile();
+                var pos = ts.skipTrivia(sourceFile.text, ts.moveRangePastModifiers(node).pos);
+                var end = pos + 6; /* "static".length */
+                var typeChecker = program.getTypeChecker();
+                var symbol = typeChecker.getSymbolAtLocation(node.parent);
+                var prefix = symbol ? typeChecker.symbolToString(symbol, node.parent) + " " : "";
+                return { text: prefix + "static {}", pos: pos, end: end };
+            }
             var declName = isConstNamedExpression(node) ? node.parent.name :
                 ts.Debug.checkDefined(ts.getNameOfDeclaration(node), "Expected call hierarchy item to have a name");
             var text = ts.isIdentifier(declName) ? ts.idText(declName) :
@@ -129619,16 +132530,16 @@
                 return;
             }
             switch (node.kind) {
-                case 168 /* GetAccessor */:
-                case 169 /* SetAccessor */:
-                case 166 /* MethodDeclaration */:
-                    if (node.parent.kind === 201 /* ObjectLiteralExpression */) {
+                case 170 /* GetAccessor */:
+                case 171 /* SetAccessor */:
+                case 167 /* MethodDeclaration */:
+                    if (node.parent.kind === 203 /* ObjectLiteralExpression */) {
                         return (_a = ts.getAssignedName(node.parent)) === null || _a === void 0 ? void 0 : _a.getText();
                     }
                     return (_b = ts.getNameOfDeclaration(node.parent)) === null || _b === void 0 ? void 0 : _b.getText();
-                case 252 /* FunctionDeclaration */:
-                case 253 /* ClassDeclaration */:
-                case 257 /* ModuleDeclaration */:
+                case 254 /* FunctionDeclaration */:
+                case 255 /* ClassDeclaration */:
+                case 259 /* ModuleDeclaration */:
                     if (ts.isModuleBlock(node.parent) && ts.isIdentifier(node.parent.parent.name)) {
                         return node.parent.parent.name.getText();
                     }
@@ -129674,6 +132585,9 @@
         /** Find the implementation or the first declaration for a call hierarchy declaration. */
         function findImplementationOrAllInitialDeclarations(typeChecker, node) {
             var _a, _b, _c;
+            if (ts.isClassStaticBlockDeclaration(node)) {
+                return node;
+            }
             if (ts.isFunctionLikeDeclaration(node)) {
                 return (_b = (_a = findImplementation(typeChecker, node)) !== null && _a !== void 0 ? _a : findAllInitialDeclarations(typeChecker, node)) !== null && _b !== void 0 ? _b : node;
             }
@@ -129681,13 +132595,14 @@
         }
         /** Resolves the call hierarchy declaration for a node. */
         function resolveCallHierarchyDeclaration(program, location) {
-            // A call hierarchy item must refer to either a SourceFile, Module Declaration, or something intrinsically callable that has a name:
+            // A call hierarchy item must refer to either a SourceFile, Module Declaration, Class Static Block, or something intrinsically callable that has a name:
             // - Class Declarations
             // - Class Expressions (with a name)
             // - Function Declarations
             // - Function Expressions (with a name or assigned to a const variable)
             // - Arrow Functions (assigned to a const variable)
             // - Constructors
+            // - Class `static {}` initializer blocks
             // - Methods
             // - Accessors
             //
@@ -129722,6 +132637,10 @@
                     }
                     return undefined;
                 }
+                if (location.kind === 124 /* StaticKeyword */ && ts.isClassStaticBlockDeclaration(location.parent)) {
+                    location = location.parent;
+                    continue;
+                }
                 // #39453
                 if (ts.isVariableDeclaration(location) && location.initializer && isConstNamedExpression(location.initializer)) {
                     return location.initializer;
@@ -129785,7 +132704,7 @@
         /** Gets the call sites that call into the provided call hierarchy declaration. */
         function getIncomingCalls(program, declaration, cancellationToken) {
             // Source files and modules have no incoming calls.
-            if (ts.isSourceFile(declaration) || ts.isModuleDeclaration(declaration)) {
+            if (ts.isSourceFile(declaration) || ts.isModuleDeclaration(declaration) || ts.isClassStaticBlockDeclaration(declaration)) {
                 return [];
             }
             var location = getCallHierarchyDeclarationReferenceNode(declaration);
@@ -129798,7 +132717,8 @@
                 var target = ts.isTaggedTemplateExpression(node) ? node.tag :
                     ts.isJsxOpeningLikeElement(node) ? node.tagName :
                         ts.isAccessExpression(node) ? node :
-                            node.expression;
+                            ts.isClassStaticBlockDeclaration(node) ? node :
+                                node.expression;
                 var declaration = resolveCallHierarchyDeclaration(program, target);
                 if (declaration) {
                     var range = ts.createTextRangeFromNode(target, node.getSourceFile());
@@ -129833,56 +132753,59 @@
                     return;
                 }
                 switch (node.kind) {
-                    case 78 /* Identifier */:
-                    case 261 /* ImportEqualsDeclaration */:
-                    case 262 /* ImportDeclaration */:
-                    case 268 /* ExportDeclaration */:
-                    case 254 /* InterfaceDeclaration */:
-                    case 255 /* TypeAliasDeclaration */:
+                    case 79 /* Identifier */:
+                    case 263 /* ImportEqualsDeclaration */:
+                    case 264 /* ImportDeclaration */:
+                    case 270 /* ExportDeclaration */:
+                    case 256 /* InterfaceDeclaration */:
+                    case 257 /* TypeAliasDeclaration */:
                         // do not descend into nodes that cannot contain callable nodes
                         return;
-                    case 207 /* TypeAssertionExpression */:
-                    case 225 /* AsExpression */:
+                    case 168 /* ClassStaticBlockDeclaration */:
+                        recordCallSite(node);
+                        return;
+                    case 209 /* TypeAssertionExpression */:
+                    case 227 /* AsExpression */:
                         // do not descend into the type side of an assertion
                         collect(node.expression);
                         return;
-                    case 250 /* VariableDeclaration */:
-                    case 161 /* Parameter */:
+                    case 252 /* VariableDeclaration */:
+                    case 162 /* Parameter */:
                         // do not descend into the type of a variable or parameter declaration
                         collect(node.name);
                         collect(node.initializer);
                         return;
-                    case 204 /* CallExpression */:
+                    case 206 /* CallExpression */:
                         // do not descend into the type arguments of a call expression
                         recordCallSite(node);
                         collect(node.expression);
                         ts.forEach(node.arguments, collect);
                         return;
-                    case 205 /* NewExpression */:
+                    case 207 /* NewExpression */:
                         // do not descend into the type arguments of a new expression
                         recordCallSite(node);
                         collect(node.expression);
                         ts.forEach(node.arguments, collect);
                         return;
-                    case 206 /* TaggedTemplateExpression */:
+                    case 208 /* TaggedTemplateExpression */:
                         // do not descend into the type arguments of a tagged template expression
                         recordCallSite(node);
                         collect(node.tag);
                         collect(node.template);
                         return;
-                    case 276 /* JsxOpeningElement */:
-                    case 275 /* JsxSelfClosingElement */:
+                    case 278 /* JsxOpeningElement */:
+                    case 277 /* JsxSelfClosingElement */:
                         // do not descend into the type arguments of a JsxOpeningLikeElement
                         recordCallSite(node);
                         collect(node.tagName);
                         collect(node.attributes);
                         return;
-                    case 162 /* Decorator */:
+                    case 163 /* Decorator */:
                         recordCallSite(node);
                         collect(node.expression);
                         return;
-                    case 202 /* PropertyAccessExpression */:
-                    case 203 /* ElementAccessExpression */:
+                    case 204 /* PropertyAccessExpression */:
+                    case 205 /* ElementAccessExpression */:
                         recordCallSite(node);
                         ts.forEachChild(node, collect);
                         break;
@@ -129910,6 +132833,9 @@
                 collect(implementation.body);
             }
         }
+        function collectCallSitesOfClassStaticBlockDeclaration(node, collect) {
+            collect(node.body);
+        }
         function collectCallSitesOfClassLikeDeclaration(node, collect) {
             ts.forEach(node.decorators, collect);
             var heritage = ts.getClassExtendsHeritageElement(node);
@@ -129926,30 +132852,36 @@
                     ts.forEach(member.parameters, collect);
                     collect(member.body);
                 }
+                else if (ts.isClassStaticBlockDeclaration(member)) {
+                    collect(member);
+                }
             }
         }
         function collectCallSites(program, node) {
             var callSites = [];
             var collect = createCallSiteCollector(program, callSites);
             switch (node.kind) {
-                case 298 /* SourceFile */:
+                case 300 /* SourceFile */:
                     collectCallSitesOfSourceFile(node, collect);
                     break;
-                case 257 /* ModuleDeclaration */:
+                case 259 /* ModuleDeclaration */:
                     collectCallSitesOfModuleDeclaration(node, collect);
                     break;
-                case 252 /* FunctionDeclaration */:
-                case 209 /* FunctionExpression */:
-                case 210 /* ArrowFunction */:
-                case 166 /* MethodDeclaration */:
-                case 168 /* GetAccessor */:
-                case 169 /* SetAccessor */:
+                case 254 /* FunctionDeclaration */:
+                case 211 /* FunctionExpression */:
+                case 212 /* ArrowFunction */:
+                case 167 /* MethodDeclaration */:
+                case 170 /* GetAccessor */:
+                case 171 /* SetAccessor */:
                     collectCallSitesOfFunctionLikeDeclaration(program.getTypeChecker(), node, collect);
                     break;
-                case 253 /* ClassDeclaration */:
-                case 222 /* ClassExpression */:
+                case 255 /* ClassDeclaration */:
+                case 224 /* ClassExpression */:
                     collectCallSitesOfClassLikeDeclaration(node, collect);
                     break;
+                case 168 /* ClassStaticBlockDeclaration */:
+                    collectCallSitesOfClassStaticBlockDeclaration(node, collect);
+                    break;
                 default:
                     ts.Debug.assertNever(node);
             }
@@ -130022,16 +132954,18 @@
                 case "include":
                 case "exclude": {
                     var foundExactMatch = updatePaths(property);
-                    if (!foundExactMatch && propertyName === "include" && ts.isArrayLiteralExpression(property.initializer)) {
-                        var includes = ts.mapDefined(property.initializer.elements, function (e) { return ts.isStringLiteral(e) ? e.text : undefined; });
-                        var matchers = ts.getFileMatcherPatterns(configDir, /*excludes*/ [], includes, useCaseSensitiveFileNames, currentDirectory);
-                        // If there isn't some include for this, add a new one.
-                        if (ts.getRegexFromPattern(ts.Debug.checkDefined(matchers.includeFilePattern), useCaseSensitiveFileNames).test(oldFileOrDirPath) &&
-                            !ts.getRegexFromPattern(ts.Debug.checkDefined(matchers.includeFilePattern), useCaseSensitiveFileNames).test(newFileOrDirPath)) {
-                            changeTracker.insertNodeAfter(configFile, ts.last(property.initializer.elements), ts.factory.createStringLiteral(relativePath(newFileOrDirPath)));
-                        }
+                    if (foundExactMatch || propertyName !== "include" || !ts.isArrayLiteralExpression(property.initializer))
+                        return;
+                    var includes = ts.mapDefined(property.initializer.elements, function (e) { return ts.isStringLiteral(e) ? e.text : undefined; });
+                    if (includes.length === 0)
+                        return;
+                    var matchers = ts.getFileMatcherPatterns(configDir, /*excludes*/ [], includes, useCaseSensitiveFileNames, currentDirectory);
+                    // If there isn't some include for this, add a new one.
+                    if (ts.getRegexFromPattern(ts.Debug.checkDefined(matchers.includeFilePattern), useCaseSensitiveFileNames).test(oldFileOrDirPath) &&
+                        !ts.getRegexFromPattern(ts.Debug.checkDefined(matchers.includeFilePattern), useCaseSensitiveFileNames).test(newFileOrDirPath)) {
+                        changeTracker.insertNodeAfter(configFile, ts.last(property.initializer.elements), ts.factory.createStringLiteral(relativePath(newFileOrDirPath)));
                     }
-                    break;
+                    return;
                 }
                 case "compilerOptions":
                     forEachProperty(property.initializer, function (property, propertyName) {
@@ -130050,11 +132984,10 @@
                             });
                         }
                     });
-                    break;
+                    return;
             }
         });
         function updatePaths(property) {
-            // Type annotation needed due to #7294
             var elements = ts.isArrayLiteralExpression(property.initializer) ? property.initializer.elements : [property.initializer];
             var foundExactMatch = false;
             for (var _i = 0, elements_1 = elements; _i < elements_1.length; _i++) {
@@ -130142,9 +133075,9 @@
             return undefined;
         // First try resolved module
         if (resolved.resolvedModule) {
-            var result_2 = tryChange(resolved.resolvedModule.resolvedFileName);
-            if (result_2)
-                return result_2;
+            var result_3 = tryChange(resolved.resolvedModule.resolvedFileName);
+            if (result_3)
+                return result_3;
         }
         // Then failed lookups that are in the list of sources
         var result = ts.forEach(resolved.failedLookupLocations, tryChangeWithIgnoringPackageJsonExisting)
@@ -130214,11 +133147,26 @@
             }
             var parent = node.parent;
             var typeChecker = program.getTypeChecker();
+            if (node.kind === 157 /* OverrideKeyword */ || (ts.isJSDocOverrideTag(node) && ts.rangeContainsPosition(node.tagName, position))) {
+                return getDefinitionFromOverriddenMember(typeChecker, node) || ts.emptyArray;
+            }
             // Labels
             if (ts.isJumpStatementTarget(node)) {
                 var label = ts.getTargetLabel(node.parent, node.text);
                 return label ? [createDefinitionInfoFromName(typeChecker, label, "label" /* label */, node.text, /*containerName*/ undefined)] : undefined; // TODO: GH#18217
             }
+            if (ts.isStaticModifier(node) && ts.isClassStaticBlockDeclaration(node.parent)) {
+                var classDecl = node.parent.parent;
+                var symbol_1 = getSymbol(classDecl, typeChecker);
+                var staticBlocks = ts.filter(classDecl.members, ts.isClassStaticBlockDeclaration);
+                var containerName_1 = symbol_1 ? typeChecker.symbolToString(symbol_1, classDecl) : "";
+                var sourceFile_1 = node.getSourceFile();
+                return ts.map(staticBlocks, function (staticBlock) {
+                    var pos = ts.moveRangePastModifiers(staticBlock).pos;
+                    pos = ts.skipTrivia(sourceFile_1.text, pos);
+                    return createDefinitionInfoFromName(typeChecker, staticBlock, "constructor" /* constructorImplementationElement */, "static {}", containerName_1, { start: pos, length: "static".length });
+                });
+            }
             var symbol = getSymbol(node, typeChecker);
             // Could not find a symbol e.g. node is string or number keyword,
             // or the symbol was an internal symbol and does not have a declaration e.g. undefined symbol
@@ -130237,7 +133185,7 @@
                 else {
                     var defs = getDefinitionFromSymbol(typeChecker, symbol, node, calledDeclaration) || ts.emptyArray;
                     // For a 'super()' call, put the signature first, else put the variable first.
-                    return node.kind === 105 /* SuperKeyword */ ? __spreadArray([sigInfo], defs) : __spreadArray(__spreadArray([], defs), [sigInfo]);
+                    return node.kind === 106 /* SuperKeyword */ ? __spreadArray([sigInfo], defs, true) : __spreadArray(__spreadArray([], defs, true), [sigInfo], false);
                 }
             }
             // Because name in short-hand property assignment has two different meanings: property name and property value,
@@ -130245,7 +133193,7 @@
             // go to the declaration of the property name (in this case stay at the same position). However, if go-to-definition
             // is performed at the location of property access, we would like to go to definition of the property in the short-hand
             // assignment. This case and others are handled by the following code.
-            if (node.parent.kind === 290 /* ShorthandPropertyAssignment */) {
+            if (node.parent.kind === 292 /* ShorthandPropertyAssignment */) {
                 var shorthandSymbol_1 = typeChecker.getShorthandAssignmentValueSymbol(symbol.valueDeclaration);
                 var definitions = (shorthandSymbol_1 === null || shorthandSymbol_1 === void 0 ? void 0 : shorthandSymbol_1.declarations) ? shorthandSymbol_1.declarations.map(function (decl) { return createDefinitionInfo(decl, typeChecker, shorthandSymbol_1, node); }) : ts.emptyArray;
                 return ts.concatenate(definitions, getDefinitionFromObjectLiteralElement(typeChecker, node) || ts.emptyArray);
@@ -130304,6 +133252,25 @@
                 }
             }
         }
+        function getDefinitionFromOverriddenMember(typeChecker, node) {
+            var classElement = ts.findAncestor(node, ts.isClassElement);
+            if (!(classElement && classElement.name))
+                return;
+            var baseDeclaration = ts.findAncestor(classElement, ts.isClassLike);
+            if (!baseDeclaration)
+                return;
+            var baseTypeNode = ts.getEffectiveBaseTypeNode(baseDeclaration);
+            var baseType = baseTypeNode ? typeChecker.getTypeAtLocation(baseTypeNode) : undefined;
+            if (!baseType)
+                return;
+            var name = ts.unescapeLeadingUnderscores(ts.getTextOfPropertyName(classElement.name));
+            var symbol = ts.hasStaticModifier(classElement)
+                ? typeChecker.getPropertyOfType(typeChecker.getTypeOfSymbolAtLocation(baseType.symbol, baseDeclaration), name)
+                : typeChecker.getPropertyOfType(baseType, name);
+            if (!symbol)
+                return;
+            return getDefinitionFromSymbol(typeChecker, symbol, node);
+        }
         function getReferenceAtPosition(sourceFile, position, program) {
             var _a, _b;
             var referencePath = findReferenceInPosition(sourceFile.referencedFiles, position);
@@ -130394,13 +133361,7 @@
         GoToDefinition.getDefinitionAndBoundSpan = getDefinitionAndBoundSpan;
         // At 'x.foo', see if the type of 'x' has an index signature, and if so find its declarations.
         function getDefinitionInfoForIndexSignatures(node, checker) {
-            if (!ts.isPropertyAccessExpression(node.parent) || node.parent.name !== node)
-                return;
-            var type = checker.getTypeAtLocation(node.parent.expression);
-            return ts.mapDefined(type.isUnionOrIntersection() ? type.types : [type], function (nonUnionType) {
-                var info = checker.getIndexInfoOfType(nonUnionType, 0 /* String */);
-                return info && info.declaration && createDefinitionFromSignatureDeclaration(checker, info.declaration);
-            });
+            return ts.mapDefined(checker.getIndexInfosAtLocation(node), function (info) { return info.declaration && createDefinitionFromSignatureDeclaration(checker, info.declaration); });
         }
         function getSymbol(node, checker) {
             var symbol = checker.getSymbolAtLocation(node);
@@ -130422,20 +133383,20 @@
         //   (2) when the aliased symbol is originating from an import.
         //
         function shouldSkipAlias(node, declaration) {
-            if (node.kind !== 78 /* Identifier */) {
+            if (node.kind !== 79 /* Identifier */) {
                 return false;
             }
             if (node.parent === declaration) {
                 return true;
             }
             switch (declaration.kind) {
-                case 263 /* ImportClause */:
-                case 261 /* ImportEqualsDeclaration */:
+                case 265 /* ImportClause */:
+                case 263 /* ImportEqualsDeclaration */:
                     return true;
-                case 266 /* ImportSpecifier */:
-                    return declaration.parent.kind === 265 /* NamedImports */;
-                case 199 /* BindingElement */:
-                case 250 /* VariableDeclaration */:
+                case 268 /* ImportSpecifier */:
+                    return declaration.parent.kind === 267 /* NamedImports */;
+                case 201 /* BindingElement */:
+                case 252 /* VariableDeclaration */:
                     return ts.isInJSFile(declaration) && ts.isRequireVariableDeclaration(declaration);
                 default:
                     return false;
@@ -130451,7 +133412,7 @@
             function getConstructSignatureDefinition() {
                 // Applicable only if we are in a new expression, or we are on a constructor declaration
                 // and in either case the symbol has a construct signature definition, i.e. class
-                if (symbol.flags & 32 /* Class */ && !(symbol.flags & (16 /* Function */ | 3 /* Variable */)) && (ts.isNewExpressionTarget(node) || node.kind === 132 /* ConstructorKeyword */)) {
+                if (symbol.flags & 32 /* Class */ && !(symbol.flags & (16 /* Function */ | 3 /* Variable */)) && (ts.isNewExpressionTarget(node) || node.kind === 133 /* ConstructorKeyword */)) {
                     var cls = ts.find(filteredDeclarations, ts.isClassLike) || ts.Debug.fail("Expected declaration to have at least one class-like declaration");
                     return getSignatureDefinition(cls.members, /*selectConstructors*/ true);
                 }
@@ -130483,10 +133444,12 @@
             return createDefinitionInfoFromName(checker, declaration, symbolKind, symbolName, containerName);
         }
         /** Creates a DefinitionInfo directly from the name of a declaration. */
-        function createDefinitionInfoFromName(checker, declaration, symbolKind, symbolName, containerName) {
-            var name = ts.getNameOfDeclaration(declaration) || declaration;
-            var sourceFile = name.getSourceFile();
-            var textSpan = ts.createTextSpanFromNode(name, sourceFile);
+        function createDefinitionInfoFromName(checker, declaration, symbolKind, symbolName, containerName, textSpan) {
+            var sourceFile = declaration.getSourceFile();
+            if (!textSpan) {
+                var name = ts.getNameOfDeclaration(declaration) || declaration;
+                textSpan = ts.createTextSpanFromNode(name, sourceFile);
+            }
             return __assign(__assign({ fileName: sourceFile.fileName, textSpan: textSpan, kind: symbolKind, name: symbolName, containerKind: undefined, // TODO: GH#18217
                 containerName: containerName }, ts.FindAllReferences.toContextSpan(textSpan, sourceFile, ts.FindAllReferences.getContextNode(declaration))), { isLocal: !isDefinitionVisible(checker, declaration) });
         }
@@ -130500,22 +133463,22 @@
                 return isDefinitionVisible(checker, declaration.parent);
             // Handle some exceptions here like arrow function, members of class and object literal expression which are technically not visible but we want the definition to be determined by its parent
             switch (declaration.kind) {
-                case 164 /* PropertyDeclaration */:
-                case 168 /* GetAccessor */:
-                case 169 /* SetAccessor */:
-                case 166 /* MethodDeclaration */:
+                case 165 /* PropertyDeclaration */:
+                case 170 /* GetAccessor */:
+                case 171 /* SetAccessor */:
+                case 167 /* MethodDeclaration */:
                     // Private/protected properties/methods are not visible
                     if (ts.hasEffectiveModifier(declaration, 8 /* Private */))
                         return false;
                 // Public properties/methods are visible if its parents are visible, so:
                 // falls through
-                case 167 /* Constructor */:
-                case 289 /* PropertyAssignment */:
-                case 290 /* ShorthandPropertyAssignment */:
-                case 201 /* ObjectLiteralExpression */:
-                case 222 /* ClassExpression */:
-                case 210 /* ArrowFunction */:
-                case 209 /* FunctionExpression */:
+                case 169 /* Constructor */:
+                case 291 /* PropertyAssignment */:
+                case 292 /* ShorthandPropertyAssignment */:
+                case 203 /* ObjectLiteralExpression */:
+                case 224 /* ClassExpression */:
+                case 212 /* ArrowFunction */:
+                case 211 /* FunctionExpression */:
                     return isDefinitionVisible(checker, declaration.parent);
                 default:
                     return false;
@@ -130553,9 +133516,9 @@
         }
         function isConstructorLike(node) {
             switch (node.kind) {
-                case 167 /* Constructor */:
-                case 176 /* ConstructorType */:
-                case 171 /* ConstructSignature */:
+                case 169 /* Constructor */:
+                case 178 /* ConstructorType */:
+                case 173 /* ConstructSignature */:
                     return true;
                 default:
                     return false;
@@ -130660,10 +133623,20 @@
             var parts = [];
             ts.forEachUnique(declarations, function (declaration) {
                 for (var _i = 0, _a = getCommentHavingNodes(declaration); _i < _a.length; _i++) {
-                    var comment = _a[_i].comment;
-                    if (comment === undefined)
+                    var jsdoc = _a[_i];
+                    // skip comments containing @typedefs since they're not associated with particular declarations
+                    // Exceptions:
+                    // - @typedefs are themselves declarations with associated comments
+                    // - @param or @return indicate that the author thinks of it as a 'local' @typedef that's part of the function documentation
+                    if (jsdoc.comment === undefined
+                        || ts.isJSDoc(jsdoc)
+                            && declaration.kind !== 340 /* JSDocTypedefTag */ && declaration.kind !== 333 /* JSDocCallbackTag */
+                            && jsdoc.tags
+                            && jsdoc.tags.some(function (t) { return t.kind === 340 /* JSDocTypedefTag */ || t.kind === 333 /* JSDocCallbackTag */; })
+                            && !jsdoc.tags.some(function (t) { return t.kind === 335 /* JSDocParameterTag */ || t.kind === 336 /* JSDocReturnTag */; })) {
                         continue;
-                    var newparts = getDisplayPartsFromComment(comment, checker);
+                    }
+                    var newparts = getDisplayPartsFromComment(jsdoc.comment, checker);
                     if (!ts.contains(parts, newparts, isIdenticalListOfDisplayParts)) {
                         parts.push(newparts);
                     }
@@ -130677,11 +133650,11 @@
         }
         function getCommentHavingNodes(declaration) {
             switch (declaration.kind) {
-                case 330 /* JSDocParameterTag */:
-                case 337 /* JSDocPropertyTag */:
+                case 335 /* JSDocParameterTag */:
+                case 342 /* JSDocPropertyTag */:
                     return [declaration];
-                case 328 /* JSDocCallbackTag */:
-                case 335 /* JSDocTypedefTag */:
+                case 333 /* JSDocCallbackTag */:
+                case 340 /* JSDocTypedefTag */:
                     return [declaration, declaration.parent];
                 default:
                     return ts.getJSDocCommentsAndTags(declaration);
@@ -130689,39 +133662,47 @@
         }
         function getJsDocTagsFromDeclarations(declarations, checker) {
             // Only collect doc comments from duplicate declarations once.
-            var tags = [];
+            var infos = [];
             ts.forEachUnique(declarations, function (declaration) {
-                for (var _i = 0, _a = ts.getJSDocTags(declaration); _i < _a.length; _i++) {
-                    var tag = _a[_i];
-                    tags.push({ name: tag.tagName.text, text: getCommentDisplayParts(tag, checker) });
+                var tags = ts.getJSDocTags(declaration);
+                // skip comments containing @typedefs since they're not associated with particular declarations
+                // Exceptions:
+                // - @param or @return indicate that the author thinks of it as a 'local' @typedef that's part of the function documentation
+                if (tags.some(function (t) { return t.kind === 340 /* JSDocTypedefTag */ || t.kind === 333 /* JSDocCallbackTag */; })
+                    && !tags.some(function (t) { return t.kind === 335 /* JSDocParameterTag */ || t.kind === 336 /* JSDocReturnTag */; })) {
+                    return;
+                }
+                for (var _i = 0, tags_1 = tags; _i < tags_1.length; _i++) {
+                    var tag = tags_1[_i];
+                    infos.push({ name: tag.tagName.text, text: getCommentDisplayParts(tag, checker) });
                 }
             });
-            return tags;
+            return infos;
         }
         JsDoc.getJsDocTagsFromDeclarations = getJsDocTagsFromDeclarations;
         function getDisplayPartsFromComment(comment, checker) {
             if (typeof comment === "string") {
                 return [ts.textPart(comment)];
             }
-            return ts.flatMap(comment, function (node) { return node.kind === 313 /* JSDocText */ ? [ts.textPart(node.text)] : ts.buildLinkParts(node, checker); });
+            return ts.flatMap(comment, function (node) { return node.kind === 316 /* JSDocText */ ? [ts.textPart(node.text)] : ts.buildLinkParts(node, checker); });
         }
         function getCommentDisplayParts(tag, checker) {
             var comment = tag.comment, kind = tag.kind;
             var namePart = getTagNameDisplayPart(kind);
             switch (kind) {
-                case 319 /* JSDocImplementsTag */:
+                case 324 /* JSDocImplementsTag */:
                     return withNode(tag.class);
-                case 318 /* JSDocAugmentsTag */:
+                case 323 /* JSDocAugmentsTag */:
                     return withNode(tag.class);
-                case 334 /* JSDocTemplateTag */:
+                case 339 /* JSDocTemplateTag */:
                     return addComment(tag.typeParameters.map(function (tp) { return tp.getText(); }).join(", "));
-                case 333 /* JSDocTypeTag */:
+                case 338 /* JSDocTypeTag */:
                     return withNode(tag.typeExpression);
-                case 335 /* JSDocTypedefTag */:
-                case 328 /* JSDocCallbackTag */:
-                case 337 /* JSDocPropertyTag */:
-                case 330 /* JSDocParameterTag */:
-                case 336 /* JSDocSeeTag */:
+                case 340 /* JSDocTypedefTag */:
+                case 333 /* JSDocCallbackTag */:
+                case 342 /* JSDocPropertyTag */:
+                case 335 /* JSDocParameterTag */:
+                case 341 /* JSDocSeeTag */:
                     var name = tag.name;
                     return name ? withNode(name)
                         : comment === undefined ? undefined
@@ -130735,10 +133716,10 @@
             function addComment(s) {
                 if (comment) {
                     if (s.match(/^https?$/)) {
-                        return __spreadArray([ts.textPart(s)], getDisplayPartsFromComment(comment, checker));
+                        return __spreadArray([ts.textPart(s)], getDisplayPartsFromComment(comment, checker), true);
                     }
                     else {
-                        return __spreadArray([namePart(s), ts.spacePart()], getDisplayPartsFromComment(comment, checker));
+                        return __spreadArray([namePart(s), ts.spacePart()], getDisplayPartsFromComment(comment, checker), true);
                     }
                 }
                 else {
@@ -130748,14 +133729,14 @@
         }
         function getTagNameDisplayPart(kind) {
             switch (kind) {
-                case 330 /* JSDocParameterTag */:
+                case 335 /* JSDocParameterTag */:
                     return ts.parameterNamePart;
-                case 337 /* JSDocPropertyTag */:
+                case 342 /* JSDocPropertyTag */:
                     return ts.propertyNamePart;
-                case 334 /* JSDocTemplateTag */:
+                case 339 /* JSDocTemplateTag */:
                     return ts.typeParameterNamePart;
-                case 335 /* JSDocTypedefTag */:
-                case 328 /* JSDocCallbackTag */:
+                case 340 /* JSDocTypedefTag */:
+                case 333 /* JSDocCallbackTag */:
                     return ts.typeAliasNamePart;
                 default:
                     return ts.textPart;
@@ -130906,7 +133887,7 @@
         function parameterDocComments(parameters, isJavaScriptFile, indentationStr, newLine) {
             return parameters.map(function (_a, i) {
                 var name = _a.name, dotDotDotToken = _a.dotDotDotToken;
-                var paramName = name.kind === 78 /* Identifier */ ? name.text : "param" + i;
+                var paramName = name.kind === 79 /* Identifier */ ? name.text : "param" + i;
                 var type = isJavaScriptFile ? (dotDotDotToken ? "{...any} " : "{any} ") : "";
                 return indentationStr + " * @param " + type + paramName + newLine;
             }).join("");
@@ -130919,24 +133900,24 @@
         }
         function getCommentOwnerInfoWorker(commentOwner, options) {
             switch (commentOwner.kind) {
-                case 252 /* FunctionDeclaration */:
-                case 209 /* FunctionExpression */:
-                case 166 /* MethodDeclaration */:
-                case 167 /* Constructor */:
-                case 165 /* MethodSignature */:
-                case 210 /* ArrowFunction */:
+                case 254 /* FunctionDeclaration */:
+                case 211 /* FunctionExpression */:
+                case 167 /* MethodDeclaration */:
+                case 169 /* Constructor */:
+                case 166 /* MethodSignature */:
+                case 212 /* ArrowFunction */:
                     var host = commentOwner;
                     return { commentOwner: commentOwner, parameters: host.parameters, hasReturn: hasReturn(host, options) };
-                case 289 /* PropertyAssignment */:
+                case 291 /* PropertyAssignment */:
                     return getCommentOwnerInfoWorker(commentOwner.initializer, options);
-                case 253 /* ClassDeclaration */:
-                case 254 /* InterfaceDeclaration */:
-                case 163 /* PropertySignature */:
-                case 256 /* EnumDeclaration */:
-                case 292 /* EnumMember */:
-                case 255 /* TypeAliasDeclaration */:
+                case 255 /* ClassDeclaration */:
+                case 256 /* InterfaceDeclaration */:
+                case 164 /* PropertySignature */:
+                case 258 /* EnumDeclaration */:
+                case 294 /* EnumMember */:
+                case 257 /* TypeAliasDeclaration */:
                     return { commentOwner: commentOwner };
-                case 233 /* VariableStatement */: {
+                case 235 /* VariableStatement */: {
                     var varStatement = commentOwner;
                     var varDeclarations = varStatement.declarationList.declarations;
                     var host_1 = varDeclarations.length === 1 && varDeclarations[0].initializer
@@ -130946,16 +133927,16 @@
                         ? { commentOwner: commentOwner, parameters: host_1.parameters, hasReturn: hasReturn(host_1, options) }
                         : { commentOwner: commentOwner };
                 }
-                case 298 /* SourceFile */:
+                case 300 /* SourceFile */:
                     return "quit";
-                case 257 /* ModuleDeclaration */:
+                case 259 /* ModuleDeclaration */:
                     // If in walking up the tree, we hit a a nested namespace declaration,
                     // then we must be somewhere within a dotted namespace name; however we don't
                     // want to give back a JSDoc template for the 'b' or 'c' in 'namespace a.b.c { }'.
-                    return commentOwner.parent.kind === 257 /* ModuleDeclaration */ ? undefined : { commentOwner: commentOwner };
-                case 234 /* ExpressionStatement */:
+                    return commentOwner.parent.kind === 259 /* ModuleDeclaration */ ? undefined : { commentOwner: commentOwner };
+                case 236 /* ExpressionStatement */:
                     return getCommentOwnerInfoWorker(commentOwner.expression, options);
-                case 217 /* BinaryExpression */: {
+                case 219 /* BinaryExpression */: {
                     var be = commentOwner;
                     if (ts.getAssignmentDeclarationKind(be) === 0 /* None */) {
                         return "quit";
@@ -130964,7 +133945,7 @@
                         ? { commentOwner: commentOwner, parameters: be.right.parameters, hasReturn: hasReturn(be.right, options) }
                         : { commentOwner: commentOwner };
                 }
-                case 164 /* PropertyDeclaration */:
+                case 165 /* PropertyDeclaration */:
                     var init = commentOwner.initializer;
                     if (init && (ts.isFunctionExpression(init) || ts.isArrowFunction(init))) {
                         return { commentOwner: commentOwner, parameters: init.parameters, hasReturn: hasReturn(init, options) };
@@ -130977,14 +133958,14 @@
                     || ts.isFunctionLikeDeclaration(node) && node.body && ts.isBlock(node.body) && !!ts.forEachReturnStatement(node.body, function (n) { return n; }));
         }
         function getRightHandSideOfAssignment(rightHandSide) {
-            while (rightHandSide.kind === 208 /* ParenthesizedExpression */) {
+            while (rightHandSide.kind === 210 /* ParenthesizedExpression */) {
                 rightHandSide = rightHandSide.expression;
             }
             switch (rightHandSide.kind) {
-                case 209 /* FunctionExpression */:
-                case 210 /* ArrowFunction */:
+                case 211 /* FunctionExpression */:
+                case 212 /* ArrowFunction */:
                     return rightHandSide;
-                case 222 /* ClassExpression */:
+                case 224 /* ClassExpression */:
                     return ts.find(rightHandSide.members, ts.isConstructorDeclaration);
             }
         }
@@ -131043,9 +134024,9 @@
         }
         function shouldKeepItem(declaration, checker) {
             switch (declaration.kind) {
-                case 263 /* ImportClause */:
-                case 266 /* ImportSpecifier */:
-                case 261 /* ImportEqualsDeclaration */:
+                case 265 /* ImportClause */:
+                case 268 /* ImportSpecifier */:
+                case 263 /* ImportEqualsDeclaration */:
                     var importer = checker.getSymbolAtLocation(declaration.name); // TODO: GH#18217
                     var imported = checker.getAliasedSymbol(importer);
                     return importer.escapedName !== imported.escapedName;
@@ -131055,7 +134036,7 @@
         }
         function tryAddSingleDeclarationName(declaration, containers) {
             var name = ts.getNameOfDeclaration(declaration);
-            return !!name && (pushLiteral(name, containers) || name.kind === 159 /* ComputedPropertyName */ && tryAddComputedPropertyName(name.expression, containers));
+            return !!name && (pushLiteral(name, containers) || name.kind === 160 /* ComputedPropertyName */ && tryAddComputedPropertyName(name.expression, containers));
         }
         // Only added the names of computed properties if they're simple dotted expressions, like:
         //
@@ -131072,7 +134053,7 @@
             // First, if we started with a computed property name, then add all but the last
             // portion into the container array.
             var name = ts.getNameOfDeclaration(declaration);
-            if (name && name.kind === 159 /* ComputedPropertyName */ && !tryAddComputedPropertyName(name.expression, containers)) {
+            if (name && name.kind === 160 /* ComputedPropertyName */ && !tryAddComputedPropertyName(name.expression, containers)) {
                 return ts.emptyArray;
             }
             // Don't include the last portion.
@@ -131289,7 +134270,7 @@
          */
         function hasNavigationBarName(node) {
             return !ts.hasDynamicName(node) ||
-                (node.kind !== 217 /* BinaryExpression */ &&
+                (node.kind !== 219 /* BinaryExpression */ &&
                     ts.isPropertyAccessExpression(node.name.expression) &&
                     ts.isIdentifier(node.name.expression.expression) &&
                     ts.idText(node.name.expression.expression) === "Symbol");
@@ -131302,7 +134283,7 @@
                 return;
             }
             switch (node.kind) {
-                case 167 /* Constructor */:
+                case 169 /* Constructor */:
                     // Get parameter properties, and treat them as being on the *same* level as the constructor, not under it.
                     var ctr = node;
                     addNodeWithRecursiveChild(ctr, ctr.body);
@@ -131314,25 +134295,25 @@
                         }
                     }
                     break;
-                case 166 /* MethodDeclaration */:
-                case 168 /* GetAccessor */:
-                case 169 /* SetAccessor */:
-                case 165 /* MethodSignature */:
+                case 167 /* MethodDeclaration */:
+                case 170 /* GetAccessor */:
+                case 171 /* SetAccessor */:
+                case 166 /* MethodSignature */:
                     if (hasNavigationBarName(node)) {
                         addNodeWithRecursiveChild(node, node.body);
                     }
                     break;
-                case 164 /* PropertyDeclaration */:
+                case 165 /* PropertyDeclaration */:
                     if (hasNavigationBarName(node)) {
                         addNodeWithRecursiveInitializer(node);
                     }
                     break;
-                case 163 /* PropertySignature */:
+                case 164 /* PropertySignature */:
                     if (hasNavigationBarName(node)) {
                         addLeafNode(node);
                     }
                     break;
-                case 263 /* ImportClause */:
+                case 265 /* ImportClause */:
                     var importClause = node;
                     // Handle default import case e.g.:
                     //    import d from "mod";
@@ -131344,7 +134325,7 @@
                     //    import {a, b as B} from "mod";
                     var namedBindings = importClause.namedBindings;
                     if (namedBindings) {
-                        if (namedBindings.kind === 264 /* NamespaceImport */) {
+                        if (namedBindings.kind === 266 /* NamespaceImport */) {
                             addLeafNode(namedBindings);
                         }
                         else {
@@ -131355,17 +134336,17 @@
                         }
                     }
                     break;
-                case 290 /* ShorthandPropertyAssignment */:
+                case 292 /* ShorthandPropertyAssignment */:
                     addNodeWithRecursiveChild(node, node.name);
                     break;
-                case 291 /* SpreadAssignment */:
+                case 293 /* SpreadAssignment */:
                     var expression = node.expression;
                     // Use the expression as the name of the SpreadAssignment, otherwise show as <unknown>.
                     ts.isIdentifier(expression) ? addLeafNode(node, expression) : addLeafNode(node);
                     break;
-                case 199 /* BindingElement */:
-                case 289 /* PropertyAssignment */:
-                case 250 /* VariableDeclaration */: {
+                case 201 /* BindingElement */:
+                case 291 /* PropertyAssignment */:
+                case 252 /* VariableDeclaration */: {
                     var child = node;
                     if (ts.isBindingPattern(child.name)) {
                         addChildrenRecursively(child.name);
@@ -131375,7 +134356,7 @@
                     }
                     break;
                 }
-                case 252 /* FunctionDeclaration */:
+                case 254 /* FunctionDeclaration */:
                     var nameNode = node.name;
                     // If we see a function declaration track as a possible ES5 class
                     if (nameNode && ts.isIdentifier(nameNode)) {
@@ -131383,11 +134364,11 @@
                     }
                     addNodeWithRecursiveChild(node, node.body);
                     break;
-                case 210 /* ArrowFunction */:
-                case 209 /* FunctionExpression */:
+                case 212 /* ArrowFunction */:
+                case 211 /* FunctionExpression */:
                     addNodeWithRecursiveChild(node, node.body);
                     break;
-                case 256 /* EnumDeclaration */:
+                case 258 /* EnumDeclaration */:
                     startNode(node);
                     for (var _e = 0, _f = node.members; _e < _f.length; _e++) {
                         var member = _f[_e];
@@ -131397,9 +134378,9 @@
                     }
                     endNode();
                     break;
-                case 253 /* ClassDeclaration */:
-                case 222 /* ClassExpression */:
-                case 254 /* InterfaceDeclaration */:
+                case 255 /* ClassDeclaration */:
+                case 224 /* ClassExpression */:
+                case 256 /* InterfaceDeclaration */:
                     startNode(node);
                     for (var _g = 0, _h = node.members; _g < _h.length; _g++) {
                         var member = _h[_g];
@@ -131407,10 +134388,10 @@
                     }
                     endNode();
                     break;
-                case 257 /* ModuleDeclaration */:
+                case 259 /* ModuleDeclaration */:
                     addNodeWithRecursiveChild(node, getInteriorModule(node).body);
                     break;
-                case 267 /* ExportAssignment */: {
+                case 269 /* ExportAssignment */: {
                     var expression_1 = node.expression;
                     var child = ts.isObjectLiteralExpression(expression_1) || ts.isCallExpression(expression_1) ? expression_1 :
                         ts.isArrowFunction(expression_1) || ts.isFunctionExpression(expression_1) ? expression_1.body : undefined;
@@ -131424,16 +134405,16 @@
                     }
                     break;
                 }
-                case 271 /* ExportSpecifier */:
-                case 261 /* ImportEqualsDeclaration */:
-                case 172 /* IndexSignature */:
-                case 170 /* CallSignature */:
-                case 171 /* ConstructSignature */:
-                case 255 /* TypeAliasDeclaration */:
+                case 273 /* ExportSpecifier */:
+                case 263 /* ImportEqualsDeclaration */:
+                case 174 /* IndexSignature */:
+                case 172 /* CallSignature */:
+                case 173 /* ConstructSignature */:
+                case 257 /* TypeAliasDeclaration */:
                     addLeafNode(node);
                     break;
-                case 204 /* CallExpression */:
-                case 217 /* BinaryExpression */: {
+                case 206 /* CallExpression */:
+                case 219 /* BinaryExpression */: {
                     var special = ts.getAssignmentDeclarationKind(node);
                     switch (special) {
                         case 1 /* ExportsProperty */:
@@ -131675,12 +134656,12 @@
                 return false;
             }
             switch (a.kind) {
-                case 164 /* PropertyDeclaration */:
-                case 166 /* MethodDeclaration */:
-                case 168 /* GetAccessor */:
-                case 169 /* SetAccessor */:
-                    return ts.hasSyntacticModifier(a, 32 /* Static */) === ts.hasSyntacticModifier(b, 32 /* Static */);
-                case 257 /* ModuleDeclaration */:
+                case 165 /* PropertyDeclaration */:
+                case 167 /* MethodDeclaration */:
+                case 170 /* GetAccessor */:
+                case 171 /* SetAccessor */:
+                    return ts.isStatic(a) === ts.isStatic(b);
+                case 259 /* ModuleDeclaration */:
                     return areSameModule(a, b)
                         && getFullyQualifiedModuleName(a) === getFullyQualifiedModuleName(b);
                 default:
@@ -131699,7 +134680,7 @@
         // We use 1 NavNode to represent 'A.B.C', but there are multiple source nodes.
         // Only merge module nodes that have the same chain. Don't merge 'A.B.C' with 'A'!
         function areSameModule(a, b) {
-            return a.body.kind === b.body.kind && (a.body.kind !== 257 /* ModuleDeclaration */ || areSameModule(a.body, b.body));
+            return a.body.kind === b.body.kind && (a.body.kind !== 259 /* ModuleDeclaration */ || areSameModule(a.body, b.body));
         }
         /** Merge source into target. Source should be thrown away after this is called. */
         function merge(target, source) {
@@ -131729,7 +134710,7 @@
          * So `new()` can still come before an `aardvark` method.
          */
         function tryGetName(node) {
-            if (node.kind === 257 /* ModuleDeclaration */) {
+            if (node.kind === 259 /* ModuleDeclaration */) {
                 return getModuleName(node);
             }
             var declName = ts.getNameOfDeclaration(node);
@@ -131738,16 +134719,16 @@
                 return propertyName && ts.unescapeLeadingUnderscores(propertyName);
             }
             switch (node.kind) {
-                case 209 /* FunctionExpression */:
-                case 210 /* ArrowFunction */:
-                case 222 /* ClassExpression */:
+                case 211 /* FunctionExpression */:
+                case 212 /* ArrowFunction */:
+                case 224 /* ClassExpression */:
                     return getFunctionOrClassName(node);
                 default:
                     return undefined;
             }
         }
         function getItemName(node, name) {
-            if (node.kind === 257 /* ModuleDeclaration */) {
+            if (node.kind === 259 /* ModuleDeclaration */) {
                 return cleanText(getModuleName(node));
             }
             if (name) {
@@ -131759,18 +134740,18 @@
                 }
             }
             switch (node.kind) {
-                case 298 /* SourceFile */:
+                case 300 /* SourceFile */:
                     var sourceFile = node;
                     return ts.isExternalModule(sourceFile)
                         ? "\"" + ts.escapeString(ts.getBaseFileName(ts.removeFileExtension(ts.normalizePath(sourceFile.fileName)))) + "\""
                         : "<global>";
-                case 267 /* ExportAssignment */:
+                case 269 /* ExportAssignment */:
                     return ts.isExportAssignment(node) && node.isExportEquals ? "export=" /* ExportEquals */ : "default" /* Default */;
-                case 210 /* ArrowFunction */:
-                case 252 /* FunctionDeclaration */:
-                case 209 /* FunctionExpression */:
-                case 253 /* ClassDeclaration */:
-                case 222 /* ClassExpression */:
+                case 212 /* ArrowFunction */:
+                case 254 /* FunctionDeclaration */:
+                case 211 /* FunctionExpression */:
+                case 255 /* ClassDeclaration */:
+                case 224 /* ClassExpression */:
                     if (ts.getSyntacticModifierFlags(node) & 512 /* Default */) {
                         return "default";
                     }
@@ -131778,13 +134759,13 @@
                     // (eg: "app\n.onactivated"), so we should remove the whitespace for readability in the
                     // navigation bar.
                     return getFunctionOrClassName(node);
-                case 167 /* Constructor */:
+                case 169 /* Constructor */:
                     return "constructor";
-                case 171 /* ConstructSignature */:
+                case 173 /* ConstructSignature */:
                     return "new()";
-                case 170 /* CallSignature */:
+                case 172 /* CallSignature */:
                     return "()";
-                case 172 /* IndexSignature */:
+                case 174 /* IndexSignature */:
                     return "[]";
                 default:
                     return "<unknown>";
@@ -131817,19 +134798,19 @@
                 }
                 // Some nodes are otherwise important enough to always include in the primary navigation menu.
                 switch (navigationBarNodeKind(item)) {
-                    case 253 /* ClassDeclaration */:
-                    case 222 /* ClassExpression */:
-                    case 256 /* EnumDeclaration */:
-                    case 254 /* InterfaceDeclaration */:
-                    case 257 /* ModuleDeclaration */:
-                    case 298 /* SourceFile */:
-                    case 255 /* TypeAliasDeclaration */:
-                    case 335 /* JSDocTypedefTag */:
-                    case 328 /* JSDocCallbackTag */:
+                    case 255 /* ClassDeclaration */:
+                    case 224 /* ClassExpression */:
+                    case 258 /* EnumDeclaration */:
+                    case 256 /* InterfaceDeclaration */:
+                    case 259 /* ModuleDeclaration */:
+                    case 300 /* SourceFile */:
+                    case 257 /* TypeAliasDeclaration */:
+                    case 340 /* JSDocTypedefTag */:
+                    case 333 /* JSDocCallbackTag */:
                         return true;
-                    case 210 /* ArrowFunction */:
-                    case 252 /* FunctionDeclaration */:
-                    case 209 /* FunctionExpression */:
+                    case 212 /* ArrowFunction */:
+                    case 254 /* FunctionDeclaration */:
+                    case 211 /* FunctionExpression */:
                         return isTopLevelFunctionDeclaration(item);
                     default:
                         return false;
@@ -131839,10 +134820,10 @@
                         return false;
                     }
                     switch (navigationBarNodeKind(item.parent)) {
-                        case 258 /* ModuleBlock */:
-                        case 298 /* SourceFile */:
-                        case 166 /* MethodDeclaration */:
-                        case 167 /* Constructor */:
+                        case 260 /* ModuleBlock */:
+                        case 300 /* SourceFile */:
+                        case 167 /* MethodDeclaration */:
+                        case 169 /* Constructor */:
                             return true;
                         default:
                             return false;
@@ -131904,7 +134885,7 @@
         function getFullyQualifiedModuleName(moduleDeclaration) {
             // Otherwise, we need to aggregate each identifier to build up the qualified name.
             var result = [ts.getTextOfIdentifierOrLiteral(moduleDeclaration.name)];
-            while (moduleDeclaration.body && moduleDeclaration.body.kind === 257 /* ModuleDeclaration */) {
+            while (moduleDeclaration.body && moduleDeclaration.body.kind === 259 /* ModuleDeclaration */) {
                 moduleDeclaration = moduleDeclaration.body;
                 result.push(ts.getTextOfIdentifierOrLiteral(moduleDeclaration.name));
             }
@@ -131918,13 +134899,13 @@
             return decl.body && ts.isModuleDeclaration(decl.body) ? getInteriorModule(decl.body) : decl;
         }
         function isComputedProperty(member) {
-            return !member.name || member.name.kind === 159 /* ComputedPropertyName */;
+            return !member.name || member.name.kind === 160 /* ComputedPropertyName */;
         }
         function getNodeSpan(node) {
-            return node.kind === 298 /* SourceFile */ ? ts.createTextSpanFromRange(node) : ts.createTextSpanFromNode(node, curSourceFile);
+            return node.kind === 300 /* SourceFile */ ? ts.createTextSpanFromRange(node) : ts.createTextSpanFromNode(node, curSourceFile);
         }
         function getModifiers(node) {
-            if (node.parent && node.parent.kind === 250 /* VariableDeclaration */) {
+            if (node.parent && node.parent.kind === 252 /* VariableDeclaration */) {
                 node = node.parent;
             }
             return ts.getNodeModifiers(node);
@@ -131939,7 +134920,7 @@
                 return cleanText(ts.declarationNameToString(parent.name));
             }
             // See if it is of the form "<expr> = function(){...}". If so, use the text from the left-hand side.
-            else if (ts.isBinaryExpression(parent) && parent.operatorToken.kind === 62 /* EqualsToken */) {
+            else if (ts.isBinaryExpression(parent) && parent.operatorToken.kind === 63 /* EqualsToken */) {
                 return nodeText(parent.left).replace(whiteSpaceRegex, "");
             }
             // See if it is a property assignment, and if so use the property name
@@ -131982,9 +134963,9 @@
         }
         function isFunctionOrClassExpression(node) {
             switch (node.kind) {
-                case 210 /* ArrowFunction */:
-                case 209 /* FunctionExpression */:
-                case 222 /* ClassExpression */:
+                case 212 /* ArrowFunction */:
+                case 211 /* FunctionExpression */:
+                case 224 /* ClassExpression */:
                     return true;
                 default:
                     return false;
@@ -132349,11 +135330,11 @@
         function getModuleSpecifierExpression(declaration) {
             var _a;
             switch (declaration.kind) {
-                case 261 /* ImportEqualsDeclaration */:
+                case 263 /* ImportEqualsDeclaration */:
                     return (_a = ts.tryCast(declaration.moduleReference, ts.isExternalModuleReference)) === null || _a === void 0 ? void 0 : _a.expression;
-                case 262 /* ImportDeclaration */:
+                case 264 /* ImportDeclaration */:
                     return declaration.moduleSpecifier;
-                case 233 /* VariableStatement */:
+                case 235 /* VariableStatement */:
                     return declaration.declarationList.declarations[0].initializer.arguments[0];
             }
         }
@@ -132392,19 +135373,19 @@
         function getImportKindOrder(s1) {
             var _a;
             switch (s1.kind) {
-                case 262 /* ImportDeclaration */:
+                case 264 /* ImportDeclaration */:
                     if (!s1.importClause)
                         return 0;
                     if (s1.importClause.isTypeOnly)
                         return 1;
-                    if (((_a = s1.importClause.namedBindings) === null || _a === void 0 ? void 0 : _a.kind) === 264 /* NamespaceImport */)
+                    if (((_a = s1.importClause.namedBindings) === null || _a === void 0 ? void 0 : _a.kind) === 266 /* NamespaceImport */)
                         return 2;
                     if (s1.importClause.name)
                         return 3;
                     return 4;
-                case 261 /* ImportEqualsDeclaration */:
+                case 263 /* ImportEqualsDeclaration */:
                     return 5;
-                case 233 /* VariableStatement */:
+                case 235 /* VariableStatement */:
                     return 6;
             }
         }
@@ -132426,7 +135407,7 @@
             var depthRemaining = 40;
             var current = 0;
             // Includes the EOF Token so that comments which aren't attached to statements are included
-            var statements = __spreadArray(__spreadArray([], sourceFile.statements), [sourceFile.endOfFileToken]);
+            var statements = __spreadArray(__spreadArray([], sourceFile.statements, true), [sourceFile.endOfFileToken], false);
             var n = statements.length;
             while (current < n) {
                 while (current < n && !ts.isAnyImportSyntax(statements[current])) {
@@ -132442,7 +135423,7 @@
                 }
                 var lastImport = current - 1;
                 if (lastImport !== firstImport) {
-                    out.push(createOutliningSpanFromBounds(ts.findChildOfKind(statements[firstImport], 99 /* ImportKeyword */, sourceFile).getStart(sourceFile), statements[lastImport].getEnd(), "imports" /* Imports */));
+                    out.push(createOutliningSpanFromBounds(ts.findChildOfKind(statements[firstImport], 100 /* ImportKeyword */, sourceFile).getStart(sourceFile), statements[lastImport].getEnd(), "imports" /* Imports */));
                 }
             }
             function visitNonImportNode(n) {
@@ -132450,12 +135431,18 @@
                 if (depthRemaining === 0)
                     return;
                 cancellationToken.throwIfCancellationRequested();
-                if (ts.isDeclaration(n) || ts.isVariableStatement(n) || n.kind === 1 /* EndOfFileToken */) {
+                if (ts.isDeclaration(n) || ts.isVariableStatement(n) || ts.isReturnStatement(n) || n.kind === 1 /* EndOfFileToken */) {
                     addOutliningForLeadingCommentsForNode(n, sourceFile, cancellationToken, out);
                 }
                 if (ts.isFunctionLike(n) && ts.isBinaryExpression(n.parent) && ts.isPropertyAccessExpression(n.parent.left)) {
                     addOutliningForLeadingCommentsForNode(n.parent.left, sourceFile, cancellationToken, out);
                 }
+                if (ts.isBlock(n) || ts.isModuleBlock(n)) {
+                    addOutliningForLeadingCommentsForPos(n.statements.end, sourceFile, cancellationToken, out);
+                }
+                if (ts.isClassLike(n) || ts.isInterfaceDeclaration(n)) {
+                    addOutliningForLeadingCommentsForPos(n.members.end, sourceFile, cancellationToken, out);
+                }
                 var span = getOutliningSpanForNode(n, sourceFile);
                 if (span)
                     out.push(span);
@@ -132506,12 +135493,19 @@
                 }
             }
         }
-        var regionDelimiterRegExp = /^\s*\/\/\s*#(end)?region(?:\s+(.*))?(?:\r)?$/;
+        var regionDelimiterRegExp = /^#(end)?region(?:\s+(.*))?(?:\r)?$/;
         function isRegionDelimiter(lineText) {
+            // We trim the leading whitespace and // without the regex since the
+            // multiple potential whitespace matches can make for some gnarly backtracking behavior
+            lineText = ts.trimStringStart(lineText);
+            if (!ts.startsWith(lineText, "\/\/")) {
+                return null; // eslint-disable-line no-null/no-null
+            }
+            lineText = ts.trimString(lineText.slice(2));
             return regionDelimiterRegExp.exec(lineText);
         }
-        function addOutliningForLeadingCommentsForNode(n, sourceFile, cancellationToken, out) {
-            var comments = ts.getLeadingCommentRangesOfNode(n, sourceFile);
+        function addOutliningForLeadingCommentsForPos(pos, sourceFile, cancellationToken, out) {
+            var comments = ts.getLeadingCommentRanges(sourceFile.text, pos);
             if (!comments)
                 return;
             var firstSingleLineCommentStart = -1;
@@ -132519,12 +135513,12 @@
             var singleLineCommentCount = 0;
             var sourceText = sourceFile.getFullText();
             for (var _i = 0, comments_1 = comments; _i < comments_1.length; _i++) {
-                var _a = comments_1[_i], kind = _a.kind, pos = _a.pos, end = _a.end;
+                var _a = comments_1[_i], kind = _a.kind, pos_1 = _a.pos, end = _a.end;
                 cancellationToken.throwIfCancellationRequested();
                 switch (kind) {
                     case 2 /* SingleLineCommentTrivia */:
                         // never fold region delimiters into single-line comment regions
-                        var commentText = sourceText.slice(pos, end);
+                        var commentText = sourceText.slice(pos_1, end);
                         if (isRegionDelimiter(commentText)) {
                             combineAndAddMultipleSingleLineComments();
                             singleLineCommentCount = 0;
@@ -132533,14 +135527,14 @@
                         // For single line comments, combine consecutive ones (2 or more) into
                         // a single span from the start of the first till the end of the last
                         if (singleLineCommentCount === 0) {
-                            firstSingleLineCommentStart = pos;
+                            firstSingleLineCommentStart = pos_1;
                         }
                         lastSingleLineCommentEnd = end;
                         singleLineCommentCount++;
                         break;
                     case 3 /* MultiLineCommentTrivia */:
                         combineAndAddMultipleSingleLineComments();
-                        out.push(createOutliningSpanFromBounds(pos, end, "comment" /* Comment */));
+                        out.push(createOutliningSpanFromBounds(pos_1, end, "comment" /* Comment */));
                         singleLineCommentCount = 0;
                         break;
                     default:
@@ -132555,12 +135549,17 @@
                 }
             }
         }
+        function addOutliningForLeadingCommentsForNode(n, sourceFile, cancellationToken, out) {
+            if (ts.isJsxText(n))
+                return;
+            addOutliningForLeadingCommentsForPos(n.pos, sourceFile, cancellationToken, out);
+        }
         function createOutliningSpanFromBounds(pos, end, kind) {
             return createOutliningSpan(ts.createTextSpanFromBounds(pos, end), kind);
         }
         function getOutliningSpanForNode(n, sourceFile) {
             switch (n.kind) {
-                case 231 /* Block */:
+                case 233 /* Block */:
                     if (ts.isFunctionLike(n.parent)) {
                         return functionSpan(n.parent, n, sourceFile);
                     }
@@ -132568,23 +135567,23 @@
                     // If the latter, we want to collapse the block, but consider its hint span
                     // to be the entire span of the parent.
                     switch (n.parent.kind) {
-                        case 236 /* DoStatement */:
-                        case 239 /* ForInStatement */:
-                        case 240 /* ForOfStatement */:
-                        case 238 /* ForStatement */:
-                        case 235 /* IfStatement */:
-                        case 237 /* WhileStatement */:
-                        case 244 /* WithStatement */:
-                        case 288 /* CatchClause */:
+                        case 238 /* DoStatement */:
+                        case 241 /* ForInStatement */:
+                        case 242 /* ForOfStatement */:
+                        case 240 /* ForStatement */:
+                        case 237 /* IfStatement */:
+                        case 239 /* WhileStatement */:
+                        case 246 /* WithStatement */:
+                        case 290 /* CatchClause */:
                             return spanForNode(n.parent);
-                        case 248 /* TryStatement */:
+                        case 250 /* TryStatement */:
                             // Could be the try-block, or the finally-block.
                             var tryStatement = n.parent;
                             if (tryStatement.tryBlock === n) {
                                 return spanForNode(n.parent);
                             }
                             else if (tryStatement.finallyBlock === n) {
-                                var node = ts.findChildOfKind(tryStatement, 95 /* FinallyKeyword */, sourceFile);
+                                var node = ts.findChildOfKind(tryStatement, 96 /* FinallyKeyword */, sourceFile);
                                 if (node)
                                     return spanForNode(node);
                             }
@@ -132594,40 +135593,40 @@
                             // the span of the block, independent of any parent span.
                             return createOutliningSpan(ts.createTextSpanFromNode(n, sourceFile), "code" /* Code */);
                     }
-                case 258 /* ModuleBlock */:
+                case 260 /* ModuleBlock */:
                     return spanForNode(n.parent);
-                case 253 /* ClassDeclaration */:
-                case 222 /* ClassExpression */:
-                case 254 /* InterfaceDeclaration */:
-                case 256 /* EnumDeclaration */:
-                case 259 /* CaseBlock */:
-                case 178 /* TypeLiteral */:
-                case 197 /* ObjectBindingPattern */:
+                case 255 /* ClassDeclaration */:
+                case 224 /* ClassExpression */:
+                case 256 /* InterfaceDeclaration */:
+                case 258 /* EnumDeclaration */:
+                case 261 /* CaseBlock */:
+                case 180 /* TypeLiteral */:
+                case 199 /* ObjectBindingPattern */:
                     return spanForNode(n);
-                case 180 /* TupleType */:
+                case 182 /* TupleType */:
                     return spanForNode(n, /*autoCollapse*/ false, /*useFullStart*/ !ts.isTupleTypeNode(n.parent), 22 /* OpenBracketToken */);
-                case 285 /* CaseClause */:
-                case 286 /* DefaultClause */:
+                case 287 /* CaseClause */:
+                case 288 /* DefaultClause */:
                     return spanForNodeArray(n.statements);
-                case 201 /* ObjectLiteralExpression */:
+                case 203 /* ObjectLiteralExpression */:
                     return spanForObjectOrArrayLiteral(n);
-                case 200 /* ArrayLiteralExpression */:
+                case 202 /* ArrayLiteralExpression */:
                     return spanForObjectOrArrayLiteral(n, 22 /* OpenBracketToken */);
-                case 274 /* JsxElement */:
+                case 276 /* JsxElement */:
                     return spanForJSXElement(n);
-                case 278 /* JsxFragment */:
+                case 280 /* JsxFragment */:
                     return spanForJSXFragment(n);
-                case 275 /* JsxSelfClosingElement */:
-                case 276 /* JsxOpeningElement */:
+                case 277 /* JsxSelfClosingElement */:
+                case 278 /* JsxOpeningElement */:
                     return spanForJSXAttributes(n.attributes);
-                case 219 /* TemplateExpression */:
+                case 221 /* TemplateExpression */:
                 case 14 /* NoSubstitutionTemplateLiteral */:
                     return spanForTemplateLiteral(n);
-                case 198 /* ArrayBindingPattern */:
+                case 200 /* ArrayBindingPattern */:
                     return spanForNode(n, /*autoCollapse*/ false, /*useFullStart*/ !ts.isBindingElement(n.parent), 22 /* OpenBracketToken */);
-                case 210 /* ArrowFunction */:
+                case 212 /* ArrowFunction */:
                     return spanForArrowFunction(n);
-                case 204 /* CallExpression */:
+                case 206 /* CallExpression */:
                     return spanForCallExpression(n);
             }
             function spanForCallExpression(node) {
@@ -132694,7 +135693,7 @@
         function functionSpan(node, body, sourceFile) {
             var openToken = tryGetFunctionOpenToken(node, body, sourceFile);
             var closeToken = ts.findChildOfKind(body, 19 /* CloseBraceToken */, sourceFile);
-            return openToken && closeToken && spanBetweenTokens(openToken, closeToken, node, sourceFile, /*autoCollapse*/ node.kind !== 210 /* ArrowFunction */);
+            return openToken && closeToken && spanBetweenTokens(openToken, closeToken, node, sourceFile, /*autoCollapse*/ node.kind !== 212 /* ArrowFunction */);
         }
         function spanBetweenTokens(openToken, closeToken, hintSpanNode, sourceFile, autoCollapse, useFullStart) {
             if (autoCollapse === void 0) { autoCollapse = false; }
@@ -133238,10 +136237,10 @@
          */
         function tryConsumeDeclare() {
             var token = ts.scanner.getToken();
-            if (token === 133 /* DeclareKeyword */) {
+            if (token === 134 /* DeclareKeyword */) {
                 // declare module "mod"
                 token = nextToken();
-                if (token === 139 /* ModuleKeyword */) {
+                if (token === 140 /* ModuleKeyword */) {
                     token = nextToken();
                     if (token === 10 /* StringLiteral */) {
                         recordAmbientExternalModule();
@@ -133259,7 +136258,7 @@
                 return false;
             }
             var token = ts.scanner.getToken();
-            if (token === 99 /* ImportKeyword */) {
+            if (token === 100 /* ImportKeyword */) {
                 token = nextToken();
                 if (token === 20 /* OpenParenToken */) {
                     token = nextToken();
@@ -133275,21 +136274,21 @@
                     return true;
                 }
                 else {
-                    if (token === 149 /* TypeKeyword */) {
+                    if (token === 150 /* TypeKeyword */) {
                         var skipTypeKeyword = ts.scanner.lookAhead(function () {
                             var token = ts.scanner.scan();
-                            return token !== 153 /* FromKeyword */ && (token === 41 /* AsteriskToken */ ||
+                            return token !== 154 /* FromKeyword */ && (token === 41 /* AsteriskToken */ ||
                                 token === 18 /* OpenBraceToken */ ||
-                                token === 78 /* Identifier */ ||
+                                token === 79 /* Identifier */ ||
                                 ts.isKeyword(token));
                         });
                         if (skipTypeKeyword) {
                             token = nextToken();
                         }
                     }
-                    if (token === 78 /* Identifier */ || ts.isKeyword(token)) {
+                    if (token === 79 /* Identifier */ || ts.isKeyword(token)) {
                         token = nextToken();
-                        if (token === 153 /* FromKeyword */) {
+                        if (token === 154 /* FromKeyword */) {
                             token = nextToken();
                             if (token === 10 /* StringLiteral */) {
                                 // import d from "mod";
@@ -133297,7 +136296,7 @@
                                 return true;
                             }
                         }
-                        else if (token === 62 /* EqualsToken */) {
+                        else if (token === 63 /* EqualsToken */) {
                             if (tryConsumeRequireCall(/*skipCurrentToken*/ true)) {
                                 return true;
                             }
@@ -133320,7 +136319,7 @@
                         }
                         if (token === 19 /* CloseBraceToken */) {
                             token = nextToken();
-                            if (token === 153 /* FromKeyword */) {
+                            if (token === 154 /* FromKeyword */) {
                                 token = nextToken();
                                 if (token === 10 /* StringLiteral */) {
                                     // import {a as A} from "mod";
@@ -133332,11 +136331,11 @@
                     }
                     else if (token === 41 /* AsteriskToken */) {
                         token = nextToken();
-                        if (token === 126 /* AsKeyword */) {
+                        if (token === 127 /* AsKeyword */) {
                             token = nextToken();
-                            if (token === 78 /* Identifier */ || ts.isKeyword(token)) {
+                            if (token === 79 /* Identifier */ || ts.isKeyword(token)) {
                                 token = nextToken();
-                                if (token === 153 /* FromKeyword */) {
+                                if (token === 154 /* FromKeyword */) {
                                     token = nextToken();
                                     if (token === 10 /* StringLiteral */) {
                                         // import * as NS from "mod"
@@ -133354,10 +136353,10 @@
         }
         function tryConsumeExport() {
             var token = ts.scanner.getToken();
-            if (token === 92 /* ExportKeyword */) {
+            if (token === 93 /* ExportKeyword */) {
                 markAsExternalModuleIfTopLevel();
                 token = nextToken();
-                if (token === 149 /* TypeKeyword */) {
+                if (token === 150 /* TypeKeyword */) {
                     var skipTypeKeyword = ts.scanner.lookAhead(function () {
                         var token = ts.scanner.scan();
                         return token === 41 /* AsteriskToken */ ||
@@ -133376,7 +136375,7 @@
                     }
                     if (token === 19 /* CloseBraceToken */) {
                         token = nextToken();
-                        if (token === 153 /* FromKeyword */) {
+                        if (token === 154 /* FromKeyword */) {
                             token = nextToken();
                             if (token === 10 /* StringLiteral */) {
                                 // export {a as A} from "mod";
@@ -133388,7 +136387,7 @@
                 }
                 else if (token === 41 /* AsteriskToken */) {
                     token = nextToken();
-                    if (token === 153 /* FromKeyword */) {
+                    if (token === 154 /* FromKeyword */) {
                         token = nextToken();
                         if (token === 10 /* StringLiteral */) {
                             // export * from "mod"
@@ -133396,21 +136395,21 @@
                         }
                     }
                 }
-                else if (token === 99 /* ImportKeyword */) {
+                else if (token === 100 /* ImportKeyword */) {
                     token = nextToken();
-                    if (token === 149 /* TypeKeyword */) {
+                    if (token === 150 /* TypeKeyword */) {
                         var skipTypeKeyword = ts.scanner.lookAhead(function () {
                             var token = ts.scanner.scan();
-                            return token === 78 /* Identifier */ ||
+                            return token === 79 /* Identifier */ ||
                                 ts.isKeyword(token);
                         });
                         if (skipTypeKeyword) {
                             token = nextToken();
                         }
                     }
-                    if (token === 78 /* Identifier */ || ts.isKeyword(token)) {
+                    if (token === 79 /* Identifier */ || ts.isKeyword(token)) {
                         token = nextToken();
-                        if (token === 62 /* EqualsToken */) {
+                        if (token === 63 /* EqualsToken */) {
                             if (tryConsumeRequireCall(/*skipCurrentToken*/ true)) {
                                 return true;
                             }
@@ -133424,7 +136423,7 @@
         function tryConsumeRequireCall(skipCurrentToken, allowTemplateLiterals) {
             if (allowTemplateLiterals === void 0) { allowTemplateLiterals = false; }
             var token = skipCurrentToken ? nextToken() : ts.scanner.getToken();
-            if (token === 143 /* RequireKeyword */) {
+            if (token === 144 /* RequireKeyword */) {
                 token = nextToken();
                 if (token === 20 /* OpenParenToken */) {
                     token = nextToken();
@@ -133440,7 +136439,7 @@
         }
         function tryConsumeDefine() {
             var token = ts.scanner.getToken();
-            if (token === 78 /* Identifier */ && ts.scanner.getTokenValue() === "define") {
+            if (token === 79 /* Identifier */ && ts.scanner.getTokenValue() === "define") {
                 token = nextToken();
                 if (token !== 20 /* OpenParenToken */) {
                     return true;
@@ -133589,14 +136588,14 @@
                 return getRenameInfoError(ts.Diagnostics.You_cannot_rename_elements_that_are_defined_in_the_standard_TypeScript_library);
             }
             // Cannot rename `default` as in `import { default as foo } from "./someModule";
-            if (ts.isIdentifier(node) && node.originalKeywordKind === 87 /* DefaultKeyword */ && symbol.parent && symbol.parent.flags & 1536 /* Module */) {
+            if (ts.isIdentifier(node) && node.originalKeywordKind === 88 /* DefaultKeyword */ && symbol.parent && symbol.parent.flags & 1536 /* Module */) {
                 return undefined;
             }
             if (ts.isStringLiteralLike(node) && ts.tryGetImportFromModuleSpecifier(node)) {
                 return options && options.allowRenameOfImportPath ? getRenameInfoForModule(node, sourceFile, symbol) : undefined;
             }
             var kind = ts.SymbolDisplay.getSymbolKind(typeChecker, symbol, node);
-            var specifierName = (ts.isImportOrExportSpecifierName(node) || ts.isStringOrNumericLiteralLike(node) && node.parent.kind === 159 /* ComputedPropertyName */)
+            var specifierName = (ts.isImportOrExportSpecifierName(node) || ts.isStringOrNumericLiteralLike(node) && node.parent.kind === 160 /* ComputedPropertyName */)
                 ? ts.stripQuotes(ts.getTextOfIdentifierOrLiteral(node))
                 : undefined;
             var displayName = specifierName || typeChecker.symbolToString(symbol);
@@ -133656,11 +136655,11 @@
         }
         function nodeIsEligibleForRename(node) {
             switch (node.kind) {
-                case 78 /* Identifier */:
-                case 79 /* PrivateIdentifier */:
+                case 79 /* Identifier */:
+                case 80 /* PrivateIdentifier */:
                 case 10 /* StringLiteral */:
                 case 14 /* NoSubstitutionTemplateLiteral */:
-                case 107 /* ThisKeyword */:
+                case 108 /* ThisKeyword */:
                     return true;
                 case 8 /* NumericLiteral */:
                     return ts.isLiteralNameOfPropertyDeclarationOrIndexAccess(node);
@@ -133715,9 +136714,9 @@
                         }
                         // Synthesize a stop for '${ ... }' since '${' and '}' actually belong to siblings.
                         if (ts.isTemplateSpan(parentNode) && nextNode && ts.isTemplateMiddleOrTemplateTail(nextNode)) {
-                            var start_2 = node.getFullStart() - "${".length;
+                            var start_1 = node.getFullStart() - "${".length;
                             var end_2 = nextNode.getStart() + "}".length;
-                            pushSelectionRange(start_2, end_2);
+                            pushSelectionRange(start_1, end_2);
                         }
                         // Blocks with braces, brackets, parens, or JSX tags on separate lines should be
                         // selected from open to close, including whitespace but not including the braces/etc. themselves.
@@ -133822,14 +136821,14 @@
                 ts.Debug.assertEqual(closeBraceToken.kind, 19 /* CloseBraceToken */);
                 // Group `-/+readonly` and `-/+?`
                 var groupedWithPlusMinusTokens = groupChildren(children, function (child) {
-                    return child === node.readonlyToken || child.kind === 142 /* ReadonlyKeyword */ ||
+                    return child === node.readonlyToken || child.kind === 143 /* ReadonlyKeyword */ ||
                         child === node.questionToken || child.kind === 57 /* QuestionToken */;
                 });
                 // Group type parameter with surrounding brackets
                 var groupedWithBrackets = groupChildren(groupedWithPlusMinusTokens, function (_a) {
                     var kind = _a.kind;
                     return kind === 22 /* OpenBracketToken */ ||
-                        kind === 160 /* TypeParameter */ ||
+                        kind === 161 /* TypeParameter */ ||
                         kind === 23 /* CloseBracketToken */;
                 });
                 return [
@@ -133862,14 +136861,14 @@
                 });
                 return splitChildren(groupedWithQuestionToken, function (_a) {
                     var kind = _a.kind;
-                    return kind === 62 /* EqualsToken */;
+                    return kind === 63 /* EqualsToken */;
                 });
             }
             // Pivot on '='
             if (ts.isBindingElement(node)) {
                 return splitChildren(node.getChildren(), function (_a) {
                     var kind = _a.kind;
-                    return kind === 62 /* EqualsToken */;
+                    return kind === 63 /* EqualsToken */;
                 });
             }
             return node.getChildren();
@@ -133943,22 +136942,22 @@
             return kind === 18 /* OpenBraceToken */
                 || kind === 22 /* OpenBracketToken */
                 || kind === 20 /* OpenParenToken */
-                || kind === 276 /* JsxOpeningElement */;
+                || kind === 278 /* JsxOpeningElement */;
         }
         function isListCloser(token) {
             var kind = token && token.kind;
             return kind === 19 /* CloseBraceToken */
                 || kind === 23 /* CloseBracketToken */
                 || kind === 21 /* CloseParenToken */
-                || kind === 277 /* JsxClosingElement */;
+                || kind === 279 /* JsxClosingElement */;
         }
         function getEndPos(sourceFile, node) {
             switch (node.kind) {
-                case 330 /* JSDocParameterTag */:
-                case 328 /* JSDocCallbackTag */:
-                case 337 /* JSDocPropertyTag */:
-                case 335 /* JSDocTypedefTag */:
-                case 332 /* JSDocThisTag */:
+                case 335 /* JSDocParameterTag */:
+                case 333 /* JSDocCallbackTag */:
+                case 342 /* JSDocPropertyTag */:
+                case 340 /* JSDocTypedefTag */:
+                case 337 /* JSDocThisTag */:
                     return sourceFile.getLineEndOfPosition(node.getStart());
                 default:
                     return node.getEnd();
@@ -134168,10 +137167,10 @@
                 }
                 return undefined;
             }
-            else if (ts.isTemplateHead(node) && parent.parent.kind === 206 /* TaggedTemplateExpression */) {
+            else if (ts.isTemplateHead(node) && parent.parent.kind === 208 /* TaggedTemplateExpression */) {
                 var templateExpression = parent;
                 var tagExpression = templateExpression.parent;
-                ts.Debug.assert(templateExpression.kind === 219 /* TemplateExpression */);
+                ts.Debug.assert(templateExpression.kind === 221 /* TemplateExpression */);
                 var argumentIndex = ts.isInsideTemplateLiteral(node, position, sourceFile) ? 0 : 1;
                 return getArgumentListInfoForTemplate(tagExpression, argumentIndex, sourceFile);
             }
@@ -134240,17 +137239,17 @@
                 return undefined;
             var parent = startingToken.parent;
             switch (parent.kind) {
-                case 208 /* ParenthesizedExpression */:
-                case 166 /* MethodDeclaration */:
-                case 209 /* FunctionExpression */:
-                case 210 /* ArrowFunction */:
+                case 210 /* ParenthesizedExpression */:
+                case 167 /* MethodDeclaration */:
+                case 211 /* FunctionExpression */:
+                case 212 /* ArrowFunction */:
                     var info = getArgumentOrParameterListInfo(startingToken, sourceFile);
                     if (!info)
                         return undefined;
                     var argumentIndex = info.argumentIndex, argumentCount = info.argumentCount, argumentsSpan = info.argumentsSpan;
                     var contextualType = ts.isMethodDeclaration(parent) ? checker.getContextualTypeForObjectLiteralElement(parent) : checker.getContextualType(parent);
                     return contextualType && { contextualType: contextualType, argumentIndex: argumentIndex, argumentCount: argumentCount, argumentsSpan: argumentsSpan };
-                case 217 /* BinaryExpression */: {
+                case 219 /* BinaryExpression */: {
                     var highestBinary = getHighestBinary(parent);
                     var contextualType_1 = checker.getContextualType(highestBinary);
                     var argumentIndex_1 = startingToken.kind === 20 /* OpenParenToken */ ? 0 : countBinaryExpressionParameters(parent) - 1;
@@ -134374,7 +137373,7 @@
             //       |       |
             // This is because a Missing node has no width. However, what we actually want is to include trivia
             // leading up to the next token in case the user is about to type in a TemplateMiddle or TemplateTail.
-            if (template.kind === 219 /* TemplateExpression */) {
+            if (template.kind === 221 /* TemplateExpression */) {
                 var lastSpan = ts.last(template.templateSpans);
                 if (lastSpan.literal.getFullWidth() === 0) {
                     applicableSpanEnd = ts.skipTrivia(sourceFile.text, applicableSpanEnd, /*stopAfterLineBreak*/ false);
@@ -134473,7 +137472,7 @@
             var parameters = typeParameters.map(function (t) { return createSignatureHelpParameterForTypeParameter(t, checker, enclosingDeclaration, sourceFile, printer); });
             var documentation = symbol.getDocumentationComment(checker);
             var tags = symbol.getJsDocTags(checker);
-            var prefixDisplayParts = __spreadArray(__spreadArray([], typeSymbolDisplay), [ts.punctuationPart(29 /* LessThanToken */)]);
+            var prefixDisplayParts = __spreadArray(__spreadArray([], typeSymbolDisplay, true), [ts.punctuationPart(29 /* LessThanToken */)], false);
             return { isVariadic: false, prefixDisplayParts: prefixDisplayParts, suffixDisplayParts: [ts.punctuationPart(31 /* GreaterThanToken */)], separatorDisplayParts: separatorDisplayParts, parameters: parameters, documentation: documentation, tags: tags };
         }
         var separatorDisplayParts = [ts.punctuationPart(27 /* CommaToken */), ts.spacePart()];
@@ -134481,8 +137480,8 @@
             var infos = (isTypeParameterList ? itemInfoForTypeParameters : itemInfoForParameters)(candidateSignature, checker, enclosingDeclaration, sourceFile);
             return ts.map(infos, function (_a) {
                 var isVariadic = _a.isVariadic, parameters = _a.parameters, prefix = _a.prefix, suffix = _a.suffix;
-                var prefixDisplayParts = __spreadArray(__spreadArray([], callTargetDisplayParts), prefix);
-                var suffixDisplayParts = __spreadArray(__spreadArray([], suffix), returnTypeToDisplayParts(candidateSignature, enclosingDeclaration, checker));
+                var prefixDisplayParts = __spreadArray(__spreadArray([], callTargetDisplayParts, true), prefix, true);
+                var suffixDisplayParts = __spreadArray(__spreadArray([], suffix, true), returnTypeToDisplayParts(candidateSignature, enclosingDeclaration, checker), true);
                 var documentation = candidateSignature.getDocumentationComment(checker);
                 var tags = candidateSignature.getJsDocTags();
                 return { isVariadic: isVariadic, prefixDisplayParts: prefixDisplayParts, suffixDisplayParts: suffixDisplayParts, separatorDisplayParts: separatorDisplayParts, parameters: parameters, documentation: documentation, tags: tags };
@@ -134507,15 +137506,14 @@
             var parameters = (typeParameters || ts.emptyArray).map(function (t) { return createSignatureHelpParameterForTypeParameter(t, checker, enclosingDeclaration, sourceFile, printer); });
             var thisParameter = candidateSignature.thisParameter ? [checker.symbolToParameterDeclaration(candidateSignature.thisParameter, enclosingDeclaration, signatureHelpNodeBuilderFlags)] : [];
             return checker.getExpandedParameters(candidateSignature).map(function (paramList) {
-                var params = ts.factory.createNodeArray(__spreadArray(__spreadArray([], thisParameter), ts.map(paramList, function (param) { return checker.symbolToParameterDeclaration(param, enclosingDeclaration, signatureHelpNodeBuilderFlags); })));
+                var params = ts.factory.createNodeArray(__spreadArray(__spreadArray([], thisParameter, true), ts.map(paramList, function (param) { return checker.symbolToParameterDeclaration(param, enclosingDeclaration, signatureHelpNodeBuilderFlags); }), true));
                 var parameterParts = ts.mapToDisplayParts(function (writer) {
                     printer.writeList(2576 /* CallExpressionArguments */, params, sourceFile, writer);
                 });
-                return { isVariadic: false, parameters: parameters, prefix: [ts.punctuationPart(29 /* LessThanToken */)], suffix: __spreadArray([ts.punctuationPart(31 /* GreaterThanToken */)], parameterParts) };
+                return { isVariadic: false, parameters: parameters, prefix: [ts.punctuationPart(29 /* LessThanToken */)], suffix: __spreadArray([ts.punctuationPart(31 /* GreaterThanToken */)], parameterParts, true) };
             });
         }
         function itemInfoForParameters(candidateSignature, checker, enclosingDeclaration, sourceFile) {
-            var isVariadic = checker.hasEffectiveRestParameter(candidateSignature);
             var printer = ts.createPrinter({ removeComments: true });
             var typeParameterParts = ts.mapToDisplayParts(function (writer) {
                 if (candidateSignature.typeParameters && candidateSignature.typeParameters.length) {
@@ -134524,14 +137522,15 @@
                 }
             });
             var lists = checker.getExpandedParameters(candidateSignature);
-            return lists.map(function (parameterList) {
-                return {
-                    isVariadic: isVariadic && (lists.length === 1 || !!(parameterList[parameterList.length - 1].checkFlags & 32768 /* RestParameter */)),
-                    parameters: parameterList.map(function (p) { return createSignatureHelpParameterForParameter(p, checker, enclosingDeclaration, sourceFile, printer); }),
-                    prefix: __spreadArray(__spreadArray([], typeParameterParts), [ts.punctuationPart(20 /* OpenParenToken */)]),
-                    suffix: [ts.punctuationPart(21 /* CloseParenToken */)]
-                };
-            });
+            var isVariadic = !checker.hasEffectiveRestParameter(candidateSignature) ? function (_) { return false; }
+                : lists.length === 1 ? function (_) { return true; }
+                    : function (pList) { return !!(pList.length && pList[pList.length - 1].checkFlags & 32768 /* RestParameter */); };
+            return lists.map(function (parameterList) { return ({
+                isVariadic: isVariadic(parameterList),
+                parameters: parameterList.map(function (p) { return createSignatureHelpParameterForParameter(p, checker, enclosingDeclaration, sourceFile, printer); }),
+                prefix: __spreadArray(__spreadArray([], typeParameterParts, true), [ts.punctuationPart(20 /* OpenParenToken */)], false),
+                suffix: [ts.punctuationPart(21 /* CloseParenToken */)]
+            }); });
         }
         function createSignatureHelpParameterForParameter(parameter, checker, enclosingDeclaration, sourceFile, printer) {
             var displayParts = ts.mapToDisplayParts(function (writer) {
@@ -134554,6 +137553,279 @@
 /* @internal */
 var ts;
 (function (ts) {
+    var InlayHints;
+    (function (InlayHints) {
+        var maxHintsLength = 30;
+        var leadingParameterNameCommentRegexFactory = function (name) {
+            return new RegExp("^\\s?/\\*\\*?\\s?" + name + "\\s?\\*\\/\\s?$");
+        };
+        function shouldShowParameterNameHints(preferences) {
+            return preferences.includeInlayParameterNameHints === "literals" || preferences.includeInlayParameterNameHints === "all";
+        }
+        function shouldShowLiteralParameterNameHintsOnly(preferences) {
+            return preferences.includeInlayParameterNameHints === "literals";
+        }
+        function provideInlayHints(context) {
+            var file = context.file, program = context.program, span = context.span, cancellationToken = context.cancellationToken, preferences = context.preferences;
+            var sourceFileText = file.text;
+            var compilerOptions = program.getCompilerOptions();
+            var checker = program.getTypeChecker();
+            var result = [];
+            visitor(file);
+            return result;
+            function visitor(node) {
+                if (!node || node.getFullWidth() === 0) {
+                    return;
+                }
+                switch (node.kind) {
+                    case 259 /* ModuleDeclaration */:
+                    case 255 /* ClassDeclaration */:
+                    case 256 /* InterfaceDeclaration */:
+                    case 254 /* FunctionDeclaration */:
+                    case 224 /* ClassExpression */:
+                    case 211 /* FunctionExpression */:
+                    case 167 /* MethodDeclaration */:
+                    case 212 /* ArrowFunction */:
+                        cancellationToken.throwIfCancellationRequested();
+                }
+                if (!ts.textSpanIntersectsWith(span, node.pos, node.getFullWidth())) {
+                    return;
+                }
+                if (ts.isTypeNode(node)) {
+                    return;
+                }
+                if (preferences.includeInlayVariableTypeHints && ts.isVariableDeclaration(node)) {
+                    visitVariableLikeDeclaration(node);
+                }
+                else if (preferences.includeInlayPropertyDeclarationTypeHints && ts.isPropertyDeclaration(node)) {
+                    visitVariableLikeDeclaration(node);
+                }
+                else if (preferences.includeInlayEnumMemberValueHints && ts.isEnumMember(node)) {
+                    visitEnumMember(node);
+                }
+                else if (shouldShowParameterNameHints(preferences) && (ts.isCallExpression(node) || ts.isNewExpression(node))) {
+                    visitCallOrNewExpression(node);
+                }
+                else {
+                    if (preferences.includeInlayFunctionParameterTypeHints && ts.isFunctionLikeDeclaration(node) && ts.hasContextSensitiveParameters(node)) {
+                        visitFunctionLikeForParameterType(node);
+                    }
+                    if (preferences.includeInlayFunctionLikeReturnTypeHints && isSignatureSupportingReturnAnnotation(node)) {
+                        visitFunctionDeclarationLikeForReturnType(node);
+                    }
+                }
+                return ts.forEachChild(node, visitor);
+            }
+            function isSignatureSupportingReturnAnnotation(node) {
+                return ts.isArrowFunction(node) || ts.isFunctionExpression(node) || ts.isFunctionDeclaration(node) || ts.isMethodDeclaration(node) || ts.isGetAccessorDeclaration(node);
+            }
+            function addParameterHints(text, position, isFirstVariadicArgument) {
+                result.push({
+                    text: "" + (isFirstVariadicArgument ? "..." : "") + truncation(text, maxHintsLength) + ":",
+                    position: position,
+                    kind: "Parameter" /* Parameter */,
+                    whitespaceAfter: true,
+                });
+            }
+            function addTypeHints(text, position) {
+                result.push({
+                    text: ": " + truncation(text, maxHintsLength),
+                    position: position,
+                    kind: "Type" /* Type */,
+                    whitespaceBefore: true,
+                });
+            }
+            function addEnumMemberValueHints(text, position) {
+                result.push({
+                    text: "= " + truncation(text, maxHintsLength),
+                    position: position,
+                    kind: "Enum" /* Enum */,
+                    whitespaceBefore: true,
+                });
+            }
+            function visitEnumMember(member) {
+                if (member.initializer) {
+                    return;
+                }
+                var enumValue = checker.getConstantValue(member);
+                if (enumValue !== undefined) {
+                    addEnumMemberValueHints(enumValue.toString(), member.end);
+                }
+            }
+            function isModuleReferenceType(type) {
+                return type.symbol && (type.symbol.flags & 1536 /* Module */);
+            }
+            function visitVariableLikeDeclaration(decl) {
+                if (!decl.initializer || ts.isBindingPattern(decl.name)) {
+                    return;
+                }
+                var effectiveTypeAnnotation = ts.getEffectiveTypeAnnotationNode(decl);
+                if (effectiveTypeAnnotation) {
+                    return;
+                }
+                var declarationType = checker.getTypeAtLocation(decl);
+                if (isModuleReferenceType(declarationType)) {
+                    return;
+                }
+                var typeDisplayString = printTypeInSingleLine(declarationType);
+                if (typeDisplayString) {
+                    addTypeHints(typeDisplayString, decl.name.end);
+                }
+            }
+            function visitCallOrNewExpression(expr) {
+                var args = expr.arguments;
+                if (!args || !args.length) {
+                    return;
+                }
+                var candidates = [];
+                var signature = checker.getResolvedSignatureForSignatureHelp(expr, candidates);
+                if (!signature || !candidates.length) {
+                    return;
+                }
+                for (var i = 0; i < args.length; ++i) {
+                    var originalArg = args[i];
+                    var arg = ts.skipParentheses(originalArg);
+                    if (shouldShowLiteralParameterNameHintsOnly(preferences) && !isHintableLiteral(arg)) {
+                        continue;
+                    }
+                    var identifierNameInfo = checker.getParameterIdentifierNameAtPosition(signature, i);
+                    if (identifierNameInfo) {
+                        var parameterName = identifierNameInfo[0], isFirstVariadicArgument = identifierNameInfo[1];
+                        var isParameterNameNotSameAsArgument = preferences.includeInlayParameterNameHintsWhenArgumentMatchesName || !identifierOrAccessExpressionPostfixMatchesParameterName(arg, parameterName);
+                        if (!isParameterNameNotSameAsArgument && !isFirstVariadicArgument) {
+                            continue;
+                        }
+                        var name = ts.unescapeLeadingUnderscores(parameterName);
+                        if (leadingCommentsContainsParameterName(arg, name)) {
+                            continue;
+                        }
+                        addParameterHints(name, originalArg.getStart(), isFirstVariadicArgument);
+                    }
+                }
+            }
+            function identifierOrAccessExpressionPostfixMatchesParameterName(expr, parameterName) {
+                if (ts.isIdentifier(expr)) {
+                    return expr.text === parameterName;
+                }
+                if (ts.isPropertyAccessExpression(expr)) {
+                    return expr.name.text === parameterName;
+                }
+                return false;
+            }
+            function leadingCommentsContainsParameterName(node, name) {
+                if (!ts.isIdentifierText(name, compilerOptions.target, ts.getLanguageVariant(file.scriptKind))) {
+                    return false;
+                }
+                var ranges = ts.getLeadingCommentRanges(sourceFileText, node.pos);
+                if (!(ranges === null || ranges === void 0 ? void 0 : ranges.length)) {
+                    return false;
+                }
+                var regex = leadingParameterNameCommentRegexFactory(name);
+                return ts.some(ranges, function (range) { return regex.test(sourceFileText.substring(range.pos, range.end)); });
+            }
+            function isHintableLiteral(node) {
+                switch (node.kind) {
+                    case 217 /* PrefixUnaryExpression */: {
+                        var operand = node.operand;
+                        return ts.isLiteralExpression(operand) || ts.isIdentifier(operand) && ts.isInfinityOrNaNString(operand.escapedText);
+                    }
+                    case 110 /* TrueKeyword */:
+                    case 95 /* FalseKeyword */:
+                    case 104 /* NullKeyword */:
+                        return true;
+                    case 79 /* Identifier */: {
+                        var name = node.escapedText;
+                        return isUndefined(name) || ts.isInfinityOrNaNString(name);
+                    }
+                }
+                return ts.isLiteralExpression(node);
+            }
+            function visitFunctionDeclarationLikeForReturnType(decl) {
+                if (ts.isArrowFunction(decl)) {
+                    if (!ts.findChildOfKind(decl, 20 /* OpenParenToken */, file)) {
+                        return;
+                    }
+                }
+                var effectiveTypeAnnotation = ts.getEffectiveReturnTypeNode(decl);
+                if (effectiveTypeAnnotation || !decl.body) {
+                    return;
+                }
+                var signature = checker.getSignatureFromDeclaration(decl);
+                if (!signature) {
+                    return;
+                }
+                var returnType = checker.getReturnTypeOfSignature(signature);
+                if (isModuleReferenceType(returnType)) {
+                    return;
+                }
+                var typeDisplayString = printTypeInSingleLine(returnType);
+                if (!typeDisplayString) {
+                    return;
+                }
+                addTypeHints(typeDisplayString, getTypeAnnotationPosition(decl));
+            }
+            function getTypeAnnotationPosition(decl) {
+                var closeParenToken = ts.findChildOfKind(decl, 21 /* CloseParenToken */, file);
+                if (closeParenToken) {
+                    return closeParenToken.end;
+                }
+                return decl.parameters.end;
+            }
+            function visitFunctionLikeForParameterType(node) {
+                var signature = checker.getSignatureFromDeclaration(node);
+                if (!signature) {
+                    return;
+                }
+                for (var i = 0; i < node.parameters.length && i < signature.parameters.length; ++i) {
+                    var param = node.parameters[i];
+                    var effectiveTypeAnnotation = ts.getEffectiveTypeAnnotationNode(param);
+                    if (effectiveTypeAnnotation) {
+                        continue;
+                    }
+                    var typeDisplayString = getParameterDeclarationTypeDisplayString(signature.parameters[i]);
+                    if (!typeDisplayString) {
+                        continue;
+                    }
+                    addTypeHints(typeDisplayString, param.end);
+                }
+            }
+            function getParameterDeclarationTypeDisplayString(symbol) {
+                var valueDeclaration = symbol.valueDeclaration;
+                if (!valueDeclaration || !ts.isParameter(valueDeclaration)) {
+                    return undefined;
+                }
+                var signatureParamType = checker.getTypeOfSymbolAtLocation(symbol, valueDeclaration);
+                if (isModuleReferenceType(signatureParamType)) {
+                    return undefined;
+                }
+                return printTypeInSingleLine(signatureParamType);
+            }
+            function truncation(text, maxLength) {
+                if (text.length > maxLength) {
+                    return text.substr(0, maxLength - "...".length) + "...";
+                }
+                return text;
+            }
+            function printTypeInSingleLine(type) {
+                var flags = 70221824 /* IgnoreErrors */ | 1048576 /* AllowUniqueESSymbolType */ | 16384 /* UseAliasDefinedOutsideCurrentScope */;
+                var options = { removeComments: true };
+                var printer = ts.createPrinter(options);
+                return ts.usingSingleLineStringWriter(function (writer) {
+                    var typeNode = checker.typeToTypeNode(type, /*enclosingDeclaration*/ undefined, flags, writer);
+                    ts.Debug.assertIsDefined(typeNode, "should always get typenode");
+                    printer.writeNode(4 /* Unspecified */, typeNode, /*sourceFile*/ file, writer);
+                });
+            }
+            function isUndefined(name) {
+                return name === "undefined";
+            }
+        }
+        InlayHints.provideInlayHints = provideInlayHints;
+    })(InlayHints = ts.InlayHints || (ts.InlayHints = {}));
+})(ts || (ts = {}));
+/* @internal */
+var ts;
+(function (ts) {
     var base64UrlRegExp = /^data:(?:application\/json(?:;charset=[uU][tT][fF]-8);base64,([A-Za-z0-9+\/=]+)$)?/;
     function getSourceMapper(host) {
         var getCanonicalFileName = ts.createGetCanonicalFileName(host.useCaseSensitiveFileNames());
@@ -134768,11 +138040,11 @@
     function containsTopLevelCommonjs(sourceFile) {
         return sourceFile.statements.some(function (statement) {
             switch (statement.kind) {
-                case 233 /* VariableStatement */:
+                case 235 /* VariableStatement */:
                     return statement.declarationList.declarations.some(function (decl) {
                         return !!decl.initializer && ts.isRequireCall(propertyAccessLeftHandSide(decl.initializer), /*checkArgumentIsStringLiteralLike*/ true);
                     });
-                case 234 /* ExpressionStatement */: {
+                case 236 /* ExpressionStatement */: {
                     var expression = statement.expression;
                     if (!ts.isBinaryExpression(expression))
                         return ts.isRequireCall(expression, /*checkArgumentIsStringLiteralLike*/ true);
@@ -134789,12 +138061,12 @@
     }
     function importNameForConvertToDefaultImport(node) {
         switch (node.kind) {
-            case 262 /* ImportDeclaration */:
+            case 264 /* ImportDeclaration */:
                 var importClause = node.importClause, moduleSpecifier = node.moduleSpecifier;
-                return importClause && !importClause.name && importClause.namedBindings && importClause.namedBindings.kind === 264 /* NamespaceImport */ && ts.isStringLiteral(moduleSpecifier)
+                return importClause && !importClause.name && importClause.namedBindings && importClause.namedBindings.kind === 266 /* NamespaceImport */ && ts.isStringLiteral(moduleSpecifier)
                     ? importClause.namedBindings.name
                     : undefined;
-            case 261 /* ImportEqualsDeclaration */:
+            case 263 /* ImportEqualsDeclaration */:
                 return node.name;
             default:
                 return undefined;
@@ -134856,22 +138128,27 @@
         if (node.arguments.length < 2)
             return true;
         return ts.some(node.arguments, function (arg) {
-            return arg.kind === 103 /* NullKeyword */ ||
+            return arg.kind === 104 /* NullKeyword */ ||
                 ts.isIdentifier(arg) && arg.text === "undefined";
         });
     }
     // should be kept up to date with getTransformationBody in convertToAsyncFunction.ts
     function isFixablePromiseArgument(arg, checker) {
         switch (arg.kind) {
-            case 252 /* FunctionDeclaration */:
-            case 209 /* FunctionExpression */:
-            case 210 /* ArrowFunction */:
+            case 254 /* FunctionDeclaration */:
+            case 211 /* FunctionExpression */:
+                var functionFlags = ts.getFunctionFlags(arg);
+                if (functionFlags & 1 /* Generator */) {
+                    return false;
+                }
+            // falls through
+            case 212 /* ArrowFunction */:
                 visitedNestedConvertibleFunctions.set(getKeyFromNode(arg), true);
             // falls through
-            case 103 /* NullKeyword */:
+            case 104 /* NullKeyword */:
                 return true;
-            case 78 /* Identifier */:
-            case 202 /* PropertyAccessExpression */: {
+            case 79 /* Identifier */:
+            case 204 /* PropertyAccessExpression */: {
                 var symbol = checker.getSymbolAtLocation(arg);
                 if (!symbol) {
                     return false;
@@ -134888,24 +138165,24 @@
     }
     function canBeConvertedToClass(node, checker) {
         var _a, _b, _c, _d;
-        if (node.kind === 209 /* FunctionExpression */) {
+        if (node.kind === 211 /* FunctionExpression */) {
             if (ts.isVariableDeclaration(node.parent) && ((_a = node.symbol.members) === null || _a === void 0 ? void 0 : _a.size)) {
                 return true;
             }
             var symbol = checker.getSymbolOfExpando(node, /*allowDeclaration*/ false);
             return !!(symbol && (((_b = symbol.exports) === null || _b === void 0 ? void 0 : _b.size) || ((_c = symbol.members) === null || _c === void 0 ? void 0 : _c.size)));
         }
-        if (node.kind === 252 /* FunctionDeclaration */) {
+        if (node.kind === 254 /* FunctionDeclaration */) {
             return !!((_d = node.symbol.members) === null || _d === void 0 ? void 0 : _d.size);
         }
         return false;
     }
     function canBeConvertedToAsync(node) {
         switch (node.kind) {
-            case 252 /* FunctionDeclaration */:
-            case 166 /* MethodDeclaration */:
-            case 209 /* FunctionExpression */:
-            case 210 /* ArrowFunction */:
+            case 254 /* FunctionDeclaration */:
+            case 167 /* MethodDeclaration */:
+            case 211 /* FunctionExpression */:
+            case 212 /* ArrowFunction */:
                 return true;
             default:
                 return false;
@@ -134927,7 +138204,7 @@
             }
             var flags = ts.getCombinedLocalAndExportSymbolFlags(symbol);
             if (flags & 32 /* Class */) {
-                return ts.getDeclarationOfKind(symbol, 222 /* ClassExpression */) ?
+                return ts.getDeclarationOfKind(symbol, 224 /* ClassExpression */) ?
                     "local class" /* localClassElement */ : "class" /* classElement */;
             }
             if (flags & 384 /* Enum */)
@@ -134962,7 +138239,7 @@
             if (typeChecker.isArgumentsSymbol(symbol)) {
                 return "local var" /* localVariableElement */;
             }
-            if (location.kind === 107 /* ThisKeyword */ && ts.isExpression(location)) {
+            if (location.kind === 108 /* ThisKeyword */ && ts.isExpression(location)) {
                 return "parameter" /* parameterElement */;
             }
             var flags = ts.getCombinedLocalAndExportSymbolFlags(symbol);
@@ -135011,11 +138288,11 @@
                 // If we requested completions after `x.` at the top-level, we may be at a source file location.
                 switch (location.parent && location.parent.kind) {
                     // If we've typed a character of the attribute name, will be 'JsxAttribute', else will be 'JsxOpeningElement'.
-                    case 276 /* JsxOpeningElement */:
-                    case 274 /* JsxElement */:
-                    case 275 /* JsxSelfClosingElement */:
-                        return location.kind === 78 /* Identifier */ ? "property" /* memberVariableElement */ : "JSX attribute" /* jsxAttribute */;
-                    case 281 /* JsxAttribute */:
+                    case 278 /* JsxOpeningElement */:
+                    case 276 /* JsxElement */:
+                    case 277 /* JsxSelfClosingElement */:
+                        return location.kind === 79 /* Identifier */ ? "property" /* memberVariableElement */ : "JSX attribute" /* jsxAttribute */;
+                    case 283 /* JsxAttribute */:
                         return "JSX attribute" /* jsxAttribute */;
                     default:
                         return "property" /* memberVariableElement */;
@@ -135023,14 +138300,11 @@
             }
             return "" /* unknown */;
         }
-        function isDeprecatedDeclaration(decl) {
-            return !!(ts.getCombinedNodeFlagsAlwaysIncludeJSDoc(decl) & 8192 /* Deprecated */);
-        }
         function getNormalizedSymbolModifiers(symbol) {
             if (symbol.declarations && symbol.declarations.length) {
                 var _a = symbol.declarations, declaration = _a[0], declarations = _a.slice(1);
                 // omit deprecated flag if some declarations are not deprecated
-                var excludeFlags = ts.length(declarations) && isDeprecatedDeclaration(declaration) && ts.some(declarations, function (d) { return !isDeprecatedDeclaration(d); })
+                var excludeFlags = ts.length(declarations) && ts.isDeprecatedDeclaration(declaration) && ts.some(declarations, function (d) { return !ts.isDeprecatedDeclaration(d); })
                     ? 8192 /* Deprecated */
                     : 0 /* None */;
                 var modifiers = ts.getNodeModifiers(declaration, excludeFlags);
@@ -135069,14 +138343,14 @@
             var symbolFlags = ts.getCombinedLocalAndExportSymbolFlags(symbol);
             var symbolKind = semanticMeaning & 1 /* Value */ ? getSymbolKindOfConstructorPropertyMethodAccessorFunctionOrVar(typeChecker, symbol, location) : "" /* unknown */;
             var hasAddedSymbolInfo = false;
-            var isThisExpression = location.kind === 107 /* ThisKeyword */ && ts.isInExpressionContext(location);
+            var isThisExpression = location.kind === 108 /* ThisKeyword */ && ts.isInExpressionContext(location);
             var type;
             var printer;
             var documentationFromAlias;
             var tagsFromAlias;
             var hasMultipleSignatures = false;
-            if (location.kind === 107 /* ThisKeyword */ && !isThisExpression) {
-                return { displayParts: [ts.keywordPart(107 /* ThisKeyword */)], documentation: [], symbolKind: "primitive type" /* primitiveType */, tags: undefined };
+            if (location.kind === 108 /* ThisKeyword */ && !isThisExpression) {
+                return { displayParts: [ts.keywordPart(108 /* ThisKeyword */)], documentation: [], symbolKind: "primitive type" /* primitiveType */, tags: undefined };
             }
             // Class at constructor site need to be shown as constructor apart from property,method, vars
             if (symbolKind !== "" /* unknown */ || symbolFlags & 32 /* Class */ || symbolFlags & 2097152 /* Alias */) {
@@ -135086,7 +138360,7 @@
                 }
                 var signature = void 0;
                 type = isThisExpression ? typeChecker.getTypeAtLocation(location) : typeChecker.getTypeOfSymbolAtLocation(symbol, location);
-                if (location.parent && location.parent.kind === 202 /* PropertyAccessExpression */) {
+                if (location.parent && location.parent.kind === 204 /* PropertyAccessExpression */) {
                     var right = location.parent.name;
                     // Either the location is on the right of a property access, or on the left and the right is missing
                     if (right === location || (right && right.getFullWidth() === 0)) {
@@ -135106,7 +138380,7 @@
                 }
                 if (callExpressionLike) {
                     signature = typeChecker.getResolvedSignature(callExpressionLike); // TODO: GH#18217
-                    var useConstructSignatures = callExpressionLike.kind === 205 /* NewExpression */ || (ts.isCallExpression(callExpressionLike) && callExpressionLike.expression.kind === 105 /* SuperKeyword */);
+                    var useConstructSignatures = callExpressionLike.kind === 207 /* NewExpression */ || (ts.isCallExpression(callExpressionLike) && callExpressionLike.expression.kind === 106 /* SuperKeyword */);
                     var allSignatures = useConstructSignatures ? type.getConstructSignatures() : type.getCallSignatures();
                     if (signature && !ts.contains(allSignatures, signature.target) && !ts.contains(allSignatures, signature)) {
                         // Get the first signature if there is one -- allSignatures may contain
@@ -135125,10 +138399,10 @@
                             displayParts.push(ts.spacePart());
                             if (useConstructSignatures) {
                                 if (signature.flags & 4 /* Abstract */) {
-                                    displayParts.push(ts.keywordPart(125 /* AbstractKeyword */));
+                                    displayParts.push(ts.keywordPart(126 /* AbstractKeyword */));
                                     displayParts.push(ts.spacePart());
                                 }
-                                displayParts.push(ts.keywordPart(102 /* NewKeyword */));
+                                displayParts.push(ts.keywordPart(103 /* NewKeyword */));
                                 displayParts.push(ts.spacePart());
                             }
                             addFullSymbolName(symbol);
@@ -135153,10 +138427,10 @@
                                 }
                                 if (useConstructSignatures) {
                                     if (signature.flags & 4 /* Abstract */) {
-                                        displayParts.push(ts.keywordPart(125 /* AbstractKeyword */));
+                                        displayParts.push(ts.keywordPart(126 /* AbstractKeyword */));
                                         displayParts.push(ts.spacePart());
                                     }
-                                    displayParts.push(ts.keywordPart(102 /* NewKeyword */));
+                                    displayParts.push(ts.keywordPart(103 /* NewKeyword */));
                                     displayParts.push(ts.spacePart());
                                 }
                                 addSignatureDisplayParts(signature, allSignatures, 262144 /* WriteArrowStyleSignature */);
@@ -135170,29 +138444,29 @@
                     }
                 }
                 else if ((ts.isNameOfFunctionDeclaration(location) && !(symbolFlags & 98304 /* Accessor */)) || // name of function declaration
-                    (location.kind === 132 /* ConstructorKeyword */ && location.parent.kind === 167 /* Constructor */)) { // At constructor keyword of constructor declaration
+                    (location.kind === 133 /* ConstructorKeyword */ && location.parent.kind === 169 /* Constructor */)) { // At constructor keyword of constructor declaration
                     // get the signature from the declaration and write it
                     var functionDeclaration_1 = location.parent;
                     // Use function declaration to write the signatures only if the symbol corresponding to this declaration
                     var locationIsSymbolDeclaration = symbol.declarations && ts.find(symbol.declarations, function (declaration) {
-                        return declaration === (location.kind === 132 /* ConstructorKeyword */ ? functionDeclaration_1.parent : functionDeclaration_1);
+                        return declaration === (location.kind === 133 /* ConstructorKeyword */ ? functionDeclaration_1.parent : functionDeclaration_1);
                     });
                     if (locationIsSymbolDeclaration) {
-                        var allSignatures = functionDeclaration_1.kind === 167 /* Constructor */ ? type.getNonNullableType().getConstructSignatures() : type.getNonNullableType().getCallSignatures();
+                        var allSignatures = functionDeclaration_1.kind === 169 /* Constructor */ ? type.getNonNullableType().getConstructSignatures() : type.getNonNullableType().getCallSignatures();
                         if (!typeChecker.isImplementationOfOverload(functionDeclaration_1)) {
                             signature = typeChecker.getSignatureFromDeclaration(functionDeclaration_1); // TODO: GH#18217
                         }
                         else {
                             signature = allSignatures[0];
                         }
-                        if (functionDeclaration_1.kind === 167 /* Constructor */) {
+                        if (functionDeclaration_1.kind === 169 /* Constructor */) {
                             // show (constructor) Type(...) signature
                             symbolKind = "constructor" /* constructorImplementationElement */;
                             addPrefixForAnyFunctionOrVar(type.symbol, symbolKind);
                         }
                         else {
                             // (function/method) symbol(..signature)
-                            addPrefixForAnyFunctionOrVar(functionDeclaration_1.kind === 170 /* CallSignature */ &&
+                            addPrefixForAnyFunctionOrVar(functionDeclaration_1.kind === 172 /* CallSignature */ &&
                                 !(type.symbol.flags & 2048 /* TypeLiteral */ || type.symbol.flags & 4096 /* ObjectLiteral */) ? type.symbol : symbol, symbolKind);
                         }
                         if (signature) {
@@ -135205,7 +138479,7 @@
             }
             if (symbolFlags & 32 /* Class */ && !hasAddedSymbolInfo && !isThisExpression) {
                 addAliasPrefixIfNecessary();
-                if (ts.getDeclarationOfKind(symbol, 222 /* ClassExpression */)) {
+                if (ts.getDeclarationOfKind(symbol, 224 /* ClassExpression */)) {
                     // Special case for class expressions because we would like to indicate that
                     // the class name is local to the class body (similar to function expression)
                     //      (local class) class <className>
@@ -135213,7 +138487,7 @@
                 }
                 else {
                     // Class declaration has name which is not local.
-                    displayParts.push(ts.keywordPart(83 /* ClassKeyword */));
+                    displayParts.push(ts.keywordPart(84 /* ClassKeyword */));
                 }
                 displayParts.push(ts.spacePart());
                 addFullSymbolName(symbol);
@@ -135221,37 +138495,37 @@
             }
             if ((symbolFlags & 64 /* Interface */) && (semanticMeaning & 2 /* Type */)) {
                 prefixNextMeaning();
-                displayParts.push(ts.keywordPart(117 /* InterfaceKeyword */));
+                displayParts.push(ts.keywordPart(118 /* InterfaceKeyword */));
                 displayParts.push(ts.spacePart());
                 addFullSymbolName(symbol);
                 writeTypeParametersOfSymbol(symbol, sourceFile);
             }
             if ((symbolFlags & 524288 /* TypeAlias */) && (semanticMeaning & 2 /* Type */)) {
                 prefixNextMeaning();
-                displayParts.push(ts.keywordPart(149 /* TypeKeyword */));
+                displayParts.push(ts.keywordPart(150 /* TypeKeyword */));
                 displayParts.push(ts.spacePart());
                 addFullSymbolName(symbol);
                 writeTypeParametersOfSymbol(symbol, sourceFile);
                 displayParts.push(ts.spacePart());
-                displayParts.push(ts.operatorPart(62 /* EqualsToken */));
+                displayParts.push(ts.operatorPart(63 /* EqualsToken */));
                 displayParts.push(ts.spacePart());
                 ts.addRange(displayParts, ts.typeToDisplayParts(typeChecker, typeChecker.getDeclaredTypeOfSymbol(symbol), enclosingDeclaration, 8388608 /* InTypeAlias */));
             }
             if (symbolFlags & 384 /* Enum */) {
                 prefixNextMeaning();
                 if (ts.some(symbol.declarations, function (d) { return ts.isEnumDeclaration(d) && ts.isEnumConst(d); })) {
-                    displayParts.push(ts.keywordPart(84 /* ConstKeyword */));
+                    displayParts.push(ts.keywordPart(85 /* ConstKeyword */));
                     displayParts.push(ts.spacePart());
                 }
-                displayParts.push(ts.keywordPart(91 /* EnumKeyword */));
+                displayParts.push(ts.keywordPart(92 /* EnumKeyword */));
                 displayParts.push(ts.spacePart());
                 addFullSymbolName(symbol);
             }
             if (symbolFlags & 1536 /* Module */ && !isThisExpression) {
                 prefixNextMeaning();
-                var declaration = ts.getDeclarationOfKind(symbol, 257 /* ModuleDeclaration */);
-                var isNamespace = declaration && declaration.name && declaration.name.kind === 78 /* Identifier */;
-                displayParts.push(ts.keywordPart(isNamespace ? 140 /* NamespaceKeyword */ : 139 /* ModuleKeyword */));
+                var declaration = ts.getDeclarationOfKind(symbol, 259 /* ModuleDeclaration */);
+                var isNamespace = declaration && declaration.name && declaration.name.kind === 79 /* Identifier */;
+                displayParts.push(ts.keywordPart(isNamespace ? 141 /* NamespaceKeyword */ : 140 /* ModuleKeyword */));
                 displayParts.push(ts.spacePart());
                 addFullSymbolName(symbol);
             }
@@ -135270,7 +138544,7 @@
                 }
                 else {
                     // Method/function type parameter
-                    var decl = ts.getDeclarationOfKind(symbol, 160 /* TypeParameter */);
+                    var decl = ts.getDeclarationOfKind(symbol, 161 /* TypeParameter */);
                     if (decl === undefined)
                         return ts.Debug.fail();
                     var declaration = decl.parent;
@@ -135278,21 +138552,21 @@
                         if (ts.isFunctionLikeKind(declaration.kind)) {
                             addInPrefix();
                             var signature = typeChecker.getSignatureFromDeclaration(declaration); // TODO: GH#18217
-                            if (declaration.kind === 171 /* ConstructSignature */) {
-                                displayParts.push(ts.keywordPart(102 /* NewKeyword */));
+                            if (declaration.kind === 173 /* ConstructSignature */) {
+                                displayParts.push(ts.keywordPart(103 /* NewKeyword */));
                                 displayParts.push(ts.spacePart());
                             }
-                            else if (declaration.kind !== 170 /* CallSignature */ && declaration.name) {
+                            else if (declaration.kind !== 172 /* CallSignature */ && declaration.name) {
                                 addFullSymbolName(declaration.symbol);
                             }
                             ts.addRange(displayParts, ts.signatureToDisplayParts(typeChecker, signature, sourceFile, 32 /* WriteTypeArgumentsOfSignature */));
                         }
-                        else if (declaration.kind === 255 /* TypeAliasDeclaration */) {
+                        else if (declaration.kind === 257 /* TypeAliasDeclaration */) {
                             // Type alias type parameter
                             // For example
                             //      type list<T> = T[]; // Both T will go through same code path
                             addInPrefix();
-                            displayParts.push(ts.keywordPart(149 /* TypeKeyword */));
+                            displayParts.push(ts.keywordPart(150 /* TypeKeyword */));
                             displayParts.push(ts.spacePart());
                             addFullSymbolName(declaration.symbol);
                             writeTypeParametersOfSymbol(declaration.symbol, sourceFile);
@@ -135304,11 +138578,11 @@
                 symbolKind = "enum member" /* enumMemberElement */;
                 addPrefixForAnyFunctionOrVar(symbol, "enum member");
                 var declaration = (_a = symbol.declarations) === null || _a === void 0 ? void 0 : _a[0];
-                if ((declaration === null || declaration === void 0 ? void 0 : declaration.kind) === 292 /* EnumMember */) {
+                if ((declaration === null || declaration === void 0 ? void 0 : declaration.kind) === 294 /* EnumMember */) {
                     var constantValue = typeChecker.getConstantValue(declaration);
                     if (constantValue !== undefined) {
                         displayParts.push(ts.spacePart());
-                        displayParts.push(ts.operatorPart(62 /* EqualsToken */));
+                        displayParts.push(ts.operatorPart(63 /* EqualsToken */));
                         displayParts.push(ts.spacePart());
                         displayParts.push(ts.displayPart(ts.getTextOfConstantValue(constantValue), typeof constantValue === "number" ? ts.SymbolDisplayPartKind.numericLiteral : ts.SymbolDisplayPartKind.stringLiteral));
                     }
@@ -135340,33 +138614,33 @@
                 }
                 if (symbol.declarations) {
                     switch (symbol.declarations[0].kind) {
-                        case 260 /* NamespaceExportDeclaration */:
-                            displayParts.push(ts.keywordPart(92 /* ExportKeyword */));
+                        case 262 /* NamespaceExportDeclaration */:
+                            displayParts.push(ts.keywordPart(93 /* ExportKeyword */));
                             displayParts.push(ts.spacePart());
-                            displayParts.push(ts.keywordPart(140 /* NamespaceKeyword */));
+                            displayParts.push(ts.keywordPart(141 /* NamespaceKeyword */));
                             break;
-                        case 267 /* ExportAssignment */:
-                            displayParts.push(ts.keywordPart(92 /* ExportKeyword */));
+                        case 269 /* ExportAssignment */:
+                            displayParts.push(ts.keywordPart(93 /* ExportKeyword */));
                             displayParts.push(ts.spacePart());
-                            displayParts.push(ts.keywordPart(symbol.declarations[0].isExportEquals ? 62 /* EqualsToken */ : 87 /* DefaultKeyword */));
+                            displayParts.push(ts.keywordPart(symbol.declarations[0].isExportEquals ? 63 /* EqualsToken */ : 88 /* DefaultKeyword */));
                             break;
-                        case 271 /* ExportSpecifier */:
-                            displayParts.push(ts.keywordPart(92 /* ExportKeyword */));
+                        case 273 /* ExportSpecifier */:
+                            displayParts.push(ts.keywordPart(93 /* ExportKeyword */));
                             break;
                         default:
-                            displayParts.push(ts.keywordPart(99 /* ImportKeyword */));
+                            displayParts.push(ts.keywordPart(100 /* ImportKeyword */));
                     }
                 }
                 displayParts.push(ts.spacePart());
                 addFullSymbolName(symbol);
                 ts.forEach(symbol.declarations, function (declaration) {
-                    if (declaration.kind === 261 /* ImportEqualsDeclaration */) {
+                    if (declaration.kind === 263 /* ImportEqualsDeclaration */) {
                         var importEqualsDeclaration = declaration;
                         if (ts.isExternalModuleImportEqualsDeclaration(importEqualsDeclaration)) {
                             displayParts.push(ts.spacePart());
-                            displayParts.push(ts.operatorPart(62 /* EqualsToken */));
+                            displayParts.push(ts.operatorPart(63 /* EqualsToken */));
                             displayParts.push(ts.spacePart());
-                            displayParts.push(ts.keywordPart(143 /* RequireKeyword */));
+                            displayParts.push(ts.keywordPart(144 /* RequireKeyword */));
                             displayParts.push(ts.punctuationPart(20 /* OpenParenToken */));
                             displayParts.push(ts.displayPart(ts.getTextOfNode(ts.getExternalModuleImportEqualsDeclarationExpression(importEqualsDeclaration)), ts.SymbolDisplayPartKind.stringLiteral));
                             displayParts.push(ts.punctuationPart(21 /* CloseParenToken */));
@@ -135375,7 +138649,7 @@
                             var internalAliasSymbol = typeChecker.getSymbolAtLocation(importEqualsDeclaration.moduleReference);
                             if (internalAliasSymbol) {
                                 displayParts.push(ts.spacePart());
-                                displayParts.push(ts.operatorPart(62 /* EqualsToken */));
+                                displayParts.push(ts.operatorPart(63 /* EqualsToken */));
                                 displayParts.push(ts.spacePart());
                                 addFullSymbolName(internalAliasSymbol, enclosingDeclaration);
                             }
@@ -135389,7 +138663,7 @@
                     if (type) {
                         if (isThisExpression) {
                             prefixNextMeaning();
-                            displayParts.push(ts.keywordPart(107 /* ThisKeyword */));
+                            displayParts.push(ts.keywordPart(108 /* ThisKeyword */));
                         }
                         else {
                             addPrefixForAnyFunctionOrVar(symbol, symbolKind);
@@ -135447,10 +138721,10 @@
                 // For some special property access expressions like `exports.foo = foo` or `module.exports.foo = foo`
                 // there documentation comments might be attached to the right hand side symbol of their declarations.
                 // The pattern of such special property access is that the parent symbol is the symbol of the file.
-                if (symbol.parent && symbol.declarations && ts.forEach(symbol.parent.declarations, function (declaration) { return declaration.kind === 298 /* SourceFile */; })) {
+                if (symbol.parent && symbol.declarations && ts.forEach(symbol.parent.declarations, function (declaration) { return declaration.kind === 300 /* SourceFile */; })) {
                     for (var _i = 0, _b = symbol.declarations; _i < _b.length; _i++) {
                         var declaration = _b[_i];
-                        if (!declaration.parent || declaration.parent.kind !== 217 /* BinaryExpression */) {
+                        if (!declaration.parent || declaration.parent.kind !== 219 /* BinaryExpression */) {
                             continue;
                         }
                         var rhsSymbol = typeChecker.getSymbolAtLocation(declaration.parent.right);
@@ -135495,7 +138769,7 @@
             }
             function addInPrefix() {
                 displayParts.push(ts.spacePart());
-                displayParts.push(ts.keywordPart(100 /* InKeyword */));
+                displayParts.push(ts.keywordPart(101 /* InKeyword */));
                 displayParts.push(ts.spacePart());
             }
             function addFullSymbolName(symbolToDisplay, enclosingDeclaration) {
@@ -135568,16 +138842,16 @@
             }
             return ts.forEach(symbol.declarations, function (declaration) {
                 // Function expressions are local
-                if (declaration.kind === 209 /* FunctionExpression */) {
+                if (declaration.kind === 211 /* FunctionExpression */) {
                     return true;
                 }
-                if (declaration.kind !== 250 /* VariableDeclaration */ && declaration.kind !== 252 /* FunctionDeclaration */) {
+                if (declaration.kind !== 252 /* VariableDeclaration */ && declaration.kind !== 254 /* FunctionDeclaration */) {
                     return false;
                 }
                 // If the parent is not sourceFile or module block it is local variable
                 for (var parent = declaration.parent; !ts.isFunctionBlock(parent); parent = parent.parent) {
                     // Reached source file or module block
-                    if (parent.kind === 298 /* SourceFile */ || parent.kind === 258 /* ModuleBlock */) {
+                    if (parent.kind === 300 /* SourceFile */ || parent.kind === 260 /* ModuleBlock */) {
                         return false;
                     }
                 }
@@ -135679,9 +138953,8 @@
     /*@internal*/
     function fixupCompilerOptions(options, diagnostics) {
         // Lazily create this value to fix module loading errors.
-        commandLineOptionsStringToEnum = commandLineOptionsStringToEnum || ts.filter(ts.optionDeclarations, function (o) {
-            return typeof o.type === "object" && !ts.forEachEntry(o.type, function (v) { return typeof v !== "number"; });
-        });
+        commandLineOptionsStringToEnum = commandLineOptionsStringToEnum ||
+            ts.filter(ts.optionDeclarations, function (o) { return typeof o.type === "object" && !ts.forEachEntry(o.type, function (v) { return typeof v !== "number"; }); });
         options = ts.cloneCompilerOptions(options);
         var _loop_9 = function (opt) {
             if (!ts.hasProperty(options, opt.name)) {
@@ -135867,8 +139140,8 @@
             function shouldRescanGreaterThanToken(node) {
                 switch (node.kind) {
                     case 33 /* GreaterThanEqualsToken */:
-                    case 70 /* GreaterThanGreaterThanEqualsToken */:
-                    case 71 /* GreaterThanGreaterThanGreaterThanEqualsToken */:
+                    case 71 /* GreaterThanGreaterThanEqualsToken */:
+                    case 72 /* GreaterThanGreaterThanGreaterThanEqualsToken */:
                     case 49 /* GreaterThanGreaterThanGreaterThanToken */:
                     case 48 /* GreaterThanGreaterThanToken */:
                         return true;
@@ -135878,12 +139151,12 @@
             function shouldRescanJsxIdentifier(node) {
                 if (node.parent) {
                     switch (node.parent.kind) {
-                        case 281 /* JsxAttribute */:
-                        case 276 /* JsxOpeningElement */:
-                        case 277 /* JsxClosingElement */:
-                        case 275 /* JsxSelfClosingElement */:
+                        case 283 /* JsxAttribute */:
+                        case 278 /* JsxOpeningElement */:
+                        case 279 /* JsxClosingElement */:
+                        case 277 /* JsxSelfClosingElement */:
                             // May parse an identifier like `module-layout`; that will be scanned as a keyword at first, but we should parse the whole thing to get an identifier.
-                            return ts.isKeyword(node.kind) || node.kind === 78 /* Identifier */;
+                            return ts.isKeyword(node.kind) || node.kind === 79 /* Identifier */;
                     }
                 }
                 return false;
@@ -135902,7 +139175,7 @@
                 return node.parent && ts.isJsxAttribute(node.parent) && node.parent.initializer === node;
             }
             function startsWithSlashToken(t) {
-                return t === 43 /* SlashToken */ || t === 67 /* SlashEqualsToken */;
+                return t === 43 /* SlashToken */ || t === 68 /* SlashEqualsToken */;
             }
             function readTokenInfo(n) {
                 ts.Debug.assert(isOnToken());
@@ -136075,7 +139348,7 @@
     (function (formatting) {
         function getAllRules() {
             var allTokens = [];
-            for (var token = 0 /* FirstToken */; token <= 157 /* LastToken */; token++) {
+            for (var token = 0 /* FirstToken */; token <= 158 /* LastToken */; token++) {
                 if (token !== 1 /* EndOfFileToken */) {
                     allTokens.push(token);
                 }
@@ -136088,29 +139361,29 @@
                 return { tokens: allTokens.filter(function (t) { return !tokens.some(function (t2) { return t2 === t; }); }), isSpecific: false };
             }
             var anyToken = { tokens: allTokens, isSpecific: false };
-            var anyTokenIncludingMultilineComments = tokenRangeFrom(__spreadArray(__spreadArray([], allTokens), [3 /* MultiLineCommentTrivia */]));
-            var anyTokenIncludingEOF = tokenRangeFrom(__spreadArray(__spreadArray([], allTokens), [1 /* EndOfFileToken */]));
-            var keywords = tokenRangeFromRange(80 /* FirstKeyword */, 157 /* LastKeyword */);
-            var binaryOperators = tokenRangeFromRange(29 /* FirstBinaryOperator */, 77 /* LastBinaryOperator */);
-            var binaryKeywordOperators = [100 /* InKeyword */, 101 /* InstanceOfKeyword */, 157 /* OfKeyword */, 126 /* AsKeyword */, 137 /* IsKeyword */];
+            var anyTokenIncludingMultilineComments = tokenRangeFrom(__spreadArray(__spreadArray([], allTokens, true), [3 /* MultiLineCommentTrivia */], false));
+            var anyTokenIncludingEOF = tokenRangeFrom(__spreadArray(__spreadArray([], allTokens, true), [1 /* EndOfFileToken */], false));
+            var keywords = tokenRangeFromRange(81 /* FirstKeyword */, 158 /* LastKeyword */);
+            var binaryOperators = tokenRangeFromRange(29 /* FirstBinaryOperator */, 78 /* LastBinaryOperator */);
+            var binaryKeywordOperators = [101 /* InKeyword */, 102 /* InstanceOfKeyword */, 158 /* OfKeyword */, 127 /* AsKeyword */, 138 /* IsKeyword */];
             var unaryPrefixOperators = [45 /* PlusPlusToken */, 46 /* MinusMinusToken */, 54 /* TildeToken */, 53 /* ExclamationToken */];
             var unaryPrefixExpressions = [
-                8 /* NumericLiteral */, 9 /* BigIntLiteral */, 78 /* Identifier */, 20 /* OpenParenToken */,
-                22 /* OpenBracketToken */, 18 /* OpenBraceToken */, 107 /* ThisKeyword */, 102 /* NewKeyword */
+                8 /* NumericLiteral */, 9 /* BigIntLiteral */, 79 /* Identifier */, 20 /* OpenParenToken */,
+                22 /* OpenBracketToken */, 18 /* OpenBraceToken */, 108 /* ThisKeyword */, 103 /* NewKeyword */
             ];
-            var unaryPreincrementExpressions = [78 /* Identifier */, 20 /* OpenParenToken */, 107 /* ThisKeyword */, 102 /* NewKeyword */];
-            var unaryPostincrementExpressions = [78 /* Identifier */, 21 /* CloseParenToken */, 23 /* CloseBracketToken */, 102 /* NewKeyword */];
-            var unaryPredecrementExpressions = [78 /* Identifier */, 20 /* OpenParenToken */, 107 /* ThisKeyword */, 102 /* NewKeyword */];
-            var unaryPostdecrementExpressions = [78 /* Identifier */, 21 /* CloseParenToken */, 23 /* CloseBracketToken */, 102 /* NewKeyword */];
+            var unaryPreincrementExpressions = [79 /* Identifier */, 20 /* OpenParenToken */, 108 /* ThisKeyword */, 103 /* NewKeyword */];
+            var unaryPostincrementExpressions = [79 /* Identifier */, 21 /* CloseParenToken */, 23 /* CloseBracketToken */, 103 /* NewKeyword */];
+            var unaryPredecrementExpressions = [79 /* Identifier */, 20 /* OpenParenToken */, 108 /* ThisKeyword */, 103 /* NewKeyword */];
+            var unaryPostdecrementExpressions = [79 /* Identifier */, 21 /* CloseParenToken */, 23 /* CloseBracketToken */, 103 /* NewKeyword */];
             var comments = [2 /* SingleLineCommentTrivia */, 3 /* MultiLineCommentTrivia */];
-            var typeNames = __spreadArray([78 /* Identifier */], ts.typeKeywords);
+            var typeNames = __spreadArray([79 /* Identifier */], ts.typeKeywords, true);
             // Place a space before open brace in a function declaration
             // TypeScript: Function can have return types, which can be made of tons of different token kinds
             var functionOpenBraceLeftTokenRange = anyTokenIncludingMultilineComments;
             // Place a space before open brace in a TypeScript declaration that has braces as children (class, module, enum, etc)
-            var typeScriptOpenBraceLeftTokenRange = tokenRangeFrom([78 /* Identifier */, 3 /* MultiLineCommentTrivia */, 83 /* ClassKeyword */, 92 /* ExportKeyword */, 99 /* ImportKeyword */]);
+            var typeScriptOpenBraceLeftTokenRange = tokenRangeFrom([79 /* Identifier */, 3 /* MultiLineCommentTrivia */, 84 /* ClassKeyword */, 93 /* ExportKeyword */, 100 /* ImportKeyword */]);
             // Place a space before open brace in a control flow construct
-            var controlOpenBraceLeftTokenRange = tokenRangeFrom([21 /* CloseParenToken */, 3 /* MultiLineCommentTrivia */, 89 /* DoKeyword */, 110 /* TryKeyword */, 95 /* FinallyKeyword */, 90 /* ElseKeyword */]);
+            var controlOpenBraceLeftTokenRange = tokenRangeFrom([21 /* CloseParenToken */, 3 /* MultiLineCommentTrivia */, 90 /* DoKeyword */, 111 /* TryKeyword */, 96 /* FinallyKeyword */, 91 /* ElseKeyword */]);
             // These rules are higher in priority than user-configurable
             var highPriorityCommonRules = [
                 // Leave comments alone
@@ -136125,7 +139398,7 @@
                 rule("NoSpaceAfterQuestionMark", 57 /* QuestionToken */, anyToken, [isNonJsxSameLineTokenContext], 16 /* DeleteSpace */),
                 rule("NoSpaceBeforeDot", anyToken, [24 /* DotToken */, 28 /* QuestionDotToken */], [isNonJsxSameLineTokenContext], 16 /* DeleteSpace */),
                 rule("NoSpaceAfterDot", [24 /* DotToken */, 28 /* QuestionDotToken */], anyToken, [isNonJsxSameLineTokenContext], 16 /* DeleteSpace */),
-                rule("NoSpaceBetweenImportParenInImportType", 99 /* ImportKeyword */, 20 /* OpenParenToken */, [isNonJsxSameLineTokenContext, isImportTypeContext], 16 /* DeleteSpace */),
+                rule("NoSpaceBetweenImportParenInImportType", 100 /* ImportKeyword */, 20 /* OpenParenToken */, [isNonJsxSameLineTokenContext, isImportTypeContext], 16 /* DeleteSpace */),
                 // Special handling of unary operators.
                 // Prefix operators generally shouldn't have a space between
                 // them and their target unary expression.
@@ -136152,79 +139425,79 @@
                 rule("SpaceAfterCloseBrace", 19 /* CloseBraceToken */, anyTokenExcept(21 /* CloseParenToken */), [isNonJsxSameLineTokenContext, isAfterCodeBlockContext], 4 /* InsertSpace */),
                 // Special case for (}, else) and (}, while) since else & while tokens are not part of the tree which makes SpaceAfterCloseBrace rule not applied
                 // Also should not apply to })
-                rule("SpaceBetweenCloseBraceAndElse", 19 /* CloseBraceToken */, 90 /* ElseKeyword */, [isNonJsxSameLineTokenContext], 4 /* InsertSpace */),
-                rule("SpaceBetweenCloseBraceAndWhile", 19 /* CloseBraceToken */, 114 /* WhileKeyword */, [isNonJsxSameLineTokenContext], 4 /* InsertSpace */),
+                rule("SpaceBetweenCloseBraceAndElse", 19 /* CloseBraceToken */, 91 /* ElseKeyword */, [isNonJsxSameLineTokenContext], 4 /* InsertSpace */),
+                rule("SpaceBetweenCloseBraceAndWhile", 19 /* CloseBraceToken */, 115 /* WhileKeyword */, [isNonJsxSameLineTokenContext], 4 /* InsertSpace */),
                 rule("NoSpaceBetweenEmptyBraceBrackets", 18 /* OpenBraceToken */, 19 /* CloseBraceToken */, [isNonJsxSameLineTokenContext, isObjectContext], 16 /* DeleteSpace */),
                 // Add a space after control dec context if the next character is an open bracket ex: 'if (false)[a, b] = [1, 2];' -> 'if (false) [a, b] = [1, 2];'
                 rule("SpaceAfterConditionalClosingParen", 21 /* CloseParenToken */, 22 /* OpenBracketToken */, [isControlDeclContext], 4 /* InsertSpace */),
-                rule("NoSpaceBetweenFunctionKeywordAndStar", 97 /* FunctionKeyword */, 41 /* AsteriskToken */, [isFunctionDeclarationOrFunctionExpressionContext], 16 /* DeleteSpace */),
-                rule("SpaceAfterStarInGeneratorDeclaration", 41 /* AsteriskToken */, 78 /* Identifier */, [isFunctionDeclarationOrFunctionExpressionContext], 4 /* InsertSpace */),
-                rule("SpaceAfterFunctionInFuncDecl", 97 /* FunctionKeyword */, anyToken, [isFunctionDeclContext], 4 /* InsertSpace */),
+                rule("NoSpaceBetweenFunctionKeywordAndStar", 98 /* FunctionKeyword */, 41 /* AsteriskToken */, [isFunctionDeclarationOrFunctionExpressionContext], 16 /* DeleteSpace */),
+                rule("SpaceAfterStarInGeneratorDeclaration", 41 /* AsteriskToken */, 79 /* Identifier */, [isFunctionDeclarationOrFunctionExpressionContext], 4 /* InsertSpace */),
+                rule("SpaceAfterFunctionInFuncDecl", 98 /* FunctionKeyword */, anyToken, [isFunctionDeclContext], 4 /* InsertSpace */),
                 // Insert new line after { and before } in multi-line contexts.
                 rule("NewLineAfterOpenBraceInBlockContext", 18 /* OpenBraceToken */, anyToken, [isMultilineBlockContext], 8 /* InsertNewLine */),
                 // For get/set members, we check for (identifier,identifier) since get/set don't have tokens and they are represented as just an identifier token.
                 // Though, we do extra check on the context to make sure we are dealing with get/set node. Example:
                 //      get x() {}
                 //      set x(val) {}
-                rule("SpaceAfterGetSetInMember", [134 /* GetKeyword */, 146 /* SetKeyword */], 78 /* Identifier */, [isFunctionDeclContext], 4 /* InsertSpace */),
-                rule("NoSpaceBetweenYieldKeywordAndStar", 124 /* YieldKeyword */, 41 /* AsteriskToken */, [isNonJsxSameLineTokenContext, isYieldOrYieldStarWithOperand], 16 /* DeleteSpace */),
-                rule("SpaceBetweenYieldOrYieldStarAndOperand", [124 /* YieldKeyword */, 41 /* AsteriskToken */], anyToken, [isNonJsxSameLineTokenContext, isYieldOrYieldStarWithOperand], 4 /* InsertSpace */),
-                rule("NoSpaceBetweenReturnAndSemicolon", 104 /* ReturnKeyword */, 26 /* SemicolonToken */, [isNonJsxSameLineTokenContext], 16 /* DeleteSpace */),
-                rule("SpaceAfterCertainKeywords", [112 /* VarKeyword */, 108 /* ThrowKeyword */, 102 /* NewKeyword */, 88 /* DeleteKeyword */, 104 /* ReturnKeyword */, 111 /* TypeOfKeyword */, 130 /* AwaitKeyword */], anyToken, [isNonJsxSameLineTokenContext], 4 /* InsertSpace */),
-                rule("SpaceAfterLetConstInVariableDeclaration", [118 /* LetKeyword */, 84 /* ConstKeyword */], anyToken, [isNonJsxSameLineTokenContext, isStartOfVariableDeclarationList], 4 /* InsertSpace */),
+                rule("SpaceAfterGetSetInMember", [135 /* GetKeyword */, 147 /* SetKeyword */], 79 /* Identifier */, [isFunctionDeclContext], 4 /* InsertSpace */),
+                rule("NoSpaceBetweenYieldKeywordAndStar", 125 /* YieldKeyword */, 41 /* AsteriskToken */, [isNonJsxSameLineTokenContext, isYieldOrYieldStarWithOperand], 16 /* DeleteSpace */),
+                rule("SpaceBetweenYieldOrYieldStarAndOperand", [125 /* YieldKeyword */, 41 /* AsteriskToken */], anyToken, [isNonJsxSameLineTokenContext, isYieldOrYieldStarWithOperand], 4 /* InsertSpace */),
+                rule("NoSpaceBetweenReturnAndSemicolon", 105 /* ReturnKeyword */, 26 /* SemicolonToken */, [isNonJsxSameLineTokenContext], 16 /* DeleteSpace */),
+                rule("SpaceAfterCertainKeywords", [113 /* VarKeyword */, 109 /* ThrowKeyword */, 103 /* NewKeyword */, 89 /* DeleteKeyword */, 105 /* ReturnKeyword */, 112 /* TypeOfKeyword */, 131 /* AwaitKeyword */], anyToken, [isNonJsxSameLineTokenContext], 4 /* InsertSpace */),
+                rule("SpaceAfterLetConstInVariableDeclaration", [119 /* LetKeyword */, 85 /* ConstKeyword */], anyToken, [isNonJsxSameLineTokenContext, isStartOfVariableDeclarationList], 4 /* InsertSpace */),
                 rule("NoSpaceBeforeOpenParenInFuncCall", anyToken, 20 /* OpenParenToken */, [isNonJsxSameLineTokenContext, isFunctionCallOrNewContext, isPreviousTokenNotComma], 16 /* DeleteSpace */),
                 // Special case for binary operators (that are keywords). For these we have to add a space and shouldn't follow any user options.
                 rule("SpaceBeforeBinaryKeywordOperator", anyToken, binaryKeywordOperators, [isNonJsxSameLineTokenContext, isBinaryOpContext], 4 /* InsertSpace */),
                 rule("SpaceAfterBinaryKeywordOperator", binaryKeywordOperators, anyToken, [isNonJsxSameLineTokenContext, isBinaryOpContext], 4 /* InsertSpace */),
-                rule("SpaceAfterVoidOperator", 113 /* VoidKeyword */, anyToken, [isNonJsxSameLineTokenContext, isVoidOpContext], 4 /* InsertSpace */),
+                rule("SpaceAfterVoidOperator", 114 /* VoidKeyword */, anyToken, [isNonJsxSameLineTokenContext, isVoidOpContext], 4 /* InsertSpace */),
                 // Async-await
-                rule("SpaceBetweenAsyncAndOpenParen", 129 /* AsyncKeyword */, 20 /* OpenParenToken */, [isArrowFunctionContext, isNonJsxSameLineTokenContext], 4 /* InsertSpace */),
-                rule("SpaceBetweenAsyncAndFunctionKeyword", 129 /* AsyncKeyword */, [97 /* FunctionKeyword */, 78 /* Identifier */], [isNonJsxSameLineTokenContext], 4 /* InsertSpace */),
+                rule("SpaceBetweenAsyncAndOpenParen", 130 /* AsyncKeyword */, 20 /* OpenParenToken */, [isArrowFunctionContext, isNonJsxSameLineTokenContext], 4 /* InsertSpace */),
+                rule("SpaceBetweenAsyncAndFunctionKeyword", 130 /* AsyncKeyword */, [98 /* FunctionKeyword */, 79 /* Identifier */], [isNonJsxSameLineTokenContext], 4 /* InsertSpace */),
                 // Template string
-                rule("NoSpaceBetweenTagAndTemplateString", [78 /* Identifier */, 21 /* CloseParenToken */], [14 /* NoSubstitutionTemplateLiteral */, 15 /* TemplateHead */], [isNonJsxSameLineTokenContext], 16 /* DeleteSpace */),
+                rule("NoSpaceBetweenTagAndTemplateString", [79 /* Identifier */, 21 /* CloseParenToken */], [14 /* NoSubstitutionTemplateLiteral */, 15 /* TemplateHead */], [isNonJsxSameLineTokenContext], 16 /* DeleteSpace */),
                 // JSX opening elements
-                rule("SpaceBeforeJsxAttribute", anyToken, 78 /* Identifier */, [isNextTokenParentJsxAttribute, isNonJsxSameLineTokenContext], 4 /* InsertSpace */),
+                rule("SpaceBeforeJsxAttribute", anyToken, 79 /* Identifier */, [isNextTokenParentJsxAttribute, isNonJsxSameLineTokenContext], 4 /* InsertSpace */),
                 rule("SpaceBeforeSlashInJsxOpeningElement", anyToken, 43 /* SlashToken */, [isJsxSelfClosingElementContext, isNonJsxSameLineTokenContext], 4 /* InsertSpace */),
                 rule("NoSpaceBeforeGreaterThanTokenInJsxOpeningElement", 43 /* SlashToken */, 31 /* GreaterThanToken */, [isJsxSelfClosingElementContext, isNonJsxSameLineTokenContext], 16 /* DeleteSpace */),
-                rule("NoSpaceBeforeEqualInJsxAttribute", anyToken, 62 /* EqualsToken */, [isJsxAttributeContext, isNonJsxSameLineTokenContext], 16 /* DeleteSpace */),
-                rule("NoSpaceAfterEqualInJsxAttribute", 62 /* EqualsToken */, anyToken, [isJsxAttributeContext, isNonJsxSameLineTokenContext], 16 /* DeleteSpace */),
+                rule("NoSpaceBeforeEqualInJsxAttribute", anyToken, 63 /* EqualsToken */, [isJsxAttributeContext, isNonJsxSameLineTokenContext], 16 /* DeleteSpace */),
+                rule("NoSpaceAfterEqualInJsxAttribute", 63 /* EqualsToken */, anyToken, [isJsxAttributeContext, isNonJsxSameLineTokenContext], 16 /* DeleteSpace */),
                 // TypeScript-specific rules
                 // Use of module as a function call. e.g.: import m2 = module("m2");
-                rule("NoSpaceAfterModuleImport", [139 /* ModuleKeyword */, 143 /* RequireKeyword */], 20 /* OpenParenToken */, [isNonJsxSameLineTokenContext], 16 /* DeleteSpace */),
+                rule("NoSpaceAfterModuleImport", [140 /* ModuleKeyword */, 144 /* RequireKeyword */], 20 /* OpenParenToken */, [isNonJsxSameLineTokenContext], 16 /* DeleteSpace */),
                 // Add a space around certain TypeScript keywords
                 rule("SpaceAfterCertainTypeScriptKeywords", [
-                    125 /* AbstractKeyword */,
-                    83 /* ClassKeyword */,
-                    133 /* DeclareKeyword */,
-                    87 /* DefaultKeyword */,
-                    91 /* EnumKeyword */,
-                    92 /* ExportKeyword */,
-                    93 /* ExtendsKeyword */,
-                    134 /* GetKeyword */,
-                    116 /* ImplementsKeyword */,
-                    99 /* ImportKeyword */,
-                    117 /* InterfaceKeyword */,
-                    139 /* ModuleKeyword */,
-                    140 /* NamespaceKeyword */,
-                    120 /* PrivateKeyword */,
-                    122 /* PublicKeyword */,
-                    121 /* ProtectedKeyword */,
-                    142 /* ReadonlyKeyword */,
-                    146 /* SetKeyword */,
-                    123 /* StaticKeyword */,
-                    149 /* TypeKeyword */,
-                    153 /* FromKeyword */,
-                    138 /* KeyOfKeyword */,
-                    135 /* InferKeyword */,
+                    126 /* AbstractKeyword */,
+                    84 /* ClassKeyword */,
+                    134 /* DeclareKeyword */,
+                    88 /* DefaultKeyword */,
+                    92 /* EnumKeyword */,
+                    93 /* ExportKeyword */,
+                    94 /* ExtendsKeyword */,
+                    135 /* GetKeyword */,
+                    117 /* ImplementsKeyword */,
+                    100 /* ImportKeyword */,
+                    118 /* InterfaceKeyword */,
+                    140 /* ModuleKeyword */,
+                    141 /* NamespaceKeyword */,
+                    121 /* PrivateKeyword */,
+                    123 /* PublicKeyword */,
+                    122 /* ProtectedKeyword */,
+                    143 /* ReadonlyKeyword */,
+                    147 /* SetKeyword */,
+                    124 /* StaticKeyword */,
+                    150 /* TypeKeyword */,
+                    154 /* FromKeyword */,
+                    139 /* KeyOfKeyword */,
+                    136 /* InferKeyword */,
                 ], anyToken, [isNonJsxSameLineTokenContext], 4 /* InsertSpace */),
-                rule("SpaceBeforeCertainTypeScriptKeywords", anyToken, [93 /* ExtendsKeyword */, 116 /* ImplementsKeyword */, 153 /* FromKeyword */], [isNonJsxSameLineTokenContext], 4 /* InsertSpace */),
+                rule("SpaceBeforeCertainTypeScriptKeywords", anyToken, [94 /* ExtendsKeyword */, 117 /* ImplementsKeyword */, 154 /* FromKeyword */], [isNonJsxSameLineTokenContext], 4 /* InsertSpace */),
                 // Treat string literals in module names as identifiers, and add a space between the literal and the opening Brace braces, e.g.: module "m2" {
                 rule("SpaceAfterModuleName", 10 /* StringLiteral */, 18 /* OpenBraceToken */, [isModuleDeclContext], 4 /* InsertSpace */),
                 // Lambda expressions
                 rule("SpaceBeforeArrow", anyToken, 38 /* EqualsGreaterThanToken */, [isNonJsxSameLineTokenContext], 4 /* InsertSpace */),
                 rule("SpaceAfterArrow", 38 /* EqualsGreaterThanToken */, anyToken, [isNonJsxSameLineTokenContext], 4 /* InsertSpace */),
                 // Optional parameters and let args
-                rule("NoSpaceAfterEllipsis", 25 /* DotDotDotToken */, 78 /* Identifier */, [isNonJsxSameLineTokenContext], 16 /* DeleteSpace */),
+                rule("NoSpaceAfterEllipsis", 25 /* DotDotDotToken */, 79 /* Identifier */, [isNonJsxSameLineTokenContext], 16 /* DeleteSpace */),
                 rule("NoSpaceAfterOptionalParameters", 57 /* QuestionToken */, [21 /* CloseParenToken */, 27 /* CommaToken */], [isNonJsxSameLineTokenContext, isNotBinaryOpContext], 16 /* DeleteSpace */),
                 // Remove spaces in empty interface literals. e.g.: x: {}
                 rule("NoSpaceBetweenEmptyInterfaceBraceBrackets", 18 /* OpenBraceToken */, 19 /* CloseBraceToken */, [isNonJsxSameLineTokenContext, isObjectTypeContext], 16 /* DeleteSpace */),
@@ -136235,38 +139508,38 @@
                 rule("NoSpaceBeforeCloseAngularBracket", anyToken, 31 /* GreaterThanToken */, [isNonJsxSameLineTokenContext, isTypeArgumentOrParameterOrAssertionContext], 16 /* DeleteSpace */),
                 rule("NoSpaceAfterCloseAngularBracket", 31 /* GreaterThanToken */, [20 /* OpenParenToken */, 22 /* OpenBracketToken */, 31 /* GreaterThanToken */, 27 /* CommaToken */], [isNonJsxSameLineTokenContext, isTypeArgumentOrParameterOrAssertionContext, isNotFunctionDeclContext /*To prevent an interference with the SpaceBeforeOpenParenInFuncDecl rule*/], 16 /* DeleteSpace */),
                 // decorators
-                rule("SpaceBeforeAt", [21 /* CloseParenToken */, 78 /* Identifier */], 59 /* AtToken */, [isNonJsxSameLineTokenContext], 4 /* InsertSpace */),
+                rule("SpaceBeforeAt", [21 /* CloseParenToken */, 79 /* Identifier */], 59 /* AtToken */, [isNonJsxSameLineTokenContext], 4 /* InsertSpace */),
                 rule("NoSpaceAfterAt", 59 /* AtToken */, anyToken, [isNonJsxSameLineTokenContext], 16 /* DeleteSpace */),
                 // Insert space after @ in decorator
                 rule("SpaceAfterDecorator", anyToken, [
-                    125 /* AbstractKeyword */,
-                    78 /* Identifier */,
-                    92 /* ExportKeyword */,
-                    87 /* DefaultKeyword */,
-                    83 /* ClassKeyword */,
-                    123 /* StaticKeyword */,
-                    122 /* PublicKeyword */,
-                    120 /* PrivateKeyword */,
-                    121 /* ProtectedKeyword */,
-                    134 /* GetKeyword */,
-                    146 /* SetKeyword */,
+                    126 /* AbstractKeyword */,
+                    79 /* Identifier */,
+                    93 /* ExportKeyword */,
+                    88 /* DefaultKeyword */,
+                    84 /* ClassKeyword */,
+                    124 /* StaticKeyword */,
+                    123 /* PublicKeyword */,
+                    121 /* PrivateKeyword */,
+                    122 /* ProtectedKeyword */,
+                    135 /* GetKeyword */,
+                    147 /* SetKeyword */,
                     22 /* OpenBracketToken */,
                     41 /* AsteriskToken */,
                 ], [isEndOfDecoratorContextOnSameLine], 4 /* InsertSpace */),
                 rule("NoSpaceBeforeNonNullAssertionOperator", anyToken, 53 /* ExclamationToken */, [isNonJsxSameLineTokenContext, isNonNullAssertionContext], 16 /* DeleteSpace */),
-                rule("NoSpaceAfterNewKeywordOnConstructorSignature", 102 /* NewKeyword */, 20 /* OpenParenToken */, [isNonJsxSameLineTokenContext, isConstructorSignatureContext], 16 /* DeleteSpace */),
+                rule("NoSpaceAfterNewKeywordOnConstructorSignature", 103 /* NewKeyword */, 20 /* OpenParenToken */, [isNonJsxSameLineTokenContext, isConstructorSignatureContext], 16 /* DeleteSpace */),
                 rule("SpaceLessThanAndNonJSXTypeAnnotation", 29 /* LessThanToken */, 29 /* LessThanToken */, [isNonJsxSameLineTokenContext], 4 /* InsertSpace */),
             ];
             // These rules are applied after high priority
             var userConfigurableRules = [
                 // Treat constructor as an identifier in a function declaration, and remove spaces between constructor and following left parentheses
-                rule("SpaceAfterConstructor", 132 /* ConstructorKeyword */, 20 /* OpenParenToken */, [isOptionEnabled("insertSpaceAfterConstructor"), isNonJsxSameLineTokenContext], 4 /* InsertSpace */),
-                rule("NoSpaceAfterConstructor", 132 /* ConstructorKeyword */, 20 /* OpenParenToken */, [isOptionDisabledOrUndefined("insertSpaceAfterConstructor"), isNonJsxSameLineTokenContext], 16 /* DeleteSpace */),
+                rule("SpaceAfterConstructor", 133 /* ConstructorKeyword */, 20 /* OpenParenToken */, [isOptionEnabled("insertSpaceAfterConstructor"), isNonJsxSameLineTokenContext], 4 /* InsertSpace */),
+                rule("NoSpaceAfterConstructor", 133 /* ConstructorKeyword */, 20 /* OpenParenToken */, [isOptionDisabledOrUndefined("insertSpaceAfterConstructor"), isNonJsxSameLineTokenContext], 16 /* DeleteSpace */),
                 rule("SpaceAfterComma", 27 /* CommaToken */, anyToken, [isOptionEnabled("insertSpaceAfterCommaDelimiter"), isNonJsxSameLineTokenContext, isNonJsxElementOrFragmentContext, isNextTokenNotCloseBracket, isNextTokenNotCloseParen], 4 /* InsertSpace */),
                 rule("NoSpaceAfterComma", 27 /* CommaToken */, anyToken, [isOptionDisabledOrUndefined("insertSpaceAfterCommaDelimiter"), isNonJsxSameLineTokenContext, isNonJsxElementOrFragmentContext], 16 /* DeleteSpace */),
                 // Insert space after function keyword for anonymous functions
-                rule("SpaceAfterAnonymousFunctionKeyword", [97 /* FunctionKeyword */, 41 /* AsteriskToken */], 20 /* OpenParenToken */, [isOptionEnabled("insertSpaceAfterFunctionKeywordForAnonymousFunctions"), isFunctionDeclContext], 4 /* InsertSpace */),
-                rule("NoSpaceAfterAnonymousFunctionKeyword", [97 /* FunctionKeyword */, 41 /* AsteriskToken */], 20 /* OpenParenToken */, [isOptionDisabledOrUndefined("insertSpaceAfterFunctionKeywordForAnonymousFunctions"), isFunctionDeclContext], 16 /* DeleteSpace */),
+                rule("SpaceAfterAnonymousFunctionKeyword", [98 /* FunctionKeyword */, 41 /* AsteriskToken */], 20 /* OpenParenToken */, [isOptionEnabled("insertSpaceAfterFunctionKeywordForAnonymousFunctions"), isFunctionDeclContext], 4 /* InsertSpace */),
+                rule("NoSpaceAfterAnonymousFunctionKeyword", [98 /* FunctionKeyword */, 41 /* AsteriskToken */], 20 /* OpenParenToken */, [isOptionDisabledOrUndefined("insertSpaceAfterFunctionKeywordForAnonymousFunctions"), isFunctionDeclContext], 16 /* DeleteSpace */),
                 // Insert space after keywords in control flow statements
                 rule("SpaceAfterKeywordInControl", keywords, 20 /* OpenParenToken */, [isOptionEnabled("insertSpaceAfterKeywordsInControlFlowStatements"), isControlDeclContext], 4 /* InsertSpace */),
                 rule("NoSpaceAfterKeywordInControl", keywords, 20 /* OpenParenToken */, [isOptionDisabledOrUndefined("insertSpaceAfterKeywordsInControlFlowStatements"), isControlDeclContext], 16 /* DeleteSpace */),
@@ -136335,18 +139608,18 @@
                 rule("SpaceBeforeOpenBraceInTypeScriptDeclWithBlock", typeScriptOpenBraceLeftTokenRange, 18 /* OpenBraceToken */, [isOptionDisabledOrUndefinedOrTokensOnSameLine("placeOpenBraceOnNewLineForFunctions"), isTypeScriptDeclWithBlockContext, isNotFormatOnEnter, isSameLineTokenOrBeforeBlockContext], 4 /* InsertSpace */, 1 /* CanDeleteNewLines */),
                 rule("NoSpaceBeforeComma", anyToken, 27 /* CommaToken */, [isNonJsxSameLineTokenContext], 16 /* DeleteSpace */),
                 // No space before and after indexer `x[]`
-                rule("NoSpaceBeforeOpenBracket", anyTokenExcept(129 /* AsyncKeyword */, 81 /* CaseKeyword */), 22 /* OpenBracketToken */, [isNonJsxSameLineTokenContext], 16 /* DeleteSpace */),
+                rule("NoSpaceBeforeOpenBracket", anyTokenExcept(130 /* AsyncKeyword */, 82 /* CaseKeyword */), 22 /* OpenBracketToken */, [isNonJsxSameLineTokenContext], 16 /* DeleteSpace */),
                 rule("NoSpaceAfterCloseBracket", 23 /* CloseBracketToken */, anyToken, [isNonJsxSameLineTokenContext, isNotBeforeBlockInFunctionDeclarationContext], 16 /* DeleteSpace */),
                 rule("SpaceAfterSemicolon", 26 /* SemicolonToken */, anyToken, [isNonJsxSameLineTokenContext], 4 /* InsertSpace */),
                 // Remove extra space between for and await
-                rule("SpaceBetweenForAndAwaitKeyword", 96 /* ForKeyword */, 130 /* AwaitKeyword */, [isNonJsxSameLineTokenContext], 4 /* InsertSpace */),
+                rule("SpaceBetweenForAndAwaitKeyword", 97 /* ForKeyword */, 131 /* AwaitKeyword */, [isNonJsxSameLineTokenContext], 4 /* InsertSpace */),
                 // Add a space between statements. All keywords except (do,else,case) has open/close parens after them.
                 // So, we have a rule to add a space for [),Any], [do,Any], [else,Any], and [case,Any]
-                rule("SpaceBetweenStatements", [21 /* CloseParenToken */, 89 /* DoKeyword */, 90 /* ElseKeyword */, 81 /* CaseKeyword */], anyToken, [isNonJsxSameLineTokenContext, isNonJsxElementOrFragmentContext, isNotForContext], 4 /* InsertSpace */),
+                rule("SpaceBetweenStatements", [21 /* CloseParenToken */, 90 /* DoKeyword */, 91 /* ElseKeyword */, 82 /* CaseKeyword */], anyToken, [isNonJsxSameLineTokenContext, isNonJsxElementOrFragmentContext, isNotForContext], 4 /* InsertSpace */),
                 // This low-pri rule takes care of "try {", "catch {" and "finally {" in case the rule SpaceBeforeOpenBraceInControl didn't execute on FormatOnEnter.
-                rule("SpaceAfterTryCatchFinally", [110 /* TryKeyword */, 82 /* CatchKeyword */, 95 /* FinallyKeyword */], 18 /* OpenBraceToken */, [isNonJsxSameLineTokenContext], 4 /* InsertSpace */),
+                rule("SpaceAfterTryCatchFinally", [111 /* TryKeyword */, 83 /* CatchKeyword */, 96 /* FinallyKeyword */], 18 /* OpenBraceToken */, [isNonJsxSameLineTokenContext], 4 /* InsertSpace */),
             ];
-            return __spreadArray(__spreadArray(__spreadArray([], highPriorityCommonRules), userConfigurableRules), lowPriorityCommonRules);
+            return __spreadArray(__spreadArray(__spreadArray([], highPriorityCommonRules, true), userConfigurableRules, true), lowPriorityCommonRules, true);
         }
         formatting.getAllRules = getAllRules;
         /**
@@ -136403,51 +139676,54 @@
             return function (context) { return !context.options || !context.options.hasOwnProperty(optionName) || !!context.options[optionName]; };
         }
         function isForContext(context) {
-            return context.contextNode.kind === 238 /* ForStatement */;
+            return context.contextNode.kind === 240 /* ForStatement */;
         }
         function isNotForContext(context) {
             return !isForContext(context);
         }
         function isBinaryOpContext(context) {
             switch (context.contextNode.kind) {
-                case 217 /* BinaryExpression */:
+                case 219 /* BinaryExpression */:
                     return context.contextNode.operatorToken.kind !== 27 /* CommaToken */;
-                case 218 /* ConditionalExpression */:
-                case 185 /* ConditionalType */:
-                case 225 /* AsExpression */:
-                case 271 /* ExportSpecifier */:
-                case 266 /* ImportSpecifier */:
-                case 173 /* TypePredicate */:
-                case 183 /* UnionType */:
-                case 184 /* IntersectionType */:
+                case 220 /* ConditionalExpression */:
+                case 187 /* ConditionalType */:
+                case 227 /* AsExpression */:
+                case 273 /* ExportSpecifier */:
+                case 268 /* ImportSpecifier */:
+                case 175 /* TypePredicate */:
+                case 185 /* UnionType */:
+                case 186 /* IntersectionType */:
                     return true;
                 // equals in binding elements: function foo([[x, y] = [1, 2]])
-                case 199 /* BindingElement */:
+                case 201 /* BindingElement */:
                 // equals in type X = ...
                 // falls through
-                case 255 /* TypeAliasDeclaration */:
+                case 257 /* TypeAliasDeclaration */:
                 // equal in import a = module('a');
                 // falls through
-                case 261 /* ImportEqualsDeclaration */:
+                case 263 /* ImportEqualsDeclaration */:
+                // equal in export = 1
+                // falls through
+                case 269 /* ExportAssignment */:
                 // equal in let a = 0
                 // falls through
-                case 250 /* VariableDeclaration */:
+                case 252 /* VariableDeclaration */:
                 // equal in p = 0
                 // falls through
-                case 161 /* Parameter */:
-                case 292 /* EnumMember */:
-                case 164 /* PropertyDeclaration */:
-                case 163 /* PropertySignature */:
-                    return context.currentTokenSpan.kind === 62 /* EqualsToken */ || context.nextTokenSpan.kind === 62 /* EqualsToken */;
+                case 162 /* Parameter */:
+                case 294 /* EnumMember */:
+                case 165 /* PropertyDeclaration */:
+                case 164 /* PropertySignature */:
+                    return context.currentTokenSpan.kind === 63 /* EqualsToken */ || context.nextTokenSpan.kind === 63 /* EqualsToken */;
                 // "in" keyword in for (let x in []) { }
-                case 239 /* ForInStatement */:
+                case 241 /* ForInStatement */:
                 // "in" keyword in [P in keyof T]: T[P]
                 // falls through
-                case 160 /* TypeParameter */:
-                    return context.currentTokenSpan.kind === 100 /* InKeyword */ || context.nextTokenSpan.kind === 100 /* InKeyword */ || context.currentTokenSpan.kind === 62 /* EqualsToken */ || context.nextTokenSpan.kind === 62 /* EqualsToken */;
+                case 161 /* TypeParameter */:
+                    return context.currentTokenSpan.kind === 101 /* InKeyword */ || context.nextTokenSpan.kind === 101 /* InKeyword */ || context.currentTokenSpan.kind === 63 /* EqualsToken */ || context.nextTokenSpan.kind === 63 /* EqualsToken */;
                 // Technically, "of" is not a binary operator, but format it the same way as "in"
-                case 240 /* ForOfStatement */:
-                    return context.currentTokenSpan.kind === 157 /* OfKeyword */ || context.nextTokenSpan.kind === 157 /* OfKeyword */;
+                case 242 /* ForOfStatement */:
+                    return context.currentTokenSpan.kind === 158 /* OfKeyword */ || context.nextTokenSpan.kind === 158 /* OfKeyword */;
             }
             return false;
         }
@@ -136459,22 +139735,22 @@
         }
         function isTypeAnnotationContext(context) {
             var contextKind = context.contextNode.kind;
-            return contextKind === 164 /* PropertyDeclaration */ ||
-                contextKind === 163 /* PropertySignature */ ||
-                contextKind === 161 /* Parameter */ ||
-                contextKind === 250 /* VariableDeclaration */ ||
+            return contextKind === 165 /* PropertyDeclaration */ ||
+                contextKind === 164 /* PropertySignature */ ||
+                contextKind === 162 /* Parameter */ ||
+                contextKind === 252 /* VariableDeclaration */ ||
                 ts.isFunctionLikeKind(contextKind);
         }
         function isConditionalOperatorContext(context) {
-            return context.contextNode.kind === 218 /* ConditionalExpression */ ||
-                context.contextNode.kind === 185 /* ConditionalType */;
+            return context.contextNode.kind === 220 /* ConditionalExpression */ ||
+                context.contextNode.kind === 187 /* ConditionalType */;
         }
         function isSameLineTokenOrBeforeBlockContext(context) {
             return context.TokensAreOnSameLine() || isBeforeBlockContext(context);
         }
         function isBraceWrappedContext(context) {
-            return context.contextNode.kind === 197 /* ObjectBindingPattern */ ||
-                context.contextNode.kind === 191 /* MappedType */ ||
+            return context.contextNode.kind === 199 /* ObjectBindingPattern */ ||
+                context.contextNode.kind === 193 /* MappedType */ ||
                 isSingleLineBlockContext(context);
         }
         // This check is done before an open brace in a control construct, a function, or a typescript block declaration
@@ -136500,34 +139776,34 @@
                 return true;
             }
             switch (node.kind) {
-                case 231 /* Block */:
-                case 259 /* CaseBlock */:
-                case 201 /* ObjectLiteralExpression */:
-                case 258 /* ModuleBlock */:
+                case 233 /* Block */:
+                case 261 /* CaseBlock */:
+                case 203 /* ObjectLiteralExpression */:
+                case 260 /* ModuleBlock */:
                     return true;
             }
             return false;
         }
         function isFunctionDeclContext(context) {
             switch (context.contextNode.kind) {
-                case 252 /* FunctionDeclaration */:
-                case 166 /* MethodDeclaration */:
-                case 165 /* MethodSignature */:
+                case 254 /* FunctionDeclaration */:
+                case 167 /* MethodDeclaration */:
+                case 166 /* MethodSignature */:
                 // case SyntaxKind.MemberFunctionDeclaration:
                 // falls through
-                case 168 /* GetAccessor */:
-                case 169 /* SetAccessor */:
+                case 170 /* GetAccessor */:
+                case 171 /* SetAccessor */:
                 // case SyntaxKind.MethodSignature:
                 // falls through
-                case 170 /* CallSignature */:
-                case 209 /* FunctionExpression */:
-                case 167 /* Constructor */:
-                case 210 /* ArrowFunction */:
+                case 172 /* CallSignature */:
+                case 211 /* FunctionExpression */:
+                case 169 /* Constructor */:
+                case 212 /* ArrowFunction */:
                 // case SyntaxKind.ConstructorDeclaration:
                 // case SyntaxKind.SimpleArrowFunctionExpression:
                 // case SyntaxKind.ParenthesizedArrowFunctionExpression:
                 // falls through
-                case 254 /* InterfaceDeclaration */: // This one is not truly a function, but for formatting purposes, it acts just like one
+                case 256 /* InterfaceDeclaration */: // This one is not truly a function, but for formatting purposes, it acts just like one
                     return true;
             }
             return false;
@@ -136536,40 +139812,40 @@
             return !isFunctionDeclContext(context);
         }
         function isFunctionDeclarationOrFunctionExpressionContext(context) {
-            return context.contextNode.kind === 252 /* FunctionDeclaration */ || context.contextNode.kind === 209 /* FunctionExpression */;
+            return context.contextNode.kind === 254 /* FunctionDeclaration */ || context.contextNode.kind === 211 /* FunctionExpression */;
         }
         function isTypeScriptDeclWithBlockContext(context) {
             return nodeIsTypeScriptDeclWithBlockContext(context.contextNode);
         }
         function nodeIsTypeScriptDeclWithBlockContext(node) {
             switch (node.kind) {
-                case 253 /* ClassDeclaration */:
-                case 222 /* ClassExpression */:
-                case 254 /* InterfaceDeclaration */:
-                case 256 /* EnumDeclaration */:
-                case 178 /* TypeLiteral */:
-                case 257 /* ModuleDeclaration */:
-                case 268 /* ExportDeclaration */:
-                case 269 /* NamedExports */:
-                case 262 /* ImportDeclaration */:
-                case 265 /* NamedImports */:
+                case 255 /* ClassDeclaration */:
+                case 224 /* ClassExpression */:
+                case 256 /* InterfaceDeclaration */:
+                case 258 /* EnumDeclaration */:
+                case 180 /* TypeLiteral */:
+                case 259 /* ModuleDeclaration */:
+                case 270 /* ExportDeclaration */:
+                case 271 /* NamedExports */:
+                case 264 /* ImportDeclaration */:
+                case 267 /* NamedImports */:
                     return true;
             }
             return false;
         }
         function isAfterCodeBlockContext(context) {
             switch (context.currentTokenParent.kind) {
-                case 253 /* ClassDeclaration */:
-                case 257 /* ModuleDeclaration */:
-                case 256 /* EnumDeclaration */:
-                case 288 /* CatchClause */:
-                case 258 /* ModuleBlock */:
-                case 245 /* SwitchStatement */:
+                case 255 /* ClassDeclaration */:
+                case 259 /* ModuleDeclaration */:
+                case 258 /* EnumDeclaration */:
+                case 290 /* CatchClause */:
+                case 260 /* ModuleBlock */:
+                case 247 /* SwitchStatement */:
                     return true;
-                case 231 /* Block */: {
+                case 233 /* Block */: {
                     var blockParent = context.currentTokenParent.parent;
                     // In a codefix scenario, we can't rely on parents being set. So just always return true.
-                    if (!blockParent || blockParent.kind !== 210 /* ArrowFunction */ && blockParent.kind !== 209 /* FunctionExpression */) {
+                    if (!blockParent || blockParent.kind !== 212 /* ArrowFunction */ && blockParent.kind !== 211 /* FunctionExpression */) {
                         return true;
                     }
                 }
@@ -136578,32 +139854,32 @@
         }
         function isControlDeclContext(context) {
             switch (context.contextNode.kind) {
-                case 235 /* IfStatement */:
-                case 245 /* SwitchStatement */:
-                case 238 /* ForStatement */:
-                case 239 /* ForInStatement */:
-                case 240 /* ForOfStatement */:
-                case 237 /* WhileStatement */:
-                case 248 /* TryStatement */:
-                case 236 /* DoStatement */:
-                case 244 /* WithStatement */:
+                case 237 /* IfStatement */:
+                case 247 /* SwitchStatement */:
+                case 240 /* ForStatement */:
+                case 241 /* ForInStatement */:
+                case 242 /* ForOfStatement */:
+                case 239 /* WhileStatement */:
+                case 250 /* TryStatement */:
+                case 238 /* DoStatement */:
+                case 246 /* WithStatement */:
                 // TODO
                 // case SyntaxKind.ElseClause:
                 // falls through
-                case 288 /* CatchClause */:
+                case 290 /* CatchClause */:
                     return true;
                 default:
                     return false;
             }
         }
         function isObjectContext(context) {
-            return context.contextNode.kind === 201 /* ObjectLiteralExpression */;
+            return context.contextNode.kind === 203 /* ObjectLiteralExpression */;
         }
         function isFunctionCallContext(context) {
-            return context.contextNode.kind === 204 /* CallExpression */;
+            return context.contextNode.kind === 206 /* CallExpression */;
         }
         function isNewContext(context) {
-            return context.contextNode.kind === 205 /* NewExpression */;
+            return context.contextNode.kind === 207 /* NewExpression */;
         }
         function isFunctionCallOrNewContext(context) {
             return isFunctionCallContext(context) || isNewContext(context);
@@ -136618,10 +139894,10 @@
             return context.nextTokenSpan.kind !== 21 /* CloseParenToken */;
         }
         function isArrowFunctionContext(context) {
-            return context.contextNode.kind === 210 /* ArrowFunction */;
+            return context.contextNode.kind === 212 /* ArrowFunction */;
         }
         function isImportTypeContext(context) {
-            return context.contextNode.kind === 196 /* ImportType */;
+            return context.contextNode.kind === 198 /* ImportType */;
         }
         function isNonJsxSameLineTokenContext(context) {
             return context.TokensAreOnSameLine() && context.contextNode.kind !== 11 /* JsxText */;
@@ -136630,19 +139906,19 @@
             return context.contextNode.kind !== 11 /* JsxText */;
         }
         function isNonJsxElementOrFragmentContext(context) {
-            return context.contextNode.kind !== 274 /* JsxElement */ && context.contextNode.kind !== 278 /* JsxFragment */;
+            return context.contextNode.kind !== 276 /* JsxElement */ && context.contextNode.kind !== 280 /* JsxFragment */;
         }
         function isJsxExpressionContext(context) {
-            return context.contextNode.kind === 284 /* JsxExpression */ || context.contextNode.kind === 283 /* JsxSpreadAttribute */;
+            return context.contextNode.kind === 286 /* JsxExpression */ || context.contextNode.kind === 285 /* JsxSpreadAttribute */;
         }
         function isNextTokenParentJsxAttribute(context) {
-            return context.nextTokenParent.kind === 281 /* JsxAttribute */;
+            return context.nextTokenParent.kind === 283 /* JsxAttribute */;
         }
         function isJsxAttributeContext(context) {
-            return context.contextNode.kind === 281 /* JsxAttribute */;
+            return context.contextNode.kind === 283 /* JsxAttribute */;
         }
         function isJsxSelfClosingElementContext(context) {
-            return context.contextNode.kind === 275 /* JsxSelfClosingElement */;
+            return context.contextNode.kind === 277 /* JsxSelfClosingElement */;
         }
         function isNotBeforeBlockInFunctionDeclarationContext(context) {
             return !isFunctionDeclContext(context) && !isBeforeBlockContext(context);
@@ -136657,45 +139933,45 @@
             while (ts.isExpressionNode(node)) {
                 node = node.parent;
             }
-            return node.kind === 162 /* Decorator */;
+            return node.kind === 163 /* Decorator */;
         }
         function isStartOfVariableDeclarationList(context) {
-            return context.currentTokenParent.kind === 251 /* VariableDeclarationList */ &&
+            return context.currentTokenParent.kind === 253 /* VariableDeclarationList */ &&
                 context.currentTokenParent.getStart(context.sourceFile) === context.currentTokenSpan.pos;
         }
         function isNotFormatOnEnter(context) {
             return context.formattingRequestKind !== 2 /* FormatOnEnter */;
         }
         function isModuleDeclContext(context) {
-            return context.contextNode.kind === 257 /* ModuleDeclaration */;
+            return context.contextNode.kind === 259 /* ModuleDeclaration */;
         }
         function isObjectTypeContext(context) {
-            return context.contextNode.kind === 178 /* TypeLiteral */; // && context.contextNode.parent.kind !== SyntaxKind.InterfaceDeclaration;
+            return context.contextNode.kind === 180 /* TypeLiteral */; // && context.contextNode.parent.kind !== SyntaxKind.InterfaceDeclaration;
         }
         function isConstructorSignatureContext(context) {
-            return context.contextNode.kind === 171 /* ConstructSignature */;
+            return context.contextNode.kind === 173 /* ConstructSignature */;
         }
         function isTypeArgumentOrParameterOrAssertion(token, parent) {
             if (token.kind !== 29 /* LessThanToken */ && token.kind !== 31 /* GreaterThanToken */) {
                 return false;
             }
             switch (parent.kind) {
-                case 174 /* TypeReference */:
-                case 207 /* TypeAssertionExpression */:
-                case 255 /* TypeAliasDeclaration */:
-                case 253 /* ClassDeclaration */:
-                case 222 /* ClassExpression */:
-                case 254 /* InterfaceDeclaration */:
-                case 252 /* FunctionDeclaration */:
-                case 209 /* FunctionExpression */:
-                case 210 /* ArrowFunction */:
-                case 166 /* MethodDeclaration */:
-                case 165 /* MethodSignature */:
-                case 170 /* CallSignature */:
-                case 171 /* ConstructSignature */:
-                case 204 /* CallExpression */:
-                case 205 /* NewExpression */:
-                case 224 /* ExpressionWithTypeArguments */:
+                case 176 /* TypeReference */:
+                case 209 /* TypeAssertionExpression */:
+                case 257 /* TypeAliasDeclaration */:
+                case 255 /* ClassDeclaration */:
+                case 224 /* ClassExpression */:
+                case 256 /* InterfaceDeclaration */:
+                case 254 /* FunctionDeclaration */:
+                case 211 /* FunctionExpression */:
+                case 212 /* ArrowFunction */:
+                case 167 /* MethodDeclaration */:
+                case 166 /* MethodSignature */:
+                case 172 /* CallSignature */:
+                case 173 /* ConstructSignature */:
+                case 206 /* CallExpression */:
+                case 207 /* NewExpression */:
+                case 226 /* ExpressionWithTypeArguments */:
                     return true;
                 default:
                     return false;
@@ -136706,28 +139982,28 @@
                 isTypeArgumentOrParameterOrAssertion(context.nextTokenSpan, context.nextTokenParent);
         }
         function isTypeAssertionContext(context) {
-            return context.contextNode.kind === 207 /* TypeAssertionExpression */;
+            return context.contextNode.kind === 209 /* TypeAssertionExpression */;
         }
         function isVoidOpContext(context) {
-            return context.currentTokenSpan.kind === 113 /* VoidKeyword */ && context.currentTokenParent.kind === 213 /* VoidExpression */;
+            return context.currentTokenSpan.kind === 114 /* VoidKeyword */ && context.currentTokenParent.kind === 215 /* VoidExpression */;
         }
         function isYieldOrYieldStarWithOperand(context) {
-            return context.contextNode.kind === 220 /* YieldExpression */ && context.contextNode.expression !== undefined;
+            return context.contextNode.kind === 222 /* YieldExpression */ && context.contextNode.expression !== undefined;
         }
         function isNonNullAssertionContext(context) {
-            return context.contextNode.kind === 226 /* NonNullExpression */;
+            return context.contextNode.kind === 228 /* NonNullExpression */;
         }
         function isNotStatementConditionContext(context) {
             return !isStatementConditionContext(context);
         }
         function isStatementConditionContext(context) {
             switch (context.contextNode.kind) {
-                case 235 /* IfStatement */:
-                case 238 /* ForStatement */:
-                case 239 /* ForInStatement */:
-                case 240 /* ForOfStatement */:
-                case 236 /* DoStatement */:
-                case 237 /* WhileStatement */:
+                case 237 /* IfStatement */:
+                case 240 /* ForStatement */:
+                case 241 /* ForInStatement */:
+                case 242 /* ForOfStatement */:
+                case 238 /* DoStatement */:
+                case 239 /* WhileStatement */:
                     return true;
                 default:
                     return false;
@@ -136752,12 +140028,12 @@
                 return nextTokenKind === 19 /* CloseBraceToken */
                     || nextTokenKind === 1 /* EndOfFileToken */;
             }
-            if (nextTokenKind === 230 /* SemicolonClassElement */ ||
+            if (nextTokenKind === 232 /* SemicolonClassElement */ ||
                 nextTokenKind === 26 /* SemicolonToken */) {
                 return false;
             }
-            if (context.contextNode.kind === 254 /* InterfaceDeclaration */ ||
-                context.contextNode.kind === 255 /* TypeAliasDeclaration */) {
+            if (context.contextNode.kind === 256 /* InterfaceDeclaration */ ||
+                context.contextNode.kind === 257 /* TypeAliasDeclaration */) {
                 // Can’t remove semicolon after `foo`; it would parse as a method declaration:
                 //
                 // interface I {
@@ -136771,9 +140047,9 @@
             if (ts.isPropertyDeclaration(context.currentTokenParent)) {
                 return !context.currentTokenParent.initializer;
             }
-            return context.currentTokenParent.kind !== 238 /* ForStatement */
-                && context.currentTokenParent.kind !== 232 /* EmptyStatement */
-                && context.currentTokenParent.kind !== 230 /* SemicolonClassElement */
+            return context.currentTokenParent.kind !== 240 /* ForStatement */
+                && context.currentTokenParent.kind !== 234 /* EmptyStatement */
+                && context.currentTokenParent.kind !== 232 /* SemicolonClassElement */
                 && nextTokenKind !== 22 /* OpenBracketToken */
                 && nextTokenKind !== 20 /* OpenParenToken */
                 && nextTokenKind !== 39 /* PlusToken */
@@ -136781,7 +140057,7 @@
                 && nextTokenKind !== 43 /* SlashToken */
                 && nextTokenKind !== 13 /* RegularExpressionLiteral */
                 && nextTokenKind !== 27 /* CommaToken */
-                && nextTokenKind !== 219 /* TemplateExpression */
+                && nextTokenKind !== 221 /* TemplateExpression */
                 && nextTokenKind !== 15 /* TemplateHead */
                 && nextTokenKind !== 14 /* NoSubstitutionTemplateLiteral */
                 && nextTokenKind !== 24 /* DotToken */;
@@ -136872,12 +140148,12 @@
             return map;
         }
         function getRuleBucketIndex(row, column) {
-            ts.Debug.assert(row <= 157 /* LastKeyword */ && column <= 157 /* LastKeyword */, "Must compute formatting context from tokens");
+            ts.Debug.assert(row <= 158 /* LastKeyword */ && column <= 158 /* LastKeyword */, "Must compute formatting context from tokens");
             return (row * mapRowLength) + column;
         }
         var maskBitSize = 5;
         var mask = 31; // MaskBitSize bits
-        var mapRowLength = 157 /* LastToken */ + 1;
+        var mapRowLength = 158 /* LastToken */ + 1;
         var RulesPosition;
         (function (RulesPosition) {
             RulesPosition[RulesPosition["StopRulesSpecific"] = 0] = "StopRulesSpecific";
@@ -137065,17 +140341,17 @@
         // i.e. parent is class declaration with the list of members and node is one of members.
         function isListElement(parent, node) {
             switch (parent.kind) {
-                case 253 /* ClassDeclaration */:
-                case 254 /* InterfaceDeclaration */:
+                case 255 /* ClassDeclaration */:
+                case 256 /* InterfaceDeclaration */:
                     return ts.rangeContainsRange(parent.members, node);
-                case 257 /* ModuleDeclaration */:
+                case 259 /* ModuleDeclaration */:
                     var body = parent.body;
-                    return !!body && body.kind === 258 /* ModuleBlock */ && ts.rangeContainsRange(body.statements, node);
-                case 298 /* SourceFile */:
-                case 231 /* Block */:
-                case 258 /* ModuleBlock */:
+                    return !!body && body.kind === 260 /* ModuleBlock */ && ts.rangeContainsRange(body.statements, node);
+                case 300 /* SourceFile */:
+                case 233 /* Block */:
+                case 260 /* ModuleBlock */:
                     return ts.rangeContainsRange(parent.statements, node);
-                case 288 /* CatchClause */:
+                case 290 /* CatchClause */:
                     return ts.rangeContainsRange(parent.block.statements, node);
             }
             return false;
@@ -137304,19 +140580,19 @@
                     return node.modifiers[0].kind;
                 }
                 switch (node.kind) {
-                    case 253 /* ClassDeclaration */: return 83 /* ClassKeyword */;
-                    case 254 /* InterfaceDeclaration */: return 117 /* InterfaceKeyword */;
-                    case 252 /* FunctionDeclaration */: return 97 /* FunctionKeyword */;
-                    case 256 /* EnumDeclaration */: return 256 /* EnumDeclaration */;
-                    case 168 /* GetAccessor */: return 134 /* GetKeyword */;
-                    case 169 /* SetAccessor */: return 146 /* SetKeyword */;
-                    case 166 /* MethodDeclaration */:
+                    case 255 /* ClassDeclaration */: return 84 /* ClassKeyword */;
+                    case 256 /* InterfaceDeclaration */: return 118 /* InterfaceKeyword */;
+                    case 254 /* FunctionDeclaration */: return 98 /* FunctionKeyword */;
+                    case 258 /* EnumDeclaration */: return 258 /* EnumDeclaration */;
+                    case 170 /* GetAccessor */: return 135 /* GetKeyword */;
+                    case 171 /* SetAccessor */: return 147 /* SetKeyword */;
+                    case 167 /* MethodDeclaration */:
                         if (node.asteriskToken) {
                             return 41 /* AsteriskToken */;
                         }
                     // falls through
-                    case 164 /* PropertyDeclaration */:
-                    case 161 /* Parameter */:
+                    case 165 /* PropertyDeclaration */:
+                    case 162 /* Parameter */:
                         var name = ts.getNameOfDeclaration(node);
                         if (name) {
                             return name.kind;
@@ -137366,23 +140642,23 @@
                         case 18 /* OpenBraceToken */:
                         case 19 /* CloseBraceToken */:
                         case 21 /* CloseParenToken */:
-                        case 90 /* ElseKeyword */:
-                        case 114 /* WhileKeyword */:
+                        case 91 /* ElseKeyword */:
+                        case 115 /* WhileKeyword */:
                         case 59 /* AtToken */:
                             return false;
                         case 43 /* SlashToken */:
                         case 31 /* GreaterThanToken */:
                             switch (container.kind) {
-                                case 276 /* JsxOpeningElement */:
-                                case 277 /* JsxClosingElement */:
-                                case 275 /* JsxSelfClosingElement */:
-                                case 224 /* ExpressionWithTypeArguments */:
+                                case 278 /* JsxOpeningElement */:
+                                case 279 /* JsxClosingElement */:
+                                case 277 /* JsxSelfClosingElement */:
+                                case 226 /* ExpressionWithTypeArguments */:
                                     return false;
                             }
                             break;
                         case 22 /* OpenBracketToken */:
                         case 23 /* CloseBracketToken */:
-                            if (container.kind !== 191 /* MappedType */) {
+                            if (container.kind !== 193 /* MappedType */) {
                                 return false;
                             }
                             break;
@@ -137485,11 +140761,11 @@
                             return inheritedIndentation;
                         }
                     }
-                    var effectiveParentStartLine = child.kind === 162 /* Decorator */ ? childStartLine : undecoratedParentStartLine;
+                    var effectiveParentStartLine = child.kind === 163 /* Decorator */ ? childStartLine : undecoratedParentStartLine;
                     var childIndentation = computeIndentation(child, childStartLine, childIndentationAmount, node, parentDynamicIndentation, effectiveParentStartLine);
                     processNode(child, childContextNode, childStartLine, undecoratedChildStartLine, childIndentation.indentation, childIndentation.delta);
                     childContextNode = node;
-                    if (isFirstListItem && parent.kind === 200 /* ArrayLiteralExpression */ && inheritedIndentation === -1 /* Unknown */) {
+                    if (isFirstListItem && parent.kind === 202 /* ArrayLiteralExpression */ && inheritedIndentation === -1 /* Unknown */) {
                         inheritedIndentation = childIndentation.indentation;
                     }
                     return inheritedIndentation;
@@ -137922,12 +141198,12 @@
         formatting.getRangeOfEnclosingComment = getRangeOfEnclosingComment;
         function getOpenTokenForList(node, list) {
             switch (node.kind) {
-                case 167 /* Constructor */:
-                case 252 /* FunctionDeclaration */:
-                case 209 /* FunctionExpression */:
-                case 166 /* MethodDeclaration */:
-                case 165 /* MethodSignature */:
-                case 210 /* ArrowFunction */:
+                case 169 /* Constructor */:
+                case 254 /* FunctionDeclaration */:
+                case 211 /* FunctionExpression */:
+                case 167 /* MethodDeclaration */:
+                case 166 /* MethodSignature */:
+                case 212 /* ArrowFunction */:
                     if (node.typeParameters === list) {
                         return 29 /* LessThanToken */;
                     }
@@ -137935,8 +141211,8 @@
                         return 20 /* OpenParenToken */;
                     }
                     break;
-                case 204 /* CallExpression */:
-                case 205 /* NewExpression */:
+                case 206 /* CallExpression */:
+                case 207 /* NewExpression */:
                     if (node.typeArguments === list) {
                         return 29 /* LessThanToken */;
                     }
@@ -137944,12 +141220,12 @@
                         return 20 /* OpenParenToken */;
                     }
                     break;
-                case 174 /* TypeReference */:
+                case 176 /* TypeReference */:
                     if (node.typeArguments === list) {
                         return 29 /* LessThanToken */;
                     }
                     break;
-                case 178 /* TypeLiteral */:
+                case 180 /* TypeLiteral */:
                     return 18 /* OpenBraceToken */;
             }
             return 0 /* Unknown */;
@@ -138067,7 +141343,7 @@
                 if (options.indentStyle === ts.IndentStyle.Block) {
                     return getBlockIndent(sourceFile, position, options);
                 }
-                if (precedingToken.kind === 27 /* CommaToken */ && precedingToken.parent.kind !== 217 /* BinaryExpression */) {
+                if (precedingToken.kind === 27 /* CommaToken */ && precedingToken.parent.kind !== 219 /* BinaryExpression */) {
                     // previous token is comma that separates items in list - find the previous item and try to derive indentation from it
                     var actualIndentation = getActualIndentationForListItemBeforeComma(precedingToken, sourceFile, options);
                     if (actualIndentation !== -1 /* Unknown */) {
@@ -138240,7 +141516,7 @@
                 // - parent is SourceFile - by default immediate children of SourceFile are not indented except when user indents them manually
                 // - parent and child are not on the same line
                 var useActualIndentation = (ts.isDeclaration(current) || ts.isStatementButNotDeclaration(current)) &&
-                    (parent.kind === 298 /* SourceFile */ || !parentAndChildShareLine);
+                    (parent.kind === 300 /* SourceFile */ || !parentAndChildShareLine);
                 if (!useActualIndentation) {
                     return -1 /* Unknown */;
                 }
@@ -138288,8 +141564,8 @@
             }
             SmartIndenter.isArgumentAndStartLineOverlapsExpressionBeingCalled = isArgumentAndStartLineOverlapsExpressionBeingCalled;
             function childStartsOnTheSameLineWithElseInIfStatement(parent, child, childStartLine, sourceFile) {
-                if (parent.kind === 235 /* IfStatement */ && parent.elseStatement === child) {
-                    var elseKeyword = ts.findChildOfKind(parent, 90 /* ElseKeyword */, sourceFile);
+                if (parent.kind === 237 /* IfStatement */ && parent.elseStatement === child) {
+                    var elseKeyword = ts.findChildOfKind(parent, 91 /* ElseKeyword */, sourceFile);
                     ts.Debug.assert(elseKeyword !== undefined);
                     var elseKeywordStartLine = getStartLineAndCharacterForNode(elseKeyword, sourceFile).line;
                     return elseKeywordStartLine === childStartLine;
@@ -138369,40 +141645,40 @@
             }
             function getListByRange(start, end, node, sourceFile) {
                 switch (node.kind) {
-                    case 174 /* TypeReference */:
+                    case 176 /* TypeReference */:
                         return getList(node.typeArguments);
-                    case 201 /* ObjectLiteralExpression */:
+                    case 203 /* ObjectLiteralExpression */:
                         return getList(node.properties);
-                    case 200 /* ArrayLiteralExpression */:
+                    case 202 /* ArrayLiteralExpression */:
                         return getList(node.elements);
-                    case 178 /* TypeLiteral */:
+                    case 180 /* TypeLiteral */:
                         return getList(node.members);
-                    case 252 /* FunctionDeclaration */:
-                    case 209 /* FunctionExpression */:
-                    case 210 /* ArrowFunction */:
-                    case 166 /* MethodDeclaration */:
-                    case 165 /* MethodSignature */:
-                    case 170 /* CallSignature */:
-                    case 167 /* Constructor */:
-                    case 176 /* ConstructorType */:
-                    case 171 /* ConstructSignature */:
+                    case 254 /* FunctionDeclaration */:
+                    case 211 /* FunctionExpression */:
+                    case 212 /* ArrowFunction */:
+                    case 167 /* MethodDeclaration */:
+                    case 166 /* MethodSignature */:
+                    case 172 /* CallSignature */:
+                    case 169 /* Constructor */:
+                    case 178 /* ConstructorType */:
+                    case 173 /* ConstructSignature */:
                         return getList(node.typeParameters) || getList(node.parameters);
-                    case 253 /* ClassDeclaration */:
-                    case 222 /* ClassExpression */:
-                    case 254 /* InterfaceDeclaration */:
-                    case 255 /* TypeAliasDeclaration */:
-                    case 334 /* JSDocTemplateTag */:
+                    case 255 /* ClassDeclaration */:
+                    case 224 /* ClassExpression */:
+                    case 256 /* InterfaceDeclaration */:
+                    case 257 /* TypeAliasDeclaration */:
+                    case 339 /* JSDocTemplateTag */:
                         return getList(node.typeParameters);
-                    case 205 /* NewExpression */:
-                    case 204 /* CallExpression */:
+                    case 207 /* NewExpression */:
+                    case 206 /* CallExpression */:
                         return getList(node.typeArguments) || getList(node.arguments);
-                    case 251 /* VariableDeclarationList */:
+                    case 253 /* VariableDeclarationList */:
                         return getList(node.declarations);
-                    case 265 /* NamedImports */:
-                    case 269 /* NamedExports */:
+                    case 267 /* NamedImports */:
+                    case 271 /* NamedExports */:
                         return getList(node.elements);
-                    case 197 /* ObjectBindingPattern */:
-                    case 198 /* ArrayBindingPattern */:
+                    case 199 /* ObjectBindingPattern */:
+                    case 200 /* ArrayBindingPattern */:
                         return getList(node.elements);
                 }
                 function getList(list) {
@@ -138425,7 +141701,7 @@
                 return findColumnForFirstNonWhitespaceCharacterInLine(sourceFile.getLineAndCharacterOfPosition(list.pos), sourceFile, options);
             }
             function getActualIndentationForListItem(node, sourceFile, options, listIndentsChild) {
-                if (node.parent && node.parent.kind === 251 /* VariableDeclarationList */) {
+                if (node.parent && node.parent.kind === 253 /* VariableDeclarationList */) {
                     // VariableDeclarationList has no wrapping tokens
                     return -1 /* Unknown */;
                 }
@@ -138498,91 +141774,91 @@
             function nodeWillIndentChild(settings, parent, child, sourceFile, indentByDefault) {
                 var childKind = child ? child.kind : 0 /* Unknown */;
                 switch (parent.kind) {
-                    case 234 /* ExpressionStatement */:
-                    case 253 /* ClassDeclaration */:
-                    case 222 /* ClassExpression */:
-                    case 254 /* InterfaceDeclaration */:
-                    case 256 /* EnumDeclaration */:
-                    case 255 /* TypeAliasDeclaration */:
-                    case 200 /* ArrayLiteralExpression */:
-                    case 231 /* Block */:
-                    case 258 /* ModuleBlock */:
-                    case 201 /* ObjectLiteralExpression */:
-                    case 178 /* TypeLiteral */:
-                    case 191 /* MappedType */:
-                    case 180 /* TupleType */:
-                    case 259 /* CaseBlock */:
-                    case 286 /* DefaultClause */:
-                    case 285 /* CaseClause */:
-                    case 208 /* ParenthesizedExpression */:
-                    case 202 /* PropertyAccessExpression */:
-                    case 204 /* CallExpression */:
-                    case 205 /* NewExpression */:
-                    case 233 /* VariableStatement */:
-                    case 267 /* ExportAssignment */:
-                    case 243 /* ReturnStatement */:
-                    case 218 /* ConditionalExpression */:
-                    case 198 /* ArrayBindingPattern */:
-                    case 197 /* ObjectBindingPattern */:
-                    case 276 /* JsxOpeningElement */:
-                    case 279 /* JsxOpeningFragment */:
-                    case 275 /* JsxSelfClosingElement */:
-                    case 284 /* JsxExpression */:
-                    case 165 /* MethodSignature */:
-                    case 170 /* CallSignature */:
-                    case 171 /* ConstructSignature */:
-                    case 161 /* Parameter */:
-                    case 175 /* FunctionType */:
-                    case 176 /* ConstructorType */:
-                    case 187 /* ParenthesizedType */:
-                    case 206 /* TaggedTemplateExpression */:
-                    case 214 /* AwaitExpression */:
-                    case 269 /* NamedExports */:
-                    case 265 /* NamedImports */:
-                    case 271 /* ExportSpecifier */:
-                    case 266 /* ImportSpecifier */:
-                    case 164 /* PropertyDeclaration */:
+                    case 236 /* ExpressionStatement */:
+                    case 255 /* ClassDeclaration */:
+                    case 224 /* ClassExpression */:
+                    case 256 /* InterfaceDeclaration */:
+                    case 258 /* EnumDeclaration */:
+                    case 257 /* TypeAliasDeclaration */:
+                    case 202 /* ArrayLiteralExpression */:
+                    case 233 /* Block */:
+                    case 260 /* ModuleBlock */:
+                    case 203 /* ObjectLiteralExpression */:
+                    case 180 /* TypeLiteral */:
+                    case 193 /* MappedType */:
+                    case 182 /* TupleType */:
+                    case 261 /* CaseBlock */:
+                    case 288 /* DefaultClause */:
+                    case 287 /* CaseClause */:
+                    case 210 /* ParenthesizedExpression */:
+                    case 204 /* PropertyAccessExpression */:
+                    case 206 /* CallExpression */:
+                    case 207 /* NewExpression */:
+                    case 235 /* VariableStatement */:
+                    case 269 /* ExportAssignment */:
+                    case 245 /* ReturnStatement */:
+                    case 220 /* ConditionalExpression */:
+                    case 200 /* ArrayBindingPattern */:
+                    case 199 /* ObjectBindingPattern */:
+                    case 278 /* JsxOpeningElement */:
+                    case 281 /* JsxOpeningFragment */:
+                    case 277 /* JsxSelfClosingElement */:
+                    case 286 /* JsxExpression */:
+                    case 166 /* MethodSignature */:
+                    case 172 /* CallSignature */:
+                    case 173 /* ConstructSignature */:
+                    case 162 /* Parameter */:
+                    case 177 /* FunctionType */:
+                    case 178 /* ConstructorType */:
+                    case 189 /* ParenthesizedType */:
+                    case 208 /* TaggedTemplateExpression */:
+                    case 216 /* AwaitExpression */:
+                    case 271 /* NamedExports */:
+                    case 267 /* NamedImports */:
+                    case 273 /* ExportSpecifier */:
+                    case 268 /* ImportSpecifier */:
+                    case 165 /* PropertyDeclaration */:
                         return true;
-                    case 250 /* VariableDeclaration */:
-                    case 289 /* PropertyAssignment */:
-                    case 217 /* BinaryExpression */:
-                        if (!settings.indentMultiLineObjectLiteralBeginningOnBlankLine && sourceFile && childKind === 201 /* ObjectLiteralExpression */) { // TODO: GH#18217
+                    case 252 /* VariableDeclaration */:
+                    case 291 /* PropertyAssignment */:
+                    case 219 /* BinaryExpression */:
+                        if (!settings.indentMultiLineObjectLiteralBeginningOnBlankLine && sourceFile && childKind === 203 /* ObjectLiteralExpression */) { // TODO: GH#18217
                             return rangeIsOnOneLine(sourceFile, child);
                         }
-                        if (parent.kind !== 217 /* BinaryExpression */) {
+                        if (parent.kind !== 219 /* BinaryExpression */) {
                             return true;
                         }
                         break;
-                    case 236 /* DoStatement */:
-                    case 237 /* WhileStatement */:
-                    case 239 /* ForInStatement */:
-                    case 240 /* ForOfStatement */:
-                    case 238 /* ForStatement */:
-                    case 235 /* IfStatement */:
-                    case 252 /* FunctionDeclaration */:
-                    case 209 /* FunctionExpression */:
-                    case 166 /* MethodDeclaration */:
-                    case 167 /* Constructor */:
-                    case 168 /* GetAccessor */:
-                    case 169 /* SetAccessor */:
-                        return childKind !== 231 /* Block */;
-                    case 210 /* ArrowFunction */:
-                        if (sourceFile && childKind === 208 /* ParenthesizedExpression */) {
+                    case 238 /* DoStatement */:
+                    case 239 /* WhileStatement */:
+                    case 241 /* ForInStatement */:
+                    case 242 /* ForOfStatement */:
+                    case 240 /* ForStatement */:
+                    case 237 /* IfStatement */:
+                    case 254 /* FunctionDeclaration */:
+                    case 211 /* FunctionExpression */:
+                    case 167 /* MethodDeclaration */:
+                    case 169 /* Constructor */:
+                    case 170 /* GetAccessor */:
+                    case 171 /* SetAccessor */:
+                        return childKind !== 233 /* Block */;
+                    case 212 /* ArrowFunction */:
+                        if (sourceFile && childKind === 210 /* ParenthesizedExpression */) {
                             return rangeIsOnOneLine(sourceFile, child);
                         }
-                        return childKind !== 231 /* Block */;
-                    case 268 /* ExportDeclaration */:
-                        return childKind !== 269 /* NamedExports */;
-                    case 262 /* ImportDeclaration */:
-                        return childKind !== 263 /* ImportClause */ ||
-                            (!!child.namedBindings && child.namedBindings.kind !== 265 /* NamedImports */);
-                    case 274 /* JsxElement */:
-                        return childKind !== 277 /* JsxClosingElement */;
-                    case 278 /* JsxFragment */:
-                        return childKind !== 280 /* JsxClosingFragment */;
-                    case 184 /* IntersectionType */:
-                    case 183 /* UnionType */:
-                        if (childKind === 178 /* TypeLiteral */ || childKind === 180 /* TupleType */) {
+                        return childKind !== 233 /* Block */;
+                    case 270 /* ExportDeclaration */:
+                        return childKind !== 271 /* NamedExports */;
+                    case 264 /* ImportDeclaration */:
+                        return childKind !== 265 /* ImportClause */ ||
+                            (!!child.namedBindings && child.namedBindings.kind !== 267 /* NamedImports */);
+                    case 276 /* JsxElement */:
+                        return childKind !== 279 /* JsxClosingElement */;
+                    case 280 /* JsxFragment */:
+                        return childKind !== 282 /* JsxClosingFragment */;
+                    case 186 /* IntersectionType */:
+                    case 185 /* UnionType */:
+                        if (childKind === 180 /* TypeLiteral */ || childKind === 182 /* TupleType */) {
                             return false;
                         }
                         break;
@@ -138593,11 +141869,11 @@
             SmartIndenter.nodeWillIndentChild = nodeWillIndentChild;
             function isControlFlowEndingStatement(kind, parent) {
                 switch (kind) {
-                    case 243 /* ReturnStatement */:
-                    case 247 /* ThrowStatement */:
-                    case 241 /* ContinueStatement */:
-                    case 242 /* BreakStatement */:
-                        return parent.kind !== 231 /* Block */;
+                    case 245 /* ReturnStatement */:
+                    case 249 /* ThrowStatement */:
+                    case 243 /* ContinueStatement */:
+                    case 244 /* BreakStatement */:
+                        return parent.kind !== 233 /* Block */;
                     default:
                         return false;
                 }
@@ -138713,7 +141989,9 @@
                 return node.getStart(sourceFile);
             }
             if (leadingTriviaOption === LeadingTriviaOption.StartLine) {
-                return ts.getLineStartPositionForPosition(node.getStart(sourceFile), sourceFile);
+                var startPos = node.getStart(sourceFile);
+                var pos = ts.getLineStartPositionForPosition(startPos, sourceFile);
+                return ts.rangeContainsPosition(node, pos) ? pos : startPos;
             }
             if (leadingTriviaOption === LeadingTriviaOption.JSDoc) {
                 var JSDocComments = ts.getJSDocCommentRanges(node, sourceFile.text);
@@ -138812,7 +142090,7 @@
          * Checks if 'candidate' argument is a legal separator in the list that contains 'node' as an element
          */
         function isSeparator(node, candidate) {
-            return !!candidate && !!node.parent && (candidate.kind === 27 /* CommaToken */ || (candidate.kind === 26 /* SemicolonToken */ && node.parent.kind === 201 /* ObjectLiteralExpression */));
+            return !!candidate && !!node.parent && (candidate.kind === 27 /* CommaToken */ || (candidate.kind === 26 /* SemicolonToken */ && node.parent.kind === 203 /* ObjectLiteralExpression */));
         }
         function isThisTypeAnnotatable(containingFunction) {
             return ts.isFunctionExpression(containingFunction) || ts.isFunctionDeclaration(containingFunction);
@@ -139019,7 +142297,7 @@
                     }
                 }
                 else {
-                    endNode = (_a = (node.kind === 250 /* VariableDeclaration */ ? node.exclamationToken : node.questionToken)) !== null && _a !== void 0 ? _a : node.name;
+                    endNode = (_a = (node.kind === 252 /* VariableDeclaration */ ? node.exclamationToken : node.questionToken)) !== null && _a !== void 0 ? _a : node.name;
                 }
                 this.insertNodeAt(sourceFile, endNode.end, type, { prefix: ": " });
                 return true;
@@ -139055,7 +142333,7 @@
             ChangeTracker.prototype.insertNodeAtConstructorStart = function (sourceFile, ctr, newStatement) {
                 var firstStatement = ts.firstOrUndefined(ctr.body.statements);
                 if (!firstStatement || !ctr.body.multiLine) {
-                    this.replaceConstructorBody(sourceFile, ctr, __spreadArray([newStatement], ctr.body.statements));
+                    this.replaceConstructorBody(sourceFile, ctr, __spreadArray([newStatement], ctr.body.statements, true));
                 }
                 else {
                     this.insertNodeBefore(sourceFile, firstStatement, newStatement);
@@ -139064,7 +142342,7 @@
             ChangeTracker.prototype.insertNodeAtConstructorStartAfterSuperCall = function (sourceFile, ctr, newStatement) {
                 var superCallStatement = ts.find(ctr.body.statements, function (stmt) { return ts.isExpressionStatement(stmt) && ts.isSuperCall(stmt.expression); });
                 if (!superCallStatement || !ctr.body.multiLine) {
-                    this.replaceConstructorBody(sourceFile, ctr, __spreadArray(__spreadArray([], ctr.body.statements), [newStatement]));
+                    this.replaceConstructorBody(sourceFile, ctr, __spreadArray(__spreadArray([], ctr.body.statements, true), [newStatement], false));
                 }
                 else {
                     this.insertNodeAfter(sourceFile, superCallStatement, newStatement);
@@ -139073,7 +142351,7 @@
             ChangeTracker.prototype.insertNodeAtConstructorEnd = function (sourceFile, ctr, newStatement) {
                 var lastStatement = ts.lastOrUndefined(ctr.body.statements);
                 if (!lastStatement || !ctr.body.multiLine) {
-                    this.replaceConstructorBody(sourceFile, ctr, __spreadArray(__spreadArray([], ctr.body.statements), [newStatement]));
+                    this.replaceConstructorBody(sourceFile, ctr, __spreadArray(__spreadArray([], ctr.body.statements, true), [newStatement], false));
                 }
                 else {
                     this.insertNodeAfter(sourceFile, lastStatement, newStatement);
@@ -139185,18 +142463,18 @@
             };
             ChangeTracker.prototype.getInsertNodeAfterOptionsWorker = function (node) {
                 switch (node.kind) {
-                    case 253 /* ClassDeclaration */:
-                    case 257 /* ModuleDeclaration */:
+                    case 255 /* ClassDeclaration */:
+                    case 259 /* ModuleDeclaration */:
                         return { prefix: this.newLineCharacter, suffix: this.newLineCharacter };
-                    case 250 /* VariableDeclaration */:
+                    case 252 /* VariableDeclaration */:
                     case 10 /* StringLiteral */:
-                    case 78 /* Identifier */:
+                    case 79 /* Identifier */:
                         return { prefix: ", " };
-                    case 289 /* PropertyAssignment */:
+                    case 291 /* PropertyAssignment */:
                         return { suffix: "," + this.newLineCharacter };
-                    case 92 /* ExportKeyword */:
+                    case 93 /* ExportKeyword */:
                         return { prefix: " " };
-                    case 161 /* Parameter */:
+                    case 162 /* Parameter */:
                         return {};
                     default:
                         ts.Debug.assert(ts.isStatement(node) || ts.isClassOrTypeElement(node)); // Else we haven't handled this kind of node yet -- add it
@@ -139205,12 +142483,12 @@
             };
             ChangeTracker.prototype.insertName = function (sourceFile, node, name) {
                 ts.Debug.assert(!node.name);
-                if (node.kind === 210 /* ArrowFunction */) {
+                if (node.kind === 212 /* ArrowFunction */) {
                     var arrow = ts.findChildOfKind(node, 38 /* EqualsGreaterThanToken */, sourceFile);
                     var lparen = ts.findChildOfKind(node, 20 /* OpenParenToken */, sourceFile);
                     if (lparen) {
                         // `() => {}` --> `function f() {}`
-                        this.insertNodesAt(sourceFile, lparen.getStart(sourceFile), [ts.factory.createToken(97 /* FunctionKeyword */), ts.factory.createIdentifier(name)], { joiner: " " });
+                        this.insertNodesAt(sourceFile, lparen.getStart(sourceFile), [ts.factory.createToken(98 /* FunctionKeyword */), ts.factory.createIdentifier(name)], { joiner: " " });
                         deleteNode(this, sourceFile, arrow);
                     }
                     else {
@@ -139219,14 +142497,14 @@
                         // Replacing full range of arrow to get rid of the leading space -- replace ` =>` with `)`
                         this.replaceRange(sourceFile, arrow, ts.factory.createToken(21 /* CloseParenToken */));
                     }
-                    if (node.body.kind !== 231 /* Block */) {
+                    if (node.body.kind !== 233 /* Block */) {
                         // `() => 0` => `function f() { return 0; }`
-                        this.insertNodesAt(sourceFile, node.body.getStart(sourceFile), [ts.factory.createToken(18 /* OpenBraceToken */), ts.factory.createToken(104 /* ReturnKeyword */)], { joiner: " ", suffix: " " });
+                        this.insertNodesAt(sourceFile, node.body.getStart(sourceFile), [ts.factory.createToken(18 /* OpenBraceToken */), ts.factory.createToken(105 /* ReturnKeyword */)], { joiner: " ", suffix: " " });
                         this.insertNodesAt(sourceFile, node.body.end, [ts.factory.createToken(26 /* SemicolonToken */), ts.factory.createToken(19 /* CloseBraceToken */)], { joiner: " " });
                     }
                 }
                 else {
-                    var pos = ts.findChildOfKind(node, node.kind === 209 /* FunctionExpression */ ? 97 /* FunctionKeyword */ : 83 /* ClassKeyword */, sourceFile).end;
+                    var pos = ts.findChildOfKind(node, node.kind === 211 /* FunctionExpression */ ? 98 /* FunctionKeyword */ : 84 /* ClassKeyword */, sourceFile).end;
                     this.insertNodeAt(sourceFile, pos, ts.factory.createIdentifier(name), { prefix: " " });
                 }
             };
@@ -139453,16 +142731,17 @@
             }
             changesToText.newFileChangesWorker = newFileChangesWorker;
             function computeNewText(change, sourceFile, newLineCharacter, formatContext, validate) {
+                var _a;
                 if (change.kind === ChangeKind.Remove) {
                     return "";
                 }
                 if (change.kind === ChangeKind.Text) {
                     return change.text;
                 }
-                var _a = change.options, options = _a === void 0 ? {} : _a, pos = change.range.pos;
+                var _b = change.options, options = _b === void 0 ? {} : _b, pos = change.range.pos;
                 var format = function (n) { return getFormattedTextOfNode(n, sourceFile, pos, options, newLineCharacter, formatContext, validate); };
                 var text = change.kind === ChangeKind.ReplaceWithMultipleNodes
-                    ? change.nodes.map(function (n) { return ts.removeSuffix(format(n), newLineCharacter); }).join(change.options.joiner || newLineCharacter) // TODO: GH#18217
+                    ? change.nodes.map(function (n) { return ts.removeSuffix(format(n), newLineCharacter); }).join(((_a = change.options) === null || _a === void 0 ? void 0 : _a.joiner) || newLineCharacter)
                     : format(change.node);
                 // strip initial indentation (spaces or tabs) if text will be inserted in the middle of the line
                 var noIndent = (options.preserveLeadingWhitespace || options.indentation !== undefined || ts.getLineStartPositionForPosition(pos, sourceFile) === pos) ? text : text.replace(/^\s+/, "");
@@ -139519,7 +142798,7 @@
             return ts.skipTrivia(s, 0) === s.length;
         }
         function assignPositionsToNode(node) {
-            var visited = ts.visitEachChild(node, assignPositionsToNode, ts.nullTransformationContext, assignPositionsToNodeArray, assignPositionsToNode); // TODO: GH#18217
+            var visited = ts.visitEachChild(node, assignPositionsToNode, ts.nullTransformationContext, assignPositionsToNodeArray, assignPositionsToNode);
             // create proxy node for non synthesized nodes
             var newNode = ts.nodeIsSynthesized(visited) ? visited : Object.create(visited);
             ts.setTextRangePosEnd(newNode, getPos(node), getEnd(node));
@@ -139778,14 +143057,14 @@
         }
         textChanges_3.isValidLocationToAddComment = isValidLocationToAddComment;
         function needSemicolonBetween(a, b) {
-            return (ts.isPropertySignature(a) || ts.isPropertyDeclaration(a)) && ts.isClassOrTypeElement(b) && b.name.kind === 159 /* ComputedPropertyName */
+            return (ts.isPropertySignature(a) || ts.isPropertyDeclaration(a)) && ts.isClassOrTypeElement(b) && b.name.kind === 160 /* ComputedPropertyName */
                 || ts.isStatementButNotDeclaration(a) && ts.isStatementButNotDeclaration(b); // TODO: only if b would start with a `(` or `[`
         }
         var deleteDeclaration;
         (function (deleteDeclaration_1) {
             function deleteDeclaration(changes, deletedNodesInLists, sourceFile, node) {
                 switch (node.kind) {
-                    case 161 /* Parameter */: {
+                    case 162 /* Parameter */: {
                         var oldFunction = node.parent;
                         if (ts.isArrowFunction(oldFunction) &&
                             oldFunction.parameters.length === 1 &&
@@ -139800,17 +143079,17 @@
                         }
                         break;
                     }
-                    case 262 /* ImportDeclaration */:
-                    case 261 /* ImportEqualsDeclaration */:
+                    case 264 /* ImportDeclaration */:
+                    case 263 /* ImportEqualsDeclaration */:
                         var isFirstImport = sourceFile.imports.length && node === ts.first(sourceFile.imports).parent || node === ts.find(sourceFile.statements, ts.isAnyImportSyntax);
                         // For first import, leave header comment in place, otherwise only delete JSDoc comments
                         deleteNode(changes, sourceFile, node, {
                             leadingTriviaOption: isFirstImport ? LeadingTriviaOption.Exclude : ts.hasJSDocNodes(node) ? LeadingTriviaOption.JSDoc : LeadingTriviaOption.StartLine,
                         });
                         break;
-                    case 199 /* BindingElement */:
+                    case 201 /* BindingElement */:
                         var pattern = node.parent;
-                        var preserveComma = pattern.kind === 198 /* ArrayBindingPattern */ && node !== ts.last(pattern.elements);
+                        var preserveComma = pattern.kind === 200 /* ArrayBindingPattern */ && node !== ts.last(pattern.elements);
                         if (preserveComma) {
                             deleteNode(changes, sourceFile, node);
                         }
@@ -139818,13 +143097,13 @@
                             deleteNodeInList(changes, deletedNodesInLists, sourceFile, node);
                         }
                         break;
-                    case 250 /* VariableDeclaration */:
+                    case 252 /* VariableDeclaration */:
                         deleteVariableDeclaration(changes, deletedNodesInLists, sourceFile, node);
                         break;
-                    case 160 /* TypeParameter */:
+                    case 161 /* TypeParameter */:
                         deleteNodeInList(changes, deletedNodesInLists, sourceFile, node);
                         break;
-                    case 266 /* ImportSpecifier */:
+                    case 268 /* ImportSpecifier */:
                         var namedImports = node.parent;
                         if (namedImports.elements.length === 1) {
                             deleteImportBinding(changes, sourceFile, namedImports);
@@ -139833,17 +143112,17 @@
                             deleteNodeInList(changes, deletedNodesInLists, sourceFile, node);
                         }
                         break;
-                    case 264 /* NamespaceImport */:
+                    case 266 /* NamespaceImport */:
                         deleteImportBinding(changes, sourceFile, node);
                         break;
                     case 26 /* SemicolonToken */:
                         deleteNode(changes, sourceFile, node, { trailingTriviaOption: TrailingTriviaOption.Exclude });
                         break;
-                    case 97 /* FunctionKeyword */:
+                    case 98 /* FunctionKeyword */:
                         deleteNode(changes, sourceFile, node, { leadingTriviaOption: LeadingTriviaOption.Exclude });
                         break;
-                    case 253 /* ClassDeclaration */:
-                    case 252 /* FunctionDeclaration */:
+                    case 255 /* ClassDeclaration */:
+                    case 254 /* FunctionDeclaration */:
                         deleteNode(changes, sourceFile, node, { leadingTriviaOption: ts.hasJSDocNodes(node) ? LeadingTriviaOption.JSDoc : LeadingTriviaOption.StartLine });
                         break;
                     default:
@@ -139894,13 +143173,13 @@
                     // Delete the entire import declaration
                     // |import * as ns from './file'|
                     // |import { a } from './file'|
-                    var importDecl = ts.getAncestor(node, 262 /* ImportDeclaration */);
+                    var importDecl = ts.getAncestor(node, 264 /* ImportDeclaration */);
                     deleteNode(changes, sourceFile, importDecl);
                 }
             }
             function deleteVariableDeclaration(changes, deletedNodesInLists, sourceFile, node) {
                 var parent = node.parent;
-                if (parent.kind === 288 /* CatchClause */) {
+                if (parent.kind === 290 /* CatchClause */) {
                     // TODO: There's currently no unused diagnostic for this, could be a suggestion
                     changes.deleteNodeRange(sourceFile, ts.findChildOfKind(parent, 20 /* OpenParenToken */, sourceFile), ts.findChildOfKind(parent, 21 /* CloseParenToken */, sourceFile));
                     return;
@@ -139911,14 +143190,14 @@
                 }
                 var gp = parent.parent;
                 switch (gp.kind) {
-                    case 240 /* ForOfStatement */:
-                    case 239 /* ForInStatement */:
+                    case 242 /* ForOfStatement */:
+                    case 241 /* ForInStatement */:
                         changes.replaceNode(sourceFile, node, ts.factory.createObjectLiteralExpression());
                         break;
-                    case 238 /* ForStatement */:
+                    case 240 /* ForStatement */:
                         deleteNode(changes, sourceFile, parent);
                         break;
-                    case 233 /* VariableStatement */:
+                    case 235 /* VariableStatement */:
                         deleteNode(changes, sourceFile, gp, { leadingTriviaOption: ts.hasJSDocNodes(gp) ? LeadingTriviaOption.JSDoc : LeadingTriviaOption.StartLine });
                         break;
                     default:
@@ -140051,7 +143330,7 @@
         codefix.eachDiagnostic = eachDiagnostic;
         function getDiagnostics(_a) {
             var program = _a.program, sourceFile = _a.sourceFile, cancellationToken = _a.cancellationToken;
-            return __spreadArray(__spreadArray(__spreadArray([], program.getSemanticDiagnostics(sourceFile, cancellationToken)), program.getSyntacticDiagnostics(sourceFile, cancellationToken)), ts.computeSuggestionDiagnostics(sourceFile, program, cancellationToken));
+            return __spreadArray(__spreadArray(__spreadArray([], program.getSemanticDiagnostics(sourceFile, cancellationToken), true), program.getSyntacticDiagnostics(sourceFile, cancellationToken), true), ts.computeSuggestionDiagnostics(sourceFile, program, cancellationToken), true);
         }
     })(codefix = ts.codefix || (ts.codefix = {}));
 })(ts || (ts = {}));
@@ -140104,8 +143383,8 @@
             var token = ts.getTokenAtPosition(sourceFile, pos);
             var assertion = ts.Debug.checkDefined(ts.findAncestor(token, function (n) { return ts.isAsExpression(n) || ts.isTypeAssertionExpression(n); }), "Expected to find an assertion expression");
             var replacement = ts.isAsExpression(assertion)
-                ? ts.factory.createAsExpression(assertion.expression, ts.factory.createKeywordTypeNode(152 /* UnknownKeyword */))
-                : ts.factory.createTypeAssertion(ts.factory.createKeywordTypeNode(152 /* UnknownKeyword */), assertion.expression);
+                ? ts.factory.createAsExpression(assertion.expression, ts.factory.createKeywordTypeNode(153 /* UnknownKeyword */))
+                : ts.factory.createTypeAssertion(ts.factory.createKeywordTypeNode(153 /* UnknownKeyword */), assertion.expression);
             changeTracker.replaceNode(sourceFile, assertion.expression, replacement);
         }
     })(codefix = ts.codefix || (ts.codefix = {}));
@@ -140242,7 +143521,7 @@
             ts.Diagnostics.Type_0_must_have_a_Symbol_asyncIterator_method_that_returns_an_async_iterator.code,
             ts.Diagnostics.Argument_of_type_0_is_not_assignable_to_parameter_of_type_1.code,
             propertyAccessCode
-        ], callableConstructableErrorCodes);
+        ], callableConstructableErrorCodes, true);
         codefix.registerCodeFix({
             fixIds: [fixId],
             errorCodes: errorCodes,
@@ -140338,7 +143617,7 @@
                 }
                 var declaration = ts.tryCast(symbol.valueDeclaration, ts.isVariableDeclaration);
                 var variableName = declaration && ts.tryCast(declaration.name, ts.isIdentifier);
-                var variableStatement = ts.getAncestor(declaration, 233 /* VariableStatement */);
+                var variableStatement = ts.getAncestor(declaration, 235 /* VariableStatement */);
                 if (!declaration || !variableStatement ||
                     declaration.type ||
                     !declaration.initializer ||
@@ -140416,10 +143695,10 @@
         function isInsideAwaitableBody(node) {
             return node.kind & 32768 /* AwaitContext */ || !!ts.findAncestor(node, function (ancestor) {
                 return ancestor.parent && ts.isArrowFunction(ancestor.parent) && ancestor.parent.body === ancestor ||
-                    ts.isBlock(ancestor) && (ancestor.parent.kind === 252 /* FunctionDeclaration */ ||
-                        ancestor.parent.kind === 209 /* FunctionExpression */ ||
-                        ancestor.parent.kind === 210 /* ArrowFunction */ ||
-                        ancestor.parent.kind === 166 /* MethodDeclaration */);
+                    ts.isBlock(ancestor) && (ancestor.parent.kind === 254 /* FunctionDeclaration */ ||
+                        ancestor.parent.kind === 211 /* FunctionExpression */ ||
+                        ancestor.parent.kind === 212 /* ArrowFunction */ ||
+                        ancestor.parent.kind === 167 /* MethodDeclaration */);
             });
         }
         function makeChange(changeTracker, errorCode, sourceFile, checker, insertionSite, fixedDeclarations) {
@@ -140508,7 +143787,7 @@
             if (forInitializer)
                 return applyChange(changeTracker, forInitializer, sourceFile, fixedNodes);
             var parent = token.parent;
-            if (ts.isBinaryExpression(parent) && parent.operatorToken.kind === 62 /* EqualsToken */ && ts.isExpressionStatement(parent.parent)) {
+            if (ts.isBinaryExpression(parent) && parent.operatorToken.kind === 63 /* EqualsToken */ && ts.isExpressionStatement(parent.parent)) {
                 return applyChange(changeTracker, token, sourceFile, fixedNodes);
             }
             if (ts.isArrayLiteralExpression(parent)) {
@@ -140532,16 +143811,16 @@
         }
         function applyChange(changeTracker, initializer, sourceFile, fixedNodes) {
             if (!fixedNodes || ts.tryAddToSet(fixedNodes, initializer)) {
-                changeTracker.insertModifierBefore(sourceFile, 84 /* ConstKeyword */, initializer);
+                changeTracker.insertModifierBefore(sourceFile, 85 /* ConstKeyword */, initializer);
             }
         }
         function isPossiblyPartOfDestructuring(node) {
             switch (node.kind) {
-                case 78 /* Identifier */:
-                case 200 /* ArrayLiteralExpression */:
-                case 201 /* ObjectLiteralExpression */:
-                case 289 /* PropertyAssignment */:
-                case 290 /* ShorthandPropertyAssignment */:
+                case 79 /* Identifier */:
+                case 202 /* ArrayLiteralExpression */:
+                case 203 /* ObjectLiteralExpression */:
+                case 291 /* PropertyAssignment */:
+                case 292 /* ShorthandPropertyAssignment */:
                     return true;
                 default:
                     return false;
@@ -140555,8 +143834,8 @@
         }
         function isPossiblyPartOfCommaSeperatedInitializer(node) {
             switch (node.kind) {
-                case 78 /* Identifier */:
-                case 217 /* BinaryExpression */:
+                case 79 /* Identifier */:
+                case 219 /* BinaryExpression */:
                 case 27 /* CommaToken */:
                     return true;
                 default:
@@ -140570,7 +143849,7 @@
             if (expression.operatorToken.kind === 27 /* CommaToken */) {
                 return ts.every([expression.left, expression.right], function (expression) { return expressionCouldBeVariableDeclaration(expression, checker); });
             }
-            return expression.operatorToken.kind === 62 /* EqualsToken */
+            return expression.operatorToken.kind === 63 /* EqualsToken */
                 && ts.isIdentifier(expression.left)
                 && !checker.getSymbolAtLocation(expression.left);
         }
@@ -140605,9 +143884,9 @@
                 return;
             }
             var declaration = token.parent;
-            if (declaration.kind === 164 /* PropertyDeclaration */ &&
+            if (declaration.kind === 165 /* PropertyDeclaration */ &&
                 (!fixedNodes || ts.tryAddToSet(fixedNodes, declaration))) {
-                changeTracker.insertModifierBefore(sourceFile, 133 /* DeclareKeyword */, declaration);
+                changeTracker.insertModifierBefore(sourceFile, 134 /* DeclareKeyword */, declaration);
             }
         }
     })(codefix = ts.codefix || (ts.codefix = {}));
@@ -140742,26 +144021,26 @@
         }
         function isDeclarationWithType(node) {
             return ts.isFunctionLikeDeclaration(node) ||
-                node.kind === 250 /* VariableDeclaration */ ||
-                node.kind === 163 /* PropertySignature */ ||
-                node.kind === 164 /* PropertyDeclaration */;
+                node.kind === 252 /* VariableDeclaration */ ||
+                node.kind === 164 /* PropertySignature */ ||
+                node.kind === 165 /* PropertyDeclaration */;
         }
         function transformJSDocType(node) {
             switch (node.kind) {
-                case 304 /* JSDocAllType */:
-                case 305 /* JSDocUnknownType */:
+                case 307 /* JSDocAllType */:
+                case 308 /* JSDocUnknownType */:
                     return ts.factory.createTypeReferenceNode("any", ts.emptyArray);
-                case 308 /* JSDocOptionalType */:
+                case 311 /* JSDocOptionalType */:
                     return transformJSDocOptionalType(node);
-                case 307 /* JSDocNonNullableType */:
+                case 310 /* JSDocNonNullableType */:
                     return transformJSDocType(node.type);
-                case 306 /* JSDocNullableType */:
+                case 309 /* JSDocNullableType */:
                     return transformJSDocNullableType(node);
-                case 310 /* JSDocVariadicType */:
+                case 313 /* JSDocVariadicType */:
                     return transformJSDocVariadicType(node);
-                case 309 /* JSDocFunctionType */:
+                case 312 /* JSDocFunctionType */:
                     return transformJSDocFunctionType(node);
-                case 174 /* TypeReference */:
+                case 176 /* TypeReference */:
                     return transformJSDocTypeReference(node);
                 default:
                     var visited = ts.visitEachChild(node, transformJSDocType, ts.nullTransformationContext);
@@ -140782,11 +144061,11 @@
             var _a;
             // TODO: This does not properly handle `function(new:C, string)` per https://github.com/google/closure-compiler/wiki/Types-in-the-Closure-Type-System#the-javascript-type-language
             //       however we do handle it correctly in `serializeTypeForDeclaration` in checker.ts
-            return ts.factory.createFunctionTypeNode(ts.emptyArray, node.parameters.map(transformJSDocParameter), (_a = node.type) !== null && _a !== void 0 ? _a : ts.factory.createKeywordTypeNode(128 /* AnyKeyword */));
+            return ts.factory.createFunctionTypeNode(ts.emptyArray, node.parameters.map(transformJSDocParameter), (_a = node.type) !== null && _a !== void 0 ? _a : ts.factory.createKeywordTypeNode(129 /* AnyKeyword */));
         }
         function transformJSDocParameter(node) {
             var index = node.parent.parameters.indexOf(node);
-            var isRest = node.type.kind === 310 /* JSDocVariadicType */ && index === node.parent.parameters.length - 1; // TODO: GH#18217
+            var isRest = node.type.kind === 313 /* JSDocVariadicType */ && index === node.parent.parameters.length - 1; // TODO: GH#18217
             var name = node.name || (isRest ? "rest" : "arg" + index);
             var dotdotdot = isRest ? ts.factory.createToken(25 /* DotDotDotToken */) : node.dotDotDotToken;
             return ts.factory.createParameterDeclaration(node.decorators, node.modifiers, dotdotdot, name, node.questionToken, ts.visitNode(node.type, transformJSDocType), node.initializer);
@@ -140826,8 +144105,8 @@
             var index = ts.factory.createParameterDeclaration(
             /*decorators*/ undefined, 
             /*modifiers*/ undefined, 
-            /*dotDotDotToken*/ undefined, node.typeArguments[0].kind === 144 /* NumberKeyword */ ? "n" : "s", 
-            /*questionToken*/ undefined, ts.factory.createTypeReferenceNode(node.typeArguments[0].kind === 144 /* NumberKeyword */ ? "number" : "string", []), 
+            /*dotDotDotToken*/ undefined, node.typeArguments[0].kind === 145 /* NumberKeyword */ ? "n" : "s", 
+            /*questionToken*/ undefined, ts.factory.createTypeReferenceNode(node.typeArguments[0].kind === 145 /* NumberKeyword */ ? "number" : "string", []), 
             /*initializer*/ undefined);
             var indexSignature = ts.factory.createTypeLiteralNode([ts.factory.createIndexSignature(/*decorators*/ undefined, /*modifiers*/ undefined, [index], node.typeArguments[1])]);
             ts.setEmitFlags(indexSignature, 1 /* SingleLine */);
@@ -140904,7 +144183,7 @@
                             if (member.declarations.length === 1 &&
                                 ts.isPropertyAccessExpression(firstDeclaration) &&
                                 ts.isBinaryExpression(firstDeclaration.parent) &&
-                                firstDeclaration.parent.operatorToken.kind === 62 /* EqualsToken */ &&
+                                firstDeclaration.parent.operatorToken.kind === 63 /* EqualsToken */ &&
                                 ts.isObjectLiteralExpression(firstDeclaration.parent.right)) {
                                 var prototypes = firstDeclaration.parent.right;
                                 var memberElement = createClassElement(prototypes.symbol, /** modifiers */ undefined);
@@ -140914,7 +144193,7 @@
                             }
                         }
                         else {
-                            var memberElement = createClassElement(member, [ts.factory.createToken(123 /* StaticKeyword */)]);
+                            var memberElement = createClassElement(member, [ts.factory.createToken(124 /* StaticKeyword */)]);
                             if (memberElement) {
                                 memberElements.push.apply(memberElements, memberElement);
                             }
@@ -140960,7 +144239,7 @@
                         return members;
                     }
                     // delete the entire statement if this expression is the sole expression to take care of the semicolon at the end
-                    var nodeToDelete = assignmentBinaryExpression.parent && assignmentBinaryExpression.parent.kind === 234 /* ExpressionStatement */
+                    var nodeToDelete = assignmentBinaryExpression.parent && assignmentBinaryExpression.parent.kind === 236 /* ExpressionStatement */
                         ? assignmentBinaryExpression.parent : assignmentBinaryExpression;
                     changes.delete(sourceFile, nodeToDelete);
                     if (!assignmentExpr) {
@@ -141011,7 +144290,7 @@
                             return createArrowFunctionExpressionMember(members, expression, name);
                     }
                     function createFunctionExpressionMember(members, functionExpression, name) {
-                        var fullModifiers = ts.concatenate(modifiers, getModifierKindFromSource(functionExpression, 129 /* AsyncKeyword */));
+                        var fullModifiers = ts.concatenate(modifiers, getModifierKindFromSource(functionExpression, 130 /* AsyncKeyword */));
                         var method = ts.factory.createMethodDeclaration(/*decorators*/ undefined, fullModifiers, /*asteriskToken*/ undefined, name, /*questionToken*/ undefined, 
                         /*typeParameters*/ undefined, functionExpression.parameters, /*type*/ undefined, functionExpression.body);
                         ts.copyLeadingComments(assignmentBinaryExpression, method, sourceFile);
@@ -141021,14 +144300,14 @@
                         var arrowFunctionBody = arrowFunction.body;
                         var bodyBlock;
                         // case 1: () => { return [1,2,3] }
-                        if (arrowFunctionBody.kind === 231 /* Block */) {
+                        if (arrowFunctionBody.kind === 233 /* Block */) {
                             bodyBlock = arrowFunctionBody;
                         }
                         // case 2: () => [1,2,3]
                         else {
                             bodyBlock = ts.factory.createBlock([ts.factory.createReturnStatement(arrowFunctionBody)]);
                         }
-                        var fullModifiers = ts.concatenate(modifiers, getModifierKindFromSource(arrowFunction, 129 /* AsyncKeyword */));
+                        var fullModifiers = ts.concatenate(modifiers, getModifierKindFromSource(arrowFunction, 130 /* AsyncKeyword */));
                         var method = ts.factory.createMethodDeclaration(/*decorators*/ undefined, fullModifiers, /*asteriskToken*/ undefined, name, /*questionToken*/ undefined, 
                         /*typeParameters*/ undefined, arrowFunction.parameters, /*type*/ undefined, bodyBlock);
                         ts.copyLeadingComments(assignmentBinaryExpression, method, sourceFile);
@@ -141045,7 +144324,7 @@
                 if (initializer.body) {
                     memberElements.unshift(ts.factory.createConstructorDeclaration(/*decorators*/ undefined, /*modifiers*/ undefined, initializer.parameters, initializer.body));
                 }
-                var modifiers = getModifierKindFromSource(node.parent.parent, 92 /* ExportKeyword */);
+                var modifiers = getModifierKindFromSource(node.parent.parent, 93 /* ExportKeyword */);
                 var cls = ts.factory.createClassDeclaration(/*decorators*/ undefined, modifiers, node.name, 
                 /*typeParameters*/ undefined, /*heritageClauses*/ undefined, memberElements);
                 // Don't call copyComments here because we'll already leave them in place
@@ -141056,7 +144335,7 @@
                 if (node.body) {
                     memberElements.unshift(ts.factory.createConstructorDeclaration(/*decorators*/ undefined, /*modifiers*/ undefined, node.parameters, node.body));
                 }
-                var modifiers = getModifierKindFromSource(node, 92 /* ExportKeyword */);
+                var modifiers = getModifierKindFromSource(node, 93 /* ExportKeyword */);
                 var cls = ts.factory.createClassDeclaration(/*decorators*/ undefined, modifiers, node.name, 
                 /*typeParameters*/ undefined, /*heritageClauses*/ undefined, memberElements);
                 // Don't call copyComments here because we'll already leave them in place
@@ -141144,7 +144423,7 @@
                 functionToConvert.decorators ? ts.skipTrivia(sourceFile.text, functionToConvert.decorators.end) :
                     functionToConvert.getStart(sourceFile);
             var options = functionToConvert.modifiers ? { prefix: " " } : { suffix: " " };
-            changes.insertModifierAt(sourceFile, pos, 129 /* AsyncKeyword */, options);
+            changes.insertModifierAt(sourceFile, pos, 130 /* AsyncKeyword */, options);
             var _loop_13 = function (returnStatement) {
                 ts.forEachChild(returnStatement, function visit(node) {
                     if (ts.isCallExpression(node)) {
@@ -141403,9 +144682,9 @@
         function maybeAnnotateAndReturn(expressionToReturn, typeAnnotation) {
             if (typeAnnotation && expressionToReturn) {
                 var name = ts.factory.createUniqueName("result", 16 /* Optimistic */);
-                return __spreadArray(__spreadArray([], createVariableOrAssignmentOrExpressionStatement(createSynthIdentifier(name), expressionToReturn, typeAnnotation)), [
+                return __spreadArray(__spreadArray([], createVariableOrAssignmentOrExpressionStatement(createSynthIdentifier(name), expressionToReturn, typeAnnotation), true), [
                     ts.factory.createReturnStatement(name)
-                ]);
+                ], false);
             }
             return [ts.factory.createReturnStatement(expressionToReturn)];
         }
@@ -141413,11 +144692,11 @@
         function getTransformationBody(func, prevArgName, argName, parent, transformer) {
             var _a, _b, _c, _d, _e;
             switch (func.kind) {
-                case 103 /* NullKeyword */:
+                case 104 /* NullKeyword */:
                     // do not produce a transformed statement for a null argument
                     break;
-                case 202 /* PropertyAccessExpression */:
-                case 78 /* Identifier */: // identifier includes undefined
+                case 204 /* PropertyAccessExpression */:
+                case 79 /* Identifier */: // identifier includes undefined
                     if (!argName) {
                         // undefined was argument passed to promise handler
                         break;
@@ -141438,8 +144717,8 @@
                         prevArgName.types.push(returnType);
                     }
                     return varDeclOrAssignment;
-                case 209 /* FunctionExpression */:
-                case 210 /* ArrowFunction */: {
+                case 211 /* FunctionExpression */:
+                case 212 /* ArrowFunction */: {
                     var funcBody = func.body;
                     var returnType_1 = (_c = getLastCallSignature(transformer.checker.getTypeAtLocation(func), transformer.checker)) === null || _c === void 0 ? void 0 : _c.getReturnType();
                     // Arrow functions with block bodies { } will enter this control flow
@@ -141658,10 +144937,10 @@
                 }
                 var importNode = ts.importFromModuleSpecifier(moduleSpecifier);
                 switch (importNode.kind) {
-                    case 261 /* ImportEqualsDeclaration */:
+                    case 263 /* ImportEqualsDeclaration */:
                         changes.replaceNode(importingFile, importNode, ts.makeImport(importNode.name, /*namedImports*/ undefined, moduleSpecifier, quotePreference));
                         break;
-                    case 204 /* CallExpression */:
+                    case 206 /* CallExpression */:
                         if (ts.isRequireCall(importNode, /*checkArgumentIsStringLiteralLike*/ false)) {
                             changes.replaceNode(importingFile, importNode, ts.factory.createPropertyAccessExpression(ts.getSynthesizedDeepClone(importNode), "default"));
                         }
@@ -141721,29 +145000,29 @@
             sourceFile.forEachChild(function recur(node) {
                 if (ts.isPropertyAccessExpression(node) && ts.isExportsOrModuleExportsOrAlias(sourceFile, node.expression) && ts.isIdentifier(node.name)) {
                     var parent = node.parent;
-                    cb(node, ts.isBinaryExpression(parent) && parent.left === node && parent.operatorToken.kind === 62 /* EqualsToken */);
+                    cb(node, ts.isBinaryExpression(parent) && parent.left === node && parent.operatorToken.kind === 63 /* EqualsToken */);
                 }
                 node.forEachChild(recur);
             });
         }
         function convertStatement(sourceFile, statement, checker, changes, identifiers, target, exports, useSitesToUnqualify, quotePreference) {
             switch (statement.kind) {
-                case 233 /* VariableStatement */:
+                case 235 /* VariableStatement */:
                     convertVariableStatement(sourceFile, statement, changes, checker, identifiers, target, quotePreference);
                     return false;
-                case 234 /* ExpressionStatement */: {
+                case 236 /* ExpressionStatement */: {
                     var expression = statement.expression;
                     switch (expression.kind) {
-                        case 204 /* CallExpression */: {
+                        case 206 /* CallExpression */: {
                             if (ts.isRequireCall(expression, /*checkArgumentIsStringLiteralLike*/ true)) {
                                 // For side-effecting require() call, just make a side-effecting import.
                                 changes.replaceNode(sourceFile, statement, ts.makeImport(/*name*/ undefined, /*namedImports*/ undefined, expression.arguments[0], quotePreference));
                             }
                             return false;
                         }
-                        case 217 /* BinaryExpression */: {
+                        case 219 /* BinaryExpression */: {
                             var operatorToken = expression.operatorToken;
-                            return operatorToken.kind === 62 /* EqualsToken */ && convertAssignment(sourceFile, checker, expression, changes, exports, useSitesToUnqualify);
+                            return operatorToken.kind === 63 /* EqualsToken */ && convertAssignment(sourceFile, checker, expression, changes, exports, useSitesToUnqualify);
                         }
                     }
                 }
@@ -141790,8 +145069,8 @@
         /** Converts `const name = require("moduleSpecifier").propertyName` */
         function convertPropertyAccessImport(name, propertyName, moduleSpecifier, identifiers, quotePreference) {
             switch (name.kind) {
-                case 197 /* ObjectBindingPattern */:
-                case 198 /* ArrayBindingPattern */: {
+                case 199 /* ObjectBindingPattern */:
+                case 200 /* ArrayBindingPattern */: {
                     // `const [a, b] = require("c").d` --> `import { d } from "c"; const [a, b] = d;`
                     var tmp = makeUniqueName(propertyName, identifiers);
                     return convertedImports([
@@ -141799,7 +145078,7 @@
                         makeConst(/*modifiers*/ undefined, name, ts.factory.createIdentifier(tmp)),
                     ]);
                 }
-                case 78 /* Identifier */:
+                case 79 /* Identifier */:
                     // `const a = require("b").c` --> `import { c as a } from "./b";
                     return convertedImports([makeSingleImport(name.text, propertyName, moduleSpecifier, quotePreference)]);
                 default:
@@ -141842,17 +145121,17 @@
         function tryChangeModuleExportsObject(object, useSitesToUnqualify) {
             var statements = ts.mapAllOrFail(object.properties, function (prop) {
                 switch (prop.kind) {
-                    case 168 /* GetAccessor */:
-                    case 169 /* SetAccessor */:
+                    case 170 /* GetAccessor */:
+                    case 171 /* SetAccessor */:
                     // TODO: Maybe we should handle this? See fourslash test `refactorConvertToEs6Module_export_object_shorthand.ts`.
                     // falls through
-                    case 290 /* ShorthandPropertyAssignment */:
-                    case 291 /* SpreadAssignment */:
+                    case 292 /* ShorthandPropertyAssignment */:
+                    case 293 /* SpreadAssignment */:
                         return undefined;
-                    case 289 /* PropertyAssignment */:
+                    case 291 /* PropertyAssignment */:
                         return !ts.isIdentifier(prop.name) ? undefined : convertExportsDotXEquals_replaceNode(prop.name.text, prop.initializer, useSitesToUnqualify);
-                    case 166 /* MethodDeclaration */:
-                        return !ts.isIdentifier(prop.name) ? undefined : functionExpressionToDeclaration(prop.name.text, [ts.factory.createToken(92 /* ExportKeyword */)], prop, useSitesToUnqualify);
+                    case 167 /* MethodDeclaration */:
+                        return !ts.isIdentifier(prop.name) ? undefined : functionExpressionToDeclaration(prop.name.text, [ts.factory.createToken(93 /* ExportKeyword */)], prop, useSitesToUnqualify);
                     default:
                         ts.Debug.assertNever(prop, "Convert to ES6 got invalid prop kind " + prop.kind);
                 }
@@ -141899,7 +145178,7 @@
             var name = left.name.text;
             if ((ts.isFunctionExpression(right) || ts.isArrowFunction(right) || ts.isClassExpression(right)) && (!right.name || right.name.text === name)) {
                 // `exports.f = function() {}` -> `export function f() {}` -- Replace `exports.f = ` with `export `, and insert the name after `function`.
-                changes.replaceRange(sourceFile, { pos: left.getStart(sourceFile), end: right.getStart(sourceFile) }, ts.factory.createToken(92 /* ExportKeyword */), { suffix: " " });
+                changes.replaceRange(sourceFile, { pos: left.getStart(sourceFile), end: right.getStart(sourceFile) }, ts.factory.createToken(93 /* ExportKeyword */), { suffix: " " });
                 if (!right.name)
                     changes.insertName(sourceFile, right, name);
                 var semi = ts.findChildOfKind(parent, 26 /* SemicolonToken */, sourceFile);
@@ -141908,14 +145187,14 @@
             }
             else {
                 // `exports.f = function g() {}` -> `export const f = function g() {}` -- just replace `exports.` with `export const `
-                changes.replaceNodeRangeWithNodes(sourceFile, left.expression, ts.findChildOfKind(left, 24 /* DotToken */, sourceFile), [ts.factory.createToken(92 /* ExportKeyword */), ts.factory.createToken(84 /* ConstKeyword */)], { joiner: " ", suffix: " " });
+                changes.replaceNodeRangeWithNodes(sourceFile, left.expression, ts.findChildOfKind(left, 24 /* DotToken */, sourceFile), [ts.factory.createToken(93 /* ExportKeyword */), ts.factory.createToken(85 /* ConstKeyword */)], { joiner: " ", suffix: " " });
             }
         }
         // TODO: GH#22492 this will cause an error if a change has been made inside the body of the node.
         function convertExportsDotXEquals_replaceNode(name, exported, useSitesToUnqualify) {
-            var modifiers = [ts.factory.createToken(92 /* ExportKeyword */)];
+            var modifiers = [ts.factory.createToken(93 /* ExportKeyword */)];
             switch (exported.kind) {
-                case 209 /* FunctionExpression */: {
+                case 211 /* FunctionExpression */: {
                     var expressionName = exported.name;
                     if (expressionName && expressionName.text !== name) {
                         // `exports.f = function g() {}` -> `export const f = function g() {}`
@@ -141923,10 +145202,10 @@
                     }
                 }
                 // falls through
-                case 210 /* ArrowFunction */:
+                case 212 /* ArrowFunction */:
                     // `exports.f = function() {}` --> `export function f() {}`
                     return functionExpressionToDeclaration(name, modifiers, exported, useSitesToUnqualify);
-                case 222 /* ClassExpression */:
+                case 224 /* ClassExpression */:
                     // `exports.C = class {}` --> `export class C {}`
                     return classExpressionToDeclaration(name, modifiers, exported, useSitesToUnqualify);
                 default:
@@ -141946,7 +145225,7 @@
                 : ts.getSynthesizedDeepCloneWithReplacements(nodeOrNodes, /*includeTrivia*/ true, replaceNode);
             function replaceNode(original) {
                 // We are replacing `mod.SomeExport` wih `SomeExport`, so we only need to look at PropertyAccessExpressions
-                if (original.kind === 202 /* PropertyAccessExpression */) {
+                if (original.kind === 204 /* PropertyAccessExpression */) {
                     var replacement = useSitesToUnqualify.get(original);
                     // Remove entry from `useSitesToUnqualify` so the refactor knows it's taken care of by the parent statement we're replacing
                     useSitesToUnqualify.delete(original);
@@ -141961,7 +145240,7 @@
          */
         function convertSingleImport(name, moduleSpecifier, checker, identifiers, target, quotePreference) {
             switch (name.kind) {
-                case 197 /* ObjectBindingPattern */: {
+                case 199 /* ObjectBindingPattern */: {
                     var importSpecifiers = ts.mapAllOrFail(name.elements, function (e) {
                         return e.dotDotDotToken || e.initializer || e.propertyName && !ts.isIdentifier(e.propertyName) || !ts.isIdentifier(e.name)
                             ? undefined
@@ -141974,7 +145253,7 @@
                     }
                 }
                 // falls through -- object destructuring has an interesting pattern and must be a variable declaration
-                case 198 /* ArrayBindingPattern */: {
+                case 200 /* ArrayBindingPattern */: {
                     /*
                     import x from "x";
                     const [a, b, c] = x;
@@ -141985,7 +145264,7 @@
                         makeConst(/*modifiers*/ undefined, ts.getSynthesizedDeepClone(name), ts.factory.createIdentifier(tmp)),
                     ]);
                 }
-                case 78 /* Identifier */:
+                case 79 /* Identifier */:
                     return convertSingleIdentifierImport(name, moduleSpecifier, checker, identifiers, quotePreference);
                 default:
                     return ts.Debug.assertNever(name, "Convert to ES6 module got invalid name kind " + name.kind);
@@ -142067,11 +145346,11 @@
         function isFreeIdentifier(node) {
             var parent = node.parent;
             switch (parent.kind) {
-                case 202 /* PropertyAccessExpression */:
+                case 204 /* PropertyAccessExpression */:
                     return parent.name !== node;
-                case 199 /* BindingElement */:
+                case 201 /* BindingElement */:
                     return parent.propertyName !== node;
-                case 266 /* ImportSpecifier */:
+                case 268 /* ImportSpecifier */:
                     return parent.propertyName !== node;
                 default:
                     return true;
@@ -142185,7 +145464,7 @@
             var exportDeclaration = exportClause.parent;
             var typeExportSpecifiers = getTypeExportSpecifiers(exportSpecifier, context);
             if (typeExportSpecifiers.length === exportClause.elements.length) {
-                changes.insertModifierBefore(context.sourceFile, 149 /* TypeKeyword */, exportClause);
+                changes.insertModifierBefore(context.sourceFile, 150 /* TypeKeyword */, exportClause);
             }
             else {
                 var valueExportDeclaration = ts.factory.updateExportDeclaration(exportDeclaration, exportDeclaration.decorators, exportDeclaration.modifiers, 
@@ -142371,7 +145650,7 @@
             function createMissingIndexSignatureDeclaration(type, kind) {
                 var indexInfoOfKind = checker.getIndexInfoOfType(type, kind);
                 if (indexInfoOfKind) {
-                    insertInterfaceMemberNode(sourceFile, classDeclaration, checker.indexInfoToIndexSignatureDeclaration(indexInfoOfKind, kind, classDeclaration, /*flags*/ undefined, codefix.getNoopSymbolTrackerWithResolver(context)));
+                    insertInterfaceMemberNode(sourceFile, classDeclaration, checker.indexInfoToIndexSignatureDeclaration(indexInfoOfKind, classDeclaration, /*flags*/ undefined, codefix.getNoopSymbolTrackerWithResolver(context)));
                 }
             }
             // Either adds the node at the top of the class, or if there's a constructor right after that
@@ -142409,6 +145688,7 @@
             ts.Diagnostics.Cannot_find_namespace_0.code,
             ts.Diagnostics._0_refers_to_a_UMD_global_but_the_current_file_is_a_module_Consider_adding_an_import_instead.code,
             ts.Diagnostics._0_only_refers_to_a_type_but_is_being_used_as_a_value_here.code,
+            ts.Diagnostics.No_value_exists_in_scope_for_the_shorthand_property_0_Either_declare_one_or_provide_an_initializer.code
         ];
         codefix.registerCodeFix({
             errorCodes: errorCodes,
@@ -142453,11 +145733,13 @@
                 var symbolName = ts.getNameForExportedSymbol(exportedSymbol, ts.getEmitScriptTarget(compilerOptions));
                 var checker = program.getTypeChecker();
                 var symbol = checker.getMergedSymbol(ts.skipAlias(exportedSymbol, checker));
-                var exportInfos = getAllReExportingModules(sourceFile, symbol, moduleSymbol, symbolName, host, program, useAutoImportProvider);
+                var exportInfos = getAllReExportingModules(sourceFile, symbol, moduleSymbol, symbolName, host, program, preferences, useAutoImportProvider);
                 var preferTypeOnlyImport = !!usageIsTypeOnly && compilerOptions.importsNotUsedAsValues === 2 /* Error */;
                 var useRequire = shouldUseRequire(sourceFile, program);
                 var fix = getImportFixForSymbol(sourceFile, exportInfos, moduleSymbol, symbolName, program, /*position*/ undefined, preferTypeOnlyImport, useRequire, host, preferences);
-                addImport({ fixes: [fix], symbolName: symbolName });
+                if (fix) {
+                    addImport({ fixes: [fix], symbolName: symbolName });
+                }
             }
             function addImport(info) {
                 var fixes = info.fixes, symbolName = info.symbolName;
@@ -142552,16 +145834,16 @@
             var compilerOptions = program.getCompilerOptions();
             var exportInfos = ts.pathIsBareSpecifier(ts.stripQuotes(moduleSymbol.name))
                 ? [getSymbolExportInfoForSymbol(exportedSymbol, moduleSymbol, program, host)]
-                : getAllReExportingModules(sourceFile, exportedSymbol, moduleSymbol, symbolName, host, program, /*useAutoImportProvider*/ true);
+                : getAllReExportingModules(sourceFile, exportedSymbol, moduleSymbol, symbolName, host, program, preferences, /*useAutoImportProvider*/ true);
             var useRequire = shouldUseRequire(sourceFile, program);
             var preferTypeOnlyImport = compilerOptions.importsNotUsedAsValues === 2 /* Error */ && !ts.isSourceFileJS(sourceFile) && ts.isValidTypeOnlyAliasUseSite(ts.getTokenAtPosition(sourceFile, position));
-            var fix = getImportFixForSymbol(sourceFile, exportInfos, moduleSymbol, symbolName, program, position, preferTypeOnlyImport, useRequire, host, preferences);
+            var fix = ts.Debug.checkDefined(getImportFixForSymbol(sourceFile, exportInfos, moduleSymbol, symbolName, program, position, preferTypeOnlyImport, useRequire, host, preferences));
             return { moduleSpecifier: fix.moduleSpecifier, codeAction: codeFixActionToCodeAction(codeActionForFix({ host: host, formatContext: formatContext, preferences: preferences }, sourceFile, symbolName, fix, ts.getQuotePreference(sourceFile, preferences))) };
         }
         codefix.getImportCompletionAction = getImportCompletionAction;
         function getImportFixForSymbol(sourceFile, exportInfos, moduleSymbol, symbolName, program, position, preferTypeOnlyImport, useRequire, host, preferences) {
-            ts.Debug.assert(exportInfos.some(function (info) { return info.moduleSymbol === moduleSymbol; }), "Some exportInfo should match the specified moduleSymbol");
-            return getBestFix(getImportFixes(exportInfos, symbolName, position, preferTypeOnlyImport, useRequire, program, sourceFile, host, preferences), sourceFile, host);
+            ts.Debug.assert(exportInfos.some(function (info) { return info.moduleSymbol === moduleSymbol || info.symbol.parent === moduleSymbol; }), "Some exportInfo should match the specified moduleSymbol");
+            return getBestFix(getImportFixes(exportInfos, symbolName, position, preferTypeOnlyImport, useRequire, program, sourceFile, host, preferences), sourceFile, program, host, preferences);
         }
         function codeFixActionToCodeAction(_a) {
             var description = _a.description, changes = _a.changes, commands = _a.commands;
@@ -142577,101 +145859,54 @@
             var autoImportProvider = (_b = (_a = host.getPackageJsonAutoImportProvider) === null || _a === void 0 ? void 0 : _a.call(host)) === null || _b === void 0 ? void 0 : _b.getTypeChecker();
             return ts.Debug.checkDefined(autoImportProvider && getInfoWithChecker(autoImportProvider, /*isFromPackageJson*/ true), "Could not find symbol in specified module for code actions");
             function getInfoWithChecker(checker, isFromPackageJson) {
-                var defaultInfo = getDefaultLikeExportInfo(moduleSymbol, checker, compilerOptions);
+                var defaultInfo = ts.getDefaultLikeExportInfo(moduleSymbol, checker, compilerOptions);
                 if (defaultInfo && ts.skipAlias(defaultInfo.symbol, checker) === symbol) {
-                    return { symbol: defaultInfo.symbol, moduleSymbol: moduleSymbol, exportKind: defaultInfo.exportKind, exportedSymbolIsTypeOnly: isTypeOnlySymbol(symbol, checker), isFromPackageJson: isFromPackageJson };
+                    return { symbol: defaultInfo.symbol, moduleSymbol: moduleSymbol, moduleFileName: undefined, exportKind: defaultInfo.exportKind, targetFlags: ts.skipAlias(symbol, checker).flags, isFromPackageJson: isFromPackageJson };
                 }
                 var named = checker.tryGetMemberInModuleExportsAndProperties(symbol.name, moduleSymbol);
                 if (named && ts.skipAlias(named, checker) === symbol) {
-                    return { symbol: named, moduleSymbol: moduleSymbol, exportKind: 0 /* Named */, exportedSymbolIsTypeOnly: isTypeOnlySymbol(symbol, checker), isFromPackageJson: isFromPackageJson };
+                    return { symbol: named, moduleSymbol: moduleSymbol, moduleFileName: undefined, exportKind: 0 /* Named */, targetFlags: ts.skipAlias(symbol, checker).flags, isFromPackageJson: isFromPackageJson };
                 }
             }
         }
-        function getAllReExportingModules(importingFile, exportedSymbol, exportingModuleSymbol, symbolName, host, program, useAutoImportProvider) {
+        function getAllReExportingModules(importingFile, exportedSymbol, exportingModuleSymbol, symbolName, host, program, preferences, useAutoImportProvider) {
             var result = [];
             var compilerOptions = program.getCompilerOptions();
             var getModuleSpecifierResolutionHost = ts.memoizeOne(function (isFromPackageJson) {
                 return ts.createModuleSpecifierResolutionHost(isFromPackageJson ? host.getPackageJsonAutoImportProvider() : program, host);
             });
-            forEachExternalModuleToImportFrom(program, host, useAutoImportProvider, function (moduleSymbol, moduleFile, program, isFromPackageJson) {
+            ts.forEachExternalModuleToImportFrom(program, host, useAutoImportProvider, function (moduleSymbol, moduleFile, program, isFromPackageJson) {
                 var checker = program.getTypeChecker();
                 // Don't import from a re-export when looking "up" like to `./index` or `../index`.
                 if (moduleFile && moduleSymbol !== exportingModuleSymbol && ts.startsWith(importingFile.fileName, ts.getDirectoryPath(moduleFile.fileName))) {
                     return;
                 }
-                var defaultInfo = getDefaultLikeExportInfo(moduleSymbol, checker, compilerOptions);
+                var defaultInfo = ts.getDefaultLikeExportInfo(moduleSymbol, checker, compilerOptions);
                 if (defaultInfo && (defaultInfo.name === symbolName || moduleSymbolToValidIdentifier(moduleSymbol, compilerOptions.target) === symbolName) && ts.skipAlias(defaultInfo.symbol, checker) === exportedSymbol && isImportable(program, moduleFile, isFromPackageJson)) {
-                    result.push({ symbol: defaultInfo.symbol, moduleSymbol: moduleSymbol, exportKind: defaultInfo.exportKind, exportedSymbolIsTypeOnly: isTypeOnlySymbol(defaultInfo.symbol, checker), isFromPackageJson: isFromPackageJson });
+                    result.push({ symbol: defaultInfo.symbol, moduleSymbol: moduleSymbol, moduleFileName: moduleFile === null || moduleFile === void 0 ? void 0 : moduleFile.fileName, exportKind: defaultInfo.exportKind, targetFlags: ts.skipAlias(defaultInfo.symbol, checker).flags, isFromPackageJson: isFromPackageJson });
                 }
                 for (var _i = 0, _a = checker.getExportsAndPropertiesOfModule(moduleSymbol); _i < _a.length; _i++) {
                     var exported = _a[_i];
                     if (exported.name === symbolName && ts.skipAlias(exported, checker) === exportedSymbol && isImportable(program, moduleFile, isFromPackageJson)) {
-                        result.push({ symbol: exported, moduleSymbol: moduleSymbol, exportKind: 0 /* Named */, exportedSymbolIsTypeOnly: isTypeOnlySymbol(exported, checker), isFromPackageJson: isFromPackageJson });
+                        result.push({ symbol: exported, moduleSymbol: moduleSymbol, moduleFileName: moduleFile === null || moduleFile === void 0 ? void 0 : moduleFile.fileName, exportKind: 0 /* Named */, targetFlags: ts.skipAlias(exported, checker).flags, isFromPackageJson: isFromPackageJson });
                     }
                 }
             });
             return result;
             function isImportable(program, moduleFile, isFromPackageJson) {
                 var _a;
-                return !moduleFile || ts.isImportableFile(program, importingFile, moduleFile, /*packageJsonFilter*/ undefined, getModuleSpecifierResolutionHost(isFromPackageJson), (_a = host.getModuleSpecifierCache) === null || _a === void 0 ? void 0 : _a.call(host));
+                return !moduleFile || ts.isImportableFile(program, importingFile, moduleFile, preferences, /*packageJsonFilter*/ undefined, getModuleSpecifierResolutionHost(isFromPackageJson), (_a = host.getModuleSpecifierCache) === null || _a === void 0 ? void 0 : _a.call(host));
             }
         }
-        function getModuleSpecifierForBestExportInfo(exportInfo, importingFile, program, host, preferences) {
-            return getBestFix(getNewImportFixes(program, importingFile, /*position*/ undefined, /*preferTypeOnlyImport*/ false, /*useRequire*/ false, exportInfo, host, preferences), importingFile, host);
+        function getModuleSpecifierForBestExportInfo(exportInfo, importingFile, program, host, preferences, fromCacheOnly) {
+            var _a = getNewImportFixes(program, importingFile, 
+            /*position*/ undefined, 
+            /*preferTypeOnlyImport*/ false, 
+            /*useRequire*/ false, exportInfo, host, preferences, fromCacheOnly), fixes = _a.fixes, computedWithoutCacheCount = _a.computedWithoutCacheCount;
+            var result = getBestFix(fixes, importingFile, program, host, preferences);
+            return result && __assign(__assign({}, result), { computedWithoutCacheCount: computedWithoutCacheCount });
         }
         codefix.getModuleSpecifierForBestExportInfo = getModuleSpecifierForBestExportInfo;
-        function getSymbolToExportInfoMap(importingFile, host, program) {
-            var _a, _b, _c, _d, _e, _f, _g, _h;
-            var start = ts.timestamp();
-            // Pulling the AutoImportProvider project will trigger its updateGraph if pending,
-            // which will invalidate the export map cache if things change, so pull it before
-            // checking the cache.
-            (_a = host.getPackageJsonAutoImportProvider) === null || _a === void 0 ? void 0 : _a.call(host);
-            var cache = (_b = host.getExportMapCache) === null || _b === void 0 ? void 0 : _b.call(host);
-            if (cache) {
-                var cached = cache.get(importingFile.path, program.getTypeChecker(), (_c = host.getProjectVersion) === null || _c === void 0 ? void 0 : _c.call(host));
-                if (cached) {
-                    (_d = host.log) === null || _d === void 0 ? void 0 : _d.call(host, "getSymbolToExportInfoMap: cache hit");
-                    return cached;
-                }
-                else {
-                    (_e = host.log) === null || _e === void 0 ? void 0 : _e.call(host, "getSymbolToExportInfoMap: cache miss or empty; calculating new results");
-                }
-            }
-            var result = ts.createMultiMap();
-            var compilerOptions = program.getCompilerOptions();
-            var target = ts.getEmitScriptTarget(compilerOptions);
-            forEachExternalModuleToImportFrom(program, host, /*useAutoImportProvider*/ true, function (moduleSymbol, _moduleFile, program, isFromPackageJson) {
-                var checker = program.getTypeChecker();
-                var defaultInfo = getDefaultLikeExportInfo(moduleSymbol, checker, compilerOptions);
-                if (defaultInfo) {
-                    var name = ts.getNameForExportedSymbol(ts.getLocalSymbolForExportDefault(defaultInfo.symbol) || defaultInfo.symbol, target);
-                    result.add(key(name, defaultInfo.symbol, moduleSymbol, checker), { symbol: defaultInfo.symbol, moduleSymbol: moduleSymbol, exportKind: defaultInfo.exportKind, exportedSymbolIsTypeOnly: isTypeOnlySymbol(defaultInfo.symbol, checker), isFromPackageJson: isFromPackageJson });
-                }
-                var seenExports = new ts.Map();
-                for (var _i = 0, _a = checker.getExportsAndPropertiesOfModule(moduleSymbol); _i < _a.length; _i++) {
-                    var exported = _a[_i];
-                    if (exported !== (defaultInfo === null || defaultInfo === void 0 ? void 0 : defaultInfo.symbol) && ts.addToSeen(seenExports, exported)) {
-                        result.add(key(ts.getNameForExportedSymbol(exported, target), exported, moduleSymbol, checker), { symbol: exported, moduleSymbol: moduleSymbol, exportKind: 0 /* Named */, exportedSymbolIsTypeOnly: isTypeOnlySymbol(exported, checker), isFromPackageJson: isFromPackageJson });
-                    }
-                }
-            });
-            if (cache) {
-                (_f = host.log) === null || _f === void 0 ? void 0 : _f.call(host, "getSymbolToExportInfoMap: caching results");
-                cache.set(result, (_g = host.getProjectVersion) === null || _g === void 0 ? void 0 : _g.call(host));
-            }
-            (_h = host.log) === null || _h === void 0 ? void 0 : _h.call(host, "getSymbolToExportInfoMap: done in " + (ts.timestamp() - start) + " ms");
-            return result;
-            function key(name, alias, moduleSymbol, checker) {
-                var moduleName = ts.stripQuotes(moduleSymbol.name);
-                var moduleKey = ts.isExternalModuleNameRelative(moduleName) ? "/" : moduleName;
-                return name + "|" + ts.getSymbolId(ts.skipAlias(alias, checker)) + "|" + moduleKey;
-            }
-        }
-        codefix.getSymbolToExportInfoMap = getSymbolToExportInfoMap;
-        function isTypeOnlySymbol(s, checker) {
-            return !(ts.skipAlias(s, checker).flags & 111551 /* Value */);
-        }
         function isTypeOnlyPosition(sourceFile, position) {
             return ts.isValidTypeOnlyAliasUseSite(ts.getTokenAtPosition(sourceFile, position));
         }
@@ -142684,7 +145919,7 @@
             var addToExisting = tryAddToExistingImport(existingImports, position !== undefined && isTypeOnlyPosition(sourceFile, position));
             // Don't bother providing an action to add a new import if we can add to an existing one.
             var addImport = addToExisting ? [addToExisting] : getFixesForAddImport(exportInfos, existingImports, program, sourceFile, position, preferTypeOnlyImport, useRequire, host, preferences);
-            return __spreadArray(__spreadArray([], (useNamespace ? [useNamespace] : ts.emptyArray)), addImport);
+            return __spreadArray(__spreadArray([], (useNamespace ? [useNamespace] : ts.emptyArray), true), addImport, true);
         }
         function tryUseExistingNamespaceImport(existingImports, symbolName, position, checker) {
             // It is possible that multiple import statements with the same specifier exist in the file.
@@ -142714,11 +145949,11 @@
         function getTargetModuleFromNamespaceLikeImport(declaration, checker) {
             var _a;
             switch (declaration.kind) {
-                case 250 /* VariableDeclaration */:
+                case 252 /* VariableDeclaration */:
                     return checker.resolveExternalModuleName(declaration.initializer.arguments[0]);
-                case 261 /* ImportEqualsDeclaration */:
+                case 263 /* ImportEqualsDeclaration */:
                     return checker.getAliasedSymbol(declaration.symbol);
-                case 262 /* ImportDeclaration */:
+                case 264 /* ImportDeclaration */:
                     var namespaceImport = ts.tryCast((_a = declaration.importClause) === null || _a === void 0 ? void 0 : _a.namedBindings, ts.isNamespaceImport);
                     return namespaceImport && checker.getAliasedSymbol(namespaceImport.symbol);
                 default:
@@ -142728,11 +145963,11 @@
         function getNamespaceLikeImportText(declaration) {
             var _a, _b, _c;
             switch (declaration.kind) {
-                case 250 /* VariableDeclaration */:
+                case 252 /* VariableDeclaration */:
                     return (_a = ts.tryCast(declaration.name, ts.isIdentifier)) === null || _a === void 0 ? void 0 : _a.text;
-                case 261 /* ImportEqualsDeclaration */:
+                case 263 /* ImportEqualsDeclaration */:
                     return declaration.name.text;
-                case 262 /* ImportDeclaration */:
+                case 264 /* ImportDeclaration */:
                     return (_c = ts.tryCast((_b = declaration.importClause) === null || _b === void 0 ? void 0 : _b.namedBindings, ts.isNamespaceImport)) === null || _c === void 0 ? void 0 : _c.name.text;
                 default:
                     return ts.Debug.assertNever(declaration);
@@ -142741,10 +145976,10 @@
         function tryAddToExistingImport(existingImports, canUseTypeOnlyImport) {
             return ts.firstDefined(existingImports, function (_a) {
                 var declaration = _a.declaration, importKind = _a.importKind;
-                if (declaration.kind === 261 /* ImportEqualsDeclaration */)
+                if (declaration.kind === 263 /* ImportEqualsDeclaration */)
                     return undefined;
-                if (declaration.kind === 250 /* VariableDeclaration */) {
-                    return (importKind === 0 /* Named */ || importKind === 1 /* Default */) && declaration.name.kind === 197 /* ObjectBindingPattern */
+                if (declaration.kind === 252 /* VariableDeclaration */) {
+                    return (importKind === 0 /* Named */ || importKind === 1 /* Default */) && declaration.name.kind === 199 /* ObjectBindingPattern */
                         ? { kind: 2 /* AddToExisting */, importClauseOrBindingPattern: declaration.name, importKind: importKind, moduleSpecifier: declaration.initializer.arguments[0].text, canUseTypeOnlyImport: false }
                         : undefined;
                 }
@@ -142756,15 +145991,15 @@
                 // be added to an existing type-only import is adding a named import to existing named bindings.
                 if (importClause.isTypeOnly && !(importKind === 0 /* Named */ && namedBindings))
                     return undefined;
-                return importKind === 1 /* Default */ && !name || importKind === 0 /* Named */ && (!namedBindings || namedBindings.kind === 265 /* NamedImports */)
+                return importKind === 1 /* Default */ && !name || importKind === 0 /* Named */ && (!namedBindings || namedBindings.kind === 267 /* NamedImports */)
                     ? { kind: 2 /* AddToExisting */, importClauseOrBindingPattern: importClause, importKind: importKind, moduleSpecifier: declaration.moduleSpecifier.text, canUseTypeOnlyImport: canUseTypeOnlyImport }
                     : undefined;
             });
         }
         function getExistingImportDeclarations(_a, checker, importingFile, compilerOptions) {
-            var moduleSymbol = _a.moduleSymbol, exportKind = _a.exportKind, exportedSymbolIsTypeOnly = _a.exportedSymbolIsTypeOnly;
+            var moduleSymbol = _a.moduleSymbol, exportKind = _a.exportKind, targetFlags = _a.targetFlags;
             // Can't use an es6 import for a type in JS.
-            if (exportedSymbolIsTypeOnly && ts.isSourceFileJS(importingFile))
+            if (!(targetFlags & 111551 /* Value */) && ts.isSourceFileJS(importingFile))
                 return ts.emptyArray;
             var importKind = getImportKind(importingFile, exportKind, compilerOptions);
             return ts.mapDefined(importingFile.imports, function (moduleSpecifier) {
@@ -142772,7 +146007,7 @@
                 if (ts.isRequireVariableDeclaration(i.parent)) {
                     return checker.resolveExternalModuleName(moduleSpecifier) === moduleSymbol ? { declaration: i.parent, importKind: importKind } : undefined;
                 }
-                if (i.kind === 262 /* ImportDeclaration */ || i.kind === 261 /* ImportEqualsDeclaration */) {
+                if (i.kind === 264 /* ImportDeclaration */ || i.kind === 263 /* ImportEqualsDeclaration */) {
                     return checker.getSymbolAtLocation(moduleSpecifier) === moduleSymbol ? { declaration: i, importKind: importKind } : undefined;
                 }
             });
@@ -142805,23 +146040,37 @@
             // 5. Literally nothing to go on
             return true;
         }
-        function getNewImportFixes(program, sourceFile, position, preferTypeOnlyImport, useRequire, moduleSymbols, host, preferences) {
+        function getNewImportFixes(program, sourceFile, position, preferTypeOnlyImport, useRequire, moduleSymbols, host, preferences, fromCacheOnly) {
             var isJs = ts.isSourceFileJS(sourceFile);
             var compilerOptions = program.getCompilerOptions();
             var moduleSpecifierResolutionHost = ts.createModuleSpecifierResolutionHost(program, host);
-            return ts.flatMap(moduleSymbols, function (exportInfo) {
-                return ts.moduleSpecifiers.getModuleSpecifiers(exportInfo.moduleSymbol, program.getTypeChecker(), compilerOptions, sourceFile, moduleSpecifierResolutionHost, preferences)
-                    .map(function (moduleSpecifier) {
+            var checker = program.getTypeChecker();
+            var getModuleSpecifiers = fromCacheOnly
+                ? function (moduleSymbol) { return ({ moduleSpecifiers: ts.moduleSpecifiers.tryGetModuleSpecifiersFromCache(moduleSymbol, sourceFile, moduleSpecifierResolutionHost, preferences), computedWithoutCache: false }); }
+                : function (moduleSymbol) { return ts.moduleSpecifiers.getModuleSpecifiersWithCacheInfo(moduleSymbol, checker, compilerOptions, sourceFile, moduleSpecifierResolutionHost, preferences); };
+            var computedWithoutCacheCount = 0;
+            var fixes = ts.flatMap(moduleSymbols, function (exportInfo) {
+                var _a = getModuleSpecifiers(exportInfo.moduleSymbol), computedWithoutCache = _a.computedWithoutCache, moduleSpecifiers = _a.moduleSpecifiers;
+                computedWithoutCacheCount += computedWithoutCache ? 1 : 0;
+                return moduleSpecifiers === null || moduleSpecifiers === void 0 ? void 0 : moduleSpecifiers.map(function (moduleSpecifier) {
                     // `position` should only be undefined at a missing jsx namespace, in which case we shouldn't be looking for pure types.
-                    return exportInfo.exportedSymbolIsTypeOnly && isJs && position !== undefined
+                    return !(exportInfo.targetFlags & 111551 /* Value */) && isJs && position !== undefined
                         ? { kind: 1 /* ImportType */, moduleSpecifier: moduleSpecifier, position: position, exportInfo: exportInfo }
-                        : { kind: 3 /* AddNew */, moduleSpecifier: moduleSpecifier, importKind: getImportKind(sourceFile, exportInfo.exportKind, compilerOptions), useRequire: useRequire, typeOnly: preferTypeOnlyImport, exportInfo: exportInfo };
+                        : {
+                            kind: 3 /* AddNew */,
+                            moduleSpecifier: moduleSpecifier,
+                            importKind: getImportKind(sourceFile, exportInfo.exportKind, compilerOptions),
+                            useRequire: useRequire,
+                            typeOnly: preferTypeOnlyImport,
+                            exportInfo: exportInfo,
+                        };
                 });
             });
+            return { computedWithoutCacheCount: computedWithoutCacheCount, fixes: fixes };
         }
         function getFixesForAddImport(exportInfos, existingImports, program, sourceFile, position, preferTypeOnlyImport, useRequire, host, preferences) {
             var existingDeclaration = ts.firstDefined(existingImports, function (info) { return newImportInfoFromExistingSpecifier(info, preferTypeOnlyImport, useRequire); });
-            return existingDeclaration ? [existingDeclaration] : getNewImportFixes(program, sourceFile, position, preferTypeOnlyImport, useRequire, exportInfos, host, preferences);
+            return existingDeclaration ? [existingDeclaration] : getNewImportFixes(program, sourceFile, position, preferTypeOnlyImport, useRequire, exportInfos, host, preferences).fixes;
         }
         function newImportInfoFromExistingSpecifier(_a, preferTypeOnlyImport, useRequire) {
             var declaration = _a.declaration, importKind = _a.importKind;
@@ -142835,29 +146084,39 @@
             var info = errorCode === ts.Diagnostics._0_refers_to_a_UMD_global_but_the_current_file_is_a_module_Consider_adding_an_import_instead.code
                 ? getFixesInfoForUMDImport(context, symbolToken)
                 : ts.isIdentifier(symbolToken) ? getFixesInfoForNonUMDImport(context, symbolToken, useAutoImportProvider) : undefined;
-            return info && __assign(__assign({}, info), { fixes: sortFixes(info.fixes, context.sourceFile, context.host) });
+            return info && __assign(__assign({}, info), { fixes: sortFixes(info.fixes, context.sourceFile, context.program, context.host, context.preferences) });
         }
-        function sortFixes(fixes, sourceFile, host) {
-            var allowsImportingSpecifier = ts.createPackageJsonImportFilter(sourceFile, host).allowsImportingSpecifier;
-            return ts.sort(fixes, function (a, b) { return ts.compareValues(a.kind, b.kind) || compareModuleSpecifiers(a, b, allowsImportingSpecifier); });
+        function sortFixes(fixes, sourceFile, program, host, preferences) {
+            var allowsImportingSpecifier = ts.createPackageJsonImportFilter(sourceFile, preferences, host).allowsImportingSpecifier;
+            return ts.sort(fixes, function (a, b) { return ts.compareValues(a.kind, b.kind) || compareModuleSpecifiers(a, b, sourceFile, program, allowsImportingSpecifier); });
         }
-        function getBestFix(fixes, sourceFile, host) {
+        function getBestFix(fixes, sourceFile, program, host, preferences) {
+            if (!ts.some(fixes))
+                return;
             // These will always be placed first if available, and are better than other kinds
             if (fixes[0].kind === 0 /* UseNamespace */ || fixes[0].kind === 2 /* AddToExisting */) {
                 return fixes[0];
             }
-            var allowsImportingSpecifier = ts.createPackageJsonImportFilter(sourceFile, host).allowsImportingSpecifier;
+            var allowsImportingSpecifier = ts.createPackageJsonImportFilter(sourceFile, preferences, host).allowsImportingSpecifier;
             return fixes.reduce(function (best, fix) {
-                return compareModuleSpecifiers(fix, best, allowsImportingSpecifier) === -1 /* LessThan */ ? fix : best;
+                return compareModuleSpecifiers(fix, best, sourceFile, program, allowsImportingSpecifier) === -1 /* LessThan */ ? fix : best;
             });
         }
-        function compareModuleSpecifiers(a, b, allowsImportingSpecifier) {
+        function compareModuleSpecifiers(a, b, importingFile, program, allowsImportingSpecifier) {
             if (a.kind !== 0 /* UseNamespace */ && b.kind !== 0 /* UseNamespace */) {
                 return ts.compareBooleans(allowsImportingSpecifier(a.moduleSpecifier), allowsImportingSpecifier(b.moduleSpecifier))
+                    || compareNodeCoreModuleSpecifiers(a.moduleSpecifier, b.moduleSpecifier, importingFile, program)
                     || ts.compareNumberOfDirectorySeparators(a.moduleSpecifier, b.moduleSpecifier);
             }
             return 0 /* EqualTo */;
         }
+        function compareNodeCoreModuleSpecifiers(a, b, importingFile, program) {
+            if (ts.startsWith(a, "node:") && !ts.startsWith(b, "node:"))
+                return ts.shouldUseUriStyleNodeCoreModules(importingFile, program) ? -1 /* LessThan */ : 1 /* GreaterThan */;
+            if (ts.startsWith(b, "node:") && !ts.startsWith(a, "node:"))
+                return ts.shouldUseUriStyleNodeCoreModules(importingFile, program) ? 1 /* GreaterThan */ : -1 /* LessThan */;
+            return 0 /* EqualTo */;
+        }
         function getFixesInfoForUMDImport(_a, token) {
             var sourceFile = _a.sourceFile, program = _a.program, host = _a.host, preferences = _a.preferences;
             var checker = program.getTypeChecker();
@@ -142866,7 +146125,7 @@
                 return undefined;
             var symbol = checker.getAliasedSymbol(umdSymbol);
             var symbolName = umdSymbol.name;
-            var exportInfos = [{ symbol: umdSymbol, moduleSymbol: symbol, exportKind: 3 /* UMD */, exportedSymbolIsTypeOnly: false, isFromPackageJson: false }];
+            var exportInfos = [{ symbol: umdSymbol, moduleSymbol: symbol, moduleFileName: undefined, exportKind: 3 /* UMD */, targetFlags: symbol.flags, isFromPackageJson: false }];
             var useRequire = shouldUseRequire(sourceFile, program);
             var fixes = getImportFixes(exportInfos, symbolName, ts.isIdentifier(token) ? token.getStart(sourceFile) : undefined, /*preferTypeOnlyImport*/ false, useRequire, program, sourceFile, host, preferences);
             return { fixes: fixes, symbolName: symbolName };
@@ -142882,17 +146141,21 @@
                 ? ts.tryCast(checker.resolveName(checker.getJsxNamespace(parent), ts.isJsxOpeningLikeElement(parent) ? token : parent, 111551 /* Value */, /*excludeGlobals*/ false), ts.isUMDExportSymbol)
                 : undefined;
         }
-        function getImportKind(importingFile, exportKind, compilerOptions) {
+        /**
+         * @param forceImportKeyword Indicates that the user has already typed `import`, so the result must start with `import`.
+         * (In other words, do not allow `const x = require("...")` for JS files.)
+         */
+        function getImportKind(importingFile, exportKind, compilerOptions, forceImportKeyword) {
             switch (exportKind) {
                 case 0 /* Named */: return 0 /* Named */;
                 case 1 /* Default */: return 1 /* Default */;
-                case 2 /* ExportEquals */: return getExportEqualsImportKind(importingFile, compilerOptions);
-                case 3 /* UMD */: return getUmdImportKind(importingFile, compilerOptions);
+                case 2 /* ExportEquals */: return getExportEqualsImportKind(importingFile, compilerOptions, !!forceImportKeyword);
+                case 3 /* UMD */: return getUmdImportKind(importingFile, compilerOptions, !!forceImportKeyword);
                 default: return ts.Debug.assertNever(exportKind);
             }
         }
         codefix.getImportKind = getImportKind;
-        function getUmdImportKind(importingFile, compilerOptions) {
+        function getUmdImportKind(importingFile, compilerOptions, forceImportKeyword) {
             // Import a synthetic `default` if enabled.
             if (ts.getAllowSyntheticDefaultImports(compilerOptions)) {
                 return 1 /* Default */;
@@ -142904,7 +146167,7 @@
                 case ts.ModuleKind.CommonJS:
                 case ts.ModuleKind.UMD:
                     if (ts.isInJSFile(importingFile)) {
-                        return ts.isExternalModule(importingFile) ? 2 /* Namespace */ : 3 /* CommonJS */;
+                        return ts.isExternalModule(importingFile) || forceImportKeyword ? 2 /* Namespace */ : 3 /* CommonJS */;
                     }
                     return 3 /* CommonJS */;
                 case ts.ModuleKind.System:
@@ -142927,7 +146190,7 @@
             ts.Debug.assert(symbolName !== "default" /* Default */, "'default' isn't a legal identifier and couldn't occur here");
             var preferTypeOnlyImport = compilerOptions.importsNotUsedAsValues === 2 /* Error */ && ts.isValidTypeOnlyAliasUseSite(symbolToken);
             var useRequire = shouldUseRequire(sourceFile, program);
-            var exportInfos = getExportInfos(symbolName, ts.getMeaningFromLocation(symbolToken), cancellationToken, sourceFile, program, useAutoImportProvider, host);
+            var exportInfos = getExportInfos(symbolName, ts.getMeaningFromLocation(symbolToken), cancellationToken, sourceFile, program, useAutoImportProvider, host, preferences);
             var fixes = ts.arrayFrom(ts.flatMapIterator(exportInfos.entries(), function (_a) {
                 var _ = _a[0], exportInfos = _a[1];
                 return getImportFixes(exportInfos, symbolName, symbolToken.getStart(sourceFile), preferTypeOnlyImport, useRequire, program, sourceFile, host, preferences);
@@ -142945,29 +146208,29 @@
             return symbolToken.text;
         }
         // Returns a map from an exported symbol's ID to a list of every way it's (re-)exported.
-        function getExportInfos(symbolName, currentTokenMeaning, cancellationToken, fromFile, program, useAutoImportProvider, host) {
+        function getExportInfos(symbolName, currentTokenMeaning, cancellationToken, fromFile, program, useAutoImportProvider, host, preferences) {
             var _a;
             // For each original symbol, keep all re-exports of that symbol together so we can call `getCodeActionsForImport` on the whole group at once.
             // Maps symbol id to info for modules providing that symbol (original export + re-exports).
             var originalSymbolToExportInfos = ts.createMultiMap();
-            var packageJsonFilter = ts.createPackageJsonImportFilter(fromFile, host);
+            var packageJsonFilter = ts.createPackageJsonImportFilter(fromFile, preferences, host);
             var moduleSpecifierCache = (_a = host.getModuleSpecifierCache) === null || _a === void 0 ? void 0 : _a.call(host);
             var getModuleSpecifierResolutionHost = ts.memoizeOne(function (isFromPackageJson) {
                 return ts.createModuleSpecifierResolutionHost(isFromPackageJson ? host.getPackageJsonAutoImportProvider() : program, host);
             });
             function addSymbol(moduleSymbol, toFile, exportedSymbol, exportKind, program, isFromPackageJson) {
                 var moduleSpecifierResolutionHost = getModuleSpecifierResolutionHost(isFromPackageJson);
-                if (toFile && ts.isImportableFile(program, fromFile, toFile, packageJsonFilter, moduleSpecifierResolutionHost, moduleSpecifierCache) ||
+                if (toFile && ts.isImportableFile(program, fromFile, toFile, preferences, packageJsonFilter, moduleSpecifierResolutionHost, moduleSpecifierCache) ||
                     !toFile && packageJsonFilter.allowsImportingAmbientModule(moduleSymbol, moduleSpecifierResolutionHost)) {
                     var checker = program.getTypeChecker();
-                    originalSymbolToExportInfos.add(ts.getUniqueSymbolId(exportedSymbol, checker).toString(), { symbol: exportedSymbol, moduleSymbol: moduleSymbol, exportKind: exportKind, exportedSymbolIsTypeOnly: isTypeOnlySymbol(exportedSymbol, checker), isFromPackageJson: isFromPackageJson });
+                    originalSymbolToExportInfos.add(ts.getUniqueSymbolId(exportedSymbol, checker).toString(), { symbol: exportedSymbol, moduleSymbol: moduleSymbol, moduleFileName: toFile === null || toFile === void 0 ? void 0 : toFile.fileName, exportKind: exportKind, targetFlags: ts.skipAlias(exportedSymbol, checker).flags, isFromPackageJson: isFromPackageJson });
                 }
             }
-            forEachExternalModuleToImportFrom(program, host, useAutoImportProvider, function (moduleSymbol, sourceFile, program, isFromPackageJson) {
+            ts.forEachExternalModuleToImportFrom(program, host, useAutoImportProvider, function (moduleSymbol, sourceFile, program, isFromPackageJson) {
                 var checker = program.getTypeChecker();
                 cancellationToken.throwIfCancellationRequested();
                 var compilerOptions = program.getCompilerOptions();
-                var defaultInfo = getDefaultLikeExportInfo(moduleSymbol, checker, compilerOptions);
+                var defaultInfo = ts.getDefaultLikeExportInfo(moduleSymbol, checker, compilerOptions);
                 if (defaultInfo && (defaultInfo.name === symbolName || moduleSymbolToValidIdentifier(moduleSymbol, compilerOptions.target) === symbolName) && symbolHasMeaning(defaultInfo.symbolForMeaning, currentTokenMeaning)) {
                     addSymbol(moduleSymbol, sourceFile, defaultInfo.symbol, defaultInfo.exportKind, program, isFromPackageJson);
                 }
@@ -142979,33 +146242,20 @@
             });
             return originalSymbolToExportInfos;
         }
-        function getDefaultLikeExportInfo(moduleSymbol, checker, compilerOptions) {
-            var exported = getDefaultLikeExportWorker(moduleSymbol, checker);
-            if (!exported)
-                return undefined;
-            var symbol = exported.symbol, exportKind = exported.exportKind;
-            var info = getDefaultExportInfoWorker(symbol, checker, compilerOptions);
-            return info && __assign({ symbol: symbol, exportKind: exportKind }, info);
-        }
-        function getDefaultLikeExportWorker(moduleSymbol, checker) {
-            var exportEquals = checker.resolveExternalModuleSymbol(moduleSymbol);
-            if (exportEquals !== moduleSymbol)
-                return { symbol: exportEquals, exportKind: 2 /* ExportEquals */ };
-            var defaultExport = checker.tryGetMemberInModuleExports("default" /* Default */, moduleSymbol);
-            if (defaultExport)
-                return { symbol: defaultExport, exportKind: 1 /* Default */ };
-        }
-        function getExportEqualsImportKind(importingFile, compilerOptions) {
+        function getExportEqualsImportKind(importingFile, compilerOptions, forceImportKeyword) {
             var allowSyntheticDefaults = ts.getAllowSyntheticDefaultImports(compilerOptions);
-            // 1. 'import =' will not work in es2015+, so the decision is between a default
+            var isJS = ts.isInJSFile(importingFile);
+            // 1. 'import =' will not work in es2015+ TS files, so the decision is between a default
             //    and a namespace import, based on allowSyntheticDefaultImports/esModuleInterop.
-            if (ts.getEmitModuleKind(compilerOptions) >= ts.ModuleKind.ES2015) {
+            if (!isJS && ts.getEmitModuleKind(compilerOptions) >= ts.ModuleKind.ES2015) {
                 return allowSyntheticDefaults ? 1 /* Default */ : 2 /* Namespace */;
             }
-            // 2. 'import =' will not work in JavaScript, so the decision is between a default
-            //    and const/require.
-            if (ts.isInJSFile(importingFile)) {
-                return ts.isExternalModule(importingFile) ? 1 /* Default */ : 3 /* CommonJS */;
+            // 2. 'import =' will not work in JavaScript, so the decision is between a default import,
+            //    a namespace import, and const/require.
+            if (isJS) {
+                return ts.isExternalModule(importingFile) || forceImportKeyword
+                    ? allowSyntheticDefaults ? 1 /* Default */ : 2 /* Namespace */
+                    : 3 /* CommonJS */;
             }
             // 3. At this point the most correct choice is probably 'import =', but people
             //    really hate that, so look to see if the importing file has any precedent
@@ -143021,41 +146271,6 @@
             //    allowSyntheticDefaultImports/esModuleInterop is enabled.
             return allowSyntheticDefaults ? 1 /* Default */ : 3 /* CommonJS */;
         }
-        function getDefaultExportInfoWorker(defaultExport, checker, compilerOptions) {
-            var localSymbol = ts.getLocalSymbolForExportDefault(defaultExport);
-            if (localSymbol)
-                return { symbolForMeaning: localSymbol, name: localSymbol.name };
-            var name = getNameForExportDefault(defaultExport);
-            if (name !== undefined)
-                return { symbolForMeaning: defaultExport, name: name };
-            if (defaultExport.flags & 2097152 /* Alias */) {
-                var aliased = checker.getImmediateAliasedSymbol(defaultExport);
-                if (aliased && aliased.parent) {
-                    // - `aliased` will be undefined if the module is exporting an unresolvable name,
-                    //    but we can still offer completions for it.
-                    // - `aliased.parent` will be undefined if the module is exporting `globalThis.something`,
-                    //    or another expression that resolves to a global.
-                    return getDefaultExportInfoWorker(aliased, checker, compilerOptions);
-                }
-            }
-            if (defaultExport.escapedName !== "default" /* Default */ &&
-                defaultExport.escapedName !== "export=" /* ExportEquals */) {
-                return { symbolForMeaning: defaultExport, name: defaultExport.getName() };
-            }
-            return { symbolForMeaning: defaultExport, name: ts.getNameForExportedSymbol(defaultExport, compilerOptions.target) };
-        }
-        function getNameForExportDefault(symbol) {
-            return symbol.declarations && ts.firstDefined(symbol.declarations, function (declaration) {
-                var _a;
-                if (ts.isExportAssignment(declaration)) {
-                    return (_a = ts.tryCast(ts.skipOuterExpressions(declaration.expression), ts.isIdentifier)) === null || _a === void 0 ? void 0 : _a.text;
-                }
-                else if (ts.isExportSpecifier(declaration)) {
-                    ts.Debug.assert(declaration.name.text === "default" /* Default */, "Expected the specifier to be a default export");
-                    return declaration.propertyName && declaration.propertyName.text;
-                }
-            });
-        }
         function codeActionForFix(context, sourceFile, symbolName, fix, quotePreference) {
             var diag;
             var changes = ts.textChanges.ChangeTracker.with(context, function (tracker) {
@@ -143091,7 +146306,7 @@
             }
         }
         function doAddExistingFix(changes, sourceFile, clause, defaultImport, namedImports, canUseTypeOnlyImport) {
-            if (clause.kind === 197 /* ObjectBindingPattern */) {
+            if (clause.kind === 199 /* ObjectBindingPattern */) {
                 if (defaultImport) {
                     addElementToBindingPattern(clause, defaultImport, "default");
                 }
@@ -143218,31 +146433,6 @@
             var declarations = _a.declarations;
             return ts.some(declarations, function (decl) { return !!(ts.getMeaningFromDeclaration(decl) & meaning); });
         }
-        function forEachExternalModuleToImportFrom(program, host, useAutoImportProvider, cb) {
-            var _a, _b;
-            forEachExternalModule(program.getTypeChecker(), program.getSourceFiles(), function (module, file) { return cb(module, file, program, /*isFromPackageJson*/ false); });
-            var autoImportProvider = useAutoImportProvider && ((_a = host.getPackageJsonAutoImportProvider) === null || _a === void 0 ? void 0 : _a.call(host));
-            if (autoImportProvider) {
-                var start = ts.timestamp();
-                forEachExternalModule(autoImportProvider.getTypeChecker(), autoImportProvider.getSourceFiles(), function (module, file) { return cb(module, file, autoImportProvider, /*isFromPackageJson*/ true); });
-                (_b = host.log) === null || _b === void 0 ? void 0 : _b.call(host, "forEachExternalModuleToImportFrom autoImportProvider: " + (ts.timestamp() - start));
-            }
-        }
-        codefix.forEachExternalModuleToImportFrom = forEachExternalModuleToImportFrom;
-        function forEachExternalModule(checker, allSourceFiles, cb) {
-            for (var _i = 0, _a = checker.getAmbientModules(); _i < _a.length; _i++) {
-                var ambient = _a[_i];
-                if (!ts.stringContains(ambient.name, "*")) {
-                    cb(ambient, /*sourceFile*/ undefined);
-                }
-            }
-            for (var _b = 0, allSourceFiles_1 = allSourceFiles; _b < allSourceFiles_1.length; _b++) {
-                var sourceFile = allSourceFiles_1[_b];
-                if (ts.isExternalOrCommonJsModule(sourceFile)) {
-                    cb(checker.getMergedSymbol(sourceFile.symbol), sourceFile);
-                }
-            }
-        }
         function moduleSymbolToValidIdentifier(moduleSymbol, target) {
             return moduleSpecifierToValidIdentifier(ts.removeFileExtension(ts.stripQuotes(moduleSymbol.name)), target);
         }
@@ -143353,28 +146543,30 @@
             var classElement = findContainerClassElementLike(sourceFile, pos);
             var modifiers = classElement.modifiers || ts.emptyArray;
             var staticModifier = ts.find(modifiers, ts.isStaticModifier);
+            var abstractModifier = ts.find(modifiers, ts.isAbstractModifier);
             var accessibilityModifier = ts.find(modifiers, function (m) { return ts.isAccessibilityModifier(m.kind); });
-            var modifierPos = staticModifier ? staticModifier.end :
-                accessibilityModifier ? accessibilityModifier.end :
-                    classElement.decorators ? ts.skipTrivia(sourceFile.text, classElement.decorators.end) : classElement.getStart(sourceFile);
-            var options = accessibilityModifier || staticModifier ? { prefix: " " } : { suffix: " " };
-            changeTracker.insertModifierAt(sourceFile, modifierPos, 156 /* OverrideKeyword */, options);
+            var modifierPos = abstractModifier ? abstractModifier.end :
+                staticModifier ? staticModifier.end :
+                    accessibilityModifier ? accessibilityModifier.end :
+                        classElement.decorators ? ts.skipTrivia(sourceFile.text, classElement.decorators.end) : classElement.getStart(sourceFile);
+            var options = accessibilityModifier || staticModifier || abstractModifier ? { prefix: " " } : { suffix: " " };
+            changeTracker.insertModifierAt(sourceFile, modifierPos, 157 /* OverrideKeyword */, options);
         }
         function doRemoveOverrideModifierChange(changeTracker, sourceFile, pos) {
             var classElement = findContainerClassElementLike(sourceFile, pos);
-            var overrideModifier = classElement.modifiers && ts.find(classElement.modifiers, function (modifier) { return modifier.kind === 156 /* OverrideKeyword */; });
+            var overrideModifier = classElement.modifiers && ts.find(classElement.modifiers, function (modifier) { return modifier.kind === 157 /* OverrideKeyword */; });
             ts.Debug.assertIsDefined(overrideModifier);
             changeTracker.deleteModifier(sourceFile, overrideModifier);
         }
         function isClassElementLikeHasJSDoc(node) {
             switch (node.kind) {
-                case 167 /* Constructor */:
-                case 164 /* PropertyDeclaration */:
-                case 166 /* MethodDeclaration */:
-                case 168 /* GetAccessor */:
-                case 169 /* SetAccessor */:
+                case 169 /* Constructor */:
+                case 165 /* PropertyDeclaration */:
+                case 167 /* MethodDeclaration */:
+                case 170 /* GetAccessor */:
+                case 171 /* SetAccessor */:
                     return true;
-                case 161 /* Parameter */:
+                case 162 /* Parameter */:
                     return ts.isParameterPropertyDeclaration(node, node.parent);
                 default:
                     return false;
@@ -143450,12 +146642,12 @@
         });
         function doChange(changes, sourceFile, pos, checker) {
             var token = ts.getTokenAtPosition(sourceFile, pos);
-            ts.Debug.assert(token.kind === 107 /* ThisKeyword */);
+            ts.Debug.assert(token.kind === 108 /* ThisKeyword */);
             var fn = ts.getThisContainer(token, /*includeArrowFunctions*/ false);
             if (!ts.isFunctionDeclaration(fn) && !ts.isFunctionExpression(fn))
                 return undefined;
             if (!ts.isSourceFile(ts.getThisContainer(fn, /*includeArrowFunctions*/ false))) { // 'this' is defined outside, convert to arrow function
-                var fnKeyword = ts.Debug.assertDefined(ts.findChildOfKind(fn, 97 /* FunctionKeyword */, sourceFile));
+                var fnKeyword = ts.Debug.assertDefined(ts.findChildOfKind(fn, 98 /* FunctionKeyword */, sourceFile));
                 var name = fn.name;
                 var body = ts.Debug.assertDefined(fn.body); // Should be defined because the function contained a 'this' expression
                 if (ts.isFunctionExpression(fn)) {
@@ -143474,7 +146666,7 @@
                 else {
                     // `function f() {}` => `const f = () => {}`
                     // `name` should be defined because we only do this in inner contexts, and name is only undefined for `export default function() {}`.
-                    changes.replaceNode(sourceFile, fnKeyword, ts.factory.createToken(84 /* ConstKeyword */));
+                    changes.replaceNode(sourceFile, fnKeyword, ts.factory.createToken(85 /* ConstKeyword */));
                     changes.insertText(sourceFile, name.end, " = ");
                     changes.insertText(sourceFile, body.pos, " =>");
                     return [ts.Diagnostics.Convert_function_declaration_0_to_arrow_function, name.text];
@@ -143505,7 +146697,7 @@
         });
         function getNamedTupleMember(sourceFile, pos) {
             var token = ts.getTokenAtPosition(sourceFile, pos);
-            return ts.findAncestor(token, function (t) { return t.kind === 193 /* NamedTupleMember */; });
+            return ts.findAncestor(token, function (t) { return t.kind === 195 /* NamedTupleMember */; });
         }
         function doChange(changes, sourceFile, namedTupleMember) {
             if (!namedTupleMember) {
@@ -143514,11 +146706,11 @@
             var unwrappedType = namedTupleMember.type;
             var sawOptional = false;
             var sawRest = false;
-            while (unwrappedType.kind === 181 /* OptionalType */ || unwrappedType.kind === 182 /* RestType */ || unwrappedType.kind === 187 /* ParenthesizedType */) {
-                if (unwrappedType.kind === 181 /* OptionalType */) {
+            while (unwrappedType.kind === 183 /* OptionalType */ || unwrappedType.kind === 184 /* RestType */ || unwrappedType.kind === 189 /* ParenthesizedType */) {
+                if (unwrappedType.kind === 183 /* OptionalType */) {
                     sawOptional = true;
                 }
-                else if (unwrappedType.kind === 182 /* RestType */) {
+                else if (unwrappedType.kind === 184 /* RestType */) {
                     sawRest = true;
                 }
                 unwrappedType = unwrappedType.type;
@@ -143539,10 +146731,13 @@
         var fixId = "fixSpelling";
         var errorCodes = [
             ts.Diagnostics.Property_0_does_not_exist_on_type_1_Did_you_mean_2.code,
+            ts.Diagnostics.Property_0_may_not_exist_on_type_1_Did_you_mean_2.code,
             ts.Diagnostics.Cannot_find_name_0_Did_you_mean_1.code,
+            ts.Diagnostics.Could_not_find_name_0_Did_you_mean_1.code,
             ts.Diagnostics.Cannot_find_name_0_Did_you_mean_the_instance_member_this_0.code,
             ts.Diagnostics.Cannot_find_name_0_Did_you_mean_the_static_member_1_0.code,
             ts.Diagnostics._0_has_no_exported_member_named_1_Did_you_mean_2.code,
+            ts.Diagnostics.This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0_Did_you_mean_1.code,
             // for JSX class components
             ts.Diagnostics.No_overload_matches_this_call.code,
             // for JSX FC
@@ -143609,6 +146804,14 @@
                 var props = checker.getContextualTypeForArgumentAtIndex(tag, 0);
                 suggestedSymbol = checker.getSuggestedSymbolForNonexistentJSXAttribute(node, props);
             }
+            else if (ts.hasSyntacticModifier(parent, 16384 /* Override */) && ts.isClassElement(parent) && parent.name === node) {
+                var baseDeclaration = ts.findAncestor(node, ts.isClassLike);
+                var baseTypeNode = baseDeclaration ? ts.getEffectiveBaseTypeNode(baseDeclaration) : undefined;
+                var baseType = baseTypeNode ? checker.getTypeAtLocation(baseTypeNode) : undefined;
+                if (baseType) {
+                    suggestedSymbol = checker.getSuggestedSymbolForNonexistentClassMember(ts.getTextOfNode(node), baseType);
+                }
+            }
             else {
                 var meaning = ts.getMeaningFromLocation(node);
                 var name = ts.getTextOfNode(node);
@@ -143716,7 +146919,7 @@
             var member = checker.createSymbol(4 /* Property */, label.escapedText);
             member.type = checker.getTypeAtLocation(expression);
             var members = ts.createSymbolTable([member]);
-            return checker.createAnonymousType(/*symbol*/ undefined, members, [], [], /*stringIndexInfo*/ undefined, /*numberIndexInfo*/ undefined);
+            return checker.createAnonymousType(/*symbol*/ undefined, members, [], [], []);
         }
         function getFixInfo(checker, declaration, expectType, isFunctionType) {
             if (!declaration.body || !ts.isBlock(declaration.body) || ts.length(declaration.body.statements) !== 1)
@@ -143778,9 +146981,7 @@
                     var newSig = checker.createSignature(declaration, sig.typeParameters, sig.thisParameter, sig.parameters, exprType, 
                     /*typePredicate*/ undefined, sig.minArgumentCount, sig.flags);
                     exprType = checker.createAnonymousType(
-                    /*symbol*/ undefined, ts.createSymbolTable(), [newSig], [], 
-                    /*stringIndexInfo*/ undefined, 
-                    /*numberIndexInfo*/ undefined);
+                    /*symbol*/ undefined, ts.createSymbolTable(), [newSig], [], []);
                 }
                 else {
                     exprType = checker.getAnyType();
@@ -143818,19 +147019,19 @@
         }
         function getVariableLikeInitializer(declaration) {
             switch (declaration.kind) {
-                case 250 /* VariableDeclaration */:
-                case 161 /* Parameter */:
-                case 199 /* BindingElement */:
-                case 164 /* PropertyDeclaration */:
-                case 289 /* PropertyAssignment */:
+                case 252 /* VariableDeclaration */:
+                case 162 /* Parameter */:
+                case 201 /* BindingElement */:
+                case 165 /* PropertyDeclaration */:
+                case 291 /* PropertyAssignment */:
                     return declaration.initializer;
-                case 281 /* JsxAttribute */:
+                case 283 /* JsxAttribute */:
                     return declaration.initializer && (ts.isJsxExpression(declaration.initializer) ? declaration.initializer.expression : undefined);
-                case 290 /* ShorthandPropertyAssignment */:
-                case 163 /* PropertySignature */:
-                case 292 /* EnumMember */:
-                case 337 /* JSDocPropertyTag */:
-                case 330 /* JSDocParameterTag */:
+                case 292 /* ShorthandPropertyAssignment */:
+                case 164 /* PropertySignature */:
+                case 294 /* EnumMember */:
+                case 342 /* JSDocPropertyTag */:
+                case 335 /* JSDocParameterTag */:
                     return undefined;
             }
         }
@@ -143872,6 +147073,8 @@
     var codefix;
     (function (codefix) {
         var fixMissingMember = "fixMissingMember";
+        var fixMissingProperties = "fixMissingProperties";
+        var fixMissingAttributes = "fixMissingAttributes";
         var fixMissingFunctionDeclaration = "fixMissingFunctionDeclaration";
         var errorCodes = [
             ts.Diagnostics.Property_0_does_not_exist_on_type_1.code,
@@ -143889,6 +147092,14 @@
                 if (!info) {
                     return undefined;
                 }
+                if (info.kind === 3 /* ObjectLiteral */) {
+                    var changes = ts.textChanges.ChangeTracker.with(context, function (t) { return addObjectLiteralProperties(t, context, info); });
+                    return [codefix.createCodeFixAction(fixMissingProperties, changes, ts.Diagnostics.Add_missing_properties, fixMissingProperties, ts.Diagnostics.Add_all_missing_properties)];
+                }
+                if (info.kind === 4 /* JsxAttributes */) {
+                    var changes = ts.textChanges.ChangeTracker.with(context, function (t) { return addJsxAttributes(t, context, info); });
+                    return [codefix.createCodeFixAction(fixMissingAttributes, changes, ts.Diagnostics.Add_missing_attributes, fixMissingAttributes, ts.Diagnostics.Add_all_missing_attributes)];
+                }
                 if (info.kind === 2 /* Function */) {
                     var changes = ts.textChanges.ChangeTracker.with(context, function (t) { return addFunctionDeclaration(t, context, info); });
                     return [codefix.createCodeFixAction(fixMissingFunctionDeclaration, changes, [ts.Diagnostics.Add_missing_function_declaration_0, info.token.text], fixMissingFunctionDeclaration, ts.Diagnostics.Add_all_missing_function_declarations)];
@@ -143899,7 +147110,7 @@
                 }
                 return ts.concatenate(getActionsForMissingMethodDeclaration(context, info), getActionsForMissingMemberDeclaration(context, info));
             },
-            fixIds: [fixMissingMember, fixMissingFunctionDeclaration],
+            fixIds: [fixMissingMember, fixMissingFunctionDeclaration, fixMissingProperties, fixMissingAttributes],
             getAllCodeActions: function (context) {
                 var program = context.program, fixId = context.fixId;
                 var checker = program.getTypeChecker();
@@ -143911,10 +147122,14 @@
                         if (!info || !ts.addToSeen(seen, ts.getNodeId(info.parentDeclaration) + "#" + info.token.text)) {
                             return;
                         }
-                        if (fixId === fixMissingFunctionDeclaration) {
-                            if (info.kind === 2 /* Function */) {
-                                addFunctionDeclaration(changes, context, info);
-                            }
+                        if (fixId === fixMissingFunctionDeclaration && info.kind === 2 /* Function */) {
+                            addFunctionDeclaration(changes, context, info);
+                        }
+                        else if (fixId === fixMissingProperties && info.kind === 3 /* ObjectLiteral */) {
+                            addObjectLiteralProperties(changes, context, info);
+                        }
+                        else if (fixId === fixMissingAttributes && info.kind === 4 /* JsxAttributes */) {
+                            addJsxAttributes(changes, context, info);
                         }
                         else {
                             if (info.kind === 0 /* Enum */) {
@@ -143956,8 +147171,8 @@
                                 }
                             }
                         };
-                        for (var _i = 0, infos_2 = infos; _i < infos_2.length; _i++) {
-                            var info = infos_2[_i];
+                        for (var _i = 0, infos_1 = infos; _i < infos_1.length; _i++) {
+                            var info = infos_1[_i];
                             _loop_14(info);
                         }
                     });
@@ -143969,6 +147184,8 @@
             InfoKind[InfoKind["Enum"] = 0] = "Enum";
             InfoKind[InfoKind["ClassOrInterface"] = 1] = "ClassOrInterface";
             InfoKind[InfoKind["Function"] = 2] = "Function";
+            InfoKind[InfoKind["ObjectLiteral"] = 3] = "ObjectLiteral";
+            InfoKind[InfoKind["JsxAttributes"] = 4] = "JsxAttributes";
         })(InfoKind || (InfoKind = {}));
         function getInfo(sourceFile, tokenPos, checker, program) {
             // The identifier of the missing property. eg:
@@ -143979,6 +147196,18 @@
                 return undefined;
             }
             var parent = token.parent;
+            if (ts.isIdentifier(token) && ts.hasInitializer(parent) && parent.initializer && ts.isObjectLiteralExpression(parent.initializer)) {
+                var properties = ts.arrayFrom(checker.getUnmatchedProperties(checker.getTypeAtLocation(parent.initializer), checker.getTypeAtLocation(token), /* requireOptionalProperties */ false, /* matchDiscriminantProperties */ false));
+                if (ts.length(properties)) {
+                    return { kind: 3 /* ObjectLiteral */, token: token, properties: properties, parentDeclaration: parent.initializer };
+                }
+            }
+            if (ts.isIdentifier(token) && ts.isJsxOpeningLikeElement(token.parent)) {
+                var attributes = getUnmatchedAttributes(checker, token.parent);
+                if (ts.length(attributes)) {
+                    return { kind: 4 /* JsxAttributes */, token: token, attributes: attributes, parentDeclaration: token.parent };
+                }
+            }
             if (ts.isIdentifier(token) && ts.isCallExpression(parent)) {
                 return { kind: 2 /* Function */, token: token, call: parent, sourceFile: sourceFile, modifierFlags: 0 /* None */, parentDeclaration: sourceFile };
             }
@@ -143993,14 +147222,14 @@
             if (ts.isIdentifier(token) && ts.isCallExpression(parent.parent)) {
                 var moduleDeclaration = ts.find(symbol.declarations, ts.isModuleDeclaration);
                 var moduleDeclarationSourceFile = moduleDeclaration === null || moduleDeclaration === void 0 ? void 0 : moduleDeclaration.getSourceFile();
-                if (moduleDeclaration && moduleDeclarationSourceFile && !program.isSourceFileFromExternalLibrary(moduleDeclarationSourceFile)) {
+                if (moduleDeclaration && moduleDeclarationSourceFile && !isSourceFileFromLibrary(program, moduleDeclarationSourceFile)) {
                     return { kind: 2 /* Function */, token: token, call: parent.parent, sourceFile: sourceFile, modifierFlags: 1 /* Export */, parentDeclaration: moduleDeclaration };
                 }
                 var moduleSourceFile = ts.find(symbol.declarations, ts.isSourceFile);
                 if (sourceFile.commonJsModuleIndicator) {
                     return;
                 }
-                if (moduleSourceFile && !program.isSourceFileFromExternalLibrary(moduleSourceFile)) {
+                if (moduleSourceFile && !isSourceFileFromLibrary(program, moduleSourceFile)) {
                     return { kind: 2 /* Function */, token: token, call: parent.parent, sourceFile: moduleSourceFile, modifierFlags: 1 /* Export */, parentDeclaration: moduleSourceFile };
                 }
             }
@@ -144011,7 +147240,7 @@
             }
             // Prefer to change the class instead of the interface if they are merged
             var classOrInterface = classDeclaration || ts.find(symbol.declarations, ts.isInterfaceDeclaration);
-            if (classOrInterface && !program.isSourceFileFromExternalLibrary(classOrInterface.getSourceFile())) {
+            if (classOrInterface && !isSourceFileFromLibrary(program, classOrInterface.getSourceFile())) {
                 var makeStatic = (leftExpressionType.target || leftExpressionType) !== checker.getDeclaredTypeOfSymbol(symbol);
                 if (makeStatic && (ts.isPrivateIdentifier(token) || ts.isInterfaceDeclaration(classOrInterface))) {
                     return undefined;
@@ -144023,11 +147252,14 @@
                 return { kind: 1 /* ClassOrInterface */, token: token, call: call, modifierFlags: modifierFlags, parentDeclaration: classOrInterface, declSourceFile: declSourceFile, isJSFile: isJSFile };
             }
             var enumDeclaration = ts.find(symbol.declarations, ts.isEnumDeclaration);
-            if (enumDeclaration && !ts.isPrivateIdentifier(token) && !program.isSourceFileFromExternalLibrary(enumDeclaration.getSourceFile())) {
+            if (enumDeclaration && !ts.isPrivateIdentifier(token) && !isSourceFileFromLibrary(program, enumDeclaration.getSourceFile())) {
                 return { kind: 0 /* Enum */, token: token, parentDeclaration: enumDeclaration };
             }
             return undefined;
         }
+        function isSourceFileFromLibrary(program, node) {
+            return program.isSourceFileFromExternalLibrary(node) || program.isSourceFileDefaultLibrary(node);
+        }
         function getActionsForMissingMemberDeclaration(context, info) {
             return info.isJSFile ? ts.singleElementArray(createActionForAddMissingMemberInJavascriptFile(context, info)) :
                 createActionsForAddMissingMemberInTypeScriptFile(context, info);
@@ -144048,7 +147280,7 @@
         function addMissingMemberInJs(changeTracker, declSourceFile, classDeclaration, token, makeStatic) {
             var tokenName = token.text;
             if (makeStatic) {
-                if (classDeclaration.kind === 222 /* ClassExpression */) {
+                if (classDeclaration.kind === 224 /* ClassExpression */) {
                     return;
                 }
                 var className = classDeclaration.name.getText();
@@ -144080,7 +147312,7 @@
             }
         }
         function initializePropertyToUndefined(obj, propertyName) {
-            return ts.factory.createExpressionStatement(ts.factory.createAssignment(ts.factory.createPropertyAccessExpression(obj, propertyName), ts.factory.createIdentifier("undefined")));
+            return ts.factory.createExpressionStatement(ts.factory.createAssignment(ts.factory.createPropertyAccessExpression(obj, propertyName), createUndefined()));
         }
         function createActionsForAddMissingMemberInTypeScriptFile(context, _a) {
             var parentDeclaration = _a.parentDeclaration, declSourceFile = _a.declSourceFile, modifierFlags = _a.modifierFlags, token = _a.token;
@@ -144100,7 +147332,7 @@
         }
         function getTypeNode(checker, classDeclaration, token) {
             var typeNode;
-            if (token.parent.parent.kind === 217 /* BinaryExpression */) {
+            if (token.parent.parent.kind === 219 /* BinaryExpression */) {
                 var binaryExpression = token.parent.parent;
                 var otherExpression = token.parent === binaryExpression.left ? binaryExpression.right : binaryExpression.left;
                 var widenedType = checker.getWidenedType(checker.getBaseTypeOfLiteralType(checker.getTypeAtLocation(otherExpression)));
@@ -144110,7 +147342,7 @@
                 var contextualType = checker.getContextualType(token.parent);
                 typeNode = contextualType ? checker.typeToTypeNode(contextualType, /*enclosingDeclaration*/ undefined, 1 /* NoTruncation */) : undefined;
             }
-            return typeNode || ts.factory.createKeywordTypeNode(128 /* AnyKeyword */);
+            return typeNode || ts.factory.createKeywordTypeNode(129 /* AnyKeyword */);
         }
         function addPropertyDeclaration(changeTracker, declSourceFile, classDeclaration, tokenName, typeNode, modifierFlags) {
             var property = ts.factory.createPropertyDeclaration(
@@ -144139,7 +147371,7 @@
         }
         function createAddIndexSignatureAction(context, declSourceFile, classDeclaration, tokenName, typeNode) {
             // Index signatures cannot have the static modifier.
-            var stringTypeNode = ts.factory.createKeywordTypeNode(147 /* StringKeyword */);
+            var stringTypeNode = ts.factory.createKeywordTypeNode(148 /* StringKeyword */);
             var indexingParameter = ts.factory.createParameterDeclaration(
             /*decorators*/ undefined, 
             /*modifiers*/ undefined, 
@@ -144172,7 +147404,7 @@
         }
         function addMethodDeclaration(context, changes, callExpression, name, modifierFlags, parentDeclaration, sourceFile) {
             var importAdder = codefix.createImportAdder(sourceFile, context.program, context.preferences, context.host);
-            var methodDeclaration = codefix.createSignatureDeclarationFromCallExpression(166 /* MethodDeclaration */, context, importAdder, callExpression, name, modifierFlags, parentDeclaration);
+            var methodDeclaration = codefix.createSignatureDeclarationFromCallExpression(167 /* MethodDeclaration */, context, importAdder, callExpression, name, modifierFlags, parentDeclaration);
             var containingMethodDeclaration = ts.findAncestor(callExpression, function (n) { return ts.isMethodDeclaration(n) || ts.isConstructorDeclaration(n); });
             if (containingMethodDeclaration && containingMethodDeclaration.parent === parentDeclaration) {
                 changes.insertNodeAfter(sourceFile, containingMethodDeclaration, methodDeclaration);
@@ -144201,9 +147433,136 @@
         }
         function addFunctionDeclaration(changes, context, info) {
             var importAdder = codefix.createImportAdder(context.sourceFile, context.program, context.preferences, context.host);
-            var functionDeclaration = codefix.createSignatureDeclarationFromCallExpression(252 /* FunctionDeclaration */, context, importAdder, info.call, ts.idText(info.token), info.modifierFlags, info.parentDeclaration);
+            var functionDeclaration = codefix.createSignatureDeclarationFromCallExpression(254 /* FunctionDeclaration */, context, importAdder, info.call, ts.idText(info.token), info.modifierFlags, info.parentDeclaration);
             changes.insertNodeAtEndOfScope(info.sourceFile, info.parentDeclaration, functionDeclaration);
         }
+        function addJsxAttributes(changes, context, info) {
+            var importAdder = codefix.createImportAdder(context.sourceFile, context.program, context.preferences, context.host);
+            var quotePreference = ts.getQuotePreference(context.sourceFile, context.preferences);
+            var checker = context.program.getTypeChecker();
+            var jsxAttributesNode = info.parentDeclaration.attributes;
+            var hasSpreadAttribute = ts.some(jsxAttributesNode.properties, ts.isJsxSpreadAttribute);
+            var attrs = ts.map(info.attributes, function (attr) {
+                var value = attr.valueDeclaration ? tryGetValueFromType(context, checker, importAdder, quotePreference, checker.getTypeAtLocation(attr.valueDeclaration)) : createUndefined();
+                return ts.factory.createJsxAttribute(ts.factory.createIdentifier(attr.name), ts.factory.createJsxExpression(/*dotDotDotToken*/ undefined, value));
+            });
+            var jsxAttributes = ts.factory.createJsxAttributes(hasSpreadAttribute ? __spreadArray(__spreadArray([], attrs, true), jsxAttributesNode.properties, true) : __spreadArray(__spreadArray([], jsxAttributesNode.properties, true), attrs, true));
+            var options = { prefix: jsxAttributesNode.pos === jsxAttributesNode.end ? " " : undefined };
+            changes.replaceNode(context.sourceFile, jsxAttributesNode, jsxAttributes, options);
+        }
+        function addObjectLiteralProperties(changes, context, info) {
+            var importAdder = codefix.createImportAdder(context.sourceFile, context.program, context.preferences, context.host);
+            var quotePreference = ts.getQuotePreference(context.sourceFile, context.preferences);
+            var checker = context.program.getTypeChecker();
+            var props = ts.map(info.properties, function (prop) {
+                var initializer = prop.valueDeclaration ? tryGetValueFromType(context, checker, importAdder, quotePreference, checker.getTypeAtLocation(prop.valueDeclaration)) : createUndefined();
+                return ts.factory.createPropertyAssignment(prop.name, initializer);
+            });
+            changes.replaceNode(context.sourceFile, info.parentDeclaration, ts.factory.createObjectLiteralExpression(__spreadArray(__spreadArray([], info.parentDeclaration.properties, true), props, true), /*multiLine*/ true));
+        }
+        function tryGetValueFromType(context, checker, importAdder, quotePreference, type) {
+            if (type.flags & 3 /* AnyOrUnknown */) {
+                return createUndefined();
+            }
+            if (type.flags & (4 /* String */ | 134217728 /* TemplateLiteral */)) {
+                return ts.factory.createStringLiteral("", /* isSingleQuote */ quotePreference === 0 /* Single */);
+            }
+            if (type.flags & 8 /* Number */) {
+                return ts.factory.createNumericLiteral(0);
+            }
+            if (type.flags & 64 /* BigInt */) {
+                return ts.factory.createBigIntLiteral("0n");
+            }
+            if (type.flags & 16 /* Boolean */) {
+                return ts.factory.createFalse();
+            }
+            if (type.flags & 1056 /* EnumLike */) {
+                var enumMember = type.symbol.exports ? ts.firstOrUndefined(ts.arrayFrom(type.symbol.exports.values())) : type.symbol;
+                var name = checker.symbolToExpression(type.symbol.parent ? type.symbol.parent : type.symbol, 111551 /* Value */, /*enclosingDeclaration*/ undefined, /*flags*/ undefined);
+                return enumMember === undefined || name === undefined ? ts.factory.createNumericLiteral(0) : ts.factory.createPropertyAccessExpression(name, checker.symbolToString(enumMember));
+            }
+            if (type.flags & 256 /* NumberLiteral */) {
+                return ts.factory.createNumericLiteral(type.value);
+            }
+            if (type.flags & 2048 /* BigIntLiteral */) {
+                return ts.factory.createBigIntLiteral(type.value);
+            }
+            if (type.flags & 128 /* StringLiteral */) {
+                return ts.factory.createStringLiteral(type.value, /* isSingleQuote */ quotePreference === 0 /* Single */);
+            }
+            if (type.flags & 512 /* BooleanLiteral */) {
+                return (type === checker.getFalseType() || type === checker.getFalseType(/*fresh*/ true)) ? ts.factory.createFalse() : ts.factory.createTrue();
+            }
+            if (type.flags & 65536 /* Null */) {
+                return ts.factory.createNull();
+            }
+            if (type.flags & 1048576 /* Union */) {
+                var expression = ts.firstDefined(type.types, function (t) { return tryGetValueFromType(context, checker, importAdder, quotePreference, t); });
+                return expression !== null && expression !== void 0 ? expression : createUndefined();
+            }
+            if (checker.isArrayLikeType(type)) {
+                return ts.factory.createArrayLiteralExpression();
+            }
+            if (isObjectLiteralType(type)) {
+                var props = ts.map(checker.getPropertiesOfType(type), function (prop) {
+                    var initializer = prop.valueDeclaration ? tryGetValueFromType(context, checker, importAdder, quotePreference, checker.getTypeAtLocation(prop.valueDeclaration)) : createUndefined();
+                    return ts.factory.createPropertyAssignment(prop.name, initializer);
+                });
+                return ts.factory.createObjectLiteralExpression(props, /*multiLine*/ true);
+            }
+            if (ts.getObjectFlags(type) & 16 /* Anonymous */) {
+                var decl = ts.find(type.symbol.declarations || ts.emptyArray, ts.or(ts.isFunctionTypeNode, ts.isMethodSignature, ts.isMethodDeclaration));
+                if (decl === undefined)
+                    return createUndefined();
+                var signature = checker.getSignaturesOfType(type, 0 /* Call */);
+                if (signature === undefined)
+                    return createUndefined();
+                var func = codefix.createSignatureDeclarationFromSignature(211 /* FunctionExpression */, context, quotePreference, signature[0], codefix.createStubbedBody(ts.Diagnostics.Function_not_implemented.message, quotePreference), /*name*/ undefined, /*modifiers*/ undefined, /*optional*/ undefined, /*enclosingDeclaration*/ undefined, importAdder);
+                return func !== null && func !== void 0 ? func : createUndefined();
+            }
+            if (ts.getObjectFlags(type) & 1 /* Class */) {
+                var classDeclaration = ts.getClassLikeDeclarationOfSymbol(type.symbol);
+                if (classDeclaration === undefined || ts.hasAbstractModifier(classDeclaration))
+                    return createUndefined();
+                var constructorDeclaration = ts.getFirstConstructorWithBody(classDeclaration);
+                if (constructorDeclaration && ts.length(constructorDeclaration.parameters))
+                    return createUndefined();
+                return ts.factory.createNewExpression(ts.factory.createIdentifier(type.symbol.name), /*typeArguments*/ undefined, /*argumentsArray*/ undefined);
+            }
+            return createUndefined();
+        }
+        function createUndefined() {
+            return ts.factory.createIdentifier("undefined");
+        }
+        function isObjectLiteralType(type) {
+            return (type.flags & 524288 /* Object */) &&
+                ((ts.getObjectFlags(type) & 128 /* ObjectLiteral */) || (type.symbol && ts.tryCast(ts.singleOrUndefined(type.symbol.declarations), ts.isTypeLiteralNode)));
+        }
+        function getUnmatchedAttributes(checker, source) {
+            var attrsType = checker.getContextualType(source.attributes);
+            if (attrsType === undefined)
+                return ts.emptyArray;
+            var targetProps = attrsType.getProperties();
+            if (!ts.length(targetProps))
+                return ts.emptyArray;
+            var seenNames = new ts.Set();
+            for (var _i = 0, _a = source.attributes.properties; _i < _a.length; _i++) {
+                var sourceProp = _a[_i];
+                if (ts.isJsxAttribute(sourceProp)) {
+                    seenNames.add(sourceProp.name.escapedText);
+                }
+                if (ts.isJsxSpreadAttribute(sourceProp)) {
+                    var type = checker.getTypeAtLocation(sourceProp.expression);
+                    for (var _b = 0, _c = type.getProperties(); _b < _c.length; _b++) {
+                        var prop = _c[_b];
+                        seenNames.add(prop.escapedName);
+                    }
+                }
+            }
+            return ts.filter(targetProps, function (targetProp) {
+                return !((targetProp.flags & 16777216 /* Optional */ || ts.getCheckFlags(targetProp) & 48 /* Partial */) || seenNames.has(targetProp.escapedName));
+            });
+        }
     })(codefix = ts.codefix || (ts.codefix = {}));
 })(ts || (ts = {}));
 /* @internal */
@@ -144397,7 +147756,7 @@
         }
         function getNodes(sourceFile, pos) {
             var token = ts.getTokenAtPosition(sourceFile, pos);
-            if (token.kind !== 107 /* ThisKeyword */)
+            if (token.kind !== 108 /* ThisKeyword */)
                 return undefined;
             var constructor = ts.getContainingFunction(token);
             var superCall = findSuperCall(constructor.body);
@@ -144620,14 +147979,14 @@
             var token = ts.getTokenAtPosition(sourceFile, pos);
             var heritageClauses = ts.getContainingClass(token).heritageClauses;
             var extendsToken = heritageClauses[0].getFirstToken();
-            return extendsToken.kind === 93 /* ExtendsKeyword */ ? { extendsToken: extendsToken, heritageClauses: heritageClauses } : undefined;
+            return extendsToken.kind === 94 /* ExtendsKeyword */ ? { extendsToken: extendsToken, heritageClauses: heritageClauses } : undefined;
         }
         function doChanges(changes, sourceFile, extendsToken, heritageClauses) {
-            changes.replaceNode(sourceFile, extendsToken, ts.factory.createToken(116 /* ImplementsKeyword */));
+            changes.replaceNode(sourceFile, extendsToken, ts.factory.createToken(117 /* ImplementsKeyword */));
             // If there is already an implements clause, replace the implements keyword with a comma.
             if (heritageClauses.length === 2 &&
-                heritageClauses[0].token === 93 /* ExtendsKeyword */ &&
-                heritageClauses[1].token === 116 /* ImplementsKeyword */) {
+                heritageClauses[0].token === 94 /* ExtendsKeyword */ &&
+                heritageClauses[1].token === 117 /* ImplementsKeyword */) {
                 var implementsToken = heritageClauses[1].getFirstToken();
                 var implementsFullStart = implementsToken.getFullStart();
                 changes.replaceRange(sourceFile, { pos: implementsFullStart, end: implementsFullStart }, ts.factory.createToken(27 /* CommaToken */));
@@ -144803,7 +148162,7 @@
                     ];
                 }
                 var result = [];
-                if (token.kind === 135 /* InferKeyword */) {
+                if (token.kind === 136 /* InferKeyword */) {
                     var changes = ts.textChanges.ChangeTracker.with(context, function (t) { return changeInferToUnknown(t, sourceFile, token); });
                     var name = ts.cast(token.parent, ts.isInferTypeNode).typeParameter.name.text;
                     result.push(codefix.createCodeFixAction(fixName, changes, [ts.Diagnostics.Replace_infer_0_with_unknown, name], fixIdInfer, ts.Diagnostics.Replace_all_unused_infer_with_unknown));
@@ -144845,7 +148204,7 @@
                             break;
                         }
                         case fixIdDelete: {
-                            if (token.kind === 135 /* InferKeyword */ || isImport(token)) {
+                            if (token.kind === 136 /* InferKeyword */ || isImport(token)) {
                                 break; // Can't delete
                             }
                             else if (ts.isJSDocTemplateTag(token)) {
@@ -144874,7 +148233,7 @@
                             break;
                         }
                         case fixIdInfer:
-                            if (token.kind === 135 /* InferKeyword */) {
+                            if (token.kind === 136 /* InferKeyword */) {
                                 changeInferToUnknown(changes, sourceFile, token);
                             }
                             break;
@@ -144885,7 +148244,7 @@
             },
         });
         function changeInferToUnknown(changes, sourceFile, token) {
-            changes.replaceNode(sourceFile, token.parent, ts.factory.createKeywordTypeNode(152 /* UnknownKeyword */));
+            changes.replaceNode(sourceFile, token.parent, ts.factory.createKeywordTypeNode(153 /* UnknownKeyword */));
         }
         function createDeleteFix(changes, diag) {
             return codefix.createCodeFixAction(fixName, changes, diag, fixIdDelete, ts.Diagnostics.Delete_all_unused_declarations);
@@ -144894,18 +148253,18 @@
             changes.delete(sourceFile, ts.Debug.checkDefined(ts.cast(token.parent, ts.isDeclarationWithTypeParameterChildren).typeParameters, "The type parameter to delete should exist"));
         }
         function isImport(token) {
-            return token.kind === 99 /* ImportKeyword */
-                || token.kind === 78 /* Identifier */ && (token.parent.kind === 266 /* ImportSpecifier */ || token.parent.kind === 263 /* ImportClause */);
+            return token.kind === 100 /* ImportKeyword */
+                || token.kind === 79 /* Identifier */ && (token.parent.kind === 268 /* ImportSpecifier */ || token.parent.kind === 265 /* ImportClause */);
         }
         /** Sometimes the diagnostic span is an entire ImportDeclaration, so we should remove the whole thing. */
         function tryGetFullImport(token) {
-            return token.kind === 99 /* ImportKeyword */ ? ts.tryCast(token.parent, ts.isImportDeclaration) : undefined;
+            return token.kind === 100 /* ImportKeyword */ ? ts.tryCast(token.parent, ts.isImportDeclaration) : undefined;
         }
         function canDeleteEntireVariableStatement(sourceFile, token) {
             return ts.isVariableDeclarationList(token.parent) && ts.first(token.parent.getChildren(sourceFile)) === token;
         }
         function deleteEntireVariableStatement(changes, sourceFile, node) {
-            changes.delete(sourceFile, node.parent.kind === 233 /* VariableStatement */ ? node.parent : node);
+            changes.delete(sourceFile, node.parent.kind === 235 /* VariableStatement */ ? node.parent : node);
         }
         function deleteDestructuringElements(changes, sourceFile, node) {
             ts.forEach(node.elements, function (n) { return changes.delete(sourceFile, n); });
@@ -144914,7 +148273,7 @@
             // Don't offer to prefix a property.
             if (errorCode === ts.Diagnostics.Property_0_is_declared_but_its_value_is_never_read.code)
                 return;
-            if (token.kind === 135 /* InferKeyword */) {
+            if (token.kind === 136 /* InferKeyword */) {
                 token = ts.cast(token.parent, ts.isInferTypeNode).typeParameter.name;
             }
             if (ts.isIdentifier(token) && canPrefix(token)) {
@@ -144930,14 +148289,14 @@
         }
         function canPrefix(token) {
             switch (token.parent.kind) {
-                case 161 /* Parameter */:
-                case 160 /* TypeParameter */:
+                case 162 /* Parameter */:
+                case 161 /* TypeParameter */:
                     return true;
-                case 250 /* VariableDeclaration */: {
+                case 252 /* VariableDeclaration */: {
                     var varDecl = token.parent;
                     switch (varDecl.parent.parent.kind) {
-                        case 240 /* ForOfStatement */:
-                        case 239 /* ForInStatement */:
+                        case 242 /* ForOfStatement */:
+                        case 241 /* ForInStatement */:
                             return true;
                     }
                 }
@@ -144987,8 +148346,8 @@
         function mayDeleteParameter(checker, sourceFile, parameter, sourceFiles, program, cancellationToken, isFixAll) {
             var parent = parameter.parent;
             switch (parent.kind) {
-                case 166 /* MethodDeclaration */:
-                case 167 /* Constructor */:
+                case 167 /* MethodDeclaration */:
+                case 169 /* Constructor */:
                     var index = parent.parameters.indexOf(parameter);
                     var referent = ts.isMethodDeclaration(parent) ? parent.name : parent;
                     var entries = ts.FindAllReferences.Core.getReferencedSymbolsForNode(parent.pos, referent, program, sourceFiles, cancellationToken);
@@ -145018,17 +148377,17 @@
                         }
                     }
                     return true;
-                case 252 /* FunctionDeclaration */: {
+                case 254 /* FunctionDeclaration */: {
                     if (parent.name && isCallbackLike(checker, sourceFile, parent.name)) {
                         return isLastParameter(parent, parameter, isFixAll);
                     }
                     return true;
                 }
-                case 209 /* FunctionExpression */:
-                case 210 /* ArrowFunction */:
+                case 211 /* FunctionExpression */:
+                case 212 /* ArrowFunction */:
                     // Can't remove a non-last parameter in a callback. Can remove a parameter in code-fix-all if future parameters are also unused.
                     return isLastParameter(parent, parameter, isFixAll);
-                case 169 /* SetAccessor */:
+                case 171 /* SetAccessor */:
                     // Setter must have a parameter
                     return false;
                 default:
@@ -145086,7 +148445,7 @@
             var container = (ts.isBlock(statement.parent) ? statement.parent : statement).parent;
             if (!ts.isBlock(statement.parent) || statement === ts.first(statement.parent.statements)) {
                 switch (container.kind) {
-                    case 235 /* IfStatement */:
+                    case 237 /* IfStatement */:
                         if (container.elseStatement) {
                             if (ts.isBlock(statement.parent)) {
                                 break;
@@ -145097,8 +148456,8 @@
                             return;
                         }
                     // falls through
-                    case 237 /* WhileStatement */:
-                    case 238 /* ForStatement */:
+                    case 239 /* WhileStatement */:
+                    case 240 /* ForStatement */:
                         changes.delete(sourceFile, container);
                         return;
                 }
@@ -145171,7 +148530,7 @@
                 var typeNode = info.typeNode, type = info.type;
                 var original = typeNode.getText(sourceFile);
                 var actions = [fix(type, fixIdPlain, ts.Diagnostics.Change_all_jsdoc_style_types_to_TypeScript)];
-                if (typeNode.kind === 306 /* JSDocNullableType */) {
+                if (typeNode.kind === 309 /* JSDocNullableType */) {
                     // for nullable types, suggest the flow-compatible `T | null | undefined`
                     // in addition to the jsdoc/closure-compatible `T | null`
                     actions.push(fix(checker.getNullableType(type, 32768 /* Undefined */), fixIdNullable, ts.Diagnostics.Change_all_jsdoc_style_types_to_TypeScript_and_add_undefined_to_nullable_types));
@@ -145191,7 +148550,7 @@
                     if (!info)
                         return;
                     var typeNode = info.typeNode, type = info.type;
-                    var fixedType = typeNode.kind === 306 /* JSDocNullableType */ && fixId === fixIdNullable ? checker.getNullableType(type, 32768 /* Undefined */) : type;
+                    var fixedType = typeNode.kind === 309 /* JSDocNullableType */ && fixId === fixIdNullable ? checker.getNullableType(type, 32768 /* Undefined */) : type;
                     doChange(changes, sourceFile, typeNode, fixedType, checker);
                 });
             }
@@ -145208,22 +148567,22 @@
             // NOTE: Some locations are not handled yet:
             // MappedTypeNode.typeParameters and SignatureDeclaration.typeParameters, as well as CallExpression.typeArguments
             switch (node.kind) {
-                case 225 /* AsExpression */:
-                case 170 /* CallSignature */:
-                case 171 /* ConstructSignature */:
-                case 252 /* FunctionDeclaration */:
-                case 168 /* GetAccessor */:
-                case 172 /* IndexSignature */:
-                case 191 /* MappedType */:
-                case 166 /* MethodDeclaration */:
-                case 165 /* MethodSignature */:
-                case 161 /* Parameter */:
-                case 164 /* PropertyDeclaration */:
-                case 163 /* PropertySignature */:
-                case 169 /* SetAccessor */:
-                case 255 /* TypeAliasDeclaration */:
-                case 207 /* TypeAssertionExpression */:
-                case 250 /* VariableDeclaration */:
+                case 227 /* AsExpression */:
+                case 172 /* CallSignature */:
+                case 173 /* ConstructSignature */:
+                case 254 /* FunctionDeclaration */:
+                case 170 /* GetAccessor */:
+                case 174 /* IndexSignature */:
+                case 193 /* MappedType */:
+                case 167 /* MethodDeclaration */:
+                case 166 /* MethodSignature */:
+                case 162 /* Parameter */:
+                case 165 /* PropertyDeclaration */:
+                case 164 /* PropertySignature */:
+                case 171 /* SetAccessor */:
+                case 257 /* TypeAliasDeclaration */:
+                case 209 /* TypeAssertionExpression */:
+                case 252 /* VariableDeclaration */:
                     return true;
                 default:
                     return false;
@@ -145325,14 +148684,14 @@
             }
             var insertBefore;
             switch (containingFunction.kind) {
-                case 166 /* MethodDeclaration */:
+                case 167 /* MethodDeclaration */:
                     insertBefore = containingFunction.name;
                     break;
-                case 252 /* FunctionDeclaration */:
-                case 209 /* FunctionExpression */:
-                    insertBefore = ts.findChildOfKind(containingFunction, 97 /* FunctionKeyword */, sourceFile);
+                case 254 /* FunctionDeclaration */:
+                case 211 /* FunctionExpression */:
+                    insertBefore = ts.findChildOfKind(containingFunction, 98 /* FunctionKeyword */, sourceFile);
                     break;
-                case 210 /* ArrowFunction */:
+                case 212 /* ArrowFunction */:
                     insertBefore = ts.findChildOfKind(containingFunction, 20 /* OpenParenToken */, sourceFile) || ts.first(containingFunction.parameters);
                     break;
                 default:
@@ -145347,11 +148706,11 @@
             var insertBefore = _a.insertBefore, returnType = _a.returnType;
             if (returnType) {
                 var entityName = ts.getEntityNameFromTypeNode(returnType);
-                if (!entityName || entityName.kind !== 78 /* Identifier */ || entityName.text !== "Promise") {
+                if (!entityName || entityName.kind !== 79 /* Identifier */ || entityName.text !== "Promise") {
                     changes.replaceNode(sourceFile, returnType, ts.factory.createTypeReferenceNode("Promise", ts.factory.createNodeArray([returnType])));
                 }
             }
-            changes.insertModifierBefore(sourceFile, 129 /* AsyncKeyword */, insertBefore);
+            changes.insertModifierBefore(sourceFile, 130 /* AsyncKeyword */, insertBefore);
         }
     })(codefix = ts.codefix || (ts.codefix = {}));
 })(ts || (ts = {}));
@@ -145511,7 +148870,7 @@
             return errorCode;
         }
         function doChange(changes, sourceFile, token, errorCode, program, cancellationToken, markSeen, host, preferences) {
-            if (!ts.isParameterPropertyModifier(token.kind) && token.kind !== 78 /* Identifier */ && token.kind !== 25 /* DotDotDotToken */ && token.kind !== 107 /* ThisKeyword */) {
+            if (!ts.isParameterPropertyModifier(token.kind) && token.kind !== 79 /* Identifier */ && token.kind !== 25 /* DotDotDotToken */ && token.kind !== 108 /* ThisKeyword */) {
                 return undefined;
             }
             var parent = token.parent;
@@ -145665,7 +149024,7 @@
         function annotate(changes, importAdder, sourceFile, declaration, type, program, host) {
             var typeNode = ts.getTypeNodeIfAccessible(type, declaration, program, host);
             if (typeNode) {
-                if (ts.isInJSFile(sourceFile) && declaration.kind !== 163 /* PropertySignature */) {
+                if (ts.isInJSFile(sourceFile) && declaration.kind !== 164 /* PropertySignature */) {
                     var parent = ts.isVariableDeclaration(declaration) ? ts.tryCast(declaration.parent.parent, ts.isVariableStatement) : declaration;
                     if (!parent) {
                         return;
@@ -145740,15 +149099,15 @@
                     oldTags[i] = merged;
                 return !!merged;
             }); });
-            var tag = ts.factory.createJSDocComment(ts.factory.createNodeArray(ts.intersperse(comments, ts.factory.createJSDocText("\n"))), ts.factory.createNodeArray(__spreadArray(__spreadArray([], (oldTags || ts.emptyArray)), unmergedNewTags)));
-            var jsDocNode = parent.kind === 210 /* ArrowFunction */ ? getJsDocNodeForArrowFunction(parent) : parent;
+            var tag = ts.factory.createJSDocComment(ts.factory.createNodeArray(ts.intersperse(comments, ts.factory.createJSDocText("\n"))), ts.factory.createNodeArray(__spreadArray(__spreadArray([], (oldTags || ts.emptyArray), true), unmergedNewTags, true)));
+            var jsDocNode = parent.kind === 212 /* ArrowFunction */ ? getJsDocNodeForArrowFunction(parent) : parent;
             jsDocNode.jsDoc = parent.jsDoc;
             jsDocNode.jsDocCache = parent.jsDocCache;
             changes.insertJsdocCommentBefore(sourceFile, jsDocNode, tag);
         }
         codefix.addJSDocTags = addJSDocTags;
         function getJsDocNodeForArrowFunction(signature) {
-            if (signature.parent.kind === 164 /* PropertyDeclaration */) {
+            if (signature.parent.kind === 165 /* PropertyDeclaration */) {
                 return signature.parent;
             }
             return signature.parent.parent;
@@ -145758,14 +149117,14 @@
                 return undefined;
             }
             switch (oldTag.kind) {
-                case 330 /* JSDocParameterTag */: {
+                case 335 /* JSDocParameterTag */: {
                     var oldParam = oldTag;
                     var newParam = newTag;
                     return ts.isIdentifier(oldParam.name) && ts.isIdentifier(newParam.name) && oldParam.name.escapedText === newParam.name.escapedText
                         ? ts.factory.createJSDocParameterTag(/*tagName*/ undefined, newParam.name, /*isBracketed*/ false, newParam.typeExpression, newParam.isNameFirst, oldParam.comment)
                         : undefined;
                 }
-                case 331 /* JSDocReturnTag */:
+                case 336 /* JSDocReturnTag */:
                     return ts.factory.createJSDocReturnTag(/*tagName*/ undefined, newTag.typeExpression, oldTag.comment);
             }
         }
@@ -145790,19 +149149,19 @@
         function getFunctionReferences(containingFunction, sourceFile, program, cancellationToken) {
             var searchToken;
             switch (containingFunction.kind) {
-                case 167 /* Constructor */:
-                    searchToken = ts.findChildOfKind(containingFunction, 132 /* ConstructorKeyword */, sourceFile);
+                case 169 /* Constructor */:
+                    searchToken = ts.findChildOfKind(containingFunction, 133 /* ConstructorKeyword */, sourceFile);
                     break;
-                case 210 /* ArrowFunction */:
-                case 209 /* FunctionExpression */:
+                case 212 /* ArrowFunction */:
+                case 211 /* FunctionExpression */:
                     var parent = containingFunction.parent;
                     searchToken = (ts.isVariableDeclaration(parent) || ts.isPropertyDeclaration(parent)) && ts.isIdentifier(parent.name) ?
                         parent.name :
                         containingFunction.name;
                     break;
-                case 252 /* FunctionDeclaration */:
-                case 166 /* MethodDeclaration */:
-                case 165 /* MethodSignature */:
+                case 254 /* FunctionDeclaration */:
+                case 167 /* MethodDeclaration */:
+                case 166 /* MethodSignature */:
                     searchToken = containingFunction.name;
                     break;
             }
@@ -145889,7 +149248,7 @@
                     cancellationToken.throwIfCancellationRequested();
                     calculateUsageOfNode(reference, usage);
                 }
-                var calls = __spreadArray(__spreadArray([], usage.constructs || []), usage.calls || []);
+                var calls = __spreadArray(__spreadArray([], usage.constructs || [], true), usage.calls || [], true);
                 return declaration.parameters.map(function (parameter, parameterIndex) {
                     var types = [];
                     var isRest = ts.isRestParameter(parameter);
@@ -145944,24 +149303,24 @@
                     node = node.parent;
                 }
                 switch (node.parent.kind) {
-                    case 234 /* ExpressionStatement */:
+                    case 236 /* ExpressionStatement */:
                         inferTypeFromExpressionStatement(node, usage);
                         break;
-                    case 216 /* PostfixUnaryExpression */:
+                    case 218 /* PostfixUnaryExpression */:
                         usage.isNumber = true;
                         break;
-                    case 215 /* PrefixUnaryExpression */:
+                    case 217 /* PrefixUnaryExpression */:
                         inferTypeFromPrefixUnaryExpression(node.parent, usage);
                         break;
-                    case 217 /* BinaryExpression */:
+                    case 219 /* BinaryExpression */:
                         inferTypeFromBinaryExpression(node, node.parent, usage);
                         break;
-                    case 285 /* CaseClause */:
-                    case 286 /* DefaultClause */:
+                    case 287 /* CaseClause */:
+                    case 288 /* DefaultClause */:
                         inferTypeFromSwitchStatementLabel(node.parent, usage);
                         break;
-                    case 204 /* CallExpression */:
-                    case 205 /* NewExpression */:
+                    case 206 /* CallExpression */:
+                    case 207 /* NewExpression */:
                         if (node.parent.expression === node) {
                             inferTypeFromCallExpression(node.parent, usage);
                         }
@@ -145969,20 +149328,20 @@
                             inferTypeFromContextualType(node, usage);
                         }
                         break;
-                    case 202 /* PropertyAccessExpression */:
+                    case 204 /* PropertyAccessExpression */:
                         inferTypeFromPropertyAccessExpression(node.parent, usage);
                         break;
-                    case 203 /* ElementAccessExpression */:
+                    case 205 /* ElementAccessExpression */:
                         inferTypeFromPropertyElementExpression(node.parent, node, usage);
                         break;
-                    case 289 /* PropertyAssignment */:
-                    case 290 /* ShorthandPropertyAssignment */:
+                    case 291 /* PropertyAssignment */:
+                    case 292 /* ShorthandPropertyAssignment */:
                         inferTypeFromPropertyAssignment(node.parent, usage);
                         break;
-                    case 164 /* PropertyDeclaration */:
+                    case 165 /* PropertyDeclaration */:
                         inferTypeFromPropertyDeclaration(node.parent, usage);
                         break;
-                    case 250 /* VariableDeclaration */: {
+                    case 252 /* VariableDeclaration */: {
                         var _a = node.parent, name = _a.name, initializer = _a.initializer;
                         if (node === name) {
                             if (initializer) { // This can happen for `let x = null;` which still has an implicit-any error.
@@ -146040,17 +149399,17 @@
                     case 52 /* CaretToken */:
                     // CompoundAssignmentOperator
                     // falls through
-                    case 64 /* MinusEqualsToken */:
-                    case 66 /* AsteriskAsteriskEqualsToken */:
-                    case 65 /* AsteriskEqualsToken */:
-                    case 67 /* SlashEqualsToken */:
-                    case 68 /* PercentEqualsToken */:
-                    case 72 /* AmpersandEqualsToken */:
-                    case 73 /* BarEqualsToken */:
-                    case 77 /* CaretEqualsToken */:
-                    case 69 /* LessThanLessThanEqualsToken */:
-                    case 71 /* GreaterThanGreaterThanGreaterThanEqualsToken */:
-                    case 70 /* GreaterThanGreaterThanEqualsToken */:
+                    case 65 /* MinusEqualsToken */:
+                    case 67 /* AsteriskAsteriskEqualsToken */:
+                    case 66 /* AsteriskEqualsToken */:
+                    case 68 /* SlashEqualsToken */:
+                    case 69 /* PercentEqualsToken */:
+                    case 73 /* AmpersandEqualsToken */:
+                    case 74 /* BarEqualsToken */:
+                    case 78 /* CaretEqualsToken */:
+                    case 70 /* LessThanLessThanEqualsToken */:
+                    case 72 /* GreaterThanGreaterThanGreaterThanEqualsToken */:
+                    case 71 /* GreaterThanGreaterThanEqualsToken */:
                     // AdditiveOperator
                     // falls through
                     case 40 /* MinusToken */:
@@ -146068,7 +149427,7 @@
                             usage.isNumber = true;
                         }
                         break;
-                    case 63 /* PlusEqualsToken */:
+                    case 64 /* PlusEqualsToken */:
                     case 39 /* PlusToken */:
                         var otherOperandType = checker.getTypeAtLocation(parent.left === node ? parent.right : parent.left);
                         if (otherOperandType.flags & 1056 /* EnumLike */) {
@@ -146088,14 +149447,14 @@
                         }
                         break;
                     //  AssignmentOperators
-                    case 62 /* EqualsToken */:
+                    case 63 /* EqualsToken */:
                     case 34 /* EqualsEqualsToken */:
                     case 36 /* EqualsEqualsEqualsToken */:
                     case 37 /* ExclamationEqualsEqualsToken */:
                     case 35 /* ExclamationEqualsToken */:
                         addCandidateType(usage, checker.getTypeAtLocation(parent.left === node ? parent.right : parent.left));
                         break;
-                    case 100 /* InKeyword */:
+                    case 101 /* InKeyword */:
                         if (node === parent.left) {
                             usage.isString = true;
                         }
@@ -146104,7 +149463,7 @@
                     case 56 /* BarBarToken */:
                     case 60 /* QuestionQuestionToken */:
                         if (node === parent.left &&
-                            (node.parent.parent.kind === 250 /* VariableDeclaration */ || ts.isAssignmentExpression(node.parent.parent, /*excludeCompoundAssignment*/ true))) {
+                            (node.parent.parent.kind === 252 /* VariableDeclaration */ || ts.isAssignmentExpression(node.parent.parent, /*excludeCompoundAssignment*/ true))) {
                             // var x = x || {};
                             // TODO: use getFalsyflagsOfType
                             addCandidateType(usage, checker.getTypeAtLocation(parent.right));
@@ -146112,7 +149471,7 @@
                         break;
                     case 55 /* AmpersandAmpersandToken */:
                     case 27 /* CommaToken */:
-                    case 101 /* InstanceOfKeyword */:
+                    case 102 /* InstanceOfKeyword */:
                         // nothing to infer here
                         break;
                 }
@@ -146132,7 +149491,7 @@
                     }
                 }
                 calculateUsageOfNode(parent, call.return_);
-                if (parent.kind === 204 /* CallExpression */) {
+                if (parent.kind === 206 /* CallExpression */) {
                     (usage.calls || (usage.calls = [])).push(call);
                 }
                 else {
@@ -146239,13 +149598,15 @@
                     }
                     calls.push.apply(calls, checker.getSignaturesOfType(anon, 0 /* Call */));
                     constructs.push.apply(constructs, checker.getSignaturesOfType(anon, 1 /* Construct */));
-                    if (anon.stringIndexInfo) {
-                        stringIndices.push(anon.stringIndexInfo.type);
-                        stringIndexReadonly = stringIndexReadonly || anon.stringIndexInfo.isReadonly;
+                    var stringIndexInfo = checker.getIndexInfoOfType(anon, 0 /* String */);
+                    if (stringIndexInfo) {
+                        stringIndices.push(stringIndexInfo.type);
+                        stringIndexReadonly = stringIndexReadonly || stringIndexInfo.isReadonly;
                     }
-                    if (anon.numberIndexInfo) {
-                        numberIndices.push(anon.numberIndexInfo.type);
-                        numberIndexReadonly = numberIndexReadonly || anon.numberIndexInfo.isReadonly;
+                    var numberIndexInfo = checker.getIndexInfoOfType(anon, 1 /* Number */);
+                    if (numberIndexInfo) {
+                        numberIndices.push(numberIndexInfo.type);
+                        numberIndexReadonly = numberIndexReadonly || numberIndexInfo.isReadonly;
                     }
                 }
                 var members = ts.mapEntries(props, function (name, types) {
@@ -146254,7 +149615,12 @@
                     s.type = checker.getUnionType(types);
                     return [name, s];
                 });
-                return checker.createAnonymousType(anons[0].symbol, members, calls, constructs, stringIndices.length ? checker.createIndexInfo(checker.getUnionType(stringIndices), stringIndexReadonly) : undefined, numberIndices.length ? checker.createIndexInfo(checker.getUnionType(numberIndices), numberIndexReadonly) : undefined);
+                var indexInfos = [];
+                if (stringIndices.length)
+                    indexInfos.push(checker.createIndexInfo(checker.getStringType(), checker.getUnionType(stringIndices), stringIndexReadonly));
+                if (numberIndices.length)
+                    indexInfos.push(checker.createIndexInfo(checker.getNumberType(), checker.getUnionType(numberIndices), numberIndexReadonly));
+                return checker.createAnonymousType(anons[0].symbol, members, calls, constructs, indexInfos);
             }
             function inferTypes(usage) {
                 var _a, _b, _c;
@@ -146289,8 +149655,8 @@
                 }
                 var callSignatures = usage.calls ? [getSignatureFromCalls(usage.calls)] : [];
                 var constructSignatures = usage.constructs ? [getSignatureFromCalls(usage.constructs)] : [];
-                var stringIndexInfo = usage.stringIndex && checker.createIndexInfo(combineFromUsage(usage.stringIndex), /*isReadonly*/ false);
-                return checker.createAnonymousType(/*symbol*/ undefined, members, callSignatures, constructSignatures, stringIndexInfo, /*numberIndexInfo*/ undefined);
+                var indexInfos = usage.stringIndex ? [checker.createIndexInfo(checker.getStringType(), combineFromUsage(usage.stringIndex), /*isReadonly*/ false)] : [];
+                return checker.createAnonymousType(/*symbol*/ undefined, members, callSignatures, constructSignatures, indexInfos);
             }
             function inferNamedTypesFromProperties(usage) {
                 if (!usage.properties || !usage.properties.size)
@@ -146391,7 +149757,7 @@
                 return types;
             }
             function getFunctionFromCalls(calls) {
-                return checker.createAnonymousType(/*symbol*/ undefined, ts.createSymbolTable(), [getSignatureFromCalls(calls)], ts.emptyArray, /*stringIndexInfo*/ undefined, /*numberIndexInfo*/ undefined);
+                return checker.createAnonymousType(/*symbol*/ undefined, ts.createSymbolTable(), [getSignatureFromCalls(calls)], ts.emptyArray, ts.emptyArray);
             }
             function getSignatureFromCalls(calls) {
                 var parameters = [];
@@ -146408,7 +149774,6 @@
                     _loop_15(i);
                 }
                 var returnType = combineFromUsage(combineUsages(calls.map(function (call) { return call.return_; })));
-                // TODO: GH#18217
                 return checker.createSignature(/*declaration*/ undefined, /*typeParameters*/ undefined, /*thisParameter*/ undefined, parameters, returnType, /*typePredicate*/ undefined, length, 0 /* None */);
             }
             function addCandidateType(usage, type) {
@@ -146552,7 +149917,7 @@
         codefix.createMissingMemberNodes = createMissingMemberNodes;
         function getNoopSymbolTrackerWithResolver(context) {
             return {
-                trackSymbol: ts.noop,
+                trackSymbol: function () { return false; },
                 moduleResolverHost: ts.getModuleSpecifierResolverHost(context.program, context.host),
             };
         }
@@ -146576,8 +149941,8 @@
             var ambient = !!(enclosingDeclaration.flags & 8388608 /* Ambient */);
             var quotePreference = ts.getQuotePreference(sourceFile, preferences);
             switch (declaration.kind) {
-                case 163 /* PropertySignature */:
-                case 164 /* PropertyDeclaration */:
+                case 164 /* PropertySignature */:
+                case 165 /* PropertyDeclaration */:
                     var flags = quotePreference === 0 /* Single */ ? 268435456 /* UseSingleQuotesForStringLiteralType */ : undefined;
                     var typeNode = checker.typeToTypeNode(type, enclosingDeclaration, flags, getNoopSymbolTrackerWithResolver(context));
                     if (importAdder) {
@@ -146591,8 +149956,8 @@
                     /*decorators*/ undefined, modifiers, name, optional ? ts.factory.createToken(57 /* QuestionToken */) : undefined, typeNode, 
                     /*initializer*/ undefined));
                     break;
-                case 168 /* GetAccessor */:
-                case 169 /* SetAccessor */: {
+                case 170 /* GetAccessor */:
+                case 171 /* SetAccessor */: {
                     var typeNode_1 = checker.typeToTypeNode(type, enclosingDeclaration, /*flags*/ undefined, getNoopSymbolTrackerWithResolver(context));
                     var allAccessors = ts.getAllAccessorDeclarations(declarations, declaration);
                     var orderedAccessors = allAccessors.secondAccessor
@@ -146621,8 +149986,8 @@
                     }
                     break;
                 }
-                case 165 /* MethodSignature */:
-                case 166 /* MethodDeclaration */:
+                case 166 /* MethodSignature */:
+                case 167 /* MethodDeclaration */:
                     // The signature for the implementation appears as an entry in `signatures` iff
                     // there is only one signature.
                     // If there are overloads and an implementation signature, it appears as an
@@ -146642,7 +150007,7 @@
                     }
                     for (var _a = 0, signatures_1 = signatures; _a < signatures_1.length; _a++) {
                         var signature = signatures_1[_a];
-                        // Need to ensure nodes are fresh each time so they can have different positions.
+                        // Ensure nodes are fresh so they can have different positions when going through formatting.
                         outputMethod(quotePreference, signature, ts.getSynthesizedDeepClones(modifiers, /*includeTrivia*/ false), ts.getSynthesizedDeepClone(name, /*includeTrivia*/ false));
                     }
                     if (!ambient) {
@@ -146658,17 +150023,17 @@
                     break;
             }
             function outputMethod(quotePreference, signature, modifiers, name, body) {
-                var method = signatureToMethodDeclaration(context, quotePreference, signature, enclosingDeclaration, modifiers, name, optional, body, importAdder);
+                var method = createSignatureDeclarationFromSignature(167 /* MethodDeclaration */, context, quotePreference, signature, body, name, modifiers, optional, enclosingDeclaration, importAdder);
                 if (method)
                     addClassElement(method);
             }
         }
-        function signatureToMethodDeclaration(context, quotePreference, signature, enclosingDeclaration, modifiers, name, optional, body, importAdder) {
+        function createSignatureDeclarationFromSignature(kind, context, quotePreference, signature, body, name, modifiers, optional, enclosingDeclaration, importAdder) {
             var program = context.program;
             var checker = program.getTypeChecker();
             var scriptTarget = ts.getEmitScriptTarget(program.getCompilerOptions());
             var flags = 1 /* NoTruncation */ | 1073741824 /* NoUndefinedOptionalParameterType */ | 256 /* SuppressAnyReturnType */ | (quotePreference === 0 /* Single */ ? 268435456 /* UseSingleQuotesForStringLiteralType */ : 0);
-            var signatureDeclaration = checker.signatureToSignatureDeclaration(signature, 166 /* MethodDeclaration */, enclosingDeclaration, flags, getNoopSymbolTrackerWithResolver(context));
+            var signatureDeclaration = checker.signatureToSignatureDeclaration(signature, kind, enclosingDeclaration, flags, getNoopSymbolTrackerWithResolver(context));
             if (!signatureDeclaration) {
                 return undefined;
             }
@@ -146720,9 +150085,20 @@
                     }
                 }
             }
-            return ts.factory.updateMethodDeclaration(signatureDeclaration, 
-            /*decorators*/ undefined, modifiers, signatureDeclaration.asteriskToken, name, optional ? ts.factory.createToken(57 /* QuestionToken */) : undefined, typeParameters, parameters, type, body);
+            var questionToken = optional ? ts.factory.createToken(57 /* QuestionToken */) : undefined;
+            var asteriskToken = signatureDeclaration.asteriskToken;
+            if (ts.isFunctionExpression(signatureDeclaration)) {
+                return ts.factory.updateFunctionExpression(signatureDeclaration, modifiers, signatureDeclaration.asteriskToken, ts.tryCast(name, ts.isIdentifier), typeParameters, parameters, type, body !== null && body !== void 0 ? body : signatureDeclaration.body);
+            }
+            if (ts.isArrowFunction(signatureDeclaration)) {
+                return ts.factory.updateArrowFunction(signatureDeclaration, modifiers, typeParameters, parameters, type, signatureDeclaration.equalsGreaterThanToken, body !== null && body !== void 0 ? body : signatureDeclaration.body);
+            }
+            if (ts.isMethodDeclaration(signatureDeclaration)) {
+                return ts.factory.updateMethodDeclaration(signatureDeclaration, /* decorators */ undefined, modifiers, asteriskToken, name !== null && name !== void 0 ? name : ts.factory.createIdentifier(""), questionToken, typeParameters, parameters, type, body);
+            }
+            return undefined;
         }
+        codefix.createSignatureDeclarationFromSignature = createSignatureDeclarationFromSignature;
         function createSignatureDeclarationFromCallExpression(kind, context, importAdder, call, name, modifierFlags, contextNode) {
             var quotePreference = ts.getQuotePreference(context.sourceFile, context.preferences);
             var scriptTarget = ts.getEmitScriptTarget(context.program.getCompilerOptions());
@@ -146752,7 +150128,7 @@
             var type = isJs || contextualType === undefined
                 ? undefined
                 : checker.typeToTypeNode(contextualType, contextNode, /*flags*/ undefined, tracker);
-            if (kind === 166 /* MethodDeclaration */) {
+            if (kind === 167 /* MethodDeclaration */) {
                 return ts.factory.createMethodDeclaration(
                 /*decorators*/ undefined, modifiers, asteriskToken, name, 
                 /*questionToken*/ undefined, typeParameters, parameters, type, ts.isInterfaceDeclaration(contextNode) ? undefined : createStubbedMethodBody(quotePreference));
@@ -146767,10 +150143,11 @@
                 var importableReference = tryGetAutoImportableReferenceFromTypeNode(typeNode, scriptTarget);
                 if (importableReference) {
                     importSymbols(importAdder, importableReference.symbols);
-                    return importableReference.typeNode;
+                    typeNode = importableReference.typeNode;
                 }
             }
-            return typeNode;
+            // Ensure nodes are fresh so they can have different positions when going through formatting.
+            return ts.getSynthesizedDeepClone(typeNode);
         }
         codefix.typeToAutoImportableTypeNode = typeToAutoImportableTypeNode;
         function createDummyParameters(argCount, names, types, minArgumentCount, inJs) {
@@ -146782,7 +150159,7 @@
                 /*dotDotDotToken*/ undefined, 
                 /*name*/ names && names[i] || "arg" + i, 
                 /*questionToken*/ minArgumentCount !== undefined && i >= minArgumentCount ? ts.factory.createToken(57 /* QuestionToken */) : undefined, 
-                /*type*/ inJs ? undefined : types && types[i] || ts.factory.createKeywordTypeNode(128 /* AnyKeyword */), 
+                /*type*/ inJs ? undefined : types && types[i] || ts.factory.createKeywordTypeNode(129 /* AnyKeyword */), 
                 /*initializer*/ undefined);
                 parameters.push(newParameter);
             }
@@ -146810,7 +150187,7 @@
             var maxArgsParameterSymbolNames = maxArgsSignature.parameters.map(function (symbol) { return symbol.name; });
             var parameters = createDummyParameters(maxNonRestArgs, maxArgsParameterSymbolNames, /* types */ undefined, minArgumentCount, /*inJs*/ false);
             if (someSigHasRestParameter) {
-                var anyArrayType = ts.factory.createArrayTypeNode(ts.factory.createKeywordTypeNode(128 /* AnyKeyword */));
+                var anyArrayType = ts.factory.createArrayTypeNode(ts.factory.createKeywordTypeNode(129 /* AnyKeyword */));
                 var restParameter = ts.factory.createParameterDeclaration(
                 /*decorators*/ undefined, 
                 /*modifiers*/ undefined, ts.factory.createToken(25 /* DotDotDotToken */), maxArgsParameterSymbolNames[maxNonRestArgs] || "rest", 
@@ -146845,10 +150222,10 @@
         codefix.createStubbedBody = createStubbedBody;
         function createVisibilityModifier(flags) {
             if (flags & 4 /* Public */) {
-                return ts.factory.createToken(122 /* PublicKeyword */);
+                return ts.factory.createToken(123 /* PublicKeyword */);
             }
             else if (flags & 16 /* Protected */) {
-                return ts.factory.createToken(121 /* ProtectedKeyword */);
+                return ts.factory.createToken(122 /* ProtectedKeyword */);
             }
             return undefined;
         }
@@ -146921,7 +150298,7 @@
         }
         codefix.tryGetAutoImportableReferenceFromTypeNode = tryGetAutoImportableReferenceFromTypeNode;
         function replaceFirstIdentifierOfEntityName(name, newIdentifier) {
-            if (name.kind === 78 /* Identifier */) {
+            if (name.kind === 79 /* Identifier */) {
                 return newIdentifier;
             }
             return ts.factory.createQualifiedName(replaceFirstIdentifierOfEntityName(name.left, newIdentifier), name.right);
@@ -147037,7 +150414,7 @@
                 isStatic: ts.hasStaticModifier(declaration),
                 isReadonly: ts.hasEffectiveReadonlyModifier(declaration),
                 type: getDeclarationType(declaration, program),
-                container: declaration.kind === 161 /* Parameter */ ? declaration.parent.parent : declaration.parent,
+                container: declaration.kind === 162 /* Parameter */ ? declaration.parent.parent : declaration.parent,
                 originalName: declaration.name.text,
                 declaration: declaration,
                 fieldName: fieldName,
@@ -147093,13 +150470,13 @@
                 return;
             constructor.body.forEachChild(function recur(node) {
                 if (ts.isElementAccessExpression(node) &&
-                    node.expression.kind === 107 /* ThisKeyword */ &&
+                    node.expression.kind === 108 /* ThisKeyword */ &&
                     ts.isStringLiteral(node.argumentExpression) &&
                     node.argumentExpression.text === originalName &&
                     ts.isWriteAccess(node)) {
                     changeTracker.replaceNode(file, node.argumentExpression, ts.factory.createStringLiteral(fieldName));
                 }
-                if (ts.isPropertyAccessExpression(node) && node.expression.kind === 107 /* ThisKeyword */ && node.name.text === originalName && ts.isWriteAccess(node)) {
+                if (ts.isPropertyAccessExpression(node) && node.expression.kind === 108 /* ThisKeyword */ && node.name.text === originalName && ts.isWriteAccess(node)) {
                     changeTracker.replaceNode(file, node.name, ts.factory.createIdentifier(fieldName));
                 }
                 if (!ts.isFunctionLike(node) && !ts.isClassLike(node)) {
@@ -147114,7 +150491,7 @@
                 var type = typeChecker.getTypeFromTypeNode(typeNode);
                 if (!typeChecker.isTypeAssignableTo(typeChecker.getUndefinedType(), type)) {
                     var types = ts.isUnionTypeNode(typeNode) ? typeNode.types : [typeNode];
-                    return ts.factory.createUnionTypeNode(__spreadArray(__spreadArray([], types), [ts.factory.createKeywordTypeNode(150 /* UndefinedKeyword */)]));
+                    return ts.factory.createUnionTypeNode(__spreadArray(__spreadArray([], types, true), [ts.factory.createKeywordTypeNode(151 /* UndefinedKeyword */)], false));
                 }
             }
             return typeNode;
@@ -147173,7 +150550,7 @@
         });
         function getActionsForUsageOfInvalidImport(context) {
             var sourceFile = context.sourceFile;
-            var targetKind = ts.Diagnostics.This_expression_is_not_callable.code === context.errorCode ? 204 /* CallExpression */ : 205 /* NewExpression */;
+            var targetKind = ts.Diagnostics.This_expression_is_not_callable.code === context.errorCode ? 206 /* CallExpression */ : 207 /* NewExpression */;
             var node = ts.findAncestor(ts.getTokenAtPosition(sourceFile, context.span.start), function (a) { return a.kind === targetKind; });
             if (!node) {
                 return [];
@@ -147189,9 +150566,8 @@
                 ts.Diagnostics.Type_0_is_not_assignable_to_type_1.code,
                 ts.Diagnostics.Type_0_is_not_assignable_to_type_1_Two_different_types_with_this_name_exist_but_they_are_unrelated.code,
                 ts.Diagnostics.Type_predicate_0_is_not_assignable_to_1.code,
-                ts.Diagnostics.Property_0_of_type_1_is_not_assignable_to_string_index_type_2.code,
-                ts.Diagnostics.Property_0_of_type_1_is_not_assignable_to_numeric_index_type_2.code,
-                ts.Diagnostics.Numeric_index_type_0_is_not_assignable_to_string_index_type_1.code,
+                ts.Diagnostics.Property_0_of_type_1_is_not_assignable_to_2_index_type_3.code,
+                ts.Diagnostics._0_index_type_1_is_not_assignable_to_2_index_type_3.code,
                 ts.Diagnostics.Property_0_in_type_1_is_not_assignable_to_the_same_property_in_base_type_2.code,
                 ts.Diagnostics.Property_0_in_type_1_is_not_assignable_to_type_2.code,
                 ts.Diagnostics.Property_0_of_JSX_spread_attribute_is_not_assignable_to_target_property.code,
@@ -147218,8 +150594,8 @@
                 ts.addRange(fixes, getCodeFixesForImportDeclaration(context, relatedImport));
             }
             if (ts.isExpression(expr) && !(ts.isNamedDeclaration(expr.parent) && expr.parent.name === expr)) {
-                var sourceFile_1 = context.sourceFile;
-                var changes = ts.textChanges.ChangeTracker.with(context, function (t) { return t.replaceNode(sourceFile_1, expr, ts.factory.createPropertyAccessExpression(expr, "default"), {}); });
+                var sourceFile_2 = context.sourceFile;
+                var changes = ts.textChanges.ChangeTracker.with(context, function (t) { return t.replaceNode(sourceFile_2, expr, ts.factory.createPropertyAccessExpression(expr, "default"), {}); });
                 fixes.push(codefix.createCodeFixActionWithoutFixAll(fixName, changes, ts.Diagnostics.Use_synthetic_default_member));
             }
             return fixes;
@@ -147292,7 +150668,7 @@
             return codefix.createCodeFixAction(fixName, changes, [ts.Diagnostics.Add_undefined_type_to_property_0, propertyDeclaration.name.getText()], fixIdAddUndefinedType, ts.Diagnostics.Add_undefined_type_to_all_uninitialized_properties);
         }
         function addUndefinedType(changeTracker, propertyDeclarationSourceFile, propertyDeclaration) {
-            var undefinedTypeNode = ts.factory.createKeywordTypeNode(150 /* UndefinedKeyword */);
+            var undefinedTypeNode = ts.factory.createKeywordTypeNode(151 /* UndefinedKeyword */);
             var type = propertyDeclaration.type; // TODO: GH#18217
             var types = ts.isUnionTypeNode(type) ? type.types.concat(undefinedTypeNode) : [type, undefinedTypeNode];
             changeTracker.replaceNode(propertyDeclarationSourceFile, type, ts.factory.createUnionTypeNode(types));
@@ -147506,8 +150882,8 @@
         });
         function getImportTypeNode(sourceFile, pos) {
             var token = ts.getTokenAtPosition(sourceFile, pos);
-            ts.Debug.assert(token.kind === 99 /* ImportKeyword */, "This token should be an ImportKeyword");
-            ts.Debug.assert(token.parent.kind === 196 /* ImportType */, "Token parent should be an ImportType");
+            ts.Debug.assert(token.kind === 100 /* ImportKeyword */, "This token should be an ImportKeyword");
+            ts.Debug.assert(token.parent.kind === 198 /* ImportType */, "Token parent should be an ImportType");
             return token.parent;
         }
         function doChange(changes, sourceFile, importType) {
@@ -147526,10 +150902,6 @@
         codefix.registerCodeFix({
             errorCodes: errorCodes,
             getCodeActions: function (context) {
-                var jsx = context.program.getCompilerOptions().jsx;
-                if (jsx !== 2 /* React */ && jsx !== 3 /* ReactNative */) {
-                    return undefined;
-                }
                 var sourceFile = context.sourceFile, span = context.span;
                 var node = findNodeToFix(sourceFile, span.start);
                 if (!node)
@@ -147603,7 +150975,7 @@
     (function (codefix) {
         var fixIdAddMissingTypeof = "fixConvertToMappedObjectType";
         var fixId = fixIdAddMissingTypeof;
-        var errorCodes = [ts.Diagnostics.An_index_signature_parameter_type_cannot_be_a_union_type_Consider_using_a_mapped_object_type_instead.code];
+        var errorCodes = [ts.Diagnostics.An_index_signature_parameter_type_cannot_be_a_literal_type_or_generic_type_Consider_using_a_mapped_object_type_instead.code];
         codefix.registerCodeFix({
             errorCodes: errorCodes,
             getCodeActions: function (context) {
@@ -147639,11 +151011,11 @@
             var otherMembers = members.filter(function (member) { return !ts.isIndexSignatureDeclaration(member); });
             var parameter = ts.first(indexSignature.parameters);
             var mappedTypeParameter = ts.factory.createTypeParameterDeclaration(ts.cast(parameter.name, ts.isIdentifier), parameter.type);
-            var mappedIntersectionType = ts.factory.createMappedTypeNode(ts.hasEffectiveReadonlyModifier(indexSignature) ? ts.factory.createModifier(142 /* ReadonlyKeyword */) : undefined, mappedTypeParameter, 
+            var mappedIntersectionType = ts.factory.createMappedTypeNode(ts.hasEffectiveReadonlyModifier(indexSignature) ? ts.factory.createModifier(143 /* ReadonlyKeyword */) : undefined, mappedTypeParameter, 
             /*nameType*/ undefined, indexSignature.questionToken, indexSignature.type);
-            var intersectionType = ts.factory.createIntersectionTypeNode(__spreadArray(__spreadArray(__spreadArray([], ts.getAllSuperTypeNodes(container)), [
+            var intersectionType = ts.factory.createIntersectionTypeNode(__spreadArray(__spreadArray(__spreadArray([], ts.getAllSuperTypeNodes(container), true), [
                 mappedIntersectionType
-            ]), (otherMembers.length ? [ts.factory.createTypeLiteralNode(otherMembers)] : ts.emptyArray)));
+            ], false), (otherMembers.length ? [ts.factory.createTypeLiteralNode(otherMembers)] : ts.emptyArray), true));
             changes.replaceNode(sourceFile, container, createTypeAliasFromInterface(container, intersectionType));
         }
     })(codefix = ts.codefix || (ts.codefix = {}));
@@ -147696,7 +151068,7 @@
             },
         });
         function makeChange(changeTracker, sourceFile, span) {
-            var awaitKeyword = ts.tryCast(ts.getTokenAtPosition(sourceFile, span.start), function (node) { return node.kind === 130 /* AwaitKeyword */; });
+            var awaitKeyword = ts.tryCast(ts.getTokenAtPosition(sourceFile, span.start), function (node) { return node.kind === 131 /* AwaitKeyword */; });
             var awaitExpression = awaitKeyword && ts.tryCast(awaitKeyword.parent, ts.isAwaitExpression);
             if (!awaitExpression) {
                 return;
@@ -147707,7 +151079,7 @@
                 var leftMostExpression = ts.getLeftmostExpression(awaitExpression.expression, /*stopAtCallExpressions*/ false);
                 if (ts.isIdentifier(leftMostExpression)) {
                     var precedingToken = ts.findPrecedingToken(awaitExpression.parent.pos, sourceFile);
-                    if (precedingToken && precedingToken.kind !== 102 /* NewKeyword */) {
+                    if (precedingToken && precedingToken.kind !== 103 /* NewKeyword */) {
                         expressionToReplace = awaitExpression.parent;
                     }
                 }
@@ -147764,26 +151136,28 @@
             errorCodes: errorCodes,
             getCodeActions: function (context) {
                 var sourceFile = context.sourceFile, span = context.span, program = context.program;
-                var variableStatement = getVariableStatement(sourceFile, span.start, program);
-                var changes = ts.textChanges.ChangeTracker.with(context, function (t) { return doChange(t, sourceFile, variableStatement); });
+                var range = getConstTokenRange(sourceFile, span.start, program);
+                if (range === undefined)
+                    return;
+                var changes = ts.textChanges.ChangeTracker.with(context, function (t) { return doChange(t, sourceFile, range); });
                 return [codefix.createCodeFixAction(fixId, changes, ts.Diagnostics.Convert_const_to_let, fixId, ts.Diagnostics.Convert_const_to_let)];
             },
             fixIds: [fixId]
         });
-        function getVariableStatement(sourceFile, pos, program) {
-            var token = ts.getTokenAtPosition(sourceFile, pos);
+        function getConstTokenRange(sourceFile, pos, program) {
+            var _a;
             var checker = program.getTypeChecker();
-            var symbol = checker.getSymbolAtLocation(token);
-            if (symbol === null || symbol === void 0 ? void 0 : symbol.valueDeclaration) {
-                return symbol.valueDeclaration.parent.parent;
-            }
-        }
-        function doChange(changes, sourceFile, variableStatement) {
-            if (!variableStatement) {
+            var symbol = checker.getSymbolAtLocation(ts.getTokenAtPosition(sourceFile, pos));
+            var declaration = ts.tryCast((_a = symbol === null || symbol === void 0 ? void 0 : symbol.valueDeclaration) === null || _a === void 0 ? void 0 : _a.parent, ts.isVariableDeclarationList);
+            if (declaration === undefined)
                 return;
-            }
-            var start = variableStatement.getStart();
-            changes.replaceRangeWithText(sourceFile, { pos: start, end: start + 5 }, "let");
+            var constToken = ts.findChildOfKind(declaration, 85 /* ConstKeyword */, sourceFile);
+            if (constToken === undefined)
+                return;
+            return ts.createRange(constToken.pos, constToken.end);
+        }
+        function doChange(changes, sourceFile, range) {
+            changes.replaceRangeWithText(sourceFile, range, "let");
         }
     })(codefix = ts.codefix || (ts.codefix = {}));
 })(ts || (ts = {}));
@@ -147869,7 +151243,7 @@
                 // append ` | void` to type argument
                 var typeArgument = typeArguments[0];
                 var needsParens = !ts.isUnionTypeNode(typeArgument) && !ts.isParenthesizedTypeNode(typeArgument) &&
-                    ts.isParenthesizedTypeNode(ts.factory.createUnionTypeNode([typeArgument, ts.factory.createKeywordTypeNode(113 /* VoidKeyword */)]).types[0]);
+                    ts.isParenthesizedTypeNode(ts.factory.createUnionTypeNode([typeArgument, ts.factory.createKeywordTypeNode(114 /* VoidKeyword */)]).types[0]);
                 if (needsParens) {
                     changes.insertText(sourceFile, typeArgument.pos, "(");
                 }
@@ -147961,7 +151335,7 @@
         ;
         function getInfo(context, considerPartialSpans) {
             if (considerPartialSpans === void 0) { considerPartialSpans = true; }
-            var file = context.file;
+            var file = context.file, program = context.program;
             var span = ts.getRefactorContextSpan(context);
             var token = ts.getTokenAtPosition(file, span.start);
             var exportNode = !!(token.parent && ts.getSyntacticModifierFlags(token.parent) & 1 /* Export */) && considerPartialSpans ? token.parent : ts.getParentNodeInSpan(token, file, span);
@@ -147975,17 +151349,25 @@
             if (!(flags & 1 /* Export */) || !wasDefault && exportingModuleSymbol.exports.has("default" /* Default */)) {
                 return { error: ts.getLocaleSpecificMessage(ts.Diagnostics.This_file_already_has_a_default_export) };
             }
+            var checker = program.getTypeChecker();
+            var noSymbolError = function (id) {
+                return (ts.isIdentifier(id) && checker.getSymbolAtLocation(id)) ? undefined
+                    : { error: ts.getLocaleSpecificMessage(ts.Diagnostics.Can_only_convert_named_export) };
+            };
             switch (exportNode.kind) {
-                case 252 /* FunctionDeclaration */:
-                case 253 /* ClassDeclaration */:
-                case 254 /* InterfaceDeclaration */:
-                case 256 /* EnumDeclaration */:
-                case 255 /* TypeAliasDeclaration */:
-                case 257 /* ModuleDeclaration */: {
+                case 254 /* FunctionDeclaration */:
+                case 255 /* ClassDeclaration */:
+                case 256 /* InterfaceDeclaration */:
+                case 258 /* EnumDeclaration */:
+                case 257 /* TypeAliasDeclaration */:
+                case 259 /* ModuleDeclaration */: {
                     var node = exportNode;
-                    return node.name && ts.isIdentifier(node.name) ? { exportNode: node, exportName: node.name, wasDefault: wasDefault, exportingModuleSymbol: exportingModuleSymbol } : undefined;
+                    if (!node.name)
+                        return undefined;
+                    return noSymbolError(node.name)
+                        || { exportNode: node, exportName: node.name, wasDefault: wasDefault, exportingModuleSymbol: exportingModuleSymbol };
                 }
-                case 233 /* VariableStatement */: {
+                case 235 /* VariableStatement */: {
                     var vs = exportNode;
                     // Must be `export const x = something;`.
                     if (!(vs.declarationList.flags & 2 /* Const */) || vs.declarationList.declarations.length !== 1) {
@@ -147995,12 +151377,15 @@
                     if (!decl.initializer)
                         return undefined;
                     ts.Debug.assert(!wasDefault, "Can't have a default flag here");
-                    return ts.isIdentifier(decl.name) ? { exportNode: vs, exportName: decl.name, wasDefault: wasDefault, exportingModuleSymbol: exportingModuleSymbol } : undefined;
+                    return noSymbolError(decl.name)
+                        || { exportNode: vs, exportName: decl.name, wasDefault: wasDefault, exportingModuleSymbol: exportingModuleSymbol };
                 }
-                case 267 /* ExportAssignment */: {
+                case 269 /* ExportAssignment */: {
                     var node = exportNode;
-                    var exp = node.expression;
-                    return node.isExportEquals ? undefined : { exportNode: node, exportName: exp, wasDefault: wasDefault, exportingModuleSymbol: exportingModuleSymbol };
+                    if (node.isExportEquals)
+                        return undefined;
+                    return noSymbolError(node.expression)
+                        || { exportNode: node, exportName: node.expression, wasDefault: wasDefault, exportingModuleSymbol: exportingModuleSymbol };
                 }
                 default:
                     return undefined;
@@ -148019,18 +151404,18 @@
                     changes.replaceNode(exportingSourceFile, exportNode, ts.factory.createExportDeclaration(/*decorators*/ undefined, /*modifiers*/ undefined, /*isTypeOnly*/ false, ts.factory.createNamedExports([spec])));
                 }
                 else {
-                    changes.delete(exportingSourceFile, ts.Debug.checkDefined(ts.findModifier(exportNode, 87 /* DefaultKeyword */), "Should find a default keyword in modifier list"));
+                    changes.delete(exportingSourceFile, ts.Debug.checkDefined(ts.findModifier(exportNode, 88 /* DefaultKeyword */), "Should find a default keyword in modifier list"));
                 }
             }
             else {
-                var exportKeyword = ts.Debug.checkDefined(ts.findModifier(exportNode, 92 /* ExportKeyword */), "Should find an export keyword in modifier list");
+                var exportKeyword = ts.Debug.checkDefined(ts.findModifier(exportNode, 93 /* ExportKeyword */), "Should find an export keyword in modifier list");
                 switch (exportNode.kind) {
-                    case 252 /* FunctionDeclaration */:
-                    case 253 /* ClassDeclaration */:
-                    case 254 /* InterfaceDeclaration */:
-                        changes.insertNodeAfter(exportingSourceFile, exportKeyword, ts.factory.createToken(87 /* DefaultKeyword */));
+                    case 254 /* FunctionDeclaration */:
+                    case 255 /* ClassDeclaration */:
+                    case 256 /* InterfaceDeclaration */:
+                        changes.insertNodeAfter(exportingSourceFile, exportKeyword, ts.factory.createToken(88 /* DefaultKeyword */));
                         break;
-                    case 233 /* VariableStatement */:
+                    case 235 /* VariableStatement */:
                         // If 'x' isn't used in this file and doesn't have type definition, `export const x = 0;` --> `export default 0;`
                         var decl = ts.first(exportNode.declarationList.declarations);
                         if (!ts.FindAllReferences.Core.isSymbolReferencedInFile(exportName, checker, exportingSourceFile) && !decl.type) {
@@ -148039,9 +151424,9 @@
                             break;
                         }
                     // falls through
-                    case 256 /* EnumDeclaration */:
-                    case 255 /* TypeAliasDeclaration */:
-                    case 257 /* ModuleDeclaration */:
+                    case 258 /* EnumDeclaration */:
+                    case 257 /* TypeAliasDeclaration */:
+                    case 259 /* ModuleDeclaration */:
                         // `export type T = number;` -> `type T = number; export default T;`
                         changes.deleteModifier(exportingSourceFile, exportKeyword);
                         changes.insertNodeAfter(exportingSourceFile, exportNode, ts.factory.createExportDefault(ts.factory.createIdentifier(exportName.text)));
@@ -148068,18 +151453,18 @@
         function changeDefaultToNamedImport(importingSourceFile, ref, changes, exportName) {
             var parent = ref.parent;
             switch (parent.kind) {
-                case 202 /* PropertyAccessExpression */:
+                case 204 /* PropertyAccessExpression */:
                     // `a.default` --> `a.foo`
                     changes.replaceNode(importingSourceFile, ref, ts.factory.createIdentifier(exportName));
                     break;
-                case 266 /* ImportSpecifier */:
-                case 271 /* ExportSpecifier */: {
+                case 268 /* ImportSpecifier */:
+                case 273 /* ExportSpecifier */: {
                     var spec = parent;
                     // `default as foo` --> `foo`, `default as bar` --> `foo as bar`
                     changes.replaceNode(importingSourceFile, spec, makeImportSpecifier(exportName, spec.name.text));
                     break;
                 }
-                case 263 /* ImportClause */: {
+                case 265 /* ImportClause */: {
                     var clause = parent;
                     ts.Debug.assert(clause.name === ref, "Import clause name should match provided ref");
                     var spec = makeImportSpecifier(exportName, ref.text);
@@ -148088,7 +151473,7 @@
                         // `import foo from "./a";` --> `import { foo } from "./a";`
                         changes.replaceNode(importingSourceFile, ref, ts.factory.createNamedImports([spec]));
                     }
-                    else if (namedBindings.kind === 264 /* NamespaceImport */) {
+                    else if (namedBindings.kind === 266 /* NamespaceImport */) {
                         // `import foo, * as a from "./a";` --> `import * as a from ".a/"; import { foo } from "./a";`
                         changes.deleteRange(importingSourceFile, { pos: ref.getStart(importingSourceFile), end: namedBindings.getStart(importingSourceFile) });
                         var quotePreference = ts.isStringLiteral(clause.parent.moduleSpecifier) ? ts.quotePreferenceFromString(clause.parent.moduleSpecifier, importingSourceFile) : 1 /* Double */;
@@ -148109,11 +151494,11 @@
         function changeNamedToDefaultImport(importingSourceFile, ref, changes) {
             var parent = ref.parent;
             switch (parent.kind) {
-                case 202 /* PropertyAccessExpression */:
+                case 204 /* PropertyAccessExpression */:
                     // `a.foo` --> `a.default`
                     changes.replaceNode(importingSourceFile, ref, ts.factory.createIdentifier("default"));
                     break;
-                case 266 /* ImportSpecifier */: {
+                case 268 /* ImportSpecifier */: {
                     // `import { foo } from "./a";` --> `import foo from "./a";`
                     // `import { foo as bar } from "./a";` --> `import bar from "./a";`
                     var defaultImport = ts.factory.createIdentifier(parent.name.text);
@@ -148126,7 +151511,7 @@
                     }
                     break;
                 }
-                case 271 /* ExportSpecifier */: {
+                case 273 /* ExportSpecifier */: {
                     // `export { foo } from "./a";` --> `export { default as foo } from "./a";`
                     // `export { foo as bar } from "./a";` --> `export { default as bar } from "./a";`
                     // `export { foo as default } from "./a";` --> `export { default } from "./a";`
@@ -148172,7 +151557,7 @@
                 if (!info)
                     return ts.emptyArray;
                 if (!refactor.isRefactorErrorInfo(info)) {
-                    var namespaceImport = info.kind === 264 /* NamespaceImport */;
+                    var namespaceImport = info.kind === 266 /* NamespaceImport */;
                     var action = namespaceImport ? namespaceToNamedAction : namedToNamespaceAction;
                     return [{ name: refactorName, description: action.description, actions: [action] }];
                 }
@@ -148216,7 +151601,7 @@
         }
         function doChange(sourceFile, program, changes, toConvert) {
             var checker = program.getTypeChecker();
-            if (toConvert.kind === 264 /* NamespaceImport */) {
+            if (toConvert.kind === 266 /* NamespaceImport */) {
                 doChangeNamespaceToNamed(sourceFile, checker, changes, toConvert, ts.getAllowSyntheticDefaultImports(program.getCompilerOptions()));
             }
             else {
@@ -148273,14 +151658,35 @@
         function doChangeNamedToNamespace(sourceFile, checker, changes, toConvert) {
             var importDecl = toConvert.parent.parent;
             var moduleSpecifier = importDecl.moduleSpecifier;
-            var preferredName = moduleSpecifier && ts.isStringLiteral(moduleSpecifier) ? ts.codefix.moduleSpecifierToValidIdentifier(moduleSpecifier.text, 99 /* ESNext */) : "module";
-            var namespaceNameConflicts = toConvert.elements.some(function (element) {
-                return ts.FindAllReferences.Core.eachSymbolReferenceInFile(element.name, checker, sourceFile, function (id) {
-                    return !!checker.resolveName(preferredName, id, 67108863 /* All */, /*excludeGlobals*/ true);
-                }) || false;
+            var toConvertSymbols = new ts.Set();
+            toConvert.elements.forEach(function (namedImport) {
+                var symbol = checker.getSymbolAtLocation(namedImport.name);
+                if (symbol) {
+                    toConvertSymbols.add(symbol);
+                }
             });
+            var preferredName = moduleSpecifier && ts.isStringLiteral(moduleSpecifier) ? ts.codefix.moduleSpecifierToValidIdentifier(moduleSpecifier.text, 99 /* ESNext */) : "module";
+            function hasNamespaceNameConflict(namedImport) {
+                // We need to check if the preferred namespace name (`preferredName`) we'd like to use in the refactored code will present a name conflict.
+                // A name conflict means that, in a scope where we would like to use the preferred namespace name, there already exists a symbol with that name in that scope.
+                // We are going to use the namespace name in the scopes the named imports being refactored are referenced,
+                // so we look for conflicts by looking at every reference to those named imports.
+                return !!ts.FindAllReferences.Core.eachSymbolReferenceInFile(namedImport.name, checker, sourceFile, function (id) {
+                    var symbol = checker.resolveName(preferredName, id, 67108863 /* All */, /*excludeGlobals*/ true);
+                    if (symbol) { // There already is a symbol with the same name as the preferred namespace name.
+                        if (toConvertSymbols.has(symbol)) { // `preferredName` resolves to a symbol for one of the named import references we are going to transform into namespace import references...
+                            return ts.isExportSpecifier(id.parent); // ...but if this reference is an export specifier, it will not be transformed, so it is a conflict; otherwise, it will be renamed and is not a conflict.
+                        }
+                        return true; // `preferredName` resolves to any other symbol, which will be present in the refactored code and so poses a name conflict.
+                    }
+                    return false; // There is no symbol with the same name as the preferred namespace name, so no conflict.
+                });
+            }
+            var namespaceNameConflicts = toConvert.elements.some(hasNamespaceNameConflict);
             var namespaceImportName = namespaceNameConflicts ? ts.getUniqueName(preferredName, sourceFile) : preferredName;
-            var neededNamedImports = [];
+            // Imports that need to be kept as named imports in the refactored code, to avoid changing the semantics.
+            // More specifically, those are named imports that appear in named exports in the original code, e.g. `a` in `import { a } from "m"; export { a }`.
+            var neededNamedImports = new ts.Set();
             var _loop_16 = function (element) {
                 var propertyName = (element.propertyName || element.name).text;
                 ts.FindAllReferences.Core.eachSymbolReferenceInFile(element.name, checker, sourceFile, function (id) {
@@ -148288,10 +151694,8 @@
                     if (ts.isShorthandPropertyAssignment(id.parent)) {
                         changes.replaceNode(sourceFile, id.parent, ts.factory.createPropertyAssignment(id.text, access));
                     }
-                    else if (ts.isExportSpecifier(id.parent) && !id.parent.propertyName) {
-                        if (!neededNamedImports.some(function (n) { return n.name === element.name; })) {
-                            neededNamedImports.push(ts.factory.createImportSpecifier(element.propertyName && ts.factory.createIdentifier(element.propertyName.text), ts.factory.createIdentifier(element.name.text)));
-                        }
+                    else if (ts.isExportSpecifier(id.parent)) {
+                        neededNamedImports.add(element);
                     }
                     else {
                         changes.replaceNode(sourceFile, id, access);
@@ -148303,8 +151707,11 @@
                 _loop_16(element);
             }
             changes.replaceNode(sourceFile, toConvert, ts.factory.createNamespaceImport(ts.factory.createIdentifier(namespaceImportName)));
-            if (neededNamedImports.length) {
-                changes.insertNodeAfter(sourceFile, toConvert.parent.parent, updateImport(importDecl, /*defaultImportName*/ undefined, neededNamedImports));
+            if (neededNamedImports.size) {
+                var newNamedImports = ts.arrayFrom(neededNamedImports.values()).map(function (element) {
+                    return ts.factory.createImportSpecifier(element.propertyName && ts.factory.createIdentifier(element.propertyName.text), ts.factory.createIdentifier(element.name.text));
+                });
+                changes.insertNodeAfter(sourceFile, toConvert.parent.parent, updateImport(importDecl, /*defaultImportName*/ undefined, newNamedImports));
             }
         }
         function updateImport(old, defaultImportName, elements) {
@@ -148617,27 +152024,27 @@
                 var lastDeclaration = signatureDecls[signatureDecls.length - 1];
                 var updated = lastDeclaration;
                 switch (lastDeclaration.kind) {
-                    case 165 /* MethodSignature */: {
+                    case 166 /* MethodSignature */: {
                         updated = ts.factory.updateMethodSignature(lastDeclaration, lastDeclaration.modifiers, lastDeclaration.name, lastDeclaration.questionToken, lastDeclaration.typeParameters, getNewParametersForCombinedSignature(signatureDecls), lastDeclaration.type);
                         break;
                     }
-                    case 166 /* MethodDeclaration */: {
+                    case 167 /* MethodDeclaration */: {
                         updated = ts.factory.updateMethodDeclaration(lastDeclaration, lastDeclaration.decorators, lastDeclaration.modifiers, lastDeclaration.asteriskToken, lastDeclaration.name, lastDeclaration.questionToken, lastDeclaration.typeParameters, getNewParametersForCombinedSignature(signatureDecls), lastDeclaration.type, lastDeclaration.body);
                         break;
                     }
-                    case 170 /* CallSignature */: {
+                    case 172 /* CallSignature */: {
                         updated = ts.factory.updateCallSignature(lastDeclaration, lastDeclaration.typeParameters, getNewParametersForCombinedSignature(signatureDecls), lastDeclaration.type);
                         break;
                     }
-                    case 167 /* Constructor */: {
+                    case 169 /* Constructor */: {
                         updated = ts.factory.updateConstructorDeclaration(lastDeclaration, lastDeclaration.decorators, lastDeclaration.modifiers, getNewParametersForCombinedSignature(signatureDecls), lastDeclaration.body);
                         break;
                     }
-                    case 171 /* ConstructSignature */: {
+                    case 173 /* ConstructSignature */: {
                         updated = ts.factory.updateConstructSignature(lastDeclaration, lastDeclaration.typeParameters, getNewParametersForCombinedSignature(signatureDecls), lastDeclaration.type);
                         break;
                     }
-                    case 252 /* FunctionDeclaration */: {
+                    case 254 /* FunctionDeclaration */: {
                         updated = ts.factory.updateFunctionDeclaration(lastDeclaration, lastDeclaration.decorators, lastDeclaration.modifiers, lastDeclaration.asteriskToken, lastDeclaration.name, lastDeclaration.typeParameters, getNewParametersForCombinedSignature(signatureDecls), lastDeclaration.type, lastDeclaration.body);
                         break;
                     }
@@ -148669,7 +152076,7 @@
                 }
                 function convertParameterToNamedTupleMember(p) {
                     ts.Debug.assert(ts.isIdentifier(p.name)); // This is checked during refactoring applicability checking
-                    var result = ts.setTextRange(ts.factory.createNamedTupleMember(p.dotDotDotToken, p.name, p.questionToken, p.type || ts.factory.createKeywordTypeNode(128 /* AnyKeyword */)), p);
+                    var result = ts.setTextRange(ts.factory.createNamedTupleMember(p.dotDotDotToken, p.name, p.questionToken, p.type || ts.factory.createKeywordTypeNode(129 /* AnyKeyword */)), p);
                     var parameterDocComment = p.symbol && p.symbol.getDocumentationComment(checker);
                     if (parameterDocComment) {
                         var newComment = ts.displayPartsToString(parameterDocComment);
@@ -148689,12 +152096,12 @@
             }
             function isConvertableSignatureDeclaration(d) {
                 switch (d.kind) {
-                    case 165 /* MethodSignature */:
-                    case 166 /* MethodDeclaration */:
-                    case 170 /* CallSignature */:
-                    case 167 /* Constructor */:
-                    case 171 /* ConstructSignature */:
-                    case 252 /* FunctionDeclaration */:
+                    case 166 /* MethodSignature */:
+                    case 167 /* MethodDeclaration */:
+                    case 172 /* CallSignature */:
+                    case 169 /* Constructor */:
+                    case 173 /* ConstructSignature */:
+                    case 254 /* FunctionDeclaration */:
                         return true;
                 }
                 return false;
@@ -148946,7 +152353,6 @@
                 Messages.cannotExtractReadonlyPropertyInitializerOutsideConstructor = createMessage("Cannot move initialization of read-only class property outside of the constructor");
                 Messages.cannotExtractAmbientBlock = createMessage("Cannot extract code from ambient contexts");
                 Messages.cannotAccessVariablesFromNestedScopes = createMessage("Cannot access variables from nested scopes");
-                Messages.cannotExtractToOtherFunctionLike = createMessage("Cannot extract method to a function-like scope that is not a function");
                 Messages.cannotExtractToJSClass = createMessage("Cannot extract constant to a class scope in JS");
                 Messages.cannotExtractToExpressionArrowFunction = createMessage("Cannot extract constant to an arrow function without a block");
             })(Messages = extractSymbol.Messages || (extractSymbol.Messages = {}));
@@ -149084,21 +152490,21 @@
                 function checkForStaticContext(nodeToCheck, containingClass) {
                     var current = nodeToCheck;
                     while (current !== containingClass) {
-                        if (current.kind === 164 /* PropertyDeclaration */) {
-                            if (ts.hasSyntacticModifier(current, 32 /* Static */)) {
+                        if (current.kind === 165 /* PropertyDeclaration */) {
+                            if (ts.isStatic(current)) {
                                 rangeFacts |= RangeFacts.InStaticRegion;
                             }
                             break;
                         }
-                        else if (current.kind === 161 /* Parameter */) {
+                        else if (current.kind === 162 /* Parameter */) {
                             var ctorOrMethod = ts.getContainingFunction(current);
-                            if (ctorOrMethod.kind === 167 /* Constructor */) {
+                            if (ctorOrMethod.kind === 169 /* Constructor */) {
                                 rangeFacts |= RangeFacts.InStaticRegion;
                             }
                             break;
                         }
-                        else if (current.kind === 166 /* MethodDeclaration */) {
-                            if (ts.hasSyntacticModifier(current, 32 /* Static */)) {
+                        else if (current.kind === 167 /* MethodDeclaration */) {
+                            if (ts.isStatic(current)) {
                                 rangeFacts |= RangeFacts.InStaticRegion;
                             }
                         }
@@ -149140,7 +152546,7 @@
                             return true;
                         }
                         if (ts.isDeclaration(node)) {
-                            var declaringNode = (node.kind === 250 /* VariableDeclaration */) ? node.parent.parent : node;
+                            var declaringNode = (node.kind === 252 /* VariableDeclaration */) ? node.parent.parent : node;
                             if (ts.hasSyntacticModifier(declaringNode, 1 /* Export */)) {
                                 // TODO: GH#18217 Silly to use `errors ||` since it's definitely not defined (see top of `visit`)
                                 // Also, if we're only pushing one error, just use `let error: Diagnostic | undefined`!
@@ -149152,16 +152558,16 @@
                         }
                         // Some things can't be extracted in certain situations
                         switch (node.kind) {
-                            case 262 /* ImportDeclaration */:
+                            case 264 /* ImportDeclaration */:
                                 (errors || (errors = [])).push(ts.createDiagnosticForNode(node, Messages.cannotExtractImport));
                                 return true;
-                            case 267 /* ExportAssignment */:
+                            case 269 /* ExportAssignment */:
                                 (errors || (errors = [])).push(ts.createDiagnosticForNode(node, Messages.cannotExtractExportedEntity));
                                 return true;
-                            case 105 /* SuperKeyword */:
+                            case 106 /* SuperKeyword */:
                                 // For a super *constructor call*, we have to be extracting the entire class,
                                 // but a super *method call* simply implies a 'this' reference
-                                if (node.parent.kind === 204 /* CallExpression */) {
+                                if (node.parent.kind === 206 /* CallExpression */) {
                                     // Super constructor call
                                     var containingClass_1 = ts.getContainingClass(node); // TODO:GH#18217
                                     if (containingClass_1.pos < span.start || containingClass_1.end >= (span.start + span.length)) {
@@ -149173,7 +152579,7 @@
                                     rangeFacts |= RangeFacts.UsesThis;
                                 }
                                 break;
-                            case 210 /* ArrowFunction */:
+                            case 212 /* ArrowFunction */:
                                 // check if arrow function uses this
                                 ts.forEachChild(node, function check(n) {
                                     if (ts.isThis(n)) {
@@ -149187,39 +152593,39 @@
                                     }
                                 });
                             // falls through
-                            case 253 /* ClassDeclaration */:
-                            case 252 /* FunctionDeclaration */:
+                            case 255 /* ClassDeclaration */:
+                            case 254 /* FunctionDeclaration */:
                                 if (ts.isSourceFile(node.parent) && node.parent.externalModuleIndicator === undefined) {
                                     // You cannot extract global declarations
                                     (errors || (errors = [])).push(ts.createDiagnosticForNode(node, Messages.functionWillNotBeVisibleInTheNewScope));
                                 }
                             // falls through
-                            case 222 /* ClassExpression */:
-                            case 209 /* FunctionExpression */:
-                            case 166 /* MethodDeclaration */:
-                            case 167 /* Constructor */:
-                            case 168 /* GetAccessor */:
-                            case 169 /* SetAccessor */:
+                            case 224 /* ClassExpression */:
+                            case 211 /* FunctionExpression */:
+                            case 167 /* MethodDeclaration */:
+                            case 169 /* Constructor */:
+                            case 170 /* GetAccessor */:
+                            case 171 /* SetAccessor */:
                                 // do not dive into functions or classes
                                 return false;
                         }
                         var savedPermittedJumps = permittedJumps;
                         switch (node.kind) {
-                            case 235 /* IfStatement */:
+                            case 237 /* IfStatement */:
                                 permittedJumps = 0 /* None */;
                                 break;
-                            case 248 /* TryStatement */:
+                            case 250 /* TryStatement */:
                                 // forbid all jumps inside try blocks
                                 permittedJumps = 0 /* None */;
                                 break;
-                            case 231 /* Block */:
-                                if (node.parent && node.parent.kind === 248 /* TryStatement */ && node.parent.finallyBlock === node) {
+                            case 233 /* Block */:
+                                if (node.parent && node.parent.kind === 250 /* TryStatement */ && node.parent.finallyBlock === node) {
                                     // allow unconditional returns from finally blocks
                                     permittedJumps = 4 /* Return */;
                                 }
                                 break;
-                            case 286 /* DefaultClause */:
-                            case 285 /* CaseClause */:
+                            case 288 /* DefaultClause */:
+                            case 287 /* CaseClause */:
                                 // allow unlabeled break inside case clauses
                                 permittedJumps |= 1 /* Break */;
                                 break;
@@ -149231,19 +152637,19 @@
                                 break;
                         }
                         switch (node.kind) {
-                            case 188 /* ThisType */:
-                            case 107 /* ThisKeyword */:
+                            case 190 /* ThisType */:
+                            case 108 /* ThisKeyword */:
                                 rangeFacts |= RangeFacts.UsesThis;
                                 break;
-                            case 246 /* LabeledStatement */: {
+                            case 248 /* LabeledStatement */: {
                                 var label = node.label;
                                 (seenLabels || (seenLabels = [])).push(label.escapedText);
                                 ts.forEachChild(node, visit);
                                 seenLabels.pop();
                                 break;
                             }
-                            case 242 /* BreakStatement */:
-                            case 241 /* ContinueStatement */: {
+                            case 244 /* BreakStatement */:
+                            case 243 /* ContinueStatement */: {
                                 var label = node.label;
                                 if (label) {
                                     if (!ts.contains(seenLabels, label.escapedText)) {
@@ -149252,20 +152658,20 @@
                                     }
                                 }
                                 else {
-                                    if (!(permittedJumps & (node.kind === 242 /* BreakStatement */ ? 1 /* Break */ : 2 /* Continue */))) {
+                                    if (!(permittedJumps & (node.kind === 244 /* BreakStatement */ ? 1 /* Break */ : 2 /* Continue */))) {
                                         // attempt to break or continue in a forbidden context
                                         (errors || (errors = [])).push(ts.createDiagnosticForNode(node, Messages.cannotExtractRangeContainingConditionalBreakOrContinueStatements));
                                     }
                                 }
                                 break;
                             }
-                            case 214 /* AwaitExpression */:
+                            case 216 /* AwaitExpression */:
                                 rangeFacts |= RangeFacts.IsAsyncFunction;
                                 break;
-                            case 220 /* YieldExpression */:
+                            case 222 /* YieldExpression */:
                                 rangeFacts |= RangeFacts.IsGenerator;
                                 break;
-                            case 243 /* ReturnStatement */:
+                            case 245 /* ReturnStatement */:
                                 if (permittedJumps & 4 /* Return */) {
                                     rangeFacts |= RangeFacts.HasReturn;
                                 }
@@ -149331,7 +152737,7 @@
                 while (true) {
                     current = current.parent;
                     // A function parameter's initializer is actually in the outer scope, not the function declaration
-                    if (current.kind === 161 /* Parameter */) {
+                    if (current.kind === 162 /* Parameter */) {
                         // Skip all the way to the outer scope of the function that declared this parameter
                         current = ts.findAncestor(current, function (parent) { return ts.isFunctionLikeDeclaration(parent); }).parent;
                     }
@@ -149342,7 +152748,7 @@
                     //  * Module/namespace or source file
                     if (isScope(current)) {
                         scopes.push(current);
-                        if (current.kind === 298 /* SourceFile */) {
+                        if (current.kind === 300 /* SourceFile */) {
                             return scopes;
                         }
                     }
@@ -149432,32 +152838,32 @@
             }
             function getDescriptionForFunctionLikeDeclaration(scope) {
                 switch (scope.kind) {
-                    case 167 /* Constructor */:
+                    case 169 /* Constructor */:
                         return "constructor";
-                    case 209 /* FunctionExpression */:
-                    case 252 /* FunctionDeclaration */:
+                    case 211 /* FunctionExpression */:
+                    case 254 /* FunctionDeclaration */:
                         return scope.name
                             ? "function '" + scope.name.text + "'"
                             : ts.ANONYMOUS;
-                    case 210 /* ArrowFunction */:
+                    case 212 /* ArrowFunction */:
                         return "arrow function";
-                    case 166 /* MethodDeclaration */:
+                    case 167 /* MethodDeclaration */:
                         return "method '" + scope.name.getText() + "'";
-                    case 168 /* GetAccessor */:
+                    case 170 /* GetAccessor */:
                         return "'get " + scope.name.getText() + "'";
-                    case 169 /* SetAccessor */:
+                    case 171 /* SetAccessor */:
                         return "'set " + scope.name.getText() + "'";
                     default:
                         throw ts.Debug.assertNever(scope, "Unexpected scope kind " + scope.kind);
                 }
             }
             function getDescriptionForClassLikeDeclaration(scope) {
-                return scope.kind === 253 /* ClassDeclaration */
+                return scope.kind === 255 /* ClassDeclaration */
                     ? scope.name ? "class '" + scope.name.text + "'" : "anonymous class declaration"
                     : scope.name ? "class expression '" + scope.name.text + "'" : "anonymous class expression";
             }
             function getDescriptionForModuleLikeDeclaration(scope) {
-                return scope.kind === 258 /* ModuleBlock */
+                return scope.kind === 260 /* ModuleBlock */
                     ? "namespace '" + scope.parent.name.getText() + "'"
                     : scope.externalModuleIndicator ? 0 /* Module */ : 1 /* Global */;
             }
@@ -149525,12 +152931,12 @@
                 var newFunction;
                 if (ts.isClassLike(scope)) {
                     // always create private method in TypeScript files
-                    var modifiers = isJS ? [] : [ts.factory.createModifier(120 /* PrivateKeyword */)];
+                    var modifiers = isJS ? [] : [ts.factory.createModifier(121 /* PrivateKeyword */)];
                     if (range.facts & RangeFacts.InStaticRegion) {
-                        modifiers.push(ts.factory.createModifier(123 /* StaticKeyword */));
+                        modifiers.push(ts.factory.createModifier(124 /* StaticKeyword */));
                     }
                     if (range.facts & RangeFacts.IsAsyncFunction) {
-                        modifiers.push(ts.factory.createModifier(129 /* AsyncKeyword */));
+                        modifiers.push(ts.factory.createModifier(130 /* AsyncKeyword */));
                     }
                     newFunction = ts.factory.createMethodDeclaration(
                     /*decorators*/ undefined, modifiers.length ? modifiers : undefined, range.facts & RangeFacts.IsGenerator ? ts.factory.createToken(41 /* AsteriskToken */) : undefined, functionName, 
@@ -149538,7 +152944,7 @@
                 }
                 else {
                     newFunction = ts.factory.createFunctionDeclaration(
-                    /*decorators*/ undefined, range.facts & RangeFacts.IsAsyncFunction ? [ts.factory.createToken(129 /* AsyncKeyword */)] : undefined, range.facts & RangeFacts.IsGenerator ? ts.factory.createToken(41 /* AsteriskToken */) : undefined, functionName, typeParameters, parameters, returnType, body);
+                    /*decorators*/ undefined, range.facts & RangeFacts.IsAsyncFunction ? [ts.factory.createToken(130 /* AsyncKeyword */)] : undefined, range.facts & RangeFacts.IsGenerator ? ts.factory.createToken(41 /* AsteriskToken */) : undefined, functionName, typeParameters, parameters, returnType, body);
                 }
                 var changeTracker = ts.textChanges.ChangeTracker.fromContext(context);
                 var minInsertionPos = (isReadonlyArray(range.range) ? ts.last(range.range) : range.range).end;
@@ -149683,9 +153089,9 @@
                     while (ts.isParenthesizedTypeNode(withoutParens)) {
                         withoutParens = withoutParens.type;
                     }
-                    return ts.isUnionTypeNode(withoutParens) && ts.find(withoutParens.types, function (t) { return t.kind === 150 /* UndefinedKeyword */; })
+                    return ts.isUnionTypeNode(withoutParens) && ts.find(withoutParens.types, function (t) { return t.kind === 151 /* UndefinedKeyword */; })
                         ? clone
-                        : ts.factory.createUnionTypeNode([clone, ts.factory.createKeywordTypeNode(150 /* UndefinedKeyword */)]);
+                        : ts.factory.createUnionTypeNode([clone, ts.factory.createKeywordTypeNode(151 /* UndefinedKeyword */)]);
                 }
             }
             /**
@@ -149710,11 +153116,11 @@
                 if (ts.isClassLike(scope)) {
                     ts.Debug.assert(!isJS, "Cannot extract to a JS class"); // See CannotExtractToJSClass
                     var modifiers = [];
-                    modifiers.push(ts.factory.createModifier(120 /* PrivateKeyword */));
+                    modifiers.push(ts.factory.createModifier(121 /* PrivateKeyword */));
                     if (rangeFacts & RangeFacts.InStaticRegion) {
-                        modifiers.push(ts.factory.createModifier(123 /* StaticKeyword */));
+                        modifiers.push(ts.factory.createModifier(124 /* StaticKeyword */));
                     }
-                    modifiers.push(ts.factory.createModifier(142 /* ReadonlyKeyword */));
+                    modifiers.push(ts.factory.createModifier(143 /* ReadonlyKeyword */));
                     var newVariable = ts.factory.createPropertyDeclaration(
                     /*decorators*/ undefined, modifiers, localNameText, 
                     /*questionToken*/ undefined, variableType, initializer);
@@ -149746,7 +153152,7 @@
                         var localReference = ts.factory.createIdentifier(localNameText);
                         changeTracker.replaceNode(context.file, node, localReference);
                     }
-                    else if (node.parent.kind === 234 /* ExpressionStatement */ && scope === ts.findAncestor(node, isScope)) {
+                    else if (node.parent.kind === 236 /* ExpressionStatement */ && scope === ts.findAncestor(node, isScope)) {
                         // If the parent is an expression statement and the target scope is the immediately enclosing one,
                         // replace the statement with the declaration.
                         var newVariableStatement = ts.factory.createVariableStatement(
@@ -149765,7 +153171,7 @@
                             changeTracker.insertNodeBefore(context.file, nodeToInsertBefore, newVariableStatement, /*blankLineBetween*/ false);
                         }
                         // Consume
-                        if (node.parent.kind === 234 /* ExpressionStatement */) {
+                        if (node.parent.kind === 236 /* ExpressionStatement */) {
                             // If the parent is an expression statement, delete it.
                             changeTracker.delete(context.file, node.parent);
                         }
@@ -150092,9 +153498,7 @@
                     var scope = scopes_1[_i];
                     usagesPerScope.push({ usages: new ts.Map(), typeParameterUsages: new ts.Map(), substitutions: new ts.Map() });
                     substitutionsPerScope.push(new ts.Map());
-                    functionErrorsPerScope.push(ts.isFunctionLikeDeclaration(scope) && scope.kind !== 252 /* FunctionDeclaration */
-                        ? [ts.createDiagnosticForNode(scope, Messages.cannotExtractToOtherFunctionLike)]
-                        : []);
+                    functionErrorsPerScope.push([]);
                     var constantErrors = [];
                     if (expressionDiagnostic) {
                         constantErrors.push(expressionDiagnostic);
@@ -150411,37 +153815,37 @@
             function isExtractableExpression(node) {
                 var parent = node.parent;
                 switch (parent.kind) {
-                    case 292 /* EnumMember */:
+                    case 294 /* EnumMember */:
                         return false;
                 }
                 switch (node.kind) {
                     case 10 /* StringLiteral */:
-                        return parent.kind !== 262 /* ImportDeclaration */ &&
-                            parent.kind !== 266 /* ImportSpecifier */;
-                    case 221 /* SpreadElement */:
-                    case 197 /* ObjectBindingPattern */:
-                    case 199 /* BindingElement */:
+                        return parent.kind !== 264 /* ImportDeclaration */ &&
+                            parent.kind !== 268 /* ImportSpecifier */;
+                    case 223 /* SpreadElement */:
+                    case 199 /* ObjectBindingPattern */:
+                    case 201 /* BindingElement */:
                         return false;
-                    case 78 /* Identifier */:
-                        return parent.kind !== 199 /* BindingElement */ &&
-                            parent.kind !== 266 /* ImportSpecifier */ &&
-                            parent.kind !== 271 /* ExportSpecifier */;
+                    case 79 /* Identifier */:
+                        return parent.kind !== 201 /* BindingElement */ &&
+                            parent.kind !== 268 /* ImportSpecifier */ &&
+                            parent.kind !== 273 /* ExportSpecifier */;
                 }
                 return true;
             }
             function isBlockLike(node) {
                 switch (node.kind) {
-                    case 231 /* Block */:
-                    case 298 /* SourceFile */:
-                    case 258 /* ModuleBlock */:
-                    case 285 /* CaseClause */:
+                    case 233 /* Block */:
+                    case 300 /* SourceFile */:
+                    case 260 /* ModuleBlock */:
+                    case 287 /* CaseClause */:
                         return true;
                     default:
                         return false;
                 }
             }
             function isInJSXContent(node) {
-                return (ts.isJsxElement(node) || ts.isJsxSelfClosingElement(node) || ts.isJsxFragment(node)) && ts.isJsxElement(node.parent);
+                return (ts.isJsxElement(node) || ts.isJsxSelfClosingElement(node) || ts.isJsxFragment(node)) && (ts.isJsxElement(node.parent) || ts.isJsxFragment(node.parent));
             }
         })(extractSymbol = refactor.extractSymbol || (refactor.extractSymbol = {}));
     })(refactor = ts.refactor || (ts.refactor = {}));
@@ -150819,11 +154223,11 @@
         }
         function isPureImport(node) {
             switch (node.kind) {
-                case 262 /* ImportDeclaration */:
+                case 264 /* ImportDeclaration */:
                     return true;
-                case 261 /* ImportEqualsDeclaration */:
+                case 263 /* ImportEqualsDeclaration */:
                     return !ts.hasSyntacticModifier(node, 1 /* Export */);
-                case 233 /* VariableStatement */:
+                case 235 /* VariableStatement */:
                     return node.declarationList.declarations.every(function (d) { return !!d.initializer && ts.isRequireCall(d.initializer, /*checkArgumentIsStringLiteralLike*/ true); });
                 default:
                     return false;
@@ -150848,7 +154252,7 @@
             var prologueDirectives = ts.takeWhile(oldFile.statements, ts.isPrologueDirective);
             if (!oldFile.externalModuleIndicator && !oldFile.commonJsModuleIndicator) {
                 deleteMovedStatements(oldFile, toMove.ranges, changes);
-                return __spreadArray(__spreadArray([], prologueDirectives), toMove.all);
+                return __spreadArray(__spreadArray([], prologueDirectives, true), toMove.all, true);
             }
             var useEs6ModuleSyntax = !!oldFile.externalModuleIndicator;
             var quotePreference = ts.getQuotePreference(oldFile, preferences);
@@ -150862,11 +154266,11 @@
             var imports = getNewFileImportsAndAddExportInOldFile(oldFile, usage.oldImportsNeededByNewFile, usage.newFileImportsFromOldFile, changes, checker, useEs6ModuleSyntax, quotePreference);
             var body = addExports(oldFile, toMove.all, usage.oldFileImportsFromNewFile, useEs6ModuleSyntax);
             if (imports.length && body.length) {
-                return __spreadArray(__spreadArray(__spreadArray(__spreadArray([], prologueDirectives), imports), [
+                return __spreadArray(__spreadArray(__spreadArray(__spreadArray([], prologueDirectives, true), imports, true), [
                     4 /* NewLineTrivia */
-                ]), body);
+                ], false), body, true);
             }
-            return __spreadArray(__spreadArray(__spreadArray([], prologueDirectives), imports), body);
+            return __spreadArray(__spreadArray(__spreadArray([], prologueDirectives, true), imports, true), body, true);
         }
         function deleteMovedStatements(sourceFile, moved, changes) {
             for (var _i = 0, moved_1 = moved; _i < moved_1.length; _i++) {
@@ -150919,12 +154323,12 @@
         }
         function getNamespaceLikeImport(node) {
             switch (node.kind) {
-                case 262 /* ImportDeclaration */:
-                    return node.importClause && node.importClause.namedBindings && node.importClause.namedBindings.kind === 264 /* NamespaceImport */ ?
+                case 264 /* ImportDeclaration */:
+                    return node.importClause && node.importClause.namedBindings && node.importClause.namedBindings.kind === 266 /* NamespaceImport */ ?
                         node.importClause.namedBindings.name : undefined;
-                case 261 /* ImportEqualsDeclaration */:
+                case 263 /* ImportEqualsDeclaration */:
                     return node.name;
-                case 250 /* VariableDeclaration */:
+                case 252 /* VariableDeclaration */:
                     return ts.tryCast(node.name, ts.isIdentifier);
                 default:
                     return ts.Debug.assertNever(node, "Unexpected node kind " + node.kind);
@@ -150955,20 +154359,20 @@
             var newNamespaceId = ts.factory.createIdentifier(newNamespaceName);
             var newModuleString = ts.factory.createStringLiteral(newModuleSpecifier);
             switch (node.kind) {
-                case 262 /* ImportDeclaration */:
+                case 264 /* ImportDeclaration */:
                     return ts.factory.createImportDeclaration(
                     /*decorators*/ undefined, /*modifiers*/ undefined, ts.factory.createImportClause(/*isTypeOnly*/ false, /*name*/ undefined, ts.factory.createNamespaceImport(newNamespaceId)), newModuleString);
-                case 261 /* ImportEqualsDeclaration */:
+                case 263 /* ImportEqualsDeclaration */:
                     return ts.factory.createImportEqualsDeclaration(/*decorators*/ undefined, /*modifiers*/ undefined, /*isTypeOnly*/ false, newNamespaceId, ts.factory.createExternalModuleReference(newModuleString));
-                case 250 /* VariableDeclaration */:
+                case 252 /* VariableDeclaration */:
                     return ts.factory.createVariableDeclaration(newNamespaceId, /*exclamationToken*/ undefined, /*type*/ undefined, createRequireCall(newModuleString));
                 default:
                     return ts.Debug.assertNever(node, "Unexpected node kind " + node.kind);
             }
         }
         function moduleSpecifierFromImport(i) {
-            return (i.kind === 262 /* ImportDeclaration */ ? i.moduleSpecifier
-                : i.kind === 261 /* ImportEqualsDeclaration */ ? i.moduleReference.expression
+            return (i.kind === 264 /* ImportDeclaration */ ? i.moduleSpecifier
+                : i.kind === 263 /* ImportEqualsDeclaration */ ? i.moduleReference.expression
                     : i.initializer.arguments[0]);
         }
         function forEachImportInStatement(statement, cb) {
@@ -151038,15 +154442,15 @@
         }
         function deleteUnusedImports(sourceFile, importDecl, changes, isUnused) {
             switch (importDecl.kind) {
-                case 262 /* ImportDeclaration */:
+                case 264 /* ImportDeclaration */:
                     deleteUnusedImportsInDeclaration(sourceFile, importDecl, changes, isUnused);
                     break;
-                case 261 /* ImportEqualsDeclaration */:
+                case 263 /* ImportEqualsDeclaration */:
                     if (isUnused(importDecl.name)) {
                         changes.delete(sourceFile, importDecl);
                     }
                     break;
-                case 250 /* VariableDeclaration */:
+                case 252 /* VariableDeclaration */:
                     deleteUnusedImportsInVariableDeclaration(sourceFile, importDecl, changes, isUnused);
                     break;
                 default:
@@ -151059,7 +154463,7 @@
             var _a = importDecl.importClause, name = _a.name, namedBindings = _a.namedBindings;
             var defaultUnused = !name || isUnused(name);
             var namedBindingsUnused = !namedBindings ||
-                (namedBindings.kind === 264 /* NamespaceImport */ ? isUnused(namedBindings.name) : namedBindings.elements.length !== 0 && namedBindings.elements.every(function (e) { return isUnused(e.name); }));
+                (namedBindings.kind === 266 /* NamespaceImport */ ? isUnused(namedBindings.name) : namedBindings.elements.length !== 0 && namedBindings.elements.every(function (e) { return isUnused(e.name); }));
             if (defaultUnused && namedBindingsUnused) {
                 changes.delete(sourceFile, importDecl);
             }
@@ -151071,7 +154475,7 @@
                     if (namedBindingsUnused) {
                         changes.replaceNode(sourceFile, importDecl.importClause, ts.factory.updateImportClause(importDecl.importClause, importDecl.importClause.isTypeOnly, name, /*namedBindings*/ undefined));
                     }
-                    else if (namedBindings.kind === 265 /* NamedImports */) {
+                    else if (namedBindings.kind === 267 /* NamedImports */) {
                         for (var _i = 0, _b = namedBindings.elements; _i < _b.length; _i++) {
                             var element = _b[_i];
                             if (isUnused(element.name))
@@ -151084,14 +154488,14 @@
         function deleteUnusedImportsInVariableDeclaration(sourceFile, varDecl, changes, isUnused) {
             var name = varDecl.name;
             switch (name.kind) {
-                case 78 /* Identifier */:
+                case 79 /* Identifier */:
                     if (isUnused(name)) {
                         changes.delete(sourceFile, name);
                     }
                     break;
-                case 198 /* ArrayBindingPattern */:
+                case 200 /* ArrayBindingPattern */:
                     break;
-                case 197 /* ObjectBindingPattern */:
+                case 199 /* ObjectBindingPattern */:
                     if (name.elements.every(function (e) { return ts.isIdentifier(e.name) && isUnused(e.name); })) {
                         changes.delete(sourceFile, ts.isVariableDeclarationList(varDecl.parent) && varDecl.parent.declarations.length === 1 ? varDecl.parent.parent : varDecl);
                     }
@@ -151131,7 +154535,7 @@
                         continue;
                     var top = getTopLevelDeclarationStatement(decl);
                     if (markSeenTop(top)) {
-                        addExportToChanges(oldFile, top, changes, useEs6ModuleSyntax);
+                        addExportToChanges(oldFile, top, name, changes, useEs6ModuleSyntax);
                     }
                     if (ts.hasSyntacticModifier(decl, 512 /* Default */)) {
                         oldFileDefault = name;
@@ -151221,14 +154625,14 @@
         // Below should all be utilities
         function isInImport(decl) {
             switch (decl.kind) {
-                case 261 /* ImportEqualsDeclaration */:
-                case 266 /* ImportSpecifier */:
-                case 263 /* ImportClause */:
-                case 264 /* NamespaceImport */:
+                case 263 /* ImportEqualsDeclaration */:
+                case 268 /* ImportSpecifier */:
+                case 265 /* ImportClause */:
+                case 266 /* NamespaceImport */:
                     return true;
-                case 250 /* VariableDeclaration */:
+                case 252 /* VariableDeclaration */:
                     return isVariableDeclarationInImport(decl);
-                case 199 /* BindingElement */:
+                case 201 /* BindingElement */:
                     return ts.isVariableDeclaration(decl.parent.parent) && isVariableDeclarationInImport(decl.parent.parent);
                 default:
                     return false;
@@ -151240,7 +154644,7 @@
         }
         function filterImport(i, moduleSpecifier, keep) {
             switch (i.kind) {
-                case 262 /* ImportDeclaration */: {
+                case 264 /* ImportDeclaration */: {
                     var clause = i.importClause;
                     if (!clause)
                         return undefined;
@@ -151250,9 +154654,9 @@
                         ? ts.factory.createImportDeclaration(/*decorators*/ undefined, /*modifiers*/ undefined, ts.factory.createImportClause(/*isTypeOnly*/ false, defaultImport, namedBindings), moduleSpecifier)
                         : undefined;
                 }
-                case 261 /* ImportEqualsDeclaration */:
+                case 263 /* ImportEqualsDeclaration */:
                     return keep(i.name) ? i : undefined;
-                case 250 /* VariableDeclaration */: {
+                case 252 /* VariableDeclaration */: {
                     var name = filterBindingName(i.name, keep);
                     return name ? makeVariableStatement(name, i.type, createRequireCall(moduleSpecifier), i.parent.flags) : undefined;
                 }
@@ -151261,7 +154665,7 @@
             }
         }
         function filterNamedBindings(namedBindings, keep) {
-            if (namedBindings.kind === 264 /* NamespaceImport */) {
+            if (namedBindings.kind === 266 /* NamespaceImport */) {
                 return keep(namedBindings.name) ? namedBindings : undefined;
             }
             else {
@@ -151271,11 +154675,11 @@
         }
         function filterBindingName(name, keep) {
             switch (name.kind) {
-                case 78 /* Identifier */:
+                case 79 /* Identifier */:
                     return keep(name) ? name : undefined;
-                case 198 /* ArrayBindingPattern */:
+                case 200 /* ArrayBindingPattern */:
                     return name;
-                case 197 /* ObjectBindingPattern */: {
+                case 199 /* ObjectBindingPattern */: {
                     // We can't handle nested destructurings or property names well here, so just copy them all.
                     var newElements = name.elements.filter(function (prop) { return prop.propertyName || !ts.isIdentifier(prop.name) || keep(prop.name); });
                     return newElements.length ? ts.factory.createObjectBindingPattern(newElements) : undefined;
@@ -151332,13 +154736,13 @@
         }
         function isNonVariableTopLevelDeclaration(node) {
             switch (node.kind) {
-                case 252 /* FunctionDeclaration */:
-                case 253 /* ClassDeclaration */:
-                case 257 /* ModuleDeclaration */:
-                case 256 /* EnumDeclaration */:
-                case 255 /* TypeAliasDeclaration */:
-                case 254 /* InterfaceDeclaration */:
-                case 261 /* ImportEqualsDeclaration */:
+                case 254 /* FunctionDeclaration */:
+                case 255 /* ClassDeclaration */:
+                case 259 /* ModuleDeclaration */:
+                case 258 /* EnumDeclaration */:
+                case 257 /* TypeAliasDeclaration */:
+                case 256 /* InterfaceDeclaration */:
+                case 263 /* ImportEqualsDeclaration */:
                     return true;
                 default:
                     return false;
@@ -151346,17 +154750,17 @@
         }
         function forEachTopLevelDeclaration(statement, cb) {
             switch (statement.kind) {
-                case 252 /* FunctionDeclaration */:
-                case 253 /* ClassDeclaration */:
-                case 257 /* ModuleDeclaration */:
-                case 256 /* EnumDeclaration */:
-                case 255 /* TypeAliasDeclaration */:
-                case 254 /* InterfaceDeclaration */:
-                case 261 /* ImportEqualsDeclaration */:
+                case 254 /* FunctionDeclaration */:
+                case 255 /* ClassDeclaration */:
+                case 259 /* ModuleDeclaration */:
+                case 258 /* EnumDeclaration */:
+                case 257 /* TypeAliasDeclaration */:
+                case 256 /* InterfaceDeclaration */:
+                case 263 /* ImportEqualsDeclaration */:
                     return cb(statement);
-                case 233 /* VariableStatement */:
+                case 235 /* VariableStatement */:
                     return ts.firstDefined(statement.declarationList.declarations, function (decl) { return forEachTopLevelDeclarationInBindingName(decl.name, cb); });
-                case 234 /* ExpressionStatement */: {
+                case 236 /* ExpressionStatement */: {
                     var expression = statement.expression;
                     return ts.isBinaryExpression(expression) && ts.getAssignmentDeclarationKind(expression) === 1 /* ExportsProperty */
                         ? cb(statement)
@@ -151366,10 +154770,10 @@
         }
         function forEachTopLevelDeclarationInBindingName(name, cb) {
             switch (name.kind) {
-                case 78 /* Identifier */:
+                case 79 /* Identifier */:
                     return cb(ts.cast(name.parent, function (x) { return ts.isVariableDeclaration(x) || ts.isBindingElement(x); }));
-                case 198 /* ArrayBindingPattern */:
-                case 197 /* ObjectBindingPattern */:
+                case 200 /* ArrayBindingPattern */:
+                case 199 /* ObjectBindingPattern */:
                     return ts.firstDefined(name.elements, function (em) { return ts.isOmittedExpression(em) ? undefined : forEachTopLevelDeclarationInBindingName(em.name, cb); });
                 default:
                     return ts.Debug.assertNever(name, "Unexpected name kind " + name.kind);
@@ -151380,16 +154784,16 @@
         }
         function getTopLevelDeclarationStatement(d) {
             switch (d.kind) {
-                case 250 /* VariableDeclaration */:
+                case 252 /* VariableDeclaration */:
                     return d.parent.parent;
-                case 199 /* BindingElement */:
+                case 201 /* BindingElement */:
                     return getTopLevelDeclarationStatement(ts.cast(d.parent.parent, function (p) { return ts.isVariableDeclaration(p) || ts.isBindingElement(p); }));
                 default:
                     return d;
             }
         }
-        function addExportToChanges(sourceFile, decl, changes, useEs6Exports) {
-            if (isExported(sourceFile, decl, useEs6Exports))
+        function addExportToChanges(sourceFile, decl, name, changes, useEs6Exports) {
+            if (isExported(sourceFile, decl, useEs6Exports, name))
                 return;
             if (useEs6Exports) {
                 if (!ts.isExpressionStatement(decl))
@@ -151401,59 +154805,58 @@
                     changes.insertNodesAfter(sourceFile, decl, names.map(createExportAssignment));
             }
         }
-        function isExported(sourceFile, decl, useEs6Exports) {
+        function isExported(sourceFile, decl, useEs6Exports, name) {
+            var _a;
             if (useEs6Exports) {
-                return !ts.isExpressionStatement(decl) && ts.hasSyntacticModifier(decl, 1 /* Export */);
+                return !ts.isExpressionStatement(decl) && ts.hasSyntacticModifier(decl, 1 /* Export */) || !!(name && ((_a = sourceFile.symbol.exports) === null || _a === void 0 ? void 0 : _a.has(name.escapedText)));
             }
-            else {
-                return getNamesToExportInCommonJS(decl).some(function (name) { return sourceFile.symbol.exports.has(ts.escapeLeadingUnderscores(name)); });
-            }
+            return getNamesToExportInCommonJS(decl).some(function (name) { return sourceFile.symbol.exports.has(ts.escapeLeadingUnderscores(name)); });
         }
         function addExport(decl, useEs6Exports) {
             return useEs6Exports ? [addEs6Export(decl)] : addCommonjsExport(decl);
         }
         function addEs6Export(d) {
-            var modifiers = ts.concatenate([ts.factory.createModifier(92 /* ExportKeyword */)], d.modifiers);
+            var modifiers = ts.concatenate([ts.factory.createModifier(93 /* ExportKeyword */)], d.modifiers);
             switch (d.kind) {
-                case 252 /* FunctionDeclaration */:
+                case 254 /* FunctionDeclaration */:
                     return ts.factory.updateFunctionDeclaration(d, d.decorators, modifiers, d.asteriskToken, d.name, d.typeParameters, d.parameters, d.type, d.body);
-                case 253 /* ClassDeclaration */:
+                case 255 /* ClassDeclaration */:
                     return ts.factory.updateClassDeclaration(d, d.decorators, modifiers, d.name, d.typeParameters, d.heritageClauses, d.members);
-                case 233 /* VariableStatement */:
+                case 235 /* VariableStatement */:
                     return ts.factory.updateVariableStatement(d, modifiers, d.declarationList);
-                case 257 /* ModuleDeclaration */:
+                case 259 /* ModuleDeclaration */:
                     return ts.factory.updateModuleDeclaration(d, d.decorators, modifiers, d.name, d.body);
-                case 256 /* EnumDeclaration */:
+                case 258 /* EnumDeclaration */:
                     return ts.factory.updateEnumDeclaration(d, d.decorators, modifiers, d.name, d.members);
-                case 255 /* TypeAliasDeclaration */:
+                case 257 /* TypeAliasDeclaration */:
                     return ts.factory.updateTypeAliasDeclaration(d, d.decorators, modifiers, d.name, d.typeParameters, d.type);
-                case 254 /* InterfaceDeclaration */:
+                case 256 /* InterfaceDeclaration */:
                     return ts.factory.updateInterfaceDeclaration(d, d.decorators, modifiers, d.name, d.typeParameters, d.heritageClauses, d.members);
-                case 261 /* ImportEqualsDeclaration */:
+                case 263 /* ImportEqualsDeclaration */:
                     return ts.factory.updateImportEqualsDeclaration(d, d.decorators, modifiers, d.isTypeOnly, d.name, d.moduleReference);
-                case 234 /* ExpressionStatement */:
+                case 236 /* ExpressionStatement */:
                     return ts.Debug.fail(); // Shouldn't try to add 'export' keyword to `exports.x = ...`
                 default:
                     return ts.Debug.assertNever(d, "Unexpected declaration kind " + d.kind);
             }
         }
         function addCommonjsExport(decl) {
-            return __spreadArray([decl], getNamesToExportInCommonJS(decl).map(createExportAssignment));
+            return __spreadArray([decl], getNamesToExportInCommonJS(decl).map(createExportAssignment), true);
         }
         function getNamesToExportInCommonJS(decl) {
             switch (decl.kind) {
-                case 252 /* FunctionDeclaration */:
-                case 253 /* ClassDeclaration */:
+                case 254 /* FunctionDeclaration */:
+                case 255 /* ClassDeclaration */:
                     return [decl.name.text]; // TODO: GH#18217
-                case 233 /* VariableStatement */:
+                case 235 /* VariableStatement */:
                     return ts.mapDefined(decl.declarationList.declarations, function (d) { return ts.isIdentifier(d.name) ? d.name.text : undefined; });
-                case 257 /* ModuleDeclaration */:
-                case 256 /* EnumDeclaration */:
-                case 255 /* TypeAliasDeclaration */:
-                case 254 /* InterfaceDeclaration */:
-                case 261 /* ImportEqualsDeclaration */:
+                case 259 /* ModuleDeclaration */:
+                case 258 /* EnumDeclaration */:
+                case 257 /* TypeAliasDeclaration */:
+                case 256 /* InterfaceDeclaration */:
+                case 263 /* ImportEqualsDeclaration */:
                     return ts.emptyArray;
-                case 234 /* ExpressionStatement */:
+                case 236 /* ExpressionStatement */:
                     return ts.Debug.fail("Can't export an ExpressionStatement"); // Shouldn't try to add 'export' keyword to `exports.x = ...`
                 default:
                     return ts.Debug.assertNever(decl, "Unexpected decl kind " + decl.kind);
@@ -151461,7 +154864,7 @@
         }
         /** Creates `exports.x = x;` */
         function createExportAssignment(name) {
-            return ts.factory.createExpressionStatement(ts.factory.createBinaryExpression(ts.factory.createPropertyAccessExpression(ts.factory.createIdentifier("exports"), ts.factory.createIdentifier(name)), 62 /* EqualsToken */, ts.factory.createIdentifier(name)));
+            return ts.factory.createExpressionStatement(ts.factory.createBinaryExpression(ts.factory.createPropertyAccessExpression(ts.factory.createIdentifier("exports"), ts.factory.createIdentifier(name)), 63 /* EqualsToken */, ts.factory.createIdentifier(name)));
         }
     })(refactor = ts.refactor || (ts.refactor = {}));
 })(ts || (ts = {}));
@@ -151650,7 +155053,7 @@
             function getGroupedReferences(functionDeclaration, program, cancellationToken) {
                 var functionNames = getFunctionNames(functionDeclaration);
                 var classNames = ts.isConstructorDeclaration(functionDeclaration) ? getClassNames(functionDeclaration) : [];
-                var names = ts.deduplicate(__spreadArray(__spreadArray([], functionNames), classNames), ts.equateValues);
+                var names = ts.deduplicate(__spreadArray(__spreadArray([], functionNames, true), classNames, true), ts.equateValues);
                 var checker = program.getTypeChecker();
                 var references = ts.flatMap(names, /*mapfn*/ function (/*mapfn*/ name) { return ts.FindAllReferences.getReferenceEntriesForNode(-1, name, program, program.getSourceFiles(), cancellationToken); });
                 var groupedReferences = groupReferences(references);
@@ -151796,15 +155199,15 @@
                     var parent = functionReference.parent;
                     switch (parent.kind) {
                         // foo(...) or super(...) or new Foo(...)
-                        case 204 /* CallExpression */:
-                        case 205 /* NewExpression */:
+                        case 206 /* CallExpression */:
+                        case 207 /* NewExpression */:
                             var callOrNewExpression = ts.tryCast(parent, ts.isCallOrNewExpression);
                             if (callOrNewExpression && callOrNewExpression.expression === functionReference) {
                                 return callOrNewExpression;
                             }
                             break;
                         // x.foo(...)
-                        case 202 /* PropertyAccessExpression */:
+                        case 204 /* PropertyAccessExpression */:
                             var propertyAccessExpression = ts.tryCast(parent, ts.isPropertyAccessExpression);
                             if (propertyAccessExpression && propertyAccessExpression.parent && propertyAccessExpression.name === functionReference) {
                                 var callOrNewExpression_1 = ts.tryCast(propertyAccessExpression.parent, ts.isCallOrNewExpression);
@@ -151814,7 +155217,7 @@
                             }
                             break;
                         // x["foo"](...)
-                        case 203 /* ElementAccessExpression */:
+                        case 205 /* ElementAccessExpression */:
                             var elementAccessExpression = ts.tryCast(parent, ts.isElementAccessExpression);
                             if (elementAccessExpression && elementAccessExpression.parent && elementAccessExpression.argumentExpression === functionReference) {
                                 var callOrNewExpression_2 = ts.tryCast(elementAccessExpression.parent, ts.isCallOrNewExpression);
@@ -151833,14 +155236,14 @@
                     var parent = reference.parent;
                     switch (parent.kind) {
                         // `C.foo`
-                        case 202 /* PropertyAccessExpression */:
+                        case 204 /* PropertyAccessExpression */:
                             var propertyAccessExpression = ts.tryCast(parent, ts.isPropertyAccessExpression);
                             if (propertyAccessExpression && propertyAccessExpression.expression === reference) {
                                 return propertyAccessExpression;
                             }
                             break;
                         // `C["foo"]`
-                        case 203 /* ElementAccessExpression */:
+                        case 205 /* ElementAccessExpression */:
                             var elementAccessExpression = ts.tryCast(parent, ts.isElementAccessExpression);
                             if (elementAccessExpression && elementAccessExpression.expression === reference) {
                                 return elementAccessExpression;
@@ -151886,16 +155289,16 @@
                 if (!isValidParameterNodeArray(functionDeclaration.parameters, checker))
                     return false;
                 switch (functionDeclaration.kind) {
-                    case 252 /* FunctionDeclaration */:
+                    case 254 /* FunctionDeclaration */:
                         return hasNameOrDefault(functionDeclaration) && isSingleImplementation(functionDeclaration, checker);
-                    case 166 /* MethodDeclaration */:
+                    case 167 /* MethodDeclaration */:
                         if (ts.isObjectLiteralExpression(functionDeclaration.parent)) {
                             var contextualSymbol = getSymbolForContextualType(functionDeclaration.name, checker);
                             // don't offer the refactor when there are multiple signatures since we won't know which ones the user wants to change
                             return ((_a = contextualSymbol === null || contextualSymbol === void 0 ? void 0 : contextualSymbol.declarations) === null || _a === void 0 ? void 0 : _a.length) === 1 && isSingleImplementation(functionDeclaration, checker);
                         }
                         return isSingleImplementation(functionDeclaration, checker);
-                    case 167 /* Constructor */:
+                    case 169 /* Constructor */:
                         if (ts.isClassDeclaration(functionDeclaration.parent)) {
                             return hasNameOrDefault(functionDeclaration.parent) && isSingleImplementation(functionDeclaration, checker);
                         }
@@ -151903,8 +155306,8 @@
                             return isValidVariableDeclaration(functionDeclaration.parent.parent)
                                 && isSingleImplementation(functionDeclaration, checker);
                         }
-                    case 209 /* FunctionExpression */:
-                    case 210 /* ArrowFunction */:
+                    case 211 /* FunctionExpression */:
+                    case 212 /* ArrowFunction */:
                         return isValidVariableDeclaration(functionDeclaration.parent);
                 }
                 return false;
@@ -151914,7 +155317,7 @@
             }
             function hasNameOrDefault(functionOrClassDeclaration) {
                 if (!functionOrClassDeclaration.name) {
-                    var defaultKeyword = ts.findModifier(functionOrClassDeclaration, 87 /* DefaultKeyword */);
+                    var defaultKeyword = ts.findModifier(functionOrClassDeclaration, 88 /* DefaultKeyword */);
                     return !!defaultKeyword;
                 }
                 return true;
@@ -152054,15 +155457,15 @@
             }
             function getClassNames(constructorDeclaration) {
                 switch (constructorDeclaration.parent.kind) {
-                    case 253 /* ClassDeclaration */:
+                    case 255 /* ClassDeclaration */:
                         var classDeclaration = constructorDeclaration.parent;
                         if (classDeclaration.name)
                             return [classDeclaration.name];
                         // If the class declaration doesn't have a name, it should have a default modifier.
                         // We validated this in `isValidFunctionDeclaration` through `hasNameOrDefault`
-                        var defaultModifier = ts.Debug.checkDefined(ts.findModifier(classDeclaration, 87 /* DefaultKeyword */), "Nameless class declaration should be a default export");
+                        var defaultModifier = ts.Debug.checkDefined(ts.findModifier(classDeclaration, 88 /* DefaultKeyword */), "Nameless class declaration should be a default export");
                         return [defaultModifier];
-                    case 222 /* ClassExpression */:
+                    case 224 /* ClassExpression */:
                         var classExpression = constructorDeclaration.parent;
                         var variableDeclaration = constructorDeclaration.parent.parent;
                         var className = classExpression.name;
@@ -152073,25 +155476,25 @@
             }
             function getFunctionNames(functionDeclaration) {
                 switch (functionDeclaration.kind) {
-                    case 252 /* FunctionDeclaration */:
+                    case 254 /* FunctionDeclaration */:
                         if (functionDeclaration.name)
                             return [functionDeclaration.name];
                         // If the function declaration doesn't have a name, it should have a default modifier.
                         // We validated this in `isValidFunctionDeclaration` through `hasNameOrDefault`
-                        var defaultModifier = ts.Debug.checkDefined(ts.findModifier(functionDeclaration, 87 /* DefaultKeyword */), "Nameless function declaration should be a default export");
+                        var defaultModifier = ts.Debug.checkDefined(ts.findModifier(functionDeclaration, 88 /* DefaultKeyword */), "Nameless function declaration should be a default export");
                         return [defaultModifier];
-                    case 166 /* MethodDeclaration */:
+                    case 167 /* MethodDeclaration */:
                         return [functionDeclaration.name];
-                    case 167 /* Constructor */:
-                        var ctrKeyword = ts.Debug.checkDefined(ts.findChildOfKind(functionDeclaration, 132 /* ConstructorKeyword */, functionDeclaration.getSourceFile()), "Constructor declaration should have constructor keyword");
-                        if (functionDeclaration.parent.kind === 222 /* ClassExpression */) {
+                    case 169 /* Constructor */:
+                        var ctrKeyword = ts.Debug.checkDefined(ts.findChildOfKind(functionDeclaration, 133 /* ConstructorKeyword */, functionDeclaration.getSourceFile()), "Constructor declaration should have constructor keyword");
+                        if (functionDeclaration.parent.kind === 224 /* ClassExpression */) {
                             var variableDeclaration = functionDeclaration.parent.parent;
                             return [variableDeclaration.name, ctrKeyword];
                         }
                         return [ctrKeyword];
-                    case 210 /* ArrowFunction */:
+                    case 212 /* ArrowFunction */:
                         return [functionDeclaration.parent.name];
-                    case 209 /* FunctionExpression */:
+                    case 211 /* FunctionExpression */:
                         if (functionDeclaration.name)
                             return [functionDeclaration.name, functionDeclaration.parent.name];
                         return [functionDeclaration.parent.name];
@@ -152126,7 +155529,7 @@
                 var node = getNodeOrParentOfParentheses(file, startPosition);
                 var maybeBinary = getParentBinaryExpression(node);
                 var refactorInfo = { name: refactorName, description: refactorDescription, actions: [] };
-                if (ts.isBinaryExpression(maybeBinary) && isStringConcatenationValid(maybeBinary)) {
+                if (ts.isBinaryExpression(maybeBinary) && treeToArray(maybeBinary).isValidConcatenation) {
                     refactorInfo.actions.push(convertStringAction);
                     return [refactorInfo];
                 }
@@ -152139,7 +155542,7 @@
             function getNodeOrParentOfParentheses(file, startPosition) {
                 var node = ts.getTokenAtPosition(file, startPosition);
                 var nestedBinary = getParentBinaryExpression(node);
-                var isNonStringBinary = !isStringConcatenationValid(nestedBinary);
+                var isNonStringBinary = !treeToArray(nestedBinary).isValidConcatenation;
                 if (isNonStringBinary &&
                     ts.isParenthesizedExpression(nestedBinary.parent) &&
                     ts.isBinaryExpression(nestedBinary.parent.parent)) {
@@ -152177,40 +155580,41 @@
                 }
             }
             function isNotEqualsOperator(node) {
-                return node.operatorToken.kind !== 62 /* EqualsToken */;
+                return node.operatorToken.kind !== 63 /* EqualsToken */;
             }
             function getParentBinaryExpression(expr) {
                 var container = ts.findAncestor(expr.parent, function (n) {
                     switch (n.kind) {
-                        case 202 /* PropertyAccessExpression */:
-                        case 203 /* ElementAccessExpression */:
+                        case 204 /* PropertyAccessExpression */:
+                        case 205 /* ElementAccessExpression */:
                             return false;
-                        case 219 /* TemplateExpression */:
-                        case 217 /* BinaryExpression */:
+                        case 221 /* TemplateExpression */:
+                        case 219 /* BinaryExpression */:
                             return !(ts.isBinaryExpression(n.parent) && isNotEqualsOperator(n.parent));
                         default:
                             return "quit";
                     }
                 });
-                return container || expr;
-            }
-            function isStringConcatenationValid(node) {
-                var _a = treeToArray(node), containsString = _a.containsString, areOperatorsValid = _a.areOperatorsValid;
-                return containsString && areOperatorsValid;
+                return (container || expr);
             }
             function treeToArray(current) {
-                if (ts.isBinaryExpression(current)) {
-                    var _a = treeToArray(current.left), nodes = _a.nodes, operators = _a.operators, leftHasString = _a.containsString, leftOperatorValid = _a.areOperatorsValid;
-                    if (!leftHasString && !ts.isStringLiteral(current.right) && !ts.isTemplateExpression(current.right)) {
-                        return { nodes: [current], operators: [], containsString: false, areOperatorsValid: true };
+                var loop = function (current) {
+                    if (!ts.isBinaryExpression(current)) {
+                        return { nodes: [current], operators: [], validOperators: true,
+                            hasString: ts.isStringLiteral(current) || ts.isNoSubstitutionTemplateLiteral(current) };
+                    }
+                    var _a = loop(current.left), nodes = _a.nodes, operators = _a.operators, leftHasString = _a.hasString, leftOperatorValid = _a.validOperators;
+                    if (!(leftHasString || ts.isStringLiteral(current.right) || ts.isTemplateExpression(current.right))) {
+                        return { nodes: [current], operators: [], hasString: false, validOperators: true };
                     }
                     var currentOperatorValid = current.operatorToken.kind === 39 /* PlusToken */;
-                    var areOperatorsValid = leftOperatorValid && currentOperatorValid;
+                    var validOperators = leftOperatorValid && currentOperatorValid;
                     nodes.push(current.right);
                     operators.push(current.operatorToken);
-                    return { nodes: nodes, operators: operators, containsString: true, areOperatorsValid: areOperatorsValid };
-                }
-                return { nodes: [current], operators: [], containsString: ts.isStringLiteral(current), areOperatorsValid: true };
+                    return { nodes: nodes, operators: operators, hasString: true, validOperators: validOperators };
+                };
+                var _a = loop(current), nodes = _a.nodes, operators = _a.operators, validOperators = _a.validOperators, hasString = _a.hasString;
+                return { nodes: nodes, operators: operators, isValidConcatenation: validOperators && hasString };
             }
             // to copy comments following the operator
             // "foo" + /* comment */ "bar"
@@ -152230,56 +155634,77 @@
                     }
                 };
             };
+            function escapeRawStringForTemplate(s) {
+                // Escaping for $s in strings that are to be used in template strings
+                // Naive implementation: replace \x by itself and otherwise $ and ` by \$ and \`.
+                // But to complicate it a bit, this should work for raw strings too.
+                return s.replace(/\\.|[$`]/g, function (m) { return m[0] === "\\" ? m : "\\" + m; });
+                // Finally, a less-backslash-happy version can work too, doing only ${ instead of all $s:
+                //     s.replace(/\\.|\${|`/g, m => m[0] === "\\" ? m : "\\" + m);
+                // but `\$${foo}` is likely more clear than the more-confusing-but-still-working `$${foo}`.
+            }
+            function getRawTextOfTemplate(node) {
+                // in these cases the right side is ${
+                var rightShaving = ts.isTemplateHead(node) || ts.isTemplateMiddle(node) ? -2 : -1;
+                return ts.getTextOfNode(node).slice(1, rightShaving);
+            }
             function concatConsecutiveString(index, nodes) {
                 var indexes = [];
-                var text = "";
+                var text = "", rawText = "";
                 while (index < nodes.length) {
                     var node = nodes[index];
-                    if (ts.isStringLiteralLike(node)) {
-                        text = text + node.text;
+                    if (ts.isStringLiteralLike(node)) { // includes isNoSubstitutionTemplateLiteral(node)
+                        text += node.text;
+                        rawText += escapeRawStringForTemplate(ts.getTextOfNode(node).slice(1, -1));
                         indexes.push(index);
                         index++;
                     }
                     else if (ts.isTemplateExpression(node)) {
-                        text = text + node.head.text;
+                        text += node.head.text;
+                        rawText += getRawTextOfTemplate(node.head);
                         break;
                     }
                     else {
                         break;
                     }
                 }
-                return [index, text, indexes];
+                return [index, text, rawText, indexes];
             }
             function nodesToTemplate(_a, file) {
                 var nodes = _a.nodes, operators = _a.operators;
                 var copyOperatorComments = copyTrailingOperatorComments(operators, file);
                 var copyCommentFromStringLiterals = copyCommentFromMultiNode(nodes, file, copyOperatorComments);
-                var _b = concatConsecutiveString(0, nodes), begin = _b[0], headText = _b[1], headIndexes = _b[2];
+                var _b = concatConsecutiveString(0, nodes), begin = _b[0], headText = _b[1], rawHeadText = _b[2], headIndexes = _b[3];
                 if (begin === nodes.length) {
-                    var noSubstitutionTemplateLiteral = ts.factory.createNoSubstitutionTemplateLiteral(headText);
+                    var noSubstitutionTemplateLiteral = ts.factory.createNoSubstitutionTemplateLiteral(headText, rawHeadText);
                     copyCommentFromStringLiterals(headIndexes, noSubstitutionTemplateLiteral);
                     return noSubstitutionTemplateLiteral;
                 }
                 var templateSpans = [];
-                var templateHead = ts.factory.createTemplateHead(headText);
+                var templateHead = ts.factory.createTemplateHead(headText, rawHeadText);
                 copyCommentFromStringLiterals(headIndexes, templateHead);
                 var _loop_20 = function (i) {
                     var currentNode = getExpressionFromParenthesesOrExpression(nodes[i]);
                     copyOperatorComments(i, currentNode);
-                    var _c = concatConsecutiveString(i + 1, nodes), newIndex = _c[0], subsequentText = _c[1], stringIndexes = _c[2];
+                    var _c = concatConsecutiveString(i + 1, nodes), newIndex = _c[0], subsequentText = _c[1], rawSubsequentText = _c[2], stringIndexes = _c[3];
                     i = newIndex - 1;
                     var isLast = i === nodes.length - 1;
                     if (ts.isTemplateExpression(currentNode)) {
                         var spans = ts.map(currentNode.templateSpans, function (span, index) {
                             copyExpressionComments(span);
-                            var nextSpan = currentNode.templateSpans[index + 1];
-                            var text = span.literal.text + (nextSpan ? "" : subsequentText);
-                            return ts.factory.createTemplateSpan(span.expression, isLast ? ts.factory.createTemplateTail(text) : ts.factory.createTemplateMiddle(text));
+                            var isLastSpan = index === currentNode.templateSpans.length - 1;
+                            var text = span.literal.text + (isLastSpan ? subsequentText : "");
+                            var rawText = getRawTextOfTemplate(span.literal) + (isLastSpan ? rawSubsequentText : "");
+                            return ts.factory.createTemplateSpan(span.expression, isLast
+                                ? ts.factory.createTemplateTail(text, rawText)
+                                : ts.factory.createTemplateMiddle(text, rawText));
                         });
                         templateSpans.push.apply(templateSpans, spans);
                     }
                     else {
-                        var templatePart = isLast ? ts.factory.createTemplateTail(subsequentText) : ts.factory.createTemplateMiddle(subsequentText);
+                        var templatePart = isLast
+                            ? ts.factory.createTemplateTail(subsequentText, rawSubsequentText)
+                            : ts.factory.createTemplateMiddle(subsequentText, rawSubsequentText);
                         copyCommentFromStringLiterals(stringIndexes, templatePart);
                         templateSpans.push(ts.factory.createTemplateSpan(currentNode, templatePart));
                     }
@@ -152430,14 +155855,15 @@
                 var token = ts.getTokenAtPosition(file, startPosition);
                 var typeChecker = program.getTypeChecker();
                 var func = tryGetFunctionFromVariableDeclaration(file, typeChecker, token.parent);
-                if (func && !containingThis(func.body)) {
+                if (func && !containingThis(func.body) && !typeChecker.containsArgumentsReference(func)) {
                     return { selectedVariableDeclaration: true, func: func };
                 }
                 var maybeFunc = ts.getContainingFunction(token);
                 if (maybeFunc &&
                     (ts.isFunctionExpression(maybeFunc) || ts.isArrowFunction(maybeFunc)) &&
                     !ts.rangeContainsRange(maybeFunc.body, token) &&
-                    !containingThis(maybeFunc.body)) {
+                    !containingThis(maybeFunc.body) &&
+                    !typeChecker.containsArgumentsReference(maybeFunc)) {
                     if (ts.isFunctionExpression(maybeFunc) && isFunctionReferencedInFile(file, typeChecker, maybeFunc))
                         return undefined;
                     return { selectedVariableDeclaration: false, func: maybeFunc };
@@ -152460,7 +155886,11 @@
             }
             function convertToBlock(body) {
                 if (ts.isExpression(body)) {
-                    return ts.factory.createBlock([ts.factory.createReturnStatement(body)], /* multiLine */ true);
+                    var returnStatement = ts.factory.createReturnStatement(body);
+                    var file = body.getSourceFile();
+                    ts.suppressLeadingAndTrailingTrivia(returnStatement);
+                    ts.copyTrailingAsLeadingComments(body, returnStatement, file, /* commentKind */ undefined, /* hasTrailingNewLine */ true);
+                    return ts.factory.createBlock([returnStatement], /* multiLine */ true);
                 }
                 else {
                     return body;
@@ -152607,10 +156037,10 @@
             }
             function isConvertibleDeclaration(node) {
                 switch (node.kind) {
-                    case 252 /* FunctionDeclaration */:
-                    case 209 /* FunctionExpression */:
-                    case 210 /* ArrowFunction */:
-                    case 166 /* MethodDeclaration */:
+                    case 254 /* FunctionDeclaration */:
+                    case 211 /* FunctionExpression */:
+                    case 212 /* ArrowFunction */:
+                    case 167 /* MethodDeclaration */:
                         return true;
                     default:
                         return false;
@@ -152637,8 +156067,8 @@
     ts.servicesVersion = "0.8";
     function createNode(kind, pos, end, parent) {
         var node = ts.isNodeKind(kind) ? new NodeObject(kind, pos, end) :
-            kind === 78 /* Identifier */ ? new IdentifierObject(78 /* Identifier */, pos, end) :
-                kind === 79 /* PrivateIdentifier */ ? new PrivateIdentifierObject(79 /* PrivateIdentifier */, pos, end) :
+            kind === 79 /* Identifier */ ? new IdentifierObject(79 /* Identifier */, pos, end) :
+                kind === 80 /* PrivateIdentifier */ ? new PrivateIdentifierObject(80 /* PrivateIdentifier */, pos, end) :
                     new TokenObject(kind, pos, end);
         node.parent = parent;
         node.flags = parent.flags & 25358336 /* ContextFlags */;
@@ -152712,8 +156142,8 @@
             if (!children.length) {
                 return undefined;
             }
-            var child = ts.find(children, function (kid) { return kid.kind < 302 /* FirstJSDocNode */ || kid.kind > 337 /* LastJSDocNode */; });
-            return child.kind < 158 /* FirstNode */ ?
+            var child = ts.find(children, function (kid) { return kid.kind < 304 /* FirstJSDocNode */ || kid.kind > 342 /* LastJSDocNode */; });
+            return child.kind < 159 /* FirstNode */ ?
                 child :
                 child.getFirstToken(sourceFile);
         };
@@ -152724,7 +156154,7 @@
             if (!child) {
                 return undefined;
             }
-            return child.kind < 158 /* FirstNode */ ? child : child.getLastToken(sourceFile);
+            return child.kind < 159 /* FirstNode */ ? child : child.getLastToken(sourceFile);
         };
         NodeObject.prototype.forEachChild = function (cbNode, cbNodeArray) {
             return ts.forEachChild(this, cbNode, cbNodeArray);
@@ -152770,7 +156200,7 @@
             var token = ts.scanner.scan();
             var textPos = ts.scanner.getTextPos();
             if (textPos <= end) {
-                if (token === 78 /* Identifier */) {
+                if (token === 79 /* Identifier */) {
                     ts.Debug.fail("Did not expect " + ts.Debug.formatSyntaxKind(parent.kind) + " to have an Identifier in its trivia");
                 }
                 nodes.push(createNode(token, pos, textPos, parent));
@@ -152782,7 +156212,7 @@
         }
     }
     function createSyntaxList(nodes, parent) {
-        var list = createNode(338 /* SyntaxList */, nodes.pos, nodes.end, parent);
+        var list = createNode(343 /* SyntaxList */, nodes.pos, nodes.end, parent);
         list._children = [];
         var pos = nodes.pos;
         for (var _i = 0, nodes_2 = nodes; _i < nodes_2.length; _i++) {
@@ -152835,10 +156265,10 @@
             return sourceFile.text.substring(this.getStart(sourceFile), this.getEnd());
         };
         TokenOrIdentifierObject.prototype.getChildCount = function () {
-            return 0;
+            return this.getChildren().length;
         };
-        TokenOrIdentifierObject.prototype.getChildAt = function () {
-            return undefined; // TODO: GH#18217
+        TokenOrIdentifierObject.prototype.getChildAt = function (index) {
+            return this.getChildren()[index];
         };
         TokenOrIdentifierObject.prototype.getChildren = function () {
             return this.kind === 1 /* EndOfFileToken */ ? this.jsDoc || ts.emptyArray : ts.emptyArray;
@@ -152893,13 +156323,13 @@
         };
         SymbolObject.prototype.getContextualDocumentationComment = function (context, checker) {
             switch (context === null || context === void 0 ? void 0 : context.kind) {
-                case 168 /* GetAccessor */:
+                case 170 /* GetAccessor */:
                     if (!this.contextualGetAccessorDocumentationComment) {
                         this.contextualGetAccessorDocumentationComment = ts.emptyArray;
                         this.contextualGetAccessorDocumentationComment = getDocumentationComment(ts.filter(this.declarations, ts.isGetAccessor), checker);
                     }
                     return this.contextualGetAccessorDocumentationComment;
-                case 169 /* SetAccessor */:
+                case 171 /* SetAccessor */:
                     if (!this.contextualSetAccessorDocumentationComment) {
                         this.contextualSetAccessorDocumentationComment = ts.emptyArray;
                         this.contextualSetAccessorDocumentationComment = getDocumentationComment(ts.filter(this.declarations, ts.isSetAccessor), checker);
@@ -152930,7 +156360,7 @@
         __extends(IdentifierObject, _super);
         function IdentifierObject(_kind, pos, end) {
             var _this = _super.call(this, pos, end) || this;
-            _this.kind = 78 /* Identifier */;
+            _this.kind = 79 /* Identifier */;
             return _this;
         }
         Object.defineProperty(IdentifierObject.prototype, "text", {
@@ -152942,7 +156372,7 @@
         });
         return IdentifierObject;
     }(TokenOrIdentifierObject));
-    IdentifierObject.prototype.kind = 78 /* Identifier */;
+    IdentifierObject.prototype.kind = 79 /* Identifier */;
     var PrivateIdentifierObject = /** @class */ (function (_super) {
         __extends(PrivateIdentifierObject, _super);
         function PrivateIdentifierObject(_kind, pos, end) {
@@ -152957,7 +156387,7 @@
         });
         return PrivateIdentifierObject;
     }(TokenOrIdentifierObject));
-    PrivateIdentifierObject.prototype.kind = 79 /* PrivateIdentifier */;
+    PrivateIdentifierObject.prototype.kind = 80 /* PrivateIdentifier */;
     var TypeObject = /** @class */ (function () {
         function TypeObject(checker, flags) {
             this.checker = checker;
@@ -153091,7 +156521,7 @@
         if (tags.length === 0 || hasJSDocInheritDocTag(declaration)) {
             var inheritedTags = findBaseOfDeclaration(checker, declaration, function (symbol) { var _a; return ((_a = symbol.declarations) === null || _a === void 0 ? void 0 : _a.length) === 1 ? symbol.getJsDocTags() : undefined; });
             if (inheritedTags) {
-                tags = __spreadArray(__spreadArray([], inheritedTags), tags);
+                tags = __spreadArray(__spreadArray([], inheritedTags, true), tags, true);
             }
         }
         return tags;
@@ -153118,7 +156548,12 @@
         return doc;
     }
     function findBaseOfDeclaration(checker, declaration, cb) {
-        return ts.firstDefined(declaration.parent ? ts.getAllSuperTypeNodes(declaration.parent) : ts.emptyArray, function (superTypeNode) {
+        var _a;
+        var classOrInterfaceDeclaration = ((_a = declaration.parent) === null || _a === void 0 ? void 0 : _a.kind) === 169 /* Constructor */ ? declaration.parent.parent : declaration.parent;
+        if (!classOrInterfaceDeclaration) {
+            return;
+        }
+        return ts.firstDefined(ts.getAllSuperTypeNodes(classOrInterfaceDeclaration), function (superTypeNode) {
             var symbol = checker.getPropertyOfType(checker.getTypeAtLocation(superTypeNode), declaration.symbol.name);
             return symbol ? cb(symbol) : undefined;
         });
@@ -153127,7 +156562,7 @@
         __extends(SourceFileObject, _super);
         function SourceFileObject(kind, pos, end) {
             var _this = _super.call(this, kind, pos, end) || this;
-            _this.kind = 298 /* SourceFile */;
+            _this.kind = 300 /* SourceFile */;
             return _this;
         }
         SourceFileObject.prototype.update = function (newText, textChangeRange) {
@@ -153186,10 +156621,10 @@
             }
             function visit(node) {
                 switch (node.kind) {
-                    case 252 /* FunctionDeclaration */:
-                    case 209 /* FunctionExpression */:
-                    case 166 /* MethodDeclaration */:
-                    case 165 /* MethodSignature */:
+                    case 254 /* FunctionDeclaration */:
+                    case 211 /* FunctionExpression */:
+                    case 167 /* MethodDeclaration */:
+                    case 166 /* MethodSignature */:
                         var functionDeclaration = node;
                         var declarationName = getDeclarationName(functionDeclaration);
                         if (declarationName) {
@@ -153209,31 +156644,31 @@
                         }
                         ts.forEachChild(node, visit);
                         break;
-                    case 253 /* ClassDeclaration */:
-                    case 222 /* ClassExpression */:
-                    case 254 /* InterfaceDeclaration */:
-                    case 255 /* TypeAliasDeclaration */:
-                    case 256 /* EnumDeclaration */:
-                    case 257 /* ModuleDeclaration */:
-                    case 261 /* ImportEqualsDeclaration */:
-                    case 271 /* ExportSpecifier */:
-                    case 266 /* ImportSpecifier */:
-                    case 263 /* ImportClause */:
-                    case 264 /* NamespaceImport */:
-                    case 168 /* GetAccessor */:
-                    case 169 /* SetAccessor */:
-                    case 178 /* TypeLiteral */:
+                    case 255 /* ClassDeclaration */:
+                    case 224 /* ClassExpression */:
+                    case 256 /* InterfaceDeclaration */:
+                    case 257 /* TypeAliasDeclaration */:
+                    case 258 /* EnumDeclaration */:
+                    case 259 /* ModuleDeclaration */:
+                    case 263 /* ImportEqualsDeclaration */:
+                    case 273 /* ExportSpecifier */:
+                    case 268 /* ImportSpecifier */:
+                    case 265 /* ImportClause */:
+                    case 266 /* NamespaceImport */:
+                    case 170 /* GetAccessor */:
+                    case 171 /* SetAccessor */:
+                    case 180 /* TypeLiteral */:
                         addDeclaration(node);
                         ts.forEachChild(node, visit);
                         break;
-                    case 161 /* Parameter */:
+                    case 162 /* Parameter */:
                         // Only consider parameter properties
                         if (!ts.hasSyntacticModifier(node, 16476 /* ParameterPropertyModifier */)) {
                             break;
                         }
                     // falls through
-                    case 250 /* VariableDeclaration */:
-                    case 199 /* BindingElement */: {
+                    case 252 /* VariableDeclaration */:
+                    case 201 /* BindingElement */: {
                         var decl = node;
                         if (ts.isBindingPattern(decl.name)) {
                             ts.forEachChild(decl.name, visit);
@@ -153244,12 +156679,12 @@
                         }
                     }
                     // falls through
-                    case 292 /* EnumMember */:
-                    case 164 /* PropertyDeclaration */:
-                    case 163 /* PropertySignature */:
+                    case 294 /* EnumMember */:
+                    case 165 /* PropertyDeclaration */:
+                    case 164 /* PropertySignature */:
                         addDeclaration(node);
                         break;
-                    case 268 /* ExportDeclaration */:
+                    case 270 /* ExportDeclaration */:
                         // Handle named exports case e.g.:
                         //    export {a, b as B} from "mod";
                         var exportDeclaration = node;
@@ -153262,7 +156697,7 @@
                             }
                         }
                         break;
-                    case 262 /* ImportDeclaration */:
+                    case 264 /* ImportDeclaration */:
                         var importClause = node.importClause;
                         if (importClause) {
                             // Handle default import case e.g.:
@@ -153274,7 +156709,7 @@
                             //    import * as NS from "mod";
                             //    import {a, b as B} from "mod";
                             if (importClause.namedBindings) {
-                                if (importClause.namedBindings.kind === 264 /* NamespaceImport */) {
+                                if (importClause.namedBindings.kind === 266 /* NamespaceImport */) {
                                     addDeclaration(importClause.namedBindings);
                                 }
                                 else {
@@ -153283,7 +156718,7 @@
                             }
                         }
                         break;
-                    case 217 /* BinaryExpression */:
+                    case 219 /* BinaryExpression */:
                         if (ts.getAssignmentDeclarationKind(node) !== 0 /* None */) {
                             addDeclaration(node);
                         }
@@ -153565,7 +157000,6 @@
     }());
     ts.ThrottledCancellationToken = ThrottledCancellationToken;
     var invalidOperationsInPartialSemanticMode = [
-        "getSyntacticDiagnostics",
         "getSemanticDiagnostics",
         "getSuggestionDiagnostics",
         "getCompilerOptionsDiagnostics",
@@ -153582,8 +157016,9 @@
         "prepareCallHierarchy",
         "provideCallHierarchyIncomingCalls",
         "provideCallHierarchyOutgoingCalls",
+        "provideInlayHints"
     ];
-    var invalidOperationsInSyntacticMode = __spreadArray(__spreadArray([], invalidOperationsInPartialSemanticMode), [
+    var invalidOperationsInSyntacticMode = __spreadArray(__spreadArray([], invalidOperationsInPartialSemanticMode, true), [
         "getCompletionsAtPosition",
         "getCompletionEntryDetails",
         "getCompletionEntrySymbol",
@@ -153601,7 +157036,7 @@
         "getRenameInfo",
         "findRenameLocations",
         "getApplicableRefactors",
-    ]);
+    ], false);
     function createLanguageService(host, documentRegistry, syntaxOnlyOrLanguageServiceMode) {
         var _a;
         if (documentRegistry === void 0) { documentRegistry = ts.createDocumentRegistry(host.useCaseSensitiveFileNames && host.useCaseSensitiveFileNames(), host.getCurrentDirectory()); }
@@ -153915,7 +157350,7 @@
             }
             // If '-d' is enabled, check for emitter error. One example of emitter error is export class implements non-export interface
             var declarationDiagnostics = program.getDeclarationDiagnostics(targetSourceFile, cancellationToken);
-            return __spreadArray(__spreadArray([], semanticDiagnostics), declarationDiagnostics);
+            return __spreadArray(__spreadArray([], semanticDiagnostics, true), declarationDiagnostics, true);
         }
         function getSuggestionDiagnostics(fileName) {
             synchronizeHostData();
@@ -153923,14 +157358,14 @@
         }
         function getCompilerOptionsDiagnostics() {
             synchronizeHostData();
-            return __spreadArray(__spreadArray([], program.getOptionsDiagnostics(cancellationToken)), program.getGlobalDiagnostics(cancellationToken));
+            return __spreadArray(__spreadArray([], program.getOptionsDiagnostics(cancellationToken), true), program.getGlobalDiagnostics(cancellationToken), true);
         }
         function getCompletionsAtPosition(fileName, position, options) {
             if (options === void 0) { options = ts.emptyOptions; }
             // Convert from deprecated options names to new names
             var fullPreferences = __assign(__assign({}, ts.identity(options)), { includeCompletionsForModuleExports: options.includeCompletionsForModuleExports || options.includeExternalModuleExports, includeCompletionsWithInsertText: options.includeCompletionsWithInsertText || options.includeInsertTextCompletions });
             synchronizeHostData();
-            return ts.Completions.getCompletionsAtPosition(host, program, log, getValidSourceFile(fileName), position, fullPreferences, options.triggerCharacter);
+            return ts.Completions.getCompletionsAtPosition(host, program, log, getValidSourceFile(fileName), position, fullPreferences, options.triggerCharacter, options.triggerKind, cancellationToken);
         }
         function getCompletionEntryDetails(fileName, position, name, formattingOptions, source, preferences, data) {
             if (preferences === void 0) { preferences = ts.emptyOptions; }
@@ -153988,16 +157423,16 @@
         }
         function shouldGetType(sourceFile, node, position) {
             switch (node.kind) {
-                case 78 /* Identifier */:
+                case 79 /* Identifier */:
                     return !ts.isLabelName(node) && !ts.isTagName(node) && !ts.isConstTypeReference(node.parent);
-                case 202 /* PropertyAccessExpression */:
-                case 158 /* QualifiedName */:
+                case 204 /* PropertyAccessExpression */:
+                case 159 /* QualifiedName */:
                     // Don't return quickInfo if inside the comment in `a/**/.b`
                     return !ts.isInComment(sourceFile, position);
-                case 107 /* ThisKeyword */:
-                case 188 /* ThisType */:
-                case 105 /* SuperKeyword */:
-                case 193 /* NamedTupleMember */:
+                case 108 /* ThisKeyword */:
+                case 190 /* ThisType */:
+                case 106 /* SuperKeyword */:
+                case 195 /* NamedTupleMember */:
                     return true;
                 default:
                     return false;
@@ -154102,16 +157537,16 @@
                 return undefined;
             }
             switch (node.kind) {
-                case 202 /* PropertyAccessExpression */:
-                case 158 /* QualifiedName */:
+                case 204 /* PropertyAccessExpression */:
+                case 159 /* QualifiedName */:
                 case 10 /* StringLiteral */:
-                case 94 /* FalseKeyword */:
-                case 109 /* TrueKeyword */:
-                case 103 /* NullKeyword */:
-                case 105 /* SuperKeyword */:
-                case 107 /* ThisKeyword */:
-                case 188 /* ThisType */:
-                case 78 /* Identifier */:
+                case 95 /* FalseKeyword */:
+                case 110 /* TrueKeyword */:
+                case 104 /* NullKeyword */:
+                case 106 /* SuperKeyword */:
+                case 108 /* ThisKeyword */:
+                case 190 /* ThisType */:
+                case 79 /* Identifier */:
                     break;
                 // Cant create the text span
                 default:
@@ -154127,7 +157562,7 @@
                     // If this is name of a module declarations, check if this is right side of dotted module name
                     // If parent of the module declaration which is parent of this node is module declaration and its body is the module declaration that this node is name of
                     // Then this name is name from dotted module
-                    if (nodeForStartPos.parent.parent.kind === 257 /* ModuleDeclaration */ &&
+                    if (nodeForStartPos.parent.parent.kind === 259 /* ModuleDeclaration */ &&
                         nodeForStartPos.parent.parent.body === nodeForStartPos.parent) {
                         // Use parent module declarations name for start pos
                         nodeForStartPos = nodeForStartPos.parent.parent.name;
@@ -154480,14 +157915,14 @@
             else {
                 // If is not commenting then remove all comments found.
                 for (var _i = 0, positions_1 = positions; _i < positions_1.length; _i++) {
-                    var pos_1 = positions_1[_i];
-                    var from = pos_1 - closeMultiline.length > 0 ? pos_1 - closeMultiline.length : 0;
+                    var pos_2 = positions_1[_i];
+                    var from = pos_2 - closeMultiline.length > 0 ? pos_2 - closeMultiline.length : 0;
                     var offset = text.substr(from, closeMultiline.length) === closeMultiline ? closeMultiline.length : 0;
                     textChanges.push({
                         newText: "",
                         span: {
                             length: openMultiline.length,
-                            start: pos_1 - offset
+                            start: pos_2 - offset
                         }
                     });
                 }
@@ -154680,6 +158115,16 @@
                 kind: kind
             };
         }
+        function getInlayHintsContext(file, span, preferences) {
+            return {
+                file: file,
+                program: getProgram(),
+                host: host,
+                span: span,
+                preferences: preferences,
+                cancellationToken: cancellationToken,
+            };
+        }
         function getSmartSelectionRange(fileName, position) {
             return ts.SmartSelectionRange.getSmartSelectionRange(position, syntaxTreeCache.getCurrentSourceFile(fileName));
         }
@@ -154722,6 +158167,12 @@
             var declaration = ts.firstOrOnly(ts.CallHierarchy.resolveCallHierarchyDeclaration(program, position === 0 ? sourceFile : ts.getTouchingPropertyName(sourceFile, position)));
             return declaration ? ts.CallHierarchy.getOutgoingCalls(program, declaration) : [];
         }
+        function provideInlayHints(fileName, span, preferences) {
+            if (preferences === void 0) { preferences = ts.emptyOptions; }
+            synchronizeHostData();
+            var sourceFile = getValidSourceFile(fileName);
+            return ts.InlayHints.provideInlayHints(getInlayHintsContext(sourceFile, span, preferences));
+        }
         var ls = {
             dispose: dispose,
             cleanupSemanticCache: cleanupSemanticCache,
@@ -154787,6 +158238,7 @@
             toggleMultilineComment: toggleMultilineComment,
             commentSelection: commentSelection,
             uncommentSelection: uncommentSelection,
+            provideInlayHints: provideInlayHints,
         };
         switch (languageServiceMode) {
             case ts.LanguageServiceMode.Semantic:
@@ -154848,7 +158300,7 @@
      */
     function literalIsName(node) {
         return ts.isDeclarationName(node) ||
-            node.parent.kind === 273 /* ExternalModuleReference */ ||
+            node.parent.kind === 275 /* ExternalModuleReference */ ||
             isArgumentOfElementAccessExpression(node) ||
             ts.isLiteralComputedPropertyDeclarationName(node);
     }
@@ -154866,13 +158318,13 @@
             case 10 /* StringLiteral */:
             case 14 /* NoSubstitutionTemplateLiteral */:
             case 8 /* NumericLiteral */:
-                if (node.parent.kind === 159 /* ComputedPropertyName */) {
+                if (node.parent.kind === 160 /* ComputedPropertyName */) {
                     return ts.isObjectLiteralElement(node.parent.parent) ? node.parent.parent : undefined;
                 }
             // falls through
-            case 78 /* Identifier */:
+            case 79 /* Identifier */:
                 return ts.isObjectLiteralElement(node.parent) &&
-                    (node.parent.parent.kind === 201 /* ObjectLiteralExpression */ || node.parent.parent.kind === 282 /* JsxAttributes */) &&
+                    (node.parent.parent.kind === 203 /* ObjectLiteralExpression */ || node.parent.parent.kind === 284 /* JsxAttributes */) &&
                     node.parent.name === node ? node.parent : undefined;
         }
         return undefined;
@@ -154914,7 +158366,7 @@
     function isArgumentOfElementAccessExpression(node) {
         return node &&
             node.parent &&
-            node.parent.kind === 203 /* ElementAccessExpression */ &&
+            node.parent.kind === 205 /* ElementAccessExpression */ &&
             node.parent.argumentExpression === node;
     }
     /**
@@ -154994,114 +158446,114 @@
                 if (node) {
                     var parent = node.parent;
                     switch (node.kind) {
-                        case 233 /* VariableStatement */:
+                        case 235 /* VariableStatement */:
                             // Span on first variable declaration
                             return spanInVariableDeclaration(node.declarationList.declarations[0]);
-                        case 250 /* VariableDeclaration */:
-                        case 164 /* PropertyDeclaration */:
-                        case 163 /* PropertySignature */:
+                        case 252 /* VariableDeclaration */:
+                        case 165 /* PropertyDeclaration */:
+                        case 164 /* PropertySignature */:
                             return spanInVariableDeclaration(node);
-                        case 161 /* Parameter */:
+                        case 162 /* Parameter */:
                             return spanInParameterDeclaration(node);
-                        case 252 /* FunctionDeclaration */:
-                        case 166 /* MethodDeclaration */:
-                        case 165 /* MethodSignature */:
-                        case 168 /* GetAccessor */:
-                        case 169 /* SetAccessor */:
-                        case 167 /* Constructor */:
-                        case 209 /* FunctionExpression */:
-                        case 210 /* ArrowFunction */:
+                        case 254 /* FunctionDeclaration */:
+                        case 167 /* MethodDeclaration */:
+                        case 166 /* MethodSignature */:
+                        case 170 /* GetAccessor */:
+                        case 171 /* SetAccessor */:
+                        case 169 /* Constructor */:
+                        case 211 /* FunctionExpression */:
+                        case 212 /* ArrowFunction */:
                             return spanInFunctionDeclaration(node);
-                        case 231 /* Block */:
+                        case 233 /* Block */:
                             if (ts.isFunctionBlock(node)) {
                                 return spanInFunctionBlock(node);
                             }
                         // falls through
-                        case 258 /* ModuleBlock */:
+                        case 260 /* ModuleBlock */:
                             return spanInBlock(node);
-                        case 288 /* CatchClause */:
+                        case 290 /* CatchClause */:
                             return spanInBlock(node.block);
-                        case 234 /* ExpressionStatement */:
+                        case 236 /* ExpressionStatement */:
                             // span on the expression
                             return textSpan(node.expression);
-                        case 243 /* ReturnStatement */:
+                        case 245 /* ReturnStatement */:
                             // span on return keyword and expression if present
                             return textSpan(node.getChildAt(0), node.expression);
-                        case 237 /* WhileStatement */:
+                        case 239 /* WhileStatement */:
                             // Span on while(...)
                             return textSpanEndingAtNextToken(node, node.expression);
-                        case 236 /* DoStatement */:
+                        case 238 /* DoStatement */:
                             // span in statement of the do statement
                             return spanInNode(node.statement);
-                        case 249 /* DebuggerStatement */:
+                        case 251 /* DebuggerStatement */:
                             // span on debugger keyword
                             return textSpan(node.getChildAt(0));
-                        case 235 /* IfStatement */:
+                        case 237 /* IfStatement */:
                             // set on if(..) span
                             return textSpanEndingAtNextToken(node, node.expression);
-                        case 246 /* LabeledStatement */:
+                        case 248 /* LabeledStatement */:
                             // span in statement
                             return spanInNode(node.statement);
-                        case 242 /* BreakStatement */:
-                        case 241 /* ContinueStatement */:
+                        case 244 /* BreakStatement */:
+                        case 243 /* ContinueStatement */:
                             // On break or continue keyword and label if present
                             return textSpan(node.getChildAt(0), node.label);
-                        case 238 /* ForStatement */:
+                        case 240 /* ForStatement */:
                             return spanInForStatement(node);
-                        case 239 /* ForInStatement */:
+                        case 241 /* ForInStatement */:
                             // span of for (a in ...)
                             return textSpanEndingAtNextToken(node, node.expression);
-                        case 240 /* ForOfStatement */:
+                        case 242 /* ForOfStatement */:
                             // span in initializer
                             return spanInInitializerOfForLike(node);
-                        case 245 /* SwitchStatement */:
+                        case 247 /* SwitchStatement */:
                             // span on switch(...)
                             return textSpanEndingAtNextToken(node, node.expression);
-                        case 285 /* CaseClause */:
-                        case 286 /* DefaultClause */:
+                        case 287 /* CaseClause */:
+                        case 288 /* DefaultClause */:
                             // span in first statement of the clause
                             return spanInNode(node.statements[0]);
-                        case 248 /* TryStatement */:
+                        case 250 /* TryStatement */:
                             // span in try block
                             return spanInBlock(node.tryBlock);
-                        case 247 /* ThrowStatement */:
+                        case 249 /* ThrowStatement */:
                             // span in throw ...
                             return textSpan(node, node.expression);
-                        case 267 /* ExportAssignment */:
+                        case 269 /* ExportAssignment */:
                             // span on export = id
                             return textSpan(node, node.expression);
-                        case 261 /* ImportEqualsDeclaration */:
+                        case 263 /* ImportEqualsDeclaration */:
                             // import statement without including semicolon
                             return textSpan(node, node.moduleReference);
-                        case 262 /* ImportDeclaration */:
+                        case 264 /* ImportDeclaration */:
                             // import statement without including semicolon
                             return textSpan(node, node.moduleSpecifier);
-                        case 268 /* ExportDeclaration */:
+                        case 270 /* ExportDeclaration */:
                             // import statement without including semicolon
                             return textSpan(node, node.moduleSpecifier);
-                        case 257 /* ModuleDeclaration */:
+                        case 259 /* ModuleDeclaration */:
                             // span on complete module if it is instantiated
                             if (ts.getModuleInstanceState(node) !== 1 /* Instantiated */) {
                                 return undefined;
                             }
                         // falls through
-                        case 253 /* ClassDeclaration */:
-                        case 256 /* EnumDeclaration */:
-                        case 292 /* EnumMember */:
-                        case 199 /* BindingElement */:
+                        case 255 /* ClassDeclaration */:
+                        case 258 /* EnumDeclaration */:
+                        case 294 /* EnumMember */:
+                        case 201 /* BindingElement */:
                             // span on complete node
                             return textSpan(node);
-                        case 244 /* WithStatement */:
+                        case 246 /* WithStatement */:
                             // span in statement
                             return spanInNode(node.statement);
-                        case 162 /* Decorator */:
+                        case 163 /* Decorator */:
                             return spanInNodeArray(parent.decorators);
-                        case 197 /* ObjectBindingPattern */:
-                        case 198 /* ArrayBindingPattern */:
+                        case 199 /* ObjectBindingPattern */:
+                        case 200 /* ArrayBindingPattern */:
                             return spanInBindingPattern(node);
                         // No breakpoint in interface, type alias
-                        case 254 /* InterfaceDeclaration */:
-                        case 255 /* TypeAliasDeclaration */:
+                        case 256 /* InterfaceDeclaration */:
+                        case 257 /* TypeAliasDeclaration */:
                             return undefined;
                         // Tokens:
                         case 26 /* SemicolonToken */:
@@ -155125,13 +158577,13 @@
                         case 29 /* LessThanToken */:
                             return spanInGreaterThanOrLessThanToken(node);
                         // Keywords:
-                        case 114 /* WhileKeyword */:
+                        case 115 /* WhileKeyword */:
                             return spanInWhileKeyword(node);
-                        case 90 /* ElseKeyword */:
-                        case 82 /* CatchKeyword */:
-                        case 95 /* FinallyKeyword */:
+                        case 91 /* ElseKeyword */:
+                        case 83 /* CatchKeyword */:
+                        case 96 /* FinallyKeyword */:
                             return spanInNextNode(node);
-                        case 157 /* OfKeyword */:
+                        case 158 /* OfKeyword */:
                             return spanInOfKeyword(node);
                         default:
                             // Destructuring pattern in destructuring assignment
@@ -155143,14 +158595,14 @@
                             // Set breakpoint on identifier element of destructuring pattern
                             // `a` or `...c` or `d: x` from
                             // `[a, b, ...c]` or `{ a, b }` or `{ d: x }` from destructuring pattern
-                            if ((node.kind === 78 /* Identifier */ ||
-                                node.kind === 221 /* SpreadElement */ ||
-                                node.kind === 289 /* PropertyAssignment */ ||
-                                node.kind === 290 /* ShorthandPropertyAssignment */) &&
+                            if ((node.kind === 79 /* Identifier */ ||
+                                node.kind === 223 /* SpreadElement */ ||
+                                node.kind === 291 /* PropertyAssignment */ ||
+                                node.kind === 292 /* ShorthandPropertyAssignment */) &&
                                 ts.isArrayLiteralOrObjectLiteralDestructuringPattern(parent)) {
                                 return textSpan(node);
                             }
-                            if (node.kind === 217 /* BinaryExpression */) {
+                            if (node.kind === 219 /* BinaryExpression */) {
                                 var _a = node, left = _a.left, operatorToken = _a.operatorToken;
                                 // Set breakpoint in destructuring pattern if its destructuring assignment
                                 // [a, b, c] or {a, b, c} of
@@ -155159,7 +158611,7 @@
                                 if (ts.isArrayLiteralOrObjectLiteralDestructuringPattern(left)) {
                                     return spanInArrayLiteralOrObjectLiteralDestructuringPattern(left);
                                 }
-                                if (operatorToken.kind === 62 /* EqualsToken */ && ts.isArrayLiteralOrObjectLiteralDestructuringPattern(node.parent)) {
+                                if (operatorToken.kind === 63 /* EqualsToken */ && ts.isArrayLiteralOrObjectLiteralDestructuringPattern(node.parent)) {
                                     // Set breakpoint on assignment expression element of destructuring pattern
                                     // a = expression of
                                     // [a = expression, b, c] = someExpression or
@@ -155172,22 +158624,22 @@
                             }
                             if (ts.isExpressionNode(node)) {
                                 switch (parent.kind) {
-                                    case 236 /* DoStatement */:
+                                    case 238 /* DoStatement */:
                                         // Set span as if on while keyword
                                         return spanInPreviousNode(node);
-                                    case 162 /* Decorator */:
+                                    case 163 /* Decorator */:
                                         // Set breakpoint on the decorator emit
                                         return spanInNode(node.parent);
-                                    case 238 /* ForStatement */:
-                                    case 240 /* ForOfStatement */:
+                                    case 240 /* ForStatement */:
+                                    case 242 /* ForOfStatement */:
                                         return textSpan(node);
-                                    case 217 /* BinaryExpression */:
+                                    case 219 /* BinaryExpression */:
                                         if (node.parent.operatorToken.kind === 27 /* CommaToken */) {
                                             // If this is a comma expression, the breakpoint is possible in this expression
                                             return textSpan(node);
                                         }
                                         break;
-                                    case 210 /* ArrowFunction */:
+                                    case 212 /* ArrowFunction */:
                                         if (node.parent.body === node) {
                                             // If this is body of arrow function, it is allowed to have the breakpoint
                                             return textSpan(node);
@@ -155196,21 +158648,21 @@
                                 }
                             }
                             switch (node.parent.kind) {
-                                case 289 /* PropertyAssignment */:
+                                case 291 /* PropertyAssignment */:
                                     // If this is name of property assignment, set breakpoint in the initializer
                                     if (node.parent.name === node &&
                                         !ts.isArrayLiteralOrObjectLiteralDestructuringPattern(node.parent.parent)) {
                                         return spanInNode(node.parent.initializer);
                                     }
                                     break;
-                                case 207 /* TypeAssertionExpression */:
+                                case 209 /* TypeAssertionExpression */:
                                     // Breakpoint in type assertion goes to its operand
                                     if (node.parent.type === node) {
                                         return spanInNextNode(node.parent.type);
                                     }
                                     break;
-                                case 250 /* VariableDeclaration */:
-                                case 161 /* Parameter */: {
+                                case 252 /* VariableDeclaration */:
+                                case 162 /* Parameter */: {
                                     // initializer of variable/parameter declaration go to previous node
                                     var _b = node.parent, initializer = _b.initializer, type = _b.type;
                                     if (initializer === node || type === node || ts.isAssignmentOperator(node.kind)) {
@@ -155218,7 +158670,7 @@
                                     }
                                     break;
                                 }
-                                case 217 /* BinaryExpression */: {
+                                case 219 /* BinaryExpression */: {
                                     var left = node.parent.left;
                                     if (ts.isArrayLiteralOrObjectLiteralDestructuringPattern(left) && node !== left) {
                                         // If initializer of destructuring assignment move to previous token
@@ -155248,7 +158700,7 @@
                 }
                 function spanInVariableDeclaration(variableDeclaration) {
                     // If declaration of for in statement, just set the span in parent
-                    if (variableDeclaration.parent.parent.kind === 239 /* ForInStatement */) {
+                    if (variableDeclaration.parent.parent.kind === 241 /* ForInStatement */) {
                         return spanInNode(variableDeclaration.parent.parent);
                     }
                     var parent = variableDeclaration.parent;
@@ -155260,7 +158712,7 @@
                     // or its declaration from 'for of'
                     if (variableDeclaration.initializer ||
                         ts.hasSyntacticModifier(variableDeclaration, 1 /* Export */) ||
-                        parent.parent.kind === 240 /* ForOfStatement */) {
+                        parent.parent.kind === 242 /* ForOfStatement */) {
                         return textSpanFromVariableDeclaration(variableDeclaration);
                     }
                     if (ts.isVariableDeclarationList(variableDeclaration.parent) &&
@@ -155301,7 +158753,7 @@
                 }
                 function canFunctionHaveSpanInWholeDeclaration(functionDeclaration) {
                     return ts.hasSyntacticModifier(functionDeclaration, 1 /* Export */) ||
-                        (functionDeclaration.parent.kind === 253 /* ClassDeclaration */ && functionDeclaration.kind !== 167 /* Constructor */);
+                        (functionDeclaration.parent.kind === 255 /* ClassDeclaration */ && functionDeclaration.kind !== 169 /* Constructor */);
                 }
                 function spanInFunctionDeclaration(functionDeclaration) {
                     // No breakpoints in the function signature
@@ -155324,26 +158776,26 @@
                 }
                 function spanInBlock(block) {
                     switch (block.parent.kind) {
-                        case 257 /* ModuleDeclaration */:
+                        case 259 /* ModuleDeclaration */:
                             if (ts.getModuleInstanceState(block.parent) !== 1 /* Instantiated */) {
                                 return undefined;
                             }
                         // Set on parent if on same line otherwise on first statement
                         // falls through
-                        case 237 /* WhileStatement */:
-                        case 235 /* IfStatement */:
-                        case 239 /* ForInStatement */:
+                        case 239 /* WhileStatement */:
+                        case 237 /* IfStatement */:
+                        case 241 /* ForInStatement */:
                             return spanInNodeIfStartsOnSameLine(block.parent, block.statements[0]);
                         // Set span on previous token if it starts on same line otherwise on the first statement of the block
-                        case 238 /* ForStatement */:
-                        case 240 /* ForOfStatement */:
+                        case 240 /* ForStatement */:
+                        case 242 /* ForOfStatement */:
                             return spanInNodeIfStartsOnSameLine(ts.findPrecedingToken(block.pos, sourceFile, block.parent), block.statements[0]);
                     }
                     // Default action is to set on first statement
                     return spanInNode(block.statements[0]);
                 }
                 function spanInInitializerOfForLike(forLikeStatement) {
-                    if (forLikeStatement.initializer.kind === 251 /* VariableDeclarationList */) {
+                    if (forLikeStatement.initializer.kind === 253 /* VariableDeclarationList */) {
                         // Declaration list - set breakpoint in first declaration
                         var variableDeclarationList = forLikeStatement.initializer;
                         if (variableDeclarationList.declarations.length > 0) {
@@ -155368,21 +158820,21 @@
                 }
                 function spanInBindingPattern(bindingPattern) {
                     // Set breakpoint in first binding element
-                    var firstBindingElement = ts.forEach(bindingPattern.elements, function (element) { return element.kind !== 223 /* OmittedExpression */ ? element : undefined; });
+                    var firstBindingElement = ts.forEach(bindingPattern.elements, function (element) { return element.kind !== 225 /* OmittedExpression */ ? element : undefined; });
                     if (firstBindingElement) {
                         return spanInNode(firstBindingElement);
                     }
                     // Empty binding pattern of binding element, set breakpoint on binding element
-                    if (bindingPattern.parent.kind === 199 /* BindingElement */) {
+                    if (bindingPattern.parent.kind === 201 /* BindingElement */) {
                         return textSpan(bindingPattern.parent);
                     }
                     // Variable declaration is used as the span
                     return textSpanFromVariableDeclaration(bindingPattern.parent);
                 }
                 function spanInArrayLiteralOrObjectLiteralDestructuringPattern(node) {
-                    ts.Debug.assert(node.kind !== 198 /* ArrayBindingPattern */ && node.kind !== 197 /* ObjectBindingPattern */);
-                    var elements = node.kind === 200 /* ArrayLiteralExpression */ ? node.elements : node.properties;
-                    var firstBindingElement = ts.forEach(elements, function (element) { return element.kind !== 223 /* OmittedExpression */ ? element : undefined; });
+                    ts.Debug.assert(node.kind !== 200 /* ArrayBindingPattern */ && node.kind !== 199 /* ObjectBindingPattern */);
+                    var elements = node.kind === 202 /* ArrayLiteralExpression */ ? node.elements : node.properties;
+                    var firstBindingElement = ts.forEach(elements, function (element) { return element.kind !== 225 /* OmittedExpression */ ? element : undefined; });
                     if (firstBindingElement) {
                         return spanInNode(firstBindingElement);
                     }
@@ -155390,18 +158842,18 @@
                     // just nested element in another destructuring assignment
                     // set breakpoint on assignment when parent is destructuring assignment
                     // Otherwise set breakpoint for this element
-                    return textSpan(node.parent.kind === 217 /* BinaryExpression */ ? node.parent : node);
+                    return textSpan(node.parent.kind === 219 /* BinaryExpression */ ? node.parent : node);
                 }
                 // Tokens:
                 function spanInOpenBraceToken(node) {
                     switch (node.parent.kind) {
-                        case 256 /* EnumDeclaration */:
+                        case 258 /* EnumDeclaration */:
                             var enumDeclaration = node.parent;
                             return spanInNodeIfStartsOnSameLine(ts.findPrecedingToken(node.pos, sourceFile, node.parent), enumDeclaration.members.length ? enumDeclaration.members[0] : enumDeclaration.getLastToken(sourceFile));
-                        case 253 /* ClassDeclaration */:
+                        case 255 /* ClassDeclaration */:
                             var classDeclaration = node.parent;
                             return spanInNodeIfStartsOnSameLine(ts.findPrecedingToken(node.pos, sourceFile, node.parent), classDeclaration.members.length ? classDeclaration.members[0] : classDeclaration.getLastToken(sourceFile));
-                        case 259 /* CaseBlock */:
+                        case 261 /* CaseBlock */:
                             return spanInNodeIfStartsOnSameLine(node.parent.parent, node.parent.clauses[0]);
                     }
                     // Default to parent node
@@ -155409,25 +158861,25 @@
                 }
                 function spanInCloseBraceToken(node) {
                     switch (node.parent.kind) {
-                        case 258 /* ModuleBlock */:
+                        case 260 /* ModuleBlock */:
                             // If this is not an instantiated module block, no bp span
                             if (ts.getModuleInstanceState(node.parent.parent) !== 1 /* Instantiated */) {
                                 return undefined;
                             }
                         // falls through
-                        case 256 /* EnumDeclaration */:
-                        case 253 /* ClassDeclaration */:
+                        case 258 /* EnumDeclaration */:
+                        case 255 /* ClassDeclaration */:
                             // Span on close brace token
                             return textSpan(node);
-                        case 231 /* Block */:
+                        case 233 /* Block */:
                             if (ts.isFunctionBlock(node.parent)) {
                                 // Span on close brace token
                                 return textSpan(node);
                             }
                         // falls through
-                        case 288 /* CatchClause */:
+                        case 290 /* CatchClause */:
                             return spanInNode(ts.lastOrUndefined(node.parent.statements));
-                        case 259 /* CaseBlock */:
+                        case 261 /* CaseBlock */:
                             // breakpoint in last statement of the last clause
                             var caseBlock = node.parent;
                             var lastClause = ts.lastOrUndefined(caseBlock.clauses);
@@ -155435,7 +158887,7 @@
                                 return spanInNode(ts.lastOrUndefined(lastClause.statements));
                             }
                             return undefined;
-                        case 197 /* ObjectBindingPattern */:
+                        case 199 /* ObjectBindingPattern */:
                             // Breakpoint in last binding element or binding pattern if it contains no elements
                             var bindingPattern = node.parent;
                             return spanInNode(ts.lastOrUndefined(bindingPattern.elements) || bindingPattern);
@@ -155451,7 +158903,7 @@
                 }
                 function spanInCloseBracketToken(node) {
                     switch (node.parent.kind) {
-                        case 198 /* ArrayBindingPattern */:
+                        case 200 /* ArrayBindingPattern */:
                             // Breakpoint in last binding element or binding pattern if it contains no elements
                             var bindingPattern = node.parent;
                             return textSpan(ts.lastOrUndefined(bindingPattern.elements) || bindingPattern);
@@ -155466,12 +158918,12 @@
                     }
                 }
                 function spanInOpenParenToken(node) {
-                    if (node.parent.kind === 236 /* DoStatement */ || // Go to while keyword and do action instead
-                        node.parent.kind === 204 /* CallExpression */ ||
-                        node.parent.kind === 205 /* NewExpression */) {
+                    if (node.parent.kind === 238 /* DoStatement */ || // Go to while keyword and do action instead
+                        node.parent.kind === 206 /* CallExpression */ ||
+                        node.parent.kind === 207 /* NewExpression */) {
                         return spanInPreviousNode(node);
                     }
-                    if (node.parent.kind === 208 /* ParenthesizedExpression */) {
+                    if (node.parent.kind === 210 /* ParenthesizedExpression */) {
                         return spanInNextNode(node);
                     }
                     // Default to parent node
@@ -155480,21 +158932,21 @@
                 function spanInCloseParenToken(node) {
                     // Is this close paren token of parameter list, set span in previous token
                     switch (node.parent.kind) {
-                        case 209 /* FunctionExpression */:
-                        case 252 /* FunctionDeclaration */:
-                        case 210 /* ArrowFunction */:
-                        case 166 /* MethodDeclaration */:
-                        case 165 /* MethodSignature */:
-                        case 168 /* GetAccessor */:
-                        case 169 /* SetAccessor */:
-                        case 167 /* Constructor */:
-                        case 237 /* WhileStatement */:
-                        case 236 /* DoStatement */:
-                        case 238 /* ForStatement */:
-                        case 240 /* ForOfStatement */:
-                        case 204 /* CallExpression */:
-                        case 205 /* NewExpression */:
-                        case 208 /* ParenthesizedExpression */:
+                        case 211 /* FunctionExpression */:
+                        case 254 /* FunctionDeclaration */:
+                        case 212 /* ArrowFunction */:
+                        case 167 /* MethodDeclaration */:
+                        case 166 /* MethodSignature */:
+                        case 170 /* GetAccessor */:
+                        case 171 /* SetAccessor */:
+                        case 169 /* Constructor */:
+                        case 239 /* WhileStatement */:
+                        case 238 /* DoStatement */:
+                        case 240 /* ForStatement */:
+                        case 242 /* ForOfStatement */:
+                        case 206 /* CallExpression */:
+                        case 207 /* NewExpression */:
+                        case 210 /* ParenthesizedExpression */:
                             return spanInPreviousNode(node);
                         // Default to parent node
                         default:
@@ -155504,20 +158956,20 @@
                 function spanInColonToken(node) {
                     // Is this : specifying return annotation of the function declaration
                     if (ts.isFunctionLike(node.parent) ||
-                        node.parent.kind === 289 /* PropertyAssignment */ ||
-                        node.parent.kind === 161 /* Parameter */) {
+                        node.parent.kind === 291 /* PropertyAssignment */ ||
+                        node.parent.kind === 162 /* Parameter */) {
                         return spanInPreviousNode(node);
                     }
                     return spanInNode(node.parent);
                 }
                 function spanInGreaterThanOrLessThanToken(node) {
-                    if (node.parent.kind === 207 /* TypeAssertionExpression */) {
+                    if (node.parent.kind === 209 /* TypeAssertionExpression */) {
                         return spanInNextNode(node);
                     }
                     return spanInNode(node.parent);
                 }
                 function spanInWhileKeyword(node) {
-                    if (node.parent.kind === 236 /* DoStatement */) {
+                    if (node.parent.kind === 238 /* DoStatement */) {
                         // Set span on while expression
                         return textSpanEndingAtNextToken(node, node.parent.expression);
                     }
@@ -155525,7 +158977,7 @@
                     return spanInNode(node.parent);
                 }
                 function spanInOfKeyword(node) {
-                    if (node.parent.kind === 240 /* ForOfStatement */) {
+                    if (node.parent.kind === 242 /* ForOfStatement */) {
                         // Set using next token
                         return spanInNextNode(node);
                     }
@@ -156133,6 +159585,10 @@
             var _this = this;
             return this.forwardJSONCall("provideCallHierarchyOutgoingCalls('" + fileName + "', " + position + ")", function () { return _this.languageService.provideCallHierarchyOutgoingCalls(fileName, position); });
         };
+        LanguageServiceShimObject.prototype.provideInlayHints = function (fileName, span, preference) {
+            var _this = this;
+            return this.forwardJSONCall("provideInlayHints('" + fileName + "', '" + JSON.stringify(span) + "', " + JSON.stringify(preference) + ")", function () { return _this.languageService.provideInlayHints(fileName, span, preference); });
+        };
         /// Emit
         LanguageServiceShimObject.prototype.getEmitOutput = function (fileName) {
             var _this = this;
@@ -156283,7 +159739,7 @@
                     typeAcquisition: configFile.typeAcquisition,
                     files: configFile.fileNames,
                     raw: configFile.raw,
-                    errors: realizeDiagnostics(__spreadArray(__spreadArray([], result.parseDiagnostics), configFile.errors), "\r\n")
+                    errors: realizeDiagnostics(__spreadArray(__spreadArray([], result.parseDiagnostics, true), configFile.errors, true), "\r\n")
                 };
             });
         };
@@ -157108,7 +160564,7 @@
         }
         else {
             type = operatorOrType;
-            operator = 138 /* KeyOfKeyword */;
+            operator = 139 /* KeyOfKeyword */;
         }
         return ts.factory.createTypeOperatorNode(operator, type);
     }, factoryDeprecation);
@@ -157286,9 +160742,9 @@
     ts.createNode = ts.Debug.deprecate(function createNode(kind, pos, end) {
         if (pos === void 0) { pos = 0; }
         if (end === void 0) { end = 0; }
-        return ts.setTextRangePosEnd(kind === 298 /* SourceFile */ ? ts.parseBaseNodeFactory.createBaseSourceFileNode(kind) :
-            kind === 78 /* Identifier */ ? ts.parseBaseNodeFactory.createBaseIdentifierNode(kind) :
-                kind === 79 /* PrivateIdentifier */ ? ts.parseBaseNodeFactory.createBasePrivateIdentifierNode(kind) :
+        return ts.setTextRangePosEnd(kind === 300 /* SourceFile */ ? ts.parseBaseNodeFactory.createBaseSourceFileNode(kind) :
+            kind === 79 /* Identifier */ ? ts.parseBaseNodeFactory.createBaseIdentifierNode(kind) :
+                kind === 80 /* PrivateIdentifier */ ? ts.parseBaseNodeFactory.createBasePrivateIdentifierNode(kind) :
                     !ts.isNodeKind(kind) ? ts.parseBaseNodeFactory.createBaseTokenNode(kind) :
                         ts.parseBaseNodeFactory.createBaseNode(kind), pos, end);
     }, { since: "4.0", warnAfter: "4.1", message: "Use an appropriate `factory` method instead." });
@@ -157315,7 +160771,7 @@
     // #region Renamed node Tests
     /** @deprecated Use `isTypeAssertionExpression` instead. */
     ts.isTypeAssertion = ts.Debug.deprecate(function isTypeAssertion(node) {
-        return node.kind === 207 /* TypeAssertionExpression */;
+        return node.kind === 209 /* TypeAssertionExpression */;
     }, {
         since: "4.0",
         warnAfter: "4.1",
diff --git a/node_modules/typescript/lib/typescriptServices.d.ts b/node_modules/typescript/lib/typescriptServices.d.ts
index af98131..c4e5e62 100644
--- a/node_modules/typescript/lib/typescriptServices.d.ts
+++ b/node_modules/typescript/lib/typescriptServices.d.ts
@@ -14,7 +14,7 @@
 ***************************************************************************** */
 
 declare namespace ts {
-    const versionMajorMinor = "4.3";
+    const versionMajorMinor = "4.4";
     /** The version of the TypeScript compiler release */
     const version: string;
     /**
@@ -166,306 +166,312 @@
         QuestionQuestionToken = 60,
         /** Only the JSDoc scanner produces BacktickToken. The normal scanner produces NoSubstitutionTemplateLiteral and related kinds. */
         BacktickToken = 61,
-        EqualsToken = 62,
-        PlusEqualsToken = 63,
-        MinusEqualsToken = 64,
-        AsteriskEqualsToken = 65,
-        AsteriskAsteriskEqualsToken = 66,
-        SlashEqualsToken = 67,
-        PercentEqualsToken = 68,
-        LessThanLessThanEqualsToken = 69,
-        GreaterThanGreaterThanEqualsToken = 70,
-        GreaterThanGreaterThanGreaterThanEqualsToken = 71,
-        AmpersandEqualsToken = 72,
-        BarEqualsToken = 73,
-        BarBarEqualsToken = 74,
-        AmpersandAmpersandEqualsToken = 75,
-        QuestionQuestionEqualsToken = 76,
-        CaretEqualsToken = 77,
-        Identifier = 78,
-        PrivateIdentifier = 79,
-        BreakKeyword = 80,
-        CaseKeyword = 81,
-        CatchKeyword = 82,
-        ClassKeyword = 83,
-        ConstKeyword = 84,
-        ContinueKeyword = 85,
-        DebuggerKeyword = 86,
-        DefaultKeyword = 87,
-        DeleteKeyword = 88,
-        DoKeyword = 89,
-        ElseKeyword = 90,
-        EnumKeyword = 91,
-        ExportKeyword = 92,
-        ExtendsKeyword = 93,
-        FalseKeyword = 94,
-        FinallyKeyword = 95,
-        ForKeyword = 96,
-        FunctionKeyword = 97,
-        IfKeyword = 98,
-        ImportKeyword = 99,
-        InKeyword = 100,
-        InstanceOfKeyword = 101,
-        NewKeyword = 102,
-        NullKeyword = 103,
-        ReturnKeyword = 104,
-        SuperKeyword = 105,
-        SwitchKeyword = 106,
-        ThisKeyword = 107,
-        ThrowKeyword = 108,
-        TrueKeyword = 109,
-        TryKeyword = 110,
-        TypeOfKeyword = 111,
-        VarKeyword = 112,
-        VoidKeyword = 113,
-        WhileKeyword = 114,
-        WithKeyword = 115,
-        ImplementsKeyword = 116,
-        InterfaceKeyword = 117,
-        LetKeyword = 118,
-        PackageKeyword = 119,
-        PrivateKeyword = 120,
-        ProtectedKeyword = 121,
-        PublicKeyword = 122,
-        StaticKeyword = 123,
-        YieldKeyword = 124,
-        AbstractKeyword = 125,
-        AsKeyword = 126,
-        AssertsKeyword = 127,
-        AnyKeyword = 128,
-        AsyncKeyword = 129,
-        AwaitKeyword = 130,
-        BooleanKeyword = 131,
-        ConstructorKeyword = 132,
-        DeclareKeyword = 133,
-        GetKeyword = 134,
-        InferKeyword = 135,
-        IntrinsicKeyword = 136,
-        IsKeyword = 137,
-        KeyOfKeyword = 138,
-        ModuleKeyword = 139,
-        NamespaceKeyword = 140,
-        NeverKeyword = 141,
-        ReadonlyKeyword = 142,
-        RequireKeyword = 143,
-        NumberKeyword = 144,
-        ObjectKeyword = 145,
-        SetKeyword = 146,
-        StringKeyword = 147,
-        SymbolKeyword = 148,
-        TypeKeyword = 149,
-        UndefinedKeyword = 150,
-        UniqueKeyword = 151,
-        UnknownKeyword = 152,
-        FromKeyword = 153,
-        GlobalKeyword = 154,
-        BigIntKeyword = 155,
-        OverrideKeyword = 156,
-        OfKeyword = 157,
-        QualifiedName = 158,
-        ComputedPropertyName = 159,
-        TypeParameter = 160,
-        Parameter = 161,
-        Decorator = 162,
-        PropertySignature = 163,
-        PropertyDeclaration = 164,
-        MethodSignature = 165,
-        MethodDeclaration = 166,
-        Constructor = 167,
-        GetAccessor = 168,
-        SetAccessor = 169,
-        CallSignature = 170,
-        ConstructSignature = 171,
-        IndexSignature = 172,
-        TypePredicate = 173,
-        TypeReference = 174,
-        FunctionType = 175,
-        ConstructorType = 176,
-        TypeQuery = 177,
-        TypeLiteral = 178,
-        ArrayType = 179,
-        TupleType = 180,
-        OptionalType = 181,
-        RestType = 182,
-        UnionType = 183,
-        IntersectionType = 184,
-        ConditionalType = 185,
-        InferType = 186,
-        ParenthesizedType = 187,
-        ThisType = 188,
-        TypeOperator = 189,
-        IndexedAccessType = 190,
-        MappedType = 191,
-        LiteralType = 192,
-        NamedTupleMember = 193,
-        TemplateLiteralType = 194,
-        TemplateLiteralTypeSpan = 195,
-        ImportType = 196,
-        ObjectBindingPattern = 197,
-        ArrayBindingPattern = 198,
-        BindingElement = 199,
-        ArrayLiteralExpression = 200,
-        ObjectLiteralExpression = 201,
-        PropertyAccessExpression = 202,
-        ElementAccessExpression = 203,
-        CallExpression = 204,
-        NewExpression = 205,
-        TaggedTemplateExpression = 206,
-        TypeAssertionExpression = 207,
-        ParenthesizedExpression = 208,
-        FunctionExpression = 209,
-        ArrowFunction = 210,
-        DeleteExpression = 211,
-        TypeOfExpression = 212,
-        VoidExpression = 213,
-        AwaitExpression = 214,
-        PrefixUnaryExpression = 215,
-        PostfixUnaryExpression = 216,
-        BinaryExpression = 217,
-        ConditionalExpression = 218,
-        TemplateExpression = 219,
-        YieldExpression = 220,
-        SpreadElement = 221,
-        ClassExpression = 222,
-        OmittedExpression = 223,
-        ExpressionWithTypeArguments = 224,
-        AsExpression = 225,
-        NonNullExpression = 226,
-        MetaProperty = 227,
-        SyntheticExpression = 228,
-        TemplateSpan = 229,
-        SemicolonClassElement = 230,
-        Block = 231,
-        EmptyStatement = 232,
-        VariableStatement = 233,
-        ExpressionStatement = 234,
-        IfStatement = 235,
-        DoStatement = 236,
-        WhileStatement = 237,
-        ForStatement = 238,
-        ForInStatement = 239,
-        ForOfStatement = 240,
-        ContinueStatement = 241,
-        BreakStatement = 242,
-        ReturnStatement = 243,
-        WithStatement = 244,
-        SwitchStatement = 245,
-        LabeledStatement = 246,
-        ThrowStatement = 247,
-        TryStatement = 248,
-        DebuggerStatement = 249,
-        VariableDeclaration = 250,
-        VariableDeclarationList = 251,
-        FunctionDeclaration = 252,
-        ClassDeclaration = 253,
-        InterfaceDeclaration = 254,
-        TypeAliasDeclaration = 255,
-        EnumDeclaration = 256,
-        ModuleDeclaration = 257,
-        ModuleBlock = 258,
-        CaseBlock = 259,
-        NamespaceExportDeclaration = 260,
-        ImportEqualsDeclaration = 261,
-        ImportDeclaration = 262,
-        ImportClause = 263,
-        NamespaceImport = 264,
-        NamedImports = 265,
-        ImportSpecifier = 266,
-        ExportAssignment = 267,
-        ExportDeclaration = 268,
-        NamedExports = 269,
-        NamespaceExport = 270,
-        ExportSpecifier = 271,
-        MissingDeclaration = 272,
-        ExternalModuleReference = 273,
-        JsxElement = 274,
-        JsxSelfClosingElement = 275,
-        JsxOpeningElement = 276,
-        JsxClosingElement = 277,
-        JsxFragment = 278,
-        JsxOpeningFragment = 279,
-        JsxClosingFragment = 280,
-        JsxAttribute = 281,
-        JsxAttributes = 282,
-        JsxSpreadAttribute = 283,
-        JsxExpression = 284,
-        CaseClause = 285,
-        DefaultClause = 286,
-        HeritageClause = 287,
-        CatchClause = 288,
-        PropertyAssignment = 289,
-        ShorthandPropertyAssignment = 290,
-        SpreadAssignment = 291,
-        EnumMember = 292,
-        UnparsedPrologue = 293,
-        UnparsedPrepend = 294,
-        UnparsedText = 295,
-        UnparsedInternalText = 296,
-        UnparsedSyntheticReference = 297,
-        SourceFile = 298,
-        Bundle = 299,
-        UnparsedSource = 300,
-        InputFiles = 301,
-        JSDocTypeExpression = 302,
-        JSDocNameReference = 303,
-        JSDocAllType = 304,
-        JSDocUnknownType = 305,
-        JSDocNullableType = 306,
-        JSDocNonNullableType = 307,
-        JSDocOptionalType = 308,
-        JSDocFunctionType = 309,
-        JSDocVariadicType = 310,
-        JSDocNamepathType = 311,
-        JSDocComment = 312,
-        JSDocText = 313,
-        JSDocTypeLiteral = 314,
-        JSDocSignature = 315,
-        JSDocLink = 316,
-        JSDocTag = 317,
-        JSDocAugmentsTag = 318,
-        JSDocImplementsTag = 319,
-        JSDocAuthorTag = 320,
-        JSDocDeprecatedTag = 321,
-        JSDocClassTag = 322,
-        JSDocPublicTag = 323,
-        JSDocPrivateTag = 324,
-        JSDocProtectedTag = 325,
-        JSDocReadonlyTag = 326,
-        JSDocOverrideTag = 327,
-        JSDocCallbackTag = 328,
-        JSDocEnumTag = 329,
-        JSDocParameterTag = 330,
-        JSDocReturnTag = 331,
-        JSDocThisTag = 332,
-        JSDocTypeTag = 333,
-        JSDocTemplateTag = 334,
-        JSDocTypedefTag = 335,
-        JSDocSeeTag = 336,
-        JSDocPropertyTag = 337,
-        SyntaxList = 338,
-        NotEmittedStatement = 339,
-        PartiallyEmittedExpression = 340,
-        CommaListExpression = 341,
-        MergeDeclarationMarker = 342,
-        EndOfDeclarationMarker = 343,
-        SyntheticReferenceExpression = 344,
-        Count = 345,
-        FirstAssignment = 62,
-        LastAssignment = 77,
-        FirstCompoundAssignment = 63,
-        LastCompoundAssignment = 77,
-        FirstReservedWord = 80,
-        LastReservedWord = 115,
-        FirstKeyword = 80,
-        LastKeyword = 157,
-        FirstFutureReservedWord = 116,
-        LastFutureReservedWord = 124,
-        FirstTypeNode = 173,
-        LastTypeNode = 196,
+        /** Only the JSDoc scanner produces HashToken. The normal scanner produces PrivateIdentifier. */
+        HashToken = 62,
+        EqualsToken = 63,
+        PlusEqualsToken = 64,
+        MinusEqualsToken = 65,
+        AsteriskEqualsToken = 66,
+        AsteriskAsteriskEqualsToken = 67,
+        SlashEqualsToken = 68,
+        PercentEqualsToken = 69,
+        LessThanLessThanEqualsToken = 70,
+        GreaterThanGreaterThanEqualsToken = 71,
+        GreaterThanGreaterThanGreaterThanEqualsToken = 72,
+        AmpersandEqualsToken = 73,
+        BarEqualsToken = 74,
+        BarBarEqualsToken = 75,
+        AmpersandAmpersandEqualsToken = 76,
+        QuestionQuestionEqualsToken = 77,
+        CaretEqualsToken = 78,
+        Identifier = 79,
+        PrivateIdentifier = 80,
+        BreakKeyword = 81,
+        CaseKeyword = 82,
+        CatchKeyword = 83,
+        ClassKeyword = 84,
+        ConstKeyword = 85,
+        ContinueKeyword = 86,
+        DebuggerKeyword = 87,
+        DefaultKeyword = 88,
+        DeleteKeyword = 89,
+        DoKeyword = 90,
+        ElseKeyword = 91,
+        EnumKeyword = 92,
+        ExportKeyword = 93,
+        ExtendsKeyword = 94,
+        FalseKeyword = 95,
+        FinallyKeyword = 96,
+        ForKeyword = 97,
+        FunctionKeyword = 98,
+        IfKeyword = 99,
+        ImportKeyword = 100,
+        InKeyword = 101,
+        InstanceOfKeyword = 102,
+        NewKeyword = 103,
+        NullKeyword = 104,
+        ReturnKeyword = 105,
+        SuperKeyword = 106,
+        SwitchKeyword = 107,
+        ThisKeyword = 108,
+        ThrowKeyword = 109,
+        TrueKeyword = 110,
+        TryKeyword = 111,
+        TypeOfKeyword = 112,
+        VarKeyword = 113,
+        VoidKeyword = 114,
+        WhileKeyword = 115,
+        WithKeyword = 116,
+        ImplementsKeyword = 117,
+        InterfaceKeyword = 118,
+        LetKeyword = 119,
+        PackageKeyword = 120,
+        PrivateKeyword = 121,
+        ProtectedKeyword = 122,
+        PublicKeyword = 123,
+        StaticKeyword = 124,
+        YieldKeyword = 125,
+        AbstractKeyword = 126,
+        AsKeyword = 127,
+        AssertsKeyword = 128,
+        AnyKeyword = 129,
+        AsyncKeyword = 130,
+        AwaitKeyword = 131,
+        BooleanKeyword = 132,
+        ConstructorKeyword = 133,
+        DeclareKeyword = 134,
+        GetKeyword = 135,
+        InferKeyword = 136,
+        IntrinsicKeyword = 137,
+        IsKeyword = 138,
+        KeyOfKeyword = 139,
+        ModuleKeyword = 140,
+        NamespaceKeyword = 141,
+        NeverKeyword = 142,
+        ReadonlyKeyword = 143,
+        RequireKeyword = 144,
+        NumberKeyword = 145,
+        ObjectKeyword = 146,
+        SetKeyword = 147,
+        StringKeyword = 148,
+        SymbolKeyword = 149,
+        TypeKeyword = 150,
+        UndefinedKeyword = 151,
+        UniqueKeyword = 152,
+        UnknownKeyword = 153,
+        FromKeyword = 154,
+        GlobalKeyword = 155,
+        BigIntKeyword = 156,
+        OverrideKeyword = 157,
+        OfKeyword = 158,
+        QualifiedName = 159,
+        ComputedPropertyName = 160,
+        TypeParameter = 161,
+        Parameter = 162,
+        Decorator = 163,
+        PropertySignature = 164,
+        PropertyDeclaration = 165,
+        MethodSignature = 166,
+        MethodDeclaration = 167,
+        ClassStaticBlockDeclaration = 168,
+        Constructor = 169,
+        GetAccessor = 170,
+        SetAccessor = 171,
+        CallSignature = 172,
+        ConstructSignature = 173,
+        IndexSignature = 174,
+        TypePredicate = 175,
+        TypeReference = 176,
+        FunctionType = 177,
+        ConstructorType = 178,
+        TypeQuery = 179,
+        TypeLiteral = 180,
+        ArrayType = 181,
+        TupleType = 182,
+        OptionalType = 183,
+        RestType = 184,
+        UnionType = 185,
+        IntersectionType = 186,
+        ConditionalType = 187,
+        InferType = 188,
+        ParenthesizedType = 189,
+        ThisType = 190,
+        TypeOperator = 191,
+        IndexedAccessType = 192,
+        MappedType = 193,
+        LiteralType = 194,
+        NamedTupleMember = 195,
+        TemplateLiteralType = 196,
+        TemplateLiteralTypeSpan = 197,
+        ImportType = 198,
+        ObjectBindingPattern = 199,
+        ArrayBindingPattern = 200,
+        BindingElement = 201,
+        ArrayLiteralExpression = 202,
+        ObjectLiteralExpression = 203,
+        PropertyAccessExpression = 204,
+        ElementAccessExpression = 205,
+        CallExpression = 206,
+        NewExpression = 207,
+        TaggedTemplateExpression = 208,
+        TypeAssertionExpression = 209,
+        ParenthesizedExpression = 210,
+        FunctionExpression = 211,
+        ArrowFunction = 212,
+        DeleteExpression = 213,
+        TypeOfExpression = 214,
+        VoidExpression = 215,
+        AwaitExpression = 216,
+        PrefixUnaryExpression = 217,
+        PostfixUnaryExpression = 218,
+        BinaryExpression = 219,
+        ConditionalExpression = 220,
+        TemplateExpression = 221,
+        YieldExpression = 222,
+        SpreadElement = 223,
+        ClassExpression = 224,
+        OmittedExpression = 225,
+        ExpressionWithTypeArguments = 226,
+        AsExpression = 227,
+        NonNullExpression = 228,
+        MetaProperty = 229,
+        SyntheticExpression = 230,
+        TemplateSpan = 231,
+        SemicolonClassElement = 232,
+        Block = 233,
+        EmptyStatement = 234,
+        VariableStatement = 235,
+        ExpressionStatement = 236,
+        IfStatement = 237,
+        DoStatement = 238,
+        WhileStatement = 239,
+        ForStatement = 240,
+        ForInStatement = 241,
+        ForOfStatement = 242,
+        ContinueStatement = 243,
+        BreakStatement = 244,
+        ReturnStatement = 245,
+        WithStatement = 246,
+        SwitchStatement = 247,
+        LabeledStatement = 248,
+        ThrowStatement = 249,
+        TryStatement = 250,
+        DebuggerStatement = 251,
+        VariableDeclaration = 252,
+        VariableDeclarationList = 253,
+        FunctionDeclaration = 254,
+        ClassDeclaration = 255,
+        InterfaceDeclaration = 256,
+        TypeAliasDeclaration = 257,
+        EnumDeclaration = 258,
+        ModuleDeclaration = 259,
+        ModuleBlock = 260,
+        CaseBlock = 261,
+        NamespaceExportDeclaration = 262,
+        ImportEqualsDeclaration = 263,
+        ImportDeclaration = 264,
+        ImportClause = 265,
+        NamespaceImport = 266,
+        NamedImports = 267,
+        ImportSpecifier = 268,
+        ExportAssignment = 269,
+        ExportDeclaration = 270,
+        NamedExports = 271,
+        NamespaceExport = 272,
+        ExportSpecifier = 273,
+        MissingDeclaration = 274,
+        ExternalModuleReference = 275,
+        JsxElement = 276,
+        JsxSelfClosingElement = 277,
+        JsxOpeningElement = 278,
+        JsxClosingElement = 279,
+        JsxFragment = 280,
+        JsxOpeningFragment = 281,
+        JsxClosingFragment = 282,
+        JsxAttribute = 283,
+        JsxAttributes = 284,
+        JsxSpreadAttribute = 285,
+        JsxExpression = 286,
+        CaseClause = 287,
+        DefaultClause = 288,
+        HeritageClause = 289,
+        CatchClause = 290,
+        PropertyAssignment = 291,
+        ShorthandPropertyAssignment = 292,
+        SpreadAssignment = 293,
+        EnumMember = 294,
+        UnparsedPrologue = 295,
+        UnparsedPrepend = 296,
+        UnparsedText = 297,
+        UnparsedInternalText = 298,
+        UnparsedSyntheticReference = 299,
+        SourceFile = 300,
+        Bundle = 301,
+        UnparsedSource = 302,
+        InputFiles = 303,
+        JSDocTypeExpression = 304,
+        JSDocNameReference = 305,
+        JSDocMemberName = 306,
+        JSDocAllType = 307,
+        JSDocUnknownType = 308,
+        JSDocNullableType = 309,
+        JSDocNonNullableType = 310,
+        JSDocOptionalType = 311,
+        JSDocFunctionType = 312,
+        JSDocVariadicType = 313,
+        JSDocNamepathType = 314,
+        JSDocComment = 315,
+        JSDocText = 316,
+        JSDocTypeLiteral = 317,
+        JSDocSignature = 318,
+        JSDocLink = 319,
+        JSDocLinkCode = 320,
+        JSDocLinkPlain = 321,
+        JSDocTag = 322,
+        JSDocAugmentsTag = 323,
+        JSDocImplementsTag = 324,
+        JSDocAuthorTag = 325,
+        JSDocDeprecatedTag = 326,
+        JSDocClassTag = 327,
+        JSDocPublicTag = 328,
+        JSDocPrivateTag = 329,
+        JSDocProtectedTag = 330,
+        JSDocReadonlyTag = 331,
+        JSDocOverrideTag = 332,
+        JSDocCallbackTag = 333,
+        JSDocEnumTag = 334,
+        JSDocParameterTag = 335,
+        JSDocReturnTag = 336,
+        JSDocThisTag = 337,
+        JSDocTypeTag = 338,
+        JSDocTemplateTag = 339,
+        JSDocTypedefTag = 340,
+        JSDocSeeTag = 341,
+        JSDocPropertyTag = 342,
+        SyntaxList = 343,
+        NotEmittedStatement = 344,
+        PartiallyEmittedExpression = 345,
+        CommaListExpression = 346,
+        MergeDeclarationMarker = 347,
+        EndOfDeclarationMarker = 348,
+        SyntheticReferenceExpression = 349,
+        Count = 350,
+        FirstAssignment = 63,
+        LastAssignment = 78,
+        FirstCompoundAssignment = 64,
+        LastCompoundAssignment = 78,
+        FirstReservedWord = 81,
+        LastReservedWord = 116,
+        FirstKeyword = 81,
+        LastKeyword = 158,
+        FirstFutureReservedWord = 117,
+        LastFutureReservedWord = 125,
+        FirstTypeNode = 175,
+        LastTypeNode = 198,
         FirstPunctuation = 18,
-        LastPunctuation = 77,
+        LastPunctuation = 78,
         FirstToken = 0,
-        LastToken = 157,
+        LastToken = 158,
         FirstTriviaToken = 2,
         LastTriviaToken = 7,
         FirstLiteralToken = 8,
@@ -473,25 +479,25 @@
         FirstTemplateToken = 14,
         LastTemplateToken = 17,
         FirstBinaryOperator = 29,
-        LastBinaryOperator = 77,
-        FirstStatement = 233,
-        LastStatement = 249,
-        FirstNode = 158,
-        FirstJSDocNode = 302,
-        LastJSDocNode = 337,
-        FirstJSDocTagNode = 317,
-        LastJSDocTagNode = 337,
+        LastBinaryOperator = 78,
+        FirstStatement = 235,
+        LastStatement = 251,
+        FirstNode = 159,
+        FirstJSDocNode = 304,
+        LastJSDocNode = 342,
+        FirstJSDocTagNode = 322,
+        LastJSDocTagNode = 342,
     }
     export type TriviaSyntaxKind = SyntaxKind.SingleLineCommentTrivia | SyntaxKind.MultiLineCommentTrivia | SyntaxKind.NewLineTrivia | SyntaxKind.WhitespaceTrivia | SyntaxKind.ShebangTrivia | SyntaxKind.ConflictMarkerTrivia;
     export type LiteralSyntaxKind = SyntaxKind.NumericLiteral | SyntaxKind.BigIntLiteral | SyntaxKind.StringLiteral | SyntaxKind.JsxText | SyntaxKind.JsxTextAllWhiteSpaces | SyntaxKind.RegularExpressionLiteral | SyntaxKind.NoSubstitutionTemplateLiteral;
     export type PseudoLiteralSyntaxKind = SyntaxKind.TemplateHead | SyntaxKind.TemplateMiddle | SyntaxKind.TemplateTail;
-    export type PunctuationSyntaxKind = SyntaxKind.OpenBraceToken | SyntaxKind.CloseBraceToken | SyntaxKind.OpenParenToken | SyntaxKind.CloseParenToken | SyntaxKind.OpenBracketToken | SyntaxKind.CloseBracketToken | SyntaxKind.DotToken | SyntaxKind.DotDotDotToken | SyntaxKind.SemicolonToken | SyntaxKind.CommaToken | SyntaxKind.QuestionDotToken | SyntaxKind.LessThanToken | SyntaxKind.LessThanSlashToken | SyntaxKind.GreaterThanToken | SyntaxKind.LessThanEqualsToken | SyntaxKind.GreaterThanEqualsToken | SyntaxKind.EqualsEqualsToken | SyntaxKind.ExclamationEqualsToken | SyntaxKind.EqualsEqualsEqualsToken | SyntaxKind.ExclamationEqualsEqualsToken | SyntaxKind.EqualsGreaterThanToken | SyntaxKind.PlusToken | SyntaxKind.MinusToken | SyntaxKind.AsteriskToken | SyntaxKind.AsteriskAsteriskToken | SyntaxKind.SlashToken | SyntaxKind.PercentToken | SyntaxKind.PlusPlusToken | SyntaxKind.MinusMinusToken | SyntaxKind.LessThanLessThanToken | SyntaxKind.GreaterThanGreaterThanToken | SyntaxKind.GreaterThanGreaterThanGreaterThanToken | SyntaxKind.AmpersandToken | SyntaxKind.BarToken | SyntaxKind.CaretToken | SyntaxKind.ExclamationToken | SyntaxKind.TildeToken | SyntaxKind.AmpersandAmpersandToken | SyntaxKind.BarBarToken | SyntaxKind.QuestionQuestionToken | SyntaxKind.QuestionToken | SyntaxKind.ColonToken | SyntaxKind.AtToken | SyntaxKind.BacktickToken | SyntaxKind.EqualsToken | SyntaxKind.PlusEqualsToken | SyntaxKind.MinusEqualsToken | SyntaxKind.AsteriskEqualsToken | SyntaxKind.AsteriskAsteriskEqualsToken | SyntaxKind.SlashEqualsToken | SyntaxKind.PercentEqualsToken | SyntaxKind.LessThanLessThanEqualsToken | SyntaxKind.GreaterThanGreaterThanEqualsToken | SyntaxKind.GreaterThanGreaterThanGreaterThanEqualsToken | SyntaxKind.AmpersandEqualsToken | SyntaxKind.BarEqualsToken | SyntaxKind.CaretEqualsToken;
+    export type PunctuationSyntaxKind = SyntaxKind.OpenBraceToken | SyntaxKind.CloseBraceToken | SyntaxKind.OpenParenToken | SyntaxKind.CloseParenToken | SyntaxKind.OpenBracketToken | SyntaxKind.CloseBracketToken | SyntaxKind.DotToken | SyntaxKind.DotDotDotToken | SyntaxKind.SemicolonToken | SyntaxKind.CommaToken | SyntaxKind.QuestionDotToken | SyntaxKind.LessThanToken | SyntaxKind.LessThanSlashToken | SyntaxKind.GreaterThanToken | SyntaxKind.LessThanEqualsToken | SyntaxKind.GreaterThanEqualsToken | SyntaxKind.EqualsEqualsToken | SyntaxKind.ExclamationEqualsToken | SyntaxKind.EqualsEqualsEqualsToken | SyntaxKind.ExclamationEqualsEqualsToken | SyntaxKind.EqualsGreaterThanToken | SyntaxKind.PlusToken | SyntaxKind.MinusToken | SyntaxKind.AsteriskToken | SyntaxKind.AsteriskAsteriskToken | SyntaxKind.SlashToken | SyntaxKind.PercentToken | SyntaxKind.PlusPlusToken | SyntaxKind.MinusMinusToken | SyntaxKind.LessThanLessThanToken | SyntaxKind.GreaterThanGreaterThanToken | SyntaxKind.GreaterThanGreaterThanGreaterThanToken | SyntaxKind.AmpersandToken | SyntaxKind.BarToken | SyntaxKind.CaretToken | SyntaxKind.ExclamationToken | SyntaxKind.TildeToken | SyntaxKind.AmpersandAmpersandToken | SyntaxKind.BarBarToken | SyntaxKind.QuestionQuestionToken | SyntaxKind.QuestionToken | SyntaxKind.ColonToken | SyntaxKind.AtToken | SyntaxKind.BacktickToken | SyntaxKind.HashToken | SyntaxKind.EqualsToken | SyntaxKind.PlusEqualsToken | SyntaxKind.MinusEqualsToken | SyntaxKind.AsteriskEqualsToken | SyntaxKind.AsteriskAsteriskEqualsToken | SyntaxKind.SlashEqualsToken | SyntaxKind.PercentEqualsToken | SyntaxKind.LessThanLessThanEqualsToken | SyntaxKind.GreaterThanGreaterThanEqualsToken | SyntaxKind.GreaterThanGreaterThanGreaterThanEqualsToken | SyntaxKind.AmpersandEqualsToken | SyntaxKind.BarEqualsToken | SyntaxKind.CaretEqualsToken;
     export type KeywordSyntaxKind = SyntaxKind.AbstractKeyword | SyntaxKind.AnyKeyword | SyntaxKind.AsKeyword | SyntaxKind.AssertsKeyword | SyntaxKind.AsyncKeyword | SyntaxKind.AwaitKeyword | SyntaxKind.BigIntKeyword | SyntaxKind.BooleanKeyword | SyntaxKind.BreakKeyword | SyntaxKind.CaseKeyword | SyntaxKind.CatchKeyword | SyntaxKind.ClassKeyword | SyntaxKind.ConstKeyword | SyntaxKind.ConstructorKeyword | SyntaxKind.ContinueKeyword | SyntaxKind.DebuggerKeyword | SyntaxKind.DeclareKeyword | SyntaxKind.DefaultKeyword | SyntaxKind.DeleteKeyword | SyntaxKind.DoKeyword | SyntaxKind.ElseKeyword | SyntaxKind.EnumKeyword | SyntaxKind.ExportKeyword | SyntaxKind.ExtendsKeyword | SyntaxKind.FalseKeyword | SyntaxKind.FinallyKeyword | SyntaxKind.ForKeyword | SyntaxKind.FromKeyword | SyntaxKind.FunctionKeyword | SyntaxKind.GetKeyword | SyntaxKind.GlobalKeyword | SyntaxKind.IfKeyword | SyntaxKind.ImplementsKeyword | SyntaxKind.ImportKeyword | SyntaxKind.InferKeyword | SyntaxKind.InKeyword | SyntaxKind.InstanceOfKeyword | SyntaxKind.InterfaceKeyword | SyntaxKind.IntrinsicKeyword | SyntaxKind.IsKeyword | SyntaxKind.KeyOfKeyword | SyntaxKind.LetKeyword | SyntaxKind.ModuleKeyword | SyntaxKind.NamespaceKeyword | SyntaxKind.NeverKeyword | SyntaxKind.NewKeyword | SyntaxKind.NullKeyword | SyntaxKind.NumberKeyword | SyntaxKind.ObjectKeyword | SyntaxKind.OfKeyword | SyntaxKind.PackageKeyword | SyntaxKind.PrivateKeyword | SyntaxKind.ProtectedKeyword | SyntaxKind.PublicKeyword | SyntaxKind.ReadonlyKeyword | SyntaxKind.OverrideKeyword | SyntaxKind.RequireKeyword | SyntaxKind.ReturnKeyword | SyntaxKind.SetKeyword | SyntaxKind.StaticKeyword | SyntaxKind.StringKeyword | SyntaxKind.SuperKeyword | SyntaxKind.SwitchKeyword | SyntaxKind.SymbolKeyword | SyntaxKind.ThisKeyword | SyntaxKind.ThrowKeyword | SyntaxKind.TrueKeyword | SyntaxKind.TryKeyword | SyntaxKind.TypeKeyword | SyntaxKind.TypeOfKeyword | SyntaxKind.UndefinedKeyword | SyntaxKind.UniqueKeyword | SyntaxKind.UnknownKeyword | SyntaxKind.VarKeyword | SyntaxKind.VoidKeyword | SyntaxKind.WhileKeyword | SyntaxKind.WithKeyword | SyntaxKind.YieldKeyword;
     export type ModifierSyntaxKind = SyntaxKind.AbstractKeyword | SyntaxKind.AsyncKeyword | SyntaxKind.ConstKeyword | SyntaxKind.DeclareKeyword | SyntaxKind.DefaultKeyword | SyntaxKind.ExportKeyword | SyntaxKind.PrivateKeyword | SyntaxKind.ProtectedKeyword | SyntaxKind.PublicKeyword | SyntaxKind.ReadonlyKeyword | SyntaxKind.OverrideKeyword | SyntaxKind.StaticKeyword;
     export type KeywordTypeSyntaxKind = SyntaxKind.AnyKeyword | SyntaxKind.BigIntKeyword | SyntaxKind.BooleanKeyword | SyntaxKind.IntrinsicKeyword | SyntaxKind.NeverKeyword | SyntaxKind.NumberKeyword | SyntaxKind.ObjectKeyword | SyntaxKind.StringKeyword | SyntaxKind.SymbolKeyword | SyntaxKind.UndefinedKeyword | SyntaxKind.UnknownKeyword | SyntaxKind.VoidKeyword;
     export type TokenSyntaxKind = SyntaxKind.Unknown | SyntaxKind.EndOfFileToken | TriviaSyntaxKind | LiteralSyntaxKind | PseudoLiteralSyntaxKind | PunctuationSyntaxKind | SyntaxKind.Identifier | KeywordSyntaxKind;
     export type JsxTokenSyntaxKind = SyntaxKind.LessThanSlashToken | SyntaxKind.EndOfFileToken | SyntaxKind.ConflictMarkerTrivia | SyntaxKind.JsxText | SyntaxKind.JsxTextAllWhiteSpaces | SyntaxKind.OpenBraceToken | SyntaxKind.LessThanToken;
-    export type JSDocSyntaxKind = SyntaxKind.EndOfFileToken | SyntaxKind.WhitespaceTrivia | SyntaxKind.AtToken | SyntaxKind.NewLineTrivia | SyntaxKind.AsteriskToken | SyntaxKind.OpenBraceToken | SyntaxKind.CloseBraceToken | SyntaxKind.LessThanToken | SyntaxKind.GreaterThanToken | SyntaxKind.OpenBracketToken | SyntaxKind.CloseBracketToken | SyntaxKind.EqualsToken | SyntaxKind.CommaToken | SyntaxKind.DotToken | SyntaxKind.Identifier | SyntaxKind.BacktickToken | SyntaxKind.Unknown | KeywordSyntaxKind;
+    export type JSDocSyntaxKind = SyntaxKind.EndOfFileToken | SyntaxKind.WhitespaceTrivia | SyntaxKind.AtToken | SyntaxKind.NewLineTrivia | SyntaxKind.AsteriskToken | SyntaxKind.OpenBraceToken | SyntaxKind.CloseBraceToken | SyntaxKind.LessThanToken | SyntaxKind.GreaterThanToken | SyntaxKind.OpenBracketToken | SyntaxKind.CloseBracketToken | SyntaxKind.EqualsToken | SyntaxKind.CommaToken | SyntaxKind.DotToken | SyntaxKind.Identifier | SyntaxKind.BacktickToken | SyntaxKind.HashToken | SyntaxKind.Unknown | KeywordSyntaxKind;
     export enum NodeFlags {
         None = 0,
         Let = 1,
@@ -563,13 +569,13 @@
     }
     export interface JSDocContainer {
     }
-    export type HasJSDoc = ParameterDeclaration | CallSignatureDeclaration | ConstructSignatureDeclaration | MethodSignature | PropertySignature | ArrowFunction | ParenthesizedExpression | SpreadAssignment | ShorthandPropertyAssignment | PropertyAssignment | FunctionExpression | EmptyStatement | DebuggerStatement | Block | VariableStatement | ExpressionStatement | IfStatement | DoStatement | WhileStatement | ForStatement | ForInStatement | ForOfStatement | BreakStatement | ContinueStatement | ReturnStatement | WithStatement | SwitchStatement | LabeledStatement | ThrowStatement | TryStatement | FunctionDeclaration | ConstructorDeclaration | MethodDeclaration | VariableDeclaration | PropertyDeclaration | AccessorDeclaration | ClassLikeDeclaration | InterfaceDeclaration | TypeAliasDeclaration | EnumMember | EnumDeclaration | ModuleDeclaration | ImportEqualsDeclaration | ImportDeclaration | NamespaceExportDeclaration | ExportAssignment | IndexSignatureDeclaration | FunctionTypeNode | ConstructorTypeNode | JSDocFunctionType | ExportDeclaration | NamedTupleMember | EndOfFileToken;
+    export type HasJSDoc = ParameterDeclaration | CallSignatureDeclaration | ClassStaticBlockDeclaration | ConstructSignatureDeclaration | MethodSignature | PropertySignature | ArrowFunction | ParenthesizedExpression | SpreadAssignment | ShorthandPropertyAssignment | PropertyAssignment | FunctionExpression | EmptyStatement | DebuggerStatement | Block | VariableStatement | ExpressionStatement | IfStatement | DoStatement | WhileStatement | ForStatement | ForInStatement | ForOfStatement | BreakStatement | ContinueStatement | ReturnStatement | WithStatement | SwitchStatement | LabeledStatement | ThrowStatement | TryStatement | FunctionDeclaration | ConstructorDeclaration | MethodDeclaration | VariableDeclaration | PropertyDeclaration | AccessorDeclaration | ClassLikeDeclaration | InterfaceDeclaration | TypeAliasDeclaration | EnumMember | EnumDeclaration | ModuleDeclaration | ImportEqualsDeclaration | ImportDeclaration | NamespaceExportDeclaration | ExportAssignment | IndexSignatureDeclaration | FunctionTypeNode | ConstructorTypeNode | JSDocFunctionType | ExportDeclaration | NamedTupleMember | EndOfFileToken;
     export type HasType = SignatureDeclaration | VariableDeclaration | ParameterDeclaration | PropertySignature | PropertyDeclaration | TypePredicateNode | ParenthesizedTypeNode | TypeOperatorNode | MappedTypeNode | AssertionExpression | TypeAliasDeclaration | JSDocTypeExpression | JSDocNonNullableType | JSDocNullableType | JSDocOptionalType | JSDocVariadicType;
     export type HasTypeArguments = CallExpression | NewExpression | TaggedTemplateExpression | JsxOpeningElement | JsxSelfClosingElement;
     export type HasInitializer = HasExpressionInitializer | ForStatement | ForInStatement | ForOfStatement | JsxAttribute;
     export type HasExpressionInitializer = VariableDeclaration | ParameterDeclaration | BindingElement | PropertySignature | PropertyDeclaration | PropertyAssignment | EnumMember;
     export interface NodeArray<T extends Node> extends ReadonlyArray<T>, ReadonlyTextRange {
-        hasTrailingComma?: boolean;
+        readonly hasTrailingComma: boolean;
     }
     export interface Token<TKind extends SyntaxKind> extends Node {
         readonly kind: TKind;
@@ -845,6 +851,11 @@
         readonly parent: ObjectTypeDeclaration;
         readonly type: TypeNode;
     }
+    export interface ClassStaticBlockDeclaration extends ClassElement, JSDocContainer {
+        readonly kind: SyntaxKind.ClassStaticBlockDeclaration;
+        readonly parent: ClassDeclaration | ClassExpression;
+        readonly body: Block;
+    }
     export interface TypeNode extends Node {
         _typeNodeBrand: any;
     }
@@ -1710,7 +1721,13 @@
     }
     export interface JSDocNameReference extends Node {
         readonly kind: SyntaxKind.JSDocNameReference;
-        readonly name: EntityName;
+        readonly name: EntityName | JSDocMemberName;
+    }
+    /** Class#method reference in JSDoc */
+    export interface JSDocMemberName extends Node {
+        readonly kind: SyntaxKind.JSDocMemberName;
+        readonly left: EntityName | JSDocMemberName;
+        readonly right: Identifier;
     }
     export interface JSDocType extends TypeNode {
         _jsDocTypeBrand: any;
@@ -1749,18 +1766,29 @@
         readonly kind: SyntaxKind.JSDocComment;
         readonly parent: HasJSDoc;
         readonly tags?: NodeArray<JSDocTag>;
-        readonly comment?: string | NodeArray<JSDocText | JSDocLink>;
+        readonly comment?: string | NodeArray<JSDocComment>;
     }
     export interface JSDocTag extends Node {
         readonly parent: JSDoc | JSDocTypeLiteral;
         readonly tagName: Identifier;
-        readonly comment?: string | NodeArray<JSDocText | JSDocLink>;
+        readonly comment?: string | NodeArray<JSDocComment>;
     }
     export interface JSDocLink extends Node {
         readonly kind: SyntaxKind.JSDocLink;
-        readonly name?: EntityName;
+        readonly name?: EntityName | JSDocMemberName;
         text: string;
     }
+    export interface JSDocLinkCode extends Node {
+        readonly kind: SyntaxKind.JSDocLinkCode;
+        readonly name?: EntityName | JSDocMemberName;
+        text: string;
+    }
+    export interface JSDocLinkPlain extends Node {
+        readonly kind: SyntaxKind.JSDocLinkPlain;
+        readonly name?: EntityName | JSDocMemberName;
+        text: string;
+    }
+    export type JSDocComment = JSDocText | JSDocLink | JSDocLinkCode | JSDocLinkPlain;
     export interface JSDocText extends Node {
         readonly kind: SyntaxKind.JSDocText;
         text: string;
@@ -2170,6 +2198,7 @@
         getPropertyOfType(type: Type, propertyName: string): Symbol | undefined;
         getPrivateIdentifierPropertyOfType(leftType: Type, name: string, location: Node): Symbol | undefined;
         getIndexInfoOfType(type: Type, kind: IndexKind): IndexInfo | undefined;
+        getIndexInfosOfType(type: Type): readonly IndexInfo[];
         getSignaturesOfType(type: Type, kind: SignatureKind): readonly Signature[];
         getIndexTypeOfType(type: Type, kind: IndexKind): Type | undefined;
         getBaseTypes(type: InterfaceType): BaseType[];
@@ -2186,7 +2215,7 @@
             typeArguments?: NodeArray<TypeNode>;
         } | undefined;
         /** Note that the resulting nodes cannot be checked. */
-        indexInfoToIndexSignatureDeclaration(indexInfo: IndexInfo, kind: IndexKind, enclosingDeclaration: Node | undefined, flags: NodeBuilderFlags | undefined): IndexSignatureDeclaration | undefined;
+        indexInfoToIndexSignatureDeclaration(indexInfo: IndexInfo, enclosingDeclaration: Node | undefined, flags: NodeBuilderFlags | undefined): IndexSignatureDeclaration | undefined;
         /** Note that the resulting nodes cannot be checked. */
         symbolToEntityName(symbol: Symbol, meaning: SymbolFlags, enclosingDeclaration: Node | undefined, flags: NodeBuilderFlags | undefined): EntityName | undefined;
         /** Note that the resulting nodes cannot be checked. */
@@ -2243,6 +2272,8 @@
         isValidPropertyAccess(node: PropertyAccessExpression | QualifiedName | ImportTypeNode, propertyName: string): boolean;
         /** Follow all aliases to get the original symbol. */
         getAliasedSymbol(symbol: Symbol): Symbol;
+        /** Follow a *single* alias to get the immediately aliased symbol. */
+        getImmediateAliasedSymbol(symbol: Symbol): Symbol | undefined;
         getExportsOfModule(moduleSymbol: Symbol): Symbol[];
         getJsxIntrinsicTagNamesAt(location: Node): Symbol[];
         isOptionalParameter(node: ParameterDeclaration): boolean;
@@ -2584,8 +2615,7 @@
         declaredProperties: Symbol[];
         declaredCallSignatures: Signature[];
         declaredConstructSignatures: Signature[];
-        declaredStringIndexInfo?: IndexInfo;
-        declaredNumberIndexInfo?: IndexInfo;
+        declaredIndexInfos: IndexInfo[];
     }
     /**
      * Type references (ObjectFlags.Reference). When a class or interface has type parameters or
@@ -2699,6 +2729,7 @@
         Number = 1
     }
     export interface IndexInfo {
+        keyType: Type;
         type: Type;
         isReadonly: boolean;
         declaration?: IndexSignatureDeclaration;
@@ -2831,6 +2862,7 @@
         downlevelIteration?: boolean;
         emitBOM?: boolean;
         emitDecoratorMetadata?: boolean;
+        exactOptionalPropertyTypes?: boolean;
         experimentalDecorators?: boolean;
         forceConsistentCasingInFileNames?: boolean;
         importHelpers?: boolean;
@@ -2896,6 +2928,7 @@
         suppressImplicitAnyIndexErrors?: boolean;
         target?: ScriptTarget;
         traceResolution?: boolean;
+        useUnknownInCatchVariables?: boolean;
         resolveJsonModule?: boolean;
         types?: string[];
         /** Paths used to compute primary types search locations */
@@ -3267,6 +3300,8 @@
         updateIndexSignature(node: IndexSignatureDeclaration, decorators: readonly Decorator[] | undefined, modifiers: readonly Modifier[] | undefined, parameters: readonly ParameterDeclaration[], type: TypeNode): IndexSignatureDeclaration;
         createTemplateLiteralTypeSpan(type: TypeNode, literal: TemplateMiddle | TemplateTail): TemplateLiteralTypeSpan;
         updateTemplateLiteralTypeSpan(node: TemplateLiteralTypeSpan, type: TypeNode, literal: TemplateMiddle | TemplateTail): TemplateLiteralTypeSpan;
+        createClassStaticBlockDeclaration(decorators: readonly Decorator[] | undefined, modifiers: readonly Modifier[] | undefined, body: Block): ClassStaticBlockDeclaration;
+        updateClassStaticBlockDeclaration(node: ClassStaticBlockDeclaration, decorators: readonly Decorator[] | undefined, modifiers: readonly Modifier[] | undefined, body: Block): ClassStaticBlockDeclaration;
         createKeywordTypeNode<TKind extends KeywordTypeSyntaxKind>(kind: TKind): KeywordTypeNode<TKind>;
         createTypePredicateNode(assertsModifier: AssertsKeyword | undefined, parameterName: Identifier | ThisTypeNode | string, type: TypeNode | undefined): TypePredicateNode;
         updateTypePredicateNode(node: TypePredicateNode, assertsModifier: AssertsKeyword | undefined, parameterName: Identifier | ThisTypeNode, type: TypeNode | undefined): TypePredicateNode;
@@ -3496,60 +3531,66 @@
         updateJSDocNamepathType(node: JSDocNamepathType, type: TypeNode): JSDocNamepathType;
         createJSDocTypeExpression(type: TypeNode): JSDocTypeExpression;
         updateJSDocTypeExpression(node: JSDocTypeExpression, type: TypeNode): JSDocTypeExpression;
-        createJSDocNameReference(name: EntityName): JSDocNameReference;
-        updateJSDocNameReference(node: JSDocNameReference, name: EntityName): JSDocNameReference;
-        createJSDocLink(name: EntityName | undefined, text: string): JSDocLink;
-        updateJSDocLink(node: JSDocLink, name: EntityName | undefined, text: string): JSDocLink;
+        createJSDocNameReference(name: EntityName | JSDocMemberName): JSDocNameReference;
+        updateJSDocNameReference(node: JSDocNameReference, name: EntityName | JSDocMemberName): JSDocNameReference;
+        createJSDocMemberName(left: EntityName | JSDocMemberName, right: Identifier): JSDocMemberName;
+        updateJSDocMemberName(node: JSDocMemberName, left: EntityName | JSDocMemberName, right: Identifier): JSDocMemberName;
+        createJSDocLink(name: EntityName | JSDocMemberName | undefined, text: string): JSDocLink;
+        updateJSDocLink(node: JSDocLink, name: EntityName | JSDocMemberName | undefined, text: string): JSDocLink;
+        createJSDocLinkCode(name: EntityName | JSDocMemberName | undefined, text: string): JSDocLinkCode;
+        updateJSDocLinkCode(node: JSDocLinkCode, name: EntityName | JSDocMemberName | undefined, text: string): JSDocLinkCode;
+        createJSDocLinkPlain(name: EntityName | JSDocMemberName | undefined, text: string): JSDocLinkPlain;
+        updateJSDocLinkPlain(node: JSDocLinkPlain, name: EntityName | JSDocMemberName | undefined, text: string): JSDocLinkPlain;
         createJSDocTypeLiteral(jsDocPropertyTags?: readonly JSDocPropertyLikeTag[], isArrayType?: boolean): JSDocTypeLiteral;
         updateJSDocTypeLiteral(node: JSDocTypeLiteral, jsDocPropertyTags: readonly JSDocPropertyLikeTag[] | undefined, isArrayType: boolean | undefined): JSDocTypeLiteral;
         createJSDocSignature(typeParameters: readonly JSDocTemplateTag[] | undefined, parameters: readonly JSDocParameterTag[], type?: JSDocReturnTag): JSDocSignature;
         updateJSDocSignature(node: JSDocSignature, typeParameters: readonly JSDocTemplateTag[] | undefined, parameters: readonly JSDocParameterTag[], type: JSDocReturnTag | undefined): JSDocSignature;
-        createJSDocTemplateTag(tagName: Identifier | undefined, constraint: JSDocTypeExpression | undefined, typeParameters: readonly TypeParameterDeclaration[], comment?: string | NodeArray<JSDocText | JSDocLink>): JSDocTemplateTag;
-        updateJSDocTemplateTag(node: JSDocTemplateTag, tagName: Identifier | undefined, constraint: JSDocTypeExpression | undefined, typeParameters: readonly TypeParameterDeclaration[], comment: string | NodeArray<JSDocText | JSDocLink> | undefined): JSDocTemplateTag;
-        createJSDocTypedefTag(tagName: Identifier | undefined, typeExpression?: JSDocTypeExpression | JSDocTypeLiteral, fullName?: Identifier | JSDocNamespaceDeclaration, comment?: string | NodeArray<JSDocText | JSDocLink>): JSDocTypedefTag;
-        updateJSDocTypedefTag(node: JSDocTypedefTag, tagName: Identifier | undefined, typeExpression: JSDocTypeExpression | JSDocTypeLiteral | undefined, fullName: Identifier | JSDocNamespaceDeclaration | undefined, comment: string | NodeArray<JSDocText | JSDocLink> | undefined): JSDocTypedefTag;
-        createJSDocParameterTag(tagName: Identifier | undefined, name: EntityName, isBracketed: boolean, typeExpression?: JSDocTypeExpression, isNameFirst?: boolean, comment?: string | NodeArray<JSDocText | JSDocLink>): JSDocParameterTag;
-        updateJSDocParameterTag(node: JSDocParameterTag, tagName: Identifier | undefined, name: EntityName, isBracketed: boolean, typeExpression: JSDocTypeExpression | undefined, isNameFirst: boolean, comment: string | NodeArray<JSDocText | JSDocLink> | undefined): JSDocParameterTag;
-        createJSDocPropertyTag(tagName: Identifier | undefined, name: EntityName, isBracketed: boolean, typeExpression?: JSDocTypeExpression, isNameFirst?: boolean, comment?: string | NodeArray<JSDocText | JSDocLink>): JSDocPropertyTag;
-        updateJSDocPropertyTag(node: JSDocPropertyTag, tagName: Identifier | undefined, name: EntityName, isBracketed: boolean, typeExpression: JSDocTypeExpression | undefined, isNameFirst: boolean, comment: string | NodeArray<JSDocText | JSDocLink> | undefined): JSDocPropertyTag;
-        createJSDocTypeTag(tagName: Identifier | undefined, typeExpression: JSDocTypeExpression, comment?: string | NodeArray<JSDocText | JSDocLink>): JSDocTypeTag;
-        updateJSDocTypeTag(node: JSDocTypeTag, tagName: Identifier | undefined, typeExpression: JSDocTypeExpression, comment: string | NodeArray<JSDocText | JSDocLink> | undefined): JSDocTypeTag;
-        createJSDocSeeTag(tagName: Identifier | undefined, nameExpression: JSDocNameReference | undefined, comment?: string | NodeArray<JSDocText | JSDocLink>): JSDocSeeTag;
-        updateJSDocSeeTag(node: JSDocSeeTag, tagName: Identifier | undefined, nameExpression: JSDocNameReference | undefined, comment?: string | NodeArray<JSDocText | JSDocLink>): JSDocSeeTag;
-        createJSDocReturnTag(tagName: Identifier | undefined, typeExpression?: JSDocTypeExpression, comment?: string | NodeArray<JSDocText | JSDocLink>): JSDocReturnTag;
-        updateJSDocReturnTag(node: JSDocReturnTag, tagName: Identifier | undefined, typeExpression: JSDocTypeExpression | undefined, comment: string | NodeArray<JSDocText | JSDocLink> | undefined): JSDocReturnTag;
-        createJSDocThisTag(tagName: Identifier | undefined, typeExpression: JSDocTypeExpression, comment?: string | NodeArray<JSDocText | JSDocLink>): JSDocThisTag;
-        updateJSDocThisTag(node: JSDocThisTag, tagName: Identifier | undefined, typeExpression: JSDocTypeExpression | undefined, comment: string | NodeArray<JSDocText | JSDocLink> | undefined): JSDocThisTag;
-        createJSDocEnumTag(tagName: Identifier | undefined, typeExpression: JSDocTypeExpression, comment?: string | NodeArray<JSDocText | JSDocLink>): JSDocEnumTag;
-        updateJSDocEnumTag(node: JSDocEnumTag, tagName: Identifier | undefined, typeExpression: JSDocTypeExpression, comment: string | NodeArray<JSDocText | JSDocLink> | undefined): JSDocEnumTag;
-        createJSDocCallbackTag(tagName: Identifier | undefined, typeExpression: JSDocSignature, fullName?: Identifier | JSDocNamespaceDeclaration, comment?: string | NodeArray<JSDocText | JSDocLink>): JSDocCallbackTag;
-        updateJSDocCallbackTag(node: JSDocCallbackTag, tagName: Identifier | undefined, typeExpression: JSDocSignature, fullName: Identifier | JSDocNamespaceDeclaration | undefined, comment: string | NodeArray<JSDocText | JSDocLink> | undefined): JSDocCallbackTag;
-        createJSDocAugmentsTag(tagName: Identifier | undefined, className: JSDocAugmentsTag["class"], comment?: string | NodeArray<JSDocText | JSDocLink>): JSDocAugmentsTag;
-        updateJSDocAugmentsTag(node: JSDocAugmentsTag, tagName: Identifier | undefined, className: JSDocAugmentsTag["class"], comment: string | NodeArray<JSDocText | JSDocLink> | undefined): JSDocAugmentsTag;
-        createJSDocImplementsTag(tagName: Identifier | undefined, className: JSDocImplementsTag["class"], comment?: string | NodeArray<JSDocText | JSDocLink>): JSDocImplementsTag;
-        updateJSDocImplementsTag(node: JSDocImplementsTag, tagName: Identifier | undefined, className: JSDocImplementsTag["class"], comment: string | NodeArray<JSDocText | JSDocLink> | undefined): JSDocImplementsTag;
-        createJSDocAuthorTag(tagName: Identifier | undefined, comment?: string | NodeArray<JSDocText | JSDocLink>): JSDocAuthorTag;
-        updateJSDocAuthorTag(node: JSDocAuthorTag, tagName: Identifier | undefined, comment: string | NodeArray<JSDocText | JSDocLink> | undefined): JSDocAuthorTag;
-        createJSDocClassTag(tagName: Identifier | undefined, comment?: string | NodeArray<JSDocText | JSDocLink>): JSDocClassTag;
-        updateJSDocClassTag(node: JSDocClassTag, tagName: Identifier | undefined, comment: string | NodeArray<JSDocText | JSDocLink> | undefined): JSDocClassTag;
-        createJSDocPublicTag(tagName: Identifier | undefined, comment?: string | NodeArray<JSDocText | JSDocLink>): JSDocPublicTag;
-        updateJSDocPublicTag(node: JSDocPublicTag, tagName: Identifier | undefined, comment: string | NodeArray<JSDocText | JSDocLink> | undefined): JSDocPublicTag;
-        createJSDocPrivateTag(tagName: Identifier | undefined, comment?: string | NodeArray<JSDocText | JSDocLink>): JSDocPrivateTag;
-        updateJSDocPrivateTag(node: JSDocPrivateTag, tagName: Identifier | undefined, comment: string | NodeArray<JSDocText | JSDocLink> | undefined): JSDocPrivateTag;
-        createJSDocProtectedTag(tagName: Identifier | undefined, comment?: string | NodeArray<JSDocText | JSDocLink>): JSDocProtectedTag;
-        updateJSDocProtectedTag(node: JSDocProtectedTag, tagName: Identifier | undefined, comment: string | NodeArray<JSDocText | JSDocLink> | undefined): JSDocProtectedTag;
-        createJSDocReadonlyTag(tagName: Identifier | undefined, comment?: string | NodeArray<JSDocText | JSDocLink>): JSDocReadonlyTag;
-        updateJSDocReadonlyTag(node: JSDocReadonlyTag, tagName: Identifier | undefined, comment: string | NodeArray<JSDocText | JSDocLink> | undefined): JSDocReadonlyTag;
-        createJSDocUnknownTag(tagName: Identifier, comment?: string | NodeArray<JSDocText | JSDocLink>): JSDocUnknownTag;
-        updateJSDocUnknownTag(node: JSDocUnknownTag, tagName: Identifier, comment: string | NodeArray<JSDocText | JSDocLink> | undefined): JSDocUnknownTag;
-        createJSDocDeprecatedTag(tagName: Identifier, comment?: string | NodeArray<JSDocText | JSDocLink>): JSDocDeprecatedTag;
-        updateJSDocDeprecatedTag(node: JSDocDeprecatedTag, tagName: Identifier, comment?: string | NodeArray<JSDocText | JSDocLink>): JSDocDeprecatedTag;
-        createJSDocOverrideTag(tagName: Identifier, comment?: string | NodeArray<JSDocText | JSDocLink>): JSDocOverrideTag;
-        updateJSDocOverrideTag(node: JSDocOverrideTag, tagName: Identifier, comment?: string | NodeArray<JSDocText | JSDocLink>): JSDocOverrideTag;
+        createJSDocTemplateTag(tagName: Identifier | undefined, constraint: JSDocTypeExpression | undefined, typeParameters: readonly TypeParameterDeclaration[], comment?: string | NodeArray<JSDocComment>): JSDocTemplateTag;
+        updateJSDocTemplateTag(node: JSDocTemplateTag, tagName: Identifier | undefined, constraint: JSDocTypeExpression | undefined, typeParameters: readonly TypeParameterDeclaration[], comment: string | NodeArray<JSDocComment> | undefined): JSDocTemplateTag;
+        createJSDocTypedefTag(tagName: Identifier | undefined, typeExpression?: JSDocTypeExpression | JSDocTypeLiteral, fullName?: Identifier | JSDocNamespaceDeclaration, comment?: string | NodeArray<JSDocComment>): JSDocTypedefTag;
+        updateJSDocTypedefTag(node: JSDocTypedefTag, tagName: Identifier | undefined, typeExpression: JSDocTypeExpression | JSDocTypeLiteral | undefined, fullName: Identifier | JSDocNamespaceDeclaration | undefined, comment: string | NodeArray<JSDocComment> | undefined): JSDocTypedefTag;
+        createJSDocParameterTag(tagName: Identifier | undefined, name: EntityName, isBracketed: boolean, typeExpression?: JSDocTypeExpression, isNameFirst?: boolean, comment?: string | NodeArray<JSDocComment>): JSDocParameterTag;
+        updateJSDocParameterTag(node: JSDocParameterTag, tagName: Identifier | undefined, name: EntityName, isBracketed: boolean, typeExpression: JSDocTypeExpression | undefined, isNameFirst: boolean, comment: string | NodeArray<JSDocComment> | undefined): JSDocParameterTag;
+        createJSDocPropertyTag(tagName: Identifier | undefined, name: EntityName, isBracketed: boolean, typeExpression?: JSDocTypeExpression, isNameFirst?: boolean, comment?: string | NodeArray<JSDocComment>): JSDocPropertyTag;
+        updateJSDocPropertyTag(node: JSDocPropertyTag, tagName: Identifier | undefined, name: EntityName, isBracketed: boolean, typeExpression: JSDocTypeExpression | undefined, isNameFirst: boolean, comment: string | NodeArray<JSDocComment> | undefined): JSDocPropertyTag;
+        createJSDocTypeTag(tagName: Identifier | undefined, typeExpression: JSDocTypeExpression, comment?: string | NodeArray<JSDocComment>): JSDocTypeTag;
+        updateJSDocTypeTag(node: JSDocTypeTag, tagName: Identifier | undefined, typeExpression: JSDocTypeExpression, comment: string | NodeArray<JSDocComment> | undefined): JSDocTypeTag;
+        createJSDocSeeTag(tagName: Identifier | undefined, nameExpression: JSDocNameReference | undefined, comment?: string | NodeArray<JSDocComment>): JSDocSeeTag;
+        updateJSDocSeeTag(node: JSDocSeeTag, tagName: Identifier | undefined, nameExpression: JSDocNameReference | undefined, comment?: string | NodeArray<JSDocComment>): JSDocSeeTag;
+        createJSDocReturnTag(tagName: Identifier | undefined, typeExpression?: JSDocTypeExpression, comment?: string | NodeArray<JSDocComment>): JSDocReturnTag;
+        updateJSDocReturnTag(node: JSDocReturnTag, tagName: Identifier | undefined, typeExpression: JSDocTypeExpression | undefined, comment: string | NodeArray<JSDocComment> | undefined): JSDocReturnTag;
+        createJSDocThisTag(tagName: Identifier | undefined, typeExpression: JSDocTypeExpression, comment?: string | NodeArray<JSDocComment>): JSDocThisTag;
+        updateJSDocThisTag(node: JSDocThisTag, tagName: Identifier | undefined, typeExpression: JSDocTypeExpression | undefined, comment: string | NodeArray<JSDocComment> | undefined): JSDocThisTag;
+        createJSDocEnumTag(tagName: Identifier | undefined, typeExpression: JSDocTypeExpression, comment?: string | NodeArray<JSDocComment>): JSDocEnumTag;
+        updateJSDocEnumTag(node: JSDocEnumTag, tagName: Identifier | undefined, typeExpression: JSDocTypeExpression, comment: string | NodeArray<JSDocComment> | undefined): JSDocEnumTag;
+        createJSDocCallbackTag(tagName: Identifier | undefined, typeExpression: JSDocSignature, fullName?: Identifier | JSDocNamespaceDeclaration, comment?: string | NodeArray<JSDocComment>): JSDocCallbackTag;
+        updateJSDocCallbackTag(node: JSDocCallbackTag, tagName: Identifier | undefined, typeExpression: JSDocSignature, fullName: Identifier | JSDocNamespaceDeclaration | undefined, comment: string | NodeArray<JSDocComment> | undefined): JSDocCallbackTag;
+        createJSDocAugmentsTag(tagName: Identifier | undefined, className: JSDocAugmentsTag["class"], comment?: string | NodeArray<JSDocComment>): JSDocAugmentsTag;
+        updateJSDocAugmentsTag(node: JSDocAugmentsTag, tagName: Identifier | undefined, className: JSDocAugmentsTag["class"], comment: string | NodeArray<JSDocComment> | undefined): JSDocAugmentsTag;
+        createJSDocImplementsTag(tagName: Identifier | undefined, className: JSDocImplementsTag["class"], comment?: string | NodeArray<JSDocComment>): JSDocImplementsTag;
+        updateJSDocImplementsTag(node: JSDocImplementsTag, tagName: Identifier | undefined, className: JSDocImplementsTag["class"], comment: string | NodeArray<JSDocComment> | undefined): JSDocImplementsTag;
+        createJSDocAuthorTag(tagName: Identifier | undefined, comment?: string | NodeArray<JSDocComment>): JSDocAuthorTag;
+        updateJSDocAuthorTag(node: JSDocAuthorTag, tagName: Identifier | undefined, comment: string | NodeArray<JSDocComment> | undefined): JSDocAuthorTag;
+        createJSDocClassTag(tagName: Identifier | undefined, comment?: string | NodeArray<JSDocComment>): JSDocClassTag;
+        updateJSDocClassTag(node: JSDocClassTag, tagName: Identifier | undefined, comment: string | NodeArray<JSDocComment> | undefined): JSDocClassTag;
+        createJSDocPublicTag(tagName: Identifier | undefined, comment?: string | NodeArray<JSDocComment>): JSDocPublicTag;
+        updateJSDocPublicTag(node: JSDocPublicTag, tagName: Identifier | undefined, comment: string | NodeArray<JSDocComment> | undefined): JSDocPublicTag;
+        createJSDocPrivateTag(tagName: Identifier | undefined, comment?: string | NodeArray<JSDocComment>): JSDocPrivateTag;
+        updateJSDocPrivateTag(node: JSDocPrivateTag, tagName: Identifier | undefined, comment: string | NodeArray<JSDocComment> | undefined): JSDocPrivateTag;
+        createJSDocProtectedTag(tagName: Identifier | undefined, comment?: string | NodeArray<JSDocComment>): JSDocProtectedTag;
+        updateJSDocProtectedTag(node: JSDocProtectedTag, tagName: Identifier | undefined, comment: string | NodeArray<JSDocComment> | undefined): JSDocProtectedTag;
+        createJSDocReadonlyTag(tagName: Identifier | undefined, comment?: string | NodeArray<JSDocComment>): JSDocReadonlyTag;
+        updateJSDocReadonlyTag(node: JSDocReadonlyTag, tagName: Identifier | undefined, comment: string | NodeArray<JSDocComment> | undefined): JSDocReadonlyTag;
+        createJSDocUnknownTag(tagName: Identifier, comment?: string | NodeArray<JSDocComment>): JSDocUnknownTag;
+        updateJSDocUnknownTag(node: JSDocUnknownTag, tagName: Identifier, comment: string | NodeArray<JSDocComment> | undefined): JSDocUnknownTag;
+        createJSDocDeprecatedTag(tagName: Identifier, comment?: string | NodeArray<JSDocComment>): JSDocDeprecatedTag;
+        updateJSDocDeprecatedTag(node: JSDocDeprecatedTag, tagName: Identifier, comment?: string | NodeArray<JSDocComment>): JSDocDeprecatedTag;
+        createJSDocOverrideTag(tagName: Identifier, comment?: string | NodeArray<JSDocComment>): JSDocOverrideTag;
+        updateJSDocOverrideTag(node: JSDocOverrideTag, tagName: Identifier, comment?: string | NodeArray<JSDocComment>): JSDocOverrideTag;
         createJSDocText(text: string): JSDocText;
         updateJSDocText(node: JSDocText, text: string): JSDocText;
-        createJSDocComment(comment?: string | NodeArray<JSDocText | JSDocLink> | undefined, tags?: readonly JSDocTag[] | undefined): JSDoc;
-        updateJSDocComment(node: JSDoc, comment: string | NodeArray<JSDocText | JSDocLink> | undefined, tags: readonly JSDocTag[] | undefined): JSDoc;
+        createJSDocComment(comment?: string | NodeArray<JSDocComment> | undefined, tags?: readonly JSDocTag[] | undefined): JSDoc;
+        updateJSDocComment(node: JSDoc, comment: string | NodeArray<JSDocComment> | undefined, tags: readonly JSDocTag[] | undefined): JSDoc;
         createJsxElement(openingElement: JsxOpeningElement, children: readonly JsxChild[], closingElement: JsxClosingElement): JsxElement;
         updateJsxElement(node: JsxElement, openingElement: JsxOpeningElement, children: readonly JsxChild[], closingElement: JsxClosingElement): JsxElement;
         createJsxSelfClosingElement(tagName: JsxTagNameExpression, typeArguments: readonly TypeNode[] | undefined, attributes: JsxAttributes): JsxSelfClosingElement;
@@ -3920,6 +3961,7 @@
         readonly includeCompletionsWithSnippetText?: boolean;
         readonly includeAutomaticOptionalChainCompletions?: boolean;
         readonly includeCompletionsWithInsertText?: boolean;
+        readonly allowIncompleteCompletions?: boolean;
         readonly importModuleSpecifierPreference?: "shortest" | "project-relative" | "relative" | "non-relative";
         /** Determines whether we import `foo/index.ts` as "foo", "foo/index", or "foo/index.js" */
         readonly importModuleSpecifierEnding?: "auto" | "minimal" | "index" | "js";
@@ -3951,6 +3993,7 @@
         useCaseSensitiveFileNames: boolean;
         write(s: string): void;
         writeOutputIsTTY?(): boolean;
+        getWidthOfTerminal?(): number;
         readFile(path: string, encoding?: string): string | undefined;
         getFileSize?(path: string): number;
         writeFile(path: string, data: string, writeByteOrderMark?: boolean): void;
@@ -4018,6 +4061,7 @@
         reScanJsxAttributeValue(): SyntaxKind;
         reScanJsxToken(allowMultilineJsxText?: boolean): JsxTokenSyntaxKind;
         reScanLessThanToken(): SyntaxKind;
+        reScanHashToken(): SyntaxKind;
         reScanQuestionToken(): SyntaxKind;
         reScanInvalidIdentifier(): SyntaxKind;
         scanJsxToken(): JsxTokenSyntaxKind;
@@ -4236,7 +4280,7 @@
     /** Gets all JSDoc tags of a specified kind */
     function getAllJSDocTagsOfKind(node: Node, kind: SyntaxKind): readonly JSDocTag[];
     /** Gets the text of a jsdoc comment, flattening links to their text. */
-    function getTextOfJSDocComment(comment?: string | NodeArray<JSDocText | JSDocLink>): string | undefined;
+    function getTextOfJSDocComment(comment?: string | NodeArray<JSDocComment>): string | undefined;
     /**
      * Gets the effective type parameters. If the node was parsed in a
      * JavaScript file, gets the type parameters from the `@template` tag from JSDoc.
@@ -4311,6 +4355,7 @@
     function hasOnlyExpressionInitializer(node: Node): node is HasExpressionInitializer;
     function isObjectLiteralElement(node: Node): node is ObjectLiteralElement;
     function isStringLiteralLike(node: Node): node is StringLiteralLike;
+    function isJSDocLinkLike(node: Node): node is JSDocLink | JSDocLinkCode | JSDocLinkPlain;
 }
 declare namespace ts {
     const factory: NodeFactory;
@@ -4421,6 +4466,7 @@
     function isPropertyDeclaration(node: Node): node is PropertyDeclaration;
     function isMethodSignature(node: Node): node is MethodSignature;
     function isMethodDeclaration(node: Node): node is MethodDeclaration;
+    function isClassStaticBlockDeclaration(node: Node): node is ClassStaticBlockDeclaration;
     function isConstructorDeclaration(node: Node): node is ConstructorDeclaration;
     function isGetAccessorDeclaration(node: Node): node is GetAccessorDeclaration;
     function isSetAccessorDeclaration(node: Node): node is SetAccessorDeclaration;
@@ -4556,7 +4602,10 @@
     function isUnparsedSource(node: Node): node is UnparsedSource;
     function isJSDocTypeExpression(node: Node): node is JSDocTypeExpression;
     function isJSDocNameReference(node: Node): node is JSDocNameReference;
+    function isJSDocMemberName(node: Node): node is JSDocMemberName;
     function isJSDocLink(node: Node): node is JSDocLink;
+    function isJSDocLinkCode(node: Node): node is JSDocLinkCode;
+    function isJSDocLinkPlain(node: Node): node is JSDocLinkPlain;
     function isJSDocAllType(node: Node): node is JSDocAllType;
     function isJSDocUnknownType(node: Node): node is JSDocUnknownType;
     function isJSDocNullableType(node: Node): node is JSDocNullableType;
@@ -5478,6 +5527,11 @@
         PartialSemantic = 1,
         Syntactic = 2
     }
+    interface IncompleteCompletionsCache {
+        get(): CompletionInfo | undefined;
+        set(response: CompletionInfo): void;
+        clear(): void;
+    }
     interface LanguageServiceHost extends GetEffectiveTypeRootsHost {
         getCompilationSettings(): CompilerOptions;
         getNewLine?(): string;
@@ -5639,6 +5693,7 @@
         prepareCallHierarchy(fileName: string, position: number): CallHierarchyItem | CallHierarchyItem[] | undefined;
         provideCallHierarchyIncomingCalls(fileName: string, position: number): CallHierarchyIncomingCall[];
         provideCallHierarchyOutgoingCalls(fileName: string, position: number): CallHierarchyOutgoingCall[];
+        provideInlayHints(fileName: string, span: TextSpan, preferences: UserPreferences | undefined): InlayHint[];
         getOutliningSpans(fileName: string): OutliningSpan[];
         getTodoComments(fileName: string, descriptors: TodoCommentDescriptor[]): TodoComment[];
         getBraceMatchingAtPosition(fileName: string, position: number): TextSpan[];
@@ -5689,17 +5744,35 @@
         skipDestructiveCodeActions?: boolean;
     }
     type CompletionsTriggerCharacter = "." | '"' | "'" | "`" | "/" | "@" | "<" | "#" | " ";
+    enum CompletionTriggerKind {
+        /** Completion was triggered by typing an identifier, manual invocation (e.g Ctrl+Space) or via API. */
+        Invoked = 1,
+        /** Completion was triggered by a trigger character. */
+        TriggerCharacter = 2,
+        /** Completion was re-triggered as the current completion list is incomplete. */
+        TriggerForIncompleteCompletions = 3
+    }
     interface GetCompletionsAtPositionOptions extends UserPreferences {
         /**
          * If the editor is asking for completions because a certain character was typed
          * (as opposed to when the user explicitly requested them) this should be set.
          */
         triggerCharacter?: CompletionsTriggerCharacter;
+        triggerKind?: CompletionTriggerKind;
         /** @deprecated Use includeCompletionsForModuleExports */
         includeExternalModuleExports?: boolean;
         /** @deprecated Use includeCompletionsWithInsertText */
         includeInsertTextCompletions?: boolean;
     }
+    interface InlayHintsOptions extends UserPreferences {
+        readonly includeInlayParameterNameHints?: "none" | "literals" | "all";
+        readonly includeInlayParameterNameHintsWhenArgumentMatchesName?: boolean;
+        readonly includeInlayFunctionParameterTypeHints?: boolean;
+        readonly includeInlayVariableTypeHints?: boolean;
+        readonly includeInlayPropertyDeclarationTypeHints?: boolean;
+        readonly includeInlayFunctionLikeReturnTypeHints?: boolean;
+        readonly includeInlayEnumMemberValueHints?: boolean;
+    }
     type SignatureHelpTriggerCharacter = "," | "(" | "<";
     type SignatureHelpRetriggerCharacter = SignatureHelpTriggerCharacter | ")";
     interface SignatureHelpItemsOptions {
@@ -5805,6 +5878,18 @@
         to: CallHierarchyItem;
         fromSpans: TextSpan[];
     }
+    enum InlayHintKind {
+        Type = "Type",
+        Parameter = "Parameter",
+        Enum = "Enum"
+    }
+    interface InlayHint {
+        text: string;
+        position: number;
+        kind: InlayHintKind;
+        whitespaceBefore?: boolean;
+        whitespaceAfter?: boolean;
+    }
     interface TodoCommentDescriptor {
         text: string;
         priority: number;
@@ -6368,7 +6453,10 @@
          * interface Y { foo:number; }
          */
         memberVariableElement = "property",
-        /** class X { constructor() { } } */
+        /**
+         * class X { constructor() { } }
+         * class X { static { } }
+         */
         constructorImplementationElement = "constructor",
         /** interface Y { ():number; } */
         callSignatureElement = "call",
@@ -6470,6 +6558,14 @@
         jsxAttributeStringLiteralValue = 24,
         bigintLiteral = 25
     }
+    interface InlayHintsContext {
+        file: SourceFile;
+        program: Program;
+        cancellationToken: CancellationToken;
+        host: LanguageServiceHost;
+        span: TextSpan;
+        preferences: InlayHintsOptions;
+    }
 }
 declare namespace ts {
     /** The classifier is used for syntactic highlighting in editors via the TSServer */
@@ -7073,51 +7169,51 @@
     /** @deprecated Use `factory.createJSDocTypeExpression` or the factory supplied by your transformation context instead. */
     const createJSDocTypeExpression: (type: TypeNode) => JSDocTypeExpression;
     /** @deprecated Use `factory.createJSDocTypeTag` or the factory supplied by your transformation context instead. */
-    const createJSDocTypeTag: (tagName: Identifier | undefined, typeExpression: JSDocTypeExpression, comment?: string | NodeArray<JSDocText | JSDocLink> | undefined) => JSDocTypeTag;
+    const createJSDocTypeTag: (tagName: Identifier | undefined, typeExpression: JSDocTypeExpression, comment?: string | NodeArray<JSDocComment> | undefined) => JSDocTypeTag;
     /** @deprecated Use `factory.createJSDocReturnTag` or the factory supplied by your transformation context instead. */
-    const createJSDocReturnTag: (tagName: Identifier | undefined, typeExpression?: JSDocTypeExpression | undefined, comment?: string | NodeArray<JSDocText | JSDocLink> | undefined) => JSDocReturnTag;
+    const createJSDocReturnTag: (tagName: Identifier | undefined, typeExpression?: JSDocTypeExpression | undefined, comment?: string | NodeArray<JSDocComment> | undefined) => JSDocReturnTag;
     /** @deprecated Use `factory.createJSDocThisTag` or the factory supplied by your transformation context instead. */
-    const createJSDocThisTag: (tagName: Identifier | undefined, typeExpression: JSDocTypeExpression, comment?: string | NodeArray<JSDocText | JSDocLink> | undefined) => JSDocThisTag;
+    const createJSDocThisTag: (tagName: Identifier | undefined, typeExpression: JSDocTypeExpression, comment?: string | NodeArray<JSDocComment> | undefined) => JSDocThisTag;
     /** @deprecated Use `factory.createJSDocComment` or the factory supplied by your transformation context instead. */
-    const createJSDocComment: (comment?: string | NodeArray<JSDocText | JSDocLink> | undefined, tags?: readonly JSDocTag[] | undefined) => JSDoc;
+    const createJSDocComment: (comment?: string | NodeArray<JSDocComment> | undefined, tags?: readonly JSDocTag[] | undefined) => JSDoc;
     /** @deprecated Use `factory.createJSDocParameterTag` or the factory supplied by your transformation context instead. */
-    const createJSDocParameterTag: (tagName: Identifier | undefined, name: EntityName, isBracketed: boolean, typeExpression?: JSDocTypeExpression | undefined, isNameFirst?: boolean | undefined, comment?: string | NodeArray<JSDocText | JSDocLink> | undefined) => JSDocParameterTag;
+    const createJSDocParameterTag: (tagName: Identifier | undefined, name: EntityName, isBracketed: boolean, typeExpression?: JSDocTypeExpression | undefined, isNameFirst?: boolean | undefined, comment?: string | NodeArray<JSDocComment> | undefined) => JSDocParameterTag;
     /** @deprecated Use `factory.createJSDocClassTag` or the factory supplied by your transformation context instead. */
-    const createJSDocClassTag: (tagName: Identifier | undefined, comment?: string | NodeArray<JSDocText | JSDocLink> | undefined) => JSDocClassTag;
+    const createJSDocClassTag: (tagName: Identifier | undefined, comment?: string | NodeArray<JSDocComment> | undefined) => JSDocClassTag;
     /** @deprecated Use `factory.createJSDocAugmentsTag` or the factory supplied by your transformation context instead. */
     const createJSDocAugmentsTag: (tagName: Identifier | undefined, className: ExpressionWithTypeArguments & {
         readonly expression: Identifier | PropertyAccessEntityNameExpression;
-    }, comment?: string | NodeArray<JSDocText | JSDocLink> | undefined) => JSDocAugmentsTag;
+    }, comment?: string | NodeArray<JSDocComment> | undefined) => JSDocAugmentsTag;
     /** @deprecated Use `factory.createJSDocEnumTag` or the factory supplied by your transformation context instead. */
-    const createJSDocEnumTag: (tagName: Identifier | undefined, typeExpression: JSDocTypeExpression, comment?: string | NodeArray<JSDocText | JSDocLink> | undefined) => JSDocEnumTag;
+    const createJSDocEnumTag: (tagName: Identifier | undefined, typeExpression: JSDocTypeExpression, comment?: string | NodeArray<JSDocComment> | undefined) => JSDocEnumTag;
     /** @deprecated Use `factory.createJSDocTemplateTag` or the factory supplied by your transformation context instead. */
-    const createJSDocTemplateTag: (tagName: Identifier | undefined, constraint: JSDocTypeExpression | undefined, typeParameters: readonly TypeParameterDeclaration[], comment?: string | NodeArray<JSDocText | JSDocLink> | undefined) => JSDocTemplateTag;
+    const createJSDocTemplateTag: (tagName: Identifier | undefined, constraint: JSDocTypeExpression | undefined, typeParameters: readonly TypeParameterDeclaration[], comment?: string | NodeArray<JSDocComment> | undefined) => JSDocTemplateTag;
     /** @deprecated Use `factory.createJSDocTypedefTag` or the factory supplied by your transformation context instead. */
-    const createJSDocTypedefTag: (tagName: Identifier | undefined, typeExpression?: JSDocTypeLiteral | JSDocTypeExpression | undefined, fullName?: Identifier | JSDocNamespaceDeclaration | undefined, comment?: string | NodeArray<JSDocText | JSDocLink> | undefined) => JSDocTypedefTag;
+    const createJSDocTypedefTag: (tagName: Identifier | undefined, typeExpression?: JSDocTypeLiteral | JSDocTypeExpression | undefined, fullName?: Identifier | JSDocNamespaceDeclaration | undefined, comment?: string | NodeArray<JSDocComment> | undefined) => JSDocTypedefTag;
     /** @deprecated Use `factory.createJSDocCallbackTag` or the factory supplied by your transformation context instead. */
-    const createJSDocCallbackTag: (tagName: Identifier | undefined, typeExpression: JSDocSignature, fullName?: Identifier | JSDocNamespaceDeclaration | undefined, comment?: string | NodeArray<JSDocText | JSDocLink> | undefined) => JSDocCallbackTag;
+    const createJSDocCallbackTag: (tagName: Identifier | undefined, typeExpression: JSDocSignature, fullName?: Identifier | JSDocNamespaceDeclaration | undefined, comment?: string | NodeArray<JSDocComment> | undefined) => JSDocCallbackTag;
     /** @deprecated Use `factory.createJSDocSignature` or the factory supplied by your transformation context instead. */
     const createJSDocSignature: (typeParameters: readonly JSDocTemplateTag[] | undefined, parameters: readonly JSDocParameterTag[], type?: JSDocReturnTag | undefined) => JSDocSignature;
     /** @deprecated Use `factory.createJSDocPropertyTag` or the factory supplied by your transformation context instead. */
-    const createJSDocPropertyTag: (tagName: Identifier | undefined, name: EntityName, isBracketed: boolean, typeExpression?: JSDocTypeExpression | undefined, isNameFirst?: boolean | undefined, comment?: string | NodeArray<JSDocText | JSDocLink> | undefined) => JSDocPropertyTag;
+    const createJSDocPropertyTag: (tagName: Identifier | undefined, name: EntityName, isBracketed: boolean, typeExpression?: JSDocTypeExpression | undefined, isNameFirst?: boolean | undefined, comment?: string | NodeArray<JSDocComment> | undefined) => JSDocPropertyTag;
     /** @deprecated Use `factory.createJSDocTypeLiteral` or the factory supplied by your transformation context instead. */
     const createJSDocTypeLiteral: (jsDocPropertyTags?: readonly JSDocPropertyLikeTag[] | undefined, isArrayType?: boolean | undefined) => JSDocTypeLiteral;
     /** @deprecated Use `factory.createJSDocImplementsTag` or the factory supplied by your transformation context instead. */
     const createJSDocImplementsTag: (tagName: Identifier | undefined, className: ExpressionWithTypeArguments & {
         readonly expression: Identifier | PropertyAccessEntityNameExpression;
-    }, comment?: string | NodeArray<JSDocText | JSDocLink> | undefined) => JSDocImplementsTag;
+    }, comment?: string | NodeArray<JSDocComment> | undefined) => JSDocImplementsTag;
     /** @deprecated Use `factory.createJSDocAuthorTag` or the factory supplied by your transformation context instead. */
-    const createJSDocAuthorTag: (tagName: Identifier | undefined, comment?: string | NodeArray<JSDocText | JSDocLink> | undefined) => JSDocAuthorTag;
+    const createJSDocAuthorTag: (tagName: Identifier | undefined, comment?: string | NodeArray<JSDocComment> | undefined) => JSDocAuthorTag;
     /** @deprecated Use `factory.createJSDocPublicTag` or the factory supplied by your transformation context instead. */
-    const createJSDocPublicTag: (tagName: Identifier | undefined, comment?: string | NodeArray<JSDocText | JSDocLink> | undefined) => JSDocPublicTag;
+    const createJSDocPublicTag: (tagName: Identifier | undefined, comment?: string | NodeArray<JSDocComment> | undefined) => JSDocPublicTag;
     /** @deprecated Use `factory.createJSDocPrivateTag` or the factory supplied by your transformation context instead. */
-    const createJSDocPrivateTag: (tagName: Identifier | undefined, comment?: string | NodeArray<JSDocText | JSDocLink> | undefined) => JSDocPrivateTag;
+    const createJSDocPrivateTag: (tagName: Identifier | undefined, comment?: string | NodeArray<JSDocComment> | undefined) => JSDocPrivateTag;
     /** @deprecated Use `factory.createJSDocProtectedTag` or the factory supplied by your transformation context instead. */
-    const createJSDocProtectedTag: (tagName: Identifier | undefined, comment?: string | NodeArray<JSDocText | JSDocLink> | undefined) => JSDocProtectedTag;
+    const createJSDocProtectedTag: (tagName: Identifier | undefined, comment?: string | NodeArray<JSDocComment> | undefined) => JSDocProtectedTag;
     /** @deprecated Use `factory.createJSDocReadonlyTag` or the factory supplied by your transformation context instead. */
-    const createJSDocReadonlyTag: (tagName: Identifier | undefined, comment?: string | NodeArray<JSDocText | JSDocLink> | undefined) => JSDocReadonlyTag;
+    const createJSDocReadonlyTag: (tagName: Identifier | undefined, comment?: string | NodeArray<JSDocComment> | undefined) => JSDocReadonlyTag;
     /** @deprecated Use `factory.createJSDocUnknownTag` or the factory supplied by your transformation context instead. */
-    const createJSDocTag: (tagName: Identifier, comment?: string | NodeArray<JSDocText | JSDocLink> | undefined) => JSDocUnknownTag;
+    const createJSDocTag: (tagName: Identifier, comment?: string | NodeArray<JSDocComment> | undefined) => JSDocUnknownTag;
     /** @deprecated Use `factory.createJsxElement` or the factory supplied by your transformation context instead. */
     const createJsxElement: (openingElement: JsxOpeningElement, children: readonly JsxChild[], closingElement: JsxClosingElement) => JsxElement;
     /** @deprecated Use `factory.updateJsxElement` or the factory supplied by your transformation context instead. */
diff --git a/node_modules/typescript/lib/typescriptServices.js b/node_modules/typescript/lib/typescriptServices.js
index 668927c..20a6fc5 100644
--- a/node_modules/typescript/lib/typescriptServices.js
+++ b/node_modules/typescript/lib/typescriptServices.js
@@ -14,10 +14,14 @@
 ***************************************************************************** */
 
 "use strict";
-var __spreadArray = (this && this.__spreadArray) || function (to, from) {
-    for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)
-        to[j] = from[i];
-    return to;
+var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
+    if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
+        if (ar || !(i in from)) {
+            if (!ar) ar = Array.prototype.slice.call(from, 0, i);
+            ar[i] = from[i];
+        }
+    }
+    return to.concat(ar || Array.prototype.slice.call(from));
 };
 var __assign = (this && this.__assign) || function () {
     __assign = Object.assign || function(t) {
@@ -286,11 +290,11 @@
 (function (ts) {
     // WARNING: The script `configurePrerelease.ts` uses a regexp to parse out these values.
     // If changing the text in this section, be sure to test `configurePrerelease` too.
-    ts.versionMajorMinor = "4.3";
+    ts.versionMajorMinor = "4.4";
     // The following is baselined as a literal template type without intervention
     /** The version of the TypeScript compiler release */
     // eslint-disable-next-line @typescript-eslint/no-inferrable-types
-    ts.version = "4.3.5";
+    ts.version = "4.4.2";
     /* @internal */
     var Comparison;
     (function (Comparison) {
@@ -975,7 +979,7 @@
             return array1;
         if (!some(array1))
             return array2;
-        return __spreadArray(__spreadArray([], array1), array2);
+        return __spreadArray(__spreadArray([], array1, true), array2, true);
     }
     ts.concatenate = concatenate;
     function selectIndex(_, i) {
@@ -2133,10 +2137,46 @@
      * Takes a string like "jquery-min.4.2.3" and returns "jquery"
      */
     function removeMinAndVersionNumbers(fileName) {
-        // Match a "." or "-" followed by a version number or 'min' at the end of the name
-        var trailingMinOrVersion = /[.-]((min)|(\d+(\.\d+)*))$/;
-        // The "min" or version may both be present, in either order, so try applying the above twice.
-        return fileName.replace(trailingMinOrVersion, "").replace(trailingMinOrVersion, "");
+        // We used to use the regex /[.-]((min)|(\d+(\.\d+)*))$/ and would just .replace it twice.
+        // Unfortunately, that regex has O(n^2) performance because v8 doesn't match from the end of the string.
+        // Instead, we now essentially scan the filename (backwards) ourselves.
+        var end = fileName.length;
+        for (var pos = end - 1; pos > 0; pos--) {
+            var ch = fileName.charCodeAt(pos);
+            if (ch >= 48 /* _0 */ && ch <= 57 /* _9 */) {
+                // Match a \d+ segment
+                do {
+                    --pos;
+                    ch = fileName.charCodeAt(pos);
+                } while (pos > 0 && ch >= 48 /* _0 */ && ch <= 57 /* _9 */);
+            }
+            else if (pos > 4 && (ch === 110 /* n */ || ch === 78 /* N */)) {
+                // Looking for "min" or "min"
+                // Already matched the 'n'
+                --pos;
+                ch = fileName.charCodeAt(pos);
+                if (ch !== 105 /* i */ && ch !== 73 /* I */) {
+                    break;
+                }
+                --pos;
+                ch = fileName.charCodeAt(pos);
+                if (ch !== 109 /* m */ && ch !== 77 /* M */) {
+                    break;
+                }
+                --pos;
+                ch = fileName.charCodeAt(pos);
+            }
+            else {
+                // This character is not part of either suffix pattern
+                break;
+            }
+            if (ch !== 45 /* minus */ && ch !== 46 /* dot */) {
+                break;
+            }
+            end = pos;
+        }
+        // end might be fileName.length, in which case this should internally no-op
+        return end === fileName.length ? fileName : fileName.slice(0, end);
     }
     ts.removeMinAndVersionNumbers = removeMinAndVersionNumbers;
     /** Remove an item from an array, moving everything to its right one space left. */
@@ -2377,6 +2417,33 @@
         return array.slice(0, index);
     }
     ts.takeWhile = takeWhile;
+    /**
+     * Removes the leading and trailing white space and line terminator characters from a string.
+     */
+    ts.trimString = !!String.prototype.trim ? (function (s) { return s.trim(); }) : function (s) { return ts.trimStringEnd(ts.trimStringStart(s)); };
+    /**
+     * Returns a copy with trailing whitespace removed.
+     */
+    ts.trimStringEnd = !!String.prototype.trimEnd ? (function (s) { return s.trimEnd(); }) : trimEndImpl;
+    /**
+     * Returns a copy with leading whitespace removed.
+     */
+    ts.trimStringStart = !!String.prototype.trimStart ? (function (s) { return s.trimStart(); }) : function (s) { return s.replace(/^\s+/g, ""); };
+    /**
+     * https://jsbench.me/gjkoxld4au/1
+     * The simple regex for this, /\s+$/g is O(n^2) in v8.
+     * The native .trimEnd method is by far best, but since that's technically ES2019,
+     * we provide a (still much faster than the simple regex) fallback.
+     */
+    function trimEndImpl(s) {
+        var end = s.length - 1;
+        while (end >= 0) {
+            if (!ts.isWhiteSpaceLike(s.charCodeAt(end)))
+                break;
+            end--;
+        }
+        return s.slice(0, end + 1);
+    }
 })(ts || (ts = {}));
 /* @internal */
 var ts;
@@ -2566,7 +2633,7 @@
         Debug.assertEachNode = assertEachNode;
         function assertNode(node, test, message, stackCrawlMark) {
             if (shouldAssertFunction(1 /* Normal */, "assertNode")) {
-                assert(node !== undefined && (test === undefined || test(node)), message || "Unexpected node.", function () { return "Node " + formatSyntaxKind(node.kind) + " did not pass test '" + getFunctionName(test) + "'."; }, stackCrawlMark || assertNode);
+                assert(node !== undefined && (test === undefined || test(node)), message || "Unexpected node.", function () { return "Node " + formatSyntaxKind(node === null || node === void 0 ? void 0 : node.kind) + " did not pass test '" + getFunctionName(test) + "'."; }, stackCrawlMark || assertNode);
             }
         }
         Debug.assertNode = assertNode;
@@ -2578,13 +2645,13 @@
         Debug.assertNotNode = assertNotNode;
         function assertOptionalNode(node, test, message, stackCrawlMark) {
             if (shouldAssertFunction(1 /* Normal */, "assertOptionalNode")) {
-                assert(test === undefined || node === undefined || test(node), message || "Unexpected node.", function () { return "Node " + formatSyntaxKind(node.kind) + " did not pass test '" + getFunctionName(test) + "'."; }, stackCrawlMark || assertOptionalNode);
+                assert(test === undefined || node === undefined || test(node), message || "Unexpected node.", function () { return "Node " + formatSyntaxKind(node === null || node === void 0 ? void 0 : node.kind) + " did not pass test '" + getFunctionName(test) + "'."; }, stackCrawlMark || assertOptionalNode);
             }
         }
         Debug.assertOptionalNode = assertOptionalNode;
         function assertOptionalToken(node, kind, message, stackCrawlMark) {
             if (shouldAssertFunction(1 /* Normal */, "assertOptionalToken")) {
-                assert(kind === undefined || node === undefined || node.kind === kind, message || "Unexpected node.", function () { return "Node " + formatSyntaxKind(node.kind) + " was not a '" + formatSyntaxKind(kind) + "' token."; }, stackCrawlMark || assertOptionalToken);
+                assert(kind === undefined || node === undefined || node.kind === kind, message || "Unexpected node.", function () { return "Node " + formatSyntaxKind(node === null || node === void 0 ? void 0 : node.kind) + " was not a '" + formatSyntaxKind(kind) + "' token."; }, stackCrawlMark || assertOptionalToken);
             }
         }
         Debug.assertOptionalToken = assertOptionalToken;
@@ -2773,6 +2840,9 @@
                             // An `Array` with extra properties is rendered as `[A, B, prop1: 1, prop2: 2]`. Most of
                             // these aren't immediately useful so we trim off the `prop1: ..., prop2: ...` part from the
                             // formatted string.
+                            // This regex can trigger slow backtracking because of overlapping potential captures.
+                            // We don't care, this is debug code that's only enabled with a debugger attached -
+                            // we're just taking note of it for anyone checking regex performance in the future.
                             defaultValue = String(defaultValue).replace(/(?:,[\s\w\d_]+:[^,]+)+\]$/, "]");
                             return "NodeArray " + defaultValue;
                         }
@@ -3221,7 +3291,7 @@
     // range-set    ::= range ( logical-or range ) *
     // range        ::= hyphen | simple ( ' ' simple ) * | ''
     // logical-or   ::= ( ' ' ) * '||' ( ' ' ) *
-    var logicalOrRegExp = /\s*\|\|\s*/g;
+    var logicalOrRegExp = /\|\|/g;
     var whitespaceRegExp = /\s+/g;
     // https://github.com/npm/node-semver#range-grammar
     //
@@ -3244,14 +3314,15 @@
     // primitive    ::= ( '<' | '>' | '>=' | '<=' | '=' ) partial
     // tilde        ::= '~' partial
     // caret        ::= '^' partial
-    var rangeRegExp = /^\s*(~|\^|<|<=|>|>=|=)?\s*([a-z0-9-+.*]+)$/i;
+    var rangeRegExp = /^(~|\^|<|<=|>|>=|=)?\s*([a-z0-9-+.*]+)$/i;
     function parseRange(text) {
         var alternatives = [];
-        for (var _i = 0, _a = text.trim().split(logicalOrRegExp); _i < _a.length; _i++) {
+        for (var _i = 0, _a = ts.trimString(text).split(logicalOrRegExp); _i < _a.length; _i++) {
             var range = _a[_i];
             if (!range)
                 continue;
             var comparators = [];
+            range = ts.trimString(range);
             var match = hyphenRegExp.exec(range);
             if (match) {
                 if (!parseHyphen(match[1], match[2], comparators))
@@ -3260,7 +3331,7 @@
             else {
                 for (var _b = 0, _c = range.split(whitespaceRegExp); _b < _c.length; _b++) {
                     var simple = _c[_b];
-                    var match_1 = rangeRegExp.exec(simple);
+                    var match_1 = rangeRegExp.exec(ts.trimString(simple));
                     if (!match_1 || !parseComparator(match_1[1], match_1[2], comparators))
                         return undefined;
                 }
@@ -4007,332 +4078,338 @@
         SyntaxKind[SyntaxKind["QuestionQuestionToken"] = 60] = "QuestionQuestionToken";
         /** Only the JSDoc scanner produces BacktickToken. The normal scanner produces NoSubstitutionTemplateLiteral and related kinds. */
         SyntaxKind[SyntaxKind["BacktickToken"] = 61] = "BacktickToken";
+        /** Only the JSDoc scanner produces HashToken. The normal scanner produces PrivateIdentifier. */
+        SyntaxKind[SyntaxKind["HashToken"] = 62] = "HashToken";
         // Assignments
-        SyntaxKind[SyntaxKind["EqualsToken"] = 62] = "EqualsToken";
-        SyntaxKind[SyntaxKind["PlusEqualsToken"] = 63] = "PlusEqualsToken";
-        SyntaxKind[SyntaxKind["MinusEqualsToken"] = 64] = "MinusEqualsToken";
-        SyntaxKind[SyntaxKind["AsteriskEqualsToken"] = 65] = "AsteriskEqualsToken";
-        SyntaxKind[SyntaxKind["AsteriskAsteriskEqualsToken"] = 66] = "AsteriskAsteriskEqualsToken";
-        SyntaxKind[SyntaxKind["SlashEqualsToken"] = 67] = "SlashEqualsToken";
-        SyntaxKind[SyntaxKind["PercentEqualsToken"] = 68] = "PercentEqualsToken";
-        SyntaxKind[SyntaxKind["LessThanLessThanEqualsToken"] = 69] = "LessThanLessThanEqualsToken";
-        SyntaxKind[SyntaxKind["GreaterThanGreaterThanEqualsToken"] = 70] = "GreaterThanGreaterThanEqualsToken";
-        SyntaxKind[SyntaxKind["GreaterThanGreaterThanGreaterThanEqualsToken"] = 71] = "GreaterThanGreaterThanGreaterThanEqualsToken";
-        SyntaxKind[SyntaxKind["AmpersandEqualsToken"] = 72] = "AmpersandEqualsToken";
-        SyntaxKind[SyntaxKind["BarEqualsToken"] = 73] = "BarEqualsToken";
-        SyntaxKind[SyntaxKind["BarBarEqualsToken"] = 74] = "BarBarEqualsToken";
-        SyntaxKind[SyntaxKind["AmpersandAmpersandEqualsToken"] = 75] = "AmpersandAmpersandEqualsToken";
-        SyntaxKind[SyntaxKind["QuestionQuestionEqualsToken"] = 76] = "QuestionQuestionEqualsToken";
-        SyntaxKind[SyntaxKind["CaretEqualsToken"] = 77] = "CaretEqualsToken";
+        SyntaxKind[SyntaxKind["EqualsToken"] = 63] = "EqualsToken";
+        SyntaxKind[SyntaxKind["PlusEqualsToken"] = 64] = "PlusEqualsToken";
+        SyntaxKind[SyntaxKind["MinusEqualsToken"] = 65] = "MinusEqualsToken";
+        SyntaxKind[SyntaxKind["AsteriskEqualsToken"] = 66] = "AsteriskEqualsToken";
+        SyntaxKind[SyntaxKind["AsteriskAsteriskEqualsToken"] = 67] = "AsteriskAsteriskEqualsToken";
+        SyntaxKind[SyntaxKind["SlashEqualsToken"] = 68] = "SlashEqualsToken";
+        SyntaxKind[SyntaxKind["PercentEqualsToken"] = 69] = "PercentEqualsToken";
+        SyntaxKind[SyntaxKind["LessThanLessThanEqualsToken"] = 70] = "LessThanLessThanEqualsToken";
+        SyntaxKind[SyntaxKind["GreaterThanGreaterThanEqualsToken"] = 71] = "GreaterThanGreaterThanEqualsToken";
+        SyntaxKind[SyntaxKind["GreaterThanGreaterThanGreaterThanEqualsToken"] = 72] = "GreaterThanGreaterThanGreaterThanEqualsToken";
+        SyntaxKind[SyntaxKind["AmpersandEqualsToken"] = 73] = "AmpersandEqualsToken";
+        SyntaxKind[SyntaxKind["BarEqualsToken"] = 74] = "BarEqualsToken";
+        SyntaxKind[SyntaxKind["BarBarEqualsToken"] = 75] = "BarBarEqualsToken";
+        SyntaxKind[SyntaxKind["AmpersandAmpersandEqualsToken"] = 76] = "AmpersandAmpersandEqualsToken";
+        SyntaxKind[SyntaxKind["QuestionQuestionEqualsToken"] = 77] = "QuestionQuestionEqualsToken";
+        SyntaxKind[SyntaxKind["CaretEqualsToken"] = 78] = "CaretEqualsToken";
         // Identifiers and PrivateIdentifiers
-        SyntaxKind[SyntaxKind["Identifier"] = 78] = "Identifier";
-        SyntaxKind[SyntaxKind["PrivateIdentifier"] = 79] = "PrivateIdentifier";
+        SyntaxKind[SyntaxKind["Identifier"] = 79] = "Identifier";
+        SyntaxKind[SyntaxKind["PrivateIdentifier"] = 80] = "PrivateIdentifier";
         // Reserved words
-        SyntaxKind[SyntaxKind["BreakKeyword"] = 80] = "BreakKeyword";
-        SyntaxKind[SyntaxKind["CaseKeyword"] = 81] = "CaseKeyword";
-        SyntaxKind[SyntaxKind["CatchKeyword"] = 82] = "CatchKeyword";
-        SyntaxKind[SyntaxKind["ClassKeyword"] = 83] = "ClassKeyword";
-        SyntaxKind[SyntaxKind["ConstKeyword"] = 84] = "ConstKeyword";
-        SyntaxKind[SyntaxKind["ContinueKeyword"] = 85] = "ContinueKeyword";
-        SyntaxKind[SyntaxKind["DebuggerKeyword"] = 86] = "DebuggerKeyword";
-        SyntaxKind[SyntaxKind["DefaultKeyword"] = 87] = "DefaultKeyword";
-        SyntaxKind[SyntaxKind["DeleteKeyword"] = 88] = "DeleteKeyword";
-        SyntaxKind[SyntaxKind["DoKeyword"] = 89] = "DoKeyword";
-        SyntaxKind[SyntaxKind["ElseKeyword"] = 90] = "ElseKeyword";
-        SyntaxKind[SyntaxKind["EnumKeyword"] = 91] = "EnumKeyword";
-        SyntaxKind[SyntaxKind["ExportKeyword"] = 92] = "ExportKeyword";
-        SyntaxKind[SyntaxKind["ExtendsKeyword"] = 93] = "ExtendsKeyword";
-        SyntaxKind[SyntaxKind["FalseKeyword"] = 94] = "FalseKeyword";
-        SyntaxKind[SyntaxKind["FinallyKeyword"] = 95] = "FinallyKeyword";
-        SyntaxKind[SyntaxKind["ForKeyword"] = 96] = "ForKeyword";
-        SyntaxKind[SyntaxKind["FunctionKeyword"] = 97] = "FunctionKeyword";
-        SyntaxKind[SyntaxKind["IfKeyword"] = 98] = "IfKeyword";
-        SyntaxKind[SyntaxKind["ImportKeyword"] = 99] = "ImportKeyword";
-        SyntaxKind[SyntaxKind["InKeyword"] = 100] = "InKeyword";
-        SyntaxKind[SyntaxKind["InstanceOfKeyword"] = 101] = "InstanceOfKeyword";
-        SyntaxKind[SyntaxKind["NewKeyword"] = 102] = "NewKeyword";
-        SyntaxKind[SyntaxKind["NullKeyword"] = 103] = "NullKeyword";
-        SyntaxKind[SyntaxKind["ReturnKeyword"] = 104] = "ReturnKeyword";
-        SyntaxKind[SyntaxKind["SuperKeyword"] = 105] = "SuperKeyword";
-        SyntaxKind[SyntaxKind["SwitchKeyword"] = 106] = "SwitchKeyword";
-        SyntaxKind[SyntaxKind["ThisKeyword"] = 107] = "ThisKeyword";
-        SyntaxKind[SyntaxKind["ThrowKeyword"] = 108] = "ThrowKeyword";
-        SyntaxKind[SyntaxKind["TrueKeyword"] = 109] = "TrueKeyword";
-        SyntaxKind[SyntaxKind["TryKeyword"] = 110] = "TryKeyword";
-        SyntaxKind[SyntaxKind["TypeOfKeyword"] = 111] = "TypeOfKeyword";
-        SyntaxKind[SyntaxKind["VarKeyword"] = 112] = "VarKeyword";
-        SyntaxKind[SyntaxKind["VoidKeyword"] = 113] = "VoidKeyword";
-        SyntaxKind[SyntaxKind["WhileKeyword"] = 114] = "WhileKeyword";
-        SyntaxKind[SyntaxKind["WithKeyword"] = 115] = "WithKeyword";
+        SyntaxKind[SyntaxKind["BreakKeyword"] = 81] = "BreakKeyword";
+        SyntaxKind[SyntaxKind["CaseKeyword"] = 82] = "CaseKeyword";
+        SyntaxKind[SyntaxKind["CatchKeyword"] = 83] = "CatchKeyword";
+        SyntaxKind[SyntaxKind["ClassKeyword"] = 84] = "ClassKeyword";
+        SyntaxKind[SyntaxKind["ConstKeyword"] = 85] = "ConstKeyword";
+        SyntaxKind[SyntaxKind["ContinueKeyword"] = 86] = "ContinueKeyword";
+        SyntaxKind[SyntaxKind["DebuggerKeyword"] = 87] = "DebuggerKeyword";
+        SyntaxKind[SyntaxKind["DefaultKeyword"] = 88] = "DefaultKeyword";
+        SyntaxKind[SyntaxKind["DeleteKeyword"] = 89] = "DeleteKeyword";
+        SyntaxKind[SyntaxKind["DoKeyword"] = 90] = "DoKeyword";
+        SyntaxKind[SyntaxKind["ElseKeyword"] = 91] = "ElseKeyword";
+        SyntaxKind[SyntaxKind["EnumKeyword"] = 92] = "EnumKeyword";
+        SyntaxKind[SyntaxKind["ExportKeyword"] = 93] = "ExportKeyword";
+        SyntaxKind[SyntaxKind["ExtendsKeyword"] = 94] = "ExtendsKeyword";
+        SyntaxKind[SyntaxKind["FalseKeyword"] = 95] = "FalseKeyword";
+        SyntaxKind[SyntaxKind["FinallyKeyword"] = 96] = "FinallyKeyword";
+        SyntaxKind[SyntaxKind["ForKeyword"] = 97] = "ForKeyword";
+        SyntaxKind[SyntaxKind["FunctionKeyword"] = 98] = "FunctionKeyword";
+        SyntaxKind[SyntaxKind["IfKeyword"] = 99] = "IfKeyword";
+        SyntaxKind[SyntaxKind["ImportKeyword"] = 100] = "ImportKeyword";
+        SyntaxKind[SyntaxKind["InKeyword"] = 101] = "InKeyword";
+        SyntaxKind[SyntaxKind["InstanceOfKeyword"] = 102] = "InstanceOfKeyword";
+        SyntaxKind[SyntaxKind["NewKeyword"] = 103] = "NewKeyword";
+        SyntaxKind[SyntaxKind["NullKeyword"] = 104] = "NullKeyword";
+        SyntaxKind[SyntaxKind["ReturnKeyword"] = 105] = "ReturnKeyword";
+        SyntaxKind[SyntaxKind["SuperKeyword"] = 106] = "SuperKeyword";
+        SyntaxKind[SyntaxKind["SwitchKeyword"] = 107] = "SwitchKeyword";
+        SyntaxKind[SyntaxKind["ThisKeyword"] = 108] = "ThisKeyword";
+        SyntaxKind[SyntaxKind["ThrowKeyword"] = 109] = "ThrowKeyword";
+        SyntaxKind[SyntaxKind["TrueKeyword"] = 110] = "TrueKeyword";
+        SyntaxKind[SyntaxKind["TryKeyword"] = 111] = "TryKeyword";
+        SyntaxKind[SyntaxKind["TypeOfKeyword"] = 112] = "TypeOfKeyword";
+        SyntaxKind[SyntaxKind["VarKeyword"] = 113] = "VarKeyword";
+        SyntaxKind[SyntaxKind["VoidKeyword"] = 114] = "VoidKeyword";
+        SyntaxKind[SyntaxKind["WhileKeyword"] = 115] = "WhileKeyword";
+        SyntaxKind[SyntaxKind["WithKeyword"] = 116] = "WithKeyword";
         // Strict mode reserved words
-        SyntaxKind[SyntaxKind["ImplementsKeyword"] = 116] = "ImplementsKeyword";
-        SyntaxKind[SyntaxKind["InterfaceKeyword"] = 117] = "InterfaceKeyword";
-        SyntaxKind[SyntaxKind["LetKeyword"] = 118] = "LetKeyword";
-        SyntaxKind[SyntaxKind["PackageKeyword"] = 119] = "PackageKeyword";
-        SyntaxKind[SyntaxKind["PrivateKeyword"] = 120] = "PrivateKeyword";
-        SyntaxKind[SyntaxKind["ProtectedKeyword"] = 121] = "ProtectedKeyword";
-        SyntaxKind[SyntaxKind["PublicKeyword"] = 122] = "PublicKeyword";
-        SyntaxKind[SyntaxKind["StaticKeyword"] = 123] = "StaticKeyword";
-        SyntaxKind[SyntaxKind["YieldKeyword"] = 124] = "YieldKeyword";
+        SyntaxKind[SyntaxKind["ImplementsKeyword"] = 117] = "ImplementsKeyword";
+        SyntaxKind[SyntaxKind["InterfaceKeyword"] = 118] = "InterfaceKeyword";
+        SyntaxKind[SyntaxKind["LetKeyword"] = 119] = "LetKeyword";
+        SyntaxKind[SyntaxKind["PackageKeyword"] = 120] = "PackageKeyword";
+        SyntaxKind[SyntaxKind["PrivateKeyword"] = 121] = "PrivateKeyword";
+        SyntaxKind[SyntaxKind["ProtectedKeyword"] = 122] = "ProtectedKeyword";
+        SyntaxKind[SyntaxKind["PublicKeyword"] = 123] = "PublicKeyword";
+        SyntaxKind[SyntaxKind["StaticKeyword"] = 124] = "StaticKeyword";
+        SyntaxKind[SyntaxKind["YieldKeyword"] = 125] = "YieldKeyword";
         // Contextual keywords
-        SyntaxKind[SyntaxKind["AbstractKeyword"] = 125] = "AbstractKeyword";
-        SyntaxKind[SyntaxKind["AsKeyword"] = 126] = "AsKeyword";
-        SyntaxKind[SyntaxKind["AssertsKeyword"] = 127] = "AssertsKeyword";
-        SyntaxKind[SyntaxKind["AnyKeyword"] = 128] = "AnyKeyword";
-        SyntaxKind[SyntaxKind["AsyncKeyword"] = 129] = "AsyncKeyword";
-        SyntaxKind[SyntaxKind["AwaitKeyword"] = 130] = "AwaitKeyword";
-        SyntaxKind[SyntaxKind["BooleanKeyword"] = 131] = "BooleanKeyword";
-        SyntaxKind[SyntaxKind["ConstructorKeyword"] = 132] = "ConstructorKeyword";
-        SyntaxKind[SyntaxKind["DeclareKeyword"] = 133] = "DeclareKeyword";
-        SyntaxKind[SyntaxKind["GetKeyword"] = 134] = "GetKeyword";
-        SyntaxKind[SyntaxKind["InferKeyword"] = 135] = "InferKeyword";
-        SyntaxKind[SyntaxKind["IntrinsicKeyword"] = 136] = "IntrinsicKeyword";
-        SyntaxKind[SyntaxKind["IsKeyword"] = 137] = "IsKeyword";
-        SyntaxKind[SyntaxKind["KeyOfKeyword"] = 138] = "KeyOfKeyword";
-        SyntaxKind[SyntaxKind["ModuleKeyword"] = 139] = "ModuleKeyword";
-        SyntaxKind[SyntaxKind["NamespaceKeyword"] = 140] = "NamespaceKeyword";
-        SyntaxKind[SyntaxKind["NeverKeyword"] = 141] = "NeverKeyword";
-        SyntaxKind[SyntaxKind["ReadonlyKeyword"] = 142] = "ReadonlyKeyword";
-        SyntaxKind[SyntaxKind["RequireKeyword"] = 143] = "RequireKeyword";
-        SyntaxKind[SyntaxKind["NumberKeyword"] = 144] = "NumberKeyword";
-        SyntaxKind[SyntaxKind["ObjectKeyword"] = 145] = "ObjectKeyword";
-        SyntaxKind[SyntaxKind["SetKeyword"] = 146] = "SetKeyword";
-        SyntaxKind[SyntaxKind["StringKeyword"] = 147] = "StringKeyword";
-        SyntaxKind[SyntaxKind["SymbolKeyword"] = 148] = "SymbolKeyword";
-        SyntaxKind[SyntaxKind["TypeKeyword"] = 149] = "TypeKeyword";
-        SyntaxKind[SyntaxKind["UndefinedKeyword"] = 150] = "UndefinedKeyword";
-        SyntaxKind[SyntaxKind["UniqueKeyword"] = 151] = "UniqueKeyword";
-        SyntaxKind[SyntaxKind["UnknownKeyword"] = 152] = "UnknownKeyword";
-        SyntaxKind[SyntaxKind["FromKeyword"] = 153] = "FromKeyword";
-        SyntaxKind[SyntaxKind["GlobalKeyword"] = 154] = "GlobalKeyword";
-        SyntaxKind[SyntaxKind["BigIntKeyword"] = 155] = "BigIntKeyword";
-        SyntaxKind[SyntaxKind["OverrideKeyword"] = 156] = "OverrideKeyword";
-        SyntaxKind[SyntaxKind["OfKeyword"] = 157] = "OfKeyword";
+        SyntaxKind[SyntaxKind["AbstractKeyword"] = 126] = "AbstractKeyword";
+        SyntaxKind[SyntaxKind["AsKeyword"] = 127] = "AsKeyword";
+        SyntaxKind[SyntaxKind["AssertsKeyword"] = 128] = "AssertsKeyword";
+        SyntaxKind[SyntaxKind["AnyKeyword"] = 129] = "AnyKeyword";
+        SyntaxKind[SyntaxKind["AsyncKeyword"] = 130] = "AsyncKeyword";
+        SyntaxKind[SyntaxKind["AwaitKeyword"] = 131] = "AwaitKeyword";
+        SyntaxKind[SyntaxKind["BooleanKeyword"] = 132] = "BooleanKeyword";
+        SyntaxKind[SyntaxKind["ConstructorKeyword"] = 133] = "ConstructorKeyword";
+        SyntaxKind[SyntaxKind["DeclareKeyword"] = 134] = "DeclareKeyword";
+        SyntaxKind[SyntaxKind["GetKeyword"] = 135] = "GetKeyword";
+        SyntaxKind[SyntaxKind["InferKeyword"] = 136] = "InferKeyword";
+        SyntaxKind[SyntaxKind["IntrinsicKeyword"] = 137] = "IntrinsicKeyword";
+        SyntaxKind[SyntaxKind["IsKeyword"] = 138] = "IsKeyword";
+        SyntaxKind[SyntaxKind["KeyOfKeyword"] = 139] = "KeyOfKeyword";
+        SyntaxKind[SyntaxKind["ModuleKeyword"] = 140] = "ModuleKeyword";
+        SyntaxKind[SyntaxKind["NamespaceKeyword"] = 141] = "NamespaceKeyword";
+        SyntaxKind[SyntaxKind["NeverKeyword"] = 142] = "NeverKeyword";
+        SyntaxKind[SyntaxKind["ReadonlyKeyword"] = 143] = "ReadonlyKeyword";
+        SyntaxKind[SyntaxKind["RequireKeyword"] = 144] = "RequireKeyword";
+        SyntaxKind[SyntaxKind["NumberKeyword"] = 145] = "NumberKeyword";
+        SyntaxKind[SyntaxKind["ObjectKeyword"] = 146] = "ObjectKeyword";
+        SyntaxKind[SyntaxKind["SetKeyword"] = 147] = "SetKeyword";
+        SyntaxKind[SyntaxKind["StringKeyword"] = 148] = "StringKeyword";
+        SyntaxKind[SyntaxKind["SymbolKeyword"] = 149] = "SymbolKeyword";
+        SyntaxKind[SyntaxKind["TypeKeyword"] = 150] = "TypeKeyword";
+        SyntaxKind[SyntaxKind["UndefinedKeyword"] = 151] = "UndefinedKeyword";
+        SyntaxKind[SyntaxKind["UniqueKeyword"] = 152] = "UniqueKeyword";
+        SyntaxKind[SyntaxKind["UnknownKeyword"] = 153] = "UnknownKeyword";
+        SyntaxKind[SyntaxKind["FromKeyword"] = 154] = "FromKeyword";
+        SyntaxKind[SyntaxKind["GlobalKeyword"] = 155] = "GlobalKeyword";
+        SyntaxKind[SyntaxKind["BigIntKeyword"] = 156] = "BigIntKeyword";
+        SyntaxKind[SyntaxKind["OverrideKeyword"] = 157] = "OverrideKeyword";
+        SyntaxKind[SyntaxKind["OfKeyword"] = 158] = "OfKeyword";
         // Parse tree nodes
         // Names
-        SyntaxKind[SyntaxKind["QualifiedName"] = 158] = "QualifiedName";
-        SyntaxKind[SyntaxKind["ComputedPropertyName"] = 159] = "ComputedPropertyName";
+        SyntaxKind[SyntaxKind["QualifiedName"] = 159] = "QualifiedName";
+        SyntaxKind[SyntaxKind["ComputedPropertyName"] = 160] = "ComputedPropertyName";
         // Signature elements
-        SyntaxKind[SyntaxKind["TypeParameter"] = 160] = "TypeParameter";
-        SyntaxKind[SyntaxKind["Parameter"] = 161] = "Parameter";
-        SyntaxKind[SyntaxKind["Decorator"] = 162] = "Decorator";
+        SyntaxKind[SyntaxKind["TypeParameter"] = 161] = "TypeParameter";
+        SyntaxKind[SyntaxKind["Parameter"] = 162] = "Parameter";
+        SyntaxKind[SyntaxKind["Decorator"] = 163] = "Decorator";
         // TypeMember
-        SyntaxKind[SyntaxKind["PropertySignature"] = 163] = "PropertySignature";
-        SyntaxKind[SyntaxKind["PropertyDeclaration"] = 164] = "PropertyDeclaration";
-        SyntaxKind[SyntaxKind["MethodSignature"] = 165] = "MethodSignature";
-        SyntaxKind[SyntaxKind["MethodDeclaration"] = 166] = "MethodDeclaration";
-        SyntaxKind[SyntaxKind["Constructor"] = 167] = "Constructor";
-        SyntaxKind[SyntaxKind["GetAccessor"] = 168] = "GetAccessor";
-        SyntaxKind[SyntaxKind["SetAccessor"] = 169] = "SetAccessor";
-        SyntaxKind[SyntaxKind["CallSignature"] = 170] = "CallSignature";
-        SyntaxKind[SyntaxKind["ConstructSignature"] = 171] = "ConstructSignature";
-        SyntaxKind[SyntaxKind["IndexSignature"] = 172] = "IndexSignature";
+        SyntaxKind[SyntaxKind["PropertySignature"] = 164] = "PropertySignature";
+        SyntaxKind[SyntaxKind["PropertyDeclaration"] = 165] = "PropertyDeclaration";
+        SyntaxKind[SyntaxKind["MethodSignature"] = 166] = "MethodSignature";
+        SyntaxKind[SyntaxKind["MethodDeclaration"] = 167] = "MethodDeclaration";
+        SyntaxKind[SyntaxKind["ClassStaticBlockDeclaration"] = 168] = "ClassStaticBlockDeclaration";
+        SyntaxKind[SyntaxKind["Constructor"] = 169] = "Constructor";
+        SyntaxKind[SyntaxKind["GetAccessor"] = 170] = "GetAccessor";
+        SyntaxKind[SyntaxKind["SetAccessor"] = 171] = "SetAccessor";
+        SyntaxKind[SyntaxKind["CallSignature"] = 172] = "CallSignature";
+        SyntaxKind[SyntaxKind["ConstructSignature"] = 173] = "ConstructSignature";
+        SyntaxKind[SyntaxKind["IndexSignature"] = 174] = "IndexSignature";
         // Type
-        SyntaxKind[SyntaxKind["TypePredicate"] = 173] = "TypePredicate";
-        SyntaxKind[SyntaxKind["TypeReference"] = 174] = "TypeReference";
-        SyntaxKind[SyntaxKind["FunctionType"] = 175] = "FunctionType";
-        SyntaxKind[SyntaxKind["ConstructorType"] = 176] = "ConstructorType";
-        SyntaxKind[SyntaxKind["TypeQuery"] = 177] = "TypeQuery";
-        SyntaxKind[SyntaxKind["TypeLiteral"] = 178] = "TypeLiteral";
-        SyntaxKind[SyntaxKind["ArrayType"] = 179] = "ArrayType";
-        SyntaxKind[SyntaxKind["TupleType"] = 180] = "TupleType";
-        SyntaxKind[SyntaxKind["OptionalType"] = 181] = "OptionalType";
-        SyntaxKind[SyntaxKind["RestType"] = 182] = "RestType";
-        SyntaxKind[SyntaxKind["UnionType"] = 183] = "UnionType";
-        SyntaxKind[SyntaxKind["IntersectionType"] = 184] = "IntersectionType";
-        SyntaxKind[SyntaxKind["ConditionalType"] = 185] = "ConditionalType";
-        SyntaxKind[SyntaxKind["InferType"] = 186] = "InferType";
-        SyntaxKind[SyntaxKind["ParenthesizedType"] = 187] = "ParenthesizedType";
-        SyntaxKind[SyntaxKind["ThisType"] = 188] = "ThisType";
-        SyntaxKind[SyntaxKind["TypeOperator"] = 189] = "TypeOperator";
-        SyntaxKind[SyntaxKind["IndexedAccessType"] = 190] = "IndexedAccessType";
-        SyntaxKind[SyntaxKind["MappedType"] = 191] = "MappedType";
-        SyntaxKind[SyntaxKind["LiteralType"] = 192] = "LiteralType";
-        SyntaxKind[SyntaxKind["NamedTupleMember"] = 193] = "NamedTupleMember";
-        SyntaxKind[SyntaxKind["TemplateLiteralType"] = 194] = "TemplateLiteralType";
-        SyntaxKind[SyntaxKind["TemplateLiteralTypeSpan"] = 195] = "TemplateLiteralTypeSpan";
-        SyntaxKind[SyntaxKind["ImportType"] = 196] = "ImportType";
+        SyntaxKind[SyntaxKind["TypePredicate"] = 175] = "TypePredicate";
+        SyntaxKind[SyntaxKind["TypeReference"] = 176] = "TypeReference";
+        SyntaxKind[SyntaxKind["FunctionType"] = 177] = "FunctionType";
+        SyntaxKind[SyntaxKind["ConstructorType"] = 178] = "ConstructorType";
+        SyntaxKind[SyntaxKind["TypeQuery"] = 179] = "TypeQuery";
+        SyntaxKind[SyntaxKind["TypeLiteral"] = 180] = "TypeLiteral";
+        SyntaxKind[SyntaxKind["ArrayType"] = 181] = "ArrayType";
+        SyntaxKind[SyntaxKind["TupleType"] = 182] = "TupleType";
+        SyntaxKind[SyntaxKind["OptionalType"] = 183] = "OptionalType";
+        SyntaxKind[SyntaxKind["RestType"] = 184] = "RestType";
+        SyntaxKind[SyntaxKind["UnionType"] = 185] = "UnionType";
+        SyntaxKind[SyntaxKind["IntersectionType"] = 186] = "IntersectionType";
+        SyntaxKind[SyntaxKind["ConditionalType"] = 187] = "ConditionalType";
+        SyntaxKind[SyntaxKind["InferType"] = 188] = "InferType";
+        SyntaxKind[SyntaxKind["ParenthesizedType"] = 189] = "ParenthesizedType";
+        SyntaxKind[SyntaxKind["ThisType"] = 190] = "ThisType";
+        SyntaxKind[SyntaxKind["TypeOperator"] = 191] = "TypeOperator";
+        SyntaxKind[SyntaxKind["IndexedAccessType"] = 192] = "IndexedAccessType";
+        SyntaxKind[SyntaxKind["MappedType"] = 193] = "MappedType";
+        SyntaxKind[SyntaxKind["LiteralType"] = 194] = "LiteralType";
+        SyntaxKind[SyntaxKind["NamedTupleMember"] = 195] = "NamedTupleMember";
+        SyntaxKind[SyntaxKind["TemplateLiteralType"] = 196] = "TemplateLiteralType";
+        SyntaxKind[SyntaxKind["TemplateLiteralTypeSpan"] = 197] = "TemplateLiteralTypeSpan";
+        SyntaxKind[SyntaxKind["ImportType"] = 198] = "ImportType";
         // Binding patterns
-        SyntaxKind[SyntaxKind["ObjectBindingPattern"] = 197] = "ObjectBindingPattern";
-        SyntaxKind[SyntaxKind["ArrayBindingPattern"] = 198] = "ArrayBindingPattern";
-        SyntaxKind[SyntaxKind["BindingElement"] = 199] = "BindingElement";
+        SyntaxKind[SyntaxKind["ObjectBindingPattern"] = 199] = "ObjectBindingPattern";
+        SyntaxKind[SyntaxKind["ArrayBindingPattern"] = 200] = "ArrayBindingPattern";
+        SyntaxKind[SyntaxKind["BindingElement"] = 201] = "BindingElement";
         // Expression
-        SyntaxKind[SyntaxKind["ArrayLiteralExpression"] = 200] = "ArrayLiteralExpression";
-        SyntaxKind[SyntaxKind["ObjectLiteralExpression"] = 201] = "ObjectLiteralExpression";
-        SyntaxKind[SyntaxKind["PropertyAccessExpression"] = 202] = "PropertyAccessExpression";
-        SyntaxKind[SyntaxKind["ElementAccessExpression"] = 203] = "ElementAccessExpression";
-        SyntaxKind[SyntaxKind["CallExpression"] = 204] = "CallExpression";
-        SyntaxKind[SyntaxKind["NewExpression"] = 205] = "NewExpression";
-        SyntaxKind[SyntaxKind["TaggedTemplateExpression"] = 206] = "TaggedTemplateExpression";
-        SyntaxKind[SyntaxKind["TypeAssertionExpression"] = 207] = "TypeAssertionExpression";
-        SyntaxKind[SyntaxKind["ParenthesizedExpression"] = 208] = "ParenthesizedExpression";
-        SyntaxKind[SyntaxKind["FunctionExpression"] = 209] = "FunctionExpression";
-        SyntaxKind[SyntaxKind["ArrowFunction"] = 210] = "ArrowFunction";
-        SyntaxKind[SyntaxKind["DeleteExpression"] = 211] = "DeleteExpression";
-        SyntaxKind[SyntaxKind["TypeOfExpression"] = 212] = "TypeOfExpression";
-        SyntaxKind[SyntaxKind["VoidExpression"] = 213] = "VoidExpression";
-        SyntaxKind[SyntaxKind["AwaitExpression"] = 214] = "AwaitExpression";
-        SyntaxKind[SyntaxKind["PrefixUnaryExpression"] = 215] = "PrefixUnaryExpression";
-        SyntaxKind[SyntaxKind["PostfixUnaryExpression"] = 216] = "PostfixUnaryExpression";
-        SyntaxKind[SyntaxKind["BinaryExpression"] = 217] = "BinaryExpression";
-        SyntaxKind[SyntaxKind["ConditionalExpression"] = 218] = "ConditionalExpression";
-        SyntaxKind[SyntaxKind["TemplateExpression"] = 219] = "TemplateExpression";
-        SyntaxKind[SyntaxKind["YieldExpression"] = 220] = "YieldExpression";
-        SyntaxKind[SyntaxKind["SpreadElement"] = 221] = "SpreadElement";
-        SyntaxKind[SyntaxKind["ClassExpression"] = 222] = "ClassExpression";
-        SyntaxKind[SyntaxKind["OmittedExpression"] = 223] = "OmittedExpression";
-        SyntaxKind[SyntaxKind["ExpressionWithTypeArguments"] = 224] = "ExpressionWithTypeArguments";
-        SyntaxKind[SyntaxKind["AsExpression"] = 225] = "AsExpression";
-        SyntaxKind[SyntaxKind["NonNullExpression"] = 226] = "NonNullExpression";
-        SyntaxKind[SyntaxKind["MetaProperty"] = 227] = "MetaProperty";
-        SyntaxKind[SyntaxKind["SyntheticExpression"] = 228] = "SyntheticExpression";
+        SyntaxKind[SyntaxKind["ArrayLiteralExpression"] = 202] = "ArrayLiteralExpression";
+        SyntaxKind[SyntaxKind["ObjectLiteralExpression"] = 203] = "ObjectLiteralExpression";
+        SyntaxKind[SyntaxKind["PropertyAccessExpression"] = 204] = "PropertyAccessExpression";
+        SyntaxKind[SyntaxKind["ElementAccessExpression"] = 205] = "ElementAccessExpression";
+        SyntaxKind[SyntaxKind["CallExpression"] = 206] = "CallExpression";
+        SyntaxKind[SyntaxKind["NewExpression"] = 207] = "NewExpression";
+        SyntaxKind[SyntaxKind["TaggedTemplateExpression"] = 208] = "TaggedTemplateExpression";
+        SyntaxKind[SyntaxKind["TypeAssertionExpression"] = 209] = "TypeAssertionExpression";
+        SyntaxKind[SyntaxKind["ParenthesizedExpression"] = 210] = "ParenthesizedExpression";
+        SyntaxKind[SyntaxKind["FunctionExpression"] = 211] = "FunctionExpression";
+        SyntaxKind[SyntaxKind["ArrowFunction"] = 212] = "ArrowFunction";
+        SyntaxKind[SyntaxKind["DeleteExpression"] = 213] = "DeleteExpression";
+        SyntaxKind[SyntaxKind["TypeOfExpression"] = 214] = "TypeOfExpression";
+        SyntaxKind[SyntaxKind["VoidExpression"] = 215] = "VoidExpression";
+        SyntaxKind[SyntaxKind["AwaitExpression"] = 216] = "AwaitExpression";
+        SyntaxKind[SyntaxKind["PrefixUnaryExpression"] = 217] = "PrefixUnaryExpression";
+        SyntaxKind[SyntaxKind["PostfixUnaryExpression"] = 218] = "PostfixUnaryExpression";
+        SyntaxKind[SyntaxKind["BinaryExpression"] = 219] = "BinaryExpression";
+        SyntaxKind[SyntaxKind["ConditionalExpression"] = 220] = "ConditionalExpression";
+        SyntaxKind[SyntaxKind["TemplateExpression"] = 221] = "TemplateExpression";
+        SyntaxKind[SyntaxKind["YieldExpression"] = 222] = "YieldExpression";
+        SyntaxKind[SyntaxKind["SpreadElement"] = 223] = "SpreadElement";
+        SyntaxKind[SyntaxKind["ClassExpression"] = 224] = "ClassExpression";
+        SyntaxKind[SyntaxKind["OmittedExpression"] = 225] = "OmittedExpression";
+        SyntaxKind[SyntaxKind["ExpressionWithTypeArguments"] = 226] = "ExpressionWithTypeArguments";
+        SyntaxKind[SyntaxKind["AsExpression"] = 227] = "AsExpression";
+        SyntaxKind[SyntaxKind["NonNullExpression"] = 228] = "NonNullExpression";
+        SyntaxKind[SyntaxKind["MetaProperty"] = 229] = "MetaProperty";
+        SyntaxKind[SyntaxKind["SyntheticExpression"] = 230] = "SyntheticExpression";
         // Misc
-        SyntaxKind[SyntaxKind["TemplateSpan"] = 229] = "TemplateSpan";
-        SyntaxKind[SyntaxKind["SemicolonClassElement"] = 230] = "SemicolonClassElement";
+        SyntaxKind[SyntaxKind["TemplateSpan"] = 231] = "TemplateSpan";
+        SyntaxKind[SyntaxKind["SemicolonClassElement"] = 232] = "SemicolonClassElement";
         // Element
-        SyntaxKind[SyntaxKind["Block"] = 231] = "Block";
-        SyntaxKind[SyntaxKind["EmptyStatement"] = 232] = "EmptyStatement";
-        SyntaxKind[SyntaxKind["VariableStatement"] = 233] = "VariableStatement";
-        SyntaxKind[SyntaxKind["ExpressionStatement"] = 234] = "ExpressionStatement";
-        SyntaxKind[SyntaxKind["IfStatement"] = 235] = "IfStatement";
-        SyntaxKind[SyntaxKind["DoStatement"] = 236] = "DoStatement";
-        SyntaxKind[SyntaxKind["WhileStatement"] = 237] = "WhileStatement";
-        SyntaxKind[SyntaxKind["ForStatement"] = 238] = "ForStatement";
-        SyntaxKind[SyntaxKind["ForInStatement"] = 239] = "ForInStatement";
-        SyntaxKind[SyntaxKind["ForOfStatement"] = 240] = "ForOfStatement";
-        SyntaxKind[SyntaxKind["ContinueStatement"] = 241] = "ContinueStatement";
-        SyntaxKind[SyntaxKind["BreakStatement"] = 242] = "BreakStatement";
-        SyntaxKind[SyntaxKind["ReturnStatement"] = 243] = "ReturnStatement";
-        SyntaxKind[SyntaxKind["WithStatement"] = 244] = "WithStatement";
-        SyntaxKind[SyntaxKind["SwitchStatement"] = 245] = "SwitchStatement";
-        SyntaxKind[SyntaxKind["LabeledStatement"] = 246] = "LabeledStatement";
-        SyntaxKind[SyntaxKind["ThrowStatement"] = 247] = "ThrowStatement";
-        SyntaxKind[SyntaxKind["TryStatement"] = 248] = "TryStatement";
-        SyntaxKind[SyntaxKind["DebuggerStatement"] = 249] = "DebuggerStatement";
-        SyntaxKind[SyntaxKind["VariableDeclaration"] = 250] = "VariableDeclaration";
-        SyntaxKind[SyntaxKind["VariableDeclarationList"] = 251] = "VariableDeclarationList";
-        SyntaxKind[SyntaxKind["FunctionDeclaration"] = 252] = "FunctionDeclaration";
-        SyntaxKind[SyntaxKind["ClassDeclaration"] = 253] = "ClassDeclaration";
-        SyntaxKind[SyntaxKind["InterfaceDeclaration"] = 254] = "InterfaceDeclaration";
-        SyntaxKind[SyntaxKind["TypeAliasDeclaration"] = 255] = "TypeAliasDeclaration";
-        SyntaxKind[SyntaxKind["EnumDeclaration"] = 256] = "EnumDeclaration";
-        SyntaxKind[SyntaxKind["ModuleDeclaration"] = 257] = "ModuleDeclaration";
-        SyntaxKind[SyntaxKind["ModuleBlock"] = 258] = "ModuleBlock";
-        SyntaxKind[SyntaxKind["CaseBlock"] = 259] = "CaseBlock";
-        SyntaxKind[SyntaxKind["NamespaceExportDeclaration"] = 260] = "NamespaceExportDeclaration";
-        SyntaxKind[SyntaxKind["ImportEqualsDeclaration"] = 261] = "ImportEqualsDeclaration";
-        SyntaxKind[SyntaxKind["ImportDeclaration"] = 262] = "ImportDeclaration";
-        SyntaxKind[SyntaxKind["ImportClause"] = 263] = "ImportClause";
-        SyntaxKind[SyntaxKind["NamespaceImport"] = 264] = "NamespaceImport";
-        SyntaxKind[SyntaxKind["NamedImports"] = 265] = "NamedImports";
-        SyntaxKind[SyntaxKind["ImportSpecifier"] = 266] = "ImportSpecifier";
-        SyntaxKind[SyntaxKind["ExportAssignment"] = 267] = "ExportAssignment";
-        SyntaxKind[SyntaxKind["ExportDeclaration"] = 268] = "ExportDeclaration";
-        SyntaxKind[SyntaxKind["NamedExports"] = 269] = "NamedExports";
-        SyntaxKind[SyntaxKind["NamespaceExport"] = 270] = "NamespaceExport";
-        SyntaxKind[SyntaxKind["ExportSpecifier"] = 271] = "ExportSpecifier";
-        SyntaxKind[SyntaxKind["MissingDeclaration"] = 272] = "MissingDeclaration";
+        SyntaxKind[SyntaxKind["Block"] = 233] = "Block";
+        SyntaxKind[SyntaxKind["EmptyStatement"] = 234] = "EmptyStatement";
+        SyntaxKind[SyntaxKind["VariableStatement"] = 235] = "VariableStatement";
+        SyntaxKind[SyntaxKind["ExpressionStatement"] = 236] = "ExpressionStatement";
+        SyntaxKind[SyntaxKind["IfStatement"] = 237] = "IfStatement";
+        SyntaxKind[SyntaxKind["DoStatement"] = 238] = "DoStatement";
+        SyntaxKind[SyntaxKind["WhileStatement"] = 239] = "WhileStatement";
+        SyntaxKind[SyntaxKind["ForStatement"] = 240] = "ForStatement";
+        SyntaxKind[SyntaxKind["ForInStatement"] = 241] = "ForInStatement";
+        SyntaxKind[SyntaxKind["ForOfStatement"] = 242] = "ForOfStatement";
+        SyntaxKind[SyntaxKind["ContinueStatement"] = 243] = "ContinueStatement";
+        SyntaxKind[SyntaxKind["BreakStatement"] = 244] = "BreakStatement";
+        SyntaxKind[SyntaxKind["ReturnStatement"] = 245] = "ReturnStatement";
+        SyntaxKind[SyntaxKind["WithStatement"] = 246] = "WithStatement";
+        SyntaxKind[SyntaxKind["SwitchStatement"] = 247] = "SwitchStatement";
+        SyntaxKind[SyntaxKind["LabeledStatement"] = 248] = "LabeledStatement";
+        SyntaxKind[SyntaxKind["ThrowStatement"] = 249] = "ThrowStatement";
+        SyntaxKind[SyntaxKind["TryStatement"] = 250] = "TryStatement";
+        SyntaxKind[SyntaxKind["DebuggerStatement"] = 251] = "DebuggerStatement";
+        SyntaxKind[SyntaxKind["VariableDeclaration"] = 252] = "VariableDeclaration";
+        SyntaxKind[SyntaxKind["VariableDeclarationList"] = 253] = "VariableDeclarationList";
+        SyntaxKind[SyntaxKind["FunctionDeclaration"] = 254] = "FunctionDeclaration";
+        SyntaxKind[SyntaxKind["ClassDeclaration"] = 255] = "ClassDeclaration";
+        SyntaxKind[SyntaxKind["InterfaceDeclaration"] = 256] = "InterfaceDeclaration";
+        SyntaxKind[SyntaxKind["TypeAliasDeclaration"] = 257] = "TypeAliasDeclaration";
+        SyntaxKind[SyntaxKind["EnumDeclaration"] = 258] = "EnumDeclaration";
+        SyntaxKind[SyntaxKind["ModuleDeclaration"] = 259] = "ModuleDeclaration";
+        SyntaxKind[SyntaxKind["ModuleBlock"] = 260] = "ModuleBlock";
+        SyntaxKind[SyntaxKind["CaseBlock"] = 261] = "CaseBlock";
+        SyntaxKind[SyntaxKind["NamespaceExportDeclaration"] = 262] = "NamespaceExportDeclaration";
+        SyntaxKind[SyntaxKind["ImportEqualsDeclaration"] = 263] = "ImportEqualsDeclaration";
+        SyntaxKind[SyntaxKind["ImportDeclaration"] = 264] = "ImportDeclaration";
+        SyntaxKind[SyntaxKind["ImportClause"] = 265] = "ImportClause";
+        SyntaxKind[SyntaxKind["NamespaceImport"] = 266] = "NamespaceImport";
+        SyntaxKind[SyntaxKind["NamedImports"] = 267] = "NamedImports";
+        SyntaxKind[SyntaxKind["ImportSpecifier"] = 268] = "ImportSpecifier";
+        SyntaxKind[SyntaxKind["ExportAssignment"] = 269] = "ExportAssignment";
+        SyntaxKind[SyntaxKind["ExportDeclaration"] = 270] = "ExportDeclaration";
+        SyntaxKind[SyntaxKind["NamedExports"] = 271] = "NamedExports";
+        SyntaxKind[SyntaxKind["NamespaceExport"] = 272] = "NamespaceExport";
+        SyntaxKind[SyntaxKind["ExportSpecifier"] = 273] = "ExportSpecifier";
+        SyntaxKind[SyntaxKind["MissingDeclaration"] = 274] = "MissingDeclaration";
         // Module references
-        SyntaxKind[SyntaxKind["ExternalModuleReference"] = 273] = "ExternalModuleReference";
+        SyntaxKind[SyntaxKind["ExternalModuleReference"] = 275] = "ExternalModuleReference";
         // JSX
-        SyntaxKind[SyntaxKind["JsxElement"] = 274] = "JsxElement";
-        SyntaxKind[SyntaxKind["JsxSelfClosingElement"] = 275] = "JsxSelfClosingElement";
-        SyntaxKind[SyntaxKind["JsxOpeningElement"] = 276] = "JsxOpeningElement";
-        SyntaxKind[SyntaxKind["JsxClosingElement"] = 277] = "JsxClosingElement";
-        SyntaxKind[SyntaxKind["JsxFragment"] = 278] = "JsxFragment";
-        SyntaxKind[SyntaxKind["JsxOpeningFragment"] = 279] = "JsxOpeningFragment";
-        SyntaxKind[SyntaxKind["JsxClosingFragment"] = 280] = "JsxClosingFragment";
-        SyntaxKind[SyntaxKind["JsxAttribute"] = 281] = "JsxAttribute";
-        SyntaxKind[SyntaxKind["JsxAttributes"] = 282] = "JsxAttributes";
-        SyntaxKind[SyntaxKind["JsxSpreadAttribute"] = 283] = "JsxSpreadAttribute";
-        SyntaxKind[SyntaxKind["JsxExpression"] = 284] = "JsxExpression";
+        SyntaxKind[SyntaxKind["JsxElement"] = 276] = "JsxElement";
+        SyntaxKind[SyntaxKind["JsxSelfClosingElement"] = 277] = "JsxSelfClosingElement";
+        SyntaxKind[SyntaxKind["JsxOpeningElement"] = 278] = "JsxOpeningElement";
+        SyntaxKind[SyntaxKind["JsxClosingElement"] = 279] = "JsxClosingElement";
+        SyntaxKind[SyntaxKind["JsxFragment"] = 280] = "JsxFragment";
+        SyntaxKind[SyntaxKind["JsxOpeningFragment"] = 281] = "JsxOpeningFragment";
+        SyntaxKind[SyntaxKind["JsxClosingFragment"] = 282] = "JsxClosingFragment";
+        SyntaxKind[SyntaxKind["JsxAttribute"] = 283] = "JsxAttribute";
+        SyntaxKind[SyntaxKind["JsxAttributes"] = 284] = "JsxAttributes";
+        SyntaxKind[SyntaxKind["JsxSpreadAttribute"] = 285] = "JsxSpreadAttribute";
+        SyntaxKind[SyntaxKind["JsxExpression"] = 286] = "JsxExpression";
         // Clauses
-        SyntaxKind[SyntaxKind["CaseClause"] = 285] = "CaseClause";
-        SyntaxKind[SyntaxKind["DefaultClause"] = 286] = "DefaultClause";
-        SyntaxKind[SyntaxKind["HeritageClause"] = 287] = "HeritageClause";
-        SyntaxKind[SyntaxKind["CatchClause"] = 288] = "CatchClause";
+        SyntaxKind[SyntaxKind["CaseClause"] = 287] = "CaseClause";
+        SyntaxKind[SyntaxKind["DefaultClause"] = 288] = "DefaultClause";
+        SyntaxKind[SyntaxKind["HeritageClause"] = 289] = "HeritageClause";
+        SyntaxKind[SyntaxKind["CatchClause"] = 290] = "CatchClause";
         // Property assignments
-        SyntaxKind[SyntaxKind["PropertyAssignment"] = 289] = "PropertyAssignment";
-        SyntaxKind[SyntaxKind["ShorthandPropertyAssignment"] = 290] = "ShorthandPropertyAssignment";
-        SyntaxKind[SyntaxKind["SpreadAssignment"] = 291] = "SpreadAssignment";
+        SyntaxKind[SyntaxKind["PropertyAssignment"] = 291] = "PropertyAssignment";
+        SyntaxKind[SyntaxKind["ShorthandPropertyAssignment"] = 292] = "ShorthandPropertyAssignment";
+        SyntaxKind[SyntaxKind["SpreadAssignment"] = 293] = "SpreadAssignment";
         // Enum
-        SyntaxKind[SyntaxKind["EnumMember"] = 292] = "EnumMember";
+        SyntaxKind[SyntaxKind["EnumMember"] = 294] = "EnumMember";
         // Unparsed
-        SyntaxKind[SyntaxKind["UnparsedPrologue"] = 293] = "UnparsedPrologue";
-        SyntaxKind[SyntaxKind["UnparsedPrepend"] = 294] = "UnparsedPrepend";
-        SyntaxKind[SyntaxKind["UnparsedText"] = 295] = "UnparsedText";
-        SyntaxKind[SyntaxKind["UnparsedInternalText"] = 296] = "UnparsedInternalText";
-        SyntaxKind[SyntaxKind["UnparsedSyntheticReference"] = 297] = "UnparsedSyntheticReference";
+        SyntaxKind[SyntaxKind["UnparsedPrologue"] = 295] = "UnparsedPrologue";
+        SyntaxKind[SyntaxKind["UnparsedPrepend"] = 296] = "UnparsedPrepend";
+        SyntaxKind[SyntaxKind["UnparsedText"] = 297] = "UnparsedText";
+        SyntaxKind[SyntaxKind["UnparsedInternalText"] = 298] = "UnparsedInternalText";
+        SyntaxKind[SyntaxKind["UnparsedSyntheticReference"] = 299] = "UnparsedSyntheticReference";
         // Top-level nodes
-        SyntaxKind[SyntaxKind["SourceFile"] = 298] = "SourceFile";
-        SyntaxKind[SyntaxKind["Bundle"] = 299] = "Bundle";
-        SyntaxKind[SyntaxKind["UnparsedSource"] = 300] = "UnparsedSource";
-        SyntaxKind[SyntaxKind["InputFiles"] = 301] = "InputFiles";
+        SyntaxKind[SyntaxKind["SourceFile"] = 300] = "SourceFile";
+        SyntaxKind[SyntaxKind["Bundle"] = 301] = "Bundle";
+        SyntaxKind[SyntaxKind["UnparsedSource"] = 302] = "UnparsedSource";
+        SyntaxKind[SyntaxKind["InputFiles"] = 303] = "InputFiles";
         // JSDoc nodes
-        SyntaxKind[SyntaxKind["JSDocTypeExpression"] = 302] = "JSDocTypeExpression";
-        SyntaxKind[SyntaxKind["JSDocNameReference"] = 303] = "JSDocNameReference";
-        SyntaxKind[SyntaxKind["JSDocAllType"] = 304] = "JSDocAllType";
-        SyntaxKind[SyntaxKind["JSDocUnknownType"] = 305] = "JSDocUnknownType";
-        SyntaxKind[SyntaxKind["JSDocNullableType"] = 306] = "JSDocNullableType";
-        SyntaxKind[SyntaxKind["JSDocNonNullableType"] = 307] = "JSDocNonNullableType";
-        SyntaxKind[SyntaxKind["JSDocOptionalType"] = 308] = "JSDocOptionalType";
-        SyntaxKind[SyntaxKind["JSDocFunctionType"] = 309] = "JSDocFunctionType";
-        SyntaxKind[SyntaxKind["JSDocVariadicType"] = 310] = "JSDocVariadicType";
-        SyntaxKind[SyntaxKind["JSDocNamepathType"] = 311] = "JSDocNamepathType";
-        SyntaxKind[SyntaxKind["JSDocComment"] = 312] = "JSDocComment";
-        SyntaxKind[SyntaxKind["JSDocText"] = 313] = "JSDocText";
-        SyntaxKind[SyntaxKind["JSDocTypeLiteral"] = 314] = "JSDocTypeLiteral";
-        SyntaxKind[SyntaxKind["JSDocSignature"] = 315] = "JSDocSignature";
-        SyntaxKind[SyntaxKind["JSDocLink"] = 316] = "JSDocLink";
-        SyntaxKind[SyntaxKind["JSDocTag"] = 317] = "JSDocTag";
-        SyntaxKind[SyntaxKind["JSDocAugmentsTag"] = 318] = "JSDocAugmentsTag";
-        SyntaxKind[SyntaxKind["JSDocImplementsTag"] = 319] = "JSDocImplementsTag";
-        SyntaxKind[SyntaxKind["JSDocAuthorTag"] = 320] = "JSDocAuthorTag";
-        SyntaxKind[SyntaxKind["JSDocDeprecatedTag"] = 321] = "JSDocDeprecatedTag";
-        SyntaxKind[SyntaxKind["JSDocClassTag"] = 322] = "JSDocClassTag";
-        SyntaxKind[SyntaxKind["JSDocPublicTag"] = 323] = "JSDocPublicTag";
-        SyntaxKind[SyntaxKind["JSDocPrivateTag"] = 324] = "JSDocPrivateTag";
-        SyntaxKind[SyntaxKind["JSDocProtectedTag"] = 325] = "JSDocProtectedTag";
-        SyntaxKind[SyntaxKind["JSDocReadonlyTag"] = 326] = "JSDocReadonlyTag";
-        SyntaxKind[SyntaxKind["JSDocOverrideTag"] = 327] = "JSDocOverrideTag";
-        SyntaxKind[SyntaxKind["JSDocCallbackTag"] = 328] = "JSDocCallbackTag";
-        SyntaxKind[SyntaxKind["JSDocEnumTag"] = 329] = "JSDocEnumTag";
-        SyntaxKind[SyntaxKind["JSDocParameterTag"] = 330] = "JSDocParameterTag";
-        SyntaxKind[SyntaxKind["JSDocReturnTag"] = 331] = "JSDocReturnTag";
-        SyntaxKind[SyntaxKind["JSDocThisTag"] = 332] = "JSDocThisTag";
-        SyntaxKind[SyntaxKind["JSDocTypeTag"] = 333] = "JSDocTypeTag";
-        SyntaxKind[SyntaxKind["JSDocTemplateTag"] = 334] = "JSDocTemplateTag";
-        SyntaxKind[SyntaxKind["JSDocTypedefTag"] = 335] = "JSDocTypedefTag";
-        SyntaxKind[SyntaxKind["JSDocSeeTag"] = 336] = "JSDocSeeTag";
-        SyntaxKind[SyntaxKind["JSDocPropertyTag"] = 337] = "JSDocPropertyTag";
+        SyntaxKind[SyntaxKind["JSDocTypeExpression"] = 304] = "JSDocTypeExpression";
+        SyntaxKind[SyntaxKind["JSDocNameReference"] = 305] = "JSDocNameReference";
+        SyntaxKind[SyntaxKind["JSDocMemberName"] = 306] = "JSDocMemberName";
+        SyntaxKind[SyntaxKind["JSDocAllType"] = 307] = "JSDocAllType";
+        SyntaxKind[SyntaxKind["JSDocUnknownType"] = 308] = "JSDocUnknownType";
+        SyntaxKind[SyntaxKind["JSDocNullableType"] = 309] = "JSDocNullableType";
+        SyntaxKind[SyntaxKind["JSDocNonNullableType"] = 310] = "JSDocNonNullableType";
+        SyntaxKind[SyntaxKind["JSDocOptionalType"] = 311] = "JSDocOptionalType";
+        SyntaxKind[SyntaxKind["JSDocFunctionType"] = 312] = "JSDocFunctionType";
+        SyntaxKind[SyntaxKind["JSDocVariadicType"] = 313] = "JSDocVariadicType";
+        SyntaxKind[SyntaxKind["JSDocNamepathType"] = 314] = "JSDocNamepathType";
+        SyntaxKind[SyntaxKind["JSDocComment"] = 315] = "JSDocComment";
+        SyntaxKind[SyntaxKind["JSDocText"] = 316] = "JSDocText";
+        SyntaxKind[SyntaxKind["JSDocTypeLiteral"] = 317] = "JSDocTypeLiteral";
+        SyntaxKind[SyntaxKind["JSDocSignature"] = 318] = "JSDocSignature";
+        SyntaxKind[SyntaxKind["JSDocLink"] = 319] = "JSDocLink";
+        SyntaxKind[SyntaxKind["JSDocLinkCode"] = 320] = "JSDocLinkCode";
+        SyntaxKind[SyntaxKind["JSDocLinkPlain"] = 321] = "JSDocLinkPlain";
+        SyntaxKind[SyntaxKind["JSDocTag"] = 322] = "JSDocTag";
+        SyntaxKind[SyntaxKind["JSDocAugmentsTag"] = 323] = "JSDocAugmentsTag";
+        SyntaxKind[SyntaxKind["JSDocImplementsTag"] = 324] = "JSDocImplementsTag";
+        SyntaxKind[SyntaxKind["JSDocAuthorTag"] = 325] = "JSDocAuthorTag";
+        SyntaxKind[SyntaxKind["JSDocDeprecatedTag"] = 326] = "JSDocDeprecatedTag";
+        SyntaxKind[SyntaxKind["JSDocClassTag"] = 327] = "JSDocClassTag";
+        SyntaxKind[SyntaxKind["JSDocPublicTag"] = 328] = "JSDocPublicTag";
+        SyntaxKind[SyntaxKind["JSDocPrivateTag"] = 329] = "JSDocPrivateTag";
+        SyntaxKind[SyntaxKind["JSDocProtectedTag"] = 330] = "JSDocProtectedTag";
+        SyntaxKind[SyntaxKind["JSDocReadonlyTag"] = 331] = "JSDocReadonlyTag";
+        SyntaxKind[SyntaxKind["JSDocOverrideTag"] = 332] = "JSDocOverrideTag";
+        SyntaxKind[SyntaxKind["JSDocCallbackTag"] = 333] = "JSDocCallbackTag";
+        SyntaxKind[SyntaxKind["JSDocEnumTag"] = 334] = "JSDocEnumTag";
+        SyntaxKind[SyntaxKind["JSDocParameterTag"] = 335] = "JSDocParameterTag";
+        SyntaxKind[SyntaxKind["JSDocReturnTag"] = 336] = "JSDocReturnTag";
+        SyntaxKind[SyntaxKind["JSDocThisTag"] = 337] = "JSDocThisTag";
+        SyntaxKind[SyntaxKind["JSDocTypeTag"] = 338] = "JSDocTypeTag";
+        SyntaxKind[SyntaxKind["JSDocTemplateTag"] = 339] = "JSDocTemplateTag";
+        SyntaxKind[SyntaxKind["JSDocTypedefTag"] = 340] = "JSDocTypedefTag";
+        SyntaxKind[SyntaxKind["JSDocSeeTag"] = 341] = "JSDocSeeTag";
+        SyntaxKind[SyntaxKind["JSDocPropertyTag"] = 342] = "JSDocPropertyTag";
         // Synthesized list
-        SyntaxKind[SyntaxKind["SyntaxList"] = 338] = "SyntaxList";
+        SyntaxKind[SyntaxKind["SyntaxList"] = 343] = "SyntaxList";
         // Transformation nodes
-        SyntaxKind[SyntaxKind["NotEmittedStatement"] = 339] = "NotEmittedStatement";
-        SyntaxKind[SyntaxKind["PartiallyEmittedExpression"] = 340] = "PartiallyEmittedExpression";
-        SyntaxKind[SyntaxKind["CommaListExpression"] = 341] = "CommaListExpression";
-        SyntaxKind[SyntaxKind["MergeDeclarationMarker"] = 342] = "MergeDeclarationMarker";
-        SyntaxKind[SyntaxKind["EndOfDeclarationMarker"] = 343] = "EndOfDeclarationMarker";
-        SyntaxKind[SyntaxKind["SyntheticReferenceExpression"] = 344] = "SyntheticReferenceExpression";
+        SyntaxKind[SyntaxKind["NotEmittedStatement"] = 344] = "NotEmittedStatement";
+        SyntaxKind[SyntaxKind["PartiallyEmittedExpression"] = 345] = "PartiallyEmittedExpression";
+        SyntaxKind[SyntaxKind["CommaListExpression"] = 346] = "CommaListExpression";
+        SyntaxKind[SyntaxKind["MergeDeclarationMarker"] = 347] = "MergeDeclarationMarker";
+        SyntaxKind[SyntaxKind["EndOfDeclarationMarker"] = 348] = "EndOfDeclarationMarker";
+        SyntaxKind[SyntaxKind["SyntheticReferenceExpression"] = 349] = "SyntheticReferenceExpression";
         // Enum value count
-        SyntaxKind[SyntaxKind["Count"] = 345] = "Count";
+        SyntaxKind[SyntaxKind["Count"] = 350] = "Count";
         // Markers
-        SyntaxKind[SyntaxKind["FirstAssignment"] = 62] = "FirstAssignment";
-        SyntaxKind[SyntaxKind["LastAssignment"] = 77] = "LastAssignment";
-        SyntaxKind[SyntaxKind["FirstCompoundAssignment"] = 63] = "FirstCompoundAssignment";
-        SyntaxKind[SyntaxKind["LastCompoundAssignment"] = 77] = "LastCompoundAssignment";
-        SyntaxKind[SyntaxKind["FirstReservedWord"] = 80] = "FirstReservedWord";
-        SyntaxKind[SyntaxKind["LastReservedWord"] = 115] = "LastReservedWord";
-        SyntaxKind[SyntaxKind["FirstKeyword"] = 80] = "FirstKeyword";
-        SyntaxKind[SyntaxKind["LastKeyword"] = 157] = "LastKeyword";
-        SyntaxKind[SyntaxKind["FirstFutureReservedWord"] = 116] = "FirstFutureReservedWord";
-        SyntaxKind[SyntaxKind["LastFutureReservedWord"] = 124] = "LastFutureReservedWord";
-        SyntaxKind[SyntaxKind["FirstTypeNode"] = 173] = "FirstTypeNode";
-        SyntaxKind[SyntaxKind["LastTypeNode"] = 196] = "LastTypeNode";
+        SyntaxKind[SyntaxKind["FirstAssignment"] = 63] = "FirstAssignment";
+        SyntaxKind[SyntaxKind["LastAssignment"] = 78] = "LastAssignment";
+        SyntaxKind[SyntaxKind["FirstCompoundAssignment"] = 64] = "FirstCompoundAssignment";
+        SyntaxKind[SyntaxKind["LastCompoundAssignment"] = 78] = "LastCompoundAssignment";
+        SyntaxKind[SyntaxKind["FirstReservedWord"] = 81] = "FirstReservedWord";
+        SyntaxKind[SyntaxKind["LastReservedWord"] = 116] = "LastReservedWord";
+        SyntaxKind[SyntaxKind["FirstKeyword"] = 81] = "FirstKeyword";
+        SyntaxKind[SyntaxKind["LastKeyword"] = 158] = "LastKeyword";
+        SyntaxKind[SyntaxKind["FirstFutureReservedWord"] = 117] = "FirstFutureReservedWord";
+        SyntaxKind[SyntaxKind["LastFutureReservedWord"] = 125] = "LastFutureReservedWord";
+        SyntaxKind[SyntaxKind["FirstTypeNode"] = 175] = "FirstTypeNode";
+        SyntaxKind[SyntaxKind["LastTypeNode"] = 198] = "LastTypeNode";
         SyntaxKind[SyntaxKind["FirstPunctuation"] = 18] = "FirstPunctuation";
-        SyntaxKind[SyntaxKind["LastPunctuation"] = 77] = "LastPunctuation";
+        SyntaxKind[SyntaxKind["LastPunctuation"] = 78] = "LastPunctuation";
         SyntaxKind[SyntaxKind["FirstToken"] = 0] = "FirstToken";
-        SyntaxKind[SyntaxKind["LastToken"] = 157] = "LastToken";
+        SyntaxKind[SyntaxKind["LastToken"] = 158] = "LastToken";
         SyntaxKind[SyntaxKind["FirstTriviaToken"] = 2] = "FirstTriviaToken";
         SyntaxKind[SyntaxKind["LastTriviaToken"] = 7] = "LastTriviaToken";
         SyntaxKind[SyntaxKind["FirstLiteralToken"] = 8] = "FirstLiteralToken";
@@ -4340,16 +4417,16 @@
         SyntaxKind[SyntaxKind["FirstTemplateToken"] = 14] = "FirstTemplateToken";
         SyntaxKind[SyntaxKind["LastTemplateToken"] = 17] = "LastTemplateToken";
         SyntaxKind[SyntaxKind["FirstBinaryOperator"] = 29] = "FirstBinaryOperator";
-        SyntaxKind[SyntaxKind["LastBinaryOperator"] = 77] = "LastBinaryOperator";
-        SyntaxKind[SyntaxKind["FirstStatement"] = 233] = "FirstStatement";
-        SyntaxKind[SyntaxKind["LastStatement"] = 249] = "LastStatement";
-        SyntaxKind[SyntaxKind["FirstNode"] = 158] = "FirstNode";
-        SyntaxKind[SyntaxKind["FirstJSDocNode"] = 302] = "FirstJSDocNode";
-        SyntaxKind[SyntaxKind["LastJSDocNode"] = 337] = "LastJSDocNode";
-        SyntaxKind[SyntaxKind["FirstJSDocTagNode"] = 317] = "FirstJSDocTagNode";
-        SyntaxKind[SyntaxKind["LastJSDocTagNode"] = 337] = "LastJSDocTagNode";
-        /* @internal */ SyntaxKind[SyntaxKind["FirstContextualKeyword"] = 125] = "FirstContextualKeyword";
-        /* @internal */ SyntaxKind[SyntaxKind["LastContextualKeyword"] = 157] = "LastContextualKeyword";
+        SyntaxKind[SyntaxKind["LastBinaryOperator"] = 78] = "LastBinaryOperator";
+        SyntaxKind[SyntaxKind["FirstStatement"] = 235] = "FirstStatement";
+        SyntaxKind[SyntaxKind["LastStatement"] = 251] = "LastStatement";
+        SyntaxKind[SyntaxKind["FirstNode"] = 159] = "FirstNode";
+        SyntaxKind[SyntaxKind["FirstJSDocNode"] = 304] = "FirstJSDocNode";
+        SyntaxKind[SyntaxKind["LastJSDocNode"] = 342] = "LastJSDocNode";
+        SyntaxKind[SyntaxKind["FirstJSDocTagNode"] = 322] = "FirstJSDocTagNode";
+        SyntaxKind[SyntaxKind["LastJSDocTagNode"] = 342] = "LastJSDocTagNode";
+        /* @internal */ SyntaxKind[SyntaxKind["FirstContextualKeyword"] = 126] = "FirstContextualKeyword";
+        /* @internal */ SyntaxKind[SyntaxKind["LastContextualKeyword"] = 158] = "LastContextualKeyword";
     })(SyntaxKind = ts.SyntaxKind || (ts.SyntaxKind = {}));
     var NodeFlags;
     (function (NodeFlags) {
@@ -4888,6 +4965,7 @@
         NodeCheckFlags[NodeCheckFlags["ClassWithConstructorReference"] = 16777216] = "ClassWithConstructorReference";
         NodeCheckFlags[NodeCheckFlags["ConstructorReferenceInClass"] = 33554432] = "ConstructorReferenceInClass";
         NodeCheckFlags[NodeCheckFlags["ContainsClassWithPrivateIdentifiers"] = 67108864] = "ContainsClassWithPrivateIdentifiers";
+        NodeCheckFlags[NodeCheckFlags["ContainsSuperPropertyInStaticInitializer"] = 134217728] = "ContainsSuperPropertyInStaticInitializer";
     })(NodeCheckFlags = ts.NodeCheckFlags || (ts.NodeCheckFlags = {}));
     var TypeFlags;
     (function (TypeFlags) {
@@ -4957,7 +5035,7 @@
         /* @internal */
         TypeFlags[TypeFlags["Simplifiable"] = 25165824] = "Simplifiable";
         /* @internal */
-        TypeFlags[TypeFlags["Substructure"] = 469237760] = "Substructure";
+        TypeFlags[TypeFlags["Singleton"] = 67358815] = "Singleton";
         // 'Narrowable' types are types where narrowing actually narrows.
         // This *should* be every type other than null, undefined, void, and never
         TypeFlags[TypeFlags["Narrowable"] = 536624127] = "Narrowable";
@@ -5029,21 +5107,21 @@
         ObjectFlags[ObjectFlags["IdenticalBaseTypeExists"] = 67108864] = "IdenticalBaseTypeExists";
         // Flags that require TypeFlags.UnionOrIntersection or TypeFlags.Substitution
         /* @internal */
-        ObjectFlags[ObjectFlags["IsGenericObjectTypeComputed"] = 4194304] = "IsGenericObjectTypeComputed";
+        ObjectFlags[ObjectFlags["IsGenericTypeComputed"] = 4194304] = "IsGenericTypeComputed";
         /* @internal */
         ObjectFlags[ObjectFlags["IsGenericObjectType"] = 8388608] = "IsGenericObjectType";
         /* @internal */
-        ObjectFlags[ObjectFlags["IsGenericIndexTypeComputed"] = 16777216] = "IsGenericIndexTypeComputed";
+        ObjectFlags[ObjectFlags["IsGenericIndexType"] = 16777216] = "IsGenericIndexType";
         /* @internal */
-        ObjectFlags[ObjectFlags["IsGenericIndexType"] = 33554432] = "IsGenericIndexType";
+        ObjectFlags[ObjectFlags["IsGenericType"] = 25165824] = "IsGenericType";
         // Flags that require TypeFlags.Union
         /* @internal */
-        ObjectFlags[ObjectFlags["ContainsIntersections"] = 67108864] = "ContainsIntersections";
+        ObjectFlags[ObjectFlags["ContainsIntersections"] = 33554432] = "ContainsIntersections";
         // Flags that require TypeFlags.Intersection
         /* @internal */
-        ObjectFlags[ObjectFlags["IsNeverIntersectionComputed"] = 67108864] = "IsNeverIntersectionComputed";
+        ObjectFlags[ObjectFlags["IsNeverIntersectionComputed"] = 33554432] = "IsNeverIntersectionComputed";
         /* @internal */
-        ObjectFlags[ObjectFlags["IsNeverIntersection"] = 134217728] = "IsNeverIntersection";
+        ObjectFlags[ObjectFlags["IsNeverIntersection"] = 67108864] = "IsNeverIntersection";
     })(ObjectFlags = ts.ObjectFlags || (ts.ObjectFlags = {}));
     /* @internal */
     var VarianceFlags;
@@ -5070,6 +5148,21 @@
         ElementFlags[ElementFlags["NonRest"] = 11] = "NonRest";
     })(ElementFlags = ts.ElementFlags || (ts.ElementFlags = {}));
     /* @internal */
+    var AccessFlags;
+    (function (AccessFlags) {
+        AccessFlags[AccessFlags["None"] = 0] = "None";
+        AccessFlags[AccessFlags["IncludeUndefined"] = 1] = "IncludeUndefined";
+        AccessFlags[AccessFlags["NoIndexSignatures"] = 2] = "NoIndexSignatures";
+        AccessFlags[AccessFlags["Writing"] = 4] = "Writing";
+        AccessFlags[AccessFlags["CacheSymbol"] = 8] = "CacheSymbol";
+        AccessFlags[AccessFlags["NoTupleBoundsCheck"] = 16] = "NoTupleBoundsCheck";
+        AccessFlags[AccessFlags["ExpressionPosition"] = 32] = "ExpressionPosition";
+        AccessFlags[AccessFlags["ReportDeprecated"] = 64] = "ReportDeprecated";
+        AccessFlags[AccessFlags["SuppressNoImplicitAnyError"] = 128] = "SuppressNoImplicitAnyError";
+        AccessFlags[AccessFlags["Contextual"] = 256] = "Contextual";
+        AccessFlags[AccessFlags["Persistent"] = 1] = "Persistent";
+    })(AccessFlags = ts.AccessFlags || (ts.AccessFlags = {}));
+    /* @internal */
     var JsxReferenceKind;
     (function (JsxReferenceKind) {
         JsxReferenceKind[JsxReferenceKind["Component"] = 0] = "Component";
@@ -5469,6 +5562,8 @@
         TransformFlags[TransformFlags["ContainsDynamicImport"] = 4194304] = "ContainsDynamicImport";
         TransformFlags[TransformFlags["ContainsClassFields"] = 8388608] = "ContainsClassFields";
         TransformFlags[TransformFlags["ContainsPossibleTopLevelAwait"] = 16777216] = "ContainsPossibleTopLevelAwait";
+        TransformFlags[TransformFlags["ContainsLexicalSuper"] = 33554432] = "ContainsLexicalSuper";
+        TransformFlags[TransformFlags["ContainsUpdateExpressionForIdentifier"] = 67108864] = "ContainsUpdateExpressionForIdentifier";
         // Please leave this as 1 << 29.
         // It is the maximum bit we can set before we outgrow the size of a v8 small integer (SMI) on an x86 system.
         // It is a good reminder of how much room we have left
@@ -5494,12 +5589,12 @@
         TransformFlags[TransformFlags["PropertyAccessExcludes"] = 536870912] = "PropertyAccessExcludes";
         TransformFlags[TransformFlags["NodeExcludes"] = 536870912] = "NodeExcludes";
         TransformFlags[TransformFlags["ArrowFunctionExcludes"] = 557748224] = "ArrowFunctionExcludes";
-        TransformFlags[TransformFlags["FunctionExcludes"] = 557756416] = "FunctionExcludes";
-        TransformFlags[TransformFlags["ConstructorExcludes"] = 557752320] = "ConstructorExcludes";
-        TransformFlags[TransformFlags["MethodOrAccessorExcludes"] = 540975104] = "MethodOrAccessorExcludes";
-        TransformFlags[TransformFlags["PropertyExcludes"] = 536879104] = "PropertyExcludes";
+        TransformFlags[TransformFlags["FunctionExcludes"] = 591310848] = "FunctionExcludes";
+        TransformFlags[TransformFlags["ConstructorExcludes"] = 591306752] = "ConstructorExcludes";
+        TransformFlags[TransformFlags["MethodOrAccessorExcludes"] = 574529536] = "MethodOrAccessorExcludes";
+        TransformFlags[TransformFlags["PropertyExcludes"] = 570433536] = "PropertyExcludes";
         TransformFlags[TransformFlags["ClassExcludes"] = 536940544] = "ClassExcludes";
-        TransformFlags[TransformFlags["ModuleExcludes"] = 555888640] = "ModuleExcludes";
+        TransformFlags[TransformFlags["ModuleExcludes"] = 589443072] = "ModuleExcludes";
         TransformFlags[TransformFlags["TypeExcludes"] = -2] = "TypeExcludes";
         TransformFlags[TransformFlags["ObjectLiteralExcludes"] = 536973312] = "ObjectLiteralExcludes";
         TransformFlags[TransformFlags["ArrayLiteralOrCallOrNewExcludes"] = 536887296] = "ArrayLiteralOrCallOrNewExcludes";
@@ -5507,9 +5602,10 @@
         TransformFlags[TransformFlags["ParameterExcludes"] = 536870912] = "ParameterExcludes";
         TransformFlags[TransformFlags["CatchClauseExcludes"] = 536903680] = "CatchClauseExcludes";
         TransformFlags[TransformFlags["BindingPatternExcludes"] = 536887296] = "BindingPatternExcludes";
+        TransformFlags[TransformFlags["ContainsLexicalThisOrSuper"] = 33562624] = "ContainsLexicalThisOrSuper";
         // Propagating flags
         // - Bitmasks for flags that should propagate from a child
-        TransformFlags[TransformFlags["PropertyNamePropagatingFlags"] = 8192] = "PropertyNamePropagatingFlags";
+        TransformFlags[TransformFlags["PropertyNamePropagatingFlags"] = 33562624] = "PropertyNamePropagatingFlags";
         // Masks
         // - Additional bitmasks
     })(TransformFlags = ts.TransformFlags || (ts.TransformFlags = {}));
@@ -5547,6 +5643,8 @@
         /*@internal*/ EmitFlags[EmitFlags["TypeScriptClassWrapper"] = 33554432] = "TypeScriptClassWrapper";
         /*@internal*/ EmitFlags[EmitFlags["NeverApplyImportHelper"] = 67108864] = "NeverApplyImportHelper";
         /*@internal*/ EmitFlags[EmitFlags["IgnoreSourceNewlines"] = 134217728] = "IgnoreSourceNewlines";
+        /*@internal*/ EmitFlags[EmitFlags["Immutable"] = 268435456] = "Immutable";
+        /*@internal*/ EmitFlags[EmitFlags["IndirectCall"] = 536870912] = "IndirectCall";
     })(EmitFlags = ts.EmitFlags || (ts.EmitFlags = {}));
     /**
      * Used by the checker, this enum keeps track of external emit helpers that should be type
@@ -6048,7 +6146,7 @@
         var rest = path.substring(rootLength).split(ts.directorySeparator);
         if (rest.length && !ts.lastOrUndefined(rest))
             rest.pop();
-        return __spreadArray([root], rest);
+        return __spreadArray([root], rest, true);
     }
     /**
      * Parse a path into an array containing a root component (at index 0) and zero or more path
@@ -6107,6 +6205,11 @@
      * Normalize path separators, converting `\` into `/`.
      */
     function normalizeSlashes(path) {
+        var index = path.indexOf("\\");
+        if (index === -1) {
+            return path;
+        }
+        backslashRegExp.lastIndex = index; // prime regex with known position
         return path.replace(backslashRegExp, ts.directorySeparator);
     }
     ts.normalizeSlashes = normalizeSlashes;
@@ -6194,7 +6297,7 @@
         for (var _i = 1; _i < arguments.length; _i++) {
             paths[_i - 1] = arguments[_i];
         }
-        return normalizePath(ts.some(paths) ? combinePaths.apply(void 0, __spreadArray([path], paths)) : normalizeSlashes(path));
+        return normalizePath(ts.some(paths) ? combinePaths.apply(void 0, __spreadArray([path], paths, false)) : normalizeSlashes(path));
     }
     ts.resolvePath = resolvePath;
     /**
@@ -6217,6 +6320,19 @@
     ts.getNormalizedAbsolutePath = getNormalizedAbsolutePath;
     function normalizePath(path) {
         path = normalizeSlashes(path);
+        // Most paths don't require normalization
+        if (!relativePathSegmentRegExp.test(path)) {
+            return path;
+        }
+        // Some paths only require cleanup of `/./` or leading `./`
+        var simplified = path.replace(/\/\.\//g, "/").replace(/^\.\//, "");
+        if (simplified !== path) {
+            path = simplified;
+            if (!relativePathSegmentRegExp.test(path)) {
+                return path;
+            }
+        }
+        // Other paths require full normalization
         var normalized = getPathFromPathComponents(reducePathComponents(getPathComponents(path)));
         return normalized && hasTrailingDirectorySeparator(path) ? ensureTrailingDirectorySeparator(normalized) : normalized;
     }
@@ -6285,7 +6401,7 @@
     ts.changeAnyExtension = changeAnyExtension;
     //// Path Comparisons
     // check path for these segments: '', '.'. '..'
-    var relativePathSegmentRegExp = /(^|\/)\.{0,2}($|\/)/;
+    var relativePathSegmentRegExp = /(?:\/\/)|(?:^|\/)\.\.?(?:$|\/)/;
     function comparePathsWorker(a, b, componentComparer) {
         if (a === b)
             return 0 /* EqualTo */;
@@ -6405,7 +6521,7 @@
         for (; start < fromComponents.length; start++) {
             relative.push("..");
         }
-        return __spreadArray(__spreadArray([""], relative), components);
+        return __spreadArray(__spreadArray([""], relative, true), components, true);
     }
     ts.getPathComponentsRelativeTo = getPathComponentsRelativeTo;
     function getRelativePathFromDirectory(fromDirectory, to, getCanonicalFileNameOrIgnoreCase) {
@@ -7300,6 +7416,7 @@
             }
             var activeSession;
             var profilePath = "./profile.cpuprofile";
+            var hitSystemWatcherLimit = false;
             var Buffer = require("buffer").Buffer;
             var nodeVersion = getNodeMajorVersion();
             var isNode4OrLater = nodeVersion >= 4;
@@ -7336,6 +7453,9 @@
                 write: function (s) {
                     process.stdout.write(s);
                 },
+                getWidthOfTerminal: function () {
+                    return process.stdout.columns;
+                },
                 writeOutputIsTTY: function () {
                     return process.stdout.isTTY;
                 },
@@ -7625,6 +7745,10 @@
                             options = { persistent: true };
                         }
                     }
+                    if (hitSystemWatcherLimit) {
+                        ts.sysLog("sysLog:: " + fileOrDirectory + ":: Defaulting to fsWatchFile");
+                        return watchPresentFileSystemEntryWithFsWatchFile();
+                    }
                     try {
                         var presentWatcher = _fs.watch(fileOrDirectory, options, isLinuxOrMacOs ?
                             callbackChangingToMissingFileSystemEntry :
@@ -7637,6 +7761,8 @@
                         // Catch the exception and use polling instead
                         // Eg. on linux the number of watches are limited and one could easily exhaust watches and the exception ENOSPC is thrown when creating watcher at that point
                         // so instead of throwing error, use fs.watchFile
+                        hitSystemWatcherLimit || (hitSystemWatcherLimit = e.code === "ENOSPC");
+                        ts.sysLog("sysLog:: " + fileOrDirectory + ":: Changing to fsWatchFile");
                         return watchPresentFileSystemEntryWithFsWatchFile();
                     }
                 }
@@ -7656,7 +7782,6 @@
                  * Eg. on linux the number of watches are limited and one could easily exhaust watches and the exception ENOSPC is thrown when creating watcher at that point
                  */
                 function watchPresentFileSystemEntryWithFsWatchFile() {
-                    ts.sysLog("sysLog:: " + fileOrDirectory + ":: Changing to fsWatchFile");
                     return watchFile(fileOrDirectory, createFileWatcherCallback(callback), fallbackPollingInterval, fallbackOptions);
                 }
                 /**
@@ -7775,7 +7900,7 @@
                 }
             }
             function readDirectory(path, extensions, excludes, includes, depth) {
-                return ts.matchFiles(path, extensions, excludes, includes, useCaseSensitiveFileNames, process.cwd(), depth, getAccessibleFileSystemEntries, realpath);
+                return ts.matchFiles(path, extensions, excludes, includes, useCaseSensitiveFileNames, process.cwd(), depth, getAccessibleFileSystemEntries, realpath, directoryExists);
             }
             function fileSystemEntryExists(path, entryKind) {
                 // Since the error thrown by fs.statSync isn't used, we can avoid collecting a stack trace to improve
@@ -7898,7 +8023,6 @@
         An_index_signature_parameter_cannot_have_an_initializer: diag(1020, ts.DiagnosticCategory.Error, "An_index_signature_parameter_cannot_have_an_initializer_1020", "An index signature parameter cannot have an initializer."),
         An_index_signature_must_have_a_type_annotation: diag(1021, ts.DiagnosticCategory.Error, "An_index_signature_must_have_a_type_annotation_1021", "An index signature must have a type annotation."),
         An_index_signature_parameter_must_have_a_type_annotation: diag(1022, ts.DiagnosticCategory.Error, "An_index_signature_parameter_must_have_a_type_annotation_1022", "An index signature parameter must have a type annotation."),
-        An_index_signature_parameter_type_must_be_either_string_or_number: diag(1023, ts.DiagnosticCategory.Error, "An_index_signature_parameter_type_must_be_either_string_or_number_1023", "An index signature parameter type must be either 'string' or 'number'."),
         readonly_modifier_can_only_appear_on_a_property_declaration_or_index_signature: diag(1024, ts.DiagnosticCategory.Error, "readonly_modifier_can_only_appear_on_a_property_declaration_or_index_signature_1024", "'readonly' modifier can only appear on a property declaration or index signature."),
         An_index_signature_cannot_have_a_trailing_comma: diag(1025, ts.DiagnosticCategory.Error, "An_index_signature_cannot_have_a_trailing_comma_1025", "An index signature cannot have a trailing comma."),
         Accessibility_modifier_already_seen: diag(1028, ts.DiagnosticCategory.Error, "Accessibility_modifier_already_seen_1028", "Accessibility modifier already seen."),
@@ -7959,6 +8083,7 @@
         for_await_loops_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules: diag(1103, ts.DiagnosticCategory.Error, "for_await_loops_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_1103", "'for await' loops are only allowed within async functions and at the top levels of modules."),
         A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement: diag(1104, ts.DiagnosticCategory.Error, "A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement_1104", "A 'continue' statement can only be used within an enclosing iteration statement."),
         A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement: diag(1105, ts.DiagnosticCategory.Error, "A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement_1105", "A 'break' statement can only be used within an enclosing iteration or switch statement."),
+        The_left_hand_side_of_a_for_of_statement_may_not_be_async: diag(1106, ts.DiagnosticCategory.Error, "The_left_hand_side_of_a_for_of_statement_may_not_be_async_1106", "The left-hand side of a 'for...of' statement may not be 'async'."),
         Jump_target_cannot_cross_function_boundary: diag(1107, ts.DiagnosticCategory.Error, "Jump_target_cannot_cross_function_boundary_1107", "Jump target cannot cross function boundary."),
         A_return_statement_can_only_be_used_within_a_function_body: diag(1108, ts.DiagnosticCategory.Error, "A_return_statement_can_only_be_used_within_a_function_body_1108", "A 'return' statement can only be used within a function body."),
         Expression_expected: diag(1109, ts.DiagnosticCategory.Error, "Expression_expected_1109", "Expression expected."),
@@ -8045,7 +8170,7 @@
         Decorators_are_not_valid_here: diag(1206, ts.DiagnosticCategory.Error, "Decorators_are_not_valid_here_1206", "Decorators are not valid here."),
         Decorators_cannot_be_applied_to_multiple_get_Slashset_accessors_of_the_same_name: diag(1207, ts.DiagnosticCategory.Error, "Decorators_cannot_be_applied_to_multiple_get_Slashset_accessors_of_the_same_name_1207", "Decorators cannot be applied to multiple get/set accessors of the same name."),
         _0_cannot_be_compiled_under_isolatedModules_because_it_is_considered_a_global_script_file_Add_an_import_export_or_an_empty_export_statement_to_make_it_a_module: diag(1208, ts.DiagnosticCategory.Error, "_0_cannot_be_compiled_under_isolatedModules_because_it_is_considered_a_global_script_file_Add_an_imp_1208", "'{0}' cannot be compiled under '--isolatedModules' because it is considered a global script file. Add an import, export, or an empty 'export {}' statement to make it a module."),
-        Invalid_use_of_0_Class_definitions_are_automatically_in_strict_mode: diag(1210, ts.DiagnosticCategory.Error, "Invalid_use_of_0_Class_definitions_are_automatically_in_strict_mode_1210", "Invalid use of '{0}'. Class definitions are automatically in strict mode."),
+        Code_contained_in_a_class_is_evaluated_in_JavaScript_s_strict_mode_which_does_not_allow_this_use_of_0_For_more_information_see_https_Colon_Slash_Slashdeveloper_mozilla_org_Slashen_US_Slashdocs_SlashWeb_SlashJavaScript_SlashReference_SlashStrict_mode: diag(1210, ts.DiagnosticCategory.Error, "Code_contained_in_a_class_is_evaluated_in_JavaScript_s_strict_mode_which_does_not_allow_this_use_of__1210", "Code contained in a class is evaluated in JavaScript's strict mode which does not allow this use of '{0}'. For more information, see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Strict_mode."),
         A_class_declaration_without_the_default_modifier_must_have_a_name: diag(1211, ts.DiagnosticCategory.Error, "A_class_declaration_without_the_default_modifier_must_have_a_name_1211", "A class declaration without the 'default' modifier must have a name."),
         Identifier_expected_0_is_a_reserved_word_in_strict_mode: diag(1212, ts.DiagnosticCategory.Error, "Identifier_expected_0_is_a_reserved_word_in_strict_mode_1212", "Identifier expected. '{0}' is a reserved word in strict mode."),
         Identifier_expected_0_is_a_reserved_word_in_strict_mode_Class_definitions_are_automatically_in_strict_mode: diag(1213, ts.DiagnosticCategory.Error, "Identifier_expected_0_is_a_reserved_word_in_strict_mode_Class_definitions_are_automatically_in_stric_1213", "Identifier expected. '{0}' is a reserved word in strict mode. Class definitions are automatically in strict mode."),
@@ -8100,6 +8225,8 @@
         Declarations_with_definite_assignment_assertions_must_also_have_type_annotations: diag(1264, ts.DiagnosticCategory.Error, "Declarations_with_definite_assignment_assertions_must_also_have_type_annotations_1264", "Declarations with definite assignment assertions must also have type annotations."),
         A_rest_element_cannot_follow_another_rest_element: diag(1265, ts.DiagnosticCategory.Error, "A_rest_element_cannot_follow_another_rest_element_1265", "A rest element cannot follow another rest element."),
         An_optional_element_cannot_follow_a_rest_element: diag(1266, ts.DiagnosticCategory.Error, "An_optional_element_cannot_follow_a_rest_element_1266", "An optional element cannot follow a rest element."),
+        Property_0_cannot_have_an_initializer_because_it_is_marked_abstract: diag(1267, ts.DiagnosticCategory.Error, "Property_0_cannot_have_an_initializer_because_it_is_marked_abstract_1267", "Property '{0}' cannot have an initializer because it is marked abstract."),
+        An_index_signature_parameter_type_must_be_string_number_symbol_or_a_template_literal_type: diag(1268, ts.DiagnosticCategory.Error, "An_index_signature_parameter_type_must_be_string_number_symbol_or_a_template_literal_type_1268", "An index signature parameter type must be 'string', 'number', 'symbol', or a template literal type."),
         with_statements_are_not_allowed_in_an_async_function_block: diag(1300, ts.DiagnosticCategory.Error, "with_statements_are_not_allowed_in_an_async_function_block_1300", "'with' statements are not allowed in an async function block."),
         await_expressions_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules: diag(1308, ts.DiagnosticCategory.Error, "await_expressions_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_1308", "'await' expressions are only allowed within async functions and at the top levels of modules."),
         Did_you_mean_to_use_a_Colon_An_can_only_follow_a_property_name_when_the_containing_object_literal_is_part_of_a_destructuring_pattern: diag(1312, ts.DiagnosticCategory.Error, "Did_you_mean_to_use_a_Colon_An_can_only_follow_a_property_name_when_the_containing_object_literal_is_1312", "Did you mean to use a ':'? An '=' can only follow a property name when the containing object literal is part of a destructuring pattern."),
@@ -8126,8 +8253,7 @@
         unique_symbol_types_may_not_be_used_on_a_variable_declaration_with_a_binding_name: diag(1333, ts.DiagnosticCategory.Error, "unique_symbol_types_may_not_be_used_on_a_variable_declaration_with_a_binding_name_1333", "'unique symbol' types may not be used on a variable declaration with a binding name."),
         unique_symbol_types_are_only_allowed_on_variables_in_a_variable_statement: diag(1334, ts.DiagnosticCategory.Error, "unique_symbol_types_are_only_allowed_on_variables_in_a_variable_statement_1334", "'unique symbol' types are only allowed on variables in a variable statement."),
         unique_symbol_types_are_not_allowed_here: diag(1335, ts.DiagnosticCategory.Error, "unique_symbol_types_are_not_allowed_here_1335", "'unique symbol' types are not allowed here."),
-        An_index_signature_parameter_type_cannot_be_a_type_alias_Consider_writing_0_Colon_1_Colon_2_instead: diag(1336, ts.DiagnosticCategory.Error, "An_index_signature_parameter_type_cannot_be_a_type_alias_Consider_writing_0_Colon_1_Colon_2_instead_1336", "An index signature parameter type cannot be a type alias. Consider writing '[{0}: {1}]: {2}' instead."),
-        An_index_signature_parameter_type_cannot_be_a_union_type_Consider_using_a_mapped_object_type_instead: diag(1337, ts.DiagnosticCategory.Error, "An_index_signature_parameter_type_cannot_be_a_union_type_Consider_using_a_mapped_object_type_instead_1337", "An index signature parameter type cannot be a union type. Consider using a mapped object type instead."),
+        An_index_signature_parameter_type_cannot_be_a_literal_type_or_generic_type_Consider_using_a_mapped_object_type_instead: diag(1337, ts.DiagnosticCategory.Error, "An_index_signature_parameter_type_cannot_be_a_literal_type_or_generic_type_Consider_using_a_mapped_o_1337", "An index signature parameter type cannot be a literal type or generic type. Consider using a mapped object type instead."),
         infer_declarations_are_only_permitted_in_the_extends_clause_of_a_conditional_type: diag(1338, ts.DiagnosticCategory.Error, "infer_declarations_are_only_permitted_in_the_extends_clause_of_a_conditional_type_1338", "'infer' declarations are only permitted in the 'extends' clause of a conditional type."),
         Module_0_does_not_refer_to_a_value_but_is_used_as_a_value_here: diag(1339, ts.DiagnosticCategory.Error, "Module_0_does_not_refer_to_a_value_but_is_used_as_a_value_here_1339", "Module '{0}' does not refer to a value, but is used as a value here."),
         Module_0_does_not_refer_to_a_type_but_is_used_as_a_type_here_Did_you_mean_typeof_import_0: diag(1340, ts.DiagnosticCategory.Error, "Module_0_does_not_refer_to_a_type_but_is_used_as_a_type_here_Did_you_mean_typeof_import_0_1340", "Module '{0}' does not refer to a type, but is used as a type here. Did you mean 'typeof import('{0}')'?"),
@@ -8157,7 +8283,6 @@
         Convert_all_re_exported_types_to_type_only_exports: diag(1365, ts.DiagnosticCategory.Message, "Convert_all_re_exported_types_to_type_only_exports_1365", "Convert all re-exported types to type-only exports"),
         Split_into_two_separate_import_declarations: diag(1366, ts.DiagnosticCategory.Message, "Split_into_two_separate_import_declarations_1366", "Split into two separate import declarations"),
         Split_all_invalid_type_only_imports: diag(1367, ts.DiagnosticCategory.Message, "Split_all_invalid_type_only_imports_1367", "Split all invalid type-only imports"),
-        Specify_emit_Slashchecking_behavior_for_imports_that_are_only_used_for_types: diag(1368, ts.DiagnosticCategory.Message, "Specify_emit_Slashchecking_behavior_for_imports_that_are_only_used_for_types_1368", "Specify emit/checking behavior for imports that are only used for types"),
         Did_you_mean_0: diag(1369, ts.DiagnosticCategory.Message, "Did_you_mean_0_1369", "Did you mean '{0}'?"),
         This_import_is_never_used_as_a_value_and_must_use_import_type_because_importsNotUsedAsValues_is_set_to_error: diag(1371, ts.DiagnosticCategory.Error, "This_import_is_never_used_as_a_value_and_must_use_import_type_because_importsNotUsedAsValues_is_set__1371", "This import is never used as a value and must use 'import type' because 'importsNotUsedAsValues' is set to 'error'."),
         Convert_to_type_only_import: diag(1373, ts.DiagnosticCategory.Message, "Convert_to_type_only_import_1373", "Convert to type-only import"),
@@ -8221,6 +8346,16 @@
         for_await_loops_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_file_has_no_imports_or_exports_Consider_adding_an_empty_export_to_make_this_file_a_module: diag(1431, ts.DiagnosticCategory.Error, "for_await_loops_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_file_1431", "'for await' loops are only allowed at the top level of a file when that file is a module, but this file has no imports or exports. Consider adding an empty 'export {}' to make this file a module."),
         Top_level_for_await_loops_are_only_allowed_when_the_module_option_is_set_to_esnext_or_system_and_the_target_option_is_set_to_es2017_or_higher: diag(1432, ts.DiagnosticCategory.Error, "Top_level_for_await_loops_are_only_allowed_when_the_module_option_is_set_to_esnext_or_system_and_the_1432", "Top-level 'for await' loops are only allowed when the 'module' option is set to 'esnext' or 'system', and the 'target' option is set to 'es2017' or higher."),
         Decorators_may_not_be_applied_to_this_parameters: diag(1433, ts.DiagnosticCategory.Error, "Decorators_may_not_be_applied_to_this_parameters_1433", "Decorators may not be applied to 'this' parameters."),
+        Unexpected_keyword_or_identifier: diag(1434, ts.DiagnosticCategory.Error, "Unexpected_keyword_or_identifier_1434", "Unexpected keyword or identifier."),
+        Unknown_keyword_or_identifier_Did_you_mean_0: diag(1435, ts.DiagnosticCategory.Error, "Unknown_keyword_or_identifier_Did_you_mean_0_1435", "Unknown keyword or identifier. Did you mean '{0}'?"),
+        Decorators_must_precede_the_name_and_all_keywords_of_property_declarations: diag(1436, ts.DiagnosticCategory.Error, "Decorators_must_precede_the_name_and_all_keywords_of_property_declarations_1436", "Decorators must precede the name and all keywords of property declarations."),
+        Namespace_must_be_given_a_name: diag(1437, ts.DiagnosticCategory.Error, "Namespace_must_be_given_a_name_1437", "Namespace must be given a name."),
+        Interface_must_be_given_a_name: diag(1438, ts.DiagnosticCategory.Error, "Interface_must_be_given_a_name_1438", "Interface must be given a name."),
+        Type_alias_must_be_given_a_name: diag(1439, ts.DiagnosticCategory.Error, "Type_alias_must_be_given_a_name_1439", "Type alias must be given a name."),
+        Variable_declaration_not_allowed_at_this_location: diag(1440, ts.DiagnosticCategory.Error, "Variable_declaration_not_allowed_at_this_location_1440", "Variable declaration not allowed at this location."),
+        Cannot_start_a_function_call_in_a_type_annotation: diag(1441, ts.DiagnosticCategory.Error, "Cannot_start_a_function_call_in_a_type_annotation_1441", "Cannot start a function call in a type annotation."),
+        Expected_for_property_initializer: diag(1442, ts.DiagnosticCategory.Error, "Expected_for_property_initializer_1442", "Expected '=' for property initializer."),
+        Module_declaration_names_may_only_use_or_quoted_strings: diag(1443, ts.DiagnosticCategory.Error, "Module_declaration_names_may_only_use_or_quoted_strings_1443", "Module declaration names may only use ' or \" quoted strings."),
         The_types_of_0_are_incompatible_between_these_types: diag(2200, ts.DiagnosticCategory.Error, "The_types_of_0_are_incompatible_between_these_types_2200", "The types of '{0}' are incompatible between these types."),
         The_types_returned_by_0_are_incompatible_between_these_types: diag(2201, ts.DiagnosticCategory.Error, "The_types_returned_by_0_are_incompatible_between_these_types_2201", "The types returned by '{0}' are incompatible between these types."),
         Call_signature_return_types_0_and_1_are_incompatible: diag(2202, ts.DiagnosticCategory.Error, "Call_signature_return_types_0_and_1_are_incompatible_2202", "Call signature return types '{0}' and '{1}' are incompatible.", /*reportsUnnecessary*/ undefined, /*elidedInCompatabilityPyramid*/ true),
@@ -8256,8 +8391,8 @@
         Types_of_property_0_are_incompatible: diag(2326, ts.DiagnosticCategory.Error, "Types_of_property_0_are_incompatible_2326", "Types of property '{0}' are incompatible."),
         Property_0_is_optional_in_type_1_but_required_in_type_2: diag(2327, ts.DiagnosticCategory.Error, "Property_0_is_optional_in_type_1_but_required_in_type_2_2327", "Property '{0}' is optional in type '{1}' but required in type '{2}'."),
         Types_of_parameters_0_and_1_are_incompatible: diag(2328, ts.DiagnosticCategory.Error, "Types_of_parameters_0_and_1_are_incompatible_2328", "Types of parameters '{0}' and '{1}' are incompatible."),
-        Index_signature_is_missing_in_type_0: diag(2329, ts.DiagnosticCategory.Error, "Index_signature_is_missing_in_type_0_2329", "Index signature is missing in type '{0}'."),
-        Index_signatures_are_incompatible: diag(2330, ts.DiagnosticCategory.Error, "Index_signatures_are_incompatible_2330", "Index signatures are incompatible."),
+        Index_signature_for_type_0_is_missing_in_type_1: diag(2329, ts.DiagnosticCategory.Error, "Index_signature_for_type_0_is_missing_in_type_1_2329", "Index signature for type '{0}' is missing in type '{1}'."),
+        _0_and_1_index_signatures_are_incompatible: diag(2330, ts.DiagnosticCategory.Error, "_0_and_1_index_signatures_are_incompatible_2330", "'{0}' and '{1}' index signatures are incompatible."),
         this_cannot_be_referenced_in_a_module_or_namespace_body: diag(2331, ts.DiagnosticCategory.Error, "this_cannot_be_referenced_in_a_module_or_namespace_body_2331", "'this' cannot be referenced in a module or namespace body."),
         this_cannot_be_referenced_in_current_location: diag(2332, ts.DiagnosticCategory.Error, "this_cannot_be_referenced_in_current_location_2332", "'this' cannot be referenced in current location."),
         this_cannot_be_referenced_in_constructor_arguments: diag(2333, ts.DiagnosticCategory.Error, "this_cannot_be_referenced_in_constructor_arguments_2333", "'this' cannot be referenced in constructor arguments."),
@@ -8301,8 +8436,7 @@
         A_parameter_initializer_is_only_allowed_in_a_function_or_constructor_implementation: diag(2371, ts.DiagnosticCategory.Error, "A_parameter_initializer_is_only_allowed_in_a_function_or_constructor_implementation_2371", "A parameter initializer is only allowed in a function or constructor implementation."),
         Parameter_0_cannot_reference_itself: diag(2372, ts.DiagnosticCategory.Error, "Parameter_0_cannot_reference_itself_2372", "Parameter '{0}' cannot reference itself."),
         Parameter_0_cannot_reference_identifier_1_declared_after_it: diag(2373, ts.DiagnosticCategory.Error, "Parameter_0_cannot_reference_identifier_1_declared_after_it_2373", "Parameter '{0}' cannot reference identifier '{1}' declared after it."),
-        Duplicate_string_index_signature: diag(2374, ts.DiagnosticCategory.Error, "Duplicate_string_index_signature_2374", "Duplicate string index signature."),
-        Duplicate_number_index_signature: diag(2375, ts.DiagnosticCategory.Error, "Duplicate_number_index_signature_2375", "Duplicate number index signature."),
+        Duplicate_index_signature_for_type_0: diag(2374, ts.DiagnosticCategory.Error, "Duplicate_index_signature_for_type_0_2374", "Duplicate index signature for type '{0}'."),
         A_super_call_must_be_the_first_statement_in_the_constructor_when_a_class_contains_initialized_properties_parameter_properties_or_private_identifiers: diag(2376, ts.DiagnosticCategory.Error, "A_super_call_must_be_the_first_statement_in_the_constructor_when_a_class_contains_initialized_proper_2376", "A 'super' call must be the first statement in the constructor when a class contains initialized properties, parameter properties, or private identifiers."),
         Constructors_for_derived_classes_must_contain_a_super_call: diag(2377, ts.DiagnosticCategory.Error, "Constructors_for_derived_classes_must_contain_a_super_call_2377", "Constructors for derived classes must contain a 'super' call."),
         A_get_accessor_must_return_a_value: diag(2378, ts.DiagnosticCategory.Error, "A_get_accessor_must_return_a_value_2378", "A 'get' accessor must return a value."),
@@ -8337,9 +8471,8 @@
         Setters_cannot_return_a_value: diag(2408, ts.DiagnosticCategory.Error, "Setters_cannot_return_a_value_2408", "Setters cannot return a value."),
         Return_type_of_constructor_signature_must_be_assignable_to_the_instance_type_of_the_class: diag(2409, ts.DiagnosticCategory.Error, "Return_type_of_constructor_signature_must_be_assignable_to_the_instance_type_of_the_class_2409", "Return type of constructor signature must be assignable to the instance type of the class."),
         The_with_statement_is_not_supported_All_symbols_in_a_with_block_will_have_type_any: diag(2410, ts.DiagnosticCategory.Error, "The_with_statement_is_not_supported_All_symbols_in_a_with_block_will_have_type_any_2410", "The 'with' statement is not supported. All symbols in a 'with' block will have type 'any'."),
-        Property_0_of_type_1_is_not_assignable_to_string_index_type_2: diag(2411, ts.DiagnosticCategory.Error, "Property_0_of_type_1_is_not_assignable_to_string_index_type_2_2411", "Property '{0}' of type '{1}' is not assignable to string index type '{2}'."),
-        Property_0_of_type_1_is_not_assignable_to_numeric_index_type_2: diag(2412, ts.DiagnosticCategory.Error, "Property_0_of_type_1_is_not_assignable_to_numeric_index_type_2_2412", "Property '{0}' of type '{1}' is not assignable to numeric index type '{2}'."),
-        Numeric_index_type_0_is_not_assignable_to_string_index_type_1: diag(2413, ts.DiagnosticCategory.Error, "Numeric_index_type_0_is_not_assignable_to_string_index_type_1_2413", "Numeric index type '{0}' is not assignable to string index type '{1}'."),
+        Property_0_of_type_1_is_not_assignable_to_2_index_type_3: diag(2411, ts.DiagnosticCategory.Error, "Property_0_of_type_1_is_not_assignable_to_2_index_type_3_2411", "Property '{0}' of type '{1}' is not assignable to '{2}' index type '{3}'."),
+        _0_index_type_1_is_not_assignable_to_2_index_type_3: diag(2413, ts.DiagnosticCategory.Error, "_0_index_type_1_is_not_assignable_to_2_index_type_3_2413", "'{0}' index type '{1}' is not assignable to '{2}' index type '{3}'."),
         Class_name_cannot_be_0: diag(2414, ts.DiagnosticCategory.Error, "Class_name_cannot_be_0_2414", "Class name cannot be '{0}'."),
         Class_0_incorrectly_extends_base_class_1: diag(2415, ts.DiagnosticCategory.Error, "Class_0_incorrectly_extends_base_class_1_2415", "Class '{0}' incorrectly extends base class '{1}'."),
         Property_0_in_type_1_is_not_assignable_to_the_same_property_in_base_type_2: diag(2416, ts.DiagnosticCategory.Error, "Property_0_in_type_1_is_not_assignable_to_the_same_property_in_base_type_2_2416", "Property '{0}' in type '{1}' is not assignable to the same property in base type '{2}'."),
@@ -8486,7 +8619,9 @@
         Property_0_is_used_before_being_assigned: diag(2565, ts.DiagnosticCategory.Error, "Property_0_is_used_before_being_assigned_2565", "Property '{0}' is used before being assigned."),
         A_rest_element_cannot_have_a_property_name: diag(2566, ts.DiagnosticCategory.Error, "A_rest_element_cannot_have_a_property_name_2566", "A rest element cannot have a property name."),
         Enum_declarations_can_only_merge_with_namespace_or_other_enum_declarations: diag(2567, ts.DiagnosticCategory.Error, "Enum_declarations_can_only_merge_with_namespace_or_other_enum_declarations_2567", "Enum declarations can only merge with namespace or other enum declarations."),
+        Property_0_may_not_exist_on_type_1_Did_you_mean_2: diag(2568, ts.DiagnosticCategory.Error, "Property_0_may_not_exist_on_type_1_Did_you_mean_2_2568", "Property '{0}' may not exist on type '{1}'. Did you mean '{2}'?"),
         Type_0_is_not_an_array_type_or_a_string_type_Use_compiler_option_downlevelIteration_to_allow_iterating_of_iterators: diag(2569, ts.DiagnosticCategory.Error, "Type_0_is_not_an_array_type_or_a_string_type_Use_compiler_option_downlevelIteration_to_allow_iterati_2569", "Type '{0}' is not an array type or a string type. Use compiler option '--downlevelIteration' to allow iterating of iterators."),
+        Could_not_find_name_0_Did_you_mean_1: diag(2570, ts.DiagnosticCategory.Error, "Could_not_find_name_0_Did_you_mean_1_2570", "Could not find name '{0}'. Did you mean '{1}'?"),
         Object_is_of_type_unknown: diag(2571, ts.DiagnosticCategory.Error, "Object_is_of_type_unknown_2571", "Object is of type 'unknown'."),
         Rest_signatures_are_incompatible: diag(2572, ts.DiagnosticCategory.Error, "Rest_signatures_are_incompatible_2572", "Rest signatures are incompatible."),
         Property_0_is_incompatible_with_rest_element_type: diag(2573, ts.DiagnosticCategory.Error, "Property_0_is_incompatible_with_rest_element_type_2573", "Property '{0}' is incompatible with rest element type."),
@@ -8547,6 +8682,7 @@
         Cannot_assign_to_0_because_it_is_a_namespace: diag(2631, ts.DiagnosticCategory.Error, "Cannot_assign_to_0_because_it_is_a_namespace_2631", "Cannot assign to '{0}' because it is a namespace."),
         Cannot_assign_to_0_because_it_is_an_import: diag(2632, ts.DiagnosticCategory.Error, "Cannot_assign_to_0_because_it_is_an_import_2632", "Cannot assign to '{0}' because it is an import."),
         JSX_property_access_expressions_cannot_include_JSX_namespace_names: diag(2633, ts.DiagnosticCategory.Error, "JSX_property_access_expressions_cannot_include_JSX_namespace_names_2633", "JSX property access expressions cannot include JSX namespace names"),
+        _0_index_signatures_are_incompatible: diag(2634, ts.DiagnosticCategory.Error, "_0_index_signatures_are_incompatible_2634", "'{0}' index signatures are incompatible."),
         Cannot_augment_module_0_with_value_exports_because_it_resolves_to_a_non_module_entity: diag(2649, ts.DiagnosticCategory.Error, "Cannot_augment_module_0_with_value_exports_because_it_resolves_to_a_non_module_entity_2649", "Cannot augment module '{0}' with value exports because it resolves to a non-module entity."),
         A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_members_defined_in_other_enums: diag(2651, ts.DiagnosticCategory.Error, "A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_memb_2651", "A member initializer in a enum declaration cannot reference members declared after it, including members defined in other enums."),
         Merged_declaration_0_cannot_include_a_default_export_declaration_Consider_adding_a_separate_export_default_0_declaration_instead: diag(2652, ts.DiagnosticCategory.Error, "Merged_declaration_0_cannot_include_a_default_export_declaration_Consider_adding_a_separate_export_d_2652", "Merged declaration '{0}' cannot include a default export declaration. Consider adding a separate 'export default {0}' declaration instead."),
@@ -8709,6 +8845,13 @@
         Property_0_may_not_be_used_in_a_static_property_s_initializer_in_the_same_class_when_target_is_esnext_and_useDefineForClassFields_is_false: diag(2810, ts.DiagnosticCategory.Error, "Property_0_may_not_be_used_in_a_static_property_s_initializer_in_the_same_class_when_target_is_esnex_2810", "Property '{0}' may not be used in a static property's initializer in the same class when 'target' is 'esnext' and 'useDefineForClassFields' is 'false'."),
         Initializer_for_property_0: diag(2811, ts.DiagnosticCategory.Error, "Initializer_for_property_0_2811", "Initializer for property '{0}'"),
         Property_0_does_not_exist_on_type_1_Try_changing_the_lib_compiler_option_to_include_dom: diag(2812, ts.DiagnosticCategory.Error, "Property_0_does_not_exist_on_type_1_Try_changing_the_lib_compiler_option_to_include_dom_2812", "Property '{0}' does not exist on type '{1}'. Try changing the 'lib' compiler option to include 'dom'."),
+        Class_declaration_cannot_implement_overload_list_for_0: diag(2813, ts.DiagnosticCategory.Error, "Class_declaration_cannot_implement_overload_list_for_0_2813", "Class declaration cannot implement overload list for '{0}'."),
+        Function_with_bodies_can_only_merge_with_classes_that_are_ambient: diag(2814, ts.DiagnosticCategory.Error, "Function_with_bodies_can_only_merge_with_classes_that_are_ambient_2814", "Function with bodies can only merge with classes that are ambient."),
+        arguments_cannot_be_referenced_in_property_initializers: diag(2815, ts.DiagnosticCategory.Error, "arguments_cannot_be_referenced_in_property_initializers_2815", "'arguments' cannot be referenced in property initializers."),
+        Cannot_use_this_in_a_static_property_initializer_of_a_decorated_class: diag(2816, ts.DiagnosticCategory.Error, "Cannot_use_this_in_a_static_property_initializer_of_a_decorated_class_2816", "Cannot use 'this' in a static property initializer of a decorated class."),
+        Property_0_has_no_initializer_and_is_not_definitely_assigned_in_a_class_static_block: diag(2817, ts.DiagnosticCategory.Error, "Property_0_has_no_initializer_and_is_not_definitely_assigned_in_a_class_static_block_2817", "Property '{0}' has no initializer and is not definitely assigned in a class static block."),
+        Duplicate_identifier_0_Compiler_reserves_name_1_when_emitting_super_references_in_static_initializers: diag(2818, ts.DiagnosticCategory.Error, "Duplicate_identifier_0_Compiler_reserves_name_1_when_emitting_super_references_in_static_initializer_2818", "Duplicate identifier '{0}'. Compiler reserves name '{1}' when emitting 'super' references in static initializers."),
+        Namespace_name_cannot_be_0: diag(2819, ts.DiagnosticCategory.Error, "Namespace_name_cannot_be_0_2819", "Namespace name cannot be '{0}'."),
         Import_declaration_0_is_using_private_name_1: diag(4000, ts.DiagnosticCategory.Error, "Import_declaration_0_is_using_private_name_1_4000", "Import declaration '{0}' is using private name '{1}'."),
         Type_parameter_0_of_exported_class_has_or_is_using_private_name_1: diag(4002, ts.DiagnosticCategory.Error, "Type_parameter_0_of_exported_class_has_or_is_using_private_name_1_4002", "Type parameter '{0}' of exported class has or is using private name '{1}'."),
         Type_parameter_0_of_exported_interface_has_or_is_using_private_name_1: diag(4004, ts.DiagnosticCategory.Error, "Type_parameter_0_of_exported_interface_has_or_is_using_private_name_1_4004", "Type parameter '{0}' of exported interface has or is using private name '{1}'."),
@@ -8808,6 +8951,8 @@
         This_member_must_have_an_override_modifier_because_it_overrides_a_member_in_the_base_class_0: diag(4114, ts.DiagnosticCategory.Error, "This_member_must_have_an_override_modifier_because_it_overrides_a_member_in_the_base_class_0_4114", "This member must have an 'override' modifier because it overrides a member in the base class '{0}'."),
         This_parameter_property_must_have_an_override_modifier_because_it_overrides_a_member_in_base_class_0: diag(4115, ts.DiagnosticCategory.Error, "This_parameter_property_must_have_an_override_modifier_because_it_overrides_a_member_in_base_class_0_4115", "This parameter property must have an 'override' modifier because it overrides a member in base class '{0}'."),
         This_member_must_have_an_override_modifier_because_it_overrides_an_abstract_method_that_is_declared_in_the_base_class_0: diag(4116, ts.DiagnosticCategory.Error, "This_member_must_have_an_override_modifier_because_it_overrides_an_abstract_method_that_is_declared__4116", "This member must have an 'override' modifier because it overrides an abstract method that is declared in the base class '{0}'."),
+        This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0_Did_you_mean_1: diag(4117, ts.DiagnosticCategory.Error, "This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0_Did_you__4117", "This member cannot have an 'override' modifier because it is not declared in the base class '{0}'. Did you mean '{1}'?"),
+        The_type_of_this_node_cannot_be_serialized_because_its_property_0_cannot_be_serialized: diag(4118, ts.DiagnosticCategory.Error, "The_type_of_this_node_cannot_be_serialized_because_its_property_0_cannot_be_serialized_4118", "The type of this node cannot be serialized because its property '{0}' cannot be serialized."),
         The_current_host_does_not_support_the_0_option: diag(5001, ts.DiagnosticCategory.Error, "The_current_host_does_not_support_the_0_option_5001", "The current host does not support the '{0}' option."),
         Cannot_find_the_common_subdirectory_path_for_the_input_files: diag(5009, ts.DiagnosticCategory.Error, "Cannot_find_the_common_subdirectory_path_for_the_input_files_5009", "Cannot find the common subdirectory path for the input files."),
         File_specification_cannot_end_in_a_recursive_directory_wildcard_Asterisk_Asterisk_Colon_0: diag(5010, ts.DiagnosticCategory.Error, "File_specification_cannot_end_in_a_recursive_directory_wildcard_Asterisk_Asterisk_Colon_0_5010", "File specification cannot end in a recursive directory wildcard ('**'): '{0}'."),
@@ -8866,7 +9011,7 @@
         Generates_a_sourcemap_for_each_corresponding_d_ts_file: diag(6000, ts.DiagnosticCategory.Message, "Generates_a_sourcemap_for_each_corresponding_d_ts_file_6000", "Generates a sourcemap for each corresponding '.d.ts' file."),
         Concatenate_and_emit_output_to_single_file: diag(6001, ts.DiagnosticCategory.Message, "Concatenate_and_emit_output_to_single_file_6001", "Concatenate and emit output to single file."),
         Generates_corresponding_d_ts_file: diag(6002, ts.DiagnosticCategory.Message, "Generates_corresponding_d_ts_file_6002", "Generates corresponding '.d.ts' file."),
-        Specify_the_location_where_debugger_should_locate_map_files_instead_of_generated_locations: diag(6003, ts.DiagnosticCategory.Message, "Specify_the_location_where_debugger_should_locate_map_files_instead_of_generated_locations_6003", "Specify the location where debugger should locate map files instead of generated locations."),
+        Specify_the_location_where_debugger_should_locate_map_files_instead_of_generated_locations: diag(6655, ts.DiagnosticCategory.Message, "Specify_the_location_where_debugger_should_locate_map_files_instead_of_generated_locations_6655", "Specify the location where debugger should locate map files instead of generated locations."),
         Specify_the_location_where_debugger_should_locate_TypeScript_files_instead_of_source_locations: diag(6004, ts.DiagnosticCategory.Message, "Specify_the_location_where_debugger_should_locate_TypeScript_files_instead_of_source_locations_6004", "Specify the location where debugger should locate TypeScript files instead of source locations."),
         Watch_input_files: diag(6005, ts.DiagnosticCategory.Message, "Watch_input_files_6005", "Watch input files."),
         Redirect_output_structure_to_the_directory: diag(6006, ts.DiagnosticCategory.Message, "Redirect_output_structure_to_the_directory_6006", "Redirect output structure to the directory."),
@@ -8878,8 +9023,8 @@
         Skip_type_checking_of_declaration_files: diag(6012, ts.DiagnosticCategory.Message, "Skip_type_checking_of_declaration_files_6012", "Skip type checking of declaration files."),
         Do_not_resolve_the_real_path_of_symlinks: diag(6013, ts.DiagnosticCategory.Message, "Do_not_resolve_the_real_path_of_symlinks_6013", "Do not resolve the real path of symlinks."),
         Only_emit_d_ts_declaration_files: diag(6014, ts.DiagnosticCategory.Message, "Only_emit_d_ts_declaration_files_6014", "Only emit '.d.ts' declaration files."),
-        Specify_ECMAScript_target_version_Colon_ES3_default_ES5_ES2015_ES2016_ES2017_ES2018_ES2019_ES2020_ES2021_or_ESNEXT: diag(6015, ts.DiagnosticCategory.Message, "Specify_ECMAScript_target_version_Colon_ES3_default_ES5_ES2015_ES2016_ES2017_ES2018_ES2019_ES2020_ES_6015", "Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019', 'ES2020', 'ES2021', or 'ESNEXT'."),
-        Specify_module_code_generation_Colon_none_commonjs_amd_system_umd_es2015_es2020_or_ESNext: diag(6016, ts.DiagnosticCategory.Message, "Specify_module_code_generation_Colon_none_commonjs_amd_system_umd_es2015_es2020_or_ESNext_6016", "Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', 'es2020', or 'ESNext'."),
+        Specify_ECMAScript_target_version: diag(6015, ts.DiagnosticCategory.Message, "Specify_ECMAScript_target_version_6015", "Specify ECMAScript target version."),
+        Specify_module_code_generation: diag(6016, ts.DiagnosticCategory.Message, "Specify_module_code_generation_6016", "Specify module code generation."),
         Print_this_message: diag(6017, ts.DiagnosticCategory.Message, "Print_this_message_6017", "Print this message."),
         Print_the_compiler_s_version: diag(6019, ts.DiagnosticCategory.Message, "Print_the_compiler_s_version_6019", "Print the compiler's version."),
         Compile_the_project_given_the_path_to_its_configuration_file_or_to_a_folder_with_a_tsconfig_json: diag(6020, ts.DiagnosticCategory.Message, "Compile_the_project_given_the_path_to_its_configuration_file_or_to_a_folder_with_a_tsconfig_json_6020", "Compile the project given the path to its configuration file, or to a folder with a 'tsconfig.json'."),
@@ -8931,7 +9076,7 @@
         Do_not_report_errors_on_unreachable_code: diag(6077, ts.DiagnosticCategory.Message, "Do_not_report_errors_on_unreachable_code_6077", "Do not report errors on unreachable code."),
         Disallow_inconsistently_cased_references_to_the_same_file: diag(6078, ts.DiagnosticCategory.Message, "Disallow_inconsistently_cased_references_to_the_same_file_6078", "Disallow inconsistently-cased references to the same file."),
         Specify_library_files_to_be_included_in_the_compilation: diag(6079, ts.DiagnosticCategory.Message, "Specify_library_files_to_be_included_in_the_compilation_6079", "Specify library files to be included in the compilation."),
-        Specify_JSX_code_generation_Colon_preserve_react_native_react_react_jsx_or_react_jsxdev: diag(6080, ts.DiagnosticCategory.Message, "Specify_JSX_code_generation_Colon_preserve_react_native_react_react_jsx_or_react_jsxdev_6080", "Specify JSX code generation: 'preserve', 'react-native', 'react', 'react-jsx' or 'react-jsxdev'."),
+        Specify_JSX_code_generation: diag(6080, ts.DiagnosticCategory.Message, "Specify_JSX_code_generation_6080", "Specify JSX code generation."),
         File_0_has_an_unsupported_extension_so_skipping_it: diag(6081, ts.DiagnosticCategory.Message, "File_0_has_an_unsupported_extension_so_skipping_it_6081", "File '{0}' has an unsupported extension, so skipping it."),
         Only_amd_and_system_modules_are_supported_alongside_0: diag(6082, ts.DiagnosticCategory.Error, "Only_amd_and_system_modules_are_supported_alongside_0_6082", "Only 'amd' and 'system' modules are supported alongside --{0}."),
         Base_directory_to_resolve_non_absolute_module_names: diag(6083, ts.DiagnosticCategory.Message, "Base_directory_to_resolve_non_absolute_module_names_6083", "Base directory to resolve non-absolute module names."),
@@ -9013,7 +9158,7 @@
         List_of_folders_to_include_type_definitions_from: diag(6161, ts.DiagnosticCategory.Message, "List_of_folders_to_include_type_definitions_from_6161", "List of folders to include type definitions from."),
         Disable_size_limitations_on_JavaScript_projects: diag(6162, ts.DiagnosticCategory.Message, "Disable_size_limitations_on_JavaScript_projects_6162", "Disable size limitations on JavaScript projects."),
         The_character_set_of_the_input_files: diag(6163, ts.DiagnosticCategory.Message, "The_character_set_of_the_input_files_6163", "The character set of the input files."),
-        Emit_a_UTF_8_Byte_Order_Mark_BOM_in_the_beginning_of_output_files: diag(6164, ts.DiagnosticCategory.Message, "Emit_a_UTF_8_Byte_Order_Mark_BOM_in_the_beginning_of_output_files_6164", "Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files."),
+        Emit_a_UTF_8_Byte_Order_Mark_BOM_in_the_beginning_of_output_files: diag(6622, ts.DiagnosticCategory.Message, "Emit_a_UTF_8_Byte_Order_Mark_BOM_in_the_beginning_of_output_files_6622", "Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files."),
         Do_not_truncate_error_messages: diag(6165, ts.DiagnosticCategory.Message, "Do_not_truncate_error_messages_6165", "Do not truncate error messages."),
         Output_directory_for_generated_declaration_files: diag(6166, ts.DiagnosticCategory.Message, "Output_directory_for_generated_declaration_files_6166", "Output directory for generated declaration files."),
         A_series_of_entries_which_re_map_imports_to_lookup_locations_relative_to_the_baseUrl: diag(6167, ts.DiagnosticCategory.Message, "A_series_of_entries_which_re_map_imports_to_lookup_locations_relative_to_the_baseUrl_6167", "A series of entries which re-map imports to lookup locations relative to the 'baseUrl'."),
@@ -9021,20 +9166,12 @@
         Show_all_compiler_options: diag(6169, ts.DiagnosticCategory.Message, "Show_all_compiler_options_6169", "Show all compiler options."),
         Deprecated_Use_outFile_instead_Concatenate_and_emit_output_to_single_file: diag(6170, ts.DiagnosticCategory.Message, "Deprecated_Use_outFile_instead_Concatenate_and_emit_output_to_single_file_6170", "[Deprecated] Use '--outFile' instead. Concatenate and emit output to single file"),
         Command_line_Options: diag(6171, ts.DiagnosticCategory.Message, "Command_line_Options_6171", "Command-line Options"),
-        Basic_Options: diag(6172, ts.DiagnosticCategory.Message, "Basic_Options_6172", "Basic Options"),
-        Strict_Type_Checking_Options: diag(6173, ts.DiagnosticCategory.Message, "Strict_Type_Checking_Options_6173", "Strict Type-Checking Options"),
-        Module_Resolution_Options: diag(6174, ts.DiagnosticCategory.Message, "Module_Resolution_Options_6174", "Module Resolution Options"),
-        Source_Map_Options: diag(6175, ts.DiagnosticCategory.Message, "Source_Map_Options_6175", "Source Map Options"),
-        Additional_Checks: diag(6176, ts.DiagnosticCategory.Message, "Additional_Checks_6176", "Additional Checks"),
-        Experimental_Options: diag(6177, ts.DiagnosticCategory.Message, "Experimental_Options_6177", "Experimental Options"),
-        Advanced_Options: diag(6178, ts.DiagnosticCategory.Message, "Advanced_Options_6178", "Advanced Options"),
         Provide_full_support_for_iterables_in_for_of_spread_and_destructuring_when_targeting_ES5_or_ES3: diag(6179, ts.DiagnosticCategory.Message, "Provide_full_support_for_iterables_in_for_of_spread_and_destructuring_when_targeting_ES5_or_ES3_6179", "Provide full support for iterables in 'for-of', spread, and destructuring when targeting 'ES5' or 'ES3'."),
         Enable_all_strict_type_checking_options: diag(6180, ts.DiagnosticCategory.Message, "Enable_all_strict_type_checking_options_6180", "Enable all strict type-checking options."),
         List_of_language_service_plugins: diag(6181, ts.DiagnosticCategory.Message, "List_of_language_service_plugins_6181", "List of language service plugins."),
         Scoped_package_detected_looking_in_0: diag(6182, ts.DiagnosticCategory.Message, "Scoped_package_detected_looking_in_0_6182", "Scoped package detected, looking in '{0}'"),
-        Reusing_resolution_of_module_0_to_file_1_from_old_program: diag(6183, ts.DiagnosticCategory.Message, "Reusing_resolution_of_module_0_to_file_1_from_old_program_6183", "Reusing resolution of module '{0}' to file '{1}' from old program."),
-        Reusing_module_resolutions_originating_in_0_since_resolutions_are_unchanged_from_old_program: diag(6184, ts.DiagnosticCategory.Message, "Reusing_module_resolutions_originating_in_0_since_resolutions_are_unchanged_from_old_program_6184", "Reusing module resolutions originating in '{0}' since resolutions are unchanged from old program."),
-        Disable_strict_checking_of_generic_signatures_in_function_types: diag(6185, ts.DiagnosticCategory.Message, "Disable_strict_checking_of_generic_signatures_in_function_types_6185", "Disable strict checking of generic signatures in function types."),
+        Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2: diag(6183, ts.DiagnosticCategory.Message, "Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2_6183", "Reusing resolution of module '{0}' from '{1}' of old program, it was successfully resolved to '{2}'."),
+        Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2_with_Package_ID_3: diag(6184, ts.DiagnosticCategory.Message, "Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2_with_Package__6184", "Reusing resolution of module '{0}' from '{1}' of old program, it was successfully resolved to '{2}' with Package ID '{3}'."),
         Enable_strict_checking_of_function_types: diag(6186, ts.DiagnosticCategory.Message, "Enable_strict_checking_of_function_types_6186", "Enable strict checking of function types."),
         Enable_strict_checking_of_property_initialization_in_classes: diag(6187, ts.DiagnosticCategory.Message, "Enable_strict_checking_of_property_initialization_in_classes_6187", "Enable strict checking of property initialization in classes."),
         Numeric_separators_are_not_allowed_here: diag(6188, ts.DiagnosticCategory.Error, "Numeric_separators_are_not_allowed_here_6188", "Numeric separators are not allowed here."),
@@ -9076,7 +9213,6 @@
         Specify_strategy_for_watching_file_Colon_FixedPollingInterval_default_PriorityPollingInterval_DynamicPriorityPolling_FixedChunkSizePolling_UseFsEvents_UseFsEventsOnParentDirectory: diag(6225, ts.DiagnosticCategory.Message, "Specify_strategy_for_watching_file_Colon_FixedPollingInterval_default_PriorityPollingInterval_Dynami_6225", "Specify strategy for watching file: 'FixedPollingInterval' (default), 'PriorityPollingInterval', 'DynamicPriorityPolling', 'FixedChunkSizePolling', 'UseFsEvents', 'UseFsEventsOnParentDirectory'."),
         Specify_strategy_for_watching_directory_on_platforms_that_don_t_support_recursive_watching_natively_Colon_UseFsEvents_default_FixedPollingInterval_DynamicPriorityPolling_FixedChunkSizePolling: diag(6226, ts.DiagnosticCategory.Message, "Specify_strategy_for_watching_directory_on_platforms_that_don_t_support_recursive_watching_natively__6226", "Specify strategy for watching directory on platforms that don't support recursive watching natively: 'UseFsEvents' (default), 'FixedPollingInterval', 'DynamicPriorityPolling', 'FixedChunkSizePolling'."),
         Specify_strategy_for_creating_a_polling_watch_when_it_fails_to_create_using_file_system_events_Colon_FixedInterval_default_PriorityInterval_DynamicPriority_FixedChunkSize: diag(6227, ts.DiagnosticCategory.Message, "Specify_strategy_for_creating_a_polling_watch_when_it_fails_to_create_using_file_system_events_Colon_6227", "Specify strategy for creating a polling watch when it fails to create using file system events: 'FixedInterval' (default), 'PriorityInterval', 'DynamicPriority', 'FixedChunkSize'."),
-        Synchronously_call_callbacks_and_update_the_state_of_directory_watchers_on_platforms_that_don_t_support_recursive_watching_natively: diag(6228, ts.DiagnosticCategory.Message, "Synchronously_call_callbacks_and_update_the_state_of_directory_watchers_on_platforms_that_don_t_supp_6228", "Synchronously call callbacks and update the state of directory watchers on platforms that don't support recursive watching natively."),
         Tag_0_expects_at_least_1_arguments_but_the_JSX_factory_2_provides_at_most_3: diag(6229, ts.DiagnosticCategory.Error, "Tag_0_expects_at_least_1_arguments_but_the_JSX_factory_2_provides_at_most_3_6229", "Tag '{0}' expects at least '{1}' arguments, but the JSX factory '{2}' provides at most '{3}'."),
         Option_0_can_only_be_specified_in_tsconfig_json_file_or_set_to_false_or_null_on_command_line: diag(6230, ts.DiagnosticCategory.Error, "Option_0_can_only_be_specified_in_tsconfig_json_file_or_set_to_false_or_null_on_command_line_6230", "Option '{0}' can only be specified in 'tsconfig.json' file or set to 'false' or 'null' on command line."),
         Could_not_resolve_the_path_0_with_the_extensions_Colon_1: diag(6231, ts.DiagnosticCategory.Error, "Could_not_resolve_the_path_0_with_the_extensions_Colon_1_6231", "Could not resolve the path '{0}' with the extensions: {1}."),
@@ -9091,6 +9227,21 @@
         File_0_does_not_exist_according_to_earlier_cached_lookups: diag(6240, ts.DiagnosticCategory.Message, "File_0_does_not_exist_according_to_earlier_cached_lookups_6240", "File '{0}' does not exist according to earlier cached lookups."),
         Resolution_for_type_reference_directive_0_was_found_in_cache_from_location_1: diag(6241, ts.DiagnosticCategory.Message, "Resolution_for_type_reference_directive_0_was_found_in_cache_from_location_1_6241", "Resolution for type reference directive '{0}' was found in cache from location '{1}'."),
         Resolving_type_reference_directive_0_containing_file_1: diag(6242, ts.DiagnosticCategory.Message, "Resolving_type_reference_directive_0_containing_file_1_6242", "======== Resolving type reference directive '{0}', containing file '{1}'. ========"),
+        Interpret_optional_property_types_as_written_rather_than_adding_undefined: diag(6243, ts.DiagnosticCategory.Message, "Interpret_optional_property_types_as_written_rather_than_adding_undefined_6243", "Interpret optional property types as written, rather than adding 'undefined'."),
+        Modules: diag(6244, ts.DiagnosticCategory.Message, "Modules_6244", "Modules"),
+        File_Management: diag(6245, ts.DiagnosticCategory.Message, "File_Management_6245", "File Management"),
+        Emit: diag(6246, ts.DiagnosticCategory.Message, "Emit_6246", "Emit"),
+        JavaScript_Support: diag(6247, ts.DiagnosticCategory.Message, "JavaScript_Support_6247", "JavaScript Support"),
+        Type_Checking: diag(6248, ts.DiagnosticCategory.Message, "Type_Checking_6248", "Type Checking"),
+        Editor_Support: diag(6249, ts.DiagnosticCategory.Message, "Editor_Support_6249", "Editor Support"),
+        Watch_and_Build_Modes: diag(6250, ts.DiagnosticCategory.Message, "Watch_and_Build_Modes_6250", "Watch and Build Modes"),
+        Compiler_Diagnostics: diag(6251, ts.DiagnosticCategory.Message, "Compiler_Diagnostics_6251", "Compiler Diagnostics"),
+        Interop_Constraints: diag(6252, ts.DiagnosticCategory.Message, "Interop_Constraints_6252", "Interop Constraints"),
+        Backwards_Compatibility: diag(6253, ts.DiagnosticCategory.Message, "Backwards_Compatibility_6253", "Backwards Compatibility"),
+        Language_and_Environment: diag(6254, ts.DiagnosticCategory.Message, "Language_and_Environment_6254", "Language and Environment"),
+        Projects: diag(6255, ts.DiagnosticCategory.Message, "Projects_6255", "Projects"),
+        Output_Formatting: diag(6256, ts.DiagnosticCategory.Message, "Output_Formatting_6256", "Output Formatting"),
+        Completeness: diag(6257, ts.DiagnosticCategory.Message, "Completeness_6257", "Completeness"),
         Projects_to_reference: diag(6300, ts.DiagnosticCategory.Message, "Projects_to_reference_6300", "Projects to reference"),
         Enable_project_compilation: diag(6302, ts.DiagnosticCategory.Message, "Enable_project_compilation_6302", "Enable project compilation"),
         Composite_projects_may_not_disable_declaration_emit: diag(6304, ts.DiagnosticCategory.Error, "Composite_projects_may_not_disable_declaration_emit_6304", "Composite projects may not disable declaration emit."),
@@ -9116,9 +9267,7 @@
         Project_0_can_t_be_built_because_its_dependency_1_has_errors: diag(6363, ts.DiagnosticCategory.Message, "Project_0_can_t_be_built_because_its_dependency_1_has_errors_6363", "Project '{0}' can't be built because its dependency '{1}' has errors"),
         Build_one_or_more_projects_and_their_dependencies_if_out_of_date: diag(6364, ts.DiagnosticCategory.Message, "Build_one_or_more_projects_and_their_dependencies_if_out_of_date_6364", "Build one or more projects and their dependencies, if out of date"),
         Delete_the_outputs_of_all_projects: diag(6365, ts.DiagnosticCategory.Message, "Delete_the_outputs_of_all_projects_6365", "Delete the outputs of all projects"),
-        Enable_verbose_logging: diag(6366, ts.DiagnosticCategory.Message, "Enable_verbose_logging_6366", "Enable verbose logging"),
         Show_what_would_be_built_or_deleted_if_specified_with_clean: diag(6367, ts.DiagnosticCategory.Message, "Show_what_would_be_built_or_deleted_if_specified_with_clean_6367", "Show what would be built (or deleted, if specified with '--clean')"),
-        Build_all_projects_including_those_that_appear_to_be_up_to_date: diag(6368, ts.DiagnosticCategory.Message, "Build_all_projects_including_those_that_appear_to_be_up_to_date_6368", "Build all projects, including those that appear to be up to date"),
         Option_build_must_be_the_first_command_line_argument: diag(6369, ts.DiagnosticCategory.Error, "Option_build_must_be_the_first_command_line_argument_6369", "Option '--build' must be the first command line argument."),
         Options_0_and_1_cannot_be_combined: diag(6370, ts.DiagnosticCategory.Error, "Options_0_and_1_cannot_be_combined_6370", "Options '{0}' and '{1}' cannot be combined."),
         Updating_unchanged_output_timestamps_of_project_0: diag(6371, ts.DiagnosticCategory.Message, "Updating_unchanged_output_timestamps_of_project_0_6371", "Updating unchanged output timestamps of project '{0}'..."),
@@ -9139,15 +9288,167 @@
         Performance_timings_for_diagnostics_or_extendedDiagnostics_are_not_available_in_this_session_A_native_implementation_of_the_Web_Performance_API_could_not_be_found: diag(6386, ts.DiagnosticCategory.Message, "Performance_timings_for_diagnostics_or_extendedDiagnostics_are_not_available_in_this_session_A_nativ_6386", "Performance timings for '--diagnostics' or '--extendedDiagnostics' are not available in this session. A native implementation of the Web Performance API could not be found."),
         The_signature_0_of_1_is_deprecated: diag(6387, ts.DiagnosticCategory.Suggestion, "The_signature_0_of_1_is_deprecated_6387", "The signature '{0}' of '{1}' is deprecated.", /*reportsUnnecessary*/ undefined, /*elidedInCompatabilityPyramid*/ undefined, /*reportsDeprecated*/ true),
         Project_0_is_being_forcibly_rebuilt: diag(6388, ts.DiagnosticCategory.Message, "Project_0_is_being_forcibly_rebuilt_6388", "Project '{0}' is being forcibly rebuilt"),
+        Reusing_resolution_of_module_0_from_1_of_old_program_it_was_not_resolved: diag(6389, ts.DiagnosticCategory.Message, "Reusing_resolution_of_module_0_from_1_of_old_program_it_was_not_resolved_6389", "Reusing resolution of module '{0}' from '{1}' of old program, it was not resolved."),
+        Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved_to_2: diag(6390, ts.DiagnosticCategory.Message, "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved__6390", "Reusing resolution of type reference directive '{0}' from '{1}' of old program, it was successfully resolved to '{2}'."),
+        Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved_to_2_with_Package_ID_3: diag(6391, ts.DiagnosticCategory.Message, "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved__6391", "Reusing resolution of type reference directive '{0}' from '{1}' of old program, it was successfully resolved to '{2}' with Package ID '{3}'."),
+        Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_not_resolved: diag(6392, ts.DiagnosticCategory.Message, "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_not_resolved_6392", "Reusing resolution of type reference directive '{0}' from '{1}' of old program, it was not resolved."),
+        Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_3: diag(6393, ts.DiagnosticCategory.Message, "Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_6393", "Reusing resolution of module '{0}' from '{1}' found in cache from location '{2}', it was successfully resolved to '{3}'."),
+        Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_3_with_Package_ID_4: diag(6394, ts.DiagnosticCategory.Message, "Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_6394", "Reusing resolution of module '{0}' from '{1}' found in cache from location '{2}', it was successfully resolved to '{3}' with Package ID '{4}'."),
+        Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_not_resolved: diag(6395, ts.DiagnosticCategory.Message, "Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_not_resolved_6395", "Reusing resolution of module '{0}' from '{1}' found in cache from location '{2}', it was not resolved."),
+        Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_3: diag(6396, ts.DiagnosticCategory.Message, "Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_succes_6396", "Reusing resolution of type reference directive '{0}' from '{1}' found in cache from location '{2}', it was successfully resolved to '{3}'."),
+        Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_3_with_Package_ID_4: diag(6397, ts.DiagnosticCategory.Message, "Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_succes_6397", "Reusing resolution of type reference directive '{0}' from '{1}' found in cache from location '{2}', it was successfully resolved to '{3}' with Package ID '{4}'."),
+        Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_not_resolved: diag(6398, ts.DiagnosticCategory.Message, "Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_not_re_6398", "Reusing resolution of type reference directive '{0}' from '{1}' found in cache from location '{2}', it was not resolved."),
         The_expected_type_comes_from_property_0_which_is_declared_here_on_type_1: diag(6500, ts.DiagnosticCategory.Message, "The_expected_type_comes_from_property_0_which_is_declared_here_on_type_1_6500", "The expected type comes from property '{0}' which is declared here on type '{1}'"),
         The_expected_type_comes_from_this_index_signature: diag(6501, ts.DiagnosticCategory.Message, "The_expected_type_comes_from_this_index_signature_6501", "The expected type comes from this index signature."),
         The_expected_type_comes_from_the_return_type_of_this_signature: diag(6502, ts.DiagnosticCategory.Message, "The_expected_type_comes_from_the_return_type_of_this_signature_6502", "The expected type comes from the return type of this signature."),
         Print_names_of_files_that_are_part_of_the_compilation_and_then_stop_processing: diag(6503, ts.DiagnosticCategory.Message, "Print_names_of_files_that_are_part_of_the_compilation_and_then_stop_processing_6503", "Print names of files that are part of the compilation and then stop processing."),
         File_0_is_a_JavaScript_file_Did_you_mean_to_enable_the_allowJs_option: diag(6504, ts.DiagnosticCategory.Error, "File_0_is_a_JavaScript_file_Did_you_mean_to_enable_the_allowJs_option_6504", "File '{0}' is a JavaScript file. Did you mean to enable the 'allowJs' option?"),
         Print_names_of_files_and_the_reason_they_are_part_of_the_compilation: diag(6505, ts.DiagnosticCategory.Message, "Print_names_of_files_and_the_reason_they_are_part_of_the_compilation_6505", "Print names of files and the reason they are part of the compilation."),
-        Include_undefined_in_index_signature_results: diag(6800, ts.DiagnosticCategory.Message, "Include_undefined_in_index_signature_results_6800", "Include 'undefined' in index signature results"),
-        Ensure_overriding_members_in_derived_classes_are_marked_with_an_override_modifier: diag(6801, ts.DiagnosticCategory.Message, "Ensure_overriding_members_in_derived_classes_are_marked_with_an_override_modifier_6801", "Ensure overriding members in derived classes are marked with an 'override' modifier."),
-        Require_undeclared_properties_from_index_signatures_to_use_element_accesses: diag(6802, ts.DiagnosticCategory.Message, "Require_undeclared_properties_from_index_signatures_to_use_element_accesses_6802", "Require undeclared properties from index signatures to use element accesses."),
+        Consider_adding_a_declare_modifier_to_this_class: diag(6506, ts.DiagnosticCategory.Message, "Consider_adding_a_declare_modifier_to_this_class_6506", "Consider adding a 'declare' modifier to this class."),
+        Allow_JavaScript_files_to_be_a_part_of_your_program_Use_the_checkJS_option_to_get_errors_from_these_files: diag(6600, ts.DiagnosticCategory.Message, "Allow_JavaScript_files_to_be_a_part_of_your_program_Use_the_checkJS_option_to_get_errors_from_these__6600", "Allow JavaScript files to be a part of your program. Use the `checkJS` option to get errors from these files."),
+        Allow_import_x_from_y_when_a_module_doesn_t_have_a_default_export: diag(6601, ts.DiagnosticCategory.Message, "Allow_import_x_from_y_when_a_module_doesn_t_have_a_default_export_6601", "Allow 'import x from y' when a module doesn't have a default export."),
+        Allow_accessing_UMD_globals_from_modules: diag(6602, ts.DiagnosticCategory.Message, "Allow_accessing_UMD_globals_from_modules_6602", "Allow accessing UMD globals from modules."),
+        Disable_error_reporting_for_unreachable_code: diag(6603, ts.DiagnosticCategory.Message, "Disable_error_reporting_for_unreachable_code_6603", "Disable error reporting for unreachable code."),
+        Disable_error_reporting_for_unused_labels: diag(6604, ts.DiagnosticCategory.Message, "Disable_error_reporting_for_unused_labels_6604", "Disable error reporting for unused labels."),
+        Ensure_use_strict_is_always_emitted: diag(6605, ts.DiagnosticCategory.Message, "Ensure_use_strict_is_always_emitted_6605", "Ensure 'use strict' is always emitted."),
+        Have_recompiles_in_projects_that_use_incremental_and_watch_mode_assume_that_changes_within_a_file_will_only_affect_files_directly_depending_on_it: diag(6606, ts.DiagnosticCategory.Message, "Have_recompiles_in_projects_that_use_incremental_and_watch_mode_assume_that_changes_within_a_file_wi_6606", "Have recompiles in projects that use `incremental` and `watch` mode assume that changes within a file will only affect files directly depending on it."),
+        Specify_the_base_directory_to_resolve_non_relative_module_names: diag(6607, ts.DiagnosticCategory.Message, "Specify_the_base_directory_to_resolve_non_relative_module_names_6607", "Specify the base directory to resolve non-relative module names."),
+        No_longer_supported_In_early_versions_manually_set_the_text_encoding_for_reading_files: diag(6608, ts.DiagnosticCategory.Message, "No_longer_supported_In_early_versions_manually_set_the_text_encoding_for_reading_files_6608", "No longer supported. In early versions, manually set the text encoding for reading files."),
+        Enable_error_reporting_in_type_checked_JavaScript_files: diag(6609, ts.DiagnosticCategory.Message, "Enable_error_reporting_in_type_checked_JavaScript_files_6609", "Enable error reporting in type-checked JavaScript files."),
+        Enable_constraints_that_allow_a_TypeScript_project_to_be_used_with_project_references: diag(6611, ts.DiagnosticCategory.Message, "Enable_constraints_that_allow_a_TypeScript_project_to_be_used_with_project_references_6611", "Enable constraints that allow a TypeScript project to be used with project references."),
+        Generate_d_ts_files_from_TypeScript_and_JavaScript_files_in_your_project: diag(6612, ts.DiagnosticCategory.Message, "Generate_d_ts_files_from_TypeScript_and_JavaScript_files_in_your_project_6612", "Generate .d.ts files from TypeScript and JavaScript files in your project."),
+        Specify_the_output_directory_for_generated_declaration_files: diag(6613, ts.DiagnosticCategory.Message, "Specify_the_output_directory_for_generated_declaration_files_6613", "Specify the output directory for generated declaration files."),
+        Create_sourcemaps_for_d_ts_files: diag(6614, ts.DiagnosticCategory.Message, "Create_sourcemaps_for_d_ts_files_6614", "Create sourcemaps for d.ts files."),
+        Output_compiler_performance_information_after_building: diag(6615, ts.DiagnosticCategory.Message, "Output_compiler_performance_information_after_building_6615", "Output compiler performance information after building."),
+        Disables_inference_for_type_acquisition_by_looking_at_filenames_in_a_project: diag(6616, ts.DiagnosticCategory.Message, "Disables_inference_for_type_acquisition_by_looking_at_filenames_in_a_project_6616", "Disables inference for type acquisition by looking at filenames in a project."),
+        Reduce_the_number_of_projects_loaded_automatically_by_TypeScript: diag(6617, ts.DiagnosticCategory.Message, "Reduce_the_number_of_projects_loaded_automatically_by_TypeScript_6617", "Reduce the number of projects loaded automatically by TypeScript."),
+        Remove_the_20mb_cap_on_total_source_code_size_for_JavaScript_files_in_the_TypeScript_language_server: diag(6618, ts.DiagnosticCategory.Message, "Remove_the_20mb_cap_on_total_source_code_size_for_JavaScript_files_in_the_TypeScript_language_server_6618", "Remove the 20mb cap on total source code size for JavaScript files in the TypeScript language server."),
+        Opt_a_project_out_of_multi_project_reference_checking_when_editing: diag(6619, ts.DiagnosticCategory.Message, "Opt_a_project_out_of_multi_project_reference_checking_when_editing_6619", "Opt a project out of multi-project reference checking when editing."),
+        Disable_preferring_source_files_instead_of_declaration_files_when_referencing_composite_projects: diag(6620, ts.DiagnosticCategory.Message, "Disable_preferring_source_files_instead_of_declaration_files_when_referencing_composite_projects_6620", "Disable preferring source files instead of declaration files when referencing composite projects"),
+        Emit_more_compliant_but_verbose_and_less_performant_JavaScript_for_iteration: diag(6621, ts.DiagnosticCategory.Message, "Emit_more_compliant_but_verbose_and_less_performant_JavaScript_for_iteration_6621", "Emit more compliant, but verbose and less performant JavaScript for iteration."),
+        Only_output_d_ts_files_and_not_JavaScript_files: diag(6623, ts.DiagnosticCategory.Message, "Only_output_d_ts_files_and_not_JavaScript_files_6623", "Only output d.ts files and not JavaScript files."),
+        Emit_design_type_metadata_for_decorated_declarations_in_source_files: diag(6624, ts.DiagnosticCategory.Message, "Emit_design_type_metadata_for_decorated_declarations_in_source_files_6624", "Emit design-type metadata for decorated declarations in source files."),
+        Disable_the_type_acquisition_for_JavaScript_projects: diag(6625, ts.DiagnosticCategory.Message, "Disable_the_type_acquisition_for_JavaScript_projects_6625", "Disable the type acquisition for JavaScript projects"),
+        Emit_additional_JavaScript_to_ease_support_for_importing_CommonJS_modules_This_enables_allowSyntheticDefaultImports_for_type_compatibility: diag(6626, ts.DiagnosticCategory.Message, "Emit_additional_JavaScript_to_ease_support_for_importing_CommonJS_modules_This_enables_allowSyntheti_6626", "Emit additional JavaScript to ease support for importing CommonJS modules. This enables `allowSyntheticDefaultImports` for type compatibility."),
+        Filters_results_from_the_include_option: diag(6627, ts.DiagnosticCategory.Message, "Filters_results_from_the_include_option_6627", "Filters results from the `include` option."),
+        Remove_a_list_of_directories_from_the_watch_process: diag(6628, ts.DiagnosticCategory.Message, "Remove_a_list_of_directories_from_the_watch_process_6628", "Remove a list of directories from the watch process."),
+        Remove_a_list_of_files_from_the_watch_mode_s_processing: diag(6629, ts.DiagnosticCategory.Message, "Remove_a_list_of_files_from_the_watch_mode_s_processing_6629", "Remove a list of files from the watch mode's processing."),
+        Enable_experimental_support_for_TC39_stage_2_draft_decorators: diag(6630, ts.DiagnosticCategory.Message, "Enable_experimental_support_for_TC39_stage_2_draft_decorators_6630", "Enable experimental support for TC39 stage 2 draft decorators."),
+        Print_files_read_during_the_compilation_including_why_it_was_included: diag(6631, ts.DiagnosticCategory.Message, "Print_files_read_during_the_compilation_including_why_it_was_included_6631", "Print files read during the compilation including why it was included."),
+        Output_more_detailed_compiler_performance_information_after_building: diag(6632, ts.DiagnosticCategory.Message, "Output_more_detailed_compiler_performance_information_after_building_6632", "Output more detailed compiler performance information after building."),
+        Specify_one_or_more_path_or_node_module_references_to_base_configuration_files_from_which_settings_are_inherited: diag(6633, ts.DiagnosticCategory.Message, "Specify_one_or_more_path_or_node_module_references_to_base_configuration_files_from_which_settings_a_6633", "Specify one or more path or node module references to base configuration files from which settings are inherited."),
+        Specify_what_approach_the_watcher_should_use_if_the_system_runs_out_of_native_file_watchers: diag(6634, ts.DiagnosticCategory.Message, "Specify_what_approach_the_watcher_should_use_if_the_system_runs_out_of_native_file_watchers_6634", "Specify what approach the watcher should use if the system runs out of native file watchers."),
+        Include_a_list_of_files_This_does_not_support_glob_patterns_as_opposed_to_include: diag(6635, ts.DiagnosticCategory.Message, "Include_a_list_of_files_This_does_not_support_glob_patterns_as_opposed_to_include_6635", "Include a list of files. This does not support glob patterns, as opposed to `include`."),
+        Build_all_projects_including_those_that_appear_to_be_up_to_date: diag(6636, ts.DiagnosticCategory.Message, "Build_all_projects_including_those_that_appear_to_be_up_to_date_6636", "Build all projects, including those that appear to be up to date"),
+        Ensure_that_casing_is_correct_in_imports: diag(6637, ts.DiagnosticCategory.Message, "Ensure_that_casing_is_correct_in_imports_6637", "Ensure that casing is correct in imports."),
+        Emit_a_v8_CPU_profile_of_the_compiler_run_for_debugging: diag(6638, ts.DiagnosticCategory.Message, "Emit_a_v8_CPU_profile_of_the_compiler_run_for_debugging_6638", "Emit a v8 CPU profile of the compiler run for debugging."),
+        Allow_importing_helper_functions_from_tslib_once_per_project_instead_of_including_them_per_file: diag(6639, ts.DiagnosticCategory.Message, "Allow_importing_helper_functions_from_tslib_once_per_project_instead_of_including_them_per_file_6639", "Allow importing helper functions from tslib once per project, instead of including them per-file."),
+        Specify_a_list_of_glob_patterns_that_match_files_to_be_included_in_compilation: diag(6641, ts.DiagnosticCategory.Message, "Specify_a_list_of_glob_patterns_that_match_files_to_be_included_in_compilation_6641", "Specify a list of glob patterns that match files to be included in compilation."),
+        Save_tsbuildinfo_files_to_allow_for_incremental_compilation_of_projects: diag(6642, ts.DiagnosticCategory.Message, "Save_tsbuildinfo_files_to_allow_for_incremental_compilation_of_projects_6642", "Save .tsbuildinfo files to allow for incremental compilation of projects."),
+        Include_sourcemap_files_inside_the_emitted_JavaScript: diag(6643, ts.DiagnosticCategory.Message, "Include_sourcemap_files_inside_the_emitted_JavaScript_6643", "Include sourcemap files inside the emitted JavaScript."),
+        Include_source_code_in_the_sourcemaps_inside_the_emitted_JavaScript: diag(6644, ts.DiagnosticCategory.Message, "Include_source_code_in_the_sourcemaps_inside_the_emitted_JavaScript_6644", "Include source code in the sourcemaps inside the emitted JavaScript."),
+        Ensure_that_each_file_can_be_safely_transpiled_without_relying_on_other_imports: diag(6645, ts.DiagnosticCategory.Message, "Ensure_that_each_file_can_be_safely_transpiled_without_relying_on_other_imports_6645", "Ensure that each file can be safely transpiled without relying on other imports."),
+        Specify_what_JSX_code_is_generated: diag(6646, ts.DiagnosticCategory.Message, "Specify_what_JSX_code_is_generated_6646", "Specify what JSX code is generated."),
+        Specify_the_JSX_factory_function_used_when_targeting_React_JSX_emit_e_g_React_createElement_or_h: diag(6647, ts.DiagnosticCategory.Message, "Specify_the_JSX_factory_function_used_when_targeting_React_JSX_emit_e_g_React_createElement_or_h_6647", "Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'"),
+        Specify_the_JSX_Fragment_reference_used_for_fragments_when_targeting_React_JSX_emit_e_g_React_Fragment_or_Fragment: diag(6648, ts.DiagnosticCategory.Message, "Specify_the_JSX_Fragment_reference_used_for_fragments_when_targeting_React_JSX_emit_e_g_React_Fragme_6648", "Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'."),
+        Specify_module_specifier_used_to_import_the_JSX_factory_functions_when_using_jsx_Colon_react_jsx_Asterisk: diag(6649, ts.DiagnosticCategory.Message, "Specify_module_specifier_used_to_import_the_JSX_factory_functions_when_using_jsx_Colon_react_jsx_Ast_6649", "Specify module specifier used to import the JSX factory functions when using `jsx: react-jsx*`.`"),
+        Make_keyof_only_return_strings_instead_of_string_numbers_or_symbols_Legacy_option: diag(6650, ts.DiagnosticCategory.Message, "Make_keyof_only_return_strings_instead_of_string_numbers_or_symbols_Legacy_option_6650", "Make keyof only return strings instead of string, numbers or symbols. Legacy option."),
+        Specify_a_set_of_bundled_library_declaration_files_that_describe_the_target_runtime_environment: diag(6651, ts.DiagnosticCategory.Message, "Specify_a_set_of_bundled_library_declaration_files_that_describe_the_target_runtime_environment_6651", "Specify a set of bundled library declaration files that describe the target runtime environment."),
+        Print_the_names_of_emitted_files_after_a_compilation: diag(6652, ts.DiagnosticCategory.Message, "Print_the_names_of_emitted_files_after_a_compilation_6652", "Print the names of emitted files after a compilation."),
+        Print_all_of_the_files_read_during_the_compilation: diag(6653, ts.DiagnosticCategory.Message, "Print_all_of_the_files_read_during_the_compilation_6653", "Print all of the files read during the compilation."),
+        Set_the_language_of_the_messaging_from_TypeScript_This_does_not_affect_emit: diag(6654, ts.DiagnosticCategory.Message, "Set_the_language_of_the_messaging_from_TypeScript_This_does_not_affect_emit_6654", "Set the language of the messaging from TypeScript. This does not affect emit."),
+        Specify_the_maximum_folder_depth_used_for_checking_JavaScript_files_from_node_modules_Only_applicable_with_allowJs: diag(6656, ts.DiagnosticCategory.Message, "Specify_the_maximum_folder_depth_used_for_checking_JavaScript_files_from_node_modules_Only_applicabl_6656", "Specify the maximum folder depth used for checking JavaScript files from `node_modules`. Only applicable with `allowJs`."),
+        Specify_what_module_code_is_generated: diag(6657, ts.DiagnosticCategory.Message, "Specify_what_module_code_is_generated_6657", "Specify what module code is generated."),
+        Specify_how_TypeScript_looks_up_a_file_from_a_given_module_specifier: diag(6658, ts.DiagnosticCategory.Message, "Specify_how_TypeScript_looks_up_a_file_from_a_given_module_specifier_6658", "Specify how TypeScript looks up a file from a given module specifier."),
+        Set_the_newline_character_for_emitting_files: diag(6659, ts.DiagnosticCategory.Message, "Set_the_newline_character_for_emitting_files_6659", "Set the newline character for emitting files."),
+        Disable_emitting_files_from_a_compilation: diag(6660, ts.DiagnosticCategory.Message, "Disable_emitting_files_from_a_compilation_6660", "Disable emitting files from a compilation."),
+        Disable_generating_custom_helper_functions_like_extends_in_compiled_output: diag(6661, ts.DiagnosticCategory.Message, "Disable_generating_custom_helper_functions_like_extends_in_compiled_output_6661", "Disable generating custom helper functions like `__extends` in compiled output."),
+        Disable_emitting_files_if_any_type_checking_errors_are_reported: diag(6662, ts.DiagnosticCategory.Message, "Disable_emitting_files_if_any_type_checking_errors_are_reported_6662", "Disable emitting files if any type checking errors are reported."),
+        Disable_truncating_types_in_error_messages: diag(6663, ts.DiagnosticCategory.Message, "Disable_truncating_types_in_error_messages_6663", "Disable truncating types in error messages."),
+        Enable_error_reporting_for_fallthrough_cases_in_switch_statements: diag(6664, ts.DiagnosticCategory.Message, "Enable_error_reporting_for_fallthrough_cases_in_switch_statements_6664", "Enable error reporting for fallthrough cases in switch statements."),
+        Enable_error_reporting_for_expressions_and_declarations_with_an_implied_any_type: diag(6665, ts.DiagnosticCategory.Message, "Enable_error_reporting_for_expressions_and_declarations_with_an_implied_any_type_6665", "Enable error reporting for expressions and declarations with an implied `any` type.."),
+        Ensure_overriding_members_in_derived_classes_are_marked_with_an_override_modifier: diag(6666, ts.DiagnosticCategory.Message, "Ensure_overriding_members_in_derived_classes_are_marked_with_an_override_modifier_6666", "Ensure overriding members in derived classes are marked with an override modifier."),
+        Enable_error_reporting_for_codepaths_that_do_not_explicitly_return_in_a_function: diag(6667, ts.DiagnosticCategory.Message, "Enable_error_reporting_for_codepaths_that_do_not_explicitly_return_in_a_function_6667", "Enable error reporting for codepaths that do not explicitly return in a function."),
+        Enable_error_reporting_when_this_is_given_the_type_any: diag(6668, ts.DiagnosticCategory.Message, "Enable_error_reporting_when_this_is_given_the_type_any_6668", "Enable error reporting when `this` is given the type `any`."),
+        Disable_adding_use_strict_directives_in_emitted_JavaScript_files: diag(6669, ts.DiagnosticCategory.Message, "Disable_adding_use_strict_directives_in_emitted_JavaScript_files_6669", "Disable adding 'use strict' directives in emitted JavaScript files."),
+        Disable_including_any_library_files_including_the_default_lib_d_ts: diag(6670, ts.DiagnosticCategory.Message, "Disable_including_any_library_files_including_the_default_lib_d_ts_6670", "Disable including any library files, including the default lib.d.ts."),
+        Enforces_using_indexed_accessors_for_keys_declared_using_an_indexed_type: diag(6671, ts.DiagnosticCategory.Message, "Enforces_using_indexed_accessors_for_keys_declared_using_an_indexed_type_6671", "Enforces using indexed accessors for keys declared using an indexed type"),
+        Disallow_import_s_require_s_or_reference_s_from_expanding_the_number_of_files_TypeScript_should_add_to_a_project: diag(6672, ts.DiagnosticCategory.Message, "Disallow_import_s_require_s_or_reference_s_from_expanding_the_number_of_files_TypeScript_should_add__6672", "Disallow `import`s, `require`s or `<reference>`s from expanding the number of files TypeScript should add to a project."),
+        Disable_strict_checking_of_generic_signatures_in_function_types: diag(6673, ts.DiagnosticCategory.Message, "Disable_strict_checking_of_generic_signatures_in_function_types_6673", "Disable strict checking of generic signatures in function types."),
+        Add_undefined_to_a_type_when_accessed_using_an_index: diag(6674, ts.DiagnosticCategory.Message, "Add_undefined_to_a_type_when_accessed_using_an_index_6674", "Add `undefined` to a type when accessed using an index."),
+        Enable_error_reporting_when_a_local_variables_aren_t_read: diag(6675, ts.DiagnosticCategory.Message, "Enable_error_reporting_when_a_local_variables_aren_t_read_6675", "Enable error reporting when a local variables aren't read."),
+        Raise_an_error_when_a_function_parameter_isn_t_read: diag(6676, ts.DiagnosticCategory.Message, "Raise_an_error_when_a_function_parameter_isn_t_read_6676", "Raise an error when a function parameter isn't read"),
+        Deprecated_setting_Use_outFile_instead: diag(6677, ts.DiagnosticCategory.Message, "Deprecated_setting_Use_outFile_instead_6677", "Deprecated setting. Use `outFile` instead."),
+        Specify_an_output_folder_for_all_emitted_files: diag(6678, ts.DiagnosticCategory.Message, "Specify_an_output_folder_for_all_emitted_files_6678", "Specify an output folder for all emitted files."),
+        Specify_a_file_that_bundles_all_outputs_into_one_JavaScript_file_If_declaration_is_true_also_designates_a_file_that_bundles_all_d_ts_output: diag(6679, ts.DiagnosticCategory.Message, "Specify_a_file_that_bundles_all_outputs_into_one_JavaScript_file_If_declaration_is_true_also_designa_6679", "Specify a file that bundles all outputs into one JavaScript file. If `declaration` is true, also designates a file that bundles all .d.ts output."),
+        Specify_a_set_of_entries_that_re_map_imports_to_additional_lookup_locations: diag(6680, ts.DiagnosticCategory.Message, "Specify_a_set_of_entries_that_re_map_imports_to_additional_lookup_locations_6680", "Specify a set of entries that re-map imports to additional lookup locations."),
+        Specify_a_list_of_language_service_plugins_to_include: diag(6681, ts.DiagnosticCategory.Message, "Specify_a_list_of_language_service_plugins_to_include_6681", "Specify a list of language service plugins to include."),
+        Disable_erasing_const_enum_declarations_in_generated_code: diag(6682, ts.DiagnosticCategory.Message, "Disable_erasing_const_enum_declarations_in_generated_code_6682", "Disable erasing `const enum` declarations in generated code."),
+        Disable_resolving_symlinks_to_their_realpath_This_correlates_to_the_same_flag_in_node: diag(6683, ts.DiagnosticCategory.Message, "Disable_resolving_symlinks_to_their_realpath_This_correlates_to_the_same_flag_in_node_6683", "Disable resolving symlinks to their realpath. This correlates to the same flag in node."),
+        Disable_wiping_the_console_in_watch_mode: diag(6684, ts.DiagnosticCategory.Message, "Disable_wiping_the_console_in_watch_mode_6684", "Disable wiping the console in watch mode"),
+        Enable_color_and_formatting_in_TypeScript_s_output_to_make_compiler_errors_easier_to_read: diag(6685, ts.DiagnosticCategory.Message, "Enable_color_and_formatting_in_TypeScript_s_output_to_make_compiler_errors_easier_to_read_6685", "Enable color and formatting in TypeScript's output to make compiler errors easier to read"),
+        Specify_the_object_invoked_for_createElement_This_only_applies_when_targeting_react_JSX_emit: diag(6686, ts.DiagnosticCategory.Message, "Specify_the_object_invoked_for_createElement_This_only_applies_when_targeting_react_JSX_emit_6686", "Specify the object invoked for `createElement`. This only applies when targeting `react` JSX emit."),
+        Specify_an_array_of_objects_that_specify_paths_for_projects_Used_in_project_references: diag(6687, ts.DiagnosticCategory.Message, "Specify_an_array_of_objects_that_specify_paths_for_projects_Used_in_project_references_6687", "Specify an array of objects that specify paths for projects. Used in project references."),
+        Disable_emitting_comments: diag(6688, ts.DiagnosticCategory.Message, "Disable_emitting_comments_6688", "Disable emitting comments."),
+        Enable_importing_json_files: diag(6689, ts.DiagnosticCategory.Message, "Enable_importing_json_files_6689", "Enable importing .json files"),
+        Specify_the_root_folder_within_your_source_files: diag(6690, ts.DiagnosticCategory.Message, "Specify_the_root_folder_within_your_source_files_6690", "Specify the root folder within your source files."),
+        Allow_multiple_folders_to_be_treated_as_one_when_resolving_modules: diag(6691, ts.DiagnosticCategory.Message, "Allow_multiple_folders_to_be_treated_as_one_when_resolving_modules_6691", "Allow multiple folders to be treated as one when resolving modules."),
+        Skip_type_checking_d_ts_files_that_are_included_with_TypeScript: diag(6692, ts.DiagnosticCategory.Message, "Skip_type_checking_d_ts_files_that_are_included_with_TypeScript_6692", "Skip type checking .d.ts files that are included with TypeScript."),
+        Skip_type_checking_all_d_ts_files: diag(6693, ts.DiagnosticCategory.Message, "Skip_type_checking_all_d_ts_files_6693", "Skip type checking all .d.ts files."),
+        Create_source_map_files_for_emitted_JavaScript_files: diag(6694, ts.DiagnosticCategory.Message, "Create_source_map_files_for_emitted_JavaScript_files_6694", "Create source map files for emitted JavaScript files."),
+        Specify_the_root_path_for_debuggers_to_find_the_reference_source_code: diag(6695, ts.DiagnosticCategory.Message, "Specify_the_root_path_for_debuggers_to_find_the_reference_source_code_6695", "Specify the root path for debuggers to find the reference source code."),
+        Check_that_the_arguments_for_bind_call_and_apply_methods_match_the_original_function: diag(6697, ts.DiagnosticCategory.Message, "Check_that_the_arguments_for_bind_call_and_apply_methods_match_the_original_function_6697", "Check that the arguments for `bind`, `call`, and `apply` methods match the original function."),
+        When_assigning_functions_check_to_ensure_parameters_and_the_return_values_are_subtype_compatible: diag(6698, ts.DiagnosticCategory.Message, "When_assigning_functions_check_to_ensure_parameters_and_the_return_values_are_subtype_compatible_6698", "When assigning functions, check to ensure parameters and the return values are subtype-compatible."),
+        When_type_checking_take_into_account_null_and_undefined: diag(6699, ts.DiagnosticCategory.Message, "When_type_checking_take_into_account_null_and_undefined_6699", "When type checking, take into account `null` and `undefined`."),
+        Check_for_class_properties_that_are_declared_but_not_set_in_the_constructor: diag(6700, ts.DiagnosticCategory.Message, "Check_for_class_properties_that_are_declared_but_not_set_in_the_constructor_6700", "Check for class properties that are declared but not set in the constructor."),
+        Disable_emitting_declarations_that_have_internal_in_their_JSDoc_comments: diag(6701, ts.DiagnosticCategory.Message, "Disable_emitting_declarations_that_have_internal_in_their_JSDoc_comments_6701", "Disable emitting declarations that have `@internal` in their JSDoc comments."),
+        Disable_reporting_of_excess_property_errors_during_the_creation_of_object_literals: diag(6702, ts.DiagnosticCategory.Message, "Disable_reporting_of_excess_property_errors_during_the_creation_of_object_literals_6702", "Disable reporting of excess property errors during the creation of object literals."),
+        Suppress_noImplicitAny_errors_when_indexing_objects_that_lack_index_signatures: diag(6703, ts.DiagnosticCategory.Message, "Suppress_noImplicitAny_errors_when_indexing_objects_that_lack_index_signatures_6703", "Suppress `noImplicitAny` errors when indexing objects that lack index signatures."),
+        Synchronously_call_callbacks_and_update_the_state_of_directory_watchers_on_platforms_that_don_t_support_recursive_watching_natively: diag(6704, ts.DiagnosticCategory.Message, "Synchronously_call_callbacks_and_update_the_state_of_directory_watchers_on_platforms_that_don_t_supp_6704", "Synchronously call callbacks and update the state of directory watchers on platforms that don`t support recursive watching natively."),
+        Set_the_JavaScript_language_version_for_emitted_JavaScript_and_include_compatible_library_declarations: diag(6705, ts.DiagnosticCategory.Message, "Set_the_JavaScript_language_version_for_emitted_JavaScript_and_include_compatible_library_declaratio_6705", "Set the JavaScript language version for emitted JavaScript and include compatible library declarations."),
+        Log_paths_used_during_the_moduleResolution_process: diag(6706, ts.DiagnosticCategory.Message, "Log_paths_used_during_the_moduleResolution_process_6706", "Log paths used during the `moduleResolution` process."),
+        Specify_the_folder_for_tsbuildinfo_incremental_compilation_files: diag(6707, ts.DiagnosticCategory.Message, "Specify_the_folder_for_tsbuildinfo_incremental_compilation_files_6707", "Specify the folder for .tsbuildinfo incremental compilation files."),
+        Specify_options_for_automatic_acquisition_of_declaration_files: diag(6709, ts.DiagnosticCategory.Message, "Specify_options_for_automatic_acquisition_of_declaration_files_6709", "Specify options for automatic acquisition of declaration files."),
+        Specify_multiple_folders_that_act_like_Slashnode_modules_Slash_types: diag(6710, ts.DiagnosticCategory.Message, "Specify_multiple_folders_that_act_like_Slashnode_modules_Slash_types_6710", "Specify multiple folders that act like `./node_modules/@types`."),
+        Specify_type_package_names_to_be_included_without_being_referenced_in_a_source_file: diag(6711, ts.DiagnosticCategory.Message, "Specify_type_package_names_to_be_included_without_being_referenced_in_a_source_file_6711", "Specify type package names to be included without being referenced in a source file."),
+        Emit_ECMAScript_standard_compliant_class_fields: diag(6712, ts.DiagnosticCategory.Message, "Emit_ECMAScript_standard_compliant_class_fields_6712", "Emit ECMAScript-standard-compliant class fields."),
+        Enable_verbose_logging: diag(6713, ts.DiagnosticCategory.Message, "Enable_verbose_logging_6713", "Enable verbose logging"),
+        Specify_how_directories_are_watched_on_systems_that_lack_recursive_file_watching_functionality: diag(6714, ts.DiagnosticCategory.Message, "Specify_how_directories_are_watched_on_systems_that_lack_recursive_file_watching_functionality_6714", "Specify how directories are watched on systems that lack recursive file-watching functionality."),
+        Specify_how_the_TypeScript_watch_mode_works: diag(6715, ts.DiagnosticCategory.Message, "Specify_how_the_TypeScript_watch_mode_works_6715", "Specify how the TypeScript watch mode works."),
+        Include_undefined_in_index_signature_results: diag(6716, ts.DiagnosticCategory.Message, "Include_undefined_in_index_signature_results_6716", "Include 'undefined' in index signature results"),
+        Require_undeclared_properties_from_index_signatures_to_use_element_accesses: diag(6717, ts.DiagnosticCategory.Message, "Require_undeclared_properties_from_index_signatures_to_use_element_accesses_6717", "Require undeclared properties from index signatures to use element accesses."),
+        Specify_emit_Slashchecking_behavior_for_imports_that_are_only_used_for_types: diag(6718, ts.DiagnosticCategory.Message, "Specify_emit_Slashchecking_behavior_for_imports_that_are_only_used_for_types_6718", "Specify emit/checking behavior for imports that are only used for types"),
+        Type_catch_clause_variables_as_unknown_instead_of_any: diag(6803, ts.DiagnosticCategory.Message, "Type_catch_clause_variables_as_unknown_instead_of_any_6803", "Type catch clause variables as 'unknown' instead of 'any'."),
+        one_of_Colon: diag(6900, ts.DiagnosticCategory.Message, "one_of_Colon_6900", "one of:"),
+        one_or_more_Colon: diag(6901, ts.DiagnosticCategory.Message, "one_or_more_Colon_6901", "one or more:"),
+        type_Colon: diag(6902, ts.DiagnosticCategory.Message, "type_Colon_6902", "type:"),
+        default_Colon: diag(6903, ts.DiagnosticCategory.Message, "default_Colon_6903", "default:"),
+        module_system_or_esModuleInterop: diag(6904, ts.DiagnosticCategory.Message, "module_system_or_esModuleInterop_6904", "module === \"system\" or esModuleInterop"),
+        false_unless_strict_is_set: diag(6905, ts.DiagnosticCategory.Message, "false_unless_strict_is_set_6905", "`false`, unless `strict` is set"),
+        false_unless_composite_is_set: diag(6906, ts.DiagnosticCategory.Message, "false_unless_composite_is_set_6906", "`false`, unless `composite` is set"),
+        node_modules_bower_components_jspm_packages_plus_the_value_of_outDir_if_one_is_specified: diag(6907, ts.DiagnosticCategory.Message, "node_modules_bower_components_jspm_packages_plus_the_value_of_outDir_if_one_is_specified_6907", "`[\"node_modules\", \"bower_components\", \"jspm_packages\"]`, plus the value of `outDir` if one is specified."),
+        if_files_is_specified_otherwise_Asterisk_Asterisk_Slash_Asterisk: diag(6908, ts.DiagnosticCategory.Message, "if_files_is_specified_otherwise_Asterisk_Asterisk_Slash_Asterisk_6908", "`[]` if `files` is specified, otherwise `[\"**/*\"]`"),
+        true_if_composite_false_otherwise: diag(6909, ts.DiagnosticCategory.Message, "true_if_composite_false_otherwise_6909", "`true` if `composite`, `false` otherwise"),
+        module_AMD_or_UMD_or_System_or_ES6_then_Classic_Otherwise_Node: diag(69010, ts.DiagnosticCategory.Message, "module_AMD_or_UMD_or_System_or_ES6_then_Classic_Otherwise_Node_69010", "module === `AMD` or `UMD` or `System` or `ES6`, then `Classic`, Otherwise `Node`"),
+        Computed_from_the_list_of_input_files: diag(6911, ts.DiagnosticCategory.Message, "Computed_from_the_list_of_input_files_6911", "Computed from the list of input files"),
+        Platform_specific: diag(6912, ts.DiagnosticCategory.Message, "Platform_specific_6912", "Platform specific"),
+        You_can_learn_about_all_of_the_compiler_options_at_0: diag(6913, ts.DiagnosticCategory.Message, "You_can_learn_about_all_of_the_compiler_options_at_0_6913", "You can learn about all of the compiler options at {0}"),
+        Including_watch_w_will_start_watching_the_current_project_for_the_file_changes_Once_set_you_can_config_watch_mode_with_Colon: diag(6914, ts.DiagnosticCategory.Message, "Including_watch_w_will_start_watching_the_current_project_for_the_file_changes_Once_set_you_can_conf_6914", "Including --watch, -w will start watching the current project for the file changes. Once set, you can config watch mode with:"),
+        Using_build_b_will_make_tsc_behave_more_like_a_build_orchestrator_than_a_compiler_This_is_used_to_trigger_building_composite_projects_which_you_can_learn_more_about_at_0: diag(6915, ts.DiagnosticCategory.Message, "Using_build_b_will_make_tsc_behave_more_like_a_build_orchestrator_than_a_compiler_This_is_used_to_tr_6915", "Using --build, -b will make tsc behave more like a build orchestrator than a compiler. This is used to trigger building composite projects which you can learn more about at {0}"),
+        COMMON_COMMANDS: diag(6916, ts.DiagnosticCategory.Message, "COMMON_COMMANDS_6916", "COMMON COMMANDS"),
+        ALL_COMPILER_OPTIONS: diag(6917, ts.DiagnosticCategory.Message, "ALL_COMPILER_OPTIONS_6917", "ALL COMPILER OPTIONS"),
+        WATCH_OPTIONS: diag(6918, ts.DiagnosticCategory.Message, "WATCH_OPTIONS_6918", "WATCH OPTIONS"),
+        BUILD_OPTIONS: diag(6919, ts.DiagnosticCategory.Message, "BUILD_OPTIONS_6919", "BUILD OPTIONS"),
+        COMMON_COMPILER_OPTIONS: diag(6920, ts.DiagnosticCategory.Message, "COMMON_COMPILER_OPTIONS_6920", "COMMON COMPILER OPTIONS"),
+        COMMAND_LINE_FLAGS: diag(6921, ts.DiagnosticCategory.Message, "COMMAND_LINE_FLAGS_6921", "COMMAND LINE FLAGS"),
+        tsc_Colon_The_TypeScript_Compiler: diag(6922, ts.DiagnosticCategory.Message, "tsc_Colon_The_TypeScript_Compiler_6922", "tsc: The TypeScript Compiler"),
+        Compiles_the_current_project_tsconfig_json_in_the_working_directory: diag(6923, ts.DiagnosticCategory.Message, "Compiles_the_current_project_tsconfig_json_in_the_working_directory_6923", "Compiles the current project (tsconfig.json in the working directory.)"),
+        Ignoring_tsconfig_json_compiles_the_specified_files_with_default_compiler_options: diag(6924, ts.DiagnosticCategory.Message, "Ignoring_tsconfig_json_compiles_the_specified_files_with_default_compiler_options_6924", "Ignoring tsconfig.json, compiles the specified files with default compiler options."),
+        Build_a_composite_project_in_the_working_directory: diag(6925, ts.DiagnosticCategory.Message, "Build_a_composite_project_in_the_working_directory_6925", "Build a composite project in the working directory."),
+        Creates_a_tsconfig_json_with_the_recommended_settings_in_the_working_directory: diag(6926, ts.DiagnosticCategory.Message, "Creates_a_tsconfig_json_with_the_recommended_settings_in_the_working_directory_6926", "Creates a tsconfig.json with the recommended settings in the working directory."),
+        Compiles_the_TypeScript_project_located_at_the_specified_path: diag(6927, ts.DiagnosticCategory.Message, "Compiles_the_TypeScript_project_located_at_the_specified_path_6927", "Compiles the TypeScript project located at the specified path."),
+        An_expanded_version_of_this_information_showing_all_possible_compiler_options: diag(6928, ts.DiagnosticCategory.Message, "An_expanded_version_of_this_information_showing_all_possible_compiler_options_6928", "An expanded version of this information, showing all possible compiler options"),
+        Compiles_the_current_project_with_additional_settings: diag(6929, ts.DiagnosticCategory.Message, "Compiles_the_current_project_with_additional_settings_6929", "Compiles the current project, with additional settings."),
         Variable_0_implicitly_has_an_1_type: diag(7005, ts.DiagnosticCategory.Error, "Variable_0_implicitly_has_an_1_type_7005", "Variable '{0}' implicitly has an '{1}' type."),
         Parameter_0_implicitly_has_an_1_type: diag(7006, ts.DiagnosticCategory.Error, "Parameter_0_implicitly_has_an_1_type_7006", "Parameter '{0}' implicitly has an '{1}' type."),
         Member_0_implicitly_has_an_1_type: diag(7008, ts.DiagnosticCategory.Error, "Member_0_implicitly_has_an_1_type_7008", "Member '{0}' implicitly has an '{1}' type."),
@@ -9381,7 +9682,6 @@
         Add_names_to_all_parameters_without_names: diag(95073, ts.DiagnosticCategory.Message, "Add_names_to_all_parameters_without_names_95073", "Add names to all parameters without names"),
         Enable_the_experimentalDecorators_option_in_your_configuration_file: diag(95074, ts.DiagnosticCategory.Message, "Enable_the_experimentalDecorators_option_in_your_configuration_file_95074", "Enable the 'experimentalDecorators' option in your configuration file"),
         Convert_parameters_to_destructured_object: diag(95075, ts.DiagnosticCategory.Message, "Convert_parameters_to_destructured_object_95075", "Convert parameters to destructured object"),
-        Allow_accessing_UMD_globals_from_modules: diag(95076, ts.DiagnosticCategory.Message, "Allow_accessing_UMD_globals_from_modules_95076", "Allow accessing UMD globals from modules."),
         Extract_type: diag(95077, ts.DiagnosticCategory.Message, "Extract_type_95077", "Extract type"),
         Extract_to_type_alias: diag(95078, ts.DiagnosticCategory.Message, "Extract_to_type_alias_95078", "Extract to type alias"),
         Extract_to_typedef: diag(95079, ts.DiagnosticCategory.Message, "Extract_to_typedef_95079", "Extract to typedef"),
@@ -9469,6 +9769,11 @@
         Remove_override_modifier: diag(95161, ts.DiagnosticCategory.Message, "Remove_override_modifier_95161", "Remove 'override' modifier"),
         Add_all_missing_override_modifiers: diag(95162, ts.DiagnosticCategory.Message, "Add_all_missing_override_modifiers_95162", "Add all missing 'override' modifiers"),
         Remove_all_unnecessary_override_modifiers: diag(95163, ts.DiagnosticCategory.Message, "Remove_all_unnecessary_override_modifiers_95163", "Remove all unnecessary 'override' modifiers"),
+        Can_only_convert_named_export: diag(95164, ts.DiagnosticCategory.Message, "Can_only_convert_named_export_95164", "Can only convert named export"),
+        Add_missing_properties: diag(95165, ts.DiagnosticCategory.Message, "Add_missing_properties_95165", "Add missing properties"),
+        Add_all_missing_properties: diag(95166, ts.DiagnosticCategory.Message, "Add_all_missing_properties_95166", "Add all missing properties"),
+        Add_missing_attributes: diag(95167, ts.DiagnosticCategory.Message, "Add_missing_attributes_95167", "Add missing attributes"),
+        Add_all_missing_attributes: diag(95168, ts.DiagnosticCategory.Message, "Add_all_missing_attributes_95168", "Add all missing attributes"),
         No_value_exists_in_scope_for_the_shorthand_property_0_Either_declare_one_or_provide_an_initializer: diag(18004, ts.DiagnosticCategory.Error, "No_value_exists_in_scope_for_the_shorthand_property_0_Either_declare_one_or_provide_an_initializer_18004", "No value exists in scope for the shorthand property '{0}'. Either declare one or provide an initializer."),
         Classes_may_not_have_a_field_named_constructor: diag(18006, ts.DiagnosticCategory.Error, "Classes_may_not_have_a_field_named_constructor_18006", "Classes may not have a field named 'constructor'."),
         JSX_expressions_may_not_use_the_comma_operator_Did_you_mean_to_write_an_array: diag(18007, ts.DiagnosticCategory.Error, "JSX_expressions_may_not_use_the_comma_operator_Did_you_mean_to_write_an_array_18007", "JSX expressions may not use the comma operator. Did you mean to write an array?"),
@@ -9495,6 +9800,10 @@
         Specify_the_JSX_fragment_factory_function_to_use_when_targeting_react_JSX_emit_with_jsxFactory_compiler_option_is_specified_e_g_Fragment: diag(18034, ts.DiagnosticCategory.Message, "Specify_the_JSX_fragment_factory_function_to_use_when_targeting_react_JSX_emit_with_jsxFactory_compi_18034", "Specify the JSX fragment factory function to use when targeting 'react' JSX emit with 'jsxFactory' compiler option is specified, e.g. 'Fragment'."),
         Invalid_value_for_jsxFragmentFactory_0_is_not_a_valid_identifier_or_qualified_name: diag(18035, ts.DiagnosticCategory.Error, "Invalid_value_for_jsxFragmentFactory_0_is_not_a_valid_identifier_or_qualified_name_18035", "Invalid value for 'jsxFragmentFactory'. '{0}' is not a valid identifier or qualified-name."),
         Class_decorators_can_t_be_used_with_static_private_identifier_Consider_removing_the_experimental_decorator: diag(18036, ts.DiagnosticCategory.Error, "Class_decorators_can_t_be_used_with_static_private_identifier_Consider_removing_the_experimental_dec_18036", "Class decorators can't be used with static private identifier. Consider removing the experimental decorator."),
+        Await_expression_cannot_be_used_inside_a_class_static_block: diag(18037, ts.DiagnosticCategory.Error, "Await_expression_cannot_be_used_inside_a_class_static_block_18037", "Await expression cannot be used inside a class static block."),
+        For_await_loops_cannot_be_used_inside_a_class_static_block: diag(18038, ts.DiagnosticCategory.Error, "For_await_loops_cannot_be_used_inside_a_class_static_block_18038", "'For await' loops cannot be used inside a class static block."),
+        Invalid_use_of_0_It_cannot_be_used_inside_a_class_static_block: diag(18039, ts.DiagnosticCategory.Error, "Invalid_use_of_0_It_cannot_be_used_inside_a_class_static_block_18039", "Invalid use of '{0}'. It cannot be used inside a class static block."),
+        A_return_statement_cannot_be_used_inside_a_class_static_block: diag(18041, ts.DiagnosticCategory.Error, "A_return_statement_cannot_be_used_inside_a_class_static_block_18041", "A 'return' statement cannot be used inside a class static block."),
     };
 })(ts || (ts = {}));
 var ts;
@@ -9502,7 +9811,7 @@
     var _a;
     /* @internal */
     function tokenIsIdentifierOrKeyword(token) {
-        return token >= 78 /* Identifier */;
+        return token >= 79 /* Identifier */;
     }
     ts.tokenIsIdentifierOrKeyword = tokenIsIdentifierOrKeyword;
     /* @internal */
@@ -9510,89 +9819,90 @@
         return token === 31 /* GreaterThanToken */ || tokenIsIdentifierOrKeyword(token);
     }
     ts.tokenIsIdentifierOrKeywordOrGreaterThan = tokenIsIdentifierOrKeywordOrGreaterThan;
-    var textToKeywordObj = (_a = {
-            abstract: 125 /* AbstractKeyword */,
-            any: 128 /* AnyKeyword */,
-            as: 126 /* AsKeyword */,
-            asserts: 127 /* AssertsKeyword */,
-            bigint: 155 /* BigIntKeyword */,
-            boolean: 131 /* BooleanKeyword */,
-            break: 80 /* BreakKeyword */,
-            case: 81 /* CaseKeyword */,
-            catch: 82 /* CatchKeyword */,
-            class: 83 /* ClassKeyword */,
-            continue: 85 /* ContinueKeyword */,
-            const: 84 /* ConstKeyword */
+    /** @internal */
+    ts.textToKeywordObj = (_a = {
+            abstract: 126 /* AbstractKeyword */,
+            any: 129 /* AnyKeyword */,
+            as: 127 /* AsKeyword */,
+            asserts: 128 /* AssertsKeyword */,
+            bigint: 156 /* BigIntKeyword */,
+            boolean: 132 /* BooleanKeyword */,
+            break: 81 /* BreakKeyword */,
+            case: 82 /* CaseKeyword */,
+            catch: 83 /* CatchKeyword */,
+            class: 84 /* ClassKeyword */,
+            continue: 86 /* ContinueKeyword */,
+            const: 85 /* ConstKeyword */
         },
-        _a["" + "constructor"] = 132 /* ConstructorKeyword */,
-        _a.debugger = 86 /* DebuggerKeyword */,
-        _a.declare = 133 /* DeclareKeyword */,
-        _a.default = 87 /* DefaultKeyword */,
-        _a.delete = 88 /* DeleteKeyword */,
-        _a.do = 89 /* DoKeyword */,
-        _a.else = 90 /* ElseKeyword */,
-        _a.enum = 91 /* EnumKeyword */,
-        _a.export = 92 /* ExportKeyword */,
-        _a.extends = 93 /* ExtendsKeyword */,
-        _a.false = 94 /* FalseKeyword */,
-        _a.finally = 95 /* FinallyKeyword */,
-        _a.for = 96 /* ForKeyword */,
-        _a.from = 153 /* FromKeyword */,
-        _a.function = 97 /* FunctionKeyword */,
-        _a.get = 134 /* GetKeyword */,
-        _a.if = 98 /* IfKeyword */,
-        _a.implements = 116 /* ImplementsKeyword */,
-        _a.import = 99 /* ImportKeyword */,
-        _a.in = 100 /* InKeyword */,
-        _a.infer = 135 /* InferKeyword */,
-        _a.instanceof = 101 /* InstanceOfKeyword */,
-        _a.interface = 117 /* InterfaceKeyword */,
-        _a.intrinsic = 136 /* IntrinsicKeyword */,
-        _a.is = 137 /* IsKeyword */,
-        _a.keyof = 138 /* KeyOfKeyword */,
-        _a.let = 118 /* LetKeyword */,
-        _a.module = 139 /* ModuleKeyword */,
-        _a.namespace = 140 /* NamespaceKeyword */,
-        _a.never = 141 /* NeverKeyword */,
-        _a.new = 102 /* NewKeyword */,
-        _a.null = 103 /* NullKeyword */,
-        _a.number = 144 /* NumberKeyword */,
-        _a.object = 145 /* ObjectKeyword */,
-        _a.package = 119 /* PackageKeyword */,
-        _a.private = 120 /* PrivateKeyword */,
-        _a.protected = 121 /* ProtectedKeyword */,
-        _a.public = 122 /* PublicKeyword */,
-        _a.override = 156 /* OverrideKeyword */,
-        _a.readonly = 142 /* ReadonlyKeyword */,
-        _a.require = 143 /* RequireKeyword */,
-        _a.global = 154 /* GlobalKeyword */,
-        _a.return = 104 /* ReturnKeyword */,
-        _a.set = 146 /* SetKeyword */,
-        _a.static = 123 /* StaticKeyword */,
-        _a.string = 147 /* StringKeyword */,
-        _a.super = 105 /* SuperKeyword */,
-        _a.switch = 106 /* SwitchKeyword */,
-        _a.symbol = 148 /* SymbolKeyword */,
-        _a.this = 107 /* ThisKeyword */,
-        _a.throw = 108 /* ThrowKeyword */,
-        _a.true = 109 /* TrueKeyword */,
-        _a.try = 110 /* TryKeyword */,
-        _a.type = 149 /* TypeKeyword */,
-        _a.typeof = 111 /* TypeOfKeyword */,
-        _a.undefined = 150 /* UndefinedKeyword */,
-        _a.unique = 151 /* UniqueKeyword */,
-        _a.unknown = 152 /* UnknownKeyword */,
-        _a.var = 112 /* VarKeyword */,
-        _a.void = 113 /* VoidKeyword */,
-        _a.while = 114 /* WhileKeyword */,
-        _a.with = 115 /* WithKeyword */,
-        _a.yield = 124 /* YieldKeyword */,
-        _a.async = 129 /* AsyncKeyword */,
-        _a.await = 130 /* AwaitKeyword */,
-        _a.of = 157 /* OfKeyword */,
+        _a["" + "constructor"] = 133 /* ConstructorKeyword */,
+        _a.debugger = 87 /* DebuggerKeyword */,
+        _a.declare = 134 /* DeclareKeyword */,
+        _a.default = 88 /* DefaultKeyword */,
+        _a.delete = 89 /* DeleteKeyword */,
+        _a.do = 90 /* DoKeyword */,
+        _a.else = 91 /* ElseKeyword */,
+        _a.enum = 92 /* EnumKeyword */,
+        _a.export = 93 /* ExportKeyword */,
+        _a.extends = 94 /* ExtendsKeyword */,
+        _a.false = 95 /* FalseKeyword */,
+        _a.finally = 96 /* FinallyKeyword */,
+        _a.for = 97 /* ForKeyword */,
+        _a.from = 154 /* FromKeyword */,
+        _a.function = 98 /* FunctionKeyword */,
+        _a.get = 135 /* GetKeyword */,
+        _a.if = 99 /* IfKeyword */,
+        _a.implements = 117 /* ImplementsKeyword */,
+        _a.import = 100 /* ImportKeyword */,
+        _a.in = 101 /* InKeyword */,
+        _a.infer = 136 /* InferKeyword */,
+        _a.instanceof = 102 /* InstanceOfKeyword */,
+        _a.interface = 118 /* InterfaceKeyword */,
+        _a.intrinsic = 137 /* IntrinsicKeyword */,
+        _a.is = 138 /* IsKeyword */,
+        _a.keyof = 139 /* KeyOfKeyword */,
+        _a.let = 119 /* LetKeyword */,
+        _a.module = 140 /* ModuleKeyword */,
+        _a.namespace = 141 /* NamespaceKeyword */,
+        _a.never = 142 /* NeverKeyword */,
+        _a.new = 103 /* NewKeyword */,
+        _a.null = 104 /* NullKeyword */,
+        _a.number = 145 /* NumberKeyword */,
+        _a.object = 146 /* ObjectKeyword */,
+        _a.package = 120 /* PackageKeyword */,
+        _a.private = 121 /* PrivateKeyword */,
+        _a.protected = 122 /* ProtectedKeyword */,
+        _a.public = 123 /* PublicKeyword */,
+        _a.override = 157 /* OverrideKeyword */,
+        _a.readonly = 143 /* ReadonlyKeyword */,
+        _a.require = 144 /* RequireKeyword */,
+        _a.global = 155 /* GlobalKeyword */,
+        _a.return = 105 /* ReturnKeyword */,
+        _a.set = 147 /* SetKeyword */,
+        _a.static = 124 /* StaticKeyword */,
+        _a.string = 148 /* StringKeyword */,
+        _a.super = 106 /* SuperKeyword */,
+        _a.switch = 107 /* SwitchKeyword */,
+        _a.symbol = 149 /* SymbolKeyword */,
+        _a.this = 108 /* ThisKeyword */,
+        _a.throw = 109 /* ThrowKeyword */,
+        _a.true = 110 /* TrueKeyword */,
+        _a.try = 111 /* TryKeyword */,
+        _a.type = 150 /* TypeKeyword */,
+        _a.typeof = 112 /* TypeOfKeyword */,
+        _a.undefined = 151 /* UndefinedKeyword */,
+        _a.unique = 152 /* UniqueKeyword */,
+        _a.unknown = 153 /* UnknownKeyword */,
+        _a.var = 113 /* VarKeyword */,
+        _a.void = 114 /* VoidKeyword */,
+        _a.while = 115 /* WhileKeyword */,
+        _a.with = 116 /* WithKeyword */,
+        _a.yield = 125 /* YieldKeyword */,
+        _a.async = 130 /* AsyncKeyword */,
+        _a.await = 131 /* AwaitKeyword */,
+        _a.of = 158 /* OfKeyword */,
         _a);
-    var textToKeyword = new ts.Map(ts.getEntries(textToKeywordObj));
-    var textToToken = new ts.Map(ts.getEntries(__assign(__assign({}, textToKeywordObj), { "{": 18 /* OpenBraceToken */, "}": 19 /* CloseBraceToken */, "(": 20 /* OpenParenToken */, ")": 21 /* CloseParenToken */, "[": 22 /* OpenBracketToken */, "]": 23 /* CloseBracketToken */, ".": 24 /* DotToken */, "...": 25 /* DotDotDotToken */, ";": 26 /* SemicolonToken */, ",": 27 /* CommaToken */, "<": 29 /* LessThanToken */, ">": 31 /* GreaterThanToken */, "<=": 32 /* LessThanEqualsToken */, ">=": 33 /* GreaterThanEqualsToken */, "==": 34 /* EqualsEqualsToken */, "!=": 35 /* ExclamationEqualsToken */, "===": 36 /* EqualsEqualsEqualsToken */, "!==": 37 /* ExclamationEqualsEqualsToken */, "=>": 38 /* EqualsGreaterThanToken */, "+": 39 /* PlusToken */, "-": 40 /* MinusToken */, "**": 42 /* AsteriskAsteriskToken */, "*": 41 /* AsteriskToken */, "/": 43 /* SlashToken */, "%": 44 /* PercentToken */, "++": 45 /* PlusPlusToken */, "--": 46 /* MinusMinusToken */, "<<": 47 /* LessThanLessThanToken */, "</": 30 /* LessThanSlashToken */, ">>": 48 /* GreaterThanGreaterThanToken */, ">>>": 49 /* GreaterThanGreaterThanGreaterThanToken */, "&": 50 /* AmpersandToken */, "|": 51 /* BarToken */, "^": 52 /* CaretToken */, "!": 53 /* ExclamationToken */, "~": 54 /* TildeToken */, "&&": 55 /* AmpersandAmpersandToken */, "||": 56 /* BarBarToken */, "?": 57 /* QuestionToken */, "??": 60 /* QuestionQuestionToken */, "?.": 28 /* QuestionDotToken */, ":": 58 /* ColonToken */, "=": 62 /* EqualsToken */, "+=": 63 /* PlusEqualsToken */, "-=": 64 /* MinusEqualsToken */, "*=": 65 /* AsteriskEqualsToken */, "**=": 66 /* AsteriskAsteriskEqualsToken */, "/=": 67 /* SlashEqualsToken */, "%=": 68 /* PercentEqualsToken */, "<<=": 69 /* LessThanLessThanEqualsToken */, ">>=": 70 /* GreaterThanGreaterThanEqualsToken */, ">>>=": 71 /* GreaterThanGreaterThanGreaterThanEqualsToken */, "&=": 72 /* AmpersandEqualsToken */, "|=": 73 /* BarEqualsToken */, "^=": 77 /* CaretEqualsToken */, "||=": 74 /* BarBarEqualsToken */, "&&=": 75 /* AmpersandAmpersandEqualsToken */, "??=": 76 /* QuestionQuestionEqualsToken */, "@": 59 /* AtToken */, "`": 61 /* BacktickToken */ })));
+    var textToKeyword = new ts.Map(ts.getEntries(ts.textToKeywordObj));
+    var textToToken = new ts.Map(ts.getEntries(__assign(__assign({}, ts.textToKeywordObj), { "{": 18 /* OpenBraceToken */, "}": 19 /* CloseBraceToken */, "(": 20 /* OpenParenToken */, ")": 21 /* CloseParenToken */, "[": 22 /* OpenBracketToken */, "]": 23 /* CloseBracketToken */, ".": 24 /* DotToken */, "...": 25 /* DotDotDotToken */, ";": 26 /* SemicolonToken */, ",": 27 /* CommaToken */, "<": 29 /* LessThanToken */, ">": 31 /* GreaterThanToken */, "<=": 32 /* LessThanEqualsToken */, ">=": 33 /* GreaterThanEqualsToken */, "==": 34 /* EqualsEqualsToken */, "!=": 35 /* ExclamationEqualsToken */, "===": 36 /* EqualsEqualsEqualsToken */, "!==": 37 /* ExclamationEqualsEqualsToken */, "=>": 38 /* EqualsGreaterThanToken */, "+": 39 /* PlusToken */, "-": 40 /* MinusToken */, "**": 42 /* AsteriskAsteriskToken */, "*": 41 /* AsteriskToken */, "/": 43 /* SlashToken */, "%": 44 /* PercentToken */, "++": 45 /* PlusPlusToken */, "--": 46 /* MinusMinusToken */, "<<": 47 /* LessThanLessThanToken */, "</": 30 /* LessThanSlashToken */, ">>": 48 /* GreaterThanGreaterThanToken */, ">>>": 49 /* GreaterThanGreaterThanGreaterThanToken */, "&": 50 /* AmpersandToken */, "|": 51 /* BarToken */, "^": 52 /* CaretToken */, "!": 53 /* ExclamationToken */, "~": 54 /* TildeToken */, "&&": 55 /* AmpersandAmpersandToken */, "||": 56 /* BarBarToken */, "?": 57 /* QuestionToken */, "??": 60 /* QuestionQuestionToken */, "?.": 28 /* QuestionDotToken */, ":": 58 /* ColonToken */, "=": 63 /* EqualsToken */, "+=": 64 /* PlusEqualsToken */, "-=": 65 /* MinusEqualsToken */, "*=": 66 /* AsteriskEqualsToken */, "**=": 67 /* AsteriskAsteriskEqualsToken */, "/=": 68 /* SlashEqualsToken */, "%=": 69 /* PercentEqualsToken */, "<<=": 70 /* LessThanLessThanEqualsToken */, ">>=": 71 /* GreaterThanGreaterThanEqualsToken */, ">>>=": 72 /* GreaterThanGreaterThanGreaterThanEqualsToken */, "&=": 73 /* AmpersandEqualsToken */, "|=": 74 /* BarEqualsToken */, "^=": 78 /* CaretEqualsToken */, "||=": 75 /* BarBarEqualsToken */, "&&=": 76 /* AmpersandAmpersandEqualsToken */, "??=": 77 /* QuestionQuestionEqualsToken */, "@": 59 /* AtToken */, "#": 62 /* HashToken */, "`": 61 /* BacktickToken */ })));
     /*
         As per ECMAScript Language Specification 3th Edition, Section 7.6: Identifiers
         IdentifierStart ::
@@ -9648,13 +9958,13 @@
     var unicodeESNextIdentifierStart = [65, 90, 97, 122, 170, 170, 181, 181, 186, 186, 192, 214, 216, 246, 248, 705, 710, 721, 736, 740, 748, 748, 750, 750, 880, 884, 886, 887, 890, 893, 895, 895, 902, 902, 904, 906, 908, 908, 910, 929, 931, 1013, 1015, 1153, 1162, 1327, 1329, 1366, 1369, 1369, 1376, 1416, 1488, 1514, 1519, 1522, 1568, 1610, 1646, 1647, 1649, 1747, 1749, 1749, 1765, 1766, 1774, 1775, 1786, 1788, 1791, 1791, 1808, 1808, 1810, 1839, 1869, 1957, 1969, 1969, 1994, 2026, 2036, 2037, 2042, 2042, 2048, 2069, 2074, 2074, 2084, 2084, 2088, 2088, 2112, 2136, 2144, 2154, 2208, 2228, 2230, 2237, 2308, 2361, 2365, 2365, 2384, 2384, 2392, 2401, 2417, 2432, 2437, 2444, 2447, 2448, 2451, 2472, 2474, 2480, 2482, 2482, 2486, 2489, 2493, 2493, 2510, 2510, 2524, 2525, 2527, 2529, 2544, 2545, 2556, 2556, 2565, 2570, 2575, 2576, 2579, 2600, 2602, 2608, 2610, 2611, 2613, 2614, 2616, 2617, 2649, 2652, 2654, 2654, 2674, 2676, 2693, 2701, 2703, 2705, 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2749, 2749, 2768, 2768, 2784, 2785, 2809, 2809, 2821, 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2869, 2873, 2877, 2877, 2908, 2909, 2911, 2913, 2929, 2929, 2947, 2947, 2949, 2954, 2958, 2960, 2962, 2965, 2969, 2970, 2972, 2972, 2974, 2975, 2979, 2980, 2984, 2986, 2990, 3001, 3024, 3024, 3077, 3084, 3086, 3088, 3090, 3112, 3114, 3129, 3133, 3133, 3160, 3162, 3168, 3169, 3200, 3200, 3205, 3212, 3214, 3216, 3218, 3240, 3242, 3251, 3253, 3257, 3261, 3261, 3294, 3294, 3296, 3297, 3313, 3314, 3333, 3340, 3342, 3344, 3346, 3386, 3389, 3389, 3406, 3406, 3412, 3414, 3423, 3425, 3450, 3455, 3461, 3478, 3482, 3505, 3507, 3515, 3517, 3517, 3520, 3526, 3585, 3632, 3634, 3635, 3648, 3654, 3713, 3714, 3716, 3716, 3718, 3722, 3724, 3747, 3749, 3749, 3751, 3760, 3762, 3763, 3773, 3773, 3776, 3780, 3782, 3782, 3804, 3807, 3840, 3840, 3904, 3911, 3913, 3948, 3976, 3980, 4096, 4138, 4159, 4159, 4176, 4181, 4186, 4189, 4193, 4193, 4197, 4198, 4206, 4208, 4213, 4225, 4238, 4238, 4256, 4293, 4295, 4295, 4301, 4301, 4304, 4346, 4348, 4680, 4682, 4685, 4688, 4694, 4696, 4696, 4698, 4701, 4704, 4744, 4746, 4749, 4752, 4784, 4786, 4789, 4792, 4798, 4800, 4800, 4802, 4805, 4808, 4822, 4824, 4880, 4882, 4885, 4888, 4954, 4992, 5007, 5024, 5109, 5112, 5117, 5121, 5740, 5743, 5759, 5761, 5786, 5792, 5866, 5870, 5880, 5888, 5900, 5902, 5905, 5920, 5937, 5952, 5969, 5984, 5996, 5998, 6000, 6016, 6067, 6103, 6103, 6108, 6108, 6176, 6264, 6272, 6312, 6314, 6314, 6320, 6389, 6400, 6430, 6480, 6509, 6512, 6516, 6528, 6571, 6576, 6601, 6656, 6678, 6688, 6740, 6823, 6823, 6917, 6963, 6981, 6987, 7043, 7072, 7086, 7087, 7098, 7141, 7168, 7203, 7245, 7247, 7258, 7293, 7296, 7304, 7312, 7354, 7357, 7359, 7401, 7404, 7406, 7411, 7413, 7414, 7418, 7418, 7424, 7615, 7680, 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025, 8027, 8027, 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130, 8132, 8134, 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188, 8305, 8305, 8319, 8319, 8336, 8348, 8450, 8450, 8455, 8455, 8458, 8467, 8469, 8469, 8472, 8477, 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8505, 8508, 8511, 8517, 8521, 8526, 8526, 8544, 8584, 11264, 11310, 11312, 11358, 11360, 11492, 11499, 11502, 11506, 11507, 11520, 11557, 11559, 11559, 11565, 11565, 11568, 11623, 11631, 11631, 11648, 11670, 11680, 11686, 11688, 11694, 11696, 11702, 11704, 11710, 11712, 11718, 11720, 11726, 11728, 11734, 11736, 11742, 12293, 12295, 12321, 12329, 12337, 12341, 12344, 12348, 12353, 12438, 12443, 12447, 12449, 12538, 12540, 12543, 12549, 12591, 12593, 12686, 12704, 12730, 12784, 12799, 13312, 19893, 19968, 40943, 40960, 42124, 42192, 42237, 42240, 42508, 42512, 42527, 42538, 42539, 42560, 42606, 42623, 42653, 42656, 42735, 42775, 42783, 42786, 42888, 42891, 42943, 42946, 42950, 42999, 43009, 43011, 43013, 43015, 43018, 43020, 43042, 43072, 43123, 43138, 43187, 43250, 43255, 43259, 43259, 43261, 43262, 43274, 43301, 43312, 43334, 43360, 43388, 43396, 43442, 43471, 43471, 43488, 43492, 43494, 43503, 43514, 43518, 43520, 43560, 43584, 43586, 43588, 43595, 43616, 43638, 43642, 43642, 43646, 43695, 43697, 43697, 43701, 43702, 43705, 43709, 43712, 43712, 43714, 43714, 43739, 43741, 43744, 43754, 43762, 43764, 43777, 43782, 43785, 43790, 43793, 43798, 43808, 43814, 43816, 43822, 43824, 43866, 43868, 43879, 43888, 44002, 44032, 55203, 55216, 55238, 55243, 55291, 63744, 64109, 64112, 64217, 64256, 64262, 64275, 64279, 64285, 64285, 64287, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321, 64323, 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008, 65019, 65136, 65140, 65142, 65276, 65313, 65338, 65345, 65370, 65382, 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500, 65536, 65547, 65549, 65574, 65576, 65594, 65596, 65597, 65599, 65613, 65616, 65629, 65664, 65786, 65856, 65908, 66176, 66204, 66208, 66256, 66304, 66335, 66349, 66378, 66384, 66421, 66432, 66461, 66464, 66499, 66504, 66511, 66513, 66517, 66560, 66717, 66736, 66771, 66776, 66811, 66816, 66855, 66864, 66915, 67072, 67382, 67392, 67413, 67424, 67431, 67584, 67589, 67592, 67592, 67594, 67637, 67639, 67640, 67644, 67644, 67647, 67669, 67680, 67702, 67712, 67742, 67808, 67826, 67828, 67829, 67840, 67861, 67872, 67897, 67968, 68023, 68030, 68031, 68096, 68096, 68112, 68115, 68117, 68119, 68121, 68149, 68192, 68220, 68224, 68252, 68288, 68295, 68297, 68324, 68352, 68405, 68416, 68437, 68448, 68466, 68480, 68497, 68608, 68680, 68736, 68786, 68800, 68850, 68864, 68899, 69376, 69404, 69415, 69415, 69424, 69445, 69600, 69622, 69635, 69687, 69763, 69807, 69840, 69864, 69891, 69926, 69956, 69956, 69968, 70002, 70006, 70006, 70019, 70066, 70081, 70084, 70106, 70106, 70108, 70108, 70144, 70161, 70163, 70187, 70272, 70278, 70280, 70280, 70282, 70285, 70287, 70301, 70303, 70312, 70320, 70366, 70405, 70412, 70415, 70416, 70419, 70440, 70442, 70448, 70450, 70451, 70453, 70457, 70461, 70461, 70480, 70480, 70493, 70497, 70656, 70708, 70727, 70730, 70751, 70751, 70784, 70831, 70852, 70853, 70855, 70855, 71040, 71086, 71128, 71131, 71168, 71215, 71236, 71236, 71296, 71338, 71352, 71352, 71424, 71450, 71680, 71723, 71840, 71903, 71935, 71935, 72096, 72103, 72106, 72144, 72161, 72161, 72163, 72163, 72192, 72192, 72203, 72242, 72250, 72250, 72272, 72272, 72284, 72329, 72349, 72349, 72384, 72440, 72704, 72712, 72714, 72750, 72768, 72768, 72818, 72847, 72960, 72966, 72968, 72969, 72971, 73008, 73030, 73030, 73056, 73061, 73063, 73064, 73066, 73097, 73112, 73112, 73440, 73458, 73728, 74649, 74752, 74862, 74880, 75075, 77824, 78894, 82944, 83526, 92160, 92728, 92736, 92766, 92880, 92909, 92928, 92975, 92992, 92995, 93027, 93047, 93053, 93071, 93760, 93823, 93952, 94026, 94032, 94032, 94099, 94111, 94176, 94177, 94179, 94179, 94208, 100343, 100352, 101106, 110592, 110878, 110928, 110930, 110948, 110951, 110960, 111355, 113664, 113770, 113776, 113788, 113792, 113800, 113808, 113817, 119808, 119892, 119894, 119964, 119966, 119967, 119970, 119970, 119973, 119974, 119977, 119980, 119982, 119993, 119995, 119995, 119997, 120003, 120005, 120069, 120071, 120074, 120077, 120084, 120086, 120092, 120094, 120121, 120123, 120126, 120128, 120132, 120134, 120134, 120138, 120144, 120146, 120485, 120488, 120512, 120514, 120538, 120540, 120570, 120572, 120596, 120598, 120628, 120630, 120654, 120656, 120686, 120688, 120712, 120714, 120744, 120746, 120770, 120772, 120779, 123136, 123180, 123191, 123197, 123214, 123214, 123584, 123627, 124928, 125124, 125184, 125251, 125259, 125259, 126464, 126467, 126469, 126495, 126497, 126498, 126500, 126500, 126503, 126503, 126505, 126514, 126516, 126519, 126521, 126521, 126523, 126523, 126530, 126530, 126535, 126535, 126537, 126537, 126539, 126539, 126541, 126543, 126545, 126546, 126548, 126548, 126551, 126551, 126553, 126553, 126555, 126555, 126557, 126557, 126559, 126559, 126561, 126562, 126564, 126564, 126567, 126570, 126572, 126578, 126580, 126583, 126585, 126588, 126590, 126590, 126592, 126601, 126603, 126619, 126625, 126627, 126629, 126633, 126635, 126651, 131072, 173782, 173824, 177972, 177984, 178205, 178208, 183969, 183984, 191456, 194560, 195101];
     var unicodeESNextIdentifierPart = [48, 57, 65, 90, 95, 95, 97, 122, 170, 170, 181, 181, 183, 183, 186, 186, 192, 214, 216, 246, 248, 705, 710, 721, 736, 740, 748, 748, 750, 750, 768, 884, 886, 887, 890, 893, 895, 895, 902, 906, 908, 908, 910, 929, 931, 1013, 1015, 1153, 1155, 1159, 1162, 1327, 1329, 1366, 1369, 1369, 1376, 1416, 1425, 1469, 1471, 1471, 1473, 1474, 1476, 1477, 1479, 1479, 1488, 1514, 1519, 1522, 1552, 1562, 1568, 1641, 1646, 1747, 1749, 1756, 1759, 1768, 1770, 1788, 1791, 1791, 1808, 1866, 1869, 1969, 1984, 2037, 2042, 2042, 2045, 2045, 2048, 2093, 2112, 2139, 2144, 2154, 2208, 2228, 2230, 2237, 2259, 2273, 2275, 2403, 2406, 2415, 2417, 2435, 2437, 2444, 2447, 2448, 2451, 2472, 2474, 2480, 2482, 2482, 2486, 2489, 2492, 2500, 2503, 2504, 2507, 2510, 2519, 2519, 2524, 2525, 2527, 2531, 2534, 2545, 2556, 2556, 2558, 2558, 2561, 2563, 2565, 2570, 2575, 2576, 2579, 2600, 2602, 2608, 2610, 2611, 2613, 2614, 2616, 2617, 2620, 2620, 2622, 2626, 2631, 2632, 2635, 2637, 2641, 2641, 2649, 2652, 2654, 2654, 2662, 2677, 2689, 2691, 2693, 2701, 2703, 2705, 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2748, 2757, 2759, 2761, 2763, 2765, 2768, 2768, 2784, 2787, 2790, 2799, 2809, 2815, 2817, 2819, 2821, 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2869, 2873, 2876, 2884, 2887, 2888, 2891, 2893, 2902, 2903, 2908, 2909, 2911, 2915, 2918, 2927, 2929, 2929, 2946, 2947, 2949, 2954, 2958, 2960, 2962, 2965, 2969, 2970, 2972, 2972, 2974, 2975, 2979, 2980, 2984, 2986, 2990, 3001, 3006, 3010, 3014, 3016, 3018, 3021, 3024, 3024, 3031, 3031, 3046, 3055, 3072, 3084, 3086, 3088, 3090, 3112, 3114, 3129, 3133, 3140, 3142, 3144, 3146, 3149, 3157, 3158, 3160, 3162, 3168, 3171, 3174, 3183, 3200, 3203, 3205, 3212, 3214, 3216, 3218, 3240, 3242, 3251, 3253, 3257, 3260, 3268, 3270, 3272, 3274, 3277, 3285, 3286, 3294, 3294, 3296, 3299, 3302, 3311, 3313, 3314, 3328, 3331, 3333, 3340, 3342, 3344, 3346, 3396, 3398, 3400, 3402, 3406, 3412, 3415, 3423, 3427, 3430, 3439, 3450, 3455, 3458, 3459, 3461, 3478, 3482, 3505, 3507, 3515, 3517, 3517, 3520, 3526, 3530, 3530, 3535, 3540, 3542, 3542, 3544, 3551, 3558, 3567, 3570, 3571, 3585, 3642, 3648, 3662, 3664, 3673, 3713, 3714, 3716, 3716, 3718, 3722, 3724, 3747, 3749, 3749, 3751, 3773, 3776, 3780, 3782, 3782, 3784, 3789, 3792, 3801, 3804, 3807, 3840, 3840, 3864, 3865, 3872, 3881, 3893, 3893, 3895, 3895, 3897, 3897, 3902, 3911, 3913, 3948, 3953, 3972, 3974, 3991, 3993, 4028, 4038, 4038, 4096, 4169, 4176, 4253, 4256, 4293, 4295, 4295, 4301, 4301, 4304, 4346, 4348, 4680, 4682, 4685, 4688, 4694, 4696, 4696, 4698, 4701, 4704, 4744, 4746, 4749, 4752, 4784, 4786, 4789, 4792, 4798, 4800, 4800, 4802, 4805, 4808, 4822, 4824, 4880, 4882, 4885, 4888, 4954, 4957, 4959, 4969, 4977, 4992, 5007, 5024, 5109, 5112, 5117, 5121, 5740, 5743, 5759, 5761, 5786, 5792, 5866, 5870, 5880, 5888, 5900, 5902, 5908, 5920, 5940, 5952, 5971, 5984, 5996, 5998, 6000, 6002, 6003, 6016, 6099, 6103, 6103, 6108, 6109, 6112, 6121, 6155, 6157, 6160, 6169, 6176, 6264, 6272, 6314, 6320, 6389, 6400, 6430, 6432, 6443, 6448, 6459, 6470, 6509, 6512, 6516, 6528, 6571, 6576, 6601, 6608, 6618, 6656, 6683, 6688, 6750, 6752, 6780, 6783, 6793, 6800, 6809, 6823, 6823, 6832, 6845, 6912, 6987, 6992, 7001, 7019, 7027, 7040, 7155, 7168, 7223, 7232, 7241, 7245, 7293, 7296, 7304, 7312, 7354, 7357, 7359, 7376, 7378, 7380, 7418, 7424, 7673, 7675, 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025, 8027, 8027, 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130, 8132, 8134, 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188, 8255, 8256, 8276, 8276, 8305, 8305, 8319, 8319, 8336, 8348, 8400, 8412, 8417, 8417, 8421, 8432, 8450, 8450, 8455, 8455, 8458, 8467, 8469, 8469, 8472, 8477, 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8505, 8508, 8511, 8517, 8521, 8526, 8526, 8544, 8584, 11264, 11310, 11312, 11358, 11360, 11492, 11499, 11507, 11520, 11557, 11559, 11559, 11565, 11565, 11568, 11623, 11631, 11631, 11647, 11670, 11680, 11686, 11688, 11694, 11696, 11702, 11704, 11710, 11712, 11718, 11720, 11726, 11728, 11734, 11736, 11742, 11744, 11775, 12293, 12295, 12321, 12335, 12337, 12341, 12344, 12348, 12353, 12438, 12441, 12447, 12449, 12538, 12540, 12543, 12549, 12591, 12593, 12686, 12704, 12730, 12784, 12799, 13312, 19893, 19968, 40943, 40960, 42124, 42192, 42237, 42240, 42508, 42512, 42539, 42560, 42607, 42612, 42621, 42623, 42737, 42775, 42783, 42786, 42888, 42891, 42943, 42946, 42950, 42999, 43047, 43072, 43123, 43136, 43205, 43216, 43225, 43232, 43255, 43259, 43259, 43261, 43309, 43312, 43347, 43360, 43388, 43392, 43456, 43471, 43481, 43488, 43518, 43520, 43574, 43584, 43597, 43600, 43609, 43616, 43638, 43642, 43714, 43739, 43741, 43744, 43759, 43762, 43766, 43777, 43782, 43785, 43790, 43793, 43798, 43808, 43814, 43816, 43822, 43824, 43866, 43868, 43879, 43888, 44010, 44012, 44013, 44016, 44025, 44032, 55203, 55216, 55238, 55243, 55291, 63744, 64109, 64112, 64217, 64256, 64262, 64275, 64279, 64285, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321, 64323, 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008, 65019, 65024, 65039, 65056, 65071, 65075, 65076, 65101, 65103, 65136, 65140, 65142, 65276, 65296, 65305, 65313, 65338, 65343, 65343, 65345, 65370, 65382, 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500, 65536, 65547, 65549, 65574, 65576, 65594, 65596, 65597, 65599, 65613, 65616, 65629, 65664, 65786, 65856, 65908, 66045, 66045, 66176, 66204, 66208, 66256, 66272, 66272, 66304, 66335, 66349, 66378, 66384, 66426, 66432, 66461, 66464, 66499, 66504, 66511, 66513, 66517, 66560, 66717, 66720, 66729, 66736, 66771, 66776, 66811, 66816, 66855, 66864, 66915, 67072, 67382, 67392, 67413, 67424, 67431, 67584, 67589, 67592, 67592, 67594, 67637, 67639, 67640, 67644, 67644, 67647, 67669, 67680, 67702, 67712, 67742, 67808, 67826, 67828, 67829, 67840, 67861, 67872, 67897, 67968, 68023, 68030, 68031, 68096, 68099, 68101, 68102, 68108, 68115, 68117, 68119, 68121, 68149, 68152, 68154, 68159, 68159, 68192, 68220, 68224, 68252, 68288, 68295, 68297, 68326, 68352, 68405, 68416, 68437, 68448, 68466, 68480, 68497, 68608, 68680, 68736, 68786, 68800, 68850, 68864, 68903, 68912, 68921, 69376, 69404, 69415, 69415, 69424, 69456, 69600, 69622, 69632, 69702, 69734, 69743, 69759, 69818, 69840, 69864, 69872, 69881, 69888, 69940, 69942, 69951, 69956, 69958, 69968, 70003, 70006, 70006, 70016, 70084, 70089, 70092, 70096, 70106, 70108, 70108, 70144, 70161, 70163, 70199, 70206, 70206, 70272, 70278, 70280, 70280, 70282, 70285, 70287, 70301, 70303, 70312, 70320, 70378, 70384, 70393, 70400, 70403, 70405, 70412, 70415, 70416, 70419, 70440, 70442, 70448, 70450, 70451, 70453, 70457, 70459, 70468, 70471, 70472, 70475, 70477, 70480, 70480, 70487, 70487, 70493, 70499, 70502, 70508, 70512, 70516, 70656, 70730, 70736, 70745, 70750, 70751, 70784, 70853, 70855, 70855, 70864, 70873, 71040, 71093, 71096, 71104, 71128, 71133, 71168, 71232, 71236, 71236, 71248, 71257, 71296, 71352, 71360, 71369, 71424, 71450, 71453, 71467, 71472, 71481, 71680, 71738, 71840, 71913, 71935, 71935, 72096, 72103, 72106, 72151, 72154, 72161, 72163, 72164, 72192, 72254, 72263, 72263, 72272, 72345, 72349, 72349, 72384, 72440, 72704, 72712, 72714, 72758, 72760, 72768, 72784, 72793, 72818, 72847, 72850, 72871, 72873, 72886, 72960, 72966, 72968, 72969, 72971, 73014, 73018, 73018, 73020, 73021, 73023, 73031, 73040, 73049, 73056, 73061, 73063, 73064, 73066, 73102, 73104, 73105, 73107, 73112, 73120, 73129, 73440, 73462, 73728, 74649, 74752, 74862, 74880, 75075, 77824, 78894, 82944, 83526, 92160, 92728, 92736, 92766, 92768, 92777, 92880, 92909, 92912, 92916, 92928, 92982, 92992, 92995, 93008, 93017, 93027, 93047, 93053, 93071, 93760, 93823, 93952, 94026, 94031, 94087, 94095, 94111, 94176, 94177, 94179, 94179, 94208, 100343, 100352, 101106, 110592, 110878, 110928, 110930, 110948, 110951, 110960, 111355, 113664, 113770, 113776, 113788, 113792, 113800, 113808, 113817, 113821, 113822, 119141, 119145, 119149, 119154, 119163, 119170, 119173, 119179, 119210, 119213, 119362, 119364, 119808, 119892, 119894, 119964, 119966, 119967, 119970, 119970, 119973, 119974, 119977, 119980, 119982, 119993, 119995, 119995, 119997, 120003, 120005, 120069, 120071, 120074, 120077, 120084, 120086, 120092, 120094, 120121, 120123, 120126, 120128, 120132, 120134, 120134, 120138, 120144, 120146, 120485, 120488, 120512, 120514, 120538, 120540, 120570, 120572, 120596, 120598, 120628, 120630, 120654, 120656, 120686, 120688, 120712, 120714, 120744, 120746, 120770, 120772, 120779, 120782, 120831, 121344, 121398, 121403, 121452, 121461, 121461, 121476, 121476, 121499, 121503, 121505, 121519, 122880, 122886, 122888, 122904, 122907, 122913, 122915, 122916, 122918, 122922, 123136, 123180, 123184, 123197, 123200, 123209, 123214, 123214, 123584, 123641, 124928, 125124, 125136, 125142, 125184, 125259, 125264, 125273, 126464, 126467, 126469, 126495, 126497, 126498, 126500, 126500, 126503, 126503, 126505, 126514, 126516, 126519, 126521, 126521, 126523, 126523, 126530, 126530, 126535, 126535, 126537, 126537, 126539, 126539, 126541, 126543, 126545, 126546, 126548, 126548, 126551, 126551, 126553, 126553, 126555, 126555, 126557, 126557, 126559, 126559, 126561, 126562, 126564, 126564, 126567, 126570, 126572, 126578, 126580, 126583, 126585, 126588, 126590, 126590, 126592, 126601, 126603, 126619, 126625, 126627, 126629, 126633, 126635, 126651, 131072, 173782, 173824, 177972, 177984, 178205, 178208, 183969, 183984, 191456, 194560, 195101, 917760, 917999];
     /**
-     * Test for whether a single line comment's text contains a directive.
+     * Test for whether a single line comment with leading whitespace trimmed's text contains a directive.
      */
-    var commentDirectiveRegExSingleLine = /^\s*\/\/\/?\s*@(ts-expect-error|ts-ignore)/;
+    var commentDirectiveRegExSingleLine = /^\/\/\/?\s*@(ts-expect-error|ts-ignore)/;
     /**
-     * Test for whether a multi-line comment's last line contains a directive.
+     * Test for whether a multi-line comment with leading whitespace trimmed's last line contains a directive.
      */
-    var commentDirectiveRegExMultiLine = /^\s*(?:\/|\*)*\s*@(ts-expect-error|ts-ignore)/;
+    var commentDirectiveRegExMultiLine = /^(?:\/|\*)*\s*@(ts-expect-error|ts-ignore)/;
     function lookupInUnicodeMap(code, map) {
         // Bail out quickly if it couldn't possibly be in the map.
         if (code < map[0]) {
@@ -10268,8 +10578,8 @@
             hasExtendedUnicodeEscape: function () { return (tokenFlags & 8 /* ExtendedUnicodeEscape */) !== 0; },
             hasPrecedingLineBreak: function () { return (tokenFlags & 1 /* PrecedingLineBreak */) !== 0; },
             hasPrecedingJSDocComment: function () { return (tokenFlags & 2 /* PrecedingJSDocComment */) !== 0; },
-            isIdentifier: function () { return token === 78 /* Identifier */ || token > 115 /* LastReservedWord */; },
-            isReservedWord: function () { return token >= 80 /* FirstReservedWord */ && token <= 115 /* LastReservedWord */; },
+            isIdentifier: function () { return token === 79 /* Identifier */ || token > 116 /* LastReservedWord */; },
+            isReservedWord: function () { return token >= 81 /* FirstReservedWord */ && token <= 116 /* LastReservedWord */; },
             isUnterminated: function () { return (tokenFlags & 4 /* Unterminated */) !== 0; },
             getCommentDirectives: function () { return commentDirectives; },
             getNumericLiteralFlags: function () { return tokenFlags & 1008 /* NumericLiteralFlags */; },
@@ -10284,6 +10594,7 @@
             reScanJsxAttributeValue: reScanJsxAttributeValue,
             reScanJsxToken: reScanJsxToken,
             reScanLessThanToken: reScanLessThanToken,
+            reScanHashToken: reScanHashToken,
             reScanQuestionToken: reScanQuestionToken,
             reScanInvalidIdentifier: reScanInvalidIdentifier,
             scanJsxToken: scanJsxToken,
@@ -10794,7 +11105,7 @@
                     }
                 }
             }
-            return token = 78 /* Identifier */;
+            return token = 79 /* Identifier */;
         }
         function scanBinaryOrOctalDigits(base) {
             var value = "";
@@ -10943,19 +11254,19 @@
                         return token = scanTemplateAndSetTokenValue(/* isTaggedTemplate */ false);
                     case 37 /* percent */:
                         if (text.charCodeAt(pos + 1) === 61 /* equals */) {
-                            return pos += 2, token = 68 /* PercentEqualsToken */;
+                            return pos += 2, token = 69 /* PercentEqualsToken */;
                         }
                         pos++;
                         return token = 44 /* PercentToken */;
                     case 38 /* ampersand */:
                         if (text.charCodeAt(pos + 1) === 38 /* ampersand */) {
                             if (text.charCodeAt(pos + 2) === 61 /* equals */) {
-                                return pos += 3, token = 75 /* AmpersandAmpersandEqualsToken */;
+                                return pos += 3, token = 76 /* AmpersandAmpersandEqualsToken */;
                             }
                             return pos += 2, token = 55 /* AmpersandAmpersandToken */;
                         }
                         if (text.charCodeAt(pos + 1) === 61 /* equals */) {
-                            return pos += 2, token = 72 /* AmpersandEqualsToken */;
+                            return pos += 2, token = 73 /* AmpersandEqualsToken */;
                         }
                         pos++;
                         return token = 50 /* AmpersandToken */;
@@ -10967,11 +11278,11 @@
                         return token = 21 /* CloseParenToken */;
                     case 42 /* asterisk */:
                         if (text.charCodeAt(pos + 1) === 61 /* equals */) {
-                            return pos += 2, token = 65 /* AsteriskEqualsToken */;
+                            return pos += 2, token = 66 /* AsteriskEqualsToken */;
                         }
                         if (text.charCodeAt(pos + 1) === 42 /* asterisk */) {
                             if (text.charCodeAt(pos + 2) === 61 /* equals */) {
-                                return pos += 3, token = 66 /* AsteriskAsteriskEqualsToken */;
+                                return pos += 3, token = 67 /* AsteriskAsteriskEqualsToken */;
                             }
                             return pos += 2, token = 42 /* AsteriskAsteriskToken */;
                         }
@@ -10987,7 +11298,7 @@
                             return pos += 2, token = 45 /* PlusPlusToken */;
                         }
                         if (text.charCodeAt(pos + 1) === 61 /* equals */) {
-                            return pos += 2, token = 63 /* PlusEqualsToken */;
+                            return pos += 2, token = 64 /* PlusEqualsToken */;
                         }
                         pos++;
                         return token = 39 /* PlusToken */;
@@ -10999,7 +11310,7 @@
                             return pos += 2, token = 46 /* MinusMinusToken */;
                         }
                         if (text.charCodeAt(pos + 1) === 61 /* equals */) {
-                            return pos += 2, token = 64 /* MinusEqualsToken */;
+                            return pos += 2, token = 65 /* MinusEqualsToken */;
                         }
                         pos++;
                         return token = 40 /* MinusToken */;
@@ -11067,7 +11378,7 @@
                             }
                         }
                         if (text.charCodeAt(pos + 1) === 61 /* equals */) {
-                            return pos += 2, token = 67 /* SlashEqualsToken */;
+                            return pos += 2, token = 68 /* SlashEqualsToken */;
                         }
                         pos++;
                         return token = 43 /* SlashToken */;
@@ -11144,7 +11455,7 @@
                         }
                         if (text.charCodeAt(pos + 1) === 60 /* lessThan */) {
                             if (text.charCodeAt(pos + 2) === 61 /* equals */) {
-                                return pos += 3, token = 69 /* LessThanLessThanEqualsToken */;
+                                return pos += 3, token = 70 /* LessThanLessThanEqualsToken */;
                             }
                             return pos += 2, token = 47 /* LessThanLessThanToken */;
                         }
@@ -11178,7 +11489,7 @@
                             return pos += 2, token = 38 /* EqualsGreaterThanToken */;
                         }
                         pos++;
-                        return token = 62 /* EqualsToken */;
+                        return token = 63 /* EqualsToken */;
                     case 62 /* greaterThan */:
                         if (isConflictMarkerTrivia(text, pos)) {
                             pos = scanConflictMarkerTrivia(text, pos, error);
@@ -11197,7 +11508,7 @@
                         }
                         if (text.charCodeAt(pos + 1) === 63 /* question */) {
                             if (text.charCodeAt(pos + 2) === 61 /* equals */) {
-                                return pos += 3, token = 76 /* QuestionQuestionEqualsToken */;
+                                return pos += 3, token = 77 /* QuestionQuestionEqualsToken */;
                             }
                             return pos += 2, token = 60 /* QuestionQuestionToken */;
                         }
@@ -11211,7 +11522,7 @@
                         return token = 23 /* CloseBracketToken */;
                     case 94 /* caret */:
                         if (text.charCodeAt(pos + 1) === 61 /* equals */) {
-                            return pos += 2, token = 77 /* CaretEqualsToken */;
+                            return pos += 2, token = 78 /* CaretEqualsToken */;
                         }
                         pos++;
                         return token = 52 /* CaretToken */;
@@ -11230,12 +11541,12 @@
                         }
                         if (text.charCodeAt(pos + 1) === 124 /* bar */) {
                             if (text.charCodeAt(pos + 2) === 61 /* equals */) {
-                                return pos += 3, token = 74 /* BarBarEqualsToken */;
+                                return pos += 3, token = 75 /* BarBarEqualsToken */;
                             }
                             return pos += 2, token = 56 /* BarBarToken */;
                         }
                         if (text.charCodeAt(pos + 1) === 61 /* equals */) {
-                            return pos += 2, token = 73 /* BarEqualsToken */;
+                            return pos += 2, token = 74 /* BarEqualsToken */;
                         }
                         pos++;
                         return token = 51 /* BarToken */;
@@ -11272,21 +11583,15 @@
                             pos++;
                             return token = 0 /* Unknown */;
                         }
-                        pos++;
-                        if (isIdentifierStart(ch = text.charCodeAt(pos), languageVersion)) {
+                        if (isIdentifierStart(codePointAt(text, pos + 1), languageVersion)) {
                             pos++;
-                            while (pos < end && isIdentifierPart(ch = text.charCodeAt(pos), languageVersion))
-                                pos++;
-                            tokenValue = text.substring(tokenPos, pos);
-                            if (ch === 92 /* backslash */) {
-                                tokenValue += scanIdentifierParts();
-                            }
+                            scanIdentifier(codePointAt(text, pos), languageVersion);
                         }
                         else {
-                            tokenValue = "#";
-                            error(ts.Diagnostics.Invalid_character);
+                            tokenValue = String.fromCharCode(codePointAt(text, pos));
+                            error(ts.Diagnostics.Invalid_character, pos++, charSize(ch));
                         }
-                        return token = 79 /* PrivateIdentifier */;
+                        return token = 80 /* PrivateIdentifier */;
                     default:
                         var identifierKind = scanIdentifier(ch, languageVersion);
                         if (identifierKind) {
@@ -11301,8 +11606,9 @@
                             pos += charSize(ch);
                             continue;
                         }
-                        error(ts.Diagnostics.Invalid_character);
-                        pos += charSize(ch);
+                        var size = charSize(ch);
+                        error(ts.Diagnostics.Invalid_character, pos, size);
+                        pos += size;
                         return token = 0 /* Unknown */;
                 }
             }
@@ -11337,12 +11643,12 @@
                 if (text.charCodeAt(pos) === 62 /* greaterThan */) {
                     if (text.charCodeAt(pos + 1) === 62 /* greaterThan */) {
                         if (text.charCodeAt(pos + 2) === 61 /* equals */) {
-                            return pos += 3, token = 71 /* GreaterThanGreaterThanGreaterThanEqualsToken */;
+                            return pos += 3, token = 72 /* GreaterThanGreaterThanGreaterThanEqualsToken */;
                         }
                         return pos += 2, token = 49 /* GreaterThanGreaterThanGreaterThanToken */;
                     }
                     if (text.charCodeAt(pos + 1) === 61 /* equals */) {
-                        return pos += 2, token = 70 /* GreaterThanGreaterThanEqualsToken */;
+                        return pos += 2, token = 71 /* GreaterThanGreaterThanEqualsToken */;
                     }
                     pos++;
                     return token = 48 /* GreaterThanGreaterThanToken */;
@@ -11355,12 +11661,12 @@
             return token;
         }
         function reScanAsteriskEqualsToken() {
-            ts.Debug.assert(token === 65 /* AsteriskEqualsToken */, "'reScanAsteriskEqualsToken' should only be called on a '*='");
+            ts.Debug.assert(token === 66 /* AsteriskEqualsToken */, "'reScanAsteriskEqualsToken' should only be called on a '*='");
             pos = tokenPos + 1;
-            return token = 62 /* EqualsToken */;
+            return token = 63 /* EqualsToken */;
         }
         function reScanSlashToken() {
-            if (token === 43 /* SlashToken */ || token === 67 /* SlashEqualsToken */) {
+            if (token === 43 /* SlashToken */ || token === 68 /* SlashEqualsToken */) {
                 var p = tokenPos + 1;
                 var inEscape = false;
                 var inCharacterClass = false;
@@ -11410,7 +11716,7 @@
             return token;
         }
         function appendIfCommentDirective(commentDirectives, text, commentDirectiveRegEx, lineStart) {
-            var type = getDirectiveFromComment(text, commentDirectiveRegEx);
+            var type = getDirectiveFromComment(ts.trimStringStart(text), commentDirectiveRegEx);
             if (type === undefined) {
                 return commentDirectives;
             }
@@ -11456,6 +11762,13 @@
             }
             return token;
         }
+        function reScanHashToken() {
+            if (token === 80 /* PrivateIdentifier */) {
+                pos = tokenPos + 1;
+                return token = 62 /* HashToken */;
+            }
+            return token;
+        }
         function reScanQuestionToken() {
             ts.Debug.assert(token === 60 /* QuestionQuestionToken */, "'reScanQuestionToken' should only be called on a '??'");
             pos = tokenPos + 1;
@@ -11544,7 +11857,7 @@
                         tokenValue += ":";
                         pos++;
                         namespaceSeparator = true;
-                        token = 78 /* Identifier */; // swap from keyword kind to identifier kind
+                        token = 79 /* Identifier */; // swap from keyword kind to identifier kind
                         continue;
                     }
                     var oldPos = pos;
@@ -11619,13 +11932,15 @@
                 case 62 /* greaterThan */:
                     return token = 31 /* GreaterThanToken */;
                 case 61 /* equals */:
-                    return token = 62 /* EqualsToken */;
+                    return token = 63 /* EqualsToken */;
                 case 44 /* comma */:
                     return token = 27 /* CommaToken */;
                 case 46 /* dot */:
                     return token = 24 /* DotToken */;
                 case 96 /* backtick */:
                     return token = 61 /* BacktickToken */;
+                case 35 /* hash */:
+                    return token = 62 /* HashToken */;
                 case 92 /* backslash */:
                     pos--;
                     var extendedCookedChar = peekExtendedUnicodeEscape();
@@ -12021,9 +12336,9 @@
     }
     ts.collapseTextChangeRangesAcrossMultipleVersions = collapseTextChangeRangesAcrossMultipleVersions;
     function getTypeParameterOwner(d) {
-        if (d && d.kind === 160 /* TypeParameter */) {
+        if (d && d.kind === 161 /* TypeParameter */) {
             for (var current = d; current; current = current.parent) {
-                if (isFunctionLike(current) || isClassLike(current) || current.kind === 254 /* InterfaceDeclaration */) {
+                if (isFunctionLike(current) || isClassLike(current) || current.kind === 256 /* InterfaceDeclaration */) {
                     return current;
                 }
             }
@@ -12031,7 +12346,7 @@
     }
     ts.getTypeParameterOwner = getTypeParameterOwner;
     function isParameterPropertyDeclaration(node, parent) {
-        return ts.hasSyntacticModifier(node, 16476 /* ParameterPropertyModifier */) && parent.kind === 167 /* Constructor */;
+        return ts.hasSyntacticModifier(node, 16476 /* ParameterPropertyModifier */) && parent.kind === 169 /* Constructor */;
     }
     ts.isParameterPropertyDeclaration = isParameterPropertyDeclaration;
     function isEmptyBindingPattern(node) {
@@ -12061,14 +12376,14 @@
             node = walkUpBindingElementsAndPatterns(node);
         }
         var flags = getFlags(node);
-        if (node.kind === 250 /* VariableDeclaration */) {
+        if (node.kind === 252 /* VariableDeclaration */) {
             node = node.parent;
         }
-        if (node && node.kind === 251 /* VariableDeclarationList */) {
+        if (node && node.kind === 253 /* VariableDeclarationList */) {
             flags |= getFlags(node);
             node = node.parent;
         }
-        if (node && node.kind === 233 /* VariableStatement */) {
+        if (node && node.kind === 235 /* VariableStatement */) {
             flags |= getFlags(node);
         }
         return flags;
@@ -12241,30 +12556,30 @@
         }
         // Covers remaining cases (returning undefined if none match).
         switch (hostNode.kind) {
-            case 233 /* VariableStatement */:
+            case 235 /* VariableStatement */:
                 if (hostNode.declarationList && hostNode.declarationList.declarations[0]) {
                     return getDeclarationIdentifier(hostNode.declarationList.declarations[0]);
                 }
                 break;
-            case 234 /* ExpressionStatement */:
+            case 236 /* ExpressionStatement */:
                 var expr = hostNode.expression;
-                if (expr.kind === 217 /* BinaryExpression */ && expr.operatorToken.kind === 62 /* EqualsToken */) {
+                if (expr.kind === 219 /* BinaryExpression */ && expr.operatorToken.kind === 63 /* EqualsToken */) {
                     expr = expr.left;
                 }
                 switch (expr.kind) {
-                    case 202 /* PropertyAccessExpression */:
+                    case 204 /* PropertyAccessExpression */:
                         return expr.name;
-                    case 203 /* ElementAccessExpression */:
+                    case 205 /* ElementAccessExpression */:
                         var arg = expr.argumentExpression;
                         if (ts.isIdentifier(arg)) {
                             return arg;
                         }
                 }
                 break;
-            case 208 /* ParenthesizedExpression */: {
+            case 210 /* ParenthesizedExpression */: {
                 return getDeclarationIdentifier(hostNode.expression);
             }
-            case 246 /* LabeledStatement */: {
+            case 248 /* LabeledStatement */: {
                 if (isDeclaration(hostNode.statement) || isExpression(hostNode.statement)) {
                     return getDeclarationIdentifier(hostNode.statement);
                 }
@@ -12299,18 +12614,18 @@
     /** @internal */
     function getNonAssignedNameOfDeclaration(declaration) {
         switch (declaration.kind) {
-            case 78 /* Identifier */:
+            case 79 /* Identifier */:
                 return declaration;
-            case 337 /* JSDocPropertyTag */:
-            case 330 /* JSDocParameterTag */: {
+            case 342 /* JSDocPropertyTag */:
+            case 335 /* JSDocParameterTag */: {
                 var name = declaration.name;
-                if (name.kind === 158 /* QualifiedName */) {
+                if (name.kind === 159 /* QualifiedName */) {
                     return name.right;
                 }
                 break;
             }
-            case 204 /* CallExpression */:
-            case 217 /* BinaryExpression */: {
+            case 206 /* CallExpression */:
+            case 219 /* BinaryExpression */: {
                 var expr_1 = declaration;
                 switch (ts.getAssignmentDeclarationKind(expr_1)) {
                     case 1 /* ExportsProperty */:
@@ -12326,15 +12641,15 @@
                         return undefined;
                 }
             }
-            case 335 /* JSDocTypedefTag */:
+            case 340 /* JSDocTypedefTag */:
                 return getNameOfJSDocTypedef(declaration);
-            case 329 /* JSDocEnumTag */:
+            case 334 /* JSDocEnumTag */:
                 return nameForNamelessJSDocTypedef(declaration);
-            case 267 /* ExportAssignment */: {
+            case 269 /* ExportAssignment */: {
                 var expression = declaration.expression;
                 return ts.isIdentifier(expression) ? expression : undefined;
             }
-            case 203 /* ElementAccessExpression */:
+            case 205 /* ElementAccessExpression */:
                 var expr = declaration;
                 if (ts.isBindableStaticElementAccessExpression(expr)) {
                     return expr.argumentExpression;
@@ -12628,7 +12943,8 @@
     function getTextOfJSDocComment(comment) {
         return typeof comment === "string" ? comment
             : comment === null || comment === void 0 ? void 0 : comment.map(function (c) {
-                return c.kind === 313 /* JSDocText */ ? c.text : "{@link " + (c.name ? ts.entityNameToString(c.name) + " " : "") + c.text + "}";
+                // TODO: Other kinds here
+                return c.kind === 316 /* JSDocText */ ? c.text : "{@link " + (c.name ? ts.entityNameToString(c.name) + " " : "") + c.text + "}";
             }).join("");
     }
     ts.getTextOfJSDocComment = getTextOfJSDocComment;
@@ -12641,7 +12957,7 @@
             return ts.emptyArray;
         }
         if (ts.isJSDocTypeAlias(node)) {
-            ts.Debug.assert(node.parent.kind === 312 /* JSDocComment */);
+            ts.Debug.assert(node.parent.kind === 315 /* JSDocComment */);
             return ts.flatMap(node.parent.tags, function (tag) { return ts.isJSDocTemplateTag(tag) ? tag.typeParameters : undefined; });
         }
         if (node.typeParameters) {
@@ -12668,12 +12984,12 @@
     ts.getEffectiveConstraintOfTypeParameter = getEffectiveConstraintOfTypeParameter;
     // #region
     function isMemberName(node) {
-        return node.kind === 78 /* Identifier */ || node.kind === 79 /* PrivateIdentifier */;
+        return node.kind === 79 /* Identifier */ || node.kind === 80 /* PrivateIdentifier */;
     }
     ts.isMemberName = isMemberName;
     /* @internal */
     function isGetOrSetAccessorDeclaration(node) {
-        return node.kind === 169 /* SetAccessor */ || node.kind === 168 /* GetAccessor */;
+        return node.kind === 171 /* SetAccessor */ || node.kind === 170 /* GetAccessor */;
     }
     ts.isGetOrSetAccessorDeclaration = isGetOrSetAccessorDeclaration;
     function isPropertyAccessChain(node) {
@@ -12691,10 +13007,10 @@
     function isOptionalChain(node) {
         var kind = node.kind;
         return !!(node.flags & 32 /* OptionalChain */) &&
-            (kind === 202 /* PropertyAccessExpression */
-                || kind === 203 /* ElementAccessExpression */
-                || kind === 204 /* CallExpression */
-                || kind === 226 /* NonNullExpression */);
+            (kind === 204 /* PropertyAccessExpression */
+                || kind === 205 /* ElementAccessExpression */
+                || kind === 206 /* CallExpression */
+                || kind === 228 /* NonNullExpression */);
     }
     ts.isOptionalChain = isOptionalChain;
     /* @internal */
@@ -12729,7 +13045,7 @@
     }
     ts.isOutermostOptionalChain = isOutermostOptionalChain;
     function isNullishCoalesce(node) {
-        return node.kind === 217 /* BinaryExpression */ && node.operatorToken.kind === 60 /* QuestionQuestionToken */;
+        return node.kind === 219 /* BinaryExpression */ && node.operatorToken.kind === 60 /* QuestionQuestionToken */;
     }
     ts.isNullishCoalesce = isNullishCoalesce;
     function isConstTypeReference(node) {
@@ -12746,17 +13062,17 @@
     }
     ts.isNonNullChain = isNonNullChain;
     function isBreakOrContinueStatement(node) {
-        return node.kind === 242 /* BreakStatement */ || node.kind === 241 /* ContinueStatement */;
+        return node.kind === 244 /* BreakStatement */ || node.kind === 243 /* ContinueStatement */;
     }
     ts.isBreakOrContinueStatement = isBreakOrContinueStatement;
     function isNamedExportBindings(node) {
-        return node.kind === 270 /* NamespaceExport */ || node.kind === 269 /* NamedExports */;
+        return node.kind === 272 /* NamespaceExport */ || node.kind === 271 /* NamedExports */;
     }
     ts.isNamedExportBindings = isNamedExportBindings;
     function isUnparsedTextLike(node) {
         switch (node.kind) {
-            case 295 /* UnparsedText */:
-            case 296 /* UnparsedInternalText */:
+            case 297 /* UnparsedText */:
+            case 298 /* UnparsedInternalText */:
                 return true;
             default:
                 return false;
@@ -12765,12 +13081,12 @@
     ts.isUnparsedTextLike = isUnparsedTextLike;
     function isUnparsedNode(node) {
         return isUnparsedTextLike(node) ||
-            node.kind === 293 /* UnparsedPrologue */ ||
-            node.kind === 297 /* UnparsedSyntheticReference */;
+            node.kind === 295 /* UnparsedPrologue */ ||
+            node.kind === 299 /* UnparsedSyntheticReference */;
     }
     ts.isUnparsedNode = isUnparsedNode;
     function isJSDocPropertyLikeTag(node) {
-        return node.kind === 337 /* JSDocPropertyTag */ || node.kind === 330 /* JSDocParameterTag */;
+        return node.kind === 342 /* JSDocPropertyTag */ || node.kind === 335 /* JSDocParameterTag */;
     }
     ts.isJSDocPropertyLikeTag = isJSDocPropertyLikeTag;
     // #endregion
@@ -12786,7 +13102,7 @@
     ts.isNode = isNode;
     /* @internal */
     function isNodeKind(kind) {
-        return kind >= 158 /* FirstNode */;
+        return kind >= 159 /* FirstNode */;
     }
     ts.isNodeKind = isNodeKind;
     /**
@@ -12795,7 +13111,7 @@
      * Literals are considered tokens, except TemplateLiteral, but does include TemplateHead/Middle/Tail.
      */
     function isTokenKind(kind) {
-        return kind >= 0 /* FirstToken */ && kind <= 157 /* LastToken */;
+        return kind >= 0 /* FirstToken */ && kind <= 158 /* LastToken */;
     }
     ts.isTokenKind = isTokenKind;
     /**
@@ -12845,13 +13161,13 @@
     ts.isImportOrExportSpecifier = isImportOrExportSpecifier;
     function isTypeOnlyImportOrExportDeclaration(node) {
         switch (node.kind) {
-            case 266 /* ImportSpecifier */:
-            case 271 /* ExportSpecifier */:
+            case 268 /* ImportSpecifier */:
+            case 273 /* ExportSpecifier */:
                 return node.parent.parent.isTypeOnly;
-            case 264 /* NamespaceImport */:
+            case 266 /* NamespaceImport */:
                 return node.parent.isTypeOnly;
-            case 263 /* ImportClause */:
-            case 261 /* ImportEqualsDeclaration */:
+            case 265 /* ImportClause */:
+            case 263 /* ImportEqualsDeclaration */:
                 return node.isTypeOnly;
             default:
                 return false;
@@ -12883,18 +13199,18 @@
     /* @internal */
     function isModifierKind(token) {
         switch (token) {
-            case 125 /* AbstractKeyword */:
-            case 129 /* AsyncKeyword */:
-            case 84 /* ConstKeyword */:
-            case 133 /* DeclareKeyword */:
-            case 87 /* DefaultKeyword */:
-            case 92 /* ExportKeyword */:
-            case 122 /* PublicKeyword */:
-            case 120 /* PrivateKeyword */:
-            case 121 /* ProtectedKeyword */:
-            case 142 /* ReadonlyKeyword */:
-            case 123 /* StaticKeyword */:
-            case 156 /* OverrideKeyword */:
+            case 126 /* AbstractKeyword */:
+            case 130 /* AsyncKeyword */:
+            case 85 /* ConstKeyword */:
+            case 134 /* DeclareKeyword */:
+            case 88 /* DefaultKeyword */:
+            case 93 /* ExportKeyword */:
+            case 123 /* PublicKeyword */:
+            case 121 /* PrivateKeyword */:
+            case 122 /* ProtectedKeyword */:
+            case 143 /* ReadonlyKeyword */:
+            case 124 /* StaticKeyword */:
+            case 157 /* OverrideKeyword */:
                 return true;
         }
         return false;
@@ -12907,7 +13223,7 @@
     ts.isParameterPropertyModifier = isParameterPropertyModifier;
     /* @internal */
     function isClassMemberModifier(idToken) {
-        return isParameterPropertyModifier(idToken) || idToken === 123 /* StaticKeyword */ || idToken === 156 /* OverrideKeyword */;
+        return isParameterPropertyModifier(idToken) || idToken === 124 /* StaticKeyword */ || idToken === 157 /* OverrideKeyword */;
     }
     ts.isClassMemberModifier = isClassMemberModifier;
     function isModifier(node) {
@@ -12916,24 +13232,24 @@
     ts.isModifier = isModifier;
     function isEntityName(node) {
         var kind = node.kind;
-        return kind === 158 /* QualifiedName */
-            || kind === 78 /* Identifier */;
+        return kind === 159 /* QualifiedName */
+            || kind === 79 /* Identifier */;
     }
     ts.isEntityName = isEntityName;
     function isPropertyName(node) {
         var kind = node.kind;
-        return kind === 78 /* Identifier */
-            || kind === 79 /* PrivateIdentifier */
+        return kind === 79 /* Identifier */
+            || kind === 80 /* PrivateIdentifier */
             || kind === 10 /* StringLiteral */
             || kind === 8 /* NumericLiteral */
-            || kind === 159 /* ComputedPropertyName */;
+            || kind === 160 /* ComputedPropertyName */;
     }
     ts.isPropertyName = isPropertyName;
     function isBindingName(node) {
         var kind = node.kind;
-        return kind === 78 /* Identifier */
-            || kind === 197 /* ObjectBindingPattern */
-            || kind === 198 /* ArrayBindingPattern */;
+        return kind === 79 /* Identifier */
+            || kind === 199 /* ObjectBindingPattern */
+            || kind === 200 /* ArrayBindingPattern */;
     }
     ts.isBindingName = isBindingName;
     // Functions
@@ -12942,19 +13258,29 @@
     }
     ts.isFunctionLike = isFunctionLike;
     /* @internal */
+    function isFunctionLikeOrClassStaticBlockDeclaration(node) {
+        return !!node && (isFunctionLikeKind(node.kind) || ts.isClassStaticBlockDeclaration(node));
+    }
+    ts.isFunctionLikeOrClassStaticBlockDeclaration = isFunctionLikeOrClassStaticBlockDeclaration;
+    /* @internal */
     function isFunctionLikeDeclaration(node) {
         return node && isFunctionLikeDeclarationKind(node.kind);
     }
     ts.isFunctionLikeDeclaration = isFunctionLikeDeclaration;
+    /* @internal */
+    function isBooleanLiteral(node) {
+        return node.kind === 110 /* TrueKeyword */ || node.kind === 95 /* FalseKeyword */;
+    }
+    ts.isBooleanLiteral = isBooleanLiteral;
     function isFunctionLikeDeclarationKind(kind) {
         switch (kind) {
-            case 252 /* FunctionDeclaration */:
-            case 166 /* MethodDeclaration */:
-            case 167 /* Constructor */:
-            case 168 /* GetAccessor */:
-            case 169 /* SetAccessor */:
-            case 209 /* FunctionExpression */:
-            case 210 /* ArrowFunction */:
+            case 254 /* FunctionDeclaration */:
+            case 167 /* MethodDeclaration */:
+            case 169 /* Constructor */:
+            case 170 /* GetAccessor */:
+            case 171 /* SetAccessor */:
+            case 211 /* FunctionExpression */:
+            case 212 /* ArrowFunction */:
                 return true;
             default:
                 return false;
@@ -12963,14 +13289,14 @@
     /* @internal */
     function isFunctionLikeKind(kind) {
         switch (kind) {
-            case 165 /* MethodSignature */:
-            case 170 /* CallSignature */:
-            case 315 /* JSDocSignature */:
-            case 171 /* ConstructSignature */:
-            case 172 /* IndexSignature */:
-            case 175 /* FunctionType */:
-            case 309 /* JSDocFunctionType */:
-            case 176 /* ConstructorType */:
+            case 166 /* MethodSignature */:
+            case 172 /* CallSignature */:
+            case 318 /* JSDocSignature */:
+            case 173 /* ConstructSignature */:
+            case 174 /* IndexSignature */:
+            case 177 /* FunctionType */:
+            case 312 /* JSDocFunctionType */:
+            case 178 /* ConstructorType */:
                 return true;
             default:
                 return isFunctionLikeDeclarationKind(kind);
@@ -12985,29 +13311,30 @@
     // Classes
     function isClassElement(node) {
         var kind = node.kind;
-        return kind === 167 /* Constructor */
-            || kind === 164 /* PropertyDeclaration */
-            || kind === 166 /* MethodDeclaration */
-            || kind === 168 /* GetAccessor */
-            || kind === 169 /* SetAccessor */
-            || kind === 172 /* IndexSignature */
-            || kind === 230 /* SemicolonClassElement */;
+        return kind === 169 /* Constructor */
+            || kind === 165 /* PropertyDeclaration */
+            || kind === 167 /* MethodDeclaration */
+            || kind === 170 /* GetAccessor */
+            || kind === 171 /* SetAccessor */
+            || kind === 174 /* IndexSignature */
+            || kind === 168 /* ClassStaticBlockDeclaration */
+            || kind === 232 /* SemicolonClassElement */;
     }
     ts.isClassElement = isClassElement;
     function isClassLike(node) {
-        return node && (node.kind === 253 /* ClassDeclaration */ || node.kind === 222 /* ClassExpression */);
+        return node && (node.kind === 255 /* ClassDeclaration */ || node.kind === 224 /* ClassExpression */);
     }
     ts.isClassLike = isClassLike;
     function isAccessor(node) {
-        return node && (node.kind === 168 /* GetAccessor */ || node.kind === 169 /* SetAccessor */);
+        return node && (node.kind === 170 /* GetAccessor */ || node.kind === 171 /* SetAccessor */);
     }
     ts.isAccessor = isAccessor;
     /* @internal */
     function isMethodOrAccessor(node) {
         switch (node.kind) {
-            case 166 /* MethodDeclaration */:
-            case 168 /* GetAccessor */:
-            case 169 /* SetAccessor */:
+            case 167 /* MethodDeclaration */:
+            case 170 /* GetAccessor */:
+            case 171 /* SetAccessor */:
                 return true;
             default:
                 return false;
@@ -13017,11 +13344,11 @@
     // Type members
     function isTypeElement(node) {
         var kind = node.kind;
-        return kind === 171 /* ConstructSignature */
-            || kind === 170 /* CallSignature */
-            || kind === 163 /* PropertySignature */
-            || kind === 165 /* MethodSignature */
-            || kind === 172 /* IndexSignature */;
+        return kind === 173 /* ConstructSignature */
+            || kind === 172 /* CallSignature */
+            || kind === 164 /* PropertySignature */
+            || kind === 166 /* MethodSignature */
+            || kind === 174 /* IndexSignature */;
     }
     ts.isTypeElement = isTypeElement;
     function isClassOrTypeElement(node) {
@@ -13030,12 +13357,12 @@
     ts.isClassOrTypeElement = isClassOrTypeElement;
     function isObjectLiteralElementLike(node) {
         var kind = node.kind;
-        return kind === 289 /* PropertyAssignment */
-            || kind === 290 /* ShorthandPropertyAssignment */
-            || kind === 291 /* SpreadAssignment */
-            || kind === 166 /* MethodDeclaration */
-            || kind === 168 /* GetAccessor */
-            || kind === 169 /* SetAccessor */;
+        return kind === 291 /* PropertyAssignment */
+            || kind === 292 /* ShorthandPropertyAssignment */
+            || kind === 293 /* SpreadAssignment */
+            || kind === 167 /* MethodDeclaration */
+            || kind === 170 /* GetAccessor */
+            || kind === 171 /* SetAccessor */;
     }
     ts.isObjectLiteralElementLike = isObjectLiteralElementLike;
     // Type
@@ -13050,8 +13377,8 @@
     ts.isTypeNode = isTypeNode;
     function isFunctionOrConstructorTypeNode(node) {
         switch (node.kind) {
-            case 175 /* FunctionType */:
-            case 176 /* ConstructorType */:
+            case 177 /* FunctionType */:
+            case 178 /* ConstructorType */:
                 return true;
         }
         return false;
@@ -13062,8 +13389,8 @@
     function isBindingPattern(node) {
         if (node) {
             var kind = node.kind;
-            return kind === 198 /* ArrayBindingPattern */
-                || kind === 197 /* ObjectBindingPattern */;
+            return kind === 200 /* ArrayBindingPattern */
+                || kind === 199 /* ObjectBindingPattern */;
         }
         return false;
     }
@@ -13071,15 +13398,15 @@
     /* @internal */
     function isAssignmentPattern(node) {
         var kind = node.kind;
-        return kind === 200 /* ArrayLiteralExpression */
-            || kind === 201 /* ObjectLiteralExpression */;
+        return kind === 202 /* ArrayLiteralExpression */
+            || kind === 203 /* ObjectLiteralExpression */;
     }
     ts.isAssignmentPattern = isAssignmentPattern;
     /* @internal */
     function isArrayBindingElement(node) {
         var kind = node.kind;
-        return kind === 199 /* BindingElement */
-            || kind === 223 /* OmittedExpression */;
+        return kind === 201 /* BindingElement */
+            || kind === 225 /* OmittedExpression */;
     }
     ts.isArrayBindingElement = isArrayBindingElement;
     /**
@@ -13088,9 +13415,9 @@
     /* @internal */
     function isDeclarationBindingElement(bindingElement) {
         switch (bindingElement.kind) {
-            case 250 /* VariableDeclaration */:
-            case 161 /* Parameter */:
-            case 199 /* BindingElement */:
+            case 252 /* VariableDeclaration */:
+            case 162 /* Parameter */:
+            case 201 /* BindingElement */:
                 return true;
         }
         return false;
@@ -13111,21 +13438,33 @@
     /* @internal */
     function isObjectBindingOrAssignmentPattern(node) {
         switch (node.kind) {
-            case 197 /* ObjectBindingPattern */:
-            case 201 /* ObjectLiteralExpression */:
+            case 199 /* ObjectBindingPattern */:
+            case 203 /* ObjectLiteralExpression */:
                 return true;
         }
         return false;
     }
     ts.isObjectBindingOrAssignmentPattern = isObjectBindingOrAssignmentPattern;
+    /* @internal */
+    function isObjectBindingOrAssignmentElement(node) {
+        switch (node.kind) {
+            case 201 /* BindingElement */:
+            case 291 /* PropertyAssignment */: // AssignmentProperty
+            case 292 /* ShorthandPropertyAssignment */: // AssignmentProperty
+            case 293 /* SpreadAssignment */: // AssignmentRestProperty
+                return true;
+        }
+        return false;
+    }
+    ts.isObjectBindingOrAssignmentElement = isObjectBindingOrAssignmentElement;
     /**
      * Determines whether a node is an ArrayBindingOrAssignmentPattern
      */
     /* @internal */
     function isArrayBindingOrAssignmentPattern(node) {
         switch (node.kind) {
-            case 198 /* ArrayBindingPattern */:
-            case 200 /* ArrayLiteralExpression */:
+            case 200 /* ArrayBindingPattern */:
+            case 202 /* ArrayLiteralExpression */:
                 return true;
         }
         return false;
@@ -13134,26 +13473,26 @@
     /* @internal */
     function isPropertyAccessOrQualifiedNameOrImportTypeNode(node) {
         var kind = node.kind;
-        return kind === 202 /* PropertyAccessExpression */
-            || kind === 158 /* QualifiedName */
-            || kind === 196 /* ImportType */;
+        return kind === 204 /* PropertyAccessExpression */
+            || kind === 159 /* QualifiedName */
+            || kind === 198 /* ImportType */;
     }
     ts.isPropertyAccessOrQualifiedNameOrImportTypeNode = isPropertyAccessOrQualifiedNameOrImportTypeNode;
     // Expression
     function isPropertyAccessOrQualifiedName(node) {
         var kind = node.kind;
-        return kind === 202 /* PropertyAccessExpression */
-            || kind === 158 /* QualifiedName */;
+        return kind === 204 /* PropertyAccessExpression */
+            || kind === 159 /* QualifiedName */;
     }
     ts.isPropertyAccessOrQualifiedName = isPropertyAccessOrQualifiedName;
     function isCallLikeExpression(node) {
         switch (node.kind) {
-            case 276 /* JsxOpeningElement */:
-            case 275 /* JsxSelfClosingElement */:
-            case 204 /* CallExpression */:
-            case 205 /* NewExpression */:
-            case 206 /* TaggedTemplateExpression */:
-            case 162 /* Decorator */:
+            case 278 /* JsxOpeningElement */:
+            case 277 /* JsxSelfClosingElement */:
+            case 206 /* CallExpression */:
+            case 207 /* NewExpression */:
+            case 208 /* TaggedTemplateExpression */:
+            case 163 /* Decorator */:
                 return true;
             default:
                 return false;
@@ -13161,12 +13500,12 @@
     }
     ts.isCallLikeExpression = isCallLikeExpression;
     function isCallOrNewExpression(node) {
-        return node.kind === 204 /* CallExpression */ || node.kind === 205 /* NewExpression */;
+        return node.kind === 206 /* CallExpression */ || node.kind === 207 /* NewExpression */;
     }
     ts.isCallOrNewExpression = isCallOrNewExpression;
     function isTemplateLiteral(node) {
         var kind = node.kind;
-        return kind === 219 /* TemplateExpression */
+        return kind === 221 /* TemplateExpression */
             || kind === 14 /* NoSubstitutionTemplateLiteral */;
     }
     ts.isTemplateLiteral = isTemplateLiteral;
@@ -13177,34 +13516,34 @@
     ts.isLeftHandSideExpression = isLeftHandSideExpression;
     function isLeftHandSideExpressionKind(kind) {
         switch (kind) {
-            case 202 /* PropertyAccessExpression */:
-            case 203 /* ElementAccessExpression */:
-            case 205 /* NewExpression */:
-            case 204 /* CallExpression */:
-            case 274 /* JsxElement */:
-            case 275 /* JsxSelfClosingElement */:
-            case 278 /* JsxFragment */:
-            case 206 /* TaggedTemplateExpression */:
-            case 200 /* ArrayLiteralExpression */:
-            case 208 /* ParenthesizedExpression */:
-            case 201 /* ObjectLiteralExpression */:
-            case 222 /* ClassExpression */:
-            case 209 /* FunctionExpression */:
-            case 78 /* Identifier */:
+            case 204 /* PropertyAccessExpression */:
+            case 205 /* ElementAccessExpression */:
+            case 207 /* NewExpression */:
+            case 206 /* CallExpression */:
+            case 276 /* JsxElement */:
+            case 277 /* JsxSelfClosingElement */:
+            case 280 /* JsxFragment */:
+            case 208 /* TaggedTemplateExpression */:
+            case 202 /* ArrayLiteralExpression */:
+            case 210 /* ParenthesizedExpression */:
+            case 203 /* ObjectLiteralExpression */:
+            case 224 /* ClassExpression */:
+            case 211 /* FunctionExpression */:
+            case 79 /* Identifier */:
             case 13 /* RegularExpressionLiteral */:
             case 8 /* NumericLiteral */:
             case 9 /* BigIntLiteral */:
             case 10 /* StringLiteral */:
             case 14 /* NoSubstitutionTemplateLiteral */:
-            case 219 /* TemplateExpression */:
-            case 94 /* FalseKeyword */:
-            case 103 /* NullKeyword */:
-            case 107 /* ThisKeyword */:
-            case 109 /* TrueKeyword */:
-            case 105 /* SuperKeyword */:
-            case 226 /* NonNullExpression */:
-            case 227 /* MetaProperty */:
-            case 99 /* ImportKeyword */: // technically this is only an Expression if it's in a CallExpression
+            case 221 /* TemplateExpression */:
+            case 95 /* FalseKeyword */:
+            case 104 /* NullKeyword */:
+            case 108 /* ThisKeyword */:
+            case 110 /* TrueKeyword */:
+            case 106 /* SuperKeyword */:
+            case 228 /* NonNullExpression */:
+            case 229 /* MetaProperty */:
+            case 100 /* ImportKeyword */: // technically this is only an Expression if it's in a CallExpression
                 return true;
             default:
                 return false;
@@ -13217,13 +13556,13 @@
     ts.isUnaryExpression = isUnaryExpression;
     function isUnaryExpressionKind(kind) {
         switch (kind) {
-            case 215 /* PrefixUnaryExpression */:
-            case 216 /* PostfixUnaryExpression */:
-            case 211 /* DeleteExpression */:
-            case 212 /* TypeOfExpression */:
-            case 213 /* VoidExpression */:
-            case 214 /* AwaitExpression */:
-            case 207 /* TypeAssertionExpression */:
+            case 217 /* PrefixUnaryExpression */:
+            case 218 /* PostfixUnaryExpression */:
+            case 213 /* DeleteExpression */:
+            case 214 /* TypeOfExpression */:
+            case 215 /* VoidExpression */:
+            case 216 /* AwaitExpression */:
+            case 209 /* TypeAssertionExpression */:
                 return true;
             default:
                 return isLeftHandSideExpressionKind(kind);
@@ -13232,9 +13571,9 @@
     /* @internal */
     function isUnaryExpressionWithWrite(expr) {
         switch (expr.kind) {
-            case 216 /* PostfixUnaryExpression */:
+            case 218 /* PostfixUnaryExpression */:
                 return true;
-            case 215 /* PrefixUnaryExpression */:
+            case 217 /* PrefixUnaryExpression */:
                 return expr.operator === 45 /* PlusPlusToken */ ||
                     expr.operator === 46 /* MinusMinusToken */;
             default:
@@ -13253,15 +13592,15 @@
     ts.isExpression = isExpression;
     function isExpressionKind(kind) {
         switch (kind) {
-            case 218 /* ConditionalExpression */:
-            case 220 /* YieldExpression */:
-            case 210 /* ArrowFunction */:
-            case 217 /* BinaryExpression */:
-            case 221 /* SpreadElement */:
-            case 225 /* AsExpression */:
-            case 223 /* OmittedExpression */:
-            case 341 /* CommaListExpression */:
-            case 340 /* PartiallyEmittedExpression */:
+            case 220 /* ConditionalExpression */:
+            case 222 /* YieldExpression */:
+            case 212 /* ArrowFunction */:
+            case 219 /* BinaryExpression */:
+            case 223 /* SpreadElement */:
+            case 227 /* AsExpression */:
+            case 225 /* OmittedExpression */:
+            case 346 /* CommaListExpression */:
+            case 345 /* PartiallyEmittedExpression */:
                 return true;
             default:
                 return isUnaryExpressionKind(kind);
@@ -13269,8 +13608,8 @@
     }
     function isAssertionExpression(node) {
         var kind = node.kind;
-        return kind === 207 /* TypeAssertionExpression */
-            || kind === 225 /* AsExpression */;
+        return kind === 209 /* TypeAssertionExpression */
+            || kind === 227 /* AsExpression */;
     }
     ts.isAssertionExpression = isAssertionExpression;
     /* @internal */
@@ -13281,13 +13620,13 @@
     ts.isNotEmittedOrPartiallyEmittedNode = isNotEmittedOrPartiallyEmittedNode;
     function isIterationStatement(node, lookInLabeledStatements) {
         switch (node.kind) {
-            case 238 /* ForStatement */:
-            case 239 /* ForInStatement */:
-            case 240 /* ForOfStatement */:
-            case 236 /* DoStatement */:
-            case 237 /* WhileStatement */:
+            case 240 /* ForStatement */:
+            case 241 /* ForInStatement */:
+            case 242 /* ForOfStatement */:
+            case 238 /* DoStatement */:
+            case 239 /* WhileStatement */:
                 return true;
-            case 246 /* LabeledStatement */:
+            case 248 /* LabeledStatement */:
                 return lookInLabeledStatements && isIterationStatement(node.statement, lookInLabeledStatements);
         }
         return false;
@@ -13316,7 +13655,7 @@
     ts.isExternalModuleIndicator = isExternalModuleIndicator;
     /* @internal */
     function isForInOrOfStatement(node) {
-        return node.kind === 239 /* ForInStatement */ || node.kind === 240 /* ForOfStatement */;
+        return node.kind === 241 /* ForInStatement */ || node.kind === 242 /* ForOfStatement */;
     }
     ts.isForInOrOfStatement = isForInOrOfStatement;
     // Element
@@ -13340,114 +13679,115 @@
     /* @internal */
     function isModuleBody(node) {
         var kind = node.kind;
-        return kind === 258 /* ModuleBlock */
-            || kind === 257 /* ModuleDeclaration */
-            || kind === 78 /* Identifier */;
+        return kind === 260 /* ModuleBlock */
+            || kind === 259 /* ModuleDeclaration */
+            || kind === 79 /* Identifier */;
     }
     ts.isModuleBody = isModuleBody;
     /* @internal */
     function isNamespaceBody(node) {
         var kind = node.kind;
-        return kind === 258 /* ModuleBlock */
-            || kind === 257 /* ModuleDeclaration */;
+        return kind === 260 /* ModuleBlock */
+            || kind === 259 /* ModuleDeclaration */;
     }
     ts.isNamespaceBody = isNamespaceBody;
     /* @internal */
     function isJSDocNamespaceBody(node) {
         var kind = node.kind;
-        return kind === 78 /* Identifier */
-            || kind === 257 /* ModuleDeclaration */;
+        return kind === 79 /* Identifier */
+            || kind === 259 /* ModuleDeclaration */;
     }
     ts.isJSDocNamespaceBody = isJSDocNamespaceBody;
     /* @internal */
     function isNamedImportBindings(node) {
         var kind = node.kind;
-        return kind === 265 /* NamedImports */
-            || kind === 264 /* NamespaceImport */;
+        return kind === 267 /* NamedImports */
+            || kind === 266 /* NamespaceImport */;
     }
     ts.isNamedImportBindings = isNamedImportBindings;
     /* @internal */
     function isModuleOrEnumDeclaration(node) {
-        return node.kind === 257 /* ModuleDeclaration */ || node.kind === 256 /* EnumDeclaration */;
+        return node.kind === 259 /* ModuleDeclaration */ || node.kind === 258 /* EnumDeclaration */;
     }
     ts.isModuleOrEnumDeclaration = isModuleOrEnumDeclaration;
     function isDeclarationKind(kind) {
-        return kind === 210 /* ArrowFunction */
-            || kind === 199 /* BindingElement */
-            || kind === 253 /* ClassDeclaration */
-            || kind === 222 /* ClassExpression */
-            || kind === 167 /* Constructor */
-            || kind === 256 /* EnumDeclaration */
-            || kind === 292 /* EnumMember */
-            || kind === 271 /* ExportSpecifier */
-            || kind === 252 /* FunctionDeclaration */
-            || kind === 209 /* FunctionExpression */
-            || kind === 168 /* GetAccessor */
-            || kind === 263 /* ImportClause */
-            || kind === 261 /* ImportEqualsDeclaration */
-            || kind === 266 /* ImportSpecifier */
-            || kind === 254 /* InterfaceDeclaration */
-            || kind === 281 /* JsxAttribute */
-            || kind === 166 /* MethodDeclaration */
-            || kind === 165 /* MethodSignature */
-            || kind === 257 /* ModuleDeclaration */
-            || kind === 260 /* NamespaceExportDeclaration */
-            || kind === 264 /* NamespaceImport */
-            || kind === 270 /* NamespaceExport */
-            || kind === 161 /* Parameter */
-            || kind === 289 /* PropertyAssignment */
-            || kind === 164 /* PropertyDeclaration */
-            || kind === 163 /* PropertySignature */
-            || kind === 169 /* SetAccessor */
-            || kind === 290 /* ShorthandPropertyAssignment */
-            || kind === 255 /* TypeAliasDeclaration */
-            || kind === 160 /* TypeParameter */
-            || kind === 250 /* VariableDeclaration */
-            || kind === 335 /* JSDocTypedefTag */
-            || kind === 328 /* JSDocCallbackTag */
-            || kind === 337 /* JSDocPropertyTag */;
+        return kind === 212 /* ArrowFunction */
+            || kind === 201 /* BindingElement */
+            || kind === 255 /* ClassDeclaration */
+            || kind === 224 /* ClassExpression */
+            || kind === 168 /* ClassStaticBlockDeclaration */
+            || kind === 169 /* Constructor */
+            || kind === 258 /* EnumDeclaration */
+            || kind === 294 /* EnumMember */
+            || kind === 273 /* ExportSpecifier */
+            || kind === 254 /* FunctionDeclaration */
+            || kind === 211 /* FunctionExpression */
+            || kind === 170 /* GetAccessor */
+            || kind === 265 /* ImportClause */
+            || kind === 263 /* ImportEqualsDeclaration */
+            || kind === 268 /* ImportSpecifier */
+            || kind === 256 /* InterfaceDeclaration */
+            || kind === 283 /* JsxAttribute */
+            || kind === 167 /* MethodDeclaration */
+            || kind === 166 /* MethodSignature */
+            || kind === 259 /* ModuleDeclaration */
+            || kind === 262 /* NamespaceExportDeclaration */
+            || kind === 266 /* NamespaceImport */
+            || kind === 272 /* NamespaceExport */
+            || kind === 162 /* Parameter */
+            || kind === 291 /* PropertyAssignment */
+            || kind === 165 /* PropertyDeclaration */
+            || kind === 164 /* PropertySignature */
+            || kind === 171 /* SetAccessor */
+            || kind === 292 /* ShorthandPropertyAssignment */
+            || kind === 257 /* TypeAliasDeclaration */
+            || kind === 161 /* TypeParameter */
+            || kind === 252 /* VariableDeclaration */
+            || kind === 340 /* JSDocTypedefTag */
+            || kind === 333 /* JSDocCallbackTag */
+            || kind === 342 /* JSDocPropertyTag */;
     }
     function isDeclarationStatementKind(kind) {
-        return kind === 252 /* FunctionDeclaration */
-            || kind === 272 /* MissingDeclaration */
-            || kind === 253 /* ClassDeclaration */
-            || kind === 254 /* InterfaceDeclaration */
-            || kind === 255 /* TypeAliasDeclaration */
-            || kind === 256 /* EnumDeclaration */
-            || kind === 257 /* ModuleDeclaration */
-            || kind === 262 /* ImportDeclaration */
-            || kind === 261 /* ImportEqualsDeclaration */
-            || kind === 268 /* ExportDeclaration */
-            || kind === 267 /* ExportAssignment */
-            || kind === 260 /* NamespaceExportDeclaration */;
+        return kind === 254 /* FunctionDeclaration */
+            || kind === 274 /* MissingDeclaration */
+            || kind === 255 /* ClassDeclaration */
+            || kind === 256 /* InterfaceDeclaration */
+            || kind === 257 /* TypeAliasDeclaration */
+            || kind === 258 /* EnumDeclaration */
+            || kind === 259 /* ModuleDeclaration */
+            || kind === 264 /* ImportDeclaration */
+            || kind === 263 /* ImportEqualsDeclaration */
+            || kind === 270 /* ExportDeclaration */
+            || kind === 269 /* ExportAssignment */
+            || kind === 262 /* NamespaceExportDeclaration */;
     }
     function isStatementKindButNotDeclarationKind(kind) {
-        return kind === 242 /* BreakStatement */
-            || kind === 241 /* ContinueStatement */
-            || kind === 249 /* DebuggerStatement */
-            || kind === 236 /* DoStatement */
-            || kind === 234 /* ExpressionStatement */
-            || kind === 232 /* EmptyStatement */
-            || kind === 239 /* ForInStatement */
-            || kind === 240 /* ForOfStatement */
-            || kind === 238 /* ForStatement */
-            || kind === 235 /* IfStatement */
-            || kind === 246 /* LabeledStatement */
-            || kind === 243 /* ReturnStatement */
-            || kind === 245 /* SwitchStatement */
-            || kind === 247 /* ThrowStatement */
-            || kind === 248 /* TryStatement */
-            || kind === 233 /* VariableStatement */
-            || kind === 237 /* WhileStatement */
-            || kind === 244 /* WithStatement */
-            || kind === 339 /* NotEmittedStatement */
-            || kind === 343 /* EndOfDeclarationMarker */
-            || kind === 342 /* MergeDeclarationMarker */;
+        return kind === 244 /* BreakStatement */
+            || kind === 243 /* ContinueStatement */
+            || kind === 251 /* DebuggerStatement */
+            || kind === 238 /* DoStatement */
+            || kind === 236 /* ExpressionStatement */
+            || kind === 234 /* EmptyStatement */
+            || kind === 241 /* ForInStatement */
+            || kind === 242 /* ForOfStatement */
+            || kind === 240 /* ForStatement */
+            || kind === 237 /* IfStatement */
+            || kind === 248 /* LabeledStatement */
+            || kind === 245 /* ReturnStatement */
+            || kind === 247 /* SwitchStatement */
+            || kind === 249 /* ThrowStatement */
+            || kind === 250 /* TryStatement */
+            || kind === 235 /* VariableStatement */
+            || kind === 239 /* WhileStatement */
+            || kind === 246 /* WithStatement */
+            || kind === 344 /* NotEmittedStatement */
+            || kind === 348 /* EndOfDeclarationMarker */
+            || kind === 347 /* MergeDeclarationMarker */;
     }
     /* @internal */
     function isDeclaration(node) {
-        if (node.kind === 160 /* TypeParameter */) {
-            return (node.parent && node.parent.kind !== 334 /* JSDocTemplateTag */) || ts.isInJSFile(node);
+        if (node.kind === 161 /* TypeParameter */) {
+            return (node.parent && node.parent.kind !== 339 /* JSDocTemplateTag */) || ts.isInJSFile(node);
         }
         return isDeclarationKind(node.kind);
     }
@@ -13474,10 +13814,10 @@
     }
     ts.isStatement = isStatement;
     function isBlockStatement(node) {
-        if (node.kind !== 231 /* Block */)
+        if (node.kind !== 233 /* Block */)
             return false;
         if (node.parent !== undefined) {
-            if (node.parent.kind === 248 /* TryStatement */ || node.parent.kind === 288 /* CatchClause */) {
+            if (node.parent.kind === 250 /* TryStatement */ || node.parent.kind === 290 /* CatchClause */) {
                 return false;
             }
         }
@@ -13491,77 +13831,77 @@
         var kind = node.kind;
         return isStatementKindButNotDeclarationKind(kind)
             || isDeclarationStatementKind(kind)
-            || kind === 231 /* Block */;
+            || kind === 233 /* Block */;
     }
     ts.isStatementOrBlock = isStatementOrBlock;
     // Module references
     /* @internal */
     function isModuleReference(node) {
         var kind = node.kind;
-        return kind === 273 /* ExternalModuleReference */
-            || kind === 158 /* QualifiedName */
-            || kind === 78 /* Identifier */;
+        return kind === 275 /* ExternalModuleReference */
+            || kind === 159 /* QualifiedName */
+            || kind === 79 /* Identifier */;
     }
     ts.isModuleReference = isModuleReference;
     // JSX
     /* @internal */
     function isJsxTagNameExpression(node) {
         var kind = node.kind;
-        return kind === 107 /* ThisKeyword */
-            || kind === 78 /* Identifier */
-            || kind === 202 /* PropertyAccessExpression */;
+        return kind === 108 /* ThisKeyword */
+            || kind === 79 /* Identifier */
+            || kind === 204 /* PropertyAccessExpression */;
     }
     ts.isJsxTagNameExpression = isJsxTagNameExpression;
     /* @internal */
     function isJsxChild(node) {
         var kind = node.kind;
-        return kind === 274 /* JsxElement */
-            || kind === 284 /* JsxExpression */
-            || kind === 275 /* JsxSelfClosingElement */
+        return kind === 276 /* JsxElement */
+            || kind === 286 /* JsxExpression */
+            || kind === 277 /* JsxSelfClosingElement */
             || kind === 11 /* JsxText */
-            || kind === 278 /* JsxFragment */;
+            || kind === 280 /* JsxFragment */;
     }
     ts.isJsxChild = isJsxChild;
     /* @internal */
     function isJsxAttributeLike(node) {
         var kind = node.kind;
-        return kind === 281 /* JsxAttribute */
-            || kind === 283 /* JsxSpreadAttribute */;
+        return kind === 283 /* JsxAttribute */
+            || kind === 285 /* JsxSpreadAttribute */;
     }
     ts.isJsxAttributeLike = isJsxAttributeLike;
     /* @internal */
     function isStringLiteralOrJsxExpression(node) {
         var kind = node.kind;
         return kind === 10 /* StringLiteral */
-            || kind === 284 /* JsxExpression */;
+            || kind === 286 /* JsxExpression */;
     }
     ts.isStringLiteralOrJsxExpression = isStringLiteralOrJsxExpression;
     function isJsxOpeningLikeElement(node) {
         var kind = node.kind;
-        return kind === 276 /* JsxOpeningElement */
-            || kind === 275 /* JsxSelfClosingElement */;
+        return kind === 278 /* JsxOpeningElement */
+            || kind === 277 /* JsxSelfClosingElement */;
     }
     ts.isJsxOpeningLikeElement = isJsxOpeningLikeElement;
     // Clauses
     function isCaseOrDefaultClause(node) {
         var kind = node.kind;
-        return kind === 285 /* CaseClause */
-            || kind === 286 /* DefaultClause */;
+        return kind === 287 /* CaseClause */
+            || kind === 288 /* DefaultClause */;
     }
     ts.isCaseOrDefaultClause = isCaseOrDefaultClause;
     // JSDoc
     /** True if node is of some JSDoc syntax kind. */
     /* @internal */
     function isJSDocNode(node) {
-        return node.kind >= 302 /* FirstJSDocNode */ && node.kind <= 337 /* LastJSDocNode */;
+        return node.kind >= 304 /* FirstJSDocNode */ && node.kind <= 342 /* LastJSDocNode */;
     }
     ts.isJSDocNode = isJSDocNode;
     /** True if node is of a kind that may contain comment text. */
     function isJSDocCommentContainingNode(node) {
-        return node.kind === 312 /* JSDocComment */
-            || node.kind === 311 /* JSDocNamepathType */
-            || node.kind === 313 /* JSDocText */
-            || node.kind === 316 /* JSDocLink */
+        return node.kind === 315 /* JSDocComment */
+            || node.kind === 314 /* JSDocNamepathType */
+            || node.kind === 316 /* JSDocText */
+            || isJSDocLinkLike(node)
             || isJSDocTag(node)
             || ts.isJSDocTypeLiteral(node)
             || ts.isJSDocSignature(node);
@@ -13570,15 +13910,15 @@
     // TODO: determine what this does before making it public.
     /* @internal */
     function isJSDocTag(node) {
-        return node.kind >= 317 /* FirstJSDocTagNode */ && node.kind <= 337 /* LastJSDocTagNode */;
+        return node.kind >= 322 /* FirstJSDocTagNode */ && node.kind <= 342 /* LastJSDocTagNode */;
     }
     ts.isJSDocTag = isJSDocTag;
     function isSetAccessor(node) {
-        return node.kind === 169 /* SetAccessor */;
+        return node.kind === 171 /* SetAccessor */;
     }
     ts.isSetAccessor = isSetAccessor;
     function isGetAccessor(node) {
-        return node.kind === 168 /* GetAccessor */;
+        return node.kind === 170 /* GetAccessor */;
     }
     ts.isGetAccessor = isGetAccessor;
     /** True if has jsdoc nodes attached to it. */
@@ -13604,13 +13944,13 @@
     /** True if has initializer node attached to it. */
     function hasOnlyExpressionInitializer(node) {
         switch (node.kind) {
-            case 250 /* VariableDeclaration */:
-            case 161 /* Parameter */:
-            case 199 /* BindingElement */:
-            case 163 /* PropertySignature */:
-            case 164 /* PropertyDeclaration */:
-            case 289 /* PropertyAssignment */:
-            case 292 /* EnumMember */:
+            case 252 /* VariableDeclaration */:
+            case 162 /* Parameter */:
+            case 201 /* BindingElement */:
+            case 164 /* PropertySignature */:
+            case 165 /* PropertyDeclaration */:
+            case 291 /* PropertyAssignment */:
+            case 294 /* EnumMember */:
                 return true;
             default:
                 return false;
@@ -13618,12 +13958,12 @@
     }
     ts.hasOnlyExpressionInitializer = hasOnlyExpressionInitializer;
     function isObjectLiteralElement(node) {
-        return node.kind === 281 /* JsxAttribute */ || node.kind === 283 /* JsxSpreadAttribute */ || isObjectLiteralElementLike(node);
+        return node.kind === 283 /* JsxAttribute */ || node.kind === 285 /* JsxSpreadAttribute */ || isObjectLiteralElementLike(node);
     }
     ts.isObjectLiteralElement = isObjectLiteralElement;
     /* @internal */
     function isTypeReferenceType(node) {
-        return node.kind === 174 /* TypeReference */ || node.kind === 224 /* ExpressionWithTypeArguments */;
+        return node.kind === 176 /* TypeReference */ || node.kind === 226 /* ExpressionWithTypeArguments */;
     }
     ts.isTypeReferenceType = isTypeReferenceType;
     var MAX_SMI_X86 = 1073741823;
@@ -13655,6 +13995,10 @@
         return node.kind === 10 /* StringLiteral */ || node.kind === 14 /* NoSubstitutionTemplateLiteral */;
     }
     ts.isStringLiteralLike = isStringLiteralLike;
+    function isJSDocLinkLike(node) {
+        return node.kind === 319 /* JSDocLink */ || node.kind === 320 /* JSDocLinkCode */ || node.kind === 321 /* JSDocLinkPlain */;
+    }
+    ts.isJSDocLinkLike = isJSDocLinkLike;
     // #endregion
 })(ts || (ts = {}));
 /* @internal */
@@ -13739,7 +14083,7 @@
             increaseIndent: ts.noop,
             decreaseIndent: ts.noop,
             clear: function () { return str = ""; },
-            trackSymbol: ts.noop,
+            trackSymbol: function () { return false; },
             reportInaccessibleThisError: ts.noop,
             reportInaccessibleUniqueSymbolError: ts.noop,
             reportPrivateInBaseOfClassExpression: ts.noop,
@@ -13751,11 +14095,19 @@
     }
     ts.changesAffectModuleResolution = changesAffectModuleResolution;
     function optionsHaveModuleResolutionChanges(oldOptions, newOptions) {
-        return ts.moduleResolutionOptionDeclarations.some(function (o) {
+        return optionsHaveChanges(oldOptions, newOptions, ts.moduleResolutionOptionDeclarations);
+    }
+    ts.optionsHaveModuleResolutionChanges = optionsHaveModuleResolutionChanges;
+    function changesAffectingProgramStructure(oldOptions, newOptions) {
+        return optionsHaveChanges(oldOptions, newOptions, ts.optionsAffectingProgramStructure);
+    }
+    ts.changesAffectingProgramStructure = changesAffectingProgramStructure;
+    function optionsHaveChanges(oldOptions, newOptions, optionDeclarations) {
+        return oldOptions !== newOptions && optionDeclarations.some(function (o) {
             return !isJsonEqual(getCompilerOptionValue(oldOptions, o), getCompilerOptionValue(newOptions, o));
         });
     }
-    ts.optionsHaveModuleResolutionChanges = optionsHaveModuleResolutionChanges;
+    ts.optionsHaveChanges = optionsHaveChanges;
     function forEachAncestor(node, callback) {
         while (true) {
             var res = callback(node);
@@ -13906,19 +14258,23 @@
         }
     }
     function getSourceFileOfNode(node) {
-        while (node && node.kind !== 298 /* SourceFile */) {
+        while (node && node.kind !== 300 /* SourceFile */) {
             node = node.parent;
         }
         return node;
     }
     ts.getSourceFileOfNode = getSourceFileOfNode;
+    function getSourceFileOfModule(module) {
+        return getSourceFileOfNode(module.valueDeclaration || getNonAugmentationDeclaration(module));
+    }
+    ts.getSourceFileOfModule = getSourceFileOfModule;
     function isStatementWithLocals(node) {
         switch (node.kind) {
-            case 231 /* Block */:
-            case 259 /* CaseBlock */:
-            case 238 /* ForStatement */:
-            case 239 /* ForInStatement */:
-            case 240 /* ForOfStatement */:
+            case 233 /* Block */:
+            case 261 /* CaseBlock */:
+            case 240 /* ForStatement */:
+            case 241 /* ForInStatement */:
+            case 242 /* ForOfStatement */:
                 return true;
         }
         return false;
@@ -14003,7 +14359,7 @@
                 break;
             }
         }
-        to.splice.apply(to, __spreadArray([statementIndex, 0], from));
+        to.splice.apply(to, __spreadArray([statementIndex, 0], from, false));
         return to;
     }
     function insertStatementAfterPrologue(to, statement, isPrologueDirective) {
@@ -14056,10 +14412,10 @@
             commentPos + 2 < commentEnd &&
             text.charCodeAt(commentPos + 2) === 47 /* slash */) {
             var textSubStr = text.substring(commentPos, commentEnd);
-            return textSubStr.match(ts.fullTripleSlashReferencePathRegEx) ||
-                textSubStr.match(ts.fullTripleSlashAMDReferencePathRegEx) ||
-                textSubStr.match(fullTripleSlashReferenceTypeReferenceDirectiveRegEx) ||
-                textSubStr.match(defaultLibReferenceRegEx) ?
+            return ts.fullTripleSlashReferencePathRegEx.test(textSubStr) ||
+                ts.fullTripleSlashAMDReferencePathRegEx.test(textSubStr) ||
+                fullTripleSlashReferenceTypeReferenceDirectiveRegEx.test(textSubStr) ||
+                defaultLibReferenceRegEx.test(textSubStr) ?
                 true : false;
         }
         return false;
@@ -14114,7 +14470,7 @@
         // the syntax list itself considers them as normal trivia. Therefore if we simply skip
         // trivia for the list, we may have skipped the JSDocComment as well. So we should process its
         // first child to determine the actual position of its first token.
-        if (node.kind === 338 /* SyntaxList */ && node._children.length > 0) {
+        if (node.kind === 343 /* SyntaxList */ && node._children.length > 0) {
             return getTokenPosOfNode(node._children[0], sourceFile, includeJsDoc);
         }
         return ts.skipTrivia((sourceFile || getSourceFileOfNode(node)).text, node.pos, 
@@ -14149,7 +14505,7 @@
         var text = sourceText.substring(includeTrivia ? node.pos : ts.skipTrivia(sourceText, node.pos), node.end);
         if (isJSDocTypeExpressionOrChild(node)) {
             // strip space + asterisk at line start
-            text = text.replace(/(^|\r?\n|\r)\s*\*\s*/g, "$1");
+            text = text.split(/\r\n|\n|\r/).map(function (line) { return ts.trimStringStart(line.replace(/^\s*\*/, "")); }).join("\n");
         }
         return text;
     }
@@ -14257,6 +14613,7 @@
         GetLiteralTextFlags[GetLiteralTextFlags["AllowNumericSeparator"] = 8] = "AllowNumericSeparator";
     })(GetLiteralTextFlags = ts.GetLiteralTextFlags || (ts.GetLiteralTextFlags = {}));
     function getLiteralText(node, sourceFile, flags) {
+        var _a;
         // If we don't need to downlevel and we can reach the original source text using
         // the node's parent reference, then simply get the text as it was originally written.
         if (canUseOriginalText(node, flags)) {
@@ -14284,7 +14641,7 @@
                 // had to include a backslash: `not \${a} substitution`.
                 var escapeText = flags & 1 /* NeverAsciiEscape */ || (getEmitFlags(node) & 16777216 /* NoAsciiEscaping */) ? escapeString :
                     escapeNonAsciiString;
-                var rawText = node.rawText || escapeTemplateSubstitution(escapeText(node.text, 96 /* backtick */));
+                var rawText = (_a = node.rawText) !== null && _a !== void 0 ? _a : escapeTemplateSubstitution(escapeText(node.text, 96 /* backtick */));
                 switch (node.kind) {
                     case 14 /* NoSubstitutionTemplateLiteral */:
                         return "`" + rawText + "`";
@@ -14335,7 +14692,7 @@
     ts.isBlockOrCatchScoped = isBlockOrCatchScoped;
     function isCatchClauseVariableDeclarationOrBindingElement(declaration) {
         var node = getRootDeclaration(declaration);
-        return node.kind === 250 /* VariableDeclaration */ && node.parent.kind === 288 /* CatchClause */;
+        return node.kind === 252 /* VariableDeclaration */ && node.parent.kind === 290 /* CatchClause */;
     }
     ts.isCatchClauseVariableDeclarationOrBindingElement = isCatchClauseVariableDeclarationOrBindingElement;
     function isAmbientModule(node) {
@@ -14367,12 +14724,12 @@
     ts.isShorthandAmbientModuleSymbol = isShorthandAmbientModuleSymbol;
     function isShorthandAmbientModule(node) {
         // The only kind of module that can be missing a body is a shorthand ambient module.
-        return !!node && node.kind === 257 /* ModuleDeclaration */ && (!node.body);
+        return !!node && node.kind === 259 /* ModuleDeclaration */ && (!node.body);
     }
     function isBlockScopedContainerTopLevel(node) {
-        return node.kind === 298 /* SourceFile */ ||
-            node.kind === 257 /* ModuleDeclaration */ ||
-            ts.isFunctionLike(node);
+        return node.kind === 300 /* SourceFile */ ||
+            node.kind === 259 /* ModuleDeclaration */ ||
+            ts.isFunctionLikeOrClassStaticBlockDeclaration(node);
     }
     ts.isBlockScopedContainerTopLevel = isBlockScopedContainerTopLevel;
     function isGlobalScopeAugmentation(module) {
@@ -14388,9 +14745,9 @@
         // - defined in the top level scope and source file is an external module
         // - defined inside ambient module declaration located in the top level scope and source file not an external module
         switch (node.parent.kind) {
-            case 298 /* SourceFile */:
+            case 300 /* SourceFile */:
                 return ts.isExternalModule(node.parent);
-            case 258 /* ModuleBlock */:
+            case 260 /* ModuleBlock */:
                 return isAmbientModule(node.parent.parent) && ts.isSourceFile(node.parent.parent.parent) && !ts.isExternalModule(node.parent.parent.parent);
         }
         return false;
@@ -14444,34 +14801,36 @@
     ts.isEffectiveStrictModeSourceFile = isEffectiveStrictModeSourceFile;
     function isBlockScope(node, parentNode) {
         switch (node.kind) {
-            case 298 /* SourceFile */:
-            case 259 /* CaseBlock */:
-            case 288 /* CatchClause */:
-            case 257 /* ModuleDeclaration */:
-            case 238 /* ForStatement */:
-            case 239 /* ForInStatement */:
-            case 240 /* ForOfStatement */:
-            case 167 /* Constructor */:
-            case 166 /* MethodDeclaration */:
-            case 168 /* GetAccessor */:
-            case 169 /* SetAccessor */:
-            case 252 /* FunctionDeclaration */:
-            case 209 /* FunctionExpression */:
-            case 210 /* ArrowFunction */:
+            case 300 /* SourceFile */:
+            case 261 /* CaseBlock */:
+            case 290 /* CatchClause */:
+            case 259 /* ModuleDeclaration */:
+            case 240 /* ForStatement */:
+            case 241 /* ForInStatement */:
+            case 242 /* ForOfStatement */:
+            case 169 /* Constructor */:
+            case 167 /* MethodDeclaration */:
+            case 170 /* GetAccessor */:
+            case 171 /* SetAccessor */:
+            case 254 /* FunctionDeclaration */:
+            case 211 /* FunctionExpression */:
+            case 212 /* ArrowFunction */:
+            case 165 /* PropertyDeclaration */:
+            case 168 /* ClassStaticBlockDeclaration */:
                 return true;
-            case 231 /* Block */:
+            case 233 /* Block */:
                 // function block is not considered block-scope container
                 // see comment in binder.ts: bind(...), case for SyntaxKind.Block
-                return !ts.isFunctionLike(parentNode);
+                return !ts.isFunctionLikeOrClassStaticBlockDeclaration(parentNode);
         }
         return false;
     }
     ts.isBlockScope = isBlockScope;
     function isDeclarationWithTypeParameters(node) {
         switch (node.kind) {
-            case 328 /* JSDocCallbackTag */:
-            case 335 /* JSDocTypedefTag */:
-            case 315 /* JSDocSignature */:
+            case 333 /* JSDocCallbackTag */:
+            case 340 /* JSDocTypedefTag */:
+            case 318 /* JSDocSignature */:
                 return true;
             default:
                 ts.assertType(node);
@@ -14481,25 +14840,25 @@
     ts.isDeclarationWithTypeParameters = isDeclarationWithTypeParameters;
     function isDeclarationWithTypeParameterChildren(node) {
         switch (node.kind) {
-            case 170 /* CallSignature */:
-            case 171 /* ConstructSignature */:
-            case 165 /* MethodSignature */:
-            case 172 /* IndexSignature */:
-            case 175 /* FunctionType */:
-            case 176 /* ConstructorType */:
-            case 309 /* JSDocFunctionType */:
-            case 253 /* ClassDeclaration */:
-            case 222 /* ClassExpression */:
-            case 254 /* InterfaceDeclaration */:
-            case 255 /* TypeAliasDeclaration */:
-            case 334 /* JSDocTemplateTag */:
-            case 252 /* FunctionDeclaration */:
-            case 166 /* MethodDeclaration */:
-            case 167 /* Constructor */:
-            case 168 /* GetAccessor */:
-            case 169 /* SetAccessor */:
-            case 209 /* FunctionExpression */:
-            case 210 /* ArrowFunction */:
+            case 172 /* CallSignature */:
+            case 173 /* ConstructSignature */:
+            case 166 /* MethodSignature */:
+            case 174 /* IndexSignature */:
+            case 177 /* FunctionType */:
+            case 178 /* ConstructorType */:
+            case 312 /* JSDocFunctionType */:
+            case 255 /* ClassDeclaration */:
+            case 224 /* ClassExpression */:
+            case 256 /* InterfaceDeclaration */:
+            case 257 /* TypeAliasDeclaration */:
+            case 339 /* JSDocTemplateTag */:
+            case 254 /* FunctionDeclaration */:
+            case 167 /* MethodDeclaration */:
+            case 169 /* Constructor */:
+            case 170 /* GetAccessor */:
+            case 171 /* SetAccessor */:
+            case 211 /* FunctionExpression */:
+            case 212 /* ArrowFunction */:
                 return true;
             default:
                 ts.assertType(node);
@@ -14509,8 +14868,8 @@
     ts.isDeclarationWithTypeParameterChildren = isDeclarationWithTypeParameterChildren;
     function isAnyImportSyntax(node) {
         switch (node.kind) {
-            case 262 /* ImportDeclaration */:
-            case 261 /* ImportEqualsDeclaration */:
+            case 264 /* ImportDeclaration */:
+            case 263 /* ImportEqualsDeclaration */:
                 return true;
             default:
                 return false;
@@ -14519,15 +14878,15 @@
     ts.isAnyImportSyntax = isAnyImportSyntax;
     function isLateVisibilityPaintedStatement(node) {
         switch (node.kind) {
-            case 262 /* ImportDeclaration */:
-            case 261 /* ImportEqualsDeclaration */:
-            case 233 /* VariableStatement */:
-            case 253 /* ClassDeclaration */:
-            case 252 /* FunctionDeclaration */:
-            case 257 /* ModuleDeclaration */:
-            case 255 /* TypeAliasDeclaration */:
-            case 254 /* InterfaceDeclaration */:
-            case 256 /* EnumDeclaration */:
+            case 264 /* ImportDeclaration */:
+            case 263 /* ImportEqualsDeclaration */:
+            case 235 /* VariableStatement */:
+            case 255 /* ClassDeclaration */:
+            case 254 /* FunctionDeclaration */:
+            case 259 /* ModuleDeclaration */:
+            case 257 /* TypeAliasDeclaration */:
+            case 256 /* InterfaceDeclaration */:
+            case 258 /* EnumDeclaration */:
                 return true;
             default:
                 return false;
@@ -14548,6 +14907,14 @@
         return ts.findAncestor(node.parent, function (current) { return isBlockScope(current, current.parent); });
     }
     ts.getEnclosingBlockScopeContainer = getEnclosingBlockScopeContainer;
+    function forEachEnclosingBlockScopeContainer(node, cb) {
+        var container = getEnclosingBlockScopeContainer(node);
+        while (container) {
+            cb(container);
+            container = getEnclosingBlockScopeContainer(container);
+        }
+    }
+    ts.forEachEnclosingBlockScopeContainer = forEachEnclosingBlockScopeContainer;
     // Return display name of an identifier
     // Computed property names will just be emitted as "[<expr>]", where <expr> is the source
     // text of the expression in the computed property.
@@ -14560,19 +14927,19 @@
     }
     ts.getNameFromIndexInfo = getNameFromIndexInfo;
     function isComputedNonLiteralName(name) {
-        return name.kind === 159 /* ComputedPropertyName */ && !isStringOrNumericLiteralLike(name.expression);
+        return name.kind === 160 /* ComputedPropertyName */ && !isStringOrNumericLiteralLike(name.expression);
     }
     ts.isComputedNonLiteralName = isComputedNonLiteralName;
     function getTextOfPropertyName(name) {
         switch (name.kind) {
-            case 78 /* Identifier */:
-            case 79 /* PrivateIdentifier */:
+            case 79 /* Identifier */:
+            case 80 /* PrivateIdentifier */:
                 return name.escapedText;
             case 10 /* StringLiteral */:
             case 8 /* NumericLiteral */:
             case 14 /* NoSubstitutionTemplateLiteral */:
                 return ts.escapeLeadingUnderscores(name.text);
-            case 159 /* ComputedPropertyName */:
+            case 160 /* ComputedPropertyName */:
                 if (isStringOrNumericLiteralLike(name.expression))
                     return ts.escapeLeadingUnderscores(name.expression.text);
                 return ts.Debug.fail("Text of property name cannot be read from non-literal-valued ComputedPropertyNames");
@@ -14583,20 +14950,22 @@
     ts.getTextOfPropertyName = getTextOfPropertyName;
     function entityNameToString(name) {
         switch (name.kind) {
-            case 107 /* ThisKeyword */:
+            case 108 /* ThisKeyword */:
                 return "this";
-            case 79 /* PrivateIdentifier */:
-            case 78 /* Identifier */:
+            case 80 /* PrivateIdentifier */:
+            case 79 /* Identifier */:
                 return getFullWidth(name) === 0 ? ts.idText(name) : getTextOfNode(name);
-            case 158 /* QualifiedName */:
+            case 159 /* QualifiedName */:
                 return entityNameToString(name.left) + "." + entityNameToString(name.right);
-            case 202 /* PropertyAccessExpression */:
+            case 204 /* PropertyAccessExpression */:
                 if (ts.isIdentifier(name.name) || ts.isPrivateIdentifier(name.name)) {
                     return entityNameToString(name.expression) + "." + entityNameToString(name.name);
                 }
                 else {
                     return ts.Debug.assertNever(name.name);
                 }
+            case 306 /* JSDocMemberName */:
+                return entityNameToString(name.left) + entityNameToString(name.right);
             default:
                 return ts.Debug.assertNever(name);
         }
@@ -14676,7 +15045,7 @@
     ts.getSpanOfTokenAtPosition = getSpanOfTokenAtPosition;
     function getErrorSpanForArrowFunction(sourceFile, node) {
         var pos = ts.skipTrivia(sourceFile.text, node.pos);
-        if (node.body && node.body.kind === 231 /* Block */) {
+        if (node.body && node.body.kind === 233 /* Block */) {
             var startLine = ts.getLineAndCharacterOfPosition(sourceFile, node.body.pos).line;
             var endLine = ts.getLineAndCharacterOfPosition(sourceFile, node.body.end).line;
             if (startLine < endLine) {
@@ -14690,7 +15059,7 @@
     function getErrorSpanForNode(sourceFile, node) {
         var errorNode = node;
         switch (node.kind) {
-            case 298 /* SourceFile */:
+            case 300 /* SourceFile */:
                 var pos_1 = ts.skipTrivia(sourceFile.text, 0, /*stopAfterLineBreak*/ false);
                 if (pos_1 === sourceFile.text.length) {
                     // file is empty - return span for the beginning of the file
@@ -14699,28 +15068,29 @@
                 return getSpanOfTokenAtPosition(sourceFile, pos_1);
             // This list is a work in progress. Add missing node kinds to improve their error
             // spans.
-            case 250 /* VariableDeclaration */:
-            case 199 /* BindingElement */:
-            case 253 /* ClassDeclaration */:
-            case 222 /* ClassExpression */:
-            case 254 /* InterfaceDeclaration */:
-            case 257 /* ModuleDeclaration */:
-            case 256 /* EnumDeclaration */:
-            case 292 /* EnumMember */:
-            case 252 /* FunctionDeclaration */:
-            case 209 /* FunctionExpression */:
-            case 166 /* MethodDeclaration */:
-            case 168 /* GetAccessor */:
-            case 169 /* SetAccessor */:
-            case 255 /* TypeAliasDeclaration */:
-            case 164 /* PropertyDeclaration */:
-            case 163 /* PropertySignature */:
+            case 252 /* VariableDeclaration */:
+            case 201 /* BindingElement */:
+            case 255 /* ClassDeclaration */:
+            case 224 /* ClassExpression */:
+            case 256 /* InterfaceDeclaration */:
+            case 259 /* ModuleDeclaration */:
+            case 258 /* EnumDeclaration */:
+            case 294 /* EnumMember */:
+            case 254 /* FunctionDeclaration */:
+            case 211 /* FunctionExpression */:
+            case 167 /* MethodDeclaration */:
+            case 170 /* GetAccessor */:
+            case 171 /* SetAccessor */:
+            case 257 /* TypeAliasDeclaration */:
+            case 165 /* PropertyDeclaration */:
+            case 164 /* PropertySignature */:
+            case 266 /* NamespaceImport */:
                 errorNode = node.name;
                 break;
-            case 210 /* ArrowFunction */:
+            case 212 /* ArrowFunction */:
                 return getErrorSpanForArrowFunction(sourceFile, node);
-            case 285 /* CaseClause */:
-            case 286 /* DefaultClause */:
+            case 287 /* CaseClause */:
+            case 288 /* DefaultClause */:
                 var start = ts.skipTrivia(sourceFile.text, node.pos);
                 var end = node.statements.length > 0 ? node.statements[0].pos : node.end;
                 return ts.createTextSpanFromBounds(start, end);
@@ -14772,16 +15142,16 @@
     }
     ts.isLet = isLet;
     function isSuperCall(n) {
-        return n.kind === 204 /* CallExpression */ && n.expression.kind === 105 /* SuperKeyword */;
+        return n.kind === 206 /* CallExpression */ && n.expression.kind === 106 /* SuperKeyword */;
     }
     ts.isSuperCall = isSuperCall;
     function isImportCall(n) {
-        return n.kind === 204 /* CallExpression */ && n.expression.kind === 99 /* ImportKeyword */;
+        return n.kind === 206 /* CallExpression */ && n.expression.kind === 100 /* ImportKeyword */;
     }
     ts.isImportCall = isImportCall;
     function isImportMeta(n) {
         return ts.isMetaProperty(n)
-            && n.keywordToken === 99 /* ImportKeyword */
+            && n.keywordToken === 100 /* ImportKeyword */
             && n.name.escapedText === "meta";
     }
     ts.isImportMeta = isImportMeta;
@@ -14790,7 +15160,7 @@
     }
     ts.isLiteralImportTypeNode = isLiteralImportTypeNode;
     function isPrologueDirective(node) {
-        return node.kind === 234 /* ExpressionStatement */
+        return node.kind === 236 /* ExpressionStatement */
             && node.expression.kind === 10 /* StringLiteral */;
     }
     ts.isPrologueDirective = isPrologueDirective;
@@ -14818,12 +15188,12 @@
     }
     ts.getLeadingCommentRangesOfNode = getLeadingCommentRangesOfNode;
     function getJSDocCommentRanges(node, text) {
-        var commentRanges = (node.kind === 161 /* Parameter */ ||
-            node.kind === 160 /* TypeParameter */ ||
-            node.kind === 209 /* FunctionExpression */ ||
-            node.kind === 210 /* ArrowFunction */ ||
-            node.kind === 208 /* ParenthesizedExpression */ ||
-            node.kind === 250 /* VariableDeclaration */) ?
+        var commentRanges = (node.kind === 162 /* Parameter */ ||
+            node.kind === 161 /* TypeParameter */ ||
+            node.kind === 211 /* FunctionExpression */ ||
+            node.kind === 212 /* ArrowFunction */ ||
+            node.kind === 210 /* ParenthesizedExpression */ ||
+            node.kind === 252 /* VariableDeclaration */) ?
             ts.concatenate(ts.getTrailingCommentRanges(text, node.pos), ts.getLeadingCommentRanges(text, node.pos)) :
             ts.getLeadingCommentRanges(text, node.pos);
         // True if the comment starts with '/**' but not if it is '/**/'
@@ -14834,53 +15204,53 @@
         });
     }
     ts.getJSDocCommentRanges = getJSDocCommentRanges;
-    ts.fullTripleSlashReferencePathRegEx = /^(\/\/\/\s*<reference\s+path\s*=\s*)('|")(.+?)\2.*?\/>/;
-    var fullTripleSlashReferenceTypeReferenceDirectiveRegEx = /^(\/\/\/\s*<reference\s+types\s*=\s*)('|")(.+?)\2.*?\/>/;
-    ts.fullTripleSlashAMDReferencePathRegEx = /^(\/\/\/\s*<amd-dependency\s+path\s*=\s*)('|")(.+?)\2.*?\/>/;
-    var defaultLibReferenceRegEx = /^(\/\/\/\s*<reference\s+no-default-lib\s*=\s*)('|")(.+?)\2\s*\/>/;
+    ts.fullTripleSlashReferencePathRegEx = /^(\/\/\/\s*<reference\s+path\s*=\s*)(('[^']*')|("[^"]*")).*?\/>/;
+    var fullTripleSlashReferenceTypeReferenceDirectiveRegEx = /^(\/\/\/\s*<reference\s+types\s*=\s*)(('[^']*')|("[^"]*")).*?\/>/;
+    ts.fullTripleSlashAMDReferencePathRegEx = /^(\/\/\/\s*<amd-dependency\s+path\s*=\s*)(('[^']*')|("[^"]*")).*?\/>/;
+    var defaultLibReferenceRegEx = /^(\/\/\/\s*<reference\s+no-default-lib\s*=\s*)(('[^']*')|("[^"]*"))\s*\/>/;
     function isPartOfTypeNode(node) {
-        if (173 /* FirstTypeNode */ <= node.kind && node.kind <= 196 /* LastTypeNode */) {
+        if (175 /* FirstTypeNode */ <= node.kind && node.kind <= 198 /* LastTypeNode */) {
             return true;
         }
         switch (node.kind) {
-            case 128 /* AnyKeyword */:
-            case 152 /* UnknownKeyword */:
-            case 144 /* NumberKeyword */:
-            case 155 /* BigIntKeyword */:
-            case 147 /* StringKeyword */:
-            case 131 /* BooleanKeyword */:
-            case 148 /* SymbolKeyword */:
-            case 145 /* ObjectKeyword */:
-            case 150 /* UndefinedKeyword */:
-            case 141 /* NeverKeyword */:
+            case 129 /* AnyKeyword */:
+            case 153 /* UnknownKeyword */:
+            case 145 /* NumberKeyword */:
+            case 156 /* BigIntKeyword */:
+            case 148 /* StringKeyword */:
+            case 132 /* BooleanKeyword */:
+            case 149 /* SymbolKeyword */:
+            case 146 /* ObjectKeyword */:
+            case 151 /* UndefinedKeyword */:
+            case 142 /* NeverKeyword */:
                 return true;
-            case 113 /* VoidKeyword */:
-                return node.parent.kind !== 213 /* VoidExpression */;
-            case 224 /* ExpressionWithTypeArguments */:
+            case 114 /* VoidKeyword */:
+                return node.parent.kind !== 215 /* VoidExpression */;
+            case 226 /* ExpressionWithTypeArguments */:
                 return !isExpressionWithTypeArgumentsInClassExtendsClause(node);
-            case 160 /* TypeParameter */:
-                return node.parent.kind === 191 /* MappedType */ || node.parent.kind === 186 /* InferType */;
+            case 161 /* TypeParameter */:
+                return node.parent.kind === 193 /* MappedType */ || node.parent.kind === 188 /* InferType */;
             // Identifiers and qualified names may be type nodes, depending on their context. Climb
             // above them to find the lowest container
-            case 78 /* Identifier */:
+            case 79 /* Identifier */:
                 // If the identifier is the RHS of a qualified name, then it's a type iff its parent is.
-                if (node.parent.kind === 158 /* QualifiedName */ && node.parent.right === node) {
+                if (node.parent.kind === 159 /* QualifiedName */ && node.parent.right === node) {
                     node = node.parent;
                 }
-                else if (node.parent.kind === 202 /* PropertyAccessExpression */ && node.parent.name === node) {
+                else if (node.parent.kind === 204 /* PropertyAccessExpression */ && node.parent.name === node) {
                     node = node.parent;
                 }
                 // At this point, node is either a qualified name or an identifier
-                ts.Debug.assert(node.kind === 78 /* Identifier */ || node.kind === 158 /* QualifiedName */ || node.kind === 202 /* PropertyAccessExpression */, "'node' was expected to be a qualified name, identifier or property access in 'isPartOfTypeNode'.");
+                ts.Debug.assert(node.kind === 79 /* Identifier */ || node.kind === 159 /* QualifiedName */ || node.kind === 204 /* PropertyAccessExpression */, "'node' was expected to be a qualified name, identifier or property access in 'isPartOfTypeNode'.");
             // falls through
-            case 158 /* QualifiedName */:
-            case 202 /* PropertyAccessExpression */:
-            case 107 /* ThisKeyword */: {
+            case 159 /* QualifiedName */:
+            case 204 /* PropertyAccessExpression */:
+            case 108 /* ThisKeyword */: {
                 var parent = node.parent;
-                if (parent.kind === 177 /* TypeQuery */) {
+                if (parent.kind === 179 /* TypeQuery */) {
                     return false;
                 }
-                if (parent.kind === 196 /* ImportType */) {
+                if (parent.kind === 198 /* ImportType */) {
                     return !parent.isTypeOf;
                 }
                 // Do not recursively call isPartOfTypeNode on the parent. In the example:
@@ -14889,40 +15259,40 @@
                 //
                 // Calling isPartOfTypeNode would consider the qualified name A.B a type node.
                 // Only C and A.B.C are type nodes.
-                if (173 /* FirstTypeNode */ <= parent.kind && parent.kind <= 196 /* LastTypeNode */) {
+                if (175 /* FirstTypeNode */ <= parent.kind && parent.kind <= 198 /* LastTypeNode */) {
                     return true;
                 }
                 switch (parent.kind) {
-                    case 224 /* ExpressionWithTypeArguments */:
+                    case 226 /* ExpressionWithTypeArguments */:
                         return !isExpressionWithTypeArgumentsInClassExtendsClause(parent);
-                    case 160 /* TypeParameter */:
+                    case 161 /* TypeParameter */:
                         return node === parent.constraint;
-                    case 334 /* JSDocTemplateTag */:
+                    case 339 /* JSDocTemplateTag */:
                         return node === parent.constraint;
-                    case 164 /* PropertyDeclaration */:
-                    case 163 /* PropertySignature */:
-                    case 161 /* Parameter */:
-                    case 250 /* VariableDeclaration */:
+                    case 165 /* PropertyDeclaration */:
+                    case 164 /* PropertySignature */:
+                    case 162 /* Parameter */:
+                    case 252 /* VariableDeclaration */:
                         return node === parent.type;
-                    case 252 /* FunctionDeclaration */:
-                    case 209 /* FunctionExpression */:
-                    case 210 /* ArrowFunction */:
-                    case 167 /* Constructor */:
-                    case 166 /* MethodDeclaration */:
-                    case 165 /* MethodSignature */:
-                    case 168 /* GetAccessor */:
-                    case 169 /* SetAccessor */:
+                    case 254 /* FunctionDeclaration */:
+                    case 211 /* FunctionExpression */:
+                    case 212 /* ArrowFunction */:
+                    case 169 /* Constructor */:
+                    case 167 /* MethodDeclaration */:
+                    case 166 /* MethodSignature */:
+                    case 170 /* GetAccessor */:
+                    case 171 /* SetAccessor */:
                         return node === parent.type;
-                    case 170 /* CallSignature */:
-                    case 171 /* ConstructSignature */:
-                    case 172 /* IndexSignature */:
+                    case 172 /* CallSignature */:
+                    case 173 /* ConstructSignature */:
+                    case 174 /* IndexSignature */:
                         return node === parent.type;
-                    case 207 /* TypeAssertionExpression */:
+                    case 209 /* TypeAssertionExpression */:
                         return node === parent.type;
-                    case 204 /* CallExpression */:
-                    case 205 /* NewExpression */:
+                    case 206 /* CallExpression */:
+                    case 207 /* NewExpression */:
                         return ts.contains(parent.typeArguments, node);
-                    case 206 /* TaggedTemplateExpression */:
+                    case 208 /* TaggedTemplateExpression */:
                         // TODO (drosen): TaggedTemplateExpressions may eventually support type arguments.
                         return false;
                 }
@@ -14947,23 +15317,23 @@
         return traverse(body);
         function traverse(node) {
             switch (node.kind) {
-                case 243 /* ReturnStatement */:
+                case 245 /* ReturnStatement */:
                     return visitor(node);
-                case 259 /* CaseBlock */:
-                case 231 /* Block */:
-                case 235 /* IfStatement */:
-                case 236 /* DoStatement */:
-                case 237 /* WhileStatement */:
-                case 238 /* ForStatement */:
-                case 239 /* ForInStatement */:
-                case 240 /* ForOfStatement */:
-                case 244 /* WithStatement */:
-                case 245 /* SwitchStatement */:
-                case 285 /* CaseClause */:
-                case 286 /* DefaultClause */:
-                case 246 /* LabeledStatement */:
-                case 248 /* TryStatement */:
-                case 288 /* CatchClause */:
+                case 261 /* CaseBlock */:
+                case 233 /* Block */:
+                case 237 /* IfStatement */:
+                case 238 /* DoStatement */:
+                case 239 /* WhileStatement */:
+                case 240 /* ForStatement */:
+                case 241 /* ForInStatement */:
+                case 242 /* ForOfStatement */:
+                case 246 /* WithStatement */:
+                case 247 /* SwitchStatement */:
+                case 287 /* CaseClause */:
+                case 288 /* DefaultClause */:
+                case 248 /* LabeledStatement */:
+                case 250 /* TryStatement */:
+                case 290 /* CatchClause */:
                     return ts.forEachChild(node, traverse);
             }
         }
@@ -14973,23 +15343,23 @@
         return traverse(body);
         function traverse(node) {
             switch (node.kind) {
-                case 220 /* YieldExpression */:
+                case 222 /* YieldExpression */:
                     visitor(node);
                     var operand = node.expression;
                     if (operand) {
                         traverse(operand);
                     }
                     return;
-                case 256 /* EnumDeclaration */:
-                case 254 /* InterfaceDeclaration */:
-                case 257 /* ModuleDeclaration */:
-                case 255 /* TypeAliasDeclaration */:
+                case 258 /* EnumDeclaration */:
+                case 256 /* InterfaceDeclaration */:
+                case 259 /* ModuleDeclaration */:
+                case 257 /* TypeAliasDeclaration */:
                     // These are not allowed inside a generator now, but eventually they may be allowed
                     // as local types. Regardless, skip them to avoid the work.
                     return;
                 default:
                     if (ts.isFunctionLike(node)) {
-                        if (node.name && node.name.kind === 159 /* ComputedPropertyName */) {
+                        if (node.name && node.name.kind === 160 /* ComputedPropertyName */) {
                             // Note that we will not include methods/accessors of a class because they would require
                             // first descending into the class. This is by design.
                             traverse(node.name.expression);
@@ -15012,10 +15382,10 @@
      * @param node The type node.
      */
     function getRestParameterElementType(node) {
-        if (node && node.kind === 179 /* ArrayType */) {
+        if (node && node.kind === 181 /* ArrayType */) {
             return node.elementType;
         }
-        else if (node && node.kind === 174 /* TypeReference */) {
+        else if (node && node.kind === 176 /* TypeReference */) {
             return ts.singleOrUndefined(node.typeArguments);
         }
         else {
@@ -15025,12 +15395,12 @@
     ts.getRestParameterElementType = getRestParameterElementType;
     function getMembersOfDeclaration(node) {
         switch (node.kind) {
-            case 254 /* InterfaceDeclaration */:
-            case 253 /* ClassDeclaration */:
-            case 222 /* ClassExpression */:
-            case 178 /* TypeLiteral */:
+            case 256 /* InterfaceDeclaration */:
+            case 255 /* ClassDeclaration */:
+            case 224 /* ClassExpression */:
+            case 180 /* TypeLiteral */:
                 return node.members;
-            case 201 /* ObjectLiteralExpression */:
+            case 203 /* ObjectLiteralExpression */:
                 return node.properties;
         }
     }
@@ -15038,14 +15408,14 @@
     function isVariableLike(node) {
         if (node) {
             switch (node.kind) {
-                case 199 /* BindingElement */:
-                case 292 /* EnumMember */:
-                case 161 /* Parameter */:
-                case 289 /* PropertyAssignment */:
-                case 164 /* PropertyDeclaration */:
-                case 163 /* PropertySignature */:
-                case 290 /* ShorthandPropertyAssignment */:
-                case 250 /* VariableDeclaration */:
+                case 201 /* BindingElement */:
+                case 294 /* EnumMember */:
+                case 162 /* Parameter */:
+                case 291 /* PropertyAssignment */:
+                case 165 /* PropertyDeclaration */:
+                case 164 /* PropertySignature */:
+                case 292 /* ShorthandPropertyAssignment */:
+                case 252 /* VariableDeclaration */:
                     return true;
             }
         }
@@ -15057,8 +15427,8 @@
     }
     ts.isVariableLikeOrAccessor = isVariableLikeOrAccessor;
     function isVariableDeclarationInVariableStatement(node) {
-        return node.parent.kind === 251 /* VariableDeclarationList */
-            && node.parent.parent.kind === 233 /* VariableStatement */;
+        return node.parent.kind === 253 /* VariableDeclarationList */
+            && node.parent.parent.kind === 235 /* VariableStatement */;
     }
     ts.isVariableDeclarationInVariableStatement = isVariableDeclarationInVariableStatement;
     function isValidESSymbolDeclaration(node) {
@@ -15069,13 +15439,13 @@
     ts.isValidESSymbolDeclaration = isValidESSymbolDeclaration;
     function introducesArgumentsExoticObject(node) {
         switch (node.kind) {
-            case 166 /* MethodDeclaration */:
-            case 165 /* MethodSignature */:
-            case 167 /* Constructor */:
-            case 168 /* GetAccessor */:
-            case 169 /* SetAccessor */:
-            case 252 /* FunctionDeclaration */:
-            case 209 /* FunctionExpression */:
+            case 167 /* MethodDeclaration */:
+            case 166 /* MethodSignature */:
+            case 169 /* Constructor */:
+            case 170 /* GetAccessor */:
+            case 171 /* SetAccessor */:
+            case 254 /* FunctionDeclaration */:
+            case 211 /* FunctionExpression */:
                 return true;
         }
         return false;
@@ -15086,7 +15456,7 @@
             if (beforeUnwrapLabelCallback) {
                 beforeUnwrapLabelCallback(node);
             }
-            if (node.statement.kind !== 246 /* LabeledStatement */) {
+            if (node.statement.kind !== 248 /* LabeledStatement */) {
                 return node.statement;
             }
             node = node.statement;
@@ -15094,17 +15464,17 @@
     }
     ts.unwrapInnermostStatementOfLabel = unwrapInnermostStatementOfLabel;
     function isFunctionBlock(node) {
-        return node && node.kind === 231 /* Block */ && ts.isFunctionLike(node.parent);
+        return node && node.kind === 233 /* Block */ && ts.isFunctionLike(node.parent);
     }
     ts.isFunctionBlock = isFunctionBlock;
     function isObjectLiteralMethod(node) {
-        return node && node.kind === 166 /* MethodDeclaration */ && node.parent.kind === 201 /* ObjectLiteralExpression */;
+        return node && node.kind === 167 /* MethodDeclaration */ && node.parent.kind === 203 /* ObjectLiteralExpression */;
     }
     ts.isObjectLiteralMethod = isObjectLiteralMethod;
     function isObjectLiteralOrClassExpressionMethod(node) {
-        return node.kind === 166 /* MethodDeclaration */ &&
-            (node.parent.kind === 201 /* ObjectLiteralExpression */ ||
-                node.parent.kind === 222 /* ClassExpression */);
+        return node.kind === 167 /* MethodDeclaration */ &&
+            (node.parent.kind === 203 /* ObjectLiteralExpression */ ||
+                node.parent.kind === 224 /* ClassExpression */);
     }
     ts.isObjectLiteralOrClassExpressionMethod = isObjectLiteralOrClassExpressionMethod;
     function isIdentifierTypePredicate(predicate) {
@@ -15117,7 +15487,7 @@
     ts.isThisTypePredicate = isThisTypePredicate;
     function getPropertyAssignment(objectLiteral, key, key2) {
         return objectLiteral.properties.filter(function (property) {
-            if (property.kind === 289 /* PropertyAssignment */) {
+            if (property.kind === 291 /* PropertyAssignment */) {
                 var propName = getTextOfPropertyName(property.name);
                 return key === propName || (!!key2 && key2 === propName);
             }
@@ -15165,15 +15535,28 @@
         return ts.findAncestor(node.parent, ts.isClassLike);
     }
     ts.getContainingClass = getContainingClass;
+    function getContainingClassStaticBlock(node) {
+        return ts.findAncestor(node.parent, function (n) {
+            if (ts.isClassLike(n) || ts.isFunctionLike(n)) {
+                return "quit";
+            }
+            return ts.isClassStaticBlockDeclaration(n);
+        });
+    }
+    ts.getContainingClassStaticBlock = getContainingClassStaticBlock;
+    function getContainingFunctionOrClassStaticBlock(node) {
+        return ts.findAncestor(node.parent, ts.isFunctionLikeOrClassStaticBlockDeclaration);
+    }
+    ts.getContainingFunctionOrClassStaticBlock = getContainingFunctionOrClassStaticBlock;
     function getThisContainer(node, includeArrowFunctions) {
-        ts.Debug.assert(node.kind !== 298 /* SourceFile */);
+        ts.Debug.assert(node.kind !== 300 /* SourceFile */);
         while (true) {
             node = node.parent;
             if (!node) {
                 return ts.Debug.fail(); // If we never pass in a SourceFile, this should be unreachable, since we'll stop when we reach that.
             }
             switch (node.kind) {
-                case 159 /* ComputedPropertyName */:
+                case 160 /* ComputedPropertyName */:
                     // If the grandparent node is an object literal (as opposed to a class),
                     // then the computed property is not a 'this' container.
                     // A computed property name in a class needs to be a this container
@@ -15188,9 +15571,9 @@
                     // the *body* of the container.
                     node = node.parent;
                     break;
-                case 162 /* Decorator */:
+                case 163 /* Decorator */:
                     // Decorators are always applied outside of the body of a class or method.
-                    if (node.parent.kind === 161 /* Parameter */ && ts.isClassElement(node.parent.parent)) {
+                    if (node.parent.kind === 162 /* Parameter */ && ts.isClassElement(node.parent.parent)) {
                         // If the decorator's parent is a Parameter, we resolve the this container from
                         // the grandparent class declaration.
                         node = node.parent.parent;
@@ -15201,26 +15584,27 @@
                         node = node.parent;
                     }
                     break;
-                case 210 /* ArrowFunction */:
+                case 212 /* ArrowFunction */:
                     if (!includeArrowFunctions) {
                         continue;
                     }
                 // falls through
-                case 252 /* FunctionDeclaration */:
-                case 209 /* FunctionExpression */:
-                case 257 /* ModuleDeclaration */:
-                case 164 /* PropertyDeclaration */:
-                case 163 /* PropertySignature */:
-                case 166 /* MethodDeclaration */:
-                case 165 /* MethodSignature */:
-                case 167 /* Constructor */:
-                case 168 /* GetAccessor */:
-                case 169 /* SetAccessor */:
-                case 170 /* CallSignature */:
-                case 171 /* ConstructSignature */:
-                case 172 /* IndexSignature */:
-                case 256 /* EnumDeclaration */:
-                case 298 /* SourceFile */:
+                case 254 /* FunctionDeclaration */:
+                case 211 /* FunctionExpression */:
+                case 259 /* ModuleDeclaration */:
+                case 168 /* ClassStaticBlockDeclaration */:
+                case 165 /* PropertyDeclaration */:
+                case 164 /* PropertySignature */:
+                case 167 /* MethodDeclaration */:
+                case 166 /* MethodSignature */:
+                case 169 /* Constructor */:
+                case 170 /* GetAccessor */:
+                case 171 /* SetAccessor */:
+                case 172 /* CallSignature */:
+                case 173 /* ConstructSignature */:
+                case 174 /* IndexSignature */:
+                case 258 /* EnumDeclaration */:
+                case 300 /* SourceFile */:
                     return node;
             }
         }
@@ -15239,9 +15623,9 @@
         var container = getThisContainer(node, /*includeArrowFunctions*/ false);
         if (container) {
             switch (container.kind) {
-                case 167 /* Constructor */:
-                case 252 /* FunctionDeclaration */:
-                case 209 /* FunctionExpression */:
+                case 169 /* Constructor */:
+                case 254 /* FunctionDeclaration */:
+                case 211 /* FunctionExpression */:
                     return container;
             }
         }
@@ -15263,27 +15647,28 @@
                 return node;
             }
             switch (node.kind) {
-                case 159 /* ComputedPropertyName */:
+                case 160 /* ComputedPropertyName */:
                     node = node.parent;
                     break;
-                case 252 /* FunctionDeclaration */:
-                case 209 /* FunctionExpression */:
-                case 210 /* ArrowFunction */:
+                case 254 /* FunctionDeclaration */:
+                case 211 /* FunctionExpression */:
+                case 212 /* ArrowFunction */:
                     if (!stopOnFunctions) {
                         continue;
                     }
                 // falls through
-                case 164 /* PropertyDeclaration */:
-                case 163 /* PropertySignature */:
-                case 166 /* MethodDeclaration */:
-                case 165 /* MethodSignature */:
-                case 167 /* Constructor */:
-                case 168 /* GetAccessor */:
-                case 169 /* SetAccessor */:
+                case 165 /* PropertyDeclaration */:
+                case 164 /* PropertySignature */:
+                case 167 /* MethodDeclaration */:
+                case 166 /* MethodSignature */:
+                case 169 /* Constructor */:
+                case 170 /* GetAccessor */:
+                case 171 /* SetAccessor */:
+                case 168 /* ClassStaticBlockDeclaration */:
                     return node;
-                case 162 /* Decorator */:
+                case 163 /* Decorator */:
                     // Decorators are always applied outside of the body of a class or method.
-                    if (node.parent.kind === 161 /* Parameter */ && ts.isClassElement(node.parent.parent)) {
+                    if (node.parent.kind === 162 /* Parameter */ && ts.isClassElement(node.parent.parent)) {
                         // If the decorator's parent is a Parameter, we resolve the this container from
                         // the grandparent class declaration.
                         node = node.parent.parent;
@@ -15299,21 +15684,21 @@
     }
     ts.getSuperContainer = getSuperContainer;
     function getImmediatelyInvokedFunctionExpression(func) {
-        if (func.kind === 209 /* FunctionExpression */ || func.kind === 210 /* ArrowFunction */) {
+        if (func.kind === 211 /* FunctionExpression */ || func.kind === 212 /* ArrowFunction */) {
             var prev = func;
             var parent = func.parent;
-            while (parent.kind === 208 /* ParenthesizedExpression */) {
+            while (parent.kind === 210 /* ParenthesizedExpression */) {
                 prev = parent;
                 parent = parent.parent;
             }
-            if (parent.kind === 204 /* CallExpression */ && parent.expression === prev) {
+            if (parent.kind === 206 /* CallExpression */ && parent.expression === prev) {
                 return parent;
             }
         }
     }
     ts.getImmediatelyInvokedFunctionExpression = getImmediatelyInvokedFunctionExpression;
     function isSuperOrSuperProperty(node) {
-        return node.kind === 105 /* SuperKeyword */
+        return node.kind === 106 /* SuperKeyword */
             || isSuperProperty(node);
     }
     ts.isSuperOrSuperProperty = isSuperOrSuperProperty;
@@ -15322,8 +15707,8 @@
      */
     function isSuperProperty(node) {
         var kind = node.kind;
-        return (kind === 202 /* PropertyAccessExpression */ || kind === 203 /* ElementAccessExpression */)
-            && node.expression.kind === 105 /* SuperKeyword */;
+        return (kind === 204 /* PropertyAccessExpression */ || kind === 205 /* ElementAccessExpression */)
+            && node.expression.kind === 106 /* SuperKeyword */;
     }
     ts.isSuperProperty = isSuperProperty;
     /**
@@ -15331,34 +15716,34 @@
      */
     function isThisProperty(node) {
         var kind = node.kind;
-        return (kind === 202 /* PropertyAccessExpression */ || kind === 203 /* ElementAccessExpression */)
-            && node.expression.kind === 107 /* ThisKeyword */;
+        return (kind === 204 /* PropertyAccessExpression */ || kind === 205 /* ElementAccessExpression */)
+            && node.expression.kind === 108 /* ThisKeyword */;
     }
     ts.isThisProperty = isThisProperty;
     function isThisInitializedDeclaration(node) {
         var _a;
-        return !!node && ts.isVariableDeclaration(node) && ((_a = node.initializer) === null || _a === void 0 ? void 0 : _a.kind) === 107 /* ThisKeyword */;
+        return !!node && ts.isVariableDeclaration(node) && ((_a = node.initializer) === null || _a === void 0 ? void 0 : _a.kind) === 108 /* ThisKeyword */;
     }
     ts.isThisInitializedDeclaration = isThisInitializedDeclaration;
     function isThisInitializedObjectBindingExpression(node) {
         return !!node
             && (ts.isShorthandPropertyAssignment(node) || ts.isPropertyAssignment(node))
             && ts.isBinaryExpression(node.parent.parent)
-            && node.parent.parent.operatorToken.kind === 62 /* EqualsToken */
-            && node.parent.parent.right.kind === 107 /* ThisKeyword */;
+            && node.parent.parent.operatorToken.kind === 63 /* EqualsToken */
+            && node.parent.parent.right.kind === 108 /* ThisKeyword */;
     }
     ts.isThisInitializedObjectBindingExpression = isThisInitializedObjectBindingExpression;
     function getEntityNameFromTypeNode(node) {
         switch (node.kind) {
-            case 174 /* TypeReference */:
+            case 176 /* TypeReference */:
                 return node.typeName;
-            case 224 /* ExpressionWithTypeArguments */:
+            case 226 /* ExpressionWithTypeArguments */:
                 return isEntityNameExpression(node.expression)
                     ? node.expression
                     : undefined;
             // TODO(rbuckton): These aren't valid TypeNodes, but we treat them as such because of `isPartOfTypeNode`, which returns `true` for things that aren't `TypeNode`s.
-            case 78 /* Identifier */:
-            case 158 /* QualifiedName */:
+            case 79 /* Identifier */:
+            case 159 /* QualifiedName */:
                 return node;
         }
         return undefined;
@@ -15366,10 +15751,10 @@
     ts.getEntityNameFromTypeNode = getEntityNameFromTypeNode;
     function getInvokedExpression(node) {
         switch (node.kind) {
-            case 206 /* TaggedTemplateExpression */:
+            case 208 /* TaggedTemplateExpression */:
                 return node.tag;
-            case 276 /* JsxOpeningElement */:
-            case 275 /* JsxSelfClosingElement */:
+            case 278 /* JsxOpeningElement */:
+            case 277 /* JsxSelfClosingElement */:
                 return node.tagName;
             default:
                 return node.expression;
@@ -15382,25 +15767,25 @@
             return false;
         }
         switch (node.kind) {
-            case 253 /* ClassDeclaration */:
+            case 255 /* ClassDeclaration */:
                 // classes are valid targets
                 return true;
-            case 164 /* PropertyDeclaration */:
+            case 165 /* PropertyDeclaration */:
                 // property declarations are valid if their parent is a class declaration.
-                return parent.kind === 253 /* ClassDeclaration */;
-            case 168 /* GetAccessor */:
-            case 169 /* SetAccessor */:
-            case 166 /* MethodDeclaration */:
+                return parent.kind === 255 /* ClassDeclaration */;
+            case 170 /* GetAccessor */:
+            case 171 /* SetAccessor */:
+            case 167 /* MethodDeclaration */:
                 // if this method has a body and its parent is a class declaration, this is a valid target.
                 return node.body !== undefined
-                    && parent.kind === 253 /* ClassDeclaration */;
-            case 161 /* Parameter */:
+                    && parent.kind === 255 /* ClassDeclaration */;
+            case 162 /* Parameter */:
                 // if the parameter's parent has a body and its grandparent is a class declaration, this is a valid target;
                 return parent.body !== undefined
-                    && (parent.kind === 167 /* Constructor */
-                        || parent.kind === 166 /* MethodDeclaration */
-                        || parent.kind === 169 /* SetAccessor */)
-                    && grandparent.kind === 253 /* ClassDeclaration */;
+                    && (parent.kind === 169 /* Constructor */
+                        || parent.kind === 167 /* MethodDeclaration */
+                        || parent.kind === 171 /* SetAccessor */)
+                    && grandparent.kind === 255 /* ClassDeclaration */;
         }
         return false;
     }
@@ -15416,21 +15801,29 @@
     ts.nodeOrChildIsDecorated = nodeOrChildIsDecorated;
     function childIsDecorated(node, parent) {
         switch (node.kind) {
-            case 253 /* ClassDeclaration */:
+            case 255 /* ClassDeclaration */:
                 return ts.some(node.members, function (m) { return nodeOrChildIsDecorated(m, node, parent); }); // TODO: GH#18217
-            case 166 /* MethodDeclaration */:
-            case 169 /* SetAccessor */:
+            case 167 /* MethodDeclaration */:
+            case 171 /* SetAccessor */:
+            case 169 /* Constructor */:
                 return ts.some(node.parameters, function (p) { return nodeIsDecorated(p, node, parent); }); // TODO: GH#18217
             default:
                 return false;
         }
     }
     ts.childIsDecorated = childIsDecorated;
+    function classOrConstructorParameterIsDecorated(node) {
+        if (nodeIsDecorated(node))
+            return true;
+        var constructor = getFirstConstructorWithBody(node);
+        return !!constructor && childIsDecorated(constructor, node);
+    }
+    ts.classOrConstructorParameterIsDecorated = classOrConstructorParameterIsDecorated;
     function isJSXTagName(node) {
         var parent = node.parent;
-        if (parent.kind === 276 /* JsxOpeningElement */ ||
-            parent.kind === 275 /* JsxSelfClosingElement */ ||
-            parent.kind === 277 /* JsxClosingElement */) {
+        if (parent.kind === 278 /* JsxOpeningElement */ ||
+            parent.kind === 277 /* JsxSelfClosingElement */ ||
+            parent.kind === 279 /* JsxClosingElement */) {
             return parent.tagName === node;
         }
         return false;
@@ -15438,49 +15831,54 @@
     ts.isJSXTagName = isJSXTagName;
     function isExpressionNode(node) {
         switch (node.kind) {
-            case 105 /* SuperKeyword */:
-            case 103 /* NullKeyword */:
-            case 109 /* TrueKeyword */:
-            case 94 /* FalseKeyword */:
+            case 106 /* SuperKeyword */:
+            case 104 /* NullKeyword */:
+            case 110 /* TrueKeyword */:
+            case 95 /* FalseKeyword */:
             case 13 /* RegularExpressionLiteral */:
-            case 200 /* ArrayLiteralExpression */:
-            case 201 /* ObjectLiteralExpression */:
-            case 202 /* PropertyAccessExpression */:
-            case 203 /* ElementAccessExpression */:
-            case 204 /* CallExpression */:
-            case 205 /* NewExpression */:
-            case 206 /* TaggedTemplateExpression */:
-            case 225 /* AsExpression */:
-            case 207 /* TypeAssertionExpression */:
-            case 226 /* NonNullExpression */:
-            case 208 /* ParenthesizedExpression */:
-            case 209 /* FunctionExpression */:
-            case 222 /* ClassExpression */:
-            case 210 /* ArrowFunction */:
-            case 213 /* VoidExpression */:
-            case 211 /* DeleteExpression */:
-            case 212 /* TypeOfExpression */:
-            case 215 /* PrefixUnaryExpression */:
-            case 216 /* PostfixUnaryExpression */:
-            case 217 /* BinaryExpression */:
-            case 218 /* ConditionalExpression */:
-            case 221 /* SpreadElement */:
-            case 219 /* TemplateExpression */:
-            case 223 /* OmittedExpression */:
-            case 274 /* JsxElement */:
-            case 275 /* JsxSelfClosingElement */:
-            case 278 /* JsxFragment */:
-            case 220 /* YieldExpression */:
-            case 214 /* AwaitExpression */:
-            case 227 /* MetaProperty */:
+            case 202 /* ArrayLiteralExpression */:
+            case 203 /* ObjectLiteralExpression */:
+            case 204 /* PropertyAccessExpression */:
+            case 205 /* ElementAccessExpression */:
+            case 206 /* CallExpression */:
+            case 207 /* NewExpression */:
+            case 208 /* TaggedTemplateExpression */:
+            case 227 /* AsExpression */:
+            case 209 /* TypeAssertionExpression */:
+            case 228 /* NonNullExpression */:
+            case 210 /* ParenthesizedExpression */:
+            case 211 /* FunctionExpression */:
+            case 224 /* ClassExpression */:
+            case 212 /* ArrowFunction */:
+            case 215 /* VoidExpression */:
+            case 213 /* DeleteExpression */:
+            case 214 /* TypeOfExpression */:
+            case 217 /* PrefixUnaryExpression */:
+            case 218 /* PostfixUnaryExpression */:
+            case 219 /* BinaryExpression */:
+            case 220 /* ConditionalExpression */:
+            case 223 /* SpreadElement */:
+            case 221 /* TemplateExpression */:
+            case 225 /* OmittedExpression */:
+            case 276 /* JsxElement */:
+            case 277 /* JsxSelfClosingElement */:
+            case 280 /* JsxFragment */:
+            case 222 /* YieldExpression */:
+            case 216 /* AwaitExpression */:
+            case 229 /* MetaProperty */:
                 return true;
-            case 158 /* QualifiedName */:
-                while (node.parent.kind === 158 /* QualifiedName */) {
+            case 159 /* QualifiedName */:
+                while (node.parent.kind === 159 /* QualifiedName */) {
                     node = node.parent;
                 }
-                return node.parent.kind === 177 /* TypeQuery */ || isJSXTagName(node);
-            case 78 /* Identifier */:
-                if (node.parent.kind === 177 /* TypeQuery */ || isJSXTagName(node)) {
+                return node.parent.kind === 179 /* TypeQuery */ || ts.isJSDocLinkLike(node.parent) || ts.isJSDocNameReference(node.parent) || ts.isJSDocMemberName(node.parent) || isJSXTagName(node);
+            case 306 /* JSDocMemberName */:
+                while (ts.isJSDocMemberName(node.parent)) {
+                    node = node.parent;
+                }
+                return node.parent.kind === 179 /* TypeQuery */ || ts.isJSDocLinkLike(node.parent) || ts.isJSDocNameReference(node.parent) || ts.isJSDocMemberName(node.parent) || isJSXTagName(node);
+            case 79 /* Identifier */:
+                if (node.parent.kind === 179 /* TypeQuery */ || ts.isJSDocLinkLike(node.parent) || ts.isJSDocNameReference(node.parent) || ts.isJSDocMemberName(node.parent) || isJSXTagName(node)) {
                     return true;
                 }
             // falls through
@@ -15488,7 +15886,7 @@
             case 9 /* BigIntLiteral */:
             case 10 /* StringLiteral */:
             case 14 /* NoSubstitutionTemplateLiteral */:
-            case 107 /* ThisKeyword */:
+            case 108 /* ThisKeyword */:
                 return isInExpressionContext(node);
             default:
                 return false;
@@ -15498,49 +15896,49 @@
     function isInExpressionContext(node) {
         var parent = node.parent;
         switch (parent.kind) {
-            case 250 /* VariableDeclaration */:
-            case 161 /* Parameter */:
-            case 164 /* PropertyDeclaration */:
-            case 163 /* PropertySignature */:
-            case 292 /* EnumMember */:
-            case 289 /* PropertyAssignment */:
-            case 199 /* BindingElement */:
+            case 252 /* VariableDeclaration */:
+            case 162 /* Parameter */:
+            case 165 /* PropertyDeclaration */:
+            case 164 /* PropertySignature */:
+            case 294 /* EnumMember */:
+            case 291 /* PropertyAssignment */:
+            case 201 /* BindingElement */:
                 return parent.initializer === node;
-            case 234 /* ExpressionStatement */:
-            case 235 /* IfStatement */:
-            case 236 /* DoStatement */:
-            case 237 /* WhileStatement */:
-            case 243 /* ReturnStatement */:
-            case 244 /* WithStatement */:
-            case 245 /* SwitchStatement */:
-            case 285 /* CaseClause */:
-            case 247 /* ThrowStatement */:
+            case 236 /* ExpressionStatement */:
+            case 237 /* IfStatement */:
+            case 238 /* DoStatement */:
+            case 239 /* WhileStatement */:
+            case 245 /* ReturnStatement */:
+            case 246 /* WithStatement */:
+            case 247 /* SwitchStatement */:
+            case 287 /* CaseClause */:
+            case 249 /* ThrowStatement */:
                 return parent.expression === node;
-            case 238 /* ForStatement */:
+            case 240 /* ForStatement */:
                 var forStatement = parent;
-                return (forStatement.initializer === node && forStatement.initializer.kind !== 251 /* VariableDeclarationList */) ||
+                return (forStatement.initializer === node && forStatement.initializer.kind !== 253 /* VariableDeclarationList */) ||
                     forStatement.condition === node ||
                     forStatement.incrementor === node;
-            case 239 /* ForInStatement */:
-            case 240 /* ForOfStatement */:
+            case 241 /* ForInStatement */:
+            case 242 /* ForOfStatement */:
                 var forInStatement = parent;
-                return (forInStatement.initializer === node && forInStatement.initializer.kind !== 251 /* VariableDeclarationList */) ||
+                return (forInStatement.initializer === node && forInStatement.initializer.kind !== 253 /* VariableDeclarationList */) ||
                     forInStatement.expression === node;
-            case 207 /* TypeAssertionExpression */:
-            case 225 /* AsExpression */:
+            case 209 /* TypeAssertionExpression */:
+            case 227 /* AsExpression */:
                 return node === parent.expression;
-            case 229 /* TemplateSpan */:
+            case 231 /* TemplateSpan */:
                 return node === parent.expression;
-            case 159 /* ComputedPropertyName */:
+            case 160 /* ComputedPropertyName */:
                 return node === parent.expression;
-            case 162 /* Decorator */:
-            case 284 /* JsxExpression */:
-            case 283 /* JsxSpreadAttribute */:
-            case 291 /* SpreadAssignment */:
+            case 163 /* Decorator */:
+            case 286 /* JsxExpression */:
+            case 285 /* JsxSpreadAttribute */:
+            case 293 /* SpreadAssignment */:
                 return true;
-            case 224 /* ExpressionWithTypeArguments */:
+            case 226 /* ExpressionWithTypeArguments */:
                 return parent.expression === node && isExpressionWithTypeArgumentsInClassExtendsClause(parent);
-            case 290 /* ShorthandPropertyAssignment */:
+            case 292 /* ShorthandPropertyAssignment */:
                 return parent.objectAssignmentInitializer === node;
             default:
                 return isExpressionNode(parent);
@@ -15548,10 +15946,10 @@
     }
     ts.isInExpressionContext = isInExpressionContext;
     function isPartOfTypeQuery(node) {
-        while (node.kind === 158 /* QualifiedName */ || node.kind === 78 /* Identifier */) {
+        while (node.kind === 159 /* QualifiedName */ || node.kind === 79 /* Identifier */) {
             node = node.parent;
         }
-        return node.kind === 177 /* TypeQuery */;
+        return node.kind === 179 /* TypeQuery */;
     }
     ts.isPartOfTypeQuery = isPartOfTypeQuery;
     function isNamespaceReexportDeclaration(node) {
@@ -15559,7 +15957,7 @@
     }
     ts.isNamespaceReexportDeclaration = isNamespaceReexportDeclaration;
     function isExternalModuleImportEqualsDeclaration(node) {
-        return node.kind === 261 /* ImportEqualsDeclaration */ && node.moduleReference.kind === 273 /* ExternalModuleReference */;
+        return node.kind === 263 /* ImportEqualsDeclaration */ && node.moduleReference.kind === 275 /* ExternalModuleReference */;
     }
     ts.isExternalModuleImportEqualsDeclaration = isExternalModuleImportEqualsDeclaration;
     function getExternalModuleImportEqualsDeclarationExpression(node) {
@@ -15572,7 +15970,7 @@
     }
     ts.getExternalModuleRequireArgument = getExternalModuleRequireArgument;
     function isInternalModuleImportEqualsDeclaration(node) {
-        return node.kind === 261 /* ImportEqualsDeclaration */ && node.moduleReference.kind !== 273 /* ExternalModuleReference */;
+        return node.kind === 263 /* ImportEqualsDeclaration */ && node.moduleReference.kind !== 275 /* ExternalModuleReference */;
     }
     ts.isInternalModuleImportEqualsDeclaration = isInternalModuleImportEqualsDeclaration;
     function isSourceFileJS(file) {
@@ -15604,15 +16002,15 @@
             ts.isIdentifier(node.typeName) &&
             node.typeName.escapedText === "Object" &&
             node.typeArguments && node.typeArguments.length === 2 &&
-            (node.typeArguments[0].kind === 147 /* StringKeyword */ || node.typeArguments[0].kind === 144 /* NumberKeyword */);
+            (node.typeArguments[0].kind === 148 /* StringKeyword */ || node.typeArguments[0].kind === 145 /* NumberKeyword */);
     }
     ts.isJSDocIndexSignature = isJSDocIndexSignature;
     function isRequireCall(callExpression, requireStringLiteralLikeArgument) {
-        if (callExpression.kind !== 204 /* CallExpression */) {
+        if (callExpression.kind !== 206 /* CallExpression */) {
             return false;
         }
         var _a = callExpression, expression = _a.expression, args = _a.arguments;
-        if (expression.kind !== 78 /* Identifier */ || expression.escapedText !== "require") {
+        if (expression.kind !== 79 /* Identifier */ || expression.escapedText !== "require") {
             return false;
         }
         if (args.length !== 1) {
@@ -15627,7 +16025,7 @@
      * This function does not test if the node is in a JavaScript file or not.
      */
     function isRequireVariableDeclaration(node) {
-        if (node.kind === 199 /* BindingElement */) {
+        if (node.kind === 201 /* BindingElement */) {
             node = node.parent.parent;
         }
         return ts.isVariableDeclaration(node) && !!node.initializer && isRequireCall(getLeftmostAccessExpression(node.initializer), /*requireStringLiteralLikeArgument*/ true);
@@ -15682,7 +16080,7 @@
      * We treat the right hand side of assignments with container-like initializers as declarations.
      */
     function getAssignedExpandoInitializer(node) {
-        if (node && node.parent && ts.isBinaryExpression(node.parent) && node.parent.operatorToken.kind === 62 /* EqualsToken */) {
+        if (node && node.parent && ts.isBinaryExpression(node.parent) && node.parent.operatorToken.kind === 63 /* EqualsToken */) {
             var isPrototypeAssignment = isPrototypeAccess(node.parent.left);
             return getExpandoInitializer(node.parent.right, isPrototypeAssignment) ||
                 getDefaultedExpandoInitializer(node.parent.left, node.parent.right, isPrototypeAssignment);
@@ -15708,11 +16106,11 @@
     function getExpandoInitializer(initializer, isPrototypeAssignment) {
         if (ts.isCallExpression(initializer)) {
             var e = skipParentheses(initializer.expression);
-            return e.kind === 209 /* FunctionExpression */ || e.kind === 210 /* ArrowFunction */ ? initializer : undefined;
+            return e.kind === 211 /* FunctionExpression */ || e.kind === 212 /* ArrowFunction */ ? initializer : undefined;
         }
-        if (initializer.kind === 209 /* FunctionExpression */ ||
-            initializer.kind === 222 /* ClassExpression */ ||
-            initializer.kind === 210 /* ArrowFunction */) {
+        if (initializer.kind === 211 /* FunctionExpression */ ||
+            initializer.kind === 224 /* ClassExpression */ ||
+            initializer.kind === 212 /* ArrowFunction */) {
             return initializer;
         }
         if (ts.isObjectLiteralExpression(initializer) && (initializer.properties.length === 0 || isPrototypeAssignment)) {
@@ -15738,7 +16136,7 @@
     }
     function isDefaultedExpandoInitializer(node) {
         var name = ts.isVariableDeclaration(node.parent) ? node.parent.name :
-            ts.isBinaryExpression(node.parent) && node.parent.operatorToken.kind === 62 /* EqualsToken */ ? node.parent.left :
+            ts.isBinaryExpression(node.parent) && node.parent.operatorToken.kind === 63 /* EqualsToken */ ? node.parent.left :
                 undefined;
         return name && getExpandoInitializer(node.right, isPrototypeAccess(name)) && isEntityNameExpression(name) && isSameEntityName(name, node.left);
     }
@@ -15747,7 +16145,7 @@
     function getNameOfExpando(node) {
         if (ts.isBinaryExpression(node.parent)) {
             var parent = ((node.parent.operatorToken.kind === 56 /* BarBarToken */ || node.parent.operatorToken.kind === 60 /* QuestionQuestionToken */) && ts.isBinaryExpression(node.parent.parent)) ? node.parent.parent : node.parent;
-            if (parent.operatorToken.kind === 62 /* EqualsToken */ && ts.isIdentifier(parent.left)) {
+            if (parent.operatorToken.kind === 63 /* EqualsToken */ && ts.isIdentifier(parent.left)) {
                 return parent.left;
             }
         }
@@ -15770,7 +16168,7 @@
             return getTextOfIdentifierOrLiteral(name) === getTextOfIdentifierOrLiteral(initializer);
         }
         if (ts.isIdentifier(name) && isLiteralLikeAccess(initializer) &&
-            (initializer.expression.kind === 107 /* ThisKeyword */ ||
+            (initializer.expression.kind === 108 /* ThisKeyword */ ||
                 ts.isIdentifier(initializer.expression) &&
                     (initializer.expression.escapedText === "window" ||
                         initializer.expression.escapedText === "self" ||
@@ -15838,14 +16236,14 @@
     ts.isLiteralLikeElementAccess = isLiteralLikeElementAccess;
     /** Any series of property and element accesses. */
     function isBindableStaticAccessExpression(node, excludeThisKeyword) {
-        return ts.isPropertyAccessExpression(node) && (!excludeThisKeyword && node.expression.kind === 107 /* ThisKeyword */ || ts.isIdentifier(node.name) && isBindableStaticNameExpression(node.expression, /*excludeThisKeyword*/ true))
+        return ts.isPropertyAccessExpression(node) && (!excludeThisKeyword && node.expression.kind === 108 /* ThisKeyword */ || ts.isIdentifier(node.name) && isBindableStaticNameExpression(node.expression, /*excludeThisKeyword*/ true))
             || isBindableStaticElementAccessExpression(node, excludeThisKeyword);
     }
     ts.isBindableStaticAccessExpression = isBindableStaticAccessExpression;
     /** Any series of property and element accesses, ending in a literal element access */
     function isBindableStaticElementAccessExpression(node, excludeThisKeyword) {
         return isLiteralLikeElementAccess(node)
-            && ((!excludeThisKeyword && node.expression.kind === 107 /* ThisKeyword */) ||
+            && ((!excludeThisKeyword && node.expression.kind === 108 /* ThisKeyword */) ||
                 isEntityNameExpression(node.expression) ||
                 isBindableStaticAccessExpression(node.expression, /*excludeThisKeyword*/ true));
     }
@@ -15875,7 +16273,7 @@
             }
             return 7 /* ObjectDefinePropertyValue */;
         }
-        if (expr.operatorToken.kind !== 62 /* EqualsToken */ || !isAccessExpression(expr.left) || isVoidZero(getRightMostAssignedExpression(expr))) {
+        if (expr.operatorToken.kind !== 63 /* EqualsToken */ || !isAccessExpression(expr.left) || isVoidZero(getRightMostAssignedExpression(expr))) {
             return 0 /* None */;
         }
         if (isBindableStaticNameExpression(expr.left.expression, /*excludeThisKeyword*/ true) && getElementOrPropertyAccessName(expr.left) === "prototype" && ts.isObjectLiteralExpression(getInitializerOfBinaryExpression(expr))) {
@@ -15917,7 +16315,7 @@
     }
     ts.getElementOrPropertyAccessName = getElementOrPropertyAccessName;
     function getAssignmentDeclarationPropertyAccessKind(lhs) {
-        if (lhs.expression.kind === 107 /* ThisKeyword */) {
+        if (lhs.expression.kind === 108 /* ThisKeyword */) {
             return 4 /* ThisProperty */;
         }
         else if (isModuleExportsAccessExpression(lhs)) {
@@ -15962,7 +16360,7 @@
     ts.isPrototypePropertyAssignment = isPrototypePropertyAssignment;
     function isSpecialPropertyDeclaration(expr) {
         return isInJSFile(expr) &&
-            expr.parent && expr.parent.kind === 234 /* ExpressionStatement */ &&
+            expr.parent && expr.parent.kind === 236 /* ExpressionStatement */ &&
             (!ts.isElementAccessExpression(expr) || isLiteralLikeElementAccess(expr)) &&
             !!ts.getJSDocTypeTag(expr.parent);
     }
@@ -15983,17 +16381,17 @@
             return false;
         }
         var decl = symbol.valueDeclaration;
-        return decl.kind === 252 /* FunctionDeclaration */ || ts.isVariableDeclaration(decl) && decl.initializer && ts.isFunctionLike(decl.initializer);
+        return decl.kind === 254 /* FunctionDeclaration */ || ts.isVariableDeclaration(decl) && decl.initializer && ts.isFunctionLike(decl.initializer);
     }
     ts.isFunctionSymbol = isFunctionSymbol;
     function tryGetModuleSpecifierFromDeclaration(node) {
         var _a, _b, _c;
         switch (node.kind) {
-            case 250 /* VariableDeclaration */:
+            case 252 /* VariableDeclaration */:
                 return node.initializer.arguments[0].text;
-            case 262 /* ImportDeclaration */:
+            case 264 /* ImportDeclaration */:
                 return (_a = ts.tryCast(node.moduleSpecifier, ts.isStringLiteralLike)) === null || _a === void 0 ? void 0 : _a.text;
-            case 261 /* ImportEqualsDeclaration */:
+            case 263 /* ImportEqualsDeclaration */:
                 return (_c = ts.tryCast((_b = ts.tryCast(node.moduleReference, ts.isExternalModuleReference)) === null || _b === void 0 ? void 0 : _b.expression, ts.isStringLiteralLike)) === null || _c === void 0 ? void 0 : _c.text;
             default:
                 ts.Debug.assertNever(node);
@@ -16006,14 +16404,14 @@
     ts.importFromModuleSpecifier = importFromModuleSpecifier;
     function tryGetImportFromModuleSpecifier(node) {
         switch (node.parent.kind) {
-            case 262 /* ImportDeclaration */:
-            case 268 /* ExportDeclaration */:
+            case 264 /* ImportDeclaration */:
+            case 270 /* ExportDeclaration */:
                 return node.parent;
-            case 273 /* ExternalModuleReference */:
+            case 275 /* ExternalModuleReference */:
                 return node.parent.parent;
-            case 204 /* CallExpression */:
+            case 206 /* CallExpression */:
                 return isImportCall(node.parent) || isRequireCall(node.parent, /*checkArg*/ false) ? node.parent : undefined;
-            case 192 /* LiteralType */:
+            case 194 /* LiteralType */:
                 ts.Debug.assert(ts.isStringLiteral(node));
                 return ts.tryCast(node.parent.parent, ts.isImportTypeNode);
             default:
@@ -16023,16 +16421,16 @@
     ts.tryGetImportFromModuleSpecifier = tryGetImportFromModuleSpecifier;
     function getExternalModuleName(node) {
         switch (node.kind) {
-            case 262 /* ImportDeclaration */:
-            case 268 /* ExportDeclaration */:
+            case 264 /* ImportDeclaration */:
+            case 270 /* ExportDeclaration */:
                 return node.moduleSpecifier;
-            case 261 /* ImportEqualsDeclaration */:
-                return node.moduleReference.kind === 273 /* ExternalModuleReference */ ? node.moduleReference.expression : undefined;
-            case 196 /* ImportType */:
+            case 263 /* ImportEqualsDeclaration */:
+                return node.moduleReference.kind === 275 /* ExternalModuleReference */ ? node.moduleReference.expression : undefined;
+            case 198 /* ImportType */:
                 return isLiteralImportTypeNode(node) ? node.argument.literal : undefined;
-            case 204 /* CallExpression */:
+            case 206 /* CallExpression */:
                 return node.arguments[0];
-            case 257 /* ModuleDeclaration */:
+            case 259 /* ModuleDeclaration */:
                 return node.name.kind === 10 /* StringLiteral */ ? node.name : undefined;
             default:
                 return ts.Debug.assertNever(node);
@@ -16041,11 +16439,11 @@
     ts.getExternalModuleName = getExternalModuleName;
     function getNamespaceDeclarationNode(node) {
         switch (node.kind) {
-            case 262 /* ImportDeclaration */:
+            case 264 /* ImportDeclaration */:
                 return node.importClause && ts.tryCast(node.importClause.namedBindings, ts.isNamespaceImport);
-            case 261 /* ImportEqualsDeclaration */:
+            case 263 /* ImportEqualsDeclaration */:
                 return node;
-            case 268 /* ExportDeclaration */:
+            case 270 /* ExportDeclaration */:
                 return node.exportClause && ts.tryCast(node.exportClause, ts.isNamespaceExport);
             default:
                 return ts.Debug.assertNever(node);
@@ -16053,7 +16451,7 @@
     }
     ts.getNamespaceDeclarationNode = getNamespaceDeclarationNode;
     function isDefaultImport(node) {
-        return node.kind === 262 /* ImportDeclaration */ && !!node.importClause && !!node.importClause.name;
+        return node.kind === 264 /* ImportDeclaration */ && !!node.importClause && !!node.importClause.name;
     }
     ts.isDefaultImport = isDefaultImport;
     function forEachImportClauseDeclaration(node, action) {
@@ -16074,13 +16472,13 @@
     function hasQuestionToken(node) {
         if (node) {
             switch (node.kind) {
-                case 161 /* Parameter */:
-                case 166 /* MethodDeclaration */:
-                case 165 /* MethodSignature */:
-                case 290 /* ShorthandPropertyAssignment */:
-                case 289 /* PropertyAssignment */:
-                case 164 /* PropertyDeclaration */:
-                case 163 /* PropertySignature */:
+                case 162 /* Parameter */:
+                case 167 /* MethodDeclaration */:
+                case 166 /* MethodSignature */:
+                case 292 /* ShorthandPropertyAssignment */:
+                case 291 /* PropertyAssignment */:
+                case 165 /* PropertyDeclaration */:
+                case 164 /* PropertySignature */:
                     return node.questionToken !== undefined;
             }
         }
@@ -16094,7 +16492,7 @@
     }
     ts.isJSDocConstructSignature = isJSDocConstructSignature;
     function isJSDocTypeAlias(node) {
-        return node.kind === 335 /* JSDocTypedefTag */ || node.kind === 328 /* JSDocCallbackTag */ || node.kind === 329 /* JSDocEnumTag */;
+        return node.kind === 340 /* JSDocTypedefTag */ || node.kind === 333 /* JSDocCallbackTag */ || node.kind === 334 /* JSDocEnumTag */;
     }
     ts.isJSDocTypeAlias = isJSDocTypeAlias;
     function isTypeAlias(node) {
@@ -16104,7 +16502,7 @@
     function getSourceOfAssignment(node) {
         return ts.isExpressionStatement(node) &&
             ts.isBinaryExpression(node.expression) &&
-            node.expression.operatorToken.kind === 62 /* EqualsToken */
+            node.expression.operatorToken.kind === 63 /* EqualsToken */
             ? getRightMostAssignedExpression(node.expression)
             : undefined;
     }
@@ -16119,12 +16517,12 @@
     }
     function getSingleInitializerOfVariableStatementOrPropertyDeclaration(node) {
         switch (node.kind) {
-            case 233 /* VariableStatement */:
+            case 235 /* VariableStatement */:
                 var v = getSingleVariableOfVariableStatement(node);
                 return v && v.initializer;
-            case 164 /* PropertyDeclaration */:
+            case 165 /* PropertyDeclaration */:
                 return node.initializer;
-            case 289 /* PropertyAssignment */:
+            case 291 /* PropertyAssignment */:
                 return node.initializer;
         }
     }
@@ -16136,7 +16534,7 @@
     function getNestedModuleDeclaration(node) {
         return ts.isModuleDeclaration(node) &&
             node.body &&
-            node.body.kind === 257 /* ModuleDeclaration */
+            node.body.kind === 259 /* ModuleDeclaration */
             ? node.body
             : undefined;
     }
@@ -16151,11 +16549,11 @@
             if (ts.hasJSDocNodes(node)) {
                 result = ts.append(result, ts.last(node.jsDoc));
             }
-            if (node.kind === 161 /* Parameter */) {
+            if (node.kind === 162 /* Parameter */) {
                 result = ts.addRange(result, (noCache ? ts.getJSDocParameterTagsNoCache : ts.getJSDocParameterTags)(node));
                 break;
             }
-            if (node.kind === 160 /* TypeParameter */) {
+            if (node.kind === 161 /* TypeParameter */) {
                 result = ts.addRange(result, (noCache ? ts.getJSDocTypeParameterTagsNoCache : ts.getJSDocTypeParameterTags)(node));
                 break;
             }
@@ -16166,13 +16564,13 @@
     ts.getJSDocCommentsAndTags = getJSDocCommentsAndTags;
     function getNextJSDocCommentLocation(node) {
         var parent = node.parent;
-        if (parent.kind === 289 /* PropertyAssignment */ ||
-            parent.kind === 267 /* ExportAssignment */ ||
-            parent.kind === 164 /* PropertyDeclaration */ ||
-            parent.kind === 234 /* ExpressionStatement */ && node.kind === 202 /* PropertyAccessExpression */ ||
-            parent.kind === 243 /* ReturnStatement */ ||
+        if (parent.kind === 291 /* PropertyAssignment */ ||
+            parent.kind === 269 /* ExportAssignment */ ||
+            parent.kind === 165 /* PropertyDeclaration */ ||
+            parent.kind === 236 /* ExpressionStatement */ && node.kind === 204 /* PropertyAccessExpression */ ||
+            parent.kind === 245 /* ReturnStatement */ ||
             getNestedModuleDeclaration(parent) ||
-            ts.isBinaryExpression(node) && node.operatorToken.kind === 62 /* EqualsToken */) {
+            ts.isBinaryExpression(node) && node.operatorToken.kind === 63 /* EqualsToken */) {
             return parent;
         }
         // Try to recognize this pattern when node is initializer of variable declaration and JSDoc comments are on containing variable statement.
@@ -16183,7 +16581,7 @@
         // var x = function(name) { return name.length; }
         else if (parent.parent &&
             (getSingleVariableOfVariableStatement(parent.parent) === node ||
-                ts.isBinaryExpression(parent) && parent.operatorToken.kind === 62 /* EqualsToken */)) {
+                ts.isBinaryExpression(parent) && parent.operatorToken.kind === 63 /* EqualsToken */)) {
             return parent.parent;
         }
         else if (parent.parent && parent.parent.parent &&
@@ -16207,7 +16605,7 @@
         if (!decl) {
             return undefined;
         }
-        var parameter = ts.find(decl.parameters, function (p) { return p.name.kind === 78 /* Identifier */ && p.name.escapedText === name; });
+        var parameter = ts.find(decl.parameters, function (p) { return p.name.kind === 79 /* Identifier */ && p.name.escapedText === name; });
         return parameter && parameter.symbol;
     }
     ts.getParameterSymbolFromJSDoc = getParameterSymbolFromJSDoc;
@@ -16257,7 +16655,7 @@
     ts.hasRestParameter = hasRestParameter;
     function isRestParameter(node) {
         var type = ts.isJSDocParameterTag(node) ? (node.typeExpression && node.typeExpression.type) : node.type;
-        return node.dotDotDotToken !== undefined || !!type && type.kind === 310 /* JSDocVariadicType */;
+        return node.dotDotDotToken !== undefined || !!type && type.kind === 313 /* JSDocVariadicType */;
     }
     ts.isRestParameter = isRestParameter;
     function hasTypeArguments(node) {
@@ -16274,34 +16672,34 @@
         var parent = node.parent;
         while (true) {
             switch (parent.kind) {
-                case 217 /* BinaryExpression */:
+                case 219 /* BinaryExpression */:
                     var binaryOperator = parent.operatorToken.kind;
                     return isAssignmentOperator(binaryOperator) && parent.left === node ?
-                        binaryOperator === 62 /* EqualsToken */ || isLogicalOrCoalescingAssignmentOperator(binaryOperator) ? 1 /* Definite */ : 2 /* Compound */ :
+                        binaryOperator === 63 /* EqualsToken */ || isLogicalOrCoalescingAssignmentOperator(binaryOperator) ? 1 /* Definite */ : 2 /* Compound */ :
                         0 /* None */;
-                case 215 /* PrefixUnaryExpression */:
-                case 216 /* PostfixUnaryExpression */:
+                case 217 /* PrefixUnaryExpression */:
+                case 218 /* PostfixUnaryExpression */:
                     var unaryOperator = parent.operator;
                     return unaryOperator === 45 /* PlusPlusToken */ || unaryOperator === 46 /* MinusMinusToken */ ? 2 /* Compound */ : 0 /* None */;
-                case 239 /* ForInStatement */:
-                case 240 /* ForOfStatement */:
+                case 241 /* ForInStatement */:
+                case 242 /* ForOfStatement */:
                     return parent.initializer === node ? 1 /* Definite */ : 0 /* None */;
-                case 208 /* ParenthesizedExpression */:
-                case 200 /* ArrayLiteralExpression */:
-                case 221 /* SpreadElement */:
-                case 226 /* NonNullExpression */:
+                case 210 /* ParenthesizedExpression */:
+                case 202 /* ArrayLiteralExpression */:
+                case 223 /* SpreadElement */:
+                case 228 /* NonNullExpression */:
                     node = parent;
                     break;
-                case 291 /* SpreadAssignment */:
+                case 293 /* SpreadAssignment */:
                     node = parent.parent;
                     break;
-                case 290 /* ShorthandPropertyAssignment */:
+                case 292 /* ShorthandPropertyAssignment */:
                     if (parent.name !== node) {
                         return 0 /* None */;
                     }
                     node = parent.parent;
                     break;
-                case 289 /* PropertyAssignment */:
+                case 291 /* PropertyAssignment */:
                     if (parent.name === node) {
                         return 0 /* None */;
                     }
@@ -16328,22 +16726,22 @@
      */
     function isNodeWithPossibleHoistedDeclaration(node) {
         switch (node.kind) {
-            case 231 /* Block */:
-            case 233 /* VariableStatement */:
-            case 244 /* WithStatement */:
-            case 235 /* IfStatement */:
-            case 245 /* SwitchStatement */:
-            case 259 /* CaseBlock */:
-            case 285 /* CaseClause */:
-            case 286 /* DefaultClause */:
-            case 246 /* LabeledStatement */:
-            case 238 /* ForStatement */:
-            case 239 /* ForInStatement */:
-            case 240 /* ForOfStatement */:
-            case 236 /* DoStatement */:
-            case 237 /* WhileStatement */:
-            case 248 /* TryStatement */:
-            case 288 /* CatchClause */:
+            case 233 /* Block */:
+            case 235 /* VariableStatement */:
+            case 246 /* WithStatement */:
+            case 237 /* IfStatement */:
+            case 247 /* SwitchStatement */:
+            case 261 /* CaseBlock */:
+            case 287 /* CaseClause */:
+            case 288 /* DefaultClause */:
+            case 248 /* LabeledStatement */:
+            case 240 /* ForStatement */:
+            case 241 /* ForInStatement */:
+            case 242 /* ForOfStatement */:
+            case 238 /* DoStatement */:
+            case 239 /* WhileStatement */:
+            case 250 /* TryStatement */:
+            case 290 /* CatchClause */:
                 return true;
         }
         return false;
@@ -16360,11 +16758,11 @@
         return node;
     }
     function walkUpParenthesizedTypes(node) {
-        return walkUp(node, 187 /* ParenthesizedType */);
+        return walkUp(node, 189 /* ParenthesizedType */);
     }
     ts.walkUpParenthesizedTypes = walkUpParenthesizedTypes;
     function walkUpParenthesizedExpressions(node) {
-        return walkUp(node, 208 /* ParenthesizedExpression */);
+        return walkUp(node, 210 /* ParenthesizedExpression */);
     }
     ts.walkUpParenthesizedExpressions = walkUpParenthesizedExpressions;
     /**
@@ -16374,7 +16772,7 @@
      */
     function walkUpParenthesizedTypesAndGetParentAndChild(node) {
         var child;
-        while (node && node.kind === 187 /* ParenthesizedType */) {
+        while (node && node.kind === 189 /* ParenthesizedType */) {
             child = node;
             node = node.parent;
         }
@@ -16385,19 +16783,13 @@
         return ts.skipOuterExpressions(node, 1 /* Parentheses */);
     }
     ts.skipParentheses = skipParentheses;
-    function skipParenthesesUp(node) {
-        while (node.kind === 208 /* ParenthesizedExpression */) {
-            node = node.parent;
-        }
-        return node;
-    }
     // a node is delete target iff. it is PropertyAccessExpression/ElementAccessExpression with parentheses skipped
     function isDeleteTarget(node) {
-        if (node.kind !== 202 /* PropertyAccessExpression */ && node.kind !== 203 /* ElementAccessExpression */) {
+        if (node.kind !== 204 /* PropertyAccessExpression */ && node.kind !== 205 /* ElementAccessExpression */) {
             return false;
         }
         node = walkUpParenthesizedExpressions(node.parent);
-        return node && node.kind === 211 /* DeleteExpression */;
+        return node && node.kind === 213 /* DeleteExpression */;
     }
     ts.isDeleteTarget = isDeleteTarget;
     function isNodeDescendantOf(node, ancestor) {
@@ -16424,7 +16816,7 @@
                 if (ts.isComputedPropertyName(parent))
                     return parent.parent;
             // falls through
-            case 78 /* Identifier */:
+            case 79 /* Identifier */:
                 if (ts.isDeclaration(parent)) {
                     return parent.name === name ? parent : undefined;
                 }
@@ -16441,7 +16833,7 @@
                         ? binExp
                         : undefined;
                 }
-            case 79 /* PrivateIdentifier */:
+            case 80 /* PrivateIdentifier */:
                 return ts.isDeclaration(parent) && parent.name === name ? parent : undefined;
             default:
                 return undefined;
@@ -16450,7 +16842,7 @@
     ts.getDeclarationFromName = getDeclarationFromName;
     function isLiteralComputedPropertyDeclarationName(node) {
         return isStringOrNumericLiteralLike(node) &&
-            node.parent.kind === 159 /* ComputedPropertyName */ &&
+            node.parent.kind === 160 /* ComputedPropertyName */ &&
             ts.isDeclaration(node.parent.parent);
     }
     ts.isLiteralComputedPropertyDeclarationName = isLiteralComputedPropertyDeclarationName;
@@ -16458,26 +16850,26 @@
     function isIdentifierName(node) {
         var parent = node.parent;
         switch (parent.kind) {
-            case 164 /* PropertyDeclaration */:
-            case 163 /* PropertySignature */:
-            case 166 /* MethodDeclaration */:
-            case 165 /* MethodSignature */:
-            case 168 /* GetAccessor */:
-            case 169 /* SetAccessor */:
-            case 292 /* EnumMember */:
-            case 289 /* PropertyAssignment */:
-            case 202 /* PropertyAccessExpression */:
+            case 165 /* PropertyDeclaration */:
+            case 164 /* PropertySignature */:
+            case 167 /* MethodDeclaration */:
+            case 166 /* MethodSignature */:
+            case 170 /* GetAccessor */:
+            case 171 /* SetAccessor */:
+            case 294 /* EnumMember */:
+            case 291 /* PropertyAssignment */:
+            case 204 /* PropertyAccessExpression */:
                 // Name in member declaration or property name in property access
                 return parent.name === node;
-            case 158 /* QualifiedName */:
+            case 159 /* QualifiedName */:
                 // Name on right hand side of dot in a type query or type reference
                 return parent.right === node;
-            case 199 /* BindingElement */:
-            case 266 /* ImportSpecifier */:
+            case 201 /* BindingElement */:
+            case 268 /* ImportSpecifier */:
                 // Property name in binding element or import specifier
                 return parent.propertyName === node;
-            case 271 /* ExportSpecifier */:
-            case 281 /* JsxAttribute */:
+            case 273 /* ExportSpecifier */:
+            case 283 /* JsxAttribute */:
                 // Any name in an export specifier or JSX Attribute
                 return true;
         }
@@ -16497,33 +16889,33 @@
     // {<Identifier>}
     // {name: <EntityNameExpression>}
     function isAliasSymbolDeclaration(node) {
-        return node.kind === 261 /* ImportEqualsDeclaration */ ||
-            node.kind === 260 /* NamespaceExportDeclaration */ ||
-            node.kind === 263 /* ImportClause */ && !!node.name ||
-            node.kind === 264 /* NamespaceImport */ ||
-            node.kind === 270 /* NamespaceExport */ ||
-            node.kind === 266 /* ImportSpecifier */ ||
-            node.kind === 271 /* ExportSpecifier */ ||
-            node.kind === 267 /* ExportAssignment */ && exportAssignmentIsAlias(node) ||
+        return node.kind === 263 /* ImportEqualsDeclaration */ ||
+            node.kind === 262 /* NamespaceExportDeclaration */ ||
+            node.kind === 265 /* ImportClause */ && !!node.name ||
+            node.kind === 266 /* NamespaceImport */ ||
+            node.kind === 272 /* NamespaceExport */ ||
+            node.kind === 268 /* ImportSpecifier */ ||
+            node.kind === 273 /* ExportSpecifier */ ||
+            node.kind === 269 /* ExportAssignment */ && exportAssignmentIsAlias(node) ||
             ts.isBinaryExpression(node) && getAssignmentDeclarationKind(node) === 2 /* ModuleExports */ && exportAssignmentIsAlias(node) ||
-            ts.isPropertyAccessExpression(node) && ts.isBinaryExpression(node.parent) && node.parent.left === node && node.parent.operatorToken.kind === 62 /* EqualsToken */ && isAliasableExpression(node.parent.right) ||
-            node.kind === 290 /* ShorthandPropertyAssignment */ ||
-            node.kind === 289 /* PropertyAssignment */ && isAliasableExpression(node.initializer);
+            ts.isPropertyAccessExpression(node) && ts.isBinaryExpression(node.parent) && node.parent.left === node && node.parent.operatorToken.kind === 63 /* EqualsToken */ && isAliasableExpression(node.parent.right) ||
+            node.kind === 292 /* ShorthandPropertyAssignment */ ||
+            node.kind === 291 /* PropertyAssignment */ && isAliasableExpression(node.initializer);
     }
     ts.isAliasSymbolDeclaration = isAliasSymbolDeclaration;
     function getAliasDeclarationFromName(node) {
         switch (node.parent.kind) {
-            case 263 /* ImportClause */:
-            case 266 /* ImportSpecifier */:
-            case 264 /* NamespaceImport */:
-            case 271 /* ExportSpecifier */:
-            case 267 /* ExportAssignment */:
-            case 261 /* ImportEqualsDeclaration */:
+            case 265 /* ImportClause */:
+            case 268 /* ImportSpecifier */:
+            case 266 /* NamespaceImport */:
+            case 273 /* ExportSpecifier */:
+            case 269 /* ExportAssignment */:
+            case 263 /* ImportEqualsDeclaration */:
                 return node.parent;
-            case 158 /* QualifiedName */:
+            case 159 /* QualifiedName */:
                 do {
                     node = node.parent;
-                } while (node.parent.kind === 158 /* QualifiedName */);
+                } while (node.parent.kind === 159 /* QualifiedName */);
                 return getAliasDeclarationFromName(node);
         }
     }
@@ -16542,7 +16934,7 @@
     }
     ts.getExportAssignmentExpression = getExportAssignmentExpression;
     function getPropertyAssignmentAliasLikeExpression(node) {
-        return node.kind === 290 /* ShorthandPropertyAssignment */ ? node.name : node.kind === 289 /* PropertyAssignment */ ? node.initializer :
+        return node.kind === 292 /* ShorthandPropertyAssignment */ ? node.name : node.kind === 291 /* PropertyAssignment */ ? node.initializer :
             node.parent.right;
     }
     ts.getPropertyAssignmentAliasLikeExpression = getPropertyAssignmentAliasLikeExpression;
@@ -16559,7 +16951,7 @@
     }
     ts.getEffectiveBaseTypeNode = getEffectiveBaseTypeNode;
     function getClassExtendsHeritageElement(node) {
-        var heritageClause = getHeritageClause(node.heritageClauses, 93 /* ExtendsKeyword */);
+        var heritageClause = getHeritageClause(node.heritageClauses, 94 /* ExtendsKeyword */);
         return heritageClause && heritageClause.types.length > 0 ? heritageClause.types[0] : undefined;
     }
     ts.getClassExtendsHeritageElement = getClassExtendsHeritageElement;
@@ -16568,7 +16960,7 @@
             return ts.getJSDocImplementsTags(node).map(function (n) { return n.class; });
         }
         else {
-            var heritageClause = getHeritageClause(node.heritageClauses, 116 /* ImplementsKeyword */);
+            var heritageClause = getHeritageClause(node.heritageClauses, 117 /* ImplementsKeyword */);
             return heritageClause === null || heritageClause === void 0 ? void 0 : heritageClause.types;
         }
     }
@@ -16581,7 +16973,7 @@
     }
     ts.getAllSuperTypeNodes = getAllSuperTypeNodes;
     function getInterfaceBaseTypeNodes(node) {
-        var heritageClause = getHeritageClause(node.heritageClauses, 93 /* ExtendsKeyword */);
+        var heritageClause = getHeritageClause(node.heritageClauses, 94 /* ExtendsKeyword */);
         return heritageClause ? heritageClause.types : undefined;
     }
     ts.getInterfaceBaseTypeNodes = getInterfaceBaseTypeNodes;
@@ -16608,11 +17000,11 @@
     }
     ts.getAncestor = getAncestor;
     function isKeyword(token) {
-        return 80 /* FirstKeyword */ <= token && token <= 157 /* LastKeyword */;
+        return 81 /* FirstKeyword */ <= token && token <= 158 /* LastKeyword */;
     }
     ts.isKeyword = isKeyword;
     function isContextualKeyword(token) {
-        return 125 /* FirstContextualKeyword */ <= token && token <= 157 /* LastContextualKeyword */;
+        return 126 /* FirstContextualKeyword */ <= token && token <= 158 /* LastContextualKeyword */;
     }
     ts.isContextualKeyword = isContextualKeyword;
     function isNonContextualKeyword(token) {
@@ -16620,7 +17012,7 @@
     }
     ts.isNonContextualKeyword = isNonContextualKeyword;
     function isFutureReservedKeyword(token) {
-        return 116 /* FirstFutureReservedWord */ <= token && token <= 124 /* LastFutureReservedWord */;
+        return 117 /* FirstFutureReservedWord */ <= token && token <= 125 /* LastFutureReservedWord */;
     }
     ts.isFutureReservedKeyword = isFutureReservedKeyword;
     function isStringANonContextualKeyword(name) {
@@ -16656,14 +17048,14 @@
         }
         var flags = 0 /* Normal */;
         switch (node.kind) {
-            case 252 /* FunctionDeclaration */:
-            case 209 /* FunctionExpression */:
-            case 166 /* MethodDeclaration */:
+            case 254 /* FunctionDeclaration */:
+            case 211 /* FunctionExpression */:
+            case 167 /* MethodDeclaration */:
                 if (node.asteriskToken) {
                     flags |= 1 /* Generator */;
                 }
             // falls through
-            case 210 /* ArrowFunction */:
+            case 212 /* ArrowFunction */:
                 if (hasSyntacticModifier(node, 256 /* Async */)) {
                     flags |= 2 /* Async */;
                 }
@@ -16677,10 +17069,10 @@
     ts.getFunctionFlags = getFunctionFlags;
     function isAsyncFunction(node) {
         switch (node.kind) {
-            case 252 /* FunctionDeclaration */:
-            case 209 /* FunctionExpression */:
-            case 210 /* ArrowFunction */:
-            case 166 /* MethodDeclaration */:
+            case 254 /* FunctionDeclaration */:
+            case 211 /* FunctionExpression */:
+            case 212 /* ArrowFunction */:
+            case 167 /* MethodDeclaration */:
                 return node.body !== undefined
                     && node.asteriskToken === undefined
                     && hasSyntacticModifier(node, 256 /* Async */);
@@ -16710,7 +17102,7 @@
     }
     ts.hasDynamicName = hasDynamicName;
     function isDynamicName(name) {
-        if (!(name.kind === 159 /* ComputedPropertyName */ || name.kind === 203 /* ElementAccessExpression */)) {
+        if (!(name.kind === 160 /* ComputedPropertyName */ || name.kind === 205 /* ElementAccessExpression */)) {
             return false;
         }
         var expr = ts.isElementAccessExpression(name) ? skipParentheses(name.argumentExpression) : name.expression;
@@ -16720,13 +17112,13 @@
     ts.isDynamicName = isDynamicName;
     function getPropertyNameForPropertyNameNode(name) {
         switch (name.kind) {
-            case 78 /* Identifier */:
-            case 79 /* PrivateIdentifier */:
+            case 79 /* Identifier */:
+            case 80 /* PrivateIdentifier */:
                 return name.escapedText;
             case 10 /* StringLiteral */:
             case 8 /* NumericLiteral */:
                 return ts.escapeLeadingUnderscores(name.text);
-            case 159 /* ComputedPropertyName */:
+            case 160 /* ComputedPropertyName */:
                 var nameExpression = name.expression;
                 if (isStringOrNumericLiteralLike(nameExpression)) {
                     return ts.escapeLeadingUnderscores(nameExpression.text);
@@ -16745,7 +17137,7 @@
     ts.getPropertyNameForPropertyNameNode = getPropertyNameForPropertyNameNode;
     function isPropertyNameLiteral(node) {
         switch (node.kind) {
-            case 78 /* Identifier */:
+            case 79 /* Identifier */:
             case 10 /* StringLiteral */:
             case 14 /* NoSubstitutionTemplateLiteral */:
             case 8 /* NumericLiteral */:
@@ -16775,11 +17167,15 @@
         return ts.startsWith(symbol.escapedName, "__@");
     }
     ts.isKnownSymbol = isKnownSymbol;
+    function isPrivateIdentifierSymbol(symbol) {
+        return ts.startsWith(symbol.escapedName, "__#");
+    }
+    ts.isPrivateIdentifierSymbol = isPrivateIdentifierSymbol;
     /**
      * Includes the word "Symbol" with unicode escapes
      */
     function isESSymbolIdentifier(node) {
-        return node.kind === 78 /* Identifier */ && node.escapedText === "Symbol";
+        return node.kind === 79 /* Identifier */ && node.escapedText === "Symbol";
     }
     ts.isESSymbolIdentifier = isESSymbolIdentifier;
     function isPushOrUnshiftIdentifier(node) {
@@ -16788,11 +17184,11 @@
     ts.isPushOrUnshiftIdentifier = isPushOrUnshiftIdentifier;
     function isParameterDeclaration(node) {
         var root = getRootDeclaration(node);
-        return root.kind === 161 /* Parameter */;
+        return root.kind === 162 /* Parameter */;
     }
     ts.isParameterDeclaration = isParameterDeclaration;
     function getRootDeclaration(node) {
-        while (node.kind === 199 /* BindingElement */) {
+        while (node.kind === 201 /* BindingElement */) {
             node = node.parent.parent;
         }
         return node;
@@ -16800,15 +17196,15 @@
     ts.getRootDeclaration = getRootDeclaration;
     function nodeStartsNewLexicalEnvironment(node) {
         var kind = node.kind;
-        return kind === 167 /* Constructor */
-            || kind === 209 /* FunctionExpression */
-            || kind === 252 /* FunctionDeclaration */
-            || kind === 210 /* ArrowFunction */
-            || kind === 166 /* MethodDeclaration */
-            || kind === 168 /* GetAccessor */
-            || kind === 169 /* SetAccessor */
-            || kind === 257 /* ModuleDeclaration */
-            || kind === 298 /* SourceFile */;
+        return kind === 169 /* Constructor */
+            || kind === 211 /* FunctionExpression */
+            || kind === 254 /* FunctionDeclaration */
+            || kind === 212 /* ArrowFunction */
+            || kind === 167 /* MethodDeclaration */
+            || kind === 170 /* GetAccessor */
+            || kind === 171 /* SetAccessor */
+            || kind === 259 /* ModuleDeclaration */
+            || kind === 300 /* SourceFile */;
     }
     ts.nodeStartsNewLexicalEnvironment = nodeStartsNewLexicalEnvironment;
     function nodeIsSynthesized(range) {
@@ -16827,41 +17223,41 @@
     })(Associativity = ts.Associativity || (ts.Associativity = {}));
     function getExpressionAssociativity(expression) {
         var operator = getOperator(expression);
-        var hasArguments = expression.kind === 205 /* NewExpression */ && expression.arguments !== undefined;
+        var hasArguments = expression.kind === 207 /* NewExpression */ && expression.arguments !== undefined;
         return getOperatorAssociativity(expression.kind, operator, hasArguments);
     }
     ts.getExpressionAssociativity = getExpressionAssociativity;
     function getOperatorAssociativity(kind, operator, hasArguments) {
         switch (kind) {
-            case 205 /* NewExpression */:
+            case 207 /* NewExpression */:
                 return hasArguments ? 0 /* Left */ : 1 /* Right */;
-            case 215 /* PrefixUnaryExpression */:
-            case 212 /* TypeOfExpression */:
-            case 213 /* VoidExpression */:
-            case 211 /* DeleteExpression */:
-            case 214 /* AwaitExpression */:
-            case 218 /* ConditionalExpression */:
-            case 220 /* YieldExpression */:
+            case 217 /* PrefixUnaryExpression */:
+            case 214 /* TypeOfExpression */:
+            case 215 /* VoidExpression */:
+            case 213 /* DeleteExpression */:
+            case 216 /* AwaitExpression */:
+            case 220 /* ConditionalExpression */:
+            case 222 /* YieldExpression */:
                 return 1 /* Right */;
-            case 217 /* BinaryExpression */:
+            case 219 /* BinaryExpression */:
                 switch (operator) {
                     case 42 /* AsteriskAsteriskToken */:
-                    case 62 /* EqualsToken */:
-                    case 63 /* PlusEqualsToken */:
-                    case 64 /* MinusEqualsToken */:
-                    case 66 /* AsteriskAsteriskEqualsToken */:
-                    case 65 /* AsteriskEqualsToken */:
-                    case 67 /* SlashEqualsToken */:
-                    case 68 /* PercentEqualsToken */:
-                    case 69 /* LessThanLessThanEqualsToken */:
-                    case 70 /* GreaterThanGreaterThanEqualsToken */:
-                    case 71 /* GreaterThanGreaterThanGreaterThanEqualsToken */:
-                    case 72 /* AmpersandEqualsToken */:
-                    case 77 /* CaretEqualsToken */:
-                    case 73 /* BarEqualsToken */:
-                    case 74 /* BarBarEqualsToken */:
-                    case 75 /* AmpersandAmpersandEqualsToken */:
-                    case 76 /* QuestionQuestionEqualsToken */:
+                    case 63 /* EqualsToken */:
+                    case 64 /* PlusEqualsToken */:
+                    case 65 /* MinusEqualsToken */:
+                    case 67 /* AsteriskAsteriskEqualsToken */:
+                    case 66 /* AsteriskEqualsToken */:
+                    case 68 /* SlashEqualsToken */:
+                    case 69 /* PercentEqualsToken */:
+                    case 70 /* LessThanLessThanEqualsToken */:
+                    case 71 /* GreaterThanGreaterThanEqualsToken */:
+                    case 72 /* GreaterThanGreaterThanGreaterThanEqualsToken */:
+                    case 73 /* AmpersandEqualsToken */:
+                    case 78 /* CaretEqualsToken */:
+                    case 74 /* BarEqualsToken */:
+                    case 75 /* BarBarEqualsToken */:
+                    case 76 /* AmpersandAmpersandEqualsToken */:
+                    case 77 /* QuestionQuestionEqualsToken */:
                         return 1 /* Right */;
                 }
         }
@@ -16870,15 +17266,15 @@
     ts.getOperatorAssociativity = getOperatorAssociativity;
     function getExpressionPrecedence(expression) {
         var operator = getOperator(expression);
-        var hasArguments = expression.kind === 205 /* NewExpression */ && expression.arguments !== undefined;
+        var hasArguments = expression.kind === 207 /* NewExpression */ && expression.arguments !== undefined;
         return getOperatorPrecedence(expression.kind, operator, hasArguments);
     }
     ts.getExpressionPrecedence = getExpressionPrecedence;
     function getOperator(expression) {
-        if (expression.kind === 217 /* BinaryExpression */) {
+        if (expression.kind === 219 /* BinaryExpression */) {
             return expression.operatorToken.kind;
         }
-        else if (expression.kind === 215 /* PrefixUnaryExpression */ || expression.kind === 216 /* PostfixUnaryExpression */) {
+        else if (expression.kind === 217 /* PrefixUnaryExpression */ || expression.kind === 218 /* PostfixUnaryExpression */) {
             return expression.operator;
         }
         else {
@@ -17057,82 +17453,82 @@
     })(OperatorPrecedence = ts.OperatorPrecedence || (ts.OperatorPrecedence = {}));
     function getOperatorPrecedence(nodeKind, operatorKind, hasArguments) {
         switch (nodeKind) {
-            case 341 /* CommaListExpression */:
+            case 346 /* CommaListExpression */:
                 return 0 /* Comma */;
-            case 221 /* SpreadElement */:
+            case 223 /* SpreadElement */:
                 return 1 /* Spread */;
-            case 220 /* YieldExpression */:
+            case 222 /* YieldExpression */:
                 return 2 /* Yield */;
-            case 218 /* ConditionalExpression */:
+            case 220 /* ConditionalExpression */:
                 return 4 /* Conditional */;
-            case 217 /* BinaryExpression */:
+            case 219 /* BinaryExpression */:
                 switch (operatorKind) {
                     case 27 /* CommaToken */:
                         return 0 /* Comma */;
-                    case 62 /* EqualsToken */:
-                    case 63 /* PlusEqualsToken */:
-                    case 64 /* MinusEqualsToken */:
-                    case 66 /* AsteriskAsteriskEqualsToken */:
-                    case 65 /* AsteriskEqualsToken */:
-                    case 67 /* SlashEqualsToken */:
-                    case 68 /* PercentEqualsToken */:
-                    case 69 /* LessThanLessThanEqualsToken */:
-                    case 70 /* GreaterThanGreaterThanEqualsToken */:
-                    case 71 /* GreaterThanGreaterThanGreaterThanEqualsToken */:
-                    case 72 /* AmpersandEqualsToken */:
-                    case 77 /* CaretEqualsToken */:
-                    case 73 /* BarEqualsToken */:
-                    case 74 /* BarBarEqualsToken */:
-                    case 75 /* AmpersandAmpersandEqualsToken */:
-                    case 76 /* QuestionQuestionEqualsToken */:
+                    case 63 /* EqualsToken */:
+                    case 64 /* PlusEqualsToken */:
+                    case 65 /* MinusEqualsToken */:
+                    case 67 /* AsteriskAsteriskEqualsToken */:
+                    case 66 /* AsteriskEqualsToken */:
+                    case 68 /* SlashEqualsToken */:
+                    case 69 /* PercentEqualsToken */:
+                    case 70 /* LessThanLessThanEqualsToken */:
+                    case 71 /* GreaterThanGreaterThanEqualsToken */:
+                    case 72 /* GreaterThanGreaterThanGreaterThanEqualsToken */:
+                    case 73 /* AmpersandEqualsToken */:
+                    case 78 /* CaretEqualsToken */:
+                    case 74 /* BarEqualsToken */:
+                    case 75 /* BarBarEqualsToken */:
+                    case 76 /* AmpersandAmpersandEqualsToken */:
+                    case 77 /* QuestionQuestionEqualsToken */:
                         return 3 /* Assignment */;
                     default:
                         return getBinaryOperatorPrecedence(operatorKind);
                 }
             // TODO: Should prefix `++` and `--` be moved to the `Update` precedence?
-            case 207 /* TypeAssertionExpression */:
-            case 226 /* NonNullExpression */:
-            case 215 /* PrefixUnaryExpression */:
-            case 212 /* TypeOfExpression */:
-            case 213 /* VoidExpression */:
-            case 211 /* DeleteExpression */:
-            case 214 /* AwaitExpression */:
+            case 209 /* TypeAssertionExpression */:
+            case 228 /* NonNullExpression */:
+            case 217 /* PrefixUnaryExpression */:
+            case 214 /* TypeOfExpression */:
+            case 215 /* VoidExpression */:
+            case 213 /* DeleteExpression */:
+            case 216 /* AwaitExpression */:
                 return 16 /* Unary */;
-            case 216 /* PostfixUnaryExpression */:
+            case 218 /* PostfixUnaryExpression */:
                 return 17 /* Update */;
-            case 204 /* CallExpression */:
+            case 206 /* CallExpression */:
                 return 18 /* LeftHandSide */;
-            case 205 /* NewExpression */:
+            case 207 /* NewExpression */:
                 return hasArguments ? 19 /* Member */ : 18 /* LeftHandSide */;
-            case 206 /* TaggedTemplateExpression */:
-            case 202 /* PropertyAccessExpression */:
-            case 203 /* ElementAccessExpression */:
-            case 227 /* MetaProperty */:
+            case 208 /* TaggedTemplateExpression */:
+            case 204 /* PropertyAccessExpression */:
+            case 205 /* ElementAccessExpression */:
+            case 229 /* MetaProperty */:
                 return 19 /* Member */;
-            case 225 /* AsExpression */:
+            case 227 /* AsExpression */:
                 return 11 /* Relational */;
-            case 107 /* ThisKeyword */:
-            case 105 /* SuperKeyword */:
-            case 78 /* Identifier */:
-            case 103 /* NullKeyword */:
-            case 109 /* TrueKeyword */:
-            case 94 /* FalseKeyword */:
+            case 108 /* ThisKeyword */:
+            case 106 /* SuperKeyword */:
+            case 79 /* Identifier */:
+            case 104 /* NullKeyword */:
+            case 110 /* TrueKeyword */:
+            case 95 /* FalseKeyword */:
             case 8 /* NumericLiteral */:
             case 9 /* BigIntLiteral */:
             case 10 /* StringLiteral */:
-            case 200 /* ArrayLiteralExpression */:
-            case 201 /* ObjectLiteralExpression */:
-            case 209 /* FunctionExpression */:
-            case 210 /* ArrowFunction */:
-            case 222 /* ClassExpression */:
+            case 202 /* ArrayLiteralExpression */:
+            case 203 /* ObjectLiteralExpression */:
+            case 211 /* FunctionExpression */:
+            case 212 /* ArrowFunction */:
+            case 224 /* ClassExpression */:
             case 13 /* RegularExpressionLiteral */:
             case 14 /* NoSubstitutionTemplateLiteral */:
-            case 219 /* TemplateExpression */:
-            case 208 /* ParenthesizedExpression */:
-            case 223 /* OmittedExpression */:
-            case 274 /* JsxElement */:
-            case 275 /* JsxSelfClosingElement */:
-            case 278 /* JsxFragment */:
+            case 221 /* TemplateExpression */:
+            case 210 /* ParenthesizedExpression */:
+            case 225 /* OmittedExpression */:
+            case 276 /* JsxElement */:
+            case 277 /* JsxSelfClosingElement */:
+            case 280 /* JsxFragment */:
                 return 20 /* Primary */;
             default:
                 return -1 /* Invalid */;
@@ -17162,9 +17558,9 @@
             case 31 /* GreaterThanToken */:
             case 32 /* LessThanEqualsToken */:
             case 33 /* GreaterThanEqualsToken */:
-            case 101 /* InstanceOfKeyword */:
-            case 100 /* InKeyword */:
-            case 126 /* AsKeyword */:
+            case 102 /* InstanceOfKeyword */:
+            case 101 /* InKeyword */:
+            case 127 /* AsKeyword */:
                 return 11 /* Relational */;
             case 47 /* LessThanLessThanToken */:
             case 48 /* GreaterThanGreaterThanToken */:
@@ -17188,7 +17584,7 @@
     function getSemanticJsxChildren(children) {
         return ts.filter(children, function (i) {
             switch (i.kind) {
-                case 284 /* JsxExpression */:
+                case 286 /* JsxExpression */:
                     return !!i.expression;
                 case 11 /* JsxText */:
                     return !i.containsOnlyTriviaWhiteSpaces;
@@ -17281,8 +17677,8 @@
     // There is no reason for this other than that JSON.stringify does not handle it either.
     var doubleQuoteEscapedCharsRegExp = /[\\\"\u0000-\u001f\t\v\f\b\r\n\u2028\u2029\u0085]/g;
     var singleQuoteEscapedCharsRegExp = /[\\\'\u0000-\u001f\t\v\f\b\r\n\u2028\u2029\u0085]/g;
-    // Template strings should be preserved as much as possible
-    var backtickQuoteEscapedCharsRegExp = /[\\`]/g;
+    // Template strings preserve simple LF newlines, still encode CRLF (or CR)
+    var backtickQuoteEscapedCharsRegExp = /\r\n|[\\\`\u0000-\u001f\t\v\f\b\r\u2028\u2029\u0085]/g;
     var escapedCharsMap = new ts.Map(ts.getEntries({
         "\t": "\\t",
         "\v": "\\v",
@@ -17296,7 +17692,8 @@
         "\`": "\\\`",
         "\u2028": "\\u2028",
         "\u2029": "\\u2029",
-        "\u0085": "\\u0085" // nextLine
+        "\u0085": "\\u0085",
+        "\r\n": "\\r\\n", // special case for CRLFs in backticks
     }));
     function encodeUtf16EscapeSequence(charCode) {
         var hexCharCode = charCode.toString(16).toUpperCase();
@@ -17490,7 +17887,7 @@
             reportInaccessibleThisError: ts.noop,
             reportPrivateInBaseOfClassExpression: ts.noop,
             reportInaccessibleUniqueSymbolError: ts.noop,
-            trackSymbol: ts.noop,
+            trackSymbol: function () { return false; },
             writeKeyword: write,
             writeOperator: write,
             writeParameter: write,
@@ -17747,11 +18144,21 @@
     }
     ts.parameterIsThisKeyword = parameterIsThisKeyword;
     function isThisIdentifier(node) {
-        return !!node && node.kind === 78 /* Identifier */ && identifierIsThisKeyword(node);
+        return !!node && node.kind === 79 /* Identifier */ && identifierIsThisKeyword(node);
     }
     ts.isThisIdentifier = isThisIdentifier;
+    function isThisInTypeQuery(node) {
+        if (!isThisIdentifier(node)) {
+            return false;
+        }
+        while (ts.isQualifiedName(node.parent) && node.parent.left === node) {
+            node = node.parent;
+        }
+        return node.parent.kind === 179 /* TypeQuery */;
+    }
+    ts.isThisInTypeQuery = isThisInTypeQuery;
     function identifierIsThisKeyword(id) {
-        return id.originalKeywordKind === 107 /* ThisKeyword */;
+        return id.originalKeywordKind === 108 /* ThisKeyword */;
     }
     ts.identifierIsThisKeyword = identifierIsThisKeyword;
     function getAllAccessorDeclarations(declarations, accessor) {
@@ -17762,10 +18169,10 @@
         var setAccessor;
         if (hasDynamicName(accessor)) {
             firstAccessor = accessor;
-            if (accessor.kind === 168 /* GetAccessor */) {
+            if (accessor.kind === 170 /* GetAccessor */) {
                 getAccessor = accessor;
             }
-            else if (accessor.kind === 169 /* SetAccessor */) {
+            else if (accessor.kind === 171 /* SetAccessor */) {
                 setAccessor = accessor;
             }
             else {
@@ -17775,7 +18182,7 @@
         else {
             ts.forEach(declarations, function (member) {
                 if (ts.isAccessor(member)
-                    && hasSyntacticModifier(member, 32 /* Static */) === hasSyntacticModifier(accessor, 32 /* Static */)) {
+                    && isStatic(member) === isStatic(accessor)) {
                     var memberName = getPropertyNameForPropertyNameNode(member.name);
                     var accessorName = getPropertyNameForPropertyNameNode(accessor.name);
                     if (memberName === accessorName) {
@@ -17785,10 +18192,10 @@
                         else if (!secondAccessor) {
                             secondAccessor = member;
                         }
-                        if (member.kind === 168 /* GetAccessor */ && !getAccessor) {
+                        if (member.kind === 170 /* GetAccessor */ && !getAccessor) {
                             getAccessor = member;
                         }
-                        if (member.kind === 169 /* SetAccessor */ && !setAccessor) {
+                        if (member.kind === 171 /* SetAccessor */ && !setAccessor) {
                             setAccessor = member;
                         }
                     }
@@ -17837,7 +18244,7 @@
     ts.getJSDocTypeParameterDeclarations = getJSDocTypeParameterDeclarations;
     /** template tags are only available when a typedef isn't already using them */
     function isNonTypeAliasTemplate(tag) {
-        return ts.isJSDocTemplateTag(tag) && !(tag.parent.kind === 312 /* JSDocComment */ && tag.parent.tags.some(isJSDocTypeAlias));
+        return ts.isJSDocTemplateTag(tag) && !(tag.parent.kind === 315 /* JSDocComment */ && tag.parent.tags.some(isJSDocTypeAlias));
     }
     /**
      * Gets the effective type annotation of the value parameter of a set accessor. If the node
@@ -18013,7 +18420,7 @@
     ts.writeCommentRange = writeCommentRange;
     function writeTrimmedCurrentLine(text, commentEnd, writer, newLine, pos, nextLineStart) {
         var end = Math.min(commentEnd, nextLineStart - 1);
-        var currentLineText = text.substring(pos, end).replace(/^\s+|\s+$/g, "");
+        var currentLineText = ts.trimString(text.substring(pos, end));
         if (currentLineText) {
             // trimmed forward and ending spaces text
             writer.writeComment(currentLineText);
@@ -18056,6 +18463,11 @@
         return !!getSelectedSyntacticModifierFlags(node, flags);
     }
     ts.hasSyntacticModifier = hasSyntacticModifier;
+    function isStatic(node) {
+        // https://tc39.es/ecma262/#sec-static-semantics-isstatic
+        return ts.isClassElement(node) && hasStaticModifier(node) || ts.isClassStaticBlockDeclaration(node);
+    }
+    ts.isStatic = isStatic;
     function hasStaticModifier(node) {
         return hasSyntacticModifier(node, 32 /* Static */);
     }
@@ -18085,7 +18497,7 @@
     }
     ts.getSelectedSyntacticModifierFlags = getSelectedSyntacticModifierFlags;
     function getModifierFlagsWorker(node, includeJSDoc, alwaysIncludeJSDoc) {
-        if (node.kind >= 0 /* FirstToken */ && node.kind <= 157 /* LastToken */) {
+        if (node.kind >= 0 /* FirstToken */ && node.kind <= 158 /* LastToken */) {
             return 0 /* None */;
         }
         if (!(node.modifierFlagsCache & 536870912 /* HasComputedFlags */)) {
@@ -18154,7 +18566,7 @@
      */
     function getSyntacticModifierFlagsNoCache(node) {
         var flags = modifiersToFlags(node.modifiers);
-        if (node.flags & 4 /* NestedNamespace */ || (node.kind === 78 /* Identifier */ && node.isInJSDocNamespace)) {
+        if (node.flags & 4 /* NestedNamespace */ || (node.kind === 79 /* Identifier */ && node.isInJSDocNamespace)) {
             flags |= 1 /* Export */;
         }
         return flags;
@@ -18173,18 +18585,18 @@
     ts.modifiersToFlags = modifiersToFlags;
     function modifierToFlag(token) {
         switch (token) {
-            case 123 /* StaticKeyword */: return 32 /* Static */;
-            case 122 /* PublicKeyword */: return 4 /* Public */;
-            case 121 /* ProtectedKeyword */: return 16 /* Protected */;
-            case 120 /* PrivateKeyword */: return 8 /* Private */;
-            case 125 /* AbstractKeyword */: return 128 /* Abstract */;
-            case 92 /* ExportKeyword */: return 1 /* Export */;
-            case 133 /* DeclareKeyword */: return 2 /* Ambient */;
-            case 84 /* ConstKeyword */: return 2048 /* Const */;
-            case 87 /* DefaultKeyword */: return 512 /* Default */;
-            case 129 /* AsyncKeyword */: return 256 /* Async */;
-            case 142 /* ReadonlyKeyword */: return 64 /* Readonly */;
-            case 156 /* OverrideKeyword */: return 16384 /* Override */;
+            case 124 /* StaticKeyword */: return 32 /* Static */;
+            case 123 /* PublicKeyword */: return 4 /* Public */;
+            case 122 /* ProtectedKeyword */: return 16 /* Protected */;
+            case 121 /* PrivateKeyword */: return 8 /* Private */;
+            case 126 /* AbstractKeyword */: return 128 /* Abstract */;
+            case 93 /* ExportKeyword */: return 1 /* Export */;
+            case 134 /* DeclareKeyword */: return 2 /* Ambient */;
+            case 85 /* ConstKeyword */: return 2048 /* Const */;
+            case 88 /* DefaultKeyword */: return 512 /* Default */;
+            case 130 /* AsyncKeyword */: return 256 /* Async */;
+            case 143 /* ReadonlyKeyword */: return 64 /* Readonly */;
+            case 157 /* OverrideKeyword */: return 16384 /* Override */;
         }
         return 0 /* None */;
     }
@@ -18200,9 +18612,9 @@
     }
     ts.isLogicalOperator = isLogicalOperator;
     function isLogicalOrCoalescingAssignmentOperator(token) {
-        return token === 74 /* BarBarEqualsToken */
-            || token === 75 /* AmpersandAmpersandEqualsToken */
-            || token === 76 /* QuestionQuestionEqualsToken */;
+        return token === 75 /* BarBarEqualsToken */
+            || token === 76 /* AmpersandAmpersandEqualsToken */
+            || token === 77 /* QuestionQuestionEqualsToken */;
     }
     ts.isLogicalOrCoalescingAssignmentOperator = isLogicalOrCoalescingAssignmentOperator;
     function isLogicalOrCoalescingAssignmentExpression(expr) {
@@ -18210,7 +18622,7 @@
     }
     ts.isLogicalOrCoalescingAssignmentExpression = isLogicalOrCoalescingAssignmentExpression;
     function isAssignmentOperator(token) {
-        return token >= 62 /* FirstAssignment */ && token <= 77 /* LastAssignment */;
+        return token >= 63 /* FirstAssignment */ && token <= 78 /* LastAssignment */;
     }
     ts.isAssignmentOperator = isAssignmentOperator;
     /** Get `C` given `N` if `N` is in the position `class C extends N` where `N` is an ExpressionWithTypeArguments. */
@@ -18223,14 +18635,14 @@
         return ts.isExpressionWithTypeArguments(node)
             && ts.isHeritageClause(node.parent)
             && ts.isClassLike(node.parent.parent)
-            ? { class: node.parent.parent, isImplements: node.parent.token === 116 /* ImplementsKeyword */ }
+            ? { class: node.parent.parent, isImplements: node.parent.token === 117 /* ImplementsKeyword */ }
             : undefined;
     }
     ts.tryGetClassImplementingOrExtendingExpressionWithTypeArguments = tryGetClassImplementingOrExtendingExpressionWithTypeArguments;
     function isAssignmentExpression(node, excludeCompoundAssignment) {
         return ts.isBinaryExpression(node)
             && (excludeCompoundAssignment
-                ? node.operatorToken.kind === 62 /* EqualsToken */
+                ? node.operatorToken.kind === 63 /* EqualsToken */
                 : isAssignmentOperator(node.operatorToken.kind))
             && ts.isLeftHandSideExpression(node.left);
     }
@@ -18242,8 +18654,8 @@
     function isDestructuringAssignment(node) {
         if (isAssignmentExpression(node, /*excludeCompoundAssignment*/ true)) {
             var kind = node.left.kind;
-            return kind === 201 /* ObjectLiteralExpression */
-                || kind === 200 /* ArrayLiteralExpression */;
+            return kind === 203 /* ObjectLiteralExpression */
+                || kind === 202 /* ArrayLiteralExpression */;
         }
         return false;
     }
@@ -18253,33 +18665,33 @@
     }
     ts.isExpressionWithTypeArgumentsInClassExtendsClause = isExpressionWithTypeArgumentsInClassExtendsClause;
     function isEntityNameExpression(node) {
-        return node.kind === 78 /* Identifier */ || isPropertyAccessEntityNameExpression(node);
+        return node.kind === 79 /* Identifier */ || isPropertyAccessEntityNameExpression(node);
     }
     ts.isEntityNameExpression = isEntityNameExpression;
     function getFirstIdentifier(node) {
         switch (node.kind) {
-            case 78 /* Identifier */:
+            case 79 /* Identifier */:
                 return node;
-            case 158 /* QualifiedName */:
+            case 159 /* QualifiedName */:
                 do {
                     node = node.left;
-                } while (node.kind !== 78 /* Identifier */);
+                } while (node.kind !== 79 /* Identifier */);
                 return node;
-            case 202 /* PropertyAccessExpression */:
+            case 204 /* PropertyAccessExpression */:
                 do {
                     node = node.expression;
-                } while (node.kind !== 78 /* Identifier */);
+                } while (node.kind !== 79 /* Identifier */);
                 return node;
         }
     }
     ts.getFirstIdentifier = getFirstIdentifier;
     function isDottedName(node) {
-        return node.kind === 78 /* Identifier */
-            || node.kind === 107 /* ThisKeyword */
-            || node.kind === 105 /* SuperKeyword */
-            || node.kind === 227 /* MetaProperty */
-            || node.kind === 202 /* PropertyAccessExpression */ && isDottedName(node.expression)
-            || node.kind === 208 /* ParenthesizedExpression */ && isDottedName(node.expression);
+        return node.kind === 79 /* Identifier */
+            || node.kind === 108 /* ThisKeyword */
+            || node.kind === 106 /* SuperKeyword */
+            || node.kind === 229 /* MetaProperty */
+            || node.kind === 204 /* PropertyAccessExpression */ && isDottedName(node.expression)
+            || node.kind === 210 /* ParenthesizedExpression */ && isDottedName(node.expression);
     }
     ts.isDottedName = isDottedName;
     function isPropertyAccessEntityNameExpression(node) {
@@ -18310,17 +18722,23 @@
     }
     ts.isPrototypeAccess = isPrototypeAccess;
     function isRightSideOfQualifiedNameOrPropertyAccess(node) {
-        return (node.parent.kind === 158 /* QualifiedName */ && node.parent.right === node) ||
-            (node.parent.kind === 202 /* PropertyAccessExpression */ && node.parent.name === node);
+        return (node.parent.kind === 159 /* QualifiedName */ && node.parent.right === node) ||
+            (node.parent.kind === 204 /* PropertyAccessExpression */ && node.parent.name === node);
     }
     ts.isRightSideOfQualifiedNameOrPropertyAccess = isRightSideOfQualifiedNameOrPropertyAccess;
+    function isRightSideOfQualifiedNameOrPropertyAccessOrJSDocMemberName(node) {
+        return ts.isQualifiedName(node.parent) && node.parent.right === node
+            || ts.isPropertyAccessExpression(node.parent) && node.parent.name === node
+            || ts.isJSDocMemberName(node.parent) && node.parent.right === node;
+    }
+    ts.isRightSideOfQualifiedNameOrPropertyAccessOrJSDocMemberName = isRightSideOfQualifiedNameOrPropertyAccessOrJSDocMemberName;
     function isEmptyObjectLiteral(expression) {
-        return expression.kind === 201 /* ObjectLiteralExpression */ &&
+        return expression.kind === 203 /* ObjectLiteralExpression */ &&
             expression.properties.length === 0;
     }
     ts.isEmptyObjectLiteral = isEmptyObjectLiteral;
     function isEmptyArrayLiteral(expression) {
-        return expression.kind === 200 /* ArrayLiteralExpression */ &&
+        return expression.kind === 202 /* ArrayLiteralExpression */ &&
             expression.elements.length === 0;
     }
     ts.isEmptyArrayLiteral = isEmptyArrayLiteral;
@@ -18652,8 +19070,8 @@
         var parseNode = ts.getParseTreeNode(node);
         if (parseNode) {
             switch (parseNode.parent.kind) {
-                case 256 /* EnumDeclaration */:
-                case 257 /* ModuleDeclaration */:
+                case 258 /* EnumDeclaration */:
+                case 259 /* ModuleDeclaration */:
                     return parseNode === parseNode.parent.name;
             }
         }
@@ -18683,7 +19101,7 @@
     function getDeclarationModifierFlagsFromSymbol(s, isWrite) {
         if (isWrite === void 0) { isWrite = false; }
         if (s.valueDeclaration) {
-            var declaration = (isWrite && s.declarations && ts.find(s.declarations, function (d) { return d.kind === 169 /* SetAccessor */; })) || s.valueDeclaration;
+            var declaration = (isWrite && s.declarations && ts.find(s.declarations, function (d) { return d.kind === 171 /* SetAccessor */; })) || s.valueDeclaration;
             var flags = ts.getCombinedModifierFlags(declaration);
             return s.parent && s.parent.flags & 32 /* Class */ ? flags : flags & ~28 /* AccessibilityModifier */;
         }
@@ -18732,35 +19150,35 @@
         if (!parent)
             return 0 /* Read */;
         switch (parent.kind) {
-            case 208 /* ParenthesizedExpression */:
+            case 210 /* ParenthesizedExpression */:
                 return accessKind(parent);
-            case 216 /* PostfixUnaryExpression */:
-            case 215 /* PrefixUnaryExpression */:
+            case 218 /* PostfixUnaryExpression */:
+            case 217 /* PrefixUnaryExpression */:
                 var operator = parent.operator;
                 return operator === 45 /* PlusPlusToken */ || operator === 46 /* MinusMinusToken */ ? writeOrReadWrite() : 0 /* Read */;
-            case 217 /* BinaryExpression */:
+            case 219 /* BinaryExpression */:
                 var _a = parent, left = _a.left, operatorToken = _a.operatorToken;
                 return left === node && isAssignmentOperator(operatorToken.kind) ?
-                    operatorToken.kind === 62 /* EqualsToken */ ? 1 /* Write */ : writeOrReadWrite()
+                    operatorToken.kind === 63 /* EqualsToken */ ? 1 /* Write */ : writeOrReadWrite()
                     : 0 /* Read */;
-            case 202 /* PropertyAccessExpression */:
+            case 204 /* PropertyAccessExpression */:
                 return parent.name !== node ? 0 /* Read */ : accessKind(parent);
-            case 289 /* PropertyAssignment */: {
+            case 291 /* PropertyAssignment */: {
                 var parentAccess = accessKind(parent.parent);
                 // In `({ x: varname }) = { x: 1 }`, the left `x` is a read, the right `x` is a write.
                 return node === parent.name ? reverseAccessKind(parentAccess) : parentAccess;
             }
-            case 290 /* ShorthandPropertyAssignment */:
+            case 292 /* ShorthandPropertyAssignment */:
                 // Assume it's the local variable being accessed, since we don't check public properties for --noUnusedLocals.
                 return node === parent.objectAssignmentInitializer ? 0 /* Read */ : accessKind(parent.parent);
-            case 200 /* ArrayLiteralExpression */:
+            case 202 /* ArrayLiteralExpression */:
                 return accessKind(parent);
             default:
                 return 0 /* Read */;
         }
         function writeOrReadWrite() {
             // If grandparent is not an ExpressionStatement, this is used as an expression in addition to having a side effect.
-            return parent.parent && skipParenthesesUp(parent.parent).kind === 234 /* ExpressionStatement */ ? 1 /* Write */ : 2 /* ReadWrite */;
+            return parent.parent && walkUpParenthesizedExpressions(parent.parent).kind === 236 /* ExpressionStatement */ ? 1 /* Write */ : 2 /* ReadWrite */;
         }
     }
     function reverseAccessKind(a) {
@@ -18904,37 +19322,37 @@
     }
     ts.isObjectTypeDeclaration = isObjectTypeDeclaration;
     function isTypeNodeKind(kind) {
-        return (kind >= 173 /* FirstTypeNode */ && kind <= 196 /* LastTypeNode */)
-            || kind === 128 /* AnyKeyword */
-            || kind === 152 /* UnknownKeyword */
-            || kind === 144 /* NumberKeyword */
-            || kind === 155 /* BigIntKeyword */
-            || kind === 145 /* ObjectKeyword */
-            || kind === 131 /* BooleanKeyword */
-            || kind === 147 /* StringKeyword */
-            || kind === 148 /* SymbolKeyword */
-            || kind === 113 /* VoidKeyword */
-            || kind === 150 /* UndefinedKeyword */
-            || kind === 141 /* NeverKeyword */
-            || kind === 224 /* ExpressionWithTypeArguments */
-            || kind === 304 /* JSDocAllType */
-            || kind === 305 /* JSDocUnknownType */
-            || kind === 306 /* JSDocNullableType */
-            || kind === 307 /* JSDocNonNullableType */
-            || kind === 308 /* JSDocOptionalType */
-            || kind === 309 /* JSDocFunctionType */
-            || kind === 310 /* JSDocVariadicType */;
+        return (kind >= 175 /* FirstTypeNode */ && kind <= 198 /* LastTypeNode */)
+            || kind === 129 /* AnyKeyword */
+            || kind === 153 /* UnknownKeyword */
+            || kind === 145 /* NumberKeyword */
+            || kind === 156 /* BigIntKeyword */
+            || kind === 146 /* ObjectKeyword */
+            || kind === 132 /* BooleanKeyword */
+            || kind === 148 /* StringKeyword */
+            || kind === 149 /* SymbolKeyword */
+            || kind === 114 /* VoidKeyword */
+            || kind === 151 /* UndefinedKeyword */
+            || kind === 142 /* NeverKeyword */
+            || kind === 226 /* ExpressionWithTypeArguments */
+            || kind === 307 /* JSDocAllType */
+            || kind === 308 /* JSDocUnknownType */
+            || kind === 309 /* JSDocNullableType */
+            || kind === 310 /* JSDocNonNullableType */
+            || kind === 311 /* JSDocOptionalType */
+            || kind === 312 /* JSDocFunctionType */
+            || kind === 313 /* JSDocVariadicType */;
     }
     ts.isTypeNodeKind = isTypeNodeKind;
     function isAccessExpression(node) {
-        return node.kind === 202 /* PropertyAccessExpression */ || node.kind === 203 /* ElementAccessExpression */;
+        return node.kind === 204 /* PropertyAccessExpression */ || node.kind === 205 /* ElementAccessExpression */;
     }
     ts.isAccessExpression = isAccessExpression;
     function getNameOfAccessExpression(node) {
-        if (node.kind === 202 /* PropertyAccessExpression */) {
+        if (node.kind === 204 /* PropertyAccessExpression */) {
             return node.name;
         }
-        ts.Debug.assert(node.kind === 203 /* ElementAccessExpression */);
+        ts.Debug.assert(node.kind === 205 /* ElementAccessExpression */);
         return node.argumentExpression;
     }
     ts.getNameOfAccessExpression = getNameOfAccessExpression;
@@ -18949,7 +19367,7 @@
     }
     ts.isBundleFileTextLike = isBundleFileTextLike;
     function isNamedImportsOrExports(node) {
-        return node.kind === 265 /* NamedImports */ || node.kind === 269 /* NamedExports */;
+        return node.kind === 267 /* NamedImports */ || node.kind === 271 /* NamedExports */;
     }
     ts.isNamedImportsOrExports = isNamedImportsOrExports;
     function getLeftmostAccessExpression(expr) {
@@ -18962,28 +19380,28 @@
     function getLeftmostExpression(node, stopAtCallExpressions) {
         while (true) {
             switch (node.kind) {
-                case 216 /* PostfixUnaryExpression */:
+                case 218 /* PostfixUnaryExpression */:
                     node = node.operand;
                     continue;
-                case 217 /* BinaryExpression */:
+                case 219 /* BinaryExpression */:
                     node = node.left;
                     continue;
-                case 218 /* ConditionalExpression */:
+                case 220 /* ConditionalExpression */:
                     node = node.condition;
                     continue;
-                case 206 /* TaggedTemplateExpression */:
+                case 208 /* TaggedTemplateExpression */:
                     node = node.tag;
                     continue;
-                case 204 /* CallExpression */:
+                case 206 /* CallExpression */:
                     if (stopAtCallExpressions) {
                         return node;
                     }
                 // falls through
-                case 225 /* AsExpression */:
-                case 203 /* ElementAccessExpression */:
-                case 202 /* PropertyAccessExpression */:
-                case 226 /* NonNullExpression */:
-                case 340 /* PartiallyEmittedExpression */:
+                case 227 /* AsExpression */:
+                case 205 /* ElementAccessExpression */:
+                case 204 /* PropertyAccessExpression */:
+                case 228 /* NonNullExpression */:
+                case 345 /* PartiallyEmittedExpression */:
                     node = node.expression;
                     continue;
             }
@@ -19367,13 +19785,11 @@
     }
     ts.getUseDefineForClassFields = getUseDefineForClassFields;
     function compilerOptionsAffectSemanticDiagnostics(newOptions, oldOptions) {
-        return oldOptions !== newOptions &&
-            ts.semanticDiagnosticsOptionDeclarations.some(function (option) { return !isJsonEqual(getCompilerOptionValue(oldOptions, option), getCompilerOptionValue(newOptions, option)); });
+        return optionsHaveChanges(oldOptions, newOptions, ts.semanticDiagnosticsOptionDeclarations);
     }
     ts.compilerOptionsAffectSemanticDiagnostics = compilerOptionsAffectSemanticDiagnostics;
     function compilerOptionsAffectEmit(newOptions, oldOptions) {
-        return oldOptions !== newOptions &&
-            ts.affectsEmitOptionDeclarations.some(function (option) { return !isJsonEqual(getCompilerOptionValue(oldOptions, option), getCompilerOptionValue(newOptions, option)); });
+        return optionsHaveChanges(oldOptions, newOptions, ts.affectsEmitOptionDeclarations);
     }
     ts.compilerOptionsAffectEmit = compilerOptionsAffectEmit;
     function getCompilerOptionValue(options, option) {
@@ -19420,6 +19836,7 @@
         var symlinkedDirectories;
         var symlinkedDirectoriesByRealpath;
         var symlinkedFiles;
+        var hasProcessedResolutions = false;
         return {
             getSymlinkedFiles: function () { return symlinkedFiles; },
             getSymlinkedDirectories: function () { return symlinkedDirectories; },
@@ -19448,30 +19865,31 @@
                     });
                 }
             },
+            setSymlinksFromResolutions: function (files, typeReferenceDirectives) {
+                var _this = this;
+                var _a;
+                ts.Debug.assert(!hasProcessedResolutions);
+                hasProcessedResolutions = true;
+                for (var _i = 0, files_1 = files; _i < files_1.length; _i++) {
+                    var file = files_1[_i];
+                    (_a = file.resolvedModules) === null || _a === void 0 ? void 0 : _a.forEach(function (resolution) { return processResolution(_this, resolution); });
+                }
+                typeReferenceDirectives === null || typeReferenceDirectives === void 0 ? void 0 : typeReferenceDirectives.forEach(function (resolution) { return processResolution(_this, resolution); });
+            },
+            hasProcessedResolutions: function () { return hasProcessedResolutions; },
         };
-    }
-    ts.createSymlinkCache = createSymlinkCache;
-    function discoverProbableSymlinks(files, getCanonicalFileName, cwd) {
-        var cache = createSymlinkCache(cwd, getCanonicalFileName);
-        var symlinks = ts.flatMap(files, function (sf) {
-            var pairs = sf.resolvedModules && ts.arrayFrom(ts.mapDefinedIterator(sf.resolvedModules.values(), function (res) {
-                return (res === null || res === void 0 ? void 0 : res.originalPath) ? [res.resolvedFileName, res.originalPath] : undefined;
-            }));
-            return ts.concatenate(pairs, sf.resolvedTypeReferenceDirectiveNames && ts.arrayFrom(ts.mapDefinedIterator(sf.resolvedTypeReferenceDirectiveNames.values(), function (res) {
-                return (res === null || res === void 0 ? void 0 : res.originalPath) && res.resolvedFileName ? [res.resolvedFileName, res.originalPath] : undefined;
-            })));
-        });
-        for (var _i = 0, symlinks_1 = symlinks; _i < symlinks_1.length; _i++) {
-            var _a = symlinks_1[_i], resolvedPath = _a[0], originalPath = _a[1];
-            cache.setSymlinkedFile(ts.toPath(originalPath, cwd, getCanonicalFileName), resolvedPath);
-            var _b = guessDirectorySymlink(resolvedPath, originalPath, cwd, getCanonicalFileName) || ts.emptyArray, commonResolved = _b[0], commonOriginal = _b[1];
+        function processResolution(cache, resolution) {
+            if (!resolution || !resolution.originalPath || !resolution.resolvedFileName)
+                return;
+            var resolvedFileName = resolution.resolvedFileName, originalPath = resolution.originalPath;
+            cache.setSymlinkedFile(ts.toPath(originalPath, cwd, getCanonicalFileName), resolvedFileName);
+            var _a = guessDirectorySymlink(resolvedFileName, originalPath, cwd, getCanonicalFileName) || ts.emptyArray, commonResolved = _a[0], commonOriginal = _a[1];
             if (commonResolved && commonOriginal) {
                 cache.setSymlinkedDirectory(commonOriginal, { real: commonResolved, realPath: ts.toPath(commonResolved, cwd, getCanonicalFileName) });
             }
         }
-        return cache;
     }
-    ts.discoverProbableSymlinks = discoverProbableSymlinks;
+    ts.createSymlinkCache = createSymlinkCache;
     function guessDirectorySymlink(a, b, cwd, getCanonicalFileName) {
         var aParts = ts.getPathComponents(ts.getNormalizedAbsolutePath(a, cwd));
         var bParts = ts.getPathComponents(ts.getNormalizedAbsolutePath(b, cwd));
@@ -19667,7 +20085,7 @@
     }
     ts.getRegexFromPattern = getRegexFromPattern;
     /** @param path directory of the tsconfig.json */
-    function matchFiles(path, extensions, excludes, includes, useCaseSensitiveFileNames, currentDirectory, depth, getFileSystemEntries, realpath) {
+    function matchFiles(path, extensions, excludes, includes, useCaseSensitiveFileNames, currentDirectory, depth, getFileSystemEntries, realpath, directoryExists) {
         path = ts.normalizePath(path);
         currentDirectory = ts.normalizePath(currentDirectory);
         var patterns = getFileMatcherPatterns(path, excludes, includes, useCaseSensitiveFileNames, currentDirectory);
@@ -19681,7 +20099,9 @@
         var toCanonical = ts.createGetCanonicalFileName(useCaseSensitiveFileNames);
         for (var _i = 0, _a = patterns.basePaths; _i < _a.length; _i++) {
             var basePath = _a[_i];
-            visitDirectory(basePath, ts.combinePaths(currentDirectory, basePath), depth);
+            if (directoryExists(basePath)) {
+                visitDirectory(basePath, ts.combinePaths(currentDirectory, basePath), depth);
+            }
         }
         return ts.flatten(results);
         function visitDirectory(path, absolutePath, depth) {
@@ -19809,14 +20229,14 @@
     ts.supportedTSExtensionsForExtractExtension = [".d.ts" /* Dts */, ".ts" /* Ts */, ".tsx" /* Tsx */];
     ts.supportedJSExtensions = [".js" /* Js */, ".jsx" /* Jsx */];
     ts.supportedJSAndJsonExtensions = [".js" /* Js */, ".jsx" /* Jsx */, ".json" /* Json */];
-    var allSupportedExtensions = __spreadArray(__spreadArray([], ts.supportedTSExtensions), ts.supportedJSExtensions);
-    var allSupportedExtensionsWithJson = __spreadArray(__spreadArray(__spreadArray([], ts.supportedTSExtensions), ts.supportedJSExtensions), [".json" /* Json */]);
+    var allSupportedExtensions = __spreadArray(__spreadArray([], ts.supportedTSExtensions, true), ts.supportedJSExtensions, true);
+    var allSupportedExtensionsWithJson = __spreadArray(__spreadArray(__spreadArray([], ts.supportedTSExtensions, true), ts.supportedJSExtensions, true), [".json" /* Json */], false);
     function getSupportedExtensions(options, extraFileExtensions) {
         var needJsExtensions = options && getAllowJSCompilerOption(options);
         if (!extraFileExtensions || extraFileExtensions.length === 0) {
             return needJsExtensions ? allSupportedExtensions : ts.supportedTSExtensions;
         }
-        var extensions = __spreadArray(__spreadArray([], needJsExtensions ? allSupportedExtensions : ts.supportedTSExtensions), ts.mapDefined(extraFileExtensions, function (x) { return x.scriptKind === 7 /* Deferred */ || needJsExtensions && isJSLike(x.scriptKind) ? x.extension : undefined; }));
+        var extensions = __spreadArray(__spreadArray([], needJsExtensions ? allSupportedExtensions : ts.supportedTSExtensions, true), ts.mapDefined(extraFileExtensions, function (x) { return x.scriptKind === 7 /* Deferred */ || needJsExtensions && isJSLike(x.scriptKind) ? x.extension : undefined; }), true);
         return ts.deduplicate(extensions, ts.equateStringsCaseSensitive, ts.compareStringsCaseSensitive);
     }
     ts.getSupportedExtensions = getSupportedExtensions;
@@ -19830,7 +20250,7 @@
         if (supportedExtensions === ts.supportedTSExtensions) {
             return ts.supportedTSExtensionsWithJson;
         }
-        return __spreadArray(__spreadArray([], supportedExtensions), [".json" /* Json */]);
+        return __spreadArray(__spreadArray([], supportedExtensions, true), [".json" /* Json */], false);
     }
     ts.getSuppoertedExtensionsWithJsonIfResolveJsonModule = getSuppoertedExtensionsWithJsonIfResolveJsonModule;
     function isJSLike(scriptKind) {
@@ -19940,16 +20360,27 @@
         return ts.changeAnyExtension(path, newExtension, extensionsToRemove, /*ignoreCase*/ false);
     }
     ts.changeExtension = changeExtension;
+    /**
+     * Returns the input if there are no stars, a pattern if there is exactly one,
+     * and undefined if there are more.
+     */
     function tryParsePattern(pattern) {
-        // This should be verified outside of here and a proper error thrown.
-        ts.Debug.assert(hasZeroOrOneAsteriskCharacter(pattern));
         var indexOfStar = pattern.indexOf("*");
-        return indexOfStar === -1 ? undefined : {
-            prefix: pattern.substr(0, indexOfStar),
-            suffix: pattern.substr(indexOfStar + 1)
-        };
+        if (indexOfStar === -1) {
+            return pattern;
+        }
+        return pattern.indexOf("*", indexOfStar + 1) !== -1
+            ? undefined
+            : {
+                prefix: pattern.substr(0, indexOfStar),
+                suffix: pattern.substr(indexOfStar + 1)
+            };
     }
     ts.tryParsePattern = tryParsePattern;
+    function tryParsePatterns(paths) {
+        return ts.mapDefined(ts.getOwnKeys(paths), function (path) { return tryParsePattern(path); });
+    }
+    ts.tryParsePatterns = tryParsePatterns;
     function positionIsSynthesized(pos) {
         // This is a fast way of testing the following conditions:
         //  pos === undefined || pos === null || isNaN(pos) || pos < 0;
@@ -19991,23 +20422,19 @@
         directories: ts.emptyArray
     };
     /**
-     * patternStrings contains both pattern strings (containing "*") and regular strings.
+     * patternOrStrings contains both patterns (containing "*") and regular strings.
      * Return an exact match if possible, or a pattern match, or undefined.
      * (These are verified by verifyCompilerOptions to have 0 or 1 "*" characters.)
      */
-    function matchPatternOrExact(patternStrings, candidate) {
+    function matchPatternOrExact(patternOrStrings, candidate) {
         var patterns = [];
-        for (var _i = 0, patternStrings_1 = patternStrings; _i < patternStrings_1.length; _i++) {
-            var patternString = patternStrings_1[_i];
-            if (!hasZeroOrOneAsteriskCharacter(patternString))
-                continue;
-            var pattern = tryParsePattern(patternString);
-            if (pattern) {
-                patterns.push(pattern);
+        for (var _i = 0, patternOrStrings_1 = patternOrStrings; _i < patternOrStrings_1.length; _i++) {
+            var patternOrString = patternOrStrings_1[_i];
+            if (patternOrString === candidate) {
+                return candidate;
             }
-            else if (patternString === candidate) {
-                // pattern was matched as is - no need to search further
-                return patternString;
+            if (!ts.isString(patternOrString)) {
+                patterns.push(patternOrString);
             }
         }
         return ts.findBestPatternMatch(patterns, function (_) { return _; }, candidate);
@@ -20158,42 +20585,45 @@
             || isPartOfTypeQuery(useSite)
             || isIdentifierInNonEmittingHeritageClause(useSite)
             || isPartOfPossiblyValidTypeOrAbstractComputedPropertyName(useSite)
-            || !isExpressionNode(useSite);
+            || !(isExpressionNode(useSite) || isShorthandPropertyNameUseSite(useSite));
     }
     ts.isValidTypeOnlyAliasUseSite = isValidTypeOnlyAliasUseSite;
     function typeOnlyDeclarationIsExport(typeOnlyDeclaration) {
-        return typeOnlyDeclaration.kind === 271 /* ExportSpecifier */;
+        return typeOnlyDeclaration.kind === 273 /* ExportSpecifier */;
     }
     ts.typeOnlyDeclarationIsExport = typeOnlyDeclarationIsExport;
+    function isShorthandPropertyNameUseSite(useSite) {
+        return ts.isIdentifier(useSite) && ts.isShorthandPropertyAssignment(useSite.parent) && useSite.parent.name === useSite;
+    }
     function isPartOfPossiblyValidTypeOrAbstractComputedPropertyName(node) {
-        while (node.kind === 78 /* Identifier */ || node.kind === 202 /* PropertyAccessExpression */) {
+        while (node.kind === 79 /* Identifier */ || node.kind === 204 /* PropertyAccessExpression */) {
             node = node.parent;
         }
-        if (node.kind !== 159 /* ComputedPropertyName */) {
+        if (node.kind !== 160 /* ComputedPropertyName */) {
             return false;
         }
         if (hasSyntacticModifier(node.parent, 128 /* Abstract */)) {
             return true;
         }
         var containerKind = node.parent.parent.kind;
-        return containerKind === 254 /* InterfaceDeclaration */ || containerKind === 178 /* TypeLiteral */;
+        return containerKind === 256 /* InterfaceDeclaration */ || containerKind === 180 /* TypeLiteral */;
     }
     /** Returns true for an identifier in 1) an `implements` clause, and 2) an `extends` clause of an interface. */
     function isIdentifierInNonEmittingHeritageClause(node) {
-        if (node.kind !== 78 /* Identifier */)
+        if (node.kind !== 79 /* Identifier */)
             return false;
         var heritageClause = ts.findAncestor(node.parent, function (parent) {
             switch (parent.kind) {
-                case 287 /* HeritageClause */:
+                case 289 /* HeritageClause */:
                     return true;
-                case 202 /* PropertyAccessExpression */:
-                case 224 /* ExpressionWithTypeArguments */:
+                case 204 /* PropertyAccessExpression */:
+                case 226 /* ExpressionWithTypeArguments */:
                     return false;
                 default:
                     return "quit";
             }
         });
-        return (heritageClause === null || heritageClause === void 0 ? void 0 : heritageClause.token) === 116 /* ImplementsKeyword */ || (heritageClause === null || heritageClause === void 0 ? void 0 : heritageClause.parent.kind) === 254 /* InterfaceDeclaration */;
+        return (heritageClause === null || heritageClause === void 0 ? void 0 : heritageClause.token) === 117 /* ImplementsKeyword */ || (heritageClause === null || heritageClause === void 0 ? void 0 : heritageClause.parent.kind) === 256 /* InterfaceDeclaration */;
     }
     function isIdentifierTypeReference(node) {
         return ts.isTypeReferenceNode(node) && ts.isIdentifier(node.typeName);
@@ -20354,18 +20784,18 @@
         if (!node.parent)
             return undefined;
         switch (node.kind) {
-            case 160 /* TypeParameter */:
+            case 161 /* TypeParameter */:
                 var parent_1 = node.parent;
-                return parent_1.kind === 186 /* InferType */ ? undefined : parent_1.typeParameters;
-            case 161 /* Parameter */:
+                return parent_1.kind === 188 /* InferType */ ? undefined : parent_1.typeParameters;
+            case 162 /* Parameter */:
                 return node.parent.parameters;
-            case 195 /* TemplateLiteralTypeSpan */:
+            case 197 /* TemplateLiteralTypeSpan */:
                 return node.parent.templateSpans;
-            case 229 /* TemplateSpan */:
+            case 231 /* TemplateSpan */:
                 return node.parent.templateSpans;
-            case 162 /* Decorator */:
+            case 163 /* Decorator */:
                 return node.parent.decorators;
-            case 287 /* HeritageClause */:
+            case 289 /* HeritageClause */:
                 return node.parent.heritageClauses;
         }
         var parent = node.parent;
@@ -20373,49 +20803,73 @@
             return ts.isJSDocTypeLiteral(node.parent) ? undefined : node.parent.tags;
         }
         switch (parent.kind) {
-            case 178 /* TypeLiteral */:
-            case 254 /* InterfaceDeclaration */:
+            case 180 /* TypeLiteral */:
+            case 256 /* InterfaceDeclaration */:
                 return ts.isTypeElement(node) ? parent.members : undefined;
-            case 183 /* UnionType */:
-            case 184 /* IntersectionType */:
+            case 185 /* UnionType */:
+            case 186 /* IntersectionType */:
                 return parent.types;
-            case 180 /* TupleType */:
-            case 200 /* ArrayLiteralExpression */:
-            case 341 /* CommaListExpression */:
-            case 265 /* NamedImports */:
-            case 269 /* NamedExports */:
+            case 182 /* TupleType */:
+            case 202 /* ArrayLiteralExpression */:
+            case 346 /* CommaListExpression */:
+            case 267 /* NamedImports */:
+            case 271 /* NamedExports */:
                 return parent.elements;
-            case 201 /* ObjectLiteralExpression */:
-            case 282 /* JsxAttributes */:
+            case 203 /* ObjectLiteralExpression */:
+            case 284 /* JsxAttributes */:
                 return parent.properties;
-            case 204 /* CallExpression */:
-            case 205 /* NewExpression */:
+            case 206 /* CallExpression */:
+            case 207 /* NewExpression */:
                 return ts.isTypeNode(node) ? parent.typeArguments :
                     parent.expression === node ? undefined :
                         parent.arguments;
-            case 274 /* JsxElement */:
-            case 278 /* JsxFragment */:
+            case 276 /* JsxElement */:
+            case 280 /* JsxFragment */:
                 return ts.isJsxChild(node) ? parent.children : undefined;
-            case 276 /* JsxOpeningElement */:
-            case 275 /* JsxSelfClosingElement */:
+            case 278 /* JsxOpeningElement */:
+            case 277 /* JsxSelfClosingElement */:
                 return ts.isTypeNode(node) ? parent.typeArguments : undefined;
-            case 231 /* Block */:
-            case 285 /* CaseClause */:
-            case 286 /* DefaultClause */:
-            case 258 /* ModuleBlock */:
+            case 233 /* Block */:
+            case 287 /* CaseClause */:
+            case 288 /* DefaultClause */:
+            case 260 /* ModuleBlock */:
                 return parent.statements;
-            case 259 /* CaseBlock */:
+            case 261 /* CaseBlock */:
                 return parent.clauses;
-            case 253 /* ClassDeclaration */:
-            case 222 /* ClassExpression */:
+            case 255 /* ClassDeclaration */:
+            case 224 /* ClassExpression */:
                 return ts.isClassElement(node) ? parent.members : undefined;
-            case 256 /* EnumDeclaration */:
+            case 258 /* EnumDeclaration */:
                 return ts.isEnumMember(node) ? parent.members : undefined;
-            case 298 /* SourceFile */:
+            case 300 /* SourceFile */:
                 return parent.statements;
         }
     }
     ts.getContainingNodeArray = getContainingNodeArray;
+    function hasContextSensitiveParameters(node) {
+        // Functions with type parameters are not context sensitive.
+        if (!node.typeParameters) {
+            // Functions with any parameters that lack type annotations are context sensitive.
+            if (ts.some(node.parameters, function (p) { return !getEffectiveTypeAnnotationNode(p); })) {
+                return true;
+            }
+            if (node.kind !== 212 /* ArrowFunction */) {
+                // If the first parameter is not an explicit 'this' parameter, then the function has
+                // an implicit 'this' parameter which is subject to contextual typing.
+                var parameter = ts.firstOrUndefined(node.parameters);
+                if (!(parameter && parameterIsThisKeyword(parameter))) {
+                    return true;
+                }
+            }
+        }
+        return false;
+    }
+    ts.hasContextSensitiveParameters = hasContextSensitiveParameters;
+    /* @internal */
+    function isInfinityOrNaNString(name) {
+        return name === "Infinity" || name === "-Infinity" || name === "NaN";
+    }
+    ts.isInfinityOrNaNString = isInfinityOrNaNString;
 })(ts || (ts = {}));
 /* @internal */
 var ts;
@@ -20529,10 +20983,10 @@
             //
             // If `a ** d` is on the left of operator `**`, we need to parenthesize to preserve
             // the intended order of operations: `(a ** b) ** c`
-            var binaryOperatorPrecedence = ts.getOperatorPrecedence(217 /* BinaryExpression */, binaryOperator);
-            var binaryOperatorAssociativity = ts.getOperatorAssociativity(217 /* BinaryExpression */, binaryOperator);
+            var binaryOperatorPrecedence = ts.getOperatorPrecedence(219 /* BinaryExpression */, binaryOperator);
+            var binaryOperatorAssociativity = ts.getOperatorAssociativity(219 /* BinaryExpression */, binaryOperator);
             var emittedOperand = ts.skipPartiallyEmittedExpressions(operand);
-            if (!isLeftSideOfBinary && operand.kind === 210 /* ArrowFunction */ && binaryOperatorPrecedence > 3 /* Assignment */) {
+            if (!isLeftSideOfBinary && operand.kind === 212 /* ArrowFunction */ && binaryOperatorPrecedence > 3 /* Assignment */) {
                 // We need to parenthesize arrow functions on the right side to avoid it being
                 // parsed as parenthesized expression: `a && (() => {})`
                 return true;
@@ -20544,7 +20998,7 @@
                     // and is a yield expression, then we do not need parentheses.
                     if (!isLeftSideOfBinary
                         && binaryOperatorAssociativity === 1 /* Right */
-                        && operand.kind === 220 /* YieldExpression */) {
+                        && operand.kind === 222 /* YieldExpression */) {
                         return false;
                     }
                     return true;
@@ -20632,7 +21086,7 @@
             if (ts.isLiteralKind(node.kind)) {
                 return node.kind;
             }
-            if (node.kind === 217 /* BinaryExpression */ && node.operatorToken.kind === 39 /* PlusToken */) {
+            if (node.kind === 219 /* BinaryExpression */ && node.operatorToken.kind === 39 /* PlusToken */) {
                 if (node.cachedLiteralKind !== undefined) {
                     return node.cachedLiteralKind;
                 }
@@ -20658,7 +21112,7 @@
         function parenthesizeBinaryOperand(binaryOperator, operand, isLeftSideOfBinary, leftOperand) {
             var skipped = ts.skipPartiallyEmittedExpressions(operand);
             // If the resulting expression is already parenthesized, we do not need to do any further processing.
-            if (skipped.kind === 208 /* ParenthesizedExpression */) {
+            if (skipped.kind === 210 /* ParenthesizedExpression */) {
                 return operand;
             }
             return binaryOperandNeedsParentheses(binaryOperator, operand, isLeftSideOfBinary, leftOperand)
@@ -20675,7 +21129,7 @@
             return ts.isCommaSequence(expression) ? factory.createParenthesizedExpression(expression) : expression;
         }
         function parenthesizeConditionOfConditionalExpression(condition) {
-            var conditionalPrecedence = ts.getOperatorPrecedence(218 /* ConditionalExpression */, 57 /* QuestionToken */);
+            var conditionalPrecedence = ts.getOperatorPrecedence(220 /* ConditionalExpression */, 57 /* QuestionToken */);
             var emittedCondition = ts.skipPartiallyEmittedExpressions(condition);
             var conditionPrecedence = ts.getExpressionPrecedence(emittedCondition);
             if (ts.compareValues(conditionPrecedence, conditionalPrecedence) !== 1 /* GreaterThan */) {
@@ -20708,8 +21162,8 @@
             var needsParens = ts.isCommaSequence(check);
             if (!needsParens) {
                 switch (ts.getLeftmostExpression(check, /*stopAtCallExpression*/ false).kind) {
-                    case 222 /* ClassExpression */:
-                    case 209 /* FunctionExpression */:
+                    case 224 /* ClassExpression */:
+                    case 211 /* FunctionExpression */:
                         needsParens = true;
                 }
             }
@@ -20722,9 +21176,9 @@
         function parenthesizeExpressionOfNew(expression) {
             var leftmostExpr = ts.getLeftmostExpression(expression, /*stopAtCallExpressions*/ true);
             switch (leftmostExpr.kind) {
-                case 204 /* CallExpression */:
+                case 206 /* CallExpression */:
                     return factory.createParenthesizedExpression(expression);
-                case 205 /* NewExpression */:
+                case 207 /* NewExpression */:
                     return !leftmostExpr.arguments
                         ? factory.createParenthesizedExpression(expression)
                         : expression; // TODO(rbuckton): Verify this assertion holds
@@ -20744,7 +21198,7 @@
             //
             var emittedExpression = ts.skipPartiallyEmittedExpressions(expression);
             if (ts.isLeftHandSideExpression(emittedExpression)
-                && (emittedExpression.kind !== 205 /* NewExpression */ || emittedExpression.arguments)) {
+                && (emittedExpression.kind !== 207 /* NewExpression */ || emittedExpression.arguments)) {
                 // TODO(rbuckton): Verify whether this assertion holds.
                 return expression;
             }
@@ -20766,7 +21220,7 @@
         function parenthesizeExpressionForDisallowedComma(expression) {
             var emittedExpression = ts.skipPartiallyEmittedExpressions(expression);
             var expressionPrecedence = ts.getExpressionPrecedence(emittedExpression);
-            var commaPrecedence = ts.getOperatorPrecedence(217 /* BinaryExpression */, 27 /* CommaToken */);
+            var commaPrecedence = ts.getOperatorPrecedence(219 /* BinaryExpression */, 27 /* CommaToken */);
             // TODO(rbuckton): Verifiy whether `setTextRange` is needed.
             return expressionPrecedence > commaPrecedence ? expression : ts.setTextRange(factory.createParenthesizedExpression(expression), expression);
         }
@@ -20775,44 +21229,44 @@
             if (ts.isCallExpression(emittedExpression)) {
                 var callee = emittedExpression.expression;
                 var kind = ts.skipPartiallyEmittedExpressions(callee).kind;
-                if (kind === 209 /* FunctionExpression */ || kind === 210 /* ArrowFunction */) {
+                if (kind === 211 /* FunctionExpression */ || kind === 212 /* ArrowFunction */) {
                     // TODO(rbuckton): Verifiy whether `setTextRange` is needed.
                     var updated = factory.updateCallExpression(emittedExpression, ts.setTextRange(factory.createParenthesizedExpression(callee), callee), emittedExpression.typeArguments, emittedExpression.arguments);
                     return factory.restoreOuterExpressions(expression, updated, 8 /* PartiallyEmittedExpressions */);
                 }
             }
             var leftmostExpressionKind = ts.getLeftmostExpression(emittedExpression, /*stopAtCallExpressions*/ false).kind;
-            if (leftmostExpressionKind === 201 /* ObjectLiteralExpression */ || leftmostExpressionKind === 209 /* FunctionExpression */) {
+            if (leftmostExpressionKind === 203 /* ObjectLiteralExpression */ || leftmostExpressionKind === 211 /* FunctionExpression */) {
                 // TODO(rbuckton): Verifiy whether `setTextRange` is needed.
                 return ts.setTextRange(factory.createParenthesizedExpression(expression), expression);
             }
             return expression;
         }
         function parenthesizeConciseBodyOfArrowFunction(body) {
-            if (!ts.isBlock(body) && (ts.isCommaSequence(body) || ts.getLeftmostExpression(body, /*stopAtCallExpressions*/ false).kind === 201 /* ObjectLiteralExpression */)) {
+            if (!ts.isBlock(body) && (ts.isCommaSequence(body) || ts.getLeftmostExpression(body, /*stopAtCallExpressions*/ false).kind === 203 /* ObjectLiteralExpression */)) {
                 // TODO(rbuckton): Verifiy whether `setTextRange` is needed.
                 return ts.setTextRange(factory.createParenthesizedExpression(body), body);
             }
             return body;
         }
         function parenthesizeMemberOfConditionalType(member) {
-            return member.kind === 185 /* ConditionalType */ ? factory.createParenthesizedType(member) : member;
+            return member.kind === 187 /* ConditionalType */ ? factory.createParenthesizedType(member) : member;
         }
         function parenthesizeMemberOfElementType(member) {
             switch (member.kind) {
-                case 183 /* UnionType */:
-                case 184 /* IntersectionType */:
-                case 175 /* FunctionType */:
-                case 176 /* ConstructorType */:
+                case 185 /* UnionType */:
+                case 186 /* IntersectionType */:
+                case 177 /* FunctionType */:
+                case 178 /* ConstructorType */:
                     return factory.createParenthesizedType(member);
             }
             return parenthesizeMemberOfConditionalType(member);
         }
         function parenthesizeElementTypeOfArrayType(member) {
             switch (member.kind) {
-                case 177 /* TypeQuery */:
-                case 189 /* TypeOperator */:
-                case 186 /* InferType */:
+                case 179 /* TypeQuery */:
+                case 191 /* TypeOperator */:
+                case 188 /* InferType */:
                     return factory.createParenthesizedType(member);
             }
             return parenthesizeMemberOfElementType(member);
@@ -20918,11 +21372,11 @@
         }
         function convertToAssignmentPattern(node) {
             switch (node.kind) {
-                case 198 /* ArrayBindingPattern */:
-                case 200 /* ArrayLiteralExpression */:
+                case 200 /* ArrayBindingPattern */:
+                case 202 /* ArrayLiteralExpression */:
                     return convertToArrayAssignmentPattern(node);
-                case 197 /* ObjectBindingPattern */:
-                case 201 /* ObjectLiteralExpression */:
+                case 199 /* ObjectBindingPattern */:
+                case 203 /* ObjectLiteralExpression */:
                     return convertToObjectAssignmentPattern(node);
             }
         }
@@ -21050,6 +21504,8 @@
             updateConstructSignature: updateConstructSignature,
             createIndexSignature: createIndexSignature,
             updateIndexSignature: updateIndexSignature,
+            createClassStaticBlockDeclaration: createClassStaticBlockDeclaration,
+            updateClassStaticBlockDeclaration: updateClassStaticBlockDeclaration,
             createTemplateLiteralTypeSpan: createTemplateLiteralTypeSpan,
             updateTemplateLiteralTypeSpan: updateTemplateLiteralTypeSpan,
             createKeywordTypeNode: createKeywordTypeNode,
@@ -21263,18 +21719,18 @@
             createExternalModuleReference: createExternalModuleReference,
             updateExternalModuleReference: updateExternalModuleReference,
             // lazily load factory members for JSDoc types with similar structure
-            get createJSDocAllType() { return getJSDocPrimaryTypeCreateFunction(304 /* JSDocAllType */); },
-            get createJSDocUnknownType() { return getJSDocPrimaryTypeCreateFunction(305 /* JSDocUnknownType */); },
-            get createJSDocNonNullableType() { return getJSDocUnaryTypeCreateFunction(307 /* JSDocNonNullableType */); },
-            get updateJSDocNonNullableType() { return getJSDocUnaryTypeUpdateFunction(307 /* JSDocNonNullableType */); },
-            get createJSDocNullableType() { return getJSDocUnaryTypeCreateFunction(306 /* JSDocNullableType */); },
-            get updateJSDocNullableType() { return getJSDocUnaryTypeUpdateFunction(306 /* JSDocNullableType */); },
-            get createJSDocOptionalType() { return getJSDocUnaryTypeCreateFunction(308 /* JSDocOptionalType */); },
-            get updateJSDocOptionalType() { return getJSDocUnaryTypeUpdateFunction(308 /* JSDocOptionalType */); },
-            get createJSDocVariadicType() { return getJSDocUnaryTypeCreateFunction(310 /* JSDocVariadicType */); },
-            get updateJSDocVariadicType() { return getJSDocUnaryTypeUpdateFunction(310 /* JSDocVariadicType */); },
-            get createJSDocNamepathType() { return getJSDocUnaryTypeCreateFunction(311 /* JSDocNamepathType */); },
-            get updateJSDocNamepathType() { return getJSDocUnaryTypeUpdateFunction(311 /* JSDocNamepathType */); },
+            get createJSDocAllType() { return getJSDocPrimaryTypeCreateFunction(307 /* JSDocAllType */); },
+            get createJSDocUnknownType() { return getJSDocPrimaryTypeCreateFunction(308 /* JSDocUnknownType */); },
+            get createJSDocNonNullableType() { return getJSDocUnaryTypeCreateFunction(310 /* JSDocNonNullableType */); },
+            get updateJSDocNonNullableType() { return getJSDocUnaryTypeUpdateFunction(310 /* JSDocNonNullableType */); },
+            get createJSDocNullableType() { return getJSDocUnaryTypeCreateFunction(309 /* JSDocNullableType */); },
+            get updateJSDocNullableType() { return getJSDocUnaryTypeUpdateFunction(309 /* JSDocNullableType */); },
+            get createJSDocOptionalType() { return getJSDocUnaryTypeCreateFunction(311 /* JSDocOptionalType */); },
+            get updateJSDocOptionalType() { return getJSDocUnaryTypeUpdateFunction(311 /* JSDocOptionalType */); },
+            get createJSDocVariadicType() { return getJSDocUnaryTypeCreateFunction(313 /* JSDocVariadicType */); },
+            get updateJSDocVariadicType() { return getJSDocUnaryTypeUpdateFunction(313 /* JSDocVariadicType */); },
+            get createJSDocNamepathType() { return getJSDocUnaryTypeCreateFunction(314 /* JSDocNamepathType */); },
+            get updateJSDocNamepathType() { return getJSDocUnaryTypeUpdateFunction(314 /* JSDocNamepathType */); },
             createJSDocFunctionType: createJSDocFunctionType,
             updateJSDocFunctionType: updateJSDocFunctionType,
             createJSDocTypeLiteral: createJSDocTypeLiteral,
@@ -21301,33 +21757,39 @@
             updateJSDocSeeTag: updateJSDocSeeTag,
             createJSDocNameReference: createJSDocNameReference,
             updateJSDocNameReference: updateJSDocNameReference,
+            createJSDocMemberName: createJSDocMemberName,
+            updateJSDocMemberName: updateJSDocMemberName,
             createJSDocLink: createJSDocLink,
             updateJSDocLink: updateJSDocLink,
+            createJSDocLinkCode: createJSDocLinkCode,
+            updateJSDocLinkCode: updateJSDocLinkCode,
+            createJSDocLinkPlain: createJSDocLinkPlain,
+            updateJSDocLinkPlain: updateJSDocLinkPlain,
             // lazily load factory members for JSDoc tags with similar structure
-            get createJSDocTypeTag() { return getJSDocTypeLikeTagCreateFunction(333 /* JSDocTypeTag */); },
-            get updateJSDocTypeTag() { return getJSDocTypeLikeTagUpdateFunction(333 /* JSDocTypeTag */); },
-            get createJSDocReturnTag() { return getJSDocTypeLikeTagCreateFunction(331 /* JSDocReturnTag */); },
-            get updateJSDocReturnTag() { return getJSDocTypeLikeTagUpdateFunction(331 /* JSDocReturnTag */); },
-            get createJSDocThisTag() { return getJSDocTypeLikeTagCreateFunction(332 /* JSDocThisTag */); },
-            get updateJSDocThisTag() { return getJSDocTypeLikeTagUpdateFunction(332 /* JSDocThisTag */); },
-            get createJSDocEnumTag() { return getJSDocTypeLikeTagCreateFunction(329 /* JSDocEnumTag */); },
-            get updateJSDocEnumTag() { return getJSDocTypeLikeTagUpdateFunction(329 /* JSDocEnumTag */); },
-            get createJSDocAuthorTag() { return getJSDocSimpleTagCreateFunction(320 /* JSDocAuthorTag */); },
-            get updateJSDocAuthorTag() { return getJSDocSimpleTagUpdateFunction(320 /* JSDocAuthorTag */); },
-            get createJSDocClassTag() { return getJSDocSimpleTagCreateFunction(322 /* JSDocClassTag */); },
-            get updateJSDocClassTag() { return getJSDocSimpleTagUpdateFunction(322 /* JSDocClassTag */); },
-            get createJSDocPublicTag() { return getJSDocSimpleTagCreateFunction(323 /* JSDocPublicTag */); },
-            get updateJSDocPublicTag() { return getJSDocSimpleTagUpdateFunction(323 /* JSDocPublicTag */); },
-            get createJSDocPrivateTag() { return getJSDocSimpleTagCreateFunction(324 /* JSDocPrivateTag */); },
-            get updateJSDocPrivateTag() { return getJSDocSimpleTagUpdateFunction(324 /* JSDocPrivateTag */); },
-            get createJSDocProtectedTag() { return getJSDocSimpleTagCreateFunction(325 /* JSDocProtectedTag */); },
-            get updateJSDocProtectedTag() { return getJSDocSimpleTagUpdateFunction(325 /* JSDocProtectedTag */); },
-            get createJSDocReadonlyTag() { return getJSDocSimpleTagCreateFunction(326 /* JSDocReadonlyTag */); },
-            get updateJSDocReadonlyTag() { return getJSDocSimpleTagUpdateFunction(326 /* JSDocReadonlyTag */); },
-            get createJSDocOverrideTag() { return getJSDocSimpleTagCreateFunction(327 /* JSDocOverrideTag */); },
-            get updateJSDocOverrideTag() { return getJSDocSimpleTagUpdateFunction(327 /* JSDocOverrideTag */); },
-            get createJSDocDeprecatedTag() { return getJSDocSimpleTagCreateFunction(321 /* JSDocDeprecatedTag */); },
-            get updateJSDocDeprecatedTag() { return getJSDocSimpleTagUpdateFunction(321 /* JSDocDeprecatedTag */); },
+            get createJSDocTypeTag() { return getJSDocTypeLikeTagCreateFunction(338 /* JSDocTypeTag */); },
+            get updateJSDocTypeTag() { return getJSDocTypeLikeTagUpdateFunction(338 /* JSDocTypeTag */); },
+            get createJSDocReturnTag() { return getJSDocTypeLikeTagCreateFunction(336 /* JSDocReturnTag */); },
+            get updateJSDocReturnTag() { return getJSDocTypeLikeTagUpdateFunction(336 /* JSDocReturnTag */); },
+            get createJSDocThisTag() { return getJSDocTypeLikeTagCreateFunction(337 /* JSDocThisTag */); },
+            get updateJSDocThisTag() { return getJSDocTypeLikeTagUpdateFunction(337 /* JSDocThisTag */); },
+            get createJSDocEnumTag() { return getJSDocTypeLikeTagCreateFunction(334 /* JSDocEnumTag */); },
+            get updateJSDocEnumTag() { return getJSDocTypeLikeTagUpdateFunction(334 /* JSDocEnumTag */); },
+            get createJSDocAuthorTag() { return getJSDocSimpleTagCreateFunction(325 /* JSDocAuthorTag */); },
+            get updateJSDocAuthorTag() { return getJSDocSimpleTagUpdateFunction(325 /* JSDocAuthorTag */); },
+            get createJSDocClassTag() { return getJSDocSimpleTagCreateFunction(327 /* JSDocClassTag */); },
+            get updateJSDocClassTag() { return getJSDocSimpleTagUpdateFunction(327 /* JSDocClassTag */); },
+            get createJSDocPublicTag() { return getJSDocSimpleTagCreateFunction(328 /* JSDocPublicTag */); },
+            get updateJSDocPublicTag() { return getJSDocSimpleTagUpdateFunction(328 /* JSDocPublicTag */); },
+            get createJSDocPrivateTag() { return getJSDocSimpleTagCreateFunction(329 /* JSDocPrivateTag */); },
+            get updateJSDocPrivateTag() { return getJSDocSimpleTagUpdateFunction(329 /* JSDocPrivateTag */); },
+            get createJSDocProtectedTag() { return getJSDocSimpleTagCreateFunction(330 /* JSDocProtectedTag */); },
+            get updateJSDocProtectedTag() { return getJSDocSimpleTagUpdateFunction(330 /* JSDocProtectedTag */); },
+            get createJSDocReadonlyTag() { return getJSDocSimpleTagCreateFunction(331 /* JSDocReadonlyTag */); },
+            get updateJSDocReadonlyTag() { return getJSDocSimpleTagUpdateFunction(331 /* JSDocReadonlyTag */); },
+            get createJSDocOverrideTag() { return getJSDocSimpleTagCreateFunction(332 /* JSDocOverrideTag */); },
+            get updateJSDocOverrideTag() { return getJSDocSimpleTagUpdateFunction(332 /* JSDocOverrideTag */); },
+            get createJSDocDeprecatedTag() { return getJSDocSimpleTagCreateFunction(326 /* JSDocDeprecatedTag */); },
+            get updateJSDocDeprecatedTag() { return getJSDocSimpleTagUpdateFunction(326 /* JSDocDeprecatedTag */); },
             createJSDocUnknownTag: createJSDocUnknownTag,
             updateJSDocUnknownTag: updateJSDocUnknownTag,
             createJSDocText: createJSDocText,
@@ -21396,7 +21858,7 @@
             cloneNode: cloneNode,
             // Lazily load factory methods for common operator factories and utilities
             get createComma() { return getBinaryCreateFunction(27 /* CommaToken */); },
-            get createAssignment() { return getBinaryCreateFunction(62 /* EqualsToken */); },
+            get createAssignment() { return getBinaryCreateFunction(63 /* EqualsToken */); },
             get createLogicalOr() { return getBinaryCreateFunction(56 /* BarBarToken */); },
             get createLogicalAnd() { return getBinaryCreateFunction(55 /* AmpersandAmpersandToken */); },
             get createBitwiseOr() { return getBinaryCreateFunction(51 /* BarToken */); },
@@ -21442,8 +21904,11 @@
             createArraySliceCall: createArraySliceCall,
             createArrayConcatCall: createArrayConcatCall,
             createObjectDefinePropertyCall: createObjectDefinePropertyCall,
+            createReflectGetCall: createReflectGetCall,
+            createReflectSetCall: createReflectSetCall,
             createPropertyDescriptor: createPropertyDescriptor,
             createCallBinding: createCallBinding,
+            createAssignmentTargetWrapper: createAssignmentTargetWrapper,
             // Utilities
             inlineExpressions: inlineExpressions,
             getInternalName: getInternalName,
@@ -21470,12 +21935,24 @@
                 elements = [];
             }
             else if (ts.isNodeArray(elements)) {
-                // Ensure the transform flags have been aggregated for this NodeArray
-                if (elements.transformFlags === undefined) {
-                    aggregateChildrenFlags(elements);
+                if (hasTrailingComma === undefined || elements.hasTrailingComma === hasTrailingComma) {
+                    // Ensure the transform flags have been aggregated for this NodeArray
+                    if (elements.transformFlags === undefined) {
+                        aggregateChildrenFlags(elements);
+                    }
+                    ts.Debug.attachNodeArrayDebugInfo(elements);
+                    return elements;
                 }
-                ts.Debug.attachNodeArrayDebugInfo(elements);
-                return elements;
+                // This *was* a `NodeArray`, but the `hasTrailingComma` option differs. Recreate the
+                // array with the same elements, text range, and transform flags but with the updated
+                // value for `hasTrailingComma`
+                var array_8 = elements.slice();
+                array_8.pos = elements.pos;
+                array_8.end = elements.end;
+                array_8.hasTrailingComma = hasTrailingComma;
+                array_8.transformFlags = elements.transformFlags;
+                ts.Debug.attachNodeArrayDebugInfo(array_8);
+                return array_8;
             }
             // Since the element list of a node array is typically created by starting with an empty array and
             // repeatedly calling push(), the list may not have the optimal memory layout. We invoke slice() for
@@ -21515,11 +21992,11 @@
             // don't propagate child flags.
             if (name) {
                 switch (node.kind) {
-                    case 166 /* MethodDeclaration */:
-                    case 168 /* GetAccessor */:
-                    case 169 /* SetAccessor */:
-                    case 164 /* PropertyDeclaration */:
-                    case 289 /* PropertyAssignment */:
+                    case 167 /* MethodDeclaration */:
+                    case 170 /* GetAccessor */:
+                    case 171 /* SetAccessor */:
+                    case 165 /* PropertyDeclaration */:
+                    case 291 /* PropertyAssignment */:
                         if (ts.isIdentifier(name)) {
                             node.transformFlags |= propagateIdentifierNameFlags(name);
                             break;
@@ -21665,10 +22142,10 @@
             if (originalKeywordKind === undefined && text) {
                 originalKeywordKind = ts.stringToToken(text);
             }
-            if (originalKeywordKind === 78 /* Identifier */) {
+            if (originalKeywordKind === 79 /* Identifier */) {
                 originalKeywordKind = undefined;
             }
-            var node = baseFactory.createBaseIdentifierNode(78 /* Identifier */);
+            var node = baseFactory.createBaseIdentifierNode(79 /* Identifier */);
             node.originalKeywordKind = originalKeywordKind;
             node.escapedText = ts.escapeLeadingUnderscores(text);
             return node;
@@ -21687,7 +22164,7 @@
                 // NOTE: we do not use `setChildren` here because typeArguments in an identifier do not contribute to transformations
                 node.typeArguments = createNodeArray(typeArguments);
             }
-            if (node.originalKeywordKind === 130 /* AwaitKeyword */) {
+            if (node.originalKeywordKind === 131 /* AwaitKeyword */) {
                 node.transformFlags |= 16777216 /* ContainsPossibleTopLevelAwait */;
             }
             return node;
@@ -21738,7 +22215,7 @@
         function createPrivateIdentifier(text) {
             if (!ts.startsWith(text, "#"))
                 ts.Debug.fail("First character of private identifier must be #: " + text);
-            var node = baseFactory.createBasePrivateIdentifierNode(79 /* PrivateIdentifier */);
+            var node = baseFactory.createBasePrivateIdentifierNode(80 /* PrivateIdentifier */);
             node.escapedText = ts.escapeLeadingUnderscores(text);
             node.transformFlags |= 8388608 /* ContainsClassFields */;
             return node;
@@ -21750,45 +22227,47 @@
             return baseFactory.createBaseTokenNode(kind);
         }
         function createToken(token) {
-            ts.Debug.assert(token >= 0 /* FirstToken */ && token <= 157 /* LastToken */, "Invalid token");
+            ts.Debug.assert(token >= 0 /* FirstToken */ && token <= 158 /* LastToken */, "Invalid token");
             ts.Debug.assert(token <= 14 /* FirstTemplateToken */ || token >= 17 /* LastTemplateToken */, "Invalid token. Use 'createTemplateLiteralLikeNode' to create template literals.");
             ts.Debug.assert(token <= 8 /* FirstLiteralToken */ || token >= 14 /* LastLiteralToken */, "Invalid token. Use 'createLiteralLikeNode' to create literals.");
-            ts.Debug.assert(token !== 78 /* Identifier */, "Invalid token. Use 'createIdentifier' to create identifiers");
+            ts.Debug.assert(token !== 79 /* Identifier */, "Invalid token. Use 'createIdentifier' to create identifiers");
             var node = createBaseToken(token);
             var transformFlags = 0 /* None */;
             switch (token) {
-                case 129 /* AsyncKeyword */:
+                case 130 /* AsyncKeyword */:
                     // 'async' modifier is ES2017 (async functions) or ES2018 (async generators)
                     transformFlags =
                         128 /* ContainsES2017 */ |
                             64 /* ContainsES2018 */;
                     break;
-                case 122 /* PublicKeyword */:
-                case 120 /* PrivateKeyword */:
-                case 121 /* ProtectedKeyword */:
-                case 142 /* ReadonlyKeyword */:
-                case 125 /* AbstractKeyword */:
-                case 133 /* DeclareKeyword */:
-                case 84 /* ConstKeyword */:
-                case 128 /* AnyKeyword */:
-                case 144 /* NumberKeyword */:
-                case 155 /* BigIntKeyword */:
-                case 141 /* NeverKeyword */:
-                case 145 /* ObjectKeyword */:
-                case 156 /* OverrideKeyword */:
-                case 147 /* StringKeyword */:
-                case 131 /* BooleanKeyword */:
-                case 148 /* SymbolKeyword */:
-                case 113 /* VoidKeyword */:
-                case 152 /* UnknownKeyword */:
-                case 150 /* UndefinedKeyword */: // `undefined` is an Identifier in the expression case.
+                case 123 /* PublicKeyword */:
+                case 121 /* PrivateKeyword */:
+                case 122 /* ProtectedKeyword */:
+                case 143 /* ReadonlyKeyword */:
+                case 126 /* AbstractKeyword */:
+                case 134 /* DeclareKeyword */:
+                case 85 /* ConstKeyword */:
+                case 129 /* AnyKeyword */:
+                case 145 /* NumberKeyword */:
+                case 156 /* BigIntKeyword */:
+                case 142 /* NeverKeyword */:
+                case 146 /* ObjectKeyword */:
+                case 157 /* OverrideKeyword */:
+                case 148 /* StringKeyword */:
+                case 132 /* BooleanKeyword */:
+                case 149 /* SymbolKeyword */:
+                case 114 /* VoidKeyword */:
+                case 153 /* UnknownKeyword */:
+                case 151 /* UndefinedKeyword */: // `undefined` is an Identifier in the expression case.
                     transformFlags = 1 /* ContainsTypeScript */;
                     break;
-                case 123 /* StaticKeyword */:
-                case 105 /* SuperKeyword */:
+                case 106 /* SuperKeyword */:
+                    transformFlags = 512 /* ContainsES2015 */ | 33554432 /* ContainsLexicalSuper */;
+                    break;
+                case 124 /* StaticKeyword */:
                     transformFlags = 512 /* ContainsES2015 */;
                     break;
-                case 107 /* ThisKeyword */:
+                case 108 /* ThisKeyword */:
                     // 'this' indicates a lexical 'this'
                     transformFlags = 8192 /* ContainsLexicalThis */;
                     break;
@@ -21803,23 +22282,23 @@
         //
         // @api
         function createSuper() {
-            return createToken(105 /* SuperKeyword */);
+            return createToken(106 /* SuperKeyword */);
         }
         // @api
         function createThis() {
-            return createToken(107 /* ThisKeyword */);
+            return createToken(108 /* ThisKeyword */);
         }
         // @api
         function createNull() {
-            return createToken(103 /* NullKeyword */);
+            return createToken(104 /* NullKeyword */);
         }
         // @api
         function createTrue() {
-            return createToken(109 /* TrueKeyword */);
+            return createToken(110 /* TrueKeyword */);
         }
         // @api
         function createFalse() {
-            return createToken(94 /* FalseKeyword */);
+            return createToken(95 /* FalseKeyword */);
         }
         //
         // Modifiers
@@ -21832,40 +22311,40 @@
         function createModifiersFromModifierFlags(flags) {
             var result = [];
             if (flags & 1 /* Export */) {
-                result.push(createModifier(92 /* ExportKeyword */));
+                result.push(createModifier(93 /* ExportKeyword */));
             }
             if (flags & 2 /* Ambient */) {
-                result.push(createModifier(133 /* DeclareKeyword */));
+                result.push(createModifier(134 /* DeclareKeyword */));
             }
             if (flags & 512 /* Default */) {
-                result.push(createModifier(87 /* DefaultKeyword */));
+                result.push(createModifier(88 /* DefaultKeyword */));
             }
             if (flags & 2048 /* Const */) {
-                result.push(createModifier(84 /* ConstKeyword */));
+                result.push(createModifier(85 /* ConstKeyword */));
             }
             if (flags & 4 /* Public */) {
-                result.push(createModifier(122 /* PublicKeyword */));
+                result.push(createModifier(123 /* PublicKeyword */));
             }
             if (flags & 8 /* Private */) {
-                result.push(createModifier(120 /* PrivateKeyword */));
+                result.push(createModifier(121 /* PrivateKeyword */));
             }
             if (flags & 16 /* Protected */) {
-                result.push(createModifier(121 /* ProtectedKeyword */));
+                result.push(createModifier(122 /* ProtectedKeyword */));
             }
             if (flags & 128 /* Abstract */) {
-                result.push(createModifier(125 /* AbstractKeyword */));
+                result.push(createModifier(126 /* AbstractKeyword */));
             }
             if (flags & 32 /* Static */) {
-                result.push(createModifier(123 /* StaticKeyword */));
+                result.push(createModifier(124 /* StaticKeyword */));
             }
             if (flags & 16384 /* Override */) {
-                result.push(createModifier(156 /* OverrideKeyword */));
+                result.push(createModifier(157 /* OverrideKeyword */));
             }
             if (flags & 64 /* Readonly */) {
-                result.push(createModifier(142 /* ReadonlyKeyword */));
+                result.push(createModifier(143 /* ReadonlyKeyword */));
             }
             if (flags & 256 /* Async */) {
-                result.push(createModifier(129 /* AsyncKeyword */));
+                result.push(createModifier(130 /* AsyncKeyword */));
             }
             return result;
         }
@@ -21874,7 +22353,7 @@
         //
         // @api
         function createQualifiedName(left, right) {
-            var node = createBaseNode(158 /* QualifiedName */);
+            var node = createBaseNode(159 /* QualifiedName */);
             node.left = left;
             node.right = asName(right);
             node.transformFlags |=
@@ -21891,7 +22370,7 @@
         }
         // @api
         function createComputedPropertyName(expression) {
-            var node = createBaseNode(159 /* ComputedPropertyName */);
+            var node = createBaseNode(160 /* ComputedPropertyName */);
             node.expression = parenthesizerRules().parenthesizeExpressionOfComputedPropertyName(expression);
             node.transformFlags |=
                 propagateChildFlags(node.expression) |
@@ -21910,7 +22389,7 @@
         //
         // @api
         function createTypeParameterDeclaration(name, constraint, defaultType) {
-            var node = createBaseNamedDeclaration(160 /* TypeParameter */, 
+            var node = createBaseNamedDeclaration(161 /* TypeParameter */, 
             /*decorators*/ undefined, 
             /*modifiers*/ undefined, name);
             node.constraint = constraint;
@@ -21928,7 +22407,7 @@
         }
         // @api
         function createParameterDeclaration(decorators, modifiers, dotDotDotToken, name, questionToken, type, initializer) {
-            var node = createBaseVariableLikeDeclaration(161 /* Parameter */, decorators, modifiers, name, type, initializer && parenthesizerRules().parenthesizeExpressionForDisallowedComma(initializer));
+            var node = createBaseVariableLikeDeclaration(162 /* Parameter */, decorators, modifiers, name, type, initializer && parenthesizerRules().parenthesizeExpressionForDisallowedComma(initializer));
             node.dotDotDotToken = dotDotDotToken;
             node.questionToken = questionToken;
             if (ts.isThisIdentifier(node.name)) {
@@ -21961,7 +22440,7 @@
         }
         // @api
         function createDecorator(expression) {
-            var node = createBaseNode(162 /* Decorator */);
+            var node = createBaseNode(163 /* Decorator */);
             node.expression = parenthesizerRules().parenthesizeLeftSideOfAccess(expression);
             node.transformFlags |=
                 propagateChildFlags(node.expression) |
@@ -21980,7 +22459,7 @@
         //
         // @api
         function createPropertySignature(modifiers, name, questionToken, type) {
-            var node = createBaseNamedDeclaration(163 /* PropertySignature */, 
+            var node = createBaseNamedDeclaration(164 /* PropertySignature */, 
             /*decorators*/ undefined, modifiers, name);
             node.type = type;
             node.questionToken = questionToken;
@@ -21998,7 +22477,7 @@
         }
         // @api
         function createPropertyDeclaration(decorators, modifiers, name, questionOrExclamationToken, type, initializer) {
-            var node = createBaseVariableLikeDeclaration(164 /* PropertyDeclaration */, decorators, modifiers, name, type, initializer);
+            var node = createBaseVariableLikeDeclaration(165 /* PropertyDeclaration */, decorators, modifiers, name, type, initializer);
             node.questionToken = questionOrExclamationToken && ts.isQuestionToken(questionOrExclamationToken) ? questionOrExclamationToken : undefined;
             node.exclamationToken = questionOrExclamationToken && ts.isExclamationToken(questionOrExclamationToken) ? questionOrExclamationToken : undefined;
             node.transformFlags |=
@@ -22027,7 +22506,7 @@
         }
         // @api
         function createMethodSignature(modifiers, name, questionToken, typeParameters, parameters, type) {
-            var node = createBaseSignatureDeclaration(165 /* MethodSignature */, 
+            var node = createBaseSignatureDeclaration(166 /* MethodSignature */, 
             /*decorators*/ undefined, modifiers, name, typeParameters, parameters, type);
             node.questionToken = questionToken;
             node.transformFlags = 1 /* ContainsTypeScript */;
@@ -22046,7 +22525,7 @@
         }
         // @api
         function createMethodDeclaration(decorators, modifiers, asteriskToken, name, questionToken, typeParameters, parameters, type, body) {
-            var node = createBaseFunctionLikeDeclaration(166 /* MethodDeclaration */, decorators, modifiers, name, typeParameters, parameters, type, body);
+            var node = createBaseFunctionLikeDeclaration(167 /* MethodDeclaration */, decorators, modifiers, name, typeParameters, parameters, type, body);
             node.asteriskToken = asteriskToken;
             node.questionToken = questionToken;
             node.transformFlags |=
@@ -22084,8 +22563,25 @@
                 : node;
         }
         // @api
+        function createClassStaticBlockDeclaration(decorators, modifiers, body) {
+            var node = createBaseGenericNamedDeclaration(168 /* ClassStaticBlockDeclaration */, decorators, modifiers, 
+            /*name*/ undefined, 
+            /*typeParameters*/ undefined);
+            node.body = body;
+            node.transformFlags = propagateChildFlags(body) | 8388608 /* ContainsClassFields */;
+            return node;
+        }
+        // @api
+        function updateClassStaticBlockDeclaration(node, decorators, modifiers, body) {
+            return node.decorators !== decorators
+                || node.modifier !== modifiers
+                || node.body !== body
+                ? update(createClassStaticBlockDeclaration(decorators, modifiers, body), node)
+                : node;
+        }
+        // @api
         function createConstructorDeclaration(decorators, modifiers, parameters, body) {
-            var node = createBaseFunctionLikeDeclaration(167 /* Constructor */, decorators, modifiers, 
+            var node = createBaseFunctionLikeDeclaration(169 /* Constructor */, decorators, modifiers, 
             /*name*/ undefined, 
             /*typeParameters*/ undefined, parameters, 
             /*type*/ undefined, body);
@@ -22103,7 +22599,7 @@
         }
         // @api
         function createGetAccessorDeclaration(decorators, modifiers, name, parameters, type, body) {
-            return createBaseFunctionLikeDeclaration(168 /* GetAccessor */, decorators, modifiers, name, 
+            return createBaseFunctionLikeDeclaration(170 /* GetAccessor */, decorators, modifiers, name, 
             /*typeParameters*/ undefined, parameters, type, body);
         }
         // @api
@@ -22119,7 +22615,7 @@
         }
         // @api
         function createSetAccessorDeclaration(decorators, modifiers, name, parameters, body) {
-            return createBaseFunctionLikeDeclaration(169 /* SetAccessor */, decorators, modifiers, name, 
+            return createBaseFunctionLikeDeclaration(171 /* SetAccessor */, decorators, modifiers, name, 
             /*typeParameters*/ undefined, parameters, 
             /*type*/ undefined, body);
         }
@@ -22135,7 +22631,7 @@
         }
         // @api
         function createCallSignature(typeParameters, parameters, type) {
-            var node = createBaseSignatureDeclaration(170 /* CallSignature */, 
+            var node = createBaseSignatureDeclaration(172 /* CallSignature */, 
             /*decorators*/ undefined, 
             /*modifiers*/ undefined, 
             /*name*/ undefined, typeParameters, parameters, type);
@@ -22152,7 +22648,7 @@
         }
         // @api
         function createConstructSignature(typeParameters, parameters, type) {
-            var node = createBaseSignatureDeclaration(171 /* ConstructSignature */, 
+            var node = createBaseSignatureDeclaration(173 /* ConstructSignature */, 
             /*decorators*/ undefined, 
             /*modifiers*/ undefined, 
             /*name*/ undefined, typeParameters, parameters, type);
@@ -22169,7 +22665,7 @@
         }
         // @api
         function createIndexSignature(decorators, modifiers, parameters, type) {
-            var node = createBaseSignatureDeclaration(172 /* IndexSignature */, decorators, modifiers, 
+            var node = createBaseSignatureDeclaration(174 /* IndexSignature */, decorators, modifiers, 
             /*name*/ undefined, 
             /*typeParameters*/ undefined, parameters, type);
             node.transformFlags = 1 /* ContainsTypeScript */;
@@ -22186,7 +22682,7 @@
         }
         // @api
         function createTemplateLiteralTypeSpan(type, literal) {
-            var node = createBaseNode(195 /* TemplateLiteralTypeSpan */);
+            var node = createBaseNode(197 /* TemplateLiteralTypeSpan */);
             node.type = type;
             node.literal = literal;
             node.transformFlags = 1 /* ContainsTypeScript */;
@@ -22208,7 +22704,7 @@
         }
         // @api
         function createTypePredicateNode(assertsModifier, parameterName, type) {
-            var node = createBaseNode(173 /* TypePredicate */);
+            var node = createBaseNode(175 /* TypePredicate */);
             node.assertsModifier = assertsModifier;
             node.parameterName = asName(parameterName);
             node.type = type;
@@ -22225,7 +22721,7 @@
         }
         // @api
         function createTypeReferenceNode(typeName, typeArguments) {
-            var node = createBaseNode(174 /* TypeReference */);
+            var node = createBaseNode(176 /* TypeReference */);
             node.typeName = asName(typeName);
             node.typeArguments = typeArguments && parenthesizerRules().parenthesizeTypeArguments(createNodeArray(typeArguments));
             node.transformFlags = 1 /* ContainsTypeScript */;
@@ -22240,7 +22736,7 @@
         }
         // @api
         function createFunctionTypeNode(typeParameters, parameters, type) {
-            var node = createBaseSignatureDeclaration(175 /* FunctionType */, 
+            var node = createBaseSignatureDeclaration(177 /* FunctionType */, 
             /*decorators*/ undefined, 
             /*modifiers*/ undefined, 
             /*name*/ undefined, typeParameters, parameters, type);
@@ -22266,7 +22762,7 @@
                     ts.Debug.fail("Incorrect number of arguments specified.");
         }
         function createConstructorTypeNode1(modifiers, typeParameters, parameters, type) {
-            var node = createBaseSignatureDeclaration(176 /* ConstructorType */, 
+            var node = createBaseSignatureDeclaration(178 /* ConstructorType */, 
             /*decorators*/ undefined, modifiers, 
             /*name*/ undefined, typeParameters, parameters, type);
             node.transformFlags = 1 /* ContainsTypeScript */;
@@ -22300,7 +22796,7 @@
         }
         // @api
         function createTypeQueryNode(exprName) {
-            var node = createBaseNode(177 /* TypeQuery */);
+            var node = createBaseNode(179 /* TypeQuery */);
             node.exprName = exprName;
             node.transformFlags = 1 /* ContainsTypeScript */;
             return node;
@@ -22313,7 +22809,7 @@
         }
         // @api
         function createTypeLiteralNode(members) {
-            var node = createBaseNode(178 /* TypeLiteral */);
+            var node = createBaseNode(180 /* TypeLiteral */);
             node.members = createNodeArray(members);
             node.transformFlags = 1 /* ContainsTypeScript */;
             return node;
@@ -22326,7 +22822,7 @@
         }
         // @api
         function createArrayTypeNode(elementType) {
-            var node = createBaseNode(179 /* ArrayType */);
+            var node = createBaseNode(181 /* ArrayType */);
             node.elementType = parenthesizerRules().parenthesizeElementTypeOfArrayType(elementType);
             node.transformFlags = 1 /* ContainsTypeScript */;
             return node;
@@ -22339,7 +22835,7 @@
         }
         // @api
         function createTupleTypeNode(elements) {
-            var node = createBaseNode(180 /* TupleType */);
+            var node = createBaseNode(182 /* TupleType */);
             node.elements = createNodeArray(elements);
             node.transformFlags = 1 /* ContainsTypeScript */;
             return node;
@@ -22352,7 +22848,7 @@
         }
         // @api
         function createNamedTupleMember(dotDotDotToken, name, questionToken, type) {
-            var node = createBaseNode(193 /* NamedTupleMember */);
+            var node = createBaseNode(195 /* NamedTupleMember */);
             node.dotDotDotToken = dotDotDotToken;
             node.name = name;
             node.questionToken = questionToken;
@@ -22371,7 +22867,7 @@
         }
         // @api
         function createOptionalTypeNode(type) {
-            var node = createBaseNode(181 /* OptionalType */);
+            var node = createBaseNode(183 /* OptionalType */);
             node.type = parenthesizerRules().parenthesizeElementTypeOfArrayType(type);
             node.transformFlags = 1 /* ContainsTypeScript */;
             return node;
@@ -22384,7 +22880,7 @@
         }
         // @api
         function createRestTypeNode(type) {
-            var node = createBaseNode(182 /* RestType */);
+            var node = createBaseNode(184 /* RestType */);
             node.type = type;
             node.transformFlags = 1 /* ContainsTypeScript */;
             return node;
@@ -22408,7 +22904,7 @@
         }
         // @api
         function createUnionTypeNode(types) {
-            return createUnionOrIntersectionTypeNode(183 /* UnionType */, types);
+            return createUnionOrIntersectionTypeNode(185 /* UnionType */, types);
         }
         // @api
         function updateUnionTypeNode(node, types) {
@@ -22416,7 +22912,7 @@
         }
         // @api
         function createIntersectionTypeNode(types) {
-            return createUnionOrIntersectionTypeNode(184 /* IntersectionType */, types);
+            return createUnionOrIntersectionTypeNode(186 /* IntersectionType */, types);
         }
         // @api
         function updateIntersectionTypeNode(node, types) {
@@ -22424,7 +22920,7 @@
         }
         // @api
         function createConditionalTypeNode(checkType, extendsType, trueType, falseType) {
-            var node = createBaseNode(185 /* ConditionalType */);
+            var node = createBaseNode(187 /* ConditionalType */);
             node.checkType = parenthesizerRules().parenthesizeMemberOfConditionalType(checkType);
             node.extendsType = parenthesizerRules().parenthesizeMemberOfConditionalType(extendsType);
             node.trueType = trueType;
@@ -22443,7 +22939,7 @@
         }
         // @api
         function createInferTypeNode(typeParameter) {
-            var node = createBaseNode(186 /* InferType */);
+            var node = createBaseNode(188 /* InferType */);
             node.typeParameter = typeParameter;
             node.transformFlags = 1 /* ContainsTypeScript */;
             return node;
@@ -22456,7 +22952,7 @@
         }
         // @api
         function createTemplateLiteralType(head, templateSpans) {
-            var node = createBaseNode(194 /* TemplateLiteralType */);
+            var node = createBaseNode(196 /* TemplateLiteralType */);
             node.head = head;
             node.templateSpans = createNodeArray(templateSpans);
             node.transformFlags = 1 /* ContainsTypeScript */;
@@ -22472,7 +22968,7 @@
         // @api
         function createImportTypeNode(argument, qualifier, typeArguments, isTypeOf) {
             if (isTypeOf === void 0) { isTypeOf = false; }
-            var node = createBaseNode(196 /* ImportType */);
+            var node = createBaseNode(198 /* ImportType */);
             node.argument = argument;
             node.qualifier = qualifier;
             node.typeArguments = typeArguments && parenthesizerRules().parenthesizeTypeArguments(typeArguments);
@@ -22492,7 +22988,7 @@
         }
         // @api
         function createParenthesizedType(type) {
-            var node = createBaseNode(187 /* ParenthesizedType */);
+            var node = createBaseNode(189 /* ParenthesizedType */);
             node.type = type;
             node.transformFlags = 1 /* ContainsTypeScript */;
             return node;
@@ -22505,13 +23001,13 @@
         }
         // @api
         function createThisTypeNode() {
-            var node = createBaseNode(188 /* ThisType */);
+            var node = createBaseNode(190 /* ThisType */);
             node.transformFlags = 1 /* ContainsTypeScript */;
             return node;
         }
         // @api
         function createTypeOperatorNode(operator, type) {
-            var node = createBaseNode(189 /* TypeOperator */);
+            var node = createBaseNode(191 /* TypeOperator */);
             node.operator = operator;
             node.type = parenthesizerRules().parenthesizeMemberOfElementType(type);
             node.transformFlags = 1 /* ContainsTypeScript */;
@@ -22525,7 +23021,7 @@
         }
         // @api
         function createIndexedAccessTypeNode(objectType, indexType) {
-            var node = createBaseNode(190 /* IndexedAccessType */);
+            var node = createBaseNode(192 /* IndexedAccessType */);
             node.objectType = parenthesizerRules().parenthesizeMemberOfElementType(objectType);
             node.indexType = indexType;
             node.transformFlags = 1 /* ContainsTypeScript */;
@@ -22540,7 +23036,7 @@
         }
         // @api
         function createMappedTypeNode(readonlyToken, typeParameter, nameType, questionToken, type) {
-            var node = createBaseNode(191 /* MappedType */);
+            var node = createBaseNode(193 /* MappedType */);
             node.readonlyToken = readonlyToken;
             node.typeParameter = typeParameter;
             node.nameType = nameType;
@@ -22561,7 +23057,7 @@
         }
         // @api
         function createLiteralTypeNode(literal) {
-            var node = createBaseNode(192 /* LiteralType */);
+            var node = createBaseNode(194 /* LiteralType */);
             node.literal = literal;
             node.transformFlags = 1 /* ContainsTypeScript */;
             return node;
@@ -22577,7 +23073,7 @@
         //
         // @api
         function createObjectBindingPattern(elements) {
-            var node = createBaseNode(197 /* ObjectBindingPattern */);
+            var node = createBaseNode(199 /* ObjectBindingPattern */);
             node.elements = createNodeArray(elements);
             node.transformFlags |=
                 propagateChildrenFlags(node.elements) |
@@ -22598,7 +23094,7 @@
         }
         // @api
         function createArrayBindingPattern(elements) {
-            var node = createBaseNode(198 /* ArrayBindingPattern */);
+            var node = createBaseNode(200 /* ArrayBindingPattern */);
             node.elements = createNodeArray(elements);
             node.transformFlags |=
                 propagateChildrenFlags(node.elements) |
@@ -22614,7 +23110,7 @@
         }
         // @api
         function createBindingElement(dotDotDotToken, propertyName, name, initializer) {
-            var node = createBaseBindingLikeDeclaration(199 /* BindingElement */, 
+            var node = createBaseBindingLikeDeclaration(201 /* BindingElement */, 
             /*decorators*/ undefined, 
             /*modifiers*/ undefined, name, initializer && parenthesizerRules().parenthesizeExpressionForDisallowedComma(initializer));
             node.propertyName = asName(propertyName);
@@ -22650,8 +23146,13 @@
         }
         // @api
         function createArrayLiteralExpression(elements, multiLine) {
-            var node = createBaseExpression(200 /* ArrayLiteralExpression */);
-            node.elements = parenthesizerRules().parenthesizeExpressionsOfCommaDelimitedList(createNodeArray(elements));
+            var node = createBaseExpression(202 /* ArrayLiteralExpression */);
+            // Ensure we add a trailing comma for something like `[NumericLiteral(1), NumericLiteral(2), OmittedExpresion]` so that
+            // we end up with `[1, 2, ,]` instead of `[1, 2, ]` otherwise the `OmittedExpression` will just end up being treated like
+            // a trailing comma.
+            var lastElement = elements && ts.lastOrUndefined(elements);
+            var elementsArray = createNodeArray(elements, lastElement && ts.isOmittedExpression(lastElement) ? true : undefined);
+            node.elements = parenthesizerRules().parenthesizeExpressionsOfCommaDelimitedList(elementsArray);
             node.multiLine = multiLine;
             node.transformFlags |= propagateChildrenFlags(node.elements);
             return node;
@@ -22664,7 +23165,7 @@
         }
         // @api
         function createObjectLiteralExpression(properties, multiLine) {
-            var node = createBaseExpression(201 /* ObjectLiteralExpression */);
+            var node = createBaseExpression(203 /* ObjectLiteralExpression */);
             node.properties = createNodeArray(properties);
             node.multiLine = multiLine;
             node.transformFlags |= propagateChildrenFlags(node.properties);
@@ -22678,7 +23179,7 @@
         }
         // @api
         function createPropertyAccessExpression(expression, name) {
-            var node = createBaseExpression(202 /* PropertyAccessExpression */);
+            var node = createBaseExpression(204 /* PropertyAccessExpression */);
             node.expression = parenthesizerRules().parenthesizeLeftSideOfAccess(expression);
             node.name = asName(name);
             node.transformFlags =
@@ -22707,7 +23208,7 @@
         }
         // @api
         function createPropertyAccessChain(expression, questionDotToken, name) {
-            var node = createBaseExpression(202 /* PropertyAccessExpression */);
+            var node = createBaseExpression(204 /* PropertyAccessExpression */);
             node.flags |= 32 /* OptionalChain */;
             node.expression = parenthesizerRules().parenthesizeLeftSideOfAccess(expression);
             node.questionDotToken = questionDotToken;
@@ -22734,7 +23235,7 @@
         }
         // @api
         function createElementAccessExpression(expression, index) {
-            var node = createBaseExpression(203 /* ElementAccessExpression */);
+            var node = createBaseExpression(205 /* ElementAccessExpression */);
             node.expression = parenthesizerRules().parenthesizeLeftSideOfAccess(expression);
             node.argumentExpression = asExpression(index);
             node.transformFlags |=
@@ -22761,7 +23262,7 @@
         }
         // @api
         function createElementAccessChain(expression, questionDotToken, index) {
-            var node = createBaseExpression(203 /* ElementAccessExpression */);
+            var node = createBaseExpression(205 /* ElementAccessExpression */);
             node.flags |= 32 /* OptionalChain */;
             node.expression = parenthesizerRules().parenthesizeLeftSideOfAccess(expression);
             node.questionDotToken = questionDotToken;
@@ -22786,7 +23287,7 @@
         }
         // @api
         function createCallExpression(expression, typeArguments, argumentsArray) {
-            var node = createBaseExpression(204 /* CallExpression */);
+            var node = createBaseExpression(206 /* CallExpression */);
             node.expression = parenthesizerRules().parenthesizeLeftSideOfAccess(expression);
             node.typeArguments = asNodeArray(typeArguments);
             node.arguments = parenthesizerRules().parenthesizeExpressionsOfCommaDelimitedList(createNodeArray(argumentsArray));
@@ -22818,7 +23319,7 @@
         }
         // @api
         function createCallChain(expression, questionDotToken, typeArguments, argumentsArray) {
-            var node = createBaseExpression(204 /* CallExpression */);
+            var node = createBaseExpression(206 /* CallExpression */);
             node.flags |= 32 /* OptionalChain */;
             node.expression = parenthesizerRules().parenthesizeLeftSideOfAccess(expression);
             node.questionDotToken = questionDotToken;
@@ -22850,7 +23351,7 @@
         }
         // @api
         function createNewExpression(expression, typeArguments, argumentsArray) {
-            var node = createBaseExpression(205 /* NewExpression */);
+            var node = createBaseExpression(207 /* NewExpression */);
             node.expression = parenthesizerRules().parenthesizeExpressionOfNew(expression);
             node.typeArguments = asNodeArray(typeArguments);
             node.arguments = argumentsArray ? parenthesizerRules().parenthesizeExpressionsOfCommaDelimitedList(argumentsArray) : undefined;
@@ -22874,7 +23375,7 @@
         }
         // @api
         function createTaggedTemplateExpression(tag, typeArguments, template) {
-            var node = createBaseExpression(206 /* TaggedTemplateExpression */);
+            var node = createBaseExpression(208 /* TaggedTemplateExpression */);
             node.tag = parenthesizerRules().parenthesizeLeftSideOfAccess(tag);
             node.typeArguments = asNodeArray(typeArguments);
             node.template = template;
@@ -22901,7 +23402,7 @@
         }
         // @api
         function createTypeAssertion(type, expression) {
-            var node = createBaseExpression(207 /* TypeAssertionExpression */);
+            var node = createBaseExpression(209 /* TypeAssertionExpression */);
             node.expression = parenthesizerRules().parenthesizeOperandOfPrefixUnary(expression);
             node.type = type;
             node.transformFlags |=
@@ -22919,7 +23420,7 @@
         }
         // @api
         function createParenthesizedExpression(expression) {
-            var node = createBaseExpression(208 /* ParenthesizedExpression */);
+            var node = createBaseExpression(210 /* ParenthesizedExpression */);
             node.expression = expression;
             node.transformFlags = propagateChildFlags(node.expression);
             return node;
@@ -22932,7 +23433,7 @@
         }
         // @api
         function createFunctionExpression(modifiers, asteriskToken, name, typeParameters, parameters, type, body) {
-            var node = createBaseFunctionLikeDeclaration(209 /* FunctionExpression */, 
+            var node = createBaseFunctionLikeDeclaration(211 /* FunctionExpression */, 
             /*decorators*/ undefined, modifiers, name, typeParameters, parameters, type, body);
             node.asteriskToken = asteriskToken;
             node.transformFlags |= propagateChildFlags(node.asteriskToken);
@@ -22966,7 +23467,7 @@
         }
         // @api
         function createArrowFunction(modifiers, typeParameters, parameters, type, equalsGreaterThanToken, body) {
-            var node = createBaseFunctionLikeDeclaration(210 /* ArrowFunction */, 
+            var node = createBaseFunctionLikeDeclaration(212 /* ArrowFunction */, 
             /*decorators*/ undefined, modifiers, 
             /*name*/ undefined, typeParameters, parameters, type, parenthesizerRules().parenthesizeConciseBodyOfArrowFunction(body));
             node.equalsGreaterThanToken = equalsGreaterThanToken !== null && equalsGreaterThanToken !== void 0 ? equalsGreaterThanToken : createToken(38 /* EqualsGreaterThanToken */);
@@ -22974,7 +23475,7 @@
                 propagateChildFlags(node.equalsGreaterThanToken) |
                     512 /* ContainsES2015 */;
             if (ts.modifiersToFlags(node.modifiers) & 256 /* Async */) {
-                node.transformFlags |= 128 /* ContainsES2017 */;
+                node.transformFlags |= 128 /* ContainsES2017 */ | 8192 /* ContainsLexicalThis */;
             }
             return node;
         }
@@ -22991,7 +23492,7 @@
         }
         // @api
         function createDeleteExpression(expression) {
-            var node = createBaseExpression(211 /* DeleteExpression */);
+            var node = createBaseExpression(213 /* DeleteExpression */);
             node.expression = parenthesizerRules().parenthesizeOperandOfPrefixUnary(expression);
             node.transformFlags |= propagateChildFlags(node.expression);
             return node;
@@ -23004,7 +23505,7 @@
         }
         // @api
         function createTypeOfExpression(expression) {
-            var node = createBaseExpression(212 /* TypeOfExpression */);
+            var node = createBaseExpression(214 /* TypeOfExpression */);
             node.expression = parenthesizerRules().parenthesizeOperandOfPrefixUnary(expression);
             node.transformFlags |= propagateChildFlags(node.expression);
             return node;
@@ -23017,7 +23518,7 @@
         }
         // @api
         function createVoidExpression(expression) {
-            var node = createBaseExpression(213 /* VoidExpression */);
+            var node = createBaseExpression(215 /* VoidExpression */);
             node.expression = parenthesizerRules().parenthesizeOperandOfPrefixUnary(expression);
             node.transformFlags |= propagateChildFlags(node.expression);
             return node;
@@ -23030,7 +23531,7 @@
         }
         // @api
         function createAwaitExpression(expression) {
-            var node = createBaseExpression(214 /* AwaitExpression */);
+            var node = createBaseExpression(216 /* AwaitExpression */);
             node.expression = parenthesizerRules().parenthesizeOperandOfPrefixUnary(expression);
             node.transformFlags |=
                 propagateChildFlags(node.expression) |
@@ -23047,10 +23548,18 @@
         }
         // @api
         function createPrefixUnaryExpression(operator, operand) {
-            var node = createBaseExpression(215 /* PrefixUnaryExpression */);
+            var node = createBaseExpression(217 /* PrefixUnaryExpression */);
             node.operator = operator;
             node.operand = parenthesizerRules().parenthesizeOperandOfPrefixUnary(operand);
             node.transformFlags |= propagateChildFlags(node.operand);
+            // Only set this flag for non-generated identifiers and non-"local" names. See the
+            // comment in `visitPreOrPostfixUnaryExpression` in module.ts
+            if ((operator === 45 /* PlusPlusToken */ || operator === 46 /* MinusMinusToken */) &&
+                ts.isIdentifier(node.operand) &&
+                !ts.isGeneratedIdentifier(node.operand) &&
+                !ts.isLocalName(node.operand)) {
+                node.transformFlags |= 67108864 /* ContainsUpdateExpressionForIdentifier */;
+            }
             return node;
         }
         // @api
@@ -23061,10 +23570,17 @@
         }
         // @api
         function createPostfixUnaryExpression(operand, operator) {
-            var node = createBaseExpression(216 /* PostfixUnaryExpression */);
+            var node = createBaseExpression(218 /* PostfixUnaryExpression */);
             node.operator = operator;
             node.operand = parenthesizerRules().parenthesizeOperandOfPostfixUnary(operand);
-            node.transformFlags = propagateChildFlags(node.operand);
+            node.transformFlags |= propagateChildFlags(node.operand);
+            // Only set this flag for non-generated identifiers and non-"local" names. See the
+            // comment in `visitPreOrPostfixUnaryExpression` in module.ts
+            if (ts.isIdentifier(node.operand) &&
+                !ts.isGeneratedIdentifier(node.operand) &&
+                !ts.isLocalName(node.operand)) {
+                node.transformFlags |= 67108864 /* ContainsUpdateExpressionForIdentifier */;
+            }
             return node;
         }
         // @api
@@ -23075,7 +23591,7 @@
         }
         // @api
         function createBinaryExpression(left, operator, right) {
-            var node = createBaseExpression(217 /* BinaryExpression */);
+            var node = createBaseExpression(219 /* BinaryExpression */);
             var operatorToken = asToken(operator);
             var operatorKind = operatorToken.kind;
             node.left = parenthesizerRules().parenthesizeLeftSideOfBinary(operatorKind, left);
@@ -23088,7 +23604,7 @@
             if (operatorKind === 60 /* QuestionQuestionToken */) {
                 node.transformFlags |= 16 /* ContainsES2020 */;
             }
-            else if (operatorKind === 62 /* EqualsToken */) {
+            else if (operatorKind === 63 /* EqualsToken */) {
                 if (ts.isObjectLiteralExpression(node.left)) {
                     node.transformFlags |=
                         512 /* ContainsES2015 */ |
@@ -23103,7 +23619,7 @@
                             propagateAssignmentPatternFlags(node.left);
                 }
             }
-            else if (operatorKind === 42 /* AsteriskAsteriskToken */ || operatorKind === 66 /* AsteriskAsteriskEqualsToken */) {
+            else if (operatorKind === 42 /* AsteriskAsteriskToken */ || operatorKind === 67 /* AsteriskAsteriskEqualsToken */) {
                 node.transformFlags |= 256 /* ContainsES2016 */;
             }
             else if (ts.isLogicalOrCoalescingAssignmentOperator(operatorKind)) {
@@ -23144,7 +23660,7 @@
         }
         // @api
         function createConditionalExpression(condition, questionToken, whenTrue, colonToken, whenFalse) {
-            var node = createBaseExpression(218 /* ConditionalExpression */);
+            var node = createBaseExpression(220 /* ConditionalExpression */);
             node.condition = parenthesizerRules().parenthesizeConditionOfConditionalExpression(condition);
             node.questionToken = questionToken !== null && questionToken !== void 0 ? questionToken : createToken(57 /* QuestionToken */);
             node.whenTrue = parenthesizerRules().parenthesizeBranchOfConditionalExpression(whenTrue);
@@ -23170,7 +23686,7 @@
         }
         // @api
         function createTemplateExpression(head, templateSpans) {
-            var node = createBaseExpression(219 /* TemplateExpression */);
+            var node = createBaseExpression(221 /* TemplateExpression */);
             node.head = head;
             node.templateSpans = createNodeArray(templateSpans);
             node.transformFlags |=
@@ -23240,7 +23756,7 @@
         // @api
         function createYieldExpression(asteriskToken, expression) {
             ts.Debug.assert(!asteriskToken || !!expression, "A `YieldExpression` with an asteriskToken must have an expression.");
-            var node = createBaseExpression(220 /* YieldExpression */);
+            var node = createBaseExpression(222 /* YieldExpression */);
             node.expression = expression && parenthesizerRules().parenthesizeExpressionForDisallowedComma(expression);
             node.asteriskToken = asteriskToken;
             node.transformFlags |=
@@ -23260,7 +23776,7 @@
         }
         // @api
         function createSpreadElement(expression) {
-            var node = createBaseExpression(221 /* SpreadElement */);
+            var node = createBaseExpression(223 /* SpreadElement */);
             node.expression = parenthesizerRules().parenthesizeExpressionForDisallowedComma(expression);
             node.transformFlags |=
                 propagateChildFlags(node.expression) |
@@ -23276,7 +23792,7 @@
         }
         // @api
         function createClassExpression(decorators, modifiers, name, typeParameters, heritageClauses, members) {
-            var node = createBaseClassLikeDeclaration(222 /* ClassExpression */, decorators, modifiers, name, typeParameters, heritageClauses, members);
+            var node = createBaseClassLikeDeclaration(224 /* ClassExpression */, decorators, modifiers, name, typeParameters, heritageClauses, members);
             node.transformFlags |= 512 /* ContainsES2015 */;
             return node;
         }
@@ -23293,11 +23809,11 @@
         }
         // @api
         function createOmittedExpression() {
-            return createBaseExpression(223 /* OmittedExpression */);
+            return createBaseExpression(225 /* OmittedExpression */);
         }
         // @api
         function createExpressionWithTypeArguments(expression, typeArguments) {
-            var node = createBaseNode(224 /* ExpressionWithTypeArguments */);
+            var node = createBaseNode(226 /* ExpressionWithTypeArguments */);
             node.expression = parenthesizerRules().parenthesizeLeftSideOfAccess(expression);
             node.typeArguments = typeArguments && parenthesizerRules().parenthesizeTypeArguments(typeArguments);
             node.transformFlags |=
@@ -23315,7 +23831,7 @@
         }
         // @api
         function createAsExpression(expression, type) {
-            var node = createBaseExpression(225 /* AsExpression */);
+            var node = createBaseExpression(227 /* AsExpression */);
             node.expression = expression;
             node.type = type;
             node.transformFlags |=
@@ -23333,7 +23849,7 @@
         }
         // @api
         function createNonNullExpression(expression) {
-            var node = createBaseExpression(226 /* NonNullExpression */);
+            var node = createBaseExpression(228 /* NonNullExpression */);
             node.expression = parenthesizerRules().parenthesizeLeftSideOfAccess(expression);
             node.transformFlags |=
                 propagateChildFlags(node.expression) |
@@ -23351,7 +23867,7 @@
         }
         // @api
         function createNonNullChain(expression) {
-            var node = createBaseExpression(226 /* NonNullExpression */);
+            var node = createBaseExpression(228 /* NonNullExpression */);
             node.flags |= 32 /* OptionalChain */;
             node.expression = parenthesizerRules().parenthesizeLeftSideOfAccess(expression);
             node.transformFlags |=
@@ -23368,15 +23884,15 @@
         }
         // @api
         function createMetaProperty(keywordToken, name) {
-            var node = createBaseExpression(227 /* MetaProperty */);
+            var node = createBaseExpression(229 /* MetaProperty */);
             node.keywordToken = keywordToken;
             node.name = name;
             node.transformFlags |= propagateChildFlags(node.name);
             switch (keywordToken) {
-                case 102 /* NewKeyword */:
+                case 103 /* NewKeyword */:
                     node.transformFlags |= 512 /* ContainsES2015 */;
                     break;
-                case 99 /* ImportKeyword */:
+                case 100 /* ImportKeyword */:
                     node.transformFlags |= 4 /* ContainsESNext */;
                     break;
                 default:
@@ -23395,7 +23911,7 @@
         //
         // @api
         function createTemplateSpan(expression, literal) {
-            var node = createBaseNode(229 /* TemplateSpan */);
+            var node = createBaseNode(231 /* TemplateSpan */);
             node.expression = expression;
             node.literal = literal;
             node.transformFlags |=
@@ -23413,7 +23929,7 @@
         }
         // @api
         function createSemicolonClassElement() {
-            var node = createBaseNode(230 /* SemicolonClassElement */);
+            var node = createBaseNode(232 /* SemicolonClassElement */);
             node.transformFlags |= 512 /* ContainsES2015 */;
             return node;
         }
@@ -23422,7 +23938,7 @@
         //
         // @api
         function createBlock(statements, multiLine) {
-            var node = createBaseNode(231 /* Block */);
+            var node = createBaseNode(233 /* Block */);
             node.statements = createNodeArray(statements);
             node.multiLine = multiLine;
             node.transformFlags |= propagateChildrenFlags(node.statements);
@@ -23436,7 +23952,7 @@
         }
         // @api
         function createVariableStatement(modifiers, declarationList) {
-            var node = createBaseDeclaration(233 /* VariableStatement */, /*decorators*/ undefined, modifiers);
+            var node = createBaseDeclaration(235 /* VariableStatement */, /*decorators*/ undefined, modifiers);
             node.declarationList = ts.isArray(declarationList) ? createVariableDeclarationList(declarationList) : declarationList;
             node.transformFlags |=
                 propagateChildFlags(node.declarationList);
@@ -23454,11 +23970,11 @@
         }
         // @api
         function createEmptyStatement() {
-            return createBaseNode(232 /* EmptyStatement */);
+            return createBaseNode(234 /* EmptyStatement */);
         }
         // @api
         function createExpressionStatement(expression) {
-            var node = createBaseNode(234 /* ExpressionStatement */);
+            var node = createBaseNode(236 /* ExpressionStatement */);
             node.expression = parenthesizerRules().parenthesizeExpressionOfExpressionStatement(expression);
             node.transformFlags |= propagateChildFlags(node.expression);
             return node;
@@ -23471,7 +23987,7 @@
         }
         // @api
         function createIfStatement(expression, thenStatement, elseStatement) {
-            var node = createBaseNode(235 /* IfStatement */);
+            var node = createBaseNode(237 /* IfStatement */);
             node.expression = expression;
             node.thenStatement = asEmbeddedStatement(thenStatement);
             node.elseStatement = asEmbeddedStatement(elseStatement);
@@ -23491,7 +24007,7 @@
         }
         // @api
         function createDoStatement(statement, expression) {
-            var node = createBaseNode(236 /* DoStatement */);
+            var node = createBaseNode(238 /* DoStatement */);
             node.statement = asEmbeddedStatement(statement);
             node.expression = expression;
             node.transformFlags |=
@@ -23508,7 +24024,7 @@
         }
         // @api
         function createWhileStatement(expression, statement) {
-            var node = createBaseNode(237 /* WhileStatement */);
+            var node = createBaseNode(239 /* WhileStatement */);
             node.expression = expression;
             node.statement = asEmbeddedStatement(statement);
             node.transformFlags |=
@@ -23525,7 +24041,7 @@
         }
         // @api
         function createForStatement(initializer, condition, incrementor, statement) {
-            var node = createBaseNode(238 /* ForStatement */);
+            var node = createBaseNode(240 /* ForStatement */);
             node.initializer = initializer;
             node.condition = condition;
             node.incrementor = incrementor;
@@ -23548,7 +24064,7 @@
         }
         // @api
         function createForInStatement(initializer, expression, statement) {
-            var node = createBaseNode(239 /* ForInStatement */);
+            var node = createBaseNode(241 /* ForInStatement */);
             node.initializer = initializer;
             node.expression = expression;
             node.statement = asEmbeddedStatement(statement);
@@ -23568,7 +24084,7 @@
         }
         // @api
         function createForOfStatement(awaitModifier, initializer, expression, statement) {
-            var node = createBaseNode(240 /* ForOfStatement */);
+            var node = createBaseNode(242 /* ForOfStatement */);
             node.awaitModifier = awaitModifier;
             node.initializer = initializer;
             node.expression = parenthesizerRules().parenthesizeExpressionForDisallowedComma(expression);
@@ -23594,7 +24110,7 @@
         }
         // @api
         function createContinueStatement(label) {
-            var node = createBaseNode(241 /* ContinueStatement */);
+            var node = createBaseNode(243 /* ContinueStatement */);
             node.label = asName(label);
             node.transformFlags |=
                 propagateChildFlags(node.label) |
@@ -23609,7 +24125,7 @@
         }
         // @api
         function createBreakStatement(label) {
-            var node = createBaseNode(242 /* BreakStatement */);
+            var node = createBaseNode(244 /* BreakStatement */);
             node.label = asName(label);
             node.transformFlags |=
                 propagateChildFlags(node.label) |
@@ -23624,7 +24140,7 @@
         }
         // @api
         function createReturnStatement(expression) {
-            var node = createBaseNode(243 /* ReturnStatement */);
+            var node = createBaseNode(245 /* ReturnStatement */);
             node.expression = expression;
             // return in an ES2018 async generator must be awaited
             node.transformFlags |=
@@ -23641,7 +24157,7 @@
         }
         // @api
         function createWithStatement(expression, statement) {
-            var node = createBaseNode(244 /* WithStatement */);
+            var node = createBaseNode(246 /* WithStatement */);
             node.expression = expression;
             node.statement = asEmbeddedStatement(statement);
             node.transformFlags |=
@@ -23658,7 +24174,7 @@
         }
         // @api
         function createSwitchStatement(expression, caseBlock) {
-            var node = createBaseNode(245 /* SwitchStatement */);
+            var node = createBaseNode(247 /* SwitchStatement */);
             node.expression = parenthesizerRules().parenthesizeExpressionForDisallowedComma(expression);
             node.caseBlock = caseBlock;
             node.transformFlags |=
@@ -23675,7 +24191,7 @@
         }
         // @api
         function createLabeledStatement(label, statement) {
-            var node = createBaseNode(246 /* LabeledStatement */);
+            var node = createBaseNode(248 /* LabeledStatement */);
             node.label = asName(label);
             node.statement = asEmbeddedStatement(statement);
             node.transformFlags |=
@@ -23692,7 +24208,7 @@
         }
         // @api
         function createThrowStatement(expression) {
-            var node = createBaseNode(247 /* ThrowStatement */);
+            var node = createBaseNode(249 /* ThrowStatement */);
             node.expression = expression;
             node.transformFlags |= propagateChildFlags(node.expression);
             return node;
@@ -23705,7 +24221,7 @@
         }
         // @api
         function createTryStatement(tryBlock, catchClause, finallyBlock) {
-            var node = createBaseNode(248 /* TryStatement */);
+            var node = createBaseNode(250 /* TryStatement */);
             node.tryBlock = tryBlock;
             node.catchClause = catchClause;
             node.finallyBlock = finallyBlock;
@@ -23725,11 +24241,11 @@
         }
         // @api
         function createDebuggerStatement() {
-            return createBaseNode(249 /* DebuggerStatement */);
+            return createBaseNode(251 /* DebuggerStatement */);
         }
         // @api
         function createVariableDeclaration(name, exclamationToken, type, initializer) {
-            var node = createBaseVariableLikeDeclaration(250 /* VariableDeclaration */, 
+            var node = createBaseVariableLikeDeclaration(252 /* VariableDeclaration */, 
             /*decorators*/ undefined, 
             /*modifiers*/ undefined, name, type, initializer && parenthesizerRules().parenthesizeExpressionForDisallowedComma(initializer));
             node.exclamationToken = exclamationToken;
@@ -23751,7 +24267,7 @@
         // @api
         function createVariableDeclarationList(declarations, flags) {
             if (flags === void 0) { flags = 0 /* None */; }
-            var node = createBaseNode(251 /* VariableDeclarationList */);
+            var node = createBaseNode(253 /* VariableDeclarationList */);
             node.flags |= flags & 3 /* BlockScoped */;
             node.declarations = createNodeArray(declarations);
             node.transformFlags |=
@@ -23772,7 +24288,7 @@
         }
         // @api
         function createFunctionDeclaration(decorators, modifiers, asteriskToken, name, typeParameters, parameters, type, body) {
-            var node = createBaseFunctionLikeDeclaration(252 /* FunctionDeclaration */, decorators, modifiers, name, typeParameters, parameters, type, body);
+            var node = createBaseFunctionLikeDeclaration(254 /* FunctionDeclaration */, decorators, modifiers, name, typeParameters, parameters, type, body);
             node.asteriskToken = asteriskToken;
             if (!node.body || ts.modifiersToFlags(node.modifiers) & 2 /* Ambient */) {
                 node.transformFlags = 1 /* ContainsTypeScript */;
@@ -23810,7 +24326,7 @@
         }
         // @api
         function createClassDeclaration(decorators, modifiers, name, typeParameters, heritageClauses, members) {
-            var node = createBaseClassLikeDeclaration(253 /* ClassDeclaration */, decorators, modifiers, name, typeParameters, heritageClauses, members);
+            var node = createBaseClassLikeDeclaration(255 /* ClassDeclaration */, decorators, modifiers, name, typeParameters, heritageClauses, members);
             if (ts.modifiersToFlags(node.modifiers) & 2 /* Ambient */) {
                 node.transformFlags = 1 /* ContainsTypeScript */;
             }
@@ -23835,7 +24351,7 @@
         }
         // @api
         function createInterfaceDeclaration(decorators, modifiers, name, typeParameters, heritageClauses, members) {
-            var node = createBaseInterfaceOrClassLikeDeclaration(254 /* InterfaceDeclaration */, decorators, modifiers, name, typeParameters, heritageClauses);
+            var node = createBaseInterfaceOrClassLikeDeclaration(256 /* InterfaceDeclaration */, decorators, modifiers, name, typeParameters, heritageClauses);
             node.members = createNodeArray(members);
             node.transformFlags = 1 /* ContainsTypeScript */;
             return node;
@@ -23853,7 +24369,7 @@
         }
         // @api
         function createTypeAliasDeclaration(decorators, modifiers, name, typeParameters, type) {
-            var node = createBaseGenericNamedDeclaration(255 /* TypeAliasDeclaration */, decorators, modifiers, name, typeParameters);
+            var node = createBaseGenericNamedDeclaration(257 /* TypeAliasDeclaration */, decorators, modifiers, name, typeParameters);
             node.type = type;
             node.transformFlags = 1 /* ContainsTypeScript */;
             return node;
@@ -23870,7 +24386,7 @@
         }
         // @api
         function createEnumDeclaration(decorators, modifiers, name, members) {
-            var node = createBaseNamedDeclaration(256 /* EnumDeclaration */, decorators, modifiers, name);
+            var node = createBaseNamedDeclaration(258 /* EnumDeclaration */, decorators, modifiers, name);
             node.members = createNodeArray(members);
             node.transformFlags |=
                 propagateChildrenFlags(node.members) |
@@ -23890,7 +24406,7 @@
         // @api
         function createModuleDeclaration(decorators, modifiers, name, body, flags) {
             if (flags === void 0) { flags = 0 /* None */; }
-            var node = createBaseDeclaration(257 /* ModuleDeclaration */, decorators, modifiers);
+            var node = createBaseDeclaration(259 /* ModuleDeclaration */, decorators, modifiers);
             node.flags |= flags & (16 /* Namespace */ | 4 /* NestedNamespace */ | 1024 /* GlobalAugmentation */);
             node.name = name;
             node.body = body;
@@ -23917,7 +24433,7 @@
         }
         // @api
         function createModuleBlock(statements) {
-            var node = createBaseNode(258 /* ModuleBlock */);
+            var node = createBaseNode(260 /* ModuleBlock */);
             node.statements = createNodeArray(statements);
             node.transformFlags |= propagateChildrenFlags(node.statements);
             return node;
@@ -23930,7 +24446,7 @@
         }
         // @api
         function createCaseBlock(clauses) {
-            var node = createBaseNode(259 /* CaseBlock */);
+            var node = createBaseNode(261 /* CaseBlock */);
             node.clauses = createNodeArray(clauses);
             node.transformFlags |= propagateChildrenFlags(node.clauses);
             return node;
@@ -23943,7 +24459,7 @@
         }
         // @api
         function createNamespaceExportDeclaration(name) {
-            var node = createBaseNamedDeclaration(260 /* NamespaceExportDeclaration */, 
+            var node = createBaseNamedDeclaration(262 /* NamespaceExportDeclaration */, 
             /*decorators*/ undefined, 
             /*modifiers*/ undefined, name);
             node.transformFlags = 1 /* ContainsTypeScript */;
@@ -23957,7 +24473,7 @@
         }
         // @api
         function createImportEqualsDeclaration(decorators, modifiers, isTypeOnly, name, moduleReference) {
-            var node = createBaseNamedDeclaration(261 /* ImportEqualsDeclaration */, decorators, modifiers, name);
+            var node = createBaseNamedDeclaration(263 /* ImportEqualsDeclaration */, decorators, modifiers, name);
             node.isTypeOnly = isTypeOnly;
             node.moduleReference = moduleReference;
             node.transformFlags |= propagateChildFlags(node.moduleReference);
@@ -23978,7 +24494,7 @@
         }
         // @api
         function createImportDeclaration(decorators, modifiers, importClause, moduleSpecifier) {
-            var node = createBaseDeclaration(262 /* ImportDeclaration */, decorators, modifiers);
+            var node = createBaseDeclaration(264 /* ImportDeclaration */, decorators, modifiers);
             node.importClause = importClause;
             node.moduleSpecifier = moduleSpecifier;
             node.transformFlags |=
@@ -23998,7 +24514,7 @@
         }
         // @api
         function createImportClause(isTypeOnly, name, namedBindings) {
-            var node = createBaseNode(263 /* ImportClause */);
+            var node = createBaseNode(265 /* ImportClause */);
             node.isTypeOnly = isTypeOnly;
             node.name = name;
             node.namedBindings = namedBindings;
@@ -24021,7 +24537,7 @@
         }
         // @api
         function createNamespaceImport(name) {
-            var node = createBaseNode(264 /* NamespaceImport */);
+            var node = createBaseNode(266 /* NamespaceImport */);
             node.name = name;
             node.transformFlags |= propagateChildFlags(node.name);
             node.transformFlags &= ~16777216 /* ContainsPossibleTopLevelAwait */; // always parsed in an Await context
@@ -24035,7 +24551,7 @@
         }
         // @api
         function createNamespaceExport(name) {
-            var node = createBaseNode(270 /* NamespaceExport */);
+            var node = createBaseNode(272 /* NamespaceExport */);
             node.name = name;
             node.transformFlags |=
                 propagateChildFlags(node.name) |
@@ -24051,7 +24567,7 @@
         }
         // @api
         function createNamedImports(elements) {
-            var node = createBaseNode(265 /* NamedImports */);
+            var node = createBaseNode(267 /* NamedImports */);
             node.elements = createNodeArray(elements);
             node.transformFlags |= propagateChildrenFlags(node.elements);
             node.transformFlags &= ~16777216 /* ContainsPossibleTopLevelAwait */; // always parsed in an Await context
@@ -24065,7 +24581,7 @@
         }
         // @api
         function createImportSpecifier(propertyName, name) {
-            var node = createBaseNode(266 /* ImportSpecifier */);
+            var node = createBaseNode(268 /* ImportSpecifier */);
             node.propertyName = propertyName;
             node.name = name;
             node.transformFlags |=
@@ -24083,10 +24599,10 @@
         }
         // @api
         function createExportAssignment(decorators, modifiers, isExportEquals, expression) {
-            var node = createBaseDeclaration(267 /* ExportAssignment */, decorators, modifiers);
+            var node = createBaseDeclaration(269 /* ExportAssignment */, decorators, modifiers);
             node.isExportEquals = isExportEquals;
             node.expression = isExportEquals
-                ? parenthesizerRules().parenthesizeRightSideOfBinary(62 /* EqualsToken */, /*leftSide*/ undefined, expression)
+                ? parenthesizerRules().parenthesizeRightSideOfBinary(63 /* EqualsToken */, /*leftSide*/ undefined, expression)
                 : parenthesizerRules().parenthesizeExpressionOfExportDefault(expression);
             node.transformFlags |= propagateChildFlags(node.expression);
             node.transformFlags &= ~16777216 /* ContainsPossibleTopLevelAwait */; // always parsed in an Await context
@@ -24102,7 +24618,7 @@
         }
         // @api
         function createExportDeclaration(decorators, modifiers, isTypeOnly, exportClause, moduleSpecifier) {
-            var node = createBaseDeclaration(268 /* ExportDeclaration */, decorators, modifiers);
+            var node = createBaseDeclaration(270 /* ExportDeclaration */, decorators, modifiers);
             node.isTypeOnly = isTypeOnly;
             node.exportClause = exportClause;
             node.moduleSpecifier = moduleSpecifier;
@@ -24124,7 +24640,7 @@
         }
         // @api
         function createNamedExports(elements) {
-            var node = createBaseNode(269 /* NamedExports */);
+            var node = createBaseNode(271 /* NamedExports */);
             node.elements = createNodeArray(elements);
             node.transformFlags |= propagateChildrenFlags(node.elements);
             node.transformFlags &= ~16777216 /* ContainsPossibleTopLevelAwait */; // always parsed in an Await context
@@ -24138,7 +24654,7 @@
         }
         // @api
         function createExportSpecifier(propertyName, name) {
-            var node = createBaseNode(271 /* ExportSpecifier */);
+            var node = createBaseNode(273 /* ExportSpecifier */);
             node.propertyName = asName(propertyName);
             node.name = asName(name);
             node.transformFlags |=
@@ -24156,7 +24672,7 @@
         }
         // @api
         function createMissingDeclaration() {
-            var node = createBaseDeclaration(272 /* MissingDeclaration */, 
+            var node = createBaseDeclaration(274 /* MissingDeclaration */, 
             /*decorators*/ undefined, 
             /*modifiers*/ undefined);
             return node;
@@ -24166,7 +24682,7 @@
         //
         // @api
         function createExternalModuleReference(expression) {
-            var node = createBaseNode(273 /* ExternalModuleReference */);
+            var node = createBaseNode(275 /* ExternalModuleReference */);
             node.expression = expression;
             node.transformFlags |= propagateChildFlags(node.expression);
             node.transformFlags &= ~16777216 /* ContainsPossibleTopLevelAwait */; // always parsed in an Await context
@@ -24211,7 +24727,7 @@
         }
         // @api
         function createJSDocFunctionType(parameters, type) {
-            var node = createBaseSignatureDeclaration(309 /* JSDocFunctionType */, 
+            var node = createBaseSignatureDeclaration(312 /* JSDocFunctionType */, 
             /*decorators*/ undefined, 
             /*modifiers*/ undefined, 
             /*name*/ undefined, 
@@ -24228,7 +24744,7 @@
         // @api
         function createJSDocTypeLiteral(propertyTags, isArrayType) {
             if (isArrayType === void 0) { isArrayType = false; }
-            var node = createBaseNode(314 /* JSDocTypeLiteral */);
+            var node = createBaseNode(317 /* JSDocTypeLiteral */);
             node.jsDocPropertyTags = asNodeArray(propertyTags);
             node.isArrayType = isArrayType;
             return node;
@@ -24242,7 +24758,7 @@
         }
         // @api
         function createJSDocTypeExpression(type) {
-            var node = createBaseNode(302 /* JSDocTypeExpression */);
+            var node = createBaseNode(304 /* JSDocTypeExpression */);
             node.type = type;
             return node;
         }
@@ -24254,7 +24770,7 @@
         }
         // @api
         function createJSDocSignature(typeParameters, parameters, type) {
-            var node = createBaseNode(315 /* JSDocSignature */);
+            var node = createBaseNode(318 /* JSDocSignature */);
             node.typeParameters = asNodeArray(typeParameters);
             node.parameters = createNodeArray(parameters);
             node.type = type;
@@ -24283,7 +24799,7 @@
         }
         // @api
         function createJSDocTemplateTag(tagName, constraint, typeParameters, comment) {
-            var node = createBaseJSDocTag(334 /* JSDocTemplateTag */, tagName !== null && tagName !== void 0 ? tagName : createIdentifier("template"), comment);
+            var node = createBaseJSDocTag(339 /* JSDocTemplateTag */, tagName !== null && tagName !== void 0 ? tagName : createIdentifier("template"), comment);
             node.constraint = constraint;
             node.typeParameters = createNodeArray(typeParameters);
             return node;
@@ -24300,7 +24816,7 @@
         }
         // @api
         function createJSDocTypedefTag(tagName, typeExpression, fullName, comment) {
-            var node = createBaseJSDocTag(335 /* JSDocTypedefTag */, tagName !== null && tagName !== void 0 ? tagName : createIdentifier("typedef"), comment);
+            var node = createBaseJSDocTag(340 /* JSDocTypedefTag */, tagName !== null && tagName !== void 0 ? tagName : createIdentifier("typedef"), comment);
             node.typeExpression = typeExpression;
             node.fullName = fullName;
             node.name = ts.getJSDocTypeAliasName(fullName);
@@ -24318,7 +24834,7 @@
         }
         // @api
         function createJSDocParameterTag(tagName, name, isBracketed, typeExpression, isNameFirst, comment) {
-            var node = createBaseJSDocTag(330 /* JSDocParameterTag */, tagName !== null && tagName !== void 0 ? tagName : createIdentifier("param"), comment);
+            var node = createBaseJSDocTag(335 /* JSDocParameterTag */, tagName !== null && tagName !== void 0 ? tagName : createIdentifier("param"), comment);
             node.typeExpression = typeExpression;
             node.name = name;
             node.isNameFirst = !!isNameFirst;
@@ -24339,7 +24855,7 @@
         }
         // @api
         function createJSDocPropertyTag(tagName, name, isBracketed, typeExpression, isNameFirst, comment) {
-            var node = createBaseJSDocTag(337 /* JSDocPropertyTag */, tagName !== null && tagName !== void 0 ? tagName : createIdentifier("prop"), comment);
+            var node = createBaseJSDocTag(342 /* JSDocPropertyTag */, tagName !== null && tagName !== void 0 ? tagName : createIdentifier("prop"), comment);
             node.typeExpression = typeExpression;
             node.name = name;
             node.isNameFirst = !!isNameFirst;
@@ -24360,7 +24876,7 @@
         }
         // @api
         function createJSDocCallbackTag(tagName, typeExpression, fullName, comment) {
-            var node = createBaseJSDocTag(328 /* JSDocCallbackTag */, tagName !== null && tagName !== void 0 ? tagName : createIdentifier("callback"), comment);
+            var node = createBaseJSDocTag(333 /* JSDocCallbackTag */, tagName !== null && tagName !== void 0 ? tagName : createIdentifier("callback"), comment);
             node.typeExpression = typeExpression;
             node.fullName = fullName;
             node.name = ts.getJSDocTypeAliasName(fullName);
@@ -24378,7 +24894,7 @@
         }
         // @api
         function createJSDocAugmentsTag(tagName, className, comment) {
-            var node = createBaseJSDocTag(318 /* JSDocAugmentsTag */, tagName !== null && tagName !== void 0 ? tagName : createIdentifier("augments"), comment);
+            var node = createBaseJSDocTag(323 /* JSDocAugmentsTag */, tagName !== null && tagName !== void 0 ? tagName : createIdentifier("augments"), comment);
             node.class = className;
             return node;
         }
@@ -24393,13 +24909,13 @@
         }
         // @api
         function createJSDocImplementsTag(tagName, className, comment) {
-            var node = createBaseJSDocTag(319 /* JSDocImplementsTag */, tagName !== null && tagName !== void 0 ? tagName : createIdentifier("implements"), comment);
+            var node = createBaseJSDocTag(324 /* JSDocImplementsTag */, tagName !== null && tagName !== void 0 ? tagName : createIdentifier("implements"), comment);
             node.class = className;
             return node;
         }
         // @api
         function createJSDocSeeTag(tagName, name, comment) {
-            var node = createBaseJSDocTag(336 /* JSDocSeeTag */, tagName !== null && tagName !== void 0 ? tagName : createIdentifier("see"), comment);
+            var node = createBaseJSDocTag(341 /* JSDocSeeTag */, tagName !== null && tagName !== void 0 ? tagName : createIdentifier("see"), comment);
             node.name = name;
             return node;
         }
@@ -24413,7 +24929,7 @@
         }
         // @api
         function createJSDocNameReference(name) {
-            var node = createBaseNode(303 /* JSDocNameReference */);
+            var node = createBaseNode(305 /* JSDocNameReference */);
             node.name = name;
             return node;
         }
@@ -24424,8 +24940,25 @@
                 : node;
         }
         // @api
+        function createJSDocMemberName(left, right) {
+            var node = createBaseNode(306 /* JSDocMemberName */);
+            node.left = left;
+            node.right = right;
+            node.transformFlags |=
+                propagateChildFlags(node.left) |
+                    propagateChildFlags(node.right);
+            return node;
+        }
+        // @api
+        function updateJSDocMemberName(node, left, right) {
+            return node.left !== left
+                || node.right !== right
+                ? update(createJSDocMemberName(left, right), node)
+                : node;
+        }
+        // @api
         function createJSDocLink(name, text) {
-            var node = createBaseNode(316 /* JSDocLink */);
+            var node = createBaseNode(319 /* JSDocLink */);
             node.name = name;
             node.text = text;
             return node;
@@ -24437,6 +24970,32 @@
                 : node;
         }
         // @api
+        function createJSDocLinkCode(name, text) {
+            var node = createBaseNode(320 /* JSDocLinkCode */);
+            node.name = name;
+            node.text = text;
+            return node;
+        }
+        // @api
+        function updateJSDocLinkCode(node, name, text) {
+            return node.name !== name
+                ? update(createJSDocLinkCode(name, text), node)
+                : node;
+        }
+        // @api
+        function createJSDocLinkPlain(name, text) {
+            var node = createBaseNode(321 /* JSDocLinkPlain */);
+            node.name = name;
+            node.text = text;
+            return node;
+        }
+        // @api
+        function updateJSDocLinkPlain(node, name, text) {
+            return node.name !== name
+                ? update(createJSDocLinkPlain(name, text), node)
+                : node;
+        }
+        // @api
         function updateJSDocImplementsTag(node, tagName, className, comment) {
             if (tagName === void 0) { tagName = getDefaultTagName(node); }
             return node.tagName !== tagName
@@ -24497,7 +25056,7 @@
         }
         // @api
         function createJSDocUnknownTag(tagName, comment) {
-            var node = createBaseJSDocTag(317 /* JSDocTag */, tagName, comment);
+            var node = createBaseJSDocTag(322 /* JSDocTag */, tagName, comment);
             return node;
         }
         // @api
@@ -24509,7 +25068,7 @@
         }
         // @api
         function createJSDocText(text) {
-            var node = createBaseNode(313 /* JSDocText */);
+            var node = createBaseNode(316 /* JSDocText */);
             node.text = text;
             return node;
         }
@@ -24521,7 +25080,7 @@
         }
         // @api
         function createJSDocComment(comment, tags) {
-            var node = createBaseNode(312 /* JSDocComment */);
+            var node = createBaseNode(315 /* JSDocComment */);
             node.comment = comment;
             node.tags = asNodeArray(tags);
             return node;
@@ -24538,7 +25097,7 @@
         //
         // @api
         function createJsxElement(openingElement, children, closingElement) {
-            var node = createBaseNode(274 /* JsxElement */);
+            var node = createBaseNode(276 /* JsxElement */);
             node.openingElement = openingElement;
             node.children = createNodeArray(children);
             node.closingElement = closingElement;
@@ -24559,7 +25118,7 @@
         }
         // @api
         function createJsxSelfClosingElement(tagName, typeArguments, attributes) {
-            var node = createBaseNode(275 /* JsxSelfClosingElement */);
+            var node = createBaseNode(277 /* JsxSelfClosingElement */);
             node.tagName = tagName;
             node.typeArguments = asNodeArray(typeArguments);
             node.attributes = attributes;
@@ -24583,7 +25142,7 @@
         }
         // @api
         function createJsxOpeningElement(tagName, typeArguments, attributes) {
-            var node = createBaseNode(276 /* JsxOpeningElement */);
+            var node = createBaseNode(278 /* JsxOpeningElement */);
             node.tagName = tagName;
             node.typeArguments = asNodeArray(typeArguments);
             node.attributes = attributes;
@@ -24607,7 +25166,7 @@
         }
         // @api
         function createJsxClosingElement(tagName) {
-            var node = createBaseNode(277 /* JsxClosingElement */);
+            var node = createBaseNode(279 /* JsxClosingElement */);
             node.tagName = tagName;
             node.transformFlags |=
                 propagateChildFlags(node.tagName) |
@@ -24622,7 +25181,7 @@
         }
         // @api
         function createJsxFragment(openingFragment, children, closingFragment) {
-            var node = createBaseNode(278 /* JsxFragment */);
+            var node = createBaseNode(280 /* JsxFragment */);
             node.openingFragment = openingFragment;
             node.children = createNodeArray(children);
             node.closingFragment = closingFragment;
@@ -24658,19 +25217,19 @@
         }
         // @api
         function createJsxOpeningFragment() {
-            var node = createBaseNode(279 /* JsxOpeningFragment */);
+            var node = createBaseNode(281 /* JsxOpeningFragment */);
             node.transformFlags |= 2 /* ContainsJsx */;
             return node;
         }
         // @api
         function createJsxJsxClosingFragment() {
-            var node = createBaseNode(280 /* JsxClosingFragment */);
+            var node = createBaseNode(282 /* JsxClosingFragment */);
             node.transformFlags |= 2 /* ContainsJsx */;
             return node;
         }
         // @api
         function createJsxAttribute(name, initializer) {
-            var node = createBaseNode(281 /* JsxAttribute */);
+            var node = createBaseNode(283 /* JsxAttribute */);
             node.name = name;
             node.initializer = initializer;
             node.transformFlags |=
@@ -24688,7 +25247,7 @@
         }
         // @api
         function createJsxAttributes(properties) {
-            var node = createBaseNode(282 /* JsxAttributes */);
+            var node = createBaseNode(284 /* JsxAttributes */);
             node.properties = createNodeArray(properties);
             node.transformFlags |=
                 propagateChildrenFlags(node.properties) |
@@ -24703,7 +25262,7 @@
         }
         // @api
         function createJsxSpreadAttribute(expression) {
-            var node = createBaseNode(283 /* JsxSpreadAttribute */);
+            var node = createBaseNode(285 /* JsxSpreadAttribute */);
             node.expression = expression;
             node.transformFlags |=
                 propagateChildFlags(node.expression) |
@@ -24718,7 +25277,7 @@
         }
         // @api
         function createJsxExpression(dotDotDotToken, expression) {
-            var node = createBaseNode(284 /* JsxExpression */);
+            var node = createBaseNode(286 /* JsxExpression */);
             node.dotDotDotToken = dotDotDotToken;
             node.expression = expression;
             node.transformFlags |=
@@ -24738,7 +25297,7 @@
         //
         // @api
         function createCaseClause(expression, statements) {
-            var node = createBaseNode(285 /* CaseClause */);
+            var node = createBaseNode(287 /* CaseClause */);
             node.expression = parenthesizerRules().parenthesizeExpressionForDisallowedComma(expression);
             node.statements = createNodeArray(statements);
             node.transformFlags |=
@@ -24755,7 +25314,7 @@
         }
         // @api
         function createDefaultClause(statements) {
-            var node = createBaseNode(286 /* DefaultClause */);
+            var node = createBaseNode(288 /* DefaultClause */);
             node.statements = createNodeArray(statements);
             node.transformFlags = propagateChildrenFlags(node.statements);
             return node;
@@ -24768,15 +25327,15 @@
         }
         // @api
         function createHeritageClause(token, types) {
-            var node = createBaseNode(287 /* HeritageClause */);
+            var node = createBaseNode(289 /* HeritageClause */);
             node.token = token;
             node.types = createNodeArray(types);
             node.transformFlags |= propagateChildrenFlags(node.types);
             switch (token) {
-                case 93 /* ExtendsKeyword */:
+                case 94 /* ExtendsKeyword */:
                     node.transformFlags |= 512 /* ContainsES2015 */;
                     break;
-                case 116 /* ImplementsKeyword */:
+                case 117 /* ImplementsKeyword */:
                     node.transformFlags |= 1 /* ContainsTypeScript */;
                     break;
                 default:
@@ -24792,7 +25351,7 @@
         }
         // @api
         function createCatchClause(variableDeclaration, block) {
-            var node = createBaseNode(288 /* CatchClause */);
+            var node = createBaseNode(290 /* CatchClause */);
             variableDeclaration = !ts.isString(variableDeclaration) ? variableDeclaration : createVariableDeclaration(variableDeclaration, 
             /*exclamationToken*/ undefined, 
             /*type*/ undefined, 
@@ -24818,7 +25377,7 @@
         //
         // @api
         function createPropertyAssignment(name, initializer) {
-            var node = createBaseNamedDeclaration(289 /* PropertyAssignment */, 
+            var node = createBaseNamedDeclaration(291 /* PropertyAssignment */, 
             /*decorators*/ undefined, 
             /*modifiers*/ undefined, name);
             node.initializer = parenthesizerRules().parenthesizeExpressionForDisallowedComma(initializer);
@@ -24848,7 +25407,7 @@
         }
         // @api
         function createShorthandPropertyAssignment(name, objectAssignmentInitializer) {
-            var node = createBaseNamedDeclaration(290 /* ShorthandPropertyAssignment */, 
+            var node = createBaseNamedDeclaration(292 /* ShorthandPropertyAssignment */, 
             /*decorators*/ undefined, 
             /*modifiers*/ undefined, name);
             node.objectAssignmentInitializer = objectAssignmentInitializer && parenthesizerRules().parenthesizeExpressionForDisallowedComma(objectAssignmentInitializer);
@@ -24880,7 +25439,7 @@
         }
         // @api
         function createSpreadAssignment(expression) {
-            var node = createBaseNode(291 /* SpreadAssignment */);
+            var node = createBaseNode(293 /* SpreadAssignment */);
             node.expression = parenthesizerRules().parenthesizeExpressionForDisallowedComma(expression);
             node.transformFlags |=
                 propagateChildFlags(node.expression) |
@@ -24899,7 +25458,7 @@
         //
         // @api
         function createEnumMember(name, initializer) {
-            var node = createBaseNode(292 /* EnumMember */);
+            var node = createBaseNode(294 /* EnumMember */);
             node.name = asName(name);
             node.initializer = initializer && parenthesizerRules().parenthesizeExpressionForDisallowedComma(initializer);
             node.transformFlags |=
@@ -24920,7 +25479,7 @@
         //
         // @api
         function createSourceFile(statements, endOfFileToken, flags) {
-            var node = baseFactory.createBaseSourceFileNode(298 /* SourceFile */);
+            var node = baseFactory.createBaseSourceFileNode(300 /* SourceFile */);
             node.statements = createNodeArray(statements);
             node.endOfFileToken = endOfFileToken;
             node.flags |= flags;
@@ -24937,7 +25496,7 @@
             return node;
         }
         function cloneSourceFileWithChanges(source, statements, isDeclarationFile, referencedFiles, typeReferences, hasNoDefaultLib, libReferences) {
-            var node = baseFactory.createBaseSourceFileNode(298 /* SourceFile */);
+            var node = baseFactory.createBaseSourceFileNode(300 /* SourceFile */);
             for (var p in source) {
                 if (p === "emitNode" || ts.hasProperty(node, p) || !ts.hasProperty(source, p))
                     continue;
@@ -24975,7 +25534,7 @@
         // @api
         function createBundle(sourceFiles, prepends) {
             if (prepends === void 0) { prepends = ts.emptyArray; }
-            var node = createBaseNode(299 /* Bundle */);
+            var node = createBaseNode(301 /* Bundle */);
             node.prepends = prepends;
             node.sourceFiles = sourceFiles;
             return node;
@@ -24990,7 +25549,7 @@
         }
         // @api
         function createUnparsedSource(prologues, syntheticReferences, texts) {
-            var node = createBaseNode(300 /* UnparsedSource */);
+            var node = createBaseNode(302 /* UnparsedSource */);
             node.prologues = prologues;
             node.syntheticReferences = syntheticReferences;
             node.texts = texts;
@@ -25008,28 +25567,28 @@
         }
         // @api
         function createUnparsedPrologue(data) {
-            return createBaseUnparsedNode(293 /* UnparsedPrologue */, data);
+            return createBaseUnparsedNode(295 /* UnparsedPrologue */, data);
         }
         // @api
         function createUnparsedPrepend(data, texts) {
-            var node = createBaseUnparsedNode(294 /* UnparsedPrepend */, data);
+            var node = createBaseUnparsedNode(296 /* UnparsedPrepend */, data);
             node.texts = texts;
             return node;
         }
         // @api
         function createUnparsedTextLike(data, internal) {
-            return createBaseUnparsedNode(internal ? 296 /* UnparsedInternalText */ : 295 /* UnparsedText */, data);
+            return createBaseUnparsedNode(internal ? 298 /* UnparsedInternalText */ : 297 /* UnparsedText */, data);
         }
         // @api
         function createUnparsedSyntheticReference(section) {
-            var node = createBaseNode(297 /* UnparsedSyntheticReference */);
+            var node = createBaseNode(299 /* UnparsedSyntheticReference */);
             node.data = section.data;
             node.section = section;
             return node;
         }
         // @api
         function createInputFiles() {
-            var node = createBaseNode(301 /* InputFiles */);
+            var node = createBaseNode(303 /* InputFiles */);
             node.javascriptText = "";
             node.declarationText = "";
             return node;
@@ -25040,7 +25599,7 @@
         // @api
         function createSyntheticExpression(type, isSpread, tupleNameSource) {
             if (isSpread === void 0) { isSpread = false; }
-            var node = createBaseNode(228 /* SyntheticExpression */);
+            var node = createBaseNode(230 /* SyntheticExpression */);
             node.type = type;
             node.isSpread = isSpread;
             node.tupleNameSource = tupleNameSource;
@@ -25048,7 +25607,7 @@
         }
         // @api
         function createSyntaxList(children) {
-            var node = createBaseNode(338 /* SyntaxList */);
+            var node = createBaseNode(343 /* SyntaxList */);
             node._children = children;
             return node;
         }
@@ -25063,7 +25622,7 @@
          */
         // @api
         function createNotEmittedStatement(original) {
-            var node = createBaseNode(339 /* NotEmittedStatement */);
+            var node = createBaseNode(344 /* NotEmittedStatement */);
             node.original = original;
             ts.setTextRange(node, original);
             return node;
@@ -25077,7 +25636,7 @@
          */
         // @api
         function createPartiallyEmittedExpression(expression, original) {
-            var node = createBaseNode(340 /* PartiallyEmittedExpression */);
+            var node = createBaseNode(345 /* PartiallyEmittedExpression */);
             node.expression = expression;
             node.original = original;
             node.transformFlags |=
@@ -25105,7 +25664,7 @@
         }
         // @api
         function createCommaListExpression(elements) {
-            var node = createBaseNode(341 /* CommaListExpression */);
+            var node = createBaseNode(346 /* CommaListExpression */);
             node.elements = createNodeArray(ts.sameFlatMap(elements, flattenCommaElements));
             node.transformFlags |= propagateChildrenFlags(node.elements);
             return node;
@@ -25122,7 +25681,7 @@
          */
         // @api
         function createEndOfDeclarationMarker(original) {
-            var node = createBaseNode(343 /* EndOfDeclarationMarker */);
+            var node = createBaseNode(348 /* EndOfDeclarationMarker */);
             node.emitNode = {};
             node.original = original;
             return node;
@@ -25133,14 +25692,14 @@
          */
         // @api
         function createMergeDeclarationMarker(original) {
-            var node = createBaseNode(342 /* MergeDeclarationMarker */);
+            var node = createBaseNode(347 /* MergeDeclarationMarker */);
             node.emitNode = {};
             node.original = original;
             return node;
         }
         // @api
         function createSyntheticReferenceExpression(expression, thisArg) {
-            var node = createBaseNode(344 /* SyntheticReferenceExpression */);
+            var node = createBaseNode(349 /* SyntheticReferenceExpression */);
             node.expression = expression;
             node.thisArg = thisArg;
             node.transformFlags |=
@@ -25162,9 +25721,9 @@
             if (node === undefined) {
                 return node;
             }
-            var clone = ts.isSourceFile(node) ? baseFactory.createBaseSourceFileNode(298 /* SourceFile */) :
-                ts.isIdentifier(node) ? baseFactory.createBaseIdentifierNode(78 /* Identifier */) :
-                    ts.isPrivateIdentifier(node) ? baseFactory.createBasePrivateIdentifierNode(79 /* PrivateIdentifier */) :
+            var clone = ts.isSourceFile(node) ? baseFactory.createBaseSourceFileNode(300 /* SourceFile */) :
+                ts.isIdentifier(node) ? baseFactory.createBaseIdentifierNode(79 /* Identifier */) :
+                    ts.isPrivateIdentifier(node) ? baseFactory.createBasePrivateIdentifierNode(80 /* PrivateIdentifier */) :
                         !ts.isNodeKind(node.kind) ? baseFactory.createBaseTokenNode(node.kind) :
                             baseFactory.createBaseNode(node.kind);
             clone.flags |= (node.flags & ~8 /* Synthesized */);
@@ -25225,14 +25784,20 @@
                 : factory.createStrictEquality(createTypeOfExpression(value), createStringLiteral(tag));
         }
         function createMethodCall(object, methodName, argumentsList) {
+            // Preserve the optionality of `object`.
+            if (ts.isCallChain(object)) {
+                return createCallChain(createPropertyAccessChain(object, /*questionDotToken*/ undefined, methodName), 
+                /*questionDotToken*/ undefined, 
+                /*typeArguments*/ undefined, argumentsList);
+            }
             return createCallExpression(createPropertyAccessExpression(object, methodName), 
             /*typeArguments*/ undefined, argumentsList);
         }
         function createFunctionBindCall(target, thisArg, argumentsList) {
-            return createMethodCall(target, "bind", __spreadArray([thisArg], argumentsList));
+            return createMethodCall(target, "bind", __spreadArray([thisArg], argumentsList, true));
         }
         function createFunctionCallCall(target, thisArg, argumentsList) {
-            return createMethodCall(target, "call", __spreadArray([thisArg], argumentsList));
+            return createMethodCall(target, "call", __spreadArray([thisArg], argumentsList, true));
         }
         function createFunctionApplyCall(target, thisArg, argumentsExpression) {
             return createMethodCall(target, "apply", [thisArg, argumentsExpression]);
@@ -25249,6 +25814,12 @@
         function createObjectDefinePropertyCall(target, propertyName, attributes) {
             return createGlobalMethodCall("Object", "defineProperty", [target, asExpression(propertyName), attributes]);
         }
+        function createReflectGetCall(target, propertyKey, receiver) {
+            return createGlobalMethodCall("Reflect", "get", receiver ? [target, propertyKey, receiver] : [target, propertyKey]);
+        }
+        function createReflectSetCall(target, propertyKey, value, receiver) {
+            return createGlobalMethodCall("Reflect", "set", receiver ? [target, propertyKey, value, receiver] : [target, propertyKey, value]);
+        }
         function tryAddPropertyAssignment(properties, propertyName, expression) {
             if (expression) {
                 properties.push(createPropertyAssignment(propertyName, expression));
@@ -25269,11 +25840,11 @@
         }
         function updateOuterExpression(outerExpression, expression) {
             switch (outerExpression.kind) {
-                case 208 /* ParenthesizedExpression */: return updateParenthesizedExpression(outerExpression, expression);
-                case 207 /* TypeAssertionExpression */: return updateTypeAssertion(outerExpression, outerExpression.type, expression);
-                case 225 /* AsExpression */: return updateAsExpression(outerExpression, expression, outerExpression.type);
-                case 226 /* NonNullExpression */: return updateNonNullExpression(outerExpression, expression);
-                case 340 /* PartiallyEmittedExpression */: return updatePartiallyEmittedExpression(outerExpression, expression);
+                case 210 /* ParenthesizedExpression */: return updateParenthesizedExpression(outerExpression, expression);
+                case 209 /* TypeAssertionExpression */: return updateTypeAssertion(outerExpression, outerExpression.type, expression);
+                case 227 /* AsExpression */: return updateAsExpression(outerExpression, expression, outerExpression.type);
+                case 228 /* NonNullExpression */: return updateNonNullExpression(outerExpression, expression);
+                case 345 /* PartiallyEmittedExpression */: return updatePartiallyEmittedExpression(outerExpression, expression);
             }
         }
         /**
@@ -25320,20 +25891,20 @@
         function shouldBeCapturedInTempVariable(node, cacheIdentifiers) {
             var target = ts.skipParentheses(node);
             switch (target.kind) {
-                case 78 /* Identifier */:
+                case 79 /* Identifier */:
                     return cacheIdentifiers;
-                case 107 /* ThisKeyword */:
+                case 108 /* ThisKeyword */:
                 case 8 /* NumericLiteral */:
                 case 9 /* BigIntLiteral */:
                 case 10 /* StringLiteral */:
                     return false;
-                case 200 /* ArrayLiteralExpression */:
+                case 202 /* ArrayLiteralExpression */:
                     var elements = target.elements;
                     if (elements.length === 0) {
                         return false;
                     }
                     return true;
-                case 201 /* ObjectLiteralExpression */:
+                case 203 /* ObjectLiteralExpression */:
                     return target.properties.length > 0;
                 default:
                     return true;
@@ -25389,6 +25960,23 @@
             }
             return { target: target, thisArg: thisArg };
         }
+        function createAssignmentTargetWrapper(paramName, expression) {
+            return createPropertyAccessExpression(
+            // Explicit parens required because of v8 regression (https://bugs.chromium.org/p/v8/issues/detail?id=9560)
+            createParenthesizedExpression(createObjectLiteralExpression([
+                createSetAccessorDeclaration(
+                /*decorators*/ undefined, 
+                /*modifiers*/ undefined, "value", [createParameterDeclaration(
+                    /*decorators*/ undefined, 
+                    /*modifiers*/ undefined, 
+                    /*dotDotDotToken*/ undefined, paramName, 
+                    /*questionToken*/ undefined, 
+                    /*type*/ undefined, 
+                    /*initializer*/ undefined)], createBlock([
+                    createExpressionStatement(expression)
+                ]))
+            ])), "value");
+        }
         function inlineExpressions(expressions) {
             // Avoid deeply nested comma expressions as traversing them during emit can result in "Maximum call
             // stack size exceeded" errors.
@@ -25569,7 +26157,7 @@
         function ensureUseStrict(statements) {
             var foundUseStrict = ts.findUseStrictPrologue(statements);
             if (!foundUseStrict) {
-                return ts.setTextRange(createNodeArray(__spreadArray([createUseStrictPrologue()], statements)), statements);
+                return ts.setTextRange(createNodeArray(__spreadArray([createUseStrictPrologue()], statements, true)), statements);
             }
             return statements;
         }
@@ -25636,20 +26224,20 @@
             var left = ts.isNodeArray(statements) ? statements.slice() : statements;
             // splice other custom prologues from right into left
             if (rightCustomPrologueEnd > rightHoistedVariablesEnd) {
-                left.splice.apply(left, __spreadArray([leftHoistedVariablesEnd, 0], declarations.slice(rightHoistedVariablesEnd, rightCustomPrologueEnd)));
+                left.splice.apply(left, __spreadArray([leftHoistedVariablesEnd, 0], declarations.slice(rightHoistedVariablesEnd, rightCustomPrologueEnd), false));
             }
             // splice hoisted variables from right into left
             if (rightHoistedVariablesEnd > rightHoistedFunctionsEnd) {
-                left.splice.apply(left, __spreadArray([leftHoistedFunctionsEnd, 0], declarations.slice(rightHoistedFunctionsEnd, rightHoistedVariablesEnd)));
+                left.splice.apply(left, __spreadArray([leftHoistedFunctionsEnd, 0], declarations.slice(rightHoistedFunctionsEnd, rightHoistedVariablesEnd), false));
             }
             // splice hoisted functions from right into left
             if (rightHoistedFunctionsEnd > rightStandardPrologueEnd) {
-                left.splice.apply(left, __spreadArray([leftStandardPrologueEnd, 0], declarations.slice(rightStandardPrologueEnd, rightHoistedFunctionsEnd)));
+                left.splice.apply(left, __spreadArray([leftStandardPrologueEnd, 0], declarations.slice(rightStandardPrologueEnd, rightHoistedFunctionsEnd), false));
             }
             // splice standard prologues from right into left (that are not already in left)
             if (rightStandardPrologueEnd > 0) {
                 if (leftStandardPrologueEnd === 0) {
-                    left.splice.apply(left, __spreadArray([0, 0], declarations.slice(0, rightStandardPrologueEnd)));
+                    left.splice.apply(left, __spreadArray([0, 0], declarations.slice(0, rightStandardPrologueEnd), false));
                 }
                 else {
                     var leftPrologues = new ts.Map();
@@ -25736,24 +26324,24 @@
     }
     function getDefaultTagNameForKind(kind) {
         switch (kind) {
-            case 333 /* JSDocTypeTag */: return "type";
-            case 331 /* JSDocReturnTag */: return "returns";
-            case 332 /* JSDocThisTag */: return "this";
-            case 329 /* JSDocEnumTag */: return "enum";
-            case 320 /* JSDocAuthorTag */: return "author";
-            case 322 /* JSDocClassTag */: return "class";
-            case 323 /* JSDocPublicTag */: return "public";
-            case 324 /* JSDocPrivateTag */: return "private";
-            case 325 /* JSDocProtectedTag */: return "protected";
-            case 326 /* JSDocReadonlyTag */: return "readonly";
-            case 327 /* JSDocOverrideTag */: return "override";
-            case 334 /* JSDocTemplateTag */: return "template";
-            case 335 /* JSDocTypedefTag */: return "typedef";
-            case 330 /* JSDocParameterTag */: return "param";
-            case 337 /* JSDocPropertyTag */: return "prop";
-            case 328 /* JSDocCallbackTag */: return "callback";
-            case 318 /* JSDocAugmentsTag */: return "augments";
-            case 319 /* JSDocImplementsTag */: return "implements";
+            case 338 /* JSDocTypeTag */: return "type";
+            case 336 /* JSDocReturnTag */: return "returns";
+            case 337 /* JSDocThisTag */: return "this";
+            case 334 /* JSDocEnumTag */: return "enum";
+            case 325 /* JSDocAuthorTag */: return "author";
+            case 327 /* JSDocClassTag */: return "class";
+            case 328 /* JSDocPublicTag */: return "public";
+            case 329 /* JSDocPrivateTag */: return "private";
+            case 330 /* JSDocProtectedTag */: return "protected";
+            case 331 /* JSDocReadonlyTag */: return "readonly";
+            case 332 /* JSDocOverrideTag */: return "override";
+            case 339 /* JSDocTemplateTag */: return "template";
+            case 340 /* JSDocTypedefTag */: return "typedef";
+            case 335 /* JSDocParameterTag */: return "param";
+            case 342 /* JSDocPropertyTag */: return "prop";
+            case 333 /* JSDocCallbackTag */: return "callback";
+            case 323 /* JSDocAugmentsTag */: return "augments";
+            case 324 /* JSDocImplementsTag */: return "implements";
             default:
                 return ts.Debug.fail("Unsupported kind: " + ts.Debug.formatSyntaxKind(kind));
         }
@@ -25781,7 +26369,7 @@
                 break;
         }
         var token = rawTextScanner.scan();
-        if (token === 23 /* CloseBracketToken */) {
+        if (token === 19 /* CloseBraceToken */) {
             token = rawTextScanner.reScanTemplateToken(/*isTaggedTemplate*/ false);
         }
         if (rawTextScanner.isUnterminated()) {
@@ -25809,7 +26397,7 @@
         return propagateChildFlags(node) & ~16777216 /* ContainsPossibleTopLevelAwait */;
     }
     function propagatePropertyNameFlagsOfChild(node, transformFlags) {
-        return transformFlags | (node.transformFlags & 8192 /* PropertyNamePropagatingFlags */);
+        return transformFlags | (node.transformFlags & 33562624 /* PropertyNamePropagatingFlags */);
     }
     function propagateChildFlags(child) {
         if (!child)
@@ -25833,69 +26421,69 @@
      */
     /* @internal */
     function getTransformFlagsSubtreeExclusions(kind) {
-        if (kind >= 173 /* FirstTypeNode */ && kind <= 196 /* LastTypeNode */) {
+        if (kind >= 175 /* FirstTypeNode */ && kind <= 198 /* LastTypeNode */) {
             return -2 /* TypeExcludes */;
         }
         switch (kind) {
-            case 204 /* CallExpression */:
-            case 205 /* NewExpression */:
-            case 200 /* ArrayLiteralExpression */:
+            case 206 /* CallExpression */:
+            case 207 /* NewExpression */:
+            case 202 /* ArrayLiteralExpression */:
                 return 536887296 /* ArrayLiteralOrCallOrNewExcludes */;
-            case 257 /* ModuleDeclaration */:
-                return 555888640 /* ModuleExcludes */;
-            case 161 /* Parameter */:
+            case 259 /* ModuleDeclaration */:
+                return 589443072 /* ModuleExcludes */;
+            case 162 /* Parameter */:
                 return 536870912 /* ParameterExcludes */;
-            case 210 /* ArrowFunction */:
+            case 212 /* ArrowFunction */:
                 return 557748224 /* ArrowFunctionExcludes */;
-            case 209 /* FunctionExpression */:
-            case 252 /* FunctionDeclaration */:
-                return 557756416 /* FunctionExcludes */;
-            case 251 /* VariableDeclarationList */:
+            case 211 /* FunctionExpression */:
+            case 254 /* FunctionDeclaration */:
+                return 591310848 /* FunctionExcludes */;
+            case 253 /* VariableDeclarationList */:
                 return 537165824 /* VariableDeclarationListExcludes */;
-            case 253 /* ClassDeclaration */:
-            case 222 /* ClassExpression */:
+            case 255 /* ClassDeclaration */:
+            case 224 /* ClassExpression */:
                 return 536940544 /* ClassExcludes */;
-            case 167 /* Constructor */:
-                return 557752320 /* ConstructorExcludes */;
-            case 164 /* PropertyDeclaration */:
-                return 536879104 /* PropertyExcludes */;
-            case 166 /* MethodDeclaration */:
-            case 168 /* GetAccessor */:
-            case 169 /* SetAccessor */:
-                return 540975104 /* MethodOrAccessorExcludes */;
-            case 128 /* AnyKeyword */:
-            case 144 /* NumberKeyword */:
-            case 155 /* BigIntKeyword */:
-            case 141 /* NeverKeyword */:
-            case 147 /* StringKeyword */:
-            case 145 /* ObjectKeyword */:
-            case 131 /* BooleanKeyword */:
-            case 148 /* SymbolKeyword */:
-            case 113 /* VoidKeyword */:
-            case 160 /* TypeParameter */:
-            case 163 /* PropertySignature */:
-            case 165 /* MethodSignature */:
-            case 170 /* CallSignature */:
-            case 171 /* ConstructSignature */:
-            case 172 /* IndexSignature */:
-            case 254 /* InterfaceDeclaration */:
-            case 255 /* TypeAliasDeclaration */:
+            case 169 /* Constructor */:
+                return 591306752 /* ConstructorExcludes */;
+            case 165 /* PropertyDeclaration */:
+                return 570433536 /* PropertyExcludes */;
+            case 167 /* MethodDeclaration */:
+            case 170 /* GetAccessor */:
+            case 171 /* SetAccessor */:
+                return 574529536 /* MethodOrAccessorExcludes */;
+            case 129 /* AnyKeyword */:
+            case 145 /* NumberKeyword */:
+            case 156 /* BigIntKeyword */:
+            case 142 /* NeverKeyword */:
+            case 148 /* StringKeyword */:
+            case 146 /* ObjectKeyword */:
+            case 132 /* BooleanKeyword */:
+            case 149 /* SymbolKeyword */:
+            case 114 /* VoidKeyword */:
+            case 161 /* TypeParameter */:
+            case 164 /* PropertySignature */:
+            case 166 /* MethodSignature */:
+            case 172 /* CallSignature */:
+            case 173 /* ConstructSignature */:
+            case 174 /* IndexSignature */:
+            case 256 /* InterfaceDeclaration */:
+            case 257 /* TypeAliasDeclaration */:
                 return -2 /* TypeExcludes */;
-            case 201 /* ObjectLiteralExpression */:
+            case 203 /* ObjectLiteralExpression */:
                 return 536973312 /* ObjectLiteralExcludes */;
-            case 288 /* CatchClause */:
+            case 290 /* CatchClause */:
                 return 536903680 /* CatchClauseExcludes */;
-            case 197 /* ObjectBindingPattern */:
-            case 198 /* ArrayBindingPattern */:
+            case 199 /* ObjectBindingPattern */:
+            case 200 /* ArrayBindingPattern */:
                 return 536887296 /* BindingPatternExcludes */;
-            case 207 /* TypeAssertionExpression */:
-            case 225 /* AsExpression */:
-            case 340 /* PartiallyEmittedExpression */:
-            case 208 /* ParenthesizedExpression */:
-            case 105 /* SuperKeyword */:
+            case 209 /* TypeAssertionExpression */:
+            case 227 /* AsExpression */:
+            case 345 /* PartiallyEmittedExpression */:
+            case 210 /* ParenthesizedExpression */:
+            case 106 /* SuperKeyword */:
                 return 536870912 /* OuterExpressionExcludes */;
-            case 202 /* PropertyAccessExpression */:
-            case 203 /* ElementAccessExpression */:
+            case 204 /* PropertyAccessExpression */:
+            case 205 /* ElementAccessExpression */:
                 return 536870912 /* PropertyAccessExcludes */;
             default:
                 return 536870912 /* NodeExcludes */;
@@ -26152,7 +26740,7 @@
         if (trailingComments)
             destEmitNode.trailingComments = ts.addRange(trailingComments.slice(), destEmitNode.trailingComments);
         if (flags)
-            destEmitNode.flags = flags;
+            destEmitNode.flags = flags & ~268435456 /* Immutable */;
         if (commentRange)
             destEmitNode.commentRange = commentRange;
         if (sourceMapRange)
@@ -26194,7 +26782,7 @@
                 // To avoid holding onto transformation artifacts, we keep track of any
                 // parse tree node we are annotating. This allows us to clean them up after
                 // all transformations have completed.
-                if (node.kind === 298 /* SourceFile */) {
+                if (node.kind === 300 /* SourceFile */) {
                     return node.emitNode = { annotatedNodes: [node] };
                 }
                 var sourceFile = (_a = ts.getSourceFileOfNode(ts.getParseTreeNode(ts.getSourceFileOfNode(node)))) !== null && _a !== void 0 ? _a : ts.Debug.fail("Could not determine parsed source file.");
@@ -26202,6 +26790,9 @@
             }
             node.emitNode = {};
         }
+        else {
+            ts.Debug.assert(!(node.emitNode.flags & 268435456 /* Immutable */), "Invalid attempt to mutate an immutable node.");
+        }
         return node.emitNode;
     }
     ts.getOrCreateEmitNode = getOrCreateEmitNode;
@@ -26459,6 +27050,8 @@
 (function (ts) {
     function createEmitHelperFactory(context) {
         var factory = context.factory;
+        var immutableTrue = ts.memoize(function () { return ts.setEmitFlags(factory.createTrue(), 268435456 /* Immutable */); });
+        var immutableFalse = ts.memoize(function () { return ts.setEmitFlags(factory.createFalse(), 268435456 /* Immutable */); });
         return {
             getUnscopedHelperName: getUnscopedHelperName,
             // TypeScript Helpers
@@ -26629,10 +27222,10 @@
             return factory.createCallExpression(getUnscopedHelperName("__makeTemplateObject"), 
             /*typeArguments*/ undefined, [cooked, raw]);
         }
-        function createSpreadArrayHelper(to, from) {
+        function createSpreadArrayHelper(to, from, packFrom) {
             context.requestEmitHelper(ts.spreadArrayHelper);
             return factory.createCallExpression(getUnscopedHelperName("__spreadArray"), 
-            /*typeArguments*/ undefined, [to, from]);
+            /*typeArguments*/ undefined, [to, from, packFrom ? immutableTrue() : immutableFalse()]);
         }
         // ES2015 Destructuring Helpers
         function createValuesHelper(expression) {
@@ -26657,7 +27250,7 @@
         function createCreateBindingHelper(module, inputName, outputName) {
             context.requestEmitHelper(ts.createBindingHelper);
             return factory.createCallExpression(getUnscopedHelperName("__createBinding"), 
-            /*typeArguments*/ undefined, __spreadArray([factory.createIdentifier("exports"), module, inputName], (outputName ? [outputName] : [])));
+            /*typeArguments*/ undefined, __spreadArray([factory.createIdentifier("exports"), module, inputName], (outputName ? [outputName] : []), true));
         }
         function createImportStarHelper(expression) {
             context.requestEmitHelper(ts.importStarHelper);
@@ -26834,7 +27427,7 @@
         name: "typescript:spreadArray",
         importName: "__spreadArray",
         scoped: false,
-        text: "\n            var __spreadArray = (this && this.__spreadArray) || function (to, from) {\n                for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)\n                    to[j] = from[i];\n                return to;\n            };"
+        text: "\n            var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {\n                if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n                    if (ar || !(i in from)) {\n                        if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n                        ar[i] = from[i];\n                    }\n                }\n                return to.concat(ar || Array.prototype.slice.call(from));\n            };"
     };
     // ES2015 Destructuring Helpers
     ts.valuesHelper = {
@@ -27102,7 +27695,7 @@
     function isCallToHelper(firstSegment, helperName) {
         return ts.isCallExpression(firstSegment)
             && ts.isIdentifier(firstSegment.expression)
-            && (ts.getEmitFlags(firstSegment.expression) & 4096 /* HelperName */)
+            && (ts.getEmitFlags(firstSegment.expression) & 4096 /* HelperName */) !== 0
             && firstSegment.expression.escapedText === helperName;
     }
     ts.isCallToHelper = isCallToHelper;
@@ -27196,639 +27789,648 @@
     ts.isEqualsGreaterThanToken = isEqualsGreaterThanToken;
     // Identifiers
     function isIdentifier(node) {
-        return node.kind === 78 /* Identifier */;
+        return node.kind === 79 /* Identifier */;
     }
     ts.isIdentifier = isIdentifier;
     function isPrivateIdentifier(node) {
-        return node.kind === 79 /* PrivateIdentifier */;
+        return node.kind === 80 /* PrivateIdentifier */;
     }
     ts.isPrivateIdentifier = isPrivateIdentifier;
     // Reserved Words
     /* @internal */
     function isExportModifier(node) {
-        return node.kind === 92 /* ExportKeyword */;
+        return node.kind === 93 /* ExportKeyword */;
     }
     ts.isExportModifier = isExportModifier;
     /* @internal */
     function isAsyncModifier(node) {
-        return node.kind === 129 /* AsyncKeyword */;
+        return node.kind === 130 /* AsyncKeyword */;
     }
     ts.isAsyncModifier = isAsyncModifier;
     /* @internal */
     function isAssertsKeyword(node) {
-        return node.kind === 127 /* AssertsKeyword */;
+        return node.kind === 128 /* AssertsKeyword */;
     }
     ts.isAssertsKeyword = isAssertsKeyword;
     /* @internal */
     function isAwaitKeyword(node) {
-        return node.kind === 130 /* AwaitKeyword */;
+        return node.kind === 131 /* AwaitKeyword */;
     }
     ts.isAwaitKeyword = isAwaitKeyword;
     /* @internal */
     function isReadonlyKeyword(node) {
-        return node.kind === 142 /* ReadonlyKeyword */;
+        return node.kind === 143 /* ReadonlyKeyword */;
     }
     ts.isReadonlyKeyword = isReadonlyKeyword;
     /* @internal */
     function isStaticModifier(node) {
-        return node.kind === 123 /* StaticKeyword */;
+        return node.kind === 124 /* StaticKeyword */;
     }
     ts.isStaticModifier = isStaticModifier;
+    /* @internal */
+    function isAbstractModifier(node) {
+        return node.kind === 126 /* AbstractKeyword */;
+    }
+    ts.isAbstractModifier = isAbstractModifier;
     /*@internal*/
     function isSuperKeyword(node) {
-        return node.kind === 105 /* SuperKeyword */;
+        return node.kind === 106 /* SuperKeyword */;
     }
     ts.isSuperKeyword = isSuperKeyword;
     /*@internal*/
     function isImportKeyword(node) {
-        return node.kind === 99 /* ImportKeyword */;
+        return node.kind === 100 /* ImportKeyword */;
     }
     ts.isImportKeyword = isImportKeyword;
     // Names
     function isQualifiedName(node) {
-        return node.kind === 158 /* QualifiedName */;
+        return node.kind === 159 /* QualifiedName */;
     }
     ts.isQualifiedName = isQualifiedName;
     function isComputedPropertyName(node) {
-        return node.kind === 159 /* ComputedPropertyName */;
+        return node.kind === 160 /* ComputedPropertyName */;
     }
     ts.isComputedPropertyName = isComputedPropertyName;
     // Signature elements
     function isTypeParameterDeclaration(node) {
-        return node.kind === 160 /* TypeParameter */;
+        return node.kind === 161 /* TypeParameter */;
     }
     ts.isTypeParameterDeclaration = isTypeParameterDeclaration;
     // TODO(rbuckton): Rename to 'isParameterDeclaration'
     function isParameter(node) {
-        return node.kind === 161 /* Parameter */;
+        return node.kind === 162 /* Parameter */;
     }
     ts.isParameter = isParameter;
     function isDecorator(node) {
-        return node.kind === 162 /* Decorator */;
+        return node.kind === 163 /* Decorator */;
     }
     ts.isDecorator = isDecorator;
     // TypeMember
     function isPropertySignature(node) {
-        return node.kind === 163 /* PropertySignature */;
+        return node.kind === 164 /* PropertySignature */;
     }
     ts.isPropertySignature = isPropertySignature;
     function isPropertyDeclaration(node) {
-        return node.kind === 164 /* PropertyDeclaration */;
+        return node.kind === 165 /* PropertyDeclaration */;
     }
     ts.isPropertyDeclaration = isPropertyDeclaration;
     function isMethodSignature(node) {
-        return node.kind === 165 /* MethodSignature */;
+        return node.kind === 166 /* MethodSignature */;
     }
     ts.isMethodSignature = isMethodSignature;
     function isMethodDeclaration(node) {
-        return node.kind === 166 /* MethodDeclaration */;
+        return node.kind === 167 /* MethodDeclaration */;
     }
     ts.isMethodDeclaration = isMethodDeclaration;
+    function isClassStaticBlockDeclaration(node) {
+        return node.kind === 168 /* ClassStaticBlockDeclaration */;
+    }
+    ts.isClassStaticBlockDeclaration = isClassStaticBlockDeclaration;
     function isConstructorDeclaration(node) {
-        return node.kind === 167 /* Constructor */;
+        return node.kind === 169 /* Constructor */;
     }
     ts.isConstructorDeclaration = isConstructorDeclaration;
     function isGetAccessorDeclaration(node) {
-        return node.kind === 168 /* GetAccessor */;
+        return node.kind === 170 /* GetAccessor */;
     }
     ts.isGetAccessorDeclaration = isGetAccessorDeclaration;
     function isSetAccessorDeclaration(node) {
-        return node.kind === 169 /* SetAccessor */;
+        return node.kind === 171 /* SetAccessor */;
     }
     ts.isSetAccessorDeclaration = isSetAccessorDeclaration;
     function isCallSignatureDeclaration(node) {
-        return node.kind === 170 /* CallSignature */;
+        return node.kind === 172 /* CallSignature */;
     }
     ts.isCallSignatureDeclaration = isCallSignatureDeclaration;
     function isConstructSignatureDeclaration(node) {
-        return node.kind === 171 /* ConstructSignature */;
+        return node.kind === 173 /* ConstructSignature */;
     }
     ts.isConstructSignatureDeclaration = isConstructSignatureDeclaration;
     function isIndexSignatureDeclaration(node) {
-        return node.kind === 172 /* IndexSignature */;
+        return node.kind === 174 /* IndexSignature */;
     }
     ts.isIndexSignatureDeclaration = isIndexSignatureDeclaration;
     // Type
     function isTypePredicateNode(node) {
-        return node.kind === 173 /* TypePredicate */;
+        return node.kind === 175 /* TypePredicate */;
     }
     ts.isTypePredicateNode = isTypePredicateNode;
     function isTypeReferenceNode(node) {
-        return node.kind === 174 /* TypeReference */;
+        return node.kind === 176 /* TypeReference */;
     }
     ts.isTypeReferenceNode = isTypeReferenceNode;
     function isFunctionTypeNode(node) {
-        return node.kind === 175 /* FunctionType */;
+        return node.kind === 177 /* FunctionType */;
     }
     ts.isFunctionTypeNode = isFunctionTypeNode;
     function isConstructorTypeNode(node) {
-        return node.kind === 176 /* ConstructorType */;
+        return node.kind === 178 /* ConstructorType */;
     }
     ts.isConstructorTypeNode = isConstructorTypeNode;
     function isTypeQueryNode(node) {
-        return node.kind === 177 /* TypeQuery */;
+        return node.kind === 179 /* TypeQuery */;
     }
     ts.isTypeQueryNode = isTypeQueryNode;
     function isTypeLiteralNode(node) {
-        return node.kind === 178 /* TypeLiteral */;
+        return node.kind === 180 /* TypeLiteral */;
     }
     ts.isTypeLiteralNode = isTypeLiteralNode;
     function isArrayTypeNode(node) {
-        return node.kind === 179 /* ArrayType */;
+        return node.kind === 181 /* ArrayType */;
     }
     ts.isArrayTypeNode = isArrayTypeNode;
     function isTupleTypeNode(node) {
-        return node.kind === 180 /* TupleType */;
+        return node.kind === 182 /* TupleType */;
     }
     ts.isTupleTypeNode = isTupleTypeNode;
     function isNamedTupleMember(node) {
-        return node.kind === 193 /* NamedTupleMember */;
+        return node.kind === 195 /* NamedTupleMember */;
     }
     ts.isNamedTupleMember = isNamedTupleMember;
     function isOptionalTypeNode(node) {
-        return node.kind === 181 /* OptionalType */;
+        return node.kind === 183 /* OptionalType */;
     }
     ts.isOptionalTypeNode = isOptionalTypeNode;
     function isRestTypeNode(node) {
-        return node.kind === 182 /* RestType */;
+        return node.kind === 184 /* RestType */;
     }
     ts.isRestTypeNode = isRestTypeNode;
     function isUnionTypeNode(node) {
-        return node.kind === 183 /* UnionType */;
+        return node.kind === 185 /* UnionType */;
     }
     ts.isUnionTypeNode = isUnionTypeNode;
     function isIntersectionTypeNode(node) {
-        return node.kind === 184 /* IntersectionType */;
+        return node.kind === 186 /* IntersectionType */;
     }
     ts.isIntersectionTypeNode = isIntersectionTypeNode;
     function isConditionalTypeNode(node) {
-        return node.kind === 185 /* ConditionalType */;
+        return node.kind === 187 /* ConditionalType */;
     }
     ts.isConditionalTypeNode = isConditionalTypeNode;
     function isInferTypeNode(node) {
-        return node.kind === 186 /* InferType */;
+        return node.kind === 188 /* InferType */;
     }
     ts.isInferTypeNode = isInferTypeNode;
     function isParenthesizedTypeNode(node) {
-        return node.kind === 187 /* ParenthesizedType */;
+        return node.kind === 189 /* ParenthesizedType */;
     }
     ts.isParenthesizedTypeNode = isParenthesizedTypeNode;
     function isThisTypeNode(node) {
-        return node.kind === 188 /* ThisType */;
+        return node.kind === 190 /* ThisType */;
     }
     ts.isThisTypeNode = isThisTypeNode;
     function isTypeOperatorNode(node) {
-        return node.kind === 189 /* TypeOperator */;
+        return node.kind === 191 /* TypeOperator */;
     }
     ts.isTypeOperatorNode = isTypeOperatorNode;
     function isIndexedAccessTypeNode(node) {
-        return node.kind === 190 /* IndexedAccessType */;
+        return node.kind === 192 /* IndexedAccessType */;
     }
     ts.isIndexedAccessTypeNode = isIndexedAccessTypeNode;
     function isMappedTypeNode(node) {
-        return node.kind === 191 /* MappedType */;
+        return node.kind === 193 /* MappedType */;
     }
     ts.isMappedTypeNode = isMappedTypeNode;
     function isLiteralTypeNode(node) {
-        return node.kind === 192 /* LiteralType */;
+        return node.kind === 194 /* LiteralType */;
     }
     ts.isLiteralTypeNode = isLiteralTypeNode;
     function isImportTypeNode(node) {
-        return node.kind === 196 /* ImportType */;
+        return node.kind === 198 /* ImportType */;
     }
     ts.isImportTypeNode = isImportTypeNode;
     function isTemplateLiteralTypeSpan(node) {
-        return node.kind === 195 /* TemplateLiteralTypeSpan */;
+        return node.kind === 197 /* TemplateLiteralTypeSpan */;
     }
     ts.isTemplateLiteralTypeSpan = isTemplateLiteralTypeSpan;
     function isTemplateLiteralTypeNode(node) {
-        return node.kind === 194 /* TemplateLiteralType */;
+        return node.kind === 196 /* TemplateLiteralType */;
     }
     ts.isTemplateLiteralTypeNode = isTemplateLiteralTypeNode;
     // Binding patterns
     function isObjectBindingPattern(node) {
-        return node.kind === 197 /* ObjectBindingPattern */;
+        return node.kind === 199 /* ObjectBindingPattern */;
     }
     ts.isObjectBindingPattern = isObjectBindingPattern;
     function isArrayBindingPattern(node) {
-        return node.kind === 198 /* ArrayBindingPattern */;
+        return node.kind === 200 /* ArrayBindingPattern */;
     }
     ts.isArrayBindingPattern = isArrayBindingPattern;
     function isBindingElement(node) {
-        return node.kind === 199 /* BindingElement */;
+        return node.kind === 201 /* BindingElement */;
     }
     ts.isBindingElement = isBindingElement;
     // Expression
     function isArrayLiteralExpression(node) {
-        return node.kind === 200 /* ArrayLiteralExpression */;
+        return node.kind === 202 /* ArrayLiteralExpression */;
     }
     ts.isArrayLiteralExpression = isArrayLiteralExpression;
     function isObjectLiteralExpression(node) {
-        return node.kind === 201 /* ObjectLiteralExpression */;
+        return node.kind === 203 /* ObjectLiteralExpression */;
     }
     ts.isObjectLiteralExpression = isObjectLiteralExpression;
     function isPropertyAccessExpression(node) {
-        return node.kind === 202 /* PropertyAccessExpression */;
+        return node.kind === 204 /* PropertyAccessExpression */;
     }
     ts.isPropertyAccessExpression = isPropertyAccessExpression;
     function isElementAccessExpression(node) {
-        return node.kind === 203 /* ElementAccessExpression */;
+        return node.kind === 205 /* ElementAccessExpression */;
     }
     ts.isElementAccessExpression = isElementAccessExpression;
     function isCallExpression(node) {
-        return node.kind === 204 /* CallExpression */;
+        return node.kind === 206 /* CallExpression */;
     }
     ts.isCallExpression = isCallExpression;
     function isNewExpression(node) {
-        return node.kind === 205 /* NewExpression */;
+        return node.kind === 207 /* NewExpression */;
     }
     ts.isNewExpression = isNewExpression;
     function isTaggedTemplateExpression(node) {
-        return node.kind === 206 /* TaggedTemplateExpression */;
+        return node.kind === 208 /* TaggedTemplateExpression */;
     }
     ts.isTaggedTemplateExpression = isTaggedTemplateExpression;
     function isTypeAssertionExpression(node) {
-        return node.kind === 207 /* TypeAssertionExpression */;
+        return node.kind === 209 /* TypeAssertionExpression */;
     }
     ts.isTypeAssertionExpression = isTypeAssertionExpression;
     function isParenthesizedExpression(node) {
-        return node.kind === 208 /* ParenthesizedExpression */;
+        return node.kind === 210 /* ParenthesizedExpression */;
     }
     ts.isParenthesizedExpression = isParenthesizedExpression;
     function isFunctionExpression(node) {
-        return node.kind === 209 /* FunctionExpression */;
+        return node.kind === 211 /* FunctionExpression */;
     }
     ts.isFunctionExpression = isFunctionExpression;
     function isArrowFunction(node) {
-        return node.kind === 210 /* ArrowFunction */;
+        return node.kind === 212 /* ArrowFunction */;
     }
     ts.isArrowFunction = isArrowFunction;
     function isDeleteExpression(node) {
-        return node.kind === 211 /* DeleteExpression */;
+        return node.kind === 213 /* DeleteExpression */;
     }
     ts.isDeleteExpression = isDeleteExpression;
     function isTypeOfExpression(node) {
-        return node.kind === 212 /* TypeOfExpression */;
+        return node.kind === 214 /* TypeOfExpression */;
     }
     ts.isTypeOfExpression = isTypeOfExpression;
     function isVoidExpression(node) {
-        return node.kind === 213 /* VoidExpression */;
+        return node.kind === 215 /* VoidExpression */;
     }
     ts.isVoidExpression = isVoidExpression;
     function isAwaitExpression(node) {
-        return node.kind === 214 /* AwaitExpression */;
+        return node.kind === 216 /* AwaitExpression */;
     }
     ts.isAwaitExpression = isAwaitExpression;
     function isPrefixUnaryExpression(node) {
-        return node.kind === 215 /* PrefixUnaryExpression */;
+        return node.kind === 217 /* PrefixUnaryExpression */;
     }
     ts.isPrefixUnaryExpression = isPrefixUnaryExpression;
     function isPostfixUnaryExpression(node) {
-        return node.kind === 216 /* PostfixUnaryExpression */;
+        return node.kind === 218 /* PostfixUnaryExpression */;
     }
     ts.isPostfixUnaryExpression = isPostfixUnaryExpression;
     function isBinaryExpression(node) {
-        return node.kind === 217 /* BinaryExpression */;
+        return node.kind === 219 /* BinaryExpression */;
     }
     ts.isBinaryExpression = isBinaryExpression;
     function isConditionalExpression(node) {
-        return node.kind === 218 /* ConditionalExpression */;
+        return node.kind === 220 /* ConditionalExpression */;
     }
     ts.isConditionalExpression = isConditionalExpression;
     function isTemplateExpression(node) {
-        return node.kind === 219 /* TemplateExpression */;
+        return node.kind === 221 /* TemplateExpression */;
     }
     ts.isTemplateExpression = isTemplateExpression;
     function isYieldExpression(node) {
-        return node.kind === 220 /* YieldExpression */;
+        return node.kind === 222 /* YieldExpression */;
     }
     ts.isYieldExpression = isYieldExpression;
     function isSpreadElement(node) {
-        return node.kind === 221 /* SpreadElement */;
+        return node.kind === 223 /* SpreadElement */;
     }
     ts.isSpreadElement = isSpreadElement;
     function isClassExpression(node) {
-        return node.kind === 222 /* ClassExpression */;
+        return node.kind === 224 /* ClassExpression */;
     }
     ts.isClassExpression = isClassExpression;
     function isOmittedExpression(node) {
-        return node.kind === 223 /* OmittedExpression */;
+        return node.kind === 225 /* OmittedExpression */;
     }
     ts.isOmittedExpression = isOmittedExpression;
     function isExpressionWithTypeArguments(node) {
-        return node.kind === 224 /* ExpressionWithTypeArguments */;
+        return node.kind === 226 /* ExpressionWithTypeArguments */;
     }
     ts.isExpressionWithTypeArguments = isExpressionWithTypeArguments;
     function isAsExpression(node) {
-        return node.kind === 225 /* AsExpression */;
+        return node.kind === 227 /* AsExpression */;
     }
     ts.isAsExpression = isAsExpression;
     function isNonNullExpression(node) {
-        return node.kind === 226 /* NonNullExpression */;
+        return node.kind === 228 /* NonNullExpression */;
     }
     ts.isNonNullExpression = isNonNullExpression;
     function isMetaProperty(node) {
-        return node.kind === 227 /* MetaProperty */;
+        return node.kind === 229 /* MetaProperty */;
     }
     ts.isMetaProperty = isMetaProperty;
     function isSyntheticExpression(node) {
-        return node.kind === 228 /* SyntheticExpression */;
+        return node.kind === 230 /* SyntheticExpression */;
     }
     ts.isSyntheticExpression = isSyntheticExpression;
     function isPartiallyEmittedExpression(node) {
-        return node.kind === 340 /* PartiallyEmittedExpression */;
+        return node.kind === 345 /* PartiallyEmittedExpression */;
     }
     ts.isPartiallyEmittedExpression = isPartiallyEmittedExpression;
     function isCommaListExpression(node) {
-        return node.kind === 341 /* CommaListExpression */;
+        return node.kind === 346 /* CommaListExpression */;
     }
     ts.isCommaListExpression = isCommaListExpression;
     // Misc
     function isTemplateSpan(node) {
-        return node.kind === 229 /* TemplateSpan */;
+        return node.kind === 231 /* TemplateSpan */;
     }
     ts.isTemplateSpan = isTemplateSpan;
     function isSemicolonClassElement(node) {
-        return node.kind === 230 /* SemicolonClassElement */;
+        return node.kind === 232 /* SemicolonClassElement */;
     }
     ts.isSemicolonClassElement = isSemicolonClassElement;
     // Elements
     function isBlock(node) {
-        return node.kind === 231 /* Block */;
+        return node.kind === 233 /* Block */;
     }
     ts.isBlock = isBlock;
     function isVariableStatement(node) {
-        return node.kind === 233 /* VariableStatement */;
+        return node.kind === 235 /* VariableStatement */;
     }
     ts.isVariableStatement = isVariableStatement;
     function isEmptyStatement(node) {
-        return node.kind === 232 /* EmptyStatement */;
+        return node.kind === 234 /* EmptyStatement */;
     }
     ts.isEmptyStatement = isEmptyStatement;
     function isExpressionStatement(node) {
-        return node.kind === 234 /* ExpressionStatement */;
+        return node.kind === 236 /* ExpressionStatement */;
     }
     ts.isExpressionStatement = isExpressionStatement;
     function isIfStatement(node) {
-        return node.kind === 235 /* IfStatement */;
+        return node.kind === 237 /* IfStatement */;
     }
     ts.isIfStatement = isIfStatement;
     function isDoStatement(node) {
-        return node.kind === 236 /* DoStatement */;
+        return node.kind === 238 /* DoStatement */;
     }
     ts.isDoStatement = isDoStatement;
     function isWhileStatement(node) {
-        return node.kind === 237 /* WhileStatement */;
+        return node.kind === 239 /* WhileStatement */;
     }
     ts.isWhileStatement = isWhileStatement;
     function isForStatement(node) {
-        return node.kind === 238 /* ForStatement */;
+        return node.kind === 240 /* ForStatement */;
     }
     ts.isForStatement = isForStatement;
     function isForInStatement(node) {
-        return node.kind === 239 /* ForInStatement */;
+        return node.kind === 241 /* ForInStatement */;
     }
     ts.isForInStatement = isForInStatement;
     function isForOfStatement(node) {
-        return node.kind === 240 /* ForOfStatement */;
+        return node.kind === 242 /* ForOfStatement */;
     }
     ts.isForOfStatement = isForOfStatement;
     function isContinueStatement(node) {
-        return node.kind === 241 /* ContinueStatement */;
+        return node.kind === 243 /* ContinueStatement */;
     }
     ts.isContinueStatement = isContinueStatement;
     function isBreakStatement(node) {
-        return node.kind === 242 /* BreakStatement */;
+        return node.kind === 244 /* BreakStatement */;
     }
     ts.isBreakStatement = isBreakStatement;
     function isReturnStatement(node) {
-        return node.kind === 243 /* ReturnStatement */;
+        return node.kind === 245 /* ReturnStatement */;
     }
     ts.isReturnStatement = isReturnStatement;
     function isWithStatement(node) {
-        return node.kind === 244 /* WithStatement */;
+        return node.kind === 246 /* WithStatement */;
     }
     ts.isWithStatement = isWithStatement;
     function isSwitchStatement(node) {
-        return node.kind === 245 /* SwitchStatement */;
+        return node.kind === 247 /* SwitchStatement */;
     }
     ts.isSwitchStatement = isSwitchStatement;
     function isLabeledStatement(node) {
-        return node.kind === 246 /* LabeledStatement */;
+        return node.kind === 248 /* LabeledStatement */;
     }
     ts.isLabeledStatement = isLabeledStatement;
     function isThrowStatement(node) {
-        return node.kind === 247 /* ThrowStatement */;
+        return node.kind === 249 /* ThrowStatement */;
     }
     ts.isThrowStatement = isThrowStatement;
     function isTryStatement(node) {
-        return node.kind === 248 /* TryStatement */;
+        return node.kind === 250 /* TryStatement */;
     }
     ts.isTryStatement = isTryStatement;
     function isDebuggerStatement(node) {
-        return node.kind === 249 /* DebuggerStatement */;
+        return node.kind === 251 /* DebuggerStatement */;
     }
     ts.isDebuggerStatement = isDebuggerStatement;
     function isVariableDeclaration(node) {
-        return node.kind === 250 /* VariableDeclaration */;
+        return node.kind === 252 /* VariableDeclaration */;
     }
     ts.isVariableDeclaration = isVariableDeclaration;
     function isVariableDeclarationList(node) {
-        return node.kind === 251 /* VariableDeclarationList */;
+        return node.kind === 253 /* VariableDeclarationList */;
     }
     ts.isVariableDeclarationList = isVariableDeclarationList;
     function isFunctionDeclaration(node) {
-        return node.kind === 252 /* FunctionDeclaration */;
+        return node.kind === 254 /* FunctionDeclaration */;
     }
     ts.isFunctionDeclaration = isFunctionDeclaration;
     function isClassDeclaration(node) {
-        return node.kind === 253 /* ClassDeclaration */;
+        return node.kind === 255 /* ClassDeclaration */;
     }
     ts.isClassDeclaration = isClassDeclaration;
     function isInterfaceDeclaration(node) {
-        return node.kind === 254 /* InterfaceDeclaration */;
+        return node.kind === 256 /* InterfaceDeclaration */;
     }
     ts.isInterfaceDeclaration = isInterfaceDeclaration;
     function isTypeAliasDeclaration(node) {
-        return node.kind === 255 /* TypeAliasDeclaration */;
+        return node.kind === 257 /* TypeAliasDeclaration */;
     }
     ts.isTypeAliasDeclaration = isTypeAliasDeclaration;
     function isEnumDeclaration(node) {
-        return node.kind === 256 /* EnumDeclaration */;
+        return node.kind === 258 /* EnumDeclaration */;
     }
     ts.isEnumDeclaration = isEnumDeclaration;
     function isModuleDeclaration(node) {
-        return node.kind === 257 /* ModuleDeclaration */;
+        return node.kind === 259 /* ModuleDeclaration */;
     }
     ts.isModuleDeclaration = isModuleDeclaration;
     function isModuleBlock(node) {
-        return node.kind === 258 /* ModuleBlock */;
+        return node.kind === 260 /* ModuleBlock */;
     }
     ts.isModuleBlock = isModuleBlock;
     function isCaseBlock(node) {
-        return node.kind === 259 /* CaseBlock */;
+        return node.kind === 261 /* CaseBlock */;
     }
     ts.isCaseBlock = isCaseBlock;
     function isNamespaceExportDeclaration(node) {
-        return node.kind === 260 /* NamespaceExportDeclaration */;
+        return node.kind === 262 /* NamespaceExportDeclaration */;
     }
     ts.isNamespaceExportDeclaration = isNamespaceExportDeclaration;
     function isImportEqualsDeclaration(node) {
-        return node.kind === 261 /* ImportEqualsDeclaration */;
+        return node.kind === 263 /* ImportEqualsDeclaration */;
     }
     ts.isImportEqualsDeclaration = isImportEqualsDeclaration;
     function isImportDeclaration(node) {
-        return node.kind === 262 /* ImportDeclaration */;
+        return node.kind === 264 /* ImportDeclaration */;
     }
     ts.isImportDeclaration = isImportDeclaration;
     function isImportClause(node) {
-        return node.kind === 263 /* ImportClause */;
+        return node.kind === 265 /* ImportClause */;
     }
     ts.isImportClause = isImportClause;
     function isNamespaceImport(node) {
-        return node.kind === 264 /* NamespaceImport */;
+        return node.kind === 266 /* NamespaceImport */;
     }
     ts.isNamespaceImport = isNamespaceImport;
     function isNamespaceExport(node) {
-        return node.kind === 270 /* NamespaceExport */;
+        return node.kind === 272 /* NamespaceExport */;
     }
     ts.isNamespaceExport = isNamespaceExport;
     function isNamedImports(node) {
-        return node.kind === 265 /* NamedImports */;
+        return node.kind === 267 /* NamedImports */;
     }
     ts.isNamedImports = isNamedImports;
     function isImportSpecifier(node) {
-        return node.kind === 266 /* ImportSpecifier */;
+        return node.kind === 268 /* ImportSpecifier */;
     }
     ts.isImportSpecifier = isImportSpecifier;
     function isExportAssignment(node) {
-        return node.kind === 267 /* ExportAssignment */;
+        return node.kind === 269 /* ExportAssignment */;
     }
     ts.isExportAssignment = isExportAssignment;
     function isExportDeclaration(node) {
-        return node.kind === 268 /* ExportDeclaration */;
+        return node.kind === 270 /* ExportDeclaration */;
     }
     ts.isExportDeclaration = isExportDeclaration;
     function isNamedExports(node) {
-        return node.kind === 269 /* NamedExports */;
+        return node.kind === 271 /* NamedExports */;
     }
     ts.isNamedExports = isNamedExports;
     function isExportSpecifier(node) {
-        return node.kind === 271 /* ExportSpecifier */;
+        return node.kind === 273 /* ExportSpecifier */;
     }
     ts.isExportSpecifier = isExportSpecifier;
     function isMissingDeclaration(node) {
-        return node.kind === 272 /* MissingDeclaration */;
+        return node.kind === 274 /* MissingDeclaration */;
     }
     ts.isMissingDeclaration = isMissingDeclaration;
     function isNotEmittedStatement(node) {
-        return node.kind === 339 /* NotEmittedStatement */;
+        return node.kind === 344 /* NotEmittedStatement */;
     }
     ts.isNotEmittedStatement = isNotEmittedStatement;
     /* @internal */
     function isSyntheticReference(node) {
-        return node.kind === 344 /* SyntheticReferenceExpression */;
+        return node.kind === 349 /* SyntheticReferenceExpression */;
     }
     ts.isSyntheticReference = isSyntheticReference;
     /* @internal */
     function isMergeDeclarationMarker(node) {
-        return node.kind === 342 /* MergeDeclarationMarker */;
+        return node.kind === 347 /* MergeDeclarationMarker */;
     }
     ts.isMergeDeclarationMarker = isMergeDeclarationMarker;
     /* @internal */
     function isEndOfDeclarationMarker(node) {
-        return node.kind === 343 /* EndOfDeclarationMarker */;
+        return node.kind === 348 /* EndOfDeclarationMarker */;
     }
     ts.isEndOfDeclarationMarker = isEndOfDeclarationMarker;
     // Module References
     function isExternalModuleReference(node) {
-        return node.kind === 273 /* ExternalModuleReference */;
+        return node.kind === 275 /* ExternalModuleReference */;
     }
     ts.isExternalModuleReference = isExternalModuleReference;
     // JSX
     function isJsxElement(node) {
-        return node.kind === 274 /* JsxElement */;
+        return node.kind === 276 /* JsxElement */;
     }
     ts.isJsxElement = isJsxElement;
     function isJsxSelfClosingElement(node) {
-        return node.kind === 275 /* JsxSelfClosingElement */;
+        return node.kind === 277 /* JsxSelfClosingElement */;
     }
     ts.isJsxSelfClosingElement = isJsxSelfClosingElement;
     function isJsxOpeningElement(node) {
-        return node.kind === 276 /* JsxOpeningElement */;
+        return node.kind === 278 /* JsxOpeningElement */;
     }
     ts.isJsxOpeningElement = isJsxOpeningElement;
     function isJsxClosingElement(node) {
-        return node.kind === 277 /* JsxClosingElement */;
+        return node.kind === 279 /* JsxClosingElement */;
     }
     ts.isJsxClosingElement = isJsxClosingElement;
     function isJsxFragment(node) {
-        return node.kind === 278 /* JsxFragment */;
+        return node.kind === 280 /* JsxFragment */;
     }
     ts.isJsxFragment = isJsxFragment;
     function isJsxOpeningFragment(node) {
-        return node.kind === 279 /* JsxOpeningFragment */;
+        return node.kind === 281 /* JsxOpeningFragment */;
     }
     ts.isJsxOpeningFragment = isJsxOpeningFragment;
     function isJsxClosingFragment(node) {
-        return node.kind === 280 /* JsxClosingFragment */;
+        return node.kind === 282 /* JsxClosingFragment */;
     }
     ts.isJsxClosingFragment = isJsxClosingFragment;
     function isJsxAttribute(node) {
-        return node.kind === 281 /* JsxAttribute */;
+        return node.kind === 283 /* JsxAttribute */;
     }
     ts.isJsxAttribute = isJsxAttribute;
     function isJsxAttributes(node) {
-        return node.kind === 282 /* JsxAttributes */;
+        return node.kind === 284 /* JsxAttributes */;
     }
     ts.isJsxAttributes = isJsxAttributes;
     function isJsxSpreadAttribute(node) {
-        return node.kind === 283 /* JsxSpreadAttribute */;
+        return node.kind === 285 /* JsxSpreadAttribute */;
     }
     ts.isJsxSpreadAttribute = isJsxSpreadAttribute;
     function isJsxExpression(node) {
-        return node.kind === 284 /* JsxExpression */;
+        return node.kind === 286 /* JsxExpression */;
     }
     ts.isJsxExpression = isJsxExpression;
     // Clauses
     function isCaseClause(node) {
-        return node.kind === 285 /* CaseClause */;
+        return node.kind === 287 /* CaseClause */;
     }
     ts.isCaseClause = isCaseClause;
     function isDefaultClause(node) {
-        return node.kind === 286 /* DefaultClause */;
+        return node.kind === 288 /* DefaultClause */;
     }
     ts.isDefaultClause = isDefaultClause;
     function isHeritageClause(node) {
-        return node.kind === 287 /* HeritageClause */;
+        return node.kind === 289 /* HeritageClause */;
     }
     ts.isHeritageClause = isHeritageClause;
     function isCatchClause(node) {
-        return node.kind === 288 /* CatchClause */;
+        return node.kind === 290 /* CatchClause */;
     }
     ts.isCatchClause = isCatchClause;
     // Property assignments
     function isPropertyAssignment(node) {
-        return node.kind === 289 /* PropertyAssignment */;
+        return node.kind === 291 /* PropertyAssignment */;
     }
     ts.isPropertyAssignment = isPropertyAssignment;
     function isShorthandPropertyAssignment(node) {
-        return node.kind === 290 /* ShorthandPropertyAssignment */;
+        return node.kind === 292 /* ShorthandPropertyAssignment */;
     }
     ts.isShorthandPropertyAssignment = isShorthandPropertyAssignment;
     function isSpreadAssignment(node) {
-        return node.kind === 291 /* SpreadAssignment */;
+        return node.kind === 293 /* SpreadAssignment */;
     }
     ts.isSpreadAssignment = isSpreadAssignment;
     // Enum
     function isEnumMember(node) {
-        return node.kind === 292 /* EnumMember */;
+        return node.kind === 294 /* EnumMember */;
     }
     ts.isEnumMember = isEnumMember;
     // Unparsed
     // TODO(rbuckton): isUnparsedPrologue
     function isUnparsedPrepend(node) {
-        return node.kind === 294 /* UnparsedPrepend */;
+        return node.kind === 296 /* UnparsedPrepend */;
     }
     ts.isUnparsedPrepend = isUnparsedPrepend;
     // TODO(rbuckton): isUnparsedText
@@ -27836,164 +28438,176 @@
     // TODO(rbuckton): isUnparsedSyntheticReference
     // Top-level nodes
     function isSourceFile(node) {
-        return node.kind === 298 /* SourceFile */;
+        return node.kind === 300 /* SourceFile */;
     }
     ts.isSourceFile = isSourceFile;
     function isBundle(node) {
-        return node.kind === 299 /* Bundle */;
+        return node.kind === 301 /* Bundle */;
     }
     ts.isBundle = isBundle;
     function isUnparsedSource(node) {
-        return node.kind === 300 /* UnparsedSource */;
+        return node.kind === 302 /* UnparsedSource */;
     }
     ts.isUnparsedSource = isUnparsedSource;
     // TODO(rbuckton): isInputFiles
     // JSDoc Elements
     function isJSDocTypeExpression(node) {
-        return node.kind === 302 /* JSDocTypeExpression */;
+        return node.kind === 304 /* JSDocTypeExpression */;
     }
     ts.isJSDocTypeExpression = isJSDocTypeExpression;
     function isJSDocNameReference(node) {
-        return node.kind === 303 /* JSDocNameReference */;
+        return node.kind === 305 /* JSDocNameReference */;
     }
     ts.isJSDocNameReference = isJSDocNameReference;
+    function isJSDocMemberName(node) {
+        return node.kind === 306 /* JSDocMemberName */;
+    }
+    ts.isJSDocMemberName = isJSDocMemberName;
     function isJSDocLink(node) {
-        return node.kind === 316 /* JSDocLink */;
+        return node.kind === 319 /* JSDocLink */;
     }
     ts.isJSDocLink = isJSDocLink;
+    function isJSDocLinkCode(node) {
+        return node.kind === 320 /* JSDocLinkCode */;
+    }
+    ts.isJSDocLinkCode = isJSDocLinkCode;
+    function isJSDocLinkPlain(node) {
+        return node.kind === 321 /* JSDocLinkPlain */;
+    }
+    ts.isJSDocLinkPlain = isJSDocLinkPlain;
     function isJSDocAllType(node) {
-        return node.kind === 304 /* JSDocAllType */;
+        return node.kind === 307 /* JSDocAllType */;
     }
     ts.isJSDocAllType = isJSDocAllType;
     function isJSDocUnknownType(node) {
-        return node.kind === 305 /* JSDocUnknownType */;
+        return node.kind === 308 /* JSDocUnknownType */;
     }
     ts.isJSDocUnknownType = isJSDocUnknownType;
     function isJSDocNullableType(node) {
-        return node.kind === 306 /* JSDocNullableType */;
+        return node.kind === 309 /* JSDocNullableType */;
     }
     ts.isJSDocNullableType = isJSDocNullableType;
     function isJSDocNonNullableType(node) {
-        return node.kind === 307 /* JSDocNonNullableType */;
+        return node.kind === 310 /* JSDocNonNullableType */;
     }
     ts.isJSDocNonNullableType = isJSDocNonNullableType;
     function isJSDocOptionalType(node) {
-        return node.kind === 308 /* JSDocOptionalType */;
+        return node.kind === 311 /* JSDocOptionalType */;
     }
     ts.isJSDocOptionalType = isJSDocOptionalType;
     function isJSDocFunctionType(node) {
-        return node.kind === 309 /* JSDocFunctionType */;
+        return node.kind === 312 /* JSDocFunctionType */;
     }
     ts.isJSDocFunctionType = isJSDocFunctionType;
     function isJSDocVariadicType(node) {
-        return node.kind === 310 /* JSDocVariadicType */;
+        return node.kind === 313 /* JSDocVariadicType */;
     }
     ts.isJSDocVariadicType = isJSDocVariadicType;
     function isJSDocNamepathType(node) {
-        return node.kind === 311 /* JSDocNamepathType */;
+        return node.kind === 314 /* JSDocNamepathType */;
     }
     ts.isJSDocNamepathType = isJSDocNamepathType;
     function isJSDoc(node) {
-        return node.kind === 312 /* JSDocComment */;
+        return node.kind === 315 /* JSDocComment */;
     }
     ts.isJSDoc = isJSDoc;
     function isJSDocTypeLiteral(node) {
-        return node.kind === 314 /* JSDocTypeLiteral */;
+        return node.kind === 317 /* JSDocTypeLiteral */;
     }
     ts.isJSDocTypeLiteral = isJSDocTypeLiteral;
     function isJSDocSignature(node) {
-        return node.kind === 315 /* JSDocSignature */;
+        return node.kind === 318 /* JSDocSignature */;
     }
     ts.isJSDocSignature = isJSDocSignature;
     // JSDoc Tags
     function isJSDocAugmentsTag(node) {
-        return node.kind === 318 /* JSDocAugmentsTag */;
+        return node.kind === 323 /* JSDocAugmentsTag */;
     }
     ts.isJSDocAugmentsTag = isJSDocAugmentsTag;
     function isJSDocAuthorTag(node) {
-        return node.kind === 320 /* JSDocAuthorTag */;
+        return node.kind === 325 /* JSDocAuthorTag */;
     }
     ts.isJSDocAuthorTag = isJSDocAuthorTag;
     function isJSDocClassTag(node) {
-        return node.kind === 322 /* JSDocClassTag */;
+        return node.kind === 327 /* JSDocClassTag */;
     }
     ts.isJSDocClassTag = isJSDocClassTag;
     function isJSDocCallbackTag(node) {
-        return node.kind === 328 /* JSDocCallbackTag */;
+        return node.kind === 333 /* JSDocCallbackTag */;
     }
     ts.isJSDocCallbackTag = isJSDocCallbackTag;
     function isJSDocPublicTag(node) {
-        return node.kind === 323 /* JSDocPublicTag */;
+        return node.kind === 328 /* JSDocPublicTag */;
     }
     ts.isJSDocPublicTag = isJSDocPublicTag;
     function isJSDocPrivateTag(node) {
-        return node.kind === 324 /* JSDocPrivateTag */;
+        return node.kind === 329 /* JSDocPrivateTag */;
     }
     ts.isJSDocPrivateTag = isJSDocPrivateTag;
     function isJSDocProtectedTag(node) {
-        return node.kind === 325 /* JSDocProtectedTag */;
+        return node.kind === 330 /* JSDocProtectedTag */;
     }
     ts.isJSDocProtectedTag = isJSDocProtectedTag;
     function isJSDocReadonlyTag(node) {
-        return node.kind === 326 /* JSDocReadonlyTag */;
+        return node.kind === 331 /* JSDocReadonlyTag */;
     }
     ts.isJSDocReadonlyTag = isJSDocReadonlyTag;
     function isJSDocOverrideTag(node) {
-        return node.kind === 327 /* JSDocOverrideTag */;
+        return node.kind === 332 /* JSDocOverrideTag */;
     }
     ts.isJSDocOverrideTag = isJSDocOverrideTag;
     function isJSDocDeprecatedTag(node) {
-        return node.kind === 321 /* JSDocDeprecatedTag */;
+        return node.kind === 326 /* JSDocDeprecatedTag */;
     }
     ts.isJSDocDeprecatedTag = isJSDocDeprecatedTag;
     function isJSDocSeeTag(node) {
-        return node.kind === 336 /* JSDocSeeTag */;
+        return node.kind === 341 /* JSDocSeeTag */;
     }
     ts.isJSDocSeeTag = isJSDocSeeTag;
     function isJSDocEnumTag(node) {
-        return node.kind === 329 /* JSDocEnumTag */;
+        return node.kind === 334 /* JSDocEnumTag */;
     }
     ts.isJSDocEnumTag = isJSDocEnumTag;
     function isJSDocParameterTag(node) {
-        return node.kind === 330 /* JSDocParameterTag */;
+        return node.kind === 335 /* JSDocParameterTag */;
     }
     ts.isJSDocParameterTag = isJSDocParameterTag;
     function isJSDocReturnTag(node) {
-        return node.kind === 331 /* JSDocReturnTag */;
+        return node.kind === 336 /* JSDocReturnTag */;
     }
     ts.isJSDocReturnTag = isJSDocReturnTag;
     function isJSDocThisTag(node) {
-        return node.kind === 332 /* JSDocThisTag */;
+        return node.kind === 337 /* JSDocThisTag */;
     }
     ts.isJSDocThisTag = isJSDocThisTag;
     function isJSDocTypeTag(node) {
-        return node.kind === 333 /* JSDocTypeTag */;
+        return node.kind === 338 /* JSDocTypeTag */;
     }
     ts.isJSDocTypeTag = isJSDocTypeTag;
     function isJSDocTemplateTag(node) {
-        return node.kind === 334 /* JSDocTemplateTag */;
+        return node.kind === 339 /* JSDocTemplateTag */;
     }
     ts.isJSDocTemplateTag = isJSDocTemplateTag;
     function isJSDocTypedefTag(node) {
-        return node.kind === 335 /* JSDocTypedefTag */;
+        return node.kind === 340 /* JSDocTypedefTag */;
     }
     ts.isJSDocTypedefTag = isJSDocTypedefTag;
     function isJSDocUnknownTag(node) {
-        return node.kind === 317 /* JSDocTag */;
+        return node.kind === 322 /* JSDocTag */;
     }
     ts.isJSDocUnknownTag = isJSDocUnknownTag;
     function isJSDocPropertyTag(node) {
-        return node.kind === 337 /* JSDocPropertyTag */;
+        return node.kind === 342 /* JSDocPropertyTag */;
     }
     ts.isJSDocPropertyTag = isJSDocPropertyTag;
     function isJSDocImplementsTag(node) {
-        return node.kind === 319 /* JSDocImplementsTag */;
+        return node.kind === 324 /* JSDocImplementsTag */;
     }
     ts.isJSDocImplementsTag = isJSDocImplementsTag;
     // Synthesized list
     /* @internal */
     function isSyntaxList(n) {
-        return n.kind === 338 /* SyntaxList */;
+        return n.kind === 343 /* SyntaxList */;
     }
     ts.isSyntaxList = isSyntaxList;
 })(ts || (ts = {}));
@@ -28112,7 +28726,7 @@
     ts.createForOfBindingStatement = createForOfBindingStatement;
     function insertLeadingStatement(factory, dest, source) {
         if (ts.isBlock(dest)) {
-            return factory.updateBlock(dest, ts.setTextRange(factory.createNodeArray(__spreadArray([source], dest.statements)), dest.statements));
+            return factory.updateBlock(dest, ts.setTextRange(factory.createNodeArray(__spreadArray([source], dest.statements, true)), dest.statements));
         }
         else {
             return factory.createBlock(factory.createNodeArray([dest, source]), /*multiLine*/ true);
@@ -28192,19 +28806,74 @@
             ts.Debug.failBadSyntaxKind(property.name, "Private identifiers are not allowed in object literals.");
         }
         switch (property.kind) {
-            case 168 /* GetAccessor */:
-            case 169 /* SetAccessor */:
+            case 170 /* GetAccessor */:
+            case 171 /* SetAccessor */:
                 return createExpressionForAccessorDeclaration(factory, node.properties, property, receiver, !!node.multiLine);
-            case 289 /* PropertyAssignment */:
+            case 291 /* PropertyAssignment */:
                 return createExpressionForPropertyAssignment(factory, property, receiver);
-            case 290 /* ShorthandPropertyAssignment */:
+            case 292 /* ShorthandPropertyAssignment */:
                 return createExpressionForShorthandPropertyAssignment(factory, property, receiver);
-            case 166 /* MethodDeclaration */:
+            case 167 /* MethodDeclaration */:
                 return createExpressionForMethodDeclaration(factory, property, receiver);
         }
     }
     ts.createExpressionForObjectLiteralElementLike = createExpressionForObjectLiteralElementLike;
     /**
+     * Expand the read and increment/decrement operations a pre- or post-increment or pre- or post-decrement expression.
+     *
+     * ```ts
+     * // input
+     * <expression>++
+     * // output (if result is not discarded)
+     * var <temp>;
+     * (<temp> = <expression>, <resultVariable> = <temp>++, <temp>)
+     * // output (if result is discarded)
+     * var <temp>;
+     * (<temp> = <expression>, <temp>++, <temp>)
+     *
+     * // input
+     * ++<expression>
+     * // output (if result is not discarded)
+     * var <temp>;
+     * (<temp> = <expression>, <resultVariable> = ++<temp>)
+     * // output (if result is discarded)
+     * var <temp>;
+     * (<temp> = <expression>, ++<temp>)
+     * ```
+     *
+     * It is up to the caller to supply a temporary variable for `<resultVariable>` if one is needed.
+     * The temporary variable `<temp>` is injected so that `++` and `--` work uniformly with `number` and `bigint`.
+     * The result of the expression is always the final result of incrementing or decrementing the expression, so that it can be used for storage.
+     *
+     * @param factory {@link NodeFactory} used to create the expanded representation.
+     * @param node The original prefix or postfix unary node.
+     * @param expression The expression to use as the value to increment or decrement
+     * @param resultVariable A temporary variable in which to store the result. Pass `undefined` if the result is discarded, or if the value of `<temp>` is the expected result.
+     */
+    function expandPreOrPostfixIncrementOrDecrementExpression(factory, node, expression, recordTempVariable, resultVariable) {
+        var operator = node.operator;
+        ts.Debug.assert(operator === 45 /* PlusPlusToken */ || operator === 46 /* MinusMinusToken */, "Expected 'node' to be a pre- or post-increment or pre- or post-decrement expression");
+        var temp = factory.createTempVariable(recordTempVariable);
+        expression = factory.createAssignment(temp, expression);
+        ts.setTextRange(expression, node.operand);
+        var operation = ts.isPrefixUnaryExpression(node) ?
+            factory.createPrefixUnaryExpression(operator, temp) :
+            factory.createPostfixUnaryExpression(temp, operator);
+        ts.setTextRange(operation, node);
+        if (resultVariable) {
+            operation = factory.createAssignment(resultVariable, operation);
+            ts.setTextRange(operation, node);
+        }
+        expression = factory.createComma(expression, operation);
+        ts.setTextRange(expression, node);
+        if (ts.isPostfixUnaryExpression(node)) {
+            expression = factory.createComma(expression, temp);
+            ts.setTextRange(expression, node);
+        }
+        return expression;
+    }
+    ts.expandPreOrPostfixIncrementOrDecrementExpression = expandPreOrPostfixIncrementOrDecrementExpression;
+    /**
      * Gets whether an identifier should only be referred to by its internal name.
      */
     function isInternalName(node) {
@@ -28252,21 +28921,21 @@
     }
     ts.startsWithUseStrict = startsWithUseStrict;
     function isCommaSequence(node) {
-        return node.kind === 217 /* BinaryExpression */ && node.operatorToken.kind === 27 /* CommaToken */ ||
-            node.kind === 341 /* CommaListExpression */;
+        return node.kind === 219 /* BinaryExpression */ && node.operatorToken.kind === 27 /* CommaToken */ ||
+            node.kind === 346 /* CommaListExpression */;
     }
     ts.isCommaSequence = isCommaSequence;
     function isOuterExpression(node, kinds) {
         if (kinds === void 0) { kinds = 15 /* All */; }
         switch (node.kind) {
-            case 208 /* ParenthesizedExpression */:
+            case 210 /* ParenthesizedExpression */:
                 return (kinds & 1 /* Parentheses */) !== 0;
-            case 207 /* TypeAssertionExpression */:
-            case 225 /* AsExpression */:
+            case 209 /* TypeAssertionExpression */:
+            case 227 /* AsExpression */:
                 return (kinds & 2 /* TypeAssertions */) !== 0;
-            case 226 /* NonNullExpression */:
+            case 228 /* NonNullExpression */:
                 return (kinds & 4 /* NonNullAssertions */) !== 0;
-            case 340 /* PartiallyEmittedExpression */:
+            case 345 /* PartiallyEmittedExpression */:
                 return (kinds & 8 /* PartiallyEmittedExpressions */) !== 0;
         }
         return false;
@@ -28387,10 +29056,10 @@
             var name = namespaceDeclaration.name;
             return ts.isGeneratedIdentifier(name) ? name : factory.createIdentifier(ts.getSourceTextOfNodeFromSourceFile(sourceFile, name) || ts.idText(name));
         }
-        if (node.kind === 262 /* ImportDeclaration */ && node.importClause) {
+        if (node.kind === 264 /* ImportDeclaration */ && node.importClause) {
             return factory.getGeneratedNameForNode(node);
         }
-        if (node.kind === 268 /* ExportDeclaration */ && node.moduleSpecifier) {
+        if (node.kind === 270 /* ExportDeclaration */ && node.moduleSpecifier) {
             return factory.getGeneratedNameForNode(node);
         }
         return undefined;
@@ -28509,7 +29178,7 @@
         }
         if (ts.isObjectLiteralElementLike(bindingElement)) {
             switch (bindingElement.kind) {
-                case 289 /* PropertyAssignment */:
+                case 291 /* PropertyAssignment */:
                     // `b` in `({ a: b } = ...)`
                     // `b` in `({ a: b = 1 } = ...)`
                     // `{b}` in `({ a: {b} } = ...)`
@@ -28521,11 +29190,11 @@
                     // `b[0]` in `({ a: b[0] } = ...)`
                     // `b[0]` in `({ a: b[0] = 1 } = ...)`
                     return getTargetOfBindingOrAssignmentElement(bindingElement.initializer);
-                case 290 /* ShorthandPropertyAssignment */:
+                case 292 /* ShorthandPropertyAssignment */:
                     // `a` in `({ a } = ...)`
                     // `a` in `({ a = 1 } = ...)`
                     return bindingElement.name;
-                case 291 /* SpreadAssignment */:
+                case 293 /* SpreadAssignment */:
                     // `a` in `({ ...a } = ...)`
                     return getTargetOfBindingOrAssignmentElement(bindingElement.expression);
             }
@@ -28557,12 +29226,12 @@
      */
     function getRestIndicatorOfBindingOrAssignmentElement(bindingElement) {
         switch (bindingElement.kind) {
-            case 161 /* Parameter */:
-            case 199 /* BindingElement */:
+            case 162 /* Parameter */:
+            case 201 /* BindingElement */:
                 // `...` in `let [...a] = ...`
                 return bindingElement.dotDotDotToken;
-            case 221 /* SpreadElement */:
-            case 291 /* SpreadAssignment */:
+            case 223 /* SpreadElement */:
+            case 293 /* SpreadAssignment */:
                 // `...` in `[...a] = ...`
                 return bindingElement;
         }
@@ -28580,7 +29249,7 @@
     ts.getPropertyNameOfBindingOrAssignmentElement = getPropertyNameOfBindingOrAssignmentElement;
     function tryGetPropertyNameOfBindingOrAssignmentElement(bindingElement) {
         switch (bindingElement.kind) {
-            case 199 /* BindingElement */:
+            case 201 /* BindingElement */:
                 // `a` in `let { a: b } = ...`
                 // `[a]` in `let { [a]: b } = ...`
                 // `"a"` in `let { "a": b } = ...`
@@ -28595,7 +29264,7 @@
                         : propertyName;
                 }
                 break;
-            case 289 /* PropertyAssignment */:
+            case 291 /* PropertyAssignment */:
                 // `a` in `({ a: b } = ...)`
                 // `[a]` in `({ [a]: b } = ...)`
                 // `"a"` in `({ "a": b } = ...)`
@@ -28610,7 +29279,7 @@
                         : propertyName;
                 }
                 break;
-            case 291 /* SpreadAssignment */:
+            case 293 /* SpreadAssignment */:
                 // `a` in `({ ...a } = ...)`
                 if (bindingElement.name && ts.isPrivateIdentifier(bindingElement.name)) {
                     return ts.Debug.failBadSyntaxKind(bindingElement.name);
@@ -28633,13 +29302,13 @@
      */
     function getElementsOfBindingOrAssignmentPattern(name) {
         switch (name.kind) {
-            case 197 /* ObjectBindingPattern */:
-            case 198 /* ArrayBindingPattern */:
-            case 200 /* ArrayLiteralExpression */:
+            case 199 /* ObjectBindingPattern */:
+            case 200 /* ArrayBindingPattern */:
+            case 202 /* ArrayLiteralExpression */:
                 // `a` in `{a}`
                 // `a` in `[a]`
                 return name.elements;
-            case 201 /* ObjectLiteralExpression */:
+            case 203 /* ObjectLiteralExpression */:
                 // `a` in `{a}`
                 return name.properties;
         }
@@ -28660,29 +29329,29 @@
     ts.getJSDocTypeAliasName = getJSDocTypeAliasName;
     function canHaveModifiers(node) {
         var kind = node.kind;
-        return kind === 161 /* Parameter */
-            || kind === 163 /* PropertySignature */
-            || kind === 164 /* PropertyDeclaration */
-            || kind === 165 /* MethodSignature */
-            || kind === 166 /* MethodDeclaration */
-            || kind === 167 /* Constructor */
-            || kind === 168 /* GetAccessor */
-            || kind === 169 /* SetAccessor */
-            || kind === 172 /* IndexSignature */
-            || kind === 209 /* FunctionExpression */
-            || kind === 210 /* ArrowFunction */
-            || kind === 222 /* ClassExpression */
-            || kind === 233 /* VariableStatement */
-            || kind === 252 /* FunctionDeclaration */
-            || kind === 253 /* ClassDeclaration */
-            || kind === 254 /* InterfaceDeclaration */
-            || kind === 255 /* TypeAliasDeclaration */
-            || kind === 256 /* EnumDeclaration */
-            || kind === 257 /* ModuleDeclaration */
-            || kind === 261 /* ImportEqualsDeclaration */
-            || kind === 262 /* ImportDeclaration */
-            || kind === 267 /* ExportAssignment */
-            || kind === 268 /* ExportDeclaration */;
+        return kind === 162 /* Parameter */
+            || kind === 164 /* PropertySignature */
+            || kind === 165 /* PropertyDeclaration */
+            || kind === 166 /* MethodSignature */
+            || kind === 167 /* MethodDeclaration */
+            || kind === 169 /* Constructor */
+            || kind === 170 /* GetAccessor */
+            || kind === 171 /* SetAccessor */
+            || kind === 174 /* IndexSignature */
+            || kind === 211 /* FunctionExpression */
+            || kind === 212 /* ArrowFunction */
+            || kind === 224 /* ClassExpression */
+            || kind === 235 /* VariableStatement */
+            || kind === 254 /* FunctionDeclaration */
+            || kind === 255 /* ClassDeclaration */
+            || kind === 256 /* InterfaceDeclaration */
+            || kind === 257 /* TypeAliasDeclaration */
+            || kind === 258 /* EnumDeclaration */
+            || kind === 259 /* ModuleDeclaration */
+            || kind === 263 /* ImportEqualsDeclaration */
+            || kind === 264 /* ImportDeclaration */
+            || kind === 269 /* ExportAssignment */
+            || kind === 270 /* ExportDeclaration */;
     }
     ts.canHaveModifiers = canHaveModifiers;
     ts.isTypeNodeOrTypeParameterDeclaration = ts.or(ts.isTypeNode, ts.isTypeParameterDeclaration);
@@ -28693,9 +29362,9 @@
     ts.isModuleName = ts.or(ts.isIdentifier, ts.isStringLiteral);
     function isLiteralTypeLikeExpression(node) {
         var kind = node.kind;
-        return kind === 103 /* NullKeyword */
-            || kind === 109 /* TrueKeyword */
-            || kind === 94 /* FalseKeyword */
+        return kind === 104 /* NullKeyword */
+            || kind === 110 /* TrueKeyword */
+            || kind === 95 /* FalseKeyword */
             || ts.isLiteralExpression(node)
             || ts.isPrefixUnaryExpression(node);
     }
@@ -28734,8 +29403,8 @@
             || kind === 32 /* LessThanEqualsToken */
             || kind === 31 /* GreaterThanToken */
             || kind === 33 /* GreaterThanEqualsToken */
-            || kind === 101 /* InstanceOfKeyword */
-            || kind === 100 /* InKeyword */;
+            || kind === 102 /* InstanceOfKeyword */
+            || kind === 101 /* InKeyword */;
     }
     function isRelationalOperatorOrHigher(kind) {
         return isRelationalOperator(kind)
@@ -29029,19 +29698,19 @@
      * that they appear in the source code. The language service depends on this property to locate nodes by position.
      */
     function forEachChild(node, cbNode, cbNodes) {
-        if (!node || node.kind <= 157 /* LastToken */) {
+        if (!node || node.kind <= 158 /* LastToken */) {
             return;
         }
         switch (node.kind) {
-            case 158 /* QualifiedName */:
+            case 159 /* QualifiedName */:
                 return visitNode(cbNode, node.left) ||
                     visitNode(cbNode, node.right);
-            case 160 /* TypeParameter */:
+            case 161 /* TypeParameter */:
                 return visitNode(cbNode, node.name) ||
                     visitNode(cbNode, node.constraint) ||
                     visitNode(cbNode, node.default) ||
                     visitNode(cbNode, node.expression);
-            case 290 /* ShorthandPropertyAssignment */:
+            case 292 /* ShorthandPropertyAssignment */:
                 return visitNodes(cbNode, cbNodes, node.decorators) ||
                     visitNodes(cbNode, cbNodes, node.modifiers) ||
                     visitNode(cbNode, node.name) ||
@@ -29049,9 +29718,9 @@
                     visitNode(cbNode, node.exclamationToken) ||
                     visitNode(cbNode, node.equalsToken) ||
                     visitNode(cbNode, node.objectAssignmentInitializer);
-            case 291 /* SpreadAssignment */:
+            case 293 /* SpreadAssignment */:
                 return visitNode(cbNode, node.expression);
-            case 161 /* Parameter */:
+            case 162 /* Parameter */:
                 return visitNodes(cbNode, cbNodes, node.decorators) ||
                     visitNodes(cbNode, cbNodes, node.modifiers) ||
                     visitNode(cbNode, node.dotDotDotToken) ||
@@ -29059,7 +29728,7 @@
                     visitNode(cbNode, node.questionToken) ||
                     visitNode(cbNode, node.type) ||
                     visitNode(cbNode, node.initializer);
-            case 164 /* PropertyDeclaration */:
+            case 165 /* PropertyDeclaration */:
                 return visitNodes(cbNode, cbNodes, node.decorators) ||
                     visitNodes(cbNode, cbNodes, node.modifiers) ||
                     visitNode(cbNode, node.name) ||
@@ -29067,51 +29736,51 @@
                     visitNode(cbNode, node.exclamationToken) ||
                     visitNode(cbNode, node.type) ||
                     visitNode(cbNode, node.initializer);
-            case 163 /* PropertySignature */:
+            case 164 /* PropertySignature */:
                 return visitNodes(cbNode, cbNodes, node.decorators) ||
                     visitNodes(cbNode, cbNodes, node.modifiers) ||
                     visitNode(cbNode, node.name) ||
                     visitNode(cbNode, node.questionToken) ||
                     visitNode(cbNode, node.type) ||
                     visitNode(cbNode, node.initializer);
-            case 289 /* PropertyAssignment */:
+            case 291 /* PropertyAssignment */:
                 return visitNodes(cbNode, cbNodes, node.decorators) ||
                     visitNodes(cbNode, cbNodes, node.modifiers) ||
                     visitNode(cbNode, node.name) ||
                     visitNode(cbNode, node.questionToken) ||
                     visitNode(cbNode, node.initializer);
-            case 250 /* VariableDeclaration */:
+            case 252 /* VariableDeclaration */:
                 return visitNodes(cbNode, cbNodes, node.decorators) ||
                     visitNodes(cbNode, cbNodes, node.modifiers) ||
                     visitNode(cbNode, node.name) ||
                     visitNode(cbNode, node.exclamationToken) ||
                     visitNode(cbNode, node.type) ||
                     visitNode(cbNode, node.initializer);
-            case 199 /* BindingElement */:
+            case 201 /* BindingElement */:
                 return visitNodes(cbNode, cbNodes, node.decorators) ||
                     visitNodes(cbNode, cbNodes, node.modifiers) ||
                     visitNode(cbNode, node.dotDotDotToken) ||
                     visitNode(cbNode, node.propertyName) ||
                     visitNode(cbNode, node.name) ||
                     visitNode(cbNode, node.initializer);
-            case 175 /* FunctionType */:
-            case 176 /* ConstructorType */:
-            case 170 /* CallSignature */:
-            case 171 /* ConstructSignature */:
-            case 172 /* IndexSignature */:
+            case 177 /* FunctionType */:
+            case 178 /* ConstructorType */:
+            case 172 /* CallSignature */:
+            case 173 /* ConstructSignature */:
+            case 174 /* IndexSignature */:
                 return visitNodes(cbNode, cbNodes, node.decorators) ||
                     visitNodes(cbNode, cbNodes, node.modifiers) ||
                     visitNodes(cbNode, cbNodes, node.typeParameters) ||
                     visitNodes(cbNode, cbNodes, node.parameters) ||
                     visitNode(cbNode, node.type);
-            case 166 /* MethodDeclaration */:
-            case 165 /* MethodSignature */:
-            case 167 /* Constructor */:
-            case 168 /* GetAccessor */:
-            case 169 /* SetAccessor */:
-            case 209 /* FunctionExpression */:
-            case 252 /* FunctionDeclaration */:
-            case 210 /* ArrowFunction */:
+            case 167 /* MethodDeclaration */:
+            case 166 /* MethodSignature */:
+            case 169 /* Constructor */:
+            case 170 /* GetAccessor */:
+            case 171 /* SetAccessor */:
+            case 211 /* FunctionExpression */:
+            case 254 /* FunctionDeclaration */:
+            case 212 /* ArrowFunction */:
                 return visitNodes(cbNode, cbNodes, node.decorators) ||
                     visitNodes(cbNode, cbNodes, node.modifiers) ||
                     visitNode(cbNode, node.asteriskToken) ||
@@ -29123,326 +29792,333 @@
                     visitNode(cbNode, node.type) ||
                     visitNode(cbNode, node.equalsGreaterThanToken) ||
                     visitNode(cbNode, node.body);
-            case 174 /* TypeReference */:
+            case 168 /* ClassStaticBlockDeclaration */:
+                return visitNodes(cbNode, cbNodes, node.decorators) ||
+                    visitNodes(cbNode, cbNodes, node.modifiers) ||
+                    visitNode(cbNode, node.body);
+            case 176 /* TypeReference */:
                 return visitNode(cbNode, node.typeName) ||
                     visitNodes(cbNode, cbNodes, node.typeArguments);
-            case 173 /* TypePredicate */:
+            case 175 /* TypePredicate */:
                 return visitNode(cbNode, node.assertsModifier) ||
                     visitNode(cbNode, node.parameterName) ||
                     visitNode(cbNode, node.type);
-            case 177 /* TypeQuery */:
+            case 179 /* TypeQuery */:
                 return visitNode(cbNode, node.exprName);
-            case 178 /* TypeLiteral */:
+            case 180 /* TypeLiteral */:
                 return visitNodes(cbNode, cbNodes, node.members);
-            case 179 /* ArrayType */:
+            case 181 /* ArrayType */:
                 return visitNode(cbNode, node.elementType);
-            case 180 /* TupleType */:
+            case 182 /* TupleType */:
                 return visitNodes(cbNode, cbNodes, node.elements);
-            case 183 /* UnionType */:
-            case 184 /* IntersectionType */:
+            case 185 /* UnionType */:
+            case 186 /* IntersectionType */:
                 return visitNodes(cbNode, cbNodes, node.types);
-            case 185 /* ConditionalType */:
+            case 187 /* ConditionalType */:
                 return visitNode(cbNode, node.checkType) ||
                     visitNode(cbNode, node.extendsType) ||
                     visitNode(cbNode, node.trueType) ||
                     visitNode(cbNode, node.falseType);
-            case 186 /* InferType */:
+            case 188 /* InferType */:
                 return visitNode(cbNode, node.typeParameter);
-            case 196 /* ImportType */:
+            case 198 /* ImportType */:
                 return visitNode(cbNode, node.argument) ||
                     visitNode(cbNode, node.qualifier) ||
                     visitNodes(cbNode, cbNodes, node.typeArguments);
-            case 187 /* ParenthesizedType */:
-            case 189 /* TypeOperator */:
+            case 189 /* ParenthesizedType */:
+            case 191 /* TypeOperator */:
                 return visitNode(cbNode, node.type);
-            case 190 /* IndexedAccessType */:
+            case 192 /* IndexedAccessType */:
                 return visitNode(cbNode, node.objectType) ||
                     visitNode(cbNode, node.indexType);
-            case 191 /* MappedType */:
+            case 193 /* MappedType */:
                 return visitNode(cbNode, node.readonlyToken) ||
                     visitNode(cbNode, node.typeParameter) ||
                     visitNode(cbNode, node.nameType) ||
                     visitNode(cbNode, node.questionToken) ||
                     visitNode(cbNode, node.type);
-            case 192 /* LiteralType */:
+            case 194 /* LiteralType */:
                 return visitNode(cbNode, node.literal);
-            case 193 /* NamedTupleMember */:
+            case 195 /* NamedTupleMember */:
                 return visitNode(cbNode, node.dotDotDotToken) ||
                     visitNode(cbNode, node.name) ||
                     visitNode(cbNode, node.questionToken) ||
                     visitNode(cbNode, node.type);
-            case 197 /* ObjectBindingPattern */:
-            case 198 /* ArrayBindingPattern */:
+            case 199 /* ObjectBindingPattern */:
+            case 200 /* ArrayBindingPattern */:
                 return visitNodes(cbNode, cbNodes, node.elements);
-            case 200 /* ArrayLiteralExpression */:
+            case 202 /* ArrayLiteralExpression */:
                 return visitNodes(cbNode, cbNodes, node.elements);
-            case 201 /* ObjectLiteralExpression */:
+            case 203 /* ObjectLiteralExpression */:
                 return visitNodes(cbNode, cbNodes, node.properties);
-            case 202 /* PropertyAccessExpression */:
+            case 204 /* PropertyAccessExpression */:
                 return visitNode(cbNode, node.expression) ||
                     visitNode(cbNode, node.questionDotToken) ||
                     visitNode(cbNode, node.name);
-            case 203 /* ElementAccessExpression */:
+            case 205 /* ElementAccessExpression */:
                 return visitNode(cbNode, node.expression) ||
                     visitNode(cbNode, node.questionDotToken) ||
                     visitNode(cbNode, node.argumentExpression);
-            case 204 /* CallExpression */:
-            case 205 /* NewExpression */:
+            case 206 /* CallExpression */:
+            case 207 /* NewExpression */:
                 return visitNode(cbNode, node.expression) ||
                     visitNode(cbNode, node.questionDotToken) ||
                     visitNodes(cbNode, cbNodes, node.typeArguments) ||
                     visitNodes(cbNode, cbNodes, node.arguments);
-            case 206 /* TaggedTemplateExpression */:
+            case 208 /* TaggedTemplateExpression */:
                 return visitNode(cbNode, node.tag) ||
                     visitNode(cbNode, node.questionDotToken) ||
                     visitNodes(cbNode, cbNodes, node.typeArguments) ||
                     visitNode(cbNode, node.template);
-            case 207 /* TypeAssertionExpression */:
+            case 209 /* TypeAssertionExpression */:
                 return visitNode(cbNode, node.type) ||
                     visitNode(cbNode, node.expression);
-            case 208 /* ParenthesizedExpression */:
+            case 210 /* ParenthesizedExpression */:
                 return visitNode(cbNode, node.expression);
-            case 211 /* DeleteExpression */:
+            case 213 /* DeleteExpression */:
                 return visitNode(cbNode, node.expression);
-            case 212 /* TypeOfExpression */:
+            case 214 /* TypeOfExpression */:
                 return visitNode(cbNode, node.expression);
-            case 213 /* VoidExpression */:
+            case 215 /* VoidExpression */:
                 return visitNode(cbNode, node.expression);
-            case 215 /* PrefixUnaryExpression */:
+            case 217 /* PrefixUnaryExpression */:
                 return visitNode(cbNode, node.operand);
-            case 220 /* YieldExpression */:
+            case 222 /* YieldExpression */:
                 return visitNode(cbNode, node.asteriskToken) ||
                     visitNode(cbNode, node.expression);
-            case 214 /* AwaitExpression */:
+            case 216 /* AwaitExpression */:
                 return visitNode(cbNode, node.expression);
-            case 216 /* PostfixUnaryExpression */:
+            case 218 /* PostfixUnaryExpression */:
                 return visitNode(cbNode, node.operand);
-            case 217 /* BinaryExpression */:
+            case 219 /* BinaryExpression */:
                 return visitNode(cbNode, node.left) ||
                     visitNode(cbNode, node.operatorToken) ||
                     visitNode(cbNode, node.right);
-            case 225 /* AsExpression */:
+            case 227 /* AsExpression */:
                 return visitNode(cbNode, node.expression) ||
                     visitNode(cbNode, node.type);
-            case 226 /* NonNullExpression */:
+            case 228 /* NonNullExpression */:
                 return visitNode(cbNode, node.expression);
-            case 227 /* MetaProperty */:
+            case 229 /* MetaProperty */:
                 return visitNode(cbNode, node.name);
-            case 218 /* ConditionalExpression */:
+            case 220 /* ConditionalExpression */:
                 return visitNode(cbNode, node.condition) ||
                     visitNode(cbNode, node.questionToken) ||
                     visitNode(cbNode, node.whenTrue) ||
                     visitNode(cbNode, node.colonToken) ||
                     visitNode(cbNode, node.whenFalse);
-            case 221 /* SpreadElement */:
+            case 223 /* SpreadElement */:
                 return visitNode(cbNode, node.expression);
-            case 231 /* Block */:
-            case 258 /* ModuleBlock */:
+            case 233 /* Block */:
+            case 260 /* ModuleBlock */:
                 return visitNodes(cbNode, cbNodes, node.statements);
-            case 298 /* SourceFile */:
+            case 300 /* SourceFile */:
                 return visitNodes(cbNode, cbNodes, node.statements) ||
                     visitNode(cbNode, node.endOfFileToken);
-            case 233 /* VariableStatement */:
+            case 235 /* VariableStatement */:
                 return visitNodes(cbNode, cbNodes, node.decorators) ||
                     visitNodes(cbNode, cbNodes, node.modifiers) ||
                     visitNode(cbNode, node.declarationList);
-            case 251 /* VariableDeclarationList */:
+            case 253 /* VariableDeclarationList */:
                 return visitNodes(cbNode, cbNodes, node.declarations);
-            case 234 /* ExpressionStatement */:
+            case 236 /* ExpressionStatement */:
                 return visitNode(cbNode, node.expression);
-            case 235 /* IfStatement */:
+            case 237 /* IfStatement */:
                 return visitNode(cbNode, node.expression) ||
                     visitNode(cbNode, node.thenStatement) ||
                     visitNode(cbNode, node.elseStatement);
-            case 236 /* DoStatement */:
+            case 238 /* DoStatement */:
                 return visitNode(cbNode, node.statement) ||
                     visitNode(cbNode, node.expression);
-            case 237 /* WhileStatement */:
+            case 239 /* WhileStatement */:
                 return visitNode(cbNode, node.expression) ||
                     visitNode(cbNode, node.statement);
-            case 238 /* ForStatement */:
+            case 240 /* ForStatement */:
                 return visitNode(cbNode, node.initializer) ||
                     visitNode(cbNode, node.condition) ||
                     visitNode(cbNode, node.incrementor) ||
                     visitNode(cbNode, node.statement);
-            case 239 /* ForInStatement */:
+            case 241 /* ForInStatement */:
                 return visitNode(cbNode, node.initializer) ||
                     visitNode(cbNode, node.expression) ||
                     visitNode(cbNode, node.statement);
-            case 240 /* ForOfStatement */:
+            case 242 /* ForOfStatement */:
                 return visitNode(cbNode, node.awaitModifier) ||
                     visitNode(cbNode, node.initializer) ||
                     visitNode(cbNode, node.expression) ||
                     visitNode(cbNode, node.statement);
-            case 241 /* ContinueStatement */:
-            case 242 /* BreakStatement */:
+            case 243 /* ContinueStatement */:
+            case 244 /* BreakStatement */:
                 return visitNode(cbNode, node.label);
-            case 243 /* ReturnStatement */:
+            case 245 /* ReturnStatement */:
                 return visitNode(cbNode, node.expression);
-            case 244 /* WithStatement */:
+            case 246 /* WithStatement */:
                 return visitNode(cbNode, node.expression) ||
                     visitNode(cbNode, node.statement);
-            case 245 /* SwitchStatement */:
+            case 247 /* SwitchStatement */:
                 return visitNode(cbNode, node.expression) ||
                     visitNode(cbNode, node.caseBlock);
-            case 259 /* CaseBlock */:
+            case 261 /* CaseBlock */:
                 return visitNodes(cbNode, cbNodes, node.clauses);
-            case 285 /* CaseClause */:
+            case 287 /* CaseClause */:
                 return visitNode(cbNode, node.expression) ||
                     visitNodes(cbNode, cbNodes, node.statements);
-            case 286 /* DefaultClause */:
+            case 288 /* DefaultClause */:
                 return visitNodes(cbNode, cbNodes, node.statements);
-            case 246 /* LabeledStatement */:
+            case 248 /* LabeledStatement */:
                 return visitNode(cbNode, node.label) ||
                     visitNode(cbNode, node.statement);
-            case 247 /* ThrowStatement */:
+            case 249 /* ThrowStatement */:
                 return visitNode(cbNode, node.expression);
-            case 248 /* TryStatement */:
+            case 250 /* TryStatement */:
                 return visitNode(cbNode, node.tryBlock) ||
                     visitNode(cbNode, node.catchClause) ||
                     visitNode(cbNode, node.finallyBlock);
-            case 288 /* CatchClause */:
+            case 290 /* CatchClause */:
                 return visitNode(cbNode, node.variableDeclaration) ||
                     visitNode(cbNode, node.block);
-            case 162 /* Decorator */:
+            case 163 /* Decorator */:
                 return visitNode(cbNode, node.expression);
-            case 253 /* ClassDeclaration */:
-            case 222 /* ClassExpression */:
+            case 255 /* ClassDeclaration */:
+            case 224 /* ClassExpression */:
                 return visitNodes(cbNode, cbNodes, node.decorators) ||
                     visitNodes(cbNode, cbNodes, node.modifiers) ||
                     visitNode(cbNode, node.name) ||
                     visitNodes(cbNode, cbNodes, node.typeParameters) ||
                     visitNodes(cbNode, cbNodes, node.heritageClauses) ||
                     visitNodes(cbNode, cbNodes, node.members);
-            case 254 /* InterfaceDeclaration */:
+            case 256 /* InterfaceDeclaration */:
                 return visitNodes(cbNode, cbNodes, node.decorators) ||
                     visitNodes(cbNode, cbNodes, node.modifiers) ||
                     visitNode(cbNode, node.name) ||
                     visitNodes(cbNode, cbNodes, node.typeParameters) ||
                     visitNodes(cbNode, cbNodes, node.heritageClauses) ||
                     visitNodes(cbNode, cbNodes, node.members);
-            case 255 /* TypeAliasDeclaration */:
+            case 257 /* TypeAliasDeclaration */:
                 return visitNodes(cbNode, cbNodes, node.decorators) ||
                     visitNodes(cbNode, cbNodes, node.modifiers) ||
                     visitNode(cbNode, node.name) ||
                     visitNodes(cbNode, cbNodes, node.typeParameters) ||
                     visitNode(cbNode, node.type);
-            case 256 /* EnumDeclaration */:
+            case 258 /* EnumDeclaration */:
                 return visitNodes(cbNode, cbNodes, node.decorators) ||
                     visitNodes(cbNode, cbNodes, node.modifiers) ||
                     visitNode(cbNode, node.name) ||
                     visitNodes(cbNode, cbNodes, node.members);
-            case 292 /* EnumMember */:
+            case 294 /* EnumMember */:
                 return visitNode(cbNode, node.name) ||
                     visitNode(cbNode, node.initializer);
-            case 257 /* ModuleDeclaration */:
+            case 259 /* ModuleDeclaration */:
                 return visitNodes(cbNode, cbNodes, node.decorators) ||
                     visitNodes(cbNode, cbNodes, node.modifiers) ||
                     visitNode(cbNode, node.name) ||
                     visitNode(cbNode, node.body);
-            case 261 /* ImportEqualsDeclaration */:
+            case 263 /* ImportEqualsDeclaration */:
                 return visitNodes(cbNode, cbNodes, node.decorators) ||
                     visitNodes(cbNode, cbNodes, node.modifiers) ||
                     visitNode(cbNode, node.name) ||
                     visitNode(cbNode, node.moduleReference);
-            case 262 /* ImportDeclaration */:
+            case 264 /* ImportDeclaration */:
                 return visitNodes(cbNode, cbNodes, node.decorators) ||
                     visitNodes(cbNode, cbNodes, node.modifiers) ||
                     visitNode(cbNode, node.importClause) ||
                     visitNode(cbNode, node.moduleSpecifier);
-            case 263 /* ImportClause */:
+            case 265 /* ImportClause */:
                 return visitNode(cbNode, node.name) ||
                     visitNode(cbNode, node.namedBindings);
-            case 260 /* NamespaceExportDeclaration */:
+            case 262 /* NamespaceExportDeclaration */:
                 return visitNode(cbNode, node.name);
-            case 264 /* NamespaceImport */:
+            case 266 /* NamespaceImport */:
                 return visitNode(cbNode, node.name);
-            case 270 /* NamespaceExport */:
+            case 272 /* NamespaceExport */:
                 return visitNode(cbNode, node.name);
-            case 265 /* NamedImports */:
-            case 269 /* NamedExports */:
+            case 267 /* NamedImports */:
+            case 271 /* NamedExports */:
                 return visitNodes(cbNode, cbNodes, node.elements);
-            case 268 /* ExportDeclaration */:
+            case 270 /* ExportDeclaration */:
                 return visitNodes(cbNode, cbNodes, node.decorators) ||
                     visitNodes(cbNode, cbNodes, node.modifiers) ||
                     visitNode(cbNode, node.exportClause) ||
                     visitNode(cbNode, node.moduleSpecifier);
-            case 266 /* ImportSpecifier */:
-            case 271 /* ExportSpecifier */:
+            case 268 /* ImportSpecifier */:
+            case 273 /* ExportSpecifier */:
                 return visitNode(cbNode, node.propertyName) ||
                     visitNode(cbNode, node.name);
-            case 267 /* ExportAssignment */:
+            case 269 /* ExportAssignment */:
                 return visitNodes(cbNode, cbNodes, node.decorators) ||
                     visitNodes(cbNode, cbNodes, node.modifiers) ||
                     visitNode(cbNode, node.expression);
-            case 219 /* TemplateExpression */:
+            case 221 /* TemplateExpression */:
                 return visitNode(cbNode, node.head) || visitNodes(cbNode, cbNodes, node.templateSpans);
-            case 229 /* TemplateSpan */:
+            case 231 /* TemplateSpan */:
                 return visitNode(cbNode, node.expression) || visitNode(cbNode, node.literal);
-            case 194 /* TemplateLiteralType */:
+            case 196 /* TemplateLiteralType */:
                 return visitNode(cbNode, node.head) || visitNodes(cbNode, cbNodes, node.templateSpans);
-            case 195 /* TemplateLiteralTypeSpan */:
+            case 197 /* TemplateLiteralTypeSpan */:
                 return visitNode(cbNode, node.type) || visitNode(cbNode, node.literal);
-            case 159 /* ComputedPropertyName */:
+            case 160 /* ComputedPropertyName */:
                 return visitNode(cbNode, node.expression);
-            case 287 /* HeritageClause */:
+            case 289 /* HeritageClause */:
                 return visitNodes(cbNode, cbNodes, node.types);
-            case 224 /* ExpressionWithTypeArguments */:
+            case 226 /* ExpressionWithTypeArguments */:
                 return visitNode(cbNode, node.expression) ||
                     visitNodes(cbNode, cbNodes, node.typeArguments);
-            case 273 /* ExternalModuleReference */:
+            case 275 /* ExternalModuleReference */:
                 return visitNode(cbNode, node.expression);
-            case 272 /* MissingDeclaration */:
+            case 274 /* MissingDeclaration */:
                 return visitNodes(cbNode, cbNodes, node.decorators);
-            case 341 /* CommaListExpression */:
+            case 346 /* CommaListExpression */:
                 return visitNodes(cbNode, cbNodes, node.elements);
-            case 274 /* JsxElement */:
+            case 276 /* JsxElement */:
                 return visitNode(cbNode, node.openingElement) ||
                     visitNodes(cbNode, cbNodes, node.children) ||
                     visitNode(cbNode, node.closingElement);
-            case 278 /* JsxFragment */:
+            case 280 /* JsxFragment */:
                 return visitNode(cbNode, node.openingFragment) ||
                     visitNodes(cbNode, cbNodes, node.children) ||
                     visitNode(cbNode, node.closingFragment);
-            case 275 /* JsxSelfClosingElement */:
-            case 276 /* JsxOpeningElement */:
+            case 277 /* JsxSelfClosingElement */:
+            case 278 /* JsxOpeningElement */:
                 return visitNode(cbNode, node.tagName) ||
                     visitNodes(cbNode, cbNodes, node.typeArguments) ||
                     visitNode(cbNode, node.attributes);
-            case 282 /* JsxAttributes */:
+            case 284 /* JsxAttributes */:
                 return visitNodes(cbNode, cbNodes, node.properties);
-            case 281 /* JsxAttribute */:
+            case 283 /* JsxAttribute */:
                 return visitNode(cbNode, node.name) ||
                     visitNode(cbNode, node.initializer);
-            case 283 /* JsxSpreadAttribute */:
+            case 285 /* JsxSpreadAttribute */:
                 return visitNode(cbNode, node.expression);
-            case 284 /* JsxExpression */:
+            case 286 /* JsxExpression */:
                 return visitNode(cbNode, node.dotDotDotToken) ||
                     visitNode(cbNode, node.expression);
-            case 277 /* JsxClosingElement */:
+            case 279 /* JsxClosingElement */:
                 return visitNode(cbNode, node.tagName);
-            case 181 /* OptionalType */:
-            case 182 /* RestType */:
-            case 302 /* JSDocTypeExpression */:
-            case 307 /* JSDocNonNullableType */:
-            case 306 /* JSDocNullableType */:
-            case 308 /* JSDocOptionalType */:
-            case 310 /* JSDocVariadicType */:
+            case 183 /* OptionalType */:
+            case 184 /* RestType */:
+            case 304 /* JSDocTypeExpression */:
+            case 310 /* JSDocNonNullableType */:
+            case 309 /* JSDocNullableType */:
+            case 311 /* JSDocOptionalType */:
+            case 313 /* JSDocVariadicType */:
                 return visitNode(cbNode, node.type);
-            case 309 /* JSDocFunctionType */:
+            case 312 /* JSDocFunctionType */:
                 return visitNodes(cbNode, cbNodes, node.parameters) ||
                     visitNode(cbNode, node.type);
-            case 312 /* JSDocComment */:
+            case 315 /* JSDocComment */:
                 return (typeof node.comment === "string" ? undefined : visitNodes(cbNode, cbNodes, node.comment))
                     || visitNodes(cbNode, cbNodes, node.tags);
-            case 336 /* JSDocSeeTag */:
+            case 341 /* JSDocSeeTag */:
                 return visitNode(cbNode, node.tagName) ||
                     visitNode(cbNode, node.name) ||
                     (typeof node.comment === "string" ? undefined : visitNodes(cbNode, cbNodes, node.comment));
-            case 303 /* JSDocNameReference */:
+            case 305 /* JSDocNameReference */:
                 return visitNode(cbNode, node.name);
-            case 330 /* JSDocParameterTag */:
-            case 337 /* JSDocPropertyTag */:
+            case 306 /* JSDocMemberName */:
+                return visitNode(cbNode, node.left) ||
+                    visitNode(cbNode, node.right);
+            case 335 /* JSDocParameterTag */:
+            case 342 /* JSDocPropertyTag */:
                 return visitNode(cbNode, node.tagName) ||
                     (node.isNameFirst
                         ? visitNode(cbNode, node.name) ||
@@ -29451,62 +30127,64 @@
                         : visitNode(cbNode, node.typeExpression) ||
                             visitNode(cbNode, node.name) ||
                             (typeof node.comment === "string" ? undefined : visitNodes(cbNode, cbNodes, node.comment)));
-            case 320 /* JSDocAuthorTag */:
+            case 325 /* JSDocAuthorTag */:
                 return visitNode(cbNode, node.tagName) ||
                     (typeof node.comment === "string" ? undefined : visitNodes(cbNode, cbNodes, node.comment));
-            case 319 /* JSDocImplementsTag */:
+            case 324 /* JSDocImplementsTag */:
                 return visitNode(cbNode, node.tagName) ||
                     visitNode(cbNode, node.class) ||
                     (typeof node.comment === "string" ? undefined : visitNodes(cbNode, cbNodes, node.comment));
-            case 318 /* JSDocAugmentsTag */:
+            case 323 /* JSDocAugmentsTag */:
                 return visitNode(cbNode, node.tagName) ||
                     visitNode(cbNode, node.class) ||
                     (typeof node.comment === "string" ? undefined : visitNodes(cbNode, cbNodes, node.comment));
-            case 334 /* JSDocTemplateTag */:
+            case 339 /* JSDocTemplateTag */:
                 return visitNode(cbNode, node.tagName) ||
                     visitNode(cbNode, node.constraint) ||
                     visitNodes(cbNode, cbNodes, node.typeParameters) ||
                     (typeof node.comment === "string" ? undefined : visitNodes(cbNode, cbNodes, node.comment));
-            case 335 /* JSDocTypedefTag */:
+            case 340 /* JSDocTypedefTag */:
                 return visitNode(cbNode, node.tagName) ||
                     (node.typeExpression &&
-                        node.typeExpression.kind === 302 /* JSDocTypeExpression */
+                        node.typeExpression.kind === 304 /* JSDocTypeExpression */
                         ? visitNode(cbNode, node.typeExpression) ||
                             visitNode(cbNode, node.fullName) ||
                             (typeof node.comment === "string" ? undefined : visitNodes(cbNode, cbNodes, node.comment))
                         : visitNode(cbNode, node.fullName) ||
-                            visitNode(cbNode, node.typeExpression)) ||
-                    (typeof node.comment === "string" ? undefined : visitNodes(cbNode, cbNodes, node.comment));
-            case 328 /* JSDocCallbackTag */:
+                            visitNode(cbNode, node.typeExpression) ||
+                            (typeof node.comment === "string" ? undefined : visitNodes(cbNode, cbNodes, node.comment)));
+            case 333 /* JSDocCallbackTag */:
                 return visitNode(cbNode, node.tagName) ||
                     visitNode(cbNode, node.fullName) ||
                     visitNode(cbNode, node.typeExpression) ||
                     (typeof node.comment === "string" ? undefined : visitNodes(cbNode, cbNodes, node.comment));
-            case 331 /* JSDocReturnTag */:
-            case 333 /* JSDocTypeTag */:
-            case 332 /* JSDocThisTag */:
-            case 329 /* JSDocEnumTag */:
+            case 336 /* JSDocReturnTag */:
+            case 338 /* JSDocTypeTag */:
+            case 337 /* JSDocThisTag */:
+            case 334 /* JSDocEnumTag */:
                 return visitNode(cbNode, node.tagName) ||
                     visitNode(cbNode, node.typeExpression) ||
                     (typeof node.comment === "string" ? undefined : visitNodes(cbNode, cbNodes, node.comment));
-            case 315 /* JSDocSignature */:
+            case 318 /* JSDocSignature */:
                 return ts.forEach(node.typeParameters, cbNode) ||
                     ts.forEach(node.parameters, cbNode) ||
                     visitNode(cbNode, node.type);
-            case 316 /* JSDocLink */:
+            case 319 /* JSDocLink */:
+            case 320 /* JSDocLinkCode */:
+            case 321 /* JSDocLinkPlain */:
                 return visitNode(cbNode, node.name);
-            case 314 /* JSDocTypeLiteral */:
+            case 317 /* JSDocTypeLiteral */:
                 return ts.forEach(node.jsDocPropertyTags, cbNode);
-            case 317 /* JSDocTag */:
-            case 322 /* JSDocClassTag */:
-            case 323 /* JSDocPublicTag */:
-            case 324 /* JSDocPrivateTag */:
-            case 325 /* JSDocProtectedTag */:
-            case 326 /* JSDocReadonlyTag */:
-            case 321 /* JSDocDeprecatedTag */:
+            case 322 /* JSDocTag */:
+            case 327 /* JSDocClassTag */:
+            case 328 /* JSDocPublicTag */:
+            case 329 /* JSDocPrivateTag */:
+            case 330 /* JSDocProtectedTag */:
+            case 331 /* JSDocReadonlyTag */:
+            case 326 /* JSDocDeprecatedTag */:
                 return visitNode(cbNode, node.tagName)
                     || (typeof node.comment === "string" ? undefined : visitNodes(cbNode, cbNodes, node.comment));
-            case 340 /* PartiallyEmittedExpression */:
+            case 345 /* PartiallyEmittedExpression */:
                 return visitNode(cbNode, node.expression);
         }
     }
@@ -29555,7 +30233,7 @@
                         continue;
                     return res;
                 }
-                if (current.kind >= 158 /* FirstNode */) {
+                if (current.kind >= 159 /* FirstNode */) {
                     // add children in reverse order to the queue, so popping gives the first child
                     for (var _i = 0, _a = gatherPossibleChildren(current); _i < _a.length; _i++) {
                         var child = _a[_i];
@@ -29826,9 +30504,9 @@
                         case 22 /* OpenBracketToken */:
                             expression_1 = parseArrayLiteralExpression();
                             break;
-                        case 109 /* TrueKeyword */:
-                        case 94 /* FalseKeyword */:
-                        case 103 /* NullKeyword */:
+                        case 110 /* TrueKeyword */:
+                        case 95 /* FalseKeyword */:
+                        case 104 /* NullKeyword */:
                             expression_1 = parseTokenNode();
                             break;
                         case 40 /* MinusToken */:
@@ -30280,6 +30958,9 @@
         function reScanLessThanToken() {
             return currentToken = scanner.reScanLessThanToken();
         }
+        function reScanHashToken() {
+            return currentToken = scanner.reScanHashToken();
+        }
         function scanJsxIdentifier() {
             return currentToken = scanner.scanJsxIdentifier();
         }
@@ -30334,27 +31015,28 @@
             return speculationHelper(callback, 0 /* TryParse */);
         }
         function isBindingIdentifier() {
-            if (token() === 78 /* Identifier */) {
+            if (token() === 79 /* Identifier */) {
                 return true;
             }
-            return token() > 115 /* LastReservedWord */;
+            // `let await`/`let yield` in [Yield] or [Await] are allowed here and disallowed in the binder.
+            return token() > 116 /* LastReservedWord */;
         }
         // Ignore strict mode flag because we will report an error in type checker instead.
         function isIdentifier() {
-            if (token() === 78 /* Identifier */) {
+            if (token() === 79 /* Identifier */) {
                 return true;
             }
             // If we have a 'yield' keyword, and we're in the [yield] context, then 'yield' is
             // considered a keyword and is not an identifier.
-            if (token() === 124 /* YieldKeyword */ && inYieldContext()) {
+            if (token() === 125 /* YieldKeyword */ && inYieldContext()) {
                 return false;
             }
             // If we have a 'await' keyword, and we're in the [Await] context, then 'await' is
             // considered a keyword and is not an identifier.
-            if (token() === 130 /* AwaitKeyword */ && inAwaitContext()) {
+            if (token() === 131 /* AwaitKeyword */ && inAwaitContext()) {
                 return false;
             }
-            return token() > 115 /* LastReservedWord */;
+            return token() > 116 /* LastReservedWord */;
         }
         function parseExpected(kind, diagnosticMessage, shouldAdvance) {
             if (shouldAdvance === void 0) { shouldAdvance = true; }
@@ -30373,6 +31055,128 @@
             }
             return false;
         }
+        var viableKeywordSuggestions = Object.keys(ts.textToKeywordObj).filter(function (keyword) { return keyword.length > 2; });
+        /**
+         * Provides a better error message than the generic "';' expected" if possible for
+         * known common variants of a missing semicolon, such as from a mispelled names.
+         *
+         * @param node Node preceding the expected semicolon location.
+         */
+        function parseErrorForMissingSemicolonAfter(node) {
+            var _a;
+            // Tagged template literals are sometimes used in places where only simple strings are allowed, i.e.:
+            //   module `M1` {
+            //   ^^^^^^^^^^^ This block is parsed as a template literal like module`M1`.
+            if (ts.isTaggedTemplateExpression(node)) {
+                parseErrorAt(ts.skipTrivia(sourceText, node.template.pos), node.template.end, ts.Diagnostics.Module_declaration_names_may_only_use_or_quoted_strings);
+                return;
+            }
+            // Otherwise, if this isn't a well-known keyword-like identifier, give the generic fallback message.
+            var expressionText = ts.isIdentifier(node) ? ts.idText(node) : undefined;
+            if (!expressionText || !ts.isIdentifierText(expressionText, languageVersion)) {
+                parseErrorAtCurrentToken(ts.Diagnostics._0_expected, ts.tokenToString(26 /* SemicolonToken */));
+                return;
+            }
+            var pos = ts.skipTrivia(sourceText, node.pos);
+            // Some known keywords are likely signs of syntax being used improperly.
+            switch (expressionText) {
+                case "const":
+                case "let":
+                case "var":
+                    parseErrorAt(pos, node.end, ts.Diagnostics.Variable_declaration_not_allowed_at_this_location);
+                    return;
+                case "declare":
+                    // If a declared node failed to parse, it would have emitted a diagnostic already.
+                    return;
+                case "interface":
+                    parseErrorForInvalidName(ts.Diagnostics.Interface_name_cannot_be_0, ts.Diagnostics.Interface_must_be_given_a_name, 18 /* OpenBraceToken */);
+                    return;
+                case "is":
+                    parseErrorAt(pos, scanner.getTextPos(), ts.Diagnostics.A_type_predicate_is_only_allowed_in_return_type_position_for_functions_and_methods);
+                    return;
+                case "module":
+                case "namespace":
+                    parseErrorForInvalidName(ts.Diagnostics.Namespace_name_cannot_be_0, ts.Diagnostics.Namespace_must_be_given_a_name, 18 /* OpenBraceToken */);
+                    return;
+                case "type":
+                    parseErrorForInvalidName(ts.Diagnostics.Type_alias_name_cannot_be_0, ts.Diagnostics.Type_alias_must_be_given_a_name, 63 /* EqualsToken */);
+                    return;
+            }
+            // The user alternatively might have misspelled or forgotten to add a space after a common keyword.
+            var suggestion = (_a = ts.getSpellingSuggestion(expressionText, viableKeywordSuggestions, function (n) { return n; })) !== null && _a !== void 0 ? _a : getSpaceSuggestion(expressionText);
+            if (suggestion) {
+                parseErrorAt(pos, node.end, ts.Diagnostics.Unknown_keyword_or_identifier_Did_you_mean_0, suggestion);
+                return;
+            }
+            // Unknown tokens are handled with their own errors in the scanner
+            if (token() === 0 /* Unknown */) {
+                return;
+            }
+            // Otherwise, we know this some kind of unknown word, not just a missing expected semicolon.
+            parseErrorAt(pos, node.end, ts.Diagnostics.Unexpected_keyword_or_identifier);
+        }
+        /**
+         * Reports a diagnostic error for the current token being an invalid name.
+         *
+         * @param blankDiagnostic Diagnostic to report for the case of the name being blank (matched tokenIfBlankName).
+         * @param nameDiagnostic Diagnostic to report for all other cases.
+         * @param tokenIfBlankName Current token if the name was invalid for being blank (not provided / skipped).
+         */
+        function parseErrorForInvalidName(nameDiagnostic, blankDiagnostic, tokenIfBlankName) {
+            if (token() === tokenIfBlankName) {
+                parseErrorAtCurrentToken(blankDiagnostic);
+            }
+            else {
+                parseErrorAtCurrentToken(nameDiagnostic, ts.tokenToString(token()));
+            }
+        }
+        function getSpaceSuggestion(expressionText) {
+            for (var _i = 0, viableKeywordSuggestions_1 = viableKeywordSuggestions; _i < viableKeywordSuggestions_1.length; _i++) {
+                var keyword = viableKeywordSuggestions_1[_i];
+                if (expressionText.length > keyword.length + 2 && ts.startsWith(expressionText, keyword)) {
+                    return keyword + " " + expressionText.slice(keyword.length);
+                }
+            }
+            return undefined;
+        }
+        function parseSemicolonAfterPropertyName(name, type, initializer) {
+            if (token() === 59 /* AtToken */ && !scanner.hasPrecedingLineBreak()) {
+                parseErrorAtCurrentToken(ts.Diagnostics.Decorators_must_precede_the_name_and_all_keywords_of_property_declarations);
+                return;
+            }
+            if (token() === 20 /* OpenParenToken */) {
+                parseErrorAtCurrentToken(ts.Diagnostics.Cannot_start_a_function_call_in_a_type_annotation);
+                nextToken();
+                return;
+            }
+            if (type && !canParseSemicolon()) {
+                if (initializer) {
+                    parseErrorAtCurrentToken(ts.Diagnostics._0_expected, ts.tokenToString(26 /* SemicolonToken */));
+                }
+                else {
+                    parseErrorAtCurrentToken(ts.Diagnostics.Expected_for_property_initializer);
+                }
+                return;
+            }
+            if (tryParseSemicolon()) {
+                return;
+            }
+            // If an initializer was parsed but there is still an error in finding the next semicolon,
+            // we generally know there was an error already reported in the initializer...
+            //   class Example { a = new Map([), ) }
+            //                                ~
+            if (initializer) {
+                // ...unless we've found the start of a block after a property declaration, in which
+                // case we can know that regardless of the initializer we should complain on the block.
+                //   class Example { a = 0 {} }
+                //                         ~
+                if (token() === 18 /* OpenBraceToken */) {
+                    parseErrorAtCurrentToken(ts.Diagnostics._0_expected, ts.tokenToString(26 /* SemicolonToken */));
+                }
+                return;
+            }
+            parseErrorForMissingSemicolonAfter(name);
+        }
         function parseExpectedJSDoc(kind) {
             if (token() === kind) {
                 nextTokenJSDoc();
@@ -30428,17 +31232,18 @@
             // We can parse out an optional semicolon in ASI cases in the following cases.
             return token() === 19 /* CloseBraceToken */ || token() === 1 /* EndOfFileToken */ || scanner.hasPrecedingLineBreak();
         }
+        function tryParseSemicolon() {
+            if (!canParseSemicolon()) {
+                return false;
+            }
+            if (token() === 26 /* SemicolonToken */) {
+                // consume the semicolon if it was explicitly provided.
+                nextToken();
+            }
+            return true;
+        }
         function parseSemicolon() {
-            if (canParseSemicolon()) {
-                if (token() === 26 /* SemicolonToken */) {
-                    // consume the semicolon if it was explicitly provided.
-                    nextToken();
-                }
-                return true;
-            }
-            else {
-                return parseExpected(26 /* SemicolonToken */);
-            }
+            return tryParseSemicolon() || parseExpected(26 /* SemicolonToken */);
         }
         function createNodeArray(elements, pos, end, hasTrailingComma) {
             var array = factory.createNodeArray(elements, hasTrailingComma);
@@ -30467,11 +31272,11 @@
                 parseErrorAtCurrentToken(diagnosticMessage, arg0);
             }
             var pos = getNodePos();
-            var result = kind === 78 /* Identifier */ ? factory.createIdentifier("", /*typeArguments*/ undefined, /*originalKeywordKind*/ undefined) :
+            var result = kind === 79 /* Identifier */ ? factory.createIdentifier("", /*typeArguments*/ undefined, /*originalKeywordKind*/ undefined) :
                 ts.isTemplateLiteralKind(kind) ? factory.createTemplateLiteralLikeNode(kind, "", "", /*templateFlags*/ undefined) :
                     kind === 8 /* NumericLiteral */ ? factory.createNumericLiteral("", /*numericLiteralFlags*/ undefined) :
                         kind === 10 /* StringLiteral */ ? factory.createStringLiteral("", /*isSingleQuote*/ undefined) :
-                            kind === 272 /* MissingDeclaration */ ? factory.createMissingDeclaration() :
+                            kind === 274 /* MissingDeclaration */ ? factory.createMissingDeclaration() :
                                 factory.createToken(kind);
             return finishNode(result, pos);
         }
@@ -30495,11 +31300,11 @@
                 nextTokenWithoutCheck();
                 return finishNode(factory.createIdentifier(text, /*typeArguments*/ undefined, originalKeywordKind), pos);
             }
-            if (token() === 79 /* PrivateIdentifier */) {
+            if (token() === 80 /* PrivateIdentifier */) {
                 parseErrorAtCurrentToken(privateIdentifierDiagnosticMessage || ts.Diagnostics.Private_identifiers_are_not_allowed_outside_class_bodies);
                 return createIdentifier(/*isIdentifier*/ true);
             }
-            if (token() === 0 /* Unknown */ && scanner.tryScan(function () { return scanner.reScanInvalidIdentifier() === 78 /* Identifier */; })) {
+            if (token() === 0 /* Unknown */ && scanner.tryScan(function () { return scanner.reScanInvalidIdentifier() === 79 /* Identifier */; })) {
                 // Scanner has already recorded an 'Invalid character' error, so no need to add another from the parser.
                 return createIdentifier(/*isIdentifier*/ true);
             }
@@ -30511,7 +31316,7 @@
             var defaultMessage = isReservedWord ?
                 ts.Diagnostics.Identifier_expected_0_is_a_reserved_word_that_cannot_be_used_here :
                 ts.Diagnostics.Identifier_expected;
-            return createMissingNode(78 /* Identifier */, reportAtCurrentPosition, diagnosticMessage || defaultMessage, msgArg);
+            return createMissingNode(79 /* Identifier */, reportAtCurrentPosition, diagnosticMessage || defaultMessage, msgArg);
         }
         function parseBindingIdentifier(privateIdentifierDiagnosticMessage) {
             return createIdentifier(isBindingIdentifier(), /*diagnosticMessage*/ undefined, privateIdentifierDiagnosticMessage);
@@ -30536,7 +31341,7 @@
             if (allowComputedPropertyNames && token() === 22 /* OpenBracketToken */) {
                 return parseComputedPropertyName();
             }
-            if (token() === 79 /* PrivateIdentifier */) {
+            if (token() === 80 /* PrivateIdentifier */) {
                 return parsePrivateIdentifier();
             }
             return parseIdentifierName();
@@ -30582,24 +31387,24 @@
         }
         function nextTokenCanFollowModifier() {
             switch (token()) {
-                case 84 /* ConstKeyword */:
+                case 85 /* ConstKeyword */:
                     // 'const' is only a modifier if followed by 'enum'.
-                    return nextToken() === 91 /* EnumKeyword */;
-                case 92 /* ExportKeyword */:
+                    return nextToken() === 92 /* EnumKeyword */;
+                case 93 /* ExportKeyword */:
                     nextToken();
-                    if (token() === 87 /* DefaultKeyword */) {
+                    if (token() === 88 /* DefaultKeyword */) {
                         return lookAhead(nextTokenCanFollowDefaultKeyword);
                     }
-                    if (token() === 149 /* TypeKeyword */) {
+                    if (token() === 150 /* TypeKeyword */) {
                         return lookAhead(nextTokenCanFollowExportModifier);
                     }
                     return canFollowExportModifier();
-                case 87 /* DefaultKeyword */:
+                case 88 /* DefaultKeyword */:
                     return nextTokenCanFollowDefaultKeyword();
-                case 123 /* StaticKeyword */:
+                case 124 /* StaticKeyword */:
                     return nextTokenIsOnSameLineAndCanFollowModifier();
-                case 134 /* GetKeyword */:
-                case 146 /* SetKeyword */:
+                case 135 /* GetKeyword */:
+                case 147 /* SetKeyword */:
                     nextToken();
                     return canFollowModifier();
                 default:
@@ -30608,7 +31413,7 @@
         }
         function canFollowExportModifier() {
             return token() !== 41 /* AsteriskToken */
-                && token() !== 126 /* AsKeyword */
+                && token() !== 127 /* AsKeyword */
                 && token() !== 18 /* OpenBraceToken */
                 && canFollowModifier();
         }
@@ -30628,10 +31433,10 @@
         }
         function nextTokenCanFollowDefaultKeyword() {
             nextToken();
-            return token() === 83 /* ClassKeyword */ || token() === 97 /* FunctionKeyword */ ||
-                token() === 117 /* InterfaceKeyword */ ||
-                (token() === 125 /* AbstractKeyword */ && lookAhead(nextTokenIsClassKeywordOnSameLine)) ||
-                (token() === 129 /* AsyncKeyword */ && lookAhead(nextTokenIsFunctionKeywordOnSameLine));
+            return token() === 84 /* ClassKeyword */ || token() === 98 /* FunctionKeyword */ ||
+                token() === 118 /* InterfaceKeyword */ ||
+                (token() === 126 /* AbstractKeyword */ && lookAhead(nextTokenIsClassKeywordOnSameLine)) ||
+                (token() === 130 /* AsyncKeyword */ && lookAhead(nextTokenIsFunctionKeywordOnSameLine));
         }
         // True if positioned at the start of a list element
         function isListElement(parsingContext, inErrorRecovery) {
@@ -30651,7 +31456,7 @@
                     // outer module.  We just want to consume and move on.
                     return !(token() === 26 /* SemicolonToken */ && inErrorRecovery) && isStartOfStatement();
                 case 2 /* SwitchClauses */:
-                    return token() === 81 /* CaseKeyword */ || token() === 87 /* DefaultKeyword */;
+                    return token() === 82 /* CaseKeyword */ || token() === 88 /* DefaultKeyword */;
                 case 4 /* TypeMembers */:
                     return lookAhead(isTypeMemberStart);
                 case 5 /* ClassMembers */:
@@ -30737,7 +31542,7 @@
                 //      extends {} extends
                 //      extends {} implements
                 var next = nextToken();
-                return next === 27 /* CommaToken */ || next === 18 /* OpenBraceToken */ || next === 93 /* ExtendsKeyword */ || next === 116 /* ImplementsKeyword */;
+                return next === 27 /* CommaToken */ || next === 18 /* OpenBraceToken */ || next === 94 /* ExtendsKeyword */ || next === 117 /* ImplementsKeyword */;
             }
             return true;
         }
@@ -30754,8 +31559,8 @@
             return ts.tokenIsIdentifierOrKeywordOrGreaterThan(token());
         }
         function isHeritageClauseExtendsOrImplementsKeyword() {
-            if (token() === 116 /* ImplementsKeyword */ ||
-                token() === 93 /* ExtendsKeyword */) {
+            if (token() === 117 /* ImplementsKeyword */ ||
+                token() === 94 /* ExtendsKeyword */) {
                 return lookAhead(nextTokenIsStartOfExpression);
             }
             return false;
@@ -30785,14 +31590,14 @@
                 case 23 /* ImportOrExportSpecifiers */:
                     return token() === 19 /* CloseBraceToken */;
                 case 3 /* SwitchClauseStatements */:
-                    return token() === 19 /* CloseBraceToken */ || token() === 81 /* CaseKeyword */ || token() === 87 /* DefaultKeyword */;
+                    return token() === 19 /* CloseBraceToken */ || token() === 82 /* CaseKeyword */ || token() === 88 /* DefaultKeyword */;
                 case 7 /* HeritageClauseElement */:
-                    return token() === 18 /* OpenBraceToken */ || token() === 93 /* ExtendsKeyword */ || token() === 116 /* ImplementsKeyword */;
+                    return token() === 18 /* OpenBraceToken */ || token() === 94 /* ExtendsKeyword */ || token() === 117 /* ImplementsKeyword */;
                 case 8 /* VariableDeclarations */:
                     return isVariableDeclaratorListTerminator();
                 case 19 /* TypeParameters */:
                     // Tokens other than '>' are here for better error recovery
-                    return token() === 31 /* GreaterThanToken */ || token() === 20 /* OpenParenToken */ || token() === 18 /* OpenBraceToken */ || token() === 93 /* ExtendsKeyword */ || token() === 116 /* ImplementsKeyword */;
+                    return token() === 31 /* GreaterThanToken */ || token() === 20 /* OpenParenToken */ || token() === 18 /* OpenBraceToken */ || token() === 94 /* ExtendsKeyword */ || token() === 117 /* ImplementsKeyword */;
                 case 11 /* ArgumentExpressions */:
                     // Tokens other than ')' are here for better error recovery
                     return token() === 21 /* CloseParenToken */ || token() === 26 /* SemicolonToken */;
@@ -31008,20 +31813,20 @@
         function isReusableClassMember(node) {
             if (node) {
                 switch (node.kind) {
-                    case 167 /* Constructor */:
-                    case 172 /* IndexSignature */:
-                    case 168 /* GetAccessor */:
-                    case 169 /* SetAccessor */:
-                    case 164 /* PropertyDeclaration */:
-                    case 230 /* SemicolonClassElement */:
+                    case 169 /* Constructor */:
+                    case 174 /* IndexSignature */:
+                    case 170 /* GetAccessor */:
+                    case 171 /* SetAccessor */:
+                    case 165 /* PropertyDeclaration */:
+                    case 232 /* SemicolonClassElement */:
                         return true;
-                    case 166 /* MethodDeclaration */:
+                    case 167 /* MethodDeclaration */:
                         // Method declarations are not necessarily reusable.  An object-literal
                         // may have a method calls "constructor(...)" and we must reparse that
                         // into an actual .ConstructorDeclaration.
                         var methodDeclaration = node;
-                        var nameIsConstructor = methodDeclaration.name.kind === 78 /* Identifier */ &&
-                            methodDeclaration.name.originalKeywordKind === 132 /* ConstructorKeyword */;
+                        var nameIsConstructor = methodDeclaration.name.kind === 79 /* Identifier */ &&
+                            methodDeclaration.name.originalKeywordKind === 133 /* ConstructorKeyword */;
                         return !nameIsConstructor;
                 }
             }
@@ -31030,8 +31835,8 @@
         function isReusableSwitchClause(node) {
             if (node) {
                 switch (node.kind) {
-                    case 285 /* CaseClause */:
-                    case 286 /* DefaultClause */:
+                    case 287 /* CaseClause */:
+                    case 288 /* DefaultClause */:
                         return true;
                 }
             }
@@ -31040,58 +31845,58 @@
         function isReusableStatement(node) {
             if (node) {
                 switch (node.kind) {
-                    case 252 /* FunctionDeclaration */:
-                    case 233 /* VariableStatement */:
-                    case 231 /* Block */:
-                    case 235 /* IfStatement */:
-                    case 234 /* ExpressionStatement */:
-                    case 247 /* ThrowStatement */:
-                    case 243 /* ReturnStatement */:
-                    case 245 /* SwitchStatement */:
-                    case 242 /* BreakStatement */:
-                    case 241 /* ContinueStatement */:
-                    case 239 /* ForInStatement */:
-                    case 240 /* ForOfStatement */:
-                    case 238 /* ForStatement */:
-                    case 237 /* WhileStatement */:
-                    case 244 /* WithStatement */:
-                    case 232 /* EmptyStatement */:
-                    case 248 /* TryStatement */:
-                    case 246 /* LabeledStatement */:
-                    case 236 /* DoStatement */:
-                    case 249 /* DebuggerStatement */:
-                    case 262 /* ImportDeclaration */:
-                    case 261 /* ImportEqualsDeclaration */:
-                    case 268 /* ExportDeclaration */:
-                    case 267 /* ExportAssignment */:
-                    case 257 /* ModuleDeclaration */:
-                    case 253 /* ClassDeclaration */:
-                    case 254 /* InterfaceDeclaration */:
-                    case 256 /* EnumDeclaration */:
-                    case 255 /* TypeAliasDeclaration */:
+                    case 254 /* FunctionDeclaration */:
+                    case 235 /* VariableStatement */:
+                    case 233 /* Block */:
+                    case 237 /* IfStatement */:
+                    case 236 /* ExpressionStatement */:
+                    case 249 /* ThrowStatement */:
+                    case 245 /* ReturnStatement */:
+                    case 247 /* SwitchStatement */:
+                    case 244 /* BreakStatement */:
+                    case 243 /* ContinueStatement */:
+                    case 241 /* ForInStatement */:
+                    case 242 /* ForOfStatement */:
+                    case 240 /* ForStatement */:
+                    case 239 /* WhileStatement */:
+                    case 246 /* WithStatement */:
+                    case 234 /* EmptyStatement */:
+                    case 250 /* TryStatement */:
+                    case 248 /* LabeledStatement */:
+                    case 238 /* DoStatement */:
+                    case 251 /* DebuggerStatement */:
+                    case 264 /* ImportDeclaration */:
+                    case 263 /* ImportEqualsDeclaration */:
+                    case 270 /* ExportDeclaration */:
+                    case 269 /* ExportAssignment */:
+                    case 259 /* ModuleDeclaration */:
+                    case 255 /* ClassDeclaration */:
+                    case 256 /* InterfaceDeclaration */:
+                    case 258 /* EnumDeclaration */:
+                    case 257 /* TypeAliasDeclaration */:
                         return true;
                 }
             }
             return false;
         }
         function isReusableEnumMember(node) {
-            return node.kind === 292 /* EnumMember */;
+            return node.kind === 294 /* EnumMember */;
         }
         function isReusableTypeMember(node) {
             if (node) {
                 switch (node.kind) {
-                    case 171 /* ConstructSignature */:
-                    case 165 /* MethodSignature */:
-                    case 172 /* IndexSignature */:
-                    case 163 /* PropertySignature */:
-                    case 170 /* CallSignature */:
+                    case 173 /* ConstructSignature */:
+                    case 166 /* MethodSignature */:
+                    case 174 /* IndexSignature */:
+                    case 164 /* PropertySignature */:
+                    case 172 /* CallSignature */:
                         return true;
                 }
             }
             return false;
         }
         function isReusableVariableDeclaration(node) {
-            if (node.kind !== 250 /* VariableDeclaration */) {
+            if (node.kind !== 252 /* VariableDeclaration */) {
                 return false;
             }
             // Very subtle incremental parsing bug.  Consider the following code:
@@ -31112,7 +31917,7 @@
             return variableDeclarator.initializer === undefined;
         }
         function isReusableParameter(node) {
-            if (node.kind !== 161 /* Parameter */) {
+            if (node.kind !== 162 /* Parameter */) {
                 return false;
             }
             // See the comment in isReusableVariableDeclaration for why we do this.
@@ -31130,7 +31935,10 @@
         }
         function parsingContextErrors(context) {
             switch (context) {
-                case 0 /* SourceElements */: return parseErrorAtCurrentToken(ts.Diagnostics.Declaration_or_statement_expected);
+                case 0 /* SourceElements */:
+                    return token() === 88 /* DefaultKeyword */
+                        ? parseErrorAtCurrentToken(ts.Diagnostics._0_expected, ts.tokenToString(93 /* ExportKeyword */))
+                        : parseErrorAtCurrentToken(ts.Diagnostics.Declaration_or_statement_expected);
                 case 1 /* BlockStatements */: return parseErrorAtCurrentToken(ts.Diagnostics.Declaration_or_statement_expected);
                 case 2 /* SwitchClauses */: return parseErrorAtCurrentToken(ts.Diagnostics.case_or_default_expected);
                 case 3 /* SwitchClauseStatements */: return parseErrorAtCurrentToken(ts.Diagnostics.Statement_expected);
@@ -31279,12 +32087,12 @@
                     // Report that we need an identifier.  However, report it right after the dot,
                     // and not on the next token.  This is because the next token might actually
                     // be an identifier and the error would be quite confusing.
-                    return createMissingNode(78 /* Identifier */, /*reportAtCurrentPosition*/ true, ts.Diagnostics.Identifier_expected);
+                    return createMissingNode(79 /* Identifier */, /*reportAtCurrentPosition*/ true, ts.Diagnostics.Identifier_expected);
                 }
             }
-            if (token() === 79 /* PrivateIdentifier */) {
+            if (token() === 80 /* PrivateIdentifier */) {
                 var node = parsePrivateIdentifier();
-                return allowPrivateIdentifiers ? node : createMissingNode(78 /* Identifier */, /*reportAtCurrentPosition*/ true, ts.Diagnostics.Identifier_expected);
+                return allowPrivateIdentifiers ? node : createMissingNode(79 /* Identifier */, /*reportAtCurrentPosition*/ true, ts.Diagnostics.Identifier_expected);
             }
             return allowIdentifierNames ? parseIdentifierName() : parseIdentifier();
         }
@@ -31393,14 +32201,14 @@
         // If true, we should abort parsing an error function.
         function typeHasArrowFunctionBlockingParseError(node) {
             switch (node.kind) {
-                case 174 /* TypeReference */:
+                case 176 /* TypeReference */:
                     return ts.nodeIsMissing(node.typeName);
-                case 175 /* FunctionType */:
-                case 176 /* ConstructorType */: {
+                case 177 /* FunctionType */:
+                case 178 /* ConstructorType */: {
                     var _a = node, parameters = _a.parameters, type = _a.type;
                     return isMissingList(parameters) || typeHasArrowFunctionBlockingParseError(type);
                 }
-                case 187 /* ParenthesizedType */:
+                case 189 /* ParenthesizedType */:
                     return typeHasArrowFunctionBlockingParseError(node.type);
                 default:
                     return false;
@@ -31442,7 +32250,7 @@
                 token() === 19 /* CloseBraceToken */ ||
                 token() === 21 /* CloseParenToken */ ||
                 token() === 31 /* GreaterThanToken */ ||
-                token() === 62 /* EqualsToken */ ||
+                token() === 63 /* EqualsToken */ ||
                 token() === 51 /* BarToken */) {
                 return finishNode(factory.createJSDocUnknownType(), pos);
             }
@@ -31464,7 +32272,7 @@
         function parseJSDocParameter() {
             var pos = getNodePos();
             var name;
-            if (token() === 107 /* ThisKeyword */ || token() === 102 /* NewKeyword */) {
+            if (token() === 108 /* ThisKeyword */ || token() === 103 /* NewKeyword */) {
                 name = parseIdentifierName();
                 parseExpected(58 /* ColonToken */);
             }
@@ -31480,7 +32288,7 @@
         function parseJSDocType() {
             scanner.setInJSDocType(true);
             var pos = getNodePos();
-            if (parseOptional(139 /* ModuleKeyword */)) {
+            if (parseOptional(140 /* ModuleKeyword */)) {
                 // TODO(rbuckton): We never set the type for a JSDocNamepathType. What should we put here?
                 var moduleTag = factory.createJSDocNamepathType(/*type*/ undefined);
                 terminate: while (true) {
@@ -31503,7 +32311,7 @@
             if (hasDotDotDot) {
                 type = finishNode(factory.createJSDocVariadicType(type), pos);
             }
-            if (token() === 62 /* EqualsToken */) {
+            if (token() === 63 /* EqualsToken */) {
                 nextToken();
                 return finishNode(factory.createJSDocOptionalType(type), pos);
             }
@@ -31511,7 +32319,7 @@
         }
         function parseTypeQuery() {
             var pos = getNodePos();
-            parseExpected(111 /* TypeOfKeyword */);
+            parseExpected(112 /* TypeOfKeyword */);
             return finishNode(factory.createTypeQueryNode(parseEntityName(/*allowReservedWords*/ true)), pos);
         }
         function parseTypeParameter() {
@@ -31519,7 +32327,7 @@
             var name = parseIdentifier();
             var constraint;
             var expression;
-            if (parseOptional(93 /* ExtendsKeyword */)) {
+            if (parseOptional(94 /* ExtendsKeyword */)) {
                 // It's not uncommon for people to write improper constraints to a generic.  If the
                 // user writes a constraint that is an expression and not an actual type, then parse
                 // it out as an expression (so we can recover well), but report that a type is needed
@@ -31538,7 +32346,7 @@
                     expression = parseUnaryExpressionOrHigher();
                 }
             }
-            var defaultType = parseOptional(62 /* EqualsToken */) ? parseType() : undefined;
+            var defaultType = parseOptional(63 /* EqualsToken */) ? parseType() : undefined;
             var node = factory.createTypeParameterDeclaration(name, constraint, defaultType);
             node.expression = expression;
             return finishNode(node, pos);
@@ -31585,7 +32393,7 @@
             //      BindingElement[?Yield,?Await]
             // Decorators are parsed in the outer [Await] context, the rest of the parameter is parsed in the function's [Await] context.
             var decorators = inOuterAwaitContext ? doInAwaitContext(parseDecorators) : parseDecorators();
-            if (token() === 107 /* ThisKeyword */) {
+            if (token() === 108 /* ThisKeyword */) {
                 var node_1 = factory.createParameterDeclaration(decorators, 
                 /*modifiers*/ undefined, 
                 /*dotDotDotToken*/ undefined, createIdentifier(/*isIdentifier*/ true), 
@@ -31682,14 +32490,14 @@
         function parseSignatureMember(kind) {
             var pos = getNodePos();
             var hasJSDoc = hasPrecedingJSDocComment();
-            if (kind === 171 /* ConstructSignature */) {
-                parseExpected(102 /* NewKeyword */);
+            if (kind === 173 /* ConstructSignature */) {
+                parseExpected(103 /* NewKeyword */);
             }
             var typeParameters = parseTypeParameters();
             var parameters = parseParameters(4 /* Type */);
             var type = parseReturnType(58 /* ColonToken */, /*isType*/ true);
             parseTypeMemberSemicolon();
-            var node = kind === 170 /* CallSignature */
+            var node = kind === 172 /* CallSignature */
                 ? factory.createCallSignature(typeParameters, parameters, type)
                 : factory.createConstructSignature(typeParameters, parameters, type);
             return withJSDoc(finishNode(node, pos), hasJSDoc);
@@ -31772,7 +32580,7 @@
                 // Although type literal properties cannot not have initializers, we attempt
                 // to parse an initializer so we can report in the checker that an interface
                 // property or type literal property cannot have an initializer.
-                if (token() === 62 /* EqualsToken */)
+                if (token() === 63 /* EqualsToken */)
                     node.initializer = parseInitializer();
             }
             parseTypeMemberSemicolon();
@@ -31782,8 +32590,8 @@
             // Return true if we have the start of a signature member
             if (token() === 20 /* OpenParenToken */ ||
                 token() === 29 /* LessThanToken */ ||
-                token() === 134 /* GetKeyword */ ||
-                token() === 146 /* SetKeyword */) {
+                token() === 135 /* GetKeyword */ ||
+                token() === 147 /* SetKeyword */) {
                 return true;
             }
             var idToken = false;
@@ -31815,19 +32623,19 @@
         }
         function parseTypeMember() {
             if (token() === 20 /* OpenParenToken */ || token() === 29 /* LessThanToken */) {
-                return parseSignatureMember(170 /* CallSignature */);
+                return parseSignatureMember(172 /* CallSignature */);
             }
-            if (token() === 102 /* NewKeyword */ && lookAhead(nextTokenIsOpenParenOrLessThan)) {
-                return parseSignatureMember(171 /* ConstructSignature */);
+            if (token() === 103 /* NewKeyword */ && lookAhead(nextTokenIsOpenParenOrLessThan)) {
+                return parseSignatureMember(173 /* ConstructSignature */);
             }
             var pos = getNodePos();
             var hasJSDoc = hasPrecedingJSDocComment();
             var modifiers = parseModifiers();
-            if (parseContextualModifier(134 /* GetKeyword */)) {
-                return parseAccessorDeclaration(pos, hasJSDoc, /*decorators*/ undefined, modifiers, 168 /* GetAccessor */);
+            if (parseContextualModifier(135 /* GetKeyword */)) {
+                return parseAccessorDeclaration(pos, hasJSDoc, /*decorators*/ undefined, modifiers, 170 /* GetAccessor */);
             }
-            if (parseContextualModifier(146 /* SetKeyword */)) {
-                return parseAccessorDeclaration(pos, hasJSDoc, /*decorators*/ undefined, modifiers, 169 /* SetAccessor */);
+            if (parseContextualModifier(147 /* SetKeyword */)) {
+                return parseAccessorDeclaration(pos, hasJSDoc, /*decorators*/ undefined, modifiers, 171 /* SetAccessor */);
             }
             if (isIndexSignature()) {
                 return parseIndexSignatureDeclaration(pos, hasJSDoc, /*decorators*/ undefined, modifiers);
@@ -31868,17 +32676,17 @@
         function isStartOfMappedType() {
             nextToken();
             if (token() === 39 /* PlusToken */ || token() === 40 /* MinusToken */) {
-                return nextToken() === 142 /* ReadonlyKeyword */;
+                return nextToken() === 143 /* ReadonlyKeyword */;
             }
-            if (token() === 142 /* ReadonlyKeyword */) {
+            if (token() === 143 /* ReadonlyKeyword */) {
                 nextToken();
             }
-            return token() === 22 /* OpenBracketToken */ && nextTokenIsIdentifier() && nextToken() === 100 /* InKeyword */;
+            return token() === 22 /* OpenBracketToken */ && nextTokenIsIdentifier() && nextToken() === 101 /* InKeyword */;
         }
         function parseMappedTypeParameter() {
             var pos = getNodePos();
             var name = parseIdentifierName();
-            parseExpected(100 /* InKeyword */);
+            parseExpected(101 /* InKeyword */);
             var type = parseType();
             return finishNode(factory.createTypeParameterDeclaration(name, type, /*defaultType*/ undefined), pos);
         }
@@ -31886,15 +32694,15 @@
             var pos = getNodePos();
             parseExpected(18 /* OpenBraceToken */);
             var readonlyToken;
-            if (token() === 142 /* ReadonlyKeyword */ || token() === 39 /* PlusToken */ || token() === 40 /* MinusToken */) {
+            if (token() === 143 /* ReadonlyKeyword */ || token() === 39 /* PlusToken */ || token() === 40 /* MinusToken */) {
                 readonlyToken = parseTokenNode();
-                if (readonlyToken.kind !== 142 /* ReadonlyKeyword */) {
-                    parseExpected(142 /* ReadonlyKeyword */);
+                if (readonlyToken.kind !== 143 /* ReadonlyKeyword */) {
+                    parseExpected(143 /* ReadonlyKeyword */);
                 }
             }
             parseExpected(22 /* OpenBracketToken */);
             var typeParameter = parseMappedTypeParameter();
-            var nameType = parseOptional(126 /* AsKeyword */) ? parseType() : undefined;
+            var nameType = parseOptional(127 /* AsKeyword */) ? parseType() : undefined;
             parseExpected(23 /* CloseBracketToken */);
             var questionToken;
             if (token() === 57 /* QuestionToken */ || token() === 39 /* PlusToken */ || token() === 40 /* MinusToken */) {
@@ -31958,10 +32766,10 @@
         }
         function parseModifiersForConstructorType() {
             var modifiers;
-            if (token() === 125 /* AbstractKeyword */) {
+            if (token() === 126 /* AbstractKeyword */) {
                 var pos = getNodePos();
                 nextToken();
-                var modifier = finishNode(factory.createToken(125 /* AbstractKeyword */), pos);
+                var modifier = finishNode(factory.createToken(126 /* AbstractKeyword */), pos);
                 modifiers = createNodeArray([modifier], pos);
             }
             return modifiers;
@@ -31970,7 +32778,7 @@
             var pos = getNodePos();
             var hasJSDoc = hasPrecedingJSDocComment();
             var modifiers = parseModifiersForConstructorType();
-            var isConstructorType = parseOptional(102 /* NewKeyword */);
+            var isConstructorType = parseOptional(103 /* NewKeyword */);
             var typeParameters = parseTypeParameters();
             var parameters = parseParameters(4 /* Type */);
             var type = parseReturnType(38 /* EqualsGreaterThanToken */, /*isType*/ false);
@@ -31990,7 +32798,7 @@
             if (negative) {
                 nextToken();
             }
-            var expression = token() === 109 /* TrueKeyword */ || token() === 94 /* FalseKeyword */ || token() === 103 /* NullKeyword */ ?
+            var expression = token() === 110 /* TrueKeyword */ || token() === 95 /* FalseKeyword */ || token() === 104 /* NullKeyword */ ?
                 parseTokenNode() :
                 parseLiteralLikeNode(token());
             if (negative) {
@@ -32000,13 +32808,13 @@
         }
         function isStartOfTypeOfImportType() {
             nextToken();
-            return token() === 99 /* ImportKeyword */;
+            return token() === 100 /* ImportKeyword */;
         }
         function parseImportType() {
             sourceFlags |= 1048576 /* PossiblyContainsDynamicImport */;
             var pos = getNodePos();
-            var isTypeOf = parseOptional(111 /* TypeOfKeyword */);
-            parseExpected(99 /* ImportKeyword */);
+            var isTypeOf = parseOptional(112 /* TypeOfKeyword */);
+            parseExpected(100 /* ImportKeyword */);
             parseExpected(20 /* OpenParenToken */);
             var type = parseType();
             parseExpected(21 /* CloseParenToken */);
@@ -32020,19 +32828,19 @@
         }
         function parseNonArrayType() {
             switch (token()) {
-                case 128 /* AnyKeyword */:
-                case 152 /* UnknownKeyword */:
-                case 147 /* StringKeyword */:
-                case 144 /* NumberKeyword */:
-                case 155 /* BigIntKeyword */:
-                case 148 /* SymbolKeyword */:
-                case 131 /* BooleanKeyword */:
-                case 150 /* UndefinedKeyword */:
-                case 141 /* NeverKeyword */:
-                case 145 /* ObjectKeyword */:
+                case 129 /* AnyKeyword */:
+                case 153 /* UnknownKeyword */:
+                case 148 /* StringKeyword */:
+                case 145 /* NumberKeyword */:
+                case 156 /* BigIntKeyword */:
+                case 149 /* SymbolKeyword */:
+                case 132 /* BooleanKeyword */:
+                case 151 /* UndefinedKeyword */:
+                case 142 /* NeverKeyword */:
+                case 146 /* ObjectKeyword */:
                     // If these are followed by a dot, then parse these out as a dotted type reference instead.
                     return tryParse(parseKeywordAndNoDot) || parseTypeReference();
-                case 65 /* AsteriskEqualsToken */:
+                case 66 /* AsteriskEqualsToken */:
                     // If there is '*=', treat it as * followed by postfix =
                     scanner.reScanAsteriskEqualsToken();
                 // falls through
@@ -32044,7 +32852,7 @@
                 // falls through
                 case 57 /* QuestionToken */:
                     return parseJSDocUnknownOrNullableType();
-                case 97 /* FunctionKeyword */:
+                case 98 /* FunctionKeyword */:
                     return parseJSDocFunctionType();
                 case 53 /* ExclamationToken */:
                     return parseJSDocNonNullableType();
@@ -32052,24 +32860,24 @@
                 case 10 /* StringLiteral */:
                 case 8 /* NumericLiteral */:
                 case 9 /* BigIntLiteral */:
-                case 109 /* TrueKeyword */:
-                case 94 /* FalseKeyword */:
-                case 103 /* NullKeyword */:
+                case 110 /* TrueKeyword */:
+                case 95 /* FalseKeyword */:
+                case 104 /* NullKeyword */:
                     return parseLiteralTypeNode();
                 case 40 /* MinusToken */:
                     return lookAhead(nextTokenIsNumericOrBigIntLiteral) ? parseLiteralTypeNode(/*negative*/ true) : parseTypeReference();
-                case 113 /* VoidKeyword */:
+                case 114 /* VoidKeyword */:
                     return parseTokenNode();
-                case 107 /* ThisKeyword */: {
+                case 108 /* ThisKeyword */: {
                     var thisKeyword = parseThisTypeNode();
-                    if (token() === 137 /* IsKeyword */ && !scanner.hasPrecedingLineBreak()) {
+                    if (token() === 138 /* IsKeyword */ && !scanner.hasPrecedingLineBreak()) {
                         return parseThisTypePredicate(thisKeyword);
                     }
                     else {
                         return thisKeyword;
                     }
                 }
-                case 111 /* TypeOfKeyword */:
+                case 112 /* TypeOfKeyword */:
                     return lookAhead(isStartOfTypeOfImportType) ? parseImportType() : parseTypeQuery();
                 case 18 /* OpenBraceToken */:
                     return lookAhead(isStartOfMappedType) ? parseMappedType() : parseTypeLiteral();
@@ -32077,9 +32885,9 @@
                     return parseTupleType();
                 case 20 /* OpenParenToken */:
                     return parseParenthesizedType();
-                case 99 /* ImportKeyword */:
+                case 100 /* ImportKeyword */:
                     return parseImportType();
-                case 127 /* AssertsKeyword */:
+                case 128 /* AssertsKeyword */:
                     return lookAhead(nextTokenIsIdentifierOrKeywordOnSameLine) ? parseAssertsTypePredicate() : parseTypeReference();
                 case 15 /* TemplateHead */:
                     return parseTemplateType();
@@ -32089,44 +32897,44 @@
         }
         function isStartOfType(inStartOfParameter) {
             switch (token()) {
-                case 128 /* AnyKeyword */:
-                case 152 /* UnknownKeyword */:
-                case 147 /* StringKeyword */:
-                case 144 /* NumberKeyword */:
-                case 155 /* BigIntKeyword */:
-                case 131 /* BooleanKeyword */:
-                case 142 /* ReadonlyKeyword */:
-                case 148 /* SymbolKeyword */:
-                case 151 /* UniqueKeyword */:
-                case 113 /* VoidKeyword */:
-                case 150 /* UndefinedKeyword */:
-                case 103 /* NullKeyword */:
-                case 107 /* ThisKeyword */:
-                case 111 /* TypeOfKeyword */:
-                case 141 /* NeverKeyword */:
+                case 129 /* AnyKeyword */:
+                case 153 /* UnknownKeyword */:
+                case 148 /* StringKeyword */:
+                case 145 /* NumberKeyword */:
+                case 156 /* BigIntKeyword */:
+                case 132 /* BooleanKeyword */:
+                case 143 /* ReadonlyKeyword */:
+                case 149 /* SymbolKeyword */:
+                case 152 /* UniqueKeyword */:
+                case 114 /* VoidKeyword */:
+                case 151 /* UndefinedKeyword */:
+                case 104 /* NullKeyword */:
+                case 108 /* ThisKeyword */:
+                case 112 /* TypeOfKeyword */:
+                case 142 /* NeverKeyword */:
                 case 18 /* OpenBraceToken */:
                 case 22 /* OpenBracketToken */:
                 case 29 /* LessThanToken */:
                 case 51 /* BarToken */:
                 case 50 /* AmpersandToken */:
-                case 102 /* NewKeyword */:
+                case 103 /* NewKeyword */:
                 case 10 /* StringLiteral */:
                 case 8 /* NumericLiteral */:
                 case 9 /* BigIntLiteral */:
-                case 109 /* TrueKeyword */:
-                case 94 /* FalseKeyword */:
-                case 145 /* ObjectKeyword */:
+                case 110 /* TrueKeyword */:
+                case 95 /* FalseKeyword */:
+                case 146 /* ObjectKeyword */:
                 case 41 /* AsteriskToken */:
                 case 57 /* QuestionToken */:
                 case 53 /* ExclamationToken */:
                 case 25 /* DotDotDotToken */:
-                case 135 /* InferKeyword */:
-                case 99 /* ImportKeyword */:
-                case 127 /* AssertsKeyword */:
+                case 136 /* InferKeyword */:
+                case 100 /* ImportKeyword */:
+                case 128 /* AssertsKeyword */:
                 case 14 /* NoSubstitutionTemplateLiteral */:
                 case 15 /* TemplateHead */:
                     return true;
-                case 97 /* FunctionKeyword */:
+                case 98 /* FunctionKeyword */:
                     return !inStartOfParameter;
                 case 40 /* MinusToken */:
                     return !inStartOfParameter && lookAhead(nextTokenIsNumericOrBigIntLiteral);
@@ -32190,17 +32998,17 @@
         }
         function parseInferType() {
             var pos = getNodePos();
-            parseExpected(135 /* InferKeyword */);
+            parseExpected(136 /* InferKeyword */);
             return finishNode(factory.createInferTypeNode(parseTypeParameterOfInferType()), pos);
         }
         function parseTypeOperatorOrHigher() {
             var operator = token();
             switch (operator) {
-                case 138 /* KeyOfKeyword */:
-                case 151 /* UniqueKeyword */:
-                case 142 /* ReadonlyKeyword */:
+                case 139 /* KeyOfKeyword */:
+                case 152 /* UniqueKeyword */:
+                case 143 /* ReadonlyKeyword */:
                     return parseTypeOperator(operator);
-                case 135 /* InferKeyword */:
+                case 136 /* InferKeyword */:
                     return parseInferType();
             }
             return parsePostfixTypeOrHigher();
@@ -32250,7 +33058,7 @@
         }
         function nextTokenIsNewKeyword() {
             nextToken();
-            return token() === 102 /* NewKeyword */;
+            return token() === 103 /* NewKeyword */;
         }
         function isStartOfFunctionTypeOrConstructorType() {
             if (token() === 29 /* LessThanToken */) {
@@ -32259,15 +33067,15 @@
             if (token() === 20 /* OpenParenToken */ && lookAhead(isUnambiguouslyStartOfFunctionType)) {
                 return true;
             }
-            return token() === 102 /* NewKeyword */ ||
-                token() === 125 /* AbstractKeyword */ && lookAhead(nextTokenIsNewKeyword);
+            return token() === 103 /* NewKeyword */ ||
+                token() === 126 /* AbstractKeyword */ && lookAhead(nextTokenIsNewKeyword);
         }
         function skipParameterStart() {
             if (ts.isModifierKind(token())) {
                 // Skip modifiers
                 parseModifiers();
             }
-            if (isIdentifier() || token() === 107 /* ThisKeyword */) {
+            if (isIdentifier() || token() === 108 /* ThisKeyword */) {
                 nextToken();
                 return true;
             }
@@ -32290,7 +33098,7 @@
                 // We successfully skipped modifiers (if any) and an identifier or binding pattern,
                 // now see if we have something that indicates a parameter declaration
                 if (token() === 58 /* ColonToken */ || token() === 27 /* CommaToken */ ||
-                    token() === 57 /* QuestionToken */ || token() === 62 /* EqualsToken */) {
+                    token() === 57 /* QuestionToken */ || token() === 63 /* EqualsToken */) {
                     // ( xxx :
                     // ( xxx ,
                     // ( xxx ?
@@ -32320,16 +33128,16 @@
         }
         function parseTypePredicatePrefix() {
             var id = parseIdentifier();
-            if (token() === 137 /* IsKeyword */ && !scanner.hasPrecedingLineBreak()) {
+            if (token() === 138 /* IsKeyword */ && !scanner.hasPrecedingLineBreak()) {
                 nextToken();
                 return id;
             }
         }
         function parseAssertsTypePredicate() {
             var pos = getNodePos();
-            var assertsModifier = parseExpectedToken(127 /* AssertsKeyword */);
-            var parameterName = token() === 107 /* ThisKeyword */ ? parseThisTypeNode() : parseIdentifier();
-            var type = parseOptional(137 /* IsKeyword */) ? parseType() : undefined;
+            var assertsModifier = parseExpectedToken(128 /* AssertsKeyword */);
+            var parameterName = token() === 108 /* ThisKeyword */ ? parseThisTypeNode() : parseIdentifier();
+            var type = parseOptional(138 /* IsKeyword */) ? parseType() : undefined;
             return finishNode(factory.createTypePredicateNode(assertsModifier, parameterName, type), pos);
         }
         function parseType() {
@@ -32343,7 +33151,7 @@
             }
             var pos = getNodePos();
             var type = parseUnionTypeOrHigher();
-            if (!noConditionalTypes && !scanner.hasPrecedingLineBreak() && parseOptional(93 /* ExtendsKeyword */)) {
+            if (!noConditionalTypes && !scanner.hasPrecedingLineBreak() && parseOptional(94 /* ExtendsKeyword */)) {
                 // The type following 'extends' is not permitted to be another conditional type
                 var extendsType = parseTypeWorker(/*noConditionalTypes*/ true);
                 parseExpected(57 /* QuestionToken */);
@@ -32360,11 +33168,11 @@
         // EXPRESSIONS
         function isStartOfLeftHandSideExpression() {
             switch (token()) {
-                case 107 /* ThisKeyword */:
-                case 105 /* SuperKeyword */:
-                case 103 /* NullKeyword */:
-                case 109 /* TrueKeyword */:
-                case 94 /* FalseKeyword */:
+                case 108 /* ThisKeyword */:
+                case 106 /* SuperKeyword */:
+                case 104 /* NullKeyword */:
+                case 110 /* TrueKeyword */:
+                case 95 /* FalseKeyword */:
                 case 8 /* NumericLiteral */:
                 case 9 /* BigIntLiteral */:
                 case 10 /* StringLiteral */:
@@ -32373,14 +33181,14 @@
                 case 20 /* OpenParenToken */:
                 case 22 /* OpenBracketToken */:
                 case 18 /* OpenBraceToken */:
-                case 97 /* FunctionKeyword */:
-                case 83 /* ClassKeyword */:
-                case 102 /* NewKeyword */:
+                case 98 /* FunctionKeyword */:
+                case 84 /* ClassKeyword */:
+                case 103 /* NewKeyword */:
                 case 43 /* SlashToken */:
-                case 67 /* SlashEqualsToken */:
-                case 78 /* Identifier */:
+                case 68 /* SlashEqualsToken */:
+                case 79 /* Identifier */:
                     return true;
-                case 99 /* ImportKeyword */:
+                case 100 /* ImportKeyword */:
                     return lookAhead(nextTokenIsOpenParenOrLessThanOrDot);
                 default:
                     return isIdentifier();
@@ -32395,15 +33203,15 @@
                 case 40 /* MinusToken */:
                 case 54 /* TildeToken */:
                 case 53 /* ExclamationToken */:
-                case 88 /* DeleteKeyword */:
-                case 111 /* TypeOfKeyword */:
-                case 113 /* VoidKeyword */:
+                case 89 /* DeleteKeyword */:
+                case 112 /* TypeOfKeyword */:
+                case 114 /* VoidKeyword */:
                 case 45 /* PlusPlusToken */:
                 case 46 /* MinusMinusToken */:
                 case 29 /* LessThanToken */:
-                case 130 /* AwaitKeyword */:
-                case 124 /* YieldKeyword */:
-                case 79 /* PrivateIdentifier */:
+                case 131 /* AwaitKeyword */:
+                case 125 /* YieldKeyword */:
+                case 80 /* PrivateIdentifier */:
                     // Yield/await always starts an expression.  Either it is an identifier (in which case
                     // it is definitely an expression).  Or it's a keyword (either because we're in
                     // a generator or async function, or in strict mode (or both)) and it started a yield or await expression.
@@ -32422,8 +33230,8 @@
         function isStartOfExpressionStatement() {
             // As per the grammar, none of '{' or 'function' or 'class' can start an expression statement.
             return token() !== 18 /* OpenBraceToken */ &&
-                token() !== 97 /* FunctionKeyword */ &&
-                token() !== 83 /* ClassKeyword */ &&
+                token() !== 98 /* FunctionKeyword */ &&
+                token() !== 84 /* ClassKeyword */ &&
                 token() !== 59 /* AtToken */ &&
                 isStartOfExpression();
         }
@@ -32448,7 +33256,7 @@
             return expr;
         }
         function parseInitializer() {
-            return parseOptional(62 /* EqualsToken */) ? parseAssignmentExpressionOrHigher() : undefined;
+            return parseOptional(63 /* EqualsToken */) ? parseAssignmentExpressionOrHigher() : undefined;
         }
         function parseAssignmentExpressionOrHigher() {
             //  AssignmentExpression[in,yield]:
@@ -32494,7 +33302,7 @@
             // To avoid a look-ahead, we did not handle the case of an arrow function with a single un-parenthesized
             // parameter ('x => ...') above. We handle it here by checking if the parsed expression was a single
             // identifier and the current token is an arrow.
-            if (expr.kind === 78 /* Identifier */ && token() === 38 /* EqualsGreaterThanToken */) {
+            if (expr.kind === 79 /* Identifier */ && token() === 38 /* EqualsGreaterThanToken */) {
                 return parseSimpleArrowFunctionExpression(pos, expr, /*asyncModifier*/ undefined);
             }
             // Now see if we might be in cases '2' or '3'.
@@ -32510,7 +33318,7 @@
             return parseConditionalExpressionRest(expr, pos);
         }
         function isYieldExpression() {
-            if (token() === 124 /* YieldKeyword */) {
+            if (token() === 125 /* YieldKeyword */) {
                 // If we have a 'yield' keyword, and this is a context where yield expressions are
                 // allowed, then definitely parse out a yield expression.
                 if (inYieldContext()) {
@@ -32590,7 +33398,7 @@
         //  Unknown     -> There *might* be a parenthesized arrow function here.
         //                 Speculatively look ahead to be sure, and rollback if not.
         function isParenthesizedArrowFunctionExpression() {
-            if (token() === 20 /* OpenParenToken */ || token() === 29 /* LessThanToken */ || token() === 129 /* AsyncKeyword */) {
+            if (token() === 20 /* OpenParenToken */ || token() === 29 /* LessThanToken */ || token() === 130 /* AsyncKeyword */) {
                 return lookAhead(isParenthesizedArrowFunctionExpressionWorker);
             }
             if (token() === 38 /* EqualsGreaterThanToken */) {
@@ -32603,7 +33411,7 @@
             return 0 /* False */;
         }
         function isParenthesizedArrowFunctionExpressionWorker() {
-            if (token() === 129 /* AsyncKeyword */) {
+            if (token() === 130 /* AsyncKeyword */) {
                 nextToken();
                 if (scanner.hasPrecedingLineBreak()) {
                     return 0 /* False */;
@@ -32647,13 +33455,13 @@
                 // Check for "(xxx yyy", where xxx is a modifier and yyy is an identifier. This
                 // isn't actually allowed, but we want to treat it as a lambda so we can provide
                 // a good error message.
-                if (ts.isModifierKind(second) && second !== 129 /* AsyncKeyword */ && lookAhead(nextTokenIsIdentifier)) {
+                if (ts.isModifierKind(second) && second !== 130 /* AsyncKeyword */ && lookAhead(nextTokenIsIdentifier)) {
                     return 1 /* True */;
                 }
                 // If we had "(" followed by something that's not an identifier,
                 // then this definitely doesn't look like a lambda.  "this" is not
                 // valid, but we want to parse it and then give a semantic error.
-                if (!isIdentifier() && second !== 107 /* ThisKeyword */) {
+                if (!isIdentifier() && second !== 108 /* ThisKeyword */) {
                     return 0 /* False */;
                 }
                 switch (nextToken()) {
@@ -32664,13 +33472,13 @@
                     case 57 /* QuestionToken */:
                         nextToken();
                         // If we have "(a?:" or "(a?," or "(a?=" or "(a?)" then it is definitely a lambda.
-                        if (token() === 58 /* ColonToken */ || token() === 27 /* CommaToken */ || token() === 62 /* EqualsToken */ || token() === 21 /* CloseParenToken */) {
+                        if (token() === 58 /* ColonToken */ || token() === 27 /* CommaToken */ || token() === 63 /* EqualsToken */ || token() === 21 /* CloseParenToken */) {
                             return 1 /* True */;
                         }
                         // Otherwise it is definitely not a lambda.
                         return 0 /* False */;
                     case 27 /* CommaToken */:
-                    case 62 /* EqualsToken */:
+                    case 63 /* EqualsToken */:
                     case 21 /* CloseParenToken */:
                         // If we have "(a," or "(a=" or "(a)" this *could* be an arrow function
                         return 2 /* Unknown */;
@@ -32689,10 +33497,10 @@
                 if (languageVariant === 1 /* JSX */) {
                     var isArrowFunctionInJsx = lookAhead(function () {
                         var third = nextToken();
-                        if (third === 93 /* ExtendsKeyword */) {
+                        if (third === 94 /* ExtendsKeyword */) {
                             var fourth = nextToken();
                             switch (fourth) {
-                                case 62 /* EqualsToken */:
+                                case 63 /* EqualsToken */:
                                 case 31 /* GreaterThanToken */:
                                     return false;
                                 default:
@@ -32726,7 +33534,7 @@
         }
         function tryParseAsyncSimpleArrowFunctionExpression() {
             // We do a check here so that we won't be doing unnecessarily call to "lookAhead"
-            if (token() === 129 /* AsyncKeyword */) {
+            if (token() === 130 /* AsyncKeyword */) {
                 if (lookAhead(isUnParenthesizedAsyncArrowFunctionWorker) === 1 /* True */) {
                     var pos = getNodePos();
                     var asyncModifier = parseModifiersForArrowFunction();
@@ -32740,7 +33548,7 @@
             // AsyncArrowFunctionExpression:
             //      1) async[no LineTerminator here]AsyncArrowBindingIdentifier[?Yield][no LineTerminator here]=>AsyncConciseBody[?In]
             //      2) CoverCallExpressionAndAsyncArrowHead[?Yield, ?Await][no LineTerminator here]=>AsyncConciseBody[?In]
-            if (token() === 129 /* AsyncKeyword */) {
+            if (token() === 130 /* AsyncKeyword */) {
                 nextToken();
                 // If the "async" is followed by "=>" token then it is not a beginning of an async arrow-function
                 // but instead a simple arrow-function which will be parsed inside "parseAssignmentExpressionOrHigher"
@@ -32749,7 +33557,7 @@
                 }
                 // Check for un-parenthesized AsyncArrowFunction
                 var expr = parseBinaryExpressionOrHigher(0 /* Lowest */);
-                if (!scanner.hasPrecedingLineBreak() && expr.kind === 78 /* Identifier */ && token() === 38 /* EqualsGreaterThanToken */) {
+                if (!scanner.hasPrecedingLineBreak() && expr.kind === 79 /* Identifier */ && token() === 38 /* EqualsGreaterThanToken */) {
                     return 1 /* True */;
                 }
             }
@@ -32814,8 +33622,8 @@
                 return parseFunctionBlock(isAsync ? 2 /* Await */ : 0 /* None */);
             }
             if (token() !== 26 /* SemicolonToken */ &&
-                token() !== 97 /* FunctionKeyword */ &&
-                token() !== 83 /* ClassKeyword */ &&
+                token() !== 98 /* FunctionKeyword */ &&
+                token() !== 84 /* ClassKeyword */ &&
                 isStartOfStatement() &&
                 !isStartOfExpressionStatement()) {
                 // Check if we got a plain statement (i.e. no expression-statements, no function/class expressions/declarations)
@@ -32853,7 +33661,7 @@
             var colonToken;
             return finishNode(factory.createConditionalExpression(leftOperand, questionToken, doOutsideOfContext(disallowInAndDecoratorContext, parseAssignmentExpressionOrHigher), colonToken = parseExpectedToken(58 /* ColonToken */), ts.nodeIsPresent(colonToken)
                 ? parseAssignmentExpressionOrHigher()
-                : createMissingNode(78 /* Identifier */, /*reportAtCurrentPosition*/ false, ts.Diagnostics._0_expected, ts.tokenToString(58 /* ColonToken */))), pos);
+                : createMissingNode(79 /* Identifier */, /*reportAtCurrentPosition*/ false, ts.Diagnostics._0_expected, ts.tokenToString(58 /* ColonToken */))), pos);
         }
         function parseBinaryExpressionOrHigher(precedence) {
             var pos = getNodePos();
@@ -32861,7 +33669,7 @@
             return parseBinaryExpressionRest(precedence, leftOperand, pos);
         }
         function isInOrOfKeyword(t) {
-            return t === 100 /* InKeyword */ || t === 157 /* OfKeyword */;
+            return t === 101 /* InKeyword */ || t === 158 /* OfKeyword */;
         }
         function parseBinaryExpressionRest(precedence, leftOperand, pos) {
             while (true) {
@@ -32896,10 +33704,10 @@
                 if (!consumeCurrentOperator) {
                     break;
                 }
-                if (token() === 100 /* InKeyword */ && inDisallowInContext()) {
+                if (token() === 101 /* InKeyword */ && inDisallowInContext()) {
                     break;
                 }
-                if (token() === 126 /* AsKeyword */) {
+                if (token() === 127 /* AsKeyword */) {
                     // Make sure we *do* perform ASI for constructs like this:
                     //    var x = foo
                     //    as (Bar)
@@ -32920,7 +33728,7 @@
             return leftOperand;
         }
         function isBinaryOperator() {
-            if (inDisallowInContext() && token() === 100 /* InKeyword */) {
+            if (inDisallowInContext() && token() === 101 /* InKeyword */) {
                 return false;
             }
             return ts.getBinaryOperatorPrecedence(token()) > 0;
@@ -32948,7 +33756,7 @@
             return finishNode(factory.createVoidExpression(nextTokenAnd(parseSimpleUnaryExpression)), pos);
         }
         function isAwaitExpression() {
-            if (token() === 130 /* AwaitKeyword */) {
+            if (token() === 131 /* AwaitKeyword */) {
                 if (inAwaitContext()) {
                     return true;
                 }
@@ -33001,7 +33809,7 @@
             if (token() === 42 /* AsteriskAsteriskToken */) {
                 var pos = ts.skipTrivia(sourceText, simpleUnaryExpression.pos);
                 var end = simpleUnaryExpression.end;
-                if (simpleUnaryExpression.kind === 207 /* TypeAssertionExpression */) {
+                if (simpleUnaryExpression.kind === 209 /* TypeAssertionExpression */) {
                     parseErrorAt(pos, end, ts.Diagnostics.A_type_assertion_expression_is_not_allowed_in_the_left_hand_side_of_an_exponentiation_expression_Consider_enclosing_the_expression_in_parentheses);
                 }
                 else {
@@ -33031,18 +33839,18 @@
                 case 54 /* TildeToken */:
                 case 53 /* ExclamationToken */:
                     return parsePrefixUnaryExpression();
-                case 88 /* DeleteKeyword */:
+                case 89 /* DeleteKeyword */:
                     return parseDeleteExpression();
-                case 111 /* TypeOfKeyword */:
+                case 112 /* TypeOfKeyword */:
                     return parseTypeOfExpression();
-                case 113 /* VoidKeyword */:
+                case 114 /* VoidKeyword */:
                     return parseVoidExpression();
                 case 29 /* LessThanToken */:
                     // This is modified UnaryExpression grammar in TypeScript
                     //  UnaryExpression (modified):
                     //      < type > UnaryExpression
                     return parseTypeAssertion();
-                case 130 /* AwaitKeyword */:
+                case 131 /* AwaitKeyword */:
                     if (isAwaitExpression()) {
                         return parseAwaitExpression();
                     }
@@ -33069,10 +33877,10 @@
                 case 40 /* MinusToken */:
                 case 54 /* TildeToken */:
                 case 53 /* ExclamationToken */:
-                case 88 /* DeleteKeyword */:
-                case 111 /* TypeOfKeyword */:
-                case 113 /* VoidKeyword */:
-                case 130 /* AwaitKeyword */:
+                case 89 /* DeleteKeyword */:
+                case 112 /* TypeOfKeyword */:
+                case 114 /* VoidKeyword */:
+                case 131 /* AwaitKeyword */:
                     return false;
                 case 29 /* LessThanToken */:
                     // If we are not in JSX context, we are parsing TypeAssertion which is an UnaryExpression
@@ -33148,7 +33956,7 @@
             // or starts the beginning of the first four CallExpression productions.
             var pos = getNodePos();
             var expression;
-            if (token() === 99 /* ImportKeyword */) {
+            if (token() === 100 /* ImportKeyword */) {
                 if (lookAhead(nextTokenIsOpenParenOrLessThan)) {
                     // We don't want to eagerly consume all import keyword as import call expression so we look ahead to find "("
                     // For example:
@@ -33162,7 +33970,7 @@
                     // This is an 'import.*' metaproperty (i.e. 'import.meta')
                     nextToken(); // advance past the 'import'
                     nextToken(); // advance past the dot
-                    expression = finishNode(factory.createMetaProperty(99 /* ImportKeyword */, parseIdentifierName()), pos);
+                    expression = finishNode(factory.createMetaProperty(100 /* ImportKeyword */, parseIdentifierName()), pos);
                     sourceFlags |= 2097152 /* PossiblyContainsImportMeta */;
                 }
                 else {
@@ -33170,7 +33978,7 @@
                 }
             }
             else {
-                expression = token() === 105 /* SuperKeyword */ ? parseSuperExpression() : parseMemberExpressionOrHigher();
+                expression = token() === 106 /* SuperKeyword */ ? parseSuperExpression() : parseMemberExpressionOrHigher();
             }
             // Now, we *may* be complete.  However, we might have consumed the start of a
             // CallExpression or OptionalExpression.  As such, we need to consume the rest
@@ -33248,23 +34056,45 @@
             // private names will never work with `super` (`super.#foo`), but that's a semantic error, not syntactic
             return finishNode(factory.createPropertyAccessExpression(expression, parseRightSideOfDot(/*allowIdentifierNames*/ true, /*allowPrivateIdentifiers*/ true)), pos);
         }
-        function parseJsxElementOrSelfClosingElementOrFragment(inExpressionContext, topInvalidNodePosition) {
+        function parseJsxElementOrSelfClosingElementOrFragment(inExpressionContext, topInvalidNodePosition, openingTag) {
             var pos = getNodePos();
             var opening = parseJsxOpeningOrSelfClosingElementOrOpeningFragment(inExpressionContext);
             var result;
-            if (opening.kind === 276 /* JsxOpeningElement */) {
+            if (opening.kind === 278 /* JsxOpeningElement */) {
                 var children = parseJsxChildren(opening);
-                var closingElement = parseJsxClosingElement(inExpressionContext);
-                if (!tagNamesAreEquivalent(opening.tagName, closingElement.tagName)) {
-                    parseErrorAtRange(closingElement, ts.Diagnostics.Expected_corresponding_JSX_closing_tag_for_0, ts.getTextOfNodeFromSourceText(sourceText, opening.tagName));
+                var closingElement = void 0;
+                var lastChild = children[children.length - 1];
+                if ((lastChild === null || lastChild === void 0 ? void 0 : lastChild.kind) === 276 /* JsxElement */
+                    && !tagNamesAreEquivalent(lastChild.openingElement.tagName, lastChild.closingElement.tagName)
+                    && tagNamesAreEquivalent(opening.tagName, lastChild.closingElement.tagName)) {
+                    // when an unclosed JsxOpeningElement incorrectly parses its parent's JsxClosingElement,
+                    // restructure (<div>(...<span></div>)) --> (<div>(...<span></span>)</div>)
+                    // (no need to error; the parent will error)
+                    var end = lastChild.openingElement.end; // newly-created children and closing are both zero-width end/end
+                    var newLast = finishNode(factory.createJsxElement(lastChild.openingElement, createNodeArray([], end, end), finishNode(factory.createJsxClosingElement(finishNode(factory.createIdentifier(""), end, end)), end, end)), lastChild.openingElement.pos, end);
+                    children = createNodeArray(__spreadArray(__spreadArray([], children.slice(0, children.length - 1), true), [newLast], false), children.pos, end);
+                    closingElement = lastChild.closingElement;
+                }
+                else {
+                    closingElement = parseJsxClosingElement(opening, inExpressionContext);
+                    if (!tagNamesAreEquivalent(opening.tagName, closingElement.tagName)) {
+                        if (openingTag && ts.isJsxOpeningElement(openingTag) && tagNamesAreEquivalent(closingElement.tagName, openingTag.tagName)) {
+                            // opening incorrectly matched with its parent's closing -- put error on opening
+                            parseErrorAtRange(opening.tagName, ts.Diagnostics.JSX_element_0_has_no_corresponding_closing_tag, ts.getTextOfNodeFromSourceText(sourceText, opening.tagName));
+                        }
+                        else {
+                            // other opening/closing mismatches -- put error on closing
+                            parseErrorAtRange(closingElement.tagName, ts.Diagnostics.Expected_corresponding_JSX_closing_tag_for_0, ts.getTextOfNodeFromSourceText(sourceText, opening.tagName));
+                        }
+                    }
                 }
                 result = finishNode(factory.createJsxElement(opening, children, closingElement), pos);
             }
-            else if (opening.kind === 279 /* JsxOpeningFragment */) {
+            else if (opening.kind === 281 /* JsxOpeningFragment */) {
                 result = finishNode(factory.createJsxFragment(opening, parseJsxChildren(opening), parseJsxClosingFragment(inExpressionContext)), pos);
             }
             else {
-                ts.Debug.assert(opening.kind === 275 /* JsxSelfClosingElement */);
+                ts.Debug.assert(opening.kind === 277 /* JsxSelfClosingElement */);
                 // Nothing else to do for self-closing elements
                 result = opening;
             }
@@ -33318,7 +34148,7 @@
                 case 18 /* OpenBraceToken */:
                     return parseJsxExpression(/*inExpressionContext*/ false);
                 case 29 /* LessThanToken */:
-                    return parseJsxElementOrSelfClosingElementOrFragment(/*inExpressionContext*/ false);
+                    return parseJsxElementOrSelfClosingElementOrFragment(/*inExpressionContext*/ false, /*topInvalidNodePosition*/ undefined, openingTag);
                 default:
                     return ts.Debug.assertNever(token);
             }
@@ -33333,6 +34163,13 @@
                 if (!child)
                     break;
                 list.push(child);
+                if (ts.isJsxOpeningElement(openingTag)
+                    && (child === null || child === void 0 ? void 0 : child.kind) === 276 /* JsxElement */
+                    && !tagNamesAreEquivalent(child.openingElement.tagName, child.closingElement.tagName)
+                    && tagNamesAreEquivalent(openingTag.tagName, child.closingElement.tagName)) {
+                    // stop after parsing a mismatched child like <div>...(<span></div>) in order to reattach the </div> higher
+                    break;
+                }
             }
             parsingContext = saveParsingContext;
             return createNodeArray(list, listPos);
@@ -33362,12 +34199,14 @@
             }
             else {
                 parseExpected(43 /* SlashToken */);
-                if (inExpressionContext) {
-                    parseExpected(31 /* GreaterThanToken */);
-                }
-                else {
-                    parseExpected(31 /* GreaterThanToken */, /*diagnostic*/ undefined, /*shouldAdvance*/ false);
-                    scanJsxText();
+                if (parseExpected(31 /* GreaterThanToken */, /*diagnostic*/ undefined, /*shouldAdvance*/ false)) {
+                    // manually advance the scanner in order to look for jsx text inside jsx
+                    if (inExpressionContext) {
+                        nextToken();
+                    }
+                    else {
+                        scanJsxText();
+                    }
                 }
                 node = factory.createJsxSelfClosingElement(tagName, typeArguments, attributes);
             }
@@ -33381,7 +34220,7 @@
             //      primaryExpression in the form of an identifier and "this" keyword
             // We can't just simply use parseLeftHandSideExpressionOrHigher because then we will start consider class,function etc as a keyword
             // We only want to consider "this" as a primaryExpression
-            var expression = token() === 107 /* ThisKeyword */ ?
+            var expression = token() === 108 /* ThisKeyword */ ?
                 parseTokenNode() : parseIdentifierName();
             while (parseOptional(24 /* DotToken */)) {
                 expression = finishNode(factory.createPropertyAccessExpression(expression, parseRightSideOfDot(/*allowIdentifierNames*/ true, /*allowPrivateIdentifiers*/ false)), pos);
@@ -33418,7 +34257,7 @@
             }
             scanJsxIdentifier();
             var pos = getNodePos();
-            return finishNode(factory.createJsxAttribute(parseIdentifierName(), token() !== 62 /* EqualsToken */ ? undefined :
+            return finishNode(factory.createJsxAttribute(parseIdentifierName(), token() !== 63 /* EqualsToken */ ? undefined :
                 scanJsxAttributeValue() === 10 /* StringLiteral */ ? parseLiteralNode() :
                     parseJsxExpression(/*inExpressionContext*/ true)), pos);
         }
@@ -33430,16 +34269,18 @@
             parseExpected(19 /* CloseBraceToken */);
             return finishNode(factory.createJsxSpreadAttribute(expression), pos);
         }
-        function parseJsxClosingElement(inExpressionContext) {
+        function parseJsxClosingElement(open, inExpressionContext) {
             var pos = getNodePos();
             parseExpected(30 /* LessThanSlashToken */);
             var tagName = parseJsxElementName();
-            if (inExpressionContext) {
-                parseExpected(31 /* GreaterThanToken */);
-            }
-            else {
-                parseExpected(31 /* GreaterThanToken */, /*diagnostic*/ undefined, /*shouldAdvance*/ false);
-                scanJsxText();
+            if (parseExpected(31 /* GreaterThanToken */, /*diagnostic*/ undefined, /*shouldAdvance*/ false)) {
+                // manually advance the scanner in order to look for jsx text inside jsx
+                if (inExpressionContext || !tagNamesAreEquivalent(open.tagName, tagName)) {
+                    nextToken();
+                }
+                else {
+                    scanJsxText();
+                }
             }
             return finishNode(factory.createJsxClosingElement(tagName), pos);
         }
@@ -33449,12 +34290,14 @@
             if (ts.tokenIsIdentifierOrKeyword(token())) {
                 parseErrorAtRange(parseJsxElementName(), ts.Diagnostics.Expected_corresponding_closing_tag_for_JSX_fragment);
             }
-            if (inExpressionContext) {
-                parseExpected(31 /* GreaterThanToken */);
-            }
-            else {
-                parseExpected(31 /* GreaterThanToken */, /*diagnostic*/ undefined, /*shouldAdvance*/ false);
-                scanJsxText();
+            if (parseExpected(31 /* GreaterThanToken */, /*diagnostic*/ undefined, /*shouldAdvance*/ false)) {
+                // manually advance the scanner in order to look for jsx text inside jsx
+                if (inExpressionContext) {
+                    nextToken();
+                }
+                else {
+                    scanJsxText();
+                }
             }
             return finishNode(factory.createJsxJsxClosingFragment(), pos);
         }
@@ -33511,7 +34354,7 @@
         function parseElementAccessExpressionRest(pos, expression, questionDotToken) {
             var argumentExpression;
             if (token() === 23 /* CloseBracketToken */) {
-                argumentExpression = createMissingNode(78 /* Identifier */, /*reportAtCurrentPosition*/ true, ts.Diagnostics.An_element_access_expression_should_take_an_argument);
+                argumentExpression = createMissingNode(79 /* Identifier */, /*reportAtCurrentPosition*/ true, ts.Diagnostics.An_element_access_expression_should_take_an_argument);
             }
             else {
                 var argument = allowInAnd(parseExpression);
@@ -33606,7 +34449,7 @@
                 }
                 if (questionDotToken) {
                     // We failed to parse anything, so report a missing identifier here.
-                    var name = createMissingNode(78 /* Identifier */, /*reportAtCurrentPosition*/ false, ts.Diagnostics.Identifier_expected);
+                    var name = createMissingNode(79 /* Identifier */, /*reportAtCurrentPosition*/ false, ts.Diagnostics.Identifier_expected);
                     expression = finishNode(factory.createPropertyAccessChain(expression, questionDotToken, name), pos);
                 }
                 break;
@@ -33687,11 +34530,11 @@
                 case 10 /* StringLiteral */:
                 case 14 /* NoSubstitutionTemplateLiteral */:
                     return parseLiteralNode();
-                case 107 /* ThisKeyword */:
-                case 105 /* SuperKeyword */:
-                case 103 /* NullKeyword */:
-                case 109 /* TrueKeyword */:
-                case 94 /* FalseKeyword */:
+                case 108 /* ThisKeyword */:
+                case 106 /* SuperKeyword */:
+                case 104 /* NullKeyword */:
+                case 110 /* TrueKeyword */:
+                case 95 /* FalseKeyword */:
                     return parseTokenNode();
                 case 20 /* OpenParenToken */:
                     return parseParenthesizedExpression();
@@ -33699,7 +34542,7 @@
                     return parseArrayLiteralExpression();
                 case 18 /* OpenBraceToken */:
                     return parseObjectLiteralExpression();
-                case 129 /* AsyncKeyword */:
+                case 130 /* AsyncKeyword */:
                     // Async arrow functions are parsed earlier in parseAssignmentExpressionOrHigher.
                     // If we encounter `async [no LineTerminator here] function` then this is an async
                     // function; otherwise, its an identifier.
@@ -33707,14 +34550,14 @@
                         break;
                     }
                     return parseFunctionExpression();
-                case 83 /* ClassKeyword */:
+                case 84 /* ClassKeyword */:
                     return parseClassExpression();
-                case 97 /* FunctionKeyword */:
+                case 98 /* FunctionKeyword */:
                     return parseFunctionExpression();
-                case 102 /* NewKeyword */:
+                case 103 /* NewKeyword */:
                     return parseNewExpressionOrNewDotTarget();
                 case 43 /* SlashToken */:
-                case 67 /* SlashEqualsToken */:
+                case 68 /* SlashEqualsToken */:
                     if (reScanSlashToken() === 13 /* RegularExpressionLiteral */) {
                         return parseLiteralNode();
                     }
@@ -33763,11 +34606,11 @@
             }
             var decorators = parseDecorators();
             var modifiers = parseModifiers();
-            if (parseContextualModifier(134 /* GetKeyword */)) {
-                return parseAccessorDeclaration(pos, hasJSDoc, decorators, modifiers, 168 /* GetAccessor */);
+            if (parseContextualModifier(135 /* GetKeyword */)) {
+                return parseAccessorDeclaration(pos, hasJSDoc, decorators, modifiers, 170 /* GetAccessor */);
             }
-            if (parseContextualModifier(146 /* SetKeyword */)) {
-                return parseAccessorDeclaration(pos, hasJSDoc, decorators, modifiers, 169 /* SetAccessor */);
+            if (parseContextualModifier(147 /* SetKeyword */)) {
+                return parseAccessorDeclaration(pos, hasJSDoc, decorators, modifiers, 171 /* SetAccessor */);
             }
             var asteriskToken = parseOptionalToken(41 /* AsteriskToken */);
             var tokenIsIdentifier = isIdentifier();
@@ -33786,7 +34629,7 @@
             var node;
             var isShorthandPropertyAssignment = tokenIsIdentifier && (token() !== 58 /* ColonToken */);
             if (isShorthandPropertyAssignment) {
-                var equalsToken = parseOptionalToken(62 /* EqualsToken */);
+                var equalsToken = parseOptionalToken(63 /* EqualsToken */);
                 var objectAssignmentInitializer = equalsToken ? allowInAnd(parseAssignmentExpressionOrHigher) : undefined;
                 node = factory.createShorthandPropertyAssignment(name, objectAssignmentInitializer);
                 // Save equals token for error reporting.
@@ -33825,14 +34668,12 @@
             //
             // FunctionExpression:
             //      function BindingIdentifier[opt](FormalParameters){ FunctionBody }
-            var saveDecoratorContext = inDecoratorContext();
-            if (saveDecoratorContext) {
-                setDecoratorContext(/*val*/ false);
-            }
+            var savedDecoratorContext = inDecoratorContext();
+            setDecoratorContext(/*val*/ false);
             var pos = getNodePos();
             var hasJSDoc = hasPrecedingJSDocComment();
             var modifiers = parseModifiers();
-            parseExpected(97 /* FunctionKeyword */);
+            parseExpected(98 /* FunctionKeyword */);
             var asteriskToken = parseOptionalToken(41 /* AsteriskToken */);
             var isGenerator = asteriskToken ? 1 /* Yield */ : 0 /* None */;
             var isAsync = ts.some(modifiers, ts.isAsyncModifier) ? 2 /* Await */ : 0 /* None */;
@@ -33844,9 +34685,7 @@
             var parameters = parseParameters(isGenerator | isAsync);
             var type = parseReturnType(58 /* ColonToken */, /*isType*/ false);
             var body = parseFunctionBlock(isGenerator | isAsync);
-            if (saveDecoratorContext) {
-                setDecoratorContext(/*val*/ true);
-            }
+            setDecoratorContext(savedDecoratorContext);
             var node = factory.createFunctionExpression(modifiers, asteriskToken, name, typeParameters, parameters, type, body);
             return withJSDoc(finishNode(node, pos), hasJSDoc);
         }
@@ -33855,10 +34694,10 @@
         }
         function parseNewExpressionOrNewDotTarget() {
             var pos = getNodePos();
-            parseExpected(102 /* NewKeyword */);
+            parseExpected(103 /* NewKeyword */);
             if (parseOptional(24 /* DotToken */)) {
                 var name = parseIdentifierName();
-                return finishNode(factory.createMetaProperty(102 /* NewKeyword */, name), pos);
+                return finishNode(factory.createMetaProperty(103 /* NewKeyword */, name), pos);
             }
             var expressionPos = getNodePos();
             var expression = parsePrimaryExpression();
@@ -33897,7 +34736,7 @@
                     }
                 }
                 var result = withJSDoc(finishNode(factory.createBlock(statements, multiLine), pos), hasJSDoc);
-                if (token() === 62 /* EqualsToken */) {
+                if (token() === 63 /* EqualsToken */) {
                     parseErrorAtCurrentToken(ts.Diagnostics.Declaration_or_statement_expected_This_follows_a_block_of_statements_so_if_you_intended_to_write_a_destructuring_assignment_you_might_need_to_wrap_the_the_whole_assignment_in_parentheses);
                     nextToken();
                 }
@@ -33939,20 +34778,20 @@
         function parseIfStatement() {
             var pos = getNodePos();
             var hasJSDoc = hasPrecedingJSDocComment();
-            parseExpected(98 /* IfKeyword */);
+            parseExpected(99 /* IfKeyword */);
             parseExpected(20 /* OpenParenToken */);
             var expression = allowInAnd(parseExpression);
             parseExpected(21 /* CloseParenToken */);
             var thenStatement = parseStatement();
-            var elseStatement = parseOptional(90 /* ElseKeyword */) ? parseStatement() : undefined;
+            var elseStatement = parseOptional(91 /* ElseKeyword */) ? parseStatement() : undefined;
             return withJSDoc(finishNode(factory.createIfStatement(expression, thenStatement, elseStatement), pos), hasJSDoc);
         }
         function parseDoStatement() {
             var pos = getNodePos();
             var hasJSDoc = hasPrecedingJSDocComment();
-            parseExpected(89 /* DoKeyword */);
+            parseExpected(90 /* DoKeyword */);
             var statement = parseStatement();
-            parseExpected(114 /* WhileKeyword */);
+            parseExpected(115 /* WhileKeyword */);
             parseExpected(20 /* OpenParenToken */);
             var expression = allowInAnd(parseExpression);
             parseExpected(21 /* CloseParenToken */);
@@ -33966,7 +34805,7 @@
         function parseWhileStatement() {
             var pos = getNodePos();
             var hasJSDoc = hasPrecedingJSDocComment();
-            parseExpected(114 /* WhileKeyword */);
+            parseExpected(115 /* WhileKeyword */);
             parseExpected(20 /* OpenParenToken */);
             var expression = allowInAnd(parseExpression);
             parseExpected(21 /* CloseParenToken */);
@@ -33976,12 +34815,12 @@
         function parseForOrForInOrForOfStatement() {
             var pos = getNodePos();
             var hasJSDoc = hasPrecedingJSDocComment();
-            parseExpected(96 /* ForKeyword */);
-            var awaitToken = parseOptionalToken(130 /* AwaitKeyword */);
+            parseExpected(97 /* ForKeyword */);
+            var awaitToken = parseOptionalToken(131 /* AwaitKeyword */);
             parseExpected(20 /* OpenParenToken */);
             var initializer;
             if (token() !== 26 /* SemicolonToken */) {
-                if (token() === 112 /* VarKeyword */ || token() === 118 /* LetKeyword */ || token() === 84 /* ConstKeyword */) {
+                if (token() === 113 /* VarKeyword */ || token() === 119 /* LetKeyword */ || token() === 85 /* ConstKeyword */) {
                     initializer = parseVariableDeclarationList(/*inForStatementInitializer*/ true);
                 }
                 else {
@@ -33989,12 +34828,12 @@
                 }
             }
             var node;
-            if (awaitToken ? parseExpected(157 /* OfKeyword */) : parseOptional(157 /* OfKeyword */)) {
+            if (awaitToken ? parseExpected(158 /* OfKeyword */) : parseOptional(158 /* OfKeyword */)) {
                 var expression = allowInAnd(parseAssignmentExpressionOrHigher);
                 parseExpected(21 /* CloseParenToken */);
                 node = factory.createForOfStatement(awaitToken, initializer, expression, parseStatement());
             }
-            else if (parseOptional(100 /* InKeyword */)) {
+            else if (parseOptional(101 /* InKeyword */)) {
                 var expression = allowInAnd(parseExpression);
                 parseExpected(21 /* CloseParenToken */);
                 node = factory.createForInStatement(initializer, expression, parseStatement());
@@ -34016,10 +34855,10 @@
         function parseBreakOrContinueStatement(kind) {
             var pos = getNodePos();
             var hasJSDoc = hasPrecedingJSDocComment();
-            parseExpected(kind === 242 /* BreakStatement */ ? 80 /* BreakKeyword */ : 85 /* ContinueKeyword */);
+            parseExpected(kind === 244 /* BreakStatement */ ? 81 /* BreakKeyword */ : 86 /* ContinueKeyword */);
             var label = canParseSemicolon() ? undefined : parseIdentifier();
             parseSemicolon();
-            var node = kind === 242 /* BreakStatement */
+            var node = kind === 244 /* BreakStatement */
                 ? factory.createBreakStatement(label)
                 : factory.createContinueStatement(label);
             return withJSDoc(finishNode(node, pos), hasJSDoc);
@@ -34027,7 +34866,7 @@
         function parseReturnStatement() {
             var pos = getNodePos();
             var hasJSDoc = hasPrecedingJSDocComment();
-            parseExpected(104 /* ReturnKeyword */);
+            parseExpected(105 /* ReturnKeyword */);
             var expression = canParseSemicolon() ? undefined : allowInAnd(parseExpression);
             parseSemicolon();
             return withJSDoc(finishNode(factory.createReturnStatement(expression), pos), hasJSDoc);
@@ -34035,7 +34874,7 @@
         function parseWithStatement() {
             var pos = getNodePos();
             var hasJSDoc = hasPrecedingJSDocComment();
-            parseExpected(115 /* WithKeyword */);
+            parseExpected(116 /* WithKeyword */);
             parseExpected(20 /* OpenParenToken */);
             var expression = allowInAnd(parseExpression);
             parseExpected(21 /* CloseParenToken */);
@@ -34044,7 +34883,7 @@
         }
         function parseCaseClause() {
             var pos = getNodePos();
-            parseExpected(81 /* CaseKeyword */);
+            parseExpected(82 /* CaseKeyword */);
             var expression = allowInAnd(parseExpression);
             parseExpected(58 /* ColonToken */);
             var statements = parseList(3 /* SwitchClauseStatements */, parseStatement);
@@ -34052,13 +34891,13 @@
         }
         function parseDefaultClause() {
             var pos = getNodePos();
-            parseExpected(87 /* DefaultKeyword */);
+            parseExpected(88 /* DefaultKeyword */);
             parseExpected(58 /* ColonToken */);
             var statements = parseList(3 /* SwitchClauseStatements */, parseStatement);
             return finishNode(factory.createDefaultClause(statements), pos);
         }
         function parseCaseOrDefaultClause() {
-            return token() === 81 /* CaseKeyword */ ? parseCaseClause() : parseDefaultClause();
+            return token() === 82 /* CaseKeyword */ ? parseCaseClause() : parseDefaultClause();
         }
         function parseCaseBlock() {
             var pos = getNodePos();
@@ -34070,7 +34909,7 @@
         function parseSwitchStatement() {
             var pos = getNodePos();
             var hasJSDoc = hasPrecedingJSDocComment();
-            parseExpected(106 /* SwitchKeyword */);
+            parseExpected(107 /* SwitchKeyword */);
             parseExpected(20 /* OpenParenToken */);
             var expression = allowInAnd(parseExpression);
             parseExpected(21 /* CloseParenToken */);
@@ -34082,7 +34921,7 @@
             //      throw [no LineTerminator here]Expression[In, ?Yield];
             var pos = getNodePos();
             var hasJSDoc = hasPrecedingJSDocComment();
-            parseExpected(108 /* ThrowKeyword */);
+            parseExpected(109 /* ThrowKeyword */);
             // Because of automatic semicolon insertion, we need to report error if this
             // throw could be terminated with a semicolon.  Note: we can't call 'parseExpression'
             // directly as that might consume an expression on the following line.
@@ -34093,28 +34932,30 @@
                 identifierCount++;
                 expression = finishNode(factory.createIdentifier(""), getNodePos());
             }
-            parseSemicolon();
+            if (!tryParseSemicolon()) {
+                parseErrorForMissingSemicolonAfter(expression);
+            }
             return withJSDoc(finishNode(factory.createThrowStatement(expression), pos), hasJSDoc);
         }
         // TODO: Review for error recovery
         function parseTryStatement() {
             var pos = getNodePos();
             var hasJSDoc = hasPrecedingJSDocComment();
-            parseExpected(110 /* TryKeyword */);
+            parseExpected(111 /* TryKeyword */);
             var tryBlock = parseBlock(/*ignoreMissingOpenBrace*/ false);
-            var catchClause = token() === 82 /* CatchKeyword */ ? parseCatchClause() : undefined;
+            var catchClause = token() === 83 /* CatchKeyword */ ? parseCatchClause() : undefined;
             // If we don't have a catch clause, then we must have a finally clause.  Try to parse
             // one out no matter what.
             var finallyBlock;
-            if (!catchClause || token() === 95 /* FinallyKeyword */) {
-                parseExpected(95 /* FinallyKeyword */);
+            if (!catchClause || token() === 96 /* FinallyKeyword */) {
+                parseExpected(96 /* FinallyKeyword */);
                 finallyBlock = parseBlock(/*ignoreMissingOpenBrace*/ false);
             }
             return withJSDoc(finishNode(factory.createTryStatement(tryBlock, catchClause, finallyBlock), pos), hasJSDoc);
         }
         function parseCatchClause() {
             var pos = getNodePos();
-            parseExpected(82 /* CatchKeyword */);
+            parseExpected(83 /* CatchKeyword */);
             var variableDeclaration;
             if (parseOptional(20 /* OpenParenToken */)) {
                 variableDeclaration = parseVariableDeclaration();
@@ -34130,7 +34971,7 @@
         function parseDebuggerStatement() {
             var pos = getNodePos();
             var hasJSDoc = hasPrecedingJSDocComment();
-            parseExpected(86 /* DebuggerKeyword */);
+            parseExpected(87 /* DebuggerKeyword */);
             parseSemicolon();
             return withJSDoc(finishNode(factory.createDebuggerStatement(), pos), hasJSDoc);
         }
@@ -34147,7 +34988,9 @@
                 node = factory.createLabeledStatement(expression, parseStatement());
             }
             else {
-                parseSemicolon();
+                if (!tryParseSemicolon()) {
+                    parseErrorForMissingSemicolonAfter(expression);
+                }
                 node = factory.createExpressionStatement(expression);
                 if (hasParen) {
                     // do not parse the same jsdoc twice
@@ -34162,11 +35005,11 @@
         }
         function nextTokenIsClassKeywordOnSameLine() {
             nextToken();
-            return token() === 83 /* ClassKeyword */ && !scanner.hasPrecedingLineBreak();
+            return token() === 84 /* ClassKeyword */ && !scanner.hasPrecedingLineBreak();
         }
         function nextTokenIsFunctionKeywordOnSameLine() {
             nextToken();
-            return token() === 97 /* FunctionKeyword */ && !scanner.hasPrecedingLineBreak();
+            return token() === 98 /* FunctionKeyword */ && !scanner.hasPrecedingLineBreak();
         }
         function nextTokenIsIdentifierOrKeywordOrLiteralOnSameLine() {
             nextToken();
@@ -34175,12 +35018,12 @@
         function isDeclaration() {
             while (true) {
                 switch (token()) {
-                    case 112 /* VarKeyword */:
-                    case 118 /* LetKeyword */:
-                    case 84 /* ConstKeyword */:
-                    case 97 /* FunctionKeyword */:
-                    case 83 /* ClassKeyword */:
-                    case 91 /* EnumKeyword */:
+                    case 113 /* VarKeyword */:
+                    case 119 /* LetKeyword */:
+                    case 85 /* ConstKeyword */:
+                    case 98 /* FunctionKeyword */:
+                    case 84 /* ClassKeyword */:
+                    case 92 /* EnumKeyword */:
                         return true;
                     // 'declare', 'module', 'namespace', 'interface'* and 'type' are all legal JavaScript identifiers;
                     // however, an identifier cannot be followed by another identifier on the same line. This is what we
@@ -34203,44 +35046,44 @@
                     //   I {}
                     //
                     // could be legal, it would add complexity for very little gain.
-                    case 117 /* InterfaceKeyword */:
-                    case 149 /* TypeKeyword */:
+                    case 118 /* InterfaceKeyword */:
+                    case 150 /* TypeKeyword */:
                         return nextTokenIsIdentifierOnSameLine();
-                    case 139 /* ModuleKeyword */:
-                    case 140 /* NamespaceKeyword */:
+                    case 140 /* ModuleKeyword */:
+                    case 141 /* NamespaceKeyword */:
                         return nextTokenIsIdentifierOrStringLiteralOnSameLine();
-                    case 125 /* AbstractKeyword */:
-                    case 129 /* AsyncKeyword */:
-                    case 133 /* DeclareKeyword */:
-                    case 120 /* PrivateKeyword */:
-                    case 121 /* ProtectedKeyword */:
-                    case 122 /* PublicKeyword */:
-                    case 142 /* ReadonlyKeyword */:
+                    case 126 /* AbstractKeyword */:
+                    case 130 /* AsyncKeyword */:
+                    case 134 /* DeclareKeyword */:
+                    case 121 /* PrivateKeyword */:
+                    case 122 /* ProtectedKeyword */:
+                    case 123 /* PublicKeyword */:
+                    case 143 /* ReadonlyKeyword */:
                         nextToken();
                         // ASI takes effect for this modifier.
                         if (scanner.hasPrecedingLineBreak()) {
                             return false;
                         }
                         continue;
-                    case 154 /* GlobalKeyword */:
+                    case 155 /* GlobalKeyword */:
                         nextToken();
-                        return token() === 18 /* OpenBraceToken */ || token() === 78 /* Identifier */ || token() === 92 /* ExportKeyword */;
-                    case 99 /* ImportKeyword */:
+                        return token() === 18 /* OpenBraceToken */ || token() === 79 /* Identifier */ || token() === 93 /* ExportKeyword */;
+                    case 100 /* ImportKeyword */:
                         nextToken();
                         return token() === 10 /* StringLiteral */ || token() === 41 /* AsteriskToken */ ||
                             token() === 18 /* OpenBraceToken */ || ts.tokenIsIdentifierOrKeyword(token());
-                    case 92 /* ExportKeyword */:
+                    case 93 /* ExportKeyword */:
                         var currentToken_1 = nextToken();
-                        if (currentToken_1 === 149 /* TypeKeyword */) {
+                        if (currentToken_1 === 150 /* TypeKeyword */) {
                             currentToken_1 = lookAhead(nextToken);
                         }
-                        if (currentToken_1 === 62 /* EqualsToken */ || currentToken_1 === 41 /* AsteriskToken */ ||
-                            currentToken_1 === 18 /* OpenBraceToken */ || currentToken_1 === 87 /* DefaultKeyword */ ||
-                            currentToken_1 === 126 /* AsKeyword */) {
+                        if (currentToken_1 === 63 /* EqualsToken */ || currentToken_1 === 41 /* AsteriskToken */ ||
+                            currentToken_1 === 18 /* OpenBraceToken */ || currentToken_1 === 88 /* DefaultKeyword */ ||
+                            currentToken_1 === 127 /* AsKeyword */) {
                             return true;
                         }
                         continue;
-                    case 123 /* StaticKeyword */:
+                    case 124 /* StaticKeyword */:
                         nextToken();
                         continue;
                     default:
@@ -34256,48 +35099,48 @@
                 case 59 /* AtToken */:
                 case 26 /* SemicolonToken */:
                 case 18 /* OpenBraceToken */:
-                case 112 /* VarKeyword */:
-                case 118 /* LetKeyword */:
-                case 97 /* FunctionKeyword */:
-                case 83 /* ClassKeyword */:
-                case 91 /* EnumKeyword */:
-                case 98 /* IfKeyword */:
-                case 89 /* DoKeyword */:
-                case 114 /* WhileKeyword */:
-                case 96 /* ForKeyword */:
-                case 85 /* ContinueKeyword */:
-                case 80 /* BreakKeyword */:
-                case 104 /* ReturnKeyword */:
-                case 115 /* WithKeyword */:
-                case 106 /* SwitchKeyword */:
-                case 108 /* ThrowKeyword */:
-                case 110 /* TryKeyword */:
-                case 86 /* DebuggerKeyword */:
+                case 113 /* VarKeyword */:
+                case 119 /* LetKeyword */:
+                case 98 /* FunctionKeyword */:
+                case 84 /* ClassKeyword */:
+                case 92 /* EnumKeyword */:
+                case 99 /* IfKeyword */:
+                case 90 /* DoKeyword */:
+                case 115 /* WhileKeyword */:
+                case 97 /* ForKeyword */:
+                case 86 /* ContinueKeyword */:
+                case 81 /* BreakKeyword */:
+                case 105 /* ReturnKeyword */:
+                case 116 /* WithKeyword */:
+                case 107 /* SwitchKeyword */:
+                case 109 /* ThrowKeyword */:
+                case 111 /* TryKeyword */:
+                case 87 /* DebuggerKeyword */:
                 // 'catch' and 'finally' do not actually indicate that the code is part of a statement,
                 // however, we say they are here so that we may gracefully parse them and error later.
                 // falls through
-                case 82 /* CatchKeyword */:
-                case 95 /* FinallyKeyword */:
+                case 83 /* CatchKeyword */:
+                case 96 /* FinallyKeyword */:
                     return true;
-                case 99 /* ImportKeyword */:
+                case 100 /* ImportKeyword */:
                     return isStartOfDeclaration() || lookAhead(nextTokenIsOpenParenOrLessThanOrDot);
-                case 84 /* ConstKeyword */:
-                case 92 /* ExportKeyword */:
+                case 85 /* ConstKeyword */:
+                case 93 /* ExportKeyword */:
                     return isStartOfDeclaration();
-                case 129 /* AsyncKeyword */:
-                case 133 /* DeclareKeyword */:
-                case 117 /* InterfaceKeyword */:
-                case 139 /* ModuleKeyword */:
-                case 140 /* NamespaceKeyword */:
-                case 149 /* TypeKeyword */:
-                case 154 /* GlobalKeyword */:
+                case 130 /* AsyncKeyword */:
+                case 134 /* DeclareKeyword */:
+                case 118 /* InterfaceKeyword */:
+                case 140 /* ModuleKeyword */:
+                case 141 /* NamespaceKeyword */:
+                case 150 /* TypeKeyword */:
+                case 155 /* GlobalKeyword */:
                     // When these don't start a declaration, they're an identifier in an expression statement
                     return true;
-                case 122 /* PublicKeyword */:
-                case 120 /* PrivateKeyword */:
-                case 121 /* ProtectedKeyword */:
-                case 123 /* StaticKeyword */:
-                case 142 /* ReadonlyKeyword */:
+                case 123 /* PublicKeyword */:
+                case 121 /* PrivateKeyword */:
+                case 122 /* ProtectedKeyword */:
+                case 124 /* StaticKeyword */:
+                case 143 /* ReadonlyKeyword */:
                     // When these don't start a declaration, they may be the start of a class member if an identifier
                     // immediately follows. Otherwise they're an identifier in an expression statement.
                     return isStartOfDeclaration() || !lookAhead(nextTokenIsIdentifierOrKeywordOnSameLine);
@@ -34305,14 +35148,14 @@
                     return isStartOfExpression();
             }
         }
-        function nextTokenIsIdentifierOrStartOfDestructuring() {
+        function nextTokenIsBindingIdentifierOrStartOfDestructuring() {
             nextToken();
-            return isIdentifier() || token() === 18 /* OpenBraceToken */ || token() === 22 /* OpenBracketToken */;
+            return isBindingIdentifier() || token() === 18 /* OpenBraceToken */ || token() === 22 /* OpenBracketToken */;
         }
         function isLetDeclaration() {
             // In ES6 'let' always starts a lexical declaration if followed by an identifier or {
             // or [.
-            return lookAhead(nextTokenIsIdentifierOrStartOfDestructuring);
+            return lookAhead(nextTokenIsBindingIdentifierOrStartOfDestructuring);
         }
         function parseStatement() {
             switch (token()) {
@@ -34320,64 +35163,64 @@
                     return parseEmptyStatement();
                 case 18 /* OpenBraceToken */:
                     return parseBlock(/*ignoreMissingOpenBrace*/ false);
-                case 112 /* VarKeyword */:
+                case 113 /* VarKeyword */:
                     return parseVariableStatement(getNodePos(), hasPrecedingJSDocComment(), /*decorators*/ undefined, /*modifiers*/ undefined);
-                case 118 /* LetKeyword */:
+                case 119 /* LetKeyword */:
                     if (isLetDeclaration()) {
                         return parseVariableStatement(getNodePos(), hasPrecedingJSDocComment(), /*decorators*/ undefined, /*modifiers*/ undefined);
                     }
                     break;
-                case 97 /* FunctionKeyword */:
+                case 98 /* FunctionKeyword */:
                     return parseFunctionDeclaration(getNodePos(), hasPrecedingJSDocComment(), /*decorators*/ undefined, /*modifiers*/ undefined);
-                case 83 /* ClassKeyword */:
+                case 84 /* ClassKeyword */:
                     return parseClassDeclaration(getNodePos(), hasPrecedingJSDocComment(), /*decorators*/ undefined, /*modifiers*/ undefined);
-                case 98 /* IfKeyword */:
+                case 99 /* IfKeyword */:
                     return parseIfStatement();
-                case 89 /* DoKeyword */:
+                case 90 /* DoKeyword */:
                     return parseDoStatement();
-                case 114 /* WhileKeyword */:
+                case 115 /* WhileKeyword */:
                     return parseWhileStatement();
-                case 96 /* ForKeyword */:
+                case 97 /* ForKeyword */:
                     return parseForOrForInOrForOfStatement();
-                case 85 /* ContinueKeyword */:
-                    return parseBreakOrContinueStatement(241 /* ContinueStatement */);
-                case 80 /* BreakKeyword */:
-                    return parseBreakOrContinueStatement(242 /* BreakStatement */);
-                case 104 /* ReturnKeyword */:
+                case 86 /* ContinueKeyword */:
+                    return parseBreakOrContinueStatement(243 /* ContinueStatement */);
+                case 81 /* BreakKeyword */:
+                    return parseBreakOrContinueStatement(244 /* BreakStatement */);
+                case 105 /* ReturnKeyword */:
                     return parseReturnStatement();
-                case 115 /* WithKeyword */:
+                case 116 /* WithKeyword */:
                     return parseWithStatement();
-                case 106 /* SwitchKeyword */:
+                case 107 /* SwitchKeyword */:
                     return parseSwitchStatement();
-                case 108 /* ThrowKeyword */:
+                case 109 /* ThrowKeyword */:
                     return parseThrowStatement();
-                case 110 /* TryKeyword */:
+                case 111 /* TryKeyword */:
                 // Include 'catch' and 'finally' for error recovery.
                 // falls through
-                case 82 /* CatchKeyword */:
-                case 95 /* FinallyKeyword */:
+                case 83 /* CatchKeyword */:
+                case 96 /* FinallyKeyword */:
                     return parseTryStatement();
-                case 86 /* DebuggerKeyword */:
+                case 87 /* DebuggerKeyword */:
                     return parseDebuggerStatement();
                 case 59 /* AtToken */:
                     return parseDeclaration();
-                case 129 /* AsyncKeyword */:
-                case 117 /* InterfaceKeyword */:
-                case 149 /* TypeKeyword */:
-                case 139 /* ModuleKeyword */:
-                case 140 /* NamespaceKeyword */:
-                case 133 /* DeclareKeyword */:
-                case 84 /* ConstKeyword */:
-                case 91 /* EnumKeyword */:
-                case 92 /* ExportKeyword */:
-                case 99 /* ImportKeyword */:
-                case 120 /* PrivateKeyword */:
-                case 121 /* ProtectedKeyword */:
-                case 122 /* PublicKeyword */:
-                case 125 /* AbstractKeyword */:
-                case 123 /* StaticKeyword */:
-                case 142 /* ReadonlyKeyword */:
-                case 154 /* GlobalKeyword */:
+                case 130 /* AsyncKeyword */:
+                case 118 /* InterfaceKeyword */:
+                case 150 /* TypeKeyword */:
+                case 140 /* ModuleKeyword */:
+                case 141 /* NamespaceKeyword */:
+                case 134 /* DeclareKeyword */:
+                case 85 /* ConstKeyword */:
+                case 92 /* EnumKeyword */:
+                case 93 /* ExportKeyword */:
+                case 100 /* ImportKeyword */:
+                case 121 /* PrivateKeyword */:
+                case 122 /* ProtectedKeyword */:
+                case 123 /* PublicKeyword */:
+                case 126 /* AbstractKeyword */:
+                case 124 /* StaticKeyword */:
+                case 143 /* ReadonlyKeyword */:
+                case 155 /* GlobalKeyword */:
                     if (isStartOfDeclaration()) {
                         return parseDeclaration();
                     }
@@ -34386,7 +35229,7 @@
             return parseExpressionOrLabeledStatement();
         }
         function isDeclareModifier(modifier) {
-            return modifier.kind === 133 /* DeclareKeyword */;
+            return modifier.kind === 134 /* DeclareKeyword */;
         }
         function parseDeclaration() {
             // TODO: Can we hold onto the parsed decorators/modifiers and advance the scanner
@@ -34427,33 +35270,33 @@
         }
         function parseDeclarationWorker(pos, hasJSDoc, decorators, modifiers) {
             switch (token()) {
-                case 112 /* VarKeyword */:
-                case 118 /* LetKeyword */:
-                case 84 /* ConstKeyword */:
+                case 113 /* VarKeyword */:
+                case 119 /* LetKeyword */:
+                case 85 /* ConstKeyword */:
                     return parseVariableStatement(pos, hasJSDoc, decorators, modifiers);
-                case 97 /* FunctionKeyword */:
+                case 98 /* FunctionKeyword */:
                     return parseFunctionDeclaration(pos, hasJSDoc, decorators, modifiers);
-                case 83 /* ClassKeyword */:
+                case 84 /* ClassKeyword */:
                     return parseClassDeclaration(pos, hasJSDoc, decorators, modifiers);
-                case 117 /* InterfaceKeyword */:
+                case 118 /* InterfaceKeyword */:
                     return parseInterfaceDeclaration(pos, hasJSDoc, decorators, modifiers);
-                case 149 /* TypeKeyword */:
+                case 150 /* TypeKeyword */:
                     return parseTypeAliasDeclaration(pos, hasJSDoc, decorators, modifiers);
-                case 91 /* EnumKeyword */:
+                case 92 /* EnumKeyword */:
                     return parseEnumDeclaration(pos, hasJSDoc, decorators, modifiers);
-                case 154 /* GlobalKeyword */:
-                case 139 /* ModuleKeyword */:
-                case 140 /* NamespaceKeyword */:
+                case 155 /* GlobalKeyword */:
+                case 140 /* ModuleKeyword */:
+                case 141 /* NamespaceKeyword */:
                     return parseModuleDeclaration(pos, hasJSDoc, decorators, modifiers);
-                case 99 /* ImportKeyword */:
+                case 100 /* ImportKeyword */:
                     return parseImportDeclarationOrImportEqualsDeclaration(pos, hasJSDoc, decorators, modifiers);
-                case 92 /* ExportKeyword */:
+                case 93 /* ExportKeyword */:
                     nextToken();
                     switch (token()) {
-                        case 87 /* DefaultKeyword */:
-                        case 62 /* EqualsToken */:
+                        case 88 /* DefaultKeyword */:
+                        case 63 /* EqualsToken */:
                             return parseExportAssignment(pos, hasJSDoc, decorators, modifiers);
-                        case 126 /* AsKeyword */:
+                        case 127 /* AsKeyword */:
                             return parseNamespaceExportDeclaration(pos, hasJSDoc, decorators, modifiers);
                         default:
                             return parseExportDeclaration(pos, hasJSDoc, decorators, modifiers);
@@ -34462,7 +35305,7 @@
                     if (decorators || modifiers) {
                         // We reached this point because we encountered decorators and/or modifiers and assumed a declaration
                         // would follow. For recovery and error reporting purposes, return an incomplete declaration.
-                        var missing = createMissingNode(272 /* MissingDeclaration */, /*reportAtCurrentPosition*/ true, ts.Diagnostics.Declaration_expected);
+                        var missing = createMissingNode(274 /* MissingDeclaration */, /*reportAtCurrentPosition*/ true, ts.Diagnostics.Declaration_expected);
                         ts.setTextRangePos(missing, pos);
                         missing.decorators = decorators;
                         missing.modifiers = modifiers;
@@ -34527,7 +35370,7 @@
         function isBindingIdentifierOrPrivateIdentifierOrPattern() {
             return token() === 18 /* OpenBraceToken */
                 || token() === 22 /* OpenBracketToken */
-                || token() === 79 /* PrivateIdentifier */
+                || token() === 80 /* PrivateIdentifier */
                 || isBindingIdentifier();
         }
         function parseIdentifierOrPattern(privateIdentifierDiagnosticMessage) {
@@ -34547,7 +35390,7 @@
             var hasJSDoc = hasPrecedingJSDocComment();
             var name = parseIdentifierOrPattern(ts.Diagnostics.Private_identifiers_are_not_allowed_in_variable_declarations);
             var exclamationToken;
-            if (allowExclamation && name.kind === 78 /* Identifier */ &&
+            if (allowExclamation && name.kind === 79 /* Identifier */ &&
                 token() === 53 /* ExclamationToken */ && !scanner.hasPrecedingLineBreak()) {
                 exclamationToken = parseTokenNode();
             }
@@ -34560,12 +35403,12 @@
             var pos = getNodePos();
             var flags = 0;
             switch (token()) {
-                case 112 /* VarKeyword */:
+                case 113 /* VarKeyword */:
                     break;
-                case 118 /* LetKeyword */:
+                case 119 /* LetKeyword */:
                     flags |= 1 /* Let */;
                     break;
-                case 84 /* ConstKeyword */:
+                case 85 /* ConstKeyword */:
                     flags |= 2 /* Const */;
                     break;
                 default:
@@ -34582,7 +35425,7 @@
             // this context.
             // The checker will then give an error that there is an empty declaration list.
             var declarations;
-            if (token() === 157 /* OfKeyword */ && lookAhead(canFollowContextualOfKeyword)) {
+            if (token() === 158 /* OfKeyword */ && lookAhead(canFollowContextualOfKeyword)) {
                 declarations = createMissingList();
             }
             else {
@@ -34607,7 +35450,7 @@
         function parseFunctionDeclaration(pos, hasJSDoc, decorators, modifiers) {
             var savedAwaitContext = inAwaitContext();
             var modifierFlags = ts.modifiersToFlags(modifiers);
-            parseExpected(97 /* FunctionKeyword */);
+            parseExpected(98 /* FunctionKeyword */);
             var asteriskToken = parseOptionalToken(41 /* AsteriskToken */);
             // We don't parse the name here in await context, instead we will report a grammar error in the checker.
             var name = modifierFlags & 512 /* Default */ ? parseOptionalBindingIdentifier() : parseBindingIdentifier();
@@ -34624,8 +35467,8 @@
             return withJSDoc(finishNode(node, pos), hasJSDoc);
         }
         function parseConstructorName() {
-            if (token() === 132 /* ConstructorKeyword */) {
-                return parseExpected(132 /* ConstructorKeyword */);
+            if (token() === 133 /* ConstructorKeyword */) {
+                return parseExpected(133 /* ConstructorKeyword */);
             }
             if (token() === 10 /* StringLiteral */ && lookAhead(nextToken) === 20 /* OpenParenToken */) {
                 return tryParse(function () {
@@ -34665,7 +35508,7 @@
             var exclamationToken = !questionToken && !scanner.hasPrecedingLineBreak() ? parseOptionalToken(53 /* ExclamationToken */) : undefined;
             var type = parseTypeAnnotation();
             var initializer = doOutsideOfContext(8192 /* YieldContext */ | 32768 /* AwaitContext */ | 4096 /* DisallowInContext */, parseInitializer);
-            parseSemicolon();
+            parseSemicolonAfterPropertyName(name, type, initializer);
             var node = factory.createPropertyDeclaration(decorators, modifiers, name, questionToken || exclamationToken, type, initializer);
             return withJSDoc(finishNode(node, pos), hasJSDoc);
         }
@@ -34686,12 +35529,12 @@
             var parameters = parseParameters(0 /* None */);
             var type = parseReturnType(58 /* ColonToken */, /*isType*/ false);
             var body = parseFunctionBlockOrSemicolon(0 /* None */);
-            var node = kind === 168 /* GetAccessor */
+            var node = kind === 170 /* GetAccessor */
                 ? factory.createGetAccessorDeclaration(decorators, modifiers, name, parameters, type, body)
                 : factory.createSetAccessorDeclaration(decorators, modifiers, name, parameters, body);
             // Keep track of `typeParameters` (for both) and `type` (for setters) if they were parsed those indicate grammar errors
             node.typeParameters = typeParameters;
-            if (type && node.kind === 169 /* SetAccessor */)
+            if (type && node.kind === 171 /* SetAccessor */)
                 node.type = type;
             return withJSDoc(finishNode(node, pos), hasJSDoc);
         }
@@ -34730,7 +35573,7 @@
             // If we were able to get any potential identifier...
             if (idToken !== undefined) {
                 // If we have a non-keyword identifier, or if we have an accessor, then it's safe to parse.
-                if (!ts.isKeyword(idToken) || idToken === 146 /* SetKeyword */ || idToken === 134 /* GetKeyword */) {
+                if (!ts.isKeyword(idToken) || idToken === 147 /* SetKeyword */ || idToken === 135 /* GetKeyword */) {
                     return true;
                 }
                 // If it *is* a keyword, but not an accessor, check a little farther along
@@ -34740,7 +35583,7 @@
                     case 29 /* LessThanToken */: // Generic Method declaration
                     case 53 /* ExclamationToken */: // Non-null assertion on property name
                     case 58 /* ColonToken */: // Type Annotation for declaration
-                    case 62 /* EqualsToken */: // Initializer for declaration
+                    case 63 /* EqualsToken */: // Initializer for declaration
                     case 57 /* QuestionToken */: // Not valid, but permitted so that it gets caught later on.
                         return true;
                     default:
@@ -34754,8 +35597,23 @@
             }
             return false;
         }
+        function parseClassStaticBlockDeclaration(pos, hasJSDoc, decorators, modifiers) {
+            parseExpectedToken(124 /* StaticKeyword */);
+            var body = parseClassStaticBlockBody();
+            return withJSDoc(finishNode(factory.createClassStaticBlockDeclaration(decorators, modifiers, body), pos), hasJSDoc);
+        }
+        function parseClassStaticBlockBody() {
+            var savedYieldContext = inYieldContext();
+            var savedAwaitContext = inAwaitContext();
+            setYieldContext(false);
+            setAwaitContext(true);
+            var body = parseBlock(/*ignoreMissingOpenBrace*/ false);
+            setYieldContext(savedYieldContext);
+            setAwaitContext(savedAwaitContext);
+            return body;
+        }
         function parseDecoratorExpression() {
-            if (inAwaitContext() && token() === 130 /* AwaitKeyword */) {
+            if (inAwaitContext() && token() === 131 /* AwaitKeyword */) {
                 // `@await` is is disallowed in an [Await] context, but can cause parsing to go off the rails
                 // This simply parses the missing identifier and moves on.
                 var pos = getNodePos();
@@ -34782,16 +35640,19 @@
             }
             return list && createNodeArray(list, pos);
         }
-        function tryParseModifier(permitInvalidConstAsModifier) {
+        function tryParseModifier(permitInvalidConstAsModifier, stopOnStartOfClassStaticBlock) {
             var pos = getNodePos();
             var kind = token();
-            if (token() === 84 /* ConstKeyword */ && permitInvalidConstAsModifier) {
+            if (token() === 85 /* ConstKeyword */ && permitInvalidConstAsModifier) {
                 // We need to ensure that any subsequent modifiers appear on the same line
                 // so that when 'const' is a standalone declaration, we don't issue an error.
                 if (!tryParse(nextTokenIsOnSameLineAndCanFollowModifier)) {
                     return undefined;
                 }
             }
+            else if (stopOnStartOfClassStaticBlock && token() === 124 /* StaticKeyword */ && lookAhead(nextTokenIsOpenBrace)) {
+                return undefined;
+            }
             else {
                 if (!parseAnyContextualModifier()) {
                     return undefined;
@@ -34806,20 +35667,20 @@
          *
          * In such situations, 'permitInvalidConstAsModifier' should be set to true.
          */
-        function parseModifiers(permitInvalidConstAsModifier) {
+        function parseModifiers(permitInvalidConstAsModifier, stopOnStartOfClassStaticBlock) {
             var pos = getNodePos();
             var list, modifier;
-            while (modifier = tryParseModifier(permitInvalidConstAsModifier)) {
+            while (modifier = tryParseModifier(permitInvalidConstAsModifier, stopOnStartOfClassStaticBlock)) {
                 list = ts.append(list, modifier);
             }
             return list && createNodeArray(list, pos);
         }
         function parseModifiersForArrowFunction() {
             var modifiers;
-            if (token() === 129 /* AsyncKeyword */) {
+            if (token() === 130 /* AsyncKeyword */) {
                 var pos = getNodePos();
                 nextToken();
-                var modifier = finishNode(factory.createToken(129 /* AsyncKeyword */), pos);
+                var modifier = finishNode(factory.createToken(130 /* AsyncKeyword */), pos);
                 modifiers = createNodeArray([modifier], pos);
             }
             return modifiers;
@@ -34832,14 +35693,17 @@
             }
             var hasJSDoc = hasPrecedingJSDocComment();
             var decorators = parseDecorators();
-            var modifiers = parseModifiers(/*permitInvalidConstAsModifier*/ true);
-            if (parseContextualModifier(134 /* GetKeyword */)) {
-                return parseAccessorDeclaration(pos, hasJSDoc, decorators, modifiers, 168 /* GetAccessor */);
+            var modifiers = parseModifiers(/*permitInvalidConstAsModifier*/ true, /*stopOnStartOfClassStaticBlock*/ true);
+            if (token() === 124 /* StaticKeyword */ && lookAhead(nextTokenIsOpenBrace)) {
+                return parseClassStaticBlockDeclaration(pos, hasJSDoc, decorators, modifiers);
             }
-            if (parseContextualModifier(146 /* SetKeyword */)) {
-                return parseAccessorDeclaration(pos, hasJSDoc, decorators, modifiers, 169 /* SetAccessor */);
+            if (parseContextualModifier(135 /* GetKeyword */)) {
+                return parseAccessorDeclaration(pos, hasJSDoc, decorators, modifiers, 170 /* GetAccessor */);
             }
-            if (token() === 132 /* ConstructorKeyword */ || token() === 10 /* StringLiteral */) {
+            if (parseContextualModifier(147 /* SetKeyword */)) {
+                return parseAccessorDeclaration(pos, hasJSDoc, decorators, modifiers, 171 /* SetAccessor */);
+            }
+            if (token() === 133 /* ConstructorKeyword */ || token() === 10 /* StringLiteral */) {
                 var constructorDeclaration = tryParseConstructorDeclaration(pos, hasJSDoc, decorators, modifiers);
                 if (constructorDeclaration) {
                     return constructorDeclaration;
@@ -34869,21 +35733,21 @@
             }
             if (decorators || modifiers) {
                 // treat this as a property declaration with a missing name.
-                var name = createMissingNode(78 /* Identifier */, /*reportAtCurrentPosition*/ true, ts.Diagnostics.Declaration_expected);
+                var name = createMissingNode(79 /* Identifier */, /*reportAtCurrentPosition*/ true, ts.Diagnostics.Declaration_expected);
                 return parsePropertyDeclaration(pos, hasJSDoc, decorators, modifiers, name, /*questionToken*/ undefined);
             }
             // 'isClassMemberStart' should have hinted not to attempt parsing.
             return ts.Debug.fail("Should not have attempted to parse class member declaration.");
         }
         function parseClassExpression() {
-            return parseClassDeclarationOrExpression(getNodePos(), hasPrecedingJSDocComment(), /*decorators*/ undefined, /*modifiers*/ undefined, 222 /* ClassExpression */);
+            return parseClassDeclarationOrExpression(getNodePos(), hasPrecedingJSDocComment(), /*decorators*/ undefined, /*modifiers*/ undefined, 224 /* ClassExpression */);
         }
         function parseClassDeclaration(pos, hasJSDoc, decorators, modifiers) {
-            return parseClassDeclarationOrExpression(pos, hasJSDoc, decorators, modifiers, 253 /* ClassDeclaration */);
+            return parseClassDeclarationOrExpression(pos, hasJSDoc, decorators, modifiers, 255 /* ClassDeclaration */);
         }
         function parseClassDeclarationOrExpression(pos, hasJSDoc, decorators, modifiers, kind) {
             var savedAwaitContext = inAwaitContext();
-            parseExpected(83 /* ClassKeyword */);
+            parseExpected(84 /* ClassKeyword */);
             // We don't parse the name here in await context, instead we will report a grammar error in the checker.
             var name = parseNameOfClassDeclarationOrExpression();
             var typeParameters = parseTypeParameters();
@@ -34901,7 +35765,7 @@
                 members = createMissingList();
             }
             setAwaitContext(savedAwaitContext);
-            var node = kind === 253 /* ClassDeclaration */
+            var node = kind === 255 /* ClassDeclaration */
                 ? factory.createClassDeclaration(decorators, modifiers, name, typeParameters, heritageClauses, members)
                 : factory.createClassExpression(decorators, modifiers, name, typeParameters, heritageClauses, members);
             return withJSDoc(finishNode(node, pos), hasJSDoc);
@@ -34917,7 +35781,7 @@
                 : undefined;
         }
         function isImplementsClause() {
-            return token() === 116 /* ImplementsKeyword */ && lookAhead(nextTokenIsIdentifierOrKeyword);
+            return token() === 117 /* ImplementsKeyword */ && lookAhead(nextTokenIsIdentifierOrKeyword);
         }
         function parseHeritageClauses() {
             // ClassTail[Yield,Await] : (Modified) See 14.5
@@ -34930,7 +35794,7 @@
         function parseHeritageClause() {
             var pos = getNodePos();
             var tok = token();
-            ts.Debug.assert(tok === 93 /* ExtendsKeyword */ || tok === 116 /* ImplementsKeyword */); // isListElement() should ensure this.
+            ts.Debug.assert(tok === 94 /* ExtendsKeyword */ || tok === 117 /* ImplementsKeyword */); // isListElement() should ensure this.
             nextToken();
             var types = parseDelimitedList(7 /* HeritageClauseElement */, parseExpressionWithTypeArguments);
             return finishNode(factory.createHeritageClause(tok, types), pos);
@@ -34946,13 +35810,13 @@
                 parseBracketedList(20 /* TypeArguments */, parseType, 29 /* LessThanToken */, 31 /* GreaterThanToken */) : undefined;
         }
         function isHeritageClause() {
-            return token() === 93 /* ExtendsKeyword */ || token() === 116 /* ImplementsKeyword */;
+            return token() === 94 /* ExtendsKeyword */ || token() === 117 /* ImplementsKeyword */;
         }
         function parseClassMembers() {
             return parseList(5 /* ClassMembers */, parseClassElement);
         }
         function parseInterfaceDeclaration(pos, hasJSDoc, decorators, modifiers) {
-            parseExpected(117 /* InterfaceKeyword */);
+            parseExpected(118 /* InterfaceKeyword */);
             var name = parseIdentifier();
             var typeParameters = parseTypeParameters();
             var heritageClauses = parseHeritageClauses();
@@ -34961,11 +35825,11 @@
             return withJSDoc(finishNode(node, pos), hasJSDoc);
         }
         function parseTypeAliasDeclaration(pos, hasJSDoc, decorators, modifiers) {
-            parseExpected(149 /* TypeKeyword */);
+            parseExpected(150 /* TypeKeyword */);
             var name = parseIdentifier();
             var typeParameters = parseTypeParameters();
-            parseExpected(62 /* EqualsToken */);
-            var type = token() === 136 /* IntrinsicKeyword */ && tryParse(parseKeywordAndNoDot) || parseType();
+            parseExpected(63 /* EqualsToken */);
+            var type = token() === 137 /* IntrinsicKeyword */ && tryParse(parseKeywordAndNoDot) || parseType();
             parseSemicolon();
             var node = factory.createTypeAliasDeclaration(decorators, modifiers, name, typeParameters, type);
             return withJSDoc(finishNode(node, pos), hasJSDoc);
@@ -34982,7 +35846,7 @@
             return withJSDoc(finishNode(factory.createEnumMember(name, initializer), pos), hasJSDoc);
         }
         function parseEnumDeclaration(pos, hasJSDoc, decorators, modifiers) {
-            parseExpected(91 /* EnumKeyword */);
+            parseExpected(92 /* EnumKeyword */);
             var name = parseIdentifier();
             var members;
             if (parseExpected(18 /* OpenBraceToken */)) {
@@ -35021,7 +35885,7 @@
         function parseAmbientExternalModuleDeclaration(pos, hasJSDoc, decorators, modifiers) {
             var flags = 0;
             var name;
-            if (token() === 154 /* GlobalKeyword */) {
+            if (token() === 155 /* GlobalKeyword */) {
                 // parse 'global' as name of global scope augmentation
                 name = parseIdentifier();
                 flags |= 1024 /* GlobalAugmentation */;
@@ -35042,15 +35906,15 @@
         }
         function parseModuleDeclaration(pos, hasJSDoc, decorators, modifiers) {
             var flags = 0;
-            if (token() === 154 /* GlobalKeyword */) {
+            if (token() === 155 /* GlobalKeyword */) {
                 // global augmentation
                 return parseAmbientExternalModuleDeclaration(pos, hasJSDoc, decorators, modifiers);
             }
-            else if (parseOptional(140 /* NamespaceKeyword */)) {
+            else if (parseOptional(141 /* NamespaceKeyword */)) {
                 flags |= 16 /* Namespace */;
             }
             else {
-                parseExpected(139 /* ModuleKeyword */);
+                parseExpected(140 /* ModuleKeyword */);
                 if (token() === 10 /* StringLiteral */) {
                     return parseAmbientExternalModuleDeclaration(pos, hasJSDoc, decorators, modifiers);
                 }
@@ -35058,18 +35922,21 @@
             return parseModuleOrNamespaceDeclaration(pos, hasJSDoc, decorators, modifiers, flags);
         }
         function isExternalModuleReference() {
-            return token() === 143 /* RequireKeyword */ &&
+            return token() === 144 /* RequireKeyword */ &&
                 lookAhead(nextTokenIsOpenParen);
         }
         function nextTokenIsOpenParen() {
             return nextToken() === 20 /* OpenParenToken */;
         }
+        function nextTokenIsOpenBrace() {
+            return nextToken() === 18 /* OpenBraceToken */;
+        }
         function nextTokenIsSlash() {
             return nextToken() === 43 /* SlashToken */;
         }
         function parseNamespaceExportDeclaration(pos, hasJSDoc, decorators, modifiers) {
-            parseExpected(126 /* AsKeyword */);
-            parseExpected(140 /* NamespaceKeyword */);
+            parseExpected(127 /* AsKeyword */);
+            parseExpected(141 /* NamespaceKeyword */);
             var name = parseIdentifier();
             parseSemicolon();
             var node = factory.createNamespaceExportDeclaration(name);
@@ -35079,7 +35946,7 @@
             return withJSDoc(finishNode(node, pos), hasJSDoc);
         }
         function parseImportDeclarationOrImportEqualsDeclaration(pos, hasJSDoc, decorators, modifiers) {
-            parseExpected(99 /* ImportKeyword */);
+            parseExpected(100 /* ImportKeyword */);
             var afterImportPos = scanner.getStartPos();
             // We don't parse the identifier here in await context, instead we will report a grammar error in the checker.
             var identifier;
@@ -35087,7 +35954,7 @@
                 identifier = parseIdentifier();
             }
             var isTypeOnly = false;
-            if (token() !== 153 /* FromKeyword */ &&
+            if (token() !== 154 /* FromKeyword */ &&
                 (identifier === null || identifier === void 0 ? void 0 : identifier.escapedText) === "type" &&
                 (isIdentifier() || tokenAfterImportDefinitelyProducesImportDeclaration())) {
                 isTypeOnly = true;
@@ -35105,7 +35972,7 @@
                 token() === 18 /* OpenBraceToken */ // import {
             ) {
                 importClause = parseImportClause(identifier, afterImportPos, isTypeOnly);
-                parseExpected(153 /* FromKeyword */);
+                parseExpected(154 /* FromKeyword */);
             }
             var moduleSpecifier = parseModuleSpecifier();
             parseSemicolon();
@@ -35118,10 +35985,10 @@
         function tokenAfterImportedIdentifierDefinitelyProducesImportDeclaration() {
             // In `import id ___`, the current token decides whether to produce
             // an ImportDeclaration or ImportEqualsDeclaration.
-            return token() === 27 /* CommaToken */ || token() === 153 /* FromKeyword */;
+            return token() === 27 /* CommaToken */ || token() === 154 /* FromKeyword */;
         }
         function parseImportEqualsDeclaration(pos, hasJSDoc, decorators, modifiers, identifier, isTypeOnly) {
-            parseExpected(62 /* EqualsToken */);
+            parseExpected(63 /* EqualsToken */);
             var moduleReference = parseModuleReference();
             parseSemicolon();
             var node = factory.createImportEqualsDeclaration(decorators, modifiers, isTypeOnly, identifier, moduleReference);
@@ -35140,7 +36007,7 @@
             var namedBindings;
             if (!identifier ||
                 parseOptional(27 /* CommaToken */)) {
-                namedBindings = token() === 41 /* AsteriskToken */ ? parseNamespaceImport() : parseNamedImportsOrExports(265 /* NamedImports */);
+                namedBindings = token() === 41 /* AsteriskToken */ ? parseNamespaceImport() : parseNamedImportsOrExports(267 /* NamedImports */);
             }
             return finishNode(factory.createImportClause(isTypeOnly, identifier, namedBindings), pos);
         }
@@ -35151,7 +36018,7 @@
         }
         function parseExternalModuleReference() {
             var pos = getNodePos();
-            parseExpected(143 /* RequireKeyword */);
+            parseExpected(144 /* RequireKeyword */);
             parseExpected(20 /* OpenParenToken */);
             var expression = parseModuleSpecifier();
             parseExpected(21 /* CloseParenToken */);
@@ -35175,7 +36042,7 @@
             //  * as ImportedBinding
             var pos = getNodePos();
             parseExpected(41 /* AsteriskToken */);
-            parseExpected(126 /* AsKeyword */);
+            parseExpected(127 /* AsKeyword */);
             var name = parseIdentifier();
             return finishNode(factory.createNamespaceImport(name), pos);
         }
@@ -35188,16 +36055,16 @@
             // ImportsList:
             //  ImportSpecifier
             //  ImportsList, ImportSpecifier
-            var node = kind === 265 /* NamedImports */
+            var node = kind === 267 /* NamedImports */
                 ? factory.createNamedImports(parseBracketedList(23 /* ImportOrExportSpecifiers */, parseImportSpecifier, 18 /* OpenBraceToken */, 19 /* CloseBraceToken */))
                 : factory.createNamedExports(parseBracketedList(23 /* ImportOrExportSpecifiers */, parseExportSpecifier, 18 /* OpenBraceToken */, 19 /* CloseBraceToken */));
             return finishNode(node, pos);
         }
         function parseExportSpecifier() {
-            return parseImportOrExportSpecifier(271 /* ExportSpecifier */);
+            return parseImportOrExportSpecifier(273 /* ExportSpecifier */);
         }
         function parseImportSpecifier() {
-            return parseImportOrExportSpecifier(266 /* ImportSpecifier */);
+            return parseImportOrExportSpecifier(268 /* ImportSpecifier */);
         }
         function parseImportOrExportSpecifier(kind) {
             var pos = getNodePos();
@@ -35213,9 +36080,9 @@
             var identifierName = parseIdentifierName();
             var propertyName;
             var name;
-            if (token() === 126 /* AsKeyword */) {
+            if (token() === 127 /* AsKeyword */) {
                 propertyName = identifierName;
-                parseExpected(126 /* AsKeyword */);
+                parseExpected(127 /* AsKeyword */);
                 checkIdentifierIsKeyword = ts.isKeyword(token()) && !isIdentifier();
                 checkIdentifierStart = scanner.getTokenPos();
                 checkIdentifierEnd = scanner.getTextPos();
@@ -35224,10 +36091,10 @@
             else {
                 name = identifierName;
             }
-            if (kind === 266 /* ImportSpecifier */ && checkIdentifierIsKeyword) {
+            if (kind === 268 /* ImportSpecifier */ && checkIdentifierIsKeyword) {
                 parseErrorAt(checkIdentifierStart, checkIdentifierEnd, ts.Diagnostics.Identifier_expected);
             }
-            var node = kind === 266 /* ImportSpecifier */
+            var node = kind === 268 /* ImportSpecifier */
                 ? factory.createImportSpecifier(propertyName, name)
                 : factory.createExportSpecifier(propertyName, name);
             return finishNode(node, pos);
@@ -35240,22 +36107,22 @@
             setAwaitContext(/*value*/ true);
             var exportClause;
             var moduleSpecifier;
-            var isTypeOnly = parseOptional(149 /* TypeKeyword */);
+            var isTypeOnly = parseOptional(150 /* TypeKeyword */);
             var namespaceExportPos = getNodePos();
             if (parseOptional(41 /* AsteriskToken */)) {
-                if (parseOptional(126 /* AsKeyword */)) {
+                if (parseOptional(127 /* AsKeyword */)) {
                     exportClause = parseNamespaceExport(namespaceExportPos);
                 }
-                parseExpected(153 /* FromKeyword */);
+                parseExpected(154 /* FromKeyword */);
                 moduleSpecifier = parseModuleSpecifier();
             }
             else {
-                exportClause = parseNamedImportsOrExports(269 /* NamedExports */);
+                exportClause = parseNamedImportsOrExports(271 /* NamedExports */);
                 // It is not uncommon to accidentally omit the 'from' keyword. Additionally, in editing scenarios,
                 // the 'from' keyword can be parsed as a named export when the export clause is unterminated (i.e. `export { from "moduleName";`)
                 // If we don't have a 'from' keyword, see if we have a string literal such that ASI won't take effect.
-                if (token() === 153 /* FromKeyword */ || (token() === 10 /* StringLiteral */ && !scanner.hasPrecedingLineBreak())) {
-                    parseExpected(153 /* FromKeyword */);
+                if (token() === 154 /* FromKeyword */ || (token() === 10 /* StringLiteral */ && !scanner.hasPrecedingLineBreak())) {
+                    parseExpected(154 /* FromKeyword */);
                     moduleSpecifier = parseModuleSpecifier();
                 }
             }
@@ -35268,11 +36135,11 @@
             var savedAwaitContext = inAwaitContext();
             setAwaitContext(/*value*/ true);
             var isExportEquals;
-            if (parseOptional(62 /* EqualsToken */)) {
+            if (parseOptional(63 /* EqualsToken */)) {
                 isExportEquals = true;
             }
             else {
-                parseExpected(87 /* DefaultKeyword */);
+                parseExpected(88 /* DefaultKeyword */);
             }
             var expression = parseAssignmentExpressionOrHigher();
             parseSemicolon();
@@ -35288,7 +36155,7 @@
                     getImportMetaIfNecessary(sourceFile);
         }
         function isAnExternalModuleIndicatorNode(node) {
-            return hasModifierOfKind(node, 92 /* ExportKeyword */)
+            return hasModifierOfKind(node, 93 /* ExportKeyword */)
                 || ts.isImportEqualsDeclaration(node) && ts.isExternalModuleReference(node.moduleReference)
                 || ts.isImportDeclaration(node)
                 || ts.isExportAssignment(node)
@@ -35307,7 +36174,7 @@
             return ts.some(node.modifiers, function (m) { return m.kind === kind; });
         }
         function isImportMeta(node) {
-            return ts.isMetaProperty(node) && node.keywordToken === 99 /* ImportKeyword */ && node.name.escapedText === "meta";
+            return ts.isMetaProperty(node) && node.keywordToken === 100 /* ImportKeyword */ && node.name.escapedText === "meta";
         }
         var ParsingContext;
         (function (ParsingContext) {
@@ -35375,7 +36242,13 @@
             function parseJSDocNameReference() {
                 var pos = getNodePos();
                 var hasBrace = parseOptional(18 /* OpenBraceToken */);
+                var p2 = getNodePos();
                 var entityName = parseEntityName(/* allowReservedWords*/ false);
+                while (token() === 80 /* PrivateIdentifier */) {
+                    reScanHashToken(); // rescan #id as # id
+                    nextTokenJSDoc(); // then skip the #
+                    entityName = finishNode(factory.createJSDocMemberName(entityName, parseIdentifier()), p2);
+                }
                 if (hasBrace) {
                     parseExpectedJSDoc(19 /* CloseBraceToken */);
                 }
@@ -35804,28 +36677,44 @@
                     return next === 5 /* WhitespaceTrivia */ || next === 4 /* NewLineTrivia */;
                 }
                 function parseJSDocLink(start) {
-                    if (!tryParse(parseJSDocLinkPrefix)) {
+                    var linkType = tryParse(parseJSDocLinkPrefix);
+                    if (!linkType) {
                         return undefined;
                     }
                     nextTokenJSDoc(); // start at token after link, then skip any whitespace
                     skipWhitespace();
                     // parseEntityName logs an error for non-identifier, so create a MissingNode ourselves to avoid the error
+                    var p2 = getNodePos();
                     var name = ts.tokenIsIdentifierOrKeyword(token())
                         ? parseEntityName(/*allowReservedWords*/ true)
                         : undefined;
+                    if (name) {
+                        while (token() === 80 /* PrivateIdentifier */) {
+                            reScanHashToken(); // rescan #id as # id
+                            nextTokenJSDoc(); // then skip the #
+                            name = finishNode(factory.createJSDocMemberName(name, parseIdentifier()), p2);
+                        }
+                    }
                     var text = [];
                     while (token() !== 19 /* CloseBraceToken */ && token() !== 4 /* NewLineTrivia */ && token() !== 1 /* EndOfFileToken */) {
                         text.push(scanner.getTokenText());
                         nextTokenJSDoc();
                     }
-                    return finishNode(factory.createJSDocLink(name, text.join("")), start, scanner.getTextPos());
+                    var create = linkType === "link" ? factory.createJSDocLink
+                        : linkType === "linkcode" ? factory.createJSDocLinkCode
+                            : factory.createJSDocLinkPlain;
+                    return finishNode(create(name, text.join("")), start, scanner.getTextPos());
                 }
                 function parseJSDocLinkPrefix() {
                     skipWhitespaceOrAsterisk();
-                    return token() === 18 /* OpenBraceToken */
+                    if (token() === 18 /* OpenBraceToken */
                         && nextTokenJSDoc() === 59 /* AtToken */
-                        && ts.tokenIsIdentifierOrKeyword(nextTokenJSDoc())
-                        && scanner.getTokenValue() === "link";
+                        && ts.tokenIsIdentifierOrKeyword(nextTokenJSDoc())) {
+                        var kind = scanner.getTokenValue();
+                        if (kind === "link" || kind === "linkcode" || kind === "linkplain") {
+                            return kind;
+                        }
+                    }
                 }
                 function parseUnknownTag(start, tagName, indent, indentText) {
                     return finishNode(factory.createJSDocUnknownTag(tagName, parseTrailingTagComments(start, getNodePos(), indent, indentText)), start);
@@ -35862,7 +36751,7 @@
                     if (isBracketed) {
                         skipWhitespace();
                         // May have an optional default, e.g. '[foo = 42]'
-                        if (parseOptionalToken(62 /* EqualsToken */)) {
+                        if (parseOptionalToken(63 /* EqualsToken */)) {
                             parseExpression();
                         }
                         parseExpected(23 /* CloseBracketToken */);
@@ -35871,9 +36760,9 @@
                 }
                 function isObjectOrObjectArrayTypeReference(node) {
                     switch (node.kind) {
-                        case 145 /* ObjectKeyword */:
+                        case 146 /* ObjectKeyword */:
                             return true;
-                        case 179 /* ArrayType */:
+                        case 181 /* ArrayType */:
                             return isObjectOrObjectArrayTypeReference(node.elementType);
                         default:
                             return ts.isTypeReferenceNode(node) && ts.isIdentifier(node.typeName) && node.typeName.escapedText === "Object" && !node.typeArguments;
@@ -35905,12 +36794,12 @@
                         var child = void 0;
                         var children = void 0;
                         while (child = tryParse(function () { return parseChildParameterOrPropertyTag(target, indent, name); })) {
-                            if (child.kind === 330 /* JSDocParameterTag */ || child.kind === 337 /* JSDocPropertyTag */) {
+                            if (child.kind === 335 /* JSDocParameterTag */ || child.kind === 342 /* JSDocPropertyTag */) {
                                 children = ts.append(children, child);
                             }
                         }
                         if (children) {
-                            var literal = finishNode(factory.createJSDocTypeLiteral(children, typeExpression.type.kind === 179 /* ArrayType */), pos);
+                            var literal = finishNode(factory.createJSDocTypeLiteral(children, typeExpression.type.kind === 181 /* ArrayType */), pos);
                             return finishNode(factory.createJSDocTypeExpression(literal), pos);
                         }
                     }
@@ -36027,7 +36916,7 @@
                         var hasChildren = false;
                         while (child = tryParse(function () { return parseChildPropertyTag(indent); })) {
                             hasChildren = true;
-                            if (child.kind === 333 /* JSDocTypeTag */) {
+                            if (child.kind === 338 /* JSDocTypeTag */) {
                                 if (childTypeTag) {
                                     parseErrorAtCurrentToken(ts.Diagnostics.A_JSDoc_typedef_comment_may_not_contain_multiple_type_tags);
                                     var lastError = ts.lastOrUndefined(parseDiagnostics);
@@ -36045,7 +36934,7 @@
                             }
                         }
                         if (hasChildren) {
-                            var isArrayType = typeExpression && typeExpression.type.kind === 179 /* ArrayType */;
+                            var isArrayType = typeExpression && typeExpression.type.kind === 181 /* ArrayType */;
                             var jsdocTypeLiteral = factory.createJSDocTypeLiteral(jsDocPropertyTags, isArrayType);
                             typeExpression = childTypeTag && childTypeTag.typeExpression && !isObjectOrObjectArrayTypeReference(childTypeTag.typeExpression.type) ?
                                 childTypeTag.typeExpression :
@@ -36098,7 +36987,7 @@
                     var returnTag = tryParse(function () {
                         if (parseOptionalJsdoc(59 /* AtToken */)) {
                             var tag = parseTag(indent);
-                            if (tag && tag.kind === 331 /* JSDocReturnTag */) {
+                            if (tag && tag.kind === 336 /* JSDocReturnTag */) {
                                 return tag;
                             }
                         }
@@ -36132,7 +37021,7 @@
                             case 59 /* AtToken */:
                                 if (canParseTag) {
                                     var child = tryParseChildTag(target, indent);
-                                    if (child && (child.kind === 330 /* JSDocParameterTag */ || child.kind === 337 /* JSDocPropertyTag */) &&
+                                    if (child && (child.kind === 335 /* JSDocParameterTag */ || child.kind === 342 /* JSDocPropertyTag */) &&
                                         target !== 4 /* CallbackParameter */ &&
                                         name && (ts.isIdentifier(child.name) || !escapedTextsEqual(name, child.name.left))) {
                                         return false;
@@ -36151,7 +37040,7 @@
                                 }
                                 seenAsterisk = true;
                                 break;
-                            case 78 /* Identifier */:
+                            case 79 /* Identifier */:
                                 canParseTag = false;
                                 break;
                             case 1 /* EndOfFileToken */:
@@ -36249,7 +37138,7 @@
                 }
                 function parseJSDocIdentifierName(message) {
                     if (!ts.tokenIsIdentifierOrKeyword(token())) {
-                        return createMissingNode(78 /* Identifier */, /*reportAtCurrentPosition*/ !message, message || ts.Diagnostics.Identifier_expected);
+                        return createMissingNode(79 /* Identifier */, /*reportAtCurrentPosition*/ !message, message || ts.Diagnostics.Identifier_expected);
                     }
                     identifierCount++;
                     var pos = scanner.getTokenPos();
@@ -36412,8 +37301,8 @@
             function visitArray(array) {
                 array._children = undefined;
                 ts.setTextRangePosEnd(array, array.pos + delta, array.end + delta);
-                for (var _i = 0, array_8 = array; _i < array_8.length; _i++) {
-                    var node = array_8[_i];
+                for (var _i = 0, array_9 = array; _i < array_9.length; _i++) {
+                    var node = array_9[_i];
                     visitNode(node);
                 }
             }
@@ -36422,7 +37311,7 @@
             switch (node.kind) {
                 case 10 /* StringLiteral */:
                 case 8 /* NumericLiteral */:
-                case 78 /* Identifier */:
+                case 79 /* Identifier */:
                     return true;
             }
             return false;
@@ -36561,8 +37450,8 @@
                     array._children = undefined;
                     // Adjust the pos or end (or both) of the intersecting array accordingly.
                     adjustIntersectingElement(array, changeStart, changeRangeOldEnd, changeRangeNewEnd, delta);
-                    for (var _i = 0, array_9 = array; _i < array_9.length; _i++) {
-                        var node = array_9[_i];
+                    for (var _i = 0, array_10 = array; _i < array_10.length; _i++) {
+                        var node = array_10[_i];
                         visitNode(node);
                     }
                     return;
@@ -36896,7 +37785,7 @@
         if (namedArgRegExCache.has(name)) {
             return namedArgRegExCache.get(name);
         }
-        var result = new RegExp("(\\s" + name + "\\s*=\\s*)('|\")(.+?)\\2", "im");
+        var result = new RegExp("(\\s" + name + "\\s*=\\s*)(?:(?:'([^']*)')|(?:\"([^\"]*)\"))", "im");
         namedArgRegExCache.set(name, result);
         return result;
     }
@@ -36920,16 +37809,17 @@
                         return; // Missing required argument, don't parse
                     }
                     else if (matchResult) {
+                        var value = matchResult[2] || matchResult[3];
                         if (arg.captureSpan) {
-                            var startPos = range.pos + matchResult.index + matchResult[1].length + matchResult[2].length;
+                            var startPos = range.pos + matchResult.index + matchResult[1].length + 1;
                             argument[arg.name] = {
-                                value: matchResult[3],
+                                value: value,
                                 pos: startPos,
-                                end: startPos + matchResult[3].length
+                                end: startPos + value.length
                             };
                         }
                         else {
-                            argument[arg.name] = matchResult[3];
+                            argument[arg.name] = value;
                         }
                     }
                 }
@@ -36945,7 +37835,7 @@
             return addPragmaForMatch(pragmas, range, 2 /* SingleLine */, singleLine);
         }
         if (range.kind === 3 /* MultiLineCommentTrivia */) {
-            var multiLinePragmaRegEx = /\s*@(\S+)\s*(.*)\s*$/gim; // Defined inline since it uses the "g" flag, which keeps a persistent index (for iterating)
+            var multiLinePragmaRegEx = /@(\S+)(\s+.*)?$/gim; // Defined inline since it uses the "g" flag, which keeps a persistent index (for iterating)
             var multiLineMatch = void 0;
             while (multiLineMatch = multiLinePragmaRegEx.exec(text)) {
                 addPragmaForMatch(pragmas, range, 4 /* MultiLine */, multiLineMatch);
@@ -36972,7 +37862,7 @@
             return {};
         if (!pragma.args)
             return {};
-        var args = text.split(/\s+/);
+        var args = ts.trimString(text).split(/\s+/);
         var argMap = {};
         for (var i = 0; i < pragma.args.length; i++) {
             var argument = pragma.args[i];
@@ -36991,10 +37881,10 @@
         if (lhs.kind !== rhs.kind) {
             return false;
         }
-        if (lhs.kind === 78 /* Identifier */) {
+        if (lhs.kind === 79 /* Identifier */) {
             return lhs.escapedText === rhs.escapedText;
         }
-        if (lhs.kind === 107 /* ThisKeyword */) {
+        if (lhs.kind === 108 /* ThisKeyword */) {
             return true;
         }
         // If we are at this statement then we must have PropertyAccessExpression and because tag name in Jsx element can only
@@ -37114,8 +38004,8 @@
                 usefsevents: ts.WatchFileKind.UseFsEvents,
                 usefseventsonparentdirectory: ts.WatchFileKind.UseFsEventsOnParentDirectory,
             })),
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Specify_strategy_for_watching_file_Colon_FixedPollingInterval_default_PriorityPollingInterval_DynamicPriorityPolling_FixedChunkSizePolling_UseFsEvents_UseFsEventsOnParentDirectory,
+            category: ts.Diagnostics.Watch_and_Build_Modes,
+            description: ts.Diagnostics.Specify_how_the_TypeScript_watch_mode_works,
         },
         {
             name: "watchDirectory",
@@ -37125,8 +38015,8 @@
                 dynamicprioritypolling: ts.WatchDirectoryKind.DynamicPriorityPolling,
                 fixedchunksizepolling: ts.WatchDirectoryKind.FixedChunkSizePolling,
             })),
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Specify_strategy_for_watching_directory_on_platforms_that_don_t_support_recursive_watching_natively_Colon_UseFsEvents_default_FixedPollingInterval_DynamicPriorityPolling_FixedChunkSizePolling,
+            category: ts.Diagnostics.Watch_and_Build_Modes,
+            description: ts.Diagnostics.Specify_how_directories_are_watched_on_systems_that_lack_recursive_file_watching_functionality,
         },
         {
             name: "fallbackPolling",
@@ -37136,13 +38026,13 @@
                 dynamicpriority: ts.PollingWatchKind.DynamicPriority,
                 fixedchunksize: ts.PollingWatchKind.FixedChunkSize,
             })),
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Specify_strategy_for_creating_a_polling_watch_when_it_fails_to_create_using_file_system_events_Colon_FixedInterval_default_PriorityInterval_DynamicPriority_FixedChunkSize,
+            category: ts.Diagnostics.Watch_and_Build_Modes,
+            description: ts.Diagnostics.Specify_what_approach_the_watcher_should_use_if_the_system_runs_out_of_native_file_watchers,
         },
         {
             name: "synchronousWatchDirectory",
             type: "boolean",
-            category: ts.Diagnostics.Advanced_Options,
+            category: ts.Diagnostics.Watch_and_Build_Modes,
             description: ts.Diagnostics.Synchronously_call_callbacks_and_update_the_state_of_directory_watchers_on_platforms_that_don_t_support_recursive_watching_natively,
         },
         {
@@ -37154,8 +38044,8 @@
                 isFilePath: true,
                 extraValidation: specToDiagnostic
             },
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Synchronously_call_callbacks_and_update_the_state_of_directory_watchers_on_platforms_that_don_t_support_recursive_watching_natively,
+            category: ts.Diagnostics.Watch_and_Build_Modes,
+            description: ts.Diagnostics.Remove_a_list_of_directories_from_the_watch_process,
         },
         {
             name: "excludeFiles",
@@ -37166,8 +38056,8 @@
                 isFilePath: true,
                 extraValidation: specToDiagnostic
             },
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Synchronously_call_callbacks_and_update_the_state_of_directory_watchers_on_platforms_that_don_t_support_recursive_watching_natively,
+            category: ts.Diagnostics.Watch_and_Build_Modes,
+            description: ts.Diagnostics.Remove_a_list_of_files_from_the_watch_mode_s_processing,
         },
     ];
     /* @internal */
@@ -37190,6 +38080,7 @@
             shortName: "w",
             type: "boolean",
             showInSimplifiedHelpView: true,
+            isCommandLineOnly: true,
             category: ts.Diagnostics.Command_line_Options,
             description: ts.Diagnostics.Watch_input_files,
         },
@@ -37197,58 +38088,67 @@
             name: "preserveWatchOutput",
             type: "boolean",
             showInSimplifiedHelpView: false,
-            category: ts.Diagnostics.Command_line_Options,
-            description: ts.Diagnostics.Whether_to_keep_outdated_console_output_in_watch_mode_instead_of_clearing_the_screen,
+            category: ts.Diagnostics.Output_Formatting,
+            description: ts.Diagnostics.Disable_wiping_the_console_in_watch_mode,
+            defaultValueDescription: "n/a"
         },
         {
             name: "listFiles",
             type: "boolean",
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Print_names_of_files_part_of_the_compilation
+            category: ts.Diagnostics.Compiler_Diagnostics,
+            description: ts.Diagnostics.Print_all_of_the_files_read_during_the_compilation,
+            defaultValueDescription: "false"
         },
         {
             name: "explainFiles",
             type: "boolean",
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Print_names_of_files_and_the_reason_they_are_part_of_the_compilation
-        }, {
+            category: ts.Diagnostics.Compiler_Diagnostics,
+            description: ts.Diagnostics.Print_files_read_during_the_compilation_including_why_it_was_included
+        },
+        {
             name: "listEmittedFiles",
             type: "boolean",
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Print_names_of_generated_files_part_of_the_compilation
+            category: ts.Diagnostics.Compiler_Diagnostics,
+            description: ts.Diagnostics.Print_the_names_of_emitted_files_after_a_compilation,
+            defaultValueDescription: "false"
         },
         {
             name: "pretty",
             type: "boolean",
             showInSimplifiedHelpView: true,
-            category: ts.Diagnostics.Command_line_Options,
-            description: ts.Diagnostics.Stylize_errors_and_messages_using_color_and_context_experimental
+            category: ts.Diagnostics.Output_Formatting,
+            description: ts.Diagnostics.Enable_color_and_formatting_in_TypeScript_s_output_to_make_compiler_errors_easier_to_read,
+            defaultValueDescription: "true"
         },
         {
             name: "traceResolution",
             type: "boolean",
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Enable_tracing_of_the_name_resolution_process
+            category: ts.Diagnostics.Compiler_Diagnostics,
+            description: ts.Diagnostics.Log_paths_used_during_the_moduleResolution_process,
+            defaultValueDescription: "false"
         },
         {
             name: "diagnostics",
             type: "boolean",
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Show_diagnostic_information
+            category: ts.Diagnostics.Compiler_Diagnostics,
+            description: ts.Diagnostics.Output_compiler_performance_information_after_building,
+            defaultValueDescription: "false"
         },
         {
             name: "extendedDiagnostics",
             type: "boolean",
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Show_verbose_diagnostic_information
+            category: ts.Diagnostics.Compiler_Diagnostics,
+            description: ts.Diagnostics.Output_more_detailed_compiler_performance_information_after_building,
+            defaultValueDescription: "false"
         },
         {
             name: "generateCpuProfile",
             type: "string",
             isFilePath: true,
             paramType: ts.Diagnostics.FILE_OR_DIRECTORY,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Generates_a_CPU_profile
+            category: ts.Diagnostics.Compiler_Diagnostics,
+            description: ts.Diagnostics.Emit_a_v8_CPU_profile_of_the_compiler_run_for_debugging,
+            defaultValueDescription: "profile.cpuprofile"
         },
         {
             name: "generateTrace",
@@ -37256,30 +38156,33 @@
             isFilePath: true,
             isCommandLineOnly: true,
             paramType: ts.Diagnostics.DIRECTORY,
-            category: ts.Diagnostics.Advanced_Options,
+            category: ts.Diagnostics.Compiler_Diagnostics,
             description: ts.Diagnostics.Generates_an_event_trace_and_a_list_of_types
         },
         {
             name: "incremental",
             shortName: "i",
             type: "boolean",
-            category: ts.Diagnostics.Basic_Options,
+            category: ts.Diagnostics.Projects,
             description: ts.Diagnostics.Enable_incremental_compilation,
-            transpileOptionValue: undefined
+            transpileOptionValue: undefined,
+            defaultValueDescription: ts.Diagnostics.false_unless_composite_is_set
         },
         {
             name: "assumeChangesOnlyAffectDirectDependencies",
             type: "boolean",
             affectsSemanticDiagnostics: true,
             affectsEmit: true,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Have_recompiles_in_incremental_and_watch_assume_that_changes_within_a_file_will_only_affect_files_directly_depending_on_it
+            category: ts.Diagnostics.Watch_and_Build_Modes,
+            description: ts.Diagnostics.Have_recompiles_in_projects_that_use_incremental_and_watch_mode_assume_that_changes_within_a_file_will_only_affect_files_directly_depending_on_it
         },
         {
             name: "locale",
             type: "string",
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.The_locale_used_when_displaying_messages_to_the_user_e_g_en_us
+            category: ts.Diagnostics.Command_line_Options,
+            isCommandLineOnly: true,
+            description: ts.Diagnostics.Set_the_language_of_the_messaging_from_TypeScript_This_does_not_affect_emit,
+            defaultValueDescription: ts.Diagnostics.Platform_specific
         },
     ];
     /* @internal */
@@ -37304,8 +38207,9 @@
         affectsEmit: true,
         paramType: ts.Diagnostics.VERSION,
         showInSimplifiedHelpView: true,
-        category: ts.Diagnostics.Basic_Options,
-        description: ts.Diagnostics.Specify_ECMAScript_target_version_Colon_ES3_default_ES5_ES2015_ES2016_ES2017_ES2018_ES2019_ES2020_ES2021_or_ESNEXT,
+        category: ts.Diagnostics.Language_and_Environment,
+        description: ts.Diagnostics.Set_the_JavaScript_language_version_for_emitted_JavaScript_and_include_compatible_library_declarations,
+        defaultValueDescription: "ES3"
     };
     var commandOptionsWithoutBuild = [
         // CommandLine only options
@@ -37352,6 +38256,7 @@
         {
             name: "showConfig",
             type: "boolean",
+            showInSimplifiedHelpView: true,
             category: ts.Diagnostics.Command_line_Options,
             isCommandLineOnly: true,
             description: ts.Diagnostics.Print_the_final_configuration_instead_of_building
@@ -37385,8 +38290,8 @@
             affectsEmit: true,
             paramType: ts.Diagnostics.KIND,
             showInSimplifiedHelpView: true,
-            category: ts.Diagnostics.Basic_Options,
-            description: ts.Diagnostics.Specify_module_code_generation_Colon_none_commonjs_amd_system_umd_es2015_es2020_or_ESNext,
+            category: ts.Diagnostics.Modules,
+            description: ts.Diagnostics.Specify_what_module_code_is_generated,
         },
         {
             name: "lib",
@@ -37395,10 +38300,10 @@
                 name: "lib",
                 type: ts.libMap
             },
-            affectsModuleResolution: true,
+            affectsProgramStructure: true,
             showInSimplifiedHelpView: true,
-            category: ts.Diagnostics.Basic_Options,
-            description: ts.Diagnostics.Specify_library_files_to_be_included_in_the_compilation,
+            category: ts.Diagnostics.Language_and_Environment,
+            description: ts.Diagnostics.Specify_a_set_of_bundled_library_declaration_files_that_describe_the_target_runtime_environment,
             transpileOptionValue: undefined
         },
         {
@@ -37406,14 +38311,17 @@
             type: "boolean",
             affectsModuleResolution: true,
             showInSimplifiedHelpView: true,
-            category: ts.Diagnostics.Basic_Options,
-            description: ts.Diagnostics.Allow_javascript_files_to_be_compiled
+            category: ts.Diagnostics.JavaScript_Support,
+            description: ts.Diagnostics.Allow_JavaScript_files_to_be_a_part_of_your_program_Use_the_checkJS_option_to_get_errors_from_these_files,
+            defaultValueDescription: "false"
         },
         {
             name: "checkJs",
             type: "boolean",
-            category: ts.Diagnostics.Basic_Options,
-            description: ts.Diagnostics.Report_errors_in_js_files
+            showInSimplifiedHelpView: true,
+            category: ts.Diagnostics.JavaScript_Support,
+            description: ts.Diagnostics.Enable_error_reporting_in_type_checked_JavaScript_files,
+            defaultValueDescription: "false"
         },
         {
             name: "jsx",
@@ -37423,8 +38331,9 @@
             affectsModuleResolution: true,
             paramType: ts.Diagnostics.KIND,
             showInSimplifiedHelpView: true,
-            category: ts.Diagnostics.Basic_Options,
-            description: ts.Diagnostics.Specify_JSX_code_generation_Colon_preserve_react_native_react_react_jsx_or_react_jsxdev,
+            category: ts.Diagnostics.Language_and_Environment,
+            description: ts.Diagnostics.Specify_what_JSX_code_is_generated,
+            defaultValueDescription: "undefined"
         },
         {
             name: "declaration",
@@ -37432,34 +38341,39 @@
             type: "boolean",
             affectsEmit: true,
             showInSimplifiedHelpView: true,
-            category: ts.Diagnostics.Basic_Options,
-            description: ts.Diagnostics.Generates_corresponding_d_ts_file,
-            transpileOptionValue: undefined
+            category: ts.Diagnostics.Emit,
+            transpileOptionValue: undefined,
+            description: ts.Diagnostics.Generate_d_ts_files_from_TypeScript_and_JavaScript_files_in_your_project,
+            defaultValueDescription: ts.Diagnostics.false_unless_composite_is_set,
         },
         {
             name: "declarationMap",
             type: "boolean",
             affectsEmit: true,
             showInSimplifiedHelpView: true,
-            category: ts.Diagnostics.Basic_Options,
-            description: ts.Diagnostics.Generates_a_sourcemap_for_each_corresponding_d_ts_file,
-            transpileOptionValue: undefined
+            category: ts.Diagnostics.Emit,
+            transpileOptionValue: undefined,
+            defaultValueDescription: "false",
+            description: ts.Diagnostics.Create_sourcemaps_for_d_ts_files
         },
         {
             name: "emitDeclarationOnly",
             type: "boolean",
             affectsEmit: true,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Only_emit_d_ts_declaration_files,
-            transpileOptionValue: undefined
+            showInSimplifiedHelpView: true,
+            category: ts.Diagnostics.Emit,
+            description: ts.Diagnostics.Only_output_d_ts_files_and_not_JavaScript_files,
+            transpileOptionValue: undefined,
+            defaultValueDescription: "false",
         },
         {
             name: "sourceMap",
             type: "boolean",
             affectsEmit: true,
             showInSimplifiedHelpView: true,
-            category: ts.Diagnostics.Basic_Options,
-            description: ts.Diagnostics.Generates_corresponding_map_file,
+            category: ts.Diagnostics.Emit,
+            defaultValueDescription: "false",
+            description: ts.Diagnostics.Create_source_map_files_for_emitted_JavaScript_files,
         },
         {
             name: "outFile",
@@ -37468,9 +38382,10 @@
             isFilePath: true,
             paramType: ts.Diagnostics.FILE,
             showInSimplifiedHelpView: true,
-            category: ts.Diagnostics.Basic_Options,
-            description: ts.Diagnostics.Concatenate_and_emit_output_to_single_file,
-            transpileOptionValue: undefined
+            category: ts.Diagnostics.Emit,
+            description: ts.Diagnostics.Specify_a_file_that_bundles_all_outputs_into_one_JavaScript_file_If_declaration_is_true_also_designates_a_file_that_bundles_all_d_ts_output,
+            transpileOptionValue: undefined,
+            defaultValueDescription: "n/a"
         },
         {
             name: "outDir",
@@ -37479,8 +38394,9 @@
             isFilePath: true,
             paramType: ts.Diagnostics.DIRECTORY,
             showInSimplifiedHelpView: true,
-            category: ts.Diagnostics.Basic_Options,
-            description: ts.Diagnostics.Redirect_output_structure_to_the_directory,
+            category: ts.Diagnostics.Emit,
+            description: ts.Diagnostics.Specify_an_output_folder_for_all_emitted_files,
+            defaultValueDescription: "n/a"
         },
         {
             name: "rootDir",
@@ -37488,17 +38404,19 @@
             affectsEmit: true,
             isFilePath: true,
             paramType: ts.Diagnostics.LOCATION,
-            category: ts.Diagnostics.Basic_Options,
-            description: ts.Diagnostics.Specify_the_root_directory_of_input_files_Use_to_control_the_output_directory_structure_with_outDir,
+            category: ts.Diagnostics.Modules,
+            description: ts.Diagnostics.Specify_the_root_folder_within_your_source_files,
+            defaultValueDescription: ts.Diagnostics.Computed_from_the_list_of_input_files
         },
         {
             name: "composite",
             type: "boolean",
             affectsEmit: true,
             isTSConfigOnly: true,
-            category: ts.Diagnostics.Basic_Options,
-            description: ts.Diagnostics.Enable_project_compilation,
-            transpileOptionValue: undefined
+            category: ts.Diagnostics.Projects,
+            transpileOptionValue: undefined,
+            defaultValueDescription: "false",
+            description: ts.Diagnostics.Enable_constraints_that_allow_a_TypeScript_project_to_be_used_with_project_references,
         },
         {
             name: "tsBuildInfoFile",
@@ -37506,32 +38424,36 @@
             affectsEmit: true,
             isFilePath: true,
             paramType: ts.Diagnostics.FILE,
-            category: ts.Diagnostics.Basic_Options,
-            description: ts.Diagnostics.Specify_file_to_store_incremental_compilation_information,
-            transpileOptionValue: undefined
+            category: ts.Diagnostics.Projects,
+            transpileOptionValue: undefined,
+            defaultValueDescription: ".tsbuildinfo",
+            description: ts.Diagnostics.Specify_the_folder_for_tsbuildinfo_incremental_compilation_files,
         },
         {
             name: "removeComments",
             type: "boolean",
             affectsEmit: true,
             showInSimplifiedHelpView: true,
-            category: ts.Diagnostics.Basic_Options,
-            description: ts.Diagnostics.Do_not_emit_comments_to_output,
+            category: ts.Diagnostics.Emit,
+            defaultValueDescription: "false",
+            description: ts.Diagnostics.Disable_emitting_comments,
         },
         {
             name: "noEmit",
             type: "boolean",
             showInSimplifiedHelpView: true,
-            category: ts.Diagnostics.Basic_Options,
-            description: ts.Diagnostics.Do_not_emit_outputs,
-            transpileOptionValue: undefined
+            category: ts.Diagnostics.Emit,
+            description: ts.Diagnostics.Disable_emitting_files_from_a_compilation,
+            transpileOptionValue: undefined,
+            defaultValueDescription: "false"
         },
         {
             name: "importHelpers",
             type: "boolean",
             affectsEmit: true,
-            category: ts.Diagnostics.Basic_Options,
-            description: ts.Diagnostics.Import_emit_helpers_from_tslib
+            category: ts.Diagnostics.Emit,
+            description: ts.Diagnostics.Allow_importing_helper_functions_from_tslib_once_per_project_instead_of_including_them_per_file,
+            defaultValueDescription: "false"
         },
         {
             name: "importsNotUsedAsValues",
@@ -37542,22 +38464,24 @@
             })),
             affectsEmit: true,
             affectsSemanticDiagnostics: true,
-            category: ts.Diagnostics.Advanced_Options,
+            category: ts.Diagnostics.Emit,
             description: ts.Diagnostics.Specify_emit_Slashchecking_behavior_for_imports_that_are_only_used_for_types
         },
         {
             name: "downlevelIteration",
             type: "boolean",
             affectsEmit: true,
-            category: ts.Diagnostics.Basic_Options,
-            description: ts.Diagnostics.Provide_full_support_for_iterables_in_for_of_spread_and_destructuring_when_targeting_ES5_or_ES3
+            category: ts.Diagnostics.Emit,
+            description: ts.Diagnostics.Emit_more_compliant_but_verbose_and_less_performant_JavaScript_for_iteration,
+            defaultValueDescription: "false"
         },
         {
             name: "isolatedModules",
             type: "boolean",
-            category: ts.Diagnostics.Basic_Options,
-            description: ts.Diagnostics.Transpile_each_file_as_a_separate_module_similar_to_ts_transpileModule,
-            transpileOptionValue: true
+            category: ts.Diagnostics.Interop_Constraints,
+            description: ts.Diagnostics.Ensure_that_each_file_can_be_safely_transpiled_without_relying_on_other_imports,
+            transpileOptionValue: true,
+            defaultValueDescription: "false"
         },
         // Strict Type Checks
         {
@@ -37566,127 +38490,140 @@
             // Though this affects semantic diagnostics, affectsSemanticDiagnostics is not set here
             // The value of each strictFlag depends on own strictFlag value or this and never accessed directly.
             showInSimplifiedHelpView: true,
-            category: ts.Diagnostics.Strict_Type_Checking_Options,
-            description: ts.Diagnostics.Enable_all_strict_type_checking_options
+            category: ts.Diagnostics.Type_Checking,
+            description: ts.Diagnostics.Enable_all_strict_type_checking_options,
+            defaultValueDescription: "false"
         },
         {
             name: "noImplicitAny",
             type: "boolean",
             affectsSemanticDiagnostics: true,
             strictFlag: true,
-            showInSimplifiedHelpView: true,
-            category: ts.Diagnostics.Strict_Type_Checking_Options,
-            description: ts.Diagnostics.Raise_error_on_expressions_and_declarations_with_an_implied_any_type
+            category: ts.Diagnostics.Type_Checking,
+            description: ts.Diagnostics.Enable_error_reporting_for_expressions_and_declarations_with_an_implied_any_type,
+            defaultValueDescription: ts.Diagnostics.false_unless_strict_is_set
         },
         {
             name: "strictNullChecks",
             type: "boolean",
             affectsSemanticDiagnostics: true,
             strictFlag: true,
-            showInSimplifiedHelpView: true,
-            category: ts.Diagnostics.Strict_Type_Checking_Options,
-            description: ts.Diagnostics.Enable_strict_null_checks
+            category: ts.Diagnostics.Type_Checking,
+            description: ts.Diagnostics.When_type_checking_take_into_account_null_and_undefined,
+            defaultValueDescription: ts.Diagnostics.false_unless_strict_is_set
         },
         {
             name: "strictFunctionTypes",
             type: "boolean",
-            affectsSemanticDiagnostics: true,
             strictFlag: true,
-            showInSimplifiedHelpView: true,
-            category: ts.Diagnostics.Strict_Type_Checking_Options,
-            description: ts.Diagnostics.Enable_strict_checking_of_function_types
+            category: ts.Diagnostics.Type_Checking,
+            description: ts.Diagnostics.When_assigning_functions_check_to_ensure_parameters_and_the_return_values_are_subtype_compatible,
+            defaultValueDescription: ts.Diagnostics.false_unless_strict_is_set
         },
         {
             name: "strictBindCallApply",
             type: "boolean",
             strictFlag: true,
-            showInSimplifiedHelpView: true,
-            category: ts.Diagnostics.Strict_Type_Checking_Options,
-            description: ts.Diagnostics.Enable_strict_bind_call_and_apply_methods_on_functions
+            category: ts.Diagnostics.Type_Checking,
+            description: ts.Diagnostics.Check_that_the_arguments_for_bind_call_and_apply_methods_match_the_original_function,
+            defaultValueDescription: ts.Diagnostics.false_unless_strict_is_set
         },
         {
             name: "strictPropertyInitialization",
             type: "boolean",
             affectsSemanticDiagnostics: true,
             strictFlag: true,
-            showInSimplifiedHelpView: true,
-            category: ts.Diagnostics.Strict_Type_Checking_Options,
-            description: ts.Diagnostics.Enable_strict_checking_of_property_initialization_in_classes
+            category: ts.Diagnostics.Type_Checking,
+            description: ts.Diagnostics.Check_for_class_properties_that_are_declared_but_not_set_in_the_constructor,
+            defaultValueDescription: ts.Diagnostics.false_unless_strict_is_set
         },
         {
             name: "noImplicitThis",
             type: "boolean",
             affectsSemanticDiagnostics: true,
             strictFlag: true,
-            showInSimplifiedHelpView: true,
-            category: ts.Diagnostics.Strict_Type_Checking_Options,
-            description: ts.Diagnostics.Raise_error_on_this_expressions_with_an_implied_any_type,
+            category: ts.Diagnostics.Type_Checking,
+            description: ts.Diagnostics.Enable_error_reporting_when_this_is_given_the_type_any,
+            defaultValueDescription: ts.Diagnostics.false_unless_strict_is_set
+        },
+        {
+            name: "useUnknownInCatchVariables",
+            type: "boolean",
+            affectsSemanticDiagnostics: true,
+            strictFlag: true,
+            category: ts.Diagnostics.Type_Checking,
+            description: ts.Diagnostics.Type_catch_clause_variables_as_unknown_instead_of_any,
         },
         {
             name: "alwaysStrict",
             type: "boolean",
             affectsSourceFile: true,
             strictFlag: true,
-            showInSimplifiedHelpView: true,
-            category: ts.Diagnostics.Strict_Type_Checking_Options,
-            description: ts.Diagnostics.Parse_in_strict_mode_and_emit_use_strict_for_each_source_file
+            category: ts.Diagnostics.Type_Checking,
+            description: ts.Diagnostics.Ensure_use_strict_is_always_emitted,
+            defaultValueDescription: ts.Diagnostics.false_unless_strict_is_set
         },
         // Additional Checks
         {
             name: "noUnusedLocals",
             type: "boolean",
             affectsSemanticDiagnostics: true,
-            showInSimplifiedHelpView: true,
-            category: ts.Diagnostics.Additional_Checks,
-            description: ts.Diagnostics.Report_errors_on_unused_locals,
+            category: ts.Diagnostics.Type_Checking,
+            description: ts.Diagnostics.Enable_error_reporting_when_a_local_variables_aren_t_read,
+            defaultValueDescription: "false"
         },
         {
             name: "noUnusedParameters",
             type: "boolean",
             affectsSemanticDiagnostics: true,
-            showInSimplifiedHelpView: true,
-            category: ts.Diagnostics.Additional_Checks,
-            description: ts.Diagnostics.Report_errors_on_unused_parameters,
+            category: ts.Diagnostics.Type_Checking,
+            description: ts.Diagnostics.Raise_an_error_when_a_function_parameter_isn_t_read,
+            defaultValueDescription: "false"
+        },
+        {
+            name: "exactOptionalPropertyTypes",
+            type: "boolean",
+            affectsSemanticDiagnostics: true,
+            category: ts.Diagnostics.Type_Checking,
+            description: ts.Diagnostics.Interpret_optional_property_types_as_written_rather_than_adding_undefined
         },
         {
             name: "noImplicitReturns",
             type: "boolean",
             affectsSemanticDiagnostics: true,
-            showInSimplifiedHelpView: true,
-            category: ts.Diagnostics.Additional_Checks,
-            description: ts.Diagnostics.Report_error_when_not_all_code_paths_in_function_return_a_value
+            category: ts.Diagnostics.Type_Checking,
+            description: ts.Diagnostics.Enable_error_reporting_for_codepaths_that_do_not_explicitly_return_in_a_function,
+            defaultValueDescription: "false"
         },
         {
             name: "noFallthroughCasesInSwitch",
             type: "boolean",
             affectsBindDiagnostics: true,
             affectsSemanticDiagnostics: true,
-            showInSimplifiedHelpView: true,
-            category: ts.Diagnostics.Additional_Checks,
-            description: ts.Diagnostics.Report_errors_for_fallthrough_cases_in_switch_statement
+            category: ts.Diagnostics.Type_Checking,
+            description: ts.Diagnostics.Enable_error_reporting_for_fallthrough_cases_in_switch_statements
         },
         {
             name: "noUncheckedIndexedAccess",
             type: "boolean",
             affectsSemanticDiagnostics: true,
-            showInSimplifiedHelpView: false,
-            category: ts.Diagnostics.Additional_Checks,
+            category: ts.Diagnostics.Type_Checking,
             description: ts.Diagnostics.Include_undefined_in_index_signature_results
         },
         {
             name: "noImplicitOverride",
             type: "boolean",
             affectsSemanticDiagnostics: true,
-            showInSimplifiedHelpView: false,
-            category: ts.Diagnostics.Additional_Checks,
+            category: ts.Diagnostics.Type_Checking,
             description: ts.Diagnostics.Ensure_overriding_members_in_derived_classes_are_marked_with_an_override_modifier
         },
         {
             name: "noPropertyAccessFromIndexSignature",
             type: "boolean",
             showInSimplifiedHelpView: false,
-            category: ts.Diagnostics.Additional_Checks,
-            description: ts.Diagnostics.Require_undeclared_properties_from_index_signatures_to_use_element_accesses
+            category: ts.Diagnostics.Type_Checking,
+            description: ts.Diagnostics.Enforces_using_indexed_accessors_for_keys_declared_using_an_indexed_type,
+            defaultValueDescription: "false"
         },
         // Module Resolution
         {
@@ -37697,16 +38634,17 @@
             })),
             affectsModuleResolution: true,
             paramType: ts.Diagnostics.STRATEGY,
-            category: ts.Diagnostics.Module_Resolution_Options,
-            description: ts.Diagnostics.Specify_module_resolution_strategy_Colon_node_Node_js_or_classic_TypeScript_pre_1_6,
+            category: ts.Diagnostics.Modules,
+            description: ts.Diagnostics.Specify_how_TypeScript_looks_up_a_file_from_a_given_module_specifier,
+            defaultValueDescription: ts.Diagnostics.module_AMD_or_UMD_or_System_or_ES6_then_Classic_Otherwise_Node
         },
         {
             name: "baseUrl",
             type: "string",
             affectsModuleResolution: true,
             isFilePath: true,
-            category: ts.Diagnostics.Module_Resolution_Options,
-            description: ts.Diagnostics.Base_directory_to_resolve_non_absolute_module_names
+            category: ts.Diagnostics.Modules,
+            description: ts.Diagnostics.Specify_the_base_directory_to_resolve_non_relative_module_names
         },
         {
             // this option can only be specified in tsconfig.json
@@ -37715,8 +38653,8 @@
             type: "object",
             affectsModuleResolution: true,
             isTSConfigOnly: true,
-            category: ts.Diagnostics.Module_Resolution_Options,
-            description: ts.Diagnostics.A_series_of_entries_which_re_map_imports_to_lookup_locations_relative_to_the_baseUrl,
+            category: ts.Diagnostics.Modules,
+            description: ts.Diagnostics.Specify_a_set_of_entries_that_re_map_imports_to_additional_lookup_locations,
             transpileOptionValue: undefined
         },
         {
@@ -37731,9 +38669,10 @@
                 isFilePath: true
             },
             affectsModuleResolution: true,
-            category: ts.Diagnostics.Module_Resolution_Options,
-            description: ts.Diagnostics.List_of_root_folders_whose_combined_content_represents_the_structure_of_the_project_at_runtime,
-            transpileOptionValue: undefined
+            category: ts.Diagnostics.Modules,
+            description: ts.Diagnostics.Allow_multiple_folders_to_be_treated_as_one_when_resolving_modules,
+            transpileOptionValue: undefined,
+            defaultValueDescription: ts.Diagnostics.Computed_from_the_list_of_input_files
         },
         {
             name: "typeRoots",
@@ -37744,8 +38683,8 @@
                 isFilePath: true
             },
             affectsModuleResolution: true,
-            category: ts.Diagnostics.Module_Resolution_Options,
-            description: ts.Diagnostics.List_of_folders_to_include_type_definitions_from
+            category: ts.Diagnostics.Modules,
+            description: ts.Diagnostics.Specify_multiple_folders_that_act_like_Slashnode_modules_Slash_types
         },
         {
             name: "types",
@@ -37754,18 +38693,19 @@
                 name: "types",
                 type: "string"
             },
-            affectsModuleResolution: true,
+            affectsProgramStructure: true,
             showInSimplifiedHelpView: true,
-            category: ts.Diagnostics.Module_Resolution_Options,
-            description: ts.Diagnostics.Type_declaration_files_to_be_included_in_compilation,
+            category: ts.Diagnostics.Modules,
+            description: ts.Diagnostics.Specify_type_package_names_to_be_included_without_being_referenced_in_a_source_file,
             transpileOptionValue: undefined
         },
         {
             name: "allowSyntheticDefaultImports",
             type: "boolean",
             affectsSemanticDiagnostics: true,
-            category: ts.Diagnostics.Module_Resolution_Options,
-            description: ts.Diagnostics.Allow_default_imports_from_modules_with_no_default_export_This_does_not_affect_code_emit_just_typechecking
+            category: ts.Diagnostics.Interop_Constraints,
+            description: ts.Diagnostics.Allow_import_x_from_y_when_a_module_doesn_t_have_a_default_export,
+            defaultValueDescription: ts.Diagnostics.module_system_or_esModuleInterop
         },
         {
             name: "esModuleInterop",
@@ -37773,21 +38713,24 @@
             affectsSemanticDiagnostics: true,
             affectsEmit: true,
             showInSimplifiedHelpView: true,
-            category: ts.Diagnostics.Module_Resolution_Options,
-            description: ts.Diagnostics.Enables_emit_interoperability_between_CommonJS_and_ES_Modules_via_creation_of_namespace_objects_for_all_imports_Implies_allowSyntheticDefaultImports
+            category: ts.Diagnostics.Interop_Constraints,
+            description: ts.Diagnostics.Emit_additional_JavaScript_to_ease_support_for_importing_CommonJS_modules_This_enables_allowSyntheticDefaultImports_for_type_compatibility,
+            defaultValueDescription: "false"
         },
         {
             name: "preserveSymlinks",
             type: "boolean",
-            category: ts.Diagnostics.Module_Resolution_Options,
-            description: ts.Diagnostics.Do_not_resolve_the_real_path_of_symlinks,
+            category: ts.Diagnostics.Interop_Constraints,
+            description: ts.Diagnostics.Disable_resolving_symlinks_to_their_realpath_This_correlates_to_the_same_flag_in_node,
+            defaultValueDescription: "n/a"
         },
         {
             name: "allowUmdGlobalAccess",
             type: "boolean",
             affectsSemanticDiagnostics: true,
-            category: ts.Diagnostics.Module_Resolution_Options,
+            category: ts.Diagnostics.Modules,
             description: ts.Diagnostics.Allow_accessing_UMD_globals_from_modules,
+            defaultValueDescription: "false"
         },
         // Source Maps
         {
@@ -37795,59 +38738,62 @@
             type: "string",
             affectsEmit: true,
             paramType: ts.Diagnostics.LOCATION,
-            category: ts.Diagnostics.Source_Map_Options,
-            description: ts.Diagnostics.Specify_the_location_where_debugger_should_locate_TypeScript_files_instead_of_source_locations,
+            category: ts.Diagnostics.Emit,
+            description: ts.Diagnostics.Specify_the_root_path_for_debuggers_to_find_the_reference_source_code,
         },
         {
             name: "mapRoot",
             type: "string",
             affectsEmit: true,
             paramType: ts.Diagnostics.LOCATION,
-            category: ts.Diagnostics.Source_Map_Options,
+            category: ts.Diagnostics.Emit,
             description: ts.Diagnostics.Specify_the_location_where_debugger_should_locate_map_files_instead_of_generated_locations,
         },
         {
             name: "inlineSourceMap",
             type: "boolean",
             affectsEmit: true,
-            category: ts.Diagnostics.Source_Map_Options,
-            description: ts.Diagnostics.Emit_a_single_file_with_source_maps_instead_of_having_a_separate_file
+            category: ts.Diagnostics.Emit,
+            description: ts.Diagnostics.Include_sourcemap_files_inside_the_emitted_JavaScript,
+            defaultValueDescription: "false"
         },
         {
             name: "inlineSources",
             type: "boolean",
             affectsEmit: true,
-            category: ts.Diagnostics.Source_Map_Options,
-            description: ts.Diagnostics.Emit_the_source_alongside_the_sourcemaps_within_a_single_file_requires_inlineSourceMap_or_sourceMap_to_be_set
+            category: ts.Diagnostics.Emit,
+            description: ts.Diagnostics.Include_source_code_in_the_sourcemaps_inside_the_emitted_JavaScript,
+            defaultValueDescription: "false"
         },
         // Experimental
         {
             name: "experimentalDecorators",
             type: "boolean",
             affectsSemanticDiagnostics: true,
-            category: ts.Diagnostics.Experimental_Options,
-            description: ts.Diagnostics.Enables_experimental_support_for_ES7_decorators
+            category: ts.Diagnostics.Language_and_Environment,
+            description: ts.Diagnostics.Enable_experimental_support_for_TC39_stage_2_draft_decorators
         },
         {
             name: "emitDecoratorMetadata",
             type: "boolean",
             affectsSemanticDiagnostics: true,
             affectsEmit: true,
-            category: ts.Diagnostics.Experimental_Options,
-            description: ts.Diagnostics.Enables_experimental_support_for_emitting_type_metadata_for_decorators
+            category: ts.Diagnostics.Language_and_Environment,
+            description: ts.Diagnostics.Emit_design_type_metadata_for_decorated_declarations_in_source_files
         },
         // Advanced
         {
             name: "jsxFactory",
             type: "string",
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Specify_the_JSX_factory_function_to_use_when_targeting_react_JSX_emit_e_g_React_createElement_or_h
+            category: ts.Diagnostics.Language_and_Environment,
+            description: ts.Diagnostics.Specify_the_JSX_factory_function_used_when_targeting_React_JSX_emit_e_g_React_createElement_or_h,
+            defaultValueDescription: "`React.createElement`"
         },
         {
             name: "jsxFragmentFactory",
             type: "string",
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Specify_the_JSX_fragment_factory_function_to_use_when_targeting_react_JSX_emit_with_jsxFactory_compiler_option_is_specified_e_g_Fragment
+            category: ts.Diagnostics.Language_and_Environment,
+            description: ts.Diagnostics.Specify_the_JSX_Fragment_reference_used_for_fragments_when_targeting_React_JSX_emit_e_g_React_Fragment_or_Fragment
         },
         {
             name: "jsxImportSource",
@@ -37855,15 +38801,17 @@
             affectsSemanticDiagnostics: true,
             affectsEmit: true,
             affectsModuleResolution: true,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Specify_the_module_specifier_to_be_used_to_import_the_jsx_and_jsxs_factory_functions_from_eg_react
+            category: ts.Diagnostics.Language_and_Environment,
+            description: ts.Diagnostics.Specify_module_specifier_used_to_import_the_JSX_factory_functions_when_using_jsx_Colon_react_jsx_Asterisk,
+            defaultValueDescription: "react"
         },
         {
             name: "resolveJsonModule",
             type: "boolean",
             affectsModuleResolution: true,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Include_modules_imported_with_json_extension
+            category: ts.Diagnostics.Modules,
+            description: ts.Diagnostics.Enable_importing_json_files,
+            defaultValueDescription: "false"
         },
         {
             name: "out",
@@ -37871,36 +38819,41 @@
             affectsEmit: true,
             isFilePath: false,
             // for correct behaviour, please use outFile
-            category: ts.Diagnostics.Advanced_Options,
+            category: ts.Diagnostics.Backwards_Compatibility,
             paramType: ts.Diagnostics.FILE,
-            description: ts.Diagnostics.Deprecated_Use_outFile_instead_Concatenate_and_emit_output_to_single_file,
-            transpileOptionValue: undefined
+            transpileOptionValue: undefined,
+            defaultValueDescription: "n/a",
+            description: ts.Diagnostics.Deprecated_setting_Use_outFile_instead,
         },
         {
             name: "reactNamespace",
             type: "string",
             affectsEmit: true,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Deprecated_Use_jsxFactory_instead_Specify_the_object_invoked_for_createElement_when_targeting_react_JSX_emit
+            category: ts.Diagnostics.Language_and_Environment,
+            description: ts.Diagnostics.Specify_the_object_invoked_for_createElement_This_only_applies_when_targeting_react_JSX_emit,
+            defaultValueDescription: "`React`",
         },
         {
             name: "skipDefaultLibCheck",
             type: "boolean",
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Deprecated_Use_skipLibCheck_instead_Skip_type_checking_of_default_library_declaration_files
+            category: ts.Diagnostics.Completeness,
+            description: ts.Diagnostics.Skip_type_checking_d_ts_files_that_are_included_with_TypeScript,
+            defaultValueDescription: "false",
         },
         {
             name: "charset",
             type: "string",
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.The_character_set_of_the_input_files
+            category: ts.Diagnostics.Backwards_Compatibility,
+            description: ts.Diagnostics.No_longer_supported_In_early_versions_manually_set_the_text_encoding_for_reading_files,
+            defaultValueDescription: "utf8"
         },
         {
             name: "emitBOM",
             type: "boolean",
             affectsEmit: true,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Emit_a_UTF_8_Byte_Order_Mark_BOM_in_the_beginning_of_output_files
+            category: ts.Diagnostics.Emit,
+            description: ts.Diagnostics.Emit_a_UTF_8_Byte_Order_Mark_BOM_in_the_beginning_of_output_files,
+            defaultValueDescription: "false"
         },
         {
             name: "newLine",
@@ -37910,99 +38863,108 @@
             })),
             affectsEmit: true,
             paramType: ts.Diagnostics.NEWLINE,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Specify_the_end_of_line_sequence_to_be_used_when_emitting_files_Colon_CRLF_dos_or_LF_unix,
+            category: ts.Diagnostics.Emit,
+            description: ts.Diagnostics.Set_the_newline_character_for_emitting_files,
+            defaultValueDescription: ts.Diagnostics.Platform_specific
         },
         {
             name: "noErrorTruncation",
             type: "boolean",
             affectsSemanticDiagnostics: true,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Do_not_truncate_error_messages
+            category: ts.Diagnostics.Output_Formatting,
+            description: ts.Diagnostics.Disable_truncating_types_in_error_messages,
+            defaultValueDescription: "false"
         },
         {
             name: "noLib",
             type: "boolean",
-            affectsModuleResolution: true,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Do_not_include_the_default_library_file_lib_d_ts,
+            category: ts.Diagnostics.Language_and_Environment,
+            affectsProgramStructure: true,
+            description: ts.Diagnostics.Disable_including_any_library_files_including_the_default_lib_d_ts,
             // We are not returning a sourceFile for lib file when asked by the program,
             // so pass --noLib to avoid reporting a file not found error.
-            transpileOptionValue: true
+            transpileOptionValue: true,
+            defaultValueDescription: "false"
         },
         {
             name: "noResolve",
             type: "boolean",
             affectsModuleResolution: true,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Do_not_add_triple_slash_references_or_imported_modules_to_the_list_of_compiled_files,
+            category: ts.Diagnostics.Modules,
+            description: ts.Diagnostics.Disallow_import_s_require_s_or_reference_s_from_expanding_the_number_of_files_TypeScript_should_add_to_a_project,
             // We are not doing a full typecheck, we are not resolving the whole context,
             // so pass --noResolve to avoid reporting missing file errors.
-            transpileOptionValue: true
+            transpileOptionValue: true,
+            defaultValueDescription: "false"
         },
         {
             name: "stripInternal",
             type: "boolean",
             affectsEmit: true,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Do_not_emit_declarations_for_code_that_has_an_internal_annotation,
+            category: ts.Diagnostics.Emit,
+            description: ts.Diagnostics.Disable_emitting_declarations_that_have_internal_in_their_JSDoc_comments,
         },
         {
             name: "disableSizeLimit",
             type: "boolean",
-            affectsSourceFile: true,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Disable_size_limitations_on_JavaScript_projects
+            affectsProgramStructure: true,
+            category: ts.Diagnostics.Editor_Support,
+            description: ts.Diagnostics.Remove_the_20mb_cap_on_total_source_code_size_for_JavaScript_files_in_the_TypeScript_language_server,
+            defaultValueDescription: "false"
         },
         {
             name: "disableSourceOfProjectReferenceRedirect",
             type: "boolean",
             isTSConfigOnly: true,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Disable_use_of_source_files_instead_of_declaration_files_from_referenced_projects
+            category: ts.Diagnostics.Projects,
+            description: ts.Diagnostics.Disable_preferring_source_files_instead_of_declaration_files_when_referencing_composite_projects
         },
         {
             name: "disableSolutionSearching",
             type: "boolean",
             isTSConfigOnly: true,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Disable_solution_searching_for_this_project
+            category: ts.Diagnostics.Projects,
+            description: ts.Diagnostics.Opt_a_project_out_of_multi_project_reference_checking_when_editing
         },
         {
             name: "disableReferencedProjectLoad",
             type: "boolean",
             isTSConfigOnly: true,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Disable_loading_referenced_projects
+            category: ts.Diagnostics.Projects,
+            description: ts.Diagnostics.Reduce_the_number_of_projects_loaded_automatically_by_TypeScript
         },
         {
             name: "noImplicitUseStrict",
             type: "boolean",
             affectsSemanticDiagnostics: true,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Do_not_emit_use_strict_directives_in_module_output
+            category: ts.Diagnostics.Backwards_Compatibility,
+            description: ts.Diagnostics.Disable_adding_use_strict_directives_in_emitted_JavaScript_files,
+            defaultValueDescription: "false"
         },
         {
             name: "noEmitHelpers",
             type: "boolean",
             affectsEmit: true,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Do_not_generate_custom_helper_functions_like_extends_in_compiled_output
+            category: ts.Diagnostics.Emit,
+            description: ts.Diagnostics.Disable_generating_custom_helper_functions_like_extends_in_compiled_output,
+            defaultValueDescription: "false"
         },
         {
             name: "noEmitOnError",
             type: "boolean",
             affectsEmit: true,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Do_not_emit_outputs_if_any_errors_were_reported,
-            transpileOptionValue: undefined
+            category: ts.Diagnostics.Emit,
+            transpileOptionValue: undefined,
+            description: ts.Diagnostics.Disable_emitting_files_if_any_type_checking_errors_are_reported,
+            defaultValueDescription: "false"
         },
         {
             name: "preserveConstEnums",
             type: "boolean",
             affectsEmit: true,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Do_not_erase_const_enum_declarations_in_generated_code
+            category: ts.Diagnostics.Emit,
+            description: ts.Diagnostics.Disable_erasing_const_enum_declarations_in_generated_code,
+            defaultValueDescription: "n/a"
         },
         {
             name: "declarationDir",
@@ -38010,80 +38972,91 @@
             affectsEmit: true,
             isFilePath: true,
             paramType: ts.Diagnostics.DIRECTORY,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Output_directory_for_generated_declaration_files,
-            transpileOptionValue: undefined
+            category: ts.Diagnostics.Emit,
+            transpileOptionValue: undefined,
+            description: ts.Diagnostics.Specify_the_output_directory_for_generated_declaration_files,
+            defaultValueDescription: "n/a"
         },
         {
             name: "skipLibCheck",
             type: "boolean",
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Skip_type_checking_of_declaration_files,
+            category: ts.Diagnostics.Completeness,
+            description: ts.Diagnostics.Skip_type_checking_all_d_ts_files,
+            defaultValueDescription: "false"
         },
         {
             name: "allowUnusedLabels",
             type: "boolean",
             affectsBindDiagnostics: true,
             affectsSemanticDiagnostics: true,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Do_not_report_errors_on_unused_labels
+            category: ts.Diagnostics.Type_Checking,
+            description: ts.Diagnostics.Disable_error_reporting_for_unused_labels,
+            defaultValueDescription: "undefined"
         },
         {
             name: "allowUnreachableCode",
             type: "boolean",
             affectsBindDiagnostics: true,
             affectsSemanticDiagnostics: true,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Do_not_report_errors_on_unreachable_code
+            category: ts.Diagnostics.Type_Checking,
+            description: ts.Diagnostics.Disable_error_reporting_for_unreachable_code,
+            defaultValueDescription: "undefined"
         },
         {
             name: "suppressExcessPropertyErrors",
             type: "boolean",
             affectsSemanticDiagnostics: true,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Suppress_excess_property_checks_for_object_literals,
+            category: ts.Diagnostics.Backwards_Compatibility,
+            description: ts.Diagnostics.Disable_reporting_of_excess_property_errors_during_the_creation_of_object_literals,
+            defaultValueDescription: "false"
         },
         {
             name: "suppressImplicitAnyIndexErrors",
             type: "boolean",
             affectsSemanticDiagnostics: true,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Suppress_noImplicitAny_errors_for_indexing_objects_lacking_index_signatures,
+            category: ts.Diagnostics.Backwards_Compatibility,
+            description: ts.Diagnostics.Suppress_noImplicitAny_errors_when_indexing_objects_that_lack_index_signatures,
+            defaultValueDescription: "false"
         },
         {
             name: "forceConsistentCasingInFileNames",
             type: "boolean",
             affectsModuleResolution: true,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Disallow_inconsistently_cased_references_to_the_same_file
+            category: ts.Diagnostics.Interop_Constraints,
+            description: ts.Diagnostics.Ensure_that_casing_is_correct_in_imports,
+            defaultValueDescription: "false"
         },
         {
             name: "maxNodeModuleJsDepth",
             type: "number",
             affectsModuleResolution: true,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.The_maximum_dependency_depth_to_search_under_node_modules_and_load_JavaScript_files
+            category: ts.Diagnostics.JavaScript_Support,
+            description: ts.Diagnostics.Specify_the_maximum_folder_depth_used_for_checking_JavaScript_files_from_node_modules_Only_applicable_with_allowJs,
+            defaultValueDescription: "0"
         },
         {
             name: "noStrictGenericChecks",
             type: "boolean",
             affectsSemanticDiagnostics: true,
-            category: ts.Diagnostics.Advanced_Options,
+            category: ts.Diagnostics.Backwards_Compatibility,
             description: ts.Diagnostics.Disable_strict_checking_of_generic_signatures_in_function_types,
+            defaultValueDescription: "false"
         },
         {
             name: "useDefineForClassFields",
             type: "boolean",
             affectsSemanticDiagnostics: true,
             affectsEmit: true,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Emit_class_fields_with_Define_instead_of_Set,
+            category: ts.Diagnostics.Language_and_Environment,
+            description: ts.Diagnostics.Emit_ECMAScript_standard_compliant_class_fields,
+            defaultValueDescription: "false"
         },
         {
             name: "keyofStringsOnly",
             type: "boolean",
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Resolve_keyof_to_string_valued_property_names_only_no_numbers_or_symbols,
+            category: ts.Diagnostics.Backwards_Compatibility,
+            description: ts.Diagnostics.Make_keyof_only_return_strings_instead_of_string_numbers_or_symbols_Legacy_option,
+            defaultValueDescription: "false"
         },
         {
             // A list of plugins to load in the language service
@@ -38094,11 +39067,12 @@
                 name: "plugin",
                 type: "object"
             },
-            description: ts.Diagnostics.List_of_language_service_plugins
+            description: ts.Diagnostics.List_of_language_service_plugins,
+            category: ts.Diagnostics.Editor_Support,
         },
     ];
     /* @internal */
-    ts.optionDeclarations = __spreadArray(__spreadArray([], ts.commonOptionsWithBuild), commandOptionsWithoutBuild);
+    ts.optionDeclarations = __spreadArray(__spreadArray([], ts.commonOptionsWithBuild, true), commandOptionsWithoutBuild, true);
     /* @internal */
     ts.semanticDiagnosticsOptionDeclarations = ts.optionDeclarations.filter(function (option) { return !!option.affectsSemanticDiagnostics; });
     /* @internal */
@@ -38110,10 +39084,14 @@
         return !!option.affectsSourceFile || !!option.affectsModuleResolution || !!option.affectsBindDiagnostics;
     });
     /* @internal */
+    ts.optionsAffectingProgramStructure = ts.optionDeclarations.filter(function (option) { return !!option.affectsProgramStructure; });
+    /* @internal */
     ts.transpileOptionValueCompilerOptions = ts.optionDeclarations.filter(function (option) {
         return ts.hasProperty(option, "transpileOptionValue");
     });
-    var commandOptionsOnlyBuild = [
+    // Build related options
+    /* @internal */
+    ts.optionsForBuild = [
         {
             name: "verbose",
             shortName: "v",
@@ -38143,7 +39121,7 @@
         }
     ];
     /* @internal */
-    ts.buildOpts = __spreadArray(__spreadArray([], ts.commonOptionsWithBuild), commandOptionsOnlyBuild);
+    ts.buildOpts = __spreadArray(__spreadArray([], ts.commonOptionsWithBuild, true), ts.optionsForBuild, true);
     /* @internal */
     ts.typeAcquisitionDeclarations = [
         {
@@ -38234,13 +39212,13 @@
     }
     /* @internal */
     function parseCustomTypeOption(opt, value, errors) {
-        return convertJsonOptionOfCustomType(opt, trimString(value || ""), errors);
+        return convertJsonOptionOfCustomType(opt, ts.trimString(value || ""), errors);
     }
     ts.parseCustomTypeOption = parseCustomTypeOption;
     /* @internal */
     function parseListTypeOption(opt, value, errors) {
         if (value === void 0) { value = ""; }
-        value = trimString(value);
+        value = ts.trimString(value);
         if (ts.startsWith(value, "-")) {
             return undefined;
         }
@@ -38624,7 +39602,8 @@
                     },
                     {
                         name: "extends",
-                        type: "string"
+                        type: "string",
+                        category: ts.Diagnostics.File_Management,
                     },
                     {
                         name: "references",
@@ -38632,7 +39611,8 @@
                         element: {
                             name: "references",
                             type: "object"
-                        }
+                        },
+                        category: ts.Diagnostics.Projects,
                     },
                     {
                         name: "files",
@@ -38640,7 +39620,8 @@
                         element: {
                             name: "files",
                             type: "string"
-                        }
+                        },
+                        category: ts.Diagnostics.File_Management,
                     },
                     {
                         name: "include",
@@ -38648,7 +39629,9 @@
                         element: {
                             name: "include",
                             type: "string"
-                        }
+                        },
+                        category: ts.Diagnostics.File_Management,
+                        defaultValueDescription: ts.Diagnostics.if_files_is_specified_otherwise_Asterisk_Asterisk_Slash_Asterisk
                     },
                     {
                         name: "exclude",
@@ -38656,7 +39639,9 @@
                         element: {
                             name: "exclude",
                             type: "string"
-                        }
+                        },
+                        category: ts.Diagnostics.File_Management,
+                        defaultValueDescription: ts.Diagnostics.node_modules_bower_components_jspm_packages_plus_the_value_of_outDir_if_one_is_specified
                     },
                     ts.compileOnSaveCommandLineOption
                 ])
@@ -38668,7 +39653,7 @@
         var _a;
         var rootExpression = (_a = sourceFile.statements[0]) === null || _a === void 0 ? void 0 : _a.expression;
         var knownRootOptions = reportOptionsErrors ? getTsconfigRootOptionsMap() : undefined;
-        if (rootExpression && rootExpression.kind !== 201 /* ObjectLiteralExpression */) {
+        if (rootExpression && rootExpression.kind !== 203 /* ObjectLiteralExpression */) {
             errors.push(ts.createDiagnosticForNodeInSourceFile(sourceFile, rootExpression, ts.Diagnostics.The_root_value_of_a_0_file_must_be_an_object, ts.getBaseFileName(sourceFile.fileName) === "jsconfig.json" ? "jsconfig.json" : "tsconfig.json"));
             // Last-ditch error recovery. Somewhat useful because the JSON parser will recover from some parse errors by
             // synthesizing a top-level array literal expression. There's a reasonable chance the first element of that
@@ -38708,7 +39693,7 @@
         function convertObjectLiteralExpressionToJson(node, knownOptions, extraKeyDiagnostics, parentOption) {
             var result = returnValue ? {} : undefined;
             var _loop_4 = function (element) {
-                if (element.kind !== 289 /* PropertyAssignment */) {
+                if (element.kind !== 291 /* PropertyAssignment */) {
                     errors.push(ts.createDiagnosticForNodeInSourceFile(sourceFile, element, ts.Diagnostics.Property_assignment_expected));
                     return "continue";
                 }
@@ -38775,13 +39760,13 @@
         function convertPropertyValueToJson(valueExpression, option) {
             var invalidReported;
             switch (valueExpression.kind) {
-                case 109 /* TrueKeyword */:
+                case 110 /* TrueKeyword */:
                     reportInvalidOptionValue(option && option.type !== "boolean");
                     return validateValue(/*value*/ true);
-                case 94 /* FalseKeyword */:
+                case 95 /* FalseKeyword */:
                     reportInvalidOptionValue(option && option.type !== "boolean");
                     return validateValue(/*value*/ false);
-                case 103 /* NullKeyword */:
+                case 104 /* NullKeyword */:
                     reportInvalidOptionValue(option && option.name === "extends"); // "extends" is the only option we don't allow null/undefined for
                     return validateValue(/*value*/ null); // eslint-disable-line no-null/no-null
                 case 10 /* StringLiteral */:
@@ -38802,13 +39787,13 @@
                 case 8 /* NumericLiteral */:
                     reportInvalidOptionValue(option && option.type !== "number");
                     return validateValue(Number(valueExpression.text));
-                case 215 /* PrefixUnaryExpression */:
+                case 217 /* PrefixUnaryExpression */:
                     if (valueExpression.operator !== 40 /* MinusToken */ || valueExpression.operand.kind !== 8 /* NumericLiteral */) {
                         break; // not valid JSON syntax
                     }
                     reportInvalidOptionValue(option && option.type !== "number");
                     return validateValue(-Number(valueExpression.operand.text));
-                case 201 /* ObjectLiteralExpression */:
+                case 203 /* ObjectLiteralExpression */:
                     reportInvalidOptionValue(option && option.type !== "object");
                     var objectLiteralExpression = valueExpression;
                     // Currently having element option declaration in the tsconfig with type "object"
@@ -38825,7 +39810,7 @@
                         return validateValue(convertObjectLiteralExpressionToJson(objectLiteralExpression, /* knownOptions*/ undefined, 
                         /*extraKeyDiagnosticMessage */ undefined, /*parentOption*/ undefined));
                     }
-                case 200 /* ArrayLiteralExpression */:
+                case 202 /* ArrayLiteralExpression */:
                     reportInvalidOptionValue(option && option.type !== "list");
                     return validateValue(convertArrayLiteralExpressionToJson(valueExpression.elements, option && option.element));
             }
@@ -38842,7 +39827,7 @@
                 if (!invalidReported) {
                     var diagnostic = (_a = option === null || option === void 0 ? void 0 : option.extraValidation) === null || _a === void 0 ? void 0 : _a.call(option, value);
                     if (diagnostic) {
-                        errors.push(ts.createDiagnosticForNodeInSourceFile.apply(void 0, __spreadArray([sourceFile, valueExpression], diagnostic)));
+                        errors.push(ts.createDiagnosticForNodeInSourceFile.apply(void 0, __spreadArray([sourceFile, valueExpression], diagnostic, false)));
                         return undefined;
                     }
                 }
@@ -38963,7 +39948,7 @@
             if (ts.hasProperty(options, name)) {
                 // tsconfig only options cannot be specified via command line,
                 // so we can assume that only types that can appear here string | number | boolean
-                if (optionsNameMap.has(name) && optionsNameMap.get(name).category === ts.Diagnostics.Command_line_Options) {
+                if (optionsNameMap.has(name) && (optionsNameMap.get(name).category === ts.Diagnostics.Command_line_Options || optionsNameMap.get(name).category === ts.Diagnostics.Output_Formatting)) {
                     return "continue";
                 }
                 var value = options[name];
@@ -39029,13 +40014,11 @@
         function makePadding(paddingLength) {
             return Array(paddingLength + 1).join(" ");
         }
-        function isAllowedOption(_a) {
-            var category = _a.category, name = _a.name;
-            // Skip options which do not have a category or have category `Command_line_Options`
-            // Exclude all possible `Advanced_Options` in tsconfig.json which were NOT defined in command line
-            return category !== undefined
-                && category !== ts.Diagnostics.Command_line_Options
-                && (category !== ts.Diagnostics.Advanced_Options || compilerOptionsMap.has(name));
+        function isAllowedOptionForOutput(_a) {
+            var category = _a.category, name = _a.name, isCommandLineOnly = _a.isCommandLineOnly;
+            // Skip options which do not have a category or have categories which are more niche
+            var categoriesToSkip = [ts.Diagnostics.Command_line_Options, ts.Diagnostics.Editor_Support, ts.Diagnostics.Compiler_Diagnostics, ts.Diagnostics.Backwards_Compatibility, ts.Diagnostics.Watch_and_Build_Modes, ts.Diagnostics.Output_Formatting];
+            return !isCommandLineOnly && category !== undefined && (!categoriesToSkip.includes(category) || compilerOptionsMap.has(name));
         }
         function writeConfigurations() {
             // Filter applicable options to place in the file
@@ -39043,7 +40026,7 @@
             for (var _i = 0, optionDeclarations_1 = ts.optionDeclarations; _i < optionDeclarations_1.length; _i++) {
                 var option = optionDeclarations_1[_i];
                 var category = option.category;
-                if (isAllowedOption(option)) {
+                if (isAllowedOptionForOutput(option)) {
                     categorizedOptions.add(ts.getLocaleSpecificMessage(category), option);
                 }
             }
@@ -39260,6 +40243,7 @@
                 validatedFilesSpec: ts.filter(filesSpecs, ts.isString),
                 validatedIncludeSpecs: validatedIncludeSpecs,
                 validatedExcludeSpecs: validatedExcludeSpecs,
+                pathPatterns: undefined, // Initialized on first use
             };
         }
         function getFileNames(basePath) {
@@ -39357,7 +40341,7 @@
         basePath = ts.normalizeSlashes(basePath);
         var resolvedPath = ts.getNormalizedAbsolutePath(configFileName || "", basePath);
         if (resolutionStack.indexOf(resolvedPath) >= 0) {
-            errors.push(ts.createCompilerDiagnostic(ts.Diagnostics.Circularity_detected_while_resolving_configuration_Colon_0, __spreadArray(__spreadArray([], resolutionStack), [resolvedPath]).join(" -> ")));
+            errors.push(ts.createCompilerDiagnostic(ts.Diagnostics.Circularity_detected_while_resolving_configuration_Colon_0, __spreadArray(__spreadArray([], resolutionStack, true), [resolvedPath], false).join(" -> ")));
             return { raw: json || convertToObject(sourceFile, errors) };
         }
         var ownConfig = json ?
@@ -39657,9 +40641,6 @@
     function convertJsonOptionOfListType(option, values, basePath, errors) {
         return ts.filter(ts.map(values, function (v) { return convertJsonOption(option.element, v, basePath, errors); }), function (v) { return !!v; });
     }
-    function trimString(s) {
-        return typeof s.trim === "function" ? s.trim() : s.replace(/^[\s]+|[\s]+$/g, "");
-    }
     /**
      * Tests for a path that ends in a recursive directory wildcard.
      * Matches **, \**, **\, and \**\, but not a**b.
@@ -39673,34 +40654,6 @@
      */
     var invalidTrailingRecursionPattern = /(^|\/)\*\*\/?$/;
     /**
-     * Tests for a path where .. appears after a recursive directory wildcard.
-     * Matches **\..\*, **\a\..\*, and **\.., but not ..\**\*
-     *
-     * NOTE: used \ in place of / above to avoid issues with multiline comments.
-     *
-     * Breakdown:
-     *  (^|\/)      # matches either the beginning of the string or a directory separator.
-     *  \*\*\/      # matches a recursive directory wildcard "**" followed by a directory separator.
-     *  (.*\/)?     # optionally matches any number of characters followed by a directory separator.
-     *  \.\.        # matches a parent directory path component ".."
-     *  ($|\/)      # matches either the end of the string or a directory separator.
-     */
-    var invalidDotDotAfterRecursiveWildcardPattern = /(^|\/)\*\*\/(.*\/)?\.\.($|\/)/;
-    /**
-     * Tests for a path containing a wildcard character in a directory component of the path.
-     * Matches \*\, \?\, and \a*b\, but not \a\ or \a\*.
-     *
-     * NOTE: used \ in place of / above to avoid issues with multiline comments.
-     *
-     * Breakdown:
-     *  \/          # matches a directory separator.
-     *  [^/]*?      # matches any number of characters excluding directory separators (non-greedy).
-     *  [*?]        # matches either a wildcard character (* or ?)
-     *  [^/]*       # matches any number of characters excluding directory separators (greedy).
-     *  \/          # matches a directory separator.
-     */
-    var watchRecursivePattern = /\/[^/]*?[*?][^/]*\//;
-    /**
      * Matches the portion of a wildcard path that does not contain wildcards.
      * Matches \a of \a\*, or \a\b\c of \a\b\c\?\d.
      *
@@ -39740,7 +40693,7 @@
         // via wildcard of *.json kind
         var wildCardJsonFileMap = new ts.Map();
         var validatedFilesSpec = configFileSpecs.validatedFilesSpec, validatedIncludeSpecs = configFileSpecs.validatedIncludeSpecs, validatedExcludeSpecs = configFileSpecs.validatedExcludeSpecs;
-        // Rather than requery this for each file and filespec, we query the supported extensions
+        // Rather than re-query this for each file and filespec, we query the supported extensions
         // once and store it on the expansion context.
         var supportedExtensions = ts.getSupportedExtensions(options, extraFileExtensions);
         var supportedExtensionsWithJsonIfResolveJsonModule = ts.getSuppoertedExtensionsWithJsonIfResolveJsonModule(options, supportedExtensions);
@@ -39818,9 +40771,22 @@
         return matchesExcludeWorker(pathToCheck, validatedExcludeSpecs, useCaseSensitiveFileNames, currentDirectory, basePath);
     }
     ts.isExcludedFile = isExcludedFile;
+    function invalidDotDotAfterRecursiveWildcard(s) {
+        // We used to use the regex /(^|\/)\*\*\/(.*\/)?\.\.($|\/)/ to check for this case, but
+        // in v8, that has polynomial performance because the recursive wildcard match - **/ -
+        // can be matched in many arbitrary positions when multiple are present, resulting
+        // in bad backtracking (and we don't care which is matched - just that some /.. segment
+        // comes after some **/ segment).
+        var wildcardIndex = ts.startsWith(s, "**/") ? 0 : s.indexOf("/**/");
+        if (wildcardIndex === -1) {
+            return false;
+        }
+        var lastDotIndex = ts.endsWith(s, "/..") ? s.length : s.lastIndexOf("/../");
+        return lastDotIndex > wildcardIndex;
+    }
     /* @internal */
     function matchesExclude(pathToCheck, excludeSpecs, useCaseSensitiveFileNames, currentDirectory) {
-        return matchesExcludeWorker(pathToCheck, ts.filter(excludeSpecs, function (spec) { return !invalidDotDotAfterRecursiveWildcardPattern.test(spec); }), useCaseSensitiveFileNames, currentDirectory);
+        return matchesExcludeWorker(pathToCheck, ts.filter(excludeSpecs, function (spec) { return !invalidDotDotAfterRecursiveWildcard(spec); }), useCaseSensitiveFileNames, currentDirectory);
     }
     ts.matchesExclude = matchesExclude;
     function matchesExcludeWorker(pathToCheck, excludeSpecs, useCaseSensitiveFileNames, currentDirectory, basePath) {
@@ -39853,7 +40819,7 @@
         if (disallowTrailingRecursion && invalidTrailingRecursionPattern.test(spec)) {
             return [ts.Diagnostics.File_specification_cannot_end_in_a_recursive_directory_wildcard_Asterisk_Asterisk_Colon_0, spec];
         }
-        else if (invalidDotDotAfterRecursiveWildcardPattern.test(spec)) {
+        else if (invalidDotDotAfterRecursiveWildcard(spec)) {
             return [ts.Diagnostics.File_specification_cannot_contain_a_parent_directory_that_appears_after_a_recursive_directory_wildcard_Asterisk_Asterisk_Colon_0, spec];
         }
     }
@@ -39914,9 +40880,18 @@
     function getWildcardDirectoryFromSpec(spec, useCaseSensitiveFileNames) {
         var match = wildcardDirectoryPattern.exec(spec);
         if (match) {
+            // We check this with a few `indexOf` calls because 3 `indexOf`/`lastIndexOf` calls is
+            // less algorithmically complex (roughly O(3n) worst-case) than the regex we used to use,
+            // \/[^/]*?[*?][^/]*\/ which was polynominal in v8, since arbitrary sequences of wildcard
+            // characters could match any of the central patterns, resulting in bad backtracking.
+            var questionWildcardIndex = spec.indexOf("?");
+            var starWildcardIndex = spec.indexOf("*");
+            var lastDirectorySeperatorIndex = spec.lastIndexOf(ts.directorySeparator);
             return {
                 key: useCaseSensitiveFileNames ? match[0] : ts.toFileNameLowerCase(match[0]),
-                flags: watchRecursivePattern.test(spec) ? 1 /* Recursive */ : 0 /* None */
+                flags: (questionWildcardIndex !== -1 && questionWildcardIndex < lastDirectorySeperatorIndex)
+                    || (starWildcardIndex !== -1 && starWildcardIndex < lastDirectorySeperatorIndex)
+                    ? 1 /* Recursive */ : 0 /* None */
             };
         }
         if (ts.isImplicitGlob(spec)) {
@@ -40421,7 +41396,7 @@
     ts.createCacheWithRedirects = createCacheWithRedirects;
     function createPackageJsonInfoCache(currentDirectory, getCanonicalFileName) {
         var cache;
-        return { getPackageJsonInfo: getPackageJsonInfo, setPackageJsonInfo: setPackageJsonInfo, clear: clear };
+        return { getPackageJsonInfo: getPackageJsonInfo, setPackageJsonInfo: setPackageJsonInfo, clear: clear, entries: entries };
         function getPackageJsonInfo(packageJsonPath) {
             return cache === null || cache === void 0 ? void 0 : cache.get(ts.toPath(packageJsonPath, currentDirectory, getCanonicalFileName));
         }
@@ -40431,6 +41406,10 @@
         function clear() {
             cache = undefined;
         }
+        function entries() {
+            var iter = cache === null || cache === void 0 ? void 0 : cache.entries();
+            return iter ? ts.arrayFrom(iter) : [];
+        }
     }
     function getOrCreateCache(cacheWithRedirects, redirectedReference, key, create) {
         var cache = cacheWithRedirects.getOrCreateMapOfCacheRedirects(redirectedReference);
@@ -40724,7 +41703,8 @@
         }
     }
     function tryLoadModuleUsingPathsIfEligible(extensions, moduleName, loader, state) {
-        var _a = state.compilerOptions, baseUrl = _a.baseUrl, paths = _a.paths;
+        var _a;
+        var _b = state.compilerOptions, baseUrl = _b.baseUrl, paths = _b.paths, configFile = _b.configFile;
         if (paths && !ts.pathIsRelative(moduleName)) {
             if (state.traceEnabled) {
                 if (baseUrl) {
@@ -40733,7 +41713,8 @@
                 trace(state.host, ts.Diagnostics.paths_option_is_specified_looking_for_a_pattern_to_match_module_name_0, moduleName);
             }
             var baseDirectory = ts.getPathsBasePath(state.compilerOptions, state.host); // Always defined when 'paths' is defined
-            return tryLoadModuleUsingPaths(extensions, moduleName, baseDirectory, paths, loader, /*onlyRecordFailures*/ false, state);
+            var pathPatterns = (configFile === null || configFile === void 0 ? void 0 : configFile.configFileSpecs) ? (_a = configFile.configFileSpecs).pathPatterns || (_a.pathPatterns = ts.tryParsePatterns(paths)) : undefined;
+            return tryLoadModuleUsingPaths(extensions, moduleName, baseDirectory, paths, pathPatterns, loader, /*onlyRecordFailures*/ false, state);
         }
     }
     function tryLoadModuleUsingRootDirs(extensions, moduleName, containingDirectory, loader, state) {
@@ -40840,7 +41821,7 @@
     ts.tryResolveJSModule = tryResolveJSModule;
     var jsOnlyExtensions = [Extensions.JavaScript];
     var tsExtensions = [Extensions.TypeScript, Extensions.JavaScript];
-    var tsPlusJsonExtensions = __spreadArray(__spreadArray([], tsExtensions), [Extensions.Json]);
+    var tsPlusJsonExtensions = __spreadArray(__spreadArray([], tsExtensions, true), [Extensions.Json], false);
     var tsconfigExtensions = [Extensions.TSConfig];
     function tryResolveJSModuleWorker(moduleName, initialDir, host) {
         return nodeModuleNameResolverWorker(moduleName, initialDir, { moduleResolution: ts.ModuleResolutionKind.NodeJs, allowJs: true }, host, /*cache*/ undefined, jsOnlyExtensions, /*redirectedReferences*/ undefined);
@@ -41131,7 +42112,7 @@
             if (state.traceEnabled) {
                 trace(state.host, ts.Diagnostics.package_json_has_a_typesVersions_entry_0_that_matches_compiler_version_1_looking_for_a_pattern_to_match_module_name_2, versionPaths.version, ts.version, moduleName);
             }
-            var result = tryLoadModuleUsingPaths(extensions, moduleName, candidate, versionPaths.paths, loader, onlyRecordFailuresForPackageFile || onlyRecordFailuresForIndex, state);
+            var result = tryLoadModuleUsingPaths(extensions, moduleName, candidate, versionPaths.paths, /*pathPatterns*/ undefined, loader, onlyRecordFailuresForPackageFile || onlyRecordFailuresForIndex, state);
             if (result) {
                 return removeIgnoredPackageId(result.value);
             }
@@ -41238,7 +42219,7 @@
                     trace(state.host, ts.Diagnostics.package_json_has_a_typesVersions_entry_0_that_matches_compiler_version_1_looking_for_a_pattern_to_match_module_name_2, packageInfo.versionPaths.version, ts.version, rest);
                 }
                 var packageDirectoryExists = nodeModulesDirectoryExists && ts.directoryProbablyExists(packageDirectory, state.host);
-                var fromPaths = tryLoadModuleUsingPaths(extensions, rest, packageDirectory, packageInfo.versionPaths.paths, loader, !packageDirectoryExists, state);
+                var fromPaths = tryLoadModuleUsingPaths(extensions, rest, packageDirectory, packageInfo.versionPaths.paths, /*pathPatterns*/ undefined, loader, !packageDirectoryExists, state);
                 if (fromPaths) {
                     return fromPaths.value;
                 }
@@ -41246,8 +42227,9 @@
         }
         return loader(extensions, candidate, !nodeModulesDirectoryExists, state);
     }
-    function tryLoadModuleUsingPaths(extensions, moduleName, baseDirectory, paths, loader, onlyRecordFailures, state) {
-        var matchedPattern = ts.matchPatternOrExact(ts.getOwnKeys(paths), moduleName);
+    function tryLoadModuleUsingPaths(extensions, moduleName, baseDirectory, paths, pathPatterns, loader, onlyRecordFailures, state) {
+        pathPatterns || (pathPatterns = ts.tryParsePatterns(paths));
+        var matchedPattern = ts.matchPatternOrExact(pathPatterns, moduleName);
         if (matchedPattern) {
             var matchedStar_1 = ts.isString(matchedPattern) ? undefined : ts.matchedText(matchedPattern, moduleName);
             var matchedPatternText = ts.isString(matchedPattern) ? matchedPattern : ts.patternText(matchedPattern);
@@ -41422,26 +42404,26 @@
         // A module is uninstantiated if it contains only
         switch (node.kind) {
             // 1. interface declarations, type alias declarations
-            case 254 /* InterfaceDeclaration */:
-            case 255 /* TypeAliasDeclaration */:
+            case 256 /* InterfaceDeclaration */:
+            case 257 /* TypeAliasDeclaration */:
                 return 0 /* NonInstantiated */;
             // 2. const enum declarations
-            case 256 /* EnumDeclaration */:
+            case 258 /* EnumDeclaration */:
                 if (ts.isEnumConst(node)) {
                     return 2 /* ConstEnumOnly */;
                 }
                 break;
             // 3. non-exported import declarations
-            case 262 /* ImportDeclaration */:
-            case 261 /* ImportEqualsDeclaration */:
+            case 264 /* ImportDeclaration */:
+            case 263 /* ImportEqualsDeclaration */:
                 if (!(ts.hasSyntacticModifier(node, 1 /* Export */))) {
                     return 0 /* NonInstantiated */;
                 }
                 break;
             // 4. Export alias declarations pointing at only uninstantiated modules or things uninstantiated modules contain
-            case 268 /* ExportDeclaration */:
+            case 270 /* ExportDeclaration */:
                 var exportDeclaration = node;
-                if (!exportDeclaration.moduleSpecifier && exportDeclaration.exportClause && exportDeclaration.exportClause.kind === 269 /* NamedExports */) {
+                if (!exportDeclaration.moduleSpecifier && exportDeclaration.exportClause && exportDeclaration.exportClause.kind === 271 /* NamedExports */) {
                     var state = 0 /* NonInstantiated */;
                     for (var _i = 0, _a = exportDeclaration.exportClause.elements; _i < _a.length; _i++) {
                         var specifier = _a[_i];
@@ -41457,7 +42439,7 @@
                 }
                 break;
             // 5. other uninstantiated module declarations.
-            case 258 /* ModuleBlock */: {
+            case 260 /* ModuleBlock */: {
                 var state_1 = 0 /* NonInstantiated */;
                 ts.forEachChild(node, function (n) {
                     var childState = getModuleInstanceStateCached(n, visited);
@@ -41479,9 +42461,9 @@
                 });
                 return state_1;
             }
-            case 257 /* ModuleDeclaration */:
+            case 259 /* ModuleDeclaration */:
                 return getModuleInstanceState(node, visited);
-            case 78 /* Identifier */:
+            case 79 /* Identifier */:
                 // Only jsdoc typedef definition can exist in jsdoc namespace, and it should
                 // be considered the same as type alias
                 if (node.isInJSDocNamespace) {
@@ -41680,7 +42662,7 @@
         // Should not be called on a declaration with a computed property name,
         // unless it is a well known Symbol.
         function getDeclarationName(node) {
-            if (node.kind === 267 /* ExportAssignment */) {
+            if (node.kind === 269 /* ExportAssignment */) {
                 return node.isExportEquals ? "export=" /* ExportEquals */ : "default" /* Default */;
             }
             var name = ts.getNameOfDeclaration(node);
@@ -41689,7 +42671,7 @@
                     var moduleName = ts.getTextOfIdentifierOrLiteral(name);
                     return (ts.isGlobalScopeAugmentation(node) ? "__global" : "\"" + moduleName + "\"");
                 }
-                if (name.kind === 159 /* ComputedPropertyName */) {
+                if (name.kind === 160 /* ComputedPropertyName */) {
                     var nameExpression = name.expression;
                     // treat computed property names where expression is string/numeric literal as just string/numeric literal
                     if (ts.isStringOrNumericLiteralLike(nameExpression)) {
@@ -41715,36 +42697,36 @@
                 return ts.isPropertyNameLiteral(name) ? ts.getEscapedTextOfIdentifierOrLiteral(name) : undefined;
             }
             switch (node.kind) {
-                case 167 /* Constructor */:
+                case 169 /* Constructor */:
                     return "__constructor" /* Constructor */;
-                case 175 /* FunctionType */:
-                case 170 /* CallSignature */:
-                case 315 /* JSDocSignature */:
+                case 177 /* FunctionType */:
+                case 172 /* CallSignature */:
+                case 318 /* JSDocSignature */:
                     return "__call" /* Call */;
-                case 176 /* ConstructorType */:
-                case 171 /* ConstructSignature */:
+                case 178 /* ConstructorType */:
+                case 173 /* ConstructSignature */:
                     return "__new" /* New */;
-                case 172 /* IndexSignature */:
+                case 174 /* IndexSignature */:
                     return "__index" /* Index */;
-                case 268 /* ExportDeclaration */:
+                case 270 /* ExportDeclaration */:
                     return "__export" /* ExportStar */;
-                case 298 /* SourceFile */:
+                case 300 /* SourceFile */:
                     // json file should behave as
                     // module.exports = ...
                     return "export=" /* ExportEquals */;
-                case 217 /* BinaryExpression */:
+                case 219 /* BinaryExpression */:
                     if (ts.getAssignmentDeclarationKind(node) === 2 /* ModuleExports */) {
                         // module.exports = ...
                         return "export=" /* ExportEquals */;
                     }
                     ts.Debug.fail("Unknown binary declaration kind");
                     break;
-                case 309 /* JSDocFunctionType */:
+                case 312 /* JSDocFunctionType */:
                     return (ts.isJSDocConstructSignature(node) ? "__new" /* New */ : "__call" /* Call */);
-                case 161 /* Parameter */:
+                case 162 /* Parameter */:
                     // Parameters with names are handled at the top of this function.  Parameters
                     // without names can only come from JSDocFunctionTypes.
-                    ts.Debug.assert(node.parent.kind === 309 /* JSDocFunctionType */, "Impossible parameter parent kind", function () { return "parent is: " + (ts.SyntaxKind ? ts.SyntaxKind[node.parent.kind] : node.parent.kind) + ", expected JSDocFunctionType"; });
+                    ts.Debug.assert(node.parent.kind === 312 /* JSDocFunctionType */, "Impossible parameter parent kind", function () { return "parent is: " + (ts.SyntaxKind ? ts.SyntaxKind[node.parent.kind] : node.parent.kind) + ", expected JSDocFunctionType"; });
                     var functionType = node.parent;
                     var index = functionType.parameters.indexOf(node);
                     return "arg" + index;
@@ -41761,11 +42743,13 @@
          * @param includes - The SymbolFlags that node has in addition to its declaration type (eg: export, ambient, etc.)
          * @param excludes - The flags which node cannot be declared alongside in a symbol table. Used to report forbidden declarations.
          */
-        function declareSymbol(symbolTable, parent, node, includes, excludes, isReplaceableByMethod) {
-            ts.Debug.assert(!ts.hasDynamicName(node));
+        function declareSymbol(symbolTable, parent, node, includes, excludes, isReplaceableByMethod, isComputedName) {
+            ts.Debug.assert(isComputedName || !ts.hasDynamicName(node));
             var isDefaultExport = ts.hasSyntacticModifier(node, 512 /* Default */) || ts.isExportSpecifier(node) && node.name.escapedText === "default";
             // The exported symbol for an export default function/class node is always named "default"
-            var name = isDefaultExport && parent ? "default" /* Default */ : getDeclarationName(node);
+            var name = isComputedName ? "__computed" /* Computed */
+                : isDefaultExport && parent ? "default" /* Default */
+                    : getDeclarationName(node);
             var symbol;
             if (name === undefined) {
                 symbol = createSymbol(0 /* None */, "__missing" /* Missing */);
@@ -41844,7 +42828,7 @@
                                 // 1. multiple export default of class declaration or function declaration by checking NodeFlags.Default
                                 // 2. multiple export default of export assignment. This one doesn't have NodeFlags.Default on (as export default doesn't considered as modifiers)
                                 if (symbol.declarations && symbol.declarations.length &&
-                                    (node.kind === 267 /* ExportAssignment */ && !node.isExportEquals)) {
+                                    (node.kind === 269 /* ExportAssignment */ && !node.isExportEquals)) {
                                     message_1 = ts.Diagnostics.A_module_cannot_have_multiple_default_exports;
                                     messageNeedsName_1 = false;
                                     multipleDefaultExports_1 = true;
@@ -41866,7 +42850,7 @@
                             }
                         });
                         var diag = createDiagnosticForNode(declarationName_1, message_1, messageNeedsName_1 ? getDisplayName(node) : undefined);
-                        file.bindDiagnostics.push(ts.addRelatedInfo.apply(void 0, __spreadArray([diag], relatedInformation_1)));
+                        file.bindDiagnostics.push(ts.addRelatedInfo.apply(void 0, __spreadArray([diag], relatedInformation_1, false)));
                         symbol = createSymbol(0 /* None */, name);
                     }
                 }
@@ -41883,7 +42867,7 @@
         function declareModuleMember(node, symbolFlags, symbolExcludes) {
             var hasExportModifier = !!(ts.getCombinedModifierFlags(node) & 1 /* Export */) || jsdocTreatAsExported(node);
             if (symbolFlags & 2097152 /* Alias */) {
-                if (node.kind === 271 /* ExportSpecifier */ || (node.kind === 261 /* ImportEqualsDeclaration */ && hasExportModifier)) {
+                if (node.kind === 273 /* ExportSpecifier */ || (node.kind === 263 /* ImportEqualsDeclaration */ && hasExportModifier)) {
                     return declareSymbol(container.symbol.exports, container.symbol, node, symbolFlags, symbolExcludes);
                 }
                 else {
@@ -41972,7 +42956,7 @@
             // for it.  We must clear this so we don't accidentally move any stale data forward from
             // a previous compilation.
             if (containerFlags & 1 /* IsContainer */) {
-                if (node.kind !== 210 /* ArrowFunction */) {
+                if (node.kind !== 212 /* ArrowFunction */) {
                     thisParentContainer = container;
                 }
                 container = blockScopeContainer = node;
@@ -42005,7 +42989,7 @@
                 }
                 // We create a return control flow graph for IIFEs and constructors. For constructors
                 // we use the return control flow graph in strict property initialization checks.
-                currentReturnTarget = isIIFE || node.kind === 167 /* Constructor */ || (ts.isInJSFile(node) && (node.kind === 252 /* FunctionDeclaration */ || node.kind === 209 /* FunctionExpression */)) ? createBranchLabel() : undefined;
+                currentReturnTarget = isIIFE || node.kind === 169 /* Constructor */ || node.kind === 168 /* ClassStaticBlockDeclaration */ || (ts.isInJSFile(node) && (node.kind === 254 /* FunctionDeclaration */ || node.kind === 211 /* FunctionExpression */)) ? createBranchLabel() : undefined;
                 currentExceptionTarget = undefined;
                 currentBreakTarget = undefined;
                 currentContinueTarget = undefined;
@@ -42020,14 +43004,14 @@
                         node.flags |= 512 /* HasExplicitReturn */;
                     node.endFlowNode = currentFlow;
                 }
-                if (node.kind === 298 /* SourceFile */) {
+                if (node.kind === 300 /* SourceFile */) {
                     node.flags |= emitFlags;
                     node.endFlowNode = currentFlow;
                 }
                 if (currentReturnTarget) {
                     addAntecedent(currentReturnTarget, currentFlow);
                     currentFlow = finishFlowLabel(currentReturnTarget);
-                    if (node.kind === 167 /* Constructor */ || (ts.isInJSFile(node) && (node.kind === 252 /* FunctionDeclaration */ || node.kind === 209 /* FunctionExpression */))) {
+                    if (node.kind === 169 /* Constructor */ || node.kind === 168 /* ClassStaticBlockDeclaration */ || (ts.isInJSFile(node) && (node.kind === 254 /* FunctionDeclaration */ || node.kind === 211 /* FunctionExpression */))) {
                         node.returnFlowNode = currentFlow;
                     }
                 }
@@ -42054,8 +43038,8 @@
             blockScopeContainer = savedBlockScopeContainer;
         }
         function bindEachFunctionsFirst(nodes) {
-            bindEach(nodes, function (n) { return n.kind === 252 /* FunctionDeclaration */ ? bind(n) : undefined; });
-            bindEach(nodes, function (n) { return n.kind !== 252 /* FunctionDeclaration */ ? bind(n) : undefined; });
+            bindEach(nodes, function (n) { return n.kind === 254 /* FunctionDeclaration */ ? bind(n) : undefined; });
+            bindEach(nodes, function (n) { return n.kind !== 254 /* FunctionDeclaration */ ? bind(n) : undefined; });
         }
         function bindEach(nodes, bindFunction) {
             if (bindFunction === void 0) { bindFunction = bind; }
@@ -42078,59 +43062,59 @@
                 inAssignmentPattern = saveInAssignmentPattern;
                 return;
             }
-            if (node.kind >= 233 /* FirstStatement */ && node.kind <= 249 /* LastStatement */ && !options.allowUnreachableCode) {
+            if (node.kind >= 235 /* FirstStatement */ && node.kind <= 251 /* LastStatement */ && !options.allowUnreachableCode) {
                 node.flowNode = currentFlow;
             }
             switch (node.kind) {
-                case 237 /* WhileStatement */:
+                case 239 /* WhileStatement */:
                     bindWhileStatement(node);
                     break;
-                case 236 /* DoStatement */:
+                case 238 /* DoStatement */:
                     bindDoStatement(node);
                     break;
-                case 238 /* ForStatement */:
+                case 240 /* ForStatement */:
                     bindForStatement(node);
                     break;
-                case 239 /* ForInStatement */:
-                case 240 /* ForOfStatement */:
+                case 241 /* ForInStatement */:
+                case 242 /* ForOfStatement */:
                     bindForInOrForOfStatement(node);
                     break;
-                case 235 /* IfStatement */:
+                case 237 /* IfStatement */:
                     bindIfStatement(node);
                     break;
-                case 243 /* ReturnStatement */:
-                case 247 /* ThrowStatement */:
+                case 245 /* ReturnStatement */:
+                case 249 /* ThrowStatement */:
                     bindReturnOrThrow(node);
                     break;
-                case 242 /* BreakStatement */:
-                case 241 /* ContinueStatement */:
+                case 244 /* BreakStatement */:
+                case 243 /* ContinueStatement */:
                     bindBreakOrContinueStatement(node);
                     break;
-                case 248 /* TryStatement */:
+                case 250 /* TryStatement */:
                     bindTryStatement(node);
                     break;
-                case 245 /* SwitchStatement */:
+                case 247 /* SwitchStatement */:
                     bindSwitchStatement(node);
                     break;
-                case 259 /* CaseBlock */:
+                case 261 /* CaseBlock */:
                     bindCaseBlock(node);
                     break;
-                case 285 /* CaseClause */:
+                case 287 /* CaseClause */:
                     bindCaseClause(node);
                     break;
-                case 234 /* ExpressionStatement */:
+                case 236 /* ExpressionStatement */:
                     bindExpressionStatement(node);
                     break;
-                case 246 /* LabeledStatement */:
+                case 248 /* LabeledStatement */:
                     bindLabeledStatement(node);
                     break;
-                case 215 /* PrefixUnaryExpression */:
+                case 217 /* PrefixUnaryExpression */:
                     bindPrefixUnaryExpressionFlow(node);
                     break;
-                case 216 /* PostfixUnaryExpression */:
+                case 218 /* PostfixUnaryExpression */:
                     bindPostfixUnaryExpressionFlow(node);
                     break;
-                case 217 /* BinaryExpression */:
+                case 219 /* BinaryExpression */:
                     if (ts.isDestructuringAssignment(node)) {
                         // Carry over whether we are in an assignment pattern to
                         // binary expressions that could actually be an initializer
@@ -42140,47 +43124,47 @@
                     }
                     bindBinaryExpressionFlow(node);
                     break;
-                case 211 /* DeleteExpression */:
+                case 213 /* DeleteExpression */:
                     bindDeleteExpressionFlow(node);
                     break;
-                case 218 /* ConditionalExpression */:
+                case 220 /* ConditionalExpression */:
                     bindConditionalExpressionFlow(node);
                     break;
-                case 250 /* VariableDeclaration */:
+                case 252 /* VariableDeclaration */:
                     bindVariableDeclarationFlow(node);
                     break;
-                case 202 /* PropertyAccessExpression */:
-                case 203 /* ElementAccessExpression */:
+                case 204 /* PropertyAccessExpression */:
+                case 205 /* ElementAccessExpression */:
                     bindAccessExpressionFlow(node);
                     break;
-                case 204 /* CallExpression */:
+                case 206 /* CallExpression */:
                     bindCallExpressionFlow(node);
                     break;
-                case 226 /* NonNullExpression */:
+                case 228 /* NonNullExpression */:
                     bindNonNullExpressionFlow(node);
                     break;
-                case 335 /* JSDocTypedefTag */:
-                case 328 /* JSDocCallbackTag */:
-                case 329 /* JSDocEnumTag */:
+                case 340 /* JSDocTypedefTag */:
+                case 333 /* JSDocCallbackTag */:
+                case 334 /* JSDocEnumTag */:
                     bindJSDocTypeAlias(node);
                     break;
                 // In source files and blocks, bind functions first to match hoisting that occurs at runtime
-                case 298 /* SourceFile */: {
+                case 300 /* SourceFile */: {
                     bindEachFunctionsFirst(node.statements);
                     bind(node.endOfFileToken);
                     break;
                 }
-                case 231 /* Block */:
-                case 258 /* ModuleBlock */:
+                case 233 /* Block */:
+                case 260 /* ModuleBlock */:
                     bindEachFunctionsFirst(node.statements);
                     break;
-                case 199 /* BindingElement */:
+                case 201 /* BindingElement */:
                     bindBindingElementFlow(node);
                     break;
-                case 201 /* ObjectLiteralExpression */:
-                case 200 /* ArrayLiteralExpression */:
-                case 289 /* PropertyAssignment */:
-                case 221 /* SpreadElement */:
+                case 203 /* ObjectLiteralExpression */:
+                case 202 /* ArrayLiteralExpression */:
+                case 291 /* PropertyAssignment */:
+                case 223 /* SpreadElement */:
                     // Carry over whether we are in an assignment pattern of Object and Array literals
                     // as well as their children that are valid assignment targets.
                     inAssignmentPattern = saveInAssignmentPattern;
@@ -42194,22 +43178,22 @@
         }
         function isNarrowingExpression(expr) {
             switch (expr.kind) {
-                case 78 /* Identifier */:
-                case 79 /* PrivateIdentifier */:
-                case 107 /* ThisKeyword */:
-                case 202 /* PropertyAccessExpression */:
-                case 203 /* ElementAccessExpression */:
+                case 79 /* Identifier */:
+                case 80 /* PrivateIdentifier */:
+                case 108 /* ThisKeyword */:
+                case 204 /* PropertyAccessExpression */:
+                case 205 /* ElementAccessExpression */:
                     return containsNarrowableReference(expr);
-                case 204 /* CallExpression */:
+                case 206 /* CallExpression */:
                     return hasNarrowableArgument(expr);
-                case 208 /* ParenthesizedExpression */:
-                case 226 /* NonNullExpression */:
+                case 210 /* ParenthesizedExpression */:
+                case 228 /* NonNullExpression */:
                     return isNarrowingExpression(expr.expression);
-                case 217 /* BinaryExpression */:
+                case 219 /* BinaryExpression */:
                     return isNarrowingBinaryExpression(expr);
-                case 215 /* PrefixUnaryExpression */:
+                case 217 /* PrefixUnaryExpression */:
                     return expr.operator === 53 /* ExclamationToken */ && isNarrowingExpression(expr.operand);
-                case 212 /* TypeOfExpression */:
+                case 214 /* TypeOfExpression */:
                     return isNarrowingExpression(expr.expression);
             }
             return false;
@@ -42233,7 +43217,7 @@
                     }
                 }
             }
-            if (expr.expression.kind === 202 /* PropertyAccessExpression */ &&
+            if (expr.expression.kind === 204 /* PropertyAccessExpression */ &&
                 containsNarrowableReference(expr.expression.expression)) {
                 return true;
             }
@@ -42242,15 +43226,12 @@
         function isNarrowingTypeofOperands(expr1, expr2) {
             return ts.isTypeOfExpression(expr1) && isNarrowableOperand(expr1.expression) && ts.isStringLiteralLike(expr2);
         }
-        function isNarrowableInOperands(left, right) {
-            return ts.isStringLiteralLike(left) && isNarrowingExpression(right);
-        }
         function isNarrowingBinaryExpression(expr) {
             switch (expr.operatorToken.kind) {
-                case 62 /* EqualsToken */:
-                case 74 /* BarBarEqualsToken */:
-                case 75 /* AmpersandAmpersandEqualsToken */:
-                case 76 /* QuestionQuestionEqualsToken */:
+                case 63 /* EqualsToken */:
+                case 75 /* BarBarEqualsToken */:
+                case 76 /* AmpersandAmpersandEqualsToken */:
+                case 77 /* QuestionQuestionEqualsToken */:
                     return containsNarrowableReference(expr.left);
                 case 34 /* EqualsEqualsToken */:
                 case 35 /* ExclamationEqualsToken */:
@@ -42258,10 +43239,10 @@
                 case 37 /* ExclamationEqualsEqualsToken */:
                     return isNarrowableOperand(expr.left) || isNarrowableOperand(expr.right) ||
                         isNarrowingTypeofOperands(expr.right, expr.left) || isNarrowingTypeofOperands(expr.left, expr.right);
-                case 101 /* InstanceOfKeyword */:
+                case 102 /* InstanceOfKeyword */:
                     return isNarrowableOperand(expr.left);
-                case 100 /* InKeyword */:
-                    return isNarrowableInOperands(expr.left, expr.right);
+                case 101 /* InKeyword */:
+                    return isNarrowingExpression(expr.right);
                 case 27 /* CommaToken */:
                     return isNarrowingExpression(expr.right);
             }
@@ -42269,11 +43250,11 @@
         }
         function isNarrowableOperand(expr) {
             switch (expr.kind) {
-                case 208 /* ParenthesizedExpression */:
+                case 210 /* ParenthesizedExpression */:
                     return isNarrowableOperand(expr.expression);
-                case 217 /* BinaryExpression */:
+                case 219 /* BinaryExpression */:
                     switch (expr.operatorToken.kind) {
-                        case 62 /* EqualsToken */:
+                        case 63 /* EqualsToken */:
                             return isNarrowableOperand(expr.left);
                         case 27 /* CommaToken */:
                             return isNarrowableOperand(expr.right);
@@ -42307,8 +43288,8 @@
             if (!expression) {
                 return flags & 32 /* TrueCondition */ ? antecedent : unreachableFlow;
             }
-            if ((expression.kind === 109 /* TrueKeyword */ && flags & 64 /* FalseCondition */ ||
-                expression.kind === 94 /* FalseKeyword */ && flags & 32 /* TrueCondition */) &&
+            if ((expression.kind === 110 /* TrueKeyword */ && flags & 64 /* FalseCondition */ ||
+                expression.kind === 95 /* FalseKeyword */ && flags & 32 /* TrueCondition */) &&
                 !ts.isExpressionOfOptionalChainRoot(expression) && !ts.isNullishCoalesce(expression.parent)) {
                 return unreachableFlow;
             }
@@ -42347,26 +43328,26 @@
         function isStatementCondition(node) {
             var parent = node.parent;
             switch (parent.kind) {
-                case 235 /* IfStatement */:
-                case 237 /* WhileStatement */:
-                case 236 /* DoStatement */:
+                case 237 /* IfStatement */:
+                case 239 /* WhileStatement */:
+                case 238 /* DoStatement */:
                     return parent.expression === node;
-                case 238 /* ForStatement */:
-                case 218 /* ConditionalExpression */:
+                case 240 /* ForStatement */:
+                case 220 /* ConditionalExpression */:
                     return parent.condition === node;
             }
             return false;
         }
         function isLogicalExpression(node) {
             while (true) {
-                if (node.kind === 208 /* ParenthesizedExpression */) {
+                if (node.kind === 210 /* ParenthesizedExpression */) {
                     node = node.expression;
                 }
-                else if (node.kind === 215 /* PrefixUnaryExpression */ && node.operator === 53 /* ExclamationToken */) {
+                else if (node.kind === 217 /* PrefixUnaryExpression */ && node.operator === 53 /* ExclamationToken */) {
                     node = node.operand;
                 }
                 else {
-                    return node.kind === 217 /* BinaryExpression */ && (node.operatorToken.kind === 55 /* AmpersandAmpersandToken */ ||
+                    return node.kind === 219 /* BinaryExpression */ && (node.operatorToken.kind === 55 /* AmpersandAmpersandToken */ ||
                         node.operatorToken.kind === 56 /* BarBarToken */ ||
                         node.operatorToken.kind === 60 /* QuestionQuestionToken */);
                 }
@@ -42413,7 +43394,7 @@
         }
         function setContinueTarget(node, target) {
             var label = activeLabelList;
-            while (label && node.parent.kind === 246 /* LabeledStatement */) {
+            while (label && node.parent.kind === 248 /* LabeledStatement */) {
                 label.continueTarget = target;
                 label = label.next;
                 node = node.parent;
@@ -42464,12 +43445,12 @@
             bind(node.expression);
             addAntecedent(preLoopLabel, currentFlow);
             currentFlow = preLoopLabel;
-            if (node.kind === 240 /* ForOfStatement */) {
+            if (node.kind === 242 /* ForOfStatement */) {
                 bind(node.awaitModifier);
             }
             addAntecedent(postLoopLabel, currentFlow);
             bind(node.initializer);
-            if (node.initializer.kind !== 251 /* VariableDeclarationList */) {
+            if (node.initializer.kind !== 253 /* VariableDeclarationList */) {
                 bindAssignmentTargetFlow(node.initializer);
             }
             bindIterativeStatement(node.statement, postLoopLabel, preLoopLabel);
@@ -42491,7 +43472,7 @@
         }
         function bindReturnOrThrow(node) {
             bind(node.expression);
-            if (node.kind === 243 /* ReturnStatement */) {
+            if (node.kind === 245 /* ReturnStatement */) {
                 hasExplicitReturn = true;
                 if (currentReturnTarget) {
                     addAntecedent(currentReturnTarget, currentFlow);
@@ -42508,7 +43489,7 @@
             return undefined;
         }
         function bindBreakOrContinueFlow(node, breakTarget, continueTarget) {
-            var flowLabel = node.kind === 242 /* BreakStatement */ ? breakTarget : continueTarget;
+            var flowLabel = node.kind === 244 /* BreakStatement */ ? breakTarget : continueTarget;
             if (flowLabel) {
                 addAntecedent(flowLabel, currentFlow);
                 currentFlow = unreachableFlow;
@@ -42613,7 +43594,7 @@
             preSwitchCaseFlow = currentFlow;
             bind(node.caseBlock);
             addAntecedent(postSwitchLabel, currentFlow);
-            var hasDefault = ts.forEach(node.caseBlock.clauses, function (c) { return c.kind === 286 /* DefaultClause */; });
+            var hasDefault = ts.forEach(node.caseBlock.clauses, function (c) { return c.kind === 288 /* DefaultClause */; });
             // We mark a switch statement as possibly exhaustive if it has no default clause and if all
             // case clauses have unreachable end points (e.g. they all return). Note, we no longer need
             // this property in control flow analysis, it's there only for backwards compatibility.
@@ -42661,9 +43642,9 @@
         function maybeBindExpressionFlowIfCall(node) {
             // A top level or LHS of comma expression call expression with a dotted function name and at least one argument
             // is potentially an assertion and is therefore included in the control flow.
-            if (node.kind === 204 /* CallExpression */) {
+            if (node.kind === 206 /* CallExpression */) {
                 var call = node;
-                if (call.expression.kind !== 105 /* SuperKeyword */ && ts.isDottedName(call.expression)) {
+                if (call.expression.kind !== 106 /* SuperKeyword */ && ts.isDottedName(call.expression)) {
                     currentFlow = createFlowCall(currentFlow, call);
                 }
             }
@@ -42687,7 +43668,7 @@
             currentFlow = finishFlowLabel(postStatementLabel);
         }
         function bindDestructuringTargetFlow(node) {
-            if (node.kind === 217 /* BinaryExpression */ && node.operatorToken.kind === 62 /* EqualsToken */) {
+            if (node.kind === 219 /* BinaryExpression */ && node.operatorToken.kind === 63 /* EqualsToken */) {
                 bindAssignmentTargetFlow(node.left);
             }
             else {
@@ -42698,10 +43679,10 @@
             if (isNarrowableReference(node)) {
                 currentFlow = createFlowMutation(16 /* Assignment */, currentFlow, node);
             }
-            else if (node.kind === 200 /* ArrayLiteralExpression */) {
+            else if (node.kind === 202 /* ArrayLiteralExpression */) {
                 for (var _i = 0, _a = node.elements; _i < _a.length; _i++) {
                     var e = _a[_i];
-                    if (e.kind === 221 /* SpreadElement */) {
+                    if (e.kind === 223 /* SpreadElement */) {
                         bindAssignmentTargetFlow(e.expression);
                     }
                     else {
@@ -42709,16 +43690,16 @@
                     }
                 }
             }
-            else if (node.kind === 201 /* ObjectLiteralExpression */) {
+            else if (node.kind === 203 /* ObjectLiteralExpression */) {
                 for (var _b = 0, _c = node.properties; _b < _c.length; _b++) {
                     var p = _c[_b];
-                    if (p.kind === 289 /* PropertyAssignment */) {
+                    if (p.kind === 291 /* PropertyAssignment */) {
                         bindDestructuringTargetFlow(p.initializer);
                     }
-                    else if (p.kind === 290 /* ShorthandPropertyAssignment */) {
+                    else if (p.kind === 292 /* ShorthandPropertyAssignment */) {
                         bindAssignmentTargetFlow(p.name);
                     }
-                    else if (p.kind === 291 /* SpreadAssignment */) {
+                    else if (p.kind === 293 /* SpreadAssignment */) {
                         bindAssignmentTargetFlow(p.expression);
                     }
                 }
@@ -42726,7 +43707,7 @@
         }
         function bindLogicalLikeExpression(node, trueTarget, falseTarget) {
             var preRightLabel = createBranchLabel();
-            if (node.operatorToken.kind === 55 /* AmpersandAmpersandToken */ || node.operatorToken.kind === 75 /* AmpersandAmpersandEqualsToken */) {
+            if (node.operatorToken.kind === 55 /* AmpersandAmpersandToken */ || node.operatorToken.kind === 76 /* AmpersandAmpersandEqualsToken */) {
                 bindCondition(node.left, preRightLabel, falseTarget);
             }
             else {
@@ -42850,7 +43831,7 @@
                     var operator = node.operatorToken.kind;
                     if (ts.isAssignmentOperator(operator) && !ts.isAssignmentTarget(node)) {
                         bindAssignmentTargetFlow(node.left);
-                        if (operator === 62 /* EqualsToken */ && node.left.kind === 203 /* ElementAccessExpression */) {
+                        if (operator === 63 /* EqualsToken */ && node.left.kind === 205 /* ElementAccessExpression */) {
                             var elementAccess = node.left;
                             if (isNarrowableOperand(elementAccess.expression)) {
                                 currentFlow = createFlowMutation(256 /* ArrayMutation */, currentFlow, node);
@@ -42878,7 +43859,7 @@
         }
         function bindDeleteExpressionFlow(node) {
             bindEachChild(node);
-            if (node.expression.kind === 202 /* PropertyAccessExpression */) {
+            if (node.expression.kind === 204 /* PropertyAccessExpression */) {
                 bindAssignmentTargetFlow(node.expression);
             }
         }
@@ -42934,16 +43915,20 @@
             }
         }
         function bindJSDocTypeAlias(node) {
-            ts.setParent(node.tagName, node);
-            if (node.kind !== 329 /* JSDocEnumTag */ && node.fullName) {
+            bind(node.tagName);
+            if (node.kind !== 334 /* JSDocEnumTag */ && node.fullName) {
+                // don't bind the type name yet; that's delayed until delayedBindJSDocTypedefTag
                 ts.setParent(node.fullName, node);
                 ts.setParentRecursive(node.fullName, /*incremental*/ false);
             }
+            if (typeof node.comment !== "string") {
+                bindEach(node.comment);
+            }
         }
         function bindJSDocClassTag(node) {
             bindEachChild(node);
             var host = ts.getHostSignatureFromJSDoc(node);
-            if (host && host.kind !== 166 /* MethodDeclaration */) {
+            if (host && host.kind !== 167 /* MethodDeclaration */) {
                 addDeclarationToSymbol(host.symbol, host, 32 /* Class */);
             }
         }
@@ -42956,15 +43941,15 @@
         }
         function bindOptionalChainRest(node) {
             switch (node.kind) {
-                case 202 /* PropertyAccessExpression */:
+                case 204 /* PropertyAccessExpression */:
                     bind(node.questionDotToken);
                     bind(node.name);
                     break;
-                case 203 /* ElementAccessExpression */:
+                case 205 /* ElementAccessExpression */:
                     bind(node.questionDotToken);
                     bind(node.argumentExpression);
                     break;
-                case 204 /* CallExpression */:
+                case 206 /* CallExpression */:
                     bind(node.questionDotToken);
                     bindEach(node.typeArguments);
                     bindEach(node.arguments);
@@ -43029,19 +44014,19 @@
                 // an immediately invoked function expression (IIFE). Initialize the flowNode property to
                 // the current control flow (which includes evaluation of the IIFE arguments).
                 var expr = ts.skipParentheses(node.expression);
-                if (expr.kind === 209 /* FunctionExpression */ || expr.kind === 210 /* ArrowFunction */) {
+                if (expr.kind === 211 /* FunctionExpression */ || expr.kind === 212 /* ArrowFunction */) {
                     bindEach(node.typeArguments);
                     bindEach(node.arguments);
                     bind(node.expression);
                 }
                 else {
                     bindEachChild(node);
-                    if (node.expression.kind === 105 /* SuperKeyword */) {
+                    if (node.expression.kind === 106 /* SuperKeyword */) {
                         currentFlow = createFlowCall(currentFlow, node);
                     }
                 }
             }
-            if (node.expression.kind === 202 /* PropertyAccessExpression */) {
+            if (node.expression.kind === 204 /* PropertyAccessExpression */) {
                 var propertyAccess = node.expression;
                 if (ts.isIdentifier(propertyAccess.name) && isNarrowableOperand(propertyAccess.expression) && ts.isPushOrUnshiftIdentifier(propertyAccess.name)) {
                     currentFlow = createFlowMutation(256 /* ArrayMutation */, currentFlow, node);
@@ -43050,54 +44035,55 @@
         }
         function getContainerFlags(node) {
             switch (node.kind) {
-                case 222 /* ClassExpression */:
-                case 253 /* ClassDeclaration */:
-                case 256 /* EnumDeclaration */:
-                case 201 /* ObjectLiteralExpression */:
-                case 178 /* TypeLiteral */:
-                case 314 /* JSDocTypeLiteral */:
-                case 282 /* JsxAttributes */:
+                case 224 /* ClassExpression */:
+                case 255 /* ClassDeclaration */:
+                case 258 /* EnumDeclaration */:
+                case 203 /* ObjectLiteralExpression */:
+                case 180 /* TypeLiteral */:
+                case 317 /* JSDocTypeLiteral */:
+                case 284 /* JsxAttributes */:
                     return 1 /* IsContainer */;
-                case 254 /* InterfaceDeclaration */:
+                case 256 /* InterfaceDeclaration */:
                     return 1 /* IsContainer */ | 64 /* IsInterface */;
-                case 257 /* ModuleDeclaration */:
-                case 255 /* TypeAliasDeclaration */:
-                case 191 /* MappedType */:
+                case 259 /* ModuleDeclaration */:
+                case 257 /* TypeAliasDeclaration */:
+                case 193 /* MappedType */:
                     return 1 /* IsContainer */ | 32 /* HasLocals */;
-                case 298 /* SourceFile */:
+                case 300 /* SourceFile */:
                     return 1 /* IsContainer */ | 4 /* IsControlFlowContainer */ | 32 /* HasLocals */;
-                case 166 /* MethodDeclaration */:
+                case 167 /* MethodDeclaration */:
                     if (ts.isObjectLiteralOrClassExpressionMethod(node)) {
                         return 1 /* IsContainer */ | 4 /* IsControlFlowContainer */ | 32 /* HasLocals */ | 8 /* IsFunctionLike */ | 128 /* IsObjectLiteralOrClassExpressionMethod */;
                     }
                 // falls through
-                case 167 /* Constructor */:
-                case 252 /* FunctionDeclaration */:
-                case 165 /* MethodSignature */:
-                case 168 /* GetAccessor */:
-                case 169 /* SetAccessor */:
-                case 170 /* CallSignature */:
-                case 315 /* JSDocSignature */:
-                case 309 /* JSDocFunctionType */:
-                case 175 /* FunctionType */:
-                case 171 /* ConstructSignature */:
-                case 172 /* IndexSignature */:
-                case 176 /* ConstructorType */:
+                case 169 /* Constructor */:
+                case 254 /* FunctionDeclaration */:
+                case 166 /* MethodSignature */:
+                case 170 /* GetAccessor */:
+                case 171 /* SetAccessor */:
+                case 172 /* CallSignature */:
+                case 318 /* JSDocSignature */:
+                case 312 /* JSDocFunctionType */:
+                case 177 /* FunctionType */:
+                case 173 /* ConstructSignature */:
+                case 174 /* IndexSignature */:
+                case 178 /* ConstructorType */:
+                case 168 /* ClassStaticBlockDeclaration */:
                     return 1 /* IsContainer */ | 4 /* IsControlFlowContainer */ | 32 /* HasLocals */ | 8 /* IsFunctionLike */;
-                case 209 /* FunctionExpression */:
-                case 210 /* ArrowFunction */:
+                case 211 /* FunctionExpression */:
+                case 212 /* ArrowFunction */:
                     return 1 /* IsContainer */ | 4 /* IsControlFlowContainer */ | 32 /* HasLocals */ | 8 /* IsFunctionLike */ | 16 /* IsFunctionExpression */;
-                case 258 /* ModuleBlock */:
+                case 260 /* ModuleBlock */:
                     return 4 /* IsControlFlowContainer */;
-                case 164 /* PropertyDeclaration */:
+                case 165 /* PropertyDeclaration */:
                     return node.initializer ? 4 /* IsControlFlowContainer */ : 0;
-                case 288 /* CatchClause */:
-                case 238 /* ForStatement */:
-                case 239 /* ForInStatement */:
-                case 240 /* ForOfStatement */:
-                case 259 /* CaseBlock */:
+                case 290 /* CatchClause */:
+                case 240 /* ForStatement */:
+                case 241 /* ForInStatement */:
+                case 242 /* ForOfStatement */:
+                case 261 /* CaseBlock */:
                     return 2 /* IsBlockScopedContainer */;
-                case 231 /* Block */:
+                case 233 /* Block */:
                     // do not treat blocks directly inside a function as a block-scoped-container.
                     // Locals that reside in this block should go to the function locals. Otherwise 'x'
                     // would not appear to be a redeclaration of a block scoped local in the following
@@ -43114,7 +44100,7 @@
                     // By not creating a new block-scoped-container here, we ensure that both 'var x'
                     // and 'let x' go into the Function-container's locals, and we do get a collision
                     // conflict.
-                    return ts.isFunctionLike(node.parent) ? 0 /* None */ : 2 /* IsBlockScopedContainer */;
+                    return ts.isFunctionLike(node.parent) || ts.isClassStaticBlockDeclaration(node.parent) ? 0 /* None */ : 2 /* IsBlockScopedContainer */;
             }
             return 0 /* None */;
         }
@@ -43130,45 +44116,46 @@
                 // members are declared (for example, a member of a class will go into a specific
                 // symbol table depending on if it is static or not). We defer to specialized
                 // handlers to take care of declaring these child members.
-                case 257 /* ModuleDeclaration */:
+                case 259 /* ModuleDeclaration */:
                     return declareModuleMember(node, symbolFlags, symbolExcludes);
-                case 298 /* SourceFile */:
+                case 300 /* SourceFile */:
                     return declareSourceFileMember(node, symbolFlags, symbolExcludes);
-                case 222 /* ClassExpression */:
-                case 253 /* ClassDeclaration */:
+                case 224 /* ClassExpression */:
+                case 255 /* ClassDeclaration */:
                     return declareClassMember(node, symbolFlags, symbolExcludes);
-                case 256 /* EnumDeclaration */:
+                case 258 /* EnumDeclaration */:
                     return declareSymbol(container.symbol.exports, container.symbol, node, symbolFlags, symbolExcludes);
-                case 178 /* TypeLiteral */:
-                case 314 /* JSDocTypeLiteral */:
-                case 201 /* ObjectLiteralExpression */:
-                case 254 /* InterfaceDeclaration */:
-                case 282 /* JsxAttributes */:
+                case 180 /* TypeLiteral */:
+                case 317 /* JSDocTypeLiteral */:
+                case 203 /* ObjectLiteralExpression */:
+                case 256 /* InterfaceDeclaration */:
+                case 284 /* JsxAttributes */:
                     // Interface/Object-types always have their children added to the 'members' of
                     // their container. They are only accessible through an instance of their
                     // container, and are never in scope otherwise (even inside the body of the
                     // object / type / interface declaring them). An exception is type parameters,
                     // which are in scope without qualification (similar to 'locals').
                     return declareSymbol(container.symbol.members, container.symbol, node, symbolFlags, symbolExcludes);
-                case 175 /* FunctionType */:
-                case 176 /* ConstructorType */:
-                case 170 /* CallSignature */:
-                case 171 /* ConstructSignature */:
-                case 315 /* JSDocSignature */:
-                case 172 /* IndexSignature */:
-                case 166 /* MethodDeclaration */:
-                case 165 /* MethodSignature */:
-                case 167 /* Constructor */:
-                case 168 /* GetAccessor */:
-                case 169 /* SetAccessor */:
-                case 252 /* FunctionDeclaration */:
-                case 209 /* FunctionExpression */:
-                case 210 /* ArrowFunction */:
-                case 309 /* JSDocFunctionType */:
-                case 335 /* JSDocTypedefTag */:
-                case 328 /* JSDocCallbackTag */:
-                case 255 /* TypeAliasDeclaration */:
-                case 191 /* MappedType */:
+                case 177 /* FunctionType */:
+                case 178 /* ConstructorType */:
+                case 172 /* CallSignature */:
+                case 173 /* ConstructSignature */:
+                case 318 /* JSDocSignature */:
+                case 174 /* IndexSignature */:
+                case 167 /* MethodDeclaration */:
+                case 166 /* MethodSignature */:
+                case 169 /* Constructor */:
+                case 170 /* GetAccessor */:
+                case 171 /* SetAccessor */:
+                case 254 /* FunctionDeclaration */:
+                case 211 /* FunctionExpression */:
+                case 212 /* ArrowFunction */:
+                case 312 /* JSDocFunctionType */:
+                case 340 /* JSDocTypedefTag */:
+                case 333 /* JSDocCallbackTag */:
+                case 168 /* ClassStaticBlockDeclaration */:
+                case 257 /* TypeAliasDeclaration */:
+                case 193 /* MappedType */:
                     // All the children of these container types are never visible through another
                     // symbol (i.e. through another symbol's 'exports' or 'members').  Instead,
                     // they're only accessed 'lexically' (i.e. from code that exists underneath
@@ -43179,7 +44166,7 @@
             }
         }
         function declareClassMember(node, symbolFlags, symbolExcludes) {
-            return ts.hasSyntacticModifier(node, 32 /* Static */)
+            return ts.isStatic(node)
                 ? declareSymbol(container.symbol.exports, container.symbol, node, symbolFlags, symbolExcludes)
                 : declareSymbol(container.symbol.members, container.symbol, node, symbolFlags, symbolExcludes);
         }
@@ -43215,15 +44202,13 @@
                     var pattern = void 0;
                     if (node.name.kind === 10 /* StringLiteral */) {
                         var text = node.name.text;
-                        if (ts.hasZeroOrOneAsteriskCharacter(text)) {
-                            pattern = ts.tryParsePattern(text);
-                        }
-                        else {
+                        pattern = ts.tryParsePattern(text);
+                        if (pattern === undefined) {
                             errorOnFirstToken(node.name, ts.Diagnostics.Pattern_0_can_have_at_most_one_Asterisk_character, text);
                         }
                     }
                     var symbol = declareSymbolAndAddToSymbolTable(node, 512 /* ValueModule */, 110735 /* ValueModuleExcludes */);
-                    file.patternAmbientModules = ts.append(file.patternAmbientModules, pattern && { pattern: pattern, symbol: symbol });
+                    file.patternAmbientModules = ts.append(file.patternAmbientModules, pattern && !ts.isString(pattern) ? { pattern: pattern, symbol: symbol } : undefined);
                 }
             }
             else {
@@ -43269,7 +44254,7 @@
                 var seen = new ts.Map();
                 for (var _i = 0, _a = node.properties; _i < _a.length; _i++) {
                     var prop = _a[_i];
-                    if (prop.kind === 291 /* SpreadAssignment */ || prop.name.kind !== 78 /* Identifier */) {
+                    if (prop.kind === 293 /* SpreadAssignment */ || prop.name.kind !== 79 /* Identifier */) {
                         continue;
                     }
                     var identifier = prop.name;
@@ -43281,7 +44266,7 @@
                     //    c.IsAccessorDescriptor(previous) is true and IsDataDescriptor(propId.descriptor) is true.
                     //    d.IsAccessorDescriptor(previous) is true and IsAccessorDescriptor(propId.descriptor) is true
                     // and either both previous and propId.descriptor have[[Get]] fields or both previous and propId.descriptor have[[Set]] fields
-                    var currentKind = prop.kind === 289 /* PropertyAssignment */ || prop.kind === 290 /* ShorthandPropertyAssignment */ || prop.kind === 166 /* MethodDeclaration */
+                    var currentKind = prop.kind === 291 /* PropertyAssignment */ || prop.kind === 292 /* ShorthandPropertyAssignment */ || prop.kind === 167 /* MethodDeclaration */
                         ? 1 /* Property */
                         : 2 /* Accessor */;
                     var existingKind = seen.get(identifier.escapedText);
@@ -43313,10 +44298,10 @@
         }
         function bindBlockScopedDeclaration(node, symbolFlags, symbolExcludes) {
             switch (blockScopeContainer.kind) {
-                case 257 /* ModuleDeclaration */:
+                case 259 /* ModuleDeclaration */:
                     declareModuleMember(node, symbolFlags, symbolExcludes);
                     break;
-                case 298 /* SourceFile */:
+                case 300 /* SourceFile */:
                     if (ts.isExternalOrCommonJsModule(container)) {
                         declareModuleMember(node, symbolFlags, symbolExcludes);
                         break;
@@ -43384,7 +44369,7 @@
                         container = oldContainer;
                     }
                 }
-                else if (ts.isJSDocEnumTag(typeAlias) || !typeAlias.fullName || typeAlias.fullName.kind === 78 /* Identifier */) {
+                else if (ts.isJSDocEnumTag(typeAlias) || !typeAlias.fullName || typeAlias.fullName.kind === 79 /* Identifier */) {
                     parent = typeAlias.parent;
                     bindBlockScopedDeclaration(typeAlias, 524288 /* TypeAlias */, 788968 /* TypeAliasExcludes */);
                 }
@@ -43409,11 +44394,11 @@
                 !ts.isIdentifierName(node)) {
                 // strict mode identifiers
                 if (inStrictMode &&
-                    node.originalKeywordKind >= 116 /* FirstFutureReservedWord */ &&
-                    node.originalKeywordKind <= 124 /* LastFutureReservedWord */) {
+                    node.originalKeywordKind >= 117 /* FirstFutureReservedWord */ &&
+                    node.originalKeywordKind <= 125 /* LastFutureReservedWord */) {
                     file.bindDiagnostics.push(createDiagnosticForNode(node, getStrictModeIdentifierMessage(node), ts.declarationNameToString(node)));
                 }
-                else if (node.originalKeywordKind === 130 /* AwaitKeyword */) {
+                else if (node.originalKeywordKind === 131 /* AwaitKeyword */) {
                     if (ts.isExternalModule(file) && ts.isInTopLevelContext(node)) {
                         file.bindDiagnostics.push(createDiagnosticForNode(node, ts.Diagnostics.Identifier_expected_0_is_a_reserved_word_at_the_top_level_of_a_module, ts.declarationNameToString(node)));
                     }
@@ -43421,7 +44406,7 @@
                         file.bindDiagnostics.push(createDiagnosticForNode(node, ts.Diagnostics.Identifier_expected_0_is_a_reserved_word_that_cannot_be_used_here, ts.declarationNameToString(node)));
                     }
                 }
-                else if (node.originalKeywordKind === 124 /* YieldKeyword */ && node.flags & 8192 /* YieldContext */) {
+                else if (node.originalKeywordKind === 125 /* YieldKeyword */ && node.flags & 8192 /* YieldContext */) {
                     file.bindDiagnostics.push(createDiagnosticForNode(node, ts.Diagnostics.Identifier_expected_0_is_a_reserved_word_that_cannot_be_used_here, ts.declarationNameToString(node)));
                 }
             }
@@ -43463,7 +44448,7 @@
         }
         function checkStrictModeDeleteExpression(node) {
             // Grammar checking
-            if (inStrictMode && node.expression.kind === 78 /* Identifier */) {
+            if (inStrictMode && node.expression.kind === 79 /* Identifier */) {
                 // When a delete operator occurs within strict mode code, a SyntaxError is thrown if its
                 // UnaryExpression is a direct reference to a variable, function argument, or function name
                 var span = ts.getErrorSpanForNode(file, node.expression);
@@ -43474,7 +44459,7 @@
             return ts.isIdentifier(node) && (node.escapedText === "eval" || node.escapedText === "arguments");
         }
         function checkStrictModeEvalOrArguments(contextNode, name) {
-            if (name && name.kind === 78 /* Identifier */) {
+            if (name && name.kind === 79 /* Identifier */) {
                 var identifier = name;
                 if (isEvalOrArgumentsIdentifier(identifier)) {
                     // We check first if the name is inside class declaration or class expression; if so give explicit message
@@ -43488,7 +44473,7 @@
             // Provide specialized messages to help the user understand why we think they're in
             // strict mode.
             if (ts.getContainingClass(node)) {
-                return ts.Diagnostics.Invalid_use_of_0_Class_definitions_are_automatically_in_strict_mode;
+                return ts.Diagnostics.Code_contained_in_a_class_is_evaluated_in_JavaScript_s_strict_mode_which_does_not_allow_this_use_of_0_For_more_information_see_https_Colon_Slash_Slashdeveloper_mozilla_org_Slashen_US_Slashdocs_SlashWeb_SlashJavaScript_SlashReference_SlashStrict_mode;
             }
             if (file.externalModuleIndicator) {
                 return ts.Diagnostics.Invalid_use_of_0_Modules_are_automatically_in_strict_mode;
@@ -43515,9 +44500,9 @@
         function checkStrictModeFunctionDeclaration(node) {
             if (languageVersion < 2 /* ES2015 */) {
                 // Report error if function is not top level function declaration
-                if (blockScopeContainer.kind !== 298 /* SourceFile */ &&
-                    blockScopeContainer.kind !== 257 /* ModuleDeclaration */ &&
-                    !ts.isFunctionLike(blockScopeContainer)) {
+                if (blockScopeContainer.kind !== 300 /* SourceFile */ &&
+                    blockScopeContainer.kind !== 259 /* ModuleDeclaration */ &&
+                    !ts.isFunctionLikeOrClassStaticBlockDeclaration(blockScopeContainer)) {
                     // We check first if the name is inside class declaration or class expression; if so give explicit message
                     // otherwise report generic error message.
                     var errorSpan = ts.getErrorSpanForNode(file, node);
@@ -43611,7 +44596,7 @@
             // the current 'container' node when it changes. This helps us know which symbol table
             // a local should go into for example. Since terminal nodes are known not to have
             // children, as an optimization we don't process those.
-            if (node.kind > 157 /* LastToken */) {
+            if (node.kind > 158 /* LastToken */) {
                 var saveParent = parent;
                 parent = node;
                 var containerFlags = getContainerFlags(node);
@@ -43673,7 +44658,7 @@
         function bindWorker(node) {
             switch (node.kind) {
                 /* Strict mode checks */
-                case 78 /* Identifier */:
+                case 79 /* Identifier */:
                     // for typedef type names with namespaces, bind the new jsdoc type symbol here
                     // because it requires all containing namespaces to be in effect, namely the
                     // current "blockScopeContainer" needs to be set to its immediate namespace parent.
@@ -43686,24 +44671,24 @@
                         break;
                     }
                 // falls through
-                case 107 /* ThisKeyword */:
-                    if (currentFlow && (ts.isExpression(node) || parent.kind === 290 /* ShorthandPropertyAssignment */)) {
+                case 108 /* ThisKeyword */:
+                    if (currentFlow && (ts.isExpression(node) || parent.kind === 292 /* ShorthandPropertyAssignment */)) {
                         node.flowNode = currentFlow;
                     }
                     return checkContextualIdentifier(node);
-                case 158 /* QualifiedName */:
-                    if (currentFlow && parent.kind === 177 /* TypeQuery */) {
+                case 159 /* QualifiedName */:
+                    if (currentFlow && ts.isPartOfTypeQuery(node)) {
                         node.flowNode = currentFlow;
                     }
                     break;
-                case 227 /* MetaProperty */:
-                case 105 /* SuperKeyword */:
+                case 229 /* MetaProperty */:
+                case 106 /* SuperKeyword */:
                     node.flowNode = currentFlow;
                     break;
-                case 79 /* PrivateIdentifier */:
+                case 80 /* PrivateIdentifier */:
                     return checkPrivateIdentifier(node);
-                case 202 /* PropertyAccessExpression */:
-                case 203 /* ElementAccessExpression */:
+                case 204 /* PropertyAccessExpression */:
+                case 205 /* ElementAccessExpression */:
                     var expr = node;
                     if (currentFlow && isNarrowableReference(expr)) {
                         expr.flowNode = currentFlow;
@@ -43718,7 +44703,7 @@
                         declareSymbol(file.locals, /*parent*/ undefined, expr.expression, 1 /* FunctionScopedVariable */ | 134217728 /* ModuleExports */, 111550 /* FunctionScopedVariableExcludes */);
                     }
                     break;
-                case 217 /* BinaryExpression */:
+                case 219 /* BinaryExpression */:
                     var specialKind = ts.getAssignmentDeclarationKind(node);
                     switch (specialKind) {
                         case 1 /* ExportsProperty */:
@@ -43754,78 +44739,78 @@
                             ts.Debug.fail("Unknown binary expression special property assignment kind");
                     }
                     return checkStrictModeBinaryExpression(node);
-                case 288 /* CatchClause */:
+                case 290 /* CatchClause */:
                     return checkStrictModeCatchClause(node);
-                case 211 /* DeleteExpression */:
+                case 213 /* DeleteExpression */:
                     return checkStrictModeDeleteExpression(node);
                 case 8 /* NumericLiteral */:
                     return checkStrictModeNumericLiteral(node);
-                case 216 /* PostfixUnaryExpression */:
+                case 218 /* PostfixUnaryExpression */:
                     return checkStrictModePostfixUnaryExpression(node);
-                case 215 /* PrefixUnaryExpression */:
+                case 217 /* PrefixUnaryExpression */:
                     return checkStrictModePrefixUnaryExpression(node);
-                case 244 /* WithStatement */:
+                case 246 /* WithStatement */:
                     return checkStrictModeWithStatement(node);
-                case 246 /* LabeledStatement */:
+                case 248 /* LabeledStatement */:
                     return checkStrictModeLabeledStatement(node);
-                case 188 /* ThisType */:
+                case 190 /* ThisType */:
                     seenThisKeyword = true;
                     return;
-                case 173 /* TypePredicate */:
+                case 175 /* TypePredicate */:
                     break; // Binding the children will handle everything
-                case 160 /* TypeParameter */:
+                case 161 /* TypeParameter */:
                     return bindTypeParameter(node);
-                case 161 /* Parameter */:
+                case 162 /* Parameter */:
                     return bindParameter(node);
-                case 250 /* VariableDeclaration */:
+                case 252 /* VariableDeclaration */:
                     return bindVariableDeclarationOrBindingElement(node);
-                case 199 /* BindingElement */:
+                case 201 /* BindingElement */:
                     node.flowNode = currentFlow;
                     return bindVariableDeclarationOrBindingElement(node);
-                case 164 /* PropertyDeclaration */:
-                case 163 /* PropertySignature */:
+                case 165 /* PropertyDeclaration */:
+                case 164 /* PropertySignature */:
                     return bindPropertyWorker(node);
-                case 289 /* PropertyAssignment */:
-                case 290 /* ShorthandPropertyAssignment */:
+                case 291 /* PropertyAssignment */:
+                case 292 /* ShorthandPropertyAssignment */:
                     return bindPropertyOrMethodOrAccessor(node, 4 /* Property */, 0 /* PropertyExcludes */);
-                case 292 /* EnumMember */:
+                case 294 /* EnumMember */:
                     return bindPropertyOrMethodOrAccessor(node, 8 /* EnumMember */, 900095 /* EnumMemberExcludes */);
-                case 170 /* CallSignature */:
-                case 171 /* ConstructSignature */:
-                case 172 /* IndexSignature */:
+                case 172 /* CallSignature */:
+                case 173 /* ConstructSignature */:
+                case 174 /* IndexSignature */:
                     return declareSymbolAndAddToSymbolTable(node, 131072 /* Signature */, 0 /* None */);
-                case 166 /* MethodDeclaration */:
-                case 165 /* MethodSignature */:
+                case 167 /* MethodDeclaration */:
+                case 166 /* MethodSignature */:
                     // If this is an ObjectLiteralExpression method, then it sits in the same space
                     // as other properties in the object literal.  So we use SymbolFlags.PropertyExcludes
                     // so that it will conflict with any other object literal members with the same
                     // name.
                     return bindPropertyOrMethodOrAccessor(node, 8192 /* Method */ | (node.questionToken ? 16777216 /* Optional */ : 0 /* None */), ts.isObjectLiteralMethod(node) ? 0 /* PropertyExcludes */ : 103359 /* MethodExcludes */);
-                case 252 /* FunctionDeclaration */:
+                case 254 /* FunctionDeclaration */:
                     return bindFunctionDeclaration(node);
-                case 167 /* Constructor */:
+                case 169 /* Constructor */:
                     return declareSymbolAndAddToSymbolTable(node, 16384 /* Constructor */, /*symbolExcludes:*/ 0 /* None */);
-                case 168 /* GetAccessor */:
+                case 170 /* GetAccessor */:
                     return bindPropertyOrMethodOrAccessor(node, 32768 /* GetAccessor */, 46015 /* GetAccessorExcludes */);
-                case 169 /* SetAccessor */:
+                case 171 /* SetAccessor */:
                     return bindPropertyOrMethodOrAccessor(node, 65536 /* SetAccessor */, 78783 /* SetAccessorExcludes */);
-                case 175 /* FunctionType */:
-                case 309 /* JSDocFunctionType */:
-                case 315 /* JSDocSignature */:
-                case 176 /* ConstructorType */:
+                case 177 /* FunctionType */:
+                case 312 /* JSDocFunctionType */:
+                case 318 /* JSDocSignature */:
+                case 178 /* ConstructorType */:
                     return bindFunctionOrConstructorType(node);
-                case 178 /* TypeLiteral */:
-                case 314 /* JSDocTypeLiteral */:
-                case 191 /* MappedType */:
+                case 180 /* TypeLiteral */:
+                case 317 /* JSDocTypeLiteral */:
+                case 193 /* MappedType */:
                     return bindAnonymousTypeWorker(node);
-                case 322 /* JSDocClassTag */:
+                case 327 /* JSDocClassTag */:
                     return bindJSDocClassTag(node);
-                case 201 /* ObjectLiteralExpression */:
+                case 203 /* ObjectLiteralExpression */:
                     return bindObjectLiteralExpression(node);
-                case 209 /* FunctionExpression */:
-                case 210 /* ArrowFunction */:
+                case 211 /* FunctionExpression */:
+                case 212 /* ArrowFunction */:
                     return bindFunctionExpression(node);
-                case 204 /* CallExpression */:
+                case 206 /* CallExpression */:
                     var assignmentKind = ts.getAssignmentDeclarationKind(node);
                     switch (assignmentKind) {
                         case 7 /* ObjectDefinePropertyValue */:
@@ -43844,65 +44829,65 @@
                     }
                     break;
                 // Members of classes, interfaces, and modules
-                case 222 /* ClassExpression */:
-                case 253 /* ClassDeclaration */:
+                case 224 /* ClassExpression */:
+                case 255 /* ClassDeclaration */:
                     // All classes are automatically in strict mode in ES6.
                     inStrictMode = true;
                     return bindClassLikeDeclaration(node);
-                case 254 /* InterfaceDeclaration */:
+                case 256 /* InterfaceDeclaration */:
                     return bindBlockScopedDeclaration(node, 64 /* Interface */, 788872 /* InterfaceExcludes */);
-                case 255 /* TypeAliasDeclaration */:
+                case 257 /* TypeAliasDeclaration */:
                     return bindBlockScopedDeclaration(node, 524288 /* TypeAlias */, 788968 /* TypeAliasExcludes */);
-                case 256 /* EnumDeclaration */:
+                case 258 /* EnumDeclaration */:
                     return bindEnumDeclaration(node);
-                case 257 /* ModuleDeclaration */:
+                case 259 /* ModuleDeclaration */:
                     return bindModuleDeclaration(node);
                 // Jsx-attributes
-                case 282 /* JsxAttributes */:
+                case 284 /* JsxAttributes */:
                     return bindJsxAttributes(node);
-                case 281 /* JsxAttribute */:
+                case 283 /* JsxAttribute */:
                     return bindJsxAttribute(node, 4 /* Property */, 0 /* PropertyExcludes */);
                 // Imports and exports
-                case 261 /* ImportEqualsDeclaration */:
-                case 264 /* NamespaceImport */:
-                case 266 /* ImportSpecifier */:
-                case 271 /* ExportSpecifier */:
+                case 263 /* ImportEqualsDeclaration */:
+                case 266 /* NamespaceImport */:
+                case 268 /* ImportSpecifier */:
+                case 273 /* ExportSpecifier */:
                     return declareSymbolAndAddToSymbolTable(node, 2097152 /* Alias */, 2097152 /* AliasExcludes */);
-                case 260 /* NamespaceExportDeclaration */:
+                case 262 /* NamespaceExportDeclaration */:
                     return bindNamespaceExportDeclaration(node);
-                case 263 /* ImportClause */:
+                case 265 /* ImportClause */:
                     return bindImportClause(node);
-                case 268 /* ExportDeclaration */:
+                case 270 /* ExportDeclaration */:
                     return bindExportDeclaration(node);
-                case 267 /* ExportAssignment */:
+                case 269 /* ExportAssignment */:
                     return bindExportAssignment(node);
-                case 298 /* SourceFile */:
+                case 300 /* SourceFile */:
                     updateStrictModeStatementList(node.statements);
                     return bindSourceFileIfExternalModule();
-                case 231 /* Block */:
-                    if (!ts.isFunctionLike(node.parent)) {
+                case 233 /* Block */:
+                    if (!ts.isFunctionLikeOrClassStaticBlockDeclaration(node.parent)) {
                         return;
                     }
                 // falls through
-                case 258 /* ModuleBlock */:
+                case 260 /* ModuleBlock */:
                     return updateStrictModeStatementList(node.statements);
-                case 330 /* JSDocParameterTag */:
-                    if (node.parent.kind === 315 /* JSDocSignature */) {
+                case 335 /* JSDocParameterTag */:
+                    if (node.parent.kind === 318 /* JSDocSignature */) {
                         return bindParameter(node);
                     }
-                    if (node.parent.kind !== 314 /* JSDocTypeLiteral */) {
+                    if (node.parent.kind !== 317 /* JSDocTypeLiteral */) {
                         break;
                     }
                 // falls through
-                case 337 /* JSDocPropertyTag */:
+                case 342 /* JSDocPropertyTag */:
                     var propTag = node;
-                    var flags = propTag.isBracketed || propTag.typeExpression && propTag.typeExpression.type.kind === 308 /* JSDocOptionalType */ ?
+                    var flags = propTag.isBracketed || propTag.typeExpression && propTag.typeExpression.type.kind === 311 /* JSDocOptionalType */ ?
                         4 /* Property */ | 16777216 /* Optional */ :
                         4 /* Property */;
                     return declareSymbolAndAddToSymbolTable(propTag, flags, 0 /* PropertyExcludes */);
-                case 335 /* JSDocTypedefTag */:
-                case 328 /* JSDocCallbackTag */:
-                case 329 /* JSDocEnumTag */:
+                case 340 /* JSDocTypedefTag */:
+                case 333 /* JSDocCallbackTag */:
+                case 334 /* JSDocEnumTag */:
                     return (delayedTypeAliases || (delayedTypeAliases = [])).push(node);
             }
         }
@@ -44065,11 +45050,11 @@
             }
             var thisContainer = ts.getThisContainer(node, /*includeArrowFunctions*/ false);
             switch (thisContainer.kind) {
-                case 252 /* FunctionDeclaration */:
-                case 209 /* FunctionExpression */:
+                case 254 /* FunctionDeclaration */:
+                case 211 /* FunctionExpression */:
                     var constructorSymbol = thisContainer.symbol;
                     // For `f.prototype.m = function() { this.x = 0; }`, `this.x = 0` should modify `f`'s members, not the function expression.
-                    if (ts.isBinaryExpression(thisContainer.parent) && thisContainer.parent.operatorToken.kind === 62 /* EqualsToken */) {
+                    if (ts.isBinaryExpression(thisContainer.parent) && thisContainer.parent.operatorToken.kind === 63 /* EqualsToken */) {
                         var l = thisContainer.parent.left;
                         if (ts.isBindableStaticAccessExpression(l) && ts.isPrototypeAccess(l.expression)) {
                             constructorSymbol = lookupSymbolForPropertyAccess(l.expression.expression, thisParentContainer);
@@ -44080,7 +45065,7 @@
                         constructorSymbol.members = constructorSymbol.members || ts.createSymbolTable();
                         // It's acceptable for multiple 'this' assignments of the same identifier to occur
                         if (ts.hasDynamicName(node)) {
-                            bindDynamicallyNamedThisPropertyAssignment(node, constructorSymbol);
+                            bindDynamicallyNamedThisPropertyAssignment(node, constructorSymbol, constructorSymbol.members);
                         }
                         else {
                             declareSymbol(constructorSymbol.members, constructorSymbol, node, 4 /* Property */ | 67108864 /* Assignment */, 0 /* PropertyExcludes */ & ~4 /* Property */);
@@ -44088,23 +45073,23 @@
                         addDeclarationToSymbol(constructorSymbol, constructorSymbol.valueDeclaration, 32 /* Class */);
                     }
                     break;
-                case 167 /* Constructor */:
-                case 164 /* PropertyDeclaration */:
-                case 166 /* MethodDeclaration */:
-                case 168 /* GetAccessor */:
-                case 169 /* SetAccessor */:
+                case 169 /* Constructor */:
+                case 165 /* PropertyDeclaration */:
+                case 167 /* MethodDeclaration */:
+                case 170 /* GetAccessor */:
+                case 171 /* SetAccessor */:
                     // this.foo assignment in a JavaScript class
                     // Bind this property to the containing class
                     var containingClass = thisContainer.parent;
-                    var symbolTable = ts.hasSyntacticModifier(thisContainer, 32 /* Static */) ? containingClass.symbol.exports : containingClass.symbol.members;
+                    var symbolTable = ts.isStatic(thisContainer) ? containingClass.symbol.exports : containingClass.symbol.members;
                     if (ts.hasDynamicName(node)) {
-                        bindDynamicallyNamedThisPropertyAssignment(node, containingClass.symbol);
+                        bindDynamicallyNamedThisPropertyAssignment(node, containingClass.symbol, symbolTable);
                     }
                     else {
                         declareSymbol(symbolTable, containingClass.symbol, node, 4 /* Property */ | 67108864 /* Assignment */, 0 /* None */, /*isReplaceableByMethod*/ true);
                     }
                     break;
-                case 298 /* SourceFile */:
+                case 300 /* SourceFile */:
                     // this.property = assignment in a source file -- declare symbol in exports for a module, in locals for a script
                     if (ts.hasDynamicName(node)) {
                         break;
@@ -44120,8 +45105,8 @@
                     ts.Debug.failBadSyntaxKind(thisContainer);
             }
         }
-        function bindDynamicallyNamedThisPropertyAssignment(node, symbol) {
-            bindAnonymousDeclaration(node, 4 /* Property */, "__computed" /* Computed */);
+        function bindDynamicallyNamedThisPropertyAssignment(node, symbol, symbolTable) {
+            declareSymbol(symbolTable, symbol, node, 4 /* Property */, 0 /* None */, /*isReplaceableByMethod*/ true, /*isComputedName*/ true);
             addLateBoundAssignmentDeclarationToSymbol(node, symbol);
         }
         function addLateBoundAssignmentDeclarationToSymbol(node, symbol) {
@@ -44130,10 +45115,10 @@
             }
         }
         function bindSpecialPropertyDeclaration(node) {
-            if (node.expression.kind === 107 /* ThisKeyword */) {
+            if (node.expression.kind === 108 /* ThisKeyword */) {
                 bindThisPropertyAssignment(node);
             }
-            else if (ts.isBindableStaticAccessExpression(node) && node.parent.parent.kind === 298 /* SourceFile */) {
+            else if (ts.isBindableStaticAccessExpression(node) && node.parent.parent.kind === 300 /* SourceFile */) {
                 if (ts.isPrototypeAccess(node.expression)) {
                     bindPrototypePropertyAssignment(node, node.parent);
                 }
@@ -44173,7 +45158,7 @@
         }
         function bindObjectDefinePropertyAssignment(node) {
             var namespaceSymbol = lookupSymbolForPropertyAccess(node.arguments[0]);
-            var isToplevel = node.parent.parent.kind === 298 /* SourceFile */;
+            var isToplevel = node.parent.parent.kind === 300 /* SourceFile */;
             namespaceSymbol = bindPotentiallyMissingNamespaces(namespaceSymbol, node.arguments[0], isToplevel, /*isPrototypeProperty*/ false, /*containerIsClass*/ false);
             bindPotentiallyNewExpandoMemberToNamespace(node, namespaceSymbol, /*isPrototypeProperty*/ false);
         }
@@ -44282,8 +45267,8 @@
         }
         function isTopLevelNamespaceAssignment(propertyAccess) {
             return ts.isBinaryExpression(propertyAccess.parent)
-                ? getParentOfBinaryExpression(propertyAccess.parent).parent.kind === 298 /* SourceFile */
-                : propertyAccess.parent.parent.kind === 298 /* SourceFile */;
+                ? getParentOfBinaryExpression(propertyAccess.parent).parent.kind === 300 /* SourceFile */
+                : propertyAccess.parent.parent.kind === 300 /* SourceFile */;
         }
         function bindPropertyAssignment(name, propertyAccess, isPrototypeProperty, containerIsClass) {
             var namespaceSymbol = lookupSymbolForPropertyAccess(name, container) || lookupSymbolForPropertyAccess(name, blockScopeContainer);
@@ -44362,7 +45347,7 @@
             }
         }
         function bindClassLikeDeclaration(node) {
-            if (node.kind === 253 /* ClassDeclaration */) {
+            if (node.kind === 255 /* ClassDeclaration */) {
                 bindBlockScopedDeclaration(node, 32 /* Class */, 899503 /* ClassExcludes */);
             }
             else {
@@ -44428,7 +45413,7 @@
             }
         }
         function bindParameter(node) {
-            if (node.kind === 330 /* JSDocParameterTag */ && container.kind !== 315 /* JSDocSignature */) {
+            if (node.kind === 335 /* JSDocParameterTag */ && container.kind !== 318 /* JSDocSignature */) {
                 return;
             }
             if (inStrictMode && !(node.flags & 8388608 /* Ambient */)) {
@@ -44505,7 +45490,7 @@
                     declareSymbolAndAddToSymbolTable(node, 262144 /* TypeParameter */, 526824 /* TypeParameterExcludes */);
                 }
             }
-            else if (node.parent.kind === 186 /* InferType */) {
+            else if (node.parent.kind === 188 /* InferType */) {
                 var container_2 = getInferTypeContainer(node.parent);
                 if (container_2) {
                     if (!container_2.locals) {
@@ -44533,11 +45518,11 @@
             if (currentFlow === unreachableFlow) {
                 var reportError = 
                 // report error on all statements except empty ones
-                (ts.isStatementButNotDeclaration(node) && node.kind !== 232 /* EmptyStatement */) ||
+                (ts.isStatementButNotDeclaration(node) && node.kind !== 234 /* EmptyStatement */) ||
                     // report error on class declarations
-                    node.kind === 253 /* ClassDeclaration */ ||
+                    node.kind === 255 /* ClassDeclaration */ ||
                     // report error on instantiated modules or const-enums only modules if preserveConstEnums is set
-                    (node.kind === 257 /* ModuleDeclaration */ && shouldReportErrorOnModuleDeclaration(node));
+                    (node.kind === 259 /* ModuleDeclaration */ && shouldReportErrorOnModuleDeclaration(node));
                 if (reportError) {
                     currentFlow = reportedUnreachableFlow;
                     if (!options.allowUnreachableCode) {
@@ -44581,12 +45566,12 @@
     }
     function isPurelyTypeDeclaration(s) {
         switch (s.kind) {
-            case 254 /* InterfaceDeclaration */:
-            case 255 /* TypeAliasDeclaration */:
+            case 256 /* InterfaceDeclaration */:
+            case 257 /* TypeAliasDeclaration */:
                 return true;
-            case 257 /* ModuleDeclaration */:
+            case 259 /* ModuleDeclaration */:
                 return getModuleInstanceState(s) !== 1 /* Instantiated */;
-            case 256 /* EnumDeclaration */:
+            case 258 /* EnumDeclaration */:
                 return ts.hasSyntacticModifier(s, 2048 /* Const */);
             default:
                 return false;
@@ -44630,7 +45615,7 @@
 /** @internal */
 var ts;
 (function (ts) {
-    function createGetSymbolWalker(getRestTypeOfSignature, getTypePredicateOfSignature, getReturnTypeOfSignature, getBaseTypes, resolveStructuredTypeMembers, getTypeOfSymbol, getResolvedSymbol, getIndexTypeOfStructuredType, getConstraintOfTypeParameter, getFirstIdentifier, getTypeArguments) {
+    function createGetSymbolWalker(getRestTypeOfSignature, getTypePredicateOfSignature, getReturnTypeOfSignature, getBaseTypes, resolveStructuredTypeMembers, getTypeOfSymbol, getResolvedSymbol, getConstraintOfTypeParameter, getFirstIdentifier, getTypeArguments) {
         return getSymbolWalker;
         function getSymbolWalker(accept) {
             if (accept === void 0) { accept = function () { return true; }; }
@@ -44745,22 +45730,22 @@
                 visitType(interfaceT.thisType);
             }
             function visitObjectType(type) {
-                var stringIndexType = getIndexTypeOfStructuredType(type, 0 /* String */);
-                visitType(stringIndexType);
-                var numberIndexType = getIndexTypeOfStructuredType(type, 1 /* Number */);
-                visitType(numberIndexType);
-                // The two checks above *should* have already resolved the type (if needed), so this should be cached
                 var resolved = resolveStructuredTypeMembers(type);
-                for (var _i = 0, _a = resolved.callSignatures; _i < _a.length; _i++) {
-                    var signature = _a[_i];
-                    visitSignature(signature);
+                for (var _i = 0, _a = resolved.indexInfos; _i < _a.length; _i++) {
+                    var info = _a[_i];
+                    visitType(info.keyType);
+                    visitType(info.type);
                 }
-                for (var _b = 0, _c = resolved.constructSignatures; _b < _c.length; _b++) {
+                for (var _b = 0, _c = resolved.callSignatures; _b < _c.length; _b++) {
                     var signature = _c[_b];
                     visitSignature(signature);
                 }
-                for (var _d = 0, _e = resolved.properties; _d < _e.length; _d++) {
-                    var p = _e[_d];
+                for (var _d = 0, _e = resolved.constructSignatures; _d < _e.length; _d++) {
+                    var signature = _e[_d];
+                    visitSignature(signature);
+                }
+                for (var _f = 0, _g = resolved.properties; _f < _g.length; _f++) {
+                    var p = _g[_f];
                     visitSymbol(p);
                 }
             }
@@ -44786,7 +45771,7 @@
                     //  (their type resolved directly to the member deeply referenced)
                     // So to get the intervening symbols, we need to check if there's a type
                     // query node on any of the symbol's declarations and get symbols there
-                    if (d.type && d.type.kind === 177 /* TypeQuery */) {
+                    if (d.type && d.type.kind === 179 /* TypeQuery */) {
                         var query = d.type;
                         var entity = getResolvedSymbol(getFirstIdentifier(query.exprName));
                         visitSymbol(entity);
@@ -44956,15 +45941,6 @@
         CheckMode[CheckMode["SkipGenericFunctions"] = 8] = "SkipGenericFunctions";
         CheckMode[CheckMode["IsForSignatureHelp"] = 16] = "IsForSignatureHelp";
     })(CheckMode || (CheckMode = {}));
-    var AccessFlags;
-    (function (AccessFlags) {
-        AccessFlags[AccessFlags["None"] = 0] = "None";
-        AccessFlags[AccessFlags["NoIndexSignatures"] = 1] = "NoIndexSignatures";
-        AccessFlags[AccessFlags["Writing"] = 2] = "Writing";
-        AccessFlags[AccessFlags["CacheSymbol"] = 4] = "CacheSymbol";
-        AccessFlags[AccessFlags["NoTupleBoundsCheck"] = 8] = "NoTupleBoundsCheck";
-        AccessFlags[AccessFlags["ExpressionPosition"] = 16] = "ExpressionPosition";
-    })(AccessFlags || (AccessFlags = {}));
     var SignatureCheckMode;
     (function (SignatureCheckMode) {
         SignatureCheckMode[SignatureCheckMode["BivariantCallback"] = 1] = "BivariantCallback";
@@ -45118,8 +46094,10 @@
         var strictPropertyInitialization = ts.getStrictOptionValue(compilerOptions, "strictPropertyInitialization");
         var noImplicitAny = ts.getStrictOptionValue(compilerOptions, "noImplicitAny");
         var noImplicitThis = ts.getStrictOptionValue(compilerOptions, "noImplicitThis");
+        var useUnknownInCatchVariables = ts.getStrictOptionValue(compilerOptions, "useUnknownInCatchVariables");
         var keyofStringsOnly = !!compilerOptions.keyofStringsOnly;
         var freshObjectLiteralFlag = compilerOptions.suppressExcessPropertyErrors ? 0 : 16384 /* FreshLiteral */;
+        var exactOptionalPropertyTypes = compilerOptions.exactOptionalPropertyTypes;
         var checkBinaryExpression = createCheckBinaryExpression();
         var emitResolver = createResolver();
         var nodeBuilder = createNodeBuilder();
@@ -45158,6 +46136,7 @@
             getDiagnostics: getDiagnostics,
             getGlobalDiagnostics: getGlobalDiagnostics,
             getRecursionIdentity: getRecursionIdentity,
+            getUnmatchedProperties: getUnmatchedProperties,
             getTypeOfSymbolAtLocation: function (symbol, locationIn) {
                 var location = ts.getParseTreeNode(locationIn);
                 return location ? getTypeOfSymbolAtLocation(symbol, location) : errorType;
@@ -45181,9 +46160,10 @@
                 return lexicallyScopedIdentifier ? getPrivateIdentifierPropertyOfType(leftType, lexicallyScopedIdentifier) : undefined;
             },
             getTypeOfPropertyOfType: function (type, name) { return getTypeOfPropertyOfType(type, ts.escapeLeadingUnderscores(name)); },
-            getIndexInfoOfType: getIndexInfoOfType,
+            getIndexInfoOfType: function (type, kind) { return getIndexInfoOfType(type, kind === 0 /* String */ ? stringType : numberType); },
+            getIndexInfosOfType: getIndexInfosOfType,
             getSignaturesOfType: getSignaturesOfType,
-            getIndexTypeOfType: getIndexTypeOfType,
+            getIndexTypeOfType: function (type, kind) { return getIndexTypeOfType(type, kind === 0 /* String */ ? stringType : numberType); },
             getBaseTypes: getBaseTypes,
             getBaseTypeOfLiteralType: getBaseTypeOfLiteralType,
             getWidenedType: getWidenedType,
@@ -45192,6 +46172,7 @@
                 return node ? getTypeFromTypeNode(node) : errorType;
             },
             getParameterType: getTypeAtPosition,
+            getParameterIdentifierNameAtPosition: getParameterIdentifierNameAtPosition,
             getPromisedTypeOfPromise: getPromisedTypeOfPromise,
             getAwaitedType: function (type) { return getAwaitedType(type); },
             getReturnTypeOfSignature: getReturnTypeOfSignature,
@@ -45217,6 +46198,10 @@
                 // set ignoreErrors: true because any lookups invoked by the API shouldn't cause any new errors
                 return node ? getSymbolAtLocation(node, /*ignoreErrors*/ true) : undefined;
             },
+            getIndexInfosAtLocation: function (nodeIn) {
+                var node = ts.getParseTreeNode(nodeIn);
+                return node ? getIndexInfosAtLocation(node) : undefined;
+            },
             getShorthandAssignmentValueSymbol: function (nodeIn) {
                 var node = ts.getParseTreeNode(nodeIn);
                 return node ? getShorthandAssignmentValueSymbol(node) : undefined;
@@ -45316,6 +46301,7 @@
             },
             getExpandedParameters: getExpandedParameters,
             hasEffectiveRestParameter: hasEffectiveRestParameter,
+            containsArgumentsReference: containsArgumentsReference,
             getConstantValue: function (nodeIn) {
                 var node = ts.getParseTreeNode(nodeIn, canHaveConstantValue);
                 return node ? getConstantValue(node) : undefined;
@@ -45341,7 +46327,8 @@
             getEmitResolver: getEmitResolver,
             getExportsOfModule: getExportsOfModuleAsArray,
             getExportsAndPropertiesOfModule: getExportsAndPropertiesOfModule,
-            getSymbolWalker: ts.createGetSymbolWalker(getRestTypeOfSignature, getTypePredicateOfSignature, getReturnTypeOfSignature, getBaseTypes, resolveStructuredTypeMembers, getTypeOfSymbol, getResolvedSymbol, getIndexTypeOfStructuredType, getConstraintOfTypeParameter, ts.getFirstIdentifier, getTypeArguments),
+            forEachExportAndPropertyOfModule: forEachExportAndPropertyOfModule,
+            getSymbolWalker: ts.createGetSymbolWalker(getRestTypeOfSignature, getTypePredicateOfSignature, getReturnTypeOfSignature, getBaseTypes, resolveStructuredTypeMembers, getTypeOfSymbol, getResolvedSymbol, getConstraintOfTypeParameter, ts.getFirstIdentifier, getTypeArguments),
             getAmbientModules: getAmbientModules,
             getJsxIntrinsicTagNamesAt: getJsxIntrinsicTagNamesAt,
             isOptionalParameter: function (nodeIn) {
@@ -45391,6 +46378,7 @@
             getSuggestionForNonexistentSymbol: function (location, name, meaning) { return getSuggestionForNonexistentSymbol(location, ts.escapeLeadingUnderscores(name), meaning); },
             getSuggestedSymbolForNonexistentModule: getSuggestedSymbolForNonexistentModule,
             getSuggestionForNonexistentExport: getSuggestionForNonexistentExport,
+            getSuggestedSymbolForNonexistentClassMember: getSuggestedSymbolForNonexistentClassMember,
             getBaseConstraintOfType: getBaseConstraintOfType,
             getDefaultFromTypeParameter: function (type) { return type && type.flags & 262144 /* TypeParameter */ ? getDefaultFromTypeParameter(type) : undefined; },
             resolveName: function (name, location, meaning, excludeGlobals) {
@@ -45464,7 +46452,10 @@
         var tupleTypes = new ts.Map();
         var unionTypes = new ts.Map();
         var intersectionTypes = new ts.Map();
-        var literalTypes = new ts.Map();
+        var stringLiteralTypes = new ts.Map();
+        var numberLiteralTypes = new ts.Map();
+        var bigIntLiteralTypes = new ts.Map();
+        var enumLiteralTypes = new ts.Map();
         var indexedAccessTypes = new ts.Map();
         var templateLiteralTypes = new ts.Map();
         var stringMappingTypes = new ts.Map();
@@ -45484,6 +46475,7 @@
         var undefinedType = createIntrinsicType(32768 /* Undefined */, "undefined");
         var undefinedWideningType = strictNullChecks ? undefinedType : createIntrinsicType(32768 /* Undefined */, "undefined", 131072 /* ContainsWideningType */);
         var optionalType = createIntrinsicType(32768 /* Undefined */, "undefined");
+        var missingType = exactOptionalPropertyTypes ? createIntrinsicType(32768 /* Undefined */, "undefined") : undefinedType;
         var nullType = createIntrinsicType(65536 /* Null */, "null");
         var nullWideningType = strictNullChecks ? nullType : createIntrinsicType(65536 /* Null */, "null", 131072 /* ContainsWideningType */);
         var stringType = createIntrinsicType(4 /* String */, "string");
@@ -45501,12 +46493,7 @@
         falseType.freshType = falseType;
         regularFalseType.regularType = regularFalseType;
         regularFalseType.freshType = falseType;
-        var booleanType = createBooleanType([regularFalseType, regularTrueType]);
-        // Also mark all combinations of fresh/regular booleans as "Boolean" so they print as `boolean` instead of `true | false`
-        // (The union is cached, so simply doing the marking here is sufficient)
-        createBooleanType([regularFalseType, trueType]);
-        createBooleanType([falseType, regularTrueType]);
-        createBooleanType([falseType, trueType]);
+        var booleanType = getUnionType([regularFalseType, regularTrueType]);
         var esSymbolType = createIntrinsicType(4096 /* ESSymbol */, "symbol");
         var voidType = createIntrinsicType(16384 /* Void */, "void");
         var neverType = createIntrinsicType(131072 /* Never */, "never");
@@ -45515,27 +46502,28 @@
         var implicitNeverType = createIntrinsicType(131072 /* Never */, "never");
         var unreachableNeverType = createIntrinsicType(131072 /* Never */, "never");
         var nonPrimitiveType = createIntrinsicType(67108864 /* NonPrimitive */, "object");
+        var stringOrNumberType = getUnionType([stringType, numberType]);
         var stringNumberSymbolType = getUnionType([stringType, numberType, esSymbolType]);
         var keyofConstraintType = keyofStringsOnly ? stringType : stringNumberSymbolType;
         var numberOrBigIntType = getUnionType([numberType, bigintType]);
         var templateConstraintType = getUnionType([stringType, numberType, booleanType, bigintType, nullType, undefinedType]);
         var restrictiveMapper = makeFunctionTypeMapper(function (t) { return t.flags & 262144 /* TypeParameter */ ? getRestrictiveTypeParameter(t) : t; });
         var permissiveMapper = makeFunctionTypeMapper(function (t) { return t.flags & 262144 /* TypeParameter */ ? wildcardType : t; });
-        var emptyObjectType = createAnonymousType(undefined, emptySymbols, ts.emptyArray, ts.emptyArray, undefined, undefined);
-        var emptyJsxObjectType = createAnonymousType(undefined, emptySymbols, ts.emptyArray, ts.emptyArray, undefined, undefined);
+        var emptyObjectType = createAnonymousType(undefined, emptySymbols, ts.emptyArray, ts.emptyArray, ts.emptyArray);
+        var emptyJsxObjectType = createAnonymousType(undefined, emptySymbols, ts.emptyArray, ts.emptyArray, ts.emptyArray);
         emptyJsxObjectType.objectFlags |= 2048 /* JsxAttributes */;
         var emptyTypeLiteralSymbol = createSymbol(2048 /* TypeLiteral */, "__type" /* Type */);
         emptyTypeLiteralSymbol.members = ts.createSymbolTable();
-        var emptyTypeLiteralType = createAnonymousType(emptyTypeLiteralSymbol, emptySymbols, ts.emptyArray, ts.emptyArray, undefined, undefined);
-        var emptyGenericType = createAnonymousType(undefined, emptySymbols, ts.emptyArray, ts.emptyArray, undefined, undefined);
+        var emptyTypeLiteralType = createAnonymousType(emptyTypeLiteralSymbol, emptySymbols, ts.emptyArray, ts.emptyArray, ts.emptyArray);
+        var emptyGenericType = createAnonymousType(undefined, emptySymbols, ts.emptyArray, ts.emptyArray, ts.emptyArray);
         emptyGenericType.instantiations = new ts.Map();
-        var anyFunctionType = createAnonymousType(undefined, emptySymbols, ts.emptyArray, ts.emptyArray, undefined, undefined);
+        var anyFunctionType = createAnonymousType(undefined, emptySymbols, ts.emptyArray, ts.emptyArray, ts.emptyArray);
         // The anyFunctionType contains the anyFunctionType by definition. The flag is further propagated
         // in getPropagatingFlagsOfTypes, and it is checked in inferFromTypes.
         anyFunctionType.objectFlags |= 524288 /* NonInferrableType */;
-        var noConstraintType = createAnonymousType(undefined, emptySymbols, ts.emptyArray, ts.emptyArray, undefined, undefined);
-        var circularConstraintType = createAnonymousType(undefined, emptySymbols, ts.emptyArray, ts.emptyArray, undefined, undefined);
-        var resolvingDefaultType = createAnonymousType(undefined, emptySymbols, ts.emptyArray, ts.emptyArray, undefined, undefined);
+        var noConstraintType = createAnonymousType(undefined, emptySymbols, ts.emptyArray, ts.emptyArray, ts.emptyArray);
+        var circularConstraintType = createAnonymousType(undefined, emptySymbols, ts.emptyArray, ts.emptyArray, ts.emptyArray);
+        var resolvingDefaultType = createAnonymousType(undefined, emptySymbols, ts.emptyArray, ts.emptyArray, ts.emptyArray);
         var markerSuperType = createTypeParameter();
         var markerSubType = createTypeParameter();
         markerSubType.constraint = markerSuperType;
@@ -45545,7 +46533,7 @@
         var unknownSignature = createSignature(undefined, undefined, undefined, ts.emptyArray, errorType, /*resolvedTypePredicate*/ undefined, 0, 0 /* None */);
         var resolvingSignature = createSignature(undefined, undefined, undefined, ts.emptyArray, anyType, /*resolvedTypePredicate*/ undefined, 0, 0 /* None */);
         var silentNeverSignature = createSignature(undefined, undefined, undefined, ts.emptyArray, silentNeverType, /*resolvedTypePredicate*/ undefined, 0, 0 /* None */);
-        var enumNumberIndexInfo = createIndexInfo(stringType, /*isReadonly*/ true);
+        var enumNumberIndexInfo = createIndexInfo(numberType, stringType, /*isReadonly*/ true);
         var iterationTypesCache = new ts.Map(); // cache for common IterationTypes instances
         var noIterationTypes = {
             get yieldType() { return ts.Debug.fail("Not supported"); },
@@ -45631,6 +46619,7 @@
         var deferredGlobalAsyncGeneratorType;
         var deferredGlobalTemplateStringsArrayType;
         var deferredGlobalImportMetaType;
+        var deferredGlobalImportMetaExpressionType;
         var deferredGlobalExtractSymbol;
         var deferredGlobalOmitSymbol;
         var deferredGlobalBigIntType;
@@ -45643,9 +46632,9 @@
         var lastFlowNode;
         var lastFlowNodeReachable;
         var flowTypeCache;
-        var emptyStringType = getLiteralType("");
-        var zeroType = getLiteralType(0);
-        var zeroBigIntType = getLiteralType({ negative: false, base10Value: "0" });
+        var emptyStringType = getStringLiteralType("");
+        var zeroType = getNumberLiteralType(0);
+        var zeroBigIntType = getBigIntLiteralType({ negative: false, base10Value: "0" });
         var resolutionTargets = [];
         var resolutionResults = [];
         var resolutionPropertyNames = [];
@@ -45665,6 +46654,7 @@
         var potentialThisCollisions = [];
         var potentialNewTargetCollisions = [];
         var potentialWeakMapSetCollisions = [];
+        var potentialReflectCollisions = [];
         var awaitedTypeStack = [];
         var diagnostics = ts.createDiagnosticCollection();
         var suggestionDiagnostics = ts.createDiagnosticCollection();
@@ -45775,10 +46765,13 @@
             diagnostic.skippedOn = key;
             return diagnostic;
         }
-        function error(location, message, arg0, arg1, arg2, arg3) {
-            var diagnostic = location
+        function createError(location, message, arg0, arg1, arg2, arg3) {
+            return location
                 ? ts.createDiagnosticForNode(location, message, arg0, arg1, arg2, arg3)
                 : ts.createCompilerDiagnostic(message, arg0, arg1, arg2, arg3);
+        }
+        function error(location, message, arg0, arg1, arg2, arg3) {
+            var diagnostic = createError(location, message, arg0, arg1, arg2, arg3);
             diagnostics.add(diagnostic);
             return diagnostic;
         }
@@ -45832,7 +46825,7 @@
         }
         function createSymbol(flags, name, checkFlags) {
             symbolCount++;
-            var symbol = (new Symbol(flags | 33554432 /* Transient */, name));
+            var symbol = new Symbol(flags | 33554432 /* Transient */, name);
             symbol.checkFlags = checkFlags || 0;
             return symbol;
         }
@@ -46111,7 +47104,7 @@
             return nodeLinks[nodeId] || (nodeLinks[nodeId] = new NodeLinks());
         }
         function isGlobalSourceFile(node) {
-            return node.kind === 298 /* SourceFile */ && !ts.isExternalOrCommonJsModule(node);
+            return node.kind === 300 /* SourceFile */ && !ts.isExternalOrCommonJsModule(node);
         }
         function getSymbol(symbols, name, meaning) {
             if (meaning) {
@@ -46170,17 +47163,17 @@
             }
             if (declaration.pos <= usage.pos && !(ts.isPropertyDeclaration(declaration) && ts.isThisProperty(usage.parent) && !declaration.initializer && !declaration.exclamationToken)) {
                 // declaration is before usage
-                if (declaration.kind === 199 /* BindingElement */) {
+                if (declaration.kind === 201 /* BindingElement */) {
                     // still might be illegal if declaration and usage are both binding elements (eg var [a = b, b = b] = [1, 2])
-                    var errorBindingElement = ts.getAncestor(usage, 199 /* BindingElement */);
+                    var errorBindingElement = ts.getAncestor(usage, 201 /* BindingElement */);
                     if (errorBindingElement) {
                         return ts.findAncestor(errorBindingElement, ts.isBindingElement) !== ts.findAncestor(declaration, ts.isBindingElement) ||
                             declaration.pos < errorBindingElement.pos;
                     }
                     // or it might be illegal if usage happens before parent variable is declared (eg var [a] = a)
-                    return isBlockScopedNameDeclaredBeforeUse(ts.getAncestor(declaration, 250 /* VariableDeclaration */), usage);
+                    return isBlockScopedNameDeclaredBeforeUse(ts.getAncestor(declaration, 252 /* VariableDeclaration */), usage);
                 }
-                else if (declaration.kind === 250 /* VariableDeclaration */) {
+                else if (declaration.kind === 252 /* VariableDeclaration */) {
                     // still might be illegal if usage is in the initializer of the variable declaration (eg var a = a)
                     return !isImmediatelyUsedInInitializerOfBlockScopedVariable(declaration, usage);
                 }
@@ -46210,12 +47203,12 @@
             // or if usage is in a type context:
             // 1. inside a type query (typeof in type position)
             // 2. inside a jsdoc comment
-            if (usage.parent.kind === 271 /* ExportSpecifier */ || (usage.parent.kind === 267 /* ExportAssignment */ && usage.parent.isExportEquals)) {
+            if (usage.parent.kind === 273 /* ExportSpecifier */ || (usage.parent.kind === 269 /* ExportAssignment */ && usage.parent.isExportEquals)) {
                 // export specifiers do not use the variable, they only make it available for use
                 return true;
             }
             // When resolving symbols for exports, the `usage` location passed in can be the export site directly
-            if (usage.kind === 267 /* ExportAssignment */ && usage.isExportEquals) {
+            if (usage.kind === 269 /* ExportAssignment */ && usage.isExportEquals) {
                 return true;
             }
             if (!!(usage.flags & 4194304 /* JSDoc */) || isInTypeQuery(usage) || usageInTypeDeclaration()) {
@@ -46237,9 +47230,9 @@
             }
             function isImmediatelyUsedInInitializerOfBlockScopedVariable(declaration, usage) {
                 switch (declaration.parent.parent.kind) {
-                    case 233 /* VariableStatement */:
-                    case 238 /* ForStatement */:
-                    case 240 /* ForOfStatement */:
+                    case 235 /* VariableStatement */:
+                    case 240 /* ForStatement */:
+                    case 242 /* ForOfStatement */:
                         // variable statement/for/for-of statement case,
                         // use site should not be inside variable declaration (initializer of declaration or binding element)
                         if (isSameScopeDescendentOf(usage, declaration, declContainer)) {
@@ -46259,19 +47252,33 @@
                     if (ts.isFunctionLike(current)) {
                         return true;
                     }
-                    var initializerOfProperty = current.parent &&
-                        current.parent.kind === 164 /* PropertyDeclaration */ &&
-                        current.parent.initializer === current;
-                    if (initializerOfProperty) {
-                        if (ts.hasSyntacticModifier(current.parent, 32 /* Static */)) {
-                            if (declaration.kind === 166 /* MethodDeclaration */) {
-                                return true;
+                    if (ts.isClassStaticBlockDeclaration(current)) {
+                        return declaration.pos < usage.pos;
+                    }
+                    var propertyDeclaration = ts.tryCast(current.parent, ts.isPropertyDeclaration);
+                    if (propertyDeclaration) {
+                        var initializerOfProperty = propertyDeclaration.initializer === current;
+                        if (initializerOfProperty) {
+                            if (ts.isStatic(current.parent)) {
+                                if (declaration.kind === 167 /* MethodDeclaration */) {
+                                    return true;
+                                }
+                                if (ts.isPropertyDeclaration(declaration) && ts.getContainingClass(usage) === ts.getContainingClass(declaration)) {
+                                    var propName = declaration.name;
+                                    if (ts.isIdentifier(propName) || ts.isPrivateIdentifier(propName)) {
+                                        var type = getTypeOfSymbol(getSymbolOfNode(declaration));
+                                        var staticBlocks = ts.filter(declaration.parent.members, ts.isClassStaticBlockDeclaration);
+                                        if (isPropertyInitializedInStaticBlocks(propName, type, staticBlocks, declaration.parent.pos, current.pos)) {
+                                            return true;
+                                        }
+                                    }
+                                }
                             }
-                        }
-                        else {
-                            var isDeclarationInstanceProperty = declaration.kind === 164 /* PropertyDeclaration */ && !ts.hasSyntacticModifier(declaration, 32 /* Static */);
-                            if (!isDeclarationInstanceProperty || ts.getContainingClass(usage) !== ts.getContainingClass(declaration)) {
-                                return true;
+                            else {
+                                var isDeclarationInstanceProperty = declaration.kind === 165 /* PropertyDeclaration */ && !ts.isStatic(declaration);
+                                if (!isDeclarationInstanceProperty || ts.getContainingClass(usage) !== ts.getContainingClass(declaration)) {
+                                    return true;
+                                }
                             }
                         }
                     }
@@ -46291,19 +47298,19 @@
                         return "quit";
                     }
                     switch (node.kind) {
-                        case 210 /* ArrowFunction */:
+                        case 212 /* ArrowFunction */:
                             return true;
-                        case 164 /* PropertyDeclaration */:
+                        case 165 /* PropertyDeclaration */:
                             // even when stopping at any property declaration, they need to come from the same class
                             return stopAtAnyPropertyDeclaration &&
                                 (ts.isPropertyDeclaration(declaration) && node.parent === declaration.parent
                                     || ts.isParameterPropertyDeclaration(declaration, declaration.parent) && node.parent === declaration.parent.parent)
                                 ? "quit" : true;
-                        case 231 /* Block */:
+                        case 233 /* Block */:
                             switch (node.parent.kind) {
-                                case 168 /* GetAccessor */:
-                                case 166 /* MethodDeclaration */:
-                                case 169 /* SetAccessor */:
+                                case 170 /* GetAccessor */:
+                                case 167 /* MethodDeclaration */:
+                                case 171 /* SetAccessor */:
                                     return true;
                                 default:
                                     return false;
@@ -46343,18 +47350,18 @@
             }
             function requiresScopeChangeWorker(node) {
                 switch (node.kind) {
-                    case 210 /* ArrowFunction */:
-                    case 209 /* FunctionExpression */:
-                    case 252 /* FunctionDeclaration */:
-                    case 167 /* Constructor */:
+                    case 212 /* ArrowFunction */:
+                    case 211 /* FunctionExpression */:
+                    case 254 /* FunctionDeclaration */:
+                    case 169 /* Constructor */:
                         // do not descend into these
                         return false;
-                    case 166 /* MethodDeclaration */:
-                    case 168 /* GetAccessor */:
-                    case 169 /* SetAccessor */:
-                    case 289 /* PropertyAssignment */:
+                    case 167 /* MethodDeclaration */:
+                    case 170 /* GetAccessor */:
+                    case 171 /* SetAccessor */:
+                    case 291 /* PropertyAssignment */:
                         return requiresScopeChangeWorker(node.name);
-                    case 164 /* PropertyDeclaration */:
+                    case 165 /* PropertyDeclaration */:
                         // static properties in classes introduce temporary variables
                         if (ts.hasStaticModifier(node)) {
                             return target < 99 /* ESNext */ || !useDefineForClassFields;
@@ -46381,11 +47388,11 @@
          *
          * @param isUse If true, this will count towards --noUnusedLocals / --noUnusedParameters.
          */
-        function resolveName(location, name, meaning, nameNotFoundMessage, nameArg, isUse, excludeGlobals, suggestedNameNotFoundMessage) {
+        function resolveName(location, name, meaning, nameNotFoundMessage, nameArg, isUse, excludeGlobals, issueSuggestions) {
             if (excludeGlobals === void 0) { excludeGlobals = false; }
-            return resolveNameHelper(location, name, meaning, nameNotFoundMessage, nameArg, isUse, excludeGlobals, getSymbol, suggestedNameNotFoundMessage);
+            return resolveNameHelper(location, name, meaning, nameNotFoundMessage, nameArg, isUse, excludeGlobals, getSymbol, issueSuggestions);
         }
-        function resolveNameHelper(location, name, meaning, nameNotFoundMessage, nameArg, isUse, excludeGlobals, lookup, suggestedNameNotFoundMessage) {
+        function resolveNameHelper(location, name, meaning, nameNotFoundMessage, nameArg, isUse, excludeGlobals, lookup, issueSuggestions) {
             var _a;
             var originalLocation = location; // needed for did-you-mean error reporting, which gathers candidates starting from the original location
             var result;
@@ -46409,12 +47416,12 @@
                             // - parameters are only in the scope of function body
                             // This restriction does not apply to JSDoc comment types because they are parented
                             // at a higher level than type parameters would normally be
-                            if (meaning & result.flags & 788968 /* Type */ && lastLocation.kind !== 312 /* JSDocComment */) {
+                            if (meaning & result.flags & 788968 /* Type */ && lastLocation.kind !== 315 /* JSDocComment */) {
                                 useResult = result.flags & 262144 /* TypeParameter */
                                     // type parameters are visible in parameter list, return type and type parameter list
                                     ? lastLocation === location.type ||
-                                        lastLocation.kind === 161 /* Parameter */ ||
-                                        lastLocation.kind === 160 /* TypeParameter */
+                                        lastLocation.kind === 162 /* Parameter */ ||
+                                        lastLocation.kind === 161 /* TypeParameter */
                                     // local types not visible outside the function body
                                     : false;
                             }
@@ -46429,13 +47436,13 @@
                                     // however it is detected separately when checking initializers of parameters
                                     // to make sure that they reference no variables declared after them.
                                     useResult =
-                                        lastLocation.kind === 161 /* Parameter */ ||
+                                        lastLocation.kind === 162 /* Parameter */ ||
                                             (lastLocation === location.type &&
                                                 !!ts.findAncestor(result.valueDeclaration, ts.isParameter));
                                 }
                             }
                         }
-                        else if (location.kind === 185 /* ConditionalType */) {
+                        else if (location.kind === 187 /* ConditionalType */) {
                             // A type parameter declared using 'infer T' in a conditional type is visible only in
                             // the true branch of the conditional type.
                             useResult = lastLocation === location.trueType;
@@ -46450,14 +47457,14 @@
                 }
                 withinDeferredContext = withinDeferredContext || getIsDeferredContext(location, lastLocation);
                 switch (location.kind) {
-                    case 298 /* SourceFile */:
+                    case 300 /* SourceFile */:
                         if (!ts.isExternalOrCommonJsModule(location))
                             break;
                         isInExternalModule = true;
                     // falls through
-                    case 257 /* ModuleDeclaration */:
+                    case 259 /* ModuleDeclaration */:
                         var moduleExports = getSymbolOfNode(location).exports || emptySymbols;
-                        if (location.kind === 298 /* SourceFile */ || (ts.isModuleDeclaration(location) && location.flags & 8388608 /* Ambient */ && !ts.isGlobalScopeAugmentation(location))) {
+                        if (location.kind === 300 /* SourceFile */ || (ts.isModuleDeclaration(location) && location.flags & 8388608 /* Ambient */ && !ts.isGlobalScopeAugmentation(location))) {
                             // It's an external module. First see if the module has an export default and if the local
                             // name of that export default matches.
                             if (result = moduleExports.get("default" /* Default */)) {
@@ -46481,7 +47488,7 @@
                             var moduleExport = moduleExports.get(name);
                             if (moduleExport &&
                                 moduleExport.flags === 2097152 /* Alias */ &&
-                                (ts.getDeclarationOfKind(moduleExport, 271 /* ExportSpecifier */) || ts.getDeclarationOfKind(moduleExport, 270 /* NamespaceExport */))) {
+                                (ts.getDeclarationOfKind(moduleExport, 273 /* ExportSpecifier */) || ts.getDeclarationOfKind(moduleExport, 272 /* NamespaceExport */))) {
                                 break;
                             }
                         }
@@ -46495,19 +47502,19 @@
                             }
                         }
                         break;
-                    case 256 /* EnumDeclaration */:
+                    case 258 /* EnumDeclaration */:
                         if (result = lookup(getSymbolOfNode(location).exports, name, meaning & 8 /* EnumMember */)) {
                             break loop;
                         }
                         break;
-                    case 164 /* PropertyDeclaration */:
+                    case 165 /* PropertyDeclaration */:
                         // TypeScript 1.0 spec (April 2014): 8.4.1
                         // Initializer expressions for instance member variables are evaluated in the scope
                         // of the class constructor body but are not permitted to reference parameters or
                         // local variables of the constructor. This effectively means that entities from outer scopes
                         // by the same name as a constructor parameter or local variable are inaccessible
                         // in initializer expressions for instance member variables.
-                        if (!ts.hasSyntacticModifier(location, 32 /* Static */)) {
+                        if (!ts.isStatic(location)) {
                             var ctor = findConstructorDeclaration(location.parent);
                             if (ctor && ctor.locals) {
                                 if (lookup(ctor.locals, name, meaning & 111551 /* Value */)) {
@@ -46517,9 +47524,9 @@
                             }
                         }
                         break;
-                    case 253 /* ClassDeclaration */:
-                    case 222 /* ClassExpression */:
-                    case 254 /* InterfaceDeclaration */:
+                    case 255 /* ClassDeclaration */:
+                    case 224 /* ClassExpression */:
+                    case 256 /* InterfaceDeclaration */:
                         // The below is used to lookup type parameters within a class or interface, as they are added to the class/interface locals
                         // These can never be latebound, so the symbol's raw members are sufficient. `getMembersOfNode` cannot be used, as it would
                         // trigger resolving late-bound names, which we may already be in the process of doing while we're here!
@@ -46529,7 +47536,7 @@
                                 result = undefined;
                                 break;
                             }
-                            if (lastLocation && ts.hasSyntacticModifier(lastLocation, 32 /* Static */)) {
+                            if (lastLocation && ts.isStatic(lastLocation)) {
                                 // TypeScript 1.0 spec (April 2014): 3.4.1
                                 // The scope of a type parameter extends over the entire declaration with which the type
                                 // parameter list is associated, with the exception of static member declarations in classes.
@@ -46538,7 +47545,7 @@
                             }
                             break loop;
                         }
-                        if (location.kind === 222 /* ClassExpression */ && meaning & 32 /* Class */) {
+                        if (location.kind === 224 /* ClassExpression */ && meaning & 32 /* Class */) {
                             var className = location.name;
                             if (className && name === className.escapedText) {
                                 result = location.symbol;
@@ -46546,9 +47553,9 @@
                             }
                         }
                         break;
-                    case 224 /* ExpressionWithTypeArguments */:
+                    case 226 /* ExpressionWithTypeArguments */:
                         // The type parameters of a class are not in scope in the base class expression.
-                        if (lastLocation === location.expression && location.parent.token === 93 /* ExtendsKeyword */) {
+                        if (lastLocation === location.expression && location.parent.token === 94 /* ExtendsKeyword */) {
                             var container = location.parent.parent;
                             if (ts.isClassLike(container) && (result = lookup(getSymbolOfNode(container).members, name, meaning & 788968 /* Type */))) {
                                 if (nameNotFoundMessage) {
@@ -46566,9 +47573,9 @@
                     //       [foo<T>()]() { } // <-- Reference to T from class's own computed property
                     //   }
                     //
-                    case 159 /* ComputedPropertyName */:
+                    case 160 /* ComputedPropertyName */:
                         grandparent = location.parent.parent;
-                        if (ts.isClassLike(grandparent) || grandparent.kind === 254 /* InterfaceDeclaration */) {
+                        if (ts.isClassLike(grandparent) || grandparent.kind === 256 /* InterfaceDeclaration */) {
                             // A reference to this grandparent's type parameters would be an error
                             if (result = lookup(getSymbolOfNode(grandparent).members, name, meaning & 788968 /* Type */)) {
                                 error(errorLocation, ts.Diagnostics.A_computed_property_name_cannot_reference_a_type_parameter_from_its_containing_type);
@@ -46576,24 +47583,24 @@
                             }
                         }
                         break;
-                    case 210 /* ArrowFunction */:
+                    case 212 /* ArrowFunction */:
                         // when targeting ES6 or higher there is no 'arguments' in an arrow function
                         // for lower compile targets the resolved symbol is used to emit an error
                         if (compilerOptions.target >= 2 /* ES2015 */) {
                             break;
                         }
                     // falls through
-                    case 166 /* MethodDeclaration */:
-                    case 167 /* Constructor */:
-                    case 168 /* GetAccessor */:
-                    case 169 /* SetAccessor */:
-                    case 252 /* FunctionDeclaration */:
+                    case 167 /* MethodDeclaration */:
+                    case 169 /* Constructor */:
+                    case 170 /* GetAccessor */:
+                    case 171 /* SetAccessor */:
+                    case 254 /* FunctionDeclaration */:
                         if (meaning & 3 /* Variable */ && name === "arguments") {
                             result = argumentsSymbol;
                             break loop;
                         }
                         break;
-                    case 209 /* FunctionExpression */:
+                    case 211 /* FunctionExpression */:
                         if (meaning & 3 /* Variable */ && name === "arguments") {
                             result = argumentsSymbol;
                             break loop;
@@ -46606,7 +47613,7 @@
                             }
                         }
                         break;
-                    case 162 /* Decorator */:
+                    case 163 /* Decorator */:
                         // Decorators are resolved at the class declaration. Resolving at the parameter
                         // or member would result in looking up locals in the method.
                         //
@@ -46615,7 +47622,7 @@
                         //       method(@y x, y) {} // <-- decorator y should be resolved at the class declaration, not the parameter.
                         //   }
                         //
-                        if (location.parent && location.parent.kind === 161 /* Parameter */) {
+                        if (location.parent && location.parent.kind === 162 /* Parameter */) {
                             location = location.parent;
                         }
                         //
@@ -46630,20 +47637,20 @@
                         //   declare function y(x: T): any;
                         //   @param(1 as T) // <-- T should resolve to the type alias outside of class C
                         //   class C<T> {}
-                        if (location.parent && (ts.isClassElement(location.parent) || location.parent.kind === 253 /* ClassDeclaration */)) {
+                        if (location.parent && (ts.isClassElement(location.parent) || location.parent.kind === 255 /* ClassDeclaration */)) {
                             location = location.parent;
                         }
                         break;
-                    case 335 /* JSDocTypedefTag */:
-                    case 328 /* JSDocCallbackTag */:
-                    case 329 /* JSDocEnumTag */:
+                    case 340 /* JSDocTypedefTag */:
+                    case 333 /* JSDocCallbackTag */:
+                    case 334 /* JSDocEnumTag */:
                         // js type aliases do not resolve names from their host, so skip past it
                         var root = ts.getJSDocRoot(location);
                         if (root) {
                             location = root.parent;
                         }
                         break;
-                    case 161 /* Parameter */:
+                    case 162 /* Parameter */:
                         if (lastLocation && (lastLocation === location.initializer ||
                             lastLocation === location.name && ts.isBindingPattern(lastLocation))) {
                             if (!associatedDeclarationForContainingInitializerOrBindingName) {
@@ -46651,7 +47658,7 @@
                             }
                         }
                         break;
-                    case 199 /* BindingElement */:
+                    case 201 /* BindingElement */:
                         if (lastLocation && (lastLocation === location.initializer ||
                             lastLocation === location.name && ts.isBindingPattern(lastLocation))) {
                             if (ts.isParameterDeclaration(location) && !associatedDeclarationForContainingInitializerOrBindingName) {
@@ -46659,7 +47666,7 @@
                             }
                         }
                         break;
-                    case 186 /* InferType */:
+                    case 188 /* InferType */:
                         if (meaning & 262144 /* TypeParameter */) {
                             var parameterName = location.typeParameter.name;
                             if (parameterName && name === parameterName.escapedText) {
@@ -46683,7 +47690,7 @@
             }
             if (!result) {
                 if (lastLocation) {
-                    ts.Debug.assert(lastLocation.kind === 298 /* SourceFile */);
+                    ts.Debug.assert(lastLocation.kind === 300 /* SourceFile */);
                     if (lastLocation.commonJsModuleIndicator && name === "exports" && meaning & lastLocation.symbol.flags) {
                         return lastLocation.symbol;
                     }
@@ -46710,15 +47717,18 @@
                             !checkAndReportErrorForUsingNamespaceModuleAsValue(errorLocation, name, meaning) &&
                             !checkAndReportErrorForUsingValueAsType(errorLocation, name, meaning)) {
                         var suggestion = void 0;
-                        if (suggestedNameNotFoundMessage && suggestionCount < maximumSuggestionCount) {
+                        if (issueSuggestions && suggestionCount < maximumSuggestionCount) {
                             suggestion = getSuggestedSymbolForNonexistentSymbol(originalLocation, name, meaning);
-                            var isGlobalScopeAugmentationDeclaration = suggestion && suggestion.valueDeclaration && ts.isAmbientModule(suggestion.valueDeclaration) && ts.isGlobalScopeAugmentation(suggestion.valueDeclaration);
+                            var isGlobalScopeAugmentationDeclaration = (suggestion === null || suggestion === void 0 ? void 0 : suggestion.valueDeclaration) && ts.isAmbientModule(suggestion.valueDeclaration) && ts.isGlobalScopeAugmentation(suggestion.valueDeclaration);
                             if (isGlobalScopeAugmentationDeclaration) {
                                 suggestion = undefined;
                             }
                             if (suggestion) {
                                 var suggestionName = symbolToString(suggestion);
-                                var diagnostic = error(errorLocation, suggestedNameNotFoundMessage, diagnosticName(nameArg), suggestionName);
+                                var isUncheckedJS = isUncheckedJSSuggestion(originalLocation, suggestion, /*excludeClasses*/ false);
+                                var message = isUncheckedJS ? ts.Diagnostics.Could_not_find_name_0_Did_you_mean_1 : ts.Diagnostics.Cannot_find_name_0_Did_you_mean_1;
+                                var diagnostic = createError(errorLocation, message, diagnosticName(nameArg), suggestionName);
+                                addErrorOrSuggestion(!isUncheckedJS, diagnostic);
                                 if (suggestion.valueDeclaration) {
                                     ts.addRelatedInfo(diagnostic, ts.createDiagnosticForNode(suggestion.valueDeclaration, ts.Diagnostics._0_is_declared_here, suggestionName));
                                 }
@@ -46812,10 +47822,10 @@
             }
         }
         function getIsDeferredContext(location, lastLocation) {
-            if (location.kind !== 210 /* ArrowFunction */ && location.kind !== 209 /* FunctionExpression */) {
+            if (location.kind !== 212 /* ArrowFunction */ && location.kind !== 211 /* FunctionExpression */) {
                 // initializers in instance property declaration of class like entities are executed in constructor and thus deferred
                 return ts.isTypeQueryNode(location) || ((ts.isFunctionLikeDeclaration(location) ||
-                    (location.kind === 164 /* PropertyDeclaration */ && !ts.hasSyntacticModifier(location, 32 /* Static */))) && (!lastLocation || lastLocation !== location.name)); // A name is evaluated within the enclosing scope - so it shouldn't count as deferred
+                    (location.kind === 165 /* PropertyDeclaration */ && !ts.isStatic(location))) && (!lastLocation || lastLocation !== location.name)); // A name is evaluated within the enclosing scope - so it shouldn't count as deferred
             }
             if (lastLocation && lastLocation === location.name) {
                 return false;
@@ -46828,12 +47838,12 @@
         }
         function isSelfReferenceLocation(node) {
             switch (node.kind) {
-                case 252 /* FunctionDeclaration */:
-                case 253 /* ClassDeclaration */:
-                case 254 /* InterfaceDeclaration */:
-                case 256 /* EnumDeclaration */:
-                case 255 /* TypeAliasDeclaration */:
-                case 257 /* ModuleDeclaration */: // For `namespace N { N; }`
+                case 254 /* FunctionDeclaration */:
+                case 255 /* ClassDeclaration */:
+                case 256 /* InterfaceDeclaration */:
+                case 258 /* EnumDeclaration */:
+                case 257 /* TypeAliasDeclaration */:
+                case 259 /* ModuleDeclaration */: // For `namespace N { N; }`
                     return true;
                 default:
                     return false;
@@ -46846,7 +47856,7 @@
             if (symbol.declarations) {
                 for (var _i = 0, _a = symbol.declarations; _i < _a.length; _i++) {
                     var decl = _a[_i];
-                    if (decl.kind === 160 /* TypeParameter */) {
+                    if (decl.kind === 161 /* TypeParameter */) {
                         var parent = ts.isJSDocTemplateTag(decl.parent) ? ts.getJSDocHost(decl.parent) : decl.parent;
                         if (parent === container) {
                             return !(ts.isJSDocTemplateTag(decl.parent) && ts.find(decl.parent.parent.tags, ts.isJSDocTypeAlias)); // TODO: GH#18217
@@ -46876,7 +47886,7 @@
                     }
                     // No static member is present.
                     // Check if we're in an instance method and look for a relevant instance member.
-                    if (location === container && !ts.hasSyntacticModifier(location, 32 /* Static */)) {
+                    if (location === container && !ts.isStatic(location)) {
                         var instanceType = getDeclaredTypeOfSymbol(classSymbol).thisType; // TODO: GH#18217
                         if (getPropertyOfType(instanceType, name)) {
                             error(errorLocation, ts.Diagnostics.Cannot_find_name_0_Did_you_mean_the_instance_member_this_0, diagnosticName(nameArg));
@@ -46902,10 +47912,10 @@
          */
         function getEntityNameForExtendingInterface(node) {
             switch (node.kind) {
-                case 78 /* Identifier */:
-                case 202 /* PropertyAccessExpression */:
+                case 79 /* Identifier */:
+                case 204 /* PropertyAccessExpression */:
                     return node.parent ? getEntityNameForExtendingInterface(node.parent) : undefined;
-                case 224 /* ExpressionWithTypeArguments */:
+                case 226 /* ExpressionWithTypeArguments */:
                     if (ts.isEntityNameExpression(node.expression)) {
                         return node.expression;
                     }
@@ -46949,7 +47959,7 @@
             return name === "any" || name === "string" || name === "number" || name === "boolean" || name === "never" || name === "unknown";
         }
         function checkAndReportErrorForExportingPrimitiveType(errorLocation, name) {
-            if (isPrimitiveTypeName(name) && errorLocation.parent.kind === 271 /* ExportSpecifier */) {
+            if (isPrimitiveTypeName(name) && errorLocation.parent.kind === 273 /* ExportSpecifier */) {
                 error(errorLocation, ts.Diagnostics.Cannot_export_0_Only_local_declarations_can_be_exported_from_a_module, name);
                 return true;
             }
@@ -47025,7 +48035,7 @@
                 return;
             }
             // Block-scoped variables cannot be used before their definition
-            var declaration = (_a = result.declarations) === null || _a === void 0 ? void 0 : _a.find(function (d) { return ts.isBlockOrCatchScoped(d) || ts.isClassLike(d) || (d.kind === 256 /* EnumDeclaration */); });
+            var declaration = (_a = result.declarations) === null || _a === void 0 ? void 0 : _a.find(function (d) { return ts.isBlockOrCatchScoped(d) || ts.isClassLike(d) || (d.kind === 258 /* EnumDeclaration */); });
             if (declaration === undefined)
                 return ts.Debug.fail("checkResolvedBlockScopedVariable could not find block-scoped declaration");
             if (!(declaration.flags & 8388608 /* Ambient */) && !isBlockScopedNameDeclaredBeforeUse(declaration, errorLocation)) {
@@ -47060,13 +48070,13 @@
         }
         function getAnyImportSyntax(node) {
             switch (node.kind) {
-                case 261 /* ImportEqualsDeclaration */:
+                case 263 /* ImportEqualsDeclaration */:
                     return node;
-                case 263 /* ImportClause */:
+                case 265 /* ImportClause */:
                     return node.parent;
-                case 264 /* NamespaceImport */:
+                case 266 /* NamespaceImport */:
                     return node.parent.parent;
-                case 266 /* ImportSpecifier */:
+                case 268 /* ImportSpecifier */:
                     return node.parent.parent.parent;
                 default:
                     return undefined;
@@ -47091,22 +48101,22 @@
          * const { x } = require ...
          */
         function isAliasSymbolDeclaration(node) {
-            return node.kind === 261 /* ImportEqualsDeclaration */
-                || node.kind === 260 /* NamespaceExportDeclaration */
-                || node.kind === 263 /* ImportClause */ && !!node.name
-                || node.kind === 264 /* NamespaceImport */
-                || node.kind === 270 /* NamespaceExport */
-                || node.kind === 266 /* ImportSpecifier */
-                || node.kind === 271 /* ExportSpecifier */
-                || node.kind === 267 /* ExportAssignment */ && ts.exportAssignmentIsAlias(node)
+            return node.kind === 263 /* ImportEqualsDeclaration */
+                || node.kind === 262 /* NamespaceExportDeclaration */
+                || node.kind === 265 /* ImportClause */ && !!node.name
+                || node.kind === 266 /* NamespaceImport */
+                || node.kind === 272 /* NamespaceExport */
+                || node.kind === 268 /* ImportSpecifier */
+                || node.kind === 273 /* ExportSpecifier */
+                || node.kind === 269 /* ExportAssignment */ && ts.exportAssignmentIsAlias(node)
                 || ts.isBinaryExpression(node) && ts.getAssignmentDeclarationKind(node) === 2 /* ModuleExports */ && ts.exportAssignmentIsAlias(node)
                 || ts.isAccessExpression(node)
                     && ts.isBinaryExpression(node.parent)
                     && node.parent.left === node
-                    && node.parent.operatorToken.kind === 62 /* EqualsToken */
+                    && node.parent.operatorToken.kind === 63 /* EqualsToken */
                     && isAliasableOrJsExpression(node.parent.right)
-                || node.kind === 290 /* ShorthandPropertyAssignment */
-                || node.kind === 289 /* PropertyAssignment */ && isAliasableOrJsExpression(node.initializer)
+                || node.kind === 292 /* ShorthandPropertyAssignment */
+                || node.kind === 291 /* PropertyAssignment */ && isAliasableOrJsExpression(node.initializer)
                 || ts.isRequireVariableDeclaration(node);
         }
         function isAliasableOrJsExpression(e) {
@@ -47120,7 +48130,7 @@
                     ? resolveSymbol(getPropertyOfType(resolveExternalModuleTypeByLiteral(name), commonJSPropertyAccess.name.escapedText))
                     : undefined;
             }
-            if (ts.isVariableDeclaration(node) || node.moduleReference.kind === 273 /* ExternalModuleReference */) {
+            if (ts.isVariableDeclaration(node) || node.moduleReference.kind === 275 /* ExternalModuleReference */) {
                 var immediate = resolveExternalModuleName(node, ts.getExternalModuleRequireArgument(node) || ts.getExternalModuleImportEqualsDeclarationExpression(node));
                 var resolved_4 = resolveExternalModuleSymbol(immediate);
                 markSymbolOfAliasDeclarationIfTypeOnly(node, immediate, resolved_4, /*overwriteEmpty*/ false);
@@ -47386,7 +48396,7 @@
                     if (localSymbol.declarations) {
                         ts.addRelatedInfo.apply(void 0, __spreadArray([diagnostic], ts.map(localSymbol.declarations, function (decl, index) {
                             return ts.createDiagnosticForNode(decl, index === 0 ? ts.Diagnostics._0_is_declared_here : ts.Diagnostics.and_here, declarationName);
-                        })));
+                        }), false));
                     }
                 }
             }
@@ -47466,7 +48476,7 @@
             return getTargetOfAliasLikeExpression(expression, dontRecursivelyResolve);
         }
         function getTargetOfAccessExpression(node, dontRecursivelyResolve) {
-            if (!(ts.isBinaryExpression(node.parent) && node.parent.left === node && node.parent.operatorToken.kind === 62 /* EqualsToken */)) {
+            if (!(ts.isBinaryExpression(node.parent) && node.parent.left === node && node.parent.operatorToken.kind === 63 /* EqualsToken */)) {
                 return undefined;
             }
             return getTargetOfAliasLikeExpression(node.parent.right, dontRecursivelyResolve);
@@ -47474,31 +48484,31 @@
         function getTargetOfAliasDeclaration(node, dontRecursivelyResolve) {
             if (dontRecursivelyResolve === void 0) { dontRecursivelyResolve = false; }
             switch (node.kind) {
-                case 261 /* ImportEqualsDeclaration */:
-                case 250 /* VariableDeclaration */:
+                case 263 /* ImportEqualsDeclaration */:
+                case 252 /* VariableDeclaration */:
                     return getTargetOfImportEqualsDeclaration(node, dontRecursivelyResolve);
-                case 263 /* ImportClause */:
+                case 265 /* ImportClause */:
                     return getTargetOfImportClause(node, dontRecursivelyResolve);
-                case 264 /* NamespaceImport */:
+                case 266 /* NamespaceImport */:
                     return getTargetOfNamespaceImport(node, dontRecursivelyResolve);
-                case 270 /* NamespaceExport */:
+                case 272 /* NamespaceExport */:
                     return getTargetOfNamespaceExport(node, dontRecursivelyResolve);
-                case 266 /* ImportSpecifier */:
-                case 199 /* BindingElement */:
+                case 268 /* ImportSpecifier */:
+                case 201 /* BindingElement */:
                     return getTargetOfImportSpecifier(node, dontRecursivelyResolve);
-                case 271 /* ExportSpecifier */:
+                case 273 /* ExportSpecifier */:
                     return getTargetOfExportSpecifier(node, 111551 /* Value */ | 788968 /* Type */ | 1920 /* Namespace */, dontRecursivelyResolve);
-                case 267 /* ExportAssignment */:
-                case 217 /* BinaryExpression */:
+                case 269 /* ExportAssignment */:
+                case 219 /* BinaryExpression */:
                     return getTargetOfExportAssignment(node, dontRecursivelyResolve);
-                case 260 /* NamespaceExportDeclaration */:
+                case 262 /* NamespaceExportDeclaration */:
                     return getTargetOfNamespaceExportDeclaration(node, dontRecursivelyResolve);
-                case 290 /* ShorthandPropertyAssignment */:
+                case 292 /* ShorthandPropertyAssignment */:
                     return resolveEntityName(node.name, 111551 /* Value */ | 788968 /* Type */ | 1920 /* Namespace */, /*ignoreErrors*/ true, dontRecursivelyResolve);
-                case 289 /* PropertyAssignment */:
+                case 291 /* PropertyAssignment */:
                     return getTargetOfPropertyAssignment(node, dontRecursivelyResolve);
-                case 203 /* ElementAccessExpression */:
-                case 202 /* PropertyAccessExpression */:
+                case 205 /* ElementAccessExpression */:
+                case 204 /* PropertyAccessExpression */:
                     return getTargetOfAccessExpression(node, dontRecursivelyResolve);
                 default:
                     return ts.Debug.fail();
@@ -47646,17 +48656,17 @@
             //     import a = |b|; // Namespace
             //     import a = |b.c|; // Value, type, namespace
             //     import a = |b.c|.d; // Namespace
-            if (entityName.kind === 78 /* Identifier */ && ts.isRightSideOfQualifiedNameOrPropertyAccess(entityName)) {
+            if (entityName.kind === 79 /* Identifier */ && ts.isRightSideOfQualifiedNameOrPropertyAccess(entityName)) {
                 entityName = entityName.parent;
             }
             // Check for case 1 and 3 in the above example
-            if (entityName.kind === 78 /* Identifier */ || entityName.parent.kind === 158 /* QualifiedName */) {
+            if (entityName.kind === 79 /* Identifier */ || entityName.parent.kind === 159 /* QualifiedName */) {
                 return resolveEntityName(entityName, 1920 /* Namespace */, /*ignoreErrors*/ false, dontResolveAlias);
             }
             else {
                 // Case 2 in above example
                 // entityName.kind could be a QualifiedName or a Missing identifier
-                ts.Debug.assert(entityName.parent.kind === 261 /* ImportEqualsDeclaration */);
+                ts.Debug.assert(entityName.parent.kind === 263 /* ImportEqualsDeclaration */);
                 return resolveEntityName(entityName, 111551 /* Value */ | 788968 /* Type */ | 1920 /* Namespace */, /*ignoreErrors*/ false, dontResolveAlias);
             }
         }
@@ -47672,7 +48682,7 @@
             }
             var namespaceMeaning = 1920 /* Namespace */ | (ts.isInJSFile(name) ? meaning & 111551 /* Value */ : 0);
             var symbol;
-            if (name.kind === 78 /* Identifier */) {
+            if (name.kind === 79 /* Identifier */) {
                 var message = meaning === namespaceMeaning || ts.nodeIsSynthesized(name) ? ts.Diagnostics.Cannot_find_namespace_0 : getCannotFindNameDiagnosticForName(ts.getFirstIdentifier(name));
                 var symbolFromJSPrototype = ts.isInJSFile(name) && !ts.nodeIsSynthesized(name) ? resolveEntityNameFromAssignmentDeclaration(name, meaning) : undefined;
                 symbol = getMergedSymbol(resolveName(location || name, name.escapedText, meaning, ignoreErrors || symbolFromJSPrototype ? undefined : message, name, /*isUse*/ true));
@@ -47680,9 +48690,9 @@
                     return getMergedSymbol(symbolFromJSPrototype);
                 }
             }
-            else if (name.kind === 158 /* QualifiedName */ || name.kind === 202 /* PropertyAccessExpression */) {
-                var left = name.kind === 158 /* QualifiedName */ ? name.left : name.expression;
-                var right = name.kind === 158 /* QualifiedName */ ? name.right : name.name;
+            else if (name.kind === 159 /* QualifiedName */ || name.kind === 204 /* PropertyAccessExpression */) {
+                var left = name.kind === 159 /* QualifiedName */ ? name.left : name.expression;
+                var right = name.kind === 159 /* QualifiedName */ ? name.right : name.name;
                 var namespace = resolveEntityName(left, namespaceMeaning, ignoreErrors, /*dontResolveAlias*/ false, location);
                 if (!namespace || ts.nodeIsMissing(right)) {
                     return undefined;
@@ -47721,7 +48731,7 @@
                 throw ts.Debug.assertNever(name, "Unknown entity name kind.");
             }
             ts.Debug.assert((ts.getCheckFlags(symbol) & 1 /* Instantiated */) === 0, "Should never get an instantiated symbol here.");
-            if (!ts.nodeIsSynthesized(name) && ts.isEntityName(name) && (symbol.flags & 2097152 /* Alias */ || name.parent.kind === 267 /* ExportAssignment */)) {
+            if (!ts.nodeIsSynthesized(name) && ts.isEntityName(name) && (symbol.flags & 2097152 /* Alias */ || name.parent.kind === 269 /* ExportAssignment */)) {
                 markSymbolOfAliasDeclarationIfTypeOnly(ts.getAliasDeclarationFromName(name), symbol, /*finalTarget*/ undefined, /*overwriteEmpty*/ true);
             }
             return (symbol.flags & meaning) || dontResolveAlias ? symbol : resolveAlias(symbol);
@@ -47958,7 +48968,7 @@
         function resolveESModuleSymbol(moduleSymbol, referencingLocation, dontResolveAlias, suppressInteropError) {
             var symbol = resolveExternalModuleSymbol(moduleSymbol, dontResolveAlias);
             if (!dontResolveAlias && symbol) {
-                if (!suppressInteropError && !(symbol.flags & (1536 /* Module */ | 3 /* Variable */)) && !ts.getDeclarationOfKind(symbol, 298 /* SourceFile */)) {
+                if (!suppressInteropError && !(symbol.flags & (1536 /* Module */ | 3 /* Variable */)) && !ts.getDeclarationOfKind(symbol, 300 /* SourceFile */)) {
                     var compilerOptionName = moduleKind >= ts.ModuleKind.ES2015
                         ? "allowSyntheticDefaultImports"
                         : "esModuleInterop";
@@ -47991,7 +49001,7 @@
                             if (symbol.exports)
                                 result.exports = new ts.Map(symbol.exports);
                             var resolvedModuleType = resolveStructuredTypeMembers(moduleType); // Should already be resolved from the signature checks above
-                            result.type = createAnonymousType(result, resolvedModuleType.members, ts.emptyArray, ts.emptyArray, resolvedModuleType.stringIndexInfo, resolvedModuleType.numberIndexInfo);
+                            result.type = createAnonymousType(result, resolvedModuleType.members, ts.emptyArray, ts.emptyArray, resolvedModuleType.indexInfos);
                             return result;
                         }
                     }
@@ -48016,6 +49026,23 @@
             }
             return exports;
         }
+        function forEachExportAndPropertyOfModule(moduleSymbol, cb) {
+            var exports = getExportsOfModule(moduleSymbol);
+            exports.forEach(function (symbol, key) {
+                if (!isReservedMemberName(key)) {
+                    cb(symbol, key);
+                }
+            });
+            var exportEquals = resolveExternalModuleSymbol(moduleSymbol);
+            if (exportEquals !== moduleSymbol) {
+                var type = getTypeOfSymbol(exportEquals);
+                if (shouldTreatPropertiesOfExternalModuleAsExports(type)) {
+                    getPropertiesOfType(type).forEach(function (symbol) {
+                        cb(symbol, symbol.escapedName);
+                    });
+                }
+            }
+        }
         function tryGetMemberInModuleExports(memberName, moduleSymbol) {
             var symbolTable = getExportsOfModule(moduleSymbol);
             if (symbolTable) {
@@ -48204,7 +49231,7 @@
                             }
                         });
                     }) : undefined;
-                var res = firstVariableMatch ? __spreadArray(__spreadArray([firstVariableMatch], additionalContainers), [container]) : __spreadArray(__spreadArray([], additionalContainers), [container]);
+                var res = firstVariableMatch ? __spreadArray(__spreadArray([firstVariableMatch], additionalContainers, true), [container], false) : __spreadArray(__spreadArray([], additionalContainers, true), [container], false);
                 res = ts.append(res, objectLiteralContainer);
                 res = ts.addRange(res, reexportContainers);
                 return res;
@@ -48213,7 +49240,7 @@
                 if (!ts.isAmbientModule(d) && d.parent && hasNonGlobalAugmentationExternalModuleSymbol(d.parent)) {
                     return getSymbolOfNode(d.parent);
                 }
-                if (ts.isClassExpression(d) && ts.isBinaryExpression(d.parent) && d.parent.operatorToken.kind === 62 /* EqualsToken */ && ts.isAccessExpression(d.parent.left) && ts.isEntityNameExpression(d.parent.left.expression)) {
+                if (ts.isClassExpression(d) && ts.isBinaryExpression(d.parent) && d.parent.operatorToken.kind === 63 /* EqualsToken */ && ts.isAccessExpression(d.parent.left) && ts.isEntityNameExpression(d.parent.left.expression)) {
                     if (ts.isModuleExportsAccessExpression(d.parent.left) || ts.isExportsIdentifier(d.parent.left.expression)) {
                         return getSymbolOfNode(ts.getSourceFileOfNode(d));
                     }
@@ -48285,7 +49312,7 @@
             var members = node.members;
             for (var _i = 0, members_3 = members; _i < members_3.length; _i++) {
                 var member = members_3[_i];
-                if (member.kind === 167 /* Constructor */ && ts.nodeIsPresent(member.body)) {
+                if (member.kind === 169 /* Constructor */ && ts.nodeIsPresent(member.body)) {
                     return member;
                 }
             }
@@ -48309,12 +49336,6 @@
             type.objectFlags = objectFlags;
             return type;
         }
-        function createBooleanType(trueFalseTypes) {
-            var type = getUnionType(trueFalseTypes);
-            type.flags |= 16 /* Boolean */;
-            type.intrinsicName = "boolean";
-            return type;
-        }
         function createObjectType(objectFlags, symbol) {
             var type = createType(524288 /* Object */);
             type.objectFlags = objectFlags;
@@ -48323,12 +49344,11 @@
             type.properties = undefined;
             type.callSignatures = undefined;
             type.constructSignatures = undefined;
-            type.stringIndexInfo = undefined;
-            type.numberIndexInfo = undefined;
+            type.indexInfos = undefined;
             return type;
         }
         function createTypeofType() {
-            return getUnionType(ts.arrayFrom(typeofEQFacts.keys(), getLiteralType));
+            return getUnionType(ts.arrayFrom(typeofEQFacts.keys(), getStringLiteralType));
         }
         function createTypeParameter(symbol) {
             var type = createType(262144 /* TypeParameter */);
@@ -48361,21 +49381,20 @@
             var index = getIndexSymbolFromSymbolTable(members);
             return index ? ts.concatenate(result, [index]) : result;
         }
-        function setStructuredTypeMembers(type, members, callSignatures, constructSignatures, stringIndexInfo, numberIndexInfo) {
+        function setStructuredTypeMembers(type, members, callSignatures, constructSignatures, indexInfos) {
             var resolved = type;
             resolved.members = members;
             resolved.properties = ts.emptyArray;
             resolved.callSignatures = callSignatures;
             resolved.constructSignatures = constructSignatures;
-            resolved.stringIndexInfo = stringIndexInfo;
-            resolved.numberIndexInfo = numberIndexInfo;
+            resolved.indexInfos = indexInfos;
             // This can loop back to getPropertyOfType() which would crash if `callSignatures` & `constructSignatures` are not initialized.
             if (members !== emptySymbols)
                 resolved.properties = getNamedMembers(members);
             return resolved;
         }
-        function createAnonymousType(symbol, members, callSignatures, constructSignatures, stringIndexInfo, numberIndexInfo) {
-            return setStructuredTypeMembers(createObjectType(16 /* Anonymous */, symbol), members, callSignatures, constructSignatures, stringIndexInfo, numberIndexInfo);
+        function createAnonymousType(symbol, members, callSignatures, constructSignatures, indexInfos) {
+            return setStructuredTypeMembers(createObjectType(16 /* Anonymous */, symbol), members, callSignatures, constructSignatures, indexInfos);
         }
         function getResolvedTypeWithoutAbstractConstructSignatures(type) {
             if (type.constructSignatures.length === 0)
@@ -48385,7 +49404,7 @@
             var constructSignatures = ts.filter(type.constructSignatures, function (signature) { return !(signature.flags & 4 /* Abstract */); });
             if (type.constructSignatures === constructSignatures)
                 return type;
-            var typeCopy = createAnonymousType(type.symbol, type.members, type.callSignatures, ts.some(constructSignatures) ? constructSignatures : ts.emptyArray, type.stringIndexInfo, type.numberIndexInfo);
+            var typeCopy = createAnonymousType(type.symbol, type.members, type.callSignatures, ts.some(constructSignatures) ? constructSignatures : ts.emptyArray, type.indexInfos);
             type.objectTypeWithoutAbstractConstructSignatures = typeCopy;
             typeCopy.objectTypeWithoutAbstractConstructSignatures = typeCopy;
             return typeCopy;
@@ -48395,28 +49414,28 @@
             var _loop_8 = function (location) {
                 // Locals of a source file are not in scope (because they get merged into the global symbol table)
                 if (location.locals && !isGlobalSourceFile(location)) {
-                    if (result = callback(location.locals, /*ignoreQualification*/ undefined, /*isLocalNameLookup*/ true)) {
+                    if (result = callback(location.locals, /*ignoreQualification*/ undefined, /*isLocalNameLookup*/ true, location)) {
                         return { value: result };
                     }
                 }
                 switch (location.kind) {
-                    case 298 /* SourceFile */:
+                    case 300 /* SourceFile */:
                         if (!ts.isExternalOrCommonJsModule(location)) {
                             break;
                         }
                     // falls through
-                    case 257 /* ModuleDeclaration */:
+                    case 259 /* ModuleDeclaration */:
                         var sym = getSymbolOfNode(location);
                         // `sym` may not have exports if this module declaration is backed by the symbol for a `const` that's being rewritten
                         // into a namespace - in such cases, it's best to just let the namespace appear empty (the const members couldn't have referred
                         // to one another anyway)
-                        if (result = callback((sym === null || sym === void 0 ? void 0 : sym.exports) || emptySymbols, /*ignoreQualification*/ undefined, /*isLocalNameLookup*/ true)) {
+                        if (result = callback((sym === null || sym === void 0 ? void 0 : sym.exports) || emptySymbols, /*ignoreQualification*/ undefined, /*isLocalNameLookup*/ true, location)) {
                             return { value: result };
                         }
                         break;
-                    case 253 /* ClassDeclaration */:
-                    case 222 /* ClassExpression */:
-                    case 254 /* InterfaceDeclaration */:
+                    case 255 /* ClassDeclaration */:
+                    case 224 /* ClassExpression */:
+                    case 256 /* InterfaceDeclaration */:
                         // Type parameters are bound into `members` lists so they can merge across declarations
                         // This is troublesome, since in all other respects, they behave like locals :cries:
                         // TODO: the below is shared with similar code in `resolveName` - in fact, rephrasing all this symbol
@@ -48431,7 +49450,7 @@
                                 (table_1 || (table_1 = ts.createSymbolTable())).set(key, memberSymbol);
                             }
                         });
-                        if (table_1 && (result = callback(table_1))) {
+                        if (table_1 && (result = callback(table_1, /*ignoreQualification*/ undefined, /*isLocalNameLookup*/ false, location))) {
                             return { value: result };
                         }
                         break;
@@ -48453,12 +49472,22 @@
             if (!(symbol && !isPropertyOrMethodDeclarationSymbol(symbol))) {
                 return undefined;
             }
+            var links = getSymbolLinks(symbol);
+            var cache = (links.accessibleChainCache || (links.accessibleChainCache = new ts.Map()));
+            // Go from enclosingDeclaration to the first scope we check, so the cache is keyed off the scope and thus shared more
+            var firstRelevantLocation = forEachSymbolTableInScope(enclosingDeclaration, function (_, __, ___, node) { return node; });
+            var key = (useOnlyExternalAliasing ? 0 : 1) + "|" + (firstRelevantLocation && getNodeId(firstRelevantLocation)) + "|" + meaning;
+            if (cache.has(key)) {
+                return cache.get(key);
+            }
             var id = getSymbolId(symbol);
             var visitedSymbolTables = visitedSymbolTablesMap.get(id);
             if (!visitedSymbolTables) {
                 visitedSymbolTablesMap.set(id, visitedSymbolTables = []);
             }
-            return forEachSymbolTableInScope(enclosingDeclaration, getAccessibleSymbolChainFromSymbolTable);
+            var result = forEachSymbolTableInScope(enclosingDeclaration, getAccessibleSymbolChainFromSymbolTable);
+            cache.set(key, result);
+            return result;
             /**
              * @param {ignoreQualification} boolean Set when a symbol is being looked for through the exports of another symbol (meaning we have a route to qualify it already)
              */
@@ -48501,7 +49530,7 @@
                         && (isLocalNameLookup ? !ts.some(symbolFromSymbolTable.declarations, ts.isNamespaceReexportDeclaration) : true)
                         // While exports are generally considered to be in scope, export-specifier declared symbols are _not_
                         // See similar comment in `resolveName` for details
-                        && (ignoreQualification || !ts.getDeclarationOfKind(symbolFromSymbolTable, 271 /* ExportSpecifier */))) {
+                        && (ignoreQualification || !ts.getDeclarationOfKind(symbolFromSymbolTable, 273 /* ExportSpecifier */))) {
                         var resolvedImportedSymbol = resolveAlias(symbolFromSymbolTable);
                         var candidate = getCandidateListForSymbol(symbolFromSymbolTable, resolvedImportedSymbol, ignoreQualification);
                         if (candidate) {
@@ -48545,7 +49574,7 @@
                     return true;
                 }
                 // Qualify if the symbol from symbol table has same meaning as expected
-                symbolFromSymbolTable = (symbolFromSymbolTable.flags & 2097152 /* Alias */ && !ts.getDeclarationOfKind(symbolFromSymbolTable, 271 /* ExportSpecifier */)) ? resolveAlias(symbolFromSymbolTable) : symbolFromSymbolTable;
+                symbolFromSymbolTable = (symbolFromSymbolTable.flags & 2097152 /* Alias */ && !ts.getDeclarationOfKind(symbolFromSymbolTable, 273 /* ExportSpecifier */)) ? resolveAlias(symbolFromSymbolTable) : symbolFromSymbolTable;
                 if (symbolFromSymbolTable.flags & meaning) {
                     qualify = true;
                     return true;
@@ -48560,10 +49589,10 @@
                 for (var _i = 0, _a = symbol.declarations; _i < _a.length; _i++) {
                     var declaration = _a[_i];
                     switch (declaration.kind) {
-                        case 164 /* PropertyDeclaration */:
-                        case 166 /* MethodDeclaration */:
-                        case 168 /* GetAccessor */:
-                        case 169 /* SetAccessor */:
+                        case 165 /* PropertyDeclaration */:
+                        case 167 /* MethodDeclaration */:
+                        case 170 /* GetAccessor */:
+                        case 171 /* SetAccessor */:
                             continue;
                         default:
                             return false;
@@ -48693,14 +49722,14 @@
             return node && getSymbolOfNode(node);
         }
         function hasExternalModuleSymbol(declaration) {
-            return ts.isAmbientModule(declaration) || (declaration.kind === 298 /* SourceFile */ && ts.isExternalOrCommonJsModule(declaration));
+            return ts.isAmbientModule(declaration) || (declaration.kind === 300 /* SourceFile */ && ts.isExternalOrCommonJsModule(declaration));
         }
         function hasNonGlobalAugmentationExternalModuleSymbol(declaration) {
-            return ts.isModuleWithStringLiteralName(declaration) || (declaration.kind === 298 /* SourceFile */ && ts.isExternalOrCommonJsModule(declaration));
+            return ts.isModuleWithStringLiteralName(declaration) || (declaration.kind === 300 /* SourceFile */ && ts.isExternalOrCommonJsModule(declaration));
         }
         function hasVisibleDeclarations(symbol, shouldComputeAliasToMakeVisible) {
             var aliasesToMakeVisible;
-            if (!ts.every(ts.filter(symbol.declarations, function (d) { return d.kind !== 78 /* Identifier */; }), getIsDeclarationVisible)) {
+            if (!ts.every(ts.filter(symbol.declarations, function (d) { return d.kind !== 79 /* Identifier */; }), getIsDeclarationVisible)) {
                 return undefined;
             }
             return { accessibility: 0 /* Accessible */, aliasesToMakeVisible: aliasesToMakeVisible };
@@ -48752,14 +49781,14 @@
         function isEntityNameVisible(entityName, enclosingDeclaration) {
             // get symbol of the first identifier of the entityName
             var meaning;
-            if (entityName.parent.kind === 177 /* TypeQuery */ ||
+            if (entityName.parent.kind === 179 /* TypeQuery */ ||
                 ts.isExpressionWithTypeArgumentsInClassExtendsClause(entityName.parent) ||
-                entityName.parent.kind === 159 /* ComputedPropertyName */) {
+                entityName.parent.kind === 160 /* ComputedPropertyName */) {
                 // Typeof value
                 meaning = 111551 /* Value */ | 1048576 /* ExportValue */;
             }
-            else if (entityName.kind === 158 /* QualifiedName */ || entityName.kind === 202 /* PropertyAccessExpression */ ||
-                entityName.parent.kind === 261 /* ImportEqualsDeclaration */) {
+            else if (entityName.kind === 159 /* QualifiedName */ || entityName.kind === 204 /* PropertyAccessExpression */ ||
+                entityName.parent.kind === 263 /* ImportEqualsDeclaration */) {
                 // Left identifier from type reference or TypeAlias
                 // Entity name of the import declaration
                 meaning = 1920 /* Namespace */;
@@ -48800,7 +49829,7 @@
             function symbolToStringWorker(writer) {
                 var entity = builder(symbol, meaning, enclosingDeclaration, nodeFlags); // TODO: GH#18217
                 // add neverAsciiEscape for GH#39027
-                var printer = (enclosingDeclaration === null || enclosingDeclaration === void 0 ? void 0 : enclosingDeclaration.kind) === 298 /* SourceFile */ ? ts.createPrinter({ removeComments: true, neverAsciiEscape: true }) : ts.createPrinter({ removeComments: true });
+                var printer = (enclosingDeclaration === null || enclosingDeclaration === void 0 ? void 0 : enclosingDeclaration.kind) === 300 /* SourceFile */ ? ts.createPrinter({ removeComments: true, neverAsciiEscape: true }) : ts.createPrinter({ removeComments: true });
                 var sourceFile = enclosingDeclaration && ts.getSourceFileOfNode(enclosingDeclaration);
                 printer.writeNode(4 /* Unspecified */, entity, /*sourceFile*/ sourceFile, writer);
                 return writer;
@@ -48812,10 +49841,10 @@
             function signatureToStringWorker(writer) {
                 var sigOutput;
                 if (flags & 262144 /* WriteArrowStyleSignature */) {
-                    sigOutput = kind === 1 /* Construct */ ? 176 /* ConstructorType */ : 175 /* FunctionType */;
+                    sigOutput = kind === 1 /* Construct */ ? 178 /* ConstructorType */ : 177 /* FunctionType */;
                 }
                 else {
-                    sigOutput = kind === 1 /* Construct */ ? 171 /* ConstructSignature */ : 170 /* CallSignature */;
+                    sigOutput = kind === 1 /* Construct */ ? 173 /* ConstructSignature */ : 172 /* CallSignature */;
                 }
                 var sig = nodeBuilder.signatureToSignatureDeclaration(signature, sigOutput, enclosingDeclaration, toNodeBuilderFlags(flags) | 70221824 /* IgnoreErrors */ | 512 /* WriteTypeParametersInQualifiedName */);
                 var printer = ts.createPrinter({ removeComments: true, omitTrailingSemicolon: true });
@@ -48869,8 +49898,8 @@
                 typeToTypeNode: function (type, enclosingDeclaration, flags, tracker) {
                     return withContext(enclosingDeclaration, flags, tracker, function (context) { return typeToTypeNodeHelper(type, context); });
                 },
-                indexInfoToIndexSignatureDeclaration: function (indexInfo, kind, enclosingDeclaration, flags, tracker) {
-                    return withContext(enclosingDeclaration, flags, tracker, function (context) { return indexInfoToIndexSignatureDeclarationHelper(indexInfo, kind, context, /*typeNode*/ undefined); });
+                indexInfoToIndexSignatureDeclaration: function (indexInfo, enclosingDeclaration, flags, tracker) {
+                    return withContext(enclosingDeclaration, flags, tracker, function (context) { return indexInfoToIndexSignatureDeclarationHelper(indexInfo, context, /*typeNode*/ undefined); });
                 },
                 signatureToSignatureDeclaration: function (signature, kind, enclosingDeclaration, flags, tracker) {
                     return withContext(enclosingDeclaration, flags, tracker, function (context) { return signatureToSignatureDeclarationHelper(signature, kind, context); });
@@ -48901,9 +49930,8 @@
                     enclosingDeclaration: enclosingDeclaration,
                     flags: flags || 0 /* None */,
                     // If no full tracker is provided, fake up a dummy one with a basic limited-functionality moduleResolverHost
-                    tracker: tracker && tracker.trackSymbol ? tracker : { trackSymbol: ts.noop, moduleResolverHost: flags & 134217728 /* DoNotIncludeSymbolChain */ ? {
+                    tracker: tracker && tracker.trackSymbol ? tracker : { trackSymbol: function () { return false; }, moduleResolverHost: flags & 134217728 /* DoNotIncludeSymbolChain */ ? {
                             getCommonSourceDirectory: !!host.getCommonSourceDirectory ? function () { return host.getCommonSourceDirectory(); } : function () { return ""; },
-                            getSourceFiles: function () { return host.getSourceFiles(); },
                             getCurrentDirectory: function () { return host.getCurrentDirectory(); },
                             getSymlinkCache: ts.maybeBind(host, host.getSymlinkCache),
                             useCaseSensitiveFileNames: ts.maybeBind(host, host.useCaseSensitiveFileNames),
@@ -48914,17 +49942,46 @@
                             getFileIncludeReasons: function () { return host.getFileIncludeReasons(); },
                         } : undefined },
                     encounteredError: false,
+                    reportedDiagnostic: false,
                     visitedTypes: undefined,
                     symbolDepth: undefined,
                     inferTypeParameters: undefined,
                     approximateLength: 0
                 };
+                context.tracker = wrapSymbolTrackerToReportForContext(context, context.tracker);
                 var resultingNode = cb(context);
                 if (context.truncating && context.flags & 1 /* NoTruncation */) {
                     (_b = (_a = context.tracker) === null || _a === void 0 ? void 0 : _a.reportTruncationError) === null || _b === void 0 ? void 0 : _b.call(_a);
                 }
                 return context.encounteredError ? undefined : resultingNode;
             }
+            function wrapSymbolTrackerToReportForContext(context, tracker) {
+                var oldTrackSymbol = tracker.trackSymbol;
+                return __assign(__assign({}, tracker), { reportCyclicStructureError: wrapReportedDiagnostic(tracker.reportCyclicStructureError), reportInaccessibleThisError: wrapReportedDiagnostic(tracker.reportInaccessibleThisError), reportInaccessibleUniqueSymbolError: wrapReportedDiagnostic(tracker.reportInaccessibleUniqueSymbolError), reportLikelyUnsafeImportRequiredError: wrapReportedDiagnostic(tracker.reportLikelyUnsafeImportRequiredError), reportNonlocalAugmentation: wrapReportedDiagnostic(tracker.reportNonlocalAugmentation), reportPrivateInBaseOfClassExpression: wrapReportedDiagnostic(tracker.reportPrivateInBaseOfClassExpression), reportNonSerializableProperty: wrapReportedDiagnostic(tracker.reportNonSerializableProperty), trackSymbol: oldTrackSymbol && (function () {
+                        var args = [];
+                        for (var _i = 0; _i < arguments.length; _i++) {
+                            args[_i] = arguments[_i];
+                        }
+                        var result = oldTrackSymbol.apply(void 0, args);
+                        if (result) {
+                            context.reportedDiagnostic = true;
+                        }
+                        return result;
+                    }) });
+                function wrapReportedDiagnostic(method) {
+                    if (!method) {
+                        return method;
+                    }
+                    return (function () {
+                        var args = [];
+                        for (var _i = 0; _i < arguments.length; _i++) {
+                            args[_i] = arguments[_i];
+                        }
+                        context.reportedDiagnostic = true;
+                        return method.apply(void 0, args);
+                    });
+                }
+            }
             function checkTruncationLength(context) {
                 if (context.truncating)
                     return context.truncating;
@@ -48942,33 +49999,33 @@
                         return undefined; // TODO: GH#18217
                     }
                     context.approximateLength += 3;
-                    return ts.factory.createKeywordTypeNode(128 /* AnyKeyword */);
+                    return ts.factory.createKeywordTypeNode(129 /* AnyKeyword */);
                 }
                 if (!(context.flags & 536870912 /* NoTypeReduction */)) {
                     type = getReducedType(type);
                 }
                 if (type.flags & 1 /* Any */) {
                     context.approximateLength += 3;
-                    return ts.factory.createKeywordTypeNode(type === intrinsicMarkerType ? 136 /* IntrinsicKeyword */ : 128 /* AnyKeyword */);
+                    return ts.factory.createKeywordTypeNode(type === intrinsicMarkerType ? 137 /* IntrinsicKeyword */ : 129 /* AnyKeyword */);
                 }
                 if (type.flags & 2 /* Unknown */) {
-                    return ts.factory.createKeywordTypeNode(152 /* UnknownKeyword */);
+                    return ts.factory.createKeywordTypeNode(153 /* UnknownKeyword */);
                 }
                 if (type.flags & 4 /* String */) {
                     context.approximateLength += 6;
-                    return ts.factory.createKeywordTypeNode(147 /* StringKeyword */);
+                    return ts.factory.createKeywordTypeNode(148 /* StringKeyword */);
                 }
                 if (type.flags & 8 /* Number */) {
                     context.approximateLength += 6;
-                    return ts.factory.createKeywordTypeNode(144 /* NumberKeyword */);
+                    return ts.factory.createKeywordTypeNode(145 /* NumberKeyword */);
                 }
                 if (type.flags & 64 /* BigInt */) {
                     context.approximateLength += 6;
-                    return ts.factory.createKeywordTypeNode(155 /* BigIntKeyword */);
+                    return ts.factory.createKeywordTypeNode(156 /* BigIntKeyword */);
                 }
-                if (type.flags & 16 /* Boolean */) {
+                if (type.flags & 16 /* Boolean */ && !type.aliasSymbol) {
                     context.approximateLength += 7;
-                    return ts.factory.createKeywordTypeNode(131 /* BooleanKeyword */);
+                    return ts.factory.createKeywordTypeNode(132 /* BooleanKeyword */);
                 }
                 if (type.flags & 1024 /* EnumLiteral */ && !(type.flags & 1048576 /* Union */)) {
                     var parentSymbol = getParentOfSymbol(type.symbol);
@@ -49022,15 +50079,15 @@
                         }
                     }
                     context.approximateLength += 13;
-                    return ts.factory.createTypeOperatorNode(151 /* UniqueKeyword */, ts.factory.createKeywordTypeNode(148 /* SymbolKeyword */));
+                    return ts.factory.createTypeOperatorNode(152 /* UniqueKeyword */, ts.factory.createKeywordTypeNode(149 /* SymbolKeyword */));
                 }
                 if (type.flags & 16384 /* Void */) {
                     context.approximateLength += 4;
-                    return ts.factory.createKeywordTypeNode(113 /* VoidKeyword */);
+                    return ts.factory.createKeywordTypeNode(114 /* VoidKeyword */);
                 }
                 if (type.flags & 32768 /* Undefined */) {
                     context.approximateLength += 9;
-                    return ts.factory.createKeywordTypeNode(150 /* UndefinedKeyword */);
+                    return ts.factory.createKeywordTypeNode(151 /* UndefinedKeyword */);
                 }
                 if (type.flags & 65536 /* Null */) {
                     context.approximateLength += 4;
@@ -49038,15 +50095,15 @@
                 }
                 if (type.flags & 131072 /* Never */) {
                     context.approximateLength += 5;
-                    return ts.factory.createKeywordTypeNode(141 /* NeverKeyword */);
+                    return ts.factory.createKeywordTypeNode(142 /* NeverKeyword */);
                 }
                 if (type.flags & 4096 /* ESSymbol */) {
                     context.approximateLength += 6;
-                    return ts.factory.createKeywordTypeNode(148 /* SymbolKeyword */);
+                    return ts.factory.createKeywordTypeNode(149 /* SymbolKeyword */);
                 }
                 if (type.flags & 67108864 /* NonPrimitive */) {
                     context.approximateLength += 6;
-                    return ts.factory.createKeywordTypeNode(145 /* ObjectKeyword */);
+                    return ts.factory.createKeywordTypeNode(146 /* ObjectKeyword */);
                 }
                 if (isThisTypeParameter(type)) {
                     if (context.flags & 4194304 /* InObjectTypeLiteral */) {
@@ -49116,7 +50173,7 @@
                     var indexedType = type.type;
                     context.approximateLength += 6;
                     var indexTypeNode = typeToTypeNodeHelper(indexedType, context);
-                    return ts.factory.createTypeOperatorNode(138 /* KeyOfKeyword */, indexTypeNode);
+                    return ts.factory.createTypeOperatorNode(139 /* KeyOfKeyword */, indexTypeNode);
                 }
                 if (type.flags & 134217728 /* TemplateLiteral */) {
                     var texts_1 = type.texts;
@@ -49137,6 +50194,13 @@
                     return ts.factory.createIndexedAccessTypeNode(objectTypeNode, indexTypeNode);
                 }
                 if (type.flags & 16777216 /* Conditional */) {
+                    return visitAndTransformType(type, function (type) { return conditionalTypeToTypeNode(type); });
+                }
+                if (type.flags & 33554432 /* Substitution */) {
+                    return typeToTypeNodeHelper(type.baseType, context);
+                }
+                return ts.Debug.fail("Should be unreachable.");
+                function conditionalTypeToTypeNode(type) {
                     var checkTypeNode = typeToTypeNodeHelper(type.checkType, context);
                     var saveInferTypeParameters = context.inferTypeParameters;
                     context.inferTypeParameters = type.root.inferTypeParameters;
@@ -49147,10 +50211,6 @@
                     context.approximateLength += 15;
                     return ts.factory.createConditionalTypeNode(checkTypeNode, extendsTypeNode, trueTypeNode, falseTypeNode);
                 }
-                if (type.flags & 33554432 /* Substitution */) {
-                    return typeToTypeNodeHelper(type.baseType, context);
-                }
-                return ts.Debug.fail("Should be unreachable.");
                 function typeToTypeNodeOrCircularityElision(type) {
                     var _a, _b, _c;
                     if (type.flags & 1048576 /* Union */) {
@@ -49173,14 +50233,14 @@
                     if (isMappedTypeWithKeyofConstraintDeclaration(type)) {
                         // We have a { [P in keyof T]: X }
                         // We do this to ensure we retain the toplevel keyof-ness of the type which may be lost due to keyof distribution during `getConstraintTypeFromMappedType`
-                        appropriateConstraintTypeNode = ts.factory.createTypeOperatorNode(138 /* KeyOfKeyword */, typeToTypeNodeHelper(getModifiersTypeFromMappedType(type), context));
+                        appropriateConstraintTypeNode = ts.factory.createTypeOperatorNode(139 /* KeyOfKeyword */, typeToTypeNodeHelper(getModifiersTypeFromMappedType(type), context));
                     }
                     else {
                         appropriateConstraintTypeNode = typeToTypeNodeHelper(getConstraintTypeFromMappedType(type), context);
                     }
                     var typeParameterNode = typeParameterToDeclarationWithConstraint(getTypeParameterFromMappedType(type), context, appropriateConstraintTypeNode);
                     var nameTypeNode = type.declaration.nameType ? typeToTypeNodeHelper(getNameTypeFromMappedType(type), context) : undefined;
-                    var templateTypeNode = typeToTypeNodeHelper(getTemplateTypeFromMappedType(type), context);
+                    var templateTypeNode = typeToTypeNodeHelper(removeMissingType(getTemplateTypeFromMappedType(type), !!(getMappedTypeModifiers(type) & 4 /* IncludeOptional */)), context);
                     var mappedTypeNode = ts.factory.createMappedTypeNode(readonlyToken, typeParameterNode, nameTypeNode, questionToken, templateTypeNode);
                     context.approximateLength += 10;
                     return ts.setEmitFlags(mappedTypeNode, 1 /* SingleLine */);
@@ -49198,7 +50258,7 @@
                         // Always use 'typeof T' for type of class, enum, and module objects
                         else if (symbol.flags & 32 /* Class */
                             && !getBaseTypeVariableOfClass(symbol)
-                            && !(symbol.valueDeclaration && symbol.valueDeclaration.kind === 222 /* ClassExpression */ && context.flags & 2048 /* WriteClassExpressionAsTypeLiteral */) ||
+                            && !(symbol.valueDeclaration && symbol.valueDeclaration.kind === 224 /* ClassExpression */ && context.flags & 2048 /* WriteClassExpressionAsTypeLiteral */) ||
                             symbol.flags & (384 /* Enum */ | 512 /* ValueModule */) ||
                             shouldWriteTypeOfFunctionSymbol()) {
                             return symbolToTypeNode(symbol, context, isInstanceType);
@@ -49225,11 +50285,11 @@
                     function shouldWriteTypeOfFunctionSymbol() {
                         var _a;
                         var isStaticMethodSymbol = !!(symbol.flags & 8192 /* Method */) && // typeof static method
-                            ts.some(symbol.declarations, function (declaration) { return ts.hasSyntacticModifier(declaration, 32 /* Static */); });
+                            ts.some(symbol.declarations, function (declaration) { return ts.isStatic(declaration); });
                         var isNonLocalFunctionSymbol = !!(symbol.flags & 16 /* Function */) &&
                             (symbol.parent || // is exported function symbol
                                 ts.forEach(symbol.declarations, function (declaration) {
-                                    return declaration.parent.kind === 298 /* SourceFile */ || declaration.parent.kind === 258 /* ModuleBlock */;
+                                    return declaration.parent.kind === 300 /* SourceFile */ || declaration.parent.kind === 260 /* ModuleBlock */;
                                 }));
                         if (isStaticMethodSymbol || isNonLocalFunctionSymbol) {
                             // typeof is allowed only for static/non local functions
@@ -49239,11 +50299,13 @@
                     }
                 }
                 function visitAndTransformType(type, transform) {
+                    var _a, _b;
                     var typeId = type.id;
                     var isConstructorObject = ts.getObjectFlags(type) & 16 /* Anonymous */ && type.symbol && type.symbol.flags & 32 /* Class */;
                     var id = ts.getObjectFlags(type) & 4 /* Reference */ && type.node ? "N" + getNodeId(type.node) :
-                        type.symbol ? (isConstructorObject ? "+" : "") + getSymbolId(type.symbol) :
-                            undefined;
+                        type.flags & 16777216 /* Conditional */ ? "N" + getNodeId(type.root.node) :
+                            type.symbol ? (isConstructorObject ? "+" : "") + getSymbolId(type.symbol) :
+                                undefined;
                     // Since instantiations of the same anonymous type have the same symbol, tracking symbols instead
                     // of types allows us to catch circular references to instantiations of the same anonymous type
                     if (!context.visitedTypes) {
@@ -49252,6 +50314,19 @@
                     if (id && !context.symbolDepth) {
                         context.symbolDepth = new ts.Map();
                     }
+                    var links = context.enclosingDeclaration && getNodeLinks(context.enclosingDeclaration);
+                    var key = getTypeId(type) + "|" + context.flags;
+                    if (links) {
+                        links.serializedTypes || (links.serializedTypes = new ts.Map());
+                    }
+                    var cachedResult = (_a = links === null || links === void 0 ? void 0 : links.serializedTypes) === null || _a === void 0 ? void 0 : _a.get(key);
+                    if (cachedResult) {
+                        if (cachedResult.truncating) {
+                            context.truncating = true;
+                        }
+                        context.approximateLength += cachedResult.addedLength;
+                        return deepCloneOrReuseNode(cachedResult);
+                    }
                     var depth;
                     if (id) {
                         depth = context.symbolDepth.get(id) || 0;
@@ -49261,31 +50336,46 @@
                         context.symbolDepth.set(id, depth + 1);
                     }
                     context.visitedTypes.add(typeId);
+                    var startLength = context.approximateLength;
                     var result = transform(type);
+                    var addedLength = context.approximateLength - startLength;
+                    if (!context.reportedDiagnostic && !context.encounteredError) {
+                        if (context.truncating) {
+                            result.truncating = true;
+                        }
+                        result.addedLength = addedLength;
+                        (_b = links === null || links === void 0 ? void 0 : links.serializedTypes) === null || _b === void 0 ? void 0 : _b.set(key, result);
+                    }
                     context.visitedTypes.delete(typeId);
                     if (id) {
                         context.symbolDepth.set(id, depth);
                     }
                     return result;
+                    function deepCloneOrReuseNode(node) {
+                        if (!ts.nodeIsSynthesized(node) && ts.getParseTreeNode(node) === node) {
+                            return node;
+                        }
+                        return ts.setTextRange(ts.factory.cloneNode(ts.visitEachChild(node, deepCloneOrReuseNode, ts.nullTransformationContext)), node);
+                    }
                 }
                 function createTypeNodeFromObjectType(type) {
                     if (isGenericMappedType(type) || type.containsError) {
                         return createMappedTypeNodeFromType(type);
                     }
                     var resolved = resolveStructuredTypeMembers(type);
-                    if (!resolved.properties.length && !resolved.stringIndexInfo && !resolved.numberIndexInfo) {
+                    if (!resolved.properties.length && !resolved.indexInfos.length) {
                         if (!resolved.callSignatures.length && !resolved.constructSignatures.length) {
                             context.approximateLength += 2;
                             return ts.setEmitFlags(ts.factory.createTypeLiteralNode(/*members*/ undefined), 1 /* SingleLine */);
                         }
                         if (resolved.callSignatures.length === 1 && !resolved.constructSignatures.length) {
                             var signature = resolved.callSignatures[0];
-                            var signatureNode = signatureToSignatureDeclarationHelper(signature, 175 /* FunctionType */, context);
+                            var signatureNode = signatureToSignatureDeclarationHelper(signature, 177 /* FunctionType */, context);
                             return signatureNode;
                         }
                         if (resolved.constructSignatures.length === 1 && !resolved.callSignatures.length) {
                             var signature = resolved.constructSignatures[0];
-                            var signatureNode = signatureToSignatureDeclarationHelper(signature, 176 /* ConstructorType */, context);
+                            var signatureNode = signatureToSignatureDeclarationHelper(signature, 178 /* ConstructorType */, context);
                             return signatureNode;
                         }
                     }
@@ -49295,8 +50385,7 @@
                         // count the number of type elements excluding abstract constructors
                         var typeElementCount = resolved.callSignatures.length +
                             (resolved.constructSignatures.length - abstractSignatures.length) +
-                            (resolved.stringIndexInfo ? 1 : 0) +
-                            (resolved.numberIndexInfo ? 1 : 0) +
+                            resolved.indexInfos.length +
                             // exclude `prototype` when writing a class expression as a type literal, as per
                             // the logic in `createTypeNodesFromResolvedType`.
                             (context.flags & 2048 /* WriteClassExpressionAsTypeLiteral */ ?
@@ -49329,9 +50418,10 @@
                         }
                         var elementType = typeToTypeNodeHelper(typeArguments[0], context);
                         var arrayType = ts.factory.createArrayTypeNode(elementType);
-                        return type.target === globalArrayType ? arrayType : ts.factory.createTypeOperatorNode(142 /* ReadonlyKeyword */, arrayType);
+                        return type.target === globalArrayType ? arrayType : ts.factory.createTypeOperatorNode(143 /* ReadonlyKeyword */, arrayType);
                     }
                     else if (type.target.objectFlags & 8 /* Tuple */) {
+                        typeArguments = ts.sameMap(typeArguments, function (t, i) { return removeMissingType(t, !!(type.target.elementFlags[i] & 2 /* Optional */)); });
                         if (typeArguments.length > 0) {
                             var arity = getTypeReferenceArity(type);
                             var tupleConstituentNodes = mapToTypeNodes(typeArguments.slice(0, arity), context);
@@ -49353,12 +50443,12 @@
                                     }
                                 }
                                 var tupleTypeNode = ts.setEmitFlags(ts.factory.createTupleTypeNode(tupleConstituentNodes), 1 /* SingleLine */);
-                                return type.target.readonly ? ts.factory.createTypeOperatorNode(142 /* ReadonlyKeyword */, tupleTypeNode) : tupleTypeNode;
+                                return type.target.readonly ? ts.factory.createTypeOperatorNode(143 /* ReadonlyKeyword */, tupleTypeNode) : tupleTypeNode;
                             }
                         }
                         if (context.encounteredError || (context.flags & 524288 /* AllowEmptyTuple */)) {
                             var tupleTypeNode = ts.setEmitFlags(ts.factory.createTupleTypeNode([]), 1 /* SingleLine */);
-                            return type.target.readonly ? ts.factory.createTypeOperatorNode(142 /* ReadonlyKeyword */, tupleTypeNode) : tupleTypeNode;
+                            return type.target.readonly ? ts.factory.createTypeOperatorNode(143 /* ReadonlyKeyword */, tupleTypeNode) : tupleTypeNode;
                         }
                         context.encounteredError = true;
                         return undefined; // TODO: GH#18217
@@ -49465,34 +50555,25 @@
                     var typeElements = [];
                     for (var _i = 0, _a = resolvedType.callSignatures; _i < _a.length; _i++) {
                         var signature = _a[_i];
-                        typeElements.push(signatureToSignatureDeclarationHelper(signature, 170 /* CallSignature */, context));
+                        typeElements.push(signatureToSignatureDeclarationHelper(signature, 172 /* CallSignature */, context));
                     }
                     for (var _b = 0, _c = resolvedType.constructSignatures; _b < _c.length; _b++) {
                         var signature = _c[_b];
                         if (signature.flags & 4 /* Abstract */)
                             continue;
-                        typeElements.push(signatureToSignatureDeclarationHelper(signature, 171 /* ConstructSignature */, context));
+                        typeElements.push(signatureToSignatureDeclarationHelper(signature, 173 /* ConstructSignature */, context));
                     }
-                    if (resolvedType.stringIndexInfo) {
-                        var indexSignature = void 0;
-                        if (resolvedType.objectFlags & 1024 /* ReverseMapped */) {
-                            indexSignature = indexInfoToIndexSignatureDeclarationHelper(createIndexInfo(anyType, resolvedType.stringIndexInfo.isReadonly, resolvedType.stringIndexInfo.declaration), 0 /* String */, context, createElidedInformationPlaceholder(context));
-                        }
-                        else {
-                            indexSignature = indexInfoToIndexSignatureDeclarationHelper(resolvedType.stringIndexInfo, 0 /* String */, context, /*typeNode*/ undefined);
-                        }
-                        typeElements.push(indexSignature);
-                    }
-                    if (resolvedType.numberIndexInfo) {
-                        typeElements.push(indexInfoToIndexSignatureDeclarationHelper(resolvedType.numberIndexInfo, 1 /* Number */, context, /*typeNode*/ undefined));
+                    for (var _d = 0, _e = resolvedType.indexInfos; _d < _e.length; _d++) {
+                        var info = _e[_d];
+                        typeElements.push(indexInfoToIndexSignatureDeclarationHelper(info, context, resolvedType.objectFlags & 1024 /* ReverseMapped */ ? createElidedInformationPlaceholder(context) : undefined));
                     }
                     var properties = resolvedType.properties;
                     if (!properties) {
                         return typeElements;
                     }
                     var i = 0;
-                    for (var _d = 0, properties_1 = properties; _d < properties_1.length; _d++) {
-                        var propertySymbol = properties_1[_d];
+                    for (var _f = 0, properties_1 = properties; _f < properties_1.length; _f++) {
+                        var propertySymbol = properties_1[_f];
                         i++;
                         if (context.flags & 2048 /* WriteClassExpressionAsTypeLiteral */) {
                             if (propertySymbol.flags & 4194304 /* Prototype */) {
@@ -49517,7 +50598,7 @@
                 if (!(context.flags & 1 /* NoTruncation */)) {
                     return ts.factory.createTypeReferenceNode(ts.factory.createIdentifier("..."), /*typeArguments*/ undefined);
                 }
-                return ts.factory.createKeywordTypeNode(128 /* AnyKeyword */);
+                return ts.factory.createKeywordTypeNode(129 /* AnyKeyword */);
             }
             function shouldUsePlaceholderForProperty(propertySymbol, context) {
                 var _a;
@@ -49533,27 +50614,32 @@
                             && !(ts.getObjectFlags(ts.last(context.reverseMappedStack).propertyType) & 16 /* Anonymous */)));
             }
             function addPropertyToElementList(propertySymbol, context, typeElements) {
-                var _a;
+                var _a, _b;
                 var propertyIsReverseMapped = !!(ts.getCheckFlags(propertySymbol) & 8192 /* ReverseMapped */);
                 var propertyType = shouldUsePlaceholderForProperty(propertySymbol, context) ?
-                    anyType : getTypeOfSymbol(propertySymbol);
+                    anyType : getNonMissingTypeOfSymbol(propertySymbol);
                 var saveEnclosingDeclaration = context.enclosingDeclaration;
                 context.enclosingDeclaration = undefined;
                 if (context.tracker.trackSymbol && ts.getCheckFlags(propertySymbol) & 4096 /* Late */ && isLateBoundName(propertySymbol.escapedName)) {
-                    var decl = ts.first(propertySymbol.declarations);
-                    if (propertySymbol.declarations && hasLateBindableName(decl)) {
-                        if (ts.isBinaryExpression(decl)) {
-                            var name = ts.getNameOfDeclaration(decl);
-                            if (name && ts.isElementAccessExpression(name) && ts.isPropertyAccessEntityNameExpression(name.argumentExpression)) {
-                                trackComputedName(name.argumentExpression, saveEnclosingDeclaration, context);
+                    if (propertySymbol.declarations) {
+                        var decl = ts.first(propertySymbol.declarations);
+                        if (hasLateBindableName(decl)) {
+                            if (ts.isBinaryExpression(decl)) {
+                                var name = ts.getNameOfDeclaration(decl);
+                                if (name && ts.isElementAccessExpression(name) && ts.isPropertyAccessEntityNameExpression(name.argumentExpression)) {
+                                    trackComputedName(name.argumentExpression, saveEnclosingDeclaration, context);
+                                }
+                            }
+                            else {
+                                trackComputedName(decl.name.expression, saveEnclosingDeclaration, context);
                             }
                         }
-                        else {
-                            trackComputedName(decl.name.expression, saveEnclosingDeclaration, context);
-                        }
+                    }
+                    else if ((_a = context.tracker) === null || _a === void 0 ? void 0 : _a.reportNonSerializableProperty) {
+                        context.tracker.reportNonSerializableProperty(symbolToString(propertySymbol));
                     }
                 }
-                context.enclosingDeclaration = propertySymbol.valueDeclaration || ((_a = propertySymbol.declarations) === null || _a === void 0 ? void 0 : _a[0]) || saveEnclosingDeclaration;
+                context.enclosingDeclaration = propertySymbol.valueDeclaration || ((_b = propertySymbol.declarations) === null || _b === void 0 ? void 0 : _b[0]) || saveEnclosingDeclaration;
                 var propertyName = getPropertyNameNodeForSymbol(propertySymbol, context);
                 context.enclosingDeclaration = saveEnclosingDeclaration;
                 context.approximateLength += (ts.symbolName(propertySymbol).length + 1);
@@ -49562,7 +50648,7 @@
                     var signatures = getSignaturesOfType(filterType(propertyType, function (t) { return !(t.flags & 32768 /* Undefined */); }), 0 /* Call */);
                     for (var _i = 0, signatures_1 = signatures; _i < signatures_1.length; _i++) {
                         var signature = signatures_1[_i];
-                        var methodDeclaration = signatureToSignatureDeclarationHelper(signature, 165 /* MethodSignature */, context, { name: propertyName, questionToken: optionalToken });
+                        var methodDeclaration = signatureToSignatureDeclarationHelper(signature, 166 /* MethodSignature */, context, { name: propertyName, questionToken: optionalToken });
                         typeElements.push(preserveCommentsOn(methodDeclaration));
                     }
                 }
@@ -49576,12 +50662,12 @@
                             context.reverseMappedStack || (context.reverseMappedStack = []);
                             context.reverseMappedStack.push(propertySymbol);
                         }
-                        propertyTypeNode = propertyType ? serializeTypeForDeclaration(context, propertyType, propertySymbol, saveEnclosingDeclaration) : ts.factory.createKeywordTypeNode(128 /* AnyKeyword */);
+                        propertyTypeNode = propertyType ? serializeTypeForDeclaration(context, propertyType, propertySymbol, saveEnclosingDeclaration) : ts.factory.createKeywordTypeNode(129 /* AnyKeyword */);
                         if (propertyIsReverseMapped) {
                             context.reverseMappedStack.pop();
                         }
                     }
-                    var modifiers = isReadonlySymbol(propertySymbol) ? [ts.factory.createToken(142 /* ReadonlyKeyword */)] : undefined;
+                    var modifiers = isReadonlySymbol(propertySymbol) ? [ts.factory.createToken(143 /* ReadonlyKeyword */)] : undefined;
                     if (modifiers) {
                         context.approximateLength += 9;
                     }
@@ -49590,8 +50676,8 @@
                 }
                 function preserveCommentsOn(node) {
                     var _a;
-                    if (ts.some(propertySymbol.declarations, function (d) { return d.kind === 337 /* JSDocPropertyTag */; })) {
-                        var d = (_a = propertySymbol.declarations) === null || _a === void 0 ? void 0 : _a.find(function (d) { return d.kind === 337 /* JSDocPropertyTag */; });
+                    if (ts.some(propertySymbol.declarations, function (d) { return d.kind === 342 /* JSDocPropertyTag */; })) {
+                        var d = (_a = propertySymbol.declarations) === null || _a === void 0 ? void 0 : _a.find(function (d) { return d.kind === 342 /* JSDocPropertyTag */; });
                         var commentText = ts.getTextOfJSDocComment(d.comment);
                         if (commentText) {
                             ts.setSyntheticLeadingComments(node, [{ kind: 3 /* MultiLineCommentTrivia */, text: "*\n * " + commentText.replace(/\n/g, "\n * ") + "\n ", pos: -1, end: -1, hasTrailingNewLine: true }]);
@@ -49675,9 +50761,9 @@
                     || !!a.symbol && a.symbol === b.symbol
                     || !!a.aliasSymbol && a.aliasSymbol === b.aliasSymbol;
             }
-            function indexInfoToIndexSignatureDeclarationHelper(indexInfo, kind, context, typeNode) {
+            function indexInfoToIndexSignatureDeclarationHelper(indexInfo, context, typeNode) {
                 var name = ts.getNameFromIndexInfo(indexInfo) || "x";
-                var indexerTypeNode = ts.factory.createKeywordTypeNode(kind === 0 /* String */ ? 147 /* StringKeyword */ : 144 /* NumberKeyword */);
+                var indexerTypeNode = typeToTypeNodeHelper(indexInfo.keyType, context);
                 var indexingParameter = ts.factory.createParameterDeclaration(
                 /*decorators*/ undefined, 
                 /*modifiers*/ undefined, 
@@ -49692,13 +50778,14 @@
                 }
                 context.approximateLength += (name.length + 4);
                 return ts.factory.createIndexSignature(
-                /*decorators*/ undefined, indexInfo.isReadonly ? [ts.factory.createToken(142 /* ReadonlyKeyword */)] : undefined, [indexingParameter], typeNode);
+                /*decorators*/ undefined, indexInfo.isReadonly ? [ts.factory.createToken(143 /* ReadonlyKeyword */)] : undefined, [indexingParameter], typeNode);
             }
             function signatureToSignatureDeclarationHelper(signature, kind, context, options) {
                 var _a, _b, _c, _d;
                 var suppressAny = context.flags & 256 /* SuppressAnyReturnType */;
                 if (suppressAny)
                     context.flags &= ~256 /* SuppressAnyReturnType */; // suppress only toplevel `any`s
+                context.approximateLength += 3; // Usually a signature contributes a few more characters than this, but 3 is the minimum
                 var typeParameters;
                 var typeArguments;
                 if (context.flags & 32 /* WriteTypeArgumentsOfSignature */ && signature.target && signature.mapper && signature.target.typeParameters) {
@@ -49709,7 +50796,7 @@
                 }
                 var expandedParams = getExpandedParameters(signature, /*skipUnionExpanding*/ true)[0];
                 // If the expanded parameter list had a variadic in a non-trailing position, don't expand it
-                var parameters = (ts.some(expandedParams, function (p) { return p !== expandedParams[expandedParams.length - 1] && !!(ts.getCheckFlags(p) & 32768 /* RestParameter */); }) ? signature.parameters : expandedParams).map(function (parameter) { return symbolToParameterDeclaration(parameter, context, kind === 167 /* Constructor */, options === null || options === void 0 ? void 0 : options.privateSymbolVisitor, options === null || options === void 0 ? void 0 : options.bundledImports); });
+                var parameters = (ts.some(expandedParams, function (p) { return p !== expandedParams[expandedParams.length - 1] && !!(ts.getCheckFlags(p) & 32768 /* RestParameter */); }) ? signature.parameters : expandedParams).map(function (parameter) { return symbolToParameterDeclaration(parameter, context, kind === 169 /* Constructor */, options === null || options === void 0 ? void 0 : options.privateSymbolVisitor, options === null || options === void 0 ? void 0 : options.bundledImports); });
                 if (signature.thisParameter) {
                     var thisParameter = symbolToParameterDeclaration(signature.thisParameter, context);
                     parameters.unshift(thisParameter);
@@ -49718,7 +50805,7 @@
                 var typePredicate = getTypePredicateOfSignature(signature);
                 if (typePredicate) {
                     var assertsModifier = typePredicate.kind === 2 /* AssertsThis */ || typePredicate.kind === 3 /* AssertsIdentifier */ ?
-                        ts.factory.createToken(127 /* AssertsKeyword */) :
+                        ts.factory.createToken(128 /* AssertsKeyword */) :
                         undefined;
                     var parameterName = typePredicate.kind === 1 /* Identifier */ || typePredicate.kind === 3 /* AssertsIdentifier */ ?
                         ts.setEmitFlags(ts.factory.createIdentifier(typePredicate.parameterName), 16777216 /* NoAsciiEscaping */) :
@@ -49732,29 +50819,28 @@
                         returnTypeNode = serializeReturnTypeForSignature(context, returnType, signature, options === null || options === void 0 ? void 0 : options.privateSymbolVisitor, options === null || options === void 0 ? void 0 : options.bundledImports);
                     }
                     else if (!suppressAny) {
-                        returnTypeNode = ts.factory.createKeywordTypeNode(128 /* AnyKeyword */);
+                        returnTypeNode = ts.factory.createKeywordTypeNode(129 /* AnyKeyword */);
                     }
                 }
                 var modifiers = options === null || options === void 0 ? void 0 : options.modifiers;
-                if ((kind === 176 /* ConstructorType */) && signature.flags & 4 /* Abstract */) {
+                if ((kind === 178 /* ConstructorType */) && signature.flags & 4 /* Abstract */) {
                     var flags = ts.modifiersToFlags(modifiers);
                     modifiers = ts.factory.createModifiersFromModifierFlags(flags | 128 /* Abstract */);
                 }
-                context.approximateLength += 3; // Usually a signature contributes a few more characters than this, but 3 is the minimum
-                var node = kind === 170 /* CallSignature */ ? ts.factory.createCallSignature(typeParameters, parameters, returnTypeNode) :
-                    kind === 171 /* ConstructSignature */ ? ts.factory.createConstructSignature(typeParameters, parameters, returnTypeNode) :
-                        kind === 165 /* MethodSignature */ ? ts.factory.createMethodSignature(modifiers, (_a = options === null || options === void 0 ? void 0 : options.name) !== null && _a !== void 0 ? _a : ts.factory.createIdentifier(""), options === null || options === void 0 ? void 0 : options.questionToken, typeParameters, parameters, returnTypeNode) :
-                            kind === 166 /* MethodDeclaration */ ? ts.factory.createMethodDeclaration(/*decorators*/ undefined, modifiers, /*asteriskToken*/ undefined, (_b = options === null || options === void 0 ? void 0 : options.name) !== null && _b !== void 0 ? _b : ts.factory.createIdentifier(""), /*questionToken*/ undefined, typeParameters, parameters, returnTypeNode, /*body*/ undefined) :
-                                kind === 167 /* Constructor */ ? ts.factory.createConstructorDeclaration(/*decorators*/ undefined, modifiers, parameters, /*body*/ undefined) :
-                                    kind === 168 /* GetAccessor */ ? ts.factory.createGetAccessorDeclaration(/*decorators*/ undefined, modifiers, (_c = options === null || options === void 0 ? void 0 : options.name) !== null && _c !== void 0 ? _c : ts.factory.createIdentifier(""), parameters, returnTypeNode, /*body*/ undefined) :
-                                        kind === 169 /* SetAccessor */ ? ts.factory.createSetAccessorDeclaration(/*decorators*/ undefined, modifiers, (_d = options === null || options === void 0 ? void 0 : options.name) !== null && _d !== void 0 ? _d : ts.factory.createIdentifier(""), parameters, /*body*/ undefined) :
-                                            kind === 172 /* IndexSignature */ ? ts.factory.createIndexSignature(/*decorators*/ undefined, modifiers, parameters, returnTypeNode) :
-                                                kind === 309 /* JSDocFunctionType */ ? ts.factory.createJSDocFunctionType(parameters, returnTypeNode) :
-                                                    kind === 175 /* FunctionType */ ? ts.factory.createFunctionTypeNode(typeParameters, parameters, returnTypeNode !== null && returnTypeNode !== void 0 ? returnTypeNode : ts.factory.createTypeReferenceNode(ts.factory.createIdentifier(""))) :
-                                                        kind === 176 /* ConstructorType */ ? ts.factory.createConstructorTypeNode(modifiers, typeParameters, parameters, returnTypeNode !== null && returnTypeNode !== void 0 ? returnTypeNode : ts.factory.createTypeReferenceNode(ts.factory.createIdentifier(""))) :
-                                                            kind === 252 /* FunctionDeclaration */ ? ts.factory.createFunctionDeclaration(/*decorators*/ undefined, modifiers, /*asteriskToken*/ undefined, (options === null || options === void 0 ? void 0 : options.name) ? ts.cast(options.name, ts.isIdentifier) : ts.factory.createIdentifier(""), typeParameters, parameters, returnTypeNode, /*body*/ undefined) :
-                                                                kind === 209 /* FunctionExpression */ ? ts.factory.createFunctionExpression(modifiers, /*asteriskToken*/ undefined, (options === null || options === void 0 ? void 0 : options.name) ? ts.cast(options.name, ts.isIdentifier) : ts.factory.createIdentifier(""), typeParameters, parameters, returnTypeNode, ts.factory.createBlock([])) :
-                                                                    kind === 210 /* ArrowFunction */ ? ts.factory.createArrowFunction(modifiers, typeParameters, parameters, returnTypeNode, /*equalsGreaterThanToken*/ undefined, ts.factory.createBlock([])) :
+                var node = kind === 172 /* CallSignature */ ? ts.factory.createCallSignature(typeParameters, parameters, returnTypeNode) :
+                    kind === 173 /* ConstructSignature */ ? ts.factory.createConstructSignature(typeParameters, parameters, returnTypeNode) :
+                        kind === 166 /* MethodSignature */ ? ts.factory.createMethodSignature(modifiers, (_a = options === null || options === void 0 ? void 0 : options.name) !== null && _a !== void 0 ? _a : ts.factory.createIdentifier(""), options === null || options === void 0 ? void 0 : options.questionToken, typeParameters, parameters, returnTypeNode) :
+                            kind === 167 /* MethodDeclaration */ ? ts.factory.createMethodDeclaration(/*decorators*/ undefined, modifiers, /*asteriskToken*/ undefined, (_b = options === null || options === void 0 ? void 0 : options.name) !== null && _b !== void 0 ? _b : ts.factory.createIdentifier(""), /*questionToken*/ undefined, typeParameters, parameters, returnTypeNode, /*body*/ undefined) :
+                                kind === 169 /* Constructor */ ? ts.factory.createConstructorDeclaration(/*decorators*/ undefined, modifiers, parameters, /*body*/ undefined) :
+                                    kind === 170 /* GetAccessor */ ? ts.factory.createGetAccessorDeclaration(/*decorators*/ undefined, modifiers, (_c = options === null || options === void 0 ? void 0 : options.name) !== null && _c !== void 0 ? _c : ts.factory.createIdentifier(""), parameters, returnTypeNode, /*body*/ undefined) :
+                                        kind === 171 /* SetAccessor */ ? ts.factory.createSetAccessorDeclaration(/*decorators*/ undefined, modifiers, (_d = options === null || options === void 0 ? void 0 : options.name) !== null && _d !== void 0 ? _d : ts.factory.createIdentifier(""), parameters, /*body*/ undefined) :
+                                            kind === 174 /* IndexSignature */ ? ts.factory.createIndexSignature(/*decorators*/ undefined, modifiers, parameters, returnTypeNode) :
+                                                kind === 312 /* JSDocFunctionType */ ? ts.factory.createJSDocFunctionType(parameters, returnTypeNode) :
+                                                    kind === 177 /* FunctionType */ ? ts.factory.createFunctionTypeNode(typeParameters, parameters, returnTypeNode !== null && returnTypeNode !== void 0 ? returnTypeNode : ts.factory.createTypeReferenceNode(ts.factory.createIdentifier(""))) :
+                                                        kind === 178 /* ConstructorType */ ? ts.factory.createConstructorTypeNode(modifiers, typeParameters, parameters, returnTypeNode !== null && returnTypeNode !== void 0 ? returnTypeNode : ts.factory.createTypeReferenceNode(ts.factory.createIdentifier(""))) :
+                                                            kind === 254 /* FunctionDeclaration */ ? ts.factory.createFunctionDeclaration(/*decorators*/ undefined, modifiers, /*asteriskToken*/ undefined, (options === null || options === void 0 ? void 0 : options.name) ? ts.cast(options.name, ts.isIdentifier) : ts.factory.createIdentifier(""), typeParameters, parameters, returnTypeNode, /*body*/ undefined) :
+                                                                kind === 211 /* FunctionExpression */ ? ts.factory.createFunctionExpression(modifiers, /*asteriskToken*/ undefined, (options === null || options === void 0 ? void 0 : options.name) ? ts.cast(options.name, ts.isIdentifier) : ts.factory.createIdentifier(""), typeParameters, parameters, returnTypeNode, ts.factory.createBlock([])) :
+                                                                    kind === 212 /* ArrowFunction */ ? ts.factory.createArrowFunction(modifiers, typeParameters, parameters, returnTypeNode, /*equalsGreaterThanToken*/ undefined, ts.factory.createBlock([])) :
                                                                         ts.Debug.assertNever(kind);
                 if (typeArguments) {
                     node.typeArguments = ts.factory.createNodeArray(typeArguments);
@@ -49776,9 +50862,9 @@
                 return typeParameterToDeclarationWithConstraint(type, context, constraintNode);
             }
             function symbolToParameterDeclaration(parameterSymbol, context, preserveModifierFlags, privateSymbolVisitor, bundledImports) {
-                var parameterDeclaration = ts.getDeclarationOfKind(parameterSymbol, 161 /* Parameter */);
+                var parameterDeclaration = ts.getDeclarationOfKind(parameterSymbol, 162 /* Parameter */);
                 if (!parameterDeclaration && !ts.isTransientSymbol(parameterSymbol)) {
-                    parameterDeclaration = ts.getDeclarationOfKind(parameterSymbol, 330 /* JSDocParameterTag */);
+                    parameterDeclaration = ts.getDeclarationOfKind(parameterSymbol, 335 /* JSDocParameterTag */);
                 }
                 var parameterType = getTypeOfSymbol(parameterSymbol);
                 if (parameterDeclaration && isRequiredInitializedParameter(parameterDeclaration)) {
@@ -49792,8 +50878,8 @@
                 var isRest = parameterDeclaration && ts.isRestParameter(parameterDeclaration) || ts.getCheckFlags(parameterSymbol) & 32768 /* RestParameter */;
                 var dotDotDotToken = isRest ? ts.factory.createToken(25 /* DotDotDotToken */) : undefined;
                 var name = parameterDeclaration ? parameterDeclaration.name ?
-                    parameterDeclaration.name.kind === 78 /* Identifier */ ? ts.setEmitFlags(ts.factory.cloneNode(parameterDeclaration.name), 16777216 /* NoAsciiEscaping */) :
-                        parameterDeclaration.name.kind === 158 /* QualifiedName */ ? ts.setEmitFlags(ts.factory.cloneNode(parameterDeclaration.name.right), 16777216 /* NoAsciiEscaping */) :
+                    parameterDeclaration.name.kind === 79 /* Identifier */ ? ts.setEmitFlags(ts.factory.cloneNode(parameterDeclaration.name), 16777216 /* NoAsciiEscaping */) :
+                        parameterDeclaration.name.kind === 159 /* QualifiedName */ ? ts.setEmitFlags(ts.factory.cloneNode(parameterDeclaration.name.right), 16777216 /* NoAsciiEscaping */) :
                             cloneBindingName(parameterDeclaration.name) :
                     ts.symbolName(parameterSymbol) :
                     ts.symbolName(parameterSymbol);
@@ -49958,11 +51044,11 @@
             }
             function getSpecifierForModuleSymbol(symbol, context) {
                 var _a;
-                var file = ts.getDeclarationOfKind(symbol, 298 /* SourceFile */);
+                var file = ts.getDeclarationOfKind(symbol, 300 /* SourceFile */);
                 if (!file) {
                     var equivalentFileSymbol = ts.firstDefined(symbol.declarations, function (d) { return getFileSymbolIfFileSymbolExportEqualsContainer(d, symbol); });
                     if (equivalentFileSymbol) {
-                        file = ts.getDeclarationOfKind(equivalentFileSymbol, 298 /* SourceFile */);
+                        file = ts.getDeclarationOfKind(equivalentFileSymbol, 300 /* SourceFile */);
                     }
                 }
                 if (file && file.moduleName !== undefined) {
@@ -50114,7 +51200,7 @@
                 return false;
             }
             function typeParameterToName(type, context) {
-                var _a;
+                var _a, _b;
                 if (context.flags & 4 /* GenerateNamesForShadowedTypeParams */ && context.typeParameterNames) {
                     var cached = context.typeParameterNames.get(getTypeId(type));
                     if (cached) {
@@ -50122,22 +51208,25 @@
                     }
                 }
                 var result = symbolToName(type.symbol, context, 788968 /* Type */, /*expectsIdentifier*/ true);
-                if (!(result.kind & 78 /* Identifier */)) {
+                if (!(result.kind & 79 /* Identifier */)) {
                     return ts.factory.createIdentifier("(Missing type parameter)");
                 }
                 if (context.flags & 4 /* GenerateNamesForShadowedTypeParams */) {
                     var rawtext = result.escapedText;
-                    var i = 0;
+                    var i = ((_a = context.typeParameterNamesByTextNextNameCount) === null || _a === void 0 ? void 0 : _a.get(rawtext)) || 0;
                     var text = rawtext;
-                    while (((_a = context.typeParameterNamesByText) === null || _a === void 0 ? void 0 : _a.has(text)) || typeParameterShadowsNameInScope(text, context, type)) {
+                    while (((_b = context.typeParameterNamesByText) === null || _b === void 0 ? void 0 : _b.has(text)) || typeParameterShadowsNameInScope(text, context, type)) {
                         i++;
                         text = rawtext + "_" + i;
                     }
                     if (text !== rawtext) {
                         result = ts.factory.createIdentifier(text, result.typeArguments);
                     }
+                    // avoiding iterations of the above loop turns out to be worth it when `i` starts to get large, so we cache the max
+                    // `i` we've used thus far, to save work later
+                    (context.typeParameterNamesByTextNextNameCount || (context.typeParameterNamesByTextNextNameCount = new ts.Map())).set(rawtext, i);
                     (context.typeParameterNames || (context.typeParameterNames = new ts.Map())).set(getTypeId(type), result);
-                    (context.typeParameterNamesByText || (context.typeParameterNamesByText = new ts.Set())).add(result.escapedText);
+                    (context.typeParameterNamesByText || (context.typeParameterNamesByText = new ts.Set())).add(rawtext);
                 }
                 return result;
             }
@@ -50276,6 +51365,7 @@
                 if (initial.typeParameterSymbolList) {
                     initial.typeParameterSymbolList = new ts.Set(initial.typeParameterSymbolList);
                 }
+                initial.tracker = wrapSymbolTrackerToReportForContext(initial, initial.tracker);
                 return initial;
             }
             function getDeclarationWithTypeAnnotation(symbol, enclosingDeclaration) {
@@ -50365,17 +51455,17 @@
                 return transformed === existing ? ts.setTextRange(ts.factory.cloneNode(existing), existing) : transformed;
                 function visitExistingNodeTreeSymbols(node) {
                     // We don't _actually_ support jsdoc namepath types, emit `any` instead
-                    if (ts.isJSDocAllType(node) || node.kind === 311 /* JSDocNamepathType */) {
-                        return ts.factory.createKeywordTypeNode(128 /* AnyKeyword */);
+                    if (ts.isJSDocAllType(node) || node.kind === 314 /* JSDocNamepathType */) {
+                        return ts.factory.createKeywordTypeNode(129 /* AnyKeyword */);
                     }
                     if (ts.isJSDocUnknownType(node)) {
-                        return ts.factory.createKeywordTypeNode(152 /* UnknownKeyword */);
+                        return ts.factory.createKeywordTypeNode(153 /* UnknownKeyword */);
                     }
                     if (ts.isJSDocNullableType(node)) {
                         return ts.factory.createUnionTypeNode([ts.visitNode(node.type, visitExistingNodeTreeSymbols), ts.factory.createLiteralTypeNode(ts.factory.createNull())]);
                     }
                     if (ts.isJSDocOptionalType(node)) {
-                        return ts.factory.createUnionTypeNode([ts.visitNode(node.type, visitExistingNodeTreeSymbols), ts.factory.createKeywordTypeNode(150 /* UndefinedKeyword */)]);
+                        return ts.factory.createUnionTypeNode([ts.visitNode(node.type, visitExistingNodeTreeSymbols), ts.factory.createKeywordTypeNode(151 /* UndefinedKeyword */)]);
                     }
                     if (ts.isJSDocNonNullableType(node)) {
                         return ts.visitNode(node.type, visitExistingNodeTreeSymbols);
@@ -50389,11 +51479,11 @@
                             var typeViaParent = getTypeOfPropertyOfType(getTypeFromTypeNode(node), name.escapedText);
                             var overrideTypeNode = typeViaParent && t.typeExpression && getTypeFromTypeNode(t.typeExpression.type) !== typeViaParent ? typeToTypeNodeHelper(typeViaParent, context) : undefined;
                             return ts.factory.createPropertySignature(
-                            /*modifiers*/ undefined, name, t.isBracketed || t.typeExpression && ts.isJSDocOptionalType(t.typeExpression.type) ? ts.factory.createToken(57 /* QuestionToken */) : undefined, overrideTypeNode || (t.typeExpression && ts.visitNode(t.typeExpression.type, visitExistingNodeTreeSymbols)) || ts.factory.createKeywordTypeNode(128 /* AnyKeyword */));
+                            /*modifiers*/ undefined, name, t.isBracketed || t.typeExpression && ts.isJSDocOptionalType(t.typeExpression.type) ? ts.factory.createToken(57 /* QuestionToken */) : undefined, overrideTypeNode || (t.typeExpression && ts.visitNode(t.typeExpression.type, visitExistingNodeTreeSymbols)) || ts.factory.createKeywordTypeNode(129 /* AnyKeyword */));
                         }));
                     }
                     if (ts.isTypeReferenceNode(node) && ts.isIdentifier(node.typeName) && node.typeName.escapedText === "") {
-                        return ts.setOriginalNode(ts.factory.createKeywordTypeNode(128 /* AnyKeyword */), node);
+                        return ts.setOriginalNode(ts.factory.createKeywordTypeNode(129 /* AnyKeyword */), node);
                     }
                     if ((ts.isExpressionWithTypeArguments(node) || ts.isTypeReferenceNode(node)) && ts.isJSDocIndexSignature(node)) {
                         return ts.factory.createTypeLiteralNode([ts.factory.createIndexSignature(
@@ -50410,13 +51500,13 @@
                             return ts.factory.createConstructorTypeNode(node.modifiers, ts.visitNodes(node.typeParameters, visitExistingNodeTreeSymbols), ts.mapDefined(node.parameters, function (p, i) { return p.name && ts.isIdentifier(p.name) && p.name.escapedText === "new" ? (newTypeNode_1 = p.type, undefined) : ts.factory.createParameterDeclaration(
                             /*decorators*/ undefined, 
                             /*modifiers*/ undefined, getEffectiveDotDotDotForParameter(p), getNameForJSDocFunctionParameter(p, i), p.questionToken, ts.visitNode(p.type, visitExistingNodeTreeSymbols), 
-                            /*initializer*/ undefined); }), ts.visitNode(newTypeNode_1 || node.type, visitExistingNodeTreeSymbols) || ts.factory.createKeywordTypeNode(128 /* AnyKeyword */));
+                            /*initializer*/ undefined); }), ts.visitNode(newTypeNode_1 || node.type, visitExistingNodeTreeSymbols) || ts.factory.createKeywordTypeNode(129 /* AnyKeyword */));
                         }
                         else {
                             return ts.factory.createFunctionTypeNode(ts.visitNodes(node.typeParameters, visitExistingNodeTreeSymbols), ts.map(node.parameters, function (p, i) { return ts.factory.createParameterDeclaration(
                             /*decorators*/ undefined, 
                             /*modifiers*/ undefined, getEffectiveDotDotDotForParameter(p), getNameForJSDocFunctionParameter(p, i), p.questionToken, ts.visitNode(p.type, visitExistingNodeTreeSymbols), 
-                            /*initializer*/ undefined); }), ts.visitNode(node.type, visitExistingNodeTreeSymbols) || ts.factory.createKeywordTypeNode(128 /* AnyKeyword */));
+                            /*initializer*/ undefined); }), ts.visitNode(node.type, visitExistingNodeTreeSymbols) || ts.factory.createKeywordTypeNode(129 /* AnyKeyword */));
                         }
                     }
                     if (ts.isTypeReferenceNode(node) && ts.isInJSDoc(node) && (!existingTypeNodeIsNotReferenceOrIsReferenceWithCompatibleTypeArgumentCount(node, getTypeFromTypeNode(node)) || getIntendedTypeFromJSDocTypeReference(node) || unknownSymbol === resolveTypeReferenceName(getTypeReferenceName(node), 788968 /* Type */, /*ignoreErrors*/ true))) {
@@ -50484,8 +51574,8 @@
                 }
             }
             function symbolTableToDeclarationStatements(symbolTable, context, bundled) {
-                var serializePropertySymbolForClass = makeSerializePropertySymbol(ts.factory.createPropertyDeclaration, 166 /* MethodDeclaration */, /*useAcessors*/ true);
-                var serializePropertySymbolForInterfaceWorker = makeSerializePropertySymbol(function (_decorators, mods, name, question, type) { return ts.factory.createPropertySignature(mods, name, question, type); }, 165 /* MethodSignature */, /*useAcessors*/ false);
+                var serializePropertySymbolForClass = makeSerializePropertySymbol(ts.factory.createPropertyDeclaration, 167 /* MethodDeclaration */, /*useAcessors*/ true);
+                var serializePropertySymbolForInterfaceWorker = makeSerializePropertySymbol(function (_decorators, mods, name, question, type) { return ts.factory.createPropertySignature(mods, name, question, type); }, 166 /* MethodSignature */, /*useAcessors*/ false);
                 // TODO: Use `setOriginalNode` on original declaration names where possible so these declarations see some kind of
                 // declaration mapping
                 // We save the enclosing declaration off here so it's not adjusted by well-meaning declaration
@@ -50506,9 +51596,11 @@
                                 }
                             }
                             else if (oldcontext.tracker && oldcontext.tracker.trackSymbol) {
-                                oldcontext.tracker.trackSymbol(sym, decl, meaning);
+                                return oldcontext.tracker.trackSymbol(sym, decl, meaning);
                             }
+                            return false;
                         } }) });
+                context.tracker = wrapSymbolTrackerToReportForContext(context, context.tracker);
                 ts.forEachEntry(symbolTable, function (symbol, name) {
                     var baseName = ts.unescapeLeadingUnderscores(name);
                     void getInternalSymbolName(symbol, baseName); // Called to cache values into `usedSymbolNames` and `remappedSymbolNames`
@@ -50523,7 +51615,7 @@
                 visitSymbolTable(symbolTable);
                 return mergeRedundantStatements(results);
                 function isIdentifierAndNotUndefined(node) {
-                    return !!node && node.kind === 78 /* Identifier */;
+                    return !!node && node.kind === 79 /* Identifier */;
                 }
                 function getNamesOfDeclaration(statement) {
                     if (ts.isVariableStatement(statement)) {
@@ -50544,12 +51636,12 @@
                         var name_2 = ns.name;
                         var body = ns.body;
                         if (ts.length(excessExports)) {
-                            ns = ts.factory.updateModuleDeclaration(ns, ns.decorators, ns.modifiers, ns.name, body = ts.factory.updateModuleBlock(body, ts.factory.createNodeArray(__spreadArray(__spreadArray([], ns.body.statements), [ts.factory.createExportDeclaration(
+                            ns = ts.factory.updateModuleDeclaration(ns, ns.decorators, ns.modifiers, ns.name, body = ts.factory.updateModuleBlock(body, ts.factory.createNodeArray(__spreadArray(__spreadArray([], ns.body.statements, true), [ts.factory.createExportDeclaration(
                                 /*decorators*/ undefined, 
                                 /*modifiers*/ undefined, 
                                 /*isTypeOnly*/ false, ts.factory.createNamedExports(ts.map(ts.flatMap(excessExports, function (e) { return getNamesOfDeclaration(e); }), function (id) { return ts.factory.createExportSpecifier(/*alias*/ undefined, id); })), 
-                                /*moduleSpecifier*/ undefined)]))));
-                            statements = __spreadArray(__spreadArray(__spreadArray([], statements.slice(0, nsIndex)), [ns]), statements.slice(nsIndex + 1));
+                                /*moduleSpecifier*/ undefined)], false))));
+                            statements = __spreadArray(__spreadArray(__spreadArray([], statements.slice(0, nsIndex), true), [ns], false), statements.slice(nsIndex + 1), true);
                         }
                         // Pass 1: Flatten `export namespace _exports {} export = _exports;` so long as the `export=` only points at a single namespace declaration
                         if (!ts.find(statements, function (s) { return s !== ns && ts.nodeHasName(s, name_2); })) {
@@ -50560,7 +51652,7 @@
                             ts.forEach(body.statements, function (s) {
                                 addResult(s, mixinExportFlag_1 ? 1 /* Export */ : 0 /* None */); // Recalculates the ambient (and export, if applicable from above) flag
                             });
-                            statements = __spreadArray(__spreadArray([], ts.filter(statements, function (s) { return s !== ns && s !== exportAssignment; })), results);
+                            statements = __spreadArray(__spreadArray([], ts.filter(statements, function (s) { return s !== ns && s !== exportAssignment; }), true), results, true);
                         }
                     }
                     return statements;
@@ -50570,11 +51662,11 @@
                     var exports = ts.filter(statements, function (d) { return ts.isExportDeclaration(d) && !d.moduleSpecifier && !!d.exportClause && ts.isNamedExports(d.exportClause); });
                     if (ts.length(exports) > 1) {
                         var nonExports = ts.filter(statements, function (d) { return !ts.isExportDeclaration(d) || !!d.moduleSpecifier || !d.exportClause; });
-                        statements = __spreadArray(__spreadArray([], nonExports), [ts.factory.createExportDeclaration(
+                        statements = __spreadArray(__spreadArray([], nonExports, true), [ts.factory.createExportDeclaration(
                             /*decorators*/ undefined, 
                             /*modifiers*/ undefined, 
                             /*isTypeOnly*/ false, ts.factory.createNamedExports(ts.flatMap(exports, function (e) { return ts.cast(e.exportClause, ts.isNamedExports).elements; })), 
-                            /*moduleSpecifier*/ undefined)]);
+                            /*moduleSpecifier*/ undefined)], false);
                     }
                     // Pass 2b: Also combine all `export {} from "..."` declarations as needed
                     var reexports = ts.filter(statements, function (d) { return ts.isExportDeclaration(d) && !!d.moduleSpecifier && !!d.exportClause && ts.isNamedExports(d.exportClause); });
@@ -50584,12 +51676,12 @@
                             var _loop_9 = function (group_1) {
                                 if (group_1.length > 1) {
                                     // remove group members from statements and then merge group members and add back to statements
-                                    statements = __spreadArray(__spreadArray([], ts.filter(statements, function (s) { return group_1.indexOf(s) === -1; })), [
+                                    statements = __spreadArray(__spreadArray([], ts.filter(statements, function (s) { return group_1.indexOf(s) === -1; }), true), [
                                         ts.factory.createExportDeclaration(
                                         /*decorators*/ undefined, 
                                         /*modifiers*/ undefined, 
                                         /*isTypeOnly*/ false, ts.factory.createNamedExports(ts.flatMap(group_1, function (e) { return ts.cast(e.exportClause, ts.isNamedExports).elements; })), group_1[0].moduleSpecifier)
-                                    ]);
+                                    ], false);
                                 }
                             };
                             for (var _i = 0, groups_1 = groups; _i < groups_1.length; _i++) {
@@ -50692,6 +51784,9 @@
                         var oldContext = context;
                         context = cloneNodeBuilderContext(context);
                         var result = serializeSymbolWorker(symbol, isPrivate, propertyAsAlias);
+                        if (context.reportedDiagnostic) {
+                            oldcontext.reportedDiagnostic = context.reportedDiagnostic; // hoist diagnostic result into outer context
+                        }
                         context = oldContext;
                         return result;
                     }
@@ -50940,13 +52035,13 @@
                     var baseTypes = getBaseTypes(interfaceType);
                     var baseType = ts.length(baseTypes) ? getIntersectionType(baseTypes) : undefined;
                     var members = ts.flatMap(getPropertiesOfType(interfaceType), function (p) { return serializePropertySymbolForInterface(p, baseType); });
-                    var callSignatures = serializeSignatures(0 /* Call */, interfaceType, baseType, 170 /* CallSignature */);
-                    var constructSignatures = serializeSignatures(1 /* Construct */, interfaceType, baseType, 171 /* ConstructSignature */);
+                    var callSignatures = serializeSignatures(0 /* Call */, interfaceType, baseType, 172 /* CallSignature */);
+                    var constructSignatures = serializeSignatures(1 /* Construct */, interfaceType, baseType, 173 /* ConstructSignature */);
                     var indexSignatures = serializeIndexSignatures(interfaceType, baseType);
-                    var heritageClauses = !ts.length(baseTypes) ? undefined : [ts.factory.createHeritageClause(93 /* ExtendsKeyword */, ts.mapDefined(baseTypes, function (b) { return trySerializeAsTypeReference(b, 111551 /* Value */); }))];
+                    var heritageClauses = !ts.length(baseTypes) ? undefined : [ts.factory.createHeritageClause(94 /* ExtendsKeyword */, ts.mapDefined(baseTypes, function (b) { return trySerializeAsTypeReference(b, 111551 /* Value */); }))];
                     addResult(ts.factory.createInterfaceDeclaration(
                     /*decorators*/ undefined, 
-                    /*modifiers*/ undefined, getInternalSymbolName(symbol, symbolName), typeParamDecls, heritageClauses, __spreadArray(__spreadArray(__spreadArray(__spreadArray([], indexSignatures), constructSignatures), callSignatures), members)), modifierFlags);
+                    /*modifiers*/ undefined, getInternalSymbolName(symbol, symbolName), typeParamDecls, heritageClauses, __spreadArray(__spreadArray(__spreadArray(__spreadArray([], indexSignatures, true), constructSignatures, true), callSignatures, true), members, true)), modifierFlags);
                 }
                 function getNamespaceMembersForSerialization(symbol) {
                     return !symbol.exports ? [] : ts.filter(ts.arrayFrom(symbol.exports.values()), isNamespaceMember);
@@ -51010,7 +52105,7 @@
                     for (var _i = 0, signatures_2 = signatures; _i < signatures_2.length; _i++) {
                         var sig = signatures_2[_i];
                         // Each overload becomes a separate function declaration, in order
-                        var decl = signatureToSignatureDeclarationHelper(sig, 252 /* FunctionDeclaration */, context, { name: ts.factory.createIdentifier(localName), privateSymbolVisitor: includePrivateSymbol, bundledImports: bundled });
+                        var decl = signatureToSignatureDeclarationHelper(sig, 254 /* FunctionDeclaration */, context, { name: ts.factory.createIdentifier(localName), privateSymbolVisitor: includePrivateSymbol, bundledImports: bundled });
                         addResult(ts.setTextRange(decl, getSignatureTextRangeLocation(sig)), modifierFlags);
                     }
                     // Module symbol emit will take care of module-y members, provided it has exports
@@ -51084,7 +52179,7 @@
                 }
                 function isNamespaceMember(p) {
                     return !!(p.flags & (788968 /* Type */ | 1920 /* Namespace */ | 2097152 /* Alias */)) ||
-                        !(p.flags & 4194304 /* Prototype */ || p.escapedName === "prototype" || p.valueDeclaration && ts.getEffectiveModifierFlags(p.valueDeclaration) & 32 /* Static */ && ts.isClassLike(p.valueDeclaration.parent));
+                        !(p.flags & 4194304 /* Prototype */ || p.escapedName === "prototype" || p.valueDeclaration && ts.isStatic(p.valueDeclaration) && ts.isClassLike(p.valueDeclaration.parent));
                 }
                 function sanitizeJSDocImplements(clauses) {
                     var result = ts.mapDefined(clauses, function (e) {
@@ -51133,7 +52228,7 @@
                     var staticBaseType = isClass
                         ? getBaseConstructorTypeOfClass(staticType)
                         : anyType;
-                    var heritageClauses = __spreadArray(__spreadArray([], !ts.length(baseTypes) ? [] : [ts.factory.createHeritageClause(93 /* ExtendsKeyword */, ts.map(baseTypes, function (b) { return serializeBaseType(b, staticBaseType, localName); }))]), !ts.length(implementsExpressions) ? [] : [ts.factory.createHeritageClause(116 /* ImplementsKeyword */, implementsExpressions)]);
+                    var heritageClauses = __spreadArray(__spreadArray([], !ts.length(baseTypes) ? [] : [ts.factory.createHeritageClause(94 /* ExtendsKeyword */, ts.map(baseTypes, function (b) { return serializeBaseType(b, staticBaseType, localName); }))], true), !ts.length(implementsExpressions) ? [] : [ts.factory.createHeritageClause(117 /* ImplementsKeyword */, implementsExpressions)], true);
                     var symbolProps = getNonInterhitedProperties(classType, baseTypes, getPropertiesOfType(classType));
                     var publicSymbolProps = ts.filter(symbolProps, function (s) {
                         // `valueDeclaration` could be undefined if inherited from
@@ -51170,12 +52265,12 @@
                         !ts.some(getSignaturesOfType(staticType, 1 /* Construct */));
                     var constructors = isNonConstructableClassLikeInJsFile ?
                         [ts.factory.createConstructorDeclaration(/*decorators*/ undefined, ts.factory.createModifiersFromModifierFlags(8 /* Private */), [], /*body*/ undefined)] :
-                        serializeSignatures(1 /* Construct */, staticType, staticBaseType, 167 /* Constructor */);
+                        serializeSignatures(1 /* Construct */, staticType, staticBaseType, 169 /* Constructor */);
                     var indexSignatures = serializeIndexSignatures(classType, baseTypes[0]);
                     context.enclosingDeclaration = oldEnclosing;
                     addResult(ts.setTextRange(ts.factory.createClassDeclaration(
                     /*decorators*/ undefined, 
-                    /*modifiers*/ undefined, localName, typeParamDecls, heritageClauses, __spreadArray(__spreadArray(__spreadArray(__spreadArray(__spreadArray([], indexSignatures), staticMembers), constructors), publicProperties), privateProperties)), symbol.declarations && ts.filter(symbol.declarations, function (d) { return ts.isClassDeclaration(d) || ts.isClassExpression(d); })[0]), modifierFlags);
+                    /*modifiers*/ undefined, localName, typeParamDecls, heritageClauses, __spreadArray(__spreadArray(__spreadArray(__spreadArray(__spreadArray([], indexSignatures, true), staticMembers, true), constructors, true), publicProperties, true), privateProperties, true)), symbol.declarations && ts.filter(symbol.declarations, function (d) { return ts.isClassDeclaration(d) || ts.isClassExpression(d); })[0]), modifierFlags);
                 }
                 function serializeAsAlias(symbol, localName, modifierFlags) {
                     var _a, _b, _c, _d, _e;
@@ -51197,8 +52292,8 @@
                     var targetName = getInternalSymbolName(target, verbatimTargetName);
                     includePrivateSymbol(target); // the target may be within the same scope - attempt to serialize it first
                     switch (node.kind) {
-                        case 199 /* BindingElement */:
-                            if (((_b = (_a = node.parent) === null || _a === void 0 ? void 0 : _a.parent) === null || _b === void 0 ? void 0 : _b.kind) === 250 /* VariableDeclaration */) {
+                        case 201 /* BindingElement */:
+                            if (((_b = (_a = node.parent) === null || _a === void 0 ? void 0 : _a.parent) === null || _b === void 0 ? void 0 : _b.kind) === 252 /* VariableDeclaration */) {
                                 // const { SomeClass } = require('./lib');
                                 var specifier_1 = getSpecifierForModuleSymbol(target.parent || target, context); // './lib'
                                 var propertyName = node.propertyName;
@@ -51210,13 +52305,13 @@
                             // We don't know how to serialize this (nested?) binding element
                             ts.Debug.failBadSyntaxKind(((_c = node.parent) === null || _c === void 0 ? void 0 : _c.parent) || node, "Unhandled binding element grandparent kind in declaration serialization");
                             break;
-                        case 290 /* ShorthandPropertyAssignment */:
-                            if (((_e = (_d = node.parent) === null || _d === void 0 ? void 0 : _d.parent) === null || _e === void 0 ? void 0 : _e.kind) === 217 /* BinaryExpression */) {
+                        case 292 /* ShorthandPropertyAssignment */:
+                            if (((_e = (_d = node.parent) === null || _d === void 0 ? void 0 : _d.parent) === null || _e === void 0 ? void 0 : _e.kind) === 219 /* BinaryExpression */) {
                                 // module.exports = { SomeClass }
                                 serializeExportSpecifier(ts.unescapeLeadingUnderscores(symbol.escapedName), targetName);
                             }
                             break;
-                        case 250 /* VariableDeclaration */:
+                        case 252 /* VariableDeclaration */:
                             // commonjs require: const x = require('y')
                             if (ts.isPropertyAccessExpression(node.initializer)) {
                                 // const x = require('y').z
@@ -51236,7 +52331,7 @@
                                 break;
                             }
                         // else fall through and treat commonjs require just like import=
-                        case 261 /* ImportEqualsDeclaration */:
+                        case 263 /* ImportEqualsDeclaration */:
                             // This _specifically_ only exists to handle json declarations - where we make aliases, but since
                             // we emit no declarations for the json document, must not refer to it in the declarations
                             if (target.escapedName === "export=" /* ExportEquals */ && ts.some(target.declarations, ts.isJsonSourceFile)) {
@@ -51253,13 +52348,13 @@
                                 ? symbolToName(target, context, 67108863 /* All */, /*expectsIdentifier*/ false)
                                 : ts.factory.createExternalModuleReference(ts.factory.createStringLiteral(getSpecifierForModuleSymbol(target, context)))), isLocalImport ? modifierFlags : 0 /* None */);
                             break;
-                        case 260 /* NamespaceExportDeclaration */:
+                        case 262 /* NamespaceExportDeclaration */:
                             // export as namespace foo
                             // TODO: Not part of a file's local or export symbol tables
                             // Is bound into file.symbol.globalExports instead, which we don't currently traverse
                             addResult(ts.factory.createNamespaceExportDeclaration(ts.idText(node.name)), 0 /* None */);
                             break;
-                        case 263 /* ImportClause */:
+                        case 265 /* ImportClause */:
                             addResult(ts.factory.createImportDeclaration(
                             /*decorators*/ undefined, 
                             /*modifiers*/ undefined, ts.factory.createImportClause(/*isTypeOnly*/ false, ts.factory.createIdentifier(localName), /*namedBindings*/ undefined), 
@@ -51268,18 +52363,18 @@
                             // In such cases, the `target` refers to the module itself already
                             ts.factory.createStringLiteral(getSpecifierForModuleSymbol(target.parent || target, context))), 0 /* None */);
                             break;
-                        case 264 /* NamespaceImport */:
+                        case 266 /* NamespaceImport */:
                             addResult(ts.factory.createImportDeclaration(
                             /*decorators*/ undefined, 
                             /*modifiers*/ undefined, ts.factory.createImportClause(/*isTypeOnly*/ false, /*importClause*/ undefined, ts.factory.createNamespaceImport(ts.factory.createIdentifier(localName))), ts.factory.createStringLiteral(getSpecifierForModuleSymbol(target, context))), 0 /* None */);
                             break;
-                        case 270 /* NamespaceExport */:
+                        case 272 /* NamespaceExport */:
                             addResult(ts.factory.createExportDeclaration(
                             /*decorators*/ undefined, 
                             /*modifiers*/ undefined, 
                             /*isTypeOnly*/ false, ts.factory.createNamespaceExport(ts.factory.createIdentifier(localName)), ts.factory.createStringLiteral(getSpecifierForModuleSymbol(target, context))), 0 /* None */);
                             break;
-                        case 266 /* ImportSpecifier */:
+                        case 268 /* ImportSpecifier */:
                             addResult(ts.factory.createImportDeclaration(
                             /*decorators*/ undefined, 
                             /*modifiers*/ undefined, ts.factory.createImportClause(
@@ -51288,7 +52383,7 @@
                                 ts.factory.createImportSpecifier(localName !== verbatimTargetName ? ts.factory.createIdentifier(verbatimTargetName) : undefined, ts.factory.createIdentifier(localName))
                             ])), ts.factory.createStringLiteral(getSpecifierForModuleSymbol(target.parent || target, context))), 0 /* None */);
                             break;
-                        case 271 /* ExportSpecifier */:
+                        case 273 /* ExportSpecifier */:
                             // does not use localName because the symbol name in this case refers to the name in the exports table,
                             // which we must exactly preserve
                             var specifier = node.parent.parent.moduleSpecifier;
@@ -51296,12 +52391,12 @@
                             // another file
                             serializeExportSpecifier(ts.unescapeLeadingUnderscores(symbol.escapedName), specifier ? verbatimTargetName : targetName, specifier && ts.isStringLiteralLike(specifier) ? ts.factory.createStringLiteral(specifier.text) : undefined);
                             break;
-                        case 267 /* ExportAssignment */:
+                        case 269 /* ExportAssignment */:
                             serializeMaybeAliasAssignment(symbol);
                             break;
-                        case 217 /* BinaryExpression */:
-                        case 202 /* PropertyAccessExpression */:
-                        case 203 /* ElementAccessExpression */:
+                        case 219 /* BinaryExpression */:
+                        case 204 /* PropertyAccessExpression */:
+                        case 205 /* ElementAccessExpression */:
                             // Could be best encoded as though an export specifier or as though an export assignment
                             // If name is default or export=, do an export assignment
                             // Otherwise do an export specifier
@@ -51356,7 +52451,7 @@
                         // a visibility error here (as they're not visible within any scope), but we want to hoist them
                         // into the containing scope anyway, so we want to skip the visibility checks.
                         var oldTrack = context.tracker.trackSymbol;
-                        context.tracker.trackSymbol = ts.noop;
+                        context.tracker.trackSymbol = function () { return false; };
                         if (isExportAssignmentCompatibleSymbolName) {
                             results.push(ts.factory.createExportAssignment(
                             /*decorators*/ undefined, 
@@ -51422,8 +52517,7 @@
                     // whose input is not type annotated (if the input symbol has an annotation we can reuse, we should prefer it)
                     var ctxSrc = ts.getSourceFileOfNode(context.enclosingDeclaration);
                     return ts.getObjectFlags(typeToSerialize) & (16 /* Anonymous */ | 32 /* Mapped */) &&
-                        !getIndexInfoOfType(typeToSerialize, 0 /* String */) &&
-                        !getIndexInfoOfType(typeToSerialize, 1 /* Number */) &&
+                        !ts.length(getIndexInfosOfType(typeToSerialize)) &&
                         !isClassInstanceSide(typeToSerialize) && // While a class instance is potentially representable as a NS, prefer printing a reference to the instance type and serializing the class
                         !!(ts.length(ts.filter(getPropertiesOfType(typeToSerialize), isNamespaceMember)) || ts.length(getSignaturesOfType(typeToSerialize, 0 /* Call */))) &&
                         !ts.length(getSignaturesOfType(typeToSerialize, 1 /* Construct */)) && // TODO: could probably serialize as function + ns + class, now that that's OK
@@ -51561,20 +52655,17 @@
                 }
                 function serializeIndexSignatures(input, baseType) {
                     var results = [];
-                    for (var _i = 0, _a = [0 /* String */, 1 /* Number */]; _i < _a.length; _i++) {
-                        var type = _a[_i];
-                        var info = getIndexInfoOfType(input, type);
-                        if (info) {
-                            if (baseType) {
-                                var baseInfo = getIndexInfoOfType(baseType, type);
-                                if (baseInfo) {
-                                    if (isTypeIdenticalTo(info.type, baseInfo.type)) {
-                                        continue; // elide identical index signatures
-                                    }
+                    for (var _i = 0, _a = getIndexInfosOfType(input); _i < _a.length; _i++) {
+                        var info = _a[_i];
+                        if (baseType) {
+                            var baseInfo = getIndexInfoOfType(baseType, info.keyType);
+                            if (baseInfo) {
+                                if (isTypeIdenticalTo(info.type, baseInfo.type)) {
+                                    continue; // elide identical index signatures
                                 }
                             }
-                            results.push(indexInfoToIndexSignatureDeclarationHelper(info, type, context, /*typeNode*/ undefined));
                         }
+                        results.push(indexInfoToIndexSignatureDeclarationHelper(info, context, /*typeNode*/ undefined));
                     }
                     return results;
                 }
@@ -51671,7 +52762,7 @@
             if (flags === void 0) { flags = 16384 /* UseAliasDefinedOutsideCurrentScope */; }
             return writer ? typePredicateToStringWorker(writer).getText() : ts.usingSingleLineStringWriter(typePredicateToStringWorker);
             function typePredicateToStringWorker(writer) {
-                var predicate = ts.factory.createTypePredicateNode(typePredicate.kind === 2 /* AssertsThis */ || typePredicate.kind === 3 /* AssertsIdentifier */ ? ts.factory.createToken(127 /* AssertsKeyword */) : undefined, typePredicate.kind === 1 /* Identifier */ || typePredicate.kind === 3 /* AssertsIdentifier */ ? ts.factory.createIdentifier(typePredicate.parameterName) : ts.factory.createThisTypeNode(), typePredicate.type && nodeBuilder.typeToTypeNode(typePredicate.type, enclosingDeclaration, toNodeBuilderFlags(flags) | 70221824 /* IgnoreErrors */ | 512 /* WriteTypeParametersInQualifiedName */) // TODO: GH#18217
+                var predicate = ts.factory.createTypePredicateNode(typePredicate.kind === 2 /* AssertsThis */ || typePredicate.kind === 3 /* AssertsIdentifier */ ? ts.factory.createToken(128 /* AssertsKeyword */) : undefined, typePredicate.kind === 1 /* Identifier */ || typePredicate.kind === 3 /* AssertsIdentifier */ ? ts.factory.createIdentifier(typePredicate.parameterName) : ts.factory.createThisTypeNode(), typePredicate.type && nodeBuilder.typeToTypeNode(typePredicate.type, enclosingDeclaration, toNodeBuilderFlags(flags) | 70221824 /* IgnoreErrors */ | 512 /* WriteTypeParametersInQualifiedName */) // TODO: GH#18217
                 );
                 var printer = ts.createPrinter({ removeComments: true });
                 var sourceFile = enclosingDeclaration && ts.getSourceFileOfNode(enclosingDeclaration);
@@ -51718,7 +52809,7 @@
         function getTypeAliasForTypeLiteral(type) {
             if (type.symbol && type.symbol.flags & 2048 /* TypeLiteral */ && type.symbol.declarations) {
                 var node = ts.walkUpParenthesizedTypes(type.symbol.declarations[0].parent);
-                if (node.kind === 255 /* TypeAliasDeclaration */) {
+                if (node.kind === 257 /* TypeAliasDeclaration */) {
                     return getSymbolOfNode(node);
                 }
             }
@@ -51726,11 +52817,11 @@
         }
         function isTopLevelInExternalModuleAugmentation(node) {
             return node && node.parent &&
-                node.parent.kind === 258 /* ModuleBlock */ &&
+                node.parent.kind === 260 /* ModuleBlock */ &&
                 ts.isExternalModuleAugmentation(node.parent.parent);
         }
         function isDefaultBindingContext(location) {
-            return location.kind === 298 /* SourceFile */ || ts.isAmbientModule(location);
+            return location.kind === 300 /* SourceFile */ || ts.isAmbientModule(location);
         }
         function getNameOfSymbolFromNameType(symbol, context) {
             var nameType = getSymbolLinks(symbol).nameType;
@@ -51789,17 +52880,17 @@
                 if (!declaration) {
                     declaration = symbol.declarations[0]; // Declaration may be nameless, but we'll try anyway
                 }
-                if (declaration.parent && declaration.parent.kind === 250 /* VariableDeclaration */) {
+                if (declaration.parent && declaration.parent.kind === 252 /* VariableDeclaration */) {
                     return ts.declarationNameToString(declaration.parent.name);
                 }
                 switch (declaration.kind) {
-                    case 222 /* ClassExpression */:
-                    case 209 /* FunctionExpression */:
-                    case 210 /* ArrowFunction */:
+                    case 224 /* ClassExpression */:
+                    case 211 /* FunctionExpression */:
+                    case 212 /* ArrowFunction */:
                         if (context && !context.encounteredError && !(context.flags & 131072 /* AllowAnonymousIdentifier */)) {
                             context.encounteredError = true;
                         }
-                        return declaration.kind === 222 /* ClassExpression */ ? "(Anonymous class)" : "(Anonymous function)";
+                        return declaration.kind === 224 /* ClassExpression */ ? "(Anonymous class)" : "(Anonymous function)";
                 }
             }
             var name = getNameOfSymbolFromNameType(symbol, context);
@@ -51816,28 +52907,28 @@
             return false;
             function determineIfDeclarationIsVisible() {
                 switch (node.kind) {
-                    case 328 /* JSDocCallbackTag */:
-                    case 335 /* JSDocTypedefTag */:
-                    case 329 /* JSDocEnumTag */:
+                    case 333 /* JSDocCallbackTag */:
+                    case 340 /* JSDocTypedefTag */:
+                    case 334 /* JSDocEnumTag */:
                         // Top-level jsdoc type aliases are considered exported
                         // First parent is comment node, second is hosting declaration or token; we only care about those tokens or declarations whose parent is a source file
                         return !!(node.parent && node.parent.parent && node.parent.parent.parent && ts.isSourceFile(node.parent.parent.parent));
-                    case 199 /* BindingElement */:
+                    case 201 /* BindingElement */:
                         return isDeclarationVisible(node.parent.parent);
-                    case 250 /* VariableDeclaration */:
+                    case 252 /* VariableDeclaration */:
                         if (ts.isBindingPattern(node.name) &&
                             !node.name.elements.length) {
                             // If the binding pattern is empty, this variable declaration is not visible
                             return false;
                         }
                     // falls through
-                    case 257 /* ModuleDeclaration */:
-                    case 253 /* ClassDeclaration */:
-                    case 254 /* InterfaceDeclaration */:
-                    case 255 /* TypeAliasDeclaration */:
-                    case 252 /* FunctionDeclaration */:
-                    case 256 /* EnumDeclaration */:
-                    case 261 /* ImportEqualsDeclaration */:
+                    case 259 /* ModuleDeclaration */:
+                    case 255 /* ClassDeclaration */:
+                    case 256 /* InterfaceDeclaration */:
+                    case 257 /* TypeAliasDeclaration */:
+                    case 254 /* FunctionDeclaration */:
+                    case 258 /* EnumDeclaration */:
+                    case 263 /* ImportEqualsDeclaration */:
                         // external module augmentation is always visible
                         if (ts.isExternalModuleAugmentation(node)) {
                             return true;
@@ -51845,55 +52936,55 @@
                         var parent = getDeclarationContainer(node);
                         // If the node is not exported or it is not ambient module element (except import declaration)
                         if (!(ts.getCombinedModifierFlags(node) & 1 /* Export */) &&
-                            !(node.kind !== 261 /* ImportEqualsDeclaration */ && parent.kind !== 298 /* SourceFile */ && parent.flags & 8388608 /* Ambient */)) {
+                            !(node.kind !== 263 /* ImportEqualsDeclaration */ && parent.kind !== 300 /* SourceFile */ && parent.flags & 8388608 /* Ambient */)) {
                             return isGlobalSourceFile(parent);
                         }
                         // Exported members/ambient module elements (exception import declaration) are visible if parent is visible
                         return isDeclarationVisible(parent);
-                    case 164 /* PropertyDeclaration */:
-                    case 163 /* PropertySignature */:
-                    case 168 /* GetAccessor */:
-                    case 169 /* SetAccessor */:
-                    case 166 /* MethodDeclaration */:
-                    case 165 /* MethodSignature */:
+                    case 165 /* PropertyDeclaration */:
+                    case 164 /* PropertySignature */:
+                    case 170 /* GetAccessor */:
+                    case 171 /* SetAccessor */:
+                    case 167 /* MethodDeclaration */:
+                    case 166 /* MethodSignature */:
                         if (ts.hasEffectiveModifier(node, 8 /* Private */ | 16 /* Protected */)) {
                             // Private/protected properties/methods are not visible
                             return false;
                         }
                     // Public properties/methods are visible if its parents are visible, so:
                     // falls through
-                    case 167 /* Constructor */:
-                    case 171 /* ConstructSignature */:
-                    case 170 /* CallSignature */:
-                    case 172 /* IndexSignature */:
-                    case 161 /* Parameter */:
-                    case 258 /* ModuleBlock */:
-                    case 175 /* FunctionType */:
-                    case 176 /* ConstructorType */:
-                    case 178 /* TypeLiteral */:
-                    case 174 /* TypeReference */:
-                    case 179 /* ArrayType */:
-                    case 180 /* TupleType */:
-                    case 183 /* UnionType */:
-                    case 184 /* IntersectionType */:
-                    case 187 /* ParenthesizedType */:
-                    case 193 /* NamedTupleMember */:
+                    case 169 /* Constructor */:
+                    case 173 /* ConstructSignature */:
+                    case 172 /* CallSignature */:
+                    case 174 /* IndexSignature */:
+                    case 162 /* Parameter */:
+                    case 260 /* ModuleBlock */:
+                    case 177 /* FunctionType */:
+                    case 178 /* ConstructorType */:
+                    case 180 /* TypeLiteral */:
+                    case 176 /* TypeReference */:
+                    case 181 /* ArrayType */:
+                    case 182 /* TupleType */:
+                    case 185 /* UnionType */:
+                    case 186 /* IntersectionType */:
+                    case 189 /* ParenthesizedType */:
+                    case 195 /* NamedTupleMember */:
                         return isDeclarationVisible(node.parent);
                     // Default binding, import specifier and namespace import is visible
                     // only on demand so by default it is not visible
-                    case 263 /* ImportClause */:
-                    case 264 /* NamespaceImport */:
-                    case 266 /* ImportSpecifier */:
+                    case 265 /* ImportClause */:
+                    case 266 /* NamespaceImport */:
+                    case 268 /* ImportSpecifier */:
                         return false;
                     // Type parameters are always visible
-                    case 160 /* TypeParameter */:
+                    case 161 /* TypeParameter */:
                     // Source file and namespace export are always visible
                     // falls through
-                    case 298 /* SourceFile */:
-                    case 260 /* NamespaceExportDeclaration */:
+                    case 300 /* SourceFile */:
+                    case 262 /* NamespaceExportDeclaration */:
                         return true;
                     // Export assignments do not create name bindings outside the module
-                    case 267 /* ExportAssignment */:
+                    case 269 /* ExportAssignment */:
                         return false;
                     default:
                         return false;
@@ -51902,10 +52993,10 @@
         }
         function collectLinkedAliases(node, setVisibility) {
             var exportSymbol;
-            if (node.parent && node.parent.kind === 267 /* ExportAssignment */) {
+            if (node.parent && node.parent.kind === 269 /* ExportAssignment */) {
                 exportSymbol = resolveName(node, node.escapedText, 111551 /* Value */ | 788968 /* Type */ | 1920 /* Namespace */ | 2097152 /* Alias */, /*nameNotFoundMessage*/ undefined, node, /*isUse*/ false);
             }
-            else if (node.parent.kind === 271 /* ExportSpecifier */) {
+            else if (node.parent.kind === 273 /* ExportSpecifier */) {
                 exportSymbol = getTargetOfExportSpecifier(node.parent, 111551 /* Value */ | 788968 /* Type */ | 1920 /* Namespace */ | 2097152 /* Alias */);
             }
             var result;
@@ -52010,12 +53101,12 @@
         function getDeclarationContainer(node) {
             return ts.findAncestor(ts.getRootDeclaration(node), function (node) {
                 switch (node.kind) {
-                    case 250 /* VariableDeclaration */:
-                    case 251 /* VariableDeclarationList */:
-                    case 266 /* ImportSpecifier */:
-                    case 265 /* NamedImports */:
-                    case 264 /* NamespaceImport */:
-                    case 263 /* ImportClause */:
+                    case 252 /* VariableDeclaration */:
+                    case 253 /* VariableDeclarationList */:
+                    case 268 /* ImportSpecifier */:
+                    case 267 /* NamedImports */:
+                    case 266 /* NamespaceImport */:
+                    case 265 /* ImportClause */:
                         return false;
                     default:
                         return true;
@@ -52036,7 +53127,8 @@
             return prop ? getTypeOfSymbol(prop) : undefined;
         }
         function getTypeOfPropertyOrIndexSignature(type, name) {
-            return getTypeOfPropertyOfType(type, name) || isNumericLiteralName(name) && getIndexTypeOfType(type, 1 /* Number */) || getIndexTypeOfType(type, 0 /* String */) || unknownType;
+            var _a;
+            return getTypeOfPropertyOfType(type, name) || ((_a = getApplicableIndexInfoForName(type, name)) === null || _a === void 0 ? void 0 : _a.type) || unknownType;
         }
         function isTypeAny(type) {
             return type && (type.flags & 1 /* Any */) !== 0;
@@ -52075,9 +53167,7 @@
                     members.set(prop.escapedName, getSpreadSymbol(prop, /*readonly*/ false));
                 }
             }
-            var stringIndexInfo = getIndexInfoOfType(source, 0 /* String */);
-            var numberIndexInfo = getIndexInfoOfType(source, 1 /* Number */);
-            var result = createAnonymousType(symbol, members, ts.emptyArray, ts.emptyArray, stringIndexInfo, numberIndexInfo);
+            var result = createAnonymousType(symbol, members, ts.emptyArray, ts.emptyArray, getIndexInfosOfType(source));
             result.objectFlags |= 8388608 /* ObjectRestType */;
             return result;
         }
@@ -52122,23 +53212,23 @@
         function getParentElementAccess(node) {
             var ancestor = node.parent.parent;
             switch (ancestor.kind) {
-                case 199 /* BindingElement */:
-                case 289 /* PropertyAssignment */:
+                case 201 /* BindingElement */:
+                case 291 /* PropertyAssignment */:
                     return getSyntheticElementAccess(ancestor);
-                case 200 /* ArrayLiteralExpression */:
+                case 202 /* ArrayLiteralExpression */:
                     return getSyntheticElementAccess(node.parent);
-                case 250 /* VariableDeclaration */:
+                case 252 /* VariableDeclaration */:
                     return ancestor.initializer;
-                case 217 /* BinaryExpression */:
+                case 219 /* BinaryExpression */:
                     return ancestor.right;
             }
         }
         function getDestructuringPropertyName(node) {
             var parent = node.parent;
-            if (node.kind === 199 /* BindingElement */ && parent.kind === 197 /* ObjectBindingPattern */) {
+            if (node.kind === 201 /* BindingElement */ && parent.kind === 199 /* ObjectBindingPattern */) {
                 return getLiteralPropertyNameText(node.propertyName || node.name);
             }
-            if (node.kind === 289 /* PropertyAssignment */ || node.kind === 290 /* ShorthandPropertyAssignment */) {
+            if (node.kind === 291 /* PropertyAssignment */ || node.kind === 292 /* ShorthandPropertyAssignment */) {
                 return getLiteralPropertyNameText(node.name);
             }
             return "" + parent.elements.indexOf(node);
@@ -52164,7 +53254,7 @@
                 parentType = getTypeWithFacts(parentType, 524288 /* NEUndefined */);
             }
             var type;
-            if (pattern.kind === 197 /* ObjectBindingPattern */) {
+            if (pattern.kind === 199 /* ObjectBindingPattern */) {
                 if (declaration.dotDotDotToken) {
                     parentType = getReducedType(parentType);
                     if (parentType.flags & 2 /* Unknown */ || !isValidSpreadType(parentType)) {
@@ -52184,7 +53274,7 @@
                     // Use explicitly specified property name ({ p: xxx } form), or otherwise the implied name ({ p } form)
                     var name = declaration.propertyName || declaration.name;
                     var indexType = getLiteralTypeFromPropertyName(name);
-                    var declaredType = getIndexedAccessType(parentType, indexType, /*noUncheckedIndexedAccessCandidate*/ undefined, name, /*aliasSymbol*/ undefined, /*aliasTypeArguments*/ undefined, 16 /* ExpressionPosition */);
+                    var declaredType = getIndexedAccessType(parentType, indexType, 32 /* ExpressionPosition */, name);
                     type = getFlowTypeOfDestructuring(declaration, declaredType);
                 }
             }
@@ -52203,9 +53293,9 @@
                         createArrayType(elementType);
                 }
                 else if (isArrayLikeType(parentType)) {
-                    var indexType = getLiteralType(index_2);
-                    var accessFlags = hasDefaultValue(declaration) ? 8 /* NoTupleBoundsCheck */ : 0;
-                    var declaredType = getIndexedAccessTypeOrUndefined(parentType, indexType, /*noUncheckedIndexedAccessCandidate*/ undefined, declaration.name, accessFlags | 16 /* ExpressionPosition */) || errorType;
+                    var indexType = getNumberLiteralType(index_2);
+                    var accessFlags = 32 /* ExpressionPosition */ | (hasDefaultValue(declaration) ? 16 /* NoTupleBoundsCheck */ : 0);
+                    var declaredType = getIndexedAccessTypeOrUndefined(parentType, indexType, accessFlags, declaration.name) || errorType;
                     type = getFlowTypeOfDestructuring(declaration, declaredType);
                 }
                 else {
@@ -52231,25 +53321,26 @@
         }
         function isNullOrUndefined(node) {
             var expr = ts.skipParentheses(node);
-            return expr.kind === 103 /* NullKeyword */ || expr.kind === 78 /* Identifier */ && getResolvedSymbol(expr) === undefinedSymbol;
+            return expr.kind === 104 /* NullKeyword */ || expr.kind === 79 /* Identifier */ && getResolvedSymbol(expr) === undefinedSymbol;
         }
         function isEmptyArrayLiteral(node) {
             var expr = ts.skipParentheses(node);
-            return expr.kind === 200 /* ArrayLiteralExpression */ && expr.elements.length === 0;
+            return expr.kind === 202 /* ArrayLiteralExpression */ && expr.elements.length === 0;
         }
-        function addOptionality(type, optional) {
-            if (optional === void 0) { optional = true; }
-            return strictNullChecks && optional ? getOptionalType(type) : type;
+        function addOptionality(type, isProperty, isOptional) {
+            if (isProperty === void 0) { isProperty = false; }
+            if (isOptional === void 0) { isOptional = true; }
+            return strictNullChecks && isOptional ? getOptionalType(type, isProperty) : type;
         }
         // Return the inferred type for a variable, parameter, or property declaration
         function getTypeForVariableLikeDeclaration(declaration, includeOptionality) {
             // A variable declared in a for..in statement is of type string, or of type keyof T when the
             // right hand expression is of a type parameter type.
-            if (ts.isVariableDeclaration(declaration) && declaration.parent.parent.kind === 239 /* ForInStatement */) {
+            if (ts.isVariableDeclaration(declaration) && declaration.parent.parent.kind === 241 /* ForInStatement */) {
                 var indexType = getIndexType(getNonNullableTypeIfNeeded(checkExpression(declaration.parent.parent.expression)));
                 return indexType.flags & (262144 /* TypeParameter */ | 4194304 /* Index */) ? getExtractStringType(indexType) : stringType;
             }
-            if (ts.isVariableDeclaration(declaration) && declaration.parent.parent.kind === 240 /* ForOfStatement */) {
+            if (ts.isVariableDeclaration(declaration) && declaration.parent.parent.kind === 242 /* ForOfStatement */) {
                 // checkRightHandSideOfForOf will return undefined if the for-of expression type was
                 // missing properties/signatures required to get its iteratedType (like
                 // [Symbol.iterator] or next). This may be because we accessed properties from anyType,
@@ -52260,13 +53351,14 @@
             if (ts.isBindingPattern(declaration.parent)) {
                 return getTypeForBindingElement(declaration);
             }
-            var isOptional = includeOptionality && (ts.isParameter(declaration) && isJSDocOptionalParameter(declaration)
-                || isOptionalJSDocPropertyLikeTag(declaration)
-                || !ts.isBindingElement(declaration) && !ts.isVariableDeclaration(declaration) && !!declaration.questionToken);
+            var isProperty = ts.isPropertyDeclaration(declaration) || ts.isPropertySignature(declaration);
+            var isOptional = includeOptionality && (isProperty && !!declaration.questionToken ||
+                ts.isParameter(declaration) && (!!declaration.questionToken || isJSDocOptionalParameter(declaration)) ||
+                isOptionalJSDocPropertyLikeTag(declaration));
             // Use type from type annotation if one is present
             var declaredType = tryGetTypeFromEffectiveTypeNode(declaration);
             if (declaredType) {
-                return addOptionality(declaredType, isOptional);
+                return addOptionality(declaredType, isProperty, isOptional);
             }
             if ((noImplicitAny || ts.isInJSFile(declaration)) &&
                 ts.isVariableDeclaration(declaration) && !ts.isBindingPattern(declaration.name) &&
@@ -52286,8 +53378,8 @@
             if (ts.isParameter(declaration)) {
                 var func = declaration.parent;
                 // For a parameter of a set accessor, use the type of the get accessor if one is present
-                if (func.kind === 169 /* SetAccessor */ && hasBindableName(func)) {
-                    var getter = ts.getDeclarationOfKind(getSymbolOfNode(declaration.parent), 168 /* GetAccessor */);
+                if (func.kind === 171 /* SetAccessor */ && hasBindableName(func)) {
+                    var getter = ts.getDeclarationOfKind(getSymbolOfNode(declaration.parent), 170 /* GetAccessor */);
                     if (getter) {
                         var getterSignature = getSignatureFromDeclaration(getter);
                         var thisParameter = getAccessorThisParameter(func);
@@ -52310,7 +53402,7 @@
                 // Use contextual parameter type if one is available
                 var type = declaration.symbol.escapedName === "this" /* This */ ? getContextualThisParameterType(func) : getContextuallyTypedParameterType(declaration);
                 if (type) {
-                    return addOptionality(type, isOptional);
+                    return addOptionality(type, /*isProperty*/ false, isOptional);
                 }
             }
             // Use the type of the initializer expression if one is present and the declaration is
@@ -52323,16 +53415,25 @@
                     }
                 }
                 var type = widenTypeInferredFromInitializer(declaration, checkDeclarationInitializer(declaration));
-                return addOptionality(type, isOptional);
+                return addOptionality(type, isProperty, isOptional);
             }
-            if (ts.isPropertyDeclaration(declaration) && !ts.hasStaticModifier(declaration) && (noImplicitAny || ts.isInJSFile(declaration))) {
+            if (ts.isPropertyDeclaration(declaration) && (noImplicitAny || ts.isInJSFile(declaration))) {
                 // We have a property declaration with no type annotation or initializer, in noImplicitAny mode or a .js file.
-                // Use control flow analysis of this.xxx assignments in the constructor to determine the type of the property.
-                var constructor = findConstructorDeclaration(declaration.parent);
-                var type = constructor ? getFlowTypeInConstructor(declaration.symbol, constructor) :
-                    ts.getEffectiveModifierFlags(declaration) & 2 /* Ambient */ ? getTypeOfPropertyInBaseClass(declaration.symbol) :
-                        undefined;
-                return type && addOptionality(type, isOptional);
+                // Use control flow analysis of this.xxx assignments in the constructor or static block to determine the type of the property.
+                if (!ts.hasStaticModifier(declaration)) {
+                    var constructor = findConstructorDeclaration(declaration.parent);
+                    var type = constructor ? getFlowTypeInConstructor(declaration.symbol, constructor) :
+                        ts.getEffectiveModifierFlags(declaration) & 2 /* Ambient */ ? getTypeOfPropertyInBaseClass(declaration.symbol) :
+                            undefined;
+                    return type && addOptionality(type, /*isProperty*/ true, isOptional);
+                }
+                else {
+                    var staticBlocks = ts.filter(declaration.parent.members, ts.isClassStaticBlockDeclaration);
+                    var type = staticBlocks.length ? getFlowTypeInStaticBlocks(declaration.symbol, staticBlocks) :
+                        ts.getEffectiveModifierFlags(declaration) & 2 /* Ambient */ ? getTypeOfPropertyInBaseClass(declaration.symbol) :
+                            undefined;
+                    return type && addOptionality(type, /*isProperty*/ true, isOptional);
+                }
             }
             if (ts.isJsxAttribute(declaration)) {
                 // if JSX attribute doesn't have initializer, by default the attribute will have boolean value of true.
@@ -52358,7 +53459,7 @@
                     links.isConstructorDeclaredProperty = !!getDeclaringConstructor(symbol) && ts.every(symbol.declarations, function (declaration) {
                         return ts.isBinaryExpression(declaration) &&
                             isPossiblyAliasedThisProperty(declaration) &&
-                            (declaration.left.kind !== 203 /* ElementAccessExpression */ || ts.isStringOrNumericLiteralLike(declaration.left.argumentExpression)) &&
+                            (declaration.left.kind !== 205 /* ElementAccessExpression */ || ts.isStringOrNumericLiteralLike(declaration.left.argumentExpression)) &&
                             !getAnnotatedTypeForAssignmentDeclaration(/*declaredType*/ undefined, declaration, symbol, declaration);
                     });
                 }
@@ -52380,7 +53481,7 @@
             for (var _i = 0, _a = symbol.declarations; _i < _a.length; _i++) {
                 var declaration = _a[_i];
                 var container = ts.getThisContainer(declaration, /*includeArrowFunctions*/ false);
-                if (container && (container.kind === 167 /* Constructor */ || isJSConstructor(container))) {
+                if (container && (container.kind === 169 /* Constructor */ || isJSConstructor(container))) {
                     return container;
                 }
             }
@@ -52402,6 +53503,27 @@
             reference.flowNode = file.endFlowNode;
             return getFlowTypeOfReference(reference, autoType, undefinedType);
         }
+        function getFlowTypeInStaticBlocks(symbol, staticBlocks) {
+            var accessName = ts.startsWith(symbol.escapedName, "__#")
+                ? ts.factory.createPrivateIdentifier(symbol.escapedName.split("@")[1])
+                : ts.unescapeLeadingUnderscores(symbol.escapedName);
+            for (var _i = 0, staticBlocks_1 = staticBlocks; _i < staticBlocks_1.length; _i++) {
+                var staticBlock = staticBlocks_1[_i];
+                var reference = ts.factory.createPropertyAccessExpression(ts.factory.createThis(), accessName);
+                ts.setParent(reference.expression, reference);
+                ts.setParent(reference, staticBlock);
+                reference.flowNode = staticBlock.returnFlowNode;
+                var flowType = getFlowTypeOfProperty(reference, symbol);
+                if (noImplicitAny && (flowType === autoType || flowType === autoArrayType)) {
+                    error(symbol.valueDeclaration, ts.Diagnostics.Member_0_implicitly_has_an_1_type, symbolToString(symbol), typeToString(flowType));
+                }
+                // We don't infer a type if assignments are only null or undefined.
+                if (everyType(flowType, isNullableType)) {
+                    continue;
+                }
+                return convertAutoToAny(flowType);
+            }
+        }
         function getFlowTypeInConstructor(symbol, constructor) {
             var accessName = ts.startsWith(symbol.escapedName, "__#")
                 ? ts.factory.createPrivateIdentifier(symbol.escapedName.split("@")[1])
@@ -52492,7 +53614,7 @@
                     type = getUnionType(sourceTypes, 2 /* Subtype */);
                 }
             }
-            var widened = getWidenedType(addOptionality(type, definedInMethod && !definedInConstructor));
+            var widened = getWidenedType(addOptionality(type, /*isProperty*/ false, definedInMethod && !definedInConstructor));
             if (symbol.valueDeclaration && filterType(widened, function (t) { return !!(t.flags & ~98304 /* Nullable */); }) === neverType) {
                 reportImplicitAny(symbol.valueDeclaration, anyType);
                 return anyType;
@@ -52516,7 +53638,7 @@
             if ((_b = s === null || s === void 0 ? void 0 : s.exports) === null || _b === void 0 ? void 0 : _b.size) {
                 mergeSymbolTable(exports, s.exports);
             }
-            var type = createAnonymousType(symbol, exports, ts.emptyArray, ts.emptyArray, undefined, undefined);
+            var type = createAnonymousType(symbol, exports, ts.emptyArray, ts.emptyArray, ts.emptyArray);
             type.objectFlags |= 8192 /* JSLiteral */;
             return type;
         }
@@ -52535,7 +53657,10 @@
             if ((_a = symbol.parent) === null || _a === void 0 ? void 0 : _a.valueDeclaration) {
                 var typeNode_2 = ts.getEffectiveTypeAnnotationNode(symbol.parent.valueDeclaration);
                 if (typeNode_2) {
-                    return getTypeOfPropertyOfType(getTypeFromTypeNode(typeNode_2), symbol.escapedName);
+                    var annotationSymbol = getPropertyOfType(getTypeFromTypeNode(typeNode_2), symbol.escapedName);
+                    if (annotationSymbol) {
+                        return getNonMissingTypeOfSymbol(annotationSymbol);
+                    }
                 }
             }
             return declaredType;
@@ -52617,7 +53742,7 @@
                     }
                 });
                 var result = createAnonymousType(initialSize !== members_4.size ? undefined : exportedType.symbol, // Only set the type's symbol if it looks to be the same as the original type
-                members_4, exportedType.callSignatures, exportedType.constructSignatures, exportedType.stringIndexInfo, exportedType.numberIndexInfo);
+                members_4, exportedType.callSignatures, exportedType.constructSignatures, exportedType.indexInfos);
                 result.objectFlags |= (ts.getObjectFlags(type) & 8192 /* JSLiteral */); // Propagate JSLiteral flag
                 if (result.symbol && result.symbol.flags & 32 /* Class */ && type === getDeclaredTypeOfClassOrInterface(result.symbol)) {
                     result.objectFlags |= 16777216 /* IsClassInstanceClone */; // Propagate the knowledge that this type is equivalent to the symbol's class instance type
@@ -52632,16 +53757,16 @@
         }
         function containsSameNamedThisProperty(thisProperty, expression) {
             return ts.isPropertyAccessExpression(thisProperty)
-                && thisProperty.expression.kind === 107 /* ThisKeyword */
+                && thisProperty.expression.kind === 108 /* ThisKeyword */
                 && ts.forEachChildRecursively(expression, function (n) { return isMatchingReference(thisProperty, n); });
         }
         function isDeclarationInConstructor(expression) {
             var thisContainer = ts.getThisContainer(expression, /*includeArrowFunctions*/ false);
             // Properties defined in a constructor (or base constructor, or javascript constructor function) don't get undefined added.
             // Function expressions that are assigned to the prototype count as methods.
-            return thisContainer.kind === 167 /* Constructor */ ||
-                thisContainer.kind === 252 /* FunctionDeclaration */ ||
-                (thisContainer.kind === 209 /* FunctionExpression */ && !ts.isPrototypePropertyAssignment(thisContainer.parent));
+            return thisContainer.kind === 169 /* Constructor */ ||
+                thisContainer.kind === 254 /* FunctionDeclaration */ ||
+                (thisContainer.kind === 211 /* FunctionExpression */ && !ts.isPrototypePropertyAssignment(thisContainer.parent));
         }
         function getConstructorDefinedThisAssignmentTypes(types, declarations) {
             ts.Debug.assert(types.length === declarations.length);
@@ -52683,7 +53808,7 @@
             ts.forEach(pattern.elements, function (e) {
                 var name = e.propertyName || e.name;
                 if (e.dotDotDotToken) {
-                    stringIndexInfo = createIndexInfo(anyType, /*isReadonly*/ false);
+                    stringIndexInfo = createIndexInfo(stringType, anyType, /*isReadonly*/ false);
                     return;
                 }
                 var exprType = getLiteralTypeFromPropertyName(name);
@@ -52699,7 +53824,7 @@
                 symbol.bindingElement = e;
                 members.set(symbol.escapedName, symbol);
             });
-            var result = createAnonymousType(undefined, members, ts.emptyArray, ts.emptyArray, stringIndexInfo, undefined);
+            var result = createAnonymousType(undefined, members, ts.emptyArray, ts.emptyArray, stringIndexInfo ? [stringIndexInfo] : ts.emptyArray);
             result.objectFlags |= objectFlags;
             if (includePatternInType) {
                 result.pattern = pattern;
@@ -52711,7 +53836,7 @@
         function getTypeFromArrayBindingPattern(pattern, includePatternInType, reportErrors) {
             var elements = pattern.elements;
             var lastElement = ts.lastOrUndefined(elements);
-            var restElement = lastElement && lastElement.kind === 199 /* BindingElement */ && lastElement.dotDotDotToken ? lastElement : undefined;
+            var restElement = lastElement && lastElement.kind === 201 /* BindingElement */ && lastElement.dotDotDotToken ? lastElement : undefined;
             if (elements.length === 0 || elements.length === 1 && restElement) {
                 return languageVersion >= 2 /* ES2015 */ ? createIterableType(anyType) : anyArrayType;
             }
@@ -52736,7 +53861,7 @@
         function getTypeFromBindingPattern(pattern, includePatternInType, reportErrors) {
             if (includePatternInType === void 0) { includePatternInType = false; }
             if (reportErrors === void 0) { reportErrors = false; }
-            return pattern.kind === 197 /* ObjectBindingPattern */
+            return pattern.kind === 199 /* ObjectBindingPattern */
                 ? getTypeFromObjectBindingPattern(pattern, includePatternInType, reportErrors)
                 : getTypeFromArrayBindingPattern(pattern, includePatternInType, reportErrors);
         }
@@ -52784,7 +53909,7 @@
         }
         function declarationBelongsToPrivateAmbientMember(declaration) {
             var root = ts.getRootDeclaration(declaration);
-            var memberDeclaration = root.kind === 161 /* Parameter */ ? root.parent : root;
+            var memberDeclaration = root.kind === 162 /* Parameter */ ? root.parent : root;
             return isPrivateWithinAmbient(memberDeclaration);
         }
         function tryGetTypeFromEffectiveTypeNode(declaration) {
@@ -52829,7 +53954,7 @@
                     result.exports = new ts.Map(fileSymbol.exports);
                 var members = ts.createSymbolTable();
                 members.set("exports", result);
-                return createAnonymousType(symbol, members, ts.emptyArray, ts.emptyArray, undefined, undefined);
+                return createAnonymousType(symbol, members, ts.emptyArray, ts.emptyArray, ts.emptyArray);
             }
             // Handle catch clause variables
             ts.Debug.assertIsDefined(symbol.valueDeclaration);
@@ -52837,7 +53962,7 @@
             if (ts.isCatchClauseVariableDeclarationOrBindingElement(declaration)) {
                 var typeNode = ts.getEffectiveTypeAnnotationNode(declaration);
                 if (typeNode === undefined) {
-                    return anyType;
+                    return useUnknownInCatchVariables ? unknownType : anyType;
                 }
                 var type_1 = getTypeOfNode(typeNode);
                 // an errorType will make `checkTryStatement` issue an error
@@ -52859,7 +53984,7 @@
                 return reportCircularityError(symbol);
             }
             var type;
-            if (declaration.kind === 267 /* ExportAssignment */) {
+            if (declaration.kind === 269 /* ExportAssignment */) {
                 type = widenTypeForVariableLikeDeclaration(checkExpressionCached(declaration.expression), declaration);
             }
             else if (ts.isBinaryExpression(declaration) ||
@@ -52930,7 +54055,7 @@
         }
         function getAnnotatedAccessorTypeNode(accessor) {
             if (accessor) {
-                if (accessor.kind === 168 /* GetAccessor */) {
+                if (accessor.kind === 170 /* GetAccessor */) {
                     var getterTypeAnnotation = ts.getEffectiveReturnTypeNode(accessor);
                     return getterTypeAnnotation;
                 }
@@ -52969,7 +54094,7 @@
             if (!popTypeResolution()) {
                 type = anyType;
                 if (noImplicitAny) {
-                    var getter = ts.getDeclarationOfKind(symbol, 168 /* GetAccessor */);
+                    var getter = ts.getDeclarationOfKind(symbol, 170 /* GetAccessor */);
                     error(getter, ts.Diagnostics._0_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_referenced_directly_or_indirectly_in_one_of_its_return_expressions, symbolToString(symbol));
                 }
             }
@@ -52977,8 +54102,8 @@
         }
         function resolveTypeOfAccessors(symbol, writing) {
             if (writing === void 0) { writing = false; }
-            var getter = ts.getDeclarationOfKind(symbol, 168 /* GetAccessor */);
-            var setter = ts.getDeclarationOfKind(symbol, 169 /* SetAccessor */);
+            var getter = ts.getDeclarationOfKind(symbol, 170 /* GetAccessor */);
+            var setter = ts.getDeclarationOfKind(symbol, 171 /* SetAccessor */);
             var setterType = getAnnotatedAccessorType(setter);
             // For write operations, prioritize type annotations on the setter
             if (writing && setterType) {
@@ -53055,9 +54180,9 @@
             if (symbol.flags & 1536 /* Module */ && ts.isShorthandAmbientModuleSymbol(symbol)) {
                 return anyType;
             }
-            else if (declaration && (declaration.kind === 217 /* BinaryExpression */ ||
+            else if (declaration && (declaration.kind === 219 /* BinaryExpression */ ||
                 ts.isAccessExpression(declaration) &&
-                    declaration.parent.kind === 217 /* BinaryExpression */)) {
+                    declaration.parent.kind === 219 /* BinaryExpression */)) {
                 return getWidenedTypeForAssignmentDeclaration(symbol);
             }
             else if (symbol.flags & 512 /* ValueModule */ && declaration && ts.isSourceFile(declaration) && declaration.commonJsModuleIndicator) {
@@ -53126,7 +54251,7 @@
                 return errorType;
             }
             // Check if variable has initializer that circularly references the variable itself
-            if (noImplicitAny && (declaration.kind !== 161 /* Parameter */ || declaration.initializer)) {
+            if (noImplicitAny && (declaration.kind !== 162 /* Parameter */ || declaration.initializer)) {
                 error(symbol.valueDeclaration, ts.Diagnostics._0_implicitly_has_type_any_because_it_does_not_have_a_type_annotation_and_is_referenced_directly_or_indirectly_in_its_own_initializer, symbolToString(symbol));
             }
             // Circularities could also result from parameters in function expressions that end up
@@ -53183,6 +54308,9 @@
             }
             return errorType;
         }
+        function getNonMissingTypeOfSymbol(symbol) {
+            return removeMissingType(getTypeOfSymbol(symbol), !!(symbol.flags & 16777216 /* Optional */));
+        }
         function isReferenceToType(type, target) {
             return type !== undefined
                 && target !== undefined
@@ -53234,46 +54362,46 @@
                     return undefined;
                 }
                 switch (node.kind) {
-                    case 253 /* ClassDeclaration */:
-                    case 222 /* ClassExpression */:
-                    case 254 /* InterfaceDeclaration */:
-                    case 170 /* CallSignature */:
-                    case 171 /* ConstructSignature */:
-                    case 165 /* MethodSignature */:
-                    case 175 /* FunctionType */:
-                    case 176 /* ConstructorType */:
-                    case 309 /* JSDocFunctionType */:
-                    case 252 /* FunctionDeclaration */:
-                    case 166 /* MethodDeclaration */:
-                    case 209 /* FunctionExpression */:
-                    case 210 /* ArrowFunction */:
-                    case 255 /* TypeAliasDeclaration */:
-                    case 334 /* JSDocTemplateTag */:
-                    case 335 /* JSDocTypedefTag */:
-                    case 329 /* JSDocEnumTag */:
-                    case 328 /* JSDocCallbackTag */:
-                    case 191 /* MappedType */:
-                    case 185 /* ConditionalType */: {
+                    case 255 /* ClassDeclaration */:
+                    case 224 /* ClassExpression */:
+                    case 256 /* InterfaceDeclaration */:
+                    case 172 /* CallSignature */:
+                    case 173 /* ConstructSignature */:
+                    case 166 /* MethodSignature */:
+                    case 177 /* FunctionType */:
+                    case 178 /* ConstructorType */:
+                    case 312 /* JSDocFunctionType */:
+                    case 254 /* FunctionDeclaration */:
+                    case 167 /* MethodDeclaration */:
+                    case 211 /* FunctionExpression */:
+                    case 212 /* ArrowFunction */:
+                    case 257 /* TypeAliasDeclaration */:
+                    case 339 /* JSDocTemplateTag */:
+                    case 340 /* JSDocTypedefTag */:
+                    case 334 /* JSDocEnumTag */:
+                    case 333 /* JSDocCallbackTag */:
+                    case 193 /* MappedType */:
+                    case 187 /* ConditionalType */: {
                         var outerTypeParameters = getOuterTypeParameters(node, includeThisTypes);
-                        if (node.kind === 191 /* MappedType */) {
+                        if (node.kind === 193 /* MappedType */) {
                             return ts.append(outerTypeParameters, getDeclaredTypeOfTypeParameter(getSymbolOfNode(node.typeParameter)));
                         }
-                        else if (node.kind === 185 /* ConditionalType */) {
+                        else if (node.kind === 187 /* ConditionalType */) {
                             return ts.concatenate(outerTypeParameters, getInferTypeParameters(node));
                         }
                         var outerAndOwnTypeParameters = appendTypeParameters(outerTypeParameters, ts.getEffectiveTypeParameterDeclarations(node));
                         var thisType = includeThisTypes &&
-                            (node.kind === 253 /* ClassDeclaration */ || node.kind === 222 /* ClassExpression */ || node.kind === 254 /* InterfaceDeclaration */ || isJSConstructor(node)) &&
+                            (node.kind === 255 /* ClassDeclaration */ || node.kind === 224 /* ClassExpression */ || node.kind === 256 /* InterfaceDeclaration */ || isJSConstructor(node)) &&
                             getDeclaredTypeOfClassOrInterface(getSymbolOfNode(node)).thisType;
                         return thisType ? ts.append(outerAndOwnTypeParameters, thisType) : outerAndOwnTypeParameters;
                     }
-                    case 330 /* JSDocParameterTag */:
+                    case 335 /* JSDocParameterTag */:
                         var paramSymbol = ts.getParameterSymbolFromJSDoc(node);
                         if (paramSymbol) {
                             node = paramSymbol.valueDeclaration;
                         }
                         break;
-                    case 312 /* JSDocComment */: {
+                    case 315 /* JSDocComment */: {
                         var outerTypeParameters = getOuterTypeParameters(node, includeThisTypes);
                         return node.tags
                             ? appendTypeParameters(outerTypeParameters, ts.flatMap(node.tags, function (t) { return ts.isJSDocTemplateTag(t) ? t.typeParameters : undefined; }))
@@ -53284,7 +54412,7 @@
         }
         // The outer type parameters are those defined by enclosing generic classes, methods, or functions.
         function getOuterTypeParametersOfClassOrInterface(symbol) {
-            var declaration = symbol.flags & 32 /* Class */ ? symbol.valueDeclaration : ts.getDeclarationOfKind(symbol, 254 /* InterfaceDeclaration */);
+            var declaration = symbol.flags & 32 /* Class */ ? symbol.valueDeclaration : ts.getDeclarationOfKind(symbol, 256 /* InterfaceDeclaration */);
             ts.Debug.assert(!!declaration, "Class was missing valueDeclaration -OR- non-class had no interface declarations");
             return getOuterTypeParameters(declaration);
         }
@@ -53297,9 +54425,9 @@
             var result;
             for (var _i = 0, _a = symbol.declarations; _i < _a.length; _i++) {
                 var node = _a[_i];
-                if (node.kind === 254 /* InterfaceDeclaration */ ||
-                    node.kind === 253 /* ClassDeclaration */ ||
-                    node.kind === 222 /* ClassExpression */ ||
+                if (node.kind === 256 /* InterfaceDeclaration */ ||
+                    node.kind === 255 /* ClassDeclaration */ ||
+                    node.kind === 224 /* ClassExpression */ ||
                     isJSConstructor(node) ||
                     ts.isTypeAlias(node)) {
                     var declaration = node;
@@ -53450,7 +54578,7 @@
                     if (!popTypeResolution() && type.symbol.declarations) {
                         for (var _i = 0, _a = type.symbol.declarations; _i < _a.length; _i++) {
                             var declaration = _a[_i];
-                            if (declaration.kind === 253 /* ClassDeclaration */ || declaration.kind === 254 /* InterfaceDeclaration */) {
+                            if (declaration.kind === 255 /* ClassDeclaration */ || declaration.kind === 256 /* InterfaceDeclaration */) {
                                 reportCircularBaseType(declaration, type);
                             }
                         }
@@ -53546,7 +54674,7 @@
             if (type.symbol.declarations) {
                 for (var _i = 0, _a = type.symbol.declarations; _i < _a.length; _i++) {
                     var declaration = _a[_i];
-                    if (declaration.kind === 254 /* InterfaceDeclaration */ && ts.getInterfaceBaseTypeNodes(declaration)) {
+                    if (declaration.kind === 256 /* InterfaceDeclaration */ && ts.getInterfaceBaseTypeNodes(declaration)) {
                         for (var _b = 0, _c = ts.getInterfaceBaseTypeNodes(declaration); _b < _c.length; _b++) {
                             var node = _c[_b];
                             var baseType = getReducedType(getTypeFromTypeNode(node));
@@ -53586,7 +54714,7 @@
             }
             for (var _i = 0, _a = symbol.declarations; _i < _a.length; _i++) {
                 var declaration = _a[_i];
-                if (declaration.kind === 254 /* InterfaceDeclaration */) {
+                if (declaration.kind === 256 /* InterfaceDeclaration */) {
                     if (declaration.flags & 128 /* ContainsThis */) {
                         return false;
                     }
@@ -53665,7 +54793,12 @@
                 }
                 else {
                     type = errorType;
-                    error(ts.isNamedDeclaration(declaration) ? declaration.name : declaration || declaration, ts.Diagnostics.Type_alias_0_circularly_references_itself, symbolToString(symbol));
+                    if (declaration.kind === 334 /* JSDocEnumTag */) {
+                        error(declaration.typeExpression.type, ts.Diagnostics.Type_alias_0_circularly_references_itself, symbolToString(symbol));
+                    }
+                    else {
+                        error(ts.isNamedDeclaration(declaration) ? declaration.name : declaration || declaration, ts.Diagnostics.Type_alias_0_circularly_references_itself, symbolToString(symbol));
+                    }
                 }
                 links.declaredType = type;
             }
@@ -53675,7 +54808,7 @@
             if (ts.isStringLiteralLike(expr)) {
                 return true;
             }
-            else if (expr.kind === 217 /* BinaryExpression */) {
+            else if (expr.kind === 219 /* BinaryExpression */) {
                 return isStringConcatExpression(expr.left) && isStringConcatExpression(expr.right);
             }
             return false;
@@ -53690,12 +54823,12 @@
                 case 8 /* NumericLiteral */:
                 case 14 /* NoSubstitutionTemplateLiteral */:
                     return true;
-                case 215 /* PrefixUnaryExpression */:
+                case 217 /* PrefixUnaryExpression */:
                     return expr.operator === 40 /* MinusToken */ &&
                         expr.operand.kind === 8 /* NumericLiteral */;
-                case 78 /* Identifier */:
+                case 79 /* Identifier */:
                     return ts.nodeIsMissing(expr) || !!getSymbolOfNode(member.parent).exports.get(expr.escapedText);
-                case 217 /* BinaryExpression */:
+                case 219 /* BinaryExpression */:
                     return isStringConcatExpression(expr);
                 default:
                     return false;
@@ -53710,7 +54843,7 @@
             if (symbol.declarations) {
                 for (var _i = 0, _a = symbol.declarations; _i < _a.length; _i++) {
                     var declaration = _a[_i];
-                    if (declaration.kind === 256 /* EnumDeclaration */) {
+                    if (declaration.kind === 258 /* EnumDeclaration */) {
                         for (var _b = 0, _c = declaration.members; _b < _c.length; _b++) {
                             var member = _c[_b];
                             if (member.initializer && ts.isStringLiteralLike(member.initializer)) {
@@ -53739,11 +54872,11 @@
                 if (symbol.declarations) {
                     for (var _i = 0, _a = symbol.declarations; _i < _a.length; _i++) {
                         var declaration = _a[_i];
-                        if (declaration.kind === 256 /* EnumDeclaration */) {
+                        if (declaration.kind === 258 /* EnumDeclaration */) {
                             for (var _b = 0, _c = declaration.members; _b < _c.length; _b++) {
                                 var member = _c[_b];
                                 var value = getEnumMemberValue(member);
-                                var memberType = getFreshTypeOfLiteralType(getLiteralType(value !== undefined ? value : 0, enumCount, getSymbolOfNode(member)));
+                                var memberType = getFreshTypeOfLiteralType(getEnumLiteralType(value !== undefined ? value : 0, enumCount, getSymbolOfNode(member)));
                                 getSymbolLinks(getSymbolOfNode(member)).declaredType = memberType;
                                 memberTypeList.push(getRegularTypeOfLiteralType(memberType));
                             }
@@ -53812,22 +54945,22 @@
          */
         function isThislessType(node) {
             switch (node.kind) {
-                case 128 /* AnyKeyword */:
-                case 152 /* UnknownKeyword */:
-                case 147 /* StringKeyword */:
-                case 144 /* NumberKeyword */:
-                case 155 /* BigIntKeyword */:
-                case 131 /* BooleanKeyword */:
-                case 148 /* SymbolKeyword */:
-                case 145 /* ObjectKeyword */:
-                case 113 /* VoidKeyword */:
-                case 150 /* UndefinedKeyword */:
-                case 141 /* NeverKeyword */:
-                case 192 /* LiteralType */:
+                case 129 /* AnyKeyword */:
+                case 153 /* UnknownKeyword */:
+                case 148 /* StringKeyword */:
+                case 145 /* NumberKeyword */:
+                case 156 /* BigIntKeyword */:
+                case 132 /* BooleanKeyword */:
+                case 149 /* SymbolKeyword */:
+                case 146 /* ObjectKeyword */:
+                case 114 /* VoidKeyword */:
+                case 151 /* UndefinedKeyword */:
+                case 142 /* NeverKeyword */:
+                case 194 /* LiteralType */:
                     return true;
-                case 179 /* ArrayType */:
+                case 181 /* ArrayType */:
                     return isThislessType(node.elementType);
-                case 174 /* TypeReference */:
+                case 176 /* TypeReference */:
                     return !node.typeArguments || node.typeArguments.every(isThislessType);
             }
             return false;
@@ -53853,7 +54986,7 @@
         function isThislessFunctionLikeDeclaration(node) {
             var returnType = ts.getEffectiveReturnTypeNode(node);
             var typeParameters = ts.getEffectiveTypeParameterDeclarations(node);
-            return (node.kind === 167 /* Constructor */ || (!!returnType && isThislessType(returnType))) &&
+            return (node.kind === 169 /* Constructor */ || (!!returnType && isThislessType(returnType))) &&
                 node.parameters.every(isThislessVariableLikeDeclaration) &&
                 typeParameters.every(isThislessTypeParameter);
         }
@@ -53869,14 +55002,14 @@
                 var declaration = symbol.declarations[0];
                 if (declaration) {
                     switch (declaration.kind) {
-                        case 164 /* PropertyDeclaration */:
-                        case 163 /* PropertySignature */:
+                        case 165 /* PropertyDeclaration */:
+                        case 164 /* PropertySignature */:
                             return isThislessVariableLikeDeclaration(declaration);
-                        case 166 /* MethodDeclaration */:
-                        case 165 /* MethodSignature */:
-                        case 167 /* Constructor */:
-                        case 168 /* GetAccessor */:
-                        case 169 /* SetAccessor */:
+                        case 167 /* MethodDeclaration */:
+                        case 166 /* MethodSignature */:
+                        case 169 /* Constructor */:
+                        case 170 /* GetAccessor */:
+                        case 171 /* SetAccessor */:
                             return isThislessFunctionLikeDeclaration(declaration);
                     }
                 }
@@ -53902,7 +55035,7 @@
             }
         }
         function isStaticPrivateIdentifierProperty(s) {
-            return !!s.valueDeclaration && ts.isPrivateIdentifierClassElementDeclaration(s.valueDeclaration) && ts.hasSyntacticModifier(s.valueDeclaration, 32 /* Static */);
+            return !!s.valueDeclaration && ts.isPrivateIdentifierClassElementDeclaration(s.valueDeclaration) && ts.isStatic(s.valueDeclaration);
         }
         function resolveDeclaredMembers(type) {
             if (!type.declaredProperties) {
@@ -53912,10 +55045,10 @@
                 // Start with signatures at empty array in case of recursive types
                 type.declaredCallSignatures = ts.emptyArray;
                 type.declaredConstructSignatures = ts.emptyArray;
+                type.declaredIndexInfos = ts.emptyArray;
                 type.declaredCallSignatures = getSignaturesOfSymbol(members.get("__call" /* Call */));
                 type.declaredConstructSignatures = getSignaturesOfSymbol(members.get("__new" /* New */));
-                type.declaredStringIndexInfo = getIndexInfoOfSymbol(symbol, 0 /* String */);
-                type.declaredNumberIndexInfo = getIndexInfoOfSymbol(symbol, 1 /* Number */);
+                type.declaredIndexInfos = getIndexInfosOfSymbol(symbol);
             }
             return type;
         }
@@ -53989,7 +55122,7 @@
             if (!symbol.declarations) {
                 symbol.declarations = [member];
             }
-            else {
+            else if (!member.symbol.isReplaceableByMethod) {
                 symbol.declarations.push(member);
             }
             if (symbolFlags & 111551 /* Value */) {
@@ -54071,8 +55204,8 @@
         function getResolvedMembersOrExportsOfSymbol(symbol, resolutionKind) {
             var links = getSymbolLinks(symbol);
             if (!links[resolutionKind]) {
-                var isStatic = resolutionKind === "resolvedExports" /* resolvedExports */;
-                var earlySymbols = !isStatic ? symbol.members :
+                var isStatic_1 = resolutionKind === "resolvedExports" /* resolvedExports */;
+                var earlySymbols = !isStatic_1 ? symbol.members :
                     symbol.flags & 1536 /* Module */ ? getExportsOfModuleWorker(symbol) :
                         symbol.exports;
                 // In the event we recursively resolve the members/exports of the symbol, we
@@ -54087,7 +55220,7 @@
                     if (members) {
                         for (var _b = 0, members_5 = members; _b < members_5.length; _b++) {
                             var member = members_5[_b];
-                            if (isStatic === ts.hasStaticModifier(member) && hasLateBindableName(member)) {
+                            if (isStatic_1 === ts.hasStaticModifier(member) && hasLateBindableName(member)) {
                                 lateBindMember(symbol, earlySymbols, lateSymbols, member);
                             }
                         }
@@ -54103,7 +55236,7 @@
                             || ts.isBinaryExpression(member) && isPossiblyAliasedThisProperty(member, assignmentKind)
                             || assignmentKind === 9 /* ObjectDefinePrototypeProperty */
                             || assignmentKind === 6 /* Prototype */; // A straight `Prototype` assignment probably can never have a computed name
-                        if (isStatic === !isInstanceMember && hasLateBindableName(member)) {
+                        if (isStatic_1 === !isInstanceMember && hasLateBindableName(member)) {
                             lateBindMember(symbol, earlySymbols, lateSymbols, member);
                         }
                     }
@@ -54165,29 +55298,26 @@
             var members;
             var callSignatures;
             var constructSignatures;
-            var stringIndexInfo;
-            var numberIndexInfo;
+            var indexInfos;
             if (ts.rangeEquals(typeParameters, typeArguments, 0, typeParameters.length)) {
                 members = source.symbol ? getMembersOfSymbol(source.symbol) : ts.createSymbolTable(source.declaredProperties);
                 callSignatures = source.declaredCallSignatures;
                 constructSignatures = source.declaredConstructSignatures;
-                stringIndexInfo = source.declaredStringIndexInfo;
-                numberIndexInfo = source.declaredNumberIndexInfo;
+                indexInfos = source.declaredIndexInfos;
             }
             else {
                 mapper = createTypeMapper(typeParameters, typeArguments);
                 members = createInstantiatedSymbolTable(source.declaredProperties, mapper, /*mappingThisOnly*/ typeParameters.length === 1);
                 callSignatures = instantiateSignatures(source.declaredCallSignatures, mapper);
                 constructSignatures = instantiateSignatures(source.declaredConstructSignatures, mapper);
-                stringIndexInfo = instantiateIndexInfo(source.declaredStringIndexInfo, mapper);
-                numberIndexInfo = instantiateIndexInfo(source.declaredNumberIndexInfo, mapper);
+                indexInfos = instantiateIndexInfos(source.declaredIndexInfos, mapper);
             }
             var baseTypes = getBaseTypes(source);
             if (baseTypes.length) {
                 if (source.symbol && members === getMembersOfSymbol(source.symbol)) {
                     members = ts.createSymbolTable(source.declaredProperties);
                 }
-                setStructuredTypeMembers(type, members, callSignatures, constructSignatures, stringIndexInfo, numberIndexInfo);
+                setStructuredTypeMembers(type, members, callSignatures, constructSignatures, indexInfos);
                 var thisArgument = ts.lastOrUndefined(typeArguments);
                 for (var _i = 0, baseTypes_1 = baseTypes; _i < baseTypes_1.length; _i++) {
                     var baseType = baseTypes_1[_i];
@@ -54195,15 +55325,11 @@
                     addInheritedMembers(members, getPropertiesOfType(instantiatedBaseType));
                     callSignatures = ts.concatenate(callSignatures, getSignaturesOfType(instantiatedBaseType, 0 /* Call */));
                     constructSignatures = ts.concatenate(constructSignatures, getSignaturesOfType(instantiatedBaseType, 1 /* Construct */));
-                    if (!stringIndexInfo) {
-                        stringIndexInfo = instantiatedBaseType === anyType ?
-                            createIndexInfo(anyType, /*isReadonly*/ false) :
-                            getIndexInfoOfType(instantiatedBaseType, 0 /* String */);
-                    }
-                    numberIndexInfo = numberIndexInfo || getIndexInfoOfType(instantiatedBaseType, 1 /* Number */);
+                    var inheritedIndexInfos = instantiatedBaseType !== anyType ? getIndexInfosOfType(instantiatedBaseType) : [createIndexInfo(stringType, anyType, /*isReadonly*/ false)];
+                    indexInfos = ts.concatenate(indexInfos, ts.filter(inheritedIndexInfos, function (info) { return !findIndexInfo(indexInfos, info.keyType); }));
                 }
             }
-            setStructuredTypeMembers(type, members, callSignatures, constructSignatures, stringIndexInfo, numberIndexInfo);
+            setStructuredTypeMembers(type, members, callSignatures, constructSignatures, indexInfos);
         }
         function resolveClassOrInterfaceMembers(type) {
             resolveObjectTypeMembers(type, resolveDeclaredMembers(type), ts.emptyArray, ts.emptyArray);
@@ -54513,38 +55639,35 @@
             }
             return result;
         }
-        function getUnionIndexInfo(types, kind) {
-            var indexTypes = [];
-            var isAnyReadonly = false;
-            for (var _i = 0, types_4 = types; _i < types_4.length; _i++) {
-                var type = types_4[_i];
-                var indexInfo = getIndexInfoOfType(getApparentType(type), kind);
-                if (!indexInfo) {
-                    return undefined;
+        function getUnionIndexInfos(types) {
+            var sourceInfos = getIndexInfosOfType(types[0]);
+            if (sourceInfos) {
+                var result = [];
+                var _loop_11 = function (info) {
+                    var indexType = info.keyType;
+                    if (ts.every(types, function (t) { return !!getIndexInfoOfType(t, indexType); })) {
+                        result.push(createIndexInfo(indexType, getUnionType(ts.map(types, function (t) { return getIndexTypeOfType(t, indexType); })), ts.some(types, function (t) { return getIndexInfoOfType(t, indexType).isReadonly; })));
+                    }
+                };
+                for (var _i = 0, sourceInfos_1 = sourceInfos; _i < sourceInfos_1.length; _i++) {
+                    var info = sourceInfos_1[_i];
+                    _loop_11(info);
                 }
-                indexTypes.push(indexInfo.type);
-                isAnyReadonly = isAnyReadonly || indexInfo.isReadonly;
+                return result;
             }
-            return createIndexInfo(getUnionType(indexTypes, 2 /* Subtype */), isAnyReadonly);
+            return ts.emptyArray;
         }
         function resolveUnionTypeMembers(type) {
             // The members and properties collections are empty for union types. To get all properties of a union
             // type use getPropertiesOfType (only the language service uses this).
             var callSignatures = getUnionSignatures(ts.map(type.types, function (t) { return t === globalFunctionType ? [unknownSignature] : getSignaturesOfType(t, 0 /* Call */); }));
             var constructSignatures = getUnionSignatures(ts.map(type.types, function (t) { return getSignaturesOfType(t, 1 /* Construct */); }));
-            var stringIndexInfo = getUnionIndexInfo(type.types, 0 /* String */);
-            var numberIndexInfo = getUnionIndexInfo(type.types, 1 /* Number */);
-            setStructuredTypeMembers(type, emptySymbols, callSignatures, constructSignatures, stringIndexInfo, numberIndexInfo);
+            var indexInfos = getUnionIndexInfos(type.types);
+            setStructuredTypeMembers(type, emptySymbols, callSignatures, constructSignatures, indexInfos);
         }
         function intersectTypes(type1, type2) {
             return !type1 ? type2 : !type2 ? type1 : getIntersectionType([type1, type2]);
         }
-        function intersectIndexInfos(info1, info2) {
-            return !info1 ? info2 : !info2 ? info1 : createIndexInfo(getIntersectionType([info1.type, info2.type]), info1.isReadonly && info2.isReadonly);
-        }
-        function unionSpreadIndexInfos(info1, info2) {
-            return info1 && info2 && createIndexInfo(getUnionType([info1.type, info2.type]), info1.isReadonly || info2.isReadonly);
-        }
         function findMixins(types) {
             var constructorTypeCount = ts.countWhere(types, function (t) { return getSignaturesOfType(t, 1 /* Construct */).length > 0; });
             var mixinFlags = ts.map(types, isMixinConstructorType);
@@ -54571,12 +55694,11 @@
             // intersection type use getPropertiesOfType (only the language service uses this).
             var callSignatures;
             var constructSignatures;
-            var stringIndexInfo;
-            var numberIndexInfo;
+            var indexInfos;
             var types = type.types;
             var mixinFlags = findMixins(types);
             var mixinCount = ts.countWhere(mixinFlags, function (b) { return b; });
-            var _loop_11 = function (i) {
+            var _loop_12 = function (i) {
                 var t = type.types[i];
                 // When an intersection type contains mixin constructor types, the construct signatures from
                 // those types are discarded and their return types are mixed into the return types of all
@@ -54595,54 +55717,62 @@
                     constructSignatures = appendSignatures(constructSignatures, signatures);
                 }
                 callSignatures = appendSignatures(callSignatures, getSignaturesOfType(t, 0 /* Call */));
-                stringIndexInfo = intersectIndexInfos(stringIndexInfo, getIndexInfoOfType(t, 0 /* String */));
-                numberIndexInfo = intersectIndexInfos(numberIndexInfo, getIndexInfoOfType(t, 1 /* Number */));
+                indexInfos = ts.reduceLeft(getIndexInfosOfType(t), function (infos, newInfo) { return appendIndexInfo(infos, newInfo, /*union*/ false); }, indexInfos);
             };
             for (var i = 0; i < types.length; i++) {
-                _loop_11(i);
+                _loop_12(i);
             }
-            setStructuredTypeMembers(type, emptySymbols, callSignatures || ts.emptyArray, constructSignatures || ts.emptyArray, stringIndexInfo, numberIndexInfo);
+            setStructuredTypeMembers(type, emptySymbols, callSignatures || ts.emptyArray, constructSignatures || ts.emptyArray, indexInfos || ts.emptyArray);
         }
         function appendSignatures(signatures, newSignatures) {
-            var _loop_12 = function (sig) {
+            var _loop_13 = function (sig) {
                 if (!signatures || ts.every(signatures, function (s) { return !compareSignaturesIdentical(s, sig, /*partialMatch*/ false, /*ignoreThisTypes*/ false, /*ignoreReturnTypes*/ false, compareTypesIdentical); })) {
                     signatures = ts.append(signatures, sig);
                 }
             };
             for (var _i = 0, newSignatures_1 = newSignatures; _i < newSignatures_1.length; _i++) {
                 var sig = newSignatures_1[_i];
-                _loop_12(sig);
+                _loop_13(sig);
             }
             return signatures;
         }
+        function appendIndexInfo(indexInfos, newInfo, union) {
+            if (indexInfos) {
+                for (var i = 0; i < indexInfos.length; i++) {
+                    var info = indexInfos[i];
+                    if (info.keyType === newInfo.keyType) {
+                        indexInfos[i] = createIndexInfo(info.keyType, union ? getUnionType([info.type, newInfo.type]) : getIntersectionType([info.type, newInfo.type]), union ? info.isReadonly || newInfo.isReadonly : info.isReadonly && newInfo.isReadonly);
+                        return indexInfos;
+                    }
+                }
+            }
+            return ts.append(indexInfos, newInfo);
+        }
         /**
          * Converts an AnonymousType to a ResolvedType.
          */
         function resolveAnonymousTypeMembers(type) {
             var symbol = getMergedSymbol(type.symbol);
             if (type.target) {
-                setStructuredTypeMembers(type, emptySymbols, ts.emptyArray, ts.emptyArray, undefined, undefined);
+                setStructuredTypeMembers(type, emptySymbols, ts.emptyArray, ts.emptyArray, ts.emptyArray);
                 var members = createInstantiatedSymbolTable(getPropertiesOfObjectType(type.target), type.mapper, /*mappingThisOnly*/ false);
                 var callSignatures = instantiateSignatures(getSignaturesOfType(type.target, 0 /* Call */), type.mapper);
                 var constructSignatures = instantiateSignatures(getSignaturesOfType(type.target, 1 /* Construct */), type.mapper);
-                var stringIndexInfo = instantiateIndexInfo(getIndexInfoOfType(type.target, 0 /* String */), type.mapper);
-                var numberIndexInfo = instantiateIndexInfo(getIndexInfoOfType(type.target, 1 /* Number */), type.mapper);
-                setStructuredTypeMembers(type, members, callSignatures, constructSignatures, stringIndexInfo, numberIndexInfo);
+                var indexInfos = instantiateIndexInfos(getIndexInfosOfType(type.target), type.mapper);
+                setStructuredTypeMembers(type, members, callSignatures, constructSignatures, indexInfos);
             }
             else if (symbol.flags & 2048 /* TypeLiteral */) {
-                setStructuredTypeMembers(type, emptySymbols, ts.emptyArray, ts.emptyArray, undefined, undefined);
+                setStructuredTypeMembers(type, emptySymbols, ts.emptyArray, ts.emptyArray, ts.emptyArray);
                 var members = getMembersOfSymbol(symbol);
                 var callSignatures = getSignaturesOfSymbol(members.get("__call" /* Call */));
                 var constructSignatures = getSignaturesOfSymbol(members.get("__new" /* New */));
-                var stringIndexInfo = getIndexInfoOfSymbol(symbol, 0 /* String */);
-                var numberIndexInfo = getIndexInfoOfSymbol(symbol, 1 /* Number */);
-                setStructuredTypeMembers(type, members, callSignatures, constructSignatures, stringIndexInfo, numberIndexInfo);
+                var indexInfos = getIndexInfosOfSymbol(symbol);
+                setStructuredTypeMembers(type, members, callSignatures, constructSignatures, indexInfos);
             }
             else {
                 // Combinations of function, class, enum and module
                 var members = emptySymbols;
-                var stringIndexInfo = void 0;
-                var numberIndexInfo = void 0;
+                var indexInfos = void 0;
                 if (symbol.exports) {
                     members = getExportsOfSymbol(symbol);
                     if (symbol === globalThisSymbol) {
@@ -54656,7 +55786,7 @@
                     }
                 }
                 var baseConstructorIndexInfo = void 0;
-                setStructuredTypeMembers(type, members, ts.emptyArray, ts.emptyArray, undefined, undefined);
+                setStructuredTypeMembers(type, members, ts.emptyArray, ts.emptyArray, ts.emptyArray);
                 if (symbol.flags & 32 /* Class */) {
                     var classType = getDeclaredTypeOfClassOrInterface(symbol);
                     var baseConstructorType = getBaseConstructorTypeOfClass(classType);
@@ -54665,22 +55795,23 @@
                         addInheritedMembers(members, getPropertiesOfType(baseConstructorType));
                     }
                     else if (baseConstructorType === anyType) {
-                        baseConstructorIndexInfo = createIndexInfo(anyType, /*isReadonly*/ false);
+                        baseConstructorIndexInfo = createIndexInfo(stringType, anyType, /*isReadonly*/ false);
                     }
                 }
                 var indexSymbol = getIndexSymbolFromSymbolTable(members);
                 if (indexSymbol) {
-                    stringIndexInfo = getIndexInfoOfIndexSymbol(indexSymbol, 0 /* String */);
-                    numberIndexInfo = getIndexInfoOfIndexSymbol(indexSymbol, 1 /* Number */);
+                    indexInfos = getIndexInfosOfIndexSymbol(indexSymbol);
                 }
                 else {
-                    stringIndexInfo = baseConstructorIndexInfo;
+                    if (baseConstructorIndexInfo) {
+                        indexInfos = ts.append(indexInfos, baseConstructorIndexInfo);
+                    }
                     if (symbol.flags & 384 /* Enum */ && (getDeclaredTypeOfSymbol(symbol).flags & 32 /* Enum */ ||
                         ts.some(type.properties, function (prop) { return !!(getTypeOfSymbol(prop).flags & 296 /* NumberLike */); }))) {
-                        numberIndexInfo = enumNumberIndexInfo;
+                        indexInfos = ts.append(indexInfos, enumNumberIndexInfo);
                     }
                 }
-                setStructuredTypeMembers(type, members, ts.emptyArray, ts.emptyArray, stringIndexInfo, numberIndexInfo);
+                setStructuredTypeMembers(type, members, ts.emptyArray, ts.emptyArray, indexInfos || ts.emptyArray);
                 // We resolve the members before computing the signatures because a signature may use
                 // typeof with a qualified name expression that circularly references the type we are
                 // in the process of resolving (see issue #6072). The temporarily empty signature list
@@ -54708,20 +55839,14 @@
             // map type.indexType to 0
             // map type.objectType to `[TReplacement]`
             // thus making the indexed access `[TReplacement][0]` or `TReplacement`
-            return instantiateType(instantiable, createTypeMapper([type.indexType, type.objectType], [getLiteralType(0), createTupleType([replacement])]));
-        }
-        function getIndexInfoOfIndexSymbol(indexSymbol, indexKind) {
-            var declaration = getIndexDeclarationOfIndexSymbol(indexSymbol, indexKind);
-            if (!declaration)
-                return undefined;
-            return createIndexInfo(declaration.type ? getTypeFromTypeNode(declaration.type) : anyType, ts.hasEffectiveModifier(declaration, 64 /* Readonly */), declaration);
+            return instantiateType(instantiable, createTypeMapper([type.indexType, type.objectType], [getNumberLiteralType(0), createTupleType([replacement])]));
         }
         function resolveReverseMappedTypeMembers(type) {
-            var indexInfo = getIndexInfoOfType(type.source, 0 /* String */);
+            var indexInfo = getIndexInfoOfType(type.source, stringType);
             var modifiers = getMappedTypeModifiers(type.mappedType);
             var readonlyMask = modifiers & 1 /* IncludeReadonly */ ? false : true;
             var optionalMask = modifiers & 4 /* IncludeOptional */ ? 0 : 16777216 /* Optional */;
-            var stringIndexInfo = indexInfo && createIndexInfo(inferReverseMappedType(indexInfo.type, type.mappedType, type.constraintType), readonlyMask && indexInfo.isReadonly);
+            var indexInfos = indexInfo ? [createIndexInfo(stringType, inferReverseMappedType(indexInfo.type, type.mappedType, type.constraintType), readonlyMask && indexInfo.isReadonly)] : ts.emptyArray;
             var members = ts.createSymbolTable();
             for (var _i = 0, _a = getPropertiesOfType(type.source); _i < _a.length; _i++) {
                 var prop = _a[_i];
@@ -54747,7 +55872,7 @@
                 }
                 members.set(prop.escapedName, inferredProp);
             }
-            setStructuredTypeMembers(type, members, ts.emptyArray, ts.emptyArray, stringIndexInfo, undefined);
+            setStructuredTypeMembers(type, members, ts.emptyArray, ts.emptyArray, indexInfos);
         }
         // Return the lower bound of the key type in a mapped type. Intuitively, the lower
         // bound includes those keys that are known to always be present, for example because
@@ -54781,10 +55906,9 @@
         /** Resolve the members of a mapped type { [P in K]: T } */
         function resolveMappedTypeMembers(type) {
             var members = ts.createSymbolTable();
-            var stringIndexInfo;
-            var numberIndexInfo;
+            var indexInfos;
             // Resolve upfront such that recursive references see an empty object type.
-            setStructuredTypeMembers(type, emptySymbols, ts.emptyArray, ts.emptyArray, undefined, undefined);
+            setStructuredTypeMembers(type, emptySymbols, ts.emptyArray, ts.emptyArray, ts.emptyArray);
             // In { [P in K]: T }, we refer to P as the type parameter type, K as the constraint type,
             // and T as the template type.
             var typeParameter = getTypeParameterFromMappedType(type);
@@ -54800,17 +55924,22 @@
                     var prop = _a[_i];
                     addMemberForKeyType(getLiteralTypeFromProperty(prop, include));
                 }
-                if (modifiersType.flags & 1 /* Any */ || getIndexInfoOfType(modifiersType, 0 /* String */)) {
+                if (modifiersType.flags & 1 /* Any */) {
                     addMemberForKeyType(stringType);
                 }
-                if (!keyofStringsOnly && getIndexInfoOfType(modifiersType, 1 /* Number */)) {
-                    addMemberForKeyType(numberType);
+                else {
+                    for (var _b = 0, _c = getIndexInfosOfType(modifiersType); _b < _c.length; _b++) {
+                        var info = _c[_b];
+                        if (!keyofStringsOnly || info.keyType.flags & (4 /* String */ | 134217728 /* TemplateLiteral */)) {
+                            addMemberForKeyType(info.keyType);
+                        }
+                    }
                 }
             }
             else {
                 forEachType(getLowerBoundOfKeyType(constraintType), addMemberForKeyType);
             }
-            setStructuredTypeMembers(type, members, ts.emptyArray, ts.emptyArray, stringIndexInfo, numberIndexInfo);
+            setStructuredTypeMembers(type, members, ts.emptyArray, ts.emptyArray, indexInfos || ts.emptyArray);
             function addMemberForKeyType(keyType) {
                 var propNameType = nameType ? instantiateType(nameType, appendTypeMapping(type.mapper, typeParameter, keyType)) : keyType;
                 forEachType(propNameType, function (t) { return addMemberForKeyTypeWorker(keyType, t); });
@@ -54842,19 +55971,20 @@
                         prop.keyType = keyType;
                         if (modifiersProp) {
                             prop.syntheticOrigin = modifiersProp;
-                            prop.declarations = modifiersProp.declarations;
+                            // If the mapped type has an `as XXX` clause, the property name likely won't match the declaration name and
+                            // multiple properties may map to the same name. Thus, we attach no declarations to the symbol.
+                            prop.declarations = nameType ? undefined : modifiersProp.declarations;
                         }
                         members.set(propName, prop);
                     }
                 }
-                else if (propNameType.flags & (1 /* Any */ | 4 /* String */ | 8 /* Number */ | 32 /* Enum */)) {
+                else if (isValidIndexKeyType(propNameType) || propNameType.flags & (1 /* Any */ | 32 /* Enum */)) {
+                    var indexKeyType = propNameType.flags & (1 /* Any */ | 4 /* String */) ? stringType :
+                        propNameType.flags & (8 /* Number */ | 32 /* Enum */) ? numberType :
+                            propNameType;
                     var propType = instantiateType(templateType, appendTypeMapping(type.mapper, typeParameter, keyType));
-                    if (propNameType.flags & (1 /* Any */ | 4 /* String */)) {
-                        stringIndexInfo = createIndexInfo(stringIndexInfo ? getUnionType([stringIndexInfo.type, propType]) : propType, !!(templateModifiers & 1 /* IncludeReadonly */));
-                    }
-                    else {
-                        numberIndexInfo = createIndexInfo(numberIndexInfo ? getUnionType([numberIndexInfo.type, propType]) : propType, !!(templateModifiers & 1 /* IncludeReadonly */));
-                    }
+                    var indexInfo = createIndexInfo(indexKeyType, propType, !!(templateModifiers & 1 /* IncludeReadonly */));
+                    indexInfos = appendIndexInfo(indexInfos, indexInfo, /*union*/ true);
                 }
             }
         }
@@ -54871,8 +56001,8 @@
                 // When creating an optional property in strictNullChecks mode, if 'undefined' isn't assignable to the
                 // type, we include 'undefined' in the type. Similarly, when creating a non-optional property in strictNullChecks
                 // mode, if the underlying property is optional we remove 'undefined' from the type.
-                var type = strictNullChecks && symbol.flags & 16777216 /* Optional */ && !maybeTypeOfKind(propType, 32768 /* Undefined */ | 16384 /* Void */) ? getOptionalType(propType) :
-                    symbol.checkFlags & 524288 /* StripOptional */ ? getTypeWithFacts(propType, 524288 /* NEUndefined */) :
+                var type = strictNullChecks && symbol.flags & 16777216 /* Optional */ && !maybeTypeOfKind(propType, 32768 /* Undefined */ | 16384 /* Void */) ? getOptionalType(propType, /*isProperty*/ true) :
+                    symbol.checkFlags & 524288 /* StripOptional */ ? removeMissingOrUndefinedType(propType) :
                         propType;
                 if (!popTypeResolution()) {
                     error(currentNode, ts.Diagnostics.Type_of_property_0_circularly_references_itself_in_mapped_type_1, symbolToString(symbol), typeToString(mappedType));
@@ -54898,7 +56028,7 @@
         function getTemplateTypeFromMappedType(type) {
             return type.templateType ||
                 (type.templateType = type.declaration.type ?
-                    instantiateType(addOptionality(getTypeFromTypeNode(type.declaration.type), !!(getMappedTypeModifiers(type) & 4 /* IncludeOptional */)), type.mapper) :
+                    instantiateType(addOptionality(getTypeFromTypeNode(type.declaration.type), /*isProperty*/ true, !!(getMappedTypeModifiers(type) & 4 /* IncludeOptional */)), type.mapper) :
                     errorType);
         }
         function getConstraintDeclarationForMappedType(type) {
@@ -54906,8 +56036,8 @@
         }
         function isMappedTypeWithKeyofConstraintDeclaration(type) {
             var constraintDeclaration = getConstraintDeclarationForMappedType(type); // TODO: GH#18217
-            return constraintDeclaration.kind === 189 /* TypeOperator */ &&
-                constraintDeclaration.operator === 138 /* KeyOfKeyword */;
+            return constraintDeclaration.kind === 191 /* TypeOperator */ &&
+                constraintDeclaration.operator === 139 /* KeyOfKeyword */;
         }
         function getModifiersTypeFromMappedType(type) {
             if (!type.modifiersType) {
@@ -55012,7 +56142,7 @@
                     }
                     // The properties of a union type are those that are present in all constituent types, so
                     // we only need to check the properties of the first type without index signature
-                    if (type.flags & 1048576 /* Union */ && !getIndexInfoOfType(current, 0 /* String */) && !getIndexInfoOfType(current, 1 /* Number */)) {
+                    if (type.flags & 1048576 /* Union */ && getIndexInfosOfType(current).length === 0) {
                         break;
                     }
                 }
@@ -55041,8 +56171,8 @@
                 return getAugmentedPropertiesOfType(unionType);
             }
             var props = ts.createSymbolTable();
-            for (var _i = 0, types_5 = types; _i < types_5.length; _i++) {
-                var memberType = types_5[_i];
+            for (var _i = 0, types_4 = types; _i < types_4.length; _i++) {
+                var memberType = types_4[_i];
                 for (var _a = 0, _b = getAugmentedPropertiesOfType(memberType); _a < _b.length; _a++) {
                     var escapedName = _b[_a].escapedName;
                     if (!props.has(escapedName)) {
@@ -55074,14 +56204,14 @@
         function getConstraintFromIndexedAccess(type) {
             var indexConstraint = getSimplifiedTypeOrConstraint(type.indexType);
             if (indexConstraint && indexConstraint !== type.indexType) {
-                var indexedAccess = getIndexedAccessTypeOrUndefined(type.objectType, indexConstraint, type.noUncheckedIndexedAccessCandidate);
+                var indexedAccess = getIndexedAccessTypeOrUndefined(type.objectType, indexConstraint, type.accessFlags);
                 if (indexedAccess) {
                     return indexedAccess;
                 }
             }
             var objectConstraint = getSimplifiedTypeOrConstraint(type.objectType);
             if (objectConstraint && objectConstraint !== type.objectType) {
-                return getIndexedAccessTypeOrUndefined(objectConstraint, type.indexType, type.noUncheckedIndexedAccessCandidate);
+                return getIndexedAccessTypeOrUndefined(objectConstraint, type.indexType, type.accessFlags);
             }
             return undefined;
         }
@@ -55130,8 +56260,8 @@
         function getEffectiveConstraintOfIntersection(types, targetIsUnion) {
             var constraints;
             var hasDisjointDomainType = false;
-            for (var _i = 0, types_6 = types; _i < types_6.length; _i++) {
-                var t = types_6[_i];
+            for (var _i = 0, types_5 = types; _i < types_5.length; _i++) {
+                var t = types_5[_i];
                 if (t.flags & 465829888 /* Instantiable */) {
                     // We keep following constraints as long as we have an instantiable type that is known
                     // not to be circular or infinite (hence we stop on index access types).
@@ -55156,8 +56286,8 @@
                 if (hasDisjointDomainType) {
                     // We add any types belong to one of the disjoint domains because they might cause the final
                     // intersection operation to reduce the union constraints.
-                    for (var _a = 0, types_7 = types; _a < types_7.length; _a++) {
-                        var t = types_7[_a];
+                    for (var _a = 0, types_6 = types; _a < types_6.length; _a++) {
+                        var t = types_6[_a];
                         if (t.flags & 469892092 /* DisjointDomains */) {
                             constraints = ts.append(constraints, t);
                         }
@@ -55243,8 +56373,8 @@
                     var types = t.types;
                     var baseTypes = [];
                     var different = false;
-                    for (var _i = 0, types_8 = types; _i < types_8.length; _i++) {
-                        var type_3 = types_8[_i];
+                    for (var _i = 0, types_7 = types; _i < types_7.length; _i++) {
+                        var type_3 = types_7[_i];
                         var baseType = getBaseConstraint(type_3);
                         if (baseType) {
                             if (baseType !== type_3) {
@@ -55278,7 +56408,7 @@
                 if (t.flags & 8388608 /* IndexedAccess */) {
                     var baseObjectType = getBaseConstraint(t.objectType);
                     var baseIndexType = getBaseConstraint(t.indexType);
-                    var baseIndexedAccess = baseObjectType && baseIndexType && getIndexedAccessTypeOrUndefined(baseObjectType, baseIndexType, t.noUncheckedIndexedAccessCandidate);
+                    var baseIndexedAccess = baseObjectType && baseIndexType && getIndexedAccessTypeOrUndefined(baseObjectType, baseIndexType, t.accessFlags);
                     return baseIndexedAccess && getBaseConstraint(baseIndexedAccess);
                 }
                 if (t.flags & 16777216 /* Conditional */) {
@@ -55435,7 +56565,7 @@
                         }
                     }
                     else if (isUnion) {
-                        var indexInfo = !isLateBoundName(name) && (isNumericLiteralName(name) && getIndexInfoOfType(type, 1 /* Number */) || getIndexInfoOfType(type, 0 /* String */));
+                        var indexInfo = !isLateBoundName(name) && getApplicableIndexInfoForName(type, name);
                         if (indexInfo) {
                             checkFlags |= 32 /* WritePartial */ | (indexInfo.isReadonly ? 8 /* Readonly */ : 0);
                             indexTypes = ts.append(indexTypes, isTupleType(type) ? getRestTypeOfTupleType(type) || undefinedType : indexInfo.type);
@@ -55555,15 +56685,15 @@
          * no constituent property has type 'never', but the intersection of the constituent property types is 'never'.
          */
         function getReducedType(type) {
-            if (type.flags & 1048576 /* Union */ && type.objectFlags & 67108864 /* ContainsIntersections */) {
+            if (type.flags & 1048576 /* Union */ && type.objectFlags & 33554432 /* ContainsIntersections */) {
                 return type.resolvedReducedType || (type.resolvedReducedType = getReducedUnionType(type));
             }
             else if (type.flags & 2097152 /* Intersection */) {
-                if (!(type.objectFlags & 67108864 /* IsNeverIntersectionComputed */)) {
-                    type.objectFlags |= 67108864 /* IsNeverIntersectionComputed */ |
-                        (ts.some(getPropertiesOfUnionOrIntersectionType(type), isNeverReducedProperty) ? 134217728 /* IsNeverIntersection */ : 0);
+                if (!(type.objectFlags & 33554432 /* IsNeverIntersectionComputed */)) {
+                    type.objectFlags |= 33554432 /* IsNeverIntersectionComputed */ |
+                        (ts.some(getPropertiesOfUnionOrIntersectionType(type), isNeverReducedProperty) ? 67108864 /* IsNeverIntersection */ : 0);
                 }
-                return type.objectFlags & 134217728 /* IsNeverIntersection */ ? neverType : type;
+                return type.objectFlags & 67108864 /* IsNeverIntersection */ ? neverType : type;
             }
             return type;
         }
@@ -55593,7 +56723,7 @@
             return !prop.valueDeclaration && !!(ts.getCheckFlags(prop) & 1024 /* ContainsPrivate */);
         }
         function elaborateNeverIntersection(errorInfo, type) {
-            if (type.flags & 2097152 /* Intersection */ && ts.getObjectFlags(type) & 134217728 /* IsNeverIntersection */) {
+            if (type.flags & 2097152 /* Intersection */ && ts.getObjectFlags(type) & 67108864 /* IsNeverIntersection */) {
                 var neverProp = ts.find(getPropertiesOfUnionOrIntersectionType(type), isDiscriminantWithNeverType);
                 if (neverProp) {
                     return ts.chainDiagnosticMessages(errorInfo, ts.Diagnostics.The_intersection_0_was_reduced_to_never_because_property_1_has_conflicting_types_in_some_constituents, typeToString(type, /*enclosingDeclaration*/ undefined, 536870912 /* NoTypeReduction */), symbolToString(neverProp));
@@ -55654,44 +56784,72 @@
         function getSignaturesOfType(type, kind) {
             return getSignaturesOfStructuredType(getReducedApparentType(type), kind);
         }
-        function getIndexInfoOfStructuredType(type, kind) {
+        function findIndexInfo(indexInfos, keyType) {
+            return ts.find(indexInfos, function (info) { return info.keyType === keyType; });
+        }
+        function findApplicableIndexInfo(indexInfos, keyType) {
+            // Index signatures for type 'string' are considered only when no other index signatures apply.
+            var stringIndexInfo;
+            var applicableInfo;
+            var applicableInfos;
+            for (var _i = 0, indexInfos_1 = indexInfos; _i < indexInfos_1.length; _i++) {
+                var info = indexInfos_1[_i];
+                if (info.keyType === stringType) {
+                    stringIndexInfo = info;
+                }
+                else if (isApplicableIndexType(keyType, info.keyType)) {
+                    if (!applicableInfo) {
+                        applicableInfo = info;
+                    }
+                    else {
+                        (applicableInfos || (applicableInfos = [applicableInfo])).push(info);
+                    }
+                }
+            }
+            // When more than one index signature is applicable we create a synthetic IndexInfo. Instead of computing
+            // the intersected key type, we just use unknownType for the key type as nothing actually depends on the
+            // keyType property of the returned IndexInfo.
+            return applicableInfos ? createIndexInfo(unknownType, getIntersectionType(ts.map(applicableInfos, function (info) { return info.type; })), ts.reduceLeft(applicableInfos, function (isReadonly, info) { return isReadonly && info.isReadonly; }, /*initial*/ true)) :
+                applicableInfo ? applicableInfo :
+                    stringIndexInfo && isApplicableIndexType(keyType, stringType) ? stringIndexInfo :
+                        undefined;
+        }
+        function isApplicableIndexType(source, target) {
+            // A 'string' index signature applies to types assignable to 'string' or 'number', and a 'number' index
+            // signature applies to types assignable to 'number' and numeric string literal types.
+            return isTypeAssignableTo(source, target) ||
+                target === stringType && isTypeAssignableTo(source, numberType) ||
+                target === numberType && !!(source.flags & 128 /* StringLiteral */) && isNumericLiteralName(source.value);
+        }
+        function getIndexInfosOfStructuredType(type) {
             if (type.flags & 3670016 /* StructuredType */) {
                 var resolved = resolveStructuredTypeMembers(type);
-                return kind === 0 /* String */ ? resolved.stringIndexInfo : resolved.numberIndexInfo;
+                return resolved.indexInfos;
             }
+            return ts.emptyArray;
         }
-        function getIndexTypeOfStructuredType(type, kind) {
-            var info = getIndexInfoOfStructuredType(type, kind);
-            return info && info.type;
+        function getIndexInfosOfType(type) {
+            return getIndexInfosOfStructuredType(getReducedApparentType(type));
         }
         // Return the indexing info of the given kind in the given type. Creates synthetic union index types when necessary and
         // maps primitive types and type parameters are to their apparent types.
-        function getIndexInfoOfType(type, kind) {
-            return getIndexInfoOfStructuredType(getReducedApparentType(type), kind);
+        function getIndexInfoOfType(type, keyType) {
+            return findIndexInfo(getIndexInfosOfType(type), keyType);
         }
         // Return the index type of the given kind in the given type. Creates synthetic union index types when necessary and
         // maps primitive types and type parameters are to their apparent types.
-        function getIndexTypeOfType(type, kind) {
-            return getIndexTypeOfStructuredType(getReducedApparentType(type), kind);
+        function getIndexTypeOfType(type, keyType) {
+            var _a;
+            return (_a = getIndexInfoOfType(type, keyType)) === null || _a === void 0 ? void 0 : _a.type;
         }
-        function getImplicitIndexTypeOfType(type, kind) {
-            if (isObjectTypeWithInferableIndex(type)) {
-                var propTypes = [];
-                for (var _i = 0, _a = getPropertiesOfType(type); _i < _a.length; _i++) {
-                    var prop = _a[_i];
-                    if (kind === 0 /* String */ || isNumericLiteralName(prop.escapedName)) {
-                        var propType = getTypeOfSymbol(prop);
-                        propTypes.push(prop.flags & 16777216 /* Optional */ ? getTypeWithFacts(propType, 524288 /* NEUndefined */) : propType);
-                    }
-                }
-                if (kind === 0 /* String */) {
-                    ts.append(propTypes, getIndexTypeOfType(type, 1 /* Number */));
-                }
-                if (propTypes.length) {
-                    return getUnionType(propTypes);
-                }
-            }
-            return undefined;
+        function getApplicableIndexInfos(type, keyType) {
+            return getIndexInfosOfType(type).filter(function (info) { return isApplicableIndexType(keyType, info.keyType); });
+        }
+        function getApplicableIndexInfo(type, keyType) {
+            return findApplicableIndexInfo(getIndexInfosOfType(type), keyType);
+        }
+        function getApplicableIndexInfoForName(type, name) {
+            return getApplicableIndexInfo(type, isLateBoundName(name) ? esSymbolType : getStringLiteralType(ts.unescapeLeadingUnderscores(name)));
         }
         // Return list of type parameters with duplicates removed (duplicate identifier errors are generated in the actual
         // type checking functions).
@@ -55715,10 +56873,10 @@
         function isJSDocOptionalParameter(node) {
             return ts.isInJSFile(node) && (
             // node.type should only be a JSDocOptionalType when node is a parameter of a JSDocFunctionType
-            node.type && node.type.kind === 308 /* JSDocOptionalType */
+            node.type && node.type.kind === 311 /* JSDocOptionalType */
                 || ts.getJSDocParameterTags(node).some(function (_a) {
                     var isBracketed = _a.isBracketed, typeExpression = _a.typeExpression;
-                    return isBracketed || !!typeExpression && typeExpression.type.kind === 308 /* JSDocOptionalType */;
+                    return isBracketed || !!typeExpression && typeExpression.type.kind === 311 /* JSDocOptionalType */;
                 }));
         }
         function tryFindAmbientModule(moduleName, withAugmentations) {
@@ -55758,7 +56916,7 @@
                 return false;
             }
             var isBracketed = node.isBracketed, typeExpression = node.typeExpression;
-            return isBracketed || !!typeExpression && typeExpression.type.kind === 308 /* JSDocOptionalType */;
+            return isBracketed || !!typeExpression && typeExpression.type.kind === 311 /* JSDocOptionalType */;
         }
         function createTypePredicate(kind, parameterName, parameterIndex, type) {
             return { kind: kind, parameterName: parameterName, parameterIndex: parameterIndex, type: type };
@@ -55840,12 +56998,12 @@
                     else {
                         parameters.push(paramSymbol);
                     }
-                    if (type && type.kind === 192 /* LiteralType */) {
+                    if (type && type.kind === 194 /* LiteralType */) {
                         flags |= 2 /* HasLiteralTypes */;
                     }
                     // Record a new minimum argument count if this is not an optional parameter
                     var isOptionalParameter_1 = isOptionalJSDocPropertyLikeTag(param) ||
-                        param.initializer || param.questionToken || param.dotDotDotToken ||
+                        param.initializer || param.questionToken || ts.isRestParameter(param) ||
                         iife && parameters.length > iife.arguments.length && !type ||
                         isJSDocOptionalParameter(param);
                     if (!isOptionalParameter_1) {
@@ -55853,16 +57011,16 @@
                     }
                 }
                 // If only one accessor includes a this-type annotation, the other behaves as if it had the same type annotation
-                if ((declaration.kind === 168 /* GetAccessor */ || declaration.kind === 169 /* SetAccessor */) &&
+                if ((declaration.kind === 170 /* GetAccessor */ || declaration.kind === 171 /* SetAccessor */) &&
                     hasBindableName(declaration) &&
                     (!hasThisParameter || !thisParameter)) {
-                    var otherKind = declaration.kind === 168 /* GetAccessor */ ? 169 /* SetAccessor */ : 168 /* GetAccessor */;
+                    var otherKind = declaration.kind === 170 /* GetAccessor */ ? 171 /* SetAccessor */ : 170 /* GetAccessor */;
                     var other = ts.getDeclarationOfKind(getSymbolOfNode(declaration), otherKind);
                     if (other) {
                         thisParameter = getAnnotatedAccessorThisParameter(other);
                     }
                 }
-                var classType = declaration.kind === 167 /* Constructor */ ?
+                var classType = declaration.kind === 169 /* Constructor */ ?
                     getDeclaredTypeOfClassOrInterface(getMergedSymbol(declaration.parent.symbol))
                     : undefined;
                 var typeParameters = classType ? classType.localTypeParameters : getTypeParametersFromDeclaration(declaration);
@@ -55928,16 +57086,16 @@
                 if (!node)
                     return false;
                 switch (node.kind) {
-                    case 78 /* Identifier */:
+                    case 79 /* Identifier */:
                         return node.escapedText === argumentsSymbol.escapedName && getResolvedSymbol(node) === argumentsSymbol;
-                    case 164 /* PropertyDeclaration */:
-                    case 166 /* MethodDeclaration */:
-                    case 168 /* GetAccessor */:
-                    case 169 /* SetAccessor */:
-                        return node.name.kind === 159 /* ComputedPropertyName */
+                    case 165 /* PropertyDeclaration */:
+                    case 167 /* MethodDeclaration */:
+                    case 170 /* GetAccessor */:
+                    case 171 /* SetAccessor */:
+                        return node.name.kind === 160 /* ComputedPropertyName */
                             && traverse(node.name);
-                    case 202 /* PropertyAccessExpression */:
-                    case 203 /* ElementAccessExpression */:
+                    case 204 /* PropertyAccessExpression */:
+                    case 205 /* ElementAccessExpression */:
                         return traverse(node.expression);
                     default:
                         return !ts.nodeStartsNewLexicalEnvironment(node) && !ts.isPartOfTypeNode(node) && !!ts.forEachChild(node, traverse);
@@ -56009,7 +57167,7 @@
         function createTypePredicateFromTypePredicateNode(node, signature) {
             var parameterName = node.parameterName;
             var type = node.type && getTypeFromTypeNode(node.type);
-            return parameterName.kind === 188 /* ThisType */ ?
+            return parameterName.kind === 190 /* ThisType */ ?
                 createTypePredicate(node.assertsModifier ? 2 /* AssertsThis */ : 0 /* This */, /*parameterName*/ undefined, /*parameterIndex*/ undefined, type) :
                 createTypePredicate(node.assertsModifier ? 3 /* AssertsIdentifier */ : 1 /* Identifier */, parameterName.escapedText, ts.findIndex(signature.parameters, function (p) { return p.escapedName === parameterName.escapedText; }), type);
         }
@@ -56055,7 +57213,7 @@
             return signature.resolvedReturnType;
         }
         function getReturnTypeFromAnnotation(declaration) {
-            if (declaration.kind === 167 /* Constructor */) {
+            if (declaration.kind === 169 /* Constructor */) {
                 return getDeclaredTypeOfClassOrInterface(getMergedSymbol(declaration.parent.symbol));
             }
             if (ts.isJSDocConstructSignature(declaration)) {
@@ -56065,12 +57223,12 @@
             if (typeNode) {
                 return getTypeFromTypeNode(typeNode);
             }
-            if (declaration.kind === 168 /* GetAccessor */ && hasBindableName(declaration)) {
+            if (declaration.kind === 170 /* GetAccessor */ && hasBindableName(declaration)) {
                 var jsDocType = ts.isInJSFile(declaration) && getTypeForDeclarationFromJSDocComment(declaration);
                 if (jsDocType) {
                     return jsDocType;
                 }
-                var setter = ts.getDeclarationOfKind(getSymbolOfNode(declaration), 169 /* SetAccessor */);
+                var setter = ts.getDeclarationOfKind(getSymbolOfNode(declaration), 171 /* SetAccessor */);
                 var setterType = getAnnotatedAccessorType(setter);
                 if (setterType) {
                     return setterType;
@@ -56088,7 +57246,7 @@
             if (signatureHasRestParameter(signature)) {
                 var sigRestType = getTypeOfSymbol(signature.parameters[signature.parameters.length - 1]);
                 var restType = isTupleType(sigRestType) ? getRestTypeOfTupleType(sigRestType) : sigRestType;
-                return restType && getIndexTypeOfType(restType, 1 /* Number */);
+                return restType && getIndexTypeOfType(restType, numberType);
             }
             return undefined;
         }
@@ -56171,12 +57329,13 @@
             // will result in a different declaration kind.
             if (!signature.isolatedSignatureType) {
                 var kind = signature.declaration ? signature.declaration.kind : 0 /* Unknown */;
-                var isConstructor = kind === 167 /* Constructor */ || kind === 171 /* ConstructSignature */ || kind === 176 /* ConstructorType */;
+                var isConstructor = kind === 169 /* Constructor */ || kind === 173 /* ConstructSignature */ || kind === 178 /* ConstructorType */;
                 var type = createObjectType(16 /* Anonymous */);
                 type.members = emptySymbols;
                 type.properties = ts.emptyArray;
                 type.callSignatures = !isConstructor ? [signature] : ts.emptyArray;
                 type.constructSignatures = isConstructor ? [signature] : ts.emptyArray;
+                type.indexInfos = ts.emptyArray;
                 signature.isolatedSignatureType = type;
             }
             return signature.isolatedSignatureType;
@@ -56187,39 +57346,39 @@
         function getIndexSymbolFromSymbolTable(symbolTable) {
             return symbolTable.get("__index" /* Index */);
         }
-        function getIndexDeclarationOfSymbol(symbol, kind) {
-            var indexSymbol = symbol && getIndexSymbol(symbol);
-            return indexSymbol && getIndexDeclarationOfIndexSymbol(indexSymbol, kind);
+        function createIndexInfo(keyType, type, isReadonly, declaration) {
+            return { keyType: keyType, type: type, isReadonly: isReadonly, declaration: declaration };
         }
-        function getIndexDeclarationOfSymbolTable(symbolTable, kind) {
-            var indexSymbol = symbolTable && getIndexSymbolFromSymbolTable(symbolTable);
-            return indexSymbol && getIndexDeclarationOfIndexSymbol(indexSymbol, kind);
+        function getIndexInfosOfSymbol(symbol) {
+            var indexSymbol = getIndexSymbol(symbol);
+            return indexSymbol ? getIndexInfosOfIndexSymbol(indexSymbol) : ts.emptyArray;
         }
-        function getIndexDeclarationOfIndexSymbol(indexSymbol, kind) {
-            var syntaxKind = kind === 1 /* Number */ ? 144 /* NumberKeyword */ : 147 /* StringKeyword */;
-            if (indexSymbol === null || indexSymbol === void 0 ? void 0 : indexSymbol.declarations) {
-                for (var _i = 0, _a = indexSymbol.declarations; _i < _a.length; _i++) {
-                    var decl = _a[_i];
-                    var node = ts.cast(decl, ts.isIndexSignatureDeclaration);
-                    if (node.parameters.length === 1) {
-                        var parameter = node.parameters[0];
-                        if (parameter.type && parameter.type.kind === syntaxKind) {
-                            return node;
+        function getIndexInfosOfIndexSymbol(indexSymbol) {
+            if (indexSymbol.declarations) {
+                var indexInfos_2 = [];
+                var _loop_14 = function (declaration) {
+                    if (declaration.parameters.length === 1) {
+                        var parameter = declaration.parameters[0];
+                        if (parameter.type) {
+                            forEachType(getTypeFromTypeNode(parameter.type), function (keyType) {
+                                if (isValidIndexKeyType(keyType) && !findIndexInfo(indexInfos_2, keyType)) {
+                                    indexInfos_2.push(createIndexInfo(keyType, declaration.type ? getTypeFromTypeNode(declaration.type) : anyType, ts.hasEffectiveModifier(declaration, 64 /* Readonly */), declaration));
+                                }
+                            });
                         }
                     }
+                };
+                for (var _i = 0, _a = indexSymbol.declarations; _i < _a.length; _i++) {
+                    var declaration = _a[_i];
+                    _loop_14(declaration);
                 }
+                return indexInfos_2;
             }
-            return undefined;
+            return ts.emptyArray;
         }
-        function createIndexInfo(type, isReadonly, declaration) {
-            return { type: type, isReadonly: isReadonly, declaration: declaration };
-        }
-        function getIndexInfoOfSymbol(symbol, kind) {
-            var declaration = getIndexDeclarationOfSymbol(symbol, kind);
-            if (declaration) {
-                return createIndexInfo(declaration.type ? getTypeFromTypeNode(declaration.type) : anyType, ts.hasEffectiveModifier(declaration, 64 /* Readonly */), declaration);
-            }
-            return undefined;
+        function isValidIndexKeyType(type) {
+            return !!(type.flags & (4 /* String */ | 8 /* Number */ | 4096 /* ESSymbol */)) || isPatternLiteralType(type) ||
+                !!(type.flags & 2097152 /* Intersection */) && !isGenericIndexType(type) && !isGenericObjectType(type) && ts.some(type.types, isValidIndexKeyType);
         }
         function getConstraintDeclaration(type) {
             return ts.mapDefined(ts.filter(type.symbol && type.symbol.declarations, ts.isTypeParameterDeclaration), ts.getEffectiveConstraintOfTypeParameter)[0];
@@ -56230,13 +57389,13 @@
             if ((_a = typeParameter.symbol) === null || _a === void 0 ? void 0 : _a.declarations) {
                 for (var _i = 0, _b = typeParameter.symbol.declarations; _i < _b.length; _i++) {
                     var declaration = _b[_i];
-                    if (declaration.parent.kind === 186 /* InferType */) {
+                    if (declaration.parent.kind === 188 /* InferType */) {
                         // When an 'infer T' declaration is immediately contained in a type reference node
                         // (such as 'Foo<infer T>'), T's constraint is inferred from the constraint of the
                         // corresponding type parameter in 'Foo'. When multiple 'infer T' declarations are
                         // present, we form an intersection of the inferred constraint types.
                         var _c = ts.walkUpParenthesizedTypesAndGetParentAndChild(declaration.parent.parent), _d = _c[0], childTypeParameter = _d === void 0 ? declaration.parent : _d, grandParent = _c[1];
-                        if (grandParent.kind === 174 /* TypeReference */) {
+                        if (grandParent.kind === 176 /* TypeReference */) {
                             var typeReference = grandParent;
                             var typeParameters = getTypeParametersForTypeReference(typeReference);
                             if (typeParameters) {
@@ -56261,27 +57420,27 @@
                         }
                         // When an 'infer T' declaration is immediately contained in a rest parameter declaration, a rest type
                         // or a named rest tuple element, we infer an 'unknown[]' constraint.
-                        else if (grandParent.kind === 161 /* Parameter */ && grandParent.dotDotDotToken ||
-                            grandParent.kind === 182 /* RestType */ ||
-                            grandParent.kind === 193 /* NamedTupleMember */ && grandParent.dotDotDotToken) {
+                        else if (grandParent.kind === 162 /* Parameter */ && grandParent.dotDotDotToken ||
+                            grandParent.kind === 184 /* RestType */ ||
+                            grandParent.kind === 195 /* NamedTupleMember */ && grandParent.dotDotDotToken) {
                             inferences = ts.append(inferences, createArrayType(unknownType));
                         }
                         // When an 'infer T' declaration is immediately contained in a string template type, we infer a 'string'
                         // constraint.
-                        else if (grandParent.kind === 195 /* TemplateLiteralTypeSpan */) {
+                        else if (grandParent.kind === 197 /* TemplateLiteralTypeSpan */) {
                             inferences = ts.append(inferences, stringType);
                         }
                         // When an 'infer T' declaration is in the constraint position of a mapped type, we infer a 'keyof any'
                         // constraint.
-                        else if (grandParent.kind === 160 /* TypeParameter */ && grandParent.parent.kind === 191 /* MappedType */) {
+                        else if (grandParent.kind === 161 /* TypeParameter */ && grandParent.parent.kind === 193 /* MappedType */) {
                             inferences = ts.append(inferences, keyofConstraintType);
                         }
                         // When an 'infer T' declaration is the template of a mapped type, and that mapped type is the extends
                         // clause of a conditional whose check type is also a mapped type, give it a constraint equal to the template
                         // of the check type's mapped type
-                        else if (grandParent.kind === 191 /* MappedType */ && grandParent.type &&
-                            ts.skipParentheses(grandParent.type) === declaration.parent && grandParent.parent.kind === 185 /* ConditionalType */ &&
-                            grandParent.parent.extendsType === grandParent && grandParent.parent.checkType.kind === 191 /* MappedType */ &&
+                        else if (grandParent.kind === 193 /* MappedType */ && grandParent.type &&
+                            ts.skipParentheses(grandParent.type) === declaration.parent && grandParent.parent.kind === 187 /* ConditionalType */ &&
+                            grandParent.parent.extendsType === grandParent && grandParent.parent.checkType.kind === 193 /* MappedType */ &&
                             grandParent.parent.checkType.type) {
                             var checkMappedType_1 = grandParent.parent.checkType;
                             var nodeType = getTypeFromTypeNode(checkMappedType_1.type);
@@ -56309,7 +57468,7 @@
                         if (type.flags & 1 /* Any */ && type !== errorType) { // Allow errorType to propegate to keep downstream errors suppressed
                             // use keyofConstraintType as the base constraint for mapped type key constraints (unknown isn;t assignable to that, but `any` was),
                             // use unknown otherwise
-                            type = constraintDeclaration.parent.parent.kind === 191 /* MappedType */ ? keyofConstraintType : unknownType;
+                            type = constraintDeclaration.parent.parent.kind === 193 /* MappedType */ ? keyofConstraintType : unknownType;
                         }
                         typeParameter.constraint = type;
                     }
@@ -56318,7 +57477,7 @@
             return typeParameter.constraint === noConstraintType ? undefined : typeParameter.constraint;
         }
         function getParentSymbolOfTypeParameter(typeParameter) {
-            var tp = ts.getDeclarationOfKind(typeParameter.symbol, 160 /* TypeParameter */);
+            var tp = ts.getDeclarationOfKind(typeParameter.symbol, 161 /* TypeParameter */);
             var host = ts.isJSDocTemplateTag(tp.parent) ? ts.getHostSignatureFromJSDoc(tp.parent) : tp.parent;
             return host && getSymbolOfNode(host);
         }
@@ -56354,8 +57513,8 @@
         // that care about the presence of such types at arbitrary depth in a containing type.
         function getPropagatingFlagsOfTypes(types, excludeKinds) {
             var result = 0;
-            for (var _i = 0, types_9 = types; _i < types_9.length; _i++) {
-                var type = types_9[_i];
+            for (var _i = 0, types_8 = types; _i < types_8.length; _i++) {
+                var type = types_8[_i];
                 if (!(type.flags & excludeKinds)) {
                     result |= ts.getObjectFlags(type);
                 }
@@ -56404,8 +57563,8 @@
                 }
                 var node = type.node;
                 var typeArguments = !node ? ts.emptyArray :
-                    node.kind === 174 /* TypeReference */ ? ts.concatenate(type.target.outerTypeParameters, getEffectiveTypeArguments(node, type.target.localTypeParameters)) :
-                        node.kind === 179 /* ArrayType */ ? [getTypeFromTypeNode(node.elementType)] :
+                    node.kind === 176 /* TypeReference */ ? ts.concatenate(type.target.outerTypeParameters, getEffectiveTypeArguments(node, type.target.localTypeParameters)) :
+                        node.kind === 181 /* ArrayType */ ? [getTypeFromTypeNode(node.elementType)] :
                             ts.map(node.elements, getTypeFromTypeNode);
                 if (popTypeResolution()) {
                     type.resolvedTypeArguments = type.mapper ? instantiateTypes(typeArguments, type.mapper) : typeArguments;
@@ -56447,7 +57606,7 @@
                         return errorType;
                     }
                 }
-                if (node.kind === 174 /* TypeReference */ && isDeferredTypeReferenceNode(node, ts.length(node.typeArguments) !== typeParameters.length)) {
+                if (node.kind === 176 /* TypeReference */ && isDeferredTypeReferenceNode(node, ts.length(node.typeArguments) !== typeParameters.length)) {
                     return createDeferredTypeReference(type, node, /*mapper*/ undefined);
                 }
                 // In a type reference, the outer type parameters of the referenced class or interface are automatically
@@ -56506,9 +57665,9 @@
         }
         function getTypeReferenceName(node) {
             switch (node.kind) {
-                case 174 /* TypeReference */:
+                case 176 /* TypeReference */:
                     return node.typeName;
-                case 224 /* ExpressionWithTypeArguments */:
+                case 226 /* ExpressionWithTypeArguments */:
                     // We only support expressions that are simple qualified names. For other
                     // expressions this produces undefined.
                     var expr = node.expression;
@@ -56564,7 +57723,7 @@
                 var valueType = getTypeOfSymbol(symbol);
                 var typeType = valueType;
                 if (symbol.valueDeclaration) {
-                    var isImportTypeWithQualifier = node.kind === 196 /* ImportType */ && node.qualifier;
+                    var isImportTypeWithQualifier = node.kind === 198 /* ImportType */ && node.qualifier;
                     // valueType might not have a symbol, eg, {import('./b').STRING_LITERAL}
                     if (valueType.symbol && valueType.symbol !== symbol && isImportTypeWithQualifier) {
                         typeType = getTypeReferenceType(node, valueType.symbol);
@@ -56590,7 +57749,7 @@
             return result;
         }
         function isUnaryTupleTypeNode(node) {
-            return node.kind === 180 /* TupleType */ && node.elements.length === 1;
+            return node.kind === 182 /* TupleType */ && node.elements.length === 1;
         }
         function getImpliedConstraint(type, checkNode, extendsNode) {
             return isUnaryTupleTypeNode(checkNode) && isUnaryTupleTypeNode(extendsNode) ? getImpliedConstraint(type, checkNode.elements[0], extendsNode.elements[0]) :
@@ -56600,16 +57759,16 @@
         function getConditionalFlowTypeOfType(type, node) {
             var constraints;
             var covariant = true;
-            while (node && !ts.isStatement(node) && node.kind !== 312 /* JSDocComment */) {
+            while (node && !ts.isStatement(node) && node.kind !== 315 /* JSDocComment */) {
                 var parent = node.parent;
                 // only consider variance flipped by parameter locations - `keyof` types would usually be considered variance inverting, but
                 // often get used in indexed accesses where they behave sortof invariantly, but our checking is lax
-                if (parent.kind === 161 /* Parameter */) {
+                if (parent.kind === 162 /* Parameter */) {
                     covariant = !covariant;
                 }
                 // Always substitute on type parameters, regardless of variance, since even
                 // in contravariant positions, they may rely on substituted constraints to be valid
-                if ((covariant || type.flags & 8650752 /* TypeVariable */) && parent.kind === 185 /* ConditionalType */ && node === parent.trueType) {
+                if ((covariant || type.flags & 8650752 /* TypeVariable */) && parent.kind === 187 /* ConditionalType */ && node === parent.trueType) {
                     var constraint = getImpliedConstraint(type, parent.checkType, parent.extendsType);
                     if (constraint) {
                         constraints = ts.append(constraints, constraint);
@@ -56620,7 +57779,7 @@
             return constraints ? getSubstitutionType(type, getIntersectionType(ts.append(constraints, type))) : type;
         }
         function isJSDocTypeReference(node) {
-            return !!(node.flags & 4194304 /* JSDoc */) && (node.kind === 174 /* TypeReference */ || node.kind === 196 /* ImportType */);
+            return !!(node.flags & 4194304 /* JSDoc */) && (node.kind === 176 /* TypeReference */ || node.kind === 198 /* ImportType */);
         }
         function checkNoTypeArguments(node, symbol) {
             if (node.typeArguments) {
@@ -56664,8 +57823,8 @@
                             if (ts.isJSDocIndexSignature(node)) {
                                 var indexed = getTypeFromTypeNode(typeArgs[0]);
                                 var target = getTypeFromTypeNode(typeArgs[1]);
-                                var index = createIndexInfo(target, /*isReadonly*/ false);
-                                return createAnonymousType(undefined, emptySymbols, ts.emptyArray, ts.emptyArray, indexed === stringType ? index : undefined, indexed === numberType ? index : undefined);
+                                var indexInfo = indexed === stringType || indexed === numberType ? [createIndexInfo(indexed, target, /*isReadonly*/ false)] : ts.emptyArray;
+                                return createAnonymousType(undefined, emptySymbols, ts.emptyArray, ts.emptyArray, indexInfo);
                             }
                             return anyType;
                         }
@@ -56723,7 +57882,8 @@
                 // The expression is processed as an identifier expression (section 4.3)
                 // or property access expression(section 4.10),
                 // the widened type(section 3.9) of which becomes the result.
-                links.resolvedType = getRegularTypeOfLiteralType(getWidenedType(checkExpression(node.exprName)));
+                var type = ts.isThisIdentifier(node.exprName) ? checkThisExpression(node.exprName) : checkExpression(node.exprName);
+                links.resolvedType = getRegularTypeOfLiteralType(getWidenedType(type));
             }
             return links.resolvedType;
         }
@@ -56734,9 +57894,9 @@
                     for (var _i = 0, declarations_3 = declarations; _i < declarations_3.length; _i++) {
                         var declaration = declarations_3[_i];
                         switch (declaration.kind) {
-                            case 253 /* ClassDeclaration */:
-                            case 254 /* InterfaceDeclaration */:
-                            case 256 /* EnumDeclaration */:
+                            case 255 /* ClassDeclaration */:
+                            case 256 /* InterfaceDeclaration */:
+                            case 258 /* EnumDeclaration */:
                                 return declaration;
                         }
                     }
@@ -56779,6 +57939,20 @@
         function getGlobalImportMetaType() {
             return deferredGlobalImportMetaType || (deferredGlobalImportMetaType = getGlobalType("ImportMeta", /*arity*/ 0, /*reportErrors*/ true)) || emptyObjectType;
         }
+        function getGlobalImportMetaExpressionType() {
+            if (!deferredGlobalImportMetaExpressionType) {
+                // Create a synthetic type `ImportMetaExpression { meta: MetaProperty }`
+                var symbol = createSymbol(0 /* None */, "ImportMetaExpression");
+                var importMetaType = getGlobalImportMetaType();
+                var metaPropertySymbol = createSymbol(4 /* Property */, "meta", 8 /* Readonly */);
+                metaPropertySymbol.parent = symbol;
+                metaPropertySymbol.type = importMetaType;
+                var members = ts.createSymbolTable([metaPropertySymbol]);
+                symbol.members = members;
+                deferredGlobalImportMetaExpressionType = createAnonymousType(symbol, members, ts.emptyArray, ts.emptyArray, ts.emptyArray);
+            }
+            return deferredGlobalImportMetaExpressionType;
+        }
         function getGlobalESSymbolConstructorSymbol(reportErrors) {
             return deferredGlobalESSymbolConstructorSymbol || (deferredGlobalESSymbolConstructorSymbol = getGlobalValueSymbol("Symbol", reportErrors));
         }
@@ -56861,11 +58035,11 @@
         }
         function getTupleElementFlags(node) {
             switch (node.kind) {
-                case 181 /* OptionalType */:
+                case 183 /* OptionalType */:
                     return 2 /* Optional */;
-                case 182 /* RestType */:
+                case 184 /* RestType */:
                     return getRestTypeElementFlags(node);
-                case 193 /* NamedTupleMember */:
+                case 195 /* NamedTupleMember */:
                     return node.questionToken ? 2 /* Optional */ :
                         node.dotDotDotToken ? getRestTypeElementFlags(node) :
                             1 /* Required */;
@@ -56883,14 +58057,14 @@
                 return readonly ? globalReadonlyArrayType : globalArrayType;
             }
             var elementFlags = ts.map(node.elements, getTupleElementFlags);
-            var missingName = ts.some(node.elements, function (e) { return e.kind !== 193 /* NamedTupleMember */; });
+            var missingName = ts.some(node.elements, function (e) { return e.kind !== 195 /* NamedTupleMember */; });
             return getTupleTargetType(elementFlags, readonly, /*associatedNames*/ missingName ? undefined : node.elements);
         }
         // Return true if the given type reference node is directly aliased or if it needs to be deferred
         // because it is possibly contained in a circular chain of eagerly resolved types.
         function isDeferredTypeReferenceNode(node, hasDefaultTypeArguments) {
-            return !!getAliasSymbolForTypeNode(node) || isResolvedByTypeAlias(node) && (node.kind === 179 /* ArrayType */ ? mayResolveTypeAlias(node.elementType) :
-                node.kind === 180 /* TupleType */ ? ts.some(node.elements, mayResolveTypeAlias) :
+            return !!getAliasSymbolForTypeNode(node) || isResolvedByTypeAlias(node) && (node.kind === 181 /* ArrayType */ ? mayResolveTypeAlias(node.elementType) :
+                node.kind === 182 /* TupleType */ ? ts.some(node.elements, mayResolveTypeAlias) :
                     hasDefaultTypeArguments || ts.some(node.typeArguments, mayResolveTypeAlias));
         }
         // Return true when the given node is transitively contained in type constructs that eagerly
@@ -56899,18 +58073,18 @@
         function isResolvedByTypeAlias(node) {
             var parent = node.parent;
             switch (parent.kind) {
-                case 187 /* ParenthesizedType */:
-                case 193 /* NamedTupleMember */:
-                case 174 /* TypeReference */:
-                case 183 /* UnionType */:
-                case 184 /* IntersectionType */:
-                case 190 /* IndexedAccessType */:
-                case 185 /* ConditionalType */:
-                case 189 /* TypeOperator */:
-                case 179 /* ArrayType */:
-                case 180 /* TupleType */:
+                case 189 /* ParenthesizedType */:
+                case 195 /* NamedTupleMember */:
+                case 176 /* TypeReference */:
+                case 185 /* UnionType */:
+                case 186 /* IntersectionType */:
+                case 192 /* IndexedAccessType */:
+                case 187 /* ConditionalType */:
+                case 191 /* TypeOperator */:
+                case 181 /* ArrayType */:
+                case 182 /* TupleType */:
                     return isResolvedByTypeAlias(parent);
-                case 255 /* TypeAliasDeclaration */:
+                case 257 /* TypeAliasDeclaration */:
                     return true;
             }
             return false;
@@ -56919,28 +58093,28 @@
         // of a type alias.
         function mayResolveTypeAlias(node) {
             switch (node.kind) {
-                case 174 /* TypeReference */:
+                case 176 /* TypeReference */:
                     return isJSDocTypeReference(node) || !!(resolveTypeReferenceName(node.typeName, 788968 /* Type */).flags & 524288 /* TypeAlias */);
-                case 177 /* TypeQuery */:
+                case 179 /* TypeQuery */:
                     return true;
-                case 189 /* TypeOperator */:
-                    return node.operator !== 151 /* UniqueKeyword */ && mayResolveTypeAlias(node.type);
-                case 187 /* ParenthesizedType */:
-                case 181 /* OptionalType */:
-                case 193 /* NamedTupleMember */:
-                case 308 /* JSDocOptionalType */:
-                case 306 /* JSDocNullableType */:
-                case 307 /* JSDocNonNullableType */:
-                case 302 /* JSDocTypeExpression */:
+                case 191 /* TypeOperator */:
+                    return node.operator !== 152 /* UniqueKeyword */ && mayResolveTypeAlias(node.type);
+                case 189 /* ParenthesizedType */:
+                case 183 /* OptionalType */:
+                case 195 /* NamedTupleMember */:
+                case 311 /* JSDocOptionalType */:
+                case 309 /* JSDocNullableType */:
+                case 310 /* JSDocNonNullableType */:
+                case 304 /* JSDocTypeExpression */:
                     return mayResolveTypeAlias(node.type);
-                case 182 /* RestType */:
-                    return node.type.kind !== 179 /* ArrayType */ || mayResolveTypeAlias(node.type.elementType);
-                case 183 /* UnionType */:
-                case 184 /* IntersectionType */:
+                case 184 /* RestType */:
+                    return node.type.kind !== 181 /* ArrayType */ || mayResolveTypeAlias(node.type.elementType);
+                case 185 /* UnionType */:
+                case 186 /* IntersectionType */:
                     return ts.some(node.types, mayResolveTypeAlias);
-                case 190 /* IndexedAccessType */:
+                case 192 /* IndexedAccessType */:
                     return mayResolveTypeAlias(node.objectType) || mayResolveTypeAlias(node.indexType);
-                case 185 /* ConditionalType */:
+                case 187 /* ConditionalType */:
                     return mayResolveTypeAlias(node.checkType) || mayResolveTypeAlias(node.extendsType) ||
                         mayResolveTypeAlias(node.trueType) || mayResolveTypeAlias(node.falseType);
             }
@@ -56953,19 +58127,19 @@
                 if (target === emptyGenericType) {
                     links.resolvedType = emptyObjectType;
                 }
-                else if (!(node.kind === 180 /* TupleType */ && ts.some(node.elements, function (e) { return !!(getTupleElementFlags(e) & 8 /* Variadic */); })) && isDeferredTypeReferenceNode(node)) {
-                    links.resolvedType = node.kind === 180 /* TupleType */ && node.elements.length === 0 ? target :
+                else if (!(node.kind === 182 /* TupleType */ && ts.some(node.elements, function (e) { return !!(getTupleElementFlags(e) & 8 /* Variadic */); })) && isDeferredTypeReferenceNode(node)) {
+                    links.resolvedType = node.kind === 182 /* TupleType */ && node.elements.length === 0 ? target :
                         createDeferredTypeReference(target, node, /*mapper*/ undefined);
                 }
                 else {
-                    var elementTypes = node.kind === 179 /* ArrayType */ ? [getTypeFromTypeNode(node.elementType)] : ts.map(node.elements, getTypeFromTypeNode);
+                    var elementTypes = node.kind === 181 /* ArrayType */ ? [getTypeFromTypeNode(node.elementType)] : ts.map(node.elements, getTypeFromTypeNode);
                     links.resolvedType = createNormalizedTypeReference(target, elementTypes);
                 }
             }
             return links.resolvedType;
         }
         function isReadonlyTypeOperator(node) {
-            return ts.isTypeOperatorNode(node) && node.operator === 142 /* ReadonlyKeyword */;
+            return ts.isTypeOperatorNode(node) && node.operator === 143 /* ReadonlyKeyword */;
         }
         function createTupleType(elementTypes, elementFlags, readonly, namedMemberDeclarations) {
             if (readonly === void 0) { readonly = false; }
@@ -57021,10 +58195,10 @@
                 lengthSymbol.type = numberType;
             }
             else {
-                var literalTypes_1 = [];
+                var literalTypes = [];
                 for (var i = minLength; i <= arity; i++)
-                    literalTypes_1.push(getLiteralType(i));
-                lengthSymbol.type = getUnionType(literalTypes_1);
+                    literalTypes.push(getNumberLiteralType(i));
+                lengthSymbol.type = getUnionType(literalTypes);
             }
             properties.push(lengthSymbol);
             var type = createObjectType(8 /* Tuple */ | 4 /* Reference */);
@@ -57041,8 +58215,7 @@
             type.declaredProperties = properties;
             type.declaredCallSignatures = ts.emptyArray;
             type.declaredConstructSignatures = ts.emptyArray;
-            type.declaredStringIndexInfo = undefined;
-            type.declaredNumberIndexInfo = undefined;
+            type.declaredIndexInfos = ts.emptyArray;
             type.elementFlags = elementFlags;
             type.minLength = minLength;
             type.fixedLength = fixedLength;
@@ -57081,7 +58254,7 @@
             var lastRequiredIndex = -1;
             var firstRestIndex = -1;
             var lastOptionalOrRestIndex = -1;
-            var _loop_13 = function (i) {
+            var _loop_15 = function (i) {
                 var type = elementTypes[i];
                 var flags = target.elementFlags[i];
                 if (flags & 8 /* Variadic */) {
@@ -57102,7 +58275,7 @@
                     }
                     else {
                         // Treat everything else as an array type and create a rest element.
-                        addElement(isArrayLikeType(type) && getIndexTypeOfType(type, 1 /* Number */) || errorType, 4 /* Rest */, (_b = target.labeledElementDeclarations) === null || _b === void 0 ? void 0 : _b[i]);
+                        addElement(isArrayLikeType(type) && getIndexTypeOfType(type, numberType) || errorType, 4 /* Rest */, (_b = target.labeledElementDeclarations) === null || _b === void 0 ? void 0 : _b[i]);
                     }
                 }
                 else {
@@ -57111,7 +58284,7 @@
                 }
             };
             for (var i = 0; i < elementTypes.length; i++) {
-                var state_4 = _loop_13(i);
+                var state_4 = _loop_15(i);
                 if (typeof state_4 === "object")
                     return state_4.value;
             }
@@ -57160,7 +58333,7 @@
                 /*readonly*/ false, target.labeledElementDeclarations && target.labeledElementDeclarations.slice(index, endIndex));
         }
         function getKnownKeysOfTupleType(type) {
-            return getUnionType(ts.append(ts.arrayOf(type.target.fixedLength, function (i) { return getLiteralType("" + i); }), getIndexType(type.target.readonly ? globalReadonlyArrayType : globalArrayType)));
+            return getUnionType(ts.append(ts.arrayOf(type.target.fixedLength, function (i) { return getStringLiteralType("" + i); }), getIndexType(type.target.readonly ? globalReadonlyArrayType : globalArrayType)));
         }
         // Return count of starting consecutive tuple elements of the given kind(s)
         function getStartElementCount(type, flags) {
@@ -57172,8 +58345,7 @@
             return type.elementFlags.length - ts.findLastIndex(type.elementFlags, function (f) { return !(f & flags); }) - 1;
         }
         function getTypeFromOptionalTypeNode(node) {
-            var type = getTypeFromTypeNode(node.type);
-            return strictNullChecks ? getOptionalType(type) : type;
+            return addOptionality(getTypeFromTypeNode(node.type), /*isProperty*/ true);
         }
         function getTypeId(type) {
             return type.id;
@@ -57218,8 +58390,8 @@
         // Add the given types to the given type set. Order is preserved, duplicates are removed,
         // and nested types of the given kind are flattened into the set.
         function addTypesToUnion(typeSet, includes, types) {
-            for (var _i = 0, types_10 = types; _i < types_10.length; _i++) {
-                var type = types_10[_i];
+            for (var _i = 0, types_9 = types; _i < types_9.length; _i++) {
+                var type = types_9[_i];
                 includes = addTypeToUnion(typeSet, includes, type);
             }
             return includes;
@@ -57248,8 +58420,8 @@
                         ts.find(getPropertiesOfType(source), function (p) { return isUnitType(getTypeOfSymbol(p)); }) :
                         undefined;
                     var keyPropertyType = keyProperty && getRegularTypeOfLiteralType(getTypeOfSymbol(keyProperty));
-                    for (var _i = 0, types_11 = types; _i < types_11.length; _i++) {
-                        var target = types_11[_i];
+                    for (var _i = 0, types_10 = types; _i < types_10.length; _i++) {
+                        var target = types_10[_i];
                         if (source !== target) {
                             if (count === 100000) {
                                 // After 100000 subtype checks we estimate the remaining amount of work by assuming the
@@ -57289,7 +58461,7 @@
                 i--;
                 var t = types[i];
                 var flags = t.flags;
-                var remove = flags & 128 /* StringLiteral */ && includes & 4 /* String */ ||
+                var remove = flags & (128 /* StringLiteral */ | 134217728 /* TemplateLiteral */ | 268435456 /* StringMapping */) && includes & 4 /* String */ ||
                     flags & 256 /* NumberLiteral */ && includes & 8 /* Number */ ||
                     flags & 2048 /* BigIntLiteral */ && includes & 64 /* BigInt */ ||
                     flags & 8192 /* UniqueESSymbol */ && includes & 4096 /* ESSymbol */ ||
@@ -57304,7 +58476,7 @@
             var templates = ts.filter(types, isPatternLiteralType);
             if (templates.length) {
                 var i = types.length;
-                var _loop_14 = function () {
+                var _loop_16 = function () {
                     i--;
                     var t = types[i];
                     if (t.flags & 128 /* StringLiteral */ && ts.some(templates, function (template) { return isTypeSubtypeOf(t, template); })) {
@@ -57312,7 +58484,7 @@
                     }
                 };
                 while (i > 0) {
-                    _loop_14();
+                    _loop_16();
                 }
             }
         }
@@ -57320,8 +58492,8 @@
             return !!(type.flags & 1048576 /* Union */ && (type.aliasSymbol || type.origin));
         }
         function addNamedUnions(namedUnions, types) {
-            for (var _i = 0, types_12 = types; _i < types_12.length; _i++) {
-                var t = types_12[_i];
+            for (var _i = 0, types_11 = types; _i < types_11.length; _i++) {
+                var t = types_11[_i];
                 if (t.flags & 1048576 /* Union */) {
                     var origin = t.origin;
                     if (t.aliasSymbol || origin && !(origin.flags & 1048576 /* Union */)) {
@@ -57359,7 +58531,13 @@
                 if (includes & 3 /* AnyOrUnknown */) {
                     return includes & 1 /* Any */ ? includes & 8388608 /* IncludesWildcard */ ? wildcardType : anyType : unknownType;
                 }
-                if (includes & (2944 /* Literal */ | 8192 /* UniqueESSymbol */) || includes & 16384 /* Void */ && includes & 32768 /* Undefined */) {
+                if (exactOptionalPropertyTypes && includes & 32768 /* Undefined */) {
+                    var missingIndex = ts.binarySearch(typeSet, missingType, getTypeId, ts.compareValues);
+                    if (missingIndex >= 0 && containsType(typeSet, undefinedType)) {
+                        ts.orderedRemoveItemAt(typeSet, missingIndex);
+                    }
+                }
+                if (includes & (2944 /* Literal */ | 8192 /* UniqueESSymbol */ | 134217728 /* TemplateLiteral */ | 268435456 /* StringMapping */) || includes & 16384 /* Void */ && includes & 32768 /* Undefined */) {
                     removeRedundantLiteralTypes(typeSet, includes, !!(unionReduction & 2 /* Subtype */));
                 }
                 if (includes & 128 /* StringLiteral */ && includes & 134217728 /* TemplateLiteral */) {
@@ -57381,14 +58559,14 @@
                 var namedUnions = [];
                 addNamedUnions(namedUnions, types);
                 var reducedTypes = [];
-                var _loop_15 = function (t) {
+                var _loop_17 = function (t) {
                     if (!ts.some(namedUnions, function (union) { return containsType(union.types, t); })) {
                         reducedTypes.push(t);
                     }
                 };
                 for (var _i = 0, typeSet_1 = typeSet; _i < typeSet_1.length; _i++) {
                     var t = typeSet_1[_i];
-                    _loop_15(t);
+                    _loop_17(t);
                 }
                 if (!aliasSymbol && namedUnions.length === 1 && reducedTypes.length === 0) {
                     return namedUnions[0];
@@ -57405,7 +58583,7 @@
                 }
             }
             var objectFlags = (includes & 468598819 /* NotPrimitiveUnion */ ? 0 : 65536 /* PrimitiveUnion */) |
-                (includes & 2097152 /* Intersection */ ? 67108864 /* ContainsIntersections */ : 0);
+                (includes & 2097152 /* Intersection */ ? 33554432 /* ContainsIntersections */ : 0);
             return getUnionTypeFromSortedList(typeSet, objectFlags, aliasSymbol, aliasTypeArguments, origin);
         }
         function getUnionOrIntersectionTypePredicate(signatures, kind) {
@@ -57443,15 +58621,6 @@
         function typePredicateKindsMatch(a, b) {
             return a.kind === b.kind && a.parameterIndex === b.parameterIndex;
         }
-        function createUnionType(types, aliasSymbol, aliasTypeArguments, origin) {
-            var result = createType(1048576 /* Union */);
-            result.objectFlags = getPropagatingFlagsOfTypes(types, /*excludeKinds*/ 98304 /* Nullable */);
-            result.types = types;
-            result.origin = origin;
-            result.aliasSymbol = aliasSymbol;
-            result.aliasTypeArguments = aliasTypeArguments;
-            return result;
-        }
         // This function assumes the constituent type list is sorted and deduplicated.
         function getUnionTypeFromSortedList(types, objectFlags, aliasSymbol, aliasTypeArguments, origin) {
             if (types.length === 0) {
@@ -57467,8 +58636,16 @@
             var id = typeKey + getAliasId(aliasSymbol, aliasTypeArguments);
             var type = unionTypes.get(id);
             if (!type) {
-                type = createUnionType(types, aliasSymbol, aliasTypeArguments, origin);
-                type.objectFlags |= objectFlags;
+                type = createType(1048576 /* Union */);
+                type.objectFlags = objectFlags | getPropagatingFlagsOfTypes(types, /*excludeKinds*/ 98304 /* Nullable */);
+                type.types = types;
+                type.origin = origin;
+                type.aliasSymbol = aliasSymbol;
+                type.aliasTypeArguments = aliasTypeArguments;
+                if (types.length === 2 && types[0].flags & 512 /* BooleanLiteral */ && types[1].flags & 512 /* BooleanLiteral */) {
+                    type.flags |= 16 /* Boolean */;
+                    type.intrinsicName = "boolean";
+                }
                 unionTypes.set(id, type);
             }
             return type;
@@ -57512,8 +58689,8 @@
         // Add the given types to the given type set. Order is preserved, freshness is removed from literal
         // types, duplicates are removed, and nested types of the given kind are flattened into the set.
         function addTypesToIntersection(typeSet, includes, types) {
-            for (var _i = 0, types_13 = types; _i < types_13.length; _i++) {
-                var type = types_13[_i];
+            for (var _i = 0, types_12 = types; _i < types_12.length; _i++) {
+                var type = types_12[_i];
                 includes = addTypeToIntersection(typeSet, includes, getRegularTypeOfLiteralType(type));
             }
             return includes;
@@ -57662,8 +58839,10 @@
             // a symbol-like type and a type known to be non-symbol-like, or
             // a void-like type and a type known to be non-void-like, or
             // a non-primitive type and a type known to be primitive.
-            if (includes & 131072 /* Never */ ||
-                strictNullChecks && includes & 98304 /* Nullable */ && includes & (524288 /* Object */ | 67108864 /* NonPrimitive */ | 16777216 /* IncludesEmptyObject */) ||
+            if (includes & 131072 /* Never */) {
+                return ts.contains(typeSet, silentNeverType) ? silentNeverType : neverType;
+            }
+            if (strictNullChecks && includes & 98304 /* Nullable */ && includes & (524288 /* Object */ | 67108864 /* NonPrimitive */ | 16777216 /* IncludesEmptyObject */) ||
                 includes & 67108864 /* NonPrimitive */ && includes & (469892092 /* DisjointDomains */ & ~67108864 /* NonPrimitive */) ||
                 includes & 402653316 /* StringLike */ && includes & (469892092 /* DisjointDomains */ & ~402653316 /* StringLike */) ||
                 includes & 296 /* NumberLike */ && includes & (469892092 /* DisjointDomains */ & ~296 /* NumberLike */) ||
@@ -57803,40 +58982,37 @@
                 constraint;
         }
         // Ordinarily we reduce a keyof M, where M is a mapped type { [P in K as N<P>]: X }, to simply N<K>. This however presumes
-        // that N distributes over union types, i.e. that N<A | B | C> is equivalent to N<A> | N<B> | N<C>. That presumption may not
-        // be true when N is a non-distributive conditional type or an instantiable type with a non-distributive conditional type as
-        // a constituent. In those cases, we cannot reduce keyof M and need to preserve it as is.
-        function maybeNonDistributiveNameType(type) {
-            return !!(type && (type.flags & 16777216 /* Conditional */ && (!type.root.isDistributive || maybeNonDistributiveNameType(type.checkType)) ||
-                type.flags & (3145728 /* UnionOrIntersection */ | 134217728 /* TemplateLiteral */) && ts.some(type.types, maybeNonDistributiveNameType) ||
-                type.flags & (4194304 /* Index */ | 268435456 /* StringMapping */) && maybeNonDistributiveNameType(type.type) ||
-                type.flags & 8388608 /* IndexedAccess */ && maybeNonDistributiveNameType(type.indexType) ||
-                type.flags & 33554432 /* Substitution */ && maybeNonDistributiveNameType(type.substitute)));
+        // that N distributes over union types, i.e. that N<A | B | C> is equivalent to N<A> | N<B> | N<C>. Specifically, we only
+        // want to perform the reduction when the name type of a mapped type is distributive with respect to the type variable
+        // introduced by the 'in' clause of the mapped type. Note that non-generic types are considered to be distributive because
+        // they're the same type regardless of what's being distributed over.
+        function hasDistributiveNameType(mappedType) {
+            var typeVariable = getTypeParameterFromMappedType(mappedType);
+            return isDistributive(getNameTypeFromMappedType(mappedType) || typeVariable);
+            function isDistributive(type) {
+                return type.flags & (3 /* AnyOrUnknown */ | 131068 /* Primitive */ | 131072 /* Never */ | 262144 /* TypeParameter */ | 524288 /* Object */ | 67108864 /* NonPrimitive */) ? true :
+                    type.flags & 16777216 /* Conditional */ ? type.root.isDistributive && type.checkType === typeVariable :
+                        type.flags & (3145728 /* UnionOrIntersection */ | 134217728 /* TemplateLiteral */) ? ts.every(type.types, isDistributive) :
+                            type.flags & 8388608 /* IndexedAccess */ ? isDistributive(type.objectType) && isDistributive(type.indexType) :
+                                type.flags & 33554432 /* Substitution */ ? isDistributive(type.substitute) :
+                                    type.flags & 268435456 /* StringMapping */ ? isDistributive(type.type) :
+                                        false;
+            }
         }
         function getLiteralTypeFromPropertyName(name) {
             if (ts.isPrivateIdentifier(name)) {
                 return neverType;
             }
-            return ts.isIdentifier(name) ? getLiteralType(ts.unescapeLeadingUnderscores(name.escapedText)) :
+            return ts.isIdentifier(name) ? getStringLiteralType(ts.unescapeLeadingUnderscores(name.escapedText)) :
                 getRegularTypeOfLiteralType(ts.isComputedPropertyName(name) ? checkComputedPropertyName(name) : checkExpression(name));
         }
-        function getBigIntLiteralType(node) {
-            return getLiteralType({
-                negative: false,
-                base10Value: ts.parsePseudoBigInt(node.text)
-            });
-        }
-        function getLiteralTypeFromProperty(prop, include) {
-            if (!(ts.getDeclarationModifierFlagsFromSymbol(prop) & 24 /* NonPublicAccessibilityModifier */)) {
+        function getLiteralTypeFromProperty(prop, include, includeNonPublic) {
+            if (includeNonPublic || !(ts.getDeclarationModifierFlagsFromSymbol(prop) & 24 /* NonPublicAccessibilityModifier */)) {
                 var type = getSymbolLinks(getLateBoundSymbol(prop)).nameType;
                 if (!type) {
-                    if (prop.escapedName === "default" /* Default */) {
-                        type = getLiteralType("default");
-                    }
-                    else {
-                        var name = prop.valueDeclaration && ts.getNameOfDeclaration(prop.valueDeclaration);
-                        type = name && getLiteralTypeFromPropertyName(name) || (!ts.isKnownSymbol(prop) ? getLiteralType(ts.symbolName(prop)) : undefined);
-                    }
+                    var name = ts.getNameOfDeclaration(prop.valueDeclaration);
+                    type = prop.escapedName === "default" /* Default */ ? getStringLiteralType("default") :
+                        name && getLiteralTypeFromPropertyName(name) || (!ts.isKnownSymbol(prop) ? getStringLiteralType(ts.symbolName(prop)) : undefined);
                 }
                 if (type && type.flags & include) {
                     return type;
@@ -57846,28 +59022,23 @@
         }
         function getLiteralTypeFromProperties(type, include, includeOrigin) {
             var origin = includeOrigin && (ts.getObjectFlags(type) & (3 /* ClassOrInterface */ | 4 /* Reference */) || type.aliasSymbol) ? createOriginIndexType(type) : undefined;
-            return getUnionType(ts.map(getPropertiesOfType(type), function (p) { return getLiteralTypeFromProperty(p, include); }), 1 /* Literal */, 
+            var propertyTypes = ts.map(getPropertiesOfType(type), function (prop) { return getLiteralTypeFromProperty(prop, include); });
+            var indexKeyTypes = ts.map(getIndexInfosOfType(type), function (info) { return info !== enumNumberIndexInfo && info.keyType.flags & include ?
+                info.keyType === stringType && include & 8 /* Number */ ? stringOrNumberType : info.keyType : neverType; });
+            return getUnionType(ts.concatenate(propertyTypes, indexKeyTypes), 1 /* Literal */, 
             /*aliasSymbol*/ undefined, /*aliasTypeArguments*/ undefined, origin);
         }
-        function getNonEnumNumberIndexInfo(type) {
-            var numberIndexInfo = getIndexInfoOfType(type, 1 /* Number */);
-            return numberIndexInfo !== enumNumberIndexInfo ? numberIndexInfo : undefined;
-        }
         function getIndexType(type, stringsOnly, noIndexSignatures) {
             if (stringsOnly === void 0) { stringsOnly = keyofStringsOnly; }
-            var includeOrigin = stringsOnly === keyofStringsOnly && !noIndexSignatures;
             type = getReducedType(type);
             return type.flags & 1048576 /* Union */ ? getIntersectionType(ts.map(type.types, function (t) { return getIndexType(t, stringsOnly, noIndexSignatures); })) :
                 type.flags & 2097152 /* Intersection */ ? getUnionType(ts.map(type.types, function (t) { return getIndexType(t, stringsOnly, noIndexSignatures); })) :
-                    type.flags & 58982400 /* InstantiableNonPrimitive */ || isGenericTupleType(type) || isGenericMappedType(type) && maybeNonDistributiveNameType(getNameTypeFromMappedType(type)) ? getIndexTypeForGenericType(type, stringsOnly) :
+                    type.flags & 58982400 /* InstantiableNonPrimitive */ || isGenericTupleType(type) || isGenericMappedType(type) && !hasDistributiveNameType(type) ? getIndexTypeForGenericType(type, stringsOnly) :
                         ts.getObjectFlags(type) & 32 /* Mapped */ ? getIndexTypeForMappedType(type, noIndexSignatures) :
                             type === wildcardType ? wildcardType :
                                 type.flags & 2 /* Unknown */ ? neverType :
                                     type.flags & (1 /* Any */ | 131072 /* Never */) ? keyofConstraintType :
-                                        stringsOnly ? !noIndexSignatures && getIndexInfoOfType(type, 0 /* String */) ? stringType : getLiteralTypeFromProperties(type, 128 /* StringLiteral */, includeOrigin) :
-                                            !noIndexSignatures && getIndexInfoOfType(type, 0 /* String */) ? getUnionType([stringType, numberType, getLiteralTypeFromProperties(type, 8192 /* UniqueESSymbol */, includeOrigin)]) :
-                                                getNonEnumNumberIndexInfo(type) ? getUnionType([numberType, getLiteralTypeFromProperties(type, 128 /* StringLiteral */ | 8192 /* UniqueESSymbol */, includeOrigin)]) :
-                                                    getLiteralTypeFromProperties(type, 8576 /* StringOrNumberLiteralOrUnique */, includeOrigin);
+                                        getLiteralTypeFromProperties(type, (noIndexSignatures ? 128 /* StringLiteral */ : 402653316 /* StringLike */) | (stringsOnly ? 0 : 296 /* NumberLike */ | 12288 /* ESSymbolLike */), stringsOnly === keyofStringsOnly && !noIndexSignatures);
         }
         function getExtractStringType(type) {
             if (keyofStringsOnly) {
@@ -57884,15 +59055,15 @@
             var links = getNodeLinks(node);
             if (!links.resolvedType) {
                 switch (node.operator) {
-                    case 138 /* KeyOfKeyword */:
+                    case 139 /* KeyOfKeyword */:
                         links.resolvedType = getIndexType(getTypeFromTypeNode(node.type));
                         break;
-                    case 151 /* UniqueKeyword */:
-                        links.resolvedType = node.type.kind === 148 /* SymbolKeyword */
+                    case 152 /* UniqueKeyword */:
+                        links.resolvedType = node.type.kind === 149 /* SymbolKeyword */
                             ? getESSymbolLikeTypeForNode(ts.walkUpParenthesizedTypes(node.parent))
                             : errorType;
                         break;
-                    case 142 /* ReadonlyKeyword */:
+                    case 143 /* ReadonlyKeyword */:
                         links.resolvedType = getTypeFromTypeNode(node.type);
                         break;
                     default:
@@ -57904,7 +59075,7 @@
         function getTypeFromTemplateTypeNode(node) {
             var links = getNodeLinks(node);
             if (!links.resolvedType) {
-                links.resolvedType = getTemplateLiteralType(__spreadArray([node.head.text], ts.map(node.templateSpans, function (span) { return span.literal.text; })), ts.map(node.templateSpans, function (span) { return getTypeFromTypeNode(span.type); }));
+                links.resolvedType = getTemplateLiteralType(__spreadArray([node.head.text], ts.map(node.templateSpans, function (span) { return span.literal.text; }), true), ts.map(node.templateSpans, function (span) { return getTypeFromTypeNode(span.type); }));
             }
             return links.resolvedType;
         }
@@ -57925,7 +59096,7 @@
                 return stringType;
             }
             if (newTypes.length === 0) {
-                return getLiteralType(text);
+                return getStringLiteralType(text);
             }
             newTexts.push(text);
             if (ts.every(newTexts, function (t) { return t === ""; }) && ts.every(newTypes, function (t) { return !!(t.flags & 4 /* String */); })) {
@@ -57978,7 +59149,7 @@
         function getStringMappingType(symbol, type) {
             return type.flags & (1048576 /* Union */ | 131072 /* Never */) ? mapType(type, function (t) { return getStringMappingType(symbol, t); }) :
                 isGenericIndexType(type) ? getStringMappingTypeForGenericType(symbol, type) :
-                    type.flags & 128 /* StringLiteral */ ? getLiteralType(applyStringMapping(symbol, type.value)) :
+                    type.flags & 128 /* StringLiteral */ ? getStringLiteralType(applyStringMapping(symbol, type.value)) :
                         type;
         }
         function applyStringMapping(symbol, str) {
@@ -58004,13 +59175,13 @@
             result.type = type;
             return result;
         }
-        function createIndexedAccessType(objectType, indexType, aliasSymbol, aliasTypeArguments, shouldIncludeUndefined) {
+        function createIndexedAccessType(objectType, indexType, accessFlags, aliasSymbol, aliasTypeArguments) {
             var type = createType(8388608 /* IndexedAccess */);
             type.objectType = objectType;
             type.indexType = indexType;
+            type.accessFlags = accessFlags;
             type.aliasSymbol = aliasSymbol;
             type.aliasTypeArguments = aliasTypeArguments;
-            type.noUncheckedIndexedAccessCandidate = shouldIncludeUndefined;
             return type;
         }
         /**
@@ -58059,14 +59230,17 @@
             }
             return true;
         }
-        function getPropertyTypeForIndexType(originalObjectType, objectType, indexType, fullIndexType, suppressNoImplicitAnyError, accessNode, accessFlags, noUncheckedIndexedAccessCandidate, reportDeprecated) {
+        function getPropertyTypeForIndexType(originalObjectType, objectType, indexType, fullIndexType, accessNode, accessFlags) {
             var _a;
-            var accessExpression = accessNode && accessNode.kind === 203 /* ElementAccessExpression */ ? accessNode : undefined;
+            var accessExpression = accessNode && accessNode.kind === 205 /* ElementAccessExpression */ ? accessNode : undefined;
             var propName = accessNode && ts.isPrivateIdentifier(accessNode) ? undefined : getPropertyNameFromIndex(indexType, accessNode);
             if (propName !== undefined) {
+                if (accessFlags & 256 /* Contextual */) {
+                    return getTypeOfPropertyOfContextualType(objectType, propName) || anyType;
+                }
                 var prop = getPropertyOfType(objectType, propName);
                 if (prop) {
-                    if (reportDeprecated && accessNode && prop.declarations && getDeclarationNodeFlagsFromSymbol(prop) & 134217728 /* Deprecated */ && isUncalledFunctionReference(accessNode, prop)) {
+                    if (accessFlags & 64 /* ReportDeprecated */ && accessNode && prop.declarations && getDeclarationNodeFlagsFromSymbol(prop) & 134217728 /* Deprecated */ && isUncalledFunctionReference(accessNode, prop)) {
                         var deprecatedNode = (_a = accessExpression === null || accessExpression === void 0 ? void 0 : accessExpression.argumentExpression) !== null && _a !== void 0 ? _a : (ts.isIndexedAccessTypeNode(accessNode) ? accessNode.indexType : accessNode);
                         addDeprecatedSuggestion(deprecatedNode, prop.declarations, propName);
                     }
@@ -58076,7 +59250,7 @@
                             error(accessExpression.argumentExpression, ts.Diagnostics.Cannot_assign_to_0_because_it_is_a_read_only_property, symbolToString(prop));
                             return undefined;
                         }
-                        if (accessFlags & 4 /* CacheSymbol */) {
+                        if (accessFlags & 8 /* CacheSymbol */) {
                             getNodeLinks(accessNode).resolvedSymbol = prop;
                         }
                         if (isThisPropertyAccessInConstructor(accessExpression, prop)) {
@@ -58089,7 +59263,7 @@
                         propType;
                 }
                 if (everyType(objectType, isTupleType) && isNumericLiteralName(propName) && +propName >= 0) {
-                    if (accessNode && everyType(objectType, function (t) { return !t.target.hasRestElement; }) && !(accessFlags & 8 /* NoTupleBoundsCheck */)) {
+                    if (accessNode && everyType(objectType, function (t) { return !t.target.hasRestElement; }) && !(accessFlags & 16 /* NoTupleBoundsCheck */)) {
                         var indexNode = getIndexNodeForAccessExpression(accessNode);
                         if (isTupleType(objectType)) {
                             error(indexNode, ts.Diagnostics.Tuple_type_0_of_length_1_has_no_element_at_index_2, typeToString(objectType), getTypeReferenceArity(objectType), ts.unescapeLeadingUnderscores(propName));
@@ -58098,10 +59272,10 @@
                             error(indexNode, ts.Diagnostics.Property_0_does_not_exist_on_type_1, ts.unescapeLeadingUnderscores(propName), typeToString(objectType));
                         }
                     }
-                    errorIfWritingToReadonlyIndex(getIndexInfoOfType(objectType, 1 /* Number */));
+                    errorIfWritingToReadonlyIndex(getIndexInfoOfType(objectType, numberType));
                     return mapType(objectType, function (t) {
                         var restType = getRestTypeOfTupleType(t) || undefinedType;
-                        return noUncheckedIndexedAccessCandidate ? getUnionType([restType, undefinedType]) : restType;
+                        return accessFlags & 1 /* IncludeUndefined */ ? getUnionType([restType, undefinedType]) : restType;
                     });
                 }
             }
@@ -58109,22 +59283,23 @@
                 if (objectType.flags & (1 /* Any */ | 131072 /* Never */)) {
                     return objectType;
                 }
-                var stringIndexInfo = getIndexInfoOfType(objectType, 0 /* String */);
-                var indexInfo = isTypeAssignableToKind(indexType, 296 /* NumberLike */) && getIndexInfoOfType(objectType, 1 /* Number */) || stringIndexInfo;
+                // If no index signature is applicable, we default to the string index signature. In effect, this means the string
+                // index signature applies even when accessing with a symbol-like type.
+                var indexInfo = getApplicableIndexInfo(objectType, indexType) || getIndexInfoOfType(objectType, stringType);
                 if (indexInfo) {
-                    if (accessFlags & 1 /* NoIndexSignatures */ && indexInfo === stringIndexInfo) {
+                    if (accessFlags & 2 /* NoIndexSignatures */ && indexInfo.keyType !== numberType) {
                         if (accessExpression) {
                             error(accessExpression, ts.Diagnostics.Type_0_cannot_be_used_to_index_type_1, typeToString(indexType), typeToString(originalObjectType));
                         }
                         return undefined;
                     }
-                    if (accessNode && !isTypeAssignableToKind(indexType, 4 /* String */ | 8 /* Number */)) {
+                    if (accessNode && indexInfo.keyType === stringType && !isTypeAssignableToKind(indexType, 4 /* String */ | 8 /* Number */)) {
                         var indexNode = getIndexNodeForAccessExpression(accessNode);
                         error(indexNode, ts.Diagnostics.Type_0_cannot_be_used_as_an_index_type, typeToString(indexType));
-                        return noUncheckedIndexedAccessCandidate ? getUnionType([indexInfo.type, undefinedType]) : indexInfo.type;
+                        return accessFlags & 1 /* IncludeUndefined */ ? getUnionType([indexInfo.type, undefinedType]) : indexInfo.type;
                     }
                     errorIfWritingToReadonlyIndex(indexInfo);
-                    return noUncheckedIndexedAccessCandidate ? getUnionType([indexInfo.type, undefinedType]) : indexInfo.type;
+                    return accessFlags & 1 /* IncludeUndefined */ ? getUnionType([indexInfo.type, undefinedType]) : indexInfo.type;
                 }
                 if (indexType.flags & 131072 /* Never */) {
                     return neverType;
@@ -58148,12 +59323,12 @@
                     if (objectType.symbol === globalThisSymbol && propName !== undefined && globalThisSymbol.exports.has(propName) && (globalThisSymbol.exports.get(propName).flags & 418 /* BlockScoped */)) {
                         error(accessExpression, ts.Diagnostics.Property_0_does_not_exist_on_type_1, ts.unescapeLeadingUnderscores(propName), typeToString(objectType));
                     }
-                    else if (noImplicitAny && !compilerOptions.suppressImplicitAnyIndexErrors && !suppressNoImplicitAnyError) {
+                    else if (noImplicitAny && !compilerOptions.suppressImplicitAnyIndexErrors && !(accessFlags & 128 /* SuppressNoImplicitAnyError */)) {
                         if (propName !== undefined && typeHasStaticProperty(propName, objectType)) {
                             var typeName = typeToString(objectType);
                             error(accessExpression, ts.Diagnostics.Property_0_does_not_exist_on_type_1_Did_you_mean_to_access_the_static_member_2_instead, propName, typeName, typeName + "[" + ts.getTextOfNode(accessExpression.argumentExpression) + "]");
                         }
-                        else if (getIndexTypeOfType(objectType, 1 /* Number */)) {
+                        else if (getIndexTypeOfType(objectType, numberType)) {
                             error(accessExpression.argumentExpression, ts.Diagnostics.Element_implicitly_has_an_any_type_because_index_expression_is_not_of_type_number);
                         }
                         else {
@@ -58221,9 +59396,9 @@
             }
         }
         function getIndexNodeForAccessExpression(accessNode) {
-            return accessNode.kind === 203 /* ElementAccessExpression */ ? accessNode.argumentExpression :
-                accessNode.kind === 190 /* IndexedAccessType */ ? accessNode.indexType :
-                    accessNode.kind === 159 /* ComputedPropertyName */ ? accessNode.expression :
+            return accessNode.kind === 205 /* ElementAccessExpression */ ? accessNode.argumentExpression :
+                accessNode.kind === 192 /* IndexedAccessType */ ? accessNode.indexType :
+                    accessNode.kind === 160 /* ComputedPropertyName */ ? accessNode.expression :
                         accessNode;
         }
         function isPatternLiteralPlaceholderType(type) {
@@ -58232,39 +59407,32 @@
         function isPatternLiteralType(type) {
             return !!(type.flags & 134217728 /* TemplateLiteral */) && ts.every(type.types, isPatternLiteralPlaceholderType);
         }
+        function isGenericType(type) {
+            return !!getGenericObjectFlags(type);
+        }
         function isGenericObjectType(type) {
-            if (type.flags & 3145728 /* UnionOrIntersection */) {
-                if (!(type.objectFlags & 4194304 /* IsGenericObjectTypeComputed */)) {
-                    type.objectFlags |= 4194304 /* IsGenericObjectTypeComputed */ |
-                        (ts.some(type.types, isGenericObjectType) ? 8388608 /* IsGenericObjectType */ : 0);
-                }
-                return !!(type.objectFlags & 8388608 /* IsGenericObjectType */);
-            }
-            if (type.flags & 33554432 /* Substitution */) {
-                if (!(type.objectFlags & 4194304 /* IsGenericObjectTypeComputed */)) {
-                    type.objectFlags |= 4194304 /* IsGenericObjectTypeComputed */ |
-                        (isGenericObjectType(type.substitute) || isGenericObjectType(type.baseType) ? 8388608 /* IsGenericObjectType */ : 0);
-                }
-                return !!(type.objectFlags & 8388608 /* IsGenericObjectType */);
-            }
-            return !!(type.flags & 58982400 /* InstantiableNonPrimitive */) || isGenericMappedType(type) || isGenericTupleType(type);
+            return !!(getGenericObjectFlags(type) & 8388608 /* IsGenericObjectType */);
         }
         function isGenericIndexType(type) {
+            return !!(getGenericObjectFlags(type) & 16777216 /* IsGenericIndexType */);
+        }
+        function getGenericObjectFlags(type) {
             if (type.flags & 3145728 /* UnionOrIntersection */) {
-                if (!(type.objectFlags & 16777216 /* IsGenericIndexTypeComputed */)) {
-                    type.objectFlags |= 16777216 /* IsGenericIndexTypeComputed */ |
-                        (ts.some(type.types, isGenericIndexType) ? 33554432 /* IsGenericIndexType */ : 0);
+                if (!(type.objectFlags & 4194304 /* IsGenericTypeComputed */)) {
+                    type.objectFlags |= 4194304 /* IsGenericTypeComputed */ |
+                        ts.reduceLeft(type.types, function (flags, t) { return flags | getGenericObjectFlags(t); }, 0);
                 }
-                return !!(type.objectFlags & 33554432 /* IsGenericIndexType */);
+                return type.objectFlags & 25165824 /* IsGenericType */;
             }
             if (type.flags & 33554432 /* Substitution */) {
-                if (!(type.objectFlags & 16777216 /* IsGenericIndexTypeComputed */)) {
-                    type.objectFlags |= 16777216 /* IsGenericIndexTypeComputed */ |
-                        (isGenericIndexType(type.substitute) || isGenericIndexType(type.baseType) ? 33554432 /* IsGenericIndexType */ : 0);
+                if (!(type.objectFlags & 4194304 /* IsGenericTypeComputed */)) {
+                    type.objectFlags |= 4194304 /* IsGenericTypeComputed */ |
+                        getGenericObjectFlags(type.substitute) | getGenericObjectFlags(type.baseType);
                 }
-                return !!(type.objectFlags & 33554432 /* IsGenericIndexType */);
+                return type.objectFlags & 25165824 /* IsGenericType */;
             }
-            return !!(type.flags & (58982400 /* InstantiableNonPrimitive */ | 4194304 /* Index */ | 134217728 /* TemplateLiteral */ | 268435456 /* StringMapping */)) && !isPatternLiteralType(type);
+            return (type.flags & 58982400 /* InstantiableNonPrimitive */ || isGenericMappedType(type) || isGenericTupleType(type) ? 8388608 /* IsGenericObjectType */ : 0) |
+                (type.flags & (58982400 /* InstantiableNonPrimitive */ | 4194304 /* Index */ | 134217728 /* TemplateLiteral */ | 268435456 /* StringMapping */) && !isPatternLiteralType(type) ? 16777216 /* IsGenericIndexType */ : 0);
         }
         function isThisTypeParameter(type) {
             return !!(type.flags & 262144 /* TypeParameter */ && type.isThisType);
@@ -58380,9 +59548,9 @@
             var templateMapper = combineTypeMappers(objectType.mapper, mapper);
             return instantiateType(getTemplateTypeFromMappedType(objectType), templateMapper);
         }
-        function getIndexedAccessType(objectType, indexType, noUncheckedIndexedAccessCandidate, accessNode, aliasSymbol, aliasTypeArguments, accessFlags) {
+        function getIndexedAccessType(objectType, indexType, accessFlags, accessNode, aliasSymbol, aliasTypeArguments) {
             if (accessFlags === void 0) { accessFlags = 0 /* None */; }
-            return getIndexedAccessTypeOrUndefined(objectType, indexType, noUncheckedIndexedAccessCandidate, accessNode, accessFlags, aliasSymbol, aliasTypeArguments) || (accessNode ? errorType : unknownType);
+            return getIndexedAccessTypeOrUndefined(objectType, indexType, accessFlags, accessNode, aliasSymbol, aliasTypeArguments) || (accessNode ? errorType : unknownType);
         }
         function indexTypeLessThan(indexType, limit) {
             return everyType(indexType, function (t) {
@@ -58396,36 +59564,38 @@
                 return false;
             });
         }
-        function getIndexedAccessTypeOrUndefined(objectType, indexType, noUncheckedIndexedAccessCandidate, accessNode, accessFlags, aliasSymbol, aliasTypeArguments) {
+        function getIndexedAccessTypeOrUndefined(objectType, indexType, accessFlags, accessNode, aliasSymbol, aliasTypeArguments) {
             if (accessFlags === void 0) { accessFlags = 0 /* None */; }
             if (objectType === wildcardType || indexType === wildcardType) {
                 return wildcardType;
             }
-            var shouldIncludeUndefined = noUncheckedIndexedAccessCandidate ||
-                (!!compilerOptions.noUncheckedIndexedAccess &&
-                    (accessFlags & (2 /* Writing */ | 16 /* ExpressionPosition */)) === 16 /* ExpressionPosition */);
             // If the object type has a string index signature and no other members we know that the result will
             // always be the type of that index signature and we can simplify accordingly.
             if (isStringIndexSignatureOnlyType(objectType) && !(indexType.flags & 98304 /* Nullable */) && isTypeAssignableToKind(indexType, 4 /* String */ | 8 /* Number */)) {
                 indexType = stringType;
             }
+            // In noUncheckedIndexedAccess mode, indexed access operations that occur in an expression in a read position and resolve to
+            // an index signature have 'undefined' included in their type.
+            if (compilerOptions.noUncheckedIndexedAccess && accessFlags & 32 /* ExpressionPosition */)
+                accessFlags |= 1 /* IncludeUndefined */;
             // If the index type is generic, or if the object type is generic and doesn't originate in an expression and
             // the operation isn't exclusively indexing the fixed (non-variadic) portion of a tuple type, we are performing
             // a higher-order index access where we cannot meaningfully access the properties of the object type. Note that
             // for a generic T and a non-generic K, we eagerly resolve T[K] if it originates in an expression. This is to
             // preserve backwards compatibility. For example, an element access 'this["foo"]' has always been resolved
             // eagerly using the constraint type of 'this' at the given location.
-            if (isGenericIndexType(indexType) || (accessNode && accessNode.kind !== 190 /* IndexedAccessType */ ?
+            if (isGenericIndexType(indexType) || (accessNode && accessNode.kind !== 192 /* IndexedAccessType */ ?
                 isGenericTupleType(objectType) && !indexTypeLessThan(indexType, objectType.target.fixedLength) :
                 isGenericObjectType(objectType) && !(isTupleType(objectType) && indexTypeLessThan(indexType, objectType.target.fixedLength)))) {
                 if (objectType.flags & 3 /* AnyOrUnknown */) {
                     return objectType;
                 }
                 // Defer the operation by creating an indexed access type.
-                var id = objectType.id + "," + indexType.id + (shouldIncludeUndefined ? "?" : "") + getAliasId(aliasSymbol, aliasTypeArguments);
+                var persistentAccessFlags = accessFlags & 1 /* Persistent */;
+                var id = objectType.id + "," + indexType.id + "," + persistentAccessFlags + getAliasId(aliasSymbol, aliasTypeArguments);
                 var type = indexedAccessTypes.get(id);
                 if (!type) {
-                    indexedAccessTypes.set(id, type = createIndexedAccessType(objectType, indexType, aliasSymbol, aliasTypeArguments, shouldIncludeUndefined));
+                    indexedAccessTypes.set(id, type = createIndexedAccessType(objectType, indexType, persistentAccessFlags, aliasSymbol, aliasTypeArguments));
                 }
                 return type;
             }
@@ -58438,7 +59608,7 @@
                 var wasMissingProp = false;
                 for (var _i = 0, _a = indexType.types; _i < _a.length; _i++) {
                     var t = _a[_i];
-                    var propType = getPropertyTypeForIndexType(objectType, apparentObjectType, t, indexType, wasMissingProp, accessNode, accessFlags, shouldIncludeUndefined);
+                    var propType = getPropertyTypeForIndexType(objectType, apparentObjectType, t, indexType, accessNode, accessFlags | (wasMissingProp ? 128 /* SuppressNoImplicitAnyError */ : 0));
                     if (propType) {
                         propTypes.push(propType);
                     }
@@ -58454,11 +59624,11 @@
                 if (wasMissingProp) {
                     return undefined;
                 }
-                return accessFlags & 2 /* Writing */
+                return accessFlags & 4 /* Writing */
                     ? getIntersectionType(propTypes, aliasSymbol, aliasTypeArguments)
                     : getUnionType(propTypes, 1 /* Literal */, aliasSymbol, aliasTypeArguments);
             }
-            return getPropertyTypeForIndexType(objectType, apparentObjectType, indexType, indexType, /* supressNoImplicitAnyError */ false, accessNode, accessFlags | 4 /* CacheSymbol */, shouldIncludeUndefined, /* reportDeprecated */ true);
+            return getPropertyTypeForIndexType(objectType, apparentObjectType, indexType, indexType, accessNode, accessFlags | 8 /* CacheSymbol */ | 64 /* ReportDeprecated */);
         }
         function getTypeFromIndexedAccessTypeNode(node) {
             var links = getNodeLinks(node);
@@ -58466,7 +59636,7 @@
                 var objectType = getTypeFromTypeNode(node.objectType);
                 var indexType = getTypeFromTypeNode(node.indexType);
                 var potentialAlias = getAliasSymbolForTypeNode(node);
-                var resolved = getIndexedAccessType(objectType, indexType, /*noUncheckedIndexedAccessCandidate*/ undefined, node, potentialAlias, getTypeArgumentsForAliasSymbol(potentialAlias));
+                var resolved = getIndexedAccessType(objectType, indexType, 0 /* None */, node, potentialAlias, getTypeArgumentsForAliasSymbol(potentialAlias));
                 links.resolvedType = resolved.flags & 8388608 /* IndexedAccess */ &&
                     resolved.objectType === objectType &&
                     resolved.indexType === indexType ?
@@ -58499,11 +59669,10 @@
             return type;
         }
         function isTypicalNondistributiveConditional(root) {
-            return !root.isDistributive
-                && root.node.checkType.kind === 180 /* TupleType */
-                && ts.length(root.node.checkType.elements) === 1
-                && root.node.extendsType.kind === 180 /* TupleType */
-                && ts.length(root.node.extendsType.elements) === 1;
+            return !root.isDistributive && isSingletonTupleType(root.node.checkType) && isSingletonTupleType(root.node.extendsType);
+        }
+        function isSingletonTupleType(node) {
+            return ts.isTupleTypeNode(node) && ts.length(node.elements) === 1 && !ts.isOptionalTypeNode(node.elements[0]) && !ts.isRestTypeNode(node.elements[0]);
         }
         /**
          * We syntactually check for common nondistributive conditional shapes and unwrap them into
@@ -58518,11 +59687,11 @@
             var extraTypes;
             // We loop here for an immediately nested conditional type in the false position, effectively treating
             // types of the form 'A extends B ? X : C extends D ? Y : E extends F ? Z : ...' as a single construct for
-            // purposes of resolution. This means such types aren't subject to the instatiation depth limiter.
+            // purposes of resolution. This means such types aren't subject to the instantiation depth limiter.
             while (true) {
                 var isUnwrapped = isTypicalNondistributiveConditional(root);
                 var checkType = instantiateType(unwrapNondistributiveConditionalTuple(root, getActualTypeVariable(root.checkType)), mapper);
-                var checkTypeInstantiable = isGenericObjectType(checkType) || isGenericIndexType(checkType);
+                var checkTypeInstantiable = isGenericType(checkType);
                 var extendsType = instantiateType(unwrapNondistributiveConditionalTuple(root, root.extendsType), mapper);
                 if (checkType === wildcardType || extendsType === wildcardType) {
                     return wildcardType;
@@ -58544,7 +59713,7 @@
                 // Instantiate the extends type including inferences for 'infer T' type parameters
                 var inferredExtendsType = combinedMapper ? instantiateType(unwrapNondistributiveConditionalTuple(root, root.extendsType), combinedMapper) : extendsType;
                 // We attempt to resolve the conditional type only when the check and extends types are non-generic
-                if (!checkTypeInstantiable && !isGenericObjectType(inferredExtendsType) && !isGenericIndexType(inferredExtendsType)) {
+                if (!checkTypeInstantiable && !isGenericType(inferredExtendsType)) {
                     // Return falseType for a definitely false extends check. We check an instantiations of the two
                     // types with type parameters mapped to the wildcard type, the most permissive instantiations
                     // possible (the wildcard type is assignable to and from all types). If those are not related,
@@ -58744,7 +59913,7 @@
         }
         function getAliasSymbolForTypeNode(node) {
             var host = node.parent;
-            while (ts.isParenthesizedTypeNode(host) || ts.isJSDocTypeExpression(host) || ts.isTypeOperatorNode(host) && host.operator === 142 /* ReadonlyKeyword */) {
+            while (ts.isParenthesizedTypeNode(host) || ts.isJSDocTypeExpression(host) || ts.isTypeOperatorNode(host) && host.operator === 143 /* ReadonlyKeyword */) {
                 host = host.parent;
             }
             return ts.isTypeAlias(host) ? getSymbolOfNode(host) : undefined;
@@ -58759,16 +59928,19 @@
             return isEmptyObjectType(type) || !!(type.flags & (65536 /* Null */ | 32768 /* Undefined */ | 528 /* BooleanLike */ | 296 /* NumberLike */ | 2112 /* BigIntLike */ | 402653316 /* StringLike */ | 1056 /* EnumLike */ | 67108864 /* NonPrimitive */ | 4194304 /* Index */));
         }
         function tryMergeUnionOfObjectTypeAndEmptyObject(type, readonly) {
+            if (!(type.flags & 1048576 /* Union */)) {
+                return type;
+            }
             if (ts.every(type.types, isEmptyObjectTypeOrSpreadsIntoEmptyObject)) {
                 return ts.find(type.types, isEmptyObjectType) || emptyObjectType;
             }
             var firstType = ts.find(type.types, function (t) { return !isEmptyObjectTypeOrSpreadsIntoEmptyObject(t); });
             if (!firstType) {
-                return undefined;
+                return type;
             }
-            var secondType = firstType && ts.find(type.types, function (t) { return t !== firstType && !isEmptyObjectTypeOrSpreadsIntoEmptyObject(t); });
+            var secondType = ts.find(type.types, function (t) { return t !== firstType && !isEmptyObjectTypeOrSpreadsIntoEmptyObject(t); });
             if (secondType) {
-                return undefined;
+                return type;
             }
             return getAnonymousPartialType(firstType);
             function getAnonymousPartialType(type) {
@@ -58783,14 +59955,14 @@
                         var isSetonlyAccessor = prop.flags & 65536 /* SetAccessor */ && !(prop.flags & 32768 /* GetAccessor */);
                         var flags = 4 /* Property */ | 16777216 /* Optional */;
                         var result = createSymbol(flags, prop.escapedName, getIsLateCheckFlag(prop) | (readonly ? 8 /* Readonly */ : 0));
-                        result.type = isSetonlyAccessor ? undefinedType : getUnionType([getTypeOfSymbol(prop), undefinedType]);
+                        result.type = isSetonlyAccessor ? undefinedType : addOptionality(getTypeOfSymbol(prop), /*isProperty*/ true);
                         result.declarations = prop.declarations;
                         result.nameType = getSymbolLinks(prop).nameType;
                         result.syntheticOrigin = prop;
                         members.set(prop.escapedName, result);
                     }
                 }
-                var spread = createAnonymousType(type.symbol, members, ts.emptyArray, ts.emptyArray, getIndexInfoOfType(type, 0 /* String */), getIndexInfoOfType(type, 1 /* Number */));
+                var spread = createAnonymousType(type.symbol, members, ts.emptyArray, ts.emptyArray, getIndexInfosOfType(type));
                 spread.objectFlags |= 128 /* ObjectLiteral */ | 262144 /* ContainsObjectOrArrayLiteral */;
                 return spread;
             }
@@ -58813,20 +59985,14 @@
             if (right.flags & 131072 /* Never */) {
                 return left;
             }
+            left = tryMergeUnionOfObjectTypeAndEmptyObject(left, readonly);
             if (left.flags & 1048576 /* Union */) {
-                var merged = tryMergeUnionOfObjectTypeAndEmptyObject(left, readonly);
-                if (merged) {
-                    return getSpreadType(merged, right, symbol, objectFlags, readonly);
-                }
                 return checkCrossProductUnion([left, right])
                     ? mapType(left, function (t) { return getSpreadType(t, right, symbol, objectFlags, readonly); })
                     : errorType;
             }
+            right = tryMergeUnionOfObjectTypeAndEmptyObject(right, readonly);
             if (right.flags & 1048576 /* Union */) {
-                var merged = tryMergeUnionOfObjectTypeAndEmptyObject(right, readonly);
-                if (merged) {
-                    return getSpreadType(left, merged, symbol, objectFlags, readonly);
-                }
                 return checkCrossProductUnion([left, right])
                     ? mapType(right, function (t) { return getSpreadType(left, t, symbol, objectFlags, readonly); })
                     : errorType;
@@ -58852,17 +60018,7 @@
             }
             var members = ts.createSymbolTable();
             var skippedPrivateMembers = new ts.Set();
-            var stringIndexInfo;
-            var numberIndexInfo;
-            if (left === emptyObjectType) {
-                // for the first spread element, left === emptyObjectType, so take the right's string indexer
-                stringIndexInfo = getIndexInfoOfType(right, 0 /* String */);
-                numberIndexInfo = getIndexInfoOfType(right, 1 /* Number */);
-            }
-            else {
-                stringIndexInfo = unionSpreadIndexInfos(getIndexInfoOfType(left, 0 /* String */), getIndexInfoOfType(right, 0 /* String */));
-                numberIndexInfo = unionSpreadIndexInfos(getIndexInfoOfType(left, 1 /* Number */), getIndexInfoOfType(right, 1 /* Number */));
-            }
+            var indexInfos = left === emptyObjectType ? getIndexInfosOfType(right) : getUnionIndexInfos([left, right]);
             for (var _i = 0, _a = getPropertiesOfType(right); _i < _a.length; _i++) {
                 var rightProp = _a[_i];
                 if (ts.getDeclarationModifierFlagsFromSymbol(rightProp) & (8 /* Private */ | 16 /* Protected */)) {
@@ -58884,7 +60040,7 @@
                         var declarations = ts.concatenate(leftProp.declarations, rightProp.declarations);
                         var flags = 4 /* Property */ | (leftProp.flags & 16777216 /* Optional */);
                         var result = createSymbol(flags, leftProp.escapedName);
-                        result.type = getUnionType([getTypeOfSymbol(leftProp), getTypeWithFacts(rightType, 524288 /* NEUndefined */)]);
+                        result.type = getUnionType([getTypeOfSymbol(leftProp), removeMissingOrUndefinedType(rightType)]);
                         result.leftSpread = leftProp;
                         result.rightSpread = rightProp;
                         result.declarations = declarations;
@@ -58896,7 +60052,7 @@
                     members.set(leftProp.escapedName, getSpreadSymbol(leftProp, readonly));
                 }
             }
-            var spread = createAnonymousType(symbol, members, ts.emptyArray, ts.emptyArray, getIndexInfoWithReadonly(stringIndexInfo, readonly), getIndexInfoWithReadonly(numberIndexInfo, readonly));
+            var spread = createAnonymousType(symbol, members, ts.emptyArray, ts.emptyArray, ts.sameMap(indexInfos, function (info) { return getIndexInfoWithReadonly(info, readonly); }));
             spread.objectFlags |= 128 /* ObjectLiteral */ | 262144 /* ContainsObjectOrArrayLiteral */ | 4194304 /* ContainsSpread */ | objectFlags;
             return spread;
         }
@@ -58921,19 +60077,19 @@
             return result;
         }
         function getIndexInfoWithReadonly(info, readonly) {
-            return info && info.isReadonly !== readonly ? createIndexInfo(info.type, readonly, info.declaration) : info;
+            return info.isReadonly !== readonly ? createIndexInfo(info.keyType, info.type, readonly, info.declaration) : info;
         }
-        function createLiteralType(flags, value, symbol) {
+        function createLiteralType(flags, value, symbol, regularType) {
             var type = createType(flags);
             type.symbol = symbol;
             type.value = value;
+            type.regularType = regularType || type;
             return type;
         }
         function getFreshTypeOfLiteralType(type) {
             if (type.flags & 2944 /* Literal */) {
                 if (!type.freshType) {
-                    var freshType = createLiteralType(type.flags, type.value, type.symbol);
-                    freshType.regularType = type;
+                    var freshType = createLiteralType(type.flags, type.value, type.symbol, type);
                     freshType.freshType = freshType;
                     type.freshType = freshType;
                 }
@@ -58949,25 +60105,32 @@
         function isFreshLiteralType(type) {
             return !!(type.flags & 2944 /* Literal */) && type.freshType === type;
         }
-        function getLiteralType(value, enumId, symbol) {
-            // We store all literal types in a single map with keys of the form '#NNN' and '@SSS',
-            // where NNN is the text representation of a numeric literal and SSS are the characters
-            // of a string literal. For literal enum members we use 'EEE#NNN' and 'EEE@SSS', where
-            // EEE is a unique id for the containing enum type.
-            var qualifier = typeof value === "number" ? "#" : typeof value === "string" ? "@" : "n";
-            var key = (enumId ? enumId : "") + qualifier + (typeof value === "object" ? ts.pseudoBigIntToString(value) : value);
-            var type = literalTypes.get(key);
-            if (!type) {
-                var flags = (typeof value === "number" ? 256 /* NumberLiteral */ :
-                    typeof value === "string" ? 128 /* StringLiteral */ : 2048 /* BigIntLiteral */) |
-                    (enumId ? 1024 /* EnumLiteral */ : 0);
-                literalTypes.set(key, type = createLiteralType(flags, value, symbol));
-                type.regularType = type;
-            }
-            return type;
+        function getStringLiteralType(value) {
+            var type;
+            return stringLiteralTypes.get(value) ||
+                (stringLiteralTypes.set(value, type = createLiteralType(128 /* StringLiteral */, value)), type);
+        }
+        function getNumberLiteralType(value) {
+            var type;
+            return numberLiteralTypes.get(value) ||
+                (numberLiteralTypes.set(value, type = createLiteralType(256 /* NumberLiteral */, value)), type);
+        }
+        function getBigIntLiteralType(value) {
+            var type;
+            var key = ts.pseudoBigIntToString(value);
+            return bigIntLiteralTypes.get(key) ||
+                (bigIntLiteralTypes.set(key, type = createLiteralType(2048 /* BigIntLiteral */, value)), type);
+        }
+        function getEnumLiteralType(value, enumId, symbol) {
+            var type;
+            var qualifier = typeof value === "string" ? "@" : "#";
+            var key = enumId + qualifier + value;
+            var flags = 1024 /* EnumLiteral */ | (typeof value === "string" ? 128 /* StringLiteral */ : 256 /* NumberLiteral */);
+            return enumLiteralTypes.get(key) ||
+                (enumLiteralTypes.set(key, type = createLiteralType(flags, value, symbol)), type);
         }
         function getTypeFromLiteralTypeNode(node) {
-            if (node.literal.kind === 103 /* NullKeyword */) {
+            if (node.literal.kind === 104 /* NullKeyword */) {
                 return nullType;
             }
             var links = getNodeLinks(node);
@@ -58993,8 +60156,8 @@
         function getThisType(node) {
             var container = ts.getThisContainer(node, /*includeArrowFunctions*/ false);
             var parent = container && container.parent;
-            if (parent && (ts.isClassLike(parent) || parent.kind === 254 /* InterfaceDeclaration */)) {
-                if (!ts.hasSyntacticModifier(container, 32 /* Static */) &&
+            if (parent && (ts.isClassLike(parent) || parent.kind === 256 /* InterfaceDeclaration */)) {
+                if (!ts.isStatic(container) &&
                     (!ts.isConstructorDeclaration(container) || ts.isNodeDescendantOf(node, container.body))) {
                     return getDeclaredTypeOfClassOrInterface(getSymbolOfNode(parent)).thisType;
                 }
@@ -59028,17 +60191,17 @@
         }
         function getArrayElementTypeNode(node) {
             switch (node.kind) {
-                case 187 /* ParenthesizedType */:
+                case 189 /* ParenthesizedType */:
                     return getArrayElementTypeNode(node.type);
-                case 180 /* TupleType */:
+                case 182 /* TupleType */:
                     if (node.elements.length === 1) {
                         node = node.elements[0];
-                        if (node.kind === 182 /* RestType */ || node.kind === 193 /* NamedTupleMember */ && node.dotDotDotToken) {
+                        if (node.kind === 184 /* RestType */ || node.kind === 195 /* NamedTupleMember */ && node.dotDotDotToken) {
                             return getArrayElementTypeNode(node.type);
                         }
                     }
                     break;
-                case 179 /* ArrayType */:
+                case 181 /* ArrayType */:
                     return node.elementType;
             }
             return undefined;
@@ -59047,107 +60210,106 @@
             var links = getNodeLinks(node);
             return links.resolvedType || (links.resolvedType =
                 node.dotDotDotToken ? getTypeFromRestTypeNode(node) :
-                    node.questionToken && strictNullChecks ? getOptionalType(getTypeFromTypeNode(node.type)) :
-                        getTypeFromTypeNode(node.type));
+                    addOptionality(getTypeFromTypeNode(node.type), /*isProperty*/ true, !!node.questionToken));
         }
         function getTypeFromTypeNode(node) {
             return getConditionalFlowTypeOfType(getTypeFromTypeNodeWorker(node), node);
         }
         function getTypeFromTypeNodeWorker(node) {
             switch (node.kind) {
-                case 128 /* AnyKeyword */:
-                case 304 /* JSDocAllType */:
-                case 305 /* JSDocUnknownType */:
+                case 129 /* AnyKeyword */:
+                case 307 /* JSDocAllType */:
+                case 308 /* JSDocUnknownType */:
                     return anyType;
-                case 152 /* UnknownKeyword */:
+                case 153 /* UnknownKeyword */:
                     return unknownType;
-                case 147 /* StringKeyword */:
+                case 148 /* StringKeyword */:
                     return stringType;
-                case 144 /* NumberKeyword */:
+                case 145 /* NumberKeyword */:
                     return numberType;
-                case 155 /* BigIntKeyword */:
+                case 156 /* BigIntKeyword */:
                     return bigintType;
-                case 131 /* BooleanKeyword */:
+                case 132 /* BooleanKeyword */:
                     return booleanType;
-                case 148 /* SymbolKeyword */:
+                case 149 /* SymbolKeyword */:
                     return esSymbolType;
-                case 113 /* VoidKeyword */:
+                case 114 /* VoidKeyword */:
                     return voidType;
-                case 150 /* UndefinedKeyword */:
+                case 151 /* UndefinedKeyword */:
                     return undefinedType;
-                case 103 /* NullKeyword */:
+                case 104 /* NullKeyword */:
                     // TODO(rbuckton): `NullKeyword` is no longer a `TypeNode`, but we defensively allow it here because of incorrect casts in the Language Service.
                     return nullType;
-                case 141 /* NeverKeyword */:
+                case 142 /* NeverKeyword */:
                     return neverType;
-                case 145 /* ObjectKeyword */:
+                case 146 /* ObjectKeyword */:
                     return node.flags & 131072 /* JavaScriptFile */ && !noImplicitAny ? anyType : nonPrimitiveType;
-                case 136 /* IntrinsicKeyword */:
+                case 137 /* IntrinsicKeyword */:
                     return intrinsicMarkerType;
-                case 188 /* ThisType */:
-                case 107 /* ThisKeyword */:
+                case 190 /* ThisType */:
+                case 108 /* ThisKeyword */:
                     // TODO(rbuckton): `ThisKeyword` is no longer a `TypeNode`, but we defensively allow it here because of incorrect casts in the Language Service and because of `isPartOfTypeNode`.
                     return getTypeFromThisTypeNode(node);
-                case 192 /* LiteralType */:
+                case 194 /* LiteralType */:
                     return getTypeFromLiteralTypeNode(node);
-                case 174 /* TypeReference */:
+                case 176 /* TypeReference */:
                     return getTypeFromTypeReference(node);
-                case 173 /* TypePredicate */:
+                case 175 /* TypePredicate */:
                     return node.assertsModifier ? voidType : booleanType;
-                case 224 /* ExpressionWithTypeArguments */:
+                case 226 /* ExpressionWithTypeArguments */:
                     return getTypeFromTypeReference(node);
-                case 177 /* TypeQuery */:
+                case 179 /* TypeQuery */:
                     return getTypeFromTypeQueryNode(node);
-                case 179 /* ArrayType */:
-                case 180 /* TupleType */:
+                case 181 /* ArrayType */:
+                case 182 /* TupleType */:
                     return getTypeFromArrayOrTupleTypeNode(node);
-                case 181 /* OptionalType */:
+                case 183 /* OptionalType */:
                     return getTypeFromOptionalTypeNode(node);
-                case 183 /* UnionType */:
+                case 185 /* UnionType */:
                     return getTypeFromUnionTypeNode(node);
-                case 184 /* IntersectionType */:
+                case 186 /* IntersectionType */:
                     return getTypeFromIntersectionTypeNode(node);
-                case 306 /* JSDocNullableType */:
+                case 309 /* JSDocNullableType */:
                     return getTypeFromJSDocNullableTypeNode(node);
-                case 308 /* JSDocOptionalType */:
+                case 311 /* JSDocOptionalType */:
                     return addOptionality(getTypeFromTypeNode(node.type));
-                case 193 /* NamedTupleMember */:
+                case 195 /* NamedTupleMember */:
                     return getTypeFromNamedTupleTypeNode(node);
-                case 187 /* ParenthesizedType */:
-                case 307 /* JSDocNonNullableType */:
-                case 302 /* JSDocTypeExpression */:
+                case 189 /* ParenthesizedType */:
+                case 310 /* JSDocNonNullableType */:
+                case 304 /* JSDocTypeExpression */:
                     return getTypeFromTypeNode(node.type);
-                case 182 /* RestType */:
+                case 184 /* RestType */:
                     return getTypeFromRestTypeNode(node);
-                case 310 /* JSDocVariadicType */:
+                case 313 /* JSDocVariadicType */:
                     return getTypeFromJSDocVariadicType(node);
-                case 175 /* FunctionType */:
-                case 176 /* ConstructorType */:
-                case 178 /* TypeLiteral */:
-                case 314 /* JSDocTypeLiteral */:
-                case 309 /* JSDocFunctionType */:
-                case 315 /* JSDocSignature */:
+                case 177 /* FunctionType */:
+                case 178 /* ConstructorType */:
+                case 180 /* TypeLiteral */:
+                case 317 /* JSDocTypeLiteral */:
+                case 312 /* JSDocFunctionType */:
+                case 318 /* JSDocSignature */:
                     return getTypeFromTypeLiteralOrFunctionOrConstructorTypeNode(node);
-                case 189 /* TypeOperator */:
+                case 191 /* TypeOperator */:
                     return getTypeFromTypeOperatorNode(node);
-                case 190 /* IndexedAccessType */:
+                case 192 /* IndexedAccessType */:
                     return getTypeFromIndexedAccessTypeNode(node);
-                case 191 /* MappedType */:
+                case 193 /* MappedType */:
                     return getTypeFromMappedTypeNode(node);
-                case 185 /* ConditionalType */:
+                case 187 /* ConditionalType */:
                     return getTypeFromConditionalTypeNode(node);
-                case 186 /* InferType */:
+                case 188 /* InferType */:
                     return getTypeFromInferTypeNode(node);
-                case 194 /* TemplateLiteralType */:
+                case 196 /* TemplateLiteralType */:
                     return getTypeFromTemplateTypeNode(node);
-                case 196 /* ImportType */:
+                case 198 /* ImportType */:
                     return getTypeFromImportTypeNode(node);
                 // This function assumes that an identifier, qualified name, or property access expression is a type expression
                 // Callers should first ensure this by calling `isPartOfTypeNode`
                 // TODO(rbuckton): These aren't valid TypeNodes, but we treat them as such because of `isPartOfTypeNode`, which returns `true` for things that aren't `TypeNode`s.
-                case 78 /* Identifier */:
-                case 158 /* QualifiedName */:
-                case 202 /* PropertyAccessExpression */:
+                case 79 /* Identifier */:
+                case 159 /* QualifiedName */:
+                case 204 /* PropertyAccessExpression */:
                     var symbol = getSymbolAtLocation(node);
                     return symbol ? getDeclaredTypeOfSymbol(symbol) : errorType;
                 default:
@@ -59177,6 +60339,9 @@
         function instantiateSignatures(signatures, mapper) {
             return instantiateList(signatures, mapper, instantiateSignature);
         }
+        function instantiateIndexInfos(indexInfos, mapper) {
+            return instantiateList(indexInfos, mapper, instantiateIndexInfo);
+        }
         function createTypeMapper(sources, targets) {
             return sources.length === 1 ? makeUnaryTypeMapper(sources[0], targets ? targets[0] : anyType) : makeArrayTypeMapper(sources, targets);
         }
@@ -59349,8 +60514,8 @@
             return type;
         }
         function maybeTypeParameterReference(node) {
-            return !(node.parent.kind === 174 /* TypeReference */ && node.parent.typeArguments && node === node.parent.typeName ||
-                node.parent.kind === 196 /* ImportType */ && node.parent.typeArguments && node === node.parent.qualifier);
+            return !(node.parent.kind === 176 /* TypeReference */ && node.parent.typeArguments && node === node.parent.typeName ||
+                node.parent.kind === 198 /* ImportType */ && node.parent.typeArguments && node === node.parent.qualifier);
         }
         function isTypeParameterPossiblyReferenced(tp, node) {
             // If the type parameter doesn't have exactly one declaration, if there are invening statement blocks
@@ -59359,7 +60524,7 @@
             if (tp.symbol && tp.symbol.declarations && tp.symbol.declarations.length === 1) {
                 var container = tp.symbol.declarations[0].parent;
                 for (var n = node; n !== container; n = n.parent) {
-                    if (!n || n.kind === 231 /* Block */ || n.kind === 185 /* ConditionalType */ && ts.forEachChild(n.extendsType, containsReference)) {
+                    if (!n || n.kind === 233 /* Block */ || n.kind === 187 /* ConditionalType */ && ts.forEachChild(n.extendsType, containsReference)) {
                         return true;
                     }
                 }
@@ -59368,15 +60533,15 @@
             return true;
             function containsReference(node) {
                 switch (node.kind) {
-                    case 188 /* ThisType */:
+                    case 190 /* ThisType */:
                         return !!tp.isThisType;
-                    case 78 /* Identifier */:
+                    case 79 /* Identifier */:
                         return !tp.isThisType && ts.isPartOfTypeNode(node) && maybeTypeParameterReference(node) &&
                             getTypeFromTypeNodeWorker(node) === tp; // use worker because we're looking for === equality
-                    case 177 /* TypeQuery */:
+                    case 179 /* TypeQuery */:
                         return true;
-                    case 166 /* MethodDeclaration */:
-                    case 165 /* MethodSignature */:
+                    case 167 /* MethodDeclaration */:
+                    case 166 /* MethodSignature */:
                         return !node.type && !!node.body ||
                             ts.some(node.typeParameters, containsReference) ||
                             ts.some(node.parameters, containsReference) ||
@@ -59459,7 +60624,7 @@
         function instantiateMappedTupleType(tupleType, mappedType, mapper) {
             var elementFlags = tupleType.target.elementFlags;
             var elementTypes = ts.map(getTypeArguments(tupleType), function (_, i) {
-                return instantiateMappedTypeTemplate(mappedType, getLiteralType("" + i), !!(elementFlags[i] & 2 /* Optional */), mapper);
+                return instantiateMappedTypeTemplate(mappedType, getStringLiteralType("" + i), !!(elementFlags[i] & 2 /* Optional */), mapper);
             });
             var modifiers = getMappedTypeModifiers(mappedType);
             var newTupleModifiers = modifiers & 4 /* IncludeOptional */ ? ts.map(elementFlags, function (f) { return f & 1 /* Required */ ? 2 /* Optional */ : f; }) :
@@ -59473,7 +60638,7 @@
             var templateMapper = appendTypeMapping(mapper, getTypeParameterFromMappedType(type), key);
             var propType = instantiateType(getTemplateTypeFromMappedType(type.target || type), templateMapper);
             var modifiers = getMappedTypeModifiers(type);
-            return strictNullChecks && modifiers & 4 /* IncludeOptional */ && !maybeTypeOfKind(propType, 32768 /* Undefined */ | 16384 /* Void */) ? getOptionalType(propType) :
+            return strictNullChecks && modifiers & 4 /* IncludeOptional */ && !maybeTypeOfKind(propType, 32768 /* Undefined */ | 16384 /* Void */) ? getOptionalType(propType, /*isProperty*/ true) :
                 strictNullChecks && modifiers & 8 /* ExcludeOptional */ && isOptional ? getTypeWithFacts(propType, 524288 /* NEUndefined */) :
                     propType;
         }
@@ -59592,7 +60757,7 @@
             if (flags & 8388608 /* IndexedAccess */) {
                 var newAliasSymbol = aliasSymbol || type.aliasSymbol;
                 var newAliasTypeArguments = aliasSymbol ? aliasTypeArguments : instantiateTypes(type.aliasTypeArguments, mapper);
-                return getIndexedAccessType(instantiateType(type.objectType, mapper), instantiateType(type.indexType, mapper), type.noUncheckedIndexedAccessCandidate, /*accessNode*/ undefined, newAliasSymbol, newAliasTypeArguments);
+                return getIndexedAccessType(instantiateType(type.objectType, mapper), instantiateType(type.indexType, mapper), type.accessFlags, /*accessNode*/ undefined, newAliasSymbol, newAliasTypeArguments);
             }
             if (flags & 16777216 /* Conditional */) {
                 return getConditionalTypeInstantiation(type, combineTypeMappers(type.mapper, mapper), aliasSymbol, aliasTypeArguments);
@@ -59648,40 +60813,40 @@
             return type.restrictiveInstantiation;
         }
         function instantiateIndexInfo(info, mapper) {
-            return info && createIndexInfo(instantiateType(info.type, mapper), info.isReadonly, info.declaration);
+            return createIndexInfo(info.keyType, instantiateType(info.type, mapper), info.isReadonly, info.declaration);
         }
         // Returns true if the given expression contains (at any level of nesting) a function or arrow expression
         // that is subject to contextual typing.
         function isContextSensitive(node) {
-            ts.Debug.assert(node.kind !== 166 /* MethodDeclaration */ || ts.isObjectLiteralMethod(node));
+            ts.Debug.assert(node.kind !== 167 /* MethodDeclaration */ || ts.isObjectLiteralMethod(node));
             switch (node.kind) {
-                case 209 /* FunctionExpression */:
-                case 210 /* ArrowFunction */:
-                case 166 /* MethodDeclaration */:
-                case 252 /* FunctionDeclaration */: // Function declarations can have context when annotated with a jsdoc @type
+                case 211 /* FunctionExpression */:
+                case 212 /* ArrowFunction */:
+                case 167 /* MethodDeclaration */:
+                case 254 /* FunctionDeclaration */: // Function declarations can have context when annotated with a jsdoc @type
                     return isContextSensitiveFunctionLikeDeclaration(node);
-                case 201 /* ObjectLiteralExpression */:
+                case 203 /* ObjectLiteralExpression */:
                     return ts.some(node.properties, isContextSensitive);
-                case 200 /* ArrayLiteralExpression */:
+                case 202 /* ArrayLiteralExpression */:
                     return ts.some(node.elements, isContextSensitive);
-                case 218 /* ConditionalExpression */:
+                case 220 /* ConditionalExpression */:
                     return isContextSensitive(node.whenTrue) ||
                         isContextSensitive(node.whenFalse);
-                case 217 /* BinaryExpression */:
+                case 219 /* BinaryExpression */:
                     return (node.operatorToken.kind === 56 /* BarBarToken */ || node.operatorToken.kind === 60 /* QuestionQuestionToken */) &&
                         (isContextSensitive(node.left) || isContextSensitive(node.right));
-                case 289 /* PropertyAssignment */:
+                case 291 /* PropertyAssignment */:
                     return isContextSensitive(node.initializer);
-                case 208 /* ParenthesizedExpression */:
+                case 210 /* ParenthesizedExpression */:
                     return isContextSensitive(node.expression);
-                case 282 /* JsxAttributes */:
+                case 284 /* JsxAttributes */:
                     return ts.some(node.properties, isContextSensitive) || ts.isJsxOpeningElement(node.parent) && ts.some(node.parent.parent.children, isContextSensitive);
-                case 281 /* JsxAttribute */: {
+                case 283 /* JsxAttribute */: {
                     // If there is no initializer, JSX attribute has a boolean value of true which is not context sensitive.
                     var initializer = node.initializer;
                     return !!initializer && isContextSensitive(initializer);
                 }
-                case 284 /* JsxExpression */: {
+                case 286 /* JsxExpression */: {
                     // It is possible to that node.expression is undefined (e.g <div x={} />)
                     var expression = node.expression;
                     return !!expression && isContextSensitive(expression);
@@ -59691,29 +60856,11 @@
         }
         function isContextSensitiveFunctionLikeDeclaration(node) {
             return (!ts.isFunctionDeclaration(node) || ts.isInJSFile(node) && !!getTypeForDeclarationFromJSDocComment(node)) &&
-                (hasContextSensitiveParameters(node) || hasContextSensitiveReturnExpression(node));
-        }
-        function hasContextSensitiveParameters(node) {
-            // Functions with type parameters are not context sensitive.
-            if (!node.typeParameters) {
-                // Functions with any parameters that lack type annotations are context sensitive.
-                if (ts.some(node.parameters, function (p) { return !ts.getEffectiveTypeAnnotationNode(p); })) {
-                    return true;
-                }
-                if (node.kind !== 210 /* ArrowFunction */) {
-                    // If the first parameter is not an explicit 'this' parameter, then the function has
-                    // an implicit 'this' parameter which is subject to contextual typing.
-                    var parameter = ts.firstOrUndefined(node.parameters);
-                    if (!(parameter && ts.parameterIsThisKeyword(parameter))) {
-                        return true;
-                    }
-                }
-            }
-            return false;
+                (ts.hasContextSensitiveParameters(node) || hasContextSensitiveReturnExpression(node));
         }
         function hasContextSensitiveReturnExpression(node) {
             // TODO(anhans): A block should be context-sensitive if it has a context-sensitive return value.
-            return !node.typeParameters && !ts.getEffectiveReturnTypeNode(node) && !!node.body && node.body.kind !== 231 /* Block */ && isContextSensitive(node.body);
+            return !node.typeParameters && !ts.getEffectiveReturnTypeNode(node) && !!node.body && node.body.kind !== 233 /* Block */ && isContextSensitive(node.body);
         }
         function isContextSensitiveFunctionOrObjectLiteralMethod(func) {
             return (ts.isInJSFile(func) && ts.isFunctionDeclaration(func) || isFunctionExpressionOrArrowFunction(func) || ts.isObjectLiteralMethod(func)) &&
@@ -59728,6 +60875,7 @@
                     result.properties = resolved.properties;
                     result.callSignatures = ts.emptyArray;
                     result.constructSignatures = ts.emptyArray;
+                    result.indexInfos = ts.emptyArray;
                     return result;
                 }
             }
@@ -59816,23 +60964,23 @@
                 return true;
             }
             switch (node.kind) {
-                case 284 /* JsxExpression */:
-                case 208 /* ParenthesizedExpression */:
+                case 286 /* JsxExpression */:
+                case 210 /* ParenthesizedExpression */:
                     return elaborateError(node.expression, source, target, relation, headMessage, containingMessageChain, errorOutputContainer);
-                case 217 /* BinaryExpression */:
+                case 219 /* BinaryExpression */:
                     switch (node.operatorToken.kind) {
-                        case 62 /* EqualsToken */:
+                        case 63 /* EqualsToken */:
                         case 27 /* CommaToken */:
                             return elaborateError(node.right, source, target, relation, headMessage, containingMessageChain, errorOutputContainer);
                     }
                     break;
-                case 201 /* ObjectLiteralExpression */:
+                case 203 /* ObjectLiteralExpression */:
                     return elaborateObjectLiteral(node, source, target, relation, containingMessageChain, errorOutputContainer);
-                case 200 /* ArrayLiteralExpression */:
+                case 202 /* ArrayLiteralExpression */:
                     return elaborateArrayLiteral(node, source, target, relation, containingMessageChain, errorOutputContainer);
-                case 282 /* JsxAttributes */:
+                case 284 /* JsxAttributes */:
                     return elaborateJsxComponents(node, source, target, relation, containingMessageChain, errorOutputContainer);
-                case 210 /* ArrowFunction */:
+                case 212 /* ArrowFunction */:
                     return elaborateArrowFunction(node, source, target, relation, containingMessageChain, errorOutputContainer);
             }
             return false;
@@ -59933,7 +61081,14 @@
                 if (!targetPropType || targetPropType.flags & 8388608 /* IndexedAccess */)
                     continue; // Don't elaborate on indexes on generic variables
                 var sourcePropType = getIndexedAccessTypeOrUndefined(source, nameType);
-                if (sourcePropType && !checkTypeRelatedTo(sourcePropType, targetPropType, relation, /*errorNode*/ undefined)) {
+                if (!sourcePropType)
+                    continue;
+                var propName = getPropertyNameFromIndex(nameType, /*accessNode*/ undefined);
+                var targetIsOptional = !!(propName && (getPropertyOfType(target, propName) || unknownSymbol).flags & 16777216 /* Optional */);
+                var sourceIsOptional = !!(propName && (getPropertyOfType(source, propName) || unknownSymbol).flags & 16777216 /* Optional */);
+                targetPropType = removeMissingType(targetPropType, targetIsOptional);
+                sourcePropType = removeMissingType(sourcePropType, targetIsOptional && sourceIsOptional);
+                if (!checkTypeRelatedTo(sourcePropType, targetPropType, relation, /*errorNode*/ undefined)) {
                     var elaborated = next && elaborateError(next, sourcePropType, targetPropType, relation, /*headMessage*/ undefined, containingMessageChain, errorOutputContainer);
                     if (elaborated) {
                         reportedError = true;
@@ -59954,9 +61109,7 @@
                             var targetProp = propertyName !== undefined ? getPropertyOfType(target, propertyName) : undefined;
                             var issuedElaboration = false;
                             if (!targetProp) {
-                                var indexInfo = isTypeAssignableToKind(nameType, 296 /* NumberLike */) && getIndexInfoOfType(target, 1 /* Number */) ||
-                                    getIndexInfoOfType(target, 0 /* String */) ||
-                                    undefined;
+                                var indexInfo = getApplicableIndexInfo(target, nameType);
                                 if (indexInfo && indexInfo.declaration && !ts.getSourceFileOfNode(indexInfo.declaration).hasNoDefaultLib) {
                                     issuedElaboration = true;
                                     ts.addRelatedInfo(reportedDiag, ts.createDiagnosticForNode(indexInfo.declaration, ts.Diagnostics.The_expected_type_comes_from_this_index_signature));
@@ -59987,9 +61140,9 @@
                     case 1:
                         if (!(_i < _a.length)) return [3 /*break*/, 4];
                         prop = _a[_i];
-                        if (ts.isJsxSpreadAttribute(prop))
+                        if (ts.isJsxSpreadAttribute(prop) || isHyphenatedJsxName(ts.idText(prop.name)))
                             return [3 /*break*/, 3];
-                        return [4 /*yield*/, { errorNode: prop.name, innerExpression: prop.initializer, nameType: getLiteralType(ts.idText(prop.name)) }];
+                        return [4 /*yield*/, { errorNode: prop.name, innerExpression: prop.initializer, nameType: getStringLiteralType(ts.idText(prop.name)) }];
                     case 2:
                         _b.sent();
                         _b.label = 3;
@@ -60013,7 +61166,7 @@
                     case 1:
                         if (!(i < node.children.length)) return [3 /*break*/, 5];
                         child = node.children[i];
-                        nameType = getLiteralType(i - memberOffset);
+                        nameType = getNumberLiteralType(i - memberOffset);
                         elem = getElaborationElementForJsxChild(child, nameType, getInvalidTextDiagnostic);
                         if (!elem) return [3 /*break*/, 3];
                         return [4 /*yield*/, elem];
@@ -60032,7 +61185,7 @@
         }
         function getElaborationElementForJsxChild(child, nameType, getInvalidTextDiagnostic) {
             switch (child.kind) {
-                case 284 /* JsxExpression */:
+                case 286 /* JsxExpression */:
                     // child is of the type of the expression
                     return { errorNode: child, innerExpression: child.expression, nameType: nameType };
                 case 11 /* JsxText */:
@@ -60041,9 +61194,9 @@
                     }
                     // child is a string
                     return { errorNode: child, innerExpression: undefined, nameType: nameType, errorMessage: getInvalidTextDiagnostic() };
-                case 274 /* JsxElement */:
-                case 275 /* JsxSelfClosingElement */:
-                case 278 /* JsxFragment */:
+                case 276 /* JsxElement */:
+                case 277 /* JsxSelfClosingElement */:
+                case 280 /* JsxFragment */:
                     // child is of type JSX.Element
                     return { errorNode: child, innerExpression: child, nameType: nameType };
                 default:
@@ -60057,7 +61210,7 @@
                 var containingElement = node.parent.parent;
                 var childPropName = getJsxElementChildrenPropertyName(getJsxNamespaceAt(node));
                 var childrenPropName = childPropName === undefined ? "children" : ts.unescapeLeadingUnderscores(childPropName);
-                var childrenNameType = getLiteralType(childrenPropName);
+                var childrenNameType = getStringLiteralType(childrenPropName);
                 var childrenTargetType = getIndexedAccessType(target, childrenNameType);
                 var validChildren = ts.getSemanticJsxChildren(containingElement.children);
                 if (!ts.length(validChildren)) {
@@ -60112,7 +61265,7 @@
                     var tagNameText = ts.getTextOfNode(node.parent.tagName);
                     var childPropName = getJsxElementChildrenPropertyName(getJsxNamespaceAt(node));
                     var childrenPropName = childPropName === undefined ? "children" : ts.unescapeLeadingUnderscores(childPropName);
-                    var childrenTargetType = getIndexedAccessType(target, getLiteralType(childrenPropName));
+                    var childrenTargetType = getIndexedAccessType(target, getStringLiteralType(childrenPropName));
                     var diagnostic = ts.Diagnostics._0_components_don_t_accept_text_as_child_elements_Text_in_JSX_has_the_type_string_but_the_expected_type_of_1_is_2;
                     invalidTextDiagnostic = __assign(__assign({}, diagnostic), { key: "!!ALREADY FORMATTED!!", message: ts.formatMessage(/*_dummy*/ undefined, diagnostic, tagNameText, childrenPropName, typeToString(childrenTargetType)) });
                 }
@@ -60137,7 +61290,7 @@
                         elem = node.elements[i];
                         if (ts.isOmittedExpression(elem))
                             return [3 /*break*/, 3];
-                        nameType = getLiteralType(i);
+                        nameType = getNumberLiteralType(i);
                         return [4 /*yield*/, { errorNode: elem, innerExpression: elem, nameType: nameType }];
                     case 2:
                         _a.sent();
@@ -60191,11 +61344,11 @@
                         }
                         _b = prop.kind;
                         switch (_b) {
-                            case 169 /* SetAccessor */: return [3 /*break*/, 2];
-                            case 168 /* GetAccessor */: return [3 /*break*/, 2];
-                            case 166 /* MethodDeclaration */: return [3 /*break*/, 2];
-                            case 290 /* ShorthandPropertyAssignment */: return [3 /*break*/, 2];
-                            case 289 /* PropertyAssignment */: return [3 /*break*/, 4];
+                            case 171 /* SetAccessor */: return [3 /*break*/, 2];
+                            case 170 /* GetAccessor */: return [3 /*break*/, 2];
+                            case 167 /* MethodDeclaration */: return [3 /*break*/, 2];
+                            case 292 /* ShorthandPropertyAssignment */: return [3 /*break*/, 2];
+                            case 291 /* PropertyAssignment */: return [3 /*break*/, 4];
                         }
                         return [3 /*break*/, 6];
                     case 2: return [4 /*yield*/, { errorNode: prop.name, innerExpression: undefined, nameType: type }];
@@ -60272,8 +61425,8 @@
                 return 0 /* False */;
             }
             var kind = target.declaration ? target.declaration.kind : 0 /* Unknown */;
-            var strictVariance = !(checkMode & 3 /* Callback */) && strictFunctionTypes && kind !== 166 /* MethodDeclaration */ &&
-                kind !== 165 /* MethodSignature */ && kind !== 167 /* Constructor */;
+            var strictVariance = !(checkMode & 3 /* Callback */) && strictFunctionTypes && kind !== 167 /* MethodDeclaration */ &&
+                kind !== 166 /* MethodSignature */ && kind !== 169 /* Constructor */;
             var result = -1 /* True */;
             var sourceThisType = getThisTypeOfSignature(source);
             if (sourceThisType && sourceThisType !== voidType) {
@@ -60407,8 +61560,7 @@
                 t.properties.length === 0 &&
                 t.callSignatures.length === 0 &&
                 t.constructSignatures.length === 0 &&
-                !t.stringIndexInfo &&
-                !t.numberIndexInfo;
+                t.indexInfos.length === 0;
         }
         function isEmptyObjectType(type) {
             return type.flags & 524288 /* Object */ ? !isGenericMappedType(type) && isEmptyResolvedType(resolveStructuredTypeMembers(type)) :
@@ -60422,7 +61574,7 @@
                 type.symbol && type.symbol.flags & 2048 /* TypeLiteral */ && getMembersOfSymbol(type.symbol).size === 0));
         }
         function isStringIndexSignatureOnlyType(type) {
-            return type.flags & 524288 /* Object */ && !isGenericMappedType(type) && getPropertiesOfType(type).length === 0 && getIndexInfoOfType(type, 0 /* String */) && !getIndexInfoOfType(type, 1 /* Number */) ||
+            return type.flags & 524288 /* Object */ && !isGenericMappedType(type) && getPropertiesOfType(type).length === 0 && getIndexInfosOfType(type).length === 1 && !!getIndexInfoOfType(type, stringType) ||
                 type.flags & 3145728 /* UnionOrIntersection */ && ts.every(type.types, isStringIndexSignatureOnlyType) ||
                 false;
         }
@@ -60527,9 +61679,10 @@
                 }
             }
             else {
-                if (!(source.flags & 3145728 /* UnionOrIntersection */) && !(target.flags & 3145728 /* UnionOrIntersection */) &&
-                    source.flags !== target.flags && !(source.flags & 469237760 /* Substructure */))
+                if (source.flags !== target.flags)
                     return false;
+                if (source.flags & 67358815 /* Singleton */)
+                    return true;
             }
             if (source.flags & 524288 /* Object */ && target.flags & 524288 /* Object */) {
                 var related = relation.get(getRelationKey(source, target, 0 /* None */, relation));
@@ -60543,7 +61696,7 @@
             return false;
         }
         function isIgnoredJsxProperty(source, sourceProp) {
-            return ts.getObjectFlags(source) & 2048 /* JsxAttributes */ && !isUnhyphenatedJsxName(sourceProp.escapedName);
+            return ts.getObjectFlags(source) & 2048 /* JsxAttributes */ && isHyphenatedJsxName(sourceProp.escapedName);
         }
         function getNormalizedType(type, writing) {
             while (true) {
@@ -60620,7 +61773,7 @@
                 }
                 var diag = ts.createDiagnosticForNodeFromMessageChain(errorNode, errorInfo, relatedInformation);
                 if (relatedInfo) {
-                    ts.addRelatedInfo.apply(void 0, __spreadArray([diag], relatedInfo));
+                    ts.addRelatedInfo.apply(void 0, __spreadArray([diag], relatedInfo, false));
                 }
                 if (errorOutputContainer) {
                     (errorOutputContainer.errors || (errorOutputContainer.errors = [])).push(diag);
@@ -60663,7 +61816,7 @@
                     reportError.apply(void 0, stack[0]);
                     if (info) {
                         // Actually do the last relation error
-                        reportRelationError.apply(void 0, __spreadArray([/*headMessage*/ undefined], info));
+                        reportRelationError.apply(void 0, __spreadArray([/*headMessage*/ undefined], info, false));
                     }
                     return;
                 }
@@ -60752,12 +61905,12 @@
                     var _b = secondaryRootErrors_1[_i], msg = _b[0], args = _b.slice(1);
                     var originalValue = msg.elidedInCompatabilityPyramid;
                     msg.elidedInCompatabilityPyramid = false; // Temporarily override elision to ensure error is reported
-                    reportError.apply(void 0, __spreadArray([msg], args));
+                    reportError.apply(void 0, __spreadArray([msg], args, false));
                     msg.elidedInCompatabilityPyramid = originalValue;
                 }
                 if (info) {
                     // Actually do the last relation error
-                    reportRelationError.apply(void 0, __spreadArray([/*headMessage*/ undefined], info));
+                    reportRelationError.apply(void 0, __spreadArray([/*headMessage*/ undefined], info, false));
                 }
             }
             function reportError(message, arg0, arg1, arg2, arg3) {
@@ -61078,12 +62231,12 @@
                 }
             }
             function isIdenticalTo(source, target) {
-                var flags = source.flags & target.flags;
-                if (!(flags & 469237760 /* Substructure */)) {
+                if (source.flags !== target.flags)
                     return 0 /* False */;
-                }
+                if (source.flags & 67358815 /* Singleton */)
+                    return -1 /* True */;
                 traceUnionsOrIntersectionsTooLarge(source, target);
-                if (flags & 3145728 /* UnionOrIntersection */) {
+                if (source.flags & 3145728 /* UnionOrIntersection */) {
                     var result_7 = eachTypeRelatedToSomeType(source, target);
                     if (result_7) {
                         result_7 &= eachTypeRelatedToSomeType(target, source);
@@ -61094,9 +62247,10 @@
             }
             function getTypeOfPropertyInTypes(types, name) {
                 var appendPropType = function (propTypes, type) {
+                    var _a;
                     type = getApparentType(type);
                     var prop = type.flags & 3145728 /* UnionOrIntersection */ ? getPropertyOfUnionOrIntersectionType(type, name) : getPropertyOfObjectType(type, name);
-                    var propType = prop && getTypeOfSymbol(prop) || isNumericLiteralName(name) && getIndexTypeOfType(type, 1 /* Number */) || getIndexTypeOfType(type, 0 /* String */) || undefinedType;
+                    var propType = prop && getTypeOfSymbol(prop) || ((_a = getApplicableIndexInfoForName(type, name)) === null || _a === void 0 ? void 0 : _a.type) || undefinedType;
                     return ts.append(propTypes, propType);
                 };
                 return getUnionType(ts.reduceLeft(types, appendPropType, /*initial*/ undefined) || ts.emptyArray);
@@ -61117,7 +62271,7 @@
                     reducedTarget = findMatchingDiscriminantType(source, target, isRelatedTo) || filterPrimitivesIfContainsNonPrimitive(target);
                     checkTypes = reducedTarget.flags & 1048576 /* Union */ ? reducedTarget.types : [reducedTarget];
                 }
-                var _loop_16 = function (prop) {
+                var _loop_18 = function (prop) {
                     if (shouldCheckAsExcessProperty(prop, source.symbol) && !isIgnoredJsxProperty(source, prop)) {
                         if (!isKnownProperty(reducedTarget, prop.escapedName, isComparingJsxAttributes)) {
                             if (reportErrors) {
@@ -61180,7 +62334,7 @@
                 };
                 for (var _i = 0, _b = getPropertiesOfType(source); _i < _b.length; _i++) {
                     var prop = _b[_i];
-                    var state_5 = _loop_16(prop);
+                    var state_5 = _loop_18(prop);
                     if (typeof state_5 === "object")
                         return state_5.value;
                 }
@@ -61492,7 +62646,7 @@
                     // parameter 'T extends 1 | 2', the intersection 'T & 1' should be reduced to '1' such that it doesn't
                     // appear to be comparable to '2'.
                     if (relation === comparableRelation && target.flags & 131068 /* Primitive */) {
-                        var constraints = ts.sameMap(source.types, function (t) { return t.flags & 131068 /* Primitive */ ? t : getBaseConstraintOfType(t) || unknownType; });
+                        var constraints = ts.sameMap(source.types, getBaseConstraintOrType);
                         if (constraints !== source.types) {
                             source = getIntersectionType(constraints);
                             if (!(source.flags & 2097152 /* Intersection */)) {
@@ -61636,8 +62790,8 @@
                         var baseObjectType = getBaseConstraintOfType(objectType) || objectType;
                         var baseIndexType = getBaseConstraintOfType(indexType) || indexType;
                         if (!isGenericObjectType(baseObjectType) && !isGenericIndexType(baseIndexType)) {
-                            var accessFlags = 2 /* Writing */ | (baseObjectType !== objectType ? 1 /* NoIndexSignatures */ : 0);
-                            var constraint = getIndexedAccessTypeOrUndefined(baseObjectType, baseIndexType, target.noUncheckedIndexedAccessCandidate, /*accessNode*/ undefined, accessFlags);
+                            var accessFlags = 4 /* Writing */ | (baseObjectType !== objectType ? 2 /* NoIndexSignatures */ : 0);
+                            var constraint = getIndexedAccessTypeOrUndefined(baseObjectType, baseIndexType, accessFlags);
                             if (constraint) {
                                 if (reportErrors && originalErrorInfo) {
                                     // create a new chain for the constraint error
@@ -61861,7 +63015,7 @@
                         return 0 /* False */;
                     }
                     if (ts.getObjectFlags(source) & 4 /* Reference */ && ts.getObjectFlags(target) & 4 /* Reference */ && source.target === target.target &&
-                        !(ts.getObjectFlags(source) & 4096 /* MarkerType */ || ts.getObjectFlags(target) & 4096 /* MarkerType */)) {
+                        !isTupleType(source) && !(ts.getObjectFlags(source) & 4096 /* MarkerType */ || ts.getObjectFlags(target) & 4096 /* MarkerType */)) {
                         // We have type references to the same generic type, and the type references are not marker
                         // type references (which are intended by be compared structurally). Obtain the variance
                         // information for the type parameters and relate the type arguments accordingly.
@@ -61879,7 +63033,7 @@
                     }
                     else if (isReadonlyArrayType(target) ? isArrayType(source) || isTupleType(source) : isArrayType(target) && isTupleType(source) && !source.target.readonly) {
                         if (relation !== identityRelation) {
-                            return isRelatedTo(getIndexTypeOfType(source, 1 /* Number */) || anyType, getIndexTypeOfType(target, 1 /* Number */) || anyType, reportErrors);
+                            return isRelatedTo(getIndexTypeOfType(source, numberType) || anyType, getIndexTypeOfType(target, numberType) || anyType, reportErrors);
                         }
                         else {
                             // By flags alone, we know that the `target` is a readonly array while the source is a normal array or tuple
@@ -61906,10 +63060,7 @@
                             if (result) {
                                 result &= signaturesRelatedTo(source, target, 1 /* Construct */, reportStructuralErrors);
                                 if (result) {
-                                    result &= indexTypesRelatedTo(source, target, 0 /* String */, sourceIsPrimitive, reportStructuralErrors, intersectionState);
-                                    if (result) {
-                                        result &= indexTypesRelatedTo(source, target, 1 /* Number */, sourceIsPrimitive, reportStructuralErrors, intersectionState);
-                                    }
+                                    result &= indexSignaturesRelatedTo(source, target, sourceIsPrimitive, reportStructuralErrors, intersectionState);
                                 }
                             }
                         }
@@ -62035,7 +63186,7 @@
                 var numCombinations = 1;
                 for (var _i = 0, sourcePropertiesFiltered_1 = sourcePropertiesFiltered; _i < sourcePropertiesFiltered_1.length; _i++) {
                     var sourceProperty = sourcePropertiesFiltered_1[_i];
-                    numCombinations *= countTypes(getTypeOfSymbol(sourceProperty));
+                    numCombinations *= countTypes(getNonMissingTypeOfSymbol(sourceProperty));
                     if (numCombinations > 25) {
                         // We've reached the complexity limit.
                         ts.tracing === null || ts.tracing === void 0 ? void 0 : ts.tracing.instant("checkTypes" /* CheckTypes */, "typeRelatedToDiscriminatedType_DepthLimit", { sourceId: source.id, targetId: target.id, numCombinations: numCombinations });
@@ -62047,7 +63198,7 @@
                 var excludedProperties = new ts.Set();
                 for (var i = 0; i < sourcePropertiesFiltered.length; i++) {
                     var sourceProperty = sourcePropertiesFiltered[i];
-                    var sourcePropertyType = getTypeOfSymbol(sourceProperty);
+                    var sourcePropertyType = getNonMissingTypeOfSymbol(sourceProperty);
                     sourceDiscriminantTypes[i] = sourcePropertyType.flags & 1048576 /* Union */
                         ? sourcePropertyType.types
                         : [sourcePropertyType];
@@ -62057,11 +63208,11 @@
                 // constituents of 'target'. If any combination does not have a match then 'source' is not relatable.
                 var discriminantCombinations = ts.cartesianProduct(sourceDiscriminantTypes);
                 var matchingTypes = [];
-                var _loop_17 = function (combination) {
+                var _loop_19 = function (combination) {
                     var hasMatch = false;
                     outer: for (var _c = 0, _d = target.types; _c < _d.length; _c++) {
                         var type = _d[_c];
-                        var _loop_18 = function (i) {
+                        var _loop_20 = function (i) {
                             var sourceProperty = sourcePropertiesFiltered[i];
                             var targetProperty = getPropertyOfType(type, sourceProperty.escapedName);
                             if (!targetProperty)
@@ -62077,7 +63228,7 @@
                             }
                         };
                         for (var i = 0; i < sourcePropertiesFiltered.length; i++) {
-                            var state_7 = _loop_18(i);
+                            var state_7 = _loop_20(i);
                             switch (state_7) {
                                 case "continue-outer": continue outer;
                             }
@@ -62091,7 +63242,7 @@
                 };
                 for (var _a = 0, discriminantCombinations_1 = discriminantCombinations; _a < discriminantCombinations_1.length; _a++) {
                     var combination = discriminantCombinations_1[_a];
-                    var state_6 = _loop_17(combination);
+                    var state_6 = _loop_19(combination);
                     if (typeof state_6 === "object")
                         return state_6.value;
                 }
@@ -62104,15 +63255,12 @@
                         result &= signaturesRelatedTo(source, type, 0 /* Call */, /*reportStructuralErrors*/ false);
                         if (result) {
                             result &= signaturesRelatedTo(source, type, 1 /* Construct */, /*reportStructuralErrors*/ false);
-                            if (result) {
-                                result &= indexTypesRelatedTo(source, type, 0 /* String */, /*sourceIsPrimitive*/ false, /*reportStructuralErrors*/ false, 0 /* None */);
+                            if (result && !(isTupleType(source) && isTupleType(type))) {
                                 // Comparing numeric index types when both `source` and `type` are tuples is unnecessary as the
                                 // element types should be sufficiently covered by `propertiesRelatedTo`. It also causes problems
                                 // with index type assignability as the types for the excluded discriminants are still included
                                 // in the index type.
-                                if (result && !(isTupleType(source) && isTupleType(type))) {
-                                    result &= indexTypesRelatedTo(source, type, 1 /* Number */, /*sourceIsPrimitive*/ false, /*reportStructuralErrors*/ false, 0 /* None */);
-                                }
+                                result &= indexSignaturesRelatedTo(source, type, /*sourceIsPrimitive*/ false, /*reportStructuralErrors*/ false, 0 /* None */);
                             }
                         }
                     }
@@ -62140,46 +63288,9 @@
             }
             function isPropertySymbolTypeRelated(sourceProp, targetProp, getTypeOfSourceProperty, reportErrors, intersectionState) {
                 var targetIsOptional = strictNullChecks && !!(ts.getCheckFlags(targetProp) & 48 /* Partial */);
-                var source = getTypeOfSourceProperty(sourceProp);
-                if (ts.getCheckFlags(targetProp) & 65536 /* DeferredType */ && !getSymbolLinks(targetProp).type) {
-                    // Rather than resolving (and normalizing) the type, relate constituent-by-constituent without performing normalization or seconadary passes
-                    var links = getSymbolLinks(targetProp);
-                    ts.Debug.assertIsDefined(links.deferralParent);
-                    ts.Debug.assertIsDefined(links.deferralConstituents);
-                    var unionParent = !!(links.deferralParent.flags & 1048576 /* Union */);
-                    var result_12 = unionParent ? 0 /* False */ : -1 /* True */;
-                    var targetTypes = links.deferralConstituents;
-                    for (var _i = 0, targetTypes_3 = targetTypes; _i < targetTypes_3.length; _i++) {
-                        var targetType = targetTypes_3[_i];
-                        var related = isRelatedTo(source, targetType, /*reportErrors*/ false, /*headMessage*/ undefined, unionParent ? 0 : 2 /* Target */);
-                        if (!unionParent) {
-                            if (!related) {
-                                // Can't assign to a target individually - have to fallback to assigning to the _whole_ intersection (which forces normalization)
-                                return isRelatedTo(source, addOptionality(getTypeOfSymbol(targetProp), targetIsOptional), reportErrors);
-                            }
-                            result_12 &= related;
-                        }
-                        else {
-                            if (related) {
-                                return related;
-                            }
-                        }
-                    }
-                    if (unionParent && !result_12 && targetIsOptional) {
-                        result_12 = isRelatedTo(source, undefinedType);
-                    }
-                    if (unionParent && !result_12 && reportErrors) {
-                        // The easiest way to get the right errors here is to un-defer (which may be costly)
-                        // If it turns out this is too costly too often, we can replicate the error handling logic within
-                        // typeRelatedToSomeType without the discriminatable type branch (as that requires a manifest union
-                        // type on which to hand discriminable properties, which we are expressly trying to avoid here)
-                        return isRelatedTo(source, addOptionality(getTypeOfSymbol(targetProp), targetIsOptional), reportErrors);
-                    }
-                    return result_12;
-                }
-                else {
-                    return isRelatedTo(source, addOptionality(getTypeOfSymbol(targetProp), targetIsOptional), reportErrors, /*headMessage*/ undefined, intersectionState);
-                }
+                var effectiveTarget = addOptionality(getNonMissingTypeOfSymbol(targetProp), /*isProperty*/ false, targetIsOptional);
+                var effectiveSource = getTypeOfSourceProperty(sourceProp);
+                return isRelatedTo(effectiveSource, effectiveTarget, reportErrors, /*headMessage*/ undefined, intersectionState);
             }
             function propertyRelatedTo(source, target, sourceProp, targetProp, getTypeOfSourceProperty, reportErrors, intersectionState, skipOptional) {
                 var sourcePropFlags = ts.getDeclarationModifierFlagsFromSymbol(sourceProp);
@@ -62259,7 +63370,7 @@
                 }
                 if (props.length === 1) {
                     var propName = symbolToString(unmatchedProperty);
-                    reportError.apply(void 0, __spreadArray([ts.Diagnostics.Property_0_is_missing_in_type_1_but_required_in_type_2, propName], getTypeNamesForErrorDisplay(source, target)));
+                    reportError.apply(void 0, __spreadArray([ts.Diagnostics.Property_0_is_missing_in_type_1_but_required_in_type_2, propName], getTypeNamesForErrorDisplay(source, target), false));
                     if (ts.length(unmatchedProperty.declarations)) {
                         associateRelatedInfo(ts.createDiagnosticForNode(unmatchedProperty.declarations[0], ts.Diagnostics._0_is_declared_here, propName));
                     }
@@ -62308,7 +63419,7 @@
                             }
                             return 0 /* False */;
                         }
-                        if (!targetRestFlag && sourceRestFlag) {
+                        if (!targetRestFlag && (sourceRestFlag || targetArity < sourceArity)) {
                             if (reportErrors) {
                                 if (sourceMinLength < targetMinLength) {
                                     reportError(ts.Diagnostics.Target_requires_0_element_s_but_source_may_have_fewer, targetMinLength);
@@ -62356,13 +63467,14 @@
                                 }
                             }
                             var sourceType = !isTupleType(source) ? sourceTypeArguments[0] :
-                                i < startCount || i >= targetArity - endCount ? sourceTypeArguments[sourceIndex] :
+                                i < startCount || i >= targetArity - endCount ? removeMissingType(sourceTypeArguments[sourceIndex], !!(sourceFlags & targetFlags & 2 /* Optional */)) :
                                     getElementTypeOfSliceOfTupleType(source, startCount, endCount) || neverType;
                             var targetType = targetTypeArguments[i];
-                            var targetCheckType = sourceFlags & 8 /* Variadic */ && targetFlags & 4 /* Rest */ ? createArrayType(targetType) : targetType;
+                            var targetCheckType = sourceFlags & 8 /* Variadic */ && targetFlags & 4 /* Rest */ ? createArrayType(targetType) :
+                                removeMissingType(targetType, !!(targetFlags & 2 /* Optional */));
                             var related = isRelatedTo(sourceType, targetCheckType, reportErrors, /*headMessage*/ undefined, intersectionState);
                             if (!related) {
-                                if (reportErrors) {
+                                if (reportErrors && (targetArity > 1 || sourceArity > 1)) {
                                     if (i < startCount || i >= targetArity - endCount || sourceArity - startCount - endCount === 1) {
                                         reportIncompatibleError(ts.Diagnostics.Type_at_position_0_in_source_is_not_compatible_with_type_at_position_1_in_target, sourceIndex, i);
                                     }
@@ -62393,7 +63505,7 @@
                         var sourceProp = _a[_i];
                         if (!getPropertyOfObjectType(target, sourceProp.escapedName)) {
                             var sourceType = getTypeOfSymbol(sourceProp);
-                            if (!(sourceType === undefinedType || sourceType === undefinedWideningType || sourceType === optionalType)) {
+                            if (!(sourceType.flags & 32768 /* Undefined */)) {
                                 if (reportErrors) {
                                     reportError(ts.Diagnostics.Property_0_does_not_exist_on_type_1, symbolToString(sourceProp), typeToString(target));
                                 }
@@ -62412,7 +63524,7 @@
                     if (!(targetProp.flags & 4194304 /* Prototype */) && (!numericNamesOnly || isNumericLiteralName(name) || name === "length")) {
                         var sourceProp = getPropertyOfType(source, name);
                         if (sourceProp && sourceProp !== targetProp) {
-                            var related = propertyRelatedTo(source, target, sourceProp, targetProp, getTypeOfSymbol, reportErrors, intersectionState, relation === comparableRelation);
+                            var related = propertyRelatedTo(source, target, sourceProp, targetProp, getNonMissingTypeOfSymbol, reportErrors, intersectionState, relation === comparableRelation);
                             if (!related) {
                                 return 0 /* False */;
                             }
@@ -62506,7 +63618,7 @@
                     var targetSignature = ts.first(targetSignatures);
                     result = signatureRelatedTo(sourceSignature, targetSignature, eraseGenerics, reportErrors, incompatibleReporter(sourceSignature, targetSignature));
                     if (!result && reportErrors && kind === 1 /* Construct */ && (sourceObjectFlags & targetObjectFlags) &&
-                        (((_a = targetSignature.declaration) === null || _a === void 0 ? void 0 : _a.kind) === 167 /* Constructor */ || ((_b = sourceSignature.declaration) === null || _b === void 0 ? void 0 : _b.kind) === 167 /* Constructor */)) {
+                        (((_a = targetSignature.declaration) === null || _a === void 0 ? void 0 : _a.kind) === 169 /* Constructor */ || ((_b = sourceSignature.declaration) === null || _b === void 0 ? void 0 : _b.kind) === 169 /* Constructor */)) {
                         var constructSignatureToString = function (signature) {
                             return signatureToString(signature, /*enclosingDeclaration*/ undefined, 262144 /* WriteArrowStyleSignature */, kind);
                         };
@@ -62572,8 +63684,9 @@
                 }
                 return result;
             }
-            function eachPropertyRelatedTo(source, target, kind, reportErrors) {
+            function membersRelatedToIndexInfo(source, targetInfo, reportErrors) {
                 var result = -1 /* True */;
+                var keyType = targetInfo.keyType;
                 var props = source.flags & 2097152 /* Intersection */ ? getPropertiesOfUnionOrIntersectionType(source) : getPropertiesOfObjectType(source);
                 for (var _i = 0, props_2 = props; _i < props_2.length; _i++) {
                     var prop = props_2[_i];
@@ -62581,16 +63694,12 @@
                     if (isIgnoredJsxProperty(source, prop)) {
                         continue;
                     }
-                    var nameType = getSymbolLinks(prop).nameType;
-                    if (nameType && nameType.flags & 8192 /* UniqueESSymbol */) {
-                        continue;
-                    }
-                    if (kind === 0 /* String */ || isNumericLiteralName(prop.escapedName)) {
-                        var propType = getTypeOfSymbol(prop);
-                        var type = propType.flags & 32768 /* Undefined */ || !(kind === 0 /* String */ && prop.flags & 16777216 /* Optional */)
+                    if (isApplicableIndexType(getLiteralTypeFromProperty(prop, 8576 /* StringOrNumberLiteralOrUnique */), keyType)) {
+                        var propType = getNonMissingTypeOfSymbol(prop);
+                        var type = exactOptionalPropertyTypes || propType.flags & 32768 /* Undefined */ || keyType === numberType || !(prop.flags & 16777216 /* Optional */)
                             ? propType
                             : getTypeWithFacts(propType, 524288 /* NEUndefined */);
-                        var related = isRelatedTo(type, target, reportErrors);
+                        var related = isRelatedTo(type, targetInfo.type, reportErrors);
                         if (!related) {
                             if (reportErrors) {
                                 reportError(ts.Diagnostics.Property_0_is_incompatible_with_index_signature, symbolToString(prop));
@@ -62600,67 +63709,77 @@
                         result &= related;
                     }
                 }
+                for (var _a = 0, _b = getIndexInfosOfType(source); _a < _b.length; _a++) {
+                    var info = _b[_a];
+                    if (isApplicableIndexType(info.keyType, keyType)) {
+                        var related = indexInfoRelatedTo(info, targetInfo, reportErrors);
+                        if (!related) {
+                            return 0 /* False */;
+                        }
+                        result &= related;
+                    }
+                }
                 return result;
             }
-            function indexTypeRelatedTo(sourceType, targetType, reportErrors) {
-                var related = isRelatedTo(sourceType, targetType, reportErrors);
+            function indexInfoRelatedTo(sourceInfo, targetInfo, reportErrors) {
+                var related = isRelatedTo(sourceInfo.type, targetInfo.type, reportErrors);
                 if (!related && reportErrors) {
-                    reportError(ts.Diagnostics.Index_signatures_are_incompatible);
+                    if (sourceInfo.keyType === targetInfo.keyType) {
+                        reportError(ts.Diagnostics._0_index_signatures_are_incompatible, typeToString(sourceInfo.keyType));
+                    }
+                    else {
+                        reportError(ts.Diagnostics._0_and_1_index_signatures_are_incompatible, typeToString(sourceInfo.keyType), typeToString(targetInfo.keyType));
+                    }
                 }
                 return related;
             }
-            function indexTypesRelatedTo(source, target, kind, sourceIsPrimitive, reportErrors, intersectionState) {
+            function indexSignaturesRelatedTo(source, target, sourceIsPrimitive, reportErrors, intersectionState) {
                 if (relation === identityRelation) {
-                    return indexTypesIdenticalTo(source, target, kind);
+                    return indexSignaturesIdenticalTo(source, target);
                 }
-                var targetType = getIndexTypeOfType(target, kind);
-                if (!targetType) {
-                    return -1 /* True */;
-                }
-                if (targetType.flags & 1 /* Any */ && !sourceIsPrimitive) {
-                    // An index signature of type `any` permits assignment from everything but primitives,
-                    // provided that there is also a `string` index signature of type `any`.
-                    var stringIndexType = kind === 0 /* String */ ? targetType : getIndexTypeOfType(target, 0 /* String */);
-                    if (stringIndexType && stringIndexType.flags & 1 /* Any */) {
-                        return -1 /* True */;
+                var indexInfos = getIndexInfosOfType(target);
+                var targetHasStringIndex = ts.some(indexInfos, function (info) { return info.keyType === stringType; });
+                var result = -1 /* True */;
+                for (var _i = 0, indexInfos_3 = indexInfos; _i < indexInfos_3.length; _i++) {
+                    var targetInfo = indexInfos_3[_i];
+                    var related = !sourceIsPrimitive && targetHasStringIndex && targetInfo.type.flags & 1 /* Any */ ? -1 /* True */ :
+                        isGenericMappedType(source) && targetHasStringIndex ? isRelatedTo(getTemplateTypeFromMappedType(source), targetInfo.type, reportErrors) :
+                            typeRelatedToIndexInfo(source, targetInfo, reportErrors, intersectionState);
+                    if (!related) {
+                        return 0 /* False */;
                     }
+                    result &= related;
                 }
-                if (isGenericMappedType(source)) {
-                    // A generic mapped type { [P in K]: T } is related to a type with an index signature
-                    // { [x: string]: U }, and optionally with an index signature { [x: number]: V },
-                    // if T is related to U and V.
-                    return getIndexTypeOfType(target, 0 /* String */) ? isRelatedTo(getTemplateTypeFromMappedType(source), targetType, reportErrors) : 0 /* False */;
-                }
-                var indexType = getIndexTypeOfType(source, kind) || kind === 1 /* Number */ && getIndexTypeOfType(source, 0 /* String */);
-                if (indexType) {
-                    return indexTypeRelatedTo(indexType, targetType, reportErrors);
+                return result;
+            }
+            function typeRelatedToIndexInfo(source, targetInfo, reportErrors, intersectionState) {
+                var sourceInfo = getApplicableIndexInfo(source, targetInfo.keyType);
+                if (sourceInfo) {
+                    return indexInfoRelatedTo(sourceInfo, targetInfo, reportErrors);
                 }
                 if (!(intersectionState & 1 /* Source */) && isObjectTypeWithInferableIndex(source)) {
                     // Intersection constituents are never considered to have an inferred index signature
-                    var related = eachPropertyRelatedTo(source, targetType, kind, reportErrors);
-                    if (related && kind === 0 /* String */) {
-                        var numberIndexType = getIndexTypeOfType(source, 1 /* Number */);
-                        if (numberIndexType) {
-                            related &= indexTypeRelatedTo(numberIndexType, targetType, reportErrors);
-                        }
-                    }
-                    return related;
+                    return membersRelatedToIndexInfo(source, targetInfo, reportErrors);
                 }
                 if (reportErrors) {
-                    reportError(ts.Diagnostics.Index_signature_is_missing_in_type_0, typeToString(source));
+                    reportError(ts.Diagnostics.Index_signature_for_type_0_is_missing_in_type_1, typeToString(targetInfo.keyType), typeToString(source));
                 }
                 return 0 /* False */;
             }
-            function indexTypesIdenticalTo(source, target, indexKind) {
-                var targetInfo = getIndexInfoOfType(target, indexKind);
-                var sourceInfo = getIndexInfoOfType(source, indexKind);
-                if (!sourceInfo && !targetInfo) {
-                    return -1 /* True */;
+            function indexSignaturesIdenticalTo(source, target) {
+                var sourceInfos = getIndexInfosOfType(source);
+                var targetInfos = getIndexInfosOfType(target);
+                if (sourceInfos.length !== targetInfos.length) {
+                    return 0 /* False */;
                 }
-                if (sourceInfo && targetInfo && sourceInfo.isReadonly === targetInfo.isReadonly) {
-                    return isRelatedTo(sourceInfo.type, targetInfo.type);
+                for (var _i = 0, targetInfos_1 = targetInfos; _i < targetInfos_1.length; _i++) {
+                    var targetInfo = targetInfos_1[_i];
+                    var sourceInfo = getIndexInfoOfType(source, targetInfo.keyType);
+                    if (!(sourceInfo && isRelatedTo(sourceInfo.type, targetInfo.type) && sourceInfo.isReadonly === targetInfo.isReadonly)) {
+                        return 0 /* False */;
+                    }
                 }
-                return 0 /* False */;
+                return -1 /* True */;
             }
             function constructorVisibilitiesAreCompatible(sourceSignature, targetSignature, reportErrors) {
                 if (!sourceSignature.declaration || !targetSignature.declaration) {
@@ -62756,10 +63875,8 @@
         function isWeakType(type) {
             if (type.flags & 524288 /* Object */) {
                 var resolved = resolveStructuredTypeMembers(type);
-                return resolved.callSignatures.length === 0 && resolved.constructSignatures.length === 0 &&
-                    !resolved.stringIndexInfo && !resolved.numberIndexInfo &&
-                    resolved.properties.length > 0 &&
-                    ts.every(resolved.properties, function (p) { return !!(p.flags & 16777216 /* Optional */); });
+                return resolved.callSignatures.length === 0 && resolved.constructSignatures.length === 0 && resolved.indexInfos.length === 0 &&
+                    resolved.properties.length > 0 && ts.every(resolved.properties, function (p) { return !!(p.flags & 16777216 /* Optional */); });
             }
             if (type.flags & 2097152 /* Intersection */) {
                 return ts.every(type.types, isWeakType);
@@ -62804,7 +63921,7 @@
                 // The emptyArray singleton is used to signal a recursive invocation.
                 cache.variances = ts.emptyArray;
                 variances = [];
-                var _loop_19 = function (tp) {
+                var _loop_21 = function (tp) {
                     var unmeasurable = false;
                     var unreliable = false;
                     var oldHandler = outofbandVarianceMarkerHandler;
@@ -62836,7 +63953,7 @@
                 };
                 for (var _i = 0, typeParameters_1 = typeParameters; _i < typeParameters_1.length; _i++) {
                     var tp = typeParameters_1[_i];
-                    _loop_19(tp);
+                    _loop_21(tp);
                 }
                 cache.variances = variances;
                 ts.tracing === null || ts.tracing === void 0 ? void 0 : ts.tracing.pop();
@@ -63146,8 +64263,8 @@
         }
         function literalTypesWithSameBaseType(types) {
             var commonBaseType;
-            for (var _i = 0, types_14 = types; _i < types_14.length; _i++) {
-                var t = types_14[_i];
+            for (var _i = 0, types_13 = types; _i < types_13.length; _i++) {
+                var t = types_13[_i];
                 var baseType = getBaseTypeOfLiteralType(t);
                 if (!commonBaseType) {
                     commonBaseType = baseType;
@@ -63208,6 +64325,14 @@
             }
             type.objectFlags |= 33554432 /* IdenticalBaseTypeCalculated */;
             var target = type.target;
+            if (ts.getObjectFlags(target) & 1 /* Class */) {
+                var baseTypeNode = getBaseTypeNodeOfClass(target);
+                // A base type expression may circularly reference the class itself (e.g. as an argument to function call), so we only
+                // check for base types specified as simple qualified names.
+                if (baseTypeNode && baseTypeNode.expression.kind !== 79 /* Identifier */ && baseTypeNode.expression.kind !== 204 /* PropertyAccessExpression */) {
+                    return undefined;
+                }
+            }
             var bases = getBaseTypes(target);
             if (bases.length !== 1) {
                 return undefined;
@@ -63222,9 +64347,12 @@
             type.objectFlags |= 67108864 /* IdenticalBaseTypeExists */;
             return type.cachedEquivalentBaseType = instantiatedBase;
         }
+        function isEmptyLiteralType(type) {
+            return strictNullChecks ? type === implicitNeverType : type === undefinedWideningType;
+        }
         function isEmptyArrayLiteralType(type) {
             var elementType = getElementTypeOfArrayType(type);
-            return strictNullChecks ? elementType === implicitNeverType : elementType === undefinedWideningType;
+            return !!elementType && isEmptyLiteralType(elementType);
         }
         function isTupleLikeType(type) {
             return isTupleType(type) || !!getPropertyOfType(type, "0");
@@ -63351,8 +64479,8 @@
         }
         function getFalsyFlagsOfTypes(types) {
             var result = 0;
-            for (var _i = 0, types_15 = types; _i < types_15.length; _i++) {
-                var t = types_15[_i];
+            for (var _i = 0, types_14 = types; _i < types_14.length; _i++) {
+                var t = types_14[_i];
                 result |= getFalsyFlags(t);
             }
             return result;
@@ -63400,9 +64528,10 @@
                     missing === 65536 /* Null */ ? getUnionType([type, nullType]) :
                         getUnionType([type, undefinedType, nullType]);
         }
-        function getOptionalType(type) {
+        function getOptionalType(type, isProperty) {
+            if (isProperty === void 0) { isProperty = false; }
             ts.Debug.assert(strictNullChecks);
-            return type.flags & 32768 /* Undefined */ ? type : getUnionType([type, undefinedType]);
+            return type.flags & 32768 /* Undefined */ ? type : getUnionType([type, isProperty ? missingType : undefinedType]);
         }
         function getGlobalNonNullableTypeInstantiation(type) {
             // First reduce away any constituents that are assignable to 'undefined' or 'null'. This not only eliminates
@@ -63423,11 +64552,8 @@
         function addOptionalTypeMarker(type) {
             return strictNullChecks ? getUnionType([type, optionalType]) : type;
         }
-        function isNotOptionalTypeMarker(type) {
-            return type !== optionalType;
-        }
         function removeOptionalTypeMarker(type) {
-            return strictNullChecks ? filterType(type, isNotOptionalTypeMarker) : type;
+            return strictNullChecks ? removeType(type, optionalType) : type;
         }
         function propagateOptionalTypeMarker(type, node, wasOptional) {
             return wasOptional ? ts.isOutermostOptionalChain(node) ? getOptionalType(type) : addOptionalTypeMarker(type) : type;
@@ -63437,6 +64563,15 @@
                 ts.isOptionalChain(expression) ? removeOptionalTypeMarker(exprType) :
                     exprType;
         }
+        function removeMissingType(type, isOptional) {
+            return exactOptionalPropertyTypes && isOptional ? removeType(type, missingType) : type;
+        }
+        function containsMissingType(type) {
+            return exactOptionalPropertyTypes && (type === missingType || type.flags & 1048576 /* Union */ && containsType(type.types, missingType));
+        }
+        function removeMissingOrUndefinedType(type) {
+            return exactOptionalPropertyTypes ? removeType(type, missingType) : getTypeWithFacts(type, 524288 /* NEUndefined */);
+        }
         /**
          * Is source potentially coercible to target type under `==`.
          * Assumes that `source` is a constituent of a union, hence
@@ -63510,7 +64645,7 @@
             }
             var resolved = type;
             var members = transformTypeOfMembers(type, getRegularTypeOfObjectLiteral);
-            var regularNew = createAnonymousType(resolved.symbol, members, resolved.callSignatures, resolved.constructSignatures, resolved.stringIndexInfo, resolved.numberIndexInfo);
+            var regularNew = createAnonymousType(resolved.symbol, members, resolved.callSignatures, resolved.constructSignatures, resolved.indexInfos);
             regularNew.flags = resolved.flags;
             regularNew.objectFlags |= resolved.objectFlags & ~16384 /* FreshLiteral */;
             type.regularType = regularNew;
@@ -63569,7 +64704,7 @@
             if (cached) {
                 return cached;
             }
-            var result = createSymbolWithType(prop, undefinedType);
+            var result = createSymbolWithType(prop, missingType);
             result.flags |= 16777216 /* Optional */;
             undefinedProperties.set(prop.escapedName, result);
             return result;
@@ -63588,9 +64723,7 @@
                     }
                 }
             }
-            var stringIndexInfo = getIndexInfoOfType(type, 0 /* String */);
-            var numberIndexInfo = getIndexInfoOfType(type, 1 /* Number */);
-            var result = createAnonymousType(type.symbol, members, ts.emptyArray, ts.emptyArray, stringIndexInfo && createIndexInfo(getWidenedType(stringIndexInfo.type), stringIndexInfo.isReadonly), numberIndexInfo && createIndexInfo(getWidenedType(numberIndexInfo.type), numberIndexInfo.isReadonly));
+            var result = createAnonymousType(type.symbol, members, ts.emptyArray, ts.emptyArray, ts.sameMap(getIndexInfosOfType(type), function (info) { return createIndexInfo(info.keyType, getWidenedType(info.type), info.isReadonly); }));
             result.objectFlags |= (ts.getObjectFlags(type) & (8192 /* JSLiteral */ | 524288 /* NonInferrableType */)); // Retain js literal flag through widening
             return result;
         }
@@ -63688,12 +64821,12 @@
             }
             var diagnostic;
             switch (declaration.kind) {
-                case 217 /* BinaryExpression */:
-                case 164 /* PropertyDeclaration */:
-                case 163 /* PropertySignature */:
+                case 219 /* BinaryExpression */:
+                case 165 /* PropertyDeclaration */:
+                case 164 /* PropertySignature */:
                     diagnostic = noImplicitAny ? ts.Diagnostics.Member_0_implicitly_has_an_1_type : ts.Diagnostics.Member_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage;
                     break;
-                case 161 /* Parameter */:
+                case 162 /* Parameter */:
                     var param = declaration;
                     if (ts.isIdentifier(param.name) &&
                         (ts.isCallSignatureDeclaration(param.parent) || ts.isMethodSignature(param.parent) || ts.isFunctionTypeNode(param.parent)) &&
@@ -63708,23 +64841,23 @@
                         noImplicitAny ? ts.Diagnostics.Rest_parameter_0_implicitly_has_an_any_type : ts.Diagnostics.Rest_parameter_0_implicitly_has_an_any_type_but_a_better_type_may_be_inferred_from_usage :
                         noImplicitAny ? ts.Diagnostics.Parameter_0_implicitly_has_an_1_type : ts.Diagnostics.Parameter_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage;
                     break;
-                case 199 /* BindingElement */:
+                case 201 /* BindingElement */:
                     diagnostic = ts.Diagnostics.Binding_element_0_implicitly_has_an_1_type;
                     if (!noImplicitAny) {
                         // Don't issue a suggestion for binding elements since the codefix doesn't yet support them.
                         return;
                     }
                     break;
-                case 309 /* JSDocFunctionType */:
+                case 312 /* JSDocFunctionType */:
                     error(declaration, ts.Diagnostics.Function_type_which_lacks_return_type_annotation_implicitly_has_an_0_return_type, typeAsString);
                     return;
-                case 252 /* FunctionDeclaration */:
-                case 166 /* MethodDeclaration */:
-                case 165 /* MethodSignature */:
-                case 168 /* GetAccessor */:
-                case 169 /* SetAccessor */:
-                case 209 /* FunctionExpression */:
-                case 210 /* ArrowFunction */:
+                case 254 /* FunctionDeclaration */:
+                case 167 /* MethodDeclaration */:
+                case 166 /* MethodSignature */:
+                case 170 /* GetAccessor */:
+                case 171 /* SetAccessor */:
+                case 211 /* FunctionExpression */:
+                case 212 /* ArrowFunction */:
                     if (noImplicitAny && !declaration.name) {
                         if (wideningKind === 3 /* GeneratorYield */) {
                             error(declaration, ts.Diagnostics.Generator_implicitly_has_yield_type_0_because_it_does_not_yield_any_values_Consider_supplying_a_return_type_annotation, typeAsString);
@@ -63738,7 +64871,7 @@
                         wideningKind === 3 /* GeneratorYield */ ? ts.Diagnostics._0_which_lacks_return_type_annotation_implicitly_has_an_1_yield_type :
                             ts.Diagnostics._0_which_lacks_return_type_annotation_implicitly_has_an_1_return_type;
                     break;
-                case 191 /* MappedType */:
+                case 193 /* MappedType */:
                     if (noImplicitAny) {
                         error(declaration, ts.Diagnostics.Mapped_object_type_implicitly_has_an_any_template_type);
                     }
@@ -63880,8 +65013,8 @@
         }
         function isNonGenericTopLevelType(type) {
             if (type.aliasSymbol && !type.aliasTypeArguments) {
-                var declaration = ts.getDeclarationOfKind(type.aliasSymbol, 255 /* TypeAliasDeclaration */);
-                return !!(declaration && ts.findAncestor(declaration.parent, function (n) { return n.kind === 298 /* SourceFile */ ? true : n.kind === 257 /* ModuleDeclaration */ ? false : "quit"; }));
+                var declaration = ts.getDeclarationOfKind(type.aliasSymbol, 257 /* TypeAliasDeclaration */);
+                return !!(declaration && ts.findAncestor(declaration.parent, function (n) { return n.kind === 300 /* SourceFile */ ? true : n.kind === 259 /* ModuleDeclaration */ ? false : "quit"; }));
             }
             return false;
         }
@@ -63906,8 +65039,8 @@
                 }
                 members.set(name, literalProp);
             });
-            var indexInfo = type.flags & 4 /* String */ ? createIndexInfo(emptyObjectType, /*isReadonly*/ false) : undefined;
-            return createAnonymousType(undefined, members, ts.emptyArray, ts.emptyArray, indexInfo, undefined);
+            var indexInfos = type.flags & 4 /* String */ ? [createIndexInfo(stringType, emptyObjectType, /*isReadonly*/ false)] : ts.emptyArray;
+            return createAnonymousType(undefined, members, ts.emptyArray, ts.emptyArray, indexInfos);
         }
         /**
          * Infer a suitable input type for a homomorphic mapped type { [P in keyof T]: X }. We construct
@@ -63941,7 +65074,7 @@
         function createReverseMappedType(source, target, constraint) {
             // We consider a source type reverse mappable if it has a string index signature or if
             // it has one or more properties and is of a partially inferable type.
-            if (!(getIndexInfoOfType(source, 0 /* String */) || getPropertiesOfType(source).length !== 0 && isPartiallyInferableType(source))) {
+            if (!(getIndexInfoOfType(source, stringType) || getPropertiesOfType(source).length !== 0 && isPartiallyInferableType(source))) {
                 return undefined;
             }
             // For arrays and tuples we infer new arrays and tuples where the reverse mapping has been
@@ -64155,8 +65288,8 @@
             }
             function addMatch(s, p) {
                 var matchType = s === seg ?
-                    getLiteralType(getSourceText(s).slice(pos, p)) :
-                    getTemplateLiteralType(__spreadArray(__spreadArray([sourceTexts[seg].slice(pos)], sourceTexts.slice(seg + 1, s)), [getSourceText(s).slice(0, p)]), sourceTypes.slice(seg, s));
+                    getStringLiteralType(getSourceText(s).slice(pos, p)) :
+                    getTemplateLiteralType(__spreadArray(__spreadArray([sourceTexts[seg].slice(pos)], sourceTexts.slice(seg + 1, s), true), [getSourceText(s).slice(0, p)], false), sourceTypes.slice(seg, s));
                 matches.push(matchType);
                 seg = s;
                 pos = p;
@@ -64475,8 +65608,8 @@
             }
             function getSingleTypeVariableFromIntersectionTypes(types) {
                 var typeVariable;
-                for (var _i = 0, types_16 = types; _i < types_16.length; _i++) {
-                    var type = types_16[_i];
+                for (var _i = 0, types_15 = types; _i < types_15.length; _i++) {
+                    var type = types_15[_i];
                     var t = type.flags & 2097152 /* Intersection */ && ts.find(type.types, function (t) { return !!getInferenceInfoForType(t); });
                     if (!t || typeVariable && t !== typeVariable) {
                         return undefined;
@@ -64606,10 +65739,8 @@
                     // If no inferences can be made to K's constraint, infer from a union of the property types
                     // in the source to the template type X.
                     var propTypes = ts.map(getPropertiesOfType(source), getTypeOfSymbol);
-                    var stringIndexType = getIndexTypeOfType(source, 0 /* String */);
-                    var numberIndexInfo = getNonEnumNumberIndexInfo(source);
-                    var numberIndexType = numberIndexInfo && numberIndexInfo.type;
-                    inferFromTypes(getUnionType(ts.append(ts.append(propTypes, stringIndexType), numberIndexType)), getTemplateTypeFromMappedType(target));
+                    var indexTypes = ts.map(getIndexInfosOfType(source), function (info) { return info !== enumNumberIndexInfo ? info.type : neverType; });
+                    inferFromTypes(getUnionType(ts.concatenate(propTypes, indexTypes)), getTemplateTypeFromMappedType(target));
                     return true;
                 }
                 return false;
@@ -64756,7 +65887,7 @@
                     var saveBivariant = bivariant;
                     var kind = target.declaration ? target.declaration.kind : 0 /* Unknown */;
                     // Once we descend into a bivariant signature we remain bivariant for all nested inferences
-                    bivariant = bivariant || kind === 166 /* MethodDeclaration */ || kind === 165 /* MethodSignature */ || kind === 167 /* Constructor */;
+                    bivariant = bivariant || kind === 167 /* MethodDeclaration */ || kind === 166 /* MethodSignature */ || kind === 169 /* Constructor */;
                     applyToParameterTypes(source, target, inferFromContravariantTypes);
                     bivariant = saveBivariant;
                 }
@@ -64765,27 +65896,41 @@
             function inferFromIndexTypes(source, target) {
                 // Inferences across mapped type index signatures are pretty much the same a inferences to homomorphic variables
                 var priority = (ts.getObjectFlags(source) & ts.getObjectFlags(target) & 32 /* Mapped */) ? 8 /* HomomorphicMappedType */ : 0;
-                var targetStringIndexType = getIndexTypeOfType(target, 0 /* String */);
-                if (targetStringIndexType) {
-                    var sourceIndexType = getIndexTypeOfType(source, 0 /* String */) ||
-                        getImplicitIndexTypeOfType(source, 0 /* String */);
-                    if (sourceIndexType) {
-                        inferWithPriority(sourceIndexType, targetStringIndexType, priority);
+                var indexInfos = getIndexInfosOfType(target);
+                if (isObjectTypeWithInferableIndex(source)) {
+                    for (var _i = 0, indexInfos_4 = indexInfos; _i < indexInfos_4.length; _i++) {
+                        var targetInfo = indexInfos_4[_i];
+                        var propTypes = [];
+                        for (var _a = 0, _b = getPropertiesOfType(source); _a < _b.length; _a++) {
+                            var prop = _b[_a];
+                            if (isApplicableIndexType(getLiteralTypeFromProperty(prop, 8576 /* StringOrNumberLiteralOrUnique */), targetInfo.keyType)) {
+                                var propType = getTypeOfSymbol(prop);
+                                propTypes.push(prop.flags & 16777216 /* Optional */ ? removeMissingOrUndefinedType(propType) : propType);
+                            }
+                        }
+                        for (var _c = 0, _d = getIndexInfosOfType(source); _c < _d.length; _c++) {
+                            var info = _d[_c];
+                            if (isApplicableIndexType(info.keyType, targetInfo.keyType)) {
+                                propTypes.push(info.type);
+                            }
+                        }
+                        if (propTypes.length) {
+                            inferWithPriority(getUnionType(propTypes), targetInfo.type, priority);
+                        }
                     }
                 }
-                var targetNumberIndexType = getIndexTypeOfType(target, 1 /* Number */);
-                if (targetNumberIndexType) {
-                    var sourceIndexType = getIndexTypeOfType(source, 1 /* Number */) ||
-                        getIndexTypeOfType(source, 0 /* String */) ||
-                        getImplicitIndexTypeOfType(source, 1 /* Number */);
-                    if (sourceIndexType) {
-                        inferWithPriority(sourceIndexType, targetNumberIndexType, priority);
+                for (var _e = 0, indexInfos_5 = indexInfos; _e < indexInfos_5.length; _e++) {
+                    var targetInfo = indexInfos_5[_e];
+                    var sourceInfo = getApplicableIndexInfo(source, targetInfo.keyType);
+                    if (sourceInfo) {
+                        inferWithPriority(sourceInfo.type, targetInfo.type, priority);
                     }
                 }
             }
         }
         function isTypeOrBaseIdenticalTo(s, t) {
-            return isTypeIdenticalTo(s, t) || !!(t.flags & 4 /* String */ && s.flags & 128 /* StringLiteral */ || t.flags & 8 /* Number */ && s.flags & 256 /* NumberLiteral */);
+            return exactOptionalPropertyTypes && t === missingType ? s === t :
+                (isTypeIdenticalTo(s, t) || !!(t.flags & 4 /* String */ && s.flags & 128 /* StringLiteral */ || t.flags & 8 /* Number */ && s.flags & 256 /* NumberLiteral */));
         }
         function isTypeCloselyMatchedBy(s, t) {
             return !!(s.flags & 524288 /* Object */ && t.flags & 524288 /* Object */ && s.symbol && s.symbol === t.symbol ||
@@ -64938,7 +66083,7 @@
                 case "BigUint64Array":
                     return ts.Diagnostics.Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_1_or_later;
                 default:
-                    if (node.parent.kind === 290 /* ShorthandPropertyAssignment */) {
+                    if (node.parent.kind === 292 /* ShorthandPropertyAssignment */) {
                         return ts.Diagnostics.No_value_exists_in_scope_for_the_shorthand_property_0_Either_declare_one_or_provide_an_initializer;
                     }
                     else {
@@ -64951,7 +66096,8 @@
             if (!links.resolvedSymbol) {
                 links.resolvedSymbol = !ts.nodeIsMissing(node) &&
                     resolveName(node, node.escapedText, 111551 /* Value */ | 1048576 /* ExportValue */, getCannotFindNameDiagnosticForName(node), node, !ts.isWriteOnlyAccess(node), 
-                    /*excludeGlobals*/ false, ts.Diagnostics.Cannot_find_name_0_Did_you_mean_1) || unknownSymbol;
+                    /*excludeGlobals*/ false, 
+                    /*issueSuggestions*/ true) || unknownSymbol;
             }
             return links.resolvedSymbol;
         }
@@ -64959,7 +66105,7 @@
             // TypeScript 1.0 spec (April 2014): 3.6.3
             // A type query consists of the keyword typeof followed by an expression.
             // The expression is restricted to a single identifier or a sequence of identifiers separated by periods
-            return !!ts.findAncestor(node, function (n) { return n.kind === 177 /* TypeQuery */ ? true : n.kind === 78 /* Identifier */ || n.kind === 158 /* QualifiedName */ ? false : "quit"; });
+            return !!ts.findAncestor(node, function (n) { return n.kind === 179 /* TypeQuery */ ? true : n.kind === 79 /* Identifier */ || n.kind === 159 /* QualifiedName */ ? false : "quit"; });
         }
         // Return the flow cache key for a "dotted name" (i.e. a sequence of identifiers
         // separated by dots). The key consists of the id of the symbol referenced by the
@@ -64967,16 +66113,19 @@
         // The result is undefined if the reference isn't a dotted name.
         function getFlowCacheKey(node, declaredType, initialType, flowContainer) {
             switch (node.kind) {
-                case 78 /* Identifier */:
+                case 79 /* Identifier */:
                     var symbol = getResolvedSymbol(node);
                     return symbol !== unknownSymbol ? (flowContainer ? getNodeId(flowContainer) : "-1") + "|" + getTypeId(declaredType) + "|" + getTypeId(initialType) + "|" + getSymbolId(symbol) : undefined;
-                case 107 /* ThisKeyword */:
+                case 108 /* ThisKeyword */:
                     return "0|" + (flowContainer ? getNodeId(flowContainer) : "-1") + "|" + getTypeId(declaredType) + "|" + getTypeId(initialType);
-                case 226 /* NonNullExpression */:
-                case 208 /* ParenthesizedExpression */:
+                case 228 /* NonNullExpression */:
+                case 210 /* ParenthesizedExpression */:
                     return getFlowCacheKey(node.expression, declaredType, initialType, flowContainer);
-                case 202 /* PropertyAccessExpression */:
-                case 203 /* ElementAccessExpression */:
+                case 159 /* QualifiedName */:
+                    var left = getFlowCacheKey(node.left, declaredType, initialType, flowContainer);
+                    return left && left + "." + node.right.escapedText;
+                case 204 /* PropertyAccessExpression */:
+                case 205 /* ElementAccessExpression */:
                     var propName = getAccessedPropertyName(node);
                     if (propName !== undefined) {
                         var key = getFlowCacheKey(node.expression, declaredType, initialType, flowContainer);
@@ -64987,40 +66136,42 @@
         }
         function isMatchingReference(source, target) {
             switch (target.kind) {
-                case 208 /* ParenthesizedExpression */:
-                case 226 /* NonNullExpression */:
+                case 210 /* ParenthesizedExpression */:
+                case 228 /* NonNullExpression */:
                     return isMatchingReference(source, target.expression);
-                case 217 /* BinaryExpression */:
+                case 219 /* BinaryExpression */:
                     return (ts.isAssignmentExpression(target) && isMatchingReference(source, target.left)) ||
                         (ts.isBinaryExpression(target) && target.operatorToken.kind === 27 /* CommaToken */ && isMatchingReference(source, target.right));
             }
             switch (source.kind) {
-                case 227 /* MetaProperty */:
-                    return target.kind === 227 /* MetaProperty */
+                case 229 /* MetaProperty */:
+                    return target.kind === 229 /* MetaProperty */
                         && source.keywordToken === target.keywordToken
                         && source.name.escapedText === target.name.escapedText;
-                case 78 /* Identifier */:
-                case 79 /* PrivateIdentifier */:
-                    return target.kind === 78 /* Identifier */ && getResolvedSymbol(source) === getResolvedSymbol(target) ||
-                        (target.kind === 250 /* VariableDeclaration */ || target.kind === 199 /* BindingElement */) &&
-                            getExportSymbolOfValueSymbolIfExported(getResolvedSymbol(source)) === getSymbolOfNode(target);
-                case 107 /* ThisKeyword */:
-                    return target.kind === 107 /* ThisKeyword */;
-                case 105 /* SuperKeyword */:
-                    return target.kind === 105 /* SuperKeyword */;
-                case 226 /* NonNullExpression */:
-                case 208 /* ParenthesizedExpression */:
+                case 79 /* Identifier */:
+                case 80 /* PrivateIdentifier */:
+                    return ts.isThisInTypeQuery(source) ?
+                        target.kind === 108 /* ThisKeyword */ :
+                        target.kind === 79 /* Identifier */ && getResolvedSymbol(source) === getResolvedSymbol(target) ||
+                            (target.kind === 252 /* VariableDeclaration */ || target.kind === 201 /* BindingElement */) &&
+                                getExportSymbolOfValueSymbolIfExported(getResolvedSymbol(source)) === getSymbolOfNode(target);
+                case 108 /* ThisKeyword */:
+                    return target.kind === 108 /* ThisKeyword */;
+                case 106 /* SuperKeyword */:
+                    return target.kind === 106 /* SuperKeyword */;
+                case 228 /* NonNullExpression */:
+                case 210 /* ParenthesizedExpression */:
                     return isMatchingReference(source.expression, target);
-                case 202 /* PropertyAccessExpression */:
-                case 203 /* ElementAccessExpression */:
+                case 204 /* PropertyAccessExpression */:
+                case 205 /* ElementAccessExpression */:
                     return ts.isAccessExpression(target) &&
                         getAccessedPropertyName(source) === getAccessedPropertyName(target) &&
                         isMatchingReference(source.expression, target.expression);
-                case 158 /* QualifiedName */:
+                case 159 /* QualifiedName */:
                     return ts.isAccessExpression(target) &&
                         source.right.escapedText === getAccessedPropertyName(target) &&
                         isMatchingReference(source.left, target.expression);
-                case 217 /* BinaryExpression */:
+                case 219 /* BinaryExpression */:
                     return (ts.isBinaryExpression(source) && source.operatorToken.kind === 27 /* CommaToken */ && isMatchingReference(source.right, target));
             }
             return false;
@@ -65028,13 +66179,38 @@
         // Given a source x, check if target matches x or is an && operation with an operand that matches x.
         function containsTruthyCheck(source, target) {
             return isMatchingReference(source, target) ||
-                (target.kind === 217 /* BinaryExpression */ && target.operatorToken.kind === 55 /* AmpersandAmpersandToken */ &&
+                (target.kind === 219 /* BinaryExpression */ && target.operatorToken.kind === 55 /* AmpersandAmpersandToken */ &&
                     (containsTruthyCheck(source, target.left) || containsTruthyCheck(source, target.right)));
         }
+        function getPropertyAccess(expr) {
+            if (ts.isAccessExpression(expr)) {
+                return expr;
+            }
+            if (ts.isIdentifier(expr)) {
+                var symbol = getResolvedSymbol(expr);
+                if (isConstVariable(symbol)) {
+                    var declaration = symbol.valueDeclaration;
+                    // Given 'const x = obj.kind', allow 'x' as an alias for 'obj.kind'
+                    if (ts.isVariableDeclaration(declaration) && !declaration.type && declaration.initializer && ts.isAccessExpression(declaration.initializer)) {
+                        return declaration.initializer;
+                    }
+                    // Given 'const { kind: x } = obj', allow 'x' as an alias for 'obj.kind'
+                    if (ts.isBindingElement(declaration) && !declaration.initializer) {
+                        var parent = declaration.parent.parent;
+                        if (ts.isVariableDeclaration(parent) && !parent.type && parent.initializer && (ts.isIdentifier(parent.initializer) || ts.isAccessExpression(parent.initializer))) {
+                            return declaration;
+                        }
+                    }
+                }
+            }
+            return undefined;
+        }
         function getAccessedPropertyName(access) {
-            return access.kind === 202 /* PropertyAccessExpression */ ? access.name.escapedText :
-                ts.isStringOrNumericLiteralLike(access.argumentExpression) ? ts.escapeLeadingUnderscores(access.argumentExpression.text) :
-                    undefined;
+            var propertyName;
+            return access.kind === 204 /* PropertyAccessExpression */ ? access.name.escapedText :
+                access.kind === 205 /* ElementAccessExpression */ && ts.isStringOrNumericLiteralLike(access.argumentExpression) ? ts.escapeLeadingUnderscores(access.argumentExpression.text) :
+                    access.kind === 201 /* BindingElement */ && (propertyName = getDestructuringPropertyName(access)) ? ts.escapeLeadingUnderscores(propertyName) :
+                        undefined;
         }
         function containsMatchingReference(source, target) {
             while (ts.isAccessExpression(source)) {
@@ -65061,7 +66237,7 @@
                     if (prop.isDiscriminantProperty === undefined) {
                         prop.isDiscriminantProperty =
                             (prop.checkFlags & 192 /* Discriminant */) === 192 /* Discriminant */ &&
-                                !maybeTypeOfKind(getTypeOfSymbol(prop), 465829888 /* Instantiable */);
+                                !maybeTypeOfKind(getTypeOfSymbol(prop), 465829888 /* Instantiable */ & ~134217728 /* TemplateLiteral */);
                     }
                     return !!prop.isDiscriminantProperty;
                 }
@@ -65089,7 +66265,7 @@
         function mapTypesByKeyProperty(types, name) {
             var map = new ts.Map();
             var count = 0;
-            var _loop_20 = function (type) {
+            var _loop_22 = function (type) {
                 if (type.flags & (524288 /* Object */ | 2097152 /* Intersection */ | 58982400 /* InstantiableNonPrimitive */)) {
                     var discriminant = getTypeOfPropertyOfType(type, name);
                     if (discriminant) {
@@ -65113,9 +66289,9 @@
                     }
                 }
             };
-            for (var _i = 0, types_17 = types; _i < types_17.length; _i++) {
-                var type = types_17[_i];
-                var state_8 = _loop_20(type);
+            for (var _i = 0, types_16 = types; _i < types_16.length; _i++) {
+                var type = types_16[_i];
+                var state_8 = _loop_22(type);
                 if (typeof state_8 === "object")
                     return state_8.value;
             }
@@ -65157,7 +66333,7 @@
         }
         function getMatchingUnionConstituentForObjectLiteral(unionType, node) {
             var keyPropertyName = getKeyPropertyName(unionType);
-            var propNode = keyPropertyName && ts.find(node.properties, function (p) { return p.symbol && p.kind === 289 /* PropertyAssignment */ &&
+            var propNode = keyPropertyName && ts.find(node.properties, function (p) { return p.symbol && p.kind === 291 /* PropertyAssignment */ &&
                 p.symbol.escapedName === keyPropertyName && isPossiblyDiscriminantValue(p.initializer); });
             var propType = propNode && getTypeOfExpression(propNode.initializer);
             return propType && getConstituentTypeForKeyType(unionType, propType);
@@ -65174,7 +66350,7 @@
                     }
                 }
             }
-            if (expression.expression.kind === 202 /* PropertyAccessExpression */ &&
+            if (expression.expression.kind === 204 /* PropertyAccessExpression */ &&
                 isOrContainsMatchingReference(reference, expression.expression.expression)) {
                 return true;
             }
@@ -65312,14 +66488,12 @@
                 type;
         }
         function getTypeOfDestructuredProperty(type, name) {
+            var _a;
             var nameType = getLiteralTypeFromPropertyName(name);
             if (!isTypeUsableAsPropertyName(nameType))
                 return errorType;
             var text = getPropertyNameFromType(nameType);
-            return getTypeOfPropertyOfType(type, text) ||
-                isNumericLiteralName(text) && includeUndefinedInIndexSignature(getIndexTypeOfType(type, 1 /* Number */)) ||
-                includeUndefinedInIndexSignature(getIndexTypeOfType(type, 0 /* String */)) ||
-                errorType;
+            return getTypeOfPropertyOfType(type, text) || includeUndefinedInIndexSignature((_a = getApplicableIndexInfoForName(type, text)) === null || _a === void 0 ? void 0 : _a.type) || errorType;
         }
         function getTypeOfDestructuredArrayElement(type, index) {
             return everyType(type, isTupleLikeType) && getTupleElementType(type, index) ||
@@ -65337,15 +66511,15 @@
             return createArrayType(checkIteratedTypeOrElementType(65 /* Destructuring */, type, undefinedType, /*errorNode*/ undefined) || errorType);
         }
         function getAssignedTypeOfBinaryExpression(node) {
-            var isDestructuringDefaultAssignment = node.parent.kind === 200 /* ArrayLiteralExpression */ && isDestructuringAssignmentTarget(node.parent) ||
-                node.parent.kind === 289 /* PropertyAssignment */ && isDestructuringAssignmentTarget(node.parent.parent);
+            var isDestructuringDefaultAssignment = node.parent.kind === 202 /* ArrayLiteralExpression */ && isDestructuringAssignmentTarget(node.parent) ||
+                node.parent.kind === 291 /* PropertyAssignment */ && isDestructuringAssignmentTarget(node.parent.parent);
             return isDestructuringDefaultAssignment ?
                 getTypeWithDefault(getAssignedType(node), node.right) :
                 getTypeOfExpression(node.right);
         }
         function isDestructuringAssignmentTarget(parent) {
-            return parent.parent.kind === 217 /* BinaryExpression */ && parent.parent.left === parent ||
-                parent.parent.kind === 240 /* ForOfStatement */ && parent.parent.initializer === parent;
+            return parent.parent.kind === 219 /* BinaryExpression */ && parent.parent.left === parent ||
+                parent.parent.kind === 242 /* ForOfStatement */ && parent.parent.initializer === parent;
         }
         function getAssignedTypeOfArrayLiteralElement(node, element) {
             return getTypeOfDestructuredArrayElement(getAssignedType(node), node.elements.indexOf(element));
@@ -65362,21 +66536,21 @@
         function getAssignedType(node) {
             var parent = node.parent;
             switch (parent.kind) {
-                case 239 /* ForInStatement */:
+                case 241 /* ForInStatement */:
                     return stringType;
-                case 240 /* ForOfStatement */:
+                case 242 /* ForOfStatement */:
                     return checkRightHandSideOfForOf(parent) || errorType;
-                case 217 /* BinaryExpression */:
+                case 219 /* BinaryExpression */:
                     return getAssignedTypeOfBinaryExpression(parent);
-                case 211 /* DeleteExpression */:
+                case 213 /* DeleteExpression */:
                     return undefinedType;
-                case 200 /* ArrayLiteralExpression */:
+                case 202 /* ArrayLiteralExpression */:
                     return getAssignedTypeOfArrayLiteralElement(parent, node);
-                case 221 /* SpreadElement */:
+                case 223 /* SpreadElement */:
                     return getAssignedTypeOfSpreadExpression(parent);
-                case 289 /* PropertyAssignment */:
+                case 291 /* PropertyAssignment */:
                     return getAssignedTypeOfPropertyAssignment(parent);
-                case 290 /* ShorthandPropertyAssignment */:
+                case 292 /* ShorthandPropertyAssignment */:
                     return getAssignedTypeOfShorthandPropertyAssignment(parent);
             }
             return errorType;
@@ -65384,7 +66558,7 @@
         function getInitialTypeOfBindingElement(node) {
             var pattern = node.parent;
             var parentType = getInitialType(pattern.parent);
-            var type = pattern.kind === 197 /* ObjectBindingPattern */ ?
+            var type = pattern.kind === 199 /* ObjectBindingPattern */ ?
                 getTypeOfDestructuredProperty(parentType, node.propertyName || node.name) :
                 !node.dotDotDotToken ?
                     getTypeOfDestructuredArrayElement(parentType, pattern.elements.indexOf(node)) :
@@ -65402,35 +66576,35 @@
             if (node.initializer) {
                 return getTypeOfInitializer(node.initializer);
             }
-            if (node.parent.parent.kind === 239 /* ForInStatement */) {
+            if (node.parent.parent.kind === 241 /* ForInStatement */) {
                 return stringType;
             }
-            if (node.parent.parent.kind === 240 /* ForOfStatement */) {
+            if (node.parent.parent.kind === 242 /* ForOfStatement */) {
                 return checkRightHandSideOfForOf(node.parent.parent) || errorType;
             }
             return errorType;
         }
         function getInitialType(node) {
-            return node.kind === 250 /* VariableDeclaration */ ?
+            return node.kind === 252 /* VariableDeclaration */ ?
                 getInitialTypeOfVariableDeclaration(node) :
                 getInitialTypeOfBindingElement(node);
         }
         function isEmptyArrayAssignment(node) {
-            return node.kind === 250 /* VariableDeclaration */ && node.initializer &&
+            return node.kind === 252 /* VariableDeclaration */ && node.initializer &&
                 isEmptyArrayLiteral(node.initializer) ||
-                node.kind !== 199 /* BindingElement */ && node.parent.kind === 217 /* BinaryExpression */ &&
+                node.kind !== 201 /* BindingElement */ && node.parent.kind === 219 /* BinaryExpression */ &&
                     isEmptyArrayLiteral(node.parent.right);
         }
         function getReferenceCandidate(node) {
             switch (node.kind) {
-                case 208 /* ParenthesizedExpression */:
+                case 210 /* ParenthesizedExpression */:
                     return getReferenceCandidate(node.expression);
-                case 217 /* BinaryExpression */:
+                case 219 /* BinaryExpression */:
                     switch (node.operatorToken.kind) {
-                        case 62 /* EqualsToken */:
-                        case 74 /* BarBarEqualsToken */:
-                        case 75 /* AmpersandAmpersandEqualsToken */:
-                        case 76 /* QuestionQuestionEqualsToken */:
+                        case 63 /* EqualsToken */:
+                        case 75 /* BarBarEqualsToken */:
+                        case 76 /* AmpersandAmpersandEqualsToken */:
+                        case 77 /* QuestionQuestionEqualsToken */:
                             return getReferenceCandidate(node.left);
                         case 27 /* CommaToken */:
                             return getReferenceCandidate(node.right);
@@ -65440,13 +66614,13 @@
         }
         function getReferenceRoot(node) {
             var parent = node.parent;
-            return parent.kind === 208 /* ParenthesizedExpression */ ||
-                parent.kind === 217 /* BinaryExpression */ && parent.operatorToken.kind === 62 /* EqualsToken */ && parent.left === node ||
-                parent.kind === 217 /* BinaryExpression */ && parent.operatorToken.kind === 27 /* CommaToken */ && parent.right === node ?
+            return parent.kind === 210 /* ParenthesizedExpression */ ||
+                parent.kind === 219 /* BinaryExpression */ && parent.operatorToken.kind === 63 /* EqualsToken */ && parent.left === node ||
+                parent.kind === 219 /* BinaryExpression */ && parent.operatorToken.kind === 27 /* CommaToken */ && parent.right === node ?
                 getReferenceRoot(parent) : node;
         }
         function getTypeOfSwitchClause(clause) {
-            if (clause.kind === 285 /* CaseClause */) {
+            if (clause.kind === 287 /* CaseClause */) {
                 return getRegularTypeOfLiteralType(getTypeOfExpression(clause.expression));
             }
             return neverType;
@@ -65466,7 +66640,7 @@
             var witnesses = [];
             for (var _i = 0, _a = switchStatement.caseBlock.clauses; _i < _a.length; _i++) {
                 var clause = _a[_i];
-                if (clause.kind === 285 /* CaseClause */) {
+                if (clause.kind === 287 /* CaseClause */) {
                     if (ts.isStringLiteralLike(clause.expression)) {
                         witnesses.push(clause.expression.text);
                         continue;
@@ -65539,6 +66713,9 @@
             }
             return type.flags & 131072 /* Never */ || f(type) ? type : neverType;
         }
+        function removeType(type, targetType) {
+            return filterType(type, function (t) { return t !== targetType; });
+        }
         function countTypes(type) {
             return type.flags & 1048576 /* Union */ ? type.types.length : 1;
         }
@@ -65553,8 +66730,8 @@
             var types = origin && origin.flags & 1048576 /* Union */ ? origin.types : type.types;
             var mappedTypes;
             var changed = false;
-            for (var _i = 0, types_18 = types; _i < types_18.length; _i++) {
-                var t = types_18[_i];
+            for (var _i = 0, types_17 = types; _i < types_17.length; _i++) {
+                var t = types_17[_i];
                 var mapped = t.flags & 1048576 /* Union */ ? mapType(t, mapper, noReductions) : mapper(t);
                 changed || (changed = t !== mapped);
                 if (mapped) {
@@ -65641,8 +66818,8 @@
         }
         function isEvolvingArrayTypeList(types) {
             var hasEvolvingArrayType = false;
-            for (var _i = 0, types_19 = types; _i < types_19.length; _i++) {
-                var t = types_19[_i];
+            for (var _i = 0, types_18 = types; _i < types_18.length; _i++) {
+                var t = types_18[_i];
                 if (!(t.flags & 131072 /* Never */)) {
                     if (!(ts.getObjectFlags(t) & 256 /* EvolvingArray */)) {
                         return false;
@@ -65658,21 +66835,21 @@
             var root = getReferenceRoot(node);
             var parent = root.parent;
             var isLengthPushOrUnshift = ts.isPropertyAccessExpression(parent) && (parent.name.escapedText === "length" ||
-                parent.parent.kind === 204 /* CallExpression */
+                parent.parent.kind === 206 /* CallExpression */
                     && ts.isIdentifier(parent.name)
                     && ts.isPushOrUnshiftIdentifier(parent.name));
-            var isElementAssignment = parent.kind === 203 /* ElementAccessExpression */ &&
+            var isElementAssignment = parent.kind === 205 /* ElementAccessExpression */ &&
                 parent.expression === root &&
-                parent.parent.kind === 217 /* BinaryExpression */ &&
-                parent.parent.operatorToken.kind === 62 /* EqualsToken */ &&
+                parent.parent.kind === 219 /* BinaryExpression */ &&
+                parent.parent.operatorToken.kind === 63 /* EqualsToken */ &&
                 parent.parent.left === parent &&
                 !ts.isAssignmentTarget(parent.parent) &&
                 isTypeAssignableToKind(getTypeOfExpression(parent.argumentExpression), 296 /* NumberLike */);
             return isLengthPushOrUnshift || isElementAssignment;
         }
         function isDeclarationWithExplicitTypeAnnotation(declaration) {
-            return (declaration.kind === 250 /* VariableDeclaration */ || declaration.kind === 161 /* Parameter */ ||
-                declaration.kind === 164 /* PropertyDeclaration */ || declaration.kind === 163 /* PropertySignature */) &&
+            return (declaration.kind === 252 /* VariableDeclaration */ || declaration.kind === 162 /* Parameter */ ||
+                declaration.kind === 165 /* PropertyDeclaration */ || declaration.kind === 164 /* PropertySignature */) &&
                 !!ts.getEffectiveTypeAnnotationNode(declaration);
         }
         function getExplicitTypeOfSymbol(symbol, diagnostic) {
@@ -65691,7 +66868,7 @@
                     if (isDeclarationWithExplicitTypeAnnotation(declaration)) {
                         return getTypeOfSymbol(symbol);
                     }
-                    if (ts.isVariableDeclaration(declaration) && declaration.parent.parent.kind === 240 /* ForOfStatement */) {
+                    if (ts.isVariableDeclaration(declaration) && declaration.parent.parent.kind === 242 /* ForOfStatement */) {
                         var statement = declaration.parent.parent;
                         var expressionType = getTypeOfDottedName(statement.expression, /*diagnostic*/ undefined);
                         if (expressionType) {
@@ -65712,14 +66889,14 @@
         function getTypeOfDottedName(node, diagnostic) {
             if (!(node.flags & 16777216 /* InWithStatement */)) {
                 switch (node.kind) {
-                    case 78 /* Identifier */:
+                    case 79 /* Identifier */:
                         var symbol = getExportSymbolOfValueSymbolIfExported(getResolvedSymbol(node));
                         return getExplicitTypeOfSymbol(symbol.flags & 2097152 /* Alias */ ? resolveAlias(symbol) : symbol, diagnostic);
-                    case 107 /* ThisKeyword */:
+                    case 108 /* ThisKeyword */:
                         return getExplicitThisType(node);
-                    case 105 /* SuperKeyword */:
+                    case 106 /* SuperKeyword */:
                         return checkSuperExpression(node);
-                    case 202 /* PropertyAccessExpression */: {
+                    case 204 /* PropertyAccessExpression */: {
                         var type = getTypeOfDottedName(node.expression, diagnostic);
                         if (type) {
                             var name = node.name;
@@ -65737,7 +66914,7 @@
                         }
                         return undefined;
                     }
-                    case 208 /* ParenthesizedExpression */:
+                    case 210 /* ParenthesizedExpression */:
                         return getTypeOfDottedName(node.expression, diagnostic);
                 }
             }
@@ -65751,10 +66928,10 @@
                 // circularities in control flow analysis, we use getTypeOfDottedName when resolving the call
                 // target expression of an assertion.
                 var funcType = void 0;
-                if (node.parent.kind === 234 /* ExpressionStatement */) {
+                if (node.parent.kind === 236 /* ExpressionStatement */) {
                     funcType = getTypeOfDottedName(node.expression, /*diagnostic*/ undefined);
                 }
-                else if (node.expression.kind !== 105 /* SuperKeyword */) {
+                else if (node.expression.kind !== 106 /* SuperKeyword */) {
                     if (ts.isOptionalChain(node)) {
                         funcType = checkNonNullType(getOptionalExpressionType(checkExpression(node.expression), node.expression), node.expression);
                     }
@@ -65795,7 +66972,7 @@
         }
         function isFalseExpression(expr) {
             var node = ts.skipParentheses(expr);
-            return node.kind === 94 /* FalseKeyword */ || node.kind === 217 /* BinaryExpression */ && (node.operatorToken.kind === 55 /* AmpersandAmpersandToken */ && (isFalseExpression(node.left) || isFalseExpression(node.right)) ||
+            return node.kind === 95 /* FalseKeyword */ || node.kind === 219 /* BinaryExpression */ && (node.operatorToken.kind === 55 /* AmpersandAmpersandToken */ && (isFalseExpression(node.left) || isFalseExpression(node.right)) ||
                 node.operatorToken.kind === 56 /* BarBarToken */ && isFalseExpression(node.left) && isFalseExpression(node.right));
         }
         function isReachableFlowNodeWorker(flow, noCacheCheck) {
@@ -65883,7 +67060,7 @@
                     flow = flow.antecedent;
                 }
                 else if (flags & 512 /* Call */) {
-                    if (flow.node.expression.kind === 105 /* SuperKeyword */) {
+                    if (flow.node.expression.kind === 106 /* SuperKeyword */) {
                         return true;
                     }
                     flow = flow.antecedent;
@@ -65910,15 +67087,28 @@
                 }
             }
         }
-        function getFlowTypeOfReference(reference, declaredType, initialType, flowContainer, couldBeUninitialized) {
+        function isConstantReference(node) {
+            switch (node.kind) {
+                case 79 /* Identifier */:
+                    var symbol = getResolvedSymbol(node);
+                    return isConstVariable(symbol) || !!symbol.valueDeclaration && ts.getRootDeclaration(symbol.valueDeclaration).kind === 162 /* Parameter */ && !isParameterAssigned(symbol);
+                case 204 /* PropertyAccessExpression */:
+                case 205 /* ElementAccessExpression */:
+                    // The resolvedSymbol property is initialized by checkPropertyAccess or checkElementAccess before we get here.
+                    return isConstantReference(node.expression) && isReadonlySymbol(getNodeLinks(node).resolvedSymbol || unknownSymbol);
+            }
+            return false;
+        }
+        function getFlowTypeOfReference(reference, declaredType, initialType, flowContainer) {
             if (initialType === void 0) { initialType = declaredType; }
             var key;
             var isKeySet = false;
             var flowDepth = 0;
+            var inlineLevel = 0;
             if (flowAnalysisDisabled) {
                 return errorType;
             }
-            if (!reference.flowNode || !couldBeUninitialized && !(declaredType.flags & 536624127 /* Narrowable */)) {
+            if (!reference.flowNode) {
                 return declaredType;
             }
             flowInvocationCount++;
@@ -65930,7 +67120,7 @@
             // on empty arrays are possible without implicit any errors and new element types can be inferred without
             // type mismatch errors.
             var resultType = ts.getObjectFlags(evolvedType) & 256 /* EvolvingArray */ && isEvolvingArrayOperationTarget(reference) ? autoArrayType : finalizeEvolvingArrayType(evolvedType);
-            if (resultType === unreachableNeverType || reference.parent && reference.parent.kind === 226 /* NonNullExpression */ && !(resultType.flags & 131072 /* Never */) && getTypeWithFacts(resultType, 2097152 /* NEUndefinedOrNull */).flags & 131072 /* Never */) {
+            if (resultType === unreachableNeverType || reference.parent && reference.parent.kind === 228 /* NonNullExpression */ && !(resultType.flags & 131072 /* Never */) && getTypeWithFacts(resultType, 2097152 /* NEUndefinedOrNull */).flags & 131072 /* Never */) {
                 return declaredType;
             }
             return resultType;
@@ -66014,9 +67204,9 @@
                         // Check if we should continue with the control flow of the containing function.
                         var container = flow.node;
                         if (container && container !== flowContainer &&
-                            reference.kind !== 202 /* PropertyAccessExpression */ &&
-                            reference.kind !== 203 /* ElementAccessExpression */ &&
-                            reference.kind !== 107 /* ThisKeyword */) {
+                            reference.kind !== 204 /* PropertyAccessExpression */ &&
+                            reference.kind !== 205 /* ElementAccessExpression */ &&
+                            reference.kind !== 108 /* ThisKeyword */) {
                             flow = container.flowNode;
                             continue;
                         }
@@ -66040,7 +67230,7 @@
             }
             function getInitialOrAssignedType(flow) {
                 var node = flow.node;
-                return getNarrowableTypeForReference(node.kind === 250 /* VariableDeclaration */ || node.kind === 199 /* BindingElement */ ?
+                return getNarrowableTypeForReference(node.kind === 252 /* VariableDeclaration */ || node.kind === 201 /* BindingElement */ ?
                     getInitialType(node) :
                     getAssignedType(node), reference);
             }
@@ -66080,14 +67270,14 @@
                     // in which case we continue control flow analysis back to the function's declaration
                     if (ts.isVariableDeclaration(node) && (ts.isInJSFile(node) || ts.isVarConst(node))) {
                         var init = ts.getDeclaredExpandoInitializer(node);
-                        if (init && (init.kind === 209 /* FunctionExpression */ || init.kind === 210 /* ArrowFunction */)) {
+                        if (init && (init.kind === 211 /* FunctionExpression */ || init.kind === 212 /* ArrowFunction */)) {
                             return getTypeAtFlowNode(flow.antecedent);
                         }
                     }
                     return declaredType;
                 }
                 // for (const _ in ref) acts as a nonnull on ref
-                if (ts.isVariableDeclaration(node) && node.parent.parent.kind === 239 /* ForInStatement */ && isMatchingReference(reference, node.parent.parent.expression)) {
+                if (ts.isVariableDeclaration(node) && node.parent.parent.kind === 241 /* ForInStatement */ && isMatchingReference(reference, node.parent.parent.expression)) {
                     return getNonNullableTypeIfNeeded(getTypeFromFlowType(getTypeAtFlowNode(flow.antecedent)));
                 }
                 // Assignment doesn't affect reference
@@ -66095,10 +67285,10 @@
             }
             function narrowTypeByAssertion(type, expr) {
                 var node = ts.skipParentheses(expr);
-                if (node.kind === 94 /* FalseKeyword */) {
+                if (node.kind === 95 /* FalseKeyword */) {
                     return unreachableNeverType;
                 }
-                if (node.kind === 217 /* BinaryExpression */) {
+                if (node.kind === 219 /* BinaryExpression */) {
                     if (node.operatorToken.kind === 55 /* AmpersandAmpersandToken */) {
                         return narrowTypeByAssertion(narrowTypeByAssertion(type, node.left), node.right);
                     }
@@ -66129,7 +67319,7 @@
             function getTypeAtFlowArrayMutation(flow) {
                 if (declaredType === autoType || declaredType === autoArrayType) {
                     var node = flow.node;
-                    var expr = node.kind === 204 /* CallExpression */ ?
+                    var expr = node.kind === 206 /* CallExpression */ ?
                         node.expression.expression :
                         node.left.expression;
                     if (isMatchingReference(reference, getReferenceCandidate(expr))) {
@@ -66137,7 +67327,7 @@
                         var type = getTypeFromFlowType(flowType);
                         if (ts.getObjectFlags(type) & 256 /* EvolvingArray */) {
                             var evolvedType_1 = type;
-                            if (node.kind === 204 /* CallExpression */) {
+                            if (node.kind === 206 /* CallExpression */) {
                                 for (var _i = 0, _a = node.arguments; _i < _a.length; _i++) {
                                     var arg = _a[_i];
                                     evolvedType_1 = addEvolvingArrayElementType(evolvedType_1, arg);
@@ -66185,7 +67375,7 @@
                 if (isMatchingReference(reference, expr)) {
                     type = narrowTypeBySwitchOnDiscriminant(type, flow.switchStatement, flow.clauseStart, flow.clauseEnd);
                 }
-                else if (expr.kind === 212 /* TypeOfExpression */ && isMatchingReference(reference, expr.expression)) {
+                else if (expr.kind === 214 /* TypeOfExpression */ && isMatchingReference(reference, expr.expression)) {
                     type = narrowBySwitchOnTypeOf(type, flow.switchStatement, flow.clauseStart, flow.clauseEnd);
                 }
                 else {
@@ -66193,12 +67383,13 @@
                         if (optionalChainContainsReference(expr, reference)) {
                             type = narrowTypeBySwitchOptionalChainContainment(type, flow.switchStatement, flow.clauseStart, flow.clauseEnd, function (t) { return !(t.flags & (32768 /* Undefined */ | 131072 /* Never */)); });
                         }
-                        else if (expr.kind === 212 /* TypeOfExpression */ && optionalChainContainsReference(expr.expression, reference)) {
+                        else if (expr.kind === 214 /* TypeOfExpression */ && optionalChainContainsReference(expr.expression, reference)) {
                             type = narrowTypeBySwitchOptionalChainContainment(type, flow.switchStatement, flow.clauseStart, flow.clauseEnd, function (t) { return !(t.flags & 131072 /* Never */ || t.flags & 128 /* StringLiteral */ && t.value === "undefined"); });
                         }
                     }
-                    if (isMatchingReferenceDiscriminant(expr, type)) {
-                        type = narrowTypeBySwitchOnDiscriminantProperty(type, expr, flow.switchStatement, flow.clauseStart, flow.clauseEnd);
+                    var access = getDiscriminantPropertyAccess(expr, type);
+                    if (access) {
+                        type = narrowTypeBySwitchOnDiscriminantProperty(type, access, flow.switchStatement, flow.clauseStart, flow.clauseEnd);
                     }
                 }
                 return createFlowType(type, isIncomplete(flowType));
@@ -66353,16 +67544,13 @@
                 }
                 return result;
             }
-            function isMatchingReferenceDiscriminant(expr, computedType) {
+            function getDiscriminantPropertyAccess(expr, computedType) {
+                var access, name;
                 var type = declaredType.flags & 1048576 /* Union */ ? declaredType : computedType;
-                if (!(type.flags & 1048576 /* Union */) || !ts.isAccessExpression(expr)) {
-                    return false;
-                }
-                var name = getAccessedPropertyName(expr);
-                if (name === undefined) {
-                    return false;
-                }
-                return isMatchingReference(reference, expr.expression) && isDiscriminantProperty(type, name);
+                return type.flags & 1048576 /* Union */ && (access = getPropertyAccess(expr)) && (name = getAccessedPropertyName(access)) &&
+                    isMatchingReference(reference, ts.isAccessExpression(access) ? access.expression : access.parent.parent.initializer) &&
+                    isDiscriminantProperty(type, name) ?
+                    access : undefined;
             }
             function narrowTypeByDiscriminant(type, access, narrowType) {
                 var propName = getAccessedPropertyName(access);
@@ -66385,10 +67573,10 @@
                 if ((operator === 36 /* EqualsEqualsEqualsToken */ || operator === 37 /* ExclamationEqualsEqualsToken */) && type.flags & 1048576 /* Union */) {
                     var keyPropertyName = getKeyPropertyName(type);
                     if (keyPropertyName && keyPropertyName === getAccessedPropertyName(access)) {
-                        var candidate_2 = getConstituentTypeForKeyType(type, getTypeOfExpression(value));
-                        if (candidate_2) {
-                            return operator === (assumeTrue ? 36 /* EqualsEqualsEqualsToken */ : 37 /* ExclamationEqualsEqualsToken */) ? candidate_2 :
-                                isUnitType(getTypeOfPropertyOfType(candidate_2, keyPropertyName) || unknownType) ? filterType(type, function (t) { return t !== candidate_2; }) :
+                        var candidate = getConstituentTypeForKeyType(type, getTypeOfExpression(value));
+                        if (candidate) {
+                            return operator === (assumeTrue ? 36 /* EqualsEqualsEqualsToken */ : 37 /* ExclamationEqualsEqualsToken */) ? candidate :
+                                isUnitType(getTypeOfPropertyOfType(candidate, keyPropertyName) || unknownType) ? removeType(type, candidate) :
                                     type;
                         }
                     }
@@ -66412,37 +67600,34 @@
                 if (strictNullChecks && assumeTrue && optionalChainContainsReference(expr, reference)) {
                     type = getTypeWithFacts(type, 2097152 /* NEUndefinedOrNull */);
                 }
-                if (isMatchingReferenceDiscriminant(expr, type)) {
-                    return narrowTypeByDiscriminant(type, expr, function (t) { return getTypeWithFacts(t, assumeTrue ? 4194304 /* Truthy */ : 8388608 /* Falsy */); });
+                var access = getDiscriminantPropertyAccess(expr, type);
+                if (access) {
+                    return narrowTypeByDiscriminant(type, access, function (t) { return getTypeWithFacts(t, assumeTrue ? 4194304 /* Truthy */ : 8388608 /* Falsy */); });
                 }
                 return type;
             }
             function isTypePresencePossible(type, propName, assumeTrue) {
-                if (getIndexInfoOfType(type, 0 /* String */)) {
-                    return true;
-                }
                 var prop = getPropertyOfType(type, propName);
                 if (prop) {
                     return prop.flags & 16777216 /* Optional */ ? true : assumeTrue;
                 }
-                return !assumeTrue;
+                return getApplicableIndexInfoForName(type, propName) ? true : !assumeTrue;
             }
-            function narrowByInKeyword(type, literal, assumeTrue) {
+            function narrowByInKeyword(type, name, assumeTrue) {
                 if (type.flags & 1048576 /* Union */
                     || type.flags & 524288 /* Object */ && declaredType !== type
                     || isThisTypeParameter(type)
                     || type.flags & 2097152 /* Intersection */ && ts.every(type.types, function (t) { return t.symbol !== globalThisSymbol; })) {
-                    var propName_1 = ts.escapeLeadingUnderscores(literal.text);
-                    return filterType(type, function (t) { return isTypePresencePossible(t, propName_1, assumeTrue); });
+                    return filterType(type, function (t) { return isTypePresencePossible(t, name, assumeTrue); });
                 }
                 return type;
             }
             function narrowTypeByBinaryExpression(type, expr, assumeTrue) {
                 switch (expr.operatorToken.kind) {
-                    case 62 /* EqualsToken */:
-                    case 74 /* BarBarEqualsToken */:
-                    case 75 /* AmpersandAmpersandEqualsToken */:
-                    case 76 /* QuestionQuestionEqualsToken */:
+                    case 63 /* EqualsToken */:
+                    case 75 /* BarBarEqualsToken */:
+                    case 76 /* AmpersandAmpersandEqualsToken */:
+                    case 77 /* QuestionQuestionEqualsToken */:
                         return narrowTypeByTruthiness(narrowType(type, expr.right, assumeTrue), expr.left, assumeTrue);
                     case 34 /* EqualsEqualsToken */:
                     case 35 /* ExclamationEqualsToken */:
@@ -66451,10 +67636,10 @@
                         var operator = expr.operatorToken.kind;
                         var left = getReferenceCandidate(expr.left);
                         var right = getReferenceCandidate(expr.right);
-                        if (left.kind === 212 /* TypeOfExpression */ && ts.isStringLiteralLike(right)) {
+                        if (left.kind === 214 /* TypeOfExpression */ && ts.isStringLiteralLike(right)) {
                             return narrowTypeByTypeof(type, left, operator, right, assumeTrue);
                         }
-                        if (right.kind === 212 /* TypeOfExpression */ && ts.isStringLiteralLike(left)) {
+                        if (right.kind === 214 /* TypeOfExpression */ && ts.isStringLiteralLike(left)) {
                             return narrowTypeByTypeof(type, right, operator, left, assumeTrue);
                         }
                         if (isMatchingReference(reference, left)) {
@@ -66471,11 +67656,13 @@
                                 type = narrowTypeByOptionalChainContainment(type, operator, left, assumeTrue);
                             }
                         }
-                        if (isMatchingReferenceDiscriminant(left, type)) {
-                            return narrowTypeByDiscriminantProperty(type, left, operator, right, assumeTrue);
+                        var leftAccess = getDiscriminantPropertyAccess(left, type);
+                        if (leftAccess) {
+                            return narrowTypeByDiscriminantProperty(type, leftAccess, operator, right, assumeTrue);
                         }
-                        if (isMatchingReferenceDiscriminant(right, type)) {
-                            return narrowTypeByDiscriminantProperty(type, right, operator, left, assumeTrue);
+                        var rightAccess = getDiscriminantPropertyAccess(right, type);
+                        if (rightAccess) {
+                            return narrowTypeByDiscriminantProperty(type, rightAccess, operator, left, assumeTrue);
                         }
                         if (isMatchingConstructorReference(left)) {
                             return narrowTypeByConstructor(type, operator, right, assumeTrue);
@@ -66484,16 +67671,35 @@
                             return narrowTypeByConstructor(type, operator, left, assumeTrue);
                         }
                         break;
-                    case 101 /* InstanceOfKeyword */:
+                    case 102 /* InstanceOfKeyword */:
                         return narrowTypeByInstanceof(type, expr, assumeTrue);
-                    case 100 /* InKeyword */:
+                    case 101 /* InKeyword */:
                         var target = getReferenceCandidate(expr.right);
-                        if (ts.isStringLiteralLike(expr.left) && isMatchingReference(reference, target)) {
-                            return narrowByInKeyword(type, expr.left, assumeTrue);
+                        var leftType = getTypeOfNode(expr.left);
+                        if (leftType.flags & 128 /* StringLiteral */) {
+                            var name = ts.escapeLeadingUnderscores(leftType.value);
+                            if (containsMissingType(type) && ts.isAccessExpression(reference) && isMatchingReference(reference.expression, target) &&
+                                getAccessedPropertyName(reference) === name) {
+                                return getTypeWithFacts(type, assumeTrue ? 524288 /* NEUndefined */ : 65536 /* EQUndefined */);
+                            }
+                            if (isMatchingReference(reference, target)) {
+                                return narrowByInKeyword(type, name, assumeTrue);
+                            }
                         }
                         break;
                     case 27 /* CommaToken */:
                         return narrowType(type, expr.right, assumeTrue);
+                    // Ordinarily we won't see && and || expressions in control flow analysis because the Binder breaks those
+                    // expressions down to individual conditional control flows. However, we may encounter them when analyzing
+                    // aliased conditional expressions.
+                    case 55 /* AmpersandAmpersandToken */:
+                        return assumeTrue ?
+                            narrowType(narrowType(type, expr.left, /*assumeTrue*/ true), expr.right, /*assumeTrue*/ true) :
+                            getUnionType([narrowType(type, expr.left, /*assumeTrue*/ false), narrowType(type, expr.right, /*assumeTrue*/ false)]);
+                    case 56 /* BarBarToken */:
+                        return assumeTrue ?
+                            getUnionType([narrowType(type, expr.left, /*assumeTrue*/ true), narrowType(type, expr.right, /*assumeTrue*/ true)]) :
+                            narrowType(narrowType(type, expr.left, /*assumeTrue*/ false), expr.right, /*assumeTrue*/ false);
                 }
                 return type;
             }
@@ -66573,7 +67779,7 @@
                 if (assumeTrue && type.flags & 2 /* Unknown */ && literal.text === "object") {
                     // The pattern x && typeof x === 'object', where x is of type unknown, narrows x to type object. We don't
                     // need to check for the reverse typeof x === 'object' && x since that already narrows correctly.
-                    if (typeOfExpr.parent.parent.kind === 217 /* BinaryExpression */) {
+                    if (typeOfExpr.parent.parent.kind === 219 /* BinaryExpression */) {
                         var expr = typeOfExpr.parent.parent;
                         if (expr.operatorToken.kind === 55 /* AmpersandAmpersandToken */ && expr.right === typeOfExpr.parent && containsTruthyCheck(reference, expr.left)) {
                             return nonPrimitiveType;
@@ -66848,6 +68054,16 @@
                         return narrowTypeByTypePredicate(type, predicate, callExpression, assumeTrue);
                     }
                 }
+                if (containsMissingType(type) && ts.isAccessExpression(reference) && ts.isPropertyAccessExpression(callExpression.expression)) {
+                    var callAccess = callExpression.expression;
+                    if (isMatchingReference(reference.expression, getReferenceCandidate(callAccess.expression)) &&
+                        ts.isIdentifier(callAccess.name) && callAccess.name.escapedText === "hasOwnProperty" && callExpression.arguments.length === 1) {
+                        var argument = callExpression.arguments[0];
+                        if (ts.isStringLiteralLike(argument) && getAccessedPropertyName(reference) === ts.escapeLeadingUnderscores(argument.text)) {
+                            return getTypeWithFacts(type, assumeTrue ? 524288 /* NEUndefined */ : 65536 /* EQUndefined */);
+                        }
+                    }
+                }
                 return type;
             }
             function narrowTypeByTypePredicate(type, predicate, callExpression, assumeTrue) {
@@ -66862,8 +68078,9 @@
                             !(getTypeFacts(predicate.type) & 65536 /* EQUndefined */)) {
                             type = getTypeWithFacts(type, 2097152 /* NEUndefinedOrNull */);
                         }
-                        if (isMatchingReferenceDiscriminant(predicateArgument, type)) {
-                            return narrowTypeByDiscriminant(type, predicateArgument, function (t) { return getNarrowedType(t, predicate.type, assumeTrue, isTypeSubtypeOf); });
+                        var access = getDiscriminantPropertyAccess(predicateArgument, type);
+                        if (access) {
+                            return narrowTypeByDiscriminant(type, access, function (t) { return getNarrowedType(t, predicate.type, assumeTrue, isTypeSubtypeOf); });
                         }
                     }
                 }
@@ -66878,20 +68095,35 @@
                     return narrowTypeByOptionality(type, expr, assumeTrue);
                 }
                 switch (expr.kind) {
-                    case 78 /* Identifier */:
-                    case 107 /* ThisKeyword */:
-                    case 105 /* SuperKeyword */:
-                    case 202 /* PropertyAccessExpression */:
-                    case 203 /* ElementAccessExpression */:
+                    case 79 /* Identifier */:
+                        // When narrowing a reference to a const variable, non-assigned parameter, or readonly property, we inline
+                        // up to five levels of aliased conditional expressions that are themselves declared as const variables.
+                        if (!isMatchingReference(reference, expr) && inlineLevel < 5) {
+                            var symbol = getResolvedSymbol(expr);
+                            if (isConstVariable(symbol)) {
+                                var declaration = symbol.valueDeclaration;
+                                if (declaration && ts.isVariableDeclaration(declaration) && !declaration.type && declaration.initializer && isConstantReference(reference)) {
+                                    inlineLevel++;
+                                    var result = narrowType(type, declaration.initializer, assumeTrue);
+                                    inlineLevel--;
+                                    return result;
+                                }
+                            }
+                        }
+                    // falls through
+                    case 108 /* ThisKeyword */:
+                    case 106 /* SuperKeyword */:
+                    case 204 /* PropertyAccessExpression */:
+                    case 205 /* ElementAccessExpression */:
                         return narrowTypeByTruthiness(type, expr, assumeTrue);
-                    case 204 /* CallExpression */:
+                    case 206 /* CallExpression */:
                         return narrowTypeByCallExpression(type, expr, assumeTrue);
-                    case 208 /* ParenthesizedExpression */:
-                    case 226 /* NonNullExpression */:
+                    case 210 /* ParenthesizedExpression */:
+                    case 228 /* NonNullExpression */:
                         return narrowType(type, expr.expression, assumeTrue);
-                    case 217 /* BinaryExpression */:
+                    case 219 /* BinaryExpression */:
                         return narrowTypeByBinaryExpression(type, expr, assumeTrue);
-                    case 215 /* PrefixUnaryExpression */:
+                    case 217 /* PrefixUnaryExpression */:
                         if (expr.operator === 53 /* ExclamationToken */) {
                             return narrowType(type, expr.operand, !assumeTrue);
                         }
@@ -66903,8 +68135,9 @@
                 if (isMatchingReference(reference, expr)) {
                     return getTypeWithFacts(type, assumePresent ? 2097152 /* NEUndefinedOrNull */ : 262144 /* EQUndefinedOrNull */);
                 }
-                if (isMatchingReferenceDiscriminant(expr, type)) {
-                    return narrowTypeByDiscriminant(type, expr, function (t) { return getTypeWithFacts(t, assumePresent ? 2097152 /* NEUndefinedOrNull */ : 262144 /* EQUndefinedOrNull */); });
+                var access = getDiscriminantPropertyAccess(expr, type);
+                if (access) {
+                    return narrowTypeByDiscriminant(type, access, function (t) { return getTypeWithFacts(t, assumePresent ? 2097152 /* NEUndefinedOrNull */ : 262144 /* EQUndefinedOrNull */); });
                 }
                 return type;
             }
@@ -66915,7 +68148,7 @@
             // an dotted name expression, and if the location is not an assignment target, obtain the type
             // of the expression (which will reflect control flow analysis). If the expression indeed
             // resolved to the given symbol, return the narrowed type.
-            if (location.kind === 78 /* Identifier */ || location.kind === 79 /* PrivateIdentifier */) {
+            if (location.kind === 79 /* Identifier */ || location.kind === 80 /* PrivateIdentifier */) {
                 if (ts.isRightSideOfQualifiedNameOrPropertyAccess(location)) {
                     location = location.parent;
                 }
@@ -66934,14 +68167,14 @@
             // to it at the given location. Since we have no control flow information for the
             // hypothetical reference (control flow information is created and attached by the
             // binder), we simply return the declared type of the symbol.
-            return getTypeOfSymbol(symbol);
+            return getNonMissingTypeOfSymbol(symbol);
         }
         function getControlFlowContainer(node) {
             return ts.findAncestor(node.parent, function (node) {
                 return ts.isFunctionLike(node) && !ts.getImmediatelyInvokedFunctionExpression(node) ||
-                    node.kind === 258 /* ModuleBlock */ ||
-                    node.kind === 298 /* SourceFile */ ||
-                    node.kind === 164 /* PropertyDeclaration */;
+                    node.kind === 260 /* ModuleBlock */ ||
+                    node.kind === 300 /* SourceFile */ ||
+                    node.kind === 165 /* PropertyDeclaration */;
             });
         }
         // Check if a parameter is assigned anywhere within its declaring function.
@@ -66963,10 +68196,10 @@
             return !!ts.findAncestor(node.parent, function (node) { return ts.isFunctionLike(node) && !!(getNodeLinks(node).flags & 8388608 /* AssignmentsMarked */); });
         }
         function markParameterAssignments(node) {
-            if (node.kind === 78 /* Identifier */) {
+            if (node.kind === 79 /* Identifier */) {
                 if (ts.isAssignmentTarget(node)) {
                     var symbol = getResolvedSymbol(node);
-                    if (symbol.valueDeclaration && ts.getRootDeclaration(symbol.valueDeclaration).kind === 161 /* Parameter */) {
+                    if (symbol.valueDeclaration && ts.getRootDeclaration(symbol.valueDeclaration).kind === 162 /* Parameter */) {
                         symbol.isAssigned = true;
                     }
                 }
@@ -66976,13 +68209,13 @@
             }
         }
         function isConstVariable(symbol) {
-            return symbol.flags & 3 /* Variable */ && (getDeclarationNodeFlagsFromSymbol(symbol) & 2 /* Const */) !== 0 && getTypeOfSymbol(symbol) !== autoArrayType;
+            return symbol.flags & 3 /* Variable */ && (getDeclarationNodeFlagsFromSymbol(symbol) & 2 /* Const */) !== 0;
         }
         /** remove undefined from the annotated type of a parameter when there is an initializer (that doesn't include undefined) */
         function removeOptionalityFromDeclaredType(declaredType, declaration) {
             if (pushTypeResolution(declaration.symbol, 2 /* DeclaredType */)) {
                 var annotationIncludesUndefined = strictNullChecks &&
-                    declaration.kind === 161 /* Parameter */ &&
+                    declaration.kind === 162 /* Parameter */ &&
                     declaration.initializer &&
                     getFalsyFlags(declaredType) & 32768 /* Undefined */ &&
                     !(getFalsyFlags(checkExpression(declaration.initializer)) & 32768 /* Undefined */);
@@ -66994,29 +68227,29 @@
                 return declaredType;
             }
         }
-        function isConstraintPosition(node) {
+        function isConstraintPosition(type, node) {
             var parent = node.parent;
-            // In an element access obj[x], we consider obj to be in a constraint position only when x is not
-            // of a generic type. This is because when both obj and x are of generic types T and K, we want
-            // the resulting type to be T[K].
-            return parent.kind === 202 /* PropertyAccessExpression */ ||
-                parent.kind === 204 /* CallExpression */ && parent.expression === node ||
-                parent.kind === 203 /* ElementAccessExpression */ && parent.expression === node &&
-                    !isGenericIndexType(getTypeOfExpression(parent.argumentExpression));
+            // In an element access obj[x], we consider obj to be in a constraint position, except when obj is of
+            // a generic type without a nullable constraint and x is a generic type. This is because when both obj
+            // and x are of generic types T and K, we want the resulting type to be T[K].
+            return parent.kind === 204 /* PropertyAccessExpression */ ||
+                parent.kind === 206 /* CallExpression */ && parent.expression === node ||
+                parent.kind === 205 /* ElementAccessExpression */ && parent.expression === node &&
+                    !(isGenericTypeWithoutNullableConstraint(type) && isGenericIndexType(getTypeOfExpression(parent.argumentExpression)));
         }
         function isGenericTypeWithUnionConstraint(type) {
             return !!(type.flags & 465829888 /* Instantiable */ && getBaseConstraintOrType(type).flags & (98304 /* Nullable */ | 1048576 /* Union */));
         }
-        function containsGenericType(type) {
-            return !!(type.flags & 465829888 /* Instantiable */ || type.flags & 3145728 /* UnionOrIntersection */ && ts.some(type.types, containsGenericType));
+        function isGenericTypeWithoutNullableConstraint(type) {
+            return !!(type.flags & 465829888 /* Instantiable */ && !maybeTypeOfKind(getBaseConstraintOrType(type), 98304 /* Nullable */));
         }
-        function hasContextualTypeWithNoGenericTypes(node) {
+        function hasNonBindingPatternContextualTypeWithNoGenericTypes(node) {
             // Computing the contextual type for a child of a JSX element involves resolving the type of the
             // element's tag name, so we exclude that here to avoid circularities.
             var contextualType = (ts.isIdentifier(node) || ts.isPropertyAccessExpression(node) || ts.isElementAccessExpression(node)) &&
                 !((ts.isJsxOpeningElement(node.parent) || ts.isJsxSelfClosingElement(node.parent)) && node.parent.tagName === node) &&
-                getContextualType(node);
-            return contextualType && !someType(contextualType, containsGenericType);
+                getContextualType(node, 8 /* SkipBindingPatterns */);
+            return contextualType && !isGenericType(contextualType);
         }
         function getNarrowableTypeForReference(type, reference, checkMode) {
             // When the type of a reference is or contains an instantiable type with a union type constraint, and
@@ -67028,7 +68261,7 @@
             // 'string | undefined' to give control flow analysis the opportunity to narrow to type 'string'.
             var substituteConstraints = !(checkMode && checkMode & 2 /* Inferential */) &&
                 someType(type, isGenericTypeWithUnionConstraint) &&
-                (isConstraintPosition(reference) || hasContextualTypeWithNoGenericTypes(reference));
+                (isConstraintPosition(type, reference) || hasNonBindingPatternContextualTypeWithNoGenericTypes(reference));
             return substituteConstraints ? mapType(type, function (t) { return t.flags & 465829888 /* Instantiable */ ? getBaseConstraintOrType(t) : t; }) : type;
         }
         function isExportOrExportExpression(location) {
@@ -67064,9 +68297,13 @@
             // To avoid that we will give an error to users if they use arguments objects in arrow function so that they
             // can explicitly bound arguments objects
             if (symbol === argumentsSymbol) {
+                if (isInPropertyInitializerOrClassStaticBlock(node)) {
+                    error(node, ts.Diagnostics.arguments_cannot_be_referenced_in_property_initializers);
+                    return errorType;
+                }
                 var container = ts.getContainingFunction(node);
                 if (languageVersion < 2 /* ES2015 */) {
-                    if (container.kind === 210 /* ArrowFunction */) {
+                    if (container.kind === 212 /* ArrowFunction */) {
                         error(node, ts.Diagnostics.The_arguments_object_cannot_be_referenced_in_an_arrow_function_in_ES3_and_ES5_Consider_using_a_standard_function_expression);
                     }
                     else if (ts.hasSyntacticModifier(container, 256 /* Async */)) {
@@ -67091,7 +68328,7 @@
                 // Due to the emit for class decorators, any reference to the class from inside of the class body
                 // must instead be rewritten to point to a temporary variable to avoid issues with the double-bind
                 // behavior of class names in ES6.
-                if (declaration.kind === 253 /* ClassDeclaration */
+                if (declaration.kind === 255 /* ClassDeclaration */
                     && ts.nodeIsDecorated(declaration)) {
                     var container = ts.getContainingClass(node);
                     while (container !== undefined) {
@@ -67103,14 +68340,14 @@
                         container = ts.getContainingClass(container);
                     }
                 }
-                else if (declaration.kind === 222 /* ClassExpression */) {
+                else if (declaration.kind === 224 /* ClassExpression */) {
                     // When we emit a class expression with static members that contain a reference
                     // to the constructor in the initializer, we will need to substitute that
                     // binding with an alias as the class name is not in scope.
                     var container = ts.getThisContainer(node, /*includeArrowFunctions*/ false);
-                    while (container.kind !== 298 /* SourceFile */) {
+                    while (container.kind !== 300 /* SourceFile */) {
                         if (container.parent === declaration) {
-                            if (container.kind === 164 /* PropertyDeclaration */ && ts.hasSyntacticModifier(container, 32 /* Static */)) {
+                            if (ts.isPropertyDeclaration(container) && ts.isStatic(container) || ts.isClassStaticBlockDeclaration(container)) {
                                 getNodeLinks(declaration).flags |= 16777216 /* ClassWithConstructorReference */;
                                 getNodeLinks(node).flags |= 33554432 /* ConstructorReferenceInClass */;
                             }
@@ -67166,7 +68403,7 @@
             // The declaration container is the innermost function that encloses the declaration of the variable
             // or parameter. The flow container is the innermost function starting with which we analyze the control
             // flow graph to determine the control flow based type.
-            var isParameter = ts.getRootDeclaration(declaration).kind === 161 /* Parameter */;
+            var isParameter = ts.getRootDeclaration(declaration).kind === 162 /* Parameter */;
             var declarationContainer = getControlFlowContainer(declaration);
             var flowContainer = getControlFlowContainer(node);
             var isOuterVariable = flowContainer !== declarationContainer;
@@ -67175,9 +68412,9 @@
             // When the control flow originates in a function expression or arrow function and we are referencing
             // a const variable or parameter from an outer function, we extend the origin of the control flow
             // analysis to include the immediately enclosing function.
-            while (flowContainer !== declarationContainer && (flowContainer.kind === 209 /* FunctionExpression */ ||
-                flowContainer.kind === 210 /* ArrowFunction */ || ts.isObjectLiteralOrClassExpressionMethod(flowContainer)) &&
-                (isConstVariable(localOrExportSymbol) || isParameter && !isParameterAssigned(localOrExportSymbol))) {
+            while (flowContainer !== declarationContainer && (flowContainer.kind === 211 /* FunctionExpression */ ||
+                flowContainer.kind === 212 /* ArrowFunction */ || ts.isObjectLiteralOrClassExpressionMethod(flowContainer)) &&
+                (isConstVariable(localOrExportSymbol) && type !== autoArrayType || isParameter && !isParameterAssigned(localOrExportSymbol))) {
                 flowContainer = getControlFlowContainer(flowContainer);
             }
             // We only look for uninitialized variables in strict null checking mode, and only when we can analyze
@@ -67185,14 +68422,14 @@
             // declaration container are the same).
             var assumeInitialized = isParameter || isAlias || isOuterVariable || isSpreadDestructuringAssignmentTarget || isModuleExports || ts.isBindingElement(declaration) ||
                 type !== autoType && type !== autoArrayType && (!strictNullChecks || (type.flags & (3 /* AnyOrUnknown */ | 16384 /* Void */)) !== 0 ||
-                    isInTypeQuery(node) || node.parent.kind === 271 /* ExportSpecifier */) ||
-                node.parent.kind === 226 /* NonNullExpression */ ||
-                declaration.kind === 250 /* VariableDeclaration */ && declaration.exclamationToken ||
+                    isInTypeQuery(node) || node.parent.kind === 273 /* ExportSpecifier */) ||
+                node.parent.kind === 228 /* NonNullExpression */ ||
+                declaration.kind === 252 /* VariableDeclaration */ && declaration.exclamationToken ||
                 declaration.flags & 8388608 /* Ambient */;
             var initialType = assumeInitialized ? (isParameter ? removeOptionalityFromDeclaredType(type, declaration) : type) :
                 type === autoType || type === autoArrayType ? undefinedType :
                     getOptionalType(type);
-            var flowType = getFlowTypeOfReference(node, type, initialType, flowContainer, !assumeInitialized);
+            var flowType = getFlowTypeOfReference(node, type, initialType, flowContainer);
             // A variable is considered uninitialized when it is possible to analyze the entire control flow graph
             // from declaration to use, and when the variable's declared type doesn't include undefined but the
             // control flow based type does include undefined.
@@ -67226,7 +68463,7 @@
                 (symbol.flags & (2 /* BlockScopedVariable */ | 32 /* Class */)) === 0 ||
                 !symbol.valueDeclaration ||
                 ts.isSourceFile(symbol.valueDeclaration) ||
-                symbol.valueDeclaration.parent.kind === 288 /* CatchClause */) {
+                symbol.valueDeclaration.parent.kind === 290 /* CatchClause */) {
                 return;
             }
             // 1. walk from the use site up to the declaration and check
@@ -67241,7 +68478,7 @@
                     // mark iteration statement as containing block-scoped binding captured in some function
                     var capturesBlockScopeBindingInLoopBody = true;
                     if (ts.isForStatement(container)) {
-                        var varDeclList = ts.getAncestor(symbol.valueDeclaration, 251 /* VariableDeclarationList */);
+                        var varDeclList = ts.getAncestor(symbol.valueDeclaration, 253 /* VariableDeclarationList */);
                         if (varDeclList && varDeclList.parent === container) {
                             var part = getPartOfForStatementContainingNode(node.parent, container);
                             if (part) {
@@ -67262,7 +68499,7 @@
                 // mark variables that are declared in loop initializer and reassigned inside the body of ForStatement.
                 // if body of ForStatement will be converted to function then we'll need a extra machinery to propagate reassigned values back.
                 if (ts.isForStatement(container)) {
-                    var varDeclList = ts.getAncestor(symbol.valueDeclaration, 251 /* VariableDeclarationList */);
+                    var varDeclList = ts.getAncestor(symbol.valueDeclaration, 253 /* VariableDeclarationList */);
                     if (varDeclList && varDeclList.parent === container && isAssignedInBodyOfForStatement(node, container)) {
                         getNodeLinks(symbol.valueDeclaration).flags |= 4194304 /* NeedsLoopOutParameter */;
                     }
@@ -67281,7 +68518,7 @@
         function isAssignedInBodyOfForStatement(node, container) {
             // skip parenthesized nodes
             var current = node;
-            while (current.parent.kind === 208 /* ParenthesizedExpression */) {
+            while (current.parent.kind === 210 /* ParenthesizedExpression */) {
                 current = current.parent;
             }
             // check if node is used as LHS in some assignment expression
@@ -67289,7 +68526,7 @@
             if (ts.isAssignmentTarget(current)) {
                 isAssigned = true;
             }
-            else if ((current.parent.kind === 215 /* PrefixUnaryExpression */ || current.parent.kind === 216 /* PostfixUnaryExpression */)) {
+            else if ((current.parent.kind === 217 /* PrefixUnaryExpression */ || current.parent.kind === 218 /* PostfixUnaryExpression */)) {
                 var expr = current.parent;
                 isAssigned = expr.operator === 45 /* PlusPlusToken */ || expr.operator === 46 /* MinusMinusToken */;
             }
@@ -67302,7 +68539,7 @@
         }
         function captureLexicalThis(node, container) {
             getNodeLinks(node).flags |= 2 /* LexicalThis */;
-            if (container.kind === 164 /* PropertyDeclaration */ || container.kind === 167 /* Constructor */) {
+            if (container.kind === 165 /* PropertyDeclaration */ || container.kind === 169 /* Constructor */) {
                 var classNode = container.parent;
                 getNodeLinks(classNode).flags |= 4 /* CaptureThis */;
             }
@@ -67337,47 +68574,48 @@
                 }
             }
         }
+        function checkThisInStaticClassFieldInitializerInDecoratedClass(thisExpression, container) {
+            if (ts.isPropertyDeclaration(container) && ts.hasStaticModifier(container) &&
+                container.initializer && ts.textRangeContainsPositionInclusive(container.initializer, thisExpression.pos) && ts.length(container.parent.decorators)) {
+                error(thisExpression, ts.Diagnostics.Cannot_use_this_in_a_static_property_initializer_of_a_decorated_class);
+            }
+        }
         function checkThisExpression(node) {
+            var isNodeInTypeQuery = isInTypeQuery(node);
             // Stop at the first arrow function so that we can
             // tell whether 'this' needs to be captured.
             var container = ts.getThisContainer(node, /* includeArrowFunctions */ true);
             var capturedByArrowFunction = false;
-            if (container.kind === 167 /* Constructor */) {
+            if (container.kind === 169 /* Constructor */) {
                 checkThisBeforeSuper(node, container, ts.Diagnostics.super_must_be_called_before_accessing_this_in_the_constructor_of_a_derived_class);
             }
             // Now skip arrow functions to get the "real" owner of 'this'.
-            if (container.kind === 210 /* ArrowFunction */) {
+            if (container.kind === 212 /* ArrowFunction */) {
                 container = ts.getThisContainer(container, /* includeArrowFunctions */ false);
                 capturedByArrowFunction = true;
             }
+            checkThisInStaticClassFieldInitializerInDecoratedClass(node, container);
             switch (container.kind) {
-                case 257 /* ModuleDeclaration */:
+                case 259 /* ModuleDeclaration */:
                     error(node, ts.Diagnostics.this_cannot_be_referenced_in_a_module_or_namespace_body);
                     // do not return here so in case if lexical this is captured - it will be reflected in flags on NodeLinks
                     break;
-                case 256 /* EnumDeclaration */:
+                case 258 /* EnumDeclaration */:
                     error(node, ts.Diagnostics.this_cannot_be_referenced_in_current_location);
                     // do not return here so in case if lexical this is captured - it will be reflected in flags on NodeLinks
                     break;
-                case 167 /* Constructor */:
+                case 169 /* Constructor */:
                     if (isInConstructorArgumentInitializer(node, container)) {
                         error(node, ts.Diagnostics.this_cannot_be_referenced_in_constructor_arguments);
                         // do not return here so in case if lexical this is captured - it will be reflected in flags on NodeLinks
                     }
                     break;
-                case 164 /* PropertyDeclaration */:
-                case 163 /* PropertySignature */:
-                    if (ts.hasSyntacticModifier(container, 32 /* Static */) && !(compilerOptions.target === 99 /* ESNext */ && useDefineForClassFields)) {
-                        error(node, ts.Diagnostics.this_cannot_be_referenced_in_a_static_property_initializer);
-                        // do not return here so in case if lexical this is captured - it will be reflected in flags on NodeLinks
-                    }
-                    break;
-                case 159 /* ComputedPropertyName */:
+                case 160 /* ComputedPropertyName */:
                     error(node, ts.Diagnostics.this_cannot_be_referenced_in_a_computed_property_name);
                     break;
             }
             // When targeting es6, mark that we'll need to capture `this` in its lexically bound scope.
-            if (capturedByArrowFunction && languageVersion < 2 /* ES2015 */) {
+            if (!isNodeInTypeQuery && capturedByArrowFunction && languageVersion < 2 /* ES2015 */) {
                 captureLexicalThis(node, container);
             }
             var type = tryGetThisTypeAt(node, /*includeGlobalThis*/ true, container);
@@ -67427,7 +68665,7 @@
             }
             if (ts.isClassLike(container.parent)) {
                 var symbol = getSymbolOfNode(container.parent);
-                var type = ts.hasSyntacticModifier(container, 32 /* Static */) ? getTypeOfSymbol(symbol) : getDeclaredTypeOfSymbol(symbol).thisType;
+                var type = ts.isStatic(container) ? getTypeOfSymbol(symbol) : getDeclaredTypeOfSymbol(symbol).thisType;
                 return getFlowTypeOfReference(node, type);
             }
             if (ts.isSourceFile(container)) {
@@ -67455,12 +68693,12 @@
             }
             if (ts.isClassLike(container.parent)) {
                 var symbol = getSymbolOfNode(container.parent);
-                return ts.hasSyntacticModifier(container, 32 /* Static */) ? getTypeOfSymbol(symbol) : getDeclaredTypeOfSymbol(symbol).thisType;
+                return ts.isStatic(container) ? getTypeOfSymbol(symbol) : getDeclaredTypeOfSymbol(symbol).thisType;
             }
         }
         function getClassNameFromPrototypeMethod(container) {
             // Check if it's the RHS of a x.prototype.y = function [name]() { .... }
-            if (container.kind === 209 /* FunctionExpression */ &&
+            if (container.kind === 211 /* FunctionExpression */ &&
                 ts.isBinaryExpression(container.parent) &&
                 ts.getAssignmentDeclarationKind(container.parent) === 3 /* PrototypeProperty */) {
                 // Get the 'x' of 'x.prototype.y = container'
@@ -67470,16 +68708,16 @@
                     .expression; // x
             }
             // x.prototype = { method() { } }
-            else if (container.kind === 166 /* MethodDeclaration */ &&
-                container.parent.kind === 201 /* ObjectLiteralExpression */ &&
+            else if (container.kind === 167 /* MethodDeclaration */ &&
+                container.parent.kind === 203 /* ObjectLiteralExpression */ &&
                 ts.isBinaryExpression(container.parent.parent) &&
                 ts.getAssignmentDeclarationKind(container.parent.parent) === 6 /* Prototype */) {
                 return container.parent.parent.left.expression;
             }
             // x.prototype = { method: function() { } }
-            else if (container.kind === 209 /* FunctionExpression */ &&
-                container.parent.kind === 289 /* PropertyAssignment */ &&
-                container.parent.parent.kind === 201 /* ObjectLiteralExpression */ &&
+            else if (container.kind === 211 /* FunctionExpression */ &&
+                container.parent.kind === 291 /* PropertyAssignment */ &&
+                container.parent.parent.kind === 203 /* ObjectLiteralExpression */ &&
                 ts.isBinaryExpression(container.parent.parent.parent) &&
                 ts.getAssignmentDeclarationKind(container.parent.parent.parent) === 6 /* Prototype */) {
                 return container.parent.parent.parent.left.expression;
@@ -67487,7 +68725,7 @@
             // Object.defineProperty(x, "method", { value: function() { } });
             // Object.defineProperty(x, "method", { set: (x: () => void) => void });
             // Object.defineProperty(x, "method", { get: () => function() { }) });
-            else if (container.kind === 209 /* FunctionExpression */ &&
+            else if (container.kind === 211 /* FunctionExpression */ &&
                 ts.isPropertyAssignment(container.parent) &&
                 ts.isIdentifier(container.parent.name) &&
                 (container.parent.name.escapedText === "value" || container.parent.name.escapedText === "get" || container.parent.name.escapedText === "set") &&
@@ -67512,7 +68750,7 @@
         }
         function getTypeForThisExpressionFromJSDoc(node) {
             var jsdocType = ts.getJSDocType(node);
-            if (jsdocType && jsdocType.kind === 309 /* JSDocFunctionType */) {
+            if (jsdocType && jsdocType.kind === 312 /* JSDocFunctionType */) {
                 var jsDocFunctionType = jsdocType;
                 if (jsDocFunctionType.parameters.length > 0 &&
                     jsDocFunctionType.parameters[0].name &&
@@ -67526,16 +68764,16 @@
             }
         }
         function isInConstructorArgumentInitializer(node, constructorDecl) {
-            return !!ts.findAncestor(node, function (n) { return ts.isFunctionLikeDeclaration(n) ? "quit" : n.kind === 161 /* Parameter */ && n.parent === constructorDecl; });
+            return !!ts.findAncestor(node, function (n) { return ts.isFunctionLikeDeclaration(n) ? "quit" : n.kind === 162 /* Parameter */ && n.parent === constructorDecl; });
         }
         function checkSuperExpression(node) {
-            var isCallExpression = node.parent.kind === 204 /* CallExpression */ && node.parent.expression === node;
+            var isCallExpression = node.parent.kind === 206 /* CallExpression */ && node.parent.expression === node;
             var immediateContainer = ts.getSuperContainer(node, /*stopOnFunctions*/ true);
             var container = immediateContainer;
             var needToCaptureLexicalThis = false;
             // adjust the container reference in case if super is used inside arrow functions with arbitrarily deep nesting
             if (!isCallExpression) {
-                while (container && container.kind === 210 /* ArrowFunction */) {
+                while (container && container.kind === 212 /* ArrowFunction */) {
                     container = ts.getSuperContainer(container, /*stopOnFunctions*/ true);
                     needToCaptureLexicalThis = languageVersion < 2 /* ES2015 */;
                 }
@@ -67548,14 +68786,14 @@
                 // class B {
                 //     [super.foo()]() {}
                 // }
-                var current = ts.findAncestor(node, function (n) { return n === container ? "quit" : n.kind === 159 /* ComputedPropertyName */; });
-                if (current && current.kind === 159 /* ComputedPropertyName */) {
+                var current = ts.findAncestor(node, function (n) { return n === container ? "quit" : n.kind === 160 /* ComputedPropertyName */; });
+                if (current && current.kind === 160 /* ComputedPropertyName */) {
                     error(node, ts.Diagnostics.super_cannot_be_referenced_in_a_computed_property_name);
                 }
                 else if (isCallExpression) {
                     error(node, ts.Diagnostics.Super_calls_are_not_permitted_outside_constructors_or_in_nested_functions_inside_constructors);
                 }
-                else if (!container || !container.parent || !(ts.isClassLike(container.parent) || container.parent.kind === 201 /* ObjectLiteralExpression */)) {
+                else if (!container || !container.parent || !(ts.isClassLike(container.parent) || container.parent.kind === 203 /* ObjectLiteralExpression */)) {
                     error(node, ts.Diagnostics.super_can_only_be_referenced_in_members_of_derived_classes_or_object_literal_expressions);
                 }
                 else {
@@ -67563,11 +68801,23 @@
                 }
                 return errorType;
             }
-            if (!isCallExpression && immediateContainer.kind === 167 /* Constructor */) {
+            if (!isCallExpression && immediateContainer.kind === 169 /* Constructor */) {
                 checkThisBeforeSuper(node, container, ts.Diagnostics.super_must_be_called_before_accessing_a_property_of_super_in_the_constructor_of_a_derived_class);
             }
-            if (ts.hasSyntacticModifier(container, 32 /* Static */) || isCallExpression) {
+            if (ts.isStatic(container) || isCallExpression) {
                 nodeCheckFlag = 512 /* SuperStatic */;
+                if (!isCallExpression &&
+                    languageVersion >= 2 /* ES2015 */ && languageVersion <= 8 /* ES2021 */ &&
+                    (ts.isPropertyDeclaration(container) || ts.isClassStaticBlockDeclaration(container))) {
+                    // for `super.x` or `super[x]` in a static initializer, mark all enclosing
+                    // block scope containers so that we can report potential collisions with
+                    // `Reflect`.
+                    ts.forEachEnclosingBlockScopeContainer(node.parent, function (current) {
+                        if (!ts.isSourceFile(current) || ts.isExternalOrCommonJsModule(current)) {
+                            getNodeLinks(current).flags |= 134217728 /* ContainsSuperPropertyInStaticInitializer */;
+                        }
+                    });
+                }
             }
             else {
                 nodeCheckFlag = 256 /* SuperInstance */;
@@ -67632,7 +68882,7 @@
             // as a call expression cannot be used as the target of a destructuring assignment while a property access can.
             //
             // For element access expressions (`super[x]`), we emit a generic helper that forwards the element access in both situations.
-            if (container.kind === 166 /* MethodDeclaration */ && ts.hasSyntacticModifier(container, 256 /* Async */)) {
+            if (container.kind === 167 /* MethodDeclaration */ && ts.hasSyntacticModifier(container, 256 /* Async */)) {
                 if (ts.isSuperProperty(node.parent) && ts.isAssignmentTarget(node.parent)) {
                     getNodeLinks(container).flags |= 4096 /* AsyncMethodWithSuperBinding */;
                 }
@@ -67646,7 +68896,7 @@
                 // in this case they should also use correct lexical this
                 captureLexicalThis(node.parent, container);
             }
-            if (container.parent.kind === 201 /* ObjectLiteralExpression */) {
+            if (container.parent.kind === 203 /* ObjectLiteralExpression */) {
                 if (languageVersion < 2 /* ES2015 */) {
                     error(node, ts.Diagnostics.super_is_only_allowed_in_members_of_object_literal_expressions_when_option_target_is_ES2015_or_higher);
                     return errorType;
@@ -67667,7 +68917,7 @@
             if (!baseClassType) {
                 return errorType;
             }
-            if (container.kind === 167 /* Constructor */ && isInConstructorArgumentInitializer(node, container)) {
+            if (container.kind === 169 /* Constructor */ && isInConstructorArgumentInitializer(node, container)) {
                 // issue custom error message for super property access in constructor arguments (to be aligned with old compiler)
                 error(node, ts.Diagnostics.super_cannot_be_referenced_in_constructor_arguments);
                 return errorType;
@@ -67682,7 +68932,7 @@
                 if (isCallExpression) {
                     // TS 1.0 SPEC (April 2014): 4.8.1
                     // Super calls are only permitted in constructors of derived classes
-                    return container.kind === 167 /* Constructor */;
+                    return container.kind === 169 /* Constructor */;
                 }
                 else {
                     // TS 1.0 SPEC (April 2014)
@@ -67690,21 +68940,23 @@
                     // - In a constructor, instance member function, instance member accessor, or instance member variable initializer where this references a derived class instance
                     // - In a static member function or static member accessor
                     // topmost container must be something that is directly nested in the class declaration\object literal expression
-                    if (ts.isClassLike(container.parent) || container.parent.kind === 201 /* ObjectLiteralExpression */) {
-                        if (ts.hasSyntacticModifier(container, 32 /* Static */)) {
-                            return container.kind === 166 /* MethodDeclaration */ ||
-                                container.kind === 165 /* MethodSignature */ ||
-                                container.kind === 168 /* GetAccessor */ ||
-                                container.kind === 169 /* SetAccessor */;
+                    if (ts.isClassLike(container.parent) || container.parent.kind === 203 /* ObjectLiteralExpression */) {
+                        if (ts.isStatic(container)) {
+                            return container.kind === 167 /* MethodDeclaration */ ||
+                                container.kind === 166 /* MethodSignature */ ||
+                                container.kind === 170 /* GetAccessor */ ||
+                                container.kind === 171 /* SetAccessor */ ||
+                                container.kind === 165 /* PropertyDeclaration */ ||
+                                container.kind === 168 /* ClassStaticBlockDeclaration */;
                         }
                         else {
-                            return container.kind === 166 /* MethodDeclaration */ ||
-                                container.kind === 165 /* MethodSignature */ ||
-                                container.kind === 168 /* GetAccessor */ ||
-                                container.kind === 169 /* SetAccessor */ ||
-                                container.kind === 164 /* PropertyDeclaration */ ||
-                                container.kind === 163 /* PropertySignature */ ||
-                                container.kind === 167 /* Constructor */;
+                            return container.kind === 167 /* MethodDeclaration */ ||
+                                container.kind === 166 /* MethodSignature */ ||
+                                container.kind === 170 /* GetAccessor */ ||
+                                container.kind === 171 /* SetAccessor */ ||
+                                container.kind === 165 /* PropertyDeclaration */ ||
+                                container.kind === 164 /* PropertySignature */ ||
+                                container.kind === 169 /* Constructor */;
                         }
                     }
                 }
@@ -67712,10 +68964,10 @@
             }
         }
         function getContainingObjectLiteral(func) {
-            return (func.kind === 166 /* MethodDeclaration */ ||
-                func.kind === 168 /* GetAccessor */ ||
-                func.kind === 169 /* SetAccessor */) && func.parent.kind === 201 /* ObjectLiteralExpression */ ? func.parent :
-                func.kind === 209 /* FunctionExpression */ && func.parent.kind === 289 /* PropertyAssignment */ ? func.parent.parent :
+            return (func.kind === 167 /* MethodDeclaration */ ||
+                func.kind === 170 /* GetAccessor */ ||
+                func.kind === 171 /* SetAccessor */) && func.parent.kind === 203 /* ObjectLiteralExpression */ ? func.parent :
+                func.kind === 211 /* FunctionExpression */ && func.parent.kind === 291 /* PropertyAssignment */ ? func.parent.parent :
                     undefined;
         }
         function getThisTypeArgument(type) {
@@ -67727,7 +68979,7 @@
             });
         }
         function getContextualThisParameterType(func) {
-            if (func.kind === 210 /* ArrowFunction */) {
+            if (func.kind === 212 /* ArrowFunction */) {
                 return undefined;
             }
             if (isContextSensitiveFunctionOrObjectLiteralMethod(func)) {
@@ -67754,7 +69006,7 @@
                         if (thisType) {
                             return instantiateType(thisType, getMapperFromContext(getInferenceContext(containingLiteral)));
                         }
-                        if (literal.parent.kind !== 289 /* PropertyAssignment */) {
+                        if (literal.parent.kind !== 291 /* PropertyAssignment */) {
                             break;
                         }
                         literal = literal.parent.parent;
@@ -67768,7 +69020,7 @@
                 // In an assignment of the form 'obj.xxx = function(...)' or 'obj[xxx] = function(...)', the
                 // contextual type for 'this' is 'obj'.
                 var parent = ts.walkUpParenthesizedExpressions(func.parent);
-                if (parent.kind === 217 /* BinaryExpression */ && parent.operatorToken.kind === 62 /* EqualsToken */) {
+                if (parent.kind === 219 /* BinaryExpression */ && parent.operatorToken.kind === 63 /* EqualsToken */) {
                     var target = parent.left;
                     if (ts.isAccessExpression(target)) {
                         var expression = target.expression;
@@ -67821,12 +69073,12 @@
                 return getTypeFromTypeNode(typeNode);
             }
             switch (declaration.kind) {
-                case 161 /* Parameter */:
+                case 162 /* Parameter */:
                     return getContextuallyTypedParameterType(declaration);
-                case 199 /* BindingElement */:
+                case 201 /* BindingElement */:
                     return getContextualTypeForBindingElement(declaration);
-                case 164 /* PropertyDeclaration */:
-                    if (ts.hasSyntacticModifier(declaration, 32 /* Static */)) {
+                case 165 /* PropertyDeclaration */:
+                    if (ts.isStatic(declaration)) {
                         return getContextualTypeForStaticPropertyDeclaration(declaration);
                     }
                 // By default, do nothing and return undefined - only the above cases have context implied by a parent
@@ -67836,10 +69088,10 @@
             var parent = declaration.parent.parent;
             var name = declaration.propertyName || declaration.name;
             var parentType = getContextualTypeForVariableLikeDeclaration(parent) ||
-                parent.kind !== 199 /* BindingElement */ && parent.initializer && checkDeclarationInitializer(parent);
+                parent.kind !== 201 /* BindingElement */ && parent.initializer && checkDeclarationInitializer(parent);
             if (!parentType || ts.isBindingPattern(name) || ts.isComputedNonLiteralName(name))
                 return undefined;
-            if (parent.name.kind === 198 /* ArrayBindingPattern */) {
+            if (parent.name.kind === 200 /* ArrayBindingPattern */) {
                 var index = ts.indexOfNode(declaration.parent.elements, declaration);
                 if (index < 0)
                     return undefined;
@@ -67973,10 +69225,13 @@
             if (ts.isJsxOpeningLikeElement(callTarget) && argIndex === 0) {
                 return getEffectiveFirstArgumentForJsxSignature(signature, callTarget);
             }
-            return getTypeAtPosition(signature, argIndex);
+            var restIndex = signature.parameters.length - 1;
+            return signatureHasRestParameter(signature) && argIndex >= restIndex ?
+                getIndexedAccessType(getTypeOfSymbol(signature.parameters[restIndex]), getNumberLiteralType(argIndex - restIndex), 256 /* Contextual */) :
+                getTypeAtPosition(signature, argIndex);
         }
         function getContextualTypeForSubstitutionExpression(template, substitutionExpression) {
-            if (template.parent.kind === 206 /* TaggedTemplateExpression */) {
+            if (template.parent.kind === 208 /* TaggedTemplateExpression */) {
                 return getContextualTypeForArgument(template.parent, substitutionExpression);
             }
             return undefined;
@@ -67985,10 +69240,10 @@
             var binaryExpression = node.parent;
             var left = binaryExpression.left, operatorToken = binaryExpression.operatorToken, right = binaryExpression.right;
             switch (operatorToken.kind) {
-                case 62 /* EqualsToken */:
-                case 75 /* AmpersandAmpersandEqualsToken */:
-                case 74 /* BarBarEqualsToken */:
-                case 76 /* QuestionQuestionEqualsToken */:
+                case 63 /* EqualsToken */:
+                case 76 /* AmpersandAmpersandEqualsToken */:
+                case 75 /* BarBarEqualsToken */:
+                case 77 /* QuestionQuestionEqualsToken */:
                     return node === right ? getContextualTypeForAssignmentDeclaration(binaryExpression) : undefined;
                 case 56 /* BarBarToken */:
                 case 60 /* QuestionQuestionToken */:
@@ -68007,6 +69262,27 @@
                     return undefined;
             }
         }
+        /**
+         * Try to find a resolved symbol for an expression without also resolving its type, as
+         * getSymbolAtLocation would (as that could be reentrant into contextual typing)
+         */
+        function getSymbolForExpression(e) {
+            if (e.symbol) {
+                return e.symbol;
+            }
+            if (ts.isIdentifier(e)) {
+                return getResolvedSymbol(e);
+            }
+            if (ts.isPropertyAccessExpression(e)) {
+                var lhsType = getTypeOfExpression(e.expression);
+                return ts.isPrivateIdentifier(e.name) ? tryGetPrivateIdentifierPropertyOfType(lhsType, e.name) : getPropertyOfType(lhsType, e.name.escapedText);
+            }
+            return undefined;
+            function tryGetPrivateIdentifierPropertyOfType(type, id) {
+                var lexicallyScopedSymbol = lookupSymbolForPrivateIdentifierDeclaration(id.escapedText, id);
+                return lexicallyScopedSymbol && getPrivateIdentifierPropertyOfType(type, lexicallyScopedSymbol);
+            }
+        }
         // In an assignment expression, the right operand is contextually typed by the type of the left operand.
         // Don't do this for assignment declarations unless there is a type tag on the assignment, to avoid circularity from checking the right operand.
         function getContextualTypeForAssignmentDeclaration(binaryExpression) {
@@ -68014,8 +69290,19 @@
             var kind = ts.getAssignmentDeclarationKind(binaryExpression);
             switch (kind) {
                 case 0 /* None */:
-                    return getTypeOfExpression(binaryExpression.left);
                 case 4 /* ThisProperty */:
+                    var lhsSymbol = getSymbolForExpression(binaryExpression.left);
+                    var decl = lhsSymbol && lhsSymbol.valueDeclaration;
+                    // Unannotated, uninitialized property declarations have a type implied by their usage in the constructor.
+                    // We avoid calling back into `getTypeOfExpression` and reentering contextual typing to avoid a bogus circularity error in that case.
+                    if (decl && (ts.isPropertyDeclaration(decl) || ts.isPropertySignature(decl))) {
+                        var overallAnnotation = ts.getEffectiveTypeAnnotationNode(decl);
+                        return (overallAnnotation && instantiateType(getTypeFromTypeNode(overallAnnotation), getSymbolLinks(lhsSymbol).mapper)) ||
+                            (decl.initializer && getTypeOfExpression(binaryExpression.left));
+                    }
+                    if (kind === 0 /* None */) {
+                        return getTypeOfExpression(binaryExpression.left);
+                    }
                     return getContextualTypeForThisPropertyAssignment(binaryExpression);
                 case 5 /* Property */:
                     if (isPossiblyAliasedThisProperty(binaryExpression, kind)) {
@@ -68027,12 +69314,12 @@
                         return getTypeOfExpression(binaryExpression.left);
                     }
                     else {
-                        var decl = binaryExpression.left.symbol.valueDeclaration;
-                        if (!decl) {
+                        var decl_1 = binaryExpression.left.symbol.valueDeclaration;
+                        if (!decl_1) {
                             return undefined;
                         }
                         var lhs = ts.cast(binaryExpression.left, ts.isAccessExpression);
-                        var overallAnnotation = ts.getEffectiveTypeAnnotationNode(decl);
+                        var overallAnnotation = ts.getEffectiveTypeAnnotationNode(decl_1);
                         if (overallAnnotation) {
                             return getTypeFromTypeNode(overallAnnotation);
                         }
@@ -68050,7 +69337,7 @@
                                 return undefined;
                             }
                         }
-                        return ts.isInJSFile(decl) ? undefined : getTypeOfExpression(binaryExpression.left);
+                        return ts.isInJSFile(decl_1) ? undefined : getTypeOfExpression(binaryExpression.left);
                     }
                 case 1 /* ExportsProperty */:
                 case 6 /* Prototype */:
@@ -68106,10 +69393,11 @@
         }
         function getTypeOfPropertyOfContextualType(type, name) {
             return mapType(type, function (t) {
+                var _a;
                 if (isGenericMappedType(t)) {
                     var constraint = getConstraintTypeFromMappedType(t);
                     var constraintOfConstraint = getBaseConstraintOfType(constraint) || constraint;
-                    var propertyNameType = getLiteralType(ts.unescapeLeadingUnderscores(name));
+                    var propertyNameType = getStringLiteralType(ts.unescapeLeadingUnderscores(name));
                     if (isTypeAssignableTo(propertyNameType, constraintOfConstraint)) {
                         return substituteIndexedMappedType(t, propertyNameType);
                     }
@@ -68125,15 +69413,11 @@
                             return restType;
                         }
                     }
-                    return isNumericLiteralName(name) && getIndexTypeOfContextualType(t, 1 /* Number */) ||
-                        getIndexTypeOfContextualType(t, 0 /* String */);
+                    return (_a = findApplicableIndexInfo(getIndexInfosOfStructuredType(t), getStringLiteralType(ts.unescapeLeadingUnderscores(name)))) === null || _a === void 0 ? void 0 : _a.type;
                 }
                 return undefined;
             }, /*noReductions*/ true);
         }
-        function getIndexTypeOfContextualType(type, kind) {
-            return mapType(type, function (t) { return getIndexTypeOfStructuredType(t, kind); }, /*noReductions*/ true);
-        }
         // In an object literal contextually typed by a type T, the contextual type of a property assignment is the type of
         // the matching property in T, if one exists. Otherwise, it is the type of the numeric index signature in T, if one
         // exists. Otherwise, it is the type of the string index signature in T, if one exists.
@@ -68157,14 +69441,13 @@
                     // For a (non-symbol) computed property, there is no reason to look up the name
                     // in the type. It will just be "__computed", which does not appear in any
                     // SymbolTable.
-                    var symbolName_3 = getSymbolOfNode(element).escapedName;
-                    var propertyType = getTypeOfPropertyOfContextualType(type, symbolName_3);
-                    if (propertyType) {
-                        return propertyType;
-                    }
+                    return getTypeOfPropertyOfContextualType(type, getSymbolOfNode(element).escapedName);
                 }
-                return isNumericName(element.name) && getIndexTypeOfContextualType(type, 1 /* Number */) ||
-                    getIndexTypeOfContextualType(type, 0 /* String */);
+                if (element.name) {
+                    var nameType_1 = getLiteralTypeFromPropertyName(element.name);
+                    // We avoid calling getApplicableIndexInfo here because it performs potentially expensive intersection reduction.
+                    return mapType(type, function (t) { var _a; return (_a = findApplicableIndexInfo(getIndexInfosOfStructuredType(t), nameType_1)) === null || _a === void 0 ? void 0 : _a.type; }, /*noReductions*/ true);
+                }
             }
             return undefined;
         }
@@ -68194,7 +69477,7 @@
             var childFieldType = getTypeOfPropertyOfContextualType(attributesType, jsxChildrenPropertyName);
             return childFieldType && (realChildren.length === 1 ? childFieldType : mapType(childFieldType, function (t) {
                 if (isArrayLikeType(t)) {
-                    return getIndexedAccessType(t, getLiteralType(childIndex));
+                    return getIndexedAccessType(t, getNumberLiteralType(childIndex));
                 }
                 else {
                     return t;
@@ -68233,25 +69516,25 @@
                 case 8 /* NumericLiteral */:
                 case 9 /* BigIntLiteral */:
                 case 14 /* NoSubstitutionTemplateLiteral */:
-                case 109 /* TrueKeyword */:
-                case 94 /* FalseKeyword */:
-                case 103 /* NullKeyword */:
-                case 78 /* Identifier */:
-                case 150 /* UndefinedKeyword */:
+                case 110 /* TrueKeyword */:
+                case 95 /* FalseKeyword */:
+                case 104 /* NullKeyword */:
+                case 79 /* Identifier */:
+                case 151 /* UndefinedKeyword */:
                     return true;
-                case 202 /* PropertyAccessExpression */:
-                case 208 /* ParenthesizedExpression */:
+                case 204 /* PropertyAccessExpression */:
+                case 210 /* ParenthesizedExpression */:
                     return isPossiblyDiscriminantValue(node.expression);
-                case 284 /* JsxExpression */:
+                case 286 /* JsxExpression */:
                     return !node.expression || isPossiblyDiscriminantValue(node.expression);
             }
             return false;
         }
         function discriminateContextualTypeByObjectMembers(node, contextualType) {
-            return getMatchingUnionConstituentForObjectLiteral(contextualType, node) || discriminateTypeByDiscriminableItems(contextualType, ts.concatenate(ts.map(ts.filter(node.properties, function (p) { return !!p.symbol && p.kind === 289 /* PropertyAssignment */ && isPossiblyDiscriminantValue(p.initializer) && isDiscriminantProperty(contextualType, p.symbol.escapedName); }), function (prop) { return [function () { return getContextFreeTypeOfExpression(prop.initializer); }, prop.symbol.escapedName]; }), ts.map(ts.filter(getPropertiesOfType(contextualType), function (s) { var _a; return !!(s.flags & 16777216 /* Optional */) && !!((_a = node === null || node === void 0 ? void 0 : node.symbol) === null || _a === void 0 ? void 0 : _a.members) && !node.symbol.members.has(s.escapedName) && isDiscriminantProperty(contextualType, s.escapedName); }), function (s) { return [function () { return undefinedType; }, s.escapedName]; })), isTypeAssignableTo, contextualType);
+            return getMatchingUnionConstituentForObjectLiteral(contextualType, node) || discriminateTypeByDiscriminableItems(contextualType, ts.concatenate(ts.map(ts.filter(node.properties, function (p) { return !!p.symbol && p.kind === 291 /* PropertyAssignment */ && isPossiblyDiscriminantValue(p.initializer) && isDiscriminantProperty(contextualType, p.symbol.escapedName); }), function (prop) { return [function () { return getContextFreeTypeOfExpression(prop.initializer); }, prop.symbol.escapedName]; }), ts.map(ts.filter(getPropertiesOfType(contextualType), function (s) { var _a; return !!(s.flags & 16777216 /* Optional */) && !!((_a = node === null || node === void 0 ? void 0 : node.symbol) === null || _a === void 0 ? void 0 : _a.members) && !node.symbol.members.has(s.escapedName) && isDiscriminantProperty(contextualType, s.escapedName); }), function (s) { return [function () { return undefinedType; }, s.escapedName]; })), isTypeAssignableTo, contextualType);
         }
         function discriminateContextualTypeByJSXAttributes(node, contextualType) {
-            return discriminateTypeByDiscriminableItems(contextualType, ts.concatenate(ts.map(ts.filter(node.properties, function (p) { return !!p.symbol && p.kind === 281 /* JsxAttribute */ && isDiscriminantProperty(contextualType, p.symbol.escapedName) && (!p.initializer || isPossiblyDiscriminantValue(p.initializer)); }), function (prop) { return [!prop.initializer ? (function () { return trueType; }) : (function () { return checkExpression(prop.initializer); }), prop.symbol.escapedName]; }), ts.map(ts.filter(getPropertiesOfType(contextualType), function (s) { var _a; return !!(s.flags & 16777216 /* Optional */) && !!((_a = node === null || node === void 0 ? void 0 : node.symbol) === null || _a === void 0 ? void 0 : _a.members) && !node.symbol.members.has(s.escapedName) && isDiscriminantProperty(contextualType, s.escapedName); }), function (s) { return [function () { return undefinedType; }, s.escapedName]; })), isTypeAssignableTo, contextualType);
+            return discriminateTypeByDiscriminableItems(contextualType, ts.concatenate(ts.map(ts.filter(node.properties, function (p) { return !!p.symbol && p.kind === 283 /* JsxAttribute */ && isDiscriminantProperty(contextualType, p.symbol.escapedName) && (!p.initializer || isPossiblyDiscriminantValue(p.initializer)); }), function (prop) { return [!prop.initializer ? (function () { return trueType; }) : (function () { return checkExpression(prop.initializer); }), prop.symbol.escapedName]; }), ts.map(ts.filter(getPropertiesOfType(contextualType), function (s) { var _a; return !!(s.flags & 16777216 /* Optional */) && !!((_a = node === null || node === void 0 ? void 0 : node.symbol) === null || _a === void 0 ? void 0 : _a.members) && !node.symbol.members.has(s.escapedName) && isDiscriminantProperty(contextualType, s.escapedName); }), function (s) { return [function () { return undefinedType; }, s.escapedName]; })), isTypeAssignableTo, contextualType);
         }
         // Return the contextual type for a given expression node. During overload resolution, a contextual type may temporarily
         // be "pushed" onto a node using the contextualType property.
@@ -68331,60 +69614,60 @@
             }
             var parent = node.parent;
             switch (parent.kind) {
-                case 250 /* VariableDeclaration */:
-                case 161 /* Parameter */:
-                case 164 /* PropertyDeclaration */:
-                case 163 /* PropertySignature */:
-                case 199 /* BindingElement */:
+                case 252 /* VariableDeclaration */:
+                case 162 /* Parameter */:
+                case 165 /* PropertyDeclaration */:
+                case 164 /* PropertySignature */:
+                case 201 /* BindingElement */:
                     return getContextualTypeForInitializerExpression(node, contextFlags);
-                case 210 /* ArrowFunction */:
-                case 243 /* ReturnStatement */:
+                case 212 /* ArrowFunction */:
+                case 245 /* ReturnStatement */:
                     return getContextualTypeForReturnExpression(node);
-                case 220 /* YieldExpression */:
+                case 222 /* YieldExpression */:
                     return getContextualTypeForYieldOperand(parent);
-                case 214 /* AwaitExpression */:
+                case 216 /* AwaitExpression */:
                     return getContextualTypeForAwaitOperand(parent, contextFlags);
-                case 204 /* CallExpression */:
-                    if (parent.expression.kind === 99 /* ImportKeyword */) {
+                case 206 /* CallExpression */:
+                    if (parent.expression.kind === 100 /* ImportKeyword */) {
                         return stringType;
                     }
                 /* falls through */
-                case 205 /* NewExpression */:
+                case 207 /* NewExpression */:
                     return getContextualTypeForArgument(parent, node);
-                case 207 /* TypeAssertionExpression */:
-                case 225 /* AsExpression */:
+                case 209 /* TypeAssertionExpression */:
+                case 227 /* AsExpression */:
                     return ts.isConstTypeReference(parent.type) ? tryFindWhenConstTypeReference(parent) : getTypeFromTypeNode(parent.type);
-                case 217 /* BinaryExpression */:
+                case 219 /* BinaryExpression */:
                     return getContextualTypeForBinaryOperand(node, contextFlags);
-                case 289 /* PropertyAssignment */:
-                case 290 /* ShorthandPropertyAssignment */:
+                case 291 /* PropertyAssignment */:
+                case 292 /* ShorthandPropertyAssignment */:
                     return getContextualTypeForObjectLiteralElement(parent, contextFlags);
-                case 291 /* SpreadAssignment */:
+                case 293 /* SpreadAssignment */:
                     return getContextualType(parent.parent, contextFlags);
-                case 200 /* ArrayLiteralExpression */: {
+                case 202 /* ArrayLiteralExpression */: {
                     var arrayLiteral = parent;
                     var type = getApparentTypeOfContextualType(arrayLiteral, contextFlags);
                     return getContextualTypeForElementExpression(type, ts.indexOfNode(arrayLiteral.elements, node));
                 }
-                case 218 /* ConditionalExpression */:
+                case 220 /* ConditionalExpression */:
                     return getContextualTypeForConditionalOperand(node, contextFlags);
-                case 229 /* TemplateSpan */:
-                    ts.Debug.assert(parent.parent.kind === 219 /* TemplateExpression */);
+                case 231 /* TemplateSpan */:
+                    ts.Debug.assert(parent.parent.kind === 221 /* TemplateExpression */);
                     return getContextualTypeForSubstitutionExpression(parent.parent, node);
-                case 208 /* ParenthesizedExpression */: {
+                case 210 /* ParenthesizedExpression */: {
                     // Like in `checkParenthesizedExpression`, an `/** @type {xyz} */` comment before a parenthesized expression acts as a type cast.
                     var tag = ts.isInJSFile(parent) ? ts.getJSDocTypeTag(parent) : undefined;
                     return tag ? getTypeFromTypeNode(tag.typeExpression.type) : getContextualType(parent, contextFlags);
                 }
-                case 226 /* NonNullExpression */:
+                case 228 /* NonNullExpression */:
                     return getContextualType(parent, contextFlags);
-                case 284 /* JsxExpression */:
+                case 286 /* JsxExpression */:
                     return getContextualTypeForJsxExpression(parent);
-                case 281 /* JsxAttribute */:
-                case 283 /* JsxSpreadAttribute */:
+                case 283 /* JsxAttribute */:
+                case 285 /* JsxSpreadAttribute */:
                     return getContextualTypeForJsxAttribute(parent);
-                case 276 /* JsxOpeningElement */:
-                case 275 /* JsxSelfClosingElement */:
+                case 278 /* JsxOpeningElement */:
+                case 277 /* JsxSelfClosingElement */:
                     return getContextualJsxElementAttributesType(parent, contextFlags);
             }
             return undefined;
@@ -68624,7 +69907,7 @@
             return !hasEffectiveRestParameter(signature) && getParameterCount(signature) < targetParameterCount;
         }
         function isFunctionExpressionOrArrowFunction(node) {
-            return node.kind === 209 /* FunctionExpression */ || node.kind === 210 /* ArrowFunction */;
+            return node.kind === 211 /* FunctionExpression */ || node.kind === 212 /* ArrowFunction */;
         }
         function getContextualSignatureForFunctionLikeDeclaration(node) {
             // Only function expressions, arrow functions, and object literal methods are contextually typed.
@@ -68638,7 +69921,7 @@
         // all identical ignoring their return type, the result is same signature but with return type as
         // union type of return types from these signatures
         function getContextualSignature(node) {
-            ts.Debug.assert(node.kind !== 166 /* MethodDeclaration */ || ts.isObjectLiteralMethod(node));
+            ts.Debug.assert(node.kind !== 167 /* MethodDeclaration */ || ts.isObjectLiteralMethod(node));
             var typeTagSignature = getSignatureOfTypeTag(node);
             if (typeTagSignature) {
                 return typeTagSignature;
@@ -68652,8 +69935,8 @@
             }
             var signatureList;
             var types = type.types;
-            for (var _i = 0, types_20 = types; _i < types_20.length; _i++) {
-                var current = types_20[_i];
+            for (var _i = 0, types_19 = types; _i < types_19.length; _i++) {
+                var current = types_19[_i];
                 var signature = getContextualCallSignature(current, node);
                 if (signature) {
                     if (!signatureList) {
@@ -68686,8 +69969,8 @@
             return node.isSpread ? getIndexedAccessType(node.type, numberType) : node.type;
         }
         function hasDefaultValue(node) {
-            return (node.kind === 199 /* BindingElement */ && !!node.initializer) ||
-                (node.kind === 217 /* BinaryExpression */ && node.operatorToken.kind === 62 /* EqualsToken */);
+            return (node.kind === 201 /* BindingElement */ && !!node.initializer) ||
+                (node.kind === 219 /* BinaryExpression */ && node.operatorToken.kind === 63 /* EqualsToken */);
         }
         function checkArrayLiteral(node, checkMode, forceTuple) {
             var elements = node.elements;
@@ -68697,9 +69980,10 @@
             var contextualType = getApparentTypeOfContextualType(node);
             var inDestructuringPattern = ts.isAssignmentTarget(node);
             var inConstContext = isConstContext(node);
+            var hasOmittedExpression = false;
             for (var i = 0; i < elementCount; i++) {
                 var e = elements[i];
-                if (e.kind === 221 /* SpreadElement */) {
+                if (e.kind === 223 /* SpreadElement */) {
                     if (languageVersion < 2 /* ES2015 */) {
                         checkExternalEmitHelpers(e, compilerOptions.downlevelIteration ? 1536 /* SpreadIncludes */ : 1024 /* SpreadArray */);
                     }
@@ -68721,7 +70005,7 @@
                         // get the contextual element type from it. So we do something similar to
                         // getContextualTypeForElementExpression, which will crucially not error
                         // if there is no index type / iterated type.
-                        var restElementType = getIndexTypeOfType(spreadType, 1 /* Number */) ||
+                        var restElementType = getIndexTypeOfType(spreadType, numberType) ||
                             getIteratedTypeOrElementType(65 /* Destructuring */, spreadType, undefinedType, /*errorNode*/ undefined, /*checkAssignability*/ false) ||
                             unknownType;
                         elementTypes.push(restElementType);
@@ -68732,11 +70016,16 @@
                         elementFlags.push(4 /* Rest */);
                     }
                 }
+                else if (exactOptionalPropertyTypes && e.kind === 225 /* OmittedExpression */) {
+                    hasOmittedExpression = true;
+                    elementTypes.push(missingType);
+                    elementFlags.push(2 /* Optional */);
+                }
                 else {
                     var elementContextualType = getContextualTypeForElementExpression(contextualType, elementTypes.length);
                     var type = checkExpressionForMutableLocation(e, checkMode, elementContextualType, forceTuple);
-                    elementTypes.push(type);
-                    elementFlags.push(1 /* Required */);
+                    elementTypes.push(addOptionality(type, /*isProperty*/ true, hasOmittedExpression));
+                    elementFlags.push(hasOmittedExpression ? 2 /* Optional */ : 1 /* Required */);
                 }
             }
             if (inDestructuringPattern) {
@@ -68762,9 +70051,9 @@
         }
         function isNumericName(name) {
             switch (name.kind) {
-                case 159 /* ComputedPropertyName */:
+                case 160 /* ComputedPropertyName */:
                     return isNumericComputedName(name);
-                case 78 /* Identifier */:
+                case 79 /* Identifier */:
                     return isNumericLiteralName(name.escapedText);
                 case 8 /* NumericLiteral */:
                 case 10 /* StringLiteral */:
@@ -68778,9 +70067,6 @@
             // but this behavior is consistent with checkIndexedAccess
             return isTypeAssignableToKind(checkComputedPropertyName(name), 296 /* NumberLike */);
         }
-        function isInfinityOrNaNString(name) {
-            return name === "Infinity" || name === "-Infinity" || name === "NaN";
-        }
         function isNumericLiteralName(name) {
             // The intent of numeric names is that
             //     - they are names with text in a numeric form, and that
@@ -68838,15 +70124,24 @@
             var firstDecl = (_a = symbol.declarations) === null || _a === void 0 ? void 0 : _a[0];
             return isNumericLiteralName(symbol.escapedName) || (firstDecl && ts.isNamedDeclaration(firstDecl) && isNumericName(firstDecl.name));
         }
-        function getObjectLiteralIndexInfo(node, offset, properties, kind) {
+        function isSymbolWithSymbolName(symbol) {
+            var _a;
+            var firstDecl = (_a = symbol.declarations) === null || _a === void 0 ? void 0 : _a[0];
+            return ts.isKnownSymbol(symbol) || (firstDecl && ts.isNamedDeclaration(firstDecl) && ts.isComputedPropertyName(firstDecl.name) &&
+                isTypeAssignableToKind(checkComputedPropertyName(firstDecl.name), 4096 /* ESSymbol */));
+        }
+        function getObjectLiteralIndexInfo(node, offset, properties, keyType) {
             var propTypes = [];
             for (var i = offset; i < properties.length; i++) {
-                if (kind === 0 /* String */ || isSymbolWithNumericName(properties[i])) {
+                var prop = properties[i];
+                if (keyType === stringType && !isSymbolWithSymbolName(prop) ||
+                    keyType === numberType && isSymbolWithNumericName(prop) ||
+                    keyType === esSymbolType && isSymbolWithSymbolName(prop)) {
                     propTypes.push(getTypeOfSymbol(properties[i]));
                 }
             }
             var unionType = propTypes.length ? getUnionType(propTypes, 2 /* Subtype */) : undefinedType;
-            return createIndexInfo(unionType, isConstContext(node));
+            return createIndexInfo(keyType, unionType, isConstContext(node));
         }
         function getImmediateAliasedSymbol(symbol) {
             ts.Debug.assert((symbol.flags & 2097152 /* Alias */) !== 0, "Should only get Alias here.");
@@ -68869,7 +70164,7 @@
             var spread = emptyObjectType;
             var contextualType = getApparentTypeOfContextualType(node);
             var contextualTypeHasPattern = contextualType && contextualType.pattern &&
-                (contextualType.pattern.kind === 197 /* ObjectBindingPattern */ || contextualType.pattern.kind === 201 /* ObjectLiteralExpression */);
+                (contextualType.pattern.kind === 199 /* ObjectBindingPattern */ || contextualType.pattern.kind === 203 /* ObjectLiteralExpression */);
             var inConstContext = isConstContext(node);
             var checkFlags = inConstContext ? 8 /* Readonly */ : 0;
             var isInJavascript = ts.isInJSFile(node) && !ts.isInJsonFile(node);
@@ -68879,6 +70174,7 @@
             var patternWithComputedProperties = false;
             var hasComputedStringProperty = false;
             var hasComputedNumberProperty = false;
+            var hasComputedSymbolProperty = false;
             // Spreads may cause an early bail; ensure computed names are always checked (this is cached)
             // As otherwise they may not be checked until exports for the type at this position are retrieved,
             // which may never occur.
@@ -68892,16 +70188,16 @@
             for (var _b = 0, _c = node.properties; _b < _c.length; _b++) {
                 var memberDecl = _c[_b];
                 var member = getSymbolOfNode(memberDecl);
-                var computedNameType = memberDecl.name && memberDecl.name.kind === 159 /* ComputedPropertyName */ ?
+                var computedNameType = memberDecl.name && memberDecl.name.kind === 160 /* ComputedPropertyName */ ?
                     checkComputedPropertyName(memberDecl.name) : undefined;
-                if (memberDecl.kind === 289 /* PropertyAssignment */ ||
-                    memberDecl.kind === 290 /* ShorthandPropertyAssignment */ ||
+                if (memberDecl.kind === 291 /* PropertyAssignment */ ||
+                    memberDecl.kind === 292 /* ShorthandPropertyAssignment */ ||
                     ts.isObjectLiteralMethod(memberDecl)) {
-                    var type = memberDecl.kind === 289 /* PropertyAssignment */ ? checkPropertyAssignment(memberDecl, checkMode) :
+                    var type = memberDecl.kind === 291 /* PropertyAssignment */ ? checkPropertyAssignment(memberDecl, checkMode) :
                         // avoid resolving the left side of the ShorthandPropertyAssignment outside of the destructuring
                         // for error recovery purposes. For example, if a user wrote `{ a = 100 }` instead of `{ a: 100 }`.
                         // we don't want to say "could not find 'a'".
-                        memberDecl.kind === 290 /* ShorthandPropertyAssignment */ ? checkExpressionForMutableLocation(!inDestructuringPattern && memberDecl.objectAssignmentInitializer ? memberDecl.objectAssignmentInitializer : memberDecl.name, checkMode) :
+                        memberDecl.kind === 292 /* ShorthandPropertyAssignment */ ? checkExpressionForMutableLocation(!inDestructuringPattern && memberDecl.objectAssignmentInitializer ? memberDecl.objectAssignmentInitializer : memberDecl.name, checkMode) :
                             checkObjectLiteralMethod(memberDecl, checkMode);
                     if (isInJavascript) {
                         var jsDocType = getTypeForDeclarationFromJSDocComment(memberDecl);
@@ -68924,8 +70220,8 @@
                     if (inDestructuringPattern) {
                         // If object literal is an assignment pattern and if the assignment pattern specifies a default value
                         // for the property, make the property optional.
-                        var isOptional = (memberDecl.kind === 289 /* PropertyAssignment */ && hasDefaultValue(memberDecl.initializer)) ||
-                            (memberDecl.kind === 290 /* ShorthandPropertyAssignment */ && memberDecl.objectAssignmentInitializer);
+                        var isOptional = (memberDecl.kind === 291 /* PropertyAssignment */ && hasDefaultValue(memberDecl.initializer)) ||
+                            (memberDecl.kind === 292 /* ShorthandPropertyAssignment */ && memberDecl.objectAssignmentInitializer);
                         if (isOptional) {
                             prop.flags |= 16777216 /* Optional */;
                         }
@@ -68937,7 +70233,7 @@
                         if (impliedProp) {
                             prop.flags |= impliedProp.flags & 16777216 /* Optional */;
                         }
-                        else if (!compilerOptions.suppressExcessPropertyErrors && !getIndexInfoOfType(contextualType, 0 /* String */)) {
+                        else if (!compilerOptions.suppressExcessPropertyErrors && !getIndexInfoOfType(contextualType, stringType)) {
                             error(memberDecl.name, ts.Diagnostics.Object_literal_may_only_specify_known_properties_and_0_does_not_exist_in_type_1, symbolToString(member), typeToString(contextualType));
                         }
                     }
@@ -68951,7 +70247,7 @@
                     member = prop;
                     allPropertiesTable === null || allPropertiesTable === void 0 ? void 0 : allPropertiesTable.set(prop.escapedName, prop);
                 }
-                else if (memberDecl.kind === 291 /* SpreadAssignment */) {
+                else if (memberDecl.kind === 293 /* SpreadAssignment */) {
                     if (languageVersion < 2 /* ES2015 */) {
                         checkExternalEmitHelpers(memberDecl, 2 /* Assign */);
                     }
@@ -68961,17 +70257,19 @@
                         propertiesTable = ts.createSymbolTable();
                         hasComputedStringProperty = false;
                         hasComputedNumberProperty = false;
+                        hasComputedSymbolProperty = false;
                     }
                     var type = getReducedType(checkExpression(memberDecl.expression));
                     if (isValidSpreadType(type)) {
+                        var mergedType = tryMergeUnionOfObjectTypeAndEmptyObject(type, inConstContext);
                         if (allPropertiesTable) {
-                            checkSpreadPropOverrides(type, allPropertiesTable, memberDecl);
+                            checkSpreadPropOverrides(mergedType, allPropertiesTable, memberDecl);
                         }
                         offset = propertiesArray.length;
                         if (spread === errorType) {
                             continue;
                         }
-                        spread = getSpreadType(spread, type, node.symbol, objectFlags, inConstContext);
+                        spread = getSpreadType(spread, mergedType, node.symbol, objectFlags, inConstContext);
                     }
                     else {
                         error(memberDecl, ts.Diagnostics.Spread_types_may_only_be_created_from_object_types);
@@ -68985,7 +70283,7 @@
                     // an ordinary function declaration(section 6.1) with no parameters.
                     // A set accessor declaration is processed in the same manner
                     // as an ordinary function declaration with a single parameter and a Void return type.
-                    ts.Debug.assert(memberDecl.kind === 168 /* GetAccessor */ || memberDecl.kind === 169 /* SetAccessor */);
+                    ts.Debug.assert(memberDecl.kind === 170 /* GetAccessor */ || memberDecl.kind === 171 /* SetAccessor */);
                     checkNodeDeferred(memberDecl);
                 }
                 if (computedNameType && !(computedNameType.flags & 8576 /* StringOrNumberLiteralOrUnique */)) {
@@ -68993,6 +70291,9 @@
                         if (isTypeAssignableTo(computedNameType, numberType)) {
                             hasComputedNumberProperty = true;
                         }
+                        else if (isTypeAssignableTo(computedNameType, esSymbolType)) {
+                            hasComputedSymbolProperty = true;
+                        }
                         else {
                             hasComputedStringProperty = true;
                         }
@@ -69010,7 +70311,7 @@
             // type with those properties for which the binding pattern specifies a default value.
             // If the object literal is spread into another object literal, skip this step and let the top-level object
             // literal handle it instead.
-            if (contextualTypeHasPattern && node.parent.kind !== 291 /* SpreadAssignment */) {
+            if (contextualTypeHasPattern && node.parent.kind !== 293 /* SpreadAssignment */) {
                 for (var _d = 0, _e = getPropertiesOfType(contextualType); _d < _e.length; _d++) {
                     var prop = _e[_d];
                     if (!propertiesTable.get(prop.escapedName) && !getPropertyOfType(spread, prop.escapedName)) {
@@ -69038,9 +70339,14 @@
             }
             return createObjectLiteralType();
             function createObjectLiteralType() {
-                var stringIndexInfo = hasComputedStringProperty ? getObjectLiteralIndexInfo(node, offset, propertiesArray, 0 /* String */) : undefined;
-                var numberIndexInfo = hasComputedNumberProperty ? getObjectLiteralIndexInfo(node, offset, propertiesArray, 1 /* Number */) : undefined;
-                var result = createAnonymousType(node.symbol, propertiesTable, ts.emptyArray, ts.emptyArray, stringIndexInfo, numberIndexInfo);
+                var indexInfos = [];
+                if (hasComputedStringProperty)
+                    indexInfos.push(getObjectLiteralIndexInfo(node, offset, propertiesArray, stringType));
+                if (hasComputedNumberProperty)
+                    indexInfos.push(getObjectLiteralIndexInfo(node, offset, propertiesArray, numberType));
+                if (hasComputedSymbolProperty)
+                    indexInfos.push(getObjectLiteralIndexInfo(node, offset, propertiesArray, esSymbolType));
+                var result = createAnonymousType(node.symbol, propertiesTable, ts.emptyArray, ts.emptyArray, indexInfos);
                 result.objectFlags |= objectFlags | 128 /* ObjectLiteral */ | 262144 /* ContainsObjectOrArrayLiteral */;
                 if (isJSObjectLiteral) {
                     result.objectFlags |= 8192 /* JSLiteral */;
@@ -69102,14 +70408,14 @@
             checkJsxChildren(node);
             return getJsxElementTypeAt(node) || anyType;
         }
-        function isUnhyphenatedJsxName(name) {
-            return !ts.stringContains(name, "-");
+        function isHyphenatedJsxName(name) {
+            return ts.stringContains(name, "-");
         }
         /**
          * Returns true iff React would emit this tag name as a string rather than an identifier or qualified name
          */
         function isJsxIntrinsicIdentifier(tagName) {
-            return tagName.kind === 78 /* Identifier */ && ts.isIntrinsicJsxName(tagName.escapedText);
+            return tagName.kind === 79 /* Identifier */ && ts.isIntrinsicJsxName(tagName.escapedText);
         }
         function checkJsxAttribute(node, checkMode) {
             return node.initializer
@@ -69156,7 +70462,7 @@
                     }
                 }
                 else {
-                    ts.Debug.assert(attributeDecl.kind === 283 /* JsxSpreadAttribute */);
+                    ts.Debug.assert(attributeDecl.kind === 285 /* JsxSpreadAttribute */);
                     if (attributesTable.size > 0) {
                         spread = getSpreadType(spread, createJsxAttributesType(), attributes.symbol, objectFlags, /*readonly*/ false);
                         attributesTable = ts.createSymbolTable();
@@ -69182,7 +70488,7 @@
                 }
             }
             // Handle children attribute
-            var parent = openingLikeElement.parent.kind === 274 /* JsxElement */ ? openingLikeElement.parent : undefined;
+            var parent = openingLikeElement.parent.kind === 276 /* JsxElement */ ? openingLikeElement.parent : undefined;
             // We have to check that openingElement of the parent is the one we are visiting as this may not be true for selfClosingElement
             if (parent && parent.openingElement === openingLikeElement && parent.children.length > 0) {
                 var childrenTypes = checkJsxChildren(parent, checkMode);
@@ -69206,7 +70512,7 @@
                     childrenPropSymbol.valueDeclaration.symbol = childrenPropSymbol;
                     var childPropMap = ts.createSymbolTable();
                     childPropMap.set(jsxChildrenPropertyName, childrenPropSymbol);
-                    spread = getSpreadType(spread, createAnonymousType(attributes.symbol, childPropMap, ts.emptyArray, ts.emptyArray, /*stringIndexInfo*/ undefined, /*numberIndexInfo*/ undefined), attributes.symbol, objectFlags, /*readonly*/ false);
+                    spread = getSpreadType(spread, createAnonymousType(attributes.symbol, childPropMap, ts.emptyArray, ts.emptyArray, ts.emptyArray), attributes.symbol, objectFlags, /*readonly*/ false);
                 }
             }
             if (hasSpreadAnyType) {
@@ -69223,7 +70529,7 @@
              */
             function createJsxAttributesType() {
                 objectFlags |= freshObjectLiteralFlag;
-                var result = createAnonymousType(attributes.symbol, attributesTable, ts.emptyArray, ts.emptyArray, /*stringIndexInfo*/ undefined, /*numberIndexInfo*/ undefined);
+                var result = createAnonymousType(attributes.symbol, attributesTable, ts.emptyArray, ts.emptyArray, ts.emptyArray);
                 result.objectFlags |= objectFlags | 128 /* ObjectLiteral */ | 262144 /* ContainsObjectOrArrayLiteral */;
                 return result;
             }
@@ -69239,7 +70545,7 @@
                         childrenTypes.push(stringType);
                     }
                 }
-                else if (child.kind === 284 /* JsxExpression */ && !child.expression) {
+                else if (child.kind === 286 /* JsxExpression */ && !child.expression) {
                     continue; // empty jsx expressions don't *really* count as present children
                 }
                 else {
@@ -69251,11 +70557,12 @@
         function checkSpreadPropOverrides(type, props, spread) {
             for (var _i = 0, _a = getPropertiesOfType(type); _i < _a.length; _i++) {
                 var right = _a[_i];
-                var left = props.get(right.escapedName);
-                var rightType = getTypeOfSymbol(right);
-                if (left && !maybeTypeOfKind(rightType, 98304 /* Nullable */) && !(maybeTypeOfKind(rightType, 3 /* AnyOrUnknown */) && right.flags & 16777216 /* Optional */)) {
-                    var diagnostic = error(left.valueDeclaration, ts.Diagnostics._0_is_specified_more_than_once_so_this_usage_will_be_overwritten, ts.unescapeLeadingUnderscores(left.escapedName));
-                    ts.addRelatedInfo(diagnostic, ts.createDiagnosticForNode(spread, ts.Diagnostics.This_spread_always_overwrites_this_property));
+                if (!(right.flags & 16777216 /* Optional */)) {
+                    var left = props.get(right.escapedName);
+                    if (left) {
+                        var diagnostic = error(left.valueDeclaration, ts.Diagnostics._0_is_specified_more_than_once_so_this_usage_will_be_overwritten, ts.unescapeLeadingUnderscores(left.escapedName));
+                        ts.addRelatedInfo(diagnostic, ts.createDiagnosticForNode(spread, ts.Diagnostics.This_spread_always_overwrites_this_property));
+                    }
                 }
             }
         }
@@ -69293,7 +70600,7 @@
                         return links.resolvedSymbol = intrinsicProp;
                     }
                     // Intrinsic string indexer case
-                    var indexSignatureType = getIndexTypeOfType(intrinsicElementsType, 0 /* String */);
+                    var indexSignatureType = getIndexTypeOfType(intrinsicElementsType, stringType);
                     if (indexSignatureType) {
                         links.jsxFlags |= 2 /* IntrinsicIndexedElement */;
                         return links.resolvedSymbol = intrinsicElementsType.symbol;
@@ -69452,7 +70759,7 @@
                 if (intrinsicProp) {
                     return getTypeOfSymbol(intrinsicProp);
                 }
-                var indexSignatureType = getIndexTypeOfType(intrinsicElementsType, 0 /* String */);
+                var indexSignatureType = getIndexTypeOfType(intrinsicElementsType, stringType);
                 if (indexSignatureType) {
                     return indexSignatureType;
                 }
@@ -69504,7 +70811,7 @@
                 }
                 else if (links.jsxFlags & 2 /* IntrinsicIndexedElement */) {
                     return links.resolvedJsxElementAttributesType =
-                        getIndexTypeOfType(getJsxType(JsxNames.IntrinsicElements, node), 0 /* String */) || errorType;
+                        getIndexTypeOfType(getJsxType(JsxNames.IntrinsicElements, node), stringType) || errorType;
                 }
                 else {
                     return links.resolvedJsxElementAttributesType = errorType;
@@ -69594,11 +70901,13 @@
          */
         function isKnownProperty(targetType, name, isComparingJsxAttributes) {
             if (targetType.flags & 524288 /* Object */) {
-                var resolved = resolveStructuredTypeMembers(targetType);
-                if (resolved.stringIndexInfo ||
-                    resolved.numberIndexInfo && isNumericLiteralName(name) ||
-                    getPropertyOfObjectType(targetType, name) ||
-                    isComparingJsxAttributes && !isUnhyphenatedJsxName(name)) {
+                // For backwards compatibility a symbol-named property is satisfied by a string index signature. This
+                // is incorrect and inconsistent with element access expressions, where it is an error, so eventually
+                // we should remove this exception.
+                if (getPropertyOfObjectType(targetType, name) ||
+                    getApplicableIndexInfoForName(targetType, name) ||
+                    isLateBoundName(name) && getIndexInfoOfType(targetType, stringType) ||
+                    isComparingJsxAttributes && isHyphenatedJsxName(name)) {
                     // For JSXAttributes, if the attribute has a hyphenated name, consider that the attribute to be known.
                     return true;
                 }
@@ -69660,9 +70969,9 @@
         function checkPropertyAccessibility(node, isSuper, writing, type, prop, reportError) {
             if (reportError === void 0) { reportError = true; }
             var flags = ts.getDeclarationModifierFlagsFromSymbol(prop, writing);
-            var errorNode = node.kind === 158 /* QualifiedName */ ? node.right :
-                node.kind === 196 /* ImportType */ ? node :
-                    node.kind === 199 /* BindingElement */ && node.propertyName ? node.propertyName : node.name;
+            var errorNode = node.kind === 159 /* QualifiedName */ ? node.right :
+                node.kind === 198 /* ImportType */ ? node :
+                    node.kind === 201 /* BindingElement */ && node.propertyName ? node.propertyName : node.name;
             if (isSuper) {
                 // TS 1.0 spec (April 2014): 4.8.2
                 // - In a constructor, instance member function, instance member accessor, or
@@ -69819,10 +71128,11 @@
             return propagateOptionalTypeMarker(checkPropertyAccessExpressionOrQualifiedName(node, node.expression, checkNonNullType(nonOptionalType, node.expression), node.name, checkMode), node, nonOptionalType !== leftType);
         }
         function checkQualifiedName(node, checkMode) {
-            return checkPropertyAccessExpressionOrQualifiedName(node, node.left, checkNonNullExpression(node.left), node.right, checkMode);
+            var leftType = ts.isPartOfTypeQuery(node) && ts.isThisIdentifier(node.left) ? checkNonNullType(checkThisExpression(node.left), node.left) : checkNonNullExpression(node.left);
+            return checkPropertyAccessExpressionOrQualifiedName(node, node.left, leftType, node.right, checkMode);
         }
         function isMethodAccessForCall(node) {
-            while (node.parent.kind === 208 /* ParenthesizedExpression */) {
+            while (node.parent.kind === 210 /* ParenthesizedExpression */) {
                 node = node.parent;
             }
             return ts.isCallOrNewExpression(node.parent) && node.parent.expression === node;
@@ -69957,9 +71267,11 @@
             }
             var propType;
             if (!prop) {
-                var indexInfo = !ts.isPrivateIdentifier(right) && (assignmentKind === 0 /* None */ || !isGenericObjectType(leftType) || isThisTypeParameter(leftType)) ? getIndexInfoOfType(apparentType, 0 /* String */) : undefined;
+                var indexInfo = !ts.isPrivateIdentifier(right) && (assignmentKind === 0 /* None */ || !isGenericObjectType(leftType) || isThisTypeParameter(leftType)) ?
+                    getApplicableIndexInfoForName(apparentType, right.escapedText) : undefined;
                 if (!(indexInfo && indexInfo.type)) {
-                    if (isJSLiteralType(leftType)) {
+                    var isUncheckedJS = isUncheckedJSSuggestion(node, leftType.symbol, /*excludeClasses*/ true);
+                    if (!isUncheckedJS && isJSLiteralType(leftType)) {
                         return anyType;
                     }
                     if (leftType.symbol === globalThisSymbol) {
@@ -69972,7 +71284,7 @@
                         return anyType;
                     }
                     if (right.escapedText && !checkAndReportErrorForExtendingInterface(node)) {
-                        reportNonexistentProperty(right, isThisTypeParameter(leftType) ? apparentType : leftType);
+                        reportNonexistentProperty(right, isThisTypeParameter(leftType) ? apparentType : leftType, isUncheckedJS);
                     }
                     return errorType;
                 }
@@ -69992,7 +71304,7 @@
                 markPropertyAsReferenced(prop, node, isSelfTypeAccess(left, parentSymbol));
                 getNodeLinks(node).resolvedSymbol = prop;
                 var writing = ts.isWriteAccess(node);
-                checkPropertyAccessibility(node, left.kind === 105 /* SuperKeyword */, writing, apparentType, prop);
+                checkPropertyAccessibility(node, left.kind === 106 /* SuperKeyword */, writing, apparentType, prop);
                 if (isAssignmentToReadonlyEntity(node, prop, assignmentKind)) {
                     error(right, ts.Diagnostics.Cannot_assign_to_0_because_it_is_a_read_only_property, ts.idText(right));
                     return errorType;
@@ -70001,16 +71313,37 @@
             }
             return getFlowTypeOfAccessExpression(node, prop, propType, right, checkMode);
         }
+        /**
+         * Determines whether a did-you-mean error should be a suggestion in an unchecked JS file.
+         * Only applies to unchecked JS files without checkJS, // @ts-check or // @ts-nocheck
+         * It does not suggest when the suggestion:
+         * - Is from a global file that is different from the reference file, or
+         * - (optionally) Is a class, or is a this.x property access expression
+         */
+        function isUncheckedJSSuggestion(node, suggestion, excludeClasses) {
+            var file = ts.getSourceFileOfNode(node);
+            if (file) {
+                if (compilerOptions.checkJs === undefined && file.checkJsDirective === undefined && (file.scriptKind === 1 /* JS */ || file.scriptKind === 2 /* JSX */)) {
+                    var declarationFile = ts.forEach(suggestion === null || suggestion === void 0 ? void 0 : suggestion.declarations, ts.getSourceFileOfNode);
+                    return !(file !== declarationFile && !!declarationFile && isGlobalSourceFile(declarationFile))
+                        && !(excludeClasses && suggestion && suggestion.flags & 32 /* Class */)
+                        && !(!!node && excludeClasses && ts.isPropertyAccessExpression(node) && node.expression.kind === 108 /* ThisKeyword */);
+                }
+            }
+            return false;
+        }
         function getFlowTypeOfAccessExpression(node, prop, propType, errorNode, checkMode) {
             // Only compute control flow type if this is a property access expression that isn't an
             // assignment target, and the referenced property was declared as a variable, property,
             // accessor, or optional method.
             var assignmentKind = ts.getAssignmentTargetKind(node);
-            if (assignmentKind === 1 /* Definite */ ||
-                prop &&
-                    !(prop.flags & (3 /* Variable */ | 4 /* Property */ | 98304 /* Accessor */))
-                    && !(prop.flags & 8192 /* Method */ && propType.flags & 1048576 /* Union */)
-                    && !isDuplicatedCommonJSExport(prop.declarations)) {
+            if (assignmentKind === 1 /* Definite */) {
+                return removeMissingType(propType, !!(prop && prop.flags & 16777216 /* Optional */));
+            }
+            if (prop &&
+                !(prop.flags & (3 /* Variable */ | 4 /* Property */ | 98304 /* Accessor */))
+                && !(prop.flags & 8192 /* Method */ && propType.flags & 1048576 /* Union */)
+                && !isDuplicatedCommonJSExport(prop.declarations)) {
                 return propType;
             }
             if (propType === autoType) {
@@ -70022,12 +71355,14 @@
             // and if we are in a constructor of the same class as the property declaration, assume that
             // the property is uninitialized at the top of the control flow.
             var assumeUninitialized = false;
-            if (strictNullChecks && strictPropertyInitialization && ts.isAccessExpression(node) && node.expression.kind === 107 /* ThisKeyword */) {
+            if (strictNullChecks && strictPropertyInitialization && ts.isAccessExpression(node) && node.expression.kind === 108 /* ThisKeyword */) {
                 var declaration = prop && prop.valueDeclaration;
-                if (declaration && isInstancePropertyWithoutInitializer(declaration)) {
-                    var flowContainer = getControlFlowContainer(node);
-                    if (flowContainer.kind === 167 /* Constructor */ && flowContainer.parent === declaration.parent && !(declaration.flags & 8388608 /* Ambient */)) {
-                        assumeUninitialized = true;
+                if (declaration && isPropertyWithoutInitializer(declaration)) {
+                    if (!ts.isStatic(declaration)) {
+                        var flowContainer = getControlFlowContainer(node);
+                        if (flowContainer.kind === 169 /* Constructor */ && flowContainer.parent === declaration.parent && !(declaration.flags & 8388608 /* Ambient */)) {
+                            assumeUninitialized = true;
+                        }
                     }
                 }
             }
@@ -70052,15 +71387,15 @@
             }
             var diagnosticMessage;
             var declarationName = ts.idText(right);
-            if (isInPropertyInitializer(node)
+            if (isInPropertyInitializerOrClassStaticBlock(node)
                 && !isOptionalPropertyDeclaration(valueDeclaration)
                 && !(ts.isAccessExpression(node) && ts.isAccessExpression(node.expression))
                 && !isBlockScopedNameDeclaredBeforeUse(valueDeclaration, right)
                 && (compilerOptions.useDefineForClassFields || !isPropertyDeclaredInAncestorClass(prop))) {
                 diagnosticMessage = error(right, ts.Diagnostics.Property_0_is_used_before_its_initialization, declarationName);
             }
-            else if (valueDeclaration.kind === 253 /* ClassDeclaration */ &&
-                node.parent.kind !== 174 /* TypeReference */ &&
+            else if (valueDeclaration.kind === 255 /* ClassDeclaration */ &&
+                node.parent.kind !== 176 /* TypeReference */ &&
                 !(valueDeclaration.flags & 8388608 /* Ambient */) &&
                 !isBlockScopedNameDeclaredBeforeUse(valueDeclaration, right)) {
                 diagnosticMessage = error(right, ts.Diagnostics.Class_0_used_before_its_declaration, declarationName);
@@ -70069,26 +71404,29 @@
                 ts.addRelatedInfo(diagnosticMessage, ts.createDiagnosticForNode(valueDeclaration, ts.Diagnostics._0_is_declared_here, declarationName));
             }
         }
-        function isInPropertyInitializer(node) {
+        function isInPropertyInitializerOrClassStaticBlock(node) {
             return !!ts.findAncestor(node, function (node) {
                 switch (node.kind) {
-                    case 164 /* PropertyDeclaration */:
+                    case 165 /* PropertyDeclaration */:
                         return true;
-                    case 289 /* PropertyAssignment */:
-                    case 166 /* MethodDeclaration */:
-                    case 168 /* GetAccessor */:
-                    case 169 /* SetAccessor */:
-                    case 291 /* SpreadAssignment */:
-                    case 159 /* ComputedPropertyName */:
-                    case 229 /* TemplateSpan */:
-                    case 284 /* JsxExpression */:
-                    case 281 /* JsxAttribute */:
-                    case 282 /* JsxAttributes */:
-                    case 283 /* JsxSpreadAttribute */:
-                    case 276 /* JsxOpeningElement */:
-                    case 224 /* ExpressionWithTypeArguments */:
-                    case 287 /* HeritageClause */:
+                    case 291 /* PropertyAssignment */:
+                    case 167 /* MethodDeclaration */:
+                    case 170 /* GetAccessor */:
+                    case 171 /* SetAccessor */:
+                    case 293 /* SpreadAssignment */:
+                    case 160 /* ComputedPropertyName */:
+                    case 231 /* TemplateSpan */:
+                    case 286 /* JsxExpression */:
+                    case 283 /* JsxAttribute */:
+                    case 284 /* JsxAttributes */:
+                    case 285 /* JsxSpreadAttribute */:
+                    case 278 /* JsxOpeningElement */:
+                    case 226 /* ExpressionWithTypeArguments */:
+                    case 289 /* HeritageClause */:
                         return false;
+                    case 212 /* ArrowFunction */:
+                    case 236 /* ExpressionStatement */:
+                        return ts.isBlock(node.parent) && ts.isClassStaticBlockDeclaration(node.parent.parent) ? true : "quit";
                     default:
                         return ts.isExpressionNode(node) ? false : "quit";
                 }
@@ -70121,13 +71459,13 @@
             }
             return getIntersectionType(x);
         }
-        function reportNonexistentProperty(propNode, containingType) {
+        function reportNonexistentProperty(propNode, containingType, isUncheckedJS) {
             var errorInfo;
             var relatedInfo;
             if (!ts.isPrivateIdentifier(propNode) && containingType.flags & 1048576 /* Union */ && !(containingType.flags & 131068 /* Primitive */)) {
                 for (var _i = 0, _a = containingType.types; _i < _a.length; _i++) {
                     var subtype = _a[_i];
-                    if (!getPropertyOfType(subtype, propNode.escapedText) && !getIndexInfoOfType(subtype, 0 /* String */)) {
+                    if (!getPropertyOfType(subtype, propNode.escapedText) && !getApplicableIndexInfoForName(subtype, propNode.escapedText)) {
                         errorInfo = ts.chainDiagnosticMessages(errorInfo, ts.Diagnostics.Property_0_does_not_exist_on_type_1, ts.declarationNameToString(propNode), typeToString(subtype));
                         break;
                     }
@@ -70155,7 +71493,8 @@
                         var suggestion = getSuggestedSymbolForNonexistentProperty(propNode, containingType);
                         if (suggestion !== undefined) {
                             var suggestedName = ts.symbolName(suggestion);
-                            errorInfo = ts.chainDiagnosticMessages(errorInfo, ts.Diagnostics.Property_0_does_not_exist_on_type_1_Did_you_mean_2, missingProperty, container, suggestedName);
+                            var message = isUncheckedJS ? ts.Diagnostics.Property_0_may_not_exist_on_type_1_Did_you_mean_2 : ts.Diagnostics.Property_0_does_not_exist_on_type_1_Did_you_mean_2;
+                            errorInfo = ts.chainDiagnosticMessages(errorInfo, message, missingProperty, container, suggestedName);
                             relatedInfo = suggestion.valueDeclaration && ts.createDiagnosticForNode(suggestion.valueDeclaration, ts.Diagnostics._0_is_declared_here, suggestedName);
                         }
                         else {
@@ -70171,7 +71510,7 @@
             if (relatedInfo) {
                 ts.addRelatedInfo(resultDiagnostic, relatedInfo);
             }
-            diagnostics.add(resultDiagnostic);
+            addErrorOrSuggestion(!isUncheckedJS, resultDiagnostic);
         }
         function containerSeemsToBeEmptyDomElement(containingType) {
             return (compilerOptions.lib && !compilerOptions.lib.includes("dom")) &&
@@ -70180,7 +71519,7 @@
         }
         function typeHasStaticProperty(propName, containingType) {
             var prop = containingType.symbol && getPropertyOfType(getTypeOfSymbol(containingType.symbol), propName);
-            return prop !== undefined && !!prop.valueDeclaration && ts.hasSyntacticModifier(prop.valueDeclaration, 32 /* Static */);
+            return prop !== undefined && !!prop.valueDeclaration && ts.isStatic(prop.valueDeclaration);
         }
         function getSuggestedLibForNonExistentName(name) {
             var missingName = diagnosticName(name);
@@ -70210,6 +71549,9 @@
                 }
             }
         }
+        function getSuggestedSymbolForNonexistentClassMember(name, baseType) {
+            return getSpellingSuggestionForName(name, getPropertiesOfType(baseType), 106500 /* ClassMember */);
+        }
         function getSuggestedSymbolForNonexistentProperty(name, containingType) {
             var props = getPropertiesOfType(containingType);
             if (typeof name !== "string") {
@@ -70337,21 +71679,21 @@
             (ts.getCheckFlags(prop) & 1 /* Instantiated */ ? getSymbolLinks(prop).target : prop).isReferenced = 67108863 /* All */;
         }
         function isSelfTypeAccess(name, parent) {
-            return name.kind === 107 /* ThisKeyword */
+            return name.kind === 108 /* ThisKeyword */
                 || !!parent && ts.isEntityNameExpression(name) && parent === getResolvedSymbol(ts.getFirstIdentifier(name));
         }
         function isValidPropertyAccess(node, propertyName) {
             switch (node.kind) {
-                case 202 /* PropertyAccessExpression */:
-                    return isValidPropertyAccessWithType(node, node.expression.kind === 105 /* SuperKeyword */, propertyName, getWidenedType(checkExpression(node.expression)));
-                case 158 /* QualifiedName */:
+                case 204 /* PropertyAccessExpression */:
+                    return isValidPropertyAccessWithType(node, node.expression.kind === 106 /* SuperKeyword */, propertyName, getWidenedType(checkExpression(node.expression)));
+                case 159 /* QualifiedName */:
                     return isValidPropertyAccessWithType(node, /*isSuper*/ false, propertyName, getWidenedType(checkExpression(node.left)));
-                case 196 /* ImportType */:
+                case 198 /* ImportType */:
                     return isValidPropertyAccessWithType(node, /*isSuper*/ false, propertyName, getTypeFromTypeNode(node));
             }
         }
         function isValidPropertyAccessForCompletions(node, type, property) {
-            return isValidPropertyAccessWithType(node, node.kind === 202 /* PropertyAccessExpression */ && node.expression.kind === 105 /* SuperKeyword */, property.escapedName, type);
+            return isValidPropertyAccessWithType(node, node.kind === 204 /* PropertyAccessExpression */ && node.expression.kind === 106 /* SuperKeyword */, property.escapedName, type);
             // Previously we validated the 'this' type of methods but this adversely affected performance. See #31377 for more context.
         }
         function isValidPropertyAccessWithType(node, isSuper, propertyName, type) {
@@ -70374,13 +71716,13 @@
          */
         function getForInVariableSymbol(node) {
             var initializer = node.initializer;
-            if (initializer.kind === 251 /* VariableDeclarationList */) {
+            if (initializer.kind === 253 /* VariableDeclarationList */) {
                 var variable = initializer.declarations[0];
                 if (variable && !ts.isBindingPattern(variable.name)) {
                     return getSymbolOfNode(variable);
                 }
             }
-            else if (initializer.kind === 78 /* Identifier */) {
+            else if (initializer.kind === 79 /* Identifier */) {
                 return getResolvedSymbol(initializer);
             }
             return undefined;
@@ -70389,7 +71731,7 @@
          * Return true if the given type is considered to have numeric property names.
          */
         function hasNumericPropertyNames(type) {
-            return getIndexTypeOfType(type, 1 /* Number */) && !getIndexTypeOfType(type, 0 /* String */);
+            return getIndexInfosOfType(type).length === 1 && !!getIndexInfoOfType(type, numberType);
         }
         /**
          * Return true if given node is an expression consisting of an identifier (possibly parenthesized)
@@ -70397,13 +71739,13 @@
          */
         function isForInVariableForNumericPropertyNames(expr) {
             var e = ts.skipParentheses(expr);
-            if (e.kind === 78 /* Identifier */) {
+            if (e.kind === 79 /* Identifier */) {
                 var symbol = getResolvedSymbol(e);
                 if (symbol.flags & 3 /* Variable */) {
                     var child = expr;
                     var node = expr.parent;
                     while (node) {
-                        if (node.kind === 239 /* ForInStatement */ &&
+                        if (node.kind === 241 /* ForInStatement */ &&
                             child === node.statement &&
                             getForInVariableSymbol(node) === symbol &&
                             hasNumericPropertyNames(getTypeOfExpression(node.expression))) {
@@ -70438,9 +71780,9 @@
             }
             var effectiveIndexType = isForInVariableForNumericPropertyNames(indexExpression) ? numberType : indexType;
             var accessFlags = ts.isAssignmentTarget(node) ?
-                2 /* Writing */ | (isGenericObjectType(objectType) && !isThisTypeParameter(objectType) ? 1 /* NoIndexSignatures */ : 0) :
-                0 /* None */;
-            var indexedAccessType = getIndexedAccessTypeOrUndefined(objectType, effectiveIndexType, /*noUncheckedIndexedAccessCandidate*/ undefined, node, accessFlags | 16 /* ExpressionPosition */) || errorType;
+                4 /* Writing */ | (isGenericObjectType(objectType) && !isThisTypeParameter(objectType) ? 2 /* NoIndexSignatures */ : 0) :
+                32 /* ExpressionPosition */;
+            var indexedAccessType = getIndexedAccessTypeOrUndefined(objectType, effectiveIndexType, accessFlags, node) || errorType;
             return checkIndexedAccessIndexType(getFlowTypeOfAccessExpression(node, getNodeLinks(node).resolvedSymbol, indexedAccessType, indexExpression, checkMode), node);
         }
         function callLikeExpressionMayHaveTypeArguments(node) {
@@ -70452,13 +71794,13 @@
                 // This gets us diagnostics for the type arguments and marks them as referenced.
                 ts.forEach(node.typeArguments, checkSourceElement);
             }
-            if (node.kind === 206 /* TaggedTemplateExpression */) {
+            if (node.kind === 208 /* TaggedTemplateExpression */) {
                 checkExpression(node.template);
             }
             else if (ts.isJsxOpeningLikeElement(node)) {
                 checkExpression(node.attributes);
             }
-            else if (node.kind !== 162 /* Decorator */) {
+            else if (node.kind !== 163 /* Decorator */) {
                 ts.forEach(node.arguments, function (argument) {
                     checkExpression(argument);
                 });
@@ -70522,7 +71864,7 @@
             }
         }
         function isSpreadArgument(arg) {
-            return !!arg && (arg.kind === 221 /* SpreadElement */ || arg.kind === 228 /* SyntheticExpression */ && arg.isSpread);
+            return !!arg && (arg.kind === 223 /* SpreadElement */ || arg.kind === 230 /* SyntheticExpression */ && arg.isSpread);
         }
         function getSpreadArgumentIndex(args) {
             return ts.findIndex(args, isSpreadArgument);
@@ -70539,9 +71881,9 @@
             var callIsIncomplete = false; // In incomplete call we want to be lenient when we have too few arguments
             var effectiveParameterCount = getParameterCount(signature);
             var effectiveMinimumArguments = getMinArgumentCount(signature);
-            if (node.kind === 206 /* TaggedTemplateExpression */) {
+            if (node.kind === 208 /* TaggedTemplateExpression */) {
                 argCount = args.length;
-                if (node.template.kind === 219 /* TemplateExpression */) {
+                if (node.template.kind === 221 /* TemplateExpression */) {
                     // If a tagged template expression lacks a tail literal, the call is incomplete.
                     // Specifically, a template only can end in a TemplateTail or a Missing literal.
                     var lastSpan = ts.last(node.template.templateSpans); // we should always have at least one span.
@@ -70556,7 +71898,7 @@
                     callIsIncomplete = !!templateLiteral.isUnterminated;
                 }
             }
-            else if (node.kind === 162 /* Decorator */) {
+            else if (node.kind === 163 /* Decorator */) {
                 argCount = getDecoratorArgumentCount(node, signature);
             }
             else if (ts.isJsxOpeningLikeElement(node)) {
@@ -70570,7 +71912,7 @@
             }
             else if (!node.arguments) {
                 // This only happens when we have something of the form: 'new C'
-                ts.Debug.assert(node.kind === 205 /* NewExpression */);
+                ts.Debug.assert(node.kind === 207 /* NewExpression */);
                 return getMinArgumentCount(signature) === 0;
             }
             else {
@@ -70619,7 +71961,7 @@
         function getSingleSignature(type, kind, allowMembers) {
             if (type.flags & 524288 /* Object */) {
                 var resolved = resolveStructuredTypeMembers(type);
-                if (allowMembers || resolved.properties.length === 0 && !resolved.stringIndexInfo && !resolved.numberIndexInfo) {
+                if (allowMembers || resolved.properties.length === 0 && resolved.indexInfos.length === 0) {
                     if (kind === 0 /* Call */ && resolved.callSignatures.length === 1 && resolved.constructSignatures.length === 0) {
                         return resolved.callSignatures[0];
                     }
@@ -70673,7 +72015,7 @@
             // example, given a 'function wrap<T, U>(cb: (x: T) => U): (x: T) => U' and a call expression
             // 'let f: (x: string) => number = wrap(s => s.length)', we infer from the declared type of 'f' to the
             // return type of 'wrap'.
-            if (node.kind !== 162 /* Decorator */) {
+            if (node.kind !== 163 /* Decorator */) {
                 var contextualType = getContextualType(node, ts.every(signature.typeParameters, function (p) { return !!getDefaultFromTypeParameter(p); }) ? 8 /* SkipBindingPatterns */ : 0 /* None */);
                 if (contextualType) {
                     // We clone the inference context to avoid disturbing a resolution in progress for an
@@ -70721,7 +72063,7 @@
             }
             for (var i = 0; i < argCount; i++) {
                 var arg = args[i];
-                if (arg.kind !== 223 /* OmittedExpression */) {
+                if (arg.kind !== 225 /* OmittedExpression */) {
                     var paramType = getTypeAtPosition(signature, i);
                     var argType = checkExpressionWithContextualType(arg, paramType, context, checkMode);
                     inferTypes(context.inferences, argType, paramType);
@@ -70745,7 +72087,7 @@
                 if (isSpreadArgument(arg)) {
                     // We are inferring from a spread expression in the last argument position, i.e. both the parameter
                     // and the argument are ...x forms.
-                    return getMutableArrayOrTupleType(arg.kind === 228 /* SyntheticExpression */ ? arg.type :
+                    return getMutableArrayOrTupleType(arg.kind === 230 /* SyntheticExpression */ ? arg.type :
                         checkExpressionWithContextualType(arg.expression, restType, context, checkMode));
                 }
             }
@@ -70755,24 +72097,24 @@
             for (var i = index; i < argCount; i++) {
                 var arg = args[i];
                 if (isSpreadArgument(arg)) {
-                    var spreadType = arg.kind === 228 /* SyntheticExpression */ ? arg.type : checkExpression(arg.expression);
+                    var spreadType = arg.kind === 230 /* SyntheticExpression */ ? arg.type : checkExpression(arg.expression);
                     if (isArrayLikeType(spreadType)) {
                         types.push(spreadType);
                         flags.push(8 /* Variadic */);
                     }
                     else {
-                        types.push(checkIteratedTypeOrElementType(33 /* Spread */, spreadType, undefinedType, arg.kind === 221 /* SpreadElement */ ? arg.expression : arg));
+                        types.push(checkIteratedTypeOrElementType(33 /* Spread */, spreadType, undefinedType, arg.kind === 223 /* SpreadElement */ ? arg.expression : arg));
                         flags.push(4 /* Rest */);
                     }
                 }
                 else {
-                    var contextualType = getIndexedAccessType(restType, getLiteralType(i - index));
+                    var contextualType = getIndexedAccessType(restType, getNumberLiteralType(i - index), 256 /* Contextual */);
                     var argType = checkExpressionWithContextualType(arg, contextualType, context, checkMode);
                     var hasPrimitiveContextualType = maybeTypeOfKind(contextualType, 131068 /* Primitive */ | 4194304 /* Index */ | 134217728 /* TemplateLiteral */ | 268435456 /* StringMapping */);
                     types.push(hasPrimitiveContextualType ? getRegularTypeOfLiteralType(argType) : getWidenedLiteralType(argType));
                     flags.push(1 /* Required */);
                 }
-                if (arg.kind === 228 /* SyntheticExpression */ && arg.tupleNameSource) {
+                if (arg.kind === 230 /* SyntheticExpression */ && arg.tupleNameSource) {
                     names.push(arg.tupleNameSource);
                 }
             }
@@ -70916,7 +72258,7 @@
                 return undefined;
             }
             var thisType = getThisTypeOfSignature(signature);
-            if (thisType && thisType !== voidType && node.kind !== 205 /* NewExpression */) {
+            if (thisType && thisType !== voidType && node.kind !== 207 /* NewExpression */) {
                 // If the called expression is not of the form `x.f` or `x["f"]`, then sourceType = voidType
                 // If the signature's 'this' type is voidType, then the check is skipped -- anything is compatible.
                 // If the expression is a new expression, then the check is skipped.
@@ -70934,7 +72276,7 @@
             var argCount = restType ? Math.min(getParameterCount(signature) - 1, args.length) : args.length;
             for (var i = 0; i < argCount; i++) {
                 var arg = args[i];
-                if (arg.kind !== 223 /* OmittedExpression */) {
+                if (arg.kind !== 225 /* OmittedExpression */) {
                     var paramType = getTypeAtPosition(signature, i);
                     var argType = checkExpressionWithContextualType(arg, paramType, /*inferenceContext*/ undefined, checkMode);
                     // If one or more arguments are still excluded (as indicated by CheckMode.SkipContextSensitive),
@@ -70979,8 +72321,10 @@
          * Returns the this argument in calls like x.f(...) and x[f](...). Undefined otherwise.
          */
         function getThisArgumentOfCall(node) {
-            if (node.kind === 204 /* CallExpression */) {
-                var callee = ts.skipOuterExpressions(node.expression);
+            var expression = node.kind === 206 /* CallExpression */ ? node.expression :
+                node.kind === 208 /* TaggedTemplateExpression */ ? node.tag : undefined;
+            if (expression) {
+                var callee = ts.skipOuterExpressions(expression);
                 if (ts.isAccessExpression(callee)) {
                     return callee.expression;
                 }
@@ -70996,17 +72340,17 @@
          * Returns the effective arguments for an expression that works like a function invocation.
          */
         function getEffectiveCallArguments(node) {
-            if (node.kind === 206 /* TaggedTemplateExpression */) {
+            if (node.kind === 208 /* TaggedTemplateExpression */) {
                 var template = node.template;
                 var args_3 = [createSyntheticExpression(template, getGlobalTemplateStringsArrayType())];
-                if (template.kind === 219 /* TemplateExpression */) {
+                if (template.kind === 221 /* TemplateExpression */) {
                     ts.forEach(template.templateSpans, function (span) {
                         args_3.push(span.expression);
                     });
                 }
                 return args_3;
             }
-            if (node.kind === 162 /* Decorator */) {
+            if (node.kind === 163 /* Decorator */) {
                 return getEffectiveDecoratorArguments(node);
             }
             if (ts.isJsxOpeningLikeElement(node)) {
@@ -71017,10 +72361,10 @@
             if (spreadIndex >= 0) {
                 // Create synthetic arguments from spreads of tuple types.
                 var effectiveArgs_1 = args.slice(0, spreadIndex);
-                var _loop_21 = function (i) {
+                var _loop_23 = function (i) {
                     var arg = args[i];
                     // We can call checkExpressionCached because spread expressions never have a contextual type.
-                    var spreadType = arg.kind === 221 /* SpreadElement */ && (flowLoopCount ? checkExpression(arg.expression) : checkExpressionCached(arg.expression));
+                    var spreadType = arg.kind === 223 /* SpreadElement */ && (flowLoopCount ? checkExpression(arg.expression) : checkExpressionCached(arg.expression));
                     if (spreadType && isTupleType(spreadType)) {
                         ts.forEach(getTypeArguments(spreadType), function (t, i) {
                             var _a;
@@ -71034,7 +72378,7 @@
                     }
                 };
                 for (var i = spreadIndex; i < args.length; i++) {
-                    _loop_21(i);
+                    _loop_23(i);
                 }
                 return effectiveArgs_1;
             }
@@ -71047,30 +72391,30 @@
             var parent = node.parent;
             var expr = node.expression;
             switch (parent.kind) {
-                case 253 /* ClassDeclaration */:
-                case 222 /* ClassExpression */:
+                case 255 /* ClassDeclaration */:
+                case 224 /* ClassExpression */:
                     // For a class decorator, the `target` is the type of the class (e.g. the
                     // "static" or "constructor" side of the class).
                     return [
                         createSyntheticExpression(expr, getTypeOfSymbol(getSymbolOfNode(parent)))
                     ];
-                case 161 /* Parameter */:
+                case 162 /* Parameter */:
                     // A parameter declaration decorator will have three arguments (see
                     // `ParameterDecorator` in core.d.ts).
                     var func = parent.parent;
                     return [
-                        createSyntheticExpression(expr, parent.parent.kind === 167 /* Constructor */ ? getTypeOfSymbol(getSymbolOfNode(func)) : errorType),
+                        createSyntheticExpression(expr, parent.parent.kind === 169 /* Constructor */ ? getTypeOfSymbol(getSymbolOfNode(func)) : errorType),
                         createSyntheticExpression(expr, anyType),
                         createSyntheticExpression(expr, numberType)
                     ];
-                case 164 /* PropertyDeclaration */:
-                case 166 /* MethodDeclaration */:
-                case 168 /* GetAccessor */:
-                case 169 /* SetAccessor */:
+                case 165 /* PropertyDeclaration */:
+                case 167 /* MethodDeclaration */:
+                case 170 /* GetAccessor */:
+                case 171 /* SetAccessor */:
                     // A method or accessor declaration decorator will have two or three arguments (see
                     // `PropertyDecorator` and `MethodDecorator` in core.d.ts). If we are emitting decorators
                     // for ES3, we will only pass two arguments.
-                    var hasPropDesc = parent.kind !== 164 /* PropertyDeclaration */ && languageVersion !== 0 /* ES3 */;
+                    var hasPropDesc = parent.kind !== 165 /* PropertyDeclaration */ && languageVersion !== 0 /* ES3 */;
                     return [
                         createSyntheticExpression(expr, getParentTypeOfClassElement(parent)),
                         createSyntheticExpression(expr, getClassElementPropertyKeyType(parent)),
@@ -71084,17 +72428,17 @@
          */
         function getDecoratorArgumentCount(node, signature) {
             switch (node.parent.kind) {
-                case 253 /* ClassDeclaration */:
-                case 222 /* ClassExpression */:
+                case 255 /* ClassDeclaration */:
+                case 224 /* ClassExpression */:
                     return 1;
-                case 164 /* PropertyDeclaration */:
+                case 165 /* PropertyDeclaration */:
                     return 2;
-                case 166 /* MethodDeclaration */:
-                case 168 /* GetAccessor */:
-                case 169 /* SetAccessor */:
+                case 167 /* MethodDeclaration */:
+                case 170 /* GetAccessor */:
+                case 171 /* SetAccessor */:
                     // For ES3 or decorators with only two parameters we supply only two arguments
                     return languageVersion === 0 /* ES3 */ || signature.parameters.length <= 2 ? 2 : 3;
-                case 161 /* Parameter */:
+                case 162 /* Parameter */:
                     return 3;
                 default:
                     return ts.Debug.fail();
@@ -71230,15 +72574,15 @@
             return ts.createDiagnosticForNodeArray(ts.getSourceFileOfNode(node), typeArguments, ts.Diagnostics.Expected_0_type_arguments_but_got_1, belowArgCount === -Infinity ? aboveArgCount : belowArgCount, argCount);
         }
         function resolveCall(node, signatures, candidatesOutArray, checkMode, callChainFlags, fallbackError) {
-            var isTaggedTemplate = node.kind === 206 /* TaggedTemplateExpression */;
-            var isDecorator = node.kind === 162 /* Decorator */;
+            var isTaggedTemplate = node.kind === 208 /* TaggedTemplateExpression */;
+            var isDecorator = node.kind === 163 /* Decorator */;
             var isJsxOpeningOrSelfClosingElement = ts.isJsxOpeningLikeElement(node);
             var reportErrors = !candidatesOutArray && produceDiagnostics;
             var typeArguments;
             if (!isDecorator) {
                 typeArguments = node.typeArguments;
                 // We already perform checking on the type arguments on the class declaration itself.
-                if (isTaggedTemplate || isJsxOpeningOrSelfClosingElement || node.expression.kind !== 105 /* SuperKeyword */) {
+                if (isTaggedTemplate || isJsxOpeningOrSelfClosingElement || node.expression.kind !== 106 /* SuperKeyword */) {
                     ts.forEach(typeArguments, checkSourceElement);
                 }
             }
@@ -71293,7 +72637,7 @@
             var result;
             // If we are in signature help, a trailing comma indicates that we intend to provide another argument,
             // so we will only accept overloads with arity at least 1 higher than the current number of provided arguments.
-            var signatureHelpTrailingComma = !!(checkMode & 16 /* IsForSignatureHelp */) && node.kind === 204 /* CallExpression */ && node.arguments.hasTrailingComma;
+            var signatureHelpTrailingComma = !!(checkMode & 16 /* IsForSignatureHelp */) && node.kind === 206 /* CallExpression */ && node.arguments.hasTrailingComma;
             // Section 4.12.1:
             // if the candidate list contains one or more signatures for which the type of each argument
             // expression is a subtype of each corresponding parameter type, the return type of the first
@@ -71347,7 +72691,7 @@
                         var min_3 = Number.MAX_VALUE;
                         var minIndex = 0;
                         var i_1 = 0;
-                        var _loop_22 = function (c) {
+                        var _loop_24 = function (c) {
                             var chain_2 = function () { return ts.chainDiagnosticMessages(/*details*/ undefined, ts.Diagnostics.Overload_0_of_1_2_gave_the_following_error, i_1 + 1, candidates.length, signatureToString(c)); };
                             var diags_2 = getSignatureApplicabilityError(node, args, c, assignableRelation, 0 /* Normal */, /*reportErrors*/ true, chain_2);
                             if (diags_2) {
@@ -71365,14 +72709,14 @@
                         };
                         for (var _a = 0, candidatesForArgumentError_1 = candidatesForArgumentError; _a < candidatesForArgumentError_1.length; _a++) {
                             var c = candidatesForArgumentError_1[_a];
-                            _loop_22(c);
+                            _loop_24(c);
                         }
                         var diags_3 = max > 1 ? allDiagnostics[minIndex] : ts.flatten(allDiagnostics);
                         ts.Debug.assert(diags_3.length > 0, "No errors reported for 3 or fewer overload signatures");
                         var chain = ts.chainDiagnosticMessages(ts.map(diags_3, function (d) { return typeof d.messageText === "string" ? d : d.messageText; }), ts.Diagnostics.No_overload_matches_this_call);
                         // The below is a spread to guarantee we get a new (mutable) array - our `flatMap` helper tries to do "smart" optimizations where it reuses input
                         // arrays and the emptyArray singleton where possible, which is decidedly not what we want while we're still constructing this diagnostic
-                        var related = __spreadArray([], ts.flatMap(diags_3, function (d) { return d.relatedInformation; }));
+                        var related = __spreadArray([], ts.flatMap(diags_3, function (d) { return d.relatedInformation; }), true);
                         var diag = void 0;
                         if (ts.every(diags_3, function (d) { return d.start === diags_3[0].start && d.length === diags_3[0].length && d.file === diags_3[0].file; })) {
                             var _b = diags_3[0], file = _b.file, start = _b.start, length_7 = _b.length;
@@ -71523,7 +72867,7 @@
             }
             var _a = ts.minAndMax(candidates, getNumNonRestParameters), minArgumentCount = _a.min, maxNonRestParam = _a.max;
             var parameters = [];
-            var _loop_23 = function (i) {
+            var _loop_25 = function (i) {
                 var symbols = ts.mapDefined(candidates, function (s) { return signatureHasRestParameter(s) ?
                     i < s.parameters.length - 1 ? s.parameters[i] : ts.last(s.parameters) :
                     i < s.parameters.length ? s.parameters[i] : undefined; });
@@ -71531,7 +72875,7 @@
                 parameters.push(createCombinedSymbolFromTypes(symbols, ts.mapDefined(candidates, function (candidate) { return tryGetTypeAtPosition(candidate, i); })));
             };
             for (var i = 0; i < maxNonRestParam; i++) {
-                _loop_23(i);
+                _loop_25(i);
             }
             var restParameterSymbols = ts.mapDefined(candidates, function (c) { return signatureHasRestParameter(c) ? ts.last(c.parameters) : undefined; });
             var flags = 0 /* None */;
@@ -71612,7 +72956,7 @@
             return maxParamsIndex;
         }
         function resolveCallExpression(node, candidatesOutArray, checkMode) {
-            if (node.expression.kind === 105 /* SuperKeyword */) {
+            if (node.expression.kind === 106 /* SuperKeyword */) {
                 var superType = checkSuperExpression(node.expression);
                 if (isTypeAny(superType)) {
                     for (var _i = 0, _a = node.arguments; _i < _a.length; _i++) {
@@ -71838,7 +73182,7 @@
             var declaration = signature.declaration;
             var modifiers = ts.getSelectedEffectiveModifierFlags(declaration, 24 /* NonPublicAccessibilityModifier */);
             // (1) Public constructors and (2) constructor functions are always accessible.
-            if (!modifiers || declaration.kind !== 167 /* Constructor */) {
+            if (!modifiers || declaration.kind !== 169 /* Constructor */) {
                 return true;
             }
             var declaringClassDeclaration = ts.getClassLikeDeclarationOfSymbol(declaration.parent.symbol);
@@ -71870,8 +73214,8 @@
             if (apparentType.flags & 1048576 /* Union */) {
                 var types = apparentType.types;
                 var hasSignatures = false;
-                for (var _i = 0, types_21 = types; _i < types_21.length; _i++) {
-                    var constituent = types_21[_i];
+                for (var _i = 0, types_20 = types; _i < types_20.length; _i++) {
+                    var constituent = types_20[_i];
                     var signatures = getSignaturesOfType(constituent, kind);
                     if (signatures.length !== 0) {
                         hasSignatures = true;
@@ -71982,16 +73326,16 @@
          */
         function getDiagnosticHeadMessageForDecoratorResolution(node) {
             switch (node.parent.kind) {
-                case 253 /* ClassDeclaration */:
-                case 222 /* ClassExpression */:
+                case 255 /* ClassDeclaration */:
+                case 224 /* ClassExpression */:
                     return ts.Diagnostics.Unable_to_resolve_signature_of_class_decorator_when_called_as_an_expression;
-                case 161 /* Parameter */:
+                case 162 /* Parameter */:
                     return ts.Diagnostics.Unable_to_resolve_signature_of_parameter_decorator_when_called_as_an_expression;
-                case 164 /* PropertyDeclaration */:
+                case 165 /* PropertyDeclaration */:
                     return ts.Diagnostics.Unable_to_resolve_signature_of_property_decorator_when_called_as_an_expression;
-                case 166 /* MethodDeclaration */:
-                case 168 /* GetAccessor */:
-                case 169 /* SetAccessor */:
+                case 167 /* MethodDeclaration */:
+                case 170 /* GetAccessor */:
+                case 171 /* SetAccessor */:
                     return ts.Diagnostics.Unable_to_resolve_signature_of_method_decorator_when_called_as_an_expression;
                 default:
                     return ts.Debug.fail();
@@ -72037,7 +73381,7 @@
             // file would probably be preferable.
             var typeSymbol = exports && getSymbol(exports, JsxNames.Element, 788968 /* Type */);
             var returnNode = typeSymbol && nodeBuilder.symbolToEntityName(typeSymbol, 788968 /* Type */, node);
-            var declaration = ts.factory.createFunctionTypeNode(/*typeParameters*/ undefined, [ts.factory.createParameterDeclaration(/*decorators*/ undefined, /*modifiers*/ undefined, /*dotdotdot*/ undefined, "props", /*questionMark*/ undefined, nodeBuilder.typeToTypeNode(result, node))], returnNode ? ts.factory.createTypeReferenceNode(returnNode, /*typeArguments*/ undefined) : ts.factory.createKeywordTypeNode(128 /* AnyKeyword */));
+            var declaration = ts.factory.createFunctionTypeNode(/*typeParameters*/ undefined, [ts.factory.createParameterDeclaration(/*decorators*/ undefined, /*modifiers*/ undefined, /*dotdotdot*/ undefined, "props", /*questionMark*/ undefined, nodeBuilder.typeToTypeNode(result, node))], returnNode ? ts.factory.createTypeReferenceNode(returnNode, /*typeArguments*/ undefined) : ts.factory.createKeywordTypeNode(129 /* AnyKeyword */));
             var parameterSymbol = createSymbol(1 /* FunctionScopedVariable */, "props");
             parameterSymbol.type = result;
             return createSignature(declaration, 
@@ -72086,16 +73430,16 @@
         }
         function resolveSignature(node, candidatesOutArray, checkMode) {
             switch (node.kind) {
-                case 204 /* CallExpression */:
+                case 206 /* CallExpression */:
                     return resolveCallExpression(node, candidatesOutArray, checkMode);
-                case 205 /* NewExpression */:
+                case 207 /* NewExpression */:
                     return resolveNewExpression(node, candidatesOutArray, checkMode);
-                case 206 /* TaggedTemplateExpression */:
+                case 208 /* TaggedTemplateExpression */:
                     return resolveTaggedTemplateExpression(node, candidatesOutArray, checkMode);
-                case 162 /* Decorator */:
+                case 163 /* Decorator */:
                     return resolveDecorator(node, candidatesOutArray, checkMode);
-                case 276 /* JsxOpeningElement */:
-                case 275 /* JsxSelfClosingElement */:
+                case 278 /* JsxOpeningElement */:
+                case 277 /* JsxSelfClosingElement */:
                     return resolveJsxOpeningLikeElement(node, candidatesOutArray, checkMode);
             }
             throw ts.Debug.assertNever(node, "Branch in 'resolveSignature' should be unreachable.");
@@ -72195,7 +73539,7 @@
             else if (ts.isBinaryExpression(node.parent)) {
                 var parentNode = node.parent;
                 var parentNodeOperator = node.parent.operatorToken.kind;
-                if (parentNodeOperator === 62 /* EqualsToken */ && (allowDeclaration || parentNode.right === node)) {
+                if (parentNodeOperator === 63 /* EqualsToken */ && (allowDeclaration || parentNode.right === node)) {
                     name = parentNode.left;
                     decl = name;
                 }
@@ -72204,7 +73548,7 @@
                         name = parentNode.parent.name;
                         decl = parentNode.parent;
                     }
-                    else if (ts.isBinaryExpression(parentNode.parent) && parentNode.parent.operatorToken.kind === 62 /* EqualsToken */ && (allowDeclaration || parentNode.parent.right === parentNode)) {
+                    else if (ts.isBinaryExpression(parentNode.parent) && parentNode.parent.operatorToken.kind === 63 /* EqualsToken */ && (allowDeclaration || parentNode.parent.right === parentNode)) {
                         name = parentNode.parent.left;
                         decl = name;
                     }
@@ -72227,10 +73571,10 @@
                 return false;
             }
             var parent = node.parent;
-            while (parent && parent.kind === 202 /* PropertyAccessExpression */) {
+            while (parent && parent.kind === 204 /* PropertyAccessExpression */) {
                 parent = parent.parent;
             }
-            if (parent && ts.isBinaryExpression(parent) && ts.isPrototypeAccess(parent.left) && parent.operatorToken.kind === 62 /* EqualsToken */) {
+            if (parent && ts.isBinaryExpression(parent) && ts.isPrototypeAccess(parent.left) && parent.operatorToken.kind === 63 /* EqualsToken */) {
                 var right = ts.getInitializerOfBinaryExpression(parent);
                 return ts.isObjectLiteralExpression(right) && right;
             }
@@ -72251,15 +73595,15 @@
                 return nonInferrableType;
             }
             checkDeprecatedSignature(signature, node);
-            if (node.expression.kind === 105 /* SuperKeyword */) {
+            if (node.expression.kind === 106 /* SuperKeyword */) {
                 return voidType;
             }
-            if (node.kind === 205 /* NewExpression */) {
+            if (node.kind === 207 /* NewExpression */) {
                 var declaration = signature.declaration;
                 if (declaration &&
-                    declaration.kind !== 167 /* Constructor */ &&
-                    declaration.kind !== 171 /* ConstructSignature */ &&
-                    declaration.kind !== 176 /* ConstructorType */ &&
+                    declaration.kind !== 169 /* Constructor */ &&
+                    declaration.kind !== 173 /* ConstructSignature */ &&
+                    declaration.kind !== 178 /* ConstructorType */ &&
                     !ts.isJSDocConstructSignature(declaration) &&
                     !isJSConstructor(declaration)) {
                     // When resolved signature is a call signature (and not a construct signature) the result type is any
@@ -72279,7 +73623,7 @@
             if (returnType.flags & 12288 /* ESSymbolLike */ && isSymbolOrSymbolForCall(node)) {
                 return getESSymbolLikeTypeForNode(ts.walkUpParenthesizedExpressions(node.parent));
             }
-            if (node.kind === 204 /* CallExpression */ && !node.questionDotToken && node.parent.kind === 234 /* ExpressionStatement */ &&
+            if (node.kind === 206 /* CallExpression */ && !node.questionDotToken && node.parent.kind === 236 /* ExpressionStatement */ &&
                 returnType.flags & 16384 /* Void */ && getTypePredicateOfSignature(signature)) {
                 if (!ts.isDottedName(node.expression)) {
                     error(node.expression, ts.Diagnostics.Assertions_require_the_call_target_to_be_an_identifier_or_qualified_name);
@@ -72292,7 +73636,7 @@
             if (ts.isInJSFile(node)) {
                 var jsSymbol = getSymbolOfExpando(node, /*allowDeclaration*/ false);
                 if ((_a = jsSymbol === null || jsSymbol === void 0 ? void 0 : jsSymbol.exports) === null || _a === void 0 ? void 0 : _a.size) {
-                    var jsAssignmentType = createAnonymousType(jsSymbol, jsSymbol.exports, ts.emptyArray, ts.emptyArray, undefined, undefined);
+                    var jsAssignmentType = createAnonymousType(jsSymbol, jsSymbol.exports, ts.emptyArray, ts.emptyArray, ts.emptyArray);
                     jsAssignmentType.objectFlags |= 8192 /* JSLiteral */;
                     return getIntersectionType([returnType, jsAssignmentType]);
                 }
@@ -72309,20 +73653,20 @@
         function getDeprecatedSuggestionNode(node) {
             node = ts.skipParentheses(node);
             switch (node.kind) {
-                case 204 /* CallExpression */:
-                case 162 /* Decorator */:
-                case 205 /* NewExpression */:
+                case 206 /* CallExpression */:
+                case 163 /* Decorator */:
+                case 207 /* NewExpression */:
                     return getDeprecatedSuggestionNode(node.expression);
-                case 206 /* TaggedTemplateExpression */:
+                case 208 /* TaggedTemplateExpression */:
                     return getDeprecatedSuggestionNode(node.tag);
-                case 276 /* JsxOpeningElement */:
-                case 275 /* JsxSelfClosingElement */:
+                case 278 /* JsxOpeningElement */:
+                case 277 /* JsxSelfClosingElement */:
                     return getDeprecatedSuggestionNode(node.tagName);
-                case 203 /* ElementAccessExpression */:
+                case 205 /* ElementAccessExpression */:
                     return node.argumentExpression;
-                case 202 /* PropertyAccessExpression */:
+                case 204 /* PropertyAccessExpression */:
                     return node.name;
-                case 174 /* TypeReference */:
+                case 176 /* TypeReference */:
                     var typeReference = node;
                     return ts.isQualifiedName(typeReference.typeName) ? typeReference.typeName.right : typeReference;
                 default:
@@ -72383,11 +73727,11 @@
                         var memberTable = ts.createSymbolTable();
                         var newSymbol = createSymbol(2097152 /* Alias */, "default" /* Default */);
                         newSymbol.parent = originalSymbol;
-                        newSymbol.nameType = getLiteralType("default");
+                        newSymbol.nameType = getStringLiteralType("default");
                         newSymbol.target = resolveSymbol(symbol);
                         memberTable.set("default" /* Default */, newSymbol);
                         var anonymousSymbol = createSymbol(2048 /* TypeLiteral */, "__type" /* Type */);
-                        var defaultContainingObject = createAnonymousType(anonymousSymbol, memberTable, ts.emptyArray, ts.emptyArray, /*stringIndexInfo*/ undefined, /*numberIndexInfo*/ undefined);
+                        var defaultContainingObject = createAnonymousType(anonymousSymbol, memberTable, ts.emptyArray, ts.emptyArray, ts.emptyArray);
                         anonymousSymbol.type = defaultContainingObject;
                         synthType.syntheticType = isValidSpreadType(type) ? getSpreadType(type, defaultContainingObject, anonymousSymbol, /*objectFlags*/ 0, /*readonly*/ false) : defaultContainingObject;
                     }
@@ -72415,9 +73759,9 @@
                 return false;
             }
             var targetDeclarationKind = resolvedRequire.flags & 16 /* Function */
-                ? 252 /* FunctionDeclaration */
+                ? 254 /* FunctionDeclaration */
                 : resolvedRequire.flags & 3 /* Variable */
-                    ? 250 /* VariableDeclaration */
+                    ? 252 /* VariableDeclaration */
                     : 0 /* Unknown */;
             if (targetDeclarationKind !== 0 /* Unknown */) {
                 var decl = ts.getDeclarationOfKind(resolvedRequire, targetDeclarationKind);
@@ -72445,21 +73789,21 @@
                 case 14 /* NoSubstitutionTemplateLiteral */:
                 case 8 /* NumericLiteral */:
                 case 9 /* BigIntLiteral */:
-                case 109 /* TrueKeyword */:
-                case 94 /* FalseKeyword */:
-                case 200 /* ArrayLiteralExpression */:
-                case 201 /* ObjectLiteralExpression */:
-                case 219 /* TemplateExpression */:
+                case 110 /* TrueKeyword */:
+                case 95 /* FalseKeyword */:
+                case 202 /* ArrayLiteralExpression */:
+                case 203 /* ObjectLiteralExpression */:
+                case 221 /* TemplateExpression */:
                     return true;
-                case 208 /* ParenthesizedExpression */:
+                case 210 /* ParenthesizedExpression */:
                     return isValidConstAssertionArgument(node.expression);
-                case 215 /* PrefixUnaryExpression */:
+                case 217 /* PrefixUnaryExpression */:
                     var op = node.operator;
                     var arg = node.operand;
                     return op === 40 /* MinusToken */ && (arg.kind === 8 /* NumericLiteral */ || arg.kind === 9 /* BigIntLiteral */) ||
                         op === 39 /* PlusToken */ && arg.kind === 8 /* NumericLiteral */;
-                case 202 /* PropertyAccessExpression */:
-                case 203 /* ElementAccessExpression */:
+                case 204 /* PropertyAccessExpression */:
+                case 205 /* ElementAccessExpression */:
                     var expr = node.expression;
                     if (ts.isIdentifier(expr)) {
                         var symbol = getSymbolAtLocation(expr);
@@ -72501,21 +73845,32 @@
         }
         function checkMetaProperty(node) {
             checkGrammarMetaProperty(node);
-            if (node.keywordToken === 102 /* NewKeyword */) {
+            if (node.keywordToken === 103 /* NewKeyword */) {
                 return checkNewTargetMetaProperty(node);
             }
-            if (node.keywordToken === 99 /* ImportKeyword */) {
+            if (node.keywordToken === 100 /* ImportKeyword */) {
                 return checkImportMetaProperty(node);
             }
             return ts.Debug.assertNever(node.keywordToken);
         }
+        function checkMetaPropertyKeyword(node) {
+            switch (node.keywordToken) {
+                case 100 /* ImportKeyword */:
+                    return getGlobalImportMetaExpressionType();
+                case 103 /* NewKeyword */:
+                    var type = checkNewTargetMetaProperty(node);
+                    return type === errorType ? errorType : createNewTargetExpressionType(type);
+                default:
+                    ts.Debug.assertNever(node.keywordToken);
+            }
+        }
         function checkNewTargetMetaProperty(node) {
             var container = ts.getNewTargetContainer(node);
             if (!container) {
                 error(node, ts.Diagnostics.Meta_property_0_is_only_allowed_in_the_body_of_a_function_declaration_function_expression_or_constructor, "new.target");
                 return errorType;
             }
-            else if (container.kind === 167 /* Constructor */) {
+            else if (container.kind === 169 /* Constructor */) {
                 var symbol = getSymbolOfNode(container.parent);
                 return getTypeOfSymbol(symbol);
             }
@@ -72530,7 +73885,6 @@
             }
             var file = ts.getSourceFileOfNode(node);
             ts.Debug.assert(!!(file.flags & 2097152 /* PossiblyContainsImportMeta */), "Containing file is missing import meta node flag.");
-            ts.Debug.assert(!!file.externalModuleIndicator, "Containing file should be a module.");
             return node.name.escapedText === "meta" ? getGlobalImportMetaType() : errorType;
         }
         function getTypeOfParameter(symbol) {
@@ -72561,8 +73915,37 @@
             }
             return restParameter.escapedName;
         }
+        function getParameterIdentifierNameAtPosition(signature, pos) {
+            var paramCount = signature.parameters.length - (signatureHasRestParameter(signature) ? 1 : 0);
+            if (pos < paramCount) {
+                var param = signature.parameters[pos];
+                return isParameterDeclarationWithIdentifierName(param) ? [param.escapedName, false] : undefined;
+            }
+            var restParameter = signature.parameters[paramCount] || unknownSymbol;
+            if (!isParameterDeclarationWithIdentifierName(restParameter)) {
+                return undefined;
+            }
+            var restType = getTypeOfSymbol(restParameter);
+            if (isTupleType(restType)) {
+                var associatedNames = restType.target.labeledElementDeclarations;
+                var index = pos - paramCount;
+                var associatedName = associatedNames === null || associatedNames === void 0 ? void 0 : associatedNames[index];
+                var isRestTupleElement = !!(associatedName === null || associatedName === void 0 ? void 0 : associatedName.dotDotDotToken);
+                return associatedName ? [
+                    getTupleElementLabel(associatedName),
+                    isRestTupleElement
+                ] : undefined;
+            }
+            if (pos === paramCount) {
+                return [restParameter.escapedName, true];
+            }
+            return undefined;
+        }
+        function isParameterDeclarationWithIdentifierName(symbol) {
+            return symbol.valueDeclaration && ts.isParameter(symbol.valueDeclaration) && ts.isIdentifier(symbol.valueDeclaration.name);
+        }
         function isValidDeclarationForTupleLabel(d) {
-            return d.kind === 193 /* NamedTupleMember */ || (ts.isParameter(d) && d.name && ts.isIdentifier(d.name));
+            return d.kind === 195 /* NamedTupleMember */ || (ts.isParameter(d) && d.name && ts.isIdentifier(d.name));
         }
         function getNameableDeclarationAtPosition(signature, pos) {
             var paramCount = signature.parameters.length - (signatureHasRestParameter(signature) ? 1 : 0);
@@ -72594,7 +73977,7 @@
                 var restType = getTypeOfSymbol(signature.parameters[paramCount]);
                 var index = pos - paramCount;
                 if (!isTupleType(restType) || restType.target.hasRestElement || index < restType.target.fixedLength) {
-                    return getIndexedAccessType(restType, getLiteralType(index));
+                    return getIndexedAccessType(restType, getNumberLiteralType(index));
                 }
             }
             return undefined;
@@ -72775,7 +74158,7 @@
             if (!links.type) {
                 var declaration = parameter.valueDeclaration;
                 links.type = type || getWidenedTypeForVariableLikeDeclaration(declaration, /*includeOptionality*/ true);
-                if (declaration.name.kind !== 78 /* Identifier */) {
+                if (declaration.name.kind !== 79 /* Identifier */) {
                     // if inference didn't come up with anything but unknown, fall back to the binding pattern if present.
                     if (links.type === unknownType) {
                         links.type = getTypeFromBindingPattern(declaration.name);
@@ -72790,7 +74173,7 @@
             for (var _i = 0, _a = pattern.elements; _i < _a.length; _i++) {
                 var element = _a[_i];
                 if (!ts.isOmittedExpression(element)) {
-                    if (element.name.kind === 78 /* Identifier */) {
+                    if (element.name.kind === 79 /* Identifier */) {
                         getSymbolLinks(getSymbolOfNode(element)).type = getTypeForBindingElement(element);
                     }
                     else {
@@ -72834,6 +74217,16 @@
             }
             return promiseType;
         }
+        function createNewTargetExpressionType(targetType) {
+            // Create a synthetic type `NewTargetExpression { target: TargetType; }`
+            var symbol = createSymbol(0 /* None */, "NewTargetExpression");
+            var targetPropertySymbol = createSymbol(4 /* Property */, "target", 8 /* Readonly */);
+            targetPropertySymbol.parent = symbol;
+            targetPropertySymbol.type = targetType;
+            var members = ts.createSymbolTable([targetPropertySymbol]);
+            symbol.members = members;
+            return createAnonymousType(symbol, members, ts.emptyArray, ts.emptyArray, ts.emptyArray);
+        }
         function getReturnTypeFromBody(func, checkMode) {
             if (!func.body) {
                 return errorType;
@@ -72845,7 +74238,7 @@
             var yieldType;
             var nextType;
             var fallbackReturnType = voidType;
-            if (func.body.kind !== 231 /* Block */) { // Async or normal arrow function
+            if (func.body.kind !== 233 /* Block */) { // Async or normal arrow function
                 returnType = checkExpressionCached(func.body, checkMode && checkMode & ~8 /* SkipGenericFunctions */);
                 if (isAsync) {
                     // From within an async function you can return either a non-promise value or a promise. Any
@@ -73030,7 +74423,7 @@
             return links.isExhaustive !== undefined ? links.isExhaustive : (links.isExhaustive = computeExhaustiveSwitchStatement(node));
         }
         function computeExhaustiveSwitchStatement(node) {
-            if (node.expression.kind === 212 /* TypeOfExpression */) {
+            if (node.expression.kind === 214 /* TypeOfExpression */) {
                 var operandType = getTypeOfExpression(node.expression.expression);
                 var witnesses = getSwitchClauseTypeOfWitnesses(node, /*retainDefault*/ false);
                 // notEqualFacts states that the type of the switched value is not equal to every type in the switch.
@@ -73093,11 +74486,11 @@
         }
         function mayReturnNever(func) {
             switch (func.kind) {
-                case 209 /* FunctionExpression */:
-                case 210 /* ArrowFunction */:
+                case 211 /* FunctionExpression */:
+                case 212 /* ArrowFunction */:
                     return true;
-                case 166 /* MethodDeclaration */:
-                    return func.parent.kind === 201 /* ObjectLiteralExpression */;
+                case 167 /* MethodDeclaration */:
+                    return func.parent.kind === 203 /* ObjectLiteralExpression */;
                 default:
                     return false;
             }
@@ -73123,7 +74516,7 @@
             }
             // If all we have is a function signature, or an arrow function with an expression body, then there is nothing to check.
             // also if HasImplicitReturn flag is not set this means that all codepaths in function body end with return or throw
-            if (func.kind === 165 /* MethodSignature */ || ts.nodeIsMissing(func.body) || func.body.kind !== 231 /* Block */ || !functionHasImplicitReturn(func)) {
+            if (func.kind === 166 /* MethodSignature */ || ts.nodeIsMissing(func.body) || func.body.kind !== 233 /* Block */ || !functionHasImplicitReturn(func)) {
                 return;
             }
             var hasExplicitReturn = func.flags & 512 /* HasExplicitReturn */;
@@ -73156,12 +74549,15 @@
             }
         }
         function checkFunctionExpressionOrObjectLiteralMethod(node, checkMode) {
-            ts.Debug.assert(node.kind !== 166 /* MethodDeclaration */ || ts.isObjectLiteralMethod(node));
+            ts.Debug.assert(node.kind !== 167 /* MethodDeclaration */ || ts.isObjectLiteralMethod(node));
             checkNodeDeferred(node);
+            if (ts.isFunctionExpression(node)) {
+                checkCollisionsForDeclarationName(node, node.name);
+            }
             // The identityMapper object is used to indicate that function expressions are wildcards
             if (checkMode && checkMode & 4 /* SkipContextSensitive */ && isContextSensitive(node)) {
                 // Skip parameters, return signature with return type that retains noncontextual parts so inferences can still be drawn in an early stage
-                if (!ts.getEffectiveReturnTypeNode(node) && !hasContextSensitiveParameters(node)) {
+                if (!ts.getEffectiveReturnTypeNode(node) && !ts.hasContextSensitiveParameters(node)) {
                     // Return plain anyFunctionType if there is no possibility we'll make inferences from the return type
                     var contextualSignature = getContextualSignature(node);
                     if (contextualSignature && couldContainTypeVariables(getReturnTypeOfSignature(contextualSignature))) {
@@ -73171,7 +74567,7 @@
                         }
                         var returnType = getReturnTypeFromBody(node, checkMode);
                         var returnOnlySignature = createSignature(undefined, undefined, undefined, ts.emptyArray, returnType, /*resolvedTypePredicate*/ undefined, 0, 0 /* None */);
-                        var returnOnlyType = createAnonymousType(node.symbol, emptySymbols, [returnOnlySignature], ts.emptyArray, undefined, undefined);
+                        var returnOnlyType = createAnonymousType(node.symbol, emptySymbols, [returnOnlySignature], ts.emptyArray, ts.emptyArray);
                         returnOnlyType.objectFlags |= 524288 /* NonInferrableType */;
                         return links.contextFreeType = returnOnlyType;
                     }
@@ -73180,7 +74576,7 @@
             }
             // Grammar checking
             var hasGrammarError = checkGrammarFunctionLikeDeclaration(node);
-            if (!hasGrammarError && node.kind === 209 /* FunctionExpression */) {
+            if (!hasGrammarError && node.kind === 211 /* FunctionExpression */) {
                 checkGrammarForGenerator(node);
             }
             contextuallyCheckFunctionExpressionOrObjectLiteralMethod(node, checkMode);
@@ -73226,7 +74622,7 @@
             }
         }
         function checkFunctionExpressionOrObjectLiteralMethodDeferred(node) {
-            ts.Debug.assert(node.kind !== 166 /* MethodDeclaration */ || ts.isObjectLiteralMethod(node));
+            ts.Debug.assert(node.kind !== 167 /* MethodDeclaration */ || ts.isObjectLiteralMethod(node));
             var functionFlags = ts.getFunctionFlags(node);
             var returnType = getReturnTypeFromAnnotation(node);
             checkAllCodePathsInNonVoidFunctionReturnOrThrow(node, returnType);
@@ -73239,7 +74635,7 @@
                     // checkFunctionExpressionBodies). So it must be done now.
                     getReturnTypeOfSignature(getSignatureFromDeclaration(node));
                 }
-                if (node.body.kind === 231 /* Block */) {
+                if (node.body.kind === 233 /* Block */) {
                     checkSourceElement(node.body);
                 }
                 else {
@@ -73326,10 +74722,10 @@
                 // Allow assignments to readonly properties within constructors of the same class declaration.
                 if (symbol.flags & 4 /* Property */ &&
                     ts.isAccessExpression(expr) &&
-                    expr.expression.kind === 107 /* ThisKeyword */) {
+                    expr.expression.kind === 108 /* ThisKeyword */) {
                     // Look for if this is the constructor for the class that `symbol` is a property of.
                     var ctor = ts.getContainingFunction(expr);
-                    if (!(ctor && (ctor.kind === 167 /* Constructor */ || isJSConstructor(ctor)))) {
+                    if (!(ctor && (ctor.kind === 169 /* Constructor */ || isJSConstructor(ctor)))) {
                         return true;
                     }
                     if (symbol.valueDeclaration) {
@@ -73350,11 +74746,11 @@
             if (ts.isAccessExpression(expr)) {
                 // references through namespace import should be readonly
                 var node = ts.skipParentheses(expr.expression);
-                if (node.kind === 78 /* Identifier */) {
+                if (node.kind === 79 /* Identifier */) {
                     var symbol_2 = getNodeLinks(node).resolvedSymbol;
                     if (symbol_2.flags & 2097152 /* Alias */) {
                         var declaration = getDeclarationOfAliasSymbol(symbol_2);
-                        return !!declaration && declaration.kind === 264 /* NamespaceImport */;
+                        return !!declaration && declaration.kind === 266 /* NamespaceImport */;
                     }
                 }
             }
@@ -73363,7 +74759,7 @@
         function checkReferenceExpression(expr, invalidReferenceMessage, invalidOptionalChainMessage) {
             // References are combinations of identifiers, parentheses, and property accesses.
             var node = ts.skipOuterExpressions(expr, 6 /* Assertions */ | 1 /* Parentheses */);
-            if (node.kind !== 78 /* Identifier */ && !ts.isAccessExpression(node)) {
+            if (node.kind !== 79 /* Identifier */ && !ts.isAccessExpression(node)) {
                 error(expr, invalidReferenceMessage);
                 return false;
             }
@@ -73389,13 +74785,15 @@
                 if (isReadonlySymbol(symbol)) {
                     error(expr, ts.Diagnostics.The_operand_of_a_delete_operator_cannot_be_a_read_only_property);
                 }
-                checkDeleteExpressionMustBeOptional(expr, getTypeOfSymbol(symbol));
+                checkDeleteExpressionMustBeOptional(expr, symbol);
             }
             return booleanType;
         }
-        function checkDeleteExpressionMustBeOptional(expr, type) {
-            var AnyOrUnknownOrNeverFlags = 3 /* AnyOrUnknown */ | 131072 /* Never */;
-            if (strictNullChecks && !(type.flags & AnyOrUnknownOrNeverFlags) && !(getFalsyFlags(type) & 32768 /* Undefined */)) {
+        function checkDeleteExpressionMustBeOptional(expr, symbol) {
+            var type = getTypeOfSymbol(symbol);
+            if (strictNullChecks &&
+                !(type.flags & (3 /* AnyOrUnknown */ | 131072 /* Never */)) &&
+                !(exactOptionalPropertyTypes ? symbol.flags & 16777216 /* Optional */ : getFalsyFlags(type) & 32768 /* Undefined */)) {
                 error(expr, ts.Diagnostics.The_operand_of_a_delete_operator_must_be_optional);
             }
         }
@@ -73410,7 +74808,11 @@
         function checkAwaitExpression(node) {
             // Grammar checking
             if (produceDiagnostics) {
-                if (!(node.flags & 32768 /* AwaitContext */)) {
+                var container = ts.getContainingFunctionOrClassStaticBlock(node);
+                if (container && ts.isClassStaticBlockDeclaration(container)) {
+                    error(node, ts.Diagnostics.Await_expression_cannot_be_used_inside_a_class_static_block);
+                }
+                else if (!(node.flags & 32768 /* AwaitContext */)) {
                     if (ts.isInTopLevelContext(node)) {
                         var sourceFile = ts.getSourceFileOfNode(node);
                         if (!hasParseDiagnostics(sourceFile)) {
@@ -73434,9 +74836,8 @@
                         if (!hasParseDiagnostics(sourceFile)) {
                             var span = ts.getSpanOfTokenAtPosition(sourceFile, node.pos);
                             var diagnostic = ts.createFileDiagnostic(sourceFile, span.start, span.length, ts.Diagnostics.await_expressions_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules);
-                            var func = ts.getContainingFunction(node);
-                            if (func && func.kind !== 167 /* Constructor */ && (ts.getFunctionFlags(func) & 2 /* Async */) === 0) {
-                                var relatedInfo = ts.createDiagnosticForNode(func, ts.Diagnostics.Did_you_mean_to_mark_this_function_as_async);
+                            if (container && container.kind !== 169 /* Constructor */ && (ts.getFunctionFlags(container) & 2 /* Async */) === 0) {
+                                var relatedInfo = ts.createDiagnosticForNode(container, ts.Diagnostics.Did_you_mean_to_mark_this_function_as_async);
                                 ts.addRelatedInfo(diagnostic, relatedInfo);
                             }
                             diagnostics.add(diagnostic);
@@ -73463,14 +74864,14 @@
                 case 8 /* NumericLiteral */:
                     switch (node.operator) {
                         case 40 /* MinusToken */:
-                            return getFreshTypeOfLiteralType(getLiteralType(-node.operand.text));
+                            return getFreshTypeOfLiteralType(getNumberLiteralType(-node.operand.text));
                         case 39 /* PlusToken */:
-                            return getFreshTypeOfLiteralType(getLiteralType(+node.operand.text));
+                            return getFreshTypeOfLiteralType(getNumberLiteralType(+node.operand.text));
                     }
                     break;
                 case 9 /* BigIntLiteral */:
                     if (node.operator === 40 /* MinusToken */) {
-                        return getFreshTypeOfLiteralType(getLiteralType({
+                        return getFreshTypeOfLiteralType(getBigIntLiteralType({
                             negative: true,
                             base10Value: ts.parsePseudoBigInt(node.operand.text)
                         }));
@@ -73537,8 +74938,8 @@
             }
             if (type.flags & 3145728 /* UnionOrIntersection */) {
                 var types = type.types;
-                for (var _i = 0, types_22 = types; _i < types_22.length; _i++) {
-                    var t = types_22[_i];
+                for (var _i = 0, types_21 = types; _i < types_21.length; _i++) {
+                    var t = types_21[_i];
                     if (maybeTypeOfKind(t, kind)) {
                         return true;
                     }
@@ -73647,7 +75048,7 @@
             if (rightIsThis === void 0) { rightIsThis = false; }
             var properties = node.properties;
             var property = properties[propertyIndex];
-            if (property.kind === 289 /* PropertyAssignment */ || property.kind === 290 /* ShorthandPropertyAssignment */) {
+            if (property.kind === 291 /* PropertyAssignment */ || property.kind === 292 /* ShorthandPropertyAssignment */) {
                 var name = property.name;
                 var exprType = getLiteralTypeFromPropertyName(name);
                 if (isTypeUsableAsPropertyName(exprType)) {
@@ -73658,11 +75059,11 @@
                         checkPropertyAccessibility(property, /*isSuper*/ false, /*writing*/ true, objectLiteralType, prop);
                     }
                 }
-                var elementType = getIndexedAccessType(objectLiteralType, exprType, /*noUncheckedIndexedAccessCandidate*/ undefined, name, /*aliasSymbol*/ undefined, /*aliasTypeArguments*/ undefined, 16 /* ExpressionPosition */);
+                var elementType = getIndexedAccessType(objectLiteralType, exprType, 32 /* ExpressionPosition */, name);
                 var type = getFlowTypeOfDestructuring(property, elementType);
-                return checkDestructuringAssignment(property.kind === 290 /* ShorthandPropertyAssignment */ ? property : property.initializer, type);
+                return checkDestructuringAssignment(property.kind === 292 /* ShorthandPropertyAssignment */ ? property : property.initializer, type);
             }
-            else if (property.kind === 291 /* SpreadAssignment */) {
+            else if (property.kind === 293 /* SpreadAssignment */) {
                 if (propertyIndex < properties.length - 1) {
                     error(property, ts.Diagnostics.A_rest_element_must_be_last_in_a_destructuring_pattern);
                 }
@@ -73700,7 +75101,7 @@
             var inBoundsType = compilerOptions.noUncheckedIndexedAccess ? undefined : possiblyOutOfBoundsType;
             for (var i = 0; i < elements.length; i++) {
                 var type = possiblyOutOfBoundsType;
-                if (node.elements[i].kind === 221 /* SpreadElement */) {
+                if (node.elements[i].kind === 223 /* SpreadElement */) {
                     type = inBoundsType = inBoundsType !== null && inBoundsType !== void 0 ? inBoundsType : (checkIteratedTypeOrElementType(65 /* Destructuring */, sourceType, undefinedType, node) || errorType);
                 }
                 checkArrayLiteralDestructuringElementAssignment(node, sourceType, i, type, checkMode);
@@ -73710,14 +75111,14 @@
         function checkArrayLiteralDestructuringElementAssignment(node, sourceType, elementIndex, elementType, checkMode) {
             var elements = node.elements;
             var element = elements[elementIndex];
-            if (element.kind !== 223 /* OmittedExpression */) {
-                if (element.kind !== 221 /* SpreadElement */) {
-                    var indexType = getLiteralType(elementIndex);
+            if (element.kind !== 225 /* OmittedExpression */) {
+                if (element.kind !== 223 /* SpreadElement */) {
+                    var indexType = getNumberLiteralType(elementIndex);
                     if (isArrayLikeType(sourceType)) {
                         // We create a synthetic expression so that getIndexedAccessType doesn't get confused
                         // when the element is a SyntaxKind.ElementAccessExpression.
-                        var accessFlags = 16 /* ExpressionPosition */ | (hasDefaultValue(element) ? 8 /* NoTupleBoundsCheck */ : 0);
-                        var elementType_2 = getIndexedAccessTypeOrUndefined(sourceType, indexType, /*noUncheckedIndexedAccessCandidate*/ undefined, createSyntheticExpression(element, indexType), accessFlags) || errorType;
+                        var accessFlags = 32 /* ExpressionPosition */ | (hasDefaultValue(element) ? 16 /* NoTupleBoundsCheck */ : 0);
+                        var elementType_2 = getIndexedAccessTypeOrUndefined(sourceType, indexType, accessFlags, createSyntheticExpression(element, indexType)) || errorType;
                         var assignedType = hasDefaultValue(element) ? getTypeWithFacts(elementType_2, 524288 /* NEUndefined */) : elementType_2;
                         var type = getFlowTypeOfDestructuring(element, assignedType);
                         return checkDestructuringAssignment(element, type, checkMode);
@@ -73729,7 +75130,7 @@
                 }
                 else {
                     var restExpression = element.expression;
-                    if (restExpression.kind === 217 /* BinaryExpression */ && restExpression.operatorToken.kind === 62 /* EqualsToken */) {
+                    if (restExpression.kind === 219 /* BinaryExpression */ && restExpression.operatorToken.kind === 63 /* EqualsToken */) {
                         error(restExpression.operatorToken, ts.Diagnostics.A_rest_element_cannot_have_an_initializer);
                     }
                     else {
@@ -73745,7 +75146,7 @@
         }
         function checkDestructuringAssignment(exprOrAssignment, sourceType, checkMode, rightIsThis) {
             var target;
-            if (exprOrAssignment.kind === 290 /* ShorthandPropertyAssignment */) {
+            if (exprOrAssignment.kind === 292 /* ShorthandPropertyAssignment */) {
                 var prop = exprOrAssignment;
                 if (prop.objectAssignmentInitializer) {
                     // In strict null checking mode, if a default value of a non-undefined type is specified, remove
@@ -73761,24 +75162,24 @@
             else {
                 target = exprOrAssignment;
             }
-            if (target.kind === 217 /* BinaryExpression */ && target.operatorToken.kind === 62 /* EqualsToken */) {
+            if (target.kind === 219 /* BinaryExpression */ && target.operatorToken.kind === 63 /* EqualsToken */) {
                 checkBinaryExpression(target, checkMode);
                 target = target.left;
             }
-            if (target.kind === 201 /* ObjectLiteralExpression */) {
+            if (target.kind === 203 /* ObjectLiteralExpression */) {
                 return checkObjectLiteralAssignment(target, sourceType, rightIsThis);
             }
-            if (target.kind === 200 /* ArrayLiteralExpression */) {
+            if (target.kind === 202 /* ArrayLiteralExpression */) {
                 return checkArrayLiteralAssignment(target, sourceType, checkMode);
             }
             return checkReferenceAssignment(target, sourceType, checkMode);
         }
         function checkReferenceAssignment(target, sourceType, checkMode) {
             var targetType = checkExpression(target, checkMode);
-            var error = target.parent.kind === 291 /* SpreadAssignment */ ?
+            var error = target.parent.kind === 293 /* SpreadAssignment */ ?
                 ts.Diagnostics.The_target_of_an_object_rest_assignment_must_be_a_variable_or_a_property_access :
                 ts.Diagnostics.The_left_hand_side_of_an_assignment_expression_must_be_a_variable_or_a_property_access;
-            var optionalError = target.parent.kind === 291 /* SpreadAssignment */ ?
+            var optionalError = target.parent.kind === 293 /* SpreadAssignment */ ?
                 ts.Diagnostics.The_target_of_an_object_rest_assignment_may_not_be_an_optional_property_access :
                 ts.Diagnostics.The_left_hand_side_of_an_assignment_expression_may_not_be_an_optional_property_access;
             if (checkReferenceExpression(target, error, optionalError)) {
@@ -73800,39 +75201,39 @@
         function isSideEffectFree(node) {
             node = ts.skipParentheses(node);
             switch (node.kind) {
-                case 78 /* Identifier */:
+                case 79 /* Identifier */:
                 case 10 /* StringLiteral */:
                 case 13 /* RegularExpressionLiteral */:
-                case 206 /* TaggedTemplateExpression */:
-                case 219 /* TemplateExpression */:
+                case 208 /* TaggedTemplateExpression */:
+                case 221 /* TemplateExpression */:
                 case 14 /* NoSubstitutionTemplateLiteral */:
                 case 8 /* NumericLiteral */:
                 case 9 /* BigIntLiteral */:
-                case 109 /* TrueKeyword */:
-                case 94 /* FalseKeyword */:
-                case 103 /* NullKeyword */:
-                case 150 /* UndefinedKeyword */:
-                case 209 /* FunctionExpression */:
-                case 222 /* ClassExpression */:
-                case 210 /* ArrowFunction */:
-                case 200 /* ArrayLiteralExpression */:
-                case 201 /* ObjectLiteralExpression */:
-                case 212 /* TypeOfExpression */:
-                case 226 /* NonNullExpression */:
-                case 275 /* JsxSelfClosingElement */:
-                case 274 /* JsxElement */:
+                case 110 /* TrueKeyword */:
+                case 95 /* FalseKeyword */:
+                case 104 /* NullKeyword */:
+                case 151 /* UndefinedKeyword */:
+                case 211 /* FunctionExpression */:
+                case 224 /* ClassExpression */:
+                case 212 /* ArrowFunction */:
+                case 202 /* ArrayLiteralExpression */:
+                case 203 /* ObjectLiteralExpression */:
+                case 214 /* TypeOfExpression */:
+                case 228 /* NonNullExpression */:
+                case 277 /* JsxSelfClosingElement */:
+                case 276 /* JsxElement */:
                     return true;
-                case 218 /* ConditionalExpression */:
+                case 220 /* ConditionalExpression */:
                     return isSideEffectFree(node.whenTrue) &&
                         isSideEffectFree(node.whenFalse);
-                case 217 /* BinaryExpression */:
+                case 219 /* BinaryExpression */:
                     if (ts.isAssignmentOperator(node.operatorToken.kind)) {
                         return false;
                     }
                     return isSideEffectFree(node.left) &&
                         isSideEffectFree(node.right);
-                case 215 /* PrefixUnaryExpression */:
-                case 216 /* PostfixUnaryExpression */:
+                case 217 /* PrefixUnaryExpression */:
+                case 218 /* PostfixUnaryExpression */:
                     // Unary operators ~, !, +, and - have no side effects.
                     // The rest do.
                     switch (node.operator) {
@@ -73844,9 +75245,9 @@
                     }
                     return false;
                 // Some forms listed here for clarity
-                case 213 /* VoidExpression */: // Explicit opt-out
-                case 207 /* TypeAssertionExpression */: // Not SEF, but can produce useful type warnings
-                case 225 /* AsExpression */: // Not SEF, but can produce useful type warnings
+                case 215 /* VoidExpression */: // Explicit opt-out
+                case 209 /* TypeAssertionExpression */: // Not SEF, but can produce useful type warnings
+                case 227 /* AsExpression */: // Not SEF, but can produce useful type warnings
                 default:
                     return false;
             }
@@ -73883,9 +75284,9 @@
                 }
                 checkGrammarNullishCoalesceWithLogicalExpression(node);
                 var operator = node.operatorToken.kind;
-                if (operator === 62 /* EqualsToken */ && (node.left.kind === 201 /* ObjectLiteralExpression */ || node.left.kind === 200 /* ArrayLiteralExpression */)) {
+                if (operator === 63 /* EqualsToken */ && (node.left.kind === 203 /* ObjectLiteralExpression */ || node.left.kind === 202 /* ArrayLiteralExpression */)) {
                     state.skip = true;
-                    setLastResult(state, checkDestructuringAssignment(node.left, checkExpression(node.right, checkMode), checkMode, node.right.kind === 107 /* ThisKeyword */));
+                    setLastResult(state, checkDestructuringAssignment(node.left, checkExpression(node.right, checkMode), checkMode, node.right.kind === 108 /* ThisKeyword */));
                     return state;
                 }
                 return state;
@@ -73976,8 +75377,8 @@
         // expression-wide checks and does not use a work stack to fold nested binary expressions into the same callstack frame
         function checkBinaryLikeExpression(left, operatorToken, right, checkMode, errorNode) {
             var operator = operatorToken.kind;
-            if (operator === 62 /* EqualsToken */ && (left.kind === 201 /* ObjectLiteralExpression */ || left.kind === 200 /* ArrayLiteralExpression */)) {
-                return checkDestructuringAssignment(left, checkExpression(right, checkMode), checkMode, right.kind === 107 /* ThisKeyword */);
+            if (operator === 63 /* EqualsToken */ && (left.kind === 203 /* ObjectLiteralExpression */ || left.kind === 202 /* ArrayLiteralExpression */)) {
+                return checkDestructuringAssignment(left, checkExpression(right, checkMode), checkMode, right.kind === 108 /* ThisKeyword */);
             }
             var leftType;
             if (operator === 55 /* AmpersandAmpersandToken */ || operator === 56 /* BarBarToken */ || operator === 60 /* QuestionQuestionToken */) {
@@ -73994,26 +75395,26 @@
             switch (operator) {
                 case 41 /* AsteriskToken */:
                 case 42 /* AsteriskAsteriskToken */:
-                case 65 /* AsteriskEqualsToken */:
-                case 66 /* AsteriskAsteriskEqualsToken */:
+                case 66 /* AsteriskEqualsToken */:
+                case 67 /* AsteriskAsteriskEqualsToken */:
                 case 43 /* SlashToken */:
-                case 67 /* SlashEqualsToken */:
+                case 68 /* SlashEqualsToken */:
                 case 44 /* PercentToken */:
-                case 68 /* PercentEqualsToken */:
+                case 69 /* PercentEqualsToken */:
                 case 40 /* MinusToken */:
-                case 64 /* MinusEqualsToken */:
+                case 65 /* MinusEqualsToken */:
                 case 47 /* LessThanLessThanToken */:
-                case 69 /* LessThanLessThanEqualsToken */:
+                case 70 /* LessThanLessThanEqualsToken */:
                 case 48 /* GreaterThanGreaterThanToken */:
-                case 70 /* GreaterThanGreaterThanEqualsToken */:
+                case 71 /* GreaterThanGreaterThanEqualsToken */:
                 case 49 /* GreaterThanGreaterThanGreaterThanToken */:
-                case 71 /* GreaterThanGreaterThanGreaterThanEqualsToken */:
+                case 72 /* GreaterThanGreaterThanGreaterThanEqualsToken */:
                 case 51 /* BarToken */:
-                case 73 /* BarEqualsToken */:
+                case 74 /* BarEqualsToken */:
                 case 52 /* CaretToken */:
-                case 77 /* CaretEqualsToken */:
+                case 78 /* CaretEqualsToken */:
                 case 50 /* AmpersandToken */:
-                case 72 /* AmpersandEqualsToken */:
+                case 73 /* AmpersandEqualsToken */:
                     if (leftType === silentNeverType || rightType === silentNeverType) {
                         return silentNeverType;
                     }
@@ -74043,11 +75444,11 @@
                         else if (bothAreBigIntLike(leftType, rightType)) {
                             switch (operator) {
                                 case 49 /* GreaterThanGreaterThanGreaterThanToken */:
-                                case 71 /* GreaterThanGreaterThanGreaterThanEqualsToken */:
+                                case 72 /* GreaterThanGreaterThanGreaterThanEqualsToken */:
                                     reportOperatorError();
                                     break;
                                 case 42 /* AsteriskAsteriskToken */:
-                                case 66 /* AsteriskAsteriskEqualsToken */:
+                                case 67 /* AsteriskAsteriskEqualsToken */:
                                     if (languageVersion < 3 /* ES2016 */) {
                                         error(errorNode, ts.Diagnostics.Exponentiation_cannot_be_performed_on_bigint_values_unless_the_target_option_is_set_to_es2016_or_later);
                                     }
@@ -74065,7 +75466,7 @@
                         return resultType_1;
                     }
                 case 39 /* PlusToken */:
-                case 63 /* PlusEqualsToken */:
+                case 64 /* PlusEqualsToken */:
                     if (leftType === silentNeverType || rightType === silentNeverType) {
                         return silentNeverType;
                     }
@@ -74108,7 +75509,7 @@
                         });
                         return anyType;
                     }
-                    if (operator === 63 /* PlusEqualsToken */) {
+                    if (operator === 64 /* PlusEqualsToken */) {
                         checkAssignmentOperator(resultType);
                     }
                     return resultType;
@@ -74130,41 +75531,41 @@
                 case 37 /* ExclamationEqualsEqualsToken */:
                     reportOperatorErrorUnless(function (left, right) { return isTypeEqualityComparableTo(left, right) || isTypeEqualityComparableTo(right, left); });
                     return booleanType;
-                case 101 /* InstanceOfKeyword */:
+                case 102 /* InstanceOfKeyword */:
                     return checkInstanceOfExpression(left, right, leftType, rightType);
-                case 100 /* InKeyword */:
+                case 101 /* InKeyword */:
                     return checkInExpression(left, right, leftType, rightType);
                 case 55 /* AmpersandAmpersandToken */:
-                case 75 /* AmpersandAmpersandEqualsToken */: {
+                case 76 /* AmpersandAmpersandEqualsToken */: {
                     var resultType_2 = getTypeFacts(leftType) & 4194304 /* Truthy */ ?
                         getUnionType([extractDefinitelyFalsyTypes(strictNullChecks ? leftType : getBaseTypeOfLiteralType(rightType)), rightType]) :
                         leftType;
-                    if (operator === 75 /* AmpersandAmpersandEqualsToken */) {
+                    if (operator === 76 /* AmpersandAmpersandEqualsToken */) {
                         checkAssignmentOperator(rightType);
                     }
                     return resultType_2;
                 }
                 case 56 /* BarBarToken */:
-                case 74 /* BarBarEqualsToken */: {
+                case 75 /* BarBarEqualsToken */: {
                     var resultType_3 = getTypeFacts(leftType) & 8388608 /* Falsy */ ?
                         getUnionType([removeDefinitelyFalsyTypes(leftType), rightType], 2 /* Subtype */) :
                         leftType;
-                    if (operator === 74 /* BarBarEqualsToken */) {
+                    if (operator === 75 /* BarBarEqualsToken */) {
                         checkAssignmentOperator(rightType);
                     }
                     return resultType_3;
                 }
                 case 60 /* QuestionQuestionToken */:
-                case 76 /* QuestionQuestionEqualsToken */: {
+                case 77 /* QuestionQuestionEqualsToken */: {
                     var resultType_4 = getTypeFacts(leftType) & 262144 /* EQUndefinedOrNull */ ?
                         getUnionType([getNonNullableType(leftType), rightType], 2 /* Subtype */) :
                         leftType;
-                    if (operator === 76 /* QuestionQuestionEqualsToken */) {
+                    if (operator === 77 /* QuestionQuestionEqualsToken */) {
                         checkAssignmentOperator(rightType);
                     }
                     return resultType_4;
                 }
-                case 62 /* EqualsToken */:
+                case 63 /* EqualsToken */:
                     var declKind = ts.isBinaryExpression(left.parent) ? ts.getAssignmentDeclarationKind(left.parent) : 0 /* None */;
                     checkAssignmentDeclaration(declKind, rightType);
                     if (isAssignmentDeclaration(declKind)) {
@@ -74220,7 +75621,7 @@
                 }
             }
             function isEvalNode(node) {
-                return node.kind === 78 /* Identifier */ && node.escapedText === "eval";
+                return node.kind === 79 /* Identifier */ && node.escapedText === "eval";
             }
             // Return true if there was no error, false if there was an error.
             function checkForDisallowedESSymbolOperand(operator) {
@@ -74236,13 +75637,13 @@
             function getSuggestedBooleanOperator(operator) {
                 switch (operator) {
                     case 51 /* BarToken */:
-                    case 73 /* BarEqualsToken */:
+                    case 74 /* BarEqualsToken */:
                         return 56 /* BarBarToken */;
                     case 52 /* CaretToken */:
-                    case 77 /* CaretEqualsToken */:
+                    case 78 /* CaretEqualsToken */:
                         return 37 /* ExclamationEqualsEqualsToken */;
                     case 50 /* AmpersandToken */:
-                    case 72 /* AmpersandEqualsToken */:
+                    case 73 /* AmpersandEqualsToken */:
                         return 55 /* AmpersandAmpersandToken */;
                     default:
                         return undefined;
@@ -74411,6 +75812,11 @@
             var type2 = checkExpression(node.whenFalse, checkMode);
             return getUnionType([type1, type2], 2 /* Subtype */);
         }
+        function isTemplateLiteralContext(node) {
+            var parent = node.parent;
+            return ts.isParenthesizedExpression(parent) && isTemplateLiteralContext(parent) ||
+                ts.isElementAccessExpression(parent) && parent.argumentExpression === node;
+        }
         function checkTemplateExpression(node) {
             var texts = [node.head.text];
             var types = [];
@@ -74423,14 +75829,14 @@
                 texts.push(span.literal.text);
                 types.push(isTypeAssignableTo(type, templateConstraintType) ? type : stringType);
             }
-            return isConstContext(node) || someType(getContextualType(node) || unknownType, isTemplateLiteralContextualType) ? getTemplateLiteralType(texts, types) : stringType;
+            return isConstContext(node) || isTemplateLiteralContext(node) || someType(getContextualType(node) || unknownType, isTemplateLiteralContextualType) ? getTemplateLiteralType(texts, types) : stringType;
         }
         function isTemplateLiteralContextualType(type) {
             return !!(type.flags & (128 /* StringLiteral */ | 134217728 /* TemplateLiteral */) ||
                 type.flags & 58982400 /* InstantiableNonPrimitive */ && maybeTypeOfKind(getBaseConstraintOfType(type) || unknownType, 402653316 /* StringLike */));
         }
         function getContextNode(node) {
-            if (node.kind === 282 /* JsxAttributes */ && !ts.isJsxSelfClosingElement(node.parent)) {
+            if (node.kind === 284 /* JsxAttributes */ && !ts.isJsxSelfClosingElement(node.parent)) {
                 return node.parent.parent; // Needs to be the root JsxElement, so it encompasses the attributes _and_ the children (which are essentially part of the attributes)
             }
             return node;
@@ -74479,13 +75885,13 @@
         }
         function isTypeAssertion(node) {
             node = ts.skipParentheses(node);
-            return node.kind === 207 /* TypeAssertionExpression */ || node.kind === 225 /* AsExpression */;
+            return node.kind === 209 /* TypeAssertionExpression */ || node.kind === 227 /* AsExpression */;
         }
         function checkDeclarationInitializer(declaration, contextualType) {
             var initializer = ts.getEffectiveInitializer(declaration);
             var type = getQuickTypeOfExpression(initializer) ||
                 (contextualType ? checkExpressionWithContextualType(initializer, contextualType, /*inferenceContext*/ undefined, 0 /* Normal */) : checkExpressionCached(initializer));
-            return ts.isParameter(declaration) && declaration.name.kind === 198 /* ArrayBindingPattern */ &&
+            return ts.isParameter(declaration) && declaration.name.kind === 200 /* ArrayBindingPattern */ &&
                 isTupleType(type) && !type.target.hasRestElement && getTypeReferenceArity(type) < declaration.name.elements.length ?
                 padTupleType(type, declaration.name) : type;
         }
@@ -74495,7 +75901,7 @@
             var elementFlags = type.target.elementFlags.slice();
             for (var i = getTypeReferenceArity(type); i < patternElements.length; i++) {
                 var e = patternElements[i];
-                if (i < patternElements.length - 1 || !(e.kind === 199 /* BindingElement */ && e.dotDotDotToken)) {
+                if (i < patternElements.length - 1 || !(e.kind === 201 /* BindingElement */ && e.dotDotDotToken)) {
                     elementTypes.push(!ts.isOmittedExpression(e) && hasDefaultValue(e) ? getTypeFromBindingElement(e, /*includePatternInType*/ false, /*reportErrors*/ false) : anyType);
                     elementFlags.push(2 /* Optional */);
                     if (!ts.isOmittedExpression(e) && !hasDefaultValue(e)) {
@@ -74508,7 +75914,7 @@
         function widenTypeInferredFromInitializer(declaration, type) {
             var widened = ts.getCombinedNodeFlags(declaration) & 2 /* Const */ || ts.isDeclarationReadonly(declaration) ? type : getWidenedLiteralType(type);
             if (ts.isInJSFile(declaration)) {
-                if (widened.flags & 98304 /* Nullable */) {
+                if (isEmptyLiteralType(widened)) {
                     reportImplicitAny(declaration, anyType);
                     return anyType;
                 }
@@ -74562,7 +75968,7 @@
             // Do not use hasDynamicName here, because that returns false for well known symbols.
             // We want to perform checkComputedPropertyName for all computed properties, including
             // well known symbols.
-            if (node.name.kind === 159 /* ComputedPropertyName */) {
+            if (node.name.kind === 160 /* ComputedPropertyName */) {
                 checkComputedPropertyName(node.name);
             }
             return checkExpressionForMutableLocation(node.initializer, checkMode);
@@ -74573,7 +75979,7 @@
             // Do not use hasDynamicName here, because that returns false for well known symbols.
             // We want to perform checkComputedPropertyName for all computed properties, including
             // well known symbols.
-            if (node.name.kind === 159 /* ComputedPropertyName */) {
+            if (node.name.kind === 160 /* ComputedPropertyName */) {
                 checkComputedPropertyName(node.name);
             }
             var uninstantiatedType = checkFunctionExpressionOrObjectLiteralMethod(node, checkMode);
@@ -74700,7 +76106,7 @@
                 len--;
             var s = baseName.slice(0, len);
             for (var index = 1; true; index++) {
-                var augmentedName = (s + index);
+                var augmentedName = s + index;
                 if (!hasTypeParameterByName(typeParameters, augmentedName)) {
                     return augmentedName;
                 }
@@ -74749,7 +76155,7 @@
             var expr = ts.skipParentheses(node);
             // Optimize for the common case of a call to a function with a single non-generic call
             // signature where we can just fetch the return type without checking the arguments.
-            if (ts.isCallExpression(expr) && expr.expression.kind !== 105 /* SuperKeyword */ && !ts.isRequireCall(expr, /*checkArgumentIsStringLiteralLike*/ true) && !isSymbolOrSymbolForCall(expr)) {
+            if (ts.isCallExpression(expr) && expr.expression.kind !== 106 /* SuperKeyword */ && !ts.isRequireCall(expr, /*checkArgumentIsStringLiteralLike*/ true) && !isSymbolOrSymbolForCall(expr)) {
                 var type = ts.isCallChain(expr) ? getReturnTypeOfSingleNonGenericSignatureOfCallChain(expr) :
                     getReturnTypeOfSingleNonGenericCallSignature(checkNonNullExpression(expr.expression));
                 if (type) {
@@ -74760,7 +76166,7 @@
                 return getTypeFromTypeNode(expr.type);
             }
             else if (node.kind === 8 /* NumericLiteral */ || node.kind === 10 /* StringLiteral */ ||
-                node.kind === 109 /* TrueKeyword */ || node.kind === 94 /* FalseKeyword */) {
+                node.kind === 110 /* TrueKeyword */ || node.kind === 95 /* FalseKeyword */) {
                 return checkExpression(node);
             }
             return undefined;
@@ -74809,11 +76215,11 @@
             // - 'left' in property access
             // - 'object' in indexed access
             // - target in rhs of import statement
-            var ok = (node.parent.kind === 202 /* PropertyAccessExpression */ && node.parent.expression === node) ||
-                (node.parent.kind === 203 /* ElementAccessExpression */ && node.parent.expression === node) ||
-                ((node.kind === 78 /* Identifier */ || node.kind === 158 /* QualifiedName */) && isInRightSideOfImportOrExportAssignment(node) ||
-                    (node.parent.kind === 177 /* TypeQuery */ && node.parent.exprName === node)) ||
-                (node.parent.kind === 271 /* ExportSpecifier */); // We allow reexporting const enums
+            var ok = (node.parent.kind === 204 /* PropertyAccessExpression */ && node.parent.expression === node) ||
+                (node.parent.kind === 205 /* ElementAccessExpression */ && node.parent.expression === node) ||
+                ((node.kind === 79 /* Identifier */ || node.kind === 159 /* QualifiedName */) && isInRightSideOfImportOrExportAssignment(node) ||
+                    (node.parent.kind === 179 /* TypeQuery */ && node.parent.exprName === node)) ||
+                (node.parent.kind === 273 /* ExportSpecifier */); // We allow reexporting const enums
             if (!ok) {
                 error(node, ts.Diagnostics.const_enums_can_only_be_used_in_property_or_index_access_expressions_or_the_right_hand_side_of_an_import_declaration_or_export_assignment_or_type_query);
             }
@@ -74828,7 +76234,7 @@
         function checkParenthesizedExpression(node, checkMode) {
             var tag = ts.isInJSFile(node) ? ts.getJSDocTypeTag(node) : undefined;
             if (tag) {
-                return checkAssertionWorker(tag, tag.typeExpression.type, node.expression, checkMode);
+                return checkAssertionWorker(tag.typeExpression.type, tag.typeExpression.type, node.expression, checkMode);
             }
             return checkExpression(node.expression, checkMode);
         }
@@ -74838,106 +76244,109 @@
                 // Only bother checking on a few construct kinds.  We don't want to be excessively
                 // hitting the cancellation token on every node we check.
                 switch (kind) {
-                    case 222 /* ClassExpression */:
-                    case 209 /* FunctionExpression */:
-                    case 210 /* ArrowFunction */:
+                    case 224 /* ClassExpression */:
+                    case 211 /* FunctionExpression */:
+                    case 212 /* ArrowFunction */:
                         cancellationToken.throwIfCancellationRequested();
                 }
             }
             switch (kind) {
-                case 78 /* Identifier */:
+                case 79 /* Identifier */:
                     return checkIdentifier(node, checkMode);
-                case 107 /* ThisKeyword */:
+                case 108 /* ThisKeyword */:
                     return checkThisExpression(node);
-                case 105 /* SuperKeyword */:
+                case 106 /* SuperKeyword */:
                     return checkSuperExpression(node);
-                case 103 /* NullKeyword */:
+                case 104 /* NullKeyword */:
                     return nullWideningType;
                 case 14 /* NoSubstitutionTemplateLiteral */:
                 case 10 /* StringLiteral */:
-                    return getFreshTypeOfLiteralType(getLiteralType(node.text));
+                    return getFreshTypeOfLiteralType(getStringLiteralType(node.text));
                 case 8 /* NumericLiteral */:
                     checkGrammarNumericLiteral(node);
-                    return getFreshTypeOfLiteralType(getLiteralType(+node.text));
+                    return getFreshTypeOfLiteralType(getNumberLiteralType(+node.text));
                 case 9 /* BigIntLiteral */:
                     checkGrammarBigIntLiteral(node);
-                    return getFreshTypeOfLiteralType(getBigIntLiteralType(node));
-                case 109 /* TrueKeyword */:
+                    return getFreshTypeOfLiteralType(getBigIntLiteralType({
+                        negative: false,
+                        base10Value: ts.parsePseudoBigInt(node.text)
+                    }));
+                case 110 /* TrueKeyword */:
                     return trueType;
-                case 94 /* FalseKeyword */:
+                case 95 /* FalseKeyword */:
                     return falseType;
-                case 219 /* TemplateExpression */:
+                case 221 /* TemplateExpression */:
                     return checkTemplateExpression(node);
                 case 13 /* RegularExpressionLiteral */:
                     return globalRegExpType;
-                case 200 /* ArrayLiteralExpression */:
+                case 202 /* ArrayLiteralExpression */:
                     return checkArrayLiteral(node, checkMode, forceTuple);
-                case 201 /* ObjectLiteralExpression */:
+                case 203 /* ObjectLiteralExpression */:
                     return checkObjectLiteral(node, checkMode);
-                case 202 /* PropertyAccessExpression */:
+                case 204 /* PropertyAccessExpression */:
                     return checkPropertyAccessExpression(node, checkMode);
-                case 158 /* QualifiedName */:
+                case 159 /* QualifiedName */:
                     return checkQualifiedName(node, checkMode);
-                case 203 /* ElementAccessExpression */:
+                case 205 /* ElementAccessExpression */:
                     return checkIndexedAccess(node, checkMode);
-                case 204 /* CallExpression */:
-                    if (node.expression.kind === 99 /* ImportKeyword */) {
+                case 206 /* CallExpression */:
+                    if (node.expression.kind === 100 /* ImportKeyword */) {
                         return checkImportCallExpression(node);
                     }
                 // falls through
-                case 205 /* NewExpression */:
+                case 207 /* NewExpression */:
                     return checkCallExpression(node, checkMode);
-                case 206 /* TaggedTemplateExpression */:
+                case 208 /* TaggedTemplateExpression */:
                     return checkTaggedTemplateExpression(node);
-                case 208 /* ParenthesizedExpression */:
+                case 210 /* ParenthesizedExpression */:
                     return checkParenthesizedExpression(node, checkMode);
-                case 222 /* ClassExpression */:
+                case 224 /* ClassExpression */:
                     return checkClassExpression(node);
-                case 209 /* FunctionExpression */:
-                case 210 /* ArrowFunction */:
+                case 211 /* FunctionExpression */:
+                case 212 /* ArrowFunction */:
                     return checkFunctionExpressionOrObjectLiteralMethod(node, checkMode);
-                case 212 /* TypeOfExpression */:
+                case 214 /* TypeOfExpression */:
                     return checkTypeOfExpression(node);
-                case 207 /* TypeAssertionExpression */:
-                case 225 /* AsExpression */:
+                case 209 /* TypeAssertionExpression */:
+                case 227 /* AsExpression */:
                     return checkAssertion(node);
-                case 226 /* NonNullExpression */:
+                case 228 /* NonNullExpression */:
                     return checkNonNullAssertion(node);
-                case 227 /* MetaProperty */:
+                case 229 /* MetaProperty */:
                     return checkMetaProperty(node);
-                case 211 /* DeleteExpression */:
+                case 213 /* DeleteExpression */:
                     return checkDeleteExpression(node);
-                case 213 /* VoidExpression */:
+                case 215 /* VoidExpression */:
                     return checkVoidExpression(node);
-                case 214 /* AwaitExpression */:
+                case 216 /* AwaitExpression */:
                     return checkAwaitExpression(node);
-                case 215 /* PrefixUnaryExpression */:
+                case 217 /* PrefixUnaryExpression */:
                     return checkPrefixUnaryExpression(node);
-                case 216 /* PostfixUnaryExpression */:
+                case 218 /* PostfixUnaryExpression */:
                     return checkPostfixUnaryExpression(node);
-                case 217 /* BinaryExpression */:
+                case 219 /* BinaryExpression */:
                     return checkBinaryExpression(node, checkMode);
-                case 218 /* ConditionalExpression */:
+                case 220 /* ConditionalExpression */:
                     return checkConditionalExpression(node, checkMode);
-                case 221 /* SpreadElement */:
+                case 223 /* SpreadElement */:
                     return checkSpreadExpression(node, checkMode);
-                case 223 /* OmittedExpression */:
+                case 225 /* OmittedExpression */:
                     return undefinedWideningType;
-                case 220 /* YieldExpression */:
+                case 222 /* YieldExpression */:
                     return checkYieldExpression(node);
-                case 228 /* SyntheticExpression */:
+                case 230 /* SyntheticExpression */:
                     return checkSyntheticExpression(node);
-                case 284 /* JsxExpression */:
+                case 286 /* JsxExpression */:
                     return checkJsxExpression(node, checkMode);
-                case 274 /* JsxElement */:
+                case 276 /* JsxElement */:
                     return checkJsxElement(node, checkMode);
-                case 275 /* JsxSelfClosingElement */:
+                case 277 /* JsxSelfClosingElement */:
                     return checkJsxSelfClosingElement(node, checkMode);
-                case 278 /* JsxFragment */:
+                case 280 /* JsxFragment */:
                     return checkJsxFragment(node);
-                case 282 /* JsxAttributes */:
+                case 284 /* JsxAttributes */:
                     return checkJsxAttributes(node, checkMode);
-                case 276 /* JsxOpeningElement */:
+                case 278 /* JsxOpeningElement */:
                     ts.Debug.fail("Shouldn't ever directly check a JsxOpeningElement");
             }
             return errorType;
@@ -74974,10 +76383,10 @@
             checkVariableLikeDeclaration(node);
             var func = ts.getContainingFunction(node);
             if (ts.hasSyntacticModifier(node, 16476 /* ParameterPropertyModifier */)) {
-                if (!(func.kind === 167 /* Constructor */ && ts.nodeIsPresent(func.body))) {
+                if (!(func.kind === 169 /* Constructor */ && ts.nodeIsPresent(func.body))) {
                     error(node, ts.Diagnostics.A_parameter_property_is_only_allowed_in_a_constructor_implementation);
                 }
-                if (func.kind === 167 /* Constructor */ && ts.isIdentifier(node.name) && node.name.escapedText === "constructor") {
+                if (func.kind === 169 /* Constructor */ && ts.isIdentifier(node.name) && node.name.escapedText === "constructor") {
                     error(node.name, ts.Diagnostics.constructor_cannot_be_used_as_a_parameter_property_name);
                 }
             }
@@ -74988,13 +76397,13 @@
                 if (func.parameters.indexOf(node) !== 0) {
                     error(node, ts.Diagnostics.A_0_parameter_must_be_the_first_parameter, node.name.escapedText);
                 }
-                if (func.kind === 167 /* Constructor */ || func.kind === 171 /* ConstructSignature */ || func.kind === 176 /* ConstructorType */) {
+                if (func.kind === 169 /* Constructor */ || func.kind === 173 /* ConstructSignature */ || func.kind === 178 /* ConstructorType */) {
                     error(node, ts.Diagnostics.A_constructor_cannot_have_a_this_parameter);
                 }
-                if (func.kind === 210 /* ArrowFunction */) {
+                if (func.kind === 212 /* ArrowFunction */) {
                     error(node, ts.Diagnostics.An_arrow_function_cannot_have_a_this_parameter);
                 }
-                if (func.kind === 168 /* GetAccessor */ || func.kind === 169 /* SetAccessor */) {
+                if (func.kind === 170 /* GetAccessor */ || func.kind === 171 /* SetAccessor */) {
                     error(node, ts.Diagnostics.get_and_set_accessors_cannot_declare_this_parameters);
                 }
             }
@@ -75052,13 +76461,13 @@
         }
         function getTypePredicateParent(node) {
             switch (node.parent.kind) {
-                case 210 /* ArrowFunction */:
-                case 170 /* CallSignature */:
-                case 252 /* FunctionDeclaration */:
-                case 209 /* FunctionExpression */:
-                case 175 /* FunctionType */:
-                case 166 /* MethodDeclaration */:
-                case 165 /* MethodSignature */:
+                case 212 /* ArrowFunction */:
+                case 172 /* CallSignature */:
+                case 254 /* FunctionDeclaration */:
+                case 211 /* FunctionExpression */:
+                case 177 /* FunctionType */:
+                case 167 /* MethodDeclaration */:
+                case 166 /* MethodSignature */:
                     var parent = node.parent;
                     if (node === parent.type) {
                         return parent;
@@ -75072,11 +76481,11 @@
                     continue;
                 }
                 var name = element.name;
-                if (name.kind === 78 /* Identifier */ && name.escapedText === predicateVariableName) {
+                if (name.kind === 79 /* Identifier */ && name.escapedText === predicateVariableName) {
                     error(predicateVariableNode, ts.Diagnostics.A_type_predicate_cannot_reference_element_0_in_a_binding_pattern, predicateVariableName);
                     return true;
                 }
-                else if (name.kind === 198 /* ArrayBindingPattern */ || name.kind === 197 /* ObjectBindingPattern */) {
+                else if (name.kind === 200 /* ArrayBindingPattern */ || name.kind === 199 /* ObjectBindingPattern */) {
                     if (checkIfTypePredicateVariableIsDeclaredInBindingPattern(name, predicateVariableNode, predicateVariableName)) {
                         return true;
                     }
@@ -75085,13 +76494,13 @@
         }
         function checkSignatureDeclaration(node) {
             // Grammar checking
-            if (node.kind === 172 /* IndexSignature */) {
+            if (node.kind === 174 /* IndexSignature */) {
                 checkGrammarIndexSignature(node);
             }
             // TODO (yuisu): Remove this check in else-if when SyntaxKind.Construct is moved and ambient context is handled
-            else if (node.kind === 175 /* FunctionType */ || node.kind === 252 /* FunctionDeclaration */ || node.kind === 176 /* ConstructorType */ ||
-                node.kind === 170 /* CallSignature */ || node.kind === 167 /* Constructor */ ||
-                node.kind === 171 /* ConstructSignature */) {
+            else if (node.kind === 177 /* FunctionType */ || node.kind === 254 /* FunctionDeclaration */ || node.kind === 178 /* ConstructorType */ ||
+                node.kind === 172 /* CallSignature */ || node.kind === 169 /* Constructor */ ||
+                node.kind === 173 /* ConstructSignature */) {
                 checkGrammarFunctionLikeDeclaration(node);
             }
             var functionFlags = ts.getFunctionFlags(node);
@@ -75121,10 +76530,10 @@
                 var returnTypeNode = ts.getEffectiveReturnTypeNode(node);
                 if (noImplicitAny && !returnTypeNode) {
                     switch (node.kind) {
-                        case 171 /* ConstructSignature */:
+                        case 173 /* ConstructSignature */:
                             error(node, ts.Diagnostics.Construct_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type);
                             break;
-                        case 170 /* CallSignature */:
+                        case 172 /* CallSignature */:
                             error(node, ts.Diagnostics.Call_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type);
                             break;
                     }
@@ -75154,7 +76563,7 @@
                         checkAsyncFunctionReturnType(node, returnTypeNode);
                     }
                 }
-                if (node.kind !== 172 /* IndexSignature */ && node.kind !== 309 /* JSDocFunctionType */) {
+                if (node.kind !== 174 /* IndexSignature */ && node.kind !== 312 /* JSDocFunctionType */) {
                     registerForUnusedIdentifiersCheck(node);
                 }
             }
@@ -75166,7 +76575,7 @@
             var privateIdentifiers = new ts.Map();
             for (var _i = 0, _a = node.members; _i < _a.length; _i++) {
                 var member = _a[_i];
-                if (member.kind === 167 /* Constructor */) {
+                if (member.kind === 169 /* Constructor */) {
                     for (var _b = 0, _c = member.parameters; _b < _c.length; _b++) {
                         var param = _c[_b];
                         if (ts.isParameterPropertyDeclaration(param, member) && !ts.isBindingPattern(param.name)) {
@@ -75175,29 +76584,29 @@
                     }
                 }
                 else {
-                    var isStatic = ts.hasSyntacticModifier(member, 32 /* Static */);
+                    var isStaticMember = ts.isStatic(member);
                     var name = member.name;
                     if (!name) {
                         continue;
                     }
                     var isPrivate = ts.isPrivateIdentifier(name);
-                    var privateStaticFlags = isPrivate && isStatic ? 16 /* PrivateStatic */ : 0;
+                    var privateStaticFlags = isPrivate && isStaticMember ? 16 /* PrivateStatic */ : 0;
                     var names = isPrivate ? privateIdentifiers :
-                        isStatic ? staticNames :
+                        isStaticMember ? staticNames :
                             instanceNames;
                     var memberName = name && ts.getPropertyNameForPropertyNameNode(name);
                     if (memberName) {
                         switch (member.kind) {
-                            case 168 /* GetAccessor */:
+                            case 170 /* GetAccessor */:
                                 addName(names, name, memberName, 1 /* GetAccessor */ | privateStaticFlags);
                                 break;
-                            case 169 /* SetAccessor */:
+                            case 171 /* SetAccessor */:
                                 addName(names, name, memberName, 2 /* SetAccessor */ | privateStaticFlags);
                                 break;
-                            case 164 /* PropertyDeclaration */:
+                            case 165 /* PropertyDeclaration */:
                                 addName(names, name, memberName, 3 /* GetOrSetAccessor */ | privateStaticFlags);
                                 break;
-                            case 166 /* MethodDeclaration */:
+                            case 167 /* MethodDeclaration */:
                                 addName(names, name, memberName, 8 /* Method */ | privateStaticFlags);
                                 break;
                         }
@@ -75248,8 +76657,8 @@
             for (var _i = 0, _a = node.members; _i < _a.length; _i++) {
                 var member = _a[_i];
                 var memberNameNode = member.name;
-                var isStatic = ts.hasSyntacticModifier(member, 32 /* Static */);
-                if (isStatic && memberNameNode) {
+                var isStaticMember = ts.isStatic(member);
+                if (isStaticMember && memberNameNode) {
                     var memberName = ts.getPropertyNameForPropertyNameNode(memberNameNode);
                     switch (memberName) {
                         case "name":
@@ -75269,7 +76678,7 @@
             var names = new ts.Map();
             for (var _i = 0, _a = node.members; _i < _a.length; _i++) {
                 var member = _a[_i];
-                if (member.kind === 163 /* PropertySignature */) {
+                if (member.kind === 164 /* PropertySignature */) {
                     var memberName = void 0;
                     var name = member.name;
                     switch (name.kind) {
@@ -75277,7 +76686,7 @@
                         case 8 /* NumericLiteral */:
                             memberName = name.text;
                             break;
-                        case 78 /* Identifier */:
+                        case 79 /* Identifier */:
                             memberName = ts.idText(name);
                             break;
                         default:
@@ -75294,7 +76703,7 @@
             }
         }
         function checkTypeForDuplicateIndexSignatures(node) {
-            if (node.kind === 254 /* InterfaceDeclaration */) {
+            if (node.kind === 256 /* InterfaceDeclaration */) {
                 var nodeSymbol = getSymbolOfNode(node);
                 // in case of merging interface declaration it is possible that we'll enter this check procedure several times for every declaration
                 // to prevent this run check only for the first declaration of a given kind
@@ -75307,32 +76716,32 @@
             // 8.5: A class declaration can have at most one string index member declaration and one numeric index member declaration
             var indexSymbol = getIndexSymbol(getSymbolOfNode(node));
             if (indexSymbol === null || indexSymbol === void 0 ? void 0 : indexSymbol.declarations) {
-                var seenNumericIndexer = false;
-                var seenStringIndexer = false;
-                for (var _i = 0, _a = indexSymbol.declarations; _i < _a.length; _i++) {
-                    var decl = _a[_i];
-                    var declaration = decl;
+                var indexSignatureMap_1 = new ts.Map();
+                var _loop_26 = function (declaration) {
                     if (declaration.parameters.length === 1 && declaration.parameters[0].type) {
-                        switch (declaration.parameters[0].type.kind) {
-                            case 147 /* StringKeyword */:
-                                if (!seenStringIndexer) {
-                                    seenStringIndexer = true;
-                                }
-                                else {
-                                    error(declaration, ts.Diagnostics.Duplicate_string_index_signature);
-                                }
-                                break;
-                            case 144 /* NumberKeyword */:
-                                if (!seenNumericIndexer) {
-                                    seenNumericIndexer = true;
-                                }
-                                else {
-                                    error(declaration, ts.Diagnostics.Duplicate_number_index_signature);
-                                }
-                                break;
+                        forEachType(getTypeFromTypeNode(declaration.parameters[0].type), function (type) {
+                            var entry = indexSignatureMap_1.get(getTypeId(type));
+                            if (entry) {
+                                entry.declarations.push(declaration);
+                            }
+                            else {
+                                indexSignatureMap_1.set(getTypeId(type), { type: type, declarations: [declaration] });
+                            }
+                        });
+                    }
+                };
+                for (var _i = 0, _a = indexSymbol.declarations; _i < _a.length; _i++) {
+                    var declaration = _a[_i];
+                    _loop_26(declaration);
+                }
+                indexSignatureMap_1.forEach(function (entry) {
+                    if (entry.declarations.length > 1) {
+                        for (var _i = 0, _a = entry.declarations; _i < _a.length; _i++) {
+                            var declaration = _a[_i];
+                            error(declaration, ts.Diagnostics.Duplicate_index_signature_for_type_0, typeToString(entry.type));
                         }
                     }
-                }
+                });
             }
         }
         function checkPropertyDeclaration(node) {
@@ -75344,6 +76753,10 @@
             if (ts.isPrivateIdentifier(node.name) && ts.hasStaticModifier(node) && node.initializer && languageVersion === 99 /* ESNext */ && !compilerOptions.useDefineForClassFields) {
                 error(node.initializer, ts.Diagnostics.Static_fields_with_private_names_can_t_have_initializers_when_the_useDefineForClassFields_flag_is_not_specified_with_a_target_of_esnext_Consider_adding_the_useDefineForClassFields_flag);
             }
+            // property signatures already report "initializer not allowed in ambient context" elsewhere
+            if (ts.hasSyntacticModifier(node, 128 /* Abstract */) && node.kind === 165 /* PropertyDeclaration */ && node.initializer) {
+                error(node, ts.Diagnostics.Property_0_cannot_have_an_initializer_because_it_is_marked_abstract, ts.declarationNameToString(node.name));
+            }
         }
         function checkPropertySignature(node) {
             if (ts.isPrivateIdentifier(node.name)) {
@@ -75357,9 +76770,8 @@
                 checkGrammarComputedPropertyName(node.name);
             // Grammar checking for modifiers is done inside the function checkGrammarFunctionLikeDeclaration
             checkFunctionOrMethodDeclaration(node);
-            // Abstract methods cannot have an implementation.
-            // Extra checks are to avoid reporting multiple errors relating to the "abstractness" of the node.
-            if (ts.hasSyntacticModifier(node, 128 /* Abstract */) && node.kind === 166 /* MethodDeclaration */ && node.body) {
+            // method signatures already report "implementation not allowed in ambient context" elsewhere
+            if (ts.hasSyntacticModifier(node, 128 /* Abstract */) && node.kind === 167 /* MethodDeclaration */ && node.body) {
                 error(node, ts.Diagnostics.Method_0_cannot_have_an_implementation_because_it_is_marked_abstract, ts.declarationNameToString(node.name));
             }
             // Private named methods are only allowed in class declarations
@@ -75385,6 +76797,10 @@
                 }
             }
         }
+        function checkClassStaticBlockDeclaration(node) {
+            checkGrammarDecoratorsAndModifiers(node);
+            ts.forEachChild(node, checkSourceElement);
+        }
         function checkConstructorDeclaration(node) {
             // Grammar check on signature of constructor and modifier of the constructor is done in checkSignatureDeclaration function.
             checkSignatureDeclaration(node);
@@ -75409,8 +76825,8 @@
                 if (ts.isPrivateIdentifierClassElementDeclaration(n)) {
                     return true;
                 }
-                return n.kind === 164 /* PropertyDeclaration */ &&
-                    !ts.hasSyntacticModifier(n, 32 /* Static */) &&
+                return n.kind === 165 /* PropertyDeclaration */ &&
+                    !ts.isStatic(n) &&
                     !!n.initializer;
             }
             // TS 1.0 spec (April 2014): 8.3.2
@@ -75440,7 +76856,7 @@
                         var superCallStatement = void 0;
                         for (var _i = 0, statements_4 = statements; _i < statements_4.length; _i++) {
                             var statement = statements_4[_i];
-                            if (statement.kind === 234 /* ExpressionStatement */ && ts.isSuperCall(statement.expression)) {
+                            if (statement.kind === 236 /* ExpressionStatement */ && ts.isSuperCall(statement.expression)) {
                                 superCallStatement = statement;
                                 break;
                             }
@@ -75465,7 +76881,7 @@
                     checkGrammarComputedPropertyName(node.name);
                 checkDecorators(node);
                 checkSignatureDeclaration(node);
-                if (node.kind === 168 /* GetAccessor */) {
+                if (node.kind === 170 /* GetAccessor */) {
                     if (!(node.flags & 8388608 /* Ambient */) && ts.nodeIsPresent(node.body) && (node.flags & 256 /* HasImplicitReturn */)) {
                         if (!(node.flags & 512 /* HasExplicitReturn */)) {
                             error(node.name, ts.Diagnostics.A_get_accessor_must_return_a_value);
@@ -75475,15 +76891,15 @@
                 // Do not use hasDynamicName here, because that returns false for well known symbols.
                 // We want to perform checkComputedPropertyName for all computed properties, including
                 // well known symbols.
-                if (node.name.kind === 159 /* ComputedPropertyName */) {
+                if (node.name.kind === 160 /* ComputedPropertyName */) {
                     checkComputedPropertyName(node.name);
                 }
                 if (hasBindableName(node)) {
                     // TypeScript 1.0 spec (April 2014): 8.4.3
                     // Accessors for the same member name must specify the same accessibility.
                     var symbol = getSymbolOfNode(node);
-                    var getter = ts.getDeclarationOfKind(symbol, 168 /* GetAccessor */);
-                    var setter = ts.getDeclarationOfKind(symbol, 169 /* SetAccessor */);
+                    var getter = ts.getDeclarationOfKind(symbol, 170 /* GetAccessor */);
+                    var setter = ts.getDeclarationOfKind(symbol, 171 /* SetAccessor */);
                     if (getter && setter && !(getNodeCheckFlags(getter) & 1 /* TypeChecked */)) {
                         getNodeLinks(getter).flags |= 1 /* TypeChecked */;
                         var getterFlags = ts.getEffectiveModifierFlags(getter);
@@ -75505,7 +76921,7 @@
                     }
                 }
                 var returnType = getTypeOfAccessors(getSymbolOfNode(node));
-                if (node.kind === 168 /* GetAccessor */) {
+                if (node.kind === 170 /* GetAccessor */) {
                     checkAllCodePathsInNonVoidFunctionReturnOrThrow(node, returnType);
                 }
             }
@@ -75547,7 +76963,7 @@
         }
         function checkTypeReferenceNode(node) {
             checkGrammarTypeArguments(node, node.typeArguments);
-            if (node.kind === 174 /* TypeReference */ && node.typeName.jsdocDotPos !== undefined && !ts.isInJSFile(node) && !ts.isInJSDoc(node)) {
+            if (node.kind === 176 /* TypeReference */ && node.typeName.jsdocDotPos !== undefined && !ts.isInJSFile(node) && !ts.isInJSDoc(node)) {
                 grammarErrorAtPos(node, node.typeName.jsdocDotPos, 1, ts.Diagnostics.JSDoc_types_can_only_be_used_inside_documentation_comments);
             }
             ts.forEach(node.typeArguments, checkSourceElement);
@@ -75600,7 +77016,7 @@
             var hasNamedElement = ts.some(elementTypes, ts.isNamedTupleMember);
             for (var _i = 0, elementTypes_1 = elementTypes; _i < elementTypes_1.length; _i++) {
                 var e = elementTypes_1[_i];
-                if (e.kind !== 193 /* NamedTupleMember */ && hasNamedElement) {
+                if (e.kind !== 195 /* NamedTupleMember */ && hasNamedElement) {
                     grammarErrorOnNode(e, ts.Diagnostics.Tuple_members_must_all_have_names_or_all_not_have_names);
                     break;
                 }
@@ -75649,7 +77065,7 @@
             var objectType = type.objectType;
             var indexType = type.indexType;
             if (isTypeAssignableTo(indexType, getIndexType(objectType, /*stringsOnly*/ false))) {
-                if (accessNode.kind === 203 /* ElementAccessExpression */ && ts.isAssignmentTarget(accessNode) &&
+                if (accessNode.kind === 205 /* ElementAccessExpression */ && ts.isAssignmentTarget(accessNode) &&
                     ts.getObjectFlags(objectType) & 32 /* Mapped */ && getMappedTypeModifiers(objectType) & 1 /* IncludeReadonly */) {
                     error(accessNode, ts.Diagnostics.Index_signature_in_type_0_only_permits_reading, typeToString(objectType));
                 }
@@ -75658,7 +77074,7 @@
             // Check if we're indexing with a numeric type and if either object or index types
             // is a generic type with a constraint that has a numeric index signature.
             var apparentObjectType = getApparentType(objectType);
-            if (getIndexInfoOfType(apparentObjectType, 1 /* Number */) && isTypeAssignableToKind(indexType, 296 /* NumberLike */)) {
+            if (getIndexInfoOfType(apparentObjectType, numberType) && isTypeAssignableToKind(indexType, 296 /* NumberLike */)) {
                 return type;
             }
             if (isGenericObjectType(objectType)) {
@@ -75707,7 +77123,7 @@
             ts.forEachChild(node, checkSourceElement);
         }
         function checkInferType(node) {
-            if (!ts.findAncestor(node, function (n) { return n.parent && n.parent.kind === 185 /* ConditionalType */ && n.parent.extendsType === n; })) {
+            if (!ts.findAncestor(node, function (n) { return n.parent && n.parent.kind === 187 /* ConditionalType */ && n.parent.extendsType === n; })) {
                 grammarErrorOnNode(node, ts.Diagnostics.infer_declarations_are_only_permitted_in_the_extends_clause_of_a_conditional_type);
             }
             checkSourceElement(node.typeParameter);
@@ -75730,10 +77146,10 @@
             if (node.dotDotDotToken && node.questionToken) {
                 grammarErrorOnNode(node, ts.Diagnostics.A_tuple_member_cannot_be_both_optional_and_rest);
             }
-            if (node.type.kind === 181 /* OptionalType */) {
+            if (node.type.kind === 183 /* OptionalType */) {
                 grammarErrorOnNode(node.type, ts.Diagnostics.A_labeled_tuple_element_is_declared_as_optional_with_a_question_mark_after_the_name_and_before_the_colon_rather_than_after_the_type);
             }
-            if (node.type.kind === 182 /* RestType */) {
+            if (node.type.kind === 184 /* RestType */) {
                 grammarErrorOnNode(node.type, ts.Diagnostics.A_labeled_tuple_element_is_declared_as_rest_with_a_before_the_name_rather_than_before_the_type);
             }
             checkSourceElement(node.type);
@@ -75746,9 +77162,9 @@
             var flags = ts.getCombinedModifierFlags(n);
             // children of classes (even ambient classes) should not be marked as ambient or export
             // because those flags have no useful semantics there.
-            if (n.parent.kind !== 254 /* InterfaceDeclaration */ &&
-                n.parent.kind !== 253 /* ClassDeclaration */ &&
-                n.parent.kind !== 222 /* ClassExpression */ &&
+            if (n.parent.kind !== 256 /* InterfaceDeclaration */ &&
+                n.parent.kind !== 255 /* ClassDeclaration */ &&
+                n.parent.kind !== 224 /* ClassExpression */ &&
                 n.flags & 8388608 /* Ambient */) {
                 if (!(flags & 2 /* Ambient */) && !(ts.isModuleBlock(n.parent) && ts.isModuleDeclaration(n.parent.parent) && ts.isGlobalScopeAugmentation(n.parent.parent))) {
                     // It is nested in an ambient context, which means it is automatically exported
@@ -75844,14 +77260,14 @@
                             // Both are literal property names that are the same.
                             ts.isPropertyNameLiteral(node.name) && ts.isPropertyNameLiteral(subsequentName) &&
                                 ts.getEscapedTextOfIdentifierOrLiteral(node.name) === ts.getEscapedTextOfIdentifierOrLiteral(subsequentName))) {
-                            var reportError = (node.kind === 166 /* MethodDeclaration */ || node.kind === 165 /* MethodSignature */) &&
-                                ts.hasSyntacticModifier(node, 32 /* Static */) !== ts.hasSyntacticModifier(subsequentNode, 32 /* Static */);
+                            var reportError = (node.kind === 167 /* MethodDeclaration */ || node.kind === 166 /* MethodSignature */) &&
+                                ts.isStatic(node) !== ts.isStatic(subsequentNode);
                             // we can get here in two cases
                             // 1. mixed static and instance class members
                             // 2. something with the same name was defined before the set of overloads that prevents them from merging
                             // here we'll report error only for the first case since for second we should already report error in binder
                             if (reportError) {
-                                var diagnostic = ts.hasSyntacticModifier(node, 32 /* Static */) ? ts.Diagnostics.Function_overload_must_be_static : ts.Diagnostics.Function_overload_must_not_be_static;
+                                var diagnostic = ts.isStatic(node) ? ts.Diagnostics.Function_overload_must_be_static : ts.Diagnostics.Function_overload_must_not_be_static;
                                 error(errorNode_1, diagnostic);
                             }
                             return;
@@ -75886,7 +77302,7 @@
                     var current = declarations_4[_i];
                     var node = current;
                     var inAmbientContext = node.flags & 8388608 /* Ambient */;
-                    var inAmbientContextOrInterface = node.parent && (node.parent.kind === 254 /* InterfaceDeclaration */ || node.parent.kind === 178 /* TypeLiteral */) || inAmbientContext;
+                    var inAmbientContextOrInterface = node.parent && (node.parent.kind === 256 /* InterfaceDeclaration */ || node.parent.kind === 180 /* TypeLiteral */) || inAmbientContext;
                     if (inAmbientContextOrInterface) {
                         // check if declarations are consecutive only if they are non-ambient
                         // 1. ambient declarations can be interleaved
@@ -75897,10 +77313,10 @@
                         // 2. mixing ambient and non-ambient declarations is a separate error that will be reported - do not want to report an extra one
                         previousDeclaration = undefined;
                     }
-                    if ((node.kind === 253 /* ClassDeclaration */ || node.kind === 222 /* ClassExpression */) && !inAmbientContext) {
+                    if ((node.kind === 255 /* ClassDeclaration */ || node.kind === 224 /* ClassExpression */) && !inAmbientContext) {
                         hasNonAmbientClass = true;
                     }
-                    if (node.kind === 252 /* FunctionDeclaration */ || node.kind === 166 /* MethodDeclaration */ || node.kind === 165 /* MethodSignature */ || node.kind === 167 /* Constructor */) {
+                    if (node.kind === 254 /* FunctionDeclaration */ || node.kind === 167 /* MethodDeclaration */ || node.kind === 166 /* MethodSignature */ || node.kind === 169 /* Constructor */) {
                         functionDeclarations.push(node);
                         var currentNodeFlags = getEffectiveDeclarationFlags(node, flagsToCheck);
                         someNodeFlags |= currentNodeFlags;
@@ -75944,13 +77360,18 @@
                     error(ts.getNameOfDeclaration(declaration) || declaration, ts.Diagnostics.Duplicate_function_implementation);
                 });
             }
-            if (hasNonAmbientClass && !isConstructor && symbol.flags & 16 /* Function */) {
-                // A non-ambient class cannot be an implementation for a non-constructor function/class merge
-                // TODO: The below just replicates our older error from when classes and functions were
-                // entirely unable to merge - a more helpful message like "Class declaration cannot implement overload list"
-                // might be warranted. :shrug:
+            if (hasNonAmbientClass && !isConstructor && symbol.flags & 16 /* Function */ && declarations) {
+                var relatedDiagnostics_1 = ts.filter(declarations, function (d) { return d.kind === 255 /* ClassDeclaration */; })
+                    .map(function (d) { return ts.createDiagnosticForNode(d, ts.Diagnostics.Consider_adding_a_declare_modifier_to_this_class); });
                 ts.forEach(declarations, function (declaration) {
-                    addDuplicateDeclarationError(declaration, ts.Diagnostics.Duplicate_identifier_0, ts.symbolName(symbol), declarations);
+                    var diagnostic = declaration.kind === 255 /* ClassDeclaration */
+                        ? ts.Diagnostics.Class_declaration_cannot_implement_overload_list_for_0
+                        : declaration.kind === 254 /* FunctionDeclaration */
+                            ? ts.Diagnostics.Function_with_bodies_can_only_merge_with_classes_that_are_ambient
+                            : undefined;
+                    if (diagnostic) {
+                        ts.addRelatedInfo.apply(void 0, __spreadArray([error(ts.getNameOfDeclaration(declaration) || declaration, diagnostic, ts.symbolName(symbol))], relatedDiagnostics_1, false));
+                    }
                 });
             }
             // Abstract methods can't have an implementation -- in particular, they don't need one.
@@ -76036,26 +77457,26 @@
             function getDeclarationSpaces(decl) {
                 var d = decl;
                 switch (d.kind) {
-                    case 254 /* InterfaceDeclaration */:
-                    case 255 /* TypeAliasDeclaration */:
+                    case 256 /* InterfaceDeclaration */:
+                    case 257 /* TypeAliasDeclaration */:
                     // A jsdoc typedef and callback are, by definition, type aliases.
                     // falls through
-                    case 335 /* JSDocTypedefTag */:
-                    case 328 /* JSDocCallbackTag */:
-                    case 329 /* JSDocEnumTag */:
+                    case 340 /* JSDocTypedefTag */:
+                    case 333 /* JSDocCallbackTag */:
+                    case 334 /* JSDocEnumTag */:
                         return 2 /* ExportType */;
-                    case 257 /* ModuleDeclaration */:
+                    case 259 /* ModuleDeclaration */:
                         return ts.isAmbientModule(d) || ts.getModuleInstanceState(d) !== 0 /* NonInstantiated */
                             ? 4 /* ExportNamespace */ | 1 /* ExportValue */
                             : 4 /* ExportNamespace */;
-                    case 253 /* ClassDeclaration */:
-                    case 256 /* EnumDeclaration */:
-                    case 292 /* EnumMember */:
+                    case 255 /* ClassDeclaration */:
+                    case 258 /* EnumDeclaration */:
+                    case 294 /* EnumMember */:
                         return 2 /* ExportType */ | 1 /* ExportValue */;
-                    case 298 /* SourceFile */:
+                    case 300 /* SourceFile */:
                         return 2 /* ExportType */ | 1 /* ExportValue */ | 4 /* ExportNamespace */;
-                    case 267 /* ExportAssignment */:
-                    case 217 /* BinaryExpression */:
+                    case 269 /* ExportAssignment */:
+                    case 219 /* BinaryExpression */:
                         var node_2 = d;
                         var expression = ts.isExportAssignment(node_2) ? node_2.expression : node_2.right;
                         // Export assigned entity name expressions act as aliases and should fall through, otherwise they export values
@@ -76065,18 +77486,18 @@
                         d = expression;
                     // The below options all declare an Alias, which is allowed to merge with other values within the importing module.
                     // falls through
-                    case 261 /* ImportEqualsDeclaration */:
-                    case 264 /* NamespaceImport */:
-                    case 263 /* ImportClause */:
-                        var result_13 = 0 /* None */;
+                    case 263 /* ImportEqualsDeclaration */:
+                    case 266 /* NamespaceImport */:
+                    case 265 /* ImportClause */:
+                        var result_12 = 0 /* None */;
                         var target = resolveAlias(getSymbolOfNode(d));
-                        ts.forEach(target.declarations, function (d) { result_13 |= getDeclarationSpaces(d); });
-                        return result_13;
-                    case 250 /* VariableDeclaration */:
-                    case 199 /* BindingElement */:
-                    case 252 /* FunctionDeclaration */:
-                    case 266 /* ImportSpecifier */: // https://github.com/Microsoft/TypeScript/pull/7591
-                    case 78 /* Identifier */: // https://github.com/microsoft/TypeScript/issues/36098
+                        ts.forEach(target.declarations, function (d) { result_12 |= getDeclarationSpaces(d); });
+                        return result_12;
+                    case 252 /* VariableDeclaration */:
+                    case 201 /* BindingElement */:
+                    case 254 /* FunctionDeclaration */:
+                    case 268 /* ImportSpecifier */: // https://github.com/Microsoft/TypeScript/pull/7591
+                    case 79 /* Identifier */: // https://github.com/microsoft/TypeScript/issues/36098
                         // Identifiers are used as declarations of assignment declarations whose parents may be
                         // SyntaxKind.CallExpression - `Object.defineProperty(thing, "aField", {value: 42});`
                         // SyntaxKind.ElementAccessExpression - `thing["aField"] = 42;` or `thing["aField"];` (with a doc comment on it)
@@ -76328,7 +77749,7 @@
                 var promiseConstructorSymbol = resolveEntityName(promiseConstructorName, 111551 /* Value */, /*ignoreErrors*/ true);
                 var promiseConstructorType = promiseConstructorSymbol ? getTypeOfSymbol(promiseConstructorSymbol) : errorType;
                 if (promiseConstructorType === errorType) {
-                    if (promiseConstructorName.kind === 78 /* Identifier */ && promiseConstructorName.escapedText === "Promise" && getTargetType(returnType) === getGlobalPromiseType(/*reportErrors*/ false)) {
+                    if (promiseConstructorName.kind === 79 /* Identifier */ && promiseConstructorName.escapedText === "Promise" && getTargetType(returnType) === getGlobalPromiseType(/*reportErrors*/ false)) {
                         error(returnTypeNode, ts.Diagnostics.An_async_function_or_method_in_ES5_SlashES3_requires_the_Promise_constructor_Make_sure_you_have_a_declaration_for_the_Promise_constructor_or_include_ES2015_in_your_lib_option);
                     }
                     else {
@@ -76368,24 +77789,24 @@
             var headMessage = getDiagnosticHeadMessageForDecoratorResolution(node);
             var errorInfo;
             switch (node.parent.kind) {
-                case 253 /* ClassDeclaration */:
+                case 255 /* ClassDeclaration */:
                     var classSymbol = getSymbolOfNode(node.parent);
                     var classConstructorType = getTypeOfSymbol(classSymbol);
                     expectedReturnType = getUnionType([classConstructorType, voidType]);
                     break;
-                case 161 /* Parameter */:
+                case 162 /* Parameter */:
                     expectedReturnType = voidType;
                     errorInfo = ts.chainDiagnosticMessages(
                     /*details*/ undefined, ts.Diagnostics.The_return_type_of_a_parameter_decorator_function_must_be_either_void_or_any);
                     break;
-                case 164 /* PropertyDeclaration */:
+                case 165 /* PropertyDeclaration */:
                     expectedReturnType = voidType;
                     errorInfo = ts.chainDiagnosticMessages(
                     /*details*/ undefined, ts.Diagnostics.The_return_type_of_a_property_decorator_function_must_be_either_void_or_any);
                     break;
-                case 166 /* MethodDeclaration */:
-                case 168 /* GetAccessor */:
-                case 169 /* SetAccessor */:
+                case 167 /* MethodDeclaration */:
+                case 170 /* GetAccessor */:
+                case 171 /* SetAccessor */:
                     var methodType = getTypeOfNode(node.parent);
                     var descriptorType = createTypedPropertyDescriptorType(methodType);
                     expectedReturnType = getUnionType([descriptorType, voidType]);
@@ -76406,8 +77827,8 @@
             if (!typeName)
                 return;
             var rootName = ts.getFirstIdentifier(typeName);
-            var meaning = (typeName.kind === 78 /* Identifier */ ? 788968 /* Type */ : 1920 /* Namespace */) | 2097152 /* Alias */;
-            var rootSymbol = resolveName(rootName, rootName.escapedText, meaning, /*nameNotFoundMessage*/ undefined, /*nameArg*/ undefined, /*isRefernce*/ true);
+            var meaning = (typeName.kind === 79 /* Identifier */ ? 788968 /* Type */ : 1920 /* Namespace */) | 2097152 /* Alias */;
+            var rootSymbol = resolveName(rootName, rootName.escapedText, meaning, /*nameNotFoundMessage*/ undefined, /*nameArg*/ undefined, /*isReference*/ true);
             if (rootSymbol
                 && rootSymbol.flags & 2097152 /* Alias */
                 && symbolIsValue(rootSymbol)
@@ -76432,30 +77853,30 @@
         function getEntityNameForDecoratorMetadata(node) {
             if (node) {
                 switch (node.kind) {
-                    case 184 /* IntersectionType */:
-                    case 183 /* UnionType */:
+                    case 186 /* IntersectionType */:
+                    case 185 /* UnionType */:
                         return getEntityNameForDecoratorMetadataFromTypeList(node.types);
-                    case 185 /* ConditionalType */:
+                    case 187 /* ConditionalType */:
                         return getEntityNameForDecoratorMetadataFromTypeList([node.trueType, node.falseType]);
-                    case 187 /* ParenthesizedType */:
-                    case 193 /* NamedTupleMember */:
+                    case 189 /* ParenthesizedType */:
+                    case 195 /* NamedTupleMember */:
                         return getEntityNameForDecoratorMetadata(node.type);
-                    case 174 /* TypeReference */:
+                    case 176 /* TypeReference */:
                         return node.typeName;
                 }
             }
         }
         function getEntityNameForDecoratorMetadataFromTypeList(types) {
             var commonEntityName;
-            for (var _i = 0, types_23 = types; _i < types_23.length; _i++) {
-                var typeNode = types_23[_i];
-                while (typeNode.kind === 187 /* ParenthesizedType */ || typeNode.kind === 193 /* NamedTupleMember */) {
+            for (var _i = 0, types_22 = types; _i < types_22.length; _i++) {
+                var typeNode = types_22[_i];
+                while (typeNode.kind === 189 /* ParenthesizedType */ || typeNode.kind === 195 /* NamedTupleMember */) {
                     typeNode = typeNode.type; // Skip parens if need be
                 }
-                if (typeNode.kind === 141 /* NeverKeyword */) {
+                if (typeNode.kind === 142 /* NeverKeyword */) {
                     continue; // Always elide `never` from the union/intersection if possible
                 }
-                if (!strictNullChecks && (typeNode.kind === 192 /* LiteralType */ && typeNode.literal.kind === 103 /* NullKeyword */ || typeNode.kind === 150 /* UndefinedKeyword */)) {
+                if (!strictNullChecks && (typeNode.kind === 194 /* LiteralType */ && typeNode.literal.kind === 104 /* NullKeyword */ || typeNode.kind === 151 /* UndefinedKeyword */)) {
                     continue; // Elide null and undefined from unions for metadata, just like what we did prior to the implementation of strict null checks
                 }
                 var individualEntityName = getEntityNameForDecoratorMetadata(typeNode);
@@ -76501,14 +77922,14 @@
             }
             var firstDecorator = node.decorators[0];
             checkExternalEmitHelpers(firstDecorator, 8 /* Decorate */);
-            if (node.kind === 161 /* Parameter */) {
+            if (node.kind === 162 /* Parameter */) {
                 checkExternalEmitHelpers(firstDecorator, 32 /* Param */);
             }
             if (compilerOptions.emitDecoratorMetadata) {
                 checkExternalEmitHelpers(firstDecorator, 16 /* Metadata */);
                 // we only need to perform these checks if we are emitting serialized type metadata for the target of a decorator.
                 switch (node.kind) {
-                    case 253 /* ClassDeclaration */:
+                    case 255 /* ClassDeclaration */:
                         var constructor = ts.getFirstConstructorWithBody(node);
                         if (constructor) {
                             for (var _i = 0, _a = constructor.parameters; _i < _a.length; _i++) {
@@ -76517,23 +77938,23 @@
                             }
                         }
                         break;
-                    case 168 /* GetAccessor */:
-                    case 169 /* SetAccessor */:
-                        var otherKind = node.kind === 168 /* GetAccessor */ ? 169 /* SetAccessor */ : 168 /* GetAccessor */;
+                    case 170 /* GetAccessor */:
+                    case 171 /* SetAccessor */:
+                        var otherKind = node.kind === 170 /* GetAccessor */ ? 171 /* SetAccessor */ : 170 /* GetAccessor */;
                         var otherAccessor = ts.getDeclarationOfKind(getSymbolOfNode(node), otherKind);
                         markDecoratorMedataDataTypeNodeAsReferenced(getAnnotatedAccessorTypeNode(node) || otherAccessor && getAnnotatedAccessorTypeNode(otherAccessor));
                         break;
-                    case 166 /* MethodDeclaration */:
+                    case 167 /* MethodDeclaration */:
                         for (var _b = 0, _c = node.parameters; _b < _c.length; _b++) {
                             var parameter = _c[_b];
                             markDecoratorMedataDataTypeNodeAsReferenced(getParameterTypeNodeForDecoratorCheck(parameter));
                         }
                         markDecoratorMedataDataTypeNodeAsReferenced(ts.getEffectiveReturnTypeNode(node));
                         break;
-                    case 164 /* PropertyDeclaration */:
+                    case 165 /* PropertyDeclaration */:
                         markDecoratorMedataDataTypeNodeAsReferenced(ts.getEffectiveTypeAnnotationNode(node));
                         break;
-                    case 161 /* Parameter */:
+                    case 162 /* Parameter */:
                         markDecoratorMedataDataTypeNodeAsReferenced(getParameterTypeNodeForDecoratorCheck(node));
                         var containingSignature = node.parent;
                         for (var _d = 0, _e = containingSignature.parameters; _d < _e.length; _d++) {
@@ -76549,8 +77970,7 @@
             if (produceDiagnostics) {
                 checkFunctionOrMethodDeclaration(node);
                 checkGrammarForGenerator(node);
-                checkCollisionWithRequireExportsInGeneratedCode(node, node.name);
-                checkCollisionWithGlobalPromiseInGeneratedCode(node, node.name);
+                checkCollisionsForDeclarationName(node, node.name);
             }
         }
         function checkJSDocTypeAliasTag(node) {
@@ -76596,7 +78016,7 @@
                     else if (ts.findLast(ts.getJSDocTags(decl), ts.isJSDocParameterTag) === node &&
                         node.typeExpression && node.typeExpression.type &&
                         !isArrayType(getTypeFromTypeNode(node.typeExpression.type))) {
-                        error(node.name, ts.Diagnostics.JSDoc_param_tag_has_name_0_but_there_is_no_parameter_with_that_name_It_would_match_arguments_if_it_had_an_array_type, ts.idText(node.name.kind === 158 /* QualifiedName */ ? node.name.right : node.name));
+                        error(node.name, ts.Diagnostics.JSDoc_param_tag_has_name_0_but_there_is_no_parameter_with_that_name_It_would_match_arguments_if_it_had_an_array_type, ts.idText(node.name.kind === 159 /* QualifiedName */ ? node.name.right : node.name));
                     }
                 }
             }
@@ -76638,9 +78058,9 @@
         }
         function getIdentifierFromEntityNameExpression(node) {
             switch (node.kind) {
-                case 78 /* Identifier */:
+                case 79 /* Identifier */:
                     return node;
-                case 202 /* PropertyAccessExpression */:
+                case 204 /* PropertyAccessExpression */:
                     return node.name;
                 default:
                     return undefined;
@@ -76654,7 +78074,7 @@
             // Do not use hasDynamicName here, because that returns false for well known symbols.
             // We want to perform checkComputedPropertyName for all computed properties, including
             // well known symbols.
-            if (node.name && node.name.kind === 159 /* ComputedPropertyName */) {
+            if (node.name && node.name.kind === 160 /* ComputedPropertyName */) {
                 // This check will account for methods in class/interface declarations,
                 // as well as accessors in classes/object literals
                 checkComputedPropertyName(node.name);
@@ -76680,7 +78100,7 @@
                     checkFunctionOrConstructorSymbol(symbol);
                 }
             }
-            var body = node.kind === 165 /* MethodSignature */ ? undefined : node.body;
+            var body = node.kind === 166 /* MethodSignature */ ? undefined : node.body;
             checkSourceElement(body);
             checkAllCodePathsInNonVoidFunctionReturnOrThrow(node, getReturnTypeFromAnnotation(node));
             if (produceDiagnostics && !ts.getEffectiveReturnTypeNode(node)) {
@@ -76722,42 +78142,42 @@
             for (var _i = 0, potentiallyUnusedIdentifiers_1 = potentiallyUnusedIdentifiers; _i < potentiallyUnusedIdentifiers_1.length; _i++) {
                 var node = potentiallyUnusedIdentifiers_1[_i];
                 switch (node.kind) {
-                    case 253 /* ClassDeclaration */:
-                    case 222 /* ClassExpression */:
+                    case 255 /* ClassDeclaration */:
+                    case 224 /* ClassExpression */:
                         checkUnusedClassMembers(node, addDiagnostic);
                         checkUnusedTypeParameters(node, addDiagnostic);
                         break;
-                    case 298 /* SourceFile */:
-                    case 257 /* ModuleDeclaration */:
-                    case 231 /* Block */:
-                    case 259 /* CaseBlock */:
-                    case 238 /* ForStatement */:
-                    case 239 /* ForInStatement */:
-                    case 240 /* ForOfStatement */:
+                    case 300 /* SourceFile */:
+                    case 259 /* ModuleDeclaration */:
+                    case 233 /* Block */:
+                    case 261 /* CaseBlock */:
+                    case 240 /* ForStatement */:
+                    case 241 /* ForInStatement */:
+                    case 242 /* ForOfStatement */:
                         checkUnusedLocalsAndParameters(node, addDiagnostic);
                         break;
-                    case 167 /* Constructor */:
-                    case 209 /* FunctionExpression */:
-                    case 252 /* FunctionDeclaration */:
-                    case 210 /* ArrowFunction */:
-                    case 166 /* MethodDeclaration */:
-                    case 168 /* GetAccessor */:
-                    case 169 /* SetAccessor */:
+                    case 169 /* Constructor */:
+                    case 211 /* FunctionExpression */:
+                    case 254 /* FunctionDeclaration */:
+                    case 212 /* ArrowFunction */:
+                    case 167 /* MethodDeclaration */:
+                    case 170 /* GetAccessor */:
+                    case 171 /* SetAccessor */:
                         if (node.body) { // Don't report unused parameters in overloads
                             checkUnusedLocalsAndParameters(node, addDiagnostic);
                         }
                         checkUnusedTypeParameters(node, addDiagnostic);
                         break;
-                    case 165 /* MethodSignature */:
-                    case 170 /* CallSignature */:
-                    case 171 /* ConstructSignature */:
-                    case 175 /* FunctionType */:
-                    case 176 /* ConstructorType */:
-                    case 255 /* TypeAliasDeclaration */:
-                    case 254 /* InterfaceDeclaration */:
+                    case 166 /* MethodSignature */:
+                    case 172 /* CallSignature */:
+                    case 173 /* ConstructSignature */:
+                    case 177 /* FunctionType */:
+                    case 178 /* ConstructorType */:
+                    case 257 /* TypeAliasDeclaration */:
+                    case 256 /* InterfaceDeclaration */:
                         checkUnusedTypeParameters(node, addDiagnostic);
                         break;
-                    case 186 /* InferType */:
+                    case 188 /* InferType */:
                         checkUnusedInferTypeParameter(node, addDiagnostic);
                         break;
                     default:
@@ -76777,11 +78197,11 @@
             for (var _i = 0, _a = node.members; _i < _a.length; _i++) {
                 var member = _a[_i];
                 switch (member.kind) {
-                    case 166 /* MethodDeclaration */:
-                    case 164 /* PropertyDeclaration */:
-                    case 168 /* GetAccessor */:
-                    case 169 /* SetAccessor */:
-                        if (member.kind === 169 /* SetAccessor */ && member.symbol.flags & 32768 /* GetAccessor */) {
+                    case 167 /* MethodDeclaration */:
+                    case 165 /* PropertyDeclaration */:
+                    case 170 /* GetAccessor */:
+                    case 171 /* SetAccessor */:
+                        if (member.kind === 171 /* SetAccessor */ && member.symbol.flags & 32768 /* GetAccessor */) {
                             // Already would have reported an error on the getter.
                             break;
                         }
@@ -76792,7 +78212,7 @@
                             addDiagnostic(member, 0 /* Local */, ts.createDiagnosticForNode(member.name, ts.Diagnostics._0_is_declared_but_its_value_is_never_read, symbolToString(symbol)));
                         }
                         break;
-                    case 167 /* Constructor */:
+                    case 169 /* Constructor */:
                         for (var _b = 0, _c = member.parameters; _b < _c.length; _b++) {
                             var parameter = _c[_b];
                             if (!parameter.symbol.isReferenced && ts.hasSyntacticModifier(parameter, 8 /* Private */)) {
@@ -76800,12 +78220,13 @@
                             }
                         }
                         break;
-                    case 172 /* IndexSignature */:
-                    case 230 /* SemicolonClassElement */:
+                    case 174 /* IndexSignature */:
+                    case 232 /* SemicolonClassElement */:
+                    case 168 /* ClassStaticBlockDeclaration */:
                         // Can't be private
                         break;
                     default:
-                        ts.Debug.fail();
+                        ts.Debug.fail("Unexpected class member");
                 }
             }
         }
@@ -76829,7 +78250,7 @@
                     continue;
                 var name = ts.idText(typeParameter.name);
                 var parent = typeParameter.parent;
-                if (parent.kind !== 186 /* InferType */ && parent.typeParameters.every(isTypeParameterUnused)) {
+                if (parent.kind !== 188 /* InferType */ && parent.typeParameters.every(isTypeParameterUnused)) {
                     if (ts.tryAddToSet(seenParentsWithEveryUnused, parent)) {
                         var sourceFile = ts.getSourceFileOfNode(parent);
                         var range = ts.isJSDocTemplateTag(parent)
@@ -76838,12 +78259,14 @@
                             // Include the `<>` in the error message
                             : ts.rangeOfTypeParameters(sourceFile, parent.typeParameters);
                         var only = parent.typeParameters.length === 1;
+                        //TODO: following line is possible reason for bug #41974, unusedTypeParameters_TemplateTag
                         var message = only ? ts.Diagnostics._0_is_declared_but_its_value_is_never_read : ts.Diagnostics.All_type_parameters_are_unused;
                         var arg0 = only ? name : undefined;
                         addDiagnostic(typeParameter, 1 /* Parameter */, ts.createFileDiagnostic(sourceFile, range.pos, range.end - range.pos, message, arg0));
                     }
                 }
                 else {
+                    //TODO: following line is possible reason for bug #41974, unusedTypeParameters_TemplateTag
                     addDiagnostic(typeParameter, 1 /* Parameter */, ts.createDiagnosticForNode(typeParameter, ts.Diagnostics._0_is_declared_but_its_value_is_never_read, name));
                 }
             }
@@ -76933,7 +78356,7 @@
                 var importDecl = importClause.parent;
                 var nDeclarations = (importClause.name ? 1 : 0) +
                     (importClause.namedBindings ?
-                        (importClause.namedBindings.kind === 264 /* NamespaceImport */ ? 1 : importClause.namedBindings.elements.length)
+                        (importClause.namedBindings.kind === 266 /* NamespaceImport */ ? 1 : importClause.namedBindings.elements.length)
                         : 0);
                 if (nDeclarations === unuseds.length) {
                     addDiagnostic(importDecl, 0 /* Local */, unuseds.length === 1
@@ -76951,7 +78374,7 @@
                 var bindingPattern = _a[0], bindingElements = _a[1];
                 var kind = tryGetRootParameterDeclaration(bindingPattern.parent) ? 1 /* Parameter */ : 0 /* Local */;
                 if (bindingPattern.elements.length === bindingElements.length) {
-                    if (bindingElements.length === 1 && bindingPattern.parent.kind === 250 /* VariableDeclaration */ && bindingPattern.parent.parent.kind === 251 /* VariableDeclarationList */) {
+                    if (bindingElements.length === 1 && bindingPattern.parent.kind === 252 /* VariableDeclaration */ && bindingPattern.parent.parent.kind === 253 /* VariableDeclarationList */) {
                         addToGroup(unusedVariables, bindingPattern.parent.parent, bindingPattern.parent, getNodeId);
                     }
                     else {
@@ -76972,7 +78395,7 @@
                 if (declarationList.declarations.length === declarations.length) {
                     addDiagnostic(declarationList, 0 /* Local */, declarations.length === 1
                         ? ts.createDiagnosticForNode(ts.first(declarations).name, ts.Diagnostics._0_is_declared_but_its_value_is_never_read, bindingNameText(ts.first(declarations).name))
-                        : ts.createDiagnosticForNode(declarationList.parent.kind === 233 /* VariableStatement */ ? declarationList.parent : declarationList, ts.Diagnostics.All_variables_are_unused));
+                        : ts.createDiagnosticForNode(declarationList.parent.kind === 235 /* VariableStatement */ ? declarationList.parent : declarationList, ts.Diagnostics.All_variables_are_unused));
                 }
                 else {
                     for (var _i = 0, declarations_5 = declarations; _i < declarations_5.length; _i++) {
@@ -76984,24 +78407,24 @@
         }
         function bindingNameText(name) {
             switch (name.kind) {
-                case 78 /* Identifier */:
+                case 79 /* Identifier */:
                     return ts.idText(name);
-                case 198 /* ArrayBindingPattern */:
-                case 197 /* ObjectBindingPattern */:
+                case 200 /* ArrayBindingPattern */:
+                case 199 /* ObjectBindingPattern */:
                     return bindingNameText(ts.cast(ts.first(name.elements), ts.isBindingElement).name);
                 default:
                     return ts.Debug.assertNever(name);
             }
         }
         function isImportedDeclaration(node) {
-            return node.kind === 263 /* ImportClause */ || node.kind === 266 /* ImportSpecifier */ || node.kind === 264 /* NamespaceImport */;
+            return node.kind === 265 /* ImportClause */ || node.kind === 268 /* ImportSpecifier */ || node.kind === 266 /* NamespaceImport */;
         }
         function importClauseFromImported(decl) {
-            return decl.kind === 263 /* ImportClause */ ? decl : decl.kind === 264 /* NamespaceImport */ ? decl.parent : decl.parent.parent;
+            return decl.kind === 265 /* ImportClause */ ? decl : decl.kind === 266 /* NamespaceImport */ ? decl.parent : decl.parent.parent;
         }
         function checkBlock(node) {
             // Grammar checking for SyntaxKind.Block
-            if (node.kind === 231 /* Block */) {
+            if (node.kind === 233 /* Block */) {
                 checkGrammarStatementInAmbientContext(node);
             }
             if (ts.isFunctionOrModuleBlock(node)) {
@@ -77027,25 +78450,37 @@
                 }
             });
         }
+        /**
+         * Checks whether an {@link Identifier}, in the context of another {@link Node}, would collide with a runtime value
+         * of {@link name} in an outer scope. This is used to check for collisions for downlevel transformations that
+         * require names like `Object`, `Promise`, `Reflect`, `require`, `exports`, etc.
+         */
         function needCollisionCheckForIdentifier(node, identifier, name) {
-            if (!(identifier && identifier.escapedText === name)) {
+            if ((identifier === null || identifier === void 0 ? void 0 : identifier.escapedText) !== name) {
                 return false;
             }
-            if (node.kind === 164 /* PropertyDeclaration */ ||
-                node.kind === 163 /* PropertySignature */ ||
-                node.kind === 166 /* MethodDeclaration */ ||
-                node.kind === 165 /* MethodSignature */ ||
-                node.kind === 168 /* GetAccessor */ ||
-                node.kind === 169 /* SetAccessor */) {
-                // it is ok to have member named '_super' or '_this' - member access is always qualified
+            if (node.kind === 165 /* PropertyDeclaration */ ||
+                node.kind === 164 /* PropertySignature */ ||
+                node.kind === 167 /* MethodDeclaration */ ||
+                node.kind === 166 /* MethodSignature */ ||
+                node.kind === 170 /* GetAccessor */ ||
+                node.kind === 171 /* SetAccessor */ ||
+                node.kind === 291 /* PropertyAssignment */) {
+                // it is ok to have member named '_super', '_this', `Promise`, etc. - member access is always qualified
                 return false;
             }
             if (node.flags & 8388608 /* Ambient */) {
                 // ambient context - no codegen impact
                 return false;
             }
+            if (ts.isImportClause(node) || ts.isImportEqualsDeclaration(node) || ts.isImportSpecifier(node)) {
+                // type-only imports do not require collision checks against runtime values.
+                if (ts.isTypeOnlyImportOrExportDeclaration(node)) {
+                    return false;
+                }
+            }
             var root = ts.getRootDeclaration(node);
-            if (root.kind === 161 /* Parameter */ && ts.nodeIsMissing(root.parent.body)) {
+            if (ts.isParameter(root) && ts.nodeIsMissing(root.parent.body)) {
                 // just an overload - no codegen impact
                 return false;
             }
@@ -77055,7 +78490,7 @@
         function checkIfThisIsCapturedInEnclosingScope(node) {
             ts.findAncestor(node, function (current) {
                 if (getNodeCheckFlags(current) & 4 /* CaptureThis */) {
-                    var isDeclaration_1 = node.kind !== 78 /* Identifier */;
+                    var isDeclaration_1 = node.kind !== 79 /* Identifier */;
                     if (isDeclaration_1) {
                         error(ts.getNameOfDeclaration(node), ts.Diagnostics.Duplicate_identifier_this_Compiler_uses_variable_declaration_this_to_capture_this_reference);
                     }
@@ -77070,7 +78505,7 @@
         function checkIfNewTargetIsCapturedInEnclosingScope(node) {
             ts.findAncestor(node, function (current) {
                 if (getNodeCheckFlags(current) & 8 /* CaptureNewTarget */) {
-                    var isDeclaration_2 = node.kind !== 78 /* Identifier */;
+                    var isDeclaration_2 = node.kind !== 79 /* Identifier */;
                     if (isDeclaration_2) {
                         error(ts.getNameOfDeclaration(node), ts.Diagnostics.Duplicate_identifier_newTarget_Compiler_uses_variable_declaration_newTarget_to_capture_new_target_meta_property_reference);
                     }
@@ -77082,6 +78517,46 @@
                 return false;
             });
         }
+        function checkCollisionWithRequireExportsInGeneratedCode(node, name) {
+            // No need to check for require or exports for ES6 modules and later
+            if (moduleKind >= ts.ModuleKind.ES2015) {
+                return;
+            }
+            if (!name || !needCollisionCheckForIdentifier(node, name, "require") && !needCollisionCheckForIdentifier(node, name, "exports")) {
+                return;
+            }
+            // Uninstantiated modules shouldnt do this check
+            if (ts.isModuleDeclaration(node) && ts.getModuleInstanceState(node) !== 1 /* Instantiated */) {
+                return;
+            }
+            // In case of variable declaration, node.parent is variable statement so look at the variable statement's parent
+            var parent = getDeclarationContainer(node);
+            if (parent.kind === 300 /* SourceFile */ && ts.isExternalOrCommonJsModule(parent)) {
+                // If the declaration happens to be in external module, report error that require and exports are reserved keywords
+                errorSkippedOn("noEmit", name, ts.Diagnostics.Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module, ts.declarationNameToString(name), ts.declarationNameToString(name));
+            }
+        }
+        function checkCollisionWithGlobalPromiseInGeneratedCode(node, name) {
+            if (!name || languageVersion >= 4 /* ES2017 */ || !needCollisionCheckForIdentifier(node, name, "Promise")) {
+                return;
+            }
+            // Uninstantiated modules shouldnt do this check
+            if (ts.isModuleDeclaration(node) && ts.getModuleInstanceState(node) !== 1 /* Instantiated */) {
+                return;
+            }
+            // In case of variable declaration, node.parent is variable statement so look at the variable statement's parent
+            var parent = getDeclarationContainer(node);
+            if (parent.kind === 300 /* SourceFile */ && ts.isExternalOrCommonJsModule(parent) && parent.flags & 2048 /* HasAsyncFunctions */) {
+                // If the declaration happens to be in external module, report error that Promise is a reserved identifier.
+                errorSkippedOn("noEmit", name, ts.Diagnostics.Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module_containing_async_functions, ts.declarationNameToString(name), ts.declarationNameToString(name));
+            }
+        }
+        function recordPotentialCollisionWithWeakMapSetInGeneratedCode(node, name) {
+            if (languageVersion <= 8 /* ES2021 */
+                && (needCollisionCheckForIdentifier(node, name, "WeakMap") || needCollisionCheckForIdentifier(node, name, "WeakSet"))) {
+                potentialWeakMapSetCollisions.push(node);
+            }
+        }
         function checkWeakMapSetCollision(node) {
             var enclosingBlockScope = ts.getEnclosingBlockScopeContainer(node);
             if (getNodeCheckFlags(enclosingBlockScope) & 67108864 /* ContainsClassWithPrivateIdentifiers */) {
@@ -77089,38 +78564,56 @@
                 errorSkippedOn("noEmit", node, ts.Diagnostics.Compiler_reserves_name_0_when_emitting_private_identifier_downlevel, node.name.escapedText);
             }
         }
-        function checkCollisionWithRequireExportsInGeneratedCode(node, name) {
-            // No need to check for require or exports for ES6 modules and later
-            if (moduleKind >= ts.ModuleKind.ES2015) {
-                return;
-            }
-            if (!needCollisionCheckForIdentifier(node, name, "require") && !needCollisionCheckForIdentifier(node, name, "exports")) {
-                return;
-            }
-            // Uninstantiated modules shouldnt do this check
-            if (ts.isModuleDeclaration(node) && ts.getModuleInstanceState(node) !== 1 /* Instantiated */) {
-                return;
-            }
-            // In case of variable declaration, node.parent is variable statement so look at the variable statement's parent
-            var parent = getDeclarationContainer(node);
-            if (parent.kind === 298 /* SourceFile */ && ts.isExternalOrCommonJsModule(parent)) {
-                // If the declaration happens to be in external module, report error that require and exports are reserved keywords
-                errorSkippedOn("noEmit", name, ts.Diagnostics.Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module, ts.declarationNameToString(name), ts.declarationNameToString(name));
+        function recordPotentialCollisionWithReflectInGeneratedCode(node, name) {
+            if (name && languageVersion >= 2 /* ES2015 */ && languageVersion <= 8 /* ES2021 */
+                && needCollisionCheckForIdentifier(node, name, "Reflect")) {
+                potentialReflectCollisions.push(node);
             }
         }
-        function checkCollisionWithGlobalPromiseInGeneratedCode(node, name) {
-            if (languageVersion >= 4 /* ES2017 */ || !needCollisionCheckForIdentifier(node, name, "Promise")) {
-                return;
+        function checkReflectCollision(node) {
+            var hasCollision = false;
+            if (ts.isClassExpression(node)) {
+                // ClassExpression names don't contribute to their containers, but do matter for any of their block-scoped members.
+                for (var _i = 0, _a = node.members; _i < _a.length; _i++) {
+                    var member = _a[_i];
+                    if (getNodeCheckFlags(member) & 134217728 /* ContainsSuperPropertyInStaticInitializer */) {
+                        hasCollision = true;
+                        break;
+                    }
+                }
             }
-            // Uninstantiated modules shouldnt do this check
-            if (ts.isModuleDeclaration(node) && ts.getModuleInstanceState(node) !== 1 /* Instantiated */) {
-                return;
+            else if (ts.isFunctionExpression(node)) {
+                // FunctionExpression names don't contribute to their containers, but do matter for their contents
+                if (getNodeCheckFlags(node) & 134217728 /* ContainsSuperPropertyInStaticInitializer */) {
+                    hasCollision = true;
+                }
             }
-            // In case of variable declaration, node.parent is variable statement so look at the variable statement's parent
-            var parent = getDeclarationContainer(node);
-            if (parent.kind === 298 /* SourceFile */ && ts.isExternalOrCommonJsModule(parent) && parent.flags & 2048 /* HasAsyncFunctions */) {
-                // If the declaration happens to be in external module, report error that Promise is a reserved identifier.
-                errorSkippedOn("noEmit", name, ts.Diagnostics.Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module_containing_async_functions, ts.declarationNameToString(name), ts.declarationNameToString(name));
+            else {
+                var container = ts.getEnclosingBlockScopeContainer(node);
+                if (container && getNodeCheckFlags(container) & 134217728 /* ContainsSuperPropertyInStaticInitializer */) {
+                    hasCollision = true;
+                }
+            }
+            if (hasCollision) {
+                ts.Debug.assert(ts.isNamedDeclaration(node) && ts.isIdentifier(node.name), "The target of a Reflect collision check should be an identifier");
+                errorSkippedOn("noEmit", node, ts.Diagnostics.Duplicate_identifier_0_Compiler_reserves_name_1_when_emitting_super_references_in_static_initializers, ts.declarationNameToString(node.name), "Reflect");
+            }
+        }
+        function checkCollisionsForDeclarationName(node, name) {
+            if (!name)
+                return;
+            checkCollisionWithRequireExportsInGeneratedCode(node, name);
+            checkCollisionWithGlobalPromiseInGeneratedCode(node, name);
+            recordPotentialCollisionWithWeakMapSetInGeneratedCode(node, name);
+            recordPotentialCollisionWithReflectInGeneratedCode(node, name);
+            if (ts.isClassLike(node)) {
+                checkTypeNameIsReserved(name, ts.Diagnostics.Class_name_cannot_be_0);
+                if (!(node.flags & 8388608 /* Ambient */)) {
+                    checkClassNameCollisionWithObject(name);
+                }
+            }
+            else if (ts.isEnumDeclaration(node)) {
+                checkTypeNameIsReserved(name, ts.Diagnostics.Enum_name_cannot_be_0);
             }
         }
         function checkVarDeclaredNamesNotShadowed(node) {
@@ -77153,7 +78646,7 @@
             // skip variable declarations that don't have initializers
             // NOTE: in ES6 spec initializer is required in variable declarations where name is binding pattern
             // so we'll always treat binding elements as initialized
-            if (node.kind === 250 /* VariableDeclaration */ && !node.initializer) {
+            if (node.kind === 252 /* VariableDeclaration */ && !node.initializer) {
                 return;
             }
             var symbol = getSymbolOfNode(node);
@@ -77165,17 +78658,17 @@
                     localDeclarationSymbol !== symbol &&
                     localDeclarationSymbol.flags & 2 /* BlockScopedVariable */) {
                     if (getDeclarationNodeFlagsFromSymbol(localDeclarationSymbol) & 3 /* BlockScoped */) {
-                        var varDeclList = ts.getAncestor(localDeclarationSymbol.valueDeclaration, 251 /* VariableDeclarationList */);
-                        var container = varDeclList.parent.kind === 233 /* VariableStatement */ && varDeclList.parent.parent
+                        var varDeclList = ts.getAncestor(localDeclarationSymbol.valueDeclaration, 253 /* VariableDeclarationList */);
+                        var container = varDeclList.parent.kind === 235 /* VariableStatement */ && varDeclList.parent.parent
                             ? varDeclList.parent.parent
                             : undefined;
                         // names of block-scoped and function scoped variables can collide only
                         // if block scoped variable is defined in the function\module\source file scope (because of variable hoisting)
                         var namesShareScope = container &&
-                            (container.kind === 231 /* Block */ && ts.isFunctionLike(container.parent) ||
-                                container.kind === 258 /* ModuleBlock */ ||
-                                container.kind === 257 /* ModuleDeclaration */ ||
-                                container.kind === 298 /* SourceFile */);
+                            (container.kind === 233 /* Block */ && ts.isFunctionLike(container.parent) ||
+                                container.kind === 260 /* ModuleBlock */ ||
+                                container.kind === 259 /* ModuleDeclaration */ ||
+                                container.kind === 300 /* SourceFile */);
                         // here we know that function scoped variable is shadowed by block scoped one
                         // if they are defined in the same scope - binder has already reported redeclaration error
                         // otherwise if variable has an initializer - show error that initialization will fail
@@ -77206,7 +78699,7 @@
             // Do not use hasDynamicName here, because that returns false for well known symbols.
             // We want to perform checkComputedPropertyName for all computed properties, including
             // well known symbols.
-            if (node.name.kind === 159 /* ComputedPropertyName */) {
+            if (node.name.kind === 160 /* ComputedPropertyName */) {
                 checkComputedPropertyName(node.name);
                 if (node.initializer) {
                     checkExpressionCached(node.initializer);
@@ -77217,7 +78710,7 @@
                     checkExternalEmitHelpers(node, 4 /* Rest */);
                 }
                 // check computed properties inside property names of binding elements
-                if (node.propertyName && node.propertyName.kind === 159 /* ComputedPropertyName */) {
+                if (node.propertyName && node.propertyName.kind === 160 /* ComputedPropertyName */) {
                     checkComputedPropertyName(node.propertyName);
                 }
                 // check private/protected variable access
@@ -77231,14 +78724,14 @@
                         var property = getPropertyOfType(parentType, nameText);
                         if (property) {
                             markPropertyAsReferenced(property, /*nodeForCheckWriteOnly*/ undefined, /*isSelfTypeAccess*/ false); // A destructuring is never a write-only reference.
-                            checkPropertyAccessibility(node, !!parent.initializer && parent.initializer.kind === 105 /* SuperKeyword */, /*writing*/ false, parentType, property);
+                            checkPropertyAccessibility(node, !!parent.initializer && parent.initializer.kind === 106 /* SuperKeyword */, /*writing*/ false, parentType, property);
                         }
                     }
                 }
             }
             // For a binding pattern, check contained binding elements
             if (ts.isBindingPattern(node.name)) {
-                if (node.name.kind === 198 /* ArrayBindingPattern */ && languageVersion < 2 /* ES2015 */ && compilerOptions.downlevelIteration) {
+                if (node.name.kind === 200 /* ArrayBindingPattern */ && languageVersion < 2 /* ES2015 */ && compilerOptions.downlevelIteration) {
                     checkExternalEmitHelpers(node, 512 /* Read */);
                 }
                 ts.forEach(node.name.elements, checkSourceElement);
@@ -77250,7 +78743,7 @@
             }
             // For a binding pattern, validate the initializer and exit
             if (ts.isBindingPattern(node.name)) {
-                var needCheckInitializer = node.initializer && node.parent.parent.kind !== 239 /* ForInStatement */;
+                var needCheckInitializer = node.initializer && node.parent.parent.kind !== 241 /* ForInStatement */;
                 var needCheckWidenedType = node.name.elements.length === 0;
                 if (needCheckInitializer || needCheckWidenedType) {
                     // Don't validate for-in initializer as it is already an error
@@ -77292,7 +78785,7 @@
                         ts.isObjectLiteralExpression(initializer) &&
                         (initializer.properties.length === 0 || ts.isPrototypeAccess(node.name)) &&
                         !!((_a = symbol.exports) === null || _a === void 0 ? void 0 : _a.size);
-                    if (!isJSObjectLiteralInitializer && node.parent.parent.kind !== 239 /* ForInStatement */) {
+                    if (!isJSObjectLiteralInitializer && node.parent.parent.kind !== 241 /* ForInStatement */) {
                         checkTypeAssignableToAndOptionallyElaborate(checkExpressionCached(initializer), type, node, initializer, /*headMessage*/ undefined);
                     }
                 }
@@ -77318,23 +78811,18 @@
                     error(node.name, ts.Diagnostics.All_declarations_of_0_must_have_identical_modifiers, ts.declarationNameToString(node.name));
                 }
             }
-            if (node.kind !== 164 /* PropertyDeclaration */ && node.kind !== 163 /* PropertySignature */) {
+            if (node.kind !== 165 /* PropertyDeclaration */ && node.kind !== 164 /* PropertySignature */) {
                 // We know we don't have a binding pattern or computed name here
                 checkExportsOnMergedDeclarations(node);
-                if (node.kind === 250 /* VariableDeclaration */ || node.kind === 199 /* BindingElement */) {
+                if (node.kind === 252 /* VariableDeclaration */ || node.kind === 201 /* BindingElement */) {
                     checkVarDeclaredNamesNotShadowed(node);
                 }
-                checkCollisionWithRequireExportsInGeneratedCode(node, node.name);
-                checkCollisionWithGlobalPromiseInGeneratedCode(node, node.name);
-                if (languageVersion < 99 /* ESNext */
-                    && (needCollisionCheckForIdentifier(node, node.name, "WeakMap") || needCollisionCheckForIdentifier(node, node.name, "WeakSet"))) {
-                    potentialWeakMapSetCollisions.push(node);
-                }
+                checkCollisionsForDeclarationName(node, node.name);
             }
         }
         function errorNextVariableOrPropertyDeclarationMustHaveSameType(firstDeclaration, firstType, nextDeclaration, nextType) {
             var nextDeclarationName = ts.getNameOfDeclaration(nextDeclaration);
-            var message = nextDeclaration.kind === 164 /* PropertyDeclaration */ || nextDeclaration.kind === 163 /* PropertySignature */
+            var message = nextDeclaration.kind === 165 /* PropertyDeclaration */ || nextDeclaration.kind === 164 /* PropertySignature */
                 ? ts.Diagnostics.Subsequent_property_declarations_must_have_the_same_type_Property_0_must_be_of_type_1_but_here_has_type_2
                 : ts.Diagnostics.Subsequent_variable_declarations_must_have_the_same_type_Variable_0_must_be_of_type_1_but_here_has_type_2;
             var declName = ts.declarationNameToString(nextDeclarationName);
@@ -77344,8 +78832,8 @@
             }
         }
         function areDeclarationFlagsIdentical(left, right) {
-            if ((left.kind === 161 /* Parameter */ && right.kind === 250 /* VariableDeclaration */) ||
-                (left.kind === 250 /* VariableDeclaration */ && right.kind === 161 /* Parameter */)) {
+            if ((left.kind === 162 /* Parameter */ && right.kind === 252 /* VariableDeclaration */) ||
+                (left.kind === 252 /* VariableDeclaration */ && right.kind === 162 /* Parameter */)) {
                 // Differences in optionality between parameters and variables are allowed.
                 return true;
             }
@@ -77387,7 +78875,7 @@
             var type = checkTruthinessExpression(node.expression);
             checkTestingKnownTruthyCallableOrAwaitableType(node.expression, type, node.thenStatement);
             checkSourceElement(node.thenStatement);
-            if (node.thenStatement.kind === 232 /* EmptyStatement */) {
+            if (node.thenStatement.kind === 234 /* EmptyStatement */) {
                 error(node.thenStatement, ts.Diagnostics.The_body_of_an_if_statement_cannot_be_the_empty_statement);
             }
             checkSourceElement(node.elseStatement);
@@ -77398,15 +78886,13 @@
             if (getFalsyFlags(type))
                 return;
             var location = ts.isBinaryExpression(condExpr) ? condExpr.right : condExpr;
+            if (ts.isPropertyAccessExpression(location) && ts.isAssertionExpression(ts.skipParentheses(location.expression))) {
+                return;
+            }
             var testedNode = ts.isIdentifier(location) ? location
                 : ts.isPropertyAccessExpression(location) ? location.name
                     : ts.isBinaryExpression(location) && ts.isIdentifier(location.right) ? location.right
                         : undefined;
-            var isPropertyExpressionCast = ts.isPropertyAccessExpression(location)
-                && ts.isAssertionExpression(ts.skipParentheses(location.expression));
-            if (!testedNode || isPropertyExpressionCast) {
-                return;
-            }
             // While it technically should be invalid for any known-truthy value
             // to be tested, we de-scope to functions and Promises unreferenced in
             // the block as a heuristic to identify the most common bugs. There
@@ -77417,12 +78903,12 @@
             if (callSignatures.length === 0 && !isPromise) {
                 return;
             }
-            var testedSymbol = getSymbolAtLocation(testedNode);
-            if (!testedSymbol) {
+            var testedSymbol = testedNode && getSymbolAtLocation(testedNode);
+            if (!testedSymbol && !isPromise) {
                 return;
             }
-            var isUsed = ts.isBinaryExpression(condExpr.parent) && isSymbolUsedInBinaryExpressionChain(condExpr.parent, testedSymbol)
-                || body && isSymbolUsedInConditionBody(condExpr, body, testedNode, testedSymbol);
+            var isUsed = testedSymbol && ts.isBinaryExpression(condExpr.parent) && isSymbolUsedInBinaryExpressionChain(condExpr.parent, testedSymbol)
+                || testedSymbol && body && isSymbolUsedInConditionBody(condExpr, body, testedNode, testedSymbol);
             if (!isUsed) {
                 if (isPromise) {
                     errorAndMaybeSuggestAwait(location, 
@@ -77447,7 +78933,7 @@
                         var childExpression = childNode.parent;
                         while (testedExpression && childExpression) {
                             if (ts.isIdentifier(testedExpression) && ts.isIdentifier(childExpression) ||
-                                testedExpression.kind === 107 /* ThisKeyword */ && childExpression.kind === 107 /* ThisKeyword */) {
+                                testedExpression.kind === 108 /* ThisKeyword */ && childExpression.kind === 108 /* ThisKeyword */) {
                                 return getSymbolAtLocation(testedExpression) === getSymbolAtLocation(childExpression);
                             }
                             else if (ts.isPropertyAccessExpression(testedExpression) && ts.isPropertyAccessExpression(childExpression)) {
@@ -77512,12 +78998,12 @@
         function checkForStatement(node) {
             // Grammar checking
             if (!checkGrammarStatementInAmbientContext(node)) {
-                if (node.initializer && node.initializer.kind === 251 /* VariableDeclarationList */) {
+                if (node.initializer && node.initializer.kind === 253 /* VariableDeclarationList */) {
                     checkGrammarVariableDeclarationList(node.initializer);
                 }
             }
             if (node.initializer) {
-                if (node.initializer.kind === 251 /* VariableDeclarationList */) {
+                if (node.initializer.kind === 253 /* VariableDeclarationList */) {
                     ts.forEach(node.initializer.declarations, checkVariableDeclaration);
                 }
                 else {
@@ -77535,11 +79021,17 @@
         }
         function checkForOfStatement(node) {
             checkGrammarForInOrForOfStatement(node);
+            var container = ts.getContainingFunctionOrClassStaticBlock(node);
             if (node.awaitModifier) {
-                var functionFlags = ts.getFunctionFlags(ts.getContainingFunction(node));
-                if ((functionFlags & (4 /* Invalid */ | 2 /* Async */)) === 2 /* Async */ && languageVersion < 99 /* ESNext */) {
-                    // for..await..of in an async function or async generator function prior to ESNext requires the __asyncValues helper
-                    checkExternalEmitHelpers(node, 16384 /* ForAwaitOfIncludes */);
+                if (container && ts.isClassStaticBlockDeclaration(container)) {
+                    grammarErrorOnNode(node.awaitModifier, ts.Diagnostics.For_await_loops_cannot_be_used_inside_a_class_static_block);
+                }
+                else {
+                    var functionFlags = ts.getFunctionFlags(container);
+                    if ((functionFlags & (4 /* Invalid */ | 2 /* Async */)) === 2 /* Async */ && languageVersion < 99 /* ESNext */) {
+                        // for..await..of in an async function or async generator function prior to ESNext requires the __asyncValues helper
+                        checkExternalEmitHelpers(node, 16384 /* ForAwaitOfIncludes */);
+                    }
                 }
             }
             else if (compilerOptions.downlevelIteration && languageVersion < 2 /* ES2015 */) {
@@ -77551,14 +79043,14 @@
             // via checkRightHandSideOfForOf.
             // If the LHS is an expression, check the LHS, as a destructuring assignment or as a reference.
             // Then check that the RHS is assignable to it.
-            if (node.initializer.kind === 251 /* VariableDeclarationList */) {
+            if (node.initializer.kind === 253 /* VariableDeclarationList */) {
                 checkForInOrForOfVariableDeclaration(node);
             }
             else {
                 var varExpr = node.initializer;
                 var iteratedType = checkRightHandSideOfForOf(node);
                 // There may be a destructuring assignment on the left side
-                if (varExpr.kind === 200 /* ArrayLiteralExpression */ || varExpr.kind === 201 /* ObjectLiteralExpression */) {
+                if (varExpr.kind === 202 /* ArrayLiteralExpression */ || varExpr.kind === 203 /* ObjectLiteralExpression */) {
                     // iteratedType may be undefined. In this case, we still want to check the structure of
                     // varExpr, in particular making sure it's a valid LeftHandSideExpression. But we'd like
                     // to short circuit the type relation checking as much as possible, so we pass the unknownType.
@@ -77590,7 +79082,7 @@
             // for (let VarDecl in Expr) Statement
             //   VarDecl must be a variable declaration without a type annotation that declares a variable of type Any,
             //   and Expr must be an expression of type Any, an object type, or a type parameter type.
-            if (node.initializer.kind === 251 /* VariableDeclarationList */) {
+            if (node.initializer.kind === 253 /* VariableDeclarationList */) {
                 var variable = node.initializer.declarations[0];
                 if (variable && ts.isBindingPattern(variable.name)) {
                     error(variable.name, ts.Diagnostics.The_left_hand_side_of_a_for_in_statement_cannot_be_a_destructuring_pattern);
@@ -77604,7 +79096,7 @@
                 //   and Expr must be an expression of type Any, an object type, or a type parameter type.
                 var varExpr = node.initializer;
                 var leftType = checkExpression(varExpr);
-                if (varExpr.kind === 200 /* ArrayLiteralExpression */ || varExpr.kind === 201 /* ObjectLiteralExpression */) {
+                if (varExpr.kind === 202 /* ArrayLiteralExpression */ || varExpr.kind === 203 /* ObjectLiteralExpression */) {
                     error(varExpr, ts.Diagnostics.The_left_hand_side_of_a_for_in_statement_cannot_be_a_destructuring_pattern);
                 }
                 else if (!isTypeAssignableTo(getIndexTypeOrString(rightType), leftType)) {
@@ -77726,7 +79218,7 @@
                 }
                 return hasStringConstituent ? possibleOutOfBounds ? includeUndefinedInIndexSignature(stringType) : stringType : undefined;
             }
-            var arrayElementType = getIndexTypeOfType(arrayType, 1 /* Number */);
+            var arrayElementType = getIndexTypeOfType(arrayType, numberType);
             if (hasStringConstituent && arrayElementType) {
                 // This is just an optimization for the case where arrayOrStringType is string | string[]
                 if (arrayElementType.flags & 402653316 /* StringLike */ && !compilerOptions.noUncheckedIndexedAccess) {
@@ -77815,8 +79307,8 @@
             var yieldTypes;
             var returnTypes;
             var nextTypes;
-            for (var _i = 0, array_10 = array; _i < array_10.length; _i++) {
-                var iterationTypes = array_10[_i];
+            for (var _i = 0, array_11 = array; _i < array_11.length; _i++) {
+                var iterationTypes = array_11[_i];
                 if (iterationTypes === undefined || iterationTypes === noIterationTypes) {
                     continue;
                 }
@@ -78318,27 +79810,31 @@
             if (checkGrammarStatementInAmbientContext(node)) {
                 return;
             }
-            var func = ts.getContainingFunction(node);
-            if (!func) {
+            var container = ts.getContainingFunctionOrClassStaticBlock(node);
+            if (container && ts.isClassStaticBlockDeclaration(container)) {
+                grammarErrorOnFirstToken(node, ts.Diagnostics.A_return_statement_cannot_be_used_inside_a_class_static_block);
+                return;
+            }
+            if (!container) {
                 grammarErrorOnFirstToken(node, ts.Diagnostics.A_return_statement_can_only_be_used_within_a_function_body);
                 return;
             }
-            var signature = getSignatureFromDeclaration(func);
+            var signature = getSignatureFromDeclaration(container);
             var returnType = getReturnTypeOfSignature(signature);
-            var functionFlags = ts.getFunctionFlags(func);
+            var functionFlags = ts.getFunctionFlags(container);
             if (strictNullChecks || node.expression || returnType.flags & 131072 /* Never */) {
                 var exprType = node.expression ? checkExpressionCached(node.expression) : undefinedType;
-                if (func.kind === 169 /* SetAccessor */) {
+                if (container.kind === 171 /* SetAccessor */) {
                     if (node.expression) {
                         error(node, ts.Diagnostics.Setters_cannot_return_a_value);
                     }
                 }
-                else if (func.kind === 167 /* Constructor */) {
+                else if (container.kind === 169 /* Constructor */) {
                     if (node.expression && !checkTypeAssignableToAndOptionallyElaborate(exprType, returnType, node, node.expression)) {
                         error(node, ts.Diagnostics.Return_type_of_constructor_signature_must_be_assignable_to_the_instance_type_of_the_class);
                     }
                 }
-                else if (getReturnTypeFromAnnotation(func)) {
+                else if (getReturnTypeFromAnnotation(container)) {
                     var unwrappedReturnType = (_a = unwrapReturnType(returnType, functionFlags)) !== null && _a !== void 0 ? _a : returnType;
                     var unwrappedExprType = functionFlags & 2 /* Async */
                         ? checkAwaitedType(exprType, node, ts.Diagnostics.The_return_type_of_an_async_function_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member)
@@ -78351,7 +79847,7 @@
                     }
                 }
             }
-            else if (func.kind !== 167 /* Constructor */ && compilerOptions.noImplicitReturns && !isUnwrappedReturnTypeVoidOrAny(func, returnType)) {
+            else if (container.kind !== 169 /* Constructor */ && compilerOptions.noImplicitReturns && !isUnwrappedReturnTypeVoidOrAny(container, returnType)) {
                 // The function has a return type, but the return statement doesn't have an expression.
                 error(node, ts.Diagnostics.Not_all_code_paths_return_a_value);
             }
@@ -78380,7 +79876,7 @@
             var expressionIsLiteral = isLiteralType(expressionType);
             ts.forEach(node.caseBlock.clauses, function (clause) {
                 // Grammar check for duplicate default clauses, skip if we already report duplicate default clause
-                if (clause.kind === 286 /* DefaultClause */ && !hasDuplicateDefaultClause) {
+                if (clause.kind === 288 /* DefaultClause */ && !hasDuplicateDefaultClause) {
                     if (firstDefaultClause === undefined) {
                         firstDefaultClause = clause;
                     }
@@ -78389,7 +79885,7 @@
                         hasDuplicateDefaultClause = true;
                     }
                 }
-                if (produceDiagnostics && clause.kind === 285 /* CaseClause */) {
+                if (produceDiagnostics && clause.kind === 287 /* CaseClause */) {
                     // TypeScript 1.0 spec (April 2014): 5.9
                     // In a 'switch' statement, each 'case' expression must be of a type that is comparable
                     // to or from the type of the 'switch' expression.
@@ -78421,7 +79917,7 @@
                     if (ts.isFunctionLike(current)) {
                         return "quit";
                     }
-                    if (current.kind === 246 /* LabeledStatement */ && current.label.escapedText === node.label.escapedText) {
+                    if (current.kind === 248 /* LabeledStatement */ && current.label.escapedText === node.label.escapedText) {
                         grammarErrorOnNode(node.label, ts.Diagnostics.Duplicate_label_0, ts.getTextOfNode(node.label));
                         return true;
                     }
@@ -78479,87 +79975,83 @@
                 checkBlock(node.finallyBlock);
             }
         }
-        function checkIndexConstraints(type, isStatic) {
-            var _a, _b, _c, _d;
-            var declaredNumberIndexer = getIndexDeclarationOfSymbolTable(isStatic ? (_a = type.symbol) === null || _a === void 0 ? void 0 : _a.exports : (_b = type.symbol) === null || _b === void 0 ? void 0 : _b.members, 1 /* Number */);
-            var declaredStringIndexer = getIndexDeclarationOfSymbolTable(isStatic ? (_c = type.symbol) === null || _c === void 0 ? void 0 : _c.exports : (_d = type.symbol) === null || _d === void 0 ? void 0 : _d.members, 0 /* String */);
-            var stringIndexType = getIndexTypeOfType(type, 0 /* String */);
-            var numberIndexType = getIndexTypeOfType(type, 1 /* Number */);
-            if (stringIndexType || numberIndexType) {
-                ts.forEach(getPropertiesOfObjectType(type), function (prop) {
-                    if (isStatic && prop.flags & 4194304 /* Prototype */)
-                        return;
-                    var propType = getTypeOfSymbol(prop);
-                    checkIndexConstraintForProperty(prop, propType, type, declaredStringIndexer, stringIndexType, 0 /* String */);
-                    checkIndexConstraintForProperty(prop, propType, type, declaredNumberIndexer, numberIndexType, 1 /* Number */);
-                });
-                var classDeclaration = type.symbol.valueDeclaration;
-                if (ts.getObjectFlags(type) & 1 /* Class */ && classDeclaration && ts.isClassLike(classDeclaration)) {
-                    for (var _i = 0, _e = classDeclaration.members; _i < _e.length; _i++) {
-                        var member = _e[_i];
-                        // Only process instance properties with computed names here.
-                        // Static properties cannot be in conflict with indexers,
-                        // and properties with literal names were already checked.
-                        if (!ts.hasSyntacticModifier(member, 32 /* Static */) && !hasBindableName(member)) {
-                            var symbol = getSymbolOfNode(member);
-                            var propType = getTypeOfSymbol(symbol);
-                            checkIndexConstraintForProperty(symbol, propType, type, declaredStringIndexer, stringIndexType, 0 /* String */);
-                            checkIndexConstraintForProperty(symbol, propType, type, declaredNumberIndexer, numberIndexType, 1 /* Number */);
-                        }
+        function checkIndexConstraints(type, isStaticIndex) {
+            var indexInfos = getIndexInfosOfType(type);
+            if (indexInfos.length === 0) {
+                return;
+            }
+            for (var _i = 0, _a = getPropertiesOfObjectType(type); _i < _a.length; _i++) {
+                var prop = _a[_i];
+                if (!(isStaticIndex && prop.flags & 4194304 /* Prototype */)) {
+                    checkIndexConstraintForProperty(type, prop, getLiteralTypeFromProperty(prop, 8576 /* StringOrNumberLiteralOrUnique */, /*includeNonPublic*/ true), getNonMissingTypeOfSymbol(prop));
+                }
+            }
+            var typeDeclaration = type.symbol.valueDeclaration;
+            if (typeDeclaration && ts.isClassLike(typeDeclaration)) {
+                for (var _b = 0, _c = typeDeclaration.members; _b < _c.length; _b++) {
+                    var member = _c[_b];
+                    // Only process instance properties with computed names here. Static properties cannot be in conflict with indexers,
+                    // and properties with literal names were already checked.
+                    if (!ts.isStatic(member) && !hasBindableName(member)) {
+                        var symbol = getSymbolOfNode(member);
+                        checkIndexConstraintForProperty(type, symbol, getTypeOfExpression(member.name.expression), getNonMissingTypeOfSymbol(symbol));
                     }
                 }
             }
-            var errorNode;
-            if (stringIndexType && numberIndexType) {
-                errorNode = declaredNumberIndexer || declaredStringIndexer;
-                // condition 'errorNode === undefined' may appear if types does not declare nor string neither number indexer
-                if (!errorNode && (ts.getObjectFlags(type) & 2 /* Interface */)) {
-                    var someBaseTypeHasBothIndexers = ts.forEach(getBaseTypes(type), function (base) { return getIndexTypeOfType(base, 0 /* String */) && getIndexTypeOfType(base, 1 /* Number */); });
-                    errorNode = someBaseTypeHasBothIndexers || !type.symbol.declarations ? undefined : type.symbol.declarations[0];
+            if (indexInfos.length > 1) {
+                for (var _d = 0, indexInfos_6 = indexInfos; _d < indexInfos_6.length; _d++) {
+                    var info = indexInfos_6[_d];
+                    checkIndexConstraintForIndexSignature(type, info);
                 }
             }
-            if (errorNode && !isTypeAssignableTo(numberIndexType, stringIndexType)) { // TODO: GH#18217
-                error(errorNode, ts.Diagnostics.Numeric_index_type_0_is_not_assignable_to_string_index_type_1, typeToString(numberIndexType), typeToString(stringIndexType));
+        }
+        function checkIndexConstraintForProperty(type, prop, propNameType, propType) {
+            var declaration = prop.valueDeclaration;
+            var name = ts.getNameOfDeclaration(declaration);
+            if (name && ts.isPrivateIdentifier(name)) {
+                return;
             }
-            function checkIndexConstraintForProperty(prop, propertyType, containingType, indexDeclaration, indexType, indexKind) {
-                // ESSymbol properties apply to neither string nor numeric indexers.
-                if (!indexType || ts.isKnownSymbol(prop)) {
-                    return;
+            var indexInfos = getApplicableIndexInfos(type, propNameType);
+            var interfaceDeclaration = ts.getObjectFlags(type) & 2 /* Interface */ ? ts.getDeclarationOfKind(type.symbol, 256 /* InterfaceDeclaration */) : undefined;
+            var localPropDeclaration = declaration && declaration.kind === 219 /* BinaryExpression */ ||
+                name && name.kind === 160 /* ComputedPropertyName */ || getParentOfSymbol(prop) === type.symbol ? declaration : undefined;
+            var _loop_27 = function (info) {
+                var localIndexDeclaration = info.declaration && getParentOfSymbol(getSymbolOfNode(info.declaration)) === type.symbol ? info.declaration : undefined;
+                // We check only when (a) the property is declared in the containing type, or (b) the applicable index signature is declared
+                // in the containing type, or (c) the containing type is an interface and no base interface contains both the property and
+                // the index signature (i.e. property and index signature are declared in separate inherited interfaces).
+                var errorNode = localPropDeclaration || localIndexDeclaration ||
+                    (interfaceDeclaration && !ts.some(getBaseTypes(type), function (base) { return !!getPropertyOfObjectType(base, prop.escapedName) && !!getIndexTypeOfType(base, info.keyType); }) ? interfaceDeclaration : undefined);
+                if (errorNode && !isTypeAssignableTo(propType, info.type)) {
+                    error(errorNode, ts.Diagnostics.Property_0_of_type_1_is_not_assignable_to_2_index_type_3, symbolToString(prop), typeToString(propType), typeToString(info.keyType), typeToString(info.type));
                 }
-                var propDeclaration = prop.valueDeclaration;
-                var name = propDeclaration && ts.getNameOfDeclaration(propDeclaration);
-                if (name && ts.isPrivateIdentifier(name)) {
-                    return;
+            };
+            for (var _i = 0, indexInfos_7 = indexInfos; _i < indexInfos_7.length; _i++) {
+                var info = indexInfos_7[_i];
+                _loop_27(info);
+            }
+        }
+        function checkIndexConstraintForIndexSignature(type, checkInfo) {
+            var declaration = checkInfo.declaration;
+            var indexInfos = getApplicableIndexInfos(type, checkInfo.keyType);
+            var interfaceDeclaration = ts.getObjectFlags(type) & 2 /* Interface */ ? ts.getDeclarationOfKind(type.symbol, 256 /* InterfaceDeclaration */) : undefined;
+            var localCheckDeclaration = declaration && getParentOfSymbol(getSymbolOfNode(declaration)) === type.symbol ? declaration : undefined;
+            var _loop_28 = function (info) {
+                if (info === checkInfo)
+                    return "continue";
+                var localIndexDeclaration = info.declaration && getParentOfSymbol(getSymbolOfNode(info.declaration)) === type.symbol ? info.declaration : undefined;
+                // We check only when (a) the check index signature is declared in the containing type, or (b) the applicable index
+                // signature is declared in the containing type, or (c) the containing type is an interface and no base interface contains
+                // both index signatures (i.e. the index signatures are declared in separate inherited interfaces).
+                var errorNode = localCheckDeclaration || localIndexDeclaration ||
+                    (interfaceDeclaration && !ts.some(getBaseTypes(type), function (base) { return !!getIndexInfoOfType(base, checkInfo.keyType) && !!getIndexTypeOfType(base, info.keyType); }) ? interfaceDeclaration : undefined);
+                if (errorNode && !isTypeAssignableTo(checkInfo.type, info.type)) {
+                    error(errorNode, ts.Diagnostics._0_index_type_1_is_not_assignable_to_2_index_type_3, typeToString(checkInfo.keyType), typeToString(checkInfo.type), typeToString(info.keyType), typeToString(info.type));
                 }
-                // index is numeric and property name is not valid numeric literal
-                if (indexKind === 1 /* Number */ && !(name ? isNumericName(name) : isNumericLiteralName(prop.escapedName))) {
-                    return;
-                }
-                // perform property check if property or indexer is declared in 'type'
-                // this allows us to rule out cases when both property and indexer are inherited from the base class
-                var errorNode;
-                if (propDeclaration && name &&
-                    (propDeclaration.kind === 217 /* BinaryExpression */ ||
-                        name.kind === 159 /* ComputedPropertyName */ ||
-                        prop.parent === containingType.symbol)) {
-                    errorNode = propDeclaration;
-                }
-                else if (indexDeclaration) {
-                    errorNode = indexDeclaration;
-                }
-                else if (ts.getObjectFlags(containingType) & 2 /* Interface */) {
-                    // for interfaces property and indexer might be inherited from different bases
-                    // check if any base class already has both property and indexer.
-                    // check should be performed only if 'type' is the first type that brings property\indexer together
-                    var someBaseClassHasBothPropertyAndIndexer = ts.forEach(getBaseTypes(containingType), function (base) { return getPropertyOfObjectType(base, prop.escapedName) && getIndexTypeOfType(base, indexKind); });
-                    errorNode = someBaseClassHasBothPropertyAndIndexer || !containingType.symbol.declarations ? undefined : containingType.symbol.declarations[0];
-                }
-                if (errorNode && !isTypeAssignableTo(propertyType, indexType)) {
-                    var errorMessage = indexKind === 0 /* String */
-                        ? ts.Diagnostics.Property_0_of_type_1_is_not_assignable_to_string_index_type_2
-                        : ts.Diagnostics.Property_0_of_type_1_is_not_assignable_to_numeric_index_type_2;
-                    error(errorNode, errorMessage, symbolToString(prop), typeToString(propertyType), typeToString(indexType));
-                }
+            };
+            for (var _i = 0, indexInfos_8 = indexInfos; _i < indexInfos_8.length; _i++) {
+                var info = indexInfos_8[_i];
+                _loop_28(info);
             }
         }
         function checkTypeNameIsReserved(name, message) {
@@ -78618,7 +80110,7 @@
         function checkTypeParametersNotReferenced(root, typeParameters, index) {
             visit(root);
             function visit(node) {
-                if (node.kind === 174 /* TypeReference */) {
+                if (node.kind === 176 /* TypeReference */) {
                     var type = getTypeFromTypeReference(node);
                     if (type.flags & 262144 /* TypeParameter */) {
                         for (var i = index; i < typeParameters.length; i++) {
@@ -78717,14 +80209,7 @@
         function checkClassLikeDeclaration(node) {
             checkGrammarClassLikeDeclaration(node);
             checkDecorators(node);
-            if (node.name) {
-                checkTypeNameIsReserved(node.name, ts.Diagnostics.Class_name_cannot_be_0);
-                checkCollisionWithRequireExportsInGeneratedCode(node, node.name);
-                checkCollisionWithGlobalPromiseInGeneratedCode(node, node.name);
-                if (!(node.flags & 8388608 /* Ambient */)) {
-                    checkClassNameCollisionWithObject(node.name);
-                }
-            }
+            checkCollisionsForDeclarationName(node, node.name);
             checkTypeParameters(ts.getEffectiveTypeParameterDeclarations(node));
             checkExportsOnMergedDeclarations(node);
             var symbol = getSymbolOfNode(node);
@@ -78826,7 +80311,7 @@
             }
             if (produceDiagnostics) {
                 checkIndexConstraints(type);
-                checkIndexConstraints(staticType, /*isStatic*/ true);
+                checkIndexConstraints(staticType, /*isStaticIndex*/ true);
                 checkTypeForDuplicateIndexSignatures(node);
                 checkPropertyInitialization(node);
             }
@@ -78837,7 +80322,7 @@
             var baseTypes = baseTypeNode && getBaseTypes(type);
             var baseWithThis = (baseTypes === null || baseTypes === void 0 ? void 0 : baseTypes.length) ? getTypeWithThisArgument(ts.first(baseTypes), type.thisType) : undefined;
             var baseStaticType = getBaseConstructorTypeOfClass(type);
-            var _loop_24 = function (member) {
+            var _loop_29 = function (member) {
                 if (ts.hasAmbientModifier(member)) {
                     return "continue";
                 }
@@ -78852,11 +80337,11 @@
             };
             for (var _i = 0, _a = node.members; _i < _a.length; _i++) {
                 var member = _a[_i];
-                _loop_24(member);
+                _loop_29(member);
             }
             function checkClassMember(member, memberIsParameterProperty) {
                 var hasOverride = ts.hasOverrideModifier(member);
-                var hasStatic = ts.hasStaticModifier(member);
+                var hasStatic = ts.isStatic(member);
                 if (baseWithThis && (hasOverride || compilerOptions.noImplicitOverride)) {
                     var declaredProp = member.name && getSymbolAtLocation(member.name) || getSymbolAtLocation(member);
                     if (!declaredProp) {
@@ -78868,10 +80353,13 @@
                     var baseProp = getPropertyOfType(baseType, declaredProp.escapedName);
                     var baseClassName = typeToString(baseWithThis);
                     if (prop && !baseProp && hasOverride) {
-                        error(member, ts.Diagnostics.This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0, baseClassName);
+                        var suggestion = getSuggestedSymbolForNonexistentClassMember(ts.symbolName(declaredProp), baseType);
+                        suggestion ?
+                            error(member, ts.Diagnostics.This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0_Did_you_mean_1, baseClassName, symbolToString(suggestion)) :
+                            error(member, ts.Diagnostics.This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0, baseClassName);
                     }
-                    else if (prop && (baseProp === null || baseProp === void 0 ? void 0 : baseProp.valueDeclaration) && compilerOptions.noImplicitOverride && !nodeInAmbientContext) {
-                        var baseHasAbstract = ts.hasAbstractModifier(baseProp.valueDeclaration);
+                    else if (prop && (baseProp === null || baseProp === void 0 ? void 0 : baseProp.declarations) && compilerOptions.noImplicitOverride && !nodeInAmbientContext) {
+                        var baseHasAbstract = ts.some(baseProp.declarations, function (d) { return ts.hasAbstractModifier(d); });
                         if (hasOverride) {
                             return;
                         }
@@ -78895,8 +80383,8 @@
         function issueMemberSpecificError(node, typeWithThis, baseWithThis, broadDiag) {
             // iterate over all implemented properties and issue errors on each one which isn't compatible, rather than the class as a whole, if possible
             var issuedMemberError = false;
-            var _loop_25 = function (member) {
-                if (ts.hasStaticModifier(member)) {
+            var _loop_30 = function (member) {
+                if (ts.isStatic(member)) {
                     return "continue";
                 }
                 var declaredProp = member.name && getSymbolAtLocation(member.name) || getSymbolAtLocation(member);
@@ -78914,7 +80402,7 @@
             };
             for (var _i = 0, _a = node.members; _i < _a.length; _i++) {
                 var member = _a[_i];
-                _loop_25(member);
+                _loop_30(member);
             }
             if (!issuedMemberError) {
                 // check again with diagnostics to generate a less-specific error
@@ -78940,7 +80428,7 @@
         }
         function getClassOrInterfaceDeclarationsOfSymbol(symbol) {
             return ts.filter(symbol.declarations, function (d) {
-                return d.kind === 253 /* ClassDeclaration */ || d.kind === 254 /* InterfaceDeclaration */;
+                return d.kind === 255 /* ClassDeclaration */ || d.kind === 256 /* InterfaceDeclaration */;
             });
         }
         function checkKindsOfPropertyMemberOverrides(type, baseType) {
@@ -78996,7 +80484,7 @@
                                 continue basePropertyCheck;
                             }
                         }
-                        if (derivedClassDecl.kind === 222 /* ClassExpression */) {
+                        if (derivedClassDecl.kind === 224 /* ClassExpression */) {
                             error(derivedClassDecl, ts.Diagnostics.Non_abstract_class_expression_does_not_implement_inherited_abstract_member_0_from_class_1, symbolToString(baseProperty), typeToString(baseType));
                         }
                         else {
@@ -79017,7 +80505,7 @@
                     if (basePropertyFlags && derivedPropertyFlags) {
                         // property/accessor is overridden with property/accessor
                         if (baseDeclarationFlags & 128 /* Abstract */ && !(base.valueDeclaration && ts.isPropertyDeclaration(base.valueDeclaration) && base.valueDeclaration.initializer)
-                            || base.valueDeclaration && base.valueDeclaration.parent.kind === 254 /* InterfaceDeclaration */
+                            || base.valueDeclaration && base.valueDeclaration.parent.kind === 256 /* InterfaceDeclaration */
                             || derived.valueDeclaration && ts.isBinaryExpression(derived.valueDeclaration)) {
                             // when the base property is abstract or from an interface, base/derived flags don't need to match
                             // same when the derived property is from an assignment
@@ -79032,7 +80520,7 @@
                             error(ts.getNameOfDeclaration(derived.valueDeclaration) || derived.valueDeclaration, errorMessage_1, symbolToString(base), typeToString(baseType), typeToString(type));
                         }
                         else if (useDefineForClassFields) {
-                            var uninitialized = (_a = derived.declarations) === null || _a === void 0 ? void 0 : _a.find(function (d) { return d.kind === 164 /* PropertyDeclaration */ && !d.initializer; });
+                            var uninitialized = (_a = derived.declarations) === null || _a === void 0 ? void 0 : _a.find(function (d) { return d.kind === 165 /* PropertyDeclaration */ && !d.initializer; });
                             if (uninitialized
                                 && !(derived.flags & 33554432 /* Transient */)
                                 && !(baseDeclarationFlags & 128 /* Abstract */)
@@ -79134,7 +80622,7 @@
                 if (ts.getEffectiveModifierFlags(member) & 2 /* Ambient */) {
                     continue;
                 }
-                if (isInstancePropertyWithoutInitializer(member)) {
+                if (!ts.isStatic(member) && isPropertyWithoutInitializer(member)) {
                     var propName = member.name;
                     if (ts.isIdentifier(propName) || ts.isPrivateIdentifier(propName)) {
                         var type = getTypeOfSymbol(getSymbolOfNode(member));
@@ -79147,12 +80635,29 @@
                 }
             }
         }
-        function isInstancePropertyWithoutInitializer(node) {
-            return node.kind === 164 /* PropertyDeclaration */ &&
-                !ts.hasSyntacticModifier(node, 32 /* Static */ | 128 /* Abstract */) &&
+        function isPropertyWithoutInitializer(node) {
+            return node.kind === 165 /* PropertyDeclaration */ &&
+                !ts.hasAbstractModifier(node) &&
                 !node.exclamationToken &&
                 !node.initializer;
         }
+        function isPropertyInitializedInStaticBlocks(propName, propType, staticBlocks, startPos, endPos) {
+            for (var _i = 0, staticBlocks_2 = staticBlocks; _i < staticBlocks_2.length; _i++) {
+                var staticBlock = staticBlocks_2[_i];
+                // static block must be within the provided range as they are evaluated in document order (unlike constructors)
+                if (staticBlock.pos >= startPos && staticBlock.pos <= endPos) {
+                    var reference = ts.factory.createPropertyAccessExpression(ts.factory.createThis(), propName);
+                    ts.setParent(reference.expression, reference);
+                    ts.setParent(reference, staticBlock);
+                    reference.flowNode = staticBlock.returnFlowNode;
+                    var flowType = getFlowTypeOfReference(reference, propType, getOptionalType(propType));
+                    if (!(getFalsyFlags(flowType) & 32768 /* Undefined */)) {
+                        return true;
+                    }
+                }
+            }
+            return false;
+        }
         function isPropertyInitializedInConstructor(propName, propType, constructor) {
             var reference = ts.factory.createPropertyAccessExpression(ts.factory.createThis(), propName);
             ts.setParent(reference.expression, reference);
@@ -79172,7 +80677,7 @@
                 var symbol = getSymbolOfNode(node);
                 checkTypeParameterListsIdentical(symbol);
                 // Only check this symbol once
-                var firstInterfaceDecl = ts.getDeclarationOfKind(symbol, 254 /* InterfaceDeclaration */);
+                var firstInterfaceDecl = ts.getDeclarationOfKind(symbol, 256 /* InterfaceDeclaration */);
                 if (node === firstInterfaceDecl) {
                     var type = getDeclaredTypeOfSymbol(symbol);
                     var typeWithThis = getTypeWithThisArgument(type);
@@ -79205,7 +80710,7 @@
             checkTypeNameIsReserved(node.name, ts.Diagnostics.Type_alias_name_cannot_be_0);
             checkExportsOnMergedDeclarations(node);
             checkTypeParameters(node.typeParameters);
-            if (node.type.kind === 136 /* IntrinsicKeyword */) {
+            if (node.type.kind === 137 /* IntrinsicKeyword */) {
                 if (!intrinsicTypeKinds.has(node.name.escapedText) || ts.length(node.typeParameters) !== 1) {
                     error(node.type, ts.Diagnostics.The_intrinsic_keyword_can_only_be_used_to_declare_compiler_provided_intrinsic_types);
                 }
@@ -79234,7 +80739,7 @@
             }
             else {
                 var text = ts.getTextOfPropertyName(member.name);
-                if (isNumericLiteralName(text) && !isInfinityOrNaNString(text)) {
+                if (isNumericLiteralName(text) && !ts.isInfinityOrNaNString(text)) {
                     error(member.name, ts.Diagnostics.An_enum_member_cannot_have_a_numeric_name);
                 }
             }
@@ -79291,7 +80796,7 @@
             return value;
             function evaluate(expr) {
                 switch (expr.kind) {
-                    case 215 /* PrefixUnaryExpression */:
+                    case 217 /* PrefixUnaryExpression */:
                         var value_2 = evaluate(expr.operand);
                         if (typeof value_2 === "number") {
                             switch (expr.operator) {
@@ -79301,7 +80806,7 @@
                             }
                         }
                         break;
-                    case 217 /* BinaryExpression */:
+                    case 219 /* BinaryExpression */:
                         var left = evaluate(expr.left);
                         var right = evaluate(expr.right);
                         if (typeof left === "number" && typeof right === "number") {
@@ -79330,22 +80835,22 @@
                     case 8 /* NumericLiteral */:
                         checkGrammarNumericLiteral(expr);
                         return +expr.text;
-                    case 208 /* ParenthesizedExpression */:
+                    case 210 /* ParenthesizedExpression */:
                         return evaluate(expr.expression);
-                    case 78 /* Identifier */:
+                    case 79 /* Identifier */:
                         var identifier = expr;
-                        if (isInfinityOrNaNString(identifier.escapedText)) {
+                        if (ts.isInfinityOrNaNString(identifier.escapedText)) {
                             return +(identifier.escapedText);
                         }
                         return ts.nodeIsMissing(expr) ? 0 : evaluateEnumMember(expr, getSymbolOfNode(member.parent), identifier.escapedText);
-                    case 203 /* ElementAccessExpression */:
-                    case 202 /* PropertyAccessExpression */:
+                    case 205 /* ElementAccessExpression */:
+                    case 204 /* PropertyAccessExpression */:
                         var ex = expr;
                         if (isConstantMemberAccess(ex)) {
                             var type = getTypeOfExpression(ex.expression);
                             if (type.symbol && type.symbol.flags & 384 /* Enum */) {
                                 var name = void 0;
-                                if (ex.kind === 202 /* PropertyAccessExpression */) {
+                                if (ex.kind === 204 /* PropertyAccessExpression */) {
                                     name = ex.name.escapedText;
                                 }
                                 else {
@@ -79377,9 +80882,9 @@
             }
         }
         function isConstantMemberAccess(node) {
-            return node.kind === 78 /* Identifier */ ||
-                node.kind === 202 /* PropertyAccessExpression */ && isConstantMemberAccess(node.expression) ||
-                node.kind === 203 /* ElementAccessExpression */ && isConstantMemberAccess(node.expression) &&
+            return node.kind === 79 /* Identifier */ ||
+                node.kind === 204 /* PropertyAccessExpression */ && isConstantMemberAccess(node.expression) ||
+                node.kind === 205 /* ElementAccessExpression */ && isConstantMemberAccess(node.expression) &&
                     ts.isStringLiteralLike(node.argumentExpression);
         }
         function checkEnumDeclaration(node) {
@@ -79388,9 +80893,7 @@
             }
             // Grammar checking
             checkGrammarDecoratorsAndModifiers(node);
-            checkTypeNameIsReserved(node.name, ts.Diagnostics.Enum_name_cannot_be_0);
-            checkCollisionWithRequireExportsInGeneratedCode(node, node.name);
-            checkCollisionWithGlobalPromiseInGeneratedCode(node, node.name);
+            checkCollisionsForDeclarationName(node, node.name);
             checkExportsOnMergedDeclarations(node);
             node.members.forEach(checkEnumMember);
             computeEnumMemberValues(node);
@@ -79415,7 +80918,7 @@
                 var seenEnumMissingInitialInitializer_1 = false;
                 ts.forEach(enumSymbol.declarations, function (declaration) {
                     // return true if we hit a violation of the rule, false otherwise
-                    if (declaration.kind !== 256 /* EnumDeclaration */) {
+                    if (declaration.kind !== 258 /* EnumDeclaration */) {
                         return false;
                     }
                     var enumDeclaration = declaration;
@@ -79444,8 +80947,8 @@
             if (declarations) {
                 for (var _i = 0, declarations_8 = declarations; _i < declarations_8.length; _i++) {
                     var declaration = declarations_8[_i];
-                    if ((declaration.kind === 253 /* ClassDeclaration */ ||
-                        (declaration.kind === 252 /* FunctionDeclaration */ && ts.nodeIsPresent(declaration.body))) &&
+                    if ((declaration.kind === 255 /* ClassDeclaration */ ||
+                        (declaration.kind === 254 /* FunctionDeclaration */ && ts.nodeIsPresent(declaration.body))) &&
                         !(declaration.flags & 8388608 /* Ambient */)) {
                         return declaration;
                     }
@@ -79488,8 +80991,7 @@
                     }
                 }
                 if (ts.isIdentifier(node.name)) {
-                    checkCollisionWithRequireExportsInGeneratedCode(node, node.name);
-                    checkCollisionWithGlobalPromiseInGeneratedCode(node, node.name);
+                    checkCollisionsForDeclarationName(node, node.name);
                 }
                 checkExportsOnMergedDeclarations(node);
                 var symbol = getSymbolOfNode(node);
@@ -79510,7 +81012,7 @@
                     }
                     // if the module merges with a class declaration in the same lexical scope,
                     // we need to track this to ensure the correct emit.
-                    var mergedClass = ts.getDeclarationOfKind(symbol, 253 /* ClassDeclaration */);
+                    var mergedClass = ts.getDeclarationOfKind(symbol, 255 /* ClassDeclaration */);
                     if (mergedClass &&
                         inSameLexicalScope(node, mergedClass)) {
                         getNodeLinks(node).flags |= 32768 /* LexicalModuleMergesWithClass */;
@@ -79561,23 +81063,23 @@
         function checkModuleAugmentationElement(node, isGlobalAugmentation) {
             var _a;
             switch (node.kind) {
-                case 233 /* VariableStatement */:
+                case 235 /* VariableStatement */:
                     // error each individual name in variable statement instead of marking the entire variable statement
                     for (var _i = 0, _b = node.declarationList.declarations; _i < _b.length; _i++) {
                         var decl = _b[_i];
                         checkModuleAugmentationElement(decl, isGlobalAugmentation);
                     }
                     break;
-                case 267 /* ExportAssignment */:
-                case 268 /* ExportDeclaration */:
+                case 269 /* ExportAssignment */:
+                case 270 /* ExportDeclaration */:
                     grammarErrorOnFirstToken(node, ts.Diagnostics.Exports_and_export_assignments_are_not_permitted_in_module_augmentations);
                     break;
-                case 261 /* ImportEqualsDeclaration */:
-                case 262 /* ImportDeclaration */:
+                case 263 /* ImportEqualsDeclaration */:
+                case 264 /* ImportDeclaration */:
                     grammarErrorOnFirstToken(node, ts.Diagnostics.Imports_are_not_permitted_in_module_augmentations_Consider_moving_them_to_the_enclosing_external_module);
                     break;
-                case 199 /* BindingElement */:
-                case 250 /* VariableDeclaration */:
+                case 201 /* BindingElement */:
+                case 252 /* VariableDeclaration */:
                     var name = node.name;
                     if (ts.isBindingPattern(name)) {
                         for (var _c = 0, _d = name.elements; _c < _d.length; _c++) {
@@ -79588,12 +81090,12 @@
                         break;
                     }
                 // falls through
-                case 253 /* ClassDeclaration */:
-                case 256 /* EnumDeclaration */:
-                case 252 /* FunctionDeclaration */:
-                case 254 /* InterfaceDeclaration */:
-                case 257 /* ModuleDeclaration */:
-                case 255 /* TypeAliasDeclaration */:
+                case 255 /* ClassDeclaration */:
+                case 258 /* EnumDeclaration */:
+                case 254 /* FunctionDeclaration */:
+                case 256 /* InterfaceDeclaration */:
+                case 259 /* ModuleDeclaration */:
+                case 257 /* TypeAliasDeclaration */:
                     if (isGlobalAugmentation) {
                         return;
                     }
@@ -79614,20 +81116,20 @@
         }
         function getFirstNonModuleExportsIdentifier(node) {
             switch (node.kind) {
-                case 78 /* Identifier */:
+                case 79 /* Identifier */:
                     return node;
-                case 158 /* QualifiedName */:
+                case 159 /* QualifiedName */:
                     do {
                         node = node.left;
-                    } while (node.kind !== 78 /* Identifier */);
+                    } while (node.kind !== 79 /* Identifier */);
                     return node;
-                case 202 /* PropertyAccessExpression */:
+                case 204 /* PropertyAccessExpression */:
                     do {
                         if (ts.isModuleExportsAccessExpression(node.expression) && !ts.isPrivateIdentifier(node.name)) {
                             return node.name;
                         }
                         node = node.expression;
-                    } while (node.kind !== 78 /* Identifier */);
+                    } while (node.kind !== 79 /* Identifier */);
                     return node;
             }
         }
@@ -79641,9 +81143,9 @@
                 error(moduleName, ts.Diagnostics.String_literal_expected);
                 return false;
             }
-            var inAmbientExternalModule = node.parent.kind === 258 /* ModuleBlock */ && ts.isAmbientModule(node.parent.parent);
-            if (node.parent.kind !== 298 /* SourceFile */ && !inAmbientExternalModule) {
-                error(moduleName, node.kind === 268 /* ExportDeclaration */ ?
+            var inAmbientExternalModule = node.parent.kind === 260 /* ModuleBlock */ && ts.isAmbientModule(node.parent.parent);
+            if (node.parent.kind !== 300 /* SourceFile */ && !inAmbientExternalModule) {
+                error(moduleName, node.kind === 270 /* ExportDeclaration */ ?
                     ts.Diagnostics.Export_declarations_are_not_permitted_in_a_namespace :
                     ts.Diagnostics.Import_declarations_in_a_namespace_cannot_reference_a_module);
                 return false;
@@ -79678,14 +81180,14 @@
                     (symbol.flags & 788968 /* Type */ ? 788968 /* Type */ : 0) |
                     (symbol.flags & 1920 /* Namespace */ ? 1920 /* Namespace */ : 0);
                 if (target.flags & excludedMeanings) {
-                    var message = node.kind === 271 /* ExportSpecifier */ ?
+                    var message = node.kind === 273 /* ExportSpecifier */ ?
                         ts.Diagnostics.Export_declaration_conflicts_with_exported_declaration_of_0 :
                         ts.Diagnostics.Import_declaration_conflicts_with_local_declaration_of_0;
                     error(node, message, symbolToString(symbol));
                 }
                 // Don't allow to re-export something with no value side when `--isolatedModules` is set.
                 if (compilerOptions.isolatedModules
-                    && node.kind === 271 /* ExportSpecifier */
+                    && node.kind === 273 /* ExportSpecifier */
                     && !node.parent.parent.isTypeOnly
                     && !(target.flags & 111551 /* Value */)
                     && !(node.flags & 8388608 /* Ambient */)) {
@@ -79697,10 +81199,9 @@
             }
         }
         function checkImportBinding(node) {
-            checkCollisionWithRequireExportsInGeneratedCode(node, node.name);
-            checkCollisionWithGlobalPromiseInGeneratedCode(node, node.name);
+            checkCollisionsForDeclarationName(node, node.name);
             checkAliasSymbol(node);
-            if (node.kind === 266 /* ImportSpecifier */ &&
+            if (node.kind === 268 /* ImportSpecifier */ &&
                 ts.idText(node.propertyName || node.name) === "default" &&
                 compilerOptions.esModuleInterop &&
                 moduleKind !== ts.ModuleKind.System && moduleKind < ts.ModuleKind.ES2015) {
@@ -79722,7 +81223,7 @@
                         checkImportBinding(importClause);
                     }
                     if (importClause.namedBindings) {
-                        if (importClause.namedBindings.kind === 264 /* NamespaceImport */) {
+                        if (importClause.namedBindings.kind === 266 /* NamespaceImport */) {
                             checkImportBinding(importClause.namedBindings);
                             if (moduleKind !== ts.ModuleKind.System && moduleKind < ts.ModuleKind.ES2015 && compilerOptions.esModuleInterop) {
                                 // import * as ns from "foo";
@@ -79750,7 +81251,7 @@
                 if (ts.hasSyntacticModifier(node, 1 /* Export */)) {
                     markExportAsReferenced(node);
                 }
-                if (node.moduleReference.kind !== 273 /* ExternalModuleReference */) {
+                if (node.moduleReference.kind !== 275 /* ExternalModuleReference */) {
                     var target = resolveAlias(getSymbolOfNode(node));
                     if (target !== unknownSymbol) {
                         if (target.flags & 111551 /* Value */) {
@@ -79793,10 +81294,10 @@
                     // export { x, y }
                     // export { x, y } from "foo"
                     ts.forEach(node.exportClause.elements, checkExportSpecifier);
-                    var inAmbientExternalModule = node.parent.kind === 258 /* ModuleBlock */ && ts.isAmbientModule(node.parent.parent);
-                    var inAmbientNamespaceDeclaration = !inAmbientExternalModule && node.parent.kind === 258 /* ModuleBlock */ &&
+                    var inAmbientExternalModule = node.parent.kind === 260 /* ModuleBlock */ && ts.isAmbientModule(node.parent.parent);
+                    var inAmbientNamespaceDeclaration = !inAmbientExternalModule && node.parent.kind === 260 /* ModuleBlock */ &&
                         !node.moduleSpecifier && node.flags & 8388608 /* Ambient */;
-                    if (node.parent.kind !== 298 /* SourceFile */ && !inAmbientExternalModule && !inAmbientNamespaceDeclaration) {
+                    if (node.parent.kind !== 300 /* SourceFile */ && !inAmbientExternalModule && !inAmbientNamespaceDeclaration) {
                         error(node, ts.Diagnostics.Export_declarations_are_not_permitted_in_a_namespace);
                     }
                 }
@@ -79829,14 +81330,14 @@
         }
         function checkGrammarExportDeclaration(node) {
             var _a;
-            var isTypeOnlyExportStar = node.isTypeOnly && ((_a = node.exportClause) === null || _a === void 0 ? void 0 : _a.kind) !== 269 /* NamedExports */;
+            var isTypeOnlyExportStar = node.isTypeOnly && ((_a = node.exportClause) === null || _a === void 0 ? void 0 : _a.kind) !== 271 /* NamedExports */;
             if (isTypeOnlyExportStar) {
                 grammarErrorOnNode(node, ts.Diagnostics.Only_named_exports_may_use_export_type);
             }
             return !isTypeOnlyExportStar;
         }
         function checkGrammarModuleElementContext(node, errorMessage) {
-            var isInAppropriateContext = node.parent.kind === 298 /* SourceFile */ || node.parent.kind === 258 /* ModuleBlock */ || node.parent.kind === 257 /* ModuleDeclaration */;
+            var isInAppropriateContext = node.parent.kind === 300 /* SourceFile */ || node.parent.kind === 260 /* ModuleBlock */ || node.parent.kind === 259 /* ModuleDeclaration */;
             if (!isInAppropriateContext) {
                 grammarErrorOnFirstToken(node, errorMessage);
             }
@@ -79914,8 +81415,8 @@
                 // If we hit an export assignment in an illegal context, just bail out to avoid cascading errors.
                 return;
             }
-            var container = node.parent.kind === 298 /* SourceFile */ ? node.parent : node.parent.parent;
-            if (container.kind === 257 /* ModuleDeclaration */ && !ts.isAmbientModule(container)) {
+            var container = node.parent.kind === 300 /* SourceFile */ ? node.parent : node.parent.parent;
+            if (container.kind === 259 /* ModuleDeclaration */ && !ts.isAmbientModule(container)) {
                 if (node.isExportEquals) {
                     error(node, ts.Diagnostics.An_export_assignment_cannot_be_used_in_a_namespace);
                 }
@@ -79928,7 +81429,7 @@
             if (!checkGrammarDecoratorsAndModifiers(node) && ts.hasEffectiveModifiers(node)) {
                 grammarErrorOnFirstToken(node, ts.Diagnostics.An_export_assignment_cannot_have_modifiers);
             }
-            if (node.expression.kind === 78 /* Identifier */) {
+            if (node.expression.kind === 79 /* Identifier */) {
                 var id = node.expression;
                 var sym = resolveEntityName(id, 67108863 /* All */, /*ignoreErrors*/ true, /*dontResolveAlias*/ true, node);
                 if (sym) {
@@ -80039,171 +81540,173 @@
                 // Only bother checking on a few construct kinds.  We don't want to be excessively
                 // hitting the cancellation token on every node we check.
                 switch (kind) {
-                    case 257 /* ModuleDeclaration */:
-                    case 253 /* ClassDeclaration */:
-                    case 254 /* InterfaceDeclaration */:
-                    case 252 /* FunctionDeclaration */:
+                    case 259 /* ModuleDeclaration */:
+                    case 255 /* ClassDeclaration */:
+                    case 256 /* InterfaceDeclaration */:
+                    case 254 /* FunctionDeclaration */:
                         cancellationToken.throwIfCancellationRequested();
                 }
             }
-            if (kind >= 233 /* FirstStatement */ && kind <= 249 /* LastStatement */ && node.flowNode && !isReachableFlowNode(node.flowNode)) {
+            if (kind >= 235 /* FirstStatement */ && kind <= 251 /* LastStatement */ && node.flowNode && !isReachableFlowNode(node.flowNode)) {
                 errorOrSuggestion(compilerOptions.allowUnreachableCode === false, node, ts.Diagnostics.Unreachable_code_detected);
             }
             switch (kind) {
-                case 160 /* TypeParameter */:
+                case 161 /* TypeParameter */:
                     return checkTypeParameter(node);
-                case 161 /* Parameter */:
+                case 162 /* Parameter */:
                     return checkParameter(node);
-                case 164 /* PropertyDeclaration */:
+                case 165 /* PropertyDeclaration */:
                     return checkPropertyDeclaration(node);
-                case 163 /* PropertySignature */:
+                case 164 /* PropertySignature */:
                     return checkPropertySignature(node);
-                case 176 /* ConstructorType */:
-                case 175 /* FunctionType */:
-                case 170 /* CallSignature */:
-                case 171 /* ConstructSignature */:
-                case 172 /* IndexSignature */:
+                case 178 /* ConstructorType */:
+                case 177 /* FunctionType */:
+                case 172 /* CallSignature */:
+                case 173 /* ConstructSignature */:
+                case 174 /* IndexSignature */:
                     return checkSignatureDeclaration(node);
-                case 166 /* MethodDeclaration */:
-                case 165 /* MethodSignature */:
+                case 167 /* MethodDeclaration */:
+                case 166 /* MethodSignature */:
                     return checkMethodDeclaration(node);
-                case 167 /* Constructor */:
+                case 168 /* ClassStaticBlockDeclaration */:
+                    return checkClassStaticBlockDeclaration(node);
+                case 169 /* Constructor */:
                     return checkConstructorDeclaration(node);
-                case 168 /* GetAccessor */:
-                case 169 /* SetAccessor */:
+                case 170 /* GetAccessor */:
+                case 171 /* SetAccessor */:
                     return checkAccessorDeclaration(node);
-                case 174 /* TypeReference */:
+                case 176 /* TypeReference */:
                     return checkTypeReferenceNode(node);
-                case 173 /* TypePredicate */:
+                case 175 /* TypePredicate */:
                     return checkTypePredicate(node);
-                case 177 /* TypeQuery */:
+                case 179 /* TypeQuery */:
                     return checkTypeQuery(node);
-                case 178 /* TypeLiteral */:
+                case 180 /* TypeLiteral */:
                     return checkTypeLiteral(node);
-                case 179 /* ArrayType */:
+                case 181 /* ArrayType */:
                     return checkArrayType(node);
-                case 180 /* TupleType */:
+                case 182 /* TupleType */:
                     return checkTupleType(node);
-                case 183 /* UnionType */:
-                case 184 /* IntersectionType */:
+                case 185 /* UnionType */:
+                case 186 /* IntersectionType */:
                     return checkUnionOrIntersectionType(node);
-                case 187 /* ParenthesizedType */:
-                case 181 /* OptionalType */:
-                case 182 /* RestType */:
+                case 189 /* ParenthesizedType */:
+                case 183 /* OptionalType */:
+                case 184 /* RestType */:
                     return checkSourceElement(node.type);
-                case 188 /* ThisType */:
+                case 190 /* ThisType */:
                     return checkThisType(node);
-                case 189 /* TypeOperator */:
+                case 191 /* TypeOperator */:
                     return checkTypeOperator(node);
-                case 185 /* ConditionalType */:
+                case 187 /* ConditionalType */:
                     return checkConditionalType(node);
-                case 186 /* InferType */:
+                case 188 /* InferType */:
                     return checkInferType(node);
-                case 194 /* TemplateLiteralType */:
+                case 196 /* TemplateLiteralType */:
                     return checkTemplateLiteralType(node);
-                case 196 /* ImportType */:
+                case 198 /* ImportType */:
                     return checkImportType(node);
-                case 193 /* NamedTupleMember */:
+                case 195 /* NamedTupleMember */:
                     return checkNamedTupleMember(node);
-                case 318 /* JSDocAugmentsTag */:
+                case 323 /* JSDocAugmentsTag */:
                     return checkJSDocAugmentsTag(node);
-                case 319 /* JSDocImplementsTag */:
+                case 324 /* JSDocImplementsTag */:
                     return checkJSDocImplementsTag(node);
-                case 335 /* JSDocTypedefTag */:
-                case 328 /* JSDocCallbackTag */:
-                case 329 /* JSDocEnumTag */:
+                case 340 /* JSDocTypedefTag */:
+                case 333 /* JSDocCallbackTag */:
+                case 334 /* JSDocEnumTag */:
                     return checkJSDocTypeAliasTag(node);
-                case 334 /* JSDocTemplateTag */:
+                case 339 /* JSDocTemplateTag */:
                     return checkJSDocTemplateTag(node);
-                case 333 /* JSDocTypeTag */:
+                case 338 /* JSDocTypeTag */:
                     return checkJSDocTypeTag(node);
-                case 330 /* JSDocParameterTag */:
+                case 335 /* JSDocParameterTag */:
                     return checkJSDocParameterTag(node);
-                case 337 /* JSDocPropertyTag */:
+                case 342 /* JSDocPropertyTag */:
                     return checkJSDocPropertyTag(node);
-                case 309 /* JSDocFunctionType */:
+                case 312 /* JSDocFunctionType */:
                     checkJSDocFunctionType(node);
                 // falls through
-                case 307 /* JSDocNonNullableType */:
-                case 306 /* JSDocNullableType */:
-                case 304 /* JSDocAllType */:
-                case 305 /* JSDocUnknownType */:
-                case 314 /* JSDocTypeLiteral */:
+                case 310 /* JSDocNonNullableType */:
+                case 309 /* JSDocNullableType */:
+                case 307 /* JSDocAllType */:
+                case 308 /* JSDocUnknownType */:
+                case 317 /* JSDocTypeLiteral */:
                     checkJSDocTypeIsInJsFile(node);
                     ts.forEachChild(node, checkSourceElement);
                     return;
-                case 310 /* JSDocVariadicType */:
+                case 313 /* JSDocVariadicType */:
                     checkJSDocVariadicType(node);
                     return;
-                case 302 /* JSDocTypeExpression */:
+                case 304 /* JSDocTypeExpression */:
                     return checkSourceElement(node.type);
-                case 190 /* IndexedAccessType */:
+                case 192 /* IndexedAccessType */:
                     return checkIndexedAccessType(node);
-                case 191 /* MappedType */:
+                case 193 /* MappedType */:
                     return checkMappedType(node);
-                case 252 /* FunctionDeclaration */:
+                case 254 /* FunctionDeclaration */:
                     return checkFunctionDeclaration(node);
-                case 231 /* Block */:
-                case 258 /* ModuleBlock */:
+                case 233 /* Block */:
+                case 260 /* ModuleBlock */:
                     return checkBlock(node);
-                case 233 /* VariableStatement */:
+                case 235 /* VariableStatement */:
                     return checkVariableStatement(node);
-                case 234 /* ExpressionStatement */:
+                case 236 /* ExpressionStatement */:
                     return checkExpressionStatement(node);
-                case 235 /* IfStatement */:
+                case 237 /* IfStatement */:
                     return checkIfStatement(node);
-                case 236 /* DoStatement */:
+                case 238 /* DoStatement */:
                     return checkDoStatement(node);
-                case 237 /* WhileStatement */:
+                case 239 /* WhileStatement */:
                     return checkWhileStatement(node);
-                case 238 /* ForStatement */:
+                case 240 /* ForStatement */:
                     return checkForStatement(node);
-                case 239 /* ForInStatement */:
+                case 241 /* ForInStatement */:
                     return checkForInStatement(node);
-                case 240 /* ForOfStatement */:
+                case 242 /* ForOfStatement */:
                     return checkForOfStatement(node);
-                case 241 /* ContinueStatement */:
-                case 242 /* BreakStatement */:
+                case 243 /* ContinueStatement */:
+                case 244 /* BreakStatement */:
                     return checkBreakOrContinueStatement(node);
-                case 243 /* ReturnStatement */:
+                case 245 /* ReturnStatement */:
                     return checkReturnStatement(node);
-                case 244 /* WithStatement */:
+                case 246 /* WithStatement */:
                     return checkWithStatement(node);
-                case 245 /* SwitchStatement */:
+                case 247 /* SwitchStatement */:
                     return checkSwitchStatement(node);
-                case 246 /* LabeledStatement */:
+                case 248 /* LabeledStatement */:
                     return checkLabeledStatement(node);
-                case 247 /* ThrowStatement */:
+                case 249 /* ThrowStatement */:
                     return checkThrowStatement(node);
-                case 248 /* TryStatement */:
+                case 250 /* TryStatement */:
                     return checkTryStatement(node);
-                case 250 /* VariableDeclaration */:
+                case 252 /* VariableDeclaration */:
                     return checkVariableDeclaration(node);
-                case 199 /* BindingElement */:
+                case 201 /* BindingElement */:
                     return checkBindingElement(node);
-                case 253 /* ClassDeclaration */:
+                case 255 /* ClassDeclaration */:
                     return checkClassDeclaration(node);
-                case 254 /* InterfaceDeclaration */:
+                case 256 /* InterfaceDeclaration */:
                     return checkInterfaceDeclaration(node);
-                case 255 /* TypeAliasDeclaration */:
+                case 257 /* TypeAliasDeclaration */:
                     return checkTypeAliasDeclaration(node);
-                case 256 /* EnumDeclaration */:
+                case 258 /* EnumDeclaration */:
                     return checkEnumDeclaration(node);
-                case 257 /* ModuleDeclaration */:
+                case 259 /* ModuleDeclaration */:
                     return checkModuleDeclaration(node);
-                case 262 /* ImportDeclaration */:
+                case 264 /* ImportDeclaration */:
                     return checkImportDeclaration(node);
-                case 261 /* ImportEqualsDeclaration */:
+                case 263 /* ImportEqualsDeclaration */:
                     return checkImportEqualsDeclaration(node);
-                case 268 /* ExportDeclaration */:
+                case 270 /* ExportDeclaration */:
                     return checkExportDeclaration(node);
-                case 267 /* ExportAssignment */:
+                case 269 /* ExportAssignment */:
                     return checkExportAssignment(node);
-                case 232 /* EmptyStatement */:
-                case 249 /* DebuggerStatement */:
+                case 234 /* EmptyStatement */:
+                case 251 /* DebuggerStatement */:
                     checkGrammarStatementInAmbientContext(node);
                     return;
-                case 272 /* MissingDeclaration */:
+                case 274 /* MissingDeclaration */:
                     return checkMissingDeclaration(node);
             }
         }
@@ -80302,33 +81805,33 @@
             currentNode = node;
             instantiationCount = 0;
             switch (node.kind) {
-                case 204 /* CallExpression */:
-                case 205 /* NewExpression */:
-                case 206 /* TaggedTemplateExpression */:
-                case 162 /* Decorator */:
-                case 276 /* JsxOpeningElement */:
+                case 206 /* CallExpression */:
+                case 207 /* NewExpression */:
+                case 208 /* TaggedTemplateExpression */:
+                case 163 /* Decorator */:
+                case 278 /* JsxOpeningElement */:
                     // These node kinds are deferred checked when overload resolution fails
                     // To save on work, we ensure the arguments are checked just once, in
                     // a deferred way
                     resolveUntypedCall(node);
                     break;
-                case 209 /* FunctionExpression */:
-                case 210 /* ArrowFunction */:
-                case 166 /* MethodDeclaration */:
-                case 165 /* MethodSignature */:
+                case 211 /* FunctionExpression */:
+                case 212 /* ArrowFunction */:
+                case 167 /* MethodDeclaration */:
+                case 166 /* MethodSignature */:
                     checkFunctionExpressionOrObjectLiteralMethodDeferred(node);
                     break;
-                case 168 /* GetAccessor */:
-                case 169 /* SetAccessor */:
+                case 170 /* GetAccessor */:
+                case 171 /* SetAccessor */:
                     checkAccessorDeclaration(node);
                     break;
-                case 222 /* ClassExpression */:
+                case 224 /* ClassExpression */:
                     checkClassExpressionDeferred(node);
                     break;
-                case 275 /* JsxSelfClosingElement */:
+                case 277 /* JsxSelfClosingElement */:
                     checkJsxSelfClosingElementDeferred(node);
                     break;
-                case 274 /* JsxElement */:
+                case 276 /* JsxElement */:
                     checkJsxElementDeferred(node);
                     break;
             }
@@ -80371,6 +81874,7 @@
                 ts.clear(potentialThisCollisions);
                 ts.clear(potentialNewTargetCollisions);
                 ts.clear(potentialWeakMapSetCollisions);
+                ts.clear(potentialReflectCollisions);
                 ts.forEach(node.statements, checkSourceElement);
                 checkSourceElement(node.endOfFileToken);
                 checkDeferredNodes(node);
@@ -80404,6 +81908,10 @@
                     ts.forEach(potentialWeakMapSetCollisions, checkWeakMapSetCollision);
                     ts.clear(potentialWeakMapSetCollisions);
                 }
+                if (potentialReflectCollisions.length) {
+                    ts.forEach(potentialReflectCollisions, checkReflectCollision);
+                    ts.clear(potentialReflectCollisions);
+                }
                 links.flags |= 1 /* TypeChecked */;
             }
         }
@@ -80464,7 +81972,7 @@
                 return [];
             }
             var symbols = ts.createSymbolTable();
-            var isStatic = false;
+            var isStaticSymbol = false;
             populateSymbols();
             symbols.delete("this" /* This */); // Not a symbol, a keyword
             return symbolsToArray(symbols);
@@ -80474,17 +81982,17 @@
                         copySymbols(location.locals, meaning);
                     }
                     switch (location.kind) {
-                        case 298 /* SourceFile */:
+                        case 300 /* SourceFile */:
                             if (!ts.isExternalModule(location))
                                 break;
                         // falls through
-                        case 257 /* ModuleDeclaration */:
+                        case 259 /* ModuleDeclaration */:
                             copyLocallyVisibleExportSymbols(getSymbolOfNode(location).exports, meaning & 2623475 /* ModuleMember */);
                             break;
-                        case 256 /* EnumDeclaration */:
+                        case 258 /* EnumDeclaration */:
                             copySymbols(getSymbolOfNode(location).exports, meaning & 8 /* EnumMember */);
                             break;
-                        case 222 /* ClassExpression */:
+                        case 224 /* ClassExpression */:
                             var className = location.name;
                             if (className) {
                                 copySymbol(location.symbol, meaning);
@@ -80492,17 +82000,17 @@
                         // this fall-through is necessary because we would like to handle
                         // type parameter inside class expression similar to how we handle it in classDeclaration and interface Declaration.
                         // falls through
-                        case 253 /* ClassDeclaration */:
-                        case 254 /* InterfaceDeclaration */:
+                        case 255 /* ClassDeclaration */:
+                        case 256 /* InterfaceDeclaration */:
                             // If we didn't come from static member of class or interface,
                             // add the type parameters into the symbol table
                             // (type parameters of classDeclaration/classExpression and interface are in member property of the symbol.
                             // Note: that the memberFlags come from previous iteration.
-                            if (!isStatic) {
+                            if (!isStaticSymbol) {
                                 copySymbols(getMembersOfSymbol(getSymbolOfNode(location)), meaning & 788968 /* Type */);
                             }
                             break;
-                        case 209 /* FunctionExpression */:
+                        case 211 /* FunctionExpression */:
                             var funcName = location.name;
                             if (funcName) {
                                 copySymbol(location.symbol, meaning);
@@ -80512,7 +82020,7 @@
                     if (ts.introducesArgumentsExoticObject(location)) {
                         copySymbol(argumentsSymbol, meaning);
                     }
-                    isStatic = ts.hasSyntacticModifier(location, 32 /* Static */);
+                    isStaticSymbol = ts.isStatic(location);
                     location = location.parent;
                 }
                 copySymbols(globals, meaning);
@@ -80546,7 +82054,7 @@
                 if (meaning) {
                     source.forEach(function (symbol) {
                         // Similar condition as in `resolveNameHelper`
-                        if (!ts.getDeclarationOfKind(symbol, 271 /* ExportSpecifier */) && !ts.getDeclarationOfKind(symbol, 270 /* NamespaceExport */)) {
+                        if (!ts.getDeclarationOfKind(symbol, 273 /* ExportSpecifier */) && !ts.getDeclarationOfKind(symbol, 272 /* NamespaceExport */)) {
                             copySymbol(symbol, meaning);
                         }
                     });
@@ -80554,25 +82062,25 @@
             }
         }
         function isTypeDeclarationName(name) {
-            return name.kind === 78 /* Identifier */ &&
+            return name.kind === 79 /* Identifier */ &&
                 isTypeDeclaration(name.parent) &&
                 ts.getNameOfDeclaration(name.parent) === name;
         }
         function isTypeDeclaration(node) {
             switch (node.kind) {
-                case 160 /* TypeParameter */:
-                case 253 /* ClassDeclaration */:
-                case 254 /* InterfaceDeclaration */:
-                case 255 /* TypeAliasDeclaration */:
-                case 256 /* EnumDeclaration */:
-                case 335 /* JSDocTypedefTag */:
-                case 328 /* JSDocCallbackTag */:
-                case 329 /* JSDocEnumTag */:
+                case 161 /* TypeParameter */:
+                case 255 /* ClassDeclaration */:
+                case 256 /* InterfaceDeclaration */:
+                case 257 /* TypeAliasDeclaration */:
+                case 258 /* EnumDeclaration */:
+                case 340 /* JSDocTypedefTag */:
+                case 333 /* JSDocCallbackTag */:
+                case 334 /* JSDocEnumTag */:
                     return true;
-                case 263 /* ImportClause */:
+                case 265 /* ImportClause */:
                     return node.isTypeOnly;
-                case 266 /* ImportSpecifier */:
-                case 271 /* ExportSpecifier */:
+                case 268 /* ImportSpecifier */:
+                case 273 /* ExportSpecifier */:
                     return node.parent.parent.isTypeOnly;
                 default:
                     return false;
@@ -80580,25 +82088,16 @@
         }
         // True if the given identifier is part of a type reference
         function isTypeReferenceIdentifier(node) {
-            while (node.parent.kind === 158 /* QualifiedName */) {
+            while (node.parent.kind === 159 /* QualifiedName */) {
                 node = node.parent;
             }
-            return node.parent.kind === 174 /* TypeReference */;
+            return node.parent.kind === 176 /* TypeReference */;
         }
         function isHeritageClauseElementIdentifier(node) {
-            while (node.parent.kind === 202 /* PropertyAccessExpression */) {
+            while (node.parent.kind === 204 /* PropertyAccessExpression */) {
                 node = node.parent;
             }
-            return node.parent.kind === 224 /* ExpressionWithTypeArguments */;
-        }
-        function getJSDocEntryNameReference(node) {
-            while (node.parent.kind === 158 /* QualifiedName */) {
-                node = node.parent;
-            }
-            while (node.parent.kind === 202 /* PropertyAccessExpression */) {
-                node = node.parent;
-            }
-            return ts.isJSDocNameReference(node.parent) ? node.parent : undefined;
+            return node.parent.kind === 226 /* ExpressionWithTypeArguments */;
         }
         function forEachEnclosingClass(node, callback) {
             var result;
@@ -80626,13 +82125,13 @@
             return !!forEachEnclosingClass(node, function (n) { return n === classDeclaration; });
         }
         function getLeftSideOfImportEqualsOrExportAssignment(nodeOnRightSide) {
-            while (nodeOnRightSide.parent.kind === 158 /* QualifiedName */) {
+            while (nodeOnRightSide.parent.kind === 159 /* QualifiedName */) {
                 nodeOnRightSide = nodeOnRightSide.parent;
             }
-            if (nodeOnRightSide.parent.kind === 261 /* ImportEqualsDeclaration */) {
+            if (nodeOnRightSide.parent.kind === 263 /* ImportEqualsDeclaration */) {
                 return nodeOnRightSide.parent.moduleReference === nodeOnRightSide ? nodeOnRightSide.parent : undefined;
             }
-            if (nodeOnRightSide.parent.kind === 267 /* ExportAssignment */) {
+            if (nodeOnRightSide.parent.kind === 269 /* ExportAssignment */) {
                 return nodeOnRightSide.parent.expression === nodeOnRightSide ? nodeOnRightSide.parent : undefined;
             }
             return undefined;
@@ -80658,7 +82157,7 @@
                 node = parent;
                 parent = parent.parent;
             }
-            if (parent && parent.kind === 196 /* ImportType */ && parent.qualifier === node) {
+            if (parent && parent.kind === 198 /* ImportType */ && parent.qualifier === node) {
                 return parent;
             }
             return undefined;
@@ -80668,17 +82167,17 @@
                 return getSymbolOfNode(name.parent);
             }
             if (ts.isInJSFile(name) &&
-                name.parent.kind === 202 /* PropertyAccessExpression */ &&
+                name.parent.kind === 204 /* PropertyAccessExpression */ &&
                 name.parent === name.parent.parent.left) {
                 // Check if this is a special property assignment
-                if (!ts.isPrivateIdentifier(name)) {
+                if (!ts.isPrivateIdentifier(name) && !ts.isJSDocMemberName(name)) {
                     var specialPropertyAssignmentSymbol = getSpecialPropertyAssignmentSymbolFromEntityName(name);
                     if (specialPropertyAssignmentSymbol) {
                         return specialPropertyAssignmentSymbol;
                     }
                 }
             }
-            if (name.parent.kind === 267 /* ExportAssignment */ && ts.isEntityNameExpression(name)) {
+            if (name.parent.kind === 269 /* ExportAssignment */ && ts.isEntityNameExpression(name)) {
                 // Even an entity name expression that doesn't resolve as an entityname may still typecheck as a property access expression
                 var success = resolveEntityName(name, 
                 /*all meanings*/ 111551 /* Value */ | 788968 /* Type */ | 1920 /* Namespace */ | 2097152 /* Alias */, /*ignoreErrors*/ true);
@@ -80686,13 +82185,13 @@
                     return success;
                 }
             }
-            else if (!ts.isPropertyAccessExpression(name) && !ts.isPrivateIdentifier(name) && isInRightSideOfImportOrExportAssignment(name)) {
+            else if (ts.isEntityName(name) && isInRightSideOfImportOrExportAssignment(name)) {
                 // Since we already checked for ExportAssignment, this really could only be an Import
-                var importEqualsDeclaration = ts.getAncestor(name, 261 /* ImportEqualsDeclaration */);
+                var importEqualsDeclaration = ts.getAncestor(name, 263 /* ImportEqualsDeclaration */);
                 ts.Debug.assert(importEqualsDeclaration !== undefined);
                 return getSymbolOfPartOfRightHandSideOfImportEquals(name, /*dontResolveAlias*/ true);
             }
-            if (!ts.isPropertyAccessExpression(name) && !ts.isPrivateIdentifier(name)) {
+            if (ts.isEntityName(name)) {
                 var possibleImportNode = isImportTypeQualifierPart(name);
                 if (possibleImportNode) {
                     getTypeFromTypeNode(possibleImportNode);
@@ -80700,13 +82199,13 @@
                     return sym === unknownSymbol ? undefined : sym;
                 }
             }
-            while (ts.isRightSideOfQualifiedNameOrPropertyAccess(name)) {
+            while (ts.isRightSideOfQualifiedNameOrPropertyAccessOrJSDocMemberName(name)) {
                 name = name.parent;
             }
             if (isHeritageClauseElementIdentifier(name)) {
                 var meaning = 0 /* None */;
                 // In an interface or class, we're definitely interested in a type.
-                if (name.parent.kind === 224 /* ExpressionWithTypeArguments */) {
+                if (name.parent.kind === 226 /* ExpressionWithTypeArguments */) {
                     meaning = 788968 /* Type */;
                     // In a class 'extends' clause we are also looking for a value.
                     if (ts.isExpressionWithTypeArgumentsInClassExtendsClause(name.parent)) {
@@ -80722,10 +82221,10 @@
                     return entityNameSymbol;
                 }
             }
-            if (name.parent.kind === 330 /* JSDocParameterTag */) {
+            if (name.parent.kind === 335 /* JSDocParameterTag */) {
                 return ts.getParameterSymbolFromJSDoc(name.parent);
             }
-            if (name.parent.kind === 160 /* TypeParameter */ && name.parent.parent.kind === 334 /* JSDocTemplateTag */) {
+            if (name.parent.kind === 161 /* TypeParameter */ && name.parent.parent.kind === 339 /* JSDocTemplateTag */) {
                 ts.Debug.assert(!ts.isInJSFile(name)); // Otherwise `isDeclarationName` would have been true.
                 var typeParameter = ts.getTypeParameterFromJsDoc(name.parent);
                 return typeParameter && typeParameter.symbol;
@@ -80735,63 +82234,81 @@
                     // Missing entity name.
                     return undefined;
                 }
-                if (name.kind === 78 /* Identifier */) {
+                var isJSDoc_1 = ts.findAncestor(name, ts.or(ts.isJSDocLinkLike, ts.isJSDocNameReference, ts.isJSDocMemberName));
+                var meaning = isJSDoc_1 ? 788968 /* Type */ | 1920 /* Namespace */ | 111551 /* Value */ : 111551 /* Value */;
+                if (name.kind === 79 /* Identifier */) {
                     if (ts.isJSXTagName(name) && isJsxIntrinsicIdentifier(name)) {
                         var symbol = getIntrinsicTagSymbol(name.parent);
                         return symbol === unknownSymbol ? undefined : symbol;
                     }
-                    return resolveEntityName(name, 111551 /* Value */, /*ignoreErrors*/ false, /*dontResolveAlias*/ true);
+                    var result = resolveEntityName(name, meaning, /*ignoreErrors*/ false, /*dontResolveAlias*/ !isJSDoc_1, ts.getHostSignatureFromJSDoc(name));
+                    if (!result && isJSDoc_1) {
+                        var container = ts.findAncestor(name, ts.or(ts.isClassLike, ts.isInterfaceDeclaration));
+                        if (container) {
+                            return resolveJSDocMemberName(name, getSymbolOfNode(container));
+                        }
+                    }
+                    return result;
                 }
-                else if (name.kind === 202 /* PropertyAccessExpression */ || name.kind === 158 /* QualifiedName */) {
+                else if (name.kind === 204 /* PropertyAccessExpression */ || name.kind === 159 /* QualifiedName */) {
                     var links = getNodeLinks(name);
                     if (links.resolvedSymbol) {
                         return links.resolvedSymbol;
                     }
-                    if (name.kind === 202 /* PropertyAccessExpression */) {
+                    if (name.kind === 204 /* PropertyAccessExpression */) {
                         checkPropertyAccessExpression(name, 0 /* Normal */);
                     }
                     else {
                         checkQualifiedName(name, 0 /* Normal */);
                     }
+                    if (!links.resolvedSymbol && isJSDoc_1 && ts.isQualifiedName(name)) {
+                        return resolveJSDocMemberName(name);
+                    }
                     return links.resolvedSymbol;
                 }
+                else if (ts.isJSDocMemberName(name)) {
+                    return resolveJSDocMemberName(name);
+                }
             }
             else if (isTypeReferenceIdentifier(name)) {
-                var meaning = name.parent.kind === 174 /* TypeReference */ ? 788968 /* Type */ : 1920 /* Namespace */;
+                var meaning = name.parent.kind === 176 /* TypeReference */ ? 788968 /* Type */ : 1920 /* Namespace */;
                 return resolveEntityName(name, meaning, /*ignoreErrors*/ false, /*dontResolveAlias*/ true);
             }
-            var jsdocReference = getJSDocEntryNameReference(name);
-            if (jsdocReference || ts.isJSDocLink(name.parent)) {
-                var meaning = 788968 /* Type */ | 1920 /* Namespace */ | 111551 /* Value */;
-                var symbol = resolveEntityName(name, meaning, /*ignoreErrors*/ false, /*dontResolveAlias*/ false, ts.getHostSignatureFromJSDoc(name));
-                if (symbol) {
-                    return symbol;
-                }
-                else if (ts.isQualifiedName(name) && ts.isIdentifier(name.left)) {
-                    // resolve C.m as a static member first
-                    var links = getNodeLinks(name);
-                    if (links.resolvedSymbol) {
-                        return links.resolvedSymbol;
-                    }
-                    checkQualifiedName(name, 0 /* Normal */);
-                    if (links.resolvedSymbol) {
-                        return links.resolvedSymbol;
-                    }
-                    // then resolve it as an instance member
-                    var s = resolveEntityName(name.left, meaning, /*ignoreErrors*/ false);
-                    if (s) {
-                        var t = getDeclaredTypeOfSymbol(s);
-                        return getPropertyOfType(t, name.right.escapedText);
-                    }
-                }
-            }
-            if (name.parent.kind === 173 /* TypePredicate */) {
+            if (name.parent.kind === 175 /* TypePredicate */) {
                 return resolveEntityName(name, /*meaning*/ 1 /* FunctionScopedVariable */);
             }
             return undefined;
         }
+        /**
+         * Recursively resolve entity names and jsdoc instance references:
+         * 1. K#m as K.prototype.m for a class (or other value) K
+         * 2. K.m as K.prototype.m
+         * 3. I.m as I.m for a type I, or any other I.m that fails to resolve in (1) or (2)
+         *
+         * For unqualified names, a container K may be provided as a second argument.
+         */
+        function resolveJSDocMemberName(name, container) {
+            if (ts.isEntityName(name)) {
+                // resolve static values first
+                var meaning = 788968 /* Type */ | 1920 /* Namespace */ | 111551 /* Value */;
+                var symbol = resolveEntityName(name, meaning, /*ignoreErrors*/ false, /*dontResolveAlias*/ true, ts.getHostSignatureFromJSDoc(name));
+                if (!symbol && ts.isIdentifier(name) && container) {
+                    symbol = getMergedSymbol(getSymbol(getExportsOfSymbol(container), name.escapedText, meaning));
+                }
+                if (symbol) {
+                    return symbol;
+                }
+            }
+            var left = ts.isIdentifier(name) ? container : resolveJSDocMemberName(name.left);
+            var right = ts.isIdentifier(name) ? name.escapedText : name.right.escapedText;
+            if (left) {
+                var proto = left.flags & 111551 /* Value */ && getPropertyOfType(getTypeOfSymbol(left), "prototype");
+                var t = proto ? getTypeOfSymbol(proto) : getDeclaredTypeOfSymbol(left);
+                return getPropertyOfType(t, right);
+            }
+        }
         function getSymbolAtLocation(node, ignoreErrors) {
-            if (node.kind === 298 /* SourceFile */) {
+            if (node.kind === 300 /* SourceFile */) {
                 return ts.isExternalModule(node) ? getMergedSymbol(node.symbol) : undefined;
             }
             var parent = node.parent;
@@ -80810,12 +82327,12 @@
             else if (ts.isLiteralComputedPropertyDeclarationName(node)) {
                 return getSymbolOfNode(parent.parent);
             }
-            if (node.kind === 78 /* Identifier */) {
+            if (node.kind === 79 /* Identifier */) {
                 if (isInRightSideOfImportOrExportAssignment(node)) {
                     return getSymbolOfNameOrPropertyAccessExpression(node);
                 }
-                else if (parent.kind === 199 /* BindingElement */ &&
-                    grandParent.kind === 197 /* ObjectBindingPattern */ &&
+                else if (parent.kind === 201 /* BindingElement */ &&
+                    grandParent.kind === 199 /* ObjectBindingPattern */ &&
                     node === parent.propertyName) {
                     var typeOfPattern = getTypeOfNode(grandParent);
                     var propertyDeclaration = getPropertyOfType(typeOfPattern, node.escapedText);
@@ -80823,14 +82340,24 @@
                         return propertyDeclaration;
                     }
                 }
+                else if (ts.isMetaProperty(parent)) {
+                    var parentType = getTypeOfNode(parent);
+                    var propertyDeclaration = getPropertyOfType(parentType, node.escapedText);
+                    if (propertyDeclaration) {
+                        return propertyDeclaration;
+                    }
+                    if (parent.keywordToken === 103 /* NewKeyword */) {
+                        return checkNewTargetMetaProperty(parent).symbol;
+                    }
+                }
             }
             switch (node.kind) {
-                case 78 /* Identifier */:
-                case 79 /* PrivateIdentifier */:
-                case 202 /* PropertyAccessExpression */:
-                case 158 /* QualifiedName */:
+                case 79 /* Identifier */:
+                case 80 /* PrivateIdentifier */:
+                case 204 /* PropertyAccessExpression */:
+                case 159 /* QualifiedName */:
                     return getSymbolOfNameOrPropertyAccessExpression(node);
-                case 107 /* ThisKeyword */:
+                case 108 /* ThisKeyword */:
                     var container = ts.getThisContainer(node, /*includeArrowFunctions*/ false);
                     if (ts.isFunctionLike(container)) {
                         var sig = getSignatureFromDeclaration(container);
@@ -80842,14 +82369,14 @@
                         return checkExpression(node).symbol;
                     }
                 // falls through
-                case 188 /* ThisType */:
+                case 190 /* ThisType */:
                     return getTypeFromThisTypeNode(node).symbol;
-                case 105 /* SuperKeyword */:
+                case 106 /* SuperKeyword */:
                     return checkExpression(node).symbol;
-                case 132 /* ConstructorKeyword */:
+                case 133 /* ConstructorKeyword */:
                     // constructor keyword for an overload, should take us to the definition if it exist
                     var constructorDeclaration = node.parent;
-                    if (constructorDeclaration && constructorDeclaration.kind === 167 /* Constructor */) {
+                    if (constructorDeclaration && constructorDeclaration.kind === 169 /* Constructor */) {
                         return constructorDeclaration.parent.symbol;
                     }
                     return undefined;
@@ -80860,7 +82387,7 @@
                     // 3). Dynamic import call or require in javascript
                     // 4). type A = import("./f/*gotToDefinitionHere*/oo")
                     if ((ts.isExternalModuleImportEqualsDeclaration(node.parent.parent) && ts.getExternalModuleImportEqualsDeclarationExpression(node.parent.parent) === node) ||
-                        ((node.parent.kind === 262 /* ImportDeclaration */ || node.parent.kind === 268 /* ExportDeclaration */) && node.parent.moduleSpecifier === node) ||
+                        ((node.parent.kind === 264 /* ImportDeclaration */ || node.parent.kind === 270 /* ExportDeclaration */) && node.parent.moduleSpecifier === node) ||
                         ((ts.isInJSFile(node) && ts.isRequireCall(node.parent, /*checkArgumentIsStringLiteralLike*/ false)) || ts.isImportCall(node.parent)) ||
                         (ts.isLiteralTypeNode(node.parent) && ts.isLiteralImportTypeNode(node.parent.parent) && node.parent.parent.argument === node.parent)) {
                         return resolveExternalModuleName(node, node, ignoreErrors);
@@ -80877,21 +82404,35 @@
                             ? getTypeFromTypeNode(grandParent.objectType)
                             : undefined;
                     return objectType && getPropertyOfType(objectType, ts.escapeLeadingUnderscores(node.text));
-                case 87 /* DefaultKeyword */:
-                case 97 /* FunctionKeyword */:
+                case 88 /* DefaultKeyword */:
+                case 98 /* FunctionKeyword */:
                 case 38 /* EqualsGreaterThanToken */:
-                case 83 /* ClassKeyword */:
+                case 84 /* ClassKeyword */:
                     return getSymbolOfNode(node.parent);
-                case 196 /* ImportType */:
+                case 198 /* ImportType */:
                     return ts.isLiteralImportTypeNode(node) ? getSymbolAtLocation(node.argument.literal, ignoreErrors) : undefined;
-                case 92 /* ExportKeyword */:
+                case 93 /* ExportKeyword */:
                     return ts.isExportAssignment(node.parent) ? ts.Debug.checkDefined(node.parent.symbol) : undefined;
+                case 100 /* ImportKeyword */:
+                case 103 /* NewKeyword */:
+                    return ts.isMetaProperty(node.parent) ? checkMetaPropertyKeyword(node.parent).symbol : undefined;
+                case 229 /* MetaProperty */:
+                    return checkExpression(node).symbol;
                 default:
                     return undefined;
             }
         }
+        function getIndexInfosAtLocation(node) {
+            if (ts.isIdentifier(node) && ts.isPropertyAccessExpression(node.parent) && node.parent.name === node) {
+                var keyType_1 = getLiteralTypeFromPropertyName(node);
+                var objectType = getTypeOfExpression(node.parent.expression);
+                var objectTypes = objectType.flags & 1048576 /* Union */ ? objectType.types : [objectType];
+                return ts.flatMap(objectTypes, function (t) { return ts.filter(getIndexInfosOfType(t), function (info) { return isApplicableIndexType(keyType_1, info.keyType); }); });
+            }
+            return undefined;
+        }
         function getShorthandAssignmentValueSymbol(location) {
-            if (location && location.kind === 290 /* ShorthandPropertyAssignment */) {
+            if (location && location.kind === 292 /* ShorthandPropertyAssignment */) {
                 return resolveEntityName(location.name, 111551 /* Value */ | 2097152 /* Alias */);
             }
             return undefined;
@@ -80961,6 +82502,9 @@
                     return declaredType !== errorType ? declaredType : getTypeOfSymbol(symbol);
                 }
             }
+            if (ts.isMetaProperty(node.parent) && node.parent.keywordToken === node.kind) {
+                return checkMetaPropertyKeyword(node.parent);
+            }
             return errorType;
         }
         // Gets the type of object literal or array literal of destructuring assignment.
@@ -80970,23 +82514,23 @@
         // [ a ] from
         //     [a] = [ some array ...]
         function getTypeOfAssignmentPattern(expr) {
-            ts.Debug.assert(expr.kind === 201 /* ObjectLiteralExpression */ || expr.kind === 200 /* ArrayLiteralExpression */);
+            ts.Debug.assert(expr.kind === 203 /* ObjectLiteralExpression */ || expr.kind === 202 /* ArrayLiteralExpression */);
             // If this is from "for of"
             //     for ( { a } of elems) {
             //     }
-            if (expr.parent.kind === 240 /* ForOfStatement */) {
+            if (expr.parent.kind === 242 /* ForOfStatement */) {
                 var iteratedType = checkRightHandSideOfForOf(expr.parent);
                 return checkDestructuringAssignment(expr, iteratedType || errorType);
             }
             // If this is from "for" initializer
             //     for ({a } = elems[0];.....) { }
-            if (expr.parent.kind === 217 /* BinaryExpression */) {
+            if (expr.parent.kind === 219 /* BinaryExpression */) {
                 var iteratedType = getTypeOfExpression(expr.parent.right);
                 return checkDestructuringAssignment(expr, iteratedType || errorType);
             }
             // If this is from nested object binding pattern
             //     for ({ skills: { primary, secondary } } = multiRobot, i = 0; i < 1; i++) {
-            if (expr.parent.kind === 289 /* PropertyAssignment */) {
+            if (expr.parent.kind === 291 /* PropertyAssignment */) {
                 var node_3 = ts.cast(expr.parent.parent, ts.isObjectLiteralExpression);
                 var typeOfParentObjectLiteral = getTypeOfAssignmentPattern(node_3) || errorType;
                 var propertyIndex = ts.indexOfNode(node_3.properties, expr.parent);
@@ -81022,19 +82566,19 @@
          */
         function getParentTypeOfClassElement(node) {
             var classSymbol = getSymbolOfNode(node.parent);
-            return ts.hasSyntacticModifier(node, 32 /* Static */)
+            return ts.isStatic(node)
                 ? getTypeOfSymbol(classSymbol)
                 : getDeclaredTypeOfSymbol(classSymbol);
         }
         function getClassElementPropertyKeyType(element) {
             var name = element.name;
             switch (name.kind) {
-                case 78 /* Identifier */:
-                    return getLiteralType(ts.idText(name));
+                case 79 /* Identifier */:
+                    return getStringLiteralType(ts.idText(name));
                 case 8 /* NumericLiteral */:
                 case 10 /* StringLiteral */:
-                    return getLiteralType(name.text);
-                case 159 /* ComputedPropertyName */:
+                    return getStringLiteralType(name.text);
+                case 160 /* ComputedPropertyName */:
                     var nameType = checkComputedPropertyName(name);
                     return isTypeAssignableToKind(nameType, 12288 /* ESSymbolLike */) ? nameType : stringType;
                 default:
@@ -81152,7 +82696,7 @@
                     }
                     var parentSymbol_1 = getParentOfSymbol(symbol);
                     if (parentSymbol_1) {
-                        if (parentSymbol_1.flags & 512 /* ValueModule */ && ((_a = parentSymbol_1.valueDeclaration) === null || _a === void 0 ? void 0 : _a.kind) === 298 /* SourceFile */) {
+                        if (parentSymbol_1.flags & 512 /* ValueModule */ && ((_a = parentSymbol_1.valueDeclaration) === null || _a === void 0 ? void 0 : _a.kind) === 300 /* SourceFile */) {
                             var symbolFile = parentSymbol_1.valueDeclaration;
                             var referenceFile = ts.getSourceFileOfNode(node);
                             // If `node` accesses an export and that export isn't in the same file, then symbol is a namespace export, so return undefined.
@@ -81184,7 +82728,7 @@
         function isSymbolOfDestructuredElementOfCatchBinding(symbol) {
             return symbol.valueDeclaration
                 && ts.isBindingElement(symbol.valueDeclaration)
-                && ts.walkUpBindingElementsAndPatterns(symbol.valueDeclaration).parent.kind === 288 /* CatchClause */;
+                && ts.walkUpBindingElementsAndPatterns(symbol.valueDeclaration).parent.kind === 290 /* CatchClause */;
         }
         function isSymbolOfDeclarationWithCollidingName(symbol) {
             if (symbol.flags & 418 /* BlockScoped */ && symbol.valueDeclaration && !ts.isSourceFile(symbol.valueDeclaration)) {
@@ -81215,7 +82759,7 @@
                             //       they will not collide with anything
                             var isDeclaredInLoop = nodeLinks_1.flags & 524288 /* BlockScopedBindingInLoop */;
                             var inLoopInitializer = ts.isIterationStatement(container, /*lookInLabeledStatements*/ false);
-                            var inLoopBodyBlock = container.kind === 231 /* Block */ && ts.isIterationStatement(container.parent, /*lookInLabeledStatements*/ false);
+                            var inLoopBodyBlock = container.kind === 233 /* Block */ && ts.isIterationStatement(container.parent, /*lookInLabeledStatements*/ false);
                             links.isDeclarationWithCollidingName = !ts.isBlockScopedContainerTopLevel(container) && (!isDeclaredInLoop || (!inLoopInitializer && !inLoopBodyBlock));
                         }
                         else {
@@ -81256,20 +82800,20 @@
         }
         function isValueAliasDeclaration(node) {
             switch (node.kind) {
-                case 261 /* ImportEqualsDeclaration */:
+                case 263 /* ImportEqualsDeclaration */:
                     return isAliasResolvedToValue(getSymbolOfNode(node) || unknownSymbol);
-                case 263 /* ImportClause */:
-                case 264 /* NamespaceImport */:
-                case 266 /* ImportSpecifier */:
-                case 271 /* ExportSpecifier */:
+                case 265 /* ImportClause */:
+                case 266 /* NamespaceImport */:
+                case 268 /* ImportSpecifier */:
+                case 273 /* ExportSpecifier */:
                     var symbol = getSymbolOfNode(node) || unknownSymbol;
                     return isAliasResolvedToValue(symbol) && !getTypeOnlyAliasDeclaration(symbol);
-                case 268 /* ExportDeclaration */:
+                case 270 /* ExportDeclaration */:
                     var exportClause = node.exportClause;
                     return !!exportClause && (ts.isNamespaceExport(exportClause) ||
                         ts.some(exportClause.elements, isValueAliasDeclaration));
-                case 267 /* ExportAssignment */:
-                    return node.expression && node.expression.kind === 78 /* Identifier */ ?
+                case 269 /* ExportAssignment */:
+                    return node.expression && node.expression.kind === 79 /* Identifier */ ?
                         isAliasResolvedToValue(getSymbolOfNode(node) || unknownSymbol) :
                         true;
             }
@@ -81277,7 +82821,7 @@
         }
         function isTopLevelValueImportEqualsWithEntityName(nodeIn) {
             var node = ts.getParseTreeNode(nodeIn, ts.isImportEqualsDeclaration);
-            if (node === undefined || node.parent.kind !== 298 /* SourceFile */ || !ts.isInternalModuleImportEqualsDeclaration(node)) {
+            if (node === undefined || node.parent.kind !== 300 /* SourceFile */ || !ts.isInternalModuleImportEqualsDeclaration(node)) {
                 // parent is not source file or it is not reference to internal module
                 return false;
             }
@@ -81377,7 +82921,11 @@
             return symbol && getPropertiesOfType(getTypeOfSymbol(symbol)) || ts.emptyArray;
         }
         function getNodeCheckFlags(node) {
-            return getNodeLinks(node).flags || 0;
+            var _a;
+            var nodeId = node.id || 0;
+            if (nodeId < 0 || nodeId >= nodeLinks.length)
+                return 0;
+            return ((_a = nodeLinks[nodeId]) === null || _a === void 0 ? void 0 : _a.flags) || 0;
         }
         function getEnumMemberValue(node) {
             computeEnumMemberValues(node.parent);
@@ -81385,15 +82933,15 @@
         }
         function canHaveConstantValue(node) {
             switch (node.kind) {
-                case 292 /* EnumMember */:
-                case 202 /* PropertyAccessExpression */:
-                case 203 /* ElementAccessExpression */:
+                case 294 /* EnumMember */:
+                case 204 /* PropertyAccessExpression */:
+                case 205 /* ElementAccessExpression */:
                     return true;
             }
             return false;
         }
         function getConstantValue(node) {
-            if (node.kind === 292 /* EnumMember */) {
+            if (node.kind === 294 /* EnumMember */) {
                 return getEnumMemberValue(node);
             }
             var symbol = getNodeLinks(node).resolvedSymbol;
@@ -81410,7 +82958,7 @@
             return !!(type.flags & 524288 /* Object */) && getSignaturesOfType(type, 0 /* Call */).length > 0;
         }
         function getTypeReferenceSerializationKind(typeNameIn, location) {
-            var _a;
+            var _a, _b;
             // ensure both `typeName` and `location` are parse tree nodes.
             var typeName = ts.getParseTreeNode(typeNameIn, ts.isEntityName);
             if (!typeName)
@@ -81421,9 +82969,14 @@
                     return ts.TypeReferenceSerializationKind.Unknown;
             }
             // Resolve the symbol as a value to ensure the type can be reached at runtime during emit.
+            var isTypeOnly = false;
+            if (ts.isQualifiedName(typeName)) {
+                var rootValueSymbol = resolveEntityName(ts.getFirstIdentifier(typeName), 111551 /* Value */, /*ignoreErrors*/ true, /*dontResolveAlias*/ true, location);
+                isTypeOnly = !!((_a = rootValueSymbol === null || rootValueSymbol === void 0 ? void 0 : rootValueSymbol.declarations) === null || _a === void 0 ? void 0 : _a.every(ts.isTypeOnlyImportOrExportDeclaration));
+            }
             var valueSymbol = resolveEntityName(typeName, 111551 /* Value */, /*ignoreErrors*/ true, /*dontResolveAlias*/ true, location);
-            var isTypeOnly = ((_a = valueSymbol === null || valueSymbol === void 0 ? void 0 : valueSymbol.declarations) === null || _a === void 0 ? void 0 : _a.every(ts.isTypeOnlyImportOrExportDeclaration)) || false;
             var resolvedSymbol = valueSymbol && valueSymbol.flags & 2097152 /* Alias */ ? resolveAlias(valueSymbol) : valueSymbol;
+            isTypeOnly || (isTypeOnly = !!((_b = valueSymbol === null || valueSymbol === void 0 ? void 0 : valueSymbol.declarations) === null || _b === void 0 ? void 0 : _b.every(ts.isTypeOnlyImportOrExportDeclaration)));
             // Resolve the symbol as a type so that we can provide a more useful hint for the type serializer.
             var typeSymbol = resolveEntityName(typeName, 788968 /* Type */, /*ignoreErrors*/ true, /*dontResolveAlias*/ false, location);
             if (resolvedSymbol && resolvedSymbol === typeSymbol) {
@@ -81481,7 +83034,7 @@
         function createTypeOfDeclaration(declarationIn, enclosingDeclaration, flags, tracker, addUndefined) {
             var declaration = ts.getParseTreeNode(declarationIn, ts.isVariableLikeOrAccessor);
             if (!declaration) {
-                return ts.factory.createToken(128 /* AnyKeyword */);
+                return ts.factory.createToken(129 /* AnyKeyword */);
             }
             // Get type of the symbol if this is the valid symbol otherwise get type at location
             var symbol = getSymbolOfNode(declaration);
@@ -81500,7 +83053,7 @@
         function createReturnTypeOfSignatureDeclaration(signatureDeclarationIn, enclosingDeclaration, flags, tracker) {
             var signatureDeclaration = ts.getParseTreeNode(signatureDeclarationIn, ts.isFunctionLike);
             if (!signatureDeclaration) {
-                return ts.factory.createToken(128 /* AnyKeyword */);
+                return ts.factory.createToken(129 /* AnyKeyword */);
             }
             var signature = getSignatureFromDeclaration(signatureDeclaration);
             return nodeBuilder.typeToTypeNode(getReturnTypeOfSignature(signature), enclosingDeclaration, flags | 1024 /* MultilineObjectLiterals */, tracker);
@@ -81508,7 +83061,7 @@
         function createTypeOfExpression(exprIn, enclosingDeclaration, flags, tracker) {
             var expr = ts.getParseTreeNode(exprIn, ts.isExpression);
             if (!expr) {
-                return ts.factory.createToken(128 /* AnyKeyword */);
+                return ts.factory.createToken(129 /* AnyKeyword */);
             }
             var type = getWidenedType(getRegularTypeOfExpression(expr));
             return nodeBuilder.typeToTypeNode(type, enclosingDeclaration, flags | 1024 /* MultilineObjectLiterals */, tracker);
@@ -81665,12 +83218,12 @@
                 getJsxFragmentFactoryEntity: getJsxFragmentFactoryEntity,
                 getAllAccessorDeclarations: function (accessor) {
                     accessor = ts.getParseTreeNode(accessor, ts.isGetOrSetAccessorDeclaration); // TODO: GH#18217
-                    var otherKind = accessor.kind === 169 /* SetAccessor */ ? 168 /* GetAccessor */ : 169 /* SetAccessor */;
+                    var otherKind = accessor.kind === 171 /* SetAccessor */ ? 170 /* GetAccessor */ : 171 /* SetAccessor */;
                     var otherAccessor = ts.getDeclarationOfKind(getSymbolOfNode(accessor), otherKind);
                     var firstAccessor = otherAccessor && (otherAccessor.pos < accessor.pos) ? otherAccessor : accessor;
                     var secondAccessor = otherAccessor && (otherAccessor.pos < accessor.pos) ? accessor : otherAccessor;
-                    var setAccessor = accessor.kind === 169 /* SetAccessor */ ? accessor : otherAccessor;
-                    var getAccessor = accessor.kind === 168 /* GetAccessor */ ? accessor : otherAccessor;
+                    var setAccessor = accessor.kind === 171 /* SetAccessor */ ? accessor : otherAccessor;
+                    var getAccessor = accessor.kind === 170 /* GetAccessor */ ? accessor : otherAccessor;
                     return {
                         firstAccessor: firstAccessor,
                         secondAccessor: secondAccessor,
@@ -81686,7 +83239,7 @@
                 },
                 getDeclarationStatementsForSourceFile: function (node, flags, tracker, bundled) {
                     var n = ts.getParseTreeNode(node);
-                    ts.Debug.assert(n && n.kind === 298 /* SourceFile */, "Non-sourcefile node passed into getDeclarationsForSourceFile");
+                    ts.Debug.assert(n && n.kind === 300 /* SourceFile */, "Non-sourcefile node passed into getDeclarationsForSourceFile");
                     var sym = getSymbolOfNode(node);
                     if (!sym) {
                         return !node.locals ? [] : nodeBuilder.symbolTableToDeclarationStatements(node.locals, node, flags, tracker, bundled);
@@ -81723,7 +83276,7 @@
                 return false;
             }
             function isInHeritageClause(node) {
-                return node.parent && node.parent.kind === 224 /* ExpressionWithTypeArguments */ && node.parent.parent && node.parent.parent.kind === 287 /* HeritageClause */;
+                return node.parent && node.parent.kind === 226 /* ExpressionWithTypeArguments */ && node.parent.parent && node.parent.parent.kind === 289 /* HeritageClause */;
             }
             // defined here to avoid outer scope pollution
             function getTypeReferenceDirectivesForEntityName(node) {
@@ -81735,7 +83288,7 @@
                 // qualified names can only be used as types\namespaces
                 // identifiers are treated as values only if they appear in type queries
                 var meaning = 788968 /* Type */ | 1920 /* Namespace */;
-                if ((node.kind === 78 /* Identifier */ && isInTypeQuery(node)) || (node.kind === 202 /* PropertyAccessExpression */ && !isInHeritageClause(node))) {
+                if ((node.kind === 79 /* Identifier */ && isInTypeQuery(node)) || (node.kind === 204 /* PropertyAccessExpression */ && !isInHeritageClause(node))) {
                     meaning = 111551 /* Value */ | 1048576 /* ExportValue */;
                 }
                 var symbol = resolveEntityName(node, meaning, /*ignoreErrors*/ true);
@@ -81783,7 +83336,7 @@
                         break;
                     }
                 }
-                if (current.valueDeclaration && current.valueDeclaration.kind === 298 /* SourceFile */ && current.flags & 512 /* ValueModule */) {
+                if (current.valueDeclaration && current.valueDeclaration.kind === 300 /* SourceFile */ && current.flags & 512 /* ValueModule */) {
                     return false;
                 }
                 // check that at least one declaration of top level symbol originates from type declaration file
@@ -81811,12 +83364,12 @@
             }
         }
         function getExternalModuleFileFromDeclaration(declaration) {
-            var specifier = declaration.kind === 257 /* ModuleDeclaration */ ? ts.tryCast(declaration.name, ts.isStringLiteral) : ts.getExternalModuleName(declaration);
+            var specifier = declaration.kind === 259 /* ModuleDeclaration */ ? ts.tryCast(declaration.name, ts.isStringLiteral) : ts.getExternalModuleName(declaration);
             var moduleSymbol = resolveExternalModuleNameWorker(specifier, specifier, /*moduleNotFoundError*/ undefined); // TODO: GH#18217
             if (!moduleSymbol) {
                 return undefined;
             }
-            return ts.getDeclarationOfKind(moduleSymbol, 298 /* SourceFile */);
+            return ts.getDeclarationOfKind(moduleSymbol, 300 /* SourceFile */);
         }
         function initializeTypeChecker() {
             // Bind all source files and propagate errors
@@ -81902,7 +83455,7 @@
             autoArrayType = createArrayType(autoType);
             if (autoArrayType === emptyObjectType) {
                 // autoArrayType is used as a marker, so even if global Array type is not defined, it needs to be a unique type
-                autoArrayType = createAnonymousType(undefined, emptySymbols, ts.emptyArray, ts.emptyArray, undefined, undefined);
+                autoArrayType = createAnonymousType(undefined, emptySymbols, ts.emptyArray, ts.emptyArray, ts.emptyArray);
             }
             globalReadonlyArrayType = getGlobalTypeOrUndefined("ReadonlyArray", /*arity*/ 1) || globalArrayType;
             anyReadonlyArrayType = globalReadonlyArrayType ? createTypeFromGenericGlobalType(globalReadonlyArrayType, [anyType]) : anyArrayType;
@@ -81970,6 +83523,11 @@
                                         error(location, ts.Diagnostics.This_syntax_requires_an_imported_helper_named_1_with_2_parameters_which_is_not_compatible_with_the_one_in_0_Consider_upgrading_your_version_of_0, ts.externalHelpersModuleNameText, name, 5);
                                     }
                                 }
+                                else if (helper & 1024 /* SpreadArray */) {
+                                    if (!ts.some(getSignaturesOfSymbol(symbol), function (signature) { return getParameterCount(signature) > 2; })) {
+                                        error(location, ts.Diagnostics.This_syntax_requires_an_imported_helper_named_1_with_2_parameters_which_is_not_compatible_with_the_one_in_0_Consider_upgrading_your_version_of_0, ts.externalHelpersModuleNameText, name, 3);
+                                    }
+                                }
                             }
                         }
                     }
@@ -82019,14 +83577,14 @@
                 return false;
             }
             if (!ts.nodeCanBeDecorated(node, node.parent, node.parent.parent)) {
-                if (node.kind === 166 /* MethodDeclaration */ && !ts.nodeIsPresent(node.body)) {
+                if (node.kind === 167 /* MethodDeclaration */ && !ts.nodeIsPresent(node.body)) {
                     return grammarErrorOnFirstToken(node, ts.Diagnostics.A_decorator_can_only_decorate_a_method_implementation_not_an_overload);
                 }
                 else {
                     return grammarErrorOnFirstToken(node, ts.Diagnostics.Decorators_are_not_valid_here);
                 }
             }
-            else if (node.kind === 168 /* GetAccessor */ || node.kind === 169 /* SetAccessor */) {
+            else if (node.kind === 170 /* GetAccessor */ || node.kind === 171 /* SetAccessor */) {
                 var accessors = ts.getAllAccessorDeclarations(node.parent.members, node);
                 if (accessors.firstAccessor.decorators && node === accessors.secondAccessor) {
                     return grammarErrorOnFirstToken(node, ts.Diagnostics.Decorators_cannot_be_applied_to_multiple_get_Slashset_accessors_of_the_same_name);
@@ -82043,21 +83601,21 @@
             var flags = 0 /* None */;
             for (var _i = 0, _a = node.modifiers; _i < _a.length; _i++) {
                 var modifier = _a[_i];
-                if (modifier.kind !== 142 /* ReadonlyKeyword */) {
-                    if (node.kind === 163 /* PropertySignature */ || node.kind === 165 /* MethodSignature */) {
+                if (modifier.kind !== 143 /* ReadonlyKeyword */) {
+                    if (node.kind === 164 /* PropertySignature */ || node.kind === 166 /* MethodSignature */) {
                         return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_type_member, ts.tokenToString(modifier.kind));
                     }
-                    if (node.kind === 172 /* IndexSignature */ && (modifier.kind !== 123 /* StaticKeyword */ || !ts.isClassLike(node.parent))) {
+                    if (node.kind === 174 /* IndexSignature */ && (modifier.kind !== 124 /* StaticKeyword */ || !ts.isClassLike(node.parent))) {
                         return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_an_index_signature, ts.tokenToString(modifier.kind));
                     }
                 }
                 switch (modifier.kind) {
-                    case 84 /* ConstKeyword */:
-                        if (node.kind !== 256 /* EnumDeclaration */) {
-                            return grammarErrorOnNode(node, ts.Diagnostics.A_class_member_cannot_have_the_0_keyword, ts.tokenToString(84 /* ConstKeyword */));
+                    case 85 /* ConstKeyword */:
+                        if (node.kind !== 258 /* EnumDeclaration */) {
+                            return grammarErrorOnNode(node, ts.Diagnostics.A_class_member_cannot_have_the_0_keyword, ts.tokenToString(85 /* ConstKeyword */));
                         }
                         break;
-                    case 156 /* OverrideKeyword */:
+                    case 157 /* OverrideKeyword */:
                         // If node.kind === SyntaxKind.Parameter, checkParameter reports an error if it's not a parameter property.
                         if (flags & 16384 /* Override */) {
                             return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_already_seen, "override");
@@ -82074,9 +83632,9 @@
                         flags |= 16384 /* Override */;
                         lastOverride = modifier;
                         break;
-                    case 122 /* PublicKeyword */:
-                    case 121 /* ProtectedKeyword */:
-                    case 120 /* PrivateKeyword */:
+                    case 123 /* PublicKeyword */:
+                    case 122 /* ProtectedKeyword */:
+                    case 121 /* PrivateKeyword */:
                         var text = visibilityToString(ts.modifierToFlag(modifier.kind));
                         if (flags & 28 /* AccessibilityModifier */) {
                             return grammarErrorOnNode(modifier, ts.Diagnostics.Accessibility_modifier_already_seen);
@@ -82093,11 +83651,11 @@
                         else if (flags & 256 /* Async */) {
                             return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_must_precede_1_modifier, text, "async");
                         }
-                        else if (node.parent.kind === 258 /* ModuleBlock */ || node.parent.kind === 298 /* SourceFile */) {
+                        else if (node.parent.kind === 260 /* ModuleBlock */ || node.parent.kind === 300 /* SourceFile */) {
                             return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_module_or_namespace_element, text);
                         }
                         else if (flags & 128 /* Abstract */) {
-                            if (modifier.kind === 120 /* PrivateKeyword */) {
+                            if (modifier.kind === 121 /* PrivateKeyword */) {
                                 return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_be_used_with_1_modifier, text, "abstract");
                             }
                             else {
@@ -82109,7 +83667,7 @@
                         }
                         flags |= ts.modifierToFlag(modifier.kind);
                         break;
-                    case 123 /* StaticKeyword */:
+                    case 124 /* StaticKeyword */:
                         if (flags & 32 /* Static */) {
                             return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_already_seen, "static");
                         }
@@ -82119,10 +83677,10 @@
                         else if (flags & 256 /* Async */) {
                             return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_must_precede_1_modifier, "static", "async");
                         }
-                        else if (node.parent.kind === 258 /* ModuleBlock */ || node.parent.kind === 298 /* SourceFile */) {
+                        else if (node.parent.kind === 260 /* ModuleBlock */ || node.parent.kind === 300 /* SourceFile */) {
                             return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_module_or_namespace_element, "static");
                         }
-                        else if (node.kind === 161 /* Parameter */) {
+                        else if (node.kind === 162 /* Parameter */) {
                             return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_parameter, "static");
                         }
                         else if (flags & 128 /* Abstract */) {
@@ -82134,18 +83692,18 @@
                         flags |= 32 /* Static */;
                         lastStatic = modifier;
                         break;
-                    case 142 /* ReadonlyKeyword */:
+                    case 143 /* ReadonlyKeyword */:
                         if (flags & 64 /* Readonly */) {
                             return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_already_seen, "readonly");
                         }
-                        else if (node.kind !== 164 /* PropertyDeclaration */ && node.kind !== 163 /* PropertySignature */ && node.kind !== 172 /* IndexSignature */ && node.kind !== 161 /* Parameter */) {
+                        else if (node.kind !== 165 /* PropertyDeclaration */ && node.kind !== 164 /* PropertySignature */ && node.kind !== 174 /* IndexSignature */ && node.kind !== 162 /* Parameter */) {
                             // If node.kind === SyntaxKind.Parameter, checkParameter reports an error if it's not a parameter property.
                             return grammarErrorOnNode(modifier, ts.Diagnostics.readonly_modifier_can_only_appear_on_a_property_declaration_or_index_signature);
                         }
                         flags |= 64 /* Readonly */;
                         lastReadonly = modifier;
                         break;
-                    case 92 /* ExportKeyword */:
+                    case 93 /* ExportKeyword */:
                         if (flags & 1 /* Export */) {
                             return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_already_seen, "export");
                         }
@@ -82161,19 +83719,22 @@
                         else if (ts.isClassLike(node.parent)) {
                             return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_class_elements_of_this_kind, "export");
                         }
-                        else if (node.kind === 161 /* Parameter */) {
+                        else if (node.kind === 162 /* Parameter */) {
                             return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_parameter, "export");
                         }
                         flags |= 1 /* Export */;
                         break;
-                    case 87 /* DefaultKeyword */:
-                        var container = node.parent.kind === 298 /* SourceFile */ ? node.parent : node.parent.parent;
-                        if (container.kind === 257 /* ModuleDeclaration */ && !ts.isAmbientModule(container)) {
+                    case 88 /* DefaultKeyword */:
+                        var container = node.parent.kind === 300 /* SourceFile */ ? node.parent : node.parent.parent;
+                        if (container.kind === 259 /* ModuleDeclaration */ && !ts.isAmbientModule(container)) {
                             return grammarErrorOnNode(modifier, ts.Diagnostics.A_default_export_can_only_be_used_in_an_ECMAScript_style_module);
                         }
+                        else if (!(flags & 1 /* Export */)) {
+                            return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_must_precede_1_modifier, "export", "default");
+                        }
                         flags |= 512 /* Default */;
                         break;
-                    case 133 /* DeclareKeyword */:
+                    case 134 /* DeclareKeyword */:
                         if (flags & 2 /* Ambient */) {
                             return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_already_seen, "declare");
                         }
@@ -82186,10 +83747,10 @@
                         else if (ts.isClassLike(node.parent) && !ts.isPropertyDeclaration(node)) {
                             return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_class_elements_of_this_kind, "declare");
                         }
-                        else if (node.kind === 161 /* Parameter */) {
+                        else if (node.kind === 162 /* Parameter */) {
                             return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_parameter, "declare");
                         }
-                        else if ((node.parent.flags & 8388608 /* Ambient */) && node.parent.kind === 258 /* ModuleBlock */) {
+                        else if ((node.parent.flags & 8388608 /* Ambient */) && node.parent.kind === 260 /* ModuleBlock */) {
                             return grammarErrorOnNode(modifier, ts.Diagnostics.A_declare_modifier_cannot_be_used_in_an_already_ambient_context);
                         }
                         else if (ts.isPrivateIdentifierClassElementDeclaration(node)) {
@@ -82198,19 +83759,19 @@
                         flags |= 2 /* Ambient */;
                         lastDeclare = modifier;
                         break;
-                    case 125 /* AbstractKeyword */:
+                    case 126 /* AbstractKeyword */:
                         if (flags & 128 /* Abstract */) {
                             return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_already_seen, "abstract");
                         }
-                        if (node.kind !== 253 /* ClassDeclaration */ &&
-                            node.kind !== 176 /* ConstructorType */) {
-                            if (node.kind !== 166 /* MethodDeclaration */ &&
-                                node.kind !== 164 /* PropertyDeclaration */ &&
-                                node.kind !== 168 /* GetAccessor */ &&
-                                node.kind !== 169 /* SetAccessor */) {
+                        if (node.kind !== 255 /* ClassDeclaration */ &&
+                            node.kind !== 178 /* ConstructorType */) {
+                            if (node.kind !== 167 /* MethodDeclaration */ &&
+                                node.kind !== 165 /* PropertyDeclaration */ &&
+                                node.kind !== 170 /* GetAccessor */ &&
+                                node.kind !== 171 /* SetAccessor */) {
                                 return grammarErrorOnNode(modifier, ts.Diagnostics.abstract_modifier_can_only_appear_on_a_class_method_or_property_declaration);
                             }
-                            if (!(node.parent.kind === 253 /* ClassDeclaration */ && ts.hasSyntacticModifier(node.parent, 128 /* Abstract */))) {
+                            if (!(node.parent.kind === 255 /* ClassDeclaration */ && ts.hasSyntacticModifier(node.parent, 128 /* Abstract */))) {
                                 return grammarErrorOnNode(modifier, ts.Diagnostics.Abstract_methods_can_only_appear_within_an_abstract_class);
                             }
                             if (flags & 32 /* Static */) {
@@ -82226,19 +83787,19 @@
                                 return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_must_precede_1_modifier, "abstract", "override");
                             }
                         }
-                        if (ts.isNamedDeclaration(node) && node.name.kind === 79 /* PrivateIdentifier */) {
+                        if (ts.isNamedDeclaration(node) && node.name.kind === 80 /* PrivateIdentifier */) {
                             return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_be_used_with_a_private_identifier, "abstract");
                         }
                         flags |= 128 /* Abstract */;
                         break;
-                    case 129 /* AsyncKeyword */:
+                    case 130 /* AsyncKeyword */:
                         if (flags & 256 /* Async */) {
                             return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_already_seen, "async");
                         }
                         else if (flags & 2 /* Ambient */ || node.parent.flags & 8388608 /* Ambient */) {
                             return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_be_used_in_an_ambient_context, "async");
                         }
-                        else if (node.kind === 161 /* Parameter */) {
+                        else if (node.kind === 162 /* Parameter */) {
                             return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_parameter, "async");
                         }
                         if (flags & 128 /* Abstract */) {
@@ -82249,7 +83810,7 @@
                         break;
                 }
             }
-            if (node.kind === 167 /* Constructor */) {
+            if (node.kind === 169 /* Constructor */) {
                 if (flags & 32 /* Static */) {
                     return grammarErrorOnNode(lastStatic, ts.Diagnostics._0_modifier_cannot_appear_on_a_constructor_declaration, "static");
                 }
@@ -82267,13 +83828,13 @@
                 }
                 return false;
             }
-            else if ((node.kind === 262 /* ImportDeclaration */ || node.kind === 261 /* ImportEqualsDeclaration */) && flags & 2 /* Ambient */) {
+            else if ((node.kind === 264 /* ImportDeclaration */ || node.kind === 263 /* ImportEqualsDeclaration */) && flags & 2 /* Ambient */) {
                 return grammarErrorOnNode(lastDeclare, ts.Diagnostics.A_0_modifier_cannot_be_used_with_an_import_declaration, "declare");
             }
-            else if (node.kind === 161 /* Parameter */ && (flags & 16476 /* ParameterPropertyModifier */) && ts.isBindingPattern(node.name)) {
+            else if (node.kind === 162 /* Parameter */ && (flags & 16476 /* ParameterPropertyModifier */) && ts.isBindingPattern(node.name)) {
                 return grammarErrorOnNode(node, ts.Diagnostics.A_parameter_property_may_not_be_declared_using_a_binding_pattern);
             }
-            else if (node.kind === 161 /* Parameter */ && (flags & 16476 /* ParameterPropertyModifier */) && node.dotDotDotToken) {
+            else if (node.kind === 162 /* Parameter */ && (flags & 16476 /* ParameterPropertyModifier */) && node.dotDotDotToken) {
                 return grammarErrorOnNode(node, ts.Diagnostics.A_parameter_property_cannot_be_declared_using_a_rest_parameter);
             }
             if (flags & 256 /* Async */) {
@@ -82294,39 +83855,40 @@
         }
         function shouldReportBadModifier(node) {
             switch (node.kind) {
-                case 168 /* GetAccessor */:
-                case 169 /* SetAccessor */:
-                case 167 /* Constructor */:
-                case 164 /* PropertyDeclaration */:
-                case 163 /* PropertySignature */:
-                case 166 /* MethodDeclaration */:
-                case 165 /* MethodSignature */:
-                case 172 /* IndexSignature */:
-                case 257 /* ModuleDeclaration */:
-                case 262 /* ImportDeclaration */:
-                case 261 /* ImportEqualsDeclaration */:
-                case 268 /* ExportDeclaration */:
-                case 267 /* ExportAssignment */:
-                case 209 /* FunctionExpression */:
-                case 210 /* ArrowFunction */:
-                case 161 /* Parameter */:
+                case 170 /* GetAccessor */:
+                case 171 /* SetAccessor */:
+                case 169 /* Constructor */:
+                case 165 /* PropertyDeclaration */:
+                case 164 /* PropertySignature */:
+                case 167 /* MethodDeclaration */:
+                case 166 /* MethodSignature */:
+                case 174 /* IndexSignature */:
+                case 259 /* ModuleDeclaration */:
+                case 264 /* ImportDeclaration */:
+                case 263 /* ImportEqualsDeclaration */:
+                case 270 /* ExportDeclaration */:
+                case 269 /* ExportAssignment */:
+                case 211 /* FunctionExpression */:
+                case 212 /* ArrowFunction */:
+                case 162 /* Parameter */:
                     return false;
                 default:
-                    if (node.parent.kind === 258 /* ModuleBlock */ || node.parent.kind === 298 /* SourceFile */) {
+                    if (node.parent.kind === 260 /* ModuleBlock */ || node.parent.kind === 300 /* SourceFile */) {
                         return false;
                     }
                     switch (node.kind) {
-                        case 252 /* FunctionDeclaration */:
-                            return nodeHasAnyModifiersExcept(node, 129 /* AsyncKeyword */);
-                        case 253 /* ClassDeclaration */:
-                        case 176 /* ConstructorType */:
-                            return nodeHasAnyModifiersExcept(node, 125 /* AbstractKeyword */);
-                        case 254 /* InterfaceDeclaration */:
-                        case 233 /* VariableStatement */:
-                        case 255 /* TypeAliasDeclaration */:
+                        case 254 /* FunctionDeclaration */:
+                            return nodeHasAnyModifiersExcept(node, 130 /* AsyncKeyword */);
+                        case 255 /* ClassDeclaration */:
+                        case 178 /* ConstructorType */:
+                            return nodeHasAnyModifiersExcept(node, 126 /* AbstractKeyword */);
+                        case 256 /* InterfaceDeclaration */:
+                        case 235 /* VariableStatement */:
+                        case 257 /* TypeAliasDeclaration */:
+                        case 168 /* ClassStaticBlockDeclaration */:
                             return true;
-                        case 256 /* EnumDeclaration */:
-                            return nodeHasAnyModifiersExcept(node, 84 /* ConstKeyword */);
+                        case 258 /* EnumDeclaration */:
+                            return nodeHasAnyModifiersExcept(node, 85 /* ConstKeyword */);
                         default:
                             ts.Debug.fail();
                     }
@@ -82337,10 +83899,10 @@
         }
         function checkGrammarAsyncModifier(node, asyncModifier) {
             switch (node.kind) {
-                case 166 /* MethodDeclaration */:
-                case 252 /* FunctionDeclaration */:
-                case 209 /* FunctionExpression */:
-                case 210 /* ArrowFunction */:
+                case 167 /* MethodDeclaration */:
+                case 254 /* FunctionDeclaration */:
+                case 211 /* FunctionExpression */:
+                case 212 /* ArrowFunction */:
                     return false;
             }
             return grammarErrorOnNode(asyncModifier, ts.Diagnostics._0_modifier_cannot_be_used_here, "async");
@@ -82403,7 +83965,7 @@
                             ts.addRelatedInfo(error(parameter, ts.Diagnostics.This_parameter_is_not_allowed_with_use_strict_directive), ts.createDiagnosticForNode(useStrictDirective_1, ts.Diagnostics.use_strict_directive_used_here));
                         });
                         var diagnostics_2 = nonSimpleParameters.map(function (parameter, index) { return (index === 0 ? ts.createDiagnosticForNode(parameter, ts.Diagnostics.Non_simple_parameter_declared_here) : ts.createDiagnosticForNode(parameter, ts.Diagnostics.and_here)); });
-                        ts.addRelatedInfo.apply(void 0, __spreadArray([error(useStrictDirective_1, ts.Diagnostics.use_strict_directive_cannot_be_used_with_non_simple_parameter_list)], diagnostics_2));
+                        ts.addRelatedInfo.apply(void 0, __spreadArray([error(useStrictDirective_1, ts.Diagnostics.use_strict_directive_cannot_be_used_with_non_simple_parameter_list)], diagnostics_2, false));
                         return true;
                     }
                 }
@@ -82459,15 +84021,12 @@
             if (!parameter.type) {
                 return grammarErrorOnNode(parameter.name, ts.Diagnostics.An_index_signature_parameter_must_have_a_type_annotation);
             }
-            if (parameter.type.kind !== 147 /* StringKeyword */ && parameter.type.kind !== 144 /* NumberKeyword */) {
-                var type = getTypeFromTypeNode(parameter.type);
-                if (type.flags & 4 /* String */ || type.flags & 8 /* Number */) {
-                    return grammarErrorOnNode(parameter.name, ts.Diagnostics.An_index_signature_parameter_type_cannot_be_a_type_alias_Consider_writing_0_Colon_1_Colon_2_instead, ts.getTextOfNode(parameter.name), typeToString(type), typeToString(node.type ? getTypeFromTypeNode(node.type) : anyType));
-                }
-                if (type.flags & 1048576 /* Union */ && allTypesAssignableToKind(type, 384 /* StringOrNumberLiteral */, /*strict*/ true)) {
-                    return grammarErrorOnNode(parameter.name, ts.Diagnostics.An_index_signature_parameter_type_cannot_be_a_union_type_Consider_using_a_mapped_object_type_instead);
-                }
-                return grammarErrorOnNode(parameter.name, ts.Diagnostics.An_index_signature_parameter_type_must_be_either_string_or_number);
+            var type = getTypeFromTypeNode(parameter.type);
+            if (someType(type, function (t) { return !!(t.flags & 8576 /* StringOrNumberLiteralOrUnique */); }) || isGenericType(type)) {
+                return grammarErrorOnNode(parameter.name, ts.Diagnostics.An_index_signature_parameter_type_cannot_be_a_literal_type_or_generic_type_Consider_using_a_mapped_object_type_instead);
+            }
+            if (!everyType(type, isValidIndexKeyType)) {
+                return grammarErrorOnNode(parameter.name, ts.Diagnostics.An_index_signature_parameter_type_must_be_string_number_symbol_or_a_template_literal_type);
             }
             if (!node.type) {
                 return grammarErrorOnNode(node, ts.Diagnostics.An_index_signature_must_have_a_type_annotation);
@@ -82501,7 +84060,7 @@
             if (args) {
                 for (var _i = 0, args_4 = args; _i < args_4.length; _i++) {
                     var arg = args_4[_i];
-                    if (arg.kind === 223 /* OmittedExpression */) {
+                    if (arg.kind === 225 /* OmittedExpression */) {
                         return grammarErrorAtPos(arg, arg.pos, 0, ts.Diagnostics.Argument_expression_expected);
                     }
                 }
@@ -82531,7 +84090,7 @@
             if (!checkGrammarDecoratorsAndModifiers(node) && node.heritageClauses) {
                 for (var _i = 0, _a = node.heritageClauses; _i < _a.length; _i++) {
                     var heritageClause = _a[_i];
-                    if (heritageClause.token === 93 /* ExtendsKeyword */) {
+                    if (heritageClause.token === 94 /* ExtendsKeyword */) {
                         if (seenExtendsClause) {
                             return grammarErrorOnFirstToken(heritageClause, ts.Diagnostics.extends_clause_already_seen);
                         }
@@ -82544,7 +84103,7 @@
                         seenExtendsClause = true;
                     }
                     else {
-                        ts.Debug.assert(heritageClause.token === 116 /* ImplementsKeyword */);
+                        ts.Debug.assert(heritageClause.token === 117 /* ImplementsKeyword */);
                         if (seenImplementsClause) {
                             return grammarErrorOnFirstToken(heritageClause, ts.Diagnostics.implements_clause_already_seen);
                         }
@@ -82560,14 +84119,14 @@
             if (node.heritageClauses) {
                 for (var _i = 0, _a = node.heritageClauses; _i < _a.length; _i++) {
                     var heritageClause = _a[_i];
-                    if (heritageClause.token === 93 /* ExtendsKeyword */) {
+                    if (heritageClause.token === 94 /* ExtendsKeyword */) {
                         if (seenExtendsClause) {
                             return grammarErrorOnFirstToken(heritageClause, ts.Diagnostics.extends_clause_already_seen);
                         }
                         seenExtendsClause = true;
                     }
                     else {
-                        ts.Debug.assert(heritageClause.token === 116 /* ImplementsKeyword */);
+                        ts.Debug.assert(heritageClause.token === 117 /* ImplementsKeyword */);
                         return grammarErrorOnFirstToken(heritageClause, ts.Diagnostics.Interface_declaration_cannot_have_implements_clause);
                     }
                     // Grammar checking heritageClause inside class declaration
@@ -82578,20 +84137,20 @@
         }
         function checkGrammarComputedPropertyName(node) {
             // If node is not a computedPropertyName, just skip the grammar checking
-            if (node.kind !== 159 /* ComputedPropertyName */) {
+            if (node.kind !== 160 /* ComputedPropertyName */) {
                 return false;
             }
             var computedPropertyName = node;
-            if (computedPropertyName.expression.kind === 217 /* BinaryExpression */ && computedPropertyName.expression.operatorToken.kind === 27 /* CommaToken */) {
+            if (computedPropertyName.expression.kind === 219 /* BinaryExpression */ && computedPropertyName.expression.operatorToken.kind === 27 /* CommaToken */) {
                 return grammarErrorOnNode(computedPropertyName.expression, ts.Diagnostics.A_comma_expression_is_not_allowed_in_a_computed_property_name);
             }
             return false;
         }
         function checkGrammarForGenerator(node) {
             if (node.asteriskToken) {
-                ts.Debug.assert(node.kind === 252 /* FunctionDeclaration */ ||
-                    node.kind === 209 /* FunctionExpression */ ||
-                    node.kind === 166 /* MethodDeclaration */);
+                ts.Debug.assert(node.kind === 254 /* FunctionDeclaration */ ||
+                    node.kind === 211 /* FunctionExpression */ ||
+                    node.kind === 167 /* MethodDeclaration */);
                 if (node.flags & 8388608 /* Ambient */) {
                     return grammarErrorOnNode(node.asteriskToken, ts.Diagnostics.Generators_are_not_allowed_in_an_ambient_context);
                 }
@@ -82610,7 +84169,7 @@
             var seen = new ts.Map();
             for (var _i = 0, _a = node.properties; _i < _a.length; _i++) {
                 var prop = _a[_i];
-                if (prop.kind === 291 /* SpreadAssignment */) {
+                if (prop.kind === 293 /* SpreadAssignment */) {
                     if (inDestructuring) {
                         // a rest property cannot be destructured any further
                         var expression = ts.skipParentheses(prop.expression);
@@ -82621,16 +84180,16 @@
                     continue;
                 }
                 var name = prop.name;
-                if (name.kind === 159 /* ComputedPropertyName */) {
+                if (name.kind === 160 /* ComputedPropertyName */) {
                     // If the name is not a ComputedPropertyName, the grammar checking will skip it
                     checkGrammarComputedPropertyName(name);
                 }
-                if (prop.kind === 290 /* ShorthandPropertyAssignment */ && !inDestructuring && prop.objectAssignmentInitializer) {
+                if (prop.kind === 292 /* ShorthandPropertyAssignment */ && !inDestructuring && prop.objectAssignmentInitializer) {
                     // having objectAssignmentInitializer is only valid in ObjectAssignmentPattern
                     // outside of destructuring it is a syntax error
                     return grammarErrorOnNode(prop.equalsToken, ts.Diagnostics.Did_you_mean_to_use_a_Colon_An_can_only_follow_a_property_name_when_the_containing_object_literal_is_part_of_a_destructuring_pattern);
                 }
-                if (name.kind === 79 /* PrivateIdentifier */) {
+                if (name.kind === 80 /* PrivateIdentifier */) {
                     grammarErrorOnNode(name, ts.Diagnostics.Private_identifiers_are_not_allowed_outside_class_bodies);
                 }
                 // Modifiers are never allowed on properties except for 'async' on a method declaration
@@ -82638,7 +84197,7 @@
                     // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion
                     for (var _b = 0, _c = prop.modifiers; _b < _c.length; _b++) { // TODO: GH#19955
                         var mod = _c[_b];
-                        if (mod.kind !== 129 /* AsyncKeyword */ || prop.kind !== 166 /* MethodDeclaration */) {
+                        if (mod.kind !== 130 /* AsyncKeyword */ || prop.kind !== 167 /* MethodDeclaration */) {
                             grammarErrorOnNode(mod, ts.Diagnostics._0_modifier_cannot_be_used_here, ts.getTextOfNode(mod));
                         }
                     }
@@ -82653,10 +84212,10 @@
                 // and either both previous and propId.descriptor have[[Get]] fields or both previous and propId.descriptor have[[Set]] fields
                 var currentKind = void 0;
                 switch (prop.kind) {
-                    case 290 /* ShorthandPropertyAssignment */:
+                    case 292 /* ShorthandPropertyAssignment */:
                         checkGrammarForInvalidExclamationToken(prop.exclamationToken, ts.Diagnostics.A_definite_assignment_assertion_is_not_permitted_in_this_context);
                     // falls through
-                    case 289 /* PropertyAssignment */:
+                    case 291 /* PropertyAssignment */:
                         // Grammar checking for computedPropertyName and shorthandPropertyAssignment
                         checkGrammarForInvalidQuestionMark(prop.questionToken, ts.Diagnostics.An_object_member_cannot_be_declared_optional);
                         if (name.kind === 8 /* NumericLiteral */) {
@@ -82664,13 +84223,13 @@
                         }
                         currentKind = 4 /* PropertyAssignment */;
                         break;
-                    case 166 /* MethodDeclaration */:
+                    case 167 /* MethodDeclaration */:
                         currentKind = 8 /* Method */;
                         break;
-                    case 168 /* GetAccessor */:
+                    case 170 /* GetAccessor */:
                         currentKind = 1 /* GetAccessor */;
                         break;
-                    case 169 /* SetAccessor */:
+                    case 171 /* SetAccessor */:
                         currentKind = 2 /* SetAccessor */;
                         break;
                     default:
@@ -82710,7 +84269,7 @@
             var seen = new ts.Map();
             for (var _i = 0, _a = node.attributes.properties; _i < _a.length; _i++) {
                 var attr = _a[_i];
-                if (attr.kind === 283 /* JsxSpreadAttribute */) {
+                if (attr.kind === 285 /* JsxSpreadAttribute */) {
                     continue;
                 }
                 var name = attr.name, initializer = attr.initializer;
@@ -82720,7 +84279,7 @@
                 else {
                     return grammarErrorOnNode(name, ts.Diagnostics.JSX_elements_cannot_have_multiple_attributes_with_the_same_name);
                 }
-                if (initializer && initializer.kind === 284 /* JsxExpression */ && !initializer.expression) {
+                if (initializer && initializer.kind === 286 /* JsxExpression */ && !initializer.expression) {
                     return grammarErrorOnNode(initializer, ts.Diagnostics.JSX_attributes_must_only_be_assigned_a_non_empty_expression);
                 }
             }
@@ -82755,7 +84314,7 @@
             if (checkGrammarStatementInAmbientContext(forInOrOfStatement)) {
                 return true;
             }
-            if (forInOrOfStatement.kind === 240 /* ForOfStatement */ && forInOrOfStatement.awaitModifier) {
+            if (forInOrOfStatement.kind === 242 /* ForOfStatement */ && forInOrOfStatement.awaitModifier) {
                 if (!(forInOrOfStatement.flags & 32768 /* AwaitContext */)) {
                     var sourceFile = ts.getSourceFileOfNode(forInOrOfStatement);
                     if (ts.isInTopLevelContext(forInOrOfStatement)) {
@@ -82773,7 +84332,7 @@
                         if (!hasParseDiagnostics(sourceFile)) {
                             var diagnostic = ts.createDiagnosticForNode(forInOrOfStatement.awaitModifier, ts.Diagnostics.for_await_loops_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules);
                             var func = ts.getContainingFunction(forInOrOfStatement);
-                            if (func && func.kind !== 167 /* Constructor */) {
+                            if (func && func.kind !== 169 /* Constructor */) {
                                 ts.Debug.assert((ts.getFunctionFlags(func) & 2 /* Async */) === 0, "Enclosing function should never be an async function.");
                                 var relatedInfo = ts.createDiagnosticForNode(func, ts.Diagnostics.Did_you_mean_to_mark_this_function_as_async);
                                 ts.addRelatedInfo(diagnostic, relatedInfo);
@@ -82785,7 +84344,12 @@
                     return false;
                 }
             }
-            if (forInOrOfStatement.initializer.kind === 251 /* VariableDeclarationList */) {
+            if (ts.isForOfStatement(forInOrOfStatement) && !(forInOrOfStatement.flags & 32768 /* AwaitContext */) &&
+                ts.isIdentifier(forInOrOfStatement.initializer) && forInOrOfStatement.initializer.escapedText === "async") {
+                grammarErrorOnNode(forInOrOfStatement.initializer, ts.Diagnostics.The_left_hand_side_of_a_for_of_statement_may_not_be_async);
+                return false;
+            }
+            if (forInOrOfStatement.initializer.kind === 253 /* VariableDeclarationList */) {
                 var variableList = forInOrOfStatement.initializer;
                 if (!checkGrammarVariableDeclarationList(variableList)) {
                     var declarations = variableList.declarations;
@@ -82800,20 +84364,20 @@
                         return false;
                     }
                     if (declarations.length > 1) {
-                        var diagnostic = forInOrOfStatement.kind === 239 /* ForInStatement */
+                        var diagnostic = forInOrOfStatement.kind === 241 /* ForInStatement */
                             ? ts.Diagnostics.Only_a_single_variable_declaration_is_allowed_in_a_for_in_statement
                             : ts.Diagnostics.Only_a_single_variable_declaration_is_allowed_in_a_for_of_statement;
                         return grammarErrorOnFirstToken(variableList.declarations[1], diagnostic);
                     }
                     var firstDeclaration = declarations[0];
                     if (firstDeclaration.initializer) {
-                        var diagnostic = forInOrOfStatement.kind === 239 /* ForInStatement */
+                        var diagnostic = forInOrOfStatement.kind === 241 /* ForInStatement */
                             ? ts.Diagnostics.The_variable_declaration_of_a_for_in_statement_cannot_have_an_initializer
                             : ts.Diagnostics.The_variable_declaration_of_a_for_of_statement_cannot_have_an_initializer;
                         return grammarErrorOnNode(firstDeclaration.name, diagnostic);
                     }
                     if (firstDeclaration.type) {
-                        var diagnostic = forInOrOfStatement.kind === 239 /* ForInStatement */
+                        var diagnostic = forInOrOfStatement.kind === 241 /* ForInStatement */
                             ? ts.Diagnostics.The_left_hand_side_of_a_for_in_statement_cannot_use_a_type_annotation
                             : ts.Diagnostics.The_left_hand_side_of_a_for_of_statement_cannot_use_a_type_annotation;
                         return grammarErrorOnNode(firstDeclaration, diagnostic);
@@ -82823,7 +84387,7 @@
             return false;
         }
         function checkGrammarAccessor(accessor) {
-            if (!(accessor.flags & 8388608 /* Ambient */) && (accessor.parent.kind !== 178 /* TypeLiteral */) && (accessor.parent.kind !== 254 /* InterfaceDeclaration */)) {
+            if (!(accessor.flags & 8388608 /* Ambient */) && (accessor.parent.kind !== 180 /* TypeLiteral */) && (accessor.parent.kind !== 256 /* InterfaceDeclaration */)) {
                 if (languageVersion < 1 /* ES5 */) {
                     return grammarErrorOnNode(accessor.name, ts.Diagnostics.Accessors_are_only_available_when_targeting_ECMAScript_5_and_higher);
                 }
@@ -82838,7 +84402,7 @@
                 if (ts.hasSyntacticModifier(accessor, 128 /* Abstract */)) {
                     return grammarErrorOnNode(accessor, ts.Diagnostics.An_abstract_accessor_cannot_have_an_implementation);
                 }
-                if (accessor.parent.kind === 178 /* TypeLiteral */ || accessor.parent.kind === 254 /* InterfaceDeclaration */) {
+                if (accessor.parent.kind === 180 /* TypeLiteral */ || accessor.parent.kind === 256 /* InterfaceDeclaration */) {
                     return grammarErrorOnNode(accessor.body, ts.Diagnostics.An_implementation_cannot_be_declared_in_ambient_contexts);
                 }
             }
@@ -82846,11 +84410,11 @@
                 return grammarErrorOnNode(accessor.name, ts.Diagnostics.An_accessor_cannot_have_type_parameters);
             }
             if (!doesAccessorHaveCorrectParameterCount(accessor)) {
-                return grammarErrorOnNode(accessor.name, accessor.kind === 168 /* GetAccessor */ ?
+                return grammarErrorOnNode(accessor.name, accessor.kind === 170 /* GetAccessor */ ?
                     ts.Diagnostics.A_get_accessor_cannot_have_parameters :
                     ts.Diagnostics.A_set_accessor_must_have_exactly_one_parameter);
             }
-            if (accessor.kind === 169 /* SetAccessor */) {
+            if (accessor.kind === 171 /* SetAccessor */) {
                 if (accessor.type) {
                     return grammarErrorOnNode(accessor.name, ts.Diagnostics.A_set_accessor_cannot_have_a_return_type_annotation);
                 }
@@ -82872,17 +84436,17 @@
          * A set accessor has one parameter or a `this` parameter and one more parameter.
          */
         function doesAccessorHaveCorrectParameterCount(accessor) {
-            return getAccessorThisParameter(accessor) || accessor.parameters.length === (accessor.kind === 168 /* GetAccessor */ ? 0 : 1);
+            return getAccessorThisParameter(accessor) || accessor.parameters.length === (accessor.kind === 170 /* GetAccessor */ ? 0 : 1);
         }
         function getAccessorThisParameter(accessor) {
-            if (accessor.parameters.length === (accessor.kind === 168 /* GetAccessor */ ? 1 : 2)) {
+            if (accessor.parameters.length === (accessor.kind === 170 /* GetAccessor */ ? 1 : 2)) {
                 return ts.getThisParameter(accessor);
             }
         }
         function checkGrammarTypeOperatorNode(node) {
-            if (node.operator === 151 /* UniqueKeyword */) {
-                if (node.type.kind !== 148 /* SymbolKeyword */) {
-                    return grammarErrorOnNode(node.type, ts.Diagnostics._0_expected, ts.tokenToString(148 /* SymbolKeyword */));
+            if (node.operator === 152 /* UniqueKeyword */) {
+                if (node.type.kind !== 149 /* SymbolKeyword */) {
+                    return grammarErrorOnNode(node.type, ts.Diagnostics._0_expected, ts.tokenToString(149 /* SymbolKeyword */));
                 }
                 var parent = ts.walkUpParenthesizedTypes(node.parent);
                 if (ts.isInJSFile(parent) && ts.isJSDocTypeExpression(parent)) {
@@ -82893,9 +84457,9 @@
                     }
                 }
                 switch (parent.kind) {
-                    case 250 /* VariableDeclaration */:
+                    case 252 /* VariableDeclaration */:
                         var decl = parent;
-                        if (decl.name.kind !== 78 /* Identifier */) {
+                        if (decl.name.kind !== 79 /* Identifier */) {
                             return grammarErrorOnNode(node, ts.Diagnostics.unique_symbol_types_may_not_be_used_on_a_variable_declaration_with_a_binding_name);
                         }
                         if (!ts.isVariableDeclarationInVariableStatement(decl)) {
@@ -82905,13 +84469,13 @@
                             return grammarErrorOnNode(parent.name, ts.Diagnostics.A_variable_whose_type_is_a_unique_symbol_type_must_be_const);
                         }
                         break;
-                    case 164 /* PropertyDeclaration */:
-                        if (!ts.hasSyntacticModifier(parent, 32 /* Static */) ||
-                            !ts.hasEffectiveModifier(parent, 64 /* Readonly */)) {
+                    case 165 /* PropertyDeclaration */:
+                        if (!ts.isStatic(parent) ||
+                            !ts.hasEffectiveReadonlyModifier(parent)) {
                             return grammarErrorOnNode(parent.name, ts.Diagnostics.A_property_of_a_class_whose_type_is_a_unique_symbol_type_must_be_both_static_and_readonly);
                         }
                         break;
-                    case 163 /* PropertySignature */:
+                    case 164 /* PropertySignature */:
                         if (!ts.hasSyntacticModifier(parent, 64 /* Readonly */)) {
                             return grammarErrorOnNode(parent.name, ts.Diagnostics.A_property_of_an_interface_or_type_literal_whose_type_is_a_unique_symbol_type_must_be_readonly);
                         }
@@ -82920,9 +84484,9 @@
                         return grammarErrorOnNode(node, ts.Diagnostics.unique_symbol_types_are_not_allowed_here);
                 }
             }
-            else if (node.operator === 142 /* ReadonlyKeyword */) {
-                if (node.type.kind !== 179 /* ArrayType */ && node.type.kind !== 180 /* TupleType */) {
-                    return grammarErrorOnFirstToken(node, ts.Diagnostics.readonly_type_modifier_is_only_permitted_on_array_and_tuple_literal_types, ts.tokenToString(148 /* SymbolKeyword */));
+            else if (node.operator === 143 /* ReadonlyKeyword */) {
+                if (node.type.kind !== 181 /* ArrayType */ && node.type.kind !== 182 /* TupleType */) {
+                    return grammarErrorOnFirstToken(node, ts.Diagnostics.readonly_type_modifier_is_only_permitted_on_array_and_tuple_literal_types, ts.tokenToString(149 /* SymbolKeyword */));
                 }
             }
         }
@@ -82935,10 +84499,10 @@
             if (checkGrammarFunctionLikeDeclaration(node)) {
                 return true;
             }
-            if (node.kind === 166 /* MethodDeclaration */) {
-                if (node.parent.kind === 201 /* ObjectLiteralExpression */) {
+            if (node.kind === 167 /* MethodDeclaration */) {
+                if (node.parent.kind === 203 /* ObjectLiteralExpression */) {
                     // We only disallow modifier on a method declaration if it is a property of object-literal-expression
-                    if (node.modifiers && !(node.modifiers.length === 1 && ts.first(node.modifiers).kind === 129 /* AsyncKeyword */)) {
+                    if (node.modifiers && !(node.modifiers.length === 1 && ts.first(node.modifiers).kind === 130 /* AsyncKeyword */)) {
                         return grammarErrorOnFirstToken(node, ts.Diagnostics.Modifiers_cannot_appear_here);
                     }
                     else if (checkGrammarForInvalidQuestionMark(node.questionToken, ts.Diagnostics.An_object_member_cannot_be_declared_optional)) {
@@ -82967,29 +84531,29 @@
                 if (node.flags & 8388608 /* Ambient */) {
                     return checkGrammarForInvalidDynamicName(node.name, ts.Diagnostics.A_computed_property_name_in_an_ambient_context_must_refer_to_an_expression_whose_type_is_a_literal_type_or_a_unique_symbol_type);
                 }
-                else if (node.kind === 166 /* MethodDeclaration */ && !node.body) {
+                else if (node.kind === 167 /* MethodDeclaration */ && !node.body) {
                     return checkGrammarForInvalidDynamicName(node.name, ts.Diagnostics.A_computed_property_name_in_a_method_overload_must_refer_to_an_expression_whose_type_is_a_literal_type_or_a_unique_symbol_type);
                 }
             }
-            else if (node.parent.kind === 254 /* InterfaceDeclaration */) {
+            else if (node.parent.kind === 256 /* InterfaceDeclaration */) {
                 return checkGrammarForInvalidDynamicName(node.name, ts.Diagnostics.A_computed_property_name_in_an_interface_must_refer_to_an_expression_whose_type_is_a_literal_type_or_a_unique_symbol_type);
             }
-            else if (node.parent.kind === 178 /* TypeLiteral */) {
+            else if (node.parent.kind === 180 /* TypeLiteral */) {
                 return checkGrammarForInvalidDynamicName(node.name, ts.Diagnostics.A_computed_property_name_in_a_type_literal_must_refer_to_an_expression_whose_type_is_a_literal_type_or_a_unique_symbol_type);
             }
         }
         function checkGrammarBreakOrContinueStatement(node) {
             var current = node;
             while (current) {
-                if (ts.isFunctionLike(current)) {
+                if (ts.isFunctionLikeOrClassStaticBlockDeclaration(current)) {
                     return grammarErrorOnNode(node, ts.Diagnostics.Jump_target_cannot_cross_function_boundary);
                 }
                 switch (current.kind) {
-                    case 246 /* LabeledStatement */:
+                    case 248 /* LabeledStatement */:
                         if (node.label && current.label.escapedText === node.label.escapedText) {
                             // found matching label - verify that label usage is correct
                             // continue can only target labels that are on iteration statements
-                            var isMisplacedContinueLabel = node.kind === 241 /* ContinueStatement */
+                            var isMisplacedContinueLabel = node.kind === 243 /* ContinueStatement */
                                 && !ts.isIterationStatement(current.statement, /*lookInLabeledStatement*/ true);
                             if (isMisplacedContinueLabel) {
                                 return grammarErrorOnNode(node, ts.Diagnostics.A_continue_statement_can_only_jump_to_a_label_of_an_enclosing_iteration_statement);
@@ -82997,8 +84561,8 @@
                             return false;
                         }
                         break;
-                    case 245 /* SwitchStatement */:
-                        if (node.kind === 242 /* BreakStatement */ && !node.label) {
+                    case 247 /* SwitchStatement */:
+                        if (node.kind === 244 /* BreakStatement */ && !node.label) {
                             // unlabeled break within switch statement - ok
                             return false;
                         }
@@ -83013,13 +84577,13 @@
                 current = current.parent;
             }
             if (node.label) {
-                var message = node.kind === 242 /* BreakStatement */
+                var message = node.kind === 244 /* BreakStatement */
                     ? ts.Diagnostics.A_break_statement_can_only_jump_to_a_label_of_an_enclosing_statement
                     : ts.Diagnostics.A_continue_statement_can_only_jump_to_a_label_of_an_enclosing_iteration_statement;
                 return grammarErrorOnNode(node, message);
             }
             else {
-                var message = node.kind === 242 /* BreakStatement */
+                var message = node.kind === 244 /* BreakStatement */
                     ? ts.Diagnostics.A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement
                     : ts.Diagnostics.A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement;
                 return grammarErrorOnNode(node, message);
@@ -83043,12 +84607,12 @@
         }
         function isStringOrNumberLiteralExpression(expr) {
             return ts.isStringOrNumericLiteralLike(expr) ||
-                expr.kind === 215 /* PrefixUnaryExpression */ && expr.operator === 40 /* MinusToken */ &&
+                expr.kind === 217 /* PrefixUnaryExpression */ && expr.operator === 40 /* MinusToken */ &&
                     expr.operand.kind === 8 /* NumericLiteral */;
         }
         function isBigIntLiteralExpression(expr) {
             return expr.kind === 9 /* BigIntLiteral */ ||
-                expr.kind === 215 /* PrefixUnaryExpression */ && expr.operator === 40 /* MinusToken */ &&
+                expr.kind === 217 /* PrefixUnaryExpression */ && expr.operator === 40 /* MinusToken */ &&
                     expr.operand.kind === 9 /* BigIntLiteral */;
         }
         function isSimpleLiteralEnumReference(expr) {
@@ -83062,7 +84626,7 @@
             if (initializer) {
                 var isInvalidInitializer = !(isStringOrNumberLiteralExpression(initializer) ||
                     isSimpleLiteralEnumReference(initializer) ||
-                    initializer.kind === 109 /* TrueKeyword */ || initializer.kind === 94 /* FalseKeyword */ ||
+                    initializer.kind === 110 /* TrueKeyword */ || initializer.kind === 95 /* FalseKeyword */ ||
                     isBigIntLiteralExpression(initializer));
                 var isConstOrReadonly = ts.isDeclarationReadonly(node) || ts.isVariableDeclaration(node) && ts.isVarConst(node);
                 if (isConstOrReadonly && !node.type) {
@@ -83079,7 +84643,7 @@
             }
         }
         function checkGrammarVariableDeclaration(node) {
-            if (node.parent.parent.kind !== 239 /* ForInStatement */ && node.parent.parent.kind !== 240 /* ForOfStatement */) {
+            if (node.parent.parent.kind !== 241 /* ForInStatement */ && node.parent.parent.kind !== 242 /* ForOfStatement */) {
                 if (node.flags & 8388608 /* Ambient */) {
                     checkAmbientInitializer(node);
                 }
@@ -83092,7 +84656,7 @@
                     }
                 }
             }
-            if (node.exclamationToken && (node.parent.parent.kind !== 233 /* VariableStatement */ || !node.type || node.initializer || node.flags & 8388608 /* Ambient */)) {
+            if (node.exclamationToken && (node.parent.parent.kind !== 235 /* VariableStatement */ || !node.type || node.initializer || node.flags & 8388608 /* Ambient */)) {
                 var message = node.initializer
                     ? ts.Diagnostics.Declarations_with_initializers_cannot_also_have_definite_assignment_assertions
                     : !node.type
@@ -83115,7 +84679,7 @@
             return checkLetConstNames && checkGrammarNameInLetOrConstDeclarations(node.name);
         }
         function checkESModuleMarker(name) {
-            if (name.kind === 78 /* Identifier */) {
+            if (name.kind === 79 /* Identifier */) {
                 if (ts.idText(name) === "__esModule") {
                     return grammarErrorOnNodeSkippedOn("noEmit", name, ts.Diagnostics.Identifier_expected_esModule_is_reserved_as_an_exported_marker_when_transforming_ECMAScript_modules);
                 }
@@ -83132,8 +84696,8 @@
             return false;
         }
         function checkGrammarNameInLetOrConstDeclarations(name) {
-            if (name.kind === 78 /* Identifier */) {
-                if (name.originalKeywordKind === 118 /* LetKeyword */) {
+            if (name.kind === 79 /* Identifier */) {
+                if (name.originalKeywordKind === 119 /* LetKeyword */) {
                     return grammarErrorOnNode(name, ts.Diagnostics.let_is_not_allowed_to_be_used_as_a_name_in_let_or_const_declarations);
                 }
             }
@@ -83160,15 +84724,15 @@
         }
         function allowLetAndConstDeclarations(parent) {
             switch (parent.kind) {
-                case 235 /* IfStatement */:
-                case 236 /* DoStatement */:
-                case 237 /* WhileStatement */:
-                case 244 /* WithStatement */:
-                case 238 /* ForStatement */:
-                case 239 /* ForInStatement */:
-                case 240 /* ForOfStatement */:
+                case 237 /* IfStatement */:
+                case 238 /* DoStatement */:
+                case 239 /* WhileStatement */:
+                case 246 /* WithStatement */:
+                case 240 /* ForStatement */:
+                case 241 /* ForInStatement */:
+                case 242 /* ForOfStatement */:
                     return false;
-                case 246 /* LabeledStatement */:
+                case 248 /* LabeledStatement */:
                     return allowLetAndConstDeclarations(parent.parent);
             }
             return true;
@@ -83186,12 +84750,12 @@
         function checkGrammarMetaProperty(node) {
             var escapedText = node.name.escapedText;
             switch (node.keywordToken) {
-                case 102 /* NewKeyword */:
+                case 103 /* NewKeyword */:
                     if (escapedText !== "target") {
                         return grammarErrorOnNode(node.name, ts.Diagnostics._0_is_not_a_valid_meta_property_for_keyword_1_Did_you_mean_2, node.name.escapedText, ts.tokenToString(node.keywordToken), "target");
                     }
                     break;
-                case 99 /* ImportKeyword */:
+                case 100 /* ImportKeyword */:
                     if (escapedText !== "meta") {
                         return grammarErrorOnNode(node.name, ts.Diagnostics._0_is_not_a_valid_meta_property_for_keyword_1_Did_you_mean_2, node.name.escapedText, ts.tokenToString(node.keywordToken), "meta");
                     }
@@ -83260,7 +84824,7 @@
                     return grammarErrorOnNode(node.name, ts.Diagnostics.Private_identifiers_are_only_available_when_targeting_ECMAScript_2015_and_higher);
                 }
             }
-            else if (node.parent.kind === 254 /* InterfaceDeclaration */) {
+            else if (node.parent.kind === 256 /* InterfaceDeclaration */) {
                 if (checkGrammarForInvalidDynamicName(node.name, ts.Diagnostics.A_computed_property_name_in_an_interface_must_refer_to_an_expression_whose_type_is_a_literal_type_or_a_unique_symbol_type)) {
                     return true;
                 }
@@ -83268,7 +84832,7 @@
                     return grammarErrorOnNode(node.initializer, ts.Diagnostics.An_interface_property_cannot_have_an_initializer);
                 }
             }
-            else if (node.parent.kind === 178 /* TypeLiteral */) {
+            else if (node.parent.kind === 180 /* TypeLiteral */) {
                 if (checkGrammarForInvalidDynamicName(node.name, ts.Diagnostics.A_computed_property_name_in_a_type_literal_must_refer_to_an_expression_whose_type_is_a_literal_type_or_a_unique_symbol_type)) {
                     return true;
                 }
@@ -83280,7 +84844,7 @@
                 checkAmbientInitializer(node);
             }
             if (ts.isPropertyDeclaration(node) && node.exclamationToken && (!ts.isClassLike(node.parent) || !node.type || node.initializer ||
-                node.flags & 8388608 /* Ambient */ || ts.hasSyntacticModifier(node, 32 /* Static */ | 128 /* Abstract */))) {
+                node.flags & 8388608 /* Ambient */ || ts.isStatic(node) || ts.hasAbstractModifier(node))) {
                 var message = node.initializer
                     ? ts.Diagnostics.Declarations_with_initializers_cannot_also_have_definite_assignment_assertions
                     : !node.type
@@ -83302,13 +84866,13 @@
             //     export_opt   AmbientDeclaration
             //
             // TODO: The spec needs to be amended to reflect this grammar.
-            if (node.kind === 254 /* InterfaceDeclaration */ ||
-                node.kind === 255 /* TypeAliasDeclaration */ ||
-                node.kind === 262 /* ImportDeclaration */ ||
-                node.kind === 261 /* ImportEqualsDeclaration */ ||
-                node.kind === 268 /* ExportDeclaration */ ||
-                node.kind === 267 /* ExportAssignment */ ||
-                node.kind === 260 /* NamespaceExportDeclaration */ ||
+            if (node.kind === 256 /* InterfaceDeclaration */ ||
+                node.kind === 257 /* TypeAliasDeclaration */ ||
+                node.kind === 264 /* ImportDeclaration */ ||
+                node.kind === 263 /* ImportEqualsDeclaration */ ||
+                node.kind === 270 /* ExportDeclaration */ ||
+                node.kind === 269 /* ExportAssignment */ ||
+                node.kind === 262 /* NamespaceExportDeclaration */ ||
                 ts.hasSyntacticModifier(node, 2 /* Ambient */ | 1 /* Export */ | 512 /* Default */)) {
                 return false;
             }
@@ -83317,7 +84881,7 @@
         function checkGrammarTopLevelElementsForRequiredDeclareModifier(file) {
             for (var _i = 0, _a = file.statements; _i < _a.length; _i++) {
                 var decl = _a[_i];
-                if (ts.isDeclaration(decl) || decl.kind === 233 /* VariableStatement */) {
+                if (ts.isDeclaration(decl) || decl.kind === 235 /* VariableStatement */) {
                     if (checkGrammarTopLevelElementForRequiredDeclareModifier(decl)) {
                         return true;
                     }
@@ -83340,7 +84904,7 @@
                 // to prevent noisiness.  So use a bit on the block to indicate if
                 // this has already been reported, and don't report if it has.
                 //
-                if (node.parent.kind === 231 /* Block */ || node.parent.kind === 258 /* ModuleBlock */ || node.parent.kind === 298 /* SourceFile */) {
+                if (node.parent.kind === 233 /* Block */ || node.parent.kind === 260 /* ModuleBlock */ || node.parent.kind === 300 /* SourceFile */) {
                     var links_2 = getNodeLinks(node.parent);
                     // Check if the containing block ever report this error
                     if (!links_2.hasReportedStatementInAmbientContext) {
@@ -83362,10 +84926,10 @@
                 if (languageVersion >= 1 /* ES5 */) {
                     diagnosticMessage = ts.Diagnostics.Octal_literals_are_not_available_when_targeting_ECMAScript_5_and_higher_Use_the_syntax_0;
                 }
-                else if (ts.isChildOfNodeWithKind(node, 192 /* LiteralType */)) {
+                else if (ts.isChildOfNodeWithKind(node, 194 /* LiteralType */)) {
                     diagnosticMessage = ts.Diagnostics.Octal_literal_types_must_use_ES2015_syntax_Use_the_syntax_0;
                 }
-                else if (ts.isChildOfNodeWithKind(node, 292 /* EnumMember */)) {
+                else if (ts.isChildOfNodeWithKind(node, 294 /* EnumMember */)) {
                     diagnosticMessage = ts.Diagnostics.Octal_literals_are_not_allowed_in_enums_members_initializer_Use_the_syntax_0;
                 }
                 if (diagnosticMessage) {
@@ -83544,14 +85108,14 @@
         return !ts.isAccessor(declaration);
     }
     function isNotOverload(declaration) {
-        return (declaration.kind !== 252 /* FunctionDeclaration */ && declaration.kind !== 166 /* MethodDeclaration */) ||
+        return (declaration.kind !== 254 /* FunctionDeclaration */ && declaration.kind !== 167 /* MethodDeclaration */) ||
             !!declaration.body;
     }
     /** Like 'isDeclarationName', but returns true for LHS of `import { x as y }` or `export { x as y }`. */
     function isDeclarationNameOrImportPropertyName(name) {
         switch (name.parent.kind) {
-            case 266 /* ImportSpecifier */:
-            case 271 /* ExportSpecifier */:
+            case 268 /* ImportSpecifier */:
+            case 273 /* ExportSpecifier */:
                 return ts.isIdentifier(name);
             default:
                 return ts.isDeclarationName(name);
@@ -83801,432 +85365,437 @@
         }
         var kind = node.kind;
         // No need to visit nodes with no children.
-        if ((kind > 0 /* FirstToken */ && kind <= 157 /* LastToken */) || kind === 188 /* ThisType */) {
+        if ((kind > 0 /* FirstToken */ && kind <= 158 /* LastToken */) || kind === 190 /* ThisType */) {
             return node;
         }
         var factory = context.factory;
         switch (kind) {
             // Names
-            case 78 /* Identifier */:
+            case 79 /* Identifier */:
                 ts.Debug.type(node);
                 return factory.updateIdentifier(node, nodesVisitor(node.typeArguments, visitor, ts.isTypeNodeOrTypeParameterDeclaration));
-            case 158 /* QualifiedName */:
+            case 159 /* QualifiedName */:
                 ts.Debug.type(node);
                 return factory.updateQualifiedName(node, nodeVisitor(node.left, visitor, ts.isEntityName), nodeVisitor(node.right, visitor, ts.isIdentifier));
-            case 159 /* ComputedPropertyName */:
+            case 160 /* ComputedPropertyName */:
                 ts.Debug.type(node);
                 return factory.updateComputedPropertyName(node, nodeVisitor(node.expression, visitor, ts.isExpression));
             // Signature elements
-            case 160 /* TypeParameter */:
+            case 161 /* TypeParameter */:
                 ts.Debug.type(node);
                 return factory.updateTypeParameterDeclaration(node, nodeVisitor(node.name, visitor, ts.isIdentifier), nodeVisitor(node.constraint, visitor, ts.isTypeNode), nodeVisitor(node.default, visitor, ts.isTypeNode));
-            case 161 /* Parameter */:
+            case 162 /* Parameter */:
                 ts.Debug.type(node);
                 return factory.updateParameterDeclaration(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), nodeVisitor(node.dotDotDotToken, tokenVisitor, ts.isDotDotDotToken), nodeVisitor(node.name, visitor, ts.isBindingName), nodeVisitor(node.questionToken, tokenVisitor, ts.isQuestionToken), nodeVisitor(node.type, visitor, ts.isTypeNode), nodeVisitor(node.initializer, visitor, ts.isExpression));
-            case 162 /* Decorator */:
+            case 163 /* Decorator */:
                 ts.Debug.type(node);
                 return factory.updateDecorator(node, nodeVisitor(node.expression, visitor, ts.isExpression));
             // Type elements
-            case 163 /* PropertySignature */:
+            case 164 /* PropertySignature */:
                 ts.Debug.type(node);
                 return factory.updatePropertySignature(node, nodesVisitor(node.modifiers, visitor, ts.isModifier), nodeVisitor(node.name, visitor, ts.isPropertyName), nodeVisitor(node.questionToken, tokenVisitor, ts.isToken), nodeVisitor(node.type, visitor, ts.isTypeNode));
-            case 164 /* PropertyDeclaration */:
+            case 165 /* PropertyDeclaration */:
                 ts.Debug.type(node);
                 return factory.updatePropertyDeclaration(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), nodeVisitor(node.name, visitor, ts.isPropertyName), 
                 // QuestionToken and ExclamationToken is uniqued in Property Declaration and the signature of 'updateProperty' is that too
                 nodeVisitor(node.questionToken || node.exclamationToken, tokenVisitor, ts.isQuestionOrExclamationToken), nodeVisitor(node.type, visitor, ts.isTypeNode), nodeVisitor(node.initializer, visitor, ts.isExpression));
-            case 165 /* MethodSignature */:
+            case 166 /* MethodSignature */:
                 ts.Debug.type(node);
                 return factory.updateMethodSignature(node, nodesVisitor(node.modifiers, visitor, ts.isModifier), nodeVisitor(node.name, visitor, ts.isPropertyName), nodeVisitor(node.questionToken, tokenVisitor, ts.isQuestionToken), nodesVisitor(node.typeParameters, visitor, ts.isTypeParameterDeclaration), nodesVisitor(node.parameters, visitor, ts.isParameterDeclaration), nodeVisitor(node.type, visitor, ts.isTypeNode));
-            case 166 /* MethodDeclaration */:
+            case 167 /* MethodDeclaration */:
                 ts.Debug.type(node);
                 return factory.updateMethodDeclaration(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), nodeVisitor(node.asteriskToken, tokenVisitor, ts.isAsteriskToken), nodeVisitor(node.name, visitor, ts.isPropertyName), nodeVisitor(node.questionToken, tokenVisitor, ts.isQuestionToken), nodesVisitor(node.typeParameters, visitor, ts.isTypeParameterDeclaration), visitParameterList(node.parameters, visitor, context, nodesVisitor), nodeVisitor(node.type, visitor, ts.isTypeNode), visitFunctionBody(node.body, visitor, context, nodeVisitor));
-            case 167 /* Constructor */:
+            case 169 /* Constructor */:
                 ts.Debug.type(node);
                 return factory.updateConstructorDeclaration(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), visitParameterList(node.parameters, visitor, context, nodesVisitor), visitFunctionBody(node.body, visitor, context, nodeVisitor));
-            case 168 /* GetAccessor */:
+            case 170 /* GetAccessor */:
                 ts.Debug.type(node);
                 return factory.updateGetAccessorDeclaration(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), nodeVisitor(node.name, visitor, ts.isPropertyName), visitParameterList(node.parameters, visitor, context, nodesVisitor), nodeVisitor(node.type, visitor, ts.isTypeNode), visitFunctionBody(node.body, visitor, context, nodeVisitor));
-            case 169 /* SetAccessor */:
+            case 171 /* SetAccessor */:
                 ts.Debug.type(node);
                 return factory.updateSetAccessorDeclaration(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), nodeVisitor(node.name, visitor, ts.isPropertyName), visitParameterList(node.parameters, visitor, context, nodesVisitor), visitFunctionBody(node.body, visitor, context, nodeVisitor));
-            case 170 /* CallSignature */:
+            case 168 /* ClassStaticBlockDeclaration */:
+                ts.Debug.type(node);
+                context.startLexicalEnvironment();
+                context.suspendLexicalEnvironment();
+                return factory.updateClassStaticBlockDeclaration(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), visitFunctionBody(node.body, visitor, context, nodeVisitor));
+            case 172 /* CallSignature */:
                 ts.Debug.type(node);
                 return factory.updateCallSignature(node, nodesVisitor(node.typeParameters, visitor, ts.isTypeParameterDeclaration), nodesVisitor(node.parameters, visitor, ts.isParameterDeclaration), nodeVisitor(node.type, visitor, ts.isTypeNode));
-            case 171 /* ConstructSignature */:
+            case 173 /* ConstructSignature */:
                 ts.Debug.type(node);
                 return factory.updateConstructSignature(node, nodesVisitor(node.typeParameters, visitor, ts.isTypeParameterDeclaration), nodesVisitor(node.parameters, visitor, ts.isParameterDeclaration), nodeVisitor(node.type, visitor, ts.isTypeNode));
-            case 172 /* IndexSignature */:
+            case 174 /* IndexSignature */:
                 ts.Debug.type(node);
                 return factory.updateIndexSignature(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), nodesVisitor(node.parameters, visitor, ts.isParameterDeclaration), nodeVisitor(node.type, visitor, ts.isTypeNode));
             // Types
-            case 173 /* TypePredicate */:
+            case 175 /* TypePredicate */:
                 ts.Debug.type(node);
                 return factory.updateTypePredicateNode(node, nodeVisitor(node.assertsModifier, visitor, ts.isAssertsKeyword), nodeVisitor(node.parameterName, visitor, ts.isIdentifierOrThisTypeNode), nodeVisitor(node.type, visitor, ts.isTypeNode));
-            case 174 /* TypeReference */:
+            case 176 /* TypeReference */:
                 ts.Debug.type(node);
                 return factory.updateTypeReferenceNode(node, nodeVisitor(node.typeName, visitor, ts.isEntityName), nodesVisitor(node.typeArguments, visitor, ts.isTypeNode));
-            case 175 /* FunctionType */:
+            case 177 /* FunctionType */:
                 ts.Debug.type(node);
                 return factory.updateFunctionTypeNode(node, nodesVisitor(node.typeParameters, visitor, ts.isTypeParameterDeclaration), nodesVisitor(node.parameters, visitor, ts.isParameterDeclaration), nodeVisitor(node.type, visitor, ts.isTypeNode));
-            case 176 /* ConstructorType */:
+            case 178 /* ConstructorType */:
                 ts.Debug.type(node);
                 return factory.updateConstructorTypeNode(node, nodesVisitor(node.modifiers, visitor, ts.isModifier), nodesVisitor(node.typeParameters, visitor, ts.isTypeParameterDeclaration), nodesVisitor(node.parameters, visitor, ts.isParameterDeclaration), nodeVisitor(node.type, visitor, ts.isTypeNode));
-            case 177 /* TypeQuery */:
+            case 179 /* TypeQuery */:
                 ts.Debug.type(node);
                 return factory.updateTypeQueryNode(node, nodeVisitor(node.exprName, visitor, ts.isEntityName));
-            case 178 /* TypeLiteral */:
+            case 180 /* TypeLiteral */:
                 ts.Debug.type(node);
                 return factory.updateTypeLiteralNode(node, nodesVisitor(node.members, visitor, ts.isTypeElement));
-            case 179 /* ArrayType */:
+            case 181 /* ArrayType */:
                 ts.Debug.type(node);
                 return factory.updateArrayTypeNode(node, nodeVisitor(node.elementType, visitor, ts.isTypeNode));
-            case 180 /* TupleType */:
+            case 182 /* TupleType */:
                 ts.Debug.type(node);
                 return factory.updateTupleTypeNode(node, nodesVisitor(node.elements, visitor, ts.isTypeNode));
-            case 181 /* OptionalType */:
+            case 183 /* OptionalType */:
                 ts.Debug.type(node);
                 return factory.updateOptionalTypeNode(node, nodeVisitor(node.type, visitor, ts.isTypeNode));
-            case 182 /* RestType */:
+            case 184 /* RestType */:
                 ts.Debug.type(node);
                 return factory.updateRestTypeNode(node, nodeVisitor(node.type, visitor, ts.isTypeNode));
-            case 183 /* UnionType */:
+            case 185 /* UnionType */:
                 ts.Debug.type(node);
                 return factory.updateUnionTypeNode(node, nodesVisitor(node.types, visitor, ts.isTypeNode));
-            case 184 /* IntersectionType */:
+            case 186 /* IntersectionType */:
                 ts.Debug.type(node);
                 return factory.updateIntersectionTypeNode(node, nodesVisitor(node.types, visitor, ts.isTypeNode));
-            case 185 /* ConditionalType */:
+            case 187 /* ConditionalType */:
                 ts.Debug.type(node);
                 return factory.updateConditionalTypeNode(node, nodeVisitor(node.checkType, visitor, ts.isTypeNode), nodeVisitor(node.extendsType, visitor, ts.isTypeNode), nodeVisitor(node.trueType, visitor, ts.isTypeNode), nodeVisitor(node.falseType, visitor, ts.isTypeNode));
-            case 186 /* InferType */:
+            case 188 /* InferType */:
                 ts.Debug.type(node);
                 return factory.updateInferTypeNode(node, nodeVisitor(node.typeParameter, visitor, ts.isTypeParameterDeclaration));
-            case 196 /* ImportType */:
+            case 198 /* ImportType */:
                 ts.Debug.type(node);
                 return factory.updateImportTypeNode(node, nodeVisitor(node.argument, visitor, ts.isTypeNode), nodeVisitor(node.qualifier, visitor, ts.isEntityName), visitNodes(node.typeArguments, visitor, ts.isTypeNode), node.isTypeOf);
-            case 193 /* NamedTupleMember */:
+            case 195 /* NamedTupleMember */:
                 ts.Debug.type(node);
                 return factory.updateNamedTupleMember(node, visitNode(node.dotDotDotToken, visitor, ts.isDotDotDotToken), visitNode(node.name, visitor, ts.isIdentifier), visitNode(node.questionToken, visitor, ts.isQuestionToken), visitNode(node.type, visitor, ts.isTypeNode));
-            case 187 /* ParenthesizedType */:
+            case 189 /* ParenthesizedType */:
                 ts.Debug.type(node);
                 return factory.updateParenthesizedType(node, nodeVisitor(node.type, visitor, ts.isTypeNode));
-            case 189 /* TypeOperator */:
+            case 191 /* TypeOperator */:
                 ts.Debug.type(node);
                 return factory.updateTypeOperatorNode(node, nodeVisitor(node.type, visitor, ts.isTypeNode));
-            case 190 /* IndexedAccessType */:
+            case 192 /* IndexedAccessType */:
                 ts.Debug.type(node);
                 return factory.updateIndexedAccessTypeNode(node, nodeVisitor(node.objectType, visitor, ts.isTypeNode), nodeVisitor(node.indexType, visitor, ts.isTypeNode));
-            case 191 /* MappedType */:
+            case 193 /* MappedType */:
                 ts.Debug.type(node);
                 return factory.updateMappedTypeNode(node, nodeVisitor(node.readonlyToken, tokenVisitor, ts.isReadonlyKeywordOrPlusOrMinusToken), nodeVisitor(node.typeParameter, visitor, ts.isTypeParameterDeclaration), nodeVisitor(node.nameType, visitor, ts.isTypeNode), nodeVisitor(node.questionToken, tokenVisitor, ts.isQuestionOrPlusOrMinusToken), nodeVisitor(node.type, visitor, ts.isTypeNode));
-            case 192 /* LiteralType */:
+            case 194 /* LiteralType */:
                 ts.Debug.type(node);
                 return factory.updateLiteralTypeNode(node, nodeVisitor(node.literal, visitor, ts.isExpression));
-            case 194 /* TemplateLiteralType */:
+            case 196 /* TemplateLiteralType */:
                 ts.Debug.type(node);
                 return factory.updateTemplateLiteralType(node, nodeVisitor(node.head, visitor, ts.isTemplateHead), nodesVisitor(node.templateSpans, visitor, ts.isTemplateLiteralTypeSpan));
-            case 195 /* TemplateLiteralTypeSpan */:
+            case 197 /* TemplateLiteralTypeSpan */:
                 ts.Debug.type(node);
                 return factory.updateTemplateLiteralTypeSpan(node, nodeVisitor(node.type, visitor, ts.isTypeNode), nodeVisitor(node.literal, visitor, ts.isTemplateMiddleOrTemplateTail));
             // Binding patterns
-            case 197 /* ObjectBindingPattern */:
+            case 199 /* ObjectBindingPattern */:
                 ts.Debug.type(node);
                 return factory.updateObjectBindingPattern(node, nodesVisitor(node.elements, visitor, ts.isBindingElement));
-            case 198 /* ArrayBindingPattern */:
+            case 200 /* ArrayBindingPattern */:
                 ts.Debug.type(node);
                 return factory.updateArrayBindingPattern(node, nodesVisitor(node.elements, visitor, ts.isArrayBindingElement));
-            case 199 /* BindingElement */:
+            case 201 /* BindingElement */:
                 ts.Debug.type(node);
                 return factory.updateBindingElement(node, nodeVisitor(node.dotDotDotToken, tokenVisitor, ts.isDotDotDotToken), nodeVisitor(node.propertyName, visitor, ts.isPropertyName), nodeVisitor(node.name, visitor, ts.isBindingName), nodeVisitor(node.initializer, visitor, ts.isExpression));
             // Expression
-            case 200 /* ArrayLiteralExpression */:
+            case 202 /* ArrayLiteralExpression */:
                 ts.Debug.type(node);
                 return factory.updateArrayLiteralExpression(node, nodesVisitor(node.elements, visitor, ts.isExpression));
-            case 201 /* ObjectLiteralExpression */:
+            case 203 /* ObjectLiteralExpression */:
                 ts.Debug.type(node);
                 return factory.updateObjectLiteralExpression(node, nodesVisitor(node.properties, visitor, ts.isObjectLiteralElementLike));
-            case 202 /* PropertyAccessExpression */:
+            case 204 /* PropertyAccessExpression */:
                 if (node.flags & 32 /* OptionalChain */) {
                     ts.Debug.type(node);
                     return factory.updatePropertyAccessChain(node, nodeVisitor(node.expression, visitor, ts.isExpression), nodeVisitor(node.questionDotToken, tokenVisitor, ts.isQuestionDotToken), nodeVisitor(node.name, visitor, ts.isMemberName));
                 }
                 ts.Debug.type(node);
                 return factory.updatePropertyAccessExpression(node, nodeVisitor(node.expression, visitor, ts.isExpression), nodeVisitor(node.name, visitor, ts.isMemberName));
-            case 203 /* ElementAccessExpression */:
+            case 205 /* ElementAccessExpression */:
                 if (node.flags & 32 /* OptionalChain */) {
                     ts.Debug.type(node);
                     return factory.updateElementAccessChain(node, nodeVisitor(node.expression, visitor, ts.isExpression), nodeVisitor(node.questionDotToken, tokenVisitor, ts.isQuestionDotToken), nodeVisitor(node.argumentExpression, visitor, ts.isExpression));
                 }
                 ts.Debug.type(node);
                 return factory.updateElementAccessExpression(node, nodeVisitor(node.expression, visitor, ts.isExpression), nodeVisitor(node.argumentExpression, visitor, ts.isExpression));
-            case 204 /* CallExpression */:
+            case 206 /* CallExpression */:
                 if (node.flags & 32 /* OptionalChain */) {
                     ts.Debug.type(node);
                     return factory.updateCallChain(node, nodeVisitor(node.expression, visitor, ts.isExpression), nodeVisitor(node.questionDotToken, tokenVisitor, ts.isQuestionDotToken), nodesVisitor(node.typeArguments, visitor, ts.isTypeNode), nodesVisitor(node.arguments, visitor, ts.isExpression));
                 }
                 ts.Debug.type(node);
                 return factory.updateCallExpression(node, nodeVisitor(node.expression, visitor, ts.isExpression), nodesVisitor(node.typeArguments, visitor, ts.isTypeNode), nodesVisitor(node.arguments, visitor, ts.isExpression));
-            case 205 /* NewExpression */:
+            case 207 /* NewExpression */:
                 ts.Debug.type(node);
                 return factory.updateNewExpression(node, nodeVisitor(node.expression, visitor, ts.isExpression), nodesVisitor(node.typeArguments, visitor, ts.isTypeNode), nodesVisitor(node.arguments, visitor, ts.isExpression));
-            case 206 /* TaggedTemplateExpression */:
+            case 208 /* TaggedTemplateExpression */:
                 ts.Debug.type(node);
                 return factory.updateTaggedTemplateExpression(node, nodeVisitor(node.tag, visitor, ts.isExpression), visitNodes(node.typeArguments, visitor, ts.isTypeNode), nodeVisitor(node.template, visitor, ts.isTemplateLiteral));
-            case 207 /* TypeAssertionExpression */:
+            case 209 /* TypeAssertionExpression */:
                 ts.Debug.type(node);
                 return factory.updateTypeAssertion(node, nodeVisitor(node.type, visitor, ts.isTypeNode), nodeVisitor(node.expression, visitor, ts.isExpression));
-            case 208 /* ParenthesizedExpression */:
+            case 210 /* ParenthesizedExpression */:
                 ts.Debug.type(node);
                 return factory.updateParenthesizedExpression(node, nodeVisitor(node.expression, visitor, ts.isExpression));
-            case 209 /* FunctionExpression */:
+            case 211 /* FunctionExpression */:
                 ts.Debug.type(node);
                 return factory.updateFunctionExpression(node, nodesVisitor(node.modifiers, visitor, ts.isModifier), nodeVisitor(node.asteriskToken, tokenVisitor, ts.isAsteriskToken), nodeVisitor(node.name, visitor, ts.isIdentifier), nodesVisitor(node.typeParameters, visitor, ts.isTypeParameterDeclaration), visitParameterList(node.parameters, visitor, context, nodesVisitor), nodeVisitor(node.type, visitor, ts.isTypeNode), visitFunctionBody(node.body, visitor, context, nodeVisitor));
-            case 210 /* ArrowFunction */:
+            case 212 /* ArrowFunction */:
                 ts.Debug.type(node);
                 return factory.updateArrowFunction(node, nodesVisitor(node.modifiers, visitor, ts.isModifier), nodesVisitor(node.typeParameters, visitor, ts.isTypeParameterDeclaration), visitParameterList(node.parameters, visitor, context, nodesVisitor), nodeVisitor(node.type, visitor, ts.isTypeNode), nodeVisitor(node.equalsGreaterThanToken, tokenVisitor, ts.isEqualsGreaterThanToken), visitFunctionBody(node.body, visitor, context, nodeVisitor));
-            case 211 /* DeleteExpression */:
+            case 213 /* DeleteExpression */:
                 ts.Debug.type(node);
                 return factory.updateDeleteExpression(node, nodeVisitor(node.expression, visitor, ts.isExpression));
-            case 212 /* TypeOfExpression */:
+            case 214 /* TypeOfExpression */:
                 ts.Debug.type(node);
                 return factory.updateTypeOfExpression(node, nodeVisitor(node.expression, visitor, ts.isExpression));
-            case 213 /* VoidExpression */:
+            case 215 /* VoidExpression */:
                 ts.Debug.type(node);
                 return factory.updateVoidExpression(node, nodeVisitor(node.expression, visitor, ts.isExpression));
-            case 214 /* AwaitExpression */:
+            case 216 /* AwaitExpression */:
                 ts.Debug.type(node);
                 return factory.updateAwaitExpression(node, nodeVisitor(node.expression, visitor, ts.isExpression));
-            case 215 /* PrefixUnaryExpression */:
+            case 217 /* PrefixUnaryExpression */:
                 ts.Debug.type(node);
                 return factory.updatePrefixUnaryExpression(node, nodeVisitor(node.operand, visitor, ts.isExpression));
-            case 216 /* PostfixUnaryExpression */:
+            case 218 /* PostfixUnaryExpression */:
                 ts.Debug.type(node);
                 return factory.updatePostfixUnaryExpression(node, nodeVisitor(node.operand, visitor, ts.isExpression));
-            case 217 /* BinaryExpression */:
+            case 219 /* BinaryExpression */:
                 ts.Debug.type(node);
                 return factory.updateBinaryExpression(node, nodeVisitor(node.left, visitor, ts.isExpression), nodeVisitor(node.operatorToken, tokenVisitor, ts.isBinaryOperatorToken), nodeVisitor(node.right, visitor, ts.isExpression));
-            case 218 /* ConditionalExpression */:
+            case 220 /* ConditionalExpression */:
                 ts.Debug.type(node);
                 return factory.updateConditionalExpression(node, nodeVisitor(node.condition, visitor, ts.isExpression), nodeVisitor(node.questionToken, tokenVisitor, ts.isQuestionToken), nodeVisitor(node.whenTrue, visitor, ts.isExpression), nodeVisitor(node.colonToken, tokenVisitor, ts.isColonToken), nodeVisitor(node.whenFalse, visitor, ts.isExpression));
-            case 219 /* TemplateExpression */:
+            case 221 /* TemplateExpression */:
                 ts.Debug.type(node);
                 return factory.updateTemplateExpression(node, nodeVisitor(node.head, visitor, ts.isTemplateHead), nodesVisitor(node.templateSpans, visitor, ts.isTemplateSpan));
-            case 220 /* YieldExpression */:
+            case 222 /* YieldExpression */:
                 ts.Debug.type(node);
                 return factory.updateYieldExpression(node, nodeVisitor(node.asteriskToken, tokenVisitor, ts.isAsteriskToken), nodeVisitor(node.expression, visitor, ts.isExpression));
-            case 221 /* SpreadElement */:
+            case 223 /* SpreadElement */:
                 ts.Debug.type(node);
                 return factory.updateSpreadElement(node, nodeVisitor(node.expression, visitor, ts.isExpression));
-            case 222 /* ClassExpression */:
+            case 224 /* ClassExpression */:
                 ts.Debug.type(node);
                 return factory.updateClassExpression(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), nodeVisitor(node.name, visitor, ts.isIdentifier), nodesVisitor(node.typeParameters, visitor, ts.isTypeParameterDeclaration), nodesVisitor(node.heritageClauses, visitor, ts.isHeritageClause), nodesVisitor(node.members, visitor, ts.isClassElement));
-            case 224 /* ExpressionWithTypeArguments */:
+            case 226 /* ExpressionWithTypeArguments */:
                 ts.Debug.type(node);
                 return factory.updateExpressionWithTypeArguments(node, nodeVisitor(node.expression, visitor, ts.isExpression), nodesVisitor(node.typeArguments, visitor, ts.isTypeNode));
-            case 225 /* AsExpression */:
+            case 227 /* AsExpression */:
                 ts.Debug.type(node);
                 return factory.updateAsExpression(node, nodeVisitor(node.expression, visitor, ts.isExpression), nodeVisitor(node.type, visitor, ts.isTypeNode));
-            case 226 /* NonNullExpression */:
+            case 228 /* NonNullExpression */:
                 if (node.flags & 32 /* OptionalChain */) {
                     ts.Debug.type(node);
                     return factory.updateNonNullChain(node, nodeVisitor(node.expression, visitor, ts.isExpression));
                 }
                 ts.Debug.type(node);
                 return factory.updateNonNullExpression(node, nodeVisitor(node.expression, visitor, ts.isExpression));
-            case 227 /* MetaProperty */:
+            case 229 /* MetaProperty */:
                 ts.Debug.type(node);
                 return factory.updateMetaProperty(node, nodeVisitor(node.name, visitor, ts.isIdentifier));
             // Misc
-            case 229 /* TemplateSpan */:
+            case 231 /* TemplateSpan */:
                 ts.Debug.type(node);
                 return factory.updateTemplateSpan(node, nodeVisitor(node.expression, visitor, ts.isExpression), nodeVisitor(node.literal, visitor, ts.isTemplateMiddleOrTemplateTail));
             // Element
-            case 231 /* Block */:
+            case 233 /* Block */:
                 ts.Debug.type(node);
                 return factory.updateBlock(node, nodesVisitor(node.statements, visitor, ts.isStatement));
-            case 233 /* VariableStatement */:
+            case 235 /* VariableStatement */:
                 ts.Debug.type(node);
                 return factory.updateVariableStatement(node, nodesVisitor(node.modifiers, visitor, ts.isModifier), nodeVisitor(node.declarationList, visitor, ts.isVariableDeclarationList));
-            case 234 /* ExpressionStatement */:
+            case 236 /* ExpressionStatement */:
                 ts.Debug.type(node);
                 return factory.updateExpressionStatement(node, nodeVisitor(node.expression, visitor, ts.isExpression));
-            case 235 /* IfStatement */:
+            case 237 /* IfStatement */:
                 ts.Debug.type(node);
                 return factory.updateIfStatement(node, nodeVisitor(node.expression, visitor, ts.isExpression), nodeVisitor(node.thenStatement, visitor, ts.isStatement, factory.liftToBlock), nodeVisitor(node.elseStatement, visitor, ts.isStatement, factory.liftToBlock));
-            case 236 /* DoStatement */:
+            case 238 /* DoStatement */:
                 ts.Debug.type(node);
                 return factory.updateDoStatement(node, visitIterationBody(node.statement, visitor, context), nodeVisitor(node.expression, visitor, ts.isExpression));
-            case 237 /* WhileStatement */:
+            case 239 /* WhileStatement */:
                 ts.Debug.type(node);
                 return factory.updateWhileStatement(node, nodeVisitor(node.expression, visitor, ts.isExpression), visitIterationBody(node.statement, visitor, context));
-            case 238 /* ForStatement */:
+            case 240 /* ForStatement */:
                 ts.Debug.type(node);
                 return factory.updateForStatement(node, nodeVisitor(node.initializer, visitor, ts.isForInitializer), nodeVisitor(node.condition, visitor, ts.isExpression), nodeVisitor(node.incrementor, visitor, ts.isExpression), visitIterationBody(node.statement, visitor, context));
-            case 239 /* ForInStatement */:
+            case 241 /* ForInStatement */:
                 ts.Debug.type(node);
                 return factory.updateForInStatement(node, nodeVisitor(node.initializer, visitor, ts.isForInitializer), nodeVisitor(node.expression, visitor, ts.isExpression), visitIterationBody(node.statement, visitor, context));
-            case 240 /* ForOfStatement */:
+            case 242 /* ForOfStatement */:
                 ts.Debug.type(node);
                 return factory.updateForOfStatement(node, nodeVisitor(node.awaitModifier, tokenVisitor, ts.isAwaitKeyword), nodeVisitor(node.initializer, visitor, ts.isForInitializer), nodeVisitor(node.expression, visitor, ts.isExpression), visitIterationBody(node.statement, visitor, context));
-            case 241 /* ContinueStatement */:
+            case 243 /* ContinueStatement */:
                 ts.Debug.type(node);
                 return factory.updateContinueStatement(node, nodeVisitor(node.label, visitor, ts.isIdentifier));
-            case 242 /* BreakStatement */:
+            case 244 /* BreakStatement */:
                 ts.Debug.type(node);
                 return factory.updateBreakStatement(node, nodeVisitor(node.label, visitor, ts.isIdentifier));
-            case 243 /* ReturnStatement */:
+            case 245 /* ReturnStatement */:
                 ts.Debug.type(node);
                 return factory.updateReturnStatement(node, nodeVisitor(node.expression, visitor, ts.isExpression));
-            case 244 /* WithStatement */:
+            case 246 /* WithStatement */:
                 ts.Debug.type(node);
                 return factory.updateWithStatement(node, nodeVisitor(node.expression, visitor, ts.isExpression), nodeVisitor(node.statement, visitor, ts.isStatement, factory.liftToBlock));
-            case 245 /* SwitchStatement */:
+            case 247 /* SwitchStatement */:
                 ts.Debug.type(node);
                 return factory.updateSwitchStatement(node, nodeVisitor(node.expression, visitor, ts.isExpression), nodeVisitor(node.caseBlock, visitor, ts.isCaseBlock));
-            case 246 /* LabeledStatement */:
+            case 248 /* LabeledStatement */:
                 ts.Debug.type(node);
                 return factory.updateLabeledStatement(node, nodeVisitor(node.label, visitor, ts.isIdentifier), nodeVisitor(node.statement, visitor, ts.isStatement, factory.liftToBlock));
-            case 247 /* ThrowStatement */:
+            case 249 /* ThrowStatement */:
                 ts.Debug.type(node);
                 return factory.updateThrowStatement(node, nodeVisitor(node.expression, visitor, ts.isExpression));
-            case 248 /* TryStatement */:
+            case 250 /* TryStatement */:
                 ts.Debug.type(node);
                 return factory.updateTryStatement(node, nodeVisitor(node.tryBlock, visitor, ts.isBlock), nodeVisitor(node.catchClause, visitor, ts.isCatchClause), nodeVisitor(node.finallyBlock, visitor, ts.isBlock));
-            case 250 /* VariableDeclaration */:
+            case 252 /* VariableDeclaration */:
                 ts.Debug.type(node);
                 return factory.updateVariableDeclaration(node, nodeVisitor(node.name, visitor, ts.isBindingName), nodeVisitor(node.exclamationToken, tokenVisitor, ts.isExclamationToken), nodeVisitor(node.type, visitor, ts.isTypeNode), nodeVisitor(node.initializer, visitor, ts.isExpression));
-            case 251 /* VariableDeclarationList */:
+            case 253 /* VariableDeclarationList */:
                 ts.Debug.type(node);
                 return factory.updateVariableDeclarationList(node, nodesVisitor(node.declarations, visitor, ts.isVariableDeclaration));
-            case 252 /* FunctionDeclaration */:
+            case 254 /* FunctionDeclaration */:
                 ts.Debug.type(node);
                 return factory.updateFunctionDeclaration(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), nodeVisitor(node.asteriskToken, tokenVisitor, ts.isAsteriskToken), nodeVisitor(node.name, visitor, ts.isIdentifier), nodesVisitor(node.typeParameters, visitor, ts.isTypeParameterDeclaration), visitParameterList(node.parameters, visitor, context, nodesVisitor), nodeVisitor(node.type, visitor, ts.isTypeNode), visitFunctionBody(node.body, visitor, context, nodeVisitor));
-            case 253 /* ClassDeclaration */:
+            case 255 /* ClassDeclaration */:
                 ts.Debug.type(node);
                 return factory.updateClassDeclaration(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), nodeVisitor(node.name, visitor, ts.isIdentifier), nodesVisitor(node.typeParameters, visitor, ts.isTypeParameterDeclaration), nodesVisitor(node.heritageClauses, visitor, ts.isHeritageClause), nodesVisitor(node.members, visitor, ts.isClassElement));
-            case 254 /* InterfaceDeclaration */:
+            case 256 /* InterfaceDeclaration */:
                 ts.Debug.type(node);
                 return factory.updateInterfaceDeclaration(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), nodeVisitor(node.name, visitor, ts.isIdentifier), nodesVisitor(node.typeParameters, visitor, ts.isTypeParameterDeclaration), nodesVisitor(node.heritageClauses, visitor, ts.isHeritageClause), nodesVisitor(node.members, visitor, ts.isTypeElement));
-            case 255 /* TypeAliasDeclaration */:
+            case 257 /* TypeAliasDeclaration */:
                 ts.Debug.type(node);
                 return factory.updateTypeAliasDeclaration(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), nodeVisitor(node.name, visitor, ts.isIdentifier), nodesVisitor(node.typeParameters, visitor, ts.isTypeParameterDeclaration), nodeVisitor(node.type, visitor, ts.isTypeNode));
-            case 256 /* EnumDeclaration */:
+            case 258 /* EnumDeclaration */:
                 ts.Debug.type(node);
                 return factory.updateEnumDeclaration(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), nodeVisitor(node.name, visitor, ts.isIdentifier), nodesVisitor(node.members, visitor, ts.isEnumMember));
-            case 257 /* ModuleDeclaration */:
+            case 259 /* ModuleDeclaration */:
                 ts.Debug.type(node);
                 return factory.updateModuleDeclaration(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), nodeVisitor(node.name, visitor, ts.isModuleName), nodeVisitor(node.body, visitor, ts.isModuleBody));
-            case 258 /* ModuleBlock */:
+            case 260 /* ModuleBlock */:
                 ts.Debug.type(node);
                 return factory.updateModuleBlock(node, nodesVisitor(node.statements, visitor, ts.isStatement));
-            case 259 /* CaseBlock */:
+            case 261 /* CaseBlock */:
                 ts.Debug.type(node);
                 return factory.updateCaseBlock(node, nodesVisitor(node.clauses, visitor, ts.isCaseOrDefaultClause));
-            case 260 /* NamespaceExportDeclaration */:
+            case 262 /* NamespaceExportDeclaration */:
                 ts.Debug.type(node);
                 return factory.updateNamespaceExportDeclaration(node, nodeVisitor(node.name, visitor, ts.isIdentifier));
-            case 261 /* ImportEqualsDeclaration */:
+            case 263 /* ImportEqualsDeclaration */:
                 ts.Debug.type(node);
                 return factory.updateImportEqualsDeclaration(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), node.isTypeOnly, nodeVisitor(node.name, visitor, ts.isIdentifier), nodeVisitor(node.moduleReference, visitor, ts.isModuleReference));
-            case 262 /* ImportDeclaration */:
+            case 264 /* ImportDeclaration */:
                 ts.Debug.type(node);
                 return factory.updateImportDeclaration(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), nodeVisitor(node.importClause, visitor, ts.isImportClause), nodeVisitor(node.moduleSpecifier, visitor, ts.isExpression));
-            case 263 /* ImportClause */:
+            case 265 /* ImportClause */:
                 ts.Debug.type(node);
                 return factory.updateImportClause(node, node.isTypeOnly, nodeVisitor(node.name, visitor, ts.isIdentifier), nodeVisitor(node.namedBindings, visitor, ts.isNamedImportBindings));
-            case 264 /* NamespaceImport */:
+            case 266 /* NamespaceImport */:
                 ts.Debug.type(node);
                 return factory.updateNamespaceImport(node, nodeVisitor(node.name, visitor, ts.isIdentifier));
-            case 270 /* NamespaceExport */:
+            case 272 /* NamespaceExport */:
                 ts.Debug.type(node);
                 return factory.updateNamespaceExport(node, nodeVisitor(node.name, visitor, ts.isIdentifier));
-            case 265 /* NamedImports */:
+            case 267 /* NamedImports */:
                 ts.Debug.type(node);
                 return factory.updateNamedImports(node, nodesVisitor(node.elements, visitor, ts.isImportSpecifier));
-            case 266 /* ImportSpecifier */:
+            case 268 /* ImportSpecifier */:
                 ts.Debug.type(node);
                 return factory.updateImportSpecifier(node, nodeVisitor(node.propertyName, visitor, ts.isIdentifier), nodeVisitor(node.name, visitor, ts.isIdentifier));
-            case 267 /* ExportAssignment */:
+            case 269 /* ExportAssignment */:
                 ts.Debug.type(node);
                 return factory.updateExportAssignment(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), nodeVisitor(node.expression, visitor, ts.isExpression));
-            case 268 /* ExportDeclaration */:
+            case 270 /* ExportDeclaration */:
                 ts.Debug.type(node);
                 return factory.updateExportDeclaration(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), node.isTypeOnly, nodeVisitor(node.exportClause, visitor, ts.isNamedExportBindings), nodeVisitor(node.moduleSpecifier, visitor, ts.isExpression));
-            case 269 /* NamedExports */:
+            case 271 /* NamedExports */:
                 ts.Debug.type(node);
                 return factory.updateNamedExports(node, nodesVisitor(node.elements, visitor, ts.isExportSpecifier));
-            case 271 /* ExportSpecifier */:
+            case 273 /* ExportSpecifier */:
                 ts.Debug.type(node);
                 return factory.updateExportSpecifier(node, nodeVisitor(node.propertyName, visitor, ts.isIdentifier), nodeVisitor(node.name, visitor, ts.isIdentifier));
             // Module references
-            case 273 /* ExternalModuleReference */:
+            case 275 /* ExternalModuleReference */:
                 ts.Debug.type(node);
                 return factory.updateExternalModuleReference(node, nodeVisitor(node.expression, visitor, ts.isExpression));
             // JSX
-            case 274 /* JsxElement */:
+            case 276 /* JsxElement */:
                 ts.Debug.type(node);
                 return factory.updateJsxElement(node, nodeVisitor(node.openingElement, visitor, ts.isJsxOpeningElement), nodesVisitor(node.children, visitor, ts.isJsxChild), nodeVisitor(node.closingElement, visitor, ts.isJsxClosingElement));
-            case 275 /* JsxSelfClosingElement */:
+            case 277 /* JsxSelfClosingElement */:
                 ts.Debug.type(node);
                 return factory.updateJsxSelfClosingElement(node, nodeVisitor(node.tagName, visitor, ts.isJsxTagNameExpression), nodesVisitor(node.typeArguments, visitor, ts.isTypeNode), nodeVisitor(node.attributes, visitor, ts.isJsxAttributes));
-            case 276 /* JsxOpeningElement */:
+            case 278 /* JsxOpeningElement */:
                 ts.Debug.type(node);
                 return factory.updateJsxOpeningElement(node, nodeVisitor(node.tagName, visitor, ts.isJsxTagNameExpression), nodesVisitor(node.typeArguments, visitor, ts.isTypeNode), nodeVisitor(node.attributes, visitor, ts.isJsxAttributes));
-            case 277 /* JsxClosingElement */:
+            case 279 /* JsxClosingElement */:
                 ts.Debug.type(node);
                 return factory.updateJsxClosingElement(node, nodeVisitor(node.tagName, visitor, ts.isJsxTagNameExpression));
-            case 278 /* JsxFragment */:
+            case 280 /* JsxFragment */:
                 ts.Debug.type(node);
                 return factory.updateJsxFragment(node, nodeVisitor(node.openingFragment, visitor, ts.isJsxOpeningFragment), nodesVisitor(node.children, visitor, ts.isJsxChild), nodeVisitor(node.closingFragment, visitor, ts.isJsxClosingFragment));
-            case 281 /* JsxAttribute */:
+            case 283 /* JsxAttribute */:
                 ts.Debug.type(node);
                 return factory.updateJsxAttribute(node, nodeVisitor(node.name, visitor, ts.isIdentifier), nodeVisitor(node.initializer, visitor, ts.isStringLiteralOrJsxExpression));
-            case 282 /* JsxAttributes */:
+            case 284 /* JsxAttributes */:
                 ts.Debug.type(node);
                 return factory.updateJsxAttributes(node, nodesVisitor(node.properties, visitor, ts.isJsxAttributeLike));
-            case 283 /* JsxSpreadAttribute */:
+            case 285 /* JsxSpreadAttribute */:
                 ts.Debug.type(node);
                 return factory.updateJsxSpreadAttribute(node, nodeVisitor(node.expression, visitor, ts.isExpression));
-            case 284 /* JsxExpression */:
+            case 286 /* JsxExpression */:
                 ts.Debug.type(node);
                 return factory.updateJsxExpression(node, nodeVisitor(node.expression, visitor, ts.isExpression));
             // Clauses
-            case 285 /* CaseClause */:
+            case 287 /* CaseClause */:
                 ts.Debug.type(node);
                 return factory.updateCaseClause(node, nodeVisitor(node.expression, visitor, ts.isExpression), nodesVisitor(node.statements, visitor, ts.isStatement));
-            case 286 /* DefaultClause */:
+            case 288 /* DefaultClause */:
                 ts.Debug.type(node);
                 return factory.updateDefaultClause(node, nodesVisitor(node.statements, visitor, ts.isStatement));
-            case 287 /* HeritageClause */:
+            case 289 /* HeritageClause */:
                 ts.Debug.type(node);
                 return factory.updateHeritageClause(node, nodesVisitor(node.types, visitor, ts.isExpressionWithTypeArguments));
-            case 288 /* CatchClause */:
+            case 290 /* CatchClause */:
                 ts.Debug.type(node);
                 return factory.updateCatchClause(node, nodeVisitor(node.variableDeclaration, visitor, ts.isVariableDeclaration), nodeVisitor(node.block, visitor, ts.isBlock));
             // Property assignments
-            case 289 /* PropertyAssignment */:
+            case 291 /* PropertyAssignment */:
                 ts.Debug.type(node);
                 return factory.updatePropertyAssignment(node, nodeVisitor(node.name, visitor, ts.isPropertyName), nodeVisitor(node.initializer, visitor, ts.isExpression));
-            case 290 /* ShorthandPropertyAssignment */:
+            case 292 /* ShorthandPropertyAssignment */:
                 ts.Debug.type(node);
                 return factory.updateShorthandPropertyAssignment(node, nodeVisitor(node.name, visitor, ts.isIdentifier), nodeVisitor(node.objectAssignmentInitializer, visitor, ts.isExpression));
-            case 291 /* SpreadAssignment */:
+            case 293 /* SpreadAssignment */:
                 ts.Debug.type(node);
                 return factory.updateSpreadAssignment(node, nodeVisitor(node.expression, visitor, ts.isExpression));
             // Enum
-            case 292 /* EnumMember */:
+            case 294 /* EnumMember */:
                 ts.Debug.type(node);
                 return factory.updateEnumMember(node, nodeVisitor(node.name, visitor, ts.isPropertyName), nodeVisitor(node.initializer, visitor, ts.isExpression));
             // Top-level nodes
-            case 298 /* SourceFile */:
+            case 300 /* SourceFile */:
                 ts.Debug.type(node);
                 return factory.updateSourceFile(node, visitLexicalEnvironment(node.statements, visitor, context));
             // Transformation nodes
-            case 340 /* PartiallyEmittedExpression */:
+            case 345 /* PartiallyEmittedExpression */:
                 ts.Debug.type(node);
                 return factory.updatePartiallyEmittedExpression(node, nodeVisitor(node.expression, visitor, ts.isExpression));
-            case 341 /* CommaListExpression */:
+            case 346 /* CommaListExpression */:
                 ts.Debug.type(node);
                 return factory.updateCommaListExpression(node, nodesVisitor(node.elements, visitor, ts.isExpression));
             default:
@@ -84259,6 +85828,7 @@
         var sourcesContent;
         var names = [];
         var nameToNameIndexMap;
+        var mappingCharCodes = [];
         var mappings = "";
         // Last recorded and encoded mappings
         var lastGeneratedLine = 0;
@@ -84433,6 +86003,14 @@
                 || lastSourceCharacter !== pendingSourceCharacter
                 || lastNameIndex !== pendingNameIndex;
         }
+        function appendMappingCharCode(charCode) {
+            mappingCharCodes.push(charCode);
+            // String.fromCharCode accepts its arguments on the stack, so we have to chunk the input,
+            // otherwise we can get stack overflows for large source maps
+            if (mappingCharCodes.length >= 1024) {
+                flushMappingBuffer();
+            }
+        }
         function commitPendingMapping() {
             if (!hasPending || !shouldCommitMapping()) {
                 return;
@@ -84442,42 +86020,50 @@
             if (lastGeneratedLine < pendingGeneratedLine) {
                 // Emit line delimiters
                 do {
-                    mappings += ";";
+                    appendMappingCharCode(59 /* semicolon */);
                     lastGeneratedLine++;
-                    lastGeneratedCharacter = 0;
                 } while (lastGeneratedLine < pendingGeneratedLine);
+                // Only need to set this once
+                lastGeneratedCharacter = 0;
             }
             else {
                 ts.Debug.assertEqual(lastGeneratedLine, pendingGeneratedLine, "generatedLine cannot backtrack");
                 // Emit comma to separate the entry
                 if (hasLast) {
-                    mappings += ",";
+                    appendMappingCharCode(44 /* comma */);
                 }
             }
             // 1. Relative generated character
-            mappings += base64VLQFormatEncode(pendingGeneratedCharacter - lastGeneratedCharacter);
+            appendBase64VLQ(pendingGeneratedCharacter - lastGeneratedCharacter);
             lastGeneratedCharacter = pendingGeneratedCharacter;
             if (hasPendingSource) {
                 // 2. Relative sourceIndex
-                mappings += base64VLQFormatEncode(pendingSourceIndex - lastSourceIndex);
+                appendBase64VLQ(pendingSourceIndex - lastSourceIndex);
                 lastSourceIndex = pendingSourceIndex;
                 // 3. Relative source line
-                mappings += base64VLQFormatEncode(pendingSourceLine - lastSourceLine);
+                appendBase64VLQ(pendingSourceLine - lastSourceLine);
                 lastSourceLine = pendingSourceLine;
                 // 4. Relative source character
-                mappings += base64VLQFormatEncode(pendingSourceCharacter - lastSourceCharacter);
+                appendBase64VLQ(pendingSourceCharacter - lastSourceCharacter);
                 lastSourceCharacter = pendingSourceCharacter;
                 if (hasPendingName) {
                     // 5. Relative nameIndex
-                    mappings += base64VLQFormatEncode(pendingNameIndex - lastNameIndex);
+                    appendBase64VLQ(pendingNameIndex - lastNameIndex);
                     lastNameIndex = pendingNameIndex;
                 }
             }
             hasLast = true;
             exit();
         }
+        function flushMappingBuffer() {
+            if (mappingCharCodes.length > 0) {
+                mappings += String.fromCharCode.apply(undefined, mappingCharCodes);
+                mappingCharCodes.length = 0;
+            }
+        }
         function toJSON() {
             commitPendingMapping();
+            flushMappingBuffer();
             return {
                 version: 3,
                 file: file,
@@ -84488,10 +86074,33 @@
                 sourcesContent: sourcesContent,
             };
         }
+        function appendBase64VLQ(inValue) {
+            // Add a new least significant bit that has the sign of the value.
+            // if negative number the least significant bit that gets added to the number has value 1
+            // else least significant bit value that gets added is 0
+            // eg. -1 changes to binary : 01 [1] => 3
+            //     +1 changes to binary : 01 [0] => 2
+            if (inValue < 0) {
+                inValue = ((-inValue) << 1) + 1;
+            }
+            else {
+                inValue = inValue << 1;
+            }
+            // Encode 5 bits at a time starting from least significant bits
+            do {
+                var currentDigit = inValue & 31; // 11111
+                inValue = inValue >> 5;
+                if (inValue > 0) {
+                    // There are still more digits to decode, set the msb (6th bit)
+                    currentDigit = currentDigit | 32;
+                }
+                appendMappingCharCode(base64FormatEncode(currentDigit));
+            } while (inValue > 0);
+        }
     }
     ts.createSourceMapGenerator = createSourceMapGenerator;
     // Sometimes tools can see the following line as a source mapping url comment, so we mangle it a bit (the [M])
-    var sourceMapCommentRegExp = /^\/\/[@#] source[M]appingURL=(.+)\s*$/;
+    var sourceMapCommentRegExp = /^\/\/[@#] source[M]appingURL=(.+)$/;
     var whitespaceOrMapCommentRegExp = /^\s*(\/\/[@#] .*)?$/;
     function getLineInfo(text, lineStarts) {
         return {
@@ -84508,7 +86117,7 @@
             var line = lineInfo.getLineText(index);
             var comment = sourceMapCommentRegExp.exec(line);
             if (comment) {
-                return comment[1];
+                return ts.trimStringEnd(comment[1]);
             }
             // If we see a non-whitespace/map comment-like line, break, to avoid scanning up the entire file
             else if (!line.match(whitespaceOrMapCommentRegExp)) {
@@ -84714,31 +86323,6 @@
                         ch === 47 /* slash */ ? 63 :
                             -1;
     }
-    function base64VLQFormatEncode(inValue) {
-        // Add a new least significant bit that has the sign of the value.
-        // if negative number the least significant bit that gets added to the number has value 1
-        // else least significant bit value that gets added is 0
-        // eg. -1 changes to binary : 01 [1] => 3
-        //     +1 changes to binary : 01 [0] => 2
-        if (inValue < 0) {
-            inValue = ((-inValue) << 1) + 1;
-        }
-        else {
-            inValue = inValue << 1;
-        }
-        // Encode 5 bits at a time starting from least significant bits
-        var encodedStr = "";
-        do {
-            var currentDigit = inValue & 31; // 11111
-            inValue = inValue >> 5;
-            if (inValue > 0) {
-                // There are still more digits to decode, set the msb (6th bit)
-                currentDigit = currentDigit | 32;
-            }
-            encodedStr = encodedStr + String.fromCharCode(base64FormatEncode(currentDigit));
-        } while (inValue > 0);
-        return encodedStr;
-    }
     function isSourceMappedPosition(value) {
         return value.sourceIndex !== undefined
             && value.sourcePosition !== undefined;
@@ -84902,7 +86486,7 @@
     function chainBundle(context, transformSourceFile) {
         return transformSourceFileOrBundle;
         function transformSourceFileOrBundle(node) {
-            return node.kind === 298 /* SourceFile */ ? transformSourceFile(node) : transformBundle(node);
+            return node.kind === 300 /* SourceFile */ ? transformSourceFile(node) : transformBundle(node);
         }
         function transformBundle(node) {
             return context.factory.createBundle(ts.map(node.sourceFiles, transformSourceFile), node.prepends);
@@ -84953,7 +86537,7 @@
         for (var _i = 0, _a = sourceFile.statements; _i < _a.length; _i++) {
             var node = _a[_i];
             switch (node.kind) {
-                case 262 /* ImportDeclaration */:
+                case 264 /* ImportDeclaration */:
                     // import "mod"
                     // import x from "mod"
                     // import * as x from "mod"
@@ -84966,13 +86550,13 @@
                         hasImportDefault = true;
                     }
                     break;
-                case 261 /* ImportEqualsDeclaration */:
-                    if (node.moduleReference.kind === 273 /* ExternalModuleReference */) {
+                case 263 /* ImportEqualsDeclaration */:
+                    if (node.moduleReference.kind === 275 /* ExternalModuleReference */) {
                         // import x = require("mod")
                         externalImports.push(node);
                     }
                     break;
-                case 268 /* ExportDeclaration */:
+                case 270 /* ExportDeclaration */:
                     if (node.moduleSpecifier) {
                         if (!node.exportClause) {
                             // export * from "mod"
@@ -85003,13 +86587,13 @@
                         addExportedNamesForExportDeclaration(node);
                     }
                     break;
-                case 267 /* ExportAssignment */:
+                case 269 /* ExportAssignment */:
                     if (node.isExportEquals && !exportEquals) {
                         // export = x
                         exportEquals = node;
                     }
                     break;
-                case 233 /* VariableStatement */:
+                case 235 /* VariableStatement */:
                     if (ts.hasSyntacticModifier(node, 1 /* Export */)) {
                         for (var _b = 0, _c = node.declarationList.declarations; _b < _c.length; _b++) {
                             var decl = _c[_b];
@@ -85017,7 +86601,7 @@
                         }
                     }
                     break;
-                case 252 /* FunctionDeclaration */:
+                case 254 /* FunctionDeclaration */:
                     if (ts.hasSyntacticModifier(node, 1 /* Export */)) {
                         if (ts.hasSyntacticModifier(node, 512 /* Default */)) {
                             // export default function() { }
@@ -85037,7 +86621,7 @@
                         }
                     }
                     break;
-                case 253 /* ClassDeclaration */:
+                case 255 /* ClassDeclaration */:
                     if (ts.hasSyntacticModifier(node, 1 /* Export */)) {
                         if (ts.hasSyntacticModifier(node, 512 /* Default */)) {
                             // export default class { }
@@ -85135,27 +86719,27 @@
     }
     ts.isSimpleInlineableExpression = isSimpleInlineableExpression;
     function isCompoundAssignment(kind) {
-        return kind >= 63 /* FirstCompoundAssignment */
-            && kind <= 77 /* LastCompoundAssignment */;
+        return kind >= 64 /* FirstCompoundAssignment */
+            && kind <= 78 /* LastCompoundAssignment */;
     }
     ts.isCompoundAssignment = isCompoundAssignment;
     function getNonAssignmentOperatorForCompoundAssignment(kind) {
         switch (kind) {
-            case 63 /* PlusEqualsToken */: return 39 /* PlusToken */;
-            case 64 /* MinusEqualsToken */: return 40 /* MinusToken */;
-            case 65 /* AsteriskEqualsToken */: return 41 /* AsteriskToken */;
-            case 66 /* AsteriskAsteriskEqualsToken */: return 42 /* AsteriskAsteriskToken */;
-            case 67 /* SlashEqualsToken */: return 43 /* SlashToken */;
-            case 68 /* PercentEqualsToken */: return 44 /* PercentToken */;
-            case 69 /* LessThanLessThanEqualsToken */: return 47 /* LessThanLessThanToken */;
-            case 70 /* GreaterThanGreaterThanEqualsToken */: return 48 /* GreaterThanGreaterThanToken */;
-            case 71 /* GreaterThanGreaterThanGreaterThanEqualsToken */: return 49 /* GreaterThanGreaterThanGreaterThanToken */;
-            case 72 /* AmpersandEqualsToken */: return 50 /* AmpersandToken */;
-            case 73 /* BarEqualsToken */: return 51 /* BarToken */;
-            case 77 /* CaretEqualsToken */: return 52 /* CaretToken */;
-            case 74 /* BarBarEqualsToken */: return 56 /* BarBarToken */;
-            case 75 /* AmpersandAmpersandEqualsToken */: return 55 /* AmpersandAmpersandToken */;
-            case 76 /* QuestionQuestionEqualsToken */: return 60 /* QuestionQuestionToken */;
+            case 64 /* PlusEqualsToken */: return 39 /* PlusToken */;
+            case 65 /* MinusEqualsToken */: return 40 /* MinusToken */;
+            case 66 /* AsteriskEqualsToken */: return 41 /* AsteriskToken */;
+            case 67 /* AsteriskAsteriskEqualsToken */: return 42 /* AsteriskAsteriskToken */;
+            case 68 /* SlashEqualsToken */: return 43 /* SlashToken */;
+            case 69 /* PercentEqualsToken */: return 44 /* PercentToken */;
+            case 70 /* LessThanLessThanEqualsToken */: return 47 /* LessThanLessThanToken */;
+            case 71 /* GreaterThanGreaterThanEqualsToken */: return 48 /* GreaterThanGreaterThanToken */;
+            case 72 /* GreaterThanGreaterThanGreaterThanEqualsToken */: return 49 /* GreaterThanGreaterThanGreaterThanToken */;
+            case 73 /* AmpersandEqualsToken */: return 50 /* AmpersandToken */;
+            case 74 /* BarEqualsToken */: return 51 /* BarToken */;
+            case 78 /* CaretEqualsToken */: return 52 /* CaretToken */;
+            case 75 /* BarBarEqualsToken */: return 56 /* BarBarToken */;
+            case 76 /* AmpersandAmpersandEqualsToken */: return 55 /* AmpersandAmpersandToken */;
+            case 77 /* QuestionQuestionEqualsToken */: return 60 /* QuestionQuestionToken */;
         }
     }
     ts.getNonAssignmentOperatorForCompoundAssignment = getNonAssignmentOperatorForCompoundAssignment;
@@ -85192,6 +86776,13 @@
         return ts.filter(node.members, function (m) { return isInitializedOrStaticProperty(m, requireInitializer, isStatic); });
     }
     ts.getProperties = getProperties;
+    function isStaticPropertyDeclarationOrClassStaticBlockDeclaration(element) {
+        return isStaticPropertyDeclaration(element) || ts.isClassStaticBlockDeclaration(element);
+    }
+    function getStaticPropertiesAndClassStaticBlock(node) {
+        return ts.filter(node.members, isStaticPropertyDeclarationOrClassStaticBlockDeclaration);
+    }
+    ts.getStaticPropertiesAndClassStaticBlock = getStaticPropertiesAndClassStaticBlock;
     /**
      * Is a class element either a static or an instance property declaration with an initializer?
      *
@@ -85203,6 +86794,9 @@
             && (!!member.initializer || !requireInitializer)
             && ts.hasStaticModifier(member) === isStatic;
     }
+    function isStaticPropertyDeclaration(member) {
+        return ts.isPropertyDeclaration(member) && ts.hasStaticModifier(member);
+    }
     /**
      * Gets a value indicating whether a class element is either a static or an instance property declaration with an initializer.
      *
@@ -85210,7 +86804,7 @@
      * @param isStatic A value indicating whether the member should be a static or instance member.
      */
     function isInitializedProperty(member) {
-        return member.kind === 164 /* PropertyDeclaration */
+        return member.kind === 165 /* PropertyDeclaration */
             && member.initializer !== undefined;
     }
     ts.isInitializedProperty = isInitializedProperty;
@@ -85220,7 +86814,7 @@
      * @param member The class element node.
      */
     function isNonStaticMethodOrAccessorWithPrivateName(member) {
-        return !ts.hasStaticModifier(member) && ts.isMethodOrAccessor(member) && ts.isPrivateIdentifier(member.name);
+        return !ts.isStatic(member) && ts.isMethodOrAccessor(member) && ts.isPrivateIdentifier(member.name);
     }
     ts.isNonStaticMethodOrAccessorWithPrivateName = isNonStaticMethodOrAccessorWithPrivateName;
 })(ts || (ts = {}));
@@ -85760,6 +87354,7 @@
         // Examples: `\n` is converted to "\\n", a template string with a newline to "\n".
         var text = node.rawText;
         if (text === undefined) {
+            ts.Debug.assertIsDefined(currentSourceFile, "Template literal node is missing 'rawText' and does not have a source file. Possibly bad transform.");
             text = ts.getSourceTextOfNodeFromSourceFile(currentSourceFile, node);
             // text contains the original source, it will also contain quotes ("`"), dolar signs and braces ("${" and "}"),
             // thus we need to remove those characters.
@@ -85821,8 +87416,8 @@
         context.onEmitNode = onEmitNode;
         context.onSubstituteNode = onSubstituteNode;
         // Enable substitution for property/element access to emit const enum values.
-        context.enableSubstitution(202 /* PropertyAccessExpression */);
-        context.enableSubstitution(203 /* ElementAccessExpression */);
+        context.enableSubstitution(204 /* PropertyAccessExpression */);
+        context.enableSubstitution(205 /* ElementAccessExpression */);
         // These variables contain state that changes as we descend into the tree.
         var currentSourceFile;
         var currentNamespace;
@@ -85848,14 +87443,14 @@
         var applicableSubstitutions;
         return transformSourceFileOrBundle;
         function transformSourceFileOrBundle(node) {
-            if (node.kind === 299 /* Bundle */) {
+            if (node.kind === 301 /* Bundle */) {
                 return transformBundle(node);
             }
             return transformSourceFile(node);
         }
         function transformBundle(node) {
             return factory.createBundle(node.sourceFiles.map(transformSourceFile), ts.mapDefined(node.prepends, function (prepend) {
-                if (prepend.kind === 301 /* InputFiles */) {
+                if (prepend.kind === 303 /* InputFiles */) {
                     return ts.createUnparsedSourceFile(prepend, "js");
                 }
                 return prepend;
@@ -85906,16 +87501,16 @@
          */
         function onBeforeVisitNode(node) {
             switch (node.kind) {
-                case 298 /* SourceFile */:
-                case 259 /* CaseBlock */:
-                case 258 /* ModuleBlock */:
-                case 231 /* Block */:
+                case 300 /* SourceFile */:
+                case 261 /* CaseBlock */:
+                case 260 /* ModuleBlock */:
+                case 233 /* Block */:
                     currentLexicalScope = node;
                     currentNameScope = undefined;
                     currentScopeFirstDeclarationsOfName = undefined;
                     break;
-                case 253 /* ClassDeclaration */:
-                case 252 /* FunctionDeclaration */:
+                case 255 /* ClassDeclaration */:
+                case 254 /* FunctionDeclaration */:
                     if (ts.hasSyntacticModifier(node, 2 /* Ambient */)) {
                         break;
                     }
@@ -85927,7 +87522,7 @@
                         // These nodes should always have names unless they are default-exports;
                         // however, class declaration parsing allows for undefined names, so syntactically invalid
                         // programs may also have an undefined name.
-                        ts.Debug.assert(node.kind === 253 /* ClassDeclaration */ || ts.hasSyntacticModifier(node, 512 /* Default */));
+                        ts.Debug.assert(node.kind === 255 /* ClassDeclaration */ || ts.hasSyntacticModifier(node, 512 /* Default */));
                     }
                     if (ts.isClassDeclaration(node)) {
                         // XXX: should probably also cover interfaces and type aliases that can have type variables?
@@ -85970,10 +87565,10 @@
          */
         function sourceElementVisitorWorker(node) {
             switch (node.kind) {
-                case 262 /* ImportDeclaration */:
-                case 261 /* ImportEqualsDeclaration */:
-                case 267 /* ExportAssignment */:
-                case 268 /* ExportDeclaration */:
+                case 264 /* ImportDeclaration */:
+                case 263 /* ImportEqualsDeclaration */:
+                case 269 /* ExportAssignment */:
+                case 270 /* ExportDeclaration */:
                     return visitElidableStatement(node);
                 default:
                     return visitorWorker(node);
@@ -85994,13 +87589,13 @@
                 return node;
             }
             switch (node.kind) {
-                case 262 /* ImportDeclaration */:
+                case 264 /* ImportDeclaration */:
                     return visitImportDeclaration(node);
-                case 261 /* ImportEqualsDeclaration */:
+                case 263 /* ImportEqualsDeclaration */:
                     return visitImportEqualsDeclaration(node);
-                case 267 /* ExportAssignment */:
+                case 269 /* ExportAssignment */:
                     return visitExportAssignment(node);
-                case 268 /* ExportDeclaration */:
+                case 270 /* ExportDeclaration */:
                     return visitExportDeclaration(node);
                 default:
                     ts.Debug.fail("Unhandled ellided statement");
@@ -86020,11 +87615,11 @@
          * @param node The node to visit.
          */
         function namespaceElementVisitorWorker(node) {
-            if (node.kind === 268 /* ExportDeclaration */ ||
-                node.kind === 262 /* ImportDeclaration */ ||
-                node.kind === 263 /* ImportClause */ ||
-                (node.kind === 261 /* ImportEqualsDeclaration */ &&
-                    node.moduleReference.kind === 273 /* ExternalModuleReference */)) {
+            if (node.kind === 270 /* ExportDeclaration */ ||
+                node.kind === 264 /* ImportDeclaration */ ||
+                node.kind === 265 /* ImportClause */ ||
+                (node.kind === 263 /* ImportEqualsDeclaration */ &&
+                    node.moduleReference.kind === 275 /* ExternalModuleReference */)) {
                 // do not emit ES6 imports and exports since they are illegal inside a namespace
                 return undefined;
             }
@@ -86048,19 +87643,20 @@
          */
         function classElementVisitorWorker(node) {
             switch (node.kind) {
-                case 167 /* Constructor */:
+                case 169 /* Constructor */:
                     return visitConstructor(node);
-                case 164 /* PropertyDeclaration */:
+                case 165 /* PropertyDeclaration */:
                     // Property declarations are not TypeScript syntax, but they must be visited
                     // for the decorator transformation.
                     return visitPropertyDeclaration(node);
-                case 172 /* IndexSignature */:
-                case 168 /* GetAccessor */:
-                case 169 /* SetAccessor */:
-                case 166 /* MethodDeclaration */:
+                case 174 /* IndexSignature */:
+                case 170 /* GetAccessor */:
+                case 171 /* SetAccessor */:
+                case 167 /* MethodDeclaration */:
+                case 168 /* ClassStaticBlockDeclaration */:
                     // Fallback to the default visit behavior.
                     return visitorWorker(node);
-                case 230 /* SemicolonClassElement */:
+                case 232 /* SemicolonClassElement */:
                     return node;
                 default:
                     return ts.Debug.failBadSyntaxKind(node);
@@ -86070,7 +87666,7 @@
             if (ts.modifierToFlag(node.kind) & 18654 /* TypeScriptModifier */) {
                 return undefined;
             }
-            else if (currentNamespace && node.kind === 92 /* ExportKeyword */) {
+            else if (currentNamespace && node.kind === 93 /* ExportKeyword */) {
                 return undefined;
             }
             return node;
@@ -86087,72 +87683,72 @@
                 return factory.createNotEmittedStatement(node);
             }
             switch (node.kind) {
-                case 92 /* ExportKeyword */:
-                case 87 /* DefaultKeyword */:
+                case 93 /* ExportKeyword */:
+                case 88 /* DefaultKeyword */:
                     // ES6 export and default modifiers are elided when inside a namespace.
                     return currentNamespace ? undefined : node;
-                case 122 /* PublicKeyword */:
-                case 120 /* PrivateKeyword */:
-                case 121 /* ProtectedKeyword */:
-                case 125 /* AbstractKeyword */:
-                case 156 /* OverrideKeyword */:
-                case 84 /* ConstKeyword */:
-                case 133 /* DeclareKeyword */:
-                case 142 /* ReadonlyKeyword */:
+                case 123 /* PublicKeyword */:
+                case 121 /* PrivateKeyword */:
+                case 122 /* ProtectedKeyword */:
+                case 126 /* AbstractKeyword */:
+                case 157 /* OverrideKeyword */:
+                case 85 /* ConstKeyword */:
+                case 134 /* DeclareKeyword */:
+                case 143 /* ReadonlyKeyword */:
                 // TypeScript accessibility and readonly modifiers are elided
                 // falls through
-                case 179 /* ArrayType */:
-                case 180 /* TupleType */:
-                case 181 /* OptionalType */:
-                case 182 /* RestType */:
-                case 178 /* TypeLiteral */:
-                case 173 /* TypePredicate */:
-                case 160 /* TypeParameter */:
-                case 128 /* AnyKeyword */:
-                case 152 /* UnknownKeyword */:
-                case 131 /* BooleanKeyword */:
-                case 147 /* StringKeyword */:
-                case 144 /* NumberKeyword */:
-                case 141 /* NeverKeyword */:
-                case 113 /* VoidKeyword */:
-                case 148 /* SymbolKeyword */:
-                case 176 /* ConstructorType */:
-                case 175 /* FunctionType */:
-                case 177 /* TypeQuery */:
-                case 174 /* TypeReference */:
-                case 183 /* UnionType */:
-                case 184 /* IntersectionType */:
-                case 185 /* ConditionalType */:
-                case 187 /* ParenthesizedType */:
-                case 188 /* ThisType */:
-                case 189 /* TypeOperator */:
-                case 190 /* IndexedAccessType */:
-                case 191 /* MappedType */:
-                case 192 /* LiteralType */:
+                case 181 /* ArrayType */:
+                case 182 /* TupleType */:
+                case 183 /* OptionalType */:
+                case 184 /* RestType */:
+                case 180 /* TypeLiteral */:
+                case 175 /* TypePredicate */:
+                case 161 /* TypeParameter */:
+                case 129 /* AnyKeyword */:
+                case 153 /* UnknownKeyword */:
+                case 132 /* BooleanKeyword */:
+                case 148 /* StringKeyword */:
+                case 145 /* NumberKeyword */:
+                case 142 /* NeverKeyword */:
+                case 114 /* VoidKeyword */:
+                case 149 /* SymbolKeyword */:
+                case 178 /* ConstructorType */:
+                case 177 /* FunctionType */:
+                case 179 /* TypeQuery */:
+                case 176 /* TypeReference */:
+                case 185 /* UnionType */:
+                case 186 /* IntersectionType */:
+                case 187 /* ConditionalType */:
+                case 189 /* ParenthesizedType */:
+                case 190 /* ThisType */:
+                case 191 /* TypeOperator */:
+                case 192 /* IndexedAccessType */:
+                case 193 /* MappedType */:
+                case 194 /* LiteralType */:
                 // TypeScript type nodes are elided.
                 // falls through
-                case 172 /* IndexSignature */:
+                case 174 /* IndexSignature */:
                 // TypeScript index signatures are elided.
                 // falls through
-                case 162 /* Decorator */:
-                // TypeScript decorators are elided. They will be emitted as part of visitClassDeclaration.
-                // falls through
-                case 255 /* TypeAliasDeclaration */:
-                    // TypeScript type-only declarations are elided.
+                case 163 /* Decorator */:
+                    // TypeScript decorators are elided. They will be emitted as part of visitClassDeclaration.
                     return undefined;
-                case 164 /* PropertyDeclaration */:
+                case 257 /* TypeAliasDeclaration */:
+                    // TypeScript type-only declarations are elided.
+                    return factory.createNotEmittedStatement(node);
+                case 165 /* PropertyDeclaration */:
                     // TypeScript property declarations are elided. However their names are still visited, and can potentially be retained if they could have sideeffects
                     return visitPropertyDeclaration(node);
-                case 260 /* NamespaceExportDeclaration */:
+                case 262 /* NamespaceExportDeclaration */:
                     // TypeScript namespace export declarations are elided.
                     return undefined;
-                case 167 /* Constructor */:
+                case 169 /* Constructor */:
                     return visitConstructor(node);
-                case 254 /* InterfaceDeclaration */:
+                case 256 /* InterfaceDeclaration */:
                     // TypeScript interfaces are elided, but some comments may be preserved.
                     // See the implementation of `getLeadingComments` in comments.ts for more details.
                     return factory.createNotEmittedStatement(node);
-                case 253 /* ClassDeclaration */:
+                case 255 /* ClassDeclaration */:
                     // This may be a class declaration with TypeScript syntax extensions.
                     //
                     // TypeScript class syntax extensions include:
@@ -86162,7 +87758,7 @@
                     // - index signatures
                     // - method overload signatures
                     return visitClassDeclaration(node);
-                case 222 /* ClassExpression */:
+                case 224 /* ClassExpression */:
                     // This may be a class expression with TypeScript syntax extensions.
                     //
                     // TypeScript class syntax extensions include:
@@ -86172,35 +87768,35 @@
                     // - index signatures
                     // - method overload signatures
                     return visitClassExpression(node);
-                case 287 /* HeritageClause */:
+                case 289 /* HeritageClause */:
                     // This may be a heritage clause with TypeScript syntax extensions.
                     //
                     // TypeScript heritage clause extensions include:
                     // - `implements` clause
                     return visitHeritageClause(node);
-                case 224 /* ExpressionWithTypeArguments */:
+                case 226 /* ExpressionWithTypeArguments */:
                     // TypeScript supports type arguments on an expression in an `extends` heritage clause.
                     return visitExpressionWithTypeArguments(node);
-                case 166 /* MethodDeclaration */:
+                case 167 /* MethodDeclaration */:
                     // TypeScript method declarations may have decorators, modifiers
                     // or type annotations.
                     return visitMethodDeclaration(node);
-                case 168 /* GetAccessor */:
+                case 170 /* GetAccessor */:
                     // Get Accessors can have TypeScript modifiers, decorators, and type annotations.
                     return visitGetAccessor(node);
-                case 169 /* SetAccessor */:
+                case 171 /* SetAccessor */:
                     // Set Accessors can have TypeScript modifiers and type annotations.
                     return visitSetAccessor(node);
-                case 252 /* FunctionDeclaration */:
+                case 254 /* FunctionDeclaration */:
                     // Typescript function declarations can have modifiers, decorators, and type annotations.
                     return visitFunctionDeclaration(node);
-                case 209 /* FunctionExpression */:
+                case 211 /* FunctionExpression */:
                     // TypeScript function expressions can have modifiers and type annotations.
                     return visitFunctionExpression(node);
-                case 210 /* ArrowFunction */:
+                case 212 /* ArrowFunction */:
                     // TypeScript arrow functions can have modifiers and type annotations.
                     return visitArrowFunction(node);
-                case 161 /* Parameter */:
+                case 162 /* Parameter */:
                     // This may be a parameter declaration with TypeScript syntax extensions.
                     //
                     // TypeScript parameter declaration syntax extensions include:
@@ -86210,40 +87806,40 @@
                     // - type annotations
                     // - this parameters
                     return visitParameter(node);
-                case 208 /* ParenthesizedExpression */:
+                case 210 /* ParenthesizedExpression */:
                     // ParenthesizedExpressions are TypeScript if their expression is a
                     // TypeAssertion or AsExpression
                     return visitParenthesizedExpression(node);
-                case 207 /* TypeAssertionExpression */:
-                case 225 /* AsExpression */:
+                case 209 /* TypeAssertionExpression */:
+                case 227 /* AsExpression */:
                     // TypeScript type assertions are removed, but their subtrees are preserved.
                     return visitAssertionExpression(node);
-                case 204 /* CallExpression */:
+                case 206 /* CallExpression */:
                     return visitCallExpression(node);
-                case 205 /* NewExpression */:
+                case 207 /* NewExpression */:
                     return visitNewExpression(node);
-                case 206 /* TaggedTemplateExpression */:
+                case 208 /* TaggedTemplateExpression */:
                     return visitTaggedTemplateExpression(node);
-                case 226 /* NonNullExpression */:
+                case 228 /* NonNullExpression */:
                     // TypeScript non-null expressions are removed, but their subtrees are preserved.
                     return visitNonNullExpression(node);
-                case 256 /* EnumDeclaration */:
+                case 258 /* EnumDeclaration */:
                     // TypeScript enum declarations do not exist in ES6 and must be rewritten.
                     return visitEnumDeclaration(node);
-                case 233 /* VariableStatement */:
+                case 235 /* VariableStatement */:
                     // TypeScript namespace exports for variable statements must be transformed.
                     return visitVariableStatement(node);
-                case 250 /* VariableDeclaration */:
+                case 252 /* VariableDeclaration */:
                     return visitVariableDeclaration(node);
-                case 257 /* ModuleDeclaration */:
+                case 259 /* ModuleDeclaration */:
                     // TypeScript namespace declarations must be transformed.
                     return visitModuleDeclaration(node);
-                case 261 /* ImportEqualsDeclaration */:
+                case 263 /* ImportEqualsDeclaration */:
                     // TypeScript namespace or external module import.
                     return visitImportEqualsDeclaration(node);
-                case 275 /* JsxSelfClosingElement */:
+                case 277 /* JsxSelfClosingElement */:
                     return visitJsxSelfClosingElement(node);
-                case 276 /* JsxOpeningElement */:
+                case 278 /* JsxOpeningElement */:
                     return visitJsxJsxOpeningElement(node);
                 default:
                     // node contains some other TypeScript syntax
@@ -86256,33 +87852,14 @@
                 !ts.isJsonSourceFile(node);
             return factory.updateSourceFile(node, ts.visitLexicalEnvironment(node.statements, sourceElementVisitor, context, /*start*/ 0, alwaysStrict));
         }
-        /**
-         * Tests whether we should emit a __decorate call for a class declaration.
-         */
-        function shouldEmitDecorateCallForClass(node) {
-            if (node.decorators && node.decorators.length > 0) {
-                return true;
-            }
-            var constructor = ts.getFirstConstructorWithBody(node);
-            if (constructor) {
-                return ts.forEach(constructor.parameters, shouldEmitDecorateCallForParameter);
-            }
-            return false;
-        }
-        /**
-         * Tests whether we should emit a __decorate call for a parameter declaration.
-         */
-        function shouldEmitDecorateCallForParameter(parameter) {
-            return parameter.decorators !== undefined && parameter.decorators.length > 0;
-        }
         function getClassFacts(node, staticProperties) {
             var facts = 0 /* None */;
             if (ts.some(staticProperties))
                 facts |= 1 /* HasStaticInitializedProperties */;
             var extendsClauseElement = ts.getEffectiveBaseTypeNode(node);
-            if (extendsClauseElement && ts.skipOuterExpressions(extendsClauseElement.expression).kind !== 103 /* NullKeyword */)
+            if (extendsClauseElement && ts.skipOuterExpressions(extendsClauseElement.expression).kind !== 104 /* NullKeyword */)
                 facts |= 64 /* IsDerivedClass */;
-            if (shouldEmitDecorateCallForClass(node))
+            if (ts.classOrConstructorParameterIsDecorated(node))
                 facts |= 2 /* HasConstructorDecorators */;
             if (ts.childIsDecorated(node))
                 facts |= 4 /* HasMemberDecorators */;
@@ -86503,7 +88080,11 @@
             //
             var location = ts.moveRangePastDecorators(node);
             var classAlias = getClassAliasIfNeeded(node);
-            var declName = factory.getLocalName(node, /*allowComments*/ false, /*allowSourceMaps*/ true);
+            // When we transform to ES5/3 this will be moved inside an IIFE and should reference the name
+            // without any block-scoped variable collision handling
+            var declName = languageVersion <= 2 /* ES2015 */ ?
+                factory.getInternalName(node, /*allowComments*/ false, /*allowSourceMaps*/ true) :
+                factory.getLocalName(node, /*allowComments*/ false, /*allowSourceMaps*/ true);
             //  ... = class ${name} ${heritageClauses} {
             //      ${members}
             //  }
@@ -86581,7 +88162,7 @@
          * @param member The class member.
          */
         function isStaticDecoratedClassElement(member, parent) {
-            return isDecoratedClassElement(member, /*isStatic*/ true, parent);
+            return isDecoratedClassElement(member, /*isStaticElement*/ true, parent);
         }
         /**
          * Determines whether a class member is an instance member of a class that is decorated,
@@ -86590,7 +88171,7 @@
          * @param member The class member.
          */
         function isInstanceDecoratedClassElement(member, parent) {
-            return isDecoratedClassElement(member, /*isStatic*/ false, parent);
+            return isDecoratedClassElement(member, /*isStaticElement*/ false, parent);
         }
         /**
          * Determines whether a class member is either a static or an instance member of a class
@@ -86598,9 +88179,9 @@
          *
          * @param member The class member.
          */
-        function isDecoratedClassElement(member, isStatic, parent) {
+        function isDecoratedClassElement(member, isStaticElement, parent) {
             return ts.nodeOrChildIsDecorated(member, parent)
-                && isStatic === ts.hasSyntacticModifier(member, 32 /* Static */);
+                && isStaticElement === ts.isStatic(member);
         }
         /**
          * Gets an array of arrays of decorators for the parameters of a function-like node.
@@ -86652,12 +88233,12 @@
          */
         function getAllDecoratorsOfClassElement(node, member) {
             switch (member.kind) {
-                case 168 /* GetAccessor */:
-                case 169 /* SetAccessor */:
+                case 170 /* GetAccessor */:
+                case 171 /* SetAccessor */:
                     return getAllDecoratorsOfAccessors(node, member);
-                case 166 /* MethodDeclaration */:
+                case 167 /* MethodDeclaration */:
                     return getAllDecoratorsOfMethod(member);
-                case 164 /* PropertyDeclaration */:
+                case 165 /* PropertyDeclaration */:
                     return getAllDecoratorsOfProperty(member);
                 default:
                     return undefined;
@@ -86810,7 +88391,7 @@
             var prefix = getClassMemberPrefix(node, member);
             var memberName = getExpressionForPropertyName(member, /*generateNameForComputedPropertyName*/ true);
             var descriptor = languageVersion > 0 /* ES3 */
-                ? member.kind === 164 /* PropertyDeclaration */
+                ? member.kind === 165 /* PropertyDeclaration */
                     // We emit `void 0` here to indicate to `__decorate` that it can invoke `Object.defineProperty` directly, but that it
                     // should not invoke `Object.getOwnPropertyDescriptor`.
                     ? factory.createVoidZero()
@@ -86846,7 +88427,11 @@
                 return undefined;
             }
             var classAlias = classAliases && classAliases[ts.getOriginalNodeId(node)];
-            var localName = factory.getLocalName(node, /*allowComments*/ false, /*allowSourceMaps*/ true);
+            // When we transform to ES5/3 this will be moved inside an IIFE and should reference the name
+            // without any block-scoped variable collision handling
+            var localName = languageVersion <= 2 /* ES2015 */ ?
+                factory.getInternalName(node, /*allowComments*/ false, /*allowSourceMaps*/ true) :
+                factory.getLocalName(node, /*allowComments*/ false, /*allowSourceMaps*/ true);
             var decorate = emitHelpers().createDecorateHelper(decoratorExpressions, localName);
             var expression = factory.createAssignment(localName, classAlias ? factory.createAssignment(classAlias, decorate) : decorate);
             ts.setEmitFlags(expression, 1536 /* NoComments */);
@@ -86934,10 +88519,10 @@
          */
         function shouldAddTypeMetadata(node) {
             var kind = node.kind;
-            return kind === 166 /* MethodDeclaration */
-                || kind === 168 /* GetAccessor */
-                || kind === 169 /* SetAccessor */
-                || kind === 164 /* PropertyDeclaration */;
+            return kind === 167 /* MethodDeclaration */
+                || kind === 170 /* GetAccessor */
+                || kind === 171 /* SetAccessor */
+                || kind === 165 /* PropertyDeclaration */;
         }
         /**
          * Determines whether to emit the "design:returntype" metadata based on the node's kind.
@@ -86947,7 +88532,7 @@
          * @param node The node to test.
          */
         function shouldAddReturnTypeMetadata(node) {
-            return node.kind === 166 /* MethodDeclaration */;
+            return node.kind === 167 /* MethodDeclaration */;
         }
         /**
          * Determines whether to emit the "design:paramtypes" metadata based on the node's kind.
@@ -86958,12 +88543,12 @@
          */
         function shouldAddParamTypesMetadata(node) {
             switch (node.kind) {
-                case 253 /* ClassDeclaration */:
-                case 222 /* ClassExpression */:
+                case 255 /* ClassDeclaration */:
+                case 224 /* ClassExpression */:
                     return ts.getFirstConstructorWithBody(node) !== undefined;
-                case 166 /* MethodDeclaration */:
-                case 168 /* GetAccessor */:
-                case 169 /* SetAccessor */:
+                case 167 /* MethodDeclaration */:
+                case 170 /* GetAccessor */:
+                case 171 /* SetAccessor */:
                     return true;
             }
             return false;
@@ -86980,15 +88565,15 @@
          */
         function serializeTypeOfNode(node) {
             switch (node.kind) {
-                case 164 /* PropertyDeclaration */:
-                case 161 /* Parameter */:
+                case 165 /* PropertyDeclaration */:
+                case 162 /* Parameter */:
                     return serializeTypeNode(node.type);
-                case 169 /* SetAccessor */:
-                case 168 /* GetAccessor */:
+                case 171 /* SetAccessor */:
+                case 170 /* GetAccessor */:
                     return serializeTypeNode(getAccessorTypeNode(node));
-                case 253 /* ClassDeclaration */:
-                case 222 /* ClassExpression */:
-                case 166 /* MethodDeclaration */:
+                case 255 /* ClassDeclaration */:
+                case 224 /* ClassExpression */:
+                case 167 /* MethodDeclaration */:
                     return factory.createIdentifier("Function");
                 default:
                     return factory.createVoidZero();
@@ -87025,7 +88610,7 @@
             return factory.createArrayLiteralExpression(expressions);
         }
         function getParametersOfDecoratedDeclaration(node, container) {
-            if (container && node.kind === 168 /* GetAccessor */) {
+            if (container && node.kind === 170 /* GetAccessor */) {
                 var setAccessor = ts.getAllAccessorDeclarations(container.members, node).setAccessor;
                 if (setAccessor) {
                     return setAccessor.parameters;
@@ -87070,82 +88655,82 @@
                 return factory.createIdentifier("Object");
             }
             switch (node.kind) {
-                case 113 /* VoidKeyword */:
-                case 150 /* UndefinedKeyword */:
-                case 141 /* NeverKeyword */:
+                case 114 /* VoidKeyword */:
+                case 151 /* UndefinedKeyword */:
+                case 142 /* NeverKeyword */:
                     return factory.createVoidZero();
-                case 187 /* ParenthesizedType */:
+                case 189 /* ParenthesizedType */:
                     return serializeTypeNode(node.type);
-                case 175 /* FunctionType */:
-                case 176 /* ConstructorType */:
+                case 177 /* FunctionType */:
+                case 178 /* ConstructorType */:
                     return factory.createIdentifier("Function");
-                case 179 /* ArrayType */:
-                case 180 /* TupleType */:
+                case 181 /* ArrayType */:
+                case 182 /* TupleType */:
                     return factory.createIdentifier("Array");
-                case 173 /* TypePredicate */:
-                case 131 /* BooleanKeyword */:
+                case 175 /* TypePredicate */:
+                case 132 /* BooleanKeyword */:
                     return factory.createIdentifier("Boolean");
-                case 147 /* StringKeyword */:
+                case 148 /* StringKeyword */:
                     return factory.createIdentifier("String");
-                case 145 /* ObjectKeyword */:
+                case 146 /* ObjectKeyword */:
                     return factory.createIdentifier("Object");
-                case 192 /* LiteralType */:
+                case 194 /* LiteralType */:
                     switch (node.literal.kind) {
                         case 10 /* StringLiteral */:
                         case 14 /* NoSubstitutionTemplateLiteral */:
                             return factory.createIdentifier("String");
-                        case 215 /* PrefixUnaryExpression */:
+                        case 217 /* PrefixUnaryExpression */:
                         case 8 /* NumericLiteral */:
                             return factory.createIdentifier("Number");
                         case 9 /* BigIntLiteral */:
                             return getGlobalBigIntNameWithFallback();
-                        case 109 /* TrueKeyword */:
-                        case 94 /* FalseKeyword */:
+                        case 110 /* TrueKeyword */:
+                        case 95 /* FalseKeyword */:
                             return factory.createIdentifier("Boolean");
-                        case 103 /* NullKeyword */:
+                        case 104 /* NullKeyword */:
                             return factory.createVoidZero();
                         default:
                             return ts.Debug.failBadSyntaxKind(node.literal);
                     }
-                case 144 /* NumberKeyword */:
+                case 145 /* NumberKeyword */:
                     return factory.createIdentifier("Number");
-                case 155 /* BigIntKeyword */:
+                case 156 /* BigIntKeyword */:
                     return getGlobalBigIntNameWithFallback();
-                case 148 /* SymbolKeyword */:
+                case 149 /* SymbolKeyword */:
                     return languageVersion < 2 /* ES2015 */
                         ? getGlobalSymbolNameWithFallback()
                         : factory.createIdentifier("Symbol");
-                case 174 /* TypeReference */:
+                case 176 /* TypeReference */:
                     return serializeTypeReferenceNode(node);
-                case 184 /* IntersectionType */:
-                case 183 /* UnionType */:
+                case 186 /* IntersectionType */:
+                case 185 /* UnionType */:
                     return serializeTypeList(node.types);
-                case 185 /* ConditionalType */:
+                case 187 /* ConditionalType */:
                     return serializeTypeList([node.trueType, node.falseType]);
-                case 189 /* TypeOperator */:
-                    if (node.operator === 142 /* ReadonlyKeyword */) {
+                case 191 /* TypeOperator */:
+                    if (node.operator === 143 /* ReadonlyKeyword */) {
                         return serializeTypeNode(node.type);
                     }
                     break;
-                case 177 /* TypeQuery */:
-                case 190 /* IndexedAccessType */:
-                case 191 /* MappedType */:
-                case 178 /* TypeLiteral */:
-                case 128 /* AnyKeyword */:
-                case 152 /* UnknownKeyword */:
-                case 188 /* ThisType */:
-                case 196 /* ImportType */:
+                case 179 /* TypeQuery */:
+                case 192 /* IndexedAccessType */:
+                case 193 /* MappedType */:
+                case 180 /* TypeLiteral */:
+                case 129 /* AnyKeyword */:
+                case 153 /* UnknownKeyword */:
+                case 190 /* ThisType */:
+                case 198 /* ImportType */:
                     break;
                 // handle JSDoc types from an invalid parse
-                case 304 /* JSDocAllType */:
-                case 305 /* JSDocUnknownType */:
-                case 309 /* JSDocFunctionType */:
-                case 310 /* JSDocVariadicType */:
-                case 311 /* JSDocNamepathType */:
+                case 307 /* JSDocAllType */:
+                case 308 /* JSDocUnknownType */:
+                case 312 /* JSDocFunctionType */:
+                case 313 /* JSDocVariadicType */:
+                case 314 /* JSDocNamepathType */:
                     break;
-                case 306 /* JSDocNullableType */:
-                case 307 /* JSDocNonNullableType */:
-                case 308 /* JSDocOptionalType */:
+                case 309 /* JSDocNullableType */:
+                case 310 /* JSDocNonNullableType */:
+                case 311 /* JSDocOptionalType */:
                     return serializeTypeNode(node.type);
                 default:
                     return ts.Debug.failBadSyntaxKind(node);
@@ -87156,15 +88741,15 @@
             // Note when updating logic here also update getEntityNameForDecoratorMetadata
             // so that aliases can be marked as referenced
             var serializedUnion;
-            for (var _i = 0, types_24 = types; _i < types_24.length; _i++) {
-                var typeNode = types_24[_i];
-                while (typeNode.kind === 187 /* ParenthesizedType */) {
+            for (var _i = 0, types_23 = types; _i < types_23.length; _i++) {
+                var typeNode = types_23[_i];
+                while (typeNode.kind === 189 /* ParenthesizedType */) {
                     typeNode = typeNode.type; // Skip parens if need be
                 }
-                if (typeNode.kind === 141 /* NeverKeyword */) {
+                if (typeNode.kind === 142 /* NeverKeyword */) {
                     continue; // Always elide `never` from the union/intersection if possible
                 }
-                if (!strictNullChecks && (typeNode.kind === 192 /* LiteralType */ && typeNode.literal.kind === 103 /* NullKeyword */ || typeNode.kind === 150 /* UndefinedKeyword */)) {
+                if (!strictNullChecks && (typeNode.kind === 194 /* LiteralType */ && typeNode.literal.kind === 104 /* NullKeyword */ || typeNode.kind === 151 /* UndefinedKeyword */)) {
                     continue; // Elide null and undefined from unions for metadata, just like what we did prior to the implementation of strict null checks
                 }
                 var serializedIndividual = serializeTypeNode(typeNode);
@@ -87246,12 +88831,12 @@
          * @param node The entity name to serialize.
          */
         function serializeEntityNameAsExpressionFallback(node) {
-            if (node.kind === 78 /* Identifier */) {
+            if (node.kind === 79 /* Identifier */) {
                 // A -> typeof A !== undefined && A
                 var copied = serializeEntityNameAsExpression(node);
                 return createCheckedValue(copied, copied);
             }
-            if (node.left.kind === 78 /* Identifier */) {
+            if (node.left.kind === 79 /* Identifier */) {
                 // A.B -> typeof A !== undefined && A.B
                 return createCheckedValue(serializeEntityNameAsExpression(node.left), serializeEntityNameAsExpression(node));
             }
@@ -87267,14 +88852,14 @@
          */
         function serializeEntityNameAsExpression(node) {
             switch (node.kind) {
-                case 78 /* Identifier */:
+                case 79 /* Identifier */:
                     // Create a clone of the name with a new parent, and treat it as if it were
                     // a source tree node for the purposes of the checker.
                     var name = ts.setParent(ts.setTextRange(ts.parseNodeFactory.cloneNode(node), node), node.parent);
                     name.original = undefined;
                     ts.setParent(name, ts.getParseTreeNode(currentLexicalScope)); // ensure the parent is set to a parse tree node.
                     return name;
-                case 158 /* QualifiedName */:
+                case 159 /* QualifiedName */:
                     return serializeQualifiedNameAsExpression(node);
             }
         }
@@ -87365,7 +88950,7 @@
          * @param node The HeritageClause to transform.
          */
         function visitHeritageClause(node) {
-            if (node.token === 116 /* ImplementsKeyword */) {
+            if (node.token === 117 /* ImplementsKeyword */) {
                 // implements clauses are elided
                 return undefined;
             }
@@ -87847,12 +89432,12 @@
             // enums in any other scope are emitted as a `let` declaration.
             var statement = factory.createVariableStatement(ts.visitNodes(node.modifiers, modifierVisitor, ts.isModifier), factory.createVariableDeclarationList([
                 factory.createVariableDeclaration(factory.getLocalName(node, /*allowComments*/ false, /*allowSourceMaps*/ true))
-            ], currentLexicalScope.kind === 298 /* SourceFile */ ? 0 /* None */ : 1 /* Let */));
+            ], currentLexicalScope.kind === 300 /* SourceFile */ ? 0 /* None */ : 1 /* Let */));
             ts.setOriginalNode(statement, node);
             recordEmittedDeclarationInScope(node);
             if (isFirstEmittedDeclarationInScope(node)) {
                 // Adjust the source map emit to match the old emitter.
-                if (node.kind === 256 /* EnumDeclaration */) {
+                if (node.kind === 258 /* EnumDeclaration */) {
                     ts.setSourceMapRange(statement.declarationList, node);
                 }
                 else {
@@ -87977,7 +89562,7 @@
             var statementsLocation;
             var blockLocation;
             if (node.body) {
-                if (node.body.kind === 258 /* ModuleBlock */) {
+                if (node.body.kind === 260 /* ModuleBlock */) {
                     saveStateAndInvoke(node.body, function (body) { return ts.addRange(statements, ts.visitNodes(body.statements, namespaceElementVisitor, ts.isStatement)); });
                     statementsLocation = node.body.statements;
                     blockLocation = node.body;
@@ -88024,13 +89609,13 @@
             //     })(hi = hello.hi || (hello.hi = {}));
             // })(hello || (hello = {}));
             // We only want to emit comment on the namespace which contains block body itself, not the containing namespaces.
-            if (!node.body || node.body.kind !== 258 /* ModuleBlock */) {
+            if (!node.body || node.body.kind !== 260 /* ModuleBlock */) {
                 ts.setEmitFlags(block, ts.getEmitFlags(block) | 1536 /* NoComments */);
             }
             return block;
         }
         function getInnerMostModuleDeclarationFromDottedModule(moduleDeclaration) {
-            if (moduleDeclaration.body.kind === 257 /* ModuleDeclaration */) {
+            if (moduleDeclaration.body.kind === 259 /* ModuleDeclaration */) {
                 var recursiveInnerModule = getInnerMostModuleDeclarationFromDottedModule(moduleDeclaration.body);
                 return recursiveInnerModule || moduleDeclaration.body;
             }
@@ -88080,7 +89665,7 @@
          * @param node The named import bindings node.
          */
         function visitNamedImportBindings(node) {
-            if (node.kind === 264 /* NamespaceImport */) {
+            if (node.kind === 266 /* NamespaceImport */) {
                 // Elide a namespace import if it is not referenced.
                 return resolver.isReferencedAliasDeclaration(node) ? node : undefined;
             }
@@ -88307,14 +89892,14 @@
             return factory.createPropertyAccessExpression(factory.getDeclarationName(node), "prototype");
         }
         function getClassMemberPrefix(node, member) {
-            return ts.hasSyntacticModifier(member, 32 /* Static */)
+            return ts.isStatic(member)
                 ? factory.getDeclarationName(node)
                 : getClassPrototype(node);
         }
         function enableSubstitutionForNonQualifiedEnumMembers() {
             if ((enabledSubstitutions & 8 /* NonQualifiedEnumMembers */) === 0) {
                 enabledSubstitutions |= 8 /* NonQualifiedEnumMembers */;
-                context.enableSubstitution(78 /* Identifier */);
+                context.enableSubstitution(79 /* Identifier */);
             }
         }
         function enableSubstitutionForClassAliases() {
@@ -88322,7 +89907,7 @@
                 enabledSubstitutions |= 1 /* ClassAliases */;
                 // We need to enable substitutions for identifiers. This allows us to
                 // substitute class names inside of a class declaration.
-                context.enableSubstitution(78 /* Identifier */);
+                context.enableSubstitution(79 /* Identifier */);
                 // Keep track of class aliases.
                 classAliases = [];
             }
@@ -88332,17 +89917,17 @@
                 enabledSubstitutions |= 2 /* NamespaceExports */;
                 // We need to enable substitutions for identifiers and shorthand property assignments. This allows us to
                 // substitute the names of exported members of a namespace.
-                context.enableSubstitution(78 /* Identifier */);
-                context.enableSubstitution(290 /* ShorthandPropertyAssignment */);
+                context.enableSubstitution(79 /* Identifier */);
+                context.enableSubstitution(292 /* ShorthandPropertyAssignment */);
                 // We need to be notified when entering and exiting namespaces.
-                context.enableEmitNotification(257 /* ModuleDeclaration */);
+                context.enableEmitNotification(259 /* ModuleDeclaration */);
             }
         }
         function isTransformedModuleDeclaration(node) {
-            return ts.getOriginalNode(node).kind === 257 /* ModuleDeclaration */;
+            return ts.getOriginalNode(node).kind === 259 /* ModuleDeclaration */;
         }
         function isTransformedEnumDeclaration(node) {
-            return ts.getOriginalNode(node).kind === 256 /* EnumDeclaration */;
+            return ts.getOriginalNode(node).kind === 258 /* EnumDeclaration */;
         }
         /**
          * Hook for node emit.
@@ -88401,11 +89986,11 @@
         }
         function substituteExpression(node) {
             switch (node.kind) {
-                case 78 /* Identifier */:
+                case 79 /* Identifier */:
                     return substituteExpressionIdentifier(node);
-                case 202 /* PropertyAccessExpression */:
+                case 204 /* PropertyAccessExpression */:
                     return substitutePropertyAccessExpression(node);
-                case 203 /* ElementAccessExpression */:
+                case 205 /* ElementAccessExpression */:
                     return substituteElementAccessExpression(node);
             }
             return node;
@@ -88443,9 +90028,9 @@
                 // If we are nested within a namespace declaration, we may need to qualifiy
                 // an identifier that is exported from a merged namespace.
                 var container = resolver.getReferencedExportContainer(node, /*prefixLocals*/ false);
-                if (container && container.kind !== 298 /* SourceFile */) {
-                    var substitute = (applicableSubstitutions & 2 /* NamespaceExports */ && container.kind === 257 /* ModuleDeclaration */) ||
-                        (applicableSubstitutions & 8 /* NonQualifiedEnumMembers */ && container.kind === 256 /* EnumDeclaration */);
+                if (container && container.kind !== 300 /* SourceFile */) {
+                    var substitute = (applicableSubstitutions & 2 /* NamespaceExports */ && container.kind === 259 /* ModuleDeclaration */) ||
+                        (applicableSubstitutions & 8 /* NonQualifiedEnumMembers */ && container.kind === 258 /* EnumDeclaration */);
                     if (substitute) {
                         return ts.setTextRange(factory.createPropertyAccessExpression(factory.getGeneratedNameForNode(container), node), 
                         /*location*/ node);
@@ -88496,6 +90081,11 @@
          * which have initializers that reference the class name.
          */
         ClassPropertySubstitutionFlags[ClassPropertySubstitutionFlags["ClassAliases"] = 1] = "ClassAliases";
+        /**
+         * Enables substitutions for class expressions with static fields
+         * which have initializers that reference the 'this' or 'super'.
+         */
+        ClassPropertySubstitutionFlags[ClassPropertySubstitutionFlags["ClassStaticThisOrSuperReference"] = 2] = "ClassStaticThisOrSuperReference";
     })(ClassPropertySubstitutionFlags || (ClassPropertySubstitutionFlags = {}));
     var PrivateIdentifierKind;
     (function (PrivateIdentifierKind) {
@@ -88503,6 +90093,14 @@
         PrivateIdentifierKind["Method"] = "m";
         PrivateIdentifierKind["Accessor"] = "a";
     })(PrivateIdentifierKind = ts.PrivateIdentifierKind || (ts.PrivateIdentifierKind = {}));
+    var ClassFacts;
+    (function (ClassFacts) {
+        ClassFacts[ClassFacts["None"] = 0] = "None";
+        ClassFacts[ClassFacts["ClassWasDecorated"] = 1] = "ClassWasDecorated";
+        ClassFacts[ClassFacts["NeedsClassConstructorReference"] = 2] = "NeedsClassConstructorReference";
+        ClassFacts[ClassFacts["NeedsClassSuperReference"] = 4] = "NeedsClassSuperReference";
+        ClassFacts[ClassFacts["NeedsSubstitutionForThisInClassStaticField"] = 8] = "NeedsSubstitutionForThisInClassStaticField";
+    })(ClassFacts || (ClassFacts = {}));
     /**
      * Transforms ECMAScript Class Syntax.
      * TypeScript parameter property syntax is transformed in the TypeScript transformer.
@@ -88511,14 +90109,20 @@
      * When --useDefineForClassFields is on, this transforms to ECMAScript semantics, with Object.defineProperty.
      */
     function transformClassFields(context) {
-        var factory = context.factory, hoistVariableDeclaration = context.hoistVariableDeclaration, endLexicalEnvironment = context.endLexicalEnvironment, resumeLexicalEnvironment = context.resumeLexicalEnvironment, addBlockScopedVariable = context.addBlockScopedVariable;
+        var factory = context.factory, hoistVariableDeclaration = context.hoistVariableDeclaration, endLexicalEnvironment = context.endLexicalEnvironment, startLexicalEnvironment = context.startLexicalEnvironment, resumeLexicalEnvironment = context.resumeLexicalEnvironment, addBlockScopedVariable = context.addBlockScopedVariable;
         var resolver = context.getEmitResolver();
         var compilerOptions = context.getCompilerOptions();
         var languageVersion = ts.getEmitScriptTarget(compilerOptions);
         var useDefineForClassFields = ts.getUseDefineForClassFields(compilerOptions);
-        var shouldTransformPrivateElements = languageVersion < 99 /* ESNext */;
+        var shouldTransformPrivateElementsOrClassStaticBlocks = languageVersion < 99 /* ESNext */;
+        // We don't need to transform `super` property access when targeting ES5, ES3 because
+        // the es2015 transformation handles those.
+        var shouldTransformSuperInStaticInitializers = (languageVersion <= 8 /* ES2021 */ || !useDefineForClassFields) && languageVersion >= 2 /* ES2015 */;
+        var shouldTransformThisInStaticInitializers = languageVersion <= 8 /* ES2021 */ || !useDefineForClassFields;
         var previousOnSubstituteNode = context.onSubstituteNode;
         context.onSubstituteNode = onSubstituteNode;
+        var previousOnEmitNode = context.onEmitNode;
+        context.onEmitNode = onEmitNode;
         var enabledSubstitutions;
         var classAliases;
         /**
@@ -88531,8 +90135,11 @@
          * emitted at the next execution site, in document order (for decorated classes).
          */
         var pendingStatements;
-        var privateIdentifierEnvironmentStack = [];
-        var currentPrivateIdentifierEnvironment;
+        var classLexicalEnvironmentStack = [];
+        var classLexicalEnvironmentMap = new ts.Map();
+        var currentClassLexicalEnvironment;
+        var currentComputedPropertyNameClassLexicalEnvironment;
+        var currentStaticPropertyDeclarationOrStaticBlock;
         return ts.chainBundle(context, transformSourceFile);
         function transformSourceFile(node) {
             var options = context.getCompilerOptions();
@@ -88544,42 +90151,80 @@
             ts.addEmitHelpers(visited, context.readEmitHelpers());
             return visited;
         }
-        function visitor(node) {
-            if (!(node.transformFlags & 8388608 /* ContainsClassFields */))
-                return node;
-            switch (node.kind) {
-                case 222 /* ClassExpression */:
-                case 253 /* ClassDeclaration */:
-                    return visitClassLike(node);
-                case 164 /* PropertyDeclaration */:
-                    return visitPropertyDeclaration(node);
-                case 233 /* VariableStatement */:
-                    return visitVariableStatement(node);
-                case 202 /* PropertyAccessExpression */:
-                    return visitPropertyAccessExpression(node);
-                case 215 /* PrefixUnaryExpression */:
-                    return visitPrefixUnaryExpression(node);
-                case 216 /* PostfixUnaryExpression */:
-                    return visitPostfixUnaryExpression(node, /*valueIsDiscarded*/ false);
-                case 204 /* CallExpression */:
-                    return visitCallExpression(node);
-                case 217 /* BinaryExpression */:
-                    return visitBinaryExpression(node);
-                case 79 /* PrivateIdentifier */:
-                    return visitPrivateIdentifier(node);
-                case 234 /* ExpressionStatement */:
-                    return visitExpressionStatement(node);
-                case 238 /* ForStatement */:
-                    return visitForStatement(node);
-                case 206 /* TaggedTemplateExpression */:
-                    return visitTaggedTemplateExpression(node);
+        function visitorWorker(node, valueIsDiscarded) {
+            if (node.transformFlags & 8388608 /* ContainsClassFields */) {
+                switch (node.kind) {
+                    case 224 /* ClassExpression */:
+                    case 255 /* ClassDeclaration */:
+                        return visitClassLike(node);
+                    case 165 /* PropertyDeclaration */:
+                        return visitPropertyDeclaration(node);
+                    case 235 /* VariableStatement */:
+                        return visitVariableStatement(node);
+                    case 80 /* PrivateIdentifier */:
+                        return visitPrivateIdentifier(node);
+                    case 168 /* ClassStaticBlockDeclaration */:
+                        return visitClassStaticBlockDeclaration(node);
+                }
+            }
+            if (node.transformFlags & 8388608 /* ContainsClassFields */ ||
+                node.transformFlags & 33554432 /* ContainsLexicalSuper */ &&
+                    shouldTransformSuperInStaticInitializers &&
+                    currentStaticPropertyDeclarationOrStaticBlock &&
+                    currentClassLexicalEnvironment) {
+                switch (node.kind) {
+                    case 217 /* PrefixUnaryExpression */:
+                    case 218 /* PostfixUnaryExpression */:
+                        return visitPreOrPostfixUnaryExpression(node, valueIsDiscarded);
+                    case 219 /* BinaryExpression */:
+                        return visitBinaryExpression(node, valueIsDiscarded);
+                    case 206 /* CallExpression */:
+                        return visitCallExpression(node);
+                    case 208 /* TaggedTemplateExpression */:
+                        return visitTaggedTemplateExpression(node);
+                    case 204 /* PropertyAccessExpression */:
+                        return visitPropertyAccessExpression(node);
+                    case 205 /* ElementAccessExpression */:
+                        return visitElementAccessExpression(node);
+                    case 236 /* ExpressionStatement */:
+                        return visitExpressionStatement(node);
+                    case 240 /* ForStatement */:
+                        return visitForStatement(node);
+                    case 254 /* FunctionDeclaration */:
+                    case 211 /* FunctionExpression */:
+                    case 169 /* Constructor */:
+                    case 167 /* MethodDeclaration */:
+                    case 170 /* GetAccessor */:
+                    case 171 /* SetAccessor */: {
+                        var savedCurrentStaticPropertyDeclarationOrStaticBlock = currentStaticPropertyDeclarationOrStaticBlock;
+                        currentStaticPropertyDeclarationOrStaticBlock = undefined;
+                        var result = ts.visitEachChild(node, visitor, context);
+                        currentStaticPropertyDeclarationOrStaticBlock = savedCurrentStaticPropertyDeclarationOrStaticBlock;
+                        return result;
+                    }
+                }
             }
             return ts.visitEachChild(node, visitor, context);
         }
+        function discardedValueVisitor(node) {
+            return visitorWorker(node, /*valueIsDiscarded*/ true);
+        }
+        function visitor(node) {
+            return visitorWorker(node, /*valueIsDiscarded*/ false);
+        }
+        function heritageClauseVisitor(node) {
+            switch (node.kind) {
+                case 289 /* HeritageClause */:
+                    return ts.visitEachChild(node, heritageClauseVisitor, context);
+                case 226 /* ExpressionWithTypeArguments */:
+                    return visitExpressionWithTypeArguments(node);
+            }
+            return visitor(node);
+        }
         function visitorDestructuringTarget(node) {
             switch (node.kind) {
-                case 201 /* ObjectLiteralExpression */:
-                case 200 /* ArrayLiteralExpression */:
+                case 203 /* ObjectLiteralExpression */:
+                case 202 /* ArrayLiteralExpression */:
                     return visitAssignmentPattern(node);
                 default:
                     return visitor(node);
@@ -88590,7 +90235,7 @@
          * Replace it with an empty identifier to indicate a problem with the code.
          */
         function visitPrivateIdentifier(node) {
-            if (!shouldTransformPrivateElements) {
+            if (!shouldTransformPrivateElementsOrClassStaticBlocks) {
                 return node;
             }
             return ts.setOriginalNode(factory.createIdentifier(""), node);
@@ -88602,19 +90247,19 @@
          */
         function classElementVisitor(node) {
             switch (node.kind) {
-                case 167 /* Constructor */:
+                case 169 /* Constructor */:
                     // Constructors for classes using class fields are transformed in
                     // `visitClassDeclaration` or `visitClassExpression`.
                     return undefined;
-                case 168 /* GetAccessor */:
-                case 169 /* SetAccessor */:
-                case 166 /* MethodDeclaration */:
+                case 170 /* GetAccessor */:
+                case 171 /* SetAccessor */:
+                case 167 /* MethodDeclaration */:
                     return visitMethodOrAccessorDeclaration(node);
-                case 164 /* PropertyDeclaration */:
+                case 165 /* PropertyDeclaration */:
                     return visitPropertyDeclaration(node);
-                case 159 /* ComputedPropertyName */:
+                case 160 /* ComputedPropertyName */:
                     return visitComputedPropertyName(node);
-                case 230 /* SemicolonClassElement */:
+                case 232 /* SemicolonClassElement */:
                     return node;
                 default:
                     return visitor(node);
@@ -88624,7 +90269,7 @@
             var savedPendingStatements = pendingStatements;
             pendingStatements = [];
             var visitedNode = ts.visitEachChild(node, visitor, context);
-            var statement = ts.some(pendingStatements) ? __spreadArray([visitedNode], pendingStatements) :
+            var statement = ts.some(pendingStatements) ? __spreadArray([visitedNode], pendingStatements, true) :
                 visitedNode;
             pendingStatements = savedPendingStatements;
             return statement;
@@ -88641,7 +90286,7 @@
         }
         function visitMethodOrAccessorDeclaration(node) {
             ts.Debug.assert(!ts.some(node.decorators));
-            if (!shouldTransformPrivateElements || !ts.isPrivateIdentifier(node.name)) {
+            if (!shouldTransformPrivateElementsOrClassStaticBlocks || !ts.isPrivateIdentifier(node.name)) {
                 return ts.visitEachChild(node, classElementVisitor, context);
             }
             // leave invalid code untransformed
@@ -88678,7 +90323,7 @@
         function visitPropertyDeclaration(node) {
             ts.Debug.assert(!ts.some(node.decorators));
             if (ts.isPrivateIdentifier(node.name)) {
-                if (!shouldTransformPrivateElements) {
+                if (!shouldTransformPrivateElementsOrClassStaticBlocks) {
                     // Initializer is elided as the field is initialized in transformConstructor.
                     return factory.updatePropertyDeclaration(node, 
                     /*decorators*/ undefined, ts.visitNodes(node.modifiers, visitor, ts.isModifier), node.name, 
@@ -88719,60 +90364,130 @@
             }
         }
         function visitPropertyAccessExpression(node) {
-            if (shouldTransformPrivateElements && ts.isPrivateIdentifier(node.name)) {
+            if (shouldTransformPrivateElementsOrClassStaticBlocks && ts.isPrivateIdentifier(node.name)) {
                 var privateIdentifierInfo = accessPrivateIdentifier(node.name);
                 if (privateIdentifierInfo) {
                     return ts.setTextRange(ts.setOriginalNode(createPrivateIdentifierAccess(privateIdentifierInfo, node.expression), node), node);
                 }
             }
-            return ts.visitEachChild(node, visitor, context);
-        }
-        function visitPrefixUnaryExpression(node) {
-            if (shouldTransformPrivateElements && ts.isPrivateIdentifierPropertyAccessExpression(node.operand)) {
-                var operator = node.operator === 45 /* PlusPlusToken */ ?
-                    39 /* PlusToken */ : node.operator === 46 /* MinusMinusToken */ ?
-                    40 /* MinusToken */ : undefined;
-                var info = void 0;
-                if (operator && (info = accessPrivateIdentifier(node.operand.name))) {
-                    var receiver = ts.visitNode(node.operand.expression, visitor, ts.isExpression);
-                    var _a = createCopiableReceiverExpr(receiver), readExpression = _a.readExpression, initializeExpression = _a.initializeExpression;
-                    var existingValue = factory.createPrefixUnaryExpression(39 /* PlusToken */, createPrivateIdentifierAccess(info, readExpression));
-                    return ts.setOriginalNode(createPrivateIdentifierAssignment(info, initializeExpression || readExpression, factory.createBinaryExpression(existingValue, operator, factory.createNumericLiteral(1)), 62 /* EqualsToken */), node);
+            if (shouldTransformSuperInStaticInitializers &&
+                ts.isSuperProperty(node) &&
+                ts.isIdentifier(node.name) &&
+                currentStaticPropertyDeclarationOrStaticBlock &&
+                currentClassLexicalEnvironment) {
+                var classConstructor = currentClassLexicalEnvironment.classConstructor, superClassReference = currentClassLexicalEnvironment.superClassReference, facts = currentClassLexicalEnvironment.facts;
+                if (facts & 1 /* ClassWasDecorated */) {
+                    return visitInvalidSuperProperty(node);
+                }
+                if (classConstructor && superClassReference) {
+                    // converts `super.x` into `Reflect.get(_baseTemp, "x", _classTemp)`
+                    var superProperty = factory.createReflectGetCall(superClassReference, factory.createStringLiteralFromNode(node.name), classConstructor);
+                    ts.setOriginalNode(superProperty, node.expression);
+                    ts.setTextRange(superProperty, node.expression);
+                    return superProperty;
                 }
             }
             return ts.visitEachChild(node, visitor, context);
         }
-        function visitPostfixUnaryExpression(node, valueIsDiscarded) {
-            if (shouldTransformPrivateElements && ts.isPrivateIdentifierPropertyAccessExpression(node.operand)) {
-                var operator = node.operator === 45 /* PlusPlusToken */ ?
-                    39 /* PlusToken */ : node.operator === 46 /* MinusMinusToken */ ?
-                    40 /* MinusToken */ : undefined;
-                var info = void 0;
-                if (operator && (info = accessPrivateIdentifier(node.operand.name))) {
-                    var receiver = ts.visitNode(node.operand.expression, visitor, ts.isExpression);
-                    var _a = createCopiableReceiverExpr(receiver), readExpression = _a.readExpression, initializeExpression = _a.initializeExpression;
-                    var existingValue = factory.createPrefixUnaryExpression(39 /* PlusToken */, createPrivateIdentifierAccess(info, readExpression));
-                    // Create a temporary variable to store the value returned by the expression.
-                    var returnValue = valueIsDiscarded ? undefined : factory.createTempVariable(hoistVariableDeclaration);
-                    return ts.setOriginalNode(factory.inlineExpressions(ts.compact([
-                        createPrivateIdentifierAssignment(info, initializeExpression || readExpression, factory.createBinaryExpression(returnValue ? factory.createAssignment(returnValue, existingValue) : existingValue, operator, factory.createNumericLiteral(1)), 62 /* EqualsToken */),
-                        returnValue
-                    ])), node);
+        function visitElementAccessExpression(node) {
+            if (shouldTransformSuperInStaticInitializers &&
+                ts.isSuperProperty(node) &&
+                currentStaticPropertyDeclarationOrStaticBlock &&
+                currentClassLexicalEnvironment) {
+                var classConstructor = currentClassLexicalEnvironment.classConstructor, superClassReference = currentClassLexicalEnvironment.superClassReference, facts = currentClassLexicalEnvironment.facts;
+                if (facts & 1 /* ClassWasDecorated */) {
+                    return visitInvalidSuperProperty(node);
+                }
+                if (classConstructor && superClassReference) {
+                    // converts `super[x]` into `Reflect.get(_baseTemp, x, _classTemp)`
+                    var superProperty = factory.createReflectGetCall(superClassReference, ts.visitNode(node.argumentExpression, visitor, ts.isExpression), classConstructor);
+                    ts.setOriginalNode(superProperty, node.expression);
+                    ts.setTextRange(superProperty, node.expression);
+                    return superProperty;
+                }
+            }
+            return ts.visitEachChild(node, visitor, context);
+        }
+        function visitPreOrPostfixUnaryExpression(node, valueIsDiscarded) {
+            if (node.operator === 45 /* PlusPlusToken */ || node.operator === 46 /* MinusMinusToken */) {
+                if (shouldTransformPrivateElementsOrClassStaticBlocks && ts.isPrivateIdentifierPropertyAccessExpression(node.operand)) {
+                    var info = void 0;
+                    if (info = accessPrivateIdentifier(node.operand.name)) {
+                        var receiver = ts.visitNode(node.operand.expression, visitor, ts.isExpression);
+                        var _a = createCopiableReceiverExpr(receiver), readExpression = _a.readExpression, initializeExpression = _a.initializeExpression;
+                        var expression = createPrivateIdentifierAccess(info, readExpression);
+                        var temp = ts.isPrefixUnaryExpression(node) || valueIsDiscarded ? undefined : factory.createTempVariable(hoistVariableDeclaration);
+                        expression = ts.expandPreOrPostfixIncrementOrDecrementExpression(factory, node, expression, hoistVariableDeclaration, temp);
+                        expression = createPrivateIdentifierAssignment(info, initializeExpression || readExpression, expression, 63 /* EqualsToken */);
+                        ts.setOriginalNode(expression, node);
+                        ts.setTextRange(expression, node);
+                        if (temp) {
+                            expression = factory.createComma(expression, temp);
+                            ts.setTextRange(expression, node);
+                        }
+                        return expression;
+                    }
+                }
+                else if (shouldTransformSuperInStaticInitializers &&
+                    ts.isSuperProperty(node.operand) &&
+                    currentStaticPropertyDeclarationOrStaticBlock &&
+                    currentClassLexicalEnvironment) {
+                    // converts `++super.a` into `(Reflect.set(_baseTemp, "a", (_a = Reflect.get(_baseTemp, "a", _classTemp), _b = ++_a), _classTemp), _b)`
+                    // converts `++super[f()]` into `(Reflect.set(_baseTemp, _a = f(), (_b = Reflect.get(_baseTemp, _a, _classTemp), _c = ++_b), _classTemp), _c)`
+                    // converts `--super.a` into `(Reflect.set(_baseTemp, "a", (_a = Reflect.get(_baseTemp, "a", _classTemp), _b = --_a), _classTemp), _b)`
+                    // converts `--super[f()]` into `(Reflect.set(_baseTemp, _a = f(), (_b = Reflect.get(_baseTemp, _a, _classTemp), _c = --_b), _classTemp), _c)`
+                    // converts `super.a++` into `(Reflect.set(_baseTemp, "a", (_a = Reflect.get(_baseTemp, "a", _classTemp), _b = _a++), _classTemp), _b)`
+                    // converts `super[f()]++` into `(Reflect.set(_baseTemp, _a = f(), (_b = Reflect.get(_baseTemp, _a, _classTemp), _c = _b++), _classTemp), _c)`
+                    // converts `super.a--` into `(Reflect.set(_baseTemp, "a", (_a = Reflect.get(_baseTemp, "a", _classTemp), _b = _a--), _classTemp), _b)`
+                    // converts `super[f()]--` into `(Reflect.set(_baseTemp, _a = f(), (_b = Reflect.get(_baseTemp, _a, _classTemp), _c = _b--), _classTemp), _c)`
+                    var classConstructor = currentClassLexicalEnvironment.classConstructor, superClassReference = currentClassLexicalEnvironment.superClassReference, facts = currentClassLexicalEnvironment.facts;
+                    if (facts & 1 /* ClassWasDecorated */) {
+                        var operand = visitInvalidSuperProperty(node.operand);
+                        return ts.isPrefixUnaryExpression(node) ?
+                            factory.updatePrefixUnaryExpression(node, operand) :
+                            factory.updatePostfixUnaryExpression(node, operand);
+                    }
+                    if (classConstructor && superClassReference) {
+                        var setterName = void 0;
+                        var getterName = void 0;
+                        if (ts.isPropertyAccessExpression(node.operand)) {
+                            if (ts.isIdentifier(node.operand.name)) {
+                                getterName = setterName = factory.createStringLiteralFromNode(node.operand.name);
+                            }
+                        }
+                        else {
+                            if (ts.isSimpleInlineableExpression(node.operand.argumentExpression)) {
+                                getterName = setterName = node.operand.argumentExpression;
+                            }
+                            else {
+                                getterName = factory.createTempVariable(hoistVariableDeclaration);
+                                setterName = factory.createAssignment(getterName, ts.visitNode(node.operand.argumentExpression, visitor, ts.isExpression));
+                            }
+                        }
+                        if (setterName && getterName) {
+                            var expression = factory.createReflectGetCall(superClassReference, getterName, classConstructor);
+                            ts.setTextRange(expression, node.operand);
+                            var temp = valueIsDiscarded ? undefined : factory.createTempVariable(hoistVariableDeclaration);
+                            expression = ts.expandPreOrPostfixIncrementOrDecrementExpression(factory, node, expression, hoistVariableDeclaration, temp);
+                            expression = factory.createReflectSetCall(superClassReference, setterName, expression, classConstructor);
+                            ts.setOriginalNode(expression, node);
+                            ts.setTextRange(expression, node);
+                            if (temp) {
+                                expression = factory.createComma(expression, temp);
+                                ts.setTextRange(expression, node);
+                            }
+                            return expression;
+                        }
+                    }
                 }
             }
             return ts.visitEachChild(node, visitor, context);
         }
         function visitForStatement(node) {
-            if (node.incrementor && ts.isPostfixUnaryExpression(node.incrementor)) {
-                return factory.updateForStatement(node, ts.visitNode(node.initializer, visitor, ts.isForInitializer), ts.visitNode(node.condition, visitor, ts.isExpression), visitPostfixUnaryExpression(node.incrementor, /*valueIsDiscarded*/ true), ts.visitIterationBody(node.statement, visitor, context));
-            }
-            return ts.visitEachChild(node, visitor, context);
+            return factory.updateForStatement(node, ts.visitNode(node.initializer, discardedValueVisitor, ts.isForInitializer), ts.visitNode(node.condition, visitor, ts.isExpression), ts.visitNode(node.incrementor, discardedValueVisitor, ts.isExpression), ts.visitIterationBody(node.statement, visitor, context));
         }
         function visitExpressionStatement(node) {
-            if (ts.isPostfixUnaryExpression(node.expression)) {
-                return factory.updateExpressionStatement(node, visitPostfixUnaryExpression(node.expression, /*valueIsDiscarded*/ true));
-            }
-            return ts.visitEachChild(node, visitor, context);
+            return factory.updateExpressionStatement(node, ts.visitNode(node.expression, discardedValueVisitor, ts.isExpression));
         }
         function createCopiableReceiverExpr(receiver) {
             var clone = ts.nodeIsSynthesized(receiver) ? receiver : factory.cloneNode(receiver);
@@ -88784,47 +90499,132 @@
             return { readExpression: readExpression, initializeExpression: initializeExpression };
         }
         function visitCallExpression(node) {
-            if (shouldTransformPrivateElements && ts.isPrivateIdentifierPropertyAccessExpression(node.expression)) {
+            if (shouldTransformPrivateElementsOrClassStaticBlocks && ts.isPrivateIdentifierPropertyAccessExpression(node.expression)) {
                 // Transform call expressions of private names to properly bind the `this` parameter.
                 var _a = factory.createCallBinding(node.expression, hoistVariableDeclaration, languageVersion), thisArg = _a.thisArg, target = _a.target;
                 if (ts.isCallChain(node)) {
                     return factory.updateCallChain(node, factory.createPropertyAccessChain(ts.visitNode(target, visitor), node.questionDotToken, "call"), 
                     /*questionDotToken*/ undefined, 
-                    /*typeArguments*/ undefined, __spreadArray([ts.visitNode(thisArg, visitor, ts.isExpression)], ts.visitNodes(node.arguments, visitor, ts.isExpression)));
+                    /*typeArguments*/ undefined, __spreadArray([ts.visitNode(thisArg, visitor, ts.isExpression)], ts.visitNodes(node.arguments, visitor, ts.isExpression), true));
                 }
                 return factory.updateCallExpression(node, factory.createPropertyAccessExpression(ts.visitNode(target, visitor), "call"), 
-                /*typeArguments*/ undefined, __spreadArray([ts.visitNode(thisArg, visitor, ts.isExpression)], ts.visitNodes(node.arguments, visitor, ts.isExpression)));
+                /*typeArguments*/ undefined, __spreadArray([ts.visitNode(thisArg, visitor, ts.isExpression)], ts.visitNodes(node.arguments, visitor, ts.isExpression), true));
+            }
+            if (shouldTransformSuperInStaticInitializers &&
+                ts.isSuperProperty(node.expression) &&
+                currentStaticPropertyDeclarationOrStaticBlock &&
+                (currentClassLexicalEnvironment === null || currentClassLexicalEnvironment === void 0 ? void 0 : currentClassLexicalEnvironment.classConstructor)) {
+                // converts `super.f(...)` into `Reflect.get(_baseTemp, "f", _classTemp).call(_classTemp, ...)`
+                var invocation = factory.createFunctionCallCall(ts.visitNode(node.expression, visitor, ts.isExpression), currentClassLexicalEnvironment.classConstructor, ts.visitNodes(node.arguments, visitor, ts.isExpression));
+                ts.setOriginalNode(invocation, node);
+                ts.setTextRange(invocation, node);
+                return invocation;
             }
             return ts.visitEachChild(node, visitor, context);
         }
         function visitTaggedTemplateExpression(node) {
-            if (shouldTransformPrivateElements && ts.isPrivateIdentifierPropertyAccessExpression(node.tag)) {
+            if (shouldTransformPrivateElementsOrClassStaticBlocks && ts.isPrivateIdentifierPropertyAccessExpression(node.tag)) {
                 // Bind the `this` correctly for tagged template literals when the tag is a private identifier property access.
                 var _a = factory.createCallBinding(node.tag, hoistVariableDeclaration, languageVersion), thisArg = _a.thisArg, target = _a.target;
                 return factory.updateTaggedTemplateExpression(node, factory.createCallExpression(factory.createPropertyAccessExpression(ts.visitNode(target, visitor), "bind"), 
                 /*typeArguments*/ undefined, [ts.visitNode(thisArg, visitor, ts.isExpression)]), 
                 /*typeArguments*/ undefined, ts.visitNode(node.template, visitor, ts.isTemplateLiteral));
             }
+            if (shouldTransformSuperInStaticInitializers &&
+                ts.isSuperProperty(node.tag) &&
+                currentStaticPropertyDeclarationOrStaticBlock &&
+                (currentClassLexicalEnvironment === null || currentClassLexicalEnvironment === void 0 ? void 0 : currentClassLexicalEnvironment.classConstructor)) {
+                // converts `` super.f`x` `` into `` Reflect.get(_baseTemp, "f", _classTemp).bind(_classTemp)`x` ``
+                var invocation = factory.createFunctionBindCall(ts.visitNode(node.tag, visitor, ts.isExpression), currentClassLexicalEnvironment.classConstructor, []);
+                ts.setOriginalNode(invocation, node);
+                ts.setTextRange(invocation, node);
+                return factory.updateTaggedTemplateExpression(node, invocation, 
+                /*typeArguments*/ undefined, ts.visitNode(node.template, visitor, ts.isTemplateLiteral));
+            }
             return ts.visitEachChild(node, visitor, context);
         }
-        function visitBinaryExpression(node) {
-            if (shouldTransformPrivateElements) {
-                if (ts.isDestructuringAssignment(node)) {
-                    var savedPendingExpressions = pendingExpressions;
-                    pendingExpressions = undefined;
-                    node = factory.updateBinaryExpression(node, ts.visitNode(node.left, visitorDestructuringTarget), node.operatorToken, ts.visitNode(node.right, visitor));
-                    var expr = ts.some(pendingExpressions) ?
-                        factory.inlineExpressions(ts.compact(__spreadArray(__spreadArray([], pendingExpressions), [node]))) :
-                        node;
-                    pendingExpressions = savedPendingExpressions;
-                    return expr;
+        function transformClassStaticBlockDeclaration(node) {
+            if (shouldTransformPrivateElementsOrClassStaticBlocks) {
+                if (currentClassLexicalEnvironment) {
+                    classLexicalEnvironmentMap.set(ts.getOriginalNodeId(node), currentClassLexicalEnvironment);
                 }
-                if (ts.isAssignmentExpression(node) && ts.isPrivateIdentifierPropertyAccessExpression(node.left)) {
+                startLexicalEnvironment();
+                var savedCurrentStaticPropertyDeclarationOrStaticBlock = currentStaticPropertyDeclarationOrStaticBlock;
+                currentStaticPropertyDeclarationOrStaticBlock = node;
+                var statements = ts.visitNodes(node.body.statements, visitor, ts.isStatement);
+                statements = factory.mergeLexicalEnvironment(statements, endLexicalEnvironment());
+                currentStaticPropertyDeclarationOrStaticBlock = savedCurrentStaticPropertyDeclarationOrStaticBlock;
+                var iife = factory.createImmediatelyInvokedArrowFunction(statements);
+                ts.setOriginalNode(iife, node);
+                ts.setTextRange(iife, node);
+                ts.addEmitFlags(iife, 2 /* AdviseOnEmitNode */);
+                return iife;
+            }
+        }
+        function visitBinaryExpression(node, valueIsDiscarded) {
+            if (ts.isDestructuringAssignment(node)) {
+                var savedPendingExpressions = pendingExpressions;
+                pendingExpressions = undefined;
+                node = factory.updateBinaryExpression(node, ts.visitNode(node.left, visitorDestructuringTarget), node.operatorToken, ts.visitNode(node.right, visitor));
+                var expr = ts.some(pendingExpressions) ?
+                    factory.inlineExpressions(ts.compact(__spreadArray(__spreadArray([], pendingExpressions, true), [node], false))) :
+                    node;
+                pendingExpressions = savedPendingExpressions;
+                return expr;
+            }
+            if (ts.isAssignmentExpression(node)) {
+                if (shouldTransformPrivateElementsOrClassStaticBlocks && ts.isPrivateIdentifierPropertyAccessExpression(node.left)) {
                     var info = accessPrivateIdentifier(node.left.name);
                     if (info) {
                         return ts.setTextRange(ts.setOriginalNode(createPrivateIdentifierAssignment(info, node.left.expression, node.right, node.operatorToken.kind), node), node);
                     }
                 }
+                else if (shouldTransformSuperInStaticInitializers &&
+                    ts.isSuperProperty(node.left) &&
+                    currentStaticPropertyDeclarationOrStaticBlock &&
+                    currentClassLexicalEnvironment) {
+                    var classConstructor = currentClassLexicalEnvironment.classConstructor, superClassReference = currentClassLexicalEnvironment.superClassReference, facts = currentClassLexicalEnvironment.facts;
+                    if (facts & 1 /* ClassWasDecorated */) {
+                        return factory.updateBinaryExpression(node, visitInvalidSuperProperty(node.left), node.operatorToken, ts.visitNode(node.right, visitor, ts.isExpression));
+                    }
+                    if (classConstructor && superClassReference) {
+                        var setterName = ts.isElementAccessExpression(node.left) ? ts.visitNode(node.left.argumentExpression, visitor, ts.isExpression) :
+                            ts.isIdentifier(node.left.name) ? factory.createStringLiteralFromNode(node.left.name) :
+                                undefined;
+                        if (setterName) {
+                            // converts `super.x = 1` into `(Reflect.set(_baseTemp, "x", _a = 1, _classTemp), _a)`
+                            // converts `super[f()] = 1` into `(Reflect.set(_baseTemp, f(), _a = 1, _classTemp), _a)`
+                            // converts `super.x += 1` into `(Reflect.set(_baseTemp, "x", _a = Reflect.get(_baseTemp, "x", _classtemp) + 1, _classTemp), _a)`
+                            // converts `super[f()] += 1` into `(Reflect.set(_baseTemp, _a = f(), _b = Reflect.get(_baseTemp, _a, _classtemp) + 1, _classTemp), _b)`
+                            var expression = ts.visitNode(node.right, visitor, ts.isExpression);
+                            if (ts.isCompoundAssignment(node.operatorToken.kind)) {
+                                var getterName = setterName;
+                                if (!ts.isSimpleInlineableExpression(setterName)) {
+                                    getterName = factory.createTempVariable(hoistVariableDeclaration);
+                                    setterName = factory.createAssignment(getterName, setterName);
+                                }
+                                var superPropertyGet = factory.createReflectGetCall(superClassReference, getterName, classConstructor);
+                                ts.setOriginalNode(superPropertyGet, node.left);
+                                ts.setTextRange(superPropertyGet, node.left);
+                                expression = factory.createBinaryExpression(superPropertyGet, ts.getNonAssignmentOperatorForCompoundAssignment(node.operatorToken.kind), expression);
+                                ts.setTextRange(expression, node);
+                            }
+                            var temp = valueIsDiscarded ? undefined : factory.createTempVariable(hoistVariableDeclaration);
+                            if (temp) {
+                                expression = factory.createAssignment(temp, expression);
+                                ts.setTextRange(temp, node);
+                            }
+                            expression = factory.createReflectSetCall(superClassReference, setterName, expression, classConstructor);
+                            ts.setOriginalNode(expression, node);
+                            ts.setTextRange(expression, node);
+                            if (temp) {
+                                expression = factory.createComma(expression, temp);
+                                ts.setTextRange(expression, node);
+                            }
+                            return expression;
+                        }
+                    }
+                }
             }
             return ts.visitEachChild(node, visitor, context);
         }
@@ -88853,10 +90653,13 @@
          * Set up the environment for a class.
          */
         function visitClassLike(node) {
+            if (!ts.forEach(node.members, doesClassElementNeedTransform)) {
+                return ts.visitEachChild(node, visitor, context);
+            }
             var savedPendingExpressions = pendingExpressions;
             pendingExpressions = undefined;
-            if (shouldTransformPrivateElements) {
-                startPrivateIdentifierEnvironment();
+            startClassLexicalEnvironment();
+            if (shouldTransformPrivateElementsOrClassStaticBlocks) {
                 var name = ts.getNameOfDeclaration(node);
                 if (name && ts.isIdentifier(name)) {
                     getPrivateIdentifierEnvironment().className = ts.idText(name);
@@ -88869,38 +90672,81 @@
             var result = ts.isClassDeclaration(node) ?
                 visitClassDeclaration(node) :
                 visitClassExpression(node);
-            if (shouldTransformPrivateElements) {
-                endPrivateIdentifierEnvironment();
-            }
+            endClassLexicalEnvironment();
             pendingExpressions = savedPendingExpressions;
             return result;
         }
         function doesClassElementNeedTransform(node) {
-            return ts.isPropertyDeclaration(node) || (shouldTransformPrivateElements && node.name && ts.isPrivateIdentifier(node.name));
+            return ts.isPropertyDeclaration(node) || ts.isClassStaticBlockDeclaration(node) || (shouldTransformPrivateElementsOrClassStaticBlocks && node.name && ts.isPrivateIdentifier(node.name));
         }
         function getPrivateInstanceMethodsAndAccessors(node) {
             return ts.filter(node.members, ts.isNonStaticMethodOrAccessorWithPrivateName);
         }
-        function visitClassDeclaration(node) {
-            if (!ts.forEach(node.members, doesClassElementNeedTransform)) {
-                return ts.visitEachChild(node, visitor, context);
+        function getClassFacts(node) {
+            var facts = 0 /* None */;
+            var original = ts.getOriginalNode(node);
+            if (ts.isClassDeclaration(original) && ts.classOrConstructorParameterIsDecorated(original)) {
+                facts |= 1 /* ClassWasDecorated */;
             }
-            var staticProperties = ts.getProperties(node, /*requireInitializer*/ false, /*isStatic*/ true);
-            var pendingPrivateStateAssignment;
-            if (shouldTransformPrivateElements && ts.some(node.members, function (m) { return ts.hasStaticModifier(m) && !!m.name && ts.isPrivateIdentifier(m.name); })) {
-                var temp = factory.createTempVariable(hoistVariableDeclaration, /* reservedInNestedScopes */ true);
-                getPrivateIdentifierEnvironment().classConstructor = factory.cloneNode(temp);
-                pendingPrivateStateAssignment = factory.createAssignment(temp, factory.getInternalName(node));
+            for (var _i = 0, _a = node.members; _i < _a.length; _i++) {
+                var member = _a[_i];
+                if (!ts.isStatic(member))
+                    continue;
+                if (member.name && ts.isPrivateIdentifier(member.name) && shouldTransformPrivateElementsOrClassStaticBlocks) {
+                    facts |= 2 /* NeedsClassConstructorReference */;
+                }
+                if (ts.isPropertyDeclaration(member) || ts.isClassStaticBlockDeclaration(member)) {
+                    if (shouldTransformThisInStaticInitializers && member.transformFlags & 8192 /* ContainsLexicalThis */) {
+                        facts |= 8 /* NeedsSubstitutionForThisInClassStaticField */;
+                        if (!(facts & 1 /* ClassWasDecorated */)) {
+                            facts |= 2 /* NeedsClassConstructorReference */;
+                        }
+                    }
+                    if (shouldTransformSuperInStaticInitializers && member.transformFlags & 33554432 /* ContainsLexicalSuper */) {
+                        if (!(facts & 1 /* ClassWasDecorated */)) {
+                            facts |= 2 /* NeedsClassConstructorReference */ | 4 /* NeedsClassSuperReference */;
+                        }
+                    }
+                }
+            }
+            return facts;
+        }
+        function visitExpressionWithTypeArguments(node) {
+            var facts = (currentClassLexicalEnvironment === null || currentClassLexicalEnvironment === void 0 ? void 0 : currentClassLexicalEnvironment.facts) || 0 /* None */;
+            if (facts & 4 /* NeedsClassSuperReference */) {
+                var temp = factory.createTempVariable(hoistVariableDeclaration, /*reserveInNestedScopes*/ true);
+                getClassLexicalEnvironment().superClassReference = temp;
+                return factory.updateExpressionWithTypeArguments(node, factory.createAssignment(temp, ts.visitNode(node.expression, visitor, ts.isExpression)), 
+                /*typeArguments*/ undefined);
+            }
+            return ts.visitEachChild(node, visitor, context);
+        }
+        function visitClassDeclaration(node) {
+            var facts = getClassFacts(node);
+            if (facts) {
+                getClassLexicalEnvironment().facts = facts;
+            }
+            if (facts & 8 /* NeedsSubstitutionForThisInClassStaticField */) {
+                enableSubstitutionForClassStaticThisOrSuperReference();
+            }
+            var staticProperties = ts.getStaticPropertiesAndClassStaticBlock(node);
+            // If a class has private static fields, or a static field has a `this` or `super` reference,
+            // then we need to allocate a temp variable to hold on to that reference.
+            var pendingClassReferenceAssignment;
+            if (facts & 2 /* NeedsClassConstructorReference */) {
+                var temp = factory.createTempVariable(hoistVariableDeclaration, /*reservedInNestedScopes*/ true);
+                getClassLexicalEnvironment().classConstructor = factory.cloneNode(temp);
+                pendingClassReferenceAssignment = factory.createAssignment(temp, factory.getInternalName(node));
             }
             var extendsClauseElement = ts.getEffectiveBaseTypeNode(node);
-            var isDerivedClass = !!(extendsClauseElement && ts.skipOuterExpressions(extendsClauseElement.expression).kind !== 103 /* NullKeyword */);
+            var isDerivedClass = !!(extendsClauseElement && ts.skipOuterExpressions(extendsClauseElement.expression).kind !== 104 /* NullKeyword */);
             var statements = [
                 factory.updateClassDeclaration(node, 
                 /*decorators*/ undefined, node.modifiers, node.name, 
-                /*typeParameters*/ undefined, ts.visitNodes(node.heritageClauses, visitor, ts.isHeritageClause), transformClassMembers(node, isDerivedClass))
+                /*typeParameters*/ undefined, ts.visitNodes(node.heritageClauses, heritageClauseVisitor, ts.isHeritageClause), transformClassMembers(node, isDerivedClass))
             ];
-            if (pendingPrivateStateAssignment) {
-                getPendingExpressions().unshift(pendingPrivateStateAssignment);
+            if (pendingClassReferenceAssignment) {
+                getPendingExpressions().unshift(pendingClassReferenceAssignment);
             }
             // Write any pending expressions from elided or moved computed property names
             if (ts.some(pendingExpressions)) {
@@ -88912,13 +90758,17 @@
             //      HasLexicalDeclaration (N) : Determines if the argument identifier has a binding in this environment record that was created using
             //                                  a lexical declaration such as a LexicalDeclaration or a ClassDeclaration.
             if (ts.some(staticProperties)) {
-                addPropertyStatements(statements, staticProperties, factory.getInternalName(node));
+                addPropertyOrClassStaticBlockStatements(statements, staticProperties, factory.getInternalName(node));
             }
             return statements;
         }
         function visitClassExpression(node) {
-            if (!ts.forEach(node.members, doesClassElementNeedTransform)) {
-                return ts.visitEachChild(node, visitor, context);
+            var facts = getClassFacts(node);
+            if (facts) {
+                getClassLexicalEnvironment().facts = facts;
+            }
+            if (facts & 8 /* NeedsSubstitutionForThisInClassStaticField */) {
+                enableSubstitutionForClassStaticThisOrSuperReference();
             }
             // If this class expression is a transformation of a decorated class declaration,
             // then we want to output the pendingExpressions as statements, not as inlined
@@ -88927,10 +90777,10 @@
             // In this case, we use pendingStatements to produce the same output as the
             // class declaration transformation. The VariableStatement visitor will insert
             // these statements after the class expression variable statement.
-            var isDecoratedClassDeclaration = ts.isClassDeclaration(ts.getOriginalNode(node));
-            var staticProperties = ts.getProperties(node, /*requireInitializer*/ false, /*isStatic*/ true);
+            var isDecoratedClassDeclaration = !!(facts & 1 /* ClassWasDecorated */);
+            var staticPropertiesOrClassStaticBlocks = ts.getStaticPropertiesAndClassStaticBlock(node);
             var extendsClauseElement = ts.getEffectiveBaseTypeNode(node);
-            var isDerivedClass = !!(extendsClauseElement && ts.skipOuterExpressions(extendsClauseElement.expression).kind !== 103 /* NullKeyword */);
+            var isDerivedClass = !!(extendsClauseElement && ts.skipOuterExpressions(extendsClauseElement.expression).kind !== 104 /* NullKeyword */);
             var isClassWithConstructorReference = resolver.getNodeCheckFlags(node) & 16777216 /* ClassWithConstructorReference */;
             var temp;
             function createClassTempVar() {
@@ -88939,13 +90789,13 @@
                 var requiresBlockScopedVar = classCheckFlags & 524288 /* BlockScopedBindingInLoop */;
                 return factory.createTempVariable(requiresBlockScopedVar ? addBlockScopedVariable : hoistVariableDeclaration, !!isClassWithConstructorReference);
             }
-            if (shouldTransformPrivateElements && ts.some(node.members, function (m) { return ts.hasStaticModifier(m) && !!m.name && ts.isPrivateIdentifier(m.name); })) {
+            if (facts & 2 /* NeedsClassConstructorReference */) {
                 temp = createClassTempVar();
-                getPrivateIdentifierEnvironment().classConstructor = factory.cloneNode(temp);
+                getClassLexicalEnvironment().classConstructor = factory.cloneNode(temp);
             }
             var classExpression = factory.updateClassExpression(node, ts.visitNodes(node.decorators, visitor, ts.isDecorator), node.modifiers, node.name, 
-            /*typeParameters*/ undefined, ts.visitNodes(node.heritageClauses, visitor, ts.isHeritageClause), transformClassMembers(node, isDerivedClass));
-            var hasTransformableStatics = ts.some(staticProperties, function (p) { return !!p.initializer || (shouldTransformPrivateElements && ts.isPrivateIdentifier(p.name)); });
+            /*typeParameters*/ undefined, ts.visitNodes(node.heritageClauses, heritageClauseVisitor, ts.isHeritageClause), transformClassMembers(node, isDerivedClass));
+            var hasTransformableStatics = ts.some(staticPropertiesOrClassStaticBlocks, function (p) { return ts.isClassStaticBlockDeclaration(p) || !!p.initializer || (shouldTransformPrivateElementsOrClassStaticBlocks && ts.isPrivateIdentifier(p.name)); });
             if (hasTransformableStatics || ts.some(pendingExpressions)) {
                 if (isDecoratedClassDeclaration) {
                     ts.Debug.assertIsDefined(pendingStatements, "Decorated classes transformed by TypeScript are expected to be within a variable declaration.");
@@ -88953,8 +90803,8 @@
                     if (pendingStatements && pendingExpressions && ts.some(pendingExpressions)) {
                         pendingStatements.push(factory.createExpressionStatement(factory.inlineExpressions(pendingExpressions)));
                     }
-                    if (pendingStatements && ts.some(staticProperties)) {
-                        addPropertyStatements(pendingStatements, staticProperties, factory.getInternalName(node));
+                    if (pendingStatements && ts.some(staticPropertiesOrClassStaticBlocks)) {
+                        addPropertyOrClassStaticBlockStatements(pendingStatements, staticPropertiesOrClassStaticBlocks, factory.getInternalName(node));
                     }
                     if (temp) {
                         return factory.inlineExpressions([factory.createAssignment(temp, classExpression), temp]);
@@ -88977,15 +90827,22 @@
                     expressions.push(ts.startOnNewLine(factory.createAssignment(temp, classExpression)));
                     // Add any pending expressions leftover from elided or relocated computed property names
                     ts.addRange(expressions, ts.map(pendingExpressions, ts.startOnNewLine));
-                    ts.addRange(expressions, generateInitializedPropertyExpressions(staticProperties, temp));
+                    ts.addRange(expressions, generateInitializedPropertyExpressionsOrClassStaticBlock(staticPropertiesOrClassStaticBlocks, temp));
                     expressions.push(ts.startOnNewLine(temp));
                     return factory.inlineExpressions(expressions);
                 }
             }
             return classExpression;
         }
+        function visitClassStaticBlockDeclaration(node) {
+            if (!shouldTransformPrivateElementsOrClassStaticBlocks) {
+                return ts.visitEachChild(node, classElementVisitor, context);
+            }
+            // ClassStaticBlockDeclaration for classes are transformed in `visitClassDeclaration` or `visitClassExpression`.
+            return undefined;
+        }
         function transformClassMembers(node, isDerivedClass) {
-            if (shouldTransformPrivateElements) {
+            if (shouldTransformPrivateElementsOrClassStaticBlocks) {
                 // Declare private names.
                 for (var _i = 0, _a = node.members; _i < _a.length; _i++) {
                     var member = _a[_i];
@@ -89012,7 +90869,7 @@
             /*typeArguments*/ undefined, [])));
         }
         function isClassElementThatRequiresConstructorStatement(member) {
-            if (ts.hasStaticModifier(member) || ts.hasSyntacticModifier(ts.getOriginalNode(member), 128 /* Abstract */)) {
+            if (ts.isStatic(member) || ts.hasSyntacticModifier(ts.getOriginalNode(member), 128 /* Abstract */)) {
                 return false;
             }
             if (useDefineForClassFields) {
@@ -89020,7 +90877,7 @@
                 // then we don't need to transform any class properties.
                 return languageVersion < 99 /* ESNext */;
             }
-            return ts.isInitializedProperty(member) || shouldTransformPrivateElements && ts.isPrivateIdentifierClassElementDeclaration(member);
+            return ts.isInitializedProperty(member) || shouldTransformPrivateElementsOrClassStaticBlocks && ts.isPrivateIdentifierClassElementDeclaration(member);
         }
         function transformConstructor(node, isDerivedClass) {
             var constructor = ts.visitNode(ts.getFirstConstructorWithBody(node), visitor, ts.isConstructorDeclaration);
@@ -89087,7 +90944,7 @@
             var receiver = factory.createThis();
             // private methods can be called in property initializers, they should execute first.
             addMethodStatements(statements, privateMethodsAndAccessors, receiver);
-            addPropertyStatements(statements, properties, receiver);
+            addPropertyOrClassStaticBlockStatements(statements, properties, receiver);
             // Add existing statements, skipping the initial super call.
             if (constructor) {
                 ts.addRange(statements, ts.visitNodes(constructor.body.statements, visitor, ts.isStatement, indexOfFirstStatement));
@@ -89104,10 +90961,12 @@
          * @param properties An array of property declarations to transform.
          * @param receiver The receiver on which each property should be assigned.
          */
-        function addPropertyStatements(statements, properties, receiver) {
+        function addPropertyOrClassStaticBlockStatements(statements, properties, receiver) {
             for (var _i = 0, properties_7 = properties; _i < properties_7.length; _i++) {
                 var property = properties_7[_i];
-                var expression = transformProperty(property, receiver);
+                var expression = ts.isClassStaticBlockDeclaration(property) ?
+                    transformClassStaticBlockDeclaration(property) :
+                    transformProperty(property, receiver);
                 if (!expression) {
                     continue;
                 }
@@ -89121,14 +90980,14 @@
         /**
          * Generates assignment expressions for property initializers.
          *
-         * @param properties An array of property declarations to transform.
+         * @param propertiesOrClassStaticBlocks An array of property declarations to transform.
          * @param receiver The receiver on which each property should be assigned.
          */
-        function generateInitializedPropertyExpressions(properties, receiver) {
+        function generateInitializedPropertyExpressionsOrClassStaticBlock(propertiesOrClassStaticBlocks, receiver) {
             var expressions = [];
-            for (var _i = 0, properties_8 = properties; _i < properties_8.length; _i++) {
-                var property = properties_8[_i];
-                var expression = transformProperty(property, receiver);
+            for (var _i = 0, propertiesOrClassStaticBlocks_1 = propertiesOrClassStaticBlocks; _i < propertiesOrClassStaticBlocks_1.length; _i++) {
+                var property = propertiesOrClassStaticBlocks_1[_i];
+                var expression = ts.isClassStaticBlockDeclaration(property) ? transformClassStaticBlockDeclaration(property) : transformProperty(property, receiver);
                 if (!expression) {
                     continue;
                 }
@@ -89147,13 +91006,28 @@
          * @param receiver The object receiving the property assignment.
          */
         function transformProperty(property, receiver) {
+            var savedCurrentStaticPropertyDeclarationOrStaticBlock = currentStaticPropertyDeclarationOrStaticBlock;
+            var transformed = transformPropertyWorker(property, receiver);
+            if (transformed && ts.hasStaticModifier(property) && (currentClassLexicalEnvironment === null || currentClassLexicalEnvironment === void 0 ? void 0 : currentClassLexicalEnvironment.facts)) {
+                // capture the lexical environment for the member
+                ts.setOriginalNode(transformed, property);
+                ts.addEmitFlags(transformed, 2 /* AdviseOnEmitNode */);
+                classLexicalEnvironmentMap.set(ts.getOriginalNodeId(transformed), currentClassLexicalEnvironment);
+            }
+            currentStaticPropertyDeclarationOrStaticBlock = savedCurrentStaticPropertyDeclarationOrStaticBlock;
+            return transformed;
+        }
+        function transformPropertyWorker(property, receiver) {
             var _a;
             // We generate a name here in order to reuse the value cached by the relocated computed name expression (which uses the same generated name)
             var emitAssignment = !useDefineForClassFields;
             var propertyName = ts.isComputedPropertyName(property.name) && !ts.isSimpleInlineableExpression(property.name.expression)
                 ? factory.updateComputedPropertyName(property.name, factory.getGeneratedNameForNode(property.name))
                 : property.name;
-            if (shouldTransformPrivateElements && ts.isPrivateIdentifier(propertyName)) {
+            if (ts.hasStaticModifier(property)) {
+                currentStaticPropertyDeclarationOrStaticBlock = property;
+            }
+            if (shouldTransformPrivateElementsOrClassStaticBlocks && ts.isPrivateIdentifier(propertyName)) {
                 var privateIdentifierInfo = accessPrivateIdentifier(propertyName);
                 if (privateIdentifierInfo) {
                     if (privateIdentifierInfo.kind === "f" /* Field */) {
@@ -89199,11 +91073,30 @@
                 enabledSubstitutions |= 1 /* ClassAliases */;
                 // We need to enable substitutions for identifiers. This allows us to
                 // substitute class names inside of a class declaration.
-                context.enableSubstitution(78 /* Identifier */);
+                context.enableSubstitution(79 /* Identifier */);
                 // Keep track of class aliases.
                 classAliases = [];
             }
         }
+        function enableSubstitutionForClassStaticThisOrSuperReference() {
+            if ((enabledSubstitutions & 2 /* ClassStaticThisOrSuperReference */) === 0) {
+                enabledSubstitutions |= 2 /* ClassStaticThisOrSuperReference */;
+                // substitute `this` in a static field initializer
+                context.enableSubstitution(108 /* ThisKeyword */);
+                // these push a new lexical environment that is not the class lexical environment
+                context.enableEmitNotification(254 /* FunctionDeclaration */);
+                context.enableEmitNotification(211 /* FunctionExpression */);
+                context.enableEmitNotification(169 /* Constructor */);
+                // these push a new lexical environment that is not the class lexical environment, except
+                // when they have a computed property name
+                context.enableEmitNotification(170 /* GetAccessor */);
+                context.enableEmitNotification(171 /* SetAccessor */);
+                context.enableEmitNotification(167 /* MethodDeclaration */);
+                context.enableEmitNotification(165 /* PropertyDeclaration */);
+                // class lexical environments are restored when entering a computed property name
+                context.enableEmitNotification(160 /* ComputedPropertyName */);
+            }
+        }
         /**
          * Generates brand-check initializer for private methods.
          *
@@ -89212,13 +91105,76 @@
          * @param receiver The receiver on which each method should be assigned.
          */
         function addMethodStatements(statements, methods, receiver) {
-            if (!shouldTransformPrivateElements || !ts.some(methods)) {
+            if (!shouldTransformPrivateElementsOrClassStaticBlocks || !ts.some(methods)) {
                 return;
             }
             var weakSetName = getPrivateIdentifierEnvironment().weakSetName;
             ts.Debug.assert(weakSetName, "weakSetName should be set in private identifier environment");
             statements.push(factory.createExpressionStatement(createPrivateInstanceMethodInitializer(receiver, weakSetName)));
         }
+        function visitInvalidSuperProperty(node) {
+            return ts.isPropertyAccessExpression(node) ?
+                factory.updatePropertyAccessExpression(node, factory.createVoidZero(), node.name) :
+                factory.updateElementAccessExpression(node, factory.createVoidZero(), ts.visitNode(node.argumentExpression, visitor, ts.isExpression));
+        }
+        function onEmitNode(hint, node, emitCallback) {
+            var original = ts.getOriginalNode(node);
+            if (original.id) {
+                var classLexicalEnvironment = classLexicalEnvironmentMap.get(original.id);
+                if (classLexicalEnvironment) {
+                    var savedClassLexicalEnvironment = currentClassLexicalEnvironment;
+                    var savedCurrentComputedPropertyNameClassLexicalEnvironment = currentComputedPropertyNameClassLexicalEnvironment;
+                    currentClassLexicalEnvironment = classLexicalEnvironment;
+                    currentComputedPropertyNameClassLexicalEnvironment = classLexicalEnvironment;
+                    previousOnEmitNode(hint, node, emitCallback);
+                    currentClassLexicalEnvironment = savedClassLexicalEnvironment;
+                    currentComputedPropertyNameClassLexicalEnvironment = savedCurrentComputedPropertyNameClassLexicalEnvironment;
+                    return;
+                }
+            }
+            switch (node.kind) {
+                case 211 /* FunctionExpression */:
+                    if (ts.isArrowFunction(original) || ts.getEmitFlags(node) & 262144 /* AsyncFunctionBody */) {
+                        break;
+                    }
+                // falls through
+                case 254 /* FunctionDeclaration */:
+                case 169 /* Constructor */: {
+                    var savedClassLexicalEnvironment = currentClassLexicalEnvironment;
+                    var savedCurrentComputedPropertyNameClassLexicalEnvironment = currentComputedPropertyNameClassLexicalEnvironment;
+                    currentClassLexicalEnvironment = undefined;
+                    currentComputedPropertyNameClassLexicalEnvironment = undefined;
+                    previousOnEmitNode(hint, node, emitCallback);
+                    currentClassLexicalEnvironment = savedClassLexicalEnvironment;
+                    currentComputedPropertyNameClassLexicalEnvironment = savedCurrentComputedPropertyNameClassLexicalEnvironment;
+                    return;
+                }
+                case 170 /* GetAccessor */:
+                case 171 /* SetAccessor */:
+                case 167 /* MethodDeclaration */:
+                case 165 /* PropertyDeclaration */: {
+                    var savedClassLexicalEnvironment = currentClassLexicalEnvironment;
+                    var savedCurrentComputedPropertyNameClassLexicalEnvironment = currentComputedPropertyNameClassLexicalEnvironment;
+                    currentComputedPropertyNameClassLexicalEnvironment = currentClassLexicalEnvironment;
+                    currentClassLexicalEnvironment = undefined;
+                    previousOnEmitNode(hint, node, emitCallback);
+                    currentClassLexicalEnvironment = savedClassLexicalEnvironment;
+                    currentComputedPropertyNameClassLexicalEnvironment = savedCurrentComputedPropertyNameClassLexicalEnvironment;
+                    return;
+                }
+                case 160 /* ComputedPropertyName */: {
+                    var savedClassLexicalEnvironment = currentClassLexicalEnvironment;
+                    var savedCurrentComputedPropertyNameClassLexicalEnvironment = currentComputedPropertyNameClassLexicalEnvironment;
+                    currentClassLexicalEnvironment = currentComputedPropertyNameClassLexicalEnvironment;
+                    currentComputedPropertyNameClassLexicalEnvironment = undefined;
+                    previousOnEmitNode(hint, node, emitCallback);
+                    currentClassLexicalEnvironment = savedClassLexicalEnvironment;
+                    currentComputedPropertyNameClassLexicalEnvironment = savedCurrentComputedPropertyNameClassLexicalEnvironment;
+                    return;
+                }
+            }
+            previousOnEmitNode(hint, node, emitCallback);
+        }
         /**
          * Hooks node substitutions.
          *
@@ -89234,8 +91190,22 @@
         }
         function substituteExpression(node) {
             switch (node.kind) {
-                case 78 /* Identifier */:
+                case 79 /* Identifier */:
                     return substituteExpressionIdentifier(node);
+                case 108 /* ThisKeyword */:
+                    return substituteThisExpression(node);
+            }
+            return node;
+        }
+        function substituteThisExpression(node) {
+            if (enabledSubstitutions & 2 /* ClassStaticThisOrSuperReference */ && currentClassLexicalEnvironment) {
+                var facts = currentClassLexicalEnvironment.facts, classConstructor = currentClassLexicalEnvironment.classConstructor;
+                if (facts & 1 /* ClassWasDecorated */) {
+                    return factory.createParenthesizedExpression(factory.createVoidZero());
+                }
+                if (classConstructor) {
+                    return ts.setTextRange(ts.setOriginalNode(factory.cloneNode(classConstructor), node), node);
+                }
             }
             return node;
         }
@@ -89288,21 +91258,28 @@
                 return (inlinable || ts.isIdentifier(innerExpression)) ? undefined : expression;
             }
         }
-        function startPrivateIdentifierEnvironment() {
-            privateIdentifierEnvironmentStack.push(currentPrivateIdentifierEnvironment);
-            currentPrivateIdentifierEnvironment = undefined;
+        function startClassLexicalEnvironment() {
+            classLexicalEnvironmentStack.push(currentClassLexicalEnvironment);
+            currentClassLexicalEnvironment = undefined;
         }
-        function endPrivateIdentifierEnvironment() {
-            currentPrivateIdentifierEnvironment = privateIdentifierEnvironmentStack.pop();
+        function endClassLexicalEnvironment() {
+            currentClassLexicalEnvironment = classLexicalEnvironmentStack.pop();
+        }
+        function getClassLexicalEnvironment() {
+            return currentClassLexicalEnvironment || (currentClassLexicalEnvironment = {
+                facts: 0 /* None */,
+                classConstructor: undefined,
+                superClassReference: undefined,
+                privateIdentifierEnvironment: undefined,
+            });
         }
         function getPrivateIdentifierEnvironment() {
-            if (!currentPrivateIdentifierEnvironment) {
-                currentPrivateIdentifierEnvironment = {
-                    className: "",
-                    identifiers: new ts.Map()
-                };
-            }
-            return currentPrivateIdentifierEnvironment;
+            var lex = getClassLexicalEnvironment();
+            lex.privateIdentifierEnvironment || (lex.privateIdentifierEnvironment = {
+                className: "",
+                identifiers: new ts.Map()
+            });
+            return lex.privateIdentifierEnvironment;
         }
         function getPendingExpressions() {
             return pendingExpressions || (pendingExpressions = []);
@@ -89310,17 +91287,19 @@
         function addPrivateIdentifierToEnvironment(node) {
             var _a;
             var text = ts.getTextOfPropertyName(node.name);
-            var env = getPrivateIdentifierEnvironment();
-            var weakSetName = env.weakSetName, classConstructor = env.classConstructor;
+            var lex = getClassLexicalEnvironment();
+            var classConstructor = lex.classConstructor;
+            var privateEnv = getPrivateIdentifierEnvironment();
+            var weakSetName = privateEnv.weakSetName;
             var assignmentExpressions = [];
             var privateName = node.name.escapedText;
-            var previousInfo = env.identifiers.get(privateName);
+            var previousInfo = privateEnv.identifiers.get(privateName);
             var isValid = !isReservedPrivateName(node.name) && previousInfo === undefined;
             if (ts.hasStaticModifier(node)) {
                 ts.Debug.assert(classConstructor, "weakSetName should be set in private identifier environment");
                 if (ts.isPropertyDeclaration(node)) {
                     var variableName = createHoistedVariableForPrivateName(text, node);
-                    env.identifiers.set(privateName, {
+                    privateEnv.identifiers.set(privateName, {
                         kind: "f" /* Field */,
                         variableName: variableName,
                         brandCheckIdentifier: classConstructor,
@@ -89330,7 +91309,7 @@
                 }
                 else if (ts.isMethodDeclaration(node)) {
                     var functionName = createHoistedVariableForPrivateName(text, node);
-                    env.identifiers.set(privateName, {
+                    privateEnv.identifiers.set(privateName, {
                         kind: "m" /* Method */,
                         methodName: functionName,
                         brandCheckIdentifier: classConstructor,
@@ -89344,7 +91323,7 @@
                         previousInfo.getterName = getterName;
                     }
                     else {
-                        env.identifiers.set(privateName, {
+                        privateEnv.identifiers.set(privateName, {
                             kind: "a" /* Accessor */,
                             getterName: getterName,
                             setterName: undefined,
@@ -89360,7 +91339,7 @@
                         previousInfo.setterName = setterName;
                     }
                     else {
-                        env.identifiers.set(privateName, {
+                        privateEnv.identifiers.set(privateName, {
                             kind: "a" /* Accessor */,
                             getterName: undefined,
                             setterName: setterName,
@@ -89376,7 +91355,7 @@
             }
             else if (ts.isPropertyDeclaration(node)) {
                 var weakMapName = createHoistedVariableForPrivateName(text, node);
-                env.identifiers.set(privateName, {
+                privateEnv.identifiers.set(privateName, {
                     kind: "f" /* Field */,
                     brandCheckIdentifier: weakMapName,
                     isStatic: false,
@@ -89388,7 +91367,7 @@
             }
             else if (ts.isMethodDeclaration(node)) {
                 ts.Debug.assert(weakSetName, "weakSetName should be set in private identifier environment");
-                env.identifiers.set(privateName, {
+                privateEnv.identifiers.set(privateName, {
                     kind: "m" /* Method */,
                     methodName: createHoistedVariableForPrivateName(text, node),
                     brandCheckIdentifier: weakSetName,
@@ -89404,7 +91383,7 @@
                         previousInfo.getterName = getterName;
                     }
                     else {
-                        env.identifiers.set(privateName, {
+                        privateEnv.identifiers.set(privateName, {
                             kind: "a" /* Accessor */,
                             getterName: getterName,
                             setterName: undefined,
@@ -89420,7 +91399,7 @@
                         previousInfo.setterName = setterName;
                     }
                     else {
-                        env.identifiers.set(privateName, {
+                        privateEnv.identifiers.set(privateName, {
                             kind: "a" /* Accessor */,
                             getterName: undefined,
                             setterName: setterName,
@@ -89452,18 +91431,19 @@
             return createHoistedVariableForClass(privateName.substring(1), node.name);
         }
         function accessPrivateIdentifier(name) {
-            if (currentPrivateIdentifierEnvironment) {
-                var info = currentPrivateIdentifierEnvironment.identifiers.get(name.escapedText);
+            var _a;
+            if (currentClassLexicalEnvironment === null || currentClassLexicalEnvironment === void 0 ? void 0 : currentClassLexicalEnvironment.privateIdentifierEnvironment) {
+                var info = currentClassLexicalEnvironment.privateIdentifierEnvironment.identifiers.get(name.escapedText);
                 if (info) {
                     return info;
                 }
             }
-            for (var i = privateIdentifierEnvironmentStack.length - 1; i >= 0; --i) {
-                var env = privateIdentifierEnvironmentStack[i];
+            for (var i = classLexicalEnvironmentStack.length - 1; i >= 0; --i) {
+                var env = classLexicalEnvironmentStack[i];
                 if (!env) {
                     continue;
                 }
-                var info = env.identifiers.get(name.escapedText);
+                var info = (_a = env.privateIdentifierEnvironment) === null || _a === void 0 ? void 0 : _a.identifiers.get(name.escapedText);
                 if (info) {
                     return info;
                 }
@@ -89481,53 +91461,93 @@
             // differently inside the function.
             if (ts.isThisProperty(node) || ts.isSuperProperty(node) || !ts.isSimpleCopiableExpression(node.expression)) {
                 receiver = factory.createTempVariable(hoistVariableDeclaration, /*reservedInNestedScopes*/ true);
-                getPendingExpressions().push(factory.createBinaryExpression(receiver, 62 /* EqualsToken */, node.expression));
+                getPendingExpressions().push(factory.createBinaryExpression(receiver, 63 /* EqualsToken */, ts.visitNode(node.expression, visitor, ts.isExpression)));
             }
-            return factory.createPropertyAccessExpression(
-            // Explicit parens required because of v8 regression (https://bugs.chromium.org/p/v8/issues/detail?id=9560)
-            factory.createParenthesizedExpression(factory.createObjectLiteralExpression([
-                factory.createSetAccessorDeclaration(
-                /*decorators*/ undefined, 
-                /*modifiers*/ undefined, "value", [factory.createParameterDeclaration(
-                    /*decorators*/ undefined, 
-                    /*modifiers*/ undefined, 
-                    /*dotDotDotToken*/ undefined, parameter, 
-                    /*questionToken*/ undefined, 
-                    /*type*/ undefined, 
-                    /*initializer*/ undefined)], factory.createBlock([factory.createExpressionStatement(createPrivateIdentifierAssignment(info, receiver, parameter, 62 /* EqualsToken */))]))
-            ])), "value");
+            return factory.createAssignmentTargetWrapper(parameter, createPrivateIdentifierAssignment(info, receiver, parameter, 63 /* EqualsToken */));
         }
         function visitArrayAssignmentTarget(node) {
             var target = ts.getTargetOfBindingOrAssignmentElement(node);
-            if (target && ts.isPrivateIdentifierPropertyAccessExpression(target)) {
-                var wrapped = wrapPrivateIdentifierForDestructuringTarget(target);
-                if (ts.isAssignmentExpression(node)) {
-                    return factory.updateBinaryExpression(node, wrapped, node.operatorToken, ts.visitNode(node.right, visitor, ts.isExpression));
+            if (target) {
+                var wrapped = void 0;
+                if (ts.isPrivateIdentifierPropertyAccessExpression(target)) {
+                    wrapped = wrapPrivateIdentifierForDestructuringTarget(target);
                 }
-                else if (ts.isSpreadElement(node)) {
-                    return factory.updateSpreadElement(node, wrapped);
+                else if (shouldTransformSuperInStaticInitializers &&
+                    ts.isSuperProperty(target) &&
+                    currentStaticPropertyDeclarationOrStaticBlock &&
+                    currentClassLexicalEnvironment) {
+                    var classConstructor = currentClassLexicalEnvironment.classConstructor, superClassReference = currentClassLexicalEnvironment.superClassReference, facts = currentClassLexicalEnvironment.facts;
+                    if (facts & 1 /* ClassWasDecorated */) {
+                        wrapped = visitInvalidSuperProperty(target);
+                    }
+                    else if (classConstructor && superClassReference) {
+                        var name = ts.isElementAccessExpression(target) ? ts.visitNode(target.argumentExpression, visitor, ts.isExpression) :
+                            ts.isIdentifier(target.name) ? factory.createStringLiteralFromNode(target.name) :
+                                undefined;
+                        if (name) {
+                            var temp = factory.createTempVariable(/*recordTempVariable*/ undefined);
+                            wrapped = factory.createAssignmentTargetWrapper(temp, factory.createReflectSetCall(superClassReference, name, temp, classConstructor));
+                        }
+                    }
                 }
-                else {
-                    return wrapped;
+                if (wrapped) {
+                    if (ts.isAssignmentExpression(node)) {
+                        return factory.updateBinaryExpression(node, wrapped, node.operatorToken, ts.visitNode(node.right, visitor, ts.isExpression));
+                    }
+                    else if (ts.isSpreadElement(node)) {
+                        return factory.updateSpreadElement(node, wrapped);
+                    }
+                    else {
+                        return wrapped;
+                    }
                 }
             }
             return ts.visitNode(node, visitorDestructuringTarget);
         }
         function visitObjectAssignmentTarget(node) {
-            if (ts.isPropertyAssignment(node)) {
+            if (ts.isObjectBindingOrAssignmentElement(node) && !ts.isShorthandPropertyAssignment(node)) {
                 var target = ts.getTargetOfBindingOrAssignmentElement(node);
-                if (target && ts.isPrivateIdentifierPropertyAccessExpression(target)) {
-                    var initializer = ts.getInitializerOfBindingOrAssignmentElement(node);
-                    var wrapped = wrapPrivateIdentifierForDestructuringTarget(target);
-                    return factory.updatePropertyAssignment(node, ts.visitNode(node.name, visitor), initializer ? factory.createAssignment(wrapped, ts.visitNode(initializer, visitor)) : wrapped);
+                var wrapped = void 0;
+                if (target) {
+                    if (ts.isPrivateIdentifierPropertyAccessExpression(target)) {
+                        wrapped = wrapPrivateIdentifierForDestructuringTarget(target);
+                    }
+                    else if (shouldTransformSuperInStaticInitializers &&
+                        ts.isSuperProperty(target) &&
+                        currentStaticPropertyDeclarationOrStaticBlock &&
+                        currentClassLexicalEnvironment) {
+                        var classConstructor = currentClassLexicalEnvironment.classConstructor, superClassReference = currentClassLexicalEnvironment.superClassReference, facts = currentClassLexicalEnvironment.facts;
+                        if (facts & 1 /* ClassWasDecorated */) {
+                            wrapped = visitInvalidSuperProperty(target);
+                        }
+                        else if (classConstructor && superClassReference) {
+                            var name = ts.isElementAccessExpression(target) ? ts.visitNode(target.argumentExpression, visitor, ts.isExpression) :
+                                ts.isIdentifier(target.name) ? factory.createStringLiteralFromNode(target.name) :
+                                    undefined;
+                            if (name) {
+                                var temp = factory.createTempVariable(/*recordTempVariable*/ undefined);
+                                wrapped = factory.createAssignmentTargetWrapper(temp, factory.createReflectSetCall(superClassReference, name, temp, classConstructor));
+                            }
+                        }
+                    }
                 }
-                return factory.updatePropertyAssignment(node, ts.visitNode(node.name, visitor), ts.visitNode(node.initializer, visitorDestructuringTarget));
+                if (ts.isPropertyAssignment(node)) {
+                    var initializer = ts.getInitializerOfBindingOrAssignmentElement(node);
+                    return factory.updatePropertyAssignment(node, ts.visitNode(node.name, visitor, ts.isPropertyName), wrapped ?
+                        initializer ? factory.createAssignment(wrapped, ts.visitNode(initializer, visitor)) : wrapped :
+                        ts.visitNode(node.initializer, visitorDestructuringTarget, ts.isExpression));
+                }
+                if (ts.isSpreadAssignment(node)) {
+                    return factory.updateSpreadAssignment(node, wrapped || ts.visitNode(node.expression, visitorDestructuringTarget, ts.isExpression));
+                }
+                ts.Debug.assert(wrapped === undefined, "Should not have generated a wrapped target");
             }
             return ts.visitNode(node, visitor);
         }
         function visitAssignmentPattern(node) {
             if (ts.isArrayLiteralExpression(node)) {
                 // Transforms private names in destructuring assignment array bindings.
+                // Transforms SuperProperty assignments in destructuring assignment array bindings in static initializers.
                 //
                 // Source:
                 // ([ this.#myProp ] = [ "hello" ]);
@@ -89538,6 +91558,7 @@
             }
             else {
                 // Transforms private names in destructuring assignment object bindings.
+                // Transforms SuperProperty assignments in destructuring assignment object bindings in static initializers.
                 //
                 // Source:
                 // ({ stringProperty: this.#myProp } = { stringProperty: "hello" });
@@ -89651,34 +91672,34 @@
                 return node;
             }
             switch (node.kind) {
-                case 129 /* AsyncKeyword */:
+                case 130 /* AsyncKeyword */:
                     // ES2017 async modifier should be elided for targets < ES2017
                     return undefined;
-                case 214 /* AwaitExpression */:
+                case 216 /* AwaitExpression */:
                     return visitAwaitExpression(node);
-                case 166 /* MethodDeclaration */:
+                case 167 /* MethodDeclaration */:
                     return doWithContext(1 /* NonTopLevel */ | 2 /* HasLexicalThis */, visitMethodDeclaration, node);
-                case 252 /* FunctionDeclaration */:
+                case 254 /* FunctionDeclaration */:
                     return doWithContext(1 /* NonTopLevel */ | 2 /* HasLexicalThis */, visitFunctionDeclaration, node);
-                case 209 /* FunctionExpression */:
+                case 211 /* FunctionExpression */:
                     return doWithContext(1 /* NonTopLevel */ | 2 /* HasLexicalThis */, visitFunctionExpression, node);
-                case 210 /* ArrowFunction */:
+                case 212 /* ArrowFunction */:
                     return doWithContext(1 /* NonTopLevel */, visitArrowFunction, node);
-                case 202 /* PropertyAccessExpression */:
-                    if (capturedSuperProperties && ts.isPropertyAccessExpression(node) && node.expression.kind === 105 /* SuperKeyword */) {
+                case 204 /* PropertyAccessExpression */:
+                    if (capturedSuperProperties && ts.isPropertyAccessExpression(node) && node.expression.kind === 106 /* SuperKeyword */) {
                         capturedSuperProperties.add(node.name.escapedText);
                     }
                     return ts.visitEachChild(node, visitor, context);
-                case 203 /* ElementAccessExpression */:
-                    if (capturedSuperProperties && node.expression.kind === 105 /* SuperKeyword */) {
+                case 205 /* ElementAccessExpression */:
+                    if (capturedSuperProperties && node.expression.kind === 106 /* SuperKeyword */) {
                         hasSuperElementAccess = true;
                     }
                     return ts.visitEachChild(node, visitor, context);
-                case 168 /* GetAccessor */:
-                case 169 /* SetAccessor */:
-                case 167 /* Constructor */:
-                case 253 /* ClassDeclaration */:
-                case 222 /* ClassExpression */:
+                case 170 /* GetAccessor */:
+                case 171 /* SetAccessor */:
+                case 169 /* Constructor */:
+                case 255 /* ClassDeclaration */:
+                case 224 /* ClassExpression */:
                     return doWithContext(1 /* NonTopLevel */ | 2 /* HasLexicalThis */, visitDefault, node);
                 default:
                     return ts.visitEachChild(node, visitor, context);
@@ -89687,27 +91708,27 @@
         function asyncBodyVisitor(node) {
             if (ts.isNodeWithPossibleHoistedDeclaration(node)) {
                 switch (node.kind) {
-                    case 233 /* VariableStatement */:
+                    case 235 /* VariableStatement */:
                         return visitVariableStatementInAsyncBody(node);
-                    case 238 /* ForStatement */:
+                    case 240 /* ForStatement */:
                         return visitForStatementInAsyncBody(node);
-                    case 239 /* ForInStatement */:
+                    case 241 /* ForInStatement */:
                         return visitForInStatementInAsyncBody(node);
-                    case 240 /* ForOfStatement */:
+                    case 242 /* ForOfStatement */:
                         return visitForOfStatementInAsyncBody(node);
-                    case 288 /* CatchClause */:
+                    case 290 /* CatchClause */:
                         return visitCatchClauseInAsyncBody(node);
-                    case 231 /* Block */:
-                    case 245 /* SwitchStatement */:
-                    case 259 /* CaseBlock */:
-                    case 285 /* CaseClause */:
-                    case 286 /* DefaultClause */:
-                    case 248 /* TryStatement */:
-                    case 236 /* DoStatement */:
-                    case 237 /* WhileStatement */:
-                    case 235 /* IfStatement */:
-                    case 244 /* WithStatement */:
-                    case 246 /* LabeledStatement */:
+                    case 233 /* Block */:
+                    case 247 /* SwitchStatement */:
+                    case 261 /* CaseBlock */:
+                    case 287 /* CaseClause */:
+                    case 288 /* DefaultClause */:
+                    case 250 /* TryStatement */:
+                    case 238 /* DoStatement */:
+                    case 239 /* WhileStatement */:
+                    case 237 /* IfStatement */:
+                    case 246 /* WithStatement */:
+                    case 248 /* LabeledStatement */:
                         return ts.visitEachChild(node, asyncBodyVisitor, context);
                     default:
                         return ts.Debug.assertNever(node, "Unhandled node.");
@@ -89912,7 +91933,7 @@
             var original = ts.getOriginalNode(node, ts.isFunctionLike);
             var nodeType = original.type;
             var promiseConstructor = languageVersion < 2 /* ES2015 */ ? getPromiseConstructor(nodeType) : undefined;
-            var isArrowFunction = node.kind === 210 /* ArrowFunction */;
+            var isArrowFunction = node.kind === 212 /* ArrowFunction */;
             var hasLexicalArguments = (resolver.getNodeCheckFlags(node) & 8192 /* CaptureArguments */) !== 0;
             // An async function is emit as an outer function that calls an inner
             // generator function. To preserve lexical bindings, we pass the current
@@ -90003,17 +92024,17 @@
                 enabledSubstitutions |= 1 /* AsyncMethodsWithSuper */;
                 // We need to enable substitutions for call, property access, and element access
                 // if we need to rewrite super calls.
-                context.enableSubstitution(204 /* CallExpression */);
-                context.enableSubstitution(202 /* PropertyAccessExpression */);
-                context.enableSubstitution(203 /* ElementAccessExpression */);
+                context.enableSubstitution(206 /* CallExpression */);
+                context.enableSubstitution(204 /* PropertyAccessExpression */);
+                context.enableSubstitution(205 /* ElementAccessExpression */);
                 // We need to be notified when entering and exiting declarations that bind super.
-                context.enableEmitNotification(253 /* ClassDeclaration */);
-                context.enableEmitNotification(166 /* MethodDeclaration */);
-                context.enableEmitNotification(168 /* GetAccessor */);
-                context.enableEmitNotification(169 /* SetAccessor */);
-                context.enableEmitNotification(167 /* Constructor */);
+                context.enableEmitNotification(255 /* ClassDeclaration */);
+                context.enableEmitNotification(167 /* MethodDeclaration */);
+                context.enableEmitNotification(170 /* GetAccessor */);
+                context.enableEmitNotification(171 /* SetAccessor */);
+                context.enableEmitNotification(169 /* Constructor */);
                 // We need to be notified when entering the generated accessor arrow functions.
-                context.enableEmitNotification(233 /* VariableStatement */);
+                context.enableEmitNotification(235 /* VariableStatement */);
             }
         }
         /**
@@ -90061,23 +92082,23 @@
         }
         function substituteExpression(node) {
             switch (node.kind) {
-                case 202 /* PropertyAccessExpression */:
+                case 204 /* PropertyAccessExpression */:
                     return substitutePropertyAccessExpression(node);
-                case 203 /* ElementAccessExpression */:
+                case 205 /* ElementAccessExpression */:
                     return substituteElementAccessExpression(node);
-                case 204 /* CallExpression */:
+                case 206 /* CallExpression */:
                     return substituteCallExpression(node);
             }
             return node;
         }
         function substitutePropertyAccessExpression(node) {
-            if (node.expression.kind === 105 /* SuperKeyword */) {
+            if (node.expression.kind === 106 /* SuperKeyword */) {
                 return ts.setTextRange(factory.createPropertyAccessExpression(factory.createUniqueName("_super", 16 /* Optimistic */ | 32 /* FileLevel */), node.name), node);
             }
             return node;
         }
         function substituteElementAccessExpression(node) {
-            if (node.expression.kind === 105 /* SuperKeyword */) {
+            if (node.expression.kind === 106 /* SuperKeyword */) {
                 return createSuperElementAccessInAsyncMethod(node.argumentExpression, node);
             }
             return node;
@@ -90091,17 +92112,17 @@
                 return factory.createCallExpression(factory.createPropertyAccessExpression(argumentExpression, "call"), 
                 /*typeArguments*/ undefined, __spreadArray([
                     factory.createThis()
-                ], node.arguments));
+                ], node.arguments, true));
             }
             return node;
         }
         function isSuperContainer(node) {
             var kind = node.kind;
-            return kind === 253 /* ClassDeclaration */
-                || kind === 167 /* Constructor */
-                || kind === 166 /* MethodDeclaration */
-                || kind === 168 /* GetAccessor */
-                || kind === 169 /* SetAccessor */;
+            return kind === 255 /* ClassDeclaration */
+                || kind === 169 /* Constructor */
+                || kind === 167 /* MethodDeclaration */
+                || kind === 170 /* GetAccessor */
+                || kind === 171 /* SetAccessor */;
         }
         function createSuperElementAccessInAsyncMethod(argumentExpression, location) {
             if (enclosingSuperContainerFlags & 4096 /* AsyncMethodWithSuperBinding */) {
@@ -90258,7 +92279,7 @@
             return visitorWorker(node, /*expressionResultIsUnused*/ true);
         }
         function visitorNoAsyncModifier(node) {
-            if (node.kind === 129 /* AsyncKeyword */) {
+            if (node.kind === 130 /* AsyncKeyword */) {
                 return undefined;
             }
             return node;
@@ -90284,70 +92305,70 @@
                 return node;
             }
             switch (node.kind) {
-                case 214 /* AwaitExpression */:
+                case 216 /* AwaitExpression */:
                     return visitAwaitExpression(node);
-                case 220 /* YieldExpression */:
+                case 222 /* YieldExpression */:
                     return visitYieldExpression(node);
-                case 243 /* ReturnStatement */:
+                case 245 /* ReturnStatement */:
                     return visitReturnStatement(node);
-                case 246 /* LabeledStatement */:
+                case 248 /* LabeledStatement */:
                     return visitLabeledStatement(node);
-                case 201 /* ObjectLiteralExpression */:
+                case 203 /* ObjectLiteralExpression */:
                     return visitObjectLiteralExpression(node);
-                case 217 /* BinaryExpression */:
+                case 219 /* BinaryExpression */:
                     return visitBinaryExpression(node, expressionResultIsUnused);
-                case 341 /* CommaListExpression */:
+                case 346 /* CommaListExpression */:
                     return visitCommaListExpression(node, expressionResultIsUnused);
-                case 288 /* CatchClause */:
+                case 290 /* CatchClause */:
                     return visitCatchClause(node);
-                case 233 /* VariableStatement */:
+                case 235 /* VariableStatement */:
                     return visitVariableStatement(node);
-                case 250 /* VariableDeclaration */:
+                case 252 /* VariableDeclaration */:
                     return visitVariableDeclaration(node);
-                case 236 /* DoStatement */:
-                case 237 /* WhileStatement */:
-                case 239 /* ForInStatement */:
+                case 238 /* DoStatement */:
+                case 239 /* WhileStatement */:
+                case 241 /* ForInStatement */:
                     return doWithHierarchyFacts(visitDefault, node, 0 /* IterationStatementExcludes */, 2 /* IterationStatementIncludes */);
-                case 240 /* ForOfStatement */:
+                case 242 /* ForOfStatement */:
                     return visitForOfStatement(node, /*outermostLabeledStatement*/ undefined);
-                case 238 /* ForStatement */:
+                case 240 /* ForStatement */:
                     return doWithHierarchyFacts(visitForStatement, node, 0 /* IterationStatementExcludes */, 2 /* IterationStatementIncludes */);
-                case 213 /* VoidExpression */:
+                case 215 /* VoidExpression */:
                     return visitVoidExpression(node);
-                case 167 /* Constructor */:
+                case 169 /* Constructor */:
                     return doWithHierarchyFacts(visitConstructorDeclaration, node, 2 /* ClassOrFunctionExcludes */, 1 /* ClassOrFunctionIncludes */);
-                case 166 /* MethodDeclaration */:
+                case 167 /* MethodDeclaration */:
                     return doWithHierarchyFacts(visitMethodDeclaration, node, 2 /* ClassOrFunctionExcludes */, 1 /* ClassOrFunctionIncludes */);
-                case 168 /* GetAccessor */:
+                case 170 /* GetAccessor */:
                     return doWithHierarchyFacts(visitGetAccessorDeclaration, node, 2 /* ClassOrFunctionExcludes */, 1 /* ClassOrFunctionIncludes */);
-                case 169 /* SetAccessor */:
+                case 171 /* SetAccessor */:
                     return doWithHierarchyFacts(visitSetAccessorDeclaration, node, 2 /* ClassOrFunctionExcludes */, 1 /* ClassOrFunctionIncludes */);
-                case 252 /* FunctionDeclaration */:
+                case 254 /* FunctionDeclaration */:
                     return doWithHierarchyFacts(visitFunctionDeclaration, node, 2 /* ClassOrFunctionExcludes */, 1 /* ClassOrFunctionIncludes */);
-                case 209 /* FunctionExpression */:
+                case 211 /* FunctionExpression */:
                     return doWithHierarchyFacts(visitFunctionExpression, node, 2 /* ClassOrFunctionExcludes */, 1 /* ClassOrFunctionIncludes */);
-                case 210 /* ArrowFunction */:
+                case 212 /* ArrowFunction */:
                     return doWithHierarchyFacts(visitArrowFunction, node, 2 /* ArrowFunctionExcludes */, 0 /* ArrowFunctionIncludes */);
-                case 161 /* Parameter */:
+                case 162 /* Parameter */:
                     return visitParameter(node);
-                case 234 /* ExpressionStatement */:
+                case 236 /* ExpressionStatement */:
                     return visitExpressionStatement(node);
-                case 208 /* ParenthesizedExpression */:
+                case 210 /* ParenthesizedExpression */:
                     return visitParenthesizedExpression(node, expressionResultIsUnused);
-                case 206 /* TaggedTemplateExpression */:
+                case 208 /* TaggedTemplateExpression */:
                     return visitTaggedTemplateExpression(node);
-                case 202 /* PropertyAccessExpression */:
-                    if (capturedSuperProperties && ts.isPropertyAccessExpression(node) && node.expression.kind === 105 /* SuperKeyword */) {
+                case 204 /* PropertyAccessExpression */:
+                    if (capturedSuperProperties && ts.isPropertyAccessExpression(node) && node.expression.kind === 106 /* SuperKeyword */) {
                         capturedSuperProperties.add(node.name.escapedText);
                     }
                     return ts.visitEachChild(node, visitor, context);
-                case 203 /* ElementAccessExpression */:
-                    if (capturedSuperProperties && node.expression.kind === 105 /* SuperKeyword */) {
+                case 205 /* ElementAccessExpression */:
+                    if (capturedSuperProperties && node.expression.kind === 106 /* SuperKeyword */) {
                         hasSuperElementAccess = true;
                     }
                     return ts.visitEachChild(node, visitor, context);
-                case 253 /* ClassDeclaration */:
-                case 222 /* ClassExpression */:
+                case 255 /* ClassDeclaration */:
+                case 224 /* ClassExpression */:
                     return doWithHierarchyFacts(visitDefault, node, 2 /* ClassOrFunctionExcludes */, 1 /* ClassOrFunctionIncludes */);
                 default:
                     return ts.visitEachChild(node, visitor, context);
@@ -90383,7 +92404,7 @@
         function visitLabeledStatement(node) {
             if (enclosingFunctionFlags & 2 /* Async */) {
                 var statement = ts.unwrapInnermostStatementOfLabel(node);
-                if (statement.kind === 240 /* ForOfStatement */ && statement.awaitModifier) {
+                if (statement.kind === 242 /* ForOfStatement */ && statement.awaitModifier) {
                     return visitForOfStatement(statement, node);
                 }
                 return factory.restoreEnclosingLabel(ts.visitNode(statement, visitor, ts.isStatement, factory.liftToBlock), node);
@@ -90395,7 +92416,7 @@
             var objects = [];
             for (var _i = 0, elements_4 = elements; _i < elements_4.length; _i++) {
                 var e = elements_4[_i];
-                if (e.kind === 291 /* SpreadAssignment */) {
+                if (e.kind === 293 /* SpreadAssignment */) {
                     if (chunkObject) {
                         objects.push(factory.createObjectLiteralExpression(chunkObject));
                         chunkObject = undefined;
@@ -90404,7 +92425,7 @@
                     objects.push(ts.visitNode(target, visitor, ts.isExpression));
                 }
                 else {
-                    chunkObject = ts.append(chunkObject, e.kind === 289 /* PropertyAssignment */
+                    chunkObject = ts.append(chunkObject, e.kind === 291 /* PropertyAssignment */
                         ? factory.createPropertyAssignment(e.name, ts.visitNode(e.initializer, visitor, ts.isExpression))
                         : ts.visitNode(e, visitor, ts.isObjectLiteralElementLike));
                 }
@@ -90438,7 +92459,7 @@
                 // If we translate the above to `__assign({}, k, l)`, the `l` will evaluate before `k` is spread and we
                 // end up with `{ a: 1, b: 2, c: 3 }`
                 var objects = chunkObjectLiteralElements(node.properties);
-                if (objects.length && objects[0].kind !== 201 /* ObjectLiteralExpression */) {
+                if (objects.length && objects[0].kind !== 203 /* ObjectLiteralExpression */) {
                     objects.unshift(factory.createObjectLiteralExpression());
                 }
                 var expression = objects[0];
@@ -90527,7 +92548,7 @@
                 if (ts.some(visitedBindings)) {
                     block = factory.updateBlock(block, __spreadArray([
                         factory.createVariableStatement(/*modifiers*/ undefined, visitedBindings)
-                    ], block.statements));
+                    ], block.statements, true));
                 }
                 return factory.updateCatchClause(node, factory.updateVariableDeclaration(node.variableDeclaration, name, /*exclamationToken*/ undefined, /*type*/ undefined, /*initializer*/ undefined), block);
             }
@@ -90851,17 +92872,17 @@
                 enabledSubstitutions |= 1 /* AsyncMethodsWithSuper */;
                 // We need to enable substitutions for call, property access, and element access
                 // if we need to rewrite super calls.
-                context.enableSubstitution(204 /* CallExpression */);
-                context.enableSubstitution(202 /* PropertyAccessExpression */);
-                context.enableSubstitution(203 /* ElementAccessExpression */);
+                context.enableSubstitution(206 /* CallExpression */);
+                context.enableSubstitution(204 /* PropertyAccessExpression */);
+                context.enableSubstitution(205 /* ElementAccessExpression */);
                 // We need to be notified when entering and exiting declarations that bind super.
-                context.enableEmitNotification(253 /* ClassDeclaration */);
-                context.enableEmitNotification(166 /* MethodDeclaration */);
-                context.enableEmitNotification(168 /* GetAccessor */);
-                context.enableEmitNotification(169 /* SetAccessor */);
-                context.enableEmitNotification(167 /* Constructor */);
+                context.enableEmitNotification(255 /* ClassDeclaration */);
+                context.enableEmitNotification(167 /* MethodDeclaration */);
+                context.enableEmitNotification(170 /* GetAccessor */);
+                context.enableEmitNotification(171 /* SetAccessor */);
+                context.enableEmitNotification(169 /* Constructor */);
                 // We need to be notified when entering the generated accessor arrow functions.
-                context.enableEmitNotification(233 /* VariableStatement */);
+                context.enableEmitNotification(235 /* VariableStatement */);
             }
         }
         /**
@@ -90909,23 +92930,23 @@
         }
         function substituteExpression(node) {
             switch (node.kind) {
-                case 202 /* PropertyAccessExpression */:
+                case 204 /* PropertyAccessExpression */:
                     return substitutePropertyAccessExpression(node);
-                case 203 /* ElementAccessExpression */:
+                case 205 /* ElementAccessExpression */:
                     return substituteElementAccessExpression(node);
-                case 204 /* CallExpression */:
+                case 206 /* CallExpression */:
                     return substituteCallExpression(node);
             }
             return node;
         }
         function substitutePropertyAccessExpression(node) {
-            if (node.expression.kind === 105 /* SuperKeyword */) {
+            if (node.expression.kind === 106 /* SuperKeyword */) {
                 return ts.setTextRange(factory.createPropertyAccessExpression(factory.createUniqueName("_super", 16 /* Optimistic */ | 32 /* FileLevel */), node.name), node);
             }
             return node;
         }
         function substituteElementAccessExpression(node) {
-            if (node.expression.kind === 105 /* SuperKeyword */) {
+            if (node.expression.kind === 106 /* SuperKeyword */) {
                 return createSuperElementAccessInAsyncMethod(node.argumentExpression, node);
             }
             return node;
@@ -90939,17 +92960,17 @@
                 return factory.createCallExpression(factory.createPropertyAccessExpression(argumentExpression, "call"), 
                 /*typeArguments*/ undefined, __spreadArray([
                     factory.createThis()
-                ], node.arguments));
+                ], node.arguments, true));
             }
             return node;
         }
         function isSuperContainer(node) {
             var kind = node.kind;
-            return kind === 253 /* ClassDeclaration */
-                || kind === 167 /* Constructor */
-                || kind === 166 /* MethodDeclaration */
-                || kind === 168 /* GetAccessor */
-                || kind === 169 /* SetAccessor */;
+            return kind === 255 /* ClassDeclaration */
+                || kind === 169 /* Constructor */
+                || kind === 167 /* MethodDeclaration */
+                || kind === 170 /* GetAccessor */
+                || kind === 171 /* SetAccessor */;
         }
         function createSuperElementAccessInAsyncMethod(argumentExpression, location) {
             if (enclosingSuperContainerFlags & 4096 /* AsyncMethodWithSuperBinding */) {
@@ -90981,7 +93002,7 @@
                 return node;
             }
             switch (node.kind) {
-                case 288 /* CatchClause */:
+                case 290 /* CatchClause */:
                     return visitCatchClause(node);
                 default:
                     return ts.visitEachChild(node, visitor, context);
@@ -91013,25 +93034,25 @@
                 return node;
             }
             switch (node.kind) {
-                case 204 /* CallExpression */: {
+                case 206 /* CallExpression */: {
                     var updated = visitNonOptionalCallExpression(node, /*captureThisArg*/ false);
                     ts.Debug.assertNotNode(updated, ts.isSyntheticReference);
                     return updated;
                 }
-                case 202 /* PropertyAccessExpression */:
-                case 203 /* ElementAccessExpression */:
+                case 204 /* PropertyAccessExpression */:
+                case 205 /* ElementAccessExpression */:
                     if (ts.isOptionalChain(node)) {
                         var updated = visitOptionalExpression(node, /*captureThisArg*/ false, /*isDelete*/ false);
                         ts.Debug.assertNotNode(updated, ts.isSyntheticReference);
                         return updated;
                     }
                     return ts.visitEachChild(node, visitor, context);
-                case 217 /* BinaryExpression */:
+                case 219 /* BinaryExpression */:
                     if (node.operatorToken.kind === 60 /* QuestionQuestionToken */) {
                         return transformNullishCoalescingExpression(node);
                     }
                     return ts.visitEachChild(node, visitor, context);
-                case 211 /* DeleteExpression */:
+                case 213 /* DeleteExpression */:
                     return visitDeleteExpression(node);
                 default:
                     return ts.visitEachChild(node, visitor, context);
@@ -91073,7 +93094,7 @@
                     thisArg = expression;
                 }
             }
-            expression = node.kind === 202 /* PropertyAccessExpression */
+            expression = node.kind === 204 /* PropertyAccessExpression */
                 ? factory.updatePropertyAccessExpression(node, expression, ts.visitNode(node.name, visitor, ts.isIdentifier))
                 : factory.updateElementAccessExpression(node, expression, ts.visitNode(node.argumentExpression, visitor, ts.isExpression));
             return thisArg ? factory.createSyntheticReferenceExpression(expression, thisArg) : expression;
@@ -91096,10 +93117,10 @@
         }
         function visitNonOptionalExpression(node, captureThisArg, isDelete) {
             switch (node.kind) {
-                case 208 /* ParenthesizedExpression */: return visitNonOptionalParenthesizedExpression(node, captureThisArg, isDelete);
-                case 202 /* PropertyAccessExpression */:
-                case 203 /* ElementAccessExpression */: return visitNonOptionalPropertyOrElementAccessExpression(node, captureThisArg, isDelete);
-                case 204 /* CallExpression */: return visitNonOptionalCallExpression(node, captureThisArg);
+                case 210 /* ParenthesizedExpression */: return visitNonOptionalParenthesizedExpression(node, captureThisArg, isDelete);
+                case 204 /* PropertyAccessExpression */:
+                case 205 /* ElementAccessExpression */: return visitNonOptionalPropertyOrElementAccessExpression(node, captureThisArg, isDelete);
+                case 206 /* CallExpression */: return visitNonOptionalCallExpression(node, captureThisArg);
                 default: return ts.visitNode(node, visitor, ts.isExpression);
             }
         }
@@ -91118,8 +93139,8 @@
             for (var i = 0; i < chain.length; i++) {
                 var segment = chain[i];
                 switch (segment.kind) {
-                    case 202 /* PropertyAccessExpression */:
-                    case 203 /* ElementAccessExpression */:
+                    case 204 /* PropertyAccessExpression */:
+                    case 205 /* ElementAccessExpression */:
                         if (i === chain.length - 1 && captureThisArg) {
                             if (!ts.isSimpleCopiableExpression(rightExpression)) {
                                 thisArg = factory.createTempVariable(hoistVariableDeclaration);
@@ -91129,13 +93150,13 @@
                                 thisArg = rightExpression;
                             }
                         }
-                        rightExpression = segment.kind === 202 /* PropertyAccessExpression */
+                        rightExpression = segment.kind === 204 /* PropertyAccessExpression */
                             ? factory.createPropertyAccessExpression(rightExpression, ts.visitNode(segment.name, visitor, ts.isIdentifier))
                             : factory.createElementAccessExpression(rightExpression, ts.visitNode(segment.argumentExpression, visitor, ts.isExpression));
                         break;
-                    case 204 /* CallExpression */:
+                    case 206 /* CallExpression */:
                         if (i === 0 && leftThisArg) {
-                            rightExpression = factory.createFunctionCallCall(rightExpression, leftThisArg.kind === 105 /* SuperKeyword */ ? factory.createThis() : leftThisArg, ts.visitNodes(segment.arguments, visitor, ts.isExpression));
+                            rightExpression = factory.createFunctionCallCall(rightExpression, leftThisArg.kind === 106 /* SuperKeyword */ ? factory.createThis() : leftThisArg, ts.visitNodes(segment.arguments, visitor, ts.isExpression));
                         }
                         else {
                             rightExpression = factory.createCallExpression(rightExpression, 
@@ -91190,7 +93211,7 @@
                 return node;
             }
             switch (node.kind) {
-                case 217 /* BinaryExpression */:
+                case 219 /* BinaryExpression */:
                     var binaryExpression = node;
                     if (ts.isLogicalOrCoalescingAssignmentExpression(binaryExpression)) {
                         return transformLogicalAssignment(binaryExpression);
@@ -91359,13 +93380,13 @@
         }
         function visitorWorker(node) {
             switch (node.kind) {
-                case 274 /* JsxElement */:
+                case 276 /* JsxElement */:
                     return visitJsxElement(node, /*isChild*/ false);
-                case 275 /* JsxSelfClosingElement */:
+                case 277 /* JsxSelfClosingElement */:
                     return visitJsxSelfClosingElement(node, /*isChild*/ false);
-                case 278 /* JsxFragment */:
+                case 280 /* JsxFragment */:
                     return visitJsxFragment(node, /*isChild*/ false);
-                case 284 /* JsxExpression */:
+                case 286 /* JsxExpression */:
                     return visitJsxExpression(node);
                 default:
                     return ts.visitEachChild(node, visitor, context);
@@ -91375,13 +93396,13 @@
             switch (node.kind) {
                 case 11 /* JsxText */:
                     return visitJsxText(node);
-                case 284 /* JsxExpression */:
+                case 286 /* JsxExpression */:
                     return visitJsxExpression(node);
-                case 274 /* JsxElement */:
+                case 276 /* JsxElement */:
                     return visitJsxElement(node, /*isChild*/ true);
-                case 275 /* JsxSelfClosingElement */:
+                case 277 /* JsxSelfClosingElement */:
                     return visitJsxSelfClosingElement(node, /*isChild*/ true);
-                case 278 /* JsxFragment */:
+                case 280 /* JsxFragment */:
                     return visitJsxFragment(node, /*isChild*/ true);
                 default:
                     return ts.Debug.failBadSyntaxKind(node);
@@ -91421,9 +93442,9 @@
         function convertJsxChildrenToChildrenPropObject(children) {
             var nonWhitespaceChildren = ts.getSemanticJsxChildren(children);
             if (ts.length(nonWhitespaceChildren) === 1) {
-                var result_14 = transformJsxChildToExpression(nonWhitespaceChildren[0]);
-                return result_14 && factory.createObjectLiteralExpression([
-                    factory.createPropertyAssignment("children", result_14)
+                var result_13 = transformJsxChildToExpression(nonWhitespaceChildren[0]);
+                return result_13 && factory.createObjectLiteralExpression([
+                    factory.createPropertyAssignment("children", result_13)
                 ]);
             }
             var result = ts.mapDefined(children, transformJsxChildToExpression);
@@ -91575,7 +93596,7 @@
                 var literal = factory.createStringLiteral(tryDecodeEntities(node.text) || node.text, singleQuote);
                 return ts.setTextRange(literal, node);
             }
-            else if (node.kind === 284 /* JsxExpression */) {
+            else if (node.kind === 286 /* JsxExpression */) {
                 if (node.expression === undefined) {
                     return factory.createTrue();
                 }
@@ -91669,7 +93690,7 @@
             return decoded === text ? undefined : decoded;
         }
         function getTagName(node) {
-            if (node.kind === 274 /* JsxElement */) {
+            if (node.kind === 276 /* JsxElement */) {
                 return getTagName(node.openingElement);
             }
             else {
@@ -91975,7 +93996,7 @@
                 return node;
             }
             switch (node.kind) {
-                case 217 /* BinaryExpression */:
+                case 219 /* BinaryExpression */:
                     return visitBinaryExpression(node);
                 default:
                     return ts.visitEachChild(node, visitor, context);
@@ -91983,7 +94004,7 @@
         }
         function visitBinaryExpression(node) {
             switch (node.operatorToken.kind) {
-                case 66 /* AsteriskAsteriskEqualsToken */:
+                case 67 /* AsteriskAsteriskEqualsToken */:
                     return visitExponentiationAssignmentExpression(node);
                 case 42 /* AsteriskAsteriskToken */:
                     return visitExponentiationExpression(node);
@@ -92072,12 +94093,13 @@
         HierarchyFacts[HierarchyFacts["ForStatement"] = 2048] = "ForStatement";
         HierarchyFacts[HierarchyFacts["ForInOrForOfStatement"] = 4096] = "ForInOrForOfStatement";
         HierarchyFacts[HierarchyFacts["ConstructorWithCapturedSuper"] = 8192] = "ConstructorWithCapturedSuper";
+        HierarchyFacts[HierarchyFacts["StaticInitializer"] = 16384] = "StaticInitializer";
         // NOTE: do not add more ancestor flags without also updating AncestorFactsMask below.
         // NOTE: when adding a new ancestor flag, be sure to update the subtree flags below.
         //
         // Ancestor masks
         //
-        HierarchyFacts[HierarchyFacts["AncestorFactsMask"] = 16383] = "AncestorFactsMask";
+        HierarchyFacts[HierarchyFacts["AncestorFactsMask"] = 32767] = "AncestorFactsMask";
         // We are always in *some* kind of block scope, but only specific block-scope containers are
         // top-level or Blocks.
         HierarchyFacts[HierarchyFacts["BlockScopeIncludes"] = 0] = "BlockScopeIncludes";
@@ -92087,16 +94109,16 @@
         HierarchyFacts[HierarchyFacts["SourceFileExcludes"] = 8064] = "SourceFileExcludes";
         // Functions, methods, and accessors are both new lexical scopes and new block scopes.
         HierarchyFacts[HierarchyFacts["FunctionIncludes"] = 65] = "FunctionIncludes";
-        HierarchyFacts[HierarchyFacts["FunctionExcludes"] = 16286] = "FunctionExcludes";
+        HierarchyFacts[HierarchyFacts["FunctionExcludes"] = 32670] = "FunctionExcludes";
         HierarchyFacts[HierarchyFacts["AsyncFunctionBodyIncludes"] = 69] = "AsyncFunctionBodyIncludes";
-        HierarchyFacts[HierarchyFacts["AsyncFunctionBodyExcludes"] = 16278] = "AsyncFunctionBodyExcludes";
+        HierarchyFacts[HierarchyFacts["AsyncFunctionBodyExcludes"] = 32662] = "AsyncFunctionBodyExcludes";
         // Arrow functions are lexically scoped to their container, but are new block scopes.
         HierarchyFacts[HierarchyFacts["ArrowFunctionIncludes"] = 66] = "ArrowFunctionIncludes";
         HierarchyFacts[HierarchyFacts["ArrowFunctionExcludes"] = 15232] = "ArrowFunctionExcludes";
         // Constructors are both new lexical scopes and new block scopes. Constructors are also
         // always considered non-static members of a class.
         HierarchyFacts[HierarchyFacts["ConstructorIncludes"] = 73] = "ConstructorIncludes";
-        HierarchyFacts[HierarchyFacts["ConstructorExcludes"] = 16278] = "ConstructorExcludes";
+        HierarchyFacts[HierarchyFacts["ConstructorExcludes"] = 32662] = "ConstructorExcludes";
         // 'do' and 'while' statements are not block scopes. We track that the subtree is contained
         // within an IterationStatement to indicate whether the embedded statement is an
         // IterationStatementBlock.
@@ -92114,18 +94136,29 @@
         HierarchyFacts[HierarchyFacts["BlockExcludes"] = 6976] = "BlockExcludes";
         HierarchyFacts[HierarchyFacts["IterationStatementBlockIncludes"] = 512] = "IterationStatementBlockIncludes";
         HierarchyFacts[HierarchyFacts["IterationStatementBlockExcludes"] = 7104] = "IterationStatementBlockExcludes";
+        HierarchyFacts[HierarchyFacts["StaticInitializerIncludes"] = 16449] = "StaticInitializerIncludes";
+        HierarchyFacts[HierarchyFacts["StaticInitializerExcludes"] = 32670] = "StaticInitializerExcludes";
         //
         // Subtree facts
         //
-        HierarchyFacts[HierarchyFacts["NewTarget"] = 16384] = "NewTarget";
-        HierarchyFacts[HierarchyFacts["CapturedLexicalThis"] = 32768] = "CapturedLexicalThis";
+        HierarchyFacts[HierarchyFacts["NewTarget"] = 32768] = "NewTarget";
+        HierarchyFacts[HierarchyFacts["CapturedLexicalThis"] = 65536] = "CapturedLexicalThis";
         //
         // Subtree masks
         //
-        HierarchyFacts[HierarchyFacts["SubtreeFactsMask"] = -16384] = "SubtreeFactsMask";
+        HierarchyFacts[HierarchyFacts["SubtreeFactsMask"] = -32768] = "SubtreeFactsMask";
         HierarchyFacts[HierarchyFacts["ArrowFunctionSubtreeExcludes"] = 0] = "ArrowFunctionSubtreeExcludes";
-        HierarchyFacts[HierarchyFacts["FunctionSubtreeExcludes"] = 49152] = "FunctionSubtreeExcludes";
+        HierarchyFacts[HierarchyFacts["FunctionSubtreeExcludes"] = 98304] = "FunctionSubtreeExcludes";
     })(HierarchyFacts || (HierarchyFacts = {}));
+    var SpreadSegmentKind;
+    (function (SpreadSegmentKind) {
+        SpreadSegmentKind[SpreadSegmentKind["None"] = 0] = "None";
+        SpreadSegmentKind[SpreadSegmentKind["UnpackedSpread"] = 1] = "UnpackedSpread";
+        SpreadSegmentKind[SpreadSegmentKind["PackedSpread"] = 2] = "PackedSpread";
+    })(SpreadSegmentKind || (SpreadSegmentKind = {}));
+    function createSpreadSegment(kind, expression) {
+        return { kind: kind, expression: expression };
+    }
     function transformES2015(context) {
         var factory = context.factory, emitHelpers = context.getEmitHelperFactory, startLexicalEnvironment = context.startLexicalEnvironment, resumeLexicalEnvironment = context.resumeLexicalEnvironment, endLexicalEnvironment = context.endLexicalEnvironment, hoistVariableDeclaration = context.hoistVariableDeclaration;
         var compilerOptions = context.getCompilerOptions();
@@ -92173,7 +94206,7 @@
          */
         function enterSubtree(excludeFacts, includeFacts) {
             var ancestorFacts = hierarchyFacts;
-            hierarchyFacts = (hierarchyFacts & ~excludeFacts | includeFacts) & 16383 /* AncestorFactsMask */;
+            hierarchyFacts = (hierarchyFacts & ~excludeFacts | includeFacts) & 32767 /* AncestorFactsMask */;
             return ancestorFacts;
         }
         /**
@@ -92184,11 +94217,11 @@
          * @param includeFacts The new `HierarchyFacts` of the subtree that should be propagated.
          */
         function exitSubtree(ancestorFacts, excludeFacts, includeFacts) {
-            hierarchyFacts = (hierarchyFacts & ~excludeFacts | includeFacts) & -16384 /* SubtreeFactsMask */ | ancestorFacts;
+            hierarchyFacts = (hierarchyFacts & ~excludeFacts | includeFacts) & -32768 /* SubtreeFactsMask */ | ancestorFacts;
         }
         function isReturnVoidStatementInConstructorWithCapturedSuper(node) {
             return (hierarchyFacts & 8192 /* ConstructorWithCapturedSuper */) !== 0
-                && node.kind === 243 /* ReturnStatement */
+                && node.kind === 245 /* ReturnStatement */
                 && !node.expression;
         }
         function isOrMayContainReturnCompletion(node) {
@@ -92219,75 +94252,88 @@
         function visitorWithUnusedExpressionResult(node) {
             return shouldVisitNode(node) ? visitorWorker(node, /*expressionResultIsUnused*/ true) : node;
         }
+        function classWrapperStatementVisitor(node) {
+            if (shouldVisitNode(node)) {
+                var original = ts.getOriginalNode(node);
+                if (ts.isPropertyDeclaration(original) && ts.hasStaticModifier(original)) {
+                    var ancestorFacts = enterSubtree(32670 /* StaticInitializerExcludes */, 16449 /* StaticInitializerIncludes */);
+                    var result = visitorWorker(node, /*expressionResultIsUnused*/ false);
+                    exitSubtree(ancestorFacts, 98304 /* FunctionSubtreeExcludes */, 0 /* None */);
+                    return result;
+                }
+                return visitorWorker(node, /*expressionResultIsUnused*/ false);
+            }
+            return node;
+        }
         function callExpressionVisitor(node) {
-            if (node.kind === 105 /* SuperKeyword */) {
+            if (node.kind === 106 /* SuperKeyword */) {
                 return visitSuperKeyword(/*isExpressionOfCall*/ true);
             }
             return visitor(node);
         }
         function visitorWorker(node, expressionResultIsUnused) {
             switch (node.kind) {
-                case 123 /* StaticKeyword */:
+                case 124 /* StaticKeyword */:
                     return undefined; // elide static keyword
-                case 253 /* ClassDeclaration */:
+                case 255 /* ClassDeclaration */:
                     return visitClassDeclaration(node);
-                case 222 /* ClassExpression */:
+                case 224 /* ClassExpression */:
                     return visitClassExpression(node);
-                case 161 /* Parameter */:
+                case 162 /* Parameter */:
                     return visitParameter(node);
-                case 252 /* FunctionDeclaration */:
+                case 254 /* FunctionDeclaration */:
                     return visitFunctionDeclaration(node);
-                case 210 /* ArrowFunction */:
+                case 212 /* ArrowFunction */:
                     return visitArrowFunction(node);
-                case 209 /* FunctionExpression */:
+                case 211 /* FunctionExpression */:
                     return visitFunctionExpression(node);
-                case 250 /* VariableDeclaration */:
+                case 252 /* VariableDeclaration */:
                     return visitVariableDeclaration(node);
-                case 78 /* Identifier */:
+                case 79 /* Identifier */:
                     return visitIdentifier(node);
-                case 251 /* VariableDeclarationList */:
+                case 253 /* VariableDeclarationList */:
                     return visitVariableDeclarationList(node);
-                case 245 /* SwitchStatement */:
+                case 247 /* SwitchStatement */:
                     return visitSwitchStatement(node);
-                case 259 /* CaseBlock */:
+                case 261 /* CaseBlock */:
                     return visitCaseBlock(node);
-                case 231 /* Block */:
+                case 233 /* Block */:
                     return visitBlock(node, /*isFunctionBody*/ false);
-                case 242 /* BreakStatement */:
-                case 241 /* ContinueStatement */:
+                case 244 /* BreakStatement */:
+                case 243 /* ContinueStatement */:
                     return visitBreakOrContinueStatement(node);
-                case 246 /* LabeledStatement */:
+                case 248 /* LabeledStatement */:
                     return visitLabeledStatement(node);
-                case 236 /* DoStatement */:
-                case 237 /* WhileStatement */:
+                case 238 /* DoStatement */:
+                case 239 /* WhileStatement */:
                     return visitDoOrWhileStatement(node, /*outermostLabeledStatement*/ undefined);
-                case 238 /* ForStatement */:
+                case 240 /* ForStatement */:
                     return visitForStatement(node, /*outermostLabeledStatement*/ undefined);
-                case 239 /* ForInStatement */:
+                case 241 /* ForInStatement */:
                     return visitForInStatement(node, /*outermostLabeledStatement*/ undefined);
-                case 240 /* ForOfStatement */:
+                case 242 /* ForOfStatement */:
                     return visitForOfStatement(node, /*outermostLabeledStatement*/ undefined);
-                case 234 /* ExpressionStatement */:
+                case 236 /* ExpressionStatement */:
                     return visitExpressionStatement(node);
-                case 201 /* ObjectLiteralExpression */:
+                case 203 /* ObjectLiteralExpression */:
                     return visitObjectLiteralExpression(node);
-                case 288 /* CatchClause */:
+                case 290 /* CatchClause */:
                     return visitCatchClause(node);
-                case 290 /* ShorthandPropertyAssignment */:
+                case 292 /* ShorthandPropertyAssignment */:
                     return visitShorthandPropertyAssignment(node);
-                case 159 /* ComputedPropertyName */:
+                case 160 /* ComputedPropertyName */:
                     return visitComputedPropertyName(node);
-                case 200 /* ArrayLiteralExpression */:
+                case 202 /* ArrayLiteralExpression */:
                     return visitArrayLiteralExpression(node);
-                case 204 /* CallExpression */:
+                case 206 /* CallExpression */:
                     return visitCallExpression(node);
-                case 205 /* NewExpression */:
+                case 207 /* NewExpression */:
                     return visitNewExpression(node);
-                case 208 /* ParenthesizedExpression */:
+                case 210 /* ParenthesizedExpression */:
                     return visitParenthesizedExpression(node, expressionResultIsUnused);
-                case 217 /* BinaryExpression */:
+                case 219 /* BinaryExpression */:
                     return visitBinaryExpression(node, expressionResultIsUnused);
-                case 341 /* CommaListExpression */:
+                case 346 /* CommaListExpression */:
                     return visitCommaListExpression(node, expressionResultIsUnused);
                 case 14 /* NoSubstitutionTemplateLiteral */:
                 case 15 /* TemplateHead */:
@@ -92298,30 +94344,30 @@
                     return visitStringLiteral(node);
                 case 8 /* NumericLiteral */:
                     return visitNumericLiteral(node);
-                case 206 /* TaggedTemplateExpression */:
+                case 208 /* TaggedTemplateExpression */:
                     return visitTaggedTemplateExpression(node);
-                case 219 /* TemplateExpression */:
+                case 221 /* TemplateExpression */:
                     return visitTemplateExpression(node);
-                case 220 /* YieldExpression */:
+                case 222 /* YieldExpression */:
                     return visitYieldExpression(node);
-                case 221 /* SpreadElement */:
+                case 223 /* SpreadElement */:
                     return visitSpreadElement(node);
-                case 105 /* SuperKeyword */:
+                case 106 /* SuperKeyword */:
                     return visitSuperKeyword(/*isExpressionOfCall*/ false);
-                case 107 /* ThisKeyword */:
+                case 108 /* ThisKeyword */:
                     return visitThisKeyword(node);
-                case 227 /* MetaProperty */:
+                case 229 /* MetaProperty */:
                     return visitMetaProperty(node);
-                case 166 /* MethodDeclaration */:
+                case 167 /* MethodDeclaration */:
                     return visitMethodDeclaration(node);
-                case 168 /* GetAccessor */:
-                case 169 /* SetAccessor */:
+                case 170 /* GetAccessor */:
+                case 171 /* SetAccessor */:
                     return visitAccessorDeclaration(node);
-                case 233 /* VariableStatement */:
+                case 235 /* VariableStatement */:
                     return visitVariableStatement(node);
-                case 243 /* ReturnStatement */:
+                case 245 /* ReturnStatement */:
                     return visitReturnStatement(node);
-                case 213 /* VoidExpression */:
+                case 215 /* VoidExpression */:
                     return visitVoidExpression(node);
                 default:
                     return ts.visitEachChild(node, visitor, context);
@@ -92380,8 +94426,8 @@
             return ts.visitEachChild(node, visitor, context);
         }
         function visitThisKeyword(node) {
-            if (hierarchyFacts & 2 /* ArrowFunction */) {
-                hierarchyFacts |= 32768 /* CapturedLexicalThis */;
+            if (hierarchyFacts & 2 /* ArrowFunction */ && !(hierarchyFacts & 16384 /* StaticInitializer */)) {
+                hierarchyFacts |= 65536 /* CapturedLexicalThis */;
             }
             if (convertedLoopState) {
                 if (hierarchyFacts & 2 /* ArrowFunction */) {
@@ -92411,14 +94457,14 @@
                 // it is possible if either
                 //   - break/continue is labeled and label is located inside the converted loop
                 //   - break/continue is non-labeled and located in non-converted loop/switch statement
-                var jump = node.kind === 242 /* BreakStatement */ ? 2 /* Break */ : 4 /* Continue */;
+                var jump = node.kind === 244 /* BreakStatement */ ? 2 /* Break */ : 4 /* Continue */;
                 var canUseBreakOrContinue = (node.label && convertedLoopState.labels && convertedLoopState.labels.get(ts.idText(node.label))) ||
                     (!node.label && (convertedLoopState.allowedNonLabeledJumps & jump));
                 if (!canUseBreakOrContinue) {
                     var labelMarker = void 0;
                     var label = node.label;
                     if (!label) {
-                        if (node.kind === 242 /* BreakStatement */) {
+                        if (node.kind === 244 /* BreakStatement */) {
                             convertedLoopState.nonLocalJumps |= 2 /* Break */;
                             labelMarker = "break";
                         }
@@ -92429,7 +94475,7 @@
                         }
                     }
                     else {
-                        if (node.kind === 242 /* BreakStatement */) {
+                        if (node.kind === 244 /* BreakStatement */) {
                             labelMarker = "break-" + label.escapedText;
                             setLabeledJump(convertedLoopState, /*isBreak*/ true, ts.idText(label), labelMarker);
                         }
@@ -92626,7 +94672,7 @@
         function addConstructor(statements, node, name, extendsClauseElement) {
             var savedConvertedLoopState = convertedLoopState;
             convertedLoopState = undefined;
-            var ancestorFacts = enterSubtree(16278 /* ConstructorExcludes */, 73 /* ConstructorIncludes */);
+            var ancestorFacts = enterSubtree(32662 /* ConstructorExcludes */, 73 /* ConstructorIncludes */);
             var constructor = ts.getFirstConstructorWithBody(node);
             var hasSynthesizedSuper = hasSynthesizedDefaultSuperCall(constructor, extendsClauseElement !== undefined);
             var constructorFunction = factory.createFunctionDeclaration(
@@ -92640,7 +94686,7 @@
                 ts.setEmitFlags(constructorFunction, 8 /* CapturesThis */);
             }
             statements.push(constructorFunction);
-            exitSubtree(ancestorFacts, 49152 /* FunctionSubtreeExcludes */, 0 /* None */);
+            exitSubtree(ancestorFacts, 98304 /* FunctionSubtreeExcludes */, 0 /* None */);
             convertedLoopState = savedConvertedLoopState;
         }
         /**
@@ -92689,7 +94735,7 @@
         function transformConstructorBody(constructor, node, extendsClauseElement, hasSynthesizedSuper) {
             // determine whether the class is known syntactically to be a derived class (e.g. a
             // class that extends a value that is not syntactically known to be `null`).
-            var isDerivedClass = !!extendsClauseElement && ts.skipOuterExpressions(extendsClauseElement.expression).kind !== 103 /* NullKeyword */;
+            var isDerivedClass = !!extendsClauseElement && ts.skipOuterExpressions(extendsClauseElement.expression).kind !== 104 /* NullKeyword */;
             // When the subclass does not have a constructor, we synthesize a *default* constructor using the following
             // representation:
             //
@@ -92827,11 +94873,11 @@
          */
         function isSufficientlyCoveredByReturnStatements(statement) {
             // A return statement is considered covered.
-            if (statement.kind === 243 /* ReturnStatement */) {
+            if (statement.kind === 245 /* ReturnStatement */) {
                 return true;
             }
             // An if-statement with two covered branches is covered.
-            else if (statement.kind === 235 /* IfStatement */) {
+            else if (statement.kind === 237 /* IfStatement */) {
                 var ifStatement = statement;
                 if (ifStatement.elseStatement) {
                     return isSufficientlyCoveredByReturnStatements(ifStatement.thenStatement) &&
@@ -92839,7 +94885,7 @@
                 }
             }
             // A block is covered if it has a last statement which is covered.
-            else if (statement.kind === 231 /* Block */) {
+            else if (statement.kind === 233 /* Block */) {
                 var lastStatement = ts.lastOrUndefined(statement.statements);
                 if (lastStatement && isSufficientlyCoveredByReturnStatements(lastStatement)) {
                     return true;
@@ -92997,10 +95043,10 @@
             }
             // `declarationName` is the name of the local declaration for the parameter.
             // TODO(rbuckton): Does this need to be parented?
-            var declarationName = parameter.name.kind === 78 /* Identifier */ ? ts.setParent(ts.setTextRange(factory.cloneNode(parameter.name), parameter.name), parameter.name.parent) : factory.createTempVariable(/*recordTempVariable*/ undefined);
+            var declarationName = parameter.name.kind === 79 /* Identifier */ ? ts.setParent(ts.setTextRange(factory.cloneNode(parameter.name), parameter.name), parameter.name.parent) : factory.createTempVariable(/*recordTempVariable*/ undefined);
             ts.setEmitFlags(declarationName, 48 /* NoSourceMap */);
             // `expressionName` is the name of the parameter used in expressions.
-            var expressionName = parameter.name.kind === 78 /* Identifier */ ? factory.cloneNode(parameter.name) : declarationName;
+            var expressionName = parameter.name.kind === 79 /* Identifier */ ? factory.cloneNode(parameter.name) : declarationName;
             var restIndex = node.parameters.length - 1;
             var temp = factory.createLoopVariable();
             // var param = [];
@@ -93025,7 +95071,7 @@
             ts.setEmitFlags(forStatement, 1048576 /* CustomPrologue */);
             ts.startOnNewLine(forStatement);
             prologueStatements.push(forStatement);
-            if (parameter.name.kind !== 78 /* Identifier */) {
+            if (parameter.name.kind !== 79 /* Identifier */) {
                 // do the actual destructuring of the rest parameter if necessary
                 prologueStatements.push(ts.setEmitFlags(ts.setTextRange(factory.createVariableStatement(
                 /*modifiers*/ undefined, factory.createVariableDeclarationList(ts.flattenDestructuringBinding(parameter, visitor, context, 0 /* All */, expressionName))), parameter), 1048576 /* CustomPrologue */));
@@ -93041,7 +95087,7 @@
          * @param node A node.
          */
         function insertCaptureThisForNodeIfNeeded(statements, node) {
-            if (hierarchyFacts & 32768 /* CapturedLexicalThis */ && node.kind !== 210 /* ArrowFunction */) {
+            if (hierarchyFacts & 65536 /* CapturedLexicalThis */ && node.kind !== 212 /* ArrowFunction */) {
                 insertCaptureThisForNode(statements, node, factory.createThis());
                 return true;
             }
@@ -93060,28 +95106,28 @@
             ts.insertStatementAfterCustomPrologue(statements, captureThisStatement);
         }
         function insertCaptureNewTargetIfNeeded(statements, node, copyOnWrite) {
-            if (hierarchyFacts & 16384 /* NewTarget */) {
+            if (hierarchyFacts & 32768 /* NewTarget */) {
                 var newTarget = void 0;
                 switch (node.kind) {
-                    case 210 /* ArrowFunction */:
+                    case 212 /* ArrowFunction */:
                         return statements;
-                    case 166 /* MethodDeclaration */:
-                    case 168 /* GetAccessor */:
-                    case 169 /* SetAccessor */:
+                    case 167 /* MethodDeclaration */:
+                    case 170 /* GetAccessor */:
+                    case 171 /* SetAccessor */:
                         // Methods and accessors cannot be constructors, so 'new.target' will
                         // always return 'undefined'.
                         newTarget = factory.createVoidZero();
                         break;
-                    case 167 /* Constructor */:
+                    case 169 /* Constructor */:
                         // Class constructors can only be called with `new`, so `this.constructor`
                         // should be relatively safe to use.
                         newTarget = factory.createPropertyAccessExpression(ts.setEmitFlags(factory.createThis(), 4 /* NoSubstitution */), "constructor");
                         break;
-                    case 252 /* FunctionDeclaration */:
-                    case 209 /* FunctionExpression */:
+                    case 254 /* FunctionDeclaration */:
+                    case 211 /* FunctionExpression */:
                         // Functions can be called or constructed, and may have a `this` due to
                         // being a member or when calling an imported function via `other_1.f()`.
-                        newTarget = factory.createConditionalExpression(factory.createLogicalAnd(ts.setEmitFlags(factory.createThis(), 4 /* NoSubstitution */), factory.createBinaryExpression(ts.setEmitFlags(factory.createThis(), 4 /* NoSubstitution */), 101 /* InstanceOfKeyword */, factory.getLocalName(node))), 
+                        newTarget = factory.createConditionalExpression(factory.createLogicalAnd(ts.setEmitFlags(factory.createThis(), 4 /* NoSubstitution */), factory.createBinaryExpression(ts.setEmitFlags(factory.createThis(), 4 /* NoSubstitution */), 102 /* InstanceOfKeyword */, factory.getLocalName(node))), 
                         /*questionToken*/ undefined, factory.createPropertyAccessExpression(ts.setEmitFlags(factory.createThis(), 4 /* NoSubstitution */), "constructor"), 
                         /*colonToken*/ undefined, factory.createVoidZero());
                         break;
@@ -93113,20 +95159,21 @@
             for (var _i = 0, _a = node.members; _i < _a.length; _i++) {
                 var member = _a[_i];
                 switch (member.kind) {
-                    case 230 /* SemicolonClassElement */:
+                    case 232 /* SemicolonClassElement */:
                         statements.push(transformSemicolonClassElementToStatement(member));
                         break;
-                    case 166 /* MethodDeclaration */:
+                    case 167 /* MethodDeclaration */:
                         statements.push(transformClassMethodDeclarationToStatement(getClassMemberPrefix(node, member), member, node));
                         break;
-                    case 168 /* GetAccessor */:
-                    case 169 /* SetAccessor */:
+                    case 170 /* GetAccessor */:
+                    case 171 /* SetAccessor */:
                         var accessors = ts.getAllAccessorDeclarations(node.members, member);
                         if (member === accessors.firstAccessor) {
                             statements.push(transformAccessorsToStatement(getClassMemberPrefix(node, member), accessors, node));
                         }
                         break;
-                    case 167 /* Constructor */:
+                    case 169 /* Constructor */:
+                    case 168 /* ClassStaticBlockDeclaration */:
                         // Constructors are handled in visitClassExpression/visitClassDeclaration
                         break;
                     default:
@@ -93247,8 +95294,8 @@
          * @param node An ArrowFunction node.
          */
         function visitArrowFunction(node) {
-            if (node.transformFlags & 8192 /* ContainsLexicalThis */) {
-                hierarchyFacts |= 32768 /* CapturedLexicalThis */;
+            if (node.transformFlags & 8192 /* ContainsLexicalThis */ && !(hierarchyFacts & 16384 /* StaticInitializer */)) {
+                hierarchyFacts |= 65536 /* CapturedLexicalThis */;
             }
             var savedConvertedLoopState = convertedLoopState;
             convertedLoopState = undefined;
@@ -93262,9 +95309,6 @@
             ts.setTextRange(func, node);
             ts.setOriginalNode(func, node);
             ts.setEmitFlags(func, 8 /* CapturesThis */);
-            if (hierarchyFacts & 32768 /* CapturedLexicalThis */) {
-                enableSubstitutionsForCapturedThis();
-            }
             // If an arrow function contains
             exitSubtree(ancestorFacts, 0 /* ArrowFunctionSubtreeExcludes */, 0 /* None */);
             convertedLoopState = savedConvertedLoopState;
@@ -93277,16 +95321,16 @@
          */
         function visitFunctionExpression(node) {
             var ancestorFacts = ts.getEmitFlags(node) & 262144 /* AsyncFunctionBody */
-                ? enterSubtree(16278 /* AsyncFunctionBodyExcludes */, 69 /* AsyncFunctionBodyIncludes */)
-                : enterSubtree(16286 /* FunctionExcludes */, 65 /* FunctionIncludes */);
+                ? enterSubtree(32662 /* AsyncFunctionBodyExcludes */, 69 /* AsyncFunctionBodyIncludes */)
+                : enterSubtree(32670 /* FunctionExcludes */, 65 /* FunctionIncludes */);
             var savedConvertedLoopState = convertedLoopState;
             convertedLoopState = undefined;
             var parameters = ts.visitParameterList(node.parameters, visitor, context);
             var body = transformFunctionBody(node);
-            var name = hierarchyFacts & 16384 /* NewTarget */
+            var name = hierarchyFacts & 32768 /* NewTarget */
                 ? factory.getLocalName(node)
                 : node.name;
-            exitSubtree(ancestorFacts, 49152 /* FunctionSubtreeExcludes */, 0 /* None */);
+            exitSubtree(ancestorFacts, 98304 /* FunctionSubtreeExcludes */, 0 /* None */);
             convertedLoopState = savedConvertedLoopState;
             return factory.updateFunctionExpression(node, 
             /*modifiers*/ undefined, node.asteriskToken, name, 
@@ -93301,13 +95345,13 @@
         function visitFunctionDeclaration(node) {
             var savedConvertedLoopState = convertedLoopState;
             convertedLoopState = undefined;
-            var ancestorFacts = enterSubtree(16286 /* FunctionExcludes */, 65 /* FunctionIncludes */);
+            var ancestorFacts = enterSubtree(32670 /* FunctionExcludes */, 65 /* FunctionIncludes */);
             var parameters = ts.visitParameterList(node.parameters, visitor, context);
             var body = transformFunctionBody(node);
-            var name = hierarchyFacts & 16384 /* NewTarget */
+            var name = hierarchyFacts & 32768 /* NewTarget */
                 ? factory.getLocalName(node)
                 : node.name;
-            exitSubtree(ancestorFacts, 49152 /* FunctionSubtreeExcludes */, 0 /* None */);
+            exitSubtree(ancestorFacts, 98304 /* FunctionSubtreeExcludes */, 0 /* None */);
             convertedLoopState = savedConvertedLoopState;
             return factory.updateFunctionDeclaration(node, 
             /*decorators*/ undefined, ts.visitNodes(node.modifiers, visitor, ts.isModifier), node.asteriskToken, name, 
@@ -93324,15 +95368,15 @@
         function transformFunctionLikeToExpression(node, location, name, container) {
             var savedConvertedLoopState = convertedLoopState;
             convertedLoopState = undefined;
-            var ancestorFacts = container && ts.isClassLike(container) && !ts.hasSyntacticModifier(node, 32 /* Static */)
-                ? enterSubtree(16286 /* FunctionExcludes */, 65 /* FunctionIncludes */ | 8 /* NonStaticClassElement */)
-                : enterSubtree(16286 /* FunctionExcludes */, 65 /* FunctionIncludes */);
+            var ancestorFacts = container && ts.isClassLike(container) && !ts.isStatic(node)
+                ? enterSubtree(32670 /* FunctionExcludes */, 65 /* FunctionIncludes */ | 8 /* NonStaticClassElement */)
+                : enterSubtree(32670 /* FunctionExcludes */, 65 /* FunctionIncludes */);
             var parameters = ts.visitParameterList(node.parameters, visitor, context);
             var body = transformFunctionBody(node);
-            if (hierarchyFacts & 16384 /* NewTarget */ && !name && (node.kind === 252 /* FunctionDeclaration */ || node.kind === 209 /* FunctionExpression */)) {
+            if (hierarchyFacts & 32768 /* NewTarget */ && !name && (node.kind === 254 /* FunctionDeclaration */ || node.kind === 211 /* FunctionExpression */)) {
                 name = factory.getGeneratedNameForNode(node);
             }
-            exitSubtree(ancestorFacts, 49152 /* FunctionSubtreeExcludes */, 0 /* None */);
+            exitSubtree(ancestorFacts, 98304 /* FunctionSubtreeExcludes */, 0 /* None */);
             convertedLoopState = savedConvertedLoopState;
             return ts.setOriginalNode(ts.setTextRange(factory.createFunctionExpression(
             /*modifiers*/ undefined, node.asteriskToken, name, 
@@ -93375,7 +95419,7 @@
                 }
             }
             else {
-                ts.Debug.assert(node.kind === 210 /* ArrowFunction */);
+                ts.Debug.assert(node.kind === 212 /* ArrowFunction */);
                 // To align with the old emitter, we use a synthetic end position on the location
                 // for the statement list we synthesize when we down-level an arrow function with
                 // an expression function body. This prevents both comments and source maps from
@@ -93510,7 +95554,7 @@
                             assignment = ts.flattenDestructuringAssignment(decl, visitor, context, 0 /* All */);
                         }
                         else {
-                            assignment = factory.createBinaryExpression(decl.name, 62 /* EqualsToken */, ts.visitNode(decl.initializer, visitor, ts.isExpression));
+                            assignment = factory.createBinaryExpression(decl.name, 63 /* EqualsToken */, ts.visitNode(decl.initializer, visitor, ts.isExpression));
                             ts.setTextRange(assignment, decl);
                         }
                         assignments = ts.append(assignments, assignment);
@@ -93682,14 +95726,14 @@
         }
         function visitIterationStatement(node, outermostLabeledStatement) {
             switch (node.kind) {
-                case 236 /* DoStatement */:
-                case 237 /* WhileStatement */:
+                case 238 /* DoStatement */:
+                case 239 /* WhileStatement */:
                     return visitDoOrWhileStatement(node, outermostLabeledStatement);
-                case 238 /* ForStatement */:
+                case 240 /* ForStatement */:
                     return visitForStatement(node, outermostLabeledStatement);
-                case 239 /* ForInStatement */:
+                case 241 /* ForInStatement */:
                     return visitForInStatement(node, outermostLabeledStatement);
-                case 240 /* ForOfStatement */:
+                case 242 /* ForOfStatement */:
                     return visitForOfStatement(node, outermostLabeledStatement);
             }
         }
@@ -93875,7 +95919,7 @@
                 var property = properties[i];
                 if ((property.transformFlags & 524288 /* ContainsYield */ &&
                     hierarchyFacts & 4 /* AsyncFunctionBody */)
-                    || (hasComputed = ts.Debug.checkDefined(property.name).kind === 159 /* ComputedPropertyName */)) {
+                    || (hasComputed = ts.Debug.checkDefined(property.name).kind === 160 /* ComputedPropertyName */)) {
                     numInitialProperties = i;
                     break;
                 }
@@ -93927,7 +95971,7 @@
             }
             visit(node.name);
             function visit(node) {
-                if (node.kind === 78 /* Identifier */) {
+                if (node.kind === 79 /* Identifier */) {
                     state.hoistedLocalVariables.push(node);
                 }
                 else {
@@ -93991,11 +96035,11 @@
         }
         function convertIterationStatementCore(node, initializerFunction, convertedLoopBody) {
             switch (node.kind) {
-                case 238 /* ForStatement */: return convertForStatement(node, initializerFunction, convertedLoopBody);
-                case 239 /* ForInStatement */: return convertForInStatement(node, convertedLoopBody);
-                case 240 /* ForOfStatement */: return convertForOfStatement(node, convertedLoopBody);
-                case 236 /* DoStatement */: return convertDoStatement(node, convertedLoopBody);
-                case 237 /* WhileStatement */: return convertWhileStatement(node, convertedLoopBody);
+                case 240 /* ForStatement */: return convertForStatement(node, initializerFunction, convertedLoopBody);
+                case 241 /* ForInStatement */: return convertForInStatement(node, convertedLoopBody);
+                case 242 /* ForOfStatement */: return convertForOfStatement(node, convertedLoopBody);
+                case 238 /* DoStatement */: return convertDoStatement(node, convertedLoopBody);
+                case 239 /* WhileStatement */: return convertWhileStatement(node, convertedLoopBody);
                 default: return ts.Debug.failBadSyntaxKind(node, "IterationStatement expected");
             }
         }
@@ -94020,11 +96064,11 @@
         function createConvertedLoopState(node) {
             var loopInitializer;
             switch (node.kind) {
-                case 238 /* ForStatement */:
-                case 239 /* ForInStatement */:
-                case 240 /* ForOfStatement */:
+                case 240 /* ForStatement */:
+                case 241 /* ForInStatement */:
+                case 242 /* ForOfStatement */:
                     var initializer = node.initializer;
-                    if (initializer && initializer.kind === 251 /* VariableDeclarationList */) {
+                    if (initializer && initializer.kind === 253 /* VariableDeclarationList */) {
                         loopInitializer = initializer;
                     }
                     break;
@@ -94295,7 +96339,7 @@
         function copyOutParameter(outParam, copyDirection) {
             var source = copyDirection === 0 /* ToOriginal */ ? outParam.outParamName : outParam.originalName;
             var target = copyDirection === 0 /* ToOriginal */ ? outParam.originalName : outParam.outParamName;
-            return factory.createBinaryExpression(target, 62 /* EqualsToken */, source);
+            return factory.createBinaryExpression(target, 63 /* EqualsToken */, source);
         }
         function copyOutParameters(outParams, partFlags, copyDirection, statements) {
             for (var _i = 0, outParams_1 = outParams; _i < outParams_1.length; _i++) {
@@ -94432,20 +96476,20 @@
             for (var i = start; i < numProperties; i++) {
                 var property = properties[i];
                 switch (property.kind) {
-                    case 168 /* GetAccessor */:
-                    case 169 /* SetAccessor */:
+                    case 170 /* GetAccessor */:
+                    case 171 /* SetAccessor */:
                         var accessors = ts.getAllAccessorDeclarations(node.properties, property);
                         if (property === accessors.firstAccessor) {
                             expressions.push(transformAccessorsToExpression(receiver, accessors, node, !!node.multiLine));
                         }
                         break;
-                    case 166 /* MethodDeclaration */:
+                    case 167 /* MethodDeclaration */:
                         expressions.push(transformObjectLiteralMethodDeclarationToExpression(property, receiver, node, node.multiLine));
                         break;
-                    case 289 /* PropertyAssignment */:
+                    case 291 /* PropertyAssignment */:
                         expressions.push(transformPropertyAssignmentToExpression(property, receiver, node.multiLine));
                         break;
-                    case 290 /* ShorthandPropertyAssignment */:
+                    case 292 /* ShorthandPropertyAssignment */:
                         expressions.push(transformShorthandPropertyAssignmentToExpression(property, receiver, node.multiLine));
                         break;
                     default:
@@ -94521,7 +96565,7 @@
         }
         function addStatementToStartOfBlock(block, statement) {
             var transformedStatements = ts.visitNodes(block.statements, visitor, ts.isStatement);
-            return factory.updateBlock(block, __spreadArray([statement], transformedStatements));
+            return factory.updateBlock(block, __spreadArray([statement], transformedStatements, true));
         }
         /**
          * Visits a MethodDeclaration of an ObjectLiteralExpression and transforms it into a
@@ -94548,17 +96592,17 @@
             ts.Debug.assert(!ts.isComputedPropertyName(node.name));
             var savedConvertedLoopState = convertedLoopState;
             convertedLoopState = undefined;
-            var ancestorFacts = enterSubtree(16286 /* FunctionExcludes */, 65 /* FunctionIncludes */);
+            var ancestorFacts = enterSubtree(32670 /* FunctionExcludes */, 65 /* FunctionIncludes */);
             var updated;
             var parameters = ts.visitParameterList(node.parameters, visitor, context);
             var body = transformFunctionBody(node);
-            if (node.kind === 168 /* GetAccessor */) {
+            if (node.kind === 170 /* GetAccessor */) {
                 updated = factory.updateGetAccessorDeclaration(node, node.decorators, node.modifiers, node.name, parameters, node.type, body);
             }
             else {
                 updated = factory.updateSetAccessorDeclaration(node, node.decorators, node.modifiers, node.name, parameters, body);
             }
-            exitSubtree(ancestorFacts, 49152 /* FunctionSubtreeExcludes */, 0 /* None */);
+            exitSubtree(ancestorFacts, 98304 /* FunctionSubtreeExcludes */, 0 /* None */);
             convertedLoopState = savedConvertedLoopState;
             return updated;
         }
@@ -94591,7 +96635,7 @@
         function visitArrayLiteralExpression(node) {
             if (ts.some(node.elements, ts.isSpreadElement)) {
                 // We are here because we contain a SpreadElementExpression.
-                return transformAndSpreadElements(node.elements, /*needsUniqueCopy*/ true, !!node.multiLine, /*hasTrailingComma*/ !!node.elements.hasTrailingComma);
+                return transformAndSpreadElements(node.elements, /*isArgumentList*/ false, !!node.multiLine, /*hasTrailingComma*/ !!node.elements.hasTrailingComma);
             }
             return ts.visitEachChild(node, visitor, context);
         }
@@ -94605,7 +96649,7 @@
                 return visitTypeScriptClassWrapper(node);
             }
             var expression = ts.skipOuterExpressions(node.expression);
-            if (expression.kind === 105 /* SuperKeyword */ ||
+            if (expression.kind === 106 /* SuperKeyword */ ||
                 ts.isSuperProperty(expression) ||
                 ts.some(node.arguments, ts.isSpreadElement)) {
                 return visitCallExpressionWithPotentialCapturedThisAssignment(node, /*assignToCapturedThis*/ true);
@@ -94653,7 +96697,7 @@
             // visit the class body statements outside of any converted loop body.
             var savedConvertedLoopState = convertedLoopState;
             convertedLoopState = undefined;
-            var bodyStatements = ts.visitNodes(body.statements, visitor, ts.isStatement);
+            var bodyStatements = ts.visitNodes(body.statements, classWrapperStatementVisitor, ts.isStatement);
             convertedLoopState = savedConvertedLoopState;
             var classStatements = ts.filter(bodyStatements, isVariableStatementWithInitializer);
             var remainingStatements = ts.filter(bodyStatements, function (stmt) { return !isVariableStatementWithInitializer(stmt); });
@@ -94678,6 +96722,9 @@
             //  }())
             //
             var aliasAssignment = ts.tryCast(initializer, ts.isAssignmentExpression);
+            if (!aliasAssignment && ts.isBinaryExpression(initializer) && initializer.operatorToken.kind === 27 /* CommaToken */) {
+                aliasAssignment = ts.tryCast(initializer.left, ts.isAssignmentExpression);
+            }
             // The underlying call (3) is another IIFE that may contain a '_super' argument.
             var call = ts.cast(aliasAssignment ? ts.skipOuterExpressions(aliasAssignment.right) : initializer, ts.isCallExpression);
             var func = ts.cast(ts.skipOuterExpressions(call.expression), ts.isFunctionExpression);
@@ -94733,10 +96780,10 @@
             // We are here either because SuperKeyword was used somewhere in the expression, or
             // because we contain a SpreadElementExpression.
             if (node.transformFlags & 16384 /* ContainsRestOrSpread */ ||
-                node.expression.kind === 105 /* SuperKeyword */ ||
+                node.expression.kind === 106 /* SuperKeyword */ ||
                 ts.isSuperProperty(ts.skipOuterExpressions(node.expression))) {
                 var _a = factory.createCallBinding(node.expression, hoistVariableDeclaration), target = _a.target, thisArg = _a.thisArg;
-                if (node.expression.kind === 105 /* SuperKeyword */) {
+                if (node.expression.kind === 106 /* SuperKeyword */) {
                     ts.setEmitFlags(thisArg, 4 /* NoSubstitution */);
                 }
                 var resultingCall = void 0;
@@ -94754,7 +96801,7 @@
                     //      _super.apply(this, a.concat([b]))
                     //      _super.m.apply(this, a.concat([b]))
                     //      _super.prototype.m.apply(this, a.concat([b]))
-                    resultingCall = factory.createFunctionApplyCall(ts.visitNode(target, callExpressionVisitor, ts.isExpression), node.expression.kind === 105 /* SuperKeyword */ ? thisArg : ts.visitNode(thisArg, visitor, ts.isExpression), transformAndSpreadElements(node.arguments, /*needsUniqueCopy*/ false, /*multiLine*/ false, /*hasTrailingComma*/ false));
+                    resultingCall = factory.createFunctionApplyCall(ts.visitNode(target, callExpressionVisitor, ts.isExpression), node.expression.kind === 106 /* SuperKeyword */ ? thisArg : ts.visitNode(thisArg, visitor, ts.isExpression), transformAndSpreadElements(node.arguments, /*isArgumentList*/ true, /*multiLine*/ false, /*hasTrailingComma*/ false));
                 }
                 else {
                     // [source]
@@ -94766,9 +96813,9 @@
                     //      _super.call(this, a)
                     //      _super.m.call(this, a)
                     //      _super.prototype.m.call(this, a)
-                    resultingCall = ts.setTextRange(factory.createFunctionCallCall(ts.visitNode(target, callExpressionVisitor, ts.isExpression), node.expression.kind === 105 /* SuperKeyword */ ? thisArg : ts.visitNode(thisArg, visitor, ts.isExpression), ts.visitNodes(node.arguments, visitor, ts.isExpression)), node);
+                    resultingCall = ts.setTextRange(factory.createFunctionCallCall(ts.visitNode(target, callExpressionVisitor, ts.isExpression), node.expression.kind === 106 /* SuperKeyword */ ? thisArg : ts.visitNode(thisArg, visitor, ts.isExpression), ts.visitNodes(node.arguments, visitor, ts.isExpression)), node);
                 }
-                if (node.expression.kind === 105 /* SuperKeyword */) {
+                if (node.expression.kind === 106 /* SuperKeyword */) {
                     var initializer = factory.createLogicalOr(resultingCall, createActualThis());
                     resultingCall = assignToCapturedThis
                         ? factory.createAssignment(factory.createUniqueName("_this", 16 /* Optimistic */ | 32 /* FileLevel */), initializer)
@@ -94792,7 +96839,7 @@
                 // [output]
                 //      new ((_a = C).bind.apply(_a, [void 0].concat(a)))()
                 var _a = factory.createCallBinding(factory.createPropertyAccessExpression(node.expression, "bind"), hoistVariableDeclaration), target = _a.target, thisArg = _a.thisArg;
-                return factory.createNewExpression(factory.createFunctionApplyCall(ts.visitNode(target, visitor, ts.isExpression), thisArg, transformAndSpreadElements(factory.createNodeArray(__spreadArray([factory.createVoidZero()], node.arguments)), /*needsUniqueCopy*/ false, /*multiLine*/ false, /*hasTrailingComma*/ false)), 
+                return factory.createNewExpression(factory.createFunctionApplyCall(ts.visitNode(target, visitor, ts.isExpression), thisArg, transformAndSpreadElements(factory.createNodeArray(__spreadArray([factory.createVoidZero()], node.arguments, true)), /*isArgumentList*/ true, /*multiLine*/ false, /*hasTrailingComma*/ false)), 
                 /*typeArguments*/ undefined, []);
             }
             return ts.visitEachChild(node, visitor, context);
@@ -94801,12 +96848,12 @@
          * Transforms an array of Expression nodes that contains a SpreadExpression.
          *
          * @param elements The array of Expression nodes.
-         * @param needsUniqueCopy A value indicating whether to ensure that the result is a fresh array.
-         * This should be `true` when spreading into an `ArrayLiteral`, and `false` when spreading into an
+         * @param isArgumentList A value indicating whether to ensure that the result is a fresh array.
+         * This should be `false` when spreading into an `ArrayLiteral`, and `true` when spreading into an
          * argument list.
          * @param multiLine A value indicating whether the result should be emitted on multiple lines.
          */
-        function transformAndSpreadElements(elements, needsUniqueCopy, multiLine, hasTrailingComma) {
+        function transformAndSpreadElements(elements, isArgumentList, multiLine, hasTrailingComma) {
             // When there is no leading SpreadElement:
             //
             // [source]
@@ -94840,7 +96887,11 @@
             // Map spans of spread expressions into their expressions and spans of other
             // expressions into an array literal.
             var numElements = elements.length;
-            var segments = ts.flatten(ts.spanMap(elements, partitionSpread, function (partition, visitPartition, _start, end) {
+            var segments = ts.flatten(
+            // As we visit each element, we return one of two functions to use as the "key":
+            // - `visitSpanOfSpreads` for one or more contiguous `...` spread expressions, i.e. `...a, ...b` in `[1, 2, ...a, ...b]`
+            // - `visitSpanOfNonSpreads` for one or more contiguous non-spread elements, i.e. `1, 2`, in `[1, 2, ...a, ...b]`
+            ts.spanMap(elements, partitionSpread, function (partition, visitPartition, _start, end) {
                 return visitPartition(partition, multiLine, hasTrailingComma && end === numElements);
             }));
             if (segments.length === 1) {
@@ -94849,20 +96900,20 @@
                 // a CallExpression or NewExpression. When using `--downlevelIteration`, we need
                 // to coerce this into an array for use with `apply`, so we will use the code path
                 // that follows instead.
-                if (!needsUniqueCopy && !compilerOptions.downlevelIteration
-                    || ts.isPackedArrayLiteral(firstSegment) // see NOTE (above)
-                    || ts.isCallToHelper(firstSegment, "___spreadArray")) {
-                    return segments[0];
+                if (isArgumentList && !compilerOptions.downlevelIteration
+                    || ts.isPackedArrayLiteral(firstSegment.expression) // see NOTE (above)
+                    || ts.isCallToHelper(firstSegment.expression, "___spreadArray")) {
+                    return firstSegment.expression;
                 }
             }
             var helpers = emitHelpers();
-            var startsWithSpread = ts.isSpreadElement(elements[0]);
+            var startsWithSpread = segments[0].kind !== 0 /* None */;
             var expression = startsWithSpread ? factory.createArrayLiteralExpression() :
-                segments[0];
+                segments[0].expression;
             for (var i = startsWithSpread ? 0 : 1; i < segments.length; i++) {
-                expression = helpers.createSpreadArrayHelper(expression, compilerOptions.downlevelIteration && !ts.isPackedArrayLiteral(segments[i]) ? // see NOTE (above)
-                    helpers.createReadHelper(segments[i], /*count*/ undefined) :
-                    segments[i]);
+                var segment = segments[i];
+                // If this is for an argument list, it doesn't matter if the array is packed or sparse
+                expression = helpers.createSpreadArrayHelper(expression, segment.expression, segment.kind === 1 /* UnpackedSpread */ && !isArgumentList);
             }
             return expression;
         }
@@ -94874,21 +96925,29 @@
         function visitSpanOfSpreads(chunk) {
             return ts.map(chunk, visitExpressionOfSpread);
         }
+        function visitExpressionOfSpread(node) {
+            var expression = ts.visitNode(node.expression, visitor, ts.isExpression);
+            // We don't need to pack already packed array literals, or existing calls to the `__read` helper.
+            var isCallToReadHelper = ts.isCallToHelper(expression, "___read");
+            var kind = isCallToReadHelper || ts.isPackedArrayLiteral(expression) ? 2 /* PackedSpread */ : 1 /* UnpackedSpread */;
+            // We don't need the `__read` helper for array literals. Array packing will be performed by `__spreadArray`.
+            if (compilerOptions.downlevelIteration && kind === 1 /* UnpackedSpread */ && !ts.isArrayLiteralExpression(expression) && !isCallToReadHelper) {
+                expression = emitHelpers().createReadHelper(expression, /*count*/ undefined);
+                // the `__read` helper returns a packed array, so we don't need to ensure a packed array
+                kind = 2 /* PackedSpread */;
+            }
+            return createSpreadSegment(kind, expression);
+        }
         function visitSpanOfNonSpreads(chunk, multiLine, hasTrailingComma) {
-            return factory.createArrayLiteralExpression(ts.visitNodes(factory.createNodeArray(chunk, hasTrailingComma), visitor, ts.isExpression), multiLine);
+            var expression = factory.createArrayLiteralExpression(ts.visitNodes(factory.createNodeArray(chunk, hasTrailingComma), visitor, ts.isExpression), multiLine);
+            // We do not pack non-spread segments, this is so that `[1, , ...[2, , 3], , 4]` is properly downleveled to
+            // `[1, , 2, undefined, 3, , 4]`. See the NOTE in `transformAndSpreadElements`
+            return createSpreadSegment(0 /* None */, expression);
         }
         function visitSpreadElement(node) {
             return ts.visitNode(node.expression, visitor, ts.isExpression);
         }
         /**
-         * Transforms the expression of a SpreadExpression node.
-         *
-         * @param node A SpreadExpression node.
-         */
-        function visitExpressionOfSpread(node) {
-            return ts.visitNode(node.expression, visitor, ts.isExpression);
-        }
-        /**
          * Visits a template literal.
          *
          * @param node A template literal.
@@ -95015,8 +97074,8 @@
                 : factory.createUniqueName("_super", 16 /* Optimistic */ | 32 /* FileLevel */);
         }
         function visitMetaProperty(node) {
-            if (node.keywordToken === 102 /* NewKeyword */ && node.name.escapedText === "target") {
-                hierarchyFacts |= 16384 /* NewTarget */;
+            if (node.keywordToken === 103 /* NewKeyword */ && node.name.escapedText === "target") {
+                hierarchyFacts |= 32768 /* NewTarget */;
                 return factory.createUniqueName("_newTarget", 16 /* Optimistic */ | 32 /* FileLevel */);
             }
             return node;
@@ -95031,7 +97090,7 @@
         function onEmitNode(hint, node, emitCallback) {
             if (enabledSubstitutions & 1 /* CapturedThis */ && ts.isFunctionLike(node)) {
                 // If we are tracking a captured `this`, keep track of the enclosing function.
-                var ancestorFacts = enterSubtree(16286 /* FunctionExcludes */, ts.getEmitFlags(node) & 8 /* CapturesThis */
+                var ancestorFacts = enterSubtree(32670 /* FunctionExcludes */, ts.getEmitFlags(node) & 8 /* CapturesThis */
                     ? 65 /* FunctionIncludes */ | 16 /* CapturesThis */
                     : 65 /* FunctionIncludes */);
                 previousOnEmitNode(hint, node, emitCallback);
@@ -95047,7 +97106,7 @@
         function enableSubstitutionsForBlockScopedBindings() {
             if ((enabledSubstitutions & 2 /* BlockScopedBindings */) === 0) {
                 enabledSubstitutions |= 2 /* BlockScopedBindings */;
-                context.enableSubstitution(78 /* Identifier */);
+                context.enableSubstitution(79 /* Identifier */);
             }
         }
         /**
@@ -95057,14 +97116,14 @@
         function enableSubstitutionsForCapturedThis() {
             if ((enabledSubstitutions & 1 /* CapturedThis */) === 0) {
                 enabledSubstitutions |= 1 /* CapturedThis */;
-                context.enableSubstitution(107 /* ThisKeyword */);
-                context.enableEmitNotification(167 /* Constructor */);
-                context.enableEmitNotification(166 /* MethodDeclaration */);
-                context.enableEmitNotification(168 /* GetAccessor */);
-                context.enableEmitNotification(169 /* SetAccessor */);
-                context.enableEmitNotification(210 /* ArrowFunction */);
-                context.enableEmitNotification(209 /* FunctionExpression */);
-                context.enableEmitNotification(252 /* FunctionDeclaration */);
+                context.enableSubstitution(108 /* ThisKeyword */);
+                context.enableEmitNotification(169 /* Constructor */);
+                context.enableEmitNotification(167 /* MethodDeclaration */);
+                context.enableEmitNotification(170 /* GetAccessor */);
+                context.enableEmitNotification(171 /* SetAccessor */);
+                context.enableEmitNotification(212 /* ArrowFunction */);
+                context.enableEmitNotification(211 /* FunctionExpression */);
+                context.enableEmitNotification(254 /* FunctionDeclaration */);
             }
         }
         /**
@@ -95105,10 +97164,10 @@
          */
         function isNameOfDeclarationWithCollidingName(node) {
             switch (node.parent.kind) {
-                case 199 /* BindingElement */:
-                case 253 /* ClassDeclaration */:
-                case 256 /* EnumDeclaration */:
-                case 250 /* VariableDeclaration */:
+                case 201 /* BindingElement */:
+                case 255 /* ClassDeclaration */:
+                case 258 /* EnumDeclaration */:
+                case 252 /* VariableDeclaration */:
                     return node.parent.name === node
                         && resolver.isDeclarationWithCollidingName(node.parent);
             }
@@ -95121,9 +97180,9 @@
          */
         function substituteExpression(node) {
             switch (node.kind) {
-                case 78 /* Identifier */:
+                case 79 /* Identifier */:
                     return substituteExpressionIdentifier(node);
-                case 107 /* ThisKeyword */:
+                case 108 /* ThisKeyword */:
                     return substituteThisKeyword(node);
             }
             return node;
@@ -95178,7 +97237,7 @@
             return node;
         }
         function getClassMemberPrefix(node, member) {
-            return ts.hasSyntacticModifier(member, 32 /* Static */)
+            return ts.isStatic(member)
                 ? factory.getInternalName(node)
                 : factory.createPropertyAccessExpression(factory.getInternalName(node), "prototype");
         }
@@ -95190,19 +97249,19 @@
                 return false;
             }
             var statement = ts.firstOrUndefined(constructor.body.statements);
-            if (!statement || !ts.nodeIsSynthesized(statement) || statement.kind !== 234 /* ExpressionStatement */) {
+            if (!statement || !ts.nodeIsSynthesized(statement) || statement.kind !== 236 /* ExpressionStatement */) {
                 return false;
             }
             var statementExpression = statement.expression;
-            if (!ts.nodeIsSynthesized(statementExpression) || statementExpression.kind !== 204 /* CallExpression */) {
+            if (!ts.nodeIsSynthesized(statementExpression) || statementExpression.kind !== 206 /* CallExpression */) {
                 return false;
             }
             var callTarget = statementExpression.expression;
-            if (!ts.nodeIsSynthesized(callTarget) || callTarget.kind !== 105 /* SuperKeyword */) {
+            if (!ts.nodeIsSynthesized(callTarget) || callTarget.kind !== 106 /* SuperKeyword */) {
                 return false;
             }
             var callArgument = ts.singleOrUndefined(statementExpression.arguments);
-            if (!callArgument || !ts.nodeIsSynthesized(callArgument) || callArgument.kind !== 221 /* SpreadElement */) {
+            if (!callArgument || !ts.nodeIsSynthesized(callArgument) || callArgument.kind !== 223 /* SpreadElement */) {
                 return false;
             }
             var expression = callArgument.expression;
@@ -95228,15 +97287,15 @@
         if (compilerOptions.jsx === 1 /* Preserve */ || compilerOptions.jsx === 3 /* ReactNative */) {
             previousOnEmitNode = context.onEmitNode;
             context.onEmitNode = onEmitNode;
-            context.enableEmitNotification(276 /* JsxOpeningElement */);
-            context.enableEmitNotification(277 /* JsxClosingElement */);
-            context.enableEmitNotification(275 /* JsxSelfClosingElement */);
+            context.enableEmitNotification(278 /* JsxOpeningElement */);
+            context.enableEmitNotification(279 /* JsxClosingElement */);
+            context.enableEmitNotification(277 /* JsxSelfClosingElement */);
             noSubstitution = [];
         }
         var previousOnSubstituteNode = context.onSubstituteNode;
         context.onSubstituteNode = onSubstituteNode;
-        context.enableSubstitution(202 /* PropertyAccessExpression */);
-        context.enableSubstitution(289 /* PropertyAssignment */);
+        context.enableSubstitution(204 /* PropertyAccessExpression */);
+        context.enableSubstitution(291 /* PropertyAssignment */);
         return ts.chainBundle(context, transformSourceFile);
         /**
          * Transforms an ES5 source file to ES3.
@@ -95255,9 +97314,9 @@
          */
         function onEmitNode(hint, node, emitCallback) {
             switch (node.kind) {
-                case 276 /* JsxOpeningElement */:
-                case 277 /* JsxClosingElement */:
-                case 275 /* JsxSelfClosingElement */:
+                case 278 /* JsxOpeningElement */:
+                case 279 /* JsxClosingElement */:
+                case 277 /* JsxSelfClosingElement */:
                     var tagName = node.tagName;
                     noSubstitution[ts.getOriginalNodeId(tagName)] = true;
                     break;
@@ -95317,7 +97376,7 @@
          */
         function trySubstituteReservedName(name) {
             var token = name.originalKeywordKind || (ts.nodeIsSynthesized(name) ? ts.stringToToken(ts.idText(name)) : undefined);
-            if (token !== undefined && token >= 80 /* FirstReservedWord */ && token <= 115 /* LastReservedWord */) {
+            if (token !== undefined && token >= 81 /* FirstReservedWord */ && token <= 116 /* LastReservedWord */) {
                 return ts.setTextRange(factory.createStringLiteralFromNode(name), name);
             }
             return undefined;
@@ -95592,13 +97651,13 @@
          */
         function visitJavaScriptInStatementContainingYield(node) {
             switch (node.kind) {
-                case 236 /* DoStatement */:
+                case 238 /* DoStatement */:
                     return visitDoStatement(node);
-                case 237 /* WhileStatement */:
+                case 239 /* WhileStatement */:
                     return visitWhileStatement(node);
-                case 245 /* SwitchStatement */:
+                case 247 /* SwitchStatement */:
                     return visitSwitchStatement(node);
-                case 246 /* LabeledStatement */:
+                case 248 /* LabeledStatement */:
                     return visitLabeledStatement(node);
                 default:
                     return visitJavaScriptInGeneratorFunctionBody(node);
@@ -95611,24 +97670,24 @@
          */
         function visitJavaScriptInGeneratorFunctionBody(node) {
             switch (node.kind) {
-                case 252 /* FunctionDeclaration */:
+                case 254 /* FunctionDeclaration */:
                     return visitFunctionDeclaration(node);
-                case 209 /* FunctionExpression */:
+                case 211 /* FunctionExpression */:
                     return visitFunctionExpression(node);
-                case 168 /* GetAccessor */:
-                case 169 /* SetAccessor */:
+                case 170 /* GetAccessor */:
+                case 171 /* SetAccessor */:
                     return visitAccessorDeclaration(node);
-                case 233 /* VariableStatement */:
+                case 235 /* VariableStatement */:
                     return visitVariableStatement(node);
-                case 238 /* ForStatement */:
+                case 240 /* ForStatement */:
                     return visitForStatement(node);
-                case 239 /* ForInStatement */:
+                case 241 /* ForInStatement */:
                     return visitForInStatement(node);
-                case 242 /* BreakStatement */:
+                case 244 /* BreakStatement */:
                     return visitBreakStatement(node);
-                case 241 /* ContinueStatement */:
+                case 243 /* ContinueStatement */:
                     return visitContinueStatement(node);
-                case 243 /* ReturnStatement */:
+                case 245 /* ReturnStatement */:
                     return visitReturnStatement(node);
                 default:
                     if (node.transformFlags & 524288 /* ContainsYield */) {
@@ -95649,23 +97708,23 @@
          */
         function visitJavaScriptContainingYield(node) {
             switch (node.kind) {
-                case 217 /* BinaryExpression */:
+                case 219 /* BinaryExpression */:
                     return visitBinaryExpression(node);
-                case 341 /* CommaListExpression */:
+                case 346 /* CommaListExpression */:
                     return visitCommaListExpression(node);
-                case 218 /* ConditionalExpression */:
+                case 220 /* ConditionalExpression */:
                     return visitConditionalExpression(node);
-                case 220 /* YieldExpression */:
+                case 222 /* YieldExpression */:
                     return visitYieldExpression(node);
-                case 200 /* ArrayLiteralExpression */:
+                case 202 /* ArrayLiteralExpression */:
                     return visitArrayLiteralExpression(node);
-                case 201 /* ObjectLiteralExpression */:
+                case 203 /* ObjectLiteralExpression */:
                     return visitObjectLiteralExpression(node);
-                case 203 /* ElementAccessExpression */:
+                case 205 /* ElementAccessExpression */:
                     return visitElementAccessExpression(node);
-                case 204 /* CallExpression */:
+                case 206 /* CallExpression */:
                     return visitCallExpression(node);
-                case 205 /* NewExpression */:
+                case 207 /* NewExpression */:
                     return visitNewExpression(node);
                 default:
                     return ts.visitEachChild(node, visitor, context);
@@ -95678,9 +97737,9 @@
          */
         function visitGenerator(node) {
             switch (node.kind) {
-                case 252 /* FunctionDeclaration */:
+                case 254 /* FunctionDeclaration */:
                     return visitFunctionDeclaration(node);
-                case 209 /* FunctionExpression */:
+                case 211 /* FunctionExpression */:
                     return visitFunctionExpression(node);
                 default:
                     return ts.Debug.failBadSyntaxKind(node);
@@ -95888,7 +97947,7 @@
             if (containsYield(right)) {
                 var target = void 0;
                 switch (left.kind) {
-                    case 202 /* PropertyAccessExpression */:
+                    case 204 /* PropertyAccessExpression */:
                         // [source]
                         //      a.b = yield;
                         //
@@ -95900,7 +97959,7 @@
                         //      _a.b = %sent%;
                         target = factory.updatePropertyAccessExpression(left, cacheExpression(ts.visitNode(left.expression, visitor, ts.isLeftHandSideExpression)), left.name);
                         break;
-                    case 203 /* ElementAccessExpression */:
+                    case 205 /* ElementAccessExpression */:
                         // [source]
                         //      a[b] = yield;
                         //
@@ -96147,13 +98206,13 @@
                 temp = declareLocal();
                 var initialElements = ts.visitNodes(elements, visitor, ts.isExpression, 0, numInitialElements);
                 emitAssignment(temp, factory.createArrayLiteralExpression(leadingElement
-                    ? __spreadArray([leadingElement], initialElements) : initialElements));
+                    ? __spreadArray([leadingElement], initialElements, true) : initialElements));
                 leadingElement = undefined;
             }
             var expressions = ts.reduceLeft(elements, reduceElement, [], numInitialElements);
             return temp
                 ? factory.createArrayConcatCall(temp, [factory.createArrayLiteralExpression(expressions, multiLine)])
-                : ts.setTextRange(factory.createArrayLiteralExpression(leadingElement ? __spreadArray([leadingElement], expressions) : expressions, multiLine), location);
+                : ts.setTextRange(factory.createArrayLiteralExpression(leadingElement ? __spreadArray([leadingElement], expressions, true) : expressions, multiLine), location);
             function reduceElement(expressions, element) {
                 if (containsYield(element) && expressions.length > 0) {
                     var hasAssignedTemp = temp !== undefined;
@@ -96162,7 +98221,7 @@
                     }
                     emitAssignment(temp, hasAssignedTemp
                         ? factory.createArrayConcatCall(temp, [factory.createArrayLiteralExpression(expressions, multiLine)])
-                        : factory.createArrayLiteralExpression(leadingElement ? __spreadArray([leadingElement], expressions) : expressions, multiLine));
+                        : factory.createArrayLiteralExpression(leadingElement ? __spreadArray([leadingElement], expressions, true) : expressions, multiLine));
                     leadingElement = undefined;
                     expressions = [];
                 }
@@ -96294,35 +98353,35 @@
         }
         function transformAndEmitStatementWorker(node) {
             switch (node.kind) {
-                case 231 /* Block */:
+                case 233 /* Block */:
                     return transformAndEmitBlock(node);
-                case 234 /* ExpressionStatement */:
+                case 236 /* ExpressionStatement */:
                     return transformAndEmitExpressionStatement(node);
-                case 235 /* IfStatement */:
+                case 237 /* IfStatement */:
                     return transformAndEmitIfStatement(node);
-                case 236 /* DoStatement */:
+                case 238 /* DoStatement */:
                     return transformAndEmitDoStatement(node);
-                case 237 /* WhileStatement */:
+                case 239 /* WhileStatement */:
                     return transformAndEmitWhileStatement(node);
-                case 238 /* ForStatement */:
+                case 240 /* ForStatement */:
                     return transformAndEmitForStatement(node);
-                case 239 /* ForInStatement */:
+                case 241 /* ForInStatement */:
                     return transformAndEmitForInStatement(node);
-                case 241 /* ContinueStatement */:
+                case 243 /* ContinueStatement */:
                     return transformAndEmitContinueStatement(node);
-                case 242 /* BreakStatement */:
+                case 244 /* BreakStatement */:
                     return transformAndEmitBreakStatement(node);
-                case 243 /* ReturnStatement */:
+                case 245 /* ReturnStatement */:
                     return transformAndEmitReturnStatement(node);
-                case 244 /* WithStatement */:
+                case 246 /* WithStatement */:
                     return transformAndEmitWithStatement(node);
-                case 245 /* SwitchStatement */:
+                case 247 /* SwitchStatement */:
                     return transformAndEmitSwitchStatement(node);
-                case 246 /* LabeledStatement */:
+                case 248 /* LabeledStatement */:
                     return transformAndEmitLabeledStatement(node);
-                case 247 /* ThrowStatement */:
+                case 249 /* ThrowStatement */:
                     return transformAndEmitThrowStatement(node);
-                case 248 /* TryStatement */:
+                case 250 /* TryStatement */:
                     return transformAndEmitTryStatement(node);
                 default:
                     return emitStatement(ts.visitNode(node, visitor, ts.isStatement));
@@ -96752,7 +98811,7 @@
                 for (var i = 0; i < numClauses; i++) {
                     var clause = caseBlock.clauses[i];
                     clauseLabels.push(defineLabel());
-                    if (clause.kind === 286 /* DefaultClause */ && defaultClauseIndex === -1) {
+                    if (clause.kind === 288 /* DefaultClause */ && defaultClauseIndex === -1) {
                         defaultClauseIndex = i;
                     }
                 }
@@ -96765,7 +98824,7 @@
                     var defaultClausesSkipped = 0;
                     for (var i = clausesWritten; i < numClauses; i++) {
                         var clause = caseBlock.clauses[i];
-                        if (clause.kind === 285 /* CaseClause */) {
+                        if (clause.kind === 287 /* CaseClause */) {
                             if (containsYield(clause.expression) && pendingClauses.length > 0) {
                                 break;
                             }
@@ -97079,7 +99138,7 @@
                 if (!renamedCatchVariables) {
                     renamedCatchVariables = new ts.Map();
                     renamedCatchVariableDeclarations = [];
-                    context.enableSubstitution(78 /* Identifier */);
+                    context.enableSubstitution(79 /* Identifier */);
                 }
                 renamedCatchVariables.set(text, true);
                 renamedCatchVariableDeclarations[ts.getOriginalNodeId(variable)] = name;
@@ -97925,17 +99984,17 @@
         var previousOnEmitNode = context.onEmitNode;
         context.onSubstituteNode = onSubstituteNode;
         context.onEmitNode = onEmitNode;
-        context.enableSubstitution(78 /* Identifier */); // Substitutes expression identifiers with imported/exported symbols.
-        context.enableSubstitution(217 /* BinaryExpression */); // Substitutes assignments to exported symbols.
-        context.enableSubstitution(215 /* PrefixUnaryExpression */); // Substitutes updates to exported symbols.
-        context.enableSubstitution(216 /* PostfixUnaryExpression */); // Substitutes updates to exported symbols.
-        context.enableSubstitution(290 /* ShorthandPropertyAssignment */); // Substitutes shorthand property assignments for imported/exported symbols.
-        context.enableEmitNotification(298 /* SourceFile */); // Restore state when substituting nodes in a file.
+        context.enableSubstitution(206 /* CallExpression */); // Substitute calls to imported/exported symbols to avoid incorrect `this`.
+        context.enableSubstitution(208 /* TaggedTemplateExpression */); // Substitute calls to imported/exported symbols to avoid incorrect `this`.
+        context.enableSubstitution(79 /* Identifier */); // Substitutes expression identifiers with imported/exported symbols.
+        context.enableSubstitution(219 /* BinaryExpression */); // Substitutes assignments to exported symbols.
+        context.enableSubstitution(292 /* ShorthandPropertyAssignment */); // Substitutes shorthand property assignments for imported/exported symbols.
+        context.enableEmitNotification(300 /* SourceFile */); // Restore state when substituting nodes in a file.
         var moduleInfoMap = []; // The ExternalModuleInfo for each file.
         var deferredExports = []; // Exports to defer until an EndOfDeclarationMarker is found.
         var currentSourceFile; // The current file.
         var currentModuleInfo; // The ExternalModuleInfo for the current file.
-        var noSubstitution; // Set of nodes for which substitution rules should be ignored.
+        var noSubstitution = []; // Set of nodes for which substitution rules should be ignored.
         var needUMDDynamicImportHelper;
         return ts.chainBundle(context, transformSourceFile);
         /**
@@ -97976,7 +100035,7 @@
             startLexicalEnvironment();
             var statements = [];
             var ensureUseStrict = ts.getStrictOptionValue(compilerOptions, "alwaysStrict") || (!compilerOptions.noImplicitUseStrict && ts.isExternalModule(currentSourceFile));
-            var statementOffset = factory.copyPrologue(node.statements, statements, ensureUseStrict && !ts.isJsonSourceFile(node), sourceElementVisitor);
+            var statementOffset = factory.copyPrologue(node.statements, statements, ensureUseStrict && !ts.isJsonSourceFile(node), topLevelVisitor);
             if (shouldEmitUnderscoreUnderscoreESModule()) {
                 ts.append(statements, createUnderscoreUnderscoreESModule());
             }
@@ -97986,8 +100045,8 @@
                     ts.append(statements, factory.createExpressionStatement(ts.reduceLeft(currentModuleInfo.exportedNames.slice(i, i + chunkSize), function (prev, nextId) { return factory.createAssignment(factory.createPropertyAccessExpression(factory.createIdentifier("exports"), factory.createIdentifier(ts.idText(nextId))), prev); }, factory.createVoidZero())));
                 }
             }
-            ts.append(statements, ts.visitNode(currentModuleInfo.externalHelpersImportDeclaration, sourceElementVisitor, ts.isStatement));
-            ts.addRange(statements, ts.visitNodes(node.statements, sourceElementVisitor, ts.isStatement, statementOffset));
+            ts.append(statements, ts.visitNode(currentModuleInfo.externalHelpersImportDeclaration, topLevelVisitor, ts.isStatement));
+            ts.addRange(statements, ts.visitNodes(node.statements, topLevelVisitor, ts.isStatement, statementOffset));
             addExportEqualsIfNeeded(statements, /*emitAsReturn*/ false);
             ts.insertStatementsAfterStandardPrologue(statements, endLexicalEnvironment());
             var updated = factory.updateSourceFile(node, ts.setTextRange(factory.createNodeArray(statements), node.statements));
@@ -98029,14 +100088,14 @@
             //     define(mofactory.updateSourceFile", "module2"], function ...
             var updated = factory.updateSourceFile(node, ts.setTextRange(factory.createNodeArray([
                 factory.createExpressionStatement(factory.createCallExpression(define, 
-                /*typeArguments*/ undefined, __spreadArray(__spreadArray([], (moduleName ? [moduleName] : [])), [
+                /*typeArguments*/ undefined, __spreadArray(__spreadArray([], (moduleName ? [moduleName] : []), true), [
                     // Add the dependency array argument:
                     //
                     //     ["require", "exports", module1", "module2", ...]
                     factory.createArrayLiteralExpression(jsonSourceFile ? ts.emptyArray : __spreadArray(__spreadArray([
                         factory.createStringLiteral("require"),
                         factory.createStringLiteral("exports")
-                    ], aliasedModuleNames), unaliasedModuleNames)),
+                    ], aliasedModuleNames, true), unaliasedModuleNames, true)),
                     // Add the module body function argument:
                     //
                     //     function (require, exports, module1, module2) ...
@@ -98049,9 +100108,9 @@
                         /*typeParameters*/ undefined, __spreadArray([
                             factory.createParameterDeclaration(/*decorators*/ undefined, /*modifiers*/ undefined, /*dotDotDotToken*/ undefined, "require"),
                             factory.createParameterDeclaration(/*decorators*/ undefined, /*modifiers*/ undefined, /*dotDotDotToken*/ undefined, "exports")
-                        ], importAliasNames), 
+                        ], importAliasNames, true), 
                         /*type*/ undefined, transformAsynchronousModuleBody(node))
-                ])))
+                ], false)))
             ]), 
             /*location*/ node.statements));
             ts.addEmitHelpers(updated, context.readEmitHelpers());
@@ -98085,13 +100144,13 @@
                     ts.setEmitFlags(factory.createIfStatement(factory.createStrictInequality(factory.createIdentifier("v"), factory.createIdentifier("undefined")), factory.createExpressionStatement(factory.createAssignment(factory.createPropertyAccessExpression(factory.createIdentifier("module"), "exports"), factory.createIdentifier("v")))), 1 /* SingleLine */)
                 ]), factory.createIfStatement(factory.createLogicalAnd(factory.createTypeCheck(factory.createIdentifier("define"), "function"), factory.createPropertyAccessExpression(factory.createIdentifier("define"), "amd")), factory.createBlock([
                     factory.createExpressionStatement(factory.createCallExpression(factory.createIdentifier("define"), 
-                    /*typeArguments*/ undefined, __spreadArray(__spreadArray([], (moduleName ? [moduleName] : [])), [
+                    /*typeArguments*/ undefined, __spreadArray(__spreadArray([], (moduleName ? [moduleName] : []), true), [
                         factory.createArrayLiteralExpression(__spreadArray(__spreadArray([
                             factory.createStringLiteral("require"),
                             factory.createStringLiteral("exports")
-                        ], aliasedModuleNames), unaliasedModuleNames)),
+                        ], aliasedModuleNames, true), unaliasedModuleNames, true)),
                         factory.createIdentifier("factory")
-                    ])))
+                    ], false)))
                 ])))
             ], 
             /*multiLine*/ true), 
@@ -98120,7 +100179,7 @@
                     /*typeParameters*/ undefined, __spreadArray([
                         factory.createParameterDeclaration(/*decorators*/ undefined, /*modifiers*/ undefined, /*dotDotDotToken*/ undefined, "require"),
                         factory.createParameterDeclaration(/*decorators*/ undefined, /*modifiers*/ undefined, /*dotDotDotToken*/ undefined, "exports")
-                    ], importAliasNames), 
+                    ], importAliasNames, true), 
                     /*type*/ undefined, transformAsynchronousModuleBody(node))
                 ]))
             ]), 
@@ -98197,7 +100256,7 @@
         function transformAsynchronousModuleBody(node) {
             startLexicalEnvironment();
             var statements = [];
-            var statementOffset = factory.copyPrologue(node.statements, statements, /*ensureUseStrict*/ !compilerOptions.noImplicitUseStrict, sourceElementVisitor);
+            var statementOffset = factory.copyPrologue(node.statements, statements, /*ensureUseStrict*/ !compilerOptions.noImplicitUseStrict, topLevelVisitor);
             if (shouldEmitUnderscoreUnderscoreESModule()) {
                 ts.append(statements, createUnderscoreUnderscoreESModule());
             }
@@ -98205,11 +100264,11 @@
                 ts.append(statements, factory.createExpressionStatement(ts.reduceLeft(currentModuleInfo.exportedNames, function (prev, nextId) { return factory.createAssignment(factory.createPropertyAccessExpression(factory.createIdentifier("exports"), factory.createIdentifier(ts.idText(nextId))), prev); }, factory.createVoidZero())));
             }
             // Visit each statement of the module body.
-            ts.append(statements, ts.visitNode(currentModuleInfo.externalHelpersImportDeclaration, sourceElementVisitor, ts.isStatement));
+            ts.append(statements, ts.visitNode(currentModuleInfo.externalHelpersImportDeclaration, topLevelVisitor, ts.isStatement));
             if (moduleKind === ts.ModuleKind.AMD) {
                 ts.addRange(statements, ts.mapDefined(currentModuleInfo.externalImports, getAMDImportExpressionForImport));
             }
-            ts.addRange(statements, ts.visitNodes(node.statements, sourceElementVisitor, ts.isStatement, statementOffset));
+            ts.addRange(statements, ts.visitNodes(node.statements, topLevelVisitor, ts.isStatement, statementOffset));
             // Append the 'export =' statement if provided.
             addExportEqualsIfNeeded(statements, /*emitAsReturn*/ true);
             // End the lexical environment for the module body
@@ -98231,7 +100290,7 @@
          */
         function addExportEqualsIfNeeded(statements, emitAsReturn) {
             if (currentModuleInfo.exportEquals) {
-                var expressionResult = ts.visitNode(currentModuleInfo.exportEquals.expression, moduleExpressionElementVisitor);
+                var expressionResult = ts.visitNode(currentModuleInfo.exportEquals.expression, visitor);
                 if (expressionResult) {
                     if (emitAsReturn) {
                         var statement = factory.createReturnStatement(expressionResult);
@@ -98256,69 +100315,90 @@
          *
          * @param node The node to visit.
          */
-        function sourceElementVisitor(node) {
+        function topLevelVisitor(node) {
             switch (node.kind) {
-                case 262 /* ImportDeclaration */:
+                case 264 /* ImportDeclaration */:
                     return visitImportDeclaration(node);
-                case 261 /* ImportEqualsDeclaration */:
+                case 263 /* ImportEqualsDeclaration */:
                     return visitImportEqualsDeclaration(node);
-                case 268 /* ExportDeclaration */:
+                case 270 /* ExportDeclaration */:
                     return visitExportDeclaration(node);
-                case 267 /* ExportAssignment */:
+                case 269 /* ExportAssignment */:
                     return visitExportAssignment(node);
-                case 233 /* VariableStatement */:
+                case 235 /* VariableStatement */:
                     return visitVariableStatement(node);
-                case 252 /* FunctionDeclaration */:
+                case 254 /* FunctionDeclaration */:
                     return visitFunctionDeclaration(node);
-                case 253 /* ClassDeclaration */:
+                case 255 /* ClassDeclaration */:
                     return visitClassDeclaration(node);
-                case 342 /* MergeDeclarationMarker */:
+                case 347 /* MergeDeclarationMarker */:
                     return visitMergeDeclarationMarker(node);
-                case 343 /* EndOfDeclarationMarker */:
+                case 348 /* EndOfDeclarationMarker */:
                     return visitEndOfDeclarationMarker(node);
                 default:
-                    return ts.visitEachChild(node, moduleExpressionElementVisitor, context);
+                    return visitor(node);
             }
         }
-        function moduleExpressionElementVisitor(node) {
-            // This visitor does not need to descend into the tree if there is no dynamic import or destructuring assignment,
+        function visitorWorker(node, valueIsDiscarded) {
+            // This visitor does not need to descend into the tree if there is no dynamic import, destructuring assignment, or update expression
             // as export/import statements are only transformed at the top level of a file.
-            if (!(node.transformFlags & 4194304 /* ContainsDynamicImport */) && !(node.transformFlags & 2048 /* ContainsDestructuringAssignment */)) {
+            if (!(node.transformFlags & (4194304 /* ContainsDynamicImport */ | 2048 /* ContainsDestructuringAssignment */ | 67108864 /* ContainsUpdateExpressionForIdentifier */))) {
                 return node;
             }
-            if (ts.isImportCall(node)) {
-                return visitImportCallExpression(node);
+            switch (node.kind) {
+                case 240 /* ForStatement */:
+                    return visitForStatement(node);
+                case 236 /* ExpressionStatement */:
+                    return visitExpressionStatement(node);
+                case 210 /* ParenthesizedExpression */:
+                    return visitParenthesizedExpression(node, valueIsDiscarded);
+                case 345 /* PartiallyEmittedExpression */:
+                    return visitPartiallyEmittedExpression(node, valueIsDiscarded);
+                case 206 /* CallExpression */:
+                    if (ts.isImportCall(node)) {
+                        return visitImportCallExpression(node);
+                    }
+                    break;
+                case 219 /* BinaryExpression */:
+                    if (ts.isDestructuringAssignment(node)) {
+                        return visitDestructuringAssignment(node, valueIsDiscarded);
+                    }
+                    break;
+                case 217 /* PrefixUnaryExpression */:
+                case 218 /* PostfixUnaryExpression */:
+                    return visitPreOrPostfixUnaryExpression(node, valueIsDiscarded);
             }
-            else if (ts.isDestructuringAssignment(node)) {
-                return visitDestructuringAssignment(node);
-            }
-            else {
-                return ts.visitEachChild(node, moduleExpressionElementVisitor, context);
-            }
+            return ts.visitEachChild(node, visitor, context);
+        }
+        function visitor(node) {
+            return visitorWorker(node, /*valueIsDiscarded*/ false);
+        }
+        function discardedValueVisitor(node) {
+            return visitorWorker(node, /*valueIsDiscarded*/ true);
         }
         function destructuringNeedsFlattening(node) {
             if (ts.isObjectLiteralExpression(node)) {
                 for (var _i = 0, _a = node.properties; _i < _a.length; _i++) {
                     var elem = _a[_i];
                     switch (elem.kind) {
-                        case 289 /* PropertyAssignment */:
+                        case 291 /* PropertyAssignment */:
                             if (destructuringNeedsFlattening(elem.initializer)) {
                                 return true;
                             }
                             break;
-                        case 290 /* ShorthandPropertyAssignment */:
+                        case 292 /* ShorthandPropertyAssignment */:
                             if (destructuringNeedsFlattening(elem.name)) {
                                 return true;
                             }
                             break;
-                        case 291 /* SpreadAssignment */:
+                        case 293 /* SpreadAssignment */:
                             if (destructuringNeedsFlattening(elem.expression)) {
                                 return true;
                             }
                             break;
-                        case 166 /* MethodDeclaration */:
-                        case 168 /* GetAccessor */:
-                        case 169 /* SetAccessor */:
+                        case 167 /* MethodDeclaration */:
+                        case 170 /* GetAccessor */:
+                        case 171 /* SetAccessor */:
                             return false;
                         default: ts.Debug.assertNever(elem, "Unhandled object member kind");
                     }
@@ -98342,15 +100422,75 @@
             }
             return false;
         }
-        function visitDestructuringAssignment(node) {
+        function visitDestructuringAssignment(node, valueIsDiscarded) {
             if (destructuringNeedsFlattening(node.left)) {
-                return ts.flattenDestructuringAssignment(node, moduleExpressionElementVisitor, context, 0 /* All */, /*needsValue*/ false, createAllExportExpressions);
+                return ts.flattenDestructuringAssignment(node, visitor, context, 0 /* All */, !valueIsDiscarded, createAllExportExpressions);
             }
-            return ts.visitEachChild(node, moduleExpressionElementVisitor, context);
+            return ts.visitEachChild(node, visitor, context);
+        }
+        function visitForStatement(node) {
+            return factory.updateForStatement(node, ts.visitNode(node.initializer, discardedValueVisitor, ts.isForInitializer), ts.visitNode(node.condition, visitor, ts.isExpression), ts.visitNode(node.incrementor, discardedValueVisitor, ts.isExpression), ts.visitIterationBody(node.statement, visitor, context));
+        }
+        function visitExpressionStatement(node) {
+            return factory.updateExpressionStatement(node, ts.visitNode(node.expression, discardedValueVisitor, ts.isExpression));
+        }
+        function visitParenthesizedExpression(node, valueIsDiscarded) {
+            return factory.updateParenthesizedExpression(node, ts.visitNode(node.expression, valueIsDiscarded ? discardedValueVisitor : visitor, ts.isExpression));
+        }
+        function visitPartiallyEmittedExpression(node, valueIsDiscarded) {
+            return factory.updatePartiallyEmittedExpression(node, ts.visitNode(node.expression, valueIsDiscarded ? discardedValueVisitor : visitor, ts.isExpression));
+        }
+        function visitPreOrPostfixUnaryExpression(node, valueIsDiscarded) {
+            // When we see a prefix or postfix increment expression whose operand is an exported
+            // symbol, we should ensure all exports of that symbol are updated with the correct
+            // value.
+            //
+            // - We do not transform generated identifiers for any reason.
+            // - We do not transform identifiers tagged with the LocalName flag.
+            // - We do not transform identifiers that were originally the name of an enum or
+            //   namespace due to how they are transformed in TypeScript.
+            // - We only transform identifiers that are exported at the top level.
+            if ((node.operator === 45 /* PlusPlusToken */ || node.operator === 46 /* MinusMinusToken */)
+                && ts.isIdentifier(node.operand)
+                && !ts.isGeneratedIdentifier(node.operand)
+                && !ts.isLocalName(node.operand)
+                && !ts.isDeclarationNameOfEnumOrNamespace(node.operand)) {
+                var exportedNames = getExports(node.operand);
+                if (exportedNames) {
+                    var temp = void 0;
+                    var expression = ts.visitNode(node.operand, visitor, ts.isExpression);
+                    if (ts.isPrefixUnaryExpression(node)) {
+                        expression = factory.updatePrefixUnaryExpression(node, expression);
+                    }
+                    else {
+                        expression = factory.updatePostfixUnaryExpression(node, expression);
+                        if (!valueIsDiscarded) {
+                            temp = factory.createTempVariable(hoistVariableDeclaration);
+                            expression = factory.createAssignment(temp, expression);
+                            ts.setTextRange(expression, node);
+                        }
+                        expression = factory.createComma(expression, factory.cloneNode(node.operand));
+                        ts.setTextRange(expression, node);
+                    }
+                    for (var _i = 0, exportedNames_1 = exportedNames; _i < exportedNames_1.length; _i++) {
+                        var exportName = exportedNames_1[_i];
+                        noSubstitution[ts.getNodeId(expression)] = true;
+                        expression = createExportExpression(exportName, expression);
+                        ts.setTextRange(expression, node);
+                    }
+                    if (temp) {
+                        noSubstitution[ts.getNodeId(expression)] = true;
+                        expression = factory.createComma(expression, temp);
+                        ts.setTextRange(expression, node);
+                    }
+                    return expression;
+                }
+            }
+            return ts.visitEachChild(node, visitor, context);
         }
         function visitImportCallExpression(node) {
             var externalModuleName = ts.getExternalModuleNameLiteral(factory, node, currentSourceFile, host, resolver, compilerOptions);
-            var firstArgument = ts.visitNode(ts.firstOrUndefined(node.arguments), moduleExpressionElementVisitor);
+            var firstArgument = ts.visitNode(ts.firstOrUndefined(node.arguments), visitor);
             // Only use the external module name if it differs from the first argument. This allows us to preserve the quote style of the argument on output.
             var argument = externalModuleName && (!firstArgument || !ts.isStringLiteral(firstArgument) || firstArgument.text !== externalModuleName.text) ? externalModuleName : firstArgument;
             var containsLexicalThis = !!(node.transformFlags & 8192 /* ContainsLexicalThis */);
@@ -98682,10 +100822,10 @@
             if (original && hasAssociatedEndOfDeclarationMarker(original)) {
                 // Defer exports until we encounter an EndOfDeclarationMarker node
                 var id = ts.getOriginalNodeId(node);
-                deferredExports[id] = appendExportStatement(deferredExports[id], factory.createIdentifier("default"), ts.visitNode(node.expression, moduleExpressionElementVisitor), /*location*/ node, /*allowComments*/ true);
+                deferredExports[id] = appendExportStatement(deferredExports[id], factory.createIdentifier("default"), ts.visitNode(node.expression, visitor), /*location*/ node, /*allowComments*/ true);
             }
             else {
-                statements = appendExportStatement(statements, factory.createIdentifier("default"), ts.visitNode(node.expression, moduleExpressionElementVisitor), /*location*/ node, /*allowComments*/ true);
+                statements = appendExportStatement(statements, factory.createIdentifier("default"), ts.visitNode(node.expression, visitor), /*location*/ node, /*allowComments*/ true);
             }
             return ts.singleOrMany(statements);
         }
@@ -98699,13 +100839,13 @@
             if (ts.hasSyntacticModifier(node, 1 /* Export */)) {
                 statements = ts.append(statements, ts.setOriginalNode(ts.setTextRange(factory.createFunctionDeclaration(
                 /*decorators*/ undefined, ts.visitNodes(node.modifiers, modifierVisitor, ts.isModifier), node.asteriskToken, factory.getDeclarationName(node, /*allowComments*/ true, /*allowSourceMaps*/ true), 
-                /*typeParameters*/ undefined, ts.visitNodes(node.parameters, moduleExpressionElementVisitor), 
-                /*type*/ undefined, ts.visitEachChild(node.body, moduleExpressionElementVisitor, context)), 
+                /*typeParameters*/ undefined, ts.visitNodes(node.parameters, visitor), 
+                /*type*/ undefined, ts.visitEachChild(node.body, visitor, context)), 
                 /*location*/ node), 
                 /*original*/ node));
             }
             else {
-                statements = ts.append(statements, ts.visitEachChild(node, moduleExpressionElementVisitor, context));
+                statements = ts.append(statements, ts.visitEachChild(node, visitor, context));
             }
             if (hasAssociatedEndOfDeclarationMarker(node)) {
                 // Defer exports until we encounter an EndOfDeclarationMarker node
@@ -98727,10 +100867,10 @@
             if (ts.hasSyntacticModifier(node, 1 /* Export */)) {
                 statements = ts.append(statements, ts.setOriginalNode(ts.setTextRange(factory.createClassDeclaration(
                 /*decorators*/ undefined, ts.visitNodes(node.modifiers, modifierVisitor, ts.isModifier), factory.getDeclarationName(node, /*allowComments*/ true, /*allowSourceMaps*/ true), 
-                /*typeParameters*/ undefined, ts.visitNodes(node.heritageClauses, moduleExpressionElementVisitor), ts.visitNodes(node.members, moduleExpressionElementVisitor)), node), node));
+                /*typeParameters*/ undefined, ts.visitNodes(node.heritageClauses, visitor), ts.visitNodes(node.members, visitor)), node), node));
             }
             else {
-                statements = ts.append(statements, ts.visitEachChild(node, moduleExpressionElementVisitor, context));
+                statements = ts.append(statements, ts.visitEachChild(node, visitor, context));
             }
             if (hasAssociatedEndOfDeclarationMarker(node)) {
                 // Defer exports until we encounter an EndOfDeclarationMarker node
@@ -98767,7 +100907,7 @@
                         if (!ts.isBindingPattern(variable.name) && (ts.isArrowFunction(variable.initializer) || ts.isFunctionExpression(variable.initializer) || ts.isClassExpression(variable.initializer))) {
                             var expression = factory.createAssignment(ts.setTextRange(factory.createPropertyAccessExpression(factory.createIdentifier("exports"), variable.name), 
                             /*location*/ variable.name), factory.createIdentifier(ts.getTextOfIdentifierOrLiteral(variable.name)));
-                            var updatedVariable = factory.createVariableDeclaration(variable.name, variable.exclamationToken, variable.type, ts.visitNode(variable.initializer, moduleExpressionElementVisitor));
+                            var updatedVariable = factory.createVariableDeclaration(variable.name, variable.exclamationToken, variable.type, ts.visitNode(variable.initializer, visitor));
                             variables = ts.append(variables, updatedVariable);
                             expressions = ts.append(expressions, expression);
                             removeCommentsOnExpressions = true;
@@ -98789,7 +100929,7 @@
                 }
             }
             else {
-                statements = ts.append(statements, ts.visitEachChild(node, moduleExpressionElementVisitor, context));
+                statements = ts.append(statements, ts.visitEachChild(node, visitor, context));
             }
             if (hasAssociatedEndOfDeclarationMarker(node)) {
                 // Defer exports until we encounter an EndOfDeclarationMarker node
@@ -98806,8 +100946,8 @@
             if (exportedNames) {
                 // For each additional export of the declaration, apply an export assignment.
                 var expression = ts.isExportName(name) ? value : factory.createAssignment(name, value);
-                for (var _i = 0, exportedNames_1 = exportedNames; _i < exportedNames_1.length; _i++) {
-                    var exportName = exportedNames_1[_i];
+                for (var _i = 0, exportedNames_2 = exportedNames; _i < exportedNames_2.length; _i++) {
+                    var exportName = exportedNames_2[_i];
                     // Mark the node to prevent triggering substitution.
                     ts.setEmitFlags(expression, 4 /* NoSubstitution */);
                     expression = createExportExpression(exportName, expression, /*location*/ location);
@@ -98823,13 +100963,13 @@
          */
         function transformInitializedVariable(node) {
             if (ts.isBindingPattern(node.name)) {
-                return ts.flattenDestructuringAssignment(ts.visitNode(node, moduleExpressionElementVisitor), 
+                return ts.flattenDestructuringAssignment(ts.visitNode(node, visitor), 
                 /*visitor*/ undefined, context, 0 /* All */, 
                 /*needsValue*/ false, createAllExportExpressions);
             }
             else {
                 return factory.createAssignment(ts.setTextRange(factory.createPropertyAccessExpression(factory.createIdentifier("exports"), node.name), 
-                /*location*/ node.name), node.initializer ? ts.visitNode(node.initializer, moduleExpressionElementVisitor) : factory.createVoidZero());
+                /*location*/ node.name), node.initializer ? ts.visitNode(node.initializer, visitor) : factory.createVoidZero());
             }
         }
         /**
@@ -98846,7 +100986,7 @@
             //
             // To balance the declaration, add the exports of the elided variable
             // statement.
-            if (hasAssociatedEndOfDeclarationMarker(node) && node.original.kind === 233 /* VariableStatement */) {
+            if (hasAssociatedEndOfDeclarationMarker(node) && node.original.kind === 235 /* VariableStatement */) {
                 var id = ts.getOriginalNodeId(node);
                 deferredExports[id] = appendExportsOfVariableStatement(deferredExports[id], node.original);
             }
@@ -98901,10 +101041,10 @@
             var namedBindings = importClause.namedBindings;
             if (namedBindings) {
                 switch (namedBindings.kind) {
-                    case 264 /* NamespaceImport */:
+                    case 266 /* NamespaceImport */:
                         statements = appendExportsOfDeclaration(statements, namedBindings);
                         break;
-                    case 265 /* NamedImports */:
+                    case 267 /* NamedImports */:
                         for (var _i = 0, _a = namedBindings.elements; _i < _a.length; _i++) {
                             var importBinding = _a[_i];
                             statements = appendExportsOfDeclaration(statements, importBinding, /* liveBinding */ true);
@@ -99100,8 +101240,8 @@
         function modifierVisitor(node) {
             // Elide module-specific modifiers.
             switch (node.kind) {
-                case 92 /* ExportKeyword */:
-                case 87 /* DefaultKeyword */:
+                case 93 /* ExportKeyword */:
+                case 88 /* DefaultKeyword */:
                     return undefined;
             }
             return node;
@@ -99117,14 +101257,12 @@
          * @param emit A callback used to emit the node in the printer.
          */
         function onEmitNode(hint, node, emitCallback) {
-            if (node.kind === 298 /* SourceFile */) {
+            if (node.kind === 300 /* SourceFile */) {
                 currentSourceFile = node;
                 currentModuleInfo = moduleInfoMap[ts.getOriginalNodeId(currentSourceFile)];
-                noSubstitution = [];
                 previousOnEmitNode(hint, node, emitCallback);
                 currentSourceFile = undefined;
                 currentModuleInfo = undefined;
-                noSubstitution = undefined;
             }
             else {
                 previousOnEmitNode(hint, node, emitCallback);
@@ -99179,13 +101317,36 @@
          */
         function substituteExpression(node) {
             switch (node.kind) {
-                case 78 /* Identifier */:
+                case 79 /* Identifier */:
                     return substituteExpressionIdentifier(node);
-                case 217 /* BinaryExpression */:
+                case 206 /* CallExpression */:
+                    return substituteCallExpression(node);
+                case 208 /* TaggedTemplateExpression */:
+                    return substituteTaggedTemplateExpression(node);
+                case 219 /* BinaryExpression */:
                     return substituteBinaryExpression(node);
-                case 216 /* PostfixUnaryExpression */:
-                case 215 /* PrefixUnaryExpression */:
-                    return substituteUnaryExpression(node);
+            }
+            return node;
+        }
+        function substituteCallExpression(node) {
+            if (ts.isIdentifier(node.expression)) {
+                var expression = substituteExpressionIdentifier(node.expression);
+                noSubstitution[ts.getNodeId(expression)] = true;
+                if (!ts.isIdentifier(expression)) {
+                    return ts.addEmitFlags(factory.updateCallExpression(node, expression, 
+                    /*typeArguments*/ undefined, node.arguments), 536870912 /* IndirectCall */);
+                }
+            }
+            return node;
+        }
+        function substituteTaggedTemplateExpression(node) {
+            if (ts.isIdentifier(node.tag)) {
+                var tag = substituteExpressionIdentifier(node.tag);
+                noSubstitution[ts.getNodeId(tag)] = true;
+                if (!ts.isIdentifier(tag)) {
+                    return ts.addEmitFlags(factory.updateTaggedTemplateExpression(node, tag, 
+                    /*typeArguments*/ undefined, node.template), 536870912 /* IndirectCall */);
+                }
             }
             return node;
         }
@@ -99206,7 +101367,7 @@
             }
             else if (!(ts.isGeneratedIdentifier(node) && !(node.autoGenerateFlags & 64 /* AllowNameSubstitution */)) && !ts.isLocalName(node)) {
                 var exportContainer = resolver.getReferencedExportContainer(node, ts.isExportName(node));
-                if (exportContainer && exportContainer.kind === 298 /* SourceFile */) {
+                if (exportContainer && exportContainer.kind === 300 /* SourceFile */) {
                     return ts.setTextRange(factory.createPropertyAccessExpression(factory.createIdentifier("exports"), factory.cloneNode(node)), 
                     /*location*/ node);
                 }
@@ -99248,54 +101409,11 @@
                 if (exportedNames) {
                     // For each additional export of the declaration, apply an export assignment.
                     var expression = node;
-                    for (var _i = 0, exportedNames_2 = exportedNames; _i < exportedNames_2.length; _i++) {
-                        var exportName = exportedNames_2[_i];
-                        // Mark the node to prevent triggering this rule again.
-                        noSubstitution[ts.getNodeId(expression)] = true;
-                        expression = createExportExpression(exportName, expression, /*location*/ node);
-                    }
-                    return expression;
-                }
-            }
-            return node;
-        }
-        /**
-         * Substitution for a UnaryExpression that may contain an imported or exported symbol.
-         *
-         * @param node The node to substitute.
-         */
-        function substituteUnaryExpression(node) {
-            // When we see a prefix or postfix increment expression whose operand is an exported
-            // symbol, we should ensure all exports of that symbol are updated with the correct
-            // value.
-            //
-            // - We do not substitute generated identifiers for any reason.
-            // - We do not substitute identifiers tagged with the LocalName flag.
-            // - We do not substitute identifiers that were originally the name of an enum or
-            //   namespace due to how they are transformed in TypeScript.
-            // - We only substitute identifiers that are exported at the top level.
-            if ((node.operator === 45 /* PlusPlusToken */ || node.operator === 46 /* MinusMinusToken */)
-                && ts.isIdentifier(node.operand)
-                && !ts.isGeneratedIdentifier(node.operand)
-                && !ts.isLocalName(node.operand)
-                && !ts.isDeclarationNameOfEnumOrNamespace(node.operand)) {
-                var exportedNames = getExports(node.operand);
-                if (exportedNames) {
-                    var expression = node.kind === 216 /* PostfixUnaryExpression */
-                        ? ts.setTextRange(factory.createPrefixUnaryExpression(node.operator, node.operand), 
-                        /*location*/ node)
-                        : node;
                     for (var _i = 0, exportedNames_3 = exportedNames; _i < exportedNames_3.length; _i++) {
                         var exportName = exportedNames_3[_i];
                         // Mark the node to prevent triggering this rule again.
                         noSubstitution[ts.getNodeId(expression)] = true;
-                        expression = createExportExpression(exportName, expression);
-                    }
-                    if (node.kind === 216 /* PostfixUnaryExpression */) {
-                        noSubstitution[ts.getNodeId(expression)] = true;
-                        expression = node.operator === 45 /* PlusPlusToken */
-                            ? factory.createSubtract(expression, factory.createNumericLiteral(1))
-                            : factory.createAdd(expression, factory.createNumericLiteral(1));
+                        expression = createExportExpression(exportName, expression, /*location*/ node);
                     }
                     return expression;
                 }
@@ -99338,13 +101456,11 @@
         var previousOnEmitNode = context.onEmitNode;
         context.onSubstituteNode = onSubstituteNode;
         context.onEmitNode = onEmitNode;
-        context.enableSubstitution(78 /* Identifier */); // Substitutes expression identifiers for imported symbols.
-        context.enableSubstitution(290 /* ShorthandPropertyAssignment */); // Substitutes expression identifiers for imported symbols
-        context.enableSubstitution(217 /* BinaryExpression */); // Substitutes assignments to exported symbols.
-        context.enableSubstitution(215 /* PrefixUnaryExpression */); // Substitutes updates to exported symbols.
-        context.enableSubstitution(216 /* PostfixUnaryExpression */); // Substitutes updates to exported symbols.
-        context.enableSubstitution(227 /* MetaProperty */); // Substitutes 'import.meta'
-        context.enableEmitNotification(298 /* SourceFile */); // Restore state when substituting nodes in a file.
+        context.enableSubstitution(79 /* Identifier */); // Substitutes expression identifiers for imported symbols.
+        context.enableSubstitution(292 /* ShorthandPropertyAssignment */); // Substitutes expression identifiers for imported symbols
+        context.enableSubstitution(219 /* BinaryExpression */); // Substitutes assignments to exported symbols.
+        context.enableSubstitution(229 /* MetaProperty */); // Substitutes 'import.meta'
+        context.enableEmitNotification(300 /* SourceFile */); // Restore state when substituting nodes in a file.
         var moduleInfoMap = []; // The ExternalModuleInfo for each file.
         var deferredExports = []; // Exports to defer until an EndOfDeclarationMarker is found.
         var exportFunctionsMap = []; // The export function associated with a source file.
@@ -99510,7 +101626,7 @@
             startLexicalEnvironment();
             // Add any prologue directives.
             var ensureUseStrict = ts.getStrictOptionValue(compilerOptions, "alwaysStrict") || (!compilerOptions.noImplicitUseStrict && ts.isExternalModule(currentSourceFile));
-            var statementOffset = factory.copyPrologue(node.statements, statements, ensureUseStrict, sourceElementVisitor);
+            var statementOffset = factory.copyPrologue(node.statements, statements, ensureUseStrict, topLevelVisitor);
             // var __moduleName = context_1 && context_1.id;
             statements.push(factory.createVariableStatement(
             /*modifiers*/ undefined, factory.createVariableDeclarationList([
@@ -99519,13 +101635,13 @@
                 /*type*/ undefined, factory.createLogicalAnd(contextObject, factory.createPropertyAccessExpression(contextObject, "id")))
             ])));
             // Visit the synthetic external helpers import declaration if present
-            ts.visitNode(moduleInfo.externalHelpersImportDeclaration, sourceElementVisitor, ts.isStatement);
+            ts.visitNode(moduleInfo.externalHelpersImportDeclaration, topLevelVisitor, ts.isStatement);
             // Visit the statements of the source file, emitting any transformations into
             // the `executeStatements` array. We do this *before* we fill the `setters` array
             // as we both emit transformations as well as aggregate some data used when creating
             // setters. This allows us to reduce the number of times we need to loop through the
             // statements of the source file.
-            var executeStatements = ts.visitNodes(node.statements, sourceElementVisitor, ts.isStatement, statementOffset);
+            var executeStatements = ts.visitNodes(node.statements, topLevelVisitor, ts.isStatement, statementOffset);
             // Emit early exports for function declarations.
             ts.addRange(statements, hoistedStatements);
             // We emit hoisted variables early to align roughly with our previous emit output.
@@ -99568,7 +101684,7 @@
                 var hasExportDeclarationWithExportClause = false;
                 for (var _i = 0, _a = moduleInfo.externalImports; _i < _a.length; _i++) {
                     var externalImport = _a[_i];
-                    if (externalImport.kind === 268 /* ExportDeclaration */ && externalImport.exportClause) {
+                    if (externalImport.kind === 270 /* ExportDeclaration */ && externalImport.exportClause) {
                         hasExportDeclarationWithExportClause = true;
                         break;
                     }
@@ -99658,19 +101774,19 @@
                     var entry = _b[_a];
                     var importVariableName = ts.getLocalNameForExternalImport(factory, entry, currentSourceFile); // TODO: GH#18217
                     switch (entry.kind) {
-                        case 262 /* ImportDeclaration */:
+                        case 264 /* ImportDeclaration */:
                             if (!entry.importClause) {
                                 // 'import "..."' case
                                 // module is imported only for side-effects, no emit required
                                 break;
                             }
                         // falls through
-                        case 261 /* ImportEqualsDeclaration */:
+                        case 263 /* ImportEqualsDeclaration */:
                             ts.Debug.assert(importVariableName !== undefined);
                             // save import into the local
                             statements.push(factory.createExpressionStatement(factory.createAssignment(importVariableName, parameterName)));
                             break;
-                        case 268 /* ExportDeclaration */:
+                        case 270 /* ExportDeclaration */:
                             ts.Debug.assert(importVariableName !== undefined);
                             if (entry.exportClause) {
                                 if (ts.isNamedExports(entry.exportClause)) {
@@ -99727,18 +101843,18 @@
          *
          * @param node The node to visit.
          */
-        function sourceElementVisitor(node) {
+        function topLevelVisitor(node) {
             switch (node.kind) {
-                case 262 /* ImportDeclaration */:
+                case 264 /* ImportDeclaration */:
                     return visitImportDeclaration(node);
-                case 261 /* ImportEqualsDeclaration */:
+                case 263 /* ImportEqualsDeclaration */:
                     return visitImportEqualsDeclaration(node);
-                case 268 /* ExportDeclaration */:
+                case 270 /* ExportDeclaration */:
                     return visitExportDeclaration(node);
-                case 267 /* ExportAssignment */:
+                case 269 /* ExportAssignment */:
                     return visitExportAssignment(node);
                 default:
-                    return nestedElementVisitor(node);
+                    return topLevelNestedVisitor(node);
             }
         }
         /**
@@ -99794,7 +101910,7 @@
                 // Elide `export=` as it is illegal in a SystemJS module.
                 return undefined;
             }
-            var expression = ts.visitNode(node.expression, destructuringAndImportCallVisitor, ts.isExpression);
+            var expression = ts.visitNode(node.expression, visitor, ts.isExpression);
             var original = node.original;
             if (original && hasAssociatedEndOfDeclarationMarker(original)) {
                 // Defer exports until we encounter an EndOfDeclarationMarker node
@@ -99813,11 +101929,11 @@
         function visitFunctionDeclaration(node) {
             if (ts.hasSyntacticModifier(node, 1 /* Export */)) {
                 hoistedStatements = ts.append(hoistedStatements, factory.updateFunctionDeclaration(node, node.decorators, ts.visitNodes(node.modifiers, modifierVisitor, ts.isModifier), node.asteriskToken, factory.getDeclarationName(node, /*allowComments*/ true, /*allowSourceMaps*/ true), 
-                /*typeParameters*/ undefined, ts.visitNodes(node.parameters, destructuringAndImportCallVisitor, ts.isParameterDeclaration), 
-                /*type*/ undefined, ts.visitNode(node.body, destructuringAndImportCallVisitor, ts.isBlock)));
+                /*typeParameters*/ undefined, ts.visitNodes(node.parameters, visitor, ts.isParameterDeclaration), 
+                /*type*/ undefined, ts.visitNode(node.body, visitor, ts.isBlock)));
             }
             else {
-                hoistedStatements = ts.append(hoistedStatements, ts.visitEachChild(node, destructuringAndImportCallVisitor, context));
+                hoistedStatements = ts.append(hoistedStatements, ts.visitEachChild(node, visitor, context));
             }
             if (hasAssociatedEndOfDeclarationMarker(node)) {
                 // Defer exports until we encounter an EndOfDeclarationMarker node
@@ -99840,9 +101956,9 @@
             var name = factory.getLocalName(node);
             hoistVariableDeclaration(name);
             // Rewrite the class declaration into an assignment of a class expression.
-            statements = ts.append(statements, ts.setTextRange(factory.createExpressionStatement(factory.createAssignment(name, ts.setTextRange(factory.createClassExpression(ts.visitNodes(node.decorators, destructuringAndImportCallVisitor, ts.isDecorator), 
+            statements = ts.append(statements, ts.setTextRange(factory.createExpressionStatement(factory.createAssignment(name, ts.setTextRange(factory.createClassExpression(ts.visitNodes(node.decorators, visitor, ts.isDecorator), 
             /*modifiers*/ undefined, node.name, 
-            /*typeParameters*/ undefined, ts.visitNodes(node.heritageClauses, destructuringAndImportCallVisitor, ts.isHeritageClause), ts.visitNodes(node.members, destructuringAndImportCallVisitor, ts.isClassElement)), node))), node));
+            /*typeParameters*/ undefined, ts.visitNodes(node.heritageClauses, visitor, ts.isHeritageClause), ts.visitNodes(node.members, visitor, ts.isClassElement)), node))), node));
             if (hasAssociatedEndOfDeclarationMarker(node)) {
                 // Defer exports until we encounter an EndOfDeclarationMarker node
                 var id = ts.getOriginalNodeId(node);
@@ -99861,7 +101977,7 @@
          */
         function visitVariableStatement(node) {
             if (!shouldHoistVariableDeclarationList(node.declarationList)) {
-                return ts.visitNode(node, destructuringAndImportCallVisitor, ts.isStatement);
+                return ts.visitNode(node, visitor, ts.isStatement);
             }
             var expressions;
             var isExportedDeclaration = ts.hasSyntacticModifier(node, 1 /* Export */);
@@ -99915,7 +102031,7 @@
         function shouldHoistVariableDeclarationList(node) {
             // hoist only non-block scoped declarations or block scoped declarations parented by source file
             return (ts.getEmitFlags(node) & 2097152 /* NoHoisting */) === 0
-                && (enclosingBlockScopedContainer.kind === 298 /* SourceFile */
+                && (enclosingBlockScopedContainer.kind === 300 /* SourceFile */
                     || (ts.getOriginalNode(node).flags & 3 /* BlockScoped */) === 0);
         }
         /**
@@ -99927,9 +102043,9 @@
         function transformInitializedVariable(node, isExportedDeclaration) {
             var createAssignment = isExportedDeclaration ? createExportedVariableAssignment : createNonExportedVariableAssignment;
             return ts.isBindingPattern(node.name)
-                ? ts.flattenDestructuringAssignment(node, destructuringAndImportCallVisitor, context, 0 /* All */, 
+                ? ts.flattenDestructuringAssignment(node, visitor, context, 0 /* All */, 
                 /*needsValue*/ false, createAssignment)
-                : node.initializer ? createAssignment(node.name, ts.visitNode(node.initializer, destructuringAndImportCallVisitor, ts.isExpression)) : node.name;
+                : node.initializer ? createAssignment(node.name, ts.visitNode(node.initializer, visitor, ts.isExpression)) : node.name;
         }
         /**
          * Creates an assignment expression for an exported variable declaration.
@@ -99979,7 +102095,7 @@
             //
             // To balance the declaration, we defer the exports of the elided variable
             // statement until we visit this declaration's `EndOfDeclarationMarker`.
-            if (hasAssociatedEndOfDeclarationMarker(node) && node.original.kind === 233 /* VariableStatement */) {
+            if (hasAssociatedEndOfDeclarationMarker(node) && node.original.kind === 235 /* VariableStatement */) {
                 var id = ts.getOriginalNodeId(node);
                 var isExportedDeclaration = ts.hasSyntacticModifier(node.original, 1 /* Export */);
                 deferredExports[id] = appendExportsOfVariableStatement(deferredExports[id], node.original, isExportedDeclaration);
@@ -100041,10 +102157,10 @@
             var namedBindings = importClause.namedBindings;
             if (namedBindings) {
                 switch (namedBindings.kind) {
-                    case 264 /* NamespaceImport */:
+                    case 266 /* NamespaceImport */:
                         statements = appendExportsOfDeclaration(statements, namedBindings);
                         break;
-                    case 265 /* NamedImports */:
+                    case 267 /* NamedImports */:
                         for (var _i = 0, _a = namedBindings.elements; _i < _a.length; _i++) {
                             var importBinding = _a[_i];
                             statements = appendExportsOfDeclaration(statements, importBinding);
@@ -100222,48 +102338,48 @@
          *
          * @param node The node to visit.
          */
-        function nestedElementVisitor(node) {
+        function topLevelNestedVisitor(node) {
             switch (node.kind) {
-                case 233 /* VariableStatement */:
+                case 235 /* VariableStatement */:
                     return visitVariableStatement(node);
-                case 252 /* FunctionDeclaration */:
+                case 254 /* FunctionDeclaration */:
                     return visitFunctionDeclaration(node);
-                case 253 /* ClassDeclaration */:
+                case 255 /* ClassDeclaration */:
                     return visitClassDeclaration(node);
-                case 238 /* ForStatement */:
-                    return visitForStatement(node);
-                case 239 /* ForInStatement */:
+                case 240 /* ForStatement */:
+                    return visitForStatement(node, /*isTopLevel*/ true);
+                case 241 /* ForInStatement */:
                     return visitForInStatement(node);
-                case 240 /* ForOfStatement */:
+                case 242 /* ForOfStatement */:
                     return visitForOfStatement(node);
-                case 236 /* DoStatement */:
+                case 238 /* DoStatement */:
                     return visitDoStatement(node);
-                case 237 /* WhileStatement */:
+                case 239 /* WhileStatement */:
                     return visitWhileStatement(node);
-                case 246 /* LabeledStatement */:
+                case 248 /* LabeledStatement */:
                     return visitLabeledStatement(node);
-                case 244 /* WithStatement */:
+                case 246 /* WithStatement */:
                     return visitWithStatement(node);
-                case 245 /* SwitchStatement */:
+                case 247 /* SwitchStatement */:
                     return visitSwitchStatement(node);
-                case 259 /* CaseBlock */:
+                case 261 /* CaseBlock */:
                     return visitCaseBlock(node);
-                case 285 /* CaseClause */:
+                case 287 /* CaseClause */:
                     return visitCaseClause(node);
-                case 286 /* DefaultClause */:
+                case 288 /* DefaultClause */:
                     return visitDefaultClause(node);
-                case 248 /* TryStatement */:
+                case 250 /* TryStatement */:
                     return visitTryStatement(node);
-                case 288 /* CatchClause */:
+                case 290 /* CatchClause */:
                     return visitCatchClause(node);
-                case 231 /* Block */:
+                case 233 /* Block */:
                     return visitBlock(node);
-                case 342 /* MergeDeclarationMarker */:
+                case 347 /* MergeDeclarationMarker */:
                     return visitMergeDeclarationMarker(node);
-                case 343 /* EndOfDeclarationMarker */:
+                case 348 /* EndOfDeclarationMarker */:
                     return visitEndOfDeclarationMarker(node);
                 default:
-                    return destructuringAndImportCallVisitor(node);
+                    return visitor(node);
             }
         }
         /**
@@ -100271,10 +102387,10 @@
          *
          * @param node The node to visit.
          */
-        function visitForStatement(node) {
+        function visitForStatement(node, isTopLevel) {
             var savedEnclosingBlockScopedContainer = enclosingBlockScopedContainer;
             enclosingBlockScopedContainer = node;
-            node = factory.updateForStatement(node, node.initializer && visitForInitializer(node.initializer), ts.visitNode(node.condition, destructuringAndImportCallVisitor, ts.isExpression), ts.visitNode(node.incrementor, destructuringAndImportCallVisitor, ts.isExpression), ts.visitIterationBody(node.statement, nestedElementVisitor, context));
+            node = factory.updateForStatement(node, ts.visitNode(node.initializer, isTopLevel ? visitForInitializer : discardedValueVisitor, ts.isForInitializer), ts.visitNode(node.condition, visitor, ts.isExpression), ts.visitNode(node.incrementor, discardedValueVisitor, ts.isExpression), ts.visitIterationBody(node.statement, isTopLevel ? topLevelNestedVisitor : visitor, context));
             enclosingBlockScopedContainer = savedEnclosingBlockScopedContainer;
             return node;
         }
@@ -100286,7 +102402,7 @@
         function visitForInStatement(node) {
             var savedEnclosingBlockScopedContainer = enclosingBlockScopedContainer;
             enclosingBlockScopedContainer = node;
-            node = factory.updateForInStatement(node, visitForInitializer(node.initializer), ts.visitNode(node.expression, destructuringAndImportCallVisitor, ts.isExpression), ts.visitIterationBody(node.statement, nestedElementVisitor, context));
+            node = factory.updateForInStatement(node, visitForInitializer(node.initializer), ts.visitNode(node.expression, visitor, ts.isExpression), ts.visitIterationBody(node.statement, topLevelNestedVisitor, context));
             enclosingBlockScopedContainer = savedEnclosingBlockScopedContainer;
             return node;
         }
@@ -100298,7 +102414,7 @@
         function visitForOfStatement(node) {
             var savedEnclosingBlockScopedContainer = enclosingBlockScopedContainer;
             enclosingBlockScopedContainer = node;
-            node = factory.updateForOfStatement(node, node.awaitModifier, visitForInitializer(node.initializer), ts.visitNode(node.expression, destructuringAndImportCallVisitor, ts.isExpression), ts.visitIterationBody(node.statement, nestedElementVisitor, context));
+            node = factory.updateForOfStatement(node, node.awaitModifier, visitForInitializer(node.initializer), ts.visitNode(node.expression, visitor, ts.isExpression), ts.visitIterationBody(node.statement, topLevelNestedVisitor, context));
             enclosingBlockScopedContainer = savedEnclosingBlockScopedContainer;
             return node;
         }
@@ -100330,7 +102446,7 @@
                 return expressions ? factory.inlineExpressions(expressions) : factory.createOmittedExpression();
             }
             else {
-                return ts.visitEachChild(node, nestedElementVisitor, context);
+                return ts.visitNode(node, discardedValueVisitor, ts.isExpression);
             }
         }
         /**
@@ -100339,7 +102455,7 @@
          * @param node The node to visit.
          */
         function visitDoStatement(node) {
-            return factory.updateDoStatement(node, ts.visitIterationBody(node.statement, nestedElementVisitor, context), ts.visitNode(node.expression, destructuringAndImportCallVisitor, ts.isExpression));
+            return factory.updateDoStatement(node, ts.visitIterationBody(node.statement, topLevelNestedVisitor, context), ts.visitNode(node.expression, visitor, ts.isExpression));
         }
         /**
          * Visits the body of a WhileStatement to hoist declarations.
@@ -100347,7 +102463,7 @@
          * @param node The node to visit.
          */
         function visitWhileStatement(node) {
-            return factory.updateWhileStatement(node, ts.visitNode(node.expression, destructuringAndImportCallVisitor, ts.isExpression), ts.visitIterationBody(node.statement, nestedElementVisitor, context));
+            return factory.updateWhileStatement(node, ts.visitNode(node.expression, visitor, ts.isExpression), ts.visitIterationBody(node.statement, topLevelNestedVisitor, context));
         }
         /**
          * Visits the body of a LabeledStatement to hoist declarations.
@@ -100355,7 +102471,7 @@
          * @param node The node to visit.
          */
         function visitLabeledStatement(node) {
-            return factory.updateLabeledStatement(node, node.label, ts.visitNode(node.statement, nestedElementVisitor, ts.isStatement, factory.liftToBlock));
+            return factory.updateLabeledStatement(node, node.label, ts.visitNode(node.statement, topLevelNestedVisitor, ts.isStatement, factory.liftToBlock));
         }
         /**
          * Visits the body of a WithStatement to hoist declarations.
@@ -100363,7 +102479,7 @@
          * @param node The node to visit.
          */
         function visitWithStatement(node) {
-            return factory.updateWithStatement(node, ts.visitNode(node.expression, destructuringAndImportCallVisitor, ts.isExpression), ts.visitNode(node.statement, nestedElementVisitor, ts.isStatement, factory.liftToBlock));
+            return factory.updateWithStatement(node, ts.visitNode(node.expression, visitor, ts.isExpression), ts.visitNode(node.statement, topLevelNestedVisitor, ts.isStatement, factory.liftToBlock));
         }
         /**
          * Visits the body of a SwitchStatement to hoist declarations.
@@ -100371,7 +102487,7 @@
          * @param node The node to visit.
          */
         function visitSwitchStatement(node) {
-            return factory.updateSwitchStatement(node, ts.visitNode(node.expression, destructuringAndImportCallVisitor, ts.isExpression), ts.visitNode(node.caseBlock, nestedElementVisitor, ts.isCaseBlock));
+            return factory.updateSwitchStatement(node, ts.visitNode(node.expression, visitor, ts.isExpression), ts.visitNode(node.caseBlock, topLevelNestedVisitor, ts.isCaseBlock));
         }
         /**
          * Visits the body of a CaseBlock to hoist declarations.
@@ -100381,7 +102497,7 @@
         function visitCaseBlock(node) {
             var savedEnclosingBlockScopedContainer = enclosingBlockScopedContainer;
             enclosingBlockScopedContainer = node;
-            node = factory.updateCaseBlock(node, ts.visitNodes(node.clauses, nestedElementVisitor, ts.isCaseOrDefaultClause));
+            node = factory.updateCaseBlock(node, ts.visitNodes(node.clauses, topLevelNestedVisitor, ts.isCaseOrDefaultClause));
             enclosingBlockScopedContainer = savedEnclosingBlockScopedContainer;
             return node;
         }
@@ -100391,7 +102507,7 @@
          * @param node The node to visit.
          */
         function visitCaseClause(node) {
-            return factory.updateCaseClause(node, ts.visitNode(node.expression, destructuringAndImportCallVisitor, ts.isExpression), ts.visitNodes(node.statements, nestedElementVisitor, ts.isStatement));
+            return factory.updateCaseClause(node, ts.visitNode(node.expression, visitor, ts.isExpression), ts.visitNodes(node.statements, topLevelNestedVisitor, ts.isStatement));
         }
         /**
          * Visits the body of a DefaultClause to hoist declarations.
@@ -100399,7 +102515,7 @@
          * @param node The node to visit.
          */
         function visitDefaultClause(node) {
-            return ts.visitEachChild(node, nestedElementVisitor, context);
+            return ts.visitEachChild(node, topLevelNestedVisitor, context);
         }
         /**
          * Visits the body of a TryStatement to hoist declarations.
@@ -100407,7 +102523,7 @@
          * @param node The node to visit.
          */
         function visitTryStatement(node) {
-            return ts.visitEachChild(node, nestedElementVisitor, context);
+            return ts.visitEachChild(node, topLevelNestedVisitor, context);
         }
         /**
          * Visits the body of a CatchClause to hoist declarations.
@@ -100417,7 +102533,7 @@
         function visitCatchClause(node) {
             var savedEnclosingBlockScopedContainer = enclosingBlockScopedContainer;
             enclosingBlockScopedContainer = node;
-            node = factory.updateCatchClause(node, node.variableDeclaration, ts.visitNode(node.block, nestedElementVisitor, ts.isBlock));
+            node = factory.updateCatchClause(node, node.variableDeclaration, ts.visitNode(node.block, topLevelNestedVisitor, ts.isBlock));
             enclosingBlockScopedContainer = savedEnclosingBlockScopedContainer;
             return node;
         }
@@ -100429,7 +102545,7 @@
         function visitBlock(node) {
             var savedEnclosingBlockScopedContainer = enclosingBlockScopedContainer;
             enclosingBlockScopedContainer = node;
-            node = ts.visitEachChild(node, nestedElementVisitor, context);
+            node = ts.visitEachChild(node, topLevelNestedVisitor, context);
             enclosingBlockScopedContainer = savedEnclosingBlockScopedContainer;
             return node;
         }
@@ -100441,19 +102557,54 @@
          *
          * @param node The node to visit.
          */
-        function destructuringAndImportCallVisitor(node) {
-            if (ts.isDestructuringAssignment(node)) {
-                return visitDestructuringAssignment(node);
-            }
-            else if (ts.isImportCall(node)) {
-                return visitImportCallExpression(node);
-            }
-            else if ((node.transformFlags & 2048 /* ContainsDestructuringAssignment */) || (node.transformFlags & 4194304 /* ContainsDynamicImport */)) {
-                return ts.visitEachChild(node, destructuringAndImportCallVisitor, context);
-            }
-            else {
+        function visitorWorker(node, valueIsDiscarded) {
+            if (!(node.transformFlags & (2048 /* ContainsDestructuringAssignment */ | 4194304 /* ContainsDynamicImport */ | 67108864 /* ContainsUpdateExpressionForIdentifier */))) {
                 return node;
             }
+            switch (node.kind) {
+                case 240 /* ForStatement */:
+                    return visitForStatement(node, /*isTopLevel*/ false);
+                case 236 /* ExpressionStatement */:
+                    return visitExpressionStatement(node);
+                case 210 /* ParenthesizedExpression */:
+                    return visitParenthesizedExpression(node, valueIsDiscarded);
+                case 345 /* PartiallyEmittedExpression */:
+                    return visitPartiallyEmittedExpression(node, valueIsDiscarded);
+                case 219 /* BinaryExpression */:
+                    if (ts.isDestructuringAssignment(node)) {
+                        return visitDestructuringAssignment(node, valueIsDiscarded);
+                    }
+                    break;
+                case 206 /* CallExpression */:
+                    if (ts.isImportCall(node)) {
+                        return visitImportCallExpression(node);
+                    }
+                    break;
+                case 217 /* PrefixUnaryExpression */:
+                case 218 /* PostfixUnaryExpression */:
+                    return visitPrefixOrPostfixUnaryExpression(node, valueIsDiscarded);
+            }
+            return ts.visitEachChild(node, visitor, context);
+        }
+        /**
+         * Visit nodes to flatten destructuring assignments to exported symbols.
+         *
+         * @param node The node to visit.
+         */
+        function visitor(node) {
+            return visitorWorker(node, /*valueIsDiscarded*/ false);
+        }
+        function discardedValueVisitor(node) {
+            return visitorWorker(node, /*valueIsDiscarded*/ true);
+        }
+        function visitExpressionStatement(node) {
+            return factory.updateExpressionStatement(node, ts.visitNode(node.expression, discardedValueVisitor, ts.isExpression));
+        }
+        function visitParenthesizedExpression(node, valueIsDiscarded) {
+            return factory.updateParenthesizedExpression(node, ts.visitNode(node.expression, valueIsDiscarded ? discardedValueVisitor : visitor, ts.isExpression));
+        }
+        function visitPartiallyEmittedExpression(node, valueIsDiscarded) {
+            return factory.updatePartiallyEmittedExpression(node, ts.visitNode(node.expression, valueIsDiscarded ? discardedValueVisitor : visitor, ts.isExpression));
         }
         function visitImportCallExpression(node) {
             // import("./blah")
@@ -100467,7 +102618,7 @@
             //     };
             // });
             var externalModuleName = ts.getExternalModuleNameLiteral(factory, node, currentSourceFile, host, resolver, compilerOptions);
-            var firstArgument = ts.visitNode(ts.firstOrUndefined(node.arguments), destructuringAndImportCallVisitor);
+            var firstArgument = ts.visitNode(ts.firstOrUndefined(node.arguments), visitor);
             // Only use the external module name if it differs from the first argument. This allows us to preserve the quote style of the argument on output.
             var argument = externalModuleName && (!firstArgument || !ts.isStringLiteral(firstArgument) || firstArgument.text !== externalModuleName.text) ? externalModuleName : firstArgument;
             return factory.createCallExpression(factory.createPropertyAccessExpression(contextObject, factory.createIdentifier("import")), 
@@ -100478,12 +102629,11 @@
          *
          * @param node The node to visit.
          */
-        function visitDestructuringAssignment(node) {
+        function visitDestructuringAssignment(node, valueIsDiscarded) {
             if (hasExportedReferenceInDestructuringTarget(node.left)) {
-                return ts.flattenDestructuringAssignment(node, destructuringAndImportCallVisitor, context, 0 /* All */, 
-                /*needsValue*/ true);
+                return ts.flattenDestructuringAssignment(node, visitor, context, 0 /* All */, !valueIsDiscarded);
             }
-            return ts.visitEachChild(node, destructuringAndImportCallVisitor, context);
+            return ts.visitEachChild(node, visitor, context);
         }
         /**
          * Determines whether the target of a destructuring assignment refers to an exported symbol.
@@ -100511,12 +102661,57 @@
             }
             else if (ts.isIdentifier(node)) {
                 var container = resolver.getReferencedExportContainer(node);
-                return container !== undefined && container.kind === 298 /* SourceFile */;
+                return container !== undefined && container.kind === 300 /* SourceFile */;
             }
             else {
                 return false;
             }
         }
+        function visitPrefixOrPostfixUnaryExpression(node, valueIsDiscarded) {
+            // When we see a prefix or postfix increment expression whose operand is an exported
+            // symbol, we should ensure all exports of that symbol are updated with the correct
+            // value.
+            //
+            // - We do not transform generated identifiers for any reason.
+            // - We do not transform identifiers tagged with the LocalName flag.
+            // - We do not transform identifiers that were originally the name of an enum or
+            //   namespace due to how they are transformed in TypeScript.
+            // - We only transform identifiers that are exported at the top level.
+            if ((node.operator === 45 /* PlusPlusToken */ || node.operator === 46 /* MinusMinusToken */)
+                && ts.isIdentifier(node.operand)
+                && !ts.isGeneratedIdentifier(node.operand)
+                && !ts.isLocalName(node.operand)
+                && !ts.isDeclarationNameOfEnumOrNamespace(node.operand)) {
+                var exportedNames = getExports(node.operand);
+                if (exportedNames) {
+                    var temp = void 0;
+                    var expression = ts.visitNode(node.operand, visitor, ts.isExpression);
+                    if (ts.isPrefixUnaryExpression(node)) {
+                        expression = factory.updatePrefixUnaryExpression(node, expression);
+                    }
+                    else {
+                        expression = factory.updatePostfixUnaryExpression(node, expression);
+                        if (!valueIsDiscarded) {
+                            temp = factory.createTempVariable(hoistVariableDeclaration);
+                            expression = factory.createAssignment(temp, expression);
+                            ts.setTextRange(expression, node);
+                        }
+                        expression = factory.createComma(expression, factory.cloneNode(node.operand));
+                        ts.setTextRange(expression, node);
+                    }
+                    for (var _i = 0, exportedNames_4 = exportedNames; _i < exportedNames_4.length; _i++) {
+                        var exportName = exportedNames_4[_i];
+                        expression = createExportExpression(exportName, preventSubstitution(expression));
+                    }
+                    if (temp) {
+                        expression = factory.createComma(expression, temp);
+                        ts.setTextRange(expression, node);
+                    }
+                    return expression;
+                }
+            }
+            return ts.visitEachChild(node, visitor, context);
+        }
         //
         // Modifier Visitors
         //
@@ -100527,8 +102722,8 @@
          */
         function modifierVisitor(node) {
             switch (node.kind) {
-                case 92 /* ExportKeyword */:
-                case 87 /* DefaultKeyword */:
+                case 93 /* ExportKeyword */:
+                case 88 /* DefaultKeyword */:
                     return undefined;
             }
             return node;
@@ -100544,7 +102739,7 @@
          * @param emitCallback A callback used to emit the node in the printer.
          */
         function onEmitNode(hint, node, emitCallback) {
-            if (node.kind === 298 /* SourceFile */) {
+            if (node.kind === 300 /* SourceFile */) {
                 var id = ts.getOriginalNodeId(node);
                 currentSourceFile = node;
                 moduleInfo = moduleInfoMap[id];
@@ -100594,7 +102789,7 @@
          */
         function substituteUnspecified(node) {
             switch (node.kind) {
-                case 290 /* ShorthandPropertyAssignment */:
+                case 292 /* ShorthandPropertyAssignment */:
                     return substituteShorthandPropertyAssignment(node);
             }
             return node;
@@ -100629,14 +102824,11 @@
          */
         function substituteExpression(node) {
             switch (node.kind) {
-                case 78 /* Identifier */:
+                case 79 /* Identifier */:
                     return substituteExpressionIdentifier(node);
-                case 217 /* BinaryExpression */:
+                case 219 /* BinaryExpression */:
                     return substituteBinaryExpression(node);
-                case 215 /* PrefixUnaryExpression */:
-                case 216 /* PostfixUnaryExpression */:
-                    return substituteUnaryExpression(node);
-                case 227 /* MetaProperty */:
+                case 229 /* MetaProperty */:
                     return substituteMetaProperty(node);
             }
             return node;
@@ -100699,49 +102891,10 @@
                 if (exportedNames) {
                     // For each additional export of the declaration, apply an export assignment.
                     var expression = node;
-                    for (var _i = 0, exportedNames_4 = exportedNames; _i < exportedNames_4.length; _i++) {
-                        var exportName = exportedNames_4[_i];
-                        expression = createExportExpression(exportName, preventSubstitution(expression));
-                    }
-                    return expression;
-                }
-            }
-            return node;
-        }
-        /**
-         * Substitution for a UnaryExpression that may contain an imported or exported symbol.
-         *
-         * @param node The node to substitute.
-         */
-        function substituteUnaryExpression(node) {
-            // When we see a prefix or postfix increment expression whose operand is an exported
-            // symbol, we should ensure all exports of that symbol are updated with the correct
-            // value.
-            //
-            // - We do not substitute generated identifiers for any reason.
-            // - We do not substitute identifiers tagged with the LocalName flag.
-            // - We do not substitute identifiers that were originally the name of an enum or
-            //   namespace due to how they are transformed in TypeScript.
-            // - We only substitute identifiers that are exported at the top level.
-            if ((node.operator === 45 /* PlusPlusToken */ || node.operator === 46 /* MinusMinusToken */)
-                && ts.isIdentifier(node.operand)
-                && !ts.isGeneratedIdentifier(node.operand)
-                && !ts.isLocalName(node.operand)
-                && !ts.isDeclarationNameOfEnumOrNamespace(node.operand)) {
-                var exportedNames = getExports(node.operand);
-                if (exportedNames) {
-                    var expression = node.kind === 216 /* PostfixUnaryExpression */
-                        ? ts.setTextRange(factory.createPrefixUnaryExpression(node.operator, node.operand), node)
-                        : node;
                     for (var _i = 0, exportedNames_5 = exportedNames; _i < exportedNames_5.length; _i++) {
                         var exportName = exportedNames_5[_i];
                         expression = createExportExpression(exportName, preventSubstitution(expression));
                     }
-                    if (node.kind === 216 /* PostfixUnaryExpression */) {
-                        expression = node.operator === 45 /* PlusPlusToken */
-                            ? factory.createSubtract(preventSubstitution(expression), factory.createNumericLiteral(1))
-                            : factory.createAdd(preventSubstitution(expression), factory.createNumericLiteral(1));
-                    }
                     return expression;
                 }
             }
@@ -100765,7 +102918,7 @@
                     || resolver.getReferencedValueDeclaration(name);
                 if (valueDeclaration) {
                     var exportContainer = resolver.getReferencedExportContainer(name, /*prefixLocals*/ false);
-                    if (exportContainer && exportContainer.kind === 298 /* SourceFile */) {
+                    if (exportContainer && exportContainer.kind === 300 /* SourceFile */) {
                         exportedNames = ts.append(exportedNames, factory.getDeclarationName(valueDeclaration));
                     }
                     exportedNames = ts.addRange(exportedNames, moduleInfo && moduleInfo.exportedBindings[ts.getOriginalNodeId(valueDeclaration)]);
@@ -100805,8 +102958,8 @@
         var previousOnSubstituteNode = context.onSubstituteNode;
         context.onEmitNode = onEmitNode;
         context.onSubstituteNode = onSubstituteNode;
-        context.enableEmitNotification(298 /* SourceFile */);
-        context.enableSubstitution(78 /* Identifier */);
+        context.enableEmitNotification(300 /* SourceFile */);
+        context.enableSubstitution(79 /* Identifier */);
         var helperNameSubstitutions;
         return ts.chainBundle(context, transformSourceFile);
         function transformSourceFile(node) {
@@ -100818,7 +102971,7 @@
                 if (!ts.isExternalModule(node) || ts.some(result.statements, ts.isExternalModuleIndicator)) {
                     return result;
                 }
-                return factory.updateSourceFile(result, ts.setTextRange(factory.createNodeArray(__spreadArray(__spreadArray([], result.statements), [ts.createEmptyExports(factory)])), result.statements));
+                return factory.updateSourceFile(result, ts.setTextRange(factory.createNodeArray(__spreadArray(__spreadArray([], result.statements, true), [ts.createEmptyExports(factory)], false)), result.statements));
             }
             return node;
         }
@@ -100837,12 +102990,12 @@
         }
         function visitor(node) {
             switch (node.kind) {
-                case 261 /* ImportEqualsDeclaration */:
+                case 263 /* ImportEqualsDeclaration */:
                     // Elide `import=` as it is not legal with --module ES6
                     return undefined;
-                case 267 /* ExportAssignment */:
+                case 269 /* ExportAssignment */:
                     return visitExportAssignment(node);
-                case 268 /* ExportDeclaration */:
+                case 270 /* ExportDeclaration */:
                     var exportDecl = node;
                     return visitExportDeclaration(exportDecl);
             }
@@ -100970,14 +103123,14 @@
             } : undefined;
         }
         function getAccessorNameVisibilityDiagnosticMessage(symbolAccessibilityResult) {
-            if (ts.hasSyntacticModifier(node, 32 /* Static */)) {
+            if (ts.isStatic(node)) {
                 return symbolAccessibilityResult.errorModuleName ?
                     symbolAccessibilityResult.accessibility === 2 /* CannotBeNamed */ ?
                         ts.Diagnostics.Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named :
                         ts.Diagnostics.Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2 :
                     ts.Diagnostics.Public_static_property_0_of_exported_class_has_or_is_using_private_name_1;
             }
-            else if (node.parent.kind === 253 /* ClassDeclaration */) {
+            else if (node.parent.kind === 255 /* ClassDeclaration */) {
                 return symbolAccessibilityResult.errorModuleName ?
                     symbolAccessibilityResult.accessibility === 2 /* CannotBeNamed */ ?
                         ts.Diagnostics.Public_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named :
@@ -100999,14 +103152,14 @@
             } : undefined;
         }
         function getMethodNameVisibilityDiagnosticMessage(symbolAccessibilityResult) {
-            if (ts.hasSyntacticModifier(node, 32 /* Static */)) {
+            if (ts.isStatic(node)) {
                 return symbolAccessibilityResult.errorModuleName ?
                     symbolAccessibilityResult.accessibility === 2 /* CannotBeNamed */ ?
                         ts.Diagnostics.Public_static_method_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named :
                         ts.Diagnostics.Public_static_method_0_of_exported_class_has_or_is_using_name_1_from_private_module_2 :
                     ts.Diagnostics.Public_static_method_0_of_exported_class_has_or_is_using_private_name_1;
             }
-            else if (node.parent.kind === 253 /* ClassDeclaration */) {
+            else if (node.parent.kind === 255 /* ClassDeclaration */) {
                 return symbolAccessibilityResult.errorModuleName ?
                     symbolAccessibilityResult.accessibility === 2 /* CannotBeNamed */ ?
                         ts.Diagnostics.Public_method_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named :
@@ -101053,7 +103206,7 @@
             return ts.Debug.assertNever(node, "Attempted to set a declaration diagnostic context for unhandled node kind: " + ts.SyntaxKind[node.kind]);
         }
         function getVariableDeclarationTypeVisibilityDiagnosticMessage(symbolAccessibilityResult) {
-            if (node.kind === 250 /* VariableDeclaration */ || node.kind === 199 /* BindingElement */) {
+            if (node.kind === 252 /* VariableDeclaration */ || node.kind === 201 /* BindingElement */) {
                 return symbolAccessibilityResult.errorModuleName ?
                     symbolAccessibilityResult.accessibility === 2 /* CannotBeNamed */ ?
                         ts.Diagnostics.Exported_variable_0_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named :
@@ -101062,17 +103215,17 @@
             }
             // This check is to ensure we don't report error on constructor parameter property as that error would be reported during parameter emit
             // The only exception here is if the constructor was marked as private. we are not emitting the constructor parameters at all.
-            else if (node.kind === 164 /* PropertyDeclaration */ || node.kind === 202 /* PropertyAccessExpression */ || node.kind === 163 /* PropertySignature */ ||
-                (node.kind === 161 /* Parameter */ && ts.hasSyntacticModifier(node.parent, 8 /* Private */))) {
+            else if (node.kind === 165 /* PropertyDeclaration */ || node.kind === 204 /* PropertyAccessExpression */ || node.kind === 164 /* PropertySignature */ ||
+                (node.kind === 162 /* Parameter */ && ts.hasSyntacticModifier(node.parent, 8 /* Private */))) {
                 // TODO(jfreeman): Deal with computed properties in error reporting.
-                if (ts.hasSyntacticModifier(node, 32 /* Static */)) {
+                if (ts.isStatic(node)) {
                     return symbolAccessibilityResult.errorModuleName ?
                         symbolAccessibilityResult.accessibility === 2 /* CannotBeNamed */ ?
                             ts.Diagnostics.Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named :
                             ts.Diagnostics.Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2 :
                         ts.Diagnostics.Public_static_property_0_of_exported_class_has_or_is_using_private_name_1;
                 }
-                else if (node.parent.kind === 253 /* ClassDeclaration */ || node.kind === 161 /* Parameter */) {
+                else if (node.parent.kind === 255 /* ClassDeclaration */ || node.kind === 162 /* Parameter */) {
                     return symbolAccessibilityResult.errorModuleName ?
                         symbolAccessibilityResult.accessibility === 2 /* CannotBeNamed */ ?
                             ts.Diagnostics.Public_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named :
@@ -101097,10 +103250,10 @@
         }
         function getAccessorDeclarationTypeVisibilityError(symbolAccessibilityResult) {
             var diagnosticMessage;
-            if (node.kind === 169 /* SetAccessor */) {
+            if (node.kind === 171 /* SetAccessor */) {
                 // Getters can infer the return type from the returned expression, but setters cannot, so the
                 // "_from_external_module_1_but_cannot_be_named" case cannot occur.
-                if (ts.hasSyntacticModifier(node, 32 /* Static */)) {
+                if (ts.isStatic(node)) {
                     diagnosticMessage = symbolAccessibilityResult.errorModuleName ?
                         ts.Diagnostics.Parameter_type_of_public_static_setter_0_from_exported_class_has_or_is_using_name_1_from_private_module_2 :
                         ts.Diagnostics.Parameter_type_of_public_static_setter_0_from_exported_class_has_or_is_using_private_name_1;
@@ -101112,7 +103265,7 @@
                 }
             }
             else {
-                if (ts.hasSyntacticModifier(node, 32 /* Static */)) {
+                if (ts.isStatic(node)) {
                     diagnosticMessage = symbolAccessibilityResult.errorModuleName ?
                         symbolAccessibilityResult.accessibility === 2 /* CannotBeNamed */ ?
                             ts.Diagnostics.Return_type_of_public_static_getter_0_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named :
@@ -101136,34 +103289,34 @@
         function getReturnTypeVisibilityError(symbolAccessibilityResult) {
             var diagnosticMessage;
             switch (node.kind) {
-                case 171 /* ConstructSignature */:
+                case 173 /* ConstructSignature */:
                     // Interfaces cannot have return types that cannot be named
                     diagnosticMessage = symbolAccessibilityResult.errorModuleName ?
                         ts.Diagnostics.Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1 :
                         ts.Diagnostics.Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_0;
                     break;
-                case 170 /* CallSignature */:
+                case 172 /* CallSignature */:
                     // Interfaces cannot have return types that cannot be named
                     diagnosticMessage = symbolAccessibilityResult.errorModuleName ?
                         ts.Diagnostics.Return_type_of_call_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1 :
                         ts.Diagnostics.Return_type_of_call_signature_from_exported_interface_has_or_is_using_private_name_0;
                     break;
-                case 172 /* IndexSignature */:
+                case 174 /* IndexSignature */:
                     // Interfaces cannot have return types that cannot be named
                     diagnosticMessage = symbolAccessibilityResult.errorModuleName ?
                         ts.Diagnostics.Return_type_of_index_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1 :
                         ts.Diagnostics.Return_type_of_index_signature_from_exported_interface_has_or_is_using_private_name_0;
                     break;
-                case 166 /* MethodDeclaration */:
-                case 165 /* MethodSignature */:
-                    if (ts.hasSyntacticModifier(node, 32 /* Static */)) {
+                case 167 /* MethodDeclaration */:
+                case 166 /* MethodSignature */:
+                    if (ts.isStatic(node)) {
                         diagnosticMessage = symbolAccessibilityResult.errorModuleName ?
                             symbolAccessibilityResult.accessibility === 2 /* CannotBeNamed */ ?
                                 ts.Diagnostics.Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named :
                                 ts.Diagnostics.Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_private_module_1 :
                             ts.Diagnostics.Return_type_of_public_static_method_from_exported_class_has_or_is_using_private_name_0;
                     }
-                    else if (node.parent.kind === 253 /* ClassDeclaration */) {
+                    else if (node.parent.kind === 255 /* ClassDeclaration */) {
                         diagnosticMessage = symbolAccessibilityResult.errorModuleName ?
                             symbolAccessibilityResult.accessibility === 2 /* CannotBeNamed */ ?
                                 ts.Diagnostics.Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named :
@@ -101177,7 +103330,7 @@
                             ts.Diagnostics.Return_type_of_method_from_exported_interface_has_or_is_using_private_name_0;
                     }
                     break;
-                case 252 /* FunctionDeclaration */:
+                case 254 /* FunctionDeclaration */:
                     diagnosticMessage = symbolAccessibilityResult.errorModuleName ?
                         symbolAccessibilityResult.accessibility === 2 /* CannotBeNamed */ ?
                             ts.Diagnostics.Return_type_of_exported_function_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named :
@@ -101202,38 +103355,38 @@
         }
         function getParameterDeclarationTypeVisibilityDiagnosticMessage(symbolAccessibilityResult) {
             switch (node.parent.kind) {
-                case 167 /* Constructor */:
+                case 169 /* Constructor */:
                     return symbolAccessibilityResult.errorModuleName ?
                         symbolAccessibilityResult.accessibility === 2 /* CannotBeNamed */ ?
                             ts.Diagnostics.Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named :
                             ts.Diagnostics.Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_private_module_2 :
                         ts.Diagnostics.Parameter_0_of_constructor_from_exported_class_has_or_is_using_private_name_1;
-                case 171 /* ConstructSignature */:
-                case 176 /* ConstructorType */:
+                case 173 /* ConstructSignature */:
+                case 178 /* ConstructorType */:
                     // Interfaces cannot have parameter types that cannot be named
                     return symbolAccessibilityResult.errorModuleName ?
                         ts.Diagnostics.Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2 :
                         ts.Diagnostics.Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1;
-                case 170 /* CallSignature */:
+                case 172 /* CallSignature */:
                     // Interfaces cannot have parameter types that cannot be named
                     return symbolAccessibilityResult.errorModuleName ?
                         ts.Diagnostics.Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2 :
                         ts.Diagnostics.Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1;
-                case 172 /* IndexSignature */:
+                case 174 /* IndexSignature */:
                     // Interfaces cannot have parameter types that cannot be named
                     return symbolAccessibilityResult.errorModuleName ?
                         ts.Diagnostics.Parameter_0_of_index_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2 :
                         ts.Diagnostics.Parameter_0_of_index_signature_from_exported_interface_has_or_is_using_private_name_1;
-                case 166 /* MethodDeclaration */:
-                case 165 /* MethodSignature */:
-                    if (ts.hasSyntacticModifier(node.parent, 32 /* Static */)) {
+                case 167 /* MethodDeclaration */:
+                case 166 /* MethodSignature */:
+                    if (ts.isStatic(node.parent)) {
                         return symbolAccessibilityResult.errorModuleName ?
                             symbolAccessibilityResult.accessibility === 2 /* CannotBeNamed */ ?
                                 ts.Diagnostics.Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named :
                                 ts.Diagnostics.Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_private_module_2 :
                             ts.Diagnostics.Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1;
                     }
-                    else if (node.parent.parent.kind === 253 /* ClassDeclaration */) {
+                    else if (node.parent.parent.kind === 255 /* ClassDeclaration */) {
                         return symbolAccessibilityResult.errorModuleName ?
                             symbolAccessibilityResult.accessibility === 2 /* CannotBeNamed */ ?
                                 ts.Diagnostics.Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named :
@@ -101246,15 +103399,15 @@
                             ts.Diagnostics.Parameter_0_of_method_from_exported_interface_has_or_is_using_name_1_from_private_module_2 :
                             ts.Diagnostics.Parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1;
                     }
-                case 252 /* FunctionDeclaration */:
-                case 175 /* FunctionType */:
+                case 254 /* FunctionDeclaration */:
+                case 177 /* FunctionType */:
                     return symbolAccessibilityResult.errorModuleName ?
                         symbolAccessibilityResult.accessibility === 2 /* CannotBeNamed */ ?
                             ts.Diagnostics.Parameter_0_of_exported_function_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named :
                             ts.Diagnostics.Parameter_0_of_exported_function_has_or_is_using_name_1_from_private_module_2 :
                         ts.Diagnostics.Parameter_0_of_exported_function_has_or_is_using_private_name_1;
-                case 169 /* SetAccessor */:
-                case 168 /* GetAccessor */:
+                case 171 /* SetAccessor */:
+                case 170 /* GetAccessor */:
                     return symbolAccessibilityResult.errorModuleName ?
                         symbolAccessibilityResult.accessibility === 2 /* CannotBeNamed */ ?
                             ts.Diagnostics.Parameter_0_of_accessor_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named :
@@ -101268,39 +103421,39 @@
             // Type parameter constraints are named by user so we should always be able to name it
             var diagnosticMessage;
             switch (node.parent.kind) {
-                case 253 /* ClassDeclaration */:
+                case 255 /* ClassDeclaration */:
                     diagnosticMessage = ts.Diagnostics.Type_parameter_0_of_exported_class_has_or_is_using_private_name_1;
                     break;
-                case 254 /* InterfaceDeclaration */:
+                case 256 /* InterfaceDeclaration */:
                     diagnosticMessage = ts.Diagnostics.Type_parameter_0_of_exported_interface_has_or_is_using_private_name_1;
                     break;
-                case 191 /* MappedType */:
+                case 193 /* MappedType */:
                     diagnosticMessage = ts.Diagnostics.Type_parameter_0_of_exported_mapped_object_type_is_using_private_name_1;
                     break;
-                case 176 /* ConstructorType */:
-                case 171 /* ConstructSignature */:
+                case 178 /* ConstructorType */:
+                case 173 /* ConstructSignature */:
                     diagnosticMessage = ts.Diagnostics.Type_parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1;
                     break;
-                case 170 /* CallSignature */:
+                case 172 /* CallSignature */:
                     diagnosticMessage = ts.Diagnostics.Type_parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1;
                     break;
-                case 166 /* MethodDeclaration */:
-                case 165 /* MethodSignature */:
-                    if (ts.hasSyntacticModifier(node.parent, 32 /* Static */)) {
+                case 167 /* MethodDeclaration */:
+                case 166 /* MethodSignature */:
+                    if (ts.isStatic(node.parent)) {
                         diagnosticMessage = ts.Diagnostics.Type_parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1;
                     }
-                    else if (node.parent.parent.kind === 253 /* ClassDeclaration */) {
+                    else if (node.parent.parent.kind === 255 /* ClassDeclaration */) {
                         diagnosticMessage = ts.Diagnostics.Type_parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1;
                     }
                     else {
                         diagnosticMessage = ts.Diagnostics.Type_parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1;
                     }
                     break;
-                case 175 /* FunctionType */:
-                case 252 /* FunctionDeclaration */:
+                case 177 /* FunctionType */:
+                case 254 /* FunctionDeclaration */:
                     diagnosticMessage = ts.Diagnostics.Type_parameter_0_of_exported_function_has_or_is_using_private_name_1;
                     break;
-                case 255 /* TypeAliasDeclaration */:
+                case 257 /* TypeAliasDeclaration */:
                     diagnosticMessage = ts.Diagnostics.Type_parameter_0_of_exported_type_alias_has_or_is_using_private_name_1;
                     break;
                 default:
@@ -101317,7 +103470,7 @@
             // Heritage clause is written by user so it can always be named
             if (ts.isClassDeclaration(node.parent.parent)) {
                 // Class or Interface implemented/extended is inaccessible
-                diagnosticMessage = ts.isHeritageClause(node.parent) && node.parent.token === 116 /* ImplementsKeyword */ ?
+                diagnosticMessage = ts.isHeritageClause(node.parent) && node.parent.token === 117 /* ImplementsKeyword */ ?
                     ts.Diagnostics.Implements_clause_of_exported_class_0_has_or_is_using_private_name_1 :
                     node.parent.parent.name ? ts.Diagnostics.extends_clause_of_exported_class_0_has_or_is_using_private_name_1 :
                         ts.Diagnostics.extends_clause_of_exported_class_has_or_is_using_private_name_0;
@@ -101366,7 +103519,7 @@
     }
     function isInternalDeclaration(node, currentSourceFile) {
         var parseTreeNode = ts.getParseTreeNode(node);
-        if (parseTreeNode && parseTreeNode.kind === 161 /* Parameter */) {
+        if (parseTreeNode && parseTreeNode.kind === 162 /* Parameter */) {
             var paramIdx = parseTreeNode.parent.parameters.indexOf(parseTreeNode);
             var previousSibling = paramIdx > 0 ? parseTreeNode.parent.parameters[paramIdx - 1] : undefined;
             var text = currentSourceFile.text;
@@ -101425,7 +103578,8 @@
             moduleResolverHost: host,
             trackReferencedAmbientModule: trackReferencedAmbientModule,
             trackExternalModuleSymbolOfImportTypeNode: trackExternalModuleSymbolOfImportTypeNode,
-            reportNonlocalAugmentation: reportNonlocalAugmentation
+            reportNonlocalAugmentation: reportNonlocalAugmentation,
+            reportNonSerializableProperty: reportNonSerializableProperty
         };
         var errorNameNode;
         var errorFallbackNode;
@@ -101483,8 +103637,10 @@
                     else {
                         context.addDiagnostic(ts.createDiagnosticForNode(symbolAccessibilityResult.errorNode || errorInfo.errorNode, errorInfo.diagnosticMessage, symbolAccessibilityResult.errorSymbolName, symbolAccessibilityResult.errorModuleName));
                     }
+                    return true;
                 }
             }
+            return false;
         }
         function trackExternalModuleSymbolOfImportTypeNode(symbol) {
             if (!isBundledEmit) {
@@ -101493,33 +103649,40 @@
         }
         function trackSymbol(symbol, enclosingDeclaration, meaning) {
             if (symbol.flags & 262144 /* TypeParameter */)
-                return;
-            handleSymbolAccessibilityError(resolver.isSymbolAccessible(symbol, enclosingDeclaration, meaning, /*shouldComputeAliasesToMakeVisible*/ true));
+                return false;
+            var issuedDiagnostic = handleSymbolAccessibilityError(resolver.isSymbolAccessible(symbol, enclosingDeclaration, meaning, /*shouldComputeAliasesToMakeVisible*/ true));
             recordTypeReferenceDirectivesIfNecessary(resolver.getTypeReferenceDirectivesForSymbol(symbol, meaning));
+            return issuedDiagnostic;
         }
         function reportPrivateInBaseOfClassExpression(propertyName) {
             if (errorNameNode || errorFallbackNode) {
                 context.addDiagnostic(ts.createDiagnosticForNode((errorNameNode || errorFallbackNode), ts.Diagnostics.Property_0_of_exported_class_expression_may_not_be_private_or_protected, propertyName));
             }
         }
+        function errorDeclarationNameWithFallback() {
+            return errorNameNode ? ts.declarationNameToString(errorNameNode) :
+                errorFallbackNode && ts.getNameOfDeclaration(errorFallbackNode) ? ts.declarationNameToString(ts.getNameOfDeclaration(errorFallbackNode)) :
+                    errorFallbackNode && ts.isExportAssignment(errorFallbackNode) ? errorFallbackNode.isExportEquals ? "export=" : "default" :
+                        "(Missing)"; // same fallback declarationNameToString uses when node is zero-width (ie, nameless)
+        }
         function reportInaccessibleUniqueSymbolError() {
-            if (errorNameNode) {
-                context.addDiagnostic(ts.createDiagnosticForNode(errorNameNode, ts.Diagnostics.The_inferred_type_of_0_references_an_inaccessible_1_type_A_type_annotation_is_necessary, ts.declarationNameToString(errorNameNode), "unique symbol"));
+            if (errorNameNode || errorFallbackNode) {
+                context.addDiagnostic(ts.createDiagnosticForNode((errorNameNode || errorFallbackNode), ts.Diagnostics.The_inferred_type_of_0_references_an_inaccessible_1_type_A_type_annotation_is_necessary, errorDeclarationNameWithFallback(), "unique symbol"));
             }
         }
         function reportCyclicStructureError() {
-            if (errorNameNode) {
-                context.addDiagnostic(ts.createDiagnosticForNode(errorNameNode, ts.Diagnostics.The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialized_A_type_annotation_is_necessary, ts.declarationNameToString(errorNameNode)));
+            if (errorNameNode || errorFallbackNode) {
+                context.addDiagnostic(ts.createDiagnosticForNode((errorNameNode || errorFallbackNode), ts.Diagnostics.The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialized_A_type_annotation_is_necessary, errorDeclarationNameWithFallback()));
             }
         }
         function reportInaccessibleThisError() {
-            if (errorNameNode) {
-                context.addDiagnostic(ts.createDiagnosticForNode(errorNameNode, ts.Diagnostics.The_inferred_type_of_0_references_an_inaccessible_1_type_A_type_annotation_is_necessary, ts.declarationNameToString(errorNameNode), "this"));
+            if (errorNameNode || errorFallbackNode) {
+                context.addDiagnostic(ts.createDiagnosticForNode((errorNameNode || errorFallbackNode), ts.Diagnostics.The_inferred_type_of_0_references_an_inaccessible_1_type_A_type_annotation_is_necessary, errorDeclarationNameWithFallback(), "this"));
             }
         }
         function reportLikelyUnsafeImportRequiredError(specifier) {
-            if (errorNameNode) {
-                context.addDiagnostic(ts.createDiagnosticForNode(errorNameNode, ts.Diagnostics.The_inferred_type_of_0_cannot_be_named_without_a_reference_to_1_This_is_likely_not_portable_A_type_annotation_is_necessary, ts.declarationNameToString(errorNameNode), specifier));
+            if (errorNameNode || errorFallbackNode) {
+                context.addDiagnostic(ts.createDiagnosticForNode((errorNameNode || errorFallbackNode), ts.Diagnostics.The_inferred_type_of_0_cannot_be_named_without_a_reference_to_1_This_is_likely_not_portable_A_type_annotation_is_necessary, errorDeclarationNameWithFallback(), specifier));
             }
         }
         function reportTruncationError() {
@@ -101538,6 +103701,11 @@
                 }
             }
         }
+        function reportNonSerializableProperty(propertyName) {
+            if (errorNameNode || errorFallbackNode) {
+                context.addDiagnostic(ts.createDiagnosticForNode((errorNameNode || errorFallbackNode), ts.Diagnostics.The_type_of_this_node_cannot_be_serialized_because_its_property_0_cannot_be_serialized, propertyName));
+            }
+        }
         function transformDeclarationsForJS(sourceFile, bundled) {
             var oldDiag = getSymbolAccessibilityDiagnostic;
             getSymbolAccessibilityDiagnostic = function (s) { return (s.errorNode && ts.canProduceDiagnostics(s.errorNode) ? ts.createGetSymbolAccessibilityDiagnosticForNode(s.errorNode)(s) : ({
@@ -101551,10 +103719,10 @@
             return result;
         }
         function transformRoot(node) {
-            if (node.kind === 298 /* SourceFile */ && node.isDeclarationFile) {
+            if (node.kind === 300 /* SourceFile */ && node.isDeclarationFile) {
                 return node;
             }
-            if (node.kind === 299 /* Bundle */) {
+            if (node.kind === 301 /* Bundle */) {
                 isBundledEmit = true;
                 refs = new ts.Map();
                 libs = new ts.Map();
@@ -101577,14 +103745,14 @@
                         resultHasExternalModuleIndicator = false; // unused in external module bundle emit (all external modules are within module blocks, therefore are known to be modules)
                         needsDeclare = false;
                         var statements = ts.isSourceFileJS(sourceFile) ? factory.createNodeArray(transformDeclarationsForJS(sourceFile, /*bundled*/ true)) : ts.visitNodes(sourceFile.statements, visitDeclarationStatements);
-                        var newFile = factory.updateSourceFile(sourceFile, [factory.createModuleDeclaration([], [factory.createModifier(133 /* DeclareKeyword */)], factory.createStringLiteral(ts.getResolvedExternalModuleName(context.getEmitHost(), sourceFile)), factory.createModuleBlock(ts.setTextRange(factory.createNodeArray(transformAndReplaceLatePaintedStatements(statements)), sourceFile.statements)))], /*isDeclarationFile*/ true, /*referencedFiles*/ [], /*typeReferences*/ [], /*hasNoDefaultLib*/ false, /*libReferences*/ []);
+                        var newFile = factory.updateSourceFile(sourceFile, [factory.createModuleDeclaration([], [factory.createModifier(134 /* DeclareKeyword */)], factory.createStringLiteral(ts.getResolvedExternalModuleName(context.getEmitHost(), sourceFile)), factory.createModuleBlock(ts.setTextRange(factory.createNodeArray(transformAndReplaceLatePaintedStatements(statements)), sourceFile.statements)))], /*isDeclarationFile*/ true, /*referencedFiles*/ [], /*typeReferences*/ [], /*hasNoDefaultLib*/ false, /*libReferences*/ []);
                         return newFile;
                     }
                     needsDeclare = true;
                     var updated = ts.isSourceFileJS(sourceFile) ? factory.createNodeArray(transformDeclarationsForJS(sourceFile)) : ts.visitNodes(sourceFile.statements, visitDeclarationStatements);
                     return factory.updateSourceFile(sourceFile, transformAndReplaceLatePaintedStatements(updated), /*isDeclarationFile*/ true, /*referencedFiles*/ [], /*typeReferences*/ [], /*hasNoDefaultLib*/ false, /*libReferences*/ []);
                 }), ts.mapDefined(node.prepends, function (prepend) {
-                    if (prepend.kind === 301 /* InputFiles */) {
+                    if (prepend.kind === 303 /* InputFiles */) {
                         var sourceFile = ts.createUnparsedSourceFile(prepend, "dts", stripInternal);
                         hasNoDefaultLib_1 = hasNoDefaultLib_1 || !!sourceFile.hasNoDefaultLib;
                         collectReferences(sourceFile, refs);
@@ -101633,7 +103801,7 @@
                 refs.forEach(referenceVisitor);
                 emittedImports = ts.filter(combinedStatements, ts.isAnyImportSyntax);
                 if (ts.isExternalModule(node) && (!resultHasExternalModuleIndicator || (needsScopeFixMarker && !resultHasScopeMarker))) {
-                    combinedStatements = ts.setTextRange(factory.createNodeArray(__spreadArray(__spreadArray([], combinedStatements), [ts.createEmptyExports(factory)])), combinedStatements);
+                    combinedStatements = ts.setTextRange(factory.createNodeArray(__spreadArray(__spreadArray([], combinedStatements, true), [ts.createEmptyExports(factory)], false)), combinedStatements);
                 }
             }
             var updated = factory.updateSourceFile(node, combinedStatements, /*isDeclarationFile*/ true, references, getFileReferencesForUsedTypeReferences(), node.hasNoDefaultLib, getLibReferences());
@@ -101676,8 +103844,7 @@
                         declFileName = paths.declarationFilePath || paths.jsFilePath || file.fileName;
                     }
                     if (declFileName) {
-                        var specifier = ts.moduleSpecifiers.getModuleSpecifier(options, currentSourceFile, ts.toPath(outputFilePath, host.getCurrentDirectory(), host.getCanonicalFileName), ts.toPath(declFileName, host.getCurrentDirectory(), host.getCanonicalFileName), host, 
-                        /*preferences*/ undefined);
+                        var specifier = ts.moduleSpecifiers.getModuleSpecifier(options, currentSourceFile, ts.toPath(outputFilePath, host.getCurrentDirectory(), host.getCanonicalFileName), ts.toPath(declFileName, host.getCurrentDirectory(), host.getCanonicalFileName), host);
                         if (!ts.pathIsRelative(specifier)) {
                             // If some compiler option/symlink/whatever allows access to the file containing the ambient module declaration
                             // via a non-relative name, emit a type reference directive to that non-relative name, rather than
@@ -101721,11 +103888,11 @@
             return ret;
         }
         function filterBindingPatternInitializers(name) {
-            if (name.kind === 78 /* Identifier */) {
+            if (name.kind === 79 /* Identifier */) {
                 return name;
             }
             else {
-                if (name.kind === 198 /* ArrayBindingPattern */) {
+                if (name.kind === 200 /* ArrayBindingPattern */) {
                     return factory.updateArrayBindingPattern(name, ts.visitNodes(name.elements, visitBindingElement));
                 }
                 else {
@@ -101733,7 +103900,7 @@
                 }
             }
             function visitBindingElement(elem) {
-                if (elem.kind === 223 /* OmittedExpression */) {
+                if (elem.kind === 225 /* OmittedExpression */) {
                     return elem;
                 }
                 return factory.updateBindingElement(elem, elem.dotDotDotToken, elem.propertyName, filterBindingPatternInitializers(elem.name), shouldPrintWithInitializer(elem) ? elem.initializer : undefined);
@@ -101771,19 +103938,19 @@
                 // Literal const declarations will have an initializer ensured rather than a type
                 return;
             }
-            var shouldUseResolverType = node.kind === 161 /* Parameter */ &&
+            var shouldUseResolverType = node.kind === 162 /* Parameter */ &&
                 (resolver.isRequiredInitializedParameter(node) ||
                     resolver.isOptionalUninitializedParameterProperty(node));
             if (type && !shouldUseResolverType) {
                 return ts.visitNode(type, visitDeclarationSubtree);
             }
             if (!ts.getParseTreeNode(node)) {
-                return type ? ts.visitNode(type, visitDeclarationSubtree) : factory.createKeywordTypeNode(128 /* AnyKeyword */);
+                return type ? ts.visitNode(type, visitDeclarationSubtree) : factory.createKeywordTypeNode(129 /* AnyKeyword */);
             }
-            if (node.kind === 169 /* SetAccessor */) {
+            if (node.kind === 171 /* SetAccessor */) {
                 // Set accessors with no associated type node (from it's param or get accessor return) are `any` since they are never contextually typed right now
                 // (The inferred type here will be void, but the old declaration emitter printed `any`, so this replicates that)
-                return factory.createKeywordTypeNode(128 /* AnyKeyword */);
+                return factory.createKeywordTypeNode(129 /* AnyKeyword */);
             }
             errorNameNode = node.name;
             var oldDiag;
@@ -101791,12 +103958,12 @@
                 oldDiag = getSymbolAccessibilityDiagnostic;
                 getSymbolAccessibilityDiagnostic = ts.createGetSymbolAccessibilityDiagnosticForNode(node);
             }
-            if (node.kind === 250 /* VariableDeclaration */ || node.kind === 199 /* BindingElement */) {
+            if (node.kind === 252 /* VariableDeclaration */ || node.kind === 201 /* BindingElement */) {
                 return cleanup(resolver.createTypeOfDeclaration(node, enclosingDeclaration, declarationEmitNodeBuilderFlags, symbolTracker));
             }
-            if (node.kind === 161 /* Parameter */
-                || node.kind === 164 /* PropertyDeclaration */
-                || node.kind === 163 /* PropertySignature */) {
+            if (node.kind === 162 /* Parameter */
+                || node.kind === 165 /* PropertyDeclaration */
+                || node.kind === 164 /* PropertySignature */) {
                 if (!node.initializer)
                     return cleanup(resolver.createTypeOfDeclaration(node, enclosingDeclaration, declarationEmitNodeBuilderFlags, symbolTracker, shouldUseResolverType));
                 return cleanup(resolver.createTypeOfDeclaration(node, enclosingDeclaration, declarationEmitNodeBuilderFlags, symbolTracker, shouldUseResolverType) || resolver.createTypeOfExpression(node.initializer, enclosingDeclaration, declarationEmitNodeBuilderFlags, symbolTracker));
@@ -101807,30 +103974,41 @@
                 if (!suppressNewDiagnosticContexts) {
                     getSymbolAccessibilityDiagnostic = oldDiag;
                 }
-                return returnValue || factory.createKeywordTypeNode(128 /* AnyKeyword */);
+                return returnValue || factory.createKeywordTypeNode(129 /* AnyKeyword */);
             }
         }
         function isDeclarationAndNotVisible(node) {
             node = ts.getParseTreeNode(node);
             switch (node.kind) {
-                case 252 /* FunctionDeclaration */:
-                case 257 /* ModuleDeclaration */:
-                case 254 /* InterfaceDeclaration */:
-                case 253 /* ClassDeclaration */:
-                case 255 /* TypeAliasDeclaration */:
-                case 256 /* EnumDeclaration */:
+                case 254 /* FunctionDeclaration */:
+                case 259 /* ModuleDeclaration */:
+                case 256 /* InterfaceDeclaration */:
+                case 255 /* ClassDeclaration */:
+                case 257 /* TypeAliasDeclaration */:
+                case 258 /* EnumDeclaration */:
                     return !resolver.isDeclarationVisible(node);
                 // The following should be doing their own visibility checks based on filtering their members
-                case 250 /* VariableDeclaration */:
+                case 252 /* VariableDeclaration */:
                     return !getBindingNameVisible(node);
-                case 261 /* ImportEqualsDeclaration */:
-                case 262 /* ImportDeclaration */:
-                case 268 /* ExportDeclaration */:
-                case 267 /* ExportAssignment */:
+                case 263 /* ImportEqualsDeclaration */:
+                case 264 /* ImportDeclaration */:
+                case 270 /* ExportDeclaration */:
+                case 269 /* ExportAssignment */:
                     return false;
+                case 168 /* ClassStaticBlockDeclaration */:
+                    return true;
             }
             return false;
         }
+        // If the ExpandoFunctionDeclaration have multiple overloads, then we only need to emit properties for the last one.
+        function shouldEmitFunctionProperties(input) {
+            var _a;
+            if (input.body) {
+                return true;
+            }
+            var overloadSignatures = (_a = input.symbol.declarations) === null || _a === void 0 ? void 0 : _a.filter(function (decl) { return ts.isFunctionDeclaration(decl) && !decl.body; });
+            return !overloadSignatures || overloadSignatures.indexOf(input) === overloadSignatures.length - 1;
+        }
         function getBindingNameVisible(elem) {
             if (ts.isOmittedExpression(elem)) {
                 return false;
@@ -101907,7 +104085,7 @@
         function rewriteModuleSpecifier(parent, input) {
             if (!input)
                 return undefined; // TODO: GH#18217
-            resultHasExternalModuleIndicator = resultHasExternalModuleIndicator || (parent.kind !== 257 /* ModuleDeclaration */ && parent.kind !== 196 /* ImportType */);
+            resultHasExternalModuleIndicator = resultHasExternalModuleIndicator || (parent.kind !== 259 /* ModuleDeclaration */ && parent.kind !== 198 /* ImportType */);
             if (ts.isStringLiteralLike(input)) {
                 if (isBundledEmit) {
                     var newName = ts.getExternalModuleNameFromDeclaration(context.getEmitHost(), resolver, parent);
@@ -101927,7 +104105,7 @@
         function transformImportEqualsDeclaration(decl) {
             if (!resolver.isDeclarationVisible(decl))
                 return;
-            if (decl.moduleReference.kind === 273 /* ExternalModuleReference */) {
+            if (decl.moduleReference.kind === 275 /* ExternalModuleReference */) {
                 // Rewrite external module names if necessary
                 var specifier = ts.getExternalModuleImportEqualsDeclarationExpression(decl);
                 return factory.updateImportEqualsDeclaration(decl, 
@@ -101954,7 +104132,7 @@
                 return visibleDefaultBinding && factory.updateImportDeclaration(decl, /*decorators*/ undefined, decl.modifiers, factory.updateImportClause(decl.importClause, decl.importClause.isTypeOnly, visibleDefaultBinding, 
                 /*namedBindings*/ undefined), rewriteModuleSpecifier(decl, decl.moduleSpecifier));
             }
-            if (decl.importClause.namedBindings.kind === 264 /* NamespaceImport */) {
+            if (decl.importClause.namedBindings.kind === 266 /* NamespaceImport */) {
                 // Namespace import (optionally with visible default)
                 var namedBindings = resolver.isDeclarationVisible(decl.importClause.namedBindings) ? decl.importClause.namedBindings : /*namedBindings*/ undefined;
                 return visibleDefaultBinding || namedBindings ? factory.updateImportDeclaration(decl, /*decorators*/ undefined, decl.modifiers, factory.updateImportClause(decl.importClause, decl.importClause.isTypeOnly, visibleDefaultBinding, namedBindings), rewriteModuleSpecifier(decl, decl.moduleSpecifier)) : undefined;
@@ -102049,7 +104227,7 @@
             // We'd see a TDZ violation at runtime
             var canProduceDiagnostic = ts.canProduceDiagnostics(input);
             var oldWithinObjectLiteralType = suppressNewDiagnosticContexts;
-            var shouldEnterSuppressNewDiagnosticsContextContext = ((input.kind === 178 /* TypeLiteral */ || input.kind === 191 /* MappedType */) && input.parent.kind !== 255 /* TypeAliasDeclaration */);
+            var shouldEnterSuppressNewDiagnosticsContextContext = ((input.kind === 180 /* TypeLiteral */ || input.kind === 193 /* MappedType */) && input.parent.kind !== 257 /* TypeAliasDeclaration */);
             // Emit methods which are private as properties with no type information
             if (ts.isMethodDeclaration(input) || ts.isMethodSignature(input)) {
                 if (ts.hasEffectiveModifier(input, 8 /* Private */)) {
@@ -102070,21 +104248,21 @@
             }
             if (isProcessedComponent(input)) {
                 switch (input.kind) {
-                    case 224 /* ExpressionWithTypeArguments */: {
+                    case 226 /* ExpressionWithTypeArguments */: {
                         if ((ts.isEntityName(input.expression) || ts.isEntityNameExpression(input.expression))) {
                             checkEntityNameVisibility(input.expression, enclosingDeclaration);
                         }
                         var node = ts.visitEachChild(input, visitDeclarationSubtree, context);
                         return cleanup(factory.updateExpressionWithTypeArguments(node, node.expression, node.typeArguments));
                     }
-                    case 174 /* TypeReference */: {
+                    case 176 /* TypeReference */: {
                         checkEntityNameVisibility(input.typeName, enclosingDeclaration);
                         var node = ts.visitEachChild(input, visitDeclarationSubtree, context);
                         return cleanup(factory.updateTypeReferenceNode(node, node.typeName, node.typeArguments));
                     }
-                    case 171 /* ConstructSignature */:
+                    case 173 /* ConstructSignature */:
                         return cleanup(factory.updateConstructSignature(input, ensureTypeParams(input, input.typeParameters), updateParamsList(input, input.parameters), ensureType(input, input.type)));
-                    case 167 /* Constructor */: {
+                    case 169 /* Constructor */: {
                         // A constructor declaration may not have a type annotation
                         var ctor = factory.createConstructorDeclaration(
                         /*decorators*/ undefined, 
@@ -102092,7 +104270,7 @@
                         /*body*/ undefined);
                         return cleanup(ctor);
                     }
-                    case 166 /* MethodDeclaration */: {
+                    case 167 /* MethodDeclaration */: {
                         if (ts.isPrivateIdentifier(input.name)) {
                             return cleanup(/*returnValue*/ undefined);
                         }
@@ -102102,7 +104280,7 @@
                         /*body*/ undefined);
                         return cleanup(sig);
                     }
-                    case 168 /* GetAccessor */: {
+                    case 170 /* GetAccessor */: {
                         if (ts.isPrivateIdentifier(input.name)) {
                             return cleanup(/*returnValue*/ undefined);
                         }
@@ -102111,7 +104289,7 @@
                         /*decorators*/ undefined, ensureModifiers(input), input.name, updateAccessorParamsList(input, ts.hasEffectiveModifier(input, 8 /* Private */)), ensureType(input, accessorType), 
                         /*body*/ undefined));
                     }
-                    case 169 /* SetAccessor */: {
+                    case 171 /* SetAccessor */: {
                         if (ts.isPrivateIdentifier(input.name)) {
                             return cleanup(/*returnValue*/ undefined);
                         }
@@ -102119,31 +104297,31 @@
                         /*decorators*/ undefined, ensureModifiers(input), input.name, updateAccessorParamsList(input, ts.hasEffectiveModifier(input, 8 /* Private */)), 
                         /*body*/ undefined));
                     }
-                    case 164 /* PropertyDeclaration */:
+                    case 165 /* PropertyDeclaration */:
                         if (ts.isPrivateIdentifier(input.name)) {
                             return cleanup(/*returnValue*/ undefined);
                         }
                         return cleanup(factory.updatePropertyDeclaration(input, 
                         /*decorators*/ undefined, ensureModifiers(input), input.name, input.questionToken, ensureType(input, input.type), ensureNoInitializer(input)));
-                    case 163 /* PropertySignature */:
+                    case 164 /* PropertySignature */:
                         if (ts.isPrivateIdentifier(input.name)) {
                             return cleanup(/*returnValue*/ undefined);
                         }
                         return cleanup(factory.updatePropertySignature(input, ensureModifiers(input), input.name, input.questionToken, ensureType(input, input.type)));
-                    case 165 /* MethodSignature */: {
+                    case 166 /* MethodSignature */: {
                         if (ts.isPrivateIdentifier(input.name)) {
                             return cleanup(/*returnValue*/ undefined);
                         }
                         return cleanup(factory.updateMethodSignature(input, ensureModifiers(input), input.name, input.questionToken, ensureTypeParams(input, input.typeParameters), updateParamsList(input, input.parameters), ensureType(input, input.type)));
                     }
-                    case 170 /* CallSignature */: {
+                    case 172 /* CallSignature */: {
                         return cleanup(factory.updateCallSignature(input, ensureTypeParams(input, input.typeParameters), updateParamsList(input, input.parameters), ensureType(input, input.type)));
                     }
-                    case 172 /* IndexSignature */: {
+                    case 174 /* IndexSignature */: {
                         return cleanup(factory.updateIndexSignature(input, 
-                        /*decorators*/ undefined, ensureModifiers(input), updateParamsList(input, input.parameters), ts.visitNode(input.type, visitDeclarationSubtree) || factory.createKeywordTypeNode(128 /* AnyKeyword */)));
+                        /*decorators*/ undefined, ensureModifiers(input), updateParamsList(input, input.parameters), ts.visitNode(input.type, visitDeclarationSubtree) || factory.createKeywordTypeNode(129 /* AnyKeyword */)));
                     }
-                    case 250 /* VariableDeclaration */: {
+                    case 252 /* VariableDeclaration */: {
                         if (ts.isBindingPattern(input.name)) {
                             return recreateBindingPattern(input.name);
                         }
@@ -102151,13 +104329,13 @@
                         suppressNewDiagnosticContexts = true; // Variable declaration types also suppress new diagnostic contexts, provided the contexts wouldn't be made for binding pattern types
                         return cleanup(factory.updateVariableDeclaration(input, input.name, /*exclamationToken*/ undefined, ensureType(input, input.type), ensureNoInitializer(input)));
                     }
-                    case 160 /* TypeParameter */: {
+                    case 161 /* TypeParameter */: {
                         if (isPrivateMethodTypeParameter(input) && (input.default || input.constraint)) {
                             return cleanup(factory.updateTypeParameterDeclaration(input, input.name, /*constraint*/ undefined, /*defaultType*/ undefined));
                         }
                         return cleanup(ts.visitEachChild(input, visitDeclarationSubtree, context));
                     }
-                    case 185 /* ConditionalType */: {
+                    case 187 /* ConditionalType */: {
                         // We have to process conditional types in a special way because for visibility purposes we need to push a new enclosingDeclaration
                         // just for the `infer` types in the true branch. It's an implicit declaration scope that only applies to _part_ of the type.
                         var checkType = ts.visitNode(input.checkType, visitDeclarationSubtree);
@@ -102169,13 +104347,13 @@
                         var falseType = ts.visitNode(input.falseType, visitDeclarationSubtree);
                         return cleanup(factory.updateConditionalTypeNode(input, checkType, extendsType, trueType, falseType));
                     }
-                    case 175 /* FunctionType */: {
+                    case 177 /* FunctionType */: {
                         return cleanup(factory.updateFunctionTypeNode(input, ts.visitNodes(input.typeParameters, visitDeclarationSubtree), updateParamsList(input, input.parameters), ts.visitNode(input.type, visitDeclarationSubtree)));
                     }
-                    case 176 /* ConstructorType */: {
+                    case 178 /* ConstructorType */: {
                         return cleanup(factory.updateConstructorTypeNode(input, ensureModifiers(input), ts.visitNodes(input.typeParameters, visitDeclarationSubtree), updateParamsList(input, input.parameters), ts.visitNode(input.type, visitDeclarationSubtree)));
                     }
-                    case 196 /* ImportType */: {
+                    case 198 /* ImportType */: {
                         if (!ts.isLiteralImportTypeNode(input))
                             return cleanup(input);
                         return cleanup(factory.updateImportTypeNode(input, factory.updateLiteralTypeNode(input.argument, rewriteModuleSpecifier(input, input.argument.literal)), input.qualifier, ts.visitNodes(input.typeArguments, visitDeclarationSubtree, ts.isTypeNode), input.isTypeOf));
@@ -102207,7 +104385,7 @@
             }
         }
         function isPrivateMethodTypeParameter(node) {
-            return node.parent.kind === 166 /* MethodDeclaration */ && ts.hasEffectiveModifier(node.parent, 8 /* Private */);
+            return node.parent.kind === 167 /* MethodDeclaration */ && ts.hasEffectiveModifier(node.parent, 8 /* Private */);
         }
         function visitDeclarationStatements(input) {
             if (!isPreservedDeclarationStatement(input)) {
@@ -102217,7 +104395,7 @@
             if (shouldStripInternal(input))
                 return;
             switch (input.kind) {
-                case 268 /* ExportDeclaration */: {
+                case 270 /* ExportDeclaration */: {
                     if (ts.isSourceFile(input.parent)) {
                         resultHasExternalModuleIndicator = true;
                     }
@@ -102227,13 +104405,13 @@
                     return factory.updateExportDeclaration(input, 
                     /*decorators*/ undefined, input.modifiers, input.isTypeOnly, input.exportClause, rewriteModuleSpecifier(input, input.moduleSpecifier));
                 }
-                case 267 /* ExportAssignment */: {
+                case 269 /* ExportAssignment */: {
                     // Always visible if the parent node isn't dropped for being not visible
                     if (ts.isSourceFile(input.parent)) {
                         resultHasExternalModuleIndicator = true;
                     }
                     resultHasScopeMarker = true;
-                    if (input.expression.kind === 78 /* Identifier */) {
+                    if (input.expression.kind === 79 /* Identifier */) {
                         return input;
                     }
                     else {
@@ -102245,7 +104423,7 @@
                         errorFallbackNode = input;
                         var varDecl = factory.createVariableDeclaration(newId, /*exclamationToken*/ undefined, resolver.createTypeOfExpression(input.expression, input, declarationEmitNodeBuilderFlags, symbolTracker), /*initializer*/ undefined);
                         errorFallbackNode = undefined;
-                        var statement = factory.createVariableStatement(needsDeclare ? [factory.createModifier(133 /* DeclareKeyword */)] : [], factory.createVariableDeclarationList([varDecl], 2 /* Const */));
+                        var statement = factory.createVariableStatement(needsDeclare ? [factory.createModifier(134 /* DeclareKeyword */)] : [], factory.createVariableDeclarationList([varDecl], 2 /* Const */));
                         return [statement, factory.updateExportAssignment(input, input.decorators, input.modifiers, newId)];
                     }
                 }
@@ -102268,10 +104446,10 @@
             if (shouldStripInternal(input))
                 return;
             switch (input.kind) {
-                case 261 /* ImportEqualsDeclaration */: {
+                case 263 /* ImportEqualsDeclaration */: {
                     return transformImportEqualsDeclaration(input);
                 }
-                case 262 /* ImportDeclaration */: {
+                case 264 /* ImportDeclaration */: {
                     return transformImportDeclaration(input);
                 }
             }
@@ -102292,20 +104470,20 @@
             }
             var previousNeedsDeclare = needsDeclare;
             switch (input.kind) {
-                case 255 /* TypeAliasDeclaration */: // Type aliases get `declare`d if need be (for legacy support), but that's all
+                case 257 /* TypeAliasDeclaration */: // Type aliases get `declare`d if need be (for legacy support), but that's all
                     return cleanup(factory.updateTypeAliasDeclaration(input, 
                     /*decorators*/ undefined, ensureModifiers(input), input.name, ts.visitNodes(input.typeParameters, visitDeclarationSubtree, ts.isTypeParameterDeclaration), ts.visitNode(input.type, visitDeclarationSubtree, ts.isTypeNode)));
-                case 254 /* InterfaceDeclaration */: {
+                case 256 /* InterfaceDeclaration */: {
                     return cleanup(factory.updateInterfaceDeclaration(input, 
                     /*decorators*/ undefined, ensureModifiers(input), input.name, ensureTypeParams(input, input.typeParameters), transformHeritageClauses(input.heritageClauses), ts.visitNodes(input.members, visitDeclarationSubtree)));
                 }
-                case 252 /* FunctionDeclaration */: {
+                case 254 /* FunctionDeclaration */: {
                     // Generators lose their generator-ness, excepting their return type
                     var clean = cleanup(factory.updateFunctionDeclaration(input, 
                     /*decorators*/ undefined, ensureModifiers(input), 
                     /*asteriskToken*/ undefined, input.name, ensureTypeParams(input, input.typeParameters), updateParamsList(input, input.parameters), ensureType(input, input.type), 
                     /*body*/ undefined));
-                    if (clean && resolver.isExpandoFunctionDeclaration(input)) {
+                    if (clean && resolver.isExpandoFunctionDeclaration(input) && shouldEmitFunctionProperties(input)) {
                         var props = resolver.getPropertiesOfContainerFunction(input);
                         // Use parseNodeFactory so it is usable as an enclosing declaration
                         var fakespace_1 = ts.parseNodeFactory.createModuleDeclaration(/*decorators*/ undefined, /*modifiers*/ undefined, clean.name || factory.createIdentifier("_default"), factory.createModuleBlock([]), 16 /* Namespace */);
@@ -102327,7 +104505,7 @@
                                 exportMappings_1.push([name, nameStr]);
                             }
                             var varDecl = factory.createVariableDeclaration(name, /*exclamationToken*/ undefined, type, /*initializer*/ undefined);
-                            return factory.createVariableStatement(isNonContextualKeywordName ? undefined : [factory.createToken(92 /* ExportKeyword */)], factory.createVariableDeclarationList([varDecl]));
+                            return factory.createVariableStatement(isNonContextualKeywordName ? undefined : [factory.createToken(93 /* ExportKeyword */)], factory.createVariableDeclarationList([varDecl]));
                         });
                         if (!exportMappings_1.length) {
                             declarations = ts.mapDefined(declarations, function (declaration) { return factory.updateModifiers(declaration, 0 /* None */); });
@@ -102366,10 +104544,10 @@
                         return clean;
                     }
                 }
-                case 257 /* ModuleDeclaration */: {
+                case 259 /* ModuleDeclaration */: {
                     needsDeclare = false;
                     var inner = input.body;
-                    if (inner && inner.kind === 258 /* ModuleBlock */) {
+                    if (inner && inner.kind === 260 /* ModuleBlock */) {
                         var oldNeedsScopeFix = needsScopeFixMarker;
                         var oldHasScopeFix = resultHasScopeMarker;
                         resultHasScopeMarker = false;
@@ -102385,7 +104563,7 @@
                         // 3. Some things are exported, some are not, and there's no marker - add an empty marker
                         if (!ts.isGlobalScopeAugmentation(input) && !hasScopeMarker(lateStatements) && !resultHasScopeMarker) {
                             if (needsScopeFixMarker) {
-                                lateStatements = factory.createNodeArray(__spreadArray(__spreadArray([], lateStatements), [ts.createEmptyExports(factory)]));
+                                lateStatements = factory.createNodeArray(__spreadArray(__spreadArray([], lateStatements, true), [ts.createEmptyExports(factory)], false));
                             }
                             else {
                                 lateStatements = ts.visitNodes(lateStatements, stripExportModifiers);
@@ -102412,7 +104590,7 @@
                         /*decorators*/ undefined, mods, input.name, body));
                     }
                 }
-                case 253 /* ClassDeclaration */: {
+                case 255 /* ClassDeclaration */: {
                     errorNameNode = input.name;
                     errorFallbackNode = input;
                     var modifiers = factory.createNodeArray(ensureModifiers(input));
@@ -102425,7 +104603,7 @@
                             if (!ts.hasSyntacticModifier(param, 16476 /* ParameterPropertyModifier */) || shouldStripInternal(param))
                                 return;
                             getSymbolAccessibilityDiagnostic = ts.createGetSymbolAccessibilityDiagnosticForNode(param);
-                            if (param.name.kind === 78 /* Identifier */) {
+                            if (param.name.kind === 79 /* Identifier */) {
                                 return preserveJsDoc(factory.createPropertyDeclaration(
                                 /*decorators*/ undefined, ensureModifiers(param), param.name, param.questionToken, ensureType(param, param.type), ensureNoInitializer(param)), param);
                             }
@@ -102467,7 +104645,7 @@
                     var memberNodes = ts.concatenate(ts.concatenate(privateIdentifier, parameterProperties), ts.visitNodes(input.members, visitDeclarationSubtree));
                     var members = factory.createNodeArray(memberNodes);
                     var extendsClause_1 = ts.getEffectiveBaseTypeNode(input);
-                    if (extendsClause_1 && !ts.isEntityNameExpression(extendsClause_1.expression) && extendsClause_1.expression.kind !== 103 /* NullKeyword */) {
+                    if (extendsClause_1 && !ts.isEntityNameExpression(extendsClause_1.expression) && extendsClause_1.expression.kind !== 104 /* NullKeyword */) {
                         // We must add a temporary declaration for the extends clause expression
                         var oldId = input.name ? ts.unescapeLeadingUnderscores(input.name.escapedText) : "default";
                         var newId_1 = factory.createUniqueName(oldId + "_base", 16 /* Optimistic */);
@@ -102477,16 +104655,16 @@
                             typeName: input.name
                         }); };
                         var varDecl = factory.createVariableDeclaration(newId_1, /*exclamationToken*/ undefined, resolver.createTypeOfExpression(extendsClause_1.expression, input, declarationEmitNodeBuilderFlags, symbolTracker), /*initializer*/ undefined);
-                        var statement = factory.createVariableStatement(needsDeclare ? [factory.createModifier(133 /* DeclareKeyword */)] : [], factory.createVariableDeclarationList([varDecl], 2 /* Const */));
+                        var statement = factory.createVariableStatement(needsDeclare ? [factory.createModifier(134 /* DeclareKeyword */)] : [], factory.createVariableDeclarationList([varDecl], 2 /* Const */));
                         var heritageClauses = factory.createNodeArray(ts.map(input.heritageClauses, function (clause) {
-                            if (clause.token === 93 /* ExtendsKeyword */) {
+                            if (clause.token === 94 /* ExtendsKeyword */) {
                                 var oldDiag_2 = getSymbolAccessibilityDiagnostic;
                                 getSymbolAccessibilityDiagnostic = ts.createGetSymbolAccessibilityDiagnosticForNode(clause.types[0]);
                                 var newClause = factory.updateHeritageClause(clause, ts.map(clause.types, function (t) { return factory.updateExpressionWithTypeArguments(t, newId_1, ts.visitNodes(t.typeArguments, visitDeclarationSubtree)); }));
                                 getSymbolAccessibilityDiagnostic = oldDiag_2;
                                 return newClause;
                             }
-                            return factory.updateHeritageClause(clause, ts.visitNodes(factory.createNodeArray(ts.filter(clause.types, function (t) { return ts.isEntityNameExpression(t.expression) || t.expression.kind === 103 /* NullKeyword */; })), visitDeclarationSubtree));
+                            return factory.updateHeritageClause(clause, ts.visitNodes(factory.createNodeArray(ts.filter(clause.types, function (t) { return ts.isEntityNameExpression(t.expression) || t.expression.kind === 104 /* NullKeyword */; })), visitDeclarationSubtree));
                         }));
                         return [statement, cleanup(factory.updateClassDeclaration(input, 
                             /*decorators*/ undefined, modifiers, input.name, typeParameters, heritageClauses, members))]; // TODO: GH#18217
@@ -102497,10 +104675,10 @@
                         /*decorators*/ undefined, modifiers, input.name, typeParameters, heritageClauses, members));
                     }
                 }
-                case 233 /* VariableStatement */: {
+                case 235 /* VariableStatement */: {
                     return cleanup(transformVariableStatement(input));
                 }
-                case 256 /* EnumDeclaration */: {
+                case 258 /* EnumDeclaration */: {
                     return cleanup(factory.updateEnumDeclaration(input, /*decorators*/ undefined, factory.createNodeArray(ensureModifiers(input)), input.name, factory.createNodeArray(ts.mapDefined(input.members, function (m) {
                         if (shouldStripInternal(m))
                             return;
@@ -102519,7 +104697,7 @@
                 if (canProdiceDiagnostic) {
                     getSymbolAccessibilityDiagnostic = oldDiag;
                 }
-                if (input.kind === 257 /* ModuleDeclaration */) {
+                if (input.kind === 259 /* ModuleDeclaration */) {
                     needsDeclare = previousNeedsDeclare;
                 }
                 if (node === input) {
@@ -102542,7 +104720,7 @@
             return ts.flatten(ts.mapDefined(d.elements, function (e) { return recreateBindingElement(e); }));
         }
         function recreateBindingElement(e) {
-            if (e.kind === 223 /* OmittedExpression */) {
+            if (e.kind === 225 /* OmittedExpression */) {
                 return;
             }
             if (e.name) {
@@ -102592,7 +104770,7 @@
         function ensureModifierFlags(node) {
             var mask = 27647 /* All */ ^ (4 /* Public */ | 256 /* Async */ | 16384 /* Override */); // No async and override modifiers in declaration files
             var additions = (needsDeclare && !isAlwaysType(node)) ? 2 /* Ambient */ : 0 /* None */;
-            var parentIsFile = node.parent.kind === 298 /* SourceFile */;
+            var parentIsFile = node.parent.kind === 300 /* SourceFile */;
             if (!parentIsFile || (isBundledEmit && parentIsFile && ts.isExternalModule(node.parent))) {
                 mask ^= 2 /* Ambient */;
                 additions = 0 /* None */;
@@ -102615,13 +104793,13 @@
         }
         function transformHeritageClauses(nodes) {
             return factory.createNodeArray(ts.filter(ts.map(nodes, function (clause) { return factory.updateHeritageClause(clause, ts.visitNodes(factory.createNodeArray(ts.filter(clause.types, function (t) {
-                return ts.isEntityNameExpression(t.expression) || (clause.token === 93 /* ExtendsKeyword */ && t.expression.kind === 103 /* NullKeyword */);
+                return ts.isEntityNameExpression(t.expression) || (clause.token === 94 /* ExtendsKeyword */ && t.expression.kind === 104 /* NullKeyword */);
             })), visitDeclarationSubtree)); }), function (clause) { return clause.types && !!clause.types.length; }));
         }
     }
     ts.transformDeclarations = transformDeclarations;
     function isAlwaysType(node) {
-        if (node.kind === 254 /* InterfaceDeclaration */) {
+        if (node.kind === 256 /* InterfaceDeclaration */) {
             return true;
         }
         return false;
@@ -102646,7 +104824,7 @@
     }
     function getTypeAnnotationFromAccessor(accessor) {
         if (accessor) {
-            return accessor.kind === 168 /* GetAccessor */
+            return accessor.kind === 170 /* GetAccessor */
                 ? accessor.type // Getter - return type
                 : accessor.parameters.length > 0
                     ? accessor.parameters[0].type // Setter parameter type
@@ -102655,52 +104833,52 @@
     }
     function canHaveLiteralInitializer(node) {
         switch (node.kind) {
-            case 164 /* PropertyDeclaration */:
-            case 163 /* PropertySignature */:
+            case 165 /* PropertyDeclaration */:
+            case 164 /* PropertySignature */:
                 return !ts.hasEffectiveModifier(node, 8 /* Private */);
-            case 161 /* Parameter */:
-            case 250 /* VariableDeclaration */:
+            case 162 /* Parameter */:
+            case 252 /* VariableDeclaration */:
                 return true;
         }
         return false;
     }
     function isPreservedDeclarationStatement(node) {
         switch (node.kind) {
-            case 252 /* FunctionDeclaration */:
-            case 257 /* ModuleDeclaration */:
-            case 261 /* ImportEqualsDeclaration */:
-            case 254 /* InterfaceDeclaration */:
-            case 253 /* ClassDeclaration */:
-            case 255 /* TypeAliasDeclaration */:
-            case 256 /* EnumDeclaration */:
-            case 233 /* VariableStatement */:
-            case 262 /* ImportDeclaration */:
-            case 268 /* ExportDeclaration */:
-            case 267 /* ExportAssignment */:
+            case 254 /* FunctionDeclaration */:
+            case 259 /* ModuleDeclaration */:
+            case 263 /* ImportEqualsDeclaration */:
+            case 256 /* InterfaceDeclaration */:
+            case 255 /* ClassDeclaration */:
+            case 257 /* TypeAliasDeclaration */:
+            case 258 /* EnumDeclaration */:
+            case 235 /* VariableStatement */:
+            case 264 /* ImportDeclaration */:
+            case 270 /* ExportDeclaration */:
+            case 269 /* ExportAssignment */:
                 return true;
         }
         return false;
     }
     function isProcessedComponent(node) {
         switch (node.kind) {
-            case 171 /* ConstructSignature */:
-            case 167 /* Constructor */:
-            case 166 /* MethodDeclaration */:
-            case 168 /* GetAccessor */:
-            case 169 /* SetAccessor */:
-            case 164 /* PropertyDeclaration */:
-            case 163 /* PropertySignature */:
-            case 165 /* MethodSignature */:
-            case 170 /* CallSignature */:
-            case 172 /* IndexSignature */:
-            case 250 /* VariableDeclaration */:
-            case 160 /* TypeParameter */:
-            case 224 /* ExpressionWithTypeArguments */:
-            case 174 /* TypeReference */:
-            case 185 /* ConditionalType */:
-            case 175 /* FunctionType */:
-            case 176 /* ConstructorType */:
-            case 196 /* ImportType */:
+            case 173 /* ConstructSignature */:
+            case 169 /* Constructor */:
+            case 167 /* MethodDeclaration */:
+            case 170 /* GetAccessor */:
+            case 171 /* SetAccessor */:
+            case 165 /* PropertyDeclaration */:
+            case 164 /* PropertySignature */:
+            case 166 /* MethodSignature */:
+            case 172 /* CallSignature */:
+            case 174 /* IndexSignature */:
+            case 252 /* VariableDeclaration */:
+            case 161 /* TypeParameter */:
+            case 226 /* ExpressionWithTypeArguments */:
+            case 176 /* TypeReference */:
+            case 187 /* ConditionalType */:
+            case 177 /* FunctionType */:
+            case 178 /* ConstructorType */:
+            case 198 /* ImportType */:
                 return true;
         }
         return false;
@@ -102835,7 +105013,7 @@
      * @param allowDtsFiles A value indicating whether to allow the transformation of .d.ts files.
      */
     function transformNodes(resolver, host, factory, options, nodes, transformers, allowDtsFiles) {
-        var enabledSyntaxKindFeatures = new Array(345 /* Count */);
+        var enabledSyntaxKindFeatures = new Array(350 /* Count */);
         var lexicalEnvironmentVariableDeclarations;
         var lexicalEnvironmentFunctionDeclarations;
         var lexicalEnvironmentStatements;
@@ -102917,7 +105095,7 @@
         var transformed = [];
         for (var _a = 0, nodes_3 = nodes; _a < nodes_3.length; _a++) {
             var node = nodes_3[_a];
-            ts.tracing === null || ts.tracing === void 0 ? void 0 : ts.tracing.push("emit" /* Emit */, "transformNodes", node.kind === 298 /* SourceFile */ ? { path: node.path } : { kind: node.kind, pos: node.pos, end: node.end });
+            ts.tracing === null || ts.tracing === void 0 ? void 0 : ts.tracing.push("emit" /* Emit */, "transformNodes", node.kind === 300 /* SourceFile */ ? { path: node.path } : { kind: node.kind, pos: node.pos, end: node.end });
             transformed.push((allowDtsFiles ? transformation : transformRoot)(node));
             ts.tracing === null || ts.tracing === void 0 ? void 0 : ts.tracing.pop();
         }
@@ -103090,7 +105268,7 @@
                 lexicalEnvironmentFunctionDeclarations ||
                 lexicalEnvironmentStatements) {
                 if (lexicalEnvironmentFunctionDeclarations) {
-                    statements = __spreadArray([], lexicalEnvironmentFunctionDeclarations);
+                    statements = __spreadArray([], lexicalEnvironmentFunctionDeclarations, true);
                 }
                 if (lexicalEnvironmentVariableDeclarations) {
                     var statement = factory.createVariableStatement(
@@ -103105,10 +105283,10 @@
                 }
                 if (lexicalEnvironmentStatements) {
                     if (!statements) {
-                        statements = __spreadArray([], lexicalEnvironmentStatements);
+                        statements = __spreadArray([], lexicalEnvironmentStatements, true);
                     }
                     else {
-                        statements = __spreadArray(__spreadArray([], statements), lexicalEnvironmentStatements);
+                        statements = __spreadArray(__spreadArray([], statements, true), lexicalEnvironmentStatements, true);
                     }
                 }
             }
@@ -103323,7 +105501,7 @@
     /*@internal*/
     function getOutputPathsFor(sourceFile, host, forceDtsPaths) {
         var options = host.getCompilerOptions();
-        if (sourceFile.kind === 299 /* Bundle */) {
+        if (sourceFile.kind === 301 /* Bundle */) {
             return getOutputPathsForBundle(options, forceDtsPaths);
         }
         else {
@@ -103690,7 +105868,7 @@
                     extendedDiagnostics: compilerOptions.extendedDiagnostics,
                     // Explicitly do not passthru either `inline` option
                 });
-                if (forceDtsEmit && declarationTransform.transformed[0].kind === 298 /* SourceFile */) {
+                if (forceDtsEmit && declarationTransform.transformed[0].kind === 300 /* SourceFile */) {
                     var sourceFile = declarationTransform.transformed[0];
                     exportedModulesFromDeclarationEmit = sourceFile.exportedModulesFromDeclarationEmit;
                 }
@@ -103701,7 +105879,7 @@
         }
         function collectLinkedAliases(node) {
             if (ts.isExportAssignment(node)) {
-                if (node.expression.kind === 78 /* Identifier */) {
+                if (node.expression.kind === 79 /* Identifier */) {
                     resolver.collectLinkedAliases(node.expression, /*setVisibility*/ true);
                 }
                 return;
@@ -103713,8 +105891,8 @@
             ts.forEachChild(node, collectLinkedAliases);
         }
         function printSourceFileOrBundle(jsFilePath, sourceMapFilePath, sourceFileOrBundle, printer, mapOptions) {
-            var bundle = sourceFileOrBundle.kind === 299 /* Bundle */ ? sourceFileOrBundle : undefined;
-            var sourceFile = sourceFileOrBundle.kind === 298 /* SourceFile */ ? sourceFileOrBundle : undefined;
+            var bundle = sourceFileOrBundle.kind === 301 /* Bundle */ ? sourceFileOrBundle : undefined;
+            var sourceFile = sourceFileOrBundle.kind === 300 /* SourceFile */ ? sourceFileOrBundle : undefined;
             var sourceFiles = bundle ? bundle.sourceFiles : [sourceFile];
             var sourceMapGenerator;
             if (shouldEmitSourceMaps(mapOptions, sourceFileOrBundle)) {
@@ -103755,7 +105933,7 @@
         }
         function shouldEmitSourceMaps(mapOptions, sourceFileOrBundle) {
             return (mapOptions.sourceMap || mapOptions.inlineSourceMap)
-                && (sourceFileOrBundle.kind !== 298 /* SourceFile */ || !ts.fileExtensionIs(sourceFileOrBundle.fileName, ".json" /* Json */));
+                && (sourceFileOrBundle.kind !== 300 /* SourceFile */ || !ts.fileExtensionIs(sourceFileOrBundle.fileName, ".json" /* Json */));
         }
         function getSourceRoot(mapOptions) {
             // Normalize source root and make sure it has trailing "/" so that it can be used to combine paths with the
@@ -103921,7 +106099,7 @@
         var prependNodes = ts.createPrependNodes(config.projectReferences, getCommandLine, function (f) { return host.readFile(f); });
         var sourceFilesForJsEmit = createSourceFilesFromBundleBuildInfo(buildInfo.bundle, buildInfoDirectory, host);
         var emitHost = {
-            getPrependNodes: ts.memoize(function () { return __spreadArray(__spreadArray([], prependNodes), [ownPrependInput]); }),
+            getPrependNodes: ts.memoize(function () { return __spreadArray(__spreadArray([], prependNodes, true), [ownPrependInput], false); }),
             getCanonicalFileName: host.getCanonicalFileName,
             getCommonSourceDirectory: function () { return ts.getNormalizedAbsolutePath(buildInfo.bundle.commonSourceDirectory, buildInfoDirectory); },
             getCompilerOptions: function () { return config.options; },
@@ -104066,9 +106244,9 @@
                     break;
             }
             switch (node.kind) {
-                case 298 /* SourceFile */: return printFile(node);
-                case 299 /* Bundle */: return printBundle(node);
-                case 300 /* UnparsedSource */: return printUnparsedSource(node);
+                case 300 /* SourceFile */: return printFile(node);
+                case 301 /* Bundle */: return printBundle(node);
+                case 302 /* UnparsedSource */: return printUnparsedSource(node);
             }
             writeNode(hint, node, sourceFile, beginPrint());
             return endPrint();
@@ -104388,316 +106566,318 @@
                     case 17 /* TemplateTail */:
                         return emitLiteral(node, /*jsxAttributeEscape*/ false);
                     // Identifiers
-                    case 78 /* Identifier */:
+                    case 79 /* Identifier */:
                         return emitIdentifier(node);
                     // PrivateIdentifiers
-                    case 79 /* PrivateIdentifier */:
+                    case 80 /* PrivateIdentifier */:
                         return emitPrivateIdentifier(node);
                     // Parse tree nodes
                     // Names
-                    case 158 /* QualifiedName */:
+                    case 159 /* QualifiedName */:
                         return emitQualifiedName(node);
-                    case 159 /* ComputedPropertyName */:
+                    case 160 /* ComputedPropertyName */:
                         return emitComputedPropertyName(node);
                     // Signature elements
-                    case 160 /* TypeParameter */:
+                    case 161 /* TypeParameter */:
                         return emitTypeParameter(node);
-                    case 161 /* Parameter */:
+                    case 162 /* Parameter */:
                         return emitParameter(node);
-                    case 162 /* Decorator */:
+                    case 163 /* Decorator */:
                         return emitDecorator(node);
                     // Type members
-                    case 163 /* PropertySignature */:
+                    case 164 /* PropertySignature */:
                         return emitPropertySignature(node);
-                    case 164 /* PropertyDeclaration */:
+                    case 165 /* PropertyDeclaration */:
                         return emitPropertyDeclaration(node);
-                    case 165 /* MethodSignature */:
+                    case 166 /* MethodSignature */:
                         return emitMethodSignature(node);
-                    case 166 /* MethodDeclaration */:
+                    case 167 /* MethodDeclaration */:
                         return emitMethodDeclaration(node);
-                    case 167 /* Constructor */:
+                    case 168 /* ClassStaticBlockDeclaration */:
+                        return emitClassStaticBlockDeclaration(node);
+                    case 169 /* Constructor */:
                         return emitConstructor(node);
-                    case 168 /* GetAccessor */:
-                    case 169 /* SetAccessor */:
+                    case 170 /* GetAccessor */:
+                    case 171 /* SetAccessor */:
                         return emitAccessorDeclaration(node);
-                    case 170 /* CallSignature */:
+                    case 172 /* CallSignature */:
                         return emitCallSignature(node);
-                    case 171 /* ConstructSignature */:
+                    case 173 /* ConstructSignature */:
                         return emitConstructSignature(node);
-                    case 172 /* IndexSignature */:
+                    case 174 /* IndexSignature */:
                         return emitIndexSignature(node);
                     // Types
-                    case 173 /* TypePredicate */:
+                    case 175 /* TypePredicate */:
                         return emitTypePredicate(node);
-                    case 174 /* TypeReference */:
+                    case 176 /* TypeReference */:
                         return emitTypeReference(node);
-                    case 175 /* FunctionType */:
+                    case 177 /* FunctionType */:
                         return emitFunctionType(node);
-                    case 176 /* ConstructorType */:
+                    case 178 /* ConstructorType */:
                         return emitConstructorType(node);
-                    case 177 /* TypeQuery */:
+                    case 179 /* TypeQuery */:
                         return emitTypeQuery(node);
-                    case 178 /* TypeLiteral */:
+                    case 180 /* TypeLiteral */:
                         return emitTypeLiteral(node);
-                    case 179 /* ArrayType */:
+                    case 181 /* ArrayType */:
                         return emitArrayType(node);
-                    case 180 /* TupleType */:
+                    case 182 /* TupleType */:
                         return emitTupleType(node);
-                    case 181 /* OptionalType */:
+                    case 183 /* OptionalType */:
                         return emitOptionalType(node);
                     // SyntaxKind.RestType is handled below
-                    case 183 /* UnionType */:
+                    case 185 /* UnionType */:
                         return emitUnionType(node);
-                    case 184 /* IntersectionType */:
+                    case 186 /* IntersectionType */:
                         return emitIntersectionType(node);
-                    case 185 /* ConditionalType */:
+                    case 187 /* ConditionalType */:
                         return emitConditionalType(node);
-                    case 186 /* InferType */:
+                    case 188 /* InferType */:
                         return emitInferType(node);
-                    case 187 /* ParenthesizedType */:
+                    case 189 /* ParenthesizedType */:
                         return emitParenthesizedType(node);
-                    case 224 /* ExpressionWithTypeArguments */:
+                    case 226 /* ExpressionWithTypeArguments */:
                         return emitExpressionWithTypeArguments(node);
-                    case 188 /* ThisType */:
+                    case 190 /* ThisType */:
                         return emitThisType();
-                    case 189 /* TypeOperator */:
+                    case 191 /* TypeOperator */:
                         return emitTypeOperator(node);
-                    case 190 /* IndexedAccessType */:
+                    case 192 /* IndexedAccessType */:
                         return emitIndexedAccessType(node);
-                    case 191 /* MappedType */:
+                    case 193 /* MappedType */:
                         return emitMappedType(node);
-                    case 192 /* LiteralType */:
+                    case 194 /* LiteralType */:
                         return emitLiteralType(node);
-                    case 193 /* NamedTupleMember */:
+                    case 195 /* NamedTupleMember */:
                         return emitNamedTupleMember(node);
-                    case 194 /* TemplateLiteralType */:
+                    case 196 /* TemplateLiteralType */:
                         return emitTemplateType(node);
-                    case 195 /* TemplateLiteralTypeSpan */:
+                    case 197 /* TemplateLiteralTypeSpan */:
                         return emitTemplateTypeSpan(node);
-                    case 196 /* ImportType */:
+                    case 198 /* ImportType */:
                         return emitImportTypeNode(node);
                     // Binding patterns
-                    case 197 /* ObjectBindingPattern */:
+                    case 199 /* ObjectBindingPattern */:
                         return emitObjectBindingPattern(node);
-                    case 198 /* ArrayBindingPattern */:
+                    case 200 /* ArrayBindingPattern */:
                         return emitArrayBindingPattern(node);
-                    case 199 /* BindingElement */:
+                    case 201 /* BindingElement */:
                         return emitBindingElement(node);
                     // Misc
-                    case 229 /* TemplateSpan */:
+                    case 231 /* TemplateSpan */:
                         return emitTemplateSpan(node);
-                    case 230 /* SemicolonClassElement */:
+                    case 232 /* SemicolonClassElement */:
                         return emitSemicolonClassElement();
                     // Statements
-                    case 231 /* Block */:
+                    case 233 /* Block */:
                         return emitBlock(node);
-                    case 233 /* VariableStatement */:
+                    case 235 /* VariableStatement */:
                         return emitVariableStatement(node);
-                    case 232 /* EmptyStatement */:
+                    case 234 /* EmptyStatement */:
                         return emitEmptyStatement(/*isEmbeddedStatement*/ false);
-                    case 234 /* ExpressionStatement */:
+                    case 236 /* ExpressionStatement */:
                         return emitExpressionStatement(node);
-                    case 235 /* IfStatement */:
+                    case 237 /* IfStatement */:
                         return emitIfStatement(node);
-                    case 236 /* DoStatement */:
+                    case 238 /* DoStatement */:
                         return emitDoStatement(node);
-                    case 237 /* WhileStatement */:
+                    case 239 /* WhileStatement */:
                         return emitWhileStatement(node);
-                    case 238 /* ForStatement */:
+                    case 240 /* ForStatement */:
                         return emitForStatement(node);
-                    case 239 /* ForInStatement */:
+                    case 241 /* ForInStatement */:
                         return emitForInStatement(node);
-                    case 240 /* ForOfStatement */:
+                    case 242 /* ForOfStatement */:
                         return emitForOfStatement(node);
-                    case 241 /* ContinueStatement */:
+                    case 243 /* ContinueStatement */:
                         return emitContinueStatement(node);
-                    case 242 /* BreakStatement */:
+                    case 244 /* BreakStatement */:
                         return emitBreakStatement(node);
-                    case 243 /* ReturnStatement */:
+                    case 245 /* ReturnStatement */:
                         return emitReturnStatement(node);
-                    case 244 /* WithStatement */:
+                    case 246 /* WithStatement */:
                         return emitWithStatement(node);
-                    case 245 /* SwitchStatement */:
+                    case 247 /* SwitchStatement */:
                         return emitSwitchStatement(node);
-                    case 246 /* LabeledStatement */:
+                    case 248 /* LabeledStatement */:
                         return emitLabeledStatement(node);
-                    case 247 /* ThrowStatement */:
+                    case 249 /* ThrowStatement */:
                         return emitThrowStatement(node);
-                    case 248 /* TryStatement */:
+                    case 250 /* TryStatement */:
                         return emitTryStatement(node);
-                    case 249 /* DebuggerStatement */:
+                    case 251 /* DebuggerStatement */:
                         return emitDebuggerStatement(node);
                     // Declarations
-                    case 250 /* VariableDeclaration */:
+                    case 252 /* VariableDeclaration */:
                         return emitVariableDeclaration(node);
-                    case 251 /* VariableDeclarationList */:
+                    case 253 /* VariableDeclarationList */:
                         return emitVariableDeclarationList(node);
-                    case 252 /* FunctionDeclaration */:
+                    case 254 /* FunctionDeclaration */:
                         return emitFunctionDeclaration(node);
-                    case 253 /* ClassDeclaration */:
+                    case 255 /* ClassDeclaration */:
                         return emitClassDeclaration(node);
-                    case 254 /* InterfaceDeclaration */:
+                    case 256 /* InterfaceDeclaration */:
                         return emitInterfaceDeclaration(node);
-                    case 255 /* TypeAliasDeclaration */:
+                    case 257 /* TypeAliasDeclaration */:
                         return emitTypeAliasDeclaration(node);
-                    case 256 /* EnumDeclaration */:
+                    case 258 /* EnumDeclaration */:
                         return emitEnumDeclaration(node);
-                    case 257 /* ModuleDeclaration */:
+                    case 259 /* ModuleDeclaration */:
                         return emitModuleDeclaration(node);
-                    case 258 /* ModuleBlock */:
+                    case 260 /* ModuleBlock */:
                         return emitModuleBlock(node);
-                    case 259 /* CaseBlock */:
+                    case 261 /* CaseBlock */:
                         return emitCaseBlock(node);
-                    case 260 /* NamespaceExportDeclaration */:
+                    case 262 /* NamespaceExportDeclaration */:
                         return emitNamespaceExportDeclaration(node);
-                    case 261 /* ImportEqualsDeclaration */:
+                    case 263 /* ImportEqualsDeclaration */:
                         return emitImportEqualsDeclaration(node);
-                    case 262 /* ImportDeclaration */:
+                    case 264 /* ImportDeclaration */:
                         return emitImportDeclaration(node);
-                    case 263 /* ImportClause */:
+                    case 265 /* ImportClause */:
                         return emitImportClause(node);
-                    case 264 /* NamespaceImport */:
+                    case 266 /* NamespaceImport */:
                         return emitNamespaceImport(node);
-                    case 270 /* NamespaceExport */:
+                    case 272 /* NamespaceExport */:
                         return emitNamespaceExport(node);
-                    case 265 /* NamedImports */:
+                    case 267 /* NamedImports */:
                         return emitNamedImports(node);
-                    case 266 /* ImportSpecifier */:
+                    case 268 /* ImportSpecifier */:
                         return emitImportSpecifier(node);
-                    case 267 /* ExportAssignment */:
+                    case 269 /* ExportAssignment */:
                         return emitExportAssignment(node);
-                    case 268 /* ExportDeclaration */:
+                    case 270 /* ExportDeclaration */:
                         return emitExportDeclaration(node);
-                    case 269 /* NamedExports */:
+                    case 271 /* NamedExports */:
                         return emitNamedExports(node);
-                    case 271 /* ExportSpecifier */:
+                    case 273 /* ExportSpecifier */:
                         return emitExportSpecifier(node);
-                    case 272 /* MissingDeclaration */:
+                    case 274 /* MissingDeclaration */:
                         return;
                     // Module references
-                    case 273 /* ExternalModuleReference */:
+                    case 275 /* ExternalModuleReference */:
                         return emitExternalModuleReference(node);
                     // JSX (non-expression)
                     case 11 /* JsxText */:
                         return emitJsxText(node);
-                    case 276 /* JsxOpeningElement */:
-                    case 279 /* JsxOpeningFragment */:
+                    case 278 /* JsxOpeningElement */:
+                    case 281 /* JsxOpeningFragment */:
                         return emitJsxOpeningElementOrFragment(node);
-                    case 277 /* JsxClosingElement */:
-                    case 280 /* JsxClosingFragment */:
+                    case 279 /* JsxClosingElement */:
+                    case 282 /* JsxClosingFragment */:
                         return emitJsxClosingElementOrFragment(node);
-                    case 281 /* JsxAttribute */:
+                    case 283 /* JsxAttribute */:
                         return emitJsxAttribute(node);
-                    case 282 /* JsxAttributes */:
+                    case 284 /* JsxAttributes */:
                         return emitJsxAttributes(node);
-                    case 283 /* JsxSpreadAttribute */:
+                    case 285 /* JsxSpreadAttribute */:
                         return emitJsxSpreadAttribute(node);
-                    case 284 /* JsxExpression */:
+                    case 286 /* JsxExpression */:
                         return emitJsxExpression(node);
                     // Clauses
-                    case 285 /* CaseClause */:
+                    case 287 /* CaseClause */:
                         return emitCaseClause(node);
-                    case 286 /* DefaultClause */:
+                    case 288 /* DefaultClause */:
                         return emitDefaultClause(node);
-                    case 287 /* HeritageClause */:
+                    case 289 /* HeritageClause */:
                         return emitHeritageClause(node);
-                    case 288 /* CatchClause */:
+                    case 290 /* CatchClause */:
                         return emitCatchClause(node);
                     // Property assignments
-                    case 289 /* PropertyAssignment */:
+                    case 291 /* PropertyAssignment */:
                         return emitPropertyAssignment(node);
-                    case 290 /* ShorthandPropertyAssignment */:
+                    case 292 /* ShorthandPropertyAssignment */:
                         return emitShorthandPropertyAssignment(node);
-                    case 291 /* SpreadAssignment */:
+                    case 293 /* SpreadAssignment */:
                         return emitSpreadAssignment(node);
                     // Enum
-                    case 292 /* EnumMember */:
+                    case 294 /* EnumMember */:
                         return emitEnumMember(node);
                     // Unparsed
-                    case 293 /* UnparsedPrologue */:
+                    case 295 /* UnparsedPrologue */:
                         return writeUnparsedNode(node);
-                    case 300 /* UnparsedSource */:
-                    case 294 /* UnparsedPrepend */:
+                    case 302 /* UnparsedSource */:
+                    case 296 /* UnparsedPrepend */:
                         return emitUnparsedSourceOrPrepend(node);
-                    case 295 /* UnparsedText */:
-                    case 296 /* UnparsedInternalText */:
+                    case 297 /* UnparsedText */:
+                    case 298 /* UnparsedInternalText */:
                         return emitUnparsedTextLike(node);
-                    case 297 /* UnparsedSyntheticReference */:
+                    case 299 /* UnparsedSyntheticReference */:
                         return emitUnparsedSyntheticReference(node);
                     // Top-level nodes
-                    case 298 /* SourceFile */:
+                    case 300 /* SourceFile */:
                         return emitSourceFile(node);
-                    case 299 /* Bundle */:
+                    case 301 /* Bundle */:
                         return ts.Debug.fail("Bundles should be printed using printBundle");
                     // SyntaxKind.UnparsedSource (handled above)
-                    case 301 /* InputFiles */:
+                    case 303 /* InputFiles */:
                         return ts.Debug.fail("InputFiles should not be printed");
                     // JSDoc nodes (only used in codefixes currently)
-                    case 302 /* JSDocTypeExpression */:
+                    case 304 /* JSDocTypeExpression */:
                         return emitJSDocTypeExpression(node);
-                    case 303 /* JSDocNameReference */:
+                    case 305 /* JSDocNameReference */:
                         return emitJSDocNameReference(node);
-                    case 304 /* JSDocAllType */:
+                    case 307 /* JSDocAllType */:
                         return writePunctuation("*");
-                    case 305 /* JSDocUnknownType */:
+                    case 308 /* JSDocUnknownType */:
                         return writePunctuation("?");
-                    case 306 /* JSDocNullableType */:
+                    case 309 /* JSDocNullableType */:
                         return emitJSDocNullableType(node);
-                    case 307 /* JSDocNonNullableType */:
+                    case 310 /* JSDocNonNullableType */:
                         return emitJSDocNonNullableType(node);
-                    case 308 /* JSDocOptionalType */:
+                    case 311 /* JSDocOptionalType */:
                         return emitJSDocOptionalType(node);
-                    case 309 /* JSDocFunctionType */:
+                    case 312 /* JSDocFunctionType */:
                         return emitJSDocFunctionType(node);
-                    case 182 /* RestType */:
-                    case 310 /* JSDocVariadicType */:
+                    case 184 /* RestType */:
+                    case 313 /* JSDocVariadicType */:
                         return emitRestOrJSDocVariadicType(node);
-                    case 311 /* JSDocNamepathType */:
+                    case 314 /* JSDocNamepathType */:
                         return;
-                    case 312 /* JSDocComment */:
+                    case 315 /* JSDocComment */:
                         return emitJSDoc(node);
-                    case 314 /* JSDocTypeLiteral */:
+                    case 317 /* JSDocTypeLiteral */:
                         return emitJSDocTypeLiteral(node);
-                    case 315 /* JSDocSignature */:
+                    case 318 /* JSDocSignature */:
                         return emitJSDocSignature(node);
-                    case 317 /* JSDocTag */:
-                    case 322 /* JSDocClassTag */:
+                    case 322 /* JSDocTag */:
+                    case 327 /* JSDocClassTag */:
                         return emitJSDocSimpleTag(node);
-                    case 318 /* JSDocAugmentsTag */:
-                    case 319 /* JSDocImplementsTag */:
+                    case 323 /* JSDocAugmentsTag */:
+                    case 324 /* JSDocImplementsTag */:
                         return emitJSDocHeritageTag(node);
-                    case 320 /* JSDocAuthorTag */:
-                    case 321 /* JSDocDeprecatedTag */:
+                    case 325 /* JSDocAuthorTag */:
+                    case 326 /* JSDocDeprecatedTag */:
                         return;
                     // SyntaxKind.JSDocClassTag (see JSDocTag, above)
-                    case 323 /* JSDocPublicTag */:
-                    case 324 /* JSDocPrivateTag */:
-                    case 325 /* JSDocProtectedTag */:
-                    case 326 /* JSDocReadonlyTag */:
-                    case 327 /* JSDocOverrideTag */:
+                    case 328 /* JSDocPublicTag */:
+                    case 329 /* JSDocPrivateTag */:
+                    case 330 /* JSDocProtectedTag */:
+                    case 331 /* JSDocReadonlyTag */:
+                    case 332 /* JSDocOverrideTag */:
                         return;
-                    case 328 /* JSDocCallbackTag */:
+                    case 333 /* JSDocCallbackTag */:
                         return emitJSDocCallbackTag(node);
                     // SyntaxKind.JSDocEnumTag (see below)
-                    case 330 /* JSDocParameterTag */:
-                    case 337 /* JSDocPropertyTag */:
+                    case 335 /* JSDocParameterTag */:
+                    case 342 /* JSDocPropertyTag */:
                         return emitJSDocPropertyLikeTag(node);
-                    case 329 /* JSDocEnumTag */:
-                    case 331 /* JSDocReturnTag */:
-                    case 332 /* JSDocThisTag */:
-                    case 333 /* JSDocTypeTag */:
+                    case 334 /* JSDocEnumTag */:
+                    case 336 /* JSDocReturnTag */:
+                    case 337 /* JSDocThisTag */:
+                    case 338 /* JSDocTypeTag */:
                         return emitJSDocSimpleTypedTag(node);
-                    case 334 /* JSDocTemplateTag */:
+                    case 339 /* JSDocTemplateTag */:
                         return emitJSDocTemplateTag(node);
-                    case 335 /* JSDocTypedefTag */:
+                    case 340 /* JSDocTypedefTag */:
                         return emitJSDocTypedefTag(node);
-                    case 336 /* JSDocSeeTag */:
+                    case 341 /* JSDocSeeTag */:
                         return emitJSDocSeeTag(node);
                     // SyntaxKind.JSDocPropertyTag (see JSDocParameterTag, above)
                     // Transformation nodes
-                    case 339 /* NotEmittedStatement */:
-                    case 343 /* EndOfDeclarationMarker */:
-                    case 342 /* MergeDeclarationMarker */:
+                    case 344 /* NotEmittedStatement */:
+                    case 348 /* EndOfDeclarationMarker */:
+                    case 347 /* MergeDeclarationMarker */:
                         return;
                 }
                 if (ts.isExpression(node)) {
@@ -104724,86 +106904,86 @@
                     case 14 /* NoSubstitutionTemplateLiteral */:
                         return emitLiteral(node, /*jsxAttributeEscape*/ false);
                     // Identifiers
-                    case 78 /* Identifier */:
+                    case 79 /* Identifier */:
                         return emitIdentifier(node);
                     // Expressions
-                    case 200 /* ArrayLiteralExpression */:
+                    case 202 /* ArrayLiteralExpression */:
                         return emitArrayLiteralExpression(node);
-                    case 201 /* ObjectLiteralExpression */:
+                    case 203 /* ObjectLiteralExpression */:
                         return emitObjectLiteralExpression(node);
-                    case 202 /* PropertyAccessExpression */:
+                    case 204 /* PropertyAccessExpression */:
                         return emitPropertyAccessExpression(node);
-                    case 203 /* ElementAccessExpression */:
+                    case 205 /* ElementAccessExpression */:
                         return emitElementAccessExpression(node);
-                    case 204 /* CallExpression */:
+                    case 206 /* CallExpression */:
                         return emitCallExpression(node);
-                    case 205 /* NewExpression */:
+                    case 207 /* NewExpression */:
                         return emitNewExpression(node);
-                    case 206 /* TaggedTemplateExpression */:
+                    case 208 /* TaggedTemplateExpression */:
                         return emitTaggedTemplateExpression(node);
-                    case 207 /* TypeAssertionExpression */:
+                    case 209 /* TypeAssertionExpression */:
                         return emitTypeAssertionExpression(node);
-                    case 208 /* ParenthesizedExpression */:
+                    case 210 /* ParenthesizedExpression */:
                         return emitParenthesizedExpression(node);
-                    case 209 /* FunctionExpression */:
+                    case 211 /* FunctionExpression */:
                         return emitFunctionExpression(node);
-                    case 210 /* ArrowFunction */:
+                    case 212 /* ArrowFunction */:
                         return emitArrowFunction(node);
-                    case 211 /* DeleteExpression */:
+                    case 213 /* DeleteExpression */:
                         return emitDeleteExpression(node);
-                    case 212 /* TypeOfExpression */:
+                    case 214 /* TypeOfExpression */:
                         return emitTypeOfExpression(node);
-                    case 213 /* VoidExpression */:
+                    case 215 /* VoidExpression */:
                         return emitVoidExpression(node);
-                    case 214 /* AwaitExpression */:
+                    case 216 /* AwaitExpression */:
                         return emitAwaitExpression(node);
-                    case 215 /* PrefixUnaryExpression */:
+                    case 217 /* PrefixUnaryExpression */:
                         return emitPrefixUnaryExpression(node);
-                    case 216 /* PostfixUnaryExpression */:
+                    case 218 /* PostfixUnaryExpression */:
                         return emitPostfixUnaryExpression(node);
-                    case 217 /* BinaryExpression */:
+                    case 219 /* BinaryExpression */:
                         return emitBinaryExpression(node);
-                    case 218 /* ConditionalExpression */:
+                    case 220 /* ConditionalExpression */:
                         return emitConditionalExpression(node);
-                    case 219 /* TemplateExpression */:
+                    case 221 /* TemplateExpression */:
                         return emitTemplateExpression(node);
-                    case 220 /* YieldExpression */:
+                    case 222 /* YieldExpression */:
                         return emitYieldExpression(node);
-                    case 221 /* SpreadElement */:
+                    case 223 /* SpreadElement */:
                         return emitSpreadElement(node);
-                    case 222 /* ClassExpression */:
+                    case 224 /* ClassExpression */:
                         return emitClassExpression(node);
-                    case 223 /* OmittedExpression */:
+                    case 225 /* OmittedExpression */:
                         return;
-                    case 225 /* AsExpression */:
+                    case 227 /* AsExpression */:
                         return emitAsExpression(node);
-                    case 226 /* NonNullExpression */:
+                    case 228 /* NonNullExpression */:
                         return emitNonNullExpression(node);
-                    case 227 /* MetaProperty */:
+                    case 229 /* MetaProperty */:
                         return emitMetaProperty(node);
-                    case 228 /* SyntheticExpression */:
+                    case 230 /* SyntheticExpression */:
                         return ts.Debug.fail("SyntheticExpression should never be printed.");
                     // JSX
-                    case 274 /* JsxElement */:
+                    case 276 /* JsxElement */:
                         return emitJsxElement(node);
-                    case 275 /* JsxSelfClosingElement */:
+                    case 277 /* JsxSelfClosingElement */:
                         return emitJsxSelfClosingElement(node);
-                    case 278 /* JsxFragment */:
+                    case 280 /* JsxFragment */:
                         return emitJsxFragment(node);
                     // Synthesized list
-                    case 338 /* SyntaxList */:
+                    case 343 /* SyntaxList */:
                         return ts.Debug.fail("SyntaxList should not be printed");
                     // Transformation nodes
-                    case 339 /* NotEmittedStatement */:
+                    case 344 /* NotEmittedStatement */:
                         return;
-                    case 340 /* PartiallyEmittedExpression */:
+                    case 345 /* PartiallyEmittedExpression */:
                         return emitPartiallyEmittedExpression(node);
-                    case 341 /* CommaListExpression */:
+                    case 346 /* CommaListExpression */:
                         return emitCommaList(node);
-                    case 342 /* MergeDeclarationMarker */:
-                    case 343 /* EndOfDeclarationMarker */:
+                    case 347 /* MergeDeclarationMarker */:
+                    case 348 /* EndOfDeclarationMarker */:
                         return;
-                    case 344 /* SyntheticReferenceExpression */:
+                    case 349 /* SyntheticReferenceExpression */:
                         return ts.Debug.fail("SyntheticReferenceExpression should not be printed");
                 }
             }
@@ -104851,7 +107031,7 @@
         }
         function emitHelpers(node) {
             var helpersEmitted = false;
-            var bundle = node.kind === 299 /* Bundle */ ? node : undefined;
+            var bundle = node.kind === 301 /* Bundle */ ? node : undefined;
             if (bundle && moduleKind === ts.ModuleKind.None) {
                 return;
             }
@@ -104951,7 +107131,7 @@
             var pos = getTextPosWithWriteLine();
             writeUnparsedNode(unparsed);
             if (bundleFileInfo) {
-                updateOrPushBundleFileTextLike(pos, writer.getTextPos(), unparsed.kind === 295 /* UnparsedText */ ?
+                updateOrPushBundleFileTextLike(pos, writer.getTextPos(), unparsed.kind === 297 /* UnparsedText */ ?
                     "text" /* Text */ :
                     "internal" /* Internal */);
             }
@@ -104988,7 +107168,7 @@
             emit(node.right);
         }
         function emitEntityName(node) {
-            if (node.kind === 78 /* Identifier */) {
+            if (node.kind === 79 /* Identifier */) {
                 emitExpression(node);
             }
             else {
@@ -105024,7 +107204,7 @@
             emit(node.dotDotDotToken);
             emitNodeWithWriter(node.name, writeParameter);
             emit(node.questionToken);
-            if (node.parent && node.parent.kind === 309 /* JSDocFunctionType */ && !node.name) {
+            if (node.parent && node.parent.kind === 312 /* JSDocFunctionType */ && !node.name) {
                 emit(node.type);
             }
             else {
@@ -105078,6 +107258,12 @@
             emit(node.questionToken);
             emitSignatureAndBody(node, emitSignatureHead);
         }
+        function emitClassStaticBlockDeclaration(node) {
+            emitDecorators(node, node.decorators);
+            emitModifiers(node, node.modifiers);
+            writeKeyword("static");
+            emitBlockFunctionBody(node.body);
+        }
         function emitConstructor(node) {
             emitModifiers(node, node.modifiers);
             writeKeyword("constructor");
@@ -105086,7 +107272,7 @@
         function emitAccessorDeclaration(node) {
             emitDecorators(node, node.decorators);
             emitModifiers(node, node.modifiers);
-            writeKeyword(node.kind === 168 /* GetAccessor */ ? "get" : "set");
+            writeKeyword(node.kind === 170 /* GetAccessor */ ? "get" : "set");
             writeSpace();
             emit(node.name);
             emitSignatureAndBody(node, emitSignatureHead);
@@ -105283,7 +107469,7 @@
             }
             if (node.readonlyToken) {
                 emit(node.readonlyToken);
-                if (node.readonlyToken.kind !== 142 /* ReadonlyKeyword */) {
+                if (node.readonlyToken.kind !== 143 /* ReadonlyKeyword */) {
                     writeKeyword("readonly");
                 }
                 writeSpace();
@@ -105432,20 +107618,40 @@
             emitTokenWithComment(23 /* CloseBracketToken */, node.argumentExpression.end, writePunctuation, node);
         }
         function emitCallExpression(node) {
+            var indirectCall = ts.getEmitFlags(node) & 536870912 /* IndirectCall */;
+            if (indirectCall) {
+                writePunctuation("(");
+                writeLiteral("0");
+                writePunctuation(",");
+                writeSpace();
+            }
             emitExpression(node.expression, parenthesizer.parenthesizeLeftSideOfAccess);
+            if (indirectCall) {
+                writePunctuation(")");
+            }
             emit(node.questionDotToken);
             emitTypeArguments(node, node.typeArguments);
             emitExpressionList(node, node.arguments, 2576 /* CallExpressionArguments */, parenthesizer.parenthesizeExpressionForDisallowedComma);
         }
         function emitNewExpression(node) {
-            emitTokenWithComment(102 /* NewKeyword */, node.pos, writeKeyword, node);
+            emitTokenWithComment(103 /* NewKeyword */, node.pos, writeKeyword, node);
             writeSpace();
             emitExpression(node.expression, parenthesizer.parenthesizeExpressionOfNew);
             emitTypeArguments(node, node.typeArguments);
             emitExpressionList(node, node.arguments, 18960 /* NewExpressionArguments */, parenthesizer.parenthesizeExpressionForDisallowedComma);
         }
         function emitTaggedTemplateExpression(node) {
+            var indirectCall = ts.getEmitFlags(node) & 536870912 /* IndirectCall */;
+            if (indirectCall) {
+                writePunctuation("(");
+                writeLiteral("0");
+                writePunctuation(",");
+                writeSpace();
+            }
             emitExpression(node.tag, parenthesizer.parenthesizeLeftSideOfAccess);
+            if (indirectCall) {
+                writePunctuation(")");
+            }
             emitTypeArguments(node, node.typeArguments);
             writeSpace();
             emitExpression(node.template);
@@ -105481,22 +107687,22 @@
             emit(node.equalsGreaterThanToken);
         }
         function emitDeleteExpression(node) {
-            emitTokenWithComment(88 /* DeleteKeyword */, node.pos, writeKeyword, node);
+            emitTokenWithComment(89 /* DeleteKeyword */, node.pos, writeKeyword, node);
             writeSpace();
             emitExpression(node.expression, parenthesizer.parenthesizeOperandOfPrefixUnary);
         }
         function emitTypeOfExpression(node) {
-            emitTokenWithComment(111 /* TypeOfKeyword */, node.pos, writeKeyword, node);
+            emitTokenWithComment(112 /* TypeOfKeyword */, node.pos, writeKeyword, node);
             writeSpace();
             emitExpression(node.expression, parenthesizer.parenthesizeOperandOfPrefixUnary);
         }
         function emitVoidExpression(node) {
-            emitTokenWithComment(113 /* VoidKeyword */, node.pos, writeKeyword, node);
+            emitTokenWithComment(114 /* VoidKeyword */, node.pos, writeKeyword, node);
             writeSpace();
             emitExpression(node.expression, parenthesizer.parenthesizeOperandOfPrefixUnary);
         }
         function emitAwaitExpression(node) {
-            emitTokenWithComment(130 /* AwaitKeyword */, node.pos, writeKeyword, node);
+            emitTokenWithComment(131 /* AwaitKeyword */, node.pos, writeKeyword, node);
             writeSpace();
             emitExpression(node.expression, parenthesizer.parenthesizeOperandOfPrefixUnary);
         }
@@ -105521,7 +107727,7 @@
             // expression a prefix increment whose operand is a plus expression - (++(+x))
             // The same is true of minus of course.
             var operand = node.operand;
-            return operand.kind === 215 /* PrefixUnaryExpression */
+            return operand.kind === 217 /* PrefixUnaryExpression */
                 && ((node.operator === 39 /* PlusToken */ && (operand.operator === 39 /* PlusToken */ || operand.operator === 45 /* PlusPlusToken */))
                     || (node.operator === 40 /* MinusToken */ && (operand.operator === 40 /* MinusToken */ || operand.operator === 46 /* MinusMinusToken */)));
         }
@@ -105569,7 +107775,7 @@
                 var linesAfterOperator = getLinesBetweenNodes(node, operatorToken, node.right);
                 writeLinesAndIndent(linesBeforeOperator, isCommaOperator);
                 emitLeadingCommentsOfPosition(operatorToken.pos);
-                writeTokenNode(operatorToken, operatorToken.kind === 100 /* InKeyword */ ? writeKeyword : writeOperator);
+                writeTokenNode(operatorToken, operatorToken.kind === 101 /* InKeyword */ ? writeKeyword : writeOperator);
                 emitTrailingCommentsOfPosition(operatorToken.end, /*prefixSpace*/ true); // Binary operators should have a space before the comment starts
                 writeLinesAndIndent(linesAfterOperator, /*writeSpaceIfNotIndenting*/ true);
             }
@@ -105640,7 +107846,7 @@
             emitList(node, node.templateSpans, 262144 /* TemplateExpressionSpans */);
         }
         function emitYieldExpression(node) {
-            emitTokenWithComment(124 /* YieldKeyword */, node.pos, writeKeyword, node);
+            emitTokenWithComment(125 /* YieldKeyword */, node.pos, writeKeyword, node);
             emit(node.asteriskToken);
             emitExpressionWithLeadingSpace(node.expression, parenthesizer.parenthesizeExpressionForDisallowedComma);
         }
@@ -105717,7 +107923,7 @@
             }
         }
         function emitIfStatement(node) {
-            var openParenPos = emitTokenWithComment(98 /* IfKeyword */, node.pos, writeKeyword, node);
+            var openParenPos = emitTokenWithComment(99 /* IfKeyword */, node.pos, writeKeyword, node);
             writeSpace();
             emitTokenWithComment(20 /* OpenParenToken */, openParenPos, writePunctuation, node);
             emitExpression(node.expression);
@@ -105725,8 +107931,8 @@
             emitEmbeddedStatement(node, node.thenStatement);
             if (node.elseStatement) {
                 writeLineOrSpace(node, node.thenStatement, node.elseStatement);
-                emitTokenWithComment(90 /* ElseKeyword */, node.thenStatement.end, writeKeyword, node);
-                if (node.elseStatement.kind === 235 /* IfStatement */) {
+                emitTokenWithComment(91 /* ElseKeyword */, node.thenStatement.end, writeKeyword, node);
+                if (node.elseStatement.kind === 237 /* IfStatement */) {
                     writeSpace();
                     emit(node.elseStatement);
                 }
@@ -105736,14 +107942,14 @@
             }
         }
         function emitWhileClause(node, startPos) {
-            var openParenPos = emitTokenWithComment(114 /* WhileKeyword */, startPos, writeKeyword, node);
+            var openParenPos = emitTokenWithComment(115 /* WhileKeyword */, startPos, writeKeyword, node);
             writeSpace();
             emitTokenWithComment(20 /* OpenParenToken */, openParenPos, writePunctuation, node);
             emitExpression(node.expression);
             emitTokenWithComment(21 /* CloseParenToken */, node.expression.end, writePunctuation, node);
         }
         function emitDoStatement(node) {
-            emitTokenWithComment(89 /* DoKeyword */, node.pos, writeKeyword, node);
+            emitTokenWithComment(90 /* DoKeyword */, node.pos, writeKeyword, node);
             emitEmbeddedStatement(node, node.statement);
             if (ts.isBlock(node.statement) && !preserveSourceNewlines) {
                 writeSpace();
@@ -105759,7 +107965,7 @@
             emitEmbeddedStatement(node, node.statement);
         }
         function emitForStatement(node) {
-            var openParenPos = emitTokenWithComment(96 /* ForKeyword */, node.pos, writeKeyword, node);
+            var openParenPos = emitTokenWithComment(97 /* ForKeyword */, node.pos, writeKeyword, node);
             writeSpace();
             var pos = emitTokenWithComment(20 /* OpenParenToken */, openParenPos, writePunctuation, /*contextNode*/ node);
             emitForBinding(node.initializer);
@@ -105771,25 +107977,25 @@
             emitEmbeddedStatement(node, node.statement);
         }
         function emitForInStatement(node) {
-            var openParenPos = emitTokenWithComment(96 /* ForKeyword */, node.pos, writeKeyword, node);
+            var openParenPos = emitTokenWithComment(97 /* ForKeyword */, node.pos, writeKeyword, node);
             writeSpace();
             emitTokenWithComment(20 /* OpenParenToken */, openParenPos, writePunctuation, node);
             emitForBinding(node.initializer);
             writeSpace();
-            emitTokenWithComment(100 /* InKeyword */, node.initializer.end, writeKeyword, node);
+            emitTokenWithComment(101 /* InKeyword */, node.initializer.end, writeKeyword, node);
             writeSpace();
             emitExpression(node.expression);
             emitTokenWithComment(21 /* CloseParenToken */, node.expression.end, writePunctuation, node);
             emitEmbeddedStatement(node, node.statement);
         }
         function emitForOfStatement(node) {
-            var openParenPos = emitTokenWithComment(96 /* ForKeyword */, node.pos, writeKeyword, node);
+            var openParenPos = emitTokenWithComment(97 /* ForKeyword */, node.pos, writeKeyword, node);
             writeSpace();
             emitWithTrailingSpace(node.awaitModifier);
             emitTokenWithComment(20 /* OpenParenToken */, openParenPos, writePunctuation, node);
             emitForBinding(node.initializer);
             writeSpace();
-            emitTokenWithComment(157 /* OfKeyword */, node.initializer.end, writeKeyword, node);
+            emitTokenWithComment(158 /* OfKeyword */, node.initializer.end, writeKeyword, node);
             writeSpace();
             emitExpression(node.expression);
             emitTokenWithComment(21 /* CloseParenToken */, node.expression.end, writePunctuation, node);
@@ -105797,7 +108003,7 @@
         }
         function emitForBinding(node) {
             if (node !== undefined) {
-                if (node.kind === 251 /* VariableDeclarationList */) {
+                if (node.kind === 253 /* VariableDeclarationList */) {
                     emit(node);
                 }
                 else {
@@ -105806,12 +108012,12 @@
             }
         }
         function emitContinueStatement(node) {
-            emitTokenWithComment(85 /* ContinueKeyword */, node.pos, writeKeyword, node);
+            emitTokenWithComment(86 /* ContinueKeyword */, node.pos, writeKeyword, node);
             emitWithLeadingSpace(node.label);
             writeTrailingSemicolon();
         }
         function emitBreakStatement(node) {
-            emitTokenWithComment(80 /* BreakKeyword */, node.pos, writeKeyword, node);
+            emitTokenWithComment(81 /* BreakKeyword */, node.pos, writeKeyword, node);
             emitWithLeadingSpace(node.label);
             writeTrailingSemicolon();
         }
@@ -105834,18 +108040,18 @@
             }
             pos = writeTokenText(token, writer, pos);
             if (isSimilarNode && contextNode.end !== pos) {
-                var isJsxExprContext = contextNode.kind === 284 /* JsxExpression */;
+                var isJsxExprContext = contextNode.kind === 286 /* JsxExpression */;
                 emitTrailingCommentsOfPosition(pos, /*prefixSpace*/ !isJsxExprContext, /*forceNoNewline*/ isJsxExprContext);
             }
             return pos;
         }
         function emitReturnStatement(node) {
-            emitTokenWithComment(104 /* ReturnKeyword */, node.pos, writeKeyword, /*contextNode*/ node);
+            emitTokenWithComment(105 /* ReturnKeyword */, node.pos, writeKeyword, /*contextNode*/ node);
             emitExpressionWithLeadingSpace(node.expression);
             writeTrailingSemicolon();
         }
         function emitWithStatement(node) {
-            var openParenPos = emitTokenWithComment(115 /* WithKeyword */, node.pos, writeKeyword, node);
+            var openParenPos = emitTokenWithComment(116 /* WithKeyword */, node.pos, writeKeyword, node);
             writeSpace();
             emitTokenWithComment(20 /* OpenParenToken */, openParenPos, writePunctuation, node);
             emitExpression(node.expression);
@@ -105853,7 +108059,7 @@
             emitEmbeddedStatement(node, node.statement);
         }
         function emitSwitchStatement(node) {
-            var openParenPos = emitTokenWithComment(106 /* SwitchKeyword */, node.pos, writeKeyword, node);
+            var openParenPos = emitTokenWithComment(107 /* SwitchKeyword */, node.pos, writeKeyword, node);
             writeSpace();
             emitTokenWithComment(20 /* OpenParenToken */, openParenPos, writePunctuation, node);
             emitExpression(node.expression);
@@ -105868,12 +108074,12 @@
             emit(node.statement);
         }
         function emitThrowStatement(node) {
-            emitTokenWithComment(108 /* ThrowKeyword */, node.pos, writeKeyword, node);
+            emitTokenWithComment(109 /* ThrowKeyword */, node.pos, writeKeyword, node);
             emitExpressionWithLeadingSpace(node.expression);
             writeTrailingSemicolon();
         }
         function emitTryStatement(node) {
-            emitTokenWithComment(110 /* TryKeyword */, node.pos, writeKeyword, node);
+            emitTokenWithComment(111 /* TryKeyword */, node.pos, writeKeyword, node);
             writeSpace();
             emit(node.tryBlock);
             if (node.catchClause) {
@@ -105882,13 +108088,13 @@
             }
             if (node.finallyBlock) {
                 writeLineOrSpace(node, node.catchClause || node.tryBlock, node.finallyBlock);
-                emitTokenWithComment(95 /* FinallyKeyword */, (node.catchClause || node.tryBlock).end, writeKeyword, node);
+                emitTokenWithComment(96 /* FinallyKeyword */, (node.catchClause || node.tryBlock).end, writeKeyword, node);
                 writeSpace();
                 emit(node.finallyBlock);
             }
         }
         function emitDebuggerStatement(node) {
-            writeToken(86 /* DebuggerKeyword */, node.pos, writeKeyword);
+            writeToken(87 /* DebuggerKeyword */, node.pos, writeKeyword);
             writeTrailingSemicolon();
         }
         //
@@ -106109,21 +108315,21 @@
         }
         function emitImportEqualsDeclaration(node) {
             emitModifiers(node, node.modifiers);
-            emitTokenWithComment(99 /* ImportKeyword */, node.modifiers ? node.modifiers.end : node.pos, writeKeyword, node);
+            emitTokenWithComment(100 /* ImportKeyword */, node.modifiers ? node.modifiers.end : node.pos, writeKeyword, node);
             writeSpace();
             if (node.isTypeOnly) {
-                emitTokenWithComment(149 /* TypeKeyword */, node.pos, writeKeyword, node);
+                emitTokenWithComment(150 /* TypeKeyword */, node.pos, writeKeyword, node);
                 writeSpace();
             }
             emit(node.name);
             writeSpace();
-            emitTokenWithComment(62 /* EqualsToken */, node.name.end, writePunctuation, node);
+            emitTokenWithComment(63 /* EqualsToken */, node.name.end, writePunctuation, node);
             writeSpace();
             emitModuleReference(node.moduleReference);
             writeTrailingSemicolon();
         }
         function emitModuleReference(node) {
-            if (node.kind === 78 /* Identifier */) {
+            if (node.kind === 79 /* Identifier */) {
                 emitExpression(node);
             }
             else {
@@ -106132,12 +108338,12 @@
         }
         function emitImportDeclaration(node) {
             emitModifiers(node, node.modifiers);
-            emitTokenWithComment(99 /* ImportKeyword */, node.modifiers ? node.modifiers.end : node.pos, writeKeyword, node);
+            emitTokenWithComment(100 /* ImportKeyword */, node.modifiers ? node.modifiers.end : node.pos, writeKeyword, node);
             writeSpace();
             if (node.importClause) {
                 emit(node.importClause);
                 writeSpace();
-                emitTokenWithComment(153 /* FromKeyword */, node.importClause.end, writeKeyword, node);
+                emitTokenWithComment(154 /* FromKeyword */, node.importClause.end, writeKeyword, node);
                 writeSpace();
             }
             emitExpression(node.moduleSpecifier);
@@ -106145,7 +108351,7 @@
         }
         function emitImportClause(node) {
             if (node.isTypeOnly) {
-                emitTokenWithComment(149 /* TypeKeyword */, node.pos, writeKeyword, node);
+                emitTokenWithComment(150 /* TypeKeyword */, node.pos, writeKeyword, node);
                 writeSpace();
             }
             emit(node.name);
@@ -106158,7 +108364,7 @@
         function emitNamespaceImport(node) {
             var asPos = emitTokenWithComment(41 /* AsteriskToken */, node.pos, writePunctuation, node);
             writeSpace();
-            emitTokenWithComment(126 /* AsKeyword */, asPos, writeKeyword, node);
+            emitTokenWithComment(127 /* AsKeyword */, asPos, writeKeyword, node);
             writeSpace();
             emit(node.name);
         }
@@ -106169,25 +108375,25 @@
             emitImportOrExportSpecifier(node);
         }
         function emitExportAssignment(node) {
-            var nextPos = emitTokenWithComment(92 /* ExportKeyword */, node.pos, writeKeyword, node);
+            var nextPos = emitTokenWithComment(93 /* ExportKeyword */, node.pos, writeKeyword, node);
             writeSpace();
             if (node.isExportEquals) {
-                emitTokenWithComment(62 /* EqualsToken */, nextPos, writeOperator, node);
+                emitTokenWithComment(63 /* EqualsToken */, nextPos, writeOperator, node);
             }
             else {
-                emitTokenWithComment(87 /* DefaultKeyword */, nextPos, writeKeyword, node);
+                emitTokenWithComment(88 /* DefaultKeyword */, nextPos, writeKeyword, node);
             }
             writeSpace();
             emitExpression(node.expression, node.isExportEquals ?
-                parenthesizer.getParenthesizeRightSideOfBinaryForOperator(62 /* EqualsToken */) :
+                parenthesizer.getParenthesizeRightSideOfBinaryForOperator(63 /* EqualsToken */) :
                 parenthesizer.parenthesizeExpressionOfExportDefault);
             writeTrailingSemicolon();
         }
         function emitExportDeclaration(node) {
-            var nextPos = emitTokenWithComment(92 /* ExportKeyword */, node.pos, writeKeyword, node);
+            var nextPos = emitTokenWithComment(93 /* ExportKeyword */, node.pos, writeKeyword, node);
             writeSpace();
             if (node.isTypeOnly) {
-                nextPos = emitTokenWithComment(149 /* TypeKeyword */, nextPos, writeKeyword, node);
+                nextPos = emitTokenWithComment(150 /* TypeKeyword */, nextPos, writeKeyword, node);
                 writeSpace();
             }
             if (node.exportClause) {
@@ -106199,18 +108405,18 @@
             if (node.moduleSpecifier) {
                 writeSpace();
                 var fromPos = node.exportClause ? node.exportClause.end : nextPos;
-                emitTokenWithComment(153 /* FromKeyword */, fromPos, writeKeyword, node);
+                emitTokenWithComment(154 /* FromKeyword */, fromPos, writeKeyword, node);
                 writeSpace();
                 emitExpression(node.moduleSpecifier);
             }
             writeTrailingSemicolon();
         }
         function emitNamespaceExportDeclaration(node) {
-            var nextPos = emitTokenWithComment(92 /* ExportKeyword */, node.pos, writeKeyword, node);
+            var nextPos = emitTokenWithComment(93 /* ExportKeyword */, node.pos, writeKeyword, node);
             writeSpace();
-            nextPos = emitTokenWithComment(126 /* AsKeyword */, nextPos, writeKeyword, node);
+            nextPos = emitTokenWithComment(127 /* AsKeyword */, nextPos, writeKeyword, node);
             writeSpace();
-            nextPos = emitTokenWithComment(140 /* NamespaceKeyword */, nextPos, writeKeyword, node);
+            nextPos = emitTokenWithComment(141 /* NamespaceKeyword */, nextPos, writeKeyword, node);
             writeSpace();
             emit(node.name);
             writeTrailingSemicolon();
@@ -106218,7 +108424,7 @@
         function emitNamespaceExport(node) {
             var asPos = emitTokenWithComment(41 /* AsteriskToken */, node.pos, writePunctuation, node);
             writeSpace();
-            emitTokenWithComment(126 /* AsKeyword */, asPos, writeKeyword, node);
+            emitTokenWithComment(127 /* AsKeyword */, asPos, writeKeyword, node);
             writeSpace();
             emit(node.name);
         }
@@ -106237,7 +108443,7 @@
             if (node.propertyName) {
                 emit(node.propertyName);
                 writeSpace();
-                emitTokenWithComment(126 /* AsKeyword */, node.propertyName.end, writeKeyword, node);
+                emitTokenWithComment(127 /* AsKeyword */, node.propertyName.end, writeKeyword, node);
                 writeSpace();
             }
             emit(node.name);
@@ -106339,7 +108545,7 @@
             }
         }
         function emitJsxTagName(node) {
-            if (node.kind === 78 /* Identifier */) {
+            if (node.kind === 79 /* Identifier */) {
                 emitExpression(node);
             }
             else {
@@ -106350,13 +108556,13 @@
         // Clauses
         //
         function emitCaseClause(node) {
-            emitTokenWithComment(81 /* CaseKeyword */, node.pos, writeKeyword, node);
+            emitTokenWithComment(82 /* CaseKeyword */, node.pos, writeKeyword, node);
             writeSpace();
             emitExpression(node.expression, parenthesizer.parenthesizeExpressionForDisallowedComma);
             emitCaseOrDefaultClauseRest(node, node.statements, node.expression.end);
         }
         function emitDefaultClause(node) {
-            var pos = emitTokenWithComment(87 /* DefaultKeyword */, node.pos, writeKeyword, node);
+            var pos = emitTokenWithComment(88 /* DefaultKeyword */, node.pos, writeKeyword, node);
             emitCaseOrDefaultClauseRest(node, node.statements, pos);
         }
         function emitCaseOrDefaultClauseRest(parentNode, statements, colonPos) {
@@ -106384,7 +108590,7 @@
             emitList(node, node.types, 528 /* HeritageClauseTypes */);
         }
         function emitCatchClause(node) {
-            var openParenPos = emitTokenWithComment(82 /* CatchKeyword */, node.pos, writeKeyword, node);
+            var openParenPos = emitTokenWithComment(83 /* CatchKeyword */, node.pos, writeKeyword, node);
             writeSpace();
             if (node.variableDeclaration) {
                 emitTokenWithComment(20 /* OpenParenToken */, openParenPos, writePunctuation, node);
@@ -106457,7 +108663,7 @@
                 }
             }
             if (node.tags) {
-                if (node.tags.length === 1 && node.tags[0].kind === 333 /* JSDocTypeTag */ && !node.comment) {
+                if (node.tags.length === 1 && node.tags[0].kind === 338 /* JSDocTypeTag */ && !node.comment) {
                     writeSpace();
                     emit(node.tags[0]);
                 }
@@ -106502,7 +108708,7 @@
         function emitJSDocTypedefTag(tag) {
             emitJSDocTagName(tag.tagName);
             if (tag.typeExpression) {
-                if (tag.typeExpression.kind === 302 /* JSDocTypeExpression */) {
+                if (tag.typeExpression.kind === 304 /* JSDocTypeExpression */) {
                     emitJSDocTypeExpression(tag.typeExpression);
                 }
                 else {
@@ -106521,7 +108727,7 @@
                 emit(tag.fullName);
             }
             emitJSDocComment(tag.comment);
-            if (tag.typeExpression && tag.typeExpression.kind === 314 /* JSDocTypeLiteral */) {
+            if (tag.typeExpression && tag.typeExpression.kind === 317 /* JSDocTypeLiteral */) {
                 emitJSDocTypeLiteral(tag.typeExpression);
             }
         }
@@ -106648,16 +108854,16 @@
                     writeLine();
                 }
             }
-            for (var _c = 0, files_1 = files; _c < files_1.length; _c++) {
-                var directive = files_1[_c];
+            for (var _c = 0, files_2 = files; _c < files_2.length; _c++) {
+                var directive = files_2[_c];
                 var pos = writer.getTextPos();
                 writeComment("/// <reference path=\"" + directive.fileName + "\" />");
                 if (bundleFileInfo)
                     bundleFileInfo.sections.push({ pos: pos, end: writer.getTextPos(), kind: "reference" /* Reference */, data: directive.fileName });
                 writeLine();
             }
-            for (var _d = 0, types_25 = types; _d < types_25.length; _d++) {
-                var directive = types_25[_d];
+            for (var _d = 0, types_24 = types; _d < types_24.length; _d++) {
+                var directive = types_24[_d];
                 var pos = writer.getTextPos();
                 writeComment("/// <reference types=\"" + directive.fileName + "\" />");
                 if (bundleFileInfo)
@@ -106837,7 +109043,7 @@
         function emitInitializer(node, equalCommentStartPos, container, parenthesizerRule) {
             if (node) {
                 writeSpace();
-                emitTokenWithComment(62 /* EqualsToken */, equalCommentStartPos, writeOperator, container);
+                emitTokenWithComment(63 /* EqualsToken */, equalCommentStartPos, writeOperator, container);
                 writeSpace();
                 emitExpression(node, parenthesizerRule);
             }
@@ -107408,7 +109614,7 @@
                 && ts.rangeEndIsOnSameLineAsRangeStart(block, block, currentSourceFile);
         }
         function skipSynthesizedParentheses(node) {
-            while (node.kind === 208 /* ParenthesizedExpression */ && ts.nodeIsSynthesized(node)) {
+            while (node.kind === 210 /* ParenthesizedExpression */ && ts.nodeIsSynthesized(node)) {
                 node = node.expression;
             }
             return node;
@@ -107478,84 +109684,84 @@
             if (!node)
                 return;
             switch (node.kind) {
-                case 231 /* Block */:
+                case 233 /* Block */:
                     ts.forEach(node.statements, generateNames);
                     break;
-                case 246 /* LabeledStatement */:
-                case 244 /* WithStatement */:
-                case 236 /* DoStatement */:
-                case 237 /* WhileStatement */:
+                case 248 /* LabeledStatement */:
+                case 246 /* WithStatement */:
+                case 238 /* DoStatement */:
+                case 239 /* WhileStatement */:
                     generateNames(node.statement);
                     break;
-                case 235 /* IfStatement */:
+                case 237 /* IfStatement */:
                     generateNames(node.thenStatement);
                     generateNames(node.elseStatement);
                     break;
-                case 238 /* ForStatement */:
-                case 240 /* ForOfStatement */:
-                case 239 /* ForInStatement */:
+                case 240 /* ForStatement */:
+                case 242 /* ForOfStatement */:
+                case 241 /* ForInStatement */:
                     generateNames(node.initializer);
                     generateNames(node.statement);
                     break;
-                case 245 /* SwitchStatement */:
+                case 247 /* SwitchStatement */:
                     generateNames(node.caseBlock);
                     break;
-                case 259 /* CaseBlock */:
+                case 261 /* CaseBlock */:
                     ts.forEach(node.clauses, generateNames);
                     break;
-                case 285 /* CaseClause */:
-                case 286 /* DefaultClause */:
+                case 287 /* CaseClause */:
+                case 288 /* DefaultClause */:
                     ts.forEach(node.statements, generateNames);
                     break;
-                case 248 /* TryStatement */:
+                case 250 /* TryStatement */:
                     generateNames(node.tryBlock);
                     generateNames(node.catchClause);
                     generateNames(node.finallyBlock);
                     break;
-                case 288 /* CatchClause */:
+                case 290 /* CatchClause */:
                     generateNames(node.variableDeclaration);
                     generateNames(node.block);
                     break;
-                case 233 /* VariableStatement */:
+                case 235 /* VariableStatement */:
                     generateNames(node.declarationList);
                     break;
-                case 251 /* VariableDeclarationList */:
+                case 253 /* VariableDeclarationList */:
                     ts.forEach(node.declarations, generateNames);
                     break;
-                case 250 /* VariableDeclaration */:
-                case 161 /* Parameter */:
-                case 199 /* BindingElement */:
-                case 253 /* ClassDeclaration */:
+                case 252 /* VariableDeclaration */:
+                case 162 /* Parameter */:
+                case 201 /* BindingElement */:
+                case 255 /* ClassDeclaration */:
                     generateNameIfNeeded(node.name);
                     break;
-                case 252 /* FunctionDeclaration */:
+                case 254 /* FunctionDeclaration */:
                     generateNameIfNeeded(node.name);
                     if (ts.getEmitFlags(node) & 524288 /* ReuseTempVariableScope */) {
                         ts.forEach(node.parameters, generateNames);
                         generateNames(node.body);
                     }
                     break;
-                case 197 /* ObjectBindingPattern */:
-                case 198 /* ArrayBindingPattern */:
+                case 199 /* ObjectBindingPattern */:
+                case 200 /* ArrayBindingPattern */:
                     ts.forEach(node.elements, generateNames);
                     break;
-                case 262 /* ImportDeclaration */:
+                case 264 /* ImportDeclaration */:
                     generateNames(node.importClause);
                     break;
-                case 263 /* ImportClause */:
+                case 265 /* ImportClause */:
                     generateNameIfNeeded(node.name);
                     generateNames(node.namedBindings);
                     break;
-                case 264 /* NamespaceImport */:
+                case 266 /* NamespaceImport */:
                     generateNameIfNeeded(node.name);
                     break;
-                case 270 /* NamespaceExport */:
+                case 272 /* NamespaceExport */:
                     generateNameIfNeeded(node.name);
                     break;
-                case 265 /* NamedImports */:
+                case 267 /* NamedImports */:
                     ts.forEach(node.elements, generateNames);
                     break;
-                case 266 /* ImportSpecifier */:
+                case 268 /* ImportSpecifier */:
                     generateNameIfNeeded(node.propertyName || node.name);
                     break;
             }
@@ -107564,12 +109770,12 @@
             if (!node)
                 return;
             switch (node.kind) {
-                case 289 /* PropertyAssignment */:
-                case 290 /* ShorthandPropertyAssignment */:
-                case 164 /* PropertyDeclaration */:
-                case 166 /* MethodDeclaration */:
-                case 168 /* GetAccessor */:
-                case 169 /* SetAccessor */:
+                case 291 /* PropertyAssignment */:
+                case 292 /* ShorthandPropertyAssignment */:
+                case 165 /* PropertyDeclaration */:
+                case 167 /* MethodDeclaration */:
+                case 170 /* GetAccessor */:
+                case 171 /* SetAccessor */:
                     generateNameIfNeeded(node.name);
                     break;
             }
@@ -107749,25 +109955,25 @@
          */
         function generateNameForNode(node, flags) {
             switch (node.kind) {
-                case 78 /* Identifier */:
+                case 79 /* Identifier */:
                     return makeUniqueName(getTextOfNode(node), isUniqueName, !!(flags & 16 /* Optimistic */), !!(flags & 8 /* ReservedInNestedScopes */));
-                case 257 /* ModuleDeclaration */:
-                case 256 /* EnumDeclaration */:
+                case 259 /* ModuleDeclaration */:
+                case 258 /* EnumDeclaration */:
                     return generateNameForModuleOrEnum(node);
-                case 262 /* ImportDeclaration */:
-                case 268 /* ExportDeclaration */:
+                case 264 /* ImportDeclaration */:
+                case 270 /* ExportDeclaration */:
                     return generateNameForImportOrExportDeclaration(node);
-                case 252 /* FunctionDeclaration */:
-                case 253 /* ClassDeclaration */:
-                case 267 /* ExportAssignment */:
+                case 254 /* FunctionDeclaration */:
+                case 255 /* ClassDeclaration */:
+                case 269 /* ExportAssignment */:
                     return generateNameForExportDefault();
-                case 222 /* ClassExpression */:
+                case 224 /* ClassExpression */:
                     return generateNameForClassExpression();
-                case 166 /* MethodDeclaration */:
-                case 168 /* GetAccessor */:
-                case 169 /* SetAccessor */:
+                case 167 /* MethodDeclaration */:
+                case 170 /* GetAccessor */:
+                case 171 /* SetAccessor */:
                     return generateNameForMethodOrAccessor(node);
-                case 159 /* ComputedPropertyName */:
+                case 160 /* ComputedPropertyName */:
                     return makeTempVariableName(0 /* Auto */, /*reserveInNestedScopes*/ true);
                 default:
                     return makeTempVariableName(0 /* Auto */);
@@ -107848,7 +110054,7 @@
                 // Emit leading comments if the position is not synthesized and the node
                 // has not opted out from emitting leading comments.
                 if (!skipLeadingComments) {
-                    emitLeadingComments(pos, /*isEmittedNode*/ node.kind !== 339 /* NotEmittedStatement */);
+                    emitLeadingComments(pos, /*isEmittedNode*/ node.kind !== 344 /* NotEmittedStatement */);
                 }
                 if (!skipLeadingComments || (pos >= 0 && (emitFlags & 512 /* NoLeadingComments */) !== 0)) {
                     // Advance the container position if comments get emitted or if they've been disabled explicitly using NoLeadingComments.
@@ -107859,7 +110065,7 @@
                     containerEnd = end;
                     // To avoid invalid comment emit in a down-level binding pattern, we
                     // keep track of the last declaration list container's end
-                    if (node.kind === 251 /* VariableDeclarationList */) {
+                    if (node.kind === 253 /* VariableDeclarationList */) {
                         declarationListContainerEnd = end;
                     }
                 }
@@ -107878,7 +110084,7 @@
                 declarationListContainerEnd = savedDeclarationListContainerEnd;
                 // Emit trailing comments if the position is not synthesized and the node
                 // has not opted out from emitting leading comments and is an emitted node.
-                if (!skipTrailingComments && node.kind !== 339 /* NotEmittedStatement */) {
+                if (!skipTrailingComments && node.kind !== 344 /* NotEmittedStatement */) {
                     emitTrailingComments(end);
                 }
             }
@@ -108153,7 +110359,7 @@
             }
             else {
                 var source = sourceMapRange.source || sourceMapSource;
-                if (node.kind !== 339 /* NotEmittedStatement */
+                if (node.kind !== 344 /* NotEmittedStatement */
                     && (emitFlags & 16 /* NoLeadingSourceMap */) === 0
                     && sourceMapRange.pos >= 0) {
                     emitSourcePos(sourceMapRange.source || sourceMapSource, skipSourceTrivia(source, sourceMapRange.pos));
@@ -108171,7 +110377,7 @@
                 if (emitFlags & 64 /* NoNestedSourceMaps */) {
                     sourceMapsDisabled = false;
                 }
-                if (node.kind !== 339 /* NotEmittedStatement */
+                if (node.kind !== 344 /* NotEmittedStatement */
                     && (emitFlags & 32 /* NoTrailingSourceMap */) === 0
                     && sourceMapRange.end >= 0) {
                     emitSourcePos(sourceMapRange.source || sourceMapSource, sourceMapRange.end);
@@ -108421,7 +110627,7 @@
             var rootResult = tryReadDirectory(rootDir, rootDirPath);
             var rootSymLinkResult;
             if (rootResult !== undefined) {
-                return ts.matchFiles(rootDir, extensions, excludes, includes, useCaseSensitiveFileNames, currentDirectory, depth, getFileSystemEntries, realpath);
+                return ts.matchFiles(rootDir, extensions, excludes, includes, useCaseSensitiveFileNames, currentDirectory, depth, getFileSystemEntries, realpath, directoryExists);
             }
             return host.readDirectory(rootDir, extensions, excludes, includes, depth);
             function getFileSystemEntries(dir) {
@@ -108570,6 +110776,17 @@
     }
     ts.cleanExtendedConfigCache = cleanExtendedConfigCache;
     /**
+     * Updates watchers based on the package json files used in module resolution
+     */
+    function updatePackageJsonWatch(lookups, packageJsonWatches, createPackageJsonWatch) {
+        var newMap = new ts.Map(lookups);
+        ts.mutateMap(packageJsonWatches, newMap, {
+            createNewValue: createPackageJsonWatch,
+            onDeleteValue: ts.closeFileWatcher
+        });
+    }
+    ts.updatePackageJsonWatch = updatePackageJsonWatch;
+    /**
      * Updates the existing missing file watches with the new set of missing files after new program is created
      */
     function updateMissingFilePathsWatch(program, missingFileWatches, createMissingFileWatch) {
@@ -108643,7 +110860,7 @@
             return false;
         // We want to ignore emit file check if file is not going to be emitted next to source file
         // In that case we follow config file inclusion rules
-        if (options.outFile || options.outDir)
+        if (ts.outFile(options) || options.outDir)
             return false;
         // File if emitted next to input needs to be ignored
         if (ts.fileExtensionIs(fileOrDirectoryPath, ".d.ts" /* Dts */)) {
@@ -108770,7 +110987,7 @@
                 var triggerredInfo = (key === "watchFile" ? "FileWatcher" : "DirectoryWatcher") + ":: Triggered with " + args[0] + " " + (args[1] !== undefined ? args[1] : "") + ":: " + getWatchInfo(file, flags, options, detailInfo1, detailInfo2, getDetailWatchInfo);
                 log(triggerredInfo);
                 var start = ts.timestamp();
-                cb.call.apply(cb, __spreadArray([/*thisArg*/ undefined], args));
+                cb.call.apply(cb, __spreadArray([/*thisArg*/ undefined], args, false));
                 var elapsed = ts.timestamp() - start;
                 log("Elapsed:: " + elapsed + "ms " + triggerredInfo);
             }, flags, options, detailInfo1, detailInfo2); };
@@ -109142,7 +111359,7 @@
             var lineStart = ts.getPositionOfLineAndCharacter(file, i, 0);
             var lineEnd = i < lastLineInFile ? ts.getPositionOfLineAndCharacter(file, i + 1, 0) : file.text.length;
             var lineContent = file.text.slice(lineStart, lineEnd);
-            lineContent = lineContent.replace(/\s+$/g, ""); // trim from end
+            lineContent = ts.trimStringEnd(lineContent); // trim from end
             lineContent = lineContent.replace(/\t/g, " "); // convert tabs to single spaces
             // Output the gutter and the actual contents of the line.
             context += indent + formatColorAndReset(ts.padLeft(i + 1 + "", gutterWidth), gutterStyleSequence) + gutterSeparator;
@@ -109416,7 +111633,7 @@
     }
     ts.isProgramUptoDate = isProgramUptoDate;
     function getConfigFileParsingDiagnostics(configFileParseResult) {
-        return configFileParseResult.options.configFile ? __spreadArray(__spreadArray([], configFileParseResult.options.configFile.parseDiagnostics), configFileParseResult.errors) :
+        return configFileParseResult.options.configFile ? __spreadArray(__spreadArray([], configFileParseResult.options.configFile.parseDiagnostics, true), configFileParseResult.errors, true) :
             configFileParseResult.errors;
     }
     ts.getConfigFileParsingDiagnostics = getConfigFileParsingDiagnostics;
@@ -109428,10 +111645,7 @@
             return false;
         // If any compiler options change, we can't reuse old source file even if version match
         // The change in options like these could result in change in syntax tree or `sourceFile.bindDiagnostics`.
-        var oldOptions = program.getCompilerOptions();
-        return !!ts.sourceFileAffectingCompilerOptions.some(function (option) {
-            return !ts.isJsonEqual(ts.getCompilerOptionValue(oldOptions, option), ts.getCompilerOptionValue(newOptions, option));
-        });
+        return ts.optionsHaveChanges(program.getCompilerOptions(), newOptions, ts.sourceFileAffectingCompilerOptions);
     }
     function createCreateProgramOptions(rootNames, options, host, oldProgram, configFileParsingDiagnostics) {
         return {
@@ -109526,6 +111740,7 @@
         var sourceFileToPackageName = new ts.Map();
         // Key is a file name. Value is the (non-empty, or undefined) list of files that redirect to it.
         var redirectTargetsMap = ts.createMultiMap();
+        var usesUriStyleNodeCoreModules = false;
         /**
          * map with
          * - SourceFile if present
@@ -109681,6 +111896,7 @@
             getSourceFileByPath: getSourceFileByPath,
             getSourceFiles: function () { return files; },
             getMissingFilePaths: function () { return missingFilePaths; },
+            getModuleResolutionCache: function () { return moduleResolutionCache; },
             getFilesByNameMap: function () { return filesByName; },
             getCompilerOptions: function () { return options; },
             getSyntacticDiagnostics: getSyntacticDiagnostics,
@@ -109713,6 +111929,7 @@
             getLibFileFromReference: getLibFileFromReference,
             sourceFileToPackageName: sourceFileToPackageName,
             redirectTargetsMap: redirectTargetsMap,
+            usesUriStyleNodeCoreModules: usesUriStyleNodeCoreModules,
             isEmittedFile: isEmittedFile,
             getConfigFileParsingDiagnostics: getConfigFileParsingDiagnostics,
             getResolvedModuleWithFailedLookupLocationsFromCache: getResolvedModuleWithFailedLookupLocationsFromCache,
@@ -109740,7 +111957,7 @@
                     return programDiagnostics.add(createDiagnosticExplainingFile(diagnostic.file && getSourceFileByPath(diagnostic.file), diagnostic.fileProcessingReason, diagnostic.diagnostic, diagnostic.args || ts.emptyArray));
                 case 0 /* FilePreprocessingReferencedDiagnostic */:
                     var _a = getReferencedFileLocation(getSourceFileByPath, diagnostic.reason), file = _a.file, pos = _a.pos, end = _a.end;
-                    return programDiagnostics.add(ts.createFileDiagnostic.apply(void 0, __spreadArray([file, ts.Debug.checkDefined(pos), ts.Debug.checkDefined(end) - pos, diagnostic.diagnostic], diagnostic.args || ts.emptyArray)));
+                    return programDiagnostics.add(ts.createFileDiagnostic.apply(void 0, __spreadArray([file, ts.Debug.checkDefined(pos), ts.Debug.checkDefined(end) - pos, diagnostic.diagnostic], diagnostic.args || ts.emptyArray, false)));
                 default:
                     ts.Debug.assertNever(diagnostic);
             }
@@ -109843,8 +112060,8 @@
                 // Initialize a checker so that all our files are bound.
                 getTypeChecker();
                 classifiableNames = new ts.Set();
-                for (var _i = 0, files_2 = files; _i < files_2.length; _i++) {
-                    var sourceFile = files_2[_i];
+                for (var _i = 0, files_3 = files; _i < files_3.length; _i++) {
+                    var sourceFile = files_3[_i];
                     (_a = sourceFile.classifiableNames) === null || _a === void 0 ? void 0 : _a.forEach(function (value) { return classifiableNames.add(value); });
                 }
             }
@@ -109866,13 +112083,13 @@
                 // which per above occurred during the current program creation.
                 // Since we assume the filesystem does not change during program creation,
                 // it is safe to reuse resolutions from the earlier call.
-                var result_15 = [];
+                var result_14 = [];
                 for (var _i = 0, moduleNames_1 = moduleNames; _i < moduleNames_1.length; _i++) {
                     var moduleName = moduleNames_1[_i];
                     var resolvedModule = file.resolvedModules.get(moduleName);
-                    result_15.push(resolvedModule);
+                    result_14.push(resolvedModule);
                 }
-                return result_15;
+                return result_14;
             }
             // At this point, we know at least one of the following hold:
             // - file has local declarations for ambient modules
@@ -109900,7 +112117,9 @@
                     var oldResolvedModule = ts.getResolvedModule(oldSourceFile, moduleName);
                     if (oldResolvedModule) {
                         if (ts.isTraceEnabled(options, host)) {
-                            ts.trace(host, ts.Diagnostics.Reusing_resolution_of_module_0_to_file_1_from_old_program, moduleName, ts.getNormalizedAbsolutePath(file.originalFileName, currentDirectory));
+                            ts.trace(host, oldResolvedModule.packageId ?
+                                ts.Diagnostics.Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2_with_Package_ID_3 :
+                                ts.Diagnostics.Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2, moduleName, ts.getNormalizedAbsolutePath(file.originalFileName, currentDirectory), oldResolvedModule.resolvedFileName, oldResolvedModule.packageId && ts.packageIdToString(oldResolvedModule.packageId));
                         }
                         (result || (result = new Array(moduleNames.length)))[i] = oldResolvedModule;
                         (reusedNames || (reusedNames = [])).push(moduleName);
@@ -110013,9 +112232,6 @@
             if (!ts.arrayIsEqualTo(oldRootNames, rootNames)) {
                 return 0 /* Not */;
             }
-            if (!ts.arrayIsEqualTo(options.types, oldOptions.types)) {
-                return 0 /* Not */;
-            }
             // Check if any referenced project tsconfig files are different
             if (!canReuseProjectReferences()) {
                 return 0 /* Not */;
@@ -110090,7 +112306,7 @@
                     // The `newSourceFile` object was created for the new program.
                     if (!ts.arrayIsEqualTo(oldSourceFile.libReferenceDirectives, newSourceFile.libReferenceDirectives, fileReferenceIsEqualTo)) {
                         // 'lib' references has changed. Matches behavior in changesAffectModuleResolution
-                        return 0 /* Not */;
+                        structureIsReused = 1 /* SafeModules */;
                     }
                     if (oldSourceFile.hasNoDefaultLib !== newSourceFile.hasNoDefaultLib) {
                         // value of no-default-lib has changed
@@ -110175,7 +112391,7 @@
             if (structureIsReused !== 2 /* Completely */) {
                 return structureIsReused;
             }
-            if ((_a = host.hasChangedAutomaticTypeDirectiveNames) === null || _a === void 0 ? void 0 : _a.call(host)) {
+            if (ts.changesAffectingProgramStructure(oldOptions, options) || ((_a = host.hasChangedAutomaticTypeDirectiveNames) === null || _a === void 0 ? void 0 : _a.call(host))) {
                 return 1 /* SafeModules */;
             }
             missingFilePaths = oldProgram.getMissingFilePaths();
@@ -110206,6 +112422,7 @@
             resolvedTypeReferenceDirectives = oldProgram.getResolvedTypeReferenceDirectives();
             sourceFileToPackageName = oldProgram.sourceFileToPackageName;
             redirectTargetsMap = oldProgram.redirectTargetsMap;
+            usesUriStyleNodeCoreModules = oldProgram.usesUriStyleNodeCoreModules;
             return 2 /* Completely */;
         }
         function getEmitHost(writeFileCallback) {
@@ -110418,7 +112635,7 @@
             }
         }
         function getSemanticDiagnosticsForFile(sourceFile, cancellationToken) {
-            return ts.concatenate(filterSemanticDiagnotics(getBindAndCheckDiagnosticsForFile(sourceFile, cancellationToken), options), getProgramDiagnostics(sourceFile));
+            return ts.concatenate(filterSemanticDiagnostics(getBindAndCheckDiagnosticsForFile(sourceFile, cancellationToken), options), getProgramDiagnostics(sourceFile));
         }
         function getBindAndCheckDiagnosticsForFile(sourceFile, cancellationToken) {
             return getAndCacheDiagnostics(sourceFile, cancellationToken, cachedBindAndCheckDiagnosticsForFile, getBindAndCheckDiagnosticsForFileNoCache);
@@ -110433,8 +112650,8 @@
                 var isCheckJs = ts.isCheckJsEnabledForFile(sourceFile, options);
                 var isTsNoCheck = !!sourceFile.checkJsDirective && sourceFile.checkJsDirective.enabled === false;
                 // By default, only type-check .ts, .tsx, 'Deferred' and 'External' files (external files are added by plugins)
-                var includeBindAndCheckDiagnostics = !isTsNoCheck && (sourceFile.scriptKind === 3 /* TS */ || sourceFile.scriptKind === 4 /* TSX */ ||
-                    sourceFile.scriptKind === 5 /* External */ || isCheckJs || sourceFile.scriptKind === 7 /* Deferred */);
+                var includeBindAndCheckDiagnostics = !isTsNoCheck && (sourceFile.scriptKind === 3 /* TS */ || sourceFile.scriptKind === 4 /* TSX */
+                    || sourceFile.scriptKind === 5 /* External */ || isCheckJs || sourceFile.scriptKind === 7 /* Deferred */);
                 var bindDiagnostics = includeBindAndCheckDiagnostics ? sourceFile.bindDiagnostics : ts.emptyArray;
                 var checkDiagnostics = includeBindAndCheckDiagnostics ? typeChecker.getDiagnostics(sourceFile, cancellationToken) : ts.emptyArray;
                 return getMergedBindAndCheckDiagnostics(sourceFile, includeBindAndCheckDiagnostics, bindDiagnostics, checkDiagnostics, isCheckJs ? sourceFile.jsDocDiagnostics : undefined);
@@ -110508,22 +112725,22 @@
                     // Return directly from the case if the given node doesnt want to visit each child
                     // Otherwise break to visit each child
                     switch (parent.kind) {
-                        case 161 /* Parameter */:
-                        case 164 /* PropertyDeclaration */:
-                        case 166 /* MethodDeclaration */:
+                        case 162 /* Parameter */:
+                        case 165 /* PropertyDeclaration */:
+                        case 167 /* MethodDeclaration */:
                             if (parent.questionToken === node) {
                                 diagnostics.push(createDiagnosticForNode(node, ts.Diagnostics.The_0_modifier_can_only_be_used_in_TypeScript_files, "?"));
                                 return "skip";
                             }
                         // falls through
-                        case 165 /* MethodSignature */:
-                        case 167 /* Constructor */:
-                        case 168 /* GetAccessor */:
-                        case 169 /* SetAccessor */:
-                        case 209 /* FunctionExpression */:
-                        case 252 /* FunctionDeclaration */:
-                        case 210 /* ArrowFunction */:
-                        case 250 /* VariableDeclaration */:
+                        case 166 /* MethodSignature */:
+                        case 169 /* Constructor */:
+                        case 170 /* GetAccessor */:
+                        case 171 /* SetAccessor */:
+                        case 211 /* FunctionExpression */:
+                        case 254 /* FunctionDeclaration */:
+                        case 212 /* ArrowFunction */:
+                        case 252 /* VariableDeclaration */:
                             // type annotation
                             if (parent.type === node) {
                                 diagnostics.push(createDiagnosticForNode(node, ts.Diagnostics.Type_annotations_can_only_be_used_in_TypeScript_files));
@@ -110531,58 +112748,58 @@
                             }
                     }
                     switch (node.kind) {
-                        case 263 /* ImportClause */:
+                        case 265 /* ImportClause */:
                             if (node.isTypeOnly) {
                                 diagnostics.push(createDiagnosticForNode(parent, ts.Diagnostics._0_declarations_can_only_be_used_in_TypeScript_files, "import type"));
                                 return "skip";
                             }
                             break;
-                        case 268 /* ExportDeclaration */:
+                        case 270 /* ExportDeclaration */:
                             if (node.isTypeOnly) {
                                 diagnostics.push(createDiagnosticForNode(node, ts.Diagnostics._0_declarations_can_only_be_used_in_TypeScript_files, "export type"));
                                 return "skip";
                             }
                             break;
-                        case 261 /* ImportEqualsDeclaration */:
+                        case 263 /* ImportEqualsDeclaration */:
                             diagnostics.push(createDiagnosticForNode(node, ts.Diagnostics.import_can_only_be_used_in_TypeScript_files));
                             return "skip";
-                        case 267 /* ExportAssignment */:
+                        case 269 /* ExportAssignment */:
                             if (node.isExportEquals) {
                                 diagnostics.push(createDiagnosticForNode(node, ts.Diagnostics.export_can_only_be_used_in_TypeScript_files));
                                 return "skip";
                             }
                             break;
-                        case 287 /* HeritageClause */:
+                        case 289 /* HeritageClause */:
                             var heritageClause = node;
-                            if (heritageClause.token === 116 /* ImplementsKeyword */) {
+                            if (heritageClause.token === 117 /* ImplementsKeyword */) {
                                 diagnostics.push(createDiagnosticForNode(node, ts.Diagnostics.implements_clauses_can_only_be_used_in_TypeScript_files));
                                 return "skip";
                             }
                             break;
-                        case 254 /* InterfaceDeclaration */:
-                            var interfaceKeyword = ts.tokenToString(117 /* InterfaceKeyword */);
+                        case 256 /* InterfaceDeclaration */:
+                            var interfaceKeyword = ts.tokenToString(118 /* InterfaceKeyword */);
                             ts.Debug.assertIsDefined(interfaceKeyword);
                             diagnostics.push(createDiagnosticForNode(node, ts.Diagnostics._0_declarations_can_only_be_used_in_TypeScript_files, interfaceKeyword));
                             return "skip";
-                        case 257 /* ModuleDeclaration */:
-                            var moduleKeyword = node.flags & 16 /* Namespace */ ? ts.tokenToString(140 /* NamespaceKeyword */) : ts.tokenToString(139 /* ModuleKeyword */);
+                        case 259 /* ModuleDeclaration */:
+                            var moduleKeyword = node.flags & 16 /* Namespace */ ? ts.tokenToString(141 /* NamespaceKeyword */) : ts.tokenToString(140 /* ModuleKeyword */);
                             ts.Debug.assertIsDefined(moduleKeyword);
                             diagnostics.push(createDiagnosticForNode(node, ts.Diagnostics._0_declarations_can_only_be_used_in_TypeScript_files, moduleKeyword));
                             return "skip";
-                        case 255 /* TypeAliasDeclaration */:
+                        case 257 /* TypeAliasDeclaration */:
                             diagnostics.push(createDiagnosticForNode(node, ts.Diagnostics.Type_aliases_can_only_be_used_in_TypeScript_files));
                             return "skip";
-                        case 256 /* EnumDeclaration */:
-                            var enumKeyword = ts.Debug.checkDefined(ts.tokenToString(91 /* EnumKeyword */));
+                        case 258 /* EnumDeclaration */:
+                            var enumKeyword = ts.Debug.checkDefined(ts.tokenToString(92 /* EnumKeyword */));
                             diagnostics.push(createDiagnosticForNode(node, ts.Diagnostics._0_declarations_can_only_be_used_in_TypeScript_files, enumKeyword));
                             return "skip";
-                        case 226 /* NonNullExpression */:
+                        case 228 /* NonNullExpression */:
                             diagnostics.push(createDiagnosticForNode(node, ts.Diagnostics.Non_null_assertions_can_only_be_used_in_TypeScript_files));
                             return "skip";
-                        case 225 /* AsExpression */:
+                        case 227 /* AsExpression */:
                             diagnostics.push(createDiagnosticForNode(node.type, ts.Diagnostics.Type_assertion_expressions_can_only_be_used_in_TypeScript_files));
                             return "skip";
-                        case 207 /* TypeAssertionExpression */:
+                        case 209 /* TypeAssertionExpression */:
                             ts.Debug.fail(); // Won't parse these in a JS file anyway, as they are interpreted as JSX.
                     }
                 }
@@ -110591,53 +112808,53 @@
                         diagnostics.push(createDiagnosticForNode(parent, ts.Diagnostics.Experimental_support_for_decorators_is_a_feature_that_is_subject_to_change_in_a_future_release_Set_the_experimentalDecorators_option_in_your_tsconfig_or_jsconfig_to_remove_this_warning));
                     }
                     switch (parent.kind) {
-                        case 253 /* ClassDeclaration */:
-                        case 222 /* ClassExpression */:
-                        case 166 /* MethodDeclaration */:
-                        case 167 /* Constructor */:
-                        case 168 /* GetAccessor */:
-                        case 169 /* SetAccessor */:
-                        case 209 /* FunctionExpression */:
-                        case 252 /* FunctionDeclaration */:
-                        case 210 /* ArrowFunction */:
+                        case 255 /* ClassDeclaration */:
+                        case 224 /* ClassExpression */:
+                        case 167 /* MethodDeclaration */:
+                        case 169 /* Constructor */:
+                        case 170 /* GetAccessor */:
+                        case 171 /* SetAccessor */:
+                        case 211 /* FunctionExpression */:
+                        case 254 /* FunctionDeclaration */:
+                        case 212 /* ArrowFunction */:
                             // Check type parameters
                             if (nodes === parent.typeParameters) {
                                 diagnostics.push(createDiagnosticForNodeArray(nodes, ts.Diagnostics.Type_parameter_declarations_can_only_be_used_in_TypeScript_files));
                                 return "skip";
                             }
                         // falls through
-                        case 233 /* VariableStatement */:
+                        case 235 /* VariableStatement */:
                             // Check modifiers
                             if (nodes === parent.modifiers) {
-                                checkModifiers(parent.modifiers, parent.kind === 233 /* VariableStatement */);
+                                checkModifiers(parent.modifiers, parent.kind === 235 /* VariableStatement */);
                                 return "skip";
                             }
                             break;
-                        case 164 /* PropertyDeclaration */:
+                        case 165 /* PropertyDeclaration */:
                             // Check modifiers of property declaration
                             if (nodes === parent.modifiers) {
                                 for (var _i = 0, _a = nodes; _i < _a.length; _i++) {
                                     var modifier = _a[_i];
-                                    if (modifier.kind !== 123 /* StaticKeyword */) {
+                                    if (modifier.kind !== 124 /* StaticKeyword */) {
                                         diagnostics.push(createDiagnosticForNode(modifier, ts.Diagnostics.The_0_modifier_can_only_be_used_in_TypeScript_files, ts.tokenToString(modifier.kind)));
                                     }
                                 }
                                 return "skip";
                             }
                             break;
-                        case 161 /* Parameter */:
+                        case 162 /* Parameter */:
                             // Check modifiers of parameter declaration
                             if (nodes === parent.modifiers) {
                                 diagnostics.push(createDiagnosticForNodeArray(nodes, ts.Diagnostics.Parameter_modifiers_can_only_be_used_in_TypeScript_files));
                                 return "skip";
                             }
                             break;
-                        case 204 /* CallExpression */:
-                        case 205 /* NewExpression */:
-                        case 224 /* ExpressionWithTypeArguments */:
-                        case 275 /* JsxSelfClosingElement */:
-                        case 276 /* JsxOpeningElement */:
-                        case 206 /* TaggedTemplateExpression */:
+                        case 206 /* CallExpression */:
+                        case 207 /* NewExpression */:
+                        case 226 /* ExpressionWithTypeArguments */:
+                        case 277 /* JsxSelfClosingElement */:
+                        case 278 /* JsxOpeningElement */:
+                        case 208 /* TaggedTemplateExpression */:
                             // Check type arguments
                             if (nodes === parent.typeArguments) {
                                 diagnostics.push(createDiagnosticForNodeArray(nodes, ts.Diagnostics.Type_arguments_can_only_be_used_in_TypeScript_files));
@@ -110650,25 +112867,25 @@
                     for (var _i = 0, modifiers_2 = modifiers; _i < modifiers_2.length; _i++) {
                         var modifier = modifiers_2[_i];
                         switch (modifier.kind) {
-                            case 84 /* ConstKeyword */:
+                            case 85 /* ConstKeyword */:
                                 if (isConstValid) {
                                     continue;
                                 }
                             // to report error,
                             // falls through
-                            case 122 /* PublicKeyword */:
-                            case 120 /* PrivateKeyword */:
-                            case 121 /* ProtectedKeyword */:
-                            case 142 /* ReadonlyKeyword */:
-                            case 133 /* DeclareKeyword */:
-                            case 125 /* AbstractKeyword */:
-                            case 156 /* OverrideKeyword */:
+                            case 123 /* PublicKeyword */:
+                            case 121 /* PrivateKeyword */:
+                            case 122 /* ProtectedKeyword */:
+                            case 143 /* ReadonlyKeyword */:
+                            case 134 /* DeclareKeyword */:
+                            case 126 /* AbstractKeyword */:
+                            case 157 /* OverrideKeyword */:
                                 diagnostics.push(createDiagnosticForNode(modifier, ts.Diagnostics.The_0_modifier_can_only_be_used_in_TypeScript_files, ts.tokenToString(modifier.kind)));
                                 break;
                             // These are all legal modifiers.
-                            case 123 /* StaticKeyword */:
-                            case 92 /* ExportKeyword */:
-                            case 87 /* DefaultKeyword */:
+                            case 124 /* StaticKeyword */:
+                            case 93 /* ExportKeyword */:
+                            case 88 /* DefaultKeyword */:
                         }
                     }
                 }
@@ -110739,8 +112956,8 @@
             return a.fileName === b.fileName;
         }
         function moduleNameIsEqualTo(a, b) {
-            return a.kind === 78 /* Identifier */
-                ? b.kind === 78 /* Identifier */ && a.escapedText === b.escapedText
+            return a.kind === 79 /* Identifier */
+                ? b.kind === 79 /* Identifier */ && a.escapedText === b.escapedText
                 : b.kind === 10 /* StringLiteral */ && a.text === b.text;
         }
         function createSyntheticImport(text, file) {
@@ -110798,6 +113015,9 @@
                     // only through top - level external module names. Relative external module names are not permitted.
                     if (moduleNameExpr && ts.isStringLiteral(moduleNameExpr) && moduleNameExpr.text && (!inAmbientModule || !ts.isExternalModuleNameRelative(moduleNameExpr.text))) {
                         imports = ts.append(imports, moduleNameExpr);
+                        if (!usesUriStyleNodeCoreModules && currentNodeModulesDepth === 0 && !file.isDeclarationFile) {
+                            usesUriStyleNodeCoreModules = ts.startsWith(moduleNameExpr.text, "node:");
+                        }
                     }
                 }
                 else if (ts.isModuleDeclaration(node)) {
@@ -111424,6 +113644,9 @@
             if (options.strictPropertyInitialization && !ts.getStrictOptionValue(options, "strictNullChecks")) {
                 createDiagnosticForOptionName(ts.Diagnostics.Option_0_cannot_be_specified_without_specifying_option_1, "strictPropertyInitialization", "strictNullChecks");
             }
+            if (options.exactOptionalPropertyTypes && !ts.getStrictOptionValue(options, "strictNullChecks")) {
+                createDiagnosticForOptionName(ts.Diagnostics.Option_0_cannot_be_specified_without_specifying_option_1, "exactOptionalPropertyTypes", "strictNullChecks");
+            }
             if (options.isolatedModules) {
                 if (options.out) {
                     createDiagnosticForOptionName(ts.Diagnostics.Option_0_cannot_be_specified_with_option_1, "out", "isolatedModules");
@@ -111461,8 +113684,8 @@
             // List of collected files is complete; validate exhautiveness if this is a project with a file list
             if (options.composite) {
                 var rootPaths = new ts.Set(rootNames.map(toPath));
-                for (var _i = 0, files_3 = files; _i < files_3.length; _i++) {
-                    var file = files_3[_i];
+                for (var _i = 0, files_4 = files; _i < files_4.length; _i++) {
+                    var file = files_4[_i];
                     // Ignore file that is not emitted
                     if (ts.sourceFileMayBeEmitted(file, program) && !rootPaths.has(file.path)) {
                         addProgramDiagnosticExplainingFile(file, ts.Diagnostics.File_0_is_not_listed_within_the_file_list_of_project_1_Projects_must_list_all_files_or_use_an_include_pattern, [file.fileName, options.configFilePath || ""]);
@@ -111692,7 +113915,7 @@
             var location = locationReason && getReferencedFileLocation(getSourceFileByPath, locationReason);
             var fileIncludeReasonDetails = fileIncludeReasons && ts.chainDiagnosticMessages(fileIncludeReasons, ts.Diagnostics.The_file_is_in_the_program_because_Colon);
             var redirectInfo = file && ts.explainIfFileIsRedirect(file);
-            var chain = ts.chainDiagnosticMessages.apply(void 0, __spreadArray([redirectInfo ? fileIncludeReasonDetails ? __spreadArray([fileIncludeReasonDetails], redirectInfo) : redirectInfo : fileIncludeReasonDetails, diagnostic], args || ts.emptyArray));
+            var chain = ts.chainDiagnosticMessages.apply(void 0, __spreadArray([redirectInfo ? fileIncludeReasonDetails ? __spreadArray([fileIncludeReasonDetails], redirectInfo, true) : redirectInfo : fileIncludeReasonDetails, diagnostic], args || ts.emptyArray, false));
             return location && isReferenceFileLocation(location) ?
                 ts.createFileDiagnosticFromMessageChain(location.file, location.pos, location.end - location.pos, chain, relatedInfo) :
                 ts.createCompilerDiagnosticFromMessageChain(chain, relatedInfo);
@@ -111976,7 +114199,13 @@
             if (host.getSymlinkCache) {
                 return host.getSymlinkCache();
             }
-            return symlinks || (symlinks = ts.discoverProbableSymlinks(files, getCanonicalFileName, host.getCurrentDirectory()));
+            if (!symlinks) {
+                symlinks = ts.createSymlinkCache(currentDirectory, getCanonicalFileName);
+            }
+            if (files && resolvedTypeReferenceDirectives && !symlinks.hasProcessedResolutions()) {
+                symlinks.setSymlinksFromResolutions(files, resolvedTypeReferenceDirectives);
+            }
+            return symlinks;
         }
     }
     ts.createProgram = createProgram;
@@ -112146,7 +114375,7 @@
         // get any preEmit diagnostics, not just the ones
         if (!options.noEmitOnError)
             return undefined;
-        var diagnostics = __spreadArray(__spreadArray(__spreadArray(__spreadArray([], program.getOptionsDiagnostics(cancellationToken)), program.getSyntacticDiagnostics(sourceFile, cancellationToken)), program.getGlobalDiagnostics(cancellationToken)), program.getSemanticDiagnostics(sourceFile, cancellationToken));
+        var diagnostics = __spreadArray(__spreadArray(__spreadArray(__spreadArray([], program.getOptionsDiagnostics(cancellationToken), true), program.getSyntacticDiagnostics(sourceFile, cancellationToken), true), program.getGlobalDiagnostics(cancellationToken), true), program.getSemanticDiagnostics(sourceFile, cancellationToken), true);
         if (diagnostics.length === 0 && ts.getEmitDeclarations(program.getCompilerOptions())) {
             diagnostics = program.getDeclarationDiagnostics(/*sourceFile*/ undefined, cancellationToken);
         }
@@ -112156,17 +114385,17 @@
         if (!sourceFile && !ts.outFile(options)) {
             var emitResult = program.emitBuildInfo(writeFile, cancellationToken);
             if (emitResult.diagnostics)
-                diagnostics = __spreadArray(__spreadArray([], diagnostics), emitResult.diagnostics);
+                diagnostics = __spreadArray(__spreadArray([], diagnostics, true), emitResult.diagnostics, true);
             emittedFiles = emitResult.emittedFiles;
         }
         return { diagnostics: diagnostics, sourceMaps: undefined, emittedFiles: emittedFiles, emitSkipped: true };
     }
     ts.handleNoEmitOptions = handleNoEmitOptions;
     /*@internal*/
-    function filterSemanticDiagnotics(diagnostic, option) {
+    function filterSemanticDiagnostics(diagnostic, option) {
         return ts.filter(diagnostic, function (d) { return !d.skippedOn || !option[d.skippedOn]; });
     }
-    ts.filterSemanticDiagnotics = filterSemanticDiagnotics;
+    ts.filterSemanticDiagnostics = filterSemanticDiagnostics;
     /* @internal */
     function parseConfigHostFromCompilerHostLike(host, directoryStructureHost) {
         if (directoryStructureHost === void 0) { directoryStructureHost = host; }
@@ -112288,21 +114517,86 @@
     ts.getFileEmitOutput = getFileEmitOutput;
     var BuilderState;
     (function (BuilderState) {
-        /**
-         * Get the referencedFile from the imported module symbol
-         */
-        function getReferencedFileFromImportedModuleSymbol(symbol) {
-            if (symbol.declarations && symbol.declarations[0]) {
-                var declarationSourceFile = ts.getSourceFileOfNode(symbol.declarations[0]);
-                return declarationSourceFile && declarationSourceFile.resolvedPath;
+        var manyToManyPathMapCount = 0;
+        function createManyToManyPathMap() {
+            function create(forward, reverse, deleted) {
+                var version = 0;
+                var map = {
+                    id: manyToManyPathMapCount++,
+                    version: function () { return version; },
+                    clone: function () { return create(new ts.Map(forward), new ts.Map(reverse), deleted && new ts.Set(deleted)); },
+                    forEach: function (fn) { return forward.forEach(fn); },
+                    getKeys: function (v) { return reverse.get(v); },
+                    getValues: function (k) { return forward.get(k); },
+                    hasKey: function (k) { return forward.has(k); },
+                    keys: function () { return forward.keys(); },
+                    deletedKeys: function () { return deleted; },
+                    deleteKey: function (k) {
+                        (deleted || (deleted = new ts.Set())).add(k);
+                        var set = forward.get(k);
+                        if (!set) {
+                            return false;
+                        }
+                        set.forEach(function (v) { return deleteFromMultimap(reverse, v, k); });
+                        forward.delete(k);
+                        version++;
+                        return true;
+                    },
+                    set: function (k, vSet) {
+                        var changed = !!(deleted === null || deleted === void 0 ? void 0 : deleted.delete(k));
+                        var existingVSet = forward.get(k);
+                        forward.set(k, vSet);
+                        existingVSet === null || existingVSet === void 0 ? void 0 : existingVSet.forEach(function (v) {
+                            if (!vSet.has(v)) {
+                                changed = true;
+                                deleteFromMultimap(reverse, v, k);
+                            }
+                        });
+                        vSet.forEach(function (v) {
+                            if (!(existingVSet === null || existingVSet === void 0 ? void 0 : existingVSet.has(v))) {
+                                changed = true;
+                                addToMultimap(reverse, v, k);
+                            }
+                        });
+                        if (changed) {
+                            version++;
+                        }
+                        return map;
+                    },
+                };
+                return map;
             }
+            return create(new ts.Map(), new ts.Map(), /*deleted*/ undefined);
+        }
+        BuilderState.createManyToManyPathMap = createManyToManyPathMap;
+        function addToMultimap(map, k, v) {
+            var set = map.get(k);
+            if (!set) {
+                set = new ts.Set();
+                map.set(k, set);
+            }
+            set.add(v);
+        }
+        function deleteFromMultimap(map, k, v, removeEmpty) {
+            if (removeEmpty === void 0) { removeEmpty = true; }
+            var set = map.get(k);
+            if (set === null || set === void 0 ? void 0 : set.delete(v)) {
+                if (removeEmpty && !set.size) {
+                    map.delete(k);
+                }
+                return true;
+            }
+            return false;
+        }
+        function getReferencedFilesFromImportedModuleSymbol(symbol) {
+            return ts.mapDefined(symbol.declarations, function (declaration) { var _a; return (_a = ts.getSourceFileOfNode(declaration)) === null || _a === void 0 ? void 0 : _a.resolvedPath; });
         }
         /**
-         * Get the referencedFile from the import name node from file
+         * Get the module source file and all augmenting files from the import name node from file
          */
-        function getReferencedFileFromImportLiteral(checker, importName) {
+        function getReferencedFilesFromImportLiteral(checker, importName) {
             var symbol = checker.getSymbolAtLocation(importName);
-            return symbol && getReferencedFileFromImportedModuleSymbol(symbol);
+            return symbol && getReferencedFilesFromImportedModuleSymbol(symbol);
         }
         /**
          * Gets the path to reference file from file name, it could be resolvedPath if present otherwise path
@@ -112322,10 +114616,8 @@
                 var checker = program.getTypeChecker();
                 for (var _i = 0, _a = sourceFile.imports; _i < _a.length; _i++) {
                     var importName = _a[_i];
-                    var declarationSourceFilePath = getReferencedFileFromImportLiteral(checker, importName);
-                    if (declarationSourceFilePath) {
-                        addReferencedFile(declarationSourceFilePath);
-                    }
+                    var declarationSourceFilePaths = getReferencedFilesFromImportLiteral(checker, importName);
+                    declarationSourceFilePaths === null || declarationSourceFilePaths === void 0 ? void 0 : declarationSourceFilePaths.forEach(addReferencedFile);
                 }
             }
             var sourceFileDirectory = ts.getDirectoryPath(sourceFile.resolvedPath);
@@ -112402,8 +114694,8 @@
          */
         function create(newProgram, getCanonicalFileName, oldState, disableUseFileVersionAsSignature) {
             var fileInfos = new ts.Map();
-            var referencedMap = newProgram.getCompilerOptions().module !== ts.ModuleKind.None ? new ts.Map() : undefined;
-            var exportedModulesMap = referencedMap ? new ts.Map() : undefined;
+            var referencedMap = newProgram.getCompilerOptions().module !== ts.ModuleKind.None ? createManyToManyPathMap() : undefined;
+            var exportedModulesMap = referencedMap ? createManyToManyPathMap() : undefined;
             var hasCalledUpdateShapeSignature = new ts.Set();
             var useOldState = canReuseOldState(referencedMap, oldState);
             // Ensure source files have parent pointers set
@@ -112420,7 +114712,7 @@
                     }
                     // Copy old visible to outside files map
                     if (useOldState) {
-                        var exportedModules = oldState.exportedModulesMap.get(sourceFile.resolvedPath);
+                        var exportedModules = oldState.exportedModulesMap.getValues(sourceFile.resolvedPath);
                         if (exportedModules) {
                             exportedModulesMap.set(sourceFile.resolvedPath, exportedModules);
                         }
@@ -112449,11 +114741,12 @@
          * Creates a clone of the state
          */
         function clone(state) {
+            var _a, _b;
             // Dont need to backup allFiles info since its cache anyway
             return {
                 fileInfos: new ts.Map(state.fileInfos),
-                referencedMap: state.referencedMap && new ts.Map(state.referencedMap),
-                exportedModulesMap: state.exportedModulesMap && new ts.Map(state.exportedModulesMap),
+                referencedMap: (_a = state.referencedMap) === null || _a === void 0 ? void 0 : _a.clone(),
+                exportedModulesMap: (_b = state.exportedModulesMap) === null || _b === void 0 ? void 0 : _b.clone(),
                 hasCalledUpdateShapeSignature: new ts.Set(state.hasCalledUpdateShapeSignature),
                 useFileVersionAsSignature: state.useFileVersionAsSignature,
             };
@@ -112499,7 +114792,8 @@
         /**
          * Returns if the shape of the signature has changed since last emit
          */
-        function updateShapeSignature(state, programOfThisState, sourceFile, cacheToUpdateSignature, cancellationToken, computeHash, exportedModulesMapCache) {
+        function updateShapeSignature(state, programOfThisState, sourceFile, cacheToUpdateSignature, cancellationToken, computeHash, exportedModulesMapCache, useFileVersionAsSignature) {
+            if (useFileVersionAsSignature === void 0) { useFileVersionAsSignature = state.useFileVersionAsSignature; }
             ts.Debug.assert(!!sourceFile);
             ts.Debug.assert(!exportedModulesMapCache || !!state.exportedModulesMap, "Compute visible to outside map only if visibleToOutsideReferencedMap present in the state");
             // If we have cached the result for this file, that means hence forth we should assume file shape is uptodate
@@ -112511,7 +114805,7 @@
                 return ts.Debug.fail();
             var prevSignature = info.signature;
             var latestSignature;
-            if (!sourceFile.isDeclarationFile && !state.useFileVersionAsSignature) {
+            if (!sourceFile.isDeclarationFile && !useFileVersionAsSignature) {
                 var emitOutput_1 = getFileEmitOutput(programOfThisState, sourceFile, 
                 /*emitOnlyDtsFiles*/ true, cancellationToken, 
                 /*customTransformers*/ undefined, 
@@ -112530,8 +114824,13 @@
                 latestSignature = sourceFile.version;
                 if (exportedModulesMapCache && latestSignature !== prevSignature) {
                     // All the references in this file are exported
-                    var references = state.referencedMap ? state.referencedMap.get(sourceFile.resolvedPath) : undefined;
-                    exportedModulesMapCache.set(sourceFile.resolvedPath, references || false);
+                    var references = state.referencedMap ? state.referencedMap.getValues(sourceFile.resolvedPath) : undefined;
+                    if (references) {
+                        exportedModulesMapCache.set(sourceFile.resolvedPath, references);
+                    }
+                    else {
+                        exportedModulesMapCache.deleteKey(sourceFile.resolvedPath);
+                    }
                 }
             }
             cacheToUpdateSignature.set(sourceFile.resolvedPath, latestSignature);
@@ -112543,18 +114842,23 @@
          */
         function updateExportedModules(sourceFile, exportedModulesFromDeclarationEmit, exportedModulesMapCache) {
             if (!exportedModulesFromDeclarationEmit) {
-                exportedModulesMapCache.set(sourceFile.resolvedPath, false);
+                exportedModulesMapCache.deleteKey(sourceFile.resolvedPath);
                 return;
             }
             var exportedModules;
-            exportedModulesFromDeclarationEmit.forEach(function (symbol) { return addExportedModule(getReferencedFileFromImportedModuleSymbol(symbol)); });
-            exportedModulesMapCache.set(sourceFile.resolvedPath, exportedModules || false);
-            function addExportedModule(exportedModulePath) {
-                if (exportedModulePath) {
+            exportedModulesFromDeclarationEmit.forEach(function (symbol) { return addExportedModule(getReferencedFilesFromImportedModuleSymbol(symbol)); });
+            if (exportedModules) {
+                exportedModulesMapCache.set(sourceFile.resolvedPath, exportedModules);
+            }
+            else {
+                exportedModulesMapCache.deleteKey(sourceFile.resolvedPath);
+            }
+            function addExportedModule(exportedModulePaths) {
+                if (exportedModulePaths === null || exportedModulePaths === void 0 ? void 0 : exportedModulePaths.length) {
                     if (!exportedModules) {
                         exportedModules = new ts.Set();
                     }
-                    exportedModules.add(exportedModulePath);
+                    exportedModulePaths.forEach(function (path) { return exportedModules.add(path); });
                 }
             }
         }
@@ -112563,16 +114867,25 @@
          * This should be called whenever it is safe to commit the state of the builder
          */
         function updateExportedFilesMapFromCache(state, exportedModulesMapCache) {
+            var _a;
             if (exportedModulesMapCache) {
                 ts.Debug.assert(!!state.exportedModulesMap);
-                exportedModulesMapCache.forEach(function (exportedModules, path) {
-                    if (exportedModules) {
-                        state.exportedModulesMap.set(path, exportedModules);
+                var cacheId = exportedModulesMapCache.id;
+                var cacheVersion = exportedModulesMapCache.version();
+                if (state.previousCache) {
+                    if (state.previousCache.id === cacheId && state.previousCache.version === cacheVersion) {
+                        // If this is the same cache at the same version as last time this BuilderState
+                        // was updated, there's no need to update again
+                        return;
                     }
-                    else {
-                        state.exportedModulesMap.delete(path);
-                    }
-                });
+                    state.previousCache.id = cacheId;
+                    state.previousCache.version = cacheVersion;
+                }
+                else {
+                    state.previousCache = { id: cacheId, version: cacheVersion };
+                }
+                (_a = exportedModulesMapCache.deletedKeys()) === null || _a === void 0 ? void 0 : _a.forEach(function (path) { return state.exportedModulesMap.deleteKey(path); });
+                exportedModulesMapCache.forEach(function (exportedModules, path) { return state.exportedModulesMap.set(path, exportedModules); });
             }
         }
         BuilderState.updateExportedFilesMapFromCache = updateExportedFilesMapFromCache;
@@ -112596,7 +114909,7 @@
                 var path = queue.pop();
                 if (!seenMap.has(path)) {
                     seenMap.add(path);
-                    var references = state.referencedMap.get(path);
+                    var references = state.referencedMap.getValues(path);
                     if (references) {
                         var iterator = references.keys();
                         for (var iterResult = iterator.next(); !iterResult.done; iterResult = iterator.next()) {
@@ -112622,10 +114935,8 @@
          * Gets the files referenced by the the file path
          */
         function getReferencedByPaths(state, referencedFilePath) {
-            return ts.arrayFrom(ts.mapDefinedIterator(state.referencedMap.entries(), function (_a) {
-                var filePath = _a[0], referencesInFile = _a[1];
-                return referencesInFile.has(referencedFilePath) ? filePath : undefined;
-            }));
+            var keys = state.referencedMap.getKeys(referencedFilePath);
+            return keys ? ts.arrayFrom(keys.keys()) : [];
         }
         BuilderState.getReferencedByPaths = getReferencedByPaths;
         /**
@@ -112655,7 +114966,7 @@
          */
         function isFileAffectingGlobalScope(sourceFile) {
             return containsGlobalScopeAugmentation(sourceFile) ||
-                !ts.isExternalOrCommonJsModule(sourceFile) && !containsOnlyAmbientModules(sourceFile);
+                !ts.isExternalOrCommonJsModule(sourceFile) && !ts.isJsonSourceFile(sourceFile) && !containsOnlyAmbientModules(sourceFile);
         }
         /**
          * Gets all files of the program excluding the default library file
@@ -112791,7 +115102,7 @@
                 // versions dont match
                 oldInfo.version !== info.version ||
                 // Referenced files changed
-                !hasSameKeys(newReferences = referencedMap && referencedMap.get(sourceFilePath), oldReferencedMap && oldReferencedMap.get(sourceFilePath)) ||
+                !hasSameKeys(newReferences = referencedMap && referencedMap.getValues(sourceFilePath), oldReferencedMap && oldReferencedMap.getValues(sourceFilePath)) ||
                 // Referenced file was deleted in the new program
                 newReferences && ts.forEachKey(newReferences, function (path) { return !state.fileInfos.has(path) && oldState.fileInfos.has(path); })) {
                 // Register file as changed file and do not copy semantic diagnostics, since all changed files need to be re-evaluated
@@ -112867,6 +115178,7 @@
      * Creates a clone of the state
      */
     function cloneBuilderProgramState(state) {
+        var _a;
         var newState = ts.BuilderState.clone(state);
         newState.semanticDiagnosticsPerFile = state.semanticDiagnosticsPerFile && new ts.Map(state.semanticDiagnosticsPerFile);
         newState.changedFilesSet = new ts.Set(state.changedFilesSet);
@@ -112874,7 +115186,7 @@
         newState.affectedFilesIndex = state.affectedFilesIndex;
         newState.currentChangedFilePath = state.currentChangedFilePath;
         newState.currentAffectedFilesSignatures = state.currentAffectedFilesSignatures && new ts.Map(state.currentAffectedFilesSignatures);
-        newState.currentAffectedFilesExportedModulesMap = state.currentAffectedFilesExportedModulesMap && new ts.Map(state.currentAffectedFilesExportedModulesMap);
+        newState.currentAffectedFilesExportedModulesMap = (_a = state.currentAffectedFilesExportedModulesMap) === null || _a === void 0 ? void 0 : _a.clone();
         newState.seenAffectedFiles = state.seenAffectedFiles && new ts.Set(state.seenAffectedFiles);
         newState.cleanedDiagnosticsOfLibFiles = state.cleanedDiagnosticsOfLibFiles;
         newState.semanticDiagnosticsFromOldState = state.semanticDiagnosticsFromOldState && new ts.Set(state.semanticDiagnosticsFromOldState);
@@ -112942,8 +115254,7 @@
             if (!state.currentAffectedFilesSignatures)
                 state.currentAffectedFilesSignatures = new ts.Map();
             if (state.exportedModulesMap) {
-                if (!state.currentAffectedFilesExportedModulesMap)
-                    state.currentAffectedFilesExportedModulesMap = new ts.Map();
+                state.currentAffectedFilesExportedModulesMap || (state.currentAffectedFilesExportedModulesMap = ts.BuilderState.createManyToManyPathMap());
             }
             state.affectedFiles = ts.BuilderState.getFilesAffectedBy(state, program, nextKey.value, cancellationToken, computeHash, state.currentAffectedFilesSignatures, state.currentAffectedFilesExportedModulesMap);
             state.currentChangedFilePath = nextKey.value;
@@ -113023,14 +115334,15 @@
                 // we need to update the signature to reflect correctness of the signature(which is output d.ts emit) of this file
                 // This ensures that we dont later during incremental builds considering wrong signature.
                 // Eg where this also is needed to ensure that .tsbuildinfo generated by incremental build should be same as if it was first fresh build
-                ts.BuilderState.updateShapeSignature(state, program, sourceFile, ts.Debug.checkDefined(state.currentAffectedFilesSignatures), cancellationToken, computeHash, state.currentAffectedFilesExportedModulesMap);
+                // But we avoid expensive full shape computation, as using file version as shape is enough for correctness.
+                ts.BuilderState.updateShapeSignature(state, program, sourceFile, ts.Debug.checkDefined(state.currentAffectedFilesSignatures), cancellationToken, computeHash, state.currentAffectedFilesExportedModulesMap, 
+                /* useFileVersionAsSignature */ true);
                 // If not dts emit, nothing more to do
                 if (ts.getEmitDeclarations(state.compilerOptions)) {
                     addToAffectedFilesPendingEmit(state, path, 0 /* DtsOnly */);
                 }
             }
         }
-        return false;
     }
     /**
      * Removes semantic diagnostics for path and
@@ -113053,6 +115365,7 @@
      * Iterate on referencing modules that export entities from affected file
      */
     function forEachReferencingModulesOfExportOfAffectedFile(state, affectedFile, fn) {
+        var _a, _b;
         // If there was change in signature (dts output) for the changed file,
         // then only we need to handle pending file emit
         if (!state.exportedModulesMap || !state.changedFilesSet.has(affectedFile.resolvedPath)) {
@@ -113070,8 +115383,8 @@
                 var currentPath = queue.pop();
                 if (!seenFileNamesMap.has(currentPath)) {
                     seenFileNamesMap.set(currentPath, true);
-                    var result = fn(state, currentPath);
-                    if (result && isChangedSignature(state, currentPath)) {
+                    fn(state, currentPath);
+                    if (isChangedSignature(state, currentPath)) {
                         var currentSourceFile = ts.Debug.checkDefined(state.program).getSourceFileByPath(currentPath);
                         queue.push.apply(queue, ts.BuilderState.getReferencedByPaths(state, currentSourceFile.resolvedPath));
                     }
@@ -113082,17 +115395,15 @@
         var seenFileAndExportsOfFile = new ts.Set();
         // Go through exported modules from cache first
         // If exported modules has path, all files referencing file exported from are affected
-        if (ts.forEachEntry(state.currentAffectedFilesExportedModulesMap, function (exportedModules, exportedFromPath) {
-            return exportedModules &&
-                exportedModules.has(affectedFile.resolvedPath) &&
-                forEachFilesReferencingPath(state, exportedFromPath, seenFileAndExportsOfFile, fn);
-        })) {
-            return;
-        }
+        (_a = state.currentAffectedFilesExportedModulesMap.getKeys(affectedFile.resolvedPath)) === null || _a === void 0 ? void 0 : _a.forEach(function (exportedFromPath) {
+            return forEachFilesReferencingPath(state, exportedFromPath, seenFileAndExportsOfFile, fn);
+        });
         // If exported from path is not from cache and exported modules has path, all files referencing file exported from are affected
-        ts.forEachEntry(state.exportedModulesMap, function (exportedModules, exportedFromPath) {
-            return !state.currentAffectedFilesExportedModulesMap.has(exportedFromPath) && // If we already iterated this through cache, ignore it
-                exportedModules.has(affectedFile.resolvedPath) &&
+        (_b = state.exportedModulesMap.getKeys(affectedFile.resolvedPath)) === null || _b === void 0 ? void 0 : _b.forEach(function (exportedFromPath) {
+            var _a;
+            // If the cache had an updated value, skip
+            return !state.currentAffectedFilesExportedModulesMap.hasKey(exportedFromPath) &&
+                !((_a = state.currentAffectedFilesExportedModulesMap.deletedKeys()) === null || _a === void 0 ? void 0 : _a.has(exportedFromPath)) &&
                 forEachFilesReferencingPath(state, exportedFromPath, seenFileAndExportsOfFile, fn);
         });
     }
@@ -113100,43 +115411,37 @@
      * Iterate on files referencing referencedPath
      */
     function forEachFilesReferencingPath(state, referencedPath, seenFileAndExportsOfFile, fn) {
-        return ts.forEachEntry(state.referencedMap, function (referencesInFile, filePath) {
-            return referencesInFile.has(referencedPath) && forEachFileAndExportsOfFile(state, filePath, seenFileAndExportsOfFile, fn);
+        var _a;
+        (_a = state.referencedMap.getKeys(referencedPath)) === null || _a === void 0 ? void 0 : _a.forEach(function (filePath) {
+            return forEachFileAndExportsOfFile(state, filePath, seenFileAndExportsOfFile, fn);
         });
     }
     /**
      * fn on file and iterate on anything that exports this file
      */
     function forEachFileAndExportsOfFile(state, filePath, seenFileAndExportsOfFile, fn) {
+        var _a, _b, _c;
         if (!ts.tryAddToSet(seenFileAndExportsOfFile, filePath)) {
-            return false;
+            return;
         }
-        if (fn(state, filePath)) {
-            // If there are no more diagnostics from old cache, done
-            return true;
-        }
+        fn(state, filePath);
         ts.Debug.assert(!!state.currentAffectedFilesExportedModulesMap);
         // Go through exported modules from cache first
         // If exported modules has path, all files referencing file exported from are affected
-        if (ts.forEachEntry(state.currentAffectedFilesExportedModulesMap, function (exportedModules, exportedFromPath) {
-            return exportedModules &&
-                exportedModules.has(filePath) &&
-                forEachFileAndExportsOfFile(state, exportedFromPath, seenFileAndExportsOfFile, fn);
-        })) {
-            return true;
-        }
+        (_a = state.currentAffectedFilesExportedModulesMap.getKeys(filePath)) === null || _a === void 0 ? void 0 : _a.forEach(function (exportedFromPath) {
+            return forEachFileAndExportsOfFile(state, exportedFromPath, seenFileAndExportsOfFile, fn);
+        });
         // If exported from path is not from cache and exported modules has path, all files referencing file exported from are affected
-        if (ts.forEachEntry(state.exportedModulesMap, function (exportedModules, exportedFromPath) {
-            return !state.currentAffectedFilesExportedModulesMap.has(exportedFromPath) && // If we already iterated this through cache, ignore it
-                exportedModules.has(filePath) &&
+        (_b = state.exportedModulesMap.getKeys(filePath)) === null || _b === void 0 ? void 0 : _b.forEach(function (exportedFromPath) {
+            var _a;
+            // If the cache had an updated value, skip
+            return !state.currentAffectedFilesExportedModulesMap.hasKey(exportedFromPath) &&
+                !((_a = state.currentAffectedFilesExportedModulesMap.deletedKeys()) === null || _a === void 0 ? void 0 : _a.has(exportedFromPath)) &&
                 forEachFileAndExportsOfFile(state, exportedFromPath, seenFileAndExportsOfFile, fn);
-        })) {
-            return true;
-        }
+        });
         // Remove diagnostics of files that import this file (without going to exports of referencing files)
-        return !!ts.forEachEntry(state.referencedMap, function (referencesInFile, referencingFilePath) {
-            return referencesInFile.has(filePath) &&
-                !seenFileAndExportsOfFile.has(referencingFilePath) && // Not already removed diagnostic file
+        (_c = state.referencedMap.getKeys(filePath)) === null || _c === void 0 ? void 0 : _c.forEach(function (referencingFilePath) {
+            return !seenFileAndExportsOfFile.has(referencingFilePath) && // Not already removed diagnostic file
                 fn(state, referencingFilePath);
         } // Dont add to seen since this is not yet done with the export removal
         );
@@ -113198,7 +115503,7 @@
             var cachedDiagnostics = state.semanticDiagnosticsPerFile.get(path);
             // Report the bind and check diagnostics from the cache if we already have those diagnostics present
             if (cachedDiagnostics) {
-                return ts.filterSemanticDiagnotics(cachedDiagnostics, state.compilerOptions);
+                return ts.filterSemanticDiagnostics(cachedDiagnostics, state.compilerOptions);
             }
         }
         // Diagnostics werent cached, get them from program, and cache the result
@@ -113206,7 +115511,7 @@
         if (state.semanticDiagnosticsPerFile) {
             state.semanticDiagnosticsPerFile.set(path, diagnostics);
         }
-        return ts.filterSemanticDiagnotics(diagnostics, state.compilerOptions);
+        return ts.filterSemanticDiagnostics(diagnostics, state.compilerOptions);
     }
     /**
      * Gets the program information to be emitted in buildInfo so that we can use it to create new program
@@ -113241,19 +115546,24 @@
         if (state.referencedMap) {
             referencedMap = ts.arrayFrom(state.referencedMap.keys()).sort(ts.compareStringsCaseSensitive).map(function (key) { return [
                 toFileId(key),
-                toFileIdListId(state.referencedMap.get(key))
+                toFileIdListId(state.referencedMap.getValues(key))
             ]; });
         }
         var exportedModulesMap;
         if (state.exportedModulesMap) {
             exportedModulesMap = ts.mapDefined(ts.arrayFrom(state.exportedModulesMap.keys()).sort(ts.compareStringsCaseSensitive), function (key) {
-                var newValue = state.currentAffectedFilesExportedModulesMap && state.currentAffectedFilesExportedModulesMap.get(key);
+                var _a;
+                if (state.currentAffectedFilesExportedModulesMap) {
+                    if ((_a = state.currentAffectedFilesExportedModulesMap.deletedKeys()) === null || _a === void 0 ? void 0 : _a.has(key)) {
+                        return undefined;
+                    }
+                    var newValue = state.currentAffectedFilesExportedModulesMap.getValues(key);
+                    if (newValue) {
+                        return [toFileId(key), toFileIdListId(newValue)];
+                    }
+                }
                 // Not in temporary cache, use existing value
-                if (newValue === undefined)
-                    return [toFileId(key), toFileIdListId(state.exportedModulesMap.get(key))];
-                // Value in cache and has updated value map, use that
-                else if (newValue)
-                    return [toFileId(key), toFileIdListId(newValue)];
+                return [toFileId(key), toFileIdListId(state.exportedModulesMap.getValues(key))];
             });
         }
         var semanticDiagnosticsPerFile;
@@ -113430,8 +115740,9 @@
         newProgram = undefined; // TODO: GH#18217
         oldProgram = undefined;
         oldState = undefined;
-        var builderProgram = createRedirectedBuilderProgram(state, configFileParsingDiagnostics);
-        builderProgram.getState = function () { return state; };
+        var getState = function () { return state; };
+        var builderProgram = createRedirectedBuilderProgram(getState, configFileParsingDiagnostics);
+        builderProgram.getState = getState;
         builderProgram.backupState = function () {
             ts.Debug.assert(backupState === undefined);
             backupState = cloneBuilderProgramState(state);
@@ -113666,8 +115977,8 @@
         var state = {
             fileInfos: fileInfos,
             compilerOptions: program.options ? ts.convertToOptionsWithAbsolutePaths(program.options, toAbsolutePath) : {},
-            referencedMap: toMapOfReferencedSet(program.referencedMap),
-            exportedModulesMap: toMapOfReferencedSet(program.exportedModulesMap),
+            referencedMap: toManyToManyPathMap(program.referencedMap),
+            exportedModulesMap: toManyToManyPathMap(program.exportedModulesMap),
             semanticDiagnosticsPerFile: program.semanticDiagnosticsPerFile && ts.arrayToMap(program.semanticDiagnosticsPerFile, function (value) { return toFilePath(ts.isNumber(value) ? value : value[0]); }, function (value) { return ts.isNumber(value) ? ts.emptyArray : value[1]; }),
             hasReusableDiagnostic: true,
             affectedFilesPendingEmit: ts.map(program.affectedFilesPendingEmit, function (value) { return toFilePath(value[0]); }),
@@ -113710,20 +116021,28 @@
         function toFilePathsSet(fileIdsListId) {
             return filePathsSetList[fileIdsListId - 1];
         }
-        function toMapOfReferencedSet(referenceMap) {
-            return referenceMap && ts.arrayToMap(referenceMap, function (value) { return toFilePath(value[0]); }, function (value) { return toFilePathsSet(value[1]); });
+        function toManyToManyPathMap(referenceMap) {
+            if (!referenceMap) {
+                return undefined;
+            }
+            var map = ts.BuilderState.createManyToManyPathMap();
+            referenceMap.forEach(function (_a) {
+                var fileId = _a[0], fileIdListId = _a[1];
+                return map.set(toFilePath(fileId), toFilePathsSet(fileIdListId));
+            });
+            return map;
         }
     }
     ts.createBuildProgramUsingProgramBuildInfo = createBuildProgramUsingProgramBuildInfo;
-    function createRedirectedBuilderProgram(state, configFileParsingDiagnostics) {
+    function createRedirectedBuilderProgram(getState, configFileParsingDiagnostics) {
         return {
             getState: ts.notImplemented,
             backupState: ts.noop,
             restoreState: ts.noop,
             getProgram: getProgram,
-            getProgramOrUndefined: function () { return state.program; },
-            releaseProgram: function () { return state.program = undefined; },
-            getCompilerOptions: function () { return state.compilerOptions; },
+            getProgramOrUndefined: function () { return getState().program; },
+            releaseProgram: function () { return getState().program = undefined; },
+            getCompilerOptions: function () { return getState().compilerOptions; },
             getSourceFile: function (fileName) { return getProgram().getSourceFile(fileName); },
             getSourceFiles: function () { return getProgram().getSourceFiles(); },
             getOptionsDiagnostics: function (cancellationToken) { return getProgram().getOptionsDiagnostics(cancellationToken); },
@@ -113739,7 +116058,7 @@
             close: ts.noop,
         };
         function getProgram() {
-            return ts.Debug.checkDefined(state.program);
+            return ts.Debug.checkDefined(getState().program);
         }
     }
     ts.createRedirectedBuilderProgram = createRedirectedBuilderProgram;
@@ -113756,7 +116075,7 @@
     ts.createEmitAndSemanticDiagnosticsBuilderProgram = createEmitAndSemanticDiagnosticsBuilderProgram;
     function createAbstractBuilder(newProgramOrRootNames, hostOrOptions, oldProgramOrHost, configFileParsingDiagnosticsOrOldProgram, configFileParsingDiagnostics, projectReferences) {
         var _a = ts.getBuilderCreationParameters(newProgramOrRootNames, hostOrOptions, oldProgramOrHost, configFileParsingDiagnosticsOrOldProgram, configFileParsingDiagnostics, projectReferences), newProgram = _a.newProgram, newConfigFileParsingDiagnostics = _a.configFileParsingDiagnostics;
-        return ts.createRedirectedBuilderProgram({ program: newProgram, compilerOptions: newProgram.getCompilerOptions() }, newConfigFileParsingDiagnostics);
+        return ts.createRedirectedBuilderProgram(function () { return ({ program: newProgram, compilerOptions: newProgram.getCompilerOptions() }); }, newConfigFileParsingDiagnostics);
     }
     ts.createAbstractBuilder = createAbstractBuilder;
 })(ts || (ts = {}));
@@ -113857,6 +116176,7 @@
         // TypeRoot watches for the types that get added as part of getAutomaticTypeDirectiveNames
         var typeRootsWatches = new ts.Map();
         return {
+            getModuleResolutionCache: function () { return moduleResolutionCache; },
             startRecordingFilesWithChangedResolutions: startRecordingFilesWithChangedResolutions,
             finishRecordingFilesWithChangedResolutions: finishRecordingFilesWithChangedResolutions,
             // perDirectoryResolvedModuleNames and perDirectoryResolvedTypeReferenceDirectives could be non empty if there was exception during program update
@@ -113980,7 +116300,7 @@
             return ts.resolveTypeReferenceDirective(typeReferenceDirectiveName, containingFile, options, host, redirectedReference, typeReferenceDirectiveResolutionCache);
         }
         function resolveNamesWithLocalCache(_a) {
-            var _b;
+            var _b, _c, _d;
             var names = _a.names, containingFile = _a.containingFile, redirectedReference = _a.redirectedReference, cache = _a.cache, perDirectoryCacheWithRedirects = _a.perDirectoryCacheWithRedirects, loader = _a.loader, getResolutionWithResolvedFileName = _a.getResolutionWithResolvedFileName, shouldRetryResolution = _a.shouldRetryResolution, reusedNames = _a.reusedNames, logChanges = _a.logChanges;
             var path = resolutionHost.toPath(containingFile);
             var resolutionsInFile = cache.get(path) || cache.set(path, new ts.Map()).get(path);
@@ -114013,9 +116333,24 @@
                     var resolutionInDirectory = perDirectoryResolution.get(name);
                     if (resolutionInDirectory) {
                         resolution = resolutionInDirectory;
+                        var host = ((_b = resolutionHost.getCompilerHost) === null || _b === void 0 ? void 0 : _b.call(resolutionHost)) || resolutionHost;
+                        if (ts.isTraceEnabled(compilerOptions, host)) {
+                            var resolved = getResolutionWithResolvedFileName(resolution);
+                            ts.trace(host, loader === resolveModuleName ?
+                                (resolved === null || resolved === void 0 ? void 0 : resolved.resolvedFileName) ?
+                                    resolved.packagetId ?
+                                        ts.Diagnostics.Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_3_with_Package_ID_4 :
+                                        ts.Diagnostics.Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_3 :
+                                    ts.Diagnostics.Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_not_resolved :
+                                (resolved === null || resolved === void 0 ? void 0 : resolved.resolvedFileName) ?
+                                    resolved.packagetId ?
+                                        ts.Diagnostics.Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_3_with_Package_ID_4 :
+                                        ts.Diagnostics.Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_3 :
+                                    ts.Diagnostics.Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_not_resolved, name, containingFile, ts.getDirectoryPath(containingFile), resolved === null || resolved === void 0 ? void 0 : resolved.resolvedFileName, (resolved === null || resolved === void 0 ? void 0 : resolved.packagetId) && ts.packageIdToString(resolved.packagetId));
+                        }
                     }
                     else {
-                        resolution = loader(name, containingFile, compilerOptions, ((_b = resolutionHost.getCompilerHost) === null || _b === void 0 ? void 0 : _b.call(resolutionHost)) || resolutionHost, redirectedReference);
+                        resolution = loader(name, containingFile, compilerOptions, ((_c = resolutionHost.getCompilerHost) === null || _c === void 0 ? void 0 : _c.call(resolutionHost)) || resolutionHost, redirectedReference);
                         perDirectoryResolution.set(name, resolution);
                     }
                     resolutionsInFile.set(name, resolution);
@@ -114029,6 +116364,23 @@
                         logChanges = false;
                     }
                 }
+                else {
+                    var host = ((_d = resolutionHost.getCompilerHost) === null || _d === void 0 ? void 0 : _d.call(resolutionHost)) || resolutionHost;
+                    if (ts.isTraceEnabled(compilerOptions, host) && !seenNamesInFile.has(name)) {
+                        var resolved = getResolutionWithResolvedFileName(resolution);
+                        ts.trace(host, loader === resolveModuleName ?
+                            (resolved === null || resolved === void 0 ? void 0 : resolved.resolvedFileName) ?
+                                resolved.packagetId ?
+                                    ts.Diagnostics.Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2_with_Package_ID_3 :
+                                    ts.Diagnostics.Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2 :
+                                ts.Diagnostics.Reusing_resolution_of_module_0_from_1_of_old_program_it_was_not_resolved :
+                            (resolved === null || resolved === void 0 ? void 0 : resolved.resolvedFileName) ?
+                                resolved.packagetId ?
+                                    ts.Diagnostics.Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved_to_2_with_Package_ID_3 :
+                                    ts.Diagnostics.Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved_to_2 :
+                                ts.Diagnostics.Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_not_resolved, name, containingFile, resolved === null || resolved === void 0 ? void 0 : resolved.resolvedFileName, (resolved === null || resolved === void 0 ? void 0 : resolved.packagetId) && ts.packageIdToString(resolved.packagetId));
+                    }
+                }
                 ts.Debug.assert(resolution !== undefined && !resolution.isInvalidated);
                 seenNamesInFile.set(name, true);
                 resolvedModules.push(getResolutionWithResolvedFileName(resolution));
@@ -114474,7 +116826,7 @@
 var ts;
 (function (ts) {
     var moduleSpecifiers;
-    (function (moduleSpecifiers) {
+    (function (moduleSpecifiers_1) {
         var RelativePreference;
         (function (RelativePreference) {
             RelativePreference[RelativePreference["Relative"] = 0] = "Relative";
@@ -114517,41 +116869,68 @@
             };
         }
         function updateModuleSpecifier(compilerOptions, importingSourceFileName, toFileName, host, oldImportSpecifier) {
-            var res = getModuleSpecifierWorker(compilerOptions, importingSourceFileName, toFileName, host, getPreferencesForUpdate(compilerOptions, oldImportSpecifier));
+            var res = getModuleSpecifierWorker(compilerOptions, importingSourceFileName, toFileName, host, getPreferencesForUpdate(compilerOptions, oldImportSpecifier), {});
             if (res === oldImportSpecifier)
                 return undefined;
             return res;
         }
-        moduleSpecifiers.updateModuleSpecifier = updateModuleSpecifier;
+        moduleSpecifiers_1.updateModuleSpecifier = updateModuleSpecifier;
         // Note: importingSourceFile is just for usesJsExtensionOnImports
-        function getModuleSpecifier(compilerOptions, importingSourceFile, importingSourceFileName, toFileName, host, preferences) {
-            if (preferences === void 0) { preferences = {}; }
-            return getModuleSpecifierWorker(compilerOptions, importingSourceFileName, toFileName, host, getPreferences(preferences, compilerOptions, importingSourceFile));
+        function getModuleSpecifier(compilerOptions, importingSourceFile, importingSourceFileName, toFileName, host) {
+            return getModuleSpecifierWorker(compilerOptions, importingSourceFileName, toFileName, host, getPreferences({}, compilerOptions, importingSourceFile), {});
         }
-        moduleSpecifiers.getModuleSpecifier = getModuleSpecifier;
-        function getNodeModulesPackageName(compilerOptions, importingSourceFileName, nodeModulesFileName, host) {
+        moduleSpecifiers_1.getModuleSpecifier = getModuleSpecifier;
+        function getNodeModulesPackageName(compilerOptions, importingSourceFileName, nodeModulesFileName, host, preferences) {
             var info = getInfo(importingSourceFileName, host);
-            var modulePaths = getAllModulePaths(importingSourceFileName, nodeModulesFileName, host);
+            var modulePaths = getAllModulePaths(importingSourceFileName, nodeModulesFileName, host, preferences);
             return ts.firstDefined(modulePaths, function (modulePath) { return tryGetModuleNameAsNodeModule(modulePath, info, host, compilerOptions, /*packageNameOnly*/ true); });
         }
-        moduleSpecifiers.getNodeModulesPackageName = getNodeModulesPackageName;
-        function getModuleSpecifierWorker(compilerOptions, importingSourceFileName, toFileName, host, preferences) {
+        moduleSpecifiers_1.getNodeModulesPackageName = getNodeModulesPackageName;
+        function getModuleSpecifierWorker(compilerOptions, importingSourceFileName, toFileName, host, preferences, userPreferences) {
             var info = getInfo(importingSourceFileName, host);
-            var modulePaths = getAllModulePaths(importingSourceFileName, toFileName, host);
+            var modulePaths = getAllModulePaths(importingSourceFileName, toFileName, host, userPreferences);
             return ts.firstDefined(modulePaths, function (modulePath) { return tryGetModuleNameAsNodeModule(modulePath, info, host, compilerOptions); }) ||
                 getLocalModuleSpecifier(toFileName, info, compilerOptions, host, preferences);
         }
+        function tryGetModuleSpecifiersFromCache(moduleSymbol, importingSourceFile, host, userPreferences) {
+            return tryGetModuleSpecifiersFromCacheWorker(moduleSymbol, importingSourceFile, host, userPreferences)[0];
+        }
+        moduleSpecifiers_1.tryGetModuleSpecifiersFromCache = tryGetModuleSpecifiersFromCache;
+        function tryGetModuleSpecifiersFromCacheWorker(moduleSymbol, importingSourceFile, host, userPreferences) {
+            var _a;
+            var moduleSourceFile = ts.getSourceFileOfModule(moduleSymbol);
+            if (!moduleSourceFile) {
+                return ts.emptyArray;
+            }
+            var cache = (_a = host.getModuleSpecifierCache) === null || _a === void 0 ? void 0 : _a.call(host);
+            var cached = cache === null || cache === void 0 ? void 0 : cache.get(importingSourceFile.path, moduleSourceFile.path, userPreferences);
+            return [cached === null || cached === void 0 ? void 0 : cached.moduleSpecifiers, moduleSourceFile, cached === null || cached === void 0 ? void 0 : cached.modulePaths, cache];
+        }
         /** Returns an import for each symlink and for the realpath. */
         function getModuleSpecifiers(moduleSymbol, checker, compilerOptions, importingSourceFile, host, userPreferences) {
+            return getModuleSpecifiersWithCacheInfo(moduleSymbol, checker, compilerOptions, importingSourceFile, host, userPreferences).moduleSpecifiers;
+        }
+        moduleSpecifiers_1.getModuleSpecifiers = getModuleSpecifiers;
+        function getModuleSpecifiersWithCacheInfo(moduleSymbol, checker, compilerOptions, importingSourceFile, host, userPreferences) {
+            var computedWithoutCache = false;
             var ambient = tryGetModuleNameFromAmbientModule(moduleSymbol, checker);
             if (ambient)
-                return [ambient];
+                return { moduleSpecifiers: [ambient], computedWithoutCache: computedWithoutCache };
+            // eslint-disable-next-line prefer-const
+            var _a = tryGetModuleSpecifiersFromCacheWorker(moduleSymbol, importingSourceFile, host, userPreferences), specifiers = _a[0], moduleSourceFile = _a[1], modulePaths = _a[2], cache = _a[3];
+            if (specifiers)
+                return { moduleSpecifiers: specifiers, computedWithoutCache: computedWithoutCache };
+            if (!moduleSourceFile)
+                return { moduleSpecifiers: ts.emptyArray, computedWithoutCache: computedWithoutCache };
+            computedWithoutCache = true;
+            modulePaths || (modulePaths = getAllModulePathsWorker(importingSourceFile.path, moduleSourceFile.originalFileName, host));
+            var result = computeModuleSpecifiers(modulePaths, compilerOptions, importingSourceFile, host, userPreferences);
+            cache === null || cache === void 0 ? void 0 : cache.set(importingSourceFile.path, moduleSourceFile.path, userPreferences, modulePaths, result);
+            return { moduleSpecifiers: result, computedWithoutCache: computedWithoutCache };
+        }
+        moduleSpecifiers_1.getModuleSpecifiersWithCacheInfo = getModuleSpecifiersWithCacheInfo;
+        function computeModuleSpecifiers(modulePaths, compilerOptions, importingSourceFile, host, userPreferences) {
             var info = getInfo(importingSourceFile.path, host);
-            var moduleSourceFile = ts.getSourceFileOfNode(moduleSymbol.valueDeclaration || ts.getNonAugmentationDeclaration(moduleSymbol));
-            if (!moduleSourceFile) {
-                return [];
-            }
-            var modulePaths = getAllModulePaths(importingSourceFile.path, moduleSourceFile.originalFileName, host);
             var preferences = getPreferences(userPreferences, compilerOptions, importingSourceFile);
             var existingSpecifier = ts.forEach(modulePaths, function (modulePath) { return ts.forEach(host.getFileIncludeReasons().get(ts.toPath(modulePath.path, host.getCurrentDirectory(), info.getCanonicalFileName)), function (reason) {
                 if (reason.kind !== ts.FileIncludeKind.Import || reason.file !== importingSourceFile.path)
@@ -114562,8 +116941,10 @@
                     specifier :
                     undefined;
             }); });
-            if (existingSpecifier)
-                return [existingSpecifier];
+            if (existingSpecifier) {
+                var moduleSpecifiers_2 = [existingSpecifier];
+                return moduleSpecifiers_2;
+            }
             var importedFileIsInNodeModules = ts.some(modulePaths, function (p) { return p.isInNodeModules; });
             // Module specifier priority:
             //   1. "Bare package specifiers" (e.g. "@foo/bar") resulting from a path through node_modules to a package.json's "types" entry
@@ -114605,7 +116986,6 @@
                 (nodeModulesSpecifiers === null || nodeModulesSpecifiers === void 0 ? void 0 : nodeModulesSpecifiers.length) ? nodeModulesSpecifiers :
                     ts.Debug.checkDefined(relativeSpecifiers);
         }
-        moduleSpecifiers.getModuleSpecifiers = getModuleSpecifiers;
         // importingSourceFileName is separate because getEditsForFileRename may need to specify an updated path
         function getInfo(importingSourceFileName, host) {
             var getCanonicalFileName = ts.createGetCanonicalFileName(host.useCaseSensitiveFileNames ? host.useCaseSensitiveFileNames() : true);
@@ -114682,7 +117062,7 @@
             }
             return count;
         }
-        moduleSpecifiers.countPathComponents = countPathComponents;
+        moduleSpecifiers_1.countPathComponents = countPathComponents;
         function usesJsExtensionOnImports(_a) {
             var imports = _a.imports;
             return ts.firstDefined(imports, function (_a) {
@@ -114702,25 +117082,23 @@
             });
         }
         function forEachFileNameOfModule(importingFileName, importedFileName, host, preferSymlinks, cb) {
+            var _a;
             var getCanonicalFileName = ts.hostGetCanonicalFileName(host);
             var cwd = host.getCurrentDirectory();
             var referenceRedirect = host.isSourceOfProjectReferenceRedirect(importedFileName) ? host.getProjectReferenceRedirect(importedFileName) : undefined;
             var importedPath = ts.toPath(importedFileName, cwd, getCanonicalFileName);
             var redirects = host.redirectTargetsMap.get(importedPath) || ts.emptyArray;
-            var importedFileNames = __spreadArray(__spreadArray(__spreadArray([], (referenceRedirect ? [referenceRedirect] : ts.emptyArray)), [importedFileName]), redirects);
+            var importedFileNames = __spreadArray(__spreadArray(__spreadArray([], (referenceRedirect ? [referenceRedirect] : ts.emptyArray), true), [importedFileName], false), redirects, true);
             var targets = importedFileNames.map(function (f) { return ts.getNormalizedAbsolutePath(f, cwd); });
             var shouldFilterIgnoredPaths = !ts.every(targets, ts.containsIgnoredPath);
             if (!preferSymlinks) {
                 // Symlinks inside ignored paths are already filtered out of the symlink cache,
                 // so we only need to remove them from the realpath filenames.
-                var result_16 = ts.forEach(targets, function (p) { return !(shouldFilterIgnoredPaths && ts.containsIgnoredPath(p)) && cb(p, referenceRedirect === p); });
-                if (result_16)
-                    return result_16;
+                var result_15 = ts.forEach(targets, function (p) { return !(shouldFilterIgnoredPaths && ts.containsIgnoredPath(p)) && cb(p, referenceRedirect === p); });
+                if (result_15)
+                    return result_15;
             }
-            var links = host.getSymlinkCache
-                ? host.getSymlinkCache()
-                : ts.discoverProbableSymlinks(host.getSourceFiles(), getCanonicalFileName, cwd);
-            var symlinkedDirectories = links.getSymlinkedDirectoriesByRealpath();
+            var symlinkedDirectories = (_a = host.getSymlinkCache) === null || _a === void 0 ? void 0 : _a.call(host).getSymlinkedDirectoriesByRealpath();
             var fullImportedFileName = ts.getNormalizedAbsolutePath(importedFileName, cwd);
             var result = symlinkedDirectories && ts.forEachAncestorDirectory(ts.getDirectoryPath(fullImportedFileName), function (realPathDirectory) {
                 var symlinkDirectories = symlinkedDirectories.get(ts.ensureTrailingDirectorySeparator(ts.toPath(realPathDirectory, cwd, getCanonicalFileName)));
@@ -114738,10 +117116,10 @@
                     for (var _i = 0, symlinkDirectories_1 = symlinkDirectories; _i < symlinkDirectories_1.length; _i++) {
                         var symlinkDirectory = symlinkDirectories_1[_i];
                         var option = ts.resolvePath(symlinkDirectory, relative);
-                        var result_17 = cb(option, target === referenceRedirect);
+                        var result_16 = cb(option, target === referenceRedirect);
                         shouldFilterIgnoredPaths = true; // We found a non-ignored path in symlinks, so we can reject ignored-path realpaths
-                        if (result_17)
-                            return result_17;
+                        if (result_16)
+                            return result_16;
                     }
                 });
             });
@@ -114749,20 +117127,28 @@
                 ? ts.forEach(targets, function (p) { return shouldFilterIgnoredPaths && ts.containsIgnoredPath(p) ? undefined : cb(p, p === referenceRedirect); })
                 : undefined);
         }
-        moduleSpecifiers.forEachFileNameOfModule = forEachFileNameOfModule;
+        moduleSpecifiers_1.forEachFileNameOfModule = forEachFileNameOfModule;
         /**
          * Looks for existing imports that use symlinks to this module.
          * Symlinks will be returned first so they are preferred over the real path.
          */
-        function getAllModulePaths(importingFileName, importedFileName, host) {
+        function getAllModulePaths(importingFilePath, importedFileName, host, preferences, importedFilePath) {
             var _a;
+            if (importedFilePath === void 0) { importedFilePath = ts.toPath(importedFileName, host.getCurrentDirectory(), ts.hostGetCanonicalFileName(host)); }
             var cache = (_a = host.getModuleSpecifierCache) === null || _a === void 0 ? void 0 : _a.call(host);
-            var getCanonicalFileName = ts.hostGetCanonicalFileName(host);
             if (cache) {
-                var cached = cache.get(importingFileName, ts.toPath(importedFileName, host.getCurrentDirectory(), getCanonicalFileName));
-                if (typeof cached === "object")
-                    return cached;
+                var cached = cache.get(importingFilePath, importedFilePath, preferences);
+                if (cached === null || cached === void 0 ? void 0 : cached.modulePaths)
+                    return cached.modulePaths;
             }
+            var modulePaths = getAllModulePathsWorker(importingFilePath, importedFileName, host);
+            if (cache) {
+                cache.setModulePaths(importingFilePath, importedFilePath, preferences, modulePaths);
+            }
+            return modulePaths;
+        }
+        function getAllModulePathsWorker(importingFileName, importedFileName, host) {
+            var getCanonicalFileName = ts.hostGetCanonicalFileName(host);
             var allFileNames = new ts.Map();
             var importedFileFromNodeModules = false;
             forEachFileNameOfModule(importingFileName, importedFileName, host, 
@@ -114774,7 +117160,7 @@
             });
             // Sort by paths closest to importing file Name directory
             var sortedPaths = [];
-            var _loop_26 = function (directory) {
+            var _loop_31 = function (directory) {
                 var directoryStart = ts.ensureTrailingDirectorySeparator(directory);
                 var pathsInDirectory;
                 allFileNames.forEach(function (_a, fileName) {
@@ -114798,7 +117184,7 @@
             };
             var out_directory_1;
             for (var directory = ts.getDirectoryPath(importingFileName); allFileNames.size !== 0;) {
-                var state_9 = _loop_26(directory);
+                var state_9 = _loop_31(directory);
                 directory = out_directory_1;
                 if (state_9 === "break")
                     break;
@@ -114809,9 +117195,6 @@
                     remainingPaths.sort(comparePathsByRedirectAndNumberOfDirectorySeparators);
                 sortedPaths.push.apply(sortedPaths, remainingPaths);
             }
-            if (cache) {
-                cache.set(importingFileName, ts.toPath(importedFileName, host.getCurrentDirectory(), getCanonicalFileName), sortedPaths);
-            }
             return sortedPaths;
         }
         function tryGetModuleNameFromAmbientModule(moduleSymbol, checker) {
@@ -115067,7 +117450,11 @@
             }
         }
         function getJSExtensionForFile(fileName, options) {
-            var ext = ts.extensionFromPath(fileName);
+            var _a;
+            return (_a = tryGetJSExtensionForFile(fileName, options)) !== null && _a !== void 0 ? _a : ts.Debug.fail("Extension " + ts.extensionFromPath(fileName) + " is unsupported:: FileName:: " + fileName);
+        }
+        function tryGetJSExtensionForFile(fileName, options) {
+            var ext = ts.tryGetExtensionFromPath(fileName);
             switch (ext) {
                 case ".ts" /* Ts */:
                 case ".d.ts" /* Dts */:
@@ -115078,12 +117465,11 @@
                 case ".jsx" /* Jsx */:
                 case ".json" /* Json */:
                     return ext;
-                case ".tsbuildinfo" /* TsBuildInfo */:
-                    return ts.Debug.fail("Extension " + ".tsbuildinfo" /* TsBuildInfo */ + " is unsupported:: FileName:: " + fileName);
                 default:
-                    return ts.Debug.assertNever(ext);
+                    return undefined;
             }
         }
+        moduleSpecifiers_1.tryGetJSExtensionForFile = tryGetJSExtensionForFile;
         function getRelativePathIfInDirectory(path, directoryPath, getCanonicalFileName) {
             var relativePath = ts.getRelativePathToDirectoryOrUrl(directoryPath, path, directoryPath, getCanonicalFileName, /*isAbsolutePathAnUrl*/ false);
             return ts.isRootedDiskPath(relativePath) ? undefined : relativePath;
@@ -115100,12 +117486,12 @@
         getCurrentDirectory: function () { return ts.sys.getCurrentDirectory(); },
         getNewLine: function () { return ts.sys.newLine; },
         getCanonicalFileName: ts.createGetCanonicalFileName(ts.sys.useCaseSensitiveFileNames)
-    } : undefined; // TODO: GH#18217
+    } : undefined;
     /**
      * Create a function that reports error by writing to the system and handles the formating of the diagnostic
      */
     function createDiagnosticReporter(system, pretty) {
-        var host = system === ts.sys ? sysFormatDiagnosticsHost : {
+        var host = system === ts.sys && sysFormatDiagnosticsHost ? sysFormatDiagnosticsHost : {
             getCurrentDirectory: function () { return system.getCurrentDirectory(); },
             getNewLine: function () { return system.newLine; },
             getCanonicalFileName: ts.createGetCanonicalFileName(system.useCaseSensitiveFileNames),
@@ -115451,6 +117837,7 @@
         ConfigFileOfReferencedProject: "Config file of referened project",
         ExtendedConfigOfReferencedProject: "Extended config file of referenced project",
         WildcardDirectoryOfReferencedProject: "Wild card directory of referenced project",
+        PackageJson: "package.json file",
     };
     function createWatchFactory(host, options) {
         var watchLogLevel = host.trace ? options.extendedDiagnostics ? ts.WatchLogLevel.Verbose : options.diagnostics ? ts.WatchLogLevel.TriggerOnly : ts.WatchLogLevel.None : ts.WatchLogLevel.None;
@@ -115525,7 +117912,7 @@
             for (var _i = 0; _i < arguments.length; _i++) {
                 args[_i] = arguments[_i];
             }
-            var result = originalGetSourceFile.call.apply(originalGetSourceFile, __spreadArray([compilerHost], args));
+            var result = originalGetSourceFile.call.apply(originalGetSourceFile, __spreadArray([compilerHost], args, false));
             if (result) {
                 result.version = computeHash(result.text);
             }
@@ -115689,12 +118076,14 @@
         var builderProgram;
         var reloadLevel; // level to indicate if the program needs to be reloaded from config file/just filenames etc
         var missingFilesMap; // Map of file watchers for the missing files
+        var packageJsonMap; // map of watchers for package json files used in module resolution
         var watchedWildcardDirectories; // map of watchers for the wild card directories in the config file
         var timerToUpdateProgram; // timer callback to recompile the program
         var timerToInvalidateFailedLookupResolutions; // timer callback to invalidate resolutions for changes in failed lookup locations
         var parsedConfigs; // Parsed commandline and watching cached for referenced projects
         var sharedExtendedConfigFileWatchers; // Map of file watchers for extended files, shared between different referenced projects
         var extendedConfigCache = host.extendedConfigCache; // Cache for extended config evaluation
+        var changesAffectResolution = false; // Flag for indicating non-config changes affect module resolution
         var sourceFilesCache = new ts.Map(); // Cache that stores the source file and version info
         var missingFilePathsRequestedForRelease; // These paths are held temporarily so that we can remove the entry from source file cache if the file is not tracked by missing files
         var hasChangedCompilerOptions = false; // True if the compiler options have changed between compilations
@@ -115738,7 +118127,7 @@
             for (var _i = 1; _i < arguments.length; _i++) {
                 args[_i - 1] = arguments[_i];
             }
-            return getVersionedSourceFileByPath.apply(void 0, __spreadArray([fileName, toPath(fileName)], args));
+            return getVersionedSourceFileByPath.apply(void 0, __spreadArray([fileName, toPath(fileName)], args, false));
         };
         compilerHost.getSourceFileByPath = getVersionedSourceFileByPath;
         compilerHost.getNewLine = function () { return newLine; };
@@ -115845,12 +118234,12 @@
             var program = getCurrentBuilderProgram();
             if (hasChangedCompilerOptions) {
                 newLine = updateNewLine();
-                if (program && ts.changesAffectModuleResolution(program.getCompilerOptions(), compilerOptions)) {
+                if (program && (changesAffectResolution || ts.changesAffectModuleResolution(program.getCompilerOptions(), compilerOptions))) {
                     resolutionCache.clear();
                 }
             }
             // All resolutions are invalid if user provided resolutions
-            var hasInvalidatedResolution = resolutionCache.createHasInvalidatedResolution(userProvidedResolution);
+            var hasInvalidatedResolution = resolutionCache.createHasInvalidatedResolution(userProvidedResolution || changesAffectResolution);
             if (ts.isProgramUptoDate(getCurrentProgram(), rootFileNames, compilerOptions, getSourceVersion, fileExists, hasInvalidatedResolution, hasChangedAutomaticTypeDirectiveNames, getParsedCommandLine, projectReferences)) {
                 if (hasChangedConfigFileParsingErrors) {
                     builderProgram = createProgram(/*rootNames*/ undefined, /*options*/ undefined, compilerHost, builderProgram, configFileParsingDiagnostics, projectReferences);
@@ -115860,6 +118249,7 @@
             else {
                 createNewProgram(hasInvalidatedResolution);
             }
+            changesAffectResolution = false; // reset for next sync
             if (host.afterProgramCreate && program !== builderProgram) {
                 host.afterProgramCreate(builderProgram);
             }
@@ -115879,9 +118269,15 @@
             compilerHost.hasInvalidatedResolution = hasInvalidatedResolution;
             compilerHost.hasChangedAutomaticTypeDirectiveNames = hasChangedAutomaticTypeDirectiveNames;
             builderProgram = createProgram(rootFileNames, compilerOptions, compilerHost, builderProgram, configFileParsingDiagnostics, projectReferences);
+            // map package json cache entries to their realpaths so we don't try to watch across symlinks
+            var packageCacheEntries = ts.map(resolutionCache.getModuleResolutionCache().getPackageJsonInfoCache().entries(), function (_a) {
+                var path = _a[0], data = _a[1];
+                return [compilerHost.realpath ? toPath(compilerHost.realpath(path)) : path, data];
+            });
             resolutionCache.finishCachingPerDirectoryResolution();
             // Update watches
             ts.updateMissingFilePathsWatch(builderProgram.getProgram(), missingFilesMap || (missingFilesMap = new ts.Map()), watchMissingFilePath);
+            ts.updatePackageJsonWatch(packageCacheEntries, packageJsonMap || (packageJsonMap = new ts.Map()), watchPackageJsonLookupPath);
             if (needsUpdateInTypeRootWatch) {
                 resolutionCache.updateTypeRootsWatch();
             }
@@ -116183,6 +118579,21 @@
                 ts.noopFileWatcher :
                 watchFilePath(missingFilePath, missingFilePath, onMissingFileChange, ts.PollingInterval.Medium, watchOptions, ts.WatchType.MissingFile);
         }
+        function watchPackageJsonLookupPath(packageJsonPath) {
+            // If the package.json is pulled into the compilation itself (eg, via json imports), don't add a second watcher here
+            return sourceFilesCache.has(packageJsonPath) ?
+                ts.noopFileWatcher :
+                watchFilePath(packageJsonPath, packageJsonPath, onPackageJsonChange, ts.PollingInterval.High, watchOptions, ts.WatchType.PackageJson);
+        }
+        function onPackageJsonChange(fileName, eventKind, path) {
+            updateCachedSystemWithFile(fileName, path, eventKind);
+            // package.json changes invalidate module resolution and can change the set of loaded files
+            // so if we witness a change to one, we have to do a full reload
+            reloadLevel = ts.ConfigFileProgramReloadLevel.Full;
+            changesAffectResolution = true;
+            // Update the program
+            scheduleProgramUpdate();
+        }
         function onMissingFileChange(fileName, eventKind, missingFilePath) {
             updateCachedSystemWithFile(fileName, missingFilePath, eventKind);
             if (eventKind === ts.FileWatcherEventKind.Created && missingFilesMap.has(missingFilePath)) {
@@ -116526,6 +118937,8 @@
             allWatchedInputFiles: new ts.Map(),
             allWatchedConfigFiles: new ts.Map(),
             allWatchedExtendedConfigFiles: new ts.Map(),
+            allWatchedPackageJsonFiles: new ts.Map(),
+            lastCachedPackageJsonLookups: new ts.Map(),
             timerToBuildInvalidatedProject: undefined,
             reportFileChangeDetected: false,
             watchFile: watchFile,
@@ -116649,6 +119062,7 @@
             });
             ts.mutateMapSkippingNewValues(state.allWatchedWildcardDirectories, currentProjects, { onDeleteValue: function (existingMap) { return existingMap.forEach(ts.closeFileWatcherOf); } });
             ts.mutateMapSkippingNewValues(state.allWatchedInputFiles, currentProjects, { onDeleteValue: function (existingMap) { return existingMap.forEach(ts.closeFileWatcher); } });
+            ts.mutateMapSkippingNewValues(state.allWatchedPackageJsonFiles, currentProjects, { onDeleteValue: function (existingMap) { return existingMap.forEach(ts.closeFileWatcher); } });
         }
         return state.buildOrder = buildOrder;
     }
@@ -116681,7 +119095,7 @@
             for (var _i = 0; _i < arguments.length; _i++) {
                 args[_i] = arguments[_i];
             }
-            return originalGetSourceFile.call.apply(originalGetSourceFile, __spreadArray([compilerHost], args));
+            return originalGetSourceFile.call.apply(originalGetSourceFile, __spreadArray([compilerHost], args, false));
         }), originalReadFile = _a.originalReadFile, originalFileExists = _a.originalFileExists, originalDirectoryExists = _a.originalDirectoryExists, originalCreateDirectory = _a.originalCreateDirectory, originalWriteFile = _a.originalWriteFile, getSourceFileWithCache = _a.getSourceFileWithCache, readFileWithCache = _a.readFileWithCache;
         state.readFileWithCache = readFileWithCache;
         compilerHost.getSourceFile = getSourceFileWithCache;
@@ -116899,6 +119313,10 @@
             (_b = state.typeReferenceDirectiveResolutionCache) === null || _b === void 0 ? void 0 : _b.update(config.options);
             // Create program
             program = host.createProgram(config.fileNames, config.options, compilerHost, getOldProgram(state, projectPath, config), ts.getConfigFileParsingDiagnostics(config), config.projectReferences);
+            state.lastCachedPackageJsonLookups.set(projectPath, state.moduleResolutionCache && ts.map(state.moduleResolutionCache.getPackageJsonInfoCache().entries(), function (_a) {
+                var path = _a[0], data = _a[1];
+                return [state.host.realpath ? toPath(state, state.host.realpath(path)) : path, data];
+            }));
             if (state.watch) {
                 state.builderPrograms.set(projectPath, program);
             }
@@ -116915,7 +119333,7 @@
         }
         function getSyntaxDiagnostics(cancellationToken) {
             ts.Debug.assertIsDefined(program);
-            handleDiagnostics(__spreadArray(__spreadArray(__spreadArray(__spreadArray([], program.getConfigFileParsingDiagnostics()), program.getOptionsDiagnostics(cancellationToken)), program.getGlobalDiagnostics(cancellationToken)), program.getSyntacticDiagnostics(/*sourceFile*/ undefined, cancellationToken)), BuildResultFlags.SyntaxErrors, "Syntactic");
+            handleDiagnostics(__spreadArray(__spreadArray(__spreadArray(__spreadArray([], program.getConfigFileParsingDiagnostics(), true), program.getOptionsDiagnostics(cancellationToken), true), program.getGlobalDiagnostics(cancellationToken), true), program.getSyntacticDiagnostics(/*sourceFile*/ undefined, cancellationToken), true), BuildResultFlags.SyntaxErrors, "Syntactic");
         }
         function getSemanticDiagnostics(cancellationToken) {
             handleDiagnostics(ts.Debug.checkDefined(program).getSemanticDiagnostics(/*sourceFile*/ undefined, cancellationToken), BuildResultFlags.TypeErrors, "Semantic");
@@ -116979,7 +119397,7 @@
             var emitResult = program.emitBuildInfo(writeFileCallback, cancellationToken);
             if (emitResult.diagnostics.length) {
                 reportErrors(state, emitResult.diagnostics);
-                state.diagnostics.set(projectPath, __spreadArray(__spreadArray([], state.diagnostics.get(projectPath)), emitResult.diagnostics));
+                state.diagnostics.set(projectPath, __spreadArray(__spreadArray([], state.diagnostics.get(projectPath), true), emitResult.diagnostics, true));
                 buildResult = BuildResultFlags.EmitErrors & buildResult;
             }
             if (emitResult.emittedFiles && state.write) {
@@ -117130,12 +119548,14 @@
                 watchExtendedConfigFiles(state, projectPath, config);
                 watchWildCardDirectories(state, project, projectPath, config);
                 watchInputFiles(state, project, projectPath, config);
+                watchPackageJsonFiles(state, project, projectPath, config);
             }
             else if (reloadLevel === ts.ConfigFileProgramReloadLevel.Partial) {
                 // Update file names
                 config.fileNames = ts.getFileNamesFromConfigSpecs(config.options.configFile.configFileSpecs, ts.getDirectoryPath(project), config.options, state.parseConfigFileHost);
                 ts.updateErrorForNoInputFiles(config.fileNames, project, config.options.configFile.configFileSpecs, config.errors, ts.canJsonReportNoInputFiles(config.raw));
                 watchInputFiles(state, project, projectPath, config);
+                watchPackageJsonFiles(state, project, projectPath, config);
             }
             var status = getUpToDateStatus(state, config, projectPath);
             verboseReportProjectStatus(state, project, status);
@@ -117378,6 +119798,13 @@
             var extendedConfigStatus = ts.forEach(project.options.configFile.extendedSourceFiles || ts.emptyArray, function (configFile) { return checkConfigFileUpToDateStatus(state, configFile, oldestOutputFileTime, oldestOutputFileName); });
             if (extendedConfigStatus)
                 return extendedConfigStatus;
+            // Check package file time
+            var dependentPackageFileStatus = ts.forEach(state.lastCachedPackageJsonLookups.get(resolvedPath) || ts.emptyArray, function (_a) {
+                var path = _a[0];
+                return checkConfigFileUpToDateStatus(state, path, oldestOutputFileTime, oldestOutputFileName);
+            });
+            if (dependentPackageFileStatus)
+                return dependentPackageFileStatus;
         }
         if (!force && !state.buildInfoChecked.has(resolvedPath)) {
             state.buildInfoChecked.set(resolvedPath, true);
@@ -117424,6 +119851,8 @@
         return actual;
     }
     function updateOutputTimestampsWorker(state, proj, priorNewestUpdateTime, verboseMessage, skipOutputs) {
+        if (proj.options.noEmit)
+            return priorNewestUpdateTime;
         var host = state.host;
         var outputs = ts.getAllProjectOutputs(proj, !host.useCaseSensitiveFileNames());
         if (!skipOutputs || outputs.length !== skipOutputs.size) {
@@ -117687,6 +120116,14 @@
             onDeleteValue: ts.closeFileWatcher,
         });
     }
+    function watchPackageJsonFiles(state, resolved, resolvedPath, parsed) {
+        if (!state.watch || !state.lastCachedPackageJsonLookups)
+            return;
+        ts.mutateMap(getOrCreateValueMapFromConfigFileMap(state.allWatchedPackageJsonFiles, resolvedPath), new ts.Map(state.lastCachedPackageJsonLookups.get(resolvedPath)), {
+            createNewValue: function (path, _input) { return state.watchFile(path, function () { return invalidateProjectAndScheduleBuilds(state, resolvedPath, ts.ConfigFileProgramReloadLevel.Full); }, ts.PollingInterval.High, parsed === null || parsed === void 0 ? void 0 : parsed.watchOptions, ts.WatchType.PackageJson, resolved); },
+            onDeleteValue: ts.closeFileWatcher,
+        });
+    }
     function startWatching(state, buildOrder) {
         if (!state.watchAllProjectsPending)
             return;
@@ -117703,6 +120140,8 @@
                 watchWildCardDirectories(state, resolved, resolvedPath, cfg);
                 // Watch input files
                 watchInputFiles(state, resolved, resolvedPath, cfg);
+                // Watch package json files
+                watchPackageJsonFiles(state, resolved, resolvedPath, cfg);
             }
         }
     }
@@ -117711,6 +120150,7 @@
         ts.clearMap(state.allWatchedExtendedConfigFiles, ts.closeFileWatcherOf);
         ts.clearMap(state.allWatchedWildcardDirectories, function (watchedWildcardDirectories) { return ts.clearMap(watchedWildcardDirectories, ts.closeFileWatcherOf); });
         ts.clearMap(state.allWatchedInputFiles, function (watchedWildcardDirectories) { return ts.clearMap(watchedWildcardDirectories, ts.closeFileWatcher); });
+        ts.clearMap(state.allWatchedPackageJsonFiles, function (watchedPacageJsonFiles) { return ts.clearMap(watchedPacageJsonFiles, ts.closeFileWatcher); });
     }
     function createSolutionBuilderWorker(watch, hostOrHostWithWatch, rootNames, options, baseWatchOptions) {
         var state = createSolutionBuilderState(watch, hostOrHostWithWatch, rootNames, options, baseWatchOptions);
@@ -117743,7 +120183,7 @@
         for (var _i = 2; _i < arguments.length; _i++) {
             args[_i - 2] = arguments[_i];
         }
-        state.host.reportSolutionBuilderStatus(ts.createCompilerDiagnostic.apply(void 0, __spreadArray([message], args)));
+        state.host.reportSolutionBuilderStatus(ts.createCompilerDiagnostic.apply(void 0, __spreadArray([message], args, false)));
     }
     function reportWatchStatus(state, message) {
         var _a, _b;
@@ -117751,7 +120191,7 @@
         for (var _i = 2; _i < arguments.length; _i++) {
             args[_i - 2] = arguments[_i];
         }
-        (_b = (_a = state.hostWithWatch).onWatchStatusChange) === null || _b === void 0 ? void 0 : _b.call(_a, ts.createCompilerDiagnostic.apply(void 0, __spreadArray([message], args)), state.host.getNewLine(), state.baseCompilerOptions);
+        (_b = (_a = state.hostWithWatch).onWatchStatusChange) === null || _b === void 0 ? void 0 : _b.call(_a, ts.createCompilerDiagnostic.apply(void 0, __spreadArray([message], args, false)), state.host.getNewLine(), state.baseCompilerOptions);
     }
     function reportErrors(_a, errors) {
         var host = _a.host;
@@ -117925,8 +120365,9 @@
             return availableVersion.compareTo(cachedTyping.version) <= 0;
         }
         JsTyping.isTypingUpToDate = isTypingUpToDate;
-        JsTyping.nodeCoreModuleList = [
+        var unprefixedNodeCoreModuleList = [
             "assert",
+            "assert/strict",
             "async_hooks",
             "buffer",
             "child_process",
@@ -117935,14 +120376,18 @@
             "constants",
             "crypto",
             "dgram",
+            "diagnostics_channel",
             "dns",
+            "dns/promises",
             "domain",
             "events",
             "fs",
+            "fs/promises",
             "http",
             "https",
             "http2",
             "inspector",
+            "module",
             "net",
             "os",
             "path",
@@ -117953,16 +120398,24 @@
             "readline",
             "repl",
             "stream",
+            "stream/promises",
             "string_decoder",
             "timers",
+            "timers/promises",
             "tls",
+            "trace_events",
             "tty",
             "url",
             "util",
+            "util/types",
             "v8",
             "vm",
+            "wasi",
+            "worker_threads",
             "zlib"
         ];
+        JsTyping.prefixedNodeCoreModuleList = unprefixedNodeCoreModuleList.map(function (name) { return "node:" + name; });
+        JsTyping.nodeCoreModuleList = __spreadArray(__spreadArray([], unprefixedNodeCoreModuleList, true), JsTyping.prefixedNodeCoreModuleList, true);
         JsTyping.nodeCoreModules = new ts.Set(JsTyping.nodeCoreModuleList);
         function nonRelativeModuleNameForTypingCache(moduleName) {
             return JsTyping.nodeCoreModules.has(moduleName) ? "node" : moduleName;
@@ -118288,6 +120741,21 @@
         SemanticClassificationFormat["Original"] = "original";
         SemanticClassificationFormat["TwentyTwenty"] = "2020";
     })(SemanticClassificationFormat = ts.SemanticClassificationFormat || (ts.SemanticClassificationFormat = {}));
+    var CompletionTriggerKind;
+    (function (CompletionTriggerKind) {
+        /** Completion was triggered by typing an identifier, manual invocation (e.g Ctrl+Space) or via API. */
+        CompletionTriggerKind[CompletionTriggerKind["Invoked"] = 1] = "Invoked";
+        /** Completion was triggered by a trigger character. */
+        CompletionTriggerKind[CompletionTriggerKind["TriggerCharacter"] = 2] = "TriggerCharacter";
+        /** Completion was re-triggered as the current completion list is incomplete. */
+        CompletionTriggerKind[CompletionTriggerKind["TriggerForIncompleteCompletions"] = 3] = "TriggerForIncompleteCompletions";
+    })(CompletionTriggerKind = ts.CompletionTriggerKind || (ts.CompletionTriggerKind = {}));
+    var InlayHintKind;
+    (function (InlayHintKind) {
+        InlayHintKind["Type"] = "Type";
+        InlayHintKind["Parameter"] = "Parameter";
+        InlayHintKind["Enum"] = "Enum";
+    })(InlayHintKind = ts.InlayHintKind || (ts.InlayHintKind = {}));
     var HighlightSpanKind;
     (function (HighlightSpanKind) {
         HighlightSpanKind["none"] = "none";
@@ -118448,7 +120916,10 @@
          * interface Y { foo:number; }
          */
         ScriptElementKind["memberVariableElement"] = "property";
-        /** class X { constructor() { } } */
+        /**
+         * class X { constructor() { } }
+         * class X { static { } }
+         */
         ScriptElementKind["constructorImplementationElement"] = "constructor";
         /** interface Y { ():number; } */
         ScriptElementKind["callSignatureElement"] = "call";
@@ -118570,37 +121041,37 @@
     })(SemanticMeaning = ts.SemanticMeaning || (ts.SemanticMeaning = {}));
     function getMeaningFromDeclaration(node) {
         switch (node.kind) {
-            case 250 /* VariableDeclaration */:
+            case 252 /* VariableDeclaration */:
                 return ts.isInJSFile(node) && ts.getJSDocEnumTag(node) ? 7 /* All */ : 1 /* Value */;
-            case 161 /* Parameter */:
-            case 199 /* BindingElement */:
-            case 164 /* PropertyDeclaration */:
-            case 163 /* PropertySignature */:
-            case 289 /* PropertyAssignment */:
-            case 290 /* ShorthandPropertyAssignment */:
-            case 166 /* MethodDeclaration */:
-            case 165 /* MethodSignature */:
-            case 167 /* Constructor */:
-            case 168 /* GetAccessor */:
-            case 169 /* SetAccessor */:
-            case 252 /* FunctionDeclaration */:
-            case 209 /* FunctionExpression */:
-            case 210 /* ArrowFunction */:
-            case 288 /* CatchClause */:
-            case 281 /* JsxAttribute */:
+            case 162 /* Parameter */:
+            case 201 /* BindingElement */:
+            case 165 /* PropertyDeclaration */:
+            case 164 /* PropertySignature */:
+            case 291 /* PropertyAssignment */:
+            case 292 /* ShorthandPropertyAssignment */:
+            case 167 /* MethodDeclaration */:
+            case 166 /* MethodSignature */:
+            case 169 /* Constructor */:
+            case 170 /* GetAccessor */:
+            case 171 /* SetAccessor */:
+            case 254 /* FunctionDeclaration */:
+            case 211 /* FunctionExpression */:
+            case 212 /* ArrowFunction */:
+            case 290 /* CatchClause */:
+            case 283 /* JsxAttribute */:
                 return 1 /* Value */;
-            case 160 /* TypeParameter */:
-            case 254 /* InterfaceDeclaration */:
-            case 255 /* TypeAliasDeclaration */:
-            case 178 /* TypeLiteral */:
+            case 161 /* TypeParameter */:
+            case 256 /* InterfaceDeclaration */:
+            case 257 /* TypeAliasDeclaration */:
+            case 180 /* TypeLiteral */:
                 return 2 /* Type */;
-            case 335 /* JSDocTypedefTag */:
+            case 340 /* JSDocTypedefTag */:
                 // If it has no name node, it shares the name with the value declaration below it.
                 return node.name === undefined ? 1 /* Value */ | 2 /* Type */ : 2 /* Type */;
-            case 292 /* EnumMember */:
-            case 253 /* ClassDeclaration */:
+            case 294 /* EnumMember */:
+            case 255 /* ClassDeclaration */:
                 return 1 /* Value */ | 2 /* Type */;
-            case 257 /* ModuleDeclaration */:
+            case 259 /* ModuleDeclaration */:
                 if (ts.isAmbientModule(node)) {
                     return 4 /* Namespace */ | 1 /* Value */;
                 }
@@ -118610,16 +121081,16 @@
                 else {
                     return 4 /* Namespace */;
                 }
-            case 256 /* EnumDeclaration */:
-            case 265 /* NamedImports */:
-            case 266 /* ImportSpecifier */:
-            case 261 /* ImportEqualsDeclaration */:
-            case 262 /* ImportDeclaration */:
-            case 267 /* ExportAssignment */:
-            case 268 /* ExportDeclaration */:
+            case 258 /* EnumDeclaration */:
+            case 267 /* NamedImports */:
+            case 268 /* ImportSpecifier */:
+            case 263 /* ImportEqualsDeclaration */:
+            case 264 /* ImportDeclaration */:
+            case 269 /* ExportAssignment */:
+            case 270 /* ExportDeclaration */:
                 return 7 /* All */;
             // An external module can be a Value
-            case 298 /* SourceFile */:
+            case 300 /* SourceFile */:
                 return 4 /* Namespace */ | 1 /* Value */;
         }
         return 7 /* All */;
@@ -118627,23 +121098,32 @@
     ts.getMeaningFromDeclaration = getMeaningFromDeclaration;
     function getMeaningFromLocation(node) {
         node = getAdjustedReferenceLocation(node);
-        if (node.kind === 298 /* SourceFile */) {
+        var parent = node.parent;
+        if (node.kind === 300 /* SourceFile */) {
             return 1 /* Value */;
         }
-        else if (node.parent.kind === 267 /* ExportAssignment */
-            || node.parent.kind === 273 /* ExternalModuleReference */
-            || node.parent.kind === 266 /* ImportSpecifier */
-            || node.parent.kind === 263 /* ImportClause */
-            || ts.isImportEqualsDeclaration(node.parent) && node === node.parent.name) {
+        else if (ts.isExportAssignment(parent)
+            || ts.isExportSpecifier(parent)
+            || ts.isExternalModuleReference(parent)
+            || ts.isImportSpecifier(parent)
+            || ts.isImportClause(parent)
+            || ts.isImportEqualsDeclaration(parent) && node === parent.name) {
+            var decl = parent;
+            while (decl) {
+                if (ts.isImportEqualsDeclaration(decl) || ts.isImportClause(decl) || ts.isExportDeclaration(decl)) {
+                    return decl.isTypeOnly ? 2 /* Type */ : 7 /* All */;
+                }
+                decl = decl.parent;
+            }
             return 7 /* All */;
         }
         else if (isInRightSideOfInternalImportEqualsDeclaration(node)) {
             return getMeaningFromRightHandSideOfImportEquals(node);
         }
         else if (ts.isDeclarationName(node)) {
-            return getMeaningFromDeclaration(node.parent);
+            return getMeaningFromDeclaration(parent);
         }
-        else if (ts.isEntityName(node) && (ts.isJSDocNameReference(node.parent) || ts.isJSDocLink(node.parent))) {
+        else if (ts.isEntityName(node) && ts.findAncestor(node, ts.or(ts.isJSDocNameReference, ts.isJSDocLinkLike, ts.isJSDocMemberName))) {
             return 7 /* All */;
         }
         else if (isTypeReference(node)) {
@@ -118652,11 +121132,11 @@
         else if (isNamespaceReference(node)) {
             return 4 /* Namespace */;
         }
-        else if (ts.isTypeParameterDeclaration(node.parent)) {
-            ts.Debug.assert(ts.isJSDocTemplateTag(node.parent.parent)); // Else would be handled by isDeclarationName
+        else if (ts.isTypeParameterDeclaration(parent)) {
+            ts.Debug.assert(ts.isJSDocTemplateTag(parent.parent)); // Else would be handled by isDeclarationName
             return 2 /* Type */;
         }
-        else if (ts.isLiteralTypeNode(node.parent)) {
+        else if (ts.isLiteralTypeNode(parent)) {
             // This might be T["name"], which is actually referencing a property and not a type. So allow both meanings.
             return 2 /* Type */ | 1 /* Value */;
         }
@@ -118669,11 +121149,11 @@
         //     import a = |b|; // Namespace
         //     import a = |b.c|; // Value, type, namespace
         //     import a = |b.c|.d; // Namespace
-        var name = node.kind === 158 /* QualifiedName */ ? node : ts.isQualifiedName(node.parent) && node.parent.right === node ? node.parent : undefined;
-        return name && name.parent.kind === 261 /* ImportEqualsDeclaration */ ? 7 /* All */ : 4 /* Namespace */;
+        var name = node.kind === 159 /* QualifiedName */ ? node : ts.isQualifiedName(node.parent) && node.parent.right === node ? node.parent : undefined;
+        return name && name.parent.kind === 263 /* ImportEqualsDeclaration */ ? 7 /* All */ : 4 /* Namespace */;
     }
     function isInRightSideOfInternalImportEqualsDeclaration(node) {
-        while (node.parent.kind === 158 /* QualifiedName */) {
+        while (node.parent.kind === 159 /* QualifiedName */) {
             node = node.parent;
         }
         return ts.isInternalModuleImportEqualsDeclaration(node.parent) && node.parent.moduleReference === node;
@@ -118685,27 +121165,27 @@
     function isQualifiedNameNamespaceReference(node) {
         var root = node;
         var isLastClause = true;
-        if (root.parent.kind === 158 /* QualifiedName */) {
-            while (root.parent && root.parent.kind === 158 /* QualifiedName */) {
+        if (root.parent.kind === 159 /* QualifiedName */) {
+            while (root.parent && root.parent.kind === 159 /* QualifiedName */) {
                 root = root.parent;
             }
             isLastClause = root.right === node;
         }
-        return root.parent.kind === 174 /* TypeReference */ && !isLastClause;
+        return root.parent.kind === 176 /* TypeReference */ && !isLastClause;
     }
     function isPropertyAccessNamespaceReference(node) {
         var root = node;
         var isLastClause = true;
-        if (root.parent.kind === 202 /* PropertyAccessExpression */) {
-            while (root.parent && root.parent.kind === 202 /* PropertyAccessExpression */) {
+        if (root.parent.kind === 204 /* PropertyAccessExpression */) {
+            while (root.parent && root.parent.kind === 204 /* PropertyAccessExpression */) {
                 root = root.parent;
             }
             isLastClause = root.name === node;
         }
-        if (!isLastClause && root.parent.kind === 224 /* ExpressionWithTypeArguments */ && root.parent.parent.kind === 287 /* HeritageClause */) {
+        if (!isLastClause && root.parent.kind === 226 /* ExpressionWithTypeArguments */ && root.parent.parent.kind === 289 /* HeritageClause */) {
             var decl = root.parent.parent.parent;
-            return (decl.kind === 253 /* ClassDeclaration */ && root.parent.parent.token === 116 /* ImplementsKeyword */) ||
-                (decl.kind === 254 /* InterfaceDeclaration */ && root.parent.parent.token === 93 /* ExtendsKeyword */);
+            return (decl.kind === 255 /* ClassDeclaration */ && root.parent.parent.token === 117 /* ImplementsKeyword */) ||
+                (decl.kind === 256 /* InterfaceDeclaration */ && root.parent.parent.token === 94 /* ExtendsKeyword */);
         }
         return false;
     }
@@ -118714,17 +121194,17 @@
             node = node.parent;
         }
         switch (node.kind) {
-            case 107 /* ThisKeyword */:
+            case 108 /* ThisKeyword */:
                 return !ts.isExpressionNode(node);
-            case 188 /* ThisType */:
+            case 190 /* ThisType */:
                 return true;
         }
         switch (node.parent.kind) {
-            case 174 /* TypeReference */:
+            case 176 /* TypeReference */:
                 return true;
-            case 196 /* ImportType */:
+            case 198 /* ImportType */:
                 return !node.parent.isTypeOf;
-            case 224 /* ExpressionWithTypeArguments */:
+            case 226 /* ExpressionWithTypeArguments */:
                 return !ts.isExpressionWithTypeArgumentsInClassExtendsClause(node.parent);
         }
         return false;
@@ -118791,7 +121271,7 @@
     ts.climbPastPropertyOrElementAccess = climbPastPropertyOrElementAccess;
     function getTargetLabel(referenceNode, labelName) {
         while (referenceNode) {
-            if (referenceNode.kind === 246 /* LabeledStatement */ && referenceNode.label.escapedText === labelName) {
+            if (referenceNode.kind === 248 /* LabeledStatement */ && referenceNode.label.escapedText === labelName) {
                 return referenceNode.label;
             }
             referenceNode = referenceNode.parent;
@@ -118852,22 +121332,22 @@
     ts.isNameOfFunctionDeclaration = isNameOfFunctionDeclaration;
     function isLiteralNameOfPropertyDeclarationOrIndexAccess(node) {
         switch (node.parent.kind) {
-            case 164 /* PropertyDeclaration */:
-            case 163 /* PropertySignature */:
-            case 289 /* PropertyAssignment */:
-            case 292 /* EnumMember */:
-            case 166 /* MethodDeclaration */:
-            case 165 /* MethodSignature */:
-            case 168 /* GetAccessor */:
-            case 169 /* SetAccessor */:
-            case 257 /* ModuleDeclaration */:
+            case 165 /* PropertyDeclaration */:
+            case 164 /* PropertySignature */:
+            case 291 /* PropertyAssignment */:
+            case 294 /* EnumMember */:
+            case 167 /* MethodDeclaration */:
+            case 166 /* MethodSignature */:
+            case 170 /* GetAccessor */:
+            case 171 /* SetAccessor */:
+            case 259 /* ModuleDeclaration */:
                 return ts.getNameOfDeclaration(node.parent) === node;
-            case 203 /* ElementAccessExpression */:
+            case 205 /* ElementAccessExpression */:
                 return node.parent.argumentExpression === node;
-            case 159 /* ComputedPropertyName */:
+            case 160 /* ComputedPropertyName */:
                 return true;
-            case 192 /* LiteralType */:
-                return node.parent.parent.kind === 190 /* IndexedAccessType */;
+            case 194 /* LiteralType */:
+                return node.parent.parent.kind === 192 /* IndexedAccessType */;
             default:
                 return false;
         }
@@ -118891,17 +121371,17 @@
                 return undefined;
             }
             switch (node.kind) {
-                case 298 /* SourceFile */:
-                case 166 /* MethodDeclaration */:
-                case 165 /* MethodSignature */:
-                case 252 /* FunctionDeclaration */:
-                case 209 /* FunctionExpression */:
-                case 168 /* GetAccessor */:
-                case 169 /* SetAccessor */:
-                case 253 /* ClassDeclaration */:
-                case 254 /* InterfaceDeclaration */:
-                case 256 /* EnumDeclaration */:
-                case 257 /* ModuleDeclaration */:
+                case 300 /* SourceFile */:
+                case 167 /* MethodDeclaration */:
+                case 166 /* MethodSignature */:
+                case 254 /* FunctionDeclaration */:
+                case 211 /* FunctionExpression */:
+                case 170 /* GetAccessor */:
+                case 171 /* SetAccessor */:
+                case 255 /* ClassDeclaration */:
+                case 256 /* InterfaceDeclaration */:
+                case 258 /* EnumDeclaration */:
+                case 259 /* ModuleDeclaration */:
                     return node;
             }
         }
@@ -118909,54 +121389,56 @@
     ts.getContainerNode = getContainerNode;
     function getNodeKind(node) {
         switch (node.kind) {
-            case 298 /* SourceFile */:
+            case 300 /* SourceFile */:
                 return ts.isExternalModule(node) ? "module" /* moduleElement */ : "script" /* scriptElement */;
-            case 257 /* ModuleDeclaration */:
+            case 259 /* ModuleDeclaration */:
                 return "module" /* moduleElement */;
-            case 253 /* ClassDeclaration */:
-            case 222 /* ClassExpression */:
+            case 255 /* ClassDeclaration */:
+            case 224 /* ClassExpression */:
                 return "class" /* classElement */;
-            case 254 /* InterfaceDeclaration */: return "interface" /* interfaceElement */;
-            case 255 /* TypeAliasDeclaration */:
-            case 328 /* JSDocCallbackTag */:
-            case 335 /* JSDocTypedefTag */:
+            case 256 /* InterfaceDeclaration */: return "interface" /* interfaceElement */;
+            case 257 /* TypeAliasDeclaration */:
+            case 333 /* JSDocCallbackTag */:
+            case 340 /* JSDocTypedefTag */:
                 return "type" /* typeElement */;
-            case 256 /* EnumDeclaration */: return "enum" /* enumElement */;
-            case 250 /* VariableDeclaration */:
+            case 258 /* EnumDeclaration */: return "enum" /* enumElement */;
+            case 252 /* VariableDeclaration */:
                 return getKindOfVariableDeclaration(node);
-            case 199 /* BindingElement */:
+            case 201 /* BindingElement */:
                 return getKindOfVariableDeclaration(ts.getRootDeclaration(node));
-            case 210 /* ArrowFunction */:
-            case 252 /* FunctionDeclaration */:
-            case 209 /* FunctionExpression */:
+            case 212 /* ArrowFunction */:
+            case 254 /* FunctionDeclaration */:
+            case 211 /* FunctionExpression */:
                 return "function" /* functionElement */;
-            case 168 /* GetAccessor */: return "getter" /* memberGetAccessorElement */;
-            case 169 /* SetAccessor */: return "setter" /* memberSetAccessorElement */;
-            case 166 /* MethodDeclaration */:
-            case 165 /* MethodSignature */:
+            case 170 /* GetAccessor */: return "getter" /* memberGetAccessorElement */;
+            case 171 /* SetAccessor */: return "setter" /* memberSetAccessorElement */;
+            case 167 /* MethodDeclaration */:
+            case 166 /* MethodSignature */:
                 return "method" /* memberFunctionElement */;
-            case 289 /* PropertyAssignment */:
+            case 291 /* PropertyAssignment */:
                 var initializer = node.initializer;
                 return ts.isFunctionLike(initializer) ? "method" /* memberFunctionElement */ : "property" /* memberVariableElement */;
-            case 164 /* PropertyDeclaration */:
-            case 163 /* PropertySignature */:
-            case 290 /* ShorthandPropertyAssignment */:
-            case 291 /* SpreadAssignment */:
+            case 165 /* PropertyDeclaration */:
+            case 164 /* PropertySignature */:
+            case 292 /* ShorthandPropertyAssignment */:
+            case 293 /* SpreadAssignment */:
                 return "property" /* memberVariableElement */;
-            case 172 /* IndexSignature */: return "index" /* indexSignatureElement */;
-            case 171 /* ConstructSignature */: return "construct" /* constructSignatureElement */;
-            case 170 /* CallSignature */: return "call" /* callSignatureElement */;
-            case 167 /* Constructor */: return "constructor" /* constructorImplementationElement */;
-            case 160 /* TypeParameter */: return "type parameter" /* typeParameterElement */;
-            case 292 /* EnumMember */: return "enum member" /* enumMemberElement */;
-            case 161 /* Parameter */: return ts.hasSyntacticModifier(node, 16476 /* ParameterPropertyModifier */) ? "property" /* memberVariableElement */ : "parameter" /* parameterElement */;
-            case 261 /* ImportEqualsDeclaration */:
-            case 266 /* ImportSpecifier */:
-            case 271 /* ExportSpecifier */:
-            case 264 /* NamespaceImport */:
-            case 270 /* NamespaceExport */:
+            case 174 /* IndexSignature */: return "index" /* indexSignatureElement */;
+            case 173 /* ConstructSignature */: return "construct" /* constructSignatureElement */;
+            case 172 /* CallSignature */: return "call" /* callSignatureElement */;
+            case 169 /* Constructor */:
+            case 168 /* ClassStaticBlockDeclaration */:
+                return "constructor" /* constructorImplementationElement */;
+            case 161 /* TypeParameter */: return "type parameter" /* typeParameterElement */;
+            case 294 /* EnumMember */: return "enum member" /* enumMemberElement */;
+            case 162 /* Parameter */: return ts.hasSyntacticModifier(node, 16476 /* ParameterPropertyModifier */) ? "property" /* memberVariableElement */ : "parameter" /* parameterElement */;
+            case 263 /* ImportEqualsDeclaration */:
+            case 268 /* ImportSpecifier */:
+            case 273 /* ExportSpecifier */:
+            case 266 /* NamespaceImport */:
+            case 272 /* NamespaceExport */:
                 return "alias" /* alias */;
-            case 217 /* BinaryExpression */:
+            case 219 /* BinaryExpression */:
                 var kind = ts.getAssignmentDeclarationKind(node);
                 var right = node.right;
                 switch (kind) {
@@ -118983,9 +121465,9 @@
                         return "" /* unknown */;
                     }
                 }
-            case 78 /* Identifier */:
+            case 79 /* Identifier */:
                 return ts.isImportClause(node.parent) ? "alias" /* alias */ : "" /* unknown */;
-            case 267 /* ExportAssignment */:
+            case 269 /* ExportAssignment */:
                 var scriptKind = getNodeKind(node.expression);
                 // If the expression didn't come back with something (like it does for an identifiers)
                 return scriptKind === "" /* unknown */ ? "const" /* constElement */ : scriptKind;
@@ -119003,12 +121485,12 @@
     ts.getNodeKind = getNodeKind;
     function isThis(node) {
         switch (node.kind) {
-            case 107 /* ThisKeyword */:
+            case 108 /* ThisKeyword */:
                 // case SyntaxKind.ThisType: TODO: GH#9267
                 return true;
-            case 78 /* Identifier */:
+            case 79 /* Identifier */:
                 // 'this' as a parameter
-                return ts.identifierIsThisKeyword(node) && node.parent.kind === 161 /* Parameter */;
+                return ts.identifierIsThisKeyword(node) && node.parent.kind === 162 /* Parameter */;
             default:
                 return false;
         }
@@ -119073,42 +121555,42 @@
             return false;
         }
         switch (n.kind) {
-            case 253 /* ClassDeclaration */:
-            case 254 /* InterfaceDeclaration */:
-            case 256 /* EnumDeclaration */:
-            case 201 /* ObjectLiteralExpression */:
-            case 197 /* ObjectBindingPattern */:
-            case 178 /* TypeLiteral */:
-            case 231 /* Block */:
-            case 258 /* ModuleBlock */:
-            case 259 /* CaseBlock */:
-            case 265 /* NamedImports */:
-            case 269 /* NamedExports */:
+            case 255 /* ClassDeclaration */:
+            case 256 /* InterfaceDeclaration */:
+            case 258 /* EnumDeclaration */:
+            case 203 /* ObjectLiteralExpression */:
+            case 199 /* ObjectBindingPattern */:
+            case 180 /* TypeLiteral */:
+            case 233 /* Block */:
+            case 260 /* ModuleBlock */:
+            case 261 /* CaseBlock */:
+            case 267 /* NamedImports */:
+            case 271 /* NamedExports */:
                 return nodeEndsWith(n, 19 /* CloseBraceToken */, sourceFile);
-            case 288 /* CatchClause */:
+            case 290 /* CatchClause */:
                 return isCompletedNode(n.block, sourceFile);
-            case 205 /* NewExpression */:
+            case 207 /* NewExpression */:
                 if (!n.arguments) {
                     return true;
                 }
             // falls through
-            case 204 /* CallExpression */:
-            case 208 /* ParenthesizedExpression */:
-            case 187 /* ParenthesizedType */:
+            case 206 /* CallExpression */:
+            case 210 /* ParenthesizedExpression */:
+            case 189 /* ParenthesizedType */:
                 return nodeEndsWith(n, 21 /* CloseParenToken */, sourceFile);
-            case 175 /* FunctionType */:
-            case 176 /* ConstructorType */:
+            case 177 /* FunctionType */:
+            case 178 /* ConstructorType */:
                 return isCompletedNode(n.type, sourceFile);
-            case 167 /* Constructor */:
-            case 168 /* GetAccessor */:
-            case 169 /* SetAccessor */:
-            case 252 /* FunctionDeclaration */:
-            case 209 /* FunctionExpression */:
-            case 166 /* MethodDeclaration */:
-            case 165 /* MethodSignature */:
-            case 171 /* ConstructSignature */:
-            case 170 /* CallSignature */:
-            case 210 /* ArrowFunction */:
+            case 169 /* Constructor */:
+            case 170 /* GetAccessor */:
+            case 171 /* SetAccessor */:
+            case 254 /* FunctionDeclaration */:
+            case 211 /* FunctionExpression */:
+            case 167 /* MethodDeclaration */:
+            case 166 /* MethodSignature */:
+            case 173 /* ConstructSignature */:
+            case 172 /* CallSignature */:
+            case 212 /* ArrowFunction */:
                 if (n.body) {
                     return isCompletedNode(n.body, sourceFile);
                 }
@@ -119118,65 +121600,65 @@
                 // Even though type parameters can be unclosed, we can get away with
                 // having at least a closing paren.
                 return hasChildOfKind(n, 21 /* CloseParenToken */, sourceFile);
-            case 257 /* ModuleDeclaration */:
+            case 259 /* ModuleDeclaration */:
                 return !!n.body && isCompletedNode(n.body, sourceFile);
-            case 235 /* IfStatement */:
+            case 237 /* IfStatement */:
                 if (n.elseStatement) {
                     return isCompletedNode(n.elseStatement, sourceFile);
                 }
                 return isCompletedNode(n.thenStatement, sourceFile);
-            case 234 /* ExpressionStatement */:
+            case 236 /* ExpressionStatement */:
                 return isCompletedNode(n.expression, sourceFile) ||
                     hasChildOfKind(n, 26 /* SemicolonToken */, sourceFile);
-            case 200 /* ArrayLiteralExpression */:
-            case 198 /* ArrayBindingPattern */:
-            case 203 /* ElementAccessExpression */:
-            case 159 /* ComputedPropertyName */:
-            case 180 /* TupleType */:
+            case 202 /* ArrayLiteralExpression */:
+            case 200 /* ArrayBindingPattern */:
+            case 205 /* ElementAccessExpression */:
+            case 160 /* ComputedPropertyName */:
+            case 182 /* TupleType */:
                 return nodeEndsWith(n, 23 /* CloseBracketToken */, sourceFile);
-            case 172 /* IndexSignature */:
+            case 174 /* IndexSignature */:
                 if (n.type) {
                     return isCompletedNode(n.type, sourceFile);
                 }
                 return hasChildOfKind(n, 23 /* CloseBracketToken */, sourceFile);
-            case 285 /* CaseClause */:
-            case 286 /* DefaultClause */:
+            case 287 /* CaseClause */:
+            case 288 /* DefaultClause */:
                 // there is no such thing as terminator token for CaseClause/DefaultClause so for simplicity always consider them non-completed
                 return false;
-            case 238 /* ForStatement */:
-            case 239 /* ForInStatement */:
-            case 240 /* ForOfStatement */:
-            case 237 /* WhileStatement */:
+            case 240 /* ForStatement */:
+            case 241 /* ForInStatement */:
+            case 242 /* ForOfStatement */:
+            case 239 /* WhileStatement */:
                 return isCompletedNode(n.statement, sourceFile);
-            case 236 /* DoStatement */:
+            case 238 /* DoStatement */:
                 // rough approximation: if DoStatement has While keyword - then if node is completed is checking the presence of ')';
-                return hasChildOfKind(n, 114 /* WhileKeyword */, sourceFile)
+                return hasChildOfKind(n, 115 /* WhileKeyword */, sourceFile)
                     ? nodeEndsWith(n, 21 /* CloseParenToken */, sourceFile)
                     : isCompletedNode(n.statement, sourceFile);
-            case 177 /* TypeQuery */:
+            case 179 /* TypeQuery */:
                 return isCompletedNode(n.exprName, sourceFile);
-            case 212 /* TypeOfExpression */:
-            case 211 /* DeleteExpression */:
-            case 213 /* VoidExpression */:
-            case 220 /* YieldExpression */:
-            case 221 /* SpreadElement */:
+            case 214 /* TypeOfExpression */:
+            case 213 /* DeleteExpression */:
+            case 215 /* VoidExpression */:
+            case 222 /* YieldExpression */:
+            case 223 /* SpreadElement */:
                 var unaryWordExpression = n;
                 return isCompletedNode(unaryWordExpression.expression, sourceFile);
-            case 206 /* TaggedTemplateExpression */:
+            case 208 /* TaggedTemplateExpression */:
                 return isCompletedNode(n.template, sourceFile);
-            case 219 /* TemplateExpression */:
+            case 221 /* TemplateExpression */:
                 var lastSpan = ts.lastOrUndefined(n.templateSpans);
                 return isCompletedNode(lastSpan, sourceFile);
-            case 229 /* TemplateSpan */:
+            case 231 /* TemplateSpan */:
                 return ts.nodeIsPresent(n.literal);
-            case 268 /* ExportDeclaration */:
-            case 262 /* ImportDeclaration */:
+            case 270 /* ExportDeclaration */:
+            case 264 /* ImportDeclaration */:
                 return ts.nodeIsPresent(n.moduleSpecifier);
-            case 215 /* PrefixUnaryExpression */:
+            case 217 /* PrefixUnaryExpression */:
                 return isCompletedNode(n.operand, sourceFile);
-            case 217 /* BinaryExpression */:
+            case 219 /* BinaryExpression */:
                 return isCompletedNode(n.right, sourceFile);
-            case 218 /* ConditionalExpression */:
+            case 220 /* ConditionalExpression */:
                 return isCompletedNode(n.whenFalse, sourceFile);
             default:
                 return true;
@@ -119236,13 +121718,13 @@
     }
     ts.findContainingList = findContainingList;
     function isDefaultModifier(node) {
-        return node.kind === 87 /* DefaultKeyword */;
+        return node.kind === 88 /* DefaultKeyword */;
     }
     function isClassKeyword(node) {
-        return node.kind === 83 /* ClassKeyword */;
+        return node.kind === 84 /* ClassKeyword */;
     }
     function isFunctionKeyword(node) {
-        return node.kind === 97 /* FunctionKeyword */;
+        return node.kind === 98 /* FunctionKeyword */;
     }
     function getAdjustedLocationForClass(node) {
         if (ts.isNamedDeclaration(node)) {
@@ -119251,7 +121733,7 @@
         if (ts.isClassDeclaration(node)) {
             // for class and function declarations, use the `default` modifier
             // when the declaration is unnamed.
-            var defaultModifier = ts.find(node.modifiers, isDefaultModifier);
+            var defaultModifier = node.modifiers && ts.find(node.modifiers, isDefaultModifier);
             if (defaultModifier)
                 return defaultModifier;
         }
@@ -119295,6 +121777,10 @@
         if (contextualType) {
             return contextualType;
         }
+        var parent = node.parent;
+        if (parent && ts.isBinaryExpression(parent) && isEqualityOperatorKind(parent.operatorToken.kind)) {
+            return checker.getTypeAtLocation(node === parent.left ? parent.right : parent.left);
+        }
         var ancestorTypeNode = getAncestorTypeNode(node);
         return ancestorTypeNode && checker.getTypeAtLocation(ancestorTypeNode);
     }
@@ -119302,11 +121788,11 @@
     function getAdjustedLocationForDeclaration(node, forRename) {
         if (!forRename) {
             switch (node.kind) {
-                case 253 /* ClassDeclaration */:
-                case 222 /* ClassExpression */:
+                case 255 /* ClassDeclaration */:
+                case 224 /* ClassExpression */:
                     return getAdjustedLocationForClass(node);
-                case 252 /* FunctionDeclaration */:
-                case 209 /* FunctionExpression */:
+                case 254 /* FunctionDeclaration */:
+                case 211 /* FunctionExpression */:
                     return getAdjustedLocationForFunction(node);
             }
         }
@@ -119396,30 +121882,30 @@
         //
         // NOTE: If the node is a modifier, we don't adjust its location if it is the `default` modifier as that is handled
         // specially by `getSymbolAtLocation`.
-        if (ts.isModifier(node) && (forRename || node.kind !== 87 /* DefaultKeyword */) ? ts.contains(parent.modifiers, node) :
-            node.kind === 83 /* ClassKeyword */ ? ts.isClassDeclaration(parent) || ts.isClassExpression(node) :
-                node.kind === 97 /* FunctionKeyword */ ? ts.isFunctionDeclaration(parent) || ts.isFunctionExpression(node) :
-                    node.kind === 117 /* InterfaceKeyword */ ? ts.isInterfaceDeclaration(parent) :
-                        node.kind === 91 /* EnumKeyword */ ? ts.isEnumDeclaration(parent) :
-                            node.kind === 149 /* TypeKeyword */ ? ts.isTypeAliasDeclaration(parent) :
-                                node.kind === 140 /* NamespaceKeyword */ || node.kind === 139 /* ModuleKeyword */ ? ts.isModuleDeclaration(parent) :
-                                    node.kind === 99 /* ImportKeyword */ ? ts.isImportEqualsDeclaration(parent) :
-                                        node.kind === 134 /* GetKeyword */ ? ts.isGetAccessorDeclaration(parent) :
-                                            node.kind === 146 /* SetKeyword */ && ts.isSetAccessorDeclaration(parent)) {
+        if (ts.isModifier(node) && (forRename || node.kind !== 88 /* DefaultKeyword */) ? ts.contains(parent.modifiers, node) :
+            node.kind === 84 /* ClassKeyword */ ? ts.isClassDeclaration(parent) || ts.isClassExpression(node) :
+                node.kind === 98 /* FunctionKeyword */ ? ts.isFunctionDeclaration(parent) || ts.isFunctionExpression(node) :
+                    node.kind === 118 /* InterfaceKeyword */ ? ts.isInterfaceDeclaration(parent) :
+                        node.kind === 92 /* EnumKeyword */ ? ts.isEnumDeclaration(parent) :
+                            node.kind === 150 /* TypeKeyword */ ? ts.isTypeAliasDeclaration(parent) :
+                                node.kind === 141 /* NamespaceKeyword */ || node.kind === 140 /* ModuleKeyword */ ? ts.isModuleDeclaration(parent) :
+                                    node.kind === 100 /* ImportKeyword */ ? ts.isImportEqualsDeclaration(parent) :
+                                        node.kind === 135 /* GetKeyword */ ? ts.isGetAccessorDeclaration(parent) :
+                                            node.kind === 147 /* SetKeyword */ && ts.isSetAccessorDeclaration(parent)) {
             var location = getAdjustedLocationForDeclaration(parent, forRename);
             if (location) {
                 return location;
             }
         }
         // /**/<var|let|const> [|name|] ...
-        if ((node.kind === 112 /* VarKeyword */ || node.kind === 84 /* ConstKeyword */ || node.kind === 118 /* LetKeyword */) &&
+        if ((node.kind === 113 /* VarKeyword */ || node.kind === 85 /* ConstKeyword */ || node.kind === 119 /* LetKeyword */) &&
             ts.isVariableDeclarationList(parent) && parent.declarations.length === 1) {
             var decl = parent.declarations[0];
             if (ts.isIdentifier(decl.name)) {
                 return decl.name;
             }
         }
-        if (node.kind === 149 /* TypeKeyword */) {
+        if (node.kind === 150 /* TypeKeyword */) {
             // import /**/type [|name|] from ...;
             // import /**/type { [|name|] } from ...;
             // import /**/type { propertyName as [|name|] } from ...;
@@ -119445,7 +121931,7 @@
         // import * /**/as [|name|] ...
         // export { propertyName /**/as [|name|] } ...
         // export * /**/as [|name|] ...
-        if (node.kind === 126 /* AsKeyword */) {
+        if (node.kind === 127 /* AsKeyword */) {
             if (ts.isImportSpecifier(parent) && parent.propertyName ||
                 ts.isExportSpecifier(parent) && parent.propertyName ||
                 ts.isNamespaceImport(parent) ||
@@ -119461,13 +121947,13 @@
         // /**/import { propertyName as [|name|] } from ...;
         // /**/import ... from "[|module|]";
         // /**/import "[|module|]";
-        if (node.kind === 99 /* ImportKeyword */ && ts.isImportDeclaration(parent)) {
+        if (node.kind === 100 /* ImportKeyword */ && ts.isImportDeclaration(parent)) {
             var location = getAdjustedLocationForImportDeclaration(parent, forRename);
             if (location) {
                 return location;
             }
         }
-        if (node.kind === 92 /* ExportKeyword */) {
+        if (node.kind === 93 /* ExportKeyword */) {
             // /**/export { [|name|] } ...;
             // /**/export { propertyName as [|name|] } ...;
             // /**/export * from "[|module|]";
@@ -119486,12 +121972,12 @@
             }
         }
         // import name = /**/require("[|module|]");
-        if (node.kind === 143 /* RequireKeyword */ && ts.isExternalModuleReference(parent)) {
+        if (node.kind === 144 /* RequireKeyword */ && ts.isExternalModuleReference(parent)) {
             return parent.expression;
         }
         // import ... /**/from "[|module|]";
         // export ... /**/from "[|module|]";
-        if (node.kind === 153 /* FromKeyword */ && (ts.isImportDeclaration(parent) || ts.isExportDeclaration(parent)) && parent.moduleSpecifier) {
+        if (node.kind === 154 /* FromKeyword */ && (ts.isImportDeclaration(parent) || ts.isExportDeclaration(parent)) && parent.moduleSpecifier) {
             return parent.moduleSpecifier;
         }
         // class ... /**/extends [|name|] ...
@@ -119499,13 +121985,13 @@
         // class ... /**/implements name1, name2 ...
         // interface ... /**/extends [|name|] ...
         // interface ... /**/extends name1, name2 ...
-        if ((node.kind === 93 /* ExtendsKeyword */ || node.kind === 116 /* ImplementsKeyword */) && ts.isHeritageClause(parent) && parent.token === node.kind) {
+        if ((node.kind === 94 /* ExtendsKeyword */ || node.kind === 117 /* ImplementsKeyword */) && ts.isHeritageClause(parent) && parent.token === node.kind) {
             var location = getAdjustedLocationForHeritageClause(parent);
             if (location) {
                 return location;
             }
         }
-        if (node.kind === 93 /* ExtendsKeyword */) {
+        if (node.kind === 94 /* ExtendsKeyword */) {
             // ... <T /**/extends [|U|]> ...
             if (ts.isTypeParameterDeclaration(parent) && parent.constraint && ts.isTypeReferenceNode(parent.constraint)) {
                 return parent.constraint.typeName;
@@ -119516,20 +122002,20 @@
             }
         }
         // ... T extends /**/infer [|U|] ? ...
-        if (node.kind === 135 /* InferKeyword */ && ts.isInferTypeNode(parent)) {
+        if (node.kind === 136 /* InferKeyword */ && ts.isInferTypeNode(parent)) {
             return parent.typeParameter.name;
         }
         // { [ [|K|] /**/in keyof T]: ... }
-        if (node.kind === 100 /* InKeyword */ && ts.isTypeParameterDeclaration(parent) && ts.isMappedTypeNode(parent.parent)) {
+        if (node.kind === 101 /* InKeyword */ && ts.isTypeParameterDeclaration(parent) && ts.isMappedTypeNode(parent.parent)) {
             return parent.name;
         }
         // /**/keyof [|T|]
-        if (node.kind === 138 /* KeyOfKeyword */ && ts.isTypeOperatorNode(parent) && parent.operator === 138 /* KeyOfKeyword */ &&
+        if (node.kind === 139 /* KeyOfKeyword */ && ts.isTypeOperatorNode(parent) && parent.operator === 139 /* KeyOfKeyword */ &&
             ts.isTypeReferenceNode(parent.type)) {
             return parent.type.typeName;
         }
         // /**/readonly [|name|][]
-        if (node.kind === 142 /* ReadonlyKeyword */ && ts.isTypeOperatorNode(parent) && parent.operator === 142 /* ReadonlyKeyword */ &&
+        if (node.kind === 143 /* ReadonlyKeyword */ && ts.isTypeOperatorNode(parent) && parent.operator === 143 /* ReadonlyKeyword */ &&
             ts.isArrayTypeNode(parent.type) && ts.isTypeReferenceNode(parent.type.elementType)) {
             return parent.type.elementType.typeName;
         }
@@ -119544,29 +122030,29 @@
             // /**/yield [|name|]
             // /**/yield obj.[|name|]
             // /**/delete obj.[|name|]
-            if (node.kind === 102 /* NewKeyword */ && ts.isNewExpression(parent) ||
-                node.kind === 113 /* VoidKeyword */ && ts.isVoidExpression(parent) ||
-                node.kind === 111 /* TypeOfKeyword */ && ts.isTypeOfExpression(parent) ||
-                node.kind === 130 /* AwaitKeyword */ && ts.isAwaitExpression(parent) ||
-                node.kind === 124 /* YieldKeyword */ && ts.isYieldExpression(parent) ||
-                node.kind === 88 /* DeleteKeyword */ && ts.isDeleteExpression(parent)) {
+            if (node.kind === 103 /* NewKeyword */ && ts.isNewExpression(parent) ||
+                node.kind === 114 /* VoidKeyword */ && ts.isVoidExpression(parent) ||
+                node.kind === 112 /* TypeOfKeyword */ && ts.isTypeOfExpression(parent) ||
+                node.kind === 131 /* AwaitKeyword */ && ts.isAwaitExpression(parent) ||
+                node.kind === 125 /* YieldKeyword */ && ts.isYieldExpression(parent) ||
+                node.kind === 89 /* DeleteKeyword */ && ts.isDeleteExpression(parent)) {
                 if (parent.expression) {
                     return ts.skipOuterExpressions(parent.expression);
                 }
             }
             // left /**/in [|name|]
             // left /**/instanceof [|name|]
-            if ((node.kind === 100 /* InKeyword */ || node.kind === 101 /* InstanceOfKeyword */) && ts.isBinaryExpression(parent) && parent.operatorToken === node) {
+            if ((node.kind === 101 /* InKeyword */ || node.kind === 102 /* InstanceOfKeyword */) && ts.isBinaryExpression(parent) && parent.operatorToken === node) {
                 return ts.skipOuterExpressions(parent.right);
             }
             // left /**/as [|name|]
-            if (node.kind === 126 /* AsKeyword */ && ts.isAsExpression(parent) && ts.isTypeReferenceNode(parent.type)) {
+            if (node.kind === 127 /* AsKeyword */ && ts.isAsExpression(parent) && ts.isTypeReferenceNode(parent.type)) {
                 return parent.type.typeName;
             }
             // for (... /**/in [|name|])
             // for (... /**/of [|name|])
-            if (node.kind === 100 /* InKeyword */ && ts.isForInStatement(parent) ||
-                node.kind === 157 /* OfKeyword */ && ts.isForOfStatement(parent)) {
+            if (node.kind === 101 /* InKeyword */ && ts.isForInStatement(parent) ||
+                node.kind === 158 /* OfKeyword */ && ts.isForOfStatement(parent)) {
                 return ts.skipOuterExpressions(parent.expression);
             }
         }
@@ -119736,7 +122222,7 @@
                     }
                 }
             }
-            ts.Debug.assert(startNode !== undefined || n.kind === 298 /* SourceFile */ || n.kind === 1 /* EndOfFileToken */ || ts.isJSDocCommentContainingNode(n));
+            ts.Debug.assert(startNode !== undefined || n.kind === 300 /* SourceFile */ || n.kind === 1 /* EndOfFileToken */ || ts.isJSDocCommentContainingNode(n));
             // Here we know that none of child token nodes embrace the position,
             // the only known case is when position is at the end of the file.
             // Try to find the rightmost token in the file without filtering.
@@ -119809,17 +122295,17 @@
             return true;
         }
         // <div> { | </div> or <div a={| </div>
-        if (token.kind === 29 /* LessThanToken */ && token.parent.kind === 284 /* JsxExpression */) {
+        if (token.kind === 29 /* LessThanToken */ && token.parent.kind === 286 /* JsxExpression */) {
             return true;
         }
         // <div> {
         // |
         // } < /div>
-        if (token && token.kind === 19 /* CloseBraceToken */ && token.parent.kind === 284 /* JsxExpression */) {
+        if (token && token.kind === 19 /* CloseBraceToken */ && token.parent.kind === 286 /* JsxExpression */) {
             return true;
         }
         // <div>|</div>
-        if (token.kind === 29 /* LessThanToken */ && token.parent.kind === 277 /* JsxClosingElement */) {
+        if (token.kind === 29 /* LessThanToken */ && token.parent.kind === 279 /* JsxClosingElement */) {
             return true;
         }
         return false;
@@ -119850,17 +122336,17 @@
     function isInsideJsxElement(sourceFile, position) {
         function isInsideJsxElementTraversal(node) {
             while (node) {
-                if (node.kind >= 275 /* JsxSelfClosingElement */ && node.kind <= 284 /* JsxExpression */
+                if (node.kind >= 277 /* JsxSelfClosingElement */ && node.kind <= 286 /* JsxExpression */
                     || node.kind === 11 /* JsxText */
                     || node.kind === 29 /* LessThanToken */
                     || node.kind === 31 /* GreaterThanToken */
-                    || node.kind === 78 /* Identifier */
+                    || node.kind === 79 /* Identifier */
                     || node.kind === 19 /* CloseBraceToken */
                     || node.kind === 18 /* OpenBraceToken */
                     || node.kind === 43 /* SlashToken */) {
                     node = node.parent;
                 }
-                else if (node.kind === 274 /* JsxElement */) {
+                else if (node.kind === 276 /* JsxElement */) {
                     if (position > node.getStart(sourceFile))
                         return true;
                     node = node.parent;
@@ -119999,16 +122485,16 @@
                     break;
                 case 38 /* EqualsGreaterThanToken */:
                 // falls through
-                case 78 /* Identifier */:
+                case 79 /* Identifier */:
                 case 10 /* StringLiteral */:
                 case 8 /* NumericLiteral */:
                 case 9 /* BigIntLiteral */:
-                case 109 /* TrueKeyword */:
-                case 94 /* FalseKeyword */:
+                case 110 /* TrueKeyword */:
+                case 95 /* FalseKeyword */:
                 // falls through
-                case 111 /* TypeOfKeyword */:
-                case 93 /* ExtendsKeyword */:
-                case 138 /* KeyOfKeyword */:
+                case 112 /* TypeOfKeyword */:
+                case 94 /* ExtendsKeyword */:
+                case 139 /* KeyOfKeyword */:
                 case 24 /* DotToken */:
                 case 51 /* BarToken */:
                 case 57 /* QuestionToken */:
@@ -120058,7 +122544,7 @@
             result.push("protected" /* protectedMemberModifier */);
         if (flags & 4 /* Public */)
             result.push("public" /* publicMemberModifier */);
-        if (flags & 32 /* Static */)
+        if (flags & 32 /* Static */ || ts.isClassStaticBlockDeclaration(node))
             result.push("static" /* staticModifier */);
         if (flags & 128 /* Abstract */)
             result.push("abstract" /* abstractModifier */);
@@ -120068,16 +122554,16 @@
             result.push("deprecated" /* deprecatedModifier */);
         if (node.flags & 8388608 /* Ambient */)
             result.push("declare" /* ambientModifier */);
-        if (node.kind === 267 /* ExportAssignment */)
+        if (node.kind === 269 /* ExportAssignment */)
             result.push("export" /* exportedModifier */);
         return result.length > 0 ? result.join(",") : "" /* none */;
     }
     ts.getNodeModifiers = getNodeModifiers;
     function getTypeArgumentOrTypeParameterList(node) {
-        if (node.kind === 174 /* TypeReference */ || node.kind === 204 /* CallExpression */) {
+        if (node.kind === 176 /* TypeReference */ || node.kind === 206 /* CallExpression */) {
             return node.typeArguments;
         }
-        if (ts.isFunctionLike(node) || node.kind === 253 /* ClassDeclaration */ || node.kind === 254 /* InterfaceDeclaration */) {
+        if (ts.isFunctionLike(node) || node.kind === 255 /* ClassDeclaration */ || node.kind === 256 /* InterfaceDeclaration */) {
             return node.typeParameters;
         }
         return undefined;
@@ -120097,7 +122583,7 @@
     }
     ts.isStringOrRegularExpressionOrTemplateLiteral = isStringOrRegularExpressionOrTemplateLiteral;
     function isPunctuation(kind) {
-        return 18 /* FirstPunctuation */ <= kind && kind <= 77 /* LastPunctuation */;
+        return 18 /* FirstPunctuation */ <= kind && kind <= 78 /* LastPunctuation */;
     }
     ts.isPunctuation = isPunctuation;
     function isInsideTemplateLiteral(node, position, sourceFile) {
@@ -120107,9 +122593,9 @@
     ts.isInsideTemplateLiteral = isInsideTemplateLiteral;
     function isAccessibilityModifier(kind) {
         switch (kind) {
-            case 122 /* PublicKeyword */:
-            case 120 /* PrivateKeyword */:
-            case 121 /* ProtectedKeyword */:
+            case 123 /* PublicKeyword */:
+            case 121 /* PrivateKeyword */:
+            case 122 /* ProtectedKeyword */:
                 return true;
         }
         return false;
@@ -120122,18 +122608,18 @@
     }
     ts.cloneCompilerOptions = cloneCompilerOptions;
     function isArrayLiteralOrObjectLiteralDestructuringPattern(node) {
-        if (node.kind === 200 /* ArrayLiteralExpression */ ||
-            node.kind === 201 /* ObjectLiteralExpression */) {
+        if (node.kind === 202 /* ArrayLiteralExpression */ ||
+            node.kind === 203 /* ObjectLiteralExpression */) {
             // [a,b,c] from:
             // [a, b, c] = someExpression;
-            if (node.parent.kind === 217 /* BinaryExpression */ &&
+            if (node.parent.kind === 219 /* BinaryExpression */ &&
                 node.parent.left === node &&
-                node.parent.operatorToken.kind === 62 /* EqualsToken */) {
+                node.parent.operatorToken.kind === 63 /* EqualsToken */) {
                 return true;
             }
             // [a, b, c] from:
             // for([a, b, c] of expression)
-            if (node.parent.kind === 240 /* ForOfStatement */ &&
+            if (node.parent.kind === 242 /* ForOfStatement */ &&
                 node.parent.initializer === node) {
                 return true;
             }
@@ -120141,7 +122627,7 @@
             // [x, [a, b, c] ] = someExpression
             // or
             // {x, a: {a, b, c} } = someExpression
-            if (isArrayLiteralOrObjectLiteralDestructuringPattern(node.parent.kind === 289 /* PropertyAssignment */ ? node.parent.parent : node.parent)) {
+            if (isArrayLiteralOrObjectLiteralDestructuringPattern(node.parent.kind === 291 /* PropertyAssignment */ ? node.parent.parent : node.parent)) {
                 return true;
             }
         }
@@ -120203,32 +122689,32 @@
     }
     ts.createTextChange = createTextChange;
     ts.typeKeywords = [
-        128 /* AnyKeyword */,
-        127 /* AssertsKeyword */,
-        155 /* BigIntKeyword */,
-        131 /* BooleanKeyword */,
-        94 /* FalseKeyword */,
-        135 /* InferKeyword */,
-        138 /* KeyOfKeyword */,
-        141 /* NeverKeyword */,
-        103 /* NullKeyword */,
-        144 /* NumberKeyword */,
-        145 /* ObjectKeyword */,
-        142 /* ReadonlyKeyword */,
-        147 /* StringKeyword */,
-        148 /* SymbolKeyword */,
-        109 /* TrueKeyword */,
-        113 /* VoidKeyword */,
-        150 /* UndefinedKeyword */,
-        151 /* UniqueKeyword */,
-        152 /* UnknownKeyword */,
+        129 /* AnyKeyword */,
+        128 /* AssertsKeyword */,
+        156 /* BigIntKeyword */,
+        132 /* BooleanKeyword */,
+        95 /* FalseKeyword */,
+        136 /* InferKeyword */,
+        139 /* KeyOfKeyword */,
+        142 /* NeverKeyword */,
+        104 /* NullKeyword */,
+        145 /* NumberKeyword */,
+        146 /* ObjectKeyword */,
+        143 /* ReadonlyKeyword */,
+        148 /* StringKeyword */,
+        149 /* SymbolKeyword */,
+        110 /* TrueKeyword */,
+        114 /* VoidKeyword */,
+        151 /* UndefinedKeyword */,
+        152 /* UniqueKeyword */,
+        153 /* UnknownKeyword */,
     ];
     function isTypeKeyword(kind) {
         return ts.contains(ts.typeKeywords, kind);
     }
     ts.isTypeKeyword = isTypeKeyword;
     function isTypeKeywordToken(node) {
-        return node.kind === 149 /* TypeKeyword */;
+        return node.kind === 150 /* TypeKeyword */;
     }
     ts.isTypeKeywordToken = isTypeKeywordToken;
     /** True if the symbol is for an external module, as opposed to a namespace. */
@@ -120261,7 +122747,7 @@
     }
     ts.skipConstraint = skipConstraint;
     function getNameFromPropertyName(name) {
-        return name.kind === 159 /* ComputedPropertyName */
+        return name.kind === 160 /* ComputedPropertyName */
             // treat computed property names where expression is string/numeric literal as just string/numeric literal
             ? ts.isStringOrNumericLiteralLike(name.expression) ? name.expression.text : undefined
             : ts.isPrivateIdentifier(name) ? ts.idText(name) : ts.getTextOfIdentifierOrLiteral(name);
@@ -120290,7 +122776,6 @@
             getSymlinkCache: ts.maybeBind(host, host.getSymlinkCache) || program.getSymlinkCache,
             getModuleSpecifierCache: ts.maybeBind(host, host.getModuleSpecifierCache),
             getGlobalTypingsCacheLocation: ts.maybeBind(host, host.getGlobalTypingsCacheLocation),
-            getSourceFiles: function () { return program.getSourceFiles(); },
             redirectTargetsMap: program.redirectTargetsMap,
             getProjectReferenceRedirect: function (fileName) { return program.getProjectReferenceRedirect(fileName); },
             isSourceOfProjectReferenceRedirect: function (fileName) { return program.isSourceOfProjectReferenceRedirect(fileName); },
@@ -120359,7 +122844,7 @@
         }
         return ts.firstDefined(symbol.declarations, function (decl) {
             var name = ts.getNameOfDeclaration(decl);
-            return name && name.kind === 78 /* Identifier */ ? name.escapedText : undefined;
+            return name && name.kind === 79 /* Identifier */ ? name.escapedText : undefined;
         });
     }
     ts.symbolEscapedNameNoDefault = symbolEscapedNameNoDefault;
@@ -120403,7 +122888,7 @@
     ts.findModifier = findModifier;
     function insertImports(changes, sourceFile, imports, blankLineBetween) {
         var decl = ts.isArray(imports) ? imports[0] : imports;
-        var importKindPredicate = decl.kind === 233 /* VariableStatement */ ? ts.isRequireVariableStatement : ts.isAnyImportSyntax;
+        var importKindPredicate = decl.kind === 235 /* VariableStatement */ ? ts.isRequireVariableStatement : ts.isAnyImportSyntax;
         var existingImportStatements = ts.filter(sourceFile.statements, importKindPredicate);
         var sortedNewImports = ts.isArray(imports) ? ts.stableSort(imports, ts.OrganizeImports.compareImportsOrRequireStatements) : [imports];
         if (!existingImportStatements.length) {
@@ -120481,7 +122966,7 @@
     // Display-part writer helpers
     // #region
     function isFirstDeclarationOfSymbolParameter(symbol) {
-        return symbol.declarations && symbol.declarations.length > 0 && symbol.declarations[0].kind === 161 /* Parameter */;
+        return symbol.declarations && symbol.declarations.length > 0 && symbol.declarations[0].kind === 162 /* Parameter */;
     }
     ts.isFirstDeclarationOfSymbolParameter = isFirstDeclarationOfSymbolParameter;
     var displayPartWriter = getDisplayPartWriter();
@@ -120529,7 +123014,7 @@
             increaseIndent: function () { indent++; },
             decreaseIndent: function () { indent--; },
             clear: resetWriter,
-            trackSymbol: ts.noop,
+            trackSymbol: function () { return false; },
             reportInaccessibleThisError: ts.noop,
             reportInaccessibleUniqueSymbolError: ts.noop,
             reportPrivateInBaseOfClassExpression: ts.noop,
@@ -120692,7 +123177,10 @@
     ts.linkPart = linkPart;
     function buildLinkParts(link, checker) {
         var _a;
-        var parts = [linkPart("{@link ")];
+        var prefix = ts.isJSDocLink(link) ? "link"
+            : ts.isJSDocLinkCode(link) ? "linkcode"
+                : "linkplain";
+        var parts = [linkPart("{@" + prefix + " ")];
         if (!link.name) {
             if (link.text) {
                 parts.push(linkTextPart(link.text));
@@ -120708,7 +123196,7 @@
                 }
             }
             else {
-                parts.push(linkTextPart(ts.getTextOfNode(link.name) + link.text));
+                parts.push(linkTextPart(ts.getTextOfNode(link.name) + " " + link.text));
             }
         }
         parts.push(linkPart("}"));
@@ -120837,9 +123325,13 @@
     }
     ts.getSynthesizedDeepCloneWithReplacements = getSynthesizedDeepCloneWithReplacements;
     function getSynthesizedDeepCloneWorker(node, replaceNode) {
-        var visited = replaceNode ?
-            ts.visitEachChild(node, function (n) { return getSynthesizedDeepCloneWithReplacements(n, /*includeTrivia*/ true, replaceNode); }, ts.nullTransformationContext) :
-            ts.visitEachChild(node, getSynthesizedDeepClone, ts.nullTransformationContext);
+        var nodeClone = replaceNode
+            ? function (n) { return getSynthesizedDeepCloneWithReplacements(n, /*includeTrivia*/ true, replaceNode); }
+            : getSynthesizedDeepClone;
+        var nodesClone = replaceNode
+            ? function (ns) { return ns && getSynthesizedDeepClonesWithReplacements(ns, /*includeTrivia*/ true, replaceNode); }
+            : function (ns) { return ns && getSynthesizedDeepClones(ns); };
+        var visited = ts.visitEachChild(node, nodeClone, ts.nullTransformationContext, nodesClone, nodeClone);
         if (visited === node) {
             // This only happens for leaf nodes - internal nodes always see their children change.
             var clone_1 = ts.isStringLiteral(node) ? ts.setOriginalNode(ts.factory.createStringLiteralFromNode(node), node) :
@@ -120847,8 +123339,8 @@
                     ts.factory.cloneNode(node);
             return ts.setTextRange(clone_1, node);
         }
-        // PERF: As an optimization, rather than calling getSynthesizedClone, we'll update
-        // the new node created by visitEachChild with the extra changes getSynthesizedClone
+        // PERF: As an optimization, rather than calling factory.cloneNode, we'll update
+        // the new node created by visitEachChild with the extra changes factory.cloneNode
         // would have made.
         visited.parent = undefined;
         return visited;
@@ -121008,15 +123500,15 @@
     function getContextualTypeFromParent(node, checker) {
         var parent = node.parent;
         switch (parent.kind) {
-            case 205 /* NewExpression */:
+            case 207 /* NewExpression */:
                 return checker.getContextualType(parent);
-            case 217 /* BinaryExpression */: {
+            case 219 /* BinaryExpression */: {
                 var _a = parent, left = _a.left, operatorToken = _a.operatorToken, right = _a.right;
                 return isEqualityOperatorKind(operatorToken.kind)
                     ? checker.getTypeAtLocation(node === right ? left : right)
                     : checker.getContextualType(node);
             }
-            case 285 /* CaseClause */:
+            case 287 /* CaseClause */:
                 return parent.expression === node ? getSwitchedType(parent, checker) : undefined;
             default:
                 return checker.getContextualType(node);
@@ -121046,8 +123538,8 @@
         switch (node.kind) {
             case 10 /* StringLiteral */:
             case 14 /* NoSubstitutionTemplateLiteral */:
-            case 219 /* TemplateExpression */:
-            case 206 /* TaggedTemplateExpression */:
+            case 221 /* TemplateExpression */:
+            case 208 /* TaggedTemplateExpression */:
                 return true;
             default:
                 return false;
@@ -121070,6 +123562,7 @@
         var res = checker.typeToTypeNode(type, enclosingScope, 1 /* NoTruncation */, {
             trackSymbol: function (symbol, declaration, meaning) {
                 typeIsAccessible = typeIsAccessible && checker.isSymbolAccessible(symbol, declaration, meaning, /*shouldComputeAliasToMarkVisible*/ false).accessibility === 0 /* Accessible */;
+                return !typeIsAccessible;
             },
             reportInaccessibleThisError: notAccessible,
             reportPrivateInBaseOfClassExpression: notAccessible,
@@ -121080,41 +123573,41 @@
     }
     ts.getTypeNodeIfAccessible = getTypeNodeIfAccessible;
     function syntaxRequiresTrailingCommaOrSemicolonOrASI(kind) {
-        return kind === 170 /* CallSignature */
-            || kind === 171 /* ConstructSignature */
-            || kind === 172 /* IndexSignature */
-            || kind === 163 /* PropertySignature */
-            || kind === 165 /* MethodSignature */;
+        return kind === 172 /* CallSignature */
+            || kind === 173 /* ConstructSignature */
+            || kind === 174 /* IndexSignature */
+            || kind === 164 /* PropertySignature */
+            || kind === 166 /* MethodSignature */;
     }
     ts.syntaxRequiresTrailingCommaOrSemicolonOrASI = syntaxRequiresTrailingCommaOrSemicolonOrASI;
     function syntaxRequiresTrailingFunctionBlockOrSemicolonOrASI(kind) {
-        return kind === 252 /* FunctionDeclaration */
-            || kind === 167 /* Constructor */
-            || kind === 166 /* MethodDeclaration */
-            || kind === 168 /* GetAccessor */
-            || kind === 169 /* SetAccessor */;
+        return kind === 254 /* FunctionDeclaration */
+            || kind === 169 /* Constructor */
+            || kind === 167 /* MethodDeclaration */
+            || kind === 170 /* GetAccessor */
+            || kind === 171 /* SetAccessor */;
     }
     ts.syntaxRequiresTrailingFunctionBlockOrSemicolonOrASI = syntaxRequiresTrailingFunctionBlockOrSemicolonOrASI;
     function syntaxRequiresTrailingModuleBlockOrSemicolonOrASI(kind) {
-        return kind === 257 /* ModuleDeclaration */;
+        return kind === 259 /* ModuleDeclaration */;
     }
     ts.syntaxRequiresTrailingModuleBlockOrSemicolonOrASI = syntaxRequiresTrailingModuleBlockOrSemicolonOrASI;
     function syntaxRequiresTrailingSemicolonOrASI(kind) {
-        return kind === 233 /* VariableStatement */
-            || kind === 234 /* ExpressionStatement */
-            || kind === 236 /* DoStatement */
-            || kind === 241 /* ContinueStatement */
-            || kind === 242 /* BreakStatement */
-            || kind === 243 /* ReturnStatement */
-            || kind === 247 /* ThrowStatement */
-            || kind === 249 /* DebuggerStatement */
-            || kind === 164 /* PropertyDeclaration */
-            || kind === 255 /* TypeAliasDeclaration */
-            || kind === 262 /* ImportDeclaration */
-            || kind === 261 /* ImportEqualsDeclaration */
-            || kind === 268 /* ExportDeclaration */
-            || kind === 260 /* NamespaceExportDeclaration */
-            || kind === 267 /* ExportAssignment */;
+        return kind === 235 /* VariableStatement */
+            || kind === 236 /* ExpressionStatement */
+            || kind === 238 /* DoStatement */
+            || kind === 243 /* ContinueStatement */
+            || kind === 244 /* BreakStatement */
+            || kind === 245 /* ReturnStatement */
+            || kind === 249 /* ThrowStatement */
+            || kind === 251 /* DebuggerStatement */
+            || kind === 165 /* PropertyDeclaration */
+            || kind === 257 /* TypeAliasDeclaration */
+            || kind === 264 /* ImportDeclaration */
+            || kind === 263 /* ImportEqualsDeclaration */
+            || kind === 270 /* ExportDeclaration */
+            || kind === 262 /* NamespaceExportDeclaration */
+            || kind === 269 /* ExportAssignment */;
     }
     ts.syntaxRequiresTrailingSemicolonOrASI = syntaxRequiresTrailingSemicolonOrASI;
     ts.syntaxMayBeASICandidate = ts.or(syntaxRequiresTrailingCommaOrSemicolonOrASI, syntaxRequiresTrailingFunctionBlockOrSemicolonOrASI, syntaxRequiresTrailingModuleBlockOrSemicolonOrASI, syntaxRequiresTrailingSemicolonOrASI);
@@ -121144,7 +123637,7 @@
             return false;
         }
         // See comment in parser’s `parseDoStatement`
-        if (node.kind === 236 /* DoStatement */) {
+        if (node.kind === 238 /* DoStatement */) {
             return true;
         }
         var topNode = ts.findAncestor(node, function (ancestor) { return !ancestor.parent; });
@@ -121316,7 +123809,7 @@
         }
     }
     ts.createPackageJsonInfo = createPackageJsonInfo;
-    function createPackageJsonImportFilter(fromFile, host) {
+    function createPackageJsonImportFilter(fromFile, preferences, host) {
         var packageJsons = ((host.getPackageJsonsVisibleToFile && host.getPackageJsonsVisibleToFile(fromFile.fileName)) || getPackageJsonsVisibleToFile(fromFile.fileName, host)).filter(function (p) { return p.parseable; });
         var usesNodeCoreModules;
         return { allowsImportingAmbientModule: allowsImportingAmbientModule, allowsImportingSourceFile: allowsImportingSourceFile, allowsImportingSpecifier: allowsImportingSpecifier };
@@ -121384,7 +123877,7 @@
             if (!ts.stringContains(importedFileName, "node_modules")) {
                 return undefined;
             }
-            var specifier = ts.moduleSpecifiers.getNodeModulesPackageName(host.getCompilationSettings(), fromFile.path, importedFileName, moduleSpecifierResolutionHost);
+            var specifier = ts.moduleSpecifiers.getNodeModulesPackageName(host.getCompilationSettings(), fromFile.path, importedFileName, moduleSpecifierResolutionHost, preferences);
             if (!specifier) {
                 return undefined;
             }
@@ -121546,6 +124039,24 @@
         return ts.isInJSFile(declaration) || !ts.findAncestor(declaration, ts.isGlobalScopeAugmentation);
     }
     ts.isNonGlobalDeclaration = isNonGlobalDeclaration;
+    function isDeprecatedDeclaration(decl) {
+        return !!(ts.getCombinedNodeFlagsAlwaysIncludeJSDoc(decl) & 8192 /* Deprecated */);
+    }
+    ts.isDeprecatedDeclaration = isDeprecatedDeclaration;
+    function shouldUseUriStyleNodeCoreModules(file, program) {
+        var decisionFromFile = ts.firstDefined(file.imports, function (node) {
+            if (ts.JsTyping.nodeCoreModules.has(node.text)) {
+                return ts.startsWith(node.text, "node:");
+            }
+        });
+        return decisionFromFile !== null && decisionFromFile !== void 0 ? decisionFromFile : program.usesUriStyleNodeCoreModules;
+    }
+    ts.shouldUseUriStyleNodeCoreModules = shouldUseUriStyleNodeCoreModules;
+    // #endregion
+})(ts || (ts = {}));
+/*@internal*/
+var ts;
+(function (ts) {
     var ImportKind;
     (function (ImportKind) {
         ImportKind[ImportKind["Named"] = 0] = "Named";
@@ -121560,49 +124071,68 @@
         ExportKind[ExportKind["ExportEquals"] = 2] = "ExportEquals";
         ExportKind[ExportKind["UMD"] = 3] = "UMD";
     })(ExportKind = ts.ExportKind || (ts.ExportKind = {}));
-    function createExportMapCache() {
-        var cache;
-        var projectVersion;
+    function createCacheableExportInfoMap(host) {
+        var exportInfoId = 1;
+        var exportInfo = ts.createMultiMap();
+        var symbols = new ts.Map();
         var usableByFileName;
-        var wrapped = {
-            isEmpty: function () {
-                return !cache;
-            },
+        var cache = {
+            isUsableByFile: function (importingFile) { return importingFile === usableByFileName; },
+            isEmpty: function () { return !exportInfo.size; },
             clear: function () {
-                cache = undefined;
-                projectVersion = undefined;
+                exportInfo.clear();
+                symbols.clear();
+                usableByFileName = undefined;
             },
-            set: function (suggestions, version) {
-                cache = suggestions;
-                if (version) {
-                    projectVersion = version;
+            add: function (importingFile, symbol, symbolTableKey, moduleSymbol, moduleFile, exportKind, isFromPackageJson, scriptTarget, checker) {
+                if (importingFile !== usableByFileName) {
+                    cache.clear();
+                    usableByFileName = importingFile;
                 }
-            },
-            get: function (file, checker, version) {
-                if (usableByFileName && file !== usableByFileName) {
-                    return undefined;
-                }
-                if (version && projectVersion === version) {
-                    return cache;
-                }
-                cache === null || cache === void 0 ? void 0 : cache.forEach(function (infos) {
-                    var _a, _b, _c;
-                    for (var _i = 0, infos_1 = infos; _i < infos_1.length; _i++) {
-                        var info = infos_1[_i];
-                        // If the symbol/moduleSymbol was a merged symbol, it will have a new identity
-                        // in the checker, even though the symbols to merge are the same (guaranteed by
-                        // cache invalidation in synchronizeHostData).
-                        if ((_a = info.symbol.declarations) === null || _a === void 0 ? void 0 : _a.length) {
-                            info.symbol = checker.getMergedSymbol(info.exportKind === 1 /* Default */
-                                ? (_b = info.symbol.declarations[0].localSymbol) !== null && _b !== void 0 ? _b : info.symbol.declarations[0].symbol
-                                : info.symbol.declarations[0].symbol);
-                        }
-                        if ((_c = info.moduleSymbol.declarations) === null || _c === void 0 ? void 0 : _c.length) {
-                            info.moduleSymbol = checker.getMergedSymbol(info.moduleSymbol.declarations[0].symbol);
-                        }
-                    }
+                var isDefault = exportKind === 1 /* Default */;
+                var namedSymbol = isDefault && ts.getLocalSymbolForExportDefault(symbol) || symbol;
+                // A re-export merged with an export from a module augmentation can result in `symbol`
+                // being an external module symbol; the name it is re-exported by will be `symbolTableKey`
+                // (which comes from the keys of `moduleSymbol.exports`.)
+                var importedName = ts.isExternalModuleSymbol(namedSymbol)
+                    ? ts.unescapeLeadingUnderscores(symbolTableKey)
+                    : ts.getNameForExportedSymbol(namedSymbol, scriptTarget);
+                var moduleName = ts.stripQuotes(moduleSymbol.name);
+                var id = exportInfoId++;
+                var storedSymbol = symbol.flags & 33554432 /* Transient */ ? undefined : symbol;
+                var storedModuleSymbol = moduleSymbol.flags & 33554432 /* Transient */ ? undefined : moduleSymbol;
+                if (!storedSymbol || !storedModuleSymbol)
+                    symbols.set(id, [symbol, moduleSymbol]);
+                exportInfo.add(key(importedName, symbol, moduleName, checker), {
+                    id: id,
+                    symbolTableKey: symbolTableKey,
+                    symbolName: importedName,
+                    moduleName: moduleName,
+                    moduleFile: moduleFile,
+                    moduleFileName: moduleFile === null || moduleFile === void 0 ? void 0 : moduleFile.fileName,
+                    exportKind: exportKind,
+                    targetFlags: ts.skipAlias(symbol, checker).flags,
+                    isFromPackageJson: isFromPackageJson,
+                    symbol: storedSymbol,
+                    moduleSymbol: storedModuleSymbol,
                 });
-                return cache;
+            },
+            get: function (importingFile, importedName, symbol, moduleName, checker) {
+                if (importingFile !== usableByFileName)
+                    return;
+                var result = exportInfo.get(key(importedName, symbol, moduleName, checker));
+                return result === null || result === void 0 ? void 0 : result.map(rehydrateCachedInfo);
+            },
+            forEach: function (importingFile, action) {
+                if (importingFile !== usableByFileName)
+                    return;
+                exportInfo.forEach(function (info, key) {
+                    var _a = parseKey(key), symbolName = _a.symbolName, ambientModuleName = _a.ambientModuleName;
+                    action(info.map(rehydrateCachedInfo), symbolName, !!ambientModuleName);
+                });
+            },
+            releaseSymbols: function () {
+                symbols.clear();
             },
             onFileChanged: function (oldSourceFile, newSourceFile, typeAcquisitionEnabled) {
                 if (fileIsGlobalOnly(oldSourceFile) && fileIsGlobalOnly(newSourceFile)) {
@@ -121612,13 +124142,13 @@
                 if (usableByFileName && usableByFileName !== newSourceFile.path ||
                     // If ATA is enabled, auto-imports uses existing imports to guess whether you want auto-imports from node.
                     // Adding or removing imports from node could change the outcome of that guess, so could change the suggestions list.
-                    typeAcquisitionEnabled && consumesNodeCoreModules(oldSourceFile) !== consumesNodeCoreModules(newSourceFile) ||
+                    typeAcquisitionEnabled && ts.consumesNodeCoreModules(oldSourceFile) !== ts.consumesNodeCoreModules(newSourceFile) ||
                     // Module agumentation and ambient module changes can add or remove exports available to be auto-imported.
                     // Changes elsewhere in the file can change the *type* of an export in a module augmentation,
                     // but type info is gathered in getCompletionEntryDetails, which doesn’t use the cache.
                     !ts.arrayIsEqualTo(oldSourceFile.moduleAugmentations, newSourceFile.moduleAugmentations) ||
                     !ambientModuleDeclarationsAreEqual(oldSourceFile, newSourceFile)) {
-                    this.clear();
+                    cache.clear();
                     return true;
                 }
                 usableByFileName = newSourceFile.path;
@@ -121626,9 +124156,63 @@
             },
         };
         if (ts.Debug.isDebugging) {
-            Object.defineProperty(wrapped, "__cache", { get: function () { return cache; } });
+            Object.defineProperty(cache, "__cache", { get: function () { return exportInfo; } });
         }
-        return wrapped;
+        return cache;
+        function rehydrateCachedInfo(info) {
+            if (info.symbol && info.moduleSymbol)
+                return info;
+            var id = info.id, exportKind = info.exportKind, targetFlags = info.targetFlags, isFromPackageJson = info.isFromPackageJson, moduleFileName = info.moduleFileName;
+            var _a = symbols.get(id) || ts.emptyArray, cachedSymbol = _a[0], cachedModuleSymbol = _a[1];
+            if (cachedSymbol && cachedModuleSymbol) {
+                return {
+                    symbol: cachedSymbol,
+                    moduleSymbol: cachedModuleSymbol,
+                    moduleFileName: moduleFileName,
+                    exportKind: exportKind,
+                    targetFlags: targetFlags,
+                    isFromPackageJson: isFromPackageJson,
+                };
+            }
+            var checker = (isFromPackageJson
+                ? host.getPackageJsonAutoImportProvider()
+                : host.getCurrentProgram()).getTypeChecker();
+            var moduleSymbol = info.moduleSymbol || cachedModuleSymbol || ts.Debug.checkDefined(info.moduleFile
+                ? checker.getMergedSymbol(info.moduleFile.symbol)
+                : checker.tryFindAmbientModule(info.moduleName));
+            var symbol = info.symbol || cachedSymbol || ts.Debug.checkDefined(exportKind === 2 /* ExportEquals */
+                ? checker.resolveExternalModuleSymbol(moduleSymbol)
+                : checker.tryGetMemberInModuleExportsAndProperties(ts.unescapeLeadingUnderscores(info.symbolTableKey), moduleSymbol), "Could not find symbol '" + info.symbolName + "' by key '" + info.symbolTableKey + "' in module " + moduleSymbol.name);
+            symbols.set(id, [symbol, moduleSymbol]);
+            return {
+                symbol: symbol,
+                moduleSymbol: moduleSymbol,
+                moduleFileName: moduleFileName,
+                exportKind: exportKind,
+                targetFlags: targetFlags,
+                isFromPackageJson: isFromPackageJson,
+            };
+        }
+        function key(importedName, symbol, moduleName, checker) {
+            var unquoted = ts.stripQuotes(moduleName);
+            var moduleKey = ts.isExternalModuleNameRelative(unquoted) ? "/" : unquoted;
+            var target = ts.skipAlias(symbol, checker);
+            return importedName + "|" + createSymbolKey(target) + "|" + moduleKey;
+        }
+        function parseKey(key) {
+            var symbolName = key.substring(0, key.indexOf("|"));
+            var moduleKey = key.substring(key.lastIndexOf("|") + 1);
+            var ambientModuleName = moduleKey === "/" ? undefined : moduleKey;
+            return { symbolName: symbolName, ambientModuleName: ambientModuleName };
+        }
+        function createSymbolKey(symbol) {
+            var key = symbol.name;
+            while (symbol.parent) {
+                key += "," + symbol.parent.name;
+                symbol = symbol.parent;
+            }
+            return key;
+        }
         function fileIsGlobalOnly(file) {
             return !file.commonJsModuleIndicator && !file.externalModuleIndicator && !file.moduleAugmentations && !file.ambientModuleNames;
         }
@@ -121655,44 +124239,14 @@
             return true;
         }
     }
-    ts.createExportMapCache = createExportMapCache;
-    function createModuleSpecifierCache() {
-        var cache;
-        var importingFileName;
-        var wrapped = {
-            get: function (fromFileName, toFileName) {
-                if (!cache || fromFileName !== importingFileName)
-                    return undefined;
-                return cache.get(toFileName);
-            },
-            set: function (fromFileName, toFileName, moduleSpecifiers) {
-                if (cache && fromFileName !== importingFileName) {
-                    cache.clear();
-                }
-                importingFileName = fromFileName;
-                (cache || (cache = new ts.Map())).set(toFileName, moduleSpecifiers);
-            },
-            clear: function () {
-                cache = undefined;
-                importingFileName = undefined;
-            },
-            count: function () {
-                return cache ? cache.size : 0;
-            }
-        };
-        if (ts.Debug.isDebugging) {
-            Object.defineProperty(wrapped, "__cache", { get: function () { return cache; } });
-        }
-        return wrapped;
-    }
-    ts.createModuleSpecifierCache = createModuleSpecifierCache;
-    function isImportableFile(program, from, to, packageJsonFilter, moduleSpecifierResolutionHost, moduleSpecifierCache) {
+    ts.createCacheableExportInfoMap = createCacheableExportInfoMap;
+    function isImportableFile(program, from, to, preferences, packageJsonFilter, moduleSpecifierResolutionHost, moduleSpecifierCache) {
         var _a;
         if (from === to)
             return false;
-        var cachedResult = moduleSpecifierCache === null || moduleSpecifierCache === void 0 ? void 0 : moduleSpecifierCache.get(from.path, to.path);
-        if (cachedResult !== undefined) {
-            return !!cachedResult;
+        var cachedResult = moduleSpecifierCache === null || moduleSpecifierCache === void 0 ? void 0 : moduleSpecifierCache.get(from.path, to.path, preferences);
+        if ((cachedResult === null || cachedResult === void 0 ? void 0 : cachedResult.isAutoImportable) !== undefined) {
+            return cachedResult.isAutoImportable;
         }
         var getCanonicalFileName = ts.hostGetCanonicalFileName(moduleSpecifierResolutionHost);
         var globalTypingsCache = (_a = moduleSpecifierResolutionHost.getGlobalTypingsCacheLocation) === null || _a === void 0 ? void 0 : _a.call(moduleSpecifierResolutionHost);
@@ -121705,9 +124259,9 @@
                 isImportablePath(from.fileName, toPath, getCanonicalFileName, globalTypingsCache);
         });
         if (packageJsonFilter) {
-            var isImportable = hasImportablePath && packageJsonFilter.allowsImportingSourceFile(to, moduleSpecifierResolutionHost);
-            moduleSpecifierCache === null || moduleSpecifierCache === void 0 ? void 0 : moduleSpecifierCache.set(from.path, to.path, isImportable);
-            return isImportable;
+            var isAutoImportable = hasImportablePath && packageJsonFilter.allowsImportingSourceFile(to, moduleSpecifierResolutionHost);
+            moduleSpecifierCache === null || moduleSpecifierCache === void 0 ? void 0 : moduleSpecifierCache.setIsAutoImportable(from.path, to.path, preferences, isAutoImportable);
+            return isAutoImportable;
         }
         return hasImportablePath;
     }
@@ -121724,7 +124278,126 @@
             || ts.startsWith(getCanonicalFileName(fromPath), toNodeModulesParent)
             || (!!globalCachePath && ts.startsWith(getCanonicalFileName(globalCachePath), toNodeModulesParent));
     }
-    // #endregion
+    function forEachExternalModuleToImportFrom(program, host, useAutoImportProvider, cb) {
+        var _a, _b;
+        forEachExternalModule(program.getTypeChecker(), program.getSourceFiles(), function (module, file) { return cb(module, file, program, /*isFromPackageJson*/ false); });
+        var autoImportProvider = useAutoImportProvider && ((_a = host.getPackageJsonAutoImportProvider) === null || _a === void 0 ? void 0 : _a.call(host));
+        if (autoImportProvider) {
+            var start = ts.timestamp();
+            forEachExternalModule(autoImportProvider.getTypeChecker(), autoImportProvider.getSourceFiles(), function (module, file) { return cb(module, file, autoImportProvider, /*isFromPackageJson*/ true); });
+            (_b = host.log) === null || _b === void 0 ? void 0 : _b.call(host, "forEachExternalModuleToImportFrom autoImportProvider: " + (ts.timestamp() - start));
+        }
+    }
+    ts.forEachExternalModuleToImportFrom = forEachExternalModuleToImportFrom;
+    function forEachExternalModule(checker, allSourceFiles, cb) {
+        for (var _i = 0, _a = checker.getAmbientModules(); _i < _a.length; _i++) {
+            var ambient = _a[_i];
+            if (!ts.stringContains(ambient.name, "*")) {
+                cb(ambient, /*sourceFile*/ undefined);
+            }
+        }
+        for (var _b = 0, allSourceFiles_1 = allSourceFiles; _b < allSourceFiles_1.length; _b++) {
+            var sourceFile = allSourceFiles_1[_b];
+            if (ts.isExternalOrCommonJsModule(sourceFile)) {
+                cb(checker.getMergedSymbol(sourceFile.symbol), sourceFile);
+            }
+        }
+    }
+    function getExportInfoMap(importingFile, host, program, cancellationToken) {
+        var _a, _b, _c, _d, _e;
+        var start = ts.timestamp();
+        // Pulling the AutoImportProvider project will trigger its updateGraph if pending,
+        // which will invalidate the export map cache if things change, so pull it before
+        // checking the cache.
+        (_a = host.getPackageJsonAutoImportProvider) === null || _a === void 0 ? void 0 : _a.call(host);
+        var cache = ((_b = host.getCachedExportInfoMap) === null || _b === void 0 ? void 0 : _b.call(host)) || createCacheableExportInfoMap({
+            getCurrentProgram: function () { return program; },
+            getPackageJsonAutoImportProvider: function () { var _a; return (_a = host.getPackageJsonAutoImportProvider) === null || _a === void 0 ? void 0 : _a.call(host); },
+        });
+        if (cache.isUsableByFile(importingFile.path)) {
+            (_c = host.log) === null || _c === void 0 ? void 0 : _c.call(host, "getExportInfoMap: cache hit");
+            return cache;
+        }
+        (_d = host.log) === null || _d === void 0 ? void 0 : _d.call(host, "getExportInfoMap: cache miss or empty; calculating new results");
+        var compilerOptions = program.getCompilerOptions();
+        var scriptTarget = ts.getEmitScriptTarget(compilerOptions);
+        var moduleCount = 0;
+        forEachExternalModuleToImportFrom(program, host, /*useAutoImportProvider*/ true, function (moduleSymbol, moduleFile, program, isFromPackageJson) {
+            if (++moduleCount % 100 === 0)
+                cancellationToken === null || cancellationToken === void 0 ? void 0 : cancellationToken.throwIfCancellationRequested();
+            var seenExports = new ts.Map();
+            var checker = program.getTypeChecker();
+            var defaultInfo = getDefaultLikeExportInfo(moduleSymbol, checker, compilerOptions);
+            // Note: I think we shouldn't actually see resolved module symbols here, but weird merges
+            // can cause it to happen: see 'completionsImport_mergedReExport.ts'
+            if (defaultInfo && isImportableSymbol(defaultInfo.symbol, checker)) {
+                cache.add(importingFile.path, defaultInfo.symbol, defaultInfo.exportKind === 1 /* Default */ ? "default" /* Default */ : "export=" /* ExportEquals */, moduleSymbol, moduleFile, defaultInfo.exportKind, isFromPackageJson, scriptTarget, checker);
+            }
+            checker.forEachExportAndPropertyOfModule(moduleSymbol, function (exported, key) {
+                if (exported !== (defaultInfo === null || defaultInfo === void 0 ? void 0 : defaultInfo.symbol) && isImportableSymbol(exported, checker) && ts.addToSeen(seenExports, exported)) {
+                    cache.add(importingFile.path, exported, key, moduleSymbol, moduleFile, 0 /* Named */, isFromPackageJson, scriptTarget, checker);
+                }
+            });
+        });
+        (_e = host.log) === null || _e === void 0 ? void 0 : _e.call(host, "getExportInfoMap: done in " + (ts.timestamp() - start) + " ms");
+        return cache;
+    }
+    ts.getExportInfoMap = getExportInfoMap;
+    function getDefaultLikeExportInfo(moduleSymbol, checker, compilerOptions) {
+        var exported = getDefaultLikeExportWorker(moduleSymbol, checker);
+        if (!exported)
+            return undefined;
+        var symbol = exported.symbol, exportKind = exported.exportKind;
+        var info = getDefaultExportInfoWorker(symbol, checker, compilerOptions);
+        return info && __assign({ symbol: symbol, exportKind: exportKind }, info);
+    }
+    ts.getDefaultLikeExportInfo = getDefaultLikeExportInfo;
+    function isImportableSymbol(symbol, checker) {
+        return !checker.isUndefinedSymbol(symbol) && !checker.isUnknownSymbol(symbol) && !ts.isKnownSymbol(symbol) && !ts.isPrivateIdentifierSymbol(symbol);
+    }
+    function getDefaultLikeExportWorker(moduleSymbol, checker) {
+        var exportEquals = checker.resolveExternalModuleSymbol(moduleSymbol);
+        if (exportEquals !== moduleSymbol)
+            return { symbol: exportEquals, exportKind: 2 /* ExportEquals */ };
+        var defaultExport = checker.tryGetMemberInModuleExports("default" /* Default */, moduleSymbol);
+        if (defaultExport)
+            return { symbol: defaultExport, exportKind: 1 /* Default */ };
+    }
+    function getDefaultExportInfoWorker(defaultExport, checker, compilerOptions) {
+        var localSymbol = ts.getLocalSymbolForExportDefault(defaultExport);
+        if (localSymbol)
+            return { symbolForMeaning: localSymbol, name: localSymbol.name };
+        var name = getNameForExportDefault(defaultExport);
+        if (name !== undefined)
+            return { symbolForMeaning: defaultExport, name: name };
+        if (defaultExport.flags & 2097152 /* Alias */) {
+            var aliased = checker.getImmediateAliasedSymbol(defaultExport);
+            if (aliased && aliased.parent) {
+                // - `aliased` will be undefined if the module is exporting an unresolvable name,
+                //    but we can still offer completions for it.
+                // - `aliased.parent` will be undefined if the module is exporting `globalThis.something`,
+                //    or another expression that resolves to a global.
+                return getDefaultExportInfoWorker(aliased, checker, compilerOptions);
+            }
+        }
+        if (defaultExport.escapedName !== "default" /* Default */ &&
+            defaultExport.escapedName !== "export=" /* ExportEquals */) {
+            return { symbolForMeaning: defaultExport, name: defaultExport.getName() };
+        }
+        return { symbolForMeaning: defaultExport, name: ts.getNameForExportedSymbol(defaultExport, compilerOptions.target) };
+    }
+    function getNameForExportDefault(symbol) {
+        return symbol.declarations && ts.firstDefined(symbol.declarations, function (declaration) {
+            var _a;
+            if (ts.isExportAssignment(declaration)) {
+                return (_a = ts.tryCast(ts.skipOuterExpressions(declaration.expression), ts.isIdentifier)) === null || _a === void 0 ? void 0 : _a.text;
+            }
+            else if (ts.isExportSpecifier(declaration)) {
+                ts.Debug.assert(declaration.name.text === "default" /* Default */, "Expected the specifier to be a default export");
+                return declaration.propertyName && declaration.propertyName.text;
+            }
+        });
+    }
 })(ts || (ts = {}));
 var ts;
 (function (ts) {
@@ -121807,13 +124480,13 @@
             function handleToken() {
                 switch (token) {
                     case 43 /* SlashToken */:
-                    case 67 /* SlashEqualsToken */:
+                    case 68 /* SlashEqualsToken */:
                         if (!noRegexTable[lastNonTriviaToken] && scanner.reScanSlashToken() === 13 /* RegularExpressionLiteral */) {
                             token = 13 /* RegularExpressionLiteral */;
                         }
                         break;
                     case 29 /* LessThanToken */:
-                        if (lastNonTriviaToken === 78 /* Identifier */) {
+                        if (lastNonTriviaToken === 79 /* Identifier */) {
                             // Could be the start of something generic.  Keep track of that by bumping
                             // up the current count of generic contexts we may be in.
                             angleBracketStack++;
@@ -121826,16 +124499,16 @@
                             angleBracketStack--;
                         }
                         break;
-                    case 128 /* AnyKeyword */:
-                    case 147 /* StringKeyword */:
-                    case 144 /* NumberKeyword */:
-                    case 131 /* BooleanKeyword */:
-                    case 148 /* SymbolKeyword */:
+                    case 129 /* AnyKeyword */:
+                    case 148 /* StringKeyword */:
+                    case 145 /* NumberKeyword */:
+                    case 132 /* BooleanKeyword */:
+                    case 149 /* SymbolKeyword */:
                         if (angleBracketStack > 0 && !syntacticClassifierAbsent) {
                             // If it looks like we're could be in something generic, don't classify this
                             // as a keyword.  We may just get overwritten by the syntactic classifier,
                             // causing a noisy experience for the user.
-                            token = 78 /* Identifier */;
+                            token = 79 /* Identifier */;
                         }
                         break;
                     case 15 /* TemplateHead */:
@@ -121874,14 +124547,14 @@
                             break;
                         }
                         if (lastNonTriviaToken === 24 /* DotToken */) {
-                            token = 78 /* Identifier */;
+                            token = 79 /* Identifier */;
                         }
                         else if (ts.isKeyword(lastNonTriviaToken) && ts.isKeyword(token) && !canFollow(lastNonTriviaToken, token)) {
                             // We have two keywords in a row.  Only treat the second as a keyword if
                             // it's a sequence that could legally occur in the language.  Otherwise
                             // treat it as an identifier.  This way, if someone writes "private var"
                             // we recognize that 'var' is actually an identifier here.
-                            token = 78 /* Identifier */;
+                            token = 79 /* Identifier */;
                         }
                 }
             }
@@ -121895,19 +124568,19 @@
     /// we have a series of divide operator. this list allows us to be more accurate by ruling out
     /// locations where a regexp cannot exist.
     var noRegexTable = ts.arrayToNumericMap([
-        78 /* Identifier */,
+        79 /* Identifier */,
         10 /* StringLiteral */,
         8 /* NumericLiteral */,
         9 /* BigIntLiteral */,
         13 /* RegularExpressionLiteral */,
-        107 /* ThisKeyword */,
+        108 /* ThisKeyword */,
         45 /* PlusPlusToken */,
         46 /* MinusMinusToken */,
         21 /* CloseParenToken */,
         23 /* CloseBracketToken */,
         19 /* CloseBraceToken */,
-        109 /* TrueKeyword */,
-        94 /* FalseKeyword */,
+        110 /* TrueKeyword */,
+        95 /* FalseKeyword */,
     ], function (token) { return token; }, function () { return true; });
     function getNewEndOfLineState(scanner, token, lastOnTemplateStack) {
         switch (token) {
@@ -122019,10 +124692,10 @@
             return true;
         }
         switch (keyword2) {
-            case 134 /* GetKeyword */:
-            case 146 /* SetKeyword */:
-            case 132 /* ConstructorKeyword */:
-            case 123 /* StaticKeyword */:
+            case 135 /* GetKeyword */:
+            case 147 /* SetKeyword */:
+            case 133 /* ConstructorKeyword */:
+            case 124 /* StaticKeyword */:
                 return true; // Allow things like "public get", "public constructor" and "public static".
             default:
                 return false; // Any other keyword following "public" is actually an identifier, not a real keyword.
@@ -122067,9 +124740,9 @@
             case 31 /* GreaterThanToken */:
             case 32 /* LessThanEqualsToken */:
             case 33 /* GreaterThanEqualsToken */:
-            case 101 /* InstanceOfKeyword */:
-            case 100 /* InKeyword */:
-            case 126 /* AsKeyword */:
+            case 102 /* InstanceOfKeyword */:
+            case 101 /* InKeyword */:
+            case 127 /* AsKeyword */:
             case 34 /* EqualsEqualsToken */:
             case 35 /* ExclamationEqualsToken */:
             case 36 /* EqualsEqualsEqualsToken */:
@@ -122079,23 +124752,23 @@
             case 51 /* BarToken */:
             case 55 /* AmpersandAmpersandToken */:
             case 56 /* BarBarToken */:
-            case 73 /* BarEqualsToken */:
-            case 72 /* AmpersandEqualsToken */:
-            case 77 /* CaretEqualsToken */:
-            case 69 /* LessThanLessThanEqualsToken */:
-            case 70 /* GreaterThanGreaterThanEqualsToken */:
-            case 71 /* GreaterThanGreaterThanGreaterThanEqualsToken */:
-            case 63 /* PlusEqualsToken */:
-            case 64 /* MinusEqualsToken */:
-            case 65 /* AsteriskEqualsToken */:
-            case 67 /* SlashEqualsToken */:
-            case 68 /* PercentEqualsToken */:
-            case 62 /* EqualsToken */:
+            case 74 /* BarEqualsToken */:
+            case 73 /* AmpersandEqualsToken */:
+            case 78 /* CaretEqualsToken */:
+            case 70 /* LessThanLessThanEqualsToken */:
+            case 71 /* GreaterThanGreaterThanEqualsToken */:
+            case 72 /* GreaterThanGreaterThanGreaterThanEqualsToken */:
+            case 64 /* PlusEqualsToken */:
+            case 65 /* MinusEqualsToken */:
+            case 66 /* AsteriskEqualsToken */:
+            case 68 /* SlashEqualsToken */:
+            case 69 /* PercentEqualsToken */:
+            case 63 /* EqualsToken */:
             case 27 /* CommaToken */:
             case 60 /* QuestionQuestionToken */:
-            case 74 /* BarBarEqualsToken */:
-            case 75 /* AmpersandAmpersandEqualsToken */:
-            case 76 /* QuestionQuestionEqualsToken */:
+            case 75 /* BarBarEqualsToken */:
+            case 76 /* AmpersandAmpersandEqualsToken */:
+            case 77 /* QuestionQuestionEqualsToken */:
                 return true;
             default:
                 return false;
@@ -122121,7 +124794,7 @@
         else if (isBinaryExpressionOperatorToken(token) || isPrefixUnaryExpressionOperatorToken(token)) {
             return 5 /* operator */;
         }
-        else if (token >= 18 /* FirstPunctuation */ && token <= 77 /* LastPunctuation */) {
+        else if (token >= 18 /* FirstPunctuation */ && token <= 78 /* LastPunctuation */) {
             return 10 /* punctuation */;
         }
         switch (token) {
@@ -122140,7 +124813,7 @@
             case 5 /* WhitespaceTrivia */:
             case 4 /* NewLineTrivia */:
                 return 8 /* whiteSpace */;
-            case 78 /* Identifier */:
+            case 79 /* Identifier */:
             default:
                 if (ts.isTemplateLiteralKind(token)) {
                     return 6 /* stringLiteral */;
@@ -122165,13 +124838,13 @@
         // That means we're calling back into the host around every 1.2k of the file we process.
         // Lib.d.ts has similar numbers.
         switch (kind) {
-            case 257 /* ModuleDeclaration */:
-            case 253 /* ClassDeclaration */:
-            case 254 /* InterfaceDeclaration */:
-            case 252 /* FunctionDeclaration */:
-            case 222 /* ClassExpression */:
-            case 209 /* FunctionExpression */:
-            case 210 /* ArrowFunction */:
+            case 259 /* ModuleDeclaration */:
+            case 255 /* ClassDeclaration */:
+            case 256 /* InterfaceDeclaration */:
+            case 254 /* FunctionDeclaration */:
+            case 224 /* ClassExpression */:
+            case 211 /* FunctionExpression */:
+            case 212 /* ArrowFunction */:
                 cancellationToken.throwIfCancellationRequested();
         }
     }
@@ -122393,46 +125066,46 @@
                     pos = tag.tagName.end;
                     var commentStart = tag.tagName.end;
                     switch (tag.kind) {
-                        case 330 /* JSDocParameterTag */:
+                        case 335 /* JSDocParameterTag */:
                             var param = tag;
                             processJSDocParameterTag(param);
                             commentStart = param.isNameFirst && ((_a = param.typeExpression) === null || _a === void 0 ? void 0 : _a.end) || param.name.end;
                             break;
-                        case 337 /* JSDocPropertyTag */:
+                        case 342 /* JSDocPropertyTag */:
                             var prop = tag;
                             commentStart = prop.isNameFirst && ((_b = prop.typeExpression) === null || _b === void 0 ? void 0 : _b.end) || prop.name.end;
                             break;
-                        case 334 /* JSDocTemplateTag */:
+                        case 339 /* JSDocTemplateTag */:
                             processJSDocTemplateTag(tag);
                             pos = tag.end;
                             commentStart = tag.typeParameters.end;
                             break;
-                        case 335 /* JSDocTypedefTag */:
+                        case 340 /* JSDocTypedefTag */:
                             var type = tag;
-                            commentStart = ((_c = type.typeExpression) === null || _c === void 0 ? void 0 : _c.kind) === 302 /* JSDocTypeExpression */ && ((_d = type.fullName) === null || _d === void 0 ? void 0 : _d.end) || ((_e = type.typeExpression) === null || _e === void 0 ? void 0 : _e.end) || commentStart;
+                            commentStart = ((_c = type.typeExpression) === null || _c === void 0 ? void 0 : _c.kind) === 304 /* JSDocTypeExpression */ && ((_d = type.fullName) === null || _d === void 0 ? void 0 : _d.end) || ((_e = type.typeExpression) === null || _e === void 0 ? void 0 : _e.end) || commentStart;
                             break;
-                        case 328 /* JSDocCallbackTag */:
+                        case 333 /* JSDocCallbackTag */:
                             commentStart = tag.typeExpression.end;
                             break;
-                        case 333 /* JSDocTypeTag */:
+                        case 338 /* JSDocTypeTag */:
                             processElement(tag.typeExpression);
                             pos = tag.end;
                             commentStart = tag.typeExpression.end;
                             break;
-                        case 332 /* JSDocThisTag */:
-                        case 329 /* JSDocEnumTag */:
+                        case 337 /* JSDocThisTag */:
+                        case 334 /* JSDocEnumTag */:
                             commentStart = tag.typeExpression.end;
                             break;
-                        case 331 /* JSDocReturnTag */:
+                        case 336 /* JSDocReturnTag */:
                             processElement(tag.typeExpression);
                             pos = tag.end;
                             commentStart = ((_f = tag.typeExpression) === null || _f === void 0 ? void 0 : _f.end) || commentStart;
                             break;
-                        case 336 /* JSDocSeeTag */:
+                        case 341 /* JSDocSeeTag */:
                             commentStart = ((_g = tag.name) === null || _g === void 0 ? void 0 : _g.end) || commentStart;
                             break;
-                        case 318 /* JSDocAugmentsTag */:
-                        case 319 /* JSDocImplementsTag */:
+                        case 323 /* JSDocAugmentsTag */:
+                        case 324 /* JSDocImplementsTag */:
                             commentStart = tag.class.end;
                             break;
                     }
@@ -122468,7 +125141,8 @@
         }
         function tryClassifyTripleSlashComment(start, width) {
             var tripleSlashXMLCommentRegEx = /^(\/\/\/\s*)(<)(?:(\S+)((?:[^/]|\/[^>])*)(\/>)?)?/im;
-            var attributeRegex = /(\S+)(\s*)(=)(\s*)('[^']+'|"[^"]+")/img;
+            // Require a leading whitespace character (the parser already does) to prevent terrible backtracking performance
+            var attributeRegex = /(\s)(\S+)(\s*)(=)(\s*)('[^']+'|"[^"]+")/img;
             var text = sourceFile.text.substr(start, width);
             var match = tripleSlashXMLCommentRegEx.exec(text);
             if (!match) {
@@ -122496,25 +125170,25 @@
                 if (!attrMatch) {
                     break;
                 }
-                var newAttrPos = pos + attrMatch.index;
+                var newAttrPos = pos + attrMatch.index + attrMatch[1].length; // whitespace
                 if (newAttrPos > attrPos) {
                     pushCommentRange(attrPos, newAttrPos - attrPos);
                     attrPos = newAttrPos;
                 }
-                pushClassification(attrPos, attrMatch[1].length, 22 /* jsxAttribute */); // attribute name
-                attrPos += attrMatch[1].length;
-                if (attrMatch[2].length) {
-                    pushCommentRange(attrPos, attrMatch[2].length); // whitespace
-                    attrPos += attrMatch[2].length;
+                pushClassification(attrPos, attrMatch[2].length, 22 /* jsxAttribute */); // attribute name
+                attrPos += attrMatch[2].length;
+                if (attrMatch[3].length) {
+                    pushCommentRange(attrPos, attrMatch[3].length); // whitespace
+                    attrPos += attrMatch[3].length;
                 }
-                pushClassification(attrPos, attrMatch[3].length, 5 /* operator */); // =
-                attrPos += attrMatch[3].length;
-                if (attrMatch[4].length) {
-                    pushCommentRange(attrPos, attrMatch[4].length); // whitespace
-                    attrPos += attrMatch[4].length;
+                pushClassification(attrPos, attrMatch[4].length, 5 /* operator */); // =
+                attrPos += attrMatch[4].length;
+                if (attrMatch[5].length) {
+                    pushCommentRange(attrPos, attrMatch[5].length); // whitespace
+                    attrPos += attrMatch[5].length;
                 }
-                pushClassification(attrPos, attrMatch[5].length, 24 /* jsxAttributeStringLiteralValue */); // attribute value
-                attrPos += attrMatch[5].length;
+                pushClassification(attrPos, attrMatch[6].length, 24 /* jsxAttributeStringLiteralValue */); // attribute value
+                attrPos += attrMatch[6].length;
             }
             pos += match[4].length;
             if (pos > attrPos) {
@@ -122588,22 +125262,22 @@
         }
         function tryClassifyJsxElementName(token) {
             switch (token.parent && token.parent.kind) {
-                case 276 /* JsxOpeningElement */:
+                case 278 /* JsxOpeningElement */:
                     if (token.parent.tagName === token) {
                         return 19 /* jsxOpenTagName */;
                     }
                     break;
-                case 277 /* JsxClosingElement */:
+                case 279 /* JsxClosingElement */:
                     if (token.parent.tagName === token) {
                         return 20 /* jsxCloseTagName */;
                     }
                     break;
-                case 275 /* JsxSelfClosingElement */:
+                case 277 /* JsxSelfClosingElement */:
                     if (token.parent.tagName === token) {
                         return 21 /* jsxSelfClosingTagName */;
                     }
                     break;
-                case 281 /* JsxAttribute */:
+                case 283 /* JsxAttribute */:
                     if (token.parent.name === token) {
                         return 22 /* jsxAttribute */;
                     }
@@ -122630,19 +125304,19 @@
             if (ts.isPunctuation(tokenKind)) {
                 if (token) {
                     var parent = token.parent;
-                    if (tokenKind === 62 /* EqualsToken */) {
+                    if (tokenKind === 63 /* EqualsToken */) {
                         // the '=' in a variable declaration is special cased here.
-                        if (parent.kind === 250 /* VariableDeclaration */ ||
-                            parent.kind === 164 /* PropertyDeclaration */ ||
-                            parent.kind === 161 /* Parameter */ ||
-                            parent.kind === 281 /* JsxAttribute */) {
+                        if (parent.kind === 252 /* VariableDeclaration */ ||
+                            parent.kind === 165 /* PropertyDeclaration */ ||
+                            parent.kind === 162 /* Parameter */ ||
+                            parent.kind === 283 /* JsxAttribute */) {
                             return 5 /* operator */;
                         }
                     }
-                    if (parent.kind === 217 /* BinaryExpression */ ||
-                        parent.kind === 215 /* PrefixUnaryExpression */ ||
-                        parent.kind === 216 /* PostfixUnaryExpression */ ||
-                        parent.kind === 218 /* ConditionalExpression */) {
+                    if (parent.kind === 219 /* BinaryExpression */ ||
+                        parent.kind === 217 /* PrefixUnaryExpression */ ||
+                        parent.kind === 218 /* PostfixUnaryExpression */ ||
+                        parent.kind === 220 /* ConditionalExpression */) {
                         return 5 /* operator */;
                     }
                 }
@@ -122655,7 +125329,7 @@
                 return 25 /* bigintLiteral */;
             }
             else if (tokenKind === 10 /* StringLiteral */) {
-                return token && token.parent.kind === 281 /* JsxAttribute */ ? 24 /* jsxAttributeStringLiteralValue */ : 6 /* stringLiteral */;
+                return token && token.parent.kind === 283 /* JsxAttribute */ ? 24 /* jsxAttributeStringLiteralValue */ : 6 /* stringLiteral */;
             }
             else if (tokenKind === 13 /* RegularExpressionLiteral */) {
                 // TODO: we should get another classification type for these literals.
@@ -122668,35 +125342,35 @@
             else if (tokenKind === 11 /* JsxText */) {
                 return 23 /* jsxText */;
             }
-            else if (tokenKind === 78 /* Identifier */) {
+            else if (tokenKind === 79 /* Identifier */) {
                 if (token) {
                     switch (token.parent.kind) {
-                        case 253 /* ClassDeclaration */:
+                        case 255 /* ClassDeclaration */:
                             if (token.parent.name === token) {
                                 return 11 /* className */;
                             }
                             return;
-                        case 160 /* TypeParameter */:
+                        case 161 /* TypeParameter */:
                             if (token.parent.name === token) {
                                 return 15 /* typeParameterName */;
                             }
                             return;
-                        case 254 /* InterfaceDeclaration */:
+                        case 256 /* InterfaceDeclaration */:
                             if (token.parent.name === token) {
                                 return 13 /* interfaceName */;
                             }
                             return;
-                        case 256 /* EnumDeclaration */:
+                        case 258 /* EnumDeclaration */:
                             if (token.parent.name === token) {
                                 return 12 /* enumName */;
                             }
                             return;
-                        case 257 /* ModuleDeclaration */:
+                        case 259 /* ModuleDeclaration */:
                             if (token.parent.name === token) {
                                 return 14 /* moduleName */;
                             }
                             return;
-                        case 161 /* Parameter */:
+                        case 162 /* Parameter */:
                             if (token.parent.name === token) {
                                 return ts.isThisIdentifier(token) ? 3 /* keyword */ : 17 /* parameterName */;
                             }
@@ -122798,13 +125472,13 @@
                 var inJSXElement = false;
                 function visit(node) {
                     switch (node.kind) {
-                        case 257 /* ModuleDeclaration */:
-                        case 253 /* ClassDeclaration */:
-                        case 254 /* InterfaceDeclaration */:
-                        case 252 /* FunctionDeclaration */:
-                        case 222 /* ClassExpression */:
-                        case 209 /* FunctionExpression */:
-                        case 210 /* ArrowFunction */:
+                        case 259 /* ModuleDeclaration */:
+                        case 255 /* ClassDeclaration */:
+                        case 256 /* InterfaceDeclaration */:
+                        case 254 /* FunctionDeclaration */:
+                        case 224 /* ClassExpression */:
+                        case 211 /* FunctionExpression */:
+                        case 212 /* ArrowFunction */:
                             cancellationToken.throwIfCancellationRequested();
                     }
                     if (!node || !ts.textSpanIntersectsWith(span, node.pos, node.getFullWidth()) || node.getFullWidth() === 0) {
@@ -122817,7 +125491,7 @@
                     if (ts.isJsxExpression(node)) {
                         inJSXElement = false;
                     }
-                    if (ts.isIdentifier(node) && !inJSXElement && !inImportClause(node)) {
+                    if (ts.isIdentifier(node) && !inJSXElement && !inImportClause(node) && !ts.isInfinityOrNaNString(node.escapedText)) {
                         var symbol = typeChecker.getSymbolAtLocation(node);
                         if (symbol) {
                             if (symbol.flags & 2097152 /* Alias */) {
@@ -122950,25 +125624,25 @@
                 return (ts.isQualifiedName(node.parent) && node.parent.right === node) || (ts.isPropertyAccessExpression(node.parent) && node.parent.name === node);
             }
             var tokenFromDeclarationMapping = new ts.Map([
-                [250 /* VariableDeclaration */, 7 /* variable */],
-                [161 /* Parameter */, 6 /* parameter */],
-                [164 /* PropertyDeclaration */, 9 /* property */],
-                [257 /* ModuleDeclaration */, 3 /* namespace */],
-                [256 /* EnumDeclaration */, 1 /* enum */],
-                [292 /* EnumMember */, 8 /* enumMember */],
-                [253 /* ClassDeclaration */, 0 /* class */],
-                [166 /* MethodDeclaration */, 11 /* member */],
-                [252 /* FunctionDeclaration */, 10 /* function */],
-                [209 /* FunctionExpression */, 10 /* function */],
-                [165 /* MethodSignature */, 11 /* member */],
-                [168 /* GetAccessor */, 9 /* property */],
-                [169 /* SetAccessor */, 9 /* property */],
-                [163 /* PropertySignature */, 9 /* property */],
-                [254 /* InterfaceDeclaration */, 2 /* interface */],
-                [255 /* TypeAliasDeclaration */, 5 /* type */],
-                [160 /* TypeParameter */, 4 /* typeParameter */],
-                [289 /* PropertyAssignment */, 9 /* property */],
-                [290 /* ShorthandPropertyAssignment */, 9 /* property */]
+                [252 /* VariableDeclaration */, 7 /* variable */],
+                [162 /* Parameter */, 6 /* parameter */],
+                [165 /* PropertyDeclaration */, 9 /* property */],
+                [259 /* ModuleDeclaration */, 3 /* namespace */],
+                [258 /* EnumDeclaration */, 1 /* enum */],
+                [294 /* EnumMember */, 8 /* enumMember */],
+                [255 /* ClassDeclaration */, 0 /* class */],
+                [167 /* MethodDeclaration */, 11 /* member */],
+                [254 /* FunctionDeclaration */, 10 /* function */],
+                [211 /* FunctionExpression */, 10 /* function */],
+                [166 /* MethodSignature */, 11 /* member */],
+                [170 /* GetAccessor */, 9 /* property */],
+                [171 /* SetAccessor */, 9 /* property */],
+                [164 /* PropertySignature */, 9 /* property */],
+                [256 /* InterfaceDeclaration */, 2 /* interface */],
+                [257 /* TypeAliasDeclaration */, 5 /* type */],
+                [161 /* TypeParameter */, 4 /* typeParameter */],
+                [291 /* PropertyAssignment */, 9 /* property */],
+                [292 /* ShorthandPropertyAssignment */, 9 /* property */]
             ]);
         })(v2020 = classifier.v2020 || (classifier.v2020 = {}));
     })(classifier = ts.classifier || (ts.classifier = {}));
@@ -123075,10 +125749,10 @@
             function getStringLiteralCompletionEntries(sourceFile, node, position, typeChecker, compilerOptions, host, preferences) {
                 var parent = walkUpParentheses(node.parent);
                 switch (parent.kind) {
-                    case 192 /* LiteralType */: {
+                    case 194 /* LiteralType */: {
                         var grandParent = walkUpParentheses(parent.parent);
                         switch (grandParent.kind) {
-                            case 174 /* TypeReference */: {
+                            case 176 /* TypeReference */: {
                                 var typeReference_1 = grandParent;
                                 var typeArgument = ts.findAncestor(parent, function (n) { return n.parent === typeReference_1; });
                                 if (typeArgument) {
@@ -123086,7 +125760,7 @@
                                 }
                                 return undefined;
                             }
-                            case 190 /* IndexedAccessType */:
+                            case 192 /* IndexedAccessType */:
                                 // Get all apparent property names
                                 // i.e. interface Foo {
                                 //          foo: string;
@@ -123098,9 +125772,9 @@
                                     return undefined;
                                 }
                                 return stringLiteralCompletionsFromProperties(typeChecker.getTypeFromTypeNode(objectType));
-                            case 196 /* ImportType */:
+                            case 198 /* ImportType */:
                                 return { kind: 0 /* Paths */, paths: getStringLiteralCompletionsFromModuleNames(sourceFile, node, compilerOptions, host, typeChecker, preferences) };
-                            case 183 /* UnionType */: {
+                            case 185 /* UnionType */: {
                                 if (!ts.isTypeReferenceNode(grandParent.parent)) {
                                     return undefined;
                                 }
@@ -123112,7 +125786,7 @@
                                 return undefined;
                         }
                     }
-                    case 289 /* PropertyAssignment */:
+                    case 291 /* PropertyAssignment */:
                         if (ts.isObjectLiteralExpression(parent.parent) && parent.name === node) {
                             // Get quoted name of properties of the object literal expression
                             // i.e. interface ConfigFiles {
@@ -123129,7 +125803,7 @@
                             return stringLiteralCompletionsForObjectLiteral(typeChecker, parent.parent);
                         }
                         return fromContextualType();
-                    case 203 /* ElementAccessExpression */: {
+                    case 205 /* ElementAccessExpression */: {
                         var _b = parent, expression = _b.expression, argumentExpression = _b.argumentExpression;
                         if (node === ts.skipParentheses(argumentExpression)) {
                             // Get all names of properties on the expression
@@ -123142,19 +125816,19 @@
                         }
                         return undefined;
                     }
-                    case 204 /* CallExpression */:
-                    case 205 /* NewExpression */:
-                        if (!ts.isRequireCall(parent, /*checkArgumentIsStringLiteralLike*/ false) && !ts.isImportCall(parent)) {
+                    case 206 /* CallExpression */:
+                    case 207 /* NewExpression */:
+                        if (!isRequireCallArgument(node) && !ts.isImportCall(parent)) {
                             var argumentInfo = ts.SignatureHelp.getArgumentInfoForCompletions(node, position, sourceFile);
                             // Get string literal completions from specialized signatures of the target
                             // i.e. declare function f(a: 'A');
                             // f("/*completion position*/")
                             return argumentInfo ? getStringLiteralCompletionsFromSignature(argumentInfo, typeChecker) : fromContextualType();
                         }
-                    // falls through (is `require("")` or `import("")`)
-                    case 262 /* ImportDeclaration */:
-                    case 268 /* ExportDeclaration */:
-                    case 273 /* ExternalModuleReference */:
+                    // falls through (is `require("")` or `require(""` or `import("")`)
+                    case 264 /* ImportDeclaration */:
+                    case 270 /* ExportDeclaration */:
+                    case 275 /* ExternalModuleReference */:
                         // Get all known external module names or complete a path to a module
                         // i.e. import * as ns from "/*completion position*/";
                         //      var y = import("/*completion position*/");
@@ -123173,9 +125847,9 @@
             }
             function walkUpParentheses(node) {
                 switch (node.kind) {
-                    case 187 /* ParenthesizedType */:
+                    case 189 /* ParenthesizedType */:
                         return ts.walkUpParenthesizedTypes(node);
-                    case 208 /* ParenthesizedExpression */:
+                    case 210 /* ParenthesizedExpression */:
                         return ts.walkUpParenthesizedExpressions(node);
                     default:
                         return node;
@@ -123252,12 +125926,13 @@
                     ? getCompletionEntriesForRelativeModules(literalValue, scriptDirectory, compilerOptions, host, scriptPath, preferences)
                     : getCompletionEntriesForNonRelativeModules(literalValue, scriptDirectory, compilerOptions, host, typeChecker);
             }
-            function getExtensionOptions(compilerOptions, includeExtensions) {
-                if (includeExtensions === void 0) { includeExtensions = false; }
-                return { extensions: getSupportedExtensionsForModuleResolution(compilerOptions), includeExtensions: includeExtensions };
+            function getExtensionOptions(compilerOptions, includeExtensionsOption) {
+                if (includeExtensionsOption === void 0) { includeExtensionsOption = 0 /* Exclude */; }
+                return { extensions: getSupportedExtensionsForModuleResolution(compilerOptions), includeExtensionsOption: includeExtensionsOption };
             }
             function getCompletionEntriesForRelativeModules(literalValue, scriptDirectory, compilerOptions, host, scriptPath, preferences) {
-                var extensionOptions = getExtensionOptions(compilerOptions, preferences.importModuleSpecifierEnding === "js");
+                var includeExtensions = preferences.importModuleSpecifierEnding === "js" ? 2 /* ModuleSpecifierCompletion */ : 0 /* Exclude */;
+                var extensionOptions = getExtensionOptions(compilerOptions, includeExtensions);
                 if (compilerOptions.rootDirs) {
                     return getCompletionEntriesForDirectoryFragmentWithRootDirs(compilerOptions.rootDirs, literalValue, scriptDirectory, extensionOptions, compilerOptions, host, scriptPath);
                 }
@@ -123283,7 +125958,7 @@
                     return ts.containsPath(rootDirectory, scriptDirectory, basePath, ignoreCase) ? scriptDirectory.substr(rootDirectory.length) : undefined;
                 }); // TODO: GH#18217
                 // Now find a path for each potential directory that is to be merged with the one containing the script
-                return ts.deduplicate(__spreadArray(__spreadArray([], rootDirs.map(function (rootDirectory) { return ts.combinePaths(rootDirectory, relativeDirectory); })), [scriptDirectory]), ts.equateStringsCaseSensitive, ts.compareStringsCaseSensitive);
+                return ts.deduplicate(__spreadArray(__spreadArray([], rootDirs.map(function (rootDirectory) { return ts.combinePaths(rootDirectory, relativeDirectory); }), true), [scriptDirectory], false), ts.equateStringsCaseSensitive, ts.compareStringsCaseSensitive);
             }
             function getCompletionEntriesForDirectoryFragmentWithRootDirs(rootDirs, fragment, scriptDirectory, extensionOptions, compilerOptions, host, exclude) {
                 var basePath = compilerOptions.project || host.getCurrentDirectory();
@@ -123291,11 +125966,17 @@
                 var baseDirectories = getBaseDirectoriesFromRootDirs(rootDirs, basePath, scriptDirectory, ignoreCase);
                 return ts.flatMap(baseDirectories, function (baseDirectory) { return getCompletionEntriesForDirectoryFragment(fragment, baseDirectory, extensionOptions, host, exclude); });
             }
+            var IncludeExtensionsOption;
+            (function (IncludeExtensionsOption) {
+                IncludeExtensionsOption[IncludeExtensionsOption["Exclude"] = 0] = "Exclude";
+                IncludeExtensionsOption[IncludeExtensionsOption["Include"] = 1] = "Include";
+                IncludeExtensionsOption[IncludeExtensionsOption["ModuleSpecifierCompletion"] = 2] = "ModuleSpecifierCompletion";
+            })(IncludeExtensionsOption || (IncludeExtensionsOption = {}));
             /**
              * Given a path ending at a directory, gets the completions for the path, and filters for those entries containing the basename.
              */
             function getCompletionEntriesForDirectoryFragment(fragment, scriptPath, _a, host, exclude, result) {
-                var extensions = _a.extensions, includeExtensions = _a.includeExtensions;
+                var extensions = _a.extensions, includeExtensionsOption = _a.includeExtensionsOption;
                 if (result === void 0) { result = []; }
                 if (fragment === undefined) {
                     fragment = "";
@@ -123323,7 +126004,7 @@
                 if (files) {
                     /**
                      * Multiple file entries might map to the same truncated name once we remove extensions
-                     * (happens iff includeExtensions === false)so we use a set-like data structure. Eg:
+                     * (happens iff includeExtensionsOption === includeExtensionsOption.Exclude) so we use a set-like data structure. Eg:
                      *
                      * both foo.ts and foo.tsx become foo
                      */
@@ -123334,8 +126015,20 @@
                         if (exclude && ts.comparePaths(filePath, exclude, scriptPath, ignoreCase) === 0 /* EqualTo */) {
                             continue;
                         }
-                        var foundFileName = includeExtensions || ts.fileExtensionIs(filePath, ".json" /* Json */) ? ts.getBaseFileName(filePath) : ts.removeFileExtension(ts.getBaseFileName(filePath));
-                        foundFiles.set(foundFileName, ts.tryGetExtensionFromPath(filePath));
+                        var foundFileName = void 0;
+                        var outputExtension = ts.moduleSpecifiers.tryGetJSExtensionForFile(filePath, host.getCompilationSettings());
+                        if (includeExtensionsOption === 0 /* Exclude */ && !ts.fileExtensionIs(filePath, ".json" /* Json */)) {
+                            foundFileName = ts.removeFileExtension(ts.getBaseFileName(filePath));
+                            foundFiles.set(foundFileName, ts.tryGetExtensionFromPath(filePath));
+                        }
+                        else if (includeExtensionsOption === 2 /* ModuleSpecifierCompletion */ && outputExtension) {
+                            foundFileName = ts.changeExtension(ts.getBaseFileName(filePath), outputExtension);
+                            foundFiles.set(foundFileName, outputExtension);
+                        }
+                        else {
+                            foundFileName = ts.getBaseFileName(filePath);
+                            foundFiles.set(foundFileName, ts.tryGetExtensionFromPath(filePath));
+                        }
                     }
                     foundFiles.forEach(function (ext, foundFile) {
                         result.push(nameAndKind(foundFile, "script" /* scriptElement */, ext));
@@ -123460,8 +126153,8 @@
                 if (!host.readDirectory) {
                     return undefined;
                 }
-                var parsed = ts.hasZeroOrOneAsteriskCharacter(pattern) ? ts.tryParsePattern(pattern) : undefined;
-                if (!parsed) {
+                var parsed = ts.tryParsePattern(pattern);
+                if (parsed === undefined || ts.isString(parsed)) {
                     return undefined;
                 }
                 // The prefix has two effective parts: the directory path and the base component after the filepath that is not a
@@ -123490,7 +126183,7 @@
                     var name = trimPrefixAndSuffix(dir);
                     return name === undefined ? undefined : directoryResult(name);
                 });
-                return __spreadArray(__spreadArray([], matches), directories);
+                return __spreadArray(__spreadArray([], matches, true), directories, true);
                 function trimPrefixAndSuffix(path) {
                     var inner = withoutStartAndEnd(ts.normalizePath(path), completePrefix, normalizedSuffix);
                     return inner === undefined ? undefined : removeLeadingDirectorySeparator(inner);
@@ -123529,7 +126222,7 @@
                 }
                 var prefix = match[1], kind = match[2], toComplete = match[3];
                 var scriptPath = ts.getDirectoryPath(sourceFile.path);
-                var names = kind === "path" ? getCompletionEntriesForDirectoryFragment(toComplete, scriptPath, getExtensionOptions(compilerOptions, /*includeExtensions*/ true), host, sourceFile.path)
+                var names = kind === "path" ? getCompletionEntriesForDirectoryFragment(toComplete, scriptPath, getExtensionOptions(compilerOptions, 1 /* Include */), host, sourceFile.path)
                     : kind === "types" ? getCompletionEntriesFromTypings(host, compilerOptions, scriptPath, getFragmentDirectory(toComplete), getExtensionOptions(compilerOptions))
                         : ts.Debug.fail();
                 return addReplacementSpans(toComplete, range.pos + prefix.length, names);
@@ -123630,6 +126323,15 @@
             function containsSlash(fragment) {
                 return ts.stringContains(fragment, ts.directorySeparator);
             }
+            /**
+             * Matches
+             *   require(""
+             *   require("")
+             */
+            function isRequireCallArgument(node) {
+                return ts.isCallExpression(node.parent) && ts.firstOrUndefined(node.parent.arguments) === node
+                    && ts.isIdentifier(node.parent.expression) && node.parent.expression.escapedText === "require";
+            }
         })(StringCompletions = Completions.StringCompletions || (Completions.StringCompletions = {}));
     })(Completions = ts.Completions || (ts.Completions = {}));
 })(ts || (ts = {}));
@@ -123638,17 +126340,45 @@
 (function (ts) {
     var Completions;
     (function (Completions) {
+        // Exported only for tests
+        Completions.moduleSpecifierResolutionLimit = 100;
+        Completions.moduleSpecifierResolutionCacheAttemptLimit = 1000;
+        // NOTE: Make sure that each entry has the exact same number of digits
+        //       since many implementations will sort by string contents,
+        //       where "10" is considered less than "2".
         var SortText;
         (function (SortText) {
-            SortText["LocalDeclarationPriority"] = "0";
-            SortText["LocationPriority"] = "1";
-            SortText["OptionalMember"] = "2";
-            SortText["MemberDeclaredBySpreadAssignment"] = "3";
-            SortText["SuggestedClassMembers"] = "4";
-            SortText["GlobalsOrKeywords"] = "5";
-            SortText["AutoImportSuggestions"] = "6";
-            SortText["JavascriptIdentifiers"] = "7";
+            SortText["LocalDeclarationPriority"] = "10";
+            SortText["LocationPriority"] = "11";
+            SortText["OptionalMember"] = "12";
+            SortText["MemberDeclaredBySpreadAssignment"] = "13";
+            SortText["SuggestedClassMembers"] = "14";
+            SortText["GlobalsOrKeywords"] = "15";
+            SortText["AutoImportSuggestions"] = "16";
+            SortText["JavascriptIdentifiers"] = "17";
+            SortText["DeprecatedLocalDeclarationPriority"] = "18";
+            SortText["DeprecatedLocationPriority"] = "19";
+            SortText["DeprecatedOptionalMember"] = "20";
+            SortText["DeprecatedMemberDeclaredBySpreadAssignment"] = "21";
+            SortText["DeprecatedSuggestedClassMembers"] = "22";
+            SortText["DeprecatedGlobalsOrKeywords"] = "23";
+            SortText["DeprecatedAutoImportSuggestions"] = "24";
         })(SortText = Completions.SortText || (Completions.SortText = {}));
+        var SortTextId;
+        (function (SortTextId) {
+            SortTextId[SortTextId["LocalDeclarationPriority"] = 10] = "LocalDeclarationPriority";
+            SortTextId[SortTextId["LocationPriority"] = 11] = "LocationPriority";
+            SortTextId[SortTextId["OptionalMember"] = 12] = "OptionalMember";
+            SortTextId[SortTextId["MemberDeclaredBySpreadAssignment"] = 13] = "MemberDeclaredBySpreadAssignment";
+            SortTextId[SortTextId["SuggestedClassMembers"] = 14] = "SuggestedClassMembers";
+            SortTextId[SortTextId["GlobalsOrKeywords"] = 15] = "GlobalsOrKeywords";
+            SortTextId[SortTextId["AutoImportSuggestions"] = 16] = "AutoImportSuggestions";
+            // Don't use these directly.
+            SortTextId[SortTextId["_JavaScriptIdentifiers"] = 17] = "_JavaScriptIdentifiers";
+            SortTextId[SortTextId["_DeprecatedStart"] = 18] = "_DeprecatedStart";
+            SortTextId[SortTextId["_First"] = 10] = "_First";
+            SortTextId[SortTextId["DeprecatedOffset"] = 8] = "DeprecatedOffset";
+        })(SortTextId || (SortTextId = {}));
         /**
          * Special values for `CompletionInfo['source']` used to disambiguate
          * completion items with the same `name`. (Each completion item must
@@ -123718,11 +126448,48 @@
             GlobalsSearch[GlobalsSearch["Success"] = 1] = "Success";
             GlobalsSearch[GlobalsSearch["Fail"] = 2] = "Fail";
         })(GlobalsSearch || (GlobalsSearch = {}));
-        function getCompletionsAtPosition(host, program, log, sourceFile, position, preferences, triggerCharacter) {
-            var typeChecker = program.getTypeChecker();
-            var compilerOptions = program.getCompilerOptions();
-            var contextToken = ts.findPrecedingToken(position, sourceFile);
-            if (triggerCharacter && !ts.isInString(sourceFile, position, contextToken) && !isValidTrigger(sourceFile, triggerCharacter, contextToken, position)) {
+        function resolvingModuleSpecifiers(logPrefix, host, program, sourceFile, preferences, isForImportStatementCompletion, cb) {
+            var _a, _b, _c;
+            var start = ts.timestamp();
+            var resolutionLimitExceeded = false;
+            var ambientCount = 0;
+            var resolvedCount = 0;
+            var resolvedFromCacheCount = 0;
+            var cacheAttemptCount = 0;
+            var result = cb({ tryResolve: tryResolve, resolutionLimitExceeded: function () { return resolutionLimitExceeded; } });
+            var hitRateMessage = cacheAttemptCount ? " (" + (resolvedFromCacheCount / cacheAttemptCount * 100).toFixed(1) + "% hit rate)" : "";
+            (_a = host.log) === null || _a === void 0 ? void 0 : _a.call(host, logPrefix + ": resolved " + resolvedCount + " module specifiers, plus " + ambientCount + " ambient and " + resolvedFromCacheCount + " from cache" + hitRateMessage);
+            (_b = host.log) === null || _b === void 0 ? void 0 : _b.call(host, logPrefix + ": response is " + (resolutionLimitExceeded ? "incomplete" : "complete"));
+            (_c = host.log) === null || _c === void 0 ? void 0 : _c.call(host, logPrefix + ": " + (ts.timestamp() - start));
+            return result;
+            function tryResolve(exportInfo, isFromAmbientModule) {
+                if (isFromAmbientModule) {
+                    var result_1 = ts.codefix.getModuleSpecifierForBestExportInfo(exportInfo, sourceFile, program, host, preferences);
+                    if (result_1) {
+                        ambientCount++;
+                    }
+                    return result_1;
+                }
+                var shouldResolveModuleSpecifier = isForImportStatementCompletion || preferences.allowIncompleteCompletions && resolvedCount < Completions.moduleSpecifierResolutionLimit;
+                var shouldGetModuleSpecifierFromCache = !shouldResolveModuleSpecifier && preferences.allowIncompleteCompletions && cacheAttemptCount < Completions.moduleSpecifierResolutionCacheAttemptLimit;
+                var result = (shouldResolveModuleSpecifier || shouldGetModuleSpecifierFromCache)
+                    ? ts.codefix.getModuleSpecifierForBestExportInfo(exportInfo, sourceFile, program, host, preferences, shouldGetModuleSpecifierFromCache)
+                    : undefined;
+                if (!shouldResolveModuleSpecifier && !shouldGetModuleSpecifierFromCache || shouldGetModuleSpecifierFromCache && !result) {
+                    resolutionLimitExceeded = true;
+                }
+                resolvedCount += (result === null || result === void 0 ? void 0 : result.computedWithoutCacheCount) || 0;
+                resolvedFromCacheCount += exportInfo.length - resolvedCount;
+                if (shouldGetModuleSpecifierFromCache) {
+                    cacheAttemptCount++;
+                }
+                return result;
+            }
+        }
+        function getCompletionsAtPosition(host, program, log, sourceFile, position, preferences, triggerCharacter, completionKind, cancellationToken) {
+            var _a;
+            var previousToken = getRelevantTokens(position, sourceFile).previousToken;
+            if (triggerCharacter && !ts.isInString(sourceFile, position, previousToken) && !isValidTrigger(sourceFile, triggerCharacter, previousToken, position)) {
                 return undefined;
             }
             if (triggerCharacter === " ") {
@@ -123732,21 +126499,39 @@
                 }
                 return undefined;
             }
-            var stringCompletions = Completions.StringCompletions.getStringLiteralCompletions(sourceFile, position, contextToken, typeChecker, compilerOptions, host, log, preferences);
+            // If the request is a continuation of an earlier `isIncomplete` response,
+            // we can continue it from the cached previous response.
+            var typeChecker = program.getTypeChecker();
+            var compilerOptions = program.getCompilerOptions();
+            var incompleteCompletionsCache = preferences.allowIncompleteCompletions ? (_a = host.getIncompleteCompletionsCache) === null || _a === void 0 ? void 0 : _a.call(host) : undefined;
+            if (incompleteCompletionsCache && completionKind === 3 /* TriggerForIncompleteCompletions */ && previousToken && ts.isIdentifier(previousToken)) {
+                var incompleteContinuation = continuePreviousIncompleteResponse(incompleteCompletionsCache, sourceFile, previousToken, program, host, preferences, cancellationToken);
+                if (incompleteContinuation) {
+                    return incompleteContinuation;
+                }
+            }
+            else {
+                incompleteCompletionsCache === null || incompleteCompletionsCache === void 0 ? void 0 : incompleteCompletionsCache.clear();
+            }
+            var stringCompletions = Completions.StringCompletions.getStringLiteralCompletions(sourceFile, position, previousToken, typeChecker, compilerOptions, host, log, preferences);
             if (stringCompletions) {
                 return stringCompletions;
             }
-            if (contextToken && ts.isBreakOrContinueStatement(contextToken.parent)
-                && (contextToken.kind === 80 /* BreakKeyword */ || contextToken.kind === 85 /* ContinueKeyword */ || contextToken.kind === 78 /* Identifier */)) {
-                return getLabelCompletionAtPosition(contextToken.parent);
+            if (previousToken && ts.isBreakOrContinueStatement(previousToken.parent)
+                && (previousToken.kind === 81 /* BreakKeyword */ || previousToken.kind === 86 /* ContinueKeyword */ || previousToken.kind === 79 /* Identifier */)) {
+                return getLabelCompletionAtPosition(previousToken.parent);
             }
-            var completionData = getCompletionData(program, log, sourceFile, isUncheckedFile(sourceFile, compilerOptions), position, preferences, /*detailsEntryId*/ undefined, host);
+            var completionData = getCompletionData(program, log, sourceFile, isUncheckedFile(sourceFile, compilerOptions), position, preferences, /*detailsEntryId*/ undefined, host, cancellationToken);
             if (!completionData) {
                 return undefined;
             }
             switch (completionData.kind) {
                 case 0 /* Data */:
-                    return completionInfoFromData(sourceFile, typeChecker, compilerOptions, log, completionData, preferences);
+                    var response = completionInfoFromData(sourceFile, typeChecker, compilerOptions, log, completionData, preferences);
+                    if (response === null || response === void 0 ? void 0 : response.isIncomplete) {
+                        incompleteCompletionsCache === null || incompleteCompletionsCache === void 0 ? void 0 : incompleteCompletionsCache.set(response);
+                    }
+                    return response;
                 case 1 /* JsDocTagName */:
                     // If the current position is a jsDoc tag name, only tag names should be provided for completion
                     return jsdocCompletionInfo(ts.JsDoc.getJSDocTagNameCompletions());
@@ -123762,6 +126547,48 @@
             }
         }
         Completions.getCompletionsAtPosition = getCompletionsAtPosition;
+        function continuePreviousIncompleteResponse(cache, file, location, program, host, preferences, cancellationToken) {
+            var _a;
+            var previousResponse = cache.get();
+            if (!previousResponse)
+                return undefined;
+            var lowerCaseTokenText = location.text.toLowerCase();
+            var exportMap = ts.getExportInfoMap(file, host, program, cancellationToken);
+            var checker = program.getTypeChecker();
+            var autoImportProvider = (_a = host.getPackageJsonAutoImportProvider) === null || _a === void 0 ? void 0 : _a.call(host);
+            var autoImportProviderChecker = autoImportProvider === null || autoImportProvider === void 0 ? void 0 : autoImportProvider.getTypeChecker();
+            var newEntries = resolvingModuleSpecifiers("continuePreviousIncompleteResponse", host, program, file, preferences, 
+            /*isForImportStatementCompletion*/ false, function (context) {
+                var entries = ts.mapDefined(previousResponse.entries, function (entry) {
+                    if (!entry.hasAction || !entry.source || !entry.data || entry.data.moduleSpecifier) {
+                        // Not an auto import or already resolved; keep as is
+                        return entry;
+                    }
+                    if (!charactersFuzzyMatchInString(entry.name, lowerCaseTokenText)) {
+                        // No longer matches typed characters; filter out
+                        return undefined;
+                    }
+                    var _a = ts.Debug.checkDefined(getAutoImportSymbolFromCompletionEntryData(entry.name, entry.data, program, host)), symbol = _a.symbol, origin = _a.origin;
+                    var info = exportMap.get(file.path, entry.name, symbol, origin.moduleSymbol.name, origin.isFromPackageJson ? autoImportProviderChecker : checker);
+                    var result = info && context.tryResolve(info, !ts.isExternalModuleNameRelative(ts.stripQuotes(origin.moduleSymbol.name)));
+                    if (!result)
+                        return entry;
+                    var newOrigin = __assign(__assign({}, origin), { kind: 32 /* ResolvedExport */, moduleSpecifier: result.moduleSpecifier });
+                    // Mutating for performance... feels sketchy but nobody else uses the cache,
+                    // so why bother allocating a bunch of new objects?
+                    entry.data = originToCompletionEntryData(newOrigin);
+                    entry.source = getSourceFromOrigin(newOrigin);
+                    entry.sourceDisplay = [ts.textPart(newOrigin.moduleSpecifier)];
+                    return entry;
+                });
+                if (!context.resolutionLimitExceeded()) {
+                    previousResponse.isIncomplete = undefined;
+                }
+                return entries;
+            });
+            previousResponse.entries = newEntries;
+            return previousResponse;
+        }
         function jsdocCompletionInfo(entries) {
             return { isGlobalCompletion: false, isMemberCompletion: false, isNewIdentifierLocation: false, entries: entries };
         }
@@ -123780,10 +126607,10 @@
         }
         function getOptionalReplacementSpan(location) {
             // StringLiteralLike locations are handled separately in stringCompletions.ts
-            return (location === null || location === void 0 ? void 0 : location.kind) === 78 /* Identifier */ ? ts.createTextSpanFromNode(location) : undefined;
+            return (location === null || location === void 0 ? void 0 : location.kind) === 79 /* Identifier */ ? ts.createTextSpanFromNode(location) : undefined;
         }
         function completionInfoFromData(sourceFile, typeChecker, compilerOptions, log, completionData, preferences) {
-            var symbols = completionData.symbols, completionKind = completionData.completionKind, isInSnippetScope = completionData.isInSnippetScope, isNewIdentifierLocation = completionData.isNewIdentifierLocation, location = completionData.location, propertyAccessToConvert = completionData.propertyAccessToConvert, keywordFilters = completionData.keywordFilters, literals = completionData.literals, symbolToOriginInfoMap = completionData.symbolToOriginInfoMap, recommendedCompletion = completionData.recommendedCompletion, isJsxInitializer = completionData.isJsxInitializer, isTypeOnlyLocation = completionData.isTypeOnlyLocation, isJsxIdentifierExpected = completionData.isJsxIdentifierExpected, importCompletionNode = completionData.importCompletionNode, insideJsDocTagTypeExpression = completionData.insideJsDocTagTypeExpression, symbolToSortTextMap = completionData.symbolToSortTextMap;
+            var symbols = completionData.symbols, completionKind = completionData.completionKind, isInSnippetScope = completionData.isInSnippetScope, isNewIdentifierLocation = completionData.isNewIdentifierLocation, location = completionData.location, propertyAccessToConvert = completionData.propertyAccessToConvert, keywordFilters = completionData.keywordFilters, literals = completionData.literals, symbolToOriginInfoMap = completionData.symbolToOriginInfoMap, recommendedCompletion = completionData.recommendedCompletion, isJsxInitializer = completionData.isJsxInitializer, isTypeOnlyLocation = completionData.isTypeOnlyLocation, isJsxIdentifierExpected = completionData.isJsxIdentifierExpected, importCompletionNode = completionData.importCompletionNode, insideJsDocTagTypeExpression = completionData.insideJsDocTagTypeExpression, symbolToSortTextIdMap = completionData.symbolToSortTextIdMap, hasUnresolvedAutoImports = completionData.hasUnresolvedAutoImports;
             // Verify if the file is JSX language variant
             if (ts.getLanguageVariant(sourceFile.scriptKind) === 1 /* JSX */) {
                 var completionInfo = getJsxClosingTagCompletion(location, sourceFile);
@@ -123794,7 +126621,7 @@
             var entries = [];
             if (isUncheckedFile(sourceFile, compilerOptions)) {
                 var uniqueNames = getCompletionEntriesFromSymbols(symbols, entries, 
-                /* contextToken */ undefined, location, sourceFile, typeChecker, compilerOptions.target, log, completionKind, preferences, compilerOptions, isTypeOnlyLocation, propertyAccessToConvert, isJsxIdentifierExpected, isJsxInitializer, importCompletionNode, recommendedCompletion, symbolToOriginInfoMap, symbolToSortTextMap);
+                /* contextToken */ undefined, location, sourceFile, typeChecker, compilerOptions.target, log, completionKind, preferences, compilerOptions, isTypeOnlyLocation, propertyAccessToConvert, isJsxIdentifierExpected, isJsxInitializer, importCompletionNode, recommendedCompletion, symbolToOriginInfoMap, symbolToSortTextIdMap);
                 getJSCompletionEntries(sourceFile, location.pos, uniqueNames, compilerOptions.target, entries); // TODO: GH#18217
             }
             else {
@@ -123802,7 +126629,7 @@
                     return undefined;
                 }
                 getCompletionEntriesFromSymbols(symbols, entries, 
-                /* contextToken */ undefined, location, sourceFile, typeChecker, compilerOptions.target, log, completionKind, preferences, compilerOptions, isTypeOnlyLocation, propertyAccessToConvert, isJsxIdentifierExpected, isJsxInitializer, importCompletionNode, recommendedCompletion, symbolToOriginInfoMap, symbolToSortTextMap);
+                /* contextToken */ undefined, location, sourceFile, typeChecker, compilerOptions.target, log, completionKind, preferences, compilerOptions, isTypeOnlyLocation, propertyAccessToConvert, isJsxIdentifierExpected, isJsxInitializer, importCompletionNode, recommendedCompletion, symbolToOriginInfoMap, symbolToSortTextIdMap);
             }
             if (keywordFilters !== 0 /* None */) {
                 var entryNames = new ts.Set(entries.map(function (e) { return e.name; }));
@@ -123819,6 +126646,7 @@
             }
             return {
                 isGlobalCompletion: isInSnippetScope,
+                isIncomplete: preferences.allowIncompleteCompletions && hasUnresolvedAutoImports ? true : undefined,
                 isMemberCompletion: isMemberCompletionKind(completionKind),
                 isNewIdentifierLocation: isNewIdentifierLocation,
                 optionalReplacementSpan: getOptionalReplacementSpan(location),
@@ -123842,12 +126670,12 @@
             // We wanna walk up the tree till we find a JSX closing element
             var jsxClosingElement = ts.findAncestor(location, function (node) {
                 switch (node.kind) {
-                    case 277 /* JsxClosingElement */:
+                    case 279 /* JsxClosingElement */:
                         return true;
                     case 43 /* SlashToken */:
                     case 31 /* GreaterThanToken */:
-                    case 78 /* Identifier */:
-                    case 202 /* PropertyAccessExpression */:
+                    case 79 /* Identifier */:
+                    case 204 /* PropertyAccessExpression */:
                         return false;
                     default:
                         return "quit";
@@ -123914,6 +126742,7 @@
             var data;
             var isSnippet;
             var sourceDisplay;
+            var hasAction;
             var insertQuestionDot = origin && originIsNullableMember(origin);
             var useBraces = origin && originIsSymbolMember(origin) || needsConvertPropertyAccess;
             if (origin && originIsThisType(origin)) {
@@ -123958,22 +126787,18 @@
                 replacementSpan = ts.createTextSpanFromBounds(propertyAccessToConvert.getStart(sourceFile), propertyAccessToConvert.end);
             }
             if (originIsResolvedExport(origin)) {
-                ts.Debug.assertIsDefined(importCompletionNode);
-                (_a = getInsertTextAndReplacementSpanForImportCompletion(name, importCompletionNode, origin, useSemicolons, options, preferences), insertText = _a.insertText, replacementSpan = _a.replacementSpan);
                 sourceDisplay = [ts.textPart(origin.moduleSpecifier)];
-                isSnippet = preferences.includeCompletionsWithSnippetText ? true : undefined;
+                if (importCompletionNode) {
+                    (_a = getInsertTextAndReplacementSpanForImportCompletion(name, importCompletionNode, origin, useSemicolons, options, preferences), insertText = _a.insertText, replacementSpan = _a.replacementSpan);
+                    isSnippet = preferences.includeCompletionsWithSnippetText ? true : undefined;
+                }
             }
             if (insertText !== undefined && !preferences.includeCompletionsWithInsertText) {
                 return undefined;
             }
             if (originIsExport(origin) || originIsResolvedExport(origin)) {
-                data = {
-                    exportName: origin.exportName,
-                    fileName: origin.fileName,
-                    ambientModuleName: origin.fileName ? undefined : ts.stripQuotes(origin.moduleSymbol.name),
-                    isPackageJsonImport: origin.isFromPackageJson ? true : undefined,
-                    moduleSpecifier: originIsResolvedExport(origin) ? origin.moduleSpecifier : undefined,
-                };
+                data = originToCompletionEntryData(origin);
+                hasAction = !importCompletionNode;
             }
             // TODO(drosen): Right now we just permit *all* semantic meanings when calling
             // 'getSymbolKind' which is permissible given that it is backwards compatible; but
@@ -123988,17 +126813,26 @@
                 kindModifiers: ts.SymbolDisplay.getSymbolModifiers(typeChecker, symbol),
                 sortText: sortText,
                 source: getSourceFromOrigin(origin),
-                hasAction: origin && originIsExport(origin) || undefined,
+                hasAction: hasAction ? true : undefined,
                 isRecommended: isRecommendedCompletionMatch(symbol, recommendedCompletion, typeChecker) || undefined,
                 insertText: insertText,
                 replacementSpan: replacementSpan,
                 sourceDisplay: sourceDisplay,
                 isSnippet: isSnippet,
                 isPackageJsonImport: originIsPackageJsonImport(origin) || undefined,
-                isImportStatementCompletion: originIsResolvedExport(origin) || undefined,
+                isImportStatementCompletion: !!importCompletionNode || undefined,
                 data: data,
             };
         }
+        function originToCompletionEntryData(origin) {
+            return {
+                exportName: origin.exportName,
+                fileName: origin.fileName,
+                ambientModuleName: origin.fileName ? undefined : ts.stripQuotes(origin.moduleSymbol.name),
+                isPackageJsonImport: origin.isFromPackageJson ? true : undefined,
+                moduleSpecifier: originIsResolvedExport(origin) ? origin.moduleSpecifier : undefined,
+            };
+        }
         function getInsertTextAndReplacementSpanForImportCompletion(name, importCompletionNode, origin, useSemicolons, options, preferences) {
             var sourceFile = importCompletionNode.getSourceFile();
             var replacementSpan = ts.createTextSpanFromNode(importCompletionNode, sourceFile);
@@ -124007,12 +126841,12 @@
                 origin.exportName === "export=" /* ExportEquals */ ? 2 /* ExportEquals */ :
                     0 /* Named */;
             var tabStop = preferences.includeCompletionsWithSnippetText ? "$1" : "";
-            var importKind = ts.codefix.getImportKind(sourceFile, exportKind, options);
+            var importKind = ts.codefix.getImportKind(sourceFile, exportKind, options, /*forceImportKeyword*/ true);
             var suffix = useSemicolons ? ";" : "";
             switch (importKind) {
                 case 3 /* CommonJS */: return { replacementSpan: replacementSpan, insertText: "import " + name + tabStop + " = require(" + quotedModuleSpecifier + ")" + suffix };
                 case 1 /* Default */: return { replacementSpan: replacementSpan, insertText: "import " + name + tabStop + " from " + quotedModuleSpecifier + suffix };
-                case 2 /* Namespace */: return { replacementSpan: replacementSpan, insertText: "import * as " + name + tabStop + " from " + quotedModuleSpecifier + suffix };
+                case 2 /* Namespace */: return { replacementSpan: replacementSpan, insertText: "import * as " + name + " from " + quotedModuleSpecifier + suffix };
                 case 0 /* Named */: return { replacementSpan: replacementSpan, insertText: "import { " + name + tabStop + " } from " + quotedModuleSpecifier + suffix };
             }
         }
@@ -124037,7 +126871,8 @@
                 return CompletionSource.ThisProperty;
             }
         }
-        function getCompletionEntriesFromSymbols(symbols, entries, contextToken, location, sourceFile, typeChecker, target, log, kind, preferences, compilerOptions, isTypeOnlyLocation, propertyAccessToConvert, jsxIdentifierExpected, isJsxInitializer, importCompletionNode, recommendedCompletion, symbolToOriginInfoMap, symbolToSortTextMap) {
+        function getCompletionEntriesFromSymbols(symbols, entries, contextToken, location, sourceFile, typeChecker, target, log, kind, preferences, compilerOptions, isTypeOnlyLocation, propertyAccessToConvert, jsxIdentifierExpected, isJsxInitializer, importCompletionNode, recommendedCompletion, symbolToOriginInfoMap, symbolToSortTextIdMap) {
+            var _a;
             var start = ts.timestamp();
             var variableDeclaration = getVariableDeclaration(location);
             var useSemicolons = ts.probablyUsesSemicolons(sourceFile);
@@ -124050,11 +126885,13 @@
                 var symbol = symbols[i];
                 var origin = symbolToOriginInfoMap === null || symbolToOriginInfoMap === void 0 ? void 0 : symbolToOriginInfoMap[i];
                 var info = getCompletionEntryDisplayNameForSymbol(symbol, target, origin, kind, !!jsxIdentifierExpected);
-                if (!info || uniques.get(info.name) || kind === 1 /* Global */ && symbolToSortTextMap && !shouldIncludeSymbol(symbol, symbolToSortTextMap)) {
+                if (!info || uniques.get(info.name) || kind === 1 /* Global */ && symbolToSortTextIdMap && !shouldIncludeSymbol(symbol, symbolToSortTextIdMap)) {
                     continue;
                 }
                 var name = info.name, needsConvertPropertyAccess = info.needsConvertPropertyAccess;
-                var entry = createCompletionEntry(symbol, symbolToSortTextMap && symbolToSortTextMap[ts.getSymbolId(symbol)] || SortText.LocationPriority, contextToken, location, sourceFile, typeChecker, name, needsConvertPropertyAccess, origin, recommendedCompletion, propertyAccessToConvert, isJsxInitializer, importCompletionNode, useSemicolons, compilerOptions, preferences);
+                var sortTextId = (_a = symbolToSortTextIdMap === null || symbolToSortTextIdMap === void 0 ? void 0 : symbolToSortTextIdMap[ts.getSymbolId(symbol)]) !== null && _a !== void 0 ? _a : 11 /* LocationPriority */;
+                var sortText = (isDeprecated(symbol, typeChecker) ? 8 /* DeprecatedOffset */ + sortTextId : sortTextId).toString();
+                var entry = createCompletionEntry(symbol, sortText, contextToken, location, sourceFile, typeChecker, name, needsConvertPropertyAccess, origin, recommendedCompletion, propertyAccessToConvert, isJsxInitializer, importCompletionNode, useSemicolons, compilerOptions, preferences);
                 if (!entry) {
                     continue;
                 }
@@ -124071,7 +126908,7 @@
                 has: function (name) { return uniques.has(name); },
                 add: function (name) { return uniques.set(name, true); },
             };
-            function shouldIncludeSymbol(symbol, symbolToSortTextMap) {
+            function shouldIncludeSymbol(symbol, symbolToSortTextIdMap) {
                 if (!ts.isSourceFile(location)) {
                     // export = /**/ here we want to get all meanings, so any symbol is ok
                     if (ts.isExportAssignment(location.parent)) {
@@ -124092,9 +126929,9 @@
                     // Auto Imports are not available for scripts so this conditional is always false
                     if (!!sourceFile.externalModuleIndicator
                         && !compilerOptions.allowUmdGlobalAccess
-                        && symbolToSortTextMap[ts.getSymbolId(symbol)] === SortText.GlobalsOrKeywords
-                        && (symbolToSortTextMap[ts.getSymbolId(symbolOrigin)] === SortText.AutoImportSuggestions
-                            || symbolToSortTextMap[ts.getSymbolId(symbolOrigin)] === SortText.LocationPriority)) {
+                        && symbolToSortTextIdMap[ts.getSymbolId(symbol)] === 15 /* GlobalsOrKeywords */
+                        && (symbolToSortTextIdMap[ts.getSymbolId(symbolOrigin)] === 16 /* AutoImportSuggestions */
+                            || symbolToSortTextIdMap[ts.getSymbolId(symbolOrigin)] === 11 /* LocationPriority */)) {
                         return false;
                     }
                     // Continue with origin symbol
@@ -124210,7 +127047,7 @@
                 }
                 case "symbol": {
                     var symbol = symbolCompletion.symbol, location = symbolCompletion.location, origin = symbolCompletion.origin, previousToken = symbolCompletion.previousToken;
-                    var _a = getCompletionEntryCodeActionsAndSourceDisplay(origin, symbol, program, typeChecker, host, compilerOptions, sourceFile, position, previousToken, formatContext, preferences, entryId.data), codeActions = _a.codeActions, sourceDisplay = _a.sourceDisplay;
+                    var _a = getCompletionEntryCodeActionsAndSourceDisplay(origin, symbol, program, host, compilerOptions, sourceFile, position, previousToken, formatContext, preferences, entryId.data), codeActions = _a.codeActions, sourceDisplay = _a.sourceDisplay;
                     return createCompletionDetailsForSymbol(symbol, typeChecker, sourceFile, location, cancellationToken, codeActions, sourceDisplay); // TODO: GH#18217
                 }
                 case "literal": {
@@ -124239,16 +127076,22 @@
             return { name: name, kindModifiers: kindModifiers, kind: kind, displayParts: displayParts, documentation: documentation, tags: tags, codeActions: codeActions, source: source, sourceDisplay: source };
         }
         Completions.createCompletionDetails = createCompletionDetails;
-        function getCompletionEntryCodeActionsAndSourceDisplay(origin, symbol, program, checker, host, compilerOptions, sourceFile, position, previousToken, formatContext, preferences, data) {
+        function getCompletionEntryCodeActionsAndSourceDisplay(origin, symbol, program, host, compilerOptions, sourceFile, position, previousToken, formatContext, preferences, data) {
             if (data === null || data === void 0 ? void 0 : data.moduleSpecifier) {
-                return { codeActions: undefined, sourceDisplay: [ts.textPart(data.moduleSpecifier)] };
+                var _a = getRelevantTokens(position, sourceFile), contextToken = _a.contextToken, previousToken_1 = _a.previousToken;
+                if (previousToken_1 && getImportCompletionNode(contextToken || previousToken_1)) {
+                    // Import statement completion: 'import c|'
+                    return { codeActions: undefined, sourceDisplay: [ts.textPart(data.moduleSpecifier)] };
+                }
             }
-            if (!origin || !originIsExport(origin)) {
+            if (!origin || !(originIsExport(origin) || originIsResolvedExport(origin))) {
                 return { codeActions: undefined, sourceDisplay: undefined };
             }
+            var checker = origin.isFromPackageJson ? host.getPackageJsonAutoImportProvider().getTypeChecker() : program.getTypeChecker();
             var moduleSymbol = origin.moduleSymbol;
             var exportedSymbol = checker.getMergedSymbol(ts.skipAlias(symbol.exportSymbol || symbol, checker));
-            var _a = ts.codefix.getImportCompletionAction(exportedSymbol, moduleSymbol, sourceFile, ts.getNameForExportedSymbol(symbol, compilerOptions.target), host, program, formatContext, previousToken && ts.isIdentifier(previousToken) ? previousToken.getStart(sourceFile) : position, preferences), moduleSpecifier = _a.moduleSpecifier, codeAction = _a.codeAction;
+            var _b = ts.codefix.getImportCompletionAction(exportedSymbol, moduleSymbol, sourceFile, ts.getNameForExportedSymbol(symbol, compilerOptions.target), host, program, formatContext, previousToken && ts.isIdentifier(previousToken) ? previousToken.getStart(sourceFile) : position, preferences), moduleSpecifier = _b.moduleSpecifier, codeAction = _b.codeAction;
+            ts.Debug.assert(!(data === null || data === void 0 ? void 0 : data.moduleSpecifier) || moduleSpecifier === data.moduleSpecifier);
             return { sourceDisplay: [ts.textPart(moduleSpecifier)], codeActions: [codeAction] };
         }
         function getCompletionEntrySymbol(program, log, sourceFile, position, entryId, host, preferences) {
@@ -124286,25 +127129,25 @@
         function getContextualType(previousToken, position, sourceFile, checker) {
             var parent = previousToken.parent;
             switch (previousToken.kind) {
-                case 78 /* Identifier */:
+                case 79 /* Identifier */:
                     return ts.getContextualTypeFromParent(previousToken, checker);
-                case 62 /* EqualsToken */:
+                case 63 /* EqualsToken */:
                     switch (parent.kind) {
-                        case 250 /* VariableDeclaration */:
+                        case 252 /* VariableDeclaration */:
                             return checker.getContextualType(parent.initializer); // TODO: GH#18217
-                        case 217 /* BinaryExpression */:
+                        case 219 /* BinaryExpression */:
                             return checker.getTypeAtLocation(parent.left);
-                        case 281 /* JsxAttribute */:
+                        case 283 /* JsxAttribute */:
                             return checker.getContextualTypeForJsxAttribute(parent);
                         default:
                             return undefined;
                     }
-                case 102 /* NewKeyword */:
+                case 103 /* NewKeyword */:
                     return checker.getContextualType(parent);
-                case 81 /* CaseKeyword */:
+                case 82 /* CaseKeyword */:
                     return ts.getSwitchedType(ts.cast(parent, ts.isCaseClause), checker);
                 case 18 /* OpenBraceToken */:
-                    return ts.isJsxExpression(parent) && parent.parent.kind !== 274 /* JsxElement */ ? checker.getContextualTypeForJsxAttribute(parent.parent) : undefined;
+                    return ts.isJsxExpression(parent) && parent.parent.kind !== 276 /* JsxElement */ ? checker.getContextualTypeForJsxAttribute(parent.parent) : undefined;
                 default:
                     var argInfo = ts.SignatureHelp.getArgumentInfoForCompletions(previousToken, position, sourceFile);
                     return argInfo ?
@@ -124324,9 +127167,9 @@
         }
         function isModuleSymbol(symbol) {
             var _a;
-            return !!((_a = symbol.declarations) === null || _a === void 0 ? void 0 : _a.some(function (d) { return d.kind === 298 /* SourceFile */; }));
+            return !!((_a = symbol.declarations) === null || _a === void 0 ? void 0 : _a.some(function (d) { return d.kind === 300 /* SourceFile */; }));
         }
-        function getCompletionData(program, log, sourceFile, isUncheckedFile, position, preferences, detailsEntryId, host) {
+        function getCompletionData(program, log, sourceFile, isUncheckedFile, position, preferences, detailsEntryId, host, cancellationToken) {
             var typeChecker = program.getTypeChecker();
             var start = ts.timestamp();
             var currentToken = ts.getTokenAtPosition(sourceFile, position); // TODO: GH#15853
@@ -124375,11 +127218,11 @@
                     if (tag.tagName.pos <= position && position <= tag.tagName.end) {
                         return { kind: 1 /* JsDocTagName */ };
                     }
-                    if (isTagWithTypeExpression(tag) && tag.typeExpression && tag.typeExpression.kind === 302 /* JSDocTypeExpression */) {
+                    if (isTagWithTypeExpression(tag) && tag.typeExpression && tag.typeExpression.kind === 304 /* JSDocTypeExpression */) {
                         currentToken = ts.getTokenAtPosition(sourceFile, position);
                         if (!currentToken ||
                             (!ts.isDeclarationName(currentToken) &&
-                                (currentToken.parent.kind !== 337 /* JSDocPropertyTag */ ||
+                                (currentToken.parent.kind !== 342 /* JSDocPropertyTag */ ||
                                     currentToken.parent.name !== currentToken))) {
                             // Use as type location if inside tag's type expression
                             insideJsDocTagTypeExpression = isCurrentlyEditingNode(tag.typeExpression);
@@ -124397,18 +127240,12 @@
                 }
             }
             start = ts.timestamp();
-            var previousToken = ts.findPrecedingToken(position, sourceFile, /*startNode*/ undefined); // TODO: GH#18217
-            log("getCompletionData: Get previous token 1: " + (ts.timestamp() - start));
             // The decision to provide completion depends on the contextToken, which is determined through the previousToken.
             // Note: 'previousToken' (and thus 'contextToken') can be undefined if we are the beginning of the file
-            var contextToken = previousToken;
-            // Check if the caret is at the end of an identifier; this is a partial identifier that we want to complete: e.g. a.toS|
-            // Skip this partial identifier and adjust the contextToken to the token that precedes it.
-            if (contextToken && position <= contextToken.end && (ts.isMemberName(contextToken) || ts.isKeyword(contextToken.kind))) {
-                var start_1 = ts.timestamp();
-                contextToken = ts.findPrecedingToken(contextToken.getFullStart(), sourceFile, /*startNode*/ undefined); // TODO: GH#18217
-                log("getCompletionData: Get previous token 2: " + (ts.timestamp() - start_1));
-            }
+            var tokens = getRelevantTokens(position, sourceFile);
+            var previousToken = tokens.previousToken;
+            var contextToken = tokens.contextToken;
+            log("getCompletionData: Get previous token: " + (ts.timestamp() - start));
             // Find the node where completion is requested on.
             // Also determine whether we are trying to complete with members of that node
             // or attributes of a JSX tag.
@@ -124424,8 +127261,8 @@
             var location = ts.getTouchingPropertyName(sourceFile, position);
             if (contextToken) {
                 var importCompletionCandidate = getImportCompletionNode(contextToken);
-                if (importCompletionCandidate === 153 /* FromKeyword */) {
-                    return { kind: 4 /* Keywords */, keywords: [153 /* FromKeyword */] };
+                if (importCompletionCandidate === 154 /* FromKeyword */) {
+                    return { kind: 4 /* Keywords */, keywords: [154 /* FromKeyword */] };
                 }
                 // Import statement completions use `insertText`, and also require the `data` property of `CompletionEntryIdentifier`
                 // added in TypeScript 4.3 to be sent back from the client during `getCompletionEntryDetails`. Since this feature
@@ -124444,7 +127281,7 @@
                     isRightOfDot = contextToken.kind === 24 /* DotToken */;
                     isRightOfQuestionDot = contextToken.kind === 28 /* QuestionDotToken */;
                     switch (parent.kind) {
-                        case 202 /* PropertyAccessExpression */:
+                        case 204 /* PropertyAccessExpression */:
                             propertyAccessToConvert = parent;
                             node = propertyAccessToConvert.expression;
                             if ((ts.isCallExpression(node) || ts.isFunctionLike(node)) &&
@@ -124457,16 +127294,19 @@
                                 return undefined;
                             }
                             break;
-                        case 158 /* QualifiedName */:
+                        case 159 /* QualifiedName */:
                             node = parent.left;
                             break;
-                        case 257 /* ModuleDeclaration */:
+                        case 259 /* ModuleDeclaration */:
                             node = parent.name;
                             break;
-                        case 196 /* ImportType */:
-                        case 227 /* MetaProperty */:
+                        case 198 /* ImportType */:
                             node = parent;
                             break;
+                        case 229 /* MetaProperty */:
+                            node = parent.getFirstToken(sourceFile);
+                            ts.Debug.assert(node.kind === 100 /* ImportKeyword */ || node.kind === 103 /* NewKeyword */);
+                            break;
                         default:
                             // There is nothing that precedes the dot, so this likely just a stray character
                             // or leading into a '...' token. Just bail out instead.
@@ -124477,7 +127317,7 @@
                     // <UI.Test /* completion position */ />
                     // If the tagname is a property access expression, we will then walk up to the top most of property access expression.
                     // Then, try to get a JSX container and its associated attributes type.
-                    if (parent && parent.kind === 202 /* PropertyAccessExpression */) {
+                    if (parent && parent.kind === 204 /* PropertyAccessExpression */) {
                         contextToken = parent;
                         parent = parent.parent;
                     }
@@ -124485,45 +127325,46 @@
                     if (currentToken.parent === location) {
                         switch (currentToken.kind) {
                             case 31 /* GreaterThanToken */:
-                                if (currentToken.parent.kind === 274 /* JsxElement */ || currentToken.parent.kind === 276 /* JsxOpeningElement */) {
+                                if (currentToken.parent.kind === 276 /* JsxElement */ || currentToken.parent.kind === 278 /* JsxOpeningElement */) {
                                     location = currentToken;
                                 }
                                 break;
                             case 43 /* SlashToken */:
-                                if (currentToken.parent.kind === 275 /* JsxSelfClosingElement */) {
+                                if (currentToken.parent.kind === 277 /* JsxSelfClosingElement */) {
                                     location = currentToken;
                                 }
                                 break;
                         }
                     }
                     switch (parent.kind) {
-                        case 277 /* JsxClosingElement */:
+                        case 279 /* JsxClosingElement */:
                             if (contextToken.kind === 43 /* SlashToken */) {
                                 isStartingCloseTag = true;
                                 location = contextToken;
                             }
                             break;
-                        case 217 /* BinaryExpression */:
+                        case 219 /* BinaryExpression */:
                             if (!binaryExpressionMayBeOpenTag(parent)) {
                                 break;
                             }
                         // falls through
-                        case 275 /* JsxSelfClosingElement */:
-                        case 274 /* JsxElement */:
-                        case 276 /* JsxOpeningElement */:
+                        case 277 /* JsxSelfClosingElement */:
+                        case 276 /* JsxElement */:
+                        case 278 /* JsxOpeningElement */:
                             isJsxIdentifierExpected = true;
                             if (contextToken.kind === 29 /* LessThanToken */) {
                                 isRightOfOpenTag = true;
                                 location = contextToken;
                             }
                             break;
-                        case 284 /* JsxExpression */:
+                        case 286 /* JsxExpression */:
+                        case 285 /* JsxSpreadAttribute */:
                             // For `<div foo={true} [||] ></div>`, `parent` will be `{true}` and `previousToken` will be `}`
                             if (previousToken.kind === 19 /* CloseBraceToken */ && currentToken.kind === 31 /* GreaterThanToken */) {
                                 isJsxIdentifierExpected = true;
                             }
                             break;
-                        case 281 /* JsxAttribute */:
+                        case 283 /* JsxAttribute */:
                             // For `<div className="x" [||] ></div>`, `parent` will be JsxAttribute and `previousToken` will be its initializer
                             if (parent.initializer === previousToken &&
                                 previousToken.end < position) {
@@ -124531,16 +127372,16 @@
                                 break;
                             }
                             switch (previousToken.kind) {
-                                case 62 /* EqualsToken */:
+                                case 63 /* EqualsToken */:
                                     isJsxInitializer = true;
                                     break;
-                                case 78 /* Identifier */:
+                                case 79 /* Identifier */:
                                     isJsxIdentifierExpected = true;
                                     // For `<div x=[|f/**/|]`, `parent` will be `x` and `previousToken.parent` will be `f` (which is its own JsxAttribute)
                                     // Note for `<div someBool f>` we don't want to treat this as a jsx inializer, instead it's the attribute name.
                                     if (parent !== previousToken.parent &&
                                         !parent.initializer &&
-                                        ts.findChildOfKind(parent, 62 /* EqualsToken */, sourceFile)) {
+                                        ts.findChildOfKind(parent, 63 /* EqualsToken */, sourceFile)) {
                                         isJsxInitializer = previousToken;
                                     }
                             }
@@ -124552,13 +127393,14 @@
             var completionKind = 5 /* None */;
             var isNewIdentifierLocation = false;
             var isNonContextualObjectLiteral = false;
+            var hasUnresolvedAutoImports = false;
             var keywordFilters = 0 /* None */;
             // This also gets mutated in nested-functions after the return
             var symbols = [];
             var symbolToOriginInfoMap = [];
-            var symbolToSortTextMap = [];
+            var symbolToSortTextIdMap = [];
             var seenPropertySymbols = new ts.Map();
-            var isTypeOnly = isTypeOnlyCompletion();
+            var isTypeOnlyLocation = isTypeOnlyCompletion();
             var getModuleSpecifierResolutionHost = ts.memoizeOne(function (isFromPackageJson) {
                 return ts.createModuleSpecifierResolutionHost(isFromPackageJson ? host.getPackageJsonAutoImportProvider() : program, host);
             });
@@ -124608,18 +127450,19 @@
                 previousToken: previousToken,
                 isJsxInitializer: isJsxInitializer,
                 insideJsDocTagTypeExpression: insideJsDocTagTypeExpression,
-                symbolToSortTextMap: symbolToSortTextMap,
-                isTypeOnlyLocation: isTypeOnly,
+                symbolToSortTextIdMap: symbolToSortTextIdMap,
+                isTypeOnlyLocation: isTypeOnlyLocation,
                 isJsxIdentifierExpected: isJsxIdentifierExpected,
                 importCompletionNode: importCompletionNode,
+                hasUnresolvedAutoImports: hasUnresolvedAutoImports,
             };
             function isTagWithTypeExpression(tag) {
                 switch (tag.kind) {
-                    case 330 /* JSDocParameterTag */:
-                    case 337 /* JSDocPropertyTag */:
-                    case 331 /* JSDocReturnTag */:
-                    case 333 /* JSDocTypeTag */:
-                    case 335 /* JSDocTypedefTag */:
+                    case 335 /* JSDocParameterTag */:
+                    case 342 /* JSDocPropertyTag */:
+                    case 336 /* JSDocReturnTag */:
+                    case 338 /* JSDocTypeTag */:
+                    case 340 /* JSDocTypedefTag */:
                         return true;
                     default:
                         return false;
@@ -124646,7 +127489,7 @@
                             // Extract module or enum members
                             var exportedSymbols = typeChecker.getExportsOfModule(symbol);
                             ts.Debug.assertEachIsDefined(exportedSymbols, "getExportsOfModule() should all be defined");
-                            var isValidValueAccess_1 = function (symbol) { return typeChecker.isValidPropertyAccess(isImportType ? node : (node.parent), symbol.name); };
+                            var isValidValueAccess_1 = function (symbol) { return typeChecker.isValidPropertyAccess(isImportType ? node : node.parent, symbol.name); };
                             var isValidTypeAccess_1 = function (symbol) { return symbolCanBeReferencedAtTypeLocation(symbol, typeChecker); };
                             var isValidAccess = isNamespaceName
                                 // At `namespace N.M/**/`, if this is the only declaration of `M`, don't include `M` as a completion.
@@ -124664,7 +127507,7 @@
                             // If the module is merged with a value, we must get the type of the class and add its propertes (for inherited static methods).
                             if (!isTypeLocation &&
                                 symbol.declarations &&
-                                symbol.declarations.some(function (d) { return d.kind !== 298 /* SourceFile */ && d.kind !== 257 /* ModuleDeclaration */ && d.kind !== 256 /* EnumDeclaration */; })) {
+                                symbol.declarations.some(function (d) { return d.kind !== 300 /* SourceFile */ && d.kind !== 259 /* ModuleDeclaration */ && d.kind !== 258 /* EnumDeclaration */; })) {
                                 var type = typeChecker.getTypeOfSymbolAtLocation(symbol, node).getNonOptionalType();
                                 var insertQuestionDot = false;
                                 if (type.isNullableType()) {
@@ -124684,12 +127527,13 @@
                         }
                     }
                 }
-                if (ts.isMetaProperty(node) && (node.keywordToken === 102 /* NewKeyword */ || node.keywordToken === 99 /* ImportKeyword */) && contextToken === node.getChildAt(1)) {
-                    var completion = (node.keywordToken === 102 /* NewKeyword */) ? "target" : "meta";
-                    symbols.push(typeChecker.createSymbol(4 /* Property */, ts.escapeLeadingUnderscores(completion)));
-                    return;
-                }
                 if (!isTypeLocation) {
+                    // GH#39946. Pulling on the type of a node inside of a function with a contextual `this` parameter can result in a circularity
+                    // if the `node` is part of the exprssion of a `yield` or `return`. This circularity doesn't exist at compile time because
+                    // we will check (and cache) the type of `this` *before* checking the type of the node.
+                    var container = ts.getThisContainer(node, /*includeArrowFunctions*/ false);
+                    if (!ts.isSourceFile(container) && container.parent)
+                        typeChecker.getTypeAtLocation(container);
                     var type = typeChecker.getTypeAtLocation(node).getNonOptionalType();
                     var insertQuestionDot = false;
                     if (type.isNullableType()) {
@@ -124711,7 +127555,7 @@
                 if (isRightOfQuestionDot && ts.some(type.getCallSignatures())) {
                     isNewIdentifierLocation = true;
                 }
-                var propertyAccess = node.kind === 196 /* ImportType */ ? node : node.parent;
+                var propertyAccess = node.kind === 198 /* ImportType */ ? node : node.parent;
                 if (isUncheckedFile) {
                     // In javascript files, for union types, we don't just get the members that
                     // the individual types have in common, we also include all the members that
@@ -124782,7 +127626,7 @@
                 }
                 function addSymbolSortInfo(symbol) {
                     if (isStaticProperty(symbol)) {
-                        symbolToSortTextMap[ts.getSymbolId(symbol)] = SortText.LocalDeclarationPriority;
+                        symbolToSortTextIdMap[ts.getSymbolId(symbol)] = 10 /* LocalDeclarationPriority */;
                     }
                 }
                 function addSymbolOriginInfo(symbol) {
@@ -124842,7 +127686,8 @@
             function tryGetImportCompletionSymbols() {
                 if (!importCompletionNode)
                     return 0 /* Continue */;
-                collectAutoImports(/*resolveModuleSpecifiers*/ true);
+                isNewIdentifierLocation = true;
+                collectAutoImports();
                 return 1 /* Success */;
             }
             function getGlobalCompletions() {
@@ -124883,30 +127728,30 @@
                     position;
                 var scopeNode = getScopeNode(contextToken, adjustedPosition, sourceFile) || sourceFile;
                 isInSnippetScope = isSnippetScope(scopeNode);
-                var symbolMeanings = (isTypeOnly ? 0 /* None */ : 111551 /* Value */) | 788968 /* Type */ | 1920 /* Namespace */ | 2097152 /* Alias */;
+                var symbolMeanings = (isTypeOnlyLocation ? 0 /* None */ : 111551 /* Value */) | 788968 /* Type */ | 1920 /* Namespace */ | 2097152 /* Alias */;
                 symbols = ts.concatenate(symbols, typeChecker.getSymbolsInScope(scopeNode, symbolMeanings));
                 ts.Debug.assertEachIsDefined(symbols, "getSymbolsInScope() should all be defined");
                 for (var _i = 0, symbols_1 = symbols; _i < symbols_1.length; _i++) {
                     var symbol = symbols_1[_i];
                     if (!typeChecker.isArgumentsSymbol(symbol) &&
                         !ts.some(symbol.declarations, function (d) { return d.getSourceFile() === sourceFile; })) {
-                        symbolToSortTextMap[ts.getSymbolId(symbol)] = SortText.GlobalsOrKeywords;
+                        symbolToSortTextIdMap[ts.getSymbolId(symbol)] = 15 /* GlobalsOrKeywords */;
                     }
                 }
                 // Need to insert 'this.' before properties of `this` type, so only do that if `includeInsertTextCompletions`
-                if (preferences.includeCompletionsWithInsertText && scopeNode.kind !== 298 /* SourceFile */) {
+                if (preferences.includeCompletionsWithInsertText && scopeNode.kind !== 300 /* SourceFile */) {
                     var thisType = typeChecker.tryGetThisTypeAt(scopeNode, /*includeGlobalThis*/ false);
                     if (thisType && !isProbablyGlobalType(thisType, sourceFile, typeChecker)) {
                         for (var _a = 0, _b = getPropertiesForCompletion(thisType, typeChecker); _a < _b.length; _a++) {
                             var symbol = _b[_a];
                             symbolToOriginInfoMap[symbols.length] = { kind: 1 /* ThisType */ };
                             symbols.push(symbol);
-                            symbolToSortTextMap[ts.getSymbolId(symbol)] = SortText.SuggestedClassMembers;
+                            symbolToSortTextIdMap[ts.getSymbolId(symbol)] = 14 /* SuggestedClassMembers */;
                         }
                     }
                 }
-                collectAutoImports(/*resolveModuleSpecifier*/ false);
-                if (isTypeOnly) {
+                collectAutoImports();
+                if (isTypeOnlyLocation) {
                     keywordFilters = contextToken && ts.isAssertionExpression(contextToken.parent)
                         ? 6 /* TypeAssertionKeywords */
                         : 7 /* TypeKeywords */;
@@ -124933,10 +127778,10 @@
             }
             function isSnippetScope(scopeNode) {
                 switch (scopeNode.kind) {
-                    case 298 /* SourceFile */:
-                    case 219 /* TemplateExpression */:
-                    case 284 /* JsxExpression */:
-                    case 231 /* Block */:
+                    case 300 /* SourceFile */:
+                    case 221 /* TemplateExpression */:
+                    case 286 /* JsxExpression */:
+                    case 233 /* Block */:
                         return true;
                     default:
                         return ts.isStatement(scopeNode);
@@ -124951,129 +127796,109 @@
             }
             function isContextTokenValueLocation(contextToken) {
                 return contextToken &&
-                    ((contextToken.kind === 111 /* TypeOfKeyword */ &&
-                        (contextToken.parent.kind === 177 /* TypeQuery */ || ts.isTypeOfExpression(contextToken.parent))) ||
-                        (contextToken.kind === 127 /* AssertsKeyword */ && contextToken.parent.kind === 173 /* TypePredicate */));
+                    ((contextToken.kind === 112 /* TypeOfKeyword */ &&
+                        (contextToken.parent.kind === 179 /* TypeQuery */ || ts.isTypeOfExpression(contextToken.parent))) ||
+                        (contextToken.kind === 128 /* AssertsKeyword */ && contextToken.parent.kind === 175 /* TypePredicate */));
             }
             function isContextTokenTypeLocation(contextToken) {
                 if (contextToken) {
                     var parentKind = contextToken.parent.kind;
                     switch (contextToken.kind) {
                         case 58 /* ColonToken */:
-                            return parentKind === 164 /* PropertyDeclaration */ ||
-                                parentKind === 163 /* PropertySignature */ ||
-                                parentKind === 161 /* Parameter */ ||
-                                parentKind === 250 /* VariableDeclaration */ ||
+                            return parentKind === 165 /* PropertyDeclaration */ ||
+                                parentKind === 164 /* PropertySignature */ ||
+                                parentKind === 162 /* Parameter */ ||
+                                parentKind === 252 /* VariableDeclaration */ ||
                                 ts.isFunctionLikeKind(parentKind);
-                        case 62 /* EqualsToken */:
-                            return parentKind === 255 /* TypeAliasDeclaration */;
-                        case 126 /* AsKeyword */:
-                            return parentKind === 225 /* AsExpression */;
+                        case 63 /* EqualsToken */:
+                            return parentKind === 257 /* TypeAliasDeclaration */;
+                        case 127 /* AsKeyword */:
+                            return parentKind === 227 /* AsExpression */;
                         case 29 /* LessThanToken */:
-                            return parentKind === 174 /* TypeReference */ ||
-                                parentKind === 207 /* TypeAssertionExpression */;
-                        case 93 /* ExtendsKeyword */:
-                            return parentKind === 160 /* TypeParameter */;
+                            return parentKind === 176 /* TypeReference */ ||
+                                parentKind === 209 /* TypeAssertionExpression */;
+                        case 94 /* ExtendsKeyword */:
+                            return parentKind === 161 /* TypeParameter */;
                     }
                 }
                 return false;
             }
-            /** Mutates `symbols`, `symbolToOriginInfoMap`, and `symbolToSortTextMap` */
-            function collectAutoImports(resolveModuleSpecifiers) {
-                var _a, _b, _c, _d, _e;
+            /** Mutates `symbols`, `symbolToOriginInfoMap`, and `symbolToSortTextIdMap` */
+            function collectAutoImports() {
+                var _a, _b;
                 if (!shouldOfferImportCompletions())
                     return;
-                ts.Debug.assert(!(detailsEntryId === null || detailsEntryId === void 0 ? void 0 : detailsEntryId.data));
-                var start = ts.timestamp();
+                ts.Debug.assert(!(detailsEntryId === null || detailsEntryId === void 0 ? void 0 : detailsEntryId.data), "Should not run 'collectAutoImports' when faster path is available via `data`");
+                if (detailsEntryId && !detailsEntryId.source) {
+                    // Asking for completion details for an item that is not an auto-import
+                    return;
+                }
                 var moduleSpecifierCache = (_a = host.getModuleSpecifierCache) === null || _a === void 0 ? void 0 : _a.call(host);
-                (_b = host.log) === null || _b === void 0 ? void 0 : _b.call(host, "collectAutoImports: starting, " + (resolveModuleSpecifiers ? "" : "not ") + "resolving module specifiers");
-                if (moduleSpecifierCache) {
-                    (_c = host.log) === null || _c === void 0 ? void 0 : _c.call(host, "collectAutoImports: module specifier cache size: " + moduleSpecifierCache.count());
-                }
                 var lowerCaseTokenText = previousToken && ts.isIdentifier(previousToken) ? previousToken.text.toLowerCase() : "";
-                var exportInfo = ts.codefix.getSymbolToExportInfoMap(sourceFile, host, program);
-                var packageJsonAutoImportProvider = (_d = host.getPackageJsonAutoImportProvider) === null || _d === void 0 ? void 0 : _d.call(host);
-                var packageJsonFilter = detailsEntryId ? undefined : ts.createPackageJsonImportFilter(sourceFile, host);
-                exportInfo.forEach(function (info, key) {
-                    var symbolName = key.substring(0, key.indexOf("|"));
-                    if (!detailsEntryId && ts.isStringANonContextualKeyword(symbolName))
-                        return;
-                    var isCompletionDetailsMatch = detailsEntryId && ts.some(info, function (i) { return detailsEntryId.source === ts.stripQuotes(i.moduleSymbol.name); });
-                    if (isCompletionDetailsMatch || isNameMatch(symbolName)) {
-                        // If we don't need to resolve module specifiers, we can use any re-export that is importable at all
-                        // (We need to ensure that at least one is importable to show a completion.)
-                        var _a = resolveModuleSpecifiers
-                            ? ts.codefix.getModuleSpecifierForBestExportInfo(info, sourceFile, program, host, preferences)
-                            : { moduleSpecifier: undefined, exportInfo: ts.find(info, isImportableExportInfo) }, moduleSpecifier = _a.moduleSpecifier, exportInfo_1 = _a.exportInfo;
-                        if (!exportInfo_1)
+                var exportInfo = ts.getExportInfoMap(sourceFile, host, program, cancellationToken);
+                var packageJsonAutoImportProvider = (_b = host.getPackageJsonAutoImportProvider) === null || _b === void 0 ? void 0 : _b.call(host);
+                var packageJsonFilter = detailsEntryId ? undefined : ts.createPackageJsonImportFilter(sourceFile, preferences, host);
+                resolvingModuleSpecifiers("collectAutoImports", host, program, sourceFile, preferences, !!importCompletionNode, function (context) {
+                    exportInfo.forEach(sourceFile.path, function (info, symbolName, isFromAmbientModule) {
+                        if (!ts.isIdentifierText(symbolName, ts.getEmitScriptTarget(host.getCompilationSettings())))
                             return;
-                        var moduleFile = ts.tryCast(exportInfo_1.moduleSymbol.valueDeclaration, ts.isSourceFile);
-                        var isDefaultExport = exportInfo_1.exportKind === 1 /* Default */;
-                        var symbol = isDefaultExport && ts.getLocalSymbolForExportDefault(exportInfo_1.symbol) || exportInfo_1.symbol;
-                        pushAutoImportSymbol(symbol, {
-                            kind: resolveModuleSpecifiers ? 32 /* ResolvedExport */ : 4 /* Export */,
-                            moduleSpecifier: moduleSpecifier,
-                            symbolName: symbolName,
-                            exportName: exportInfo_1.exportKind === 2 /* ExportEquals */ ? "export=" /* ExportEquals */ : exportInfo_1.symbol.name,
-                            fileName: moduleFile === null || moduleFile === void 0 ? void 0 : moduleFile.fileName,
-                            isDefaultExport: isDefaultExport,
-                            moduleSymbol: exportInfo_1.moduleSymbol,
-                            isFromPackageJson: exportInfo_1.isFromPackageJson,
-                        });
-                    }
+                        if (!detailsEntryId && ts.isStringANonContextualKeyword(symbolName))
+                            return;
+                        // `targetFlags` should be the same for each `info`
+                        if (!isTypeOnlyLocation && !importCompletionNode && !(info[0].targetFlags & 111551 /* Value */))
+                            return;
+                        if (isTypeOnlyLocation && !(info[0].targetFlags & (1536 /* Module */ | 788968 /* Type */)))
+                            return;
+                        var isCompletionDetailsMatch = detailsEntryId && ts.some(info, function (i) { return detailsEntryId.source === ts.stripQuotes(i.moduleSymbol.name); });
+                        if (isCompletionDetailsMatch || !detailsEntryId && charactersFuzzyMatchInString(symbolName, lowerCaseTokenText)) {
+                            var defaultExportInfo = ts.find(info, isImportableExportInfo);
+                            if (!defaultExportInfo) {
+                                return;
+                            }
+                            // If we don't need to resolve module specifiers, we can use any re-export that is importable at all
+                            // (We need to ensure that at least one is importable to show a completion.)
+                            var _a = context.tryResolve(info, isFromAmbientModule) || {}, _b = _a.exportInfo, exportInfo_1 = _b === void 0 ? defaultExportInfo : _b, moduleSpecifier = _a.moduleSpecifier;
+                            var isDefaultExport = exportInfo_1.exportKind === 1 /* Default */;
+                            var symbol = isDefaultExport && ts.getLocalSymbolForExportDefault(exportInfo_1.symbol) || exportInfo_1.symbol;
+                            pushAutoImportSymbol(symbol, {
+                                kind: moduleSpecifier ? 32 /* ResolvedExport */ : 4 /* Export */,
+                                moduleSpecifier: moduleSpecifier,
+                                symbolName: symbolName,
+                                exportName: exportInfo_1.exportKind === 2 /* ExportEquals */ ? "export=" /* ExportEquals */ : exportInfo_1.symbol.name,
+                                fileName: exportInfo_1.moduleFileName,
+                                isDefaultExport: isDefaultExport,
+                                moduleSymbol: exportInfo_1.moduleSymbol,
+                                isFromPackageJson: exportInfo_1.isFromPackageJson,
+                            });
+                        }
+                    });
+                    hasUnresolvedAutoImports = context.resolutionLimitExceeded();
                 });
-                (_e = host.log) === null || _e === void 0 ? void 0 : _e.call(host, "collectAutoImports: done in " + (ts.timestamp() - start) + " ms");
-                function isNameMatch(symbolName) {
-                    var lowerCaseSymbolName = symbolName.toLowerCase();
-                    if (resolveModuleSpecifiers && lowerCaseTokenText) {
-                        // Use a more restrictive filter if resolving module specifiers since resolving module specifiers is expensive.
-                        return lowerCaseTokenText[0] === lowerCaseSymbolName[0] && stringContainsCharactersInOrder(lowerCaseSymbolName, lowerCaseTokenText);
-                    }
-                    return stringContainsCharactersInOrder(lowerCaseSymbolName, lowerCaseTokenText);
-                }
                 function isImportableExportInfo(info) {
                     var moduleFile = ts.tryCast(info.moduleSymbol.valueDeclaration, ts.isSourceFile);
                     if (!moduleFile) {
+                        var moduleName = ts.stripQuotes(info.moduleSymbol.name);
+                        if (ts.JsTyping.nodeCoreModules.has(moduleName) && ts.startsWith(moduleName, "node:") !== ts.shouldUseUriStyleNodeCoreModules(sourceFile, program)) {
+                            return false;
+                        }
                         return packageJsonFilter
                             ? packageJsonFilter.allowsImportingAmbientModule(info.moduleSymbol, getModuleSpecifierResolutionHost(info.isFromPackageJson))
                             : true;
                     }
-                    return ts.isImportableFile(info.isFromPackageJson ? packageJsonAutoImportProvider : program, sourceFile, moduleFile, packageJsonFilter, getModuleSpecifierResolutionHost(info.isFromPackageJson), moduleSpecifierCache);
+                    return ts.isImportableFile(info.isFromPackageJson ? packageJsonAutoImportProvider : program, sourceFile, moduleFile, preferences, packageJsonFilter, getModuleSpecifierResolutionHost(info.isFromPackageJson), moduleSpecifierCache);
                 }
             }
             function pushAutoImportSymbol(symbol, origin) {
                 var symbolId = ts.getSymbolId(symbol);
-                if (symbolToSortTextMap[symbolId] === SortText.GlobalsOrKeywords) {
+                if (symbolToSortTextIdMap[symbolId] === 15 /* GlobalsOrKeywords */) {
                     // If an auto-importable symbol is available as a global, don't add the auto import
                     return;
                 }
                 symbolToOriginInfoMap[symbols.length] = origin;
-                symbolToSortTextMap[symbolId] = importCompletionNode ? SortText.LocationPriority : SortText.AutoImportSuggestions;
+                symbolToSortTextIdMap[symbolId] = importCompletionNode ? 11 /* LocationPriority */ : 16 /* AutoImportSuggestions */;
                 symbols.push(symbol);
             }
             /**
-             * True if you could remove some characters in `a` to get `b`.
-             * E.g., true for "abcdef" and "bdf".
-             * But not true for "abcdef" and "dbf".
-             */
-            function stringContainsCharactersInOrder(str, characters) {
-                if (characters.length === 0) {
-                    return true;
-                }
-                var characterIndex = 0;
-                var len = str.length;
-                for (var strIndex = 0; strIndex < len; strIndex++) {
-                    if (str.charCodeAt(strIndex) === characters.charCodeAt(characterIndex)) {
-                        characterIndex++;
-                        if (characterIndex === characters.length) {
-                            return true;
-                        }
-                    }
-                }
-                // Did not find all characters
-                return false;
-            }
-            /**
              * Finds the first node that "embraces" the position, so that one may
              * accurately aggregate locals from the closest containing scope.
              */
@@ -125089,7 +127914,8 @@
                 var result = isInStringOrRegularExpressionOrTemplateLiteral(contextToken) ||
                     isSolelyIdentifierDefinitionLocation(contextToken) ||
                     isDotOfNumericLiteral(contextToken) ||
-                    isInJsxText(contextToken);
+                    isInJsxText(contextToken) ||
+                    ts.isBigIntLiteral(contextToken);
                 log("getCompletionsAtPosition: isCompletionListBlocker: " + (ts.timestamp() - start));
                 return result;
             }
@@ -125098,7 +127924,7 @@
                     return true;
                 }
                 if (contextToken.kind === 31 /* GreaterThanToken */ && contextToken.parent) {
-                    if (contextToken.parent.kind === 276 /* JsxOpeningElement */) {
+                    if (contextToken.parent.kind === 278 /* JsxOpeningElement */) {
                         // Two possibilities:
                         //   1. <div>/**/
                         //      - contextToken: GreaterThanToken (before cursor)
@@ -125108,10 +127934,10 @@
                         //      - contextToken: GreaterThanToken (before cursor)
                         //      - location: GreaterThanToken (after cursor)
                         //      - same parent (JSXOpeningElement)
-                        return location.parent.kind !== 276 /* JsxOpeningElement */;
+                        return location.parent.kind !== 278 /* JsxOpeningElement */;
                     }
-                    if (contextToken.parent.kind === 277 /* JsxClosingElement */ || contextToken.parent.kind === 275 /* JsxSelfClosingElement */) {
-                        return !!contextToken.parent.parent && contextToken.parent.parent.kind === 274 /* JsxElement */;
+                    if (contextToken.parent.kind === 279 /* JsxClosingElement */ || contextToken.parent.kind === 277 /* JsxSelfClosingElement */) {
+                        return !!contextToken.parent.parent && contextToken.parent.parent.kind === 276 /* JsxElement */;
                     }
                 }
                 return false;
@@ -125122,42 +127948,42 @@
                     // Previous token may have been a keyword that was converted to an identifier.
                     switch (keywordForNode(contextToken)) {
                         case 27 /* CommaToken */:
-                            return containingNodeKind === 204 /* CallExpression */ // func( a, |
-                                || containingNodeKind === 167 /* Constructor */ // constructor( a, |   /* public, protected, private keywords are allowed here, so show completion */
-                                || containingNodeKind === 205 /* NewExpression */ // new C(a, |
-                                || containingNodeKind === 200 /* ArrayLiteralExpression */ // [a, |
-                                || containingNodeKind === 217 /* BinaryExpression */ // const x = (a, |
-                                || containingNodeKind === 175 /* FunctionType */ // var x: (s: string, list|
-                                || containingNodeKind === 201 /* ObjectLiteralExpression */; // const obj = { x, |
+                            return containingNodeKind === 206 /* CallExpression */ // func( a, |
+                                || containingNodeKind === 169 /* Constructor */ // constructor( a, |   /* public, protected, private keywords are allowed here, so show completion */
+                                || containingNodeKind === 207 /* NewExpression */ // new C(a, |
+                                || containingNodeKind === 202 /* ArrayLiteralExpression */ // [a, |
+                                || containingNodeKind === 219 /* BinaryExpression */ // const x = (a, |
+                                || containingNodeKind === 177 /* FunctionType */ // var x: (s: string, list|
+                                || containingNodeKind === 203 /* ObjectLiteralExpression */; // const obj = { x, |
                         case 20 /* OpenParenToken */:
-                            return containingNodeKind === 204 /* CallExpression */ // func( |
-                                || containingNodeKind === 167 /* Constructor */ // constructor( |
-                                || containingNodeKind === 205 /* NewExpression */ // new C(a|
-                                || containingNodeKind === 208 /* ParenthesizedExpression */ // const x = (a|
-                                || containingNodeKind === 187 /* ParenthesizedType */; // function F(pred: (a| /* this can become an arrow function, where 'a' is the argument */
+                            return containingNodeKind === 206 /* CallExpression */ // func( |
+                                || containingNodeKind === 169 /* Constructor */ // constructor( |
+                                || containingNodeKind === 207 /* NewExpression */ // new C(a|
+                                || containingNodeKind === 210 /* ParenthesizedExpression */ // const x = (a|
+                                || containingNodeKind === 189 /* ParenthesizedType */; // function F(pred: (a| /* this can become an arrow function, where 'a' is the argument */
                         case 22 /* OpenBracketToken */:
-                            return containingNodeKind === 200 /* ArrayLiteralExpression */ // [ |
-                                || containingNodeKind === 172 /* IndexSignature */ // [ | : string ]
-                                || containingNodeKind === 159 /* ComputedPropertyName */; // [ |    /* this can become an index signature */
-                        case 139 /* ModuleKeyword */: // module |
-                        case 140 /* NamespaceKeyword */: // namespace |
+                            return containingNodeKind === 202 /* ArrayLiteralExpression */ // [ |
+                                || containingNodeKind === 174 /* IndexSignature */ // [ | : string ]
+                                || containingNodeKind === 160 /* ComputedPropertyName */; // [ |    /* this can become an index signature */
+                        case 140 /* ModuleKeyword */: // module |
+                        case 141 /* NamespaceKeyword */: // namespace |
                             return true;
                         case 24 /* DotToken */:
-                            return containingNodeKind === 257 /* ModuleDeclaration */; // module A.|
+                            return containingNodeKind === 259 /* ModuleDeclaration */; // module A.|
                         case 18 /* OpenBraceToken */:
-                            return containingNodeKind === 253 /* ClassDeclaration */ // class A { |
-                                || containingNodeKind === 201 /* ObjectLiteralExpression */; // const obj = { |
-                        case 62 /* EqualsToken */:
-                            return containingNodeKind === 250 /* VariableDeclaration */ // const x = a|
-                                || containingNodeKind === 217 /* BinaryExpression */; // x = a|
+                            return containingNodeKind === 255 /* ClassDeclaration */ // class A { |
+                                || containingNodeKind === 203 /* ObjectLiteralExpression */; // const obj = { |
+                        case 63 /* EqualsToken */:
+                            return containingNodeKind === 252 /* VariableDeclaration */ // const x = a|
+                                || containingNodeKind === 219 /* BinaryExpression */; // x = a|
                         case 15 /* TemplateHead */:
-                            return containingNodeKind === 219 /* TemplateExpression */; // `aa ${|
+                            return containingNodeKind === 221 /* TemplateExpression */; // `aa ${|
                         case 16 /* TemplateMiddle */:
-                            return containingNodeKind === 229 /* TemplateSpan */; // `aa ${10} dd ${|
-                        case 122 /* PublicKeyword */:
-                        case 120 /* PrivateKeyword */:
-                        case 121 /* ProtectedKeyword */:
-                            return containingNodeKind === 164 /* PropertyDeclaration */; // class A{ public |
+                            return containingNodeKind === 231 /* TemplateSpan */; // `aa ${10} dd ${|
+                        case 123 /* PublicKeyword */:
+                        case 121 /* PrivateKeyword */:
+                        case 122 /* ProtectedKeyword */:
+                            return containingNodeKind === 165 /* PropertyDeclaration */; // class A{ public |
                     }
                 }
                 return false;
@@ -125203,7 +128029,7 @@
                 completionKind = 0 /* ObjectPropertyDeclaration */;
                 var typeMembers;
                 var existingMembers;
-                if (objectLikeContainer.kind === 201 /* ObjectLiteralExpression */) {
+                if (objectLikeContainer.kind === 203 /* ObjectLiteralExpression */) {
                     var instantiatedType = tryGetObjectLiteralContextualType(objectLikeContainer, typeChecker);
                     // Check completions for Object property value shorthand
                     if (instantiatedType === undefined) {
@@ -125228,7 +128054,7 @@
                     }
                 }
                 else {
-                    ts.Debug.assert(objectLikeContainer.kind === 197 /* ObjectBindingPattern */);
+                    ts.Debug.assert(objectLikeContainer.kind === 199 /* ObjectBindingPattern */);
                     // We are *only* completing on properties from the type being destructured.
                     isNewIdentifierLocation = false;
                     var rootDeclaration = ts.getRootDeclaration(objectLikeContainer.parent);
@@ -125239,12 +128065,12 @@
                     // through type declaration or inference.
                     // Also proceed if rootDeclaration is a parameter and if its containing function expression/arrow function is contextually typed -
                     // type of parameter will flow in from the contextual type of the function
-                    var canGetType = ts.hasInitializer(rootDeclaration) || ts.hasType(rootDeclaration) || rootDeclaration.parent.parent.kind === 240 /* ForOfStatement */;
-                    if (!canGetType && rootDeclaration.kind === 161 /* Parameter */) {
+                    var canGetType = ts.hasInitializer(rootDeclaration) || ts.hasType(rootDeclaration) || rootDeclaration.parent.parent.kind === 242 /* ForOfStatement */;
+                    if (!canGetType && rootDeclaration.kind === 162 /* Parameter */) {
                         if (ts.isExpression(rootDeclaration.parent)) {
                             canGetType = !!typeChecker.getContextualType(rootDeclaration.parent);
                         }
-                        else if (rootDeclaration.parent.kind === 166 /* MethodDeclaration */ || rootDeclaration.parent.kind === 169 /* SetAccessor */) {
+                        else if (rootDeclaration.parent.kind === 167 /* MethodDeclaration */ || rootDeclaration.parent.kind === 171 /* SetAccessor */) {
                             canGetType = ts.isExpression(rootDeclaration.parent.parent) && !!typeChecker.getContextualType(rootDeclaration.parent.parent);
                         }
                     }
@@ -125291,9 +128117,9 @@
                 if (!namedImportsOrExports)
                     return 0 /* Continue */;
                 // try to show exported member for imported/re-exported module
-                var moduleSpecifier = (namedImportsOrExports.kind === 265 /* NamedImports */ ? namedImportsOrExports.parent.parent : namedImportsOrExports.parent).moduleSpecifier;
+                var moduleSpecifier = (namedImportsOrExports.kind === 267 /* NamedImports */ ? namedImportsOrExports.parent.parent : namedImportsOrExports.parent).moduleSpecifier;
                 if (!moduleSpecifier)
-                    return namedImportsOrExports.kind === 265 /* NamedImports */ ? 2 /* Fail */ : 0 /* Continue */;
+                    return namedImportsOrExports.kind === 267 /* NamedImports */ ? 2 /* Fail */ : 0 /* Continue */;
                 var moduleSpecifierSymbol = typeChecker.getSymbolAtLocation(moduleSpecifier); // TODO: GH#18217
                 if (!moduleSpecifierSymbol)
                     return 2 /* Fail */;
@@ -125328,7 +128154,7 @@
                     var _a, _b;
                     symbols.push(symbol);
                     if ((_b = (_a = localsContainer.symbol) === null || _a === void 0 ? void 0 : _a.exports) === null || _b === void 0 ? void 0 : _b.has(name)) {
-                        symbolToSortTextMap[ts.getSymbolId(symbol)] = SortText.OptionalMember;
+                        symbolToSortTextIdMap[ts.getSymbolId(symbol)] = 12 /* OptionalMember */;
                     }
                 });
                 return 1 /* Success */;
@@ -125353,7 +128179,7 @@
                 var classElement = contextToken.kind === 26 /* SemicolonToken */ ? contextToken.parent.parent : contextToken.parent;
                 var classElementModifierFlags = ts.isClassElement(classElement) ? ts.getEffectiveModifierFlags(classElement) : 0 /* None */;
                 // If this is context token is not something we are editing now, consider if this would lead to be modifier
-                if (contextToken.kind === 78 /* Identifier */ && !isCurrentlyEditingNode(contextToken)) {
+                if (contextToken.kind === 79 /* Identifier */ && !isCurrentlyEditingNode(contextToken)) {
                     switch (contextToken.getText()) {
                         case "private":
                             classElementModifierFlags = classElementModifierFlags | 8 /* Private */;
@@ -125366,6 +128192,9 @@
                             break;
                     }
                 }
+                if (ts.isClassStaticBlockDeclaration(classElement)) {
+                    classElementModifierFlags |= 32 /* Static */;
+                }
                 // No member list for private methods
                 if (!(classElementModifierFlags & 8 /* Private */)) {
                     // List of property symbols of base type that are not private and already implemented
@@ -125396,7 +128225,7 @@
                             break;
                         case 41 /* AsteriskToken */:
                             return ts.isMethodDeclaration(parent) ? ts.tryCast(parent.parent, ts.isObjectLiteralExpression) : undefined;
-                        case 78 /* Identifier */:
+                        case 79 /* Identifier */:
                             return contextToken.text === "async" && ts.isShorthandPropertyAssignment(contextToken.parent)
                                 ? contextToken.parent.parent : undefined;
                     }
@@ -125449,12 +128278,12 @@
                         case 31 /* GreaterThanToken */: // End of a type argument list
                         case 30 /* LessThanSlashToken */:
                         case 43 /* SlashToken */:
-                        case 78 /* Identifier */:
-                        case 202 /* PropertyAccessExpression */:
-                        case 282 /* JsxAttributes */:
-                        case 281 /* JsxAttribute */:
-                        case 283 /* JsxSpreadAttribute */:
-                            if (parent && (parent.kind === 275 /* JsxSelfClosingElement */ || parent.kind === 276 /* JsxOpeningElement */)) {
+                        case 79 /* Identifier */:
+                        case 204 /* PropertyAccessExpression */:
+                        case 284 /* JsxAttributes */:
+                        case 283 /* JsxAttribute */:
+                        case 285 /* JsxSpreadAttribute */:
+                            if (parent && (parent.kind === 277 /* JsxSelfClosingElement */ || parent.kind === 278 /* JsxOpeningElement */)) {
                                 if (contextToken.kind === 31 /* GreaterThanToken */) {
                                     var precedingToken = ts.findPrecedingToken(contextToken.pos, sourceFile, /*startNode*/ undefined);
                                     if (!parent.typeArguments || (precedingToken && precedingToken.kind === 43 /* SlashToken */))
@@ -125462,7 +128291,7 @@
                                 }
                                 return parent;
                             }
-                            else if (parent.kind === 281 /* JsxAttribute */) {
+                            else if (parent.kind === 283 /* JsxAttribute */) {
                                 // Currently we parse JsxOpeningLikeElement as:
                                 //      JsxOpeningLikeElement
                                 //          attributes: JsxAttributes
@@ -125474,7 +128303,7 @@
                         // its parent is a JsxExpression, whose parent is a JsxAttribute,
                         // whose parent is a JsxOpeningLikeElement
                         case 10 /* StringLiteral */:
-                            if (parent && ((parent.kind === 281 /* JsxAttribute */) || (parent.kind === 283 /* JsxSpreadAttribute */))) {
+                            if (parent && ((parent.kind === 283 /* JsxAttribute */) || (parent.kind === 285 /* JsxSpreadAttribute */))) {
                                 // Currently we parse JsxOpeningLikeElement as:
                                 //      JsxOpeningLikeElement
                                 //          attributes: JsxAttributes
@@ -125484,8 +128313,8 @@
                             break;
                         case 19 /* CloseBraceToken */:
                             if (parent &&
-                                parent.kind === 284 /* JsxExpression */ &&
-                                parent.parent && parent.parent.kind === 281 /* JsxAttribute */) {
+                                parent.kind === 286 /* JsxExpression */ &&
+                                parent.parent && parent.parent.kind === 283 /* JsxAttribute */) {
                                 // Currently we parse JsxOpeningLikeElement as:
                                 //      JsxOpeningLikeElement
                                 //          attributes: JsxAttributes
@@ -125493,7 +128322,7 @@
                                 //                  each JsxAttribute can have initializer as JsxExpression
                                 return parent.parent.parent.parent;
                             }
-                            if (parent && parent.kind === 283 /* JsxSpreadAttribute */) {
+                            if (parent && parent.kind === 285 /* JsxSpreadAttribute */) {
                                 // Currently we parse JsxOpeningLikeElement as:
                                 //      JsxOpeningLikeElement
                                 //          attributes: JsxAttributes
@@ -125513,62 +128342,62 @@
                 var containingNodeKind = parent.kind;
                 switch (contextToken.kind) {
                     case 27 /* CommaToken */:
-                        return containingNodeKind === 250 /* VariableDeclaration */ ||
+                        return containingNodeKind === 252 /* VariableDeclaration */ ||
                             isVariableDeclarationListButNotTypeArgument(contextToken) ||
-                            containingNodeKind === 233 /* VariableStatement */ ||
-                            containingNodeKind === 256 /* EnumDeclaration */ || // enum a { foo, |
+                            containingNodeKind === 235 /* VariableStatement */ ||
+                            containingNodeKind === 258 /* EnumDeclaration */ || // enum a { foo, |
                             isFunctionLikeButNotConstructor(containingNodeKind) ||
-                            containingNodeKind === 254 /* InterfaceDeclaration */ || // interface A<T, |
-                            containingNodeKind === 198 /* ArrayBindingPattern */ || // var [x, y|
-                            containingNodeKind === 255 /* TypeAliasDeclaration */ || // type Map, K, |
+                            containingNodeKind === 256 /* InterfaceDeclaration */ || // interface A<T, |
+                            containingNodeKind === 200 /* ArrayBindingPattern */ || // var [x, y|
+                            containingNodeKind === 257 /* TypeAliasDeclaration */ || // type Map, K, |
                             // class A<T, |
                             // var C = class D<T, |
                             (ts.isClassLike(parent) &&
                                 !!parent.typeParameters &&
                                 parent.typeParameters.end >= contextToken.pos);
                     case 24 /* DotToken */:
-                        return containingNodeKind === 198 /* ArrayBindingPattern */; // var [.|
+                        return containingNodeKind === 200 /* ArrayBindingPattern */; // var [.|
                     case 58 /* ColonToken */:
-                        return containingNodeKind === 199 /* BindingElement */; // var {x :html|
+                        return containingNodeKind === 201 /* BindingElement */; // var {x :html|
                     case 22 /* OpenBracketToken */:
-                        return containingNodeKind === 198 /* ArrayBindingPattern */; // var [x|
+                        return containingNodeKind === 200 /* ArrayBindingPattern */; // var [x|
                     case 20 /* OpenParenToken */:
-                        return containingNodeKind === 288 /* CatchClause */ ||
+                        return containingNodeKind === 290 /* CatchClause */ ||
                             isFunctionLikeButNotConstructor(containingNodeKind);
                     case 18 /* OpenBraceToken */:
-                        return containingNodeKind === 256 /* EnumDeclaration */; // enum a { |
+                        return containingNodeKind === 258 /* EnumDeclaration */; // enum a { |
                     case 29 /* LessThanToken */:
-                        return containingNodeKind === 253 /* ClassDeclaration */ || // class A< |
-                            containingNodeKind === 222 /* ClassExpression */ || // var C = class D< |
-                            containingNodeKind === 254 /* InterfaceDeclaration */ || // interface A< |
-                            containingNodeKind === 255 /* TypeAliasDeclaration */ || // type List< |
+                        return containingNodeKind === 255 /* ClassDeclaration */ || // class A< |
+                            containingNodeKind === 224 /* ClassExpression */ || // var C = class D< |
+                            containingNodeKind === 256 /* InterfaceDeclaration */ || // interface A< |
+                            containingNodeKind === 257 /* TypeAliasDeclaration */ || // type List< |
                             ts.isFunctionLikeKind(containingNodeKind);
-                    case 123 /* StaticKeyword */:
-                        return containingNodeKind === 164 /* PropertyDeclaration */ && !ts.isClassLike(parent.parent);
+                    case 124 /* StaticKeyword */:
+                        return containingNodeKind === 165 /* PropertyDeclaration */ && !ts.isClassLike(parent.parent);
                     case 25 /* DotDotDotToken */:
-                        return containingNodeKind === 161 /* Parameter */ ||
-                            (!!parent.parent && parent.parent.kind === 198 /* ArrayBindingPattern */); // var [...z|
-                    case 122 /* PublicKeyword */:
-                    case 120 /* PrivateKeyword */:
-                    case 121 /* ProtectedKeyword */:
-                        return containingNodeKind === 161 /* Parameter */ && !ts.isConstructorDeclaration(parent.parent);
-                    case 126 /* AsKeyword */:
-                        return containingNodeKind === 266 /* ImportSpecifier */ ||
-                            containingNodeKind === 271 /* ExportSpecifier */ ||
-                            containingNodeKind === 264 /* NamespaceImport */;
-                    case 134 /* GetKeyword */:
-                    case 146 /* SetKeyword */:
+                        return containingNodeKind === 162 /* Parameter */ ||
+                            (!!parent.parent && parent.parent.kind === 200 /* ArrayBindingPattern */); // var [...z|
+                    case 123 /* PublicKeyword */:
+                    case 121 /* PrivateKeyword */:
+                    case 122 /* ProtectedKeyword */:
+                        return containingNodeKind === 162 /* Parameter */ && !ts.isConstructorDeclaration(parent.parent);
+                    case 127 /* AsKeyword */:
+                        return containingNodeKind === 268 /* ImportSpecifier */ ||
+                            containingNodeKind === 273 /* ExportSpecifier */ ||
+                            containingNodeKind === 266 /* NamespaceImport */;
+                    case 135 /* GetKeyword */:
+                    case 147 /* SetKeyword */:
                         return !isFromObjectTypeDeclaration(contextToken);
-                    case 83 /* ClassKeyword */:
-                    case 91 /* EnumKeyword */:
-                    case 117 /* InterfaceKeyword */:
-                    case 97 /* FunctionKeyword */:
-                    case 112 /* VarKeyword */:
-                    case 99 /* ImportKeyword */:
-                    case 118 /* LetKeyword */:
-                    case 84 /* ConstKeyword */:
-                    case 135 /* InferKeyword */:
-                    case 149 /* TypeKeyword */: // type htm|
+                    case 84 /* ClassKeyword */:
+                    case 92 /* EnumKeyword */:
+                    case 118 /* InterfaceKeyword */:
+                    case 98 /* FunctionKeyword */:
+                    case 113 /* VarKeyword */:
+                    case 100 /* ImportKeyword */:
+                    case 119 /* LetKeyword */:
+                    case 85 /* ConstKeyword */:
+                    case 136 /* InferKeyword */:
+                    case 150 /* TypeKeyword */: // type htm|
                         return true;
                     case 41 /* AsteriskToken */:
                         return ts.isFunctionLike(contextToken.parent) && !ts.isMethodDeclaration(contextToken.parent);
@@ -125591,21 +128420,21 @@
                 }
                 // Previous token may have been a keyword that was converted to an identifier.
                 switch (keywordForNode(contextToken)) {
-                    case 125 /* AbstractKeyword */:
-                    case 83 /* ClassKeyword */:
-                    case 84 /* ConstKeyword */:
-                    case 133 /* DeclareKeyword */:
-                    case 91 /* EnumKeyword */:
-                    case 97 /* FunctionKeyword */:
-                    case 117 /* InterfaceKeyword */:
-                    case 118 /* LetKeyword */:
-                    case 120 /* PrivateKeyword */:
-                    case 121 /* ProtectedKeyword */:
-                    case 122 /* PublicKeyword */:
-                    case 123 /* StaticKeyword */:
-                    case 112 /* VarKeyword */:
+                    case 126 /* AbstractKeyword */:
+                    case 84 /* ClassKeyword */:
+                    case 85 /* ConstKeyword */:
+                    case 134 /* DeclareKeyword */:
+                    case 92 /* EnumKeyword */:
+                    case 98 /* FunctionKeyword */:
+                    case 118 /* InterfaceKeyword */:
+                    case 119 /* LetKeyword */:
+                    case 121 /* PrivateKeyword */:
+                    case 122 /* ProtectedKeyword */:
+                    case 123 /* PublicKeyword */:
+                    case 124 /* StaticKeyword */:
+                    case 113 /* VarKeyword */:
                         return true;
-                    case 129 /* AsyncKeyword */:
+                    case 130 /* AsyncKeyword */:
                         return ts.isPropertyDeclaration(contextToken.parent);
                 }
                 // If we are inside a class declaration, and `constructor` is totally not present,
@@ -125614,7 +128443,7 @@
                 if (ancestorClassLike && contextToken === previousToken && isPreviousPropertyDeclarationTerminated(contextToken, position)) {
                     return false; // Don't block completions.
                 }
-                var ancestorPropertyDeclaraion = ts.getAncestor(contextToken.parent, 164 /* PropertyDeclaration */);
+                var ancestorPropertyDeclaraion = ts.getAncestor(contextToken.parent, 165 /* PropertyDeclaration */);
                 // If we are inside a class declaration and typing `constructor` after property declaration...
                 if (ancestorPropertyDeclaraion
                     && contextToken !== previousToken
@@ -125625,7 +128454,7 @@
                     if (isPreviousPropertyDeclarationTerminated(contextToken, previousToken.end)) {
                         return false; // Don't block completions.
                     }
-                    else if (contextToken.kind !== 62 /* EqualsToken */
+                    else if (contextToken.kind !== 63 /* EqualsToken */
                         // Should not block: `class C { blah = c/**/ }`
                         // But should block: `class C { blah = somewhat c/**/ }` and `class C { blah: SomeType c/**/ }`
                         && (ts.isInitializedProperty(ancestorPropertyDeclaraion)
@@ -125641,12 +128470,12 @@
                     && !(ts.isClassLike(contextToken.parent) && (contextToken !== previousToken || position > previousToken.end));
             }
             function isPreviousPropertyDeclarationTerminated(contextToken, position) {
-                return contextToken.kind !== 62 /* EqualsToken */ &&
+                return contextToken.kind !== 63 /* EqualsToken */ &&
                     (contextToken.kind === 26 /* SemicolonToken */
                         || !ts.positionsAreOnSameLine(contextToken.end, position, sourceFile));
             }
             function isFunctionLikeButNotConstructor(kind) {
-                return ts.isFunctionLikeKind(kind) && kind !== 167 /* Constructor */;
+                return ts.isFunctionLikeKind(kind) && kind !== 169 /* Constructor */;
             }
             function isDotOfNumericLiteral(contextToken) {
                 if (contextToken.kind === 8 /* NumericLiteral */) {
@@ -125656,7 +128485,7 @@
                 return false;
             }
             function isVariableDeclarationListButNotTypeArgument(node) {
-                return node.parent.kind === 251 /* VariableDeclarationList */
+                return node.parent.kind === 253 /* VariableDeclarationList */
                     && !ts.isPossiblyTypeArgumentPosition(node, sourceFile, typeChecker);
             }
             /**
@@ -125674,13 +128503,13 @@
                 for (var _i = 0, existingMembers_1 = existingMembers; _i < existingMembers_1.length; _i++) {
                     var m = existingMembers_1[_i];
                     // Ignore omitted expressions for missing members
-                    if (m.kind !== 289 /* PropertyAssignment */ &&
-                        m.kind !== 290 /* ShorthandPropertyAssignment */ &&
-                        m.kind !== 199 /* BindingElement */ &&
-                        m.kind !== 166 /* MethodDeclaration */ &&
-                        m.kind !== 168 /* GetAccessor */ &&
-                        m.kind !== 169 /* SetAccessor */ &&
-                        m.kind !== 291 /* SpreadAssignment */) {
+                    if (m.kind !== 291 /* PropertyAssignment */ &&
+                        m.kind !== 292 /* ShorthandPropertyAssignment */ &&
+                        m.kind !== 201 /* BindingElement */ &&
+                        m.kind !== 167 /* MethodDeclaration */ &&
+                        m.kind !== 170 /* GetAccessor */ &&
+                        m.kind !== 171 /* SetAccessor */ &&
+                        m.kind !== 293 /* SpreadAssignment */) {
                         continue;
                     }
                     // If this is the current item we are editing right now, do not filter it out
@@ -125693,7 +128522,7 @@
                     }
                     else if (ts.isBindingElement(m) && m.propertyName) {
                         // include only identifiers in completion list
-                        if (m.propertyName.kind === 78 /* Identifier */) {
+                        if (m.propertyName.kind === 79 /* Identifier */) {
                             existingName = m.propertyName.escapedText;
                         }
                     }
@@ -125726,8 +128555,10 @@
             // Set SortText to OptionalMember if it is an optional member
             function setSortTextToOptionalMember() {
                 symbols.forEach(function (m) {
+                    var _a;
                     if (m.flags & 16777216 /* Optional */) {
-                        symbolToSortTextMap[ts.getSymbolId(m)] = symbolToSortTextMap[ts.getSymbolId(m)] || SortText.OptionalMember;
+                        var symbolId = ts.getSymbolId(m);
+                        symbolToSortTextIdMap[symbolId] = (_a = symbolToSortTextIdMap[symbolId]) !== null && _a !== void 0 ? _a : 12 /* OptionalMember */;
                     }
                 });
             }
@@ -125739,7 +128570,7 @@
                 for (var _i = 0, contextualMemberSymbols_1 = contextualMemberSymbols; _i < contextualMemberSymbols_1.length; _i++) {
                     var contextualMemberSymbol = contextualMemberSymbols_1[_i];
                     if (membersDeclaredBySpreadAssignment.has(contextualMemberSymbol.name)) {
-                        symbolToSortTextMap[ts.getSymbolId(contextualMemberSymbol)] = SortText.MemberDeclaredBySpreadAssignment;
+                        symbolToSortTextIdMap[ts.getSymbolId(contextualMemberSymbol)] = 13 /* MemberDeclaredBySpreadAssignment */;
                     }
                 }
             }
@@ -125753,10 +128584,10 @@
                 for (var _i = 0, existingMembers_2 = existingMembers; _i < existingMembers_2.length; _i++) {
                     var m = existingMembers_2[_i];
                     // Ignore omitted expressions for missing members
-                    if (m.kind !== 164 /* PropertyDeclaration */ &&
-                        m.kind !== 166 /* MethodDeclaration */ &&
-                        m.kind !== 168 /* GetAccessor */ &&
-                        m.kind !== 169 /* SetAccessor */) {
+                    if (m.kind !== 165 /* PropertyDeclaration */ &&
+                        m.kind !== 167 /* MethodDeclaration */ &&
+                        m.kind !== 170 /* GetAccessor */ &&
+                        m.kind !== 171 /* SetAccessor */) {
                         continue;
                     }
                     // If this is the current item we are editing right now, do not filter it out
@@ -125768,7 +128599,7 @@
                         continue;
                     }
                     // do not filter it out if the static presence doesnt match
-                    if (ts.hasEffectiveModifier(m, 32 /* Static */) !== !!(currentClassElementModifierFlags & 32 /* Static */)) {
+                    if (ts.isStatic(m) !== !!(currentClassElementModifierFlags & 32 /* Static */)) {
                         continue;
                     }
                     var existingName = ts.getPropertyNameForPropertyNameNode(m.name);
@@ -125798,7 +128629,7 @@
                     if (isCurrentlyEditingNode(attr)) {
                         continue;
                     }
-                    if (attr.kind === 281 /* JsxAttribute */) {
+                    if (attr.kind === 283 /* JsxAttribute */) {
                         seenNames.add(attr.name.escapedText);
                     }
                     else if (ts.isJsxSpreadAttribute(attr)) {
@@ -125813,6 +128644,14 @@
                 return node.getStart(sourceFile) <= position && position <= node.getEnd();
             }
         }
+        function getRelevantTokens(position, sourceFile) {
+            var previousToken = ts.findPrecedingToken(position, sourceFile);
+            if (previousToken && position <= previousToken.end && (ts.isMemberName(previousToken) || ts.isKeyword(previousToken.kind))) {
+                var contextToken = ts.findPrecedingToken(previousToken.getFullStart(), sourceFile, /*startNode*/ undefined); // TODO: GH#18217
+                return { contextToken: contextToken, previousToken: previousToken };
+            }
+            return { contextToken: previousToken, previousToken: previousToken };
+        }
         function getAutoImportSymbolFromCompletionEntryData(name, data, program, host) {
             var containingProgram = data.isPackageJsonImport ? host.getPackageJsonAutoImportProvider() : program;
             var checker = containingProgram.getTypeChecker();
@@ -125837,6 +128676,7 @@
                     isDefaultExport: isDefaultExport,
                     exportName: data.exportName,
                     fileName: data.fileName,
+                    isFromPackageJson: !!data.isPackageJsonImport,
                 }
             };
         }
@@ -125875,7 +128715,7 @@
         var _keywordCompletions = [];
         var allKeywordsCompletions = ts.memoize(function () {
             var res = [];
-            for (var i = 80 /* FirstKeyword */; i <= 157 /* LastKeyword */; i++) {
+            for (var i = 81 /* FirstKeyword */; i <= 158 /* LastKeyword */; i++) {
                 res.push({
                     name: ts.tokenToString(i),
                     kind: "keyword" /* keyword */,
@@ -125901,11 +128741,11 @@
                         return false;
                     case 1 /* All */:
                         return isFunctionLikeBodyKeyword(kind)
-                            || kind === 133 /* DeclareKeyword */
-                            || kind === 139 /* ModuleKeyword */
-                            || kind === 149 /* TypeKeyword */
-                            || kind === 140 /* NamespaceKeyword */
-                            || ts.isTypeKeyword(kind) && kind !== 150 /* UndefinedKeyword */;
+                            || kind === 134 /* DeclareKeyword */
+                            || kind === 140 /* ModuleKeyword */
+                            || kind === 150 /* TypeKeyword */
+                            || kind === 141 /* NamespaceKeyword */
+                            || ts.isTypeKeyword(kind) && kind !== 151 /* UndefinedKeyword */;
                     case 5 /* FunctionLikeBodyKeywords */:
                         return isFunctionLikeBodyKeyword(kind);
                     case 2 /* ClassElementKeywords */:
@@ -125915,7 +128755,7 @@
                     case 4 /* ConstructorParameterKeywords */:
                         return ts.isParameterPropertyModifier(kind);
                     case 6 /* TypeAssertionKeywords */:
-                        return ts.isTypeKeyword(kind) || kind === 84 /* ConstKeyword */;
+                        return ts.isTypeKeyword(kind) || kind === 85 /* ConstKeyword */;
                     case 7 /* TypeKeywords */:
                         return ts.isTypeKeyword(kind);
                     default:
@@ -125925,59 +128765,59 @@
         }
         function isTypeScriptOnlyKeyword(kind) {
             switch (kind) {
-                case 125 /* AbstractKeyword */:
-                case 128 /* AnyKeyword */:
-                case 155 /* BigIntKeyword */:
-                case 131 /* BooleanKeyword */:
-                case 133 /* DeclareKeyword */:
-                case 91 /* EnumKeyword */:
-                case 154 /* GlobalKeyword */:
-                case 116 /* ImplementsKeyword */:
-                case 135 /* InferKeyword */:
-                case 117 /* InterfaceKeyword */:
-                case 137 /* IsKeyword */:
-                case 138 /* KeyOfKeyword */:
-                case 139 /* ModuleKeyword */:
-                case 140 /* NamespaceKeyword */:
-                case 141 /* NeverKeyword */:
-                case 144 /* NumberKeyword */:
-                case 145 /* ObjectKeyword */:
-                case 156 /* OverrideKeyword */:
-                case 120 /* PrivateKeyword */:
-                case 121 /* ProtectedKeyword */:
-                case 122 /* PublicKeyword */:
-                case 142 /* ReadonlyKeyword */:
-                case 147 /* StringKeyword */:
-                case 148 /* SymbolKeyword */:
-                case 149 /* TypeKeyword */:
-                case 151 /* UniqueKeyword */:
-                case 152 /* UnknownKeyword */:
+                case 126 /* AbstractKeyword */:
+                case 129 /* AnyKeyword */:
+                case 156 /* BigIntKeyword */:
+                case 132 /* BooleanKeyword */:
+                case 134 /* DeclareKeyword */:
+                case 92 /* EnumKeyword */:
+                case 155 /* GlobalKeyword */:
+                case 117 /* ImplementsKeyword */:
+                case 136 /* InferKeyword */:
+                case 118 /* InterfaceKeyword */:
+                case 138 /* IsKeyword */:
+                case 139 /* KeyOfKeyword */:
+                case 140 /* ModuleKeyword */:
+                case 141 /* NamespaceKeyword */:
+                case 142 /* NeverKeyword */:
+                case 145 /* NumberKeyword */:
+                case 146 /* ObjectKeyword */:
+                case 157 /* OverrideKeyword */:
+                case 121 /* PrivateKeyword */:
+                case 122 /* ProtectedKeyword */:
+                case 123 /* PublicKeyword */:
+                case 143 /* ReadonlyKeyword */:
+                case 148 /* StringKeyword */:
+                case 149 /* SymbolKeyword */:
+                case 150 /* TypeKeyword */:
+                case 152 /* UniqueKeyword */:
+                case 153 /* UnknownKeyword */:
                     return true;
                 default:
                     return false;
             }
         }
         function isInterfaceOrTypeLiteralCompletionKeyword(kind) {
-            return kind === 142 /* ReadonlyKeyword */;
+            return kind === 143 /* ReadonlyKeyword */;
         }
         function isClassMemberCompletionKeyword(kind) {
             switch (kind) {
-                case 125 /* AbstractKeyword */:
-                case 132 /* ConstructorKeyword */:
-                case 134 /* GetKeyword */:
-                case 146 /* SetKeyword */:
-                case 129 /* AsyncKeyword */:
-                case 133 /* DeclareKeyword */:
-                case 156 /* OverrideKeyword */:
+                case 126 /* AbstractKeyword */:
+                case 133 /* ConstructorKeyword */:
+                case 135 /* GetKeyword */:
+                case 147 /* SetKeyword */:
+                case 130 /* AsyncKeyword */:
+                case 134 /* DeclareKeyword */:
+                case 157 /* OverrideKeyword */:
                     return true;
                 default:
                     return ts.isClassMemberModifier(kind);
             }
         }
         function isFunctionLikeBodyKeyword(kind) {
-            return kind === 129 /* AsyncKeyword */
-                || kind === 130 /* AwaitKeyword */
-                || kind === 126 /* AsKeyword */
+            return kind === 130 /* AsyncKeyword */
+                || kind === 131 /* AwaitKeyword */
+                || kind === 127 /* AsKeyword */
                 || !ts.isContextualKeyword(kind) && !isClassMemberCompletionKeyword(kind);
         }
         function keywordForNode(node) {
@@ -126029,7 +128869,7 @@
         function tryGetObjectTypeDeclarationCompletionContainer(sourceFile, contextToken, location, position) {
             // class c { method() { } | method2() { } }
             switch (location.kind) {
-                case 338 /* SyntaxList */:
+                case 343 /* SyntaxList */:
                     return ts.tryCast(location.parent, ts.isObjectTypeDeclaration);
                 case 1 /* EndOfFileToken */:
                     var cls = ts.tryCast(ts.lastOrUndefined(ts.cast(location.parent, ts.isSourceFile).statements), ts.isObjectTypeDeclaration);
@@ -126037,7 +128877,7 @@
                         return cls;
                     }
                     break;
-                case 78 /* Identifier */: {
+                case 79 /* Identifier */: {
                     // class c { public prop = c| }
                     if (ts.isPropertyDeclaration(location.parent) && location.parent.initializer === location) {
                         return undefined;
@@ -126051,13 +128891,13 @@
             if (!contextToken)
                 return undefined;
             // class C { blah; constructor/**/ } and so on
-            if (location.kind === 132 /* ConstructorKeyword */
+            if (location.kind === 133 /* ConstructorKeyword */
                 // class C { blah \n constructor/**/ }
                 || (ts.isIdentifier(contextToken) && ts.isPropertyDeclaration(contextToken.parent) && ts.isClassLike(location))) {
                 return ts.findAncestor(contextToken, ts.isClassLike);
             }
             switch (contextToken.kind) {
-                case 62 /* EqualsToken */: // class c { public prop = | /* global completions */ }
+                case 63 /* EqualsToken */: // class c { public prop = | /* global completions */ }
                     return undefined;
                 case 26 /* SemicolonToken */: // class c {getValue(): number; | }
                 case 19 /* CloseBraceToken */: // class c { method() { } | }
@@ -126093,8 +128933,8 @@
                     break;
                 case 26 /* SemicolonToken */:
                 case 27 /* CommaToken */:
-                case 78 /* Identifier */:
-                    if (parent.kind === 163 /* PropertySignature */ && ts.isTypeLiteralNode(parent.parent)) {
+                case 79 /* Identifier */:
+                    if (parent.kind === 164 /* PropertySignature */ && ts.isTypeLiteralNode(parent.parent)) {
                         return parent.parent;
                     }
                     break;
@@ -126111,11 +128951,11 @@
             if (!t)
                 return undefined;
             switch (node.kind) {
-                case 163 /* PropertySignature */:
+                case 164 /* PropertySignature */:
                     return checker.getTypeOfPropertyOfContextualType(t, node.symbol.escapedName);
-                case 184 /* IntersectionType */:
-                case 178 /* TypeLiteral */:
-                case 183 /* UnionType */:
+                case 186 /* IntersectionType */:
+                case 180 /* TypeLiteral */:
+                case 185 /* UnionType */:
                     return t;
             }
         }
@@ -126143,7 +128983,7 @@
                         ? !!ts.tryGetImportFromModuleSpecifier(contextToken)
                         : contextToken.kind === 43 /* SlashToken */ && ts.isJsxClosingElement(contextToken.parent));
                 case " ":
-                    return !!contextToken && ts.isImportKeyword(contextToken) && contextToken.parent.kind === 298 /* SourceFile */;
+                    return !!contextToken && ts.isImportKeyword(contextToken) && contextToken.parent.kind === 300 /* SourceFile */;
                 default:
                     return ts.Debug.assertNever(triggerCharacter);
             }
@@ -126178,7 +129018,7 @@
             if (type) {
                 return type;
             }
-            if (ts.isBinaryExpression(node.parent) && node.parent.operatorToken.kind === 62 /* EqualsToken */ && node === node.parent.left) {
+            if (ts.isBinaryExpression(node.parent) && node.parent.operatorToken.kind === 63 /* EqualsToken */ && node === node.parent.left) {
                 // Object literal is assignment pattern: ({ | } = x)
                 return typeChecker.getTypeAtLocation(node.parent);
             }
@@ -126186,7 +129026,7 @@
         }
         function getImportCompletionNode(contextToken) {
             var candidate = getCandidate();
-            return candidate === 153 /* FromKeyword */ || candidate && ts.rangeIsOnSingleLine(candidate, candidate.getSourceFile()) ? candidate : undefined;
+            return candidate === 154 /* FromKeyword */ || candidate && ts.rangeIsOnSingleLine(candidate, candidate.getSourceFile()) ? candidate : undefined;
             function getCandidate() {
                 var parent = contextToken.parent;
                 if (ts.isImportEqualsDeclaration(parent)) {
@@ -126195,8 +129035,8 @@
                 if (ts.isNamedImports(parent) || ts.isNamespaceImport(parent)) {
                     if (isModuleSpecifierMissingOrEmpty(parent.parent.parent.moduleSpecifier) && (ts.isNamespaceImport(parent) || parent.elements.length < 2) && !parent.parent.name) {
                         // At `import { ... } |` or `import * as Foo |`, the only possible completion is `from`
-                        return contextToken.kind === 19 /* CloseBraceToken */ || contextToken.kind === 78 /* Identifier */
-                            ? 153 /* FromKeyword */
+                        return contextToken.kind === 19 /* CloseBraceToken */ || contextToken.kind === 79 /* Identifier */
+                            ? 154 /* FromKeyword */
                             : parent.parent.parent;
                     }
                     return undefined;
@@ -126234,11 +129074,63 @@
         function symbolCanBeReferencedAtTypeLocation(symbol, checker, seenModules) {
             if (seenModules === void 0) { seenModules = new ts.Map(); }
             var sym = ts.skipAlias(symbol.exportSymbol || symbol, checker);
-            return !!(sym.flags & 788968 /* Type */) ||
-                !!(sym.flags & 1536 /* Module */) &&
-                    ts.addToSeen(seenModules, ts.getSymbolId(sym)) &&
+            return !!(sym.flags & 788968 /* Type */) || checker.isUnknownSymbol(sym) ||
+                !!(sym.flags & 1536 /* Module */) && ts.addToSeen(seenModules, ts.getSymbolId(sym)) &&
                     checker.getExportsOfModule(sym).some(function (e) { return symbolCanBeReferencedAtTypeLocation(e, checker, seenModules); });
         }
+        function isDeprecated(symbol, checker) {
+            var declarations = ts.skipAlias(symbol, checker).declarations;
+            return !!ts.length(declarations) && ts.every(declarations, ts.isDeprecatedDeclaration);
+        }
+        /**
+         * True if the first character of `lowercaseCharacters` is the first character
+         * of some "word" in `identiferString` (where the string is split into "words"
+         * by camelCase and snake_case segments), then if the remaining characters of
+         * `lowercaseCharacters` appear, in order, in the rest of `identifierString`.
+         *
+         * True:
+         * 'state' in 'useState'
+         * 'sae' in 'useState'
+         * 'viable' in 'ENVIRONMENT_VARIABLE'
+         *
+         * False:
+         * 'staet' in 'useState'
+         * 'tate' in 'useState'
+         * 'ment' in 'ENVIRONMENT_VARIABLE'
+         */
+        function charactersFuzzyMatchInString(identifierString, lowercaseCharacters) {
+            if (lowercaseCharacters.length === 0) {
+                return true;
+            }
+            var matchedFirstCharacter = false;
+            var prevChar;
+            var characterIndex = 0;
+            var len = identifierString.length;
+            for (var strIndex = 0; strIndex < len; strIndex++) {
+                var strChar = identifierString.charCodeAt(strIndex);
+                var testChar = lowercaseCharacters.charCodeAt(characterIndex);
+                if (strChar === testChar || strChar === toUpperCharCode(testChar)) {
+                    matchedFirstCharacter || (matchedFirstCharacter = prevChar === undefined || // Beginning of word
+                        97 /* a */ <= prevChar && prevChar <= 122 /* z */ && 65 /* A */ <= strChar && strChar <= 90 /* Z */ || // camelCase transition
+                        prevChar === 95 /* _ */ && strChar !== 95 /* _ */); // snake_case transition
+                    if (matchedFirstCharacter) {
+                        characterIndex++;
+                    }
+                    if (characterIndex === lowercaseCharacters.length) {
+                        return true;
+                    }
+                }
+                prevChar = strChar;
+            }
+            // Did not find all characters
+            return false;
+        }
+        function toUpperCharCode(charCode) {
+            if (97 /* a */ <= charCode && charCode <= 122 /* z */) {
+                return charCode - 32;
+            }
+            return charCode;
+        }
     })(Completions = ts.Completions || (ts.Completions = {}));
 })(ts || (ts = {}));
 var ts;
@@ -126273,10 +129165,11 @@
             if (!referenceEntries)
                 return undefined;
             var map = ts.arrayToMultiMap(referenceEntries.map(ts.FindAllReferences.toHighlightSpan), function (e) { return e.fileName; }, function (e) { return e.span; });
+            var getCanonicalFileName = ts.createGetCanonicalFileName(program.useCaseSensitiveFileNames());
             return ts.mapDefined(ts.arrayFrom(map.entries()), function (_a) {
                 var fileName = _a[0], highlightSpans = _a[1];
                 if (!sourceFilesSet.has(fileName)) {
-                    if (!program.redirectTargetsMap.has(fileName)) {
+                    if (!program.redirectTargetsMap.has(ts.toPath(fileName, program.getCurrentDirectory(), getCanonicalFileName))) {
                         return undefined;
                     }
                     var redirectTarget_1 = program.getSourceFile(fileName);
@@ -126293,44 +129186,44 @@
         }
         function getHighlightSpans(node, sourceFile) {
             switch (node.kind) {
-                case 98 /* IfKeyword */:
-                case 90 /* ElseKeyword */:
+                case 99 /* IfKeyword */:
+                case 91 /* ElseKeyword */:
                     return ts.isIfStatement(node.parent) ? getIfElseOccurrences(node.parent, sourceFile) : undefined;
-                case 104 /* ReturnKeyword */:
+                case 105 /* ReturnKeyword */:
                     return useParent(node.parent, ts.isReturnStatement, getReturnOccurrences);
-                case 108 /* ThrowKeyword */:
+                case 109 /* ThrowKeyword */:
                     return useParent(node.parent, ts.isThrowStatement, getThrowOccurrences);
-                case 110 /* TryKeyword */:
-                case 82 /* CatchKeyword */:
-                case 95 /* FinallyKeyword */:
-                    var tryStatement = node.kind === 82 /* CatchKeyword */ ? node.parent.parent : node.parent;
+                case 111 /* TryKeyword */:
+                case 83 /* CatchKeyword */:
+                case 96 /* FinallyKeyword */:
+                    var tryStatement = node.kind === 83 /* CatchKeyword */ ? node.parent.parent : node.parent;
                     return useParent(tryStatement, ts.isTryStatement, getTryCatchFinallyOccurrences);
-                case 106 /* SwitchKeyword */:
+                case 107 /* SwitchKeyword */:
                     return useParent(node.parent, ts.isSwitchStatement, getSwitchCaseDefaultOccurrences);
-                case 81 /* CaseKeyword */:
-                case 87 /* DefaultKeyword */: {
+                case 82 /* CaseKeyword */:
+                case 88 /* DefaultKeyword */: {
                     if (ts.isDefaultClause(node.parent) || ts.isCaseClause(node.parent)) {
                         return useParent(node.parent.parent.parent, ts.isSwitchStatement, getSwitchCaseDefaultOccurrences);
                     }
                     return undefined;
                 }
-                case 80 /* BreakKeyword */:
-                case 85 /* ContinueKeyword */:
+                case 81 /* BreakKeyword */:
+                case 86 /* ContinueKeyword */:
                     return useParent(node.parent, ts.isBreakOrContinueStatement, getBreakOrContinueStatementOccurrences);
-                case 96 /* ForKeyword */:
-                case 114 /* WhileKeyword */:
-                case 89 /* DoKeyword */:
+                case 97 /* ForKeyword */:
+                case 115 /* WhileKeyword */:
+                case 90 /* DoKeyword */:
                     return useParent(node.parent, function (n) { return ts.isIterationStatement(n, /*lookInLabeledStatements*/ true); }, getLoopBreakContinueOccurrences);
-                case 132 /* ConstructorKeyword */:
-                    return getFromAllDeclarations(ts.isConstructorDeclaration, [132 /* ConstructorKeyword */]);
-                case 134 /* GetKeyword */:
-                case 146 /* SetKeyword */:
-                    return getFromAllDeclarations(ts.isAccessor, [134 /* GetKeyword */, 146 /* SetKeyword */]);
-                case 130 /* AwaitKeyword */:
+                case 133 /* ConstructorKeyword */:
+                    return getFromAllDeclarations(ts.isConstructorDeclaration, [133 /* ConstructorKeyword */]);
+                case 135 /* GetKeyword */:
+                case 147 /* SetKeyword */:
+                    return getFromAllDeclarations(ts.isAccessor, [135 /* GetKeyword */, 147 /* SetKeyword */]);
+                case 131 /* AwaitKeyword */:
                     return useParent(node.parent, ts.isAwaitExpression, getAsyncAndAwaitOccurrences);
-                case 129 /* AsyncKeyword */:
+                case 130 /* AsyncKeyword */:
                     return highlightSpans(getAsyncAndAwaitOccurrences(node));
-                case 124 /* YieldKeyword */:
+                case 125 /* YieldKeyword */:
                     return highlightSpans(getYieldOccurrences(node));
                 default:
                     return ts.isModifierKind(node.kind) && (ts.isDeclaration(node.parent) || ts.isVariableStatement(node.parent))
@@ -126373,7 +129266,7 @@
             var child = throwStatement;
             while (child.parent) {
                 var parent = child.parent;
-                if (ts.isFunctionBlock(parent) || parent.kind === 298 /* SourceFile */) {
+                if (ts.isFunctionBlock(parent) || parent.kind === 300 /* SourceFile */) {
                     return parent;
                 }
                 // A throw-statement is only owned by a try-statement if the try-statement has
@@ -126405,16 +129298,16 @@
         function getBreakOrContinueOwner(statement) {
             return ts.findAncestor(statement, function (node) {
                 switch (node.kind) {
-                    case 245 /* SwitchStatement */:
-                        if (statement.kind === 241 /* ContinueStatement */) {
+                    case 247 /* SwitchStatement */:
+                        if (statement.kind === 243 /* ContinueStatement */) {
                             return false;
                         }
                     // falls through
-                    case 238 /* ForStatement */:
-                    case 239 /* ForInStatement */:
-                    case 240 /* ForOfStatement */:
-                    case 237 /* WhileStatement */:
-                    case 236 /* DoStatement */:
+                    case 240 /* ForStatement */:
+                    case 241 /* ForInStatement */:
+                    case 242 /* ForOfStatement */:
+                    case 239 /* WhileStatement */:
+                    case 238 /* DoStatement */:
                         return !statement.label || isLabeledBy(node, statement.label.escapedText);
                     default:
                         // Don't cross function boundaries.
@@ -126430,41 +129323,41 @@
             // Types of node whose children might have modifiers.
             var container = declaration.parent;
             switch (container.kind) {
-                case 258 /* ModuleBlock */:
-                case 298 /* SourceFile */:
-                case 231 /* Block */:
-                case 285 /* CaseClause */:
-                case 286 /* DefaultClause */:
+                case 260 /* ModuleBlock */:
+                case 300 /* SourceFile */:
+                case 233 /* Block */:
+                case 287 /* CaseClause */:
+                case 288 /* DefaultClause */:
                     // Container is either a class declaration or the declaration is a classDeclaration
                     if (modifierFlag & 128 /* Abstract */ && ts.isClassDeclaration(declaration)) {
-                        return __spreadArray(__spreadArray([], declaration.members), [declaration]);
+                        return __spreadArray(__spreadArray([], declaration.members, true), [declaration], false);
                     }
                     else {
                         return container.statements;
                     }
-                case 167 /* Constructor */:
-                case 166 /* MethodDeclaration */:
-                case 252 /* FunctionDeclaration */:
-                    return __spreadArray(__spreadArray([], container.parameters), (ts.isClassLike(container.parent) ? container.parent.members : []));
-                case 253 /* ClassDeclaration */:
-                case 222 /* ClassExpression */:
-                case 254 /* InterfaceDeclaration */:
-                case 178 /* TypeLiteral */:
+                case 169 /* Constructor */:
+                case 167 /* MethodDeclaration */:
+                case 254 /* FunctionDeclaration */:
+                    return __spreadArray(__spreadArray([], container.parameters, true), (ts.isClassLike(container.parent) ? container.parent.members : []), true);
+                case 255 /* ClassDeclaration */:
+                case 224 /* ClassExpression */:
+                case 256 /* InterfaceDeclaration */:
+                case 180 /* TypeLiteral */:
                     var nodes = container.members;
                     // If we're an accessibility modifier, we're in an instance member and should search
                     // the constructor's parameter list for instance members as well.
                     if (modifierFlag & (28 /* AccessibilityModifier */ | 64 /* Readonly */)) {
                         var constructor = ts.find(container.members, ts.isConstructorDeclaration);
                         if (constructor) {
-                            return __spreadArray(__spreadArray([], nodes), constructor.parameters);
+                            return __spreadArray(__spreadArray([], nodes, true), constructor.parameters, true);
                         }
                     }
                     else if (modifierFlag & 128 /* Abstract */) {
-                        return __spreadArray(__spreadArray([], nodes), [container]);
+                        return __spreadArray(__spreadArray([], nodes, true), [container], false);
                     }
                     return nodes;
                 // Syntactically invalid positions that the parser might produce anyway
-                case 201 /* ObjectLiteralExpression */:
+                case 203 /* ObjectLiteralExpression */:
                     return undefined;
                 default:
                     ts.Debug.assertNever(container, "Invalid container kind.");
@@ -126483,12 +129376,12 @@
         }
         function getLoopBreakContinueOccurrences(loopNode) {
             var keywords = [];
-            if (pushKeywordIf(keywords, loopNode.getFirstToken(), 96 /* ForKeyword */, 114 /* WhileKeyword */, 89 /* DoKeyword */)) {
+            if (pushKeywordIf(keywords, loopNode.getFirstToken(), 97 /* ForKeyword */, 115 /* WhileKeyword */, 90 /* DoKeyword */)) {
                 // If we succeeded and got a do-while loop, then start looking for a 'while' keyword.
-                if (loopNode.kind === 236 /* DoStatement */) {
+                if (loopNode.kind === 238 /* DoStatement */) {
                     var loopTokens = loopNode.getChildren();
                     for (var i = loopTokens.length - 1; i >= 0; i--) {
-                        if (pushKeywordIf(keywords, loopTokens[i], 114 /* WhileKeyword */)) {
+                        if (pushKeywordIf(keywords, loopTokens[i], 115 /* WhileKeyword */)) {
                             break;
                         }
                     }
@@ -126496,7 +129389,7 @@
             }
             ts.forEach(aggregateAllBreakAndContinueStatements(loopNode.statement), function (statement) {
                 if (ownsBreakOrContinueStatement(loopNode, statement)) {
-                    pushKeywordIf(keywords, statement.getFirstToken(), 80 /* BreakKeyword */, 85 /* ContinueKeyword */);
+                    pushKeywordIf(keywords, statement.getFirstToken(), 81 /* BreakKeyword */, 86 /* ContinueKeyword */);
                 }
             });
             return keywords;
@@ -126505,13 +129398,13 @@
             var owner = getBreakOrContinueOwner(breakOrContinueStatement);
             if (owner) {
                 switch (owner.kind) {
-                    case 238 /* ForStatement */:
-                    case 239 /* ForInStatement */:
-                    case 240 /* ForOfStatement */:
-                    case 236 /* DoStatement */:
-                    case 237 /* WhileStatement */:
+                    case 240 /* ForStatement */:
+                    case 241 /* ForInStatement */:
+                    case 242 /* ForOfStatement */:
+                    case 238 /* DoStatement */:
+                    case 239 /* WhileStatement */:
                         return getLoopBreakContinueOccurrences(owner);
-                    case 245 /* SwitchStatement */:
+                    case 247 /* SwitchStatement */:
                         return getSwitchCaseDefaultOccurrences(owner);
                 }
             }
@@ -126519,13 +129412,13 @@
         }
         function getSwitchCaseDefaultOccurrences(switchStatement) {
             var keywords = [];
-            pushKeywordIf(keywords, switchStatement.getFirstToken(), 106 /* SwitchKeyword */);
+            pushKeywordIf(keywords, switchStatement.getFirstToken(), 107 /* SwitchKeyword */);
             // Go through each clause in the switch statement, collecting the 'case'/'default' keywords.
             ts.forEach(switchStatement.caseBlock.clauses, function (clause) {
-                pushKeywordIf(keywords, clause.getFirstToken(), 81 /* CaseKeyword */, 87 /* DefaultKeyword */);
+                pushKeywordIf(keywords, clause.getFirstToken(), 82 /* CaseKeyword */, 88 /* DefaultKeyword */);
                 ts.forEach(aggregateAllBreakAndContinueStatements(clause), function (statement) {
                     if (ownsBreakOrContinueStatement(switchStatement, statement)) {
-                        pushKeywordIf(keywords, statement.getFirstToken(), 80 /* BreakKeyword */);
+                        pushKeywordIf(keywords, statement.getFirstToken(), 81 /* BreakKeyword */);
                     }
                 });
             });
@@ -126533,13 +129426,13 @@
         }
         function getTryCatchFinallyOccurrences(tryStatement, sourceFile) {
             var keywords = [];
-            pushKeywordIf(keywords, tryStatement.getFirstToken(), 110 /* TryKeyword */);
+            pushKeywordIf(keywords, tryStatement.getFirstToken(), 111 /* TryKeyword */);
             if (tryStatement.catchClause) {
-                pushKeywordIf(keywords, tryStatement.catchClause.getFirstToken(), 82 /* CatchKeyword */);
+                pushKeywordIf(keywords, tryStatement.catchClause.getFirstToken(), 83 /* CatchKeyword */);
             }
             if (tryStatement.finallyBlock) {
-                var finallyKeyword = ts.findChildOfKind(tryStatement, 95 /* FinallyKeyword */, sourceFile);
-                pushKeywordIf(keywords, finallyKeyword, 95 /* FinallyKeyword */);
+                var finallyKeyword = ts.findChildOfKind(tryStatement, 96 /* FinallyKeyword */, sourceFile);
+                pushKeywordIf(keywords, finallyKeyword, 96 /* FinallyKeyword */);
             }
             return keywords;
         }
@@ -126550,13 +129443,13 @@
             }
             var keywords = [];
             ts.forEach(aggregateOwnedThrowStatements(owner), function (throwStatement) {
-                keywords.push(ts.findChildOfKind(throwStatement, 108 /* ThrowKeyword */, sourceFile));
+                keywords.push(ts.findChildOfKind(throwStatement, 109 /* ThrowKeyword */, sourceFile));
             });
             // If the "owner" is a function, then we equate 'return' and 'throw' statements in their
             // ability to "jump out" of the function, and include occurrences for both.
             if (ts.isFunctionBlock(owner)) {
                 ts.forEachReturnStatement(owner, function (returnStatement) {
-                    keywords.push(ts.findChildOfKind(returnStatement, 104 /* ReturnKeyword */, sourceFile));
+                    keywords.push(ts.findChildOfKind(returnStatement, 105 /* ReturnKeyword */, sourceFile));
                 });
             }
             return keywords;
@@ -126568,11 +129461,11 @@
             }
             var keywords = [];
             ts.forEachReturnStatement(ts.cast(func.body, ts.isBlock), function (returnStatement) {
-                keywords.push(ts.findChildOfKind(returnStatement, 104 /* ReturnKeyword */, sourceFile));
+                keywords.push(ts.findChildOfKind(returnStatement, 105 /* ReturnKeyword */, sourceFile));
             });
             // Include 'throw' statements that do not occur within a try block.
             ts.forEach(aggregateOwnedThrowStatements(func.body), function (throwStatement) {
-                keywords.push(ts.findChildOfKind(throwStatement, 108 /* ThrowKeyword */, sourceFile));
+                keywords.push(ts.findChildOfKind(throwStatement, 109 /* ThrowKeyword */, sourceFile));
             });
             return keywords;
         }
@@ -126584,13 +129477,13 @@
             var keywords = [];
             if (func.modifiers) {
                 func.modifiers.forEach(function (modifier) {
-                    pushKeywordIf(keywords, modifier, 129 /* AsyncKeyword */);
+                    pushKeywordIf(keywords, modifier, 130 /* AsyncKeyword */);
                 });
             }
             ts.forEachChild(func, function (child) {
                 traverseWithoutCrossingFunction(child, function (node) {
                     if (ts.isAwaitExpression(node)) {
-                        pushKeywordIf(keywords, node.getFirstToken(), 130 /* AwaitKeyword */);
+                        pushKeywordIf(keywords, node.getFirstToken(), 131 /* AwaitKeyword */);
                     }
                 });
             });
@@ -126605,7 +129498,7 @@
             ts.forEachChild(func, function (child) {
                 traverseWithoutCrossingFunction(child, function (node) {
                     if (ts.isYieldExpression(node)) {
-                        pushKeywordIf(keywords, node.getFirstToken(), 124 /* YieldKeyword */);
+                        pushKeywordIf(keywords, node.getFirstToken(), 125 /* YieldKeyword */);
                     }
                 });
             });
@@ -126624,7 +129517,7 @@
             // We'd like to highlight else/ifs together if they are only separated by whitespace
             // (i.e. the keywords are separated by no comments, no newlines).
             for (var i = 0; i < keywords.length; i++) {
-                if (keywords[i].kind === 90 /* ElseKeyword */ && i < keywords.length - 1) {
+                if (keywords[i].kind === 91 /* ElseKeyword */ && i < keywords.length - 1) {
                     var elseKeyword = keywords[i];
                     var ifKeyword = keywords[i + 1]; // this *should* always be an 'if' keyword.
                     var shouldCombineElseAndIf = true;
@@ -126659,10 +129552,10 @@
             // Now traverse back down through the else branches, aggregating if/else keywords of if-statements.
             while (true) {
                 var children = ifStatement.getChildren(sourceFile);
-                pushKeywordIf(keywords, children[0], 98 /* IfKeyword */);
+                pushKeywordIf(keywords, children[0], 99 /* IfKeyword */);
                 // Generally the 'else' keyword is second-to-last, so we traverse backwards.
                 for (var i = children.length - 1; i >= 0; i--) {
-                    if (pushKeywordIf(keywords, children[i], 90 /* ElseKeyword */)) {
+                    if (pushKeywordIf(keywords, children[i], 91 /* ElseKeyword */)) {
                         break;
                     }
                 }
@@ -126920,43 +129813,43 @@
                         if (cancellationToken)
                             cancellationToken.throwIfCancellationRequested();
                         switch (direct.kind) {
-                            case 204 /* CallExpression */:
+                            case 206 /* CallExpression */:
                                 if (ts.isImportCall(direct)) {
                                     handleImportCall(direct);
                                     break;
                                 }
                                 if (!isAvailableThroughGlobal) {
                                     var parent = direct.parent;
-                                    if (exportKind === 2 /* ExportEquals */ && parent.kind === 250 /* VariableDeclaration */) {
+                                    if (exportKind === 2 /* ExportEquals */ && parent.kind === 252 /* VariableDeclaration */) {
                                         var name = parent.name;
-                                        if (name.kind === 78 /* Identifier */) {
+                                        if (name.kind === 79 /* Identifier */) {
                                             directImports.push(name);
                                             break;
                                         }
                                     }
                                 }
                                 break;
-                            case 78 /* Identifier */: // for 'const x = require("y");
+                            case 79 /* Identifier */: // for 'const x = require("y");
                                 break; // TODO: GH#23879
-                            case 261 /* ImportEqualsDeclaration */:
+                            case 263 /* ImportEqualsDeclaration */:
                                 handleNamespaceImport(direct, direct.name, ts.hasSyntacticModifier(direct, 1 /* Export */), /*alreadyAddedDirect*/ false);
                                 break;
-                            case 262 /* ImportDeclaration */:
+                            case 264 /* ImportDeclaration */:
                                 directImports.push(direct);
                                 var namedBindings = direct.importClause && direct.importClause.namedBindings;
-                                if (namedBindings && namedBindings.kind === 264 /* NamespaceImport */) {
+                                if (namedBindings && namedBindings.kind === 266 /* NamespaceImport */) {
                                     handleNamespaceImport(direct, namedBindings.name, /*isReExport*/ false, /*alreadyAddedDirect*/ true);
                                 }
                                 else if (!isAvailableThroughGlobal && ts.isDefaultImport(direct)) {
                                     addIndirectUser(getSourceFileLikeForImportDeclaration(direct)); // Add a check for indirect uses to handle synthetic default imports
                                 }
                                 break;
-                            case 268 /* ExportDeclaration */:
+                            case 270 /* ExportDeclaration */:
                                 if (!direct.exportClause) {
                                     // This is `export * from "foo"`, so imports of this module may import the export too.
                                     handleDirectImports(getContainingModuleSymbol(direct, checker));
                                 }
-                                else if (direct.exportClause.kind === 270 /* NamespaceExport */) {
+                                else if (direct.exportClause.kind === 272 /* NamespaceExport */) {
                                     // `export * as foo from "foo"` add to indirect uses
                                     addIndirectUser(getSourceFileLikeForImportDeclaration(direct), /** addTransitiveDependencies */ true);
                                 }
@@ -126965,7 +129858,7 @@
                                     directImports.push(direct);
                                 }
                                 break;
-                            case 196 /* ImportType */:
+                            case 198 /* ImportType */:
                                 // Only check for typeof import('xyz')
                                 if (direct.isTypeOf && !direct.qualifier && isExported(direct)) {
                                     addIndirectUser(direct.getSourceFile(), /** addTransitiveDependencies */ true);
@@ -126987,7 +129880,7 @@
                 return ts.findAncestor(node, function (node) {
                     if (stopAtAmbientModule && isAmbientModuleDeclaration(node))
                         return "quit";
-                    return ts.some(node.modifiers, function (mod) { return mod.kind === 92 /* ExportKeyword */; });
+                    return ts.some(node.modifiers, function (mod) { return mod.kind === 93 /* ExportKeyword */; });
                 });
             }
             function handleNamespaceImport(importDeclaration, name, isReExport, alreadyAddedDirect) {
@@ -126998,7 +129891,7 @@
                 }
                 else if (!isAvailableThroughGlobal) {
                     var sourceFileLike = getSourceFileLikeForImportDeclaration(importDeclaration);
-                    ts.Debug.assert(sourceFileLike.kind === 298 /* SourceFile */ || sourceFileLike.kind === 257 /* ModuleDeclaration */);
+                    ts.Debug.assert(sourceFileLike.kind === 300 /* SourceFile */ || sourceFileLike.kind === 259 /* ModuleDeclaration */);
                     if (isReExport || findNamespaceReExports(sourceFileLike, name, checker)) {
                         addIndirectUser(sourceFileLike, /** addTransitiveDependencies */ true);
                     }
@@ -127054,17 +129947,17 @@
             }
             return { importSearches: importSearches, singleReferences: singleReferences };
             function handleImport(decl) {
-                if (decl.kind === 261 /* ImportEqualsDeclaration */) {
+                if (decl.kind === 263 /* ImportEqualsDeclaration */) {
                     if (isExternalModuleImportEquals(decl)) {
                         handleNamespaceImportLike(decl.name);
                     }
                     return;
                 }
-                if (decl.kind === 78 /* Identifier */) {
+                if (decl.kind === 79 /* Identifier */) {
                     handleNamespaceImportLike(decl);
                     return;
                 }
-                if (decl.kind === 196 /* ImportType */) {
+                if (decl.kind === 198 /* ImportType */) {
                     if (decl.qualifier) {
                         var firstIdentifier = ts.getFirstIdentifier(decl.qualifier);
                         if (firstIdentifier.escapedText === ts.symbolName(exportSymbol)) {
@@ -127080,7 +129973,7 @@
                 if (decl.moduleSpecifier.kind !== 10 /* StringLiteral */) {
                     return;
                 }
-                if (decl.kind === 268 /* ExportDeclaration */) {
+                if (decl.kind === 270 /* ExportDeclaration */) {
                     if (decl.exportClause && ts.isNamedExports(decl.exportClause)) {
                         searchForNamedImport(decl.exportClause);
                     }
@@ -127089,10 +129982,10 @@
                 var _a = decl.importClause || { name: undefined, namedBindings: undefined }, name = _a.name, namedBindings = _a.namedBindings;
                 if (namedBindings) {
                     switch (namedBindings.kind) {
-                        case 264 /* NamespaceImport */:
+                        case 266 /* NamespaceImport */:
                             handleNamespaceImportLike(namedBindings.name);
                             break;
-                        case 265 /* NamedImports */:
+                        case 267 /* NamedImports */:
                             // 'default' might be accessed as a named import `{ default as foo }`.
                             if (exportKind === 0 /* Named */ || exportKind === 1 /* Default */) {
                                 searchForNamedImport(namedBindings);
@@ -127142,7 +130035,7 @@
                         }
                     }
                     else {
-                        var localSymbol = element.kind === 271 /* ExportSpecifier */ && element.propertyName
+                        var localSymbol = element.kind === 273 /* ExportSpecifier */ && element.propertyName
                             ? checker.getExportSpecifierLocalTargetSymbol(element) // For re-exporting under a different name, we want to get the re-exported symbol.
                             : checker.getSymbolAtLocation(name);
                         addSearch(name, localSymbol);
@@ -127171,7 +130064,7 @@
             for (var _i = 0, sourceFiles_1 = sourceFiles; _i < sourceFiles_1.length; _i++) {
                 var referencingFile = sourceFiles_1[_i];
                 var searchSourceFile = searchModuleSymbol.valueDeclaration;
-                if ((searchSourceFile === null || searchSourceFile === void 0 ? void 0 : searchSourceFile.kind) === 298 /* SourceFile */) {
+                if ((searchSourceFile === null || searchSourceFile === void 0 ? void 0 : searchSourceFile.kind) === 300 /* SourceFile */) {
                     for (var _a = 0, _b = referencingFile.referencedFiles; _a < _b.length; _a++) {
                         var ref = _b[_a];
                         if (program.getSourceFileFromReference(referencingFile, ref) === searchSourceFile) {
@@ -127219,7 +130112,7 @@
         }
         /** Iterates over all statements at the top level or in module declarations. Returns the first truthy result. */
         function forEachPossibleImportOrExportStatement(sourceFileLike, action) {
-            return ts.forEach(sourceFileLike.kind === 298 /* SourceFile */ ? sourceFileLike.statements : sourceFileLike.body.statements, function (statement) {
+            return ts.forEach(sourceFileLike.kind === 300 /* SourceFile */ ? sourceFileLike.statements : sourceFileLike.body.statements, function (statement) {
                 return action(statement) || (isAmbientModuleDeclaration(statement) && ts.forEach(statement.body && statement.body.statements, action));
             });
         }
@@ -127234,15 +130127,15 @@
             else {
                 forEachPossibleImportOrExportStatement(sourceFile, function (statement) {
                     switch (statement.kind) {
-                        case 268 /* ExportDeclaration */:
-                        case 262 /* ImportDeclaration */: {
+                        case 270 /* ExportDeclaration */:
+                        case 264 /* ImportDeclaration */: {
                             var decl = statement;
                             if (decl.moduleSpecifier && ts.isStringLiteral(decl.moduleSpecifier)) {
                                 action(decl, decl.moduleSpecifier);
                             }
                             break;
                         }
-                        case 261 /* ImportEqualsDeclaration */: {
+                        case 263 /* ImportEqualsDeclaration */: {
                             var decl = statement;
                             if (isExternalModuleImportEquals(decl)) {
                                 action(decl, decl.moduleReference.expression);
@@ -127267,7 +130160,7 @@
                 var parent = node.parent;
                 var grandparent = parent.parent;
                 if (symbol.exportSymbol) {
-                    if (parent.kind === 202 /* PropertyAccessExpression */) {
+                    if (parent.kind === 204 /* PropertyAccessExpression */) {
                         // When accessing an export of a JS module, there's no alias. The symbol will still be flagged as an export even though we're at the use.
                         // So check that we are at the declaration.
                         return ((_a = symbol.declarations) === null || _a === void 0 ? void 0 : _a.some(function (d) { return d === parent; })) && ts.isBinaryExpression(grandparent)
@@ -127401,16 +130294,16 @@
         function isNodeImport(node) {
             var parent = node.parent;
             switch (parent.kind) {
-                case 261 /* ImportEqualsDeclaration */:
+                case 263 /* ImportEqualsDeclaration */:
                     return parent.name === node && isExternalModuleImportEquals(parent);
-                case 266 /* ImportSpecifier */:
+                case 268 /* ImportSpecifier */:
                     // For a rename import `{ foo as bar }`, don't search for the imported symbol. Just find local uses of `bar`.
                     return !parent.propertyName;
-                case 263 /* ImportClause */:
-                case 264 /* NamespaceImport */:
+                case 265 /* ImportClause */:
+                case 266 /* NamespaceImport */:
                     ts.Debug.assert(parent.name === node);
                     return true;
-                case 199 /* BindingElement */:
+                case 201 /* BindingElement */:
                     return ts.isInJSFile(node) && ts.isRequireVariableDeclaration(parent);
                 default:
                     return false;
@@ -127451,21 +130344,21 @@
             return checker.getMergedSymbol(getSourceFileLikeForImportDeclaration(importer).symbol);
         }
         function getSourceFileLikeForImportDeclaration(node) {
-            if (node.kind === 204 /* CallExpression */) {
+            if (node.kind === 206 /* CallExpression */) {
                 return node.getSourceFile();
             }
             var parent = node.parent;
-            if (parent.kind === 298 /* SourceFile */) {
+            if (parent.kind === 300 /* SourceFile */) {
                 return parent;
             }
-            ts.Debug.assert(parent.kind === 258 /* ModuleBlock */);
+            ts.Debug.assert(parent.kind === 260 /* ModuleBlock */);
             return ts.cast(parent.parent, isAmbientModuleDeclaration);
         }
         function isAmbientModuleDeclaration(node) {
-            return node.kind === 257 /* ModuleDeclaration */ && node.name.kind === 10 /* StringLiteral */;
+            return node.kind === 259 /* ModuleDeclaration */ && node.name.kind === 10 /* StringLiteral */;
         }
         function isExternalModuleImportEquals(eq) {
-            return eq.moduleReference.kind === 273 /* ExternalModuleReference */ && eq.moduleReference.expression.kind === 10 /* StringLiteral */;
+            return eq.moduleReference.kind === 275 /* ExternalModuleReference */ && eq.moduleReference.expression.kind === 10 /* StringLiteral */;
         }
     })(FindAllReferences = ts.FindAllReferences || (ts.FindAllReferences = {}));
 })(ts || (ts = {}));
@@ -127559,7 +130452,7 @@
                 ((ts.isImportOrExportSpecifier(node.parent) || ts.isBindingElement(node.parent))
                     && node.parent.propertyName === node) ||
                 // Is default export
-                (node.kind === 87 /* DefaultKeyword */ && ts.hasSyntacticModifier(node.parent, 513 /* ExportDefault */))) {
+                (node.kind === 88 /* DefaultKeyword */ && ts.hasSyntacticModifier(node.parent, 513 /* ExportDefault */))) {
                 return getContextNode(node.parent);
             }
             return undefined;
@@ -127568,7 +130461,7 @@
             if (!node)
                 return undefined;
             switch (node.kind) {
-                case 250 /* VariableDeclaration */:
+                case 252 /* VariableDeclaration */:
                     return !ts.isVariableDeclarationList(node.parent) || node.parent.declarations.length !== 1 ?
                         node :
                         ts.isVariableStatement(node.parent.parent) ?
@@ -127576,28 +130469,28 @@
                             ts.isForInOrOfStatement(node.parent.parent) ?
                                 getContextNode(node.parent.parent) :
                                 node.parent;
-                case 199 /* BindingElement */:
+                case 201 /* BindingElement */:
                     return getContextNode(node.parent.parent);
-                case 266 /* ImportSpecifier */:
+                case 268 /* ImportSpecifier */:
                     return node.parent.parent.parent;
-                case 271 /* ExportSpecifier */:
-                case 264 /* NamespaceImport */:
+                case 273 /* ExportSpecifier */:
+                case 266 /* NamespaceImport */:
                     return node.parent.parent;
-                case 263 /* ImportClause */:
-                case 270 /* NamespaceExport */:
+                case 265 /* ImportClause */:
+                case 272 /* NamespaceExport */:
                     return node.parent;
-                case 217 /* BinaryExpression */:
+                case 219 /* BinaryExpression */:
                     return ts.isExpressionStatement(node.parent) ?
                         node.parent :
                         node;
-                case 240 /* ForOfStatement */:
-                case 239 /* ForInStatement */:
+                case 242 /* ForOfStatement */:
+                case 241 /* ForInStatement */:
                     return {
                         start: node.initializer,
                         end: node.expression
                     };
-                case 289 /* PropertyAssignment */:
-                case 290 /* ShorthandPropertyAssignment */:
+                case 291 /* PropertyAssignment */:
+                case 292 /* ShorthandPropertyAssignment */:
                     return ts.isArrayLiteralOrObjectLiteralDestructuringPattern(node.parent) ?
                         getContextNode(ts.findAncestor(node.parent, function (node) {
                             return ts.isBinaryExpression(node) || ts.isForInOrOfStatement(node);
@@ -127654,14 +130547,14 @@
             var node = ts.getTouchingPropertyName(sourceFile, position);
             var referenceEntries;
             var entries = getImplementationReferenceEntries(program, cancellationToken, sourceFiles, node, position);
-            if (node.parent.kind === 202 /* PropertyAccessExpression */
-                || node.parent.kind === 199 /* BindingElement */
-                || node.parent.kind === 203 /* ElementAccessExpression */
-                || node.kind === 105 /* SuperKeyword */) {
-                referenceEntries = entries && __spreadArray([], entries);
+            if (node.parent.kind === 204 /* PropertyAccessExpression */
+                || node.parent.kind === 201 /* BindingElement */
+                || node.parent.kind === 205 /* ElementAccessExpression */
+                || node.kind === 106 /* SuperKeyword */) {
+                referenceEntries = entries && __spreadArray([], entries, true);
             }
             else {
-                var queue = entries && __spreadArray([], entries);
+                var queue = entries && __spreadArray([], entries, true);
                 var seenNodes = new ts.Map();
                 while (queue && queue.length) {
                     var entry = queue.shift();
@@ -127680,18 +130573,18 @@
         }
         FindAllReferences.getImplementationsAtPosition = getImplementationsAtPosition;
         function getImplementationReferenceEntries(program, cancellationToken, sourceFiles, node, position) {
-            if (node.kind === 298 /* SourceFile */) {
+            if (node.kind === 300 /* SourceFile */) {
                 return undefined;
             }
             var checker = program.getTypeChecker();
             // If invoked directly on a shorthand property assignment, then return
             // the declaration of the symbol being assigned (not the symbol being assigned to).
-            if (node.parent.kind === 290 /* ShorthandPropertyAssignment */) {
-                var result_1 = [];
-                Core.getReferenceEntriesForShorthandPropertyAssignment(node, checker, function (node) { return result_1.push(nodeEntry(node)); });
-                return result_1;
+            if (node.parent.kind === 292 /* ShorthandPropertyAssignment */) {
+                var result_2 = [];
+                Core.getReferenceEntriesForShorthandPropertyAssignment(node, checker, function (node) { return result_2.push(nodeEntry(node)); });
+                return result_2;
             }
-            else if (node.kind === 105 /* SuperKeyword */ || ts.isSuperProperty(node.parent)) {
+            else if (node.kind === 106 /* SuperKeyword */ || ts.isSuperProperty(node.parent)) {
                 // References to and accesses on the super keyword only have one possible implementation, so no
                 // need to "Find all References"
                 var symbol = checker.getSymbolAtLocation(node);
@@ -127856,13 +130749,13 @@
             if (symbol) {
                 return getDefinitionKindAndDisplayParts(symbol, checker, node);
             }
-            else if (node.kind === 201 /* ObjectLiteralExpression */) {
+            else if (node.kind === 203 /* ObjectLiteralExpression */) {
                 return {
                     kind: "interface" /* interfaceElement */,
                     displayParts: [ts.punctuationPart(20 /* OpenParenToken */), ts.textPart("object literal"), ts.punctuationPart(21 /* CloseParenToken */)]
                 };
             }
-            else if (node.kind === 222 /* ClassExpression */) {
+            else if (node.kind === 224 /* ClassExpression */) {
                 return {
                     kind: "local class" /* localClassElement */,
                     displayParts: [ts.punctuationPart(20 /* OpenParenToken */), ts.textPart("anonymous local class"), ts.punctuationPart(21 /* CloseParenToken */)]
@@ -127906,13 +130799,13 @@
         /** A node is considered a writeAccess iff it is a name of a declaration or a target of an assignment */
         function isWriteAccessForReference(node) {
             var decl = ts.getDeclarationFromName(node);
-            return !!decl && declarationIsWriteAccess(decl) || node.kind === 87 /* DefaultKeyword */ || ts.isWriteAccess(node);
+            return !!decl && declarationIsWriteAccess(decl) || node.kind === 88 /* DefaultKeyword */ || ts.isWriteAccess(node);
         }
         function isDefinitionForReference(node) {
-            return node.kind === 87 /* DefaultKeyword */
+            return node.kind === 88 /* DefaultKeyword */
                 || !!ts.getDeclarationFromName(node)
                 || ts.isLiteralComputedPropertyDeclarationName(node)
-                || (node.kind === 132 /* ConstructorKeyword */ && ts.isConstructorDeclaration(node.parent));
+                || (node.kind === 133 /* ConstructorKeyword */ && ts.isConstructorDeclaration(node.parent));
         }
         /**
          * True if 'decl' provides a value, as in `function f() {}`;
@@ -127923,47 +130816,47 @@
             if (!!(decl.flags & 8388608 /* Ambient */))
                 return true;
             switch (decl.kind) {
-                case 217 /* BinaryExpression */:
-                case 199 /* BindingElement */:
-                case 253 /* ClassDeclaration */:
-                case 222 /* ClassExpression */:
-                case 87 /* DefaultKeyword */:
-                case 256 /* EnumDeclaration */:
-                case 292 /* EnumMember */:
-                case 271 /* ExportSpecifier */:
-                case 263 /* ImportClause */: // default import
-                case 261 /* ImportEqualsDeclaration */:
-                case 266 /* ImportSpecifier */:
-                case 254 /* InterfaceDeclaration */:
-                case 328 /* JSDocCallbackTag */:
-                case 335 /* JSDocTypedefTag */:
-                case 281 /* JsxAttribute */:
-                case 257 /* ModuleDeclaration */:
-                case 260 /* NamespaceExportDeclaration */:
-                case 264 /* NamespaceImport */:
-                case 270 /* NamespaceExport */:
-                case 161 /* Parameter */:
-                case 290 /* ShorthandPropertyAssignment */:
-                case 255 /* TypeAliasDeclaration */:
-                case 160 /* TypeParameter */:
+                case 219 /* BinaryExpression */:
+                case 201 /* BindingElement */:
+                case 255 /* ClassDeclaration */:
+                case 224 /* ClassExpression */:
+                case 88 /* DefaultKeyword */:
+                case 258 /* EnumDeclaration */:
+                case 294 /* EnumMember */:
+                case 273 /* ExportSpecifier */:
+                case 265 /* ImportClause */: // default import
+                case 263 /* ImportEqualsDeclaration */:
+                case 268 /* ImportSpecifier */:
+                case 256 /* InterfaceDeclaration */:
+                case 333 /* JSDocCallbackTag */:
+                case 340 /* JSDocTypedefTag */:
+                case 283 /* JsxAttribute */:
+                case 259 /* ModuleDeclaration */:
+                case 262 /* NamespaceExportDeclaration */:
+                case 266 /* NamespaceImport */:
+                case 272 /* NamespaceExport */:
+                case 162 /* Parameter */:
+                case 292 /* ShorthandPropertyAssignment */:
+                case 257 /* TypeAliasDeclaration */:
+                case 161 /* TypeParameter */:
                     return true;
-                case 289 /* PropertyAssignment */:
+                case 291 /* PropertyAssignment */:
                     // In `({ x: y } = 0);`, `x` is not a write access. (Won't call this function for `y`.)
                     return !ts.isArrayLiteralOrObjectLiteralDestructuringPattern(decl.parent);
-                case 252 /* FunctionDeclaration */:
-                case 209 /* FunctionExpression */:
-                case 167 /* Constructor */:
-                case 166 /* MethodDeclaration */:
-                case 168 /* GetAccessor */:
-                case 169 /* SetAccessor */:
+                case 254 /* FunctionDeclaration */:
+                case 211 /* FunctionExpression */:
+                case 169 /* Constructor */:
+                case 167 /* MethodDeclaration */:
+                case 170 /* GetAccessor */:
+                case 171 /* SetAccessor */:
                     return !!decl.body;
-                case 250 /* VariableDeclaration */:
-                case 164 /* PropertyDeclaration */:
+                case 252 /* VariableDeclaration */:
+                case 165 /* PropertyDeclaration */:
                     return !!decl.initializer || ts.isCatchClause(decl.parent);
-                case 165 /* MethodSignature */:
-                case 163 /* PropertySignature */:
-                case 337 /* JSDocPropertyTag */:
-                case 330 /* JSDocParameterTag */:
+                case 166 /* MethodSignature */:
+                case 164 /* PropertySignature */:
+                case 342 /* JSDocPropertyTag */:
+                case 335 /* JSDocParameterTag */:
                     return false;
                 default:
                     return ts.Debug.failBadSyntaxKind(decl);
@@ -128184,10 +131077,10 @@
                     for (var _i = 0, _a = symbol.declarations; _i < _a.length; _i++) {
                         var decl = _a[_i];
                         switch (decl.kind) {
-                            case 298 /* SourceFile */:
+                            case 300 /* SourceFile */:
                                 // Don't include the source file itself. (This may not be ideal behavior, but awkward to include an entire file as a reference.)
                                 break;
-                            case 257 /* ModuleDeclaration */:
+                            case 259 /* ModuleDeclaration */:
                                 if (sourceFilesSet.has(decl.getSourceFile().fileName)) {
                                     references.push(nodeEntry(decl.name));
                                 }
@@ -128206,7 +131099,7 @@
                         if (sourceFilesSet.has(sourceFile.fileName)) {
                             // At `module.exports = ...`, reference node is `module`
                             var node = ts.isBinaryExpression(decl) && ts.isPropertyAccessExpression(decl.left) ? decl.left.expression :
-                                ts.isExportAssignment(decl) ? ts.Debug.checkDefined(ts.findChildOfKind(decl, 92 /* ExportKeyword */, sourceFile)) :
+                                ts.isExportAssignment(decl) ? ts.Debug.checkDefined(ts.findChildOfKind(decl, 93 /* ExportKeyword */, sourceFile)) :
                                     ts.getNameOfDeclaration(decl) || decl;
                             references.push(nodeEntry(node));
                         }
@@ -128216,25 +131109,28 @@
             }
             /** As in a `readonly prop: any` or `constructor(readonly prop: any)`, not a `readonly any[]`. */
             function isReadonlyTypeOperator(node) {
-                return node.kind === 142 /* ReadonlyKeyword */
+                return node.kind === 143 /* ReadonlyKeyword */
                     && ts.isTypeOperatorNode(node.parent)
-                    && node.parent.operator === 142 /* ReadonlyKeyword */;
+                    && node.parent.operator === 143 /* ReadonlyKeyword */;
             }
             /** getReferencedSymbols for special node kinds. */
             function getReferencedSymbolsSpecial(node, sourceFiles, cancellationToken) {
                 if (ts.isTypeKeyword(node.kind)) {
                     // A void expression (i.e., `void foo()`) is not special, but the `void` type is.
-                    if (node.kind === 113 /* VoidKeyword */ && ts.isVoidExpression(node.parent)) {
+                    if (node.kind === 114 /* VoidKeyword */ && ts.isVoidExpression(node.parent)) {
                         return undefined;
                     }
                     // A modifier readonly (like on a property declaration) is not special;
                     // a readonly type keyword (like `readonly string[]`) is.
-                    if (node.kind === 142 /* ReadonlyKeyword */ && !isReadonlyTypeOperator(node)) {
+                    if (node.kind === 143 /* ReadonlyKeyword */ && !isReadonlyTypeOperator(node)) {
                         return undefined;
                     }
                     // Likewise, when we *are* looking for a special keyword, make sure we
                     // *don’t* include readonly member modifiers.
-                    return getAllReferencesForKeyword(sourceFiles, node.kind, cancellationToken, node.kind === 142 /* ReadonlyKeyword */ ? isReadonlyTypeOperator : undefined);
+                    return getAllReferencesForKeyword(sourceFiles, node.kind, cancellationToken, node.kind === 143 /* ReadonlyKeyword */ ? isReadonlyTypeOperator : undefined);
+                }
+                if (ts.isStaticModifier(node) && ts.isClassStaticBlockDeclaration(node.parent)) {
+                    return [{ definition: { type: 2 /* Keyword */, node: node }, references: [nodeEntry(node)] }];
                 }
                 // Labels
                 if (ts.isJumpStatementTarget(node)) {
@@ -128250,7 +131146,7 @@
                 if (ts.isThis(node)) {
                     return getReferencesForThisKeyword(node, sourceFiles, cancellationToken);
                 }
-                if (node.kind === 105 /* SuperKeyword */) {
+                if (node.kind === 106 /* SuperKeyword */) {
                     return getReferencesForSuperKeyword(node);
                 }
                 return undefined;
@@ -128267,7 +131163,7 @@
                     // When renaming at an export specifier, rename the export and not the thing being exported.
                     getReferencesAtExportSpecifier(exportSpecifier.name, symbol, exportSpecifier, state.createSearch(node, originalSymbol, /*comingFrom*/ undefined), state, /*addReferencesHere*/ true, /*alwaysGetReferences*/ true);
                 }
-                else if (node && node.kind === 87 /* DefaultKeyword */ && symbol.escapedName === "default" /* Default */ && symbol.parent) {
+                else if (node && node.kind === 88 /* DefaultKeyword */ && symbol.escapedName === "default" /* Default */ && symbol.parent) {
                     addReference(node, symbol, state);
                     searchForImportsOfExport(node, symbol, { exportingModuleSymbol: symbol.parent, exportKind: 1 /* Default */ }, state);
                 }
@@ -128295,10 +131191,10 @@
             }
             function getSpecialSearchKind(node) {
                 switch (node.kind) {
-                    case 167 /* Constructor */:
-                    case 132 /* ConstructorKeyword */:
+                    case 169 /* Constructor */:
+                    case 133 /* ConstructorKeyword */:
                         return 1 /* Constructor */;
-                    case 78 /* Identifier */:
+                    case 79 /* Identifier */:
                         if (ts.isClassLike(node.parent)) {
                             ts.Debug.assert(node.parent.name === node);
                             return 2 /* Class */;
@@ -128538,7 +131434,7 @@
                 // If this is the symbol of a named function expression or named class expression,
                 // then named references are limited to its own scope.
                 var declarations = symbol.declarations, flags = symbol.flags, parent = symbol.parent, valueDeclaration = symbol.valueDeclaration;
-                if (valueDeclaration && (valueDeclaration.kind === 209 /* FunctionExpression */ || valueDeclaration.kind === 222 /* ClassExpression */)) {
+                if (valueDeclaration && (valueDeclaration.kind === 211 /* FunctionExpression */ || valueDeclaration.kind === 224 /* ClassExpression */)) {
                     return valueDeclaration;
                 }
                 if (!declarations) {
@@ -128548,7 +131444,7 @@
                 if (flags & (4 /* Property */ | 8192 /* Method */)) {
                     var privateDeclaration = ts.find(declarations, function (d) { return ts.hasEffectiveModifier(d, 8 /* Private */) || ts.isPrivateIdentifierClassElementDeclaration(d); });
                     if (privateDeclaration) {
-                        return ts.getAncestor(privateDeclaration, 253 /* ClassDeclaration */);
+                        return ts.getAncestor(privateDeclaration, 255 /* ClassDeclaration */);
                     }
                     // Else this is a public property and could be accessed from anywhere.
                     return undefined;
@@ -128577,7 +131473,7 @@
                         // Different declarations have different containers, bail out
                         return undefined;
                     }
-                    if (!container || container.kind === 298 /* SourceFile */ && !ts.isExternalOrCommonJsModule(container)) {
+                    if (!container || container.kind === 300 /* SourceFile */ && !ts.isExternalOrCommonJsModule(container)) {
                         // This is a global variable and not an external module, any declaration defined
                         // within this scope is visible outside the file
                         return undefined;
@@ -128693,8 +131589,12 @@
             function isValidReferencePosition(node, searchSymbolName) {
                 // Compare the length so we filter out strict superstrings of the symbol we are looking for
                 switch (node.kind) {
-                    case 79 /* PrivateIdentifier */:
-                    case 78 /* Identifier */:
+                    case 80 /* PrivateIdentifier */:
+                        if (ts.isJSDocMemberName(node.parent)) {
+                            return true;
+                        }
+                    // falls through I guess
+                    case 79 /* Identifier */:
                         return node.text.length === searchSymbolName.length;
                     case 14 /* NoSubstitutionTemplateLiteral */:
                     case 10 /* StringLiteral */: {
@@ -128704,7 +131604,7 @@
                     }
                     case 8 /* NumericLiteral */:
                         return ts.isLiteralNameOfPropertyDeclarationOrIndexAccess(node) && node.text.length === searchSymbolName.length;
-                    case 87 /* DefaultKeyword */:
+                    case 88 /* DefaultKeyword */:
                         return "default".length === searchSymbolName.length;
                     default:
                         return false;
@@ -128770,7 +131670,7 @@
                     return;
                 }
                 if (ts.isExportSpecifier(parent)) {
-                    ts.Debug.assert(referenceLocation.kind === 78 /* Identifier */);
+                    ts.Debug.assert(referenceLocation.kind === 79 /* Identifier */);
                     getReferencesAtExportSpecifier(referenceLocation, referenceSymbol, parent, search, state, addReferencesHere);
                     return;
                 }
@@ -128794,7 +131694,7 @@
                         ts.Debug.assertNever(state.specialSearchKind);
                 }
                 // Use the parent symbol if the location is commonjs require syntax on javascript files only.
-                referenceSymbol = ts.isInJSFile(referenceLocation) && referenceLocation.parent.kind === 199 /* BindingElement */ && ts.isRequireVariableDeclaration(referenceLocation.parent)
+                referenceSymbol = ts.isInJSFile(referenceLocation) && referenceLocation.parent.kind === 201 /* BindingElement */ && ts.isRequireVariableDeclaration(referenceLocation.parent)
                     ? referenceLocation.parent.symbol
                     : referenceSymbol;
                 getImportOrExportReferences(referenceLocation, referenceSymbol, search, state);
@@ -128830,8 +131730,8 @@
                 }
                 // For `export { foo as bar }`, rename `foo`, but not `bar`.
                 if (!isForRenameWithPrefixAndSuffixText(state.options) || alwaysGetReferences) {
-                    var isDefaultExport = referenceLocation.originalKeywordKind === 87 /* DefaultKeyword */
-                        || exportSpecifier.name.originalKeywordKind === 87 /* DefaultKeyword */;
+                    var isDefaultExport = referenceLocation.originalKeywordKind === 88 /* DefaultKeyword */
+                        || exportSpecifier.name.originalKeywordKind === 88 /* DefaultKeyword */;
                     var exportKind = isDefaultExport ? 1 /* Default */ : 0 /* Named */;
                     var exportSymbol = ts.Debug.checkDefined(exportSpecifier.symbol);
                     var exportInfo = FindAllReferences.getExportInfo(exportSymbol, exportKind, state.checker);
@@ -128912,7 +131812,7 @@
                 }
                 var pusher = function () { return state.referenceAdder(search.symbol); };
                 if (ts.isClassLike(referenceLocation.parent)) {
-                    ts.Debug.assert(referenceLocation.kind === 87 /* DefaultKeyword */ || referenceLocation.parent.name === referenceLocation);
+                    ts.Debug.assert(referenceLocation.kind === 88 /* DefaultKeyword */ || referenceLocation.parent.name === referenceLocation);
                     // This is the class declaration containing the constructor.
                     findOwnConstructorReferences(search.symbol, sourceFile, pusher());
                 }
@@ -128934,12 +131834,12 @@
                 var addRef = state.referenceAdder(search.symbol);
                 for (var _i = 0, _a = classLike.members; _i < _a.length; _i++) {
                     var member = _a[_i];
-                    if (!(ts.isMethodOrAccessor(member) && ts.hasSyntacticModifier(member, 32 /* Static */))) {
+                    if (!(ts.isMethodOrAccessor(member) && ts.isStatic(member))) {
                         continue;
                     }
                     if (member.body) {
                         member.body.forEachChild(function cb(node) {
-                            if (node.kind === 107 /* ThisKeyword */) {
+                            if (node.kind === 108 /* ThisKeyword */) {
                                 addRef(node);
                             }
                             else if (!ts.isFunctionLike(node) && !ts.isClassLike(node)) {
@@ -128958,18 +131858,18 @@
                 if (constructorSymbol && constructorSymbol.declarations) {
                     for (var _i = 0, _a = constructorSymbol.declarations; _i < _a.length; _i++) {
                         var decl = _a[_i];
-                        var ctrKeyword = ts.findChildOfKind(decl, 132 /* ConstructorKeyword */, sourceFile);
-                        ts.Debug.assert(decl.kind === 167 /* Constructor */ && !!ctrKeyword);
+                        var ctrKeyword = ts.findChildOfKind(decl, 133 /* ConstructorKeyword */, sourceFile);
+                        ts.Debug.assert(decl.kind === 169 /* Constructor */ && !!ctrKeyword);
                         addNode(ctrKeyword);
                     }
                 }
                 if (classSymbol.exports) {
                     classSymbol.exports.forEach(function (member) {
                         var decl = member.valueDeclaration;
-                        if (decl && decl.kind === 166 /* MethodDeclaration */) {
+                        if (decl && decl.kind === 167 /* MethodDeclaration */) {
                             var body = decl.body;
                             if (body) {
-                                forEachDescendantOfKind(body, 107 /* ThisKeyword */, function (thisKeyword) {
+                                forEachDescendantOfKind(body, 108 /* ThisKeyword */, function (thisKeyword) {
                                     if (ts.isNewExpressionTarget(thisKeyword)) {
                                         addNode(thisKeyword);
                                     }
@@ -128990,10 +131890,10 @@
                 }
                 for (var _i = 0, _a = constructor.declarations; _i < _a.length; _i++) {
                     var decl = _a[_i];
-                    ts.Debug.assert(decl.kind === 167 /* Constructor */);
+                    ts.Debug.assert(decl.kind === 169 /* Constructor */);
                     var body = decl.body;
                     if (body) {
-                        forEachDescendantOfKind(body, 105 /* SuperKeyword */, function (node) {
+                        forEachDescendantOfKind(body, 106 /* SuperKeyword */, function (node) {
                             if (ts.isCallExpressionTarget(node)) {
                                 addNode(node);
                             }
@@ -129017,10 +131917,10 @@
                     addReference(refNode);
                     return;
                 }
-                if (refNode.kind !== 78 /* Identifier */) {
+                if (refNode.kind !== 79 /* Identifier */) {
                     return;
                 }
-                if (refNode.parent.kind === 290 /* ShorthandPropertyAssignment */) {
+                if (refNode.parent.kind === 292 /* ShorthandPropertyAssignment */) {
                     // Go ahead and dereference the shorthand assignment by going to its definition
                     getReferenceEntriesForShorthandPropertyAssignment(refNode, state.checker, addReference);
                 }
@@ -129040,7 +131940,7 @@
                     }
                     else if (ts.isFunctionLike(typeHavingNode) && typeHavingNode.body) {
                         var body = typeHavingNode.body;
-                        if (body.kind === 231 /* Block */) {
+                        if (body.kind === 233 /* Block */) {
                             ts.forEachReturnStatement(body, function (returnStatement) {
                                 if (returnStatement.expression)
                                     addIfImplementation(returnStatement.expression);
@@ -129068,13 +131968,13 @@
              */
             function isImplementationExpression(node) {
                 switch (node.kind) {
-                    case 208 /* ParenthesizedExpression */:
+                    case 210 /* ParenthesizedExpression */:
                         return isImplementationExpression(node.expression);
-                    case 210 /* ArrowFunction */:
-                    case 209 /* FunctionExpression */:
-                    case 201 /* ObjectLiteralExpression */:
-                    case 222 /* ClassExpression */:
-                    case 200 /* ArrayLiteralExpression */:
+                    case 212 /* ArrowFunction */:
+                    case 211 /* FunctionExpression */:
+                    case 203 /* ObjectLiteralExpression */:
+                    case 224 /* ClassExpression */:
+                    case 202 /* ArrayLiteralExpression */:
                         return true;
                     default:
                         return false;
@@ -129127,13 +132027,13 @@
                 // Whether 'super' occurs in a static context within a class.
                 var staticFlag = 32 /* Static */;
                 switch (searchSpaceNode.kind) {
-                    case 164 /* PropertyDeclaration */:
-                    case 163 /* PropertySignature */:
-                    case 166 /* MethodDeclaration */:
-                    case 165 /* MethodSignature */:
-                    case 167 /* Constructor */:
-                    case 168 /* GetAccessor */:
-                    case 169 /* SetAccessor */:
+                    case 165 /* PropertyDeclaration */:
+                    case 164 /* PropertySignature */:
+                    case 167 /* MethodDeclaration */:
+                    case 166 /* MethodSignature */:
+                    case 169 /* Constructor */:
+                    case 170 /* GetAccessor */:
+                    case 171 /* SetAccessor */:
                         staticFlag &= ts.getSyntacticModifierFlags(searchSpaceNode);
                         searchSpaceNode = searchSpaceNode.parent; // re-assign to be the owning class
                         break;
@@ -129142,55 +132042,55 @@
                 }
                 var sourceFile = searchSpaceNode.getSourceFile();
                 var references = ts.mapDefined(getPossibleSymbolReferenceNodes(sourceFile, "super", searchSpaceNode), function (node) {
-                    if (node.kind !== 105 /* SuperKeyword */) {
+                    if (node.kind !== 106 /* SuperKeyword */) {
                         return;
                     }
                     var container = ts.getSuperContainer(node, /*stopOnFunctions*/ false);
                     // If we have a 'super' container, we must have an enclosing class.
                     // Now make sure the owning class is the same as the search-space
                     // and has the same static qualifier as the original 'super's owner.
-                    return container && (32 /* Static */ & ts.getSyntacticModifierFlags(container)) === staticFlag && container.parent.symbol === searchSpaceNode.symbol ? nodeEntry(node) : undefined;
+                    return container && ts.isStatic(container) === !!staticFlag && container.parent.symbol === searchSpaceNode.symbol ? nodeEntry(node) : undefined;
                 });
                 return [{ definition: { type: 0 /* Symbol */, symbol: searchSpaceNode.symbol }, references: references }];
             }
             function isParameterName(node) {
-                return node.kind === 78 /* Identifier */ && node.parent.kind === 161 /* Parameter */ && node.parent.name === node;
+                return node.kind === 79 /* Identifier */ && node.parent.kind === 162 /* Parameter */ && node.parent.name === node;
             }
             function getReferencesForThisKeyword(thisOrSuperKeyword, sourceFiles, cancellationToken) {
                 var searchSpaceNode = ts.getThisContainer(thisOrSuperKeyword, /* includeArrowFunctions */ false);
                 // Whether 'this' occurs in a static context within a class.
                 var staticFlag = 32 /* Static */;
                 switch (searchSpaceNode.kind) {
-                    case 166 /* MethodDeclaration */:
-                    case 165 /* MethodSignature */:
+                    case 167 /* MethodDeclaration */:
+                    case 166 /* MethodSignature */:
                         if (ts.isObjectLiteralMethod(searchSpaceNode)) {
                             staticFlag &= ts.getSyntacticModifierFlags(searchSpaceNode);
                             searchSpaceNode = searchSpaceNode.parent; // re-assign to be the owning object literals
                             break;
                         }
                     // falls through
-                    case 164 /* PropertyDeclaration */:
-                    case 163 /* PropertySignature */:
-                    case 167 /* Constructor */:
-                    case 168 /* GetAccessor */:
-                    case 169 /* SetAccessor */:
+                    case 165 /* PropertyDeclaration */:
+                    case 164 /* PropertySignature */:
+                    case 169 /* Constructor */:
+                    case 170 /* GetAccessor */:
+                    case 171 /* SetAccessor */:
                         staticFlag &= ts.getSyntacticModifierFlags(searchSpaceNode);
                         searchSpaceNode = searchSpaceNode.parent; // re-assign to be the owning class
                         break;
-                    case 298 /* SourceFile */:
+                    case 300 /* SourceFile */:
                         if (ts.isExternalModule(searchSpaceNode) || isParameterName(thisOrSuperKeyword)) {
                             return undefined;
                         }
                     // falls through
-                    case 252 /* FunctionDeclaration */:
-                    case 209 /* FunctionExpression */:
+                    case 254 /* FunctionDeclaration */:
+                    case 211 /* FunctionExpression */:
                         break;
                     // Computed properties in classes are not handled here because references to this are illegal,
                     // so there is no point finding references to them.
                     default:
                         return undefined;
                 }
-                var references = ts.flatMap(searchSpaceNode.kind === 298 /* SourceFile */ ? sourceFiles : [searchSpaceNode.getSourceFile()], function (sourceFile) {
+                var references = ts.flatMap(searchSpaceNode.kind === 300 /* SourceFile */ ? sourceFiles : [searchSpaceNode.getSourceFile()], function (sourceFile) {
                     cancellationToken.throwIfCancellationRequested();
                     return getPossibleSymbolReferenceNodes(sourceFile, "this", ts.isSourceFile(searchSpaceNode) ? sourceFile : searchSpaceNode).filter(function (node) {
                         if (!ts.isThis(node)) {
@@ -129198,20 +132098,20 @@
                         }
                         var container = ts.getThisContainer(node, /* includeArrowFunctions */ false);
                         switch (searchSpaceNode.kind) {
-                            case 209 /* FunctionExpression */:
-                            case 252 /* FunctionDeclaration */:
+                            case 211 /* FunctionExpression */:
+                            case 254 /* FunctionDeclaration */:
                                 return searchSpaceNode.symbol === container.symbol;
-                            case 166 /* MethodDeclaration */:
-                            case 165 /* MethodSignature */:
+                            case 167 /* MethodDeclaration */:
+                            case 166 /* MethodSignature */:
                                 return ts.isObjectLiteralMethod(searchSpaceNode) && searchSpaceNode.symbol === container.symbol;
-                            case 222 /* ClassExpression */:
-                            case 253 /* ClassDeclaration */:
-                            case 201 /* ObjectLiteralExpression */:
+                            case 224 /* ClassExpression */:
+                            case 255 /* ClassDeclaration */:
+                            case 203 /* ObjectLiteralExpression */:
                                 // Make sure the container belongs to the same class/object literals
                                 // and has the appropriate static modifier from the original container.
-                                return container.parent && searchSpaceNode.symbol === container.parent.symbol && (ts.getSyntacticModifierFlags(container) & 32 /* Static */) === staticFlag;
-                            case 298 /* SourceFile */:
-                                return container.kind === 298 /* SourceFile */ && !ts.isExternalModule(container) && !isParameterName(node);
+                                return container.parent && searchSpaceNode.symbol === container.parent.symbol && ts.isStatic(container) === !!staticFlag;
+                            case 300 /* SourceFile */:
+                                return container.kind === 300 /* SourceFile */ && !ts.isExternalModule(container) && !isParameterName(node);
                         }
                     });
                 }).map(function (n) { return nodeEntry(n); });
@@ -129251,7 +132151,7 @@
                 forEachRelatedSymbol(symbol, location, checker, isForRename, !(isForRename && providePrefixAndSuffixText), function (sym, root, base) {
                     // static method/property and instance method/property might have the same name. Only include static or only include instance.
                     if (base) {
-                        if (isStatic(symbol) !== isStatic(base)) {
+                        if (isStaticSymbol(symbol) !== isStaticSymbol(base)) {
                             base = undefined;
                         }
                     }
@@ -129321,7 +132221,7 @@
                     ts.Debug.assert(paramProps.length === 2 && !!(paramProps[0].flags & 1 /* FunctionScopedVariable */) && !!(paramProps[1].flags & 4 /* Property */)); // is [parameter, property]
                     return fromRoot(symbol.flags & 1 /* FunctionScopedVariable */ ? paramProps[1] : paramProps[0]);
                 }
-                var exportSpecifier = ts.getDeclarationOfKind(symbol, 271 /* ExportSpecifier */);
+                var exportSpecifier = ts.getDeclarationOfKind(symbol, 273 /* ExportSpecifier */);
                 if (!isForRenamePopulateSearchSymbolSet || exportSpecifier && !exportSpecifier.propertyName) {
                     var localSymbol = exportSpecifier && checker.getExportSpecifierLocalTargetSymbol(exportSpecifier);
                     if (localSymbol) {
@@ -129366,7 +132266,7 @@
                     });
                 }
                 function getPropertySymbolOfObjectBindingPatternWithoutPropertyName(symbol, checker) {
-                    var bindingElement = ts.getDeclarationOfKind(symbol, 199 /* BindingElement */);
+                    var bindingElement = ts.getDeclarationOfKind(symbol, 201 /* BindingElement */);
                     if (bindingElement && ts.isObjectBindingElementWithoutPropertyName(bindingElement)) {
                         return ts.getPropertySymbolFromBindingElement(checker, bindingElement);
                     }
@@ -129398,7 +132298,7 @@
                     }); });
                 }
             }
-            function isStatic(symbol) {
+            function isStaticSymbol(symbol) {
                 if (!symbol.valueDeclaration) {
                     return false;
                 }
@@ -129412,7 +132312,7 @@
                     // check whether the symbol used to search itself is just the searched one.
                     if (baseSymbol) {
                         // static method/property and instance method/property might have the same name. Only check static or only check instance.
-                        if (isStatic(referenceSymbol) !== isStatic(baseSymbol)) {
+                        if (isStaticSymbol(referenceSymbol) !== isStaticSymbol(baseSymbol)) {
                             baseSymbol = undefined;
                         }
                     }
@@ -129537,6 +132437,7 @@
                 || ts.isFunctionExpression(node)
                 || ts.isClassDeclaration(node)
                 || ts.isClassExpression(node)
+                || ts.isClassStaticBlockDeclaration(node)
                 || ts.isMethodDeclaration(node)
                 || ts.isMethodSignature(node)
                 || ts.isGetAccessorDeclaration(node)
@@ -129552,6 +132453,7 @@
                 || ts.isModuleDeclaration(node) && ts.isIdentifier(node.name)
                 || ts.isFunctionDeclaration(node)
                 || ts.isClassDeclaration(node)
+                || ts.isClassStaticBlockDeclaration(node)
                 || ts.isMethodDeclaration(node)
                 || ts.isMethodSignature(node)
                 || ts.isGetAccessorDeclaration(node)
@@ -129570,7 +132472,7 @@
             return ts.Debug.checkDefined(node.modifiers && ts.find(node.modifiers, isDefaultModifier));
         }
         function isDefaultModifier(node) {
-            return node.kind === 87 /* DefaultKeyword */;
+            return node.kind === 88 /* DefaultKeyword */;
         }
         /** Gets the symbol for a call hierarchy declaration. */
         function getSymbolOfCallHierarchyDeclaration(typeChecker, node) {
@@ -129588,6 +132490,15 @@
                     return { text: "default", pos: defaultModifier.getStart(), end: defaultModifier.getEnd() };
                 }
             }
+            if (ts.isClassStaticBlockDeclaration(node)) {
+                var sourceFile = node.getSourceFile();
+                var pos = ts.skipTrivia(sourceFile.text, ts.moveRangePastModifiers(node).pos);
+                var end = pos + 6; /* "static".length */
+                var typeChecker = program.getTypeChecker();
+                var symbol = typeChecker.getSymbolAtLocation(node.parent);
+                var prefix = symbol ? typeChecker.symbolToString(symbol, node.parent) + " " : "";
+                return { text: prefix + "static {}", pos: pos, end: end };
+            }
             var declName = isConstNamedExpression(node) ? node.parent.name :
                 ts.Debug.checkDefined(ts.getNameOfDeclaration(node), "Expected call hierarchy item to have a name");
             var text = ts.isIdentifier(declName) ? ts.idText(declName) :
@@ -129619,16 +132530,16 @@
                 return;
             }
             switch (node.kind) {
-                case 168 /* GetAccessor */:
-                case 169 /* SetAccessor */:
-                case 166 /* MethodDeclaration */:
-                    if (node.parent.kind === 201 /* ObjectLiteralExpression */) {
+                case 170 /* GetAccessor */:
+                case 171 /* SetAccessor */:
+                case 167 /* MethodDeclaration */:
+                    if (node.parent.kind === 203 /* ObjectLiteralExpression */) {
                         return (_a = ts.getAssignedName(node.parent)) === null || _a === void 0 ? void 0 : _a.getText();
                     }
                     return (_b = ts.getNameOfDeclaration(node.parent)) === null || _b === void 0 ? void 0 : _b.getText();
-                case 252 /* FunctionDeclaration */:
-                case 253 /* ClassDeclaration */:
-                case 257 /* ModuleDeclaration */:
+                case 254 /* FunctionDeclaration */:
+                case 255 /* ClassDeclaration */:
+                case 259 /* ModuleDeclaration */:
                     if (ts.isModuleBlock(node.parent) && ts.isIdentifier(node.parent.parent.name)) {
                         return node.parent.parent.name.getText();
                     }
@@ -129674,6 +132585,9 @@
         /** Find the implementation or the first declaration for a call hierarchy declaration. */
         function findImplementationOrAllInitialDeclarations(typeChecker, node) {
             var _a, _b, _c;
+            if (ts.isClassStaticBlockDeclaration(node)) {
+                return node;
+            }
             if (ts.isFunctionLikeDeclaration(node)) {
                 return (_b = (_a = findImplementation(typeChecker, node)) !== null && _a !== void 0 ? _a : findAllInitialDeclarations(typeChecker, node)) !== null && _b !== void 0 ? _b : node;
             }
@@ -129681,13 +132595,14 @@
         }
         /** Resolves the call hierarchy declaration for a node. */
         function resolveCallHierarchyDeclaration(program, location) {
-            // A call hierarchy item must refer to either a SourceFile, Module Declaration, or something intrinsically callable that has a name:
+            // A call hierarchy item must refer to either a SourceFile, Module Declaration, Class Static Block, or something intrinsically callable that has a name:
             // - Class Declarations
             // - Class Expressions (with a name)
             // - Function Declarations
             // - Function Expressions (with a name or assigned to a const variable)
             // - Arrow Functions (assigned to a const variable)
             // - Constructors
+            // - Class `static {}` initializer blocks
             // - Methods
             // - Accessors
             //
@@ -129722,6 +132637,10 @@
                     }
                     return undefined;
                 }
+                if (location.kind === 124 /* StaticKeyword */ && ts.isClassStaticBlockDeclaration(location.parent)) {
+                    location = location.parent;
+                    continue;
+                }
                 // #39453
                 if (ts.isVariableDeclaration(location) && location.initializer && isConstNamedExpression(location.initializer)) {
                     return location.initializer;
@@ -129785,7 +132704,7 @@
         /** Gets the call sites that call into the provided call hierarchy declaration. */
         function getIncomingCalls(program, declaration, cancellationToken) {
             // Source files and modules have no incoming calls.
-            if (ts.isSourceFile(declaration) || ts.isModuleDeclaration(declaration)) {
+            if (ts.isSourceFile(declaration) || ts.isModuleDeclaration(declaration) || ts.isClassStaticBlockDeclaration(declaration)) {
                 return [];
             }
             var location = getCallHierarchyDeclarationReferenceNode(declaration);
@@ -129798,7 +132717,8 @@
                 var target = ts.isTaggedTemplateExpression(node) ? node.tag :
                     ts.isJsxOpeningLikeElement(node) ? node.tagName :
                         ts.isAccessExpression(node) ? node :
-                            node.expression;
+                            ts.isClassStaticBlockDeclaration(node) ? node :
+                                node.expression;
                 var declaration = resolveCallHierarchyDeclaration(program, target);
                 if (declaration) {
                     var range = ts.createTextRangeFromNode(target, node.getSourceFile());
@@ -129833,56 +132753,59 @@
                     return;
                 }
                 switch (node.kind) {
-                    case 78 /* Identifier */:
-                    case 261 /* ImportEqualsDeclaration */:
-                    case 262 /* ImportDeclaration */:
-                    case 268 /* ExportDeclaration */:
-                    case 254 /* InterfaceDeclaration */:
-                    case 255 /* TypeAliasDeclaration */:
+                    case 79 /* Identifier */:
+                    case 263 /* ImportEqualsDeclaration */:
+                    case 264 /* ImportDeclaration */:
+                    case 270 /* ExportDeclaration */:
+                    case 256 /* InterfaceDeclaration */:
+                    case 257 /* TypeAliasDeclaration */:
                         // do not descend into nodes that cannot contain callable nodes
                         return;
-                    case 207 /* TypeAssertionExpression */:
-                    case 225 /* AsExpression */:
+                    case 168 /* ClassStaticBlockDeclaration */:
+                        recordCallSite(node);
+                        return;
+                    case 209 /* TypeAssertionExpression */:
+                    case 227 /* AsExpression */:
                         // do not descend into the type side of an assertion
                         collect(node.expression);
                         return;
-                    case 250 /* VariableDeclaration */:
-                    case 161 /* Parameter */:
+                    case 252 /* VariableDeclaration */:
+                    case 162 /* Parameter */:
                         // do not descend into the type of a variable or parameter declaration
                         collect(node.name);
                         collect(node.initializer);
                         return;
-                    case 204 /* CallExpression */:
+                    case 206 /* CallExpression */:
                         // do not descend into the type arguments of a call expression
                         recordCallSite(node);
                         collect(node.expression);
                         ts.forEach(node.arguments, collect);
                         return;
-                    case 205 /* NewExpression */:
+                    case 207 /* NewExpression */:
                         // do not descend into the type arguments of a new expression
                         recordCallSite(node);
                         collect(node.expression);
                         ts.forEach(node.arguments, collect);
                         return;
-                    case 206 /* TaggedTemplateExpression */:
+                    case 208 /* TaggedTemplateExpression */:
                         // do not descend into the type arguments of a tagged template expression
                         recordCallSite(node);
                         collect(node.tag);
                         collect(node.template);
                         return;
-                    case 276 /* JsxOpeningElement */:
-                    case 275 /* JsxSelfClosingElement */:
+                    case 278 /* JsxOpeningElement */:
+                    case 277 /* JsxSelfClosingElement */:
                         // do not descend into the type arguments of a JsxOpeningLikeElement
                         recordCallSite(node);
                         collect(node.tagName);
                         collect(node.attributes);
                         return;
-                    case 162 /* Decorator */:
+                    case 163 /* Decorator */:
                         recordCallSite(node);
                         collect(node.expression);
                         return;
-                    case 202 /* PropertyAccessExpression */:
-                    case 203 /* ElementAccessExpression */:
+                    case 204 /* PropertyAccessExpression */:
+                    case 205 /* ElementAccessExpression */:
                         recordCallSite(node);
                         ts.forEachChild(node, collect);
                         break;
@@ -129910,6 +132833,9 @@
                 collect(implementation.body);
             }
         }
+        function collectCallSitesOfClassStaticBlockDeclaration(node, collect) {
+            collect(node.body);
+        }
         function collectCallSitesOfClassLikeDeclaration(node, collect) {
             ts.forEach(node.decorators, collect);
             var heritage = ts.getClassExtendsHeritageElement(node);
@@ -129926,30 +132852,36 @@
                     ts.forEach(member.parameters, collect);
                     collect(member.body);
                 }
+                else if (ts.isClassStaticBlockDeclaration(member)) {
+                    collect(member);
+                }
             }
         }
         function collectCallSites(program, node) {
             var callSites = [];
             var collect = createCallSiteCollector(program, callSites);
             switch (node.kind) {
-                case 298 /* SourceFile */:
+                case 300 /* SourceFile */:
                     collectCallSitesOfSourceFile(node, collect);
                     break;
-                case 257 /* ModuleDeclaration */:
+                case 259 /* ModuleDeclaration */:
                     collectCallSitesOfModuleDeclaration(node, collect);
                     break;
-                case 252 /* FunctionDeclaration */:
-                case 209 /* FunctionExpression */:
-                case 210 /* ArrowFunction */:
-                case 166 /* MethodDeclaration */:
-                case 168 /* GetAccessor */:
-                case 169 /* SetAccessor */:
+                case 254 /* FunctionDeclaration */:
+                case 211 /* FunctionExpression */:
+                case 212 /* ArrowFunction */:
+                case 167 /* MethodDeclaration */:
+                case 170 /* GetAccessor */:
+                case 171 /* SetAccessor */:
                     collectCallSitesOfFunctionLikeDeclaration(program.getTypeChecker(), node, collect);
                     break;
-                case 253 /* ClassDeclaration */:
-                case 222 /* ClassExpression */:
+                case 255 /* ClassDeclaration */:
+                case 224 /* ClassExpression */:
                     collectCallSitesOfClassLikeDeclaration(node, collect);
                     break;
+                case 168 /* ClassStaticBlockDeclaration */:
+                    collectCallSitesOfClassStaticBlockDeclaration(node, collect);
+                    break;
                 default:
                     ts.Debug.assertNever(node);
             }
@@ -130022,16 +132954,18 @@
                 case "include":
                 case "exclude": {
                     var foundExactMatch = updatePaths(property);
-                    if (!foundExactMatch && propertyName === "include" && ts.isArrayLiteralExpression(property.initializer)) {
-                        var includes = ts.mapDefined(property.initializer.elements, function (e) { return ts.isStringLiteral(e) ? e.text : undefined; });
-                        var matchers = ts.getFileMatcherPatterns(configDir, /*excludes*/ [], includes, useCaseSensitiveFileNames, currentDirectory);
-                        // If there isn't some include for this, add a new one.
-                        if (ts.getRegexFromPattern(ts.Debug.checkDefined(matchers.includeFilePattern), useCaseSensitiveFileNames).test(oldFileOrDirPath) &&
-                            !ts.getRegexFromPattern(ts.Debug.checkDefined(matchers.includeFilePattern), useCaseSensitiveFileNames).test(newFileOrDirPath)) {
-                            changeTracker.insertNodeAfter(configFile, ts.last(property.initializer.elements), ts.factory.createStringLiteral(relativePath(newFileOrDirPath)));
-                        }
+                    if (foundExactMatch || propertyName !== "include" || !ts.isArrayLiteralExpression(property.initializer))
+                        return;
+                    var includes = ts.mapDefined(property.initializer.elements, function (e) { return ts.isStringLiteral(e) ? e.text : undefined; });
+                    if (includes.length === 0)
+                        return;
+                    var matchers = ts.getFileMatcherPatterns(configDir, /*excludes*/ [], includes, useCaseSensitiveFileNames, currentDirectory);
+                    // If there isn't some include for this, add a new one.
+                    if (ts.getRegexFromPattern(ts.Debug.checkDefined(matchers.includeFilePattern), useCaseSensitiveFileNames).test(oldFileOrDirPath) &&
+                        !ts.getRegexFromPattern(ts.Debug.checkDefined(matchers.includeFilePattern), useCaseSensitiveFileNames).test(newFileOrDirPath)) {
+                        changeTracker.insertNodeAfter(configFile, ts.last(property.initializer.elements), ts.factory.createStringLiteral(relativePath(newFileOrDirPath)));
                     }
-                    break;
+                    return;
                 }
                 case "compilerOptions":
                     forEachProperty(property.initializer, function (property, propertyName) {
@@ -130050,11 +132984,10 @@
                             });
                         }
                     });
-                    break;
+                    return;
             }
         });
         function updatePaths(property) {
-            // Type annotation needed due to #7294
             var elements = ts.isArrayLiteralExpression(property.initializer) ? property.initializer.elements : [property.initializer];
             var foundExactMatch = false;
             for (var _i = 0, elements_1 = elements; _i < elements_1.length; _i++) {
@@ -130142,9 +133075,9 @@
             return undefined;
         // First try resolved module
         if (resolved.resolvedModule) {
-            var result_2 = tryChange(resolved.resolvedModule.resolvedFileName);
-            if (result_2)
-                return result_2;
+            var result_3 = tryChange(resolved.resolvedModule.resolvedFileName);
+            if (result_3)
+                return result_3;
         }
         // Then failed lookups that are in the list of sources
         var result = ts.forEach(resolved.failedLookupLocations, tryChangeWithIgnoringPackageJsonExisting)
@@ -130214,11 +133147,26 @@
             }
             var parent = node.parent;
             var typeChecker = program.getTypeChecker();
+            if (node.kind === 157 /* OverrideKeyword */ || (ts.isJSDocOverrideTag(node) && ts.rangeContainsPosition(node.tagName, position))) {
+                return getDefinitionFromOverriddenMember(typeChecker, node) || ts.emptyArray;
+            }
             // Labels
             if (ts.isJumpStatementTarget(node)) {
                 var label = ts.getTargetLabel(node.parent, node.text);
                 return label ? [createDefinitionInfoFromName(typeChecker, label, "label" /* label */, node.text, /*containerName*/ undefined)] : undefined; // TODO: GH#18217
             }
+            if (ts.isStaticModifier(node) && ts.isClassStaticBlockDeclaration(node.parent)) {
+                var classDecl = node.parent.parent;
+                var symbol_1 = getSymbol(classDecl, typeChecker);
+                var staticBlocks = ts.filter(classDecl.members, ts.isClassStaticBlockDeclaration);
+                var containerName_1 = symbol_1 ? typeChecker.symbolToString(symbol_1, classDecl) : "";
+                var sourceFile_1 = node.getSourceFile();
+                return ts.map(staticBlocks, function (staticBlock) {
+                    var pos = ts.moveRangePastModifiers(staticBlock).pos;
+                    pos = ts.skipTrivia(sourceFile_1.text, pos);
+                    return createDefinitionInfoFromName(typeChecker, staticBlock, "constructor" /* constructorImplementationElement */, "static {}", containerName_1, { start: pos, length: "static".length });
+                });
+            }
             var symbol = getSymbol(node, typeChecker);
             // Could not find a symbol e.g. node is string or number keyword,
             // or the symbol was an internal symbol and does not have a declaration e.g. undefined symbol
@@ -130237,7 +133185,7 @@
                 else {
                     var defs = getDefinitionFromSymbol(typeChecker, symbol, node, calledDeclaration) || ts.emptyArray;
                     // For a 'super()' call, put the signature first, else put the variable first.
-                    return node.kind === 105 /* SuperKeyword */ ? __spreadArray([sigInfo], defs) : __spreadArray(__spreadArray([], defs), [sigInfo]);
+                    return node.kind === 106 /* SuperKeyword */ ? __spreadArray([sigInfo], defs, true) : __spreadArray(__spreadArray([], defs, true), [sigInfo], false);
                 }
             }
             // Because name in short-hand property assignment has two different meanings: property name and property value,
@@ -130245,7 +133193,7 @@
             // go to the declaration of the property name (in this case stay at the same position). However, if go-to-definition
             // is performed at the location of property access, we would like to go to definition of the property in the short-hand
             // assignment. This case and others are handled by the following code.
-            if (node.parent.kind === 290 /* ShorthandPropertyAssignment */) {
+            if (node.parent.kind === 292 /* ShorthandPropertyAssignment */) {
                 var shorthandSymbol_1 = typeChecker.getShorthandAssignmentValueSymbol(symbol.valueDeclaration);
                 var definitions = (shorthandSymbol_1 === null || shorthandSymbol_1 === void 0 ? void 0 : shorthandSymbol_1.declarations) ? shorthandSymbol_1.declarations.map(function (decl) { return createDefinitionInfo(decl, typeChecker, shorthandSymbol_1, node); }) : ts.emptyArray;
                 return ts.concatenate(definitions, getDefinitionFromObjectLiteralElement(typeChecker, node) || ts.emptyArray);
@@ -130304,6 +133252,25 @@
                 }
             }
         }
+        function getDefinitionFromOverriddenMember(typeChecker, node) {
+            var classElement = ts.findAncestor(node, ts.isClassElement);
+            if (!(classElement && classElement.name))
+                return;
+            var baseDeclaration = ts.findAncestor(classElement, ts.isClassLike);
+            if (!baseDeclaration)
+                return;
+            var baseTypeNode = ts.getEffectiveBaseTypeNode(baseDeclaration);
+            var baseType = baseTypeNode ? typeChecker.getTypeAtLocation(baseTypeNode) : undefined;
+            if (!baseType)
+                return;
+            var name = ts.unescapeLeadingUnderscores(ts.getTextOfPropertyName(classElement.name));
+            var symbol = ts.hasStaticModifier(classElement)
+                ? typeChecker.getPropertyOfType(typeChecker.getTypeOfSymbolAtLocation(baseType.symbol, baseDeclaration), name)
+                : typeChecker.getPropertyOfType(baseType, name);
+            if (!symbol)
+                return;
+            return getDefinitionFromSymbol(typeChecker, symbol, node);
+        }
         function getReferenceAtPosition(sourceFile, position, program) {
             var _a, _b;
             var referencePath = findReferenceInPosition(sourceFile.referencedFiles, position);
@@ -130394,13 +133361,7 @@
         GoToDefinition.getDefinitionAndBoundSpan = getDefinitionAndBoundSpan;
         // At 'x.foo', see if the type of 'x' has an index signature, and if so find its declarations.
         function getDefinitionInfoForIndexSignatures(node, checker) {
-            if (!ts.isPropertyAccessExpression(node.parent) || node.parent.name !== node)
-                return;
-            var type = checker.getTypeAtLocation(node.parent.expression);
-            return ts.mapDefined(type.isUnionOrIntersection() ? type.types : [type], function (nonUnionType) {
-                var info = checker.getIndexInfoOfType(nonUnionType, 0 /* String */);
-                return info && info.declaration && createDefinitionFromSignatureDeclaration(checker, info.declaration);
-            });
+            return ts.mapDefined(checker.getIndexInfosAtLocation(node), function (info) { return info.declaration && createDefinitionFromSignatureDeclaration(checker, info.declaration); });
         }
         function getSymbol(node, checker) {
             var symbol = checker.getSymbolAtLocation(node);
@@ -130422,20 +133383,20 @@
         //   (2) when the aliased symbol is originating from an import.
         //
         function shouldSkipAlias(node, declaration) {
-            if (node.kind !== 78 /* Identifier */) {
+            if (node.kind !== 79 /* Identifier */) {
                 return false;
             }
             if (node.parent === declaration) {
                 return true;
             }
             switch (declaration.kind) {
-                case 263 /* ImportClause */:
-                case 261 /* ImportEqualsDeclaration */:
+                case 265 /* ImportClause */:
+                case 263 /* ImportEqualsDeclaration */:
                     return true;
-                case 266 /* ImportSpecifier */:
-                    return declaration.parent.kind === 265 /* NamedImports */;
-                case 199 /* BindingElement */:
-                case 250 /* VariableDeclaration */:
+                case 268 /* ImportSpecifier */:
+                    return declaration.parent.kind === 267 /* NamedImports */;
+                case 201 /* BindingElement */:
+                case 252 /* VariableDeclaration */:
                     return ts.isInJSFile(declaration) && ts.isRequireVariableDeclaration(declaration);
                 default:
                     return false;
@@ -130451,7 +133412,7 @@
             function getConstructSignatureDefinition() {
                 // Applicable only if we are in a new expression, or we are on a constructor declaration
                 // and in either case the symbol has a construct signature definition, i.e. class
-                if (symbol.flags & 32 /* Class */ && !(symbol.flags & (16 /* Function */ | 3 /* Variable */)) && (ts.isNewExpressionTarget(node) || node.kind === 132 /* ConstructorKeyword */)) {
+                if (symbol.flags & 32 /* Class */ && !(symbol.flags & (16 /* Function */ | 3 /* Variable */)) && (ts.isNewExpressionTarget(node) || node.kind === 133 /* ConstructorKeyword */)) {
                     var cls = ts.find(filteredDeclarations, ts.isClassLike) || ts.Debug.fail("Expected declaration to have at least one class-like declaration");
                     return getSignatureDefinition(cls.members, /*selectConstructors*/ true);
                 }
@@ -130483,10 +133444,12 @@
             return createDefinitionInfoFromName(checker, declaration, symbolKind, symbolName, containerName);
         }
         /** Creates a DefinitionInfo directly from the name of a declaration. */
-        function createDefinitionInfoFromName(checker, declaration, symbolKind, symbolName, containerName) {
-            var name = ts.getNameOfDeclaration(declaration) || declaration;
-            var sourceFile = name.getSourceFile();
-            var textSpan = ts.createTextSpanFromNode(name, sourceFile);
+        function createDefinitionInfoFromName(checker, declaration, symbolKind, symbolName, containerName, textSpan) {
+            var sourceFile = declaration.getSourceFile();
+            if (!textSpan) {
+                var name = ts.getNameOfDeclaration(declaration) || declaration;
+                textSpan = ts.createTextSpanFromNode(name, sourceFile);
+            }
             return __assign(__assign({ fileName: sourceFile.fileName, textSpan: textSpan, kind: symbolKind, name: symbolName, containerKind: undefined, // TODO: GH#18217
                 containerName: containerName }, ts.FindAllReferences.toContextSpan(textSpan, sourceFile, ts.FindAllReferences.getContextNode(declaration))), { isLocal: !isDefinitionVisible(checker, declaration) });
         }
@@ -130500,22 +133463,22 @@
                 return isDefinitionVisible(checker, declaration.parent);
             // Handle some exceptions here like arrow function, members of class and object literal expression which are technically not visible but we want the definition to be determined by its parent
             switch (declaration.kind) {
-                case 164 /* PropertyDeclaration */:
-                case 168 /* GetAccessor */:
-                case 169 /* SetAccessor */:
-                case 166 /* MethodDeclaration */:
+                case 165 /* PropertyDeclaration */:
+                case 170 /* GetAccessor */:
+                case 171 /* SetAccessor */:
+                case 167 /* MethodDeclaration */:
                     // Private/protected properties/methods are not visible
                     if (ts.hasEffectiveModifier(declaration, 8 /* Private */))
                         return false;
                 // Public properties/methods are visible if its parents are visible, so:
                 // falls through
-                case 167 /* Constructor */:
-                case 289 /* PropertyAssignment */:
-                case 290 /* ShorthandPropertyAssignment */:
-                case 201 /* ObjectLiteralExpression */:
-                case 222 /* ClassExpression */:
-                case 210 /* ArrowFunction */:
-                case 209 /* FunctionExpression */:
+                case 169 /* Constructor */:
+                case 291 /* PropertyAssignment */:
+                case 292 /* ShorthandPropertyAssignment */:
+                case 203 /* ObjectLiteralExpression */:
+                case 224 /* ClassExpression */:
+                case 212 /* ArrowFunction */:
+                case 211 /* FunctionExpression */:
                     return isDefinitionVisible(checker, declaration.parent);
                 default:
                     return false;
@@ -130553,9 +133516,9 @@
         }
         function isConstructorLike(node) {
             switch (node.kind) {
-                case 167 /* Constructor */:
-                case 176 /* ConstructorType */:
-                case 171 /* ConstructSignature */:
+                case 169 /* Constructor */:
+                case 178 /* ConstructorType */:
+                case 173 /* ConstructSignature */:
                     return true;
                 default:
                     return false;
@@ -130660,10 +133623,20 @@
             var parts = [];
             ts.forEachUnique(declarations, function (declaration) {
                 for (var _i = 0, _a = getCommentHavingNodes(declaration); _i < _a.length; _i++) {
-                    var comment = _a[_i].comment;
-                    if (comment === undefined)
+                    var jsdoc = _a[_i];
+                    // skip comments containing @typedefs since they're not associated with particular declarations
+                    // Exceptions:
+                    // - @typedefs are themselves declarations with associated comments
+                    // - @param or @return indicate that the author thinks of it as a 'local' @typedef that's part of the function documentation
+                    if (jsdoc.comment === undefined
+                        || ts.isJSDoc(jsdoc)
+                            && declaration.kind !== 340 /* JSDocTypedefTag */ && declaration.kind !== 333 /* JSDocCallbackTag */
+                            && jsdoc.tags
+                            && jsdoc.tags.some(function (t) { return t.kind === 340 /* JSDocTypedefTag */ || t.kind === 333 /* JSDocCallbackTag */; })
+                            && !jsdoc.tags.some(function (t) { return t.kind === 335 /* JSDocParameterTag */ || t.kind === 336 /* JSDocReturnTag */; })) {
                         continue;
-                    var newparts = getDisplayPartsFromComment(comment, checker);
+                    }
+                    var newparts = getDisplayPartsFromComment(jsdoc.comment, checker);
                     if (!ts.contains(parts, newparts, isIdenticalListOfDisplayParts)) {
                         parts.push(newparts);
                     }
@@ -130677,11 +133650,11 @@
         }
         function getCommentHavingNodes(declaration) {
             switch (declaration.kind) {
-                case 330 /* JSDocParameterTag */:
-                case 337 /* JSDocPropertyTag */:
+                case 335 /* JSDocParameterTag */:
+                case 342 /* JSDocPropertyTag */:
                     return [declaration];
-                case 328 /* JSDocCallbackTag */:
-                case 335 /* JSDocTypedefTag */:
+                case 333 /* JSDocCallbackTag */:
+                case 340 /* JSDocTypedefTag */:
                     return [declaration, declaration.parent];
                 default:
                     return ts.getJSDocCommentsAndTags(declaration);
@@ -130689,39 +133662,47 @@
         }
         function getJsDocTagsFromDeclarations(declarations, checker) {
             // Only collect doc comments from duplicate declarations once.
-            var tags = [];
+            var infos = [];
             ts.forEachUnique(declarations, function (declaration) {
-                for (var _i = 0, _a = ts.getJSDocTags(declaration); _i < _a.length; _i++) {
-                    var tag = _a[_i];
-                    tags.push({ name: tag.tagName.text, text: getCommentDisplayParts(tag, checker) });
+                var tags = ts.getJSDocTags(declaration);
+                // skip comments containing @typedefs since they're not associated with particular declarations
+                // Exceptions:
+                // - @param or @return indicate that the author thinks of it as a 'local' @typedef that's part of the function documentation
+                if (tags.some(function (t) { return t.kind === 340 /* JSDocTypedefTag */ || t.kind === 333 /* JSDocCallbackTag */; })
+                    && !tags.some(function (t) { return t.kind === 335 /* JSDocParameterTag */ || t.kind === 336 /* JSDocReturnTag */; })) {
+                    return;
+                }
+                for (var _i = 0, tags_1 = tags; _i < tags_1.length; _i++) {
+                    var tag = tags_1[_i];
+                    infos.push({ name: tag.tagName.text, text: getCommentDisplayParts(tag, checker) });
                 }
             });
-            return tags;
+            return infos;
         }
         JsDoc.getJsDocTagsFromDeclarations = getJsDocTagsFromDeclarations;
         function getDisplayPartsFromComment(comment, checker) {
             if (typeof comment === "string") {
                 return [ts.textPart(comment)];
             }
-            return ts.flatMap(comment, function (node) { return node.kind === 313 /* JSDocText */ ? [ts.textPart(node.text)] : ts.buildLinkParts(node, checker); });
+            return ts.flatMap(comment, function (node) { return node.kind === 316 /* JSDocText */ ? [ts.textPart(node.text)] : ts.buildLinkParts(node, checker); });
         }
         function getCommentDisplayParts(tag, checker) {
             var comment = tag.comment, kind = tag.kind;
             var namePart = getTagNameDisplayPart(kind);
             switch (kind) {
-                case 319 /* JSDocImplementsTag */:
+                case 324 /* JSDocImplementsTag */:
                     return withNode(tag.class);
-                case 318 /* JSDocAugmentsTag */:
+                case 323 /* JSDocAugmentsTag */:
                     return withNode(tag.class);
-                case 334 /* JSDocTemplateTag */:
+                case 339 /* JSDocTemplateTag */:
                     return addComment(tag.typeParameters.map(function (tp) { return tp.getText(); }).join(", "));
-                case 333 /* JSDocTypeTag */:
+                case 338 /* JSDocTypeTag */:
                     return withNode(tag.typeExpression);
-                case 335 /* JSDocTypedefTag */:
-                case 328 /* JSDocCallbackTag */:
-                case 337 /* JSDocPropertyTag */:
-                case 330 /* JSDocParameterTag */:
-                case 336 /* JSDocSeeTag */:
+                case 340 /* JSDocTypedefTag */:
+                case 333 /* JSDocCallbackTag */:
+                case 342 /* JSDocPropertyTag */:
+                case 335 /* JSDocParameterTag */:
+                case 341 /* JSDocSeeTag */:
                     var name = tag.name;
                     return name ? withNode(name)
                         : comment === undefined ? undefined
@@ -130735,10 +133716,10 @@
             function addComment(s) {
                 if (comment) {
                     if (s.match(/^https?$/)) {
-                        return __spreadArray([ts.textPart(s)], getDisplayPartsFromComment(comment, checker));
+                        return __spreadArray([ts.textPart(s)], getDisplayPartsFromComment(comment, checker), true);
                     }
                     else {
-                        return __spreadArray([namePart(s), ts.spacePart()], getDisplayPartsFromComment(comment, checker));
+                        return __spreadArray([namePart(s), ts.spacePart()], getDisplayPartsFromComment(comment, checker), true);
                     }
                 }
                 else {
@@ -130748,14 +133729,14 @@
         }
         function getTagNameDisplayPart(kind) {
             switch (kind) {
-                case 330 /* JSDocParameterTag */:
+                case 335 /* JSDocParameterTag */:
                     return ts.parameterNamePart;
-                case 337 /* JSDocPropertyTag */:
+                case 342 /* JSDocPropertyTag */:
                     return ts.propertyNamePart;
-                case 334 /* JSDocTemplateTag */:
+                case 339 /* JSDocTemplateTag */:
                     return ts.typeParameterNamePart;
-                case 335 /* JSDocTypedefTag */:
-                case 328 /* JSDocCallbackTag */:
+                case 340 /* JSDocTypedefTag */:
+                case 333 /* JSDocCallbackTag */:
                     return ts.typeAliasNamePart;
                 default:
                     return ts.textPart;
@@ -130906,7 +133887,7 @@
         function parameterDocComments(parameters, isJavaScriptFile, indentationStr, newLine) {
             return parameters.map(function (_a, i) {
                 var name = _a.name, dotDotDotToken = _a.dotDotDotToken;
-                var paramName = name.kind === 78 /* Identifier */ ? name.text : "param" + i;
+                var paramName = name.kind === 79 /* Identifier */ ? name.text : "param" + i;
                 var type = isJavaScriptFile ? (dotDotDotToken ? "{...any} " : "{any} ") : "";
                 return indentationStr + " * @param " + type + paramName + newLine;
             }).join("");
@@ -130919,24 +133900,24 @@
         }
         function getCommentOwnerInfoWorker(commentOwner, options) {
             switch (commentOwner.kind) {
-                case 252 /* FunctionDeclaration */:
-                case 209 /* FunctionExpression */:
-                case 166 /* MethodDeclaration */:
-                case 167 /* Constructor */:
-                case 165 /* MethodSignature */:
-                case 210 /* ArrowFunction */:
+                case 254 /* FunctionDeclaration */:
+                case 211 /* FunctionExpression */:
+                case 167 /* MethodDeclaration */:
+                case 169 /* Constructor */:
+                case 166 /* MethodSignature */:
+                case 212 /* ArrowFunction */:
                     var host = commentOwner;
                     return { commentOwner: commentOwner, parameters: host.parameters, hasReturn: hasReturn(host, options) };
-                case 289 /* PropertyAssignment */:
+                case 291 /* PropertyAssignment */:
                     return getCommentOwnerInfoWorker(commentOwner.initializer, options);
-                case 253 /* ClassDeclaration */:
-                case 254 /* InterfaceDeclaration */:
-                case 163 /* PropertySignature */:
-                case 256 /* EnumDeclaration */:
-                case 292 /* EnumMember */:
-                case 255 /* TypeAliasDeclaration */:
+                case 255 /* ClassDeclaration */:
+                case 256 /* InterfaceDeclaration */:
+                case 164 /* PropertySignature */:
+                case 258 /* EnumDeclaration */:
+                case 294 /* EnumMember */:
+                case 257 /* TypeAliasDeclaration */:
                     return { commentOwner: commentOwner };
-                case 233 /* VariableStatement */: {
+                case 235 /* VariableStatement */: {
                     var varStatement = commentOwner;
                     var varDeclarations = varStatement.declarationList.declarations;
                     var host_1 = varDeclarations.length === 1 && varDeclarations[0].initializer
@@ -130946,16 +133927,16 @@
                         ? { commentOwner: commentOwner, parameters: host_1.parameters, hasReturn: hasReturn(host_1, options) }
                         : { commentOwner: commentOwner };
                 }
-                case 298 /* SourceFile */:
+                case 300 /* SourceFile */:
                     return "quit";
-                case 257 /* ModuleDeclaration */:
+                case 259 /* ModuleDeclaration */:
                     // If in walking up the tree, we hit a a nested namespace declaration,
                     // then we must be somewhere within a dotted namespace name; however we don't
                     // want to give back a JSDoc template for the 'b' or 'c' in 'namespace a.b.c { }'.
-                    return commentOwner.parent.kind === 257 /* ModuleDeclaration */ ? undefined : { commentOwner: commentOwner };
-                case 234 /* ExpressionStatement */:
+                    return commentOwner.parent.kind === 259 /* ModuleDeclaration */ ? undefined : { commentOwner: commentOwner };
+                case 236 /* ExpressionStatement */:
                     return getCommentOwnerInfoWorker(commentOwner.expression, options);
-                case 217 /* BinaryExpression */: {
+                case 219 /* BinaryExpression */: {
                     var be = commentOwner;
                     if (ts.getAssignmentDeclarationKind(be) === 0 /* None */) {
                         return "quit";
@@ -130964,7 +133945,7 @@
                         ? { commentOwner: commentOwner, parameters: be.right.parameters, hasReturn: hasReturn(be.right, options) }
                         : { commentOwner: commentOwner };
                 }
-                case 164 /* PropertyDeclaration */:
+                case 165 /* PropertyDeclaration */:
                     var init = commentOwner.initializer;
                     if (init && (ts.isFunctionExpression(init) || ts.isArrowFunction(init))) {
                         return { commentOwner: commentOwner, parameters: init.parameters, hasReturn: hasReturn(init, options) };
@@ -130977,14 +133958,14 @@
                     || ts.isFunctionLikeDeclaration(node) && node.body && ts.isBlock(node.body) && !!ts.forEachReturnStatement(node.body, function (n) { return n; }));
         }
         function getRightHandSideOfAssignment(rightHandSide) {
-            while (rightHandSide.kind === 208 /* ParenthesizedExpression */) {
+            while (rightHandSide.kind === 210 /* ParenthesizedExpression */) {
                 rightHandSide = rightHandSide.expression;
             }
             switch (rightHandSide.kind) {
-                case 209 /* FunctionExpression */:
-                case 210 /* ArrowFunction */:
+                case 211 /* FunctionExpression */:
+                case 212 /* ArrowFunction */:
                     return rightHandSide;
-                case 222 /* ClassExpression */:
+                case 224 /* ClassExpression */:
                     return ts.find(rightHandSide.members, ts.isConstructorDeclaration);
             }
         }
@@ -131043,9 +134024,9 @@
         }
         function shouldKeepItem(declaration, checker) {
             switch (declaration.kind) {
-                case 263 /* ImportClause */:
-                case 266 /* ImportSpecifier */:
-                case 261 /* ImportEqualsDeclaration */:
+                case 265 /* ImportClause */:
+                case 268 /* ImportSpecifier */:
+                case 263 /* ImportEqualsDeclaration */:
                     var importer = checker.getSymbolAtLocation(declaration.name); // TODO: GH#18217
                     var imported = checker.getAliasedSymbol(importer);
                     return importer.escapedName !== imported.escapedName;
@@ -131055,7 +134036,7 @@
         }
         function tryAddSingleDeclarationName(declaration, containers) {
             var name = ts.getNameOfDeclaration(declaration);
-            return !!name && (pushLiteral(name, containers) || name.kind === 159 /* ComputedPropertyName */ && tryAddComputedPropertyName(name.expression, containers));
+            return !!name && (pushLiteral(name, containers) || name.kind === 160 /* ComputedPropertyName */ && tryAddComputedPropertyName(name.expression, containers));
         }
         // Only added the names of computed properties if they're simple dotted expressions, like:
         //
@@ -131072,7 +134053,7 @@
             // First, if we started with a computed property name, then add all but the last
             // portion into the container array.
             var name = ts.getNameOfDeclaration(declaration);
-            if (name && name.kind === 159 /* ComputedPropertyName */ && !tryAddComputedPropertyName(name.expression, containers)) {
+            if (name && name.kind === 160 /* ComputedPropertyName */ && !tryAddComputedPropertyName(name.expression, containers)) {
                 return ts.emptyArray;
             }
             // Don't include the last portion.
@@ -131289,7 +134270,7 @@
          */
         function hasNavigationBarName(node) {
             return !ts.hasDynamicName(node) ||
-                (node.kind !== 217 /* BinaryExpression */ &&
+                (node.kind !== 219 /* BinaryExpression */ &&
                     ts.isPropertyAccessExpression(node.name.expression) &&
                     ts.isIdentifier(node.name.expression.expression) &&
                     ts.idText(node.name.expression.expression) === "Symbol");
@@ -131302,7 +134283,7 @@
                 return;
             }
             switch (node.kind) {
-                case 167 /* Constructor */:
+                case 169 /* Constructor */:
                     // Get parameter properties, and treat them as being on the *same* level as the constructor, not under it.
                     var ctr = node;
                     addNodeWithRecursiveChild(ctr, ctr.body);
@@ -131314,25 +134295,25 @@
                         }
                     }
                     break;
-                case 166 /* MethodDeclaration */:
-                case 168 /* GetAccessor */:
-                case 169 /* SetAccessor */:
-                case 165 /* MethodSignature */:
+                case 167 /* MethodDeclaration */:
+                case 170 /* GetAccessor */:
+                case 171 /* SetAccessor */:
+                case 166 /* MethodSignature */:
                     if (hasNavigationBarName(node)) {
                         addNodeWithRecursiveChild(node, node.body);
                     }
                     break;
-                case 164 /* PropertyDeclaration */:
+                case 165 /* PropertyDeclaration */:
                     if (hasNavigationBarName(node)) {
                         addNodeWithRecursiveInitializer(node);
                     }
                     break;
-                case 163 /* PropertySignature */:
+                case 164 /* PropertySignature */:
                     if (hasNavigationBarName(node)) {
                         addLeafNode(node);
                     }
                     break;
-                case 263 /* ImportClause */:
+                case 265 /* ImportClause */:
                     var importClause = node;
                     // Handle default import case e.g.:
                     //    import d from "mod";
@@ -131344,7 +134325,7 @@
                     //    import {a, b as B} from "mod";
                     var namedBindings = importClause.namedBindings;
                     if (namedBindings) {
-                        if (namedBindings.kind === 264 /* NamespaceImport */) {
+                        if (namedBindings.kind === 266 /* NamespaceImport */) {
                             addLeafNode(namedBindings);
                         }
                         else {
@@ -131355,17 +134336,17 @@
                         }
                     }
                     break;
-                case 290 /* ShorthandPropertyAssignment */:
+                case 292 /* ShorthandPropertyAssignment */:
                     addNodeWithRecursiveChild(node, node.name);
                     break;
-                case 291 /* SpreadAssignment */:
+                case 293 /* SpreadAssignment */:
                     var expression = node.expression;
                     // Use the expression as the name of the SpreadAssignment, otherwise show as <unknown>.
                     ts.isIdentifier(expression) ? addLeafNode(node, expression) : addLeafNode(node);
                     break;
-                case 199 /* BindingElement */:
-                case 289 /* PropertyAssignment */:
-                case 250 /* VariableDeclaration */: {
+                case 201 /* BindingElement */:
+                case 291 /* PropertyAssignment */:
+                case 252 /* VariableDeclaration */: {
                     var child = node;
                     if (ts.isBindingPattern(child.name)) {
                         addChildrenRecursively(child.name);
@@ -131375,7 +134356,7 @@
                     }
                     break;
                 }
-                case 252 /* FunctionDeclaration */:
+                case 254 /* FunctionDeclaration */:
                     var nameNode = node.name;
                     // If we see a function declaration track as a possible ES5 class
                     if (nameNode && ts.isIdentifier(nameNode)) {
@@ -131383,11 +134364,11 @@
                     }
                     addNodeWithRecursiveChild(node, node.body);
                     break;
-                case 210 /* ArrowFunction */:
-                case 209 /* FunctionExpression */:
+                case 212 /* ArrowFunction */:
+                case 211 /* FunctionExpression */:
                     addNodeWithRecursiveChild(node, node.body);
                     break;
-                case 256 /* EnumDeclaration */:
+                case 258 /* EnumDeclaration */:
                     startNode(node);
                     for (var _e = 0, _f = node.members; _e < _f.length; _e++) {
                         var member = _f[_e];
@@ -131397,9 +134378,9 @@
                     }
                     endNode();
                     break;
-                case 253 /* ClassDeclaration */:
-                case 222 /* ClassExpression */:
-                case 254 /* InterfaceDeclaration */:
+                case 255 /* ClassDeclaration */:
+                case 224 /* ClassExpression */:
+                case 256 /* InterfaceDeclaration */:
                     startNode(node);
                     for (var _g = 0, _h = node.members; _g < _h.length; _g++) {
                         var member = _h[_g];
@@ -131407,10 +134388,10 @@
                     }
                     endNode();
                     break;
-                case 257 /* ModuleDeclaration */:
+                case 259 /* ModuleDeclaration */:
                     addNodeWithRecursiveChild(node, getInteriorModule(node).body);
                     break;
-                case 267 /* ExportAssignment */: {
+                case 269 /* ExportAssignment */: {
                     var expression_1 = node.expression;
                     var child = ts.isObjectLiteralExpression(expression_1) || ts.isCallExpression(expression_1) ? expression_1 :
                         ts.isArrowFunction(expression_1) || ts.isFunctionExpression(expression_1) ? expression_1.body : undefined;
@@ -131424,16 +134405,16 @@
                     }
                     break;
                 }
-                case 271 /* ExportSpecifier */:
-                case 261 /* ImportEqualsDeclaration */:
-                case 172 /* IndexSignature */:
-                case 170 /* CallSignature */:
-                case 171 /* ConstructSignature */:
-                case 255 /* TypeAliasDeclaration */:
+                case 273 /* ExportSpecifier */:
+                case 263 /* ImportEqualsDeclaration */:
+                case 174 /* IndexSignature */:
+                case 172 /* CallSignature */:
+                case 173 /* ConstructSignature */:
+                case 257 /* TypeAliasDeclaration */:
                     addLeafNode(node);
                     break;
-                case 204 /* CallExpression */:
-                case 217 /* BinaryExpression */: {
+                case 206 /* CallExpression */:
+                case 219 /* BinaryExpression */: {
                     var special = ts.getAssignmentDeclarationKind(node);
                     switch (special) {
                         case 1 /* ExportsProperty */:
@@ -131675,12 +134656,12 @@
                 return false;
             }
             switch (a.kind) {
-                case 164 /* PropertyDeclaration */:
-                case 166 /* MethodDeclaration */:
-                case 168 /* GetAccessor */:
-                case 169 /* SetAccessor */:
-                    return ts.hasSyntacticModifier(a, 32 /* Static */) === ts.hasSyntacticModifier(b, 32 /* Static */);
-                case 257 /* ModuleDeclaration */:
+                case 165 /* PropertyDeclaration */:
+                case 167 /* MethodDeclaration */:
+                case 170 /* GetAccessor */:
+                case 171 /* SetAccessor */:
+                    return ts.isStatic(a) === ts.isStatic(b);
+                case 259 /* ModuleDeclaration */:
                     return areSameModule(a, b)
                         && getFullyQualifiedModuleName(a) === getFullyQualifiedModuleName(b);
                 default:
@@ -131699,7 +134680,7 @@
         // We use 1 NavNode to represent 'A.B.C', but there are multiple source nodes.
         // Only merge module nodes that have the same chain. Don't merge 'A.B.C' with 'A'!
         function areSameModule(a, b) {
-            return a.body.kind === b.body.kind && (a.body.kind !== 257 /* ModuleDeclaration */ || areSameModule(a.body, b.body));
+            return a.body.kind === b.body.kind && (a.body.kind !== 259 /* ModuleDeclaration */ || areSameModule(a.body, b.body));
         }
         /** Merge source into target. Source should be thrown away after this is called. */
         function merge(target, source) {
@@ -131729,7 +134710,7 @@
          * So `new()` can still come before an `aardvark` method.
          */
         function tryGetName(node) {
-            if (node.kind === 257 /* ModuleDeclaration */) {
+            if (node.kind === 259 /* ModuleDeclaration */) {
                 return getModuleName(node);
             }
             var declName = ts.getNameOfDeclaration(node);
@@ -131738,16 +134719,16 @@
                 return propertyName && ts.unescapeLeadingUnderscores(propertyName);
             }
             switch (node.kind) {
-                case 209 /* FunctionExpression */:
-                case 210 /* ArrowFunction */:
-                case 222 /* ClassExpression */:
+                case 211 /* FunctionExpression */:
+                case 212 /* ArrowFunction */:
+                case 224 /* ClassExpression */:
                     return getFunctionOrClassName(node);
                 default:
                     return undefined;
             }
         }
         function getItemName(node, name) {
-            if (node.kind === 257 /* ModuleDeclaration */) {
+            if (node.kind === 259 /* ModuleDeclaration */) {
                 return cleanText(getModuleName(node));
             }
             if (name) {
@@ -131759,18 +134740,18 @@
                 }
             }
             switch (node.kind) {
-                case 298 /* SourceFile */:
+                case 300 /* SourceFile */:
                     var sourceFile = node;
                     return ts.isExternalModule(sourceFile)
                         ? "\"" + ts.escapeString(ts.getBaseFileName(ts.removeFileExtension(ts.normalizePath(sourceFile.fileName)))) + "\""
                         : "<global>";
-                case 267 /* ExportAssignment */:
+                case 269 /* ExportAssignment */:
                     return ts.isExportAssignment(node) && node.isExportEquals ? "export=" /* ExportEquals */ : "default" /* Default */;
-                case 210 /* ArrowFunction */:
-                case 252 /* FunctionDeclaration */:
-                case 209 /* FunctionExpression */:
-                case 253 /* ClassDeclaration */:
-                case 222 /* ClassExpression */:
+                case 212 /* ArrowFunction */:
+                case 254 /* FunctionDeclaration */:
+                case 211 /* FunctionExpression */:
+                case 255 /* ClassDeclaration */:
+                case 224 /* ClassExpression */:
                     if (ts.getSyntacticModifierFlags(node) & 512 /* Default */) {
                         return "default";
                     }
@@ -131778,13 +134759,13 @@
                     // (eg: "app\n.onactivated"), so we should remove the whitespace for readability in the
                     // navigation bar.
                     return getFunctionOrClassName(node);
-                case 167 /* Constructor */:
+                case 169 /* Constructor */:
                     return "constructor";
-                case 171 /* ConstructSignature */:
+                case 173 /* ConstructSignature */:
                     return "new()";
-                case 170 /* CallSignature */:
+                case 172 /* CallSignature */:
                     return "()";
-                case 172 /* IndexSignature */:
+                case 174 /* IndexSignature */:
                     return "[]";
                 default:
                     return "<unknown>";
@@ -131817,19 +134798,19 @@
                 }
                 // Some nodes are otherwise important enough to always include in the primary navigation menu.
                 switch (navigationBarNodeKind(item)) {
-                    case 253 /* ClassDeclaration */:
-                    case 222 /* ClassExpression */:
-                    case 256 /* EnumDeclaration */:
-                    case 254 /* InterfaceDeclaration */:
-                    case 257 /* ModuleDeclaration */:
-                    case 298 /* SourceFile */:
-                    case 255 /* TypeAliasDeclaration */:
-                    case 335 /* JSDocTypedefTag */:
-                    case 328 /* JSDocCallbackTag */:
+                    case 255 /* ClassDeclaration */:
+                    case 224 /* ClassExpression */:
+                    case 258 /* EnumDeclaration */:
+                    case 256 /* InterfaceDeclaration */:
+                    case 259 /* ModuleDeclaration */:
+                    case 300 /* SourceFile */:
+                    case 257 /* TypeAliasDeclaration */:
+                    case 340 /* JSDocTypedefTag */:
+                    case 333 /* JSDocCallbackTag */:
                         return true;
-                    case 210 /* ArrowFunction */:
-                    case 252 /* FunctionDeclaration */:
-                    case 209 /* FunctionExpression */:
+                    case 212 /* ArrowFunction */:
+                    case 254 /* FunctionDeclaration */:
+                    case 211 /* FunctionExpression */:
                         return isTopLevelFunctionDeclaration(item);
                     default:
                         return false;
@@ -131839,10 +134820,10 @@
                         return false;
                     }
                     switch (navigationBarNodeKind(item.parent)) {
-                        case 258 /* ModuleBlock */:
-                        case 298 /* SourceFile */:
-                        case 166 /* MethodDeclaration */:
-                        case 167 /* Constructor */:
+                        case 260 /* ModuleBlock */:
+                        case 300 /* SourceFile */:
+                        case 167 /* MethodDeclaration */:
+                        case 169 /* Constructor */:
                             return true;
                         default:
                             return false;
@@ -131904,7 +134885,7 @@
         function getFullyQualifiedModuleName(moduleDeclaration) {
             // Otherwise, we need to aggregate each identifier to build up the qualified name.
             var result = [ts.getTextOfIdentifierOrLiteral(moduleDeclaration.name)];
-            while (moduleDeclaration.body && moduleDeclaration.body.kind === 257 /* ModuleDeclaration */) {
+            while (moduleDeclaration.body && moduleDeclaration.body.kind === 259 /* ModuleDeclaration */) {
                 moduleDeclaration = moduleDeclaration.body;
                 result.push(ts.getTextOfIdentifierOrLiteral(moduleDeclaration.name));
             }
@@ -131918,13 +134899,13 @@
             return decl.body && ts.isModuleDeclaration(decl.body) ? getInteriorModule(decl.body) : decl;
         }
         function isComputedProperty(member) {
-            return !member.name || member.name.kind === 159 /* ComputedPropertyName */;
+            return !member.name || member.name.kind === 160 /* ComputedPropertyName */;
         }
         function getNodeSpan(node) {
-            return node.kind === 298 /* SourceFile */ ? ts.createTextSpanFromRange(node) : ts.createTextSpanFromNode(node, curSourceFile);
+            return node.kind === 300 /* SourceFile */ ? ts.createTextSpanFromRange(node) : ts.createTextSpanFromNode(node, curSourceFile);
         }
         function getModifiers(node) {
-            if (node.parent && node.parent.kind === 250 /* VariableDeclaration */) {
+            if (node.parent && node.parent.kind === 252 /* VariableDeclaration */) {
                 node = node.parent;
             }
             return ts.getNodeModifiers(node);
@@ -131939,7 +134920,7 @@
                 return cleanText(ts.declarationNameToString(parent.name));
             }
             // See if it is of the form "<expr> = function(){...}". If so, use the text from the left-hand side.
-            else if (ts.isBinaryExpression(parent) && parent.operatorToken.kind === 62 /* EqualsToken */) {
+            else if (ts.isBinaryExpression(parent) && parent.operatorToken.kind === 63 /* EqualsToken */) {
                 return nodeText(parent.left).replace(whiteSpaceRegex, "");
             }
             // See if it is a property assignment, and if so use the property name
@@ -131982,9 +134963,9 @@
         }
         function isFunctionOrClassExpression(node) {
             switch (node.kind) {
-                case 210 /* ArrowFunction */:
-                case 209 /* FunctionExpression */:
-                case 222 /* ClassExpression */:
+                case 212 /* ArrowFunction */:
+                case 211 /* FunctionExpression */:
+                case 224 /* ClassExpression */:
                     return true;
                 default:
                     return false;
@@ -132349,11 +135330,11 @@
         function getModuleSpecifierExpression(declaration) {
             var _a;
             switch (declaration.kind) {
-                case 261 /* ImportEqualsDeclaration */:
+                case 263 /* ImportEqualsDeclaration */:
                     return (_a = ts.tryCast(declaration.moduleReference, ts.isExternalModuleReference)) === null || _a === void 0 ? void 0 : _a.expression;
-                case 262 /* ImportDeclaration */:
+                case 264 /* ImportDeclaration */:
                     return declaration.moduleSpecifier;
-                case 233 /* VariableStatement */:
+                case 235 /* VariableStatement */:
                     return declaration.declarationList.declarations[0].initializer.arguments[0];
             }
         }
@@ -132392,19 +135373,19 @@
         function getImportKindOrder(s1) {
             var _a;
             switch (s1.kind) {
-                case 262 /* ImportDeclaration */:
+                case 264 /* ImportDeclaration */:
                     if (!s1.importClause)
                         return 0;
                     if (s1.importClause.isTypeOnly)
                         return 1;
-                    if (((_a = s1.importClause.namedBindings) === null || _a === void 0 ? void 0 : _a.kind) === 264 /* NamespaceImport */)
+                    if (((_a = s1.importClause.namedBindings) === null || _a === void 0 ? void 0 : _a.kind) === 266 /* NamespaceImport */)
                         return 2;
                     if (s1.importClause.name)
                         return 3;
                     return 4;
-                case 261 /* ImportEqualsDeclaration */:
+                case 263 /* ImportEqualsDeclaration */:
                     return 5;
-                case 233 /* VariableStatement */:
+                case 235 /* VariableStatement */:
                     return 6;
             }
         }
@@ -132426,7 +135407,7 @@
             var depthRemaining = 40;
             var current = 0;
             // Includes the EOF Token so that comments which aren't attached to statements are included
-            var statements = __spreadArray(__spreadArray([], sourceFile.statements), [sourceFile.endOfFileToken]);
+            var statements = __spreadArray(__spreadArray([], sourceFile.statements, true), [sourceFile.endOfFileToken], false);
             var n = statements.length;
             while (current < n) {
                 while (current < n && !ts.isAnyImportSyntax(statements[current])) {
@@ -132442,7 +135423,7 @@
                 }
                 var lastImport = current - 1;
                 if (lastImport !== firstImport) {
-                    out.push(createOutliningSpanFromBounds(ts.findChildOfKind(statements[firstImport], 99 /* ImportKeyword */, sourceFile).getStart(sourceFile), statements[lastImport].getEnd(), "imports" /* Imports */));
+                    out.push(createOutliningSpanFromBounds(ts.findChildOfKind(statements[firstImport], 100 /* ImportKeyword */, sourceFile).getStart(sourceFile), statements[lastImport].getEnd(), "imports" /* Imports */));
                 }
             }
             function visitNonImportNode(n) {
@@ -132450,12 +135431,18 @@
                 if (depthRemaining === 0)
                     return;
                 cancellationToken.throwIfCancellationRequested();
-                if (ts.isDeclaration(n) || ts.isVariableStatement(n) || n.kind === 1 /* EndOfFileToken */) {
+                if (ts.isDeclaration(n) || ts.isVariableStatement(n) || ts.isReturnStatement(n) || n.kind === 1 /* EndOfFileToken */) {
                     addOutliningForLeadingCommentsForNode(n, sourceFile, cancellationToken, out);
                 }
                 if (ts.isFunctionLike(n) && ts.isBinaryExpression(n.parent) && ts.isPropertyAccessExpression(n.parent.left)) {
                     addOutliningForLeadingCommentsForNode(n.parent.left, sourceFile, cancellationToken, out);
                 }
+                if (ts.isBlock(n) || ts.isModuleBlock(n)) {
+                    addOutliningForLeadingCommentsForPos(n.statements.end, sourceFile, cancellationToken, out);
+                }
+                if (ts.isClassLike(n) || ts.isInterfaceDeclaration(n)) {
+                    addOutliningForLeadingCommentsForPos(n.members.end, sourceFile, cancellationToken, out);
+                }
                 var span = getOutliningSpanForNode(n, sourceFile);
                 if (span)
                     out.push(span);
@@ -132506,12 +135493,19 @@
                 }
             }
         }
-        var regionDelimiterRegExp = /^\s*\/\/\s*#(end)?region(?:\s+(.*))?(?:\r)?$/;
+        var regionDelimiterRegExp = /^#(end)?region(?:\s+(.*))?(?:\r)?$/;
         function isRegionDelimiter(lineText) {
+            // We trim the leading whitespace and // without the regex since the
+            // multiple potential whitespace matches can make for some gnarly backtracking behavior
+            lineText = ts.trimStringStart(lineText);
+            if (!ts.startsWith(lineText, "\/\/")) {
+                return null; // eslint-disable-line no-null/no-null
+            }
+            lineText = ts.trimString(lineText.slice(2));
             return regionDelimiterRegExp.exec(lineText);
         }
-        function addOutliningForLeadingCommentsForNode(n, sourceFile, cancellationToken, out) {
-            var comments = ts.getLeadingCommentRangesOfNode(n, sourceFile);
+        function addOutliningForLeadingCommentsForPos(pos, sourceFile, cancellationToken, out) {
+            var comments = ts.getLeadingCommentRanges(sourceFile.text, pos);
             if (!comments)
                 return;
             var firstSingleLineCommentStart = -1;
@@ -132519,12 +135513,12 @@
             var singleLineCommentCount = 0;
             var sourceText = sourceFile.getFullText();
             for (var _i = 0, comments_1 = comments; _i < comments_1.length; _i++) {
-                var _a = comments_1[_i], kind = _a.kind, pos = _a.pos, end = _a.end;
+                var _a = comments_1[_i], kind = _a.kind, pos_1 = _a.pos, end = _a.end;
                 cancellationToken.throwIfCancellationRequested();
                 switch (kind) {
                     case 2 /* SingleLineCommentTrivia */:
                         // never fold region delimiters into single-line comment regions
-                        var commentText = sourceText.slice(pos, end);
+                        var commentText = sourceText.slice(pos_1, end);
                         if (isRegionDelimiter(commentText)) {
                             combineAndAddMultipleSingleLineComments();
                             singleLineCommentCount = 0;
@@ -132533,14 +135527,14 @@
                         // For single line comments, combine consecutive ones (2 or more) into
                         // a single span from the start of the first till the end of the last
                         if (singleLineCommentCount === 0) {
-                            firstSingleLineCommentStart = pos;
+                            firstSingleLineCommentStart = pos_1;
                         }
                         lastSingleLineCommentEnd = end;
                         singleLineCommentCount++;
                         break;
                     case 3 /* MultiLineCommentTrivia */:
                         combineAndAddMultipleSingleLineComments();
-                        out.push(createOutliningSpanFromBounds(pos, end, "comment" /* Comment */));
+                        out.push(createOutliningSpanFromBounds(pos_1, end, "comment" /* Comment */));
                         singleLineCommentCount = 0;
                         break;
                     default:
@@ -132555,12 +135549,17 @@
                 }
             }
         }
+        function addOutliningForLeadingCommentsForNode(n, sourceFile, cancellationToken, out) {
+            if (ts.isJsxText(n))
+                return;
+            addOutliningForLeadingCommentsForPos(n.pos, sourceFile, cancellationToken, out);
+        }
         function createOutliningSpanFromBounds(pos, end, kind) {
             return createOutliningSpan(ts.createTextSpanFromBounds(pos, end), kind);
         }
         function getOutliningSpanForNode(n, sourceFile) {
             switch (n.kind) {
-                case 231 /* Block */:
+                case 233 /* Block */:
                     if (ts.isFunctionLike(n.parent)) {
                         return functionSpan(n.parent, n, sourceFile);
                     }
@@ -132568,23 +135567,23 @@
                     // If the latter, we want to collapse the block, but consider its hint span
                     // to be the entire span of the parent.
                     switch (n.parent.kind) {
-                        case 236 /* DoStatement */:
-                        case 239 /* ForInStatement */:
-                        case 240 /* ForOfStatement */:
-                        case 238 /* ForStatement */:
-                        case 235 /* IfStatement */:
-                        case 237 /* WhileStatement */:
-                        case 244 /* WithStatement */:
-                        case 288 /* CatchClause */:
+                        case 238 /* DoStatement */:
+                        case 241 /* ForInStatement */:
+                        case 242 /* ForOfStatement */:
+                        case 240 /* ForStatement */:
+                        case 237 /* IfStatement */:
+                        case 239 /* WhileStatement */:
+                        case 246 /* WithStatement */:
+                        case 290 /* CatchClause */:
                             return spanForNode(n.parent);
-                        case 248 /* TryStatement */:
+                        case 250 /* TryStatement */:
                             // Could be the try-block, or the finally-block.
                             var tryStatement = n.parent;
                             if (tryStatement.tryBlock === n) {
                                 return spanForNode(n.parent);
                             }
                             else if (tryStatement.finallyBlock === n) {
-                                var node = ts.findChildOfKind(tryStatement, 95 /* FinallyKeyword */, sourceFile);
+                                var node = ts.findChildOfKind(tryStatement, 96 /* FinallyKeyword */, sourceFile);
                                 if (node)
                                     return spanForNode(node);
                             }
@@ -132594,40 +135593,40 @@
                             // the span of the block, independent of any parent span.
                             return createOutliningSpan(ts.createTextSpanFromNode(n, sourceFile), "code" /* Code */);
                     }
-                case 258 /* ModuleBlock */:
+                case 260 /* ModuleBlock */:
                     return spanForNode(n.parent);
-                case 253 /* ClassDeclaration */:
-                case 222 /* ClassExpression */:
-                case 254 /* InterfaceDeclaration */:
-                case 256 /* EnumDeclaration */:
-                case 259 /* CaseBlock */:
-                case 178 /* TypeLiteral */:
-                case 197 /* ObjectBindingPattern */:
+                case 255 /* ClassDeclaration */:
+                case 224 /* ClassExpression */:
+                case 256 /* InterfaceDeclaration */:
+                case 258 /* EnumDeclaration */:
+                case 261 /* CaseBlock */:
+                case 180 /* TypeLiteral */:
+                case 199 /* ObjectBindingPattern */:
                     return spanForNode(n);
-                case 180 /* TupleType */:
+                case 182 /* TupleType */:
                     return spanForNode(n, /*autoCollapse*/ false, /*useFullStart*/ !ts.isTupleTypeNode(n.parent), 22 /* OpenBracketToken */);
-                case 285 /* CaseClause */:
-                case 286 /* DefaultClause */:
+                case 287 /* CaseClause */:
+                case 288 /* DefaultClause */:
                     return spanForNodeArray(n.statements);
-                case 201 /* ObjectLiteralExpression */:
+                case 203 /* ObjectLiteralExpression */:
                     return spanForObjectOrArrayLiteral(n);
-                case 200 /* ArrayLiteralExpression */:
+                case 202 /* ArrayLiteralExpression */:
                     return spanForObjectOrArrayLiteral(n, 22 /* OpenBracketToken */);
-                case 274 /* JsxElement */:
+                case 276 /* JsxElement */:
                     return spanForJSXElement(n);
-                case 278 /* JsxFragment */:
+                case 280 /* JsxFragment */:
                     return spanForJSXFragment(n);
-                case 275 /* JsxSelfClosingElement */:
-                case 276 /* JsxOpeningElement */:
+                case 277 /* JsxSelfClosingElement */:
+                case 278 /* JsxOpeningElement */:
                     return spanForJSXAttributes(n.attributes);
-                case 219 /* TemplateExpression */:
+                case 221 /* TemplateExpression */:
                 case 14 /* NoSubstitutionTemplateLiteral */:
                     return spanForTemplateLiteral(n);
-                case 198 /* ArrayBindingPattern */:
+                case 200 /* ArrayBindingPattern */:
                     return spanForNode(n, /*autoCollapse*/ false, /*useFullStart*/ !ts.isBindingElement(n.parent), 22 /* OpenBracketToken */);
-                case 210 /* ArrowFunction */:
+                case 212 /* ArrowFunction */:
                     return spanForArrowFunction(n);
-                case 204 /* CallExpression */:
+                case 206 /* CallExpression */:
                     return spanForCallExpression(n);
             }
             function spanForCallExpression(node) {
@@ -132694,7 +135693,7 @@
         function functionSpan(node, body, sourceFile) {
             var openToken = tryGetFunctionOpenToken(node, body, sourceFile);
             var closeToken = ts.findChildOfKind(body, 19 /* CloseBraceToken */, sourceFile);
-            return openToken && closeToken && spanBetweenTokens(openToken, closeToken, node, sourceFile, /*autoCollapse*/ node.kind !== 210 /* ArrowFunction */);
+            return openToken && closeToken && spanBetweenTokens(openToken, closeToken, node, sourceFile, /*autoCollapse*/ node.kind !== 212 /* ArrowFunction */);
         }
         function spanBetweenTokens(openToken, closeToken, hintSpanNode, sourceFile, autoCollapse, useFullStart) {
             if (autoCollapse === void 0) { autoCollapse = false; }
@@ -133238,10 +136237,10 @@
          */
         function tryConsumeDeclare() {
             var token = ts.scanner.getToken();
-            if (token === 133 /* DeclareKeyword */) {
+            if (token === 134 /* DeclareKeyword */) {
                 // declare module "mod"
                 token = nextToken();
-                if (token === 139 /* ModuleKeyword */) {
+                if (token === 140 /* ModuleKeyword */) {
                     token = nextToken();
                     if (token === 10 /* StringLiteral */) {
                         recordAmbientExternalModule();
@@ -133259,7 +136258,7 @@
                 return false;
             }
             var token = ts.scanner.getToken();
-            if (token === 99 /* ImportKeyword */) {
+            if (token === 100 /* ImportKeyword */) {
                 token = nextToken();
                 if (token === 20 /* OpenParenToken */) {
                     token = nextToken();
@@ -133275,21 +136274,21 @@
                     return true;
                 }
                 else {
-                    if (token === 149 /* TypeKeyword */) {
+                    if (token === 150 /* TypeKeyword */) {
                         var skipTypeKeyword = ts.scanner.lookAhead(function () {
                             var token = ts.scanner.scan();
-                            return token !== 153 /* FromKeyword */ && (token === 41 /* AsteriskToken */ ||
+                            return token !== 154 /* FromKeyword */ && (token === 41 /* AsteriskToken */ ||
                                 token === 18 /* OpenBraceToken */ ||
-                                token === 78 /* Identifier */ ||
+                                token === 79 /* Identifier */ ||
                                 ts.isKeyword(token));
                         });
                         if (skipTypeKeyword) {
                             token = nextToken();
                         }
                     }
-                    if (token === 78 /* Identifier */ || ts.isKeyword(token)) {
+                    if (token === 79 /* Identifier */ || ts.isKeyword(token)) {
                         token = nextToken();
-                        if (token === 153 /* FromKeyword */) {
+                        if (token === 154 /* FromKeyword */) {
                             token = nextToken();
                             if (token === 10 /* StringLiteral */) {
                                 // import d from "mod";
@@ -133297,7 +136296,7 @@
                                 return true;
                             }
                         }
-                        else if (token === 62 /* EqualsToken */) {
+                        else if (token === 63 /* EqualsToken */) {
                             if (tryConsumeRequireCall(/*skipCurrentToken*/ true)) {
                                 return true;
                             }
@@ -133320,7 +136319,7 @@
                         }
                         if (token === 19 /* CloseBraceToken */) {
                             token = nextToken();
-                            if (token === 153 /* FromKeyword */) {
+                            if (token === 154 /* FromKeyword */) {
                                 token = nextToken();
                                 if (token === 10 /* StringLiteral */) {
                                     // import {a as A} from "mod";
@@ -133332,11 +136331,11 @@
                     }
                     else if (token === 41 /* AsteriskToken */) {
                         token = nextToken();
-                        if (token === 126 /* AsKeyword */) {
+                        if (token === 127 /* AsKeyword */) {
                             token = nextToken();
-                            if (token === 78 /* Identifier */ || ts.isKeyword(token)) {
+                            if (token === 79 /* Identifier */ || ts.isKeyword(token)) {
                                 token = nextToken();
-                                if (token === 153 /* FromKeyword */) {
+                                if (token === 154 /* FromKeyword */) {
                                     token = nextToken();
                                     if (token === 10 /* StringLiteral */) {
                                         // import * as NS from "mod"
@@ -133354,10 +136353,10 @@
         }
         function tryConsumeExport() {
             var token = ts.scanner.getToken();
-            if (token === 92 /* ExportKeyword */) {
+            if (token === 93 /* ExportKeyword */) {
                 markAsExternalModuleIfTopLevel();
                 token = nextToken();
-                if (token === 149 /* TypeKeyword */) {
+                if (token === 150 /* TypeKeyword */) {
                     var skipTypeKeyword = ts.scanner.lookAhead(function () {
                         var token = ts.scanner.scan();
                         return token === 41 /* AsteriskToken */ ||
@@ -133376,7 +136375,7 @@
                     }
                     if (token === 19 /* CloseBraceToken */) {
                         token = nextToken();
-                        if (token === 153 /* FromKeyword */) {
+                        if (token === 154 /* FromKeyword */) {
                             token = nextToken();
                             if (token === 10 /* StringLiteral */) {
                                 // export {a as A} from "mod";
@@ -133388,7 +136387,7 @@
                 }
                 else if (token === 41 /* AsteriskToken */) {
                     token = nextToken();
-                    if (token === 153 /* FromKeyword */) {
+                    if (token === 154 /* FromKeyword */) {
                         token = nextToken();
                         if (token === 10 /* StringLiteral */) {
                             // export * from "mod"
@@ -133396,21 +136395,21 @@
                         }
                     }
                 }
-                else if (token === 99 /* ImportKeyword */) {
+                else if (token === 100 /* ImportKeyword */) {
                     token = nextToken();
-                    if (token === 149 /* TypeKeyword */) {
+                    if (token === 150 /* TypeKeyword */) {
                         var skipTypeKeyword = ts.scanner.lookAhead(function () {
                             var token = ts.scanner.scan();
-                            return token === 78 /* Identifier */ ||
+                            return token === 79 /* Identifier */ ||
                                 ts.isKeyword(token);
                         });
                         if (skipTypeKeyword) {
                             token = nextToken();
                         }
                     }
-                    if (token === 78 /* Identifier */ || ts.isKeyword(token)) {
+                    if (token === 79 /* Identifier */ || ts.isKeyword(token)) {
                         token = nextToken();
-                        if (token === 62 /* EqualsToken */) {
+                        if (token === 63 /* EqualsToken */) {
                             if (tryConsumeRequireCall(/*skipCurrentToken*/ true)) {
                                 return true;
                             }
@@ -133424,7 +136423,7 @@
         function tryConsumeRequireCall(skipCurrentToken, allowTemplateLiterals) {
             if (allowTemplateLiterals === void 0) { allowTemplateLiterals = false; }
             var token = skipCurrentToken ? nextToken() : ts.scanner.getToken();
-            if (token === 143 /* RequireKeyword */) {
+            if (token === 144 /* RequireKeyword */) {
                 token = nextToken();
                 if (token === 20 /* OpenParenToken */) {
                     token = nextToken();
@@ -133440,7 +136439,7 @@
         }
         function tryConsumeDefine() {
             var token = ts.scanner.getToken();
-            if (token === 78 /* Identifier */ && ts.scanner.getTokenValue() === "define") {
+            if (token === 79 /* Identifier */ && ts.scanner.getTokenValue() === "define") {
                 token = nextToken();
                 if (token !== 20 /* OpenParenToken */) {
                     return true;
@@ -133589,14 +136588,14 @@
                 return getRenameInfoError(ts.Diagnostics.You_cannot_rename_elements_that_are_defined_in_the_standard_TypeScript_library);
             }
             // Cannot rename `default` as in `import { default as foo } from "./someModule";
-            if (ts.isIdentifier(node) && node.originalKeywordKind === 87 /* DefaultKeyword */ && symbol.parent && symbol.parent.flags & 1536 /* Module */) {
+            if (ts.isIdentifier(node) && node.originalKeywordKind === 88 /* DefaultKeyword */ && symbol.parent && symbol.parent.flags & 1536 /* Module */) {
                 return undefined;
             }
             if (ts.isStringLiteralLike(node) && ts.tryGetImportFromModuleSpecifier(node)) {
                 return options && options.allowRenameOfImportPath ? getRenameInfoForModule(node, sourceFile, symbol) : undefined;
             }
             var kind = ts.SymbolDisplay.getSymbolKind(typeChecker, symbol, node);
-            var specifierName = (ts.isImportOrExportSpecifierName(node) || ts.isStringOrNumericLiteralLike(node) && node.parent.kind === 159 /* ComputedPropertyName */)
+            var specifierName = (ts.isImportOrExportSpecifierName(node) || ts.isStringOrNumericLiteralLike(node) && node.parent.kind === 160 /* ComputedPropertyName */)
                 ? ts.stripQuotes(ts.getTextOfIdentifierOrLiteral(node))
                 : undefined;
             var displayName = specifierName || typeChecker.symbolToString(symbol);
@@ -133656,11 +136655,11 @@
         }
         function nodeIsEligibleForRename(node) {
             switch (node.kind) {
-                case 78 /* Identifier */:
-                case 79 /* PrivateIdentifier */:
+                case 79 /* Identifier */:
+                case 80 /* PrivateIdentifier */:
                 case 10 /* StringLiteral */:
                 case 14 /* NoSubstitutionTemplateLiteral */:
-                case 107 /* ThisKeyword */:
+                case 108 /* ThisKeyword */:
                     return true;
                 case 8 /* NumericLiteral */:
                     return ts.isLiteralNameOfPropertyDeclarationOrIndexAccess(node);
@@ -133715,9 +136714,9 @@
                         }
                         // Synthesize a stop for '${ ... }' since '${' and '}' actually belong to siblings.
                         if (ts.isTemplateSpan(parentNode) && nextNode && ts.isTemplateMiddleOrTemplateTail(nextNode)) {
-                            var start_2 = node.getFullStart() - "${".length;
+                            var start_1 = node.getFullStart() - "${".length;
                             var end_2 = nextNode.getStart() + "}".length;
-                            pushSelectionRange(start_2, end_2);
+                            pushSelectionRange(start_1, end_2);
                         }
                         // Blocks with braces, brackets, parens, or JSX tags on separate lines should be
                         // selected from open to close, including whitespace but not including the braces/etc. themselves.
@@ -133822,14 +136821,14 @@
                 ts.Debug.assertEqual(closeBraceToken.kind, 19 /* CloseBraceToken */);
                 // Group `-/+readonly` and `-/+?`
                 var groupedWithPlusMinusTokens = groupChildren(children, function (child) {
-                    return child === node.readonlyToken || child.kind === 142 /* ReadonlyKeyword */ ||
+                    return child === node.readonlyToken || child.kind === 143 /* ReadonlyKeyword */ ||
                         child === node.questionToken || child.kind === 57 /* QuestionToken */;
                 });
                 // Group type parameter with surrounding brackets
                 var groupedWithBrackets = groupChildren(groupedWithPlusMinusTokens, function (_a) {
                     var kind = _a.kind;
                     return kind === 22 /* OpenBracketToken */ ||
-                        kind === 160 /* TypeParameter */ ||
+                        kind === 161 /* TypeParameter */ ||
                         kind === 23 /* CloseBracketToken */;
                 });
                 return [
@@ -133862,14 +136861,14 @@
                 });
                 return splitChildren(groupedWithQuestionToken, function (_a) {
                     var kind = _a.kind;
-                    return kind === 62 /* EqualsToken */;
+                    return kind === 63 /* EqualsToken */;
                 });
             }
             // Pivot on '='
             if (ts.isBindingElement(node)) {
                 return splitChildren(node.getChildren(), function (_a) {
                     var kind = _a.kind;
-                    return kind === 62 /* EqualsToken */;
+                    return kind === 63 /* EqualsToken */;
                 });
             }
             return node.getChildren();
@@ -133943,22 +136942,22 @@
             return kind === 18 /* OpenBraceToken */
                 || kind === 22 /* OpenBracketToken */
                 || kind === 20 /* OpenParenToken */
-                || kind === 276 /* JsxOpeningElement */;
+                || kind === 278 /* JsxOpeningElement */;
         }
         function isListCloser(token) {
             var kind = token && token.kind;
             return kind === 19 /* CloseBraceToken */
                 || kind === 23 /* CloseBracketToken */
                 || kind === 21 /* CloseParenToken */
-                || kind === 277 /* JsxClosingElement */;
+                || kind === 279 /* JsxClosingElement */;
         }
         function getEndPos(sourceFile, node) {
             switch (node.kind) {
-                case 330 /* JSDocParameterTag */:
-                case 328 /* JSDocCallbackTag */:
-                case 337 /* JSDocPropertyTag */:
-                case 335 /* JSDocTypedefTag */:
-                case 332 /* JSDocThisTag */:
+                case 335 /* JSDocParameterTag */:
+                case 333 /* JSDocCallbackTag */:
+                case 342 /* JSDocPropertyTag */:
+                case 340 /* JSDocTypedefTag */:
+                case 337 /* JSDocThisTag */:
                     return sourceFile.getLineEndOfPosition(node.getStart());
                 default:
                     return node.getEnd();
@@ -134168,10 +137167,10 @@
                 }
                 return undefined;
             }
-            else if (ts.isTemplateHead(node) && parent.parent.kind === 206 /* TaggedTemplateExpression */) {
+            else if (ts.isTemplateHead(node) && parent.parent.kind === 208 /* TaggedTemplateExpression */) {
                 var templateExpression = parent;
                 var tagExpression = templateExpression.parent;
-                ts.Debug.assert(templateExpression.kind === 219 /* TemplateExpression */);
+                ts.Debug.assert(templateExpression.kind === 221 /* TemplateExpression */);
                 var argumentIndex = ts.isInsideTemplateLiteral(node, position, sourceFile) ? 0 : 1;
                 return getArgumentListInfoForTemplate(tagExpression, argumentIndex, sourceFile);
             }
@@ -134240,17 +137239,17 @@
                 return undefined;
             var parent = startingToken.parent;
             switch (parent.kind) {
-                case 208 /* ParenthesizedExpression */:
-                case 166 /* MethodDeclaration */:
-                case 209 /* FunctionExpression */:
-                case 210 /* ArrowFunction */:
+                case 210 /* ParenthesizedExpression */:
+                case 167 /* MethodDeclaration */:
+                case 211 /* FunctionExpression */:
+                case 212 /* ArrowFunction */:
                     var info = getArgumentOrParameterListInfo(startingToken, sourceFile);
                     if (!info)
                         return undefined;
                     var argumentIndex = info.argumentIndex, argumentCount = info.argumentCount, argumentsSpan = info.argumentsSpan;
                     var contextualType = ts.isMethodDeclaration(parent) ? checker.getContextualTypeForObjectLiteralElement(parent) : checker.getContextualType(parent);
                     return contextualType && { contextualType: contextualType, argumentIndex: argumentIndex, argumentCount: argumentCount, argumentsSpan: argumentsSpan };
-                case 217 /* BinaryExpression */: {
+                case 219 /* BinaryExpression */: {
                     var highestBinary = getHighestBinary(parent);
                     var contextualType_1 = checker.getContextualType(highestBinary);
                     var argumentIndex_1 = startingToken.kind === 20 /* OpenParenToken */ ? 0 : countBinaryExpressionParameters(parent) - 1;
@@ -134374,7 +137373,7 @@
             //       |       |
             // This is because a Missing node has no width. However, what we actually want is to include trivia
             // leading up to the next token in case the user is about to type in a TemplateMiddle or TemplateTail.
-            if (template.kind === 219 /* TemplateExpression */) {
+            if (template.kind === 221 /* TemplateExpression */) {
                 var lastSpan = ts.last(template.templateSpans);
                 if (lastSpan.literal.getFullWidth() === 0) {
                     applicableSpanEnd = ts.skipTrivia(sourceFile.text, applicableSpanEnd, /*stopAfterLineBreak*/ false);
@@ -134473,7 +137472,7 @@
             var parameters = typeParameters.map(function (t) { return createSignatureHelpParameterForTypeParameter(t, checker, enclosingDeclaration, sourceFile, printer); });
             var documentation = symbol.getDocumentationComment(checker);
             var tags = symbol.getJsDocTags(checker);
-            var prefixDisplayParts = __spreadArray(__spreadArray([], typeSymbolDisplay), [ts.punctuationPart(29 /* LessThanToken */)]);
+            var prefixDisplayParts = __spreadArray(__spreadArray([], typeSymbolDisplay, true), [ts.punctuationPart(29 /* LessThanToken */)], false);
             return { isVariadic: false, prefixDisplayParts: prefixDisplayParts, suffixDisplayParts: [ts.punctuationPart(31 /* GreaterThanToken */)], separatorDisplayParts: separatorDisplayParts, parameters: parameters, documentation: documentation, tags: tags };
         }
         var separatorDisplayParts = [ts.punctuationPart(27 /* CommaToken */), ts.spacePart()];
@@ -134481,8 +137480,8 @@
             var infos = (isTypeParameterList ? itemInfoForTypeParameters : itemInfoForParameters)(candidateSignature, checker, enclosingDeclaration, sourceFile);
             return ts.map(infos, function (_a) {
                 var isVariadic = _a.isVariadic, parameters = _a.parameters, prefix = _a.prefix, suffix = _a.suffix;
-                var prefixDisplayParts = __spreadArray(__spreadArray([], callTargetDisplayParts), prefix);
-                var suffixDisplayParts = __spreadArray(__spreadArray([], suffix), returnTypeToDisplayParts(candidateSignature, enclosingDeclaration, checker));
+                var prefixDisplayParts = __spreadArray(__spreadArray([], callTargetDisplayParts, true), prefix, true);
+                var suffixDisplayParts = __spreadArray(__spreadArray([], suffix, true), returnTypeToDisplayParts(candidateSignature, enclosingDeclaration, checker), true);
                 var documentation = candidateSignature.getDocumentationComment(checker);
                 var tags = candidateSignature.getJsDocTags();
                 return { isVariadic: isVariadic, prefixDisplayParts: prefixDisplayParts, suffixDisplayParts: suffixDisplayParts, separatorDisplayParts: separatorDisplayParts, parameters: parameters, documentation: documentation, tags: tags };
@@ -134507,15 +137506,14 @@
             var parameters = (typeParameters || ts.emptyArray).map(function (t) { return createSignatureHelpParameterForTypeParameter(t, checker, enclosingDeclaration, sourceFile, printer); });
             var thisParameter = candidateSignature.thisParameter ? [checker.symbolToParameterDeclaration(candidateSignature.thisParameter, enclosingDeclaration, signatureHelpNodeBuilderFlags)] : [];
             return checker.getExpandedParameters(candidateSignature).map(function (paramList) {
-                var params = ts.factory.createNodeArray(__spreadArray(__spreadArray([], thisParameter), ts.map(paramList, function (param) { return checker.symbolToParameterDeclaration(param, enclosingDeclaration, signatureHelpNodeBuilderFlags); })));
+                var params = ts.factory.createNodeArray(__spreadArray(__spreadArray([], thisParameter, true), ts.map(paramList, function (param) { return checker.symbolToParameterDeclaration(param, enclosingDeclaration, signatureHelpNodeBuilderFlags); }), true));
                 var parameterParts = ts.mapToDisplayParts(function (writer) {
                     printer.writeList(2576 /* CallExpressionArguments */, params, sourceFile, writer);
                 });
-                return { isVariadic: false, parameters: parameters, prefix: [ts.punctuationPart(29 /* LessThanToken */)], suffix: __spreadArray([ts.punctuationPart(31 /* GreaterThanToken */)], parameterParts) };
+                return { isVariadic: false, parameters: parameters, prefix: [ts.punctuationPart(29 /* LessThanToken */)], suffix: __spreadArray([ts.punctuationPart(31 /* GreaterThanToken */)], parameterParts, true) };
             });
         }
         function itemInfoForParameters(candidateSignature, checker, enclosingDeclaration, sourceFile) {
-            var isVariadic = checker.hasEffectiveRestParameter(candidateSignature);
             var printer = ts.createPrinter({ removeComments: true });
             var typeParameterParts = ts.mapToDisplayParts(function (writer) {
                 if (candidateSignature.typeParameters && candidateSignature.typeParameters.length) {
@@ -134524,14 +137522,15 @@
                 }
             });
             var lists = checker.getExpandedParameters(candidateSignature);
-            return lists.map(function (parameterList) {
-                return {
-                    isVariadic: isVariadic && (lists.length === 1 || !!(parameterList[parameterList.length - 1].checkFlags & 32768 /* RestParameter */)),
-                    parameters: parameterList.map(function (p) { return createSignatureHelpParameterForParameter(p, checker, enclosingDeclaration, sourceFile, printer); }),
-                    prefix: __spreadArray(__spreadArray([], typeParameterParts), [ts.punctuationPart(20 /* OpenParenToken */)]),
-                    suffix: [ts.punctuationPart(21 /* CloseParenToken */)]
-                };
-            });
+            var isVariadic = !checker.hasEffectiveRestParameter(candidateSignature) ? function (_) { return false; }
+                : lists.length === 1 ? function (_) { return true; }
+                    : function (pList) { return !!(pList.length && pList[pList.length - 1].checkFlags & 32768 /* RestParameter */); };
+            return lists.map(function (parameterList) { return ({
+                isVariadic: isVariadic(parameterList),
+                parameters: parameterList.map(function (p) { return createSignatureHelpParameterForParameter(p, checker, enclosingDeclaration, sourceFile, printer); }),
+                prefix: __spreadArray(__spreadArray([], typeParameterParts, true), [ts.punctuationPart(20 /* OpenParenToken */)], false),
+                suffix: [ts.punctuationPart(21 /* CloseParenToken */)]
+            }); });
         }
         function createSignatureHelpParameterForParameter(parameter, checker, enclosingDeclaration, sourceFile, printer) {
             var displayParts = ts.mapToDisplayParts(function (writer) {
@@ -134554,6 +137553,279 @@
 /* @internal */
 var ts;
 (function (ts) {
+    var InlayHints;
+    (function (InlayHints) {
+        var maxHintsLength = 30;
+        var leadingParameterNameCommentRegexFactory = function (name) {
+            return new RegExp("^\\s?/\\*\\*?\\s?" + name + "\\s?\\*\\/\\s?$");
+        };
+        function shouldShowParameterNameHints(preferences) {
+            return preferences.includeInlayParameterNameHints === "literals" || preferences.includeInlayParameterNameHints === "all";
+        }
+        function shouldShowLiteralParameterNameHintsOnly(preferences) {
+            return preferences.includeInlayParameterNameHints === "literals";
+        }
+        function provideInlayHints(context) {
+            var file = context.file, program = context.program, span = context.span, cancellationToken = context.cancellationToken, preferences = context.preferences;
+            var sourceFileText = file.text;
+            var compilerOptions = program.getCompilerOptions();
+            var checker = program.getTypeChecker();
+            var result = [];
+            visitor(file);
+            return result;
+            function visitor(node) {
+                if (!node || node.getFullWidth() === 0) {
+                    return;
+                }
+                switch (node.kind) {
+                    case 259 /* ModuleDeclaration */:
+                    case 255 /* ClassDeclaration */:
+                    case 256 /* InterfaceDeclaration */:
+                    case 254 /* FunctionDeclaration */:
+                    case 224 /* ClassExpression */:
+                    case 211 /* FunctionExpression */:
+                    case 167 /* MethodDeclaration */:
+                    case 212 /* ArrowFunction */:
+                        cancellationToken.throwIfCancellationRequested();
+                }
+                if (!ts.textSpanIntersectsWith(span, node.pos, node.getFullWidth())) {
+                    return;
+                }
+                if (ts.isTypeNode(node)) {
+                    return;
+                }
+                if (preferences.includeInlayVariableTypeHints && ts.isVariableDeclaration(node)) {
+                    visitVariableLikeDeclaration(node);
+                }
+                else if (preferences.includeInlayPropertyDeclarationTypeHints && ts.isPropertyDeclaration(node)) {
+                    visitVariableLikeDeclaration(node);
+                }
+                else if (preferences.includeInlayEnumMemberValueHints && ts.isEnumMember(node)) {
+                    visitEnumMember(node);
+                }
+                else if (shouldShowParameterNameHints(preferences) && (ts.isCallExpression(node) || ts.isNewExpression(node))) {
+                    visitCallOrNewExpression(node);
+                }
+                else {
+                    if (preferences.includeInlayFunctionParameterTypeHints && ts.isFunctionLikeDeclaration(node) && ts.hasContextSensitiveParameters(node)) {
+                        visitFunctionLikeForParameterType(node);
+                    }
+                    if (preferences.includeInlayFunctionLikeReturnTypeHints && isSignatureSupportingReturnAnnotation(node)) {
+                        visitFunctionDeclarationLikeForReturnType(node);
+                    }
+                }
+                return ts.forEachChild(node, visitor);
+            }
+            function isSignatureSupportingReturnAnnotation(node) {
+                return ts.isArrowFunction(node) || ts.isFunctionExpression(node) || ts.isFunctionDeclaration(node) || ts.isMethodDeclaration(node) || ts.isGetAccessorDeclaration(node);
+            }
+            function addParameterHints(text, position, isFirstVariadicArgument) {
+                result.push({
+                    text: "" + (isFirstVariadicArgument ? "..." : "") + truncation(text, maxHintsLength) + ":",
+                    position: position,
+                    kind: "Parameter" /* Parameter */,
+                    whitespaceAfter: true,
+                });
+            }
+            function addTypeHints(text, position) {
+                result.push({
+                    text: ": " + truncation(text, maxHintsLength),
+                    position: position,
+                    kind: "Type" /* Type */,
+                    whitespaceBefore: true,
+                });
+            }
+            function addEnumMemberValueHints(text, position) {
+                result.push({
+                    text: "= " + truncation(text, maxHintsLength),
+                    position: position,
+                    kind: "Enum" /* Enum */,
+                    whitespaceBefore: true,
+                });
+            }
+            function visitEnumMember(member) {
+                if (member.initializer) {
+                    return;
+                }
+                var enumValue = checker.getConstantValue(member);
+                if (enumValue !== undefined) {
+                    addEnumMemberValueHints(enumValue.toString(), member.end);
+                }
+            }
+            function isModuleReferenceType(type) {
+                return type.symbol && (type.symbol.flags & 1536 /* Module */);
+            }
+            function visitVariableLikeDeclaration(decl) {
+                if (!decl.initializer || ts.isBindingPattern(decl.name)) {
+                    return;
+                }
+                var effectiveTypeAnnotation = ts.getEffectiveTypeAnnotationNode(decl);
+                if (effectiveTypeAnnotation) {
+                    return;
+                }
+                var declarationType = checker.getTypeAtLocation(decl);
+                if (isModuleReferenceType(declarationType)) {
+                    return;
+                }
+                var typeDisplayString = printTypeInSingleLine(declarationType);
+                if (typeDisplayString) {
+                    addTypeHints(typeDisplayString, decl.name.end);
+                }
+            }
+            function visitCallOrNewExpression(expr) {
+                var args = expr.arguments;
+                if (!args || !args.length) {
+                    return;
+                }
+                var candidates = [];
+                var signature = checker.getResolvedSignatureForSignatureHelp(expr, candidates);
+                if (!signature || !candidates.length) {
+                    return;
+                }
+                for (var i = 0; i < args.length; ++i) {
+                    var originalArg = args[i];
+                    var arg = ts.skipParentheses(originalArg);
+                    if (shouldShowLiteralParameterNameHintsOnly(preferences) && !isHintableLiteral(arg)) {
+                        continue;
+                    }
+                    var identifierNameInfo = checker.getParameterIdentifierNameAtPosition(signature, i);
+                    if (identifierNameInfo) {
+                        var parameterName = identifierNameInfo[0], isFirstVariadicArgument = identifierNameInfo[1];
+                        var isParameterNameNotSameAsArgument = preferences.includeInlayParameterNameHintsWhenArgumentMatchesName || !identifierOrAccessExpressionPostfixMatchesParameterName(arg, parameterName);
+                        if (!isParameterNameNotSameAsArgument && !isFirstVariadicArgument) {
+                            continue;
+                        }
+                        var name = ts.unescapeLeadingUnderscores(parameterName);
+                        if (leadingCommentsContainsParameterName(arg, name)) {
+                            continue;
+                        }
+                        addParameterHints(name, originalArg.getStart(), isFirstVariadicArgument);
+                    }
+                }
+            }
+            function identifierOrAccessExpressionPostfixMatchesParameterName(expr, parameterName) {
+                if (ts.isIdentifier(expr)) {
+                    return expr.text === parameterName;
+                }
+                if (ts.isPropertyAccessExpression(expr)) {
+                    return expr.name.text === parameterName;
+                }
+                return false;
+            }
+            function leadingCommentsContainsParameterName(node, name) {
+                if (!ts.isIdentifierText(name, compilerOptions.target, ts.getLanguageVariant(file.scriptKind))) {
+                    return false;
+                }
+                var ranges = ts.getLeadingCommentRanges(sourceFileText, node.pos);
+                if (!(ranges === null || ranges === void 0 ? void 0 : ranges.length)) {
+                    return false;
+                }
+                var regex = leadingParameterNameCommentRegexFactory(name);
+                return ts.some(ranges, function (range) { return regex.test(sourceFileText.substring(range.pos, range.end)); });
+            }
+            function isHintableLiteral(node) {
+                switch (node.kind) {
+                    case 217 /* PrefixUnaryExpression */: {
+                        var operand = node.operand;
+                        return ts.isLiteralExpression(operand) || ts.isIdentifier(operand) && ts.isInfinityOrNaNString(operand.escapedText);
+                    }
+                    case 110 /* TrueKeyword */:
+                    case 95 /* FalseKeyword */:
+                    case 104 /* NullKeyword */:
+                        return true;
+                    case 79 /* Identifier */: {
+                        var name = node.escapedText;
+                        return isUndefined(name) || ts.isInfinityOrNaNString(name);
+                    }
+                }
+                return ts.isLiteralExpression(node);
+            }
+            function visitFunctionDeclarationLikeForReturnType(decl) {
+                if (ts.isArrowFunction(decl)) {
+                    if (!ts.findChildOfKind(decl, 20 /* OpenParenToken */, file)) {
+                        return;
+                    }
+                }
+                var effectiveTypeAnnotation = ts.getEffectiveReturnTypeNode(decl);
+                if (effectiveTypeAnnotation || !decl.body) {
+                    return;
+                }
+                var signature = checker.getSignatureFromDeclaration(decl);
+                if (!signature) {
+                    return;
+                }
+                var returnType = checker.getReturnTypeOfSignature(signature);
+                if (isModuleReferenceType(returnType)) {
+                    return;
+                }
+                var typeDisplayString = printTypeInSingleLine(returnType);
+                if (!typeDisplayString) {
+                    return;
+                }
+                addTypeHints(typeDisplayString, getTypeAnnotationPosition(decl));
+            }
+            function getTypeAnnotationPosition(decl) {
+                var closeParenToken = ts.findChildOfKind(decl, 21 /* CloseParenToken */, file);
+                if (closeParenToken) {
+                    return closeParenToken.end;
+                }
+                return decl.parameters.end;
+            }
+            function visitFunctionLikeForParameterType(node) {
+                var signature = checker.getSignatureFromDeclaration(node);
+                if (!signature) {
+                    return;
+                }
+                for (var i = 0; i < node.parameters.length && i < signature.parameters.length; ++i) {
+                    var param = node.parameters[i];
+                    var effectiveTypeAnnotation = ts.getEffectiveTypeAnnotationNode(param);
+                    if (effectiveTypeAnnotation) {
+                        continue;
+                    }
+                    var typeDisplayString = getParameterDeclarationTypeDisplayString(signature.parameters[i]);
+                    if (!typeDisplayString) {
+                        continue;
+                    }
+                    addTypeHints(typeDisplayString, param.end);
+                }
+            }
+            function getParameterDeclarationTypeDisplayString(symbol) {
+                var valueDeclaration = symbol.valueDeclaration;
+                if (!valueDeclaration || !ts.isParameter(valueDeclaration)) {
+                    return undefined;
+                }
+                var signatureParamType = checker.getTypeOfSymbolAtLocation(symbol, valueDeclaration);
+                if (isModuleReferenceType(signatureParamType)) {
+                    return undefined;
+                }
+                return printTypeInSingleLine(signatureParamType);
+            }
+            function truncation(text, maxLength) {
+                if (text.length > maxLength) {
+                    return text.substr(0, maxLength - "...".length) + "...";
+                }
+                return text;
+            }
+            function printTypeInSingleLine(type) {
+                var flags = 70221824 /* IgnoreErrors */ | 1048576 /* AllowUniqueESSymbolType */ | 16384 /* UseAliasDefinedOutsideCurrentScope */;
+                var options = { removeComments: true };
+                var printer = ts.createPrinter(options);
+                return ts.usingSingleLineStringWriter(function (writer) {
+                    var typeNode = checker.typeToTypeNode(type, /*enclosingDeclaration*/ undefined, flags, writer);
+                    ts.Debug.assertIsDefined(typeNode, "should always get typenode");
+                    printer.writeNode(4 /* Unspecified */, typeNode, /*sourceFile*/ file, writer);
+                });
+            }
+            function isUndefined(name) {
+                return name === "undefined";
+            }
+        }
+        InlayHints.provideInlayHints = provideInlayHints;
+    })(InlayHints = ts.InlayHints || (ts.InlayHints = {}));
+})(ts || (ts = {}));
+/* @internal */
+var ts;
+(function (ts) {
     var base64UrlRegExp = /^data:(?:application\/json(?:;charset=[uU][tT][fF]-8);base64,([A-Za-z0-9+\/=]+)$)?/;
     function getSourceMapper(host) {
         var getCanonicalFileName = ts.createGetCanonicalFileName(host.useCaseSensitiveFileNames());
@@ -134768,11 +138040,11 @@
     function containsTopLevelCommonjs(sourceFile) {
         return sourceFile.statements.some(function (statement) {
             switch (statement.kind) {
-                case 233 /* VariableStatement */:
+                case 235 /* VariableStatement */:
                     return statement.declarationList.declarations.some(function (decl) {
                         return !!decl.initializer && ts.isRequireCall(propertyAccessLeftHandSide(decl.initializer), /*checkArgumentIsStringLiteralLike*/ true);
                     });
-                case 234 /* ExpressionStatement */: {
+                case 236 /* ExpressionStatement */: {
                     var expression = statement.expression;
                     if (!ts.isBinaryExpression(expression))
                         return ts.isRequireCall(expression, /*checkArgumentIsStringLiteralLike*/ true);
@@ -134789,12 +138061,12 @@
     }
     function importNameForConvertToDefaultImport(node) {
         switch (node.kind) {
-            case 262 /* ImportDeclaration */:
+            case 264 /* ImportDeclaration */:
                 var importClause = node.importClause, moduleSpecifier = node.moduleSpecifier;
-                return importClause && !importClause.name && importClause.namedBindings && importClause.namedBindings.kind === 264 /* NamespaceImport */ && ts.isStringLiteral(moduleSpecifier)
+                return importClause && !importClause.name && importClause.namedBindings && importClause.namedBindings.kind === 266 /* NamespaceImport */ && ts.isStringLiteral(moduleSpecifier)
                     ? importClause.namedBindings.name
                     : undefined;
-            case 261 /* ImportEqualsDeclaration */:
+            case 263 /* ImportEqualsDeclaration */:
                 return node.name;
             default:
                 return undefined;
@@ -134856,22 +138128,27 @@
         if (node.arguments.length < 2)
             return true;
         return ts.some(node.arguments, function (arg) {
-            return arg.kind === 103 /* NullKeyword */ ||
+            return arg.kind === 104 /* NullKeyword */ ||
                 ts.isIdentifier(arg) && arg.text === "undefined";
         });
     }
     // should be kept up to date with getTransformationBody in convertToAsyncFunction.ts
     function isFixablePromiseArgument(arg, checker) {
         switch (arg.kind) {
-            case 252 /* FunctionDeclaration */:
-            case 209 /* FunctionExpression */:
-            case 210 /* ArrowFunction */:
+            case 254 /* FunctionDeclaration */:
+            case 211 /* FunctionExpression */:
+                var functionFlags = ts.getFunctionFlags(arg);
+                if (functionFlags & 1 /* Generator */) {
+                    return false;
+                }
+            // falls through
+            case 212 /* ArrowFunction */:
                 visitedNestedConvertibleFunctions.set(getKeyFromNode(arg), true);
             // falls through
-            case 103 /* NullKeyword */:
+            case 104 /* NullKeyword */:
                 return true;
-            case 78 /* Identifier */:
-            case 202 /* PropertyAccessExpression */: {
+            case 79 /* Identifier */:
+            case 204 /* PropertyAccessExpression */: {
                 var symbol = checker.getSymbolAtLocation(arg);
                 if (!symbol) {
                     return false;
@@ -134888,24 +138165,24 @@
     }
     function canBeConvertedToClass(node, checker) {
         var _a, _b, _c, _d;
-        if (node.kind === 209 /* FunctionExpression */) {
+        if (node.kind === 211 /* FunctionExpression */) {
             if (ts.isVariableDeclaration(node.parent) && ((_a = node.symbol.members) === null || _a === void 0 ? void 0 : _a.size)) {
                 return true;
             }
             var symbol = checker.getSymbolOfExpando(node, /*allowDeclaration*/ false);
             return !!(symbol && (((_b = symbol.exports) === null || _b === void 0 ? void 0 : _b.size) || ((_c = symbol.members) === null || _c === void 0 ? void 0 : _c.size)));
         }
-        if (node.kind === 252 /* FunctionDeclaration */) {
+        if (node.kind === 254 /* FunctionDeclaration */) {
             return !!((_d = node.symbol.members) === null || _d === void 0 ? void 0 : _d.size);
         }
         return false;
     }
     function canBeConvertedToAsync(node) {
         switch (node.kind) {
-            case 252 /* FunctionDeclaration */:
-            case 166 /* MethodDeclaration */:
-            case 209 /* FunctionExpression */:
-            case 210 /* ArrowFunction */:
+            case 254 /* FunctionDeclaration */:
+            case 167 /* MethodDeclaration */:
+            case 211 /* FunctionExpression */:
+            case 212 /* ArrowFunction */:
                 return true;
             default:
                 return false;
@@ -134927,7 +138204,7 @@
             }
             var flags = ts.getCombinedLocalAndExportSymbolFlags(symbol);
             if (flags & 32 /* Class */) {
-                return ts.getDeclarationOfKind(symbol, 222 /* ClassExpression */) ?
+                return ts.getDeclarationOfKind(symbol, 224 /* ClassExpression */) ?
                     "local class" /* localClassElement */ : "class" /* classElement */;
             }
             if (flags & 384 /* Enum */)
@@ -134962,7 +138239,7 @@
             if (typeChecker.isArgumentsSymbol(symbol)) {
                 return "local var" /* localVariableElement */;
             }
-            if (location.kind === 107 /* ThisKeyword */ && ts.isExpression(location)) {
+            if (location.kind === 108 /* ThisKeyword */ && ts.isExpression(location)) {
                 return "parameter" /* parameterElement */;
             }
             var flags = ts.getCombinedLocalAndExportSymbolFlags(symbol);
@@ -135011,11 +138288,11 @@
                 // If we requested completions after `x.` at the top-level, we may be at a source file location.
                 switch (location.parent && location.parent.kind) {
                     // If we've typed a character of the attribute name, will be 'JsxAttribute', else will be 'JsxOpeningElement'.
-                    case 276 /* JsxOpeningElement */:
-                    case 274 /* JsxElement */:
-                    case 275 /* JsxSelfClosingElement */:
-                        return location.kind === 78 /* Identifier */ ? "property" /* memberVariableElement */ : "JSX attribute" /* jsxAttribute */;
-                    case 281 /* JsxAttribute */:
+                    case 278 /* JsxOpeningElement */:
+                    case 276 /* JsxElement */:
+                    case 277 /* JsxSelfClosingElement */:
+                        return location.kind === 79 /* Identifier */ ? "property" /* memberVariableElement */ : "JSX attribute" /* jsxAttribute */;
+                    case 283 /* JsxAttribute */:
                         return "JSX attribute" /* jsxAttribute */;
                     default:
                         return "property" /* memberVariableElement */;
@@ -135023,14 +138300,11 @@
             }
             return "" /* unknown */;
         }
-        function isDeprecatedDeclaration(decl) {
-            return !!(ts.getCombinedNodeFlagsAlwaysIncludeJSDoc(decl) & 8192 /* Deprecated */);
-        }
         function getNormalizedSymbolModifiers(symbol) {
             if (symbol.declarations && symbol.declarations.length) {
                 var _a = symbol.declarations, declaration = _a[0], declarations = _a.slice(1);
                 // omit deprecated flag if some declarations are not deprecated
-                var excludeFlags = ts.length(declarations) && isDeprecatedDeclaration(declaration) && ts.some(declarations, function (d) { return !isDeprecatedDeclaration(d); })
+                var excludeFlags = ts.length(declarations) && ts.isDeprecatedDeclaration(declaration) && ts.some(declarations, function (d) { return !ts.isDeprecatedDeclaration(d); })
                     ? 8192 /* Deprecated */
                     : 0 /* None */;
                 var modifiers = ts.getNodeModifiers(declaration, excludeFlags);
@@ -135069,14 +138343,14 @@
             var symbolFlags = ts.getCombinedLocalAndExportSymbolFlags(symbol);
             var symbolKind = semanticMeaning & 1 /* Value */ ? getSymbolKindOfConstructorPropertyMethodAccessorFunctionOrVar(typeChecker, symbol, location) : "" /* unknown */;
             var hasAddedSymbolInfo = false;
-            var isThisExpression = location.kind === 107 /* ThisKeyword */ && ts.isInExpressionContext(location);
+            var isThisExpression = location.kind === 108 /* ThisKeyword */ && ts.isInExpressionContext(location);
             var type;
             var printer;
             var documentationFromAlias;
             var tagsFromAlias;
             var hasMultipleSignatures = false;
-            if (location.kind === 107 /* ThisKeyword */ && !isThisExpression) {
-                return { displayParts: [ts.keywordPart(107 /* ThisKeyword */)], documentation: [], symbolKind: "primitive type" /* primitiveType */, tags: undefined };
+            if (location.kind === 108 /* ThisKeyword */ && !isThisExpression) {
+                return { displayParts: [ts.keywordPart(108 /* ThisKeyword */)], documentation: [], symbolKind: "primitive type" /* primitiveType */, tags: undefined };
             }
             // Class at constructor site need to be shown as constructor apart from property,method, vars
             if (symbolKind !== "" /* unknown */ || symbolFlags & 32 /* Class */ || symbolFlags & 2097152 /* Alias */) {
@@ -135086,7 +138360,7 @@
                 }
                 var signature = void 0;
                 type = isThisExpression ? typeChecker.getTypeAtLocation(location) : typeChecker.getTypeOfSymbolAtLocation(symbol, location);
-                if (location.parent && location.parent.kind === 202 /* PropertyAccessExpression */) {
+                if (location.parent && location.parent.kind === 204 /* PropertyAccessExpression */) {
                     var right = location.parent.name;
                     // Either the location is on the right of a property access, or on the left and the right is missing
                     if (right === location || (right && right.getFullWidth() === 0)) {
@@ -135106,7 +138380,7 @@
                 }
                 if (callExpressionLike) {
                     signature = typeChecker.getResolvedSignature(callExpressionLike); // TODO: GH#18217
-                    var useConstructSignatures = callExpressionLike.kind === 205 /* NewExpression */ || (ts.isCallExpression(callExpressionLike) && callExpressionLike.expression.kind === 105 /* SuperKeyword */);
+                    var useConstructSignatures = callExpressionLike.kind === 207 /* NewExpression */ || (ts.isCallExpression(callExpressionLike) && callExpressionLike.expression.kind === 106 /* SuperKeyword */);
                     var allSignatures = useConstructSignatures ? type.getConstructSignatures() : type.getCallSignatures();
                     if (signature && !ts.contains(allSignatures, signature.target) && !ts.contains(allSignatures, signature)) {
                         // Get the first signature if there is one -- allSignatures may contain
@@ -135125,10 +138399,10 @@
                             displayParts.push(ts.spacePart());
                             if (useConstructSignatures) {
                                 if (signature.flags & 4 /* Abstract */) {
-                                    displayParts.push(ts.keywordPart(125 /* AbstractKeyword */));
+                                    displayParts.push(ts.keywordPart(126 /* AbstractKeyword */));
                                     displayParts.push(ts.spacePart());
                                 }
-                                displayParts.push(ts.keywordPart(102 /* NewKeyword */));
+                                displayParts.push(ts.keywordPart(103 /* NewKeyword */));
                                 displayParts.push(ts.spacePart());
                             }
                             addFullSymbolName(symbol);
@@ -135153,10 +138427,10 @@
                                 }
                                 if (useConstructSignatures) {
                                     if (signature.flags & 4 /* Abstract */) {
-                                        displayParts.push(ts.keywordPart(125 /* AbstractKeyword */));
+                                        displayParts.push(ts.keywordPart(126 /* AbstractKeyword */));
                                         displayParts.push(ts.spacePart());
                                     }
-                                    displayParts.push(ts.keywordPart(102 /* NewKeyword */));
+                                    displayParts.push(ts.keywordPart(103 /* NewKeyword */));
                                     displayParts.push(ts.spacePart());
                                 }
                                 addSignatureDisplayParts(signature, allSignatures, 262144 /* WriteArrowStyleSignature */);
@@ -135170,29 +138444,29 @@
                     }
                 }
                 else if ((ts.isNameOfFunctionDeclaration(location) && !(symbolFlags & 98304 /* Accessor */)) || // name of function declaration
-                    (location.kind === 132 /* ConstructorKeyword */ && location.parent.kind === 167 /* Constructor */)) { // At constructor keyword of constructor declaration
+                    (location.kind === 133 /* ConstructorKeyword */ && location.parent.kind === 169 /* Constructor */)) { // At constructor keyword of constructor declaration
                     // get the signature from the declaration and write it
                     var functionDeclaration_1 = location.parent;
                     // Use function declaration to write the signatures only if the symbol corresponding to this declaration
                     var locationIsSymbolDeclaration = symbol.declarations && ts.find(symbol.declarations, function (declaration) {
-                        return declaration === (location.kind === 132 /* ConstructorKeyword */ ? functionDeclaration_1.parent : functionDeclaration_1);
+                        return declaration === (location.kind === 133 /* ConstructorKeyword */ ? functionDeclaration_1.parent : functionDeclaration_1);
                     });
                     if (locationIsSymbolDeclaration) {
-                        var allSignatures = functionDeclaration_1.kind === 167 /* Constructor */ ? type.getNonNullableType().getConstructSignatures() : type.getNonNullableType().getCallSignatures();
+                        var allSignatures = functionDeclaration_1.kind === 169 /* Constructor */ ? type.getNonNullableType().getConstructSignatures() : type.getNonNullableType().getCallSignatures();
                         if (!typeChecker.isImplementationOfOverload(functionDeclaration_1)) {
                             signature = typeChecker.getSignatureFromDeclaration(functionDeclaration_1); // TODO: GH#18217
                         }
                         else {
                             signature = allSignatures[0];
                         }
-                        if (functionDeclaration_1.kind === 167 /* Constructor */) {
+                        if (functionDeclaration_1.kind === 169 /* Constructor */) {
                             // show (constructor) Type(...) signature
                             symbolKind = "constructor" /* constructorImplementationElement */;
                             addPrefixForAnyFunctionOrVar(type.symbol, symbolKind);
                         }
                         else {
                             // (function/method) symbol(..signature)
-                            addPrefixForAnyFunctionOrVar(functionDeclaration_1.kind === 170 /* CallSignature */ &&
+                            addPrefixForAnyFunctionOrVar(functionDeclaration_1.kind === 172 /* CallSignature */ &&
                                 !(type.symbol.flags & 2048 /* TypeLiteral */ || type.symbol.flags & 4096 /* ObjectLiteral */) ? type.symbol : symbol, symbolKind);
                         }
                         if (signature) {
@@ -135205,7 +138479,7 @@
             }
             if (symbolFlags & 32 /* Class */ && !hasAddedSymbolInfo && !isThisExpression) {
                 addAliasPrefixIfNecessary();
-                if (ts.getDeclarationOfKind(symbol, 222 /* ClassExpression */)) {
+                if (ts.getDeclarationOfKind(symbol, 224 /* ClassExpression */)) {
                     // Special case for class expressions because we would like to indicate that
                     // the class name is local to the class body (similar to function expression)
                     //      (local class) class <className>
@@ -135213,7 +138487,7 @@
                 }
                 else {
                     // Class declaration has name which is not local.
-                    displayParts.push(ts.keywordPart(83 /* ClassKeyword */));
+                    displayParts.push(ts.keywordPart(84 /* ClassKeyword */));
                 }
                 displayParts.push(ts.spacePart());
                 addFullSymbolName(symbol);
@@ -135221,37 +138495,37 @@
             }
             if ((symbolFlags & 64 /* Interface */) && (semanticMeaning & 2 /* Type */)) {
                 prefixNextMeaning();
-                displayParts.push(ts.keywordPart(117 /* InterfaceKeyword */));
+                displayParts.push(ts.keywordPart(118 /* InterfaceKeyword */));
                 displayParts.push(ts.spacePart());
                 addFullSymbolName(symbol);
                 writeTypeParametersOfSymbol(symbol, sourceFile);
             }
             if ((symbolFlags & 524288 /* TypeAlias */) && (semanticMeaning & 2 /* Type */)) {
                 prefixNextMeaning();
-                displayParts.push(ts.keywordPart(149 /* TypeKeyword */));
+                displayParts.push(ts.keywordPart(150 /* TypeKeyword */));
                 displayParts.push(ts.spacePart());
                 addFullSymbolName(symbol);
                 writeTypeParametersOfSymbol(symbol, sourceFile);
                 displayParts.push(ts.spacePart());
-                displayParts.push(ts.operatorPart(62 /* EqualsToken */));
+                displayParts.push(ts.operatorPart(63 /* EqualsToken */));
                 displayParts.push(ts.spacePart());
                 ts.addRange(displayParts, ts.typeToDisplayParts(typeChecker, typeChecker.getDeclaredTypeOfSymbol(symbol), enclosingDeclaration, 8388608 /* InTypeAlias */));
             }
             if (symbolFlags & 384 /* Enum */) {
                 prefixNextMeaning();
                 if (ts.some(symbol.declarations, function (d) { return ts.isEnumDeclaration(d) && ts.isEnumConst(d); })) {
-                    displayParts.push(ts.keywordPart(84 /* ConstKeyword */));
+                    displayParts.push(ts.keywordPart(85 /* ConstKeyword */));
                     displayParts.push(ts.spacePart());
                 }
-                displayParts.push(ts.keywordPart(91 /* EnumKeyword */));
+                displayParts.push(ts.keywordPart(92 /* EnumKeyword */));
                 displayParts.push(ts.spacePart());
                 addFullSymbolName(symbol);
             }
             if (symbolFlags & 1536 /* Module */ && !isThisExpression) {
                 prefixNextMeaning();
-                var declaration = ts.getDeclarationOfKind(symbol, 257 /* ModuleDeclaration */);
-                var isNamespace = declaration && declaration.name && declaration.name.kind === 78 /* Identifier */;
-                displayParts.push(ts.keywordPart(isNamespace ? 140 /* NamespaceKeyword */ : 139 /* ModuleKeyword */));
+                var declaration = ts.getDeclarationOfKind(symbol, 259 /* ModuleDeclaration */);
+                var isNamespace = declaration && declaration.name && declaration.name.kind === 79 /* Identifier */;
+                displayParts.push(ts.keywordPart(isNamespace ? 141 /* NamespaceKeyword */ : 140 /* ModuleKeyword */));
                 displayParts.push(ts.spacePart());
                 addFullSymbolName(symbol);
             }
@@ -135270,7 +138544,7 @@
                 }
                 else {
                     // Method/function type parameter
-                    var decl = ts.getDeclarationOfKind(symbol, 160 /* TypeParameter */);
+                    var decl = ts.getDeclarationOfKind(symbol, 161 /* TypeParameter */);
                     if (decl === undefined)
                         return ts.Debug.fail();
                     var declaration = decl.parent;
@@ -135278,21 +138552,21 @@
                         if (ts.isFunctionLikeKind(declaration.kind)) {
                             addInPrefix();
                             var signature = typeChecker.getSignatureFromDeclaration(declaration); // TODO: GH#18217
-                            if (declaration.kind === 171 /* ConstructSignature */) {
-                                displayParts.push(ts.keywordPart(102 /* NewKeyword */));
+                            if (declaration.kind === 173 /* ConstructSignature */) {
+                                displayParts.push(ts.keywordPart(103 /* NewKeyword */));
                                 displayParts.push(ts.spacePart());
                             }
-                            else if (declaration.kind !== 170 /* CallSignature */ && declaration.name) {
+                            else if (declaration.kind !== 172 /* CallSignature */ && declaration.name) {
                                 addFullSymbolName(declaration.symbol);
                             }
                             ts.addRange(displayParts, ts.signatureToDisplayParts(typeChecker, signature, sourceFile, 32 /* WriteTypeArgumentsOfSignature */));
                         }
-                        else if (declaration.kind === 255 /* TypeAliasDeclaration */) {
+                        else if (declaration.kind === 257 /* TypeAliasDeclaration */) {
                             // Type alias type parameter
                             // For example
                             //      type list<T> = T[]; // Both T will go through same code path
                             addInPrefix();
-                            displayParts.push(ts.keywordPart(149 /* TypeKeyword */));
+                            displayParts.push(ts.keywordPart(150 /* TypeKeyword */));
                             displayParts.push(ts.spacePart());
                             addFullSymbolName(declaration.symbol);
                             writeTypeParametersOfSymbol(declaration.symbol, sourceFile);
@@ -135304,11 +138578,11 @@
                 symbolKind = "enum member" /* enumMemberElement */;
                 addPrefixForAnyFunctionOrVar(symbol, "enum member");
                 var declaration = (_a = symbol.declarations) === null || _a === void 0 ? void 0 : _a[0];
-                if ((declaration === null || declaration === void 0 ? void 0 : declaration.kind) === 292 /* EnumMember */) {
+                if ((declaration === null || declaration === void 0 ? void 0 : declaration.kind) === 294 /* EnumMember */) {
                     var constantValue = typeChecker.getConstantValue(declaration);
                     if (constantValue !== undefined) {
                         displayParts.push(ts.spacePart());
-                        displayParts.push(ts.operatorPart(62 /* EqualsToken */));
+                        displayParts.push(ts.operatorPart(63 /* EqualsToken */));
                         displayParts.push(ts.spacePart());
                         displayParts.push(ts.displayPart(ts.getTextOfConstantValue(constantValue), typeof constantValue === "number" ? ts.SymbolDisplayPartKind.numericLiteral : ts.SymbolDisplayPartKind.stringLiteral));
                     }
@@ -135340,33 +138614,33 @@
                 }
                 if (symbol.declarations) {
                     switch (symbol.declarations[0].kind) {
-                        case 260 /* NamespaceExportDeclaration */:
-                            displayParts.push(ts.keywordPart(92 /* ExportKeyword */));
+                        case 262 /* NamespaceExportDeclaration */:
+                            displayParts.push(ts.keywordPart(93 /* ExportKeyword */));
                             displayParts.push(ts.spacePart());
-                            displayParts.push(ts.keywordPart(140 /* NamespaceKeyword */));
+                            displayParts.push(ts.keywordPart(141 /* NamespaceKeyword */));
                             break;
-                        case 267 /* ExportAssignment */:
-                            displayParts.push(ts.keywordPart(92 /* ExportKeyword */));
+                        case 269 /* ExportAssignment */:
+                            displayParts.push(ts.keywordPart(93 /* ExportKeyword */));
                             displayParts.push(ts.spacePart());
-                            displayParts.push(ts.keywordPart(symbol.declarations[0].isExportEquals ? 62 /* EqualsToken */ : 87 /* DefaultKeyword */));
+                            displayParts.push(ts.keywordPart(symbol.declarations[0].isExportEquals ? 63 /* EqualsToken */ : 88 /* DefaultKeyword */));
                             break;
-                        case 271 /* ExportSpecifier */:
-                            displayParts.push(ts.keywordPart(92 /* ExportKeyword */));
+                        case 273 /* ExportSpecifier */:
+                            displayParts.push(ts.keywordPart(93 /* ExportKeyword */));
                             break;
                         default:
-                            displayParts.push(ts.keywordPart(99 /* ImportKeyword */));
+                            displayParts.push(ts.keywordPart(100 /* ImportKeyword */));
                     }
                 }
                 displayParts.push(ts.spacePart());
                 addFullSymbolName(symbol);
                 ts.forEach(symbol.declarations, function (declaration) {
-                    if (declaration.kind === 261 /* ImportEqualsDeclaration */) {
+                    if (declaration.kind === 263 /* ImportEqualsDeclaration */) {
                         var importEqualsDeclaration = declaration;
                         if (ts.isExternalModuleImportEqualsDeclaration(importEqualsDeclaration)) {
                             displayParts.push(ts.spacePart());
-                            displayParts.push(ts.operatorPart(62 /* EqualsToken */));
+                            displayParts.push(ts.operatorPart(63 /* EqualsToken */));
                             displayParts.push(ts.spacePart());
-                            displayParts.push(ts.keywordPart(143 /* RequireKeyword */));
+                            displayParts.push(ts.keywordPart(144 /* RequireKeyword */));
                             displayParts.push(ts.punctuationPart(20 /* OpenParenToken */));
                             displayParts.push(ts.displayPart(ts.getTextOfNode(ts.getExternalModuleImportEqualsDeclarationExpression(importEqualsDeclaration)), ts.SymbolDisplayPartKind.stringLiteral));
                             displayParts.push(ts.punctuationPart(21 /* CloseParenToken */));
@@ -135375,7 +138649,7 @@
                             var internalAliasSymbol = typeChecker.getSymbolAtLocation(importEqualsDeclaration.moduleReference);
                             if (internalAliasSymbol) {
                                 displayParts.push(ts.spacePart());
-                                displayParts.push(ts.operatorPart(62 /* EqualsToken */));
+                                displayParts.push(ts.operatorPart(63 /* EqualsToken */));
                                 displayParts.push(ts.spacePart());
                                 addFullSymbolName(internalAliasSymbol, enclosingDeclaration);
                             }
@@ -135389,7 +138663,7 @@
                     if (type) {
                         if (isThisExpression) {
                             prefixNextMeaning();
-                            displayParts.push(ts.keywordPart(107 /* ThisKeyword */));
+                            displayParts.push(ts.keywordPart(108 /* ThisKeyword */));
                         }
                         else {
                             addPrefixForAnyFunctionOrVar(symbol, symbolKind);
@@ -135447,10 +138721,10 @@
                 // For some special property access expressions like `exports.foo = foo` or `module.exports.foo = foo`
                 // there documentation comments might be attached to the right hand side symbol of their declarations.
                 // The pattern of such special property access is that the parent symbol is the symbol of the file.
-                if (symbol.parent && symbol.declarations && ts.forEach(symbol.parent.declarations, function (declaration) { return declaration.kind === 298 /* SourceFile */; })) {
+                if (symbol.parent && symbol.declarations && ts.forEach(symbol.parent.declarations, function (declaration) { return declaration.kind === 300 /* SourceFile */; })) {
                     for (var _i = 0, _b = symbol.declarations; _i < _b.length; _i++) {
                         var declaration = _b[_i];
-                        if (!declaration.parent || declaration.parent.kind !== 217 /* BinaryExpression */) {
+                        if (!declaration.parent || declaration.parent.kind !== 219 /* BinaryExpression */) {
                             continue;
                         }
                         var rhsSymbol = typeChecker.getSymbolAtLocation(declaration.parent.right);
@@ -135495,7 +138769,7 @@
             }
             function addInPrefix() {
                 displayParts.push(ts.spacePart());
-                displayParts.push(ts.keywordPart(100 /* InKeyword */));
+                displayParts.push(ts.keywordPart(101 /* InKeyword */));
                 displayParts.push(ts.spacePart());
             }
             function addFullSymbolName(symbolToDisplay, enclosingDeclaration) {
@@ -135568,16 +138842,16 @@
             }
             return ts.forEach(symbol.declarations, function (declaration) {
                 // Function expressions are local
-                if (declaration.kind === 209 /* FunctionExpression */) {
+                if (declaration.kind === 211 /* FunctionExpression */) {
                     return true;
                 }
-                if (declaration.kind !== 250 /* VariableDeclaration */ && declaration.kind !== 252 /* FunctionDeclaration */) {
+                if (declaration.kind !== 252 /* VariableDeclaration */ && declaration.kind !== 254 /* FunctionDeclaration */) {
                     return false;
                 }
                 // If the parent is not sourceFile or module block it is local variable
                 for (var parent = declaration.parent; !ts.isFunctionBlock(parent); parent = parent.parent) {
                     // Reached source file or module block
-                    if (parent.kind === 298 /* SourceFile */ || parent.kind === 258 /* ModuleBlock */) {
+                    if (parent.kind === 300 /* SourceFile */ || parent.kind === 260 /* ModuleBlock */) {
                         return false;
                     }
                 }
@@ -135679,9 +138953,8 @@
     /*@internal*/
     function fixupCompilerOptions(options, diagnostics) {
         // Lazily create this value to fix module loading errors.
-        commandLineOptionsStringToEnum = commandLineOptionsStringToEnum || ts.filter(ts.optionDeclarations, function (o) {
-            return typeof o.type === "object" && !ts.forEachEntry(o.type, function (v) { return typeof v !== "number"; });
-        });
+        commandLineOptionsStringToEnum = commandLineOptionsStringToEnum ||
+            ts.filter(ts.optionDeclarations, function (o) { return typeof o.type === "object" && !ts.forEachEntry(o.type, function (v) { return typeof v !== "number"; }); });
         options = ts.cloneCompilerOptions(options);
         var _loop_9 = function (opt) {
             if (!ts.hasProperty(options, opt.name)) {
@@ -135867,8 +139140,8 @@
             function shouldRescanGreaterThanToken(node) {
                 switch (node.kind) {
                     case 33 /* GreaterThanEqualsToken */:
-                    case 70 /* GreaterThanGreaterThanEqualsToken */:
-                    case 71 /* GreaterThanGreaterThanGreaterThanEqualsToken */:
+                    case 71 /* GreaterThanGreaterThanEqualsToken */:
+                    case 72 /* GreaterThanGreaterThanGreaterThanEqualsToken */:
                     case 49 /* GreaterThanGreaterThanGreaterThanToken */:
                     case 48 /* GreaterThanGreaterThanToken */:
                         return true;
@@ -135878,12 +139151,12 @@
             function shouldRescanJsxIdentifier(node) {
                 if (node.parent) {
                     switch (node.parent.kind) {
-                        case 281 /* JsxAttribute */:
-                        case 276 /* JsxOpeningElement */:
-                        case 277 /* JsxClosingElement */:
-                        case 275 /* JsxSelfClosingElement */:
+                        case 283 /* JsxAttribute */:
+                        case 278 /* JsxOpeningElement */:
+                        case 279 /* JsxClosingElement */:
+                        case 277 /* JsxSelfClosingElement */:
                             // May parse an identifier like `module-layout`; that will be scanned as a keyword at first, but we should parse the whole thing to get an identifier.
-                            return ts.isKeyword(node.kind) || node.kind === 78 /* Identifier */;
+                            return ts.isKeyword(node.kind) || node.kind === 79 /* Identifier */;
                     }
                 }
                 return false;
@@ -135902,7 +139175,7 @@
                 return node.parent && ts.isJsxAttribute(node.parent) && node.parent.initializer === node;
             }
             function startsWithSlashToken(t) {
-                return t === 43 /* SlashToken */ || t === 67 /* SlashEqualsToken */;
+                return t === 43 /* SlashToken */ || t === 68 /* SlashEqualsToken */;
             }
             function readTokenInfo(n) {
                 ts.Debug.assert(isOnToken());
@@ -136075,7 +139348,7 @@
     (function (formatting) {
         function getAllRules() {
             var allTokens = [];
-            for (var token = 0 /* FirstToken */; token <= 157 /* LastToken */; token++) {
+            for (var token = 0 /* FirstToken */; token <= 158 /* LastToken */; token++) {
                 if (token !== 1 /* EndOfFileToken */) {
                     allTokens.push(token);
                 }
@@ -136088,29 +139361,29 @@
                 return { tokens: allTokens.filter(function (t) { return !tokens.some(function (t2) { return t2 === t; }); }), isSpecific: false };
             }
             var anyToken = { tokens: allTokens, isSpecific: false };
-            var anyTokenIncludingMultilineComments = tokenRangeFrom(__spreadArray(__spreadArray([], allTokens), [3 /* MultiLineCommentTrivia */]));
-            var anyTokenIncludingEOF = tokenRangeFrom(__spreadArray(__spreadArray([], allTokens), [1 /* EndOfFileToken */]));
-            var keywords = tokenRangeFromRange(80 /* FirstKeyword */, 157 /* LastKeyword */);
-            var binaryOperators = tokenRangeFromRange(29 /* FirstBinaryOperator */, 77 /* LastBinaryOperator */);
-            var binaryKeywordOperators = [100 /* InKeyword */, 101 /* InstanceOfKeyword */, 157 /* OfKeyword */, 126 /* AsKeyword */, 137 /* IsKeyword */];
+            var anyTokenIncludingMultilineComments = tokenRangeFrom(__spreadArray(__spreadArray([], allTokens, true), [3 /* MultiLineCommentTrivia */], false));
+            var anyTokenIncludingEOF = tokenRangeFrom(__spreadArray(__spreadArray([], allTokens, true), [1 /* EndOfFileToken */], false));
+            var keywords = tokenRangeFromRange(81 /* FirstKeyword */, 158 /* LastKeyword */);
+            var binaryOperators = tokenRangeFromRange(29 /* FirstBinaryOperator */, 78 /* LastBinaryOperator */);
+            var binaryKeywordOperators = [101 /* InKeyword */, 102 /* InstanceOfKeyword */, 158 /* OfKeyword */, 127 /* AsKeyword */, 138 /* IsKeyword */];
             var unaryPrefixOperators = [45 /* PlusPlusToken */, 46 /* MinusMinusToken */, 54 /* TildeToken */, 53 /* ExclamationToken */];
             var unaryPrefixExpressions = [
-                8 /* NumericLiteral */, 9 /* BigIntLiteral */, 78 /* Identifier */, 20 /* OpenParenToken */,
-                22 /* OpenBracketToken */, 18 /* OpenBraceToken */, 107 /* ThisKeyword */, 102 /* NewKeyword */
+                8 /* NumericLiteral */, 9 /* BigIntLiteral */, 79 /* Identifier */, 20 /* OpenParenToken */,
+                22 /* OpenBracketToken */, 18 /* OpenBraceToken */, 108 /* ThisKeyword */, 103 /* NewKeyword */
             ];
-            var unaryPreincrementExpressions = [78 /* Identifier */, 20 /* OpenParenToken */, 107 /* ThisKeyword */, 102 /* NewKeyword */];
-            var unaryPostincrementExpressions = [78 /* Identifier */, 21 /* CloseParenToken */, 23 /* CloseBracketToken */, 102 /* NewKeyword */];
-            var unaryPredecrementExpressions = [78 /* Identifier */, 20 /* OpenParenToken */, 107 /* ThisKeyword */, 102 /* NewKeyword */];
-            var unaryPostdecrementExpressions = [78 /* Identifier */, 21 /* CloseParenToken */, 23 /* CloseBracketToken */, 102 /* NewKeyword */];
+            var unaryPreincrementExpressions = [79 /* Identifier */, 20 /* OpenParenToken */, 108 /* ThisKeyword */, 103 /* NewKeyword */];
+            var unaryPostincrementExpressions = [79 /* Identifier */, 21 /* CloseParenToken */, 23 /* CloseBracketToken */, 103 /* NewKeyword */];
+            var unaryPredecrementExpressions = [79 /* Identifier */, 20 /* OpenParenToken */, 108 /* ThisKeyword */, 103 /* NewKeyword */];
+            var unaryPostdecrementExpressions = [79 /* Identifier */, 21 /* CloseParenToken */, 23 /* CloseBracketToken */, 103 /* NewKeyword */];
             var comments = [2 /* SingleLineCommentTrivia */, 3 /* MultiLineCommentTrivia */];
-            var typeNames = __spreadArray([78 /* Identifier */], ts.typeKeywords);
+            var typeNames = __spreadArray([79 /* Identifier */], ts.typeKeywords, true);
             // Place a space before open brace in a function declaration
             // TypeScript: Function can have return types, which can be made of tons of different token kinds
             var functionOpenBraceLeftTokenRange = anyTokenIncludingMultilineComments;
             // Place a space before open brace in a TypeScript declaration that has braces as children (class, module, enum, etc)
-            var typeScriptOpenBraceLeftTokenRange = tokenRangeFrom([78 /* Identifier */, 3 /* MultiLineCommentTrivia */, 83 /* ClassKeyword */, 92 /* ExportKeyword */, 99 /* ImportKeyword */]);
+            var typeScriptOpenBraceLeftTokenRange = tokenRangeFrom([79 /* Identifier */, 3 /* MultiLineCommentTrivia */, 84 /* ClassKeyword */, 93 /* ExportKeyword */, 100 /* ImportKeyword */]);
             // Place a space before open brace in a control flow construct
-            var controlOpenBraceLeftTokenRange = tokenRangeFrom([21 /* CloseParenToken */, 3 /* MultiLineCommentTrivia */, 89 /* DoKeyword */, 110 /* TryKeyword */, 95 /* FinallyKeyword */, 90 /* ElseKeyword */]);
+            var controlOpenBraceLeftTokenRange = tokenRangeFrom([21 /* CloseParenToken */, 3 /* MultiLineCommentTrivia */, 90 /* DoKeyword */, 111 /* TryKeyword */, 96 /* FinallyKeyword */, 91 /* ElseKeyword */]);
             // These rules are higher in priority than user-configurable
             var highPriorityCommonRules = [
                 // Leave comments alone
@@ -136125,7 +139398,7 @@
                 rule("NoSpaceAfterQuestionMark", 57 /* QuestionToken */, anyToken, [isNonJsxSameLineTokenContext], 16 /* DeleteSpace */),
                 rule("NoSpaceBeforeDot", anyToken, [24 /* DotToken */, 28 /* QuestionDotToken */], [isNonJsxSameLineTokenContext], 16 /* DeleteSpace */),
                 rule("NoSpaceAfterDot", [24 /* DotToken */, 28 /* QuestionDotToken */], anyToken, [isNonJsxSameLineTokenContext], 16 /* DeleteSpace */),
-                rule("NoSpaceBetweenImportParenInImportType", 99 /* ImportKeyword */, 20 /* OpenParenToken */, [isNonJsxSameLineTokenContext, isImportTypeContext], 16 /* DeleteSpace */),
+                rule("NoSpaceBetweenImportParenInImportType", 100 /* ImportKeyword */, 20 /* OpenParenToken */, [isNonJsxSameLineTokenContext, isImportTypeContext], 16 /* DeleteSpace */),
                 // Special handling of unary operators.
                 // Prefix operators generally shouldn't have a space between
                 // them and their target unary expression.
@@ -136152,79 +139425,79 @@
                 rule("SpaceAfterCloseBrace", 19 /* CloseBraceToken */, anyTokenExcept(21 /* CloseParenToken */), [isNonJsxSameLineTokenContext, isAfterCodeBlockContext], 4 /* InsertSpace */),
                 // Special case for (}, else) and (}, while) since else & while tokens are not part of the tree which makes SpaceAfterCloseBrace rule not applied
                 // Also should not apply to })
-                rule("SpaceBetweenCloseBraceAndElse", 19 /* CloseBraceToken */, 90 /* ElseKeyword */, [isNonJsxSameLineTokenContext], 4 /* InsertSpace */),
-                rule("SpaceBetweenCloseBraceAndWhile", 19 /* CloseBraceToken */, 114 /* WhileKeyword */, [isNonJsxSameLineTokenContext], 4 /* InsertSpace */),
+                rule("SpaceBetweenCloseBraceAndElse", 19 /* CloseBraceToken */, 91 /* ElseKeyword */, [isNonJsxSameLineTokenContext], 4 /* InsertSpace */),
+                rule("SpaceBetweenCloseBraceAndWhile", 19 /* CloseBraceToken */, 115 /* WhileKeyword */, [isNonJsxSameLineTokenContext], 4 /* InsertSpace */),
                 rule("NoSpaceBetweenEmptyBraceBrackets", 18 /* OpenBraceToken */, 19 /* CloseBraceToken */, [isNonJsxSameLineTokenContext, isObjectContext], 16 /* DeleteSpace */),
                 // Add a space after control dec context if the next character is an open bracket ex: 'if (false)[a, b] = [1, 2];' -> 'if (false) [a, b] = [1, 2];'
                 rule("SpaceAfterConditionalClosingParen", 21 /* CloseParenToken */, 22 /* OpenBracketToken */, [isControlDeclContext], 4 /* InsertSpace */),
-                rule("NoSpaceBetweenFunctionKeywordAndStar", 97 /* FunctionKeyword */, 41 /* AsteriskToken */, [isFunctionDeclarationOrFunctionExpressionContext], 16 /* DeleteSpace */),
-                rule("SpaceAfterStarInGeneratorDeclaration", 41 /* AsteriskToken */, 78 /* Identifier */, [isFunctionDeclarationOrFunctionExpressionContext], 4 /* InsertSpace */),
-                rule("SpaceAfterFunctionInFuncDecl", 97 /* FunctionKeyword */, anyToken, [isFunctionDeclContext], 4 /* InsertSpace */),
+                rule("NoSpaceBetweenFunctionKeywordAndStar", 98 /* FunctionKeyword */, 41 /* AsteriskToken */, [isFunctionDeclarationOrFunctionExpressionContext], 16 /* DeleteSpace */),
+                rule("SpaceAfterStarInGeneratorDeclaration", 41 /* AsteriskToken */, 79 /* Identifier */, [isFunctionDeclarationOrFunctionExpressionContext], 4 /* InsertSpace */),
+                rule("SpaceAfterFunctionInFuncDecl", 98 /* FunctionKeyword */, anyToken, [isFunctionDeclContext], 4 /* InsertSpace */),
                 // Insert new line after { and before } in multi-line contexts.
                 rule("NewLineAfterOpenBraceInBlockContext", 18 /* OpenBraceToken */, anyToken, [isMultilineBlockContext], 8 /* InsertNewLine */),
                 // For get/set members, we check for (identifier,identifier) since get/set don't have tokens and they are represented as just an identifier token.
                 // Though, we do extra check on the context to make sure we are dealing with get/set node. Example:
                 //      get x() {}
                 //      set x(val) {}
-                rule("SpaceAfterGetSetInMember", [134 /* GetKeyword */, 146 /* SetKeyword */], 78 /* Identifier */, [isFunctionDeclContext], 4 /* InsertSpace */),
-                rule("NoSpaceBetweenYieldKeywordAndStar", 124 /* YieldKeyword */, 41 /* AsteriskToken */, [isNonJsxSameLineTokenContext, isYieldOrYieldStarWithOperand], 16 /* DeleteSpace */),
-                rule("SpaceBetweenYieldOrYieldStarAndOperand", [124 /* YieldKeyword */, 41 /* AsteriskToken */], anyToken, [isNonJsxSameLineTokenContext, isYieldOrYieldStarWithOperand], 4 /* InsertSpace */),
-                rule("NoSpaceBetweenReturnAndSemicolon", 104 /* ReturnKeyword */, 26 /* SemicolonToken */, [isNonJsxSameLineTokenContext], 16 /* DeleteSpace */),
-                rule("SpaceAfterCertainKeywords", [112 /* VarKeyword */, 108 /* ThrowKeyword */, 102 /* NewKeyword */, 88 /* DeleteKeyword */, 104 /* ReturnKeyword */, 111 /* TypeOfKeyword */, 130 /* AwaitKeyword */], anyToken, [isNonJsxSameLineTokenContext], 4 /* InsertSpace */),
-                rule("SpaceAfterLetConstInVariableDeclaration", [118 /* LetKeyword */, 84 /* ConstKeyword */], anyToken, [isNonJsxSameLineTokenContext, isStartOfVariableDeclarationList], 4 /* InsertSpace */),
+                rule("SpaceAfterGetSetInMember", [135 /* GetKeyword */, 147 /* SetKeyword */], 79 /* Identifier */, [isFunctionDeclContext], 4 /* InsertSpace */),
+                rule("NoSpaceBetweenYieldKeywordAndStar", 125 /* YieldKeyword */, 41 /* AsteriskToken */, [isNonJsxSameLineTokenContext, isYieldOrYieldStarWithOperand], 16 /* DeleteSpace */),
+                rule("SpaceBetweenYieldOrYieldStarAndOperand", [125 /* YieldKeyword */, 41 /* AsteriskToken */], anyToken, [isNonJsxSameLineTokenContext, isYieldOrYieldStarWithOperand], 4 /* InsertSpace */),
+                rule("NoSpaceBetweenReturnAndSemicolon", 105 /* ReturnKeyword */, 26 /* SemicolonToken */, [isNonJsxSameLineTokenContext], 16 /* DeleteSpace */),
+                rule("SpaceAfterCertainKeywords", [113 /* VarKeyword */, 109 /* ThrowKeyword */, 103 /* NewKeyword */, 89 /* DeleteKeyword */, 105 /* ReturnKeyword */, 112 /* TypeOfKeyword */, 131 /* AwaitKeyword */], anyToken, [isNonJsxSameLineTokenContext], 4 /* InsertSpace */),
+                rule("SpaceAfterLetConstInVariableDeclaration", [119 /* LetKeyword */, 85 /* ConstKeyword */], anyToken, [isNonJsxSameLineTokenContext, isStartOfVariableDeclarationList], 4 /* InsertSpace */),
                 rule("NoSpaceBeforeOpenParenInFuncCall", anyToken, 20 /* OpenParenToken */, [isNonJsxSameLineTokenContext, isFunctionCallOrNewContext, isPreviousTokenNotComma], 16 /* DeleteSpace */),
                 // Special case for binary operators (that are keywords). For these we have to add a space and shouldn't follow any user options.
                 rule("SpaceBeforeBinaryKeywordOperator", anyToken, binaryKeywordOperators, [isNonJsxSameLineTokenContext, isBinaryOpContext], 4 /* InsertSpace */),
                 rule("SpaceAfterBinaryKeywordOperator", binaryKeywordOperators, anyToken, [isNonJsxSameLineTokenContext, isBinaryOpContext], 4 /* InsertSpace */),
-                rule("SpaceAfterVoidOperator", 113 /* VoidKeyword */, anyToken, [isNonJsxSameLineTokenContext, isVoidOpContext], 4 /* InsertSpace */),
+                rule("SpaceAfterVoidOperator", 114 /* VoidKeyword */, anyToken, [isNonJsxSameLineTokenContext, isVoidOpContext], 4 /* InsertSpace */),
                 // Async-await
-                rule("SpaceBetweenAsyncAndOpenParen", 129 /* AsyncKeyword */, 20 /* OpenParenToken */, [isArrowFunctionContext, isNonJsxSameLineTokenContext], 4 /* InsertSpace */),
-                rule("SpaceBetweenAsyncAndFunctionKeyword", 129 /* AsyncKeyword */, [97 /* FunctionKeyword */, 78 /* Identifier */], [isNonJsxSameLineTokenContext], 4 /* InsertSpace */),
+                rule("SpaceBetweenAsyncAndOpenParen", 130 /* AsyncKeyword */, 20 /* OpenParenToken */, [isArrowFunctionContext, isNonJsxSameLineTokenContext], 4 /* InsertSpace */),
+                rule("SpaceBetweenAsyncAndFunctionKeyword", 130 /* AsyncKeyword */, [98 /* FunctionKeyword */, 79 /* Identifier */], [isNonJsxSameLineTokenContext], 4 /* InsertSpace */),
                 // Template string
-                rule("NoSpaceBetweenTagAndTemplateString", [78 /* Identifier */, 21 /* CloseParenToken */], [14 /* NoSubstitutionTemplateLiteral */, 15 /* TemplateHead */], [isNonJsxSameLineTokenContext], 16 /* DeleteSpace */),
+                rule("NoSpaceBetweenTagAndTemplateString", [79 /* Identifier */, 21 /* CloseParenToken */], [14 /* NoSubstitutionTemplateLiteral */, 15 /* TemplateHead */], [isNonJsxSameLineTokenContext], 16 /* DeleteSpace */),
                 // JSX opening elements
-                rule("SpaceBeforeJsxAttribute", anyToken, 78 /* Identifier */, [isNextTokenParentJsxAttribute, isNonJsxSameLineTokenContext], 4 /* InsertSpace */),
+                rule("SpaceBeforeJsxAttribute", anyToken, 79 /* Identifier */, [isNextTokenParentJsxAttribute, isNonJsxSameLineTokenContext], 4 /* InsertSpace */),
                 rule("SpaceBeforeSlashInJsxOpeningElement", anyToken, 43 /* SlashToken */, [isJsxSelfClosingElementContext, isNonJsxSameLineTokenContext], 4 /* InsertSpace */),
                 rule("NoSpaceBeforeGreaterThanTokenInJsxOpeningElement", 43 /* SlashToken */, 31 /* GreaterThanToken */, [isJsxSelfClosingElementContext, isNonJsxSameLineTokenContext], 16 /* DeleteSpace */),
-                rule("NoSpaceBeforeEqualInJsxAttribute", anyToken, 62 /* EqualsToken */, [isJsxAttributeContext, isNonJsxSameLineTokenContext], 16 /* DeleteSpace */),
-                rule("NoSpaceAfterEqualInJsxAttribute", 62 /* EqualsToken */, anyToken, [isJsxAttributeContext, isNonJsxSameLineTokenContext], 16 /* DeleteSpace */),
+                rule("NoSpaceBeforeEqualInJsxAttribute", anyToken, 63 /* EqualsToken */, [isJsxAttributeContext, isNonJsxSameLineTokenContext], 16 /* DeleteSpace */),
+                rule("NoSpaceAfterEqualInJsxAttribute", 63 /* EqualsToken */, anyToken, [isJsxAttributeContext, isNonJsxSameLineTokenContext], 16 /* DeleteSpace */),
                 // TypeScript-specific rules
                 // Use of module as a function call. e.g.: import m2 = module("m2");
-                rule("NoSpaceAfterModuleImport", [139 /* ModuleKeyword */, 143 /* RequireKeyword */], 20 /* OpenParenToken */, [isNonJsxSameLineTokenContext], 16 /* DeleteSpace */),
+                rule("NoSpaceAfterModuleImport", [140 /* ModuleKeyword */, 144 /* RequireKeyword */], 20 /* OpenParenToken */, [isNonJsxSameLineTokenContext], 16 /* DeleteSpace */),
                 // Add a space around certain TypeScript keywords
                 rule("SpaceAfterCertainTypeScriptKeywords", [
-                    125 /* AbstractKeyword */,
-                    83 /* ClassKeyword */,
-                    133 /* DeclareKeyword */,
-                    87 /* DefaultKeyword */,
-                    91 /* EnumKeyword */,
-                    92 /* ExportKeyword */,
-                    93 /* ExtendsKeyword */,
-                    134 /* GetKeyword */,
-                    116 /* ImplementsKeyword */,
-                    99 /* ImportKeyword */,
-                    117 /* InterfaceKeyword */,
-                    139 /* ModuleKeyword */,
-                    140 /* NamespaceKeyword */,
-                    120 /* PrivateKeyword */,
-                    122 /* PublicKeyword */,
-                    121 /* ProtectedKeyword */,
-                    142 /* ReadonlyKeyword */,
-                    146 /* SetKeyword */,
-                    123 /* StaticKeyword */,
-                    149 /* TypeKeyword */,
-                    153 /* FromKeyword */,
-                    138 /* KeyOfKeyword */,
-                    135 /* InferKeyword */,
+                    126 /* AbstractKeyword */,
+                    84 /* ClassKeyword */,
+                    134 /* DeclareKeyword */,
+                    88 /* DefaultKeyword */,
+                    92 /* EnumKeyword */,
+                    93 /* ExportKeyword */,
+                    94 /* ExtendsKeyword */,
+                    135 /* GetKeyword */,
+                    117 /* ImplementsKeyword */,
+                    100 /* ImportKeyword */,
+                    118 /* InterfaceKeyword */,
+                    140 /* ModuleKeyword */,
+                    141 /* NamespaceKeyword */,
+                    121 /* PrivateKeyword */,
+                    123 /* PublicKeyword */,
+                    122 /* ProtectedKeyword */,
+                    143 /* ReadonlyKeyword */,
+                    147 /* SetKeyword */,
+                    124 /* StaticKeyword */,
+                    150 /* TypeKeyword */,
+                    154 /* FromKeyword */,
+                    139 /* KeyOfKeyword */,
+                    136 /* InferKeyword */,
                 ], anyToken, [isNonJsxSameLineTokenContext], 4 /* InsertSpace */),
-                rule("SpaceBeforeCertainTypeScriptKeywords", anyToken, [93 /* ExtendsKeyword */, 116 /* ImplementsKeyword */, 153 /* FromKeyword */], [isNonJsxSameLineTokenContext], 4 /* InsertSpace */),
+                rule("SpaceBeforeCertainTypeScriptKeywords", anyToken, [94 /* ExtendsKeyword */, 117 /* ImplementsKeyword */, 154 /* FromKeyword */], [isNonJsxSameLineTokenContext], 4 /* InsertSpace */),
                 // Treat string literals in module names as identifiers, and add a space between the literal and the opening Brace braces, e.g.: module "m2" {
                 rule("SpaceAfterModuleName", 10 /* StringLiteral */, 18 /* OpenBraceToken */, [isModuleDeclContext], 4 /* InsertSpace */),
                 // Lambda expressions
                 rule("SpaceBeforeArrow", anyToken, 38 /* EqualsGreaterThanToken */, [isNonJsxSameLineTokenContext], 4 /* InsertSpace */),
                 rule("SpaceAfterArrow", 38 /* EqualsGreaterThanToken */, anyToken, [isNonJsxSameLineTokenContext], 4 /* InsertSpace */),
                 // Optional parameters and let args
-                rule("NoSpaceAfterEllipsis", 25 /* DotDotDotToken */, 78 /* Identifier */, [isNonJsxSameLineTokenContext], 16 /* DeleteSpace */),
+                rule("NoSpaceAfterEllipsis", 25 /* DotDotDotToken */, 79 /* Identifier */, [isNonJsxSameLineTokenContext], 16 /* DeleteSpace */),
                 rule("NoSpaceAfterOptionalParameters", 57 /* QuestionToken */, [21 /* CloseParenToken */, 27 /* CommaToken */], [isNonJsxSameLineTokenContext, isNotBinaryOpContext], 16 /* DeleteSpace */),
                 // Remove spaces in empty interface literals. e.g.: x: {}
                 rule("NoSpaceBetweenEmptyInterfaceBraceBrackets", 18 /* OpenBraceToken */, 19 /* CloseBraceToken */, [isNonJsxSameLineTokenContext, isObjectTypeContext], 16 /* DeleteSpace */),
@@ -136235,38 +139508,38 @@
                 rule("NoSpaceBeforeCloseAngularBracket", anyToken, 31 /* GreaterThanToken */, [isNonJsxSameLineTokenContext, isTypeArgumentOrParameterOrAssertionContext], 16 /* DeleteSpace */),
                 rule("NoSpaceAfterCloseAngularBracket", 31 /* GreaterThanToken */, [20 /* OpenParenToken */, 22 /* OpenBracketToken */, 31 /* GreaterThanToken */, 27 /* CommaToken */], [isNonJsxSameLineTokenContext, isTypeArgumentOrParameterOrAssertionContext, isNotFunctionDeclContext /*To prevent an interference with the SpaceBeforeOpenParenInFuncDecl rule*/], 16 /* DeleteSpace */),
                 // decorators
-                rule("SpaceBeforeAt", [21 /* CloseParenToken */, 78 /* Identifier */], 59 /* AtToken */, [isNonJsxSameLineTokenContext], 4 /* InsertSpace */),
+                rule("SpaceBeforeAt", [21 /* CloseParenToken */, 79 /* Identifier */], 59 /* AtToken */, [isNonJsxSameLineTokenContext], 4 /* InsertSpace */),
                 rule("NoSpaceAfterAt", 59 /* AtToken */, anyToken, [isNonJsxSameLineTokenContext], 16 /* DeleteSpace */),
                 // Insert space after @ in decorator
                 rule("SpaceAfterDecorator", anyToken, [
-                    125 /* AbstractKeyword */,
-                    78 /* Identifier */,
-                    92 /* ExportKeyword */,
-                    87 /* DefaultKeyword */,
-                    83 /* ClassKeyword */,
-                    123 /* StaticKeyword */,
-                    122 /* PublicKeyword */,
-                    120 /* PrivateKeyword */,
-                    121 /* ProtectedKeyword */,
-                    134 /* GetKeyword */,
-                    146 /* SetKeyword */,
+                    126 /* AbstractKeyword */,
+                    79 /* Identifier */,
+                    93 /* ExportKeyword */,
+                    88 /* DefaultKeyword */,
+                    84 /* ClassKeyword */,
+                    124 /* StaticKeyword */,
+                    123 /* PublicKeyword */,
+                    121 /* PrivateKeyword */,
+                    122 /* ProtectedKeyword */,
+                    135 /* GetKeyword */,
+                    147 /* SetKeyword */,
                     22 /* OpenBracketToken */,
                     41 /* AsteriskToken */,
                 ], [isEndOfDecoratorContextOnSameLine], 4 /* InsertSpace */),
                 rule("NoSpaceBeforeNonNullAssertionOperator", anyToken, 53 /* ExclamationToken */, [isNonJsxSameLineTokenContext, isNonNullAssertionContext], 16 /* DeleteSpace */),
-                rule("NoSpaceAfterNewKeywordOnConstructorSignature", 102 /* NewKeyword */, 20 /* OpenParenToken */, [isNonJsxSameLineTokenContext, isConstructorSignatureContext], 16 /* DeleteSpace */),
+                rule("NoSpaceAfterNewKeywordOnConstructorSignature", 103 /* NewKeyword */, 20 /* OpenParenToken */, [isNonJsxSameLineTokenContext, isConstructorSignatureContext], 16 /* DeleteSpace */),
                 rule("SpaceLessThanAndNonJSXTypeAnnotation", 29 /* LessThanToken */, 29 /* LessThanToken */, [isNonJsxSameLineTokenContext], 4 /* InsertSpace */),
             ];
             // These rules are applied after high priority
             var userConfigurableRules = [
                 // Treat constructor as an identifier in a function declaration, and remove spaces between constructor and following left parentheses
-                rule("SpaceAfterConstructor", 132 /* ConstructorKeyword */, 20 /* OpenParenToken */, [isOptionEnabled("insertSpaceAfterConstructor"), isNonJsxSameLineTokenContext], 4 /* InsertSpace */),
-                rule("NoSpaceAfterConstructor", 132 /* ConstructorKeyword */, 20 /* OpenParenToken */, [isOptionDisabledOrUndefined("insertSpaceAfterConstructor"), isNonJsxSameLineTokenContext], 16 /* DeleteSpace */),
+                rule("SpaceAfterConstructor", 133 /* ConstructorKeyword */, 20 /* OpenParenToken */, [isOptionEnabled("insertSpaceAfterConstructor"), isNonJsxSameLineTokenContext], 4 /* InsertSpace */),
+                rule("NoSpaceAfterConstructor", 133 /* ConstructorKeyword */, 20 /* OpenParenToken */, [isOptionDisabledOrUndefined("insertSpaceAfterConstructor"), isNonJsxSameLineTokenContext], 16 /* DeleteSpace */),
                 rule("SpaceAfterComma", 27 /* CommaToken */, anyToken, [isOptionEnabled("insertSpaceAfterCommaDelimiter"), isNonJsxSameLineTokenContext, isNonJsxElementOrFragmentContext, isNextTokenNotCloseBracket, isNextTokenNotCloseParen], 4 /* InsertSpace */),
                 rule("NoSpaceAfterComma", 27 /* CommaToken */, anyToken, [isOptionDisabledOrUndefined("insertSpaceAfterCommaDelimiter"), isNonJsxSameLineTokenContext, isNonJsxElementOrFragmentContext], 16 /* DeleteSpace */),
                 // Insert space after function keyword for anonymous functions
-                rule("SpaceAfterAnonymousFunctionKeyword", [97 /* FunctionKeyword */, 41 /* AsteriskToken */], 20 /* OpenParenToken */, [isOptionEnabled("insertSpaceAfterFunctionKeywordForAnonymousFunctions"), isFunctionDeclContext], 4 /* InsertSpace */),
-                rule("NoSpaceAfterAnonymousFunctionKeyword", [97 /* FunctionKeyword */, 41 /* AsteriskToken */], 20 /* OpenParenToken */, [isOptionDisabledOrUndefined("insertSpaceAfterFunctionKeywordForAnonymousFunctions"), isFunctionDeclContext], 16 /* DeleteSpace */),
+                rule("SpaceAfterAnonymousFunctionKeyword", [98 /* FunctionKeyword */, 41 /* AsteriskToken */], 20 /* OpenParenToken */, [isOptionEnabled("insertSpaceAfterFunctionKeywordForAnonymousFunctions"), isFunctionDeclContext], 4 /* InsertSpace */),
+                rule("NoSpaceAfterAnonymousFunctionKeyword", [98 /* FunctionKeyword */, 41 /* AsteriskToken */], 20 /* OpenParenToken */, [isOptionDisabledOrUndefined("insertSpaceAfterFunctionKeywordForAnonymousFunctions"), isFunctionDeclContext], 16 /* DeleteSpace */),
                 // Insert space after keywords in control flow statements
                 rule("SpaceAfterKeywordInControl", keywords, 20 /* OpenParenToken */, [isOptionEnabled("insertSpaceAfterKeywordsInControlFlowStatements"), isControlDeclContext], 4 /* InsertSpace */),
                 rule("NoSpaceAfterKeywordInControl", keywords, 20 /* OpenParenToken */, [isOptionDisabledOrUndefined("insertSpaceAfterKeywordsInControlFlowStatements"), isControlDeclContext], 16 /* DeleteSpace */),
@@ -136335,18 +139608,18 @@
                 rule("SpaceBeforeOpenBraceInTypeScriptDeclWithBlock", typeScriptOpenBraceLeftTokenRange, 18 /* OpenBraceToken */, [isOptionDisabledOrUndefinedOrTokensOnSameLine("placeOpenBraceOnNewLineForFunctions"), isTypeScriptDeclWithBlockContext, isNotFormatOnEnter, isSameLineTokenOrBeforeBlockContext], 4 /* InsertSpace */, 1 /* CanDeleteNewLines */),
                 rule("NoSpaceBeforeComma", anyToken, 27 /* CommaToken */, [isNonJsxSameLineTokenContext], 16 /* DeleteSpace */),
                 // No space before and after indexer `x[]`
-                rule("NoSpaceBeforeOpenBracket", anyTokenExcept(129 /* AsyncKeyword */, 81 /* CaseKeyword */), 22 /* OpenBracketToken */, [isNonJsxSameLineTokenContext], 16 /* DeleteSpace */),
+                rule("NoSpaceBeforeOpenBracket", anyTokenExcept(130 /* AsyncKeyword */, 82 /* CaseKeyword */), 22 /* OpenBracketToken */, [isNonJsxSameLineTokenContext], 16 /* DeleteSpace */),
                 rule("NoSpaceAfterCloseBracket", 23 /* CloseBracketToken */, anyToken, [isNonJsxSameLineTokenContext, isNotBeforeBlockInFunctionDeclarationContext], 16 /* DeleteSpace */),
                 rule("SpaceAfterSemicolon", 26 /* SemicolonToken */, anyToken, [isNonJsxSameLineTokenContext], 4 /* InsertSpace */),
                 // Remove extra space between for and await
-                rule("SpaceBetweenForAndAwaitKeyword", 96 /* ForKeyword */, 130 /* AwaitKeyword */, [isNonJsxSameLineTokenContext], 4 /* InsertSpace */),
+                rule("SpaceBetweenForAndAwaitKeyword", 97 /* ForKeyword */, 131 /* AwaitKeyword */, [isNonJsxSameLineTokenContext], 4 /* InsertSpace */),
                 // Add a space between statements. All keywords except (do,else,case) has open/close parens after them.
                 // So, we have a rule to add a space for [),Any], [do,Any], [else,Any], and [case,Any]
-                rule("SpaceBetweenStatements", [21 /* CloseParenToken */, 89 /* DoKeyword */, 90 /* ElseKeyword */, 81 /* CaseKeyword */], anyToken, [isNonJsxSameLineTokenContext, isNonJsxElementOrFragmentContext, isNotForContext], 4 /* InsertSpace */),
+                rule("SpaceBetweenStatements", [21 /* CloseParenToken */, 90 /* DoKeyword */, 91 /* ElseKeyword */, 82 /* CaseKeyword */], anyToken, [isNonJsxSameLineTokenContext, isNonJsxElementOrFragmentContext, isNotForContext], 4 /* InsertSpace */),
                 // This low-pri rule takes care of "try {", "catch {" and "finally {" in case the rule SpaceBeforeOpenBraceInControl didn't execute on FormatOnEnter.
-                rule("SpaceAfterTryCatchFinally", [110 /* TryKeyword */, 82 /* CatchKeyword */, 95 /* FinallyKeyword */], 18 /* OpenBraceToken */, [isNonJsxSameLineTokenContext], 4 /* InsertSpace */),
+                rule("SpaceAfterTryCatchFinally", [111 /* TryKeyword */, 83 /* CatchKeyword */, 96 /* FinallyKeyword */], 18 /* OpenBraceToken */, [isNonJsxSameLineTokenContext], 4 /* InsertSpace */),
             ];
-            return __spreadArray(__spreadArray(__spreadArray([], highPriorityCommonRules), userConfigurableRules), lowPriorityCommonRules);
+            return __spreadArray(__spreadArray(__spreadArray([], highPriorityCommonRules, true), userConfigurableRules, true), lowPriorityCommonRules, true);
         }
         formatting.getAllRules = getAllRules;
         /**
@@ -136403,51 +139676,54 @@
             return function (context) { return !context.options || !context.options.hasOwnProperty(optionName) || !!context.options[optionName]; };
         }
         function isForContext(context) {
-            return context.contextNode.kind === 238 /* ForStatement */;
+            return context.contextNode.kind === 240 /* ForStatement */;
         }
         function isNotForContext(context) {
             return !isForContext(context);
         }
         function isBinaryOpContext(context) {
             switch (context.contextNode.kind) {
-                case 217 /* BinaryExpression */:
+                case 219 /* BinaryExpression */:
                     return context.contextNode.operatorToken.kind !== 27 /* CommaToken */;
-                case 218 /* ConditionalExpression */:
-                case 185 /* ConditionalType */:
-                case 225 /* AsExpression */:
-                case 271 /* ExportSpecifier */:
-                case 266 /* ImportSpecifier */:
-                case 173 /* TypePredicate */:
-                case 183 /* UnionType */:
-                case 184 /* IntersectionType */:
+                case 220 /* ConditionalExpression */:
+                case 187 /* ConditionalType */:
+                case 227 /* AsExpression */:
+                case 273 /* ExportSpecifier */:
+                case 268 /* ImportSpecifier */:
+                case 175 /* TypePredicate */:
+                case 185 /* UnionType */:
+                case 186 /* IntersectionType */:
                     return true;
                 // equals in binding elements: function foo([[x, y] = [1, 2]])
-                case 199 /* BindingElement */:
+                case 201 /* BindingElement */:
                 // equals in type X = ...
                 // falls through
-                case 255 /* TypeAliasDeclaration */:
+                case 257 /* TypeAliasDeclaration */:
                 // equal in import a = module('a');
                 // falls through
-                case 261 /* ImportEqualsDeclaration */:
+                case 263 /* ImportEqualsDeclaration */:
+                // equal in export = 1
+                // falls through
+                case 269 /* ExportAssignment */:
                 // equal in let a = 0
                 // falls through
-                case 250 /* VariableDeclaration */:
+                case 252 /* VariableDeclaration */:
                 // equal in p = 0
                 // falls through
-                case 161 /* Parameter */:
-                case 292 /* EnumMember */:
-                case 164 /* PropertyDeclaration */:
-                case 163 /* PropertySignature */:
-                    return context.currentTokenSpan.kind === 62 /* EqualsToken */ || context.nextTokenSpan.kind === 62 /* EqualsToken */;
+                case 162 /* Parameter */:
+                case 294 /* EnumMember */:
+                case 165 /* PropertyDeclaration */:
+                case 164 /* PropertySignature */:
+                    return context.currentTokenSpan.kind === 63 /* EqualsToken */ || context.nextTokenSpan.kind === 63 /* EqualsToken */;
                 // "in" keyword in for (let x in []) { }
-                case 239 /* ForInStatement */:
+                case 241 /* ForInStatement */:
                 // "in" keyword in [P in keyof T]: T[P]
                 // falls through
-                case 160 /* TypeParameter */:
-                    return context.currentTokenSpan.kind === 100 /* InKeyword */ || context.nextTokenSpan.kind === 100 /* InKeyword */ || context.currentTokenSpan.kind === 62 /* EqualsToken */ || context.nextTokenSpan.kind === 62 /* EqualsToken */;
+                case 161 /* TypeParameter */:
+                    return context.currentTokenSpan.kind === 101 /* InKeyword */ || context.nextTokenSpan.kind === 101 /* InKeyword */ || context.currentTokenSpan.kind === 63 /* EqualsToken */ || context.nextTokenSpan.kind === 63 /* EqualsToken */;
                 // Technically, "of" is not a binary operator, but format it the same way as "in"
-                case 240 /* ForOfStatement */:
-                    return context.currentTokenSpan.kind === 157 /* OfKeyword */ || context.nextTokenSpan.kind === 157 /* OfKeyword */;
+                case 242 /* ForOfStatement */:
+                    return context.currentTokenSpan.kind === 158 /* OfKeyword */ || context.nextTokenSpan.kind === 158 /* OfKeyword */;
             }
             return false;
         }
@@ -136459,22 +139735,22 @@
         }
         function isTypeAnnotationContext(context) {
             var contextKind = context.contextNode.kind;
-            return contextKind === 164 /* PropertyDeclaration */ ||
-                contextKind === 163 /* PropertySignature */ ||
-                contextKind === 161 /* Parameter */ ||
-                contextKind === 250 /* VariableDeclaration */ ||
+            return contextKind === 165 /* PropertyDeclaration */ ||
+                contextKind === 164 /* PropertySignature */ ||
+                contextKind === 162 /* Parameter */ ||
+                contextKind === 252 /* VariableDeclaration */ ||
                 ts.isFunctionLikeKind(contextKind);
         }
         function isConditionalOperatorContext(context) {
-            return context.contextNode.kind === 218 /* ConditionalExpression */ ||
-                context.contextNode.kind === 185 /* ConditionalType */;
+            return context.contextNode.kind === 220 /* ConditionalExpression */ ||
+                context.contextNode.kind === 187 /* ConditionalType */;
         }
         function isSameLineTokenOrBeforeBlockContext(context) {
             return context.TokensAreOnSameLine() || isBeforeBlockContext(context);
         }
         function isBraceWrappedContext(context) {
-            return context.contextNode.kind === 197 /* ObjectBindingPattern */ ||
-                context.contextNode.kind === 191 /* MappedType */ ||
+            return context.contextNode.kind === 199 /* ObjectBindingPattern */ ||
+                context.contextNode.kind === 193 /* MappedType */ ||
                 isSingleLineBlockContext(context);
         }
         // This check is done before an open brace in a control construct, a function, or a typescript block declaration
@@ -136500,34 +139776,34 @@
                 return true;
             }
             switch (node.kind) {
-                case 231 /* Block */:
-                case 259 /* CaseBlock */:
-                case 201 /* ObjectLiteralExpression */:
-                case 258 /* ModuleBlock */:
+                case 233 /* Block */:
+                case 261 /* CaseBlock */:
+                case 203 /* ObjectLiteralExpression */:
+                case 260 /* ModuleBlock */:
                     return true;
             }
             return false;
         }
         function isFunctionDeclContext(context) {
             switch (context.contextNode.kind) {
-                case 252 /* FunctionDeclaration */:
-                case 166 /* MethodDeclaration */:
-                case 165 /* MethodSignature */:
+                case 254 /* FunctionDeclaration */:
+                case 167 /* MethodDeclaration */:
+                case 166 /* MethodSignature */:
                 // case SyntaxKind.MemberFunctionDeclaration:
                 // falls through
-                case 168 /* GetAccessor */:
-                case 169 /* SetAccessor */:
+                case 170 /* GetAccessor */:
+                case 171 /* SetAccessor */:
                 // case SyntaxKind.MethodSignature:
                 // falls through
-                case 170 /* CallSignature */:
-                case 209 /* FunctionExpression */:
-                case 167 /* Constructor */:
-                case 210 /* ArrowFunction */:
+                case 172 /* CallSignature */:
+                case 211 /* FunctionExpression */:
+                case 169 /* Constructor */:
+                case 212 /* ArrowFunction */:
                 // case SyntaxKind.ConstructorDeclaration:
                 // case SyntaxKind.SimpleArrowFunctionExpression:
                 // case SyntaxKind.ParenthesizedArrowFunctionExpression:
                 // falls through
-                case 254 /* InterfaceDeclaration */: // This one is not truly a function, but for formatting purposes, it acts just like one
+                case 256 /* InterfaceDeclaration */: // This one is not truly a function, but for formatting purposes, it acts just like one
                     return true;
             }
             return false;
@@ -136536,40 +139812,40 @@
             return !isFunctionDeclContext(context);
         }
         function isFunctionDeclarationOrFunctionExpressionContext(context) {
-            return context.contextNode.kind === 252 /* FunctionDeclaration */ || context.contextNode.kind === 209 /* FunctionExpression */;
+            return context.contextNode.kind === 254 /* FunctionDeclaration */ || context.contextNode.kind === 211 /* FunctionExpression */;
         }
         function isTypeScriptDeclWithBlockContext(context) {
             return nodeIsTypeScriptDeclWithBlockContext(context.contextNode);
         }
         function nodeIsTypeScriptDeclWithBlockContext(node) {
             switch (node.kind) {
-                case 253 /* ClassDeclaration */:
-                case 222 /* ClassExpression */:
-                case 254 /* InterfaceDeclaration */:
-                case 256 /* EnumDeclaration */:
-                case 178 /* TypeLiteral */:
-                case 257 /* ModuleDeclaration */:
-                case 268 /* ExportDeclaration */:
-                case 269 /* NamedExports */:
-                case 262 /* ImportDeclaration */:
-                case 265 /* NamedImports */:
+                case 255 /* ClassDeclaration */:
+                case 224 /* ClassExpression */:
+                case 256 /* InterfaceDeclaration */:
+                case 258 /* EnumDeclaration */:
+                case 180 /* TypeLiteral */:
+                case 259 /* ModuleDeclaration */:
+                case 270 /* ExportDeclaration */:
+                case 271 /* NamedExports */:
+                case 264 /* ImportDeclaration */:
+                case 267 /* NamedImports */:
                     return true;
             }
             return false;
         }
         function isAfterCodeBlockContext(context) {
             switch (context.currentTokenParent.kind) {
-                case 253 /* ClassDeclaration */:
-                case 257 /* ModuleDeclaration */:
-                case 256 /* EnumDeclaration */:
-                case 288 /* CatchClause */:
-                case 258 /* ModuleBlock */:
-                case 245 /* SwitchStatement */:
+                case 255 /* ClassDeclaration */:
+                case 259 /* ModuleDeclaration */:
+                case 258 /* EnumDeclaration */:
+                case 290 /* CatchClause */:
+                case 260 /* ModuleBlock */:
+                case 247 /* SwitchStatement */:
                     return true;
-                case 231 /* Block */: {
+                case 233 /* Block */: {
                     var blockParent = context.currentTokenParent.parent;
                     // In a codefix scenario, we can't rely on parents being set. So just always return true.
-                    if (!blockParent || blockParent.kind !== 210 /* ArrowFunction */ && blockParent.kind !== 209 /* FunctionExpression */) {
+                    if (!blockParent || blockParent.kind !== 212 /* ArrowFunction */ && blockParent.kind !== 211 /* FunctionExpression */) {
                         return true;
                     }
                 }
@@ -136578,32 +139854,32 @@
         }
         function isControlDeclContext(context) {
             switch (context.contextNode.kind) {
-                case 235 /* IfStatement */:
-                case 245 /* SwitchStatement */:
-                case 238 /* ForStatement */:
-                case 239 /* ForInStatement */:
-                case 240 /* ForOfStatement */:
-                case 237 /* WhileStatement */:
-                case 248 /* TryStatement */:
-                case 236 /* DoStatement */:
-                case 244 /* WithStatement */:
+                case 237 /* IfStatement */:
+                case 247 /* SwitchStatement */:
+                case 240 /* ForStatement */:
+                case 241 /* ForInStatement */:
+                case 242 /* ForOfStatement */:
+                case 239 /* WhileStatement */:
+                case 250 /* TryStatement */:
+                case 238 /* DoStatement */:
+                case 246 /* WithStatement */:
                 // TODO
                 // case SyntaxKind.ElseClause:
                 // falls through
-                case 288 /* CatchClause */:
+                case 290 /* CatchClause */:
                     return true;
                 default:
                     return false;
             }
         }
         function isObjectContext(context) {
-            return context.contextNode.kind === 201 /* ObjectLiteralExpression */;
+            return context.contextNode.kind === 203 /* ObjectLiteralExpression */;
         }
         function isFunctionCallContext(context) {
-            return context.contextNode.kind === 204 /* CallExpression */;
+            return context.contextNode.kind === 206 /* CallExpression */;
         }
         function isNewContext(context) {
-            return context.contextNode.kind === 205 /* NewExpression */;
+            return context.contextNode.kind === 207 /* NewExpression */;
         }
         function isFunctionCallOrNewContext(context) {
             return isFunctionCallContext(context) || isNewContext(context);
@@ -136618,10 +139894,10 @@
             return context.nextTokenSpan.kind !== 21 /* CloseParenToken */;
         }
         function isArrowFunctionContext(context) {
-            return context.contextNode.kind === 210 /* ArrowFunction */;
+            return context.contextNode.kind === 212 /* ArrowFunction */;
         }
         function isImportTypeContext(context) {
-            return context.contextNode.kind === 196 /* ImportType */;
+            return context.contextNode.kind === 198 /* ImportType */;
         }
         function isNonJsxSameLineTokenContext(context) {
             return context.TokensAreOnSameLine() && context.contextNode.kind !== 11 /* JsxText */;
@@ -136630,19 +139906,19 @@
             return context.contextNode.kind !== 11 /* JsxText */;
         }
         function isNonJsxElementOrFragmentContext(context) {
-            return context.contextNode.kind !== 274 /* JsxElement */ && context.contextNode.kind !== 278 /* JsxFragment */;
+            return context.contextNode.kind !== 276 /* JsxElement */ && context.contextNode.kind !== 280 /* JsxFragment */;
         }
         function isJsxExpressionContext(context) {
-            return context.contextNode.kind === 284 /* JsxExpression */ || context.contextNode.kind === 283 /* JsxSpreadAttribute */;
+            return context.contextNode.kind === 286 /* JsxExpression */ || context.contextNode.kind === 285 /* JsxSpreadAttribute */;
         }
         function isNextTokenParentJsxAttribute(context) {
-            return context.nextTokenParent.kind === 281 /* JsxAttribute */;
+            return context.nextTokenParent.kind === 283 /* JsxAttribute */;
         }
         function isJsxAttributeContext(context) {
-            return context.contextNode.kind === 281 /* JsxAttribute */;
+            return context.contextNode.kind === 283 /* JsxAttribute */;
         }
         function isJsxSelfClosingElementContext(context) {
-            return context.contextNode.kind === 275 /* JsxSelfClosingElement */;
+            return context.contextNode.kind === 277 /* JsxSelfClosingElement */;
         }
         function isNotBeforeBlockInFunctionDeclarationContext(context) {
             return !isFunctionDeclContext(context) && !isBeforeBlockContext(context);
@@ -136657,45 +139933,45 @@
             while (ts.isExpressionNode(node)) {
                 node = node.parent;
             }
-            return node.kind === 162 /* Decorator */;
+            return node.kind === 163 /* Decorator */;
         }
         function isStartOfVariableDeclarationList(context) {
-            return context.currentTokenParent.kind === 251 /* VariableDeclarationList */ &&
+            return context.currentTokenParent.kind === 253 /* VariableDeclarationList */ &&
                 context.currentTokenParent.getStart(context.sourceFile) === context.currentTokenSpan.pos;
         }
         function isNotFormatOnEnter(context) {
             return context.formattingRequestKind !== 2 /* FormatOnEnter */;
         }
         function isModuleDeclContext(context) {
-            return context.contextNode.kind === 257 /* ModuleDeclaration */;
+            return context.contextNode.kind === 259 /* ModuleDeclaration */;
         }
         function isObjectTypeContext(context) {
-            return context.contextNode.kind === 178 /* TypeLiteral */; // && context.contextNode.parent.kind !== SyntaxKind.InterfaceDeclaration;
+            return context.contextNode.kind === 180 /* TypeLiteral */; // && context.contextNode.parent.kind !== SyntaxKind.InterfaceDeclaration;
         }
         function isConstructorSignatureContext(context) {
-            return context.contextNode.kind === 171 /* ConstructSignature */;
+            return context.contextNode.kind === 173 /* ConstructSignature */;
         }
         function isTypeArgumentOrParameterOrAssertion(token, parent) {
             if (token.kind !== 29 /* LessThanToken */ && token.kind !== 31 /* GreaterThanToken */) {
                 return false;
             }
             switch (parent.kind) {
-                case 174 /* TypeReference */:
-                case 207 /* TypeAssertionExpression */:
-                case 255 /* TypeAliasDeclaration */:
-                case 253 /* ClassDeclaration */:
-                case 222 /* ClassExpression */:
-                case 254 /* InterfaceDeclaration */:
-                case 252 /* FunctionDeclaration */:
-                case 209 /* FunctionExpression */:
-                case 210 /* ArrowFunction */:
-                case 166 /* MethodDeclaration */:
-                case 165 /* MethodSignature */:
-                case 170 /* CallSignature */:
-                case 171 /* ConstructSignature */:
-                case 204 /* CallExpression */:
-                case 205 /* NewExpression */:
-                case 224 /* ExpressionWithTypeArguments */:
+                case 176 /* TypeReference */:
+                case 209 /* TypeAssertionExpression */:
+                case 257 /* TypeAliasDeclaration */:
+                case 255 /* ClassDeclaration */:
+                case 224 /* ClassExpression */:
+                case 256 /* InterfaceDeclaration */:
+                case 254 /* FunctionDeclaration */:
+                case 211 /* FunctionExpression */:
+                case 212 /* ArrowFunction */:
+                case 167 /* MethodDeclaration */:
+                case 166 /* MethodSignature */:
+                case 172 /* CallSignature */:
+                case 173 /* ConstructSignature */:
+                case 206 /* CallExpression */:
+                case 207 /* NewExpression */:
+                case 226 /* ExpressionWithTypeArguments */:
                     return true;
                 default:
                     return false;
@@ -136706,28 +139982,28 @@
                 isTypeArgumentOrParameterOrAssertion(context.nextTokenSpan, context.nextTokenParent);
         }
         function isTypeAssertionContext(context) {
-            return context.contextNode.kind === 207 /* TypeAssertionExpression */;
+            return context.contextNode.kind === 209 /* TypeAssertionExpression */;
         }
         function isVoidOpContext(context) {
-            return context.currentTokenSpan.kind === 113 /* VoidKeyword */ && context.currentTokenParent.kind === 213 /* VoidExpression */;
+            return context.currentTokenSpan.kind === 114 /* VoidKeyword */ && context.currentTokenParent.kind === 215 /* VoidExpression */;
         }
         function isYieldOrYieldStarWithOperand(context) {
-            return context.contextNode.kind === 220 /* YieldExpression */ && context.contextNode.expression !== undefined;
+            return context.contextNode.kind === 222 /* YieldExpression */ && context.contextNode.expression !== undefined;
         }
         function isNonNullAssertionContext(context) {
-            return context.contextNode.kind === 226 /* NonNullExpression */;
+            return context.contextNode.kind === 228 /* NonNullExpression */;
         }
         function isNotStatementConditionContext(context) {
             return !isStatementConditionContext(context);
         }
         function isStatementConditionContext(context) {
             switch (context.contextNode.kind) {
-                case 235 /* IfStatement */:
-                case 238 /* ForStatement */:
-                case 239 /* ForInStatement */:
-                case 240 /* ForOfStatement */:
-                case 236 /* DoStatement */:
-                case 237 /* WhileStatement */:
+                case 237 /* IfStatement */:
+                case 240 /* ForStatement */:
+                case 241 /* ForInStatement */:
+                case 242 /* ForOfStatement */:
+                case 238 /* DoStatement */:
+                case 239 /* WhileStatement */:
                     return true;
                 default:
                     return false;
@@ -136752,12 +140028,12 @@
                 return nextTokenKind === 19 /* CloseBraceToken */
                     || nextTokenKind === 1 /* EndOfFileToken */;
             }
-            if (nextTokenKind === 230 /* SemicolonClassElement */ ||
+            if (nextTokenKind === 232 /* SemicolonClassElement */ ||
                 nextTokenKind === 26 /* SemicolonToken */) {
                 return false;
             }
-            if (context.contextNode.kind === 254 /* InterfaceDeclaration */ ||
-                context.contextNode.kind === 255 /* TypeAliasDeclaration */) {
+            if (context.contextNode.kind === 256 /* InterfaceDeclaration */ ||
+                context.contextNode.kind === 257 /* TypeAliasDeclaration */) {
                 // Can’t remove semicolon after `foo`; it would parse as a method declaration:
                 //
                 // interface I {
@@ -136771,9 +140047,9 @@
             if (ts.isPropertyDeclaration(context.currentTokenParent)) {
                 return !context.currentTokenParent.initializer;
             }
-            return context.currentTokenParent.kind !== 238 /* ForStatement */
-                && context.currentTokenParent.kind !== 232 /* EmptyStatement */
-                && context.currentTokenParent.kind !== 230 /* SemicolonClassElement */
+            return context.currentTokenParent.kind !== 240 /* ForStatement */
+                && context.currentTokenParent.kind !== 234 /* EmptyStatement */
+                && context.currentTokenParent.kind !== 232 /* SemicolonClassElement */
                 && nextTokenKind !== 22 /* OpenBracketToken */
                 && nextTokenKind !== 20 /* OpenParenToken */
                 && nextTokenKind !== 39 /* PlusToken */
@@ -136781,7 +140057,7 @@
                 && nextTokenKind !== 43 /* SlashToken */
                 && nextTokenKind !== 13 /* RegularExpressionLiteral */
                 && nextTokenKind !== 27 /* CommaToken */
-                && nextTokenKind !== 219 /* TemplateExpression */
+                && nextTokenKind !== 221 /* TemplateExpression */
                 && nextTokenKind !== 15 /* TemplateHead */
                 && nextTokenKind !== 14 /* NoSubstitutionTemplateLiteral */
                 && nextTokenKind !== 24 /* DotToken */;
@@ -136872,12 +140148,12 @@
             return map;
         }
         function getRuleBucketIndex(row, column) {
-            ts.Debug.assert(row <= 157 /* LastKeyword */ && column <= 157 /* LastKeyword */, "Must compute formatting context from tokens");
+            ts.Debug.assert(row <= 158 /* LastKeyword */ && column <= 158 /* LastKeyword */, "Must compute formatting context from tokens");
             return (row * mapRowLength) + column;
         }
         var maskBitSize = 5;
         var mask = 31; // MaskBitSize bits
-        var mapRowLength = 157 /* LastToken */ + 1;
+        var mapRowLength = 158 /* LastToken */ + 1;
         var RulesPosition;
         (function (RulesPosition) {
             RulesPosition[RulesPosition["StopRulesSpecific"] = 0] = "StopRulesSpecific";
@@ -137065,17 +140341,17 @@
         // i.e. parent is class declaration with the list of members and node is one of members.
         function isListElement(parent, node) {
             switch (parent.kind) {
-                case 253 /* ClassDeclaration */:
-                case 254 /* InterfaceDeclaration */:
+                case 255 /* ClassDeclaration */:
+                case 256 /* InterfaceDeclaration */:
                     return ts.rangeContainsRange(parent.members, node);
-                case 257 /* ModuleDeclaration */:
+                case 259 /* ModuleDeclaration */:
                     var body = parent.body;
-                    return !!body && body.kind === 258 /* ModuleBlock */ && ts.rangeContainsRange(body.statements, node);
-                case 298 /* SourceFile */:
-                case 231 /* Block */:
-                case 258 /* ModuleBlock */:
+                    return !!body && body.kind === 260 /* ModuleBlock */ && ts.rangeContainsRange(body.statements, node);
+                case 300 /* SourceFile */:
+                case 233 /* Block */:
+                case 260 /* ModuleBlock */:
                     return ts.rangeContainsRange(parent.statements, node);
-                case 288 /* CatchClause */:
+                case 290 /* CatchClause */:
                     return ts.rangeContainsRange(parent.block.statements, node);
             }
             return false;
@@ -137304,19 +140580,19 @@
                     return node.modifiers[0].kind;
                 }
                 switch (node.kind) {
-                    case 253 /* ClassDeclaration */: return 83 /* ClassKeyword */;
-                    case 254 /* InterfaceDeclaration */: return 117 /* InterfaceKeyword */;
-                    case 252 /* FunctionDeclaration */: return 97 /* FunctionKeyword */;
-                    case 256 /* EnumDeclaration */: return 256 /* EnumDeclaration */;
-                    case 168 /* GetAccessor */: return 134 /* GetKeyword */;
-                    case 169 /* SetAccessor */: return 146 /* SetKeyword */;
-                    case 166 /* MethodDeclaration */:
+                    case 255 /* ClassDeclaration */: return 84 /* ClassKeyword */;
+                    case 256 /* InterfaceDeclaration */: return 118 /* InterfaceKeyword */;
+                    case 254 /* FunctionDeclaration */: return 98 /* FunctionKeyword */;
+                    case 258 /* EnumDeclaration */: return 258 /* EnumDeclaration */;
+                    case 170 /* GetAccessor */: return 135 /* GetKeyword */;
+                    case 171 /* SetAccessor */: return 147 /* SetKeyword */;
+                    case 167 /* MethodDeclaration */:
                         if (node.asteriskToken) {
                             return 41 /* AsteriskToken */;
                         }
                     // falls through
-                    case 164 /* PropertyDeclaration */:
-                    case 161 /* Parameter */:
+                    case 165 /* PropertyDeclaration */:
+                    case 162 /* Parameter */:
                         var name = ts.getNameOfDeclaration(node);
                         if (name) {
                             return name.kind;
@@ -137366,23 +140642,23 @@
                         case 18 /* OpenBraceToken */:
                         case 19 /* CloseBraceToken */:
                         case 21 /* CloseParenToken */:
-                        case 90 /* ElseKeyword */:
-                        case 114 /* WhileKeyword */:
+                        case 91 /* ElseKeyword */:
+                        case 115 /* WhileKeyword */:
                         case 59 /* AtToken */:
                             return false;
                         case 43 /* SlashToken */:
                         case 31 /* GreaterThanToken */:
                             switch (container.kind) {
-                                case 276 /* JsxOpeningElement */:
-                                case 277 /* JsxClosingElement */:
-                                case 275 /* JsxSelfClosingElement */:
-                                case 224 /* ExpressionWithTypeArguments */:
+                                case 278 /* JsxOpeningElement */:
+                                case 279 /* JsxClosingElement */:
+                                case 277 /* JsxSelfClosingElement */:
+                                case 226 /* ExpressionWithTypeArguments */:
                                     return false;
                             }
                             break;
                         case 22 /* OpenBracketToken */:
                         case 23 /* CloseBracketToken */:
-                            if (container.kind !== 191 /* MappedType */) {
+                            if (container.kind !== 193 /* MappedType */) {
                                 return false;
                             }
                             break;
@@ -137485,11 +140761,11 @@
                             return inheritedIndentation;
                         }
                     }
-                    var effectiveParentStartLine = child.kind === 162 /* Decorator */ ? childStartLine : undecoratedParentStartLine;
+                    var effectiveParentStartLine = child.kind === 163 /* Decorator */ ? childStartLine : undecoratedParentStartLine;
                     var childIndentation = computeIndentation(child, childStartLine, childIndentationAmount, node, parentDynamicIndentation, effectiveParentStartLine);
                     processNode(child, childContextNode, childStartLine, undecoratedChildStartLine, childIndentation.indentation, childIndentation.delta);
                     childContextNode = node;
-                    if (isFirstListItem && parent.kind === 200 /* ArrayLiteralExpression */ && inheritedIndentation === -1 /* Unknown */) {
+                    if (isFirstListItem && parent.kind === 202 /* ArrayLiteralExpression */ && inheritedIndentation === -1 /* Unknown */) {
                         inheritedIndentation = childIndentation.indentation;
                     }
                     return inheritedIndentation;
@@ -137922,12 +141198,12 @@
         formatting.getRangeOfEnclosingComment = getRangeOfEnclosingComment;
         function getOpenTokenForList(node, list) {
             switch (node.kind) {
-                case 167 /* Constructor */:
-                case 252 /* FunctionDeclaration */:
-                case 209 /* FunctionExpression */:
-                case 166 /* MethodDeclaration */:
-                case 165 /* MethodSignature */:
-                case 210 /* ArrowFunction */:
+                case 169 /* Constructor */:
+                case 254 /* FunctionDeclaration */:
+                case 211 /* FunctionExpression */:
+                case 167 /* MethodDeclaration */:
+                case 166 /* MethodSignature */:
+                case 212 /* ArrowFunction */:
                     if (node.typeParameters === list) {
                         return 29 /* LessThanToken */;
                     }
@@ -137935,8 +141211,8 @@
                         return 20 /* OpenParenToken */;
                     }
                     break;
-                case 204 /* CallExpression */:
-                case 205 /* NewExpression */:
+                case 206 /* CallExpression */:
+                case 207 /* NewExpression */:
                     if (node.typeArguments === list) {
                         return 29 /* LessThanToken */;
                     }
@@ -137944,12 +141220,12 @@
                         return 20 /* OpenParenToken */;
                     }
                     break;
-                case 174 /* TypeReference */:
+                case 176 /* TypeReference */:
                     if (node.typeArguments === list) {
                         return 29 /* LessThanToken */;
                     }
                     break;
-                case 178 /* TypeLiteral */:
+                case 180 /* TypeLiteral */:
                     return 18 /* OpenBraceToken */;
             }
             return 0 /* Unknown */;
@@ -138067,7 +141343,7 @@
                 if (options.indentStyle === ts.IndentStyle.Block) {
                     return getBlockIndent(sourceFile, position, options);
                 }
-                if (precedingToken.kind === 27 /* CommaToken */ && precedingToken.parent.kind !== 217 /* BinaryExpression */) {
+                if (precedingToken.kind === 27 /* CommaToken */ && precedingToken.parent.kind !== 219 /* BinaryExpression */) {
                     // previous token is comma that separates items in list - find the previous item and try to derive indentation from it
                     var actualIndentation = getActualIndentationForListItemBeforeComma(precedingToken, sourceFile, options);
                     if (actualIndentation !== -1 /* Unknown */) {
@@ -138240,7 +141516,7 @@
                 // - parent is SourceFile - by default immediate children of SourceFile are not indented except when user indents them manually
                 // - parent and child are not on the same line
                 var useActualIndentation = (ts.isDeclaration(current) || ts.isStatementButNotDeclaration(current)) &&
-                    (parent.kind === 298 /* SourceFile */ || !parentAndChildShareLine);
+                    (parent.kind === 300 /* SourceFile */ || !parentAndChildShareLine);
                 if (!useActualIndentation) {
                     return -1 /* Unknown */;
                 }
@@ -138288,8 +141564,8 @@
             }
             SmartIndenter.isArgumentAndStartLineOverlapsExpressionBeingCalled = isArgumentAndStartLineOverlapsExpressionBeingCalled;
             function childStartsOnTheSameLineWithElseInIfStatement(parent, child, childStartLine, sourceFile) {
-                if (parent.kind === 235 /* IfStatement */ && parent.elseStatement === child) {
-                    var elseKeyword = ts.findChildOfKind(parent, 90 /* ElseKeyword */, sourceFile);
+                if (parent.kind === 237 /* IfStatement */ && parent.elseStatement === child) {
+                    var elseKeyword = ts.findChildOfKind(parent, 91 /* ElseKeyword */, sourceFile);
                     ts.Debug.assert(elseKeyword !== undefined);
                     var elseKeywordStartLine = getStartLineAndCharacterForNode(elseKeyword, sourceFile).line;
                     return elseKeywordStartLine === childStartLine;
@@ -138369,40 +141645,40 @@
             }
             function getListByRange(start, end, node, sourceFile) {
                 switch (node.kind) {
-                    case 174 /* TypeReference */:
+                    case 176 /* TypeReference */:
                         return getList(node.typeArguments);
-                    case 201 /* ObjectLiteralExpression */:
+                    case 203 /* ObjectLiteralExpression */:
                         return getList(node.properties);
-                    case 200 /* ArrayLiteralExpression */:
+                    case 202 /* ArrayLiteralExpression */:
                         return getList(node.elements);
-                    case 178 /* TypeLiteral */:
+                    case 180 /* TypeLiteral */:
                         return getList(node.members);
-                    case 252 /* FunctionDeclaration */:
-                    case 209 /* FunctionExpression */:
-                    case 210 /* ArrowFunction */:
-                    case 166 /* MethodDeclaration */:
-                    case 165 /* MethodSignature */:
-                    case 170 /* CallSignature */:
-                    case 167 /* Constructor */:
-                    case 176 /* ConstructorType */:
-                    case 171 /* ConstructSignature */:
+                    case 254 /* FunctionDeclaration */:
+                    case 211 /* FunctionExpression */:
+                    case 212 /* ArrowFunction */:
+                    case 167 /* MethodDeclaration */:
+                    case 166 /* MethodSignature */:
+                    case 172 /* CallSignature */:
+                    case 169 /* Constructor */:
+                    case 178 /* ConstructorType */:
+                    case 173 /* ConstructSignature */:
                         return getList(node.typeParameters) || getList(node.parameters);
-                    case 253 /* ClassDeclaration */:
-                    case 222 /* ClassExpression */:
-                    case 254 /* InterfaceDeclaration */:
-                    case 255 /* TypeAliasDeclaration */:
-                    case 334 /* JSDocTemplateTag */:
+                    case 255 /* ClassDeclaration */:
+                    case 224 /* ClassExpression */:
+                    case 256 /* InterfaceDeclaration */:
+                    case 257 /* TypeAliasDeclaration */:
+                    case 339 /* JSDocTemplateTag */:
                         return getList(node.typeParameters);
-                    case 205 /* NewExpression */:
-                    case 204 /* CallExpression */:
+                    case 207 /* NewExpression */:
+                    case 206 /* CallExpression */:
                         return getList(node.typeArguments) || getList(node.arguments);
-                    case 251 /* VariableDeclarationList */:
+                    case 253 /* VariableDeclarationList */:
                         return getList(node.declarations);
-                    case 265 /* NamedImports */:
-                    case 269 /* NamedExports */:
+                    case 267 /* NamedImports */:
+                    case 271 /* NamedExports */:
                         return getList(node.elements);
-                    case 197 /* ObjectBindingPattern */:
-                    case 198 /* ArrayBindingPattern */:
+                    case 199 /* ObjectBindingPattern */:
+                    case 200 /* ArrayBindingPattern */:
                         return getList(node.elements);
                 }
                 function getList(list) {
@@ -138425,7 +141701,7 @@
                 return findColumnForFirstNonWhitespaceCharacterInLine(sourceFile.getLineAndCharacterOfPosition(list.pos), sourceFile, options);
             }
             function getActualIndentationForListItem(node, sourceFile, options, listIndentsChild) {
-                if (node.parent && node.parent.kind === 251 /* VariableDeclarationList */) {
+                if (node.parent && node.parent.kind === 253 /* VariableDeclarationList */) {
                     // VariableDeclarationList has no wrapping tokens
                     return -1 /* Unknown */;
                 }
@@ -138498,91 +141774,91 @@
             function nodeWillIndentChild(settings, parent, child, sourceFile, indentByDefault) {
                 var childKind = child ? child.kind : 0 /* Unknown */;
                 switch (parent.kind) {
-                    case 234 /* ExpressionStatement */:
-                    case 253 /* ClassDeclaration */:
-                    case 222 /* ClassExpression */:
-                    case 254 /* InterfaceDeclaration */:
-                    case 256 /* EnumDeclaration */:
-                    case 255 /* TypeAliasDeclaration */:
-                    case 200 /* ArrayLiteralExpression */:
-                    case 231 /* Block */:
-                    case 258 /* ModuleBlock */:
-                    case 201 /* ObjectLiteralExpression */:
-                    case 178 /* TypeLiteral */:
-                    case 191 /* MappedType */:
-                    case 180 /* TupleType */:
-                    case 259 /* CaseBlock */:
-                    case 286 /* DefaultClause */:
-                    case 285 /* CaseClause */:
-                    case 208 /* ParenthesizedExpression */:
-                    case 202 /* PropertyAccessExpression */:
-                    case 204 /* CallExpression */:
-                    case 205 /* NewExpression */:
-                    case 233 /* VariableStatement */:
-                    case 267 /* ExportAssignment */:
-                    case 243 /* ReturnStatement */:
-                    case 218 /* ConditionalExpression */:
-                    case 198 /* ArrayBindingPattern */:
-                    case 197 /* ObjectBindingPattern */:
-                    case 276 /* JsxOpeningElement */:
-                    case 279 /* JsxOpeningFragment */:
-                    case 275 /* JsxSelfClosingElement */:
-                    case 284 /* JsxExpression */:
-                    case 165 /* MethodSignature */:
-                    case 170 /* CallSignature */:
-                    case 171 /* ConstructSignature */:
-                    case 161 /* Parameter */:
-                    case 175 /* FunctionType */:
-                    case 176 /* ConstructorType */:
-                    case 187 /* ParenthesizedType */:
-                    case 206 /* TaggedTemplateExpression */:
-                    case 214 /* AwaitExpression */:
-                    case 269 /* NamedExports */:
-                    case 265 /* NamedImports */:
-                    case 271 /* ExportSpecifier */:
-                    case 266 /* ImportSpecifier */:
-                    case 164 /* PropertyDeclaration */:
+                    case 236 /* ExpressionStatement */:
+                    case 255 /* ClassDeclaration */:
+                    case 224 /* ClassExpression */:
+                    case 256 /* InterfaceDeclaration */:
+                    case 258 /* EnumDeclaration */:
+                    case 257 /* TypeAliasDeclaration */:
+                    case 202 /* ArrayLiteralExpression */:
+                    case 233 /* Block */:
+                    case 260 /* ModuleBlock */:
+                    case 203 /* ObjectLiteralExpression */:
+                    case 180 /* TypeLiteral */:
+                    case 193 /* MappedType */:
+                    case 182 /* TupleType */:
+                    case 261 /* CaseBlock */:
+                    case 288 /* DefaultClause */:
+                    case 287 /* CaseClause */:
+                    case 210 /* ParenthesizedExpression */:
+                    case 204 /* PropertyAccessExpression */:
+                    case 206 /* CallExpression */:
+                    case 207 /* NewExpression */:
+                    case 235 /* VariableStatement */:
+                    case 269 /* ExportAssignment */:
+                    case 245 /* ReturnStatement */:
+                    case 220 /* ConditionalExpression */:
+                    case 200 /* ArrayBindingPattern */:
+                    case 199 /* ObjectBindingPattern */:
+                    case 278 /* JsxOpeningElement */:
+                    case 281 /* JsxOpeningFragment */:
+                    case 277 /* JsxSelfClosingElement */:
+                    case 286 /* JsxExpression */:
+                    case 166 /* MethodSignature */:
+                    case 172 /* CallSignature */:
+                    case 173 /* ConstructSignature */:
+                    case 162 /* Parameter */:
+                    case 177 /* FunctionType */:
+                    case 178 /* ConstructorType */:
+                    case 189 /* ParenthesizedType */:
+                    case 208 /* TaggedTemplateExpression */:
+                    case 216 /* AwaitExpression */:
+                    case 271 /* NamedExports */:
+                    case 267 /* NamedImports */:
+                    case 273 /* ExportSpecifier */:
+                    case 268 /* ImportSpecifier */:
+                    case 165 /* PropertyDeclaration */:
                         return true;
-                    case 250 /* VariableDeclaration */:
-                    case 289 /* PropertyAssignment */:
-                    case 217 /* BinaryExpression */:
-                        if (!settings.indentMultiLineObjectLiteralBeginningOnBlankLine && sourceFile && childKind === 201 /* ObjectLiteralExpression */) { // TODO: GH#18217
+                    case 252 /* VariableDeclaration */:
+                    case 291 /* PropertyAssignment */:
+                    case 219 /* BinaryExpression */:
+                        if (!settings.indentMultiLineObjectLiteralBeginningOnBlankLine && sourceFile && childKind === 203 /* ObjectLiteralExpression */) { // TODO: GH#18217
                             return rangeIsOnOneLine(sourceFile, child);
                         }
-                        if (parent.kind !== 217 /* BinaryExpression */) {
+                        if (parent.kind !== 219 /* BinaryExpression */) {
                             return true;
                         }
                         break;
-                    case 236 /* DoStatement */:
-                    case 237 /* WhileStatement */:
-                    case 239 /* ForInStatement */:
-                    case 240 /* ForOfStatement */:
-                    case 238 /* ForStatement */:
-                    case 235 /* IfStatement */:
-                    case 252 /* FunctionDeclaration */:
-                    case 209 /* FunctionExpression */:
-                    case 166 /* MethodDeclaration */:
-                    case 167 /* Constructor */:
-                    case 168 /* GetAccessor */:
-                    case 169 /* SetAccessor */:
-                        return childKind !== 231 /* Block */;
-                    case 210 /* ArrowFunction */:
-                        if (sourceFile && childKind === 208 /* ParenthesizedExpression */) {
+                    case 238 /* DoStatement */:
+                    case 239 /* WhileStatement */:
+                    case 241 /* ForInStatement */:
+                    case 242 /* ForOfStatement */:
+                    case 240 /* ForStatement */:
+                    case 237 /* IfStatement */:
+                    case 254 /* FunctionDeclaration */:
+                    case 211 /* FunctionExpression */:
+                    case 167 /* MethodDeclaration */:
+                    case 169 /* Constructor */:
+                    case 170 /* GetAccessor */:
+                    case 171 /* SetAccessor */:
+                        return childKind !== 233 /* Block */;
+                    case 212 /* ArrowFunction */:
+                        if (sourceFile && childKind === 210 /* ParenthesizedExpression */) {
                             return rangeIsOnOneLine(sourceFile, child);
                         }
-                        return childKind !== 231 /* Block */;
-                    case 268 /* ExportDeclaration */:
-                        return childKind !== 269 /* NamedExports */;
-                    case 262 /* ImportDeclaration */:
-                        return childKind !== 263 /* ImportClause */ ||
-                            (!!child.namedBindings && child.namedBindings.kind !== 265 /* NamedImports */);
-                    case 274 /* JsxElement */:
-                        return childKind !== 277 /* JsxClosingElement */;
-                    case 278 /* JsxFragment */:
-                        return childKind !== 280 /* JsxClosingFragment */;
-                    case 184 /* IntersectionType */:
-                    case 183 /* UnionType */:
-                        if (childKind === 178 /* TypeLiteral */ || childKind === 180 /* TupleType */) {
+                        return childKind !== 233 /* Block */;
+                    case 270 /* ExportDeclaration */:
+                        return childKind !== 271 /* NamedExports */;
+                    case 264 /* ImportDeclaration */:
+                        return childKind !== 265 /* ImportClause */ ||
+                            (!!child.namedBindings && child.namedBindings.kind !== 267 /* NamedImports */);
+                    case 276 /* JsxElement */:
+                        return childKind !== 279 /* JsxClosingElement */;
+                    case 280 /* JsxFragment */:
+                        return childKind !== 282 /* JsxClosingFragment */;
+                    case 186 /* IntersectionType */:
+                    case 185 /* UnionType */:
+                        if (childKind === 180 /* TypeLiteral */ || childKind === 182 /* TupleType */) {
                             return false;
                         }
                         break;
@@ -138593,11 +141869,11 @@
             SmartIndenter.nodeWillIndentChild = nodeWillIndentChild;
             function isControlFlowEndingStatement(kind, parent) {
                 switch (kind) {
-                    case 243 /* ReturnStatement */:
-                    case 247 /* ThrowStatement */:
-                    case 241 /* ContinueStatement */:
-                    case 242 /* BreakStatement */:
-                        return parent.kind !== 231 /* Block */;
+                    case 245 /* ReturnStatement */:
+                    case 249 /* ThrowStatement */:
+                    case 243 /* ContinueStatement */:
+                    case 244 /* BreakStatement */:
+                        return parent.kind !== 233 /* Block */;
                     default:
                         return false;
                 }
@@ -138713,7 +141989,9 @@
                 return node.getStart(sourceFile);
             }
             if (leadingTriviaOption === LeadingTriviaOption.StartLine) {
-                return ts.getLineStartPositionForPosition(node.getStart(sourceFile), sourceFile);
+                var startPos = node.getStart(sourceFile);
+                var pos = ts.getLineStartPositionForPosition(startPos, sourceFile);
+                return ts.rangeContainsPosition(node, pos) ? pos : startPos;
             }
             if (leadingTriviaOption === LeadingTriviaOption.JSDoc) {
                 var JSDocComments = ts.getJSDocCommentRanges(node, sourceFile.text);
@@ -138812,7 +142090,7 @@
          * Checks if 'candidate' argument is a legal separator in the list that contains 'node' as an element
          */
         function isSeparator(node, candidate) {
-            return !!candidate && !!node.parent && (candidate.kind === 27 /* CommaToken */ || (candidate.kind === 26 /* SemicolonToken */ && node.parent.kind === 201 /* ObjectLiteralExpression */));
+            return !!candidate && !!node.parent && (candidate.kind === 27 /* CommaToken */ || (candidate.kind === 26 /* SemicolonToken */ && node.parent.kind === 203 /* ObjectLiteralExpression */));
         }
         function isThisTypeAnnotatable(containingFunction) {
             return ts.isFunctionExpression(containingFunction) || ts.isFunctionDeclaration(containingFunction);
@@ -139019,7 +142297,7 @@
                     }
                 }
                 else {
-                    endNode = (_a = (node.kind === 250 /* VariableDeclaration */ ? node.exclamationToken : node.questionToken)) !== null && _a !== void 0 ? _a : node.name;
+                    endNode = (_a = (node.kind === 252 /* VariableDeclaration */ ? node.exclamationToken : node.questionToken)) !== null && _a !== void 0 ? _a : node.name;
                 }
                 this.insertNodeAt(sourceFile, endNode.end, type, { prefix: ": " });
                 return true;
@@ -139055,7 +142333,7 @@
             ChangeTracker.prototype.insertNodeAtConstructorStart = function (sourceFile, ctr, newStatement) {
                 var firstStatement = ts.firstOrUndefined(ctr.body.statements);
                 if (!firstStatement || !ctr.body.multiLine) {
-                    this.replaceConstructorBody(sourceFile, ctr, __spreadArray([newStatement], ctr.body.statements));
+                    this.replaceConstructorBody(sourceFile, ctr, __spreadArray([newStatement], ctr.body.statements, true));
                 }
                 else {
                     this.insertNodeBefore(sourceFile, firstStatement, newStatement);
@@ -139064,7 +142342,7 @@
             ChangeTracker.prototype.insertNodeAtConstructorStartAfterSuperCall = function (sourceFile, ctr, newStatement) {
                 var superCallStatement = ts.find(ctr.body.statements, function (stmt) { return ts.isExpressionStatement(stmt) && ts.isSuperCall(stmt.expression); });
                 if (!superCallStatement || !ctr.body.multiLine) {
-                    this.replaceConstructorBody(sourceFile, ctr, __spreadArray(__spreadArray([], ctr.body.statements), [newStatement]));
+                    this.replaceConstructorBody(sourceFile, ctr, __spreadArray(__spreadArray([], ctr.body.statements, true), [newStatement], false));
                 }
                 else {
                     this.insertNodeAfter(sourceFile, superCallStatement, newStatement);
@@ -139073,7 +142351,7 @@
             ChangeTracker.prototype.insertNodeAtConstructorEnd = function (sourceFile, ctr, newStatement) {
                 var lastStatement = ts.lastOrUndefined(ctr.body.statements);
                 if (!lastStatement || !ctr.body.multiLine) {
-                    this.replaceConstructorBody(sourceFile, ctr, __spreadArray(__spreadArray([], ctr.body.statements), [newStatement]));
+                    this.replaceConstructorBody(sourceFile, ctr, __spreadArray(__spreadArray([], ctr.body.statements, true), [newStatement], false));
                 }
                 else {
                     this.insertNodeAfter(sourceFile, lastStatement, newStatement);
@@ -139185,18 +142463,18 @@
             };
             ChangeTracker.prototype.getInsertNodeAfterOptionsWorker = function (node) {
                 switch (node.kind) {
-                    case 253 /* ClassDeclaration */:
-                    case 257 /* ModuleDeclaration */:
+                    case 255 /* ClassDeclaration */:
+                    case 259 /* ModuleDeclaration */:
                         return { prefix: this.newLineCharacter, suffix: this.newLineCharacter };
-                    case 250 /* VariableDeclaration */:
+                    case 252 /* VariableDeclaration */:
                     case 10 /* StringLiteral */:
-                    case 78 /* Identifier */:
+                    case 79 /* Identifier */:
                         return { prefix: ", " };
-                    case 289 /* PropertyAssignment */:
+                    case 291 /* PropertyAssignment */:
                         return { suffix: "," + this.newLineCharacter };
-                    case 92 /* ExportKeyword */:
+                    case 93 /* ExportKeyword */:
                         return { prefix: " " };
-                    case 161 /* Parameter */:
+                    case 162 /* Parameter */:
                         return {};
                     default:
                         ts.Debug.assert(ts.isStatement(node) || ts.isClassOrTypeElement(node)); // Else we haven't handled this kind of node yet -- add it
@@ -139205,12 +142483,12 @@
             };
             ChangeTracker.prototype.insertName = function (sourceFile, node, name) {
                 ts.Debug.assert(!node.name);
-                if (node.kind === 210 /* ArrowFunction */) {
+                if (node.kind === 212 /* ArrowFunction */) {
                     var arrow = ts.findChildOfKind(node, 38 /* EqualsGreaterThanToken */, sourceFile);
                     var lparen = ts.findChildOfKind(node, 20 /* OpenParenToken */, sourceFile);
                     if (lparen) {
                         // `() => {}` --> `function f() {}`
-                        this.insertNodesAt(sourceFile, lparen.getStart(sourceFile), [ts.factory.createToken(97 /* FunctionKeyword */), ts.factory.createIdentifier(name)], { joiner: " " });
+                        this.insertNodesAt(sourceFile, lparen.getStart(sourceFile), [ts.factory.createToken(98 /* FunctionKeyword */), ts.factory.createIdentifier(name)], { joiner: " " });
                         deleteNode(this, sourceFile, arrow);
                     }
                     else {
@@ -139219,14 +142497,14 @@
                         // Replacing full range of arrow to get rid of the leading space -- replace ` =>` with `)`
                         this.replaceRange(sourceFile, arrow, ts.factory.createToken(21 /* CloseParenToken */));
                     }
-                    if (node.body.kind !== 231 /* Block */) {
+                    if (node.body.kind !== 233 /* Block */) {
                         // `() => 0` => `function f() { return 0; }`
-                        this.insertNodesAt(sourceFile, node.body.getStart(sourceFile), [ts.factory.createToken(18 /* OpenBraceToken */), ts.factory.createToken(104 /* ReturnKeyword */)], { joiner: " ", suffix: " " });
+                        this.insertNodesAt(sourceFile, node.body.getStart(sourceFile), [ts.factory.createToken(18 /* OpenBraceToken */), ts.factory.createToken(105 /* ReturnKeyword */)], { joiner: " ", suffix: " " });
                         this.insertNodesAt(sourceFile, node.body.end, [ts.factory.createToken(26 /* SemicolonToken */), ts.factory.createToken(19 /* CloseBraceToken */)], { joiner: " " });
                     }
                 }
                 else {
-                    var pos = ts.findChildOfKind(node, node.kind === 209 /* FunctionExpression */ ? 97 /* FunctionKeyword */ : 83 /* ClassKeyword */, sourceFile).end;
+                    var pos = ts.findChildOfKind(node, node.kind === 211 /* FunctionExpression */ ? 98 /* FunctionKeyword */ : 84 /* ClassKeyword */, sourceFile).end;
                     this.insertNodeAt(sourceFile, pos, ts.factory.createIdentifier(name), { prefix: " " });
                 }
             };
@@ -139453,16 +142731,17 @@
             }
             changesToText.newFileChangesWorker = newFileChangesWorker;
             function computeNewText(change, sourceFile, newLineCharacter, formatContext, validate) {
+                var _a;
                 if (change.kind === ChangeKind.Remove) {
                     return "";
                 }
                 if (change.kind === ChangeKind.Text) {
                     return change.text;
                 }
-                var _a = change.options, options = _a === void 0 ? {} : _a, pos = change.range.pos;
+                var _b = change.options, options = _b === void 0 ? {} : _b, pos = change.range.pos;
                 var format = function (n) { return getFormattedTextOfNode(n, sourceFile, pos, options, newLineCharacter, formatContext, validate); };
                 var text = change.kind === ChangeKind.ReplaceWithMultipleNodes
-                    ? change.nodes.map(function (n) { return ts.removeSuffix(format(n), newLineCharacter); }).join(change.options.joiner || newLineCharacter) // TODO: GH#18217
+                    ? change.nodes.map(function (n) { return ts.removeSuffix(format(n), newLineCharacter); }).join(((_a = change.options) === null || _a === void 0 ? void 0 : _a.joiner) || newLineCharacter)
                     : format(change.node);
                 // strip initial indentation (spaces or tabs) if text will be inserted in the middle of the line
                 var noIndent = (options.preserveLeadingWhitespace || options.indentation !== undefined || ts.getLineStartPositionForPosition(pos, sourceFile) === pos) ? text : text.replace(/^\s+/, "");
@@ -139519,7 +142798,7 @@
             return ts.skipTrivia(s, 0) === s.length;
         }
         function assignPositionsToNode(node) {
-            var visited = ts.visitEachChild(node, assignPositionsToNode, ts.nullTransformationContext, assignPositionsToNodeArray, assignPositionsToNode); // TODO: GH#18217
+            var visited = ts.visitEachChild(node, assignPositionsToNode, ts.nullTransformationContext, assignPositionsToNodeArray, assignPositionsToNode);
             // create proxy node for non synthesized nodes
             var newNode = ts.nodeIsSynthesized(visited) ? visited : Object.create(visited);
             ts.setTextRangePosEnd(newNode, getPos(node), getEnd(node));
@@ -139778,14 +143057,14 @@
         }
         textChanges_3.isValidLocationToAddComment = isValidLocationToAddComment;
         function needSemicolonBetween(a, b) {
-            return (ts.isPropertySignature(a) || ts.isPropertyDeclaration(a)) && ts.isClassOrTypeElement(b) && b.name.kind === 159 /* ComputedPropertyName */
+            return (ts.isPropertySignature(a) || ts.isPropertyDeclaration(a)) && ts.isClassOrTypeElement(b) && b.name.kind === 160 /* ComputedPropertyName */
                 || ts.isStatementButNotDeclaration(a) && ts.isStatementButNotDeclaration(b); // TODO: only if b would start with a `(` or `[`
         }
         var deleteDeclaration;
         (function (deleteDeclaration_1) {
             function deleteDeclaration(changes, deletedNodesInLists, sourceFile, node) {
                 switch (node.kind) {
-                    case 161 /* Parameter */: {
+                    case 162 /* Parameter */: {
                         var oldFunction = node.parent;
                         if (ts.isArrowFunction(oldFunction) &&
                             oldFunction.parameters.length === 1 &&
@@ -139800,17 +143079,17 @@
                         }
                         break;
                     }
-                    case 262 /* ImportDeclaration */:
-                    case 261 /* ImportEqualsDeclaration */:
+                    case 264 /* ImportDeclaration */:
+                    case 263 /* ImportEqualsDeclaration */:
                         var isFirstImport = sourceFile.imports.length && node === ts.first(sourceFile.imports).parent || node === ts.find(sourceFile.statements, ts.isAnyImportSyntax);
                         // For first import, leave header comment in place, otherwise only delete JSDoc comments
                         deleteNode(changes, sourceFile, node, {
                             leadingTriviaOption: isFirstImport ? LeadingTriviaOption.Exclude : ts.hasJSDocNodes(node) ? LeadingTriviaOption.JSDoc : LeadingTriviaOption.StartLine,
                         });
                         break;
-                    case 199 /* BindingElement */:
+                    case 201 /* BindingElement */:
                         var pattern = node.parent;
-                        var preserveComma = pattern.kind === 198 /* ArrayBindingPattern */ && node !== ts.last(pattern.elements);
+                        var preserveComma = pattern.kind === 200 /* ArrayBindingPattern */ && node !== ts.last(pattern.elements);
                         if (preserveComma) {
                             deleteNode(changes, sourceFile, node);
                         }
@@ -139818,13 +143097,13 @@
                             deleteNodeInList(changes, deletedNodesInLists, sourceFile, node);
                         }
                         break;
-                    case 250 /* VariableDeclaration */:
+                    case 252 /* VariableDeclaration */:
                         deleteVariableDeclaration(changes, deletedNodesInLists, sourceFile, node);
                         break;
-                    case 160 /* TypeParameter */:
+                    case 161 /* TypeParameter */:
                         deleteNodeInList(changes, deletedNodesInLists, sourceFile, node);
                         break;
-                    case 266 /* ImportSpecifier */:
+                    case 268 /* ImportSpecifier */:
                         var namedImports = node.parent;
                         if (namedImports.elements.length === 1) {
                             deleteImportBinding(changes, sourceFile, namedImports);
@@ -139833,17 +143112,17 @@
                             deleteNodeInList(changes, deletedNodesInLists, sourceFile, node);
                         }
                         break;
-                    case 264 /* NamespaceImport */:
+                    case 266 /* NamespaceImport */:
                         deleteImportBinding(changes, sourceFile, node);
                         break;
                     case 26 /* SemicolonToken */:
                         deleteNode(changes, sourceFile, node, { trailingTriviaOption: TrailingTriviaOption.Exclude });
                         break;
-                    case 97 /* FunctionKeyword */:
+                    case 98 /* FunctionKeyword */:
                         deleteNode(changes, sourceFile, node, { leadingTriviaOption: LeadingTriviaOption.Exclude });
                         break;
-                    case 253 /* ClassDeclaration */:
-                    case 252 /* FunctionDeclaration */:
+                    case 255 /* ClassDeclaration */:
+                    case 254 /* FunctionDeclaration */:
                         deleteNode(changes, sourceFile, node, { leadingTriviaOption: ts.hasJSDocNodes(node) ? LeadingTriviaOption.JSDoc : LeadingTriviaOption.StartLine });
                         break;
                     default:
@@ -139894,13 +143173,13 @@
                     // Delete the entire import declaration
                     // |import * as ns from './file'|
                     // |import { a } from './file'|
-                    var importDecl = ts.getAncestor(node, 262 /* ImportDeclaration */);
+                    var importDecl = ts.getAncestor(node, 264 /* ImportDeclaration */);
                     deleteNode(changes, sourceFile, importDecl);
                 }
             }
             function deleteVariableDeclaration(changes, deletedNodesInLists, sourceFile, node) {
                 var parent = node.parent;
-                if (parent.kind === 288 /* CatchClause */) {
+                if (parent.kind === 290 /* CatchClause */) {
                     // TODO: There's currently no unused diagnostic for this, could be a suggestion
                     changes.deleteNodeRange(sourceFile, ts.findChildOfKind(parent, 20 /* OpenParenToken */, sourceFile), ts.findChildOfKind(parent, 21 /* CloseParenToken */, sourceFile));
                     return;
@@ -139911,14 +143190,14 @@
                 }
                 var gp = parent.parent;
                 switch (gp.kind) {
-                    case 240 /* ForOfStatement */:
-                    case 239 /* ForInStatement */:
+                    case 242 /* ForOfStatement */:
+                    case 241 /* ForInStatement */:
                         changes.replaceNode(sourceFile, node, ts.factory.createObjectLiteralExpression());
                         break;
-                    case 238 /* ForStatement */:
+                    case 240 /* ForStatement */:
                         deleteNode(changes, sourceFile, parent);
                         break;
-                    case 233 /* VariableStatement */:
+                    case 235 /* VariableStatement */:
                         deleteNode(changes, sourceFile, gp, { leadingTriviaOption: ts.hasJSDocNodes(gp) ? LeadingTriviaOption.JSDoc : LeadingTriviaOption.StartLine });
                         break;
                     default:
@@ -140051,7 +143330,7 @@
         codefix.eachDiagnostic = eachDiagnostic;
         function getDiagnostics(_a) {
             var program = _a.program, sourceFile = _a.sourceFile, cancellationToken = _a.cancellationToken;
-            return __spreadArray(__spreadArray(__spreadArray([], program.getSemanticDiagnostics(sourceFile, cancellationToken)), program.getSyntacticDiagnostics(sourceFile, cancellationToken)), ts.computeSuggestionDiagnostics(sourceFile, program, cancellationToken));
+            return __spreadArray(__spreadArray(__spreadArray([], program.getSemanticDiagnostics(sourceFile, cancellationToken), true), program.getSyntacticDiagnostics(sourceFile, cancellationToken), true), ts.computeSuggestionDiagnostics(sourceFile, program, cancellationToken), true);
         }
     })(codefix = ts.codefix || (ts.codefix = {}));
 })(ts || (ts = {}));
@@ -140104,8 +143383,8 @@
             var token = ts.getTokenAtPosition(sourceFile, pos);
             var assertion = ts.Debug.checkDefined(ts.findAncestor(token, function (n) { return ts.isAsExpression(n) || ts.isTypeAssertionExpression(n); }), "Expected to find an assertion expression");
             var replacement = ts.isAsExpression(assertion)
-                ? ts.factory.createAsExpression(assertion.expression, ts.factory.createKeywordTypeNode(152 /* UnknownKeyword */))
-                : ts.factory.createTypeAssertion(ts.factory.createKeywordTypeNode(152 /* UnknownKeyword */), assertion.expression);
+                ? ts.factory.createAsExpression(assertion.expression, ts.factory.createKeywordTypeNode(153 /* UnknownKeyword */))
+                : ts.factory.createTypeAssertion(ts.factory.createKeywordTypeNode(153 /* UnknownKeyword */), assertion.expression);
             changeTracker.replaceNode(sourceFile, assertion.expression, replacement);
         }
     })(codefix = ts.codefix || (ts.codefix = {}));
@@ -140242,7 +143521,7 @@
             ts.Diagnostics.Type_0_must_have_a_Symbol_asyncIterator_method_that_returns_an_async_iterator.code,
             ts.Diagnostics.Argument_of_type_0_is_not_assignable_to_parameter_of_type_1.code,
             propertyAccessCode
-        ], callableConstructableErrorCodes);
+        ], callableConstructableErrorCodes, true);
         codefix.registerCodeFix({
             fixIds: [fixId],
             errorCodes: errorCodes,
@@ -140338,7 +143617,7 @@
                 }
                 var declaration = ts.tryCast(symbol.valueDeclaration, ts.isVariableDeclaration);
                 var variableName = declaration && ts.tryCast(declaration.name, ts.isIdentifier);
-                var variableStatement = ts.getAncestor(declaration, 233 /* VariableStatement */);
+                var variableStatement = ts.getAncestor(declaration, 235 /* VariableStatement */);
                 if (!declaration || !variableStatement ||
                     declaration.type ||
                     !declaration.initializer ||
@@ -140416,10 +143695,10 @@
         function isInsideAwaitableBody(node) {
             return node.kind & 32768 /* AwaitContext */ || !!ts.findAncestor(node, function (ancestor) {
                 return ancestor.parent && ts.isArrowFunction(ancestor.parent) && ancestor.parent.body === ancestor ||
-                    ts.isBlock(ancestor) && (ancestor.parent.kind === 252 /* FunctionDeclaration */ ||
-                        ancestor.parent.kind === 209 /* FunctionExpression */ ||
-                        ancestor.parent.kind === 210 /* ArrowFunction */ ||
-                        ancestor.parent.kind === 166 /* MethodDeclaration */);
+                    ts.isBlock(ancestor) && (ancestor.parent.kind === 254 /* FunctionDeclaration */ ||
+                        ancestor.parent.kind === 211 /* FunctionExpression */ ||
+                        ancestor.parent.kind === 212 /* ArrowFunction */ ||
+                        ancestor.parent.kind === 167 /* MethodDeclaration */);
             });
         }
         function makeChange(changeTracker, errorCode, sourceFile, checker, insertionSite, fixedDeclarations) {
@@ -140508,7 +143787,7 @@
             if (forInitializer)
                 return applyChange(changeTracker, forInitializer, sourceFile, fixedNodes);
             var parent = token.parent;
-            if (ts.isBinaryExpression(parent) && parent.operatorToken.kind === 62 /* EqualsToken */ && ts.isExpressionStatement(parent.parent)) {
+            if (ts.isBinaryExpression(parent) && parent.operatorToken.kind === 63 /* EqualsToken */ && ts.isExpressionStatement(parent.parent)) {
                 return applyChange(changeTracker, token, sourceFile, fixedNodes);
             }
             if (ts.isArrayLiteralExpression(parent)) {
@@ -140532,16 +143811,16 @@
         }
         function applyChange(changeTracker, initializer, sourceFile, fixedNodes) {
             if (!fixedNodes || ts.tryAddToSet(fixedNodes, initializer)) {
-                changeTracker.insertModifierBefore(sourceFile, 84 /* ConstKeyword */, initializer);
+                changeTracker.insertModifierBefore(sourceFile, 85 /* ConstKeyword */, initializer);
             }
         }
         function isPossiblyPartOfDestructuring(node) {
             switch (node.kind) {
-                case 78 /* Identifier */:
-                case 200 /* ArrayLiteralExpression */:
-                case 201 /* ObjectLiteralExpression */:
-                case 289 /* PropertyAssignment */:
-                case 290 /* ShorthandPropertyAssignment */:
+                case 79 /* Identifier */:
+                case 202 /* ArrayLiteralExpression */:
+                case 203 /* ObjectLiteralExpression */:
+                case 291 /* PropertyAssignment */:
+                case 292 /* ShorthandPropertyAssignment */:
                     return true;
                 default:
                     return false;
@@ -140555,8 +143834,8 @@
         }
         function isPossiblyPartOfCommaSeperatedInitializer(node) {
             switch (node.kind) {
-                case 78 /* Identifier */:
-                case 217 /* BinaryExpression */:
+                case 79 /* Identifier */:
+                case 219 /* BinaryExpression */:
                 case 27 /* CommaToken */:
                     return true;
                 default:
@@ -140570,7 +143849,7 @@
             if (expression.operatorToken.kind === 27 /* CommaToken */) {
                 return ts.every([expression.left, expression.right], function (expression) { return expressionCouldBeVariableDeclaration(expression, checker); });
             }
-            return expression.operatorToken.kind === 62 /* EqualsToken */
+            return expression.operatorToken.kind === 63 /* EqualsToken */
                 && ts.isIdentifier(expression.left)
                 && !checker.getSymbolAtLocation(expression.left);
         }
@@ -140605,9 +143884,9 @@
                 return;
             }
             var declaration = token.parent;
-            if (declaration.kind === 164 /* PropertyDeclaration */ &&
+            if (declaration.kind === 165 /* PropertyDeclaration */ &&
                 (!fixedNodes || ts.tryAddToSet(fixedNodes, declaration))) {
-                changeTracker.insertModifierBefore(sourceFile, 133 /* DeclareKeyword */, declaration);
+                changeTracker.insertModifierBefore(sourceFile, 134 /* DeclareKeyword */, declaration);
             }
         }
     })(codefix = ts.codefix || (ts.codefix = {}));
@@ -140742,26 +144021,26 @@
         }
         function isDeclarationWithType(node) {
             return ts.isFunctionLikeDeclaration(node) ||
-                node.kind === 250 /* VariableDeclaration */ ||
-                node.kind === 163 /* PropertySignature */ ||
-                node.kind === 164 /* PropertyDeclaration */;
+                node.kind === 252 /* VariableDeclaration */ ||
+                node.kind === 164 /* PropertySignature */ ||
+                node.kind === 165 /* PropertyDeclaration */;
         }
         function transformJSDocType(node) {
             switch (node.kind) {
-                case 304 /* JSDocAllType */:
-                case 305 /* JSDocUnknownType */:
+                case 307 /* JSDocAllType */:
+                case 308 /* JSDocUnknownType */:
                     return ts.factory.createTypeReferenceNode("any", ts.emptyArray);
-                case 308 /* JSDocOptionalType */:
+                case 311 /* JSDocOptionalType */:
                     return transformJSDocOptionalType(node);
-                case 307 /* JSDocNonNullableType */:
+                case 310 /* JSDocNonNullableType */:
                     return transformJSDocType(node.type);
-                case 306 /* JSDocNullableType */:
+                case 309 /* JSDocNullableType */:
                     return transformJSDocNullableType(node);
-                case 310 /* JSDocVariadicType */:
+                case 313 /* JSDocVariadicType */:
                     return transformJSDocVariadicType(node);
-                case 309 /* JSDocFunctionType */:
+                case 312 /* JSDocFunctionType */:
                     return transformJSDocFunctionType(node);
-                case 174 /* TypeReference */:
+                case 176 /* TypeReference */:
                     return transformJSDocTypeReference(node);
                 default:
                     var visited = ts.visitEachChild(node, transformJSDocType, ts.nullTransformationContext);
@@ -140782,11 +144061,11 @@
             var _a;
             // TODO: This does not properly handle `function(new:C, string)` per https://github.com/google/closure-compiler/wiki/Types-in-the-Closure-Type-System#the-javascript-type-language
             //       however we do handle it correctly in `serializeTypeForDeclaration` in checker.ts
-            return ts.factory.createFunctionTypeNode(ts.emptyArray, node.parameters.map(transformJSDocParameter), (_a = node.type) !== null && _a !== void 0 ? _a : ts.factory.createKeywordTypeNode(128 /* AnyKeyword */));
+            return ts.factory.createFunctionTypeNode(ts.emptyArray, node.parameters.map(transformJSDocParameter), (_a = node.type) !== null && _a !== void 0 ? _a : ts.factory.createKeywordTypeNode(129 /* AnyKeyword */));
         }
         function transformJSDocParameter(node) {
             var index = node.parent.parameters.indexOf(node);
-            var isRest = node.type.kind === 310 /* JSDocVariadicType */ && index === node.parent.parameters.length - 1; // TODO: GH#18217
+            var isRest = node.type.kind === 313 /* JSDocVariadicType */ && index === node.parent.parameters.length - 1; // TODO: GH#18217
             var name = node.name || (isRest ? "rest" : "arg" + index);
             var dotdotdot = isRest ? ts.factory.createToken(25 /* DotDotDotToken */) : node.dotDotDotToken;
             return ts.factory.createParameterDeclaration(node.decorators, node.modifiers, dotdotdot, name, node.questionToken, ts.visitNode(node.type, transformJSDocType), node.initializer);
@@ -140826,8 +144105,8 @@
             var index = ts.factory.createParameterDeclaration(
             /*decorators*/ undefined, 
             /*modifiers*/ undefined, 
-            /*dotDotDotToken*/ undefined, node.typeArguments[0].kind === 144 /* NumberKeyword */ ? "n" : "s", 
-            /*questionToken*/ undefined, ts.factory.createTypeReferenceNode(node.typeArguments[0].kind === 144 /* NumberKeyword */ ? "number" : "string", []), 
+            /*dotDotDotToken*/ undefined, node.typeArguments[0].kind === 145 /* NumberKeyword */ ? "n" : "s", 
+            /*questionToken*/ undefined, ts.factory.createTypeReferenceNode(node.typeArguments[0].kind === 145 /* NumberKeyword */ ? "number" : "string", []), 
             /*initializer*/ undefined);
             var indexSignature = ts.factory.createTypeLiteralNode([ts.factory.createIndexSignature(/*decorators*/ undefined, /*modifiers*/ undefined, [index], node.typeArguments[1])]);
             ts.setEmitFlags(indexSignature, 1 /* SingleLine */);
@@ -140904,7 +144183,7 @@
                             if (member.declarations.length === 1 &&
                                 ts.isPropertyAccessExpression(firstDeclaration) &&
                                 ts.isBinaryExpression(firstDeclaration.parent) &&
-                                firstDeclaration.parent.operatorToken.kind === 62 /* EqualsToken */ &&
+                                firstDeclaration.parent.operatorToken.kind === 63 /* EqualsToken */ &&
                                 ts.isObjectLiteralExpression(firstDeclaration.parent.right)) {
                                 var prototypes = firstDeclaration.parent.right;
                                 var memberElement = createClassElement(prototypes.symbol, /** modifiers */ undefined);
@@ -140914,7 +144193,7 @@
                             }
                         }
                         else {
-                            var memberElement = createClassElement(member, [ts.factory.createToken(123 /* StaticKeyword */)]);
+                            var memberElement = createClassElement(member, [ts.factory.createToken(124 /* StaticKeyword */)]);
                             if (memberElement) {
                                 memberElements.push.apply(memberElements, memberElement);
                             }
@@ -140960,7 +144239,7 @@
                         return members;
                     }
                     // delete the entire statement if this expression is the sole expression to take care of the semicolon at the end
-                    var nodeToDelete = assignmentBinaryExpression.parent && assignmentBinaryExpression.parent.kind === 234 /* ExpressionStatement */
+                    var nodeToDelete = assignmentBinaryExpression.parent && assignmentBinaryExpression.parent.kind === 236 /* ExpressionStatement */
                         ? assignmentBinaryExpression.parent : assignmentBinaryExpression;
                     changes.delete(sourceFile, nodeToDelete);
                     if (!assignmentExpr) {
@@ -141011,7 +144290,7 @@
                             return createArrowFunctionExpressionMember(members, expression, name);
                     }
                     function createFunctionExpressionMember(members, functionExpression, name) {
-                        var fullModifiers = ts.concatenate(modifiers, getModifierKindFromSource(functionExpression, 129 /* AsyncKeyword */));
+                        var fullModifiers = ts.concatenate(modifiers, getModifierKindFromSource(functionExpression, 130 /* AsyncKeyword */));
                         var method = ts.factory.createMethodDeclaration(/*decorators*/ undefined, fullModifiers, /*asteriskToken*/ undefined, name, /*questionToken*/ undefined, 
                         /*typeParameters*/ undefined, functionExpression.parameters, /*type*/ undefined, functionExpression.body);
                         ts.copyLeadingComments(assignmentBinaryExpression, method, sourceFile);
@@ -141021,14 +144300,14 @@
                         var arrowFunctionBody = arrowFunction.body;
                         var bodyBlock;
                         // case 1: () => { return [1,2,3] }
-                        if (arrowFunctionBody.kind === 231 /* Block */) {
+                        if (arrowFunctionBody.kind === 233 /* Block */) {
                             bodyBlock = arrowFunctionBody;
                         }
                         // case 2: () => [1,2,3]
                         else {
                             bodyBlock = ts.factory.createBlock([ts.factory.createReturnStatement(arrowFunctionBody)]);
                         }
-                        var fullModifiers = ts.concatenate(modifiers, getModifierKindFromSource(arrowFunction, 129 /* AsyncKeyword */));
+                        var fullModifiers = ts.concatenate(modifiers, getModifierKindFromSource(arrowFunction, 130 /* AsyncKeyword */));
                         var method = ts.factory.createMethodDeclaration(/*decorators*/ undefined, fullModifiers, /*asteriskToken*/ undefined, name, /*questionToken*/ undefined, 
                         /*typeParameters*/ undefined, arrowFunction.parameters, /*type*/ undefined, bodyBlock);
                         ts.copyLeadingComments(assignmentBinaryExpression, method, sourceFile);
@@ -141045,7 +144324,7 @@
                 if (initializer.body) {
                     memberElements.unshift(ts.factory.createConstructorDeclaration(/*decorators*/ undefined, /*modifiers*/ undefined, initializer.parameters, initializer.body));
                 }
-                var modifiers = getModifierKindFromSource(node.parent.parent, 92 /* ExportKeyword */);
+                var modifiers = getModifierKindFromSource(node.parent.parent, 93 /* ExportKeyword */);
                 var cls = ts.factory.createClassDeclaration(/*decorators*/ undefined, modifiers, node.name, 
                 /*typeParameters*/ undefined, /*heritageClauses*/ undefined, memberElements);
                 // Don't call copyComments here because we'll already leave them in place
@@ -141056,7 +144335,7 @@
                 if (node.body) {
                     memberElements.unshift(ts.factory.createConstructorDeclaration(/*decorators*/ undefined, /*modifiers*/ undefined, node.parameters, node.body));
                 }
-                var modifiers = getModifierKindFromSource(node, 92 /* ExportKeyword */);
+                var modifiers = getModifierKindFromSource(node, 93 /* ExportKeyword */);
                 var cls = ts.factory.createClassDeclaration(/*decorators*/ undefined, modifiers, node.name, 
                 /*typeParameters*/ undefined, /*heritageClauses*/ undefined, memberElements);
                 // Don't call copyComments here because we'll already leave them in place
@@ -141144,7 +144423,7 @@
                 functionToConvert.decorators ? ts.skipTrivia(sourceFile.text, functionToConvert.decorators.end) :
                     functionToConvert.getStart(sourceFile);
             var options = functionToConvert.modifiers ? { prefix: " " } : { suffix: " " };
-            changes.insertModifierAt(sourceFile, pos, 129 /* AsyncKeyword */, options);
+            changes.insertModifierAt(sourceFile, pos, 130 /* AsyncKeyword */, options);
             var _loop_13 = function (returnStatement) {
                 ts.forEachChild(returnStatement, function visit(node) {
                     if (ts.isCallExpression(node)) {
@@ -141403,9 +144682,9 @@
         function maybeAnnotateAndReturn(expressionToReturn, typeAnnotation) {
             if (typeAnnotation && expressionToReturn) {
                 var name = ts.factory.createUniqueName("result", 16 /* Optimistic */);
-                return __spreadArray(__spreadArray([], createVariableOrAssignmentOrExpressionStatement(createSynthIdentifier(name), expressionToReturn, typeAnnotation)), [
+                return __spreadArray(__spreadArray([], createVariableOrAssignmentOrExpressionStatement(createSynthIdentifier(name), expressionToReturn, typeAnnotation), true), [
                     ts.factory.createReturnStatement(name)
-                ]);
+                ], false);
             }
             return [ts.factory.createReturnStatement(expressionToReturn)];
         }
@@ -141413,11 +144692,11 @@
         function getTransformationBody(func, prevArgName, argName, parent, transformer) {
             var _a, _b, _c, _d, _e;
             switch (func.kind) {
-                case 103 /* NullKeyword */:
+                case 104 /* NullKeyword */:
                     // do not produce a transformed statement for a null argument
                     break;
-                case 202 /* PropertyAccessExpression */:
-                case 78 /* Identifier */: // identifier includes undefined
+                case 204 /* PropertyAccessExpression */:
+                case 79 /* Identifier */: // identifier includes undefined
                     if (!argName) {
                         // undefined was argument passed to promise handler
                         break;
@@ -141438,8 +144717,8 @@
                         prevArgName.types.push(returnType);
                     }
                     return varDeclOrAssignment;
-                case 209 /* FunctionExpression */:
-                case 210 /* ArrowFunction */: {
+                case 211 /* FunctionExpression */:
+                case 212 /* ArrowFunction */: {
                     var funcBody = func.body;
                     var returnType_1 = (_c = getLastCallSignature(transformer.checker.getTypeAtLocation(func), transformer.checker)) === null || _c === void 0 ? void 0 : _c.getReturnType();
                     // Arrow functions with block bodies { } will enter this control flow
@@ -141658,10 +144937,10 @@
                 }
                 var importNode = ts.importFromModuleSpecifier(moduleSpecifier);
                 switch (importNode.kind) {
-                    case 261 /* ImportEqualsDeclaration */:
+                    case 263 /* ImportEqualsDeclaration */:
                         changes.replaceNode(importingFile, importNode, ts.makeImport(importNode.name, /*namedImports*/ undefined, moduleSpecifier, quotePreference));
                         break;
-                    case 204 /* CallExpression */:
+                    case 206 /* CallExpression */:
                         if (ts.isRequireCall(importNode, /*checkArgumentIsStringLiteralLike*/ false)) {
                             changes.replaceNode(importingFile, importNode, ts.factory.createPropertyAccessExpression(ts.getSynthesizedDeepClone(importNode), "default"));
                         }
@@ -141721,29 +145000,29 @@
             sourceFile.forEachChild(function recur(node) {
                 if (ts.isPropertyAccessExpression(node) && ts.isExportsOrModuleExportsOrAlias(sourceFile, node.expression) && ts.isIdentifier(node.name)) {
                     var parent = node.parent;
-                    cb(node, ts.isBinaryExpression(parent) && parent.left === node && parent.operatorToken.kind === 62 /* EqualsToken */);
+                    cb(node, ts.isBinaryExpression(parent) && parent.left === node && parent.operatorToken.kind === 63 /* EqualsToken */);
                 }
                 node.forEachChild(recur);
             });
         }
         function convertStatement(sourceFile, statement, checker, changes, identifiers, target, exports, useSitesToUnqualify, quotePreference) {
             switch (statement.kind) {
-                case 233 /* VariableStatement */:
+                case 235 /* VariableStatement */:
                     convertVariableStatement(sourceFile, statement, changes, checker, identifiers, target, quotePreference);
                     return false;
-                case 234 /* ExpressionStatement */: {
+                case 236 /* ExpressionStatement */: {
                     var expression = statement.expression;
                     switch (expression.kind) {
-                        case 204 /* CallExpression */: {
+                        case 206 /* CallExpression */: {
                             if (ts.isRequireCall(expression, /*checkArgumentIsStringLiteralLike*/ true)) {
                                 // For side-effecting require() call, just make a side-effecting import.
                                 changes.replaceNode(sourceFile, statement, ts.makeImport(/*name*/ undefined, /*namedImports*/ undefined, expression.arguments[0], quotePreference));
                             }
                             return false;
                         }
-                        case 217 /* BinaryExpression */: {
+                        case 219 /* BinaryExpression */: {
                             var operatorToken = expression.operatorToken;
-                            return operatorToken.kind === 62 /* EqualsToken */ && convertAssignment(sourceFile, checker, expression, changes, exports, useSitesToUnqualify);
+                            return operatorToken.kind === 63 /* EqualsToken */ && convertAssignment(sourceFile, checker, expression, changes, exports, useSitesToUnqualify);
                         }
                     }
                 }
@@ -141790,8 +145069,8 @@
         /** Converts `const name = require("moduleSpecifier").propertyName` */
         function convertPropertyAccessImport(name, propertyName, moduleSpecifier, identifiers, quotePreference) {
             switch (name.kind) {
-                case 197 /* ObjectBindingPattern */:
-                case 198 /* ArrayBindingPattern */: {
+                case 199 /* ObjectBindingPattern */:
+                case 200 /* ArrayBindingPattern */: {
                     // `const [a, b] = require("c").d` --> `import { d } from "c"; const [a, b] = d;`
                     var tmp = makeUniqueName(propertyName, identifiers);
                     return convertedImports([
@@ -141799,7 +145078,7 @@
                         makeConst(/*modifiers*/ undefined, name, ts.factory.createIdentifier(tmp)),
                     ]);
                 }
-                case 78 /* Identifier */:
+                case 79 /* Identifier */:
                     // `const a = require("b").c` --> `import { c as a } from "./b";
                     return convertedImports([makeSingleImport(name.text, propertyName, moduleSpecifier, quotePreference)]);
                 default:
@@ -141842,17 +145121,17 @@
         function tryChangeModuleExportsObject(object, useSitesToUnqualify) {
             var statements = ts.mapAllOrFail(object.properties, function (prop) {
                 switch (prop.kind) {
-                    case 168 /* GetAccessor */:
-                    case 169 /* SetAccessor */:
+                    case 170 /* GetAccessor */:
+                    case 171 /* SetAccessor */:
                     // TODO: Maybe we should handle this? See fourslash test `refactorConvertToEs6Module_export_object_shorthand.ts`.
                     // falls through
-                    case 290 /* ShorthandPropertyAssignment */:
-                    case 291 /* SpreadAssignment */:
+                    case 292 /* ShorthandPropertyAssignment */:
+                    case 293 /* SpreadAssignment */:
                         return undefined;
-                    case 289 /* PropertyAssignment */:
+                    case 291 /* PropertyAssignment */:
                         return !ts.isIdentifier(prop.name) ? undefined : convertExportsDotXEquals_replaceNode(prop.name.text, prop.initializer, useSitesToUnqualify);
-                    case 166 /* MethodDeclaration */:
-                        return !ts.isIdentifier(prop.name) ? undefined : functionExpressionToDeclaration(prop.name.text, [ts.factory.createToken(92 /* ExportKeyword */)], prop, useSitesToUnqualify);
+                    case 167 /* MethodDeclaration */:
+                        return !ts.isIdentifier(prop.name) ? undefined : functionExpressionToDeclaration(prop.name.text, [ts.factory.createToken(93 /* ExportKeyword */)], prop, useSitesToUnqualify);
                     default:
                         ts.Debug.assertNever(prop, "Convert to ES6 got invalid prop kind " + prop.kind);
                 }
@@ -141899,7 +145178,7 @@
             var name = left.name.text;
             if ((ts.isFunctionExpression(right) || ts.isArrowFunction(right) || ts.isClassExpression(right)) && (!right.name || right.name.text === name)) {
                 // `exports.f = function() {}` -> `export function f() {}` -- Replace `exports.f = ` with `export `, and insert the name after `function`.
-                changes.replaceRange(sourceFile, { pos: left.getStart(sourceFile), end: right.getStart(sourceFile) }, ts.factory.createToken(92 /* ExportKeyword */), { suffix: " " });
+                changes.replaceRange(sourceFile, { pos: left.getStart(sourceFile), end: right.getStart(sourceFile) }, ts.factory.createToken(93 /* ExportKeyword */), { suffix: " " });
                 if (!right.name)
                     changes.insertName(sourceFile, right, name);
                 var semi = ts.findChildOfKind(parent, 26 /* SemicolonToken */, sourceFile);
@@ -141908,14 +145187,14 @@
             }
             else {
                 // `exports.f = function g() {}` -> `export const f = function g() {}` -- just replace `exports.` with `export const `
-                changes.replaceNodeRangeWithNodes(sourceFile, left.expression, ts.findChildOfKind(left, 24 /* DotToken */, sourceFile), [ts.factory.createToken(92 /* ExportKeyword */), ts.factory.createToken(84 /* ConstKeyword */)], { joiner: " ", suffix: " " });
+                changes.replaceNodeRangeWithNodes(sourceFile, left.expression, ts.findChildOfKind(left, 24 /* DotToken */, sourceFile), [ts.factory.createToken(93 /* ExportKeyword */), ts.factory.createToken(85 /* ConstKeyword */)], { joiner: " ", suffix: " " });
             }
         }
         // TODO: GH#22492 this will cause an error if a change has been made inside the body of the node.
         function convertExportsDotXEquals_replaceNode(name, exported, useSitesToUnqualify) {
-            var modifiers = [ts.factory.createToken(92 /* ExportKeyword */)];
+            var modifiers = [ts.factory.createToken(93 /* ExportKeyword */)];
             switch (exported.kind) {
-                case 209 /* FunctionExpression */: {
+                case 211 /* FunctionExpression */: {
                     var expressionName = exported.name;
                     if (expressionName && expressionName.text !== name) {
                         // `exports.f = function g() {}` -> `export const f = function g() {}`
@@ -141923,10 +145202,10 @@
                     }
                 }
                 // falls through
-                case 210 /* ArrowFunction */:
+                case 212 /* ArrowFunction */:
                     // `exports.f = function() {}` --> `export function f() {}`
                     return functionExpressionToDeclaration(name, modifiers, exported, useSitesToUnqualify);
-                case 222 /* ClassExpression */:
+                case 224 /* ClassExpression */:
                     // `exports.C = class {}` --> `export class C {}`
                     return classExpressionToDeclaration(name, modifiers, exported, useSitesToUnqualify);
                 default:
@@ -141946,7 +145225,7 @@
                 : ts.getSynthesizedDeepCloneWithReplacements(nodeOrNodes, /*includeTrivia*/ true, replaceNode);
             function replaceNode(original) {
                 // We are replacing `mod.SomeExport` wih `SomeExport`, so we only need to look at PropertyAccessExpressions
-                if (original.kind === 202 /* PropertyAccessExpression */) {
+                if (original.kind === 204 /* PropertyAccessExpression */) {
                     var replacement = useSitesToUnqualify.get(original);
                     // Remove entry from `useSitesToUnqualify` so the refactor knows it's taken care of by the parent statement we're replacing
                     useSitesToUnqualify.delete(original);
@@ -141961,7 +145240,7 @@
          */
         function convertSingleImport(name, moduleSpecifier, checker, identifiers, target, quotePreference) {
             switch (name.kind) {
-                case 197 /* ObjectBindingPattern */: {
+                case 199 /* ObjectBindingPattern */: {
                     var importSpecifiers = ts.mapAllOrFail(name.elements, function (e) {
                         return e.dotDotDotToken || e.initializer || e.propertyName && !ts.isIdentifier(e.propertyName) || !ts.isIdentifier(e.name)
                             ? undefined
@@ -141974,7 +145253,7 @@
                     }
                 }
                 // falls through -- object destructuring has an interesting pattern and must be a variable declaration
-                case 198 /* ArrayBindingPattern */: {
+                case 200 /* ArrayBindingPattern */: {
                     /*
                     import x from "x";
                     const [a, b, c] = x;
@@ -141985,7 +145264,7 @@
                         makeConst(/*modifiers*/ undefined, ts.getSynthesizedDeepClone(name), ts.factory.createIdentifier(tmp)),
                     ]);
                 }
-                case 78 /* Identifier */:
+                case 79 /* Identifier */:
                     return convertSingleIdentifierImport(name, moduleSpecifier, checker, identifiers, quotePreference);
                 default:
                     return ts.Debug.assertNever(name, "Convert to ES6 module got invalid name kind " + name.kind);
@@ -142067,11 +145346,11 @@
         function isFreeIdentifier(node) {
             var parent = node.parent;
             switch (parent.kind) {
-                case 202 /* PropertyAccessExpression */:
+                case 204 /* PropertyAccessExpression */:
                     return parent.name !== node;
-                case 199 /* BindingElement */:
+                case 201 /* BindingElement */:
                     return parent.propertyName !== node;
-                case 266 /* ImportSpecifier */:
+                case 268 /* ImportSpecifier */:
                     return parent.propertyName !== node;
                 default:
                     return true;
@@ -142185,7 +145464,7 @@
             var exportDeclaration = exportClause.parent;
             var typeExportSpecifiers = getTypeExportSpecifiers(exportSpecifier, context);
             if (typeExportSpecifiers.length === exportClause.elements.length) {
-                changes.insertModifierBefore(context.sourceFile, 149 /* TypeKeyword */, exportClause);
+                changes.insertModifierBefore(context.sourceFile, 150 /* TypeKeyword */, exportClause);
             }
             else {
                 var valueExportDeclaration = ts.factory.updateExportDeclaration(exportDeclaration, exportDeclaration.decorators, exportDeclaration.modifiers, 
@@ -142371,7 +145650,7 @@
             function createMissingIndexSignatureDeclaration(type, kind) {
                 var indexInfoOfKind = checker.getIndexInfoOfType(type, kind);
                 if (indexInfoOfKind) {
-                    insertInterfaceMemberNode(sourceFile, classDeclaration, checker.indexInfoToIndexSignatureDeclaration(indexInfoOfKind, kind, classDeclaration, /*flags*/ undefined, codefix.getNoopSymbolTrackerWithResolver(context)));
+                    insertInterfaceMemberNode(sourceFile, classDeclaration, checker.indexInfoToIndexSignatureDeclaration(indexInfoOfKind, classDeclaration, /*flags*/ undefined, codefix.getNoopSymbolTrackerWithResolver(context)));
                 }
             }
             // Either adds the node at the top of the class, or if there's a constructor right after that
@@ -142409,6 +145688,7 @@
             ts.Diagnostics.Cannot_find_namespace_0.code,
             ts.Diagnostics._0_refers_to_a_UMD_global_but_the_current_file_is_a_module_Consider_adding_an_import_instead.code,
             ts.Diagnostics._0_only_refers_to_a_type_but_is_being_used_as_a_value_here.code,
+            ts.Diagnostics.No_value_exists_in_scope_for_the_shorthand_property_0_Either_declare_one_or_provide_an_initializer.code
         ];
         codefix.registerCodeFix({
             errorCodes: errorCodes,
@@ -142453,11 +145733,13 @@
                 var symbolName = ts.getNameForExportedSymbol(exportedSymbol, ts.getEmitScriptTarget(compilerOptions));
                 var checker = program.getTypeChecker();
                 var symbol = checker.getMergedSymbol(ts.skipAlias(exportedSymbol, checker));
-                var exportInfos = getAllReExportingModules(sourceFile, symbol, moduleSymbol, symbolName, host, program, useAutoImportProvider);
+                var exportInfos = getAllReExportingModules(sourceFile, symbol, moduleSymbol, symbolName, host, program, preferences, useAutoImportProvider);
                 var preferTypeOnlyImport = !!usageIsTypeOnly && compilerOptions.importsNotUsedAsValues === 2 /* Error */;
                 var useRequire = shouldUseRequire(sourceFile, program);
                 var fix = getImportFixForSymbol(sourceFile, exportInfos, moduleSymbol, symbolName, program, /*position*/ undefined, preferTypeOnlyImport, useRequire, host, preferences);
-                addImport({ fixes: [fix], symbolName: symbolName });
+                if (fix) {
+                    addImport({ fixes: [fix], symbolName: symbolName });
+                }
             }
             function addImport(info) {
                 var fixes = info.fixes, symbolName = info.symbolName;
@@ -142552,16 +145834,16 @@
             var compilerOptions = program.getCompilerOptions();
             var exportInfos = ts.pathIsBareSpecifier(ts.stripQuotes(moduleSymbol.name))
                 ? [getSymbolExportInfoForSymbol(exportedSymbol, moduleSymbol, program, host)]
-                : getAllReExportingModules(sourceFile, exportedSymbol, moduleSymbol, symbolName, host, program, /*useAutoImportProvider*/ true);
+                : getAllReExportingModules(sourceFile, exportedSymbol, moduleSymbol, symbolName, host, program, preferences, /*useAutoImportProvider*/ true);
             var useRequire = shouldUseRequire(sourceFile, program);
             var preferTypeOnlyImport = compilerOptions.importsNotUsedAsValues === 2 /* Error */ && !ts.isSourceFileJS(sourceFile) && ts.isValidTypeOnlyAliasUseSite(ts.getTokenAtPosition(sourceFile, position));
-            var fix = getImportFixForSymbol(sourceFile, exportInfos, moduleSymbol, symbolName, program, position, preferTypeOnlyImport, useRequire, host, preferences);
+            var fix = ts.Debug.checkDefined(getImportFixForSymbol(sourceFile, exportInfos, moduleSymbol, symbolName, program, position, preferTypeOnlyImport, useRequire, host, preferences));
             return { moduleSpecifier: fix.moduleSpecifier, codeAction: codeFixActionToCodeAction(codeActionForFix({ host: host, formatContext: formatContext, preferences: preferences }, sourceFile, symbolName, fix, ts.getQuotePreference(sourceFile, preferences))) };
         }
         codefix.getImportCompletionAction = getImportCompletionAction;
         function getImportFixForSymbol(sourceFile, exportInfos, moduleSymbol, symbolName, program, position, preferTypeOnlyImport, useRequire, host, preferences) {
-            ts.Debug.assert(exportInfos.some(function (info) { return info.moduleSymbol === moduleSymbol; }), "Some exportInfo should match the specified moduleSymbol");
-            return getBestFix(getImportFixes(exportInfos, symbolName, position, preferTypeOnlyImport, useRequire, program, sourceFile, host, preferences), sourceFile, host);
+            ts.Debug.assert(exportInfos.some(function (info) { return info.moduleSymbol === moduleSymbol || info.symbol.parent === moduleSymbol; }), "Some exportInfo should match the specified moduleSymbol");
+            return getBestFix(getImportFixes(exportInfos, symbolName, position, preferTypeOnlyImport, useRequire, program, sourceFile, host, preferences), sourceFile, program, host, preferences);
         }
         function codeFixActionToCodeAction(_a) {
             var description = _a.description, changes = _a.changes, commands = _a.commands;
@@ -142577,101 +145859,54 @@
             var autoImportProvider = (_b = (_a = host.getPackageJsonAutoImportProvider) === null || _a === void 0 ? void 0 : _a.call(host)) === null || _b === void 0 ? void 0 : _b.getTypeChecker();
             return ts.Debug.checkDefined(autoImportProvider && getInfoWithChecker(autoImportProvider, /*isFromPackageJson*/ true), "Could not find symbol in specified module for code actions");
             function getInfoWithChecker(checker, isFromPackageJson) {
-                var defaultInfo = getDefaultLikeExportInfo(moduleSymbol, checker, compilerOptions);
+                var defaultInfo = ts.getDefaultLikeExportInfo(moduleSymbol, checker, compilerOptions);
                 if (defaultInfo && ts.skipAlias(defaultInfo.symbol, checker) === symbol) {
-                    return { symbol: defaultInfo.symbol, moduleSymbol: moduleSymbol, exportKind: defaultInfo.exportKind, exportedSymbolIsTypeOnly: isTypeOnlySymbol(symbol, checker), isFromPackageJson: isFromPackageJson };
+                    return { symbol: defaultInfo.symbol, moduleSymbol: moduleSymbol, moduleFileName: undefined, exportKind: defaultInfo.exportKind, targetFlags: ts.skipAlias(symbol, checker).flags, isFromPackageJson: isFromPackageJson };
                 }
                 var named = checker.tryGetMemberInModuleExportsAndProperties(symbol.name, moduleSymbol);
                 if (named && ts.skipAlias(named, checker) === symbol) {
-                    return { symbol: named, moduleSymbol: moduleSymbol, exportKind: 0 /* Named */, exportedSymbolIsTypeOnly: isTypeOnlySymbol(symbol, checker), isFromPackageJson: isFromPackageJson };
+                    return { symbol: named, moduleSymbol: moduleSymbol, moduleFileName: undefined, exportKind: 0 /* Named */, targetFlags: ts.skipAlias(symbol, checker).flags, isFromPackageJson: isFromPackageJson };
                 }
             }
         }
-        function getAllReExportingModules(importingFile, exportedSymbol, exportingModuleSymbol, symbolName, host, program, useAutoImportProvider) {
+        function getAllReExportingModules(importingFile, exportedSymbol, exportingModuleSymbol, symbolName, host, program, preferences, useAutoImportProvider) {
             var result = [];
             var compilerOptions = program.getCompilerOptions();
             var getModuleSpecifierResolutionHost = ts.memoizeOne(function (isFromPackageJson) {
                 return ts.createModuleSpecifierResolutionHost(isFromPackageJson ? host.getPackageJsonAutoImportProvider() : program, host);
             });
-            forEachExternalModuleToImportFrom(program, host, useAutoImportProvider, function (moduleSymbol, moduleFile, program, isFromPackageJson) {
+            ts.forEachExternalModuleToImportFrom(program, host, useAutoImportProvider, function (moduleSymbol, moduleFile, program, isFromPackageJson) {
                 var checker = program.getTypeChecker();
                 // Don't import from a re-export when looking "up" like to `./index` or `../index`.
                 if (moduleFile && moduleSymbol !== exportingModuleSymbol && ts.startsWith(importingFile.fileName, ts.getDirectoryPath(moduleFile.fileName))) {
                     return;
                 }
-                var defaultInfo = getDefaultLikeExportInfo(moduleSymbol, checker, compilerOptions);
+                var defaultInfo = ts.getDefaultLikeExportInfo(moduleSymbol, checker, compilerOptions);
                 if (defaultInfo && (defaultInfo.name === symbolName || moduleSymbolToValidIdentifier(moduleSymbol, compilerOptions.target) === symbolName) && ts.skipAlias(defaultInfo.symbol, checker) === exportedSymbol && isImportable(program, moduleFile, isFromPackageJson)) {
-                    result.push({ symbol: defaultInfo.symbol, moduleSymbol: moduleSymbol, exportKind: defaultInfo.exportKind, exportedSymbolIsTypeOnly: isTypeOnlySymbol(defaultInfo.symbol, checker), isFromPackageJson: isFromPackageJson });
+                    result.push({ symbol: defaultInfo.symbol, moduleSymbol: moduleSymbol, moduleFileName: moduleFile === null || moduleFile === void 0 ? void 0 : moduleFile.fileName, exportKind: defaultInfo.exportKind, targetFlags: ts.skipAlias(defaultInfo.symbol, checker).flags, isFromPackageJson: isFromPackageJson });
                 }
                 for (var _i = 0, _a = checker.getExportsAndPropertiesOfModule(moduleSymbol); _i < _a.length; _i++) {
                     var exported = _a[_i];
                     if (exported.name === symbolName && ts.skipAlias(exported, checker) === exportedSymbol && isImportable(program, moduleFile, isFromPackageJson)) {
-                        result.push({ symbol: exported, moduleSymbol: moduleSymbol, exportKind: 0 /* Named */, exportedSymbolIsTypeOnly: isTypeOnlySymbol(exported, checker), isFromPackageJson: isFromPackageJson });
+                        result.push({ symbol: exported, moduleSymbol: moduleSymbol, moduleFileName: moduleFile === null || moduleFile === void 0 ? void 0 : moduleFile.fileName, exportKind: 0 /* Named */, targetFlags: ts.skipAlias(exported, checker).flags, isFromPackageJson: isFromPackageJson });
                     }
                 }
             });
             return result;
             function isImportable(program, moduleFile, isFromPackageJson) {
                 var _a;
-                return !moduleFile || ts.isImportableFile(program, importingFile, moduleFile, /*packageJsonFilter*/ undefined, getModuleSpecifierResolutionHost(isFromPackageJson), (_a = host.getModuleSpecifierCache) === null || _a === void 0 ? void 0 : _a.call(host));
+                return !moduleFile || ts.isImportableFile(program, importingFile, moduleFile, preferences, /*packageJsonFilter*/ undefined, getModuleSpecifierResolutionHost(isFromPackageJson), (_a = host.getModuleSpecifierCache) === null || _a === void 0 ? void 0 : _a.call(host));
             }
         }
-        function getModuleSpecifierForBestExportInfo(exportInfo, importingFile, program, host, preferences) {
-            return getBestFix(getNewImportFixes(program, importingFile, /*position*/ undefined, /*preferTypeOnlyImport*/ false, /*useRequire*/ false, exportInfo, host, preferences), importingFile, host);
+        function getModuleSpecifierForBestExportInfo(exportInfo, importingFile, program, host, preferences, fromCacheOnly) {
+            var _a = getNewImportFixes(program, importingFile, 
+            /*position*/ undefined, 
+            /*preferTypeOnlyImport*/ false, 
+            /*useRequire*/ false, exportInfo, host, preferences, fromCacheOnly), fixes = _a.fixes, computedWithoutCacheCount = _a.computedWithoutCacheCount;
+            var result = getBestFix(fixes, importingFile, program, host, preferences);
+            return result && __assign(__assign({}, result), { computedWithoutCacheCount: computedWithoutCacheCount });
         }
         codefix.getModuleSpecifierForBestExportInfo = getModuleSpecifierForBestExportInfo;
-        function getSymbolToExportInfoMap(importingFile, host, program) {
-            var _a, _b, _c, _d, _e, _f, _g, _h;
-            var start = ts.timestamp();
-            // Pulling the AutoImportProvider project will trigger its updateGraph if pending,
-            // which will invalidate the export map cache if things change, so pull it before
-            // checking the cache.
-            (_a = host.getPackageJsonAutoImportProvider) === null || _a === void 0 ? void 0 : _a.call(host);
-            var cache = (_b = host.getExportMapCache) === null || _b === void 0 ? void 0 : _b.call(host);
-            if (cache) {
-                var cached = cache.get(importingFile.path, program.getTypeChecker(), (_c = host.getProjectVersion) === null || _c === void 0 ? void 0 : _c.call(host));
-                if (cached) {
-                    (_d = host.log) === null || _d === void 0 ? void 0 : _d.call(host, "getSymbolToExportInfoMap: cache hit");
-                    return cached;
-                }
-                else {
-                    (_e = host.log) === null || _e === void 0 ? void 0 : _e.call(host, "getSymbolToExportInfoMap: cache miss or empty; calculating new results");
-                }
-            }
-            var result = ts.createMultiMap();
-            var compilerOptions = program.getCompilerOptions();
-            var target = ts.getEmitScriptTarget(compilerOptions);
-            forEachExternalModuleToImportFrom(program, host, /*useAutoImportProvider*/ true, function (moduleSymbol, _moduleFile, program, isFromPackageJson) {
-                var checker = program.getTypeChecker();
-                var defaultInfo = getDefaultLikeExportInfo(moduleSymbol, checker, compilerOptions);
-                if (defaultInfo) {
-                    var name = ts.getNameForExportedSymbol(ts.getLocalSymbolForExportDefault(defaultInfo.symbol) || defaultInfo.symbol, target);
-                    result.add(key(name, defaultInfo.symbol, moduleSymbol, checker), { symbol: defaultInfo.symbol, moduleSymbol: moduleSymbol, exportKind: defaultInfo.exportKind, exportedSymbolIsTypeOnly: isTypeOnlySymbol(defaultInfo.symbol, checker), isFromPackageJson: isFromPackageJson });
-                }
-                var seenExports = new ts.Map();
-                for (var _i = 0, _a = checker.getExportsAndPropertiesOfModule(moduleSymbol); _i < _a.length; _i++) {
-                    var exported = _a[_i];
-                    if (exported !== (defaultInfo === null || defaultInfo === void 0 ? void 0 : defaultInfo.symbol) && ts.addToSeen(seenExports, exported)) {
-                        result.add(key(ts.getNameForExportedSymbol(exported, target), exported, moduleSymbol, checker), { symbol: exported, moduleSymbol: moduleSymbol, exportKind: 0 /* Named */, exportedSymbolIsTypeOnly: isTypeOnlySymbol(exported, checker), isFromPackageJson: isFromPackageJson });
-                    }
-                }
-            });
-            if (cache) {
-                (_f = host.log) === null || _f === void 0 ? void 0 : _f.call(host, "getSymbolToExportInfoMap: caching results");
-                cache.set(result, (_g = host.getProjectVersion) === null || _g === void 0 ? void 0 : _g.call(host));
-            }
-            (_h = host.log) === null || _h === void 0 ? void 0 : _h.call(host, "getSymbolToExportInfoMap: done in " + (ts.timestamp() - start) + " ms");
-            return result;
-            function key(name, alias, moduleSymbol, checker) {
-                var moduleName = ts.stripQuotes(moduleSymbol.name);
-                var moduleKey = ts.isExternalModuleNameRelative(moduleName) ? "/" : moduleName;
-                return name + "|" + ts.getSymbolId(ts.skipAlias(alias, checker)) + "|" + moduleKey;
-            }
-        }
-        codefix.getSymbolToExportInfoMap = getSymbolToExportInfoMap;
-        function isTypeOnlySymbol(s, checker) {
-            return !(ts.skipAlias(s, checker).flags & 111551 /* Value */);
-        }
         function isTypeOnlyPosition(sourceFile, position) {
             return ts.isValidTypeOnlyAliasUseSite(ts.getTokenAtPosition(sourceFile, position));
         }
@@ -142684,7 +145919,7 @@
             var addToExisting = tryAddToExistingImport(existingImports, position !== undefined && isTypeOnlyPosition(sourceFile, position));
             // Don't bother providing an action to add a new import if we can add to an existing one.
             var addImport = addToExisting ? [addToExisting] : getFixesForAddImport(exportInfos, existingImports, program, sourceFile, position, preferTypeOnlyImport, useRequire, host, preferences);
-            return __spreadArray(__spreadArray([], (useNamespace ? [useNamespace] : ts.emptyArray)), addImport);
+            return __spreadArray(__spreadArray([], (useNamespace ? [useNamespace] : ts.emptyArray), true), addImport, true);
         }
         function tryUseExistingNamespaceImport(existingImports, symbolName, position, checker) {
             // It is possible that multiple import statements with the same specifier exist in the file.
@@ -142714,11 +145949,11 @@
         function getTargetModuleFromNamespaceLikeImport(declaration, checker) {
             var _a;
             switch (declaration.kind) {
-                case 250 /* VariableDeclaration */:
+                case 252 /* VariableDeclaration */:
                     return checker.resolveExternalModuleName(declaration.initializer.arguments[0]);
-                case 261 /* ImportEqualsDeclaration */:
+                case 263 /* ImportEqualsDeclaration */:
                     return checker.getAliasedSymbol(declaration.symbol);
-                case 262 /* ImportDeclaration */:
+                case 264 /* ImportDeclaration */:
                     var namespaceImport = ts.tryCast((_a = declaration.importClause) === null || _a === void 0 ? void 0 : _a.namedBindings, ts.isNamespaceImport);
                     return namespaceImport && checker.getAliasedSymbol(namespaceImport.symbol);
                 default:
@@ -142728,11 +145963,11 @@
         function getNamespaceLikeImportText(declaration) {
             var _a, _b, _c;
             switch (declaration.kind) {
-                case 250 /* VariableDeclaration */:
+                case 252 /* VariableDeclaration */:
                     return (_a = ts.tryCast(declaration.name, ts.isIdentifier)) === null || _a === void 0 ? void 0 : _a.text;
-                case 261 /* ImportEqualsDeclaration */:
+                case 263 /* ImportEqualsDeclaration */:
                     return declaration.name.text;
-                case 262 /* ImportDeclaration */:
+                case 264 /* ImportDeclaration */:
                     return (_c = ts.tryCast((_b = declaration.importClause) === null || _b === void 0 ? void 0 : _b.namedBindings, ts.isNamespaceImport)) === null || _c === void 0 ? void 0 : _c.name.text;
                 default:
                     return ts.Debug.assertNever(declaration);
@@ -142741,10 +145976,10 @@
         function tryAddToExistingImport(existingImports, canUseTypeOnlyImport) {
             return ts.firstDefined(existingImports, function (_a) {
                 var declaration = _a.declaration, importKind = _a.importKind;
-                if (declaration.kind === 261 /* ImportEqualsDeclaration */)
+                if (declaration.kind === 263 /* ImportEqualsDeclaration */)
                     return undefined;
-                if (declaration.kind === 250 /* VariableDeclaration */) {
-                    return (importKind === 0 /* Named */ || importKind === 1 /* Default */) && declaration.name.kind === 197 /* ObjectBindingPattern */
+                if (declaration.kind === 252 /* VariableDeclaration */) {
+                    return (importKind === 0 /* Named */ || importKind === 1 /* Default */) && declaration.name.kind === 199 /* ObjectBindingPattern */
                         ? { kind: 2 /* AddToExisting */, importClauseOrBindingPattern: declaration.name, importKind: importKind, moduleSpecifier: declaration.initializer.arguments[0].text, canUseTypeOnlyImport: false }
                         : undefined;
                 }
@@ -142756,15 +145991,15 @@
                 // be added to an existing type-only import is adding a named import to existing named bindings.
                 if (importClause.isTypeOnly && !(importKind === 0 /* Named */ && namedBindings))
                     return undefined;
-                return importKind === 1 /* Default */ && !name || importKind === 0 /* Named */ && (!namedBindings || namedBindings.kind === 265 /* NamedImports */)
+                return importKind === 1 /* Default */ && !name || importKind === 0 /* Named */ && (!namedBindings || namedBindings.kind === 267 /* NamedImports */)
                     ? { kind: 2 /* AddToExisting */, importClauseOrBindingPattern: importClause, importKind: importKind, moduleSpecifier: declaration.moduleSpecifier.text, canUseTypeOnlyImport: canUseTypeOnlyImport }
                     : undefined;
             });
         }
         function getExistingImportDeclarations(_a, checker, importingFile, compilerOptions) {
-            var moduleSymbol = _a.moduleSymbol, exportKind = _a.exportKind, exportedSymbolIsTypeOnly = _a.exportedSymbolIsTypeOnly;
+            var moduleSymbol = _a.moduleSymbol, exportKind = _a.exportKind, targetFlags = _a.targetFlags;
             // Can't use an es6 import for a type in JS.
-            if (exportedSymbolIsTypeOnly && ts.isSourceFileJS(importingFile))
+            if (!(targetFlags & 111551 /* Value */) && ts.isSourceFileJS(importingFile))
                 return ts.emptyArray;
             var importKind = getImportKind(importingFile, exportKind, compilerOptions);
             return ts.mapDefined(importingFile.imports, function (moduleSpecifier) {
@@ -142772,7 +146007,7 @@
                 if (ts.isRequireVariableDeclaration(i.parent)) {
                     return checker.resolveExternalModuleName(moduleSpecifier) === moduleSymbol ? { declaration: i.parent, importKind: importKind } : undefined;
                 }
-                if (i.kind === 262 /* ImportDeclaration */ || i.kind === 261 /* ImportEqualsDeclaration */) {
+                if (i.kind === 264 /* ImportDeclaration */ || i.kind === 263 /* ImportEqualsDeclaration */) {
                     return checker.getSymbolAtLocation(moduleSpecifier) === moduleSymbol ? { declaration: i, importKind: importKind } : undefined;
                 }
             });
@@ -142805,23 +146040,37 @@
             // 5. Literally nothing to go on
             return true;
         }
-        function getNewImportFixes(program, sourceFile, position, preferTypeOnlyImport, useRequire, moduleSymbols, host, preferences) {
+        function getNewImportFixes(program, sourceFile, position, preferTypeOnlyImport, useRequire, moduleSymbols, host, preferences, fromCacheOnly) {
             var isJs = ts.isSourceFileJS(sourceFile);
             var compilerOptions = program.getCompilerOptions();
             var moduleSpecifierResolutionHost = ts.createModuleSpecifierResolutionHost(program, host);
-            return ts.flatMap(moduleSymbols, function (exportInfo) {
-                return ts.moduleSpecifiers.getModuleSpecifiers(exportInfo.moduleSymbol, program.getTypeChecker(), compilerOptions, sourceFile, moduleSpecifierResolutionHost, preferences)
-                    .map(function (moduleSpecifier) {
+            var checker = program.getTypeChecker();
+            var getModuleSpecifiers = fromCacheOnly
+                ? function (moduleSymbol) { return ({ moduleSpecifiers: ts.moduleSpecifiers.tryGetModuleSpecifiersFromCache(moduleSymbol, sourceFile, moduleSpecifierResolutionHost, preferences), computedWithoutCache: false }); }
+                : function (moduleSymbol) { return ts.moduleSpecifiers.getModuleSpecifiersWithCacheInfo(moduleSymbol, checker, compilerOptions, sourceFile, moduleSpecifierResolutionHost, preferences); };
+            var computedWithoutCacheCount = 0;
+            var fixes = ts.flatMap(moduleSymbols, function (exportInfo) {
+                var _a = getModuleSpecifiers(exportInfo.moduleSymbol), computedWithoutCache = _a.computedWithoutCache, moduleSpecifiers = _a.moduleSpecifiers;
+                computedWithoutCacheCount += computedWithoutCache ? 1 : 0;
+                return moduleSpecifiers === null || moduleSpecifiers === void 0 ? void 0 : moduleSpecifiers.map(function (moduleSpecifier) {
                     // `position` should only be undefined at a missing jsx namespace, in which case we shouldn't be looking for pure types.
-                    return exportInfo.exportedSymbolIsTypeOnly && isJs && position !== undefined
+                    return !(exportInfo.targetFlags & 111551 /* Value */) && isJs && position !== undefined
                         ? { kind: 1 /* ImportType */, moduleSpecifier: moduleSpecifier, position: position, exportInfo: exportInfo }
-                        : { kind: 3 /* AddNew */, moduleSpecifier: moduleSpecifier, importKind: getImportKind(sourceFile, exportInfo.exportKind, compilerOptions), useRequire: useRequire, typeOnly: preferTypeOnlyImport, exportInfo: exportInfo };
+                        : {
+                            kind: 3 /* AddNew */,
+                            moduleSpecifier: moduleSpecifier,
+                            importKind: getImportKind(sourceFile, exportInfo.exportKind, compilerOptions),
+                            useRequire: useRequire,
+                            typeOnly: preferTypeOnlyImport,
+                            exportInfo: exportInfo,
+                        };
                 });
             });
+            return { computedWithoutCacheCount: computedWithoutCacheCount, fixes: fixes };
         }
         function getFixesForAddImport(exportInfos, existingImports, program, sourceFile, position, preferTypeOnlyImport, useRequire, host, preferences) {
             var existingDeclaration = ts.firstDefined(existingImports, function (info) { return newImportInfoFromExistingSpecifier(info, preferTypeOnlyImport, useRequire); });
-            return existingDeclaration ? [existingDeclaration] : getNewImportFixes(program, sourceFile, position, preferTypeOnlyImport, useRequire, exportInfos, host, preferences);
+            return existingDeclaration ? [existingDeclaration] : getNewImportFixes(program, sourceFile, position, preferTypeOnlyImport, useRequire, exportInfos, host, preferences).fixes;
         }
         function newImportInfoFromExistingSpecifier(_a, preferTypeOnlyImport, useRequire) {
             var declaration = _a.declaration, importKind = _a.importKind;
@@ -142835,29 +146084,39 @@
             var info = errorCode === ts.Diagnostics._0_refers_to_a_UMD_global_but_the_current_file_is_a_module_Consider_adding_an_import_instead.code
                 ? getFixesInfoForUMDImport(context, symbolToken)
                 : ts.isIdentifier(symbolToken) ? getFixesInfoForNonUMDImport(context, symbolToken, useAutoImportProvider) : undefined;
-            return info && __assign(__assign({}, info), { fixes: sortFixes(info.fixes, context.sourceFile, context.host) });
+            return info && __assign(__assign({}, info), { fixes: sortFixes(info.fixes, context.sourceFile, context.program, context.host, context.preferences) });
         }
-        function sortFixes(fixes, sourceFile, host) {
-            var allowsImportingSpecifier = ts.createPackageJsonImportFilter(sourceFile, host).allowsImportingSpecifier;
-            return ts.sort(fixes, function (a, b) { return ts.compareValues(a.kind, b.kind) || compareModuleSpecifiers(a, b, allowsImportingSpecifier); });
+        function sortFixes(fixes, sourceFile, program, host, preferences) {
+            var allowsImportingSpecifier = ts.createPackageJsonImportFilter(sourceFile, preferences, host).allowsImportingSpecifier;
+            return ts.sort(fixes, function (a, b) { return ts.compareValues(a.kind, b.kind) || compareModuleSpecifiers(a, b, sourceFile, program, allowsImportingSpecifier); });
         }
-        function getBestFix(fixes, sourceFile, host) {
+        function getBestFix(fixes, sourceFile, program, host, preferences) {
+            if (!ts.some(fixes))
+                return;
             // These will always be placed first if available, and are better than other kinds
             if (fixes[0].kind === 0 /* UseNamespace */ || fixes[0].kind === 2 /* AddToExisting */) {
                 return fixes[0];
             }
-            var allowsImportingSpecifier = ts.createPackageJsonImportFilter(sourceFile, host).allowsImportingSpecifier;
+            var allowsImportingSpecifier = ts.createPackageJsonImportFilter(sourceFile, preferences, host).allowsImportingSpecifier;
             return fixes.reduce(function (best, fix) {
-                return compareModuleSpecifiers(fix, best, allowsImportingSpecifier) === -1 /* LessThan */ ? fix : best;
+                return compareModuleSpecifiers(fix, best, sourceFile, program, allowsImportingSpecifier) === -1 /* LessThan */ ? fix : best;
             });
         }
-        function compareModuleSpecifiers(a, b, allowsImportingSpecifier) {
+        function compareModuleSpecifiers(a, b, importingFile, program, allowsImportingSpecifier) {
             if (a.kind !== 0 /* UseNamespace */ && b.kind !== 0 /* UseNamespace */) {
                 return ts.compareBooleans(allowsImportingSpecifier(a.moduleSpecifier), allowsImportingSpecifier(b.moduleSpecifier))
+                    || compareNodeCoreModuleSpecifiers(a.moduleSpecifier, b.moduleSpecifier, importingFile, program)
                     || ts.compareNumberOfDirectorySeparators(a.moduleSpecifier, b.moduleSpecifier);
             }
             return 0 /* EqualTo */;
         }
+        function compareNodeCoreModuleSpecifiers(a, b, importingFile, program) {
+            if (ts.startsWith(a, "node:") && !ts.startsWith(b, "node:"))
+                return ts.shouldUseUriStyleNodeCoreModules(importingFile, program) ? -1 /* LessThan */ : 1 /* GreaterThan */;
+            if (ts.startsWith(b, "node:") && !ts.startsWith(a, "node:"))
+                return ts.shouldUseUriStyleNodeCoreModules(importingFile, program) ? 1 /* GreaterThan */ : -1 /* LessThan */;
+            return 0 /* EqualTo */;
+        }
         function getFixesInfoForUMDImport(_a, token) {
             var sourceFile = _a.sourceFile, program = _a.program, host = _a.host, preferences = _a.preferences;
             var checker = program.getTypeChecker();
@@ -142866,7 +146125,7 @@
                 return undefined;
             var symbol = checker.getAliasedSymbol(umdSymbol);
             var symbolName = umdSymbol.name;
-            var exportInfos = [{ symbol: umdSymbol, moduleSymbol: symbol, exportKind: 3 /* UMD */, exportedSymbolIsTypeOnly: false, isFromPackageJson: false }];
+            var exportInfos = [{ symbol: umdSymbol, moduleSymbol: symbol, moduleFileName: undefined, exportKind: 3 /* UMD */, targetFlags: symbol.flags, isFromPackageJson: false }];
             var useRequire = shouldUseRequire(sourceFile, program);
             var fixes = getImportFixes(exportInfos, symbolName, ts.isIdentifier(token) ? token.getStart(sourceFile) : undefined, /*preferTypeOnlyImport*/ false, useRequire, program, sourceFile, host, preferences);
             return { fixes: fixes, symbolName: symbolName };
@@ -142882,17 +146141,21 @@
                 ? ts.tryCast(checker.resolveName(checker.getJsxNamespace(parent), ts.isJsxOpeningLikeElement(parent) ? token : parent, 111551 /* Value */, /*excludeGlobals*/ false), ts.isUMDExportSymbol)
                 : undefined;
         }
-        function getImportKind(importingFile, exportKind, compilerOptions) {
+        /**
+         * @param forceImportKeyword Indicates that the user has already typed `import`, so the result must start with `import`.
+         * (In other words, do not allow `const x = require("...")` for JS files.)
+         */
+        function getImportKind(importingFile, exportKind, compilerOptions, forceImportKeyword) {
             switch (exportKind) {
                 case 0 /* Named */: return 0 /* Named */;
                 case 1 /* Default */: return 1 /* Default */;
-                case 2 /* ExportEquals */: return getExportEqualsImportKind(importingFile, compilerOptions);
-                case 3 /* UMD */: return getUmdImportKind(importingFile, compilerOptions);
+                case 2 /* ExportEquals */: return getExportEqualsImportKind(importingFile, compilerOptions, !!forceImportKeyword);
+                case 3 /* UMD */: return getUmdImportKind(importingFile, compilerOptions, !!forceImportKeyword);
                 default: return ts.Debug.assertNever(exportKind);
             }
         }
         codefix.getImportKind = getImportKind;
-        function getUmdImportKind(importingFile, compilerOptions) {
+        function getUmdImportKind(importingFile, compilerOptions, forceImportKeyword) {
             // Import a synthetic `default` if enabled.
             if (ts.getAllowSyntheticDefaultImports(compilerOptions)) {
                 return 1 /* Default */;
@@ -142904,7 +146167,7 @@
                 case ts.ModuleKind.CommonJS:
                 case ts.ModuleKind.UMD:
                     if (ts.isInJSFile(importingFile)) {
-                        return ts.isExternalModule(importingFile) ? 2 /* Namespace */ : 3 /* CommonJS */;
+                        return ts.isExternalModule(importingFile) || forceImportKeyword ? 2 /* Namespace */ : 3 /* CommonJS */;
                     }
                     return 3 /* CommonJS */;
                 case ts.ModuleKind.System:
@@ -142927,7 +146190,7 @@
             ts.Debug.assert(symbolName !== "default" /* Default */, "'default' isn't a legal identifier and couldn't occur here");
             var preferTypeOnlyImport = compilerOptions.importsNotUsedAsValues === 2 /* Error */ && ts.isValidTypeOnlyAliasUseSite(symbolToken);
             var useRequire = shouldUseRequire(sourceFile, program);
-            var exportInfos = getExportInfos(symbolName, ts.getMeaningFromLocation(symbolToken), cancellationToken, sourceFile, program, useAutoImportProvider, host);
+            var exportInfos = getExportInfos(symbolName, ts.getMeaningFromLocation(symbolToken), cancellationToken, sourceFile, program, useAutoImportProvider, host, preferences);
             var fixes = ts.arrayFrom(ts.flatMapIterator(exportInfos.entries(), function (_a) {
                 var _ = _a[0], exportInfos = _a[1];
                 return getImportFixes(exportInfos, symbolName, symbolToken.getStart(sourceFile), preferTypeOnlyImport, useRequire, program, sourceFile, host, preferences);
@@ -142945,29 +146208,29 @@
             return symbolToken.text;
         }
         // Returns a map from an exported symbol's ID to a list of every way it's (re-)exported.
-        function getExportInfos(symbolName, currentTokenMeaning, cancellationToken, fromFile, program, useAutoImportProvider, host) {
+        function getExportInfos(symbolName, currentTokenMeaning, cancellationToken, fromFile, program, useAutoImportProvider, host, preferences) {
             var _a;
             // For each original symbol, keep all re-exports of that symbol together so we can call `getCodeActionsForImport` on the whole group at once.
             // Maps symbol id to info for modules providing that symbol (original export + re-exports).
             var originalSymbolToExportInfos = ts.createMultiMap();
-            var packageJsonFilter = ts.createPackageJsonImportFilter(fromFile, host);
+            var packageJsonFilter = ts.createPackageJsonImportFilter(fromFile, preferences, host);
             var moduleSpecifierCache = (_a = host.getModuleSpecifierCache) === null || _a === void 0 ? void 0 : _a.call(host);
             var getModuleSpecifierResolutionHost = ts.memoizeOne(function (isFromPackageJson) {
                 return ts.createModuleSpecifierResolutionHost(isFromPackageJson ? host.getPackageJsonAutoImportProvider() : program, host);
             });
             function addSymbol(moduleSymbol, toFile, exportedSymbol, exportKind, program, isFromPackageJson) {
                 var moduleSpecifierResolutionHost = getModuleSpecifierResolutionHost(isFromPackageJson);
-                if (toFile && ts.isImportableFile(program, fromFile, toFile, packageJsonFilter, moduleSpecifierResolutionHost, moduleSpecifierCache) ||
+                if (toFile && ts.isImportableFile(program, fromFile, toFile, preferences, packageJsonFilter, moduleSpecifierResolutionHost, moduleSpecifierCache) ||
                     !toFile && packageJsonFilter.allowsImportingAmbientModule(moduleSymbol, moduleSpecifierResolutionHost)) {
                     var checker = program.getTypeChecker();
-                    originalSymbolToExportInfos.add(ts.getUniqueSymbolId(exportedSymbol, checker).toString(), { symbol: exportedSymbol, moduleSymbol: moduleSymbol, exportKind: exportKind, exportedSymbolIsTypeOnly: isTypeOnlySymbol(exportedSymbol, checker), isFromPackageJson: isFromPackageJson });
+                    originalSymbolToExportInfos.add(ts.getUniqueSymbolId(exportedSymbol, checker).toString(), { symbol: exportedSymbol, moduleSymbol: moduleSymbol, moduleFileName: toFile === null || toFile === void 0 ? void 0 : toFile.fileName, exportKind: exportKind, targetFlags: ts.skipAlias(exportedSymbol, checker).flags, isFromPackageJson: isFromPackageJson });
                 }
             }
-            forEachExternalModuleToImportFrom(program, host, useAutoImportProvider, function (moduleSymbol, sourceFile, program, isFromPackageJson) {
+            ts.forEachExternalModuleToImportFrom(program, host, useAutoImportProvider, function (moduleSymbol, sourceFile, program, isFromPackageJson) {
                 var checker = program.getTypeChecker();
                 cancellationToken.throwIfCancellationRequested();
                 var compilerOptions = program.getCompilerOptions();
-                var defaultInfo = getDefaultLikeExportInfo(moduleSymbol, checker, compilerOptions);
+                var defaultInfo = ts.getDefaultLikeExportInfo(moduleSymbol, checker, compilerOptions);
                 if (defaultInfo && (defaultInfo.name === symbolName || moduleSymbolToValidIdentifier(moduleSymbol, compilerOptions.target) === symbolName) && symbolHasMeaning(defaultInfo.symbolForMeaning, currentTokenMeaning)) {
                     addSymbol(moduleSymbol, sourceFile, defaultInfo.symbol, defaultInfo.exportKind, program, isFromPackageJson);
                 }
@@ -142979,33 +146242,20 @@
             });
             return originalSymbolToExportInfos;
         }
-        function getDefaultLikeExportInfo(moduleSymbol, checker, compilerOptions) {
-            var exported = getDefaultLikeExportWorker(moduleSymbol, checker);
-            if (!exported)
-                return undefined;
-            var symbol = exported.symbol, exportKind = exported.exportKind;
-            var info = getDefaultExportInfoWorker(symbol, checker, compilerOptions);
-            return info && __assign({ symbol: symbol, exportKind: exportKind }, info);
-        }
-        function getDefaultLikeExportWorker(moduleSymbol, checker) {
-            var exportEquals = checker.resolveExternalModuleSymbol(moduleSymbol);
-            if (exportEquals !== moduleSymbol)
-                return { symbol: exportEquals, exportKind: 2 /* ExportEquals */ };
-            var defaultExport = checker.tryGetMemberInModuleExports("default" /* Default */, moduleSymbol);
-            if (defaultExport)
-                return { symbol: defaultExport, exportKind: 1 /* Default */ };
-        }
-        function getExportEqualsImportKind(importingFile, compilerOptions) {
+        function getExportEqualsImportKind(importingFile, compilerOptions, forceImportKeyword) {
             var allowSyntheticDefaults = ts.getAllowSyntheticDefaultImports(compilerOptions);
-            // 1. 'import =' will not work in es2015+, so the decision is between a default
+            var isJS = ts.isInJSFile(importingFile);
+            // 1. 'import =' will not work in es2015+ TS files, so the decision is between a default
             //    and a namespace import, based on allowSyntheticDefaultImports/esModuleInterop.
-            if (ts.getEmitModuleKind(compilerOptions) >= ts.ModuleKind.ES2015) {
+            if (!isJS && ts.getEmitModuleKind(compilerOptions) >= ts.ModuleKind.ES2015) {
                 return allowSyntheticDefaults ? 1 /* Default */ : 2 /* Namespace */;
             }
-            // 2. 'import =' will not work in JavaScript, so the decision is between a default
-            //    and const/require.
-            if (ts.isInJSFile(importingFile)) {
-                return ts.isExternalModule(importingFile) ? 1 /* Default */ : 3 /* CommonJS */;
+            // 2. 'import =' will not work in JavaScript, so the decision is between a default import,
+            //    a namespace import, and const/require.
+            if (isJS) {
+                return ts.isExternalModule(importingFile) || forceImportKeyword
+                    ? allowSyntheticDefaults ? 1 /* Default */ : 2 /* Namespace */
+                    : 3 /* CommonJS */;
             }
             // 3. At this point the most correct choice is probably 'import =', but people
             //    really hate that, so look to see if the importing file has any precedent
@@ -143021,41 +146271,6 @@
             //    allowSyntheticDefaultImports/esModuleInterop is enabled.
             return allowSyntheticDefaults ? 1 /* Default */ : 3 /* CommonJS */;
         }
-        function getDefaultExportInfoWorker(defaultExport, checker, compilerOptions) {
-            var localSymbol = ts.getLocalSymbolForExportDefault(defaultExport);
-            if (localSymbol)
-                return { symbolForMeaning: localSymbol, name: localSymbol.name };
-            var name = getNameForExportDefault(defaultExport);
-            if (name !== undefined)
-                return { symbolForMeaning: defaultExport, name: name };
-            if (defaultExport.flags & 2097152 /* Alias */) {
-                var aliased = checker.getImmediateAliasedSymbol(defaultExport);
-                if (aliased && aliased.parent) {
-                    // - `aliased` will be undefined if the module is exporting an unresolvable name,
-                    //    but we can still offer completions for it.
-                    // - `aliased.parent` will be undefined if the module is exporting `globalThis.something`,
-                    //    or another expression that resolves to a global.
-                    return getDefaultExportInfoWorker(aliased, checker, compilerOptions);
-                }
-            }
-            if (defaultExport.escapedName !== "default" /* Default */ &&
-                defaultExport.escapedName !== "export=" /* ExportEquals */) {
-                return { symbolForMeaning: defaultExport, name: defaultExport.getName() };
-            }
-            return { symbolForMeaning: defaultExport, name: ts.getNameForExportedSymbol(defaultExport, compilerOptions.target) };
-        }
-        function getNameForExportDefault(symbol) {
-            return symbol.declarations && ts.firstDefined(symbol.declarations, function (declaration) {
-                var _a;
-                if (ts.isExportAssignment(declaration)) {
-                    return (_a = ts.tryCast(ts.skipOuterExpressions(declaration.expression), ts.isIdentifier)) === null || _a === void 0 ? void 0 : _a.text;
-                }
-                else if (ts.isExportSpecifier(declaration)) {
-                    ts.Debug.assert(declaration.name.text === "default" /* Default */, "Expected the specifier to be a default export");
-                    return declaration.propertyName && declaration.propertyName.text;
-                }
-            });
-        }
         function codeActionForFix(context, sourceFile, symbolName, fix, quotePreference) {
             var diag;
             var changes = ts.textChanges.ChangeTracker.with(context, function (tracker) {
@@ -143091,7 +146306,7 @@
             }
         }
         function doAddExistingFix(changes, sourceFile, clause, defaultImport, namedImports, canUseTypeOnlyImport) {
-            if (clause.kind === 197 /* ObjectBindingPattern */) {
+            if (clause.kind === 199 /* ObjectBindingPattern */) {
                 if (defaultImport) {
                     addElementToBindingPattern(clause, defaultImport, "default");
                 }
@@ -143218,31 +146433,6 @@
             var declarations = _a.declarations;
             return ts.some(declarations, function (decl) { return !!(ts.getMeaningFromDeclaration(decl) & meaning); });
         }
-        function forEachExternalModuleToImportFrom(program, host, useAutoImportProvider, cb) {
-            var _a, _b;
-            forEachExternalModule(program.getTypeChecker(), program.getSourceFiles(), function (module, file) { return cb(module, file, program, /*isFromPackageJson*/ false); });
-            var autoImportProvider = useAutoImportProvider && ((_a = host.getPackageJsonAutoImportProvider) === null || _a === void 0 ? void 0 : _a.call(host));
-            if (autoImportProvider) {
-                var start = ts.timestamp();
-                forEachExternalModule(autoImportProvider.getTypeChecker(), autoImportProvider.getSourceFiles(), function (module, file) { return cb(module, file, autoImportProvider, /*isFromPackageJson*/ true); });
-                (_b = host.log) === null || _b === void 0 ? void 0 : _b.call(host, "forEachExternalModuleToImportFrom autoImportProvider: " + (ts.timestamp() - start));
-            }
-        }
-        codefix.forEachExternalModuleToImportFrom = forEachExternalModuleToImportFrom;
-        function forEachExternalModule(checker, allSourceFiles, cb) {
-            for (var _i = 0, _a = checker.getAmbientModules(); _i < _a.length; _i++) {
-                var ambient = _a[_i];
-                if (!ts.stringContains(ambient.name, "*")) {
-                    cb(ambient, /*sourceFile*/ undefined);
-                }
-            }
-            for (var _b = 0, allSourceFiles_1 = allSourceFiles; _b < allSourceFiles_1.length; _b++) {
-                var sourceFile = allSourceFiles_1[_b];
-                if (ts.isExternalOrCommonJsModule(sourceFile)) {
-                    cb(checker.getMergedSymbol(sourceFile.symbol), sourceFile);
-                }
-            }
-        }
         function moduleSymbolToValidIdentifier(moduleSymbol, target) {
             return moduleSpecifierToValidIdentifier(ts.removeFileExtension(ts.stripQuotes(moduleSymbol.name)), target);
         }
@@ -143353,28 +146543,30 @@
             var classElement = findContainerClassElementLike(sourceFile, pos);
             var modifiers = classElement.modifiers || ts.emptyArray;
             var staticModifier = ts.find(modifiers, ts.isStaticModifier);
+            var abstractModifier = ts.find(modifiers, ts.isAbstractModifier);
             var accessibilityModifier = ts.find(modifiers, function (m) { return ts.isAccessibilityModifier(m.kind); });
-            var modifierPos = staticModifier ? staticModifier.end :
-                accessibilityModifier ? accessibilityModifier.end :
-                    classElement.decorators ? ts.skipTrivia(sourceFile.text, classElement.decorators.end) : classElement.getStart(sourceFile);
-            var options = accessibilityModifier || staticModifier ? { prefix: " " } : { suffix: " " };
-            changeTracker.insertModifierAt(sourceFile, modifierPos, 156 /* OverrideKeyword */, options);
+            var modifierPos = abstractModifier ? abstractModifier.end :
+                staticModifier ? staticModifier.end :
+                    accessibilityModifier ? accessibilityModifier.end :
+                        classElement.decorators ? ts.skipTrivia(sourceFile.text, classElement.decorators.end) : classElement.getStart(sourceFile);
+            var options = accessibilityModifier || staticModifier || abstractModifier ? { prefix: " " } : { suffix: " " };
+            changeTracker.insertModifierAt(sourceFile, modifierPos, 157 /* OverrideKeyword */, options);
         }
         function doRemoveOverrideModifierChange(changeTracker, sourceFile, pos) {
             var classElement = findContainerClassElementLike(sourceFile, pos);
-            var overrideModifier = classElement.modifiers && ts.find(classElement.modifiers, function (modifier) { return modifier.kind === 156 /* OverrideKeyword */; });
+            var overrideModifier = classElement.modifiers && ts.find(classElement.modifiers, function (modifier) { return modifier.kind === 157 /* OverrideKeyword */; });
             ts.Debug.assertIsDefined(overrideModifier);
             changeTracker.deleteModifier(sourceFile, overrideModifier);
         }
         function isClassElementLikeHasJSDoc(node) {
             switch (node.kind) {
-                case 167 /* Constructor */:
-                case 164 /* PropertyDeclaration */:
-                case 166 /* MethodDeclaration */:
-                case 168 /* GetAccessor */:
-                case 169 /* SetAccessor */:
+                case 169 /* Constructor */:
+                case 165 /* PropertyDeclaration */:
+                case 167 /* MethodDeclaration */:
+                case 170 /* GetAccessor */:
+                case 171 /* SetAccessor */:
                     return true;
-                case 161 /* Parameter */:
+                case 162 /* Parameter */:
                     return ts.isParameterPropertyDeclaration(node, node.parent);
                 default:
                     return false;
@@ -143450,12 +146642,12 @@
         });
         function doChange(changes, sourceFile, pos, checker) {
             var token = ts.getTokenAtPosition(sourceFile, pos);
-            ts.Debug.assert(token.kind === 107 /* ThisKeyword */);
+            ts.Debug.assert(token.kind === 108 /* ThisKeyword */);
             var fn = ts.getThisContainer(token, /*includeArrowFunctions*/ false);
             if (!ts.isFunctionDeclaration(fn) && !ts.isFunctionExpression(fn))
                 return undefined;
             if (!ts.isSourceFile(ts.getThisContainer(fn, /*includeArrowFunctions*/ false))) { // 'this' is defined outside, convert to arrow function
-                var fnKeyword = ts.Debug.assertDefined(ts.findChildOfKind(fn, 97 /* FunctionKeyword */, sourceFile));
+                var fnKeyword = ts.Debug.assertDefined(ts.findChildOfKind(fn, 98 /* FunctionKeyword */, sourceFile));
                 var name = fn.name;
                 var body = ts.Debug.assertDefined(fn.body); // Should be defined because the function contained a 'this' expression
                 if (ts.isFunctionExpression(fn)) {
@@ -143474,7 +146666,7 @@
                 else {
                     // `function f() {}` => `const f = () => {}`
                     // `name` should be defined because we only do this in inner contexts, and name is only undefined for `export default function() {}`.
-                    changes.replaceNode(sourceFile, fnKeyword, ts.factory.createToken(84 /* ConstKeyword */));
+                    changes.replaceNode(sourceFile, fnKeyword, ts.factory.createToken(85 /* ConstKeyword */));
                     changes.insertText(sourceFile, name.end, " = ");
                     changes.insertText(sourceFile, body.pos, " =>");
                     return [ts.Diagnostics.Convert_function_declaration_0_to_arrow_function, name.text];
@@ -143505,7 +146697,7 @@
         });
         function getNamedTupleMember(sourceFile, pos) {
             var token = ts.getTokenAtPosition(sourceFile, pos);
-            return ts.findAncestor(token, function (t) { return t.kind === 193 /* NamedTupleMember */; });
+            return ts.findAncestor(token, function (t) { return t.kind === 195 /* NamedTupleMember */; });
         }
         function doChange(changes, sourceFile, namedTupleMember) {
             if (!namedTupleMember) {
@@ -143514,11 +146706,11 @@
             var unwrappedType = namedTupleMember.type;
             var sawOptional = false;
             var sawRest = false;
-            while (unwrappedType.kind === 181 /* OptionalType */ || unwrappedType.kind === 182 /* RestType */ || unwrappedType.kind === 187 /* ParenthesizedType */) {
-                if (unwrappedType.kind === 181 /* OptionalType */) {
+            while (unwrappedType.kind === 183 /* OptionalType */ || unwrappedType.kind === 184 /* RestType */ || unwrappedType.kind === 189 /* ParenthesizedType */) {
+                if (unwrappedType.kind === 183 /* OptionalType */) {
                     sawOptional = true;
                 }
-                else if (unwrappedType.kind === 182 /* RestType */) {
+                else if (unwrappedType.kind === 184 /* RestType */) {
                     sawRest = true;
                 }
                 unwrappedType = unwrappedType.type;
@@ -143539,10 +146731,13 @@
         var fixId = "fixSpelling";
         var errorCodes = [
             ts.Diagnostics.Property_0_does_not_exist_on_type_1_Did_you_mean_2.code,
+            ts.Diagnostics.Property_0_may_not_exist_on_type_1_Did_you_mean_2.code,
             ts.Diagnostics.Cannot_find_name_0_Did_you_mean_1.code,
+            ts.Diagnostics.Could_not_find_name_0_Did_you_mean_1.code,
             ts.Diagnostics.Cannot_find_name_0_Did_you_mean_the_instance_member_this_0.code,
             ts.Diagnostics.Cannot_find_name_0_Did_you_mean_the_static_member_1_0.code,
             ts.Diagnostics._0_has_no_exported_member_named_1_Did_you_mean_2.code,
+            ts.Diagnostics.This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0_Did_you_mean_1.code,
             // for JSX class components
             ts.Diagnostics.No_overload_matches_this_call.code,
             // for JSX FC
@@ -143609,6 +146804,14 @@
                 var props = checker.getContextualTypeForArgumentAtIndex(tag, 0);
                 suggestedSymbol = checker.getSuggestedSymbolForNonexistentJSXAttribute(node, props);
             }
+            else if (ts.hasSyntacticModifier(parent, 16384 /* Override */) && ts.isClassElement(parent) && parent.name === node) {
+                var baseDeclaration = ts.findAncestor(node, ts.isClassLike);
+                var baseTypeNode = baseDeclaration ? ts.getEffectiveBaseTypeNode(baseDeclaration) : undefined;
+                var baseType = baseTypeNode ? checker.getTypeAtLocation(baseTypeNode) : undefined;
+                if (baseType) {
+                    suggestedSymbol = checker.getSuggestedSymbolForNonexistentClassMember(ts.getTextOfNode(node), baseType);
+                }
+            }
             else {
                 var meaning = ts.getMeaningFromLocation(node);
                 var name = ts.getTextOfNode(node);
@@ -143716,7 +146919,7 @@
             var member = checker.createSymbol(4 /* Property */, label.escapedText);
             member.type = checker.getTypeAtLocation(expression);
             var members = ts.createSymbolTable([member]);
-            return checker.createAnonymousType(/*symbol*/ undefined, members, [], [], /*stringIndexInfo*/ undefined, /*numberIndexInfo*/ undefined);
+            return checker.createAnonymousType(/*symbol*/ undefined, members, [], [], []);
         }
         function getFixInfo(checker, declaration, expectType, isFunctionType) {
             if (!declaration.body || !ts.isBlock(declaration.body) || ts.length(declaration.body.statements) !== 1)
@@ -143778,9 +146981,7 @@
                     var newSig = checker.createSignature(declaration, sig.typeParameters, sig.thisParameter, sig.parameters, exprType, 
                     /*typePredicate*/ undefined, sig.minArgumentCount, sig.flags);
                     exprType = checker.createAnonymousType(
-                    /*symbol*/ undefined, ts.createSymbolTable(), [newSig], [], 
-                    /*stringIndexInfo*/ undefined, 
-                    /*numberIndexInfo*/ undefined);
+                    /*symbol*/ undefined, ts.createSymbolTable(), [newSig], [], []);
                 }
                 else {
                     exprType = checker.getAnyType();
@@ -143818,19 +147019,19 @@
         }
         function getVariableLikeInitializer(declaration) {
             switch (declaration.kind) {
-                case 250 /* VariableDeclaration */:
-                case 161 /* Parameter */:
-                case 199 /* BindingElement */:
-                case 164 /* PropertyDeclaration */:
-                case 289 /* PropertyAssignment */:
+                case 252 /* VariableDeclaration */:
+                case 162 /* Parameter */:
+                case 201 /* BindingElement */:
+                case 165 /* PropertyDeclaration */:
+                case 291 /* PropertyAssignment */:
                     return declaration.initializer;
-                case 281 /* JsxAttribute */:
+                case 283 /* JsxAttribute */:
                     return declaration.initializer && (ts.isJsxExpression(declaration.initializer) ? declaration.initializer.expression : undefined);
-                case 290 /* ShorthandPropertyAssignment */:
-                case 163 /* PropertySignature */:
-                case 292 /* EnumMember */:
-                case 337 /* JSDocPropertyTag */:
-                case 330 /* JSDocParameterTag */:
+                case 292 /* ShorthandPropertyAssignment */:
+                case 164 /* PropertySignature */:
+                case 294 /* EnumMember */:
+                case 342 /* JSDocPropertyTag */:
+                case 335 /* JSDocParameterTag */:
                     return undefined;
             }
         }
@@ -143872,6 +147073,8 @@
     var codefix;
     (function (codefix) {
         var fixMissingMember = "fixMissingMember";
+        var fixMissingProperties = "fixMissingProperties";
+        var fixMissingAttributes = "fixMissingAttributes";
         var fixMissingFunctionDeclaration = "fixMissingFunctionDeclaration";
         var errorCodes = [
             ts.Diagnostics.Property_0_does_not_exist_on_type_1.code,
@@ -143889,6 +147092,14 @@
                 if (!info) {
                     return undefined;
                 }
+                if (info.kind === 3 /* ObjectLiteral */) {
+                    var changes = ts.textChanges.ChangeTracker.with(context, function (t) { return addObjectLiteralProperties(t, context, info); });
+                    return [codefix.createCodeFixAction(fixMissingProperties, changes, ts.Diagnostics.Add_missing_properties, fixMissingProperties, ts.Diagnostics.Add_all_missing_properties)];
+                }
+                if (info.kind === 4 /* JsxAttributes */) {
+                    var changes = ts.textChanges.ChangeTracker.with(context, function (t) { return addJsxAttributes(t, context, info); });
+                    return [codefix.createCodeFixAction(fixMissingAttributes, changes, ts.Diagnostics.Add_missing_attributes, fixMissingAttributes, ts.Diagnostics.Add_all_missing_attributes)];
+                }
                 if (info.kind === 2 /* Function */) {
                     var changes = ts.textChanges.ChangeTracker.with(context, function (t) { return addFunctionDeclaration(t, context, info); });
                     return [codefix.createCodeFixAction(fixMissingFunctionDeclaration, changes, [ts.Diagnostics.Add_missing_function_declaration_0, info.token.text], fixMissingFunctionDeclaration, ts.Diagnostics.Add_all_missing_function_declarations)];
@@ -143899,7 +147110,7 @@
                 }
                 return ts.concatenate(getActionsForMissingMethodDeclaration(context, info), getActionsForMissingMemberDeclaration(context, info));
             },
-            fixIds: [fixMissingMember, fixMissingFunctionDeclaration],
+            fixIds: [fixMissingMember, fixMissingFunctionDeclaration, fixMissingProperties, fixMissingAttributes],
             getAllCodeActions: function (context) {
                 var program = context.program, fixId = context.fixId;
                 var checker = program.getTypeChecker();
@@ -143911,10 +147122,14 @@
                         if (!info || !ts.addToSeen(seen, ts.getNodeId(info.parentDeclaration) + "#" + info.token.text)) {
                             return;
                         }
-                        if (fixId === fixMissingFunctionDeclaration) {
-                            if (info.kind === 2 /* Function */) {
-                                addFunctionDeclaration(changes, context, info);
-                            }
+                        if (fixId === fixMissingFunctionDeclaration && info.kind === 2 /* Function */) {
+                            addFunctionDeclaration(changes, context, info);
+                        }
+                        else if (fixId === fixMissingProperties && info.kind === 3 /* ObjectLiteral */) {
+                            addObjectLiteralProperties(changes, context, info);
+                        }
+                        else if (fixId === fixMissingAttributes && info.kind === 4 /* JsxAttributes */) {
+                            addJsxAttributes(changes, context, info);
                         }
                         else {
                             if (info.kind === 0 /* Enum */) {
@@ -143956,8 +147171,8 @@
                                 }
                             }
                         };
-                        for (var _i = 0, infos_2 = infos; _i < infos_2.length; _i++) {
-                            var info = infos_2[_i];
+                        for (var _i = 0, infos_1 = infos; _i < infos_1.length; _i++) {
+                            var info = infos_1[_i];
                             _loop_14(info);
                         }
                     });
@@ -143969,6 +147184,8 @@
             InfoKind[InfoKind["Enum"] = 0] = "Enum";
             InfoKind[InfoKind["ClassOrInterface"] = 1] = "ClassOrInterface";
             InfoKind[InfoKind["Function"] = 2] = "Function";
+            InfoKind[InfoKind["ObjectLiteral"] = 3] = "ObjectLiteral";
+            InfoKind[InfoKind["JsxAttributes"] = 4] = "JsxAttributes";
         })(InfoKind || (InfoKind = {}));
         function getInfo(sourceFile, tokenPos, checker, program) {
             // The identifier of the missing property. eg:
@@ -143979,6 +147196,18 @@
                 return undefined;
             }
             var parent = token.parent;
+            if (ts.isIdentifier(token) && ts.hasInitializer(parent) && parent.initializer && ts.isObjectLiteralExpression(parent.initializer)) {
+                var properties = ts.arrayFrom(checker.getUnmatchedProperties(checker.getTypeAtLocation(parent.initializer), checker.getTypeAtLocation(token), /* requireOptionalProperties */ false, /* matchDiscriminantProperties */ false));
+                if (ts.length(properties)) {
+                    return { kind: 3 /* ObjectLiteral */, token: token, properties: properties, parentDeclaration: parent.initializer };
+                }
+            }
+            if (ts.isIdentifier(token) && ts.isJsxOpeningLikeElement(token.parent)) {
+                var attributes = getUnmatchedAttributes(checker, token.parent);
+                if (ts.length(attributes)) {
+                    return { kind: 4 /* JsxAttributes */, token: token, attributes: attributes, parentDeclaration: token.parent };
+                }
+            }
             if (ts.isIdentifier(token) && ts.isCallExpression(parent)) {
                 return { kind: 2 /* Function */, token: token, call: parent, sourceFile: sourceFile, modifierFlags: 0 /* None */, parentDeclaration: sourceFile };
             }
@@ -143993,14 +147222,14 @@
             if (ts.isIdentifier(token) && ts.isCallExpression(parent.parent)) {
                 var moduleDeclaration = ts.find(symbol.declarations, ts.isModuleDeclaration);
                 var moduleDeclarationSourceFile = moduleDeclaration === null || moduleDeclaration === void 0 ? void 0 : moduleDeclaration.getSourceFile();
-                if (moduleDeclaration && moduleDeclarationSourceFile && !program.isSourceFileFromExternalLibrary(moduleDeclarationSourceFile)) {
+                if (moduleDeclaration && moduleDeclarationSourceFile && !isSourceFileFromLibrary(program, moduleDeclarationSourceFile)) {
                     return { kind: 2 /* Function */, token: token, call: parent.parent, sourceFile: sourceFile, modifierFlags: 1 /* Export */, parentDeclaration: moduleDeclaration };
                 }
                 var moduleSourceFile = ts.find(symbol.declarations, ts.isSourceFile);
                 if (sourceFile.commonJsModuleIndicator) {
                     return;
                 }
-                if (moduleSourceFile && !program.isSourceFileFromExternalLibrary(moduleSourceFile)) {
+                if (moduleSourceFile && !isSourceFileFromLibrary(program, moduleSourceFile)) {
                     return { kind: 2 /* Function */, token: token, call: parent.parent, sourceFile: moduleSourceFile, modifierFlags: 1 /* Export */, parentDeclaration: moduleSourceFile };
                 }
             }
@@ -144011,7 +147240,7 @@
             }
             // Prefer to change the class instead of the interface if they are merged
             var classOrInterface = classDeclaration || ts.find(symbol.declarations, ts.isInterfaceDeclaration);
-            if (classOrInterface && !program.isSourceFileFromExternalLibrary(classOrInterface.getSourceFile())) {
+            if (classOrInterface && !isSourceFileFromLibrary(program, classOrInterface.getSourceFile())) {
                 var makeStatic = (leftExpressionType.target || leftExpressionType) !== checker.getDeclaredTypeOfSymbol(symbol);
                 if (makeStatic && (ts.isPrivateIdentifier(token) || ts.isInterfaceDeclaration(classOrInterface))) {
                     return undefined;
@@ -144023,11 +147252,14 @@
                 return { kind: 1 /* ClassOrInterface */, token: token, call: call, modifierFlags: modifierFlags, parentDeclaration: classOrInterface, declSourceFile: declSourceFile, isJSFile: isJSFile };
             }
             var enumDeclaration = ts.find(symbol.declarations, ts.isEnumDeclaration);
-            if (enumDeclaration && !ts.isPrivateIdentifier(token) && !program.isSourceFileFromExternalLibrary(enumDeclaration.getSourceFile())) {
+            if (enumDeclaration && !ts.isPrivateIdentifier(token) && !isSourceFileFromLibrary(program, enumDeclaration.getSourceFile())) {
                 return { kind: 0 /* Enum */, token: token, parentDeclaration: enumDeclaration };
             }
             return undefined;
         }
+        function isSourceFileFromLibrary(program, node) {
+            return program.isSourceFileFromExternalLibrary(node) || program.isSourceFileDefaultLibrary(node);
+        }
         function getActionsForMissingMemberDeclaration(context, info) {
             return info.isJSFile ? ts.singleElementArray(createActionForAddMissingMemberInJavascriptFile(context, info)) :
                 createActionsForAddMissingMemberInTypeScriptFile(context, info);
@@ -144048,7 +147280,7 @@
         function addMissingMemberInJs(changeTracker, declSourceFile, classDeclaration, token, makeStatic) {
             var tokenName = token.text;
             if (makeStatic) {
-                if (classDeclaration.kind === 222 /* ClassExpression */) {
+                if (classDeclaration.kind === 224 /* ClassExpression */) {
                     return;
                 }
                 var className = classDeclaration.name.getText();
@@ -144080,7 +147312,7 @@
             }
         }
         function initializePropertyToUndefined(obj, propertyName) {
-            return ts.factory.createExpressionStatement(ts.factory.createAssignment(ts.factory.createPropertyAccessExpression(obj, propertyName), ts.factory.createIdentifier("undefined")));
+            return ts.factory.createExpressionStatement(ts.factory.createAssignment(ts.factory.createPropertyAccessExpression(obj, propertyName), createUndefined()));
         }
         function createActionsForAddMissingMemberInTypeScriptFile(context, _a) {
             var parentDeclaration = _a.parentDeclaration, declSourceFile = _a.declSourceFile, modifierFlags = _a.modifierFlags, token = _a.token;
@@ -144100,7 +147332,7 @@
         }
         function getTypeNode(checker, classDeclaration, token) {
             var typeNode;
-            if (token.parent.parent.kind === 217 /* BinaryExpression */) {
+            if (token.parent.parent.kind === 219 /* BinaryExpression */) {
                 var binaryExpression = token.parent.parent;
                 var otherExpression = token.parent === binaryExpression.left ? binaryExpression.right : binaryExpression.left;
                 var widenedType = checker.getWidenedType(checker.getBaseTypeOfLiteralType(checker.getTypeAtLocation(otherExpression)));
@@ -144110,7 +147342,7 @@
                 var contextualType = checker.getContextualType(token.parent);
                 typeNode = contextualType ? checker.typeToTypeNode(contextualType, /*enclosingDeclaration*/ undefined, 1 /* NoTruncation */) : undefined;
             }
-            return typeNode || ts.factory.createKeywordTypeNode(128 /* AnyKeyword */);
+            return typeNode || ts.factory.createKeywordTypeNode(129 /* AnyKeyword */);
         }
         function addPropertyDeclaration(changeTracker, declSourceFile, classDeclaration, tokenName, typeNode, modifierFlags) {
             var property = ts.factory.createPropertyDeclaration(
@@ -144139,7 +147371,7 @@
         }
         function createAddIndexSignatureAction(context, declSourceFile, classDeclaration, tokenName, typeNode) {
             // Index signatures cannot have the static modifier.
-            var stringTypeNode = ts.factory.createKeywordTypeNode(147 /* StringKeyword */);
+            var stringTypeNode = ts.factory.createKeywordTypeNode(148 /* StringKeyword */);
             var indexingParameter = ts.factory.createParameterDeclaration(
             /*decorators*/ undefined, 
             /*modifiers*/ undefined, 
@@ -144172,7 +147404,7 @@
         }
         function addMethodDeclaration(context, changes, callExpression, name, modifierFlags, parentDeclaration, sourceFile) {
             var importAdder = codefix.createImportAdder(sourceFile, context.program, context.preferences, context.host);
-            var methodDeclaration = codefix.createSignatureDeclarationFromCallExpression(166 /* MethodDeclaration */, context, importAdder, callExpression, name, modifierFlags, parentDeclaration);
+            var methodDeclaration = codefix.createSignatureDeclarationFromCallExpression(167 /* MethodDeclaration */, context, importAdder, callExpression, name, modifierFlags, parentDeclaration);
             var containingMethodDeclaration = ts.findAncestor(callExpression, function (n) { return ts.isMethodDeclaration(n) || ts.isConstructorDeclaration(n); });
             if (containingMethodDeclaration && containingMethodDeclaration.parent === parentDeclaration) {
                 changes.insertNodeAfter(sourceFile, containingMethodDeclaration, methodDeclaration);
@@ -144201,9 +147433,136 @@
         }
         function addFunctionDeclaration(changes, context, info) {
             var importAdder = codefix.createImportAdder(context.sourceFile, context.program, context.preferences, context.host);
-            var functionDeclaration = codefix.createSignatureDeclarationFromCallExpression(252 /* FunctionDeclaration */, context, importAdder, info.call, ts.idText(info.token), info.modifierFlags, info.parentDeclaration);
+            var functionDeclaration = codefix.createSignatureDeclarationFromCallExpression(254 /* FunctionDeclaration */, context, importAdder, info.call, ts.idText(info.token), info.modifierFlags, info.parentDeclaration);
             changes.insertNodeAtEndOfScope(info.sourceFile, info.parentDeclaration, functionDeclaration);
         }
+        function addJsxAttributes(changes, context, info) {
+            var importAdder = codefix.createImportAdder(context.sourceFile, context.program, context.preferences, context.host);
+            var quotePreference = ts.getQuotePreference(context.sourceFile, context.preferences);
+            var checker = context.program.getTypeChecker();
+            var jsxAttributesNode = info.parentDeclaration.attributes;
+            var hasSpreadAttribute = ts.some(jsxAttributesNode.properties, ts.isJsxSpreadAttribute);
+            var attrs = ts.map(info.attributes, function (attr) {
+                var value = attr.valueDeclaration ? tryGetValueFromType(context, checker, importAdder, quotePreference, checker.getTypeAtLocation(attr.valueDeclaration)) : createUndefined();
+                return ts.factory.createJsxAttribute(ts.factory.createIdentifier(attr.name), ts.factory.createJsxExpression(/*dotDotDotToken*/ undefined, value));
+            });
+            var jsxAttributes = ts.factory.createJsxAttributes(hasSpreadAttribute ? __spreadArray(__spreadArray([], attrs, true), jsxAttributesNode.properties, true) : __spreadArray(__spreadArray([], jsxAttributesNode.properties, true), attrs, true));
+            var options = { prefix: jsxAttributesNode.pos === jsxAttributesNode.end ? " " : undefined };
+            changes.replaceNode(context.sourceFile, jsxAttributesNode, jsxAttributes, options);
+        }
+        function addObjectLiteralProperties(changes, context, info) {
+            var importAdder = codefix.createImportAdder(context.sourceFile, context.program, context.preferences, context.host);
+            var quotePreference = ts.getQuotePreference(context.sourceFile, context.preferences);
+            var checker = context.program.getTypeChecker();
+            var props = ts.map(info.properties, function (prop) {
+                var initializer = prop.valueDeclaration ? tryGetValueFromType(context, checker, importAdder, quotePreference, checker.getTypeAtLocation(prop.valueDeclaration)) : createUndefined();
+                return ts.factory.createPropertyAssignment(prop.name, initializer);
+            });
+            changes.replaceNode(context.sourceFile, info.parentDeclaration, ts.factory.createObjectLiteralExpression(__spreadArray(__spreadArray([], info.parentDeclaration.properties, true), props, true), /*multiLine*/ true));
+        }
+        function tryGetValueFromType(context, checker, importAdder, quotePreference, type) {
+            if (type.flags & 3 /* AnyOrUnknown */) {
+                return createUndefined();
+            }
+            if (type.flags & (4 /* String */ | 134217728 /* TemplateLiteral */)) {
+                return ts.factory.createStringLiteral("", /* isSingleQuote */ quotePreference === 0 /* Single */);
+            }
+            if (type.flags & 8 /* Number */) {
+                return ts.factory.createNumericLiteral(0);
+            }
+            if (type.flags & 64 /* BigInt */) {
+                return ts.factory.createBigIntLiteral("0n");
+            }
+            if (type.flags & 16 /* Boolean */) {
+                return ts.factory.createFalse();
+            }
+            if (type.flags & 1056 /* EnumLike */) {
+                var enumMember = type.symbol.exports ? ts.firstOrUndefined(ts.arrayFrom(type.symbol.exports.values())) : type.symbol;
+                var name = checker.symbolToExpression(type.symbol.parent ? type.symbol.parent : type.symbol, 111551 /* Value */, /*enclosingDeclaration*/ undefined, /*flags*/ undefined);
+                return enumMember === undefined || name === undefined ? ts.factory.createNumericLiteral(0) : ts.factory.createPropertyAccessExpression(name, checker.symbolToString(enumMember));
+            }
+            if (type.flags & 256 /* NumberLiteral */) {
+                return ts.factory.createNumericLiteral(type.value);
+            }
+            if (type.flags & 2048 /* BigIntLiteral */) {
+                return ts.factory.createBigIntLiteral(type.value);
+            }
+            if (type.flags & 128 /* StringLiteral */) {
+                return ts.factory.createStringLiteral(type.value, /* isSingleQuote */ quotePreference === 0 /* Single */);
+            }
+            if (type.flags & 512 /* BooleanLiteral */) {
+                return (type === checker.getFalseType() || type === checker.getFalseType(/*fresh*/ true)) ? ts.factory.createFalse() : ts.factory.createTrue();
+            }
+            if (type.flags & 65536 /* Null */) {
+                return ts.factory.createNull();
+            }
+            if (type.flags & 1048576 /* Union */) {
+                var expression = ts.firstDefined(type.types, function (t) { return tryGetValueFromType(context, checker, importAdder, quotePreference, t); });
+                return expression !== null && expression !== void 0 ? expression : createUndefined();
+            }
+            if (checker.isArrayLikeType(type)) {
+                return ts.factory.createArrayLiteralExpression();
+            }
+            if (isObjectLiteralType(type)) {
+                var props = ts.map(checker.getPropertiesOfType(type), function (prop) {
+                    var initializer = prop.valueDeclaration ? tryGetValueFromType(context, checker, importAdder, quotePreference, checker.getTypeAtLocation(prop.valueDeclaration)) : createUndefined();
+                    return ts.factory.createPropertyAssignment(prop.name, initializer);
+                });
+                return ts.factory.createObjectLiteralExpression(props, /*multiLine*/ true);
+            }
+            if (ts.getObjectFlags(type) & 16 /* Anonymous */) {
+                var decl = ts.find(type.symbol.declarations || ts.emptyArray, ts.or(ts.isFunctionTypeNode, ts.isMethodSignature, ts.isMethodDeclaration));
+                if (decl === undefined)
+                    return createUndefined();
+                var signature = checker.getSignaturesOfType(type, 0 /* Call */);
+                if (signature === undefined)
+                    return createUndefined();
+                var func = codefix.createSignatureDeclarationFromSignature(211 /* FunctionExpression */, context, quotePreference, signature[0], codefix.createStubbedBody(ts.Diagnostics.Function_not_implemented.message, quotePreference), /*name*/ undefined, /*modifiers*/ undefined, /*optional*/ undefined, /*enclosingDeclaration*/ undefined, importAdder);
+                return func !== null && func !== void 0 ? func : createUndefined();
+            }
+            if (ts.getObjectFlags(type) & 1 /* Class */) {
+                var classDeclaration = ts.getClassLikeDeclarationOfSymbol(type.symbol);
+                if (classDeclaration === undefined || ts.hasAbstractModifier(classDeclaration))
+                    return createUndefined();
+                var constructorDeclaration = ts.getFirstConstructorWithBody(classDeclaration);
+                if (constructorDeclaration && ts.length(constructorDeclaration.parameters))
+                    return createUndefined();
+                return ts.factory.createNewExpression(ts.factory.createIdentifier(type.symbol.name), /*typeArguments*/ undefined, /*argumentsArray*/ undefined);
+            }
+            return createUndefined();
+        }
+        function createUndefined() {
+            return ts.factory.createIdentifier("undefined");
+        }
+        function isObjectLiteralType(type) {
+            return (type.flags & 524288 /* Object */) &&
+                ((ts.getObjectFlags(type) & 128 /* ObjectLiteral */) || (type.symbol && ts.tryCast(ts.singleOrUndefined(type.symbol.declarations), ts.isTypeLiteralNode)));
+        }
+        function getUnmatchedAttributes(checker, source) {
+            var attrsType = checker.getContextualType(source.attributes);
+            if (attrsType === undefined)
+                return ts.emptyArray;
+            var targetProps = attrsType.getProperties();
+            if (!ts.length(targetProps))
+                return ts.emptyArray;
+            var seenNames = new ts.Set();
+            for (var _i = 0, _a = source.attributes.properties; _i < _a.length; _i++) {
+                var sourceProp = _a[_i];
+                if (ts.isJsxAttribute(sourceProp)) {
+                    seenNames.add(sourceProp.name.escapedText);
+                }
+                if (ts.isJsxSpreadAttribute(sourceProp)) {
+                    var type = checker.getTypeAtLocation(sourceProp.expression);
+                    for (var _b = 0, _c = type.getProperties(); _b < _c.length; _b++) {
+                        var prop = _c[_b];
+                        seenNames.add(prop.escapedName);
+                    }
+                }
+            }
+            return ts.filter(targetProps, function (targetProp) {
+                return !((targetProp.flags & 16777216 /* Optional */ || ts.getCheckFlags(targetProp) & 48 /* Partial */) || seenNames.has(targetProp.escapedName));
+            });
+        }
     })(codefix = ts.codefix || (ts.codefix = {}));
 })(ts || (ts = {}));
 /* @internal */
@@ -144397,7 +147756,7 @@
         }
         function getNodes(sourceFile, pos) {
             var token = ts.getTokenAtPosition(sourceFile, pos);
-            if (token.kind !== 107 /* ThisKeyword */)
+            if (token.kind !== 108 /* ThisKeyword */)
                 return undefined;
             var constructor = ts.getContainingFunction(token);
             var superCall = findSuperCall(constructor.body);
@@ -144620,14 +147979,14 @@
             var token = ts.getTokenAtPosition(sourceFile, pos);
             var heritageClauses = ts.getContainingClass(token).heritageClauses;
             var extendsToken = heritageClauses[0].getFirstToken();
-            return extendsToken.kind === 93 /* ExtendsKeyword */ ? { extendsToken: extendsToken, heritageClauses: heritageClauses } : undefined;
+            return extendsToken.kind === 94 /* ExtendsKeyword */ ? { extendsToken: extendsToken, heritageClauses: heritageClauses } : undefined;
         }
         function doChanges(changes, sourceFile, extendsToken, heritageClauses) {
-            changes.replaceNode(sourceFile, extendsToken, ts.factory.createToken(116 /* ImplementsKeyword */));
+            changes.replaceNode(sourceFile, extendsToken, ts.factory.createToken(117 /* ImplementsKeyword */));
             // If there is already an implements clause, replace the implements keyword with a comma.
             if (heritageClauses.length === 2 &&
-                heritageClauses[0].token === 93 /* ExtendsKeyword */ &&
-                heritageClauses[1].token === 116 /* ImplementsKeyword */) {
+                heritageClauses[0].token === 94 /* ExtendsKeyword */ &&
+                heritageClauses[1].token === 117 /* ImplementsKeyword */) {
                 var implementsToken = heritageClauses[1].getFirstToken();
                 var implementsFullStart = implementsToken.getFullStart();
                 changes.replaceRange(sourceFile, { pos: implementsFullStart, end: implementsFullStart }, ts.factory.createToken(27 /* CommaToken */));
@@ -144803,7 +148162,7 @@
                     ];
                 }
                 var result = [];
-                if (token.kind === 135 /* InferKeyword */) {
+                if (token.kind === 136 /* InferKeyword */) {
                     var changes = ts.textChanges.ChangeTracker.with(context, function (t) { return changeInferToUnknown(t, sourceFile, token); });
                     var name = ts.cast(token.parent, ts.isInferTypeNode).typeParameter.name.text;
                     result.push(codefix.createCodeFixAction(fixName, changes, [ts.Diagnostics.Replace_infer_0_with_unknown, name], fixIdInfer, ts.Diagnostics.Replace_all_unused_infer_with_unknown));
@@ -144845,7 +148204,7 @@
                             break;
                         }
                         case fixIdDelete: {
-                            if (token.kind === 135 /* InferKeyword */ || isImport(token)) {
+                            if (token.kind === 136 /* InferKeyword */ || isImport(token)) {
                                 break; // Can't delete
                             }
                             else if (ts.isJSDocTemplateTag(token)) {
@@ -144874,7 +148233,7 @@
                             break;
                         }
                         case fixIdInfer:
-                            if (token.kind === 135 /* InferKeyword */) {
+                            if (token.kind === 136 /* InferKeyword */) {
                                 changeInferToUnknown(changes, sourceFile, token);
                             }
                             break;
@@ -144885,7 +148244,7 @@
             },
         });
         function changeInferToUnknown(changes, sourceFile, token) {
-            changes.replaceNode(sourceFile, token.parent, ts.factory.createKeywordTypeNode(152 /* UnknownKeyword */));
+            changes.replaceNode(sourceFile, token.parent, ts.factory.createKeywordTypeNode(153 /* UnknownKeyword */));
         }
         function createDeleteFix(changes, diag) {
             return codefix.createCodeFixAction(fixName, changes, diag, fixIdDelete, ts.Diagnostics.Delete_all_unused_declarations);
@@ -144894,18 +148253,18 @@
             changes.delete(sourceFile, ts.Debug.checkDefined(ts.cast(token.parent, ts.isDeclarationWithTypeParameterChildren).typeParameters, "The type parameter to delete should exist"));
         }
         function isImport(token) {
-            return token.kind === 99 /* ImportKeyword */
-                || token.kind === 78 /* Identifier */ && (token.parent.kind === 266 /* ImportSpecifier */ || token.parent.kind === 263 /* ImportClause */);
+            return token.kind === 100 /* ImportKeyword */
+                || token.kind === 79 /* Identifier */ && (token.parent.kind === 268 /* ImportSpecifier */ || token.parent.kind === 265 /* ImportClause */);
         }
         /** Sometimes the diagnostic span is an entire ImportDeclaration, so we should remove the whole thing. */
         function tryGetFullImport(token) {
-            return token.kind === 99 /* ImportKeyword */ ? ts.tryCast(token.parent, ts.isImportDeclaration) : undefined;
+            return token.kind === 100 /* ImportKeyword */ ? ts.tryCast(token.parent, ts.isImportDeclaration) : undefined;
         }
         function canDeleteEntireVariableStatement(sourceFile, token) {
             return ts.isVariableDeclarationList(token.parent) && ts.first(token.parent.getChildren(sourceFile)) === token;
         }
         function deleteEntireVariableStatement(changes, sourceFile, node) {
-            changes.delete(sourceFile, node.parent.kind === 233 /* VariableStatement */ ? node.parent : node);
+            changes.delete(sourceFile, node.parent.kind === 235 /* VariableStatement */ ? node.parent : node);
         }
         function deleteDestructuringElements(changes, sourceFile, node) {
             ts.forEach(node.elements, function (n) { return changes.delete(sourceFile, n); });
@@ -144914,7 +148273,7 @@
             // Don't offer to prefix a property.
             if (errorCode === ts.Diagnostics.Property_0_is_declared_but_its_value_is_never_read.code)
                 return;
-            if (token.kind === 135 /* InferKeyword */) {
+            if (token.kind === 136 /* InferKeyword */) {
                 token = ts.cast(token.parent, ts.isInferTypeNode).typeParameter.name;
             }
             if (ts.isIdentifier(token) && canPrefix(token)) {
@@ -144930,14 +148289,14 @@
         }
         function canPrefix(token) {
             switch (token.parent.kind) {
-                case 161 /* Parameter */:
-                case 160 /* TypeParameter */:
+                case 162 /* Parameter */:
+                case 161 /* TypeParameter */:
                     return true;
-                case 250 /* VariableDeclaration */: {
+                case 252 /* VariableDeclaration */: {
                     var varDecl = token.parent;
                     switch (varDecl.parent.parent.kind) {
-                        case 240 /* ForOfStatement */:
-                        case 239 /* ForInStatement */:
+                        case 242 /* ForOfStatement */:
+                        case 241 /* ForInStatement */:
                             return true;
                     }
                 }
@@ -144987,8 +148346,8 @@
         function mayDeleteParameter(checker, sourceFile, parameter, sourceFiles, program, cancellationToken, isFixAll) {
             var parent = parameter.parent;
             switch (parent.kind) {
-                case 166 /* MethodDeclaration */:
-                case 167 /* Constructor */:
+                case 167 /* MethodDeclaration */:
+                case 169 /* Constructor */:
                     var index = parent.parameters.indexOf(parameter);
                     var referent = ts.isMethodDeclaration(parent) ? parent.name : parent;
                     var entries = ts.FindAllReferences.Core.getReferencedSymbolsForNode(parent.pos, referent, program, sourceFiles, cancellationToken);
@@ -145018,17 +148377,17 @@
                         }
                     }
                     return true;
-                case 252 /* FunctionDeclaration */: {
+                case 254 /* FunctionDeclaration */: {
                     if (parent.name && isCallbackLike(checker, sourceFile, parent.name)) {
                         return isLastParameter(parent, parameter, isFixAll);
                     }
                     return true;
                 }
-                case 209 /* FunctionExpression */:
-                case 210 /* ArrowFunction */:
+                case 211 /* FunctionExpression */:
+                case 212 /* ArrowFunction */:
                     // Can't remove a non-last parameter in a callback. Can remove a parameter in code-fix-all if future parameters are also unused.
                     return isLastParameter(parent, parameter, isFixAll);
-                case 169 /* SetAccessor */:
+                case 171 /* SetAccessor */:
                     // Setter must have a parameter
                     return false;
                 default:
@@ -145086,7 +148445,7 @@
             var container = (ts.isBlock(statement.parent) ? statement.parent : statement).parent;
             if (!ts.isBlock(statement.parent) || statement === ts.first(statement.parent.statements)) {
                 switch (container.kind) {
-                    case 235 /* IfStatement */:
+                    case 237 /* IfStatement */:
                         if (container.elseStatement) {
                             if (ts.isBlock(statement.parent)) {
                                 break;
@@ -145097,8 +148456,8 @@
                             return;
                         }
                     // falls through
-                    case 237 /* WhileStatement */:
-                    case 238 /* ForStatement */:
+                    case 239 /* WhileStatement */:
+                    case 240 /* ForStatement */:
                         changes.delete(sourceFile, container);
                         return;
                 }
@@ -145171,7 +148530,7 @@
                 var typeNode = info.typeNode, type = info.type;
                 var original = typeNode.getText(sourceFile);
                 var actions = [fix(type, fixIdPlain, ts.Diagnostics.Change_all_jsdoc_style_types_to_TypeScript)];
-                if (typeNode.kind === 306 /* JSDocNullableType */) {
+                if (typeNode.kind === 309 /* JSDocNullableType */) {
                     // for nullable types, suggest the flow-compatible `T | null | undefined`
                     // in addition to the jsdoc/closure-compatible `T | null`
                     actions.push(fix(checker.getNullableType(type, 32768 /* Undefined */), fixIdNullable, ts.Diagnostics.Change_all_jsdoc_style_types_to_TypeScript_and_add_undefined_to_nullable_types));
@@ -145191,7 +148550,7 @@
                     if (!info)
                         return;
                     var typeNode = info.typeNode, type = info.type;
-                    var fixedType = typeNode.kind === 306 /* JSDocNullableType */ && fixId === fixIdNullable ? checker.getNullableType(type, 32768 /* Undefined */) : type;
+                    var fixedType = typeNode.kind === 309 /* JSDocNullableType */ && fixId === fixIdNullable ? checker.getNullableType(type, 32768 /* Undefined */) : type;
                     doChange(changes, sourceFile, typeNode, fixedType, checker);
                 });
             }
@@ -145208,22 +148567,22 @@
             // NOTE: Some locations are not handled yet:
             // MappedTypeNode.typeParameters and SignatureDeclaration.typeParameters, as well as CallExpression.typeArguments
             switch (node.kind) {
-                case 225 /* AsExpression */:
-                case 170 /* CallSignature */:
-                case 171 /* ConstructSignature */:
-                case 252 /* FunctionDeclaration */:
-                case 168 /* GetAccessor */:
-                case 172 /* IndexSignature */:
-                case 191 /* MappedType */:
-                case 166 /* MethodDeclaration */:
-                case 165 /* MethodSignature */:
-                case 161 /* Parameter */:
-                case 164 /* PropertyDeclaration */:
-                case 163 /* PropertySignature */:
-                case 169 /* SetAccessor */:
-                case 255 /* TypeAliasDeclaration */:
-                case 207 /* TypeAssertionExpression */:
-                case 250 /* VariableDeclaration */:
+                case 227 /* AsExpression */:
+                case 172 /* CallSignature */:
+                case 173 /* ConstructSignature */:
+                case 254 /* FunctionDeclaration */:
+                case 170 /* GetAccessor */:
+                case 174 /* IndexSignature */:
+                case 193 /* MappedType */:
+                case 167 /* MethodDeclaration */:
+                case 166 /* MethodSignature */:
+                case 162 /* Parameter */:
+                case 165 /* PropertyDeclaration */:
+                case 164 /* PropertySignature */:
+                case 171 /* SetAccessor */:
+                case 257 /* TypeAliasDeclaration */:
+                case 209 /* TypeAssertionExpression */:
+                case 252 /* VariableDeclaration */:
                     return true;
                 default:
                     return false;
@@ -145325,14 +148684,14 @@
             }
             var insertBefore;
             switch (containingFunction.kind) {
-                case 166 /* MethodDeclaration */:
+                case 167 /* MethodDeclaration */:
                     insertBefore = containingFunction.name;
                     break;
-                case 252 /* FunctionDeclaration */:
-                case 209 /* FunctionExpression */:
-                    insertBefore = ts.findChildOfKind(containingFunction, 97 /* FunctionKeyword */, sourceFile);
+                case 254 /* FunctionDeclaration */:
+                case 211 /* FunctionExpression */:
+                    insertBefore = ts.findChildOfKind(containingFunction, 98 /* FunctionKeyword */, sourceFile);
                     break;
-                case 210 /* ArrowFunction */:
+                case 212 /* ArrowFunction */:
                     insertBefore = ts.findChildOfKind(containingFunction, 20 /* OpenParenToken */, sourceFile) || ts.first(containingFunction.parameters);
                     break;
                 default:
@@ -145347,11 +148706,11 @@
             var insertBefore = _a.insertBefore, returnType = _a.returnType;
             if (returnType) {
                 var entityName = ts.getEntityNameFromTypeNode(returnType);
-                if (!entityName || entityName.kind !== 78 /* Identifier */ || entityName.text !== "Promise") {
+                if (!entityName || entityName.kind !== 79 /* Identifier */ || entityName.text !== "Promise") {
                     changes.replaceNode(sourceFile, returnType, ts.factory.createTypeReferenceNode("Promise", ts.factory.createNodeArray([returnType])));
                 }
             }
-            changes.insertModifierBefore(sourceFile, 129 /* AsyncKeyword */, insertBefore);
+            changes.insertModifierBefore(sourceFile, 130 /* AsyncKeyword */, insertBefore);
         }
     })(codefix = ts.codefix || (ts.codefix = {}));
 })(ts || (ts = {}));
@@ -145511,7 +148870,7 @@
             return errorCode;
         }
         function doChange(changes, sourceFile, token, errorCode, program, cancellationToken, markSeen, host, preferences) {
-            if (!ts.isParameterPropertyModifier(token.kind) && token.kind !== 78 /* Identifier */ && token.kind !== 25 /* DotDotDotToken */ && token.kind !== 107 /* ThisKeyword */) {
+            if (!ts.isParameterPropertyModifier(token.kind) && token.kind !== 79 /* Identifier */ && token.kind !== 25 /* DotDotDotToken */ && token.kind !== 108 /* ThisKeyword */) {
                 return undefined;
             }
             var parent = token.parent;
@@ -145665,7 +149024,7 @@
         function annotate(changes, importAdder, sourceFile, declaration, type, program, host) {
             var typeNode = ts.getTypeNodeIfAccessible(type, declaration, program, host);
             if (typeNode) {
-                if (ts.isInJSFile(sourceFile) && declaration.kind !== 163 /* PropertySignature */) {
+                if (ts.isInJSFile(sourceFile) && declaration.kind !== 164 /* PropertySignature */) {
                     var parent = ts.isVariableDeclaration(declaration) ? ts.tryCast(declaration.parent.parent, ts.isVariableStatement) : declaration;
                     if (!parent) {
                         return;
@@ -145740,15 +149099,15 @@
                     oldTags[i] = merged;
                 return !!merged;
             }); });
-            var tag = ts.factory.createJSDocComment(ts.factory.createNodeArray(ts.intersperse(comments, ts.factory.createJSDocText("\n"))), ts.factory.createNodeArray(__spreadArray(__spreadArray([], (oldTags || ts.emptyArray)), unmergedNewTags)));
-            var jsDocNode = parent.kind === 210 /* ArrowFunction */ ? getJsDocNodeForArrowFunction(parent) : parent;
+            var tag = ts.factory.createJSDocComment(ts.factory.createNodeArray(ts.intersperse(comments, ts.factory.createJSDocText("\n"))), ts.factory.createNodeArray(__spreadArray(__spreadArray([], (oldTags || ts.emptyArray), true), unmergedNewTags, true)));
+            var jsDocNode = parent.kind === 212 /* ArrowFunction */ ? getJsDocNodeForArrowFunction(parent) : parent;
             jsDocNode.jsDoc = parent.jsDoc;
             jsDocNode.jsDocCache = parent.jsDocCache;
             changes.insertJsdocCommentBefore(sourceFile, jsDocNode, tag);
         }
         codefix.addJSDocTags = addJSDocTags;
         function getJsDocNodeForArrowFunction(signature) {
-            if (signature.parent.kind === 164 /* PropertyDeclaration */) {
+            if (signature.parent.kind === 165 /* PropertyDeclaration */) {
                 return signature.parent;
             }
             return signature.parent.parent;
@@ -145758,14 +149117,14 @@
                 return undefined;
             }
             switch (oldTag.kind) {
-                case 330 /* JSDocParameterTag */: {
+                case 335 /* JSDocParameterTag */: {
                     var oldParam = oldTag;
                     var newParam = newTag;
                     return ts.isIdentifier(oldParam.name) && ts.isIdentifier(newParam.name) && oldParam.name.escapedText === newParam.name.escapedText
                         ? ts.factory.createJSDocParameterTag(/*tagName*/ undefined, newParam.name, /*isBracketed*/ false, newParam.typeExpression, newParam.isNameFirst, oldParam.comment)
                         : undefined;
                 }
-                case 331 /* JSDocReturnTag */:
+                case 336 /* JSDocReturnTag */:
                     return ts.factory.createJSDocReturnTag(/*tagName*/ undefined, newTag.typeExpression, oldTag.comment);
             }
         }
@@ -145790,19 +149149,19 @@
         function getFunctionReferences(containingFunction, sourceFile, program, cancellationToken) {
             var searchToken;
             switch (containingFunction.kind) {
-                case 167 /* Constructor */:
-                    searchToken = ts.findChildOfKind(containingFunction, 132 /* ConstructorKeyword */, sourceFile);
+                case 169 /* Constructor */:
+                    searchToken = ts.findChildOfKind(containingFunction, 133 /* ConstructorKeyword */, sourceFile);
                     break;
-                case 210 /* ArrowFunction */:
-                case 209 /* FunctionExpression */:
+                case 212 /* ArrowFunction */:
+                case 211 /* FunctionExpression */:
                     var parent = containingFunction.parent;
                     searchToken = (ts.isVariableDeclaration(parent) || ts.isPropertyDeclaration(parent)) && ts.isIdentifier(parent.name) ?
                         parent.name :
                         containingFunction.name;
                     break;
-                case 252 /* FunctionDeclaration */:
-                case 166 /* MethodDeclaration */:
-                case 165 /* MethodSignature */:
+                case 254 /* FunctionDeclaration */:
+                case 167 /* MethodDeclaration */:
+                case 166 /* MethodSignature */:
                     searchToken = containingFunction.name;
                     break;
             }
@@ -145889,7 +149248,7 @@
                     cancellationToken.throwIfCancellationRequested();
                     calculateUsageOfNode(reference, usage);
                 }
-                var calls = __spreadArray(__spreadArray([], usage.constructs || []), usage.calls || []);
+                var calls = __spreadArray(__spreadArray([], usage.constructs || [], true), usage.calls || [], true);
                 return declaration.parameters.map(function (parameter, parameterIndex) {
                     var types = [];
                     var isRest = ts.isRestParameter(parameter);
@@ -145944,24 +149303,24 @@
                     node = node.parent;
                 }
                 switch (node.parent.kind) {
-                    case 234 /* ExpressionStatement */:
+                    case 236 /* ExpressionStatement */:
                         inferTypeFromExpressionStatement(node, usage);
                         break;
-                    case 216 /* PostfixUnaryExpression */:
+                    case 218 /* PostfixUnaryExpression */:
                         usage.isNumber = true;
                         break;
-                    case 215 /* PrefixUnaryExpression */:
+                    case 217 /* PrefixUnaryExpression */:
                         inferTypeFromPrefixUnaryExpression(node.parent, usage);
                         break;
-                    case 217 /* BinaryExpression */:
+                    case 219 /* BinaryExpression */:
                         inferTypeFromBinaryExpression(node, node.parent, usage);
                         break;
-                    case 285 /* CaseClause */:
-                    case 286 /* DefaultClause */:
+                    case 287 /* CaseClause */:
+                    case 288 /* DefaultClause */:
                         inferTypeFromSwitchStatementLabel(node.parent, usage);
                         break;
-                    case 204 /* CallExpression */:
-                    case 205 /* NewExpression */:
+                    case 206 /* CallExpression */:
+                    case 207 /* NewExpression */:
                         if (node.parent.expression === node) {
                             inferTypeFromCallExpression(node.parent, usage);
                         }
@@ -145969,20 +149328,20 @@
                             inferTypeFromContextualType(node, usage);
                         }
                         break;
-                    case 202 /* PropertyAccessExpression */:
+                    case 204 /* PropertyAccessExpression */:
                         inferTypeFromPropertyAccessExpression(node.parent, usage);
                         break;
-                    case 203 /* ElementAccessExpression */:
+                    case 205 /* ElementAccessExpression */:
                         inferTypeFromPropertyElementExpression(node.parent, node, usage);
                         break;
-                    case 289 /* PropertyAssignment */:
-                    case 290 /* ShorthandPropertyAssignment */:
+                    case 291 /* PropertyAssignment */:
+                    case 292 /* ShorthandPropertyAssignment */:
                         inferTypeFromPropertyAssignment(node.parent, usage);
                         break;
-                    case 164 /* PropertyDeclaration */:
+                    case 165 /* PropertyDeclaration */:
                         inferTypeFromPropertyDeclaration(node.parent, usage);
                         break;
-                    case 250 /* VariableDeclaration */: {
+                    case 252 /* VariableDeclaration */: {
                         var _a = node.parent, name = _a.name, initializer = _a.initializer;
                         if (node === name) {
                             if (initializer) { // This can happen for `let x = null;` which still has an implicit-any error.
@@ -146040,17 +149399,17 @@
                     case 52 /* CaretToken */:
                     // CompoundAssignmentOperator
                     // falls through
-                    case 64 /* MinusEqualsToken */:
-                    case 66 /* AsteriskAsteriskEqualsToken */:
-                    case 65 /* AsteriskEqualsToken */:
-                    case 67 /* SlashEqualsToken */:
-                    case 68 /* PercentEqualsToken */:
-                    case 72 /* AmpersandEqualsToken */:
-                    case 73 /* BarEqualsToken */:
-                    case 77 /* CaretEqualsToken */:
-                    case 69 /* LessThanLessThanEqualsToken */:
-                    case 71 /* GreaterThanGreaterThanGreaterThanEqualsToken */:
-                    case 70 /* GreaterThanGreaterThanEqualsToken */:
+                    case 65 /* MinusEqualsToken */:
+                    case 67 /* AsteriskAsteriskEqualsToken */:
+                    case 66 /* AsteriskEqualsToken */:
+                    case 68 /* SlashEqualsToken */:
+                    case 69 /* PercentEqualsToken */:
+                    case 73 /* AmpersandEqualsToken */:
+                    case 74 /* BarEqualsToken */:
+                    case 78 /* CaretEqualsToken */:
+                    case 70 /* LessThanLessThanEqualsToken */:
+                    case 72 /* GreaterThanGreaterThanGreaterThanEqualsToken */:
+                    case 71 /* GreaterThanGreaterThanEqualsToken */:
                     // AdditiveOperator
                     // falls through
                     case 40 /* MinusToken */:
@@ -146068,7 +149427,7 @@
                             usage.isNumber = true;
                         }
                         break;
-                    case 63 /* PlusEqualsToken */:
+                    case 64 /* PlusEqualsToken */:
                     case 39 /* PlusToken */:
                         var otherOperandType = checker.getTypeAtLocation(parent.left === node ? parent.right : parent.left);
                         if (otherOperandType.flags & 1056 /* EnumLike */) {
@@ -146088,14 +149447,14 @@
                         }
                         break;
                     //  AssignmentOperators
-                    case 62 /* EqualsToken */:
+                    case 63 /* EqualsToken */:
                     case 34 /* EqualsEqualsToken */:
                     case 36 /* EqualsEqualsEqualsToken */:
                     case 37 /* ExclamationEqualsEqualsToken */:
                     case 35 /* ExclamationEqualsToken */:
                         addCandidateType(usage, checker.getTypeAtLocation(parent.left === node ? parent.right : parent.left));
                         break;
-                    case 100 /* InKeyword */:
+                    case 101 /* InKeyword */:
                         if (node === parent.left) {
                             usage.isString = true;
                         }
@@ -146104,7 +149463,7 @@
                     case 56 /* BarBarToken */:
                     case 60 /* QuestionQuestionToken */:
                         if (node === parent.left &&
-                            (node.parent.parent.kind === 250 /* VariableDeclaration */ || ts.isAssignmentExpression(node.parent.parent, /*excludeCompoundAssignment*/ true))) {
+                            (node.parent.parent.kind === 252 /* VariableDeclaration */ || ts.isAssignmentExpression(node.parent.parent, /*excludeCompoundAssignment*/ true))) {
                             // var x = x || {};
                             // TODO: use getFalsyflagsOfType
                             addCandidateType(usage, checker.getTypeAtLocation(parent.right));
@@ -146112,7 +149471,7 @@
                         break;
                     case 55 /* AmpersandAmpersandToken */:
                     case 27 /* CommaToken */:
-                    case 101 /* InstanceOfKeyword */:
+                    case 102 /* InstanceOfKeyword */:
                         // nothing to infer here
                         break;
                 }
@@ -146132,7 +149491,7 @@
                     }
                 }
                 calculateUsageOfNode(parent, call.return_);
-                if (parent.kind === 204 /* CallExpression */) {
+                if (parent.kind === 206 /* CallExpression */) {
                     (usage.calls || (usage.calls = [])).push(call);
                 }
                 else {
@@ -146239,13 +149598,15 @@
                     }
                     calls.push.apply(calls, checker.getSignaturesOfType(anon, 0 /* Call */));
                     constructs.push.apply(constructs, checker.getSignaturesOfType(anon, 1 /* Construct */));
-                    if (anon.stringIndexInfo) {
-                        stringIndices.push(anon.stringIndexInfo.type);
-                        stringIndexReadonly = stringIndexReadonly || anon.stringIndexInfo.isReadonly;
+                    var stringIndexInfo = checker.getIndexInfoOfType(anon, 0 /* String */);
+                    if (stringIndexInfo) {
+                        stringIndices.push(stringIndexInfo.type);
+                        stringIndexReadonly = stringIndexReadonly || stringIndexInfo.isReadonly;
                     }
-                    if (anon.numberIndexInfo) {
-                        numberIndices.push(anon.numberIndexInfo.type);
-                        numberIndexReadonly = numberIndexReadonly || anon.numberIndexInfo.isReadonly;
+                    var numberIndexInfo = checker.getIndexInfoOfType(anon, 1 /* Number */);
+                    if (numberIndexInfo) {
+                        numberIndices.push(numberIndexInfo.type);
+                        numberIndexReadonly = numberIndexReadonly || numberIndexInfo.isReadonly;
                     }
                 }
                 var members = ts.mapEntries(props, function (name, types) {
@@ -146254,7 +149615,12 @@
                     s.type = checker.getUnionType(types);
                     return [name, s];
                 });
-                return checker.createAnonymousType(anons[0].symbol, members, calls, constructs, stringIndices.length ? checker.createIndexInfo(checker.getUnionType(stringIndices), stringIndexReadonly) : undefined, numberIndices.length ? checker.createIndexInfo(checker.getUnionType(numberIndices), numberIndexReadonly) : undefined);
+                var indexInfos = [];
+                if (stringIndices.length)
+                    indexInfos.push(checker.createIndexInfo(checker.getStringType(), checker.getUnionType(stringIndices), stringIndexReadonly));
+                if (numberIndices.length)
+                    indexInfos.push(checker.createIndexInfo(checker.getNumberType(), checker.getUnionType(numberIndices), numberIndexReadonly));
+                return checker.createAnonymousType(anons[0].symbol, members, calls, constructs, indexInfos);
             }
             function inferTypes(usage) {
                 var _a, _b, _c;
@@ -146289,8 +149655,8 @@
                 }
                 var callSignatures = usage.calls ? [getSignatureFromCalls(usage.calls)] : [];
                 var constructSignatures = usage.constructs ? [getSignatureFromCalls(usage.constructs)] : [];
-                var stringIndexInfo = usage.stringIndex && checker.createIndexInfo(combineFromUsage(usage.stringIndex), /*isReadonly*/ false);
-                return checker.createAnonymousType(/*symbol*/ undefined, members, callSignatures, constructSignatures, stringIndexInfo, /*numberIndexInfo*/ undefined);
+                var indexInfos = usage.stringIndex ? [checker.createIndexInfo(checker.getStringType(), combineFromUsage(usage.stringIndex), /*isReadonly*/ false)] : [];
+                return checker.createAnonymousType(/*symbol*/ undefined, members, callSignatures, constructSignatures, indexInfos);
             }
             function inferNamedTypesFromProperties(usage) {
                 if (!usage.properties || !usage.properties.size)
@@ -146391,7 +149757,7 @@
                 return types;
             }
             function getFunctionFromCalls(calls) {
-                return checker.createAnonymousType(/*symbol*/ undefined, ts.createSymbolTable(), [getSignatureFromCalls(calls)], ts.emptyArray, /*stringIndexInfo*/ undefined, /*numberIndexInfo*/ undefined);
+                return checker.createAnonymousType(/*symbol*/ undefined, ts.createSymbolTable(), [getSignatureFromCalls(calls)], ts.emptyArray, ts.emptyArray);
             }
             function getSignatureFromCalls(calls) {
                 var parameters = [];
@@ -146408,7 +149774,6 @@
                     _loop_15(i);
                 }
                 var returnType = combineFromUsage(combineUsages(calls.map(function (call) { return call.return_; })));
-                // TODO: GH#18217
                 return checker.createSignature(/*declaration*/ undefined, /*typeParameters*/ undefined, /*thisParameter*/ undefined, parameters, returnType, /*typePredicate*/ undefined, length, 0 /* None */);
             }
             function addCandidateType(usage, type) {
@@ -146552,7 +149917,7 @@
         codefix.createMissingMemberNodes = createMissingMemberNodes;
         function getNoopSymbolTrackerWithResolver(context) {
             return {
-                trackSymbol: ts.noop,
+                trackSymbol: function () { return false; },
                 moduleResolverHost: ts.getModuleSpecifierResolverHost(context.program, context.host),
             };
         }
@@ -146576,8 +149941,8 @@
             var ambient = !!(enclosingDeclaration.flags & 8388608 /* Ambient */);
             var quotePreference = ts.getQuotePreference(sourceFile, preferences);
             switch (declaration.kind) {
-                case 163 /* PropertySignature */:
-                case 164 /* PropertyDeclaration */:
+                case 164 /* PropertySignature */:
+                case 165 /* PropertyDeclaration */:
                     var flags = quotePreference === 0 /* Single */ ? 268435456 /* UseSingleQuotesForStringLiteralType */ : undefined;
                     var typeNode = checker.typeToTypeNode(type, enclosingDeclaration, flags, getNoopSymbolTrackerWithResolver(context));
                     if (importAdder) {
@@ -146591,8 +149956,8 @@
                     /*decorators*/ undefined, modifiers, name, optional ? ts.factory.createToken(57 /* QuestionToken */) : undefined, typeNode, 
                     /*initializer*/ undefined));
                     break;
-                case 168 /* GetAccessor */:
-                case 169 /* SetAccessor */: {
+                case 170 /* GetAccessor */:
+                case 171 /* SetAccessor */: {
                     var typeNode_1 = checker.typeToTypeNode(type, enclosingDeclaration, /*flags*/ undefined, getNoopSymbolTrackerWithResolver(context));
                     var allAccessors = ts.getAllAccessorDeclarations(declarations, declaration);
                     var orderedAccessors = allAccessors.secondAccessor
@@ -146621,8 +149986,8 @@
                     }
                     break;
                 }
-                case 165 /* MethodSignature */:
-                case 166 /* MethodDeclaration */:
+                case 166 /* MethodSignature */:
+                case 167 /* MethodDeclaration */:
                     // The signature for the implementation appears as an entry in `signatures` iff
                     // there is only one signature.
                     // If there are overloads and an implementation signature, it appears as an
@@ -146642,7 +150007,7 @@
                     }
                     for (var _a = 0, signatures_1 = signatures; _a < signatures_1.length; _a++) {
                         var signature = signatures_1[_a];
-                        // Need to ensure nodes are fresh each time so they can have different positions.
+                        // Ensure nodes are fresh so they can have different positions when going through formatting.
                         outputMethod(quotePreference, signature, ts.getSynthesizedDeepClones(modifiers, /*includeTrivia*/ false), ts.getSynthesizedDeepClone(name, /*includeTrivia*/ false));
                     }
                     if (!ambient) {
@@ -146658,17 +150023,17 @@
                     break;
             }
             function outputMethod(quotePreference, signature, modifiers, name, body) {
-                var method = signatureToMethodDeclaration(context, quotePreference, signature, enclosingDeclaration, modifiers, name, optional, body, importAdder);
+                var method = createSignatureDeclarationFromSignature(167 /* MethodDeclaration */, context, quotePreference, signature, body, name, modifiers, optional, enclosingDeclaration, importAdder);
                 if (method)
                     addClassElement(method);
             }
         }
-        function signatureToMethodDeclaration(context, quotePreference, signature, enclosingDeclaration, modifiers, name, optional, body, importAdder) {
+        function createSignatureDeclarationFromSignature(kind, context, quotePreference, signature, body, name, modifiers, optional, enclosingDeclaration, importAdder) {
             var program = context.program;
             var checker = program.getTypeChecker();
             var scriptTarget = ts.getEmitScriptTarget(program.getCompilerOptions());
             var flags = 1 /* NoTruncation */ | 1073741824 /* NoUndefinedOptionalParameterType */ | 256 /* SuppressAnyReturnType */ | (quotePreference === 0 /* Single */ ? 268435456 /* UseSingleQuotesForStringLiteralType */ : 0);
-            var signatureDeclaration = checker.signatureToSignatureDeclaration(signature, 166 /* MethodDeclaration */, enclosingDeclaration, flags, getNoopSymbolTrackerWithResolver(context));
+            var signatureDeclaration = checker.signatureToSignatureDeclaration(signature, kind, enclosingDeclaration, flags, getNoopSymbolTrackerWithResolver(context));
             if (!signatureDeclaration) {
                 return undefined;
             }
@@ -146720,9 +150085,20 @@
                     }
                 }
             }
-            return ts.factory.updateMethodDeclaration(signatureDeclaration, 
-            /*decorators*/ undefined, modifiers, signatureDeclaration.asteriskToken, name, optional ? ts.factory.createToken(57 /* QuestionToken */) : undefined, typeParameters, parameters, type, body);
+            var questionToken = optional ? ts.factory.createToken(57 /* QuestionToken */) : undefined;
+            var asteriskToken = signatureDeclaration.asteriskToken;
+            if (ts.isFunctionExpression(signatureDeclaration)) {
+                return ts.factory.updateFunctionExpression(signatureDeclaration, modifiers, signatureDeclaration.asteriskToken, ts.tryCast(name, ts.isIdentifier), typeParameters, parameters, type, body !== null && body !== void 0 ? body : signatureDeclaration.body);
+            }
+            if (ts.isArrowFunction(signatureDeclaration)) {
+                return ts.factory.updateArrowFunction(signatureDeclaration, modifiers, typeParameters, parameters, type, signatureDeclaration.equalsGreaterThanToken, body !== null && body !== void 0 ? body : signatureDeclaration.body);
+            }
+            if (ts.isMethodDeclaration(signatureDeclaration)) {
+                return ts.factory.updateMethodDeclaration(signatureDeclaration, /* decorators */ undefined, modifiers, asteriskToken, name !== null && name !== void 0 ? name : ts.factory.createIdentifier(""), questionToken, typeParameters, parameters, type, body);
+            }
+            return undefined;
         }
+        codefix.createSignatureDeclarationFromSignature = createSignatureDeclarationFromSignature;
         function createSignatureDeclarationFromCallExpression(kind, context, importAdder, call, name, modifierFlags, contextNode) {
             var quotePreference = ts.getQuotePreference(context.sourceFile, context.preferences);
             var scriptTarget = ts.getEmitScriptTarget(context.program.getCompilerOptions());
@@ -146752,7 +150128,7 @@
             var type = isJs || contextualType === undefined
                 ? undefined
                 : checker.typeToTypeNode(contextualType, contextNode, /*flags*/ undefined, tracker);
-            if (kind === 166 /* MethodDeclaration */) {
+            if (kind === 167 /* MethodDeclaration */) {
                 return ts.factory.createMethodDeclaration(
                 /*decorators*/ undefined, modifiers, asteriskToken, name, 
                 /*questionToken*/ undefined, typeParameters, parameters, type, ts.isInterfaceDeclaration(contextNode) ? undefined : createStubbedMethodBody(quotePreference));
@@ -146767,10 +150143,11 @@
                 var importableReference = tryGetAutoImportableReferenceFromTypeNode(typeNode, scriptTarget);
                 if (importableReference) {
                     importSymbols(importAdder, importableReference.symbols);
-                    return importableReference.typeNode;
+                    typeNode = importableReference.typeNode;
                 }
             }
-            return typeNode;
+            // Ensure nodes are fresh so they can have different positions when going through formatting.
+            return ts.getSynthesizedDeepClone(typeNode);
         }
         codefix.typeToAutoImportableTypeNode = typeToAutoImportableTypeNode;
         function createDummyParameters(argCount, names, types, minArgumentCount, inJs) {
@@ -146782,7 +150159,7 @@
                 /*dotDotDotToken*/ undefined, 
                 /*name*/ names && names[i] || "arg" + i, 
                 /*questionToken*/ minArgumentCount !== undefined && i >= minArgumentCount ? ts.factory.createToken(57 /* QuestionToken */) : undefined, 
-                /*type*/ inJs ? undefined : types && types[i] || ts.factory.createKeywordTypeNode(128 /* AnyKeyword */), 
+                /*type*/ inJs ? undefined : types && types[i] || ts.factory.createKeywordTypeNode(129 /* AnyKeyword */), 
                 /*initializer*/ undefined);
                 parameters.push(newParameter);
             }
@@ -146810,7 +150187,7 @@
             var maxArgsParameterSymbolNames = maxArgsSignature.parameters.map(function (symbol) { return symbol.name; });
             var parameters = createDummyParameters(maxNonRestArgs, maxArgsParameterSymbolNames, /* types */ undefined, minArgumentCount, /*inJs*/ false);
             if (someSigHasRestParameter) {
-                var anyArrayType = ts.factory.createArrayTypeNode(ts.factory.createKeywordTypeNode(128 /* AnyKeyword */));
+                var anyArrayType = ts.factory.createArrayTypeNode(ts.factory.createKeywordTypeNode(129 /* AnyKeyword */));
                 var restParameter = ts.factory.createParameterDeclaration(
                 /*decorators*/ undefined, 
                 /*modifiers*/ undefined, ts.factory.createToken(25 /* DotDotDotToken */), maxArgsParameterSymbolNames[maxNonRestArgs] || "rest", 
@@ -146845,10 +150222,10 @@
         codefix.createStubbedBody = createStubbedBody;
         function createVisibilityModifier(flags) {
             if (flags & 4 /* Public */) {
-                return ts.factory.createToken(122 /* PublicKeyword */);
+                return ts.factory.createToken(123 /* PublicKeyword */);
             }
             else if (flags & 16 /* Protected */) {
-                return ts.factory.createToken(121 /* ProtectedKeyword */);
+                return ts.factory.createToken(122 /* ProtectedKeyword */);
             }
             return undefined;
         }
@@ -146921,7 +150298,7 @@
         }
         codefix.tryGetAutoImportableReferenceFromTypeNode = tryGetAutoImportableReferenceFromTypeNode;
         function replaceFirstIdentifierOfEntityName(name, newIdentifier) {
-            if (name.kind === 78 /* Identifier */) {
+            if (name.kind === 79 /* Identifier */) {
                 return newIdentifier;
             }
             return ts.factory.createQualifiedName(replaceFirstIdentifierOfEntityName(name.left, newIdentifier), name.right);
@@ -147037,7 +150414,7 @@
                 isStatic: ts.hasStaticModifier(declaration),
                 isReadonly: ts.hasEffectiveReadonlyModifier(declaration),
                 type: getDeclarationType(declaration, program),
-                container: declaration.kind === 161 /* Parameter */ ? declaration.parent.parent : declaration.parent,
+                container: declaration.kind === 162 /* Parameter */ ? declaration.parent.parent : declaration.parent,
                 originalName: declaration.name.text,
                 declaration: declaration,
                 fieldName: fieldName,
@@ -147093,13 +150470,13 @@
                 return;
             constructor.body.forEachChild(function recur(node) {
                 if (ts.isElementAccessExpression(node) &&
-                    node.expression.kind === 107 /* ThisKeyword */ &&
+                    node.expression.kind === 108 /* ThisKeyword */ &&
                     ts.isStringLiteral(node.argumentExpression) &&
                     node.argumentExpression.text === originalName &&
                     ts.isWriteAccess(node)) {
                     changeTracker.replaceNode(file, node.argumentExpression, ts.factory.createStringLiteral(fieldName));
                 }
-                if (ts.isPropertyAccessExpression(node) && node.expression.kind === 107 /* ThisKeyword */ && node.name.text === originalName && ts.isWriteAccess(node)) {
+                if (ts.isPropertyAccessExpression(node) && node.expression.kind === 108 /* ThisKeyword */ && node.name.text === originalName && ts.isWriteAccess(node)) {
                     changeTracker.replaceNode(file, node.name, ts.factory.createIdentifier(fieldName));
                 }
                 if (!ts.isFunctionLike(node) && !ts.isClassLike(node)) {
@@ -147114,7 +150491,7 @@
                 var type = typeChecker.getTypeFromTypeNode(typeNode);
                 if (!typeChecker.isTypeAssignableTo(typeChecker.getUndefinedType(), type)) {
                     var types = ts.isUnionTypeNode(typeNode) ? typeNode.types : [typeNode];
-                    return ts.factory.createUnionTypeNode(__spreadArray(__spreadArray([], types), [ts.factory.createKeywordTypeNode(150 /* UndefinedKeyword */)]));
+                    return ts.factory.createUnionTypeNode(__spreadArray(__spreadArray([], types, true), [ts.factory.createKeywordTypeNode(151 /* UndefinedKeyword */)], false));
                 }
             }
             return typeNode;
@@ -147173,7 +150550,7 @@
         });
         function getActionsForUsageOfInvalidImport(context) {
             var sourceFile = context.sourceFile;
-            var targetKind = ts.Diagnostics.This_expression_is_not_callable.code === context.errorCode ? 204 /* CallExpression */ : 205 /* NewExpression */;
+            var targetKind = ts.Diagnostics.This_expression_is_not_callable.code === context.errorCode ? 206 /* CallExpression */ : 207 /* NewExpression */;
             var node = ts.findAncestor(ts.getTokenAtPosition(sourceFile, context.span.start), function (a) { return a.kind === targetKind; });
             if (!node) {
                 return [];
@@ -147189,9 +150566,8 @@
                 ts.Diagnostics.Type_0_is_not_assignable_to_type_1.code,
                 ts.Diagnostics.Type_0_is_not_assignable_to_type_1_Two_different_types_with_this_name_exist_but_they_are_unrelated.code,
                 ts.Diagnostics.Type_predicate_0_is_not_assignable_to_1.code,
-                ts.Diagnostics.Property_0_of_type_1_is_not_assignable_to_string_index_type_2.code,
-                ts.Diagnostics.Property_0_of_type_1_is_not_assignable_to_numeric_index_type_2.code,
-                ts.Diagnostics.Numeric_index_type_0_is_not_assignable_to_string_index_type_1.code,
+                ts.Diagnostics.Property_0_of_type_1_is_not_assignable_to_2_index_type_3.code,
+                ts.Diagnostics._0_index_type_1_is_not_assignable_to_2_index_type_3.code,
                 ts.Diagnostics.Property_0_in_type_1_is_not_assignable_to_the_same_property_in_base_type_2.code,
                 ts.Diagnostics.Property_0_in_type_1_is_not_assignable_to_type_2.code,
                 ts.Diagnostics.Property_0_of_JSX_spread_attribute_is_not_assignable_to_target_property.code,
@@ -147218,8 +150594,8 @@
                 ts.addRange(fixes, getCodeFixesForImportDeclaration(context, relatedImport));
             }
             if (ts.isExpression(expr) && !(ts.isNamedDeclaration(expr.parent) && expr.parent.name === expr)) {
-                var sourceFile_1 = context.sourceFile;
-                var changes = ts.textChanges.ChangeTracker.with(context, function (t) { return t.replaceNode(sourceFile_1, expr, ts.factory.createPropertyAccessExpression(expr, "default"), {}); });
+                var sourceFile_2 = context.sourceFile;
+                var changes = ts.textChanges.ChangeTracker.with(context, function (t) { return t.replaceNode(sourceFile_2, expr, ts.factory.createPropertyAccessExpression(expr, "default"), {}); });
                 fixes.push(codefix.createCodeFixActionWithoutFixAll(fixName, changes, ts.Diagnostics.Use_synthetic_default_member));
             }
             return fixes;
@@ -147292,7 +150668,7 @@
             return codefix.createCodeFixAction(fixName, changes, [ts.Diagnostics.Add_undefined_type_to_property_0, propertyDeclaration.name.getText()], fixIdAddUndefinedType, ts.Diagnostics.Add_undefined_type_to_all_uninitialized_properties);
         }
         function addUndefinedType(changeTracker, propertyDeclarationSourceFile, propertyDeclaration) {
-            var undefinedTypeNode = ts.factory.createKeywordTypeNode(150 /* UndefinedKeyword */);
+            var undefinedTypeNode = ts.factory.createKeywordTypeNode(151 /* UndefinedKeyword */);
             var type = propertyDeclaration.type; // TODO: GH#18217
             var types = ts.isUnionTypeNode(type) ? type.types.concat(undefinedTypeNode) : [type, undefinedTypeNode];
             changeTracker.replaceNode(propertyDeclarationSourceFile, type, ts.factory.createUnionTypeNode(types));
@@ -147506,8 +150882,8 @@
         });
         function getImportTypeNode(sourceFile, pos) {
             var token = ts.getTokenAtPosition(sourceFile, pos);
-            ts.Debug.assert(token.kind === 99 /* ImportKeyword */, "This token should be an ImportKeyword");
-            ts.Debug.assert(token.parent.kind === 196 /* ImportType */, "Token parent should be an ImportType");
+            ts.Debug.assert(token.kind === 100 /* ImportKeyword */, "This token should be an ImportKeyword");
+            ts.Debug.assert(token.parent.kind === 198 /* ImportType */, "Token parent should be an ImportType");
             return token.parent;
         }
         function doChange(changes, sourceFile, importType) {
@@ -147526,10 +150902,6 @@
         codefix.registerCodeFix({
             errorCodes: errorCodes,
             getCodeActions: function (context) {
-                var jsx = context.program.getCompilerOptions().jsx;
-                if (jsx !== 2 /* React */ && jsx !== 3 /* ReactNative */) {
-                    return undefined;
-                }
                 var sourceFile = context.sourceFile, span = context.span;
                 var node = findNodeToFix(sourceFile, span.start);
                 if (!node)
@@ -147603,7 +150975,7 @@
     (function (codefix) {
         var fixIdAddMissingTypeof = "fixConvertToMappedObjectType";
         var fixId = fixIdAddMissingTypeof;
-        var errorCodes = [ts.Diagnostics.An_index_signature_parameter_type_cannot_be_a_union_type_Consider_using_a_mapped_object_type_instead.code];
+        var errorCodes = [ts.Diagnostics.An_index_signature_parameter_type_cannot_be_a_literal_type_or_generic_type_Consider_using_a_mapped_object_type_instead.code];
         codefix.registerCodeFix({
             errorCodes: errorCodes,
             getCodeActions: function (context) {
@@ -147639,11 +151011,11 @@
             var otherMembers = members.filter(function (member) { return !ts.isIndexSignatureDeclaration(member); });
             var parameter = ts.first(indexSignature.parameters);
             var mappedTypeParameter = ts.factory.createTypeParameterDeclaration(ts.cast(parameter.name, ts.isIdentifier), parameter.type);
-            var mappedIntersectionType = ts.factory.createMappedTypeNode(ts.hasEffectiveReadonlyModifier(indexSignature) ? ts.factory.createModifier(142 /* ReadonlyKeyword */) : undefined, mappedTypeParameter, 
+            var mappedIntersectionType = ts.factory.createMappedTypeNode(ts.hasEffectiveReadonlyModifier(indexSignature) ? ts.factory.createModifier(143 /* ReadonlyKeyword */) : undefined, mappedTypeParameter, 
             /*nameType*/ undefined, indexSignature.questionToken, indexSignature.type);
-            var intersectionType = ts.factory.createIntersectionTypeNode(__spreadArray(__spreadArray(__spreadArray([], ts.getAllSuperTypeNodes(container)), [
+            var intersectionType = ts.factory.createIntersectionTypeNode(__spreadArray(__spreadArray(__spreadArray([], ts.getAllSuperTypeNodes(container), true), [
                 mappedIntersectionType
-            ]), (otherMembers.length ? [ts.factory.createTypeLiteralNode(otherMembers)] : ts.emptyArray)));
+            ], false), (otherMembers.length ? [ts.factory.createTypeLiteralNode(otherMembers)] : ts.emptyArray), true));
             changes.replaceNode(sourceFile, container, createTypeAliasFromInterface(container, intersectionType));
         }
     })(codefix = ts.codefix || (ts.codefix = {}));
@@ -147696,7 +151068,7 @@
             },
         });
         function makeChange(changeTracker, sourceFile, span) {
-            var awaitKeyword = ts.tryCast(ts.getTokenAtPosition(sourceFile, span.start), function (node) { return node.kind === 130 /* AwaitKeyword */; });
+            var awaitKeyword = ts.tryCast(ts.getTokenAtPosition(sourceFile, span.start), function (node) { return node.kind === 131 /* AwaitKeyword */; });
             var awaitExpression = awaitKeyword && ts.tryCast(awaitKeyword.parent, ts.isAwaitExpression);
             if (!awaitExpression) {
                 return;
@@ -147707,7 +151079,7 @@
                 var leftMostExpression = ts.getLeftmostExpression(awaitExpression.expression, /*stopAtCallExpressions*/ false);
                 if (ts.isIdentifier(leftMostExpression)) {
                     var precedingToken = ts.findPrecedingToken(awaitExpression.parent.pos, sourceFile);
-                    if (precedingToken && precedingToken.kind !== 102 /* NewKeyword */) {
+                    if (precedingToken && precedingToken.kind !== 103 /* NewKeyword */) {
                         expressionToReplace = awaitExpression.parent;
                     }
                 }
@@ -147764,26 +151136,28 @@
             errorCodes: errorCodes,
             getCodeActions: function (context) {
                 var sourceFile = context.sourceFile, span = context.span, program = context.program;
-                var variableStatement = getVariableStatement(sourceFile, span.start, program);
-                var changes = ts.textChanges.ChangeTracker.with(context, function (t) { return doChange(t, sourceFile, variableStatement); });
+                var range = getConstTokenRange(sourceFile, span.start, program);
+                if (range === undefined)
+                    return;
+                var changes = ts.textChanges.ChangeTracker.with(context, function (t) { return doChange(t, sourceFile, range); });
                 return [codefix.createCodeFixAction(fixId, changes, ts.Diagnostics.Convert_const_to_let, fixId, ts.Diagnostics.Convert_const_to_let)];
             },
             fixIds: [fixId]
         });
-        function getVariableStatement(sourceFile, pos, program) {
-            var token = ts.getTokenAtPosition(sourceFile, pos);
+        function getConstTokenRange(sourceFile, pos, program) {
+            var _a;
             var checker = program.getTypeChecker();
-            var symbol = checker.getSymbolAtLocation(token);
-            if (symbol === null || symbol === void 0 ? void 0 : symbol.valueDeclaration) {
-                return symbol.valueDeclaration.parent.parent;
-            }
-        }
-        function doChange(changes, sourceFile, variableStatement) {
-            if (!variableStatement) {
+            var symbol = checker.getSymbolAtLocation(ts.getTokenAtPosition(sourceFile, pos));
+            var declaration = ts.tryCast((_a = symbol === null || symbol === void 0 ? void 0 : symbol.valueDeclaration) === null || _a === void 0 ? void 0 : _a.parent, ts.isVariableDeclarationList);
+            if (declaration === undefined)
                 return;
-            }
-            var start = variableStatement.getStart();
-            changes.replaceRangeWithText(sourceFile, { pos: start, end: start + 5 }, "let");
+            var constToken = ts.findChildOfKind(declaration, 85 /* ConstKeyword */, sourceFile);
+            if (constToken === undefined)
+                return;
+            return ts.createRange(constToken.pos, constToken.end);
+        }
+        function doChange(changes, sourceFile, range) {
+            changes.replaceRangeWithText(sourceFile, range, "let");
         }
     })(codefix = ts.codefix || (ts.codefix = {}));
 })(ts || (ts = {}));
@@ -147869,7 +151243,7 @@
                 // append ` | void` to type argument
                 var typeArgument = typeArguments[0];
                 var needsParens = !ts.isUnionTypeNode(typeArgument) && !ts.isParenthesizedTypeNode(typeArgument) &&
-                    ts.isParenthesizedTypeNode(ts.factory.createUnionTypeNode([typeArgument, ts.factory.createKeywordTypeNode(113 /* VoidKeyword */)]).types[0]);
+                    ts.isParenthesizedTypeNode(ts.factory.createUnionTypeNode([typeArgument, ts.factory.createKeywordTypeNode(114 /* VoidKeyword */)]).types[0]);
                 if (needsParens) {
                     changes.insertText(sourceFile, typeArgument.pos, "(");
                 }
@@ -147961,7 +151335,7 @@
         ;
         function getInfo(context, considerPartialSpans) {
             if (considerPartialSpans === void 0) { considerPartialSpans = true; }
-            var file = context.file;
+            var file = context.file, program = context.program;
             var span = ts.getRefactorContextSpan(context);
             var token = ts.getTokenAtPosition(file, span.start);
             var exportNode = !!(token.parent && ts.getSyntacticModifierFlags(token.parent) & 1 /* Export */) && considerPartialSpans ? token.parent : ts.getParentNodeInSpan(token, file, span);
@@ -147975,17 +151349,25 @@
             if (!(flags & 1 /* Export */) || !wasDefault && exportingModuleSymbol.exports.has("default" /* Default */)) {
                 return { error: ts.getLocaleSpecificMessage(ts.Diagnostics.This_file_already_has_a_default_export) };
             }
+            var checker = program.getTypeChecker();
+            var noSymbolError = function (id) {
+                return (ts.isIdentifier(id) && checker.getSymbolAtLocation(id)) ? undefined
+                    : { error: ts.getLocaleSpecificMessage(ts.Diagnostics.Can_only_convert_named_export) };
+            };
             switch (exportNode.kind) {
-                case 252 /* FunctionDeclaration */:
-                case 253 /* ClassDeclaration */:
-                case 254 /* InterfaceDeclaration */:
-                case 256 /* EnumDeclaration */:
-                case 255 /* TypeAliasDeclaration */:
-                case 257 /* ModuleDeclaration */: {
+                case 254 /* FunctionDeclaration */:
+                case 255 /* ClassDeclaration */:
+                case 256 /* InterfaceDeclaration */:
+                case 258 /* EnumDeclaration */:
+                case 257 /* TypeAliasDeclaration */:
+                case 259 /* ModuleDeclaration */: {
                     var node = exportNode;
-                    return node.name && ts.isIdentifier(node.name) ? { exportNode: node, exportName: node.name, wasDefault: wasDefault, exportingModuleSymbol: exportingModuleSymbol } : undefined;
+                    if (!node.name)
+                        return undefined;
+                    return noSymbolError(node.name)
+                        || { exportNode: node, exportName: node.name, wasDefault: wasDefault, exportingModuleSymbol: exportingModuleSymbol };
                 }
-                case 233 /* VariableStatement */: {
+                case 235 /* VariableStatement */: {
                     var vs = exportNode;
                     // Must be `export const x = something;`.
                     if (!(vs.declarationList.flags & 2 /* Const */) || vs.declarationList.declarations.length !== 1) {
@@ -147995,12 +151377,15 @@
                     if (!decl.initializer)
                         return undefined;
                     ts.Debug.assert(!wasDefault, "Can't have a default flag here");
-                    return ts.isIdentifier(decl.name) ? { exportNode: vs, exportName: decl.name, wasDefault: wasDefault, exportingModuleSymbol: exportingModuleSymbol } : undefined;
+                    return noSymbolError(decl.name)
+                        || { exportNode: vs, exportName: decl.name, wasDefault: wasDefault, exportingModuleSymbol: exportingModuleSymbol };
                 }
-                case 267 /* ExportAssignment */: {
+                case 269 /* ExportAssignment */: {
                     var node = exportNode;
-                    var exp = node.expression;
-                    return node.isExportEquals ? undefined : { exportNode: node, exportName: exp, wasDefault: wasDefault, exportingModuleSymbol: exportingModuleSymbol };
+                    if (node.isExportEquals)
+                        return undefined;
+                    return noSymbolError(node.expression)
+                        || { exportNode: node, exportName: node.expression, wasDefault: wasDefault, exportingModuleSymbol: exportingModuleSymbol };
                 }
                 default:
                     return undefined;
@@ -148019,18 +151404,18 @@
                     changes.replaceNode(exportingSourceFile, exportNode, ts.factory.createExportDeclaration(/*decorators*/ undefined, /*modifiers*/ undefined, /*isTypeOnly*/ false, ts.factory.createNamedExports([spec])));
                 }
                 else {
-                    changes.delete(exportingSourceFile, ts.Debug.checkDefined(ts.findModifier(exportNode, 87 /* DefaultKeyword */), "Should find a default keyword in modifier list"));
+                    changes.delete(exportingSourceFile, ts.Debug.checkDefined(ts.findModifier(exportNode, 88 /* DefaultKeyword */), "Should find a default keyword in modifier list"));
                 }
             }
             else {
-                var exportKeyword = ts.Debug.checkDefined(ts.findModifier(exportNode, 92 /* ExportKeyword */), "Should find an export keyword in modifier list");
+                var exportKeyword = ts.Debug.checkDefined(ts.findModifier(exportNode, 93 /* ExportKeyword */), "Should find an export keyword in modifier list");
                 switch (exportNode.kind) {
-                    case 252 /* FunctionDeclaration */:
-                    case 253 /* ClassDeclaration */:
-                    case 254 /* InterfaceDeclaration */:
-                        changes.insertNodeAfter(exportingSourceFile, exportKeyword, ts.factory.createToken(87 /* DefaultKeyword */));
+                    case 254 /* FunctionDeclaration */:
+                    case 255 /* ClassDeclaration */:
+                    case 256 /* InterfaceDeclaration */:
+                        changes.insertNodeAfter(exportingSourceFile, exportKeyword, ts.factory.createToken(88 /* DefaultKeyword */));
                         break;
-                    case 233 /* VariableStatement */:
+                    case 235 /* VariableStatement */:
                         // If 'x' isn't used in this file and doesn't have type definition, `export const x = 0;` --> `export default 0;`
                         var decl = ts.first(exportNode.declarationList.declarations);
                         if (!ts.FindAllReferences.Core.isSymbolReferencedInFile(exportName, checker, exportingSourceFile) && !decl.type) {
@@ -148039,9 +151424,9 @@
                             break;
                         }
                     // falls through
-                    case 256 /* EnumDeclaration */:
-                    case 255 /* TypeAliasDeclaration */:
-                    case 257 /* ModuleDeclaration */:
+                    case 258 /* EnumDeclaration */:
+                    case 257 /* TypeAliasDeclaration */:
+                    case 259 /* ModuleDeclaration */:
                         // `export type T = number;` -> `type T = number; export default T;`
                         changes.deleteModifier(exportingSourceFile, exportKeyword);
                         changes.insertNodeAfter(exportingSourceFile, exportNode, ts.factory.createExportDefault(ts.factory.createIdentifier(exportName.text)));
@@ -148068,18 +151453,18 @@
         function changeDefaultToNamedImport(importingSourceFile, ref, changes, exportName) {
             var parent = ref.parent;
             switch (parent.kind) {
-                case 202 /* PropertyAccessExpression */:
+                case 204 /* PropertyAccessExpression */:
                     // `a.default` --> `a.foo`
                     changes.replaceNode(importingSourceFile, ref, ts.factory.createIdentifier(exportName));
                     break;
-                case 266 /* ImportSpecifier */:
-                case 271 /* ExportSpecifier */: {
+                case 268 /* ImportSpecifier */:
+                case 273 /* ExportSpecifier */: {
                     var spec = parent;
                     // `default as foo` --> `foo`, `default as bar` --> `foo as bar`
                     changes.replaceNode(importingSourceFile, spec, makeImportSpecifier(exportName, spec.name.text));
                     break;
                 }
-                case 263 /* ImportClause */: {
+                case 265 /* ImportClause */: {
                     var clause = parent;
                     ts.Debug.assert(clause.name === ref, "Import clause name should match provided ref");
                     var spec = makeImportSpecifier(exportName, ref.text);
@@ -148088,7 +151473,7 @@
                         // `import foo from "./a";` --> `import { foo } from "./a";`
                         changes.replaceNode(importingSourceFile, ref, ts.factory.createNamedImports([spec]));
                     }
-                    else if (namedBindings.kind === 264 /* NamespaceImport */) {
+                    else if (namedBindings.kind === 266 /* NamespaceImport */) {
                         // `import foo, * as a from "./a";` --> `import * as a from ".a/"; import { foo } from "./a";`
                         changes.deleteRange(importingSourceFile, { pos: ref.getStart(importingSourceFile), end: namedBindings.getStart(importingSourceFile) });
                         var quotePreference = ts.isStringLiteral(clause.parent.moduleSpecifier) ? ts.quotePreferenceFromString(clause.parent.moduleSpecifier, importingSourceFile) : 1 /* Double */;
@@ -148109,11 +151494,11 @@
         function changeNamedToDefaultImport(importingSourceFile, ref, changes) {
             var parent = ref.parent;
             switch (parent.kind) {
-                case 202 /* PropertyAccessExpression */:
+                case 204 /* PropertyAccessExpression */:
                     // `a.foo` --> `a.default`
                     changes.replaceNode(importingSourceFile, ref, ts.factory.createIdentifier("default"));
                     break;
-                case 266 /* ImportSpecifier */: {
+                case 268 /* ImportSpecifier */: {
                     // `import { foo } from "./a";` --> `import foo from "./a";`
                     // `import { foo as bar } from "./a";` --> `import bar from "./a";`
                     var defaultImport = ts.factory.createIdentifier(parent.name.text);
@@ -148126,7 +151511,7 @@
                     }
                     break;
                 }
-                case 271 /* ExportSpecifier */: {
+                case 273 /* ExportSpecifier */: {
                     // `export { foo } from "./a";` --> `export { default as foo } from "./a";`
                     // `export { foo as bar } from "./a";` --> `export { default as bar } from "./a";`
                     // `export { foo as default } from "./a";` --> `export { default } from "./a";`
@@ -148172,7 +151557,7 @@
                 if (!info)
                     return ts.emptyArray;
                 if (!refactor.isRefactorErrorInfo(info)) {
-                    var namespaceImport = info.kind === 264 /* NamespaceImport */;
+                    var namespaceImport = info.kind === 266 /* NamespaceImport */;
                     var action = namespaceImport ? namespaceToNamedAction : namedToNamespaceAction;
                     return [{ name: refactorName, description: action.description, actions: [action] }];
                 }
@@ -148216,7 +151601,7 @@
         }
         function doChange(sourceFile, program, changes, toConvert) {
             var checker = program.getTypeChecker();
-            if (toConvert.kind === 264 /* NamespaceImport */) {
+            if (toConvert.kind === 266 /* NamespaceImport */) {
                 doChangeNamespaceToNamed(sourceFile, checker, changes, toConvert, ts.getAllowSyntheticDefaultImports(program.getCompilerOptions()));
             }
             else {
@@ -148273,14 +151658,35 @@
         function doChangeNamedToNamespace(sourceFile, checker, changes, toConvert) {
             var importDecl = toConvert.parent.parent;
             var moduleSpecifier = importDecl.moduleSpecifier;
-            var preferredName = moduleSpecifier && ts.isStringLiteral(moduleSpecifier) ? ts.codefix.moduleSpecifierToValidIdentifier(moduleSpecifier.text, 99 /* ESNext */) : "module";
-            var namespaceNameConflicts = toConvert.elements.some(function (element) {
-                return ts.FindAllReferences.Core.eachSymbolReferenceInFile(element.name, checker, sourceFile, function (id) {
-                    return !!checker.resolveName(preferredName, id, 67108863 /* All */, /*excludeGlobals*/ true);
-                }) || false;
+            var toConvertSymbols = new ts.Set();
+            toConvert.elements.forEach(function (namedImport) {
+                var symbol = checker.getSymbolAtLocation(namedImport.name);
+                if (symbol) {
+                    toConvertSymbols.add(symbol);
+                }
             });
+            var preferredName = moduleSpecifier && ts.isStringLiteral(moduleSpecifier) ? ts.codefix.moduleSpecifierToValidIdentifier(moduleSpecifier.text, 99 /* ESNext */) : "module";
+            function hasNamespaceNameConflict(namedImport) {
+                // We need to check if the preferred namespace name (`preferredName`) we'd like to use in the refactored code will present a name conflict.
+                // A name conflict means that, in a scope where we would like to use the preferred namespace name, there already exists a symbol with that name in that scope.
+                // We are going to use the namespace name in the scopes the named imports being refactored are referenced,
+                // so we look for conflicts by looking at every reference to those named imports.
+                return !!ts.FindAllReferences.Core.eachSymbolReferenceInFile(namedImport.name, checker, sourceFile, function (id) {
+                    var symbol = checker.resolveName(preferredName, id, 67108863 /* All */, /*excludeGlobals*/ true);
+                    if (symbol) { // There already is a symbol with the same name as the preferred namespace name.
+                        if (toConvertSymbols.has(symbol)) { // `preferredName` resolves to a symbol for one of the named import references we are going to transform into namespace import references...
+                            return ts.isExportSpecifier(id.parent); // ...but if this reference is an export specifier, it will not be transformed, so it is a conflict; otherwise, it will be renamed and is not a conflict.
+                        }
+                        return true; // `preferredName` resolves to any other symbol, which will be present in the refactored code and so poses a name conflict.
+                    }
+                    return false; // There is no symbol with the same name as the preferred namespace name, so no conflict.
+                });
+            }
+            var namespaceNameConflicts = toConvert.elements.some(hasNamespaceNameConflict);
             var namespaceImportName = namespaceNameConflicts ? ts.getUniqueName(preferredName, sourceFile) : preferredName;
-            var neededNamedImports = [];
+            // Imports that need to be kept as named imports in the refactored code, to avoid changing the semantics.
+            // More specifically, those are named imports that appear in named exports in the original code, e.g. `a` in `import { a } from "m"; export { a }`.
+            var neededNamedImports = new ts.Set();
             var _loop_16 = function (element) {
                 var propertyName = (element.propertyName || element.name).text;
                 ts.FindAllReferences.Core.eachSymbolReferenceInFile(element.name, checker, sourceFile, function (id) {
@@ -148288,10 +151694,8 @@
                     if (ts.isShorthandPropertyAssignment(id.parent)) {
                         changes.replaceNode(sourceFile, id.parent, ts.factory.createPropertyAssignment(id.text, access));
                     }
-                    else if (ts.isExportSpecifier(id.parent) && !id.parent.propertyName) {
-                        if (!neededNamedImports.some(function (n) { return n.name === element.name; })) {
-                            neededNamedImports.push(ts.factory.createImportSpecifier(element.propertyName && ts.factory.createIdentifier(element.propertyName.text), ts.factory.createIdentifier(element.name.text)));
-                        }
+                    else if (ts.isExportSpecifier(id.parent)) {
+                        neededNamedImports.add(element);
                     }
                     else {
                         changes.replaceNode(sourceFile, id, access);
@@ -148303,8 +151707,11 @@
                 _loop_16(element);
             }
             changes.replaceNode(sourceFile, toConvert, ts.factory.createNamespaceImport(ts.factory.createIdentifier(namespaceImportName)));
-            if (neededNamedImports.length) {
-                changes.insertNodeAfter(sourceFile, toConvert.parent.parent, updateImport(importDecl, /*defaultImportName*/ undefined, neededNamedImports));
+            if (neededNamedImports.size) {
+                var newNamedImports = ts.arrayFrom(neededNamedImports.values()).map(function (element) {
+                    return ts.factory.createImportSpecifier(element.propertyName && ts.factory.createIdentifier(element.propertyName.text), ts.factory.createIdentifier(element.name.text));
+                });
+                changes.insertNodeAfter(sourceFile, toConvert.parent.parent, updateImport(importDecl, /*defaultImportName*/ undefined, newNamedImports));
             }
         }
         function updateImport(old, defaultImportName, elements) {
@@ -148617,27 +152024,27 @@
                 var lastDeclaration = signatureDecls[signatureDecls.length - 1];
                 var updated = lastDeclaration;
                 switch (lastDeclaration.kind) {
-                    case 165 /* MethodSignature */: {
+                    case 166 /* MethodSignature */: {
                         updated = ts.factory.updateMethodSignature(lastDeclaration, lastDeclaration.modifiers, lastDeclaration.name, lastDeclaration.questionToken, lastDeclaration.typeParameters, getNewParametersForCombinedSignature(signatureDecls), lastDeclaration.type);
                         break;
                     }
-                    case 166 /* MethodDeclaration */: {
+                    case 167 /* MethodDeclaration */: {
                         updated = ts.factory.updateMethodDeclaration(lastDeclaration, lastDeclaration.decorators, lastDeclaration.modifiers, lastDeclaration.asteriskToken, lastDeclaration.name, lastDeclaration.questionToken, lastDeclaration.typeParameters, getNewParametersForCombinedSignature(signatureDecls), lastDeclaration.type, lastDeclaration.body);
                         break;
                     }
-                    case 170 /* CallSignature */: {
+                    case 172 /* CallSignature */: {
                         updated = ts.factory.updateCallSignature(lastDeclaration, lastDeclaration.typeParameters, getNewParametersForCombinedSignature(signatureDecls), lastDeclaration.type);
                         break;
                     }
-                    case 167 /* Constructor */: {
+                    case 169 /* Constructor */: {
                         updated = ts.factory.updateConstructorDeclaration(lastDeclaration, lastDeclaration.decorators, lastDeclaration.modifiers, getNewParametersForCombinedSignature(signatureDecls), lastDeclaration.body);
                         break;
                     }
-                    case 171 /* ConstructSignature */: {
+                    case 173 /* ConstructSignature */: {
                         updated = ts.factory.updateConstructSignature(lastDeclaration, lastDeclaration.typeParameters, getNewParametersForCombinedSignature(signatureDecls), lastDeclaration.type);
                         break;
                     }
-                    case 252 /* FunctionDeclaration */: {
+                    case 254 /* FunctionDeclaration */: {
                         updated = ts.factory.updateFunctionDeclaration(lastDeclaration, lastDeclaration.decorators, lastDeclaration.modifiers, lastDeclaration.asteriskToken, lastDeclaration.name, lastDeclaration.typeParameters, getNewParametersForCombinedSignature(signatureDecls), lastDeclaration.type, lastDeclaration.body);
                         break;
                     }
@@ -148669,7 +152076,7 @@
                 }
                 function convertParameterToNamedTupleMember(p) {
                     ts.Debug.assert(ts.isIdentifier(p.name)); // This is checked during refactoring applicability checking
-                    var result = ts.setTextRange(ts.factory.createNamedTupleMember(p.dotDotDotToken, p.name, p.questionToken, p.type || ts.factory.createKeywordTypeNode(128 /* AnyKeyword */)), p);
+                    var result = ts.setTextRange(ts.factory.createNamedTupleMember(p.dotDotDotToken, p.name, p.questionToken, p.type || ts.factory.createKeywordTypeNode(129 /* AnyKeyword */)), p);
                     var parameterDocComment = p.symbol && p.symbol.getDocumentationComment(checker);
                     if (parameterDocComment) {
                         var newComment = ts.displayPartsToString(parameterDocComment);
@@ -148689,12 +152096,12 @@
             }
             function isConvertableSignatureDeclaration(d) {
                 switch (d.kind) {
-                    case 165 /* MethodSignature */:
-                    case 166 /* MethodDeclaration */:
-                    case 170 /* CallSignature */:
-                    case 167 /* Constructor */:
-                    case 171 /* ConstructSignature */:
-                    case 252 /* FunctionDeclaration */:
+                    case 166 /* MethodSignature */:
+                    case 167 /* MethodDeclaration */:
+                    case 172 /* CallSignature */:
+                    case 169 /* Constructor */:
+                    case 173 /* ConstructSignature */:
+                    case 254 /* FunctionDeclaration */:
                         return true;
                 }
                 return false;
@@ -148946,7 +152353,6 @@
                 Messages.cannotExtractReadonlyPropertyInitializerOutsideConstructor = createMessage("Cannot move initialization of read-only class property outside of the constructor");
                 Messages.cannotExtractAmbientBlock = createMessage("Cannot extract code from ambient contexts");
                 Messages.cannotAccessVariablesFromNestedScopes = createMessage("Cannot access variables from nested scopes");
-                Messages.cannotExtractToOtherFunctionLike = createMessage("Cannot extract method to a function-like scope that is not a function");
                 Messages.cannotExtractToJSClass = createMessage("Cannot extract constant to a class scope in JS");
                 Messages.cannotExtractToExpressionArrowFunction = createMessage("Cannot extract constant to an arrow function without a block");
             })(Messages = extractSymbol.Messages || (extractSymbol.Messages = {}));
@@ -149084,21 +152490,21 @@
                 function checkForStaticContext(nodeToCheck, containingClass) {
                     var current = nodeToCheck;
                     while (current !== containingClass) {
-                        if (current.kind === 164 /* PropertyDeclaration */) {
-                            if (ts.hasSyntacticModifier(current, 32 /* Static */)) {
+                        if (current.kind === 165 /* PropertyDeclaration */) {
+                            if (ts.isStatic(current)) {
                                 rangeFacts |= RangeFacts.InStaticRegion;
                             }
                             break;
                         }
-                        else if (current.kind === 161 /* Parameter */) {
+                        else if (current.kind === 162 /* Parameter */) {
                             var ctorOrMethod = ts.getContainingFunction(current);
-                            if (ctorOrMethod.kind === 167 /* Constructor */) {
+                            if (ctorOrMethod.kind === 169 /* Constructor */) {
                                 rangeFacts |= RangeFacts.InStaticRegion;
                             }
                             break;
                         }
-                        else if (current.kind === 166 /* MethodDeclaration */) {
-                            if (ts.hasSyntacticModifier(current, 32 /* Static */)) {
+                        else if (current.kind === 167 /* MethodDeclaration */) {
+                            if (ts.isStatic(current)) {
                                 rangeFacts |= RangeFacts.InStaticRegion;
                             }
                         }
@@ -149140,7 +152546,7 @@
                             return true;
                         }
                         if (ts.isDeclaration(node)) {
-                            var declaringNode = (node.kind === 250 /* VariableDeclaration */) ? node.parent.parent : node;
+                            var declaringNode = (node.kind === 252 /* VariableDeclaration */) ? node.parent.parent : node;
                             if (ts.hasSyntacticModifier(declaringNode, 1 /* Export */)) {
                                 // TODO: GH#18217 Silly to use `errors ||` since it's definitely not defined (see top of `visit`)
                                 // Also, if we're only pushing one error, just use `let error: Diagnostic | undefined`!
@@ -149152,16 +152558,16 @@
                         }
                         // Some things can't be extracted in certain situations
                         switch (node.kind) {
-                            case 262 /* ImportDeclaration */:
+                            case 264 /* ImportDeclaration */:
                                 (errors || (errors = [])).push(ts.createDiagnosticForNode(node, Messages.cannotExtractImport));
                                 return true;
-                            case 267 /* ExportAssignment */:
+                            case 269 /* ExportAssignment */:
                                 (errors || (errors = [])).push(ts.createDiagnosticForNode(node, Messages.cannotExtractExportedEntity));
                                 return true;
-                            case 105 /* SuperKeyword */:
+                            case 106 /* SuperKeyword */:
                                 // For a super *constructor call*, we have to be extracting the entire class,
                                 // but a super *method call* simply implies a 'this' reference
-                                if (node.parent.kind === 204 /* CallExpression */) {
+                                if (node.parent.kind === 206 /* CallExpression */) {
                                     // Super constructor call
                                     var containingClass_1 = ts.getContainingClass(node); // TODO:GH#18217
                                     if (containingClass_1.pos < span.start || containingClass_1.end >= (span.start + span.length)) {
@@ -149173,7 +152579,7 @@
                                     rangeFacts |= RangeFacts.UsesThis;
                                 }
                                 break;
-                            case 210 /* ArrowFunction */:
+                            case 212 /* ArrowFunction */:
                                 // check if arrow function uses this
                                 ts.forEachChild(node, function check(n) {
                                     if (ts.isThis(n)) {
@@ -149187,39 +152593,39 @@
                                     }
                                 });
                             // falls through
-                            case 253 /* ClassDeclaration */:
-                            case 252 /* FunctionDeclaration */:
+                            case 255 /* ClassDeclaration */:
+                            case 254 /* FunctionDeclaration */:
                                 if (ts.isSourceFile(node.parent) && node.parent.externalModuleIndicator === undefined) {
                                     // You cannot extract global declarations
                                     (errors || (errors = [])).push(ts.createDiagnosticForNode(node, Messages.functionWillNotBeVisibleInTheNewScope));
                                 }
                             // falls through
-                            case 222 /* ClassExpression */:
-                            case 209 /* FunctionExpression */:
-                            case 166 /* MethodDeclaration */:
-                            case 167 /* Constructor */:
-                            case 168 /* GetAccessor */:
-                            case 169 /* SetAccessor */:
+                            case 224 /* ClassExpression */:
+                            case 211 /* FunctionExpression */:
+                            case 167 /* MethodDeclaration */:
+                            case 169 /* Constructor */:
+                            case 170 /* GetAccessor */:
+                            case 171 /* SetAccessor */:
                                 // do not dive into functions or classes
                                 return false;
                         }
                         var savedPermittedJumps = permittedJumps;
                         switch (node.kind) {
-                            case 235 /* IfStatement */:
+                            case 237 /* IfStatement */:
                                 permittedJumps = 0 /* None */;
                                 break;
-                            case 248 /* TryStatement */:
+                            case 250 /* TryStatement */:
                                 // forbid all jumps inside try blocks
                                 permittedJumps = 0 /* None */;
                                 break;
-                            case 231 /* Block */:
-                                if (node.parent && node.parent.kind === 248 /* TryStatement */ && node.parent.finallyBlock === node) {
+                            case 233 /* Block */:
+                                if (node.parent && node.parent.kind === 250 /* TryStatement */ && node.parent.finallyBlock === node) {
                                     // allow unconditional returns from finally blocks
                                     permittedJumps = 4 /* Return */;
                                 }
                                 break;
-                            case 286 /* DefaultClause */:
-                            case 285 /* CaseClause */:
+                            case 288 /* DefaultClause */:
+                            case 287 /* CaseClause */:
                                 // allow unlabeled break inside case clauses
                                 permittedJumps |= 1 /* Break */;
                                 break;
@@ -149231,19 +152637,19 @@
                                 break;
                         }
                         switch (node.kind) {
-                            case 188 /* ThisType */:
-                            case 107 /* ThisKeyword */:
+                            case 190 /* ThisType */:
+                            case 108 /* ThisKeyword */:
                                 rangeFacts |= RangeFacts.UsesThis;
                                 break;
-                            case 246 /* LabeledStatement */: {
+                            case 248 /* LabeledStatement */: {
                                 var label = node.label;
                                 (seenLabels || (seenLabels = [])).push(label.escapedText);
                                 ts.forEachChild(node, visit);
                                 seenLabels.pop();
                                 break;
                             }
-                            case 242 /* BreakStatement */:
-                            case 241 /* ContinueStatement */: {
+                            case 244 /* BreakStatement */:
+                            case 243 /* ContinueStatement */: {
                                 var label = node.label;
                                 if (label) {
                                     if (!ts.contains(seenLabels, label.escapedText)) {
@@ -149252,20 +152658,20 @@
                                     }
                                 }
                                 else {
-                                    if (!(permittedJumps & (node.kind === 242 /* BreakStatement */ ? 1 /* Break */ : 2 /* Continue */))) {
+                                    if (!(permittedJumps & (node.kind === 244 /* BreakStatement */ ? 1 /* Break */ : 2 /* Continue */))) {
                                         // attempt to break or continue in a forbidden context
                                         (errors || (errors = [])).push(ts.createDiagnosticForNode(node, Messages.cannotExtractRangeContainingConditionalBreakOrContinueStatements));
                                     }
                                 }
                                 break;
                             }
-                            case 214 /* AwaitExpression */:
+                            case 216 /* AwaitExpression */:
                                 rangeFacts |= RangeFacts.IsAsyncFunction;
                                 break;
-                            case 220 /* YieldExpression */:
+                            case 222 /* YieldExpression */:
                                 rangeFacts |= RangeFacts.IsGenerator;
                                 break;
-                            case 243 /* ReturnStatement */:
+                            case 245 /* ReturnStatement */:
                                 if (permittedJumps & 4 /* Return */) {
                                     rangeFacts |= RangeFacts.HasReturn;
                                 }
@@ -149331,7 +152737,7 @@
                 while (true) {
                     current = current.parent;
                     // A function parameter's initializer is actually in the outer scope, not the function declaration
-                    if (current.kind === 161 /* Parameter */) {
+                    if (current.kind === 162 /* Parameter */) {
                         // Skip all the way to the outer scope of the function that declared this parameter
                         current = ts.findAncestor(current, function (parent) { return ts.isFunctionLikeDeclaration(parent); }).parent;
                     }
@@ -149342,7 +152748,7 @@
                     //  * Module/namespace or source file
                     if (isScope(current)) {
                         scopes.push(current);
-                        if (current.kind === 298 /* SourceFile */) {
+                        if (current.kind === 300 /* SourceFile */) {
                             return scopes;
                         }
                     }
@@ -149432,32 +152838,32 @@
             }
             function getDescriptionForFunctionLikeDeclaration(scope) {
                 switch (scope.kind) {
-                    case 167 /* Constructor */:
+                    case 169 /* Constructor */:
                         return "constructor";
-                    case 209 /* FunctionExpression */:
-                    case 252 /* FunctionDeclaration */:
+                    case 211 /* FunctionExpression */:
+                    case 254 /* FunctionDeclaration */:
                         return scope.name
                             ? "function '" + scope.name.text + "'"
                             : ts.ANONYMOUS;
-                    case 210 /* ArrowFunction */:
+                    case 212 /* ArrowFunction */:
                         return "arrow function";
-                    case 166 /* MethodDeclaration */:
+                    case 167 /* MethodDeclaration */:
                         return "method '" + scope.name.getText() + "'";
-                    case 168 /* GetAccessor */:
+                    case 170 /* GetAccessor */:
                         return "'get " + scope.name.getText() + "'";
-                    case 169 /* SetAccessor */:
+                    case 171 /* SetAccessor */:
                         return "'set " + scope.name.getText() + "'";
                     default:
                         throw ts.Debug.assertNever(scope, "Unexpected scope kind " + scope.kind);
                 }
             }
             function getDescriptionForClassLikeDeclaration(scope) {
-                return scope.kind === 253 /* ClassDeclaration */
+                return scope.kind === 255 /* ClassDeclaration */
                     ? scope.name ? "class '" + scope.name.text + "'" : "anonymous class declaration"
                     : scope.name ? "class expression '" + scope.name.text + "'" : "anonymous class expression";
             }
             function getDescriptionForModuleLikeDeclaration(scope) {
-                return scope.kind === 258 /* ModuleBlock */
+                return scope.kind === 260 /* ModuleBlock */
                     ? "namespace '" + scope.parent.name.getText() + "'"
                     : scope.externalModuleIndicator ? 0 /* Module */ : 1 /* Global */;
             }
@@ -149525,12 +152931,12 @@
                 var newFunction;
                 if (ts.isClassLike(scope)) {
                     // always create private method in TypeScript files
-                    var modifiers = isJS ? [] : [ts.factory.createModifier(120 /* PrivateKeyword */)];
+                    var modifiers = isJS ? [] : [ts.factory.createModifier(121 /* PrivateKeyword */)];
                     if (range.facts & RangeFacts.InStaticRegion) {
-                        modifiers.push(ts.factory.createModifier(123 /* StaticKeyword */));
+                        modifiers.push(ts.factory.createModifier(124 /* StaticKeyword */));
                     }
                     if (range.facts & RangeFacts.IsAsyncFunction) {
-                        modifiers.push(ts.factory.createModifier(129 /* AsyncKeyword */));
+                        modifiers.push(ts.factory.createModifier(130 /* AsyncKeyword */));
                     }
                     newFunction = ts.factory.createMethodDeclaration(
                     /*decorators*/ undefined, modifiers.length ? modifiers : undefined, range.facts & RangeFacts.IsGenerator ? ts.factory.createToken(41 /* AsteriskToken */) : undefined, functionName, 
@@ -149538,7 +152944,7 @@
                 }
                 else {
                     newFunction = ts.factory.createFunctionDeclaration(
-                    /*decorators*/ undefined, range.facts & RangeFacts.IsAsyncFunction ? [ts.factory.createToken(129 /* AsyncKeyword */)] : undefined, range.facts & RangeFacts.IsGenerator ? ts.factory.createToken(41 /* AsteriskToken */) : undefined, functionName, typeParameters, parameters, returnType, body);
+                    /*decorators*/ undefined, range.facts & RangeFacts.IsAsyncFunction ? [ts.factory.createToken(130 /* AsyncKeyword */)] : undefined, range.facts & RangeFacts.IsGenerator ? ts.factory.createToken(41 /* AsteriskToken */) : undefined, functionName, typeParameters, parameters, returnType, body);
                 }
                 var changeTracker = ts.textChanges.ChangeTracker.fromContext(context);
                 var minInsertionPos = (isReadonlyArray(range.range) ? ts.last(range.range) : range.range).end;
@@ -149683,9 +153089,9 @@
                     while (ts.isParenthesizedTypeNode(withoutParens)) {
                         withoutParens = withoutParens.type;
                     }
-                    return ts.isUnionTypeNode(withoutParens) && ts.find(withoutParens.types, function (t) { return t.kind === 150 /* UndefinedKeyword */; })
+                    return ts.isUnionTypeNode(withoutParens) && ts.find(withoutParens.types, function (t) { return t.kind === 151 /* UndefinedKeyword */; })
                         ? clone
-                        : ts.factory.createUnionTypeNode([clone, ts.factory.createKeywordTypeNode(150 /* UndefinedKeyword */)]);
+                        : ts.factory.createUnionTypeNode([clone, ts.factory.createKeywordTypeNode(151 /* UndefinedKeyword */)]);
                 }
             }
             /**
@@ -149710,11 +153116,11 @@
                 if (ts.isClassLike(scope)) {
                     ts.Debug.assert(!isJS, "Cannot extract to a JS class"); // See CannotExtractToJSClass
                     var modifiers = [];
-                    modifiers.push(ts.factory.createModifier(120 /* PrivateKeyword */));
+                    modifiers.push(ts.factory.createModifier(121 /* PrivateKeyword */));
                     if (rangeFacts & RangeFacts.InStaticRegion) {
-                        modifiers.push(ts.factory.createModifier(123 /* StaticKeyword */));
+                        modifiers.push(ts.factory.createModifier(124 /* StaticKeyword */));
                     }
-                    modifiers.push(ts.factory.createModifier(142 /* ReadonlyKeyword */));
+                    modifiers.push(ts.factory.createModifier(143 /* ReadonlyKeyword */));
                     var newVariable = ts.factory.createPropertyDeclaration(
                     /*decorators*/ undefined, modifiers, localNameText, 
                     /*questionToken*/ undefined, variableType, initializer);
@@ -149746,7 +153152,7 @@
                         var localReference = ts.factory.createIdentifier(localNameText);
                         changeTracker.replaceNode(context.file, node, localReference);
                     }
-                    else if (node.parent.kind === 234 /* ExpressionStatement */ && scope === ts.findAncestor(node, isScope)) {
+                    else if (node.parent.kind === 236 /* ExpressionStatement */ && scope === ts.findAncestor(node, isScope)) {
                         // If the parent is an expression statement and the target scope is the immediately enclosing one,
                         // replace the statement with the declaration.
                         var newVariableStatement = ts.factory.createVariableStatement(
@@ -149765,7 +153171,7 @@
                             changeTracker.insertNodeBefore(context.file, nodeToInsertBefore, newVariableStatement, /*blankLineBetween*/ false);
                         }
                         // Consume
-                        if (node.parent.kind === 234 /* ExpressionStatement */) {
+                        if (node.parent.kind === 236 /* ExpressionStatement */) {
                             // If the parent is an expression statement, delete it.
                             changeTracker.delete(context.file, node.parent);
                         }
@@ -150092,9 +153498,7 @@
                     var scope = scopes_1[_i];
                     usagesPerScope.push({ usages: new ts.Map(), typeParameterUsages: new ts.Map(), substitutions: new ts.Map() });
                     substitutionsPerScope.push(new ts.Map());
-                    functionErrorsPerScope.push(ts.isFunctionLikeDeclaration(scope) && scope.kind !== 252 /* FunctionDeclaration */
-                        ? [ts.createDiagnosticForNode(scope, Messages.cannotExtractToOtherFunctionLike)]
-                        : []);
+                    functionErrorsPerScope.push([]);
                     var constantErrors = [];
                     if (expressionDiagnostic) {
                         constantErrors.push(expressionDiagnostic);
@@ -150411,37 +153815,37 @@
             function isExtractableExpression(node) {
                 var parent = node.parent;
                 switch (parent.kind) {
-                    case 292 /* EnumMember */:
+                    case 294 /* EnumMember */:
                         return false;
                 }
                 switch (node.kind) {
                     case 10 /* StringLiteral */:
-                        return parent.kind !== 262 /* ImportDeclaration */ &&
-                            parent.kind !== 266 /* ImportSpecifier */;
-                    case 221 /* SpreadElement */:
-                    case 197 /* ObjectBindingPattern */:
-                    case 199 /* BindingElement */:
+                        return parent.kind !== 264 /* ImportDeclaration */ &&
+                            parent.kind !== 268 /* ImportSpecifier */;
+                    case 223 /* SpreadElement */:
+                    case 199 /* ObjectBindingPattern */:
+                    case 201 /* BindingElement */:
                         return false;
-                    case 78 /* Identifier */:
-                        return parent.kind !== 199 /* BindingElement */ &&
-                            parent.kind !== 266 /* ImportSpecifier */ &&
-                            parent.kind !== 271 /* ExportSpecifier */;
+                    case 79 /* Identifier */:
+                        return parent.kind !== 201 /* BindingElement */ &&
+                            parent.kind !== 268 /* ImportSpecifier */ &&
+                            parent.kind !== 273 /* ExportSpecifier */;
                 }
                 return true;
             }
             function isBlockLike(node) {
                 switch (node.kind) {
-                    case 231 /* Block */:
-                    case 298 /* SourceFile */:
-                    case 258 /* ModuleBlock */:
-                    case 285 /* CaseClause */:
+                    case 233 /* Block */:
+                    case 300 /* SourceFile */:
+                    case 260 /* ModuleBlock */:
+                    case 287 /* CaseClause */:
                         return true;
                     default:
                         return false;
                 }
             }
             function isInJSXContent(node) {
-                return (ts.isJsxElement(node) || ts.isJsxSelfClosingElement(node) || ts.isJsxFragment(node)) && ts.isJsxElement(node.parent);
+                return (ts.isJsxElement(node) || ts.isJsxSelfClosingElement(node) || ts.isJsxFragment(node)) && (ts.isJsxElement(node.parent) || ts.isJsxFragment(node.parent));
             }
         })(extractSymbol = refactor.extractSymbol || (refactor.extractSymbol = {}));
     })(refactor = ts.refactor || (ts.refactor = {}));
@@ -150819,11 +154223,11 @@
         }
         function isPureImport(node) {
             switch (node.kind) {
-                case 262 /* ImportDeclaration */:
+                case 264 /* ImportDeclaration */:
                     return true;
-                case 261 /* ImportEqualsDeclaration */:
+                case 263 /* ImportEqualsDeclaration */:
                     return !ts.hasSyntacticModifier(node, 1 /* Export */);
-                case 233 /* VariableStatement */:
+                case 235 /* VariableStatement */:
                     return node.declarationList.declarations.every(function (d) { return !!d.initializer && ts.isRequireCall(d.initializer, /*checkArgumentIsStringLiteralLike*/ true); });
                 default:
                     return false;
@@ -150848,7 +154252,7 @@
             var prologueDirectives = ts.takeWhile(oldFile.statements, ts.isPrologueDirective);
             if (!oldFile.externalModuleIndicator && !oldFile.commonJsModuleIndicator) {
                 deleteMovedStatements(oldFile, toMove.ranges, changes);
-                return __spreadArray(__spreadArray([], prologueDirectives), toMove.all);
+                return __spreadArray(__spreadArray([], prologueDirectives, true), toMove.all, true);
             }
             var useEs6ModuleSyntax = !!oldFile.externalModuleIndicator;
             var quotePreference = ts.getQuotePreference(oldFile, preferences);
@@ -150862,11 +154266,11 @@
             var imports = getNewFileImportsAndAddExportInOldFile(oldFile, usage.oldImportsNeededByNewFile, usage.newFileImportsFromOldFile, changes, checker, useEs6ModuleSyntax, quotePreference);
             var body = addExports(oldFile, toMove.all, usage.oldFileImportsFromNewFile, useEs6ModuleSyntax);
             if (imports.length && body.length) {
-                return __spreadArray(__spreadArray(__spreadArray(__spreadArray([], prologueDirectives), imports), [
+                return __spreadArray(__spreadArray(__spreadArray(__spreadArray([], prologueDirectives, true), imports, true), [
                     4 /* NewLineTrivia */
-                ]), body);
+                ], false), body, true);
             }
-            return __spreadArray(__spreadArray(__spreadArray([], prologueDirectives), imports), body);
+            return __spreadArray(__spreadArray(__spreadArray([], prologueDirectives, true), imports, true), body, true);
         }
         function deleteMovedStatements(sourceFile, moved, changes) {
             for (var _i = 0, moved_1 = moved; _i < moved_1.length; _i++) {
@@ -150919,12 +154323,12 @@
         }
         function getNamespaceLikeImport(node) {
             switch (node.kind) {
-                case 262 /* ImportDeclaration */:
-                    return node.importClause && node.importClause.namedBindings && node.importClause.namedBindings.kind === 264 /* NamespaceImport */ ?
+                case 264 /* ImportDeclaration */:
+                    return node.importClause && node.importClause.namedBindings && node.importClause.namedBindings.kind === 266 /* NamespaceImport */ ?
                         node.importClause.namedBindings.name : undefined;
-                case 261 /* ImportEqualsDeclaration */:
+                case 263 /* ImportEqualsDeclaration */:
                     return node.name;
-                case 250 /* VariableDeclaration */:
+                case 252 /* VariableDeclaration */:
                     return ts.tryCast(node.name, ts.isIdentifier);
                 default:
                     return ts.Debug.assertNever(node, "Unexpected node kind " + node.kind);
@@ -150955,20 +154359,20 @@
             var newNamespaceId = ts.factory.createIdentifier(newNamespaceName);
             var newModuleString = ts.factory.createStringLiteral(newModuleSpecifier);
             switch (node.kind) {
-                case 262 /* ImportDeclaration */:
+                case 264 /* ImportDeclaration */:
                     return ts.factory.createImportDeclaration(
                     /*decorators*/ undefined, /*modifiers*/ undefined, ts.factory.createImportClause(/*isTypeOnly*/ false, /*name*/ undefined, ts.factory.createNamespaceImport(newNamespaceId)), newModuleString);
-                case 261 /* ImportEqualsDeclaration */:
+                case 263 /* ImportEqualsDeclaration */:
                     return ts.factory.createImportEqualsDeclaration(/*decorators*/ undefined, /*modifiers*/ undefined, /*isTypeOnly*/ false, newNamespaceId, ts.factory.createExternalModuleReference(newModuleString));
-                case 250 /* VariableDeclaration */:
+                case 252 /* VariableDeclaration */:
                     return ts.factory.createVariableDeclaration(newNamespaceId, /*exclamationToken*/ undefined, /*type*/ undefined, createRequireCall(newModuleString));
                 default:
                     return ts.Debug.assertNever(node, "Unexpected node kind " + node.kind);
             }
         }
         function moduleSpecifierFromImport(i) {
-            return (i.kind === 262 /* ImportDeclaration */ ? i.moduleSpecifier
-                : i.kind === 261 /* ImportEqualsDeclaration */ ? i.moduleReference.expression
+            return (i.kind === 264 /* ImportDeclaration */ ? i.moduleSpecifier
+                : i.kind === 263 /* ImportEqualsDeclaration */ ? i.moduleReference.expression
                     : i.initializer.arguments[0]);
         }
         function forEachImportInStatement(statement, cb) {
@@ -151038,15 +154442,15 @@
         }
         function deleteUnusedImports(sourceFile, importDecl, changes, isUnused) {
             switch (importDecl.kind) {
-                case 262 /* ImportDeclaration */:
+                case 264 /* ImportDeclaration */:
                     deleteUnusedImportsInDeclaration(sourceFile, importDecl, changes, isUnused);
                     break;
-                case 261 /* ImportEqualsDeclaration */:
+                case 263 /* ImportEqualsDeclaration */:
                     if (isUnused(importDecl.name)) {
                         changes.delete(sourceFile, importDecl);
                     }
                     break;
-                case 250 /* VariableDeclaration */:
+                case 252 /* VariableDeclaration */:
                     deleteUnusedImportsInVariableDeclaration(sourceFile, importDecl, changes, isUnused);
                     break;
                 default:
@@ -151059,7 +154463,7 @@
             var _a = importDecl.importClause, name = _a.name, namedBindings = _a.namedBindings;
             var defaultUnused = !name || isUnused(name);
             var namedBindingsUnused = !namedBindings ||
-                (namedBindings.kind === 264 /* NamespaceImport */ ? isUnused(namedBindings.name) : namedBindings.elements.length !== 0 && namedBindings.elements.every(function (e) { return isUnused(e.name); }));
+                (namedBindings.kind === 266 /* NamespaceImport */ ? isUnused(namedBindings.name) : namedBindings.elements.length !== 0 && namedBindings.elements.every(function (e) { return isUnused(e.name); }));
             if (defaultUnused && namedBindingsUnused) {
                 changes.delete(sourceFile, importDecl);
             }
@@ -151071,7 +154475,7 @@
                     if (namedBindingsUnused) {
                         changes.replaceNode(sourceFile, importDecl.importClause, ts.factory.updateImportClause(importDecl.importClause, importDecl.importClause.isTypeOnly, name, /*namedBindings*/ undefined));
                     }
-                    else if (namedBindings.kind === 265 /* NamedImports */) {
+                    else if (namedBindings.kind === 267 /* NamedImports */) {
                         for (var _i = 0, _b = namedBindings.elements; _i < _b.length; _i++) {
                             var element = _b[_i];
                             if (isUnused(element.name))
@@ -151084,14 +154488,14 @@
         function deleteUnusedImportsInVariableDeclaration(sourceFile, varDecl, changes, isUnused) {
             var name = varDecl.name;
             switch (name.kind) {
-                case 78 /* Identifier */:
+                case 79 /* Identifier */:
                     if (isUnused(name)) {
                         changes.delete(sourceFile, name);
                     }
                     break;
-                case 198 /* ArrayBindingPattern */:
+                case 200 /* ArrayBindingPattern */:
                     break;
-                case 197 /* ObjectBindingPattern */:
+                case 199 /* ObjectBindingPattern */:
                     if (name.elements.every(function (e) { return ts.isIdentifier(e.name) && isUnused(e.name); })) {
                         changes.delete(sourceFile, ts.isVariableDeclarationList(varDecl.parent) && varDecl.parent.declarations.length === 1 ? varDecl.parent.parent : varDecl);
                     }
@@ -151131,7 +154535,7 @@
                         continue;
                     var top = getTopLevelDeclarationStatement(decl);
                     if (markSeenTop(top)) {
-                        addExportToChanges(oldFile, top, changes, useEs6ModuleSyntax);
+                        addExportToChanges(oldFile, top, name, changes, useEs6ModuleSyntax);
                     }
                     if (ts.hasSyntacticModifier(decl, 512 /* Default */)) {
                         oldFileDefault = name;
@@ -151221,14 +154625,14 @@
         // Below should all be utilities
         function isInImport(decl) {
             switch (decl.kind) {
-                case 261 /* ImportEqualsDeclaration */:
-                case 266 /* ImportSpecifier */:
-                case 263 /* ImportClause */:
-                case 264 /* NamespaceImport */:
+                case 263 /* ImportEqualsDeclaration */:
+                case 268 /* ImportSpecifier */:
+                case 265 /* ImportClause */:
+                case 266 /* NamespaceImport */:
                     return true;
-                case 250 /* VariableDeclaration */:
+                case 252 /* VariableDeclaration */:
                     return isVariableDeclarationInImport(decl);
-                case 199 /* BindingElement */:
+                case 201 /* BindingElement */:
                     return ts.isVariableDeclaration(decl.parent.parent) && isVariableDeclarationInImport(decl.parent.parent);
                 default:
                     return false;
@@ -151240,7 +154644,7 @@
         }
         function filterImport(i, moduleSpecifier, keep) {
             switch (i.kind) {
-                case 262 /* ImportDeclaration */: {
+                case 264 /* ImportDeclaration */: {
                     var clause = i.importClause;
                     if (!clause)
                         return undefined;
@@ -151250,9 +154654,9 @@
                         ? ts.factory.createImportDeclaration(/*decorators*/ undefined, /*modifiers*/ undefined, ts.factory.createImportClause(/*isTypeOnly*/ false, defaultImport, namedBindings), moduleSpecifier)
                         : undefined;
                 }
-                case 261 /* ImportEqualsDeclaration */:
+                case 263 /* ImportEqualsDeclaration */:
                     return keep(i.name) ? i : undefined;
-                case 250 /* VariableDeclaration */: {
+                case 252 /* VariableDeclaration */: {
                     var name = filterBindingName(i.name, keep);
                     return name ? makeVariableStatement(name, i.type, createRequireCall(moduleSpecifier), i.parent.flags) : undefined;
                 }
@@ -151261,7 +154665,7 @@
             }
         }
         function filterNamedBindings(namedBindings, keep) {
-            if (namedBindings.kind === 264 /* NamespaceImport */) {
+            if (namedBindings.kind === 266 /* NamespaceImport */) {
                 return keep(namedBindings.name) ? namedBindings : undefined;
             }
             else {
@@ -151271,11 +154675,11 @@
         }
         function filterBindingName(name, keep) {
             switch (name.kind) {
-                case 78 /* Identifier */:
+                case 79 /* Identifier */:
                     return keep(name) ? name : undefined;
-                case 198 /* ArrayBindingPattern */:
+                case 200 /* ArrayBindingPattern */:
                     return name;
-                case 197 /* ObjectBindingPattern */: {
+                case 199 /* ObjectBindingPattern */: {
                     // We can't handle nested destructurings or property names well here, so just copy them all.
                     var newElements = name.elements.filter(function (prop) { return prop.propertyName || !ts.isIdentifier(prop.name) || keep(prop.name); });
                     return newElements.length ? ts.factory.createObjectBindingPattern(newElements) : undefined;
@@ -151332,13 +154736,13 @@
         }
         function isNonVariableTopLevelDeclaration(node) {
             switch (node.kind) {
-                case 252 /* FunctionDeclaration */:
-                case 253 /* ClassDeclaration */:
-                case 257 /* ModuleDeclaration */:
-                case 256 /* EnumDeclaration */:
-                case 255 /* TypeAliasDeclaration */:
-                case 254 /* InterfaceDeclaration */:
-                case 261 /* ImportEqualsDeclaration */:
+                case 254 /* FunctionDeclaration */:
+                case 255 /* ClassDeclaration */:
+                case 259 /* ModuleDeclaration */:
+                case 258 /* EnumDeclaration */:
+                case 257 /* TypeAliasDeclaration */:
+                case 256 /* InterfaceDeclaration */:
+                case 263 /* ImportEqualsDeclaration */:
                     return true;
                 default:
                     return false;
@@ -151346,17 +154750,17 @@
         }
         function forEachTopLevelDeclaration(statement, cb) {
             switch (statement.kind) {
-                case 252 /* FunctionDeclaration */:
-                case 253 /* ClassDeclaration */:
-                case 257 /* ModuleDeclaration */:
-                case 256 /* EnumDeclaration */:
-                case 255 /* TypeAliasDeclaration */:
-                case 254 /* InterfaceDeclaration */:
-                case 261 /* ImportEqualsDeclaration */:
+                case 254 /* FunctionDeclaration */:
+                case 255 /* ClassDeclaration */:
+                case 259 /* ModuleDeclaration */:
+                case 258 /* EnumDeclaration */:
+                case 257 /* TypeAliasDeclaration */:
+                case 256 /* InterfaceDeclaration */:
+                case 263 /* ImportEqualsDeclaration */:
                     return cb(statement);
-                case 233 /* VariableStatement */:
+                case 235 /* VariableStatement */:
                     return ts.firstDefined(statement.declarationList.declarations, function (decl) { return forEachTopLevelDeclarationInBindingName(decl.name, cb); });
-                case 234 /* ExpressionStatement */: {
+                case 236 /* ExpressionStatement */: {
                     var expression = statement.expression;
                     return ts.isBinaryExpression(expression) && ts.getAssignmentDeclarationKind(expression) === 1 /* ExportsProperty */
                         ? cb(statement)
@@ -151366,10 +154770,10 @@
         }
         function forEachTopLevelDeclarationInBindingName(name, cb) {
             switch (name.kind) {
-                case 78 /* Identifier */:
+                case 79 /* Identifier */:
                     return cb(ts.cast(name.parent, function (x) { return ts.isVariableDeclaration(x) || ts.isBindingElement(x); }));
-                case 198 /* ArrayBindingPattern */:
-                case 197 /* ObjectBindingPattern */:
+                case 200 /* ArrayBindingPattern */:
+                case 199 /* ObjectBindingPattern */:
                     return ts.firstDefined(name.elements, function (em) { return ts.isOmittedExpression(em) ? undefined : forEachTopLevelDeclarationInBindingName(em.name, cb); });
                 default:
                     return ts.Debug.assertNever(name, "Unexpected name kind " + name.kind);
@@ -151380,16 +154784,16 @@
         }
         function getTopLevelDeclarationStatement(d) {
             switch (d.kind) {
-                case 250 /* VariableDeclaration */:
+                case 252 /* VariableDeclaration */:
                     return d.parent.parent;
-                case 199 /* BindingElement */:
+                case 201 /* BindingElement */:
                     return getTopLevelDeclarationStatement(ts.cast(d.parent.parent, function (p) { return ts.isVariableDeclaration(p) || ts.isBindingElement(p); }));
                 default:
                     return d;
             }
         }
-        function addExportToChanges(sourceFile, decl, changes, useEs6Exports) {
-            if (isExported(sourceFile, decl, useEs6Exports))
+        function addExportToChanges(sourceFile, decl, name, changes, useEs6Exports) {
+            if (isExported(sourceFile, decl, useEs6Exports, name))
                 return;
             if (useEs6Exports) {
                 if (!ts.isExpressionStatement(decl))
@@ -151401,59 +154805,58 @@
                     changes.insertNodesAfter(sourceFile, decl, names.map(createExportAssignment));
             }
         }
-        function isExported(sourceFile, decl, useEs6Exports) {
+        function isExported(sourceFile, decl, useEs6Exports, name) {
+            var _a;
             if (useEs6Exports) {
-                return !ts.isExpressionStatement(decl) && ts.hasSyntacticModifier(decl, 1 /* Export */);
+                return !ts.isExpressionStatement(decl) && ts.hasSyntacticModifier(decl, 1 /* Export */) || !!(name && ((_a = sourceFile.symbol.exports) === null || _a === void 0 ? void 0 : _a.has(name.escapedText)));
             }
-            else {
-                return getNamesToExportInCommonJS(decl).some(function (name) { return sourceFile.symbol.exports.has(ts.escapeLeadingUnderscores(name)); });
-            }
+            return getNamesToExportInCommonJS(decl).some(function (name) { return sourceFile.symbol.exports.has(ts.escapeLeadingUnderscores(name)); });
         }
         function addExport(decl, useEs6Exports) {
             return useEs6Exports ? [addEs6Export(decl)] : addCommonjsExport(decl);
         }
         function addEs6Export(d) {
-            var modifiers = ts.concatenate([ts.factory.createModifier(92 /* ExportKeyword */)], d.modifiers);
+            var modifiers = ts.concatenate([ts.factory.createModifier(93 /* ExportKeyword */)], d.modifiers);
             switch (d.kind) {
-                case 252 /* FunctionDeclaration */:
+                case 254 /* FunctionDeclaration */:
                     return ts.factory.updateFunctionDeclaration(d, d.decorators, modifiers, d.asteriskToken, d.name, d.typeParameters, d.parameters, d.type, d.body);
-                case 253 /* ClassDeclaration */:
+                case 255 /* ClassDeclaration */:
                     return ts.factory.updateClassDeclaration(d, d.decorators, modifiers, d.name, d.typeParameters, d.heritageClauses, d.members);
-                case 233 /* VariableStatement */:
+                case 235 /* VariableStatement */:
                     return ts.factory.updateVariableStatement(d, modifiers, d.declarationList);
-                case 257 /* ModuleDeclaration */:
+                case 259 /* ModuleDeclaration */:
                     return ts.factory.updateModuleDeclaration(d, d.decorators, modifiers, d.name, d.body);
-                case 256 /* EnumDeclaration */:
+                case 258 /* EnumDeclaration */:
                     return ts.factory.updateEnumDeclaration(d, d.decorators, modifiers, d.name, d.members);
-                case 255 /* TypeAliasDeclaration */:
+                case 257 /* TypeAliasDeclaration */:
                     return ts.factory.updateTypeAliasDeclaration(d, d.decorators, modifiers, d.name, d.typeParameters, d.type);
-                case 254 /* InterfaceDeclaration */:
+                case 256 /* InterfaceDeclaration */:
                     return ts.factory.updateInterfaceDeclaration(d, d.decorators, modifiers, d.name, d.typeParameters, d.heritageClauses, d.members);
-                case 261 /* ImportEqualsDeclaration */:
+                case 263 /* ImportEqualsDeclaration */:
                     return ts.factory.updateImportEqualsDeclaration(d, d.decorators, modifiers, d.isTypeOnly, d.name, d.moduleReference);
-                case 234 /* ExpressionStatement */:
+                case 236 /* ExpressionStatement */:
                     return ts.Debug.fail(); // Shouldn't try to add 'export' keyword to `exports.x = ...`
                 default:
                     return ts.Debug.assertNever(d, "Unexpected declaration kind " + d.kind);
             }
         }
         function addCommonjsExport(decl) {
-            return __spreadArray([decl], getNamesToExportInCommonJS(decl).map(createExportAssignment));
+            return __spreadArray([decl], getNamesToExportInCommonJS(decl).map(createExportAssignment), true);
         }
         function getNamesToExportInCommonJS(decl) {
             switch (decl.kind) {
-                case 252 /* FunctionDeclaration */:
-                case 253 /* ClassDeclaration */:
+                case 254 /* FunctionDeclaration */:
+                case 255 /* ClassDeclaration */:
                     return [decl.name.text]; // TODO: GH#18217
-                case 233 /* VariableStatement */:
+                case 235 /* VariableStatement */:
                     return ts.mapDefined(decl.declarationList.declarations, function (d) { return ts.isIdentifier(d.name) ? d.name.text : undefined; });
-                case 257 /* ModuleDeclaration */:
-                case 256 /* EnumDeclaration */:
-                case 255 /* TypeAliasDeclaration */:
-                case 254 /* InterfaceDeclaration */:
-                case 261 /* ImportEqualsDeclaration */:
+                case 259 /* ModuleDeclaration */:
+                case 258 /* EnumDeclaration */:
+                case 257 /* TypeAliasDeclaration */:
+                case 256 /* InterfaceDeclaration */:
+                case 263 /* ImportEqualsDeclaration */:
                     return ts.emptyArray;
-                case 234 /* ExpressionStatement */:
+                case 236 /* ExpressionStatement */:
                     return ts.Debug.fail("Can't export an ExpressionStatement"); // Shouldn't try to add 'export' keyword to `exports.x = ...`
                 default:
                     return ts.Debug.assertNever(decl, "Unexpected decl kind " + decl.kind);
@@ -151461,7 +154864,7 @@
         }
         /** Creates `exports.x = x;` */
         function createExportAssignment(name) {
-            return ts.factory.createExpressionStatement(ts.factory.createBinaryExpression(ts.factory.createPropertyAccessExpression(ts.factory.createIdentifier("exports"), ts.factory.createIdentifier(name)), 62 /* EqualsToken */, ts.factory.createIdentifier(name)));
+            return ts.factory.createExpressionStatement(ts.factory.createBinaryExpression(ts.factory.createPropertyAccessExpression(ts.factory.createIdentifier("exports"), ts.factory.createIdentifier(name)), 63 /* EqualsToken */, ts.factory.createIdentifier(name)));
         }
     })(refactor = ts.refactor || (ts.refactor = {}));
 })(ts || (ts = {}));
@@ -151650,7 +155053,7 @@
             function getGroupedReferences(functionDeclaration, program, cancellationToken) {
                 var functionNames = getFunctionNames(functionDeclaration);
                 var classNames = ts.isConstructorDeclaration(functionDeclaration) ? getClassNames(functionDeclaration) : [];
-                var names = ts.deduplicate(__spreadArray(__spreadArray([], functionNames), classNames), ts.equateValues);
+                var names = ts.deduplicate(__spreadArray(__spreadArray([], functionNames, true), classNames, true), ts.equateValues);
                 var checker = program.getTypeChecker();
                 var references = ts.flatMap(names, /*mapfn*/ function (/*mapfn*/ name) { return ts.FindAllReferences.getReferenceEntriesForNode(-1, name, program, program.getSourceFiles(), cancellationToken); });
                 var groupedReferences = groupReferences(references);
@@ -151796,15 +155199,15 @@
                     var parent = functionReference.parent;
                     switch (parent.kind) {
                         // foo(...) or super(...) or new Foo(...)
-                        case 204 /* CallExpression */:
-                        case 205 /* NewExpression */:
+                        case 206 /* CallExpression */:
+                        case 207 /* NewExpression */:
                             var callOrNewExpression = ts.tryCast(parent, ts.isCallOrNewExpression);
                             if (callOrNewExpression && callOrNewExpression.expression === functionReference) {
                                 return callOrNewExpression;
                             }
                             break;
                         // x.foo(...)
-                        case 202 /* PropertyAccessExpression */:
+                        case 204 /* PropertyAccessExpression */:
                             var propertyAccessExpression = ts.tryCast(parent, ts.isPropertyAccessExpression);
                             if (propertyAccessExpression && propertyAccessExpression.parent && propertyAccessExpression.name === functionReference) {
                                 var callOrNewExpression_1 = ts.tryCast(propertyAccessExpression.parent, ts.isCallOrNewExpression);
@@ -151814,7 +155217,7 @@
                             }
                             break;
                         // x["foo"](...)
-                        case 203 /* ElementAccessExpression */:
+                        case 205 /* ElementAccessExpression */:
                             var elementAccessExpression = ts.tryCast(parent, ts.isElementAccessExpression);
                             if (elementAccessExpression && elementAccessExpression.parent && elementAccessExpression.argumentExpression === functionReference) {
                                 var callOrNewExpression_2 = ts.tryCast(elementAccessExpression.parent, ts.isCallOrNewExpression);
@@ -151833,14 +155236,14 @@
                     var parent = reference.parent;
                     switch (parent.kind) {
                         // `C.foo`
-                        case 202 /* PropertyAccessExpression */:
+                        case 204 /* PropertyAccessExpression */:
                             var propertyAccessExpression = ts.tryCast(parent, ts.isPropertyAccessExpression);
                             if (propertyAccessExpression && propertyAccessExpression.expression === reference) {
                                 return propertyAccessExpression;
                             }
                             break;
                         // `C["foo"]`
-                        case 203 /* ElementAccessExpression */:
+                        case 205 /* ElementAccessExpression */:
                             var elementAccessExpression = ts.tryCast(parent, ts.isElementAccessExpression);
                             if (elementAccessExpression && elementAccessExpression.expression === reference) {
                                 return elementAccessExpression;
@@ -151886,16 +155289,16 @@
                 if (!isValidParameterNodeArray(functionDeclaration.parameters, checker))
                     return false;
                 switch (functionDeclaration.kind) {
-                    case 252 /* FunctionDeclaration */:
+                    case 254 /* FunctionDeclaration */:
                         return hasNameOrDefault(functionDeclaration) && isSingleImplementation(functionDeclaration, checker);
-                    case 166 /* MethodDeclaration */:
+                    case 167 /* MethodDeclaration */:
                         if (ts.isObjectLiteralExpression(functionDeclaration.parent)) {
                             var contextualSymbol = getSymbolForContextualType(functionDeclaration.name, checker);
                             // don't offer the refactor when there are multiple signatures since we won't know which ones the user wants to change
                             return ((_a = contextualSymbol === null || contextualSymbol === void 0 ? void 0 : contextualSymbol.declarations) === null || _a === void 0 ? void 0 : _a.length) === 1 && isSingleImplementation(functionDeclaration, checker);
                         }
                         return isSingleImplementation(functionDeclaration, checker);
-                    case 167 /* Constructor */:
+                    case 169 /* Constructor */:
                         if (ts.isClassDeclaration(functionDeclaration.parent)) {
                             return hasNameOrDefault(functionDeclaration.parent) && isSingleImplementation(functionDeclaration, checker);
                         }
@@ -151903,8 +155306,8 @@
                             return isValidVariableDeclaration(functionDeclaration.parent.parent)
                                 && isSingleImplementation(functionDeclaration, checker);
                         }
-                    case 209 /* FunctionExpression */:
-                    case 210 /* ArrowFunction */:
+                    case 211 /* FunctionExpression */:
+                    case 212 /* ArrowFunction */:
                         return isValidVariableDeclaration(functionDeclaration.parent);
                 }
                 return false;
@@ -151914,7 +155317,7 @@
             }
             function hasNameOrDefault(functionOrClassDeclaration) {
                 if (!functionOrClassDeclaration.name) {
-                    var defaultKeyword = ts.findModifier(functionOrClassDeclaration, 87 /* DefaultKeyword */);
+                    var defaultKeyword = ts.findModifier(functionOrClassDeclaration, 88 /* DefaultKeyword */);
                     return !!defaultKeyword;
                 }
                 return true;
@@ -152054,15 +155457,15 @@
             }
             function getClassNames(constructorDeclaration) {
                 switch (constructorDeclaration.parent.kind) {
-                    case 253 /* ClassDeclaration */:
+                    case 255 /* ClassDeclaration */:
                         var classDeclaration = constructorDeclaration.parent;
                         if (classDeclaration.name)
                             return [classDeclaration.name];
                         // If the class declaration doesn't have a name, it should have a default modifier.
                         // We validated this in `isValidFunctionDeclaration` through `hasNameOrDefault`
-                        var defaultModifier = ts.Debug.checkDefined(ts.findModifier(classDeclaration, 87 /* DefaultKeyword */), "Nameless class declaration should be a default export");
+                        var defaultModifier = ts.Debug.checkDefined(ts.findModifier(classDeclaration, 88 /* DefaultKeyword */), "Nameless class declaration should be a default export");
                         return [defaultModifier];
-                    case 222 /* ClassExpression */:
+                    case 224 /* ClassExpression */:
                         var classExpression = constructorDeclaration.parent;
                         var variableDeclaration = constructorDeclaration.parent.parent;
                         var className = classExpression.name;
@@ -152073,25 +155476,25 @@
             }
             function getFunctionNames(functionDeclaration) {
                 switch (functionDeclaration.kind) {
-                    case 252 /* FunctionDeclaration */:
+                    case 254 /* FunctionDeclaration */:
                         if (functionDeclaration.name)
                             return [functionDeclaration.name];
                         // If the function declaration doesn't have a name, it should have a default modifier.
                         // We validated this in `isValidFunctionDeclaration` through `hasNameOrDefault`
-                        var defaultModifier = ts.Debug.checkDefined(ts.findModifier(functionDeclaration, 87 /* DefaultKeyword */), "Nameless function declaration should be a default export");
+                        var defaultModifier = ts.Debug.checkDefined(ts.findModifier(functionDeclaration, 88 /* DefaultKeyword */), "Nameless function declaration should be a default export");
                         return [defaultModifier];
-                    case 166 /* MethodDeclaration */:
+                    case 167 /* MethodDeclaration */:
                         return [functionDeclaration.name];
-                    case 167 /* Constructor */:
-                        var ctrKeyword = ts.Debug.checkDefined(ts.findChildOfKind(functionDeclaration, 132 /* ConstructorKeyword */, functionDeclaration.getSourceFile()), "Constructor declaration should have constructor keyword");
-                        if (functionDeclaration.parent.kind === 222 /* ClassExpression */) {
+                    case 169 /* Constructor */:
+                        var ctrKeyword = ts.Debug.checkDefined(ts.findChildOfKind(functionDeclaration, 133 /* ConstructorKeyword */, functionDeclaration.getSourceFile()), "Constructor declaration should have constructor keyword");
+                        if (functionDeclaration.parent.kind === 224 /* ClassExpression */) {
                             var variableDeclaration = functionDeclaration.parent.parent;
                             return [variableDeclaration.name, ctrKeyword];
                         }
                         return [ctrKeyword];
-                    case 210 /* ArrowFunction */:
+                    case 212 /* ArrowFunction */:
                         return [functionDeclaration.parent.name];
-                    case 209 /* FunctionExpression */:
+                    case 211 /* FunctionExpression */:
                         if (functionDeclaration.name)
                             return [functionDeclaration.name, functionDeclaration.parent.name];
                         return [functionDeclaration.parent.name];
@@ -152126,7 +155529,7 @@
                 var node = getNodeOrParentOfParentheses(file, startPosition);
                 var maybeBinary = getParentBinaryExpression(node);
                 var refactorInfo = { name: refactorName, description: refactorDescription, actions: [] };
-                if (ts.isBinaryExpression(maybeBinary) && isStringConcatenationValid(maybeBinary)) {
+                if (ts.isBinaryExpression(maybeBinary) && treeToArray(maybeBinary).isValidConcatenation) {
                     refactorInfo.actions.push(convertStringAction);
                     return [refactorInfo];
                 }
@@ -152139,7 +155542,7 @@
             function getNodeOrParentOfParentheses(file, startPosition) {
                 var node = ts.getTokenAtPosition(file, startPosition);
                 var nestedBinary = getParentBinaryExpression(node);
-                var isNonStringBinary = !isStringConcatenationValid(nestedBinary);
+                var isNonStringBinary = !treeToArray(nestedBinary).isValidConcatenation;
                 if (isNonStringBinary &&
                     ts.isParenthesizedExpression(nestedBinary.parent) &&
                     ts.isBinaryExpression(nestedBinary.parent.parent)) {
@@ -152177,40 +155580,41 @@
                 }
             }
             function isNotEqualsOperator(node) {
-                return node.operatorToken.kind !== 62 /* EqualsToken */;
+                return node.operatorToken.kind !== 63 /* EqualsToken */;
             }
             function getParentBinaryExpression(expr) {
                 var container = ts.findAncestor(expr.parent, function (n) {
                     switch (n.kind) {
-                        case 202 /* PropertyAccessExpression */:
-                        case 203 /* ElementAccessExpression */:
+                        case 204 /* PropertyAccessExpression */:
+                        case 205 /* ElementAccessExpression */:
                             return false;
-                        case 219 /* TemplateExpression */:
-                        case 217 /* BinaryExpression */:
+                        case 221 /* TemplateExpression */:
+                        case 219 /* BinaryExpression */:
                             return !(ts.isBinaryExpression(n.parent) && isNotEqualsOperator(n.parent));
                         default:
                             return "quit";
                     }
                 });
-                return container || expr;
-            }
-            function isStringConcatenationValid(node) {
-                var _a = treeToArray(node), containsString = _a.containsString, areOperatorsValid = _a.areOperatorsValid;
-                return containsString && areOperatorsValid;
+                return (container || expr);
             }
             function treeToArray(current) {
-                if (ts.isBinaryExpression(current)) {
-                    var _a = treeToArray(current.left), nodes = _a.nodes, operators = _a.operators, leftHasString = _a.containsString, leftOperatorValid = _a.areOperatorsValid;
-                    if (!leftHasString && !ts.isStringLiteral(current.right) && !ts.isTemplateExpression(current.right)) {
-                        return { nodes: [current], operators: [], containsString: false, areOperatorsValid: true };
+                var loop = function (current) {
+                    if (!ts.isBinaryExpression(current)) {
+                        return { nodes: [current], operators: [], validOperators: true,
+                            hasString: ts.isStringLiteral(current) || ts.isNoSubstitutionTemplateLiteral(current) };
+                    }
+                    var _a = loop(current.left), nodes = _a.nodes, operators = _a.operators, leftHasString = _a.hasString, leftOperatorValid = _a.validOperators;
+                    if (!(leftHasString || ts.isStringLiteral(current.right) || ts.isTemplateExpression(current.right))) {
+                        return { nodes: [current], operators: [], hasString: false, validOperators: true };
                     }
                     var currentOperatorValid = current.operatorToken.kind === 39 /* PlusToken */;
-                    var areOperatorsValid = leftOperatorValid && currentOperatorValid;
+                    var validOperators = leftOperatorValid && currentOperatorValid;
                     nodes.push(current.right);
                     operators.push(current.operatorToken);
-                    return { nodes: nodes, operators: operators, containsString: true, areOperatorsValid: areOperatorsValid };
-                }
-                return { nodes: [current], operators: [], containsString: ts.isStringLiteral(current), areOperatorsValid: true };
+                    return { nodes: nodes, operators: operators, hasString: true, validOperators: validOperators };
+                };
+                var _a = loop(current), nodes = _a.nodes, operators = _a.operators, validOperators = _a.validOperators, hasString = _a.hasString;
+                return { nodes: nodes, operators: operators, isValidConcatenation: validOperators && hasString };
             }
             // to copy comments following the operator
             // "foo" + /* comment */ "bar"
@@ -152230,56 +155634,77 @@
                     }
                 };
             };
+            function escapeRawStringForTemplate(s) {
+                // Escaping for $s in strings that are to be used in template strings
+                // Naive implementation: replace \x by itself and otherwise $ and ` by \$ and \`.
+                // But to complicate it a bit, this should work for raw strings too.
+                return s.replace(/\\.|[$`]/g, function (m) { return m[0] === "\\" ? m : "\\" + m; });
+                // Finally, a less-backslash-happy version can work too, doing only ${ instead of all $s:
+                //     s.replace(/\\.|\${|`/g, m => m[0] === "\\" ? m : "\\" + m);
+                // but `\$${foo}` is likely more clear than the more-confusing-but-still-working `$${foo}`.
+            }
+            function getRawTextOfTemplate(node) {
+                // in these cases the right side is ${
+                var rightShaving = ts.isTemplateHead(node) || ts.isTemplateMiddle(node) ? -2 : -1;
+                return ts.getTextOfNode(node).slice(1, rightShaving);
+            }
             function concatConsecutiveString(index, nodes) {
                 var indexes = [];
-                var text = "";
+                var text = "", rawText = "";
                 while (index < nodes.length) {
                     var node = nodes[index];
-                    if (ts.isStringLiteralLike(node)) {
-                        text = text + node.text;
+                    if (ts.isStringLiteralLike(node)) { // includes isNoSubstitutionTemplateLiteral(node)
+                        text += node.text;
+                        rawText += escapeRawStringForTemplate(ts.getTextOfNode(node).slice(1, -1));
                         indexes.push(index);
                         index++;
                     }
                     else if (ts.isTemplateExpression(node)) {
-                        text = text + node.head.text;
+                        text += node.head.text;
+                        rawText += getRawTextOfTemplate(node.head);
                         break;
                     }
                     else {
                         break;
                     }
                 }
-                return [index, text, indexes];
+                return [index, text, rawText, indexes];
             }
             function nodesToTemplate(_a, file) {
                 var nodes = _a.nodes, operators = _a.operators;
                 var copyOperatorComments = copyTrailingOperatorComments(operators, file);
                 var copyCommentFromStringLiterals = copyCommentFromMultiNode(nodes, file, copyOperatorComments);
-                var _b = concatConsecutiveString(0, nodes), begin = _b[0], headText = _b[1], headIndexes = _b[2];
+                var _b = concatConsecutiveString(0, nodes), begin = _b[0], headText = _b[1], rawHeadText = _b[2], headIndexes = _b[3];
                 if (begin === nodes.length) {
-                    var noSubstitutionTemplateLiteral = ts.factory.createNoSubstitutionTemplateLiteral(headText);
+                    var noSubstitutionTemplateLiteral = ts.factory.createNoSubstitutionTemplateLiteral(headText, rawHeadText);
                     copyCommentFromStringLiterals(headIndexes, noSubstitutionTemplateLiteral);
                     return noSubstitutionTemplateLiteral;
                 }
                 var templateSpans = [];
-                var templateHead = ts.factory.createTemplateHead(headText);
+                var templateHead = ts.factory.createTemplateHead(headText, rawHeadText);
                 copyCommentFromStringLiterals(headIndexes, templateHead);
                 var _loop_20 = function (i) {
                     var currentNode = getExpressionFromParenthesesOrExpression(nodes[i]);
                     copyOperatorComments(i, currentNode);
-                    var _c = concatConsecutiveString(i + 1, nodes), newIndex = _c[0], subsequentText = _c[1], stringIndexes = _c[2];
+                    var _c = concatConsecutiveString(i + 1, nodes), newIndex = _c[0], subsequentText = _c[1], rawSubsequentText = _c[2], stringIndexes = _c[3];
                     i = newIndex - 1;
                     var isLast = i === nodes.length - 1;
                     if (ts.isTemplateExpression(currentNode)) {
                         var spans = ts.map(currentNode.templateSpans, function (span, index) {
                             copyExpressionComments(span);
-                            var nextSpan = currentNode.templateSpans[index + 1];
-                            var text = span.literal.text + (nextSpan ? "" : subsequentText);
-                            return ts.factory.createTemplateSpan(span.expression, isLast ? ts.factory.createTemplateTail(text) : ts.factory.createTemplateMiddle(text));
+                            var isLastSpan = index === currentNode.templateSpans.length - 1;
+                            var text = span.literal.text + (isLastSpan ? subsequentText : "");
+                            var rawText = getRawTextOfTemplate(span.literal) + (isLastSpan ? rawSubsequentText : "");
+                            return ts.factory.createTemplateSpan(span.expression, isLast
+                                ? ts.factory.createTemplateTail(text, rawText)
+                                : ts.factory.createTemplateMiddle(text, rawText));
                         });
                         templateSpans.push.apply(templateSpans, spans);
                     }
                     else {
-                        var templatePart = isLast ? ts.factory.createTemplateTail(subsequentText) : ts.factory.createTemplateMiddle(subsequentText);
+                        var templatePart = isLast
+                            ? ts.factory.createTemplateTail(subsequentText, rawSubsequentText)
+                            : ts.factory.createTemplateMiddle(subsequentText, rawSubsequentText);
                         copyCommentFromStringLiterals(stringIndexes, templatePart);
                         templateSpans.push(ts.factory.createTemplateSpan(currentNode, templatePart));
                     }
@@ -152430,14 +155855,15 @@
                 var token = ts.getTokenAtPosition(file, startPosition);
                 var typeChecker = program.getTypeChecker();
                 var func = tryGetFunctionFromVariableDeclaration(file, typeChecker, token.parent);
-                if (func && !containingThis(func.body)) {
+                if (func && !containingThis(func.body) && !typeChecker.containsArgumentsReference(func)) {
                     return { selectedVariableDeclaration: true, func: func };
                 }
                 var maybeFunc = ts.getContainingFunction(token);
                 if (maybeFunc &&
                     (ts.isFunctionExpression(maybeFunc) || ts.isArrowFunction(maybeFunc)) &&
                     !ts.rangeContainsRange(maybeFunc.body, token) &&
-                    !containingThis(maybeFunc.body)) {
+                    !containingThis(maybeFunc.body) &&
+                    !typeChecker.containsArgumentsReference(maybeFunc)) {
                     if (ts.isFunctionExpression(maybeFunc) && isFunctionReferencedInFile(file, typeChecker, maybeFunc))
                         return undefined;
                     return { selectedVariableDeclaration: false, func: maybeFunc };
@@ -152460,7 +155886,11 @@
             }
             function convertToBlock(body) {
                 if (ts.isExpression(body)) {
-                    return ts.factory.createBlock([ts.factory.createReturnStatement(body)], /* multiLine */ true);
+                    var returnStatement = ts.factory.createReturnStatement(body);
+                    var file = body.getSourceFile();
+                    ts.suppressLeadingAndTrailingTrivia(returnStatement);
+                    ts.copyTrailingAsLeadingComments(body, returnStatement, file, /* commentKind */ undefined, /* hasTrailingNewLine */ true);
+                    return ts.factory.createBlock([returnStatement], /* multiLine */ true);
                 }
                 else {
                     return body;
@@ -152607,10 +156037,10 @@
             }
             function isConvertibleDeclaration(node) {
                 switch (node.kind) {
-                    case 252 /* FunctionDeclaration */:
-                    case 209 /* FunctionExpression */:
-                    case 210 /* ArrowFunction */:
-                    case 166 /* MethodDeclaration */:
+                    case 254 /* FunctionDeclaration */:
+                    case 211 /* FunctionExpression */:
+                    case 212 /* ArrowFunction */:
+                    case 167 /* MethodDeclaration */:
                         return true;
                     default:
                         return false;
@@ -152637,8 +156067,8 @@
     ts.servicesVersion = "0.8";
     function createNode(kind, pos, end, parent) {
         var node = ts.isNodeKind(kind) ? new NodeObject(kind, pos, end) :
-            kind === 78 /* Identifier */ ? new IdentifierObject(78 /* Identifier */, pos, end) :
-                kind === 79 /* PrivateIdentifier */ ? new PrivateIdentifierObject(79 /* PrivateIdentifier */, pos, end) :
+            kind === 79 /* Identifier */ ? new IdentifierObject(79 /* Identifier */, pos, end) :
+                kind === 80 /* PrivateIdentifier */ ? new PrivateIdentifierObject(80 /* PrivateIdentifier */, pos, end) :
                     new TokenObject(kind, pos, end);
         node.parent = parent;
         node.flags = parent.flags & 25358336 /* ContextFlags */;
@@ -152712,8 +156142,8 @@
             if (!children.length) {
                 return undefined;
             }
-            var child = ts.find(children, function (kid) { return kid.kind < 302 /* FirstJSDocNode */ || kid.kind > 337 /* LastJSDocNode */; });
-            return child.kind < 158 /* FirstNode */ ?
+            var child = ts.find(children, function (kid) { return kid.kind < 304 /* FirstJSDocNode */ || kid.kind > 342 /* LastJSDocNode */; });
+            return child.kind < 159 /* FirstNode */ ?
                 child :
                 child.getFirstToken(sourceFile);
         };
@@ -152724,7 +156154,7 @@
             if (!child) {
                 return undefined;
             }
-            return child.kind < 158 /* FirstNode */ ? child : child.getLastToken(sourceFile);
+            return child.kind < 159 /* FirstNode */ ? child : child.getLastToken(sourceFile);
         };
         NodeObject.prototype.forEachChild = function (cbNode, cbNodeArray) {
             return ts.forEachChild(this, cbNode, cbNodeArray);
@@ -152770,7 +156200,7 @@
             var token = ts.scanner.scan();
             var textPos = ts.scanner.getTextPos();
             if (textPos <= end) {
-                if (token === 78 /* Identifier */) {
+                if (token === 79 /* Identifier */) {
                     ts.Debug.fail("Did not expect " + ts.Debug.formatSyntaxKind(parent.kind) + " to have an Identifier in its trivia");
                 }
                 nodes.push(createNode(token, pos, textPos, parent));
@@ -152782,7 +156212,7 @@
         }
     }
     function createSyntaxList(nodes, parent) {
-        var list = createNode(338 /* SyntaxList */, nodes.pos, nodes.end, parent);
+        var list = createNode(343 /* SyntaxList */, nodes.pos, nodes.end, parent);
         list._children = [];
         var pos = nodes.pos;
         for (var _i = 0, nodes_2 = nodes; _i < nodes_2.length; _i++) {
@@ -152835,10 +156265,10 @@
             return sourceFile.text.substring(this.getStart(sourceFile), this.getEnd());
         };
         TokenOrIdentifierObject.prototype.getChildCount = function () {
-            return 0;
+            return this.getChildren().length;
         };
-        TokenOrIdentifierObject.prototype.getChildAt = function () {
-            return undefined; // TODO: GH#18217
+        TokenOrIdentifierObject.prototype.getChildAt = function (index) {
+            return this.getChildren()[index];
         };
         TokenOrIdentifierObject.prototype.getChildren = function () {
             return this.kind === 1 /* EndOfFileToken */ ? this.jsDoc || ts.emptyArray : ts.emptyArray;
@@ -152893,13 +156323,13 @@
         };
         SymbolObject.prototype.getContextualDocumentationComment = function (context, checker) {
             switch (context === null || context === void 0 ? void 0 : context.kind) {
-                case 168 /* GetAccessor */:
+                case 170 /* GetAccessor */:
                     if (!this.contextualGetAccessorDocumentationComment) {
                         this.contextualGetAccessorDocumentationComment = ts.emptyArray;
                         this.contextualGetAccessorDocumentationComment = getDocumentationComment(ts.filter(this.declarations, ts.isGetAccessor), checker);
                     }
                     return this.contextualGetAccessorDocumentationComment;
-                case 169 /* SetAccessor */:
+                case 171 /* SetAccessor */:
                     if (!this.contextualSetAccessorDocumentationComment) {
                         this.contextualSetAccessorDocumentationComment = ts.emptyArray;
                         this.contextualSetAccessorDocumentationComment = getDocumentationComment(ts.filter(this.declarations, ts.isSetAccessor), checker);
@@ -152930,7 +156360,7 @@
         __extends(IdentifierObject, _super);
         function IdentifierObject(_kind, pos, end) {
             var _this = _super.call(this, pos, end) || this;
-            _this.kind = 78 /* Identifier */;
+            _this.kind = 79 /* Identifier */;
             return _this;
         }
         Object.defineProperty(IdentifierObject.prototype, "text", {
@@ -152942,7 +156372,7 @@
         });
         return IdentifierObject;
     }(TokenOrIdentifierObject));
-    IdentifierObject.prototype.kind = 78 /* Identifier */;
+    IdentifierObject.prototype.kind = 79 /* Identifier */;
     var PrivateIdentifierObject = /** @class */ (function (_super) {
         __extends(PrivateIdentifierObject, _super);
         function PrivateIdentifierObject(_kind, pos, end) {
@@ -152957,7 +156387,7 @@
         });
         return PrivateIdentifierObject;
     }(TokenOrIdentifierObject));
-    PrivateIdentifierObject.prototype.kind = 79 /* PrivateIdentifier */;
+    PrivateIdentifierObject.prototype.kind = 80 /* PrivateIdentifier */;
     var TypeObject = /** @class */ (function () {
         function TypeObject(checker, flags) {
             this.checker = checker;
@@ -153091,7 +156521,7 @@
         if (tags.length === 0 || hasJSDocInheritDocTag(declaration)) {
             var inheritedTags = findBaseOfDeclaration(checker, declaration, function (symbol) { var _a; return ((_a = symbol.declarations) === null || _a === void 0 ? void 0 : _a.length) === 1 ? symbol.getJsDocTags() : undefined; });
             if (inheritedTags) {
-                tags = __spreadArray(__spreadArray([], inheritedTags), tags);
+                tags = __spreadArray(__spreadArray([], inheritedTags, true), tags, true);
             }
         }
         return tags;
@@ -153118,7 +156548,12 @@
         return doc;
     }
     function findBaseOfDeclaration(checker, declaration, cb) {
-        return ts.firstDefined(declaration.parent ? ts.getAllSuperTypeNodes(declaration.parent) : ts.emptyArray, function (superTypeNode) {
+        var _a;
+        var classOrInterfaceDeclaration = ((_a = declaration.parent) === null || _a === void 0 ? void 0 : _a.kind) === 169 /* Constructor */ ? declaration.parent.parent : declaration.parent;
+        if (!classOrInterfaceDeclaration) {
+            return;
+        }
+        return ts.firstDefined(ts.getAllSuperTypeNodes(classOrInterfaceDeclaration), function (superTypeNode) {
             var symbol = checker.getPropertyOfType(checker.getTypeAtLocation(superTypeNode), declaration.symbol.name);
             return symbol ? cb(symbol) : undefined;
         });
@@ -153127,7 +156562,7 @@
         __extends(SourceFileObject, _super);
         function SourceFileObject(kind, pos, end) {
             var _this = _super.call(this, kind, pos, end) || this;
-            _this.kind = 298 /* SourceFile */;
+            _this.kind = 300 /* SourceFile */;
             return _this;
         }
         SourceFileObject.prototype.update = function (newText, textChangeRange) {
@@ -153186,10 +156621,10 @@
             }
             function visit(node) {
                 switch (node.kind) {
-                    case 252 /* FunctionDeclaration */:
-                    case 209 /* FunctionExpression */:
-                    case 166 /* MethodDeclaration */:
-                    case 165 /* MethodSignature */:
+                    case 254 /* FunctionDeclaration */:
+                    case 211 /* FunctionExpression */:
+                    case 167 /* MethodDeclaration */:
+                    case 166 /* MethodSignature */:
                         var functionDeclaration = node;
                         var declarationName = getDeclarationName(functionDeclaration);
                         if (declarationName) {
@@ -153209,31 +156644,31 @@
                         }
                         ts.forEachChild(node, visit);
                         break;
-                    case 253 /* ClassDeclaration */:
-                    case 222 /* ClassExpression */:
-                    case 254 /* InterfaceDeclaration */:
-                    case 255 /* TypeAliasDeclaration */:
-                    case 256 /* EnumDeclaration */:
-                    case 257 /* ModuleDeclaration */:
-                    case 261 /* ImportEqualsDeclaration */:
-                    case 271 /* ExportSpecifier */:
-                    case 266 /* ImportSpecifier */:
-                    case 263 /* ImportClause */:
-                    case 264 /* NamespaceImport */:
-                    case 168 /* GetAccessor */:
-                    case 169 /* SetAccessor */:
-                    case 178 /* TypeLiteral */:
+                    case 255 /* ClassDeclaration */:
+                    case 224 /* ClassExpression */:
+                    case 256 /* InterfaceDeclaration */:
+                    case 257 /* TypeAliasDeclaration */:
+                    case 258 /* EnumDeclaration */:
+                    case 259 /* ModuleDeclaration */:
+                    case 263 /* ImportEqualsDeclaration */:
+                    case 273 /* ExportSpecifier */:
+                    case 268 /* ImportSpecifier */:
+                    case 265 /* ImportClause */:
+                    case 266 /* NamespaceImport */:
+                    case 170 /* GetAccessor */:
+                    case 171 /* SetAccessor */:
+                    case 180 /* TypeLiteral */:
                         addDeclaration(node);
                         ts.forEachChild(node, visit);
                         break;
-                    case 161 /* Parameter */:
+                    case 162 /* Parameter */:
                         // Only consider parameter properties
                         if (!ts.hasSyntacticModifier(node, 16476 /* ParameterPropertyModifier */)) {
                             break;
                         }
                     // falls through
-                    case 250 /* VariableDeclaration */:
-                    case 199 /* BindingElement */: {
+                    case 252 /* VariableDeclaration */:
+                    case 201 /* BindingElement */: {
                         var decl = node;
                         if (ts.isBindingPattern(decl.name)) {
                             ts.forEachChild(decl.name, visit);
@@ -153244,12 +156679,12 @@
                         }
                     }
                     // falls through
-                    case 292 /* EnumMember */:
-                    case 164 /* PropertyDeclaration */:
-                    case 163 /* PropertySignature */:
+                    case 294 /* EnumMember */:
+                    case 165 /* PropertyDeclaration */:
+                    case 164 /* PropertySignature */:
                         addDeclaration(node);
                         break;
-                    case 268 /* ExportDeclaration */:
+                    case 270 /* ExportDeclaration */:
                         // Handle named exports case e.g.:
                         //    export {a, b as B} from "mod";
                         var exportDeclaration = node;
@@ -153262,7 +156697,7 @@
                             }
                         }
                         break;
-                    case 262 /* ImportDeclaration */:
+                    case 264 /* ImportDeclaration */:
                         var importClause = node.importClause;
                         if (importClause) {
                             // Handle default import case e.g.:
@@ -153274,7 +156709,7 @@
                             //    import * as NS from "mod";
                             //    import {a, b as B} from "mod";
                             if (importClause.namedBindings) {
-                                if (importClause.namedBindings.kind === 264 /* NamespaceImport */) {
+                                if (importClause.namedBindings.kind === 266 /* NamespaceImport */) {
                                     addDeclaration(importClause.namedBindings);
                                 }
                                 else {
@@ -153283,7 +156718,7 @@
                             }
                         }
                         break;
-                    case 217 /* BinaryExpression */:
+                    case 219 /* BinaryExpression */:
                         if (ts.getAssignmentDeclarationKind(node) !== 0 /* None */) {
                             addDeclaration(node);
                         }
@@ -153565,7 +157000,6 @@
     }());
     ts.ThrottledCancellationToken = ThrottledCancellationToken;
     var invalidOperationsInPartialSemanticMode = [
-        "getSyntacticDiagnostics",
         "getSemanticDiagnostics",
         "getSuggestionDiagnostics",
         "getCompilerOptionsDiagnostics",
@@ -153582,8 +157016,9 @@
         "prepareCallHierarchy",
         "provideCallHierarchyIncomingCalls",
         "provideCallHierarchyOutgoingCalls",
+        "provideInlayHints"
     ];
-    var invalidOperationsInSyntacticMode = __spreadArray(__spreadArray([], invalidOperationsInPartialSemanticMode), [
+    var invalidOperationsInSyntacticMode = __spreadArray(__spreadArray([], invalidOperationsInPartialSemanticMode, true), [
         "getCompletionsAtPosition",
         "getCompletionEntryDetails",
         "getCompletionEntrySymbol",
@@ -153601,7 +157036,7 @@
         "getRenameInfo",
         "findRenameLocations",
         "getApplicableRefactors",
-    ]);
+    ], false);
     function createLanguageService(host, documentRegistry, syntaxOnlyOrLanguageServiceMode) {
         var _a;
         if (documentRegistry === void 0) { documentRegistry = ts.createDocumentRegistry(host.useCaseSensitiveFileNames && host.useCaseSensitiveFileNames(), host.getCurrentDirectory()); }
@@ -153915,7 +157350,7 @@
             }
             // If '-d' is enabled, check for emitter error. One example of emitter error is export class implements non-export interface
             var declarationDiagnostics = program.getDeclarationDiagnostics(targetSourceFile, cancellationToken);
-            return __spreadArray(__spreadArray([], semanticDiagnostics), declarationDiagnostics);
+            return __spreadArray(__spreadArray([], semanticDiagnostics, true), declarationDiagnostics, true);
         }
         function getSuggestionDiagnostics(fileName) {
             synchronizeHostData();
@@ -153923,14 +157358,14 @@
         }
         function getCompilerOptionsDiagnostics() {
             synchronizeHostData();
-            return __spreadArray(__spreadArray([], program.getOptionsDiagnostics(cancellationToken)), program.getGlobalDiagnostics(cancellationToken));
+            return __spreadArray(__spreadArray([], program.getOptionsDiagnostics(cancellationToken), true), program.getGlobalDiagnostics(cancellationToken), true);
         }
         function getCompletionsAtPosition(fileName, position, options) {
             if (options === void 0) { options = ts.emptyOptions; }
             // Convert from deprecated options names to new names
             var fullPreferences = __assign(__assign({}, ts.identity(options)), { includeCompletionsForModuleExports: options.includeCompletionsForModuleExports || options.includeExternalModuleExports, includeCompletionsWithInsertText: options.includeCompletionsWithInsertText || options.includeInsertTextCompletions });
             synchronizeHostData();
-            return ts.Completions.getCompletionsAtPosition(host, program, log, getValidSourceFile(fileName), position, fullPreferences, options.triggerCharacter);
+            return ts.Completions.getCompletionsAtPosition(host, program, log, getValidSourceFile(fileName), position, fullPreferences, options.triggerCharacter, options.triggerKind, cancellationToken);
         }
         function getCompletionEntryDetails(fileName, position, name, formattingOptions, source, preferences, data) {
             if (preferences === void 0) { preferences = ts.emptyOptions; }
@@ -153988,16 +157423,16 @@
         }
         function shouldGetType(sourceFile, node, position) {
             switch (node.kind) {
-                case 78 /* Identifier */:
+                case 79 /* Identifier */:
                     return !ts.isLabelName(node) && !ts.isTagName(node) && !ts.isConstTypeReference(node.parent);
-                case 202 /* PropertyAccessExpression */:
-                case 158 /* QualifiedName */:
+                case 204 /* PropertyAccessExpression */:
+                case 159 /* QualifiedName */:
                     // Don't return quickInfo if inside the comment in `a/**/.b`
                     return !ts.isInComment(sourceFile, position);
-                case 107 /* ThisKeyword */:
-                case 188 /* ThisType */:
-                case 105 /* SuperKeyword */:
-                case 193 /* NamedTupleMember */:
+                case 108 /* ThisKeyword */:
+                case 190 /* ThisType */:
+                case 106 /* SuperKeyword */:
+                case 195 /* NamedTupleMember */:
                     return true;
                 default:
                     return false;
@@ -154102,16 +157537,16 @@
                 return undefined;
             }
             switch (node.kind) {
-                case 202 /* PropertyAccessExpression */:
-                case 158 /* QualifiedName */:
+                case 204 /* PropertyAccessExpression */:
+                case 159 /* QualifiedName */:
                 case 10 /* StringLiteral */:
-                case 94 /* FalseKeyword */:
-                case 109 /* TrueKeyword */:
-                case 103 /* NullKeyword */:
-                case 105 /* SuperKeyword */:
-                case 107 /* ThisKeyword */:
-                case 188 /* ThisType */:
-                case 78 /* Identifier */:
+                case 95 /* FalseKeyword */:
+                case 110 /* TrueKeyword */:
+                case 104 /* NullKeyword */:
+                case 106 /* SuperKeyword */:
+                case 108 /* ThisKeyword */:
+                case 190 /* ThisType */:
+                case 79 /* Identifier */:
                     break;
                 // Cant create the text span
                 default:
@@ -154127,7 +157562,7 @@
                     // If this is name of a module declarations, check if this is right side of dotted module name
                     // If parent of the module declaration which is parent of this node is module declaration and its body is the module declaration that this node is name of
                     // Then this name is name from dotted module
-                    if (nodeForStartPos.parent.parent.kind === 257 /* ModuleDeclaration */ &&
+                    if (nodeForStartPos.parent.parent.kind === 259 /* ModuleDeclaration */ &&
                         nodeForStartPos.parent.parent.body === nodeForStartPos.parent) {
                         // Use parent module declarations name for start pos
                         nodeForStartPos = nodeForStartPos.parent.parent.name;
@@ -154480,14 +157915,14 @@
             else {
                 // If is not commenting then remove all comments found.
                 for (var _i = 0, positions_1 = positions; _i < positions_1.length; _i++) {
-                    var pos_1 = positions_1[_i];
-                    var from = pos_1 - closeMultiline.length > 0 ? pos_1 - closeMultiline.length : 0;
+                    var pos_2 = positions_1[_i];
+                    var from = pos_2 - closeMultiline.length > 0 ? pos_2 - closeMultiline.length : 0;
                     var offset = text.substr(from, closeMultiline.length) === closeMultiline ? closeMultiline.length : 0;
                     textChanges.push({
                         newText: "",
                         span: {
                             length: openMultiline.length,
-                            start: pos_1 - offset
+                            start: pos_2 - offset
                         }
                     });
                 }
@@ -154680,6 +158115,16 @@
                 kind: kind
             };
         }
+        function getInlayHintsContext(file, span, preferences) {
+            return {
+                file: file,
+                program: getProgram(),
+                host: host,
+                span: span,
+                preferences: preferences,
+                cancellationToken: cancellationToken,
+            };
+        }
         function getSmartSelectionRange(fileName, position) {
             return ts.SmartSelectionRange.getSmartSelectionRange(position, syntaxTreeCache.getCurrentSourceFile(fileName));
         }
@@ -154722,6 +158167,12 @@
             var declaration = ts.firstOrOnly(ts.CallHierarchy.resolveCallHierarchyDeclaration(program, position === 0 ? sourceFile : ts.getTouchingPropertyName(sourceFile, position)));
             return declaration ? ts.CallHierarchy.getOutgoingCalls(program, declaration) : [];
         }
+        function provideInlayHints(fileName, span, preferences) {
+            if (preferences === void 0) { preferences = ts.emptyOptions; }
+            synchronizeHostData();
+            var sourceFile = getValidSourceFile(fileName);
+            return ts.InlayHints.provideInlayHints(getInlayHintsContext(sourceFile, span, preferences));
+        }
         var ls = {
             dispose: dispose,
             cleanupSemanticCache: cleanupSemanticCache,
@@ -154787,6 +158238,7 @@
             toggleMultilineComment: toggleMultilineComment,
             commentSelection: commentSelection,
             uncommentSelection: uncommentSelection,
+            provideInlayHints: provideInlayHints,
         };
         switch (languageServiceMode) {
             case ts.LanguageServiceMode.Semantic:
@@ -154848,7 +158300,7 @@
      */
     function literalIsName(node) {
         return ts.isDeclarationName(node) ||
-            node.parent.kind === 273 /* ExternalModuleReference */ ||
+            node.parent.kind === 275 /* ExternalModuleReference */ ||
             isArgumentOfElementAccessExpression(node) ||
             ts.isLiteralComputedPropertyDeclarationName(node);
     }
@@ -154866,13 +158318,13 @@
             case 10 /* StringLiteral */:
             case 14 /* NoSubstitutionTemplateLiteral */:
             case 8 /* NumericLiteral */:
-                if (node.parent.kind === 159 /* ComputedPropertyName */) {
+                if (node.parent.kind === 160 /* ComputedPropertyName */) {
                     return ts.isObjectLiteralElement(node.parent.parent) ? node.parent.parent : undefined;
                 }
             // falls through
-            case 78 /* Identifier */:
+            case 79 /* Identifier */:
                 return ts.isObjectLiteralElement(node.parent) &&
-                    (node.parent.parent.kind === 201 /* ObjectLiteralExpression */ || node.parent.parent.kind === 282 /* JsxAttributes */) &&
+                    (node.parent.parent.kind === 203 /* ObjectLiteralExpression */ || node.parent.parent.kind === 284 /* JsxAttributes */) &&
                     node.parent.name === node ? node.parent : undefined;
         }
         return undefined;
@@ -154914,7 +158366,7 @@
     function isArgumentOfElementAccessExpression(node) {
         return node &&
             node.parent &&
-            node.parent.kind === 203 /* ElementAccessExpression */ &&
+            node.parent.kind === 205 /* ElementAccessExpression */ &&
             node.parent.argumentExpression === node;
     }
     /**
@@ -154994,114 +158446,114 @@
                 if (node) {
                     var parent = node.parent;
                     switch (node.kind) {
-                        case 233 /* VariableStatement */:
+                        case 235 /* VariableStatement */:
                             // Span on first variable declaration
                             return spanInVariableDeclaration(node.declarationList.declarations[0]);
-                        case 250 /* VariableDeclaration */:
-                        case 164 /* PropertyDeclaration */:
-                        case 163 /* PropertySignature */:
+                        case 252 /* VariableDeclaration */:
+                        case 165 /* PropertyDeclaration */:
+                        case 164 /* PropertySignature */:
                             return spanInVariableDeclaration(node);
-                        case 161 /* Parameter */:
+                        case 162 /* Parameter */:
                             return spanInParameterDeclaration(node);
-                        case 252 /* FunctionDeclaration */:
-                        case 166 /* MethodDeclaration */:
-                        case 165 /* MethodSignature */:
-                        case 168 /* GetAccessor */:
-                        case 169 /* SetAccessor */:
-                        case 167 /* Constructor */:
-                        case 209 /* FunctionExpression */:
-                        case 210 /* ArrowFunction */:
+                        case 254 /* FunctionDeclaration */:
+                        case 167 /* MethodDeclaration */:
+                        case 166 /* MethodSignature */:
+                        case 170 /* GetAccessor */:
+                        case 171 /* SetAccessor */:
+                        case 169 /* Constructor */:
+                        case 211 /* FunctionExpression */:
+                        case 212 /* ArrowFunction */:
                             return spanInFunctionDeclaration(node);
-                        case 231 /* Block */:
+                        case 233 /* Block */:
                             if (ts.isFunctionBlock(node)) {
                                 return spanInFunctionBlock(node);
                             }
                         // falls through
-                        case 258 /* ModuleBlock */:
+                        case 260 /* ModuleBlock */:
                             return spanInBlock(node);
-                        case 288 /* CatchClause */:
+                        case 290 /* CatchClause */:
                             return spanInBlock(node.block);
-                        case 234 /* ExpressionStatement */:
+                        case 236 /* ExpressionStatement */:
                             // span on the expression
                             return textSpan(node.expression);
-                        case 243 /* ReturnStatement */:
+                        case 245 /* ReturnStatement */:
                             // span on return keyword and expression if present
                             return textSpan(node.getChildAt(0), node.expression);
-                        case 237 /* WhileStatement */:
+                        case 239 /* WhileStatement */:
                             // Span on while(...)
                             return textSpanEndingAtNextToken(node, node.expression);
-                        case 236 /* DoStatement */:
+                        case 238 /* DoStatement */:
                             // span in statement of the do statement
                             return spanInNode(node.statement);
-                        case 249 /* DebuggerStatement */:
+                        case 251 /* DebuggerStatement */:
                             // span on debugger keyword
                             return textSpan(node.getChildAt(0));
-                        case 235 /* IfStatement */:
+                        case 237 /* IfStatement */:
                             // set on if(..) span
                             return textSpanEndingAtNextToken(node, node.expression);
-                        case 246 /* LabeledStatement */:
+                        case 248 /* LabeledStatement */:
                             // span in statement
                             return spanInNode(node.statement);
-                        case 242 /* BreakStatement */:
-                        case 241 /* ContinueStatement */:
+                        case 244 /* BreakStatement */:
+                        case 243 /* ContinueStatement */:
                             // On break or continue keyword and label if present
                             return textSpan(node.getChildAt(0), node.label);
-                        case 238 /* ForStatement */:
+                        case 240 /* ForStatement */:
                             return spanInForStatement(node);
-                        case 239 /* ForInStatement */:
+                        case 241 /* ForInStatement */:
                             // span of for (a in ...)
                             return textSpanEndingAtNextToken(node, node.expression);
-                        case 240 /* ForOfStatement */:
+                        case 242 /* ForOfStatement */:
                             // span in initializer
                             return spanInInitializerOfForLike(node);
-                        case 245 /* SwitchStatement */:
+                        case 247 /* SwitchStatement */:
                             // span on switch(...)
                             return textSpanEndingAtNextToken(node, node.expression);
-                        case 285 /* CaseClause */:
-                        case 286 /* DefaultClause */:
+                        case 287 /* CaseClause */:
+                        case 288 /* DefaultClause */:
                             // span in first statement of the clause
                             return spanInNode(node.statements[0]);
-                        case 248 /* TryStatement */:
+                        case 250 /* TryStatement */:
                             // span in try block
                             return spanInBlock(node.tryBlock);
-                        case 247 /* ThrowStatement */:
+                        case 249 /* ThrowStatement */:
                             // span in throw ...
                             return textSpan(node, node.expression);
-                        case 267 /* ExportAssignment */:
+                        case 269 /* ExportAssignment */:
                             // span on export = id
                             return textSpan(node, node.expression);
-                        case 261 /* ImportEqualsDeclaration */:
+                        case 263 /* ImportEqualsDeclaration */:
                             // import statement without including semicolon
                             return textSpan(node, node.moduleReference);
-                        case 262 /* ImportDeclaration */:
+                        case 264 /* ImportDeclaration */:
                             // import statement without including semicolon
                             return textSpan(node, node.moduleSpecifier);
-                        case 268 /* ExportDeclaration */:
+                        case 270 /* ExportDeclaration */:
                             // import statement without including semicolon
                             return textSpan(node, node.moduleSpecifier);
-                        case 257 /* ModuleDeclaration */:
+                        case 259 /* ModuleDeclaration */:
                             // span on complete module if it is instantiated
                             if (ts.getModuleInstanceState(node) !== 1 /* Instantiated */) {
                                 return undefined;
                             }
                         // falls through
-                        case 253 /* ClassDeclaration */:
-                        case 256 /* EnumDeclaration */:
-                        case 292 /* EnumMember */:
-                        case 199 /* BindingElement */:
+                        case 255 /* ClassDeclaration */:
+                        case 258 /* EnumDeclaration */:
+                        case 294 /* EnumMember */:
+                        case 201 /* BindingElement */:
                             // span on complete node
                             return textSpan(node);
-                        case 244 /* WithStatement */:
+                        case 246 /* WithStatement */:
                             // span in statement
                             return spanInNode(node.statement);
-                        case 162 /* Decorator */:
+                        case 163 /* Decorator */:
                             return spanInNodeArray(parent.decorators);
-                        case 197 /* ObjectBindingPattern */:
-                        case 198 /* ArrayBindingPattern */:
+                        case 199 /* ObjectBindingPattern */:
+                        case 200 /* ArrayBindingPattern */:
                             return spanInBindingPattern(node);
                         // No breakpoint in interface, type alias
-                        case 254 /* InterfaceDeclaration */:
-                        case 255 /* TypeAliasDeclaration */:
+                        case 256 /* InterfaceDeclaration */:
+                        case 257 /* TypeAliasDeclaration */:
                             return undefined;
                         // Tokens:
                         case 26 /* SemicolonToken */:
@@ -155125,13 +158577,13 @@
                         case 29 /* LessThanToken */:
                             return spanInGreaterThanOrLessThanToken(node);
                         // Keywords:
-                        case 114 /* WhileKeyword */:
+                        case 115 /* WhileKeyword */:
                             return spanInWhileKeyword(node);
-                        case 90 /* ElseKeyword */:
-                        case 82 /* CatchKeyword */:
-                        case 95 /* FinallyKeyword */:
+                        case 91 /* ElseKeyword */:
+                        case 83 /* CatchKeyword */:
+                        case 96 /* FinallyKeyword */:
                             return spanInNextNode(node);
-                        case 157 /* OfKeyword */:
+                        case 158 /* OfKeyword */:
                             return spanInOfKeyword(node);
                         default:
                             // Destructuring pattern in destructuring assignment
@@ -155143,14 +158595,14 @@
                             // Set breakpoint on identifier element of destructuring pattern
                             // `a` or `...c` or `d: x` from
                             // `[a, b, ...c]` or `{ a, b }` or `{ d: x }` from destructuring pattern
-                            if ((node.kind === 78 /* Identifier */ ||
-                                node.kind === 221 /* SpreadElement */ ||
-                                node.kind === 289 /* PropertyAssignment */ ||
-                                node.kind === 290 /* ShorthandPropertyAssignment */) &&
+                            if ((node.kind === 79 /* Identifier */ ||
+                                node.kind === 223 /* SpreadElement */ ||
+                                node.kind === 291 /* PropertyAssignment */ ||
+                                node.kind === 292 /* ShorthandPropertyAssignment */) &&
                                 ts.isArrayLiteralOrObjectLiteralDestructuringPattern(parent)) {
                                 return textSpan(node);
                             }
-                            if (node.kind === 217 /* BinaryExpression */) {
+                            if (node.kind === 219 /* BinaryExpression */) {
                                 var _a = node, left = _a.left, operatorToken = _a.operatorToken;
                                 // Set breakpoint in destructuring pattern if its destructuring assignment
                                 // [a, b, c] or {a, b, c} of
@@ -155159,7 +158611,7 @@
                                 if (ts.isArrayLiteralOrObjectLiteralDestructuringPattern(left)) {
                                     return spanInArrayLiteralOrObjectLiteralDestructuringPattern(left);
                                 }
-                                if (operatorToken.kind === 62 /* EqualsToken */ && ts.isArrayLiteralOrObjectLiteralDestructuringPattern(node.parent)) {
+                                if (operatorToken.kind === 63 /* EqualsToken */ && ts.isArrayLiteralOrObjectLiteralDestructuringPattern(node.parent)) {
                                     // Set breakpoint on assignment expression element of destructuring pattern
                                     // a = expression of
                                     // [a = expression, b, c] = someExpression or
@@ -155172,22 +158624,22 @@
                             }
                             if (ts.isExpressionNode(node)) {
                                 switch (parent.kind) {
-                                    case 236 /* DoStatement */:
+                                    case 238 /* DoStatement */:
                                         // Set span as if on while keyword
                                         return spanInPreviousNode(node);
-                                    case 162 /* Decorator */:
+                                    case 163 /* Decorator */:
                                         // Set breakpoint on the decorator emit
                                         return spanInNode(node.parent);
-                                    case 238 /* ForStatement */:
-                                    case 240 /* ForOfStatement */:
+                                    case 240 /* ForStatement */:
+                                    case 242 /* ForOfStatement */:
                                         return textSpan(node);
-                                    case 217 /* BinaryExpression */:
+                                    case 219 /* BinaryExpression */:
                                         if (node.parent.operatorToken.kind === 27 /* CommaToken */) {
                                             // If this is a comma expression, the breakpoint is possible in this expression
                                             return textSpan(node);
                                         }
                                         break;
-                                    case 210 /* ArrowFunction */:
+                                    case 212 /* ArrowFunction */:
                                         if (node.parent.body === node) {
                                             // If this is body of arrow function, it is allowed to have the breakpoint
                                             return textSpan(node);
@@ -155196,21 +158648,21 @@
                                 }
                             }
                             switch (node.parent.kind) {
-                                case 289 /* PropertyAssignment */:
+                                case 291 /* PropertyAssignment */:
                                     // If this is name of property assignment, set breakpoint in the initializer
                                     if (node.parent.name === node &&
                                         !ts.isArrayLiteralOrObjectLiteralDestructuringPattern(node.parent.parent)) {
                                         return spanInNode(node.parent.initializer);
                                     }
                                     break;
-                                case 207 /* TypeAssertionExpression */:
+                                case 209 /* TypeAssertionExpression */:
                                     // Breakpoint in type assertion goes to its operand
                                     if (node.parent.type === node) {
                                         return spanInNextNode(node.parent.type);
                                     }
                                     break;
-                                case 250 /* VariableDeclaration */:
-                                case 161 /* Parameter */: {
+                                case 252 /* VariableDeclaration */:
+                                case 162 /* Parameter */: {
                                     // initializer of variable/parameter declaration go to previous node
                                     var _b = node.parent, initializer = _b.initializer, type = _b.type;
                                     if (initializer === node || type === node || ts.isAssignmentOperator(node.kind)) {
@@ -155218,7 +158670,7 @@
                                     }
                                     break;
                                 }
-                                case 217 /* BinaryExpression */: {
+                                case 219 /* BinaryExpression */: {
                                     var left = node.parent.left;
                                     if (ts.isArrayLiteralOrObjectLiteralDestructuringPattern(left) && node !== left) {
                                         // If initializer of destructuring assignment move to previous token
@@ -155248,7 +158700,7 @@
                 }
                 function spanInVariableDeclaration(variableDeclaration) {
                     // If declaration of for in statement, just set the span in parent
-                    if (variableDeclaration.parent.parent.kind === 239 /* ForInStatement */) {
+                    if (variableDeclaration.parent.parent.kind === 241 /* ForInStatement */) {
                         return spanInNode(variableDeclaration.parent.parent);
                     }
                     var parent = variableDeclaration.parent;
@@ -155260,7 +158712,7 @@
                     // or its declaration from 'for of'
                     if (variableDeclaration.initializer ||
                         ts.hasSyntacticModifier(variableDeclaration, 1 /* Export */) ||
-                        parent.parent.kind === 240 /* ForOfStatement */) {
+                        parent.parent.kind === 242 /* ForOfStatement */) {
                         return textSpanFromVariableDeclaration(variableDeclaration);
                     }
                     if (ts.isVariableDeclarationList(variableDeclaration.parent) &&
@@ -155301,7 +158753,7 @@
                 }
                 function canFunctionHaveSpanInWholeDeclaration(functionDeclaration) {
                     return ts.hasSyntacticModifier(functionDeclaration, 1 /* Export */) ||
-                        (functionDeclaration.parent.kind === 253 /* ClassDeclaration */ && functionDeclaration.kind !== 167 /* Constructor */);
+                        (functionDeclaration.parent.kind === 255 /* ClassDeclaration */ && functionDeclaration.kind !== 169 /* Constructor */);
                 }
                 function spanInFunctionDeclaration(functionDeclaration) {
                     // No breakpoints in the function signature
@@ -155324,26 +158776,26 @@
                 }
                 function spanInBlock(block) {
                     switch (block.parent.kind) {
-                        case 257 /* ModuleDeclaration */:
+                        case 259 /* ModuleDeclaration */:
                             if (ts.getModuleInstanceState(block.parent) !== 1 /* Instantiated */) {
                                 return undefined;
                             }
                         // Set on parent if on same line otherwise on first statement
                         // falls through
-                        case 237 /* WhileStatement */:
-                        case 235 /* IfStatement */:
-                        case 239 /* ForInStatement */:
+                        case 239 /* WhileStatement */:
+                        case 237 /* IfStatement */:
+                        case 241 /* ForInStatement */:
                             return spanInNodeIfStartsOnSameLine(block.parent, block.statements[0]);
                         // Set span on previous token if it starts on same line otherwise on the first statement of the block
-                        case 238 /* ForStatement */:
-                        case 240 /* ForOfStatement */:
+                        case 240 /* ForStatement */:
+                        case 242 /* ForOfStatement */:
                             return spanInNodeIfStartsOnSameLine(ts.findPrecedingToken(block.pos, sourceFile, block.parent), block.statements[0]);
                     }
                     // Default action is to set on first statement
                     return spanInNode(block.statements[0]);
                 }
                 function spanInInitializerOfForLike(forLikeStatement) {
-                    if (forLikeStatement.initializer.kind === 251 /* VariableDeclarationList */) {
+                    if (forLikeStatement.initializer.kind === 253 /* VariableDeclarationList */) {
                         // Declaration list - set breakpoint in first declaration
                         var variableDeclarationList = forLikeStatement.initializer;
                         if (variableDeclarationList.declarations.length > 0) {
@@ -155368,21 +158820,21 @@
                 }
                 function spanInBindingPattern(bindingPattern) {
                     // Set breakpoint in first binding element
-                    var firstBindingElement = ts.forEach(bindingPattern.elements, function (element) { return element.kind !== 223 /* OmittedExpression */ ? element : undefined; });
+                    var firstBindingElement = ts.forEach(bindingPattern.elements, function (element) { return element.kind !== 225 /* OmittedExpression */ ? element : undefined; });
                     if (firstBindingElement) {
                         return spanInNode(firstBindingElement);
                     }
                     // Empty binding pattern of binding element, set breakpoint on binding element
-                    if (bindingPattern.parent.kind === 199 /* BindingElement */) {
+                    if (bindingPattern.parent.kind === 201 /* BindingElement */) {
                         return textSpan(bindingPattern.parent);
                     }
                     // Variable declaration is used as the span
                     return textSpanFromVariableDeclaration(bindingPattern.parent);
                 }
                 function spanInArrayLiteralOrObjectLiteralDestructuringPattern(node) {
-                    ts.Debug.assert(node.kind !== 198 /* ArrayBindingPattern */ && node.kind !== 197 /* ObjectBindingPattern */);
-                    var elements = node.kind === 200 /* ArrayLiteralExpression */ ? node.elements : node.properties;
-                    var firstBindingElement = ts.forEach(elements, function (element) { return element.kind !== 223 /* OmittedExpression */ ? element : undefined; });
+                    ts.Debug.assert(node.kind !== 200 /* ArrayBindingPattern */ && node.kind !== 199 /* ObjectBindingPattern */);
+                    var elements = node.kind === 202 /* ArrayLiteralExpression */ ? node.elements : node.properties;
+                    var firstBindingElement = ts.forEach(elements, function (element) { return element.kind !== 225 /* OmittedExpression */ ? element : undefined; });
                     if (firstBindingElement) {
                         return spanInNode(firstBindingElement);
                     }
@@ -155390,18 +158842,18 @@
                     // just nested element in another destructuring assignment
                     // set breakpoint on assignment when parent is destructuring assignment
                     // Otherwise set breakpoint for this element
-                    return textSpan(node.parent.kind === 217 /* BinaryExpression */ ? node.parent : node);
+                    return textSpan(node.parent.kind === 219 /* BinaryExpression */ ? node.parent : node);
                 }
                 // Tokens:
                 function spanInOpenBraceToken(node) {
                     switch (node.parent.kind) {
-                        case 256 /* EnumDeclaration */:
+                        case 258 /* EnumDeclaration */:
                             var enumDeclaration = node.parent;
                             return spanInNodeIfStartsOnSameLine(ts.findPrecedingToken(node.pos, sourceFile, node.parent), enumDeclaration.members.length ? enumDeclaration.members[0] : enumDeclaration.getLastToken(sourceFile));
-                        case 253 /* ClassDeclaration */:
+                        case 255 /* ClassDeclaration */:
                             var classDeclaration = node.parent;
                             return spanInNodeIfStartsOnSameLine(ts.findPrecedingToken(node.pos, sourceFile, node.parent), classDeclaration.members.length ? classDeclaration.members[0] : classDeclaration.getLastToken(sourceFile));
-                        case 259 /* CaseBlock */:
+                        case 261 /* CaseBlock */:
                             return spanInNodeIfStartsOnSameLine(node.parent.parent, node.parent.clauses[0]);
                     }
                     // Default to parent node
@@ -155409,25 +158861,25 @@
                 }
                 function spanInCloseBraceToken(node) {
                     switch (node.parent.kind) {
-                        case 258 /* ModuleBlock */:
+                        case 260 /* ModuleBlock */:
                             // If this is not an instantiated module block, no bp span
                             if (ts.getModuleInstanceState(node.parent.parent) !== 1 /* Instantiated */) {
                                 return undefined;
                             }
                         // falls through
-                        case 256 /* EnumDeclaration */:
-                        case 253 /* ClassDeclaration */:
+                        case 258 /* EnumDeclaration */:
+                        case 255 /* ClassDeclaration */:
                             // Span on close brace token
                             return textSpan(node);
-                        case 231 /* Block */:
+                        case 233 /* Block */:
                             if (ts.isFunctionBlock(node.parent)) {
                                 // Span on close brace token
                                 return textSpan(node);
                             }
                         // falls through
-                        case 288 /* CatchClause */:
+                        case 290 /* CatchClause */:
                             return spanInNode(ts.lastOrUndefined(node.parent.statements));
-                        case 259 /* CaseBlock */:
+                        case 261 /* CaseBlock */:
                             // breakpoint in last statement of the last clause
                             var caseBlock = node.parent;
                             var lastClause = ts.lastOrUndefined(caseBlock.clauses);
@@ -155435,7 +158887,7 @@
                                 return spanInNode(ts.lastOrUndefined(lastClause.statements));
                             }
                             return undefined;
-                        case 197 /* ObjectBindingPattern */:
+                        case 199 /* ObjectBindingPattern */:
                             // Breakpoint in last binding element or binding pattern if it contains no elements
                             var bindingPattern = node.parent;
                             return spanInNode(ts.lastOrUndefined(bindingPattern.elements) || bindingPattern);
@@ -155451,7 +158903,7 @@
                 }
                 function spanInCloseBracketToken(node) {
                     switch (node.parent.kind) {
-                        case 198 /* ArrayBindingPattern */:
+                        case 200 /* ArrayBindingPattern */:
                             // Breakpoint in last binding element or binding pattern if it contains no elements
                             var bindingPattern = node.parent;
                             return textSpan(ts.lastOrUndefined(bindingPattern.elements) || bindingPattern);
@@ -155466,12 +158918,12 @@
                     }
                 }
                 function spanInOpenParenToken(node) {
-                    if (node.parent.kind === 236 /* DoStatement */ || // Go to while keyword and do action instead
-                        node.parent.kind === 204 /* CallExpression */ ||
-                        node.parent.kind === 205 /* NewExpression */) {
+                    if (node.parent.kind === 238 /* DoStatement */ || // Go to while keyword and do action instead
+                        node.parent.kind === 206 /* CallExpression */ ||
+                        node.parent.kind === 207 /* NewExpression */) {
                         return spanInPreviousNode(node);
                     }
-                    if (node.parent.kind === 208 /* ParenthesizedExpression */) {
+                    if (node.parent.kind === 210 /* ParenthesizedExpression */) {
                         return spanInNextNode(node);
                     }
                     // Default to parent node
@@ -155480,21 +158932,21 @@
                 function spanInCloseParenToken(node) {
                     // Is this close paren token of parameter list, set span in previous token
                     switch (node.parent.kind) {
-                        case 209 /* FunctionExpression */:
-                        case 252 /* FunctionDeclaration */:
-                        case 210 /* ArrowFunction */:
-                        case 166 /* MethodDeclaration */:
-                        case 165 /* MethodSignature */:
-                        case 168 /* GetAccessor */:
-                        case 169 /* SetAccessor */:
-                        case 167 /* Constructor */:
-                        case 237 /* WhileStatement */:
-                        case 236 /* DoStatement */:
-                        case 238 /* ForStatement */:
-                        case 240 /* ForOfStatement */:
-                        case 204 /* CallExpression */:
-                        case 205 /* NewExpression */:
-                        case 208 /* ParenthesizedExpression */:
+                        case 211 /* FunctionExpression */:
+                        case 254 /* FunctionDeclaration */:
+                        case 212 /* ArrowFunction */:
+                        case 167 /* MethodDeclaration */:
+                        case 166 /* MethodSignature */:
+                        case 170 /* GetAccessor */:
+                        case 171 /* SetAccessor */:
+                        case 169 /* Constructor */:
+                        case 239 /* WhileStatement */:
+                        case 238 /* DoStatement */:
+                        case 240 /* ForStatement */:
+                        case 242 /* ForOfStatement */:
+                        case 206 /* CallExpression */:
+                        case 207 /* NewExpression */:
+                        case 210 /* ParenthesizedExpression */:
                             return spanInPreviousNode(node);
                         // Default to parent node
                         default:
@@ -155504,20 +158956,20 @@
                 function spanInColonToken(node) {
                     // Is this : specifying return annotation of the function declaration
                     if (ts.isFunctionLike(node.parent) ||
-                        node.parent.kind === 289 /* PropertyAssignment */ ||
-                        node.parent.kind === 161 /* Parameter */) {
+                        node.parent.kind === 291 /* PropertyAssignment */ ||
+                        node.parent.kind === 162 /* Parameter */) {
                         return spanInPreviousNode(node);
                     }
                     return spanInNode(node.parent);
                 }
                 function spanInGreaterThanOrLessThanToken(node) {
-                    if (node.parent.kind === 207 /* TypeAssertionExpression */) {
+                    if (node.parent.kind === 209 /* TypeAssertionExpression */) {
                         return spanInNextNode(node);
                     }
                     return spanInNode(node.parent);
                 }
                 function spanInWhileKeyword(node) {
-                    if (node.parent.kind === 236 /* DoStatement */) {
+                    if (node.parent.kind === 238 /* DoStatement */) {
                         // Set span on while expression
                         return textSpanEndingAtNextToken(node, node.parent.expression);
                     }
@@ -155525,7 +158977,7 @@
                     return spanInNode(node.parent);
                 }
                 function spanInOfKeyword(node) {
-                    if (node.parent.kind === 240 /* ForOfStatement */) {
+                    if (node.parent.kind === 242 /* ForOfStatement */) {
                         // Set using next token
                         return spanInNextNode(node);
                     }
@@ -156133,6 +159585,10 @@
             var _this = this;
             return this.forwardJSONCall("provideCallHierarchyOutgoingCalls('" + fileName + "', " + position + ")", function () { return _this.languageService.provideCallHierarchyOutgoingCalls(fileName, position); });
         };
+        LanguageServiceShimObject.prototype.provideInlayHints = function (fileName, span, preference) {
+            var _this = this;
+            return this.forwardJSONCall("provideInlayHints('" + fileName + "', '" + JSON.stringify(span) + "', " + JSON.stringify(preference) + ")", function () { return _this.languageService.provideInlayHints(fileName, span, preference); });
+        };
         /// Emit
         LanguageServiceShimObject.prototype.getEmitOutput = function (fileName) {
             var _this = this;
@@ -156283,7 +159739,7 @@
                     typeAcquisition: configFile.typeAcquisition,
                     files: configFile.fileNames,
                     raw: configFile.raw,
-                    errors: realizeDiagnostics(__spreadArray(__spreadArray([], result.parseDiagnostics), configFile.errors), "\r\n")
+                    errors: realizeDiagnostics(__spreadArray(__spreadArray([], result.parseDiagnostics, true), configFile.errors, true), "\r\n")
                 };
             });
         };
@@ -157108,7 +160564,7 @@
         }
         else {
             type = operatorOrType;
-            operator = 138 /* KeyOfKeyword */;
+            operator = 139 /* KeyOfKeyword */;
         }
         return ts.factory.createTypeOperatorNode(operator, type);
     }, factoryDeprecation);
@@ -157286,9 +160742,9 @@
     ts.createNode = ts.Debug.deprecate(function createNode(kind, pos, end) {
         if (pos === void 0) { pos = 0; }
         if (end === void 0) { end = 0; }
-        return ts.setTextRangePosEnd(kind === 298 /* SourceFile */ ? ts.parseBaseNodeFactory.createBaseSourceFileNode(kind) :
-            kind === 78 /* Identifier */ ? ts.parseBaseNodeFactory.createBaseIdentifierNode(kind) :
-                kind === 79 /* PrivateIdentifier */ ? ts.parseBaseNodeFactory.createBasePrivateIdentifierNode(kind) :
+        return ts.setTextRangePosEnd(kind === 300 /* SourceFile */ ? ts.parseBaseNodeFactory.createBaseSourceFileNode(kind) :
+            kind === 79 /* Identifier */ ? ts.parseBaseNodeFactory.createBaseIdentifierNode(kind) :
+                kind === 80 /* PrivateIdentifier */ ? ts.parseBaseNodeFactory.createBasePrivateIdentifierNode(kind) :
                     !ts.isNodeKind(kind) ? ts.parseBaseNodeFactory.createBaseTokenNode(kind) :
                         ts.parseBaseNodeFactory.createBaseNode(kind), pos, end);
     }, { since: "4.0", warnAfter: "4.1", message: "Use an appropriate `factory` method instead." });
@@ -157315,7 +160771,7 @@
     // #region Renamed node Tests
     /** @deprecated Use `isTypeAssertionExpression` instead. */
     ts.isTypeAssertion = ts.Debug.deprecate(function isTypeAssertion(node) {
-        return node.kind === 207 /* TypeAssertionExpression */;
+        return node.kind === 209 /* TypeAssertionExpression */;
     }, {
         since: "4.0",
         warnAfter: "4.1",
diff --git a/node_modules/typescript/lib/typingsInstaller.js b/node_modules/typescript/lib/typingsInstaller.js
index 14d9f58..a0e7177 100644
--- a/node_modules/typescript/lib/typingsInstaller.js
+++ b/node_modules/typescript/lib/typingsInstaller.js
@@ -15,10 +15,14 @@
 
 
 "use strict";
-var __spreadArray = (this && this.__spreadArray) || function (to, from) {
-    for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)
-        to[j] = from[i];
-    return to;
+var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
+    if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
+        if (ar || !(i in from)) {
+            if (!ar) ar = Array.prototype.slice.call(from, 0, i);
+            ar[i] = from[i];
+        }
+    }
+    return to.concat(ar || Array.prototype.slice.call(from));
 };
 var __assign = (this && this.__assign) || function () {
     __assign = Object.assign || function(t) {
@@ -81,11 +85,11 @@
 (function (ts) {
     // WARNING: The script `configurePrerelease.ts` uses a regexp to parse out these values.
     // If changing the text in this section, be sure to test `configurePrerelease` too.
-    ts.versionMajorMinor = "4.3";
+    ts.versionMajorMinor = "4.4";
     // The following is baselined as a literal template type without intervention
     /** The version of the TypeScript compiler release */
     // eslint-disable-next-line @typescript-eslint/no-inferrable-types
-    ts.version = "4.3.5";
+    ts.version = "4.4.2";
     /* @internal */
     var Comparison;
     (function (Comparison) {
@@ -770,7 +774,7 @@
             return array1;
         if (!some(array1))
             return array2;
-        return __spreadArray(__spreadArray([], array1), array2);
+        return __spreadArray(__spreadArray([], array1, true), array2, true);
     }
     ts.concatenate = concatenate;
     function selectIndex(_, i) {
@@ -1928,10 +1932,46 @@
      * Takes a string like "jquery-min.4.2.3" and returns "jquery"
      */
     function removeMinAndVersionNumbers(fileName) {
-        // Match a "." or "-" followed by a version number or 'min' at the end of the name
-        var trailingMinOrVersion = /[.-]((min)|(\d+(\.\d+)*))$/;
-        // The "min" or version may both be present, in either order, so try applying the above twice.
-        return fileName.replace(trailingMinOrVersion, "").replace(trailingMinOrVersion, "");
+        // We used to use the regex /[.-]((min)|(\d+(\.\d+)*))$/ and would just .replace it twice.
+        // Unfortunately, that regex has O(n^2) performance because v8 doesn't match from the end of the string.
+        // Instead, we now essentially scan the filename (backwards) ourselves.
+        var end = fileName.length;
+        for (var pos = end - 1; pos > 0; pos--) {
+            var ch = fileName.charCodeAt(pos);
+            if (ch >= 48 /* _0 */ && ch <= 57 /* _9 */) {
+                // Match a \d+ segment
+                do {
+                    --pos;
+                    ch = fileName.charCodeAt(pos);
+                } while (pos > 0 && ch >= 48 /* _0 */ && ch <= 57 /* _9 */);
+            }
+            else if (pos > 4 && (ch === 110 /* n */ || ch === 78 /* N */)) {
+                // Looking for "min" or "min"
+                // Already matched the 'n'
+                --pos;
+                ch = fileName.charCodeAt(pos);
+                if (ch !== 105 /* i */ && ch !== 73 /* I */) {
+                    break;
+                }
+                --pos;
+                ch = fileName.charCodeAt(pos);
+                if (ch !== 109 /* m */ && ch !== 77 /* M */) {
+                    break;
+                }
+                --pos;
+                ch = fileName.charCodeAt(pos);
+            }
+            else {
+                // This character is not part of either suffix pattern
+                break;
+            }
+            if (ch !== 45 /* minus */ && ch !== 46 /* dot */) {
+                break;
+            }
+            end = pos;
+        }
+        // end might be fileName.length, in which case this should internally no-op
+        return end === fileName.length ? fileName : fileName.slice(0, end);
     }
     ts.removeMinAndVersionNumbers = removeMinAndVersionNumbers;
     /** Remove an item from an array, moving everything to its right one space left. */
@@ -2172,6 +2212,33 @@
         return array.slice(0, index);
     }
     ts.takeWhile = takeWhile;
+    /**
+     * Removes the leading and trailing white space and line terminator characters from a string.
+     */
+    ts.trimString = !!String.prototype.trim ? (function (s) { return s.trim(); }) : function (s) { return ts.trimStringEnd(ts.trimStringStart(s)); };
+    /**
+     * Returns a copy with trailing whitespace removed.
+     */
+    ts.trimStringEnd = !!String.prototype.trimEnd ? (function (s) { return s.trimEnd(); }) : trimEndImpl;
+    /**
+     * Returns a copy with leading whitespace removed.
+     */
+    ts.trimStringStart = !!String.prototype.trimStart ? (function (s) { return s.trimStart(); }) : function (s) { return s.replace(/^\s+/g, ""); };
+    /**
+     * https://jsbench.me/gjkoxld4au/1
+     * The simple regex for this, /\s+$/g is O(n^2) in v8.
+     * The native .trimEnd method is by far best, but since that's technically ES2019,
+     * we provide a (still much faster than the simple regex) fallback.
+     */
+    function trimEndImpl(s) {
+        var end = s.length - 1;
+        while (end >= 0) {
+            if (!ts.isWhiteSpaceLike(s.charCodeAt(end)))
+                break;
+            end--;
+        }
+        return s.slice(0, end + 1);
+    }
 })(ts || (ts = {}));
 /* @internal */
 var ts;
@@ -2361,7 +2428,7 @@
         Debug.assertEachNode = assertEachNode;
         function assertNode(node, test, message, stackCrawlMark) {
             if (shouldAssertFunction(1 /* Normal */, "assertNode")) {
-                assert(node !== undefined && (test === undefined || test(node)), message || "Unexpected node.", function () { return "Node " + formatSyntaxKind(node.kind) + " did not pass test '" + getFunctionName(test) + "'."; }, stackCrawlMark || assertNode);
+                assert(node !== undefined && (test === undefined || test(node)), message || "Unexpected node.", function () { return "Node " + formatSyntaxKind(node === null || node === void 0 ? void 0 : node.kind) + " did not pass test '" + getFunctionName(test) + "'."; }, stackCrawlMark || assertNode);
             }
         }
         Debug.assertNode = assertNode;
@@ -2373,13 +2440,13 @@
         Debug.assertNotNode = assertNotNode;
         function assertOptionalNode(node, test, message, stackCrawlMark) {
             if (shouldAssertFunction(1 /* Normal */, "assertOptionalNode")) {
-                assert(test === undefined || node === undefined || test(node), message || "Unexpected node.", function () { return "Node " + formatSyntaxKind(node.kind) + " did not pass test '" + getFunctionName(test) + "'."; }, stackCrawlMark || assertOptionalNode);
+                assert(test === undefined || node === undefined || test(node), message || "Unexpected node.", function () { return "Node " + formatSyntaxKind(node === null || node === void 0 ? void 0 : node.kind) + " did not pass test '" + getFunctionName(test) + "'."; }, stackCrawlMark || assertOptionalNode);
             }
         }
         Debug.assertOptionalNode = assertOptionalNode;
         function assertOptionalToken(node, kind, message, stackCrawlMark) {
             if (shouldAssertFunction(1 /* Normal */, "assertOptionalToken")) {
-                assert(kind === undefined || node === undefined || node.kind === kind, message || "Unexpected node.", function () { return "Node " + formatSyntaxKind(node.kind) + " was not a '" + formatSyntaxKind(kind) + "' token."; }, stackCrawlMark || assertOptionalToken);
+                assert(kind === undefined || node === undefined || node.kind === kind, message || "Unexpected node.", function () { return "Node " + formatSyntaxKind(node === null || node === void 0 ? void 0 : node.kind) + " was not a '" + formatSyntaxKind(kind) + "' token."; }, stackCrawlMark || assertOptionalToken);
             }
         }
         Debug.assertOptionalToken = assertOptionalToken;
@@ -2568,6 +2635,9 @@
                             // An `Array` with extra properties is rendered as `[A, B, prop1: 1, prop2: 2]`. Most of
                             // these aren't immediately useful so we trim off the `prop1: ..., prop2: ...` part from the
                             // formatted string.
+                            // This regex can trigger slow backtracking because of overlapping potential captures.
+                            // We don't care, this is debug code that's only enabled with a debugger attached -
+                            // we're just taking note of it for anyone checking regex performance in the future.
                             defaultValue = String(defaultValue).replace(/(?:,[\s\w\d_]+:[^,]+)+\]$/, "]");
                             return "NodeArray " + defaultValue;
                         }
@@ -3016,7 +3086,7 @@
     // range-set    ::= range ( logical-or range ) *
     // range        ::= hyphen | simple ( ' ' simple ) * | ''
     // logical-or   ::= ( ' ' ) * '||' ( ' ' ) *
-    var logicalOrRegExp = /\s*\|\|\s*/g;
+    var logicalOrRegExp = /\|\|/g;
     var whitespaceRegExp = /\s+/g;
     // https://github.com/npm/node-semver#range-grammar
     //
@@ -3039,14 +3109,15 @@
     // primitive    ::= ( '<' | '>' | '>=' | '<=' | '=' ) partial
     // tilde        ::= '~' partial
     // caret        ::= '^' partial
-    var rangeRegExp = /^\s*(~|\^|<|<=|>|>=|=)?\s*([a-z0-9-+.*]+)$/i;
+    var rangeRegExp = /^(~|\^|<|<=|>|>=|=)?\s*([a-z0-9-+.*]+)$/i;
     function parseRange(text) {
         var alternatives = [];
-        for (var _i = 0, _a = text.trim().split(logicalOrRegExp); _i < _a.length; _i++) {
+        for (var _i = 0, _a = ts.trimString(text).split(logicalOrRegExp); _i < _a.length; _i++) {
             var range = _a[_i];
             if (!range)
                 continue;
             var comparators = [];
+            range = ts.trimString(range);
             var match = hyphenRegExp.exec(range);
             if (match) {
                 if (!parseHyphen(match[1], match[2], comparators))
@@ -3055,7 +3126,7 @@
             else {
                 for (var _b = 0, _c = range.split(whitespaceRegExp); _b < _c.length; _b++) {
                     var simple = _c[_b];
-                    var match_1 = rangeRegExp.exec(simple);
+                    var match_1 = rangeRegExp.exec(ts.trimString(simple));
                     if (!match_1 || !parseComparator(match_1[1], match_1[2], comparators))
                         return undefined;
                 }
@@ -3802,332 +3873,338 @@
         SyntaxKind[SyntaxKind["QuestionQuestionToken"] = 60] = "QuestionQuestionToken";
         /** Only the JSDoc scanner produces BacktickToken. The normal scanner produces NoSubstitutionTemplateLiteral and related kinds. */
         SyntaxKind[SyntaxKind["BacktickToken"] = 61] = "BacktickToken";
+        /** Only the JSDoc scanner produces HashToken. The normal scanner produces PrivateIdentifier. */
+        SyntaxKind[SyntaxKind["HashToken"] = 62] = "HashToken";
         // Assignments
-        SyntaxKind[SyntaxKind["EqualsToken"] = 62] = "EqualsToken";
-        SyntaxKind[SyntaxKind["PlusEqualsToken"] = 63] = "PlusEqualsToken";
-        SyntaxKind[SyntaxKind["MinusEqualsToken"] = 64] = "MinusEqualsToken";
-        SyntaxKind[SyntaxKind["AsteriskEqualsToken"] = 65] = "AsteriskEqualsToken";
-        SyntaxKind[SyntaxKind["AsteriskAsteriskEqualsToken"] = 66] = "AsteriskAsteriskEqualsToken";
-        SyntaxKind[SyntaxKind["SlashEqualsToken"] = 67] = "SlashEqualsToken";
-        SyntaxKind[SyntaxKind["PercentEqualsToken"] = 68] = "PercentEqualsToken";
-        SyntaxKind[SyntaxKind["LessThanLessThanEqualsToken"] = 69] = "LessThanLessThanEqualsToken";
-        SyntaxKind[SyntaxKind["GreaterThanGreaterThanEqualsToken"] = 70] = "GreaterThanGreaterThanEqualsToken";
-        SyntaxKind[SyntaxKind["GreaterThanGreaterThanGreaterThanEqualsToken"] = 71] = "GreaterThanGreaterThanGreaterThanEqualsToken";
-        SyntaxKind[SyntaxKind["AmpersandEqualsToken"] = 72] = "AmpersandEqualsToken";
-        SyntaxKind[SyntaxKind["BarEqualsToken"] = 73] = "BarEqualsToken";
-        SyntaxKind[SyntaxKind["BarBarEqualsToken"] = 74] = "BarBarEqualsToken";
-        SyntaxKind[SyntaxKind["AmpersandAmpersandEqualsToken"] = 75] = "AmpersandAmpersandEqualsToken";
-        SyntaxKind[SyntaxKind["QuestionQuestionEqualsToken"] = 76] = "QuestionQuestionEqualsToken";
-        SyntaxKind[SyntaxKind["CaretEqualsToken"] = 77] = "CaretEqualsToken";
+        SyntaxKind[SyntaxKind["EqualsToken"] = 63] = "EqualsToken";
+        SyntaxKind[SyntaxKind["PlusEqualsToken"] = 64] = "PlusEqualsToken";
+        SyntaxKind[SyntaxKind["MinusEqualsToken"] = 65] = "MinusEqualsToken";
+        SyntaxKind[SyntaxKind["AsteriskEqualsToken"] = 66] = "AsteriskEqualsToken";
+        SyntaxKind[SyntaxKind["AsteriskAsteriskEqualsToken"] = 67] = "AsteriskAsteriskEqualsToken";
+        SyntaxKind[SyntaxKind["SlashEqualsToken"] = 68] = "SlashEqualsToken";
+        SyntaxKind[SyntaxKind["PercentEqualsToken"] = 69] = "PercentEqualsToken";
+        SyntaxKind[SyntaxKind["LessThanLessThanEqualsToken"] = 70] = "LessThanLessThanEqualsToken";
+        SyntaxKind[SyntaxKind["GreaterThanGreaterThanEqualsToken"] = 71] = "GreaterThanGreaterThanEqualsToken";
+        SyntaxKind[SyntaxKind["GreaterThanGreaterThanGreaterThanEqualsToken"] = 72] = "GreaterThanGreaterThanGreaterThanEqualsToken";
+        SyntaxKind[SyntaxKind["AmpersandEqualsToken"] = 73] = "AmpersandEqualsToken";
+        SyntaxKind[SyntaxKind["BarEqualsToken"] = 74] = "BarEqualsToken";
+        SyntaxKind[SyntaxKind["BarBarEqualsToken"] = 75] = "BarBarEqualsToken";
+        SyntaxKind[SyntaxKind["AmpersandAmpersandEqualsToken"] = 76] = "AmpersandAmpersandEqualsToken";
+        SyntaxKind[SyntaxKind["QuestionQuestionEqualsToken"] = 77] = "QuestionQuestionEqualsToken";
+        SyntaxKind[SyntaxKind["CaretEqualsToken"] = 78] = "CaretEqualsToken";
         // Identifiers and PrivateIdentifiers
-        SyntaxKind[SyntaxKind["Identifier"] = 78] = "Identifier";
-        SyntaxKind[SyntaxKind["PrivateIdentifier"] = 79] = "PrivateIdentifier";
+        SyntaxKind[SyntaxKind["Identifier"] = 79] = "Identifier";
+        SyntaxKind[SyntaxKind["PrivateIdentifier"] = 80] = "PrivateIdentifier";
         // Reserved words
-        SyntaxKind[SyntaxKind["BreakKeyword"] = 80] = "BreakKeyword";
-        SyntaxKind[SyntaxKind["CaseKeyword"] = 81] = "CaseKeyword";
-        SyntaxKind[SyntaxKind["CatchKeyword"] = 82] = "CatchKeyword";
-        SyntaxKind[SyntaxKind["ClassKeyword"] = 83] = "ClassKeyword";
-        SyntaxKind[SyntaxKind["ConstKeyword"] = 84] = "ConstKeyword";
-        SyntaxKind[SyntaxKind["ContinueKeyword"] = 85] = "ContinueKeyword";
-        SyntaxKind[SyntaxKind["DebuggerKeyword"] = 86] = "DebuggerKeyword";
-        SyntaxKind[SyntaxKind["DefaultKeyword"] = 87] = "DefaultKeyword";
-        SyntaxKind[SyntaxKind["DeleteKeyword"] = 88] = "DeleteKeyword";
-        SyntaxKind[SyntaxKind["DoKeyword"] = 89] = "DoKeyword";
-        SyntaxKind[SyntaxKind["ElseKeyword"] = 90] = "ElseKeyword";
-        SyntaxKind[SyntaxKind["EnumKeyword"] = 91] = "EnumKeyword";
-        SyntaxKind[SyntaxKind["ExportKeyword"] = 92] = "ExportKeyword";
-        SyntaxKind[SyntaxKind["ExtendsKeyword"] = 93] = "ExtendsKeyword";
-        SyntaxKind[SyntaxKind["FalseKeyword"] = 94] = "FalseKeyword";
-        SyntaxKind[SyntaxKind["FinallyKeyword"] = 95] = "FinallyKeyword";
-        SyntaxKind[SyntaxKind["ForKeyword"] = 96] = "ForKeyword";
-        SyntaxKind[SyntaxKind["FunctionKeyword"] = 97] = "FunctionKeyword";
-        SyntaxKind[SyntaxKind["IfKeyword"] = 98] = "IfKeyword";
-        SyntaxKind[SyntaxKind["ImportKeyword"] = 99] = "ImportKeyword";
-        SyntaxKind[SyntaxKind["InKeyword"] = 100] = "InKeyword";
-        SyntaxKind[SyntaxKind["InstanceOfKeyword"] = 101] = "InstanceOfKeyword";
-        SyntaxKind[SyntaxKind["NewKeyword"] = 102] = "NewKeyword";
-        SyntaxKind[SyntaxKind["NullKeyword"] = 103] = "NullKeyword";
-        SyntaxKind[SyntaxKind["ReturnKeyword"] = 104] = "ReturnKeyword";
-        SyntaxKind[SyntaxKind["SuperKeyword"] = 105] = "SuperKeyword";
-        SyntaxKind[SyntaxKind["SwitchKeyword"] = 106] = "SwitchKeyword";
-        SyntaxKind[SyntaxKind["ThisKeyword"] = 107] = "ThisKeyword";
-        SyntaxKind[SyntaxKind["ThrowKeyword"] = 108] = "ThrowKeyword";
-        SyntaxKind[SyntaxKind["TrueKeyword"] = 109] = "TrueKeyword";
-        SyntaxKind[SyntaxKind["TryKeyword"] = 110] = "TryKeyword";
-        SyntaxKind[SyntaxKind["TypeOfKeyword"] = 111] = "TypeOfKeyword";
-        SyntaxKind[SyntaxKind["VarKeyword"] = 112] = "VarKeyword";
-        SyntaxKind[SyntaxKind["VoidKeyword"] = 113] = "VoidKeyword";
-        SyntaxKind[SyntaxKind["WhileKeyword"] = 114] = "WhileKeyword";
-        SyntaxKind[SyntaxKind["WithKeyword"] = 115] = "WithKeyword";
+        SyntaxKind[SyntaxKind["BreakKeyword"] = 81] = "BreakKeyword";
+        SyntaxKind[SyntaxKind["CaseKeyword"] = 82] = "CaseKeyword";
+        SyntaxKind[SyntaxKind["CatchKeyword"] = 83] = "CatchKeyword";
+        SyntaxKind[SyntaxKind["ClassKeyword"] = 84] = "ClassKeyword";
+        SyntaxKind[SyntaxKind["ConstKeyword"] = 85] = "ConstKeyword";
+        SyntaxKind[SyntaxKind["ContinueKeyword"] = 86] = "ContinueKeyword";
+        SyntaxKind[SyntaxKind["DebuggerKeyword"] = 87] = "DebuggerKeyword";
+        SyntaxKind[SyntaxKind["DefaultKeyword"] = 88] = "DefaultKeyword";
+        SyntaxKind[SyntaxKind["DeleteKeyword"] = 89] = "DeleteKeyword";
+        SyntaxKind[SyntaxKind["DoKeyword"] = 90] = "DoKeyword";
+        SyntaxKind[SyntaxKind["ElseKeyword"] = 91] = "ElseKeyword";
+        SyntaxKind[SyntaxKind["EnumKeyword"] = 92] = "EnumKeyword";
+        SyntaxKind[SyntaxKind["ExportKeyword"] = 93] = "ExportKeyword";
+        SyntaxKind[SyntaxKind["ExtendsKeyword"] = 94] = "ExtendsKeyword";
+        SyntaxKind[SyntaxKind["FalseKeyword"] = 95] = "FalseKeyword";
+        SyntaxKind[SyntaxKind["FinallyKeyword"] = 96] = "FinallyKeyword";
+        SyntaxKind[SyntaxKind["ForKeyword"] = 97] = "ForKeyword";
+        SyntaxKind[SyntaxKind["FunctionKeyword"] = 98] = "FunctionKeyword";
+        SyntaxKind[SyntaxKind["IfKeyword"] = 99] = "IfKeyword";
+        SyntaxKind[SyntaxKind["ImportKeyword"] = 100] = "ImportKeyword";
+        SyntaxKind[SyntaxKind["InKeyword"] = 101] = "InKeyword";
+        SyntaxKind[SyntaxKind["InstanceOfKeyword"] = 102] = "InstanceOfKeyword";
+        SyntaxKind[SyntaxKind["NewKeyword"] = 103] = "NewKeyword";
+        SyntaxKind[SyntaxKind["NullKeyword"] = 104] = "NullKeyword";
+        SyntaxKind[SyntaxKind["ReturnKeyword"] = 105] = "ReturnKeyword";
+        SyntaxKind[SyntaxKind["SuperKeyword"] = 106] = "SuperKeyword";
+        SyntaxKind[SyntaxKind["SwitchKeyword"] = 107] = "SwitchKeyword";
+        SyntaxKind[SyntaxKind["ThisKeyword"] = 108] = "ThisKeyword";
+        SyntaxKind[SyntaxKind["ThrowKeyword"] = 109] = "ThrowKeyword";
+        SyntaxKind[SyntaxKind["TrueKeyword"] = 110] = "TrueKeyword";
+        SyntaxKind[SyntaxKind["TryKeyword"] = 111] = "TryKeyword";
+        SyntaxKind[SyntaxKind["TypeOfKeyword"] = 112] = "TypeOfKeyword";
+        SyntaxKind[SyntaxKind["VarKeyword"] = 113] = "VarKeyword";
+        SyntaxKind[SyntaxKind["VoidKeyword"] = 114] = "VoidKeyword";
+        SyntaxKind[SyntaxKind["WhileKeyword"] = 115] = "WhileKeyword";
+        SyntaxKind[SyntaxKind["WithKeyword"] = 116] = "WithKeyword";
         // Strict mode reserved words
-        SyntaxKind[SyntaxKind["ImplementsKeyword"] = 116] = "ImplementsKeyword";
-        SyntaxKind[SyntaxKind["InterfaceKeyword"] = 117] = "InterfaceKeyword";
-        SyntaxKind[SyntaxKind["LetKeyword"] = 118] = "LetKeyword";
-        SyntaxKind[SyntaxKind["PackageKeyword"] = 119] = "PackageKeyword";
-        SyntaxKind[SyntaxKind["PrivateKeyword"] = 120] = "PrivateKeyword";
-        SyntaxKind[SyntaxKind["ProtectedKeyword"] = 121] = "ProtectedKeyword";
-        SyntaxKind[SyntaxKind["PublicKeyword"] = 122] = "PublicKeyword";
-        SyntaxKind[SyntaxKind["StaticKeyword"] = 123] = "StaticKeyword";
-        SyntaxKind[SyntaxKind["YieldKeyword"] = 124] = "YieldKeyword";
+        SyntaxKind[SyntaxKind["ImplementsKeyword"] = 117] = "ImplementsKeyword";
+        SyntaxKind[SyntaxKind["InterfaceKeyword"] = 118] = "InterfaceKeyword";
+        SyntaxKind[SyntaxKind["LetKeyword"] = 119] = "LetKeyword";
+        SyntaxKind[SyntaxKind["PackageKeyword"] = 120] = "PackageKeyword";
+        SyntaxKind[SyntaxKind["PrivateKeyword"] = 121] = "PrivateKeyword";
+        SyntaxKind[SyntaxKind["ProtectedKeyword"] = 122] = "ProtectedKeyword";
+        SyntaxKind[SyntaxKind["PublicKeyword"] = 123] = "PublicKeyword";
+        SyntaxKind[SyntaxKind["StaticKeyword"] = 124] = "StaticKeyword";
+        SyntaxKind[SyntaxKind["YieldKeyword"] = 125] = "YieldKeyword";
         // Contextual keywords
-        SyntaxKind[SyntaxKind["AbstractKeyword"] = 125] = "AbstractKeyword";
-        SyntaxKind[SyntaxKind["AsKeyword"] = 126] = "AsKeyword";
-        SyntaxKind[SyntaxKind["AssertsKeyword"] = 127] = "AssertsKeyword";
-        SyntaxKind[SyntaxKind["AnyKeyword"] = 128] = "AnyKeyword";
-        SyntaxKind[SyntaxKind["AsyncKeyword"] = 129] = "AsyncKeyword";
-        SyntaxKind[SyntaxKind["AwaitKeyword"] = 130] = "AwaitKeyword";
-        SyntaxKind[SyntaxKind["BooleanKeyword"] = 131] = "BooleanKeyword";
-        SyntaxKind[SyntaxKind["ConstructorKeyword"] = 132] = "ConstructorKeyword";
-        SyntaxKind[SyntaxKind["DeclareKeyword"] = 133] = "DeclareKeyword";
-        SyntaxKind[SyntaxKind["GetKeyword"] = 134] = "GetKeyword";
-        SyntaxKind[SyntaxKind["InferKeyword"] = 135] = "InferKeyword";
-        SyntaxKind[SyntaxKind["IntrinsicKeyword"] = 136] = "IntrinsicKeyword";
-        SyntaxKind[SyntaxKind["IsKeyword"] = 137] = "IsKeyword";
-        SyntaxKind[SyntaxKind["KeyOfKeyword"] = 138] = "KeyOfKeyword";
-        SyntaxKind[SyntaxKind["ModuleKeyword"] = 139] = "ModuleKeyword";
-        SyntaxKind[SyntaxKind["NamespaceKeyword"] = 140] = "NamespaceKeyword";
-        SyntaxKind[SyntaxKind["NeverKeyword"] = 141] = "NeverKeyword";
-        SyntaxKind[SyntaxKind["ReadonlyKeyword"] = 142] = "ReadonlyKeyword";
-        SyntaxKind[SyntaxKind["RequireKeyword"] = 143] = "RequireKeyword";
-        SyntaxKind[SyntaxKind["NumberKeyword"] = 144] = "NumberKeyword";
-        SyntaxKind[SyntaxKind["ObjectKeyword"] = 145] = "ObjectKeyword";
-        SyntaxKind[SyntaxKind["SetKeyword"] = 146] = "SetKeyword";
-        SyntaxKind[SyntaxKind["StringKeyword"] = 147] = "StringKeyword";
-        SyntaxKind[SyntaxKind["SymbolKeyword"] = 148] = "SymbolKeyword";
-        SyntaxKind[SyntaxKind["TypeKeyword"] = 149] = "TypeKeyword";
-        SyntaxKind[SyntaxKind["UndefinedKeyword"] = 150] = "UndefinedKeyword";
-        SyntaxKind[SyntaxKind["UniqueKeyword"] = 151] = "UniqueKeyword";
-        SyntaxKind[SyntaxKind["UnknownKeyword"] = 152] = "UnknownKeyword";
-        SyntaxKind[SyntaxKind["FromKeyword"] = 153] = "FromKeyword";
-        SyntaxKind[SyntaxKind["GlobalKeyword"] = 154] = "GlobalKeyword";
-        SyntaxKind[SyntaxKind["BigIntKeyword"] = 155] = "BigIntKeyword";
-        SyntaxKind[SyntaxKind["OverrideKeyword"] = 156] = "OverrideKeyword";
-        SyntaxKind[SyntaxKind["OfKeyword"] = 157] = "OfKeyword";
+        SyntaxKind[SyntaxKind["AbstractKeyword"] = 126] = "AbstractKeyword";
+        SyntaxKind[SyntaxKind["AsKeyword"] = 127] = "AsKeyword";
+        SyntaxKind[SyntaxKind["AssertsKeyword"] = 128] = "AssertsKeyword";
+        SyntaxKind[SyntaxKind["AnyKeyword"] = 129] = "AnyKeyword";
+        SyntaxKind[SyntaxKind["AsyncKeyword"] = 130] = "AsyncKeyword";
+        SyntaxKind[SyntaxKind["AwaitKeyword"] = 131] = "AwaitKeyword";
+        SyntaxKind[SyntaxKind["BooleanKeyword"] = 132] = "BooleanKeyword";
+        SyntaxKind[SyntaxKind["ConstructorKeyword"] = 133] = "ConstructorKeyword";
+        SyntaxKind[SyntaxKind["DeclareKeyword"] = 134] = "DeclareKeyword";
+        SyntaxKind[SyntaxKind["GetKeyword"] = 135] = "GetKeyword";
+        SyntaxKind[SyntaxKind["InferKeyword"] = 136] = "InferKeyword";
+        SyntaxKind[SyntaxKind["IntrinsicKeyword"] = 137] = "IntrinsicKeyword";
+        SyntaxKind[SyntaxKind["IsKeyword"] = 138] = "IsKeyword";
+        SyntaxKind[SyntaxKind["KeyOfKeyword"] = 139] = "KeyOfKeyword";
+        SyntaxKind[SyntaxKind["ModuleKeyword"] = 140] = "ModuleKeyword";
+        SyntaxKind[SyntaxKind["NamespaceKeyword"] = 141] = "NamespaceKeyword";
+        SyntaxKind[SyntaxKind["NeverKeyword"] = 142] = "NeverKeyword";
+        SyntaxKind[SyntaxKind["ReadonlyKeyword"] = 143] = "ReadonlyKeyword";
+        SyntaxKind[SyntaxKind["RequireKeyword"] = 144] = "RequireKeyword";
+        SyntaxKind[SyntaxKind["NumberKeyword"] = 145] = "NumberKeyword";
+        SyntaxKind[SyntaxKind["ObjectKeyword"] = 146] = "ObjectKeyword";
+        SyntaxKind[SyntaxKind["SetKeyword"] = 147] = "SetKeyword";
+        SyntaxKind[SyntaxKind["StringKeyword"] = 148] = "StringKeyword";
+        SyntaxKind[SyntaxKind["SymbolKeyword"] = 149] = "SymbolKeyword";
+        SyntaxKind[SyntaxKind["TypeKeyword"] = 150] = "TypeKeyword";
+        SyntaxKind[SyntaxKind["UndefinedKeyword"] = 151] = "UndefinedKeyword";
+        SyntaxKind[SyntaxKind["UniqueKeyword"] = 152] = "UniqueKeyword";
+        SyntaxKind[SyntaxKind["UnknownKeyword"] = 153] = "UnknownKeyword";
+        SyntaxKind[SyntaxKind["FromKeyword"] = 154] = "FromKeyword";
+        SyntaxKind[SyntaxKind["GlobalKeyword"] = 155] = "GlobalKeyword";
+        SyntaxKind[SyntaxKind["BigIntKeyword"] = 156] = "BigIntKeyword";
+        SyntaxKind[SyntaxKind["OverrideKeyword"] = 157] = "OverrideKeyword";
+        SyntaxKind[SyntaxKind["OfKeyword"] = 158] = "OfKeyword";
         // Parse tree nodes
         // Names
-        SyntaxKind[SyntaxKind["QualifiedName"] = 158] = "QualifiedName";
-        SyntaxKind[SyntaxKind["ComputedPropertyName"] = 159] = "ComputedPropertyName";
+        SyntaxKind[SyntaxKind["QualifiedName"] = 159] = "QualifiedName";
+        SyntaxKind[SyntaxKind["ComputedPropertyName"] = 160] = "ComputedPropertyName";
         // Signature elements
-        SyntaxKind[SyntaxKind["TypeParameter"] = 160] = "TypeParameter";
-        SyntaxKind[SyntaxKind["Parameter"] = 161] = "Parameter";
-        SyntaxKind[SyntaxKind["Decorator"] = 162] = "Decorator";
+        SyntaxKind[SyntaxKind["TypeParameter"] = 161] = "TypeParameter";
+        SyntaxKind[SyntaxKind["Parameter"] = 162] = "Parameter";
+        SyntaxKind[SyntaxKind["Decorator"] = 163] = "Decorator";
         // TypeMember
-        SyntaxKind[SyntaxKind["PropertySignature"] = 163] = "PropertySignature";
-        SyntaxKind[SyntaxKind["PropertyDeclaration"] = 164] = "PropertyDeclaration";
-        SyntaxKind[SyntaxKind["MethodSignature"] = 165] = "MethodSignature";
-        SyntaxKind[SyntaxKind["MethodDeclaration"] = 166] = "MethodDeclaration";
-        SyntaxKind[SyntaxKind["Constructor"] = 167] = "Constructor";
-        SyntaxKind[SyntaxKind["GetAccessor"] = 168] = "GetAccessor";
-        SyntaxKind[SyntaxKind["SetAccessor"] = 169] = "SetAccessor";
-        SyntaxKind[SyntaxKind["CallSignature"] = 170] = "CallSignature";
-        SyntaxKind[SyntaxKind["ConstructSignature"] = 171] = "ConstructSignature";
-        SyntaxKind[SyntaxKind["IndexSignature"] = 172] = "IndexSignature";
+        SyntaxKind[SyntaxKind["PropertySignature"] = 164] = "PropertySignature";
+        SyntaxKind[SyntaxKind["PropertyDeclaration"] = 165] = "PropertyDeclaration";
+        SyntaxKind[SyntaxKind["MethodSignature"] = 166] = "MethodSignature";
+        SyntaxKind[SyntaxKind["MethodDeclaration"] = 167] = "MethodDeclaration";
+        SyntaxKind[SyntaxKind["ClassStaticBlockDeclaration"] = 168] = "ClassStaticBlockDeclaration";
+        SyntaxKind[SyntaxKind["Constructor"] = 169] = "Constructor";
+        SyntaxKind[SyntaxKind["GetAccessor"] = 170] = "GetAccessor";
+        SyntaxKind[SyntaxKind["SetAccessor"] = 171] = "SetAccessor";
+        SyntaxKind[SyntaxKind["CallSignature"] = 172] = "CallSignature";
+        SyntaxKind[SyntaxKind["ConstructSignature"] = 173] = "ConstructSignature";
+        SyntaxKind[SyntaxKind["IndexSignature"] = 174] = "IndexSignature";
         // Type
-        SyntaxKind[SyntaxKind["TypePredicate"] = 173] = "TypePredicate";
-        SyntaxKind[SyntaxKind["TypeReference"] = 174] = "TypeReference";
-        SyntaxKind[SyntaxKind["FunctionType"] = 175] = "FunctionType";
-        SyntaxKind[SyntaxKind["ConstructorType"] = 176] = "ConstructorType";
-        SyntaxKind[SyntaxKind["TypeQuery"] = 177] = "TypeQuery";
-        SyntaxKind[SyntaxKind["TypeLiteral"] = 178] = "TypeLiteral";
-        SyntaxKind[SyntaxKind["ArrayType"] = 179] = "ArrayType";
-        SyntaxKind[SyntaxKind["TupleType"] = 180] = "TupleType";
-        SyntaxKind[SyntaxKind["OptionalType"] = 181] = "OptionalType";
-        SyntaxKind[SyntaxKind["RestType"] = 182] = "RestType";
-        SyntaxKind[SyntaxKind["UnionType"] = 183] = "UnionType";
-        SyntaxKind[SyntaxKind["IntersectionType"] = 184] = "IntersectionType";
-        SyntaxKind[SyntaxKind["ConditionalType"] = 185] = "ConditionalType";
-        SyntaxKind[SyntaxKind["InferType"] = 186] = "InferType";
-        SyntaxKind[SyntaxKind["ParenthesizedType"] = 187] = "ParenthesizedType";
-        SyntaxKind[SyntaxKind["ThisType"] = 188] = "ThisType";
-        SyntaxKind[SyntaxKind["TypeOperator"] = 189] = "TypeOperator";
-        SyntaxKind[SyntaxKind["IndexedAccessType"] = 190] = "IndexedAccessType";
-        SyntaxKind[SyntaxKind["MappedType"] = 191] = "MappedType";
-        SyntaxKind[SyntaxKind["LiteralType"] = 192] = "LiteralType";
-        SyntaxKind[SyntaxKind["NamedTupleMember"] = 193] = "NamedTupleMember";
-        SyntaxKind[SyntaxKind["TemplateLiteralType"] = 194] = "TemplateLiteralType";
-        SyntaxKind[SyntaxKind["TemplateLiteralTypeSpan"] = 195] = "TemplateLiteralTypeSpan";
-        SyntaxKind[SyntaxKind["ImportType"] = 196] = "ImportType";
+        SyntaxKind[SyntaxKind["TypePredicate"] = 175] = "TypePredicate";
+        SyntaxKind[SyntaxKind["TypeReference"] = 176] = "TypeReference";
+        SyntaxKind[SyntaxKind["FunctionType"] = 177] = "FunctionType";
+        SyntaxKind[SyntaxKind["ConstructorType"] = 178] = "ConstructorType";
+        SyntaxKind[SyntaxKind["TypeQuery"] = 179] = "TypeQuery";
+        SyntaxKind[SyntaxKind["TypeLiteral"] = 180] = "TypeLiteral";
+        SyntaxKind[SyntaxKind["ArrayType"] = 181] = "ArrayType";
+        SyntaxKind[SyntaxKind["TupleType"] = 182] = "TupleType";
+        SyntaxKind[SyntaxKind["OptionalType"] = 183] = "OptionalType";
+        SyntaxKind[SyntaxKind["RestType"] = 184] = "RestType";
+        SyntaxKind[SyntaxKind["UnionType"] = 185] = "UnionType";
+        SyntaxKind[SyntaxKind["IntersectionType"] = 186] = "IntersectionType";
+        SyntaxKind[SyntaxKind["ConditionalType"] = 187] = "ConditionalType";
+        SyntaxKind[SyntaxKind["InferType"] = 188] = "InferType";
+        SyntaxKind[SyntaxKind["ParenthesizedType"] = 189] = "ParenthesizedType";
+        SyntaxKind[SyntaxKind["ThisType"] = 190] = "ThisType";
+        SyntaxKind[SyntaxKind["TypeOperator"] = 191] = "TypeOperator";
+        SyntaxKind[SyntaxKind["IndexedAccessType"] = 192] = "IndexedAccessType";
+        SyntaxKind[SyntaxKind["MappedType"] = 193] = "MappedType";
+        SyntaxKind[SyntaxKind["LiteralType"] = 194] = "LiteralType";
+        SyntaxKind[SyntaxKind["NamedTupleMember"] = 195] = "NamedTupleMember";
+        SyntaxKind[SyntaxKind["TemplateLiteralType"] = 196] = "TemplateLiteralType";
+        SyntaxKind[SyntaxKind["TemplateLiteralTypeSpan"] = 197] = "TemplateLiteralTypeSpan";
+        SyntaxKind[SyntaxKind["ImportType"] = 198] = "ImportType";
         // Binding patterns
-        SyntaxKind[SyntaxKind["ObjectBindingPattern"] = 197] = "ObjectBindingPattern";
-        SyntaxKind[SyntaxKind["ArrayBindingPattern"] = 198] = "ArrayBindingPattern";
-        SyntaxKind[SyntaxKind["BindingElement"] = 199] = "BindingElement";
+        SyntaxKind[SyntaxKind["ObjectBindingPattern"] = 199] = "ObjectBindingPattern";
+        SyntaxKind[SyntaxKind["ArrayBindingPattern"] = 200] = "ArrayBindingPattern";
+        SyntaxKind[SyntaxKind["BindingElement"] = 201] = "BindingElement";
         // Expression
-        SyntaxKind[SyntaxKind["ArrayLiteralExpression"] = 200] = "ArrayLiteralExpression";
-        SyntaxKind[SyntaxKind["ObjectLiteralExpression"] = 201] = "ObjectLiteralExpression";
-        SyntaxKind[SyntaxKind["PropertyAccessExpression"] = 202] = "PropertyAccessExpression";
-        SyntaxKind[SyntaxKind["ElementAccessExpression"] = 203] = "ElementAccessExpression";
-        SyntaxKind[SyntaxKind["CallExpression"] = 204] = "CallExpression";
-        SyntaxKind[SyntaxKind["NewExpression"] = 205] = "NewExpression";
-        SyntaxKind[SyntaxKind["TaggedTemplateExpression"] = 206] = "TaggedTemplateExpression";
-        SyntaxKind[SyntaxKind["TypeAssertionExpression"] = 207] = "TypeAssertionExpression";
-        SyntaxKind[SyntaxKind["ParenthesizedExpression"] = 208] = "ParenthesizedExpression";
-        SyntaxKind[SyntaxKind["FunctionExpression"] = 209] = "FunctionExpression";
-        SyntaxKind[SyntaxKind["ArrowFunction"] = 210] = "ArrowFunction";
-        SyntaxKind[SyntaxKind["DeleteExpression"] = 211] = "DeleteExpression";
-        SyntaxKind[SyntaxKind["TypeOfExpression"] = 212] = "TypeOfExpression";
-        SyntaxKind[SyntaxKind["VoidExpression"] = 213] = "VoidExpression";
-        SyntaxKind[SyntaxKind["AwaitExpression"] = 214] = "AwaitExpression";
-        SyntaxKind[SyntaxKind["PrefixUnaryExpression"] = 215] = "PrefixUnaryExpression";
-        SyntaxKind[SyntaxKind["PostfixUnaryExpression"] = 216] = "PostfixUnaryExpression";
-        SyntaxKind[SyntaxKind["BinaryExpression"] = 217] = "BinaryExpression";
-        SyntaxKind[SyntaxKind["ConditionalExpression"] = 218] = "ConditionalExpression";
-        SyntaxKind[SyntaxKind["TemplateExpression"] = 219] = "TemplateExpression";
-        SyntaxKind[SyntaxKind["YieldExpression"] = 220] = "YieldExpression";
-        SyntaxKind[SyntaxKind["SpreadElement"] = 221] = "SpreadElement";
-        SyntaxKind[SyntaxKind["ClassExpression"] = 222] = "ClassExpression";
-        SyntaxKind[SyntaxKind["OmittedExpression"] = 223] = "OmittedExpression";
-        SyntaxKind[SyntaxKind["ExpressionWithTypeArguments"] = 224] = "ExpressionWithTypeArguments";
-        SyntaxKind[SyntaxKind["AsExpression"] = 225] = "AsExpression";
-        SyntaxKind[SyntaxKind["NonNullExpression"] = 226] = "NonNullExpression";
-        SyntaxKind[SyntaxKind["MetaProperty"] = 227] = "MetaProperty";
-        SyntaxKind[SyntaxKind["SyntheticExpression"] = 228] = "SyntheticExpression";
+        SyntaxKind[SyntaxKind["ArrayLiteralExpression"] = 202] = "ArrayLiteralExpression";
+        SyntaxKind[SyntaxKind["ObjectLiteralExpression"] = 203] = "ObjectLiteralExpression";
+        SyntaxKind[SyntaxKind["PropertyAccessExpression"] = 204] = "PropertyAccessExpression";
+        SyntaxKind[SyntaxKind["ElementAccessExpression"] = 205] = "ElementAccessExpression";
+        SyntaxKind[SyntaxKind["CallExpression"] = 206] = "CallExpression";
+        SyntaxKind[SyntaxKind["NewExpression"] = 207] = "NewExpression";
+        SyntaxKind[SyntaxKind["TaggedTemplateExpression"] = 208] = "TaggedTemplateExpression";
+        SyntaxKind[SyntaxKind["TypeAssertionExpression"] = 209] = "TypeAssertionExpression";
+        SyntaxKind[SyntaxKind["ParenthesizedExpression"] = 210] = "ParenthesizedExpression";
+        SyntaxKind[SyntaxKind["FunctionExpression"] = 211] = "FunctionExpression";
+        SyntaxKind[SyntaxKind["ArrowFunction"] = 212] = "ArrowFunction";
+        SyntaxKind[SyntaxKind["DeleteExpression"] = 213] = "DeleteExpression";
+        SyntaxKind[SyntaxKind["TypeOfExpression"] = 214] = "TypeOfExpression";
+        SyntaxKind[SyntaxKind["VoidExpression"] = 215] = "VoidExpression";
+        SyntaxKind[SyntaxKind["AwaitExpression"] = 216] = "AwaitExpression";
+        SyntaxKind[SyntaxKind["PrefixUnaryExpression"] = 217] = "PrefixUnaryExpression";
+        SyntaxKind[SyntaxKind["PostfixUnaryExpression"] = 218] = "PostfixUnaryExpression";
+        SyntaxKind[SyntaxKind["BinaryExpression"] = 219] = "BinaryExpression";
+        SyntaxKind[SyntaxKind["ConditionalExpression"] = 220] = "ConditionalExpression";
+        SyntaxKind[SyntaxKind["TemplateExpression"] = 221] = "TemplateExpression";
+        SyntaxKind[SyntaxKind["YieldExpression"] = 222] = "YieldExpression";
+        SyntaxKind[SyntaxKind["SpreadElement"] = 223] = "SpreadElement";
+        SyntaxKind[SyntaxKind["ClassExpression"] = 224] = "ClassExpression";
+        SyntaxKind[SyntaxKind["OmittedExpression"] = 225] = "OmittedExpression";
+        SyntaxKind[SyntaxKind["ExpressionWithTypeArguments"] = 226] = "ExpressionWithTypeArguments";
+        SyntaxKind[SyntaxKind["AsExpression"] = 227] = "AsExpression";
+        SyntaxKind[SyntaxKind["NonNullExpression"] = 228] = "NonNullExpression";
+        SyntaxKind[SyntaxKind["MetaProperty"] = 229] = "MetaProperty";
+        SyntaxKind[SyntaxKind["SyntheticExpression"] = 230] = "SyntheticExpression";
         // Misc
-        SyntaxKind[SyntaxKind["TemplateSpan"] = 229] = "TemplateSpan";
-        SyntaxKind[SyntaxKind["SemicolonClassElement"] = 230] = "SemicolonClassElement";
+        SyntaxKind[SyntaxKind["TemplateSpan"] = 231] = "TemplateSpan";
+        SyntaxKind[SyntaxKind["SemicolonClassElement"] = 232] = "SemicolonClassElement";
         // Element
-        SyntaxKind[SyntaxKind["Block"] = 231] = "Block";
-        SyntaxKind[SyntaxKind["EmptyStatement"] = 232] = "EmptyStatement";
-        SyntaxKind[SyntaxKind["VariableStatement"] = 233] = "VariableStatement";
-        SyntaxKind[SyntaxKind["ExpressionStatement"] = 234] = "ExpressionStatement";
-        SyntaxKind[SyntaxKind["IfStatement"] = 235] = "IfStatement";
-        SyntaxKind[SyntaxKind["DoStatement"] = 236] = "DoStatement";
-        SyntaxKind[SyntaxKind["WhileStatement"] = 237] = "WhileStatement";
-        SyntaxKind[SyntaxKind["ForStatement"] = 238] = "ForStatement";
-        SyntaxKind[SyntaxKind["ForInStatement"] = 239] = "ForInStatement";
-        SyntaxKind[SyntaxKind["ForOfStatement"] = 240] = "ForOfStatement";
-        SyntaxKind[SyntaxKind["ContinueStatement"] = 241] = "ContinueStatement";
-        SyntaxKind[SyntaxKind["BreakStatement"] = 242] = "BreakStatement";
-        SyntaxKind[SyntaxKind["ReturnStatement"] = 243] = "ReturnStatement";
-        SyntaxKind[SyntaxKind["WithStatement"] = 244] = "WithStatement";
-        SyntaxKind[SyntaxKind["SwitchStatement"] = 245] = "SwitchStatement";
-        SyntaxKind[SyntaxKind["LabeledStatement"] = 246] = "LabeledStatement";
-        SyntaxKind[SyntaxKind["ThrowStatement"] = 247] = "ThrowStatement";
-        SyntaxKind[SyntaxKind["TryStatement"] = 248] = "TryStatement";
-        SyntaxKind[SyntaxKind["DebuggerStatement"] = 249] = "DebuggerStatement";
-        SyntaxKind[SyntaxKind["VariableDeclaration"] = 250] = "VariableDeclaration";
-        SyntaxKind[SyntaxKind["VariableDeclarationList"] = 251] = "VariableDeclarationList";
-        SyntaxKind[SyntaxKind["FunctionDeclaration"] = 252] = "FunctionDeclaration";
-        SyntaxKind[SyntaxKind["ClassDeclaration"] = 253] = "ClassDeclaration";
-        SyntaxKind[SyntaxKind["InterfaceDeclaration"] = 254] = "InterfaceDeclaration";
-        SyntaxKind[SyntaxKind["TypeAliasDeclaration"] = 255] = "TypeAliasDeclaration";
-        SyntaxKind[SyntaxKind["EnumDeclaration"] = 256] = "EnumDeclaration";
-        SyntaxKind[SyntaxKind["ModuleDeclaration"] = 257] = "ModuleDeclaration";
-        SyntaxKind[SyntaxKind["ModuleBlock"] = 258] = "ModuleBlock";
-        SyntaxKind[SyntaxKind["CaseBlock"] = 259] = "CaseBlock";
-        SyntaxKind[SyntaxKind["NamespaceExportDeclaration"] = 260] = "NamespaceExportDeclaration";
-        SyntaxKind[SyntaxKind["ImportEqualsDeclaration"] = 261] = "ImportEqualsDeclaration";
-        SyntaxKind[SyntaxKind["ImportDeclaration"] = 262] = "ImportDeclaration";
-        SyntaxKind[SyntaxKind["ImportClause"] = 263] = "ImportClause";
-        SyntaxKind[SyntaxKind["NamespaceImport"] = 264] = "NamespaceImport";
-        SyntaxKind[SyntaxKind["NamedImports"] = 265] = "NamedImports";
-        SyntaxKind[SyntaxKind["ImportSpecifier"] = 266] = "ImportSpecifier";
-        SyntaxKind[SyntaxKind["ExportAssignment"] = 267] = "ExportAssignment";
-        SyntaxKind[SyntaxKind["ExportDeclaration"] = 268] = "ExportDeclaration";
-        SyntaxKind[SyntaxKind["NamedExports"] = 269] = "NamedExports";
-        SyntaxKind[SyntaxKind["NamespaceExport"] = 270] = "NamespaceExport";
-        SyntaxKind[SyntaxKind["ExportSpecifier"] = 271] = "ExportSpecifier";
-        SyntaxKind[SyntaxKind["MissingDeclaration"] = 272] = "MissingDeclaration";
+        SyntaxKind[SyntaxKind["Block"] = 233] = "Block";
+        SyntaxKind[SyntaxKind["EmptyStatement"] = 234] = "EmptyStatement";
+        SyntaxKind[SyntaxKind["VariableStatement"] = 235] = "VariableStatement";
+        SyntaxKind[SyntaxKind["ExpressionStatement"] = 236] = "ExpressionStatement";
+        SyntaxKind[SyntaxKind["IfStatement"] = 237] = "IfStatement";
+        SyntaxKind[SyntaxKind["DoStatement"] = 238] = "DoStatement";
+        SyntaxKind[SyntaxKind["WhileStatement"] = 239] = "WhileStatement";
+        SyntaxKind[SyntaxKind["ForStatement"] = 240] = "ForStatement";
+        SyntaxKind[SyntaxKind["ForInStatement"] = 241] = "ForInStatement";
+        SyntaxKind[SyntaxKind["ForOfStatement"] = 242] = "ForOfStatement";
+        SyntaxKind[SyntaxKind["ContinueStatement"] = 243] = "ContinueStatement";
+        SyntaxKind[SyntaxKind["BreakStatement"] = 244] = "BreakStatement";
+        SyntaxKind[SyntaxKind["ReturnStatement"] = 245] = "ReturnStatement";
+        SyntaxKind[SyntaxKind["WithStatement"] = 246] = "WithStatement";
+        SyntaxKind[SyntaxKind["SwitchStatement"] = 247] = "SwitchStatement";
+        SyntaxKind[SyntaxKind["LabeledStatement"] = 248] = "LabeledStatement";
+        SyntaxKind[SyntaxKind["ThrowStatement"] = 249] = "ThrowStatement";
+        SyntaxKind[SyntaxKind["TryStatement"] = 250] = "TryStatement";
+        SyntaxKind[SyntaxKind["DebuggerStatement"] = 251] = "DebuggerStatement";
+        SyntaxKind[SyntaxKind["VariableDeclaration"] = 252] = "VariableDeclaration";
+        SyntaxKind[SyntaxKind["VariableDeclarationList"] = 253] = "VariableDeclarationList";
+        SyntaxKind[SyntaxKind["FunctionDeclaration"] = 254] = "FunctionDeclaration";
+        SyntaxKind[SyntaxKind["ClassDeclaration"] = 255] = "ClassDeclaration";
+        SyntaxKind[SyntaxKind["InterfaceDeclaration"] = 256] = "InterfaceDeclaration";
+        SyntaxKind[SyntaxKind["TypeAliasDeclaration"] = 257] = "TypeAliasDeclaration";
+        SyntaxKind[SyntaxKind["EnumDeclaration"] = 258] = "EnumDeclaration";
+        SyntaxKind[SyntaxKind["ModuleDeclaration"] = 259] = "ModuleDeclaration";
+        SyntaxKind[SyntaxKind["ModuleBlock"] = 260] = "ModuleBlock";
+        SyntaxKind[SyntaxKind["CaseBlock"] = 261] = "CaseBlock";
+        SyntaxKind[SyntaxKind["NamespaceExportDeclaration"] = 262] = "NamespaceExportDeclaration";
+        SyntaxKind[SyntaxKind["ImportEqualsDeclaration"] = 263] = "ImportEqualsDeclaration";
+        SyntaxKind[SyntaxKind["ImportDeclaration"] = 264] = "ImportDeclaration";
+        SyntaxKind[SyntaxKind["ImportClause"] = 265] = "ImportClause";
+        SyntaxKind[SyntaxKind["NamespaceImport"] = 266] = "NamespaceImport";
+        SyntaxKind[SyntaxKind["NamedImports"] = 267] = "NamedImports";
+        SyntaxKind[SyntaxKind["ImportSpecifier"] = 268] = "ImportSpecifier";
+        SyntaxKind[SyntaxKind["ExportAssignment"] = 269] = "ExportAssignment";
+        SyntaxKind[SyntaxKind["ExportDeclaration"] = 270] = "ExportDeclaration";
+        SyntaxKind[SyntaxKind["NamedExports"] = 271] = "NamedExports";
+        SyntaxKind[SyntaxKind["NamespaceExport"] = 272] = "NamespaceExport";
+        SyntaxKind[SyntaxKind["ExportSpecifier"] = 273] = "ExportSpecifier";
+        SyntaxKind[SyntaxKind["MissingDeclaration"] = 274] = "MissingDeclaration";
         // Module references
-        SyntaxKind[SyntaxKind["ExternalModuleReference"] = 273] = "ExternalModuleReference";
+        SyntaxKind[SyntaxKind["ExternalModuleReference"] = 275] = "ExternalModuleReference";
         // JSX
-        SyntaxKind[SyntaxKind["JsxElement"] = 274] = "JsxElement";
-        SyntaxKind[SyntaxKind["JsxSelfClosingElement"] = 275] = "JsxSelfClosingElement";
-        SyntaxKind[SyntaxKind["JsxOpeningElement"] = 276] = "JsxOpeningElement";
-        SyntaxKind[SyntaxKind["JsxClosingElement"] = 277] = "JsxClosingElement";
-        SyntaxKind[SyntaxKind["JsxFragment"] = 278] = "JsxFragment";
-        SyntaxKind[SyntaxKind["JsxOpeningFragment"] = 279] = "JsxOpeningFragment";
-        SyntaxKind[SyntaxKind["JsxClosingFragment"] = 280] = "JsxClosingFragment";
-        SyntaxKind[SyntaxKind["JsxAttribute"] = 281] = "JsxAttribute";
-        SyntaxKind[SyntaxKind["JsxAttributes"] = 282] = "JsxAttributes";
-        SyntaxKind[SyntaxKind["JsxSpreadAttribute"] = 283] = "JsxSpreadAttribute";
-        SyntaxKind[SyntaxKind["JsxExpression"] = 284] = "JsxExpression";
+        SyntaxKind[SyntaxKind["JsxElement"] = 276] = "JsxElement";
+        SyntaxKind[SyntaxKind["JsxSelfClosingElement"] = 277] = "JsxSelfClosingElement";
+        SyntaxKind[SyntaxKind["JsxOpeningElement"] = 278] = "JsxOpeningElement";
+        SyntaxKind[SyntaxKind["JsxClosingElement"] = 279] = "JsxClosingElement";
+        SyntaxKind[SyntaxKind["JsxFragment"] = 280] = "JsxFragment";
+        SyntaxKind[SyntaxKind["JsxOpeningFragment"] = 281] = "JsxOpeningFragment";
+        SyntaxKind[SyntaxKind["JsxClosingFragment"] = 282] = "JsxClosingFragment";
+        SyntaxKind[SyntaxKind["JsxAttribute"] = 283] = "JsxAttribute";
+        SyntaxKind[SyntaxKind["JsxAttributes"] = 284] = "JsxAttributes";
+        SyntaxKind[SyntaxKind["JsxSpreadAttribute"] = 285] = "JsxSpreadAttribute";
+        SyntaxKind[SyntaxKind["JsxExpression"] = 286] = "JsxExpression";
         // Clauses
-        SyntaxKind[SyntaxKind["CaseClause"] = 285] = "CaseClause";
-        SyntaxKind[SyntaxKind["DefaultClause"] = 286] = "DefaultClause";
-        SyntaxKind[SyntaxKind["HeritageClause"] = 287] = "HeritageClause";
-        SyntaxKind[SyntaxKind["CatchClause"] = 288] = "CatchClause";
+        SyntaxKind[SyntaxKind["CaseClause"] = 287] = "CaseClause";
+        SyntaxKind[SyntaxKind["DefaultClause"] = 288] = "DefaultClause";
+        SyntaxKind[SyntaxKind["HeritageClause"] = 289] = "HeritageClause";
+        SyntaxKind[SyntaxKind["CatchClause"] = 290] = "CatchClause";
         // Property assignments
-        SyntaxKind[SyntaxKind["PropertyAssignment"] = 289] = "PropertyAssignment";
-        SyntaxKind[SyntaxKind["ShorthandPropertyAssignment"] = 290] = "ShorthandPropertyAssignment";
-        SyntaxKind[SyntaxKind["SpreadAssignment"] = 291] = "SpreadAssignment";
+        SyntaxKind[SyntaxKind["PropertyAssignment"] = 291] = "PropertyAssignment";
+        SyntaxKind[SyntaxKind["ShorthandPropertyAssignment"] = 292] = "ShorthandPropertyAssignment";
+        SyntaxKind[SyntaxKind["SpreadAssignment"] = 293] = "SpreadAssignment";
         // Enum
-        SyntaxKind[SyntaxKind["EnumMember"] = 292] = "EnumMember";
+        SyntaxKind[SyntaxKind["EnumMember"] = 294] = "EnumMember";
         // Unparsed
-        SyntaxKind[SyntaxKind["UnparsedPrologue"] = 293] = "UnparsedPrologue";
-        SyntaxKind[SyntaxKind["UnparsedPrepend"] = 294] = "UnparsedPrepend";
-        SyntaxKind[SyntaxKind["UnparsedText"] = 295] = "UnparsedText";
-        SyntaxKind[SyntaxKind["UnparsedInternalText"] = 296] = "UnparsedInternalText";
-        SyntaxKind[SyntaxKind["UnparsedSyntheticReference"] = 297] = "UnparsedSyntheticReference";
+        SyntaxKind[SyntaxKind["UnparsedPrologue"] = 295] = "UnparsedPrologue";
+        SyntaxKind[SyntaxKind["UnparsedPrepend"] = 296] = "UnparsedPrepend";
+        SyntaxKind[SyntaxKind["UnparsedText"] = 297] = "UnparsedText";
+        SyntaxKind[SyntaxKind["UnparsedInternalText"] = 298] = "UnparsedInternalText";
+        SyntaxKind[SyntaxKind["UnparsedSyntheticReference"] = 299] = "UnparsedSyntheticReference";
         // Top-level nodes
-        SyntaxKind[SyntaxKind["SourceFile"] = 298] = "SourceFile";
-        SyntaxKind[SyntaxKind["Bundle"] = 299] = "Bundle";
-        SyntaxKind[SyntaxKind["UnparsedSource"] = 300] = "UnparsedSource";
-        SyntaxKind[SyntaxKind["InputFiles"] = 301] = "InputFiles";
+        SyntaxKind[SyntaxKind["SourceFile"] = 300] = "SourceFile";
+        SyntaxKind[SyntaxKind["Bundle"] = 301] = "Bundle";
+        SyntaxKind[SyntaxKind["UnparsedSource"] = 302] = "UnparsedSource";
+        SyntaxKind[SyntaxKind["InputFiles"] = 303] = "InputFiles";
         // JSDoc nodes
-        SyntaxKind[SyntaxKind["JSDocTypeExpression"] = 302] = "JSDocTypeExpression";
-        SyntaxKind[SyntaxKind["JSDocNameReference"] = 303] = "JSDocNameReference";
-        SyntaxKind[SyntaxKind["JSDocAllType"] = 304] = "JSDocAllType";
-        SyntaxKind[SyntaxKind["JSDocUnknownType"] = 305] = "JSDocUnknownType";
-        SyntaxKind[SyntaxKind["JSDocNullableType"] = 306] = "JSDocNullableType";
-        SyntaxKind[SyntaxKind["JSDocNonNullableType"] = 307] = "JSDocNonNullableType";
-        SyntaxKind[SyntaxKind["JSDocOptionalType"] = 308] = "JSDocOptionalType";
-        SyntaxKind[SyntaxKind["JSDocFunctionType"] = 309] = "JSDocFunctionType";
-        SyntaxKind[SyntaxKind["JSDocVariadicType"] = 310] = "JSDocVariadicType";
-        SyntaxKind[SyntaxKind["JSDocNamepathType"] = 311] = "JSDocNamepathType";
-        SyntaxKind[SyntaxKind["JSDocComment"] = 312] = "JSDocComment";
-        SyntaxKind[SyntaxKind["JSDocText"] = 313] = "JSDocText";
-        SyntaxKind[SyntaxKind["JSDocTypeLiteral"] = 314] = "JSDocTypeLiteral";
-        SyntaxKind[SyntaxKind["JSDocSignature"] = 315] = "JSDocSignature";
-        SyntaxKind[SyntaxKind["JSDocLink"] = 316] = "JSDocLink";
-        SyntaxKind[SyntaxKind["JSDocTag"] = 317] = "JSDocTag";
-        SyntaxKind[SyntaxKind["JSDocAugmentsTag"] = 318] = "JSDocAugmentsTag";
-        SyntaxKind[SyntaxKind["JSDocImplementsTag"] = 319] = "JSDocImplementsTag";
-        SyntaxKind[SyntaxKind["JSDocAuthorTag"] = 320] = "JSDocAuthorTag";
-        SyntaxKind[SyntaxKind["JSDocDeprecatedTag"] = 321] = "JSDocDeprecatedTag";
-        SyntaxKind[SyntaxKind["JSDocClassTag"] = 322] = "JSDocClassTag";
-        SyntaxKind[SyntaxKind["JSDocPublicTag"] = 323] = "JSDocPublicTag";
-        SyntaxKind[SyntaxKind["JSDocPrivateTag"] = 324] = "JSDocPrivateTag";
-        SyntaxKind[SyntaxKind["JSDocProtectedTag"] = 325] = "JSDocProtectedTag";
-        SyntaxKind[SyntaxKind["JSDocReadonlyTag"] = 326] = "JSDocReadonlyTag";
-        SyntaxKind[SyntaxKind["JSDocOverrideTag"] = 327] = "JSDocOverrideTag";
-        SyntaxKind[SyntaxKind["JSDocCallbackTag"] = 328] = "JSDocCallbackTag";
-        SyntaxKind[SyntaxKind["JSDocEnumTag"] = 329] = "JSDocEnumTag";
-        SyntaxKind[SyntaxKind["JSDocParameterTag"] = 330] = "JSDocParameterTag";
-        SyntaxKind[SyntaxKind["JSDocReturnTag"] = 331] = "JSDocReturnTag";
-        SyntaxKind[SyntaxKind["JSDocThisTag"] = 332] = "JSDocThisTag";
-        SyntaxKind[SyntaxKind["JSDocTypeTag"] = 333] = "JSDocTypeTag";
-        SyntaxKind[SyntaxKind["JSDocTemplateTag"] = 334] = "JSDocTemplateTag";
-        SyntaxKind[SyntaxKind["JSDocTypedefTag"] = 335] = "JSDocTypedefTag";
-        SyntaxKind[SyntaxKind["JSDocSeeTag"] = 336] = "JSDocSeeTag";
-        SyntaxKind[SyntaxKind["JSDocPropertyTag"] = 337] = "JSDocPropertyTag";
+        SyntaxKind[SyntaxKind["JSDocTypeExpression"] = 304] = "JSDocTypeExpression";
+        SyntaxKind[SyntaxKind["JSDocNameReference"] = 305] = "JSDocNameReference";
+        SyntaxKind[SyntaxKind["JSDocMemberName"] = 306] = "JSDocMemberName";
+        SyntaxKind[SyntaxKind["JSDocAllType"] = 307] = "JSDocAllType";
+        SyntaxKind[SyntaxKind["JSDocUnknownType"] = 308] = "JSDocUnknownType";
+        SyntaxKind[SyntaxKind["JSDocNullableType"] = 309] = "JSDocNullableType";
+        SyntaxKind[SyntaxKind["JSDocNonNullableType"] = 310] = "JSDocNonNullableType";
+        SyntaxKind[SyntaxKind["JSDocOptionalType"] = 311] = "JSDocOptionalType";
+        SyntaxKind[SyntaxKind["JSDocFunctionType"] = 312] = "JSDocFunctionType";
+        SyntaxKind[SyntaxKind["JSDocVariadicType"] = 313] = "JSDocVariadicType";
+        SyntaxKind[SyntaxKind["JSDocNamepathType"] = 314] = "JSDocNamepathType";
+        SyntaxKind[SyntaxKind["JSDocComment"] = 315] = "JSDocComment";
+        SyntaxKind[SyntaxKind["JSDocText"] = 316] = "JSDocText";
+        SyntaxKind[SyntaxKind["JSDocTypeLiteral"] = 317] = "JSDocTypeLiteral";
+        SyntaxKind[SyntaxKind["JSDocSignature"] = 318] = "JSDocSignature";
+        SyntaxKind[SyntaxKind["JSDocLink"] = 319] = "JSDocLink";
+        SyntaxKind[SyntaxKind["JSDocLinkCode"] = 320] = "JSDocLinkCode";
+        SyntaxKind[SyntaxKind["JSDocLinkPlain"] = 321] = "JSDocLinkPlain";
+        SyntaxKind[SyntaxKind["JSDocTag"] = 322] = "JSDocTag";
+        SyntaxKind[SyntaxKind["JSDocAugmentsTag"] = 323] = "JSDocAugmentsTag";
+        SyntaxKind[SyntaxKind["JSDocImplementsTag"] = 324] = "JSDocImplementsTag";
+        SyntaxKind[SyntaxKind["JSDocAuthorTag"] = 325] = "JSDocAuthorTag";
+        SyntaxKind[SyntaxKind["JSDocDeprecatedTag"] = 326] = "JSDocDeprecatedTag";
+        SyntaxKind[SyntaxKind["JSDocClassTag"] = 327] = "JSDocClassTag";
+        SyntaxKind[SyntaxKind["JSDocPublicTag"] = 328] = "JSDocPublicTag";
+        SyntaxKind[SyntaxKind["JSDocPrivateTag"] = 329] = "JSDocPrivateTag";
+        SyntaxKind[SyntaxKind["JSDocProtectedTag"] = 330] = "JSDocProtectedTag";
+        SyntaxKind[SyntaxKind["JSDocReadonlyTag"] = 331] = "JSDocReadonlyTag";
+        SyntaxKind[SyntaxKind["JSDocOverrideTag"] = 332] = "JSDocOverrideTag";
+        SyntaxKind[SyntaxKind["JSDocCallbackTag"] = 333] = "JSDocCallbackTag";
+        SyntaxKind[SyntaxKind["JSDocEnumTag"] = 334] = "JSDocEnumTag";
+        SyntaxKind[SyntaxKind["JSDocParameterTag"] = 335] = "JSDocParameterTag";
+        SyntaxKind[SyntaxKind["JSDocReturnTag"] = 336] = "JSDocReturnTag";
+        SyntaxKind[SyntaxKind["JSDocThisTag"] = 337] = "JSDocThisTag";
+        SyntaxKind[SyntaxKind["JSDocTypeTag"] = 338] = "JSDocTypeTag";
+        SyntaxKind[SyntaxKind["JSDocTemplateTag"] = 339] = "JSDocTemplateTag";
+        SyntaxKind[SyntaxKind["JSDocTypedefTag"] = 340] = "JSDocTypedefTag";
+        SyntaxKind[SyntaxKind["JSDocSeeTag"] = 341] = "JSDocSeeTag";
+        SyntaxKind[SyntaxKind["JSDocPropertyTag"] = 342] = "JSDocPropertyTag";
         // Synthesized list
-        SyntaxKind[SyntaxKind["SyntaxList"] = 338] = "SyntaxList";
+        SyntaxKind[SyntaxKind["SyntaxList"] = 343] = "SyntaxList";
         // Transformation nodes
-        SyntaxKind[SyntaxKind["NotEmittedStatement"] = 339] = "NotEmittedStatement";
-        SyntaxKind[SyntaxKind["PartiallyEmittedExpression"] = 340] = "PartiallyEmittedExpression";
-        SyntaxKind[SyntaxKind["CommaListExpression"] = 341] = "CommaListExpression";
-        SyntaxKind[SyntaxKind["MergeDeclarationMarker"] = 342] = "MergeDeclarationMarker";
-        SyntaxKind[SyntaxKind["EndOfDeclarationMarker"] = 343] = "EndOfDeclarationMarker";
-        SyntaxKind[SyntaxKind["SyntheticReferenceExpression"] = 344] = "SyntheticReferenceExpression";
+        SyntaxKind[SyntaxKind["NotEmittedStatement"] = 344] = "NotEmittedStatement";
+        SyntaxKind[SyntaxKind["PartiallyEmittedExpression"] = 345] = "PartiallyEmittedExpression";
+        SyntaxKind[SyntaxKind["CommaListExpression"] = 346] = "CommaListExpression";
+        SyntaxKind[SyntaxKind["MergeDeclarationMarker"] = 347] = "MergeDeclarationMarker";
+        SyntaxKind[SyntaxKind["EndOfDeclarationMarker"] = 348] = "EndOfDeclarationMarker";
+        SyntaxKind[SyntaxKind["SyntheticReferenceExpression"] = 349] = "SyntheticReferenceExpression";
         // Enum value count
-        SyntaxKind[SyntaxKind["Count"] = 345] = "Count";
+        SyntaxKind[SyntaxKind["Count"] = 350] = "Count";
         // Markers
-        SyntaxKind[SyntaxKind["FirstAssignment"] = 62] = "FirstAssignment";
-        SyntaxKind[SyntaxKind["LastAssignment"] = 77] = "LastAssignment";
-        SyntaxKind[SyntaxKind["FirstCompoundAssignment"] = 63] = "FirstCompoundAssignment";
-        SyntaxKind[SyntaxKind["LastCompoundAssignment"] = 77] = "LastCompoundAssignment";
-        SyntaxKind[SyntaxKind["FirstReservedWord"] = 80] = "FirstReservedWord";
-        SyntaxKind[SyntaxKind["LastReservedWord"] = 115] = "LastReservedWord";
-        SyntaxKind[SyntaxKind["FirstKeyword"] = 80] = "FirstKeyword";
-        SyntaxKind[SyntaxKind["LastKeyword"] = 157] = "LastKeyword";
-        SyntaxKind[SyntaxKind["FirstFutureReservedWord"] = 116] = "FirstFutureReservedWord";
-        SyntaxKind[SyntaxKind["LastFutureReservedWord"] = 124] = "LastFutureReservedWord";
-        SyntaxKind[SyntaxKind["FirstTypeNode"] = 173] = "FirstTypeNode";
-        SyntaxKind[SyntaxKind["LastTypeNode"] = 196] = "LastTypeNode";
+        SyntaxKind[SyntaxKind["FirstAssignment"] = 63] = "FirstAssignment";
+        SyntaxKind[SyntaxKind["LastAssignment"] = 78] = "LastAssignment";
+        SyntaxKind[SyntaxKind["FirstCompoundAssignment"] = 64] = "FirstCompoundAssignment";
+        SyntaxKind[SyntaxKind["LastCompoundAssignment"] = 78] = "LastCompoundAssignment";
+        SyntaxKind[SyntaxKind["FirstReservedWord"] = 81] = "FirstReservedWord";
+        SyntaxKind[SyntaxKind["LastReservedWord"] = 116] = "LastReservedWord";
+        SyntaxKind[SyntaxKind["FirstKeyword"] = 81] = "FirstKeyword";
+        SyntaxKind[SyntaxKind["LastKeyword"] = 158] = "LastKeyword";
+        SyntaxKind[SyntaxKind["FirstFutureReservedWord"] = 117] = "FirstFutureReservedWord";
+        SyntaxKind[SyntaxKind["LastFutureReservedWord"] = 125] = "LastFutureReservedWord";
+        SyntaxKind[SyntaxKind["FirstTypeNode"] = 175] = "FirstTypeNode";
+        SyntaxKind[SyntaxKind["LastTypeNode"] = 198] = "LastTypeNode";
         SyntaxKind[SyntaxKind["FirstPunctuation"] = 18] = "FirstPunctuation";
-        SyntaxKind[SyntaxKind["LastPunctuation"] = 77] = "LastPunctuation";
+        SyntaxKind[SyntaxKind["LastPunctuation"] = 78] = "LastPunctuation";
         SyntaxKind[SyntaxKind["FirstToken"] = 0] = "FirstToken";
-        SyntaxKind[SyntaxKind["LastToken"] = 157] = "LastToken";
+        SyntaxKind[SyntaxKind["LastToken"] = 158] = "LastToken";
         SyntaxKind[SyntaxKind["FirstTriviaToken"] = 2] = "FirstTriviaToken";
         SyntaxKind[SyntaxKind["LastTriviaToken"] = 7] = "LastTriviaToken";
         SyntaxKind[SyntaxKind["FirstLiteralToken"] = 8] = "FirstLiteralToken";
@@ -4135,16 +4212,16 @@
         SyntaxKind[SyntaxKind["FirstTemplateToken"] = 14] = "FirstTemplateToken";
         SyntaxKind[SyntaxKind["LastTemplateToken"] = 17] = "LastTemplateToken";
         SyntaxKind[SyntaxKind["FirstBinaryOperator"] = 29] = "FirstBinaryOperator";
-        SyntaxKind[SyntaxKind["LastBinaryOperator"] = 77] = "LastBinaryOperator";
-        SyntaxKind[SyntaxKind["FirstStatement"] = 233] = "FirstStatement";
-        SyntaxKind[SyntaxKind["LastStatement"] = 249] = "LastStatement";
-        SyntaxKind[SyntaxKind["FirstNode"] = 158] = "FirstNode";
-        SyntaxKind[SyntaxKind["FirstJSDocNode"] = 302] = "FirstJSDocNode";
-        SyntaxKind[SyntaxKind["LastJSDocNode"] = 337] = "LastJSDocNode";
-        SyntaxKind[SyntaxKind["FirstJSDocTagNode"] = 317] = "FirstJSDocTagNode";
-        SyntaxKind[SyntaxKind["LastJSDocTagNode"] = 337] = "LastJSDocTagNode";
-        /* @internal */ SyntaxKind[SyntaxKind["FirstContextualKeyword"] = 125] = "FirstContextualKeyword";
-        /* @internal */ SyntaxKind[SyntaxKind["LastContextualKeyword"] = 157] = "LastContextualKeyword";
+        SyntaxKind[SyntaxKind["LastBinaryOperator"] = 78] = "LastBinaryOperator";
+        SyntaxKind[SyntaxKind["FirstStatement"] = 235] = "FirstStatement";
+        SyntaxKind[SyntaxKind["LastStatement"] = 251] = "LastStatement";
+        SyntaxKind[SyntaxKind["FirstNode"] = 159] = "FirstNode";
+        SyntaxKind[SyntaxKind["FirstJSDocNode"] = 304] = "FirstJSDocNode";
+        SyntaxKind[SyntaxKind["LastJSDocNode"] = 342] = "LastJSDocNode";
+        SyntaxKind[SyntaxKind["FirstJSDocTagNode"] = 322] = "FirstJSDocTagNode";
+        SyntaxKind[SyntaxKind["LastJSDocTagNode"] = 342] = "LastJSDocTagNode";
+        /* @internal */ SyntaxKind[SyntaxKind["FirstContextualKeyword"] = 126] = "FirstContextualKeyword";
+        /* @internal */ SyntaxKind[SyntaxKind["LastContextualKeyword"] = 158] = "LastContextualKeyword";
     })(SyntaxKind = ts.SyntaxKind || (ts.SyntaxKind = {}));
     var NodeFlags;
     (function (NodeFlags) {
@@ -4683,6 +4760,7 @@
         NodeCheckFlags[NodeCheckFlags["ClassWithConstructorReference"] = 16777216] = "ClassWithConstructorReference";
         NodeCheckFlags[NodeCheckFlags["ConstructorReferenceInClass"] = 33554432] = "ConstructorReferenceInClass";
         NodeCheckFlags[NodeCheckFlags["ContainsClassWithPrivateIdentifiers"] = 67108864] = "ContainsClassWithPrivateIdentifiers";
+        NodeCheckFlags[NodeCheckFlags["ContainsSuperPropertyInStaticInitializer"] = 134217728] = "ContainsSuperPropertyInStaticInitializer";
     })(NodeCheckFlags = ts.NodeCheckFlags || (ts.NodeCheckFlags = {}));
     var TypeFlags;
     (function (TypeFlags) {
@@ -4752,7 +4830,7 @@
         /* @internal */
         TypeFlags[TypeFlags["Simplifiable"] = 25165824] = "Simplifiable";
         /* @internal */
-        TypeFlags[TypeFlags["Substructure"] = 469237760] = "Substructure";
+        TypeFlags[TypeFlags["Singleton"] = 67358815] = "Singleton";
         // 'Narrowable' types are types where narrowing actually narrows.
         // This *should* be every type other than null, undefined, void, and never
         TypeFlags[TypeFlags["Narrowable"] = 536624127] = "Narrowable";
@@ -4824,21 +4902,21 @@
         ObjectFlags[ObjectFlags["IdenticalBaseTypeExists"] = 67108864] = "IdenticalBaseTypeExists";
         // Flags that require TypeFlags.UnionOrIntersection or TypeFlags.Substitution
         /* @internal */
-        ObjectFlags[ObjectFlags["IsGenericObjectTypeComputed"] = 4194304] = "IsGenericObjectTypeComputed";
+        ObjectFlags[ObjectFlags["IsGenericTypeComputed"] = 4194304] = "IsGenericTypeComputed";
         /* @internal */
         ObjectFlags[ObjectFlags["IsGenericObjectType"] = 8388608] = "IsGenericObjectType";
         /* @internal */
-        ObjectFlags[ObjectFlags["IsGenericIndexTypeComputed"] = 16777216] = "IsGenericIndexTypeComputed";
+        ObjectFlags[ObjectFlags["IsGenericIndexType"] = 16777216] = "IsGenericIndexType";
         /* @internal */
-        ObjectFlags[ObjectFlags["IsGenericIndexType"] = 33554432] = "IsGenericIndexType";
+        ObjectFlags[ObjectFlags["IsGenericType"] = 25165824] = "IsGenericType";
         // Flags that require TypeFlags.Union
         /* @internal */
-        ObjectFlags[ObjectFlags["ContainsIntersections"] = 67108864] = "ContainsIntersections";
+        ObjectFlags[ObjectFlags["ContainsIntersections"] = 33554432] = "ContainsIntersections";
         // Flags that require TypeFlags.Intersection
         /* @internal */
-        ObjectFlags[ObjectFlags["IsNeverIntersectionComputed"] = 67108864] = "IsNeverIntersectionComputed";
+        ObjectFlags[ObjectFlags["IsNeverIntersectionComputed"] = 33554432] = "IsNeverIntersectionComputed";
         /* @internal */
-        ObjectFlags[ObjectFlags["IsNeverIntersection"] = 134217728] = "IsNeverIntersection";
+        ObjectFlags[ObjectFlags["IsNeverIntersection"] = 67108864] = "IsNeverIntersection";
     })(ObjectFlags = ts.ObjectFlags || (ts.ObjectFlags = {}));
     /* @internal */
     var VarianceFlags;
@@ -4865,6 +4943,21 @@
         ElementFlags[ElementFlags["NonRest"] = 11] = "NonRest";
     })(ElementFlags = ts.ElementFlags || (ts.ElementFlags = {}));
     /* @internal */
+    var AccessFlags;
+    (function (AccessFlags) {
+        AccessFlags[AccessFlags["None"] = 0] = "None";
+        AccessFlags[AccessFlags["IncludeUndefined"] = 1] = "IncludeUndefined";
+        AccessFlags[AccessFlags["NoIndexSignatures"] = 2] = "NoIndexSignatures";
+        AccessFlags[AccessFlags["Writing"] = 4] = "Writing";
+        AccessFlags[AccessFlags["CacheSymbol"] = 8] = "CacheSymbol";
+        AccessFlags[AccessFlags["NoTupleBoundsCheck"] = 16] = "NoTupleBoundsCheck";
+        AccessFlags[AccessFlags["ExpressionPosition"] = 32] = "ExpressionPosition";
+        AccessFlags[AccessFlags["ReportDeprecated"] = 64] = "ReportDeprecated";
+        AccessFlags[AccessFlags["SuppressNoImplicitAnyError"] = 128] = "SuppressNoImplicitAnyError";
+        AccessFlags[AccessFlags["Contextual"] = 256] = "Contextual";
+        AccessFlags[AccessFlags["Persistent"] = 1] = "Persistent";
+    })(AccessFlags = ts.AccessFlags || (ts.AccessFlags = {}));
+    /* @internal */
     var JsxReferenceKind;
     (function (JsxReferenceKind) {
         JsxReferenceKind[JsxReferenceKind["Component"] = 0] = "Component";
@@ -5264,6 +5357,8 @@
         TransformFlags[TransformFlags["ContainsDynamicImport"] = 4194304] = "ContainsDynamicImport";
         TransformFlags[TransformFlags["ContainsClassFields"] = 8388608] = "ContainsClassFields";
         TransformFlags[TransformFlags["ContainsPossibleTopLevelAwait"] = 16777216] = "ContainsPossibleTopLevelAwait";
+        TransformFlags[TransformFlags["ContainsLexicalSuper"] = 33554432] = "ContainsLexicalSuper";
+        TransformFlags[TransformFlags["ContainsUpdateExpressionForIdentifier"] = 67108864] = "ContainsUpdateExpressionForIdentifier";
         // Please leave this as 1 << 29.
         // It is the maximum bit we can set before we outgrow the size of a v8 small integer (SMI) on an x86 system.
         // It is a good reminder of how much room we have left
@@ -5289,12 +5384,12 @@
         TransformFlags[TransformFlags["PropertyAccessExcludes"] = 536870912] = "PropertyAccessExcludes";
         TransformFlags[TransformFlags["NodeExcludes"] = 536870912] = "NodeExcludes";
         TransformFlags[TransformFlags["ArrowFunctionExcludes"] = 557748224] = "ArrowFunctionExcludes";
-        TransformFlags[TransformFlags["FunctionExcludes"] = 557756416] = "FunctionExcludes";
-        TransformFlags[TransformFlags["ConstructorExcludes"] = 557752320] = "ConstructorExcludes";
-        TransformFlags[TransformFlags["MethodOrAccessorExcludes"] = 540975104] = "MethodOrAccessorExcludes";
-        TransformFlags[TransformFlags["PropertyExcludes"] = 536879104] = "PropertyExcludes";
+        TransformFlags[TransformFlags["FunctionExcludes"] = 591310848] = "FunctionExcludes";
+        TransformFlags[TransformFlags["ConstructorExcludes"] = 591306752] = "ConstructorExcludes";
+        TransformFlags[TransformFlags["MethodOrAccessorExcludes"] = 574529536] = "MethodOrAccessorExcludes";
+        TransformFlags[TransformFlags["PropertyExcludes"] = 570433536] = "PropertyExcludes";
         TransformFlags[TransformFlags["ClassExcludes"] = 536940544] = "ClassExcludes";
-        TransformFlags[TransformFlags["ModuleExcludes"] = 555888640] = "ModuleExcludes";
+        TransformFlags[TransformFlags["ModuleExcludes"] = 589443072] = "ModuleExcludes";
         TransformFlags[TransformFlags["TypeExcludes"] = -2] = "TypeExcludes";
         TransformFlags[TransformFlags["ObjectLiteralExcludes"] = 536973312] = "ObjectLiteralExcludes";
         TransformFlags[TransformFlags["ArrayLiteralOrCallOrNewExcludes"] = 536887296] = "ArrayLiteralOrCallOrNewExcludes";
@@ -5302,9 +5397,10 @@
         TransformFlags[TransformFlags["ParameterExcludes"] = 536870912] = "ParameterExcludes";
         TransformFlags[TransformFlags["CatchClauseExcludes"] = 536903680] = "CatchClauseExcludes";
         TransformFlags[TransformFlags["BindingPatternExcludes"] = 536887296] = "BindingPatternExcludes";
+        TransformFlags[TransformFlags["ContainsLexicalThisOrSuper"] = 33562624] = "ContainsLexicalThisOrSuper";
         // Propagating flags
         // - Bitmasks for flags that should propagate from a child
-        TransformFlags[TransformFlags["PropertyNamePropagatingFlags"] = 8192] = "PropertyNamePropagatingFlags";
+        TransformFlags[TransformFlags["PropertyNamePropagatingFlags"] = 33562624] = "PropertyNamePropagatingFlags";
         // Masks
         // - Additional bitmasks
     })(TransformFlags = ts.TransformFlags || (ts.TransformFlags = {}));
@@ -5342,6 +5438,8 @@
         /*@internal*/ EmitFlags[EmitFlags["TypeScriptClassWrapper"] = 33554432] = "TypeScriptClassWrapper";
         /*@internal*/ EmitFlags[EmitFlags["NeverApplyImportHelper"] = 67108864] = "NeverApplyImportHelper";
         /*@internal*/ EmitFlags[EmitFlags["IgnoreSourceNewlines"] = 134217728] = "IgnoreSourceNewlines";
+        /*@internal*/ EmitFlags[EmitFlags["Immutable"] = 268435456] = "Immutable";
+        /*@internal*/ EmitFlags[EmitFlags["IndirectCall"] = 536870912] = "IndirectCall";
     })(EmitFlags = ts.EmitFlags || (ts.EmitFlags = {}));
     /**
      * Used by the checker, this enum keeps track of external emit helpers that should be type
@@ -5843,7 +5941,7 @@
         var rest = path.substring(rootLength).split(ts.directorySeparator);
         if (rest.length && !ts.lastOrUndefined(rest))
             rest.pop();
-        return __spreadArray([root], rest);
+        return __spreadArray([root], rest, true);
     }
     /**
      * Parse a path into an array containing a root component (at index 0) and zero or more path
@@ -5902,6 +6000,11 @@
      * Normalize path separators, converting `\` into `/`.
      */
     function normalizeSlashes(path) {
+        var index = path.indexOf("\\");
+        if (index === -1) {
+            return path;
+        }
+        backslashRegExp.lastIndex = index; // prime regex with known position
         return path.replace(backslashRegExp, ts.directorySeparator);
     }
     ts.normalizeSlashes = normalizeSlashes;
@@ -5989,7 +6092,7 @@
         for (var _i = 1; _i < arguments.length; _i++) {
             paths[_i - 1] = arguments[_i];
         }
-        return normalizePath(ts.some(paths) ? combinePaths.apply(void 0, __spreadArray([path], paths)) : normalizeSlashes(path));
+        return normalizePath(ts.some(paths) ? combinePaths.apply(void 0, __spreadArray([path], paths, false)) : normalizeSlashes(path));
     }
     ts.resolvePath = resolvePath;
     /**
@@ -6012,6 +6115,19 @@
     ts.getNormalizedAbsolutePath = getNormalizedAbsolutePath;
     function normalizePath(path) {
         path = normalizeSlashes(path);
+        // Most paths don't require normalization
+        if (!relativePathSegmentRegExp.test(path)) {
+            return path;
+        }
+        // Some paths only require cleanup of `/./` or leading `./`
+        var simplified = path.replace(/\/\.\//g, "/").replace(/^\.\//, "");
+        if (simplified !== path) {
+            path = simplified;
+            if (!relativePathSegmentRegExp.test(path)) {
+                return path;
+            }
+        }
+        // Other paths require full normalization
         var normalized = getPathFromPathComponents(reducePathComponents(getPathComponents(path)));
         return normalized && hasTrailingDirectorySeparator(path) ? ensureTrailingDirectorySeparator(normalized) : normalized;
     }
@@ -6080,7 +6196,7 @@
     ts.changeAnyExtension = changeAnyExtension;
     //// Path Comparisons
     // check path for these segments: '', '.'. '..'
-    var relativePathSegmentRegExp = /(^|\/)\.{0,2}($|\/)/;
+    var relativePathSegmentRegExp = /(?:\/\/)|(?:^|\/)\.\.?(?:$|\/)/;
     function comparePathsWorker(a, b, componentComparer) {
         if (a === b)
             return 0 /* EqualTo */;
@@ -6200,7 +6316,7 @@
         for (; start < fromComponents.length; start++) {
             relative.push("..");
         }
-        return __spreadArray(__spreadArray([""], relative), components);
+        return __spreadArray(__spreadArray([""], relative, true), components, true);
     }
     ts.getPathComponentsRelativeTo = getPathComponentsRelativeTo;
     function getRelativePathFromDirectory(fromDirectory, to, getCanonicalFileNameOrIgnoreCase) {
@@ -7095,6 +7211,7 @@
             }
             var activeSession;
             var profilePath = "./profile.cpuprofile";
+            var hitSystemWatcherLimit = false;
             var Buffer = require("buffer").Buffer;
             var nodeVersion = getNodeMajorVersion();
             var isNode4OrLater = nodeVersion >= 4;
@@ -7131,6 +7248,9 @@
                 write: function (s) {
                     process.stdout.write(s);
                 },
+                getWidthOfTerminal: function () {
+                    return process.stdout.columns;
+                },
                 writeOutputIsTTY: function () {
                     return process.stdout.isTTY;
                 },
@@ -7420,6 +7540,10 @@
                             options = { persistent: true };
                         }
                     }
+                    if (hitSystemWatcherLimit) {
+                        ts.sysLog("sysLog:: " + fileOrDirectory + ":: Defaulting to fsWatchFile");
+                        return watchPresentFileSystemEntryWithFsWatchFile();
+                    }
                     try {
                         var presentWatcher = _fs.watch(fileOrDirectory, options, isLinuxOrMacOs ?
                             callbackChangingToMissingFileSystemEntry :
@@ -7432,6 +7556,8 @@
                         // Catch the exception and use polling instead
                         // Eg. on linux the number of watches are limited and one could easily exhaust watches and the exception ENOSPC is thrown when creating watcher at that point
                         // so instead of throwing error, use fs.watchFile
+                        hitSystemWatcherLimit || (hitSystemWatcherLimit = e.code === "ENOSPC");
+                        ts.sysLog("sysLog:: " + fileOrDirectory + ":: Changing to fsWatchFile");
                         return watchPresentFileSystemEntryWithFsWatchFile();
                     }
                 }
@@ -7451,7 +7577,6 @@
                  * Eg. on linux the number of watches are limited and one could easily exhaust watches and the exception ENOSPC is thrown when creating watcher at that point
                  */
                 function watchPresentFileSystemEntryWithFsWatchFile() {
-                    ts.sysLog("sysLog:: " + fileOrDirectory + ":: Changing to fsWatchFile");
                     return watchFile(fileOrDirectory, createFileWatcherCallback(callback), fallbackPollingInterval, fallbackOptions);
                 }
                 /**
@@ -7570,7 +7695,7 @@
                 }
             }
             function readDirectory(path, extensions, excludes, includes, depth) {
-                return ts.matchFiles(path, extensions, excludes, includes, useCaseSensitiveFileNames, process.cwd(), depth, getAccessibleFileSystemEntries, realpath);
+                return ts.matchFiles(path, extensions, excludes, includes, useCaseSensitiveFileNames, process.cwd(), depth, getAccessibleFileSystemEntries, realpath, directoryExists);
             }
             function fileSystemEntryExists(path, entryKind) {
                 // Since the error thrown by fs.statSync isn't used, we can avoid collecting a stack trace to improve
@@ -7693,7 +7818,6 @@
         An_index_signature_parameter_cannot_have_an_initializer: diag(1020, ts.DiagnosticCategory.Error, "An_index_signature_parameter_cannot_have_an_initializer_1020", "An index signature parameter cannot have an initializer."),
         An_index_signature_must_have_a_type_annotation: diag(1021, ts.DiagnosticCategory.Error, "An_index_signature_must_have_a_type_annotation_1021", "An index signature must have a type annotation."),
         An_index_signature_parameter_must_have_a_type_annotation: diag(1022, ts.DiagnosticCategory.Error, "An_index_signature_parameter_must_have_a_type_annotation_1022", "An index signature parameter must have a type annotation."),
-        An_index_signature_parameter_type_must_be_either_string_or_number: diag(1023, ts.DiagnosticCategory.Error, "An_index_signature_parameter_type_must_be_either_string_or_number_1023", "An index signature parameter type must be either 'string' or 'number'."),
         readonly_modifier_can_only_appear_on_a_property_declaration_or_index_signature: diag(1024, ts.DiagnosticCategory.Error, "readonly_modifier_can_only_appear_on_a_property_declaration_or_index_signature_1024", "'readonly' modifier can only appear on a property declaration or index signature."),
         An_index_signature_cannot_have_a_trailing_comma: diag(1025, ts.DiagnosticCategory.Error, "An_index_signature_cannot_have_a_trailing_comma_1025", "An index signature cannot have a trailing comma."),
         Accessibility_modifier_already_seen: diag(1028, ts.DiagnosticCategory.Error, "Accessibility_modifier_already_seen_1028", "Accessibility modifier already seen."),
@@ -7754,6 +7878,7 @@
         for_await_loops_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules: diag(1103, ts.DiagnosticCategory.Error, "for_await_loops_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_1103", "'for await' loops are only allowed within async functions and at the top levels of modules."),
         A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement: diag(1104, ts.DiagnosticCategory.Error, "A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement_1104", "A 'continue' statement can only be used within an enclosing iteration statement."),
         A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement: diag(1105, ts.DiagnosticCategory.Error, "A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement_1105", "A 'break' statement can only be used within an enclosing iteration or switch statement."),
+        The_left_hand_side_of_a_for_of_statement_may_not_be_async: diag(1106, ts.DiagnosticCategory.Error, "The_left_hand_side_of_a_for_of_statement_may_not_be_async_1106", "The left-hand side of a 'for...of' statement may not be 'async'."),
         Jump_target_cannot_cross_function_boundary: diag(1107, ts.DiagnosticCategory.Error, "Jump_target_cannot_cross_function_boundary_1107", "Jump target cannot cross function boundary."),
         A_return_statement_can_only_be_used_within_a_function_body: diag(1108, ts.DiagnosticCategory.Error, "A_return_statement_can_only_be_used_within_a_function_body_1108", "A 'return' statement can only be used within a function body."),
         Expression_expected: diag(1109, ts.DiagnosticCategory.Error, "Expression_expected_1109", "Expression expected."),
@@ -7840,7 +7965,7 @@
         Decorators_are_not_valid_here: diag(1206, ts.DiagnosticCategory.Error, "Decorators_are_not_valid_here_1206", "Decorators are not valid here."),
         Decorators_cannot_be_applied_to_multiple_get_Slashset_accessors_of_the_same_name: diag(1207, ts.DiagnosticCategory.Error, "Decorators_cannot_be_applied_to_multiple_get_Slashset_accessors_of_the_same_name_1207", "Decorators cannot be applied to multiple get/set accessors of the same name."),
         _0_cannot_be_compiled_under_isolatedModules_because_it_is_considered_a_global_script_file_Add_an_import_export_or_an_empty_export_statement_to_make_it_a_module: diag(1208, ts.DiagnosticCategory.Error, "_0_cannot_be_compiled_under_isolatedModules_because_it_is_considered_a_global_script_file_Add_an_imp_1208", "'{0}' cannot be compiled under '--isolatedModules' because it is considered a global script file. Add an import, export, or an empty 'export {}' statement to make it a module."),
-        Invalid_use_of_0_Class_definitions_are_automatically_in_strict_mode: diag(1210, ts.DiagnosticCategory.Error, "Invalid_use_of_0_Class_definitions_are_automatically_in_strict_mode_1210", "Invalid use of '{0}'. Class definitions are automatically in strict mode."),
+        Code_contained_in_a_class_is_evaluated_in_JavaScript_s_strict_mode_which_does_not_allow_this_use_of_0_For_more_information_see_https_Colon_Slash_Slashdeveloper_mozilla_org_Slashen_US_Slashdocs_SlashWeb_SlashJavaScript_SlashReference_SlashStrict_mode: diag(1210, ts.DiagnosticCategory.Error, "Code_contained_in_a_class_is_evaluated_in_JavaScript_s_strict_mode_which_does_not_allow_this_use_of__1210", "Code contained in a class is evaluated in JavaScript's strict mode which does not allow this use of '{0}'. For more information, see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Strict_mode."),
         A_class_declaration_without_the_default_modifier_must_have_a_name: diag(1211, ts.DiagnosticCategory.Error, "A_class_declaration_without_the_default_modifier_must_have_a_name_1211", "A class declaration without the 'default' modifier must have a name."),
         Identifier_expected_0_is_a_reserved_word_in_strict_mode: diag(1212, ts.DiagnosticCategory.Error, "Identifier_expected_0_is_a_reserved_word_in_strict_mode_1212", "Identifier expected. '{0}' is a reserved word in strict mode."),
         Identifier_expected_0_is_a_reserved_word_in_strict_mode_Class_definitions_are_automatically_in_strict_mode: diag(1213, ts.DiagnosticCategory.Error, "Identifier_expected_0_is_a_reserved_word_in_strict_mode_Class_definitions_are_automatically_in_stric_1213", "Identifier expected. '{0}' is a reserved word in strict mode. Class definitions are automatically in strict mode."),
@@ -7895,6 +8020,8 @@
         Declarations_with_definite_assignment_assertions_must_also_have_type_annotations: diag(1264, ts.DiagnosticCategory.Error, "Declarations_with_definite_assignment_assertions_must_also_have_type_annotations_1264", "Declarations with definite assignment assertions must also have type annotations."),
         A_rest_element_cannot_follow_another_rest_element: diag(1265, ts.DiagnosticCategory.Error, "A_rest_element_cannot_follow_another_rest_element_1265", "A rest element cannot follow another rest element."),
         An_optional_element_cannot_follow_a_rest_element: diag(1266, ts.DiagnosticCategory.Error, "An_optional_element_cannot_follow_a_rest_element_1266", "An optional element cannot follow a rest element."),
+        Property_0_cannot_have_an_initializer_because_it_is_marked_abstract: diag(1267, ts.DiagnosticCategory.Error, "Property_0_cannot_have_an_initializer_because_it_is_marked_abstract_1267", "Property '{0}' cannot have an initializer because it is marked abstract."),
+        An_index_signature_parameter_type_must_be_string_number_symbol_or_a_template_literal_type: diag(1268, ts.DiagnosticCategory.Error, "An_index_signature_parameter_type_must_be_string_number_symbol_or_a_template_literal_type_1268", "An index signature parameter type must be 'string', 'number', 'symbol', or a template literal type."),
         with_statements_are_not_allowed_in_an_async_function_block: diag(1300, ts.DiagnosticCategory.Error, "with_statements_are_not_allowed_in_an_async_function_block_1300", "'with' statements are not allowed in an async function block."),
         await_expressions_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules: diag(1308, ts.DiagnosticCategory.Error, "await_expressions_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_1308", "'await' expressions are only allowed within async functions and at the top levels of modules."),
         Did_you_mean_to_use_a_Colon_An_can_only_follow_a_property_name_when_the_containing_object_literal_is_part_of_a_destructuring_pattern: diag(1312, ts.DiagnosticCategory.Error, "Did_you_mean_to_use_a_Colon_An_can_only_follow_a_property_name_when_the_containing_object_literal_is_1312", "Did you mean to use a ':'? An '=' can only follow a property name when the containing object literal is part of a destructuring pattern."),
@@ -7921,8 +8048,7 @@
         unique_symbol_types_may_not_be_used_on_a_variable_declaration_with_a_binding_name: diag(1333, ts.DiagnosticCategory.Error, "unique_symbol_types_may_not_be_used_on_a_variable_declaration_with_a_binding_name_1333", "'unique symbol' types may not be used on a variable declaration with a binding name."),
         unique_symbol_types_are_only_allowed_on_variables_in_a_variable_statement: diag(1334, ts.DiagnosticCategory.Error, "unique_symbol_types_are_only_allowed_on_variables_in_a_variable_statement_1334", "'unique symbol' types are only allowed on variables in a variable statement."),
         unique_symbol_types_are_not_allowed_here: diag(1335, ts.DiagnosticCategory.Error, "unique_symbol_types_are_not_allowed_here_1335", "'unique symbol' types are not allowed here."),
-        An_index_signature_parameter_type_cannot_be_a_type_alias_Consider_writing_0_Colon_1_Colon_2_instead: diag(1336, ts.DiagnosticCategory.Error, "An_index_signature_parameter_type_cannot_be_a_type_alias_Consider_writing_0_Colon_1_Colon_2_instead_1336", "An index signature parameter type cannot be a type alias. Consider writing '[{0}: {1}]: {2}' instead."),
-        An_index_signature_parameter_type_cannot_be_a_union_type_Consider_using_a_mapped_object_type_instead: diag(1337, ts.DiagnosticCategory.Error, "An_index_signature_parameter_type_cannot_be_a_union_type_Consider_using_a_mapped_object_type_instead_1337", "An index signature parameter type cannot be a union type. Consider using a mapped object type instead."),
+        An_index_signature_parameter_type_cannot_be_a_literal_type_or_generic_type_Consider_using_a_mapped_object_type_instead: diag(1337, ts.DiagnosticCategory.Error, "An_index_signature_parameter_type_cannot_be_a_literal_type_or_generic_type_Consider_using_a_mapped_o_1337", "An index signature parameter type cannot be a literal type or generic type. Consider using a mapped object type instead."),
         infer_declarations_are_only_permitted_in_the_extends_clause_of_a_conditional_type: diag(1338, ts.DiagnosticCategory.Error, "infer_declarations_are_only_permitted_in_the_extends_clause_of_a_conditional_type_1338", "'infer' declarations are only permitted in the 'extends' clause of a conditional type."),
         Module_0_does_not_refer_to_a_value_but_is_used_as_a_value_here: diag(1339, ts.DiagnosticCategory.Error, "Module_0_does_not_refer_to_a_value_but_is_used_as_a_value_here_1339", "Module '{0}' does not refer to a value, but is used as a value here."),
         Module_0_does_not_refer_to_a_type_but_is_used_as_a_type_here_Did_you_mean_typeof_import_0: diag(1340, ts.DiagnosticCategory.Error, "Module_0_does_not_refer_to_a_type_but_is_used_as_a_type_here_Did_you_mean_typeof_import_0_1340", "Module '{0}' does not refer to a type, but is used as a type here. Did you mean 'typeof import('{0}')'?"),
@@ -7952,7 +8078,6 @@
         Convert_all_re_exported_types_to_type_only_exports: diag(1365, ts.DiagnosticCategory.Message, "Convert_all_re_exported_types_to_type_only_exports_1365", "Convert all re-exported types to type-only exports"),
         Split_into_two_separate_import_declarations: diag(1366, ts.DiagnosticCategory.Message, "Split_into_two_separate_import_declarations_1366", "Split into two separate import declarations"),
         Split_all_invalid_type_only_imports: diag(1367, ts.DiagnosticCategory.Message, "Split_all_invalid_type_only_imports_1367", "Split all invalid type-only imports"),
-        Specify_emit_Slashchecking_behavior_for_imports_that_are_only_used_for_types: diag(1368, ts.DiagnosticCategory.Message, "Specify_emit_Slashchecking_behavior_for_imports_that_are_only_used_for_types_1368", "Specify emit/checking behavior for imports that are only used for types"),
         Did_you_mean_0: diag(1369, ts.DiagnosticCategory.Message, "Did_you_mean_0_1369", "Did you mean '{0}'?"),
         This_import_is_never_used_as_a_value_and_must_use_import_type_because_importsNotUsedAsValues_is_set_to_error: diag(1371, ts.DiagnosticCategory.Error, "This_import_is_never_used_as_a_value_and_must_use_import_type_because_importsNotUsedAsValues_is_set__1371", "This import is never used as a value and must use 'import type' because 'importsNotUsedAsValues' is set to 'error'."),
         Convert_to_type_only_import: diag(1373, ts.DiagnosticCategory.Message, "Convert_to_type_only_import_1373", "Convert to type-only import"),
@@ -8016,6 +8141,16 @@
         for_await_loops_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_file_has_no_imports_or_exports_Consider_adding_an_empty_export_to_make_this_file_a_module: diag(1431, ts.DiagnosticCategory.Error, "for_await_loops_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_file_1431", "'for await' loops are only allowed at the top level of a file when that file is a module, but this file has no imports or exports. Consider adding an empty 'export {}' to make this file a module."),
         Top_level_for_await_loops_are_only_allowed_when_the_module_option_is_set_to_esnext_or_system_and_the_target_option_is_set_to_es2017_or_higher: diag(1432, ts.DiagnosticCategory.Error, "Top_level_for_await_loops_are_only_allowed_when_the_module_option_is_set_to_esnext_or_system_and_the_1432", "Top-level 'for await' loops are only allowed when the 'module' option is set to 'esnext' or 'system', and the 'target' option is set to 'es2017' or higher."),
         Decorators_may_not_be_applied_to_this_parameters: diag(1433, ts.DiagnosticCategory.Error, "Decorators_may_not_be_applied_to_this_parameters_1433", "Decorators may not be applied to 'this' parameters."),
+        Unexpected_keyword_or_identifier: diag(1434, ts.DiagnosticCategory.Error, "Unexpected_keyword_or_identifier_1434", "Unexpected keyword or identifier."),
+        Unknown_keyword_or_identifier_Did_you_mean_0: diag(1435, ts.DiagnosticCategory.Error, "Unknown_keyword_or_identifier_Did_you_mean_0_1435", "Unknown keyword or identifier. Did you mean '{0}'?"),
+        Decorators_must_precede_the_name_and_all_keywords_of_property_declarations: diag(1436, ts.DiagnosticCategory.Error, "Decorators_must_precede_the_name_and_all_keywords_of_property_declarations_1436", "Decorators must precede the name and all keywords of property declarations."),
+        Namespace_must_be_given_a_name: diag(1437, ts.DiagnosticCategory.Error, "Namespace_must_be_given_a_name_1437", "Namespace must be given a name."),
+        Interface_must_be_given_a_name: diag(1438, ts.DiagnosticCategory.Error, "Interface_must_be_given_a_name_1438", "Interface must be given a name."),
+        Type_alias_must_be_given_a_name: diag(1439, ts.DiagnosticCategory.Error, "Type_alias_must_be_given_a_name_1439", "Type alias must be given a name."),
+        Variable_declaration_not_allowed_at_this_location: diag(1440, ts.DiagnosticCategory.Error, "Variable_declaration_not_allowed_at_this_location_1440", "Variable declaration not allowed at this location."),
+        Cannot_start_a_function_call_in_a_type_annotation: diag(1441, ts.DiagnosticCategory.Error, "Cannot_start_a_function_call_in_a_type_annotation_1441", "Cannot start a function call in a type annotation."),
+        Expected_for_property_initializer: diag(1442, ts.DiagnosticCategory.Error, "Expected_for_property_initializer_1442", "Expected '=' for property initializer."),
+        Module_declaration_names_may_only_use_or_quoted_strings: diag(1443, ts.DiagnosticCategory.Error, "Module_declaration_names_may_only_use_or_quoted_strings_1443", "Module declaration names may only use ' or \" quoted strings."),
         The_types_of_0_are_incompatible_between_these_types: diag(2200, ts.DiagnosticCategory.Error, "The_types_of_0_are_incompatible_between_these_types_2200", "The types of '{0}' are incompatible between these types."),
         The_types_returned_by_0_are_incompatible_between_these_types: diag(2201, ts.DiagnosticCategory.Error, "The_types_returned_by_0_are_incompatible_between_these_types_2201", "The types returned by '{0}' are incompatible between these types."),
         Call_signature_return_types_0_and_1_are_incompatible: diag(2202, ts.DiagnosticCategory.Error, "Call_signature_return_types_0_and_1_are_incompatible_2202", "Call signature return types '{0}' and '{1}' are incompatible.", /*reportsUnnecessary*/ undefined, /*elidedInCompatabilityPyramid*/ true),
@@ -8051,8 +8186,8 @@
         Types_of_property_0_are_incompatible: diag(2326, ts.DiagnosticCategory.Error, "Types_of_property_0_are_incompatible_2326", "Types of property '{0}' are incompatible."),
         Property_0_is_optional_in_type_1_but_required_in_type_2: diag(2327, ts.DiagnosticCategory.Error, "Property_0_is_optional_in_type_1_but_required_in_type_2_2327", "Property '{0}' is optional in type '{1}' but required in type '{2}'."),
         Types_of_parameters_0_and_1_are_incompatible: diag(2328, ts.DiagnosticCategory.Error, "Types_of_parameters_0_and_1_are_incompatible_2328", "Types of parameters '{0}' and '{1}' are incompatible."),
-        Index_signature_is_missing_in_type_0: diag(2329, ts.DiagnosticCategory.Error, "Index_signature_is_missing_in_type_0_2329", "Index signature is missing in type '{0}'."),
-        Index_signatures_are_incompatible: diag(2330, ts.DiagnosticCategory.Error, "Index_signatures_are_incompatible_2330", "Index signatures are incompatible."),
+        Index_signature_for_type_0_is_missing_in_type_1: diag(2329, ts.DiagnosticCategory.Error, "Index_signature_for_type_0_is_missing_in_type_1_2329", "Index signature for type '{0}' is missing in type '{1}'."),
+        _0_and_1_index_signatures_are_incompatible: diag(2330, ts.DiagnosticCategory.Error, "_0_and_1_index_signatures_are_incompatible_2330", "'{0}' and '{1}' index signatures are incompatible."),
         this_cannot_be_referenced_in_a_module_or_namespace_body: diag(2331, ts.DiagnosticCategory.Error, "this_cannot_be_referenced_in_a_module_or_namespace_body_2331", "'this' cannot be referenced in a module or namespace body."),
         this_cannot_be_referenced_in_current_location: diag(2332, ts.DiagnosticCategory.Error, "this_cannot_be_referenced_in_current_location_2332", "'this' cannot be referenced in current location."),
         this_cannot_be_referenced_in_constructor_arguments: diag(2333, ts.DiagnosticCategory.Error, "this_cannot_be_referenced_in_constructor_arguments_2333", "'this' cannot be referenced in constructor arguments."),
@@ -8096,8 +8231,7 @@
         A_parameter_initializer_is_only_allowed_in_a_function_or_constructor_implementation: diag(2371, ts.DiagnosticCategory.Error, "A_parameter_initializer_is_only_allowed_in_a_function_or_constructor_implementation_2371", "A parameter initializer is only allowed in a function or constructor implementation."),
         Parameter_0_cannot_reference_itself: diag(2372, ts.DiagnosticCategory.Error, "Parameter_0_cannot_reference_itself_2372", "Parameter '{0}' cannot reference itself."),
         Parameter_0_cannot_reference_identifier_1_declared_after_it: diag(2373, ts.DiagnosticCategory.Error, "Parameter_0_cannot_reference_identifier_1_declared_after_it_2373", "Parameter '{0}' cannot reference identifier '{1}' declared after it."),
-        Duplicate_string_index_signature: diag(2374, ts.DiagnosticCategory.Error, "Duplicate_string_index_signature_2374", "Duplicate string index signature."),
-        Duplicate_number_index_signature: diag(2375, ts.DiagnosticCategory.Error, "Duplicate_number_index_signature_2375", "Duplicate number index signature."),
+        Duplicate_index_signature_for_type_0: diag(2374, ts.DiagnosticCategory.Error, "Duplicate_index_signature_for_type_0_2374", "Duplicate index signature for type '{0}'."),
         A_super_call_must_be_the_first_statement_in_the_constructor_when_a_class_contains_initialized_properties_parameter_properties_or_private_identifiers: diag(2376, ts.DiagnosticCategory.Error, "A_super_call_must_be_the_first_statement_in_the_constructor_when_a_class_contains_initialized_proper_2376", "A 'super' call must be the first statement in the constructor when a class contains initialized properties, parameter properties, or private identifiers."),
         Constructors_for_derived_classes_must_contain_a_super_call: diag(2377, ts.DiagnosticCategory.Error, "Constructors_for_derived_classes_must_contain_a_super_call_2377", "Constructors for derived classes must contain a 'super' call."),
         A_get_accessor_must_return_a_value: diag(2378, ts.DiagnosticCategory.Error, "A_get_accessor_must_return_a_value_2378", "A 'get' accessor must return a value."),
@@ -8132,9 +8266,8 @@
         Setters_cannot_return_a_value: diag(2408, ts.DiagnosticCategory.Error, "Setters_cannot_return_a_value_2408", "Setters cannot return a value."),
         Return_type_of_constructor_signature_must_be_assignable_to_the_instance_type_of_the_class: diag(2409, ts.DiagnosticCategory.Error, "Return_type_of_constructor_signature_must_be_assignable_to_the_instance_type_of_the_class_2409", "Return type of constructor signature must be assignable to the instance type of the class."),
         The_with_statement_is_not_supported_All_symbols_in_a_with_block_will_have_type_any: diag(2410, ts.DiagnosticCategory.Error, "The_with_statement_is_not_supported_All_symbols_in_a_with_block_will_have_type_any_2410", "The 'with' statement is not supported. All symbols in a 'with' block will have type 'any'."),
-        Property_0_of_type_1_is_not_assignable_to_string_index_type_2: diag(2411, ts.DiagnosticCategory.Error, "Property_0_of_type_1_is_not_assignable_to_string_index_type_2_2411", "Property '{0}' of type '{1}' is not assignable to string index type '{2}'."),
-        Property_0_of_type_1_is_not_assignable_to_numeric_index_type_2: diag(2412, ts.DiagnosticCategory.Error, "Property_0_of_type_1_is_not_assignable_to_numeric_index_type_2_2412", "Property '{0}' of type '{1}' is not assignable to numeric index type '{2}'."),
-        Numeric_index_type_0_is_not_assignable_to_string_index_type_1: diag(2413, ts.DiagnosticCategory.Error, "Numeric_index_type_0_is_not_assignable_to_string_index_type_1_2413", "Numeric index type '{0}' is not assignable to string index type '{1}'."),
+        Property_0_of_type_1_is_not_assignable_to_2_index_type_3: diag(2411, ts.DiagnosticCategory.Error, "Property_0_of_type_1_is_not_assignable_to_2_index_type_3_2411", "Property '{0}' of type '{1}' is not assignable to '{2}' index type '{3}'."),
+        _0_index_type_1_is_not_assignable_to_2_index_type_3: diag(2413, ts.DiagnosticCategory.Error, "_0_index_type_1_is_not_assignable_to_2_index_type_3_2413", "'{0}' index type '{1}' is not assignable to '{2}' index type '{3}'."),
         Class_name_cannot_be_0: diag(2414, ts.DiagnosticCategory.Error, "Class_name_cannot_be_0_2414", "Class name cannot be '{0}'."),
         Class_0_incorrectly_extends_base_class_1: diag(2415, ts.DiagnosticCategory.Error, "Class_0_incorrectly_extends_base_class_1_2415", "Class '{0}' incorrectly extends base class '{1}'."),
         Property_0_in_type_1_is_not_assignable_to_the_same_property_in_base_type_2: diag(2416, ts.DiagnosticCategory.Error, "Property_0_in_type_1_is_not_assignable_to_the_same_property_in_base_type_2_2416", "Property '{0}' in type '{1}' is not assignable to the same property in base type '{2}'."),
@@ -8281,7 +8414,9 @@
         Property_0_is_used_before_being_assigned: diag(2565, ts.DiagnosticCategory.Error, "Property_0_is_used_before_being_assigned_2565", "Property '{0}' is used before being assigned."),
         A_rest_element_cannot_have_a_property_name: diag(2566, ts.DiagnosticCategory.Error, "A_rest_element_cannot_have_a_property_name_2566", "A rest element cannot have a property name."),
         Enum_declarations_can_only_merge_with_namespace_or_other_enum_declarations: diag(2567, ts.DiagnosticCategory.Error, "Enum_declarations_can_only_merge_with_namespace_or_other_enum_declarations_2567", "Enum declarations can only merge with namespace or other enum declarations."),
+        Property_0_may_not_exist_on_type_1_Did_you_mean_2: diag(2568, ts.DiagnosticCategory.Error, "Property_0_may_not_exist_on_type_1_Did_you_mean_2_2568", "Property '{0}' may not exist on type '{1}'. Did you mean '{2}'?"),
         Type_0_is_not_an_array_type_or_a_string_type_Use_compiler_option_downlevelIteration_to_allow_iterating_of_iterators: diag(2569, ts.DiagnosticCategory.Error, "Type_0_is_not_an_array_type_or_a_string_type_Use_compiler_option_downlevelIteration_to_allow_iterati_2569", "Type '{0}' is not an array type or a string type. Use compiler option '--downlevelIteration' to allow iterating of iterators."),
+        Could_not_find_name_0_Did_you_mean_1: diag(2570, ts.DiagnosticCategory.Error, "Could_not_find_name_0_Did_you_mean_1_2570", "Could not find name '{0}'. Did you mean '{1}'?"),
         Object_is_of_type_unknown: diag(2571, ts.DiagnosticCategory.Error, "Object_is_of_type_unknown_2571", "Object is of type 'unknown'."),
         Rest_signatures_are_incompatible: diag(2572, ts.DiagnosticCategory.Error, "Rest_signatures_are_incompatible_2572", "Rest signatures are incompatible."),
         Property_0_is_incompatible_with_rest_element_type: diag(2573, ts.DiagnosticCategory.Error, "Property_0_is_incompatible_with_rest_element_type_2573", "Property '{0}' is incompatible with rest element type."),
@@ -8342,6 +8477,7 @@
         Cannot_assign_to_0_because_it_is_a_namespace: diag(2631, ts.DiagnosticCategory.Error, "Cannot_assign_to_0_because_it_is_a_namespace_2631", "Cannot assign to '{0}' because it is a namespace."),
         Cannot_assign_to_0_because_it_is_an_import: diag(2632, ts.DiagnosticCategory.Error, "Cannot_assign_to_0_because_it_is_an_import_2632", "Cannot assign to '{0}' because it is an import."),
         JSX_property_access_expressions_cannot_include_JSX_namespace_names: diag(2633, ts.DiagnosticCategory.Error, "JSX_property_access_expressions_cannot_include_JSX_namespace_names_2633", "JSX property access expressions cannot include JSX namespace names"),
+        _0_index_signatures_are_incompatible: diag(2634, ts.DiagnosticCategory.Error, "_0_index_signatures_are_incompatible_2634", "'{0}' index signatures are incompatible."),
         Cannot_augment_module_0_with_value_exports_because_it_resolves_to_a_non_module_entity: diag(2649, ts.DiagnosticCategory.Error, "Cannot_augment_module_0_with_value_exports_because_it_resolves_to_a_non_module_entity_2649", "Cannot augment module '{0}' with value exports because it resolves to a non-module entity."),
         A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_members_defined_in_other_enums: diag(2651, ts.DiagnosticCategory.Error, "A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_memb_2651", "A member initializer in a enum declaration cannot reference members declared after it, including members defined in other enums."),
         Merged_declaration_0_cannot_include_a_default_export_declaration_Consider_adding_a_separate_export_default_0_declaration_instead: diag(2652, ts.DiagnosticCategory.Error, "Merged_declaration_0_cannot_include_a_default_export_declaration_Consider_adding_a_separate_export_d_2652", "Merged declaration '{0}' cannot include a default export declaration. Consider adding a separate 'export default {0}' declaration instead."),
@@ -8504,6 +8640,13 @@
         Property_0_may_not_be_used_in_a_static_property_s_initializer_in_the_same_class_when_target_is_esnext_and_useDefineForClassFields_is_false: diag(2810, ts.DiagnosticCategory.Error, "Property_0_may_not_be_used_in_a_static_property_s_initializer_in_the_same_class_when_target_is_esnex_2810", "Property '{0}' may not be used in a static property's initializer in the same class when 'target' is 'esnext' and 'useDefineForClassFields' is 'false'."),
         Initializer_for_property_0: diag(2811, ts.DiagnosticCategory.Error, "Initializer_for_property_0_2811", "Initializer for property '{0}'"),
         Property_0_does_not_exist_on_type_1_Try_changing_the_lib_compiler_option_to_include_dom: diag(2812, ts.DiagnosticCategory.Error, "Property_0_does_not_exist_on_type_1_Try_changing_the_lib_compiler_option_to_include_dom_2812", "Property '{0}' does not exist on type '{1}'. Try changing the 'lib' compiler option to include 'dom'."),
+        Class_declaration_cannot_implement_overload_list_for_0: diag(2813, ts.DiagnosticCategory.Error, "Class_declaration_cannot_implement_overload_list_for_0_2813", "Class declaration cannot implement overload list for '{0}'."),
+        Function_with_bodies_can_only_merge_with_classes_that_are_ambient: diag(2814, ts.DiagnosticCategory.Error, "Function_with_bodies_can_only_merge_with_classes_that_are_ambient_2814", "Function with bodies can only merge with classes that are ambient."),
+        arguments_cannot_be_referenced_in_property_initializers: diag(2815, ts.DiagnosticCategory.Error, "arguments_cannot_be_referenced_in_property_initializers_2815", "'arguments' cannot be referenced in property initializers."),
+        Cannot_use_this_in_a_static_property_initializer_of_a_decorated_class: diag(2816, ts.DiagnosticCategory.Error, "Cannot_use_this_in_a_static_property_initializer_of_a_decorated_class_2816", "Cannot use 'this' in a static property initializer of a decorated class."),
+        Property_0_has_no_initializer_and_is_not_definitely_assigned_in_a_class_static_block: diag(2817, ts.DiagnosticCategory.Error, "Property_0_has_no_initializer_and_is_not_definitely_assigned_in_a_class_static_block_2817", "Property '{0}' has no initializer and is not definitely assigned in a class static block."),
+        Duplicate_identifier_0_Compiler_reserves_name_1_when_emitting_super_references_in_static_initializers: diag(2818, ts.DiagnosticCategory.Error, "Duplicate_identifier_0_Compiler_reserves_name_1_when_emitting_super_references_in_static_initializer_2818", "Duplicate identifier '{0}'. Compiler reserves name '{1}' when emitting 'super' references in static initializers."),
+        Namespace_name_cannot_be_0: diag(2819, ts.DiagnosticCategory.Error, "Namespace_name_cannot_be_0_2819", "Namespace name cannot be '{0}'."),
         Import_declaration_0_is_using_private_name_1: diag(4000, ts.DiagnosticCategory.Error, "Import_declaration_0_is_using_private_name_1_4000", "Import declaration '{0}' is using private name '{1}'."),
         Type_parameter_0_of_exported_class_has_or_is_using_private_name_1: diag(4002, ts.DiagnosticCategory.Error, "Type_parameter_0_of_exported_class_has_or_is_using_private_name_1_4002", "Type parameter '{0}' of exported class has or is using private name '{1}'."),
         Type_parameter_0_of_exported_interface_has_or_is_using_private_name_1: diag(4004, ts.DiagnosticCategory.Error, "Type_parameter_0_of_exported_interface_has_or_is_using_private_name_1_4004", "Type parameter '{0}' of exported interface has or is using private name '{1}'."),
@@ -8603,6 +8746,8 @@
         This_member_must_have_an_override_modifier_because_it_overrides_a_member_in_the_base_class_0: diag(4114, ts.DiagnosticCategory.Error, "This_member_must_have_an_override_modifier_because_it_overrides_a_member_in_the_base_class_0_4114", "This member must have an 'override' modifier because it overrides a member in the base class '{0}'."),
         This_parameter_property_must_have_an_override_modifier_because_it_overrides_a_member_in_base_class_0: diag(4115, ts.DiagnosticCategory.Error, "This_parameter_property_must_have_an_override_modifier_because_it_overrides_a_member_in_base_class_0_4115", "This parameter property must have an 'override' modifier because it overrides a member in base class '{0}'."),
         This_member_must_have_an_override_modifier_because_it_overrides_an_abstract_method_that_is_declared_in_the_base_class_0: diag(4116, ts.DiagnosticCategory.Error, "This_member_must_have_an_override_modifier_because_it_overrides_an_abstract_method_that_is_declared__4116", "This member must have an 'override' modifier because it overrides an abstract method that is declared in the base class '{0}'."),
+        This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0_Did_you_mean_1: diag(4117, ts.DiagnosticCategory.Error, "This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0_Did_you__4117", "This member cannot have an 'override' modifier because it is not declared in the base class '{0}'. Did you mean '{1}'?"),
+        The_type_of_this_node_cannot_be_serialized_because_its_property_0_cannot_be_serialized: diag(4118, ts.DiagnosticCategory.Error, "The_type_of_this_node_cannot_be_serialized_because_its_property_0_cannot_be_serialized_4118", "The type of this node cannot be serialized because its property '{0}' cannot be serialized."),
         The_current_host_does_not_support_the_0_option: diag(5001, ts.DiagnosticCategory.Error, "The_current_host_does_not_support_the_0_option_5001", "The current host does not support the '{0}' option."),
         Cannot_find_the_common_subdirectory_path_for_the_input_files: diag(5009, ts.DiagnosticCategory.Error, "Cannot_find_the_common_subdirectory_path_for_the_input_files_5009", "Cannot find the common subdirectory path for the input files."),
         File_specification_cannot_end_in_a_recursive_directory_wildcard_Asterisk_Asterisk_Colon_0: diag(5010, ts.DiagnosticCategory.Error, "File_specification_cannot_end_in_a_recursive_directory_wildcard_Asterisk_Asterisk_Colon_0_5010", "File specification cannot end in a recursive directory wildcard ('**'): '{0}'."),
@@ -8661,7 +8806,7 @@
         Generates_a_sourcemap_for_each_corresponding_d_ts_file: diag(6000, ts.DiagnosticCategory.Message, "Generates_a_sourcemap_for_each_corresponding_d_ts_file_6000", "Generates a sourcemap for each corresponding '.d.ts' file."),
         Concatenate_and_emit_output_to_single_file: diag(6001, ts.DiagnosticCategory.Message, "Concatenate_and_emit_output_to_single_file_6001", "Concatenate and emit output to single file."),
         Generates_corresponding_d_ts_file: diag(6002, ts.DiagnosticCategory.Message, "Generates_corresponding_d_ts_file_6002", "Generates corresponding '.d.ts' file."),
-        Specify_the_location_where_debugger_should_locate_map_files_instead_of_generated_locations: diag(6003, ts.DiagnosticCategory.Message, "Specify_the_location_where_debugger_should_locate_map_files_instead_of_generated_locations_6003", "Specify the location where debugger should locate map files instead of generated locations."),
+        Specify_the_location_where_debugger_should_locate_map_files_instead_of_generated_locations: diag(6655, ts.DiagnosticCategory.Message, "Specify_the_location_where_debugger_should_locate_map_files_instead_of_generated_locations_6655", "Specify the location where debugger should locate map files instead of generated locations."),
         Specify_the_location_where_debugger_should_locate_TypeScript_files_instead_of_source_locations: diag(6004, ts.DiagnosticCategory.Message, "Specify_the_location_where_debugger_should_locate_TypeScript_files_instead_of_source_locations_6004", "Specify the location where debugger should locate TypeScript files instead of source locations."),
         Watch_input_files: diag(6005, ts.DiagnosticCategory.Message, "Watch_input_files_6005", "Watch input files."),
         Redirect_output_structure_to_the_directory: diag(6006, ts.DiagnosticCategory.Message, "Redirect_output_structure_to_the_directory_6006", "Redirect output structure to the directory."),
@@ -8673,8 +8818,8 @@
         Skip_type_checking_of_declaration_files: diag(6012, ts.DiagnosticCategory.Message, "Skip_type_checking_of_declaration_files_6012", "Skip type checking of declaration files."),
         Do_not_resolve_the_real_path_of_symlinks: diag(6013, ts.DiagnosticCategory.Message, "Do_not_resolve_the_real_path_of_symlinks_6013", "Do not resolve the real path of symlinks."),
         Only_emit_d_ts_declaration_files: diag(6014, ts.DiagnosticCategory.Message, "Only_emit_d_ts_declaration_files_6014", "Only emit '.d.ts' declaration files."),
-        Specify_ECMAScript_target_version_Colon_ES3_default_ES5_ES2015_ES2016_ES2017_ES2018_ES2019_ES2020_ES2021_or_ESNEXT: diag(6015, ts.DiagnosticCategory.Message, "Specify_ECMAScript_target_version_Colon_ES3_default_ES5_ES2015_ES2016_ES2017_ES2018_ES2019_ES2020_ES_6015", "Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019', 'ES2020', 'ES2021', or 'ESNEXT'."),
-        Specify_module_code_generation_Colon_none_commonjs_amd_system_umd_es2015_es2020_or_ESNext: diag(6016, ts.DiagnosticCategory.Message, "Specify_module_code_generation_Colon_none_commonjs_amd_system_umd_es2015_es2020_or_ESNext_6016", "Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', 'es2020', or 'ESNext'."),
+        Specify_ECMAScript_target_version: diag(6015, ts.DiagnosticCategory.Message, "Specify_ECMAScript_target_version_6015", "Specify ECMAScript target version."),
+        Specify_module_code_generation: diag(6016, ts.DiagnosticCategory.Message, "Specify_module_code_generation_6016", "Specify module code generation."),
         Print_this_message: diag(6017, ts.DiagnosticCategory.Message, "Print_this_message_6017", "Print this message."),
         Print_the_compiler_s_version: diag(6019, ts.DiagnosticCategory.Message, "Print_the_compiler_s_version_6019", "Print the compiler's version."),
         Compile_the_project_given_the_path_to_its_configuration_file_or_to_a_folder_with_a_tsconfig_json: diag(6020, ts.DiagnosticCategory.Message, "Compile_the_project_given_the_path_to_its_configuration_file_or_to_a_folder_with_a_tsconfig_json_6020", "Compile the project given the path to its configuration file, or to a folder with a 'tsconfig.json'."),
@@ -8726,7 +8871,7 @@
         Do_not_report_errors_on_unreachable_code: diag(6077, ts.DiagnosticCategory.Message, "Do_not_report_errors_on_unreachable_code_6077", "Do not report errors on unreachable code."),
         Disallow_inconsistently_cased_references_to_the_same_file: diag(6078, ts.DiagnosticCategory.Message, "Disallow_inconsistently_cased_references_to_the_same_file_6078", "Disallow inconsistently-cased references to the same file."),
         Specify_library_files_to_be_included_in_the_compilation: diag(6079, ts.DiagnosticCategory.Message, "Specify_library_files_to_be_included_in_the_compilation_6079", "Specify library files to be included in the compilation."),
-        Specify_JSX_code_generation_Colon_preserve_react_native_react_react_jsx_or_react_jsxdev: diag(6080, ts.DiagnosticCategory.Message, "Specify_JSX_code_generation_Colon_preserve_react_native_react_react_jsx_or_react_jsxdev_6080", "Specify JSX code generation: 'preserve', 'react-native', 'react', 'react-jsx' or 'react-jsxdev'."),
+        Specify_JSX_code_generation: diag(6080, ts.DiagnosticCategory.Message, "Specify_JSX_code_generation_6080", "Specify JSX code generation."),
         File_0_has_an_unsupported_extension_so_skipping_it: diag(6081, ts.DiagnosticCategory.Message, "File_0_has_an_unsupported_extension_so_skipping_it_6081", "File '{0}' has an unsupported extension, so skipping it."),
         Only_amd_and_system_modules_are_supported_alongside_0: diag(6082, ts.DiagnosticCategory.Error, "Only_amd_and_system_modules_are_supported_alongside_0_6082", "Only 'amd' and 'system' modules are supported alongside --{0}."),
         Base_directory_to_resolve_non_absolute_module_names: diag(6083, ts.DiagnosticCategory.Message, "Base_directory_to_resolve_non_absolute_module_names_6083", "Base directory to resolve non-absolute module names."),
@@ -8808,7 +8953,7 @@
         List_of_folders_to_include_type_definitions_from: diag(6161, ts.DiagnosticCategory.Message, "List_of_folders_to_include_type_definitions_from_6161", "List of folders to include type definitions from."),
         Disable_size_limitations_on_JavaScript_projects: diag(6162, ts.DiagnosticCategory.Message, "Disable_size_limitations_on_JavaScript_projects_6162", "Disable size limitations on JavaScript projects."),
         The_character_set_of_the_input_files: diag(6163, ts.DiagnosticCategory.Message, "The_character_set_of_the_input_files_6163", "The character set of the input files."),
-        Emit_a_UTF_8_Byte_Order_Mark_BOM_in_the_beginning_of_output_files: diag(6164, ts.DiagnosticCategory.Message, "Emit_a_UTF_8_Byte_Order_Mark_BOM_in_the_beginning_of_output_files_6164", "Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files."),
+        Emit_a_UTF_8_Byte_Order_Mark_BOM_in_the_beginning_of_output_files: diag(6622, ts.DiagnosticCategory.Message, "Emit_a_UTF_8_Byte_Order_Mark_BOM_in_the_beginning_of_output_files_6622", "Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files."),
         Do_not_truncate_error_messages: diag(6165, ts.DiagnosticCategory.Message, "Do_not_truncate_error_messages_6165", "Do not truncate error messages."),
         Output_directory_for_generated_declaration_files: diag(6166, ts.DiagnosticCategory.Message, "Output_directory_for_generated_declaration_files_6166", "Output directory for generated declaration files."),
         A_series_of_entries_which_re_map_imports_to_lookup_locations_relative_to_the_baseUrl: diag(6167, ts.DiagnosticCategory.Message, "A_series_of_entries_which_re_map_imports_to_lookup_locations_relative_to_the_baseUrl_6167", "A series of entries which re-map imports to lookup locations relative to the 'baseUrl'."),
@@ -8816,20 +8961,12 @@
         Show_all_compiler_options: diag(6169, ts.DiagnosticCategory.Message, "Show_all_compiler_options_6169", "Show all compiler options."),
         Deprecated_Use_outFile_instead_Concatenate_and_emit_output_to_single_file: diag(6170, ts.DiagnosticCategory.Message, "Deprecated_Use_outFile_instead_Concatenate_and_emit_output_to_single_file_6170", "[Deprecated] Use '--outFile' instead. Concatenate and emit output to single file"),
         Command_line_Options: diag(6171, ts.DiagnosticCategory.Message, "Command_line_Options_6171", "Command-line Options"),
-        Basic_Options: diag(6172, ts.DiagnosticCategory.Message, "Basic_Options_6172", "Basic Options"),
-        Strict_Type_Checking_Options: diag(6173, ts.DiagnosticCategory.Message, "Strict_Type_Checking_Options_6173", "Strict Type-Checking Options"),
-        Module_Resolution_Options: diag(6174, ts.DiagnosticCategory.Message, "Module_Resolution_Options_6174", "Module Resolution Options"),
-        Source_Map_Options: diag(6175, ts.DiagnosticCategory.Message, "Source_Map_Options_6175", "Source Map Options"),
-        Additional_Checks: diag(6176, ts.DiagnosticCategory.Message, "Additional_Checks_6176", "Additional Checks"),
-        Experimental_Options: diag(6177, ts.DiagnosticCategory.Message, "Experimental_Options_6177", "Experimental Options"),
-        Advanced_Options: diag(6178, ts.DiagnosticCategory.Message, "Advanced_Options_6178", "Advanced Options"),
         Provide_full_support_for_iterables_in_for_of_spread_and_destructuring_when_targeting_ES5_or_ES3: diag(6179, ts.DiagnosticCategory.Message, "Provide_full_support_for_iterables_in_for_of_spread_and_destructuring_when_targeting_ES5_or_ES3_6179", "Provide full support for iterables in 'for-of', spread, and destructuring when targeting 'ES5' or 'ES3'."),
         Enable_all_strict_type_checking_options: diag(6180, ts.DiagnosticCategory.Message, "Enable_all_strict_type_checking_options_6180", "Enable all strict type-checking options."),
         List_of_language_service_plugins: diag(6181, ts.DiagnosticCategory.Message, "List_of_language_service_plugins_6181", "List of language service plugins."),
         Scoped_package_detected_looking_in_0: diag(6182, ts.DiagnosticCategory.Message, "Scoped_package_detected_looking_in_0_6182", "Scoped package detected, looking in '{0}'"),
-        Reusing_resolution_of_module_0_to_file_1_from_old_program: diag(6183, ts.DiagnosticCategory.Message, "Reusing_resolution_of_module_0_to_file_1_from_old_program_6183", "Reusing resolution of module '{0}' to file '{1}' from old program."),
-        Reusing_module_resolutions_originating_in_0_since_resolutions_are_unchanged_from_old_program: diag(6184, ts.DiagnosticCategory.Message, "Reusing_module_resolutions_originating_in_0_since_resolutions_are_unchanged_from_old_program_6184", "Reusing module resolutions originating in '{0}' since resolutions are unchanged from old program."),
-        Disable_strict_checking_of_generic_signatures_in_function_types: diag(6185, ts.DiagnosticCategory.Message, "Disable_strict_checking_of_generic_signatures_in_function_types_6185", "Disable strict checking of generic signatures in function types."),
+        Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2: diag(6183, ts.DiagnosticCategory.Message, "Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2_6183", "Reusing resolution of module '{0}' from '{1}' of old program, it was successfully resolved to '{2}'."),
+        Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2_with_Package_ID_3: diag(6184, ts.DiagnosticCategory.Message, "Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2_with_Package__6184", "Reusing resolution of module '{0}' from '{1}' of old program, it was successfully resolved to '{2}' with Package ID '{3}'."),
         Enable_strict_checking_of_function_types: diag(6186, ts.DiagnosticCategory.Message, "Enable_strict_checking_of_function_types_6186", "Enable strict checking of function types."),
         Enable_strict_checking_of_property_initialization_in_classes: diag(6187, ts.DiagnosticCategory.Message, "Enable_strict_checking_of_property_initialization_in_classes_6187", "Enable strict checking of property initialization in classes."),
         Numeric_separators_are_not_allowed_here: diag(6188, ts.DiagnosticCategory.Error, "Numeric_separators_are_not_allowed_here_6188", "Numeric separators are not allowed here."),
@@ -8871,7 +9008,6 @@
         Specify_strategy_for_watching_file_Colon_FixedPollingInterval_default_PriorityPollingInterval_DynamicPriorityPolling_FixedChunkSizePolling_UseFsEvents_UseFsEventsOnParentDirectory: diag(6225, ts.DiagnosticCategory.Message, "Specify_strategy_for_watching_file_Colon_FixedPollingInterval_default_PriorityPollingInterval_Dynami_6225", "Specify strategy for watching file: 'FixedPollingInterval' (default), 'PriorityPollingInterval', 'DynamicPriorityPolling', 'FixedChunkSizePolling', 'UseFsEvents', 'UseFsEventsOnParentDirectory'."),
         Specify_strategy_for_watching_directory_on_platforms_that_don_t_support_recursive_watching_natively_Colon_UseFsEvents_default_FixedPollingInterval_DynamicPriorityPolling_FixedChunkSizePolling: diag(6226, ts.DiagnosticCategory.Message, "Specify_strategy_for_watching_directory_on_platforms_that_don_t_support_recursive_watching_natively__6226", "Specify strategy for watching directory on platforms that don't support recursive watching natively: 'UseFsEvents' (default), 'FixedPollingInterval', 'DynamicPriorityPolling', 'FixedChunkSizePolling'."),
         Specify_strategy_for_creating_a_polling_watch_when_it_fails_to_create_using_file_system_events_Colon_FixedInterval_default_PriorityInterval_DynamicPriority_FixedChunkSize: diag(6227, ts.DiagnosticCategory.Message, "Specify_strategy_for_creating_a_polling_watch_when_it_fails_to_create_using_file_system_events_Colon_6227", "Specify strategy for creating a polling watch when it fails to create using file system events: 'FixedInterval' (default), 'PriorityInterval', 'DynamicPriority', 'FixedChunkSize'."),
-        Synchronously_call_callbacks_and_update_the_state_of_directory_watchers_on_platforms_that_don_t_support_recursive_watching_natively: diag(6228, ts.DiagnosticCategory.Message, "Synchronously_call_callbacks_and_update_the_state_of_directory_watchers_on_platforms_that_don_t_supp_6228", "Synchronously call callbacks and update the state of directory watchers on platforms that don't support recursive watching natively."),
         Tag_0_expects_at_least_1_arguments_but_the_JSX_factory_2_provides_at_most_3: diag(6229, ts.DiagnosticCategory.Error, "Tag_0_expects_at_least_1_arguments_but_the_JSX_factory_2_provides_at_most_3_6229", "Tag '{0}' expects at least '{1}' arguments, but the JSX factory '{2}' provides at most '{3}'."),
         Option_0_can_only_be_specified_in_tsconfig_json_file_or_set_to_false_or_null_on_command_line: diag(6230, ts.DiagnosticCategory.Error, "Option_0_can_only_be_specified_in_tsconfig_json_file_or_set_to_false_or_null_on_command_line_6230", "Option '{0}' can only be specified in 'tsconfig.json' file or set to 'false' or 'null' on command line."),
         Could_not_resolve_the_path_0_with_the_extensions_Colon_1: diag(6231, ts.DiagnosticCategory.Error, "Could_not_resolve_the_path_0_with_the_extensions_Colon_1_6231", "Could not resolve the path '{0}' with the extensions: {1}."),
@@ -8886,6 +9022,21 @@
         File_0_does_not_exist_according_to_earlier_cached_lookups: diag(6240, ts.DiagnosticCategory.Message, "File_0_does_not_exist_according_to_earlier_cached_lookups_6240", "File '{0}' does not exist according to earlier cached lookups."),
         Resolution_for_type_reference_directive_0_was_found_in_cache_from_location_1: diag(6241, ts.DiagnosticCategory.Message, "Resolution_for_type_reference_directive_0_was_found_in_cache_from_location_1_6241", "Resolution for type reference directive '{0}' was found in cache from location '{1}'."),
         Resolving_type_reference_directive_0_containing_file_1: diag(6242, ts.DiagnosticCategory.Message, "Resolving_type_reference_directive_0_containing_file_1_6242", "======== Resolving type reference directive '{0}', containing file '{1}'. ========"),
+        Interpret_optional_property_types_as_written_rather_than_adding_undefined: diag(6243, ts.DiagnosticCategory.Message, "Interpret_optional_property_types_as_written_rather_than_adding_undefined_6243", "Interpret optional property types as written, rather than adding 'undefined'."),
+        Modules: diag(6244, ts.DiagnosticCategory.Message, "Modules_6244", "Modules"),
+        File_Management: diag(6245, ts.DiagnosticCategory.Message, "File_Management_6245", "File Management"),
+        Emit: diag(6246, ts.DiagnosticCategory.Message, "Emit_6246", "Emit"),
+        JavaScript_Support: diag(6247, ts.DiagnosticCategory.Message, "JavaScript_Support_6247", "JavaScript Support"),
+        Type_Checking: diag(6248, ts.DiagnosticCategory.Message, "Type_Checking_6248", "Type Checking"),
+        Editor_Support: diag(6249, ts.DiagnosticCategory.Message, "Editor_Support_6249", "Editor Support"),
+        Watch_and_Build_Modes: diag(6250, ts.DiagnosticCategory.Message, "Watch_and_Build_Modes_6250", "Watch and Build Modes"),
+        Compiler_Diagnostics: diag(6251, ts.DiagnosticCategory.Message, "Compiler_Diagnostics_6251", "Compiler Diagnostics"),
+        Interop_Constraints: diag(6252, ts.DiagnosticCategory.Message, "Interop_Constraints_6252", "Interop Constraints"),
+        Backwards_Compatibility: diag(6253, ts.DiagnosticCategory.Message, "Backwards_Compatibility_6253", "Backwards Compatibility"),
+        Language_and_Environment: diag(6254, ts.DiagnosticCategory.Message, "Language_and_Environment_6254", "Language and Environment"),
+        Projects: diag(6255, ts.DiagnosticCategory.Message, "Projects_6255", "Projects"),
+        Output_Formatting: diag(6256, ts.DiagnosticCategory.Message, "Output_Formatting_6256", "Output Formatting"),
+        Completeness: diag(6257, ts.DiagnosticCategory.Message, "Completeness_6257", "Completeness"),
         Projects_to_reference: diag(6300, ts.DiagnosticCategory.Message, "Projects_to_reference_6300", "Projects to reference"),
         Enable_project_compilation: diag(6302, ts.DiagnosticCategory.Message, "Enable_project_compilation_6302", "Enable project compilation"),
         Composite_projects_may_not_disable_declaration_emit: diag(6304, ts.DiagnosticCategory.Error, "Composite_projects_may_not_disable_declaration_emit_6304", "Composite projects may not disable declaration emit."),
@@ -8911,9 +9062,7 @@
         Project_0_can_t_be_built_because_its_dependency_1_has_errors: diag(6363, ts.DiagnosticCategory.Message, "Project_0_can_t_be_built_because_its_dependency_1_has_errors_6363", "Project '{0}' can't be built because its dependency '{1}' has errors"),
         Build_one_or_more_projects_and_their_dependencies_if_out_of_date: diag(6364, ts.DiagnosticCategory.Message, "Build_one_or_more_projects_and_their_dependencies_if_out_of_date_6364", "Build one or more projects and their dependencies, if out of date"),
         Delete_the_outputs_of_all_projects: diag(6365, ts.DiagnosticCategory.Message, "Delete_the_outputs_of_all_projects_6365", "Delete the outputs of all projects"),
-        Enable_verbose_logging: diag(6366, ts.DiagnosticCategory.Message, "Enable_verbose_logging_6366", "Enable verbose logging"),
         Show_what_would_be_built_or_deleted_if_specified_with_clean: diag(6367, ts.DiagnosticCategory.Message, "Show_what_would_be_built_or_deleted_if_specified_with_clean_6367", "Show what would be built (or deleted, if specified with '--clean')"),
-        Build_all_projects_including_those_that_appear_to_be_up_to_date: diag(6368, ts.DiagnosticCategory.Message, "Build_all_projects_including_those_that_appear_to_be_up_to_date_6368", "Build all projects, including those that appear to be up to date"),
         Option_build_must_be_the_first_command_line_argument: diag(6369, ts.DiagnosticCategory.Error, "Option_build_must_be_the_first_command_line_argument_6369", "Option '--build' must be the first command line argument."),
         Options_0_and_1_cannot_be_combined: diag(6370, ts.DiagnosticCategory.Error, "Options_0_and_1_cannot_be_combined_6370", "Options '{0}' and '{1}' cannot be combined."),
         Updating_unchanged_output_timestamps_of_project_0: diag(6371, ts.DiagnosticCategory.Message, "Updating_unchanged_output_timestamps_of_project_0_6371", "Updating unchanged output timestamps of project '{0}'..."),
@@ -8934,15 +9083,167 @@
         Performance_timings_for_diagnostics_or_extendedDiagnostics_are_not_available_in_this_session_A_native_implementation_of_the_Web_Performance_API_could_not_be_found: diag(6386, ts.DiagnosticCategory.Message, "Performance_timings_for_diagnostics_or_extendedDiagnostics_are_not_available_in_this_session_A_nativ_6386", "Performance timings for '--diagnostics' or '--extendedDiagnostics' are not available in this session. A native implementation of the Web Performance API could not be found."),
         The_signature_0_of_1_is_deprecated: diag(6387, ts.DiagnosticCategory.Suggestion, "The_signature_0_of_1_is_deprecated_6387", "The signature '{0}' of '{1}' is deprecated.", /*reportsUnnecessary*/ undefined, /*elidedInCompatabilityPyramid*/ undefined, /*reportsDeprecated*/ true),
         Project_0_is_being_forcibly_rebuilt: diag(6388, ts.DiagnosticCategory.Message, "Project_0_is_being_forcibly_rebuilt_6388", "Project '{0}' is being forcibly rebuilt"),
+        Reusing_resolution_of_module_0_from_1_of_old_program_it_was_not_resolved: diag(6389, ts.DiagnosticCategory.Message, "Reusing_resolution_of_module_0_from_1_of_old_program_it_was_not_resolved_6389", "Reusing resolution of module '{0}' from '{1}' of old program, it was not resolved."),
+        Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved_to_2: diag(6390, ts.DiagnosticCategory.Message, "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved__6390", "Reusing resolution of type reference directive '{0}' from '{1}' of old program, it was successfully resolved to '{2}'."),
+        Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved_to_2_with_Package_ID_3: diag(6391, ts.DiagnosticCategory.Message, "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved__6391", "Reusing resolution of type reference directive '{0}' from '{1}' of old program, it was successfully resolved to '{2}' with Package ID '{3}'."),
+        Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_not_resolved: diag(6392, ts.DiagnosticCategory.Message, "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_not_resolved_6392", "Reusing resolution of type reference directive '{0}' from '{1}' of old program, it was not resolved."),
+        Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_3: diag(6393, ts.DiagnosticCategory.Message, "Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_6393", "Reusing resolution of module '{0}' from '{1}' found in cache from location '{2}', it was successfully resolved to '{3}'."),
+        Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_3_with_Package_ID_4: diag(6394, ts.DiagnosticCategory.Message, "Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_6394", "Reusing resolution of module '{0}' from '{1}' found in cache from location '{2}', it was successfully resolved to '{3}' with Package ID '{4}'."),
+        Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_not_resolved: diag(6395, ts.DiagnosticCategory.Message, "Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_not_resolved_6395", "Reusing resolution of module '{0}' from '{1}' found in cache from location '{2}', it was not resolved."),
+        Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_3: diag(6396, ts.DiagnosticCategory.Message, "Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_succes_6396", "Reusing resolution of type reference directive '{0}' from '{1}' found in cache from location '{2}', it was successfully resolved to '{3}'."),
+        Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_3_with_Package_ID_4: diag(6397, ts.DiagnosticCategory.Message, "Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_succes_6397", "Reusing resolution of type reference directive '{0}' from '{1}' found in cache from location '{2}', it was successfully resolved to '{3}' with Package ID '{4}'."),
+        Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_not_resolved: diag(6398, ts.DiagnosticCategory.Message, "Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_not_re_6398", "Reusing resolution of type reference directive '{0}' from '{1}' found in cache from location '{2}', it was not resolved."),
         The_expected_type_comes_from_property_0_which_is_declared_here_on_type_1: diag(6500, ts.DiagnosticCategory.Message, "The_expected_type_comes_from_property_0_which_is_declared_here_on_type_1_6500", "The expected type comes from property '{0}' which is declared here on type '{1}'"),
         The_expected_type_comes_from_this_index_signature: diag(6501, ts.DiagnosticCategory.Message, "The_expected_type_comes_from_this_index_signature_6501", "The expected type comes from this index signature."),
         The_expected_type_comes_from_the_return_type_of_this_signature: diag(6502, ts.DiagnosticCategory.Message, "The_expected_type_comes_from_the_return_type_of_this_signature_6502", "The expected type comes from the return type of this signature."),
         Print_names_of_files_that_are_part_of_the_compilation_and_then_stop_processing: diag(6503, ts.DiagnosticCategory.Message, "Print_names_of_files_that_are_part_of_the_compilation_and_then_stop_processing_6503", "Print names of files that are part of the compilation and then stop processing."),
         File_0_is_a_JavaScript_file_Did_you_mean_to_enable_the_allowJs_option: diag(6504, ts.DiagnosticCategory.Error, "File_0_is_a_JavaScript_file_Did_you_mean_to_enable_the_allowJs_option_6504", "File '{0}' is a JavaScript file. Did you mean to enable the 'allowJs' option?"),
         Print_names_of_files_and_the_reason_they_are_part_of_the_compilation: diag(6505, ts.DiagnosticCategory.Message, "Print_names_of_files_and_the_reason_they_are_part_of_the_compilation_6505", "Print names of files and the reason they are part of the compilation."),
-        Include_undefined_in_index_signature_results: diag(6800, ts.DiagnosticCategory.Message, "Include_undefined_in_index_signature_results_6800", "Include 'undefined' in index signature results"),
-        Ensure_overriding_members_in_derived_classes_are_marked_with_an_override_modifier: diag(6801, ts.DiagnosticCategory.Message, "Ensure_overriding_members_in_derived_classes_are_marked_with_an_override_modifier_6801", "Ensure overriding members in derived classes are marked with an 'override' modifier."),
-        Require_undeclared_properties_from_index_signatures_to_use_element_accesses: diag(6802, ts.DiagnosticCategory.Message, "Require_undeclared_properties_from_index_signatures_to_use_element_accesses_6802", "Require undeclared properties from index signatures to use element accesses."),
+        Consider_adding_a_declare_modifier_to_this_class: diag(6506, ts.DiagnosticCategory.Message, "Consider_adding_a_declare_modifier_to_this_class_6506", "Consider adding a 'declare' modifier to this class."),
+        Allow_JavaScript_files_to_be_a_part_of_your_program_Use_the_checkJS_option_to_get_errors_from_these_files: diag(6600, ts.DiagnosticCategory.Message, "Allow_JavaScript_files_to_be_a_part_of_your_program_Use_the_checkJS_option_to_get_errors_from_these__6600", "Allow JavaScript files to be a part of your program. Use the `checkJS` option to get errors from these files."),
+        Allow_import_x_from_y_when_a_module_doesn_t_have_a_default_export: diag(6601, ts.DiagnosticCategory.Message, "Allow_import_x_from_y_when_a_module_doesn_t_have_a_default_export_6601", "Allow 'import x from y' when a module doesn't have a default export."),
+        Allow_accessing_UMD_globals_from_modules: diag(6602, ts.DiagnosticCategory.Message, "Allow_accessing_UMD_globals_from_modules_6602", "Allow accessing UMD globals from modules."),
+        Disable_error_reporting_for_unreachable_code: diag(6603, ts.DiagnosticCategory.Message, "Disable_error_reporting_for_unreachable_code_6603", "Disable error reporting for unreachable code."),
+        Disable_error_reporting_for_unused_labels: diag(6604, ts.DiagnosticCategory.Message, "Disable_error_reporting_for_unused_labels_6604", "Disable error reporting for unused labels."),
+        Ensure_use_strict_is_always_emitted: diag(6605, ts.DiagnosticCategory.Message, "Ensure_use_strict_is_always_emitted_6605", "Ensure 'use strict' is always emitted."),
+        Have_recompiles_in_projects_that_use_incremental_and_watch_mode_assume_that_changes_within_a_file_will_only_affect_files_directly_depending_on_it: diag(6606, ts.DiagnosticCategory.Message, "Have_recompiles_in_projects_that_use_incremental_and_watch_mode_assume_that_changes_within_a_file_wi_6606", "Have recompiles in projects that use `incremental` and `watch` mode assume that changes within a file will only affect files directly depending on it."),
+        Specify_the_base_directory_to_resolve_non_relative_module_names: diag(6607, ts.DiagnosticCategory.Message, "Specify_the_base_directory_to_resolve_non_relative_module_names_6607", "Specify the base directory to resolve non-relative module names."),
+        No_longer_supported_In_early_versions_manually_set_the_text_encoding_for_reading_files: diag(6608, ts.DiagnosticCategory.Message, "No_longer_supported_In_early_versions_manually_set_the_text_encoding_for_reading_files_6608", "No longer supported. In early versions, manually set the text encoding for reading files."),
+        Enable_error_reporting_in_type_checked_JavaScript_files: diag(6609, ts.DiagnosticCategory.Message, "Enable_error_reporting_in_type_checked_JavaScript_files_6609", "Enable error reporting in type-checked JavaScript files."),
+        Enable_constraints_that_allow_a_TypeScript_project_to_be_used_with_project_references: diag(6611, ts.DiagnosticCategory.Message, "Enable_constraints_that_allow_a_TypeScript_project_to_be_used_with_project_references_6611", "Enable constraints that allow a TypeScript project to be used with project references."),
+        Generate_d_ts_files_from_TypeScript_and_JavaScript_files_in_your_project: diag(6612, ts.DiagnosticCategory.Message, "Generate_d_ts_files_from_TypeScript_and_JavaScript_files_in_your_project_6612", "Generate .d.ts files from TypeScript and JavaScript files in your project."),
+        Specify_the_output_directory_for_generated_declaration_files: diag(6613, ts.DiagnosticCategory.Message, "Specify_the_output_directory_for_generated_declaration_files_6613", "Specify the output directory for generated declaration files."),
+        Create_sourcemaps_for_d_ts_files: diag(6614, ts.DiagnosticCategory.Message, "Create_sourcemaps_for_d_ts_files_6614", "Create sourcemaps for d.ts files."),
+        Output_compiler_performance_information_after_building: diag(6615, ts.DiagnosticCategory.Message, "Output_compiler_performance_information_after_building_6615", "Output compiler performance information after building."),
+        Disables_inference_for_type_acquisition_by_looking_at_filenames_in_a_project: diag(6616, ts.DiagnosticCategory.Message, "Disables_inference_for_type_acquisition_by_looking_at_filenames_in_a_project_6616", "Disables inference for type acquisition by looking at filenames in a project."),
+        Reduce_the_number_of_projects_loaded_automatically_by_TypeScript: diag(6617, ts.DiagnosticCategory.Message, "Reduce_the_number_of_projects_loaded_automatically_by_TypeScript_6617", "Reduce the number of projects loaded automatically by TypeScript."),
+        Remove_the_20mb_cap_on_total_source_code_size_for_JavaScript_files_in_the_TypeScript_language_server: diag(6618, ts.DiagnosticCategory.Message, "Remove_the_20mb_cap_on_total_source_code_size_for_JavaScript_files_in_the_TypeScript_language_server_6618", "Remove the 20mb cap on total source code size for JavaScript files in the TypeScript language server."),
+        Opt_a_project_out_of_multi_project_reference_checking_when_editing: diag(6619, ts.DiagnosticCategory.Message, "Opt_a_project_out_of_multi_project_reference_checking_when_editing_6619", "Opt a project out of multi-project reference checking when editing."),
+        Disable_preferring_source_files_instead_of_declaration_files_when_referencing_composite_projects: diag(6620, ts.DiagnosticCategory.Message, "Disable_preferring_source_files_instead_of_declaration_files_when_referencing_composite_projects_6620", "Disable preferring source files instead of declaration files when referencing composite projects"),
+        Emit_more_compliant_but_verbose_and_less_performant_JavaScript_for_iteration: diag(6621, ts.DiagnosticCategory.Message, "Emit_more_compliant_but_verbose_and_less_performant_JavaScript_for_iteration_6621", "Emit more compliant, but verbose and less performant JavaScript for iteration."),
+        Only_output_d_ts_files_and_not_JavaScript_files: diag(6623, ts.DiagnosticCategory.Message, "Only_output_d_ts_files_and_not_JavaScript_files_6623", "Only output d.ts files and not JavaScript files."),
+        Emit_design_type_metadata_for_decorated_declarations_in_source_files: diag(6624, ts.DiagnosticCategory.Message, "Emit_design_type_metadata_for_decorated_declarations_in_source_files_6624", "Emit design-type metadata for decorated declarations in source files."),
+        Disable_the_type_acquisition_for_JavaScript_projects: diag(6625, ts.DiagnosticCategory.Message, "Disable_the_type_acquisition_for_JavaScript_projects_6625", "Disable the type acquisition for JavaScript projects"),
+        Emit_additional_JavaScript_to_ease_support_for_importing_CommonJS_modules_This_enables_allowSyntheticDefaultImports_for_type_compatibility: diag(6626, ts.DiagnosticCategory.Message, "Emit_additional_JavaScript_to_ease_support_for_importing_CommonJS_modules_This_enables_allowSyntheti_6626", "Emit additional JavaScript to ease support for importing CommonJS modules. This enables `allowSyntheticDefaultImports` for type compatibility."),
+        Filters_results_from_the_include_option: diag(6627, ts.DiagnosticCategory.Message, "Filters_results_from_the_include_option_6627", "Filters results from the `include` option."),
+        Remove_a_list_of_directories_from_the_watch_process: diag(6628, ts.DiagnosticCategory.Message, "Remove_a_list_of_directories_from_the_watch_process_6628", "Remove a list of directories from the watch process."),
+        Remove_a_list_of_files_from_the_watch_mode_s_processing: diag(6629, ts.DiagnosticCategory.Message, "Remove_a_list_of_files_from_the_watch_mode_s_processing_6629", "Remove a list of files from the watch mode's processing."),
+        Enable_experimental_support_for_TC39_stage_2_draft_decorators: diag(6630, ts.DiagnosticCategory.Message, "Enable_experimental_support_for_TC39_stage_2_draft_decorators_6630", "Enable experimental support for TC39 stage 2 draft decorators."),
+        Print_files_read_during_the_compilation_including_why_it_was_included: diag(6631, ts.DiagnosticCategory.Message, "Print_files_read_during_the_compilation_including_why_it_was_included_6631", "Print files read during the compilation including why it was included."),
+        Output_more_detailed_compiler_performance_information_after_building: diag(6632, ts.DiagnosticCategory.Message, "Output_more_detailed_compiler_performance_information_after_building_6632", "Output more detailed compiler performance information after building."),
+        Specify_one_or_more_path_or_node_module_references_to_base_configuration_files_from_which_settings_are_inherited: diag(6633, ts.DiagnosticCategory.Message, "Specify_one_or_more_path_or_node_module_references_to_base_configuration_files_from_which_settings_a_6633", "Specify one or more path or node module references to base configuration files from which settings are inherited."),
+        Specify_what_approach_the_watcher_should_use_if_the_system_runs_out_of_native_file_watchers: diag(6634, ts.DiagnosticCategory.Message, "Specify_what_approach_the_watcher_should_use_if_the_system_runs_out_of_native_file_watchers_6634", "Specify what approach the watcher should use if the system runs out of native file watchers."),
+        Include_a_list_of_files_This_does_not_support_glob_patterns_as_opposed_to_include: diag(6635, ts.DiagnosticCategory.Message, "Include_a_list_of_files_This_does_not_support_glob_patterns_as_opposed_to_include_6635", "Include a list of files. This does not support glob patterns, as opposed to `include`."),
+        Build_all_projects_including_those_that_appear_to_be_up_to_date: diag(6636, ts.DiagnosticCategory.Message, "Build_all_projects_including_those_that_appear_to_be_up_to_date_6636", "Build all projects, including those that appear to be up to date"),
+        Ensure_that_casing_is_correct_in_imports: diag(6637, ts.DiagnosticCategory.Message, "Ensure_that_casing_is_correct_in_imports_6637", "Ensure that casing is correct in imports."),
+        Emit_a_v8_CPU_profile_of_the_compiler_run_for_debugging: diag(6638, ts.DiagnosticCategory.Message, "Emit_a_v8_CPU_profile_of_the_compiler_run_for_debugging_6638", "Emit a v8 CPU profile of the compiler run for debugging."),
+        Allow_importing_helper_functions_from_tslib_once_per_project_instead_of_including_them_per_file: diag(6639, ts.DiagnosticCategory.Message, "Allow_importing_helper_functions_from_tslib_once_per_project_instead_of_including_them_per_file_6639", "Allow importing helper functions from tslib once per project, instead of including them per-file."),
+        Specify_a_list_of_glob_patterns_that_match_files_to_be_included_in_compilation: diag(6641, ts.DiagnosticCategory.Message, "Specify_a_list_of_glob_patterns_that_match_files_to_be_included_in_compilation_6641", "Specify a list of glob patterns that match files to be included in compilation."),
+        Save_tsbuildinfo_files_to_allow_for_incremental_compilation_of_projects: diag(6642, ts.DiagnosticCategory.Message, "Save_tsbuildinfo_files_to_allow_for_incremental_compilation_of_projects_6642", "Save .tsbuildinfo files to allow for incremental compilation of projects."),
+        Include_sourcemap_files_inside_the_emitted_JavaScript: diag(6643, ts.DiagnosticCategory.Message, "Include_sourcemap_files_inside_the_emitted_JavaScript_6643", "Include sourcemap files inside the emitted JavaScript."),
+        Include_source_code_in_the_sourcemaps_inside_the_emitted_JavaScript: diag(6644, ts.DiagnosticCategory.Message, "Include_source_code_in_the_sourcemaps_inside_the_emitted_JavaScript_6644", "Include source code in the sourcemaps inside the emitted JavaScript."),
+        Ensure_that_each_file_can_be_safely_transpiled_without_relying_on_other_imports: diag(6645, ts.DiagnosticCategory.Message, "Ensure_that_each_file_can_be_safely_transpiled_without_relying_on_other_imports_6645", "Ensure that each file can be safely transpiled without relying on other imports."),
+        Specify_what_JSX_code_is_generated: diag(6646, ts.DiagnosticCategory.Message, "Specify_what_JSX_code_is_generated_6646", "Specify what JSX code is generated."),
+        Specify_the_JSX_factory_function_used_when_targeting_React_JSX_emit_e_g_React_createElement_or_h: diag(6647, ts.DiagnosticCategory.Message, "Specify_the_JSX_factory_function_used_when_targeting_React_JSX_emit_e_g_React_createElement_or_h_6647", "Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'"),
+        Specify_the_JSX_Fragment_reference_used_for_fragments_when_targeting_React_JSX_emit_e_g_React_Fragment_or_Fragment: diag(6648, ts.DiagnosticCategory.Message, "Specify_the_JSX_Fragment_reference_used_for_fragments_when_targeting_React_JSX_emit_e_g_React_Fragme_6648", "Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'."),
+        Specify_module_specifier_used_to_import_the_JSX_factory_functions_when_using_jsx_Colon_react_jsx_Asterisk: diag(6649, ts.DiagnosticCategory.Message, "Specify_module_specifier_used_to_import_the_JSX_factory_functions_when_using_jsx_Colon_react_jsx_Ast_6649", "Specify module specifier used to import the JSX factory functions when using `jsx: react-jsx*`.`"),
+        Make_keyof_only_return_strings_instead_of_string_numbers_or_symbols_Legacy_option: diag(6650, ts.DiagnosticCategory.Message, "Make_keyof_only_return_strings_instead_of_string_numbers_or_symbols_Legacy_option_6650", "Make keyof only return strings instead of string, numbers or symbols. Legacy option."),
+        Specify_a_set_of_bundled_library_declaration_files_that_describe_the_target_runtime_environment: diag(6651, ts.DiagnosticCategory.Message, "Specify_a_set_of_bundled_library_declaration_files_that_describe_the_target_runtime_environment_6651", "Specify a set of bundled library declaration files that describe the target runtime environment."),
+        Print_the_names_of_emitted_files_after_a_compilation: diag(6652, ts.DiagnosticCategory.Message, "Print_the_names_of_emitted_files_after_a_compilation_6652", "Print the names of emitted files after a compilation."),
+        Print_all_of_the_files_read_during_the_compilation: diag(6653, ts.DiagnosticCategory.Message, "Print_all_of_the_files_read_during_the_compilation_6653", "Print all of the files read during the compilation."),
+        Set_the_language_of_the_messaging_from_TypeScript_This_does_not_affect_emit: diag(6654, ts.DiagnosticCategory.Message, "Set_the_language_of_the_messaging_from_TypeScript_This_does_not_affect_emit_6654", "Set the language of the messaging from TypeScript. This does not affect emit."),
+        Specify_the_maximum_folder_depth_used_for_checking_JavaScript_files_from_node_modules_Only_applicable_with_allowJs: diag(6656, ts.DiagnosticCategory.Message, "Specify_the_maximum_folder_depth_used_for_checking_JavaScript_files_from_node_modules_Only_applicabl_6656", "Specify the maximum folder depth used for checking JavaScript files from `node_modules`. Only applicable with `allowJs`."),
+        Specify_what_module_code_is_generated: diag(6657, ts.DiagnosticCategory.Message, "Specify_what_module_code_is_generated_6657", "Specify what module code is generated."),
+        Specify_how_TypeScript_looks_up_a_file_from_a_given_module_specifier: diag(6658, ts.DiagnosticCategory.Message, "Specify_how_TypeScript_looks_up_a_file_from_a_given_module_specifier_6658", "Specify how TypeScript looks up a file from a given module specifier."),
+        Set_the_newline_character_for_emitting_files: diag(6659, ts.DiagnosticCategory.Message, "Set_the_newline_character_for_emitting_files_6659", "Set the newline character for emitting files."),
+        Disable_emitting_files_from_a_compilation: diag(6660, ts.DiagnosticCategory.Message, "Disable_emitting_files_from_a_compilation_6660", "Disable emitting files from a compilation."),
+        Disable_generating_custom_helper_functions_like_extends_in_compiled_output: diag(6661, ts.DiagnosticCategory.Message, "Disable_generating_custom_helper_functions_like_extends_in_compiled_output_6661", "Disable generating custom helper functions like `__extends` in compiled output."),
+        Disable_emitting_files_if_any_type_checking_errors_are_reported: diag(6662, ts.DiagnosticCategory.Message, "Disable_emitting_files_if_any_type_checking_errors_are_reported_6662", "Disable emitting files if any type checking errors are reported."),
+        Disable_truncating_types_in_error_messages: diag(6663, ts.DiagnosticCategory.Message, "Disable_truncating_types_in_error_messages_6663", "Disable truncating types in error messages."),
+        Enable_error_reporting_for_fallthrough_cases_in_switch_statements: diag(6664, ts.DiagnosticCategory.Message, "Enable_error_reporting_for_fallthrough_cases_in_switch_statements_6664", "Enable error reporting for fallthrough cases in switch statements."),
+        Enable_error_reporting_for_expressions_and_declarations_with_an_implied_any_type: diag(6665, ts.DiagnosticCategory.Message, "Enable_error_reporting_for_expressions_and_declarations_with_an_implied_any_type_6665", "Enable error reporting for expressions and declarations with an implied `any` type.."),
+        Ensure_overriding_members_in_derived_classes_are_marked_with_an_override_modifier: diag(6666, ts.DiagnosticCategory.Message, "Ensure_overriding_members_in_derived_classes_are_marked_with_an_override_modifier_6666", "Ensure overriding members in derived classes are marked with an override modifier."),
+        Enable_error_reporting_for_codepaths_that_do_not_explicitly_return_in_a_function: diag(6667, ts.DiagnosticCategory.Message, "Enable_error_reporting_for_codepaths_that_do_not_explicitly_return_in_a_function_6667", "Enable error reporting for codepaths that do not explicitly return in a function."),
+        Enable_error_reporting_when_this_is_given_the_type_any: diag(6668, ts.DiagnosticCategory.Message, "Enable_error_reporting_when_this_is_given_the_type_any_6668", "Enable error reporting when `this` is given the type `any`."),
+        Disable_adding_use_strict_directives_in_emitted_JavaScript_files: diag(6669, ts.DiagnosticCategory.Message, "Disable_adding_use_strict_directives_in_emitted_JavaScript_files_6669", "Disable adding 'use strict' directives in emitted JavaScript files."),
+        Disable_including_any_library_files_including_the_default_lib_d_ts: diag(6670, ts.DiagnosticCategory.Message, "Disable_including_any_library_files_including_the_default_lib_d_ts_6670", "Disable including any library files, including the default lib.d.ts."),
+        Enforces_using_indexed_accessors_for_keys_declared_using_an_indexed_type: diag(6671, ts.DiagnosticCategory.Message, "Enforces_using_indexed_accessors_for_keys_declared_using_an_indexed_type_6671", "Enforces using indexed accessors for keys declared using an indexed type"),
+        Disallow_import_s_require_s_or_reference_s_from_expanding_the_number_of_files_TypeScript_should_add_to_a_project: diag(6672, ts.DiagnosticCategory.Message, "Disallow_import_s_require_s_or_reference_s_from_expanding_the_number_of_files_TypeScript_should_add__6672", "Disallow `import`s, `require`s or `<reference>`s from expanding the number of files TypeScript should add to a project."),
+        Disable_strict_checking_of_generic_signatures_in_function_types: diag(6673, ts.DiagnosticCategory.Message, "Disable_strict_checking_of_generic_signatures_in_function_types_6673", "Disable strict checking of generic signatures in function types."),
+        Add_undefined_to_a_type_when_accessed_using_an_index: diag(6674, ts.DiagnosticCategory.Message, "Add_undefined_to_a_type_when_accessed_using_an_index_6674", "Add `undefined` to a type when accessed using an index."),
+        Enable_error_reporting_when_a_local_variables_aren_t_read: diag(6675, ts.DiagnosticCategory.Message, "Enable_error_reporting_when_a_local_variables_aren_t_read_6675", "Enable error reporting when a local variables aren't read."),
+        Raise_an_error_when_a_function_parameter_isn_t_read: diag(6676, ts.DiagnosticCategory.Message, "Raise_an_error_when_a_function_parameter_isn_t_read_6676", "Raise an error when a function parameter isn't read"),
+        Deprecated_setting_Use_outFile_instead: diag(6677, ts.DiagnosticCategory.Message, "Deprecated_setting_Use_outFile_instead_6677", "Deprecated setting. Use `outFile` instead."),
+        Specify_an_output_folder_for_all_emitted_files: diag(6678, ts.DiagnosticCategory.Message, "Specify_an_output_folder_for_all_emitted_files_6678", "Specify an output folder for all emitted files."),
+        Specify_a_file_that_bundles_all_outputs_into_one_JavaScript_file_If_declaration_is_true_also_designates_a_file_that_bundles_all_d_ts_output: diag(6679, ts.DiagnosticCategory.Message, "Specify_a_file_that_bundles_all_outputs_into_one_JavaScript_file_If_declaration_is_true_also_designa_6679", "Specify a file that bundles all outputs into one JavaScript file. If `declaration` is true, also designates a file that bundles all .d.ts output."),
+        Specify_a_set_of_entries_that_re_map_imports_to_additional_lookup_locations: diag(6680, ts.DiagnosticCategory.Message, "Specify_a_set_of_entries_that_re_map_imports_to_additional_lookup_locations_6680", "Specify a set of entries that re-map imports to additional lookup locations."),
+        Specify_a_list_of_language_service_plugins_to_include: diag(6681, ts.DiagnosticCategory.Message, "Specify_a_list_of_language_service_plugins_to_include_6681", "Specify a list of language service plugins to include."),
+        Disable_erasing_const_enum_declarations_in_generated_code: diag(6682, ts.DiagnosticCategory.Message, "Disable_erasing_const_enum_declarations_in_generated_code_6682", "Disable erasing `const enum` declarations in generated code."),
+        Disable_resolving_symlinks_to_their_realpath_This_correlates_to_the_same_flag_in_node: diag(6683, ts.DiagnosticCategory.Message, "Disable_resolving_symlinks_to_their_realpath_This_correlates_to_the_same_flag_in_node_6683", "Disable resolving symlinks to their realpath. This correlates to the same flag in node."),
+        Disable_wiping_the_console_in_watch_mode: diag(6684, ts.DiagnosticCategory.Message, "Disable_wiping_the_console_in_watch_mode_6684", "Disable wiping the console in watch mode"),
+        Enable_color_and_formatting_in_TypeScript_s_output_to_make_compiler_errors_easier_to_read: diag(6685, ts.DiagnosticCategory.Message, "Enable_color_and_formatting_in_TypeScript_s_output_to_make_compiler_errors_easier_to_read_6685", "Enable color and formatting in TypeScript's output to make compiler errors easier to read"),
+        Specify_the_object_invoked_for_createElement_This_only_applies_when_targeting_react_JSX_emit: diag(6686, ts.DiagnosticCategory.Message, "Specify_the_object_invoked_for_createElement_This_only_applies_when_targeting_react_JSX_emit_6686", "Specify the object invoked for `createElement`. This only applies when targeting `react` JSX emit."),
+        Specify_an_array_of_objects_that_specify_paths_for_projects_Used_in_project_references: diag(6687, ts.DiagnosticCategory.Message, "Specify_an_array_of_objects_that_specify_paths_for_projects_Used_in_project_references_6687", "Specify an array of objects that specify paths for projects. Used in project references."),
+        Disable_emitting_comments: diag(6688, ts.DiagnosticCategory.Message, "Disable_emitting_comments_6688", "Disable emitting comments."),
+        Enable_importing_json_files: diag(6689, ts.DiagnosticCategory.Message, "Enable_importing_json_files_6689", "Enable importing .json files"),
+        Specify_the_root_folder_within_your_source_files: diag(6690, ts.DiagnosticCategory.Message, "Specify_the_root_folder_within_your_source_files_6690", "Specify the root folder within your source files."),
+        Allow_multiple_folders_to_be_treated_as_one_when_resolving_modules: diag(6691, ts.DiagnosticCategory.Message, "Allow_multiple_folders_to_be_treated_as_one_when_resolving_modules_6691", "Allow multiple folders to be treated as one when resolving modules."),
+        Skip_type_checking_d_ts_files_that_are_included_with_TypeScript: diag(6692, ts.DiagnosticCategory.Message, "Skip_type_checking_d_ts_files_that_are_included_with_TypeScript_6692", "Skip type checking .d.ts files that are included with TypeScript."),
+        Skip_type_checking_all_d_ts_files: diag(6693, ts.DiagnosticCategory.Message, "Skip_type_checking_all_d_ts_files_6693", "Skip type checking all .d.ts files."),
+        Create_source_map_files_for_emitted_JavaScript_files: diag(6694, ts.DiagnosticCategory.Message, "Create_source_map_files_for_emitted_JavaScript_files_6694", "Create source map files for emitted JavaScript files."),
+        Specify_the_root_path_for_debuggers_to_find_the_reference_source_code: diag(6695, ts.DiagnosticCategory.Message, "Specify_the_root_path_for_debuggers_to_find_the_reference_source_code_6695", "Specify the root path for debuggers to find the reference source code."),
+        Check_that_the_arguments_for_bind_call_and_apply_methods_match_the_original_function: diag(6697, ts.DiagnosticCategory.Message, "Check_that_the_arguments_for_bind_call_and_apply_methods_match_the_original_function_6697", "Check that the arguments for `bind`, `call`, and `apply` methods match the original function."),
+        When_assigning_functions_check_to_ensure_parameters_and_the_return_values_are_subtype_compatible: diag(6698, ts.DiagnosticCategory.Message, "When_assigning_functions_check_to_ensure_parameters_and_the_return_values_are_subtype_compatible_6698", "When assigning functions, check to ensure parameters and the return values are subtype-compatible."),
+        When_type_checking_take_into_account_null_and_undefined: diag(6699, ts.DiagnosticCategory.Message, "When_type_checking_take_into_account_null_and_undefined_6699", "When type checking, take into account `null` and `undefined`."),
+        Check_for_class_properties_that_are_declared_but_not_set_in_the_constructor: diag(6700, ts.DiagnosticCategory.Message, "Check_for_class_properties_that_are_declared_but_not_set_in_the_constructor_6700", "Check for class properties that are declared but not set in the constructor."),
+        Disable_emitting_declarations_that_have_internal_in_their_JSDoc_comments: diag(6701, ts.DiagnosticCategory.Message, "Disable_emitting_declarations_that_have_internal_in_their_JSDoc_comments_6701", "Disable emitting declarations that have `@internal` in their JSDoc comments."),
+        Disable_reporting_of_excess_property_errors_during_the_creation_of_object_literals: diag(6702, ts.DiagnosticCategory.Message, "Disable_reporting_of_excess_property_errors_during_the_creation_of_object_literals_6702", "Disable reporting of excess property errors during the creation of object literals."),
+        Suppress_noImplicitAny_errors_when_indexing_objects_that_lack_index_signatures: diag(6703, ts.DiagnosticCategory.Message, "Suppress_noImplicitAny_errors_when_indexing_objects_that_lack_index_signatures_6703", "Suppress `noImplicitAny` errors when indexing objects that lack index signatures."),
+        Synchronously_call_callbacks_and_update_the_state_of_directory_watchers_on_platforms_that_don_t_support_recursive_watching_natively: diag(6704, ts.DiagnosticCategory.Message, "Synchronously_call_callbacks_and_update_the_state_of_directory_watchers_on_platforms_that_don_t_supp_6704", "Synchronously call callbacks and update the state of directory watchers on platforms that don`t support recursive watching natively."),
+        Set_the_JavaScript_language_version_for_emitted_JavaScript_and_include_compatible_library_declarations: diag(6705, ts.DiagnosticCategory.Message, "Set_the_JavaScript_language_version_for_emitted_JavaScript_and_include_compatible_library_declaratio_6705", "Set the JavaScript language version for emitted JavaScript and include compatible library declarations."),
+        Log_paths_used_during_the_moduleResolution_process: diag(6706, ts.DiagnosticCategory.Message, "Log_paths_used_during_the_moduleResolution_process_6706", "Log paths used during the `moduleResolution` process."),
+        Specify_the_folder_for_tsbuildinfo_incremental_compilation_files: diag(6707, ts.DiagnosticCategory.Message, "Specify_the_folder_for_tsbuildinfo_incremental_compilation_files_6707", "Specify the folder for .tsbuildinfo incremental compilation files."),
+        Specify_options_for_automatic_acquisition_of_declaration_files: diag(6709, ts.DiagnosticCategory.Message, "Specify_options_for_automatic_acquisition_of_declaration_files_6709", "Specify options for automatic acquisition of declaration files."),
+        Specify_multiple_folders_that_act_like_Slashnode_modules_Slash_types: diag(6710, ts.DiagnosticCategory.Message, "Specify_multiple_folders_that_act_like_Slashnode_modules_Slash_types_6710", "Specify multiple folders that act like `./node_modules/@types`."),
+        Specify_type_package_names_to_be_included_without_being_referenced_in_a_source_file: diag(6711, ts.DiagnosticCategory.Message, "Specify_type_package_names_to_be_included_without_being_referenced_in_a_source_file_6711", "Specify type package names to be included without being referenced in a source file."),
+        Emit_ECMAScript_standard_compliant_class_fields: diag(6712, ts.DiagnosticCategory.Message, "Emit_ECMAScript_standard_compliant_class_fields_6712", "Emit ECMAScript-standard-compliant class fields."),
+        Enable_verbose_logging: diag(6713, ts.DiagnosticCategory.Message, "Enable_verbose_logging_6713", "Enable verbose logging"),
+        Specify_how_directories_are_watched_on_systems_that_lack_recursive_file_watching_functionality: diag(6714, ts.DiagnosticCategory.Message, "Specify_how_directories_are_watched_on_systems_that_lack_recursive_file_watching_functionality_6714", "Specify how directories are watched on systems that lack recursive file-watching functionality."),
+        Specify_how_the_TypeScript_watch_mode_works: diag(6715, ts.DiagnosticCategory.Message, "Specify_how_the_TypeScript_watch_mode_works_6715", "Specify how the TypeScript watch mode works."),
+        Include_undefined_in_index_signature_results: diag(6716, ts.DiagnosticCategory.Message, "Include_undefined_in_index_signature_results_6716", "Include 'undefined' in index signature results"),
+        Require_undeclared_properties_from_index_signatures_to_use_element_accesses: diag(6717, ts.DiagnosticCategory.Message, "Require_undeclared_properties_from_index_signatures_to_use_element_accesses_6717", "Require undeclared properties from index signatures to use element accesses."),
+        Specify_emit_Slashchecking_behavior_for_imports_that_are_only_used_for_types: diag(6718, ts.DiagnosticCategory.Message, "Specify_emit_Slashchecking_behavior_for_imports_that_are_only_used_for_types_6718", "Specify emit/checking behavior for imports that are only used for types"),
+        Type_catch_clause_variables_as_unknown_instead_of_any: diag(6803, ts.DiagnosticCategory.Message, "Type_catch_clause_variables_as_unknown_instead_of_any_6803", "Type catch clause variables as 'unknown' instead of 'any'."),
+        one_of_Colon: diag(6900, ts.DiagnosticCategory.Message, "one_of_Colon_6900", "one of:"),
+        one_or_more_Colon: diag(6901, ts.DiagnosticCategory.Message, "one_or_more_Colon_6901", "one or more:"),
+        type_Colon: diag(6902, ts.DiagnosticCategory.Message, "type_Colon_6902", "type:"),
+        default_Colon: diag(6903, ts.DiagnosticCategory.Message, "default_Colon_6903", "default:"),
+        module_system_or_esModuleInterop: diag(6904, ts.DiagnosticCategory.Message, "module_system_or_esModuleInterop_6904", "module === \"system\" or esModuleInterop"),
+        false_unless_strict_is_set: diag(6905, ts.DiagnosticCategory.Message, "false_unless_strict_is_set_6905", "`false`, unless `strict` is set"),
+        false_unless_composite_is_set: diag(6906, ts.DiagnosticCategory.Message, "false_unless_composite_is_set_6906", "`false`, unless `composite` is set"),
+        node_modules_bower_components_jspm_packages_plus_the_value_of_outDir_if_one_is_specified: diag(6907, ts.DiagnosticCategory.Message, "node_modules_bower_components_jspm_packages_plus_the_value_of_outDir_if_one_is_specified_6907", "`[\"node_modules\", \"bower_components\", \"jspm_packages\"]`, plus the value of `outDir` if one is specified."),
+        if_files_is_specified_otherwise_Asterisk_Asterisk_Slash_Asterisk: diag(6908, ts.DiagnosticCategory.Message, "if_files_is_specified_otherwise_Asterisk_Asterisk_Slash_Asterisk_6908", "`[]` if `files` is specified, otherwise `[\"**/*\"]`"),
+        true_if_composite_false_otherwise: diag(6909, ts.DiagnosticCategory.Message, "true_if_composite_false_otherwise_6909", "`true` if `composite`, `false` otherwise"),
+        module_AMD_or_UMD_or_System_or_ES6_then_Classic_Otherwise_Node: diag(69010, ts.DiagnosticCategory.Message, "module_AMD_or_UMD_or_System_or_ES6_then_Classic_Otherwise_Node_69010", "module === `AMD` or `UMD` or `System` or `ES6`, then `Classic`, Otherwise `Node`"),
+        Computed_from_the_list_of_input_files: diag(6911, ts.DiagnosticCategory.Message, "Computed_from_the_list_of_input_files_6911", "Computed from the list of input files"),
+        Platform_specific: diag(6912, ts.DiagnosticCategory.Message, "Platform_specific_6912", "Platform specific"),
+        You_can_learn_about_all_of_the_compiler_options_at_0: diag(6913, ts.DiagnosticCategory.Message, "You_can_learn_about_all_of_the_compiler_options_at_0_6913", "You can learn about all of the compiler options at {0}"),
+        Including_watch_w_will_start_watching_the_current_project_for_the_file_changes_Once_set_you_can_config_watch_mode_with_Colon: diag(6914, ts.DiagnosticCategory.Message, "Including_watch_w_will_start_watching_the_current_project_for_the_file_changes_Once_set_you_can_conf_6914", "Including --watch, -w will start watching the current project for the file changes. Once set, you can config watch mode with:"),
+        Using_build_b_will_make_tsc_behave_more_like_a_build_orchestrator_than_a_compiler_This_is_used_to_trigger_building_composite_projects_which_you_can_learn_more_about_at_0: diag(6915, ts.DiagnosticCategory.Message, "Using_build_b_will_make_tsc_behave_more_like_a_build_orchestrator_than_a_compiler_This_is_used_to_tr_6915", "Using --build, -b will make tsc behave more like a build orchestrator than a compiler. This is used to trigger building composite projects which you can learn more about at {0}"),
+        COMMON_COMMANDS: diag(6916, ts.DiagnosticCategory.Message, "COMMON_COMMANDS_6916", "COMMON COMMANDS"),
+        ALL_COMPILER_OPTIONS: diag(6917, ts.DiagnosticCategory.Message, "ALL_COMPILER_OPTIONS_6917", "ALL COMPILER OPTIONS"),
+        WATCH_OPTIONS: diag(6918, ts.DiagnosticCategory.Message, "WATCH_OPTIONS_6918", "WATCH OPTIONS"),
+        BUILD_OPTIONS: diag(6919, ts.DiagnosticCategory.Message, "BUILD_OPTIONS_6919", "BUILD OPTIONS"),
+        COMMON_COMPILER_OPTIONS: diag(6920, ts.DiagnosticCategory.Message, "COMMON_COMPILER_OPTIONS_6920", "COMMON COMPILER OPTIONS"),
+        COMMAND_LINE_FLAGS: diag(6921, ts.DiagnosticCategory.Message, "COMMAND_LINE_FLAGS_6921", "COMMAND LINE FLAGS"),
+        tsc_Colon_The_TypeScript_Compiler: diag(6922, ts.DiagnosticCategory.Message, "tsc_Colon_The_TypeScript_Compiler_6922", "tsc: The TypeScript Compiler"),
+        Compiles_the_current_project_tsconfig_json_in_the_working_directory: diag(6923, ts.DiagnosticCategory.Message, "Compiles_the_current_project_tsconfig_json_in_the_working_directory_6923", "Compiles the current project (tsconfig.json in the working directory.)"),
+        Ignoring_tsconfig_json_compiles_the_specified_files_with_default_compiler_options: diag(6924, ts.DiagnosticCategory.Message, "Ignoring_tsconfig_json_compiles_the_specified_files_with_default_compiler_options_6924", "Ignoring tsconfig.json, compiles the specified files with default compiler options."),
+        Build_a_composite_project_in_the_working_directory: diag(6925, ts.DiagnosticCategory.Message, "Build_a_composite_project_in_the_working_directory_6925", "Build a composite project in the working directory."),
+        Creates_a_tsconfig_json_with_the_recommended_settings_in_the_working_directory: diag(6926, ts.DiagnosticCategory.Message, "Creates_a_tsconfig_json_with_the_recommended_settings_in_the_working_directory_6926", "Creates a tsconfig.json with the recommended settings in the working directory."),
+        Compiles_the_TypeScript_project_located_at_the_specified_path: diag(6927, ts.DiagnosticCategory.Message, "Compiles_the_TypeScript_project_located_at_the_specified_path_6927", "Compiles the TypeScript project located at the specified path."),
+        An_expanded_version_of_this_information_showing_all_possible_compiler_options: diag(6928, ts.DiagnosticCategory.Message, "An_expanded_version_of_this_information_showing_all_possible_compiler_options_6928", "An expanded version of this information, showing all possible compiler options"),
+        Compiles_the_current_project_with_additional_settings: diag(6929, ts.DiagnosticCategory.Message, "Compiles_the_current_project_with_additional_settings_6929", "Compiles the current project, with additional settings."),
         Variable_0_implicitly_has_an_1_type: diag(7005, ts.DiagnosticCategory.Error, "Variable_0_implicitly_has_an_1_type_7005", "Variable '{0}' implicitly has an '{1}' type."),
         Parameter_0_implicitly_has_an_1_type: diag(7006, ts.DiagnosticCategory.Error, "Parameter_0_implicitly_has_an_1_type_7006", "Parameter '{0}' implicitly has an '{1}' type."),
         Member_0_implicitly_has_an_1_type: diag(7008, ts.DiagnosticCategory.Error, "Member_0_implicitly_has_an_1_type_7008", "Member '{0}' implicitly has an '{1}' type."),
@@ -9176,7 +9477,6 @@
         Add_names_to_all_parameters_without_names: diag(95073, ts.DiagnosticCategory.Message, "Add_names_to_all_parameters_without_names_95073", "Add names to all parameters without names"),
         Enable_the_experimentalDecorators_option_in_your_configuration_file: diag(95074, ts.DiagnosticCategory.Message, "Enable_the_experimentalDecorators_option_in_your_configuration_file_95074", "Enable the 'experimentalDecorators' option in your configuration file"),
         Convert_parameters_to_destructured_object: diag(95075, ts.DiagnosticCategory.Message, "Convert_parameters_to_destructured_object_95075", "Convert parameters to destructured object"),
-        Allow_accessing_UMD_globals_from_modules: diag(95076, ts.DiagnosticCategory.Message, "Allow_accessing_UMD_globals_from_modules_95076", "Allow accessing UMD globals from modules."),
         Extract_type: diag(95077, ts.DiagnosticCategory.Message, "Extract_type_95077", "Extract type"),
         Extract_to_type_alias: diag(95078, ts.DiagnosticCategory.Message, "Extract_to_type_alias_95078", "Extract to type alias"),
         Extract_to_typedef: diag(95079, ts.DiagnosticCategory.Message, "Extract_to_typedef_95079", "Extract to typedef"),
@@ -9264,6 +9564,11 @@
         Remove_override_modifier: diag(95161, ts.DiagnosticCategory.Message, "Remove_override_modifier_95161", "Remove 'override' modifier"),
         Add_all_missing_override_modifiers: diag(95162, ts.DiagnosticCategory.Message, "Add_all_missing_override_modifiers_95162", "Add all missing 'override' modifiers"),
         Remove_all_unnecessary_override_modifiers: diag(95163, ts.DiagnosticCategory.Message, "Remove_all_unnecessary_override_modifiers_95163", "Remove all unnecessary 'override' modifiers"),
+        Can_only_convert_named_export: diag(95164, ts.DiagnosticCategory.Message, "Can_only_convert_named_export_95164", "Can only convert named export"),
+        Add_missing_properties: diag(95165, ts.DiagnosticCategory.Message, "Add_missing_properties_95165", "Add missing properties"),
+        Add_all_missing_properties: diag(95166, ts.DiagnosticCategory.Message, "Add_all_missing_properties_95166", "Add all missing properties"),
+        Add_missing_attributes: diag(95167, ts.DiagnosticCategory.Message, "Add_missing_attributes_95167", "Add missing attributes"),
+        Add_all_missing_attributes: diag(95168, ts.DiagnosticCategory.Message, "Add_all_missing_attributes_95168", "Add all missing attributes"),
         No_value_exists_in_scope_for_the_shorthand_property_0_Either_declare_one_or_provide_an_initializer: diag(18004, ts.DiagnosticCategory.Error, "No_value_exists_in_scope_for_the_shorthand_property_0_Either_declare_one_or_provide_an_initializer_18004", "No value exists in scope for the shorthand property '{0}'. Either declare one or provide an initializer."),
         Classes_may_not_have_a_field_named_constructor: diag(18006, ts.DiagnosticCategory.Error, "Classes_may_not_have_a_field_named_constructor_18006", "Classes may not have a field named 'constructor'."),
         JSX_expressions_may_not_use_the_comma_operator_Did_you_mean_to_write_an_array: diag(18007, ts.DiagnosticCategory.Error, "JSX_expressions_may_not_use_the_comma_operator_Did_you_mean_to_write_an_array_18007", "JSX expressions may not use the comma operator. Did you mean to write an array?"),
@@ -9290,6 +9595,10 @@
         Specify_the_JSX_fragment_factory_function_to_use_when_targeting_react_JSX_emit_with_jsxFactory_compiler_option_is_specified_e_g_Fragment: diag(18034, ts.DiagnosticCategory.Message, "Specify_the_JSX_fragment_factory_function_to_use_when_targeting_react_JSX_emit_with_jsxFactory_compi_18034", "Specify the JSX fragment factory function to use when targeting 'react' JSX emit with 'jsxFactory' compiler option is specified, e.g. 'Fragment'."),
         Invalid_value_for_jsxFragmentFactory_0_is_not_a_valid_identifier_or_qualified_name: diag(18035, ts.DiagnosticCategory.Error, "Invalid_value_for_jsxFragmentFactory_0_is_not_a_valid_identifier_or_qualified_name_18035", "Invalid value for 'jsxFragmentFactory'. '{0}' is not a valid identifier or qualified-name."),
         Class_decorators_can_t_be_used_with_static_private_identifier_Consider_removing_the_experimental_decorator: diag(18036, ts.DiagnosticCategory.Error, "Class_decorators_can_t_be_used_with_static_private_identifier_Consider_removing_the_experimental_dec_18036", "Class decorators can't be used with static private identifier. Consider removing the experimental decorator."),
+        Await_expression_cannot_be_used_inside_a_class_static_block: diag(18037, ts.DiagnosticCategory.Error, "Await_expression_cannot_be_used_inside_a_class_static_block_18037", "Await expression cannot be used inside a class static block."),
+        For_await_loops_cannot_be_used_inside_a_class_static_block: diag(18038, ts.DiagnosticCategory.Error, "For_await_loops_cannot_be_used_inside_a_class_static_block_18038", "'For await' loops cannot be used inside a class static block."),
+        Invalid_use_of_0_It_cannot_be_used_inside_a_class_static_block: diag(18039, ts.DiagnosticCategory.Error, "Invalid_use_of_0_It_cannot_be_used_inside_a_class_static_block_18039", "Invalid use of '{0}'. It cannot be used inside a class static block."),
+        A_return_statement_cannot_be_used_inside_a_class_static_block: diag(18041, ts.DiagnosticCategory.Error, "A_return_statement_cannot_be_used_inside_a_class_static_block_18041", "A 'return' statement cannot be used inside a class static block."),
     };
 })(ts || (ts = {}));
 var ts;
@@ -9297,7 +9606,7 @@
     var _a;
     /* @internal */
     function tokenIsIdentifierOrKeyword(token) {
-        return token >= 78 /* Identifier */;
+        return token >= 79 /* Identifier */;
     }
     ts.tokenIsIdentifierOrKeyword = tokenIsIdentifierOrKeyword;
     /* @internal */
@@ -9305,89 +9614,90 @@
         return token === 31 /* GreaterThanToken */ || tokenIsIdentifierOrKeyword(token);
     }
     ts.tokenIsIdentifierOrKeywordOrGreaterThan = tokenIsIdentifierOrKeywordOrGreaterThan;
-    var textToKeywordObj = (_a = {
-            abstract: 125 /* AbstractKeyword */,
-            any: 128 /* AnyKeyword */,
-            as: 126 /* AsKeyword */,
-            asserts: 127 /* AssertsKeyword */,
-            bigint: 155 /* BigIntKeyword */,
-            boolean: 131 /* BooleanKeyword */,
-            break: 80 /* BreakKeyword */,
-            case: 81 /* CaseKeyword */,
-            catch: 82 /* CatchKeyword */,
-            class: 83 /* ClassKeyword */,
-            continue: 85 /* ContinueKeyword */,
-            const: 84 /* ConstKeyword */
+    /** @internal */
+    ts.textToKeywordObj = (_a = {
+            abstract: 126 /* AbstractKeyword */,
+            any: 129 /* AnyKeyword */,
+            as: 127 /* AsKeyword */,
+            asserts: 128 /* AssertsKeyword */,
+            bigint: 156 /* BigIntKeyword */,
+            boolean: 132 /* BooleanKeyword */,
+            break: 81 /* BreakKeyword */,
+            case: 82 /* CaseKeyword */,
+            catch: 83 /* CatchKeyword */,
+            class: 84 /* ClassKeyword */,
+            continue: 86 /* ContinueKeyword */,
+            const: 85 /* ConstKeyword */
         },
-        _a["" + "constructor"] = 132 /* ConstructorKeyword */,
-        _a.debugger = 86 /* DebuggerKeyword */,
-        _a.declare = 133 /* DeclareKeyword */,
-        _a.default = 87 /* DefaultKeyword */,
-        _a.delete = 88 /* DeleteKeyword */,
-        _a.do = 89 /* DoKeyword */,
-        _a.else = 90 /* ElseKeyword */,
-        _a.enum = 91 /* EnumKeyword */,
-        _a.export = 92 /* ExportKeyword */,
-        _a.extends = 93 /* ExtendsKeyword */,
-        _a.false = 94 /* FalseKeyword */,
-        _a.finally = 95 /* FinallyKeyword */,
-        _a.for = 96 /* ForKeyword */,
-        _a.from = 153 /* FromKeyword */,
-        _a.function = 97 /* FunctionKeyword */,
-        _a.get = 134 /* GetKeyword */,
-        _a.if = 98 /* IfKeyword */,
-        _a.implements = 116 /* ImplementsKeyword */,
-        _a.import = 99 /* ImportKeyword */,
-        _a.in = 100 /* InKeyword */,
-        _a.infer = 135 /* InferKeyword */,
-        _a.instanceof = 101 /* InstanceOfKeyword */,
-        _a.interface = 117 /* InterfaceKeyword */,
-        _a.intrinsic = 136 /* IntrinsicKeyword */,
-        _a.is = 137 /* IsKeyword */,
-        _a.keyof = 138 /* KeyOfKeyword */,
-        _a.let = 118 /* LetKeyword */,
-        _a.module = 139 /* ModuleKeyword */,
-        _a.namespace = 140 /* NamespaceKeyword */,
-        _a.never = 141 /* NeverKeyword */,
-        _a.new = 102 /* NewKeyword */,
-        _a.null = 103 /* NullKeyword */,
-        _a.number = 144 /* NumberKeyword */,
-        _a.object = 145 /* ObjectKeyword */,
-        _a.package = 119 /* PackageKeyword */,
-        _a.private = 120 /* PrivateKeyword */,
-        _a.protected = 121 /* ProtectedKeyword */,
-        _a.public = 122 /* PublicKeyword */,
-        _a.override = 156 /* OverrideKeyword */,
-        _a.readonly = 142 /* ReadonlyKeyword */,
-        _a.require = 143 /* RequireKeyword */,
-        _a.global = 154 /* GlobalKeyword */,
-        _a.return = 104 /* ReturnKeyword */,
-        _a.set = 146 /* SetKeyword */,
-        _a.static = 123 /* StaticKeyword */,
-        _a.string = 147 /* StringKeyword */,
-        _a.super = 105 /* SuperKeyword */,
-        _a.switch = 106 /* SwitchKeyword */,
-        _a.symbol = 148 /* SymbolKeyword */,
-        _a.this = 107 /* ThisKeyword */,
-        _a.throw = 108 /* ThrowKeyword */,
-        _a.true = 109 /* TrueKeyword */,
-        _a.try = 110 /* TryKeyword */,
-        _a.type = 149 /* TypeKeyword */,
-        _a.typeof = 111 /* TypeOfKeyword */,
-        _a.undefined = 150 /* UndefinedKeyword */,
-        _a.unique = 151 /* UniqueKeyword */,
-        _a.unknown = 152 /* UnknownKeyword */,
-        _a.var = 112 /* VarKeyword */,
-        _a.void = 113 /* VoidKeyword */,
-        _a.while = 114 /* WhileKeyword */,
-        _a.with = 115 /* WithKeyword */,
-        _a.yield = 124 /* YieldKeyword */,
-        _a.async = 129 /* AsyncKeyword */,
-        _a.await = 130 /* AwaitKeyword */,
-        _a.of = 157 /* OfKeyword */,
+        _a["" + "constructor"] = 133 /* ConstructorKeyword */,
+        _a.debugger = 87 /* DebuggerKeyword */,
+        _a.declare = 134 /* DeclareKeyword */,
+        _a.default = 88 /* DefaultKeyword */,
+        _a.delete = 89 /* DeleteKeyword */,
+        _a.do = 90 /* DoKeyword */,
+        _a.else = 91 /* ElseKeyword */,
+        _a.enum = 92 /* EnumKeyword */,
+        _a.export = 93 /* ExportKeyword */,
+        _a.extends = 94 /* ExtendsKeyword */,
+        _a.false = 95 /* FalseKeyword */,
+        _a.finally = 96 /* FinallyKeyword */,
+        _a.for = 97 /* ForKeyword */,
+        _a.from = 154 /* FromKeyword */,
+        _a.function = 98 /* FunctionKeyword */,
+        _a.get = 135 /* GetKeyword */,
+        _a.if = 99 /* IfKeyword */,
+        _a.implements = 117 /* ImplementsKeyword */,
+        _a.import = 100 /* ImportKeyword */,
+        _a.in = 101 /* InKeyword */,
+        _a.infer = 136 /* InferKeyword */,
+        _a.instanceof = 102 /* InstanceOfKeyword */,
+        _a.interface = 118 /* InterfaceKeyword */,
+        _a.intrinsic = 137 /* IntrinsicKeyword */,
+        _a.is = 138 /* IsKeyword */,
+        _a.keyof = 139 /* KeyOfKeyword */,
+        _a.let = 119 /* LetKeyword */,
+        _a.module = 140 /* ModuleKeyword */,
+        _a.namespace = 141 /* NamespaceKeyword */,
+        _a.never = 142 /* NeverKeyword */,
+        _a.new = 103 /* NewKeyword */,
+        _a.null = 104 /* NullKeyword */,
+        _a.number = 145 /* NumberKeyword */,
+        _a.object = 146 /* ObjectKeyword */,
+        _a.package = 120 /* PackageKeyword */,
+        _a.private = 121 /* PrivateKeyword */,
+        _a.protected = 122 /* ProtectedKeyword */,
+        _a.public = 123 /* PublicKeyword */,
+        _a.override = 157 /* OverrideKeyword */,
+        _a.readonly = 143 /* ReadonlyKeyword */,
+        _a.require = 144 /* RequireKeyword */,
+        _a.global = 155 /* GlobalKeyword */,
+        _a.return = 105 /* ReturnKeyword */,
+        _a.set = 147 /* SetKeyword */,
+        _a.static = 124 /* StaticKeyword */,
+        _a.string = 148 /* StringKeyword */,
+        _a.super = 106 /* SuperKeyword */,
+        _a.switch = 107 /* SwitchKeyword */,
+        _a.symbol = 149 /* SymbolKeyword */,
+        _a.this = 108 /* ThisKeyword */,
+        _a.throw = 109 /* ThrowKeyword */,
+        _a.true = 110 /* TrueKeyword */,
+        _a.try = 111 /* TryKeyword */,
+        _a.type = 150 /* TypeKeyword */,
+        _a.typeof = 112 /* TypeOfKeyword */,
+        _a.undefined = 151 /* UndefinedKeyword */,
+        _a.unique = 152 /* UniqueKeyword */,
+        _a.unknown = 153 /* UnknownKeyword */,
+        _a.var = 113 /* VarKeyword */,
+        _a.void = 114 /* VoidKeyword */,
+        _a.while = 115 /* WhileKeyword */,
+        _a.with = 116 /* WithKeyword */,
+        _a.yield = 125 /* YieldKeyword */,
+        _a.async = 130 /* AsyncKeyword */,
+        _a.await = 131 /* AwaitKeyword */,
+        _a.of = 158 /* OfKeyword */,
         _a);
-    var textToKeyword = new ts.Map(ts.getEntries(textToKeywordObj));
-    var textToToken = new ts.Map(ts.getEntries(__assign(__assign({}, textToKeywordObj), { "{": 18 /* OpenBraceToken */, "}": 19 /* CloseBraceToken */, "(": 20 /* OpenParenToken */, ")": 21 /* CloseParenToken */, "[": 22 /* OpenBracketToken */, "]": 23 /* CloseBracketToken */, ".": 24 /* DotToken */, "...": 25 /* DotDotDotToken */, ";": 26 /* SemicolonToken */, ",": 27 /* CommaToken */, "<": 29 /* LessThanToken */, ">": 31 /* GreaterThanToken */, "<=": 32 /* LessThanEqualsToken */, ">=": 33 /* GreaterThanEqualsToken */, "==": 34 /* EqualsEqualsToken */, "!=": 35 /* ExclamationEqualsToken */, "===": 36 /* EqualsEqualsEqualsToken */, "!==": 37 /* ExclamationEqualsEqualsToken */, "=>": 38 /* EqualsGreaterThanToken */, "+": 39 /* PlusToken */, "-": 40 /* MinusToken */, "**": 42 /* AsteriskAsteriskToken */, "*": 41 /* AsteriskToken */, "/": 43 /* SlashToken */, "%": 44 /* PercentToken */, "++": 45 /* PlusPlusToken */, "--": 46 /* MinusMinusToken */, "<<": 47 /* LessThanLessThanToken */, "</": 30 /* LessThanSlashToken */, ">>": 48 /* GreaterThanGreaterThanToken */, ">>>": 49 /* GreaterThanGreaterThanGreaterThanToken */, "&": 50 /* AmpersandToken */, "|": 51 /* BarToken */, "^": 52 /* CaretToken */, "!": 53 /* ExclamationToken */, "~": 54 /* TildeToken */, "&&": 55 /* AmpersandAmpersandToken */, "||": 56 /* BarBarToken */, "?": 57 /* QuestionToken */, "??": 60 /* QuestionQuestionToken */, "?.": 28 /* QuestionDotToken */, ":": 58 /* ColonToken */, "=": 62 /* EqualsToken */, "+=": 63 /* PlusEqualsToken */, "-=": 64 /* MinusEqualsToken */, "*=": 65 /* AsteriskEqualsToken */, "**=": 66 /* AsteriskAsteriskEqualsToken */, "/=": 67 /* SlashEqualsToken */, "%=": 68 /* PercentEqualsToken */, "<<=": 69 /* LessThanLessThanEqualsToken */, ">>=": 70 /* GreaterThanGreaterThanEqualsToken */, ">>>=": 71 /* GreaterThanGreaterThanGreaterThanEqualsToken */, "&=": 72 /* AmpersandEqualsToken */, "|=": 73 /* BarEqualsToken */, "^=": 77 /* CaretEqualsToken */, "||=": 74 /* BarBarEqualsToken */, "&&=": 75 /* AmpersandAmpersandEqualsToken */, "??=": 76 /* QuestionQuestionEqualsToken */, "@": 59 /* AtToken */, "`": 61 /* BacktickToken */ })));
+    var textToKeyword = new ts.Map(ts.getEntries(ts.textToKeywordObj));
+    var textToToken = new ts.Map(ts.getEntries(__assign(__assign({}, ts.textToKeywordObj), { "{": 18 /* OpenBraceToken */, "}": 19 /* CloseBraceToken */, "(": 20 /* OpenParenToken */, ")": 21 /* CloseParenToken */, "[": 22 /* OpenBracketToken */, "]": 23 /* CloseBracketToken */, ".": 24 /* DotToken */, "...": 25 /* DotDotDotToken */, ";": 26 /* SemicolonToken */, ",": 27 /* CommaToken */, "<": 29 /* LessThanToken */, ">": 31 /* GreaterThanToken */, "<=": 32 /* LessThanEqualsToken */, ">=": 33 /* GreaterThanEqualsToken */, "==": 34 /* EqualsEqualsToken */, "!=": 35 /* ExclamationEqualsToken */, "===": 36 /* EqualsEqualsEqualsToken */, "!==": 37 /* ExclamationEqualsEqualsToken */, "=>": 38 /* EqualsGreaterThanToken */, "+": 39 /* PlusToken */, "-": 40 /* MinusToken */, "**": 42 /* AsteriskAsteriskToken */, "*": 41 /* AsteriskToken */, "/": 43 /* SlashToken */, "%": 44 /* PercentToken */, "++": 45 /* PlusPlusToken */, "--": 46 /* MinusMinusToken */, "<<": 47 /* LessThanLessThanToken */, "</": 30 /* LessThanSlashToken */, ">>": 48 /* GreaterThanGreaterThanToken */, ">>>": 49 /* GreaterThanGreaterThanGreaterThanToken */, "&": 50 /* AmpersandToken */, "|": 51 /* BarToken */, "^": 52 /* CaretToken */, "!": 53 /* ExclamationToken */, "~": 54 /* TildeToken */, "&&": 55 /* AmpersandAmpersandToken */, "||": 56 /* BarBarToken */, "?": 57 /* QuestionToken */, "??": 60 /* QuestionQuestionToken */, "?.": 28 /* QuestionDotToken */, ":": 58 /* ColonToken */, "=": 63 /* EqualsToken */, "+=": 64 /* PlusEqualsToken */, "-=": 65 /* MinusEqualsToken */, "*=": 66 /* AsteriskEqualsToken */, "**=": 67 /* AsteriskAsteriskEqualsToken */, "/=": 68 /* SlashEqualsToken */, "%=": 69 /* PercentEqualsToken */, "<<=": 70 /* LessThanLessThanEqualsToken */, ">>=": 71 /* GreaterThanGreaterThanEqualsToken */, ">>>=": 72 /* GreaterThanGreaterThanGreaterThanEqualsToken */, "&=": 73 /* AmpersandEqualsToken */, "|=": 74 /* BarEqualsToken */, "^=": 78 /* CaretEqualsToken */, "||=": 75 /* BarBarEqualsToken */, "&&=": 76 /* AmpersandAmpersandEqualsToken */, "??=": 77 /* QuestionQuestionEqualsToken */, "@": 59 /* AtToken */, "#": 62 /* HashToken */, "`": 61 /* BacktickToken */ })));
     /*
         As per ECMAScript Language Specification 3th Edition, Section 7.6: Identifiers
         IdentifierStart ::
@@ -9443,13 +9753,13 @@
     var unicodeESNextIdentifierStart = [65, 90, 97, 122, 170, 170, 181, 181, 186, 186, 192, 214, 216, 246, 248, 705, 710, 721, 736, 740, 748, 748, 750, 750, 880, 884, 886, 887, 890, 893, 895, 895, 902, 902, 904, 906, 908, 908, 910, 929, 931, 1013, 1015, 1153, 1162, 1327, 1329, 1366, 1369, 1369, 1376, 1416, 1488, 1514, 1519, 1522, 1568, 1610, 1646, 1647, 1649, 1747, 1749, 1749, 1765, 1766, 1774, 1775, 1786, 1788, 1791, 1791, 1808, 1808, 1810, 1839, 1869, 1957, 1969, 1969, 1994, 2026, 2036, 2037, 2042, 2042, 2048, 2069, 2074, 2074, 2084, 2084, 2088, 2088, 2112, 2136, 2144, 2154, 2208, 2228, 2230, 2237, 2308, 2361, 2365, 2365, 2384, 2384, 2392, 2401, 2417, 2432, 2437, 2444, 2447, 2448, 2451, 2472, 2474, 2480, 2482, 2482, 2486, 2489, 2493, 2493, 2510, 2510, 2524, 2525, 2527, 2529, 2544, 2545, 2556, 2556, 2565, 2570, 2575, 2576, 2579, 2600, 2602, 2608, 2610, 2611, 2613, 2614, 2616, 2617, 2649, 2652, 2654, 2654, 2674, 2676, 2693, 2701, 2703, 2705, 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2749, 2749, 2768, 2768, 2784, 2785, 2809, 2809, 2821, 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2869, 2873, 2877, 2877, 2908, 2909, 2911, 2913, 2929, 2929, 2947, 2947, 2949, 2954, 2958, 2960, 2962, 2965, 2969, 2970, 2972, 2972, 2974, 2975, 2979, 2980, 2984, 2986, 2990, 3001, 3024, 3024, 3077, 3084, 3086, 3088, 3090, 3112, 3114, 3129, 3133, 3133, 3160, 3162, 3168, 3169, 3200, 3200, 3205, 3212, 3214, 3216, 3218, 3240, 3242, 3251, 3253, 3257, 3261, 3261, 3294, 3294, 3296, 3297, 3313, 3314, 3333, 3340, 3342, 3344, 3346, 3386, 3389, 3389, 3406, 3406, 3412, 3414, 3423, 3425, 3450, 3455, 3461, 3478, 3482, 3505, 3507, 3515, 3517, 3517, 3520, 3526, 3585, 3632, 3634, 3635, 3648, 3654, 3713, 3714, 3716, 3716, 3718, 3722, 3724, 3747, 3749, 3749, 3751, 3760, 3762, 3763, 3773, 3773, 3776, 3780, 3782, 3782, 3804, 3807, 3840, 3840, 3904, 3911, 3913, 3948, 3976, 3980, 4096, 4138, 4159, 4159, 4176, 4181, 4186, 4189, 4193, 4193, 4197, 4198, 4206, 4208, 4213, 4225, 4238, 4238, 4256, 4293, 4295, 4295, 4301, 4301, 4304, 4346, 4348, 4680, 4682, 4685, 4688, 4694, 4696, 4696, 4698, 4701, 4704, 4744, 4746, 4749, 4752, 4784, 4786, 4789, 4792, 4798, 4800, 4800, 4802, 4805, 4808, 4822, 4824, 4880, 4882, 4885, 4888, 4954, 4992, 5007, 5024, 5109, 5112, 5117, 5121, 5740, 5743, 5759, 5761, 5786, 5792, 5866, 5870, 5880, 5888, 5900, 5902, 5905, 5920, 5937, 5952, 5969, 5984, 5996, 5998, 6000, 6016, 6067, 6103, 6103, 6108, 6108, 6176, 6264, 6272, 6312, 6314, 6314, 6320, 6389, 6400, 6430, 6480, 6509, 6512, 6516, 6528, 6571, 6576, 6601, 6656, 6678, 6688, 6740, 6823, 6823, 6917, 6963, 6981, 6987, 7043, 7072, 7086, 7087, 7098, 7141, 7168, 7203, 7245, 7247, 7258, 7293, 7296, 7304, 7312, 7354, 7357, 7359, 7401, 7404, 7406, 7411, 7413, 7414, 7418, 7418, 7424, 7615, 7680, 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025, 8027, 8027, 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130, 8132, 8134, 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188, 8305, 8305, 8319, 8319, 8336, 8348, 8450, 8450, 8455, 8455, 8458, 8467, 8469, 8469, 8472, 8477, 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8505, 8508, 8511, 8517, 8521, 8526, 8526, 8544, 8584, 11264, 11310, 11312, 11358, 11360, 11492, 11499, 11502, 11506, 11507, 11520, 11557, 11559, 11559, 11565, 11565, 11568, 11623, 11631, 11631, 11648, 11670, 11680, 11686, 11688, 11694, 11696, 11702, 11704, 11710, 11712, 11718, 11720, 11726, 11728, 11734, 11736, 11742, 12293, 12295, 12321, 12329, 12337, 12341, 12344, 12348, 12353, 12438, 12443, 12447, 12449, 12538, 12540, 12543, 12549, 12591, 12593, 12686, 12704, 12730, 12784, 12799, 13312, 19893, 19968, 40943, 40960, 42124, 42192, 42237, 42240, 42508, 42512, 42527, 42538, 42539, 42560, 42606, 42623, 42653, 42656, 42735, 42775, 42783, 42786, 42888, 42891, 42943, 42946, 42950, 42999, 43009, 43011, 43013, 43015, 43018, 43020, 43042, 43072, 43123, 43138, 43187, 43250, 43255, 43259, 43259, 43261, 43262, 43274, 43301, 43312, 43334, 43360, 43388, 43396, 43442, 43471, 43471, 43488, 43492, 43494, 43503, 43514, 43518, 43520, 43560, 43584, 43586, 43588, 43595, 43616, 43638, 43642, 43642, 43646, 43695, 43697, 43697, 43701, 43702, 43705, 43709, 43712, 43712, 43714, 43714, 43739, 43741, 43744, 43754, 43762, 43764, 43777, 43782, 43785, 43790, 43793, 43798, 43808, 43814, 43816, 43822, 43824, 43866, 43868, 43879, 43888, 44002, 44032, 55203, 55216, 55238, 55243, 55291, 63744, 64109, 64112, 64217, 64256, 64262, 64275, 64279, 64285, 64285, 64287, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321, 64323, 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008, 65019, 65136, 65140, 65142, 65276, 65313, 65338, 65345, 65370, 65382, 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500, 65536, 65547, 65549, 65574, 65576, 65594, 65596, 65597, 65599, 65613, 65616, 65629, 65664, 65786, 65856, 65908, 66176, 66204, 66208, 66256, 66304, 66335, 66349, 66378, 66384, 66421, 66432, 66461, 66464, 66499, 66504, 66511, 66513, 66517, 66560, 66717, 66736, 66771, 66776, 66811, 66816, 66855, 66864, 66915, 67072, 67382, 67392, 67413, 67424, 67431, 67584, 67589, 67592, 67592, 67594, 67637, 67639, 67640, 67644, 67644, 67647, 67669, 67680, 67702, 67712, 67742, 67808, 67826, 67828, 67829, 67840, 67861, 67872, 67897, 67968, 68023, 68030, 68031, 68096, 68096, 68112, 68115, 68117, 68119, 68121, 68149, 68192, 68220, 68224, 68252, 68288, 68295, 68297, 68324, 68352, 68405, 68416, 68437, 68448, 68466, 68480, 68497, 68608, 68680, 68736, 68786, 68800, 68850, 68864, 68899, 69376, 69404, 69415, 69415, 69424, 69445, 69600, 69622, 69635, 69687, 69763, 69807, 69840, 69864, 69891, 69926, 69956, 69956, 69968, 70002, 70006, 70006, 70019, 70066, 70081, 70084, 70106, 70106, 70108, 70108, 70144, 70161, 70163, 70187, 70272, 70278, 70280, 70280, 70282, 70285, 70287, 70301, 70303, 70312, 70320, 70366, 70405, 70412, 70415, 70416, 70419, 70440, 70442, 70448, 70450, 70451, 70453, 70457, 70461, 70461, 70480, 70480, 70493, 70497, 70656, 70708, 70727, 70730, 70751, 70751, 70784, 70831, 70852, 70853, 70855, 70855, 71040, 71086, 71128, 71131, 71168, 71215, 71236, 71236, 71296, 71338, 71352, 71352, 71424, 71450, 71680, 71723, 71840, 71903, 71935, 71935, 72096, 72103, 72106, 72144, 72161, 72161, 72163, 72163, 72192, 72192, 72203, 72242, 72250, 72250, 72272, 72272, 72284, 72329, 72349, 72349, 72384, 72440, 72704, 72712, 72714, 72750, 72768, 72768, 72818, 72847, 72960, 72966, 72968, 72969, 72971, 73008, 73030, 73030, 73056, 73061, 73063, 73064, 73066, 73097, 73112, 73112, 73440, 73458, 73728, 74649, 74752, 74862, 74880, 75075, 77824, 78894, 82944, 83526, 92160, 92728, 92736, 92766, 92880, 92909, 92928, 92975, 92992, 92995, 93027, 93047, 93053, 93071, 93760, 93823, 93952, 94026, 94032, 94032, 94099, 94111, 94176, 94177, 94179, 94179, 94208, 100343, 100352, 101106, 110592, 110878, 110928, 110930, 110948, 110951, 110960, 111355, 113664, 113770, 113776, 113788, 113792, 113800, 113808, 113817, 119808, 119892, 119894, 119964, 119966, 119967, 119970, 119970, 119973, 119974, 119977, 119980, 119982, 119993, 119995, 119995, 119997, 120003, 120005, 120069, 120071, 120074, 120077, 120084, 120086, 120092, 120094, 120121, 120123, 120126, 120128, 120132, 120134, 120134, 120138, 120144, 120146, 120485, 120488, 120512, 120514, 120538, 120540, 120570, 120572, 120596, 120598, 120628, 120630, 120654, 120656, 120686, 120688, 120712, 120714, 120744, 120746, 120770, 120772, 120779, 123136, 123180, 123191, 123197, 123214, 123214, 123584, 123627, 124928, 125124, 125184, 125251, 125259, 125259, 126464, 126467, 126469, 126495, 126497, 126498, 126500, 126500, 126503, 126503, 126505, 126514, 126516, 126519, 126521, 126521, 126523, 126523, 126530, 126530, 126535, 126535, 126537, 126537, 126539, 126539, 126541, 126543, 126545, 126546, 126548, 126548, 126551, 126551, 126553, 126553, 126555, 126555, 126557, 126557, 126559, 126559, 126561, 126562, 126564, 126564, 126567, 126570, 126572, 126578, 126580, 126583, 126585, 126588, 126590, 126590, 126592, 126601, 126603, 126619, 126625, 126627, 126629, 126633, 126635, 126651, 131072, 173782, 173824, 177972, 177984, 178205, 178208, 183969, 183984, 191456, 194560, 195101];
     var unicodeESNextIdentifierPart = [48, 57, 65, 90, 95, 95, 97, 122, 170, 170, 181, 181, 183, 183, 186, 186, 192, 214, 216, 246, 248, 705, 710, 721, 736, 740, 748, 748, 750, 750, 768, 884, 886, 887, 890, 893, 895, 895, 902, 906, 908, 908, 910, 929, 931, 1013, 1015, 1153, 1155, 1159, 1162, 1327, 1329, 1366, 1369, 1369, 1376, 1416, 1425, 1469, 1471, 1471, 1473, 1474, 1476, 1477, 1479, 1479, 1488, 1514, 1519, 1522, 1552, 1562, 1568, 1641, 1646, 1747, 1749, 1756, 1759, 1768, 1770, 1788, 1791, 1791, 1808, 1866, 1869, 1969, 1984, 2037, 2042, 2042, 2045, 2045, 2048, 2093, 2112, 2139, 2144, 2154, 2208, 2228, 2230, 2237, 2259, 2273, 2275, 2403, 2406, 2415, 2417, 2435, 2437, 2444, 2447, 2448, 2451, 2472, 2474, 2480, 2482, 2482, 2486, 2489, 2492, 2500, 2503, 2504, 2507, 2510, 2519, 2519, 2524, 2525, 2527, 2531, 2534, 2545, 2556, 2556, 2558, 2558, 2561, 2563, 2565, 2570, 2575, 2576, 2579, 2600, 2602, 2608, 2610, 2611, 2613, 2614, 2616, 2617, 2620, 2620, 2622, 2626, 2631, 2632, 2635, 2637, 2641, 2641, 2649, 2652, 2654, 2654, 2662, 2677, 2689, 2691, 2693, 2701, 2703, 2705, 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2748, 2757, 2759, 2761, 2763, 2765, 2768, 2768, 2784, 2787, 2790, 2799, 2809, 2815, 2817, 2819, 2821, 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2869, 2873, 2876, 2884, 2887, 2888, 2891, 2893, 2902, 2903, 2908, 2909, 2911, 2915, 2918, 2927, 2929, 2929, 2946, 2947, 2949, 2954, 2958, 2960, 2962, 2965, 2969, 2970, 2972, 2972, 2974, 2975, 2979, 2980, 2984, 2986, 2990, 3001, 3006, 3010, 3014, 3016, 3018, 3021, 3024, 3024, 3031, 3031, 3046, 3055, 3072, 3084, 3086, 3088, 3090, 3112, 3114, 3129, 3133, 3140, 3142, 3144, 3146, 3149, 3157, 3158, 3160, 3162, 3168, 3171, 3174, 3183, 3200, 3203, 3205, 3212, 3214, 3216, 3218, 3240, 3242, 3251, 3253, 3257, 3260, 3268, 3270, 3272, 3274, 3277, 3285, 3286, 3294, 3294, 3296, 3299, 3302, 3311, 3313, 3314, 3328, 3331, 3333, 3340, 3342, 3344, 3346, 3396, 3398, 3400, 3402, 3406, 3412, 3415, 3423, 3427, 3430, 3439, 3450, 3455, 3458, 3459, 3461, 3478, 3482, 3505, 3507, 3515, 3517, 3517, 3520, 3526, 3530, 3530, 3535, 3540, 3542, 3542, 3544, 3551, 3558, 3567, 3570, 3571, 3585, 3642, 3648, 3662, 3664, 3673, 3713, 3714, 3716, 3716, 3718, 3722, 3724, 3747, 3749, 3749, 3751, 3773, 3776, 3780, 3782, 3782, 3784, 3789, 3792, 3801, 3804, 3807, 3840, 3840, 3864, 3865, 3872, 3881, 3893, 3893, 3895, 3895, 3897, 3897, 3902, 3911, 3913, 3948, 3953, 3972, 3974, 3991, 3993, 4028, 4038, 4038, 4096, 4169, 4176, 4253, 4256, 4293, 4295, 4295, 4301, 4301, 4304, 4346, 4348, 4680, 4682, 4685, 4688, 4694, 4696, 4696, 4698, 4701, 4704, 4744, 4746, 4749, 4752, 4784, 4786, 4789, 4792, 4798, 4800, 4800, 4802, 4805, 4808, 4822, 4824, 4880, 4882, 4885, 4888, 4954, 4957, 4959, 4969, 4977, 4992, 5007, 5024, 5109, 5112, 5117, 5121, 5740, 5743, 5759, 5761, 5786, 5792, 5866, 5870, 5880, 5888, 5900, 5902, 5908, 5920, 5940, 5952, 5971, 5984, 5996, 5998, 6000, 6002, 6003, 6016, 6099, 6103, 6103, 6108, 6109, 6112, 6121, 6155, 6157, 6160, 6169, 6176, 6264, 6272, 6314, 6320, 6389, 6400, 6430, 6432, 6443, 6448, 6459, 6470, 6509, 6512, 6516, 6528, 6571, 6576, 6601, 6608, 6618, 6656, 6683, 6688, 6750, 6752, 6780, 6783, 6793, 6800, 6809, 6823, 6823, 6832, 6845, 6912, 6987, 6992, 7001, 7019, 7027, 7040, 7155, 7168, 7223, 7232, 7241, 7245, 7293, 7296, 7304, 7312, 7354, 7357, 7359, 7376, 7378, 7380, 7418, 7424, 7673, 7675, 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025, 8027, 8027, 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130, 8132, 8134, 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188, 8255, 8256, 8276, 8276, 8305, 8305, 8319, 8319, 8336, 8348, 8400, 8412, 8417, 8417, 8421, 8432, 8450, 8450, 8455, 8455, 8458, 8467, 8469, 8469, 8472, 8477, 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8505, 8508, 8511, 8517, 8521, 8526, 8526, 8544, 8584, 11264, 11310, 11312, 11358, 11360, 11492, 11499, 11507, 11520, 11557, 11559, 11559, 11565, 11565, 11568, 11623, 11631, 11631, 11647, 11670, 11680, 11686, 11688, 11694, 11696, 11702, 11704, 11710, 11712, 11718, 11720, 11726, 11728, 11734, 11736, 11742, 11744, 11775, 12293, 12295, 12321, 12335, 12337, 12341, 12344, 12348, 12353, 12438, 12441, 12447, 12449, 12538, 12540, 12543, 12549, 12591, 12593, 12686, 12704, 12730, 12784, 12799, 13312, 19893, 19968, 40943, 40960, 42124, 42192, 42237, 42240, 42508, 42512, 42539, 42560, 42607, 42612, 42621, 42623, 42737, 42775, 42783, 42786, 42888, 42891, 42943, 42946, 42950, 42999, 43047, 43072, 43123, 43136, 43205, 43216, 43225, 43232, 43255, 43259, 43259, 43261, 43309, 43312, 43347, 43360, 43388, 43392, 43456, 43471, 43481, 43488, 43518, 43520, 43574, 43584, 43597, 43600, 43609, 43616, 43638, 43642, 43714, 43739, 43741, 43744, 43759, 43762, 43766, 43777, 43782, 43785, 43790, 43793, 43798, 43808, 43814, 43816, 43822, 43824, 43866, 43868, 43879, 43888, 44010, 44012, 44013, 44016, 44025, 44032, 55203, 55216, 55238, 55243, 55291, 63744, 64109, 64112, 64217, 64256, 64262, 64275, 64279, 64285, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321, 64323, 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008, 65019, 65024, 65039, 65056, 65071, 65075, 65076, 65101, 65103, 65136, 65140, 65142, 65276, 65296, 65305, 65313, 65338, 65343, 65343, 65345, 65370, 65382, 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500, 65536, 65547, 65549, 65574, 65576, 65594, 65596, 65597, 65599, 65613, 65616, 65629, 65664, 65786, 65856, 65908, 66045, 66045, 66176, 66204, 66208, 66256, 66272, 66272, 66304, 66335, 66349, 66378, 66384, 66426, 66432, 66461, 66464, 66499, 66504, 66511, 66513, 66517, 66560, 66717, 66720, 66729, 66736, 66771, 66776, 66811, 66816, 66855, 66864, 66915, 67072, 67382, 67392, 67413, 67424, 67431, 67584, 67589, 67592, 67592, 67594, 67637, 67639, 67640, 67644, 67644, 67647, 67669, 67680, 67702, 67712, 67742, 67808, 67826, 67828, 67829, 67840, 67861, 67872, 67897, 67968, 68023, 68030, 68031, 68096, 68099, 68101, 68102, 68108, 68115, 68117, 68119, 68121, 68149, 68152, 68154, 68159, 68159, 68192, 68220, 68224, 68252, 68288, 68295, 68297, 68326, 68352, 68405, 68416, 68437, 68448, 68466, 68480, 68497, 68608, 68680, 68736, 68786, 68800, 68850, 68864, 68903, 68912, 68921, 69376, 69404, 69415, 69415, 69424, 69456, 69600, 69622, 69632, 69702, 69734, 69743, 69759, 69818, 69840, 69864, 69872, 69881, 69888, 69940, 69942, 69951, 69956, 69958, 69968, 70003, 70006, 70006, 70016, 70084, 70089, 70092, 70096, 70106, 70108, 70108, 70144, 70161, 70163, 70199, 70206, 70206, 70272, 70278, 70280, 70280, 70282, 70285, 70287, 70301, 70303, 70312, 70320, 70378, 70384, 70393, 70400, 70403, 70405, 70412, 70415, 70416, 70419, 70440, 70442, 70448, 70450, 70451, 70453, 70457, 70459, 70468, 70471, 70472, 70475, 70477, 70480, 70480, 70487, 70487, 70493, 70499, 70502, 70508, 70512, 70516, 70656, 70730, 70736, 70745, 70750, 70751, 70784, 70853, 70855, 70855, 70864, 70873, 71040, 71093, 71096, 71104, 71128, 71133, 71168, 71232, 71236, 71236, 71248, 71257, 71296, 71352, 71360, 71369, 71424, 71450, 71453, 71467, 71472, 71481, 71680, 71738, 71840, 71913, 71935, 71935, 72096, 72103, 72106, 72151, 72154, 72161, 72163, 72164, 72192, 72254, 72263, 72263, 72272, 72345, 72349, 72349, 72384, 72440, 72704, 72712, 72714, 72758, 72760, 72768, 72784, 72793, 72818, 72847, 72850, 72871, 72873, 72886, 72960, 72966, 72968, 72969, 72971, 73014, 73018, 73018, 73020, 73021, 73023, 73031, 73040, 73049, 73056, 73061, 73063, 73064, 73066, 73102, 73104, 73105, 73107, 73112, 73120, 73129, 73440, 73462, 73728, 74649, 74752, 74862, 74880, 75075, 77824, 78894, 82944, 83526, 92160, 92728, 92736, 92766, 92768, 92777, 92880, 92909, 92912, 92916, 92928, 92982, 92992, 92995, 93008, 93017, 93027, 93047, 93053, 93071, 93760, 93823, 93952, 94026, 94031, 94087, 94095, 94111, 94176, 94177, 94179, 94179, 94208, 100343, 100352, 101106, 110592, 110878, 110928, 110930, 110948, 110951, 110960, 111355, 113664, 113770, 113776, 113788, 113792, 113800, 113808, 113817, 113821, 113822, 119141, 119145, 119149, 119154, 119163, 119170, 119173, 119179, 119210, 119213, 119362, 119364, 119808, 119892, 119894, 119964, 119966, 119967, 119970, 119970, 119973, 119974, 119977, 119980, 119982, 119993, 119995, 119995, 119997, 120003, 120005, 120069, 120071, 120074, 120077, 120084, 120086, 120092, 120094, 120121, 120123, 120126, 120128, 120132, 120134, 120134, 120138, 120144, 120146, 120485, 120488, 120512, 120514, 120538, 120540, 120570, 120572, 120596, 120598, 120628, 120630, 120654, 120656, 120686, 120688, 120712, 120714, 120744, 120746, 120770, 120772, 120779, 120782, 120831, 121344, 121398, 121403, 121452, 121461, 121461, 121476, 121476, 121499, 121503, 121505, 121519, 122880, 122886, 122888, 122904, 122907, 122913, 122915, 122916, 122918, 122922, 123136, 123180, 123184, 123197, 123200, 123209, 123214, 123214, 123584, 123641, 124928, 125124, 125136, 125142, 125184, 125259, 125264, 125273, 126464, 126467, 126469, 126495, 126497, 126498, 126500, 126500, 126503, 126503, 126505, 126514, 126516, 126519, 126521, 126521, 126523, 126523, 126530, 126530, 126535, 126535, 126537, 126537, 126539, 126539, 126541, 126543, 126545, 126546, 126548, 126548, 126551, 126551, 126553, 126553, 126555, 126555, 126557, 126557, 126559, 126559, 126561, 126562, 126564, 126564, 126567, 126570, 126572, 126578, 126580, 126583, 126585, 126588, 126590, 126590, 126592, 126601, 126603, 126619, 126625, 126627, 126629, 126633, 126635, 126651, 131072, 173782, 173824, 177972, 177984, 178205, 178208, 183969, 183984, 191456, 194560, 195101, 917760, 917999];
     /**
-     * Test for whether a single line comment's text contains a directive.
+     * Test for whether a single line comment with leading whitespace trimmed's text contains a directive.
      */
-    var commentDirectiveRegExSingleLine = /^\s*\/\/\/?\s*@(ts-expect-error|ts-ignore)/;
+    var commentDirectiveRegExSingleLine = /^\/\/\/?\s*@(ts-expect-error|ts-ignore)/;
     /**
-     * Test for whether a multi-line comment's last line contains a directive.
+     * Test for whether a multi-line comment with leading whitespace trimmed's last line contains a directive.
      */
-    var commentDirectiveRegExMultiLine = /^\s*(?:\/|\*)*\s*@(ts-expect-error|ts-ignore)/;
+    var commentDirectiveRegExMultiLine = /^(?:\/|\*)*\s*@(ts-expect-error|ts-ignore)/;
     function lookupInUnicodeMap(code, map) {
         // Bail out quickly if it couldn't possibly be in the map.
         if (code < map[0]) {
@@ -10063,8 +10373,8 @@
             hasExtendedUnicodeEscape: function () { return (tokenFlags & 8 /* ExtendedUnicodeEscape */) !== 0; },
             hasPrecedingLineBreak: function () { return (tokenFlags & 1 /* PrecedingLineBreak */) !== 0; },
             hasPrecedingJSDocComment: function () { return (tokenFlags & 2 /* PrecedingJSDocComment */) !== 0; },
-            isIdentifier: function () { return token === 78 /* Identifier */ || token > 115 /* LastReservedWord */; },
-            isReservedWord: function () { return token >= 80 /* FirstReservedWord */ && token <= 115 /* LastReservedWord */; },
+            isIdentifier: function () { return token === 79 /* Identifier */ || token > 116 /* LastReservedWord */; },
+            isReservedWord: function () { return token >= 81 /* FirstReservedWord */ && token <= 116 /* LastReservedWord */; },
             isUnterminated: function () { return (tokenFlags & 4 /* Unterminated */) !== 0; },
             getCommentDirectives: function () { return commentDirectives; },
             getNumericLiteralFlags: function () { return tokenFlags & 1008 /* NumericLiteralFlags */; },
@@ -10079,6 +10389,7 @@
             reScanJsxAttributeValue: reScanJsxAttributeValue,
             reScanJsxToken: reScanJsxToken,
             reScanLessThanToken: reScanLessThanToken,
+            reScanHashToken: reScanHashToken,
             reScanQuestionToken: reScanQuestionToken,
             reScanInvalidIdentifier: reScanInvalidIdentifier,
             scanJsxToken: scanJsxToken,
@@ -10589,7 +10900,7 @@
                     }
                 }
             }
-            return token = 78 /* Identifier */;
+            return token = 79 /* Identifier */;
         }
         function scanBinaryOrOctalDigits(base) {
             var value = "";
@@ -10738,19 +11049,19 @@
                         return token = scanTemplateAndSetTokenValue(/* isTaggedTemplate */ false);
                     case 37 /* percent */:
                         if (text.charCodeAt(pos + 1) === 61 /* equals */) {
-                            return pos += 2, token = 68 /* PercentEqualsToken */;
+                            return pos += 2, token = 69 /* PercentEqualsToken */;
                         }
                         pos++;
                         return token = 44 /* PercentToken */;
                     case 38 /* ampersand */:
                         if (text.charCodeAt(pos + 1) === 38 /* ampersand */) {
                             if (text.charCodeAt(pos + 2) === 61 /* equals */) {
-                                return pos += 3, token = 75 /* AmpersandAmpersandEqualsToken */;
+                                return pos += 3, token = 76 /* AmpersandAmpersandEqualsToken */;
                             }
                             return pos += 2, token = 55 /* AmpersandAmpersandToken */;
                         }
                         if (text.charCodeAt(pos + 1) === 61 /* equals */) {
-                            return pos += 2, token = 72 /* AmpersandEqualsToken */;
+                            return pos += 2, token = 73 /* AmpersandEqualsToken */;
                         }
                         pos++;
                         return token = 50 /* AmpersandToken */;
@@ -10762,11 +11073,11 @@
                         return token = 21 /* CloseParenToken */;
                     case 42 /* asterisk */:
                         if (text.charCodeAt(pos + 1) === 61 /* equals */) {
-                            return pos += 2, token = 65 /* AsteriskEqualsToken */;
+                            return pos += 2, token = 66 /* AsteriskEqualsToken */;
                         }
                         if (text.charCodeAt(pos + 1) === 42 /* asterisk */) {
                             if (text.charCodeAt(pos + 2) === 61 /* equals */) {
-                                return pos += 3, token = 66 /* AsteriskAsteriskEqualsToken */;
+                                return pos += 3, token = 67 /* AsteriskAsteriskEqualsToken */;
                             }
                             return pos += 2, token = 42 /* AsteriskAsteriskToken */;
                         }
@@ -10782,7 +11093,7 @@
                             return pos += 2, token = 45 /* PlusPlusToken */;
                         }
                         if (text.charCodeAt(pos + 1) === 61 /* equals */) {
-                            return pos += 2, token = 63 /* PlusEqualsToken */;
+                            return pos += 2, token = 64 /* PlusEqualsToken */;
                         }
                         pos++;
                         return token = 39 /* PlusToken */;
@@ -10794,7 +11105,7 @@
                             return pos += 2, token = 46 /* MinusMinusToken */;
                         }
                         if (text.charCodeAt(pos + 1) === 61 /* equals */) {
-                            return pos += 2, token = 64 /* MinusEqualsToken */;
+                            return pos += 2, token = 65 /* MinusEqualsToken */;
                         }
                         pos++;
                         return token = 40 /* MinusToken */;
@@ -10862,7 +11173,7 @@
                             }
                         }
                         if (text.charCodeAt(pos + 1) === 61 /* equals */) {
-                            return pos += 2, token = 67 /* SlashEqualsToken */;
+                            return pos += 2, token = 68 /* SlashEqualsToken */;
                         }
                         pos++;
                         return token = 43 /* SlashToken */;
@@ -10939,7 +11250,7 @@
                         }
                         if (text.charCodeAt(pos + 1) === 60 /* lessThan */) {
                             if (text.charCodeAt(pos + 2) === 61 /* equals */) {
-                                return pos += 3, token = 69 /* LessThanLessThanEqualsToken */;
+                                return pos += 3, token = 70 /* LessThanLessThanEqualsToken */;
                             }
                             return pos += 2, token = 47 /* LessThanLessThanToken */;
                         }
@@ -10973,7 +11284,7 @@
                             return pos += 2, token = 38 /* EqualsGreaterThanToken */;
                         }
                         pos++;
-                        return token = 62 /* EqualsToken */;
+                        return token = 63 /* EqualsToken */;
                     case 62 /* greaterThan */:
                         if (isConflictMarkerTrivia(text, pos)) {
                             pos = scanConflictMarkerTrivia(text, pos, error);
@@ -10992,7 +11303,7 @@
                         }
                         if (text.charCodeAt(pos + 1) === 63 /* question */) {
                             if (text.charCodeAt(pos + 2) === 61 /* equals */) {
-                                return pos += 3, token = 76 /* QuestionQuestionEqualsToken */;
+                                return pos += 3, token = 77 /* QuestionQuestionEqualsToken */;
                             }
                             return pos += 2, token = 60 /* QuestionQuestionToken */;
                         }
@@ -11006,7 +11317,7 @@
                         return token = 23 /* CloseBracketToken */;
                     case 94 /* caret */:
                         if (text.charCodeAt(pos + 1) === 61 /* equals */) {
-                            return pos += 2, token = 77 /* CaretEqualsToken */;
+                            return pos += 2, token = 78 /* CaretEqualsToken */;
                         }
                         pos++;
                         return token = 52 /* CaretToken */;
@@ -11025,12 +11336,12 @@
                         }
                         if (text.charCodeAt(pos + 1) === 124 /* bar */) {
                             if (text.charCodeAt(pos + 2) === 61 /* equals */) {
-                                return pos += 3, token = 74 /* BarBarEqualsToken */;
+                                return pos += 3, token = 75 /* BarBarEqualsToken */;
                             }
                             return pos += 2, token = 56 /* BarBarToken */;
                         }
                         if (text.charCodeAt(pos + 1) === 61 /* equals */) {
-                            return pos += 2, token = 73 /* BarEqualsToken */;
+                            return pos += 2, token = 74 /* BarEqualsToken */;
                         }
                         pos++;
                         return token = 51 /* BarToken */;
@@ -11067,21 +11378,15 @@
                             pos++;
                             return token = 0 /* Unknown */;
                         }
-                        pos++;
-                        if (isIdentifierStart(ch = text.charCodeAt(pos), languageVersion)) {
+                        if (isIdentifierStart(codePointAt(text, pos + 1), languageVersion)) {
                             pos++;
-                            while (pos < end && isIdentifierPart(ch = text.charCodeAt(pos), languageVersion))
-                                pos++;
-                            tokenValue = text.substring(tokenPos, pos);
-                            if (ch === 92 /* backslash */) {
-                                tokenValue += scanIdentifierParts();
-                            }
+                            scanIdentifier(codePointAt(text, pos), languageVersion);
                         }
                         else {
-                            tokenValue = "#";
-                            error(ts.Diagnostics.Invalid_character);
+                            tokenValue = String.fromCharCode(codePointAt(text, pos));
+                            error(ts.Diagnostics.Invalid_character, pos++, charSize(ch));
                         }
-                        return token = 79 /* PrivateIdentifier */;
+                        return token = 80 /* PrivateIdentifier */;
                     default:
                         var identifierKind = scanIdentifier(ch, languageVersion);
                         if (identifierKind) {
@@ -11096,8 +11401,9 @@
                             pos += charSize(ch);
                             continue;
                         }
-                        error(ts.Diagnostics.Invalid_character);
-                        pos += charSize(ch);
+                        var size = charSize(ch);
+                        error(ts.Diagnostics.Invalid_character, pos, size);
+                        pos += size;
                         return token = 0 /* Unknown */;
                 }
             }
@@ -11132,12 +11438,12 @@
                 if (text.charCodeAt(pos) === 62 /* greaterThan */) {
                     if (text.charCodeAt(pos + 1) === 62 /* greaterThan */) {
                         if (text.charCodeAt(pos + 2) === 61 /* equals */) {
-                            return pos += 3, token = 71 /* GreaterThanGreaterThanGreaterThanEqualsToken */;
+                            return pos += 3, token = 72 /* GreaterThanGreaterThanGreaterThanEqualsToken */;
                         }
                         return pos += 2, token = 49 /* GreaterThanGreaterThanGreaterThanToken */;
                     }
                     if (text.charCodeAt(pos + 1) === 61 /* equals */) {
-                        return pos += 2, token = 70 /* GreaterThanGreaterThanEqualsToken */;
+                        return pos += 2, token = 71 /* GreaterThanGreaterThanEqualsToken */;
                     }
                     pos++;
                     return token = 48 /* GreaterThanGreaterThanToken */;
@@ -11150,12 +11456,12 @@
             return token;
         }
         function reScanAsteriskEqualsToken() {
-            ts.Debug.assert(token === 65 /* AsteriskEqualsToken */, "'reScanAsteriskEqualsToken' should only be called on a '*='");
+            ts.Debug.assert(token === 66 /* AsteriskEqualsToken */, "'reScanAsteriskEqualsToken' should only be called on a '*='");
             pos = tokenPos + 1;
-            return token = 62 /* EqualsToken */;
+            return token = 63 /* EqualsToken */;
         }
         function reScanSlashToken() {
-            if (token === 43 /* SlashToken */ || token === 67 /* SlashEqualsToken */) {
+            if (token === 43 /* SlashToken */ || token === 68 /* SlashEqualsToken */) {
                 var p = tokenPos + 1;
                 var inEscape = false;
                 var inCharacterClass = false;
@@ -11205,7 +11511,7 @@
             return token;
         }
         function appendIfCommentDirective(commentDirectives, text, commentDirectiveRegEx, lineStart) {
-            var type = getDirectiveFromComment(text, commentDirectiveRegEx);
+            var type = getDirectiveFromComment(ts.trimStringStart(text), commentDirectiveRegEx);
             if (type === undefined) {
                 return commentDirectives;
             }
@@ -11251,6 +11557,13 @@
             }
             return token;
         }
+        function reScanHashToken() {
+            if (token === 80 /* PrivateIdentifier */) {
+                pos = tokenPos + 1;
+                return token = 62 /* HashToken */;
+            }
+            return token;
+        }
         function reScanQuestionToken() {
             ts.Debug.assert(token === 60 /* QuestionQuestionToken */, "'reScanQuestionToken' should only be called on a '??'");
             pos = tokenPos + 1;
@@ -11339,7 +11652,7 @@
                         tokenValue += ":";
                         pos++;
                         namespaceSeparator = true;
-                        token = 78 /* Identifier */; // swap from keyword kind to identifier kind
+                        token = 79 /* Identifier */; // swap from keyword kind to identifier kind
                         continue;
                     }
                     var oldPos = pos;
@@ -11414,13 +11727,15 @@
                 case 62 /* greaterThan */:
                     return token = 31 /* GreaterThanToken */;
                 case 61 /* equals */:
-                    return token = 62 /* EqualsToken */;
+                    return token = 63 /* EqualsToken */;
                 case 44 /* comma */:
                     return token = 27 /* CommaToken */;
                 case 46 /* dot */:
                     return token = 24 /* DotToken */;
                 case 96 /* backtick */:
                     return token = 61 /* BacktickToken */;
+                case 35 /* hash */:
+                    return token = 62 /* HashToken */;
                 case 92 /* backslash */:
                     pos--;
                     var extendedCookedChar = peekExtendedUnicodeEscape();
@@ -11816,9 +12131,9 @@
     }
     ts.collapseTextChangeRangesAcrossMultipleVersions = collapseTextChangeRangesAcrossMultipleVersions;
     function getTypeParameterOwner(d) {
-        if (d && d.kind === 160 /* TypeParameter */) {
+        if (d && d.kind === 161 /* TypeParameter */) {
             for (var current = d; current; current = current.parent) {
-                if (isFunctionLike(current) || isClassLike(current) || current.kind === 254 /* InterfaceDeclaration */) {
+                if (isFunctionLike(current) || isClassLike(current) || current.kind === 256 /* InterfaceDeclaration */) {
                     return current;
                 }
             }
@@ -11826,7 +12141,7 @@
     }
     ts.getTypeParameterOwner = getTypeParameterOwner;
     function isParameterPropertyDeclaration(node, parent) {
-        return ts.hasSyntacticModifier(node, 16476 /* ParameterPropertyModifier */) && parent.kind === 167 /* Constructor */;
+        return ts.hasSyntacticModifier(node, 16476 /* ParameterPropertyModifier */) && parent.kind === 169 /* Constructor */;
     }
     ts.isParameterPropertyDeclaration = isParameterPropertyDeclaration;
     function isEmptyBindingPattern(node) {
@@ -11856,14 +12171,14 @@
             node = walkUpBindingElementsAndPatterns(node);
         }
         var flags = getFlags(node);
-        if (node.kind === 250 /* VariableDeclaration */) {
+        if (node.kind === 252 /* VariableDeclaration */) {
             node = node.parent;
         }
-        if (node && node.kind === 251 /* VariableDeclarationList */) {
+        if (node && node.kind === 253 /* VariableDeclarationList */) {
             flags |= getFlags(node);
             node = node.parent;
         }
-        if (node && node.kind === 233 /* VariableStatement */) {
+        if (node && node.kind === 235 /* VariableStatement */) {
             flags |= getFlags(node);
         }
         return flags;
@@ -12036,30 +12351,30 @@
         }
         // Covers remaining cases (returning undefined if none match).
         switch (hostNode.kind) {
-            case 233 /* VariableStatement */:
+            case 235 /* VariableStatement */:
                 if (hostNode.declarationList && hostNode.declarationList.declarations[0]) {
                     return getDeclarationIdentifier(hostNode.declarationList.declarations[0]);
                 }
                 break;
-            case 234 /* ExpressionStatement */:
+            case 236 /* ExpressionStatement */:
                 var expr = hostNode.expression;
-                if (expr.kind === 217 /* BinaryExpression */ && expr.operatorToken.kind === 62 /* EqualsToken */) {
+                if (expr.kind === 219 /* BinaryExpression */ && expr.operatorToken.kind === 63 /* EqualsToken */) {
                     expr = expr.left;
                 }
                 switch (expr.kind) {
-                    case 202 /* PropertyAccessExpression */:
+                    case 204 /* PropertyAccessExpression */:
                         return expr.name;
-                    case 203 /* ElementAccessExpression */:
+                    case 205 /* ElementAccessExpression */:
                         var arg = expr.argumentExpression;
                         if (ts.isIdentifier(arg)) {
                             return arg;
                         }
                 }
                 break;
-            case 208 /* ParenthesizedExpression */: {
+            case 210 /* ParenthesizedExpression */: {
                 return getDeclarationIdentifier(hostNode.expression);
             }
-            case 246 /* LabeledStatement */: {
+            case 248 /* LabeledStatement */: {
                 if (isDeclaration(hostNode.statement) || isExpression(hostNode.statement)) {
                     return getDeclarationIdentifier(hostNode.statement);
                 }
@@ -12094,18 +12409,18 @@
     /** @internal */
     function getNonAssignedNameOfDeclaration(declaration) {
         switch (declaration.kind) {
-            case 78 /* Identifier */:
+            case 79 /* Identifier */:
                 return declaration;
-            case 337 /* JSDocPropertyTag */:
-            case 330 /* JSDocParameterTag */: {
+            case 342 /* JSDocPropertyTag */:
+            case 335 /* JSDocParameterTag */: {
                 var name = declaration.name;
-                if (name.kind === 158 /* QualifiedName */) {
+                if (name.kind === 159 /* QualifiedName */) {
                     return name.right;
                 }
                 break;
             }
-            case 204 /* CallExpression */:
-            case 217 /* BinaryExpression */: {
+            case 206 /* CallExpression */:
+            case 219 /* BinaryExpression */: {
                 var expr_1 = declaration;
                 switch (ts.getAssignmentDeclarationKind(expr_1)) {
                     case 1 /* ExportsProperty */:
@@ -12121,15 +12436,15 @@
                         return undefined;
                 }
             }
-            case 335 /* JSDocTypedefTag */:
+            case 340 /* JSDocTypedefTag */:
                 return getNameOfJSDocTypedef(declaration);
-            case 329 /* JSDocEnumTag */:
+            case 334 /* JSDocEnumTag */:
                 return nameForNamelessJSDocTypedef(declaration);
-            case 267 /* ExportAssignment */: {
+            case 269 /* ExportAssignment */: {
                 var expression = declaration.expression;
                 return ts.isIdentifier(expression) ? expression : undefined;
             }
-            case 203 /* ElementAccessExpression */:
+            case 205 /* ElementAccessExpression */:
                 var expr = declaration;
                 if (ts.isBindableStaticElementAccessExpression(expr)) {
                     return expr.argumentExpression;
@@ -12423,7 +12738,8 @@
     function getTextOfJSDocComment(comment) {
         return typeof comment === "string" ? comment
             : comment === null || comment === void 0 ? void 0 : comment.map(function (c) {
-                return c.kind === 313 /* JSDocText */ ? c.text : "{@link " + (c.name ? ts.entityNameToString(c.name) + " " : "") + c.text + "}";
+                // TODO: Other kinds here
+                return c.kind === 316 /* JSDocText */ ? c.text : "{@link " + (c.name ? ts.entityNameToString(c.name) + " " : "") + c.text + "}";
             }).join("");
     }
     ts.getTextOfJSDocComment = getTextOfJSDocComment;
@@ -12436,7 +12752,7 @@
             return ts.emptyArray;
         }
         if (ts.isJSDocTypeAlias(node)) {
-            ts.Debug.assert(node.parent.kind === 312 /* JSDocComment */);
+            ts.Debug.assert(node.parent.kind === 315 /* JSDocComment */);
             return ts.flatMap(node.parent.tags, function (tag) { return ts.isJSDocTemplateTag(tag) ? tag.typeParameters : undefined; });
         }
         if (node.typeParameters) {
@@ -12463,12 +12779,12 @@
     ts.getEffectiveConstraintOfTypeParameter = getEffectiveConstraintOfTypeParameter;
     // #region
     function isMemberName(node) {
-        return node.kind === 78 /* Identifier */ || node.kind === 79 /* PrivateIdentifier */;
+        return node.kind === 79 /* Identifier */ || node.kind === 80 /* PrivateIdentifier */;
     }
     ts.isMemberName = isMemberName;
     /* @internal */
     function isGetOrSetAccessorDeclaration(node) {
-        return node.kind === 169 /* SetAccessor */ || node.kind === 168 /* GetAccessor */;
+        return node.kind === 171 /* SetAccessor */ || node.kind === 170 /* GetAccessor */;
     }
     ts.isGetOrSetAccessorDeclaration = isGetOrSetAccessorDeclaration;
     function isPropertyAccessChain(node) {
@@ -12486,10 +12802,10 @@
     function isOptionalChain(node) {
         var kind = node.kind;
         return !!(node.flags & 32 /* OptionalChain */) &&
-            (kind === 202 /* PropertyAccessExpression */
-                || kind === 203 /* ElementAccessExpression */
-                || kind === 204 /* CallExpression */
-                || kind === 226 /* NonNullExpression */);
+            (kind === 204 /* PropertyAccessExpression */
+                || kind === 205 /* ElementAccessExpression */
+                || kind === 206 /* CallExpression */
+                || kind === 228 /* NonNullExpression */);
     }
     ts.isOptionalChain = isOptionalChain;
     /* @internal */
@@ -12524,7 +12840,7 @@
     }
     ts.isOutermostOptionalChain = isOutermostOptionalChain;
     function isNullishCoalesce(node) {
-        return node.kind === 217 /* BinaryExpression */ && node.operatorToken.kind === 60 /* QuestionQuestionToken */;
+        return node.kind === 219 /* BinaryExpression */ && node.operatorToken.kind === 60 /* QuestionQuestionToken */;
     }
     ts.isNullishCoalesce = isNullishCoalesce;
     function isConstTypeReference(node) {
@@ -12541,17 +12857,17 @@
     }
     ts.isNonNullChain = isNonNullChain;
     function isBreakOrContinueStatement(node) {
-        return node.kind === 242 /* BreakStatement */ || node.kind === 241 /* ContinueStatement */;
+        return node.kind === 244 /* BreakStatement */ || node.kind === 243 /* ContinueStatement */;
     }
     ts.isBreakOrContinueStatement = isBreakOrContinueStatement;
     function isNamedExportBindings(node) {
-        return node.kind === 270 /* NamespaceExport */ || node.kind === 269 /* NamedExports */;
+        return node.kind === 272 /* NamespaceExport */ || node.kind === 271 /* NamedExports */;
     }
     ts.isNamedExportBindings = isNamedExportBindings;
     function isUnparsedTextLike(node) {
         switch (node.kind) {
-            case 295 /* UnparsedText */:
-            case 296 /* UnparsedInternalText */:
+            case 297 /* UnparsedText */:
+            case 298 /* UnparsedInternalText */:
                 return true;
             default:
                 return false;
@@ -12560,12 +12876,12 @@
     ts.isUnparsedTextLike = isUnparsedTextLike;
     function isUnparsedNode(node) {
         return isUnparsedTextLike(node) ||
-            node.kind === 293 /* UnparsedPrologue */ ||
-            node.kind === 297 /* UnparsedSyntheticReference */;
+            node.kind === 295 /* UnparsedPrologue */ ||
+            node.kind === 299 /* UnparsedSyntheticReference */;
     }
     ts.isUnparsedNode = isUnparsedNode;
     function isJSDocPropertyLikeTag(node) {
-        return node.kind === 337 /* JSDocPropertyTag */ || node.kind === 330 /* JSDocParameterTag */;
+        return node.kind === 342 /* JSDocPropertyTag */ || node.kind === 335 /* JSDocParameterTag */;
     }
     ts.isJSDocPropertyLikeTag = isJSDocPropertyLikeTag;
     // #endregion
@@ -12581,7 +12897,7 @@
     ts.isNode = isNode;
     /* @internal */
     function isNodeKind(kind) {
-        return kind >= 158 /* FirstNode */;
+        return kind >= 159 /* FirstNode */;
     }
     ts.isNodeKind = isNodeKind;
     /**
@@ -12590,7 +12906,7 @@
      * Literals are considered tokens, except TemplateLiteral, but does include TemplateHead/Middle/Tail.
      */
     function isTokenKind(kind) {
-        return kind >= 0 /* FirstToken */ && kind <= 157 /* LastToken */;
+        return kind >= 0 /* FirstToken */ && kind <= 158 /* LastToken */;
     }
     ts.isTokenKind = isTokenKind;
     /**
@@ -12640,13 +12956,13 @@
     ts.isImportOrExportSpecifier = isImportOrExportSpecifier;
     function isTypeOnlyImportOrExportDeclaration(node) {
         switch (node.kind) {
-            case 266 /* ImportSpecifier */:
-            case 271 /* ExportSpecifier */:
+            case 268 /* ImportSpecifier */:
+            case 273 /* ExportSpecifier */:
                 return node.parent.parent.isTypeOnly;
-            case 264 /* NamespaceImport */:
+            case 266 /* NamespaceImport */:
                 return node.parent.isTypeOnly;
-            case 263 /* ImportClause */:
-            case 261 /* ImportEqualsDeclaration */:
+            case 265 /* ImportClause */:
+            case 263 /* ImportEqualsDeclaration */:
                 return node.isTypeOnly;
             default:
                 return false;
@@ -12678,18 +12994,18 @@
     /* @internal */
     function isModifierKind(token) {
         switch (token) {
-            case 125 /* AbstractKeyword */:
-            case 129 /* AsyncKeyword */:
-            case 84 /* ConstKeyword */:
-            case 133 /* DeclareKeyword */:
-            case 87 /* DefaultKeyword */:
-            case 92 /* ExportKeyword */:
-            case 122 /* PublicKeyword */:
-            case 120 /* PrivateKeyword */:
-            case 121 /* ProtectedKeyword */:
-            case 142 /* ReadonlyKeyword */:
-            case 123 /* StaticKeyword */:
-            case 156 /* OverrideKeyword */:
+            case 126 /* AbstractKeyword */:
+            case 130 /* AsyncKeyword */:
+            case 85 /* ConstKeyword */:
+            case 134 /* DeclareKeyword */:
+            case 88 /* DefaultKeyword */:
+            case 93 /* ExportKeyword */:
+            case 123 /* PublicKeyword */:
+            case 121 /* PrivateKeyword */:
+            case 122 /* ProtectedKeyword */:
+            case 143 /* ReadonlyKeyword */:
+            case 124 /* StaticKeyword */:
+            case 157 /* OverrideKeyword */:
                 return true;
         }
         return false;
@@ -12702,7 +13018,7 @@
     ts.isParameterPropertyModifier = isParameterPropertyModifier;
     /* @internal */
     function isClassMemberModifier(idToken) {
-        return isParameterPropertyModifier(idToken) || idToken === 123 /* StaticKeyword */ || idToken === 156 /* OverrideKeyword */;
+        return isParameterPropertyModifier(idToken) || idToken === 124 /* StaticKeyword */ || idToken === 157 /* OverrideKeyword */;
     }
     ts.isClassMemberModifier = isClassMemberModifier;
     function isModifier(node) {
@@ -12711,24 +13027,24 @@
     ts.isModifier = isModifier;
     function isEntityName(node) {
         var kind = node.kind;
-        return kind === 158 /* QualifiedName */
-            || kind === 78 /* Identifier */;
+        return kind === 159 /* QualifiedName */
+            || kind === 79 /* Identifier */;
     }
     ts.isEntityName = isEntityName;
     function isPropertyName(node) {
         var kind = node.kind;
-        return kind === 78 /* Identifier */
-            || kind === 79 /* PrivateIdentifier */
+        return kind === 79 /* Identifier */
+            || kind === 80 /* PrivateIdentifier */
             || kind === 10 /* StringLiteral */
             || kind === 8 /* NumericLiteral */
-            || kind === 159 /* ComputedPropertyName */;
+            || kind === 160 /* ComputedPropertyName */;
     }
     ts.isPropertyName = isPropertyName;
     function isBindingName(node) {
         var kind = node.kind;
-        return kind === 78 /* Identifier */
-            || kind === 197 /* ObjectBindingPattern */
-            || kind === 198 /* ArrayBindingPattern */;
+        return kind === 79 /* Identifier */
+            || kind === 199 /* ObjectBindingPattern */
+            || kind === 200 /* ArrayBindingPattern */;
     }
     ts.isBindingName = isBindingName;
     // Functions
@@ -12737,19 +13053,29 @@
     }
     ts.isFunctionLike = isFunctionLike;
     /* @internal */
+    function isFunctionLikeOrClassStaticBlockDeclaration(node) {
+        return !!node && (isFunctionLikeKind(node.kind) || ts.isClassStaticBlockDeclaration(node));
+    }
+    ts.isFunctionLikeOrClassStaticBlockDeclaration = isFunctionLikeOrClassStaticBlockDeclaration;
+    /* @internal */
     function isFunctionLikeDeclaration(node) {
         return node && isFunctionLikeDeclarationKind(node.kind);
     }
     ts.isFunctionLikeDeclaration = isFunctionLikeDeclaration;
+    /* @internal */
+    function isBooleanLiteral(node) {
+        return node.kind === 110 /* TrueKeyword */ || node.kind === 95 /* FalseKeyword */;
+    }
+    ts.isBooleanLiteral = isBooleanLiteral;
     function isFunctionLikeDeclarationKind(kind) {
         switch (kind) {
-            case 252 /* FunctionDeclaration */:
-            case 166 /* MethodDeclaration */:
-            case 167 /* Constructor */:
-            case 168 /* GetAccessor */:
-            case 169 /* SetAccessor */:
-            case 209 /* FunctionExpression */:
-            case 210 /* ArrowFunction */:
+            case 254 /* FunctionDeclaration */:
+            case 167 /* MethodDeclaration */:
+            case 169 /* Constructor */:
+            case 170 /* GetAccessor */:
+            case 171 /* SetAccessor */:
+            case 211 /* FunctionExpression */:
+            case 212 /* ArrowFunction */:
                 return true;
             default:
                 return false;
@@ -12758,14 +13084,14 @@
     /* @internal */
     function isFunctionLikeKind(kind) {
         switch (kind) {
-            case 165 /* MethodSignature */:
-            case 170 /* CallSignature */:
-            case 315 /* JSDocSignature */:
-            case 171 /* ConstructSignature */:
-            case 172 /* IndexSignature */:
-            case 175 /* FunctionType */:
-            case 309 /* JSDocFunctionType */:
-            case 176 /* ConstructorType */:
+            case 166 /* MethodSignature */:
+            case 172 /* CallSignature */:
+            case 318 /* JSDocSignature */:
+            case 173 /* ConstructSignature */:
+            case 174 /* IndexSignature */:
+            case 177 /* FunctionType */:
+            case 312 /* JSDocFunctionType */:
+            case 178 /* ConstructorType */:
                 return true;
             default:
                 return isFunctionLikeDeclarationKind(kind);
@@ -12780,29 +13106,30 @@
     // Classes
     function isClassElement(node) {
         var kind = node.kind;
-        return kind === 167 /* Constructor */
-            || kind === 164 /* PropertyDeclaration */
-            || kind === 166 /* MethodDeclaration */
-            || kind === 168 /* GetAccessor */
-            || kind === 169 /* SetAccessor */
-            || kind === 172 /* IndexSignature */
-            || kind === 230 /* SemicolonClassElement */;
+        return kind === 169 /* Constructor */
+            || kind === 165 /* PropertyDeclaration */
+            || kind === 167 /* MethodDeclaration */
+            || kind === 170 /* GetAccessor */
+            || kind === 171 /* SetAccessor */
+            || kind === 174 /* IndexSignature */
+            || kind === 168 /* ClassStaticBlockDeclaration */
+            || kind === 232 /* SemicolonClassElement */;
     }
     ts.isClassElement = isClassElement;
     function isClassLike(node) {
-        return node && (node.kind === 253 /* ClassDeclaration */ || node.kind === 222 /* ClassExpression */);
+        return node && (node.kind === 255 /* ClassDeclaration */ || node.kind === 224 /* ClassExpression */);
     }
     ts.isClassLike = isClassLike;
     function isAccessor(node) {
-        return node && (node.kind === 168 /* GetAccessor */ || node.kind === 169 /* SetAccessor */);
+        return node && (node.kind === 170 /* GetAccessor */ || node.kind === 171 /* SetAccessor */);
     }
     ts.isAccessor = isAccessor;
     /* @internal */
     function isMethodOrAccessor(node) {
         switch (node.kind) {
-            case 166 /* MethodDeclaration */:
-            case 168 /* GetAccessor */:
-            case 169 /* SetAccessor */:
+            case 167 /* MethodDeclaration */:
+            case 170 /* GetAccessor */:
+            case 171 /* SetAccessor */:
                 return true;
             default:
                 return false;
@@ -12812,11 +13139,11 @@
     // Type members
     function isTypeElement(node) {
         var kind = node.kind;
-        return kind === 171 /* ConstructSignature */
-            || kind === 170 /* CallSignature */
-            || kind === 163 /* PropertySignature */
-            || kind === 165 /* MethodSignature */
-            || kind === 172 /* IndexSignature */;
+        return kind === 173 /* ConstructSignature */
+            || kind === 172 /* CallSignature */
+            || kind === 164 /* PropertySignature */
+            || kind === 166 /* MethodSignature */
+            || kind === 174 /* IndexSignature */;
     }
     ts.isTypeElement = isTypeElement;
     function isClassOrTypeElement(node) {
@@ -12825,12 +13152,12 @@
     ts.isClassOrTypeElement = isClassOrTypeElement;
     function isObjectLiteralElementLike(node) {
         var kind = node.kind;
-        return kind === 289 /* PropertyAssignment */
-            || kind === 290 /* ShorthandPropertyAssignment */
-            || kind === 291 /* SpreadAssignment */
-            || kind === 166 /* MethodDeclaration */
-            || kind === 168 /* GetAccessor */
-            || kind === 169 /* SetAccessor */;
+        return kind === 291 /* PropertyAssignment */
+            || kind === 292 /* ShorthandPropertyAssignment */
+            || kind === 293 /* SpreadAssignment */
+            || kind === 167 /* MethodDeclaration */
+            || kind === 170 /* GetAccessor */
+            || kind === 171 /* SetAccessor */;
     }
     ts.isObjectLiteralElementLike = isObjectLiteralElementLike;
     // Type
@@ -12845,8 +13172,8 @@
     ts.isTypeNode = isTypeNode;
     function isFunctionOrConstructorTypeNode(node) {
         switch (node.kind) {
-            case 175 /* FunctionType */:
-            case 176 /* ConstructorType */:
+            case 177 /* FunctionType */:
+            case 178 /* ConstructorType */:
                 return true;
         }
         return false;
@@ -12857,8 +13184,8 @@
     function isBindingPattern(node) {
         if (node) {
             var kind = node.kind;
-            return kind === 198 /* ArrayBindingPattern */
-                || kind === 197 /* ObjectBindingPattern */;
+            return kind === 200 /* ArrayBindingPattern */
+                || kind === 199 /* ObjectBindingPattern */;
         }
         return false;
     }
@@ -12866,15 +13193,15 @@
     /* @internal */
     function isAssignmentPattern(node) {
         var kind = node.kind;
-        return kind === 200 /* ArrayLiteralExpression */
-            || kind === 201 /* ObjectLiteralExpression */;
+        return kind === 202 /* ArrayLiteralExpression */
+            || kind === 203 /* ObjectLiteralExpression */;
     }
     ts.isAssignmentPattern = isAssignmentPattern;
     /* @internal */
     function isArrayBindingElement(node) {
         var kind = node.kind;
-        return kind === 199 /* BindingElement */
-            || kind === 223 /* OmittedExpression */;
+        return kind === 201 /* BindingElement */
+            || kind === 225 /* OmittedExpression */;
     }
     ts.isArrayBindingElement = isArrayBindingElement;
     /**
@@ -12883,9 +13210,9 @@
     /* @internal */
     function isDeclarationBindingElement(bindingElement) {
         switch (bindingElement.kind) {
-            case 250 /* VariableDeclaration */:
-            case 161 /* Parameter */:
-            case 199 /* BindingElement */:
+            case 252 /* VariableDeclaration */:
+            case 162 /* Parameter */:
+            case 201 /* BindingElement */:
                 return true;
         }
         return false;
@@ -12906,21 +13233,33 @@
     /* @internal */
     function isObjectBindingOrAssignmentPattern(node) {
         switch (node.kind) {
-            case 197 /* ObjectBindingPattern */:
-            case 201 /* ObjectLiteralExpression */:
+            case 199 /* ObjectBindingPattern */:
+            case 203 /* ObjectLiteralExpression */:
                 return true;
         }
         return false;
     }
     ts.isObjectBindingOrAssignmentPattern = isObjectBindingOrAssignmentPattern;
+    /* @internal */
+    function isObjectBindingOrAssignmentElement(node) {
+        switch (node.kind) {
+            case 201 /* BindingElement */:
+            case 291 /* PropertyAssignment */: // AssignmentProperty
+            case 292 /* ShorthandPropertyAssignment */: // AssignmentProperty
+            case 293 /* SpreadAssignment */: // AssignmentRestProperty
+                return true;
+        }
+        return false;
+    }
+    ts.isObjectBindingOrAssignmentElement = isObjectBindingOrAssignmentElement;
     /**
      * Determines whether a node is an ArrayBindingOrAssignmentPattern
      */
     /* @internal */
     function isArrayBindingOrAssignmentPattern(node) {
         switch (node.kind) {
-            case 198 /* ArrayBindingPattern */:
-            case 200 /* ArrayLiteralExpression */:
+            case 200 /* ArrayBindingPattern */:
+            case 202 /* ArrayLiteralExpression */:
                 return true;
         }
         return false;
@@ -12929,26 +13268,26 @@
     /* @internal */
     function isPropertyAccessOrQualifiedNameOrImportTypeNode(node) {
         var kind = node.kind;
-        return kind === 202 /* PropertyAccessExpression */
-            || kind === 158 /* QualifiedName */
-            || kind === 196 /* ImportType */;
+        return kind === 204 /* PropertyAccessExpression */
+            || kind === 159 /* QualifiedName */
+            || kind === 198 /* ImportType */;
     }
     ts.isPropertyAccessOrQualifiedNameOrImportTypeNode = isPropertyAccessOrQualifiedNameOrImportTypeNode;
     // Expression
     function isPropertyAccessOrQualifiedName(node) {
         var kind = node.kind;
-        return kind === 202 /* PropertyAccessExpression */
-            || kind === 158 /* QualifiedName */;
+        return kind === 204 /* PropertyAccessExpression */
+            || kind === 159 /* QualifiedName */;
     }
     ts.isPropertyAccessOrQualifiedName = isPropertyAccessOrQualifiedName;
     function isCallLikeExpression(node) {
         switch (node.kind) {
-            case 276 /* JsxOpeningElement */:
-            case 275 /* JsxSelfClosingElement */:
-            case 204 /* CallExpression */:
-            case 205 /* NewExpression */:
-            case 206 /* TaggedTemplateExpression */:
-            case 162 /* Decorator */:
+            case 278 /* JsxOpeningElement */:
+            case 277 /* JsxSelfClosingElement */:
+            case 206 /* CallExpression */:
+            case 207 /* NewExpression */:
+            case 208 /* TaggedTemplateExpression */:
+            case 163 /* Decorator */:
                 return true;
             default:
                 return false;
@@ -12956,12 +13295,12 @@
     }
     ts.isCallLikeExpression = isCallLikeExpression;
     function isCallOrNewExpression(node) {
-        return node.kind === 204 /* CallExpression */ || node.kind === 205 /* NewExpression */;
+        return node.kind === 206 /* CallExpression */ || node.kind === 207 /* NewExpression */;
     }
     ts.isCallOrNewExpression = isCallOrNewExpression;
     function isTemplateLiteral(node) {
         var kind = node.kind;
-        return kind === 219 /* TemplateExpression */
+        return kind === 221 /* TemplateExpression */
             || kind === 14 /* NoSubstitutionTemplateLiteral */;
     }
     ts.isTemplateLiteral = isTemplateLiteral;
@@ -12972,34 +13311,34 @@
     ts.isLeftHandSideExpression = isLeftHandSideExpression;
     function isLeftHandSideExpressionKind(kind) {
         switch (kind) {
-            case 202 /* PropertyAccessExpression */:
-            case 203 /* ElementAccessExpression */:
-            case 205 /* NewExpression */:
-            case 204 /* CallExpression */:
-            case 274 /* JsxElement */:
-            case 275 /* JsxSelfClosingElement */:
-            case 278 /* JsxFragment */:
-            case 206 /* TaggedTemplateExpression */:
-            case 200 /* ArrayLiteralExpression */:
-            case 208 /* ParenthesizedExpression */:
-            case 201 /* ObjectLiteralExpression */:
-            case 222 /* ClassExpression */:
-            case 209 /* FunctionExpression */:
-            case 78 /* Identifier */:
+            case 204 /* PropertyAccessExpression */:
+            case 205 /* ElementAccessExpression */:
+            case 207 /* NewExpression */:
+            case 206 /* CallExpression */:
+            case 276 /* JsxElement */:
+            case 277 /* JsxSelfClosingElement */:
+            case 280 /* JsxFragment */:
+            case 208 /* TaggedTemplateExpression */:
+            case 202 /* ArrayLiteralExpression */:
+            case 210 /* ParenthesizedExpression */:
+            case 203 /* ObjectLiteralExpression */:
+            case 224 /* ClassExpression */:
+            case 211 /* FunctionExpression */:
+            case 79 /* Identifier */:
             case 13 /* RegularExpressionLiteral */:
             case 8 /* NumericLiteral */:
             case 9 /* BigIntLiteral */:
             case 10 /* StringLiteral */:
             case 14 /* NoSubstitutionTemplateLiteral */:
-            case 219 /* TemplateExpression */:
-            case 94 /* FalseKeyword */:
-            case 103 /* NullKeyword */:
-            case 107 /* ThisKeyword */:
-            case 109 /* TrueKeyword */:
-            case 105 /* SuperKeyword */:
-            case 226 /* NonNullExpression */:
-            case 227 /* MetaProperty */:
-            case 99 /* ImportKeyword */: // technically this is only an Expression if it's in a CallExpression
+            case 221 /* TemplateExpression */:
+            case 95 /* FalseKeyword */:
+            case 104 /* NullKeyword */:
+            case 108 /* ThisKeyword */:
+            case 110 /* TrueKeyword */:
+            case 106 /* SuperKeyword */:
+            case 228 /* NonNullExpression */:
+            case 229 /* MetaProperty */:
+            case 100 /* ImportKeyword */: // technically this is only an Expression if it's in a CallExpression
                 return true;
             default:
                 return false;
@@ -13012,13 +13351,13 @@
     ts.isUnaryExpression = isUnaryExpression;
     function isUnaryExpressionKind(kind) {
         switch (kind) {
-            case 215 /* PrefixUnaryExpression */:
-            case 216 /* PostfixUnaryExpression */:
-            case 211 /* DeleteExpression */:
-            case 212 /* TypeOfExpression */:
-            case 213 /* VoidExpression */:
-            case 214 /* AwaitExpression */:
-            case 207 /* TypeAssertionExpression */:
+            case 217 /* PrefixUnaryExpression */:
+            case 218 /* PostfixUnaryExpression */:
+            case 213 /* DeleteExpression */:
+            case 214 /* TypeOfExpression */:
+            case 215 /* VoidExpression */:
+            case 216 /* AwaitExpression */:
+            case 209 /* TypeAssertionExpression */:
                 return true;
             default:
                 return isLeftHandSideExpressionKind(kind);
@@ -13027,9 +13366,9 @@
     /* @internal */
     function isUnaryExpressionWithWrite(expr) {
         switch (expr.kind) {
-            case 216 /* PostfixUnaryExpression */:
+            case 218 /* PostfixUnaryExpression */:
                 return true;
-            case 215 /* PrefixUnaryExpression */:
+            case 217 /* PrefixUnaryExpression */:
                 return expr.operator === 45 /* PlusPlusToken */ ||
                     expr.operator === 46 /* MinusMinusToken */;
             default:
@@ -13048,15 +13387,15 @@
     ts.isExpression = isExpression;
     function isExpressionKind(kind) {
         switch (kind) {
-            case 218 /* ConditionalExpression */:
-            case 220 /* YieldExpression */:
-            case 210 /* ArrowFunction */:
-            case 217 /* BinaryExpression */:
-            case 221 /* SpreadElement */:
-            case 225 /* AsExpression */:
-            case 223 /* OmittedExpression */:
-            case 341 /* CommaListExpression */:
-            case 340 /* PartiallyEmittedExpression */:
+            case 220 /* ConditionalExpression */:
+            case 222 /* YieldExpression */:
+            case 212 /* ArrowFunction */:
+            case 219 /* BinaryExpression */:
+            case 223 /* SpreadElement */:
+            case 227 /* AsExpression */:
+            case 225 /* OmittedExpression */:
+            case 346 /* CommaListExpression */:
+            case 345 /* PartiallyEmittedExpression */:
                 return true;
             default:
                 return isUnaryExpressionKind(kind);
@@ -13064,8 +13403,8 @@
     }
     function isAssertionExpression(node) {
         var kind = node.kind;
-        return kind === 207 /* TypeAssertionExpression */
-            || kind === 225 /* AsExpression */;
+        return kind === 209 /* TypeAssertionExpression */
+            || kind === 227 /* AsExpression */;
     }
     ts.isAssertionExpression = isAssertionExpression;
     /* @internal */
@@ -13076,13 +13415,13 @@
     ts.isNotEmittedOrPartiallyEmittedNode = isNotEmittedOrPartiallyEmittedNode;
     function isIterationStatement(node, lookInLabeledStatements) {
         switch (node.kind) {
-            case 238 /* ForStatement */:
-            case 239 /* ForInStatement */:
-            case 240 /* ForOfStatement */:
-            case 236 /* DoStatement */:
-            case 237 /* WhileStatement */:
+            case 240 /* ForStatement */:
+            case 241 /* ForInStatement */:
+            case 242 /* ForOfStatement */:
+            case 238 /* DoStatement */:
+            case 239 /* WhileStatement */:
                 return true;
-            case 246 /* LabeledStatement */:
+            case 248 /* LabeledStatement */:
                 return lookInLabeledStatements && isIterationStatement(node.statement, lookInLabeledStatements);
         }
         return false;
@@ -13111,7 +13450,7 @@
     ts.isExternalModuleIndicator = isExternalModuleIndicator;
     /* @internal */
     function isForInOrOfStatement(node) {
-        return node.kind === 239 /* ForInStatement */ || node.kind === 240 /* ForOfStatement */;
+        return node.kind === 241 /* ForInStatement */ || node.kind === 242 /* ForOfStatement */;
     }
     ts.isForInOrOfStatement = isForInOrOfStatement;
     // Element
@@ -13135,114 +13474,115 @@
     /* @internal */
     function isModuleBody(node) {
         var kind = node.kind;
-        return kind === 258 /* ModuleBlock */
-            || kind === 257 /* ModuleDeclaration */
-            || kind === 78 /* Identifier */;
+        return kind === 260 /* ModuleBlock */
+            || kind === 259 /* ModuleDeclaration */
+            || kind === 79 /* Identifier */;
     }
     ts.isModuleBody = isModuleBody;
     /* @internal */
     function isNamespaceBody(node) {
         var kind = node.kind;
-        return kind === 258 /* ModuleBlock */
-            || kind === 257 /* ModuleDeclaration */;
+        return kind === 260 /* ModuleBlock */
+            || kind === 259 /* ModuleDeclaration */;
     }
     ts.isNamespaceBody = isNamespaceBody;
     /* @internal */
     function isJSDocNamespaceBody(node) {
         var kind = node.kind;
-        return kind === 78 /* Identifier */
-            || kind === 257 /* ModuleDeclaration */;
+        return kind === 79 /* Identifier */
+            || kind === 259 /* ModuleDeclaration */;
     }
     ts.isJSDocNamespaceBody = isJSDocNamespaceBody;
     /* @internal */
     function isNamedImportBindings(node) {
         var kind = node.kind;
-        return kind === 265 /* NamedImports */
-            || kind === 264 /* NamespaceImport */;
+        return kind === 267 /* NamedImports */
+            || kind === 266 /* NamespaceImport */;
     }
     ts.isNamedImportBindings = isNamedImportBindings;
     /* @internal */
     function isModuleOrEnumDeclaration(node) {
-        return node.kind === 257 /* ModuleDeclaration */ || node.kind === 256 /* EnumDeclaration */;
+        return node.kind === 259 /* ModuleDeclaration */ || node.kind === 258 /* EnumDeclaration */;
     }
     ts.isModuleOrEnumDeclaration = isModuleOrEnumDeclaration;
     function isDeclarationKind(kind) {
-        return kind === 210 /* ArrowFunction */
-            || kind === 199 /* BindingElement */
-            || kind === 253 /* ClassDeclaration */
-            || kind === 222 /* ClassExpression */
-            || kind === 167 /* Constructor */
-            || kind === 256 /* EnumDeclaration */
-            || kind === 292 /* EnumMember */
-            || kind === 271 /* ExportSpecifier */
-            || kind === 252 /* FunctionDeclaration */
-            || kind === 209 /* FunctionExpression */
-            || kind === 168 /* GetAccessor */
-            || kind === 263 /* ImportClause */
-            || kind === 261 /* ImportEqualsDeclaration */
-            || kind === 266 /* ImportSpecifier */
-            || kind === 254 /* InterfaceDeclaration */
-            || kind === 281 /* JsxAttribute */
-            || kind === 166 /* MethodDeclaration */
-            || kind === 165 /* MethodSignature */
-            || kind === 257 /* ModuleDeclaration */
-            || kind === 260 /* NamespaceExportDeclaration */
-            || kind === 264 /* NamespaceImport */
-            || kind === 270 /* NamespaceExport */
-            || kind === 161 /* Parameter */
-            || kind === 289 /* PropertyAssignment */
-            || kind === 164 /* PropertyDeclaration */
-            || kind === 163 /* PropertySignature */
-            || kind === 169 /* SetAccessor */
-            || kind === 290 /* ShorthandPropertyAssignment */
-            || kind === 255 /* TypeAliasDeclaration */
-            || kind === 160 /* TypeParameter */
-            || kind === 250 /* VariableDeclaration */
-            || kind === 335 /* JSDocTypedefTag */
-            || kind === 328 /* JSDocCallbackTag */
-            || kind === 337 /* JSDocPropertyTag */;
+        return kind === 212 /* ArrowFunction */
+            || kind === 201 /* BindingElement */
+            || kind === 255 /* ClassDeclaration */
+            || kind === 224 /* ClassExpression */
+            || kind === 168 /* ClassStaticBlockDeclaration */
+            || kind === 169 /* Constructor */
+            || kind === 258 /* EnumDeclaration */
+            || kind === 294 /* EnumMember */
+            || kind === 273 /* ExportSpecifier */
+            || kind === 254 /* FunctionDeclaration */
+            || kind === 211 /* FunctionExpression */
+            || kind === 170 /* GetAccessor */
+            || kind === 265 /* ImportClause */
+            || kind === 263 /* ImportEqualsDeclaration */
+            || kind === 268 /* ImportSpecifier */
+            || kind === 256 /* InterfaceDeclaration */
+            || kind === 283 /* JsxAttribute */
+            || kind === 167 /* MethodDeclaration */
+            || kind === 166 /* MethodSignature */
+            || kind === 259 /* ModuleDeclaration */
+            || kind === 262 /* NamespaceExportDeclaration */
+            || kind === 266 /* NamespaceImport */
+            || kind === 272 /* NamespaceExport */
+            || kind === 162 /* Parameter */
+            || kind === 291 /* PropertyAssignment */
+            || kind === 165 /* PropertyDeclaration */
+            || kind === 164 /* PropertySignature */
+            || kind === 171 /* SetAccessor */
+            || kind === 292 /* ShorthandPropertyAssignment */
+            || kind === 257 /* TypeAliasDeclaration */
+            || kind === 161 /* TypeParameter */
+            || kind === 252 /* VariableDeclaration */
+            || kind === 340 /* JSDocTypedefTag */
+            || kind === 333 /* JSDocCallbackTag */
+            || kind === 342 /* JSDocPropertyTag */;
     }
     function isDeclarationStatementKind(kind) {
-        return kind === 252 /* FunctionDeclaration */
-            || kind === 272 /* MissingDeclaration */
-            || kind === 253 /* ClassDeclaration */
-            || kind === 254 /* InterfaceDeclaration */
-            || kind === 255 /* TypeAliasDeclaration */
-            || kind === 256 /* EnumDeclaration */
-            || kind === 257 /* ModuleDeclaration */
-            || kind === 262 /* ImportDeclaration */
-            || kind === 261 /* ImportEqualsDeclaration */
-            || kind === 268 /* ExportDeclaration */
-            || kind === 267 /* ExportAssignment */
-            || kind === 260 /* NamespaceExportDeclaration */;
+        return kind === 254 /* FunctionDeclaration */
+            || kind === 274 /* MissingDeclaration */
+            || kind === 255 /* ClassDeclaration */
+            || kind === 256 /* InterfaceDeclaration */
+            || kind === 257 /* TypeAliasDeclaration */
+            || kind === 258 /* EnumDeclaration */
+            || kind === 259 /* ModuleDeclaration */
+            || kind === 264 /* ImportDeclaration */
+            || kind === 263 /* ImportEqualsDeclaration */
+            || kind === 270 /* ExportDeclaration */
+            || kind === 269 /* ExportAssignment */
+            || kind === 262 /* NamespaceExportDeclaration */;
     }
     function isStatementKindButNotDeclarationKind(kind) {
-        return kind === 242 /* BreakStatement */
-            || kind === 241 /* ContinueStatement */
-            || kind === 249 /* DebuggerStatement */
-            || kind === 236 /* DoStatement */
-            || kind === 234 /* ExpressionStatement */
-            || kind === 232 /* EmptyStatement */
-            || kind === 239 /* ForInStatement */
-            || kind === 240 /* ForOfStatement */
-            || kind === 238 /* ForStatement */
-            || kind === 235 /* IfStatement */
-            || kind === 246 /* LabeledStatement */
-            || kind === 243 /* ReturnStatement */
-            || kind === 245 /* SwitchStatement */
-            || kind === 247 /* ThrowStatement */
-            || kind === 248 /* TryStatement */
-            || kind === 233 /* VariableStatement */
-            || kind === 237 /* WhileStatement */
-            || kind === 244 /* WithStatement */
-            || kind === 339 /* NotEmittedStatement */
-            || kind === 343 /* EndOfDeclarationMarker */
-            || kind === 342 /* MergeDeclarationMarker */;
+        return kind === 244 /* BreakStatement */
+            || kind === 243 /* ContinueStatement */
+            || kind === 251 /* DebuggerStatement */
+            || kind === 238 /* DoStatement */
+            || kind === 236 /* ExpressionStatement */
+            || kind === 234 /* EmptyStatement */
+            || kind === 241 /* ForInStatement */
+            || kind === 242 /* ForOfStatement */
+            || kind === 240 /* ForStatement */
+            || kind === 237 /* IfStatement */
+            || kind === 248 /* LabeledStatement */
+            || kind === 245 /* ReturnStatement */
+            || kind === 247 /* SwitchStatement */
+            || kind === 249 /* ThrowStatement */
+            || kind === 250 /* TryStatement */
+            || kind === 235 /* VariableStatement */
+            || kind === 239 /* WhileStatement */
+            || kind === 246 /* WithStatement */
+            || kind === 344 /* NotEmittedStatement */
+            || kind === 348 /* EndOfDeclarationMarker */
+            || kind === 347 /* MergeDeclarationMarker */;
     }
     /* @internal */
     function isDeclaration(node) {
-        if (node.kind === 160 /* TypeParameter */) {
-            return (node.parent && node.parent.kind !== 334 /* JSDocTemplateTag */) || ts.isInJSFile(node);
+        if (node.kind === 161 /* TypeParameter */) {
+            return (node.parent && node.parent.kind !== 339 /* JSDocTemplateTag */) || ts.isInJSFile(node);
         }
         return isDeclarationKind(node.kind);
     }
@@ -13269,10 +13609,10 @@
     }
     ts.isStatement = isStatement;
     function isBlockStatement(node) {
-        if (node.kind !== 231 /* Block */)
+        if (node.kind !== 233 /* Block */)
             return false;
         if (node.parent !== undefined) {
-            if (node.parent.kind === 248 /* TryStatement */ || node.parent.kind === 288 /* CatchClause */) {
+            if (node.parent.kind === 250 /* TryStatement */ || node.parent.kind === 290 /* CatchClause */) {
                 return false;
             }
         }
@@ -13286,77 +13626,77 @@
         var kind = node.kind;
         return isStatementKindButNotDeclarationKind(kind)
             || isDeclarationStatementKind(kind)
-            || kind === 231 /* Block */;
+            || kind === 233 /* Block */;
     }
     ts.isStatementOrBlock = isStatementOrBlock;
     // Module references
     /* @internal */
     function isModuleReference(node) {
         var kind = node.kind;
-        return kind === 273 /* ExternalModuleReference */
-            || kind === 158 /* QualifiedName */
-            || kind === 78 /* Identifier */;
+        return kind === 275 /* ExternalModuleReference */
+            || kind === 159 /* QualifiedName */
+            || kind === 79 /* Identifier */;
     }
     ts.isModuleReference = isModuleReference;
     // JSX
     /* @internal */
     function isJsxTagNameExpression(node) {
         var kind = node.kind;
-        return kind === 107 /* ThisKeyword */
-            || kind === 78 /* Identifier */
-            || kind === 202 /* PropertyAccessExpression */;
+        return kind === 108 /* ThisKeyword */
+            || kind === 79 /* Identifier */
+            || kind === 204 /* PropertyAccessExpression */;
     }
     ts.isJsxTagNameExpression = isJsxTagNameExpression;
     /* @internal */
     function isJsxChild(node) {
         var kind = node.kind;
-        return kind === 274 /* JsxElement */
-            || kind === 284 /* JsxExpression */
-            || kind === 275 /* JsxSelfClosingElement */
+        return kind === 276 /* JsxElement */
+            || kind === 286 /* JsxExpression */
+            || kind === 277 /* JsxSelfClosingElement */
             || kind === 11 /* JsxText */
-            || kind === 278 /* JsxFragment */;
+            || kind === 280 /* JsxFragment */;
     }
     ts.isJsxChild = isJsxChild;
     /* @internal */
     function isJsxAttributeLike(node) {
         var kind = node.kind;
-        return kind === 281 /* JsxAttribute */
-            || kind === 283 /* JsxSpreadAttribute */;
+        return kind === 283 /* JsxAttribute */
+            || kind === 285 /* JsxSpreadAttribute */;
     }
     ts.isJsxAttributeLike = isJsxAttributeLike;
     /* @internal */
     function isStringLiteralOrJsxExpression(node) {
         var kind = node.kind;
         return kind === 10 /* StringLiteral */
-            || kind === 284 /* JsxExpression */;
+            || kind === 286 /* JsxExpression */;
     }
     ts.isStringLiteralOrJsxExpression = isStringLiteralOrJsxExpression;
     function isJsxOpeningLikeElement(node) {
         var kind = node.kind;
-        return kind === 276 /* JsxOpeningElement */
-            || kind === 275 /* JsxSelfClosingElement */;
+        return kind === 278 /* JsxOpeningElement */
+            || kind === 277 /* JsxSelfClosingElement */;
     }
     ts.isJsxOpeningLikeElement = isJsxOpeningLikeElement;
     // Clauses
     function isCaseOrDefaultClause(node) {
         var kind = node.kind;
-        return kind === 285 /* CaseClause */
-            || kind === 286 /* DefaultClause */;
+        return kind === 287 /* CaseClause */
+            || kind === 288 /* DefaultClause */;
     }
     ts.isCaseOrDefaultClause = isCaseOrDefaultClause;
     // JSDoc
     /** True if node is of some JSDoc syntax kind. */
     /* @internal */
     function isJSDocNode(node) {
-        return node.kind >= 302 /* FirstJSDocNode */ && node.kind <= 337 /* LastJSDocNode */;
+        return node.kind >= 304 /* FirstJSDocNode */ && node.kind <= 342 /* LastJSDocNode */;
     }
     ts.isJSDocNode = isJSDocNode;
     /** True if node is of a kind that may contain comment text. */
     function isJSDocCommentContainingNode(node) {
-        return node.kind === 312 /* JSDocComment */
-            || node.kind === 311 /* JSDocNamepathType */
-            || node.kind === 313 /* JSDocText */
-            || node.kind === 316 /* JSDocLink */
+        return node.kind === 315 /* JSDocComment */
+            || node.kind === 314 /* JSDocNamepathType */
+            || node.kind === 316 /* JSDocText */
+            || isJSDocLinkLike(node)
             || isJSDocTag(node)
             || ts.isJSDocTypeLiteral(node)
             || ts.isJSDocSignature(node);
@@ -13365,15 +13705,15 @@
     // TODO: determine what this does before making it public.
     /* @internal */
     function isJSDocTag(node) {
-        return node.kind >= 317 /* FirstJSDocTagNode */ && node.kind <= 337 /* LastJSDocTagNode */;
+        return node.kind >= 322 /* FirstJSDocTagNode */ && node.kind <= 342 /* LastJSDocTagNode */;
     }
     ts.isJSDocTag = isJSDocTag;
     function isSetAccessor(node) {
-        return node.kind === 169 /* SetAccessor */;
+        return node.kind === 171 /* SetAccessor */;
     }
     ts.isSetAccessor = isSetAccessor;
     function isGetAccessor(node) {
-        return node.kind === 168 /* GetAccessor */;
+        return node.kind === 170 /* GetAccessor */;
     }
     ts.isGetAccessor = isGetAccessor;
     /** True if has jsdoc nodes attached to it. */
@@ -13399,13 +13739,13 @@
     /** True if has initializer node attached to it. */
     function hasOnlyExpressionInitializer(node) {
         switch (node.kind) {
-            case 250 /* VariableDeclaration */:
-            case 161 /* Parameter */:
-            case 199 /* BindingElement */:
-            case 163 /* PropertySignature */:
-            case 164 /* PropertyDeclaration */:
-            case 289 /* PropertyAssignment */:
-            case 292 /* EnumMember */:
+            case 252 /* VariableDeclaration */:
+            case 162 /* Parameter */:
+            case 201 /* BindingElement */:
+            case 164 /* PropertySignature */:
+            case 165 /* PropertyDeclaration */:
+            case 291 /* PropertyAssignment */:
+            case 294 /* EnumMember */:
                 return true;
             default:
                 return false;
@@ -13413,12 +13753,12 @@
     }
     ts.hasOnlyExpressionInitializer = hasOnlyExpressionInitializer;
     function isObjectLiteralElement(node) {
-        return node.kind === 281 /* JsxAttribute */ || node.kind === 283 /* JsxSpreadAttribute */ || isObjectLiteralElementLike(node);
+        return node.kind === 283 /* JsxAttribute */ || node.kind === 285 /* JsxSpreadAttribute */ || isObjectLiteralElementLike(node);
     }
     ts.isObjectLiteralElement = isObjectLiteralElement;
     /* @internal */
     function isTypeReferenceType(node) {
-        return node.kind === 174 /* TypeReference */ || node.kind === 224 /* ExpressionWithTypeArguments */;
+        return node.kind === 176 /* TypeReference */ || node.kind === 226 /* ExpressionWithTypeArguments */;
     }
     ts.isTypeReferenceType = isTypeReferenceType;
     var MAX_SMI_X86 = 1073741823;
@@ -13450,6 +13790,10 @@
         return node.kind === 10 /* StringLiteral */ || node.kind === 14 /* NoSubstitutionTemplateLiteral */;
     }
     ts.isStringLiteralLike = isStringLiteralLike;
+    function isJSDocLinkLike(node) {
+        return node.kind === 319 /* JSDocLink */ || node.kind === 320 /* JSDocLinkCode */ || node.kind === 321 /* JSDocLinkPlain */;
+    }
+    ts.isJSDocLinkLike = isJSDocLinkLike;
     // #endregion
 })(ts || (ts = {}));
 /* @internal */
@@ -13534,7 +13878,7 @@
             increaseIndent: ts.noop,
             decreaseIndent: ts.noop,
             clear: function () { return str = ""; },
-            trackSymbol: ts.noop,
+            trackSymbol: function () { return false; },
             reportInaccessibleThisError: ts.noop,
             reportInaccessibleUniqueSymbolError: ts.noop,
             reportPrivateInBaseOfClassExpression: ts.noop,
@@ -13546,11 +13890,19 @@
     }
     ts.changesAffectModuleResolution = changesAffectModuleResolution;
     function optionsHaveModuleResolutionChanges(oldOptions, newOptions) {
-        return ts.moduleResolutionOptionDeclarations.some(function (o) {
+        return optionsHaveChanges(oldOptions, newOptions, ts.moduleResolutionOptionDeclarations);
+    }
+    ts.optionsHaveModuleResolutionChanges = optionsHaveModuleResolutionChanges;
+    function changesAffectingProgramStructure(oldOptions, newOptions) {
+        return optionsHaveChanges(oldOptions, newOptions, ts.optionsAffectingProgramStructure);
+    }
+    ts.changesAffectingProgramStructure = changesAffectingProgramStructure;
+    function optionsHaveChanges(oldOptions, newOptions, optionDeclarations) {
+        return oldOptions !== newOptions && optionDeclarations.some(function (o) {
             return !isJsonEqual(getCompilerOptionValue(oldOptions, o), getCompilerOptionValue(newOptions, o));
         });
     }
-    ts.optionsHaveModuleResolutionChanges = optionsHaveModuleResolutionChanges;
+    ts.optionsHaveChanges = optionsHaveChanges;
     function forEachAncestor(node, callback) {
         while (true) {
             var res = callback(node);
@@ -13701,19 +14053,23 @@
         }
     }
     function getSourceFileOfNode(node) {
-        while (node && node.kind !== 298 /* SourceFile */) {
+        while (node && node.kind !== 300 /* SourceFile */) {
             node = node.parent;
         }
         return node;
     }
     ts.getSourceFileOfNode = getSourceFileOfNode;
+    function getSourceFileOfModule(module) {
+        return getSourceFileOfNode(module.valueDeclaration || getNonAugmentationDeclaration(module));
+    }
+    ts.getSourceFileOfModule = getSourceFileOfModule;
     function isStatementWithLocals(node) {
         switch (node.kind) {
-            case 231 /* Block */:
-            case 259 /* CaseBlock */:
-            case 238 /* ForStatement */:
-            case 239 /* ForInStatement */:
-            case 240 /* ForOfStatement */:
+            case 233 /* Block */:
+            case 261 /* CaseBlock */:
+            case 240 /* ForStatement */:
+            case 241 /* ForInStatement */:
+            case 242 /* ForOfStatement */:
                 return true;
         }
         return false;
@@ -13798,7 +14154,7 @@
                 break;
             }
         }
-        to.splice.apply(to, __spreadArray([statementIndex, 0], from));
+        to.splice.apply(to, __spreadArray([statementIndex, 0], from, false));
         return to;
     }
     function insertStatementAfterPrologue(to, statement, isPrologueDirective) {
@@ -13851,10 +14207,10 @@
             commentPos + 2 < commentEnd &&
             text.charCodeAt(commentPos + 2) === 47 /* slash */) {
             var textSubStr = text.substring(commentPos, commentEnd);
-            return textSubStr.match(ts.fullTripleSlashReferencePathRegEx) ||
-                textSubStr.match(ts.fullTripleSlashAMDReferencePathRegEx) ||
-                textSubStr.match(fullTripleSlashReferenceTypeReferenceDirectiveRegEx) ||
-                textSubStr.match(defaultLibReferenceRegEx) ?
+            return ts.fullTripleSlashReferencePathRegEx.test(textSubStr) ||
+                ts.fullTripleSlashAMDReferencePathRegEx.test(textSubStr) ||
+                fullTripleSlashReferenceTypeReferenceDirectiveRegEx.test(textSubStr) ||
+                defaultLibReferenceRegEx.test(textSubStr) ?
                 true : false;
         }
         return false;
@@ -13909,7 +14265,7 @@
         // the syntax list itself considers them as normal trivia. Therefore if we simply skip
         // trivia for the list, we may have skipped the JSDocComment as well. So we should process its
         // first child to determine the actual position of its first token.
-        if (node.kind === 338 /* SyntaxList */ && node._children.length > 0) {
+        if (node.kind === 343 /* SyntaxList */ && node._children.length > 0) {
             return getTokenPosOfNode(node._children[0], sourceFile, includeJsDoc);
         }
         return ts.skipTrivia((sourceFile || getSourceFileOfNode(node)).text, node.pos, 
@@ -13944,7 +14300,7 @@
         var text = sourceText.substring(includeTrivia ? node.pos : ts.skipTrivia(sourceText, node.pos), node.end);
         if (isJSDocTypeExpressionOrChild(node)) {
             // strip space + asterisk at line start
-            text = text.replace(/(^|\r?\n|\r)\s*\*\s*/g, "$1");
+            text = text.split(/\r\n|\n|\r/).map(function (line) { return ts.trimStringStart(line.replace(/^\s*\*/, "")); }).join("\n");
         }
         return text;
     }
@@ -14052,6 +14408,7 @@
         GetLiteralTextFlags[GetLiteralTextFlags["AllowNumericSeparator"] = 8] = "AllowNumericSeparator";
     })(GetLiteralTextFlags = ts.GetLiteralTextFlags || (ts.GetLiteralTextFlags = {}));
     function getLiteralText(node, sourceFile, flags) {
+        var _a;
         // If we don't need to downlevel and we can reach the original source text using
         // the node's parent reference, then simply get the text as it was originally written.
         if (canUseOriginalText(node, flags)) {
@@ -14079,7 +14436,7 @@
                 // had to include a backslash: `not \${a} substitution`.
                 var escapeText = flags & 1 /* NeverAsciiEscape */ || (getEmitFlags(node) & 16777216 /* NoAsciiEscaping */) ? escapeString :
                     escapeNonAsciiString;
-                var rawText = node.rawText || escapeTemplateSubstitution(escapeText(node.text, 96 /* backtick */));
+                var rawText = (_a = node.rawText) !== null && _a !== void 0 ? _a : escapeTemplateSubstitution(escapeText(node.text, 96 /* backtick */));
                 switch (node.kind) {
                     case 14 /* NoSubstitutionTemplateLiteral */:
                         return "`" + rawText + "`";
@@ -14130,7 +14487,7 @@
     ts.isBlockOrCatchScoped = isBlockOrCatchScoped;
     function isCatchClauseVariableDeclarationOrBindingElement(declaration) {
         var node = getRootDeclaration(declaration);
-        return node.kind === 250 /* VariableDeclaration */ && node.parent.kind === 288 /* CatchClause */;
+        return node.kind === 252 /* VariableDeclaration */ && node.parent.kind === 290 /* CatchClause */;
     }
     ts.isCatchClauseVariableDeclarationOrBindingElement = isCatchClauseVariableDeclarationOrBindingElement;
     function isAmbientModule(node) {
@@ -14162,12 +14519,12 @@
     ts.isShorthandAmbientModuleSymbol = isShorthandAmbientModuleSymbol;
     function isShorthandAmbientModule(node) {
         // The only kind of module that can be missing a body is a shorthand ambient module.
-        return !!node && node.kind === 257 /* ModuleDeclaration */ && (!node.body);
+        return !!node && node.kind === 259 /* ModuleDeclaration */ && (!node.body);
     }
     function isBlockScopedContainerTopLevel(node) {
-        return node.kind === 298 /* SourceFile */ ||
-            node.kind === 257 /* ModuleDeclaration */ ||
-            ts.isFunctionLike(node);
+        return node.kind === 300 /* SourceFile */ ||
+            node.kind === 259 /* ModuleDeclaration */ ||
+            ts.isFunctionLikeOrClassStaticBlockDeclaration(node);
     }
     ts.isBlockScopedContainerTopLevel = isBlockScopedContainerTopLevel;
     function isGlobalScopeAugmentation(module) {
@@ -14183,9 +14540,9 @@
         // - defined in the top level scope and source file is an external module
         // - defined inside ambient module declaration located in the top level scope and source file not an external module
         switch (node.parent.kind) {
-            case 298 /* SourceFile */:
+            case 300 /* SourceFile */:
                 return ts.isExternalModule(node.parent);
-            case 258 /* ModuleBlock */:
+            case 260 /* ModuleBlock */:
                 return isAmbientModule(node.parent.parent) && ts.isSourceFile(node.parent.parent.parent) && !ts.isExternalModule(node.parent.parent.parent);
         }
         return false;
@@ -14239,34 +14596,36 @@
     ts.isEffectiveStrictModeSourceFile = isEffectiveStrictModeSourceFile;
     function isBlockScope(node, parentNode) {
         switch (node.kind) {
-            case 298 /* SourceFile */:
-            case 259 /* CaseBlock */:
-            case 288 /* CatchClause */:
-            case 257 /* ModuleDeclaration */:
-            case 238 /* ForStatement */:
-            case 239 /* ForInStatement */:
-            case 240 /* ForOfStatement */:
-            case 167 /* Constructor */:
-            case 166 /* MethodDeclaration */:
-            case 168 /* GetAccessor */:
-            case 169 /* SetAccessor */:
-            case 252 /* FunctionDeclaration */:
-            case 209 /* FunctionExpression */:
-            case 210 /* ArrowFunction */:
+            case 300 /* SourceFile */:
+            case 261 /* CaseBlock */:
+            case 290 /* CatchClause */:
+            case 259 /* ModuleDeclaration */:
+            case 240 /* ForStatement */:
+            case 241 /* ForInStatement */:
+            case 242 /* ForOfStatement */:
+            case 169 /* Constructor */:
+            case 167 /* MethodDeclaration */:
+            case 170 /* GetAccessor */:
+            case 171 /* SetAccessor */:
+            case 254 /* FunctionDeclaration */:
+            case 211 /* FunctionExpression */:
+            case 212 /* ArrowFunction */:
+            case 165 /* PropertyDeclaration */:
+            case 168 /* ClassStaticBlockDeclaration */:
                 return true;
-            case 231 /* Block */:
+            case 233 /* Block */:
                 // function block is not considered block-scope container
                 // see comment in binder.ts: bind(...), case for SyntaxKind.Block
-                return !ts.isFunctionLike(parentNode);
+                return !ts.isFunctionLikeOrClassStaticBlockDeclaration(parentNode);
         }
         return false;
     }
     ts.isBlockScope = isBlockScope;
     function isDeclarationWithTypeParameters(node) {
         switch (node.kind) {
-            case 328 /* JSDocCallbackTag */:
-            case 335 /* JSDocTypedefTag */:
-            case 315 /* JSDocSignature */:
+            case 333 /* JSDocCallbackTag */:
+            case 340 /* JSDocTypedefTag */:
+            case 318 /* JSDocSignature */:
                 return true;
             default:
                 ts.assertType(node);
@@ -14276,25 +14635,25 @@
     ts.isDeclarationWithTypeParameters = isDeclarationWithTypeParameters;
     function isDeclarationWithTypeParameterChildren(node) {
         switch (node.kind) {
-            case 170 /* CallSignature */:
-            case 171 /* ConstructSignature */:
-            case 165 /* MethodSignature */:
-            case 172 /* IndexSignature */:
-            case 175 /* FunctionType */:
-            case 176 /* ConstructorType */:
-            case 309 /* JSDocFunctionType */:
-            case 253 /* ClassDeclaration */:
-            case 222 /* ClassExpression */:
-            case 254 /* InterfaceDeclaration */:
-            case 255 /* TypeAliasDeclaration */:
-            case 334 /* JSDocTemplateTag */:
-            case 252 /* FunctionDeclaration */:
-            case 166 /* MethodDeclaration */:
-            case 167 /* Constructor */:
-            case 168 /* GetAccessor */:
-            case 169 /* SetAccessor */:
-            case 209 /* FunctionExpression */:
-            case 210 /* ArrowFunction */:
+            case 172 /* CallSignature */:
+            case 173 /* ConstructSignature */:
+            case 166 /* MethodSignature */:
+            case 174 /* IndexSignature */:
+            case 177 /* FunctionType */:
+            case 178 /* ConstructorType */:
+            case 312 /* JSDocFunctionType */:
+            case 255 /* ClassDeclaration */:
+            case 224 /* ClassExpression */:
+            case 256 /* InterfaceDeclaration */:
+            case 257 /* TypeAliasDeclaration */:
+            case 339 /* JSDocTemplateTag */:
+            case 254 /* FunctionDeclaration */:
+            case 167 /* MethodDeclaration */:
+            case 169 /* Constructor */:
+            case 170 /* GetAccessor */:
+            case 171 /* SetAccessor */:
+            case 211 /* FunctionExpression */:
+            case 212 /* ArrowFunction */:
                 return true;
             default:
                 ts.assertType(node);
@@ -14304,8 +14663,8 @@
     ts.isDeclarationWithTypeParameterChildren = isDeclarationWithTypeParameterChildren;
     function isAnyImportSyntax(node) {
         switch (node.kind) {
-            case 262 /* ImportDeclaration */:
-            case 261 /* ImportEqualsDeclaration */:
+            case 264 /* ImportDeclaration */:
+            case 263 /* ImportEqualsDeclaration */:
                 return true;
             default:
                 return false;
@@ -14314,15 +14673,15 @@
     ts.isAnyImportSyntax = isAnyImportSyntax;
     function isLateVisibilityPaintedStatement(node) {
         switch (node.kind) {
-            case 262 /* ImportDeclaration */:
-            case 261 /* ImportEqualsDeclaration */:
-            case 233 /* VariableStatement */:
-            case 253 /* ClassDeclaration */:
-            case 252 /* FunctionDeclaration */:
-            case 257 /* ModuleDeclaration */:
-            case 255 /* TypeAliasDeclaration */:
-            case 254 /* InterfaceDeclaration */:
-            case 256 /* EnumDeclaration */:
+            case 264 /* ImportDeclaration */:
+            case 263 /* ImportEqualsDeclaration */:
+            case 235 /* VariableStatement */:
+            case 255 /* ClassDeclaration */:
+            case 254 /* FunctionDeclaration */:
+            case 259 /* ModuleDeclaration */:
+            case 257 /* TypeAliasDeclaration */:
+            case 256 /* InterfaceDeclaration */:
+            case 258 /* EnumDeclaration */:
                 return true;
             default:
                 return false;
@@ -14343,6 +14702,14 @@
         return ts.findAncestor(node.parent, function (current) { return isBlockScope(current, current.parent); });
     }
     ts.getEnclosingBlockScopeContainer = getEnclosingBlockScopeContainer;
+    function forEachEnclosingBlockScopeContainer(node, cb) {
+        var container = getEnclosingBlockScopeContainer(node);
+        while (container) {
+            cb(container);
+            container = getEnclosingBlockScopeContainer(container);
+        }
+    }
+    ts.forEachEnclosingBlockScopeContainer = forEachEnclosingBlockScopeContainer;
     // Return display name of an identifier
     // Computed property names will just be emitted as "[<expr>]", where <expr> is the source
     // text of the expression in the computed property.
@@ -14355,19 +14722,19 @@
     }
     ts.getNameFromIndexInfo = getNameFromIndexInfo;
     function isComputedNonLiteralName(name) {
-        return name.kind === 159 /* ComputedPropertyName */ && !isStringOrNumericLiteralLike(name.expression);
+        return name.kind === 160 /* ComputedPropertyName */ && !isStringOrNumericLiteralLike(name.expression);
     }
     ts.isComputedNonLiteralName = isComputedNonLiteralName;
     function getTextOfPropertyName(name) {
         switch (name.kind) {
-            case 78 /* Identifier */:
-            case 79 /* PrivateIdentifier */:
+            case 79 /* Identifier */:
+            case 80 /* PrivateIdentifier */:
                 return name.escapedText;
             case 10 /* StringLiteral */:
             case 8 /* NumericLiteral */:
             case 14 /* NoSubstitutionTemplateLiteral */:
                 return ts.escapeLeadingUnderscores(name.text);
-            case 159 /* ComputedPropertyName */:
+            case 160 /* ComputedPropertyName */:
                 if (isStringOrNumericLiteralLike(name.expression))
                     return ts.escapeLeadingUnderscores(name.expression.text);
                 return ts.Debug.fail("Text of property name cannot be read from non-literal-valued ComputedPropertyNames");
@@ -14378,20 +14745,22 @@
     ts.getTextOfPropertyName = getTextOfPropertyName;
     function entityNameToString(name) {
         switch (name.kind) {
-            case 107 /* ThisKeyword */:
+            case 108 /* ThisKeyword */:
                 return "this";
-            case 79 /* PrivateIdentifier */:
-            case 78 /* Identifier */:
+            case 80 /* PrivateIdentifier */:
+            case 79 /* Identifier */:
                 return getFullWidth(name) === 0 ? ts.idText(name) : getTextOfNode(name);
-            case 158 /* QualifiedName */:
+            case 159 /* QualifiedName */:
                 return entityNameToString(name.left) + "." + entityNameToString(name.right);
-            case 202 /* PropertyAccessExpression */:
+            case 204 /* PropertyAccessExpression */:
                 if (ts.isIdentifier(name.name) || ts.isPrivateIdentifier(name.name)) {
                     return entityNameToString(name.expression) + "." + entityNameToString(name.name);
                 }
                 else {
                     return ts.Debug.assertNever(name.name);
                 }
+            case 306 /* JSDocMemberName */:
+                return entityNameToString(name.left) + entityNameToString(name.right);
             default:
                 return ts.Debug.assertNever(name);
         }
@@ -14471,7 +14840,7 @@
     ts.getSpanOfTokenAtPosition = getSpanOfTokenAtPosition;
     function getErrorSpanForArrowFunction(sourceFile, node) {
         var pos = ts.skipTrivia(sourceFile.text, node.pos);
-        if (node.body && node.body.kind === 231 /* Block */) {
+        if (node.body && node.body.kind === 233 /* Block */) {
             var startLine = ts.getLineAndCharacterOfPosition(sourceFile, node.body.pos).line;
             var endLine = ts.getLineAndCharacterOfPosition(sourceFile, node.body.end).line;
             if (startLine < endLine) {
@@ -14485,7 +14854,7 @@
     function getErrorSpanForNode(sourceFile, node) {
         var errorNode = node;
         switch (node.kind) {
-            case 298 /* SourceFile */:
+            case 300 /* SourceFile */:
                 var pos_1 = ts.skipTrivia(sourceFile.text, 0, /*stopAfterLineBreak*/ false);
                 if (pos_1 === sourceFile.text.length) {
                     // file is empty - return span for the beginning of the file
@@ -14494,28 +14863,29 @@
                 return getSpanOfTokenAtPosition(sourceFile, pos_1);
             // This list is a work in progress. Add missing node kinds to improve their error
             // spans.
-            case 250 /* VariableDeclaration */:
-            case 199 /* BindingElement */:
-            case 253 /* ClassDeclaration */:
-            case 222 /* ClassExpression */:
-            case 254 /* InterfaceDeclaration */:
-            case 257 /* ModuleDeclaration */:
-            case 256 /* EnumDeclaration */:
-            case 292 /* EnumMember */:
-            case 252 /* FunctionDeclaration */:
-            case 209 /* FunctionExpression */:
-            case 166 /* MethodDeclaration */:
-            case 168 /* GetAccessor */:
-            case 169 /* SetAccessor */:
-            case 255 /* TypeAliasDeclaration */:
-            case 164 /* PropertyDeclaration */:
-            case 163 /* PropertySignature */:
+            case 252 /* VariableDeclaration */:
+            case 201 /* BindingElement */:
+            case 255 /* ClassDeclaration */:
+            case 224 /* ClassExpression */:
+            case 256 /* InterfaceDeclaration */:
+            case 259 /* ModuleDeclaration */:
+            case 258 /* EnumDeclaration */:
+            case 294 /* EnumMember */:
+            case 254 /* FunctionDeclaration */:
+            case 211 /* FunctionExpression */:
+            case 167 /* MethodDeclaration */:
+            case 170 /* GetAccessor */:
+            case 171 /* SetAccessor */:
+            case 257 /* TypeAliasDeclaration */:
+            case 165 /* PropertyDeclaration */:
+            case 164 /* PropertySignature */:
+            case 266 /* NamespaceImport */:
                 errorNode = node.name;
                 break;
-            case 210 /* ArrowFunction */:
+            case 212 /* ArrowFunction */:
                 return getErrorSpanForArrowFunction(sourceFile, node);
-            case 285 /* CaseClause */:
-            case 286 /* DefaultClause */:
+            case 287 /* CaseClause */:
+            case 288 /* DefaultClause */:
                 var start = ts.skipTrivia(sourceFile.text, node.pos);
                 var end = node.statements.length > 0 ? node.statements[0].pos : node.end;
                 return ts.createTextSpanFromBounds(start, end);
@@ -14567,16 +14937,16 @@
     }
     ts.isLet = isLet;
     function isSuperCall(n) {
-        return n.kind === 204 /* CallExpression */ && n.expression.kind === 105 /* SuperKeyword */;
+        return n.kind === 206 /* CallExpression */ && n.expression.kind === 106 /* SuperKeyword */;
     }
     ts.isSuperCall = isSuperCall;
     function isImportCall(n) {
-        return n.kind === 204 /* CallExpression */ && n.expression.kind === 99 /* ImportKeyword */;
+        return n.kind === 206 /* CallExpression */ && n.expression.kind === 100 /* ImportKeyword */;
     }
     ts.isImportCall = isImportCall;
     function isImportMeta(n) {
         return ts.isMetaProperty(n)
-            && n.keywordToken === 99 /* ImportKeyword */
+            && n.keywordToken === 100 /* ImportKeyword */
             && n.name.escapedText === "meta";
     }
     ts.isImportMeta = isImportMeta;
@@ -14585,7 +14955,7 @@
     }
     ts.isLiteralImportTypeNode = isLiteralImportTypeNode;
     function isPrologueDirective(node) {
-        return node.kind === 234 /* ExpressionStatement */
+        return node.kind === 236 /* ExpressionStatement */
             && node.expression.kind === 10 /* StringLiteral */;
     }
     ts.isPrologueDirective = isPrologueDirective;
@@ -14613,12 +14983,12 @@
     }
     ts.getLeadingCommentRangesOfNode = getLeadingCommentRangesOfNode;
     function getJSDocCommentRanges(node, text) {
-        var commentRanges = (node.kind === 161 /* Parameter */ ||
-            node.kind === 160 /* TypeParameter */ ||
-            node.kind === 209 /* FunctionExpression */ ||
-            node.kind === 210 /* ArrowFunction */ ||
-            node.kind === 208 /* ParenthesizedExpression */ ||
-            node.kind === 250 /* VariableDeclaration */) ?
+        var commentRanges = (node.kind === 162 /* Parameter */ ||
+            node.kind === 161 /* TypeParameter */ ||
+            node.kind === 211 /* FunctionExpression */ ||
+            node.kind === 212 /* ArrowFunction */ ||
+            node.kind === 210 /* ParenthesizedExpression */ ||
+            node.kind === 252 /* VariableDeclaration */) ?
             ts.concatenate(ts.getTrailingCommentRanges(text, node.pos), ts.getLeadingCommentRanges(text, node.pos)) :
             ts.getLeadingCommentRanges(text, node.pos);
         // True if the comment starts with '/**' but not if it is '/**/'
@@ -14629,53 +14999,53 @@
         });
     }
     ts.getJSDocCommentRanges = getJSDocCommentRanges;
-    ts.fullTripleSlashReferencePathRegEx = /^(\/\/\/\s*<reference\s+path\s*=\s*)('|")(.+?)\2.*?\/>/;
-    var fullTripleSlashReferenceTypeReferenceDirectiveRegEx = /^(\/\/\/\s*<reference\s+types\s*=\s*)('|")(.+?)\2.*?\/>/;
-    ts.fullTripleSlashAMDReferencePathRegEx = /^(\/\/\/\s*<amd-dependency\s+path\s*=\s*)('|")(.+?)\2.*?\/>/;
-    var defaultLibReferenceRegEx = /^(\/\/\/\s*<reference\s+no-default-lib\s*=\s*)('|")(.+?)\2\s*\/>/;
+    ts.fullTripleSlashReferencePathRegEx = /^(\/\/\/\s*<reference\s+path\s*=\s*)(('[^']*')|("[^"]*")).*?\/>/;
+    var fullTripleSlashReferenceTypeReferenceDirectiveRegEx = /^(\/\/\/\s*<reference\s+types\s*=\s*)(('[^']*')|("[^"]*")).*?\/>/;
+    ts.fullTripleSlashAMDReferencePathRegEx = /^(\/\/\/\s*<amd-dependency\s+path\s*=\s*)(('[^']*')|("[^"]*")).*?\/>/;
+    var defaultLibReferenceRegEx = /^(\/\/\/\s*<reference\s+no-default-lib\s*=\s*)(('[^']*')|("[^"]*"))\s*\/>/;
     function isPartOfTypeNode(node) {
-        if (173 /* FirstTypeNode */ <= node.kind && node.kind <= 196 /* LastTypeNode */) {
+        if (175 /* FirstTypeNode */ <= node.kind && node.kind <= 198 /* LastTypeNode */) {
             return true;
         }
         switch (node.kind) {
-            case 128 /* AnyKeyword */:
-            case 152 /* UnknownKeyword */:
-            case 144 /* NumberKeyword */:
-            case 155 /* BigIntKeyword */:
-            case 147 /* StringKeyword */:
-            case 131 /* BooleanKeyword */:
-            case 148 /* SymbolKeyword */:
-            case 145 /* ObjectKeyword */:
-            case 150 /* UndefinedKeyword */:
-            case 141 /* NeverKeyword */:
+            case 129 /* AnyKeyword */:
+            case 153 /* UnknownKeyword */:
+            case 145 /* NumberKeyword */:
+            case 156 /* BigIntKeyword */:
+            case 148 /* StringKeyword */:
+            case 132 /* BooleanKeyword */:
+            case 149 /* SymbolKeyword */:
+            case 146 /* ObjectKeyword */:
+            case 151 /* UndefinedKeyword */:
+            case 142 /* NeverKeyword */:
                 return true;
-            case 113 /* VoidKeyword */:
-                return node.parent.kind !== 213 /* VoidExpression */;
-            case 224 /* ExpressionWithTypeArguments */:
+            case 114 /* VoidKeyword */:
+                return node.parent.kind !== 215 /* VoidExpression */;
+            case 226 /* ExpressionWithTypeArguments */:
                 return !isExpressionWithTypeArgumentsInClassExtendsClause(node);
-            case 160 /* TypeParameter */:
-                return node.parent.kind === 191 /* MappedType */ || node.parent.kind === 186 /* InferType */;
+            case 161 /* TypeParameter */:
+                return node.parent.kind === 193 /* MappedType */ || node.parent.kind === 188 /* InferType */;
             // Identifiers and qualified names may be type nodes, depending on their context. Climb
             // above them to find the lowest container
-            case 78 /* Identifier */:
+            case 79 /* Identifier */:
                 // If the identifier is the RHS of a qualified name, then it's a type iff its parent is.
-                if (node.parent.kind === 158 /* QualifiedName */ && node.parent.right === node) {
+                if (node.parent.kind === 159 /* QualifiedName */ && node.parent.right === node) {
                     node = node.parent;
                 }
-                else if (node.parent.kind === 202 /* PropertyAccessExpression */ && node.parent.name === node) {
+                else if (node.parent.kind === 204 /* PropertyAccessExpression */ && node.parent.name === node) {
                     node = node.parent;
                 }
                 // At this point, node is either a qualified name or an identifier
-                ts.Debug.assert(node.kind === 78 /* Identifier */ || node.kind === 158 /* QualifiedName */ || node.kind === 202 /* PropertyAccessExpression */, "'node' was expected to be a qualified name, identifier or property access in 'isPartOfTypeNode'.");
+                ts.Debug.assert(node.kind === 79 /* Identifier */ || node.kind === 159 /* QualifiedName */ || node.kind === 204 /* PropertyAccessExpression */, "'node' was expected to be a qualified name, identifier or property access in 'isPartOfTypeNode'.");
             // falls through
-            case 158 /* QualifiedName */:
-            case 202 /* PropertyAccessExpression */:
-            case 107 /* ThisKeyword */: {
+            case 159 /* QualifiedName */:
+            case 204 /* PropertyAccessExpression */:
+            case 108 /* ThisKeyword */: {
                 var parent = node.parent;
-                if (parent.kind === 177 /* TypeQuery */) {
+                if (parent.kind === 179 /* TypeQuery */) {
                     return false;
                 }
-                if (parent.kind === 196 /* ImportType */) {
+                if (parent.kind === 198 /* ImportType */) {
                     return !parent.isTypeOf;
                 }
                 // Do not recursively call isPartOfTypeNode on the parent. In the example:
@@ -14684,40 +15054,40 @@
                 //
                 // Calling isPartOfTypeNode would consider the qualified name A.B a type node.
                 // Only C and A.B.C are type nodes.
-                if (173 /* FirstTypeNode */ <= parent.kind && parent.kind <= 196 /* LastTypeNode */) {
+                if (175 /* FirstTypeNode */ <= parent.kind && parent.kind <= 198 /* LastTypeNode */) {
                     return true;
                 }
                 switch (parent.kind) {
-                    case 224 /* ExpressionWithTypeArguments */:
+                    case 226 /* ExpressionWithTypeArguments */:
                         return !isExpressionWithTypeArgumentsInClassExtendsClause(parent);
-                    case 160 /* TypeParameter */:
+                    case 161 /* TypeParameter */:
                         return node === parent.constraint;
-                    case 334 /* JSDocTemplateTag */:
+                    case 339 /* JSDocTemplateTag */:
                         return node === parent.constraint;
-                    case 164 /* PropertyDeclaration */:
-                    case 163 /* PropertySignature */:
-                    case 161 /* Parameter */:
-                    case 250 /* VariableDeclaration */:
+                    case 165 /* PropertyDeclaration */:
+                    case 164 /* PropertySignature */:
+                    case 162 /* Parameter */:
+                    case 252 /* VariableDeclaration */:
                         return node === parent.type;
-                    case 252 /* FunctionDeclaration */:
-                    case 209 /* FunctionExpression */:
-                    case 210 /* ArrowFunction */:
-                    case 167 /* Constructor */:
-                    case 166 /* MethodDeclaration */:
-                    case 165 /* MethodSignature */:
-                    case 168 /* GetAccessor */:
-                    case 169 /* SetAccessor */:
+                    case 254 /* FunctionDeclaration */:
+                    case 211 /* FunctionExpression */:
+                    case 212 /* ArrowFunction */:
+                    case 169 /* Constructor */:
+                    case 167 /* MethodDeclaration */:
+                    case 166 /* MethodSignature */:
+                    case 170 /* GetAccessor */:
+                    case 171 /* SetAccessor */:
                         return node === parent.type;
-                    case 170 /* CallSignature */:
-                    case 171 /* ConstructSignature */:
-                    case 172 /* IndexSignature */:
+                    case 172 /* CallSignature */:
+                    case 173 /* ConstructSignature */:
+                    case 174 /* IndexSignature */:
                         return node === parent.type;
-                    case 207 /* TypeAssertionExpression */:
+                    case 209 /* TypeAssertionExpression */:
                         return node === parent.type;
-                    case 204 /* CallExpression */:
-                    case 205 /* NewExpression */:
+                    case 206 /* CallExpression */:
+                    case 207 /* NewExpression */:
                         return ts.contains(parent.typeArguments, node);
-                    case 206 /* TaggedTemplateExpression */:
+                    case 208 /* TaggedTemplateExpression */:
                         // TODO (drosen): TaggedTemplateExpressions may eventually support type arguments.
                         return false;
                 }
@@ -14742,23 +15112,23 @@
         return traverse(body);
         function traverse(node) {
             switch (node.kind) {
-                case 243 /* ReturnStatement */:
+                case 245 /* ReturnStatement */:
                     return visitor(node);
-                case 259 /* CaseBlock */:
-                case 231 /* Block */:
-                case 235 /* IfStatement */:
-                case 236 /* DoStatement */:
-                case 237 /* WhileStatement */:
-                case 238 /* ForStatement */:
-                case 239 /* ForInStatement */:
-                case 240 /* ForOfStatement */:
-                case 244 /* WithStatement */:
-                case 245 /* SwitchStatement */:
-                case 285 /* CaseClause */:
-                case 286 /* DefaultClause */:
-                case 246 /* LabeledStatement */:
-                case 248 /* TryStatement */:
-                case 288 /* CatchClause */:
+                case 261 /* CaseBlock */:
+                case 233 /* Block */:
+                case 237 /* IfStatement */:
+                case 238 /* DoStatement */:
+                case 239 /* WhileStatement */:
+                case 240 /* ForStatement */:
+                case 241 /* ForInStatement */:
+                case 242 /* ForOfStatement */:
+                case 246 /* WithStatement */:
+                case 247 /* SwitchStatement */:
+                case 287 /* CaseClause */:
+                case 288 /* DefaultClause */:
+                case 248 /* LabeledStatement */:
+                case 250 /* TryStatement */:
+                case 290 /* CatchClause */:
                     return ts.forEachChild(node, traverse);
             }
         }
@@ -14768,23 +15138,23 @@
         return traverse(body);
         function traverse(node) {
             switch (node.kind) {
-                case 220 /* YieldExpression */:
+                case 222 /* YieldExpression */:
                     visitor(node);
                     var operand = node.expression;
                     if (operand) {
                         traverse(operand);
                     }
                     return;
-                case 256 /* EnumDeclaration */:
-                case 254 /* InterfaceDeclaration */:
-                case 257 /* ModuleDeclaration */:
-                case 255 /* TypeAliasDeclaration */:
+                case 258 /* EnumDeclaration */:
+                case 256 /* InterfaceDeclaration */:
+                case 259 /* ModuleDeclaration */:
+                case 257 /* TypeAliasDeclaration */:
                     // These are not allowed inside a generator now, but eventually they may be allowed
                     // as local types. Regardless, skip them to avoid the work.
                     return;
                 default:
                     if (ts.isFunctionLike(node)) {
-                        if (node.name && node.name.kind === 159 /* ComputedPropertyName */) {
+                        if (node.name && node.name.kind === 160 /* ComputedPropertyName */) {
                             // Note that we will not include methods/accessors of a class because they would require
                             // first descending into the class. This is by design.
                             traverse(node.name.expression);
@@ -14807,10 +15177,10 @@
      * @param node The type node.
      */
     function getRestParameterElementType(node) {
-        if (node && node.kind === 179 /* ArrayType */) {
+        if (node && node.kind === 181 /* ArrayType */) {
             return node.elementType;
         }
-        else if (node && node.kind === 174 /* TypeReference */) {
+        else if (node && node.kind === 176 /* TypeReference */) {
             return ts.singleOrUndefined(node.typeArguments);
         }
         else {
@@ -14820,12 +15190,12 @@
     ts.getRestParameterElementType = getRestParameterElementType;
     function getMembersOfDeclaration(node) {
         switch (node.kind) {
-            case 254 /* InterfaceDeclaration */:
-            case 253 /* ClassDeclaration */:
-            case 222 /* ClassExpression */:
-            case 178 /* TypeLiteral */:
+            case 256 /* InterfaceDeclaration */:
+            case 255 /* ClassDeclaration */:
+            case 224 /* ClassExpression */:
+            case 180 /* TypeLiteral */:
                 return node.members;
-            case 201 /* ObjectLiteralExpression */:
+            case 203 /* ObjectLiteralExpression */:
                 return node.properties;
         }
     }
@@ -14833,14 +15203,14 @@
     function isVariableLike(node) {
         if (node) {
             switch (node.kind) {
-                case 199 /* BindingElement */:
-                case 292 /* EnumMember */:
-                case 161 /* Parameter */:
-                case 289 /* PropertyAssignment */:
-                case 164 /* PropertyDeclaration */:
-                case 163 /* PropertySignature */:
-                case 290 /* ShorthandPropertyAssignment */:
-                case 250 /* VariableDeclaration */:
+                case 201 /* BindingElement */:
+                case 294 /* EnumMember */:
+                case 162 /* Parameter */:
+                case 291 /* PropertyAssignment */:
+                case 165 /* PropertyDeclaration */:
+                case 164 /* PropertySignature */:
+                case 292 /* ShorthandPropertyAssignment */:
+                case 252 /* VariableDeclaration */:
                     return true;
             }
         }
@@ -14852,8 +15222,8 @@
     }
     ts.isVariableLikeOrAccessor = isVariableLikeOrAccessor;
     function isVariableDeclarationInVariableStatement(node) {
-        return node.parent.kind === 251 /* VariableDeclarationList */
-            && node.parent.parent.kind === 233 /* VariableStatement */;
+        return node.parent.kind === 253 /* VariableDeclarationList */
+            && node.parent.parent.kind === 235 /* VariableStatement */;
     }
     ts.isVariableDeclarationInVariableStatement = isVariableDeclarationInVariableStatement;
     function isValidESSymbolDeclaration(node) {
@@ -14864,13 +15234,13 @@
     ts.isValidESSymbolDeclaration = isValidESSymbolDeclaration;
     function introducesArgumentsExoticObject(node) {
         switch (node.kind) {
-            case 166 /* MethodDeclaration */:
-            case 165 /* MethodSignature */:
-            case 167 /* Constructor */:
-            case 168 /* GetAccessor */:
-            case 169 /* SetAccessor */:
-            case 252 /* FunctionDeclaration */:
-            case 209 /* FunctionExpression */:
+            case 167 /* MethodDeclaration */:
+            case 166 /* MethodSignature */:
+            case 169 /* Constructor */:
+            case 170 /* GetAccessor */:
+            case 171 /* SetAccessor */:
+            case 254 /* FunctionDeclaration */:
+            case 211 /* FunctionExpression */:
                 return true;
         }
         return false;
@@ -14881,7 +15251,7 @@
             if (beforeUnwrapLabelCallback) {
                 beforeUnwrapLabelCallback(node);
             }
-            if (node.statement.kind !== 246 /* LabeledStatement */) {
+            if (node.statement.kind !== 248 /* LabeledStatement */) {
                 return node.statement;
             }
             node = node.statement;
@@ -14889,17 +15259,17 @@
     }
     ts.unwrapInnermostStatementOfLabel = unwrapInnermostStatementOfLabel;
     function isFunctionBlock(node) {
-        return node && node.kind === 231 /* Block */ && ts.isFunctionLike(node.parent);
+        return node && node.kind === 233 /* Block */ && ts.isFunctionLike(node.parent);
     }
     ts.isFunctionBlock = isFunctionBlock;
     function isObjectLiteralMethod(node) {
-        return node && node.kind === 166 /* MethodDeclaration */ && node.parent.kind === 201 /* ObjectLiteralExpression */;
+        return node && node.kind === 167 /* MethodDeclaration */ && node.parent.kind === 203 /* ObjectLiteralExpression */;
     }
     ts.isObjectLiteralMethod = isObjectLiteralMethod;
     function isObjectLiteralOrClassExpressionMethod(node) {
-        return node.kind === 166 /* MethodDeclaration */ &&
-            (node.parent.kind === 201 /* ObjectLiteralExpression */ ||
-                node.parent.kind === 222 /* ClassExpression */);
+        return node.kind === 167 /* MethodDeclaration */ &&
+            (node.parent.kind === 203 /* ObjectLiteralExpression */ ||
+                node.parent.kind === 224 /* ClassExpression */);
     }
     ts.isObjectLiteralOrClassExpressionMethod = isObjectLiteralOrClassExpressionMethod;
     function isIdentifierTypePredicate(predicate) {
@@ -14912,7 +15282,7 @@
     ts.isThisTypePredicate = isThisTypePredicate;
     function getPropertyAssignment(objectLiteral, key, key2) {
         return objectLiteral.properties.filter(function (property) {
-            if (property.kind === 289 /* PropertyAssignment */) {
+            if (property.kind === 291 /* PropertyAssignment */) {
                 var propName = getTextOfPropertyName(property.name);
                 return key === propName || (!!key2 && key2 === propName);
             }
@@ -14960,15 +15330,28 @@
         return ts.findAncestor(node.parent, ts.isClassLike);
     }
     ts.getContainingClass = getContainingClass;
+    function getContainingClassStaticBlock(node) {
+        return ts.findAncestor(node.parent, function (n) {
+            if (ts.isClassLike(n) || ts.isFunctionLike(n)) {
+                return "quit";
+            }
+            return ts.isClassStaticBlockDeclaration(n);
+        });
+    }
+    ts.getContainingClassStaticBlock = getContainingClassStaticBlock;
+    function getContainingFunctionOrClassStaticBlock(node) {
+        return ts.findAncestor(node.parent, ts.isFunctionLikeOrClassStaticBlockDeclaration);
+    }
+    ts.getContainingFunctionOrClassStaticBlock = getContainingFunctionOrClassStaticBlock;
     function getThisContainer(node, includeArrowFunctions) {
-        ts.Debug.assert(node.kind !== 298 /* SourceFile */);
+        ts.Debug.assert(node.kind !== 300 /* SourceFile */);
         while (true) {
             node = node.parent;
             if (!node) {
                 return ts.Debug.fail(); // If we never pass in a SourceFile, this should be unreachable, since we'll stop when we reach that.
             }
             switch (node.kind) {
-                case 159 /* ComputedPropertyName */:
+                case 160 /* ComputedPropertyName */:
                     // If the grandparent node is an object literal (as opposed to a class),
                     // then the computed property is not a 'this' container.
                     // A computed property name in a class needs to be a this container
@@ -14983,9 +15366,9 @@
                     // the *body* of the container.
                     node = node.parent;
                     break;
-                case 162 /* Decorator */:
+                case 163 /* Decorator */:
                     // Decorators are always applied outside of the body of a class or method.
-                    if (node.parent.kind === 161 /* Parameter */ && ts.isClassElement(node.parent.parent)) {
+                    if (node.parent.kind === 162 /* Parameter */ && ts.isClassElement(node.parent.parent)) {
                         // If the decorator's parent is a Parameter, we resolve the this container from
                         // the grandparent class declaration.
                         node = node.parent.parent;
@@ -14996,26 +15379,27 @@
                         node = node.parent;
                     }
                     break;
-                case 210 /* ArrowFunction */:
+                case 212 /* ArrowFunction */:
                     if (!includeArrowFunctions) {
                         continue;
                     }
                 // falls through
-                case 252 /* FunctionDeclaration */:
-                case 209 /* FunctionExpression */:
-                case 257 /* ModuleDeclaration */:
-                case 164 /* PropertyDeclaration */:
-                case 163 /* PropertySignature */:
-                case 166 /* MethodDeclaration */:
-                case 165 /* MethodSignature */:
-                case 167 /* Constructor */:
-                case 168 /* GetAccessor */:
-                case 169 /* SetAccessor */:
-                case 170 /* CallSignature */:
-                case 171 /* ConstructSignature */:
-                case 172 /* IndexSignature */:
-                case 256 /* EnumDeclaration */:
-                case 298 /* SourceFile */:
+                case 254 /* FunctionDeclaration */:
+                case 211 /* FunctionExpression */:
+                case 259 /* ModuleDeclaration */:
+                case 168 /* ClassStaticBlockDeclaration */:
+                case 165 /* PropertyDeclaration */:
+                case 164 /* PropertySignature */:
+                case 167 /* MethodDeclaration */:
+                case 166 /* MethodSignature */:
+                case 169 /* Constructor */:
+                case 170 /* GetAccessor */:
+                case 171 /* SetAccessor */:
+                case 172 /* CallSignature */:
+                case 173 /* ConstructSignature */:
+                case 174 /* IndexSignature */:
+                case 258 /* EnumDeclaration */:
+                case 300 /* SourceFile */:
                     return node;
             }
         }
@@ -15034,9 +15418,9 @@
         var container = getThisContainer(node, /*includeArrowFunctions*/ false);
         if (container) {
             switch (container.kind) {
-                case 167 /* Constructor */:
-                case 252 /* FunctionDeclaration */:
-                case 209 /* FunctionExpression */:
+                case 169 /* Constructor */:
+                case 254 /* FunctionDeclaration */:
+                case 211 /* FunctionExpression */:
                     return container;
             }
         }
@@ -15058,27 +15442,28 @@
                 return node;
             }
             switch (node.kind) {
-                case 159 /* ComputedPropertyName */:
+                case 160 /* ComputedPropertyName */:
                     node = node.parent;
                     break;
-                case 252 /* FunctionDeclaration */:
-                case 209 /* FunctionExpression */:
-                case 210 /* ArrowFunction */:
+                case 254 /* FunctionDeclaration */:
+                case 211 /* FunctionExpression */:
+                case 212 /* ArrowFunction */:
                     if (!stopOnFunctions) {
                         continue;
                     }
                 // falls through
-                case 164 /* PropertyDeclaration */:
-                case 163 /* PropertySignature */:
-                case 166 /* MethodDeclaration */:
-                case 165 /* MethodSignature */:
-                case 167 /* Constructor */:
-                case 168 /* GetAccessor */:
-                case 169 /* SetAccessor */:
+                case 165 /* PropertyDeclaration */:
+                case 164 /* PropertySignature */:
+                case 167 /* MethodDeclaration */:
+                case 166 /* MethodSignature */:
+                case 169 /* Constructor */:
+                case 170 /* GetAccessor */:
+                case 171 /* SetAccessor */:
+                case 168 /* ClassStaticBlockDeclaration */:
                     return node;
-                case 162 /* Decorator */:
+                case 163 /* Decorator */:
                     // Decorators are always applied outside of the body of a class or method.
-                    if (node.parent.kind === 161 /* Parameter */ && ts.isClassElement(node.parent.parent)) {
+                    if (node.parent.kind === 162 /* Parameter */ && ts.isClassElement(node.parent.parent)) {
                         // If the decorator's parent is a Parameter, we resolve the this container from
                         // the grandparent class declaration.
                         node = node.parent.parent;
@@ -15094,21 +15479,21 @@
     }
     ts.getSuperContainer = getSuperContainer;
     function getImmediatelyInvokedFunctionExpression(func) {
-        if (func.kind === 209 /* FunctionExpression */ || func.kind === 210 /* ArrowFunction */) {
+        if (func.kind === 211 /* FunctionExpression */ || func.kind === 212 /* ArrowFunction */) {
             var prev = func;
             var parent = func.parent;
-            while (parent.kind === 208 /* ParenthesizedExpression */) {
+            while (parent.kind === 210 /* ParenthesizedExpression */) {
                 prev = parent;
                 parent = parent.parent;
             }
-            if (parent.kind === 204 /* CallExpression */ && parent.expression === prev) {
+            if (parent.kind === 206 /* CallExpression */ && parent.expression === prev) {
                 return parent;
             }
         }
     }
     ts.getImmediatelyInvokedFunctionExpression = getImmediatelyInvokedFunctionExpression;
     function isSuperOrSuperProperty(node) {
-        return node.kind === 105 /* SuperKeyword */
+        return node.kind === 106 /* SuperKeyword */
             || isSuperProperty(node);
     }
     ts.isSuperOrSuperProperty = isSuperOrSuperProperty;
@@ -15117,8 +15502,8 @@
      */
     function isSuperProperty(node) {
         var kind = node.kind;
-        return (kind === 202 /* PropertyAccessExpression */ || kind === 203 /* ElementAccessExpression */)
-            && node.expression.kind === 105 /* SuperKeyword */;
+        return (kind === 204 /* PropertyAccessExpression */ || kind === 205 /* ElementAccessExpression */)
+            && node.expression.kind === 106 /* SuperKeyword */;
     }
     ts.isSuperProperty = isSuperProperty;
     /**
@@ -15126,34 +15511,34 @@
      */
     function isThisProperty(node) {
         var kind = node.kind;
-        return (kind === 202 /* PropertyAccessExpression */ || kind === 203 /* ElementAccessExpression */)
-            && node.expression.kind === 107 /* ThisKeyword */;
+        return (kind === 204 /* PropertyAccessExpression */ || kind === 205 /* ElementAccessExpression */)
+            && node.expression.kind === 108 /* ThisKeyword */;
     }
     ts.isThisProperty = isThisProperty;
     function isThisInitializedDeclaration(node) {
         var _a;
-        return !!node && ts.isVariableDeclaration(node) && ((_a = node.initializer) === null || _a === void 0 ? void 0 : _a.kind) === 107 /* ThisKeyword */;
+        return !!node && ts.isVariableDeclaration(node) && ((_a = node.initializer) === null || _a === void 0 ? void 0 : _a.kind) === 108 /* ThisKeyword */;
     }
     ts.isThisInitializedDeclaration = isThisInitializedDeclaration;
     function isThisInitializedObjectBindingExpression(node) {
         return !!node
             && (ts.isShorthandPropertyAssignment(node) || ts.isPropertyAssignment(node))
             && ts.isBinaryExpression(node.parent.parent)
-            && node.parent.parent.operatorToken.kind === 62 /* EqualsToken */
-            && node.parent.parent.right.kind === 107 /* ThisKeyword */;
+            && node.parent.parent.operatorToken.kind === 63 /* EqualsToken */
+            && node.parent.parent.right.kind === 108 /* ThisKeyword */;
     }
     ts.isThisInitializedObjectBindingExpression = isThisInitializedObjectBindingExpression;
     function getEntityNameFromTypeNode(node) {
         switch (node.kind) {
-            case 174 /* TypeReference */:
+            case 176 /* TypeReference */:
                 return node.typeName;
-            case 224 /* ExpressionWithTypeArguments */:
+            case 226 /* ExpressionWithTypeArguments */:
                 return isEntityNameExpression(node.expression)
                     ? node.expression
                     : undefined;
             // TODO(rbuckton): These aren't valid TypeNodes, but we treat them as such because of `isPartOfTypeNode`, which returns `true` for things that aren't `TypeNode`s.
-            case 78 /* Identifier */:
-            case 158 /* QualifiedName */:
+            case 79 /* Identifier */:
+            case 159 /* QualifiedName */:
                 return node;
         }
         return undefined;
@@ -15161,10 +15546,10 @@
     ts.getEntityNameFromTypeNode = getEntityNameFromTypeNode;
     function getInvokedExpression(node) {
         switch (node.kind) {
-            case 206 /* TaggedTemplateExpression */:
+            case 208 /* TaggedTemplateExpression */:
                 return node.tag;
-            case 276 /* JsxOpeningElement */:
-            case 275 /* JsxSelfClosingElement */:
+            case 278 /* JsxOpeningElement */:
+            case 277 /* JsxSelfClosingElement */:
                 return node.tagName;
             default:
                 return node.expression;
@@ -15177,25 +15562,25 @@
             return false;
         }
         switch (node.kind) {
-            case 253 /* ClassDeclaration */:
+            case 255 /* ClassDeclaration */:
                 // classes are valid targets
                 return true;
-            case 164 /* PropertyDeclaration */:
+            case 165 /* PropertyDeclaration */:
                 // property declarations are valid if their parent is a class declaration.
-                return parent.kind === 253 /* ClassDeclaration */;
-            case 168 /* GetAccessor */:
-            case 169 /* SetAccessor */:
-            case 166 /* MethodDeclaration */:
+                return parent.kind === 255 /* ClassDeclaration */;
+            case 170 /* GetAccessor */:
+            case 171 /* SetAccessor */:
+            case 167 /* MethodDeclaration */:
                 // if this method has a body and its parent is a class declaration, this is a valid target.
                 return node.body !== undefined
-                    && parent.kind === 253 /* ClassDeclaration */;
-            case 161 /* Parameter */:
+                    && parent.kind === 255 /* ClassDeclaration */;
+            case 162 /* Parameter */:
                 // if the parameter's parent has a body and its grandparent is a class declaration, this is a valid target;
                 return parent.body !== undefined
-                    && (parent.kind === 167 /* Constructor */
-                        || parent.kind === 166 /* MethodDeclaration */
-                        || parent.kind === 169 /* SetAccessor */)
-                    && grandparent.kind === 253 /* ClassDeclaration */;
+                    && (parent.kind === 169 /* Constructor */
+                        || parent.kind === 167 /* MethodDeclaration */
+                        || parent.kind === 171 /* SetAccessor */)
+                    && grandparent.kind === 255 /* ClassDeclaration */;
         }
         return false;
     }
@@ -15211,21 +15596,29 @@
     ts.nodeOrChildIsDecorated = nodeOrChildIsDecorated;
     function childIsDecorated(node, parent) {
         switch (node.kind) {
-            case 253 /* ClassDeclaration */:
+            case 255 /* ClassDeclaration */:
                 return ts.some(node.members, function (m) { return nodeOrChildIsDecorated(m, node, parent); }); // TODO: GH#18217
-            case 166 /* MethodDeclaration */:
-            case 169 /* SetAccessor */:
+            case 167 /* MethodDeclaration */:
+            case 171 /* SetAccessor */:
+            case 169 /* Constructor */:
                 return ts.some(node.parameters, function (p) { return nodeIsDecorated(p, node, parent); }); // TODO: GH#18217
             default:
                 return false;
         }
     }
     ts.childIsDecorated = childIsDecorated;
+    function classOrConstructorParameterIsDecorated(node) {
+        if (nodeIsDecorated(node))
+            return true;
+        var constructor = getFirstConstructorWithBody(node);
+        return !!constructor && childIsDecorated(constructor, node);
+    }
+    ts.classOrConstructorParameterIsDecorated = classOrConstructorParameterIsDecorated;
     function isJSXTagName(node) {
         var parent = node.parent;
-        if (parent.kind === 276 /* JsxOpeningElement */ ||
-            parent.kind === 275 /* JsxSelfClosingElement */ ||
-            parent.kind === 277 /* JsxClosingElement */) {
+        if (parent.kind === 278 /* JsxOpeningElement */ ||
+            parent.kind === 277 /* JsxSelfClosingElement */ ||
+            parent.kind === 279 /* JsxClosingElement */) {
             return parent.tagName === node;
         }
         return false;
@@ -15233,49 +15626,54 @@
     ts.isJSXTagName = isJSXTagName;
     function isExpressionNode(node) {
         switch (node.kind) {
-            case 105 /* SuperKeyword */:
-            case 103 /* NullKeyword */:
-            case 109 /* TrueKeyword */:
-            case 94 /* FalseKeyword */:
+            case 106 /* SuperKeyword */:
+            case 104 /* NullKeyword */:
+            case 110 /* TrueKeyword */:
+            case 95 /* FalseKeyword */:
             case 13 /* RegularExpressionLiteral */:
-            case 200 /* ArrayLiteralExpression */:
-            case 201 /* ObjectLiteralExpression */:
-            case 202 /* PropertyAccessExpression */:
-            case 203 /* ElementAccessExpression */:
-            case 204 /* CallExpression */:
-            case 205 /* NewExpression */:
-            case 206 /* TaggedTemplateExpression */:
-            case 225 /* AsExpression */:
-            case 207 /* TypeAssertionExpression */:
-            case 226 /* NonNullExpression */:
-            case 208 /* ParenthesizedExpression */:
-            case 209 /* FunctionExpression */:
-            case 222 /* ClassExpression */:
-            case 210 /* ArrowFunction */:
-            case 213 /* VoidExpression */:
-            case 211 /* DeleteExpression */:
-            case 212 /* TypeOfExpression */:
-            case 215 /* PrefixUnaryExpression */:
-            case 216 /* PostfixUnaryExpression */:
-            case 217 /* BinaryExpression */:
-            case 218 /* ConditionalExpression */:
-            case 221 /* SpreadElement */:
-            case 219 /* TemplateExpression */:
-            case 223 /* OmittedExpression */:
-            case 274 /* JsxElement */:
-            case 275 /* JsxSelfClosingElement */:
-            case 278 /* JsxFragment */:
-            case 220 /* YieldExpression */:
-            case 214 /* AwaitExpression */:
-            case 227 /* MetaProperty */:
+            case 202 /* ArrayLiteralExpression */:
+            case 203 /* ObjectLiteralExpression */:
+            case 204 /* PropertyAccessExpression */:
+            case 205 /* ElementAccessExpression */:
+            case 206 /* CallExpression */:
+            case 207 /* NewExpression */:
+            case 208 /* TaggedTemplateExpression */:
+            case 227 /* AsExpression */:
+            case 209 /* TypeAssertionExpression */:
+            case 228 /* NonNullExpression */:
+            case 210 /* ParenthesizedExpression */:
+            case 211 /* FunctionExpression */:
+            case 224 /* ClassExpression */:
+            case 212 /* ArrowFunction */:
+            case 215 /* VoidExpression */:
+            case 213 /* DeleteExpression */:
+            case 214 /* TypeOfExpression */:
+            case 217 /* PrefixUnaryExpression */:
+            case 218 /* PostfixUnaryExpression */:
+            case 219 /* BinaryExpression */:
+            case 220 /* ConditionalExpression */:
+            case 223 /* SpreadElement */:
+            case 221 /* TemplateExpression */:
+            case 225 /* OmittedExpression */:
+            case 276 /* JsxElement */:
+            case 277 /* JsxSelfClosingElement */:
+            case 280 /* JsxFragment */:
+            case 222 /* YieldExpression */:
+            case 216 /* AwaitExpression */:
+            case 229 /* MetaProperty */:
                 return true;
-            case 158 /* QualifiedName */:
-                while (node.parent.kind === 158 /* QualifiedName */) {
+            case 159 /* QualifiedName */:
+                while (node.parent.kind === 159 /* QualifiedName */) {
                     node = node.parent;
                 }
-                return node.parent.kind === 177 /* TypeQuery */ || isJSXTagName(node);
-            case 78 /* Identifier */:
-                if (node.parent.kind === 177 /* TypeQuery */ || isJSXTagName(node)) {
+                return node.parent.kind === 179 /* TypeQuery */ || ts.isJSDocLinkLike(node.parent) || ts.isJSDocNameReference(node.parent) || ts.isJSDocMemberName(node.parent) || isJSXTagName(node);
+            case 306 /* JSDocMemberName */:
+                while (ts.isJSDocMemberName(node.parent)) {
+                    node = node.parent;
+                }
+                return node.parent.kind === 179 /* TypeQuery */ || ts.isJSDocLinkLike(node.parent) || ts.isJSDocNameReference(node.parent) || ts.isJSDocMemberName(node.parent) || isJSXTagName(node);
+            case 79 /* Identifier */:
+                if (node.parent.kind === 179 /* TypeQuery */ || ts.isJSDocLinkLike(node.parent) || ts.isJSDocNameReference(node.parent) || ts.isJSDocMemberName(node.parent) || isJSXTagName(node)) {
                     return true;
                 }
             // falls through
@@ -15283,7 +15681,7 @@
             case 9 /* BigIntLiteral */:
             case 10 /* StringLiteral */:
             case 14 /* NoSubstitutionTemplateLiteral */:
-            case 107 /* ThisKeyword */:
+            case 108 /* ThisKeyword */:
                 return isInExpressionContext(node);
             default:
                 return false;
@@ -15293,49 +15691,49 @@
     function isInExpressionContext(node) {
         var parent = node.parent;
         switch (parent.kind) {
-            case 250 /* VariableDeclaration */:
-            case 161 /* Parameter */:
-            case 164 /* PropertyDeclaration */:
-            case 163 /* PropertySignature */:
-            case 292 /* EnumMember */:
-            case 289 /* PropertyAssignment */:
-            case 199 /* BindingElement */:
+            case 252 /* VariableDeclaration */:
+            case 162 /* Parameter */:
+            case 165 /* PropertyDeclaration */:
+            case 164 /* PropertySignature */:
+            case 294 /* EnumMember */:
+            case 291 /* PropertyAssignment */:
+            case 201 /* BindingElement */:
                 return parent.initializer === node;
-            case 234 /* ExpressionStatement */:
-            case 235 /* IfStatement */:
-            case 236 /* DoStatement */:
-            case 237 /* WhileStatement */:
-            case 243 /* ReturnStatement */:
-            case 244 /* WithStatement */:
-            case 245 /* SwitchStatement */:
-            case 285 /* CaseClause */:
-            case 247 /* ThrowStatement */:
+            case 236 /* ExpressionStatement */:
+            case 237 /* IfStatement */:
+            case 238 /* DoStatement */:
+            case 239 /* WhileStatement */:
+            case 245 /* ReturnStatement */:
+            case 246 /* WithStatement */:
+            case 247 /* SwitchStatement */:
+            case 287 /* CaseClause */:
+            case 249 /* ThrowStatement */:
                 return parent.expression === node;
-            case 238 /* ForStatement */:
+            case 240 /* ForStatement */:
                 var forStatement = parent;
-                return (forStatement.initializer === node && forStatement.initializer.kind !== 251 /* VariableDeclarationList */) ||
+                return (forStatement.initializer === node && forStatement.initializer.kind !== 253 /* VariableDeclarationList */) ||
                     forStatement.condition === node ||
                     forStatement.incrementor === node;
-            case 239 /* ForInStatement */:
-            case 240 /* ForOfStatement */:
+            case 241 /* ForInStatement */:
+            case 242 /* ForOfStatement */:
                 var forInStatement = parent;
-                return (forInStatement.initializer === node && forInStatement.initializer.kind !== 251 /* VariableDeclarationList */) ||
+                return (forInStatement.initializer === node && forInStatement.initializer.kind !== 253 /* VariableDeclarationList */) ||
                     forInStatement.expression === node;
-            case 207 /* TypeAssertionExpression */:
-            case 225 /* AsExpression */:
+            case 209 /* TypeAssertionExpression */:
+            case 227 /* AsExpression */:
                 return node === parent.expression;
-            case 229 /* TemplateSpan */:
+            case 231 /* TemplateSpan */:
                 return node === parent.expression;
-            case 159 /* ComputedPropertyName */:
+            case 160 /* ComputedPropertyName */:
                 return node === parent.expression;
-            case 162 /* Decorator */:
-            case 284 /* JsxExpression */:
-            case 283 /* JsxSpreadAttribute */:
-            case 291 /* SpreadAssignment */:
+            case 163 /* Decorator */:
+            case 286 /* JsxExpression */:
+            case 285 /* JsxSpreadAttribute */:
+            case 293 /* SpreadAssignment */:
                 return true;
-            case 224 /* ExpressionWithTypeArguments */:
+            case 226 /* ExpressionWithTypeArguments */:
                 return parent.expression === node && isExpressionWithTypeArgumentsInClassExtendsClause(parent);
-            case 290 /* ShorthandPropertyAssignment */:
+            case 292 /* ShorthandPropertyAssignment */:
                 return parent.objectAssignmentInitializer === node;
             default:
                 return isExpressionNode(parent);
@@ -15343,10 +15741,10 @@
     }
     ts.isInExpressionContext = isInExpressionContext;
     function isPartOfTypeQuery(node) {
-        while (node.kind === 158 /* QualifiedName */ || node.kind === 78 /* Identifier */) {
+        while (node.kind === 159 /* QualifiedName */ || node.kind === 79 /* Identifier */) {
             node = node.parent;
         }
-        return node.kind === 177 /* TypeQuery */;
+        return node.kind === 179 /* TypeQuery */;
     }
     ts.isPartOfTypeQuery = isPartOfTypeQuery;
     function isNamespaceReexportDeclaration(node) {
@@ -15354,7 +15752,7 @@
     }
     ts.isNamespaceReexportDeclaration = isNamespaceReexportDeclaration;
     function isExternalModuleImportEqualsDeclaration(node) {
-        return node.kind === 261 /* ImportEqualsDeclaration */ && node.moduleReference.kind === 273 /* ExternalModuleReference */;
+        return node.kind === 263 /* ImportEqualsDeclaration */ && node.moduleReference.kind === 275 /* ExternalModuleReference */;
     }
     ts.isExternalModuleImportEqualsDeclaration = isExternalModuleImportEqualsDeclaration;
     function getExternalModuleImportEqualsDeclarationExpression(node) {
@@ -15367,7 +15765,7 @@
     }
     ts.getExternalModuleRequireArgument = getExternalModuleRequireArgument;
     function isInternalModuleImportEqualsDeclaration(node) {
-        return node.kind === 261 /* ImportEqualsDeclaration */ && node.moduleReference.kind !== 273 /* ExternalModuleReference */;
+        return node.kind === 263 /* ImportEqualsDeclaration */ && node.moduleReference.kind !== 275 /* ExternalModuleReference */;
     }
     ts.isInternalModuleImportEqualsDeclaration = isInternalModuleImportEqualsDeclaration;
     function isSourceFileJS(file) {
@@ -15399,15 +15797,15 @@
             ts.isIdentifier(node.typeName) &&
             node.typeName.escapedText === "Object" &&
             node.typeArguments && node.typeArguments.length === 2 &&
-            (node.typeArguments[0].kind === 147 /* StringKeyword */ || node.typeArguments[0].kind === 144 /* NumberKeyword */);
+            (node.typeArguments[0].kind === 148 /* StringKeyword */ || node.typeArguments[0].kind === 145 /* NumberKeyword */);
     }
     ts.isJSDocIndexSignature = isJSDocIndexSignature;
     function isRequireCall(callExpression, requireStringLiteralLikeArgument) {
-        if (callExpression.kind !== 204 /* CallExpression */) {
+        if (callExpression.kind !== 206 /* CallExpression */) {
             return false;
         }
         var _a = callExpression, expression = _a.expression, args = _a.arguments;
-        if (expression.kind !== 78 /* Identifier */ || expression.escapedText !== "require") {
+        if (expression.kind !== 79 /* Identifier */ || expression.escapedText !== "require") {
             return false;
         }
         if (args.length !== 1) {
@@ -15422,7 +15820,7 @@
      * This function does not test if the node is in a JavaScript file or not.
      */
     function isRequireVariableDeclaration(node) {
-        if (node.kind === 199 /* BindingElement */) {
+        if (node.kind === 201 /* BindingElement */) {
             node = node.parent.parent;
         }
         return ts.isVariableDeclaration(node) && !!node.initializer && isRequireCall(getLeftmostAccessExpression(node.initializer), /*requireStringLiteralLikeArgument*/ true);
@@ -15477,7 +15875,7 @@
      * We treat the right hand side of assignments with container-like initializers as declarations.
      */
     function getAssignedExpandoInitializer(node) {
-        if (node && node.parent && ts.isBinaryExpression(node.parent) && node.parent.operatorToken.kind === 62 /* EqualsToken */) {
+        if (node && node.parent && ts.isBinaryExpression(node.parent) && node.parent.operatorToken.kind === 63 /* EqualsToken */) {
             var isPrototypeAssignment = isPrototypeAccess(node.parent.left);
             return getExpandoInitializer(node.parent.right, isPrototypeAssignment) ||
                 getDefaultedExpandoInitializer(node.parent.left, node.parent.right, isPrototypeAssignment);
@@ -15503,11 +15901,11 @@
     function getExpandoInitializer(initializer, isPrototypeAssignment) {
         if (ts.isCallExpression(initializer)) {
             var e = skipParentheses(initializer.expression);
-            return e.kind === 209 /* FunctionExpression */ || e.kind === 210 /* ArrowFunction */ ? initializer : undefined;
+            return e.kind === 211 /* FunctionExpression */ || e.kind === 212 /* ArrowFunction */ ? initializer : undefined;
         }
-        if (initializer.kind === 209 /* FunctionExpression */ ||
-            initializer.kind === 222 /* ClassExpression */ ||
-            initializer.kind === 210 /* ArrowFunction */) {
+        if (initializer.kind === 211 /* FunctionExpression */ ||
+            initializer.kind === 224 /* ClassExpression */ ||
+            initializer.kind === 212 /* ArrowFunction */) {
             return initializer;
         }
         if (ts.isObjectLiteralExpression(initializer) && (initializer.properties.length === 0 || isPrototypeAssignment)) {
@@ -15533,7 +15931,7 @@
     }
     function isDefaultedExpandoInitializer(node) {
         var name = ts.isVariableDeclaration(node.parent) ? node.parent.name :
-            ts.isBinaryExpression(node.parent) && node.parent.operatorToken.kind === 62 /* EqualsToken */ ? node.parent.left :
+            ts.isBinaryExpression(node.parent) && node.parent.operatorToken.kind === 63 /* EqualsToken */ ? node.parent.left :
                 undefined;
         return name && getExpandoInitializer(node.right, isPrototypeAccess(name)) && isEntityNameExpression(name) && isSameEntityName(name, node.left);
     }
@@ -15542,7 +15940,7 @@
     function getNameOfExpando(node) {
         if (ts.isBinaryExpression(node.parent)) {
             var parent = ((node.parent.operatorToken.kind === 56 /* BarBarToken */ || node.parent.operatorToken.kind === 60 /* QuestionQuestionToken */) && ts.isBinaryExpression(node.parent.parent)) ? node.parent.parent : node.parent;
-            if (parent.operatorToken.kind === 62 /* EqualsToken */ && ts.isIdentifier(parent.left)) {
+            if (parent.operatorToken.kind === 63 /* EqualsToken */ && ts.isIdentifier(parent.left)) {
                 return parent.left;
             }
         }
@@ -15565,7 +15963,7 @@
             return getTextOfIdentifierOrLiteral(name) === getTextOfIdentifierOrLiteral(initializer);
         }
         if (ts.isIdentifier(name) && isLiteralLikeAccess(initializer) &&
-            (initializer.expression.kind === 107 /* ThisKeyword */ ||
+            (initializer.expression.kind === 108 /* ThisKeyword */ ||
                 ts.isIdentifier(initializer.expression) &&
                     (initializer.expression.escapedText === "window" ||
                         initializer.expression.escapedText === "self" ||
@@ -15633,14 +16031,14 @@
     ts.isLiteralLikeElementAccess = isLiteralLikeElementAccess;
     /** Any series of property and element accesses. */
     function isBindableStaticAccessExpression(node, excludeThisKeyword) {
-        return ts.isPropertyAccessExpression(node) && (!excludeThisKeyword && node.expression.kind === 107 /* ThisKeyword */ || ts.isIdentifier(node.name) && isBindableStaticNameExpression(node.expression, /*excludeThisKeyword*/ true))
+        return ts.isPropertyAccessExpression(node) && (!excludeThisKeyword && node.expression.kind === 108 /* ThisKeyword */ || ts.isIdentifier(node.name) && isBindableStaticNameExpression(node.expression, /*excludeThisKeyword*/ true))
             || isBindableStaticElementAccessExpression(node, excludeThisKeyword);
     }
     ts.isBindableStaticAccessExpression = isBindableStaticAccessExpression;
     /** Any series of property and element accesses, ending in a literal element access */
     function isBindableStaticElementAccessExpression(node, excludeThisKeyword) {
         return isLiteralLikeElementAccess(node)
-            && ((!excludeThisKeyword && node.expression.kind === 107 /* ThisKeyword */) ||
+            && ((!excludeThisKeyword && node.expression.kind === 108 /* ThisKeyword */) ||
                 isEntityNameExpression(node.expression) ||
                 isBindableStaticAccessExpression(node.expression, /*excludeThisKeyword*/ true));
     }
@@ -15670,7 +16068,7 @@
             }
             return 7 /* ObjectDefinePropertyValue */;
         }
-        if (expr.operatorToken.kind !== 62 /* EqualsToken */ || !isAccessExpression(expr.left) || isVoidZero(getRightMostAssignedExpression(expr))) {
+        if (expr.operatorToken.kind !== 63 /* EqualsToken */ || !isAccessExpression(expr.left) || isVoidZero(getRightMostAssignedExpression(expr))) {
             return 0 /* None */;
         }
         if (isBindableStaticNameExpression(expr.left.expression, /*excludeThisKeyword*/ true) && getElementOrPropertyAccessName(expr.left) === "prototype" && ts.isObjectLiteralExpression(getInitializerOfBinaryExpression(expr))) {
@@ -15712,7 +16110,7 @@
     }
     ts.getElementOrPropertyAccessName = getElementOrPropertyAccessName;
     function getAssignmentDeclarationPropertyAccessKind(lhs) {
-        if (lhs.expression.kind === 107 /* ThisKeyword */) {
+        if (lhs.expression.kind === 108 /* ThisKeyword */) {
             return 4 /* ThisProperty */;
         }
         else if (isModuleExportsAccessExpression(lhs)) {
@@ -15757,7 +16155,7 @@
     ts.isPrototypePropertyAssignment = isPrototypePropertyAssignment;
     function isSpecialPropertyDeclaration(expr) {
         return isInJSFile(expr) &&
-            expr.parent && expr.parent.kind === 234 /* ExpressionStatement */ &&
+            expr.parent && expr.parent.kind === 236 /* ExpressionStatement */ &&
             (!ts.isElementAccessExpression(expr) || isLiteralLikeElementAccess(expr)) &&
             !!ts.getJSDocTypeTag(expr.parent);
     }
@@ -15778,17 +16176,17 @@
             return false;
         }
         var decl = symbol.valueDeclaration;
-        return decl.kind === 252 /* FunctionDeclaration */ || ts.isVariableDeclaration(decl) && decl.initializer && ts.isFunctionLike(decl.initializer);
+        return decl.kind === 254 /* FunctionDeclaration */ || ts.isVariableDeclaration(decl) && decl.initializer && ts.isFunctionLike(decl.initializer);
     }
     ts.isFunctionSymbol = isFunctionSymbol;
     function tryGetModuleSpecifierFromDeclaration(node) {
         var _a, _b, _c;
         switch (node.kind) {
-            case 250 /* VariableDeclaration */:
+            case 252 /* VariableDeclaration */:
                 return node.initializer.arguments[0].text;
-            case 262 /* ImportDeclaration */:
+            case 264 /* ImportDeclaration */:
                 return (_a = ts.tryCast(node.moduleSpecifier, ts.isStringLiteralLike)) === null || _a === void 0 ? void 0 : _a.text;
-            case 261 /* ImportEqualsDeclaration */:
+            case 263 /* ImportEqualsDeclaration */:
                 return (_c = ts.tryCast((_b = ts.tryCast(node.moduleReference, ts.isExternalModuleReference)) === null || _b === void 0 ? void 0 : _b.expression, ts.isStringLiteralLike)) === null || _c === void 0 ? void 0 : _c.text;
             default:
                 ts.Debug.assertNever(node);
@@ -15801,14 +16199,14 @@
     ts.importFromModuleSpecifier = importFromModuleSpecifier;
     function tryGetImportFromModuleSpecifier(node) {
         switch (node.parent.kind) {
-            case 262 /* ImportDeclaration */:
-            case 268 /* ExportDeclaration */:
+            case 264 /* ImportDeclaration */:
+            case 270 /* ExportDeclaration */:
                 return node.parent;
-            case 273 /* ExternalModuleReference */:
+            case 275 /* ExternalModuleReference */:
                 return node.parent.parent;
-            case 204 /* CallExpression */:
+            case 206 /* CallExpression */:
                 return isImportCall(node.parent) || isRequireCall(node.parent, /*checkArg*/ false) ? node.parent : undefined;
-            case 192 /* LiteralType */:
+            case 194 /* LiteralType */:
                 ts.Debug.assert(ts.isStringLiteral(node));
                 return ts.tryCast(node.parent.parent, ts.isImportTypeNode);
             default:
@@ -15818,16 +16216,16 @@
     ts.tryGetImportFromModuleSpecifier = tryGetImportFromModuleSpecifier;
     function getExternalModuleName(node) {
         switch (node.kind) {
-            case 262 /* ImportDeclaration */:
-            case 268 /* ExportDeclaration */:
+            case 264 /* ImportDeclaration */:
+            case 270 /* ExportDeclaration */:
                 return node.moduleSpecifier;
-            case 261 /* ImportEqualsDeclaration */:
-                return node.moduleReference.kind === 273 /* ExternalModuleReference */ ? node.moduleReference.expression : undefined;
-            case 196 /* ImportType */:
+            case 263 /* ImportEqualsDeclaration */:
+                return node.moduleReference.kind === 275 /* ExternalModuleReference */ ? node.moduleReference.expression : undefined;
+            case 198 /* ImportType */:
                 return isLiteralImportTypeNode(node) ? node.argument.literal : undefined;
-            case 204 /* CallExpression */:
+            case 206 /* CallExpression */:
                 return node.arguments[0];
-            case 257 /* ModuleDeclaration */:
+            case 259 /* ModuleDeclaration */:
                 return node.name.kind === 10 /* StringLiteral */ ? node.name : undefined;
             default:
                 return ts.Debug.assertNever(node);
@@ -15836,11 +16234,11 @@
     ts.getExternalModuleName = getExternalModuleName;
     function getNamespaceDeclarationNode(node) {
         switch (node.kind) {
-            case 262 /* ImportDeclaration */:
+            case 264 /* ImportDeclaration */:
                 return node.importClause && ts.tryCast(node.importClause.namedBindings, ts.isNamespaceImport);
-            case 261 /* ImportEqualsDeclaration */:
+            case 263 /* ImportEqualsDeclaration */:
                 return node;
-            case 268 /* ExportDeclaration */:
+            case 270 /* ExportDeclaration */:
                 return node.exportClause && ts.tryCast(node.exportClause, ts.isNamespaceExport);
             default:
                 return ts.Debug.assertNever(node);
@@ -15848,7 +16246,7 @@
     }
     ts.getNamespaceDeclarationNode = getNamespaceDeclarationNode;
     function isDefaultImport(node) {
-        return node.kind === 262 /* ImportDeclaration */ && !!node.importClause && !!node.importClause.name;
+        return node.kind === 264 /* ImportDeclaration */ && !!node.importClause && !!node.importClause.name;
     }
     ts.isDefaultImport = isDefaultImport;
     function forEachImportClauseDeclaration(node, action) {
@@ -15869,13 +16267,13 @@
     function hasQuestionToken(node) {
         if (node) {
             switch (node.kind) {
-                case 161 /* Parameter */:
-                case 166 /* MethodDeclaration */:
-                case 165 /* MethodSignature */:
-                case 290 /* ShorthandPropertyAssignment */:
-                case 289 /* PropertyAssignment */:
-                case 164 /* PropertyDeclaration */:
-                case 163 /* PropertySignature */:
+                case 162 /* Parameter */:
+                case 167 /* MethodDeclaration */:
+                case 166 /* MethodSignature */:
+                case 292 /* ShorthandPropertyAssignment */:
+                case 291 /* PropertyAssignment */:
+                case 165 /* PropertyDeclaration */:
+                case 164 /* PropertySignature */:
                     return node.questionToken !== undefined;
             }
         }
@@ -15889,7 +16287,7 @@
     }
     ts.isJSDocConstructSignature = isJSDocConstructSignature;
     function isJSDocTypeAlias(node) {
-        return node.kind === 335 /* JSDocTypedefTag */ || node.kind === 328 /* JSDocCallbackTag */ || node.kind === 329 /* JSDocEnumTag */;
+        return node.kind === 340 /* JSDocTypedefTag */ || node.kind === 333 /* JSDocCallbackTag */ || node.kind === 334 /* JSDocEnumTag */;
     }
     ts.isJSDocTypeAlias = isJSDocTypeAlias;
     function isTypeAlias(node) {
@@ -15899,7 +16297,7 @@
     function getSourceOfAssignment(node) {
         return ts.isExpressionStatement(node) &&
             ts.isBinaryExpression(node.expression) &&
-            node.expression.operatorToken.kind === 62 /* EqualsToken */
+            node.expression.operatorToken.kind === 63 /* EqualsToken */
             ? getRightMostAssignedExpression(node.expression)
             : undefined;
     }
@@ -15914,12 +16312,12 @@
     }
     function getSingleInitializerOfVariableStatementOrPropertyDeclaration(node) {
         switch (node.kind) {
-            case 233 /* VariableStatement */:
+            case 235 /* VariableStatement */:
                 var v = getSingleVariableOfVariableStatement(node);
                 return v && v.initializer;
-            case 164 /* PropertyDeclaration */:
+            case 165 /* PropertyDeclaration */:
                 return node.initializer;
-            case 289 /* PropertyAssignment */:
+            case 291 /* PropertyAssignment */:
                 return node.initializer;
         }
     }
@@ -15931,7 +16329,7 @@
     function getNestedModuleDeclaration(node) {
         return ts.isModuleDeclaration(node) &&
             node.body &&
-            node.body.kind === 257 /* ModuleDeclaration */
+            node.body.kind === 259 /* ModuleDeclaration */
             ? node.body
             : undefined;
     }
@@ -15946,11 +16344,11 @@
             if (ts.hasJSDocNodes(node)) {
                 result = ts.append(result, ts.last(node.jsDoc));
             }
-            if (node.kind === 161 /* Parameter */) {
+            if (node.kind === 162 /* Parameter */) {
                 result = ts.addRange(result, (noCache ? ts.getJSDocParameterTagsNoCache : ts.getJSDocParameterTags)(node));
                 break;
             }
-            if (node.kind === 160 /* TypeParameter */) {
+            if (node.kind === 161 /* TypeParameter */) {
                 result = ts.addRange(result, (noCache ? ts.getJSDocTypeParameterTagsNoCache : ts.getJSDocTypeParameterTags)(node));
                 break;
             }
@@ -15961,13 +16359,13 @@
     ts.getJSDocCommentsAndTags = getJSDocCommentsAndTags;
     function getNextJSDocCommentLocation(node) {
         var parent = node.parent;
-        if (parent.kind === 289 /* PropertyAssignment */ ||
-            parent.kind === 267 /* ExportAssignment */ ||
-            parent.kind === 164 /* PropertyDeclaration */ ||
-            parent.kind === 234 /* ExpressionStatement */ && node.kind === 202 /* PropertyAccessExpression */ ||
-            parent.kind === 243 /* ReturnStatement */ ||
+        if (parent.kind === 291 /* PropertyAssignment */ ||
+            parent.kind === 269 /* ExportAssignment */ ||
+            parent.kind === 165 /* PropertyDeclaration */ ||
+            parent.kind === 236 /* ExpressionStatement */ && node.kind === 204 /* PropertyAccessExpression */ ||
+            parent.kind === 245 /* ReturnStatement */ ||
             getNestedModuleDeclaration(parent) ||
-            ts.isBinaryExpression(node) && node.operatorToken.kind === 62 /* EqualsToken */) {
+            ts.isBinaryExpression(node) && node.operatorToken.kind === 63 /* EqualsToken */) {
             return parent;
         }
         // Try to recognize this pattern when node is initializer of variable declaration and JSDoc comments are on containing variable statement.
@@ -15978,7 +16376,7 @@
         // var x = function(name) { return name.length; }
         else if (parent.parent &&
             (getSingleVariableOfVariableStatement(parent.parent) === node ||
-                ts.isBinaryExpression(parent) && parent.operatorToken.kind === 62 /* EqualsToken */)) {
+                ts.isBinaryExpression(parent) && parent.operatorToken.kind === 63 /* EqualsToken */)) {
             return parent.parent;
         }
         else if (parent.parent && parent.parent.parent &&
@@ -16002,7 +16400,7 @@
         if (!decl) {
             return undefined;
         }
-        var parameter = ts.find(decl.parameters, function (p) { return p.name.kind === 78 /* Identifier */ && p.name.escapedText === name; });
+        var parameter = ts.find(decl.parameters, function (p) { return p.name.kind === 79 /* Identifier */ && p.name.escapedText === name; });
         return parameter && parameter.symbol;
     }
     ts.getParameterSymbolFromJSDoc = getParameterSymbolFromJSDoc;
@@ -16052,7 +16450,7 @@
     ts.hasRestParameter = hasRestParameter;
     function isRestParameter(node) {
         var type = ts.isJSDocParameterTag(node) ? (node.typeExpression && node.typeExpression.type) : node.type;
-        return node.dotDotDotToken !== undefined || !!type && type.kind === 310 /* JSDocVariadicType */;
+        return node.dotDotDotToken !== undefined || !!type && type.kind === 313 /* JSDocVariadicType */;
     }
     ts.isRestParameter = isRestParameter;
     function hasTypeArguments(node) {
@@ -16069,34 +16467,34 @@
         var parent = node.parent;
         while (true) {
             switch (parent.kind) {
-                case 217 /* BinaryExpression */:
+                case 219 /* BinaryExpression */:
                     var binaryOperator = parent.operatorToken.kind;
                     return isAssignmentOperator(binaryOperator) && parent.left === node ?
-                        binaryOperator === 62 /* EqualsToken */ || isLogicalOrCoalescingAssignmentOperator(binaryOperator) ? 1 /* Definite */ : 2 /* Compound */ :
+                        binaryOperator === 63 /* EqualsToken */ || isLogicalOrCoalescingAssignmentOperator(binaryOperator) ? 1 /* Definite */ : 2 /* Compound */ :
                         0 /* None */;
-                case 215 /* PrefixUnaryExpression */:
-                case 216 /* PostfixUnaryExpression */:
+                case 217 /* PrefixUnaryExpression */:
+                case 218 /* PostfixUnaryExpression */:
                     var unaryOperator = parent.operator;
                     return unaryOperator === 45 /* PlusPlusToken */ || unaryOperator === 46 /* MinusMinusToken */ ? 2 /* Compound */ : 0 /* None */;
-                case 239 /* ForInStatement */:
-                case 240 /* ForOfStatement */:
+                case 241 /* ForInStatement */:
+                case 242 /* ForOfStatement */:
                     return parent.initializer === node ? 1 /* Definite */ : 0 /* None */;
-                case 208 /* ParenthesizedExpression */:
-                case 200 /* ArrayLiteralExpression */:
-                case 221 /* SpreadElement */:
-                case 226 /* NonNullExpression */:
+                case 210 /* ParenthesizedExpression */:
+                case 202 /* ArrayLiteralExpression */:
+                case 223 /* SpreadElement */:
+                case 228 /* NonNullExpression */:
                     node = parent;
                     break;
-                case 291 /* SpreadAssignment */:
+                case 293 /* SpreadAssignment */:
                     node = parent.parent;
                     break;
-                case 290 /* ShorthandPropertyAssignment */:
+                case 292 /* ShorthandPropertyAssignment */:
                     if (parent.name !== node) {
                         return 0 /* None */;
                     }
                     node = parent.parent;
                     break;
-                case 289 /* PropertyAssignment */:
+                case 291 /* PropertyAssignment */:
                     if (parent.name === node) {
                         return 0 /* None */;
                     }
@@ -16123,22 +16521,22 @@
      */
     function isNodeWithPossibleHoistedDeclaration(node) {
         switch (node.kind) {
-            case 231 /* Block */:
-            case 233 /* VariableStatement */:
-            case 244 /* WithStatement */:
-            case 235 /* IfStatement */:
-            case 245 /* SwitchStatement */:
-            case 259 /* CaseBlock */:
-            case 285 /* CaseClause */:
-            case 286 /* DefaultClause */:
-            case 246 /* LabeledStatement */:
-            case 238 /* ForStatement */:
-            case 239 /* ForInStatement */:
-            case 240 /* ForOfStatement */:
-            case 236 /* DoStatement */:
-            case 237 /* WhileStatement */:
-            case 248 /* TryStatement */:
-            case 288 /* CatchClause */:
+            case 233 /* Block */:
+            case 235 /* VariableStatement */:
+            case 246 /* WithStatement */:
+            case 237 /* IfStatement */:
+            case 247 /* SwitchStatement */:
+            case 261 /* CaseBlock */:
+            case 287 /* CaseClause */:
+            case 288 /* DefaultClause */:
+            case 248 /* LabeledStatement */:
+            case 240 /* ForStatement */:
+            case 241 /* ForInStatement */:
+            case 242 /* ForOfStatement */:
+            case 238 /* DoStatement */:
+            case 239 /* WhileStatement */:
+            case 250 /* TryStatement */:
+            case 290 /* CatchClause */:
                 return true;
         }
         return false;
@@ -16155,11 +16553,11 @@
         return node;
     }
     function walkUpParenthesizedTypes(node) {
-        return walkUp(node, 187 /* ParenthesizedType */);
+        return walkUp(node, 189 /* ParenthesizedType */);
     }
     ts.walkUpParenthesizedTypes = walkUpParenthesizedTypes;
     function walkUpParenthesizedExpressions(node) {
-        return walkUp(node, 208 /* ParenthesizedExpression */);
+        return walkUp(node, 210 /* ParenthesizedExpression */);
     }
     ts.walkUpParenthesizedExpressions = walkUpParenthesizedExpressions;
     /**
@@ -16169,7 +16567,7 @@
      */
     function walkUpParenthesizedTypesAndGetParentAndChild(node) {
         var child;
-        while (node && node.kind === 187 /* ParenthesizedType */) {
+        while (node && node.kind === 189 /* ParenthesizedType */) {
             child = node;
             node = node.parent;
         }
@@ -16180,19 +16578,13 @@
         return ts.skipOuterExpressions(node, 1 /* Parentheses */);
     }
     ts.skipParentheses = skipParentheses;
-    function skipParenthesesUp(node) {
-        while (node.kind === 208 /* ParenthesizedExpression */) {
-            node = node.parent;
-        }
-        return node;
-    }
     // a node is delete target iff. it is PropertyAccessExpression/ElementAccessExpression with parentheses skipped
     function isDeleteTarget(node) {
-        if (node.kind !== 202 /* PropertyAccessExpression */ && node.kind !== 203 /* ElementAccessExpression */) {
+        if (node.kind !== 204 /* PropertyAccessExpression */ && node.kind !== 205 /* ElementAccessExpression */) {
             return false;
         }
         node = walkUpParenthesizedExpressions(node.parent);
-        return node && node.kind === 211 /* DeleteExpression */;
+        return node && node.kind === 213 /* DeleteExpression */;
     }
     ts.isDeleteTarget = isDeleteTarget;
     function isNodeDescendantOf(node, ancestor) {
@@ -16219,7 +16611,7 @@
                 if (ts.isComputedPropertyName(parent))
                     return parent.parent;
             // falls through
-            case 78 /* Identifier */:
+            case 79 /* Identifier */:
                 if (ts.isDeclaration(parent)) {
                     return parent.name === name ? parent : undefined;
                 }
@@ -16236,7 +16628,7 @@
                         ? binExp
                         : undefined;
                 }
-            case 79 /* PrivateIdentifier */:
+            case 80 /* PrivateIdentifier */:
                 return ts.isDeclaration(parent) && parent.name === name ? parent : undefined;
             default:
                 return undefined;
@@ -16245,7 +16637,7 @@
     ts.getDeclarationFromName = getDeclarationFromName;
     function isLiteralComputedPropertyDeclarationName(node) {
         return isStringOrNumericLiteralLike(node) &&
-            node.parent.kind === 159 /* ComputedPropertyName */ &&
+            node.parent.kind === 160 /* ComputedPropertyName */ &&
             ts.isDeclaration(node.parent.parent);
     }
     ts.isLiteralComputedPropertyDeclarationName = isLiteralComputedPropertyDeclarationName;
@@ -16253,26 +16645,26 @@
     function isIdentifierName(node) {
         var parent = node.parent;
         switch (parent.kind) {
-            case 164 /* PropertyDeclaration */:
-            case 163 /* PropertySignature */:
-            case 166 /* MethodDeclaration */:
-            case 165 /* MethodSignature */:
-            case 168 /* GetAccessor */:
-            case 169 /* SetAccessor */:
-            case 292 /* EnumMember */:
-            case 289 /* PropertyAssignment */:
-            case 202 /* PropertyAccessExpression */:
+            case 165 /* PropertyDeclaration */:
+            case 164 /* PropertySignature */:
+            case 167 /* MethodDeclaration */:
+            case 166 /* MethodSignature */:
+            case 170 /* GetAccessor */:
+            case 171 /* SetAccessor */:
+            case 294 /* EnumMember */:
+            case 291 /* PropertyAssignment */:
+            case 204 /* PropertyAccessExpression */:
                 // Name in member declaration or property name in property access
                 return parent.name === node;
-            case 158 /* QualifiedName */:
+            case 159 /* QualifiedName */:
                 // Name on right hand side of dot in a type query or type reference
                 return parent.right === node;
-            case 199 /* BindingElement */:
-            case 266 /* ImportSpecifier */:
+            case 201 /* BindingElement */:
+            case 268 /* ImportSpecifier */:
                 // Property name in binding element or import specifier
                 return parent.propertyName === node;
-            case 271 /* ExportSpecifier */:
-            case 281 /* JsxAttribute */:
+            case 273 /* ExportSpecifier */:
+            case 283 /* JsxAttribute */:
                 // Any name in an export specifier or JSX Attribute
                 return true;
         }
@@ -16292,33 +16684,33 @@
     // {<Identifier>}
     // {name: <EntityNameExpression>}
     function isAliasSymbolDeclaration(node) {
-        return node.kind === 261 /* ImportEqualsDeclaration */ ||
-            node.kind === 260 /* NamespaceExportDeclaration */ ||
-            node.kind === 263 /* ImportClause */ && !!node.name ||
-            node.kind === 264 /* NamespaceImport */ ||
-            node.kind === 270 /* NamespaceExport */ ||
-            node.kind === 266 /* ImportSpecifier */ ||
-            node.kind === 271 /* ExportSpecifier */ ||
-            node.kind === 267 /* ExportAssignment */ && exportAssignmentIsAlias(node) ||
+        return node.kind === 263 /* ImportEqualsDeclaration */ ||
+            node.kind === 262 /* NamespaceExportDeclaration */ ||
+            node.kind === 265 /* ImportClause */ && !!node.name ||
+            node.kind === 266 /* NamespaceImport */ ||
+            node.kind === 272 /* NamespaceExport */ ||
+            node.kind === 268 /* ImportSpecifier */ ||
+            node.kind === 273 /* ExportSpecifier */ ||
+            node.kind === 269 /* ExportAssignment */ && exportAssignmentIsAlias(node) ||
             ts.isBinaryExpression(node) && getAssignmentDeclarationKind(node) === 2 /* ModuleExports */ && exportAssignmentIsAlias(node) ||
-            ts.isPropertyAccessExpression(node) && ts.isBinaryExpression(node.parent) && node.parent.left === node && node.parent.operatorToken.kind === 62 /* EqualsToken */ && isAliasableExpression(node.parent.right) ||
-            node.kind === 290 /* ShorthandPropertyAssignment */ ||
-            node.kind === 289 /* PropertyAssignment */ && isAliasableExpression(node.initializer);
+            ts.isPropertyAccessExpression(node) && ts.isBinaryExpression(node.parent) && node.parent.left === node && node.parent.operatorToken.kind === 63 /* EqualsToken */ && isAliasableExpression(node.parent.right) ||
+            node.kind === 292 /* ShorthandPropertyAssignment */ ||
+            node.kind === 291 /* PropertyAssignment */ && isAliasableExpression(node.initializer);
     }
     ts.isAliasSymbolDeclaration = isAliasSymbolDeclaration;
     function getAliasDeclarationFromName(node) {
         switch (node.parent.kind) {
-            case 263 /* ImportClause */:
-            case 266 /* ImportSpecifier */:
-            case 264 /* NamespaceImport */:
-            case 271 /* ExportSpecifier */:
-            case 267 /* ExportAssignment */:
-            case 261 /* ImportEqualsDeclaration */:
+            case 265 /* ImportClause */:
+            case 268 /* ImportSpecifier */:
+            case 266 /* NamespaceImport */:
+            case 273 /* ExportSpecifier */:
+            case 269 /* ExportAssignment */:
+            case 263 /* ImportEqualsDeclaration */:
                 return node.parent;
-            case 158 /* QualifiedName */:
+            case 159 /* QualifiedName */:
                 do {
                     node = node.parent;
-                } while (node.parent.kind === 158 /* QualifiedName */);
+                } while (node.parent.kind === 159 /* QualifiedName */);
                 return getAliasDeclarationFromName(node);
         }
     }
@@ -16337,7 +16729,7 @@
     }
     ts.getExportAssignmentExpression = getExportAssignmentExpression;
     function getPropertyAssignmentAliasLikeExpression(node) {
-        return node.kind === 290 /* ShorthandPropertyAssignment */ ? node.name : node.kind === 289 /* PropertyAssignment */ ? node.initializer :
+        return node.kind === 292 /* ShorthandPropertyAssignment */ ? node.name : node.kind === 291 /* PropertyAssignment */ ? node.initializer :
             node.parent.right;
     }
     ts.getPropertyAssignmentAliasLikeExpression = getPropertyAssignmentAliasLikeExpression;
@@ -16354,7 +16746,7 @@
     }
     ts.getEffectiveBaseTypeNode = getEffectiveBaseTypeNode;
     function getClassExtendsHeritageElement(node) {
-        var heritageClause = getHeritageClause(node.heritageClauses, 93 /* ExtendsKeyword */);
+        var heritageClause = getHeritageClause(node.heritageClauses, 94 /* ExtendsKeyword */);
         return heritageClause && heritageClause.types.length > 0 ? heritageClause.types[0] : undefined;
     }
     ts.getClassExtendsHeritageElement = getClassExtendsHeritageElement;
@@ -16363,7 +16755,7 @@
             return ts.getJSDocImplementsTags(node).map(function (n) { return n.class; });
         }
         else {
-            var heritageClause = getHeritageClause(node.heritageClauses, 116 /* ImplementsKeyword */);
+            var heritageClause = getHeritageClause(node.heritageClauses, 117 /* ImplementsKeyword */);
             return heritageClause === null || heritageClause === void 0 ? void 0 : heritageClause.types;
         }
     }
@@ -16376,7 +16768,7 @@
     }
     ts.getAllSuperTypeNodes = getAllSuperTypeNodes;
     function getInterfaceBaseTypeNodes(node) {
-        var heritageClause = getHeritageClause(node.heritageClauses, 93 /* ExtendsKeyword */);
+        var heritageClause = getHeritageClause(node.heritageClauses, 94 /* ExtendsKeyword */);
         return heritageClause ? heritageClause.types : undefined;
     }
     ts.getInterfaceBaseTypeNodes = getInterfaceBaseTypeNodes;
@@ -16403,11 +16795,11 @@
     }
     ts.getAncestor = getAncestor;
     function isKeyword(token) {
-        return 80 /* FirstKeyword */ <= token && token <= 157 /* LastKeyword */;
+        return 81 /* FirstKeyword */ <= token && token <= 158 /* LastKeyword */;
     }
     ts.isKeyword = isKeyword;
     function isContextualKeyword(token) {
-        return 125 /* FirstContextualKeyword */ <= token && token <= 157 /* LastContextualKeyword */;
+        return 126 /* FirstContextualKeyword */ <= token && token <= 158 /* LastContextualKeyword */;
     }
     ts.isContextualKeyword = isContextualKeyword;
     function isNonContextualKeyword(token) {
@@ -16415,7 +16807,7 @@
     }
     ts.isNonContextualKeyword = isNonContextualKeyword;
     function isFutureReservedKeyword(token) {
-        return 116 /* FirstFutureReservedWord */ <= token && token <= 124 /* LastFutureReservedWord */;
+        return 117 /* FirstFutureReservedWord */ <= token && token <= 125 /* LastFutureReservedWord */;
     }
     ts.isFutureReservedKeyword = isFutureReservedKeyword;
     function isStringANonContextualKeyword(name) {
@@ -16451,14 +16843,14 @@
         }
         var flags = 0 /* Normal */;
         switch (node.kind) {
-            case 252 /* FunctionDeclaration */:
-            case 209 /* FunctionExpression */:
-            case 166 /* MethodDeclaration */:
+            case 254 /* FunctionDeclaration */:
+            case 211 /* FunctionExpression */:
+            case 167 /* MethodDeclaration */:
                 if (node.asteriskToken) {
                     flags |= 1 /* Generator */;
                 }
             // falls through
-            case 210 /* ArrowFunction */:
+            case 212 /* ArrowFunction */:
                 if (hasSyntacticModifier(node, 256 /* Async */)) {
                     flags |= 2 /* Async */;
                 }
@@ -16472,10 +16864,10 @@
     ts.getFunctionFlags = getFunctionFlags;
     function isAsyncFunction(node) {
         switch (node.kind) {
-            case 252 /* FunctionDeclaration */:
-            case 209 /* FunctionExpression */:
-            case 210 /* ArrowFunction */:
-            case 166 /* MethodDeclaration */:
+            case 254 /* FunctionDeclaration */:
+            case 211 /* FunctionExpression */:
+            case 212 /* ArrowFunction */:
+            case 167 /* MethodDeclaration */:
                 return node.body !== undefined
                     && node.asteriskToken === undefined
                     && hasSyntacticModifier(node, 256 /* Async */);
@@ -16505,7 +16897,7 @@
     }
     ts.hasDynamicName = hasDynamicName;
     function isDynamicName(name) {
-        if (!(name.kind === 159 /* ComputedPropertyName */ || name.kind === 203 /* ElementAccessExpression */)) {
+        if (!(name.kind === 160 /* ComputedPropertyName */ || name.kind === 205 /* ElementAccessExpression */)) {
             return false;
         }
         var expr = ts.isElementAccessExpression(name) ? skipParentheses(name.argumentExpression) : name.expression;
@@ -16515,13 +16907,13 @@
     ts.isDynamicName = isDynamicName;
     function getPropertyNameForPropertyNameNode(name) {
         switch (name.kind) {
-            case 78 /* Identifier */:
-            case 79 /* PrivateIdentifier */:
+            case 79 /* Identifier */:
+            case 80 /* PrivateIdentifier */:
                 return name.escapedText;
             case 10 /* StringLiteral */:
             case 8 /* NumericLiteral */:
                 return ts.escapeLeadingUnderscores(name.text);
-            case 159 /* ComputedPropertyName */:
+            case 160 /* ComputedPropertyName */:
                 var nameExpression = name.expression;
                 if (isStringOrNumericLiteralLike(nameExpression)) {
                     return ts.escapeLeadingUnderscores(nameExpression.text);
@@ -16540,7 +16932,7 @@
     ts.getPropertyNameForPropertyNameNode = getPropertyNameForPropertyNameNode;
     function isPropertyNameLiteral(node) {
         switch (node.kind) {
-            case 78 /* Identifier */:
+            case 79 /* Identifier */:
             case 10 /* StringLiteral */:
             case 14 /* NoSubstitutionTemplateLiteral */:
             case 8 /* NumericLiteral */:
@@ -16570,11 +16962,15 @@
         return ts.startsWith(symbol.escapedName, "__@");
     }
     ts.isKnownSymbol = isKnownSymbol;
+    function isPrivateIdentifierSymbol(symbol) {
+        return ts.startsWith(symbol.escapedName, "__#");
+    }
+    ts.isPrivateIdentifierSymbol = isPrivateIdentifierSymbol;
     /**
      * Includes the word "Symbol" with unicode escapes
      */
     function isESSymbolIdentifier(node) {
-        return node.kind === 78 /* Identifier */ && node.escapedText === "Symbol";
+        return node.kind === 79 /* Identifier */ && node.escapedText === "Symbol";
     }
     ts.isESSymbolIdentifier = isESSymbolIdentifier;
     function isPushOrUnshiftIdentifier(node) {
@@ -16583,11 +16979,11 @@
     ts.isPushOrUnshiftIdentifier = isPushOrUnshiftIdentifier;
     function isParameterDeclaration(node) {
         var root = getRootDeclaration(node);
-        return root.kind === 161 /* Parameter */;
+        return root.kind === 162 /* Parameter */;
     }
     ts.isParameterDeclaration = isParameterDeclaration;
     function getRootDeclaration(node) {
-        while (node.kind === 199 /* BindingElement */) {
+        while (node.kind === 201 /* BindingElement */) {
             node = node.parent.parent;
         }
         return node;
@@ -16595,15 +16991,15 @@
     ts.getRootDeclaration = getRootDeclaration;
     function nodeStartsNewLexicalEnvironment(node) {
         var kind = node.kind;
-        return kind === 167 /* Constructor */
-            || kind === 209 /* FunctionExpression */
-            || kind === 252 /* FunctionDeclaration */
-            || kind === 210 /* ArrowFunction */
-            || kind === 166 /* MethodDeclaration */
-            || kind === 168 /* GetAccessor */
-            || kind === 169 /* SetAccessor */
-            || kind === 257 /* ModuleDeclaration */
-            || kind === 298 /* SourceFile */;
+        return kind === 169 /* Constructor */
+            || kind === 211 /* FunctionExpression */
+            || kind === 254 /* FunctionDeclaration */
+            || kind === 212 /* ArrowFunction */
+            || kind === 167 /* MethodDeclaration */
+            || kind === 170 /* GetAccessor */
+            || kind === 171 /* SetAccessor */
+            || kind === 259 /* ModuleDeclaration */
+            || kind === 300 /* SourceFile */;
     }
     ts.nodeStartsNewLexicalEnvironment = nodeStartsNewLexicalEnvironment;
     function nodeIsSynthesized(range) {
@@ -16622,41 +17018,41 @@
     })(Associativity = ts.Associativity || (ts.Associativity = {}));
     function getExpressionAssociativity(expression) {
         var operator = getOperator(expression);
-        var hasArguments = expression.kind === 205 /* NewExpression */ && expression.arguments !== undefined;
+        var hasArguments = expression.kind === 207 /* NewExpression */ && expression.arguments !== undefined;
         return getOperatorAssociativity(expression.kind, operator, hasArguments);
     }
     ts.getExpressionAssociativity = getExpressionAssociativity;
     function getOperatorAssociativity(kind, operator, hasArguments) {
         switch (kind) {
-            case 205 /* NewExpression */:
+            case 207 /* NewExpression */:
                 return hasArguments ? 0 /* Left */ : 1 /* Right */;
-            case 215 /* PrefixUnaryExpression */:
-            case 212 /* TypeOfExpression */:
-            case 213 /* VoidExpression */:
-            case 211 /* DeleteExpression */:
-            case 214 /* AwaitExpression */:
-            case 218 /* ConditionalExpression */:
-            case 220 /* YieldExpression */:
+            case 217 /* PrefixUnaryExpression */:
+            case 214 /* TypeOfExpression */:
+            case 215 /* VoidExpression */:
+            case 213 /* DeleteExpression */:
+            case 216 /* AwaitExpression */:
+            case 220 /* ConditionalExpression */:
+            case 222 /* YieldExpression */:
                 return 1 /* Right */;
-            case 217 /* BinaryExpression */:
+            case 219 /* BinaryExpression */:
                 switch (operator) {
                     case 42 /* AsteriskAsteriskToken */:
-                    case 62 /* EqualsToken */:
-                    case 63 /* PlusEqualsToken */:
-                    case 64 /* MinusEqualsToken */:
-                    case 66 /* AsteriskAsteriskEqualsToken */:
-                    case 65 /* AsteriskEqualsToken */:
-                    case 67 /* SlashEqualsToken */:
-                    case 68 /* PercentEqualsToken */:
-                    case 69 /* LessThanLessThanEqualsToken */:
-                    case 70 /* GreaterThanGreaterThanEqualsToken */:
-                    case 71 /* GreaterThanGreaterThanGreaterThanEqualsToken */:
-                    case 72 /* AmpersandEqualsToken */:
-                    case 77 /* CaretEqualsToken */:
-                    case 73 /* BarEqualsToken */:
-                    case 74 /* BarBarEqualsToken */:
-                    case 75 /* AmpersandAmpersandEqualsToken */:
-                    case 76 /* QuestionQuestionEqualsToken */:
+                    case 63 /* EqualsToken */:
+                    case 64 /* PlusEqualsToken */:
+                    case 65 /* MinusEqualsToken */:
+                    case 67 /* AsteriskAsteriskEqualsToken */:
+                    case 66 /* AsteriskEqualsToken */:
+                    case 68 /* SlashEqualsToken */:
+                    case 69 /* PercentEqualsToken */:
+                    case 70 /* LessThanLessThanEqualsToken */:
+                    case 71 /* GreaterThanGreaterThanEqualsToken */:
+                    case 72 /* GreaterThanGreaterThanGreaterThanEqualsToken */:
+                    case 73 /* AmpersandEqualsToken */:
+                    case 78 /* CaretEqualsToken */:
+                    case 74 /* BarEqualsToken */:
+                    case 75 /* BarBarEqualsToken */:
+                    case 76 /* AmpersandAmpersandEqualsToken */:
+                    case 77 /* QuestionQuestionEqualsToken */:
                         return 1 /* Right */;
                 }
         }
@@ -16665,15 +17061,15 @@
     ts.getOperatorAssociativity = getOperatorAssociativity;
     function getExpressionPrecedence(expression) {
         var operator = getOperator(expression);
-        var hasArguments = expression.kind === 205 /* NewExpression */ && expression.arguments !== undefined;
+        var hasArguments = expression.kind === 207 /* NewExpression */ && expression.arguments !== undefined;
         return getOperatorPrecedence(expression.kind, operator, hasArguments);
     }
     ts.getExpressionPrecedence = getExpressionPrecedence;
     function getOperator(expression) {
-        if (expression.kind === 217 /* BinaryExpression */) {
+        if (expression.kind === 219 /* BinaryExpression */) {
             return expression.operatorToken.kind;
         }
-        else if (expression.kind === 215 /* PrefixUnaryExpression */ || expression.kind === 216 /* PostfixUnaryExpression */) {
+        else if (expression.kind === 217 /* PrefixUnaryExpression */ || expression.kind === 218 /* PostfixUnaryExpression */) {
             return expression.operator;
         }
         else {
@@ -16852,82 +17248,82 @@
     })(OperatorPrecedence = ts.OperatorPrecedence || (ts.OperatorPrecedence = {}));
     function getOperatorPrecedence(nodeKind, operatorKind, hasArguments) {
         switch (nodeKind) {
-            case 341 /* CommaListExpression */:
+            case 346 /* CommaListExpression */:
                 return 0 /* Comma */;
-            case 221 /* SpreadElement */:
+            case 223 /* SpreadElement */:
                 return 1 /* Spread */;
-            case 220 /* YieldExpression */:
+            case 222 /* YieldExpression */:
                 return 2 /* Yield */;
-            case 218 /* ConditionalExpression */:
+            case 220 /* ConditionalExpression */:
                 return 4 /* Conditional */;
-            case 217 /* BinaryExpression */:
+            case 219 /* BinaryExpression */:
                 switch (operatorKind) {
                     case 27 /* CommaToken */:
                         return 0 /* Comma */;
-                    case 62 /* EqualsToken */:
-                    case 63 /* PlusEqualsToken */:
-                    case 64 /* MinusEqualsToken */:
-                    case 66 /* AsteriskAsteriskEqualsToken */:
-                    case 65 /* AsteriskEqualsToken */:
-                    case 67 /* SlashEqualsToken */:
-                    case 68 /* PercentEqualsToken */:
-                    case 69 /* LessThanLessThanEqualsToken */:
-                    case 70 /* GreaterThanGreaterThanEqualsToken */:
-                    case 71 /* GreaterThanGreaterThanGreaterThanEqualsToken */:
-                    case 72 /* AmpersandEqualsToken */:
-                    case 77 /* CaretEqualsToken */:
-                    case 73 /* BarEqualsToken */:
-                    case 74 /* BarBarEqualsToken */:
-                    case 75 /* AmpersandAmpersandEqualsToken */:
-                    case 76 /* QuestionQuestionEqualsToken */:
+                    case 63 /* EqualsToken */:
+                    case 64 /* PlusEqualsToken */:
+                    case 65 /* MinusEqualsToken */:
+                    case 67 /* AsteriskAsteriskEqualsToken */:
+                    case 66 /* AsteriskEqualsToken */:
+                    case 68 /* SlashEqualsToken */:
+                    case 69 /* PercentEqualsToken */:
+                    case 70 /* LessThanLessThanEqualsToken */:
+                    case 71 /* GreaterThanGreaterThanEqualsToken */:
+                    case 72 /* GreaterThanGreaterThanGreaterThanEqualsToken */:
+                    case 73 /* AmpersandEqualsToken */:
+                    case 78 /* CaretEqualsToken */:
+                    case 74 /* BarEqualsToken */:
+                    case 75 /* BarBarEqualsToken */:
+                    case 76 /* AmpersandAmpersandEqualsToken */:
+                    case 77 /* QuestionQuestionEqualsToken */:
                         return 3 /* Assignment */;
                     default:
                         return getBinaryOperatorPrecedence(operatorKind);
                 }
             // TODO: Should prefix `++` and `--` be moved to the `Update` precedence?
-            case 207 /* TypeAssertionExpression */:
-            case 226 /* NonNullExpression */:
-            case 215 /* PrefixUnaryExpression */:
-            case 212 /* TypeOfExpression */:
-            case 213 /* VoidExpression */:
-            case 211 /* DeleteExpression */:
-            case 214 /* AwaitExpression */:
+            case 209 /* TypeAssertionExpression */:
+            case 228 /* NonNullExpression */:
+            case 217 /* PrefixUnaryExpression */:
+            case 214 /* TypeOfExpression */:
+            case 215 /* VoidExpression */:
+            case 213 /* DeleteExpression */:
+            case 216 /* AwaitExpression */:
                 return 16 /* Unary */;
-            case 216 /* PostfixUnaryExpression */:
+            case 218 /* PostfixUnaryExpression */:
                 return 17 /* Update */;
-            case 204 /* CallExpression */:
+            case 206 /* CallExpression */:
                 return 18 /* LeftHandSide */;
-            case 205 /* NewExpression */:
+            case 207 /* NewExpression */:
                 return hasArguments ? 19 /* Member */ : 18 /* LeftHandSide */;
-            case 206 /* TaggedTemplateExpression */:
-            case 202 /* PropertyAccessExpression */:
-            case 203 /* ElementAccessExpression */:
-            case 227 /* MetaProperty */:
+            case 208 /* TaggedTemplateExpression */:
+            case 204 /* PropertyAccessExpression */:
+            case 205 /* ElementAccessExpression */:
+            case 229 /* MetaProperty */:
                 return 19 /* Member */;
-            case 225 /* AsExpression */:
+            case 227 /* AsExpression */:
                 return 11 /* Relational */;
-            case 107 /* ThisKeyword */:
-            case 105 /* SuperKeyword */:
-            case 78 /* Identifier */:
-            case 103 /* NullKeyword */:
-            case 109 /* TrueKeyword */:
-            case 94 /* FalseKeyword */:
+            case 108 /* ThisKeyword */:
+            case 106 /* SuperKeyword */:
+            case 79 /* Identifier */:
+            case 104 /* NullKeyword */:
+            case 110 /* TrueKeyword */:
+            case 95 /* FalseKeyword */:
             case 8 /* NumericLiteral */:
             case 9 /* BigIntLiteral */:
             case 10 /* StringLiteral */:
-            case 200 /* ArrayLiteralExpression */:
-            case 201 /* ObjectLiteralExpression */:
-            case 209 /* FunctionExpression */:
-            case 210 /* ArrowFunction */:
-            case 222 /* ClassExpression */:
+            case 202 /* ArrayLiteralExpression */:
+            case 203 /* ObjectLiteralExpression */:
+            case 211 /* FunctionExpression */:
+            case 212 /* ArrowFunction */:
+            case 224 /* ClassExpression */:
             case 13 /* RegularExpressionLiteral */:
             case 14 /* NoSubstitutionTemplateLiteral */:
-            case 219 /* TemplateExpression */:
-            case 208 /* ParenthesizedExpression */:
-            case 223 /* OmittedExpression */:
-            case 274 /* JsxElement */:
-            case 275 /* JsxSelfClosingElement */:
-            case 278 /* JsxFragment */:
+            case 221 /* TemplateExpression */:
+            case 210 /* ParenthesizedExpression */:
+            case 225 /* OmittedExpression */:
+            case 276 /* JsxElement */:
+            case 277 /* JsxSelfClosingElement */:
+            case 280 /* JsxFragment */:
                 return 20 /* Primary */;
             default:
                 return -1 /* Invalid */;
@@ -16957,9 +17353,9 @@
             case 31 /* GreaterThanToken */:
             case 32 /* LessThanEqualsToken */:
             case 33 /* GreaterThanEqualsToken */:
-            case 101 /* InstanceOfKeyword */:
-            case 100 /* InKeyword */:
-            case 126 /* AsKeyword */:
+            case 102 /* InstanceOfKeyword */:
+            case 101 /* InKeyword */:
+            case 127 /* AsKeyword */:
                 return 11 /* Relational */;
             case 47 /* LessThanLessThanToken */:
             case 48 /* GreaterThanGreaterThanToken */:
@@ -16983,7 +17379,7 @@
     function getSemanticJsxChildren(children) {
         return ts.filter(children, function (i) {
             switch (i.kind) {
-                case 284 /* JsxExpression */:
+                case 286 /* JsxExpression */:
                     return !!i.expression;
                 case 11 /* JsxText */:
                     return !i.containsOnlyTriviaWhiteSpaces;
@@ -17076,8 +17472,8 @@
     // There is no reason for this other than that JSON.stringify does not handle it either.
     var doubleQuoteEscapedCharsRegExp = /[\\\"\u0000-\u001f\t\v\f\b\r\n\u2028\u2029\u0085]/g;
     var singleQuoteEscapedCharsRegExp = /[\\\'\u0000-\u001f\t\v\f\b\r\n\u2028\u2029\u0085]/g;
-    // Template strings should be preserved as much as possible
-    var backtickQuoteEscapedCharsRegExp = /[\\`]/g;
+    // Template strings preserve simple LF newlines, still encode CRLF (or CR)
+    var backtickQuoteEscapedCharsRegExp = /\r\n|[\\\`\u0000-\u001f\t\v\f\b\r\u2028\u2029\u0085]/g;
     var escapedCharsMap = new ts.Map(ts.getEntries({
         "\t": "\\t",
         "\v": "\\v",
@@ -17091,7 +17487,8 @@
         "\`": "\\\`",
         "\u2028": "\\u2028",
         "\u2029": "\\u2029",
-        "\u0085": "\\u0085" // nextLine
+        "\u0085": "\\u0085",
+        "\r\n": "\\r\\n", // special case for CRLFs in backticks
     }));
     function encodeUtf16EscapeSequence(charCode) {
         var hexCharCode = charCode.toString(16).toUpperCase();
@@ -17285,7 +17682,7 @@
             reportInaccessibleThisError: ts.noop,
             reportPrivateInBaseOfClassExpression: ts.noop,
             reportInaccessibleUniqueSymbolError: ts.noop,
-            trackSymbol: ts.noop,
+            trackSymbol: function () { return false; },
             writeKeyword: write,
             writeOperator: write,
             writeParameter: write,
@@ -17542,11 +17939,21 @@
     }
     ts.parameterIsThisKeyword = parameterIsThisKeyword;
     function isThisIdentifier(node) {
-        return !!node && node.kind === 78 /* Identifier */ && identifierIsThisKeyword(node);
+        return !!node && node.kind === 79 /* Identifier */ && identifierIsThisKeyword(node);
     }
     ts.isThisIdentifier = isThisIdentifier;
+    function isThisInTypeQuery(node) {
+        if (!isThisIdentifier(node)) {
+            return false;
+        }
+        while (ts.isQualifiedName(node.parent) && node.parent.left === node) {
+            node = node.parent;
+        }
+        return node.parent.kind === 179 /* TypeQuery */;
+    }
+    ts.isThisInTypeQuery = isThisInTypeQuery;
     function identifierIsThisKeyword(id) {
-        return id.originalKeywordKind === 107 /* ThisKeyword */;
+        return id.originalKeywordKind === 108 /* ThisKeyword */;
     }
     ts.identifierIsThisKeyword = identifierIsThisKeyword;
     function getAllAccessorDeclarations(declarations, accessor) {
@@ -17557,10 +17964,10 @@
         var setAccessor;
         if (hasDynamicName(accessor)) {
             firstAccessor = accessor;
-            if (accessor.kind === 168 /* GetAccessor */) {
+            if (accessor.kind === 170 /* GetAccessor */) {
                 getAccessor = accessor;
             }
-            else if (accessor.kind === 169 /* SetAccessor */) {
+            else if (accessor.kind === 171 /* SetAccessor */) {
                 setAccessor = accessor;
             }
             else {
@@ -17570,7 +17977,7 @@
         else {
             ts.forEach(declarations, function (member) {
                 if (ts.isAccessor(member)
-                    && hasSyntacticModifier(member, 32 /* Static */) === hasSyntacticModifier(accessor, 32 /* Static */)) {
+                    && isStatic(member) === isStatic(accessor)) {
                     var memberName = getPropertyNameForPropertyNameNode(member.name);
                     var accessorName = getPropertyNameForPropertyNameNode(accessor.name);
                     if (memberName === accessorName) {
@@ -17580,10 +17987,10 @@
                         else if (!secondAccessor) {
                             secondAccessor = member;
                         }
-                        if (member.kind === 168 /* GetAccessor */ && !getAccessor) {
+                        if (member.kind === 170 /* GetAccessor */ && !getAccessor) {
                             getAccessor = member;
                         }
-                        if (member.kind === 169 /* SetAccessor */ && !setAccessor) {
+                        if (member.kind === 171 /* SetAccessor */ && !setAccessor) {
                             setAccessor = member;
                         }
                     }
@@ -17632,7 +18039,7 @@
     ts.getJSDocTypeParameterDeclarations = getJSDocTypeParameterDeclarations;
     /** template tags are only available when a typedef isn't already using them */
     function isNonTypeAliasTemplate(tag) {
-        return ts.isJSDocTemplateTag(tag) && !(tag.parent.kind === 312 /* JSDocComment */ && tag.parent.tags.some(isJSDocTypeAlias));
+        return ts.isJSDocTemplateTag(tag) && !(tag.parent.kind === 315 /* JSDocComment */ && tag.parent.tags.some(isJSDocTypeAlias));
     }
     /**
      * Gets the effective type annotation of the value parameter of a set accessor. If the node
@@ -17808,7 +18215,7 @@
     ts.writeCommentRange = writeCommentRange;
     function writeTrimmedCurrentLine(text, commentEnd, writer, newLine, pos, nextLineStart) {
         var end = Math.min(commentEnd, nextLineStart - 1);
-        var currentLineText = text.substring(pos, end).replace(/^\s+|\s+$/g, "");
+        var currentLineText = ts.trimString(text.substring(pos, end));
         if (currentLineText) {
             // trimmed forward and ending spaces text
             writer.writeComment(currentLineText);
@@ -17851,6 +18258,11 @@
         return !!getSelectedSyntacticModifierFlags(node, flags);
     }
     ts.hasSyntacticModifier = hasSyntacticModifier;
+    function isStatic(node) {
+        // https://tc39.es/ecma262/#sec-static-semantics-isstatic
+        return ts.isClassElement(node) && hasStaticModifier(node) || ts.isClassStaticBlockDeclaration(node);
+    }
+    ts.isStatic = isStatic;
     function hasStaticModifier(node) {
         return hasSyntacticModifier(node, 32 /* Static */);
     }
@@ -17880,7 +18292,7 @@
     }
     ts.getSelectedSyntacticModifierFlags = getSelectedSyntacticModifierFlags;
     function getModifierFlagsWorker(node, includeJSDoc, alwaysIncludeJSDoc) {
-        if (node.kind >= 0 /* FirstToken */ && node.kind <= 157 /* LastToken */) {
+        if (node.kind >= 0 /* FirstToken */ && node.kind <= 158 /* LastToken */) {
             return 0 /* None */;
         }
         if (!(node.modifierFlagsCache & 536870912 /* HasComputedFlags */)) {
@@ -17949,7 +18361,7 @@
      */
     function getSyntacticModifierFlagsNoCache(node) {
         var flags = modifiersToFlags(node.modifiers);
-        if (node.flags & 4 /* NestedNamespace */ || (node.kind === 78 /* Identifier */ && node.isInJSDocNamespace)) {
+        if (node.flags & 4 /* NestedNamespace */ || (node.kind === 79 /* Identifier */ && node.isInJSDocNamespace)) {
             flags |= 1 /* Export */;
         }
         return flags;
@@ -17968,18 +18380,18 @@
     ts.modifiersToFlags = modifiersToFlags;
     function modifierToFlag(token) {
         switch (token) {
-            case 123 /* StaticKeyword */: return 32 /* Static */;
-            case 122 /* PublicKeyword */: return 4 /* Public */;
-            case 121 /* ProtectedKeyword */: return 16 /* Protected */;
-            case 120 /* PrivateKeyword */: return 8 /* Private */;
-            case 125 /* AbstractKeyword */: return 128 /* Abstract */;
-            case 92 /* ExportKeyword */: return 1 /* Export */;
-            case 133 /* DeclareKeyword */: return 2 /* Ambient */;
-            case 84 /* ConstKeyword */: return 2048 /* Const */;
-            case 87 /* DefaultKeyword */: return 512 /* Default */;
-            case 129 /* AsyncKeyword */: return 256 /* Async */;
-            case 142 /* ReadonlyKeyword */: return 64 /* Readonly */;
-            case 156 /* OverrideKeyword */: return 16384 /* Override */;
+            case 124 /* StaticKeyword */: return 32 /* Static */;
+            case 123 /* PublicKeyword */: return 4 /* Public */;
+            case 122 /* ProtectedKeyword */: return 16 /* Protected */;
+            case 121 /* PrivateKeyword */: return 8 /* Private */;
+            case 126 /* AbstractKeyword */: return 128 /* Abstract */;
+            case 93 /* ExportKeyword */: return 1 /* Export */;
+            case 134 /* DeclareKeyword */: return 2 /* Ambient */;
+            case 85 /* ConstKeyword */: return 2048 /* Const */;
+            case 88 /* DefaultKeyword */: return 512 /* Default */;
+            case 130 /* AsyncKeyword */: return 256 /* Async */;
+            case 143 /* ReadonlyKeyword */: return 64 /* Readonly */;
+            case 157 /* OverrideKeyword */: return 16384 /* Override */;
         }
         return 0 /* None */;
     }
@@ -17995,9 +18407,9 @@
     }
     ts.isLogicalOperator = isLogicalOperator;
     function isLogicalOrCoalescingAssignmentOperator(token) {
-        return token === 74 /* BarBarEqualsToken */
-            || token === 75 /* AmpersandAmpersandEqualsToken */
-            || token === 76 /* QuestionQuestionEqualsToken */;
+        return token === 75 /* BarBarEqualsToken */
+            || token === 76 /* AmpersandAmpersandEqualsToken */
+            || token === 77 /* QuestionQuestionEqualsToken */;
     }
     ts.isLogicalOrCoalescingAssignmentOperator = isLogicalOrCoalescingAssignmentOperator;
     function isLogicalOrCoalescingAssignmentExpression(expr) {
@@ -18005,7 +18417,7 @@
     }
     ts.isLogicalOrCoalescingAssignmentExpression = isLogicalOrCoalescingAssignmentExpression;
     function isAssignmentOperator(token) {
-        return token >= 62 /* FirstAssignment */ && token <= 77 /* LastAssignment */;
+        return token >= 63 /* FirstAssignment */ && token <= 78 /* LastAssignment */;
     }
     ts.isAssignmentOperator = isAssignmentOperator;
     /** Get `C` given `N` if `N` is in the position `class C extends N` where `N` is an ExpressionWithTypeArguments. */
@@ -18018,14 +18430,14 @@
         return ts.isExpressionWithTypeArguments(node)
             && ts.isHeritageClause(node.parent)
             && ts.isClassLike(node.parent.parent)
-            ? { class: node.parent.parent, isImplements: node.parent.token === 116 /* ImplementsKeyword */ }
+            ? { class: node.parent.parent, isImplements: node.parent.token === 117 /* ImplementsKeyword */ }
             : undefined;
     }
     ts.tryGetClassImplementingOrExtendingExpressionWithTypeArguments = tryGetClassImplementingOrExtendingExpressionWithTypeArguments;
     function isAssignmentExpression(node, excludeCompoundAssignment) {
         return ts.isBinaryExpression(node)
             && (excludeCompoundAssignment
-                ? node.operatorToken.kind === 62 /* EqualsToken */
+                ? node.operatorToken.kind === 63 /* EqualsToken */
                 : isAssignmentOperator(node.operatorToken.kind))
             && ts.isLeftHandSideExpression(node.left);
     }
@@ -18037,8 +18449,8 @@
     function isDestructuringAssignment(node) {
         if (isAssignmentExpression(node, /*excludeCompoundAssignment*/ true)) {
             var kind = node.left.kind;
-            return kind === 201 /* ObjectLiteralExpression */
-                || kind === 200 /* ArrayLiteralExpression */;
+            return kind === 203 /* ObjectLiteralExpression */
+                || kind === 202 /* ArrayLiteralExpression */;
         }
         return false;
     }
@@ -18048,33 +18460,33 @@
     }
     ts.isExpressionWithTypeArgumentsInClassExtendsClause = isExpressionWithTypeArgumentsInClassExtendsClause;
     function isEntityNameExpression(node) {
-        return node.kind === 78 /* Identifier */ || isPropertyAccessEntityNameExpression(node);
+        return node.kind === 79 /* Identifier */ || isPropertyAccessEntityNameExpression(node);
     }
     ts.isEntityNameExpression = isEntityNameExpression;
     function getFirstIdentifier(node) {
         switch (node.kind) {
-            case 78 /* Identifier */:
+            case 79 /* Identifier */:
                 return node;
-            case 158 /* QualifiedName */:
+            case 159 /* QualifiedName */:
                 do {
                     node = node.left;
-                } while (node.kind !== 78 /* Identifier */);
+                } while (node.kind !== 79 /* Identifier */);
                 return node;
-            case 202 /* PropertyAccessExpression */:
+            case 204 /* PropertyAccessExpression */:
                 do {
                     node = node.expression;
-                } while (node.kind !== 78 /* Identifier */);
+                } while (node.kind !== 79 /* Identifier */);
                 return node;
         }
     }
     ts.getFirstIdentifier = getFirstIdentifier;
     function isDottedName(node) {
-        return node.kind === 78 /* Identifier */
-            || node.kind === 107 /* ThisKeyword */
-            || node.kind === 105 /* SuperKeyword */
-            || node.kind === 227 /* MetaProperty */
-            || node.kind === 202 /* PropertyAccessExpression */ && isDottedName(node.expression)
-            || node.kind === 208 /* ParenthesizedExpression */ && isDottedName(node.expression);
+        return node.kind === 79 /* Identifier */
+            || node.kind === 108 /* ThisKeyword */
+            || node.kind === 106 /* SuperKeyword */
+            || node.kind === 229 /* MetaProperty */
+            || node.kind === 204 /* PropertyAccessExpression */ && isDottedName(node.expression)
+            || node.kind === 210 /* ParenthesizedExpression */ && isDottedName(node.expression);
     }
     ts.isDottedName = isDottedName;
     function isPropertyAccessEntityNameExpression(node) {
@@ -18105,17 +18517,23 @@
     }
     ts.isPrototypeAccess = isPrototypeAccess;
     function isRightSideOfQualifiedNameOrPropertyAccess(node) {
-        return (node.parent.kind === 158 /* QualifiedName */ && node.parent.right === node) ||
-            (node.parent.kind === 202 /* PropertyAccessExpression */ && node.parent.name === node);
+        return (node.parent.kind === 159 /* QualifiedName */ && node.parent.right === node) ||
+            (node.parent.kind === 204 /* PropertyAccessExpression */ && node.parent.name === node);
     }
     ts.isRightSideOfQualifiedNameOrPropertyAccess = isRightSideOfQualifiedNameOrPropertyAccess;
+    function isRightSideOfQualifiedNameOrPropertyAccessOrJSDocMemberName(node) {
+        return ts.isQualifiedName(node.parent) && node.parent.right === node
+            || ts.isPropertyAccessExpression(node.parent) && node.parent.name === node
+            || ts.isJSDocMemberName(node.parent) && node.parent.right === node;
+    }
+    ts.isRightSideOfQualifiedNameOrPropertyAccessOrJSDocMemberName = isRightSideOfQualifiedNameOrPropertyAccessOrJSDocMemberName;
     function isEmptyObjectLiteral(expression) {
-        return expression.kind === 201 /* ObjectLiteralExpression */ &&
+        return expression.kind === 203 /* ObjectLiteralExpression */ &&
             expression.properties.length === 0;
     }
     ts.isEmptyObjectLiteral = isEmptyObjectLiteral;
     function isEmptyArrayLiteral(expression) {
-        return expression.kind === 200 /* ArrayLiteralExpression */ &&
+        return expression.kind === 202 /* ArrayLiteralExpression */ &&
             expression.elements.length === 0;
     }
     ts.isEmptyArrayLiteral = isEmptyArrayLiteral;
@@ -18447,8 +18865,8 @@
         var parseNode = ts.getParseTreeNode(node);
         if (parseNode) {
             switch (parseNode.parent.kind) {
-                case 256 /* EnumDeclaration */:
-                case 257 /* ModuleDeclaration */:
+                case 258 /* EnumDeclaration */:
+                case 259 /* ModuleDeclaration */:
                     return parseNode === parseNode.parent.name;
             }
         }
@@ -18478,7 +18896,7 @@
     function getDeclarationModifierFlagsFromSymbol(s, isWrite) {
         if (isWrite === void 0) { isWrite = false; }
         if (s.valueDeclaration) {
-            var declaration = (isWrite && s.declarations && ts.find(s.declarations, function (d) { return d.kind === 169 /* SetAccessor */; })) || s.valueDeclaration;
+            var declaration = (isWrite && s.declarations && ts.find(s.declarations, function (d) { return d.kind === 171 /* SetAccessor */; })) || s.valueDeclaration;
             var flags = ts.getCombinedModifierFlags(declaration);
             return s.parent && s.parent.flags & 32 /* Class */ ? flags : flags & ~28 /* AccessibilityModifier */;
         }
@@ -18527,35 +18945,35 @@
         if (!parent)
             return 0 /* Read */;
         switch (parent.kind) {
-            case 208 /* ParenthesizedExpression */:
+            case 210 /* ParenthesizedExpression */:
                 return accessKind(parent);
-            case 216 /* PostfixUnaryExpression */:
-            case 215 /* PrefixUnaryExpression */:
+            case 218 /* PostfixUnaryExpression */:
+            case 217 /* PrefixUnaryExpression */:
                 var operator = parent.operator;
                 return operator === 45 /* PlusPlusToken */ || operator === 46 /* MinusMinusToken */ ? writeOrReadWrite() : 0 /* Read */;
-            case 217 /* BinaryExpression */:
+            case 219 /* BinaryExpression */:
                 var _a = parent, left = _a.left, operatorToken = _a.operatorToken;
                 return left === node && isAssignmentOperator(operatorToken.kind) ?
-                    operatorToken.kind === 62 /* EqualsToken */ ? 1 /* Write */ : writeOrReadWrite()
+                    operatorToken.kind === 63 /* EqualsToken */ ? 1 /* Write */ : writeOrReadWrite()
                     : 0 /* Read */;
-            case 202 /* PropertyAccessExpression */:
+            case 204 /* PropertyAccessExpression */:
                 return parent.name !== node ? 0 /* Read */ : accessKind(parent);
-            case 289 /* PropertyAssignment */: {
+            case 291 /* PropertyAssignment */: {
                 var parentAccess = accessKind(parent.parent);
                 // In `({ x: varname }) = { x: 1 }`, the left `x` is a read, the right `x` is a write.
                 return node === parent.name ? reverseAccessKind(parentAccess) : parentAccess;
             }
-            case 290 /* ShorthandPropertyAssignment */:
+            case 292 /* ShorthandPropertyAssignment */:
                 // Assume it's the local variable being accessed, since we don't check public properties for --noUnusedLocals.
                 return node === parent.objectAssignmentInitializer ? 0 /* Read */ : accessKind(parent.parent);
-            case 200 /* ArrayLiteralExpression */:
+            case 202 /* ArrayLiteralExpression */:
                 return accessKind(parent);
             default:
                 return 0 /* Read */;
         }
         function writeOrReadWrite() {
             // If grandparent is not an ExpressionStatement, this is used as an expression in addition to having a side effect.
-            return parent.parent && skipParenthesesUp(parent.parent).kind === 234 /* ExpressionStatement */ ? 1 /* Write */ : 2 /* ReadWrite */;
+            return parent.parent && walkUpParenthesizedExpressions(parent.parent).kind === 236 /* ExpressionStatement */ ? 1 /* Write */ : 2 /* ReadWrite */;
         }
     }
     function reverseAccessKind(a) {
@@ -18699,37 +19117,37 @@
     }
     ts.isObjectTypeDeclaration = isObjectTypeDeclaration;
     function isTypeNodeKind(kind) {
-        return (kind >= 173 /* FirstTypeNode */ && kind <= 196 /* LastTypeNode */)
-            || kind === 128 /* AnyKeyword */
-            || kind === 152 /* UnknownKeyword */
-            || kind === 144 /* NumberKeyword */
-            || kind === 155 /* BigIntKeyword */
-            || kind === 145 /* ObjectKeyword */
-            || kind === 131 /* BooleanKeyword */
-            || kind === 147 /* StringKeyword */
-            || kind === 148 /* SymbolKeyword */
-            || kind === 113 /* VoidKeyword */
-            || kind === 150 /* UndefinedKeyword */
-            || kind === 141 /* NeverKeyword */
-            || kind === 224 /* ExpressionWithTypeArguments */
-            || kind === 304 /* JSDocAllType */
-            || kind === 305 /* JSDocUnknownType */
-            || kind === 306 /* JSDocNullableType */
-            || kind === 307 /* JSDocNonNullableType */
-            || kind === 308 /* JSDocOptionalType */
-            || kind === 309 /* JSDocFunctionType */
-            || kind === 310 /* JSDocVariadicType */;
+        return (kind >= 175 /* FirstTypeNode */ && kind <= 198 /* LastTypeNode */)
+            || kind === 129 /* AnyKeyword */
+            || kind === 153 /* UnknownKeyword */
+            || kind === 145 /* NumberKeyword */
+            || kind === 156 /* BigIntKeyword */
+            || kind === 146 /* ObjectKeyword */
+            || kind === 132 /* BooleanKeyword */
+            || kind === 148 /* StringKeyword */
+            || kind === 149 /* SymbolKeyword */
+            || kind === 114 /* VoidKeyword */
+            || kind === 151 /* UndefinedKeyword */
+            || kind === 142 /* NeverKeyword */
+            || kind === 226 /* ExpressionWithTypeArguments */
+            || kind === 307 /* JSDocAllType */
+            || kind === 308 /* JSDocUnknownType */
+            || kind === 309 /* JSDocNullableType */
+            || kind === 310 /* JSDocNonNullableType */
+            || kind === 311 /* JSDocOptionalType */
+            || kind === 312 /* JSDocFunctionType */
+            || kind === 313 /* JSDocVariadicType */;
     }
     ts.isTypeNodeKind = isTypeNodeKind;
     function isAccessExpression(node) {
-        return node.kind === 202 /* PropertyAccessExpression */ || node.kind === 203 /* ElementAccessExpression */;
+        return node.kind === 204 /* PropertyAccessExpression */ || node.kind === 205 /* ElementAccessExpression */;
     }
     ts.isAccessExpression = isAccessExpression;
     function getNameOfAccessExpression(node) {
-        if (node.kind === 202 /* PropertyAccessExpression */) {
+        if (node.kind === 204 /* PropertyAccessExpression */) {
             return node.name;
         }
-        ts.Debug.assert(node.kind === 203 /* ElementAccessExpression */);
+        ts.Debug.assert(node.kind === 205 /* ElementAccessExpression */);
         return node.argumentExpression;
     }
     ts.getNameOfAccessExpression = getNameOfAccessExpression;
@@ -18744,7 +19162,7 @@
     }
     ts.isBundleFileTextLike = isBundleFileTextLike;
     function isNamedImportsOrExports(node) {
-        return node.kind === 265 /* NamedImports */ || node.kind === 269 /* NamedExports */;
+        return node.kind === 267 /* NamedImports */ || node.kind === 271 /* NamedExports */;
     }
     ts.isNamedImportsOrExports = isNamedImportsOrExports;
     function getLeftmostAccessExpression(expr) {
@@ -18757,28 +19175,28 @@
     function getLeftmostExpression(node, stopAtCallExpressions) {
         while (true) {
             switch (node.kind) {
-                case 216 /* PostfixUnaryExpression */:
+                case 218 /* PostfixUnaryExpression */:
                     node = node.operand;
                     continue;
-                case 217 /* BinaryExpression */:
+                case 219 /* BinaryExpression */:
                     node = node.left;
                     continue;
-                case 218 /* ConditionalExpression */:
+                case 220 /* ConditionalExpression */:
                     node = node.condition;
                     continue;
-                case 206 /* TaggedTemplateExpression */:
+                case 208 /* TaggedTemplateExpression */:
                     node = node.tag;
                     continue;
-                case 204 /* CallExpression */:
+                case 206 /* CallExpression */:
                     if (stopAtCallExpressions) {
                         return node;
                     }
                 // falls through
-                case 225 /* AsExpression */:
-                case 203 /* ElementAccessExpression */:
-                case 202 /* PropertyAccessExpression */:
-                case 226 /* NonNullExpression */:
-                case 340 /* PartiallyEmittedExpression */:
+                case 227 /* AsExpression */:
+                case 205 /* ElementAccessExpression */:
+                case 204 /* PropertyAccessExpression */:
+                case 228 /* NonNullExpression */:
+                case 345 /* PartiallyEmittedExpression */:
                     node = node.expression;
                     continue;
             }
@@ -19162,13 +19580,11 @@
     }
     ts.getUseDefineForClassFields = getUseDefineForClassFields;
     function compilerOptionsAffectSemanticDiagnostics(newOptions, oldOptions) {
-        return oldOptions !== newOptions &&
-            ts.semanticDiagnosticsOptionDeclarations.some(function (option) { return !isJsonEqual(getCompilerOptionValue(oldOptions, option), getCompilerOptionValue(newOptions, option)); });
+        return optionsHaveChanges(oldOptions, newOptions, ts.semanticDiagnosticsOptionDeclarations);
     }
     ts.compilerOptionsAffectSemanticDiagnostics = compilerOptionsAffectSemanticDiagnostics;
     function compilerOptionsAffectEmit(newOptions, oldOptions) {
-        return oldOptions !== newOptions &&
-            ts.affectsEmitOptionDeclarations.some(function (option) { return !isJsonEqual(getCompilerOptionValue(oldOptions, option), getCompilerOptionValue(newOptions, option)); });
+        return optionsHaveChanges(oldOptions, newOptions, ts.affectsEmitOptionDeclarations);
     }
     ts.compilerOptionsAffectEmit = compilerOptionsAffectEmit;
     function getCompilerOptionValue(options, option) {
@@ -19215,6 +19631,7 @@
         var symlinkedDirectories;
         var symlinkedDirectoriesByRealpath;
         var symlinkedFiles;
+        var hasProcessedResolutions = false;
         return {
             getSymlinkedFiles: function () { return symlinkedFiles; },
             getSymlinkedDirectories: function () { return symlinkedDirectories; },
@@ -19243,30 +19660,31 @@
                     });
                 }
             },
+            setSymlinksFromResolutions: function (files, typeReferenceDirectives) {
+                var _this = this;
+                var _a;
+                ts.Debug.assert(!hasProcessedResolutions);
+                hasProcessedResolutions = true;
+                for (var _i = 0, files_1 = files; _i < files_1.length; _i++) {
+                    var file = files_1[_i];
+                    (_a = file.resolvedModules) === null || _a === void 0 ? void 0 : _a.forEach(function (resolution) { return processResolution(_this, resolution); });
+                }
+                typeReferenceDirectives === null || typeReferenceDirectives === void 0 ? void 0 : typeReferenceDirectives.forEach(function (resolution) { return processResolution(_this, resolution); });
+            },
+            hasProcessedResolutions: function () { return hasProcessedResolutions; },
         };
-    }
-    ts.createSymlinkCache = createSymlinkCache;
-    function discoverProbableSymlinks(files, getCanonicalFileName, cwd) {
-        var cache = createSymlinkCache(cwd, getCanonicalFileName);
-        var symlinks = ts.flatMap(files, function (sf) {
-            var pairs = sf.resolvedModules && ts.arrayFrom(ts.mapDefinedIterator(sf.resolvedModules.values(), function (res) {
-                return (res === null || res === void 0 ? void 0 : res.originalPath) ? [res.resolvedFileName, res.originalPath] : undefined;
-            }));
-            return ts.concatenate(pairs, sf.resolvedTypeReferenceDirectiveNames && ts.arrayFrom(ts.mapDefinedIterator(sf.resolvedTypeReferenceDirectiveNames.values(), function (res) {
-                return (res === null || res === void 0 ? void 0 : res.originalPath) && res.resolvedFileName ? [res.resolvedFileName, res.originalPath] : undefined;
-            })));
-        });
-        for (var _i = 0, symlinks_1 = symlinks; _i < symlinks_1.length; _i++) {
-            var _a = symlinks_1[_i], resolvedPath = _a[0], originalPath = _a[1];
-            cache.setSymlinkedFile(ts.toPath(originalPath, cwd, getCanonicalFileName), resolvedPath);
-            var _b = guessDirectorySymlink(resolvedPath, originalPath, cwd, getCanonicalFileName) || ts.emptyArray, commonResolved = _b[0], commonOriginal = _b[1];
+        function processResolution(cache, resolution) {
+            if (!resolution || !resolution.originalPath || !resolution.resolvedFileName)
+                return;
+            var resolvedFileName = resolution.resolvedFileName, originalPath = resolution.originalPath;
+            cache.setSymlinkedFile(ts.toPath(originalPath, cwd, getCanonicalFileName), resolvedFileName);
+            var _a = guessDirectorySymlink(resolvedFileName, originalPath, cwd, getCanonicalFileName) || ts.emptyArray, commonResolved = _a[0], commonOriginal = _a[1];
             if (commonResolved && commonOriginal) {
                 cache.setSymlinkedDirectory(commonOriginal, { real: commonResolved, realPath: ts.toPath(commonResolved, cwd, getCanonicalFileName) });
             }
         }
-        return cache;
     }
-    ts.discoverProbableSymlinks = discoverProbableSymlinks;
+    ts.createSymlinkCache = createSymlinkCache;
     function guessDirectorySymlink(a, b, cwd, getCanonicalFileName) {
         var aParts = ts.getPathComponents(ts.getNormalizedAbsolutePath(a, cwd));
         var bParts = ts.getPathComponents(ts.getNormalizedAbsolutePath(b, cwd));
@@ -19462,7 +19880,7 @@
     }
     ts.getRegexFromPattern = getRegexFromPattern;
     /** @param path directory of the tsconfig.json */
-    function matchFiles(path, extensions, excludes, includes, useCaseSensitiveFileNames, currentDirectory, depth, getFileSystemEntries, realpath) {
+    function matchFiles(path, extensions, excludes, includes, useCaseSensitiveFileNames, currentDirectory, depth, getFileSystemEntries, realpath, directoryExists) {
         path = ts.normalizePath(path);
         currentDirectory = ts.normalizePath(currentDirectory);
         var patterns = getFileMatcherPatterns(path, excludes, includes, useCaseSensitiveFileNames, currentDirectory);
@@ -19476,7 +19894,9 @@
         var toCanonical = ts.createGetCanonicalFileName(useCaseSensitiveFileNames);
         for (var _i = 0, _a = patterns.basePaths; _i < _a.length; _i++) {
             var basePath = _a[_i];
-            visitDirectory(basePath, ts.combinePaths(currentDirectory, basePath), depth);
+            if (directoryExists(basePath)) {
+                visitDirectory(basePath, ts.combinePaths(currentDirectory, basePath), depth);
+            }
         }
         return ts.flatten(results);
         function visitDirectory(path, absolutePath, depth) {
@@ -19604,14 +20024,14 @@
     ts.supportedTSExtensionsForExtractExtension = [".d.ts" /* Dts */, ".ts" /* Ts */, ".tsx" /* Tsx */];
     ts.supportedJSExtensions = [".js" /* Js */, ".jsx" /* Jsx */];
     ts.supportedJSAndJsonExtensions = [".js" /* Js */, ".jsx" /* Jsx */, ".json" /* Json */];
-    var allSupportedExtensions = __spreadArray(__spreadArray([], ts.supportedTSExtensions), ts.supportedJSExtensions);
-    var allSupportedExtensionsWithJson = __spreadArray(__spreadArray(__spreadArray([], ts.supportedTSExtensions), ts.supportedJSExtensions), [".json" /* Json */]);
+    var allSupportedExtensions = __spreadArray(__spreadArray([], ts.supportedTSExtensions, true), ts.supportedJSExtensions, true);
+    var allSupportedExtensionsWithJson = __spreadArray(__spreadArray(__spreadArray([], ts.supportedTSExtensions, true), ts.supportedJSExtensions, true), [".json" /* Json */], false);
     function getSupportedExtensions(options, extraFileExtensions) {
         var needJsExtensions = options && getAllowJSCompilerOption(options);
         if (!extraFileExtensions || extraFileExtensions.length === 0) {
             return needJsExtensions ? allSupportedExtensions : ts.supportedTSExtensions;
         }
-        var extensions = __spreadArray(__spreadArray([], needJsExtensions ? allSupportedExtensions : ts.supportedTSExtensions), ts.mapDefined(extraFileExtensions, function (x) { return x.scriptKind === 7 /* Deferred */ || needJsExtensions && isJSLike(x.scriptKind) ? x.extension : undefined; }));
+        var extensions = __spreadArray(__spreadArray([], needJsExtensions ? allSupportedExtensions : ts.supportedTSExtensions, true), ts.mapDefined(extraFileExtensions, function (x) { return x.scriptKind === 7 /* Deferred */ || needJsExtensions && isJSLike(x.scriptKind) ? x.extension : undefined; }), true);
         return ts.deduplicate(extensions, ts.equateStringsCaseSensitive, ts.compareStringsCaseSensitive);
     }
     ts.getSupportedExtensions = getSupportedExtensions;
@@ -19625,7 +20045,7 @@
         if (supportedExtensions === ts.supportedTSExtensions) {
             return ts.supportedTSExtensionsWithJson;
         }
-        return __spreadArray(__spreadArray([], supportedExtensions), [".json" /* Json */]);
+        return __spreadArray(__spreadArray([], supportedExtensions, true), [".json" /* Json */], false);
     }
     ts.getSuppoertedExtensionsWithJsonIfResolveJsonModule = getSuppoertedExtensionsWithJsonIfResolveJsonModule;
     function isJSLike(scriptKind) {
@@ -19735,16 +20155,27 @@
         return ts.changeAnyExtension(path, newExtension, extensionsToRemove, /*ignoreCase*/ false);
     }
     ts.changeExtension = changeExtension;
+    /**
+     * Returns the input if there are no stars, a pattern if there is exactly one,
+     * and undefined if there are more.
+     */
     function tryParsePattern(pattern) {
-        // This should be verified outside of here and a proper error thrown.
-        ts.Debug.assert(hasZeroOrOneAsteriskCharacter(pattern));
         var indexOfStar = pattern.indexOf("*");
-        return indexOfStar === -1 ? undefined : {
-            prefix: pattern.substr(0, indexOfStar),
-            suffix: pattern.substr(indexOfStar + 1)
-        };
+        if (indexOfStar === -1) {
+            return pattern;
+        }
+        return pattern.indexOf("*", indexOfStar + 1) !== -1
+            ? undefined
+            : {
+                prefix: pattern.substr(0, indexOfStar),
+                suffix: pattern.substr(indexOfStar + 1)
+            };
     }
     ts.tryParsePattern = tryParsePattern;
+    function tryParsePatterns(paths) {
+        return ts.mapDefined(ts.getOwnKeys(paths), function (path) { return tryParsePattern(path); });
+    }
+    ts.tryParsePatterns = tryParsePatterns;
     function positionIsSynthesized(pos) {
         // This is a fast way of testing the following conditions:
         //  pos === undefined || pos === null || isNaN(pos) || pos < 0;
@@ -19786,23 +20217,19 @@
         directories: ts.emptyArray
     };
     /**
-     * patternStrings contains both pattern strings (containing "*") and regular strings.
+     * patternOrStrings contains both patterns (containing "*") and regular strings.
      * Return an exact match if possible, or a pattern match, or undefined.
      * (These are verified by verifyCompilerOptions to have 0 or 1 "*" characters.)
      */
-    function matchPatternOrExact(patternStrings, candidate) {
+    function matchPatternOrExact(patternOrStrings, candidate) {
         var patterns = [];
-        for (var _i = 0, patternStrings_1 = patternStrings; _i < patternStrings_1.length; _i++) {
-            var patternString = patternStrings_1[_i];
-            if (!hasZeroOrOneAsteriskCharacter(patternString))
-                continue;
-            var pattern = tryParsePattern(patternString);
-            if (pattern) {
-                patterns.push(pattern);
+        for (var _i = 0, patternOrStrings_1 = patternOrStrings; _i < patternOrStrings_1.length; _i++) {
+            var patternOrString = patternOrStrings_1[_i];
+            if (patternOrString === candidate) {
+                return candidate;
             }
-            else if (patternString === candidate) {
-                // pattern was matched as is - no need to search further
-                return patternString;
+            if (!ts.isString(patternOrString)) {
+                patterns.push(patternOrString);
             }
         }
         return ts.findBestPatternMatch(patterns, function (_) { return _; }, candidate);
@@ -19953,42 +20380,45 @@
             || isPartOfTypeQuery(useSite)
             || isIdentifierInNonEmittingHeritageClause(useSite)
             || isPartOfPossiblyValidTypeOrAbstractComputedPropertyName(useSite)
-            || !isExpressionNode(useSite);
+            || !(isExpressionNode(useSite) || isShorthandPropertyNameUseSite(useSite));
     }
     ts.isValidTypeOnlyAliasUseSite = isValidTypeOnlyAliasUseSite;
     function typeOnlyDeclarationIsExport(typeOnlyDeclaration) {
-        return typeOnlyDeclaration.kind === 271 /* ExportSpecifier */;
+        return typeOnlyDeclaration.kind === 273 /* ExportSpecifier */;
     }
     ts.typeOnlyDeclarationIsExport = typeOnlyDeclarationIsExport;
+    function isShorthandPropertyNameUseSite(useSite) {
+        return ts.isIdentifier(useSite) && ts.isShorthandPropertyAssignment(useSite.parent) && useSite.parent.name === useSite;
+    }
     function isPartOfPossiblyValidTypeOrAbstractComputedPropertyName(node) {
-        while (node.kind === 78 /* Identifier */ || node.kind === 202 /* PropertyAccessExpression */) {
+        while (node.kind === 79 /* Identifier */ || node.kind === 204 /* PropertyAccessExpression */) {
             node = node.parent;
         }
-        if (node.kind !== 159 /* ComputedPropertyName */) {
+        if (node.kind !== 160 /* ComputedPropertyName */) {
             return false;
         }
         if (hasSyntacticModifier(node.parent, 128 /* Abstract */)) {
             return true;
         }
         var containerKind = node.parent.parent.kind;
-        return containerKind === 254 /* InterfaceDeclaration */ || containerKind === 178 /* TypeLiteral */;
+        return containerKind === 256 /* InterfaceDeclaration */ || containerKind === 180 /* TypeLiteral */;
     }
     /** Returns true for an identifier in 1) an `implements` clause, and 2) an `extends` clause of an interface. */
     function isIdentifierInNonEmittingHeritageClause(node) {
-        if (node.kind !== 78 /* Identifier */)
+        if (node.kind !== 79 /* Identifier */)
             return false;
         var heritageClause = ts.findAncestor(node.parent, function (parent) {
             switch (parent.kind) {
-                case 287 /* HeritageClause */:
+                case 289 /* HeritageClause */:
                     return true;
-                case 202 /* PropertyAccessExpression */:
-                case 224 /* ExpressionWithTypeArguments */:
+                case 204 /* PropertyAccessExpression */:
+                case 226 /* ExpressionWithTypeArguments */:
                     return false;
                 default:
                     return "quit";
             }
         });
-        return (heritageClause === null || heritageClause === void 0 ? void 0 : heritageClause.token) === 116 /* ImplementsKeyword */ || (heritageClause === null || heritageClause === void 0 ? void 0 : heritageClause.parent.kind) === 254 /* InterfaceDeclaration */;
+        return (heritageClause === null || heritageClause === void 0 ? void 0 : heritageClause.token) === 117 /* ImplementsKeyword */ || (heritageClause === null || heritageClause === void 0 ? void 0 : heritageClause.parent.kind) === 256 /* InterfaceDeclaration */;
     }
     function isIdentifierTypeReference(node) {
         return ts.isTypeReferenceNode(node) && ts.isIdentifier(node.typeName);
@@ -20149,18 +20579,18 @@
         if (!node.parent)
             return undefined;
         switch (node.kind) {
-            case 160 /* TypeParameter */:
+            case 161 /* TypeParameter */:
                 var parent_1 = node.parent;
-                return parent_1.kind === 186 /* InferType */ ? undefined : parent_1.typeParameters;
-            case 161 /* Parameter */:
+                return parent_1.kind === 188 /* InferType */ ? undefined : parent_1.typeParameters;
+            case 162 /* Parameter */:
                 return node.parent.parameters;
-            case 195 /* TemplateLiteralTypeSpan */:
+            case 197 /* TemplateLiteralTypeSpan */:
                 return node.parent.templateSpans;
-            case 229 /* TemplateSpan */:
+            case 231 /* TemplateSpan */:
                 return node.parent.templateSpans;
-            case 162 /* Decorator */:
+            case 163 /* Decorator */:
                 return node.parent.decorators;
-            case 287 /* HeritageClause */:
+            case 289 /* HeritageClause */:
                 return node.parent.heritageClauses;
         }
         var parent = node.parent;
@@ -20168,49 +20598,73 @@
             return ts.isJSDocTypeLiteral(node.parent) ? undefined : node.parent.tags;
         }
         switch (parent.kind) {
-            case 178 /* TypeLiteral */:
-            case 254 /* InterfaceDeclaration */:
+            case 180 /* TypeLiteral */:
+            case 256 /* InterfaceDeclaration */:
                 return ts.isTypeElement(node) ? parent.members : undefined;
-            case 183 /* UnionType */:
-            case 184 /* IntersectionType */:
+            case 185 /* UnionType */:
+            case 186 /* IntersectionType */:
                 return parent.types;
-            case 180 /* TupleType */:
-            case 200 /* ArrayLiteralExpression */:
-            case 341 /* CommaListExpression */:
-            case 265 /* NamedImports */:
-            case 269 /* NamedExports */:
+            case 182 /* TupleType */:
+            case 202 /* ArrayLiteralExpression */:
+            case 346 /* CommaListExpression */:
+            case 267 /* NamedImports */:
+            case 271 /* NamedExports */:
                 return parent.elements;
-            case 201 /* ObjectLiteralExpression */:
-            case 282 /* JsxAttributes */:
+            case 203 /* ObjectLiteralExpression */:
+            case 284 /* JsxAttributes */:
                 return parent.properties;
-            case 204 /* CallExpression */:
-            case 205 /* NewExpression */:
+            case 206 /* CallExpression */:
+            case 207 /* NewExpression */:
                 return ts.isTypeNode(node) ? parent.typeArguments :
                     parent.expression === node ? undefined :
                         parent.arguments;
-            case 274 /* JsxElement */:
-            case 278 /* JsxFragment */:
+            case 276 /* JsxElement */:
+            case 280 /* JsxFragment */:
                 return ts.isJsxChild(node) ? parent.children : undefined;
-            case 276 /* JsxOpeningElement */:
-            case 275 /* JsxSelfClosingElement */:
+            case 278 /* JsxOpeningElement */:
+            case 277 /* JsxSelfClosingElement */:
                 return ts.isTypeNode(node) ? parent.typeArguments : undefined;
-            case 231 /* Block */:
-            case 285 /* CaseClause */:
-            case 286 /* DefaultClause */:
-            case 258 /* ModuleBlock */:
+            case 233 /* Block */:
+            case 287 /* CaseClause */:
+            case 288 /* DefaultClause */:
+            case 260 /* ModuleBlock */:
                 return parent.statements;
-            case 259 /* CaseBlock */:
+            case 261 /* CaseBlock */:
                 return parent.clauses;
-            case 253 /* ClassDeclaration */:
-            case 222 /* ClassExpression */:
+            case 255 /* ClassDeclaration */:
+            case 224 /* ClassExpression */:
                 return ts.isClassElement(node) ? parent.members : undefined;
-            case 256 /* EnumDeclaration */:
+            case 258 /* EnumDeclaration */:
                 return ts.isEnumMember(node) ? parent.members : undefined;
-            case 298 /* SourceFile */:
+            case 300 /* SourceFile */:
                 return parent.statements;
         }
     }
     ts.getContainingNodeArray = getContainingNodeArray;
+    function hasContextSensitiveParameters(node) {
+        // Functions with type parameters are not context sensitive.
+        if (!node.typeParameters) {
+            // Functions with any parameters that lack type annotations are context sensitive.
+            if (ts.some(node.parameters, function (p) { return !getEffectiveTypeAnnotationNode(p); })) {
+                return true;
+            }
+            if (node.kind !== 212 /* ArrowFunction */) {
+                // If the first parameter is not an explicit 'this' parameter, then the function has
+                // an implicit 'this' parameter which is subject to contextual typing.
+                var parameter = ts.firstOrUndefined(node.parameters);
+                if (!(parameter && parameterIsThisKeyword(parameter))) {
+                    return true;
+                }
+            }
+        }
+        return false;
+    }
+    ts.hasContextSensitiveParameters = hasContextSensitiveParameters;
+    /* @internal */
+    function isInfinityOrNaNString(name) {
+        return name === "Infinity" || name === "-Infinity" || name === "NaN";
+    }
+    ts.isInfinityOrNaNString = isInfinityOrNaNString;
 })(ts || (ts = {}));
 /* @internal */
 var ts;
@@ -20324,10 +20778,10 @@
             //
             // If `a ** d` is on the left of operator `**`, we need to parenthesize to preserve
             // the intended order of operations: `(a ** b) ** c`
-            var binaryOperatorPrecedence = ts.getOperatorPrecedence(217 /* BinaryExpression */, binaryOperator);
-            var binaryOperatorAssociativity = ts.getOperatorAssociativity(217 /* BinaryExpression */, binaryOperator);
+            var binaryOperatorPrecedence = ts.getOperatorPrecedence(219 /* BinaryExpression */, binaryOperator);
+            var binaryOperatorAssociativity = ts.getOperatorAssociativity(219 /* BinaryExpression */, binaryOperator);
             var emittedOperand = ts.skipPartiallyEmittedExpressions(operand);
-            if (!isLeftSideOfBinary && operand.kind === 210 /* ArrowFunction */ && binaryOperatorPrecedence > 3 /* Assignment */) {
+            if (!isLeftSideOfBinary && operand.kind === 212 /* ArrowFunction */ && binaryOperatorPrecedence > 3 /* Assignment */) {
                 // We need to parenthesize arrow functions on the right side to avoid it being
                 // parsed as parenthesized expression: `a && (() => {})`
                 return true;
@@ -20339,7 +20793,7 @@
                     // and is a yield expression, then we do not need parentheses.
                     if (!isLeftSideOfBinary
                         && binaryOperatorAssociativity === 1 /* Right */
-                        && operand.kind === 220 /* YieldExpression */) {
+                        && operand.kind === 222 /* YieldExpression */) {
                         return false;
                     }
                     return true;
@@ -20427,7 +20881,7 @@
             if (ts.isLiteralKind(node.kind)) {
                 return node.kind;
             }
-            if (node.kind === 217 /* BinaryExpression */ && node.operatorToken.kind === 39 /* PlusToken */) {
+            if (node.kind === 219 /* BinaryExpression */ && node.operatorToken.kind === 39 /* PlusToken */) {
                 if (node.cachedLiteralKind !== undefined) {
                     return node.cachedLiteralKind;
                 }
@@ -20453,7 +20907,7 @@
         function parenthesizeBinaryOperand(binaryOperator, operand, isLeftSideOfBinary, leftOperand) {
             var skipped = ts.skipPartiallyEmittedExpressions(operand);
             // If the resulting expression is already parenthesized, we do not need to do any further processing.
-            if (skipped.kind === 208 /* ParenthesizedExpression */) {
+            if (skipped.kind === 210 /* ParenthesizedExpression */) {
                 return operand;
             }
             return binaryOperandNeedsParentheses(binaryOperator, operand, isLeftSideOfBinary, leftOperand)
@@ -20470,7 +20924,7 @@
             return ts.isCommaSequence(expression) ? factory.createParenthesizedExpression(expression) : expression;
         }
         function parenthesizeConditionOfConditionalExpression(condition) {
-            var conditionalPrecedence = ts.getOperatorPrecedence(218 /* ConditionalExpression */, 57 /* QuestionToken */);
+            var conditionalPrecedence = ts.getOperatorPrecedence(220 /* ConditionalExpression */, 57 /* QuestionToken */);
             var emittedCondition = ts.skipPartiallyEmittedExpressions(condition);
             var conditionPrecedence = ts.getExpressionPrecedence(emittedCondition);
             if (ts.compareValues(conditionPrecedence, conditionalPrecedence) !== 1 /* GreaterThan */) {
@@ -20503,8 +20957,8 @@
             var needsParens = ts.isCommaSequence(check);
             if (!needsParens) {
                 switch (ts.getLeftmostExpression(check, /*stopAtCallExpression*/ false).kind) {
-                    case 222 /* ClassExpression */:
-                    case 209 /* FunctionExpression */:
+                    case 224 /* ClassExpression */:
+                    case 211 /* FunctionExpression */:
                         needsParens = true;
                 }
             }
@@ -20517,9 +20971,9 @@
         function parenthesizeExpressionOfNew(expression) {
             var leftmostExpr = ts.getLeftmostExpression(expression, /*stopAtCallExpressions*/ true);
             switch (leftmostExpr.kind) {
-                case 204 /* CallExpression */:
+                case 206 /* CallExpression */:
                     return factory.createParenthesizedExpression(expression);
-                case 205 /* NewExpression */:
+                case 207 /* NewExpression */:
                     return !leftmostExpr.arguments
                         ? factory.createParenthesizedExpression(expression)
                         : expression; // TODO(rbuckton): Verify this assertion holds
@@ -20539,7 +20993,7 @@
             //
             var emittedExpression = ts.skipPartiallyEmittedExpressions(expression);
             if (ts.isLeftHandSideExpression(emittedExpression)
-                && (emittedExpression.kind !== 205 /* NewExpression */ || emittedExpression.arguments)) {
+                && (emittedExpression.kind !== 207 /* NewExpression */ || emittedExpression.arguments)) {
                 // TODO(rbuckton): Verify whether this assertion holds.
                 return expression;
             }
@@ -20561,7 +21015,7 @@
         function parenthesizeExpressionForDisallowedComma(expression) {
             var emittedExpression = ts.skipPartiallyEmittedExpressions(expression);
             var expressionPrecedence = ts.getExpressionPrecedence(emittedExpression);
-            var commaPrecedence = ts.getOperatorPrecedence(217 /* BinaryExpression */, 27 /* CommaToken */);
+            var commaPrecedence = ts.getOperatorPrecedence(219 /* BinaryExpression */, 27 /* CommaToken */);
             // TODO(rbuckton): Verifiy whether `setTextRange` is needed.
             return expressionPrecedence > commaPrecedence ? expression : ts.setTextRange(factory.createParenthesizedExpression(expression), expression);
         }
@@ -20570,44 +21024,44 @@
             if (ts.isCallExpression(emittedExpression)) {
                 var callee = emittedExpression.expression;
                 var kind = ts.skipPartiallyEmittedExpressions(callee).kind;
-                if (kind === 209 /* FunctionExpression */ || kind === 210 /* ArrowFunction */) {
+                if (kind === 211 /* FunctionExpression */ || kind === 212 /* ArrowFunction */) {
                     // TODO(rbuckton): Verifiy whether `setTextRange` is needed.
                     var updated = factory.updateCallExpression(emittedExpression, ts.setTextRange(factory.createParenthesizedExpression(callee), callee), emittedExpression.typeArguments, emittedExpression.arguments);
                     return factory.restoreOuterExpressions(expression, updated, 8 /* PartiallyEmittedExpressions */);
                 }
             }
             var leftmostExpressionKind = ts.getLeftmostExpression(emittedExpression, /*stopAtCallExpressions*/ false).kind;
-            if (leftmostExpressionKind === 201 /* ObjectLiteralExpression */ || leftmostExpressionKind === 209 /* FunctionExpression */) {
+            if (leftmostExpressionKind === 203 /* ObjectLiteralExpression */ || leftmostExpressionKind === 211 /* FunctionExpression */) {
                 // TODO(rbuckton): Verifiy whether `setTextRange` is needed.
                 return ts.setTextRange(factory.createParenthesizedExpression(expression), expression);
             }
             return expression;
         }
         function parenthesizeConciseBodyOfArrowFunction(body) {
-            if (!ts.isBlock(body) && (ts.isCommaSequence(body) || ts.getLeftmostExpression(body, /*stopAtCallExpressions*/ false).kind === 201 /* ObjectLiteralExpression */)) {
+            if (!ts.isBlock(body) && (ts.isCommaSequence(body) || ts.getLeftmostExpression(body, /*stopAtCallExpressions*/ false).kind === 203 /* ObjectLiteralExpression */)) {
                 // TODO(rbuckton): Verifiy whether `setTextRange` is needed.
                 return ts.setTextRange(factory.createParenthesizedExpression(body), body);
             }
             return body;
         }
         function parenthesizeMemberOfConditionalType(member) {
-            return member.kind === 185 /* ConditionalType */ ? factory.createParenthesizedType(member) : member;
+            return member.kind === 187 /* ConditionalType */ ? factory.createParenthesizedType(member) : member;
         }
         function parenthesizeMemberOfElementType(member) {
             switch (member.kind) {
-                case 183 /* UnionType */:
-                case 184 /* IntersectionType */:
-                case 175 /* FunctionType */:
-                case 176 /* ConstructorType */:
+                case 185 /* UnionType */:
+                case 186 /* IntersectionType */:
+                case 177 /* FunctionType */:
+                case 178 /* ConstructorType */:
                     return factory.createParenthesizedType(member);
             }
             return parenthesizeMemberOfConditionalType(member);
         }
         function parenthesizeElementTypeOfArrayType(member) {
             switch (member.kind) {
-                case 177 /* TypeQuery */:
-                case 189 /* TypeOperator */:
-                case 186 /* InferType */:
+                case 179 /* TypeQuery */:
+                case 191 /* TypeOperator */:
+                case 188 /* InferType */:
                     return factory.createParenthesizedType(member);
             }
             return parenthesizeMemberOfElementType(member);
@@ -20713,11 +21167,11 @@
         }
         function convertToAssignmentPattern(node) {
             switch (node.kind) {
-                case 198 /* ArrayBindingPattern */:
-                case 200 /* ArrayLiteralExpression */:
+                case 200 /* ArrayBindingPattern */:
+                case 202 /* ArrayLiteralExpression */:
                     return convertToArrayAssignmentPattern(node);
-                case 197 /* ObjectBindingPattern */:
-                case 201 /* ObjectLiteralExpression */:
+                case 199 /* ObjectBindingPattern */:
+                case 203 /* ObjectLiteralExpression */:
                     return convertToObjectAssignmentPattern(node);
             }
         }
@@ -20845,6 +21299,8 @@
             updateConstructSignature: updateConstructSignature,
             createIndexSignature: createIndexSignature,
             updateIndexSignature: updateIndexSignature,
+            createClassStaticBlockDeclaration: createClassStaticBlockDeclaration,
+            updateClassStaticBlockDeclaration: updateClassStaticBlockDeclaration,
             createTemplateLiteralTypeSpan: createTemplateLiteralTypeSpan,
             updateTemplateLiteralTypeSpan: updateTemplateLiteralTypeSpan,
             createKeywordTypeNode: createKeywordTypeNode,
@@ -21058,18 +21514,18 @@
             createExternalModuleReference: createExternalModuleReference,
             updateExternalModuleReference: updateExternalModuleReference,
             // lazily load factory members for JSDoc types with similar structure
-            get createJSDocAllType() { return getJSDocPrimaryTypeCreateFunction(304 /* JSDocAllType */); },
-            get createJSDocUnknownType() { return getJSDocPrimaryTypeCreateFunction(305 /* JSDocUnknownType */); },
-            get createJSDocNonNullableType() { return getJSDocUnaryTypeCreateFunction(307 /* JSDocNonNullableType */); },
-            get updateJSDocNonNullableType() { return getJSDocUnaryTypeUpdateFunction(307 /* JSDocNonNullableType */); },
-            get createJSDocNullableType() { return getJSDocUnaryTypeCreateFunction(306 /* JSDocNullableType */); },
-            get updateJSDocNullableType() { return getJSDocUnaryTypeUpdateFunction(306 /* JSDocNullableType */); },
-            get createJSDocOptionalType() { return getJSDocUnaryTypeCreateFunction(308 /* JSDocOptionalType */); },
-            get updateJSDocOptionalType() { return getJSDocUnaryTypeUpdateFunction(308 /* JSDocOptionalType */); },
-            get createJSDocVariadicType() { return getJSDocUnaryTypeCreateFunction(310 /* JSDocVariadicType */); },
-            get updateJSDocVariadicType() { return getJSDocUnaryTypeUpdateFunction(310 /* JSDocVariadicType */); },
-            get createJSDocNamepathType() { return getJSDocUnaryTypeCreateFunction(311 /* JSDocNamepathType */); },
-            get updateJSDocNamepathType() { return getJSDocUnaryTypeUpdateFunction(311 /* JSDocNamepathType */); },
+            get createJSDocAllType() { return getJSDocPrimaryTypeCreateFunction(307 /* JSDocAllType */); },
+            get createJSDocUnknownType() { return getJSDocPrimaryTypeCreateFunction(308 /* JSDocUnknownType */); },
+            get createJSDocNonNullableType() { return getJSDocUnaryTypeCreateFunction(310 /* JSDocNonNullableType */); },
+            get updateJSDocNonNullableType() { return getJSDocUnaryTypeUpdateFunction(310 /* JSDocNonNullableType */); },
+            get createJSDocNullableType() { return getJSDocUnaryTypeCreateFunction(309 /* JSDocNullableType */); },
+            get updateJSDocNullableType() { return getJSDocUnaryTypeUpdateFunction(309 /* JSDocNullableType */); },
+            get createJSDocOptionalType() { return getJSDocUnaryTypeCreateFunction(311 /* JSDocOptionalType */); },
+            get updateJSDocOptionalType() { return getJSDocUnaryTypeUpdateFunction(311 /* JSDocOptionalType */); },
+            get createJSDocVariadicType() { return getJSDocUnaryTypeCreateFunction(313 /* JSDocVariadicType */); },
+            get updateJSDocVariadicType() { return getJSDocUnaryTypeUpdateFunction(313 /* JSDocVariadicType */); },
+            get createJSDocNamepathType() { return getJSDocUnaryTypeCreateFunction(314 /* JSDocNamepathType */); },
+            get updateJSDocNamepathType() { return getJSDocUnaryTypeUpdateFunction(314 /* JSDocNamepathType */); },
             createJSDocFunctionType: createJSDocFunctionType,
             updateJSDocFunctionType: updateJSDocFunctionType,
             createJSDocTypeLiteral: createJSDocTypeLiteral,
@@ -21096,33 +21552,39 @@
             updateJSDocSeeTag: updateJSDocSeeTag,
             createJSDocNameReference: createJSDocNameReference,
             updateJSDocNameReference: updateJSDocNameReference,
+            createJSDocMemberName: createJSDocMemberName,
+            updateJSDocMemberName: updateJSDocMemberName,
             createJSDocLink: createJSDocLink,
             updateJSDocLink: updateJSDocLink,
+            createJSDocLinkCode: createJSDocLinkCode,
+            updateJSDocLinkCode: updateJSDocLinkCode,
+            createJSDocLinkPlain: createJSDocLinkPlain,
+            updateJSDocLinkPlain: updateJSDocLinkPlain,
             // lazily load factory members for JSDoc tags with similar structure
-            get createJSDocTypeTag() { return getJSDocTypeLikeTagCreateFunction(333 /* JSDocTypeTag */); },
-            get updateJSDocTypeTag() { return getJSDocTypeLikeTagUpdateFunction(333 /* JSDocTypeTag */); },
-            get createJSDocReturnTag() { return getJSDocTypeLikeTagCreateFunction(331 /* JSDocReturnTag */); },
-            get updateJSDocReturnTag() { return getJSDocTypeLikeTagUpdateFunction(331 /* JSDocReturnTag */); },
-            get createJSDocThisTag() { return getJSDocTypeLikeTagCreateFunction(332 /* JSDocThisTag */); },
-            get updateJSDocThisTag() { return getJSDocTypeLikeTagUpdateFunction(332 /* JSDocThisTag */); },
-            get createJSDocEnumTag() { return getJSDocTypeLikeTagCreateFunction(329 /* JSDocEnumTag */); },
-            get updateJSDocEnumTag() { return getJSDocTypeLikeTagUpdateFunction(329 /* JSDocEnumTag */); },
-            get createJSDocAuthorTag() { return getJSDocSimpleTagCreateFunction(320 /* JSDocAuthorTag */); },
-            get updateJSDocAuthorTag() { return getJSDocSimpleTagUpdateFunction(320 /* JSDocAuthorTag */); },
-            get createJSDocClassTag() { return getJSDocSimpleTagCreateFunction(322 /* JSDocClassTag */); },
-            get updateJSDocClassTag() { return getJSDocSimpleTagUpdateFunction(322 /* JSDocClassTag */); },
-            get createJSDocPublicTag() { return getJSDocSimpleTagCreateFunction(323 /* JSDocPublicTag */); },
-            get updateJSDocPublicTag() { return getJSDocSimpleTagUpdateFunction(323 /* JSDocPublicTag */); },
-            get createJSDocPrivateTag() { return getJSDocSimpleTagCreateFunction(324 /* JSDocPrivateTag */); },
-            get updateJSDocPrivateTag() { return getJSDocSimpleTagUpdateFunction(324 /* JSDocPrivateTag */); },
-            get createJSDocProtectedTag() { return getJSDocSimpleTagCreateFunction(325 /* JSDocProtectedTag */); },
-            get updateJSDocProtectedTag() { return getJSDocSimpleTagUpdateFunction(325 /* JSDocProtectedTag */); },
-            get createJSDocReadonlyTag() { return getJSDocSimpleTagCreateFunction(326 /* JSDocReadonlyTag */); },
-            get updateJSDocReadonlyTag() { return getJSDocSimpleTagUpdateFunction(326 /* JSDocReadonlyTag */); },
-            get createJSDocOverrideTag() { return getJSDocSimpleTagCreateFunction(327 /* JSDocOverrideTag */); },
-            get updateJSDocOverrideTag() { return getJSDocSimpleTagUpdateFunction(327 /* JSDocOverrideTag */); },
-            get createJSDocDeprecatedTag() { return getJSDocSimpleTagCreateFunction(321 /* JSDocDeprecatedTag */); },
-            get updateJSDocDeprecatedTag() { return getJSDocSimpleTagUpdateFunction(321 /* JSDocDeprecatedTag */); },
+            get createJSDocTypeTag() { return getJSDocTypeLikeTagCreateFunction(338 /* JSDocTypeTag */); },
+            get updateJSDocTypeTag() { return getJSDocTypeLikeTagUpdateFunction(338 /* JSDocTypeTag */); },
+            get createJSDocReturnTag() { return getJSDocTypeLikeTagCreateFunction(336 /* JSDocReturnTag */); },
+            get updateJSDocReturnTag() { return getJSDocTypeLikeTagUpdateFunction(336 /* JSDocReturnTag */); },
+            get createJSDocThisTag() { return getJSDocTypeLikeTagCreateFunction(337 /* JSDocThisTag */); },
+            get updateJSDocThisTag() { return getJSDocTypeLikeTagUpdateFunction(337 /* JSDocThisTag */); },
+            get createJSDocEnumTag() { return getJSDocTypeLikeTagCreateFunction(334 /* JSDocEnumTag */); },
+            get updateJSDocEnumTag() { return getJSDocTypeLikeTagUpdateFunction(334 /* JSDocEnumTag */); },
+            get createJSDocAuthorTag() { return getJSDocSimpleTagCreateFunction(325 /* JSDocAuthorTag */); },
+            get updateJSDocAuthorTag() { return getJSDocSimpleTagUpdateFunction(325 /* JSDocAuthorTag */); },
+            get createJSDocClassTag() { return getJSDocSimpleTagCreateFunction(327 /* JSDocClassTag */); },
+            get updateJSDocClassTag() { return getJSDocSimpleTagUpdateFunction(327 /* JSDocClassTag */); },
+            get createJSDocPublicTag() { return getJSDocSimpleTagCreateFunction(328 /* JSDocPublicTag */); },
+            get updateJSDocPublicTag() { return getJSDocSimpleTagUpdateFunction(328 /* JSDocPublicTag */); },
+            get createJSDocPrivateTag() { return getJSDocSimpleTagCreateFunction(329 /* JSDocPrivateTag */); },
+            get updateJSDocPrivateTag() { return getJSDocSimpleTagUpdateFunction(329 /* JSDocPrivateTag */); },
+            get createJSDocProtectedTag() { return getJSDocSimpleTagCreateFunction(330 /* JSDocProtectedTag */); },
+            get updateJSDocProtectedTag() { return getJSDocSimpleTagUpdateFunction(330 /* JSDocProtectedTag */); },
+            get createJSDocReadonlyTag() { return getJSDocSimpleTagCreateFunction(331 /* JSDocReadonlyTag */); },
+            get updateJSDocReadonlyTag() { return getJSDocSimpleTagUpdateFunction(331 /* JSDocReadonlyTag */); },
+            get createJSDocOverrideTag() { return getJSDocSimpleTagCreateFunction(332 /* JSDocOverrideTag */); },
+            get updateJSDocOverrideTag() { return getJSDocSimpleTagUpdateFunction(332 /* JSDocOverrideTag */); },
+            get createJSDocDeprecatedTag() { return getJSDocSimpleTagCreateFunction(326 /* JSDocDeprecatedTag */); },
+            get updateJSDocDeprecatedTag() { return getJSDocSimpleTagUpdateFunction(326 /* JSDocDeprecatedTag */); },
             createJSDocUnknownTag: createJSDocUnknownTag,
             updateJSDocUnknownTag: updateJSDocUnknownTag,
             createJSDocText: createJSDocText,
@@ -21191,7 +21653,7 @@
             cloneNode: cloneNode,
             // Lazily load factory methods for common operator factories and utilities
             get createComma() { return getBinaryCreateFunction(27 /* CommaToken */); },
-            get createAssignment() { return getBinaryCreateFunction(62 /* EqualsToken */); },
+            get createAssignment() { return getBinaryCreateFunction(63 /* EqualsToken */); },
             get createLogicalOr() { return getBinaryCreateFunction(56 /* BarBarToken */); },
             get createLogicalAnd() { return getBinaryCreateFunction(55 /* AmpersandAmpersandToken */); },
             get createBitwiseOr() { return getBinaryCreateFunction(51 /* BarToken */); },
@@ -21237,8 +21699,11 @@
             createArraySliceCall: createArraySliceCall,
             createArrayConcatCall: createArrayConcatCall,
             createObjectDefinePropertyCall: createObjectDefinePropertyCall,
+            createReflectGetCall: createReflectGetCall,
+            createReflectSetCall: createReflectSetCall,
             createPropertyDescriptor: createPropertyDescriptor,
             createCallBinding: createCallBinding,
+            createAssignmentTargetWrapper: createAssignmentTargetWrapper,
             // Utilities
             inlineExpressions: inlineExpressions,
             getInternalName: getInternalName,
@@ -21265,12 +21730,24 @@
                 elements = [];
             }
             else if (ts.isNodeArray(elements)) {
-                // Ensure the transform flags have been aggregated for this NodeArray
-                if (elements.transformFlags === undefined) {
-                    aggregateChildrenFlags(elements);
+                if (hasTrailingComma === undefined || elements.hasTrailingComma === hasTrailingComma) {
+                    // Ensure the transform flags have been aggregated for this NodeArray
+                    if (elements.transformFlags === undefined) {
+                        aggregateChildrenFlags(elements);
+                    }
+                    ts.Debug.attachNodeArrayDebugInfo(elements);
+                    return elements;
                 }
-                ts.Debug.attachNodeArrayDebugInfo(elements);
-                return elements;
+                // This *was* a `NodeArray`, but the `hasTrailingComma` option differs. Recreate the
+                // array with the same elements, text range, and transform flags but with the updated
+                // value for `hasTrailingComma`
+                var array_8 = elements.slice();
+                array_8.pos = elements.pos;
+                array_8.end = elements.end;
+                array_8.hasTrailingComma = hasTrailingComma;
+                array_8.transformFlags = elements.transformFlags;
+                ts.Debug.attachNodeArrayDebugInfo(array_8);
+                return array_8;
             }
             // Since the element list of a node array is typically created by starting with an empty array and
             // repeatedly calling push(), the list may not have the optimal memory layout. We invoke slice() for
@@ -21310,11 +21787,11 @@
             // don't propagate child flags.
             if (name) {
                 switch (node.kind) {
-                    case 166 /* MethodDeclaration */:
-                    case 168 /* GetAccessor */:
-                    case 169 /* SetAccessor */:
-                    case 164 /* PropertyDeclaration */:
-                    case 289 /* PropertyAssignment */:
+                    case 167 /* MethodDeclaration */:
+                    case 170 /* GetAccessor */:
+                    case 171 /* SetAccessor */:
+                    case 165 /* PropertyDeclaration */:
+                    case 291 /* PropertyAssignment */:
                         if (ts.isIdentifier(name)) {
                             node.transformFlags |= propagateIdentifierNameFlags(name);
                             break;
@@ -21460,10 +21937,10 @@
             if (originalKeywordKind === undefined && text) {
                 originalKeywordKind = ts.stringToToken(text);
             }
-            if (originalKeywordKind === 78 /* Identifier */) {
+            if (originalKeywordKind === 79 /* Identifier */) {
                 originalKeywordKind = undefined;
             }
-            var node = baseFactory.createBaseIdentifierNode(78 /* Identifier */);
+            var node = baseFactory.createBaseIdentifierNode(79 /* Identifier */);
             node.originalKeywordKind = originalKeywordKind;
             node.escapedText = ts.escapeLeadingUnderscores(text);
             return node;
@@ -21482,7 +21959,7 @@
                 // NOTE: we do not use `setChildren` here because typeArguments in an identifier do not contribute to transformations
                 node.typeArguments = createNodeArray(typeArguments);
             }
-            if (node.originalKeywordKind === 130 /* AwaitKeyword */) {
+            if (node.originalKeywordKind === 131 /* AwaitKeyword */) {
                 node.transformFlags |= 16777216 /* ContainsPossibleTopLevelAwait */;
             }
             return node;
@@ -21533,7 +22010,7 @@
         function createPrivateIdentifier(text) {
             if (!ts.startsWith(text, "#"))
                 ts.Debug.fail("First character of private identifier must be #: " + text);
-            var node = baseFactory.createBasePrivateIdentifierNode(79 /* PrivateIdentifier */);
+            var node = baseFactory.createBasePrivateIdentifierNode(80 /* PrivateIdentifier */);
             node.escapedText = ts.escapeLeadingUnderscores(text);
             node.transformFlags |= 8388608 /* ContainsClassFields */;
             return node;
@@ -21545,45 +22022,47 @@
             return baseFactory.createBaseTokenNode(kind);
         }
         function createToken(token) {
-            ts.Debug.assert(token >= 0 /* FirstToken */ && token <= 157 /* LastToken */, "Invalid token");
+            ts.Debug.assert(token >= 0 /* FirstToken */ && token <= 158 /* LastToken */, "Invalid token");
             ts.Debug.assert(token <= 14 /* FirstTemplateToken */ || token >= 17 /* LastTemplateToken */, "Invalid token. Use 'createTemplateLiteralLikeNode' to create template literals.");
             ts.Debug.assert(token <= 8 /* FirstLiteralToken */ || token >= 14 /* LastLiteralToken */, "Invalid token. Use 'createLiteralLikeNode' to create literals.");
-            ts.Debug.assert(token !== 78 /* Identifier */, "Invalid token. Use 'createIdentifier' to create identifiers");
+            ts.Debug.assert(token !== 79 /* Identifier */, "Invalid token. Use 'createIdentifier' to create identifiers");
             var node = createBaseToken(token);
             var transformFlags = 0 /* None */;
             switch (token) {
-                case 129 /* AsyncKeyword */:
+                case 130 /* AsyncKeyword */:
                     // 'async' modifier is ES2017 (async functions) or ES2018 (async generators)
                     transformFlags =
                         128 /* ContainsES2017 */ |
                             64 /* ContainsES2018 */;
                     break;
-                case 122 /* PublicKeyword */:
-                case 120 /* PrivateKeyword */:
-                case 121 /* ProtectedKeyword */:
-                case 142 /* ReadonlyKeyword */:
-                case 125 /* AbstractKeyword */:
-                case 133 /* DeclareKeyword */:
-                case 84 /* ConstKeyword */:
-                case 128 /* AnyKeyword */:
-                case 144 /* NumberKeyword */:
-                case 155 /* BigIntKeyword */:
-                case 141 /* NeverKeyword */:
-                case 145 /* ObjectKeyword */:
-                case 156 /* OverrideKeyword */:
-                case 147 /* StringKeyword */:
-                case 131 /* BooleanKeyword */:
-                case 148 /* SymbolKeyword */:
-                case 113 /* VoidKeyword */:
-                case 152 /* UnknownKeyword */:
-                case 150 /* UndefinedKeyword */: // `undefined` is an Identifier in the expression case.
+                case 123 /* PublicKeyword */:
+                case 121 /* PrivateKeyword */:
+                case 122 /* ProtectedKeyword */:
+                case 143 /* ReadonlyKeyword */:
+                case 126 /* AbstractKeyword */:
+                case 134 /* DeclareKeyword */:
+                case 85 /* ConstKeyword */:
+                case 129 /* AnyKeyword */:
+                case 145 /* NumberKeyword */:
+                case 156 /* BigIntKeyword */:
+                case 142 /* NeverKeyword */:
+                case 146 /* ObjectKeyword */:
+                case 157 /* OverrideKeyword */:
+                case 148 /* StringKeyword */:
+                case 132 /* BooleanKeyword */:
+                case 149 /* SymbolKeyword */:
+                case 114 /* VoidKeyword */:
+                case 153 /* UnknownKeyword */:
+                case 151 /* UndefinedKeyword */: // `undefined` is an Identifier in the expression case.
                     transformFlags = 1 /* ContainsTypeScript */;
                     break;
-                case 123 /* StaticKeyword */:
-                case 105 /* SuperKeyword */:
+                case 106 /* SuperKeyword */:
+                    transformFlags = 512 /* ContainsES2015 */ | 33554432 /* ContainsLexicalSuper */;
+                    break;
+                case 124 /* StaticKeyword */:
                     transformFlags = 512 /* ContainsES2015 */;
                     break;
-                case 107 /* ThisKeyword */:
+                case 108 /* ThisKeyword */:
                     // 'this' indicates a lexical 'this'
                     transformFlags = 8192 /* ContainsLexicalThis */;
                     break;
@@ -21598,23 +22077,23 @@
         //
         // @api
         function createSuper() {
-            return createToken(105 /* SuperKeyword */);
+            return createToken(106 /* SuperKeyword */);
         }
         // @api
         function createThis() {
-            return createToken(107 /* ThisKeyword */);
+            return createToken(108 /* ThisKeyword */);
         }
         // @api
         function createNull() {
-            return createToken(103 /* NullKeyword */);
+            return createToken(104 /* NullKeyword */);
         }
         // @api
         function createTrue() {
-            return createToken(109 /* TrueKeyword */);
+            return createToken(110 /* TrueKeyword */);
         }
         // @api
         function createFalse() {
-            return createToken(94 /* FalseKeyword */);
+            return createToken(95 /* FalseKeyword */);
         }
         //
         // Modifiers
@@ -21627,40 +22106,40 @@
         function createModifiersFromModifierFlags(flags) {
             var result = [];
             if (flags & 1 /* Export */) {
-                result.push(createModifier(92 /* ExportKeyword */));
+                result.push(createModifier(93 /* ExportKeyword */));
             }
             if (flags & 2 /* Ambient */) {
-                result.push(createModifier(133 /* DeclareKeyword */));
+                result.push(createModifier(134 /* DeclareKeyword */));
             }
             if (flags & 512 /* Default */) {
-                result.push(createModifier(87 /* DefaultKeyword */));
+                result.push(createModifier(88 /* DefaultKeyword */));
             }
             if (flags & 2048 /* Const */) {
-                result.push(createModifier(84 /* ConstKeyword */));
+                result.push(createModifier(85 /* ConstKeyword */));
             }
             if (flags & 4 /* Public */) {
-                result.push(createModifier(122 /* PublicKeyword */));
+                result.push(createModifier(123 /* PublicKeyword */));
             }
             if (flags & 8 /* Private */) {
-                result.push(createModifier(120 /* PrivateKeyword */));
+                result.push(createModifier(121 /* PrivateKeyword */));
             }
             if (flags & 16 /* Protected */) {
-                result.push(createModifier(121 /* ProtectedKeyword */));
+                result.push(createModifier(122 /* ProtectedKeyword */));
             }
             if (flags & 128 /* Abstract */) {
-                result.push(createModifier(125 /* AbstractKeyword */));
+                result.push(createModifier(126 /* AbstractKeyword */));
             }
             if (flags & 32 /* Static */) {
-                result.push(createModifier(123 /* StaticKeyword */));
+                result.push(createModifier(124 /* StaticKeyword */));
             }
             if (flags & 16384 /* Override */) {
-                result.push(createModifier(156 /* OverrideKeyword */));
+                result.push(createModifier(157 /* OverrideKeyword */));
             }
             if (flags & 64 /* Readonly */) {
-                result.push(createModifier(142 /* ReadonlyKeyword */));
+                result.push(createModifier(143 /* ReadonlyKeyword */));
             }
             if (flags & 256 /* Async */) {
-                result.push(createModifier(129 /* AsyncKeyword */));
+                result.push(createModifier(130 /* AsyncKeyword */));
             }
             return result;
         }
@@ -21669,7 +22148,7 @@
         //
         // @api
         function createQualifiedName(left, right) {
-            var node = createBaseNode(158 /* QualifiedName */);
+            var node = createBaseNode(159 /* QualifiedName */);
             node.left = left;
             node.right = asName(right);
             node.transformFlags |=
@@ -21686,7 +22165,7 @@
         }
         // @api
         function createComputedPropertyName(expression) {
-            var node = createBaseNode(159 /* ComputedPropertyName */);
+            var node = createBaseNode(160 /* ComputedPropertyName */);
             node.expression = parenthesizerRules().parenthesizeExpressionOfComputedPropertyName(expression);
             node.transformFlags |=
                 propagateChildFlags(node.expression) |
@@ -21705,7 +22184,7 @@
         //
         // @api
         function createTypeParameterDeclaration(name, constraint, defaultType) {
-            var node = createBaseNamedDeclaration(160 /* TypeParameter */, 
+            var node = createBaseNamedDeclaration(161 /* TypeParameter */, 
             /*decorators*/ undefined, 
             /*modifiers*/ undefined, name);
             node.constraint = constraint;
@@ -21723,7 +22202,7 @@
         }
         // @api
         function createParameterDeclaration(decorators, modifiers, dotDotDotToken, name, questionToken, type, initializer) {
-            var node = createBaseVariableLikeDeclaration(161 /* Parameter */, decorators, modifiers, name, type, initializer && parenthesizerRules().parenthesizeExpressionForDisallowedComma(initializer));
+            var node = createBaseVariableLikeDeclaration(162 /* Parameter */, decorators, modifiers, name, type, initializer && parenthesizerRules().parenthesizeExpressionForDisallowedComma(initializer));
             node.dotDotDotToken = dotDotDotToken;
             node.questionToken = questionToken;
             if (ts.isThisIdentifier(node.name)) {
@@ -21756,7 +22235,7 @@
         }
         // @api
         function createDecorator(expression) {
-            var node = createBaseNode(162 /* Decorator */);
+            var node = createBaseNode(163 /* Decorator */);
             node.expression = parenthesizerRules().parenthesizeLeftSideOfAccess(expression);
             node.transformFlags |=
                 propagateChildFlags(node.expression) |
@@ -21775,7 +22254,7 @@
         //
         // @api
         function createPropertySignature(modifiers, name, questionToken, type) {
-            var node = createBaseNamedDeclaration(163 /* PropertySignature */, 
+            var node = createBaseNamedDeclaration(164 /* PropertySignature */, 
             /*decorators*/ undefined, modifiers, name);
             node.type = type;
             node.questionToken = questionToken;
@@ -21793,7 +22272,7 @@
         }
         // @api
         function createPropertyDeclaration(decorators, modifiers, name, questionOrExclamationToken, type, initializer) {
-            var node = createBaseVariableLikeDeclaration(164 /* PropertyDeclaration */, decorators, modifiers, name, type, initializer);
+            var node = createBaseVariableLikeDeclaration(165 /* PropertyDeclaration */, decorators, modifiers, name, type, initializer);
             node.questionToken = questionOrExclamationToken && ts.isQuestionToken(questionOrExclamationToken) ? questionOrExclamationToken : undefined;
             node.exclamationToken = questionOrExclamationToken && ts.isExclamationToken(questionOrExclamationToken) ? questionOrExclamationToken : undefined;
             node.transformFlags |=
@@ -21822,7 +22301,7 @@
         }
         // @api
         function createMethodSignature(modifiers, name, questionToken, typeParameters, parameters, type) {
-            var node = createBaseSignatureDeclaration(165 /* MethodSignature */, 
+            var node = createBaseSignatureDeclaration(166 /* MethodSignature */, 
             /*decorators*/ undefined, modifiers, name, typeParameters, parameters, type);
             node.questionToken = questionToken;
             node.transformFlags = 1 /* ContainsTypeScript */;
@@ -21841,7 +22320,7 @@
         }
         // @api
         function createMethodDeclaration(decorators, modifiers, asteriskToken, name, questionToken, typeParameters, parameters, type, body) {
-            var node = createBaseFunctionLikeDeclaration(166 /* MethodDeclaration */, decorators, modifiers, name, typeParameters, parameters, type, body);
+            var node = createBaseFunctionLikeDeclaration(167 /* MethodDeclaration */, decorators, modifiers, name, typeParameters, parameters, type, body);
             node.asteriskToken = asteriskToken;
             node.questionToken = questionToken;
             node.transformFlags |=
@@ -21879,8 +22358,25 @@
                 : node;
         }
         // @api
+        function createClassStaticBlockDeclaration(decorators, modifiers, body) {
+            var node = createBaseGenericNamedDeclaration(168 /* ClassStaticBlockDeclaration */, decorators, modifiers, 
+            /*name*/ undefined, 
+            /*typeParameters*/ undefined);
+            node.body = body;
+            node.transformFlags = propagateChildFlags(body) | 8388608 /* ContainsClassFields */;
+            return node;
+        }
+        // @api
+        function updateClassStaticBlockDeclaration(node, decorators, modifiers, body) {
+            return node.decorators !== decorators
+                || node.modifier !== modifiers
+                || node.body !== body
+                ? update(createClassStaticBlockDeclaration(decorators, modifiers, body), node)
+                : node;
+        }
+        // @api
         function createConstructorDeclaration(decorators, modifiers, parameters, body) {
-            var node = createBaseFunctionLikeDeclaration(167 /* Constructor */, decorators, modifiers, 
+            var node = createBaseFunctionLikeDeclaration(169 /* Constructor */, decorators, modifiers, 
             /*name*/ undefined, 
             /*typeParameters*/ undefined, parameters, 
             /*type*/ undefined, body);
@@ -21898,7 +22394,7 @@
         }
         // @api
         function createGetAccessorDeclaration(decorators, modifiers, name, parameters, type, body) {
-            return createBaseFunctionLikeDeclaration(168 /* GetAccessor */, decorators, modifiers, name, 
+            return createBaseFunctionLikeDeclaration(170 /* GetAccessor */, decorators, modifiers, name, 
             /*typeParameters*/ undefined, parameters, type, body);
         }
         // @api
@@ -21914,7 +22410,7 @@
         }
         // @api
         function createSetAccessorDeclaration(decorators, modifiers, name, parameters, body) {
-            return createBaseFunctionLikeDeclaration(169 /* SetAccessor */, decorators, modifiers, name, 
+            return createBaseFunctionLikeDeclaration(171 /* SetAccessor */, decorators, modifiers, name, 
             /*typeParameters*/ undefined, parameters, 
             /*type*/ undefined, body);
         }
@@ -21930,7 +22426,7 @@
         }
         // @api
         function createCallSignature(typeParameters, parameters, type) {
-            var node = createBaseSignatureDeclaration(170 /* CallSignature */, 
+            var node = createBaseSignatureDeclaration(172 /* CallSignature */, 
             /*decorators*/ undefined, 
             /*modifiers*/ undefined, 
             /*name*/ undefined, typeParameters, parameters, type);
@@ -21947,7 +22443,7 @@
         }
         // @api
         function createConstructSignature(typeParameters, parameters, type) {
-            var node = createBaseSignatureDeclaration(171 /* ConstructSignature */, 
+            var node = createBaseSignatureDeclaration(173 /* ConstructSignature */, 
             /*decorators*/ undefined, 
             /*modifiers*/ undefined, 
             /*name*/ undefined, typeParameters, parameters, type);
@@ -21964,7 +22460,7 @@
         }
         // @api
         function createIndexSignature(decorators, modifiers, parameters, type) {
-            var node = createBaseSignatureDeclaration(172 /* IndexSignature */, decorators, modifiers, 
+            var node = createBaseSignatureDeclaration(174 /* IndexSignature */, decorators, modifiers, 
             /*name*/ undefined, 
             /*typeParameters*/ undefined, parameters, type);
             node.transformFlags = 1 /* ContainsTypeScript */;
@@ -21981,7 +22477,7 @@
         }
         // @api
         function createTemplateLiteralTypeSpan(type, literal) {
-            var node = createBaseNode(195 /* TemplateLiteralTypeSpan */);
+            var node = createBaseNode(197 /* TemplateLiteralTypeSpan */);
             node.type = type;
             node.literal = literal;
             node.transformFlags = 1 /* ContainsTypeScript */;
@@ -22003,7 +22499,7 @@
         }
         // @api
         function createTypePredicateNode(assertsModifier, parameterName, type) {
-            var node = createBaseNode(173 /* TypePredicate */);
+            var node = createBaseNode(175 /* TypePredicate */);
             node.assertsModifier = assertsModifier;
             node.parameterName = asName(parameterName);
             node.type = type;
@@ -22020,7 +22516,7 @@
         }
         // @api
         function createTypeReferenceNode(typeName, typeArguments) {
-            var node = createBaseNode(174 /* TypeReference */);
+            var node = createBaseNode(176 /* TypeReference */);
             node.typeName = asName(typeName);
             node.typeArguments = typeArguments && parenthesizerRules().parenthesizeTypeArguments(createNodeArray(typeArguments));
             node.transformFlags = 1 /* ContainsTypeScript */;
@@ -22035,7 +22531,7 @@
         }
         // @api
         function createFunctionTypeNode(typeParameters, parameters, type) {
-            var node = createBaseSignatureDeclaration(175 /* FunctionType */, 
+            var node = createBaseSignatureDeclaration(177 /* FunctionType */, 
             /*decorators*/ undefined, 
             /*modifiers*/ undefined, 
             /*name*/ undefined, typeParameters, parameters, type);
@@ -22061,7 +22557,7 @@
                     ts.Debug.fail("Incorrect number of arguments specified.");
         }
         function createConstructorTypeNode1(modifiers, typeParameters, parameters, type) {
-            var node = createBaseSignatureDeclaration(176 /* ConstructorType */, 
+            var node = createBaseSignatureDeclaration(178 /* ConstructorType */, 
             /*decorators*/ undefined, modifiers, 
             /*name*/ undefined, typeParameters, parameters, type);
             node.transformFlags = 1 /* ContainsTypeScript */;
@@ -22095,7 +22591,7 @@
         }
         // @api
         function createTypeQueryNode(exprName) {
-            var node = createBaseNode(177 /* TypeQuery */);
+            var node = createBaseNode(179 /* TypeQuery */);
             node.exprName = exprName;
             node.transformFlags = 1 /* ContainsTypeScript */;
             return node;
@@ -22108,7 +22604,7 @@
         }
         // @api
         function createTypeLiteralNode(members) {
-            var node = createBaseNode(178 /* TypeLiteral */);
+            var node = createBaseNode(180 /* TypeLiteral */);
             node.members = createNodeArray(members);
             node.transformFlags = 1 /* ContainsTypeScript */;
             return node;
@@ -22121,7 +22617,7 @@
         }
         // @api
         function createArrayTypeNode(elementType) {
-            var node = createBaseNode(179 /* ArrayType */);
+            var node = createBaseNode(181 /* ArrayType */);
             node.elementType = parenthesizerRules().parenthesizeElementTypeOfArrayType(elementType);
             node.transformFlags = 1 /* ContainsTypeScript */;
             return node;
@@ -22134,7 +22630,7 @@
         }
         // @api
         function createTupleTypeNode(elements) {
-            var node = createBaseNode(180 /* TupleType */);
+            var node = createBaseNode(182 /* TupleType */);
             node.elements = createNodeArray(elements);
             node.transformFlags = 1 /* ContainsTypeScript */;
             return node;
@@ -22147,7 +22643,7 @@
         }
         // @api
         function createNamedTupleMember(dotDotDotToken, name, questionToken, type) {
-            var node = createBaseNode(193 /* NamedTupleMember */);
+            var node = createBaseNode(195 /* NamedTupleMember */);
             node.dotDotDotToken = dotDotDotToken;
             node.name = name;
             node.questionToken = questionToken;
@@ -22166,7 +22662,7 @@
         }
         // @api
         function createOptionalTypeNode(type) {
-            var node = createBaseNode(181 /* OptionalType */);
+            var node = createBaseNode(183 /* OptionalType */);
             node.type = parenthesizerRules().parenthesizeElementTypeOfArrayType(type);
             node.transformFlags = 1 /* ContainsTypeScript */;
             return node;
@@ -22179,7 +22675,7 @@
         }
         // @api
         function createRestTypeNode(type) {
-            var node = createBaseNode(182 /* RestType */);
+            var node = createBaseNode(184 /* RestType */);
             node.type = type;
             node.transformFlags = 1 /* ContainsTypeScript */;
             return node;
@@ -22203,7 +22699,7 @@
         }
         // @api
         function createUnionTypeNode(types) {
-            return createUnionOrIntersectionTypeNode(183 /* UnionType */, types);
+            return createUnionOrIntersectionTypeNode(185 /* UnionType */, types);
         }
         // @api
         function updateUnionTypeNode(node, types) {
@@ -22211,7 +22707,7 @@
         }
         // @api
         function createIntersectionTypeNode(types) {
-            return createUnionOrIntersectionTypeNode(184 /* IntersectionType */, types);
+            return createUnionOrIntersectionTypeNode(186 /* IntersectionType */, types);
         }
         // @api
         function updateIntersectionTypeNode(node, types) {
@@ -22219,7 +22715,7 @@
         }
         // @api
         function createConditionalTypeNode(checkType, extendsType, trueType, falseType) {
-            var node = createBaseNode(185 /* ConditionalType */);
+            var node = createBaseNode(187 /* ConditionalType */);
             node.checkType = parenthesizerRules().parenthesizeMemberOfConditionalType(checkType);
             node.extendsType = parenthesizerRules().parenthesizeMemberOfConditionalType(extendsType);
             node.trueType = trueType;
@@ -22238,7 +22734,7 @@
         }
         // @api
         function createInferTypeNode(typeParameter) {
-            var node = createBaseNode(186 /* InferType */);
+            var node = createBaseNode(188 /* InferType */);
             node.typeParameter = typeParameter;
             node.transformFlags = 1 /* ContainsTypeScript */;
             return node;
@@ -22251,7 +22747,7 @@
         }
         // @api
         function createTemplateLiteralType(head, templateSpans) {
-            var node = createBaseNode(194 /* TemplateLiteralType */);
+            var node = createBaseNode(196 /* TemplateLiteralType */);
             node.head = head;
             node.templateSpans = createNodeArray(templateSpans);
             node.transformFlags = 1 /* ContainsTypeScript */;
@@ -22267,7 +22763,7 @@
         // @api
         function createImportTypeNode(argument, qualifier, typeArguments, isTypeOf) {
             if (isTypeOf === void 0) { isTypeOf = false; }
-            var node = createBaseNode(196 /* ImportType */);
+            var node = createBaseNode(198 /* ImportType */);
             node.argument = argument;
             node.qualifier = qualifier;
             node.typeArguments = typeArguments && parenthesizerRules().parenthesizeTypeArguments(typeArguments);
@@ -22287,7 +22783,7 @@
         }
         // @api
         function createParenthesizedType(type) {
-            var node = createBaseNode(187 /* ParenthesizedType */);
+            var node = createBaseNode(189 /* ParenthesizedType */);
             node.type = type;
             node.transformFlags = 1 /* ContainsTypeScript */;
             return node;
@@ -22300,13 +22796,13 @@
         }
         // @api
         function createThisTypeNode() {
-            var node = createBaseNode(188 /* ThisType */);
+            var node = createBaseNode(190 /* ThisType */);
             node.transformFlags = 1 /* ContainsTypeScript */;
             return node;
         }
         // @api
         function createTypeOperatorNode(operator, type) {
-            var node = createBaseNode(189 /* TypeOperator */);
+            var node = createBaseNode(191 /* TypeOperator */);
             node.operator = operator;
             node.type = parenthesizerRules().parenthesizeMemberOfElementType(type);
             node.transformFlags = 1 /* ContainsTypeScript */;
@@ -22320,7 +22816,7 @@
         }
         // @api
         function createIndexedAccessTypeNode(objectType, indexType) {
-            var node = createBaseNode(190 /* IndexedAccessType */);
+            var node = createBaseNode(192 /* IndexedAccessType */);
             node.objectType = parenthesizerRules().parenthesizeMemberOfElementType(objectType);
             node.indexType = indexType;
             node.transformFlags = 1 /* ContainsTypeScript */;
@@ -22335,7 +22831,7 @@
         }
         // @api
         function createMappedTypeNode(readonlyToken, typeParameter, nameType, questionToken, type) {
-            var node = createBaseNode(191 /* MappedType */);
+            var node = createBaseNode(193 /* MappedType */);
             node.readonlyToken = readonlyToken;
             node.typeParameter = typeParameter;
             node.nameType = nameType;
@@ -22356,7 +22852,7 @@
         }
         // @api
         function createLiteralTypeNode(literal) {
-            var node = createBaseNode(192 /* LiteralType */);
+            var node = createBaseNode(194 /* LiteralType */);
             node.literal = literal;
             node.transformFlags = 1 /* ContainsTypeScript */;
             return node;
@@ -22372,7 +22868,7 @@
         //
         // @api
         function createObjectBindingPattern(elements) {
-            var node = createBaseNode(197 /* ObjectBindingPattern */);
+            var node = createBaseNode(199 /* ObjectBindingPattern */);
             node.elements = createNodeArray(elements);
             node.transformFlags |=
                 propagateChildrenFlags(node.elements) |
@@ -22393,7 +22889,7 @@
         }
         // @api
         function createArrayBindingPattern(elements) {
-            var node = createBaseNode(198 /* ArrayBindingPattern */);
+            var node = createBaseNode(200 /* ArrayBindingPattern */);
             node.elements = createNodeArray(elements);
             node.transformFlags |=
                 propagateChildrenFlags(node.elements) |
@@ -22409,7 +22905,7 @@
         }
         // @api
         function createBindingElement(dotDotDotToken, propertyName, name, initializer) {
-            var node = createBaseBindingLikeDeclaration(199 /* BindingElement */, 
+            var node = createBaseBindingLikeDeclaration(201 /* BindingElement */, 
             /*decorators*/ undefined, 
             /*modifiers*/ undefined, name, initializer && parenthesizerRules().parenthesizeExpressionForDisallowedComma(initializer));
             node.propertyName = asName(propertyName);
@@ -22445,8 +22941,13 @@
         }
         // @api
         function createArrayLiteralExpression(elements, multiLine) {
-            var node = createBaseExpression(200 /* ArrayLiteralExpression */);
-            node.elements = parenthesizerRules().parenthesizeExpressionsOfCommaDelimitedList(createNodeArray(elements));
+            var node = createBaseExpression(202 /* ArrayLiteralExpression */);
+            // Ensure we add a trailing comma for something like `[NumericLiteral(1), NumericLiteral(2), OmittedExpresion]` so that
+            // we end up with `[1, 2, ,]` instead of `[1, 2, ]` otherwise the `OmittedExpression` will just end up being treated like
+            // a trailing comma.
+            var lastElement = elements && ts.lastOrUndefined(elements);
+            var elementsArray = createNodeArray(elements, lastElement && ts.isOmittedExpression(lastElement) ? true : undefined);
+            node.elements = parenthesizerRules().parenthesizeExpressionsOfCommaDelimitedList(elementsArray);
             node.multiLine = multiLine;
             node.transformFlags |= propagateChildrenFlags(node.elements);
             return node;
@@ -22459,7 +22960,7 @@
         }
         // @api
         function createObjectLiteralExpression(properties, multiLine) {
-            var node = createBaseExpression(201 /* ObjectLiteralExpression */);
+            var node = createBaseExpression(203 /* ObjectLiteralExpression */);
             node.properties = createNodeArray(properties);
             node.multiLine = multiLine;
             node.transformFlags |= propagateChildrenFlags(node.properties);
@@ -22473,7 +22974,7 @@
         }
         // @api
         function createPropertyAccessExpression(expression, name) {
-            var node = createBaseExpression(202 /* PropertyAccessExpression */);
+            var node = createBaseExpression(204 /* PropertyAccessExpression */);
             node.expression = parenthesizerRules().parenthesizeLeftSideOfAccess(expression);
             node.name = asName(name);
             node.transformFlags =
@@ -22502,7 +23003,7 @@
         }
         // @api
         function createPropertyAccessChain(expression, questionDotToken, name) {
-            var node = createBaseExpression(202 /* PropertyAccessExpression */);
+            var node = createBaseExpression(204 /* PropertyAccessExpression */);
             node.flags |= 32 /* OptionalChain */;
             node.expression = parenthesizerRules().parenthesizeLeftSideOfAccess(expression);
             node.questionDotToken = questionDotToken;
@@ -22529,7 +23030,7 @@
         }
         // @api
         function createElementAccessExpression(expression, index) {
-            var node = createBaseExpression(203 /* ElementAccessExpression */);
+            var node = createBaseExpression(205 /* ElementAccessExpression */);
             node.expression = parenthesizerRules().parenthesizeLeftSideOfAccess(expression);
             node.argumentExpression = asExpression(index);
             node.transformFlags |=
@@ -22556,7 +23057,7 @@
         }
         // @api
         function createElementAccessChain(expression, questionDotToken, index) {
-            var node = createBaseExpression(203 /* ElementAccessExpression */);
+            var node = createBaseExpression(205 /* ElementAccessExpression */);
             node.flags |= 32 /* OptionalChain */;
             node.expression = parenthesizerRules().parenthesizeLeftSideOfAccess(expression);
             node.questionDotToken = questionDotToken;
@@ -22581,7 +23082,7 @@
         }
         // @api
         function createCallExpression(expression, typeArguments, argumentsArray) {
-            var node = createBaseExpression(204 /* CallExpression */);
+            var node = createBaseExpression(206 /* CallExpression */);
             node.expression = parenthesizerRules().parenthesizeLeftSideOfAccess(expression);
             node.typeArguments = asNodeArray(typeArguments);
             node.arguments = parenthesizerRules().parenthesizeExpressionsOfCommaDelimitedList(createNodeArray(argumentsArray));
@@ -22613,7 +23114,7 @@
         }
         // @api
         function createCallChain(expression, questionDotToken, typeArguments, argumentsArray) {
-            var node = createBaseExpression(204 /* CallExpression */);
+            var node = createBaseExpression(206 /* CallExpression */);
             node.flags |= 32 /* OptionalChain */;
             node.expression = parenthesizerRules().parenthesizeLeftSideOfAccess(expression);
             node.questionDotToken = questionDotToken;
@@ -22645,7 +23146,7 @@
         }
         // @api
         function createNewExpression(expression, typeArguments, argumentsArray) {
-            var node = createBaseExpression(205 /* NewExpression */);
+            var node = createBaseExpression(207 /* NewExpression */);
             node.expression = parenthesizerRules().parenthesizeExpressionOfNew(expression);
             node.typeArguments = asNodeArray(typeArguments);
             node.arguments = argumentsArray ? parenthesizerRules().parenthesizeExpressionsOfCommaDelimitedList(argumentsArray) : undefined;
@@ -22669,7 +23170,7 @@
         }
         // @api
         function createTaggedTemplateExpression(tag, typeArguments, template) {
-            var node = createBaseExpression(206 /* TaggedTemplateExpression */);
+            var node = createBaseExpression(208 /* TaggedTemplateExpression */);
             node.tag = parenthesizerRules().parenthesizeLeftSideOfAccess(tag);
             node.typeArguments = asNodeArray(typeArguments);
             node.template = template;
@@ -22696,7 +23197,7 @@
         }
         // @api
         function createTypeAssertion(type, expression) {
-            var node = createBaseExpression(207 /* TypeAssertionExpression */);
+            var node = createBaseExpression(209 /* TypeAssertionExpression */);
             node.expression = parenthesizerRules().parenthesizeOperandOfPrefixUnary(expression);
             node.type = type;
             node.transformFlags |=
@@ -22714,7 +23215,7 @@
         }
         // @api
         function createParenthesizedExpression(expression) {
-            var node = createBaseExpression(208 /* ParenthesizedExpression */);
+            var node = createBaseExpression(210 /* ParenthesizedExpression */);
             node.expression = expression;
             node.transformFlags = propagateChildFlags(node.expression);
             return node;
@@ -22727,7 +23228,7 @@
         }
         // @api
         function createFunctionExpression(modifiers, asteriskToken, name, typeParameters, parameters, type, body) {
-            var node = createBaseFunctionLikeDeclaration(209 /* FunctionExpression */, 
+            var node = createBaseFunctionLikeDeclaration(211 /* FunctionExpression */, 
             /*decorators*/ undefined, modifiers, name, typeParameters, parameters, type, body);
             node.asteriskToken = asteriskToken;
             node.transformFlags |= propagateChildFlags(node.asteriskToken);
@@ -22761,7 +23262,7 @@
         }
         // @api
         function createArrowFunction(modifiers, typeParameters, parameters, type, equalsGreaterThanToken, body) {
-            var node = createBaseFunctionLikeDeclaration(210 /* ArrowFunction */, 
+            var node = createBaseFunctionLikeDeclaration(212 /* ArrowFunction */, 
             /*decorators*/ undefined, modifiers, 
             /*name*/ undefined, typeParameters, parameters, type, parenthesizerRules().parenthesizeConciseBodyOfArrowFunction(body));
             node.equalsGreaterThanToken = equalsGreaterThanToken !== null && equalsGreaterThanToken !== void 0 ? equalsGreaterThanToken : createToken(38 /* EqualsGreaterThanToken */);
@@ -22769,7 +23270,7 @@
                 propagateChildFlags(node.equalsGreaterThanToken) |
                     512 /* ContainsES2015 */;
             if (ts.modifiersToFlags(node.modifiers) & 256 /* Async */) {
-                node.transformFlags |= 128 /* ContainsES2017 */;
+                node.transformFlags |= 128 /* ContainsES2017 */ | 8192 /* ContainsLexicalThis */;
             }
             return node;
         }
@@ -22786,7 +23287,7 @@
         }
         // @api
         function createDeleteExpression(expression) {
-            var node = createBaseExpression(211 /* DeleteExpression */);
+            var node = createBaseExpression(213 /* DeleteExpression */);
             node.expression = parenthesizerRules().parenthesizeOperandOfPrefixUnary(expression);
             node.transformFlags |= propagateChildFlags(node.expression);
             return node;
@@ -22799,7 +23300,7 @@
         }
         // @api
         function createTypeOfExpression(expression) {
-            var node = createBaseExpression(212 /* TypeOfExpression */);
+            var node = createBaseExpression(214 /* TypeOfExpression */);
             node.expression = parenthesizerRules().parenthesizeOperandOfPrefixUnary(expression);
             node.transformFlags |= propagateChildFlags(node.expression);
             return node;
@@ -22812,7 +23313,7 @@
         }
         // @api
         function createVoidExpression(expression) {
-            var node = createBaseExpression(213 /* VoidExpression */);
+            var node = createBaseExpression(215 /* VoidExpression */);
             node.expression = parenthesizerRules().parenthesizeOperandOfPrefixUnary(expression);
             node.transformFlags |= propagateChildFlags(node.expression);
             return node;
@@ -22825,7 +23326,7 @@
         }
         // @api
         function createAwaitExpression(expression) {
-            var node = createBaseExpression(214 /* AwaitExpression */);
+            var node = createBaseExpression(216 /* AwaitExpression */);
             node.expression = parenthesizerRules().parenthesizeOperandOfPrefixUnary(expression);
             node.transformFlags |=
                 propagateChildFlags(node.expression) |
@@ -22842,10 +23343,18 @@
         }
         // @api
         function createPrefixUnaryExpression(operator, operand) {
-            var node = createBaseExpression(215 /* PrefixUnaryExpression */);
+            var node = createBaseExpression(217 /* PrefixUnaryExpression */);
             node.operator = operator;
             node.operand = parenthesizerRules().parenthesizeOperandOfPrefixUnary(operand);
             node.transformFlags |= propagateChildFlags(node.operand);
+            // Only set this flag for non-generated identifiers and non-"local" names. See the
+            // comment in `visitPreOrPostfixUnaryExpression` in module.ts
+            if ((operator === 45 /* PlusPlusToken */ || operator === 46 /* MinusMinusToken */) &&
+                ts.isIdentifier(node.operand) &&
+                !ts.isGeneratedIdentifier(node.operand) &&
+                !ts.isLocalName(node.operand)) {
+                node.transformFlags |= 67108864 /* ContainsUpdateExpressionForIdentifier */;
+            }
             return node;
         }
         // @api
@@ -22856,10 +23365,17 @@
         }
         // @api
         function createPostfixUnaryExpression(operand, operator) {
-            var node = createBaseExpression(216 /* PostfixUnaryExpression */);
+            var node = createBaseExpression(218 /* PostfixUnaryExpression */);
             node.operator = operator;
             node.operand = parenthesizerRules().parenthesizeOperandOfPostfixUnary(operand);
-            node.transformFlags = propagateChildFlags(node.operand);
+            node.transformFlags |= propagateChildFlags(node.operand);
+            // Only set this flag for non-generated identifiers and non-"local" names. See the
+            // comment in `visitPreOrPostfixUnaryExpression` in module.ts
+            if (ts.isIdentifier(node.operand) &&
+                !ts.isGeneratedIdentifier(node.operand) &&
+                !ts.isLocalName(node.operand)) {
+                node.transformFlags |= 67108864 /* ContainsUpdateExpressionForIdentifier */;
+            }
             return node;
         }
         // @api
@@ -22870,7 +23386,7 @@
         }
         // @api
         function createBinaryExpression(left, operator, right) {
-            var node = createBaseExpression(217 /* BinaryExpression */);
+            var node = createBaseExpression(219 /* BinaryExpression */);
             var operatorToken = asToken(operator);
             var operatorKind = operatorToken.kind;
             node.left = parenthesizerRules().parenthesizeLeftSideOfBinary(operatorKind, left);
@@ -22883,7 +23399,7 @@
             if (operatorKind === 60 /* QuestionQuestionToken */) {
                 node.transformFlags |= 16 /* ContainsES2020 */;
             }
-            else if (operatorKind === 62 /* EqualsToken */) {
+            else if (operatorKind === 63 /* EqualsToken */) {
                 if (ts.isObjectLiteralExpression(node.left)) {
                     node.transformFlags |=
                         512 /* ContainsES2015 */ |
@@ -22898,7 +23414,7 @@
                             propagateAssignmentPatternFlags(node.left);
                 }
             }
-            else if (operatorKind === 42 /* AsteriskAsteriskToken */ || operatorKind === 66 /* AsteriskAsteriskEqualsToken */) {
+            else if (operatorKind === 42 /* AsteriskAsteriskToken */ || operatorKind === 67 /* AsteriskAsteriskEqualsToken */) {
                 node.transformFlags |= 256 /* ContainsES2016 */;
             }
             else if (ts.isLogicalOrCoalescingAssignmentOperator(operatorKind)) {
@@ -22939,7 +23455,7 @@
         }
         // @api
         function createConditionalExpression(condition, questionToken, whenTrue, colonToken, whenFalse) {
-            var node = createBaseExpression(218 /* ConditionalExpression */);
+            var node = createBaseExpression(220 /* ConditionalExpression */);
             node.condition = parenthesizerRules().parenthesizeConditionOfConditionalExpression(condition);
             node.questionToken = questionToken !== null && questionToken !== void 0 ? questionToken : createToken(57 /* QuestionToken */);
             node.whenTrue = parenthesizerRules().parenthesizeBranchOfConditionalExpression(whenTrue);
@@ -22965,7 +23481,7 @@
         }
         // @api
         function createTemplateExpression(head, templateSpans) {
-            var node = createBaseExpression(219 /* TemplateExpression */);
+            var node = createBaseExpression(221 /* TemplateExpression */);
             node.head = head;
             node.templateSpans = createNodeArray(templateSpans);
             node.transformFlags |=
@@ -23035,7 +23551,7 @@
         // @api
         function createYieldExpression(asteriskToken, expression) {
             ts.Debug.assert(!asteriskToken || !!expression, "A `YieldExpression` with an asteriskToken must have an expression.");
-            var node = createBaseExpression(220 /* YieldExpression */);
+            var node = createBaseExpression(222 /* YieldExpression */);
             node.expression = expression && parenthesizerRules().parenthesizeExpressionForDisallowedComma(expression);
             node.asteriskToken = asteriskToken;
             node.transformFlags |=
@@ -23055,7 +23571,7 @@
         }
         // @api
         function createSpreadElement(expression) {
-            var node = createBaseExpression(221 /* SpreadElement */);
+            var node = createBaseExpression(223 /* SpreadElement */);
             node.expression = parenthesizerRules().parenthesizeExpressionForDisallowedComma(expression);
             node.transformFlags |=
                 propagateChildFlags(node.expression) |
@@ -23071,7 +23587,7 @@
         }
         // @api
         function createClassExpression(decorators, modifiers, name, typeParameters, heritageClauses, members) {
-            var node = createBaseClassLikeDeclaration(222 /* ClassExpression */, decorators, modifiers, name, typeParameters, heritageClauses, members);
+            var node = createBaseClassLikeDeclaration(224 /* ClassExpression */, decorators, modifiers, name, typeParameters, heritageClauses, members);
             node.transformFlags |= 512 /* ContainsES2015 */;
             return node;
         }
@@ -23088,11 +23604,11 @@
         }
         // @api
         function createOmittedExpression() {
-            return createBaseExpression(223 /* OmittedExpression */);
+            return createBaseExpression(225 /* OmittedExpression */);
         }
         // @api
         function createExpressionWithTypeArguments(expression, typeArguments) {
-            var node = createBaseNode(224 /* ExpressionWithTypeArguments */);
+            var node = createBaseNode(226 /* ExpressionWithTypeArguments */);
             node.expression = parenthesizerRules().parenthesizeLeftSideOfAccess(expression);
             node.typeArguments = typeArguments && parenthesizerRules().parenthesizeTypeArguments(typeArguments);
             node.transformFlags |=
@@ -23110,7 +23626,7 @@
         }
         // @api
         function createAsExpression(expression, type) {
-            var node = createBaseExpression(225 /* AsExpression */);
+            var node = createBaseExpression(227 /* AsExpression */);
             node.expression = expression;
             node.type = type;
             node.transformFlags |=
@@ -23128,7 +23644,7 @@
         }
         // @api
         function createNonNullExpression(expression) {
-            var node = createBaseExpression(226 /* NonNullExpression */);
+            var node = createBaseExpression(228 /* NonNullExpression */);
             node.expression = parenthesizerRules().parenthesizeLeftSideOfAccess(expression);
             node.transformFlags |=
                 propagateChildFlags(node.expression) |
@@ -23146,7 +23662,7 @@
         }
         // @api
         function createNonNullChain(expression) {
-            var node = createBaseExpression(226 /* NonNullExpression */);
+            var node = createBaseExpression(228 /* NonNullExpression */);
             node.flags |= 32 /* OptionalChain */;
             node.expression = parenthesizerRules().parenthesizeLeftSideOfAccess(expression);
             node.transformFlags |=
@@ -23163,15 +23679,15 @@
         }
         // @api
         function createMetaProperty(keywordToken, name) {
-            var node = createBaseExpression(227 /* MetaProperty */);
+            var node = createBaseExpression(229 /* MetaProperty */);
             node.keywordToken = keywordToken;
             node.name = name;
             node.transformFlags |= propagateChildFlags(node.name);
             switch (keywordToken) {
-                case 102 /* NewKeyword */:
+                case 103 /* NewKeyword */:
                     node.transformFlags |= 512 /* ContainsES2015 */;
                     break;
-                case 99 /* ImportKeyword */:
+                case 100 /* ImportKeyword */:
                     node.transformFlags |= 4 /* ContainsESNext */;
                     break;
                 default:
@@ -23190,7 +23706,7 @@
         //
         // @api
         function createTemplateSpan(expression, literal) {
-            var node = createBaseNode(229 /* TemplateSpan */);
+            var node = createBaseNode(231 /* TemplateSpan */);
             node.expression = expression;
             node.literal = literal;
             node.transformFlags |=
@@ -23208,7 +23724,7 @@
         }
         // @api
         function createSemicolonClassElement() {
-            var node = createBaseNode(230 /* SemicolonClassElement */);
+            var node = createBaseNode(232 /* SemicolonClassElement */);
             node.transformFlags |= 512 /* ContainsES2015 */;
             return node;
         }
@@ -23217,7 +23733,7 @@
         //
         // @api
         function createBlock(statements, multiLine) {
-            var node = createBaseNode(231 /* Block */);
+            var node = createBaseNode(233 /* Block */);
             node.statements = createNodeArray(statements);
             node.multiLine = multiLine;
             node.transformFlags |= propagateChildrenFlags(node.statements);
@@ -23231,7 +23747,7 @@
         }
         // @api
         function createVariableStatement(modifiers, declarationList) {
-            var node = createBaseDeclaration(233 /* VariableStatement */, /*decorators*/ undefined, modifiers);
+            var node = createBaseDeclaration(235 /* VariableStatement */, /*decorators*/ undefined, modifiers);
             node.declarationList = ts.isArray(declarationList) ? createVariableDeclarationList(declarationList) : declarationList;
             node.transformFlags |=
                 propagateChildFlags(node.declarationList);
@@ -23249,11 +23765,11 @@
         }
         // @api
         function createEmptyStatement() {
-            return createBaseNode(232 /* EmptyStatement */);
+            return createBaseNode(234 /* EmptyStatement */);
         }
         // @api
         function createExpressionStatement(expression) {
-            var node = createBaseNode(234 /* ExpressionStatement */);
+            var node = createBaseNode(236 /* ExpressionStatement */);
             node.expression = parenthesizerRules().parenthesizeExpressionOfExpressionStatement(expression);
             node.transformFlags |= propagateChildFlags(node.expression);
             return node;
@@ -23266,7 +23782,7 @@
         }
         // @api
         function createIfStatement(expression, thenStatement, elseStatement) {
-            var node = createBaseNode(235 /* IfStatement */);
+            var node = createBaseNode(237 /* IfStatement */);
             node.expression = expression;
             node.thenStatement = asEmbeddedStatement(thenStatement);
             node.elseStatement = asEmbeddedStatement(elseStatement);
@@ -23286,7 +23802,7 @@
         }
         // @api
         function createDoStatement(statement, expression) {
-            var node = createBaseNode(236 /* DoStatement */);
+            var node = createBaseNode(238 /* DoStatement */);
             node.statement = asEmbeddedStatement(statement);
             node.expression = expression;
             node.transformFlags |=
@@ -23303,7 +23819,7 @@
         }
         // @api
         function createWhileStatement(expression, statement) {
-            var node = createBaseNode(237 /* WhileStatement */);
+            var node = createBaseNode(239 /* WhileStatement */);
             node.expression = expression;
             node.statement = asEmbeddedStatement(statement);
             node.transformFlags |=
@@ -23320,7 +23836,7 @@
         }
         // @api
         function createForStatement(initializer, condition, incrementor, statement) {
-            var node = createBaseNode(238 /* ForStatement */);
+            var node = createBaseNode(240 /* ForStatement */);
             node.initializer = initializer;
             node.condition = condition;
             node.incrementor = incrementor;
@@ -23343,7 +23859,7 @@
         }
         // @api
         function createForInStatement(initializer, expression, statement) {
-            var node = createBaseNode(239 /* ForInStatement */);
+            var node = createBaseNode(241 /* ForInStatement */);
             node.initializer = initializer;
             node.expression = expression;
             node.statement = asEmbeddedStatement(statement);
@@ -23363,7 +23879,7 @@
         }
         // @api
         function createForOfStatement(awaitModifier, initializer, expression, statement) {
-            var node = createBaseNode(240 /* ForOfStatement */);
+            var node = createBaseNode(242 /* ForOfStatement */);
             node.awaitModifier = awaitModifier;
             node.initializer = initializer;
             node.expression = parenthesizerRules().parenthesizeExpressionForDisallowedComma(expression);
@@ -23389,7 +23905,7 @@
         }
         // @api
         function createContinueStatement(label) {
-            var node = createBaseNode(241 /* ContinueStatement */);
+            var node = createBaseNode(243 /* ContinueStatement */);
             node.label = asName(label);
             node.transformFlags |=
                 propagateChildFlags(node.label) |
@@ -23404,7 +23920,7 @@
         }
         // @api
         function createBreakStatement(label) {
-            var node = createBaseNode(242 /* BreakStatement */);
+            var node = createBaseNode(244 /* BreakStatement */);
             node.label = asName(label);
             node.transformFlags |=
                 propagateChildFlags(node.label) |
@@ -23419,7 +23935,7 @@
         }
         // @api
         function createReturnStatement(expression) {
-            var node = createBaseNode(243 /* ReturnStatement */);
+            var node = createBaseNode(245 /* ReturnStatement */);
             node.expression = expression;
             // return in an ES2018 async generator must be awaited
             node.transformFlags |=
@@ -23436,7 +23952,7 @@
         }
         // @api
         function createWithStatement(expression, statement) {
-            var node = createBaseNode(244 /* WithStatement */);
+            var node = createBaseNode(246 /* WithStatement */);
             node.expression = expression;
             node.statement = asEmbeddedStatement(statement);
             node.transformFlags |=
@@ -23453,7 +23969,7 @@
         }
         // @api
         function createSwitchStatement(expression, caseBlock) {
-            var node = createBaseNode(245 /* SwitchStatement */);
+            var node = createBaseNode(247 /* SwitchStatement */);
             node.expression = parenthesizerRules().parenthesizeExpressionForDisallowedComma(expression);
             node.caseBlock = caseBlock;
             node.transformFlags |=
@@ -23470,7 +23986,7 @@
         }
         // @api
         function createLabeledStatement(label, statement) {
-            var node = createBaseNode(246 /* LabeledStatement */);
+            var node = createBaseNode(248 /* LabeledStatement */);
             node.label = asName(label);
             node.statement = asEmbeddedStatement(statement);
             node.transformFlags |=
@@ -23487,7 +24003,7 @@
         }
         // @api
         function createThrowStatement(expression) {
-            var node = createBaseNode(247 /* ThrowStatement */);
+            var node = createBaseNode(249 /* ThrowStatement */);
             node.expression = expression;
             node.transformFlags |= propagateChildFlags(node.expression);
             return node;
@@ -23500,7 +24016,7 @@
         }
         // @api
         function createTryStatement(tryBlock, catchClause, finallyBlock) {
-            var node = createBaseNode(248 /* TryStatement */);
+            var node = createBaseNode(250 /* TryStatement */);
             node.tryBlock = tryBlock;
             node.catchClause = catchClause;
             node.finallyBlock = finallyBlock;
@@ -23520,11 +24036,11 @@
         }
         // @api
         function createDebuggerStatement() {
-            return createBaseNode(249 /* DebuggerStatement */);
+            return createBaseNode(251 /* DebuggerStatement */);
         }
         // @api
         function createVariableDeclaration(name, exclamationToken, type, initializer) {
-            var node = createBaseVariableLikeDeclaration(250 /* VariableDeclaration */, 
+            var node = createBaseVariableLikeDeclaration(252 /* VariableDeclaration */, 
             /*decorators*/ undefined, 
             /*modifiers*/ undefined, name, type, initializer && parenthesizerRules().parenthesizeExpressionForDisallowedComma(initializer));
             node.exclamationToken = exclamationToken;
@@ -23546,7 +24062,7 @@
         // @api
         function createVariableDeclarationList(declarations, flags) {
             if (flags === void 0) { flags = 0 /* None */; }
-            var node = createBaseNode(251 /* VariableDeclarationList */);
+            var node = createBaseNode(253 /* VariableDeclarationList */);
             node.flags |= flags & 3 /* BlockScoped */;
             node.declarations = createNodeArray(declarations);
             node.transformFlags |=
@@ -23567,7 +24083,7 @@
         }
         // @api
         function createFunctionDeclaration(decorators, modifiers, asteriskToken, name, typeParameters, parameters, type, body) {
-            var node = createBaseFunctionLikeDeclaration(252 /* FunctionDeclaration */, decorators, modifiers, name, typeParameters, parameters, type, body);
+            var node = createBaseFunctionLikeDeclaration(254 /* FunctionDeclaration */, decorators, modifiers, name, typeParameters, parameters, type, body);
             node.asteriskToken = asteriskToken;
             if (!node.body || ts.modifiersToFlags(node.modifiers) & 2 /* Ambient */) {
                 node.transformFlags = 1 /* ContainsTypeScript */;
@@ -23605,7 +24121,7 @@
         }
         // @api
         function createClassDeclaration(decorators, modifiers, name, typeParameters, heritageClauses, members) {
-            var node = createBaseClassLikeDeclaration(253 /* ClassDeclaration */, decorators, modifiers, name, typeParameters, heritageClauses, members);
+            var node = createBaseClassLikeDeclaration(255 /* ClassDeclaration */, decorators, modifiers, name, typeParameters, heritageClauses, members);
             if (ts.modifiersToFlags(node.modifiers) & 2 /* Ambient */) {
                 node.transformFlags = 1 /* ContainsTypeScript */;
             }
@@ -23630,7 +24146,7 @@
         }
         // @api
         function createInterfaceDeclaration(decorators, modifiers, name, typeParameters, heritageClauses, members) {
-            var node = createBaseInterfaceOrClassLikeDeclaration(254 /* InterfaceDeclaration */, decorators, modifiers, name, typeParameters, heritageClauses);
+            var node = createBaseInterfaceOrClassLikeDeclaration(256 /* InterfaceDeclaration */, decorators, modifiers, name, typeParameters, heritageClauses);
             node.members = createNodeArray(members);
             node.transformFlags = 1 /* ContainsTypeScript */;
             return node;
@@ -23648,7 +24164,7 @@
         }
         // @api
         function createTypeAliasDeclaration(decorators, modifiers, name, typeParameters, type) {
-            var node = createBaseGenericNamedDeclaration(255 /* TypeAliasDeclaration */, decorators, modifiers, name, typeParameters);
+            var node = createBaseGenericNamedDeclaration(257 /* TypeAliasDeclaration */, decorators, modifiers, name, typeParameters);
             node.type = type;
             node.transformFlags = 1 /* ContainsTypeScript */;
             return node;
@@ -23665,7 +24181,7 @@
         }
         // @api
         function createEnumDeclaration(decorators, modifiers, name, members) {
-            var node = createBaseNamedDeclaration(256 /* EnumDeclaration */, decorators, modifiers, name);
+            var node = createBaseNamedDeclaration(258 /* EnumDeclaration */, decorators, modifiers, name);
             node.members = createNodeArray(members);
             node.transformFlags |=
                 propagateChildrenFlags(node.members) |
@@ -23685,7 +24201,7 @@
         // @api
         function createModuleDeclaration(decorators, modifiers, name, body, flags) {
             if (flags === void 0) { flags = 0 /* None */; }
-            var node = createBaseDeclaration(257 /* ModuleDeclaration */, decorators, modifiers);
+            var node = createBaseDeclaration(259 /* ModuleDeclaration */, decorators, modifiers);
             node.flags |= flags & (16 /* Namespace */ | 4 /* NestedNamespace */ | 1024 /* GlobalAugmentation */);
             node.name = name;
             node.body = body;
@@ -23712,7 +24228,7 @@
         }
         // @api
         function createModuleBlock(statements) {
-            var node = createBaseNode(258 /* ModuleBlock */);
+            var node = createBaseNode(260 /* ModuleBlock */);
             node.statements = createNodeArray(statements);
             node.transformFlags |= propagateChildrenFlags(node.statements);
             return node;
@@ -23725,7 +24241,7 @@
         }
         // @api
         function createCaseBlock(clauses) {
-            var node = createBaseNode(259 /* CaseBlock */);
+            var node = createBaseNode(261 /* CaseBlock */);
             node.clauses = createNodeArray(clauses);
             node.transformFlags |= propagateChildrenFlags(node.clauses);
             return node;
@@ -23738,7 +24254,7 @@
         }
         // @api
         function createNamespaceExportDeclaration(name) {
-            var node = createBaseNamedDeclaration(260 /* NamespaceExportDeclaration */, 
+            var node = createBaseNamedDeclaration(262 /* NamespaceExportDeclaration */, 
             /*decorators*/ undefined, 
             /*modifiers*/ undefined, name);
             node.transformFlags = 1 /* ContainsTypeScript */;
@@ -23752,7 +24268,7 @@
         }
         // @api
         function createImportEqualsDeclaration(decorators, modifiers, isTypeOnly, name, moduleReference) {
-            var node = createBaseNamedDeclaration(261 /* ImportEqualsDeclaration */, decorators, modifiers, name);
+            var node = createBaseNamedDeclaration(263 /* ImportEqualsDeclaration */, decorators, modifiers, name);
             node.isTypeOnly = isTypeOnly;
             node.moduleReference = moduleReference;
             node.transformFlags |= propagateChildFlags(node.moduleReference);
@@ -23773,7 +24289,7 @@
         }
         // @api
         function createImportDeclaration(decorators, modifiers, importClause, moduleSpecifier) {
-            var node = createBaseDeclaration(262 /* ImportDeclaration */, decorators, modifiers);
+            var node = createBaseDeclaration(264 /* ImportDeclaration */, decorators, modifiers);
             node.importClause = importClause;
             node.moduleSpecifier = moduleSpecifier;
             node.transformFlags |=
@@ -23793,7 +24309,7 @@
         }
         // @api
         function createImportClause(isTypeOnly, name, namedBindings) {
-            var node = createBaseNode(263 /* ImportClause */);
+            var node = createBaseNode(265 /* ImportClause */);
             node.isTypeOnly = isTypeOnly;
             node.name = name;
             node.namedBindings = namedBindings;
@@ -23816,7 +24332,7 @@
         }
         // @api
         function createNamespaceImport(name) {
-            var node = createBaseNode(264 /* NamespaceImport */);
+            var node = createBaseNode(266 /* NamespaceImport */);
             node.name = name;
             node.transformFlags |= propagateChildFlags(node.name);
             node.transformFlags &= ~16777216 /* ContainsPossibleTopLevelAwait */; // always parsed in an Await context
@@ -23830,7 +24346,7 @@
         }
         // @api
         function createNamespaceExport(name) {
-            var node = createBaseNode(270 /* NamespaceExport */);
+            var node = createBaseNode(272 /* NamespaceExport */);
             node.name = name;
             node.transformFlags |=
                 propagateChildFlags(node.name) |
@@ -23846,7 +24362,7 @@
         }
         // @api
         function createNamedImports(elements) {
-            var node = createBaseNode(265 /* NamedImports */);
+            var node = createBaseNode(267 /* NamedImports */);
             node.elements = createNodeArray(elements);
             node.transformFlags |= propagateChildrenFlags(node.elements);
             node.transformFlags &= ~16777216 /* ContainsPossibleTopLevelAwait */; // always parsed in an Await context
@@ -23860,7 +24376,7 @@
         }
         // @api
         function createImportSpecifier(propertyName, name) {
-            var node = createBaseNode(266 /* ImportSpecifier */);
+            var node = createBaseNode(268 /* ImportSpecifier */);
             node.propertyName = propertyName;
             node.name = name;
             node.transformFlags |=
@@ -23878,10 +24394,10 @@
         }
         // @api
         function createExportAssignment(decorators, modifiers, isExportEquals, expression) {
-            var node = createBaseDeclaration(267 /* ExportAssignment */, decorators, modifiers);
+            var node = createBaseDeclaration(269 /* ExportAssignment */, decorators, modifiers);
             node.isExportEquals = isExportEquals;
             node.expression = isExportEquals
-                ? parenthesizerRules().parenthesizeRightSideOfBinary(62 /* EqualsToken */, /*leftSide*/ undefined, expression)
+                ? parenthesizerRules().parenthesizeRightSideOfBinary(63 /* EqualsToken */, /*leftSide*/ undefined, expression)
                 : parenthesizerRules().parenthesizeExpressionOfExportDefault(expression);
             node.transformFlags |= propagateChildFlags(node.expression);
             node.transformFlags &= ~16777216 /* ContainsPossibleTopLevelAwait */; // always parsed in an Await context
@@ -23897,7 +24413,7 @@
         }
         // @api
         function createExportDeclaration(decorators, modifiers, isTypeOnly, exportClause, moduleSpecifier) {
-            var node = createBaseDeclaration(268 /* ExportDeclaration */, decorators, modifiers);
+            var node = createBaseDeclaration(270 /* ExportDeclaration */, decorators, modifiers);
             node.isTypeOnly = isTypeOnly;
             node.exportClause = exportClause;
             node.moduleSpecifier = moduleSpecifier;
@@ -23919,7 +24435,7 @@
         }
         // @api
         function createNamedExports(elements) {
-            var node = createBaseNode(269 /* NamedExports */);
+            var node = createBaseNode(271 /* NamedExports */);
             node.elements = createNodeArray(elements);
             node.transformFlags |= propagateChildrenFlags(node.elements);
             node.transformFlags &= ~16777216 /* ContainsPossibleTopLevelAwait */; // always parsed in an Await context
@@ -23933,7 +24449,7 @@
         }
         // @api
         function createExportSpecifier(propertyName, name) {
-            var node = createBaseNode(271 /* ExportSpecifier */);
+            var node = createBaseNode(273 /* ExportSpecifier */);
             node.propertyName = asName(propertyName);
             node.name = asName(name);
             node.transformFlags |=
@@ -23951,7 +24467,7 @@
         }
         // @api
         function createMissingDeclaration() {
-            var node = createBaseDeclaration(272 /* MissingDeclaration */, 
+            var node = createBaseDeclaration(274 /* MissingDeclaration */, 
             /*decorators*/ undefined, 
             /*modifiers*/ undefined);
             return node;
@@ -23961,7 +24477,7 @@
         //
         // @api
         function createExternalModuleReference(expression) {
-            var node = createBaseNode(273 /* ExternalModuleReference */);
+            var node = createBaseNode(275 /* ExternalModuleReference */);
             node.expression = expression;
             node.transformFlags |= propagateChildFlags(node.expression);
             node.transformFlags &= ~16777216 /* ContainsPossibleTopLevelAwait */; // always parsed in an Await context
@@ -24006,7 +24522,7 @@
         }
         // @api
         function createJSDocFunctionType(parameters, type) {
-            var node = createBaseSignatureDeclaration(309 /* JSDocFunctionType */, 
+            var node = createBaseSignatureDeclaration(312 /* JSDocFunctionType */, 
             /*decorators*/ undefined, 
             /*modifiers*/ undefined, 
             /*name*/ undefined, 
@@ -24023,7 +24539,7 @@
         // @api
         function createJSDocTypeLiteral(propertyTags, isArrayType) {
             if (isArrayType === void 0) { isArrayType = false; }
-            var node = createBaseNode(314 /* JSDocTypeLiteral */);
+            var node = createBaseNode(317 /* JSDocTypeLiteral */);
             node.jsDocPropertyTags = asNodeArray(propertyTags);
             node.isArrayType = isArrayType;
             return node;
@@ -24037,7 +24553,7 @@
         }
         // @api
         function createJSDocTypeExpression(type) {
-            var node = createBaseNode(302 /* JSDocTypeExpression */);
+            var node = createBaseNode(304 /* JSDocTypeExpression */);
             node.type = type;
             return node;
         }
@@ -24049,7 +24565,7 @@
         }
         // @api
         function createJSDocSignature(typeParameters, parameters, type) {
-            var node = createBaseNode(315 /* JSDocSignature */);
+            var node = createBaseNode(318 /* JSDocSignature */);
             node.typeParameters = asNodeArray(typeParameters);
             node.parameters = createNodeArray(parameters);
             node.type = type;
@@ -24078,7 +24594,7 @@
         }
         // @api
         function createJSDocTemplateTag(tagName, constraint, typeParameters, comment) {
-            var node = createBaseJSDocTag(334 /* JSDocTemplateTag */, tagName !== null && tagName !== void 0 ? tagName : createIdentifier("template"), comment);
+            var node = createBaseJSDocTag(339 /* JSDocTemplateTag */, tagName !== null && tagName !== void 0 ? tagName : createIdentifier("template"), comment);
             node.constraint = constraint;
             node.typeParameters = createNodeArray(typeParameters);
             return node;
@@ -24095,7 +24611,7 @@
         }
         // @api
         function createJSDocTypedefTag(tagName, typeExpression, fullName, comment) {
-            var node = createBaseJSDocTag(335 /* JSDocTypedefTag */, tagName !== null && tagName !== void 0 ? tagName : createIdentifier("typedef"), comment);
+            var node = createBaseJSDocTag(340 /* JSDocTypedefTag */, tagName !== null && tagName !== void 0 ? tagName : createIdentifier("typedef"), comment);
             node.typeExpression = typeExpression;
             node.fullName = fullName;
             node.name = ts.getJSDocTypeAliasName(fullName);
@@ -24113,7 +24629,7 @@
         }
         // @api
         function createJSDocParameterTag(tagName, name, isBracketed, typeExpression, isNameFirst, comment) {
-            var node = createBaseJSDocTag(330 /* JSDocParameterTag */, tagName !== null && tagName !== void 0 ? tagName : createIdentifier("param"), comment);
+            var node = createBaseJSDocTag(335 /* JSDocParameterTag */, tagName !== null && tagName !== void 0 ? tagName : createIdentifier("param"), comment);
             node.typeExpression = typeExpression;
             node.name = name;
             node.isNameFirst = !!isNameFirst;
@@ -24134,7 +24650,7 @@
         }
         // @api
         function createJSDocPropertyTag(tagName, name, isBracketed, typeExpression, isNameFirst, comment) {
-            var node = createBaseJSDocTag(337 /* JSDocPropertyTag */, tagName !== null && tagName !== void 0 ? tagName : createIdentifier("prop"), comment);
+            var node = createBaseJSDocTag(342 /* JSDocPropertyTag */, tagName !== null && tagName !== void 0 ? tagName : createIdentifier("prop"), comment);
             node.typeExpression = typeExpression;
             node.name = name;
             node.isNameFirst = !!isNameFirst;
@@ -24155,7 +24671,7 @@
         }
         // @api
         function createJSDocCallbackTag(tagName, typeExpression, fullName, comment) {
-            var node = createBaseJSDocTag(328 /* JSDocCallbackTag */, tagName !== null && tagName !== void 0 ? tagName : createIdentifier("callback"), comment);
+            var node = createBaseJSDocTag(333 /* JSDocCallbackTag */, tagName !== null && tagName !== void 0 ? tagName : createIdentifier("callback"), comment);
             node.typeExpression = typeExpression;
             node.fullName = fullName;
             node.name = ts.getJSDocTypeAliasName(fullName);
@@ -24173,7 +24689,7 @@
         }
         // @api
         function createJSDocAugmentsTag(tagName, className, comment) {
-            var node = createBaseJSDocTag(318 /* JSDocAugmentsTag */, tagName !== null && tagName !== void 0 ? tagName : createIdentifier("augments"), comment);
+            var node = createBaseJSDocTag(323 /* JSDocAugmentsTag */, tagName !== null && tagName !== void 0 ? tagName : createIdentifier("augments"), comment);
             node.class = className;
             return node;
         }
@@ -24188,13 +24704,13 @@
         }
         // @api
         function createJSDocImplementsTag(tagName, className, comment) {
-            var node = createBaseJSDocTag(319 /* JSDocImplementsTag */, tagName !== null && tagName !== void 0 ? tagName : createIdentifier("implements"), comment);
+            var node = createBaseJSDocTag(324 /* JSDocImplementsTag */, tagName !== null && tagName !== void 0 ? tagName : createIdentifier("implements"), comment);
             node.class = className;
             return node;
         }
         // @api
         function createJSDocSeeTag(tagName, name, comment) {
-            var node = createBaseJSDocTag(336 /* JSDocSeeTag */, tagName !== null && tagName !== void 0 ? tagName : createIdentifier("see"), comment);
+            var node = createBaseJSDocTag(341 /* JSDocSeeTag */, tagName !== null && tagName !== void 0 ? tagName : createIdentifier("see"), comment);
             node.name = name;
             return node;
         }
@@ -24208,7 +24724,7 @@
         }
         // @api
         function createJSDocNameReference(name) {
-            var node = createBaseNode(303 /* JSDocNameReference */);
+            var node = createBaseNode(305 /* JSDocNameReference */);
             node.name = name;
             return node;
         }
@@ -24219,8 +24735,25 @@
                 : node;
         }
         // @api
+        function createJSDocMemberName(left, right) {
+            var node = createBaseNode(306 /* JSDocMemberName */);
+            node.left = left;
+            node.right = right;
+            node.transformFlags |=
+                propagateChildFlags(node.left) |
+                    propagateChildFlags(node.right);
+            return node;
+        }
+        // @api
+        function updateJSDocMemberName(node, left, right) {
+            return node.left !== left
+                || node.right !== right
+                ? update(createJSDocMemberName(left, right), node)
+                : node;
+        }
+        // @api
         function createJSDocLink(name, text) {
-            var node = createBaseNode(316 /* JSDocLink */);
+            var node = createBaseNode(319 /* JSDocLink */);
             node.name = name;
             node.text = text;
             return node;
@@ -24232,6 +24765,32 @@
                 : node;
         }
         // @api
+        function createJSDocLinkCode(name, text) {
+            var node = createBaseNode(320 /* JSDocLinkCode */);
+            node.name = name;
+            node.text = text;
+            return node;
+        }
+        // @api
+        function updateJSDocLinkCode(node, name, text) {
+            return node.name !== name
+                ? update(createJSDocLinkCode(name, text), node)
+                : node;
+        }
+        // @api
+        function createJSDocLinkPlain(name, text) {
+            var node = createBaseNode(321 /* JSDocLinkPlain */);
+            node.name = name;
+            node.text = text;
+            return node;
+        }
+        // @api
+        function updateJSDocLinkPlain(node, name, text) {
+            return node.name !== name
+                ? update(createJSDocLinkPlain(name, text), node)
+                : node;
+        }
+        // @api
         function updateJSDocImplementsTag(node, tagName, className, comment) {
             if (tagName === void 0) { tagName = getDefaultTagName(node); }
             return node.tagName !== tagName
@@ -24292,7 +24851,7 @@
         }
         // @api
         function createJSDocUnknownTag(tagName, comment) {
-            var node = createBaseJSDocTag(317 /* JSDocTag */, tagName, comment);
+            var node = createBaseJSDocTag(322 /* JSDocTag */, tagName, comment);
             return node;
         }
         // @api
@@ -24304,7 +24863,7 @@
         }
         // @api
         function createJSDocText(text) {
-            var node = createBaseNode(313 /* JSDocText */);
+            var node = createBaseNode(316 /* JSDocText */);
             node.text = text;
             return node;
         }
@@ -24316,7 +24875,7 @@
         }
         // @api
         function createJSDocComment(comment, tags) {
-            var node = createBaseNode(312 /* JSDocComment */);
+            var node = createBaseNode(315 /* JSDocComment */);
             node.comment = comment;
             node.tags = asNodeArray(tags);
             return node;
@@ -24333,7 +24892,7 @@
         //
         // @api
         function createJsxElement(openingElement, children, closingElement) {
-            var node = createBaseNode(274 /* JsxElement */);
+            var node = createBaseNode(276 /* JsxElement */);
             node.openingElement = openingElement;
             node.children = createNodeArray(children);
             node.closingElement = closingElement;
@@ -24354,7 +24913,7 @@
         }
         // @api
         function createJsxSelfClosingElement(tagName, typeArguments, attributes) {
-            var node = createBaseNode(275 /* JsxSelfClosingElement */);
+            var node = createBaseNode(277 /* JsxSelfClosingElement */);
             node.tagName = tagName;
             node.typeArguments = asNodeArray(typeArguments);
             node.attributes = attributes;
@@ -24378,7 +24937,7 @@
         }
         // @api
         function createJsxOpeningElement(tagName, typeArguments, attributes) {
-            var node = createBaseNode(276 /* JsxOpeningElement */);
+            var node = createBaseNode(278 /* JsxOpeningElement */);
             node.tagName = tagName;
             node.typeArguments = asNodeArray(typeArguments);
             node.attributes = attributes;
@@ -24402,7 +24961,7 @@
         }
         // @api
         function createJsxClosingElement(tagName) {
-            var node = createBaseNode(277 /* JsxClosingElement */);
+            var node = createBaseNode(279 /* JsxClosingElement */);
             node.tagName = tagName;
             node.transformFlags |=
                 propagateChildFlags(node.tagName) |
@@ -24417,7 +24976,7 @@
         }
         // @api
         function createJsxFragment(openingFragment, children, closingFragment) {
-            var node = createBaseNode(278 /* JsxFragment */);
+            var node = createBaseNode(280 /* JsxFragment */);
             node.openingFragment = openingFragment;
             node.children = createNodeArray(children);
             node.closingFragment = closingFragment;
@@ -24453,19 +25012,19 @@
         }
         // @api
         function createJsxOpeningFragment() {
-            var node = createBaseNode(279 /* JsxOpeningFragment */);
+            var node = createBaseNode(281 /* JsxOpeningFragment */);
             node.transformFlags |= 2 /* ContainsJsx */;
             return node;
         }
         // @api
         function createJsxJsxClosingFragment() {
-            var node = createBaseNode(280 /* JsxClosingFragment */);
+            var node = createBaseNode(282 /* JsxClosingFragment */);
             node.transformFlags |= 2 /* ContainsJsx */;
             return node;
         }
         // @api
         function createJsxAttribute(name, initializer) {
-            var node = createBaseNode(281 /* JsxAttribute */);
+            var node = createBaseNode(283 /* JsxAttribute */);
             node.name = name;
             node.initializer = initializer;
             node.transformFlags |=
@@ -24483,7 +25042,7 @@
         }
         // @api
         function createJsxAttributes(properties) {
-            var node = createBaseNode(282 /* JsxAttributes */);
+            var node = createBaseNode(284 /* JsxAttributes */);
             node.properties = createNodeArray(properties);
             node.transformFlags |=
                 propagateChildrenFlags(node.properties) |
@@ -24498,7 +25057,7 @@
         }
         // @api
         function createJsxSpreadAttribute(expression) {
-            var node = createBaseNode(283 /* JsxSpreadAttribute */);
+            var node = createBaseNode(285 /* JsxSpreadAttribute */);
             node.expression = expression;
             node.transformFlags |=
                 propagateChildFlags(node.expression) |
@@ -24513,7 +25072,7 @@
         }
         // @api
         function createJsxExpression(dotDotDotToken, expression) {
-            var node = createBaseNode(284 /* JsxExpression */);
+            var node = createBaseNode(286 /* JsxExpression */);
             node.dotDotDotToken = dotDotDotToken;
             node.expression = expression;
             node.transformFlags |=
@@ -24533,7 +25092,7 @@
         //
         // @api
         function createCaseClause(expression, statements) {
-            var node = createBaseNode(285 /* CaseClause */);
+            var node = createBaseNode(287 /* CaseClause */);
             node.expression = parenthesizerRules().parenthesizeExpressionForDisallowedComma(expression);
             node.statements = createNodeArray(statements);
             node.transformFlags |=
@@ -24550,7 +25109,7 @@
         }
         // @api
         function createDefaultClause(statements) {
-            var node = createBaseNode(286 /* DefaultClause */);
+            var node = createBaseNode(288 /* DefaultClause */);
             node.statements = createNodeArray(statements);
             node.transformFlags = propagateChildrenFlags(node.statements);
             return node;
@@ -24563,15 +25122,15 @@
         }
         // @api
         function createHeritageClause(token, types) {
-            var node = createBaseNode(287 /* HeritageClause */);
+            var node = createBaseNode(289 /* HeritageClause */);
             node.token = token;
             node.types = createNodeArray(types);
             node.transformFlags |= propagateChildrenFlags(node.types);
             switch (token) {
-                case 93 /* ExtendsKeyword */:
+                case 94 /* ExtendsKeyword */:
                     node.transformFlags |= 512 /* ContainsES2015 */;
                     break;
-                case 116 /* ImplementsKeyword */:
+                case 117 /* ImplementsKeyword */:
                     node.transformFlags |= 1 /* ContainsTypeScript */;
                     break;
                 default:
@@ -24587,7 +25146,7 @@
         }
         // @api
         function createCatchClause(variableDeclaration, block) {
-            var node = createBaseNode(288 /* CatchClause */);
+            var node = createBaseNode(290 /* CatchClause */);
             variableDeclaration = !ts.isString(variableDeclaration) ? variableDeclaration : createVariableDeclaration(variableDeclaration, 
             /*exclamationToken*/ undefined, 
             /*type*/ undefined, 
@@ -24613,7 +25172,7 @@
         //
         // @api
         function createPropertyAssignment(name, initializer) {
-            var node = createBaseNamedDeclaration(289 /* PropertyAssignment */, 
+            var node = createBaseNamedDeclaration(291 /* PropertyAssignment */, 
             /*decorators*/ undefined, 
             /*modifiers*/ undefined, name);
             node.initializer = parenthesizerRules().parenthesizeExpressionForDisallowedComma(initializer);
@@ -24643,7 +25202,7 @@
         }
         // @api
         function createShorthandPropertyAssignment(name, objectAssignmentInitializer) {
-            var node = createBaseNamedDeclaration(290 /* ShorthandPropertyAssignment */, 
+            var node = createBaseNamedDeclaration(292 /* ShorthandPropertyAssignment */, 
             /*decorators*/ undefined, 
             /*modifiers*/ undefined, name);
             node.objectAssignmentInitializer = objectAssignmentInitializer && parenthesizerRules().parenthesizeExpressionForDisallowedComma(objectAssignmentInitializer);
@@ -24675,7 +25234,7 @@
         }
         // @api
         function createSpreadAssignment(expression) {
-            var node = createBaseNode(291 /* SpreadAssignment */);
+            var node = createBaseNode(293 /* SpreadAssignment */);
             node.expression = parenthesizerRules().parenthesizeExpressionForDisallowedComma(expression);
             node.transformFlags |=
                 propagateChildFlags(node.expression) |
@@ -24694,7 +25253,7 @@
         //
         // @api
         function createEnumMember(name, initializer) {
-            var node = createBaseNode(292 /* EnumMember */);
+            var node = createBaseNode(294 /* EnumMember */);
             node.name = asName(name);
             node.initializer = initializer && parenthesizerRules().parenthesizeExpressionForDisallowedComma(initializer);
             node.transformFlags |=
@@ -24715,7 +25274,7 @@
         //
         // @api
         function createSourceFile(statements, endOfFileToken, flags) {
-            var node = baseFactory.createBaseSourceFileNode(298 /* SourceFile */);
+            var node = baseFactory.createBaseSourceFileNode(300 /* SourceFile */);
             node.statements = createNodeArray(statements);
             node.endOfFileToken = endOfFileToken;
             node.flags |= flags;
@@ -24732,7 +25291,7 @@
             return node;
         }
         function cloneSourceFileWithChanges(source, statements, isDeclarationFile, referencedFiles, typeReferences, hasNoDefaultLib, libReferences) {
-            var node = baseFactory.createBaseSourceFileNode(298 /* SourceFile */);
+            var node = baseFactory.createBaseSourceFileNode(300 /* SourceFile */);
             for (var p in source) {
                 if (p === "emitNode" || ts.hasProperty(node, p) || !ts.hasProperty(source, p))
                     continue;
@@ -24770,7 +25329,7 @@
         // @api
         function createBundle(sourceFiles, prepends) {
             if (prepends === void 0) { prepends = ts.emptyArray; }
-            var node = createBaseNode(299 /* Bundle */);
+            var node = createBaseNode(301 /* Bundle */);
             node.prepends = prepends;
             node.sourceFiles = sourceFiles;
             return node;
@@ -24785,7 +25344,7 @@
         }
         // @api
         function createUnparsedSource(prologues, syntheticReferences, texts) {
-            var node = createBaseNode(300 /* UnparsedSource */);
+            var node = createBaseNode(302 /* UnparsedSource */);
             node.prologues = prologues;
             node.syntheticReferences = syntheticReferences;
             node.texts = texts;
@@ -24803,28 +25362,28 @@
         }
         // @api
         function createUnparsedPrologue(data) {
-            return createBaseUnparsedNode(293 /* UnparsedPrologue */, data);
+            return createBaseUnparsedNode(295 /* UnparsedPrologue */, data);
         }
         // @api
         function createUnparsedPrepend(data, texts) {
-            var node = createBaseUnparsedNode(294 /* UnparsedPrepend */, data);
+            var node = createBaseUnparsedNode(296 /* UnparsedPrepend */, data);
             node.texts = texts;
             return node;
         }
         // @api
         function createUnparsedTextLike(data, internal) {
-            return createBaseUnparsedNode(internal ? 296 /* UnparsedInternalText */ : 295 /* UnparsedText */, data);
+            return createBaseUnparsedNode(internal ? 298 /* UnparsedInternalText */ : 297 /* UnparsedText */, data);
         }
         // @api
         function createUnparsedSyntheticReference(section) {
-            var node = createBaseNode(297 /* UnparsedSyntheticReference */);
+            var node = createBaseNode(299 /* UnparsedSyntheticReference */);
             node.data = section.data;
             node.section = section;
             return node;
         }
         // @api
         function createInputFiles() {
-            var node = createBaseNode(301 /* InputFiles */);
+            var node = createBaseNode(303 /* InputFiles */);
             node.javascriptText = "";
             node.declarationText = "";
             return node;
@@ -24835,7 +25394,7 @@
         // @api
         function createSyntheticExpression(type, isSpread, tupleNameSource) {
             if (isSpread === void 0) { isSpread = false; }
-            var node = createBaseNode(228 /* SyntheticExpression */);
+            var node = createBaseNode(230 /* SyntheticExpression */);
             node.type = type;
             node.isSpread = isSpread;
             node.tupleNameSource = tupleNameSource;
@@ -24843,7 +25402,7 @@
         }
         // @api
         function createSyntaxList(children) {
-            var node = createBaseNode(338 /* SyntaxList */);
+            var node = createBaseNode(343 /* SyntaxList */);
             node._children = children;
             return node;
         }
@@ -24858,7 +25417,7 @@
          */
         // @api
         function createNotEmittedStatement(original) {
-            var node = createBaseNode(339 /* NotEmittedStatement */);
+            var node = createBaseNode(344 /* NotEmittedStatement */);
             node.original = original;
             ts.setTextRange(node, original);
             return node;
@@ -24872,7 +25431,7 @@
          */
         // @api
         function createPartiallyEmittedExpression(expression, original) {
-            var node = createBaseNode(340 /* PartiallyEmittedExpression */);
+            var node = createBaseNode(345 /* PartiallyEmittedExpression */);
             node.expression = expression;
             node.original = original;
             node.transformFlags |=
@@ -24900,7 +25459,7 @@
         }
         // @api
         function createCommaListExpression(elements) {
-            var node = createBaseNode(341 /* CommaListExpression */);
+            var node = createBaseNode(346 /* CommaListExpression */);
             node.elements = createNodeArray(ts.sameFlatMap(elements, flattenCommaElements));
             node.transformFlags |= propagateChildrenFlags(node.elements);
             return node;
@@ -24917,7 +25476,7 @@
          */
         // @api
         function createEndOfDeclarationMarker(original) {
-            var node = createBaseNode(343 /* EndOfDeclarationMarker */);
+            var node = createBaseNode(348 /* EndOfDeclarationMarker */);
             node.emitNode = {};
             node.original = original;
             return node;
@@ -24928,14 +25487,14 @@
          */
         // @api
         function createMergeDeclarationMarker(original) {
-            var node = createBaseNode(342 /* MergeDeclarationMarker */);
+            var node = createBaseNode(347 /* MergeDeclarationMarker */);
             node.emitNode = {};
             node.original = original;
             return node;
         }
         // @api
         function createSyntheticReferenceExpression(expression, thisArg) {
-            var node = createBaseNode(344 /* SyntheticReferenceExpression */);
+            var node = createBaseNode(349 /* SyntheticReferenceExpression */);
             node.expression = expression;
             node.thisArg = thisArg;
             node.transformFlags |=
@@ -24957,9 +25516,9 @@
             if (node === undefined) {
                 return node;
             }
-            var clone = ts.isSourceFile(node) ? baseFactory.createBaseSourceFileNode(298 /* SourceFile */) :
-                ts.isIdentifier(node) ? baseFactory.createBaseIdentifierNode(78 /* Identifier */) :
-                    ts.isPrivateIdentifier(node) ? baseFactory.createBasePrivateIdentifierNode(79 /* PrivateIdentifier */) :
+            var clone = ts.isSourceFile(node) ? baseFactory.createBaseSourceFileNode(300 /* SourceFile */) :
+                ts.isIdentifier(node) ? baseFactory.createBaseIdentifierNode(79 /* Identifier */) :
+                    ts.isPrivateIdentifier(node) ? baseFactory.createBasePrivateIdentifierNode(80 /* PrivateIdentifier */) :
                         !ts.isNodeKind(node.kind) ? baseFactory.createBaseTokenNode(node.kind) :
                             baseFactory.createBaseNode(node.kind);
             clone.flags |= (node.flags & ~8 /* Synthesized */);
@@ -25020,14 +25579,20 @@
                 : factory.createStrictEquality(createTypeOfExpression(value), createStringLiteral(tag));
         }
         function createMethodCall(object, methodName, argumentsList) {
+            // Preserve the optionality of `object`.
+            if (ts.isCallChain(object)) {
+                return createCallChain(createPropertyAccessChain(object, /*questionDotToken*/ undefined, methodName), 
+                /*questionDotToken*/ undefined, 
+                /*typeArguments*/ undefined, argumentsList);
+            }
             return createCallExpression(createPropertyAccessExpression(object, methodName), 
             /*typeArguments*/ undefined, argumentsList);
         }
         function createFunctionBindCall(target, thisArg, argumentsList) {
-            return createMethodCall(target, "bind", __spreadArray([thisArg], argumentsList));
+            return createMethodCall(target, "bind", __spreadArray([thisArg], argumentsList, true));
         }
         function createFunctionCallCall(target, thisArg, argumentsList) {
-            return createMethodCall(target, "call", __spreadArray([thisArg], argumentsList));
+            return createMethodCall(target, "call", __spreadArray([thisArg], argumentsList, true));
         }
         function createFunctionApplyCall(target, thisArg, argumentsExpression) {
             return createMethodCall(target, "apply", [thisArg, argumentsExpression]);
@@ -25044,6 +25609,12 @@
         function createObjectDefinePropertyCall(target, propertyName, attributes) {
             return createGlobalMethodCall("Object", "defineProperty", [target, asExpression(propertyName), attributes]);
         }
+        function createReflectGetCall(target, propertyKey, receiver) {
+            return createGlobalMethodCall("Reflect", "get", receiver ? [target, propertyKey, receiver] : [target, propertyKey]);
+        }
+        function createReflectSetCall(target, propertyKey, value, receiver) {
+            return createGlobalMethodCall("Reflect", "set", receiver ? [target, propertyKey, value, receiver] : [target, propertyKey, value]);
+        }
         function tryAddPropertyAssignment(properties, propertyName, expression) {
             if (expression) {
                 properties.push(createPropertyAssignment(propertyName, expression));
@@ -25064,11 +25635,11 @@
         }
         function updateOuterExpression(outerExpression, expression) {
             switch (outerExpression.kind) {
-                case 208 /* ParenthesizedExpression */: return updateParenthesizedExpression(outerExpression, expression);
-                case 207 /* TypeAssertionExpression */: return updateTypeAssertion(outerExpression, outerExpression.type, expression);
-                case 225 /* AsExpression */: return updateAsExpression(outerExpression, expression, outerExpression.type);
-                case 226 /* NonNullExpression */: return updateNonNullExpression(outerExpression, expression);
-                case 340 /* PartiallyEmittedExpression */: return updatePartiallyEmittedExpression(outerExpression, expression);
+                case 210 /* ParenthesizedExpression */: return updateParenthesizedExpression(outerExpression, expression);
+                case 209 /* TypeAssertionExpression */: return updateTypeAssertion(outerExpression, outerExpression.type, expression);
+                case 227 /* AsExpression */: return updateAsExpression(outerExpression, expression, outerExpression.type);
+                case 228 /* NonNullExpression */: return updateNonNullExpression(outerExpression, expression);
+                case 345 /* PartiallyEmittedExpression */: return updatePartiallyEmittedExpression(outerExpression, expression);
             }
         }
         /**
@@ -25115,20 +25686,20 @@
         function shouldBeCapturedInTempVariable(node, cacheIdentifiers) {
             var target = ts.skipParentheses(node);
             switch (target.kind) {
-                case 78 /* Identifier */:
+                case 79 /* Identifier */:
                     return cacheIdentifiers;
-                case 107 /* ThisKeyword */:
+                case 108 /* ThisKeyword */:
                 case 8 /* NumericLiteral */:
                 case 9 /* BigIntLiteral */:
                 case 10 /* StringLiteral */:
                     return false;
-                case 200 /* ArrayLiteralExpression */:
+                case 202 /* ArrayLiteralExpression */:
                     var elements = target.elements;
                     if (elements.length === 0) {
                         return false;
                     }
                     return true;
-                case 201 /* ObjectLiteralExpression */:
+                case 203 /* ObjectLiteralExpression */:
                     return target.properties.length > 0;
                 default:
                     return true;
@@ -25184,6 +25755,23 @@
             }
             return { target: target, thisArg: thisArg };
         }
+        function createAssignmentTargetWrapper(paramName, expression) {
+            return createPropertyAccessExpression(
+            // Explicit parens required because of v8 regression (https://bugs.chromium.org/p/v8/issues/detail?id=9560)
+            createParenthesizedExpression(createObjectLiteralExpression([
+                createSetAccessorDeclaration(
+                /*decorators*/ undefined, 
+                /*modifiers*/ undefined, "value", [createParameterDeclaration(
+                    /*decorators*/ undefined, 
+                    /*modifiers*/ undefined, 
+                    /*dotDotDotToken*/ undefined, paramName, 
+                    /*questionToken*/ undefined, 
+                    /*type*/ undefined, 
+                    /*initializer*/ undefined)], createBlock([
+                    createExpressionStatement(expression)
+                ]))
+            ])), "value");
+        }
         function inlineExpressions(expressions) {
             // Avoid deeply nested comma expressions as traversing them during emit can result in "Maximum call
             // stack size exceeded" errors.
@@ -25364,7 +25952,7 @@
         function ensureUseStrict(statements) {
             var foundUseStrict = ts.findUseStrictPrologue(statements);
             if (!foundUseStrict) {
-                return ts.setTextRange(createNodeArray(__spreadArray([createUseStrictPrologue()], statements)), statements);
+                return ts.setTextRange(createNodeArray(__spreadArray([createUseStrictPrologue()], statements, true)), statements);
             }
             return statements;
         }
@@ -25431,20 +26019,20 @@
             var left = ts.isNodeArray(statements) ? statements.slice() : statements;
             // splice other custom prologues from right into left
             if (rightCustomPrologueEnd > rightHoistedVariablesEnd) {
-                left.splice.apply(left, __spreadArray([leftHoistedVariablesEnd, 0], declarations.slice(rightHoistedVariablesEnd, rightCustomPrologueEnd)));
+                left.splice.apply(left, __spreadArray([leftHoistedVariablesEnd, 0], declarations.slice(rightHoistedVariablesEnd, rightCustomPrologueEnd), false));
             }
             // splice hoisted variables from right into left
             if (rightHoistedVariablesEnd > rightHoistedFunctionsEnd) {
-                left.splice.apply(left, __spreadArray([leftHoistedFunctionsEnd, 0], declarations.slice(rightHoistedFunctionsEnd, rightHoistedVariablesEnd)));
+                left.splice.apply(left, __spreadArray([leftHoistedFunctionsEnd, 0], declarations.slice(rightHoistedFunctionsEnd, rightHoistedVariablesEnd), false));
             }
             // splice hoisted functions from right into left
             if (rightHoistedFunctionsEnd > rightStandardPrologueEnd) {
-                left.splice.apply(left, __spreadArray([leftStandardPrologueEnd, 0], declarations.slice(rightStandardPrologueEnd, rightHoistedFunctionsEnd)));
+                left.splice.apply(left, __spreadArray([leftStandardPrologueEnd, 0], declarations.slice(rightStandardPrologueEnd, rightHoistedFunctionsEnd), false));
             }
             // splice standard prologues from right into left (that are not already in left)
             if (rightStandardPrologueEnd > 0) {
                 if (leftStandardPrologueEnd === 0) {
-                    left.splice.apply(left, __spreadArray([0, 0], declarations.slice(0, rightStandardPrologueEnd)));
+                    left.splice.apply(left, __spreadArray([0, 0], declarations.slice(0, rightStandardPrologueEnd), false));
                 }
                 else {
                     var leftPrologues = new ts.Map();
@@ -25531,24 +26119,24 @@
     }
     function getDefaultTagNameForKind(kind) {
         switch (kind) {
-            case 333 /* JSDocTypeTag */: return "type";
-            case 331 /* JSDocReturnTag */: return "returns";
-            case 332 /* JSDocThisTag */: return "this";
-            case 329 /* JSDocEnumTag */: return "enum";
-            case 320 /* JSDocAuthorTag */: return "author";
-            case 322 /* JSDocClassTag */: return "class";
-            case 323 /* JSDocPublicTag */: return "public";
-            case 324 /* JSDocPrivateTag */: return "private";
-            case 325 /* JSDocProtectedTag */: return "protected";
-            case 326 /* JSDocReadonlyTag */: return "readonly";
-            case 327 /* JSDocOverrideTag */: return "override";
-            case 334 /* JSDocTemplateTag */: return "template";
-            case 335 /* JSDocTypedefTag */: return "typedef";
-            case 330 /* JSDocParameterTag */: return "param";
-            case 337 /* JSDocPropertyTag */: return "prop";
-            case 328 /* JSDocCallbackTag */: return "callback";
-            case 318 /* JSDocAugmentsTag */: return "augments";
-            case 319 /* JSDocImplementsTag */: return "implements";
+            case 338 /* JSDocTypeTag */: return "type";
+            case 336 /* JSDocReturnTag */: return "returns";
+            case 337 /* JSDocThisTag */: return "this";
+            case 334 /* JSDocEnumTag */: return "enum";
+            case 325 /* JSDocAuthorTag */: return "author";
+            case 327 /* JSDocClassTag */: return "class";
+            case 328 /* JSDocPublicTag */: return "public";
+            case 329 /* JSDocPrivateTag */: return "private";
+            case 330 /* JSDocProtectedTag */: return "protected";
+            case 331 /* JSDocReadonlyTag */: return "readonly";
+            case 332 /* JSDocOverrideTag */: return "override";
+            case 339 /* JSDocTemplateTag */: return "template";
+            case 340 /* JSDocTypedefTag */: return "typedef";
+            case 335 /* JSDocParameterTag */: return "param";
+            case 342 /* JSDocPropertyTag */: return "prop";
+            case 333 /* JSDocCallbackTag */: return "callback";
+            case 323 /* JSDocAugmentsTag */: return "augments";
+            case 324 /* JSDocImplementsTag */: return "implements";
             default:
                 return ts.Debug.fail("Unsupported kind: " + ts.Debug.formatSyntaxKind(kind));
         }
@@ -25576,7 +26164,7 @@
                 break;
         }
         var token = rawTextScanner.scan();
-        if (token === 23 /* CloseBracketToken */) {
+        if (token === 19 /* CloseBraceToken */) {
             token = rawTextScanner.reScanTemplateToken(/*isTaggedTemplate*/ false);
         }
         if (rawTextScanner.isUnterminated()) {
@@ -25604,7 +26192,7 @@
         return propagateChildFlags(node) & ~16777216 /* ContainsPossibleTopLevelAwait */;
     }
     function propagatePropertyNameFlagsOfChild(node, transformFlags) {
-        return transformFlags | (node.transformFlags & 8192 /* PropertyNamePropagatingFlags */);
+        return transformFlags | (node.transformFlags & 33562624 /* PropertyNamePropagatingFlags */);
     }
     function propagateChildFlags(child) {
         if (!child)
@@ -25628,69 +26216,69 @@
      */
     /* @internal */
     function getTransformFlagsSubtreeExclusions(kind) {
-        if (kind >= 173 /* FirstTypeNode */ && kind <= 196 /* LastTypeNode */) {
+        if (kind >= 175 /* FirstTypeNode */ && kind <= 198 /* LastTypeNode */) {
             return -2 /* TypeExcludes */;
         }
         switch (kind) {
-            case 204 /* CallExpression */:
-            case 205 /* NewExpression */:
-            case 200 /* ArrayLiteralExpression */:
+            case 206 /* CallExpression */:
+            case 207 /* NewExpression */:
+            case 202 /* ArrayLiteralExpression */:
                 return 536887296 /* ArrayLiteralOrCallOrNewExcludes */;
-            case 257 /* ModuleDeclaration */:
-                return 555888640 /* ModuleExcludes */;
-            case 161 /* Parameter */:
+            case 259 /* ModuleDeclaration */:
+                return 589443072 /* ModuleExcludes */;
+            case 162 /* Parameter */:
                 return 536870912 /* ParameterExcludes */;
-            case 210 /* ArrowFunction */:
+            case 212 /* ArrowFunction */:
                 return 557748224 /* ArrowFunctionExcludes */;
-            case 209 /* FunctionExpression */:
-            case 252 /* FunctionDeclaration */:
-                return 557756416 /* FunctionExcludes */;
-            case 251 /* VariableDeclarationList */:
+            case 211 /* FunctionExpression */:
+            case 254 /* FunctionDeclaration */:
+                return 591310848 /* FunctionExcludes */;
+            case 253 /* VariableDeclarationList */:
                 return 537165824 /* VariableDeclarationListExcludes */;
-            case 253 /* ClassDeclaration */:
-            case 222 /* ClassExpression */:
+            case 255 /* ClassDeclaration */:
+            case 224 /* ClassExpression */:
                 return 536940544 /* ClassExcludes */;
-            case 167 /* Constructor */:
-                return 557752320 /* ConstructorExcludes */;
-            case 164 /* PropertyDeclaration */:
-                return 536879104 /* PropertyExcludes */;
-            case 166 /* MethodDeclaration */:
-            case 168 /* GetAccessor */:
-            case 169 /* SetAccessor */:
-                return 540975104 /* MethodOrAccessorExcludes */;
-            case 128 /* AnyKeyword */:
-            case 144 /* NumberKeyword */:
-            case 155 /* BigIntKeyword */:
-            case 141 /* NeverKeyword */:
-            case 147 /* StringKeyword */:
-            case 145 /* ObjectKeyword */:
-            case 131 /* BooleanKeyword */:
-            case 148 /* SymbolKeyword */:
-            case 113 /* VoidKeyword */:
-            case 160 /* TypeParameter */:
-            case 163 /* PropertySignature */:
-            case 165 /* MethodSignature */:
-            case 170 /* CallSignature */:
-            case 171 /* ConstructSignature */:
-            case 172 /* IndexSignature */:
-            case 254 /* InterfaceDeclaration */:
-            case 255 /* TypeAliasDeclaration */:
+            case 169 /* Constructor */:
+                return 591306752 /* ConstructorExcludes */;
+            case 165 /* PropertyDeclaration */:
+                return 570433536 /* PropertyExcludes */;
+            case 167 /* MethodDeclaration */:
+            case 170 /* GetAccessor */:
+            case 171 /* SetAccessor */:
+                return 574529536 /* MethodOrAccessorExcludes */;
+            case 129 /* AnyKeyword */:
+            case 145 /* NumberKeyword */:
+            case 156 /* BigIntKeyword */:
+            case 142 /* NeverKeyword */:
+            case 148 /* StringKeyword */:
+            case 146 /* ObjectKeyword */:
+            case 132 /* BooleanKeyword */:
+            case 149 /* SymbolKeyword */:
+            case 114 /* VoidKeyword */:
+            case 161 /* TypeParameter */:
+            case 164 /* PropertySignature */:
+            case 166 /* MethodSignature */:
+            case 172 /* CallSignature */:
+            case 173 /* ConstructSignature */:
+            case 174 /* IndexSignature */:
+            case 256 /* InterfaceDeclaration */:
+            case 257 /* TypeAliasDeclaration */:
                 return -2 /* TypeExcludes */;
-            case 201 /* ObjectLiteralExpression */:
+            case 203 /* ObjectLiteralExpression */:
                 return 536973312 /* ObjectLiteralExcludes */;
-            case 288 /* CatchClause */:
+            case 290 /* CatchClause */:
                 return 536903680 /* CatchClauseExcludes */;
-            case 197 /* ObjectBindingPattern */:
-            case 198 /* ArrayBindingPattern */:
+            case 199 /* ObjectBindingPattern */:
+            case 200 /* ArrayBindingPattern */:
                 return 536887296 /* BindingPatternExcludes */;
-            case 207 /* TypeAssertionExpression */:
-            case 225 /* AsExpression */:
-            case 340 /* PartiallyEmittedExpression */:
-            case 208 /* ParenthesizedExpression */:
-            case 105 /* SuperKeyword */:
+            case 209 /* TypeAssertionExpression */:
+            case 227 /* AsExpression */:
+            case 345 /* PartiallyEmittedExpression */:
+            case 210 /* ParenthesizedExpression */:
+            case 106 /* SuperKeyword */:
                 return 536870912 /* OuterExpressionExcludes */;
-            case 202 /* PropertyAccessExpression */:
-            case 203 /* ElementAccessExpression */:
+            case 204 /* PropertyAccessExpression */:
+            case 205 /* ElementAccessExpression */:
                 return 536870912 /* PropertyAccessExcludes */;
             default:
                 return 536870912 /* NodeExcludes */;
@@ -25947,7 +26535,7 @@
         if (trailingComments)
             destEmitNode.trailingComments = ts.addRange(trailingComments.slice(), destEmitNode.trailingComments);
         if (flags)
-            destEmitNode.flags = flags;
+            destEmitNode.flags = flags & ~268435456 /* Immutable */;
         if (commentRange)
             destEmitNode.commentRange = commentRange;
         if (sourceMapRange)
@@ -25989,7 +26577,7 @@
                 // To avoid holding onto transformation artifacts, we keep track of any
                 // parse tree node we are annotating. This allows us to clean them up after
                 // all transformations have completed.
-                if (node.kind === 298 /* SourceFile */) {
+                if (node.kind === 300 /* SourceFile */) {
                     return node.emitNode = { annotatedNodes: [node] };
                 }
                 var sourceFile = (_a = ts.getSourceFileOfNode(ts.getParseTreeNode(ts.getSourceFileOfNode(node)))) !== null && _a !== void 0 ? _a : ts.Debug.fail("Could not determine parsed source file.");
@@ -25997,6 +26585,9 @@
             }
             node.emitNode = {};
         }
+        else {
+            ts.Debug.assert(!(node.emitNode.flags & 268435456 /* Immutable */), "Invalid attempt to mutate an immutable node.");
+        }
         return node.emitNode;
     }
     ts.getOrCreateEmitNode = getOrCreateEmitNode;
@@ -26254,6 +26845,8 @@
 (function (ts) {
     function createEmitHelperFactory(context) {
         var factory = context.factory;
+        var immutableTrue = ts.memoize(function () { return ts.setEmitFlags(factory.createTrue(), 268435456 /* Immutable */); });
+        var immutableFalse = ts.memoize(function () { return ts.setEmitFlags(factory.createFalse(), 268435456 /* Immutable */); });
         return {
             getUnscopedHelperName: getUnscopedHelperName,
             // TypeScript Helpers
@@ -26424,10 +27017,10 @@
             return factory.createCallExpression(getUnscopedHelperName("__makeTemplateObject"), 
             /*typeArguments*/ undefined, [cooked, raw]);
         }
-        function createSpreadArrayHelper(to, from) {
+        function createSpreadArrayHelper(to, from, packFrom) {
             context.requestEmitHelper(ts.spreadArrayHelper);
             return factory.createCallExpression(getUnscopedHelperName("__spreadArray"), 
-            /*typeArguments*/ undefined, [to, from]);
+            /*typeArguments*/ undefined, [to, from, packFrom ? immutableTrue() : immutableFalse()]);
         }
         // ES2015 Destructuring Helpers
         function createValuesHelper(expression) {
@@ -26452,7 +27045,7 @@
         function createCreateBindingHelper(module, inputName, outputName) {
             context.requestEmitHelper(ts.createBindingHelper);
             return factory.createCallExpression(getUnscopedHelperName("__createBinding"), 
-            /*typeArguments*/ undefined, __spreadArray([factory.createIdentifier("exports"), module, inputName], (outputName ? [outputName] : [])));
+            /*typeArguments*/ undefined, __spreadArray([factory.createIdentifier("exports"), module, inputName], (outputName ? [outputName] : []), true));
         }
         function createImportStarHelper(expression) {
             context.requestEmitHelper(ts.importStarHelper);
@@ -26629,7 +27222,7 @@
         name: "typescript:spreadArray",
         importName: "__spreadArray",
         scoped: false,
-        text: "\n            var __spreadArray = (this && this.__spreadArray) || function (to, from) {\n                for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)\n                    to[j] = from[i];\n                return to;\n            };"
+        text: "\n            var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {\n                if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n                    if (ar || !(i in from)) {\n                        if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n                        ar[i] = from[i];\n                    }\n                }\n                return to.concat(ar || Array.prototype.slice.call(from));\n            };"
     };
     // ES2015 Destructuring Helpers
     ts.valuesHelper = {
@@ -26897,7 +27490,7 @@
     function isCallToHelper(firstSegment, helperName) {
         return ts.isCallExpression(firstSegment)
             && ts.isIdentifier(firstSegment.expression)
-            && (ts.getEmitFlags(firstSegment.expression) & 4096 /* HelperName */)
+            && (ts.getEmitFlags(firstSegment.expression) & 4096 /* HelperName */) !== 0
             && firstSegment.expression.escapedText === helperName;
     }
     ts.isCallToHelper = isCallToHelper;
@@ -26991,639 +27584,648 @@
     ts.isEqualsGreaterThanToken = isEqualsGreaterThanToken;
     // Identifiers
     function isIdentifier(node) {
-        return node.kind === 78 /* Identifier */;
+        return node.kind === 79 /* Identifier */;
     }
     ts.isIdentifier = isIdentifier;
     function isPrivateIdentifier(node) {
-        return node.kind === 79 /* PrivateIdentifier */;
+        return node.kind === 80 /* PrivateIdentifier */;
     }
     ts.isPrivateIdentifier = isPrivateIdentifier;
     // Reserved Words
     /* @internal */
     function isExportModifier(node) {
-        return node.kind === 92 /* ExportKeyword */;
+        return node.kind === 93 /* ExportKeyword */;
     }
     ts.isExportModifier = isExportModifier;
     /* @internal */
     function isAsyncModifier(node) {
-        return node.kind === 129 /* AsyncKeyword */;
+        return node.kind === 130 /* AsyncKeyword */;
     }
     ts.isAsyncModifier = isAsyncModifier;
     /* @internal */
     function isAssertsKeyword(node) {
-        return node.kind === 127 /* AssertsKeyword */;
+        return node.kind === 128 /* AssertsKeyword */;
     }
     ts.isAssertsKeyword = isAssertsKeyword;
     /* @internal */
     function isAwaitKeyword(node) {
-        return node.kind === 130 /* AwaitKeyword */;
+        return node.kind === 131 /* AwaitKeyword */;
     }
     ts.isAwaitKeyword = isAwaitKeyword;
     /* @internal */
     function isReadonlyKeyword(node) {
-        return node.kind === 142 /* ReadonlyKeyword */;
+        return node.kind === 143 /* ReadonlyKeyword */;
     }
     ts.isReadonlyKeyword = isReadonlyKeyword;
     /* @internal */
     function isStaticModifier(node) {
-        return node.kind === 123 /* StaticKeyword */;
+        return node.kind === 124 /* StaticKeyword */;
     }
     ts.isStaticModifier = isStaticModifier;
+    /* @internal */
+    function isAbstractModifier(node) {
+        return node.kind === 126 /* AbstractKeyword */;
+    }
+    ts.isAbstractModifier = isAbstractModifier;
     /*@internal*/
     function isSuperKeyword(node) {
-        return node.kind === 105 /* SuperKeyword */;
+        return node.kind === 106 /* SuperKeyword */;
     }
     ts.isSuperKeyword = isSuperKeyword;
     /*@internal*/
     function isImportKeyword(node) {
-        return node.kind === 99 /* ImportKeyword */;
+        return node.kind === 100 /* ImportKeyword */;
     }
     ts.isImportKeyword = isImportKeyword;
     // Names
     function isQualifiedName(node) {
-        return node.kind === 158 /* QualifiedName */;
+        return node.kind === 159 /* QualifiedName */;
     }
     ts.isQualifiedName = isQualifiedName;
     function isComputedPropertyName(node) {
-        return node.kind === 159 /* ComputedPropertyName */;
+        return node.kind === 160 /* ComputedPropertyName */;
     }
     ts.isComputedPropertyName = isComputedPropertyName;
     // Signature elements
     function isTypeParameterDeclaration(node) {
-        return node.kind === 160 /* TypeParameter */;
+        return node.kind === 161 /* TypeParameter */;
     }
     ts.isTypeParameterDeclaration = isTypeParameterDeclaration;
     // TODO(rbuckton): Rename to 'isParameterDeclaration'
     function isParameter(node) {
-        return node.kind === 161 /* Parameter */;
+        return node.kind === 162 /* Parameter */;
     }
     ts.isParameter = isParameter;
     function isDecorator(node) {
-        return node.kind === 162 /* Decorator */;
+        return node.kind === 163 /* Decorator */;
     }
     ts.isDecorator = isDecorator;
     // TypeMember
     function isPropertySignature(node) {
-        return node.kind === 163 /* PropertySignature */;
+        return node.kind === 164 /* PropertySignature */;
     }
     ts.isPropertySignature = isPropertySignature;
     function isPropertyDeclaration(node) {
-        return node.kind === 164 /* PropertyDeclaration */;
+        return node.kind === 165 /* PropertyDeclaration */;
     }
     ts.isPropertyDeclaration = isPropertyDeclaration;
     function isMethodSignature(node) {
-        return node.kind === 165 /* MethodSignature */;
+        return node.kind === 166 /* MethodSignature */;
     }
     ts.isMethodSignature = isMethodSignature;
     function isMethodDeclaration(node) {
-        return node.kind === 166 /* MethodDeclaration */;
+        return node.kind === 167 /* MethodDeclaration */;
     }
     ts.isMethodDeclaration = isMethodDeclaration;
+    function isClassStaticBlockDeclaration(node) {
+        return node.kind === 168 /* ClassStaticBlockDeclaration */;
+    }
+    ts.isClassStaticBlockDeclaration = isClassStaticBlockDeclaration;
     function isConstructorDeclaration(node) {
-        return node.kind === 167 /* Constructor */;
+        return node.kind === 169 /* Constructor */;
     }
     ts.isConstructorDeclaration = isConstructorDeclaration;
     function isGetAccessorDeclaration(node) {
-        return node.kind === 168 /* GetAccessor */;
+        return node.kind === 170 /* GetAccessor */;
     }
     ts.isGetAccessorDeclaration = isGetAccessorDeclaration;
     function isSetAccessorDeclaration(node) {
-        return node.kind === 169 /* SetAccessor */;
+        return node.kind === 171 /* SetAccessor */;
     }
     ts.isSetAccessorDeclaration = isSetAccessorDeclaration;
     function isCallSignatureDeclaration(node) {
-        return node.kind === 170 /* CallSignature */;
+        return node.kind === 172 /* CallSignature */;
     }
     ts.isCallSignatureDeclaration = isCallSignatureDeclaration;
     function isConstructSignatureDeclaration(node) {
-        return node.kind === 171 /* ConstructSignature */;
+        return node.kind === 173 /* ConstructSignature */;
     }
     ts.isConstructSignatureDeclaration = isConstructSignatureDeclaration;
     function isIndexSignatureDeclaration(node) {
-        return node.kind === 172 /* IndexSignature */;
+        return node.kind === 174 /* IndexSignature */;
     }
     ts.isIndexSignatureDeclaration = isIndexSignatureDeclaration;
     // Type
     function isTypePredicateNode(node) {
-        return node.kind === 173 /* TypePredicate */;
+        return node.kind === 175 /* TypePredicate */;
     }
     ts.isTypePredicateNode = isTypePredicateNode;
     function isTypeReferenceNode(node) {
-        return node.kind === 174 /* TypeReference */;
+        return node.kind === 176 /* TypeReference */;
     }
     ts.isTypeReferenceNode = isTypeReferenceNode;
     function isFunctionTypeNode(node) {
-        return node.kind === 175 /* FunctionType */;
+        return node.kind === 177 /* FunctionType */;
     }
     ts.isFunctionTypeNode = isFunctionTypeNode;
     function isConstructorTypeNode(node) {
-        return node.kind === 176 /* ConstructorType */;
+        return node.kind === 178 /* ConstructorType */;
     }
     ts.isConstructorTypeNode = isConstructorTypeNode;
     function isTypeQueryNode(node) {
-        return node.kind === 177 /* TypeQuery */;
+        return node.kind === 179 /* TypeQuery */;
     }
     ts.isTypeQueryNode = isTypeQueryNode;
     function isTypeLiteralNode(node) {
-        return node.kind === 178 /* TypeLiteral */;
+        return node.kind === 180 /* TypeLiteral */;
     }
     ts.isTypeLiteralNode = isTypeLiteralNode;
     function isArrayTypeNode(node) {
-        return node.kind === 179 /* ArrayType */;
+        return node.kind === 181 /* ArrayType */;
     }
     ts.isArrayTypeNode = isArrayTypeNode;
     function isTupleTypeNode(node) {
-        return node.kind === 180 /* TupleType */;
+        return node.kind === 182 /* TupleType */;
     }
     ts.isTupleTypeNode = isTupleTypeNode;
     function isNamedTupleMember(node) {
-        return node.kind === 193 /* NamedTupleMember */;
+        return node.kind === 195 /* NamedTupleMember */;
     }
     ts.isNamedTupleMember = isNamedTupleMember;
     function isOptionalTypeNode(node) {
-        return node.kind === 181 /* OptionalType */;
+        return node.kind === 183 /* OptionalType */;
     }
     ts.isOptionalTypeNode = isOptionalTypeNode;
     function isRestTypeNode(node) {
-        return node.kind === 182 /* RestType */;
+        return node.kind === 184 /* RestType */;
     }
     ts.isRestTypeNode = isRestTypeNode;
     function isUnionTypeNode(node) {
-        return node.kind === 183 /* UnionType */;
+        return node.kind === 185 /* UnionType */;
     }
     ts.isUnionTypeNode = isUnionTypeNode;
     function isIntersectionTypeNode(node) {
-        return node.kind === 184 /* IntersectionType */;
+        return node.kind === 186 /* IntersectionType */;
     }
     ts.isIntersectionTypeNode = isIntersectionTypeNode;
     function isConditionalTypeNode(node) {
-        return node.kind === 185 /* ConditionalType */;
+        return node.kind === 187 /* ConditionalType */;
     }
     ts.isConditionalTypeNode = isConditionalTypeNode;
     function isInferTypeNode(node) {
-        return node.kind === 186 /* InferType */;
+        return node.kind === 188 /* InferType */;
     }
     ts.isInferTypeNode = isInferTypeNode;
     function isParenthesizedTypeNode(node) {
-        return node.kind === 187 /* ParenthesizedType */;
+        return node.kind === 189 /* ParenthesizedType */;
     }
     ts.isParenthesizedTypeNode = isParenthesizedTypeNode;
     function isThisTypeNode(node) {
-        return node.kind === 188 /* ThisType */;
+        return node.kind === 190 /* ThisType */;
     }
     ts.isThisTypeNode = isThisTypeNode;
     function isTypeOperatorNode(node) {
-        return node.kind === 189 /* TypeOperator */;
+        return node.kind === 191 /* TypeOperator */;
     }
     ts.isTypeOperatorNode = isTypeOperatorNode;
     function isIndexedAccessTypeNode(node) {
-        return node.kind === 190 /* IndexedAccessType */;
+        return node.kind === 192 /* IndexedAccessType */;
     }
     ts.isIndexedAccessTypeNode = isIndexedAccessTypeNode;
     function isMappedTypeNode(node) {
-        return node.kind === 191 /* MappedType */;
+        return node.kind === 193 /* MappedType */;
     }
     ts.isMappedTypeNode = isMappedTypeNode;
     function isLiteralTypeNode(node) {
-        return node.kind === 192 /* LiteralType */;
+        return node.kind === 194 /* LiteralType */;
     }
     ts.isLiteralTypeNode = isLiteralTypeNode;
     function isImportTypeNode(node) {
-        return node.kind === 196 /* ImportType */;
+        return node.kind === 198 /* ImportType */;
     }
     ts.isImportTypeNode = isImportTypeNode;
     function isTemplateLiteralTypeSpan(node) {
-        return node.kind === 195 /* TemplateLiteralTypeSpan */;
+        return node.kind === 197 /* TemplateLiteralTypeSpan */;
     }
     ts.isTemplateLiteralTypeSpan = isTemplateLiteralTypeSpan;
     function isTemplateLiteralTypeNode(node) {
-        return node.kind === 194 /* TemplateLiteralType */;
+        return node.kind === 196 /* TemplateLiteralType */;
     }
     ts.isTemplateLiteralTypeNode = isTemplateLiteralTypeNode;
     // Binding patterns
     function isObjectBindingPattern(node) {
-        return node.kind === 197 /* ObjectBindingPattern */;
+        return node.kind === 199 /* ObjectBindingPattern */;
     }
     ts.isObjectBindingPattern = isObjectBindingPattern;
     function isArrayBindingPattern(node) {
-        return node.kind === 198 /* ArrayBindingPattern */;
+        return node.kind === 200 /* ArrayBindingPattern */;
     }
     ts.isArrayBindingPattern = isArrayBindingPattern;
     function isBindingElement(node) {
-        return node.kind === 199 /* BindingElement */;
+        return node.kind === 201 /* BindingElement */;
     }
     ts.isBindingElement = isBindingElement;
     // Expression
     function isArrayLiteralExpression(node) {
-        return node.kind === 200 /* ArrayLiteralExpression */;
+        return node.kind === 202 /* ArrayLiteralExpression */;
     }
     ts.isArrayLiteralExpression = isArrayLiteralExpression;
     function isObjectLiteralExpression(node) {
-        return node.kind === 201 /* ObjectLiteralExpression */;
+        return node.kind === 203 /* ObjectLiteralExpression */;
     }
     ts.isObjectLiteralExpression = isObjectLiteralExpression;
     function isPropertyAccessExpression(node) {
-        return node.kind === 202 /* PropertyAccessExpression */;
+        return node.kind === 204 /* PropertyAccessExpression */;
     }
     ts.isPropertyAccessExpression = isPropertyAccessExpression;
     function isElementAccessExpression(node) {
-        return node.kind === 203 /* ElementAccessExpression */;
+        return node.kind === 205 /* ElementAccessExpression */;
     }
     ts.isElementAccessExpression = isElementAccessExpression;
     function isCallExpression(node) {
-        return node.kind === 204 /* CallExpression */;
+        return node.kind === 206 /* CallExpression */;
     }
     ts.isCallExpression = isCallExpression;
     function isNewExpression(node) {
-        return node.kind === 205 /* NewExpression */;
+        return node.kind === 207 /* NewExpression */;
     }
     ts.isNewExpression = isNewExpression;
     function isTaggedTemplateExpression(node) {
-        return node.kind === 206 /* TaggedTemplateExpression */;
+        return node.kind === 208 /* TaggedTemplateExpression */;
     }
     ts.isTaggedTemplateExpression = isTaggedTemplateExpression;
     function isTypeAssertionExpression(node) {
-        return node.kind === 207 /* TypeAssertionExpression */;
+        return node.kind === 209 /* TypeAssertionExpression */;
     }
     ts.isTypeAssertionExpression = isTypeAssertionExpression;
     function isParenthesizedExpression(node) {
-        return node.kind === 208 /* ParenthesizedExpression */;
+        return node.kind === 210 /* ParenthesizedExpression */;
     }
     ts.isParenthesizedExpression = isParenthesizedExpression;
     function isFunctionExpression(node) {
-        return node.kind === 209 /* FunctionExpression */;
+        return node.kind === 211 /* FunctionExpression */;
     }
     ts.isFunctionExpression = isFunctionExpression;
     function isArrowFunction(node) {
-        return node.kind === 210 /* ArrowFunction */;
+        return node.kind === 212 /* ArrowFunction */;
     }
     ts.isArrowFunction = isArrowFunction;
     function isDeleteExpression(node) {
-        return node.kind === 211 /* DeleteExpression */;
+        return node.kind === 213 /* DeleteExpression */;
     }
     ts.isDeleteExpression = isDeleteExpression;
     function isTypeOfExpression(node) {
-        return node.kind === 212 /* TypeOfExpression */;
+        return node.kind === 214 /* TypeOfExpression */;
     }
     ts.isTypeOfExpression = isTypeOfExpression;
     function isVoidExpression(node) {
-        return node.kind === 213 /* VoidExpression */;
+        return node.kind === 215 /* VoidExpression */;
     }
     ts.isVoidExpression = isVoidExpression;
     function isAwaitExpression(node) {
-        return node.kind === 214 /* AwaitExpression */;
+        return node.kind === 216 /* AwaitExpression */;
     }
     ts.isAwaitExpression = isAwaitExpression;
     function isPrefixUnaryExpression(node) {
-        return node.kind === 215 /* PrefixUnaryExpression */;
+        return node.kind === 217 /* PrefixUnaryExpression */;
     }
     ts.isPrefixUnaryExpression = isPrefixUnaryExpression;
     function isPostfixUnaryExpression(node) {
-        return node.kind === 216 /* PostfixUnaryExpression */;
+        return node.kind === 218 /* PostfixUnaryExpression */;
     }
     ts.isPostfixUnaryExpression = isPostfixUnaryExpression;
     function isBinaryExpression(node) {
-        return node.kind === 217 /* BinaryExpression */;
+        return node.kind === 219 /* BinaryExpression */;
     }
     ts.isBinaryExpression = isBinaryExpression;
     function isConditionalExpression(node) {
-        return node.kind === 218 /* ConditionalExpression */;
+        return node.kind === 220 /* ConditionalExpression */;
     }
     ts.isConditionalExpression = isConditionalExpression;
     function isTemplateExpression(node) {
-        return node.kind === 219 /* TemplateExpression */;
+        return node.kind === 221 /* TemplateExpression */;
     }
     ts.isTemplateExpression = isTemplateExpression;
     function isYieldExpression(node) {
-        return node.kind === 220 /* YieldExpression */;
+        return node.kind === 222 /* YieldExpression */;
     }
     ts.isYieldExpression = isYieldExpression;
     function isSpreadElement(node) {
-        return node.kind === 221 /* SpreadElement */;
+        return node.kind === 223 /* SpreadElement */;
     }
     ts.isSpreadElement = isSpreadElement;
     function isClassExpression(node) {
-        return node.kind === 222 /* ClassExpression */;
+        return node.kind === 224 /* ClassExpression */;
     }
     ts.isClassExpression = isClassExpression;
     function isOmittedExpression(node) {
-        return node.kind === 223 /* OmittedExpression */;
+        return node.kind === 225 /* OmittedExpression */;
     }
     ts.isOmittedExpression = isOmittedExpression;
     function isExpressionWithTypeArguments(node) {
-        return node.kind === 224 /* ExpressionWithTypeArguments */;
+        return node.kind === 226 /* ExpressionWithTypeArguments */;
     }
     ts.isExpressionWithTypeArguments = isExpressionWithTypeArguments;
     function isAsExpression(node) {
-        return node.kind === 225 /* AsExpression */;
+        return node.kind === 227 /* AsExpression */;
     }
     ts.isAsExpression = isAsExpression;
     function isNonNullExpression(node) {
-        return node.kind === 226 /* NonNullExpression */;
+        return node.kind === 228 /* NonNullExpression */;
     }
     ts.isNonNullExpression = isNonNullExpression;
     function isMetaProperty(node) {
-        return node.kind === 227 /* MetaProperty */;
+        return node.kind === 229 /* MetaProperty */;
     }
     ts.isMetaProperty = isMetaProperty;
     function isSyntheticExpression(node) {
-        return node.kind === 228 /* SyntheticExpression */;
+        return node.kind === 230 /* SyntheticExpression */;
     }
     ts.isSyntheticExpression = isSyntheticExpression;
     function isPartiallyEmittedExpression(node) {
-        return node.kind === 340 /* PartiallyEmittedExpression */;
+        return node.kind === 345 /* PartiallyEmittedExpression */;
     }
     ts.isPartiallyEmittedExpression = isPartiallyEmittedExpression;
     function isCommaListExpression(node) {
-        return node.kind === 341 /* CommaListExpression */;
+        return node.kind === 346 /* CommaListExpression */;
     }
     ts.isCommaListExpression = isCommaListExpression;
     // Misc
     function isTemplateSpan(node) {
-        return node.kind === 229 /* TemplateSpan */;
+        return node.kind === 231 /* TemplateSpan */;
     }
     ts.isTemplateSpan = isTemplateSpan;
     function isSemicolonClassElement(node) {
-        return node.kind === 230 /* SemicolonClassElement */;
+        return node.kind === 232 /* SemicolonClassElement */;
     }
     ts.isSemicolonClassElement = isSemicolonClassElement;
     // Elements
     function isBlock(node) {
-        return node.kind === 231 /* Block */;
+        return node.kind === 233 /* Block */;
     }
     ts.isBlock = isBlock;
     function isVariableStatement(node) {
-        return node.kind === 233 /* VariableStatement */;
+        return node.kind === 235 /* VariableStatement */;
     }
     ts.isVariableStatement = isVariableStatement;
     function isEmptyStatement(node) {
-        return node.kind === 232 /* EmptyStatement */;
+        return node.kind === 234 /* EmptyStatement */;
     }
     ts.isEmptyStatement = isEmptyStatement;
     function isExpressionStatement(node) {
-        return node.kind === 234 /* ExpressionStatement */;
+        return node.kind === 236 /* ExpressionStatement */;
     }
     ts.isExpressionStatement = isExpressionStatement;
     function isIfStatement(node) {
-        return node.kind === 235 /* IfStatement */;
+        return node.kind === 237 /* IfStatement */;
     }
     ts.isIfStatement = isIfStatement;
     function isDoStatement(node) {
-        return node.kind === 236 /* DoStatement */;
+        return node.kind === 238 /* DoStatement */;
     }
     ts.isDoStatement = isDoStatement;
     function isWhileStatement(node) {
-        return node.kind === 237 /* WhileStatement */;
+        return node.kind === 239 /* WhileStatement */;
     }
     ts.isWhileStatement = isWhileStatement;
     function isForStatement(node) {
-        return node.kind === 238 /* ForStatement */;
+        return node.kind === 240 /* ForStatement */;
     }
     ts.isForStatement = isForStatement;
     function isForInStatement(node) {
-        return node.kind === 239 /* ForInStatement */;
+        return node.kind === 241 /* ForInStatement */;
     }
     ts.isForInStatement = isForInStatement;
     function isForOfStatement(node) {
-        return node.kind === 240 /* ForOfStatement */;
+        return node.kind === 242 /* ForOfStatement */;
     }
     ts.isForOfStatement = isForOfStatement;
     function isContinueStatement(node) {
-        return node.kind === 241 /* ContinueStatement */;
+        return node.kind === 243 /* ContinueStatement */;
     }
     ts.isContinueStatement = isContinueStatement;
     function isBreakStatement(node) {
-        return node.kind === 242 /* BreakStatement */;
+        return node.kind === 244 /* BreakStatement */;
     }
     ts.isBreakStatement = isBreakStatement;
     function isReturnStatement(node) {
-        return node.kind === 243 /* ReturnStatement */;
+        return node.kind === 245 /* ReturnStatement */;
     }
     ts.isReturnStatement = isReturnStatement;
     function isWithStatement(node) {
-        return node.kind === 244 /* WithStatement */;
+        return node.kind === 246 /* WithStatement */;
     }
     ts.isWithStatement = isWithStatement;
     function isSwitchStatement(node) {
-        return node.kind === 245 /* SwitchStatement */;
+        return node.kind === 247 /* SwitchStatement */;
     }
     ts.isSwitchStatement = isSwitchStatement;
     function isLabeledStatement(node) {
-        return node.kind === 246 /* LabeledStatement */;
+        return node.kind === 248 /* LabeledStatement */;
     }
     ts.isLabeledStatement = isLabeledStatement;
     function isThrowStatement(node) {
-        return node.kind === 247 /* ThrowStatement */;
+        return node.kind === 249 /* ThrowStatement */;
     }
     ts.isThrowStatement = isThrowStatement;
     function isTryStatement(node) {
-        return node.kind === 248 /* TryStatement */;
+        return node.kind === 250 /* TryStatement */;
     }
     ts.isTryStatement = isTryStatement;
     function isDebuggerStatement(node) {
-        return node.kind === 249 /* DebuggerStatement */;
+        return node.kind === 251 /* DebuggerStatement */;
     }
     ts.isDebuggerStatement = isDebuggerStatement;
     function isVariableDeclaration(node) {
-        return node.kind === 250 /* VariableDeclaration */;
+        return node.kind === 252 /* VariableDeclaration */;
     }
     ts.isVariableDeclaration = isVariableDeclaration;
     function isVariableDeclarationList(node) {
-        return node.kind === 251 /* VariableDeclarationList */;
+        return node.kind === 253 /* VariableDeclarationList */;
     }
     ts.isVariableDeclarationList = isVariableDeclarationList;
     function isFunctionDeclaration(node) {
-        return node.kind === 252 /* FunctionDeclaration */;
+        return node.kind === 254 /* FunctionDeclaration */;
     }
     ts.isFunctionDeclaration = isFunctionDeclaration;
     function isClassDeclaration(node) {
-        return node.kind === 253 /* ClassDeclaration */;
+        return node.kind === 255 /* ClassDeclaration */;
     }
     ts.isClassDeclaration = isClassDeclaration;
     function isInterfaceDeclaration(node) {
-        return node.kind === 254 /* InterfaceDeclaration */;
+        return node.kind === 256 /* InterfaceDeclaration */;
     }
     ts.isInterfaceDeclaration = isInterfaceDeclaration;
     function isTypeAliasDeclaration(node) {
-        return node.kind === 255 /* TypeAliasDeclaration */;
+        return node.kind === 257 /* TypeAliasDeclaration */;
     }
     ts.isTypeAliasDeclaration = isTypeAliasDeclaration;
     function isEnumDeclaration(node) {
-        return node.kind === 256 /* EnumDeclaration */;
+        return node.kind === 258 /* EnumDeclaration */;
     }
     ts.isEnumDeclaration = isEnumDeclaration;
     function isModuleDeclaration(node) {
-        return node.kind === 257 /* ModuleDeclaration */;
+        return node.kind === 259 /* ModuleDeclaration */;
     }
     ts.isModuleDeclaration = isModuleDeclaration;
     function isModuleBlock(node) {
-        return node.kind === 258 /* ModuleBlock */;
+        return node.kind === 260 /* ModuleBlock */;
     }
     ts.isModuleBlock = isModuleBlock;
     function isCaseBlock(node) {
-        return node.kind === 259 /* CaseBlock */;
+        return node.kind === 261 /* CaseBlock */;
     }
     ts.isCaseBlock = isCaseBlock;
     function isNamespaceExportDeclaration(node) {
-        return node.kind === 260 /* NamespaceExportDeclaration */;
+        return node.kind === 262 /* NamespaceExportDeclaration */;
     }
     ts.isNamespaceExportDeclaration = isNamespaceExportDeclaration;
     function isImportEqualsDeclaration(node) {
-        return node.kind === 261 /* ImportEqualsDeclaration */;
+        return node.kind === 263 /* ImportEqualsDeclaration */;
     }
     ts.isImportEqualsDeclaration = isImportEqualsDeclaration;
     function isImportDeclaration(node) {
-        return node.kind === 262 /* ImportDeclaration */;
+        return node.kind === 264 /* ImportDeclaration */;
     }
     ts.isImportDeclaration = isImportDeclaration;
     function isImportClause(node) {
-        return node.kind === 263 /* ImportClause */;
+        return node.kind === 265 /* ImportClause */;
     }
     ts.isImportClause = isImportClause;
     function isNamespaceImport(node) {
-        return node.kind === 264 /* NamespaceImport */;
+        return node.kind === 266 /* NamespaceImport */;
     }
     ts.isNamespaceImport = isNamespaceImport;
     function isNamespaceExport(node) {
-        return node.kind === 270 /* NamespaceExport */;
+        return node.kind === 272 /* NamespaceExport */;
     }
     ts.isNamespaceExport = isNamespaceExport;
     function isNamedImports(node) {
-        return node.kind === 265 /* NamedImports */;
+        return node.kind === 267 /* NamedImports */;
     }
     ts.isNamedImports = isNamedImports;
     function isImportSpecifier(node) {
-        return node.kind === 266 /* ImportSpecifier */;
+        return node.kind === 268 /* ImportSpecifier */;
     }
     ts.isImportSpecifier = isImportSpecifier;
     function isExportAssignment(node) {
-        return node.kind === 267 /* ExportAssignment */;
+        return node.kind === 269 /* ExportAssignment */;
     }
     ts.isExportAssignment = isExportAssignment;
     function isExportDeclaration(node) {
-        return node.kind === 268 /* ExportDeclaration */;
+        return node.kind === 270 /* ExportDeclaration */;
     }
     ts.isExportDeclaration = isExportDeclaration;
     function isNamedExports(node) {
-        return node.kind === 269 /* NamedExports */;
+        return node.kind === 271 /* NamedExports */;
     }
     ts.isNamedExports = isNamedExports;
     function isExportSpecifier(node) {
-        return node.kind === 271 /* ExportSpecifier */;
+        return node.kind === 273 /* ExportSpecifier */;
     }
     ts.isExportSpecifier = isExportSpecifier;
     function isMissingDeclaration(node) {
-        return node.kind === 272 /* MissingDeclaration */;
+        return node.kind === 274 /* MissingDeclaration */;
     }
     ts.isMissingDeclaration = isMissingDeclaration;
     function isNotEmittedStatement(node) {
-        return node.kind === 339 /* NotEmittedStatement */;
+        return node.kind === 344 /* NotEmittedStatement */;
     }
     ts.isNotEmittedStatement = isNotEmittedStatement;
     /* @internal */
     function isSyntheticReference(node) {
-        return node.kind === 344 /* SyntheticReferenceExpression */;
+        return node.kind === 349 /* SyntheticReferenceExpression */;
     }
     ts.isSyntheticReference = isSyntheticReference;
     /* @internal */
     function isMergeDeclarationMarker(node) {
-        return node.kind === 342 /* MergeDeclarationMarker */;
+        return node.kind === 347 /* MergeDeclarationMarker */;
     }
     ts.isMergeDeclarationMarker = isMergeDeclarationMarker;
     /* @internal */
     function isEndOfDeclarationMarker(node) {
-        return node.kind === 343 /* EndOfDeclarationMarker */;
+        return node.kind === 348 /* EndOfDeclarationMarker */;
     }
     ts.isEndOfDeclarationMarker = isEndOfDeclarationMarker;
     // Module References
     function isExternalModuleReference(node) {
-        return node.kind === 273 /* ExternalModuleReference */;
+        return node.kind === 275 /* ExternalModuleReference */;
     }
     ts.isExternalModuleReference = isExternalModuleReference;
     // JSX
     function isJsxElement(node) {
-        return node.kind === 274 /* JsxElement */;
+        return node.kind === 276 /* JsxElement */;
     }
     ts.isJsxElement = isJsxElement;
     function isJsxSelfClosingElement(node) {
-        return node.kind === 275 /* JsxSelfClosingElement */;
+        return node.kind === 277 /* JsxSelfClosingElement */;
     }
     ts.isJsxSelfClosingElement = isJsxSelfClosingElement;
     function isJsxOpeningElement(node) {
-        return node.kind === 276 /* JsxOpeningElement */;
+        return node.kind === 278 /* JsxOpeningElement */;
     }
     ts.isJsxOpeningElement = isJsxOpeningElement;
     function isJsxClosingElement(node) {
-        return node.kind === 277 /* JsxClosingElement */;
+        return node.kind === 279 /* JsxClosingElement */;
     }
     ts.isJsxClosingElement = isJsxClosingElement;
     function isJsxFragment(node) {
-        return node.kind === 278 /* JsxFragment */;
+        return node.kind === 280 /* JsxFragment */;
     }
     ts.isJsxFragment = isJsxFragment;
     function isJsxOpeningFragment(node) {
-        return node.kind === 279 /* JsxOpeningFragment */;
+        return node.kind === 281 /* JsxOpeningFragment */;
     }
     ts.isJsxOpeningFragment = isJsxOpeningFragment;
     function isJsxClosingFragment(node) {
-        return node.kind === 280 /* JsxClosingFragment */;
+        return node.kind === 282 /* JsxClosingFragment */;
     }
     ts.isJsxClosingFragment = isJsxClosingFragment;
     function isJsxAttribute(node) {
-        return node.kind === 281 /* JsxAttribute */;
+        return node.kind === 283 /* JsxAttribute */;
     }
     ts.isJsxAttribute = isJsxAttribute;
     function isJsxAttributes(node) {
-        return node.kind === 282 /* JsxAttributes */;
+        return node.kind === 284 /* JsxAttributes */;
     }
     ts.isJsxAttributes = isJsxAttributes;
     function isJsxSpreadAttribute(node) {
-        return node.kind === 283 /* JsxSpreadAttribute */;
+        return node.kind === 285 /* JsxSpreadAttribute */;
     }
     ts.isJsxSpreadAttribute = isJsxSpreadAttribute;
     function isJsxExpression(node) {
-        return node.kind === 284 /* JsxExpression */;
+        return node.kind === 286 /* JsxExpression */;
     }
     ts.isJsxExpression = isJsxExpression;
     // Clauses
     function isCaseClause(node) {
-        return node.kind === 285 /* CaseClause */;
+        return node.kind === 287 /* CaseClause */;
     }
     ts.isCaseClause = isCaseClause;
     function isDefaultClause(node) {
-        return node.kind === 286 /* DefaultClause */;
+        return node.kind === 288 /* DefaultClause */;
     }
     ts.isDefaultClause = isDefaultClause;
     function isHeritageClause(node) {
-        return node.kind === 287 /* HeritageClause */;
+        return node.kind === 289 /* HeritageClause */;
     }
     ts.isHeritageClause = isHeritageClause;
     function isCatchClause(node) {
-        return node.kind === 288 /* CatchClause */;
+        return node.kind === 290 /* CatchClause */;
     }
     ts.isCatchClause = isCatchClause;
     // Property assignments
     function isPropertyAssignment(node) {
-        return node.kind === 289 /* PropertyAssignment */;
+        return node.kind === 291 /* PropertyAssignment */;
     }
     ts.isPropertyAssignment = isPropertyAssignment;
     function isShorthandPropertyAssignment(node) {
-        return node.kind === 290 /* ShorthandPropertyAssignment */;
+        return node.kind === 292 /* ShorthandPropertyAssignment */;
     }
     ts.isShorthandPropertyAssignment = isShorthandPropertyAssignment;
     function isSpreadAssignment(node) {
-        return node.kind === 291 /* SpreadAssignment */;
+        return node.kind === 293 /* SpreadAssignment */;
     }
     ts.isSpreadAssignment = isSpreadAssignment;
     // Enum
     function isEnumMember(node) {
-        return node.kind === 292 /* EnumMember */;
+        return node.kind === 294 /* EnumMember */;
     }
     ts.isEnumMember = isEnumMember;
     // Unparsed
     // TODO(rbuckton): isUnparsedPrologue
     function isUnparsedPrepend(node) {
-        return node.kind === 294 /* UnparsedPrepend */;
+        return node.kind === 296 /* UnparsedPrepend */;
     }
     ts.isUnparsedPrepend = isUnparsedPrepend;
     // TODO(rbuckton): isUnparsedText
@@ -27631,164 +28233,176 @@
     // TODO(rbuckton): isUnparsedSyntheticReference
     // Top-level nodes
     function isSourceFile(node) {
-        return node.kind === 298 /* SourceFile */;
+        return node.kind === 300 /* SourceFile */;
     }
     ts.isSourceFile = isSourceFile;
     function isBundle(node) {
-        return node.kind === 299 /* Bundle */;
+        return node.kind === 301 /* Bundle */;
     }
     ts.isBundle = isBundle;
     function isUnparsedSource(node) {
-        return node.kind === 300 /* UnparsedSource */;
+        return node.kind === 302 /* UnparsedSource */;
     }
     ts.isUnparsedSource = isUnparsedSource;
     // TODO(rbuckton): isInputFiles
     // JSDoc Elements
     function isJSDocTypeExpression(node) {
-        return node.kind === 302 /* JSDocTypeExpression */;
+        return node.kind === 304 /* JSDocTypeExpression */;
     }
     ts.isJSDocTypeExpression = isJSDocTypeExpression;
     function isJSDocNameReference(node) {
-        return node.kind === 303 /* JSDocNameReference */;
+        return node.kind === 305 /* JSDocNameReference */;
     }
     ts.isJSDocNameReference = isJSDocNameReference;
+    function isJSDocMemberName(node) {
+        return node.kind === 306 /* JSDocMemberName */;
+    }
+    ts.isJSDocMemberName = isJSDocMemberName;
     function isJSDocLink(node) {
-        return node.kind === 316 /* JSDocLink */;
+        return node.kind === 319 /* JSDocLink */;
     }
     ts.isJSDocLink = isJSDocLink;
+    function isJSDocLinkCode(node) {
+        return node.kind === 320 /* JSDocLinkCode */;
+    }
+    ts.isJSDocLinkCode = isJSDocLinkCode;
+    function isJSDocLinkPlain(node) {
+        return node.kind === 321 /* JSDocLinkPlain */;
+    }
+    ts.isJSDocLinkPlain = isJSDocLinkPlain;
     function isJSDocAllType(node) {
-        return node.kind === 304 /* JSDocAllType */;
+        return node.kind === 307 /* JSDocAllType */;
     }
     ts.isJSDocAllType = isJSDocAllType;
     function isJSDocUnknownType(node) {
-        return node.kind === 305 /* JSDocUnknownType */;
+        return node.kind === 308 /* JSDocUnknownType */;
     }
     ts.isJSDocUnknownType = isJSDocUnknownType;
     function isJSDocNullableType(node) {
-        return node.kind === 306 /* JSDocNullableType */;
+        return node.kind === 309 /* JSDocNullableType */;
     }
     ts.isJSDocNullableType = isJSDocNullableType;
     function isJSDocNonNullableType(node) {
-        return node.kind === 307 /* JSDocNonNullableType */;
+        return node.kind === 310 /* JSDocNonNullableType */;
     }
     ts.isJSDocNonNullableType = isJSDocNonNullableType;
     function isJSDocOptionalType(node) {
-        return node.kind === 308 /* JSDocOptionalType */;
+        return node.kind === 311 /* JSDocOptionalType */;
     }
     ts.isJSDocOptionalType = isJSDocOptionalType;
     function isJSDocFunctionType(node) {
-        return node.kind === 309 /* JSDocFunctionType */;
+        return node.kind === 312 /* JSDocFunctionType */;
     }
     ts.isJSDocFunctionType = isJSDocFunctionType;
     function isJSDocVariadicType(node) {
-        return node.kind === 310 /* JSDocVariadicType */;
+        return node.kind === 313 /* JSDocVariadicType */;
     }
     ts.isJSDocVariadicType = isJSDocVariadicType;
     function isJSDocNamepathType(node) {
-        return node.kind === 311 /* JSDocNamepathType */;
+        return node.kind === 314 /* JSDocNamepathType */;
     }
     ts.isJSDocNamepathType = isJSDocNamepathType;
     function isJSDoc(node) {
-        return node.kind === 312 /* JSDocComment */;
+        return node.kind === 315 /* JSDocComment */;
     }
     ts.isJSDoc = isJSDoc;
     function isJSDocTypeLiteral(node) {
-        return node.kind === 314 /* JSDocTypeLiteral */;
+        return node.kind === 317 /* JSDocTypeLiteral */;
     }
     ts.isJSDocTypeLiteral = isJSDocTypeLiteral;
     function isJSDocSignature(node) {
-        return node.kind === 315 /* JSDocSignature */;
+        return node.kind === 318 /* JSDocSignature */;
     }
     ts.isJSDocSignature = isJSDocSignature;
     // JSDoc Tags
     function isJSDocAugmentsTag(node) {
-        return node.kind === 318 /* JSDocAugmentsTag */;
+        return node.kind === 323 /* JSDocAugmentsTag */;
     }
     ts.isJSDocAugmentsTag = isJSDocAugmentsTag;
     function isJSDocAuthorTag(node) {
-        return node.kind === 320 /* JSDocAuthorTag */;
+        return node.kind === 325 /* JSDocAuthorTag */;
     }
     ts.isJSDocAuthorTag = isJSDocAuthorTag;
     function isJSDocClassTag(node) {
-        return node.kind === 322 /* JSDocClassTag */;
+        return node.kind === 327 /* JSDocClassTag */;
     }
     ts.isJSDocClassTag = isJSDocClassTag;
     function isJSDocCallbackTag(node) {
-        return node.kind === 328 /* JSDocCallbackTag */;
+        return node.kind === 333 /* JSDocCallbackTag */;
     }
     ts.isJSDocCallbackTag = isJSDocCallbackTag;
     function isJSDocPublicTag(node) {
-        return node.kind === 323 /* JSDocPublicTag */;
+        return node.kind === 328 /* JSDocPublicTag */;
     }
     ts.isJSDocPublicTag = isJSDocPublicTag;
     function isJSDocPrivateTag(node) {
-        return node.kind === 324 /* JSDocPrivateTag */;
+        return node.kind === 329 /* JSDocPrivateTag */;
     }
     ts.isJSDocPrivateTag = isJSDocPrivateTag;
     function isJSDocProtectedTag(node) {
-        return node.kind === 325 /* JSDocProtectedTag */;
+        return node.kind === 330 /* JSDocProtectedTag */;
     }
     ts.isJSDocProtectedTag = isJSDocProtectedTag;
     function isJSDocReadonlyTag(node) {
-        return node.kind === 326 /* JSDocReadonlyTag */;
+        return node.kind === 331 /* JSDocReadonlyTag */;
     }
     ts.isJSDocReadonlyTag = isJSDocReadonlyTag;
     function isJSDocOverrideTag(node) {
-        return node.kind === 327 /* JSDocOverrideTag */;
+        return node.kind === 332 /* JSDocOverrideTag */;
     }
     ts.isJSDocOverrideTag = isJSDocOverrideTag;
     function isJSDocDeprecatedTag(node) {
-        return node.kind === 321 /* JSDocDeprecatedTag */;
+        return node.kind === 326 /* JSDocDeprecatedTag */;
     }
     ts.isJSDocDeprecatedTag = isJSDocDeprecatedTag;
     function isJSDocSeeTag(node) {
-        return node.kind === 336 /* JSDocSeeTag */;
+        return node.kind === 341 /* JSDocSeeTag */;
     }
     ts.isJSDocSeeTag = isJSDocSeeTag;
     function isJSDocEnumTag(node) {
-        return node.kind === 329 /* JSDocEnumTag */;
+        return node.kind === 334 /* JSDocEnumTag */;
     }
     ts.isJSDocEnumTag = isJSDocEnumTag;
     function isJSDocParameterTag(node) {
-        return node.kind === 330 /* JSDocParameterTag */;
+        return node.kind === 335 /* JSDocParameterTag */;
     }
     ts.isJSDocParameterTag = isJSDocParameterTag;
     function isJSDocReturnTag(node) {
-        return node.kind === 331 /* JSDocReturnTag */;
+        return node.kind === 336 /* JSDocReturnTag */;
     }
     ts.isJSDocReturnTag = isJSDocReturnTag;
     function isJSDocThisTag(node) {
-        return node.kind === 332 /* JSDocThisTag */;
+        return node.kind === 337 /* JSDocThisTag */;
     }
     ts.isJSDocThisTag = isJSDocThisTag;
     function isJSDocTypeTag(node) {
-        return node.kind === 333 /* JSDocTypeTag */;
+        return node.kind === 338 /* JSDocTypeTag */;
     }
     ts.isJSDocTypeTag = isJSDocTypeTag;
     function isJSDocTemplateTag(node) {
-        return node.kind === 334 /* JSDocTemplateTag */;
+        return node.kind === 339 /* JSDocTemplateTag */;
     }
     ts.isJSDocTemplateTag = isJSDocTemplateTag;
     function isJSDocTypedefTag(node) {
-        return node.kind === 335 /* JSDocTypedefTag */;
+        return node.kind === 340 /* JSDocTypedefTag */;
     }
     ts.isJSDocTypedefTag = isJSDocTypedefTag;
     function isJSDocUnknownTag(node) {
-        return node.kind === 317 /* JSDocTag */;
+        return node.kind === 322 /* JSDocTag */;
     }
     ts.isJSDocUnknownTag = isJSDocUnknownTag;
     function isJSDocPropertyTag(node) {
-        return node.kind === 337 /* JSDocPropertyTag */;
+        return node.kind === 342 /* JSDocPropertyTag */;
     }
     ts.isJSDocPropertyTag = isJSDocPropertyTag;
     function isJSDocImplementsTag(node) {
-        return node.kind === 319 /* JSDocImplementsTag */;
+        return node.kind === 324 /* JSDocImplementsTag */;
     }
     ts.isJSDocImplementsTag = isJSDocImplementsTag;
     // Synthesized list
     /* @internal */
     function isSyntaxList(n) {
-        return n.kind === 338 /* SyntaxList */;
+        return n.kind === 343 /* SyntaxList */;
     }
     ts.isSyntaxList = isSyntaxList;
 })(ts || (ts = {}));
@@ -27907,7 +28521,7 @@
     ts.createForOfBindingStatement = createForOfBindingStatement;
     function insertLeadingStatement(factory, dest, source) {
         if (ts.isBlock(dest)) {
-            return factory.updateBlock(dest, ts.setTextRange(factory.createNodeArray(__spreadArray([source], dest.statements)), dest.statements));
+            return factory.updateBlock(dest, ts.setTextRange(factory.createNodeArray(__spreadArray([source], dest.statements, true)), dest.statements));
         }
         else {
             return factory.createBlock(factory.createNodeArray([dest, source]), /*multiLine*/ true);
@@ -27987,19 +28601,74 @@
             ts.Debug.failBadSyntaxKind(property.name, "Private identifiers are not allowed in object literals.");
         }
         switch (property.kind) {
-            case 168 /* GetAccessor */:
-            case 169 /* SetAccessor */:
+            case 170 /* GetAccessor */:
+            case 171 /* SetAccessor */:
                 return createExpressionForAccessorDeclaration(factory, node.properties, property, receiver, !!node.multiLine);
-            case 289 /* PropertyAssignment */:
+            case 291 /* PropertyAssignment */:
                 return createExpressionForPropertyAssignment(factory, property, receiver);
-            case 290 /* ShorthandPropertyAssignment */:
+            case 292 /* ShorthandPropertyAssignment */:
                 return createExpressionForShorthandPropertyAssignment(factory, property, receiver);
-            case 166 /* MethodDeclaration */:
+            case 167 /* MethodDeclaration */:
                 return createExpressionForMethodDeclaration(factory, property, receiver);
         }
     }
     ts.createExpressionForObjectLiteralElementLike = createExpressionForObjectLiteralElementLike;
     /**
+     * Expand the read and increment/decrement operations a pre- or post-increment or pre- or post-decrement expression.
+     *
+     * ```ts
+     * // input
+     * <expression>++
+     * // output (if result is not discarded)
+     * var <temp>;
+     * (<temp> = <expression>, <resultVariable> = <temp>++, <temp>)
+     * // output (if result is discarded)
+     * var <temp>;
+     * (<temp> = <expression>, <temp>++, <temp>)
+     *
+     * // input
+     * ++<expression>
+     * // output (if result is not discarded)
+     * var <temp>;
+     * (<temp> = <expression>, <resultVariable> = ++<temp>)
+     * // output (if result is discarded)
+     * var <temp>;
+     * (<temp> = <expression>, ++<temp>)
+     * ```
+     *
+     * It is up to the caller to supply a temporary variable for `<resultVariable>` if one is needed.
+     * The temporary variable `<temp>` is injected so that `++` and `--` work uniformly with `number` and `bigint`.
+     * The result of the expression is always the final result of incrementing or decrementing the expression, so that it can be used for storage.
+     *
+     * @param factory {@link NodeFactory} used to create the expanded representation.
+     * @param node The original prefix or postfix unary node.
+     * @param expression The expression to use as the value to increment or decrement
+     * @param resultVariable A temporary variable in which to store the result. Pass `undefined` if the result is discarded, or if the value of `<temp>` is the expected result.
+     */
+    function expandPreOrPostfixIncrementOrDecrementExpression(factory, node, expression, recordTempVariable, resultVariable) {
+        var operator = node.operator;
+        ts.Debug.assert(operator === 45 /* PlusPlusToken */ || operator === 46 /* MinusMinusToken */, "Expected 'node' to be a pre- or post-increment or pre- or post-decrement expression");
+        var temp = factory.createTempVariable(recordTempVariable);
+        expression = factory.createAssignment(temp, expression);
+        ts.setTextRange(expression, node.operand);
+        var operation = ts.isPrefixUnaryExpression(node) ?
+            factory.createPrefixUnaryExpression(operator, temp) :
+            factory.createPostfixUnaryExpression(temp, operator);
+        ts.setTextRange(operation, node);
+        if (resultVariable) {
+            operation = factory.createAssignment(resultVariable, operation);
+            ts.setTextRange(operation, node);
+        }
+        expression = factory.createComma(expression, operation);
+        ts.setTextRange(expression, node);
+        if (ts.isPostfixUnaryExpression(node)) {
+            expression = factory.createComma(expression, temp);
+            ts.setTextRange(expression, node);
+        }
+        return expression;
+    }
+    ts.expandPreOrPostfixIncrementOrDecrementExpression = expandPreOrPostfixIncrementOrDecrementExpression;
+    /**
      * Gets whether an identifier should only be referred to by its internal name.
      */
     function isInternalName(node) {
@@ -28047,21 +28716,21 @@
     }
     ts.startsWithUseStrict = startsWithUseStrict;
     function isCommaSequence(node) {
-        return node.kind === 217 /* BinaryExpression */ && node.operatorToken.kind === 27 /* CommaToken */ ||
-            node.kind === 341 /* CommaListExpression */;
+        return node.kind === 219 /* BinaryExpression */ && node.operatorToken.kind === 27 /* CommaToken */ ||
+            node.kind === 346 /* CommaListExpression */;
     }
     ts.isCommaSequence = isCommaSequence;
     function isOuterExpression(node, kinds) {
         if (kinds === void 0) { kinds = 15 /* All */; }
         switch (node.kind) {
-            case 208 /* ParenthesizedExpression */:
+            case 210 /* ParenthesizedExpression */:
                 return (kinds & 1 /* Parentheses */) !== 0;
-            case 207 /* TypeAssertionExpression */:
-            case 225 /* AsExpression */:
+            case 209 /* TypeAssertionExpression */:
+            case 227 /* AsExpression */:
                 return (kinds & 2 /* TypeAssertions */) !== 0;
-            case 226 /* NonNullExpression */:
+            case 228 /* NonNullExpression */:
                 return (kinds & 4 /* NonNullAssertions */) !== 0;
-            case 340 /* PartiallyEmittedExpression */:
+            case 345 /* PartiallyEmittedExpression */:
                 return (kinds & 8 /* PartiallyEmittedExpressions */) !== 0;
         }
         return false;
@@ -28182,10 +28851,10 @@
             var name = namespaceDeclaration.name;
             return ts.isGeneratedIdentifier(name) ? name : factory.createIdentifier(ts.getSourceTextOfNodeFromSourceFile(sourceFile, name) || ts.idText(name));
         }
-        if (node.kind === 262 /* ImportDeclaration */ && node.importClause) {
+        if (node.kind === 264 /* ImportDeclaration */ && node.importClause) {
             return factory.getGeneratedNameForNode(node);
         }
-        if (node.kind === 268 /* ExportDeclaration */ && node.moduleSpecifier) {
+        if (node.kind === 270 /* ExportDeclaration */ && node.moduleSpecifier) {
             return factory.getGeneratedNameForNode(node);
         }
         return undefined;
@@ -28304,7 +28973,7 @@
         }
         if (ts.isObjectLiteralElementLike(bindingElement)) {
             switch (bindingElement.kind) {
-                case 289 /* PropertyAssignment */:
+                case 291 /* PropertyAssignment */:
                     // `b` in `({ a: b } = ...)`
                     // `b` in `({ a: b = 1 } = ...)`
                     // `{b}` in `({ a: {b} } = ...)`
@@ -28316,11 +28985,11 @@
                     // `b[0]` in `({ a: b[0] } = ...)`
                     // `b[0]` in `({ a: b[0] = 1 } = ...)`
                     return getTargetOfBindingOrAssignmentElement(bindingElement.initializer);
-                case 290 /* ShorthandPropertyAssignment */:
+                case 292 /* ShorthandPropertyAssignment */:
                     // `a` in `({ a } = ...)`
                     // `a` in `({ a = 1 } = ...)`
                     return bindingElement.name;
-                case 291 /* SpreadAssignment */:
+                case 293 /* SpreadAssignment */:
                     // `a` in `({ ...a } = ...)`
                     return getTargetOfBindingOrAssignmentElement(bindingElement.expression);
             }
@@ -28352,12 +29021,12 @@
      */
     function getRestIndicatorOfBindingOrAssignmentElement(bindingElement) {
         switch (bindingElement.kind) {
-            case 161 /* Parameter */:
-            case 199 /* BindingElement */:
+            case 162 /* Parameter */:
+            case 201 /* BindingElement */:
                 // `...` in `let [...a] = ...`
                 return bindingElement.dotDotDotToken;
-            case 221 /* SpreadElement */:
-            case 291 /* SpreadAssignment */:
+            case 223 /* SpreadElement */:
+            case 293 /* SpreadAssignment */:
                 // `...` in `[...a] = ...`
                 return bindingElement;
         }
@@ -28375,7 +29044,7 @@
     ts.getPropertyNameOfBindingOrAssignmentElement = getPropertyNameOfBindingOrAssignmentElement;
     function tryGetPropertyNameOfBindingOrAssignmentElement(bindingElement) {
         switch (bindingElement.kind) {
-            case 199 /* BindingElement */:
+            case 201 /* BindingElement */:
                 // `a` in `let { a: b } = ...`
                 // `[a]` in `let { [a]: b } = ...`
                 // `"a"` in `let { "a": b } = ...`
@@ -28390,7 +29059,7 @@
                         : propertyName;
                 }
                 break;
-            case 289 /* PropertyAssignment */:
+            case 291 /* PropertyAssignment */:
                 // `a` in `({ a: b } = ...)`
                 // `[a]` in `({ [a]: b } = ...)`
                 // `"a"` in `({ "a": b } = ...)`
@@ -28405,7 +29074,7 @@
                         : propertyName;
                 }
                 break;
-            case 291 /* SpreadAssignment */:
+            case 293 /* SpreadAssignment */:
                 // `a` in `({ ...a } = ...)`
                 if (bindingElement.name && ts.isPrivateIdentifier(bindingElement.name)) {
                     return ts.Debug.failBadSyntaxKind(bindingElement.name);
@@ -28428,13 +29097,13 @@
      */
     function getElementsOfBindingOrAssignmentPattern(name) {
         switch (name.kind) {
-            case 197 /* ObjectBindingPattern */:
-            case 198 /* ArrayBindingPattern */:
-            case 200 /* ArrayLiteralExpression */:
+            case 199 /* ObjectBindingPattern */:
+            case 200 /* ArrayBindingPattern */:
+            case 202 /* ArrayLiteralExpression */:
                 // `a` in `{a}`
                 // `a` in `[a]`
                 return name.elements;
-            case 201 /* ObjectLiteralExpression */:
+            case 203 /* ObjectLiteralExpression */:
                 // `a` in `{a}`
                 return name.properties;
         }
@@ -28455,29 +29124,29 @@
     ts.getJSDocTypeAliasName = getJSDocTypeAliasName;
     function canHaveModifiers(node) {
         var kind = node.kind;
-        return kind === 161 /* Parameter */
-            || kind === 163 /* PropertySignature */
-            || kind === 164 /* PropertyDeclaration */
-            || kind === 165 /* MethodSignature */
-            || kind === 166 /* MethodDeclaration */
-            || kind === 167 /* Constructor */
-            || kind === 168 /* GetAccessor */
-            || kind === 169 /* SetAccessor */
-            || kind === 172 /* IndexSignature */
-            || kind === 209 /* FunctionExpression */
-            || kind === 210 /* ArrowFunction */
-            || kind === 222 /* ClassExpression */
-            || kind === 233 /* VariableStatement */
-            || kind === 252 /* FunctionDeclaration */
-            || kind === 253 /* ClassDeclaration */
-            || kind === 254 /* InterfaceDeclaration */
-            || kind === 255 /* TypeAliasDeclaration */
-            || kind === 256 /* EnumDeclaration */
-            || kind === 257 /* ModuleDeclaration */
-            || kind === 261 /* ImportEqualsDeclaration */
-            || kind === 262 /* ImportDeclaration */
-            || kind === 267 /* ExportAssignment */
-            || kind === 268 /* ExportDeclaration */;
+        return kind === 162 /* Parameter */
+            || kind === 164 /* PropertySignature */
+            || kind === 165 /* PropertyDeclaration */
+            || kind === 166 /* MethodSignature */
+            || kind === 167 /* MethodDeclaration */
+            || kind === 169 /* Constructor */
+            || kind === 170 /* GetAccessor */
+            || kind === 171 /* SetAccessor */
+            || kind === 174 /* IndexSignature */
+            || kind === 211 /* FunctionExpression */
+            || kind === 212 /* ArrowFunction */
+            || kind === 224 /* ClassExpression */
+            || kind === 235 /* VariableStatement */
+            || kind === 254 /* FunctionDeclaration */
+            || kind === 255 /* ClassDeclaration */
+            || kind === 256 /* InterfaceDeclaration */
+            || kind === 257 /* TypeAliasDeclaration */
+            || kind === 258 /* EnumDeclaration */
+            || kind === 259 /* ModuleDeclaration */
+            || kind === 263 /* ImportEqualsDeclaration */
+            || kind === 264 /* ImportDeclaration */
+            || kind === 269 /* ExportAssignment */
+            || kind === 270 /* ExportDeclaration */;
     }
     ts.canHaveModifiers = canHaveModifiers;
     ts.isTypeNodeOrTypeParameterDeclaration = ts.or(ts.isTypeNode, ts.isTypeParameterDeclaration);
@@ -28488,9 +29157,9 @@
     ts.isModuleName = ts.or(ts.isIdentifier, ts.isStringLiteral);
     function isLiteralTypeLikeExpression(node) {
         var kind = node.kind;
-        return kind === 103 /* NullKeyword */
-            || kind === 109 /* TrueKeyword */
-            || kind === 94 /* FalseKeyword */
+        return kind === 104 /* NullKeyword */
+            || kind === 110 /* TrueKeyword */
+            || kind === 95 /* FalseKeyword */
             || ts.isLiteralExpression(node)
             || ts.isPrefixUnaryExpression(node);
     }
@@ -28529,8 +29198,8 @@
             || kind === 32 /* LessThanEqualsToken */
             || kind === 31 /* GreaterThanToken */
             || kind === 33 /* GreaterThanEqualsToken */
-            || kind === 101 /* InstanceOfKeyword */
-            || kind === 100 /* InKeyword */;
+            || kind === 102 /* InstanceOfKeyword */
+            || kind === 101 /* InKeyword */;
     }
     function isRelationalOperatorOrHigher(kind) {
         return isRelationalOperator(kind)
@@ -28824,19 +29493,19 @@
      * that they appear in the source code. The language service depends on this property to locate nodes by position.
      */
     function forEachChild(node, cbNode, cbNodes) {
-        if (!node || node.kind <= 157 /* LastToken */) {
+        if (!node || node.kind <= 158 /* LastToken */) {
             return;
         }
         switch (node.kind) {
-            case 158 /* QualifiedName */:
+            case 159 /* QualifiedName */:
                 return visitNode(cbNode, node.left) ||
                     visitNode(cbNode, node.right);
-            case 160 /* TypeParameter */:
+            case 161 /* TypeParameter */:
                 return visitNode(cbNode, node.name) ||
                     visitNode(cbNode, node.constraint) ||
                     visitNode(cbNode, node.default) ||
                     visitNode(cbNode, node.expression);
-            case 290 /* ShorthandPropertyAssignment */:
+            case 292 /* ShorthandPropertyAssignment */:
                 return visitNodes(cbNode, cbNodes, node.decorators) ||
                     visitNodes(cbNode, cbNodes, node.modifiers) ||
                     visitNode(cbNode, node.name) ||
@@ -28844,9 +29513,9 @@
                     visitNode(cbNode, node.exclamationToken) ||
                     visitNode(cbNode, node.equalsToken) ||
                     visitNode(cbNode, node.objectAssignmentInitializer);
-            case 291 /* SpreadAssignment */:
+            case 293 /* SpreadAssignment */:
                 return visitNode(cbNode, node.expression);
-            case 161 /* Parameter */:
+            case 162 /* Parameter */:
                 return visitNodes(cbNode, cbNodes, node.decorators) ||
                     visitNodes(cbNode, cbNodes, node.modifiers) ||
                     visitNode(cbNode, node.dotDotDotToken) ||
@@ -28854,7 +29523,7 @@
                     visitNode(cbNode, node.questionToken) ||
                     visitNode(cbNode, node.type) ||
                     visitNode(cbNode, node.initializer);
-            case 164 /* PropertyDeclaration */:
+            case 165 /* PropertyDeclaration */:
                 return visitNodes(cbNode, cbNodes, node.decorators) ||
                     visitNodes(cbNode, cbNodes, node.modifiers) ||
                     visitNode(cbNode, node.name) ||
@@ -28862,51 +29531,51 @@
                     visitNode(cbNode, node.exclamationToken) ||
                     visitNode(cbNode, node.type) ||
                     visitNode(cbNode, node.initializer);
-            case 163 /* PropertySignature */:
+            case 164 /* PropertySignature */:
                 return visitNodes(cbNode, cbNodes, node.decorators) ||
                     visitNodes(cbNode, cbNodes, node.modifiers) ||
                     visitNode(cbNode, node.name) ||
                     visitNode(cbNode, node.questionToken) ||
                     visitNode(cbNode, node.type) ||
                     visitNode(cbNode, node.initializer);
-            case 289 /* PropertyAssignment */:
+            case 291 /* PropertyAssignment */:
                 return visitNodes(cbNode, cbNodes, node.decorators) ||
                     visitNodes(cbNode, cbNodes, node.modifiers) ||
                     visitNode(cbNode, node.name) ||
                     visitNode(cbNode, node.questionToken) ||
                     visitNode(cbNode, node.initializer);
-            case 250 /* VariableDeclaration */:
+            case 252 /* VariableDeclaration */:
                 return visitNodes(cbNode, cbNodes, node.decorators) ||
                     visitNodes(cbNode, cbNodes, node.modifiers) ||
                     visitNode(cbNode, node.name) ||
                     visitNode(cbNode, node.exclamationToken) ||
                     visitNode(cbNode, node.type) ||
                     visitNode(cbNode, node.initializer);
-            case 199 /* BindingElement */:
+            case 201 /* BindingElement */:
                 return visitNodes(cbNode, cbNodes, node.decorators) ||
                     visitNodes(cbNode, cbNodes, node.modifiers) ||
                     visitNode(cbNode, node.dotDotDotToken) ||
                     visitNode(cbNode, node.propertyName) ||
                     visitNode(cbNode, node.name) ||
                     visitNode(cbNode, node.initializer);
-            case 175 /* FunctionType */:
-            case 176 /* ConstructorType */:
-            case 170 /* CallSignature */:
-            case 171 /* ConstructSignature */:
-            case 172 /* IndexSignature */:
+            case 177 /* FunctionType */:
+            case 178 /* ConstructorType */:
+            case 172 /* CallSignature */:
+            case 173 /* ConstructSignature */:
+            case 174 /* IndexSignature */:
                 return visitNodes(cbNode, cbNodes, node.decorators) ||
                     visitNodes(cbNode, cbNodes, node.modifiers) ||
                     visitNodes(cbNode, cbNodes, node.typeParameters) ||
                     visitNodes(cbNode, cbNodes, node.parameters) ||
                     visitNode(cbNode, node.type);
-            case 166 /* MethodDeclaration */:
-            case 165 /* MethodSignature */:
-            case 167 /* Constructor */:
-            case 168 /* GetAccessor */:
-            case 169 /* SetAccessor */:
-            case 209 /* FunctionExpression */:
-            case 252 /* FunctionDeclaration */:
-            case 210 /* ArrowFunction */:
+            case 167 /* MethodDeclaration */:
+            case 166 /* MethodSignature */:
+            case 169 /* Constructor */:
+            case 170 /* GetAccessor */:
+            case 171 /* SetAccessor */:
+            case 211 /* FunctionExpression */:
+            case 254 /* FunctionDeclaration */:
+            case 212 /* ArrowFunction */:
                 return visitNodes(cbNode, cbNodes, node.decorators) ||
                     visitNodes(cbNode, cbNodes, node.modifiers) ||
                     visitNode(cbNode, node.asteriskToken) ||
@@ -28918,326 +29587,333 @@
                     visitNode(cbNode, node.type) ||
                     visitNode(cbNode, node.equalsGreaterThanToken) ||
                     visitNode(cbNode, node.body);
-            case 174 /* TypeReference */:
+            case 168 /* ClassStaticBlockDeclaration */:
+                return visitNodes(cbNode, cbNodes, node.decorators) ||
+                    visitNodes(cbNode, cbNodes, node.modifiers) ||
+                    visitNode(cbNode, node.body);
+            case 176 /* TypeReference */:
                 return visitNode(cbNode, node.typeName) ||
                     visitNodes(cbNode, cbNodes, node.typeArguments);
-            case 173 /* TypePredicate */:
+            case 175 /* TypePredicate */:
                 return visitNode(cbNode, node.assertsModifier) ||
                     visitNode(cbNode, node.parameterName) ||
                     visitNode(cbNode, node.type);
-            case 177 /* TypeQuery */:
+            case 179 /* TypeQuery */:
                 return visitNode(cbNode, node.exprName);
-            case 178 /* TypeLiteral */:
+            case 180 /* TypeLiteral */:
                 return visitNodes(cbNode, cbNodes, node.members);
-            case 179 /* ArrayType */:
+            case 181 /* ArrayType */:
                 return visitNode(cbNode, node.elementType);
-            case 180 /* TupleType */:
+            case 182 /* TupleType */:
                 return visitNodes(cbNode, cbNodes, node.elements);
-            case 183 /* UnionType */:
-            case 184 /* IntersectionType */:
+            case 185 /* UnionType */:
+            case 186 /* IntersectionType */:
                 return visitNodes(cbNode, cbNodes, node.types);
-            case 185 /* ConditionalType */:
+            case 187 /* ConditionalType */:
                 return visitNode(cbNode, node.checkType) ||
                     visitNode(cbNode, node.extendsType) ||
                     visitNode(cbNode, node.trueType) ||
                     visitNode(cbNode, node.falseType);
-            case 186 /* InferType */:
+            case 188 /* InferType */:
                 return visitNode(cbNode, node.typeParameter);
-            case 196 /* ImportType */:
+            case 198 /* ImportType */:
                 return visitNode(cbNode, node.argument) ||
                     visitNode(cbNode, node.qualifier) ||
                     visitNodes(cbNode, cbNodes, node.typeArguments);
-            case 187 /* ParenthesizedType */:
-            case 189 /* TypeOperator */:
+            case 189 /* ParenthesizedType */:
+            case 191 /* TypeOperator */:
                 return visitNode(cbNode, node.type);
-            case 190 /* IndexedAccessType */:
+            case 192 /* IndexedAccessType */:
                 return visitNode(cbNode, node.objectType) ||
                     visitNode(cbNode, node.indexType);
-            case 191 /* MappedType */:
+            case 193 /* MappedType */:
                 return visitNode(cbNode, node.readonlyToken) ||
                     visitNode(cbNode, node.typeParameter) ||
                     visitNode(cbNode, node.nameType) ||
                     visitNode(cbNode, node.questionToken) ||
                     visitNode(cbNode, node.type);
-            case 192 /* LiteralType */:
+            case 194 /* LiteralType */:
                 return visitNode(cbNode, node.literal);
-            case 193 /* NamedTupleMember */:
+            case 195 /* NamedTupleMember */:
                 return visitNode(cbNode, node.dotDotDotToken) ||
                     visitNode(cbNode, node.name) ||
                     visitNode(cbNode, node.questionToken) ||
                     visitNode(cbNode, node.type);
-            case 197 /* ObjectBindingPattern */:
-            case 198 /* ArrayBindingPattern */:
+            case 199 /* ObjectBindingPattern */:
+            case 200 /* ArrayBindingPattern */:
                 return visitNodes(cbNode, cbNodes, node.elements);
-            case 200 /* ArrayLiteralExpression */:
+            case 202 /* ArrayLiteralExpression */:
                 return visitNodes(cbNode, cbNodes, node.elements);
-            case 201 /* ObjectLiteralExpression */:
+            case 203 /* ObjectLiteralExpression */:
                 return visitNodes(cbNode, cbNodes, node.properties);
-            case 202 /* PropertyAccessExpression */:
+            case 204 /* PropertyAccessExpression */:
                 return visitNode(cbNode, node.expression) ||
                     visitNode(cbNode, node.questionDotToken) ||
                     visitNode(cbNode, node.name);
-            case 203 /* ElementAccessExpression */:
+            case 205 /* ElementAccessExpression */:
                 return visitNode(cbNode, node.expression) ||
                     visitNode(cbNode, node.questionDotToken) ||
                     visitNode(cbNode, node.argumentExpression);
-            case 204 /* CallExpression */:
-            case 205 /* NewExpression */:
+            case 206 /* CallExpression */:
+            case 207 /* NewExpression */:
                 return visitNode(cbNode, node.expression) ||
                     visitNode(cbNode, node.questionDotToken) ||
                     visitNodes(cbNode, cbNodes, node.typeArguments) ||
                     visitNodes(cbNode, cbNodes, node.arguments);
-            case 206 /* TaggedTemplateExpression */:
+            case 208 /* TaggedTemplateExpression */:
                 return visitNode(cbNode, node.tag) ||
                     visitNode(cbNode, node.questionDotToken) ||
                     visitNodes(cbNode, cbNodes, node.typeArguments) ||
                     visitNode(cbNode, node.template);
-            case 207 /* TypeAssertionExpression */:
+            case 209 /* TypeAssertionExpression */:
                 return visitNode(cbNode, node.type) ||
                     visitNode(cbNode, node.expression);
-            case 208 /* ParenthesizedExpression */:
+            case 210 /* ParenthesizedExpression */:
                 return visitNode(cbNode, node.expression);
-            case 211 /* DeleteExpression */:
+            case 213 /* DeleteExpression */:
                 return visitNode(cbNode, node.expression);
-            case 212 /* TypeOfExpression */:
+            case 214 /* TypeOfExpression */:
                 return visitNode(cbNode, node.expression);
-            case 213 /* VoidExpression */:
+            case 215 /* VoidExpression */:
                 return visitNode(cbNode, node.expression);
-            case 215 /* PrefixUnaryExpression */:
+            case 217 /* PrefixUnaryExpression */:
                 return visitNode(cbNode, node.operand);
-            case 220 /* YieldExpression */:
+            case 222 /* YieldExpression */:
                 return visitNode(cbNode, node.asteriskToken) ||
                     visitNode(cbNode, node.expression);
-            case 214 /* AwaitExpression */:
+            case 216 /* AwaitExpression */:
                 return visitNode(cbNode, node.expression);
-            case 216 /* PostfixUnaryExpression */:
+            case 218 /* PostfixUnaryExpression */:
                 return visitNode(cbNode, node.operand);
-            case 217 /* BinaryExpression */:
+            case 219 /* BinaryExpression */:
                 return visitNode(cbNode, node.left) ||
                     visitNode(cbNode, node.operatorToken) ||
                     visitNode(cbNode, node.right);
-            case 225 /* AsExpression */:
+            case 227 /* AsExpression */:
                 return visitNode(cbNode, node.expression) ||
                     visitNode(cbNode, node.type);
-            case 226 /* NonNullExpression */:
+            case 228 /* NonNullExpression */:
                 return visitNode(cbNode, node.expression);
-            case 227 /* MetaProperty */:
+            case 229 /* MetaProperty */:
                 return visitNode(cbNode, node.name);
-            case 218 /* ConditionalExpression */:
+            case 220 /* ConditionalExpression */:
                 return visitNode(cbNode, node.condition) ||
                     visitNode(cbNode, node.questionToken) ||
                     visitNode(cbNode, node.whenTrue) ||
                     visitNode(cbNode, node.colonToken) ||
                     visitNode(cbNode, node.whenFalse);
-            case 221 /* SpreadElement */:
+            case 223 /* SpreadElement */:
                 return visitNode(cbNode, node.expression);
-            case 231 /* Block */:
-            case 258 /* ModuleBlock */:
+            case 233 /* Block */:
+            case 260 /* ModuleBlock */:
                 return visitNodes(cbNode, cbNodes, node.statements);
-            case 298 /* SourceFile */:
+            case 300 /* SourceFile */:
                 return visitNodes(cbNode, cbNodes, node.statements) ||
                     visitNode(cbNode, node.endOfFileToken);
-            case 233 /* VariableStatement */:
+            case 235 /* VariableStatement */:
                 return visitNodes(cbNode, cbNodes, node.decorators) ||
                     visitNodes(cbNode, cbNodes, node.modifiers) ||
                     visitNode(cbNode, node.declarationList);
-            case 251 /* VariableDeclarationList */:
+            case 253 /* VariableDeclarationList */:
                 return visitNodes(cbNode, cbNodes, node.declarations);
-            case 234 /* ExpressionStatement */:
+            case 236 /* ExpressionStatement */:
                 return visitNode(cbNode, node.expression);
-            case 235 /* IfStatement */:
+            case 237 /* IfStatement */:
                 return visitNode(cbNode, node.expression) ||
                     visitNode(cbNode, node.thenStatement) ||
                     visitNode(cbNode, node.elseStatement);
-            case 236 /* DoStatement */:
+            case 238 /* DoStatement */:
                 return visitNode(cbNode, node.statement) ||
                     visitNode(cbNode, node.expression);
-            case 237 /* WhileStatement */:
+            case 239 /* WhileStatement */:
                 return visitNode(cbNode, node.expression) ||
                     visitNode(cbNode, node.statement);
-            case 238 /* ForStatement */:
+            case 240 /* ForStatement */:
                 return visitNode(cbNode, node.initializer) ||
                     visitNode(cbNode, node.condition) ||
                     visitNode(cbNode, node.incrementor) ||
                     visitNode(cbNode, node.statement);
-            case 239 /* ForInStatement */:
+            case 241 /* ForInStatement */:
                 return visitNode(cbNode, node.initializer) ||
                     visitNode(cbNode, node.expression) ||
                     visitNode(cbNode, node.statement);
-            case 240 /* ForOfStatement */:
+            case 242 /* ForOfStatement */:
                 return visitNode(cbNode, node.awaitModifier) ||
                     visitNode(cbNode, node.initializer) ||
                     visitNode(cbNode, node.expression) ||
                     visitNode(cbNode, node.statement);
-            case 241 /* ContinueStatement */:
-            case 242 /* BreakStatement */:
+            case 243 /* ContinueStatement */:
+            case 244 /* BreakStatement */:
                 return visitNode(cbNode, node.label);
-            case 243 /* ReturnStatement */:
+            case 245 /* ReturnStatement */:
                 return visitNode(cbNode, node.expression);
-            case 244 /* WithStatement */:
+            case 246 /* WithStatement */:
                 return visitNode(cbNode, node.expression) ||
                     visitNode(cbNode, node.statement);
-            case 245 /* SwitchStatement */:
+            case 247 /* SwitchStatement */:
                 return visitNode(cbNode, node.expression) ||
                     visitNode(cbNode, node.caseBlock);
-            case 259 /* CaseBlock */:
+            case 261 /* CaseBlock */:
                 return visitNodes(cbNode, cbNodes, node.clauses);
-            case 285 /* CaseClause */:
+            case 287 /* CaseClause */:
                 return visitNode(cbNode, node.expression) ||
                     visitNodes(cbNode, cbNodes, node.statements);
-            case 286 /* DefaultClause */:
+            case 288 /* DefaultClause */:
                 return visitNodes(cbNode, cbNodes, node.statements);
-            case 246 /* LabeledStatement */:
+            case 248 /* LabeledStatement */:
                 return visitNode(cbNode, node.label) ||
                     visitNode(cbNode, node.statement);
-            case 247 /* ThrowStatement */:
+            case 249 /* ThrowStatement */:
                 return visitNode(cbNode, node.expression);
-            case 248 /* TryStatement */:
+            case 250 /* TryStatement */:
                 return visitNode(cbNode, node.tryBlock) ||
                     visitNode(cbNode, node.catchClause) ||
                     visitNode(cbNode, node.finallyBlock);
-            case 288 /* CatchClause */:
+            case 290 /* CatchClause */:
                 return visitNode(cbNode, node.variableDeclaration) ||
                     visitNode(cbNode, node.block);
-            case 162 /* Decorator */:
+            case 163 /* Decorator */:
                 return visitNode(cbNode, node.expression);
-            case 253 /* ClassDeclaration */:
-            case 222 /* ClassExpression */:
+            case 255 /* ClassDeclaration */:
+            case 224 /* ClassExpression */:
                 return visitNodes(cbNode, cbNodes, node.decorators) ||
                     visitNodes(cbNode, cbNodes, node.modifiers) ||
                     visitNode(cbNode, node.name) ||
                     visitNodes(cbNode, cbNodes, node.typeParameters) ||
                     visitNodes(cbNode, cbNodes, node.heritageClauses) ||
                     visitNodes(cbNode, cbNodes, node.members);
-            case 254 /* InterfaceDeclaration */:
+            case 256 /* InterfaceDeclaration */:
                 return visitNodes(cbNode, cbNodes, node.decorators) ||
                     visitNodes(cbNode, cbNodes, node.modifiers) ||
                     visitNode(cbNode, node.name) ||
                     visitNodes(cbNode, cbNodes, node.typeParameters) ||
                     visitNodes(cbNode, cbNodes, node.heritageClauses) ||
                     visitNodes(cbNode, cbNodes, node.members);
-            case 255 /* TypeAliasDeclaration */:
+            case 257 /* TypeAliasDeclaration */:
                 return visitNodes(cbNode, cbNodes, node.decorators) ||
                     visitNodes(cbNode, cbNodes, node.modifiers) ||
                     visitNode(cbNode, node.name) ||
                     visitNodes(cbNode, cbNodes, node.typeParameters) ||
                     visitNode(cbNode, node.type);
-            case 256 /* EnumDeclaration */:
+            case 258 /* EnumDeclaration */:
                 return visitNodes(cbNode, cbNodes, node.decorators) ||
                     visitNodes(cbNode, cbNodes, node.modifiers) ||
                     visitNode(cbNode, node.name) ||
                     visitNodes(cbNode, cbNodes, node.members);
-            case 292 /* EnumMember */:
+            case 294 /* EnumMember */:
                 return visitNode(cbNode, node.name) ||
                     visitNode(cbNode, node.initializer);
-            case 257 /* ModuleDeclaration */:
+            case 259 /* ModuleDeclaration */:
                 return visitNodes(cbNode, cbNodes, node.decorators) ||
                     visitNodes(cbNode, cbNodes, node.modifiers) ||
                     visitNode(cbNode, node.name) ||
                     visitNode(cbNode, node.body);
-            case 261 /* ImportEqualsDeclaration */:
+            case 263 /* ImportEqualsDeclaration */:
                 return visitNodes(cbNode, cbNodes, node.decorators) ||
                     visitNodes(cbNode, cbNodes, node.modifiers) ||
                     visitNode(cbNode, node.name) ||
                     visitNode(cbNode, node.moduleReference);
-            case 262 /* ImportDeclaration */:
+            case 264 /* ImportDeclaration */:
                 return visitNodes(cbNode, cbNodes, node.decorators) ||
                     visitNodes(cbNode, cbNodes, node.modifiers) ||
                     visitNode(cbNode, node.importClause) ||
                     visitNode(cbNode, node.moduleSpecifier);
-            case 263 /* ImportClause */:
+            case 265 /* ImportClause */:
                 return visitNode(cbNode, node.name) ||
                     visitNode(cbNode, node.namedBindings);
-            case 260 /* NamespaceExportDeclaration */:
+            case 262 /* NamespaceExportDeclaration */:
                 return visitNode(cbNode, node.name);
-            case 264 /* NamespaceImport */:
+            case 266 /* NamespaceImport */:
                 return visitNode(cbNode, node.name);
-            case 270 /* NamespaceExport */:
+            case 272 /* NamespaceExport */:
                 return visitNode(cbNode, node.name);
-            case 265 /* NamedImports */:
-            case 269 /* NamedExports */:
+            case 267 /* NamedImports */:
+            case 271 /* NamedExports */:
                 return visitNodes(cbNode, cbNodes, node.elements);
-            case 268 /* ExportDeclaration */:
+            case 270 /* ExportDeclaration */:
                 return visitNodes(cbNode, cbNodes, node.decorators) ||
                     visitNodes(cbNode, cbNodes, node.modifiers) ||
                     visitNode(cbNode, node.exportClause) ||
                     visitNode(cbNode, node.moduleSpecifier);
-            case 266 /* ImportSpecifier */:
-            case 271 /* ExportSpecifier */:
+            case 268 /* ImportSpecifier */:
+            case 273 /* ExportSpecifier */:
                 return visitNode(cbNode, node.propertyName) ||
                     visitNode(cbNode, node.name);
-            case 267 /* ExportAssignment */:
+            case 269 /* ExportAssignment */:
                 return visitNodes(cbNode, cbNodes, node.decorators) ||
                     visitNodes(cbNode, cbNodes, node.modifiers) ||
                     visitNode(cbNode, node.expression);
-            case 219 /* TemplateExpression */:
+            case 221 /* TemplateExpression */:
                 return visitNode(cbNode, node.head) || visitNodes(cbNode, cbNodes, node.templateSpans);
-            case 229 /* TemplateSpan */:
+            case 231 /* TemplateSpan */:
                 return visitNode(cbNode, node.expression) || visitNode(cbNode, node.literal);
-            case 194 /* TemplateLiteralType */:
+            case 196 /* TemplateLiteralType */:
                 return visitNode(cbNode, node.head) || visitNodes(cbNode, cbNodes, node.templateSpans);
-            case 195 /* TemplateLiteralTypeSpan */:
+            case 197 /* TemplateLiteralTypeSpan */:
                 return visitNode(cbNode, node.type) || visitNode(cbNode, node.literal);
-            case 159 /* ComputedPropertyName */:
+            case 160 /* ComputedPropertyName */:
                 return visitNode(cbNode, node.expression);
-            case 287 /* HeritageClause */:
+            case 289 /* HeritageClause */:
                 return visitNodes(cbNode, cbNodes, node.types);
-            case 224 /* ExpressionWithTypeArguments */:
+            case 226 /* ExpressionWithTypeArguments */:
                 return visitNode(cbNode, node.expression) ||
                     visitNodes(cbNode, cbNodes, node.typeArguments);
-            case 273 /* ExternalModuleReference */:
+            case 275 /* ExternalModuleReference */:
                 return visitNode(cbNode, node.expression);
-            case 272 /* MissingDeclaration */:
+            case 274 /* MissingDeclaration */:
                 return visitNodes(cbNode, cbNodes, node.decorators);
-            case 341 /* CommaListExpression */:
+            case 346 /* CommaListExpression */:
                 return visitNodes(cbNode, cbNodes, node.elements);
-            case 274 /* JsxElement */:
+            case 276 /* JsxElement */:
                 return visitNode(cbNode, node.openingElement) ||
                     visitNodes(cbNode, cbNodes, node.children) ||
                     visitNode(cbNode, node.closingElement);
-            case 278 /* JsxFragment */:
+            case 280 /* JsxFragment */:
                 return visitNode(cbNode, node.openingFragment) ||
                     visitNodes(cbNode, cbNodes, node.children) ||
                     visitNode(cbNode, node.closingFragment);
-            case 275 /* JsxSelfClosingElement */:
-            case 276 /* JsxOpeningElement */:
+            case 277 /* JsxSelfClosingElement */:
+            case 278 /* JsxOpeningElement */:
                 return visitNode(cbNode, node.tagName) ||
                     visitNodes(cbNode, cbNodes, node.typeArguments) ||
                     visitNode(cbNode, node.attributes);
-            case 282 /* JsxAttributes */:
+            case 284 /* JsxAttributes */:
                 return visitNodes(cbNode, cbNodes, node.properties);
-            case 281 /* JsxAttribute */:
+            case 283 /* JsxAttribute */:
                 return visitNode(cbNode, node.name) ||
                     visitNode(cbNode, node.initializer);
-            case 283 /* JsxSpreadAttribute */:
+            case 285 /* JsxSpreadAttribute */:
                 return visitNode(cbNode, node.expression);
-            case 284 /* JsxExpression */:
+            case 286 /* JsxExpression */:
                 return visitNode(cbNode, node.dotDotDotToken) ||
                     visitNode(cbNode, node.expression);
-            case 277 /* JsxClosingElement */:
+            case 279 /* JsxClosingElement */:
                 return visitNode(cbNode, node.tagName);
-            case 181 /* OptionalType */:
-            case 182 /* RestType */:
-            case 302 /* JSDocTypeExpression */:
-            case 307 /* JSDocNonNullableType */:
-            case 306 /* JSDocNullableType */:
-            case 308 /* JSDocOptionalType */:
-            case 310 /* JSDocVariadicType */:
+            case 183 /* OptionalType */:
+            case 184 /* RestType */:
+            case 304 /* JSDocTypeExpression */:
+            case 310 /* JSDocNonNullableType */:
+            case 309 /* JSDocNullableType */:
+            case 311 /* JSDocOptionalType */:
+            case 313 /* JSDocVariadicType */:
                 return visitNode(cbNode, node.type);
-            case 309 /* JSDocFunctionType */:
+            case 312 /* JSDocFunctionType */:
                 return visitNodes(cbNode, cbNodes, node.parameters) ||
                     visitNode(cbNode, node.type);
-            case 312 /* JSDocComment */:
+            case 315 /* JSDocComment */:
                 return (typeof node.comment === "string" ? undefined : visitNodes(cbNode, cbNodes, node.comment))
                     || visitNodes(cbNode, cbNodes, node.tags);
-            case 336 /* JSDocSeeTag */:
+            case 341 /* JSDocSeeTag */:
                 return visitNode(cbNode, node.tagName) ||
                     visitNode(cbNode, node.name) ||
                     (typeof node.comment === "string" ? undefined : visitNodes(cbNode, cbNodes, node.comment));
-            case 303 /* JSDocNameReference */:
+            case 305 /* JSDocNameReference */:
                 return visitNode(cbNode, node.name);
-            case 330 /* JSDocParameterTag */:
-            case 337 /* JSDocPropertyTag */:
+            case 306 /* JSDocMemberName */:
+                return visitNode(cbNode, node.left) ||
+                    visitNode(cbNode, node.right);
+            case 335 /* JSDocParameterTag */:
+            case 342 /* JSDocPropertyTag */:
                 return visitNode(cbNode, node.tagName) ||
                     (node.isNameFirst
                         ? visitNode(cbNode, node.name) ||
@@ -29246,62 +29922,64 @@
                         : visitNode(cbNode, node.typeExpression) ||
                             visitNode(cbNode, node.name) ||
                             (typeof node.comment === "string" ? undefined : visitNodes(cbNode, cbNodes, node.comment)));
-            case 320 /* JSDocAuthorTag */:
+            case 325 /* JSDocAuthorTag */:
                 return visitNode(cbNode, node.tagName) ||
                     (typeof node.comment === "string" ? undefined : visitNodes(cbNode, cbNodes, node.comment));
-            case 319 /* JSDocImplementsTag */:
+            case 324 /* JSDocImplementsTag */:
                 return visitNode(cbNode, node.tagName) ||
                     visitNode(cbNode, node.class) ||
                     (typeof node.comment === "string" ? undefined : visitNodes(cbNode, cbNodes, node.comment));
-            case 318 /* JSDocAugmentsTag */:
+            case 323 /* JSDocAugmentsTag */:
                 return visitNode(cbNode, node.tagName) ||
                     visitNode(cbNode, node.class) ||
                     (typeof node.comment === "string" ? undefined : visitNodes(cbNode, cbNodes, node.comment));
-            case 334 /* JSDocTemplateTag */:
+            case 339 /* JSDocTemplateTag */:
                 return visitNode(cbNode, node.tagName) ||
                     visitNode(cbNode, node.constraint) ||
                     visitNodes(cbNode, cbNodes, node.typeParameters) ||
                     (typeof node.comment === "string" ? undefined : visitNodes(cbNode, cbNodes, node.comment));
-            case 335 /* JSDocTypedefTag */:
+            case 340 /* JSDocTypedefTag */:
                 return visitNode(cbNode, node.tagName) ||
                     (node.typeExpression &&
-                        node.typeExpression.kind === 302 /* JSDocTypeExpression */
+                        node.typeExpression.kind === 304 /* JSDocTypeExpression */
                         ? visitNode(cbNode, node.typeExpression) ||
                             visitNode(cbNode, node.fullName) ||
                             (typeof node.comment === "string" ? undefined : visitNodes(cbNode, cbNodes, node.comment))
                         : visitNode(cbNode, node.fullName) ||
-                            visitNode(cbNode, node.typeExpression)) ||
-                    (typeof node.comment === "string" ? undefined : visitNodes(cbNode, cbNodes, node.comment));
-            case 328 /* JSDocCallbackTag */:
+                            visitNode(cbNode, node.typeExpression) ||
+                            (typeof node.comment === "string" ? undefined : visitNodes(cbNode, cbNodes, node.comment)));
+            case 333 /* JSDocCallbackTag */:
                 return visitNode(cbNode, node.tagName) ||
                     visitNode(cbNode, node.fullName) ||
                     visitNode(cbNode, node.typeExpression) ||
                     (typeof node.comment === "string" ? undefined : visitNodes(cbNode, cbNodes, node.comment));
-            case 331 /* JSDocReturnTag */:
-            case 333 /* JSDocTypeTag */:
-            case 332 /* JSDocThisTag */:
-            case 329 /* JSDocEnumTag */:
+            case 336 /* JSDocReturnTag */:
+            case 338 /* JSDocTypeTag */:
+            case 337 /* JSDocThisTag */:
+            case 334 /* JSDocEnumTag */:
                 return visitNode(cbNode, node.tagName) ||
                     visitNode(cbNode, node.typeExpression) ||
                     (typeof node.comment === "string" ? undefined : visitNodes(cbNode, cbNodes, node.comment));
-            case 315 /* JSDocSignature */:
+            case 318 /* JSDocSignature */:
                 return ts.forEach(node.typeParameters, cbNode) ||
                     ts.forEach(node.parameters, cbNode) ||
                     visitNode(cbNode, node.type);
-            case 316 /* JSDocLink */:
+            case 319 /* JSDocLink */:
+            case 320 /* JSDocLinkCode */:
+            case 321 /* JSDocLinkPlain */:
                 return visitNode(cbNode, node.name);
-            case 314 /* JSDocTypeLiteral */:
+            case 317 /* JSDocTypeLiteral */:
                 return ts.forEach(node.jsDocPropertyTags, cbNode);
-            case 317 /* JSDocTag */:
-            case 322 /* JSDocClassTag */:
-            case 323 /* JSDocPublicTag */:
-            case 324 /* JSDocPrivateTag */:
-            case 325 /* JSDocProtectedTag */:
-            case 326 /* JSDocReadonlyTag */:
-            case 321 /* JSDocDeprecatedTag */:
+            case 322 /* JSDocTag */:
+            case 327 /* JSDocClassTag */:
+            case 328 /* JSDocPublicTag */:
+            case 329 /* JSDocPrivateTag */:
+            case 330 /* JSDocProtectedTag */:
+            case 331 /* JSDocReadonlyTag */:
+            case 326 /* JSDocDeprecatedTag */:
                 return visitNode(cbNode, node.tagName)
                     || (typeof node.comment === "string" ? undefined : visitNodes(cbNode, cbNodes, node.comment));
-            case 340 /* PartiallyEmittedExpression */:
+            case 345 /* PartiallyEmittedExpression */:
                 return visitNode(cbNode, node.expression);
         }
     }
@@ -29350,7 +30028,7 @@
                         continue;
                     return res;
                 }
-                if (current.kind >= 158 /* FirstNode */) {
+                if (current.kind >= 159 /* FirstNode */) {
                     // add children in reverse order to the queue, so popping gives the first child
                     for (var _i = 0, _a = gatherPossibleChildren(current); _i < _a.length; _i++) {
                         var child = _a[_i];
@@ -29621,9 +30299,9 @@
                         case 22 /* OpenBracketToken */:
                             expression_1 = parseArrayLiteralExpression();
                             break;
-                        case 109 /* TrueKeyword */:
-                        case 94 /* FalseKeyword */:
-                        case 103 /* NullKeyword */:
+                        case 110 /* TrueKeyword */:
+                        case 95 /* FalseKeyword */:
+                        case 104 /* NullKeyword */:
                             expression_1 = parseTokenNode();
                             break;
                         case 40 /* MinusToken */:
@@ -30075,6 +30753,9 @@
         function reScanLessThanToken() {
             return currentToken = scanner.reScanLessThanToken();
         }
+        function reScanHashToken() {
+            return currentToken = scanner.reScanHashToken();
+        }
         function scanJsxIdentifier() {
             return currentToken = scanner.scanJsxIdentifier();
         }
@@ -30129,27 +30810,28 @@
             return speculationHelper(callback, 0 /* TryParse */);
         }
         function isBindingIdentifier() {
-            if (token() === 78 /* Identifier */) {
+            if (token() === 79 /* Identifier */) {
                 return true;
             }
-            return token() > 115 /* LastReservedWord */;
+            // `let await`/`let yield` in [Yield] or [Await] are allowed here and disallowed in the binder.
+            return token() > 116 /* LastReservedWord */;
         }
         // Ignore strict mode flag because we will report an error in type checker instead.
         function isIdentifier() {
-            if (token() === 78 /* Identifier */) {
+            if (token() === 79 /* Identifier */) {
                 return true;
             }
             // If we have a 'yield' keyword, and we're in the [yield] context, then 'yield' is
             // considered a keyword and is not an identifier.
-            if (token() === 124 /* YieldKeyword */ && inYieldContext()) {
+            if (token() === 125 /* YieldKeyword */ && inYieldContext()) {
                 return false;
             }
             // If we have a 'await' keyword, and we're in the [Await] context, then 'await' is
             // considered a keyword and is not an identifier.
-            if (token() === 130 /* AwaitKeyword */ && inAwaitContext()) {
+            if (token() === 131 /* AwaitKeyword */ && inAwaitContext()) {
                 return false;
             }
-            return token() > 115 /* LastReservedWord */;
+            return token() > 116 /* LastReservedWord */;
         }
         function parseExpected(kind, diagnosticMessage, shouldAdvance) {
             if (shouldAdvance === void 0) { shouldAdvance = true; }
@@ -30168,6 +30850,128 @@
             }
             return false;
         }
+        var viableKeywordSuggestions = Object.keys(ts.textToKeywordObj).filter(function (keyword) { return keyword.length > 2; });
+        /**
+         * Provides a better error message than the generic "';' expected" if possible for
+         * known common variants of a missing semicolon, such as from a mispelled names.
+         *
+         * @param node Node preceding the expected semicolon location.
+         */
+        function parseErrorForMissingSemicolonAfter(node) {
+            var _a;
+            // Tagged template literals are sometimes used in places where only simple strings are allowed, i.e.:
+            //   module `M1` {
+            //   ^^^^^^^^^^^ This block is parsed as a template literal like module`M1`.
+            if (ts.isTaggedTemplateExpression(node)) {
+                parseErrorAt(ts.skipTrivia(sourceText, node.template.pos), node.template.end, ts.Diagnostics.Module_declaration_names_may_only_use_or_quoted_strings);
+                return;
+            }
+            // Otherwise, if this isn't a well-known keyword-like identifier, give the generic fallback message.
+            var expressionText = ts.isIdentifier(node) ? ts.idText(node) : undefined;
+            if (!expressionText || !ts.isIdentifierText(expressionText, languageVersion)) {
+                parseErrorAtCurrentToken(ts.Diagnostics._0_expected, ts.tokenToString(26 /* SemicolonToken */));
+                return;
+            }
+            var pos = ts.skipTrivia(sourceText, node.pos);
+            // Some known keywords are likely signs of syntax being used improperly.
+            switch (expressionText) {
+                case "const":
+                case "let":
+                case "var":
+                    parseErrorAt(pos, node.end, ts.Diagnostics.Variable_declaration_not_allowed_at_this_location);
+                    return;
+                case "declare":
+                    // If a declared node failed to parse, it would have emitted a diagnostic already.
+                    return;
+                case "interface":
+                    parseErrorForInvalidName(ts.Diagnostics.Interface_name_cannot_be_0, ts.Diagnostics.Interface_must_be_given_a_name, 18 /* OpenBraceToken */);
+                    return;
+                case "is":
+                    parseErrorAt(pos, scanner.getTextPos(), ts.Diagnostics.A_type_predicate_is_only_allowed_in_return_type_position_for_functions_and_methods);
+                    return;
+                case "module":
+                case "namespace":
+                    parseErrorForInvalidName(ts.Diagnostics.Namespace_name_cannot_be_0, ts.Diagnostics.Namespace_must_be_given_a_name, 18 /* OpenBraceToken */);
+                    return;
+                case "type":
+                    parseErrorForInvalidName(ts.Diagnostics.Type_alias_name_cannot_be_0, ts.Diagnostics.Type_alias_must_be_given_a_name, 63 /* EqualsToken */);
+                    return;
+            }
+            // The user alternatively might have misspelled or forgotten to add a space after a common keyword.
+            var suggestion = (_a = ts.getSpellingSuggestion(expressionText, viableKeywordSuggestions, function (n) { return n; })) !== null && _a !== void 0 ? _a : getSpaceSuggestion(expressionText);
+            if (suggestion) {
+                parseErrorAt(pos, node.end, ts.Diagnostics.Unknown_keyword_or_identifier_Did_you_mean_0, suggestion);
+                return;
+            }
+            // Unknown tokens are handled with their own errors in the scanner
+            if (token() === 0 /* Unknown */) {
+                return;
+            }
+            // Otherwise, we know this some kind of unknown word, not just a missing expected semicolon.
+            parseErrorAt(pos, node.end, ts.Diagnostics.Unexpected_keyword_or_identifier);
+        }
+        /**
+         * Reports a diagnostic error for the current token being an invalid name.
+         *
+         * @param blankDiagnostic Diagnostic to report for the case of the name being blank (matched tokenIfBlankName).
+         * @param nameDiagnostic Diagnostic to report for all other cases.
+         * @param tokenIfBlankName Current token if the name was invalid for being blank (not provided / skipped).
+         */
+        function parseErrorForInvalidName(nameDiagnostic, blankDiagnostic, tokenIfBlankName) {
+            if (token() === tokenIfBlankName) {
+                parseErrorAtCurrentToken(blankDiagnostic);
+            }
+            else {
+                parseErrorAtCurrentToken(nameDiagnostic, ts.tokenToString(token()));
+            }
+        }
+        function getSpaceSuggestion(expressionText) {
+            for (var _i = 0, viableKeywordSuggestions_1 = viableKeywordSuggestions; _i < viableKeywordSuggestions_1.length; _i++) {
+                var keyword = viableKeywordSuggestions_1[_i];
+                if (expressionText.length > keyword.length + 2 && ts.startsWith(expressionText, keyword)) {
+                    return keyword + " " + expressionText.slice(keyword.length);
+                }
+            }
+            return undefined;
+        }
+        function parseSemicolonAfterPropertyName(name, type, initializer) {
+            if (token() === 59 /* AtToken */ && !scanner.hasPrecedingLineBreak()) {
+                parseErrorAtCurrentToken(ts.Diagnostics.Decorators_must_precede_the_name_and_all_keywords_of_property_declarations);
+                return;
+            }
+            if (token() === 20 /* OpenParenToken */) {
+                parseErrorAtCurrentToken(ts.Diagnostics.Cannot_start_a_function_call_in_a_type_annotation);
+                nextToken();
+                return;
+            }
+            if (type && !canParseSemicolon()) {
+                if (initializer) {
+                    parseErrorAtCurrentToken(ts.Diagnostics._0_expected, ts.tokenToString(26 /* SemicolonToken */));
+                }
+                else {
+                    parseErrorAtCurrentToken(ts.Diagnostics.Expected_for_property_initializer);
+                }
+                return;
+            }
+            if (tryParseSemicolon()) {
+                return;
+            }
+            // If an initializer was parsed but there is still an error in finding the next semicolon,
+            // we generally know there was an error already reported in the initializer...
+            //   class Example { a = new Map([), ) }
+            //                                ~
+            if (initializer) {
+                // ...unless we've found the start of a block after a property declaration, in which
+                // case we can know that regardless of the initializer we should complain on the block.
+                //   class Example { a = 0 {} }
+                //                         ~
+                if (token() === 18 /* OpenBraceToken */) {
+                    parseErrorAtCurrentToken(ts.Diagnostics._0_expected, ts.tokenToString(26 /* SemicolonToken */));
+                }
+                return;
+            }
+            parseErrorForMissingSemicolonAfter(name);
+        }
         function parseExpectedJSDoc(kind) {
             if (token() === kind) {
                 nextTokenJSDoc();
@@ -30223,17 +31027,18 @@
             // We can parse out an optional semicolon in ASI cases in the following cases.
             return token() === 19 /* CloseBraceToken */ || token() === 1 /* EndOfFileToken */ || scanner.hasPrecedingLineBreak();
         }
+        function tryParseSemicolon() {
+            if (!canParseSemicolon()) {
+                return false;
+            }
+            if (token() === 26 /* SemicolonToken */) {
+                // consume the semicolon if it was explicitly provided.
+                nextToken();
+            }
+            return true;
+        }
         function parseSemicolon() {
-            if (canParseSemicolon()) {
-                if (token() === 26 /* SemicolonToken */) {
-                    // consume the semicolon if it was explicitly provided.
-                    nextToken();
-                }
-                return true;
-            }
-            else {
-                return parseExpected(26 /* SemicolonToken */);
-            }
+            return tryParseSemicolon() || parseExpected(26 /* SemicolonToken */);
         }
         function createNodeArray(elements, pos, end, hasTrailingComma) {
             var array = factory.createNodeArray(elements, hasTrailingComma);
@@ -30262,11 +31067,11 @@
                 parseErrorAtCurrentToken(diagnosticMessage, arg0);
             }
             var pos = getNodePos();
-            var result = kind === 78 /* Identifier */ ? factory.createIdentifier("", /*typeArguments*/ undefined, /*originalKeywordKind*/ undefined) :
+            var result = kind === 79 /* Identifier */ ? factory.createIdentifier("", /*typeArguments*/ undefined, /*originalKeywordKind*/ undefined) :
                 ts.isTemplateLiteralKind(kind) ? factory.createTemplateLiteralLikeNode(kind, "", "", /*templateFlags*/ undefined) :
                     kind === 8 /* NumericLiteral */ ? factory.createNumericLiteral("", /*numericLiteralFlags*/ undefined) :
                         kind === 10 /* StringLiteral */ ? factory.createStringLiteral("", /*isSingleQuote*/ undefined) :
-                            kind === 272 /* MissingDeclaration */ ? factory.createMissingDeclaration() :
+                            kind === 274 /* MissingDeclaration */ ? factory.createMissingDeclaration() :
                                 factory.createToken(kind);
             return finishNode(result, pos);
         }
@@ -30290,11 +31095,11 @@
                 nextTokenWithoutCheck();
                 return finishNode(factory.createIdentifier(text, /*typeArguments*/ undefined, originalKeywordKind), pos);
             }
-            if (token() === 79 /* PrivateIdentifier */) {
+            if (token() === 80 /* PrivateIdentifier */) {
                 parseErrorAtCurrentToken(privateIdentifierDiagnosticMessage || ts.Diagnostics.Private_identifiers_are_not_allowed_outside_class_bodies);
                 return createIdentifier(/*isIdentifier*/ true);
             }
-            if (token() === 0 /* Unknown */ && scanner.tryScan(function () { return scanner.reScanInvalidIdentifier() === 78 /* Identifier */; })) {
+            if (token() === 0 /* Unknown */ && scanner.tryScan(function () { return scanner.reScanInvalidIdentifier() === 79 /* Identifier */; })) {
                 // Scanner has already recorded an 'Invalid character' error, so no need to add another from the parser.
                 return createIdentifier(/*isIdentifier*/ true);
             }
@@ -30306,7 +31111,7 @@
             var defaultMessage = isReservedWord ?
                 ts.Diagnostics.Identifier_expected_0_is_a_reserved_word_that_cannot_be_used_here :
                 ts.Diagnostics.Identifier_expected;
-            return createMissingNode(78 /* Identifier */, reportAtCurrentPosition, diagnosticMessage || defaultMessage, msgArg);
+            return createMissingNode(79 /* Identifier */, reportAtCurrentPosition, diagnosticMessage || defaultMessage, msgArg);
         }
         function parseBindingIdentifier(privateIdentifierDiagnosticMessage) {
             return createIdentifier(isBindingIdentifier(), /*diagnosticMessage*/ undefined, privateIdentifierDiagnosticMessage);
@@ -30331,7 +31136,7 @@
             if (allowComputedPropertyNames && token() === 22 /* OpenBracketToken */) {
                 return parseComputedPropertyName();
             }
-            if (token() === 79 /* PrivateIdentifier */) {
+            if (token() === 80 /* PrivateIdentifier */) {
                 return parsePrivateIdentifier();
             }
             return parseIdentifierName();
@@ -30377,24 +31182,24 @@
         }
         function nextTokenCanFollowModifier() {
             switch (token()) {
-                case 84 /* ConstKeyword */:
+                case 85 /* ConstKeyword */:
                     // 'const' is only a modifier if followed by 'enum'.
-                    return nextToken() === 91 /* EnumKeyword */;
-                case 92 /* ExportKeyword */:
+                    return nextToken() === 92 /* EnumKeyword */;
+                case 93 /* ExportKeyword */:
                     nextToken();
-                    if (token() === 87 /* DefaultKeyword */) {
+                    if (token() === 88 /* DefaultKeyword */) {
                         return lookAhead(nextTokenCanFollowDefaultKeyword);
                     }
-                    if (token() === 149 /* TypeKeyword */) {
+                    if (token() === 150 /* TypeKeyword */) {
                         return lookAhead(nextTokenCanFollowExportModifier);
                     }
                     return canFollowExportModifier();
-                case 87 /* DefaultKeyword */:
+                case 88 /* DefaultKeyword */:
                     return nextTokenCanFollowDefaultKeyword();
-                case 123 /* StaticKeyword */:
+                case 124 /* StaticKeyword */:
                     return nextTokenIsOnSameLineAndCanFollowModifier();
-                case 134 /* GetKeyword */:
-                case 146 /* SetKeyword */:
+                case 135 /* GetKeyword */:
+                case 147 /* SetKeyword */:
                     nextToken();
                     return canFollowModifier();
                 default:
@@ -30403,7 +31208,7 @@
         }
         function canFollowExportModifier() {
             return token() !== 41 /* AsteriskToken */
-                && token() !== 126 /* AsKeyword */
+                && token() !== 127 /* AsKeyword */
                 && token() !== 18 /* OpenBraceToken */
                 && canFollowModifier();
         }
@@ -30423,10 +31228,10 @@
         }
         function nextTokenCanFollowDefaultKeyword() {
             nextToken();
-            return token() === 83 /* ClassKeyword */ || token() === 97 /* FunctionKeyword */ ||
-                token() === 117 /* InterfaceKeyword */ ||
-                (token() === 125 /* AbstractKeyword */ && lookAhead(nextTokenIsClassKeywordOnSameLine)) ||
-                (token() === 129 /* AsyncKeyword */ && lookAhead(nextTokenIsFunctionKeywordOnSameLine));
+            return token() === 84 /* ClassKeyword */ || token() === 98 /* FunctionKeyword */ ||
+                token() === 118 /* InterfaceKeyword */ ||
+                (token() === 126 /* AbstractKeyword */ && lookAhead(nextTokenIsClassKeywordOnSameLine)) ||
+                (token() === 130 /* AsyncKeyword */ && lookAhead(nextTokenIsFunctionKeywordOnSameLine));
         }
         // True if positioned at the start of a list element
         function isListElement(parsingContext, inErrorRecovery) {
@@ -30446,7 +31251,7 @@
                     // outer module.  We just want to consume and move on.
                     return !(token() === 26 /* SemicolonToken */ && inErrorRecovery) && isStartOfStatement();
                 case 2 /* SwitchClauses */:
-                    return token() === 81 /* CaseKeyword */ || token() === 87 /* DefaultKeyword */;
+                    return token() === 82 /* CaseKeyword */ || token() === 88 /* DefaultKeyword */;
                 case 4 /* TypeMembers */:
                     return lookAhead(isTypeMemberStart);
                 case 5 /* ClassMembers */:
@@ -30532,7 +31337,7 @@
                 //      extends {} extends
                 //      extends {} implements
                 var next = nextToken();
-                return next === 27 /* CommaToken */ || next === 18 /* OpenBraceToken */ || next === 93 /* ExtendsKeyword */ || next === 116 /* ImplementsKeyword */;
+                return next === 27 /* CommaToken */ || next === 18 /* OpenBraceToken */ || next === 94 /* ExtendsKeyword */ || next === 117 /* ImplementsKeyword */;
             }
             return true;
         }
@@ -30549,8 +31354,8 @@
             return ts.tokenIsIdentifierOrKeywordOrGreaterThan(token());
         }
         function isHeritageClauseExtendsOrImplementsKeyword() {
-            if (token() === 116 /* ImplementsKeyword */ ||
-                token() === 93 /* ExtendsKeyword */) {
+            if (token() === 117 /* ImplementsKeyword */ ||
+                token() === 94 /* ExtendsKeyword */) {
                 return lookAhead(nextTokenIsStartOfExpression);
             }
             return false;
@@ -30580,14 +31385,14 @@
                 case 23 /* ImportOrExportSpecifiers */:
                     return token() === 19 /* CloseBraceToken */;
                 case 3 /* SwitchClauseStatements */:
-                    return token() === 19 /* CloseBraceToken */ || token() === 81 /* CaseKeyword */ || token() === 87 /* DefaultKeyword */;
+                    return token() === 19 /* CloseBraceToken */ || token() === 82 /* CaseKeyword */ || token() === 88 /* DefaultKeyword */;
                 case 7 /* HeritageClauseElement */:
-                    return token() === 18 /* OpenBraceToken */ || token() === 93 /* ExtendsKeyword */ || token() === 116 /* ImplementsKeyword */;
+                    return token() === 18 /* OpenBraceToken */ || token() === 94 /* ExtendsKeyword */ || token() === 117 /* ImplementsKeyword */;
                 case 8 /* VariableDeclarations */:
                     return isVariableDeclaratorListTerminator();
                 case 19 /* TypeParameters */:
                     // Tokens other than '>' are here for better error recovery
-                    return token() === 31 /* GreaterThanToken */ || token() === 20 /* OpenParenToken */ || token() === 18 /* OpenBraceToken */ || token() === 93 /* ExtendsKeyword */ || token() === 116 /* ImplementsKeyword */;
+                    return token() === 31 /* GreaterThanToken */ || token() === 20 /* OpenParenToken */ || token() === 18 /* OpenBraceToken */ || token() === 94 /* ExtendsKeyword */ || token() === 117 /* ImplementsKeyword */;
                 case 11 /* ArgumentExpressions */:
                     // Tokens other than ')' are here for better error recovery
                     return token() === 21 /* CloseParenToken */ || token() === 26 /* SemicolonToken */;
@@ -30803,20 +31608,20 @@
         function isReusableClassMember(node) {
             if (node) {
                 switch (node.kind) {
-                    case 167 /* Constructor */:
-                    case 172 /* IndexSignature */:
-                    case 168 /* GetAccessor */:
-                    case 169 /* SetAccessor */:
-                    case 164 /* PropertyDeclaration */:
-                    case 230 /* SemicolonClassElement */:
+                    case 169 /* Constructor */:
+                    case 174 /* IndexSignature */:
+                    case 170 /* GetAccessor */:
+                    case 171 /* SetAccessor */:
+                    case 165 /* PropertyDeclaration */:
+                    case 232 /* SemicolonClassElement */:
                         return true;
-                    case 166 /* MethodDeclaration */:
+                    case 167 /* MethodDeclaration */:
                         // Method declarations are not necessarily reusable.  An object-literal
                         // may have a method calls "constructor(...)" and we must reparse that
                         // into an actual .ConstructorDeclaration.
                         var methodDeclaration = node;
-                        var nameIsConstructor = methodDeclaration.name.kind === 78 /* Identifier */ &&
-                            methodDeclaration.name.originalKeywordKind === 132 /* ConstructorKeyword */;
+                        var nameIsConstructor = methodDeclaration.name.kind === 79 /* Identifier */ &&
+                            methodDeclaration.name.originalKeywordKind === 133 /* ConstructorKeyword */;
                         return !nameIsConstructor;
                 }
             }
@@ -30825,8 +31630,8 @@
         function isReusableSwitchClause(node) {
             if (node) {
                 switch (node.kind) {
-                    case 285 /* CaseClause */:
-                    case 286 /* DefaultClause */:
+                    case 287 /* CaseClause */:
+                    case 288 /* DefaultClause */:
                         return true;
                 }
             }
@@ -30835,58 +31640,58 @@
         function isReusableStatement(node) {
             if (node) {
                 switch (node.kind) {
-                    case 252 /* FunctionDeclaration */:
-                    case 233 /* VariableStatement */:
-                    case 231 /* Block */:
-                    case 235 /* IfStatement */:
-                    case 234 /* ExpressionStatement */:
-                    case 247 /* ThrowStatement */:
-                    case 243 /* ReturnStatement */:
-                    case 245 /* SwitchStatement */:
-                    case 242 /* BreakStatement */:
-                    case 241 /* ContinueStatement */:
-                    case 239 /* ForInStatement */:
-                    case 240 /* ForOfStatement */:
-                    case 238 /* ForStatement */:
-                    case 237 /* WhileStatement */:
-                    case 244 /* WithStatement */:
-                    case 232 /* EmptyStatement */:
-                    case 248 /* TryStatement */:
-                    case 246 /* LabeledStatement */:
-                    case 236 /* DoStatement */:
-                    case 249 /* DebuggerStatement */:
-                    case 262 /* ImportDeclaration */:
-                    case 261 /* ImportEqualsDeclaration */:
-                    case 268 /* ExportDeclaration */:
-                    case 267 /* ExportAssignment */:
-                    case 257 /* ModuleDeclaration */:
-                    case 253 /* ClassDeclaration */:
-                    case 254 /* InterfaceDeclaration */:
-                    case 256 /* EnumDeclaration */:
-                    case 255 /* TypeAliasDeclaration */:
+                    case 254 /* FunctionDeclaration */:
+                    case 235 /* VariableStatement */:
+                    case 233 /* Block */:
+                    case 237 /* IfStatement */:
+                    case 236 /* ExpressionStatement */:
+                    case 249 /* ThrowStatement */:
+                    case 245 /* ReturnStatement */:
+                    case 247 /* SwitchStatement */:
+                    case 244 /* BreakStatement */:
+                    case 243 /* ContinueStatement */:
+                    case 241 /* ForInStatement */:
+                    case 242 /* ForOfStatement */:
+                    case 240 /* ForStatement */:
+                    case 239 /* WhileStatement */:
+                    case 246 /* WithStatement */:
+                    case 234 /* EmptyStatement */:
+                    case 250 /* TryStatement */:
+                    case 248 /* LabeledStatement */:
+                    case 238 /* DoStatement */:
+                    case 251 /* DebuggerStatement */:
+                    case 264 /* ImportDeclaration */:
+                    case 263 /* ImportEqualsDeclaration */:
+                    case 270 /* ExportDeclaration */:
+                    case 269 /* ExportAssignment */:
+                    case 259 /* ModuleDeclaration */:
+                    case 255 /* ClassDeclaration */:
+                    case 256 /* InterfaceDeclaration */:
+                    case 258 /* EnumDeclaration */:
+                    case 257 /* TypeAliasDeclaration */:
                         return true;
                 }
             }
             return false;
         }
         function isReusableEnumMember(node) {
-            return node.kind === 292 /* EnumMember */;
+            return node.kind === 294 /* EnumMember */;
         }
         function isReusableTypeMember(node) {
             if (node) {
                 switch (node.kind) {
-                    case 171 /* ConstructSignature */:
-                    case 165 /* MethodSignature */:
-                    case 172 /* IndexSignature */:
-                    case 163 /* PropertySignature */:
-                    case 170 /* CallSignature */:
+                    case 173 /* ConstructSignature */:
+                    case 166 /* MethodSignature */:
+                    case 174 /* IndexSignature */:
+                    case 164 /* PropertySignature */:
+                    case 172 /* CallSignature */:
                         return true;
                 }
             }
             return false;
         }
         function isReusableVariableDeclaration(node) {
-            if (node.kind !== 250 /* VariableDeclaration */) {
+            if (node.kind !== 252 /* VariableDeclaration */) {
                 return false;
             }
             // Very subtle incremental parsing bug.  Consider the following code:
@@ -30907,7 +31712,7 @@
             return variableDeclarator.initializer === undefined;
         }
         function isReusableParameter(node) {
-            if (node.kind !== 161 /* Parameter */) {
+            if (node.kind !== 162 /* Parameter */) {
                 return false;
             }
             // See the comment in isReusableVariableDeclaration for why we do this.
@@ -30925,7 +31730,10 @@
         }
         function parsingContextErrors(context) {
             switch (context) {
-                case 0 /* SourceElements */: return parseErrorAtCurrentToken(ts.Diagnostics.Declaration_or_statement_expected);
+                case 0 /* SourceElements */:
+                    return token() === 88 /* DefaultKeyword */
+                        ? parseErrorAtCurrentToken(ts.Diagnostics._0_expected, ts.tokenToString(93 /* ExportKeyword */))
+                        : parseErrorAtCurrentToken(ts.Diagnostics.Declaration_or_statement_expected);
                 case 1 /* BlockStatements */: return parseErrorAtCurrentToken(ts.Diagnostics.Declaration_or_statement_expected);
                 case 2 /* SwitchClauses */: return parseErrorAtCurrentToken(ts.Diagnostics.case_or_default_expected);
                 case 3 /* SwitchClauseStatements */: return parseErrorAtCurrentToken(ts.Diagnostics.Statement_expected);
@@ -31074,12 +31882,12 @@
                     // Report that we need an identifier.  However, report it right after the dot,
                     // and not on the next token.  This is because the next token might actually
                     // be an identifier and the error would be quite confusing.
-                    return createMissingNode(78 /* Identifier */, /*reportAtCurrentPosition*/ true, ts.Diagnostics.Identifier_expected);
+                    return createMissingNode(79 /* Identifier */, /*reportAtCurrentPosition*/ true, ts.Diagnostics.Identifier_expected);
                 }
             }
-            if (token() === 79 /* PrivateIdentifier */) {
+            if (token() === 80 /* PrivateIdentifier */) {
                 var node = parsePrivateIdentifier();
-                return allowPrivateIdentifiers ? node : createMissingNode(78 /* Identifier */, /*reportAtCurrentPosition*/ true, ts.Diagnostics.Identifier_expected);
+                return allowPrivateIdentifiers ? node : createMissingNode(79 /* Identifier */, /*reportAtCurrentPosition*/ true, ts.Diagnostics.Identifier_expected);
             }
             return allowIdentifierNames ? parseIdentifierName() : parseIdentifier();
         }
@@ -31188,14 +31996,14 @@
         // If true, we should abort parsing an error function.
         function typeHasArrowFunctionBlockingParseError(node) {
             switch (node.kind) {
-                case 174 /* TypeReference */:
+                case 176 /* TypeReference */:
                     return ts.nodeIsMissing(node.typeName);
-                case 175 /* FunctionType */:
-                case 176 /* ConstructorType */: {
+                case 177 /* FunctionType */:
+                case 178 /* ConstructorType */: {
                     var _a = node, parameters = _a.parameters, type = _a.type;
                     return isMissingList(parameters) || typeHasArrowFunctionBlockingParseError(type);
                 }
-                case 187 /* ParenthesizedType */:
+                case 189 /* ParenthesizedType */:
                     return typeHasArrowFunctionBlockingParseError(node.type);
                 default:
                     return false;
@@ -31237,7 +32045,7 @@
                 token() === 19 /* CloseBraceToken */ ||
                 token() === 21 /* CloseParenToken */ ||
                 token() === 31 /* GreaterThanToken */ ||
-                token() === 62 /* EqualsToken */ ||
+                token() === 63 /* EqualsToken */ ||
                 token() === 51 /* BarToken */) {
                 return finishNode(factory.createJSDocUnknownType(), pos);
             }
@@ -31259,7 +32067,7 @@
         function parseJSDocParameter() {
             var pos = getNodePos();
             var name;
-            if (token() === 107 /* ThisKeyword */ || token() === 102 /* NewKeyword */) {
+            if (token() === 108 /* ThisKeyword */ || token() === 103 /* NewKeyword */) {
                 name = parseIdentifierName();
                 parseExpected(58 /* ColonToken */);
             }
@@ -31275,7 +32083,7 @@
         function parseJSDocType() {
             scanner.setInJSDocType(true);
             var pos = getNodePos();
-            if (parseOptional(139 /* ModuleKeyword */)) {
+            if (parseOptional(140 /* ModuleKeyword */)) {
                 // TODO(rbuckton): We never set the type for a JSDocNamepathType. What should we put here?
                 var moduleTag = factory.createJSDocNamepathType(/*type*/ undefined);
                 terminate: while (true) {
@@ -31298,7 +32106,7 @@
             if (hasDotDotDot) {
                 type = finishNode(factory.createJSDocVariadicType(type), pos);
             }
-            if (token() === 62 /* EqualsToken */) {
+            if (token() === 63 /* EqualsToken */) {
                 nextToken();
                 return finishNode(factory.createJSDocOptionalType(type), pos);
             }
@@ -31306,7 +32114,7 @@
         }
         function parseTypeQuery() {
             var pos = getNodePos();
-            parseExpected(111 /* TypeOfKeyword */);
+            parseExpected(112 /* TypeOfKeyword */);
             return finishNode(factory.createTypeQueryNode(parseEntityName(/*allowReservedWords*/ true)), pos);
         }
         function parseTypeParameter() {
@@ -31314,7 +32122,7 @@
             var name = parseIdentifier();
             var constraint;
             var expression;
-            if (parseOptional(93 /* ExtendsKeyword */)) {
+            if (parseOptional(94 /* ExtendsKeyword */)) {
                 // It's not uncommon for people to write improper constraints to a generic.  If the
                 // user writes a constraint that is an expression and not an actual type, then parse
                 // it out as an expression (so we can recover well), but report that a type is needed
@@ -31333,7 +32141,7 @@
                     expression = parseUnaryExpressionOrHigher();
                 }
             }
-            var defaultType = parseOptional(62 /* EqualsToken */) ? parseType() : undefined;
+            var defaultType = parseOptional(63 /* EqualsToken */) ? parseType() : undefined;
             var node = factory.createTypeParameterDeclaration(name, constraint, defaultType);
             node.expression = expression;
             return finishNode(node, pos);
@@ -31380,7 +32188,7 @@
             //      BindingElement[?Yield,?Await]
             // Decorators are parsed in the outer [Await] context, the rest of the parameter is parsed in the function's [Await] context.
             var decorators = inOuterAwaitContext ? doInAwaitContext(parseDecorators) : parseDecorators();
-            if (token() === 107 /* ThisKeyword */) {
+            if (token() === 108 /* ThisKeyword */) {
                 var node_1 = factory.createParameterDeclaration(decorators, 
                 /*modifiers*/ undefined, 
                 /*dotDotDotToken*/ undefined, createIdentifier(/*isIdentifier*/ true), 
@@ -31477,14 +32285,14 @@
         function parseSignatureMember(kind) {
             var pos = getNodePos();
             var hasJSDoc = hasPrecedingJSDocComment();
-            if (kind === 171 /* ConstructSignature */) {
-                parseExpected(102 /* NewKeyword */);
+            if (kind === 173 /* ConstructSignature */) {
+                parseExpected(103 /* NewKeyword */);
             }
             var typeParameters = parseTypeParameters();
             var parameters = parseParameters(4 /* Type */);
             var type = parseReturnType(58 /* ColonToken */, /*isType*/ true);
             parseTypeMemberSemicolon();
-            var node = kind === 170 /* CallSignature */
+            var node = kind === 172 /* CallSignature */
                 ? factory.createCallSignature(typeParameters, parameters, type)
                 : factory.createConstructSignature(typeParameters, parameters, type);
             return withJSDoc(finishNode(node, pos), hasJSDoc);
@@ -31567,7 +32375,7 @@
                 // Although type literal properties cannot not have initializers, we attempt
                 // to parse an initializer so we can report in the checker that an interface
                 // property or type literal property cannot have an initializer.
-                if (token() === 62 /* EqualsToken */)
+                if (token() === 63 /* EqualsToken */)
                     node.initializer = parseInitializer();
             }
             parseTypeMemberSemicolon();
@@ -31577,8 +32385,8 @@
             // Return true if we have the start of a signature member
             if (token() === 20 /* OpenParenToken */ ||
                 token() === 29 /* LessThanToken */ ||
-                token() === 134 /* GetKeyword */ ||
-                token() === 146 /* SetKeyword */) {
+                token() === 135 /* GetKeyword */ ||
+                token() === 147 /* SetKeyword */) {
                 return true;
             }
             var idToken = false;
@@ -31610,19 +32418,19 @@
         }
         function parseTypeMember() {
             if (token() === 20 /* OpenParenToken */ || token() === 29 /* LessThanToken */) {
-                return parseSignatureMember(170 /* CallSignature */);
+                return parseSignatureMember(172 /* CallSignature */);
             }
-            if (token() === 102 /* NewKeyword */ && lookAhead(nextTokenIsOpenParenOrLessThan)) {
-                return parseSignatureMember(171 /* ConstructSignature */);
+            if (token() === 103 /* NewKeyword */ && lookAhead(nextTokenIsOpenParenOrLessThan)) {
+                return parseSignatureMember(173 /* ConstructSignature */);
             }
             var pos = getNodePos();
             var hasJSDoc = hasPrecedingJSDocComment();
             var modifiers = parseModifiers();
-            if (parseContextualModifier(134 /* GetKeyword */)) {
-                return parseAccessorDeclaration(pos, hasJSDoc, /*decorators*/ undefined, modifiers, 168 /* GetAccessor */);
+            if (parseContextualModifier(135 /* GetKeyword */)) {
+                return parseAccessorDeclaration(pos, hasJSDoc, /*decorators*/ undefined, modifiers, 170 /* GetAccessor */);
             }
-            if (parseContextualModifier(146 /* SetKeyword */)) {
-                return parseAccessorDeclaration(pos, hasJSDoc, /*decorators*/ undefined, modifiers, 169 /* SetAccessor */);
+            if (parseContextualModifier(147 /* SetKeyword */)) {
+                return parseAccessorDeclaration(pos, hasJSDoc, /*decorators*/ undefined, modifiers, 171 /* SetAccessor */);
             }
             if (isIndexSignature()) {
                 return parseIndexSignatureDeclaration(pos, hasJSDoc, /*decorators*/ undefined, modifiers);
@@ -31663,17 +32471,17 @@
         function isStartOfMappedType() {
             nextToken();
             if (token() === 39 /* PlusToken */ || token() === 40 /* MinusToken */) {
-                return nextToken() === 142 /* ReadonlyKeyword */;
+                return nextToken() === 143 /* ReadonlyKeyword */;
             }
-            if (token() === 142 /* ReadonlyKeyword */) {
+            if (token() === 143 /* ReadonlyKeyword */) {
                 nextToken();
             }
-            return token() === 22 /* OpenBracketToken */ && nextTokenIsIdentifier() && nextToken() === 100 /* InKeyword */;
+            return token() === 22 /* OpenBracketToken */ && nextTokenIsIdentifier() && nextToken() === 101 /* InKeyword */;
         }
         function parseMappedTypeParameter() {
             var pos = getNodePos();
             var name = parseIdentifierName();
-            parseExpected(100 /* InKeyword */);
+            parseExpected(101 /* InKeyword */);
             var type = parseType();
             return finishNode(factory.createTypeParameterDeclaration(name, type, /*defaultType*/ undefined), pos);
         }
@@ -31681,15 +32489,15 @@
             var pos = getNodePos();
             parseExpected(18 /* OpenBraceToken */);
             var readonlyToken;
-            if (token() === 142 /* ReadonlyKeyword */ || token() === 39 /* PlusToken */ || token() === 40 /* MinusToken */) {
+            if (token() === 143 /* ReadonlyKeyword */ || token() === 39 /* PlusToken */ || token() === 40 /* MinusToken */) {
                 readonlyToken = parseTokenNode();
-                if (readonlyToken.kind !== 142 /* ReadonlyKeyword */) {
-                    parseExpected(142 /* ReadonlyKeyword */);
+                if (readonlyToken.kind !== 143 /* ReadonlyKeyword */) {
+                    parseExpected(143 /* ReadonlyKeyword */);
                 }
             }
             parseExpected(22 /* OpenBracketToken */);
             var typeParameter = parseMappedTypeParameter();
-            var nameType = parseOptional(126 /* AsKeyword */) ? parseType() : undefined;
+            var nameType = parseOptional(127 /* AsKeyword */) ? parseType() : undefined;
             parseExpected(23 /* CloseBracketToken */);
             var questionToken;
             if (token() === 57 /* QuestionToken */ || token() === 39 /* PlusToken */ || token() === 40 /* MinusToken */) {
@@ -31753,10 +32561,10 @@
         }
         function parseModifiersForConstructorType() {
             var modifiers;
-            if (token() === 125 /* AbstractKeyword */) {
+            if (token() === 126 /* AbstractKeyword */) {
                 var pos = getNodePos();
                 nextToken();
-                var modifier = finishNode(factory.createToken(125 /* AbstractKeyword */), pos);
+                var modifier = finishNode(factory.createToken(126 /* AbstractKeyword */), pos);
                 modifiers = createNodeArray([modifier], pos);
             }
             return modifiers;
@@ -31765,7 +32573,7 @@
             var pos = getNodePos();
             var hasJSDoc = hasPrecedingJSDocComment();
             var modifiers = parseModifiersForConstructorType();
-            var isConstructorType = parseOptional(102 /* NewKeyword */);
+            var isConstructorType = parseOptional(103 /* NewKeyword */);
             var typeParameters = parseTypeParameters();
             var parameters = parseParameters(4 /* Type */);
             var type = parseReturnType(38 /* EqualsGreaterThanToken */, /*isType*/ false);
@@ -31785,7 +32593,7 @@
             if (negative) {
                 nextToken();
             }
-            var expression = token() === 109 /* TrueKeyword */ || token() === 94 /* FalseKeyword */ || token() === 103 /* NullKeyword */ ?
+            var expression = token() === 110 /* TrueKeyword */ || token() === 95 /* FalseKeyword */ || token() === 104 /* NullKeyword */ ?
                 parseTokenNode() :
                 parseLiteralLikeNode(token());
             if (negative) {
@@ -31795,13 +32603,13 @@
         }
         function isStartOfTypeOfImportType() {
             nextToken();
-            return token() === 99 /* ImportKeyword */;
+            return token() === 100 /* ImportKeyword */;
         }
         function parseImportType() {
             sourceFlags |= 1048576 /* PossiblyContainsDynamicImport */;
             var pos = getNodePos();
-            var isTypeOf = parseOptional(111 /* TypeOfKeyword */);
-            parseExpected(99 /* ImportKeyword */);
+            var isTypeOf = parseOptional(112 /* TypeOfKeyword */);
+            parseExpected(100 /* ImportKeyword */);
             parseExpected(20 /* OpenParenToken */);
             var type = parseType();
             parseExpected(21 /* CloseParenToken */);
@@ -31815,19 +32623,19 @@
         }
         function parseNonArrayType() {
             switch (token()) {
-                case 128 /* AnyKeyword */:
-                case 152 /* UnknownKeyword */:
-                case 147 /* StringKeyword */:
-                case 144 /* NumberKeyword */:
-                case 155 /* BigIntKeyword */:
-                case 148 /* SymbolKeyword */:
-                case 131 /* BooleanKeyword */:
-                case 150 /* UndefinedKeyword */:
-                case 141 /* NeverKeyword */:
-                case 145 /* ObjectKeyword */:
+                case 129 /* AnyKeyword */:
+                case 153 /* UnknownKeyword */:
+                case 148 /* StringKeyword */:
+                case 145 /* NumberKeyword */:
+                case 156 /* BigIntKeyword */:
+                case 149 /* SymbolKeyword */:
+                case 132 /* BooleanKeyword */:
+                case 151 /* UndefinedKeyword */:
+                case 142 /* NeverKeyword */:
+                case 146 /* ObjectKeyword */:
                     // If these are followed by a dot, then parse these out as a dotted type reference instead.
                     return tryParse(parseKeywordAndNoDot) || parseTypeReference();
-                case 65 /* AsteriskEqualsToken */:
+                case 66 /* AsteriskEqualsToken */:
                     // If there is '*=', treat it as * followed by postfix =
                     scanner.reScanAsteriskEqualsToken();
                 // falls through
@@ -31839,7 +32647,7 @@
                 // falls through
                 case 57 /* QuestionToken */:
                     return parseJSDocUnknownOrNullableType();
-                case 97 /* FunctionKeyword */:
+                case 98 /* FunctionKeyword */:
                     return parseJSDocFunctionType();
                 case 53 /* ExclamationToken */:
                     return parseJSDocNonNullableType();
@@ -31847,24 +32655,24 @@
                 case 10 /* StringLiteral */:
                 case 8 /* NumericLiteral */:
                 case 9 /* BigIntLiteral */:
-                case 109 /* TrueKeyword */:
-                case 94 /* FalseKeyword */:
-                case 103 /* NullKeyword */:
+                case 110 /* TrueKeyword */:
+                case 95 /* FalseKeyword */:
+                case 104 /* NullKeyword */:
                     return parseLiteralTypeNode();
                 case 40 /* MinusToken */:
                     return lookAhead(nextTokenIsNumericOrBigIntLiteral) ? parseLiteralTypeNode(/*negative*/ true) : parseTypeReference();
-                case 113 /* VoidKeyword */:
+                case 114 /* VoidKeyword */:
                     return parseTokenNode();
-                case 107 /* ThisKeyword */: {
+                case 108 /* ThisKeyword */: {
                     var thisKeyword = parseThisTypeNode();
-                    if (token() === 137 /* IsKeyword */ && !scanner.hasPrecedingLineBreak()) {
+                    if (token() === 138 /* IsKeyword */ && !scanner.hasPrecedingLineBreak()) {
                         return parseThisTypePredicate(thisKeyword);
                     }
                     else {
                         return thisKeyword;
                     }
                 }
-                case 111 /* TypeOfKeyword */:
+                case 112 /* TypeOfKeyword */:
                     return lookAhead(isStartOfTypeOfImportType) ? parseImportType() : parseTypeQuery();
                 case 18 /* OpenBraceToken */:
                     return lookAhead(isStartOfMappedType) ? parseMappedType() : parseTypeLiteral();
@@ -31872,9 +32680,9 @@
                     return parseTupleType();
                 case 20 /* OpenParenToken */:
                     return parseParenthesizedType();
-                case 99 /* ImportKeyword */:
+                case 100 /* ImportKeyword */:
                     return parseImportType();
-                case 127 /* AssertsKeyword */:
+                case 128 /* AssertsKeyword */:
                     return lookAhead(nextTokenIsIdentifierOrKeywordOnSameLine) ? parseAssertsTypePredicate() : parseTypeReference();
                 case 15 /* TemplateHead */:
                     return parseTemplateType();
@@ -31884,44 +32692,44 @@
         }
         function isStartOfType(inStartOfParameter) {
             switch (token()) {
-                case 128 /* AnyKeyword */:
-                case 152 /* UnknownKeyword */:
-                case 147 /* StringKeyword */:
-                case 144 /* NumberKeyword */:
-                case 155 /* BigIntKeyword */:
-                case 131 /* BooleanKeyword */:
-                case 142 /* ReadonlyKeyword */:
-                case 148 /* SymbolKeyword */:
-                case 151 /* UniqueKeyword */:
-                case 113 /* VoidKeyword */:
-                case 150 /* UndefinedKeyword */:
-                case 103 /* NullKeyword */:
-                case 107 /* ThisKeyword */:
-                case 111 /* TypeOfKeyword */:
-                case 141 /* NeverKeyword */:
+                case 129 /* AnyKeyword */:
+                case 153 /* UnknownKeyword */:
+                case 148 /* StringKeyword */:
+                case 145 /* NumberKeyword */:
+                case 156 /* BigIntKeyword */:
+                case 132 /* BooleanKeyword */:
+                case 143 /* ReadonlyKeyword */:
+                case 149 /* SymbolKeyword */:
+                case 152 /* UniqueKeyword */:
+                case 114 /* VoidKeyword */:
+                case 151 /* UndefinedKeyword */:
+                case 104 /* NullKeyword */:
+                case 108 /* ThisKeyword */:
+                case 112 /* TypeOfKeyword */:
+                case 142 /* NeverKeyword */:
                 case 18 /* OpenBraceToken */:
                 case 22 /* OpenBracketToken */:
                 case 29 /* LessThanToken */:
                 case 51 /* BarToken */:
                 case 50 /* AmpersandToken */:
-                case 102 /* NewKeyword */:
+                case 103 /* NewKeyword */:
                 case 10 /* StringLiteral */:
                 case 8 /* NumericLiteral */:
                 case 9 /* BigIntLiteral */:
-                case 109 /* TrueKeyword */:
-                case 94 /* FalseKeyword */:
-                case 145 /* ObjectKeyword */:
+                case 110 /* TrueKeyword */:
+                case 95 /* FalseKeyword */:
+                case 146 /* ObjectKeyword */:
                 case 41 /* AsteriskToken */:
                 case 57 /* QuestionToken */:
                 case 53 /* ExclamationToken */:
                 case 25 /* DotDotDotToken */:
-                case 135 /* InferKeyword */:
-                case 99 /* ImportKeyword */:
-                case 127 /* AssertsKeyword */:
+                case 136 /* InferKeyword */:
+                case 100 /* ImportKeyword */:
+                case 128 /* AssertsKeyword */:
                 case 14 /* NoSubstitutionTemplateLiteral */:
                 case 15 /* TemplateHead */:
                     return true;
-                case 97 /* FunctionKeyword */:
+                case 98 /* FunctionKeyword */:
                     return !inStartOfParameter;
                 case 40 /* MinusToken */:
                     return !inStartOfParameter && lookAhead(nextTokenIsNumericOrBigIntLiteral);
@@ -31985,17 +32793,17 @@
         }
         function parseInferType() {
             var pos = getNodePos();
-            parseExpected(135 /* InferKeyword */);
+            parseExpected(136 /* InferKeyword */);
             return finishNode(factory.createInferTypeNode(parseTypeParameterOfInferType()), pos);
         }
         function parseTypeOperatorOrHigher() {
             var operator = token();
             switch (operator) {
-                case 138 /* KeyOfKeyword */:
-                case 151 /* UniqueKeyword */:
-                case 142 /* ReadonlyKeyword */:
+                case 139 /* KeyOfKeyword */:
+                case 152 /* UniqueKeyword */:
+                case 143 /* ReadonlyKeyword */:
                     return parseTypeOperator(operator);
-                case 135 /* InferKeyword */:
+                case 136 /* InferKeyword */:
                     return parseInferType();
             }
             return parsePostfixTypeOrHigher();
@@ -32045,7 +32853,7 @@
         }
         function nextTokenIsNewKeyword() {
             nextToken();
-            return token() === 102 /* NewKeyword */;
+            return token() === 103 /* NewKeyword */;
         }
         function isStartOfFunctionTypeOrConstructorType() {
             if (token() === 29 /* LessThanToken */) {
@@ -32054,15 +32862,15 @@
             if (token() === 20 /* OpenParenToken */ && lookAhead(isUnambiguouslyStartOfFunctionType)) {
                 return true;
             }
-            return token() === 102 /* NewKeyword */ ||
-                token() === 125 /* AbstractKeyword */ && lookAhead(nextTokenIsNewKeyword);
+            return token() === 103 /* NewKeyword */ ||
+                token() === 126 /* AbstractKeyword */ && lookAhead(nextTokenIsNewKeyword);
         }
         function skipParameterStart() {
             if (ts.isModifierKind(token())) {
                 // Skip modifiers
                 parseModifiers();
             }
-            if (isIdentifier() || token() === 107 /* ThisKeyword */) {
+            if (isIdentifier() || token() === 108 /* ThisKeyword */) {
                 nextToken();
                 return true;
             }
@@ -32085,7 +32893,7 @@
                 // We successfully skipped modifiers (if any) and an identifier or binding pattern,
                 // now see if we have something that indicates a parameter declaration
                 if (token() === 58 /* ColonToken */ || token() === 27 /* CommaToken */ ||
-                    token() === 57 /* QuestionToken */ || token() === 62 /* EqualsToken */) {
+                    token() === 57 /* QuestionToken */ || token() === 63 /* EqualsToken */) {
                     // ( xxx :
                     // ( xxx ,
                     // ( xxx ?
@@ -32115,16 +32923,16 @@
         }
         function parseTypePredicatePrefix() {
             var id = parseIdentifier();
-            if (token() === 137 /* IsKeyword */ && !scanner.hasPrecedingLineBreak()) {
+            if (token() === 138 /* IsKeyword */ && !scanner.hasPrecedingLineBreak()) {
                 nextToken();
                 return id;
             }
         }
         function parseAssertsTypePredicate() {
             var pos = getNodePos();
-            var assertsModifier = parseExpectedToken(127 /* AssertsKeyword */);
-            var parameterName = token() === 107 /* ThisKeyword */ ? parseThisTypeNode() : parseIdentifier();
-            var type = parseOptional(137 /* IsKeyword */) ? parseType() : undefined;
+            var assertsModifier = parseExpectedToken(128 /* AssertsKeyword */);
+            var parameterName = token() === 108 /* ThisKeyword */ ? parseThisTypeNode() : parseIdentifier();
+            var type = parseOptional(138 /* IsKeyword */) ? parseType() : undefined;
             return finishNode(factory.createTypePredicateNode(assertsModifier, parameterName, type), pos);
         }
         function parseType() {
@@ -32138,7 +32946,7 @@
             }
             var pos = getNodePos();
             var type = parseUnionTypeOrHigher();
-            if (!noConditionalTypes && !scanner.hasPrecedingLineBreak() && parseOptional(93 /* ExtendsKeyword */)) {
+            if (!noConditionalTypes && !scanner.hasPrecedingLineBreak() && parseOptional(94 /* ExtendsKeyword */)) {
                 // The type following 'extends' is not permitted to be another conditional type
                 var extendsType = parseTypeWorker(/*noConditionalTypes*/ true);
                 parseExpected(57 /* QuestionToken */);
@@ -32155,11 +32963,11 @@
         // EXPRESSIONS
         function isStartOfLeftHandSideExpression() {
             switch (token()) {
-                case 107 /* ThisKeyword */:
-                case 105 /* SuperKeyword */:
-                case 103 /* NullKeyword */:
-                case 109 /* TrueKeyword */:
-                case 94 /* FalseKeyword */:
+                case 108 /* ThisKeyword */:
+                case 106 /* SuperKeyword */:
+                case 104 /* NullKeyword */:
+                case 110 /* TrueKeyword */:
+                case 95 /* FalseKeyword */:
                 case 8 /* NumericLiteral */:
                 case 9 /* BigIntLiteral */:
                 case 10 /* StringLiteral */:
@@ -32168,14 +32976,14 @@
                 case 20 /* OpenParenToken */:
                 case 22 /* OpenBracketToken */:
                 case 18 /* OpenBraceToken */:
-                case 97 /* FunctionKeyword */:
-                case 83 /* ClassKeyword */:
-                case 102 /* NewKeyword */:
+                case 98 /* FunctionKeyword */:
+                case 84 /* ClassKeyword */:
+                case 103 /* NewKeyword */:
                 case 43 /* SlashToken */:
-                case 67 /* SlashEqualsToken */:
-                case 78 /* Identifier */:
+                case 68 /* SlashEqualsToken */:
+                case 79 /* Identifier */:
                     return true;
-                case 99 /* ImportKeyword */:
+                case 100 /* ImportKeyword */:
                     return lookAhead(nextTokenIsOpenParenOrLessThanOrDot);
                 default:
                     return isIdentifier();
@@ -32190,15 +32998,15 @@
                 case 40 /* MinusToken */:
                 case 54 /* TildeToken */:
                 case 53 /* ExclamationToken */:
-                case 88 /* DeleteKeyword */:
-                case 111 /* TypeOfKeyword */:
-                case 113 /* VoidKeyword */:
+                case 89 /* DeleteKeyword */:
+                case 112 /* TypeOfKeyword */:
+                case 114 /* VoidKeyword */:
                 case 45 /* PlusPlusToken */:
                 case 46 /* MinusMinusToken */:
                 case 29 /* LessThanToken */:
-                case 130 /* AwaitKeyword */:
-                case 124 /* YieldKeyword */:
-                case 79 /* PrivateIdentifier */:
+                case 131 /* AwaitKeyword */:
+                case 125 /* YieldKeyword */:
+                case 80 /* PrivateIdentifier */:
                     // Yield/await always starts an expression.  Either it is an identifier (in which case
                     // it is definitely an expression).  Or it's a keyword (either because we're in
                     // a generator or async function, or in strict mode (or both)) and it started a yield or await expression.
@@ -32217,8 +33025,8 @@
         function isStartOfExpressionStatement() {
             // As per the grammar, none of '{' or 'function' or 'class' can start an expression statement.
             return token() !== 18 /* OpenBraceToken */ &&
-                token() !== 97 /* FunctionKeyword */ &&
-                token() !== 83 /* ClassKeyword */ &&
+                token() !== 98 /* FunctionKeyword */ &&
+                token() !== 84 /* ClassKeyword */ &&
                 token() !== 59 /* AtToken */ &&
                 isStartOfExpression();
         }
@@ -32243,7 +33051,7 @@
             return expr;
         }
         function parseInitializer() {
-            return parseOptional(62 /* EqualsToken */) ? parseAssignmentExpressionOrHigher() : undefined;
+            return parseOptional(63 /* EqualsToken */) ? parseAssignmentExpressionOrHigher() : undefined;
         }
         function parseAssignmentExpressionOrHigher() {
             //  AssignmentExpression[in,yield]:
@@ -32289,7 +33097,7 @@
             // To avoid a look-ahead, we did not handle the case of an arrow function with a single un-parenthesized
             // parameter ('x => ...') above. We handle it here by checking if the parsed expression was a single
             // identifier and the current token is an arrow.
-            if (expr.kind === 78 /* Identifier */ && token() === 38 /* EqualsGreaterThanToken */) {
+            if (expr.kind === 79 /* Identifier */ && token() === 38 /* EqualsGreaterThanToken */) {
                 return parseSimpleArrowFunctionExpression(pos, expr, /*asyncModifier*/ undefined);
             }
             // Now see if we might be in cases '2' or '3'.
@@ -32305,7 +33113,7 @@
             return parseConditionalExpressionRest(expr, pos);
         }
         function isYieldExpression() {
-            if (token() === 124 /* YieldKeyword */) {
+            if (token() === 125 /* YieldKeyword */) {
                 // If we have a 'yield' keyword, and this is a context where yield expressions are
                 // allowed, then definitely parse out a yield expression.
                 if (inYieldContext()) {
@@ -32385,7 +33193,7 @@
         //  Unknown     -> There *might* be a parenthesized arrow function here.
         //                 Speculatively look ahead to be sure, and rollback if not.
         function isParenthesizedArrowFunctionExpression() {
-            if (token() === 20 /* OpenParenToken */ || token() === 29 /* LessThanToken */ || token() === 129 /* AsyncKeyword */) {
+            if (token() === 20 /* OpenParenToken */ || token() === 29 /* LessThanToken */ || token() === 130 /* AsyncKeyword */) {
                 return lookAhead(isParenthesizedArrowFunctionExpressionWorker);
             }
             if (token() === 38 /* EqualsGreaterThanToken */) {
@@ -32398,7 +33206,7 @@
             return 0 /* False */;
         }
         function isParenthesizedArrowFunctionExpressionWorker() {
-            if (token() === 129 /* AsyncKeyword */) {
+            if (token() === 130 /* AsyncKeyword */) {
                 nextToken();
                 if (scanner.hasPrecedingLineBreak()) {
                     return 0 /* False */;
@@ -32442,13 +33250,13 @@
                 // Check for "(xxx yyy", where xxx is a modifier and yyy is an identifier. This
                 // isn't actually allowed, but we want to treat it as a lambda so we can provide
                 // a good error message.
-                if (ts.isModifierKind(second) && second !== 129 /* AsyncKeyword */ && lookAhead(nextTokenIsIdentifier)) {
+                if (ts.isModifierKind(second) && second !== 130 /* AsyncKeyword */ && lookAhead(nextTokenIsIdentifier)) {
                     return 1 /* True */;
                 }
                 // If we had "(" followed by something that's not an identifier,
                 // then this definitely doesn't look like a lambda.  "this" is not
                 // valid, but we want to parse it and then give a semantic error.
-                if (!isIdentifier() && second !== 107 /* ThisKeyword */) {
+                if (!isIdentifier() && second !== 108 /* ThisKeyword */) {
                     return 0 /* False */;
                 }
                 switch (nextToken()) {
@@ -32459,13 +33267,13 @@
                     case 57 /* QuestionToken */:
                         nextToken();
                         // If we have "(a?:" or "(a?," or "(a?=" or "(a?)" then it is definitely a lambda.
-                        if (token() === 58 /* ColonToken */ || token() === 27 /* CommaToken */ || token() === 62 /* EqualsToken */ || token() === 21 /* CloseParenToken */) {
+                        if (token() === 58 /* ColonToken */ || token() === 27 /* CommaToken */ || token() === 63 /* EqualsToken */ || token() === 21 /* CloseParenToken */) {
                             return 1 /* True */;
                         }
                         // Otherwise it is definitely not a lambda.
                         return 0 /* False */;
                     case 27 /* CommaToken */:
-                    case 62 /* EqualsToken */:
+                    case 63 /* EqualsToken */:
                     case 21 /* CloseParenToken */:
                         // If we have "(a," or "(a=" or "(a)" this *could* be an arrow function
                         return 2 /* Unknown */;
@@ -32484,10 +33292,10 @@
                 if (languageVariant === 1 /* JSX */) {
                     var isArrowFunctionInJsx = lookAhead(function () {
                         var third = nextToken();
-                        if (third === 93 /* ExtendsKeyword */) {
+                        if (third === 94 /* ExtendsKeyword */) {
                             var fourth = nextToken();
                             switch (fourth) {
-                                case 62 /* EqualsToken */:
+                                case 63 /* EqualsToken */:
                                 case 31 /* GreaterThanToken */:
                                     return false;
                                 default:
@@ -32521,7 +33329,7 @@
         }
         function tryParseAsyncSimpleArrowFunctionExpression() {
             // We do a check here so that we won't be doing unnecessarily call to "lookAhead"
-            if (token() === 129 /* AsyncKeyword */) {
+            if (token() === 130 /* AsyncKeyword */) {
                 if (lookAhead(isUnParenthesizedAsyncArrowFunctionWorker) === 1 /* True */) {
                     var pos = getNodePos();
                     var asyncModifier = parseModifiersForArrowFunction();
@@ -32535,7 +33343,7 @@
             // AsyncArrowFunctionExpression:
             //      1) async[no LineTerminator here]AsyncArrowBindingIdentifier[?Yield][no LineTerminator here]=>AsyncConciseBody[?In]
             //      2) CoverCallExpressionAndAsyncArrowHead[?Yield, ?Await][no LineTerminator here]=>AsyncConciseBody[?In]
-            if (token() === 129 /* AsyncKeyword */) {
+            if (token() === 130 /* AsyncKeyword */) {
                 nextToken();
                 // If the "async" is followed by "=>" token then it is not a beginning of an async arrow-function
                 // but instead a simple arrow-function which will be parsed inside "parseAssignmentExpressionOrHigher"
@@ -32544,7 +33352,7 @@
                 }
                 // Check for un-parenthesized AsyncArrowFunction
                 var expr = parseBinaryExpressionOrHigher(0 /* Lowest */);
-                if (!scanner.hasPrecedingLineBreak() && expr.kind === 78 /* Identifier */ && token() === 38 /* EqualsGreaterThanToken */) {
+                if (!scanner.hasPrecedingLineBreak() && expr.kind === 79 /* Identifier */ && token() === 38 /* EqualsGreaterThanToken */) {
                     return 1 /* True */;
                 }
             }
@@ -32609,8 +33417,8 @@
                 return parseFunctionBlock(isAsync ? 2 /* Await */ : 0 /* None */);
             }
             if (token() !== 26 /* SemicolonToken */ &&
-                token() !== 97 /* FunctionKeyword */ &&
-                token() !== 83 /* ClassKeyword */ &&
+                token() !== 98 /* FunctionKeyword */ &&
+                token() !== 84 /* ClassKeyword */ &&
                 isStartOfStatement() &&
                 !isStartOfExpressionStatement()) {
                 // Check if we got a plain statement (i.e. no expression-statements, no function/class expressions/declarations)
@@ -32648,7 +33456,7 @@
             var colonToken;
             return finishNode(factory.createConditionalExpression(leftOperand, questionToken, doOutsideOfContext(disallowInAndDecoratorContext, parseAssignmentExpressionOrHigher), colonToken = parseExpectedToken(58 /* ColonToken */), ts.nodeIsPresent(colonToken)
                 ? parseAssignmentExpressionOrHigher()
-                : createMissingNode(78 /* Identifier */, /*reportAtCurrentPosition*/ false, ts.Diagnostics._0_expected, ts.tokenToString(58 /* ColonToken */))), pos);
+                : createMissingNode(79 /* Identifier */, /*reportAtCurrentPosition*/ false, ts.Diagnostics._0_expected, ts.tokenToString(58 /* ColonToken */))), pos);
         }
         function parseBinaryExpressionOrHigher(precedence) {
             var pos = getNodePos();
@@ -32656,7 +33464,7 @@
             return parseBinaryExpressionRest(precedence, leftOperand, pos);
         }
         function isInOrOfKeyword(t) {
-            return t === 100 /* InKeyword */ || t === 157 /* OfKeyword */;
+            return t === 101 /* InKeyword */ || t === 158 /* OfKeyword */;
         }
         function parseBinaryExpressionRest(precedence, leftOperand, pos) {
             while (true) {
@@ -32691,10 +33499,10 @@
                 if (!consumeCurrentOperator) {
                     break;
                 }
-                if (token() === 100 /* InKeyword */ && inDisallowInContext()) {
+                if (token() === 101 /* InKeyword */ && inDisallowInContext()) {
                     break;
                 }
-                if (token() === 126 /* AsKeyword */) {
+                if (token() === 127 /* AsKeyword */) {
                     // Make sure we *do* perform ASI for constructs like this:
                     //    var x = foo
                     //    as (Bar)
@@ -32715,7 +33523,7 @@
             return leftOperand;
         }
         function isBinaryOperator() {
-            if (inDisallowInContext() && token() === 100 /* InKeyword */) {
+            if (inDisallowInContext() && token() === 101 /* InKeyword */) {
                 return false;
             }
             return ts.getBinaryOperatorPrecedence(token()) > 0;
@@ -32743,7 +33551,7 @@
             return finishNode(factory.createVoidExpression(nextTokenAnd(parseSimpleUnaryExpression)), pos);
         }
         function isAwaitExpression() {
-            if (token() === 130 /* AwaitKeyword */) {
+            if (token() === 131 /* AwaitKeyword */) {
                 if (inAwaitContext()) {
                     return true;
                 }
@@ -32796,7 +33604,7 @@
             if (token() === 42 /* AsteriskAsteriskToken */) {
                 var pos = ts.skipTrivia(sourceText, simpleUnaryExpression.pos);
                 var end = simpleUnaryExpression.end;
-                if (simpleUnaryExpression.kind === 207 /* TypeAssertionExpression */) {
+                if (simpleUnaryExpression.kind === 209 /* TypeAssertionExpression */) {
                     parseErrorAt(pos, end, ts.Diagnostics.A_type_assertion_expression_is_not_allowed_in_the_left_hand_side_of_an_exponentiation_expression_Consider_enclosing_the_expression_in_parentheses);
                 }
                 else {
@@ -32826,18 +33634,18 @@
                 case 54 /* TildeToken */:
                 case 53 /* ExclamationToken */:
                     return parsePrefixUnaryExpression();
-                case 88 /* DeleteKeyword */:
+                case 89 /* DeleteKeyword */:
                     return parseDeleteExpression();
-                case 111 /* TypeOfKeyword */:
+                case 112 /* TypeOfKeyword */:
                     return parseTypeOfExpression();
-                case 113 /* VoidKeyword */:
+                case 114 /* VoidKeyword */:
                     return parseVoidExpression();
                 case 29 /* LessThanToken */:
                     // This is modified UnaryExpression grammar in TypeScript
                     //  UnaryExpression (modified):
                     //      < type > UnaryExpression
                     return parseTypeAssertion();
-                case 130 /* AwaitKeyword */:
+                case 131 /* AwaitKeyword */:
                     if (isAwaitExpression()) {
                         return parseAwaitExpression();
                     }
@@ -32864,10 +33672,10 @@
                 case 40 /* MinusToken */:
                 case 54 /* TildeToken */:
                 case 53 /* ExclamationToken */:
-                case 88 /* DeleteKeyword */:
-                case 111 /* TypeOfKeyword */:
-                case 113 /* VoidKeyword */:
-                case 130 /* AwaitKeyword */:
+                case 89 /* DeleteKeyword */:
+                case 112 /* TypeOfKeyword */:
+                case 114 /* VoidKeyword */:
+                case 131 /* AwaitKeyword */:
                     return false;
                 case 29 /* LessThanToken */:
                     // If we are not in JSX context, we are parsing TypeAssertion which is an UnaryExpression
@@ -32943,7 +33751,7 @@
             // or starts the beginning of the first four CallExpression productions.
             var pos = getNodePos();
             var expression;
-            if (token() === 99 /* ImportKeyword */) {
+            if (token() === 100 /* ImportKeyword */) {
                 if (lookAhead(nextTokenIsOpenParenOrLessThan)) {
                     // We don't want to eagerly consume all import keyword as import call expression so we look ahead to find "("
                     // For example:
@@ -32957,7 +33765,7 @@
                     // This is an 'import.*' metaproperty (i.e. 'import.meta')
                     nextToken(); // advance past the 'import'
                     nextToken(); // advance past the dot
-                    expression = finishNode(factory.createMetaProperty(99 /* ImportKeyword */, parseIdentifierName()), pos);
+                    expression = finishNode(factory.createMetaProperty(100 /* ImportKeyword */, parseIdentifierName()), pos);
                     sourceFlags |= 2097152 /* PossiblyContainsImportMeta */;
                 }
                 else {
@@ -32965,7 +33773,7 @@
                 }
             }
             else {
-                expression = token() === 105 /* SuperKeyword */ ? parseSuperExpression() : parseMemberExpressionOrHigher();
+                expression = token() === 106 /* SuperKeyword */ ? parseSuperExpression() : parseMemberExpressionOrHigher();
             }
             // Now, we *may* be complete.  However, we might have consumed the start of a
             // CallExpression or OptionalExpression.  As such, we need to consume the rest
@@ -33043,23 +33851,45 @@
             // private names will never work with `super` (`super.#foo`), but that's a semantic error, not syntactic
             return finishNode(factory.createPropertyAccessExpression(expression, parseRightSideOfDot(/*allowIdentifierNames*/ true, /*allowPrivateIdentifiers*/ true)), pos);
         }
-        function parseJsxElementOrSelfClosingElementOrFragment(inExpressionContext, topInvalidNodePosition) {
+        function parseJsxElementOrSelfClosingElementOrFragment(inExpressionContext, topInvalidNodePosition, openingTag) {
             var pos = getNodePos();
             var opening = parseJsxOpeningOrSelfClosingElementOrOpeningFragment(inExpressionContext);
             var result;
-            if (opening.kind === 276 /* JsxOpeningElement */) {
+            if (opening.kind === 278 /* JsxOpeningElement */) {
                 var children = parseJsxChildren(opening);
-                var closingElement = parseJsxClosingElement(inExpressionContext);
-                if (!tagNamesAreEquivalent(opening.tagName, closingElement.tagName)) {
-                    parseErrorAtRange(closingElement, ts.Diagnostics.Expected_corresponding_JSX_closing_tag_for_0, ts.getTextOfNodeFromSourceText(sourceText, opening.tagName));
+                var closingElement = void 0;
+                var lastChild = children[children.length - 1];
+                if ((lastChild === null || lastChild === void 0 ? void 0 : lastChild.kind) === 276 /* JsxElement */
+                    && !tagNamesAreEquivalent(lastChild.openingElement.tagName, lastChild.closingElement.tagName)
+                    && tagNamesAreEquivalent(opening.tagName, lastChild.closingElement.tagName)) {
+                    // when an unclosed JsxOpeningElement incorrectly parses its parent's JsxClosingElement,
+                    // restructure (<div>(...<span></div>)) --> (<div>(...<span></span>)</div>)
+                    // (no need to error; the parent will error)
+                    var end = lastChild.openingElement.end; // newly-created children and closing are both zero-width end/end
+                    var newLast = finishNode(factory.createJsxElement(lastChild.openingElement, createNodeArray([], end, end), finishNode(factory.createJsxClosingElement(finishNode(factory.createIdentifier(""), end, end)), end, end)), lastChild.openingElement.pos, end);
+                    children = createNodeArray(__spreadArray(__spreadArray([], children.slice(0, children.length - 1), true), [newLast], false), children.pos, end);
+                    closingElement = lastChild.closingElement;
+                }
+                else {
+                    closingElement = parseJsxClosingElement(opening, inExpressionContext);
+                    if (!tagNamesAreEquivalent(opening.tagName, closingElement.tagName)) {
+                        if (openingTag && ts.isJsxOpeningElement(openingTag) && tagNamesAreEquivalent(closingElement.tagName, openingTag.tagName)) {
+                            // opening incorrectly matched with its parent's closing -- put error on opening
+                            parseErrorAtRange(opening.tagName, ts.Diagnostics.JSX_element_0_has_no_corresponding_closing_tag, ts.getTextOfNodeFromSourceText(sourceText, opening.tagName));
+                        }
+                        else {
+                            // other opening/closing mismatches -- put error on closing
+                            parseErrorAtRange(closingElement.tagName, ts.Diagnostics.Expected_corresponding_JSX_closing_tag_for_0, ts.getTextOfNodeFromSourceText(sourceText, opening.tagName));
+                        }
+                    }
                 }
                 result = finishNode(factory.createJsxElement(opening, children, closingElement), pos);
             }
-            else if (opening.kind === 279 /* JsxOpeningFragment */) {
+            else if (opening.kind === 281 /* JsxOpeningFragment */) {
                 result = finishNode(factory.createJsxFragment(opening, parseJsxChildren(opening), parseJsxClosingFragment(inExpressionContext)), pos);
             }
             else {
-                ts.Debug.assert(opening.kind === 275 /* JsxSelfClosingElement */);
+                ts.Debug.assert(opening.kind === 277 /* JsxSelfClosingElement */);
                 // Nothing else to do for self-closing elements
                 result = opening;
             }
@@ -33113,7 +33943,7 @@
                 case 18 /* OpenBraceToken */:
                     return parseJsxExpression(/*inExpressionContext*/ false);
                 case 29 /* LessThanToken */:
-                    return parseJsxElementOrSelfClosingElementOrFragment(/*inExpressionContext*/ false);
+                    return parseJsxElementOrSelfClosingElementOrFragment(/*inExpressionContext*/ false, /*topInvalidNodePosition*/ undefined, openingTag);
                 default:
                     return ts.Debug.assertNever(token);
             }
@@ -33128,6 +33958,13 @@
                 if (!child)
                     break;
                 list.push(child);
+                if (ts.isJsxOpeningElement(openingTag)
+                    && (child === null || child === void 0 ? void 0 : child.kind) === 276 /* JsxElement */
+                    && !tagNamesAreEquivalent(child.openingElement.tagName, child.closingElement.tagName)
+                    && tagNamesAreEquivalent(openingTag.tagName, child.closingElement.tagName)) {
+                    // stop after parsing a mismatched child like <div>...(<span></div>) in order to reattach the </div> higher
+                    break;
+                }
             }
             parsingContext = saveParsingContext;
             return createNodeArray(list, listPos);
@@ -33157,12 +33994,14 @@
             }
             else {
                 parseExpected(43 /* SlashToken */);
-                if (inExpressionContext) {
-                    parseExpected(31 /* GreaterThanToken */);
-                }
-                else {
-                    parseExpected(31 /* GreaterThanToken */, /*diagnostic*/ undefined, /*shouldAdvance*/ false);
-                    scanJsxText();
+                if (parseExpected(31 /* GreaterThanToken */, /*diagnostic*/ undefined, /*shouldAdvance*/ false)) {
+                    // manually advance the scanner in order to look for jsx text inside jsx
+                    if (inExpressionContext) {
+                        nextToken();
+                    }
+                    else {
+                        scanJsxText();
+                    }
                 }
                 node = factory.createJsxSelfClosingElement(tagName, typeArguments, attributes);
             }
@@ -33176,7 +34015,7 @@
             //      primaryExpression in the form of an identifier and "this" keyword
             // We can't just simply use parseLeftHandSideExpressionOrHigher because then we will start consider class,function etc as a keyword
             // We only want to consider "this" as a primaryExpression
-            var expression = token() === 107 /* ThisKeyword */ ?
+            var expression = token() === 108 /* ThisKeyword */ ?
                 parseTokenNode() : parseIdentifierName();
             while (parseOptional(24 /* DotToken */)) {
                 expression = finishNode(factory.createPropertyAccessExpression(expression, parseRightSideOfDot(/*allowIdentifierNames*/ true, /*allowPrivateIdentifiers*/ false)), pos);
@@ -33213,7 +34052,7 @@
             }
             scanJsxIdentifier();
             var pos = getNodePos();
-            return finishNode(factory.createJsxAttribute(parseIdentifierName(), token() !== 62 /* EqualsToken */ ? undefined :
+            return finishNode(factory.createJsxAttribute(parseIdentifierName(), token() !== 63 /* EqualsToken */ ? undefined :
                 scanJsxAttributeValue() === 10 /* StringLiteral */ ? parseLiteralNode() :
                     parseJsxExpression(/*inExpressionContext*/ true)), pos);
         }
@@ -33225,16 +34064,18 @@
             parseExpected(19 /* CloseBraceToken */);
             return finishNode(factory.createJsxSpreadAttribute(expression), pos);
         }
-        function parseJsxClosingElement(inExpressionContext) {
+        function parseJsxClosingElement(open, inExpressionContext) {
             var pos = getNodePos();
             parseExpected(30 /* LessThanSlashToken */);
             var tagName = parseJsxElementName();
-            if (inExpressionContext) {
-                parseExpected(31 /* GreaterThanToken */);
-            }
-            else {
-                parseExpected(31 /* GreaterThanToken */, /*diagnostic*/ undefined, /*shouldAdvance*/ false);
-                scanJsxText();
+            if (parseExpected(31 /* GreaterThanToken */, /*diagnostic*/ undefined, /*shouldAdvance*/ false)) {
+                // manually advance the scanner in order to look for jsx text inside jsx
+                if (inExpressionContext || !tagNamesAreEquivalent(open.tagName, tagName)) {
+                    nextToken();
+                }
+                else {
+                    scanJsxText();
+                }
             }
             return finishNode(factory.createJsxClosingElement(tagName), pos);
         }
@@ -33244,12 +34085,14 @@
             if (ts.tokenIsIdentifierOrKeyword(token())) {
                 parseErrorAtRange(parseJsxElementName(), ts.Diagnostics.Expected_corresponding_closing_tag_for_JSX_fragment);
             }
-            if (inExpressionContext) {
-                parseExpected(31 /* GreaterThanToken */);
-            }
-            else {
-                parseExpected(31 /* GreaterThanToken */, /*diagnostic*/ undefined, /*shouldAdvance*/ false);
-                scanJsxText();
+            if (parseExpected(31 /* GreaterThanToken */, /*diagnostic*/ undefined, /*shouldAdvance*/ false)) {
+                // manually advance the scanner in order to look for jsx text inside jsx
+                if (inExpressionContext) {
+                    nextToken();
+                }
+                else {
+                    scanJsxText();
+                }
             }
             return finishNode(factory.createJsxJsxClosingFragment(), pos);
         }
@@ -33306,7 +34149,7 @@
         function parseElementAccessExpressionRest(pos, expression, questionDotToken) {
             var argumentExpression;
             if (token() === 23 /* CloseBracketToken */) {
-                argumentExpression = createMissingNode(78 /* Identifier */, /*reportAtCurrentPosition*/ true, ts.Diagnostics.An_element_access_expression_should_take_an_argument);
+                argumentExpression = createMissingNode(79 /* Identifier */, /*reportAtCurrentPosition*/ true, ts.Diagnostics.An_element_access_expression_should_take_an_argument);
             }
             else {
                 var argument = allowInAnd(parseExpression);
@@ -33401,7 +34244,7 @@
                 }
                 if (questionDotToken) {
                     // We failed to parse anything, so report a missing identifier here.
-                    var name = createMissingNode(78 /* Identifier */, /*reportAtCurrentPosition*/ false, ts.Diagnostics.Identifier_expected);
+                    var name = createMissingNode(79 /* Identifier */, /*reportAtCurrentPosition*/ false, ts.Diagnostics.Identifier_expected);
                     expression = finishNode(factory.createPropertyAccessChain(expression, questionDotToken, name), pos);
                 }
                 break;
@@ -33482,11 +34325,11 @@
                 case 10 /* StringLiteral */:
                 case 14 /* NoSubstitutionTemplateLiteral */:
                     return parseLiteralNode();
-                case 107 /* ThisKeyword */:
-                case 105 /* SuperKeyword */:
-                case 103 /* NullKeyword */:
-                case 109 /* TrueKeyword */:
-                case 94 /* FalseKeyword */:
+                case 108 /* ThisKeyword */:
+                case 106 /* SuperKeyword */:
+                case 104 /* NullKeyword */:
+                case 110 /* TrueKeyword */:
+                case 95 /* FalseKeyword */:
                     return parseTokenNode();
                 case 20 /* OpenParenToken */:
                     return parseParenthesizedExpression();
@@ -33494,7 +34337,7 @@
                     return parseArrayLiteralExpression();
                 case 18 /* OpenBraceToken */:
                     return parseObjectLiteralExpression();
-                case 129 /* AsyncKeyword */:
+                case 130 /* AsyncKeyword */:
                     // Async arrow functions are parsed earlier in parseAssignmentExpressionOrHigher.
                     // If we encounter `async [no LineTerminator here] function` then this is an async
                     // function; otherwise, its an identifier.
@@ -33502,14 +34345,14 @@
                         break;
                     }
                     return parseFunctionExpression();
-                case 83 /* ClassKeyword */:
+                case 84 /* ClassKeyword */:
                     return parseClassExpression();
-                case 97 /* FunctionKeyword */:
+                case 98 /* FunctionKeyword */:
                     return parseFunctionExpression();
-                case 102 /* NewKeyword */:
+                case 103 /* NewKeyword */:
                     return parseNewExpressionOrNewDotTarget();
                 case 43 /* SlashToken */:
-                case 67 /* SlashEqualsToken */:
+                case 68 /* SlashEqualsToken */:
                     if (reScanSlashToken() === 13 /* RegularExpressionLiteral */) {
                         return parseLiteralNode();
                     }
@@ -33558,11 +34401,11 @@
             }
             var decorators = parseDecorators();
             var modifiers = parseModifiers();
-            if (parseContextualModifier(134 /* GetKeyword */)) {
-                return parseAccessorDeclaration(pos, hasJSDoc, decorators, modifiers, 168 /* GetAccessor */);
+            if (parseContextualModifier(135 /* GetKeyword */)) {
+                return parseAccessorDeclaration(pos, hasJSDoc, decorators, modifiers, 170 /* GetAccessor */);
             }
-            if (parseContextualModifier(146 /* SetKeyword */)) {
-                return parseAccessorDeclaration(pos, hasJSDoc, decorators, modifiers, 169 /* SetAccessor */);
+            if (parseContextualModifier(147 /* SetKeyword */)) {
+                return parseAccessorDeclaration(pos, hasJSDoc, decorators, modifiers, 171 /* SetAccessor */);
             }
             var asteriskToken = parseOptionalToken(41 /* AsteriskToken */);
             var tokenIsIdentifier = isIdentifier();
@@ -33581,7 +34424,7 @@
             var node;
             var isShorthandPropertyAssignment = tokenIsIdentifier && (token() !== 58 /* ColonToken */);
             if (isShorthandPropertyAssignment) {
-                var equalsToken = parseOptionalToken(62 /* EqualsToken */);
+                var equalsToken = parseOptionalToken(63 /* EqualsToken */);
                 var objectAssignmentInitializer = equalsToken ? allowInAnd(parseAssignmentExpressionOrHigher) : undefined;
                 node = factory.createShorthandPropertyAssignment(name, objectAssignmentInitializer);
                 // Save equals token for error reporting.
@@ -33620,14 +34463,12 @@
             //
             // FunctionExpression:
             //      function BindingIdentifier[opt](FormalParameters){ FunctionBody }
-            var saveDecoratorContext = inDecoratorContext();
-            if (saveDecoratorContext) {
-                setDecoratorContext(/*val*/ false);
-            }
+            var savedDecoratorContext = inDecoratorContext();
+            setDecoratorContext(/*val*/ false);
             var pos = getNodePos();
             var hasJSDoc = hasPrecedingJSDocComment();
             var modifiers = parseModifiers();
-            parseExpected(97 /* FunctionKeyword */);
+            parseExpected(98 /* FunctionKeyword */);
             var asteriskToken = parseOptionalToken(41 /* AsteriskToken */);
             var isGenerator = asteriskToken ? 1 /* Yield */ : 0 /* None */;
             var isAsync = ts.some(modifiers, ts.isAsyncModifier) ? 2 /* Await */ : 0 /* None */;
@@ -33639,9 +34480,7 @@
             var parameters = parseParameters(isGenerator | isAsync);
             var type = parseReturnType(58 /* ColonToken */, /*isType*/ false);
             var body = parseFunctionBlock(isGenerator | isAsync);
-            if (saveDecoratorContext) {
-                setDecoratorContext(/*val*/ true);
-            }
+            setDecoratorContext(savedDecoratorContext);
             var node = factory.createFunctionExpression(modifiers, asteriskToken, name, typeParameters, parameters, type, body);
             return withJSDoc(finishNode(node, pos), hasJSDoc);
         }
@@ -33650,10 +34489,10 @@
         }
         function parseNewExpressionOrNewDotTarget() {
             var pos = getNodePos();
-            parseExpected(102 /* NewKeyword */);
+            parseExpected(103 /* NewKeyword */);
             if (parseOptional(24 /* DotToken */)) {
                 var name = parseIdentifierName();
-                return finishNode(factory.createMetaProperty(102 /* NewKeyword */, name), pos);
+                return finishNode(factory.createMetaProperty(103 /* NewKeyword */, name), pos);
             }
             var expressionPos = getNodePos();
             var expression = parsePrimaryExpression();
@@ -33692,7 +34531,7 @@
                     }
                 }
                 var result = withJSDoc(finishNode(factory.createBlock(statements, multiLine), pos), hasJSDoc);
-                if (token() === 62 /* EqualsToken */) {
+                if (token() === 63 /* EqualsToken */) {
                     parseErrorAtCurrentToken(ts.Diagnostics.Declaration_or_statement_expected_This_follows_a_block_of_statements_so_if_you_intended_to_write_a_destructuring_assignment_you_might_need_to_wrap_the_the_whole_assignment_in_parentheses);
                     nextToken();
                 }
@@ -33734,20 +34573,20 @@
         function parseIfStatement() {
             var pos = getNodePos();
             var hasJSDoc = hasPrecedingJSDocComment();
-            parseExpected(98 /* IfKeyword */);
+            parseExpected(99 /* IfKeyword */);
             parseExpected(20 /* OpenParenToken */);
             var expression = allowInAnd(parseExpression);
             parseExpected(21 /* CloseParenToken */);
             var thenStatement = parseStatement();
-            var elseStatement = parseOptional(90 /* ElseKeyword */) ? parseStatement() : undefined;
+            var elseStatement = parseOptional(91 /* ElseKeyword */) ? parseStatement() : undefined;
             return withJSDoc(finishNode(factory.createIfStatement(expression, thenStatement, elseStatement), pos), hasJSDoc);
         }
         function parseDoStatement() {
             var pos = getNodePos();
             var hasJSDoc = hasPrecedingJSDocComment();
-            parseExpected(89 /* DoKeyword */);
+            parseExpected(90 /* DoKeyword */);
             var statement = parseStatement();
-            parseExpected(114 /* WhileKeyword */);
+            parseExpected(115 /* WhileKeyword */);
             parseExpected(20 /* OpenParenToken */);
             var expression = allowInAnd(parseExpression);
             parseExpected(21 /* CloseParenToken */);
@@ -33761,7 +34600,7 @@
         function parseWhileStatement() {
             var pos = getNodePos();
             var hasJSDoc = hasPrecedingJSDocComment();
-            parseExpected(114 /* WhileKeyword */);
+            parseExpected(115 /* WhileKeyword */);
             parseExpected(20 /* OpenParenToken */);
             var expression = allowInAnd(parseExpression);
             parseExpected(21 /* CloseParenToken */);
@@ -33771,12 +34610,12 @@
         function parseForOrForInOrForOfStatement() {
             var pos = getNodePos();
             var hasJSDoc = hasPrecedingJSDocComment();
-            parseExpected(96 /* ForKeyword */);
-            var awaitToken = parseOptionalToken(130 /* AwaitKeyword */);
+            parseExpected(97 /* ForKeyword */);
+            var awaitToken = parseOptionalToken(131 /* AwaitKeyword */);
             parseExpected(20 /* OpenParenToken */);
             var initializer;
             if (token() !== 26 /* SemicolonToken */) {
-                if (token() === 112 /* VarKeyword */ || token() === 118 /* LetKeyword */ || token() === 84 /* ConstKeyword */) {
+                if (token() === 113 /* VarKeyword */ || token() === 119 /* LetKeyword */ || token() === 85 /* ConstKeyword */) {
                     initializer = parseVariableDeclarationList(/*inForStatementInitializer*/ true);
                 }
                 else {
@@ -33784,12 +34623,12 @@
                 }
             }
             var node;
-            if (awaitToken ? parseExpected(157 /* OfKeyword */) : parseOptional(157 /* OfKeyword */)) {
+            if (awaitToken ? parseExpected(158 /* OfKeyword */) : parseOptional(158 /* OfKeyword */)) {
                 var expression = allowInAnd(parseAssignmentExpressionOrHigher);
                 parseExpected(21 /* CloseParenToken */);
                 node = factory.createForOfStatement(awaitToken, initializer, expression, parseStatement());
             }
-            else if (parseOptional(100 /* InKeyword */)) {
+            else if (parseOptional(101 /* InKeyword */)) {
                 var expression = allowInAnd(parseExpression);
                 parseExpected(21 /* CloseParenToken */);
                 node = factory.createForInStatement(initializer, expression, parseStatement());
@@ -33811,10 +34650,10 @@
         function parseBreakOrContinueStatement(kind) {
             var pos = getNodePos();
             var hasJSDoc = hasPrecedingJSDocComment();
-            parseExpected(kind === 242 /* BreakStatement */ ? 80 /* BreakKeyword */ : 85 /* ContinueKeyword */);
+            parseExpected(kind === 244 /* BreakStatement */ ? 81 /* BreakKeyword */ : 86 /* ContinueKeyword */);
             var label = canParseSemicolon() ? undefined : parseIdentifier();
             parseSemicolon();
-            var node = kind === 242 /* BreakStatement */
+            var node = kind === 244 /* BreakStatement */
                 ? factory.createBreakStatement(label)
                 : factory.createContinueStatement(label);
             return withJSDoc(finishNode(node, pos), hasJSDoc);
@@ -33822,7 +34661,7 @@
         function parseReturnStatement() {
             var pos = getNodePos();
             var hasJSDoc = hasPrecedingJSDocComment();
-            parseExpected(104 /* ReturnKeyword */);
+            parseExpected(105 /* ReturnKeyword */);
             var expression = canParseSemicolon() ? undefined : allowInAnd(parseExpression);
             parseSemicolon();
             return withJSDoc(finishNode(factory.createReturnStatement(expression), pos), hasJSDoc);
@@ -33830,7 +34669,7 @@
         function parseWithStatement() {
             var pos = getNodePos();
             var hasJSDoc = hasPrecedingJSDocComment();
-            parseExpected(115 /* WithKeyword */);
+            parseExpected(116 /* WithKeyword */);
             parseExpected(20 /* OpenParenToken */);
             var expression = allowInAnd(parseExpression);
             parseExpected(21 /* CloseParenToken */);
@@ -33839,7 +34678,7 @@
         }
         function parseCaseClause() {
             var pos = getNodePos();
-            parseExpected(81 /* CaseKeyword */);
+            parseExpected(82 /* CaseKeyword */);
             var expression = allowInAnd(parseExpression);
             parseExpected(58 /* ColonToken */);
             var statements = parseList(3 /* SwitchClauseStatements */, parseStatement);
@@ -33847,13 +34686,13 @@
         }
         function parseDefaultClause() {
             var pos = getNodePos();
-            parseExpected(87 /* DefaultKeyword */);
+            parseExpected(88 /* DefaultKeyword */);
             parseExpected(58 /* ColonToken */);
             var statements = parseList(3 /* SwitchClauseStatements */, parseStatement);
             return finishNode(factory.createDefaultClause(statements), pos);
         }
         function parseCaseOrDefaultClause() {
-            return token() === 81 /* CaseKeyword */ ? parseCaseClause() : parseDefaultClause();
+            return token() === 82 /* CaseKeyword */ ? parseCaseClause() : parseDefaultClause();
         }
         function parseCaseBlock() {
             var pos = getNodePos();
@@ -33865,7 +34704,7 @@
         function parseSwitchStatement() {
             var pos = getNodePos();
             var hasJSDoc = hasPrecedingJSDocComment();
-            parseExpected(106 /* SwitchKeyword */);
+            parseExpected(107 /* SwitchKeyword */);
             parseExpected(20 /* OpenParenToken */);
             var expression = allowInAnd(parseExpression);
             parseExpected(21 /* CloseParenToken */);
@@ -33877,7 +34716,7 @@
             //      throw [no LineTerminator here]Expression[In, ?Yield];
             var pos = getNodePos();
             var hasJSDoc = hasPrecedingJSDocComment();
-            parseExpected(108 /* ThrowKeyword */);
+            parseExpected(109 /* ThrowKeyword */);
             // Because of automatic semicolon insertion, we need to report error if this
             // throw could be terminated with a semicolon.  Note: we can't call 'parseExpression'
             // directly as that might consume an expression on the following line.
@@ -33888,28 +34727,30 @@
                 identifierCount++;
                 expression = finishNode(factory.createIdentifier(""), getNodePos());
             }
-            parseSemicolon();
+            if (!tryParseSemicolon()) {
+                parseErrorForMissingSemicolonAfter(expression);
+            }
             return withJSDoc(finishNode(factory.createThrowStatement(expression), pos), hasJSDoc);
         }
         // TODO: Review for error recovery
         function parseTryStatement() {
             var pos = getNodePos();
             var hasJSDoc = hasPrecedingJSDocComment();
-            parseExpected(110 /* TryKeyword */);
+            parseExpected(111 /* TryKeyword */);
             var tryBlock = parseBlock(/*ignoreMissingOpenBrace*/ false);
-            var catchClause = token() === 82 /* CatchKeyword */ ? parseCatchClause() : undefined;
+            var catchClause = token() === 83 /* CatchKeyword */ ? parseCatchClause() : undefined;
             // If we don't have a catch clause, then we must have a finally clause.  Try to parse
             // one out no matter what.
             var finallyBlock;
-            if (!catchClause || token() === 95 /* FinallyKeyword */) {
-                parseExpected(95 /* FinallyKeyword */);
+            if (!catchClause || token() === 96 /* FinallyKeyword */) {
+                parseExpected(96 /* FinallyKeyword */);
                 finallyBlock = parseBlock(/*ignoreMissingOpenBrace*/ false);
             }
             return withJSDoc(finishNode(factory.createTryStatement(tryBlock, catchClause, finallyBlock), pos), hasJSDoc);
         }
         function parseCatchClause() {
             var pos = getNodePos();
-            parseExpected(82 /* CatchKeyword */);
+            parseExpected(83 /* CatchKeyword */);
             var variableDeclaration;
             if (parseOptional(20 /* OpenParenToken */)) {
                 variableDeclaration = parseVariableDeclaration();
@@ -33925,7 +34766,7 @@
         function parseDebuggerStatement() {
             var pos = getNodePos();
             var hasJSDoc = hasPrecedingJSDocComment();
-            parseExpected(86 /* DebuggerKeyword */);
+            parseExpected(87 /* DebuggerKeyword */);
             parseSemicolon();
             return withJSDoc(finishNode(factory.createDebuggerStatement(), pos), hasJSDoc);
         }
@@ -33942,7 +34783,9 @@
                 node = factory.createLabeledStatement(expression, parseStatement());
             }
             else {
-                parseSemicolon();
+                if (!tryParseSemicolon()) {
+                    parseErrorForMissingSemicolonAfter(expression);
+                }
                 node = factory.createExpressionStatement(expression);
                 if (hasParen) {
                     // do not parse the same jsdoc twice
@@ -33957,11 +34800,11 @@
         }
         function nextTokenIsClassKeywordOnSameLine() {
             nextToken();
-            return token() === 83 /* ClassKeyword */ && !scanner.hasPrecedingLineBreak();
+            return token() === 84 /* ClassKeyword */ && !scanner.hasPrecedingLineBreak();
         }
         function nextTokenIsFunctionKeywordOnSameLine() {
             nextToken();
-            return token() === 97 /* FunctionKeyword */ && !scanner.hasPrecedingLineBreak();
+            return token() === 98 /* FunctionKeyword */ && !scanner.hasPrecedingLineBreak();
         }
         function nextTokenIsIdentifierOrKeywordOrLiteralOnSameLine() {
             nextToken();
@@ -33970,12 +34813,12 @@
         function isDeclaration() {
             while (true) {
                 switch (token()) {
-                    case 112 /* VarKeyword */:
-                    case 118 /* LetKeyword */:
-                    case 84 /* ConstKeyword */:
-                    case 97 /* FunctionKeyword */:
-                    case 83 /* ClassKeyword */:
-                    case 91 /* EnumKeyword */:
+                    case 113 /* VarKeyword */:
+                    case 119 /* LetKeyword */:
+                    case 85 /* ConstKeyword */:
+                    case 98 /* FunctionKeyword */:
+                    case 84 /* ClassKeyword */:
+                    case 92 /* EnumKeyword */:
                         return true;
                     // 'declare', 'module', 'namespace', 'interface'* and 'type' are all legal JavaScript identifiers;
                     // however, an identifier cannot be followed by another identifier on the same line. This is what we
@@ -33998,44 +34841,44 @@
                     //   I {}
                     //
                     // could be legal, it would add complexity for very little gain.
-                    case 117 /* InterfaceKeyword */:
-                    case 149 /* TypeKeyword */:
+                    case 118 /* InterfaceKeyword */:
+                    case 150 /* TypeKeyword */:
                         return nextTokenIsIdentifierOnSameLine();
-                    case 139 /* ModuleKeyword */:
-                    case 140 /* NamespaceKeyword */:
+                    case 140 /* ModuleKeyword */:
+                    case 141 /* NamespaceKeyword */:
                         return nextTokenIsIdentifierOrStringLiteralOnSameLine();
-                    case 125 /* AbstractKeyword */:
-                    case 129 /* AsyncKeyword */:
-                    case 133 /* DeclareKeyword */:
-                    case 120 /* PrivateKeyword */:
-                    case 121 /* ProtectedKeyword */:
-                    case 122 /* PublicKeyword */:
-                    case 142 /* ReadonlyKeyword */:
+                    case 126 /* AbstractKeyword */:
+                    case 130 /* AsyncKeyword */:
+                    case 134 /* DeclareKeyword */:
+                    case 121 /* PrivateKeyword */:
+                    case 122 /* ProtectedKeyword */:
+                    case 123 /* PublicKeyword */:
+                    case 143 /* ReadonlyKeyword */:
                         nextToken();
                         // ASI takes effect for this modifier.
                         if (scanner.hasPrecedingLineBreak()) {
                             return false;
                         }
                         continue;
-                    case 154 /* GlobalKeyword */:
+                    case 155 /* GlobalKeyword */:
                         nextToken();
-                        return token() === 18 /* OpenBraceToken */ || token() === 78 /* Identifier */ || token() === 92 /* ExportKeyword */;
-                    case 99 /* ImportKeyword */:
+                        return token() === 18 /* OpenBraceToken */ || token() === 79 /* Identifier */ || token() === 93 /* ExportKeyword */;
+                    case 100 /* ImportKeyword */:
                         nextToken();
                         return token() === 10 /* StringLiteral */ || token() === 41 /* AsteriskToken */ ||
                             token() === 18 /* OpenBraceToken */ || ts.tokenIsIdentifierOrKeyword(token());
-                    case 92 /* ExportKeyword */:
+                    case 93 /* ExportKeyword */:
                         var currentToken_1 = nextToken();
-                        if (currentToken_1 === 149 /* TypeKeyword */) {
+                        if (currentToken_1 === 150 /* TypeKeyword */) {
                             currentToken_1 = lookAhead(nextToken);
                         }
-                        if (currentToken_1 === 62 /* EqualsToken */ || currentToken_1 === 41 /* AsteriskToken */ ||
-                            currentToken_1 === 18 /* OpenBraceToken */ || currentToken_1 === 87 /* DefaultKeyword */ ||
-                            currentToken_1 === 126 /* AsKeyword */) {
+                        if (currentToken_1 === 63 /* EqualsToken */ || currentToken_1 === 41 /* AsteriskToken */ ||
+                            currentToken_1 === 18 /* OpenBraceToken */ || currentToken_1 === 88 /* DefaultKeyword */ ||
+                            currentToken_1 === 127 /* AsKeyword */) {
                             return true;
                         }
                         continue;
-                    case 123 /* StaticKeyword */:
+                    case 124 /* StaticKeyword */:
                         nextToken();
                         continue;
                     default:
@@ -34051,48 +34894,48 @@
                 case 59 /* AtToken */:
                 case 26 /* SemicolonToken */:
                 case 18 /* OpenBraceToken */:
-                case 112 /* VarKeyword */:
-                case 118 /* LetKeyword */:
-                case 97 /* FunctionKeyword */:
-                case 83 /* ClassKeyword */:
-                case 91 /* EnumKeyword */:
-                case 98 /* IfKeyword */:
-                case 89 /* DoKeyword */:
-                case 114 /* WhileKeyword */:
-                case 96 /* ForKeyword */:
-                case 85 /* ContinueKeyword */:
-                case 80 /* BreakKeyword */:
-                case 104 /* ReturnKeyword */:
-                case 115 /* WithKeyword */:
-                case 106 /* SwitchKeyword */:
-                case 108 /* ThrowKeyword */:
-                case 110 /* TryKeyword */:
-                case 86 /* DebuggerKeyword */:
+                case 113 /* VarKeyword */:
+                case 119 /* LetKeyword */:
+                case 98 /* FunctionKeyword */:
+                case 84 /* ClassKeyword */:
+                case 92 /* EnumKeyword */:
+                case 99 /* IfKeyword */:
+                case 90 /* DoKeyword */:
+                case 115 /* WhileKeyword */:
+                case 97 /* ForKeyword */:
+                case 86 /* ContinueKeyword */:
+                case 81 /* BreakKeyword */:
+                case 105 /* ReturnKeyword */:
+                case 116 /* WithKeyword */:
+                case 107 /* SwitchKeyword */:
+                case 109 /* ThrowKeyword */:
+                case 111 /* TryKeyword */:
+                case 87 /* DebuggerKeyword */:
                 // 'catch' and 'finally' do not actually indicate that the code is part of a statement,
                 // however, we say they are here so that we may gracefully parse them and error later.
                 // falls through
-                case 82 /* CatchKeyword */:
-                case 95 /* FinallyKeyword */:
+                case 83 /* CatchKeyword */:
+                case 96 /* FinallyKeyword */:
                     return true;
-                case 99 /* ImportKeyword */:
+                case 100 /* ImportKeyword */:
                     return isStartOfDeclaration() || lookAhead(nextTokenIsOpenParenOrLessThanOrDot);
-                case 84 /* ConstKeyword */:
-                case 92 /* ExportKeyword */:
+                case 85 /* ConstKeyword */:
+                case 93 /* ExportKeyword */:
                     return isStartOfDeclaration();
-                case 129 /* AsyncKeyword */:
-                case 133 /* DeclareKeyword */:
-                case 117 /* InterfaceKeyword */:
-                case 139 /* ModuleKeyword */:
-                case 140 /* NamespaceKeyword */:
-                case 149 /* TypeKeyword */:
-                case 154 /* GlobalKeyword */:
+                case 130 /* AsyncKeyword */:
+                case 134 /* DeclareKeyword */:
+                case 118 /* InterfaceKeyword */:
+                case 140 /* ModuleKeyword */:
+                case 141 /* NamespaceKeyword */:
+                case 150 /* TypeKeyword */:
+                case 155 /* GlobalKeyword */:
                     // When these don't start a declaration, they're an identifier in an expression statement
                     return true;
-                case 122 /* PublicKeyword */:
-                case 120 /* PrivateKeyword */:
-                case 121 /* ProtectedKeyword */:
-                case 123 /* StaticKeyword */:
-                case 142 /* ReadonlyKeyword */:
+                case 123 /* PublicKeyword */:
+                case 121 /* PrivateKeyword */:
+                case 122 /* ProtectedKeyword */:
+                case 124 /* StaticKeyword */:
+                case 143 /* ReadonlyKeyword */:
                     // When these don't start a declaration, they may be the start of a class member if an identifier
                     // immediately follows. Otherwise they're an identifier in an expression statement.
                     return isStartOfDeclaration() || !lookAhead(nextTokenIsIdentifierOrKeywordOnSameLine);
@@ -34100,14 +34943,14 @@
                     return isStartOfExpression();
             }
         }
-        function nextTokenIsIdentifierOrStartOfDestructuring() {
+        function nextTokenIsBindingIdentifierOrStartOfDestructuring() {
             nextToken();
-            return isIdentifier() || token() === 18 /* OpenBraceToken */ || token() === 22 /* OpenBracketToken */;
+            return isBindingIdentifier() || token() === 18 /* OpenBraceToken */ || token() === 22 /* OpenBracketToken */;
         }
         function isLetDeclaration() {
             // In ES6 'let' always starts a lexical declaration if followed by an identifier or {
             // or [.
-            return lookAhead(nextTokenIsIdentifierOrStartOfDestructuring);
+            return lookAhead(nextTokenIsBindingIdentifierOrStartOfDestructuring);
         }
         function parseStatement() {
             switch (token()) {
@@ -34115,64 +34958,64 @@
                     return parseEmptyStatement();
                 case 18 /* OpenBraceToken */:
                     return parseBlock(/*ignoreMissingOpenBrace*/ false);
-                case 112 /* VarKeyword */:
+                case 113 /* VarKeyword */:
                     return parseVariableStatement(getNodePos(), hasPrecedingJSDocComment(), /*decorators*/ undefined, /*modifiers*/ undefined);
-                case 118 /* LetKeyword */:
+                case 119 /* LetKeyword */:
                     if (isLetDeclaration()) {
                         return parseVariableStatement(getNodePos(), hasPrecedingJSDocComment(), /*decorators*/ undefined, /*modifiers*/ undefined);
                     }
                     break;
-                case 97 /* FunctionKeyword */:
+                case 98 /* FunctionKeyword */:
                     return parseFunctionDeclaration(getNodePos(), hasPrecedingJSDocComment(), /*decorators*/ undefined, /*modifiers*/ undefined);
-                case 83 /* ClassKeyword */:
+                case 84 /* ClassKeyword */:
                     return parseClassDeclaration(getNodePos(), hasPrecedingJSDocComment(), /*decorators*/ undefined, /*modifiers*/ undefined);
-                case 98 /* IfKeyword */:
+                case 99 /* IfKeyword */:
                     return parseIfStatement();
-                case 89 /* DoKeyword */:
+                case 90 /* DoKeyword */:
                     return parseDoStatement();
-                case 114 /* WhileKeyword */:
+                case 115 /* WhileKeyword */:
                     return parseWhileStatement();
-                case 96 /* ForKeyword */:
+                case 97 /* ForKeyword */:
                     return parseForOrForInOrForOfStatement();
-                case 85 /* ContinueKeyword */:
-                    return parseBreakOrContinueStatement(241 /* ContinueStatement */);
-                case 80 /* BreakKeyword */:
-                    return parseBreakOrContinueStatement(242 /* BreakStatement */);
-                case 104 /* ReturnKeyword */:
+                case 86 /* ContinueKeyword */:
+                    return parseBreakOrContinueStatement(243 /* ContinueStatement */);
+                case 81 /* BreakKeyword */:
+                    return parseBreakOrContinueStatement(244 /* BreakStatement */);
+                case 105 /* ReturnKeyword */:
                     return parseReturnStatement();
-                case 115 /* WithKeyword */:
+                case 116 /* WithKeyword */:
                     return parseWithStatement();
-                case 106 /* SwitchKeyword */:
+                case 107 /* SwitchKeyword */:
                     return parseSwitchStatement();
-                case 108 /* ThrowKeyword */:
+                case 109 /* ThrowKeyword */:
                     return parseThrowStatement();
-                case 110 /* TryKeyword */:
+                case 111 /* TryKeyword */:
                 // Include 'catch' and 'finally' for error recovery.
                 // falls through
-                case 82 /* CatchKeyword */:
-                case 95 /* FinallyKeyword */:
+                case 83 /* CatchKeyword */:
+                case 96 /* FinallyKeyword */:
                     return parseTryStatement();
-                case 86 /* DebuggerKeyword */:
+                case 87 /* DebuggerKeyword */:
                     return parseDebuggerStatement();
                 case 59 /* AtToken */:
                     return parseDeclaration();
-                case 129 /* AsyncKeyword */:
-                case 117 /* InterfaceKeyword */:
-                case 149 /* TypeKeyword */:
-                case 139 /* ModuleKeyword */:
-                case 140 /* NamespaceKeyword */:
-                case 133 /* DeclareKeyword */:
-                case 84 /* ConstKeyword */:
-                case 91 /* EnumKeyword */:
-                case 92 /* ExportKeyword */:
-                case 99 /* ImportKeyword */:
-                case 120 /* PrivateKeyword */:
-                case 121 /* ProtectedKeyword */:
-                case 122 /* PublicKeyword */:
-                case 125 /* AbstractKeyword */:
-                case 123 /* StaticKeyword */:
-                case 142 /* ReadonlyKeyword */:
-                case 154 /* GlobalKeyword */:
+                case 130 /* AsyncKeyword */:
+                case 118 /* InterfaceKeyword */:
+                case 150 /* TypeKeyword */:
+                case 140 /* ModuleKeyword */:
+                case 141 /* NamespaceKeyword */:
+                case 134 /* DeclareKeyword */:
+                case 85 /* ConstKeyword */:
+                case 92 /* EnumKeyword */:
+                case 93 /* ExportKeyword */:
+                case 100 /* ImportKeyword */:
+                case 121 /* PrivateKeyword */:
+                case 122 /* ProtectedKeyword */:
+                case 123 /* PublicKeyword */:
+                case 126 /* AbstractKeyword */:
+                case 124 /* StaticKeyword */:
+                case 143 /* ReadonlyKeyword */:
+                case 155 /* GlobalKeyword */:
                     if (isStartOfDeclaration()) {
                         return parseDeclaration();
                     }
@@ -34181,7 +35024,7 @@
             return parseExpressionOrLabeledStatement();
         }
         function isDeclareModifier(modifier) {
-            return modifier.kind === 133 /* DeclareKeyword */;
+            return modifier.kind === 134 /* DeclareKeyword */;
         }
         function parseDeclaration() {
             // TODO: Can we hold onto the parsed decorators/modifiers and advance the scanner
@@ -34222,33 +35065,33 @@
         }
         function parseDeclarationWorker(pos, hasJSDoc, decorators, modifiers) {
             switch (token()) {
-                case 112 /* VarKeyword */:
-                case 118 /* LetKeyword */:
-                case 84 /* ConstKeyword */:
+                case 113 /* VarKeyword */:
+                case 119 /* LetKeyword */:
+                case 85 /* ConstKeyword */:
                     return parseVariableStatement(pos, hasJSDoc, decorators, modifiers);
-                case 97 /* FunctionKeyword */:
+                case 98 /* FunctionKeyword */:
                     return parseFunctionDeclaration(pos, hasJSDoc, decorators, modifiers);
-                case 83 /* ClassKeyword */:
+                case 84 /* ClassKeyword */:
                     return parseClassDeclaration(pos, hasJSDoc, decorators, modifiers);
-                case 117 /* InterfaceKeyword */:
+                case 118 /* InterfaceKeyword */:
                     return parseInterfaceDeclaration(pos, hasJSDoc, decorators, modifiers);
-                case 149 /* TypeKeyword */:
+                case 150 /* TypeKeyword */:
                     return parseTypeAliasDeclaration(pos, hasJSDoc, decorators, modifiers);
-                case 91 /* EnumKeyword */:
+                case 92 /* EnumKeyword */:
                     return parseEnumDeclaration(pos, hasJSDoc, decorators, modifiers);
-                case 154 /* GlobalKeyword */:
-                case 139 /* ModuleKeyword */:
-                case 140 /* NamespaceKeyword */:
+                case 155 /* GlobalKeyword */:
+                case 140 /* ModuleKeyword */:
+                case 141 /* NamespaceKeyword */:
                     return parseModuleDeclaration(pos, hasJSDoc, decorators, modifiers);
-                case 99 /* ImportKeyword */:
+                case 100 /* ImportKeyword */:
                     return parseImportDeclarationOrImportEqualsDeclaration(pos, hasJSDoc, decorators, modifiers);
-                case 92 /* ExportKeyword */:
+                case 93 /* ExportKeyword */:
                     nextToken();
                     switch (token()) {
-                        case 87 /* DefaultKeyword */:
-                        case 62 /* EqualsToken */:
+                        case 88 /* DefaultKeyword */:
+                        case 63 /* EqualsToken */:
                             return parseExportAssignment(pos, hasJSDoc, decorators, modifiers);
-                        case 126 /* AsKeyword */:
+                        case 127 /* AsKeyword */:
                             return parseNamespaceExportDeclaration(pos, hasJSDoc, decorators, modifiers);
                         default:
                             return parseExportDeclaration(pos, hasJSDoc, decorators, modifiers);
@@ -34257,7 +35100,7 @@
                     if (decorators || modifiers) {
                         // We reached this point because we encountered decorators and/or modifiers and assumed a declaration
                         // would follow. For recovery and error reporting purposes, return an incomplete declaration.
-                        var missing = createMissingNode(272 /* MissingDeclaration */, /*reportAtCurrentPosition*/ true, ts.Diagnostics.Declaration_expected);
+                        var missing = createMissingNode(274 /* MissingDeclaration */, /*reportAtCurrentPosition*/ true, ts.Diagnostics.Declaration_expected);
                         ts.setTextRangePos(missing, pos);
                         missing.decorators = decorators;
                         missing.modifiers = modifiers;
@@ -34322,7 +35165,7 @@
         function isBindingIdentifierOrPrivateIdentifierOrPattern() {
             return token() === 18 /* OpenBraceToken */
                 || token() === 22 /* OpenBracketToken */
-                || token() === 79 /* PrivateIdentifier */
+                || token() === 80 /* PrivateIdentifier */
                 || isBindingIdentifier();
         }
         function parseIdentifierOrPattern(privateIdentifierDiagnosticMessage) {
@@ -34342,7 +35185,7 @@
             var hasJSDoc = hasPrecedingJSDocComment();
             var name = parseIdentifierOrPattern(ts.Diagnostics.Private_identifiers_are_not_allowed_in_variable_declarations);
             var exclamationToken;
-            if (allowExclamation && name.kind === 78 /* Identifier */ &&
+            if (allowExclamation && name.kind === 79 /* Identifier */ &&
                 token() === 53 /* ExclamationToken */ && !scanner.hasPrecedingLineBreak()) {
                 exclamationToken = parseTokenNode();
             }
@@ -34355,12 +35198,12 @@
             var pos = getNodePos();
             var flags = 0;
             switch (token()) {
-                case 112 /* VarKeyword */:
+                case 113 /* VarKeyword */:
                     break;
-                case 118 /* LetKeyword */:
+                case 119 /* LetKeyword */:
                     flags |= 1 /* Let */;
                     break;
-                case 84 /* ConstKeyword */:
+                case 85 /* ConstKeyword */:
                     flags |= 2 /* Const */;
                     break;
                 default:
@@ -34377,7 +35220,7 @@
             // this context.
             // The checker will then give an error that there is an empty declaration list.
             var declarations;
-            if (token() === 157 /* OfKeyword */ && lookAhead(canFollowContextualOfKeyword)) {
+            if (token() === 158 /* OfKeyword */ && lookAhead(canFollowContextualOfKeyword)) {
                 declarations = createMissingList();
             }
             else {
@@ -34402,7 +35245,7 @@
         function parseFunctionDeclaration(pos, hasJSDoc, decorators, modifiers) {
             var savedAwaitContext = inAwaitContext();
             var modifierFlags = ts.modifiersToFlags(modifiers);
-            parseExpected(97 /* FunctionKeyword */);
+            parseExpected(98 /* FunctionKeyword */);
             var asteriskToken = parseOptionalToken(41 /* AsteriskToken */);
             // We don't parse the name here in await context, instead we will report a grammar error in the checker.
             var name = modifierFlags & 512 /* Default */ ? parseOptionalBindingIdentifier() : parseBindingIdentifier();
@@ -34419,8 +35262,8 @@
             return withJSDoc(finishNode(node, pos), hasJSDoc);
         }
         function parseConstructorName() {
-            if (token() === 132 /* ConstructorKeyword */) {
-                return parseExpected(132 /* ConstructorKeyword */);
+            if (token() === 133 /* ConstructorKeyword */) {
+                return parseExpected(133 /* ConstructorKeyword */);
             }
             if (token() === 10 /* StringLiteral */ && lookAhead(nextToken) === 20 /* OpenParenToken */) {
                 return tryParse(function () {
@@ -34460,7 +35303,7 @@
             var exclamationToken = !questionToken && !scanner.hasPrecedingLineBreak() ? parseOptionalToken(53 /* ExclamationToken */) : undefined;
             var type = parseTypeAnnotation();
             var initializer = doOutsideOfContext(8192 /* YieldContext */ | 32768 /* AwaitContext */ | 4096 /* DisallowInContext */, parseInitializer);
-            parseSemicolon();
+            parseSemicolonAfterPropertyName(name, type, initializer);
             var node = factory.createPropertyDeclaration(decorators, modifiers, name, questionToken || exclamationToken, type, initializer);
             return withJSDoc(finishNode(node, pos), hasJSDoc);
         }
@@ -34481,12 +35324,12 @@
             var parameters = parseParameters(0 /* None */);
             var type = parseReturnType(58 /* ColonToken */, /*isType*/ false);
             var body = parseFunctionBlockOrSemicolon(0 /* None */);
-            var node = kind === 168 /* GetAccessor */
+            var node = kind === 170 /* GetAccessor */
                 ? factory.createGetAccessorDeclaration(decorators, modifiers, name, parameters, type, body)
                 : factory.createSetAccessorDeclaration(decorators, modifiers, name, parameters, body);
             // Keep track of `typeParameters` (for both) and `type` (for setters) if they were parsed those indicate grammar errors
             node.typeParameters = typeParameters;
-            if (type && node.kind === 169 /* SetAccessor */)
+            if (type && node.kind === 171 /* SetAccessor */)
                 node.type = type;
             return withJSDoc(finishNode(node, pos), hasJSDoc);
         }
@@ -34525,7 +35368,7 @@
             // If we were able to get any potential identifier...
             if (idToken !== undefined) {
                 // If we have a non-keyword identifier, or if we have an accessor, then it's safe to parse.
-                if (!ts.isKeyword(idToken) || idToken === 146 /* SetKeyword */ || idToken === 134 /* GetKeyword */) {
+                if (!ts.isKeyword(idToken) || idToken === 147 /* SetKeyword */ || idToken === 135 /* GetKeyword */) {
                     return true;
                 }
                 // If it *is* a keyword, but not an accessor, check a little farther along
@@ -34535,7 +35378,7 @@
                     case 29 /* LessThanToken */: // Generic Method declaration
                     case 53 /* ExclamationToken */: // Non-null assertion on property name
                     case 58 /* ColonToken */: // Type Annotation for declaration
-                    case 62 /* EqualsToken */: // Initializer for declaration
+                    case 63 /* EqualsToken */: // Initializer for declaration
                     case 57 /* QuestionToken */: // Not valid, but permitted so that it gets caught later on.
                         return true;
                     default:
@@ -34549,8 +35392,23 @@
             }
             return false;
         }
+        function parseClassStaticBlockDeclaration(pos, hasJSDoc, decorators, modifiers) {
+            parseExpectedToken(124 /* StaticKeyword */);
+            var body = parseClassStaticBlockBody();
+            return withJSDoc(finishNode(factory.createClassStaticBlockDeclaration(decorators, modifiers, body), pos), hasJSDoc);
+        }
+        function parseClassStaticBlockBody() {
+            var savedYieldContext = inYieldContext();
+            var savedAwaitContext = inAwaitContext();
+            setYieldContext(false);
+            setAwaitContext(true);
+            var body = parseBlock(/*ignoreMissingOpenBrace*/ false);
+            setYieldContext(savedYieldContext);
+            setAwaitContext(savedAwaitContext);
+            return body;
+        }
         function parseDecoratorExpression() {
-            if (inAwaitContext() && token() === 130 /* AwaitKeyword */) {
+            if (inAwaitContext() && token() === 131 /* AwaitKeyword */) {
                 // `@await` is is disallowed in an [Await] context, but can cause parsing to go off the rails
                 // This simply parses the missing identifier and moves on.
                 var pos = getNodePos();
@@ -34577,16 +35435,19 @@
             }
             return list && createNodeArray(list, pos);
         }
-        function tryParseModifier(permitInvalidConstAsModifier) {
+        function tryParseModifier(permitInvalidConstAsModifier, stopOnStartOfClassStaticBlock) {
             var pos = getNodePos();
             var kind = token();
-            if (token() === 84 /* ConstKeyword */ && permitInvalidConstAsModifier) {
+            if (token() === 85 /* ConstKeyword */ && permitInvalidConstAsModifier) {
                 // We need to ensure that any subsequent modifiers appear on the same line
                 // so that when 'const' is a standalone declaration, we don't issue an error.
                 if (!tryParse(nextTokenIsOnSameLineAndCanFollowModifier)) {
                     return undefined;
                 }
             }
+            else if (stopOnStartOfClassStaticBlock && token() === 124 /* StaticKeyword */ && lookAhead(nextTokenIsOpenBrace)) {
+                return undefined;
+            }
             else {
                 if (!parseAnyContextualModifier()) {
                     return undefined;
@@ -34601,20 +35462,20 @@
          *
          * In such situations, 'permitInvalidConstAsModifier' should be set to true.
          */
-        function parseModifiers(permitInvalidConstAsModifier) {
+        function parseModifiers(permitInvalidConstAsModifier, stopOnStartOfClassStaticBlock) {
             var pos = getNodePos();
             var list, modifier;
-            while (modifier = tryParseModifier(permitInvalidConstAsModifier)) {
+            while (modifier = tryParseModifier(permitInvalidConstAsModifier, stopOnStartOfClassStaticBlock)) {
                 list = ts.append(list, modifier);
             }
             return list && createNodeArray(list, pos);
         }
         function parseModifiersForArrowFunction() {
             var modifiers;
-            if (token() === 129 /* AsyncKeyword */) {
+            if (token() === 130 /* AsyncKeyword */) {
                 var pos = getNodePos();
                 nextToken();
-                var modifier = finishNode(factory.createToken(129 /* AsyncKeyword */), pos);
+                var modifier = finishNode(factory.createToken(130 /* AsyncKeyword */), pos);
                 modifiers = createNodeArray([modifier], pos);
             }
             return modifiers;
@@ -34627,14 +35488,17 @@
             }
             var hasJSDoc = hasPrecedingJSDocComment();
             var decorators = parseDecorators();
-            var modifiers = parseModifiers(/*permitInvalidConstAsModifier*/ true);
-            if (parseContextualModifier(134 /* GetKeyword */)) {
-                return parseAccessorDeclaration(pos, hasJSDoc, decorators, modifiers, 168 /* GetAccessor */);
+            var modifiers = parseModifiers(/*permitInvalidConstAsModifier*/ true, /*stopOnStartOfClassStaticBlock*/ true);
+            if (token() === 124 /* StaticKeyword */ && lookAhead(nextTokenIsOpenBrace)) {
+                return parseClassStaticBlockDeclaration(pos, hasJSDoc, decorators, modifiers);
             }
-            if (parseContextualModifier(146 /* SetKeyword */)) {
-                return parseAccessorDeclaration(pos, hasJSDoc, decorators, modifiers, 169 /* SetAccessor */);
+            if (parseContextualModifier(135 /* GetKeyword */)) {
+                return parseAccessorDeclaration(pos, hasJSDoc, decorators, modifiers, 170 /* GetAccessor */);
             }
-            if (token() === 132 /* ConstructorKeyword */ || token() === 10 /* StringLiteral */) {
+            if (parseContextualModifier(147 /* SetKeyword */)) {
+                return parseAccessorDeclaration(pos, hasJSDoc, decorators, modifiers, 171 /* SetAccessor */);
+            }
+            if (token() === 133 /* ConstructorKeyword */ || token() === 10 /* StringLiteral */) {
                 var constructorDeclaration = tryParseConstructorDeclaration(pos, hasJSDoc, decorators, modifiers);
                 if (constructorDeclaration) {
                     return constructorDeclaration;
@@ -34664,21 +35528,21 @@
             }
             if (decorators || modifiers) {
                 // treat this as a property declaration with a missing name.
-                var name = createMissingNode(78 /* Identifier */, /*reportAtCurrentPosition*/ true, ts.Diagnostics.Declaration_expected);
+                var name = createMissingNode(79 /* Identifier */, /*reportAtCurrentPosition*/ true, ts.Diagnostics.Declaration_expected);
                 return parsePropertyDeclaration(pos, hasJSDoc, decorators, modifiers, name, /*questionToken*/ undefined);
             }
             // 'isClassMemberStart' should have hinted not to attempt parsing.
             return ts.Debug.fail("Should not have attempted to parse class member declaration.");
         }
         function parseClassExpression() {
-            return parseClassDeclarationOrExpression(getNodePos(), hasPrecedingJSDocComment(), /*decorators*/ undefined, /*modifiers*/ undefined, 222 /* ClassExpression */);
+            return parseClassDeclarationOrExpression(getNodePos(), hasPrecedingJSDocComment(), /*decorators*/ undefined, /*modifiers*/ undefined, 224 /* ClassExpression */);
         }
         function parseClassDeclaration(pos, hasJSDoc, decorators, modifiers) {
-            return parseClassDeclarationOrExpression(pos, hasJSDoc, decorators, modifiers, 253 /* ClassDeclaration */);
+            return parseClassDeclarationOrExpression(pos, hasJSDoc, decorators, modifiers, 255 /* ClassDeclaration */);
         }
         function parseClassDeclarationOrExpression(pos, hasJSDoc, decorators, modifiers, kind) {
             var savedAwaitContext = inAwaitContext();
-            parseExpected(83 /* ClassKeyword */);
+            parseExpected(84 /* ClassKeyword */);
             // We don't parse the name here in await context, instead we will report a grammar error in the checker.
             var name = parseNameOfClassDeclarationOrExpression();
             var typeParameters = parseTypeParameters();
@@ -34696,7 +35560,7 @@
                 members = createMissingList();
             }
             setAwaitContext(savedAwaitContext);
-            var node = kind === 253 /* ClassDeclaration */
+            var node = kind === 255 /* ClassDeclaration */
                 ? factory.createClassDeclaration(decorators, modifiers, name, typeParameters, heritageClauses, members)
                 : factory.createClassExpression(decorators, modifiers, name, typeParameters, heritageClauses, members);
             return withJSDoc(finishNode(node, pos), hasJSDoc);
@@ -34712,7 +35576,7 @@
                 : undefined;
         }
         function isImplementsClause() {
-            return token() === 116 /* ImplementsKeyword */ && lookAhead(nextTokenIsIdentifierOrKeyword);
+            return token() === 117 /* ImplementsKeyword */ && lookAhead(nextTokenIsIdentifierOrKeyword);
         }
         function parseHeritageClauses() {
             // ClassTail[Yield,Await] : (Modified) See 14.5
@@ -34725,7 +35589,7 @@
         function parseHeritageClause() {
             var pos = getNodePos();
             var tok = token();
-            ts.Debug.assert(tok === 93 /* ExtendsKeyword */ || tok === 116 /* ImplementsKeyword */); // isListElement() should ensure this.
+            ts.Debug.assert(tok === 94 /* ExtendsKeyword */ || tok === 117 /* ImplementsKeyword */); // isListElement() should ensure this.
             nextToken();
             var types = parseDelimitedList(7 /* HeritageClauseElement */, parseExpressionWithTypeArguments);
             return finishNode(factory.createHeritageClause(tok, types), pos);
@@ -34741,13 +35605,13 @@
                 parseBracketedList(20 /* TypeArguments */, parseType, 29 /* LessThanToken */, 31 /* GreaterThanToken */) : undefined;
         }
         function isHeritageClause() {
-            return token() === 93 /* ExtendsKeyword */ || token() === 116 /* ImplementsKeyword */;
+            return token() === 94 /* ExtendsKeyword */ || token() === 117 /* ImplementsKeyword */;
         }
         function parseClassMembers() {
             return parseList(5 /* ClassMembers */, parseClassElement);
         }
         function parseInterfaceDeclaration(pos, hasJSDoc, decorators, modifiers) {
-            parseExpected(117 /* InterfaceKeyword */);
+            parseExpected(118 /* InterfaceKeyword */);
             var name = parseIdentifier();
             var typeParameters = parseTypeParameters();
             var heritageClauses = parseHeritageClauses();
@@ -34756,11 +35620,11 @@
             return withJSDoc(finishNode(node, pos), hasJSDoc);
         }
         function parseTypeAliasDeclaration(pos, hasJSDoc, decorators, modifiers) {
-            parseExpected(149 /* TypeKeyword */);
+            parseExpected(150 /* TypeKeyword */);
             var name = parseIdentifier();
             var typeParameters = parseTypeParameters();
-            parseExpected(62 /* EqualsToken */);
-            var type = token() === 136 /* IntrinsicKeyword */ && tryParse(parseKeywordAndNoDot) || parseType();
+            parseExpected(63 /* EqualsToken */);
+            var type = token() === 137 /* IntrinsicKeyword */ && tryParse(parseKeywordAndNoDot) || parseType();
             parseSemicolon();
             var node = factory.createTypeAliasDeclaration(decorators, modifiers, name, typeParameters, type);
             return withJSDoc(finishNode(node, pos), hasJSDoc);
@@ -34777,7 +35641,7 @@
             return withJSDoc(finishNode(factory.createEnumMember(name, initializer), pos), hasJSDoc);
         }
         function parseEnumDeclaration(pos, hasJSDoc, decorators, modifiers) {
-            parseExpected(91 /* EnumKeyword */);
+            parseExpected(92 /* EnumKeyword */);
             var name = parseIdentifier();
             var members;
             if (parseExpected(18 /* OpenBraceToken */)) {
@@ -34816,7 +35680,7 @@
         function parseAmbientExternalModuleDeclaration(pos, hasJSDoc, decorators, modifiers) {
             var flags = 0;
             var name;
-            if (token() === 154 /* GlobalKeyword */) {
+            if (token() === 155 /* GlobalKeyword */) {
                 // parse 'global' as name of global scope augmentation
                 name = parseIdentifier();
                 flags |= 1024 /* GlobalAugmentation */;
@@ -34837,15 +35701,15 @@
         }
         function parseModuleDeclaration(pos, hasJSDoc, decorators, modifiers) {
             var flags = 0;
-            if (token() === 154 /* GlobalKeyword */) {
+            if (token() === 155 /* GlobalKeyword */) {
                 // global augmentation
                 return parseAmbientExternalModuleDeclaration(pos, hasJSDoc, decorators, modifiers);
             }
-            else if (parseOptional(140 /* NamespaceKeyword */)) {
+            else if (parseOptional(141 /* NamespaceKeyword */)) {
                 flags |= 16 /* Namespace */;
             }
             else {
-                parseExpected(139 /* ModuleKeyword */);
+                parseExpected(140 /* ModuleKeyword */);
                 if (token() === 10 /* StringLiteral */) {
                     return parseAmbientExternalModuleDeclaration(pos, hasJSDoc, decorators, modifiers);
                 }
@@ -34853,18 +35717,21 @@
             return parseModuleOrNamespaceDeclaration(pos, hasJSDoc, decorators, modifiers, flags);
         }
         function isExternalModuleReference() {
-            return token() === 143 /* RequireKeyword */ &&
+            return token() === 144 /* RequireKeyword */ &&
                 lookAhead(nextTokenIsOpenParen);
         }
         function nextTokenIsOpenParen() {
             return nextToken() === 20 /* OpenParenToken */;
         }
+        function nextTokenIsOpenBrace() {
+            return nextToken() === 18 /* OpenBraceToken */;
+        }
         function nextTokenIsSlash() {
             return nextToken() === 43 /* SlashToken */;
         }
         function parseNamespaceExportDeclaration(pos, hasJSDoc, decorators, modifiers) {
-            parseExpected(126 /* AsKeyword */);
-            parseExpected(140 /* NamespaceKeyword */);
+            parseExpected(127 /* AsKeyword */);
+            parseExpected(141 /* NamespaceKeyword */);
             var name = parseIdentifier();
             parseSemicolon();
             var node = factory.createNamespaceExportDeclaration(name);
@@ -34874,7 +35741,7 @@
             return withJSDoc(finishNode(node, pos), hasJSDoc);
         }
         function parseImportDeclarationOrImportEqualsDeclaration(pos, hasJSDoc, decorators, modifiers) {
-            parseExpected(99 /* ImportKeyword */);
+            parseExpected(100 /* ImportKeyword */);
             var afterImportPos = scanner.getStartPos();
             // We don't parse the identifier here in await context, instead we will report a grammar error in the checker.
             var identifier;
@@ -34882,7 +35749,7 @@
                 identifier = parseIdentifier();
             }
             var isTypeOnly = false;
-            if (token() !== 153 /* FromKeyword */ &&
+            if (token() !== 154 /* FromKeyword */ &&
                 (identifier === null || identifier === void 0 ? void 0 : identifier.escapedText) === "type" &&
                 (isIdentifier() || tokenAfterImportDefinitelyProducesImportDeclaration())) {
                 isTypeOnly = true;
@@ -34900,7 +35767,7 @@
                 token() === 18 /* OpenBraceToken */ // import {
             ) {
                 importClause = parseImportClause(identifier, afterImportPos, isTypeOnly);
-                parseExpected(153 /* FromKeyword */);
+                parseExpected(154 /* FromKeyword */);
             }
             var moduleSpecifier = parseModuleSpecifier();
             parseSemicolon();
@@ -34913,10 +35780,10 @@
         function tokenAfterImportedIdentifierDefinitelyProducesImportDeclaration() {
             // In `import id ___`, the current token decides whether to produce
             // an ImportDeclaration or ImportEqualsDeclaration.
-            return token() === 27 /* CommaToken */ || token() === 153 /* FromKeyword */;
+            return token() === 27 /* CommaToken */ || token() === 154 /* FromKeyword */;
         }
         function parseImportEqualsDeclaration(pos, hasJSDoc, decorators, modifiers, identifier, isTypeOnly) {
-            parseExpected(62 /* EqualsToken */);
+            parseExpected(63 /* EqualsToken */);
             var moduleReference = parseModuleReference();
             parseSemicolon();
             var node = factory.createImportEqualsDeclaration(decorators, modifiers, isTypeOnly, identifier, moduleReference);
@@ -34935,7 +35802,7 @@
             var namedBindings;
             if (!identifier ||
                 parseOptional(27 /* CommaToken */)) {
-                namedBindings = token() === 41 /* AsteriskToken */ ? parseNamespaceImport() : parseNamedImportsOrExports(265 /* NamedImports */);
+                namedBindings = token() === 41 /* AsteriskToken */ ? parseNamespaceImport() : parseNamedImportsOrExports(267 /* NamedImports */);
             }
             return finishNode(factory.createImportClause(isTypeOnly, identifier, namedBindings), pos);
         }
@@ -34946,7 +35813,7 @@
         }
         function parseExternalModuleReference() {
             var pos = getNodePos();
-            parseExpected(143 /* RequireKeyword */);
+            parseExpected(144 /* RequireKeyword */);
             parseExpected(20 /* OpenParenToken */);
             var expression = parseModuleSpecifier();
             parseExpected(21 /* CloseParenToken */);
@@ -34970,7 +35837,7 @@
             //  * as ImportedBinding
             var pos = getNodePos();
             parseExpected(41 /* AsteriskToken */);
-            parseExpected(126 /* AsKeyword */);
+            parseExpected(127 /* AsKeyword */);
             var name = parseIdentifier();
             return finishNode(factory.createNamespaceImport(name), pos);
         }
@@ -34983,16 +35850,16 @@
             // ImportsList:
             //  ImportSpecifier
             //  ImportsList, ImportSpecifier
-            var node = kind === 265 /* NamedImports */
+            var node = kind === 267 /* NamedImports */
                 ? factory.createNamedImports(parseBracketedList(23 /* ImportOrExportSpecifiers */, parseImportSpecifier, 18 /* OpenBraceToken */, 19 /* CloseBraceToken */))
                 : factory.createNamedExports(parseBracketedList(23 /* ImportOrExportSpecifiers */, parseExportSpecifier, 18 /* OpenBraceToken */, 19 /* CloseBraceToken */));
             return finishNode(node, pos);
         }
         function parseExportSpecifier() {
-            return parseImportOrExportSpecifier(271 /* ExportSpecifier */);
+            return parseImportOrExportSpecifier(273 /* ExportSpecifier */);
         }
         function parseImportSpecifier() {
-            return parseImportOrExportSpecifier(266 /* ImportSpecifier */);
+            return parseImportOrExportSpecifier(268 /* ImportSpecifier */);
         }
         function parseImportOrExportSpecifier(kind) {
             var pos = getNodePos();
@@ -35008,9 +35875,9 @@
             var identifierName = parseIdentifierName();
             var propertyName;
             var name;
-            if (token() === 126 /* AsKeyword */) {
+            if (token() === 127 /* AsKeyword */) {
                 propertyName = identifierName;
-                parseExpected(126 /* AsKeyword */);
+                parseExpected(127 /* AsKeyword */);
                 checkIdentifierIsKeyword = ts.isKeyword(token()) && !isIdentifier();
                 checkIdentifierStart = scanner.getTokenPos();
                 checkIdentifierEnd = scanner.getTextPos();
@@ -35019,10 +35886,10 @@
             else {
                 name = identifierName;
             }
-            if (kind === 266 /* ImportSpecifier */ && checkIdentifierIsKeyword) {
+            if (kind === 268 /* ImportSpecifier */ && checkIdentifierIsKeyword) {
                 parseErrorAt(checkIdentifierStart, checkIdentifierEnd, ts.Diagnostics.Identifier_expected);
             }
-            var node = kind === 266 /* ImportSpecifier */
+            var node = kind === 268 /* ImportSpecifier */
                 ? factory.createImportSpecifier(propertyName, name)
                 : factory.createExportSpecifier(propertyName, name);
             return finishNode(node, pos);
@@ -35035,22 +35902,22 @@
             setAwaitContext(/*value*/ true);
             var exportClause;
             var moduleSpecifier;
-            var isTypeOnly = parseOptional(149 /* TypeKeyword */);
+            var isTypeOnly = parseOptional(150 /* TypeKeyword */);
             var namespaceExportPos = getNodePos();
             if (parseOptional(41 /* AsteriskToken */)) {
-                if (parseOptional(126 /* AsKeyword */)) {
+                if (parseOptional(127 /* AsKeyword */)) {
                     exportClause = parseNamespaceExport(namespaceExportPos);
                 }
-                parseExpected(153 /* FromKeyword */);
+                parseExpected(154 /* FromKeyword */);
                 moduleSpecifier = parseModuleSpecifier();
             }
             else {
-                exportClause = parseNamedImportsOrExports(269 /* NamedExports */);
+                exportClause = parseNamedImportsOrExports(271 /* NamedExports */);
                 // It is not uncommon to accidentally omit the 'from' keyword. Additionally, in editing scenarios,
                 // the 'from' keyword can be parsed as a named export when the export clause is unterminated (i.e. `export { from "moduleName";`)
                 // If we don't have a 'from' keyword, see if we have a string literal such that ASI won't take effect.
-                if (token() === 153 /* FromKeyword */ || (token() === 10 /* StringLiteral */ && !scanner.hasPrecedingLineBreak())) {
-                    parseExpected(153 /* FromKeyword */);
+                if (token() === 154 /* FromKeyword */ || (token() === 10 /* StringLiteral */ && !scanner.hasPrecedingLineBreak())) {
+                    parseExpected(154 /* FromKeyword */);
                     moduleSpecifier = parseModuleSpecifier();
                 }
             }
@@ -35063,11 +35930,11 @@
             var savedAwaitContext = inAwaitContext();
             setAwaitContext(/*value*/ true);
             var isExportEquals;
-            if (parseOptional(62 /* EqualsToken */)) {
+            if (parseOptional(63 /* EqualsToken */)) {
                 isExportEquals = true;
             }
             else {
-                parseExpected(87 /* DefaultKeyword */);
+                parseExpected(88 /* DefaultKeyword */);
             }
             var expression = parseAssignmentExpressionOrHigher();
             parseSemicolon();
@@ -35083,7 +35950,7 @@
                     getImportMetaIfNecessary(sourceFile);
         }
         function isAnExternalModuleIndicatorNode(node) {
-            return hasModifierOfKind(node, 92 /* ExportKeyword */)
+            return hasModifierOfKind(node, 93 /* ExportKeyword */)
                 || ts.isImportEqualsDeclaration(node) && ts.isExternalModuleReference(node.moduleReference)
                 || ts.isImportDeclaration(node)
                 || ts.isExportAssignment(node)
@@ -35102,7 +35969,7 @@
             return ts.some(node.modifiers, function (m) { return m.kind === kind; });
         }
         function isImportMeta(node) {
-            return ts.isMetaProperty(node) && node.keywordToken === 99 /* ImportKeyword */ && node.name.escapedText === "meta";
+            return ts.isMetaProperty(node) && node.keywordToken === 100 /* ImportKeyword */ && node.name.escapedText === "meta";
         }
         var ParsingContext;
         (function (ParsingContext) {
@@ -35170,7 +36037,13 @@
             function parseJSDocNameReference() {
                 var pos = getNodePos();
                 var hasBrace = parseOptional(18 /* OpenBraceToken */);
+                var p2 = getNodePos();
                 var entityName = parseEntityName(/* allowReservedWords*/ false);
+                while (token() === 80 /* PrivateIdentifier */) {
+                    reScanHashToken(); // rescan #id as # id
+                    nextTokenJSDoc(); // then skip the #
+                    entityName = finishNode(factory.createJSDocMemberName(entityName, parseIdentifier()), p2);
+                }
                 if (hasBrace) {
                     parseExpectedJSDoc(19 /* CloseBraceToken */);
                 }
@@ -35599,28 +36472,44 @@
                     return next === 5 /* WhitespaceTrivia */ || next === 4 /* NewLineTrivia */;
                 }
                 function parseJSDocLink(start) {
-                    if (!tryParse(parseJSDocLinkPrefix)) {
+                    var linkType = tryParse(parseJSDocLinkPrefix);
+                    if (!linkType) {
                         return undefined;
                     }
                     nextTokenJSDoc(); // start at token after link, then skip any whitespace
                     skipWhitespace();
                     // parseEntityName logs an error for non-identifier, so create a MissingNode ourselves to avoid the error
+                    var p2 = getNodePos();
                     var name = ts.tokenIsIdentifierOrKeyword(token())
                         ? parseEntityName(/*allowReservedWords*/ true)
                         : undefined;
+                    if (name) {
+                        while (token() === 80 /* PrivateIdentifier */) {
+                            reScanHashToken(); // rescan #id as # id
+                            nextTokenJSDoc(); // then skip the #
+                            name = finishNode(factory.createJSDocMemberName(name, parseIdentifier()), p2);
+                        }
+                    }
                     var text = [];
                     while (token() !== 19 /* CloseBraceToken */ && token() !== 4 /* NewLineTrivia */ && token() !== 1 /* EndOfFileToken */) {
                         text.push(scanner.getTokenText());
                         nextTokenJSDoc();
                     }
-                    return finishNode(factory.createJSDocLink(name, text.join("")), start, scanner.getTextPos());
+                    var create = linkType === "link" ? factory.createJSDocLink
+                        : linkType === "linkcode" ? factory.createJSDocLinkCode
+                            : factory.createJSDocLinkPlain;
+                    return finishNode(create(name, text.join("")), start, scanner.getTextPos());
                 }
                 function parseJSDocLinkPrefix() {
                     skipWhitespaceOrAsterisk();
-                    return token() === 18 /* OpenBraceToken */
+                    if (token() === 18 /* OpenBraceToken */
                         && nextTokenJSDoc() === 59 /* AtToken */
-                        && ts.tokenIsIdentifierOrKeyword(nextTokenJSDoc())
-                        && scanner.getTokenValue() === "link";
+                        && ts.tokenIsIdentifierOrKeyword(nextTokenJSDoc())) {
+                        var kind = scanner.getTokenValue();
+                        if (kind === "link" || kind === "linkcode" || kind === "linkplain") {
+                            return kind;
+                        }
+                    }
                 }
                 function parseUnknownTag(start, tagName, indent, indentText) {
                     return finishNode(factory.createJSDocUnknownTag(tagName, parseTrailingTagComments(start, getNodePos(), indent, indentText)), start);
@@ -35657,7 +36546,7 @@
                     if (isBracketed) {
                         skipWhitespace();
                         // May have an optional default, e.g. '[foo = 42]'
-                        if (parseOptionalToken(62 /* EqualsToken */)) {
+                        if (parseOptionalToken(63 /* EqualsToken */)) {
                             parseExpression();
                         }
                         parseExpected(23 /* CloseBracketToken */);
@@ -35666,9 +36555,9 @@
                 }
                 function isObjectOrObjectArrayTypeReference(node) {
                     switch (node.kind) {
-                        case 145 /* ObjectKeyword */:
+                        case 146 /* ObjectKeyword */:
                             return true;
-                        case 179 /* ArrayType */:
+                        case 181 /* ArrayType */:
                             return isObjectOrObjectArrayTypeReference(node.elementType);
                         default:
                             return ts.isTypeReferenceNode(node) && ts.isIdentifier(node.typeName) && node.typeName.escapedText === "Object" && !node.typeArguments;
@@ -35700,12 +36589,12 @@
                         var child = void 0;
                         var children = void 0;
                         while (child = tryParse(function () { return parseChildParameterOrPropertyTag(target, indent, name); })) {
-                            if (child.kind === 330 /* JSDocParameterTag */ || child.kind === 337 /* JSDocPropertyTag */) {
+                            if (child.kind === 335 /* JSDocParameterTag */ || child.kind === 342 /* JSDocPropertyTag */) {
                                 children = ts.append(children, child);
                             }
                         }
                         if (children) {
-                            var literal = finishNode(factory.createJSDocTypeLiteral(children, typeExpression.type.kind === 179 /* ArrayType */), pos);
+                            var literal = finishNode(factory.createJSDocTypeLiteral(children, typeExpression.type.kind === 181 /* ArrayType */), pos);
                             return finishNode(factory.createJSDocTypeExpression(literal), pos);
                         }
                     }
@@ -35822,7 +36711,7 @@
                         var hasChildren = false;
                         while (child = tryParse(function () { return parseChildPropertyTag(indent); })) {
                             hasChildren = true;
-                            if (child.kind === 333 /* JSDocTypeTag */) {
+                            if (child.kind === 338 /* JSDocTypeTag */) {
                                 if (childTypeTag) {
                                     parseErrorAtCurrentToken(ts.Diagnostics.A_JSDoc_typedef_comment_may_not_contain_multiple_type_tags);
                                     var lastError = ts.lastOrUndefined(parseDiagnostics);
@@ -35840,7 +36729,7 @@
                             }
                         }
                         if (hasChildren) {
-                            var isArrayType = typeExpression && typeExpression.type.kind === 179 /* ArrayType */;
+                            var isArrayType = typeExpression && typeExpression.type.kind === 181 /* ArrayType */;
                             var jsdocTypeLiteral = factory.createJSDocTypeLiteral(jsDocPropertyTags, isArrayType);
                             typeExpression = childTypeTag && childTypeTag.typeExpression && !isObjectOrObjectArrayTypeReference(childTypeTag.typeExpression.type) ?
                                 childTypeTag.typeExpression :
@@ -35893,7 +36782,7 @@
                     var returnTag = tryParse(function () {
                         if (parseOptionalJsdoc(59 /* AtToken */)) {
                             var tag = parseTag(indent);
-                            if (tag && tag.kind === 331 /* JSDocReturnTag */) {
+                            if (tag && tag.kind === 336 /* JSDocReturnTag */) {
                                 return tag;
                             }
                         }
@@ -35927,7 +36816,7 @@
                             case 59 /* AtToken */:
                                 if (canParseTag) {
                                     var child = tryParseChildTag(target, indent);
-                                    if (child && (child.kind === 330 /* JSDocParameterTag */ || child.kind === 337 /* JSDocPropertyTag */) &&
+                                    if (child && (child.kind === 335 /* JSDocParameterTag */ || child.kind === 342 /* JSDocPropertyTag */) &&
                                         target !== 4 /* CallbackParameter */ &&
                                         name && (ts.isIdentifier(child.name) || !escapedTextsEqual(name, child.name.left))) {
                                         return false;
@@ -35946,7 +36835,7 @@
                                 }
                                 seenAsterisk = true;
                                 break;
-                            case 78 /* Identifier */:
+                            case 79 /* Identifier */:
                                 canParseTag = false;
                                 break;
                             case 1 /* EndOfFileToken */:
@@ -36044,7 +36933,7 @@
                 }
                 function parseJSDocIdentifierName(message) {
                     if (!ts.tokenIsIdentifierOrKeyword(token())) {
-                        return createMissingNode(78 /* Identifier */, /*reportAtCurrentPosition*/ !message, message || ts.Diagnostics.Identifier_expected);
+                        return createMissingNode(79 /* Identifier */, /*reportAtCurrentPosition*/ !message, message || ts.Diagnostics.Identifier_expected);
                     }
                     identifierCount++;
                     var pos = scanner.getTokenPos();
@@ -36207,8 +37096,8 @@
             function visitArray(array) {
                 array._children = undefined;
                 ts.setTextRangePosEnd(array, array.pos + delta, array.end + delta);
-                for (var _i = 0, array_8 = array; _i < array_8.length; _i++) {
-                    var node = array_8[_i];
+                for (var _i = 0, array_9 = array; _i < array_9.length; _i++) {
+                    var node = array_9[_i];
                     visitNode(node);
                 }
             }
@@ -36217,7 +37106,7 @@
             switch (node.kind) {
                 case 10 /* StringLiteral */:
                 case 8 /* NumericLiteral */:
-                case 78 /* Identifier */:
+                case 79 /* Identifier */:
                     return true;
             }
             return false;
@@ -36356,8 +37245,8 @@
                     array._children = undefined;
                     // Adjust the pos or end (or both) of the intersecting array accordingly.
                     adjustIntersectingElement(array, changeStart, changeRangeOldEnd, changeRangeNewEnd, delta);
-                    for (var _i = 0, array_9 = array; _i < array_9.length; _i++) {
-                        var node = array_9[_i];
+                    for (var _i = 0, array_10 = array; _i < array_10.length; _i++) {
+                        var node = array_10[_i];
                         visitNode(node);
                     }
                     return;
@@ -36691,7 +37580,7 @@
         if (namedArgRegExCache.has(name)) {
             return namedArgRegExCache.get(name);
         }
-        var result = new RegExp("(\\s" + name + "\\s*=\\s*)('|\")(.+?)\\2", "im");
+        var result = new RegExp("(\\s" + name + "\\s*=\\s*)(?:(?:'([^']*)')|(?:\"([^\"]*)\"))", "im");
         namedArgRegExCache.set(name, result);
         return result;
     }
@@ -36715,16 +37604,17 @@
                         return; // Missing required argument, don't parse
                     }
                     else if (matchResult) {
+                        var value = matchResult[2] || matchResult[3];
                         if (arg.captureSpan) {
-                            var startPos = range.pos + matchResult.index + matchResult[1].length + matchResult[2].length;
+                            var startPos = range.pos + matchResult.index + matchResult[1].length + 1;
                             argument[arg.name] = {
-                                value: matchResult[3],
+                                value: value,
                                 pos: startPos,
-                                end: startPos + matchResult[3].length
+                                end: startPos + value.length
                             };
                         }
                         else {
-                            argument[arg.name] = matchResult[3];
+                            argument[arg.name] = value;
                         }
                     }
                 }
@@ -36740,7 +37630,7 @@
             return addPragmaForMatch(pragmas, range, 2 /* SingleLine */, singleLine);
         }
         if (range.kind === 3 /* MultiLineCommentTrivia */) {
-            var multiLinePragmaRegEx = /\s*@(\S+)\s*(.*)\s*$/gim; // Defined inline since it uses the "g" flag, which keeps a persistent index (for iterating)
+            var multiLinePragmaRegEx = /@(\S+)(\s+.*)?$/gim; // Defined inline since it uses the "g" flag, which keeps a persistent index (for iterating)
             var multiLineMatch = void 0;
             while (multiLineMatch = multiLinePragmaRegEx.exec(text)) {
                 addPragmaForMatch(pragmas, range, 4 /* MultiLine */, multiLineMatch);
@@ -36767,7 +37657,7 @@
             return {};
         if (!pragma.args)
             return {};
-        var args = text.split(/\s+/);
+        var args = ts.trimString(text).split(/\s+/);
         var argMap = {};
         for (var i = 0; i < pragma.args.length; i++) {
             var argument = pragma.args[i];
@@ -36786,10 +37676,10 @@
         if (lhs.kind !== rhs.kind) {
             return false;
         }
-        if (lhs.kind === 78 /* Identifier */) {
+        if (lhs.kind === 79 /* Identifier */) {
             return lhs.escapedText === rhs.escapedText;
         }
-        if (lhs.kind === 107 /* ThisKeyword */) {
+        if (lhs.kind === 108 /* ThisKeyword */) {
             return true;
         }
         // If we are at this statement then we must have PropertyAccessExpression and because tag name in Jsx element can only
@@ -36909,8 +37799,8 @@
                 usefsevents: ts.WatchFileKind.UseFsEvents,
                 usefseventsonparentdirectory: ts.WatchFileKind.UseFsEventsOnParentDirectory,
             })),
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Specify_strategy_for_watching_file_Colon_FixedPollingInterval_default_PriorityPollingInterval_DynamicPriorityPolling_FixedChunkSizePolling_UseFsEvents_UseFsEventsOnParentDirectory,
+            category: ts.Diagnostics.Watch_and_Build_Modes,
+            description: ts.Diagnostics.Specify_how_the_TypeScript_watch_mode_works,
         },
         {
             name: "watchDirectory",
@@ -36920,8 +37810,8 @@
                 dynamicprioritypolling: ts.WatchDirectoryKind.DynamicPriorityPolling,
                 fixedchunksizepolling: ts.WatchDirectoryKind.FixedChunkSizePolling,
             })),
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Specify_strategy_for_watching_directory_on_platforms_that_don_t_support_recursive_watching_natively_Colon_UseFsEvents_default_FixedPollingInterval_DynamicPriorityPolling_FixedChunkSizePolling,
+            category: ts.Diagnostics.Watch_and_Build_Modes,
+            description: ts.Diagnostics.Specify_how_directories_are_watched_on_systems_that_lack_recursive_file_watching_functionality,
         },
         {
             name: "fallbackPolling",
@@ -36931,13 +37821,13 @@
                 dynamicpriority: ts.PollingWatchKind.DynamicPriority,
                 fixedchunksize: ts.PollingWatchKind.FixedChunkSize,
             })),
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Specify_strategy_for_creating_a_polling_watch_when_it_fails_to_create_using_file_system_events_Colon_FixedInterval_default_PriorityInterval_DynamicPriority_FixedChunkSize,
+            category: ts.Diagnostics.Watch_and_Build_Modes,
+            description: ts.Diagnostics.Specify_what_approach_the_watcher_should_use_if_the_system_runs_out_of_native_file_watchers,
         },
         {
             name: "synchronousWatchDirectory",
             type: "boolean",
-            category: ts.Diagnostics.Advanced_Options,
+            category: ts.Diagnostics.Watch_and_Build_Modes,
             description: ts.Diagnostics.Synchronously_call_callbacks_and_update_the_state_of_directory_watchers_on_platforms_that_don_t_support_recursive_watching_natively,
         },
         {
@@ -36949,8 +37839,8 @@
                 isFilePath: true,
                 extraValidation: specToDiagnostic
             },
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Synchronously_call_callbacks_and_update_the_state_of_directory_watchers_on_platforms_that_don_t_support_recursive_watching_natively,
+            category: ts.Diagnostics.Watch_and_Build_Modes,
+            description: ts.Diagnostics.Remove_a_list_of_directories_from_the_watch_process,
         },
         {
             name: "excludeFiles",
@@ -36961,8 +37851,8 @@
                 isFilePath: true,
                 extraValidation: specToDiagnostic
             },
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Synchronously_call_callbacks_and_update_the_state_of_directory_watchers_on_platforms_that_don_t_support_recursive_watching_natively,
+            category: ts.Diagnostics.Watch_and_Build_Modes,
+            description: ts.Diagnostics.Remove_a_list_of_files_from_the_watch_mode_s_processing,
         },
     ];
     /* @internal */
@@ -36985,6 +37875,7 @@
             shortName: "w",
             type: "boolean",
             showInSimplifiedHelpView: true,
+            isCommandLineOnly: true,
             category: ts.Diagnostics.Command_line_Options,
             description: ts.Diagnostics.Watch_input_files,
         },
@@ -36992,58 +37883,67 @@
             name: "preserveWatchOutput",
             type: "boolean",
             showInSimplifiedHelpView: false,
-            category: ts.Diagnostics.Command_line_Options,
-            description: ts.Diagnostics.Whether_to_keep_outdated_console_output_in_watch_mode_instead_of_clearing_the_screen,
+            category: ts.Diagnostics.Output_Formatting,
+            description: ts.Diagnostics.Disable_wiping_the_console_in_watch_mode,
+            defaultValueDescription: "n/a"
         },
         {
             name: "listFiles",
             type: "boolean",
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Print_names_of_files_part_of_the_compilation
+            category: ts.Diagnostics.Compiler_Diagnostics,
+            description: ts.Diagnostics.Print_all_of_the_files_read_during_the_compilation,
+            defaultValueDescription: "false"
         },
         {
             name: "explainFiles",
             type: "boolean",
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Print_names_of_files_and_the_reason_they_are_part_of_the_compilation
-        }, {
+            category: ts.Diagnostics.Compiler_Diagnostics,
+            description: ts.Diagnostics.Print_files_read_during_the_compilation_including_why_it_was_included
+        },
+        {
             name: "listEmittedFiles",
             type: "boolean",
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Print_names_of_generated_files_part_of_the_compilation
+            category: ts.Diagnostics.Compiler_Diagnostics,
+            description: ts.Diagnostics.Print_the_names_of_emitted_files_after_a_compilation,
+            defaultValueDescription: "false"
         },
         {
             name: "pretty",
             type: "boolean",
             showInSimplifiedHelpView: true,
-            category: ts.Diagnostics.Command_line_Options,
-            description: ts.Diagnostics.Stylize_errors_and_messages_using_color_and_context_experimental
+            category: ts.Diagnostics.Output_Formatting,
+            description: ts.Diagnostics.Enable_color_and_formatting_in_TypeScript_s_output_to_make_compiler_errors_easier_to_read,
+            defaultValueDescription: "true"
         },
         {
             name: "traceResolution",
             type: "boolean",
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Enable_tracing_of_the_name_resolution_process
+            category: ts.Diagnostics.Compiler_Diagnostics,
+            description: ts.Diagnostics.Log_paths_used_during_the_moduleResolution_process,
+            defaultValueDescription: "false"
         },
         {
             name: "diagnostics",
             type: "boolean",
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Show_diagnostic_information
+            category: ts.Diagnostics.Compiler_Diagnostics,
+            description: ts.Diagnostics.Output_compiler_performance_information_after_building,
+            defaultValueDescription: "false"
         },
         {
             name: "extendedDiagnostics",
             type: "boolean",
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Show_verbose_diagnostic_information
+            category: ts.Diagnostics.Compiler_Diagnostics,
+            description: ts.Diagnostics.Output_more_detailed_compiler_performance_information_after_building,
+            defaultValueDescription: "false"
         },
         {
             name: "generateCpuProfile",
             type: "string",
             isFilePath: true,
             paramType: ts.Diagnostics.FILE_OR_DIRECTORY,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Generates_a_CPU_profile
+            category: ts.Diagnostics.Compiler_Diagnostics,
+            description: ts.Diagnostics.Emit_a_v8_CPU_profile_of_the_compiler_run_for_debugging,
+            defaultValueDescription: "profile.cpuprofile"
         },
         {
             name: "generateTrace",
@@ -37051,30 +37951,33 @@
             isFilePath: true,
             isCommandLineOnly: true,
             paramType: ts.Diagnostics.DIRECTORY,
-            category: ts.Diagnostics.Advanced_Options,
+            category: ts.Diagnostics.Compiler_Diagnostics,
             description: ts.Diagnostics.Generates_an_event_trace_and_a_list_of_types
         },
         {
             name: "incremental",
             shortName: "i",
             type: "boolean",
-            category: ts.Diagnostics.Basic_Options,
+            category: ts.Diagnostics.Projects,
             description: ts.Diagnostics.Enable_incremental_compilation,
-            transpileOptionValue: undefined
+            transpileOptionValue: undefined,
+            defaultValueDescription: ts.Diagnostics.false_unless_composite_is_set
         },
         {
             name: "assumeChangesOnlyAffectDirectDependencies",
             type: "boolean",
             affectsSemanticDiagnostics: true,
             affectsEmit: true,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Have_recompiles_in_incremental_and_watch_assume_that_changes_within_a_file_will_only_affect_files_directly_depending_on_it
+            category: ts.Diagnostics.Watch_and_Build_Modes,
+            description: ts.Diagnostics.Have_recompiles_in_projects_that_use_incremental_and_watch_mode_assume_that_changes_within_a_file_will_only_affect_files_directly_depending_on_it
         },
         {
             name: "locale",
             type: "string",
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.The_locale_used_when_displaying_messages_to_the_user_e_g_en_us
+            category: ts.Diagnostics.Command_line_Options,
+            isCommandLineOnly: true,
+            description: ts.Diagnostics.Set_the_language_of_the_messaging_from_TypeScript_This_does_not_affect_emit,
+            defaultValueDescription: ts.Diagnostics.Platform_specific
         },
     ];
     /* @internal */
@@ -37099,8 +38002,9 @@
         affectsEmit: true,
         paramType: ts.Diagnostics.VERSION,
         showInSimplifiedHelpView: true,
-        category: ts.Diagnostics.Basic_Options,
-        description: ts.Diagnostics.Specify_ECMAScript_target_version_Colon_ES3_default_ES5_ES2015_ES2016_ES2017_ES2018_ES2019_ES2020_ES2021_or_ESNEXT,
+        category: ts.Diagnostics.Language_and_Environment,
+        description: ts.Diagnostics.Set_the_JavaScript_language_version_for_emitted_JavaScript_and_include_compatible_library_declarations,
+        defaultValueDescription: "ES3"
     };
     var commandOptionsWithoutBuild = [
         // CommandLine only options
@@ -37147,6 +38051,7 @@
         {
             name: "showConfig",
             type: "boolean",
+            showInSimplifiedHelpView: true,
             category: ts.Diagnostics.Command_line_Options,
             isCommandLineOnly: true,
             description: ts.Diagnostics.Print_the_final_configuration_instead_of_building
@@ -37180,8 +38085,8 @@
             affectsEmit: true,
             paramType: ts.Diagnostics.KIND,
             showInSimplifiedHelpView: true,
-            category: ts.Diagnostics.Basic_Options,
-            description: ts.Diagnostics.Specify_module_code_generation_Colon_none_commonjs_amd_system_umd_es2015_es2020_or_ESNext,
+            category: ts.Diagnostics.Modules,
+            description: ts.Diagnostics.Specify_what_module_code_is_generated,
         },
         {
             name: "lib",
@@ -37190,10 +38095,10 @@
                 name: "lib",
                 type: ts.libMap
             },
-            affectsModuleResolution: true,
+            affectsProgramStructure: true,
             showInSimplifiedHelpView: true,
-            category: ts.Diagnostics.Basic_Options,
-            description: ts.Diagnostics.Specify_library_files_to_be_included_in_the_compilation,
+            category: ts.Diagnostics.Language_and_Environment,
+            description: ts.Diagnostics.Specify_a_set_of_bundled_library_declaration_files_that_describe_the_target_runtime_environment,
             transpileOptionValue: undefined
         },
         {
@@ -37201,14 +38106,17 @@
             type: "boolean",
             affectsModuleResolution: true,
             showInSimplifiedHelpView: true,
-            category: ts.Diagnostics.Basic_Options,
-            description: ts.Diagnostics.Allow_javascript_files_to_be_compiled
+            category: ts.Diagnostics.JavaScript_Support,
+            description: ts.Diagnostics.Allow_JavaScript_files_to_be_a_part_of_your_program_Use_the_checkJS_option_to_get_errors_from_these_files,
+            defaultValueDescription: "false"
         },
         {
             name: "checkJs",
             type: "boolean",
-            category: ts.Diagnostics.Basic_Options,
-            description: ts.Diagnostics.Report_errors_in_js_files
+            showInSimplifiedHelpView: true,
+            category: ts.Diagnostics.JavaScript_Support,
+            description: ts.Diagnostics.Enable_error_reporting_in_type_checked_JavaScript_files,
+            defaultValueDescription: "false"
         },
         {
             name: "jsx",
@@ -37218,8 +38126,9 @@
             affectsModuleResolution: true,
             paramType: ts.Diagnostics.KIND,
             showInSimplifiedHelpView: true,
-            category: ts.Diagnostics.Basic_Options,
-            description: ts.Diagnostics.Specify_JSX_code_generation_Colon_preserve_react_native_react_react_jsx_or_react_jsxdev,
+            category: ts.Diagnostics.Language_and_Environment,
+            description: ts.Diagnostics.Specify_what_JSX_code_is_generated,
+            defaultValueDescription: "undefined"
         },
         {
             name: "declaration",
@@ -37227,34 +38136,39 @@
             type: "boolean",
             affectsEmit: true,
             showInSimplifiedHelpView: true,
-            category: ts.Diagnostics.Basic_Options,
-            description: ts.Diagnostics.Generates_corresponding_d_ts_file,
-            transpileOptionValue: undefined
+            category: ts.Diagnostics.Emit,
+            transpileOptionValue: undefined,
+            description: ts.Diagnostics.Generate_d_ts_files_from_TypeScript_and_JavaScript_files_in_your_project,
+            defaultValueDescription: ts.Diagnostics.false_unless_composite_is_set,
         },
         {
             name: "declarationMap",
             type: "boolean",
             affectsEmit: true,
             showInSimplifiedHelpView: true,
-            category: ts.Diagnostics.Basic_Options,
-            description: ts.Diagnostics.Generates_a_sourcemap_for_each_corresponding_d_ts_file,
-            transpileOptionValue: undefined
+            category: ts.Diagnostics.Emit,
+            transpileOptionValue: undefined,
+            defaultValueDescription: "false",
+            description: ts.Diagnostics.Create_sourcemaps_for_d_ts_files
         },
         {
             name: "emitDeclarationOnly",
             type: "boolean",
             affectsEmit: true,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Only_emit_d_ts_declaration_files,
-            transpileOptionValue: undefined
+            showInSimplifiedHelpView: true,
+            category: ts.Diagnostics.Emit,
+            description: ts.Diagnostics.Only_output_d_ts_files_and_not_JavaScript_files,
+            transpileOptionValue: undefined,
+            defaultValueDescription: "false",
         },
         {
             name: "sourceMap",
             type: "boolean",
             affectsEmit: true,
             showInSimplifiedHelpView: true,
-            category: ts.Diagnostics.Basic_Options,
-            description: ts.Diagnostics.Generates_corresponding_map_file,
+            category: ts.Diagnostics.Emit,
+            defaultValueDescription: "false",
+            description: ts.Diagnostics.Create_source_map_files_for_emitted_JavaScript_files,
         },
         {
             name: "outFile",
@@ -37263,9 +38177,10 @@
             isFilePath: true,
             paramType: ts.Diagnostics.FILE,
             showInSimplifiedHelpView: true,
-            category: ts.Diagnostics.Basic_Options,
-            description: ts.Diagnostics.Concatenate_and_emit_output_to_single_file,
-            transpileOptionValue: undefined
+            category: ts.Diagnostics.Emit,
+            description: ts.Diagnostics.Specify_a_file_that_bundles_all_outputs_into_one_JavaScript_file_If_declaration_is_true_also_designates_a_file_that_bundles_all_d_ts_output,
+            transpileOptionValue: undefined,
+            defaultValueDescription: "n/a"
         },
         {
             name: "outDir",
@@ -37274,8 +38189,9 @@
             isFilePath: true,
             paramType: ts.Diagnostics.DIRECTORY,
             showInSimplifiedHelpView: true,
-            category: ts.Diagnostics.Basic_Options,
-            description: ts.Diagnostics.Redirect_output_structure_to_the_directory,
+            category: ts.Diagnostics.Emit,
+            description: ts.Diagnostics.Specify_an_output_folder_for_all_emitted_files,
+            defaultValueDescription: "n/a"
         },
         {
             name: "rootDir",
@@ -37283,17 +38199,19 @@
             affectsEmit: true,
             isFilePath: true,
             paramType: ts.Diagnostics.LOCATION,
-            category: ts.Diagnostics.Basic_Options,
-            description: ts.Diagnostics.Specify_the_root_directory_of_input_files_Use_to_control_the_output_directory_structure_with_outDir,
+            category: ts.Diagnostics.Modules,
+            description: ts.Diagnostics.Specify_the_root_folder_within_your_source_files,
+            defaultValueDescription: ts.Diagnostics.Computed_from_the_list_of_input_files
         },
         {
             name: "composite",
             type: "boolean",
             affectsEmit: true,
             isTSConfigOnly: true,
-            category: ts.Diagnostics.Basic_Options,
-            description: ts.Diagnostics.Enable_project_compilation,
-            transpileOptionValue: undefined
+            category: ts.Diagnostics.Projects,
+            transpileOptionValue: undefined,
+            defaultValueDescription: "false",
+            description: ts.Diagnostics.Enable_constraints_that_allow_a_TypeScript_project_to_be_used_with_project_references,
         },
         {
             name: "tsBuildInfoFile",
@@ -37301,32 +38219,36 @@
             affectsEmit: true,
             isFilePath: true,
             paramType: ts.Diagnostics.FILE,
-            category: ts.Diagnostics.Basic_Options,
-            description: ts.Diagnostics.Specify_file_to_store_incremental_compilation_information,
-            transpileOptionValue: undefined
+            category: ts.Diagnostics.Projects,
+            transpileOptionValue: undefined,
+            defaultValueDescription: ".tsbuildinfo",
+            description: ts.Diagnostics.Specify_the_folder_for_tsbuildinfo_incremental_compilation_files,
         },
         {
             name: "removeComments",
             type: "boolean",
             affectsEmit: true,
             showInSimplifiedHelpView: true,
-            category: ts.Diagnostics.Basic_Options,
-            description: ts.Diagnostics.Do_not_emit_comments_to_output,
+            category: ts.Diagnostics.Emit,
+            defaultValueDescription: "false",
+            description: ts.Diagnostics.Disable_emitting_comments,
         },
         {
             name: "noEmit",
             type: "boolean",
             showInSimplifiedHelpView: true,
-            category: ts.Diagnostics.Basic_Options,
-            description: ts.Diagnostics.Do_not_emit_outputs,
-            transpileOptionValue: undefined
+            category: ts.Diagnostics.Emit,
+            description: ts.Diagnostics.Disable_emitting_files_from_a_compilation,
+            transpileOptionValue: undefined,
+            defaultValueDescription: "false"
         },
         {
             name: "importHelpers",
             type: "boolean",
             affectsEmit: true,
-            category: ts.Diagnostics.Basic_Options,
-            description: ts.Diagnostics.Import_emit_helpers_from_tslib
+            category: ts.Diagnostics.Emit,
+            description: ts.Diagnostics.Allow_importing_helper_functions_from_tslib_once_per_project_instead_of_including_them_per_file,
+            defaultValueDescription: "false"
         },
         {
             name: "importsNotUsedAsValues",
@@ -37337,22 +38259,24 @@
             })),
             affectsEmit: true,
             affectsSemanticDiagnostics: true,
-            category: ts.Diagnostics.Advanced_Options,
+            category: ts.Diagnostics.Emit,
             description: ts.Diagnostics.Specify_emit_Slashchecking_behavior_for_imports_that_are_only_used_for_types
         },
         {
             name: "downlevelIteration",
             type: "boolean",
             affectsEmit: true,
-            category: ts.Diagnostics.Basic_Options,
-            description: ts.Diagnostics.Provide_full_support_for_iterables_in_for_of_spread_and_destructuring_when_targeting_ES5_or_ES3
+            category: ts.Diagnostics.Emit,
+            description: ts.Diagnostics.Emit_more_compliant_but_verbose_and_less_performant_JavaScript_for_iteration,
+            defaultValueDescription: "false"
         },
         {
             name: "isolatedModules",
             type: "boolean",
-            category: ts.Diagnostics.Basic_Options,
-            description: ts.Diagnostics.Transpile_each_file_as_a_separate_module_similar_to_ts_transpileModule,
-            transpileOptionValue: true
+            category: ts.Diagnostics.Interop_Constraints,
+            description: ts.Diagnostics.Ensure_that_each_file_can_be_safely_transpiled_without_relying_on_other_imports,
+            transpileOptionValue: true,
+            defaultValueDescription: "false"
         },
         // Strict Type Checks
         {
@@ -37361,127 +38285,140 @@
             // Though this affects semantic diagnostics, affectsSemanticDiagnostics is not set here
             // The value of each strictFlag depends on own strictFlag value or this and never accessed directly.
             showInSimplifiedHelpView: true,
-            category: ts.Diagnostics.Strict_Type_Checking_Options,
-            description: ts.Diagnostics.Enable_all_strict_type_checking_options
+            category: ts.Diagnostics.Type_Checking,
+            description: ts.Diagnostics.Enable_all_strict_type_checking_options,
+            defaultValueDescription: "false"
         },
         {
             name: "noImplicitAny",
             type: "boolean",
             affectsSemanticDiagnostics: true,
             strictFlag: true,
-            showInSimplifiedHelpView: true,
-            category: ts.Diagnostics.Strict_Type_Checking_Options,
-            description: ts.Diagnostics.Raise_error_on_expressions_and_declarations_with_an_implied_any_type
+            category: ts.Diagnostics.Type_Checking,
+            description: ts.Diagnostics.Enable_error_reporting_for_expressions_and_declarations_with_an_implied_any_type,
+            defaultValueDescription: ts.Diagnostics.false_unless_strict_is_set
         },
         {
             name: "strictNullChecks",
             type: "boolean",
             affectsSemanticDiagnostics: true,
             strictFlag: true,
-            showInSimplifiedHelpView: true,
-            category: ts.Diagnostics.Strict_Type_Checking_Options,
-            description: ts.Diagnostics.Enable_strict_null_checks
+            category: ts.Diagnostics.Type_Checking,
+            description: ts.Diagnostics.When_type_checking_take_into_account_null_and_undefined,
+            defaultValueDescription: ts.Diagnostics.false_unless_strict_is_set
         },
         {
             name: "strictFunctionTypes",
             type: "boolean",
-            affectsSemanticDiagnostics: true,
             strictFlag: true,
-            showInSimplifiedHelpView: true,
-            category: ts.Diagnostics.Strict_Type_Checking_Options,
-            description: ts.Diagnostics.Enable_strict_checking_of_function_types
+            category: ts.Diagnostics.Type_Checking,
+            description: ts.Diagnostics.When_assigning_functions_check_to_ensure_parameters_and_the_return_values_are_subtype_compatible,
+            defaultValueDescription: ts.Diagnostics.false_unless_strict_is_set
         },
         {
             name: "strictBindCallApply",
             type: "boolean",
             strictFlag: true,
-            showInSimplifiedHelpView: true,
-            category: ts.Diagnostics.Strict_Type_Checking_Options,
-            description: ts.Diagnostics.Enable_strict_bind_call_and_apply_methods_on_functions
+            category: ts.Diagnostics.Type_Checking,
+            description: ts.Diagnostics.Check_that_the_arguments_for_bind_call_and_apply_methods_match_the_original_function,
+            defaultValueDescription: ts.Diagnostics.false_unless_strict_is_set
         },
         {
             name: "strictPropertyInitialization",
             type: "boolean",
             affectsSemanticDiagnostics: true,
             strictFlag: true,
-            showInSimplifiedHelpView: true,
-            category: ts.Diagnostics.Strict_Type_Checking_Options,
-            description: ts.Diagnostics.Enable_strict_checking_of_property_initialization_in_classes
+            category: ts.Diagnostics.Type_Checking,
+            description: ts.Diagnostics.Check_for_class_properties_that_are_declared_but_not_set_in_the_constructor,
+            defaultValueDescription: ts.Diagnostics.false_unless_strict_is_set
         },
         {
             name: "noImplicitThis",
             type: "boolean",
             affectsSemanticDiagnostics: true,
             strictFlag: true,
-            showInSimplifiedHelpView: true,
-            category: ts.Diagnostics.Strict_Type_Checking_Options,
-            description: ts.Diagnostics.Raise_error_on_this_expressions_with_an_implied_any_type,
+            category: ts.Diagnostics.Type_Checking,
+            description: ts.Diagnostics.Enable_error_reporting_when_this_is_given_the_type_any,
+            defaultValueDescription: ts.Diagnostics.false_unless_strict_is_set
+        },
+        {
+            name: "useUnknownInCatchVariables",
+            type: "boolean",
+            affectsSemanticDiagnostics: true,
+            strictFlag: true,
+            category: ts.Diagnostics.Type_Checking,
+            description: ts.Diagnostics.Type_catch_clause_variables_as_unknown_instead_of_any,
         },
         {
             name: "alwaysStrict",
             type: "boolean",
             affectsSourceFile: true,
             strictFlag: true,
-            showInSimplifiedHelpView: true,
-            category: ts.Diagnostics.Strict_Type_Checking_Options,
-            description: ts.Diagnostics.Parse_in_strict_mode_and_emit_use_strict_for_each_source_file
+            category: ts.Diagnostics.Type_Checking,
+            description: ts.Diagnostics.Ensure_use_strict_is_always_emitted,
+            defaultValueDescription: ts.Diagnostics.false_unless_strict_is_set
         },
         // Additional Checks
         {
             name: "noUnusedLocals",
             type: "boolean",
             affectsSemanticDiagnostics: true,
-            showInSimplifiedHelpView: true,
-            category: ts.Diagnostics.Additional_Checks,
-            description: ts.Diagnostics.Report_errors_on_unused_locals,
+            category: ts.Diagnostics.Type_Checking,
+            description: ts.Diagnostics.Enable_error_reporting_when_a_local_variables_aren_t_read,
+            defaultValueDescription: "false"
         },
         {
             name: "noUnusedParameters",
             type: "boolean",
             affectsSemanticDiagnostics: true,
-            showInSimplifiedHelpView: true,
-            category: ts.Diagnostics.Additional_Checks,
-            description: ts.Diagnostics.Report_errors_on_unused_parameters,
+            category: ts.Diagnostics.Type_Checking,
+            description: ts.Diagnostics.Raise_an_error_when_a_function_parameter_isn_t_read,
+            defaultValueDescription: "false"
+        },
+        {
+            name: "exactOptionalPropertyTypes",
+            type: "boolean",
+            affectsSemanticDiagnostics: true,
+            category: ts.Diagnostics.Type_Checking,
+            description: ts.Diagnostics.Interpret_optional_property_types_as_written_rather_than_adding_undefined
         },
         {
             name: "noImplicitReturns",
             type: "boolean",
             affectsSemanticDiagnostics: true,
-            showInSimplifiedHelpView: true,
-            category: ts.Diagnostics.Additional_Checks,
-            description: ts.Diagnostics.Report_error_when_not_all_code_paths_in_function_return_a_value
+            category: ts.Diagnostics.Type_Checking,
+            description: ts.Diagnostics.Enable_error_reporting_for_codepaths_that_do_not_explicitly_return_in_a_function,
+            defaultValueDescription: "false"
         },
         {
             name: "noFallthroughCasesInSwitch",
             type: "boolean",
             affectsBindDiagnostics: true,
             affectsSemanticDiagnostics: true,
-            showInSimplifiedHelpView: true,
-            category: ts.Diagnostics.Additional_Checks,
-            description: ts.Diagnostics.Report_errors_for_fallthrough_cases_in_switch_statement
+            category: ts.Diagnostics.Type_Checking,
+            description: ts.Diagnostics.Enable_error_reporting_for_fallthrough_cases_in_switch_statements
         },
         {
             name: "noUncheckedIndexedAccess",
             type: "boolean",
             affectsSemanticDiagnostics: true,
-            showInSimplifiedHelpView: false,
-            category: ts.Diagnostics.Additional_Checks,
+            category: ts.Diagnostics.Type_Checking,
             description: ts.Diagnostics.Include_undefined_in_index_signature_results
         },
         {
             name: "noImplicitOverride",
             type: "boolean",
             affectsSemanticDiagnostics: true,
-            showInSimplifiedHelpView: false,
-            category: ts.Diagnostics.Additional_Checks,
+            category: ts.Diagnostics.Type_Checking,
             description: ts.Diagnostics.Ensure_overriding_members_in_derived_classes_are_marked_with_an_override_modifier
         },
         {
             name: "noPropertyAccessFromIndexSignature",
             type: "boolean",
             showInSimplifiedHelpView: false,
-            category: ts.Diagnostics.Additional_Checks,
-            description: ts.Diagnostics.Require_undeclared_properties_from_index_signatures_to_use_element_accesses
+            category: ts.Diagnostics.Type_Checking,
+            description: ts.Diagnostics.Enforces_using_indexed_accessors_for_keys_declared_using_an_indexed_type,
+            defaultValueDescription: "false"
         },
         // Module Resolution
         {
@@ -37492,16 +38429,17 @@
             })),
             affectsModuleResolution: true,
             paramType: ts.Diagnostics.STRATEGY,
-            category: ts.Diagnostics.Module_Resolution_Options,
-            description: ts.Diagnostics.Specify_module_resolution_strategy_Colon_node_Node_js_or_classic_TypeScript_pre_1_6,
+            category: ts.Diagnostics.Modules,
+            description: ts.Diagnostics.Specify_how_TypeScript_looks_up_a_file_from_a_given_module_specifier,
+            defaultValueDescription: ts.Diagnostics.module_AMD_or_UMD_or_System_or_ES6_then_Classic_Otherwise_Node
         },
         {
             name: "baseUrl",
             type: "string",
             affectsModuleResolution: true,
             isFilePath: true,
-            category: ts.Diagnostics.Module_Resolution_Options,
-            description: ts.Diagnostics.Base_directory_to_resolve_non_absolute_module_names
+            category: ts.Diagnostics.Modules,
+            description: ts.Diagnostics.Specify_the_base_directory_to_resolve_non_relative_module_names
         },
         {
             // this option can only be specified in tsconfig.json
@@ -37510,8 +38448,8 @@
             type: "object",
             affectsModuleResolution: true,
             isTSConfigOnly: true,
-            category: ts.Diagnostics.Module_Resolution_Options,
-            description: ts.Diagnostics.A_series_of_entries_which_re_map_imports_to_lookup_locations_relative_to_the_baseUrl,
+            category: ts.Diagnostics.Modules,
+            description: ts.Diagnostics.Specify_a_set_of_entries_that_re_map_imports_to_additional_lookup_locations,
             transpileOptionValue: undefined
         },
         {
@@ -37526,9 +38464,10 @@
                 isFilePath: true
             },
             affectsModuleResolution: true,
-            category: ts.Diagnostics.Module_Resolution_Options,
-            description: ts.Diagnostics.List_of_root_folders_whose_combined_content_represents_the_structure_of_the_project_at_runtime,
-            transpileOptionValue: undefined
+            category: ts.Diagnostics.Modules,
+            description: ts.Diagnostics.Allow_multiple_folders_to_be_treated_as_one_when_resolving_modules,
+            transpileOptionValue: undefined,
+            defaultValueDescription: ts.Diagnostics.Computed_from_the_list_of_input_files
         },
         {
             name: "typeRoots",
@@ -37539,8 +38478,8 @@
                 isFilePath: true
             },
             affectsModuleResolution: true,
-            category: ts.Diagnostics.Module_Resolution_Options,
-            description: ts.Diagnostics.List_of_folders_to_include_type_definitions_from
+            category: ts.Diagnostics.Modules,
+            description: ts.Diagnostics.Specify_multiple_folders_that_act_like_Slashnode_modules_Slash_types
         },
         {
             name: "types",
@@ -37549,18 +38488,19 @@
                 name: "types",
                 type: "string"
             },
-            affectsModuleResolution: true,
+            affectsProgramStructure: true,
             showInSimplifiedHelpView: true,
-            category: ts.Diagnostics.Module_Resolution_Options,
-            description: ts.Diagnostics.Type_declaration_files_to_be_included_in_compilation,
+            category: ts.Diagnostics.Modules,
+            description: ts.Diagnostics.Specify_type_package_names_to_be_included_without_being_referenced_in_a_source_file,
             transpileOptionValue: undefined
         },
         {
             name: "allowSyntheticDefaultImports",
             type: "boolean",
             affectsSemanticDiagnostics: true,
-            category: ts.Diagnostics.Module_Resolution_Options,
-            description: ts.Diagnostics.Allow_default_imports_from_modules_with_no_default_export_This_does_not_affect_code_emit_just_typechecking
+            category: ts.Diagnostics.Interop_Constraints,
+            description: ts.Diagnostics.Allow_import_x_from_y_when_a_module_doesn_t_have_a_default_export,
+            defaultValueDescription: ts.Diagnostics.module_system_or_esModuleInterop
         },
         {
             name: "esModuleInterop",
@@ -37568,21 +38508,24 @@
             affectsSemanticDiagnostics: true,
             affectsEmit: true,
             showInSimplifiedHelpView: true,
-            category: ts.Diagnostics.Module_Resolution_Options,
-            description: ts.Diagnostics.Enables_emit_interoperability_between_CommonJS_and_ES_Modules_via_creation_of_namespace_objects_for_all_imports_Implies_allowSyntheticDefaultImports
+            category: ts.Diagnostics.Interop_Constraints,
+            description: ts.Diagnostics.Emit_additional_JavaScript_to_ease_support_for_importing_CommonJS_modules_This_enables_allowSyntheticDefaultImports_for_type_compatibility,
+            defaultValueDescription: "false"
         },
         {
             name: "preserveSymlinks",
             type: "boolean",
-            category: ts.Diagnostics.Module_Resolution_Options,
-            description: ts.Diagnostics.Do_not_resolve_the_real_path_of_symlinks,
+            category: ts.Diagnostics.Interop_Constraints,
+            description: ts.Diagnostics.Disable_resolving_symlinks_to_their_realpath_This_correlates_to_the_same_flag_in_node,
+            defaultValueDescription: "n/a"
         },
         {
             name: "allowUmdGlobalAccess",
             type: "boolean",
             affectsSemanticDiagnostics: true,
-            category: ts.Diagnostics.Module_Resolution_Options,
+            category: ts.Diagnostics.Modules,
             description: ts.Diagnostics.Allow_accessing_UMD_globals_from_modules,
+            defaultValueDescription: "false"
         },
         // Source Maps
         {
@@ -37590,59 +38533,62 @@
             type: "string",
             affectsEmit: true,
             paramType: ts.Diagnostics.LOCATION,
-            category: ts.Diagnostics.Source_Map_Options,
-            description: ts.Diagnostics.Specify_the_location_where_debugger_should_locate_TypeScript_files_instead_of_source_locations,
+            category: ts.Diagnostics.Emit,
+            description: ts.Diagnostics.Specify_the_root_path_for_debuggers_to_find_the_reference_source_code,
         },
         {
             name: "mapRoot",
             type: "string",
             affectsEmit: true,
             paramType: ts.Diagnostics.LOCATION,
-            category: ts.Diagnostics.Source_Map_Options,
+            category: ts.Diagnostics.Emit,
             description: ts.Diagnostics.Specify_the_location_where_debugger_should_locate_map_files_instead_of_generated_locations,
         },
         {
             name: "inlineSourceMap",
             type: "boolean",
             affectsEmit: true,
-            category: ts.Diagnostics.Source_Map_Options,
-            description: ts.Diagnostics.Emit_a_single_file_with_source_maps_instead_of_having_a_separate_file
+            category: ts.Diagnostics.Emit,
+            description: ts.Diagnostics.Include_sourcemap_files_inside_the_emitted_JavaScript,
+            defaultValueDescription: "false"
         },
         {
             name: "inlineSources",
             type: "boolean",
             affectsEmit: true,
-            category: ts.Diagnostics.Source_Map_Options,
-            description: ts.Diagnostics.Emit_the_source_alongside_the_sourcemaps_within_a_single_file_requires_inlineSourceMap_or_sourceMap_to_be_set
+            category: ts.Diagnostics.Emit,
+            description: ts.Diagnostics.Include_source_code_in_the_sourcemaps_inside_the_emitted_JavaScript,
+            defaultValueDescription: "false"
         },
         // Experimental
         {
             name: "experimentalDecorators",
             type: "boolean",
             affectsSemanticDiagnostics: true,
-            category: ts.Diagnostics.Experimental_Options,
-            description: ts.Diagnostics.Enables_experimental_support_for_ES7_decorators
+            category: ts.Diagnostics.Language_and_Environment,
+            description: ts.Diagnostics.Enable_experimental_support_for_TC39_stage_2_draft_decorators
         },
         {
             name: "emitDecoratorMetadata",
             type: "boolean",
             affectsSemanticDiagnostics: true,
             affectsEmit: true,
-            category: ts.Diagnostics.Experimental_Options,
-            description: ts.Diagnostics.Enables_experimental_support_for_emitting_type_metadata_for_decorators
+            category: ts.Diagnostics.Language_and_Environment,
+            description: ts.Diagnostics.Emit_design_type_metadata_for_decorated_declarations_in_source_files
         },
         // Advanced
         {
             name: "jsxFactory",
             type: "string",
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Specify_the_JSX_factory_function_to_use_when_targeting_react_JSX_emit_e_g_React_createElement_or_h
+            category: ts.Diagnostics.Language_and_Environment,
+            description: ts.Diagnostics.Specify_the_JSX_factory_function_used_when_targeting_React_JSX_emit_e_g_React_createElement_or_h,
+            defaultValueDescription: "`React.createElement`"
         },
         {
             name: "jsxFragmentFactory",
             type: "string",
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Specify_the_JSX_fragment_factory_function_to_use_when_targeting_react_JSX_emit_with_jsxFactory_compiler_option_is_specified_e_g_Fragment
+            category: ts.Diagnostics.Language_and_Environment,
+            description: ts.Diagnostics.Specify_the_JSX_Fragment_reference_used_for_fragments_when_targeting_React_JSX_emit_e_g_React_Fragment_or_Fragment
         },
         {
             name: "jsxImportSource",
@@ -37650,15 +38596,17 @@
             affectsSemanticDiagnostics: true,
             affectsEmit: true,
             affectsModuleResolution: true,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Specify_the_module_specifier_to_be_used_to_import_the_jsx_and_jsxs_factory_functions_from_eg_react
+            category: ts.Diagnostics.Language_and_Environment,
+            description: ts.Diagnostics.Specify_module_specifier_used_to_import_the_JSX_factory_functions_when_using_jsx_Colon_react_jsx_Asterisk,
+            defaultValueDescription: "react"
         },
         {
             name: "resolveJsonModule",
             type: "boolean",
             affectsModuleResolution: true,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Include_modules_imported_with_json_extension
+            category: ts.Diagnostics.Modules,
+            description: ts.Diagnostics.Enable_importing_json_files,
+            defaultValueDescription: "false"
         },
         {
             name: "out",
@@ -37666,36 +38614,41 @@
             affectsEmit: true,
             isFilePath: false,
             // for correct behaviour, please use outFile
-            category: ts.Diagnostics.Advanced_Options,
+            category: ts.Diagnostics.Backwards_Compatibility,
             paramType: ts.Diagnostics.FILE,
-            description: ts.Diagnostics.Deprecated_Use_outFile_instead_Concatenate_and_emit_output_to_single_file,
-            transpileOptionValue: undefined
+            transpileOptionValue: undefined,
+            defaultValueDescription: "n/a",
+            description: ts.Diagnostics.Deprecated_setting_Use_outFile_instead,
         },
         {
             name: "reactNamespace",
             type: "string",
             affectsEmit: true,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Deprecated_Use_jsxFactory_instead_Specify_the_object_invoked_for_createElement_when_targeting_react_JSX_emit
+            category: ts.Diagnostics.Language_and_Environment,
+            description: ts.Diagnostics.Specify_the_object_invoked_for_createElement_This_only_applies_when_targeting_react_JSX_emit,
+            defaultValueDescription: "`React`",
         },
         {
             name: "skipDefaultLibCheck",
             type: "boolean",
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Deprecated_Use_skipLibCheck_instead_Skip_type_checking_of_default_library_declaration_files
+            category: ts.Diagnostics.Completeness,
+            description: ts.Diagnostics.Skip_type_checking_d_ts_files_that_are_included_with_TypeScript,
+            defaultValueDescription: "false",
         },
         {
             name: "charset",
             type: "string",
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.The_character_set_of_the_input_files
+            category: ts.Diagnostics.Backwards_Compatibility,
+            description: ts.Diagnostics.No_longer_supported_In_early_versions_manually_set_the_text_encoding_for_reading_files,
+            defaultValueDescription: "utf8"
         },
         {
             name: "emitBOM",
             type: "boolean",
             affectsEmit: true,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Emit_a_UTF_8_Byte_Order_Mark_BOM_in_the_beginning_of_output_files
+            category: ts.Diagnostics.Emit,
+            description: ts.Diagnostics.Emit_a_UTF_8_Byte_Order_Mark_BOM_in_the_beginning_of_output_files,
+            defaultValueDescription: "false"
         },
         {
             name: "newLine",
@@ -37705,99 +38658,108 @@
             })),
             affectsEmit: true,
             paramType: ts.Diagnostics.NEWLINE,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Specify_the_end_of_line_sequence_to_be_used_when_emitting_files_Colon_CRLF_dos_or_LF_unix,
+            category: ts.Diagnostics.Emit,
+            description: ts.Diagnostics.Set_the_newline_character_for_emitting_files,
+            defaultValueDescription: ts.Diagnostics.Platform_specific
         },
         {
             name: "noErrorTruncation",
             type: "boolean",
             affectsSemanticDiagnostics: true,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Do_not_truncate_error_messages
+            category: ts.Diagnostics.Output_Formatting,
+            description: ts.Diagnostics.Disable_truncating_types_in_error_messages,
+            defaultValueDescription: "false"
         },
         {
             name: "noLib",
             type: "boolean",
-            affectsModuleResolution: true,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Do_not_include_the_default_library_file_lib_d_ts,
+            category: ts.Diagnostics.Language_and_Environment,
+            affectsProgramStructure: true,
+            description: ts.Diagnostics.Disable_including_any_library_files_including_the_default_lib_d_ts,
             // We are not returning a sourceFile for lib file when asked by the program,
             // so pass --noLib to avoid reporting a file not found error.
-            transpileOptionValue: true
+            transpileOptionValue: true,
+            defaultValueDescription: "false"
         },
         {
             name: "noResolve",
             type: "boolean",
             affectsModuleResolution: true,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Do_not_add_triple_slash_references_or_imported_modules_to_the_list_of_compiled_files,
+            category: ts.Diagnostics.Modules,
+            description: ts.Diagnostics.Disallow_import_s_require_s_or_reference_s_from_expanding_the_number_of_files_TypeScript_should_add_to_a_project,
             // We are not doing a full typecheck, we are not resolving the whole context,
             // so pass --noResolve to avoid reporting missing file errors.
-            transpileOptionValue: true
+            transpileOptionValue: true,
+            defaultValueDescription: "false"
         },
         {
             name: "stripInternal",
             type: "boolean",
             affectsEmit: true,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Do_not_emit_declarations_for_code_that_has_an_internal_annotation,
+            category: ts.Diagnostics.Emit,
+            description: ts.Diagnostics.Disable_emitting_declarations_that_have_internal_in_their_JSDoc_comments,
         },
         {
             name: "disableSizeLimit",
             type: "boolean",
-            affectsSourceFile: true,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Disable_size_limitations_on_JavaScript_projects
+            affectsProgramStructure: true,
+            category: ts.Diagnostics.Editor_Support,
+            description: ts.Diagnostics.Remove_the_20mb_cap_on_total_source_code_size_for_JavaScript_files_in_the_TypeScript_language_server,
+            defaultValueDescription: "false"
         },
         {
             name: "disableSourceOfProjectReferenceRedirect",
             type: "boolean",
             isTSConfigOnly: true,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Disable_use_of_source_files_instead_of_declaration_files_from_referenced_projects
+            category: ts.Diagnostics.Projects,
+            description: ts.Diagnostics.Disable_preferring_source_files_instead_of_declaration_files_when_referencing_composite_projects
         },
         {
             name: "disableSolutionSearching",
             type: "boolean",
             isTSConfigOnly: true,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Disable_solution_searching_for_this_project
+            category: ts.Diagnostics.Projects,
+            description: ts.Diagnostics.Opt_a_project_out_of_multi_project_reference_checking_when_editing
         },
         {
             name: "disableReferencedProjectLoad",
             type: "boolean",
             isTSConfigOnly: true,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Disable_loading_referenced_projects
+            category: ts.Diagnostics.Projects,
+            description: ts.Diagnostics.Reduce_the_number_of_projects_loaded_automatically_by_TypeScript
         },
         {
             name: "noImplicitUseStrict",
             type: "boolean",
             affectsSemanticDiagnostics: true,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Do_not_emit_use_strict_directives_in_module_output
+            category: ts.Diagnostics.Backwards_Compatibility,
+            description: ts.Diagnostics.Disable_adding_use_strict_directives_in_emitted_JavaScript_files,
+            defaultValueDescription: "false"
         },
         {
             name: "noEmitHelpers",
             type: "boolean",
             affectsEmit: true,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Do_not_generate_custom_helper_functions_like_extends_in_compiled_output
+            category: ts.Diagnostics.Emit,
+            description: ts.Diagnostics.Disable_generating_custom_helper_functions_like_extends_in_compiled_output,
+            defaultValueDescription: "false"
         },
         {
             name: "noEmitOnError",
             type: "boolean",
             affectsEmit: true,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Do_not_emit_outputs_if_any_errors_were_reported,
-            transpileOptionValue: undefined
+            category: ts.Diagnostics.Emit,
+            transpileOptionValue: undefined,
+            description: ts.Diagnostics.Disable_emitting_files_if_any_type_checking_errors_are_reported,
+            defaultValueDescription: "false"
         },
         {
             name: "preserveConstEnums",
             type: "boolean",
             affectsEmit: true,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Do_not_erase_const_enum_declarations_in_generated_code
+            category: ts.Diagnostics.Emit,
+            description: ts.Diagnostics.Disable_erasing_const_enum_declarations_in_generated_code,
+            defaultValueDescription: "n/a"
         },
         {
             name: "declarationDir",
@@ -37805,80 +38767,91 @@
             affectsEmit: true,
             isFilePath: true,
             paramType: ts.Diagnostics.DIRECTORY,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Output_directory_for_generated_declaration_files,
-            transpileOptionValue: undefined
+            category: ts.Diagnostics.Emit,
+            transpileOptionValue: undefined,
+            description: ts.Diagnostics.Specify_the_output_directory_for_generated_declaration_files,
+            defaultValueDescription: "n/a"
         },
         {
             name: "skipLibCheck",
             type: "boolean",
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Skip_type_checking_of_declaration_files,
+            category: ts.Diagnostics.Completeness,
+            description: ts.Diagnostics.Skip_type_checking_all_d_ts_files,
+            defaultValueDescription: "false"
         },
         {
             name: "allowUnusedLabels",
             type: "boolean",
             affectsBindDiagnostics: true,
             affectsSemanticDiagnostics: true,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Do_not_report_errors_on_unused_labels
+            category: ts.Diagnostics.Type_Checking,
+            description: ts.Diagnostics.Disable_error_reporting_for_unused_labels,
+            defaultValueDescription: "undefined"
         },
         {
             name: "allowUnreachableCode",
             type: "boolean",
             affectsBindDiagnostics: true,
             affectsSemanticDiagnostics: true,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Do_not_report_errors_on_unreachable_code
+            category: ts.Diagnostics.Type_Checking,
+            description: ts.Diagnostics.Disable_error_reporting_for_unreachable_code,
+            defaultValueDescription: "undefined"
         },
         {
             name: "suppressExcessPropertyErrors",
             type: "boolean",
             affectsSemanticDiagnostics: true,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Suppress_excess_property_checks_for_object_literals,
+            category: ts.Diagnostics.Backwards_Compatibility,
+            description: ts.Diagnostics.Disable_reporting_of_excess_property_errors_during_the_creation_of_object_literals,
+            defaultValueDescription: "false"
         },
         {
             name: "suppressImplicitAnyIndexErrors",
             type: "boolean",
             affectsSemanticDiagnostics: true,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Suppress_noImplicitAny_errors_for_indexing_objects_lacking_index_signatures,
+            category: ts.Diagnostics.Backwards_Compatibility,
+            description: ts.Diagnostics.Suppress_noImplicitAny_errors_when_indexing_objects_that_lack_index_signatures,
+            defaultValueDescription: "false"
         },
         {
             name: "forceConsistentCasingInFileNames",
             type: "boolean",
             affectsModuleResolution: true,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Disallow_inconsistently_cased_references_to_the_same_file
+            category: ts.Diagnostics.Interop_Constraints,
+            description: ts.Diagnostics.Ensure_that_casing_is_correct_in_imports,
+            defaultValueDescription: "false"
         },
         {
             name: "maxNodeModuleJsDepth",
             type: "number",
             affectsModuleResolution: true,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.The_maximum_dependency_depth_to_search_under_node_modules_and_load_JavaScript_files
+            category: ts.Diagnostics.JavaScript_Support,
+            description: ts.Diagnostics.Specify_the_maximum_folder_depth_used_for_checking_JavaScript_files_from_node_modules_Only_applicable_with_allowJs,
+            defaultValueDescription: "0"
         },
         {
             name: "noStrictGenericChecks",
             type: "boolean",
             affectsSemanticDiagnostics: true,
-            category: ts.Diagnostics.Advanced_Options,
+            category: ts.Diagnostics.Backwards_Compatibility,
             description: ts.Diagnostics.Disable_strict_checking_of_generic_signatures_in_function_types,
+            defaultValueDescription: "false"
         },
         {
             name: "useDefineForClassFields",
             type: "boolean",
             affectsSemanticDiagnostics: true,
             affectsEmit: true,
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Emit_class_fields_with_Define_instead_of_Set,
+            category: ts.Diagnostics.Language_and_Environment,
+            description: ts.Diagnostics.Emit_ECMAScript_standard_compliant_class_fields,
+            defaultValueDescription: "false"
         },
         {
             name: "keyofStringsOnly",
             type: "boolean",
-            category: ts.Diagnostics.Advanced_Options,
-            description: ts.Diagnostics.Resolve_keyof_to_string_valued_property_names_only_no_numbers_or_symbols,
+            category: ts.Diagnostics.Backwards_Compatibility,
+            description: ts.Diagnostics.Make_keyof_only_return_strings_instead_of_string_numbers_or_symbols_Legacy_option,
+            defaultValueDescription: "false"
         },
         {
             // A list of plugins to load in the language service
@@ -37889,11 +38862,12 @@
                 name: "plugin",
                 type: "object"
             },
-            description: ts.Diagnostics.List_of_language_service_plugins
+            description: ts.Diagnostics.List_of_language_service_plugins,
+            category: ts.Diagnostics.Editor_Support,
         },
     ];
     /* @internal */
-    ts.optionDeclarations = __spreadArray(__spreadArray([], ts.commonOptionsWithBuild), commandOptionsWithoutBuild);
+    ts.optionDeclarations = __spreadArray(__spreadArray([], ts.commonOptionsWithBuild, true), commandOptionsWithoutBuild, true);
     /* @internal */
     ts.semanticDiagnosticsOptionDeclarations = ts.optionDeclarations.filter(function (option) { return !!option.affectsSemanticDiagnostics; });
     /* @internal */
@@ -37905,10 +38879,14 @@
         return !!option.affectsSourceFile || !!option.affectsModuleResolution || !!option.affectsBindDiagnostics;
     });
     /* @internal */
+    ts.optionsAffectingProgramStructure = ts.optionDeclarations.filter(function (option) { return !!option.affectsProgramStructure; });
+    /* @internal */
     ts.transpileOptionValueCompilerOptions = ts.optionDeclarations.filter(function (option) {
         return ts.hasProperty(option, "transpileOptionValue");
     });
-    var commandOptionsOnlyBuild = [
+    // Build related options
+    /* @internal */
+    ts.optionsForBuild = [
         {
             name: "verbose",
             shortName: "v",
@@ -37938,7 +38916,7 @@
         }
     ];
     /* @internal */
-    ts.buildOpts = __spreadArray(__spreadArray([], ts.commonOptionsWithBuild), commandOptionsOnlyBuild);
+    ts.buildOpts = __spreadArray(__spreadArray([], ts.commonOptionsWithBuild, true), ts.optionsForBuild, true);
     /* @internal */
     ts.typeAcquisitionDeclarations = [
         {
@@ -38029,13 +39007,13 @@
     }
     /* @internal */
     function parseCustomTypeOption(opt, value, errors) {
-        return convertJsonOptionOfCustomType(opt, trimString(value || ""), errors);
+        return convertJsonOptionOfCustomType(opt, ts.trimString(value || ""), errors);
     }
     ts.parseCustomTypeOption = parseCustomTypeOption;
     /* @internal */
     function parseListTypeOption(opt, value, errors) {
         if (value === void 0) { value = ""; }
-        value = trimString(value);
+        value = ts.trimString(value);
         if (ts.startsWith(value, "-")) {
             return undefined;
         }
@@ -38419,7 +39397,8 @@
                     },
                     {
                         name: "extends",
-                        type: "string"
+                        type: "string",
+                        category: ts.Diagnostics.File_Management,
                     },
                     {
                         name: "references",
@@ -38427,7 +39406,8 @@
                         element: {
                             name: "references",
                             type: "object"
-                        }
+                        },
+                        category: ts.Diagnostics.Projects,
                     },
                     {
                         name: "files",
@@ -38435,7 +39415,8 @@
                         element: {
                             name: "files",
                             type: "string"
-                        }
+                        },
+                        category: ts.Diagnostics.File_Management,
                     },
                     {
                         name: "include",
@@ -38443,7 +39424,9 @@
                         element: {
                             name: "include",
                             type: "string"
-                        }
+                        },
+                        category: ts.Diagnostics.File_Management,
+                        defaultValueDescription: ts.Diagnostics.if_files_is_specified_otherwise_Asterisk_Asterisk_Slash_Asterisk
                     },
                     {
                         name: "exclude",
@@ -38451,7 +39434,9 @@
                         element: {
                             name: "exclude",
                             type: "string"
-                        }
+                        },
+                        category: ts.Diagnostics.File_Management,
+                        defaultValueDescription: ts.Diagnostics.node_modules_bower_components_jspm_packages_plus_the_value_of_outDir_if_one_is_specified
                     },
                     ts.compileOnSaveCommandLineOption
                 ])
@@ -38463,7 +39448,7 @@
         var _a;
         var rootExpression = (_a = sourceFile.statements[0]) === null || _a === void 0 ? void 0 : _a.expression;
         var knownRootOptions = reportOptionsErrors ? getTsconfigRootOptionsMap() : undefined;
-        if (rootExpression && rootExpression.kind !== 201 /* ObjectLiteralExpression */) {
+        if (rootExpression && rootExpression.kind !== 203 /* ObjectLiteralExpression */) {
             errors.push(ts.createDiagnosticForNodeInSourceFile(sourceFile, rootExpression, ts.Diagnostics.The_root_value_of_a_0_file_must_be_an_object, ts.getBaseFileName(sourceFile.fileName) === "jsconfig.json" ? "jsconfig.json" : "tsconfig.json"));
             // Last-ditch error recovery. Somewhat useful because the JSON parser will recover from some parse errors by
             // synthesizing a top-level array literal expression. There's a reasonable chance the first element of that
@@ -38503,7 +39488,7 @@
         function convertObjectLiteralExpressionToJson(node, knownOptions, extraKeyDiagnostics, parentOption) {
             var result = returnValue ? {} : undefined;
             var _loop_4 = function (element) {
-                if (element.kind !== 289 /* PropertyAssignment */) {
+                if (element.kind !== 291 /* PropertyAssignment */) {
                     errors.push(ts.createDiagnosticForNodeInSourceFile(sourceFile, element, ts.Diagnostics.Property_assignment_expected));
                     return "continue";
                 }
@@ -38570,13 +39555,13 @@
         function convertPropertyValueToJson(valueExpression, option) {
             var invalidReported;
             switch (valueExpression.kind) {
-                case 109 /* TrueKeyword */:
+                case 110 /* TrueKeyword */:
                     reportInvalidOptionValue(option && option.type !== "boolean");
                     return validateValue(/*value*/ true);
-                case 94 /* FalseKeyword */:
+                case 95 /* FalseKeyword */:
                     reportInvalidOptionValue(option && option.type !== "boolean");
                     return validateValue(/*value*/ false);
-                case 103 /* NullKeyword */:
+                case 104 /* NullKeyword */:
                     reportInvalidOptionValue(option && option.name === "extends"); // "extends" is the only option we don't allow null/undefined for
                     return validateValue(/*value*/ null); // eslint-disable-line no-null/no-null
                 case 10 /* StringLiteral */:
@@ -38597,13 +39582,13 @@
                 case 8 /* NumericLiteral */:
                     reportInvalidOptionValue(option && option.type !== "number");
                     return validateValue(Number(valueExpression.text));
-                case 215 /* PrefixUnaryExpression */:
+                case 217 /* PrefixUnaryExpression */:
                     if (valueExpression.operator !== 40 /* MinusToken */ || valueExpression.operand.kind !== 8 /* NumericLiteral */) {
                         break; // not valid JSON syntax
                     }
                     reportInvalidOptionValue(option && option.type !== "number");
                     return validateValue(-Number(valueExpression.operand.text));
-                case 201 /* ObjectLiteralExpression */:
+                case 203 /* ObjectLiteralExpression */:
                     reportInvalidOptionValue(option && option.type !== "object");
                     var objectLiteralExpression = valueExpression;
                     // Currently having element option declaration in the tsconfig with type "object"
@@ -38620,7 +39605,7 @@
                         return validateValue(convertObjectLiteralExpressionToJson(objectLiteralExpression, /* knownOptions*/ undefined, 
                         /*extraKeyDiagnosticMessage */ undefined, /*parentOption*/ undefined));
                     }
-                case 200 /* ArrayLiteralExpression */:
+                case 202 /* ArrayLiteralExpression */:
                     reportInvalidOptionValue(option && option.type !== "list");
                     return validateValue(convertArrayLiteralExpressionToJson(valueExpression.elements, option && option.element));
             }
@@ -38637,7 +39622,7 @@
                 if (!invalidReported) {
                     var diagnostic = (_a = option === null || option === void 0 ? void 0 : option.extraValidation) === null || _a === void 0 ? void 0 : _a.call(option, value);
                     if (diagnostic) {
-                        errors.push(ts.createDiagnosticForNodeInSourceFile.apply(void 0, __spreadArray([sourceFile, valueExpression], diagnostic)));
+                        errors.push(ts.createDiagnosticForNodeInSourceFile.apply(void 0, __spreadArray([sourceFile, valueExpression], diagnostic, false)));
                         return undefined;
                     }
                 }
@@ -38758,7 +39743,7 @@
             if (ts.hasProperty(options, name)) {
                 // tsconfig only options cannot be specified via command line,
                 // so we can assume that only types that can appear here string | number | boolean
-                if (optionsNameMap.has(name) && optionsNameMap.get(name).category === ts.Diagnostics.Command_line_Options) {
+                if (optionsNameMap.has(name) && (optionsNameMap.get(name).category === ts.Diagnostics.Command_line_Options || optionsNameMap.get(name).category === ts.Diagnostics.Output_Formatting)) {
                     return "continue";
                 }
                 var value = options[name];
@@ -38824,13 +39809,11 @@
         function makePadding(paddingLength) {
             return Array(paddingLength + 1).join(" ");
         }
-        function isAllowedOption(_a) {
-            var category = _a.category, name = _a.name;
-            // Skip options which do not have a category or have category `Command_line_Options`
-            // Exclude all possible `Advanced_Options` in tsconfig.json which were NOT defined in command line
-            return category !== undefined
-                && category !== ts.Diagnostics.Command_line_Options
-                && (category !== ts.Diagnostics.Advanced_Options || compilerOptionsMap.has(name));
+        function isAllowedOptionForOutput(_a) {
+            var category = _a.category, name = _a.name, isCommandLineOnly = _a.isCommandLineOnly;
+            // Skip options which do not have a category or have categories which are more niche
+            var categoriesToSkip = [ts.Diagnostics.Command_line_Options, ts.Diagnostics.Editor_Support, ts.Diagnostics.Compiler_Diagnostics, ts.Diagnostics.Backwards_Compatibility, ts.Diagnostics.Watch_and_Build_Modes, ts.Diagnostics.Output_Formatting];
+            return !isCommandLineOnly && category !== undefined && (!categoriesToSkip.includes(category) || compilerOptionsMap.has(name));
         }
         function writeConfigurations() {
             // Filter applicable options to place in the file
@@ -38838,7 +39821,7 @@
             for (var _i = 0, optionDeclarations_1 = ts.optionDeclarations; _i < optionDeclarations_1.length; _i++) {
                 var option = optionDeclarations_1[_i];
                 var category = option.category;
-                if (isAllowedOption(option)) {
+                if (isAllowedOptionForOutput(option)) {
                     categorizedOptions.add(ts.getLocaleSpecificMessage(category), option);
                 }
             }
@@ -39055,6 +40038,7 @@
                 validatedFilesSpec: ts.filter(filesSpecs, ts.isString),
                 validatedIncludeSpecs: validatedIncludeSpecs,
                 validatedExcludeSpecs: validatedExcludeSpecs,
+                pathPatterns: undefined, // Initialized on first use
             };
         }
         function getFileNames(basePath) {
@@ -39152,7 +40136,7 @@
         basePath = ts.normalizeSlashes(basePath);
         var resolvedPath = ts.getNormalizedAbsolutePath(configFileName || "", basePath);
         if (resolutionStack.indexOf(resolvedPath) >= 0) {
-            errors.push(ts.createCompilerDiagnostic(ts.Diagnostics.Circularity_detected_while_resolving_configuration_Colon_0, __spreadArray(__spreadArray([], resolutionStack), [resolvedPath]).join(" -> ")));
+            errors.push(ts.createCompilerDiagnostic(ts.Diagnostics.Circularity_detected_while_resolving_configuration_Colon_0, __spreadArray(__spreadArray([], resolutionStack, true), [resolvedPath], false).join(" -> ")));
             return { raw: json || convertToObject(sourceFile, errors) };
         }
         var ownConfig = json ?
@@ -39452,9 +40436,6 @@
     function convertJsonOptionOfListType(option, values, basePath, errors) {
         return ts.filter(ts.map(values, function (v) { return convertJsonOption(option.element, v, basePath, errors); }), function (v) { return !!v; });
     }
-    function trimString(s) {
-        return typeof s.trim === "function" ? s.trim() : s.replace(/^[\s]+|[\s]+$/g, "");
-    }
     /**
      * Tests for a path that ends in a recursive directory wildcard.
      * Matches **, \**, **\, and \**\, but not a**b.
@@ -39468,34 +40449,6 @@
      */
     var invalidTrailingRecursionPattern = /(^|\/)\*\*\/?$/;
     /**
-     * Tests for a path where .. appears after a recursive directory wildcard.
-     * Matches **\..\*, **\a\..\*, and **\.., but not ..\**\*
-     *
-     * NOTE: used \ in place of / above to avoid issues with multiline comments.
-     *
-     * Breakdown:
-     *  (^|\/)      # matches either the beginning of the string or a directory separator.
-     *  \*\*\/      # matches a recursive directory wildcard "**" followed by a directory separator.
-     *  (.*\/)?     # optionally matches any number of characters followed by a directory separator.
-     *  \.\.        # matches a parent directory path component ".."
-     *  ($|\/)      # matches either the end of the string or a directory separator.
-     */
-    var invalidDotDotAfterRecursiveWildcardPattern = /(^|\/)\*\*\/(.*\/)?\.\.($|\/)/;
-    /**
-     * Tests for a path containing a wildcard character in a directory component of the path.
-     * Matches \*\, \?\, and \a*b\, but not \a\ or \a\*.
-     *
-     * NOTE: used \ in place of / above to avoid issues with multiline comments.
-     *
-     * Breakdown:
-     *  \/          # matches a directory separator.
-     *  [^/]*?      # matches any number of characters excluding directory separators (non-greedy).
-     *  [*?]        # matches either a wildcard character (* or ?)
-     *  [^/]*       # matches any number of characters excluding directory separators (greedy).
-     *  \/          # matches a directory separator.
-     */
-    var watchRecursivePattern = /\/[^/]*?[*?][^/]*\//;
-    /**
      * Matches the portion of a wildcard path that does not contain wildcards.
      * Matches \a of \a\*, or \a\b\c of \a\b\c\?\d.
      *
@@ -39535,7 +40488,7 @@
         // via wildcard of *.json kind
         var wildCardJsonFileMap = new ts.Map();
         var validatedFilesSpec = configFileSpecs.validatedFilesSpec, validatedIncludeSpecs = configFileSpecs.validatedIncludeSpecs, validatedExcludeSpecs = configFileSpecs.validatedExcludeSpecs;
-        // Rather than requery this for each file and filespec, we query the supported extensions
+        // Rather than re-query this for each file and filespec, we query the supported extensions
         // once and store it on the expansion context.
         var supportedExtensions = ts.getSupportedExtensions(options, extraFileExtensions);
         var supportedExtensionsWithJsonIfResolveJsonModule = ts.getSuppoertedExtensionsWithJsonIfResolveJsonModule(options, supportedExtensions);
@@ -39613,9 +40566,22 @@
         return matchesExcludeWorker(pathToCheck, validatedExcludeSpecs, useCaseSensitiveFileNames, currentDirectory, basePath);
     }
     ts.isExcludedFile = isExcludedFile;
+    function invalidDotDotAfterRecursiveWildcard(s) {
+        // We used to use the regex /(^|\/)\*\*\/(.*\/)?\.\.($|\/)/ to check for this case, but
+        // in v8, that has polynomial performance because the recursive wildcard match - **/ -
+        // can be matched in many arbitrary positions when multiple are present, resulting
+        // in bad backtracking (and we don't care which is matched - just that some /.. segment
+        // comes after some **/ segment).
+        var wildcardIndex = ts.startsWith(s, "**/") ? 0 : s.indexOf("/**/");
+        if (wildcardIndex === -1) {
+            return false;
+        }
+        var lastDotIndex = ts.endsWith(s, "/..") ? s.length : s.lastIndexOf("/../");
+        return lastDotIndex > wildcardIndex;
+    }
     /* @internal */
     function matchesExclude(pathToCheck, excludeSpecs, useCaseSensitiveFileNames, currentDirectory) {
-        return matchesExcludeWorker(pathToCheck, ts.filter(excludeSpecs, function (spec) { return !invalidDotDotAfterRecursiveWildcardPattern.test(spec); }), useCaseSensitiveFileNames, currentDirectory);
+        return matchesExcludeWorker(pathToCheck, ts.filter(excludeSpecs, function (spec) { return !invalidDotDotAfterRecursiveWildcard(spec); }), useCaseSensitiveFileNames, currentDirectory);
     }
     ts.matchesExclude = matchesExclude;
     function matchesExcludeWorker(pathToCheck, excludeSpecs, useCaseSensitiveFileNames, currentDirectory, basePath) {
@@ -39648,7 +40614,7 @@
         if (disallowTrailingRecursion && invalidTrailingRecursionPattern.test(spec)) {
             return [ts.Diagnostics.File_specification_cannot_end_in_a_recursive_directory_wildcard_Asterisk_Asterisk_Colon_0, spec];
         }
-        else if (invalidDotDotAfterRecursiveWildcardPattern.test(spec)) {
+        else if (invalidDotDotAfterRecursiveWildcard(spec)) {
             return [ts.Diagnostics.File_specification_cannot_contain_a_parent_directory_that_appears_after_a_recursive_directory_wildcard_Asterisk_Asterisk_Colon_0, spec];
         }
     }
@@ -39709,9 +40675,18 @@
     function getWildcardDirectoryFromSpec(spec, useCaseSensitiveFileNames) {
         var match = wildcardDirectoryPattern.exec(spec);
         if (match) {
+            // We check this with a few `indexOf` calls because 3 `indexOf`/`lastIndexOf` calls is
+            // less algorithmically complex (roughly O(3n) worst-case) than the regex we used to use,
+            // \/[^/]*?[*?][^/]*\/ which was polynominal in v8, since arbitrary sequences of wildcard
+            // characters could match any of the central patterns, resulting in bad backtracking.
+            var questionWildcardIndex = spec.indexOf("?");
+            var starWildcardIndex = spec.indexOf("*");
+            var lastDirectorySeperatorIndex = spec.lastIndexOf(ts.directorySeparator);
             return {
                 key: useCaseSensitiveFileNames ? match[0] : ts.toFileNameLowerCase(match[0]),
-                flags: watchRecursivePattern.test(spec) ? 1 /* Recursive */ : 0 /* None */
+                flags: (questionWildcardIndex !== -1 && questionWildcardIndex < lastDirectorySeperatorIndex)
+                    || (starWildcardIndex !== -1 && starWildcardIndex < lastDirectorySeperatorIndex)
+                    ? 1 /* Recursive */ : 0 /* None */
             };
         }
         if (ts.isImplicitGlob(spec)) {
@@ -40216,7 +41191,7 @@
     ts.createCacheWithRedirects = createCacheWithRedirects;
     function createPackageJsonInfoCache(currentDirectory, getCanonicalFileName) {
         var cache;
-        return { getPackageJsonInfo: getPackageJsonInfo, setPackageJsonInfo: setPackageJsonInfo, clear: clear };
+        return { getPackageJsonInfo: getPackageJsonInfo, setPackageJsonInfo: setPackageJsonInfo, clear: clear, entries: entries };
         function getPackageJsonInfo(packageJsonPath) {
             return cache === null || cache === void 0 ? void 0 : cache.get(ts.toPath(packageJsonPath, currentDirectory, getCanonicalFileName));
         }
@@ -40226,6 +41201,10 @@
         function clear() {
             cache = undefined;
         }
+        function entries() {
+            var iter = cache === null || cache === void 0 ? void 0 : cache.entries();
+            return iter ? ts.arrayFrom(iter) : [];
+        }
     }
     function getOrCreateCache(cacheWithRedirects, redirectedReference, key, create) {
         var cache = cacheWithRedirects.getOrCreateMapOfCacheRedirects(redirectedReference);
@@ -40519,7 +41498,8 @@
         }
     }
     function tryLoadModuleUsingPathsIfEligible(extensions, moduleName, loader, state) {
-        var _a = state.compilerOptions, baseUrl = _a.baseUrl, paths = _a.paths;
+        var _a;
+        var _b = state.compilerOptions, baseUrl = _b.baseUrl, paths = _b.paths, configFile = _b.configFile;
         if (paths && !ts.pathIsRelative(moduleName)) {
             if (state.traceEnabled) {
                 if (baseUrl) {
@@ -40528,7 +41508,8 @@
                 trace(state.host, ts.Diagnostics.paths_option_is_specified_looking_for_a_pattern_to_match_module_name_0, moduleName);
             }
             var baseDirectory = ts.getPathsBasePath(state.compilerOptions, state.host); // Always defined when 'paths' is defined
-            return tryLoadModuleUsingPaths(extensions, moduleName, baseDirectory, paths, loader, /*onlyRecordFailures*/ false, state);
+            var pathPatterns = (configFile === null || configFile === void 0 ? void 0 : configFile.configFileSpecs) ? (_a = configFile.configFileSpecs).pathPatterns || (_a.pathPatterns = ts.tryParsePatterns(paths)) : undefined;
+            return tryLoadModuleUsingPaths(extensions, moduleName, baseDirectory, paths, pathPatterns, loader, /*onlyRecordFailures*/ false, state);
         }
     }
     function tryLoadModuleUsingRootDirs(extensions, moduleName, containingDirectory, loader, state) {
@@ -40635,7 +41616,7 @@
     ts.tryResolveJSModule = tryResolveJSModule;
     var jsOnlyExtensions = [Extensions.JavaScript];
     var tsExtensions = [Extensions.TypeScript, Extensions.JavaScript];
-    var tsPlusJsonExtensions = __spreadArray(__spreadArray([], tsExtensions), [Extensions.Json]);
+    var tsPlusJsonExtensions = __spreadArray(__spreadArray([], tsExtensions, true), [Extensions.Json], false);
     var tsconfigExtensions = [Extensions.TSConfig];
     function tryResolveJSModuleWorker(moduleName, initialDir, host) {
         return nodeModuleNameResolverWorker(moduleName, initialDir, { moduleResolution: ts.ModuleResolutionKind.NodeJs, allowJs: true }, host, /*cache*/ undefined, jsOnlyExtensions, /*redirectedReferences*/ undefined);
@@ -40926,7 +41907,7 @@
             if (state.traceEnabled) {
                 trace(state.host, ts.Diagnostics.package_json_has_a_typesVersions_entry_0_that_matches_compiler_version_1_looking_for_a_pattern_to_match_module_name_2, versionPaths.version, ts.version, moduleName);
             }
-            var result = tryLoadModuleUsingPaths(extensions, moduleName, candidate, versionPaths.paths, loader, onlyRecordFailuresForPackageFile || onlyRecordFailuresForIndex, state);
+            var result = tryLoadModuleUsingPaths(extensions, moduleName, candidate, versionPaths.paths, /*pathPatterns*/ undefined, loader, onlyRecordFailuresForPackageFile || onlyRecordFailuresForIndex, state);
             if (result) {
                 return removeIgnoredPackageId(result.value);
             }
@@ -41033,7 +42014,7 @@
                     trace(state.host, ts.Diagnostics.package_json_has_a_typesVersions_entry_0_that_matches_compiler_version_1_looking_for_a_pattern_to_match_module_name_2, packageInfo.versionPaths.version, ts.version, rest);
                 }
                 var packageDirectoryExists = nodeModulesDirectoryExists && ts.directoryProbablyExists(packageDirectory, state.host);
-                var fromPaths = tryLoadModuleUsingPaths(extensions, rest, packageDirectory, packageInfo.versionPaths.paths, loader, !packageDirectoryExists, state);
+                var fromPaths = tryLoadModuleUsingPaths(extensions, rest, packageDirectory, packageInfo.versionPaths.paths, /*pathPatterns*/ undefined, loader, !packageDirectoryExists, state);
                 if (fromPaths) {
                     return fromPaths.value;
                 }
@@ -41041,8 +42022,9 @@
         }
         return loader(extensions, candidate, !nodeModulesDirectoryExists, state);
     }
-    function tryLoadModuleUsingPaths(extensions, moduleName, baseDirectory, paths, loader, onlyRecordFailures, state) {
-        var matchedPattern = ts.matchPatternOrExact(ts.getOwnKeys(paths), moduleName);
+    function tryLoadModuleUsingPaths(extensions, moduleName, baseDirectory, paths, pathPatterns, loader, onlyRecordFailures, state) {
+        pathPatterns || (pathPatterns = ts.tryParsePatterns(paths));
+        var matchedPattern = ts.matchPatternOrExact(pathPatterns, moduleName);
         if (matchedPattern) {
             var matchedStar_1 = ts.isString(matchedPattern) ? undefined : ts.matchedText(matchedPattern, moduleName);
             var matchedPatternText = ts.isString(matchedPattern) ? matchedPattern : ts.patternText(matchedPattern);
@@ -41217,26 +42199,26 @@
         // A module is uninstantiated if it contains only
         switch (node.kind) {
             // 1. interface declarations, type alias declarations
-            case 254 /* InterfaceDeclaration */:
-            case 255 /* TypeAliasDeclaration */:
+            case 256 /* InterfaceDeclaration */:
+            case 257 /* TypeAliasDeclaration */:
                 return 0 /* NonInstantiated */;
             // 2. const enum declarations
-            case 256 /* EnumDeclaration */:
+            case 258 /* EnumDeclaration */:
                 if (ts.isEnumConst(node)) {
                     return 2 /* ConstEnumOnly */;
                 }
                 break;
             // 3. non-exported import declarations
-            case 262 /* ImportDeclaration */:
-            case 261 /* ImportEqualsDeclaration */:
+            case 264 /* ImportDeclaration */:
+            case 263 /* ImportEqualsDeclaration */:
                 if (!(ts.hasSyntacticModifier(node, 1 /* Export */))) {
                     return 0 /* NonInstantiated */;
                 }
                 break;
             // 4. Export alias declarations pointing at only uninstantiated modules or things uninstantiated modules contain
-            case 268 /* ExportDeclaration */:
+            case 270 /* ExportDeclaration */:
                 var exportDeclaration = node;
-                if (!exportDeclaration.moduleSpecifier && exportDeclaration.exportClause && exportDeclaration.exportClause.kind === 269 /* NamedExports */) {
+                if (!exportDeclaration.moduleSpecifier && exportDeclaration.exportClause && exportDeclaration.exportClause.kind === 271 /* NamedExports */) {
                     var state = 0 /* NonInstantiated */;
                     for (var _i = 0, _a = exportDeclaration.exportClause.elements; _i < _a.length; _i++) {
                         var specifier = _a[_i];
@@ -41252,7 +42234,7 @@
                 }
                 break;
             // 5. other uninstantiated module declarations.
-            case 258 /* ModuleBlock */: {
+            case 260 /* ModuleBlock */: {
                 var state_1 = 0 /* NonInstantiated */;
                 ts.forEachChild(node, function (n) {
                     var childState = getModuleInstanceStateCached(n, visited);
@@ -41274,9 +42256,9 @@
                 });
                 return state_1;
             }
-            case 257 /* ModuleDeclaration */:
+            case 259 /* ModuleDeclaration */:
                 return getModuleInstanceState(node, visited);
-            case 78 /* Identifier */:
+            case 79 /* Identifier */:
                 // Only jsdoc typedef definition can exist in jsdoc namespace, and it should
                 // be considered the same as type alias
                 if (node.isInJSDocNamespace) {
@@ -41475,7 +42457,7 @@
         // Should not be called on a declaration with a computed property name,
         // unless it is a well known Symbol.
         function getDeclarationName(node) {
-            if (node.kind === 267 /* ExportAssignment */) {
+            if (node.kind === 269 /* ExportAssignment */) {
                 return node.isExportEquals ? "export=" /* ExportEquals */ : "default" /* Default */;
             }
             var name = ts.getNameOfDeclaration(node);
@@ -41484,7 +42466,7 @@
                     var moduleName = ts.getTextOfIdentifierOrLiteral(name);
                     return (ts.isGlobalScopeAugmentation(node) ? "__global" : "\"" + moduleName + "\"");
                 }
-                if (name.kind === 159 /* ComputedPropertyName */) {
+                if (name.kind === 160 /* ComputedPropertyName */) {
                     var nameExpression = name.expression;
                     // treat computed property names where expression is string/numeric literal as just string/numeric literal
                     if (ts.isStringOrNumericLiteralLike(nameExpression)) {
@@ -41510,36 +42492,36 @@
                 return ts.isPropertyNameLiteral(name) ? ts.getEscapedTextOfIdentifierOrLiteral(name) : undefined;
             }
             switch (node.kind) {
-                case 167 /* Constructor */:
+                case 169 /* Constructor */:
                     return "__constructor" /* Constructor */;
-                case 175 /* FunctionType */:
-                case 170 /* CallSignature */:
-                case 315 /* JSDocSignature */:
+                case 177 /* FunctionType */:
+                case 172 /* CallSignature */:
+                case 318 /* JSDocSignature */:
                     return "__call" /* Call */;
-                case 176 /* ConstructorType */:
-                case 171 /* ConstructSignature */:
+                case 178 /* ConstructorType */:
+                case 173 /* ConstructSignature */:
                     return "__new" /* New */;
-                case 172 /* IndexSignature */:
+                case 174 /* IndexSignature */:
                     return "__index" /* Index */;
-                case 268 /* ExportDeclaration */:
+                case 270 /* ExportDeclaration */:
                     return "__export" /* ExportStar */;
-                case 298 /* SourceFile */:
+                case 300 /* SourceFile */:
                     // json file should behave as
                     // module.exports = ...
                     return "export=" /* ExportEquals */;
-                case 217 /* BinaryExpression */:
+                case 219 /* BinaryExpression */:
                     if (ts.getAssignmentDeclarationKind(node) === 2 /* ModuleExports */) {
                         // module.exports = ...
                         return "export=" /* ExportEquals */;
                     }
                     ts.Debug.fail("Unknown binary declaration kind");
                     break;
-                case 309 /* JSDocFunctionType */:
+                case 312 /* JSDocFunctionType */:
                     return (ts.isJSDocConstructSignature(node) ? "__new" /* New */ : "__call" /* Call */);
-                case 161 /* Parameter */:
+                case 162 /* Parameter */:
                     // Parameters with names are handled at the top of this function.  Parameters
                     // without names can only come from JSDocFunctionTypes.
-                    ts.Debug.assert(node.parent.kind === 309 /* JSDocFunctionType */, "Impossible parameter parent kind", function () { return "parent is: " + (ts.SyntaxKind ? ts.SyntaxKind[node.parent.kind] : node.parent.kind) + ", expected JSDocFunctionType"; });
+                    ts.Debug.assert(node.parent.kind === 312 /* JSDocFunctionType */, "Impossible parameter parent kind", function () { return "parent is: " + (ts.SyntaxKind ? ts.SyntaxKind[node.parent.kind] : node.parent.kind) + ", expected JSDocFunctionType"; });
                     var functionType = node.parent;
                     var index = functionType.parameters.indexOf(node);
                     return "arg" + index;
@@ -41556,11 +42538,13 @@
          * @param includes - The SymbolFlags that node has in addition to its declaration type (eg: export, ambient, etc.)
          * @param excludes - The flags which node cannot be declared alongside in a symbol table. Used to report forbidden declarations.
          */
-        function declareSymbol(symbolTable, parent, node, includes, excludes, isReplaceableByMethod) {
-            ts.Debug.assert(!ts.hasDynamicName(node));
+        function declareSymbol(symbolTable, parent, node, includes, excludes, isReplaceableByMethod, isComputedName) {
+            ts.Debug.assert(isComputedName || !ts.hasDynamicName(node));
             var isDefaultExport = ts.hasSyntacticModifier(node, 512 /* Default */) || ts.isExportSpecifier(node) && node.name.escapedText === "default";
             // The exported symbol for an export default function/class node is always named "default"
-            var name = isDefaultExport && parent ? "default" /* Default */ : getDeclarationName(node);
+            var name = isComputedName ? "__computed" /* Computed */
+                : isDefaultExport && parent ? "default" /* Default */
+                    : getDeclarationName(node);
             var symbol;
             if (name === undefined) {
                 symbol = createSymbol(0 /* None */, "__missing" /* Missing */);
@@ -41639,7 +42623,7 @@
                                 // 1. multiple export default of class declaration or function declaration by checking NodeFlags.Default
                                 // 2. multiple export default of export assignment. This one doesn't have NodeFlags.Default on (as export default doesn't considered as modifiers)
                                 if (symbol.declarations && symbol.declarations.length &&
-                                    (node.kind === 267 /* ExportAssignment */ && !node.isExportEquals)) {
+                                    (node.kind === 269 /* ExportAssignment */ && !node.isExportEquals)) {
                                     message_1 = ts.Diagnostics.A_module_cannot_have_multiple_default_exports;
                                     messageNeedsName_1 = false;
                                     multipleDefaultExports_1 = true;
@@ -41661,7 +42645,7 @@
                             }
                         });
                         var diag = createDiagnosticForNode(declarationName_1, message_1, messageNeedsName_1 ? getDisplayName(node) : undefined);
-                        file.bindDiagnostics.push(ts.addRelatedInfo.apply(void 0, __spreadArray([diag], relatedInformation_1)));
+                        file.bindDiagnostics.push(ts.addRelatedInfo.apply(void 0, __spreadArray([diag], relatedInformation_1, false)));
                         symbol = createSymbol(0 /* None */, name);
                     }
                 }
@@ -41678,7 +42662,7 @@
         function declareModuleMember(node, symbolFlags, symbolExcludes) {
             var hasExportModifier = !!(ts.getCombinedModifierFlags(node) & 1 /* Export */) || jsdocTreatAsExported(node);
             if (symbolFlags & 2097152 /* Alias */) {
-                if (node.kind === 271 /* ExportSpecifier */ || (node.kind === 261 /* ImportEqualsDeclaration */ && hasExportModifier)) {
+                if (node.kind === 273 /* ExportSpecifier */ || (node.kind === 263 /* ImportEqualsDeclaration */ && hasExportModifier)) {
                     return declareSymbol(container.symbol.exports, container.symbol, node, symbolFlags, symbolExcludes);
                 }
                 else {
@@ -41767,7 +42751,7 @@
             // for it.  We must clear this so we don't accidentally move any stale data forward from
             // a previous compilation.
             if (containerFlags & 1 /* IsContainer */) {
-                if (node.kind !== 210 /* ArrowFunction */) {
+                if (node.kind !== 212 /* ArrowFunction */) {
                     thisParentContainer = container;
                 }
                 container = blockScopeContainer = node;
@@ -41800,7 +42784,7 @@
                 }
                 // We create a return control flow graph for IIFEs and constructors. For constructors
                 // we use the return control flow graph in strict property initialization checks.
-                currentReturnTarget = isIIFE || node.kind === 167 /* Constructor */ || (ts.isInJSFile(node) && (node.kind === 252 /* FunctionDeclaration */ || node.kind === 209 /* FunctionExpression */)) ? createBranchLabel() : undefined;
+                currentReturnTarget = isIIFE || node.kind === 169 /* Constructor */ || node.kind === 168 /* ClassStaticBlockDeclaration */ || (ts.isInJSFile(node) && (node.kind === 254 /* FunctionDeclaration */ || node.kind === 211 /* FunctionExpression */)) ? createBranchLabel() : undefined;
                 currentExceptionTarget = undefined;
                 currentBreakTarget = undefined;
                 currentContinueTarget = undefined;
@@ -41815,14 +42799,14 @@
                         node.flags |= 512 /* HasExplicitReturn */;
                     node.endFlowNode = currentFlow;
                 }
-                if (node.kind === 298 /* SourceFile */) {
+                if (node.kind === 300 /* SourceFile */) {
                     node.flags |= emitFlags;
                     node.endFlowNode = currentFlow;
                 }
                 if (currentReturnTarget) {
                     addAntecedent(currentReturnTarget, currentFlow);
                     currentFlow = finishFlowLabel(currentReturnTarget);
-                    if (node.kind === 167 /* Constructor */ || (ts.isInJSFile(node) && (node.kind === 252 /* FunctionDeclaration */ || node.kind === 209 /* FunctionExpression */))) {
+                    if (node.kind === 169 /* Constructor */ || node.kind === 168 /* ClassStaticBlockDeclaration */ || (ts.isInJSFile(node) && (node.kind === 254 /* FunctionDeclaration */ || node.kind === 211 /* FunctionExpression */))) {
                         node.returnFlowNode = currentFlow;
                     }
                 }
@@ -41849,8 +42833,8 @@
             blockScopeContainer = savedBlockScopeContainer;
         }
         function bindEachFunctionsFirst(nodes) {
-            bindEach(nodes, function (n) { return n.kind === 252 /* FunctionDeclaration */ ? bind(n) : undefined; });
-            bindEach(nodes, function (n) { return n.kind !== 252 /* FunctionDeclaration */ ? bind(n) : undefined; });
+            bindEach(nodes, function (n) { return n.kind === 254 /* FunctionDeclaration */ ? bind(n) : undefined; });
+            bindEach(nodes, function (n) { return n.kind !== 254 /* FunctionDeclaration */ ? bind(n) : undefined; });
         }
         function bindEach(nodes, bindFunction) {
             if (bindFunction === void 0) { bindFunction = bind; }
@@ -41873,59 +42857,59 @@
                 inAssignmentPattern = saveInAssignmentPattern;
                 return;
             }
-            if (node.kind >= 233 /* FirstStatement */ && node.kind <= 249 /* LastStatement */ && !options.allowUnreachableCode) {
+            if (node.kind >= 235 /* FirstStatement */ && node.kind <= 251 /* LastStatement */ && !options.allowUnreachableCode) {
                 node.flowNode = currentFlow;
             }
             switch (node.kind) {
-                case 237 /* WhileStatement */:
+                case 239 /* WhileStatement */:
                     bindWhileStatement(node);
                     break;
-                case 236 /* DoStatement */:
+                case 238 /* DoStatement */:
                     bindDoStatement(node);
                     break;
-                case 238 /* ForStatement */:
+                case 240 /* ForStatement */:
                     bindForStatement(node);
                     break;
-                case 239 /* ForInStatement */:
-                case 240 /* ForOfStatement */:
+                case 241 /* ForInStatement */:
+                case 242 /* ForOfStatement */:
                     bindForInOrForOfStatement(node);
                     break;
-                case 235 /* IfStatement */:
+                case 237 /* IfStatement */:
                     bindIfStatement(node);
                     break;
-                case 243 /* ReturnStatement */:
-                case 247 /* ThrowStatement */:
+                case 245 /* ReturnStatement */:
+                case 249 /* ThrowStatement */:
                     bindReturnOrThrow(node);
                     break;
-                case 242 /* BreakStatement */:
-                case 241 /* ContinueStatement */:
+                case 244 /* BreakStatement */:
+                case 243 /* ContinueStatement */:
                     bindBreakOrContinueStatement(node);
                     break;
-                case 248 /* TryStatement */:
+                case 250 /* TryStatement */:
                     bindTryStatement(node);
                     break;
-                case 245 /* SwitchStatement */:
+                case 247 /* SwitchStatement */:
                     bindSwitchStatement(node);
                     break;
-                case 259 /* CaseBlock */:
+                case 261 /* CaseBlock */:
                     bindCaseBlock(node);
                     break;
-                case 285 /* CaseClause */:
+                case 287 /* CaseClause */:
                     bindCaseClause(node);
                     break;
-                case 234 /* ExpressionStatement */:
+                case 236 /* ExpressionStatement */:
                     bindExpressionStatement(node);
                     break;
-                case 246 /* LabeledStatement */:
+                case 248 /* LabeledStatement */:
                     bindLabeledStatement(node);
                     break;
-                case 215 /* PrefixUnaryExpression */:
+                case 217 /* PrefixUnaryExpression */:
                     bindPrefixUnaryExpressionFlow(node);
                     break;
-                case 216 /* PostfixUnaryExpression */:
+                case 218 /* PostfixUnaryExpression */:
                     bindPostfixUnaryExpressionFlow(node);
                     break;
-                case 217 /* BinaryExpression */:
+                case 219 /* BinaryExpression */:
                     if (ts.isDestructuringAssignment(node)) {
                         // Carry over whether we are in an assignment pattern to
                         // binary expressions that could actually be an initializer
@@ -41935,47 +42919,47 @@
                     }
                     bindBinaryExpressionFlow(node);
                     break;
-                case 211 /* DeleteExpression */:
+                case 213 /* DeleteExpression */:
                     bindDeleteExpressionFlow(node);
                     break;
-                case 218 /* ConditionalExpression */:
+                case 220 /* ConditionalExpression */:
                     bindConditionalExpressionFlow(node);
                     break;
-                case 250 /* VariableDeclaration */:
+                case 252 /* VariableDeclaration */:
                     bindVariableDeclarationFlow(node);
                     break;
-                case 202 /* PropertyAccessExpression */:
-                case 203 /* ElementAccessExpression */:
+                case 204 /* PropertyAccessExpression */:
+                case 205 /* ElementAccessExpression */:
                     bindAccessExpressionFlow(node);
                     break;
-                case 204 /* CallExpression */:
+                case 206 /* CallExpression */:
                     bindCallExpressionFlow(node);
                     break;
-                case 226 /* NonNullExpression */:
+                case 228 /* NonNullExpression */:
                     bindNonNullExpressionFlow(node);
                     break;
-                case 335 /* JSDocTypedefTag */:
-                case 328 /* JSDocCallbackTag */:
-                case 329 /* JSDocEnumTag */:
+                case 340 /* JSDocTypedefTag */:
+                case 333 /* JSDocCallbackTag */:
+                case 334 /* JSDocEnumTag */:
                     bindJSDocTypeAlias(node);
                     break;
                 // In source files and blocks, bind functions first to match hoisting that occurs at runtime
-                case 298 /* SourceFile */: {
+                case 300 /* SourceFile */: {
                     bindEachFunctionsFirst(node.statements);
                     bind(node.endOfFileToken);
                     break;
                 }
-                case 231 /* Block */:
-                case 258 /* ModuleBlock */:
+                case 233 /* Block */:
+                case 260 /* ModuleBlock */:
                     bindEachFunctionsFirst(node.statements);
                     break;
-                case 199 /* BindingElement */:
+                case 201 /* BindingElement */:
                     bindBindingElementFlow(node);
                     break;
-                case 201 /* ObjectLiteralExpression */:
-                case 200 /* ArrayLiteralExpression */:
-                case 289 /* PropertyAssignment */:
-                case 221 /* SpreadElement */:
+                case 203 /* ObjectLiteralExpression */:
+                case 202 /* ArrayLiteralExpression */:
+                case 291 /* PropertyAssignment */:
+                case 223 /* SpreadElement */:
                     // Carry over whether we are in an assignment pattern of Object and Array literals
                     // as well as their children that are valid assignment targets.
                     inAssignmentPattern = saveInAssignmentPattern;
@@ -41989,22 +42973,22 @@
         }
         function isNarrowingExpression(expr) {
             switch (expr.kind) {
-                case 78 /* Identifier */:
-                case 79 /* PrivateIdentifier */:
-                case 107 /* ThisKeyword */:
-                case 202 /* PropertyAccessExpression */:
-                case 203 /* ElementAccessExpression */:
+                case 79 /* Identifier */:
+                case 80 /* PrivateIdentifier */:
+                case 108 /* ThisKeyword */:
+                case 204 /* PropertyAccessExpression */:
+                case 205 /* ElementAccessExpression */:
                     return containsNarrowableReference(expr);
-                case 204 /* CallExpression */:
+                case 206 /* CallExpression */:
                     return hasNarrowableArgument(expr);
-                case 208 /* ParenthesizedExpression */:
-                case 226 /* NonNullExpression */:
+                case 210 /* ParenthesizedExpression */:
+                case 228 /* NonNullExpression */:
                     return isNarrowingExpression(expr.expression);
-                case 217 /* BinaryExpression */:
+                case 219 /* BinaryExpression */:
                     return isNarrowingBinaryExpression(expr);
-                case 215 /* PrefixUnaryExpression */:
+                case 217 /* PrefixUnaryExpression */:
                     return expr.operator === 53 /* ExclamationToken */ && isNarrowingExpression(expr.operand);
-                case 212 /* TypeOfExpression */:
+                case 214 /* TypeOfExpression */:
                     return isNarrowingExpression(expr.expression);
             }
             return false;
@@ -42028,7 +43012,7 @@
                     }
                 }
             }
-            if (expr.expression.kind === 202 /* PropertyAccessExpression */ &&
+            if (expr.expression.kind === 204 /* PropertyAccessExpression */ &&
                 containsNarrowableReference(expr.expression.expression)) {
                 return true;
             }
@@ -42037,15 +43021,12 @@
         function isNarrowingTypeofOperands(expr1, expr2) {
             return ts.isTypeOfExpression(expr1) && isNarrowableOperand(expr1.expression) && ts.isStringLiteralLike(expr2);
         }
-        function isNarrowableInOperands(left, right) {
-            return ts.isStringLiteralLike(left) && isNarrowingExpression(right);
-        }
         function isNarrowingBinaryExpression(expr) {
             switch (expr.operatorToken.kind) {
-                case 62 /* EqualsToken */:
-                case 74 /* BarBarEqualsToken */:
-                case 75 /* AmpersandAmpersandEqualsToken */:
-                case 76 /* QuestionQuestionEqualsToken */:
+                case 63 /* EqualsToken */:
+                case 75 /* BarBarEqualsToken */:
+                case 76 /* AmpersandAmpersandEqualsToken */:
+                case 77 /* QuestionQuestionEqualsToken */:
                     return containsNarrowableReference(expr.left);
                 case 34 /* EqualsEqualsToken */:
                 case 35 /* ExclamationEqualsToken */:
@@ -42053,10 +43034,10 @@
                 case 37 /* ExclamationEqualsEqualsToken */:
                     return isNarrowableOperand(expr.left) || isNarrowableOperand(expr.right) ||
                         isNarrowingTypeofOperands(expr.right, expr.left) || isNarrowingTypeofOperands(expr.left, expr.right);
-                case 101 /* InstanceOfKeyword */:
+                case 102 /* InstanceOfKeyword */:
                     return isNarrowableOperand(expr.left);
-                case 100 /* InKeyword */:
-                    return isNarrowableInOperands(expr.left, expr.right);
+                case 101 /* InKeyword */:
+                    return isNarrowingExpression(expr.right);
                 case 27 /* CommaToken */:
                     return isNarrowingExpression(expr.right);
             }
@@ -42064,11 +43045,11 @@
         }
         function isNarrowableOperand(expr) {
             switch (expr.kind) {
-                case 208 /* ParenthesizedExpression */:
+                case 210 /* ParenthesizedExpression */:
                     return isNarrowableOperand(expr.expression);
-                case 217 /* BinaryExpression */:
+                case 219 /* BinaryExpression */:
                     switch (expr.operatorToken.kind) {
-                        case 62 /* EqualsToken */:
+                        case 63 /* EqualsToken */:
                             return isNarrowableOperand(expr.left);
                         case 27 /* CommaToken */:
                             return isNarrowableOperand(expr.right);
@@ -42102,8 +43083,8 @@
             if (!expression) {
                 return flags & 32 /* TrueCondition */ ? antecedent : unreachableFlow;
             }
-            if ((expression.kind === 109 /* TrueKeyword */ && flags & 64 /* FalseCondition */ ||
-                expression.kind === 94 /* FalseKeyword */ && flags & 32 /* TrueCondition */) &&
+            if ((expression.kind === 110 /* TrueKeyword */ && flags & 64 /* FalseCondition */ ||
+                expression.kind === 95 /* FalseKeyword */ && flags & 32 /* TrueCondition */) &&
                 !ts.isExpressionOfOptionalChainRoot(expression) && !ts.isNullishCoalesce(expression.parent)) {
                 return unreachableFlow;
             }
@@ -42142,26 +43123,26 @@
         function isStatementCondition(node) {
             var parent = node.parent;
             switch (parent.kind) {
-                case 235 /* IfStatement */:
-                case 237 /* WhileStatement */:
-                case 236 /* DoStatement */:
+                case 237 /* IfStatement */:
+                case 239 /* WhileStatement */:
+                case 238 /* DoStatement */:
                     return parent.expression === node;
-                case 238 /* ForStatement */:
-                case 218 /* ConditionalExpression */:
+                case 240 /* ForStatement */:
+                case 220 /* ConditionalExpression */:
                     return parent.condition === node;
             }
             return false;
         }
         function isLogicalExpression(node) {
             while (true) {
-                if (node.kind === 208 /* ParenthesizedExpression */) {
+                if (node.kind === 210 /* ParenthesizedExpression */) {
                     node = node.expression;
                 }
-                else if (node.kind === 215 /* PrefixUnaryExpression */ && node.operator === 53 /* ExclamationToken */) {
+                else if (node.kind === 217 /* PrefixUnaryExpression */ && node.operator === 53 /* ExclamationToken */) {
                     node = node.operand;
                 }
                 else {
-                    return node.kind === 217 /* BinaryExpression */ && (node.operatorToken.kind === 55 /* AmpersandAmpersandToken */ ||
+                    return node.kind === 219 /* BinaryExpression */ && (node.operatorToken.kind === 55 /* AmpersandAmpersandToken */ ||
                         node.operatorToken.kind === 56 /* BarBarToken */ ||
                         node.operatorToken.kind === 60 /* QuestionQuestionToken */);
                 }
@@ -42208,7 +43189,7 @@
         }
         function setContinueTarget(node, target) {
             var label = activeLabelList;
-            while (label && node.parent.kind === 246 /* LabeledStatement */) {
+            while (label && node.parent.kind === 248 /* LabeledStatement */) {
                 label.continueTarget = target;
                 label = label.next;
                 node = node.parent;
@@ -42259,12 +43240,12 @@
             bind(node.expression);
             addAntecedent(preLoopLabel, currentFlow);
             currentFlow = preLoopLabel;
-            if (node.kind === 240 /* ForOfStatement */) {
+            if (node.kind === 242 /* ForOfStatement */) {
                 bind(node.awaitModifier);
             }
             addAntecedent(postLoopLabel, currentFlow);
             bind(node.initializer);
-            if (node.initializer.kind !== 251 /* VariableDeclarationList */) {
+            if (node.initializer.kind !== 253 /* VariableDeclarationList */) {
                 bindAssignmentTargetFlow(node.initializer);
             }
             bindIterativeStatement(node.statement, postLoopLabel, preLoopLabel);
@@ -42286,7 +43267,7 @@
         }
         function bindReturnOrThrow(node) {
             bind(node.expression);
-            if (node.kind === 243 /* ReturnStatement */) {
+            if (node.kind === 245 /* ReturnStatement */) {
                 hasExplicitReturn = true;
                 if (currentReturnTarget) {
                     addAntecedent(currentReturnTarget, currentFlow);
@@ -42303,7 +43284,7 @@
             return undefined;
         }
         function bindBreakOrContinueFlow(node, breakTarget, continueTarget) {
-            var flowLabel = node.kind === 242 /* BreakStatement */ ? breakTarget : continueTarget;
+            var flowLabel = node.kind === 244 /* BreakStatement */ ? breakTarget : continueTarget;
             if (flowLabel) {
                 addAntecedent(flowLabel, currentFlow);
                 currentFlow = unreachableFlow;
@@ -42408,7 +43389,7 @@
             preSwitchCaseFlow = currentFlow;
             bind(node.caseBlock);
             addAntecedent(postSwitchLabel, currentFlow);
-            var hasDefault = ts.forEach(node.caseBlock.clauses, function (c) { return c.kind === 286 /* DefaultClause */; });
+            var hasDefault = ts.forEach(node.caseBlock.clauses, function (c) { return c.kind === 288 /* DefaultClause */; });
             // We mark a switch statement as possibly exhaustive if it has no default clause and if all
             // case clauses have unreachable end points (e.g. they all return). Note, we no longer need
             // this property in control flow analysis, it's there only for backwards compatibility.
@@ -42456,9 +43437,9 @@
         function maybeBindExpressionFlowIfCall(node) {
             // A top level or LHS of comma expression call expression with a dotted function name and at least one argument
             // is potentially an assertion and is therefore included in the control flow.
-            if (node.kind === 204 /* CallExpression */) {
+            if (node.kind === 206 /* CallExpression */) {
                 var call = node;
-                if (call.expression.kind !== 105 /* SuperKeyword */ && ts.isDottedName(call.expression)) {
+                if (call.expression.kind !== 106 /* SuperKeyword */ && ts.isDottedName(call.expression)) {
                     currentFlow = createFlowCall(currentFlow, call);
                 }
             }
@@ -42482,7 +43463,7 @@
             currentFlow = finishFlowLabel(postStatementLabel);
         }
         function bindDestructuringTargetFlow(node) {
-            if (node.kind === 217 /* BinaryExpression */ && node.operatorToken.kind === 62 /* EqualsToken */) {
+            if (node.kind === 219 /* BinaryExpression */ && node.operatorToken.kind === 63 /* EqualsToken */) {
                 bindAssignmentTargetFlow(node.left);
             }
             else {
@@ -42493,10 +43474,10 @@
             if (isNarrowableReference(node)) {
                 currentFlow = createFlowMutation(16 /* Assignment */, currentFlow, node);
             }
-            else if (node.kind === 200 /* ArrayLiteralExpression */) {
+            else if (node.kind === 202 /* ArrayLiteralExpression */) {
                 for (var _i = 0, _a = node.elements; _i < _a.length; _i++) {
                     var e = _a[_i];
-                    if (e.kind === 221 /* SpreadElement */) {
+                    if (e.kind === 223 /* SpreadElement */) {
                         bindAssignmentTargetFlow(e.expression);
                     }
                     else {
@@ -42504,16 +43485,16 @@
                     }
                 }
             }
-            else if (node.kind === 201 /* ObjectLiteralExpression */) {
+            else if (node.kind === 203 /* ObjectLiteralExpression */) {
                 for (var _b = 0, _c = node.properties; _b < _c.length; _b++) {
                     var p = _c[_b];
-                    if (p.kind === 289 /* PropertyAssignment */) {
+                    if (p.kind === 291 /* PropertyAssignment */) {
                         bindDestructuringTargetFlow(p.initializer);
                     }
-                    else if (p.kind === 290 /* ShorthandPropertyAssignment */) {
+                    else if (p.kind === 292 /* ShorthandPropertyAssignment */) {
                         bindAssignmentTargetFlow(p.name);
                     }
-                    else if (p.kind === 291 /* SpreadAssignment */) {
+                    else if (p.kind === 293 /* SpreadAssignment */) {
                         bindAssignmentTargetFlow(p.expression);
                     }
                 }
@@ -42521,7 +43502,7 @@
         }
         function bindLogicalLikeExpression(node, trueTarget, falseTarget) {
             var preRightLabel = createBranchLabel();
-            if (node.operatorToken.kind === 55 /* AmpersandAmpersandToken */ || node.operatorToken.kind === 75 /* AmpersandAmpersandEqualsToken */) {
+            if (node.operatorToken.kind === 55 /* AmpersandAmpersandToken */ || node.operatorToken.kind === 76 /* AmpersandAmpersandEqualsToken */) {
                 bindCondition(node.left, preRightLabel, falseTarget);
             }
             else {
@@ -42645,7 +43626,7 @@
                     var operator = node.operatorToken.kind;
                     if (ts.isAssignmentOperator(operator) && !ts.isAssignmentTarget(node)) {
                         bindAssignmentTargetFlow(node.left);
-                        if (operator === 62 /* EqualsToken */ && node.left.kind === 203 /* ElementAccessExpression */) {
+                        if (operator === 63 /* EqualsToken */ && node.left.kind === 205 /* ElementAccessExpression */) {
                             var elementAccess = node.left;
                             if (isNarrowableOperand(elementAccess.expression)) {
                                 currentFlow = createFlowMutation(256 /* ArrayMutation */, currentFlow, node);
@@ -42673,7 +43654,7 @@
         }
         function bindDeleteExpressionFlow(node) {
             bindEachChild(node);
-            if (node.expression.kind === 202 /* PropertyAccessExpression */) {
+            if (node.expression.kind === 204 /* PropertyAccessExpression */) {
                 bindAssignmentTargetFlow(node.expression);
             }
         }
@@ -42729,16 +43710,20 @@
             }
         }
         function bindJSDocTypeAlias(node) {
-            ts.setParent(node.tagName, node);
-            if (node.kind !== 329 /* JSDocEnumTag */ && node.fullName) {
+            bind(node.tagName);
+            if (node.kind !== 334 /* JSDocEnumTag */ && node.fullName) {
+                // don't bind the type name yet; that's delayed until delayedBindJSDocTypedefTag
                 ts.setParent(node.fullName, node);
                 ts.setParentRecursive(node.fullName, /*incremental*/ false);
             }
+            if (typeof node.comment !== "string") {
+                bindEach(node.comment);
+            }
         }
         function bindJSDocClassTag(node) {
             bindEachChild(node);
             var host = ts.getHostSignatureFromJSDoc(node);
-            if (host && host.kind !== 166 /* MethodDeclaration */) {
+            if (host && host.kind !== 167 /* MethodDeclaration */) {
                 addDeclarationToSymbol(host.symbol, host, 32 /* Class */);
             }
         }
@@ -42751,15 +43736,15 @@
         }
         function bindOptionalChainRest(node) {
             switch (node.kind) {
-                case 202 /* PropertyAccessExpression */:
+                case 204 /* PropertyAccessExpression */:
                     bind(node.questionDotToken);
                     bind(node.name);
                     break;
-                case 203 /* ElementAccessExpression */:
+                case 205 /* ElementAccessExpression */:
                     bind(node.questionDotToken);
                     bind(node.argumentExpression);
                     break;
-                case 204 /* CallExpression */:
+                case 206 /* CallExpression */:
                     bind(node.questionDotToken);
                     bindEach(node.typeArguments);
                     bindEach(node.arguments);
@@ -42824,19 +43809,19 @@
                 // an immediately invoked function expression (IIFE). Initialize the flowNode property to
                 // the current control flow (which includes evaluation of the IIFE arguments).
                 var expr = ts.skipParentheses(node.expression);
-                if (expr.kind === 209 /* FunctionExpression */ || expr.kind === 210 /* ArrowFunction */) {
+                if (expr.kind === 211 /* FunctionExpression */ || expr.kind === 212 /* ArrowFunction */) {
                     bindEach(node.typeArguments);
                     bindEach(node.arguments);
                     bind(node.expression);
                 }
                 else {
                     bindEachChild(node);
-                    if (node.expression.kind === 105 /* SuperKeyword */) {
+                    if (node.expression.kind === 106 /* SuperKeyword */) {
                         currentFlow = createFlowCall(currentFlow, node);
                     }
                 }
             }
-            if (node.expression.kind === 202 /* PropertyAccessExpression */) {
+            if (node.expression.kind === 204 /* PropertyAccessExpression */) {
                 var propertyAccess = node.expression;
                 if (ts.isIdentifier(propertyAccess.name) && isNarrowableOperand(propertyAccess.expression) && ts.isPushOrUnshiftIdentifier(propertyAccess.name)) {
                     currentFlow = createFlowMutation(256 /* ArrayMutation */, currentFlow, node);
@@ -42845,54 +43830,55 @@
         }
         function getContainerFlags(node) {
             switch (node.kind) {
-                case 222 /* ClassExpression */:
-                case 253 /* ClassDeclaration */:
-                case 256 /* EnumDeclaration */:
-                case 201 /* ObjectLiteralExpression */:
-                case 178 /* TypeLiteral */:
-                case 314 /* JSDocTypeLiteral */:
-                case 282 /* JsxAttributes */:
+                case 224 /* ClassExpression */:
+                case 255 /* ClassDeclaration */:
+                case 258 /* EnumDeclaration */:
+                case 203 /* ObjectLiteralExpression */:
+                case 180 /* TypeLiteral */:
+                case 317 /* JSDocTypeLiteral */:
+                case 284 /* JsxAttributes */:
                     return 1 /* IsContainer */;
-                case 254 /* InterfaceDeclaration */:
+                case 256 /* InterfaceDeclaration */:
                     return 1 /* IsContainer */ | 64 /* IsInterface */;
-                case 257 /* ModuleDeclaration */:
-                case 255 /* TypeAliasDeclaration */:
-                case 191 /* MappedType */:
+                case 259 /* ModuleDeclaration */:
+                case 257 /* TypeAliasDeclaration */:
+                case 193 /* MappedType */:
                     return 1 /* IsContainer */ | 32 /* HasLocals */;
-                case 298 /* SourceFile */:
+                case 300 /* SourceFile */:
                     return 1 /* IsContainer */ | 4 /* IsControlFlowContainer */ | 32 /* HasLocals */;
-                case 166 /* MethodDeclaration */:
+                case 167 /* MethodDeclaration */:
                     if (ts.isObjectLiteralOrClassExpressionMethod(node)) {
                         return 1 /* IsContainer */ | 4 /* IsControlFlowContainer */ | 32 /* HasLocals */ | 8 /* IsFunctionLike */ | 128 /* IsObjectLiteralOrClassExpressionMethod */;
                     }
                 // falls through
-                case 167 /* Constructor */:
-                case 252 /* FunctionDeclaration */:
-                case 165 /* MethodSignature */:
-                case 168 /* GetAccessor */:
-                case 169 /* SetAccessor */:
-                case 170 /* CallSignature */:
-                case 315 /* JSDocSignature */:
-                case 309 /* JSDocFunctionType */:
-                case 175 /* FunctionType */:
-                case 171 /* ConstructSignature */:
-                case 172 /* IndexSignature */:
-                case 176 /* ConstructorType */:
+                case 169 /* Constructor */:
+                case 254 /* FunctionDeclaration */:
+                case 166 /* MethodSignature */:
+                case 170 /* GetAccessor */:
+                case 171 /* SetAccessor */:
+                case 172 /* CallSignature */:
+                case 318 /* JSDocSignature */:
+                case 312 /* JSDocFunctionType */:
+                case 177 /* FunctionType */:
+                case 173 /* ConstructSignature */:
+                case 174 /* IndexSignature */:
+                case 178 /* ConstructorType */:
+                case 168 /* ClassStaticBlockDeclaration */:
                     return 1 /* IsContainer */ | 4 /* IsControlFlowContainer */ | 32 /* HasLocals */ | 8 /* IsFunctionLike */;
-                case 209 /* FunctionExpression */:
-                case 210 /* ArrowFunction */:
+                case 211 /* FunctionExpression */:
+                case 212 /* ArrowFunction */:
                     return 1 /* IsContainer */ | 4 /* IsControlFlowContainer */ | 32 /* HasLocals */ | 8 /* IsFunctionLike */ | 16 /* IsFunctionExpression */;
-                case 258 /* ModuleBlock */:
+                case 260 /* ModuleBlock */:
                     return 4 /* IsControlFlowContainer */;
-                case 164 /* PropertyDeclaration */:
+                case 165 /* PropertyDeclaration */:
                     return node.initializer ? 4 /* IsControlFlowContainer */ : 0;
-                case 288 /* CatchClause */:
-                case 238 /* ForStatement */:
-                case 239 /* ForInStatement */:
-                case 240 /* ForOfStatement */:
-                case 259 /* CaseBlock */:
+                case 290 /* CatchClause */:
+                case 240 /* ForStatement */:
+                case 241 /* ForInStatement */:
+                case 242 /* ForOfStatement */:
+                case 261 /* CaseBlock */:
                     return 2 /* IsBlockScopedContainer */;
-                case 231 /* Block */:
+                case 233 /* Block */:
                     // do not treat blocks directly inside a function as a block-scoped-container.
                     // Locals that reside in this block should go to the function locals. Otherwise 'x'
                     // would not appear to be a redeclaration of a block scoped local in the following
@@ -42909,7 +43895,7 @@
                     // By not creating a new block-scoped-container here, we ensure that both 'var x'
                     // and 'let x' go into the Function-container's locals, and we do get a collision
                     // conflict.
-                    return ts.isFunctionLike(node.parent) ? 0 /* None */ : 2 /* IsBlockScopedContainer */;
+                    return ts.isFunctionLike(node.parent) || ts.isClassStaticBlockDeclaration(node.parent) ? 0 /* None */ : 2 /* IsBlockScopedContainer */;
             }
             return 0 /* None */;
         }
@@ -42925,45 +43911,46 @@
                 // members are declared (for example, a member of a class will go into a specific
                 // symbol table depending on if it is static or not). We defer to specialized
                 // handlers to take care of declaring these child members.
-                case 257 /* ModuleDeclaration */:
+                case 259 /* ModuleDeclaration */:
                     return declareModuleMember(node, symbolFlags, symbolExcludes);
-                case 298 /* SourceFile */:
+                case 300 /* SourceFile */:
                     return declareSourceFileMember(node, symbolFlags, symbolExcludes);
-                case 222 /* ClassExpression */:
-                case 253 /* ClassDeclaration */:
+                case 224 /* ClassExpression */:
+                case 255 /* ClassDeclaration */:
                     return declareClassMember(node, symbolFlags, symbolExcludes);
-                case 256 /* EnumDeclaration */:
+                case 258 /* EnumDeclaration */:
                     return declareSymbol(container.symbol.exports, container.symbol, node, symbolFlags, symbolExcludes);
-                case 178 /* TypeLiteral */:
-                case 314 /* JSDocTypeLiteral */:
-                case 201 /* ObjectLiteralExpression */:
-                case 254 /* InterfaceDeclaration */:
-                case 282 /* JsxAttributes */:
+                case 180 /* TypeLiteral */:
+                case 317 /* JSDocTypeLiteral */:
+                case 203 /* ObjectLiteralExpression */:
+                case 256 /* InterfaceDeclaration */:
+                case 284 /* JsxAttributes */:
                     // Interface/Object-types always have their children added to the 'members' of
                     // their container. They are only accessible through an instance of their
                     // container, and are never in scope otherwise (even inside the body of the
                     // object / type / interface declaring them). An exception is type parameters,
                     // which are in scope without qualification (similar to 'locals').
                     return declareSymbol(container.symbol.members, container.symbol, node, symbolFlags, symbolExcludes);
-                case 175 /* FunctionType */:
-                case 176 /* ConstructorType */:
-                case 170 /* CallSignature */:
-                case 171 /* ConstructSignature */:
-                case 315 /* JSDocSignature */:
-                case 172 /* IndexSignature */:
-                case 166 /* MethodDeclaration */:
-                case 165 /* MethodSignature */:
-                case 167 /* Constructor */:
-                case 168 /* GetAccessor */:
-                case 169 /* SetAccessor */:
-                case 252 /* FunctionDeclaration */:
-                case 209 /* FunctionExpression */:
-                case 210 /* ArrowFunction */:
-                case 309 /* JSDocFunctionType */:
-                case 335 /* JSDocTypedefTag */:
-                case 328 /* JSDocCallbackTag */:
-                case 255 /* TypeAliasDeclaration */:
-                case 191 /* MappedType */:
+                case 177 /* FunctionType */:
+                case 178 /* ConstructorType */:
+                case 172 /* CallSignature */:
+                case 173 /* ConstructSignature */:
+                case 318 /* JSDocSignature */:
+                case 174 /* IndexSignature */:
+                case 167 /* MethodDeclaration */:
+                case 166 /* MethodSignature */:
+                case 169 /* Constructor */:
+                case 170 /* GetAccessor */:
+                case 171 /* SetAccessor */:
+                case 254 /* FunctionDeclaration */:
+                case 211 /* FunctionExpression */:
+                case 212 /* ArrowFunction */:
+                case 312 /* JSDocFunctionType */:
+                case 340 /* JSDocTypedefTag */:
+                case 333 /* JSDocCallbackTag */:
+                case 168 /* ClassStaticBlockDeclaration */:
+                case 257 /* TypeAliasDeclaration */:
+                case 193 /* MappedType */:
                     // All the children of these container types are never visible through another
                     // symbol (i.e. through another symbol's 'exports' or 'members').  Instead,
                     // they're only accessed 'lexically' (i.e. from code that exists underneath
@@ -42974,7 +43961,7 @@
             }
         }
         function declareClassMember(node, symbolFlags, symbolExcludes) {
-            return ts.hasSyntacticModifier(node, 32 /* Static */)
+            return ts.isStatic(node)
                 ? declareSymbol(container.symbol.exports, container.symbol, node, symbolFlags, symbolExcludes)
                 : declareSymbol(container.symbol.members, container.symbol, node, symbolFlags, symbolExcludes);
         }
@@ -43010,15 +43997,13 @@
                     var pattern = void 0;
                     if (node.name.kind === 10 /* StringLiteral */) {
                         var text = node.name.text;
-                        if (ts.hasZeroOrOneAsteriskCharacter(text)) {
-                            pattern = ts.tryParsePattern(text);
-                        }
-                        else {
+                        pattern = ts.tryParsePattern(text);
+                        if (pattern === undefined) {
                             errorOnFirstToken(node.name, ts.Diagnostics.Pattern_0_can_have_at_most_one_Asterisk_character, text);
                         }
                     }
                     var symbol = declareSymbolAndAddToSymbolTable(node, 512 /* ValueModule */, 110735 /* ValueModuleExcludes */);
-                    file.patternAmbientModules = ts.append(file.patternAmbientModules, pattern && { pattern: pattern, symbol: symbol });
+                    file.patternAmbientModules = ts.append(file.patternAmbientModules, pattern && !ts.isString(pattern) ? { pattern: pattern, symbol: symbol } : undefined);
                 }
             }
             else {
@@ -43064,7 +44049,7 @@
                 var seen = new ts.Map();
                 for (var _i = 0, _a = node.properties; _i < _a.length; _i++) {
                     var prop = _a[_i];
-                    if (prop.kind === 291 /* SpreadAssignment */ || prop.name.kind !== 78 /* Identifier */) {
+                    if (prop.kind === 293 /* SpreadAssignment */ || prop.name.kind !== 79 /* Identifier */) {
                         continue;
                     }
                     var identifier = prop.name;
@@ -43076,7 +44061,7 @@
                     //    c.IsAccessorDescriptor(previous) is true and IsDataDescriptor(propId.descriptor) is true.
                     //    d.IsAccessorDescriptor(previous) is true and IsAccessorDescriptor(propId.descriptor) is true
                     // and either both previous and propId.descriptor have[[Get]] fields or both previous and propId.descriptor have[[Set]] fields
-                    var currentKind = prop.kind === 289 /* PropertyAssignment */ || prop.kind === 290 /* ShorthandPropertyAssignment */ || prop.kind === 166 /* MethodDeclaration */
+                    var currentKind = prop.kind === 291 /* PropertyAssignment */ || prop.kind === 292 /* ShorthandPropertyAssignment */ || prop.kind === 167 /* MethodDeclaration */
                         ? 1 /* Property */
                         : 2 /* Accessor */;
                     var existingKind = seen.get(identifier.escapedText);
@@ -43108,10 +44093,10 @@
         }
         function bindBlockScopedDeclaration(node, symbolFlags, symbolExcludes) {
             switch (blockScopeContainer.kind) {
-                case 257 /* ModuleDeclaration */:
+                case 259 /* ModuleDeclaration */:
                     declareModuleMember(node, symbolFlags, symbolExcludes);
                     break;
-                case 298 /* SourceFile */:
+                case 300 /* SourceFile */:
                     if (ts.isExternalOrCommonJsModule(container)) {
                         declareModuleMember(node, symbolFlags, symbolExcludes);
                         break;
@@ -43179,7 +44164,7 @@
                         container = oldContainer;
                     }
                 }
-                else if (ts.isJSDocEnumTag(typeAlias) || !typeAlias.fullName || typeAlias.fullName.kind === 78 /* Identifier */) {
+                else if (ts.isJSDocEnumTag(typeAlias) || !typeAlias.fullName || typeAlias.fullName.kind === 79 /* Identifier */) {
                     parent = typeAlias.parent;
                     bindBlockScopedDeclaration(typeAlias, 524288 /* TypeAlias */, 788968 /* TypeAliasExcludes */);
                 }
@@ -43204,11 +44189,11 @@
                 !ts.isIdentifierName(node)) {
                 // strict mode identifiers
                 if (inStrictMode &&
-                    node.originalKeywordKind >= 116 /* FirstFutureReservedWord */ &&
-                    node.originalKeywordKind <= 124 /* LastFutureReservedWord */) {
+                    node.originalKeywordKind >= 117 /* FirstFutureReservedWord */ &&
+                    node.originalKeywordKind <= 125 /* LastFutureReservedWord */) {
                     file.bindDiagnostics.push(createDiagnosticForNode(node, getStrictModeIdentifierMessage(node), ts.declarationNameToString(node)));
                 }
-                else if (node.originalKeywordKind === 130 /* AwaitKeyword */) {
+                else if (node.originalKeywordKind === 131 /* AwaitKeyword */) {
                     if (ts.isExternalModule(file) && ts.isInTopLevelContext(node)) {
                         file.bindDiagnostics.push(createDiagnosticForNode(node, ts.Diagnostics.Identifier_expected_0_is_a_reserved_word_at_the_top_level_of_a_module, ts.declarationNameToString(node)));
                     }
@@ -43216,7 +44201,7 @@
                         file.bindDiagnostics.push(createDiagnosticForNode(node, ts.Diagnostics.Identifier_expected_0_is_a_reserved_word_that_cannot_be_used_here, ts.declarationNameToString(node)));
                     }
                 }
-                else if (node.originalKeywordKind === 124 /* YieldKeyword */ && node.flags & 8192 /* YieldContext */) {
+                else if (node.originalKeywordKind === 125 /* YieldKeyword */ && node.flags & 8192 /* YieldContext */) {
                     file.bindDiagnostics.push(createDiagnosticForNode(node, ts.Diagnostics.Identifier_expected_0_is_a_reserved_word_that_cannot_be_used_here, ts.declarationNameToString(node)));
                 }
             }
@@ -43258,7 +44243,7 @@
         }
         function checkStrictModeDeleteExpression(node) {
             // Grammar checking
-            if (inStrictMode && node.expression.kind === 78 /* Identifier */) {
+            if (inStrictMode && node.expression.kind === 79 /* Identifier */) {
                 // When a delete operator occurs within strict mode code, a SyntaxError is thrown if its
                 // UnaryExpression is a direct reference to a variable, function argument, or function name
                 var span = ts.getErrorSpanForNode(file, node.expression);
@@ -43269,7 +44254,7 @@
             return ts.isIdentifier(node) && (node.escapedText === "eval" || node.escapedText === "arguments");
         }
         function checkStrictModeEvalOrArguments(contextNode, name) {
-            if (name && name.kind === 78 /* Identifier */) {
+            if (name && name.kind === 79 /* Identifier */) {
                 var identifier = name;
                 if (isEvalOrArgumentsIdentifier(identifier)) {
                     // We check first if the name is inside class declaration or class expression; if so give explicit message
@@ -43283,7 +44268,7 @@
             // Provide specialized messages to help the user understand why we think they're in
             // strict mode.
             if (ts.getContainingClass(node)) {
-                return ts.Diagnostics.Invalid_use_of_0_Class_definitions_are_automatically_in_strict_mode;
+                return ts.Diagnostics.Code_contained_in_a_class_is_evaluated_in_JavaScript_s_strict_mode_which_does_not_allow_this_use_of_0_For_more_information_see_https_Colon_Slash_Slashdeveloper_mozilla_org_Slashen_US_Slashdocs_SlashWeb_SlashJavaScript_SlashReference_SlashStrict_mode;
             }
             if (file.externalModuleIndicator) {
                 return ts.Diagnostics.Invalid_use_of_0_Modules_are_automatically_in_strict_mode;
@@ -43310,9 +44295,9 @@
         function checkStrictModeFunctionDeclaration(node) {
             if (languageVersion < 2 /* ES2015 */) {
                 // Report error if function is not top level function declaration
-                if (blockScopeContainer.kind !== 298 /* SourceFile */ &&
-                    blockScopeContainer.kind !== 257 /* ModuleDeclaration */ &&
-                    !ts.isFunctionLike(blockScopeContainer)) {
+                if (blockScopeContainer.kind !== 300 /* SourceFile */ &&
+                    blockScopeContainer.kind !== 259 /* ModuleDeclaration */ &&
+                    !ts.isFunctionLikeOrClassStaticBlockDeclaration(blockScopeContainer)) {
                     // We check first if the name is inside class declaration or class expression; if so give explicit message
                     // otherwise report generic error message.
                     var errorSpan = ts.getErrorSpanForNode(file, node);
@@ -43406,7 +44391,7 @@
             // the current 'container' node when it changes. This helps us know which symbol table
             // a local should go into for example. Since terminal nodes are known not to have
             // children, as an optimization we don't process those.
-            if (node.kind > 157 /* LastToken */) {
+            if (node.kind > 158 /* LastToken */) {
                 var saveParent = parent;
                 parent = node;
                 var containerFlags = getContainerFlags(node);
@@ -43468,7 +44453,7 @@
         function bindWorker(node) {
             switch (node.kind) {
                 /* Strict mode checks */
-                case 78 /* Identifier */:
+                case 79 /* Identifier */:
                     // for typedef type names with namespaces, bind the new jsdoc type symbol here
                     // because it requires all containing namespaces to be in effect, namely the
                     // current "blockScopeContainer" needs to be set to its immediate namespace parent.
@@ -43481,24 +44466,24 @@
                         break;
                     }
                 // falls through
-                case 107 /* ThisKeyword */:
-                    if (currentFlow && (ts.isExpression(node) || parent.kind === 290 /* ShorthandPropertyAssignment */)) {
+                case 108 /* ThisKeyword */:
+                    if (currentFlow && (ts.isExpression(node) || parent.kind === 292 /* ShorthandPropertyAssignment */)) {
                         node.flowNode = currentFlow;
                     }
                     return checkContextualIdentifier(node);
-                case 158 /* QualifiedName */:
-                    if (currentFlow && parent.kind === 177 /* TypeQuery */) {
+                case 159 /* QualifiedName */:
+                    if (currentFlow && ts.isPartOfTypeQuery(node)) {
                         node.flowNode = currentFlow;
                     }
                     break;
-                case 227 /* MetaProperty */:
-                case 105 /* SuperKeyword */:
+                case 229 /* MetaProperty */:
+                case 106 /* SuperKeyword */:
                     node.flowNode = currentFlow;
                     break;
-                case 79 /* PrivateIdentifier */:
+                case 80 /* PrivateIdentifier */:
                     return checkPrivateIdentifier(node);
-                case 202 /* PropertyAccessExpression */:
-                case 203 /* ElementAccessExpression */:
+                case 204 /* PropertyAccessExpression */:
+                case 205 /* ElementAccessExpression */:
                     var expr = node;
                     if (currentFlow && isNarrowableReference(expr)) {
                         expr.flowNode = currentFlow;
@@ -43513,7 +44498,7 @@
                         declareSymbol(file.locals, /*parent*/ undefined, expr.expression, 1 /* FunctionScopedVariable */ | 134217728 /* ModuleExports */, 111550 /* FunctionScopedVariableExcludes */);
                     }
                     break;
-                case 217 /* BinaryExpression */:
+                case 219 /* BinaryExpression */:
                     var specialKind = ts.getAssignmentDeclarationKind(node);
                     switch (specialKind) {
                         case 1 /* ExportsProperty */:
@@ -43549,78 +44534,78 @@
                             ts.Debug.fail("Unknown binary expression special property assignment kind");
                     }
                     return checkStrictModeBinaryExpression(node);
-                case 288 /* CatchClause */:
+                case 290 /* CatchClause */:
                     return checkStrictModeCatchClause(node);
-                case 211 /* DeleteExpression */:
+                case 213 /* DeleteExpression */:
                     return checkStrictModeDeleteExpression(node);
                 case 8 /* NumericLiteral */:
                     return checkStrictModeNumericLiteral(node);
-                case 216 /* PostfixUnaryExpression */:
+                case 218 /* PostfixUnaryExpression */:
                     return checkStrictModePostfixUnaryExpression(node);
-                case 215 /* PrefixUnaryExpression */:
+                case 217 /* PrefixUnaryExpression */:
                     return checkStrictModePrefixUnaryExpression(node);
-                case 244 /* WithStatement */:
+                case 246 /* WithStatement */:
                     return checkStrictModeWithStatement(node);
-                case 246 /* LabeledStatement */:
+                case 248 /* LabeledStatement */:
                     return checkStrictModeLabeledStatement(node);
-                case 188 /* ThisType */:
+                case 190 /* ThisType */:
                     seenThisKeyword = true;
                     return;
-                case 173 /* TypePredicate */:
+                case 175 /* TypePredicate */:
                     break; // Binding the children will handle everything
-                case 160 /* TypeParameter */:
+                case 161 /* TypeParameter */:
                     return bindTypeParameter(node);
-                case 161 /* Parameter */:
+                case 162 /* Parameter */:
                     return bindParameter(node);
-                case 250 /* VariableDeclaration */:
+                case 252 /* VariableDeclaration */:
                     return bindVariableDeclarationOrBindingElement(node);
-                case 199 /* BindingElement */:
+                case 201 /* BindingElement */:
                     node.flowNode = currentFlow;
                     return bindVariableDeclarationOrBindingElement(node);
-                case 164 /* PropertyDeclaration */:
-                case 163 /* PropertySignature */:
+                case 165 /* PropertyDeclaration */:
+                case 164 /* PropertySignature */:
                     return bindPropertyWorker(node);
-                case 289 /* PropertyAssignment */:
-                case 290 /* ShorthandPropertyAssignment */:
+                case 291 /* PropertyAssignment */:
+                case 292 /* ShorthandPropertyAssignment */:
                     return bindPropertyOrMethodOrAccessor(node, 4 /* Property */, 0 /* PropertyExcludes */);
-                case 292 /* EnumMember */:
+                case 294 /* EnumMember */:
                     return bindPropertyOrMethodOrAccessor(node, 8 /* EnumMember */, 900095 /* EnumMemberExcludes */);
-                case 170 /* CallSignature */:
-                case 171 /* ConstructSignature */:
-                case 172 /* IndexSignature */:
+                case 172 /* CallSignature */:
+                case 173 /* ConstructSignature */:
+                case 174 /* IndexSignature */:
                     return declareSymbolAndAddToSymbolTable(node, 131072 /* Signature */, 0 /* None */);
-                case 166 /* MethodDeclaration */:
-                case 165 /* MethodSignature */:
+                case 167 /* MethodDeclaration */:
+                case 166 /* MethodSignature */:
                     // If this is an ObjectLiteralExpression method, then it sits in the same space
                     // as other properties in the object literal.  So we use SymbolFlags.PropertyExcludes
                     // so that it will conflict with any other object literal members with the same
                     // name.
                     return bindPropertyOrMethodOrAccessor(node, 8192 /* Method */ | (node.questionToken ? 16777216 /* Optional */ : 0 /* None */), ts.isObjectLiteralMethod(node) ? 0 /* PropertyExcludes */ : 103359 /* MethodExcludes */);
-                case 252 /* FunctionDeclaration */:
+                case 254 /* FunctionDeclaration */:
                     return bindFunctionDeclaration(node);
-                case 167 /* Constructor */:
+                case 169 /* Constructor */:
                     return declareSymbolAndAddToSymbolTable(node, 16384 /* Constructor */, /*symbolExcludes:*/ 0 /* None */);
-                case 168 /* GetAccessor */:
+                case 170 /* GetAccessor */:
                     return bindPropertyOrMethodOrAccessor(node, 32768 /* GetAccessor */, 46015 /* GetAccessorExcludes */);
-                case 169 /* SetAccessor */:
+                case 171 /* SetAccessor */:
                     return bindPropertyOrMethodOrAccessor(node, 65536 /* SetAccessor */, 78783 /* SetAccessorExcludes */);
-                case 175 /* FunctionType */:
-                case 309 /* JSDocFunctionType */:
-                case 315 /* JSDocSignature */:
-                case 176 /* ConstructorType */:
+                case 177 /* FunctionType */:
+                case 312 /* JSDocFunctionType */:
+                case 318 /* JSDocSignature */:
+                case 178 /* ConstructorType */:
                     return bindFunctionOrConstructorType(node);
-                case 178 /* TypeLiteral */:
-                case 314 /* JSDocTypeLiteral */:
-                case 191 /* MappedType */:
+                case 180 /* TypeLiteral */:
+                case 317 /* JSDocTypeLiteral */:
+                case 193 /* MappedType */:
                     return bindAnonymousTypeWorker(node);
-                case 322 /* JSDocClassTag */:
+                case 327 /* JSDocClassTag */:
                     return bindJSDocClassTag(node);
-                case 201 /* ObjectLiteralExpression */:
+                case 203 /* ObjectLiteralExpression */:
                     return bindObjectLiteralExpression(node);
-                case 209 /* FunctionExpression */:
-                case 210 /* ArrowFunction */:
+                case 211 /* FunctionExpression */:
+                case 212 /* ArrowFunction */:
                     return bindFunctionExpression(node);
-                case 204 /* CallExpression */:
+                case 206 /* CallExpression */:
                     var assignmentKind = ts.getAssignmentDeclarationKind(node);
                     switch (assignmentKind) {
                         case 7 /* ObjectDefinePropertyValue */:
@@ -43639,65 +44624,65 @@
                     }
                     break;
                 // Members of classes, interfaces, and modules
-                case 222 /* ClassExpression */:
-                case 253 /* ClassDeclaration */:
+                case 224 /* ClassExpression */:
+                case 255 /* ClassDeclaration */:
                     // All classes are automatically in strict mode in ES6.
                     inStrictMode = true;
                     return bindClassLikeDeclaration(node);
-                case 254 /* InterfaceDeclaration */:
+                case 256 /* InterfaceDeclaration */:
                     return bindBlockScopedDeclaration(node, 64 /* Interface */, 788872 /* InterfaceExcludes */);
-                case 255 /* TypeAliasDeclaration */:
+                case 257 /* TypeAliasDeclaration */:
                     return bindBlockScopedDeclaration(node, 524288 /* TypeAlias */, 788968 /* TypeAliasExcludes */);
-                case 256 /* EnumDeclaration */:
+                case 258 /* EnumDeclaration */:
                     return bindEnumDeclaration(node);
-                case 257 /* ModuleDeclaration */:
+                case 259 /* ModuleDeclaration */:
                     return bindModuleDeclaration(node);
                 // Jsx-attributes
-                case 282 /* JsxAttributes */:
+                case 284 /* JsxAttributes */:
                     return bindJsxAttributes(node);
-                case 281 /* JsxAttribute */:
+                case 283 /* JsxAttribute */:
                     return bindJsxAttribute(node, 4 /* Property */, 0 /* PropertyExcludes */);
                 // Imports and exports
-                case 261 /* ImportEqualsDeclaration */:
-                case 264 /* NamespaceImport */:
-                case 266 /* ImportSpecifier */:
-                case 271 /* ExportSpecifier */:
+                case 263 /* ImportEqualsDeclaration */:
+                case 266 /* NamespaceImport */:
+                case 268 /* ImportSpecifier */:
+                case 273 /* ExportSpecifier */:
                     return declareSymbolAndAddToSymbolTable(node, 2097152 /* Alias */, 2097152 /* AliasExcludes */);
-                case 260 /* NamespaceExportDeclaration */:
+                case 262 /* NamespaceExportDeclaration */:
                     return bindNamespaceExportDeclaration(node);
-                case 263 /* ImportClause */:
+                case 265 /* ImportClause */:
                     return bindImportClause(node);
-                case 268 /* ExportDeclaration */:
+                case 270 /* ExportDeclaration */:
                     return bindExportDeclaration(node);
-                case 267 /* ExportAssignment */:
+                case 269 /* ExportAssignment */:
                     return bindExportAssignment(node);
-                case 298 /* SourceFile */:
+                case 300 /* SourceFile */:
                     updateStrictModeStatementList(node.statements);
                     return bindSourceFileIfExternalModule();
-                case 231 /* Block */:
-                    if (!ts.isFunctionLike(node.parent)) {
+                case 233 /* Block */:
+                    if (!ts.isFunctionLikeOrClassStaticBlockDeclaration(node.parent)) {
                         return;
                     }
                 // falls through
-                case 258 /* ModuleBlock */:
+                case 260 /* ModuleBlock */:
                     return updateStrictModeStatementList(node.statements);
-                case 330 /* JSDocParameterTag */:
-                    if (node.parent.kind === 315 /* JSDocSignature */) {
+                case 335 /* JSDocParameterTag */:
+                    if (node.parent.kind === 318 /* JSDocSignature */) {
                         return bindParameter(node);
                     }
-                    if (node.parent.kind !== 314 /* JSDocTypeLiteral */) {
+                    if (node.parent.kind !== 317 /* JSDocTypeLiteral */) {
                         break;
                     }
                 // falls through
-                case 337 /* JSDocPropertyTag */:
+                case 342 /* JSDocPropertyTag */:
                     var propTag = node;
-                    var flags = propTag.isBracketed || propTag.typeExpression && propTag.typeExpression.type.kind === 308 /* JSDocOptionalType */ ?
+                    var flags = propTag.isBracketed || propTag.typeExpression && propTag.typeExpression.type.kind === 311 /* JSDocOptionalType */ ?
                         4 /* Property */ | 16777216 /* Optional */ :
                         4 /* Property */;
                     return declareSymbolAndAddToSymbolTable(propTag, flags, 0 /* PropertyExcludes */);
-                case 335 /* JSDocTypedefTag */:
-                case 328 /* JSDocCallbackTag */:
-                case 329 /* JSDocEnumTag */:
+                case 340 /* JSDocTypedefTag */:
+                case 333 /* JSDocCallbackTag */:
+                case 334 /* JSDocEnumTag */:
                     return (delayedTypeAliases || (delayedTypeAliases = [])).push(node);
             }
         }
@@ -43860,11 +44845,11 @@
             }
             var thisContainer = ts.getThisContainer(node, /*includeArrowFunctions*/ false);
             switch (thisContainer.kind) {
-                case 252 /* FunctionDeclaration */:
-                case 209 /* FunctionExpression */:
+                case 254 /* FunctionDeclaration */:
+                case 211 /* FunctionExpression */:
                     var constructorSymbol = thisContainer.symbol;
                     // For `f.prototype.m = function() { this.x = 0; }`, `this.x = 0` should modify `f`'s members, not the function expression.
-                    if (ts.isBinaryExpression(thisContainer.parent) && thisContainer.parent.operatorToken.kind === 62 /* EqualsToken */) {
+                    if (ts.isBinaryExpression(thisContainer.parent) && thisContainer.parent.operatorToken.kind === 63 /* EqualsToken */) {
                         var l = thisContainer.parent.left;
                         if (ts.isBindableStaticAccessExpression(l) && ts.isPrototypeAccess(l.expression)) {
                             constructorSymbol = lookupSymbolForPropertyAccess(l.expression.expression, thisParentContainer);
@@ -43875,7 +44860,7 @@
                         constructorSymbol.members = constructorSymbol.members || ts.createSymbolTable();
                         // It's acceptable for multiple 'this' assignments of the same identifier to occur
                         if (ts.hasDynamicName(node)) {
-                            bindDynamicallyNamedThisPropertyAssignment(node, constructorSymbol);
+                            bindDynamicallyNamedThisPropertyAssignment(node, constructorSymbol, constructorSymbol.members);
                         }
                         else {
                             declareSymbol(constructorSymbol.members, constructorSymbol, node, 4 /* Property */ | 67108864 /* Assignment */, 0 /* PropertyExcludes */ & ~4 /* Property */);
@@ -43883,23 +44868,23 @@
                         addDeclarationToSymbol(constructorSymbol, constructorSymbol.valueDeclaration, 32 /* Class */);
                     }
                     break;
-                case 167 /* Constructor */:
-                case 164 /* PropertyDeclaration */:
-                case 166 /* MethodDeclaration */:
-                case 168 /* GetAccessor */:
-                case 169 /* SetAccessor */:
+                case 169 /* Constructor */:
+                case 165 /* PropertyDeclaration */:
+                case 167 /* MethodDeclaration */:
+                case 170 /* GetAccessor */:
+                case 171 /* SetAccessor */:
                     // this.foo assignment in a JavaScript class
                     // Bind this property to the containing class
                     var containingClass = thisContainer.parent;
-                    var symbolTable = ts.hasSyntacticModifier(thisContainer, 32 /* Static */) ? containingClass.symbol.exports : containingClass.symbol.members;
+                    var symbolTable = ts.isStatic(thisContainer) ? containingClass.symbol.exports : containingClass.symbol.members;
                     if (ts.hasDynamicName(node)) {
-                        bindDynamicallyNamedThisPropertyAssignment(node, containingClass.symbol);
+                        bindDynamicallyNamedThisPropertyAssignment(node, containingClass.symbol, symbolTable);
                     }
                     else {
                         declareSymbol(symbolTable, containingClass.symbol, node, 4 /* Property */ | 67108864 /* Assignment */, 0 /* None */, /*isReplaceableByMethod*/ true);
                     }
                     break;
-                case 298 /* SourceFile */:
+                case 300 /* SourceFile */:
                     // this.property = assignment in a source file -- declare symbol in exports for a module, in locals for a script
                     if (ts.hasDynamicName(node)) {
                         break;
@@ -43915,8 +44900,8 @@
                     ts.Debug.failBadSyntaxKind(thisContainer);
             }
         }
-        function bindDynamicallyNamedThisPropertyAssignment(node, symbol) {
-            bindAnonymousDeclaration(node, 4 /* Property */, "__computed" /* Computed */);
+        function bindDynamicallyNamedThisPropertyAssignment(node, symbol, symbolTable) {
+            declareSymbol(symbolTable, symbol, node, 4 /* Property */, 0 /* None */, /*isReplaceableByMethod*/ true, /*isComputedName*/ true);
             addLateBoundAssignmentDeclarationToSymbol(node, symbol);
         }
         function addLateBoundAssignmentDeclarationToSymbol(node, symbol) {
@@ -43925,10 +44910,10 @@
             }
         }
         function bindSpecialPropertyDeclaration(node) {
-            if (node.expression.kind === 107 /* ThisKeyword */) {
+            if (node.expression.kind === 108 /* ThisKeyword */) {
                 bindThisPropertyAssignment(node);
             }
-            else if (ts.isBindableStaticAccessExpression(node) && node.parent.parent.kind === 298 /* SourceFile */) {
+            else if (ts.isBindableStaticAccessExpression(node) && node.parent.parent.kind === 300 /* SourceFile */) {
                 if (ts.isPrototypeAccess(node.expression)) {
                     bindPrototypePropertyAssignment(node, node.parent);
                 }
@@ -43968,7 +44953,7 @@
         }
         function bindObjectDefinePropertyAssignment(node) {
             var namespaceSymbol = lookupSymbolForPropertyAccess(node.arguments[0]);
-            var isToplevel = node.parent.parent.kind === 298 /* SourceFile */;
+            var isToplevel = node.parent.parent.kind === 300 /* SourceFile */;
             namespaceSymbol = bindPotentiallyMissingNamespaces(namespaceSymbol, node.arguments[0], isToplevel, /*isPrototypeProperty*/ false, /*containerIsClass*/ false);
             bindPotentiallyNewExpandoMemberToNamespace(node, namespaceSymbol, /*isPrototypeProperty*/ false);
         }
@@ -44077,8 +45062,8 @@
         }
         function isTopLevelNamespaceAssignment(propertyAccess) {
             return ts.isBinaryExpression(propertyAccess.parent)
-                ? getParentOfBinaryExpression(propertyAccess.parent).parent.kind === 298 /* SourceFile */
-                : propertyAccess.parent.parent.kind === 298 /* SourceFile */;
+                ? getParentOfBinaryExpression(propertyAccess.parent).parent.kind === 300 /* SourceFile */
+                : propertyAccess.parent.parent.kind === 300 /* SourceFile */;
         }
         function bindPropertyAssignment(name, propertyAccess, isPrototypeProperty, containerIsClass) {
             var namespaceSymbol = lookupSymbolForPropertyAccess(name, container) || lookupSymbolForPropertyAccess(name, blockScopeContainer);
@@ -44157,7 +45142,7 @@
             }
         }
         function bindClassLikeDeclaration(node) {
-            if (node.kind === 253 /* ClassDeclaration */) {
+            if (node.kind === 255 /* ClassDeclaration */) {
                 bindBlockScopedDeclaration(node, 32 /* Class */, 899503 /* ClassExcludes */);
             }
             else {
@@ -44223,7 +45208,7 @@
             }
         }
         function bindParameter(node) {
-            if (node.kind === 330 /* JSDocParameterTag */ && container.kind !== 315 /* JSDocSignature */) {
+            if (node.kind === 335 /* JSDocParameterTag */ && container.kind !== 318 /* JSDocSignature */) {
                 return;
             }
             if (inStrictMode && !(node.flags & 8388608 /* Ambient */)) {
@@ -44300,7 +45285,7 @@
                     declareSymbolAndAddToSymbolTable(node, 262144 /* TypeParameter */, 526824 /* TypeParameterExcludes */);
                 }
             }
-            else if (node.parent.kind === 186 /* InferType */) {
+            else if (node.parent.kind === 188 /* InferType */) {
                 var container_2 = getInferTypeContainer(node.parent);
                 if (container_2) {
                     if (!container_2.locals) {
@@ -44328,11 +45313,11 @@
             if (currentFlow === unreachableFlow) {
                 var reportError = 
                 // report error on all statements except empty ones
-                (ts.isStatementButNotDeclaration(node) && node.kind !== 232 /* EmptyStatement */) ||
+                (ts.isStatementButNotDeclaration(node) && node.kind !== 234 /* EmptyStatement */) ||
                     // report error on class declarations
-                    node.kind === 253 /* ClassDeclaration */ ||
+                    node.kind === 255 /* ClassDeclaration */ ||
                     // report error on instantiated modules or const-enums only modules if preserveConstEnums is set
-                    (node.kind === 257 /* ModuleDeclaration */ && shouldReportErrorOnModuleDeclaration(node));
+                    (node.kind === 259 /* ModuleDeclaration */ && shouldReportErrorOnModuleDeclaration(node));
                 if (reportError) {
                     currentFlow = reportedUnreachableFlow;
                     if (!options.allowUnreachableCode) {
@@ -44376,12 +45361,12 @@
     }
     function isPurelyTypeDeclaration(s) {
         switch (s.kind) {
-            case 254 /* InterfaceDeclaration */:
-            case 255 /* TypeAliasDeclaration */:
+            case 256 /* InterfaceDeclaration */:
+            case 257 /* TypeAliasDeclaration */:
                 return true;
-            case 257 /* ModuleDeclaration */:
+            case 259 /* ModuleDeclaration */:
                 return getModuleInstanceState(s) !== 1 /* Instantiated */;
-            case 256 /* EnumDeclaration */:
+            case 258 /* EnumDeclaration */:
                 return ts.hasSyntacticModifier(s, 2048 /* Const */);
             default:
                 return false;
@@ -44425,7 +45410,7 @@
 /** @internal */
 var ts;
 (function (ts) {
-    function createGetSymbolWalker(getRestTypeOfSignature, getTypePredicateOfSignature, getReturnTypeOfSignature, getBaseTypes, resolveStructuredTypeMembers, getTypeOfSymbol, getResolvedSymbol, getIndexTypeOfStructuredType, getConstraintOfTypeParameter, getFirstIdentifier, getTypeArguments) {
+    function createGetSymbolWalker(getRestTypeOfSignature, getTypePredicateOfSignature, getReturnTypeOfSignature, getBaseTypes, resolveStructuredTypeMembers, getTypeOfSymbol, getResolvedSymbol, getConstraintOfTypeParameter, getFirstIdentifier, getTypeArguments) {
         return getSymbolWalker;
         function getSymbolWalker(accept) {
             if (accept === void 0) { accept = function () { return true; }; }
@@ -44540,22 +45525,22 @@
                 visitType(interfaceT.thisType);
             }
             function visitObjectType(type) {
-                var stringIndexType = getIndexTypeOfStructuredType(type, 0 /* String */);
-                visitType(stringIndexType);
-                var numberIndexType = getIndexTypeOfStructuredType(type, 1 /* Number */);
-                visitType(numberIndexType);
-                // The two checks above *should* have already resolved the type (if needed), so this should be cached
                 var resolved = resolveStructuredTypeMembers(type);
-                for (var _i = 0, _a = resolved.callSignatures; _i < _a.length; _i++) {
-                    var signature = _a[_i];
-                    visitSignature(signature);
+                for (var _i = 0, _a = resolved.indexInfos; _i < _a.length; _i++) {
+                    var info = _a[_i];
+                    visitType(info.keyType);
+                    visitType(info.type);
                 }
-                for (var _b = 0, _c = resolved.constructSignatures; _b < _c.length; _b++) {
+                for (var _b = 0, _c = resolved.callSignatures; _b < _c.length; _b++) {
                     var signature = _c[_b];
                     visitSignature(signature);
                 }
-                for (var _d = 0, _e = resolved.properties; _d < _e.length; _d++) {
-                    var p = _e[_d];
+                for (var _d = 0, _e = resolved.constructSignatures; _d < _e.length; _d++) {
+                    var signature = _e[_d];
+                    visitSignature(signature);
+                }
+                for (var _f = 0, _g = resolved.properties; _f < _g.length; _f++) {
+                    var p = _g[_f];
                     visitSymbol(p);
                 }
             }
@@ -44581,7 +45566,7 @@
                     //  (their type resolved directly to the member deeply referenced)
                     // So to get the intervening symbols, we need to check if there's a type
                     // query node on any of the symbol's declarations and get symbols there
-                    if (d.type && d.type.kind === 177 /* TypeQuery */) {
+                    if (d.type && d.type.kind === 179 /* TypeQuery */) {
                         var query = d.type;
                         var entity = getResolvedSymbol(getFirstIdentifier(query.exprName));
                         visitSymbol(entity);
@@ -44751,15 +45736,6 @@
         CheckMode[CheckMode["SkipGenericFunctions"] = 8] = "SkipGenericFunctions";
         CheckMode[CheckMode["IsForSignatureHelp"] = 16] = "IsForSignatureHelp";
     })(CheckMode || (CheckMode = {}));
-    var AccessFlags;
-    (function (AccessFlags) {
-        AccessFlags[AccessFlags["None"] = 0] = "None";
-        AccessFlags[AccessFlags["NoIndexSignatures"] = 1] = "NoIndexSignatures";
-        AccessFlags[AccessFlags["Writing"] = 2] = "Writing";
-        AccessFlags[AccessFlags["CacheSymbol"] = 4] = "CacheSymbol";
-        AccessFlags[AccessFlags["NoTupleBoundsCheck"] = 8] = "NoTupleBoundsCheck";
-        AccessFlags[AccessFlags["ExpressionPosition"] = 16] = "ExpressionPosition";
-    })(AccessFlags || (AccessFlags = {}));
     var SignatureCheckMode;
     (function (SignatureCheckMode) {
         SignatureCheckMode[SignatureCheckMode["BivariantCallback"] = 1] = "BivariantCallback";
@@ -44913,8 +45889,10 @@
         var strictPropertyInitialization = ts.getStrictOptionValue(compilerOptions, "strictPropertyInitialization");
         var noImplicitAny = ts.getStrictOptionValue(compilerOptions, "noImplicitAny");
         var noImplicitThis = ts.getStrictOptionValue(compilerOptions, "noImplicitThis");
+        var useUnknownInCatchVariables = ts.getStrictOptionValue(compilerOptions, "useUnknownInCatchVariables");
         var keyofStringsOnly = !!compilerOptions.keyofStringsOnly;
         var freshObjectLiteralFlag = compilerOptions.suppressExcessPropertyErrors ? 0 : 16384 /* FreshLiteral */;
+        var exactOptionalPropertyTypes = compilerOptions.exactOptionalPropertyTypes;
         var checkBinaryExpression = createCheckBinaryExpression();
         var emitResolver = createResolver();
         var nodeBuilder = createNodeBuilder();
@@ -44953,6 +45931,7 @@
             getDiagnostics: getDiagnostics,
             getGlobalDiagnostics: getGlobalDiagnostics,
             getRecursionIdentity: getRecursionIdentity,
+            getUnmatchedProperties: getUnmatchedProperties,
             getTypeOfSymbolAtLocation: function (symbol, locationIn) {
                 var location = ts.getParseTreeNode(locationIn);
                 return location ? getTypeOfSymbolAtLocation(symbol, location) : errorType;
@@ -44976,9 +45955,10 @@
                 return lexicallyScopedIdentifier ? getPrivateIdentifierPropertyOfType(leftType, lexicallyScopedIdentifier) : undefined;
             },
             getTypeOfPropertyOfType: function (type, name) { return getTypeOfPropertyOfType(type, ts.escapeLeadingUnderscores(name)); },
-            getIndexInfoOfType: getIndexInfoOfType,
+            getIndexInfoOfType: function (type, kind) { return getIndexInfoOfType(type, kind === 0 /* String */ ? stringType : numberType); },
+            getIndexInfosOfType: getIndexInfosOfType,
             getSignaturesOfType: getSignaturesOfType,
-            getIndexTypeOfType: getIndexTypeOfType,
+            getIndexTypeOfType: function (type, kind) { return getIndexTypeOfType(type, kind === 0 /* String */ ? stringType : numberType); },
             getBaseTypes: getBaseTypes,
             getBaseTypeOfLiteralType: getBaseTypeOfLiteralType,
             getWidenedType: getWidenedType,
@@ -44987,6 +45967,7 @@
                 return node ? getTypeFromTypeNode(node) : errorType;
             },
             getParameterType: getTypeAtPosition,
+            getParameterIdentifierNameAtPosition: getParameterIdentifierNameAtPosition,
             getPromisedTypeOfPromise: getPromisedTypeOfPromise,
             getAwaitedType: function (type) { return getAwaitedType(type); },
             getReturnTypeOfSignature: getReturnTypeOfSignature,
@@ -45012,6 +45993,10 @@
                 // set ignoreErrors: true because any lookups invoked by the API shouldn't cause any new errors
                 return node ? getSymbolAtLocation(node, /*ignoreErrors*/ true) : undefined;
             },
+            getIndexInfosAtLocation: function (nodeIn) {
+                var node = ts.getParseTreeNode(nodeIn);
+                return node ? getIndexInfosAtLocation(node) : undefined;
+            },
             getShorthandAssignmentValueSymbol: function (nodeIn) {
                 var node = ts.getParseTreeNode(nodeIn);
                 return node ? getShorthandAssignmentValueSymbol(node) : undefined;
@@ -45111,6 +46096,7 @@
             },
             getExpandedParameters: getExpandedParameters,
             hasEffectiveRestParameter: hasEffectiveRestParameter,
+            containsArgumentsReference: containsArgumentsReference,
             getConstantValue: function (nodeIn) {
                 var node = ts.getParseTreeNode(nodeIn, canHaveConstantValue);
                 return node ? getConstantValue(node) : undefined;
@@ -45136,7 +46122,8 @@
             getEmitResolver: getEmitResolver,
             getExportsOfModule: getExportsOfModuleAsArray,
             getExportsAndPropertiesOfModule: getExportsAndPropertiesOfModule,
-            getSymbolWalker: ts.createGetSymbolWalker(getRestTypeOfSignature, getTypePredicateOfSignature, getReturnTypeOfSignature, getBaseTypes, resolveStructuredTypeMembers, getTypeOfSymbol, getResolvedSymbol, getIndexTypeOfStructuredType, getConstraintOfTypeParameter, ts.getFirstIdentifier, getTypeArguments),
+            forEachExportAndPropertyOfModule: forEachExportAndPropertyOfModule,
+            getSymbolWalker: ts.createGetSymbolWalker(getRestTypeOfSignature, getTypePredicateOfSignature, getReturnTypeOfSignature, getBaseTypes, resolveStructuredTypeMembers, getTypeOfSymbol, getResolvedSymbol, getConstraintOfTypeParameter, ts.getFirstIdentifier, getTypeArguments),
             getAmbientModules: getAmbientModules,
             getJsxIntrinsicTagNamesAt: getJsxIntrinsicTagNamesAt,
             isOptionalParameter: function (nodeIn) {
@@ -45186,6 +46173,7 @@
             getSuggestionForNonexistentSymbol: function (location, name, meaning) { return getSuggestionForNonexistentSymbol(location, ts.escapeLeadingUnderscores(name), meaning); },
             getSuggestedSymbolForNonexistentModule: getSuggestedSymbolForNonexistentModule,
             getSuggestionForNonexistentExport: getSuggestionForNonexistentExport,
+            getSuggestedSymbolForNonexistentClassMember: getSuggestedSymbolForNonexistentClassMember,
             getBaseConstraintOfType: getBaseConstraintOfType,
             getDefaultFromTypeParameter: function (type) { return type && type.flags & 262144 /* TypeParameter */ ? getDefaultFromTypeParameter(type) : undefined; },
             resolveName: function (name, location, meaning, excludeGlobals) {
@@ -45259,7 +46247,10 @@
         var tupleTypes = new ts.Map();
         var unionTypes = new ts.Map();
         var intersectionTypes = new ts.Map();
-        var literalTypes = new ts.Map();
+        var stringLiteralTypes = new ts.Map();
+        var numberLiteralTypes = new ts.Map();
+        var bigIntLiteralTypes = new ts.Map();
+        var enumLiteralTypes = new ts.Map();
         var indexedAccessTypes = new ts.Map();
         var templateLiteralTypes = new ts.Map();
         var stringMappingTypes = new ts.Map();
@@ -45279,6 +46270,7 @@
         var undefinedType = createIntrinsicType(32768 /* Undefined */, "undefined");
         var undefinedWideningType = strictNullChecks ? undefinedType : createIntrinsicType(32768 /* Undefined */, "undefined", 131072 /* ContainsWideningType */);
         var optionalType = createIntrinsicType(32768 /* Undefined */, "undefined");
+        var missingType = exactOptionalPropertyTypes ? createIntrinsicType(32768 /* Undefined */, "undefined") : undefinedType;
         var nullType = createIntrinsicType(65536 /* Null */, "null");
         var nullWideningType = strictNullChecks ? nullType : createIntrinsicType(65536 /* Null */, "null", 131072 /* ContainsWideningType */);
         var stringType = createIntrinsicType(4 /* String */, "string");
@@ -45296,12 +46288,7 @@
         falseType.freshType = falseType;
         regularFalseType.regularType = regularFalseType;
         regularFalseType.freshType = falseType;
-        var booleanType = createBooleanType([regularFalseType, regularTrueType]);
-        // Also mark all combinations of fresh/regular booleans as "Boolean" so they print as `boolean` instead of `true | false`
-        // (The union is cached, so simply doing the marking here is sufficient)
-        createBooleanType([regularFalseType, trueType]);
-        createBooleanType([falseType, regularTrueType]);
-        createBooleanType([falseType, trueType]);
+        var booleanType = getUnionType([regularFalseType, regularTrueType]);
         var esSymbolType = createIntrinsicType(4096 /* ESSymbol */, "symbol");
         var voidType = createIntrinsicType(16384 /* Void */, "void");
         var neverType = createIntrinsicType(131072 /* Never */, "never");
@@ -45310,27 +46297,28 @@
         var implicitNeverType = createIntrinsicType(131072 /* Never */, "never");
         var unreachableNeverType = createIntrinsicType(131072 /* Never */, "never");
         var nonPrimitiveType = createIntrinsicType(67108864 /* NonPrimitive */, "object");
+        var stringOrNumberType = getUnionType([stringType, numberType]);
         var stringNumberSymbolType = getUnionType([stringType, numberType, esSymbolType]);
         var keyofConstraintType = keyofStringsOnly ? stringType : stringNumberSymbolType;
         var numberOrBigIntType = getUnionType([numberType, bigintType]);
         var templateConstraintType = getUnionType([stringType, numberType, booleanType, bigintType, nullType, undefinedType]);
         var restrictiveMapper = makeFunctionTypeMapper(function (t) { return t.flags & 262144 /* TypeParameter */ ? getRestrictiveTypeParameter(t) : t; });
         var permissiveMapper = makeFunctionTypeMapper(function (t) { return t.flags & 262144 /* TypeParameter */ ? wildcardType : t; });
-        var emptyObjectType = createAnonymousType(undefined, emptySymbols, ts.emptyArray, ts.emptyArray, undefined, undefined);
-        var emptyJsxObjectType = createAnonymousType(undefined, emptySymbols, ts.emptyArray, ts.emptyArray, undefined, undefined);
+        var emptyObjectType = createAnonymousType(undefined, emptySymbols, ts.emptyArray, ts.emptyArray, ts.emptyArray);
+        var emptyJsxObjectType = createAnonymousType(undefined, emptySymbols, ts.emptyArray, ts.emptyArray, ts.emptyArray);
         emptyJsxObjectType.objectFlags |= 2048 /* JsxAttributes */;
         var emptyTypeLiteralSymbol = createSymbol(2048 /* TypeLiteral */, "__type" /* Type */);
         emptyTypeLiteralSymbol.members = ts.createSymbolTable();
-        var emptyTypeLiteralType = createAnonymousType(emptyTypeLiteralSymbol, emptySymbols, ts.emptyArray, ts.emptyArray, undefined, undefined);
-        var emptyGenericType = createAnonymousType(undefined, emptySymbols, ts.emptyArray, ts.emptyArray, undefined, undefined);
+        var emptyTypeLiteralType = createAnonymousType(emptyTypeLiteralSymbol, emptySymbols, ts.emptyArray, ts.emptyArray, ts.emptyArray);
+        var emptyGenericType = createAnonymousType(undefined, emptySymbols, ts.emptyArray, ts.emptyArray, ts.emptyArray);
         emptyGenericType.instantiations = new ts.Map();
-        var anyFunctionType = createAnonymousType(undefined, emptySymbols, ts.emptyArray, ts.emptyArray, undefined, undefined);
+        var anyFunctionType = createAnonymousType(undefined, emptySymbols, ts.emptyArray, ts.emptyArray, ts.emptyArray);
         // The anyFunctionType contains the anyFunctionType by definition. The flag is further propagated
         // in getPropagatingFlagsOfTypes, and it is checked in inferFromTypes.
         anyFunctionType.objectFlags |= 524288 /* NonInferrableType */;
-        var noConstraintType = createAnonymousType(undefined, emptySymbols, ts.emptyArray, ts.emptyArray, undefined, undefined);
-        var circularConstraintType = createAnonymousType(undefined, emptySymbols, ts.emptyArray, ts.emptyArray, undefined, undefined);
-        var resolvingDefaultType = createAnonymousType(undefined, emptySymbols, ts.emptyArray, ts.emptyArray, undefined, undefined);
+        var noConstraintType = createAnonymousType(undefined, emptySymbols, ts.emptyArray, ts.emptyArray, ts.emptyArray);
+        var circularConstraintType = createAnonymousType(undefined, emptySymbols, ts.emptyArray, ts.emptyArray, ts.emptyArray);
+        var resolvingDefaultType = createAnonymousType(undefined, emptySymbols, ts.emptyArray, ts.emptyArray, ts.emptyArray);
         var markerSuperType = createTypeParameter();
         var markerSubType = createTypeParameter();
         markerSubType.constraint = markerSuperType;
@@ -45340,7 +46328,7 @@
         var unknownSignature = createSignature(undefined, undefined, undefined, ts.emptyArray, errorType, /*resolvedTypePredicate*/ undefined, 0, 0 /* None */);
         var resolvingSignature = createSignature(undefined, undefined, undefined, ts.emptyArray, anyType, /*resolvedTypePredicate*/ undefined, 0, 0 /* None */);
         var silentNeverSignature = createSignature(undefined, undefined, undefined, ts.emptyArray, silentNeverType, /*resolvedTypePredicate*/ undefined, 0, 0 /* None */);
-        var enumNumberIndexInfo = createIndexInfo(stringType, /*isReadonly*/ true);
+        var enumNumberIndexInfo = createIndexInfo(numberType, stringType, /*isReadonly*/ true);
         var iterationTypesCache = new ts.Map(); // cache for common IterationTypes instances
         var noIterationTypes = {
             get yieldType() { return ts.Debug.fail("Not supported"); },
@@ -45426,6 +46414,7 @@
         var deferredGlobalAsyncGeneratorType;
         var deferredGlobalTemplateStringsArrayType;
         var deferredGlobalImportMetaType;
+        var deferredGlobalImportMetaExpressionType;
         var deferredGlobalExtractSymbol;
         var deferredGlobalOmitSymbol;
         var deferredGlobalBigIntType;
@@ -45438,9 +46427,9 @@
         var lastFlowNode;
         var lastFlowNodeReachable;
         var flowTypeCache;
-        var emptyStringType = getLiteralType("");
-        var zeroType = getLiteralType(0);
-        var zeroBigIntType = getLiteralType({ negative: false, base10Value: "0" });
+        var emptyStringType = getStringLiteralType("");
+        var zeroType = getNumberLiteralType(0);
+        var zeroBigIntType = getBigIntLiteralType({ negative: false, base10Value: "0" });
         var resolutionTargets = [];
         var resolutionResults = [];
         var resolutionPropertyNames = [];
@@ -45460,6 +46449,7 @@
         var potentialThisCollisions = [];
         var potentialNewTargetCollisions = [];
         var potentialWeakMapSetCollisions = [];
+        var potentialReflectCollisions = [];
         var awaitedTypeStack = [];
         var diagnostics = ts.createDiagnosticCollection();
         var suggestionDiagnostics = ts.createDiagnosticCollection();
@@ -45570,10 +46560,13 @@
             diagnostic.skippedOn = key;
             return diagnostic;
         }
-        function error(location, message, arg0, arg1, arg2, arg3) {
-            var diagnostic = location
+        function createError(location, message, arg0, arg1, arg2, arg3) {
+            return location
                 ? ts.createDiagnosticForNode(location, message, arg0, arg1, arg2, arg3)
                 : ts.createCompilerDiagnostic(message, arg0, arg1, arg2, arg3);
+        }
+        function error(location, message, arg0, arg1, arg2, arg3) {
+            var diagnostic = createError(location, message, arg0, arg1, arg2, arg3);
             diagnostics.add(diagnostic);
             return diagnostic;
         }
@@ -45627,7 +46620,7 @@
         }
         function createSymbol(flags, name, checkFlags) {
             symbolCount++;
-            var symbol = (new Symbol(flags | 33554432 /* Transient */, name));
+            var symbol = new Symbol(flags | 33554432 /* Transient */, name);
             symbol.checkFlags = checkFlags || 0;
             return symbol;
         }
@@ -45906,7 +46899,7 @@
             return nodeLinks[nodeId] || (nodeLinks[nodeId] = new NodeLinks());
         }
         function isGlobalSourceFile(node) {
-            return node.kind === 298 /* SourceFile */ && !ts.isExternalOrCommonJsModule(node);
+            return node.kind === 300 /* SourceFile */ && !ts.isExternalOrCommonJsModule(node);
         }
         function getSymbol(symbols, name, meaning) {
             if (meaning) {
@@ -45965,17 +46958,17 @@
             }
             if (declaration.pos <= usage.pos && !(ts.isPropertyDeclaration(declaration) && ts.isThisProperty(usage.parent) && !declaration.initializer && !declaration.exclamationToken)) {
                 // declaration is before usage
-                if (declaration.kind === 199 /* BindingElement */) {
+                if (declaration.kind === 201 /* BindingElement */) {
                     // still might be illegal if declaration and usage are both binding elements (eg var [a = b, b = b] = [1, 2])
-                    var errorBindingElement = ts.getAncestor(usage, 199 /* BindingElement */);
+                    var errorBindingElement = ts.getAncestor(usage, 201 /* BindingElement */);
                     if (errorBindingElement) {
                         return ts.findAncestor(errorBindingElement, ts.isBindingElement) !== ts.findAncestor(declaration, ts.isBindingElement) ||
                             declaration.pos < errorBindingElement.pos;
                     }
                     // or it might be illegal if usage happens before parent variable is declared (eg var [a] = a)
-                    return isBlockScopedNameDeclaredBeforeUse(ts.getAncestor(declaration, 250 /* VariableDeclaration */), usage);
+                    return isBlockScopedNameDeclaredBeforeUse(ts.getAncestor(declaration, 252 /* VariableDeclaration */), usage);
                 }
-                else if (declaration.kind === 250 /* VariableDeclaration */) {
+                else if (declaration.kind === 252 /* VariableDeclaration */) {
                     // still might be illegal if usage is in the initializer of the variable declaration (eg var a = a)
                     return !isImmediatelyUsedInInitializerOfBlockScopedVariable(declaration, usage);
                 }
@@ -46005,12 +46998,12 @@
             // or if usage is in a type context:
             // 1. inside a type query (typeof in type position)
             // 2. inside a jsdoc comment
-            if (usage.parent.kind === 271 /* ExportSpecifier */ || (usage.parent.kind === 267 /* ExportAssignment */ && usage.parent.isExportEquals)) {
+            if (usage.parent.kind === 273 /* ExportSpecifier */ || (usage.parent.kind === 269 /* ExportAssignment */ && usage.parent.isExportEquals)) {
                 // export specifiers do not use the variable, they only make it available for use
                 return true;
             }
             // When resolving symbols for exports, the `usage` location passed in can be the export site directly
-            if (usage.kind === 267 /* ExportAssignment */ && usage.isExportEquals) {
+            if (usage.kind === 269 /* ExportAssignment */ && usage.isExportEquals) {
                 return true;
             }
             if (!!(usage.flags & 4194304 /* JSDoc */) || isInTypeQuery(usage) || usageInTypeDeclaration()) {
@@ -46032,9 +47025,9 @@
             }
             function isImmediatelyUsedInInitializerOfBlockScopedVariable(declaration, usage) {
                 switch (declaration.parent.parent.kind) {
-                    case 233 /* VariableStatement */:
-                    case 238 /* ForStatement */:
-                    case 240 /* ForOfStatement */:
+                    case 235 /* VariableStatement */:
+                    case 240 /* ForStatement */:
+                    case 242 /* ForOfStatement */:
                         // variable statement/for/for-of statement case,
                         // use site should not be inside variable declaration (initializer of declaration or binding element)
                         if (isSameScopeDescendentOf(usage, declaration, declContainer)) {
@@ -46054,19 +47047,33 @@
                     if (ts.isFunctionLike(current)) {
                         return true;
                     }
-                    var initializerOfProperty = current.parent &&
-                        current.parent.kind === 164 /* PropertyDeclaration */ &&
-                        current.parent.initializer === current;
-                    if (initializerOfProperty) {
-                        if (ts.hasSyntacticModifier(current.parent, 32 /* Static */)) {
-                            if (declaration.kind === 166 /* MethodDeclaration */) {
-                                return true;
+                    if (ts.isClassStaticBlockDeclaration(current)) {
+                        return declaration.pos < usage.pos;
+                    }
+                    var propertyDeclaration = ts.tryCast(current.parent, ts.isPropertyDeclaration);
+                    if (propertyDeclaration) {
+                        var initializerOfProperty = propertyDeclaration.initializer === current;
+                        if (initializerOfProperty) {
+                            if (ts.isStatic(current.parent)) {
+                                if (declaration.kind === 167 /* MethodDeclaration */) {
+                                    return true;
+                                }
+                                if (ts.isPropertyDeclaration(declaration) && ts.getContainingClass(usage) === ts.getContainingClass(declaration)) {
+                                    var propName = declaration.name;
+                                    if (ts.isIdentifier(propName) || ts.isPrivateIdentifier(propName)) {
+                                        var type = getTypeOfSymbol(getSymbolOfNode(declaration));
+                                        var staticBlocks = ts.filter(declaration.parent.members, ts.isClassStaticBlockDeclaration);
+                                        if (isPropertyInitializedInStaticBlocks(propName, type, staticBlocks, declaration.parent.pos, current.pos)) {
+                                            return true;
+                                        }
+                                    }
+                                }
                             }
-                        }
-                        else {
-                            var isDeclarationInstanceProperty = declaration.kind === 164 /* PropertyDeclaration */ && !ts.hasSyntacticModifier(declaration, 32 /* Static */);
-                            if (!isDeclarationInstanceProperty || ts.getContainingClass(usage) !== ts.getContainingClass(declaration)) {
-                                return true;
+                            else {
+                                var isDeclarationInstanceProperty = declaration.kind === 165 /* PropertyDeclaration */ && !ts.isStatic(declaration);
+                                if (!isDeclarationInstanceProperty || ts.getContainingClass(usage) !== ts.getContainingClass(declaration)) {
+                                    return true;
+                                }
                             }
                         }
                     }
@@ -46086,19 +47093,19 @@
                         return "quit";
                     }
                     switch (node.kind) {
-                        case 210 /* ArrowFunction */:
+                        case 212 /* ArrowFunction */:
                             return true;
-                        case 164 /* PropertyDeclaration */:
+                        case 165 /* PropertyDeclaration */:
                             // even when stopping at any property declaration, they need to come from the same class
                             return stopAtAnyPropertyDeclaration &&
                                 (ts.isPropertyDeclaration(declaration) && node.parent === declaration.parent
                                     || ts.isParameterPropertyDeclaration(declaration, declaration.parent) && node.parent === declaration.parent.parent)
                                 ? "quit" : true;
-                        case 231 /* Block */:
+                        case 233 /* Block */:
                             switch (node.parent.kind) {
-                                case 168 /* GetAccessor */:
-                                case 166 /* MethodDeclaration */:
-                                case 169 /* SetAccessor */:
+                                case 170 /* GetAccessor */:
+                                case 167 /* MethodDeclaration */:
+                                case 171 /* SetAccessor */:
                                     return true;
                                 default:
                                     return false;
@@ -46138,18 +47145,18 @@
             }
             function requiresScopeChangeWorker(node) {
                 switch (node.kind) {
-                    case 210 /* ArrowFunction */:
-                    case 209 /* FunctionExpression */:
-                    case 252 /* FunctionDeclaration */:
-                    case 167 /* Constructor */:
+                    case 212 /* ArrowFunction */:
+                    case 211 /* FunctionExpression */:
+                    case 254 /* FunctionDeclaration */:
+                    case 169 /* Constructor */:
                         // do not descend into these
                         return false;
-                    case 166 /* MethodDeclaration */:
-                    case 168 /* GetAccessor */:
-                    case 169 /* SetAccessor */:
-                    case 289 /* PropertyAssignment */:
+                    case 167 /* MethodDeclaration */:
+                    case 170 /* GetAccessor */:
+                    case 171 /* SetAccessor */:
+                    case 291 /* PropertyAssignment */:
                         return requiresScopeChangeWorker(node.name);
-                    case 164 /* PropertyDeclaration */:
+                    case 165 /* PropertyDeclaration */:
                         // static properties in classes introduce temporary variables
                         if (ts.hasStaticModifier(node)) {
                             return target < 99 /* ESNext */ || !useDefineForClassFields;
@@ -46176,11 +47183,11 @@
          *
          * @param isUse If true, this will count towards --noUnusedLocals / --noUnusedParameters.
          */
-        function resolveName(location, name, meaning, nameNotFoundMessage, nameArg, isUse, excludeGlobals, suggestedNameNotFoundMessage) {
+        function resolveName(location, name, meaning, nameNotFoundMessage, nameArg, isUse, excludeGlobals, issueSuggestions) {
             if (excludeGlobals === void 0) { excludeGlobals = false; }
-            return resolveNameHelper(location, name, meaning, nameNotFoundMessage, nameArg, isUse, excludeGlobals, getSymbol, suggestedNameNotFoundMessage);
+            return resolveNameHelper(location, name, meaning, nameNotFoundMessage, nameArg, isUse, excludeGlobals, getSymbol, issueSuggestions);
         }
-        function resolveNameHelper(location, name, meaning, nameNotFoundMessage, nameArg, isUse, excludeGlobals, lookup, suggestedNameNotFoundMessage) {
+        function resolveNameHelper(location, name, meaning, nameNotFoundMessage, nameArg, isUse, excludeGlobals, lookup, issueSuggestions) {
             var _a;
             var originalLocation = location; // needed for did-you-mean error reporting, which gathers candidates starting from the original location
             var result;
@@ -46204,12 +47211,12 @@
                             // - parameters are only in the scope of function body
                             // This restriction does not apply to JSDoc comment types because they are parented
                             // at a higher level than type parameters would normally be
-                            if (meaning & result.flags & 788968 /* Type */ && lastLocation.kind !== 312 /* JSDocComment */) {
+                            if (meaning & result.flags & 788968 /* Type */ && lastLocation.kind !== 315 /* JSDocComment */) {
                                 useResult = result.flags & 262144 /* TypeParameter */
                                     // type parameters are visible in parameter list, return type and type parameter list
                                     ? lastLocation === location.type ||
-                                        lastLocation.kind === 161 /* Parameter */ ||
-                                        lastLocation.kind === 160 /* TypeParameter */
+                                        lastLocation.kind === 162 /* Parameter */ ||
+                                        lastLocation.kind === 161 /* TypeParameter */
                                     // local types not visible outside the function body
                                     : false;
                             }
@@ -46224,13 +47231,13 @@
                                     // however it is detected separately when checking initializers of parameters
                                     // to make sure that they reference no variables declared after them.
                                     useResult =
-                                        lastLocation.kind === 161 /* Parameter */ ||
+                                        lastLocation.kind === 162 /* Parameter */ ||
                                             (lastLocation === location.type &&
                                                 !!ts.findAncestor(result.valueDeclaration, ts.isParameter));
                                 }
                             }
                         }
-                        else if (location.kind === 185 /* ConditionalType */) {
+                        else if (location.kind === 187 /* ConditionalType */) {
                             // A type parameter declared using 'infer T' in a conditional type is visible only in
                             // the true branch of the conditional type.
                             useResult = lastLocation === location.trueType;
@@ -46245,14 +47252,14 @@
                 }
                 withinDeferredContext = withinDeferredContext || getIsDeferredContext(location, lastLocation);
                 switch (location.kind) {
-                    case 298 /* SourceFile */:
+                    case 300 /* SourceFile */:
                         if (!ts.isExternalOrCommonJsModule(location))
                             break;
                         isInExternalModule = true;
                     // falls through
-                    case 257 /* ModuleDeclaration */:
+                    case 259 /* ModuleDeclaration */:
                         var moduleExports = getSymbolOfNode(location).exports || emptySymbols;
-                        if (location.kind === 298 /* SourceFile */ || (ts.isModuleDeclaration(location) && location.flags & 8388608 /* Ambient */ && !ts.isGlobalScopeAugmentation(location))) {
+                        if (location.kind === 300 /* SourceFile */ || (ts.isModuleDeclaration(location) && location.flags & 8388608 /* Ambient */ && !ts.isGlobalScopeAugmentation(location))) {
                             // It's an external module. First see if the module has an export default and if the local
                             // name of that export default matches.
                             if (result = moduleExports.get("default" /* Default */)) {
@@ -46276,7 +47283,7 @@
                             var moduleExport = moduleExports.get(name);
                             if (moduleExport &&
                                 moduleExport.flags === 2097152 /* Alias */ &&
-                                (ts.getDeclarationOfKind(moduleExport, 271 /* ExportSpecifier */) || ts.getDeclarationOfKind(moduleExport, 270 /* NamespaceExport */))) {
+                                (ts.getDeclarationOfKind(moduleExport, 273 /* ExportSpecifier */) || ts.getDeclarationOfKind(moduleExport, 272 /* NamespaceExport */))) {
                                 break;
                             }
                         }
@@ -46290,19 +47297,19 @@
                             }
                         }
                         break;
-                    case 256 /* EnumDeclaration */:
+                    case 258 /* EnumDeclaration */:
                         if (result = lookup(getSymbolOfNode(location).exports, name, meaning & 8 /* EnumMember */)) {
                             break loop;
                         }
                         break;
-                    case 164 /* PropertyDeclaration */:
+                    case 165 /* PropertyDeclaration */:
                         // TypeScript 1.0 spec (April 2014): 8.4.1
                         // Initializer expressions for instance member variables are evaluated in the scope
                         // of the class constructor body but are not permitted to reference parameters or
                         // local variables of the constructor. This effectively means that entities from outer scopes
                         // by the same name as a constructor parameter or local variable are inaccessible
                         // in initializer expressions for instance member variables.
-                        if (!ts.hasSyntacticModifier(location, 32 /* Static */)) {
+                        if (!ts.isStatic(location)) {
                             var ctor = findConstructorDeclaration(location.parent);
                             if (ctor && ctor.locals) {
                                 if (lookup(ctor.locals, name, meaning & 111551 /* Value */)) {
@@ -46312,9 +47319,9 @@
                             }
                         }
                         break;
-                    case 253 /* ClassDeclaration */:
-                    case 222 /* ClassExpression */:
-                    case 254 /* InterfaceDeclaration */:
+                    case 255 /* ClassDeclaration */:
+                    case 224 /* ClassExpression */:
+                    case 256 /* InterfaceDeclaration */:
                         // The below is used to lookup type parameters within a class or interface, as they are added to the class/interface locals
                         // These can never be latebound, so the symbol's raw members are sufficient. `getMembersOfNode` cannot be used, as it would
                         // trigger resolving late-bound names, which we may already be in the process of doing while we're here!
@@ -46324,7 +47331,7 @@
                                 result = undefined;
                                 break;
                             }
-                            if (lastLocation && ts.hasSyntacticModifier(lastLocation, 32 /* Static */)) {
+                            if (lastLocation && ts.isStatic(lastLocation)) {
                                 // TypeScript 1.0 spec (April 2014): 3.4.1
                                 // The scope of a type parameter extends over the entire declaration with which the type
                                 // parameter list is associated, with the exception of static member declarations in classes.
@@ -46333,7 +47340,7 @@
                             }
                             break loop;
                         }
-                        if (location.kind === 222 /* ClassExpression */ && meaning & 32 /* Class */) {
+                        if (location.kind === 224 /* ClassExpression */ && meaning & 32 /* Class */) {
                             var className = location.name;
                             if (className && name === className.escapedText) {
                                 result = location.symbol;
@@ -46341,9 +47348,9 @@
                             }
                         }
                         break;
-                    case 224 /* ExpressionWithTypeArguments */:
+                    case 226 /* ExpressionWithTypeArguments */:
                         // The type parameters of a class are not in scope in the base class expression.
-                        if (lastLocation === location.expression && location.parent.token === 93 /* ExtendsKeyword */) {
+                        if (lastLocation === location.expression && location.parent.token === 94 /* ExtendsKeyword */) {
                             var container = location.parent.parent;
                             if (ts.isClassLike(container) && (result = lookup(getSymbolOfNode(container).members, name, meaning & 788968 /* Type */))) {
                                 if (nameNotFoundMessage) {
@@ -46361,9 +47368,9 @@
                     //       [foo<T>()]() { } // <-- Reference to T from class's own computed property
                     //   }
                     //
-                    case 159 /* ComputedPropertyName */:
+                    case 160 /* ComputedPropertyName */:
                         grandparent = location.parent.parent;
-                        if (ts.isClassLike(grandparent) || grandparent.kind === 254 /* InterfaceDeclaration */) {
+                        if (ts.isClassLike(grandparent) || grandparent.kind === 256 /* InterfaceDeclaration */) {
                             // A reference to this grandparent's type parameters would be an error
                             if (result = lookup(getSymbolOfNode(grandparent).members, name, meaning & 788968 /* Type */)) {
                                 error(errorLocation, ts.Diagnostics.A_computed_property_name_cannot_reference_a_type_parameter_from_its_containing_type);
@@ -46371,24 +47378,24 @@
                             }
                         }
                         break;
-                    case 210 /* ArrowFunction */:
+                    case 212 /* ArrowFunction */:
                         // when targeting ES6 or higher there is no 'arguments' in an arrow function
                         // for lower compile targets the resolved symbol is used to emit an error
                         if (compilerOptions.target >= 2 /* ES2015 */) {
                             break;
                         }
                     // falls through
-                    case 166 /* MethodDeclaration */:
-                    case 167 /* Constructor */:
-                    case 168 /* GetAccessor */:
-                    case 169 /* SetAccessor */:
-                    case 252 /* FunctionDeclaration */:
+                    case 167 /* MethodDeclaration */:
+                    case 169 /* Constructor */:
+                    case 170 /* GetAccessor */:
+                    case 171 /* SetAccessor */:
+                    case 254 /* FunctionDeclaration */:
                         if (meaning & 3 /* Variable */ && name === "arguments") {
                             result = argumentsSymbol;
                             break loop;
                         }
                         break;
-                    case 209 /* FunctionExpression */:
+                    case 211 /* FunctionExpression */:
                         if (meaning & 3 /* Variable */ && name === "arguments") {
                             result = argumentsSymbol;
                             break loop;
@@ -46401,7 +47408,7 @@
                             }
                         }
                         break;
-                    case 162 /* Decorator */:
+                    case 163 /* Decorator */:
                         // Decorators are resolved at the class declaration. Resolving at the parameter
                         // or member would result in looking up locals in the method.
                         //
@@ -46410,7 +47417,7 @@
                         //       method(@y x, y) {} // <-- decorator y should be resolved at the class declaration, not the parameter.
                         //   }
                         //
-                        if (location.parent && location.parent.kind === 161 /* Parameter */) {
+                        if (location.parent && location.parent.kind === 162 /* Parameter */) {
                             location = location.parent;
                         }
                         //
@@ -46425,20 +47432,20 @@
                         //   declare function y(x: T): any;
                         //   @param(1 as T) // <-- T should resolve to the type alias outside of class C
                         //   class C<T> {}
-                        if (location.parent && (ts.isClassElement(location.parent) || location.parent.kind === 253 /* ClassDeclaration */)) {
+                        if (location.parent && (ts.isClassElement(location.parent) || location.parent.kind === 255 /* ClassDeclaration */)) {
                             location = location.parent;
                         }
                         break;
-                    case 335 /* JSDocTypedefTag */:
-                    case 328 /* JSDocCallbackTag */:
-                    case 329 /* JSDocEnumTag */:
+                    case 340 /* JSDocTypedefTag */:
+                    case 333 /* JSDocCallbackTag */:
+                    case 334 /* JSDocEnumTag */:
                         // js type aliases do not resolve names from their host, so skip past it
                         var root = ts.getJSDocRoot(location);
                         if (root) {
                             location = root.parent;
                         }
                         break;
-                    case 161 /* Parameter */:
+                    case 162 /* Parameter */:
                         if (lastLocation && (lastLocation === location.initializer ||
                             lastLocation === location.name && ts.isBindingPattern(lastLocation))) {
                             if (!associatedDeclarationForContainingInitializerOrBindingName) {
@@ -46446,7 +47453,7 @@
                             }
                         }
                         break;
-                    case 199 /* BindingElement */:
+                    case 201 /* BindingElement */:
                         if (lastLocation && (lastLocation === location.initializer ||
                             lastLocation === location.name && ts.isBindingPattern(lastLocation))) {
                             if (ts.isParameterDeclaration(location) && !associatedDeclarationForContainingInitializerOrBindingName) {
@@ -46454,7 +47461,7 @@
                             }
                         }
                         break;
-                    case 186 /* InferType */:
+                    case 188 /* InferType */:
                         if (meaning & 262144 /* TypeParameter */) {
                             var parameterName = location.typeParameter.name;
                             if (parameterName && name === parameterName.escapedText) {
@@ -46478,7 +47485,7 @@
             }
             if (!result) {
                 if (lastLocation) {
-                    ts.Debug.assert(lastLocation.kind === 298 /* SourceFile */);
+                    ts.Debug.assert(lastLocation.kind === 300 /* SourceFile */);
                     if (lastLocation.commonJsModuleIndicator && name === "exports" && meaning & lastLocation.symbol.flags) {
                         return lastLocation.symbol;
                     }
@@ -46505,15 +47512,18 @@
                             !checkAndReportErrorForUsingNamespaceModuleAsValue(errorLocation, name, meaning) &&
                             !checkAndReportErrorForUsingValueAsType(errorLocation, name, meaning)) {
                         var suggestion = void 0;
-                        if (suggestedNameNotFoundMessage && suggestionCount < maximumSuggestionCount) {
+                        if (issueSuggestions && suggestionCount < maximumSuggestionCount) {
                             suggestion = getSuggestedSymbolForNonexistentSymbol(originalLocation, name, meaning);
-                            var isGlobalScopeAugmentationDeclaration = suggestion && suggestion.valueDeclaration && ts.isAmbientModule(suggestion.valueDeclaration) && ts.isGlobalScopeAugmentation(suggestion.valueDeclaration);
+                            var isGlobalScopeAugmentationDeclaration = (suggestion === null || suggestion === void 0 ? void 0 : suggestion.valueDeclaration) && ts.isAmbientModule(suggestion.valueDeclaration) && ts.isGlobalScopeAugmentation(suggestion.valueDeclaration);
                             if (isGlobalScopeAugmentationDeclaration) {
                                 suggestion = undefined;
                             }
                             if (suggestion) {
                                 var suggestionName = symbolToString(suggestion);
-                                var diagnostic = error(errorLocation, suggestedNameNotFoundMessage, diagnosticName(nameArg), suggestionName);
+                                var isUncheckedJS = isUncheckedJSSuggestion(originalLocation, suggestion, /*excludeClasses*/ false);
+                                var message = isUncheckedJS ? ts.Diagnostics.Could_not_find_name_0_Did_you_mean_1 : ts.Diagnostics.Cannot_find_name_0_Did_you_mean_1;
+                                var diagnostic = createError(errorLocation, message, diagnosticName(nameArg), suggestionName);
+                                addErrorOrSuggestion(!isUncheckedJS, diagnostic);
                                 if (suggestion.valueDeclaration) {
                                     ts.addRelatedInfo(diagnostic, ts.createDiagnosticForNode(suggestion.valueDeclaration, ts.Diagnostics._0_is_declared_here, suggestionName));
                                 }
@@ -46607,10 +47617,10 @@
             }
         }
         function getIsDeferredContext(location, lastLocation) {
-            if (location.kind !== 210 /* ArrowFunction */ && location.kind !== 209 /* FunctionExpression */) {
+            if (location.kind !== 212 /* ArrowFunction */ && location.kind !== 211 /* FunctionExpression */) {
                 // initializers in instance property declaration of class like entities are executed in constructor and thus deferred
                 return ts.isTypeQueryNode(location) || ((ts.isFunctionLikeDeclaration(location) ||
-                    (location.kind === 164 /* PropertyDeclaration */ && !ts.hasSyntacticModifier(location, 32 /* Static */))) && (!lastLocation || lastLocation !== location.name)); // A name is evaluated within the enclosing scope - so it shouldn't count as deferred
+                    (location.kind === 165 /* PropertyDeclaration */ && !ts.isStatic(location))) && (!lastLocation || lastLocation !== location.name)); // A name is evaluated within the enclosing scope - so it shouldn't count as deferred
             }
             if (lastLocation && lastLocation === location.name) {
                 return false;
@@ -46623,12 +47633,12 @@
         }
         function isSelfReferenceLocation(node) {
             switch (node.kind) {
-                case 252 /* FunctionDeclaration */:
-                case 253 /* ClassDeclaration */:
-                case 254 /* InterfaceDeclaration */:
-                case 256 /* EnumDeclaration */:
-                case 255 /* TypeAliasDeclaration */:
-                case 257 /* ModuleDeclaration */: // For `namespace N { N; }`
+                case 254 /* FunctionDeclaration */:
+                case 255 /* ClassDeclaration */:
+                case 256 /* InterfaceDeclaration */:
+                case 258 /* EnumDeclaration */:
+                case 257 /* TypeAliasDeclaration */:
+                case 259 /* ModuleDeclaration */: // For `namespace N { N; }`
                     return true;
                 default:
                     return false;
@@ -46641,7 +47651,7 @@
             if (symbol.declarations) {
                 for (var _i = 0, _a = symbol.declarations; _i < _a.length; _i++) {
                     var decl = _a[_i];
-                    if (decl.kind === 160 /* TypeParameter */) {
+                    if (decl.kind === 161 /* TypeParameter */) {
                         var parent = ts.isJSDocTemplateTag(decl.parent) ? ts.getJSDocHost(decl.parent) : decl.parent;
                         if (parent === container) {
                             return !(ts.isJSDocTemplateTag(decl.parent) && ts.find(decl.parent.parent.tags, ts.isJSDocTypeAlias)); // TODO: GH#18217
@@ -46671,7 +47681,7 @@
                     }
                     // No static member is present.
                     // Check if we're in an instance method and look for a relevant instance member.
-                    if (location === container && !ts.hasSyntacticModifier(location, 32 /* Static */)) {
+                    if (location === container && !ts.isStatic(location)) {
                         var instanceType = getDeclaredTypeOfSymbol(classSymbol).thisType; // TODO: GH#18217
                         if (getPropertyOfType(instanceType, name)) {
                             error(errorLocation, ts.Diagnostics.Cannot_find_name_0_Did_you_mean_the_instance_member_this_0, diagnosticName(nameArg));
@@ -46697,10 +47707,10 @@
          */
         function getEntityNameForExtendingInterface(node) {
             switch (node.kind) {
-                case 78 /* Identifier */:
-                case 202 /* PropertyAccessExpression */:
+                case 79 /* Identifier */:
+                case 204 /* PropertyAccessExpression */:
                     return node.parent ? getEntityNameForExtendingInterface(node.parent) : undefined;
-                case 224 /* ExpressionWithTypeArguments */:
+                case 226 /* ExpressionWithTypeArguments */:
                     if (ts.isEntityNameExpression(node.expression)) {
                         return node.expression;
                     }
@@ -46744,7 +47754,7 @@
             return name === "any" || name === "string" || name === "number" || name === "boolean" || name === "never" || name === "unknown";
         }
         function checkAndReportErrorForExportingPrimitiveType(errorLocation, name) {
-            if (isPrimitiveTypeName(name) && errorLocation.parent.kind === 271 /* ExportSpecifier */) {
+            if (isPrimitiveTypeName(name) && errorLocation.parent.kind === 273 /* ExportSpecifier */) {
                 error(errorLocation, ts.Diagnostics.Cannot_export_0_Only_local_declarations_can_be_exported_from_a_module, name);
                 return true;
             }
@@ -46820,7 +47830,7 @@
                 return;
             }
             // Block-scoped variables cannot be used before their definition
-            var declaration = (_a = result.declarations) === null || _a === void 0 ? void 0 : _a.find(function (d) { return ts.isBlockOrCatchScoped(d) || ts.isClassLike(d) || (d.kind === 256 /* EnumDeclaration */); });
+            var declaration = (_a = result.declarations) === null || _a === void 0 ? void 0 : _a.find(function (d) { return ts.isBlockOrCatchScoped(d) || ts.isClassLike(d) || (d.kind === 258 /* EnumDeclaration */); });
             if (declaration === undefined)
                 return ts.Debug.fail("checkResolvedBlockScopedVariable could not find block-scoped declaration");
             if (!(declaration.flags & 8388608 /* Ambient */) && !isBlockScopedNameDeclaredBeforeUse(declaration, errorLocation)) {
@@ -46855,13 +47865,13 @@
         }
         function getAnyImportSyntax(node) {
             switch (node.kind) {
-                case 261 /* ImportEqualsDeclaration */:
+                case 263 /* ImportEqualsDeclaration */:
                     return node;
-                case 263 /* ImportClause */:
+                case 265 /* ImportClause */:
                     return node.parent;
-                case 264 /* NamespaceImport */:
+                case 266 /* NamespaceImport */:
                     return node.parent.parent;
-                case 266 /* ImportSpecifier */:
+                case 268 /* ImportSpecifier */:
                     return node.parent.parent.parent;
                 default:
                     return undefined;
@@ -46886,22 +47896,22 @@
          * const { x } = require ...
          */
         function isAliasSymbolDeclaration(node) {
-            return node.kind === 261 /* ImportEqualsDeclaration */
-                || node.kind === 260 /* NamespaceExportDeclaration */
-                || node.kind === 263 /* ImportClause */ && !!node.name
-                || node.kind === 264 /* NamespaceImport */
-                || node.kind === 270 /* NamespaceExport */
-                || node.kind === 266 /* ImportSpecifier */
-                || node.kind === 271 /* ExportSpecifier */
-                || node.kind === 267 /* ExportAssignment */ && ts.exportAssignmentIsAlias(node)
+            return node.kind === 263 /* ImportEqualsDeclaration */
+                || node.kind === 262 /* NamespaceExportDeclaration */
+                || node.kind === 265 /* ImportClause */ && !!node.name
+                || node.kind === 266 /* NamespaceImport */
+                || node.kind === 272 /* NamespaceExport */
+                || node.kind === 268 /* ImportSpecifier */
+                || node.kind === 273 /* ExportSpecifier */
+                || node.kind === 269 /* ExportAssignment */ && ts.exportAssignmentIsAlias(node)
                 || ts.isBinaryExpression(node) && ts.getAssignmentDeclarationKind(node) === 2 /* ModuleExports */ && ts.exportAssignmentIsAlias(node)
                 || ts.isAccessExpression(node)
                     && ts.isBinaryExpression(node.parent)
                     && node.parent.left === node
-                    && node.parent.operatorToken.kind === 62 /* EqualsToken */
+                    && node.parent.operatorToken.kind === 63 /* EqualsToken */
                     && isAliasableOrJsExpression(node.parent.right)
-                || node.kind === 290 /* ShorthandPropertyAssignment */
-                || node.kind === 289 /* PropertyAssignment */ && isAliasableOrJsExpression(node.initializer)
+                || node.kind === 292 /* ShorthandPropertyAssignment */
+                || node.kind === 291 /* PropertyAssignment */ && isAliasableOrJsExpression(node.initializer)
                 || ts.isRequireVariableDeclaration(node);
         }
         function isAliasableOrJsExpression(e) {
@@ -46915,7 +47925,7 @@
                     ? resolveSymbol(getPropertyOfType(resolveExternalModuleTypeByLiteral(name), commonJSPropertyAccess.name.escapedText))
                     : undefined;
             }
-            if (ts.isVariableDeclaration(node) || node.moduleReference.kind === 273 /* ExternalModuleReference */) {
+            if (ts.isVariableDeclaration(node) || node.moduleReference.kind === 275 /* ExternalModuleReference */) {
                 var immediate = resolveExternalModuleName(node, ts.getExternalModuleRequireArgument(node) || ts.getExternalModuleImportEqualsDeclarationExpression(node));
                 var resolved_4 = resolveExternalModuleSymbol(immediate);
                 markSymbolOfAliasDeclarationIfTypeOnly(node, immediate, resolved_4, /*overwriteEmpty*/ false);
@@ -47181,7 +48191,7 @@
                     if (localSymbol.declarations) {
                         ts.addRelatedInfo.apply(void 0, __spreadArray([diagnostic], ts.map(localSymbol.declarations, function (decl, index) {
                             return ts.createDiagnosticForNode(decl, index === 0 ? ts.Diagnostics._0_is_declared_here : ts.Diagnostics.and_here, declarationName);
-                        })));
+                        }), false));
                     }
                 }
             }
@@ -47261,7 +48271,7 @@
             return getTargetOfAliasLikeExpression(expression, dontRecursivelyResolve);
         }
         function getTargetOfAccessExpression(node, dontRecursivelyResolve) {
-            if (!(ts.isBinaryExpression(node.parent) && node.parent.left === node && node.parent.operatorToken.kind === 62 /* EqualsToken */)) {
+            if (!(ts.isBinaryExpression(node.parent) && node.parent.left === node && node.parent.operatorToken.kind === 63 /* EqualsToken */)) {
                 return undefined;
             }
             return getTargetOfAliasLikeExpression(node.parent.right, dontRecursivelyResolve);
@@ -47269,31 +48279,31 @@
         function getTargetOfAliasDeclaration(node, dontRecursivelyResolve) {
             if (dontRecursivelyResolve === void 0) { dontRecursivelyResolve = false; }
             switch (node.kind) {
-                case 261 /* ImportEqualsDeclaration */:
-                case 250 /* VariableDeclaration */:
+                case 263 /* ImportEqualsDeclaration */:
+                case 252 /* VariableDeclaration */:
                     return getTargetOfImportEqualsDeclaration(node, dontRecursivelyResolve);
-                case 263 /* ImportClause */:
+                case 265 /* ImportClause */:
                     return getTargetOfImportClause(node, dontRecursivelyResolve);
-                case 264 /* NamespaceImport */:
+                case 266 /* NamespaceImport */:
                     return getTargetOfNamespaceImport(node, dontRecursivelyResolve);
-                case 270 /* NamespaceExport */:
+                case 272 /* NamespaceExport */:
                     return getTargetOfNamespaceExport(node, dontRecursivelyResolve);
-                case 266 /* ImportSpecifier */:
-                case 199 /* BindingElement */:
+                case 268 /* ImportSpecifier */:
+                case 201 /* BindingElement */:
                     return getTargetOfImportSpecifier(node, dontRecursivelyResolve);
-                case 271 /* ExportSpecifier */:
+                case 273 /* ExportSpecifier */:
                     return getTargetOfExportSpecifier(node, 111551 /* Value */ | 788968 /* Type */ | 1920 /* Namespace */, dontRecursivelyResolve);
-                case 267 /* ExportAssignment */:
-                case 217 /* BinaryExpression */:
+                case 269 /* ExportAssignment */:
+                case 219 /* BinaryExpression */:
                     return getTargetOfExportAssignment(node, dontRecursivelyResolve);
-                case 260 /* NamespaceExportDeclaration */:
+                case 262 /* NamespaceExportDeclaration */:
                     return getTargetOfNamespaceExportDeclaration(node, dontRecursivelyResolve);
-                case 290 /* ShorthandPropertyAssignment */:
+                case 292 /* ShorthandPropertyAssignment */:
                     return resolveEntityName(node.name, 111551 /* Value */ | 788968 /* Type */ | 1920 /* Namespace */, /*ignoreErrors*/ true, dontRecursivelyResolve);
-                case 289 /* PropertyAssignment */:
+                case 291 /* PropertyAssignment */:
                     return getTargetOfPropertyAssignment(node, dontRecursivelyResolve);
-                case 203 /* ElementAccessExpression */:
-                case 202 /* PropertyAccessExpression */:
+                case 205 /* ElementAccessExpression */:
+                case 204 /* PropertyAccessExpression */:
                     return getTargetOfAccessExpression(node, dontRecursivelyResolve);
                 default:
                     return ts.Debug.fail();
@@ -47441,17 +48451,17 @@
             //     import a = |b|; // Namespace
             //     import a = |b.c|; // Value, type, namespace
             //     import a = |b.c|.d; // Namespace
-            if (entityName.kind === 78 /* Identifier */ && ts.isRightSideOfQualifiedNameOrPropertyAccess(entityName)) {
+            if (entityName.kind === 79 /* Identifier */ && ts.isRightSideOfQualifiedNameOrPropertyAccess(entityName)) {
                 entityName = entityName.parent;
             }
             // Check for case 1 and 3 in the above example
-            if (entityName.kind === 78 /* Identifier */ || entityName.parent.kind === 158 /* QualifiedName */) {
+            if (entityName.kind === 79 /* Identifier */ || entityName.parent.kind === 159 /* QualifiedName */) {
                 return resolveEntityName(entityName, 1920 /* Namespace */, /*ignoreErrors*/ false, dontResolveAlias);
             }
             else {
                 // Case 2 in above example
                 // entityName.kind could be a QualifiedName or a Missing identifier
-                ts.Debug.assert(entityName.parent.kind === 261 /* ImportEqualsDeclaration */);
+                ts.Debug.assert(entityName.parent.kind === 263 /* ImportEqualsDeclaration */);
                 return resolveEntityName(entityName, 111551 /* Value */ | 788968 /* Type */ | 1920 /* Namespace */, /*ignoreErrors*/ false, dontResolveAlias);
             }
         }
@@ -47467,7 +48477,7 @@
             }
             var namespaceMeaning = 1920 /* Namespace */ | (ts.isInJSFile(name) ? meaning & 111551 /* Value */ : 0);
             var symbol;
-            if (name.kind === 78 /* Identifier */) {
+            if (name.kind === 79 /* Identifier */) {
                 var message = meaning === namespaceMeaning || ts.nodeIsSynthesized(name) ? ts.Diagnostics.Cannot_find_namespace_0 : getCannotFindNameDiagnosticForName(ts.getFirstIdentifier(name));
                 var symbolFromJSPrototype = ts.isInJSFile(name) && !ts.nodeIsSynthesized(name) ? resolveEntityNameFromAssignmentDeclaration(name, meaning) : undefined;
                 symbol = getMergedSymbol(resolveName(location || name, name.escapedText, meaning, ignoreErrors || symbolFromJSPrototype ? undefined : message, name, /*isUse*/ true));
@@ -47475,9 +48485,9 @@
                     return getMergedSymbol(symbolFromJSPrototype);
                 }
             }
-            else if (name.kind === 158 /* QualifiedName */ || name.kind === 202 /* PropertyAccessExpression */) {
-                var left = name.kind === 158 /* QualifiedName */ ? name.left : name.expression;
-                var right = name.kind === 158 /* QualifiedName */ ? name.right : name.name;
+            else if (name.kind === 159 /* QualifiedName */ || name.kind === 204 /* PropertyAccessExpression */) {
+                var left = name.kind === 159 /* QualifiedName */ ? name.left : name.expression;
+                var right = name.kind === 159 /* QualifiedName */ ? name.right : name.name;
                 var namespace = resolveEntityName(left, namespaceMeaning, ignoreErrors, /*dontResolveAlias*/ false, location);
                 if (!namespace || ts.nodeIsMissing(right)) {
                     return undefined;
@@ -47516,7 +48526,7 @@
                 throw ts.Debug.assertNever(name, "Unknown entity name kind.");
             }
             ts.Debug.assert((ts.getCheckFlags(symbol) & 1 /* Instantiated */) === 0, "Should never get an instantiated symbol here.");
-            if (!ts.nodeIsSynthesized(name) && ts.isEntityName(name) && (symbol.flags & 2097152 /* Alias */ || name.parent.kind === 267 /* ExportAssignment */)) {
+            if (!ts.nodeIsSynthesized(name) && ts.isEntityName(name) && (symbol.flags & 2097152 /* Alias */ || name.parent.kind === 269 /* ExportAssignment */)) {
                 markSymbolOfAliasDeclarationIfTypeOnly(ts.getAliasDeclarationFromName(name), symbol, /*finalTarget*/ undefined, /*overwriteEmpty*/ true);
             }
             return (symbol.flags & meaning) || dontResolveAlias ? symbol : resolveAlias(symbol);
@@ -47753,7 +48763,7 @@
         function resolveESModuleSymbol(moduleSymbol, referencingLocation, dontResolveAlias, suppressInteropError) {
             var symbol = resolveExternalModuleSymbol(moduleSymbol, dontResolveAlias);
             if (!dontResolveAlias && symbol) {
-                if (!suppressInteropError && !(symbol.flags & (1536 /* Module */ | 3 /* Variable */)) && !ts.getDeclarationOfKind(symbol, 298 /* SourceFile */)) {
+                if (!suppressInteropError && !(symbol.flags & (1536 /* Module */ | 3 /* Variable */)) && !ts.getDeclarationOfKind(symbol, 300 /* SourceFile */)) {
                     var compilerOptionName = moduleKind >= ts.ModuleKind.ES2015
                         ? "allowSyntheticDefaultImports"
                         : "esModuleInterop";
@@ -47786,7 +48796,7 @@
                             if (symbol.exports)
                                 result.exports = new ts.Map(symbol.exports);
                             var resolvedModuleType = resolveStructuredTypeMembers(moduleType); // Should already be resolved from the signature checks above
-                            result.type = createAnonymousType(result, resolvedModuleType.members, ts.emptyArray, ts.emptyArray, resolvedModuleType.stringIndexInfo, resolvedModuleType.numberIndexInfo);
+                            result.type = createAnonymousType(result, resolvedModuleType.members, ts.emptyArray, ts.emptyArray, resolvedModuleType.indexInfos);
                             return result;
                         }
                     }
@@ -47811,6 +48821,23 @@
             }
             return exports;
         }
+        function forEachExportAndPropertyOfModule(moduleSymbol, cb) {
+            var exports = getExportsOfModule(moduleSymbol);
+            exports.forEach(function (symbol, key) {
+                if (!isReservedMemberName(key)) {
+                    cb(symbol, key);
+                }
+            });
+            var exportEquals = resolveExternalModuleSymbol(moduleSymbol);
+            if (exportEquals !== moduleSymbol) {
+                var type = getTypeOfSymbol(exportEquals);
+                if (shouldTreatPropertiesOfExternalModuleAsExports(type)) {
+                    getPropertiesOfType(type).forEach(function (symbol) {
+                        cb(symbol, symbol.escapedName);
+                    });
+                }
+            }
+        }
         function tryGetMemberInModuleExports(memberName, moduleSymbol) {
             var symbolTable = getExportsOfModule(moduleSymbol);
             if (symbolTable) {
@@ -47999,7 +49026,7 @@
                             }
                         });
                     }) : undefined;
-                var res = firstVariableMatch ? __spreadArray(__spreadArray([firstVariableMatch], additionalContainers), [container]) : __spreadArray(__spreadArray([], additionalContainers), [container]);
+                var res = firstVariableMatch ? __spreadArray(__spreadArray([firstVariableMatch], additionalContainers, true), [container], false) : __spreadArray(__spreadArray([], additionalContainers, true), [container], false);
                 res = ts.append(res, objectLiteralContainer);
                 res = ts.addRange(res, reexportContainers);
                 return res;
@@ -48008,7 +49035,7 @@
                 if (!ts.isAmbientModule(d) && d.parent && hasNonGlobalAugmentationExternalModuleSymbol(d.parent)) {
                     return getSymbolOfNode(d.parent);
                 }
-                if (ts.isClassExpression(d) && ts.isBinaryExpression(d.parent) && d.parent.operatorToken.kind === 62 /* EqualsToken */ && ts.isAccessExpression(d.parent.left) && ts.isEntityNameExpression(d.parent.left.expression)) {
+                if (ts.isClassExpression(d) && ts.isBinaryExpression(d.parent) && d.parent.operatorToken.kind === 63 /* EqualsToken */ && ts.isAccessExpression(d.parent.left) && ts.isEntityNameExpression(d.parent.left.expression)) {
                     if (ts.isModuleExportsAccessExpression(d.parent.left) || ts.isExportsIdentifier(d.parent.left.expression)) {
                         return getSymbolOfNode(ts.getSourceFileOfNode(d));
                     }
@@ -48080,7 +49107,7 @@
             var members = node.members;
             for (var _i = 0, members_3 = members; _i < members_3.length; _i++) {
                 var member = members_3[_i];
-                if (member.kind === 167 /* Constructor */ && ts.nodeIsPresent(member.body)) {
+                if (member.kind === 169 /* Constructor */ && ts.nodeIsPresent(member.body)) {
                     return member;
                 }
             }
@@ -48104,12 +49131,6 @@
             type.objectFlags = objectFlags;
             return type;
         }
-        function createBooleanType(trueFalseTypes) {
-            var type = getUnionType(trueFalseTypes);
-            type.flags |= 16 /* Boolean */;
-            type.intrinsicName = "boolean";
-            return type;
-        }
         function createObjectType(objectFlags, symbol) {
             var type = createType(524288 /* Object */);
             type.objectFlags = objectFlags;
@@ -48118,12 +49139,11 @@
             type.properties = undefined;
             type.callSignatures = undefined;
             type.constructSignatures = undefined;
-            type.stringIndexInfo = undefined;
-            type.numberIndexInfo = undefined;
+            type.indexInfos = undefined;
             return type;
         }
         function createTypeofType() {
-            return getUnionType(ts.arrayFrom(typeofEQFacts.keys(), getLiteralType));
+            return getUnionType(ts.arrayFrom(typeofEQFacts.keys(), getStringLiteralType));
         }
         function createTypeParameter(symbol) {
             var type = createType(262144 /* TypeParameter */);
@@ -48156,21 +49176,20 @@
             var index = getIndexSymbolFromSymbolTable(members);
             return index ? ts.concatenate(result, [index]) : result;
         }
-        function setStructuredTypeMembers(type, members, callSignatures, constructSignatures, stringIndexInfo, numberIndexInfo) {
+        function setStructuredTypeMembers(type, members, callSignatures, constructSignatures, indexInfos) {
             var resolved = type;
             resolved.members = members;
             resolved.properties = ts.emptyArray;
             resolved.callSignatures = callSignatures;
             resolved.constructSignatures = constructSignatures;
-            resolved.stringIndexInfo = stringIndexInfo;
-            resolved.numberIndexInfo = numberIndexInfo;
+            resolved.indexInfos = indexInfos;
             // This can loop back to getPropertyOfType() which would crash if `callSignatures` & `constructSignatures` are not initialized.
             if (members !== emptySymbols)
                 resolved.properties = getNamedMembers(members);
             return resolved;
         }
-        function createAnonymousType(symbol, members, callSignatures, constructSignatures, stringIndexInfo, numberIndexInfo) {
-            return setStructuredTypeMembers(createObjectType(16 /* Anonymous */, symbol), members, callSignatures, constructSignatures, stringIndexInfo, numberIndexInfo);
+        function createAnonymousType(symbol, members, callSignatures, constructSignatures, indexInfos) {
+            return setStructuredTypeMembers(createObjectType(16 /* Anonymous */, symbol), members, callSignatures, constructSignatures, indexInfos);
         }
         function getResolvedTypeWithoutAbstractConstructSignatures(type) {
             if (type.constructSignatures.length === 0)
@@ -48180,7 +49199,7 @@
             var constructSignatures = ts.filter(type.constructSignatures, function (signature) { return !(signature.flags & 4 /* Abstract */); });
             if (type.constructSignatures === constructSignatures)
                 return type;
-            var typeCopy = createAnonymousType(type.symbol, type.members, type.callSignatures, ts.some(constructSignatures) ? constructSignatures : ts.emptyArray, type.stringIndexInfo, type.numberIndexInfo);
+            var typeCopy = createAnonymousType(type.symbol, type.members, type.callSignatures, ts.some(constructSignatures) ? constructSignatures : ts.emptyArray, type.indexInfos);
             type.objectTypeWithoutAbstractConstructSignatures = typeCopy;
             typeCopy.objectTypeWithoutAbstractConstructSignatures = typeCopy;
             return typeCopy;
@@ -48190,28 +49209,28 @@
             var _loop_8 = function (location) {
                 // Locals of a source file are not in scope (because they get merged into the global symbol table)
                 if (location.locals && !isGlobalSourceFile(location)) {
-                    if (result = callback(location.locals, /*ignoreQualification*/ undefined, /*isLocalNameLookup*/ true)) {
+                    if (result = callback(location.locals, /*ignoreQualification*/ undefined, /*isLocalNameLookup*/ true, location)) {
                         return { value: result };
                     }
                 }
                 switch (location.kind) {
-                    case 298 /* SourceFile */:
+                    case 300 /* SourceFile */:
                         if (!ts.isExternalOrCommonJsModule(location)) {
                             break;
                         }
                     // falls through
-                    case 257 /* ModuleDeclaration */:
+                    case 259 /* ModuleDeclaration */:
                         var sym = getSymbolOfNode(location);
                         // `sym` may not have exports if this module declaration is backed by the symbol for a `const` that's being rewritten
                         // into a namespace - in such cases, it's best to just let the namespace appear empty (the const members couldn't have referred
                         // to one another anyway)
-                        if (result = callback((sym === null || sym === void 0 ? void 0 : sym.exports) || emptySymbols, /*ignoreQualification*/ undefined, /*isLocalNameLookup*/ true)) {
+                        if (result = callback((sym === null || sym === void 0 ? void 0 : sym.exports) || emptySymbols, /*ignoreQualification*/ undefined, /*isLocalNameLookup*/ true, location)) {
                             return { value: result };
                         }
                         break;
-                    case 253 /* ClassDeclaration */:
-                    case 222 /* ClassExpression */:
-                    case 254 /* InterfaceDeclaration */:
+                    case 255 /* ClassDeclaration */:
+                    case 224 /* ClassExpression */:
+                    case 256 /* InterfaceDeclaration */:
                         // Type parameters are bound into `members` lists so they can merge across declarations
                         // This is troublesome, since in all other respects, they behave like locals :cries:
                         // TODO: the below is shared with similar code in `resolveName` - in fact, rephrasing all this symbol
@@ -48226,7 +49245,7 @@
                                 (table_1 || (table_1 = ts.createSymbolTable())).set(key, memberSymbol);
                             }
                         });
-                        if (table_1 && (result = callback(table_1))) {
+                        if (table_1 && (result = callback(table_1, /*ignoreQualification*/ undefined, /*isLocalNameLookup*/ false, location))) {
                             return { value: result };
                         }
                         break;
@@ -48248,12 +49267,22 @@
             if (!(symbol && !isPropertyOrMethodDeclarationSymbol(symbol))) {
                 return undefined;
             }
+            var links = getSymbolLinks(symbol);
+            var cache = (links.accessibleChainCache || (links.accessibleChainCache = new ts.Map()));
+            // Go from enclosingDeclaration to the first scope we check, so the cache is keyed off the scope and thus shared more
+            var firstRelevantLocation = forEachSymbolTableInScope(enclosingDeclaration, function (_, __, ___, node) { return node; });
+            var key = (useOnlyExternalAliasing ? 0 : 1) + "|" + (firstRelevantLocation && getNodeId(firstRelevantLocation)) + "|" + meaning;
+            if (cache.has(key)) {
+                return cache.get(key);
+            }
             var id = getSymbolId(symbol);
             var visitedSymbolTables = visitedSymbolTablesMap.get(id);
             if (!visitedSymbolTables) {
                 visitedSymbolTablesMap.set(id, visitedSymbolTables = []);
             }
-            return forEachSymbolTableInScope(enclosingDeclaration, getAccessibleSymbolChainFromSymbolTable);
+            var result = forEachSymbolTableInScope(enclosingDeclaration, getAccessibleSymbolChainFromSymbolTable);
+            cache.set(key, result);
+            return result;
             /**
              * @param {ignoreQualification} boolean Set when a symbol is being looked for through the exports of another symbol (meaning we have a route to qualify it already)
              */
@@ -48296,7 +49325,7 @@
                         && (isLocalNameLookup ? !ts.some(symbolFromSymbolTable.declarations, ts.isNamespaceReexportDeclaration) : true)
                         // While exports are generally considered to be in scope, export-specifier declared symbols are _not_
                         // See similar comment in `resolveName` for details
-                        && (ignoreQualification || !ts.getDeclarationOfKind(symbolFromSymbolTable, 271 /* ExportSpecifier */))) {
+                        && (ignoreQualification || !ts.getDeclarationOfKind(symbolFromSymbolTable, 273 /* ExportSpecifier */))) {
                         var resolvedImportedSymbol = resolveAlias(symbolFromSymbolTable);
                         var candidate = getCandidateListForSymbol(symbolFromSymbolTable, resolvedImportedSymbol, ignoreQualification);
                         if (candidate) {
@@ -48340,7 +49369,7 @@
                     return true;
                 }
                 // Qualify if the symbol from symbol table has same meaning as expected
-                symbolFromSymbolTable = (symbolFromSymbolTable.flags & 2097152 /* Alias */ && !ts.getDeclarationOfKind(symbolFromSymbolTable, 271 /* ExportSpecifier */)) ? resolveAlias(symbolFromSymbolTable) : symbolFromSymbolTable;
+                symbolFromSymbolTable = (symbolFromSymbolTable.flags & 2097152 /* Alias */ && !ts.getDeclarationOfKind(symbolFromSymbolTable, 273 /* ExportSpecifier */)) ? resolveAlias(symbolFromSymbolTable) : symbolFromSymbolTable;
                 if (symbolFromSymbolTable.flags & meaning) {
                     qualify = true;
                     return true;
@@ -48355,10 +49384,10 @@
                 for (var _i = 0, _a = symbol.declarations; _i < _a.length; _i++) {
                     var declaration = _a[_i];
                     switch (declaration.kind) {
-                        case 164 /* PropertyDeclaration */:
-                        case 166 /* MethodDeclaration */:
-                        case 168 /* GetAccessor */:
-                        case 169 /* SetAccessor */:
+                        case 165 /* PropertyDeclaration */:
+                        case 167 /* MethodDeclaration */:
+                        case 170 /* GetAccessor */:
+                        case 171 /* SetAccessor */:
                             continue;
                         default:
                             return false;
@@ -48488,14 +49517,14 @@
             return node && getSymbolOfNode(node);
         }
         function hasExternalModuleSymbol(declaration) {
-            return ts.isAmbientModule(declaration) || (declaration.kind === 298 /* SourceFile */ && ts.isExternalOrCommonJsModule(declaration));
+            return ts.isAmbientModule(declaration) || (declaration.kind === 300 /* SourceFile */ && ts.isExternalOrCommonJsModule(declaration));
         }
         function hasNonGlobalAugmentationExternalModuleSymbol(declaration) {
-            return ts.isModuleWithStringLiteralName(declaration) || (declaration.kind === 298 /* SourceFile */ && ts.isExternalOrCommonJsModule(declaration));
+            return ts.isModuleWithStringLiteralName(declaration) || (declaration.kind === 300 /* SourceFile */ && ts.isExternalOrCommonJsModule(declaration));
         }
         function hasVisibleDeclarations(symbol, shouldComputeAliasToMakeVisible) {
             var aliasesToMakeVisible;
-            if (!ts.every(ts.filter(symbol.declarations, function (d) { return d.kind !== 78 /* Identifier */; }), getIsDeclarationVisible)) {
+            if (!ts.every(ts.filter(symbol.declarations, function (d) { return d.kind !== 79 /* Identifier */; }), getIsDeclarationVisible)) {
                 return undefined;
             }
             return { accessibility: 0 /* Accessible */, aliasesToMakeVisible: aliasesToMakeVisible };
@@ -48547,14 +49576,14 @@
         function isEntityNameVisible(entityName, enclosingDeclaration) {
             // get symbol of the first identifier of the entityName
             var meaning;
-            if (entityName.parent.kind === 177 /* TypeQuery */ ||
+            if (entityName.parent.kind === 179 /* TypeQuery */ ||
                 ts.isExpressionWithTypeArgumentsInClassExtendsClause(entityName.parent) ||
-                entityName.parent.kind === 159 /* ComputedPropertyName */) {
+                entityName.parent.kind === 160 /* ComputedPropertyName */) {
                 // Typeof value
                 meaning = 111551 /* Value */ | 1048576 /* ExportValue */;
             }
-            else if (entityName.kind === 158 /* QualifiedName */ || entityName.kind === 202 /* PropertyAccessExpression */ ||
-                entityName.parent.kind === 261 /* ImportEqualsDeclaration */) {
+            else if (entityName.kind === 159 /* QualifiedName */ || entityName.kind === 204 /* PropertyAccessExpression */ ||
+                entityName.parent.kind === 263 /* ImportEqualsDeclaration */) {
                 // Left identifier from type reference or TypeAlias
                 // Entity name of the import declaration
                 meaning = 1920 /* Namespace */;
@@ -48595,7 +49624,7 @@
             function symbolToStringWorker(writer) {
                 var entity = builder(symbol, meaning, enclosingDeclaration, nodeFlags); // TODO: GH#18217
                 // add neverAsciiEscape for GH#39027
-                var printer = (enclosingDeclaration === null || enclosingDeclaration === void 0 ? void 0 : enclosingDeclaration.kind) === 298 /* SourceFile */ ? ts.createPrinter({ removeComments: true, neverAsciiEscape: true }) : ts.createPrinter({ removeComments: true });
+                var printer = (enclosingDeclaration === null || enclosingDeclaration === void 0 ? void 0 : enclosingDeclaration.kind) === 300 /* SourceFile */ ? ts.createPrinter({ removeComments: true, neverAsciiEscape: true }) : ts.createPrinter({ removeComments: true });
                 var sourceFile = enclosingDeclaration && ts.getSourceFileOfNode(enclosingDeclaration);
                 printer.writeNode(4 /* Unspecified */, entity, /*sourceFile*/ sourceFile, writer);
                 return writer;
@@ -48607,10 +49636,10 @@
             function signatureToStringWorker(writer) {
                 var sigOutput;
                 if (flags & 262144 /* WriteArrowStyleSignature */) {
-                    sigOutput = kind === 1 /* Construct */ ? 176 /* ConstructorType */ : 175 /* FunctionType */;
+                    sigOutput = kind === 1 /* Construct */ ? 178 /* ConstructorType */ : 177 /* FunctionType */;
                 }
                 else {
-                    sigOutput = kind === 1 /* Construct */ ? 171 /* ConstructSignature */ : 170 /* CallSignature */;
+                    sigOutput = kind === 1 /* Construct */ ? 173 /* ConstructSignature */ : 172 /* CallSignature */;
                 }
                 var sig = nodeBuilder.signatureToSignatureDeclaration(signature, sigOutput, enclosingDeclaration, toNodeBuilderFlags(flags) | 70221824 /* IgnoreErrors */ | 512 /* WriteTypeParametersInQualifiedName */);
                 var printer = ts.createPrinter({ removeComments: true, omitTrailingSemicolon: true });
@@ -48664,8 +49693,8 @@
                 typeToTypeNode: function (type, enclosingDeclaration, flags, tracker) {
                     return withContext(enclosingDeclaration, flags, tracker, function (context) { return typeToTypeNodeHelper(type, context); });
                 },
-                indexInfoToIndexSignatureDeclaration: function (indexInfo, kind, enclosingDeclaration, flags, tracker) {
-                    return withContext(enclosingDeclaration, flags, tracker, function (context) { return indexInfoToIndexSignatureDeclarationHelper(indexInfo, kind, context, /*typeNode*/ undefined); });
+                indexInfoToIndexSignatureDeclaration: function (indexInfo, enclosingDeclaration, flags, tracker) {
+                    return withContext(enclosingDeclaration, flags, tracker, function (context) { return indexInfoToIndexSignatureDeclarationHelper(indexInfo, context, /*typeNode*/ undefined); });
                 },
                 signatureToSignatureDeclaration: function (signature, kind, enclosingDeclaration, flags, tracker) {
                     return withContext(enclosingDeclaration, flags, tracker, function (context) { return signatureToSignatureDeclarationHelper(signature, kind, context); });
@@ -48696,9 +49725,8 @@
                     enclosingDeclaration: enclosingDeclaration,
                     flags: flags || 0 /* None */,
                     // If no full tracker is provided, fake up a dummy one with a basic limited-functionality moduleResolverHost
-                    tracker: tracker && tracker.trackSymbol ? tracker : { trackSymbol: ts.noop, moduleResolverHost: flags & 134217728 /* DoNotIncludeSymbolChain */ ? {
+                    tracker: tracker && tracker.trackSymbol ? tracker : { trackSymbol: function () { return false; }, moduleResolverHost: flags & 134217728 /* DoNotIncludeSymbolChain */ ? {
                             getCommonSourceDirectory: !!host.getCommonSourceDirectory ? function () { return host.getCommonSourceDirectory(); } : function () { return ""; },
-                            getSourceFiles: function () { return host.getSourceFiles(); },
                             getCurrentDirectory: function () { return host.getCurrentDirectory(); },
                             getSymlinkCache: ts.maybeBind(host, host.getSymlinkCache),
                             useCaseSensitiveFileNames: ts.maybeBind(host, host.useCaseSensitiveFileNames),
@@ -48709,17 +49737,46 @@
                             getFileIncludeReasons: function () { return host.getFileIncludeReasons(); },
                         } : undefined },
                     encounteredError: false,
+                    reportedDiagnostic: false,
                     visitedTypes: undefined,
                     symbolDepth: undefined,
                     inferTypeParameters: undefined,
                     approximateLength: 0
                 };
+                context.tracker = wrapSymbolTrackerToReportForContext(context, context.tracker);
                 var resultingNode = cb(context);
                 if (context.truncating && context.flags & 1 /* NoTruncation */) {
                     (_b = (_a = context.tracker) === null || _a === void 0 ? void 0 : _a.reportTruncationError) === null || _b === void 0 ? void 0 : _b.call(_a);
                 }
                 return context.encounteredError ? undefined : resultingNode;
             }
+            function wrapSymbolTrackerToReportForContext(context, tracker) {
+                var oldTrackSymbol = tracker.trackSymbol;
+                return __assign(__assign({}, tracker), { reportCyclicStructureError: wrapReportedDiagnostic(tracker.reportCyclicStructureError), reportInaccessibleThisError: wrapReportedDiagnostic(tracker.reportInaccessibleThisError), reportInaccessibleUniqueSymbolError: wrapReportedDiagnostic(tracker.reportInaccessibleUniqueSymbolError), reportLikelyUnsafeImportRequiredError: wrapReportedDiagnostic(tracker.reportLikelyUnsafeImportRequiredError), reportNonlocalAugmentation: wrapReportedDiagnostic(tracker.reportNonlocalAugmentation), reportPrivateInBaseOfClassExpression: wrapReportedDiagnostic(tracker.reportPrivateInBaseOfClassExpression), reportNonSerializableProperty: wrapReportedDiagnostic(tracker.reportNonSerializableProperty), trackSymbol: oldTrackSymbol && (function () {
+                        var args = [];
+                        for (var _i = 0; _i < arguments.length; _i++) {
+                            args[_i] = arguments[_i];
+                        }
+                        var result = oldTrackSymbol.apply(void 0, args);
+                        if (result) {
+                            context.reportedDiagnostic = true;
+                        }
+                        return result;
+                    }) });
+                function wrapReportedDiagnostic(method) {
+                    if (!method) {
+                        return method;
+                    }
+                    return (function () {
+                        var args = [];
+                        for (var _i = 0; _i < arguments.length; _i++) {
+                            args[_i] = arguments[_i];
+                        }
+                        context.reportedDiagnostic = true;
+                        return method.apply(void 0, args);
+                    });
+                }
+            }
             function checkTruncationLength(context) {
                 if (context.truncating)
                     return context.truncating;
@@ -48737,33 +49794,33 @@
                         return undefined; // TODO: GH#18217
                     }
                     context.approximateLength += 3;
-                    return ts.factory.createKeywordTypeNode(128 /* AnyKeyword */);
+                    return ts.factory.createKeywordTypeNode(129 /* AnyKeyword */);
                 }
                 if (!(context.flags & 536870912 /* NoTypeReduction */)) {
                     type = getReducedType(type);
                 }
                 if (type.flags & 1 /* Any */) {
                     context.approximateLength += 3;
-                    return ts.factory.createKeywordTypeNode(type === intrinsicMarkerType ? 136 /* IntrinsicKeyword */ : 128 /* AnyKeyword */);
+                    return ts.factory.createKeywordTypeNode(type === intrinsicMarkerType ? 137 /* IntrinsicKeyword */ : 129 /* AnyKeyword */);
                 }
                 if (type.flags & 2 /* Unknown */) {
-                    return ts.factory.createKeywordTypeNode(152 /* UnknownKeyword */);
+                    return ts.factory.createKeywordTypeNode(153 /* UnknownKeyword */);
                 }
                 if (type.flags & 4 /* String */) {
                     context.approximateLength += 6;
-                    return ts.factory.createKeywordTypeNode(147 /* StringKeyword */);
+                    return ts.factory.createKeywordTypeNode(148 /* StringKeyword */);
                 }
                 if (type.flags & 8 /* Number */) {
                     context.approximateLength += 6;
-                    return ts.factory.createKeywordTypeNode(144 /* NumberKeyword */);
+                    return ts.factory.createKeywordTypeNode(145 /* NumberKeyword */);
                 }
                 if (type.flags & 64 /* BigInt */) {
                     context.approximateLength += 6;
-                    return ts.factory.createKeywordTypeNode(155 /* BigIntKeyword */);
+                    return ts.factory.createKeywordTypeNode(156 /* BigIntKeyword */);
                 }
-                if (type.flags & 16 /* Boolean */) {
+                if (type.flags & 16 /* Boolean */ && !type.aliasSymbol) {
                     context.approximateLength += 7;
-                    return ts.factory.createKeywordTypeNode(131 /* BooleanKeyword */);
+                    return ts.factory.createKeywordTypeNode(132 /* BooleanKeyword */);
                 }
                 if (type.flags & 1024 /* EnumLiteral */ && !(type.flags & 1048576 /* Union */)) {
                     var parentSymbol = getParentOfSymbol(type.symbol);
@@ -48817,15 +49874,15 @@
                         }
                     }
                     context.approximateLength += 13;
-                    return ts.factory.createTypeOperatorNode(151 /* UniqueKeyword */, ts.factory.createKeywordTypeNode(148 /* SymbolKeyword */));
+                    return ts.factory.createTypeOperatorNode(152 /* UniqueKeyword */, ts.factory.createKeywordTypeNode(149 /* SymbolKeyword */));
                 }
                 if (type.flags & 16384 /* Void */) {
                     context.approximateLength += 4;
-                    return ts.factory.createKeywordTypeNode(113 /* VoidKeyword */);
+                    return ts.factory.createKeywordTypeNode(114 /* VoidKeyword */);
                 }
                 if (type.flags & 32768 /* Undefined */) {
                     context.approximateLength += 9;
-                    return ts.factory.createKeywordTypeNode(150 /* UndefinedKeyword */);
+                    return ts.factory.createKeywordTypeNode(151 /* UndefinedKeyword */);
                 }
                 if (type.flags & 65536 /* Null */) {
                     context.approximateLength += 4;
@@ -48833,15 +49890,15 @@
                 }
                 if (type.flags & 131072 /* Never */) {
                     context.approximateLength += 5;
-                    return ts.factory.createKeywordTypeNode(141 /* NeverKeyword */);
+                    return ts.factory.createKeywordTypeNode(142 /* NeverKeyword */);
                 }
                 if (type.flags & 4096 /* ESSymbol */) {
                     context.approximateLength += 6;
-                    return ts.factory.createKeywordTypeNode(148 /* SymbolKeyword */);
+                    return ts.factory.createKeywordTypeNode(149 /* SymbolKeyword */);
                 }
                 if (type.flags & 67108864 /* NonPrimitive */) {
                     context.approximateLength += 6;
-                    return ts.factory.createKeywordTypeNode(145 /* ObjectKeyword */);
+                    return ts.factory.createKeywordTypeNode(146 /* ObjectKeyword */);
                 }
                 if (isThisTypeParameter(type)) {
                     if (context.flags & 4194304 /* InObjectTypeLiteral */) {
@@ -48911,7 +49968,7 @@
                     var indexedType = type.type;
                     context.approximateLength += 6;
                     var indexTypeNode = typeToTypeNodeHelper(indexedType, context);
-                    return ts.factory.createTypeOperatorNode(138 /* KeyOfKeyword */, indexTypeNode);
+                    return ts.factory.createTypeOperatorNode(139 /* KeyOfKeyword */, indexTypeNode);
                 }
                 if (type.flags & 134217728 /* TemplateLiteral */) {
                     var texts_1 = type.texts;
@@ -48932,6 +49989,13 @@
                     return ts.factory.createIndexedAccessTypeNode(objectTypeNode, indexTypeNode);
                 }
                 if (type.flags & 16777216 /* Conditional */) {
+                    return visitAndTransformType(type, function (type) { return conditionalTypeToTypeNode(type); });
+                }
+                if (type.flags & 33554432 /* Substitution */) {
+                    return typeToTypeNodeHelper(type.baseType, context);
+                }
+                return ts.Debug.fail("Should be unreachable.");
+                function conditionalTypeToTypeNode(type) {
                     var checkTypeNode = typeToTypeNodeHelper(type.checkType, context);
                     var saveInferTypeParameters = context.inferTypeParameters;
                     context.inferTypeParameters = type.root.inferTypeParameters;
@@ -48942,10 +50006,6 @@
                     context.approximateLength += 15;
                     return ts.factory.createConditionalTypeNode(checkTypeNode, extendsTypeNode, trueTypeNode, falseTypeNode);
                 }
-                if (type.flags & 33554432 /* Substitution */) {
-                    return typeToTypeNodeHelper(type.baseType, context);
-                }
-                return ts.Debug.fail("Should be unreachable.");
                 function typeToTypeNodeOrCircularityElision(type) {
                     var _a, _b, _c;
                     if (type.flags & 1048576 /* Union */) {
@@ -48968,14 +50028,14 @@
                     if (isMappedTypeWithKeyofConstraintDeclaration(type)) {
                         // We have a { [P in keyof T]: X }
                         // We do this to ensure we retain the toplevel keyof-ness of the type which may be lost due to keyof distribution during `getConstraintTypeFromMappedType`
-                        appropriateConstraintTypeNode = ts.factory.createTypeOperatorNode(138 /* KeyOfKeyword */, typeToTypeNodeHelper(getModifiersTypeFromMappedType(type), context));
+                        appropriateConstraintTypeNode = ts.factory.createTypeOperatorNode(139 /* KeyOfKeyword */, typeToTypeNodeHelper(getModifiersTypeFromMappedType(type), context));
                     }
                     else {
                         appropriateConstraintTypeNode = typeToTypeNodeHelper(getConstraintTypeFromMappedType(type), context);
                     }
                     var typeParameterNode = typeParameterToDeclarationWithConstraint(getTypeParameterFromMappedType(type), context, appropriateConstraintTypeNode);
                     var nameTypeNode = type.declaration.nameType ? typeToTypeNodeHelper(getNameTypeFromMappedType(type), context) : undefined;
-                    var templateTypeNode = typeToTypeNodeHelper(getTemplateTypeFromMappedType(type), context);
+                    var templateTypeNode = typeToTypeNodeHelper(removeMissingType(getTemplateTypeFromMappedType(type), !!(getMappedTypeModifiers(type) & 4 /* IncludeOptional */)), context);
                     var mappedTypeNode = ts.factory.createMappedTypeNode(readonlyToken, typeParameterNode, nameTypeNode, questionToken, templateTypeNode);
                     context.approximateLength += 10;
                     return ts.setEmitFlags(mappedTypeNode, 1 /* SingleLine */);
@@ -48993,7 +50053,7 @@
                         // Always use 'typeof T' for type of class, enum, and module objects
                         else if (symbol.flags & 32 /* Class */
                             && !getBaseTypeVariableOfClass(symbol)
-                            && !(symbol.valueDeclaration && symbol.valueDeclaration.kind === 222 /* ClassExpression */ && context.flags & 2048 /* WriteClassExpressionAsTypeLiteral */) ||
+                            && !(symbol.valueDeclaration && symbol.valueDeclaration.kind === 224 /* ClassExpression */ && context.flags & 2048 /* WriteClassExpressionAsTypeLiteral */) ||
                             symbol.flags & (384 /* Enum */ | 512 /* ValueModule */) ||
                             shouldWriteTypeOfFunctionSymbol()) {
                             return symbolToTypeNode(symbol, context, isInstanceType);
@@ -49020,11 +50080,11 @@
                     function shouldWriteTypeOfFunctionSymbol() {
                         var _a;
                         var isStaticMethodSymbol = !!(symbol.flags & 8192 /* Method */) && // typeof static method
-                            ts.some(symbol.declarations, function (declaration) { return ts.hasSyntacticModifier(declaration, 32 /* Static */); });
+                            ts.some(symbol.declarations, function (declaration) { return ts.isStatic(declaration); });
                         var isNonLocalFunctionSymbol = !!(symbol.flags & 16 /* Function */) &&
                             (symbol.parent || // is exported function symbol
                                 ts.forEach(symbol.declarations, function (declaration) {
-                                    return declaration.parent.kind === 298 /* SourceFile */ || declaration.parent.kind === 258 /* ModuleBlock */;
+                                    return declaration.parent.kind === 300 /* SourceFile */ || declaration.parent.kind === 260 /* ModuleBlock */;
                                 }));
                         if (isStaticMethodSymbol || isNonLocalFunctionSymbol) {
                             // typeof is allowed only for static/non local functions
@@ -49034,11 +50094,13 @@
                     }
                 }
                 function visitAndTransformType(type, transform) {
+                    var _a, _b;
                     var typeId = type.id;
                     var isConstructorObject = ts.getObjectFlags(type) & 16 /* Anonymous */ && type.symbol && type.symbol.flags & 32 /* Class */;
                     var id = ts.getObjectFlags(type) & 4 /* Reference */ && type.node ? "N" + getNodeId(type.node) :
-                        type.symbol ? (isConstructorObject ? "+" : "") + getSymbolId(type.symbol) :
-                            undefined;
+                        type.flags & 16777216 /* Conditional */ ? "N" + getNodeId(type.root.node) :
+                            type.symbol ? (isConstructorObject ? "+" : "") + getSymbolId(type.symbol) :
+                                undefined;
                     // Since instantiations of the same anonymous type have the same symbol, tracking symbols instead
                     // of types allows us to catch circular references to instantiations of the same anonymous type
                     if (!context.visitedTypes) {
@@ -49047,6 +50109,19 @@
                     if (id && !context.symbolDepth) {
                         context.symbolDepth = new ts.Map();
                     }
+                    var links = context.enclosingDeclaration && getNodeLinks(context.enclosingDeclaration);
+                    var key = getTypeId(type) + "|" + context.flags;
+                    if (links) {
+                        links.serializedTypes || (links.serializedTypes = new ts.Map());
+                    }
+                    var cachedResult = (_a = links === null || links === void 0 ? void 0 : links.serializedTypes) === null || _a === void 0 ? void 0 : _a.get(key);
+                    if (cachedResult) {
+                        if (cachedResult.truncating) {
+                            context.truncating = true;
+                        }
+                        context.approximateLength += cachedResult.addedLength;
+                        return deepCloneOrReuseNode(cachedResult);
+                    }
                     var depth;
                     if (id) {
                         depth = context.symbolDepth.get(id) || 0;
@@ -49056,31 +50131,46 @@
                         context.symbolDepth.set(id, depth + 1);
                     }
                     context.visitedTypes.add(typeId);
+                    var startLength = context.approximateLength;
                     var result = transform(type);
+                    var addedLength = context.approximateLength - startLength;
+                    if (!context.reportedDiagnostic && !context.encounteredError) {
+                        if (context.truncating) {
+                            result.truncating = true;
+                        }
+                        result.addedLength = addedLength;
+                        (_b = links === null || links === void 0 ? void 0 : links.serializedTypes) === null || _b === void 0 ? void 0 : _b.set(key, result);
+                    }
                     context.visitedTypes.delete(typeId);
                     if (id) {
                         context.symbolDepth.set(id, depth);
                     }
                     return result;
+                    function deepCloneOrReuseNode(node) {
+                        if (!ts.nodeIsSynthesized(node) && ts.getParseTreeNode(node) === node) {
+                            return node;
+                        }
+                        return ts.setTextRange(ts.factory.cloneNode(ts.visitEachChild(node, deepCloneOrReuseNode, ts.nullTransformationContext)), node);
+                    }
                 }
                 function createTypeNodeFromObjectType(type) {
                     if (isGenericMappedType(type) || type.containsError) {
                         return createMappedTypeNodeFromType(type);
                     }
                     var resolved = resolveStructuredTypeMembers(type);
-                    if (!resolved.properties.length && !resolved.stringIndexInfo && !resolved.numberIndexInfo) {
+                    if (!resolved.properties.length && !resolved.indexInfos.length) {
                         if (!resolved.callSignatures.length && !resolved.constructSignatures.length) {
                             context.approximateLength += 2;
                             return ts.setEmitFlags(ts.factory.createTypeLiteralNode(/*members*/ undefined), 1 /* SingleLine */);
                         }
                         if (resolved.callSignatures.length === 1 && !resolved.constructSignatures.length) {
                             var signature = resolved.callSignatures[0];
-                            var signatureNode = signatureToSignatureDeclarationHelper(signature, 175 /* FunctionType */, context);
+                            var signatureNode = signatureToSignatureDeclarationHelper(signature, 177 /* FunctionType */, context);
                             return signatureNode;
                         }
                         if (resolved.constructSignatures.length === 1 && !resolved.callSignatures.length) {
                             var signature = resolved.constructSignatures[0];
-                            var signatureNode = signatureToSignatureDeclarationHelper(signature, 176 /* ConstructorType */, context);
+                            var signatureNode = signatureToSignatureDeclarationHelper(signature, 178 /* ConstructorType */, context);
                             return signatureNode;
                         }
                     }
@@ -49090,8 +50180,7 @@
                         // count the number of type elements excluding abstract constructors
                         var typeElementCount = resolved.callSignatures.length +
                             (resolved.constructSignatures.length - abstractSignatures.length) +
-                            (resolved.stringIndexInfo ? 1 : 0) +
-                            (resolved.numberIndexInfo ? 1 : 0) +
+                            resolved.indexInfos.length +
                             // exclude `prototype` when writing a class expression as a type literal, as per
                             // the logic in `createTypeNodesFromResolvedType`.
                             (context.flags & 2048 /* WriteClassExpressionAsTypeLiteral */ ?
@@ -49124,9 +50213,10 @@
                         }
                         var elementType = typeToTypeNodeHelper(typeArguments[0], context);
                         var arrayType = ts.factory.createArrayTypeNode(elementType);
-                        return type.target === globalArrayType ? arrayType : ts.factory.createTypeOperatorNode(142 /* ReadonlyKeyword */, arrayType);
+                        return type.target === globalArrayType ? arrayType : ts.factory.createTypeOperatorNode(143 /* ReadonlyKeyword */, arrayType);
                     }
                     else if (type.target.objectFlags & 8 /* Tuple */) {
+                        typeArguments = ts.sameMap(typeArguments, function (t, i) { return removeMissingType(t, !!(type.target.elementFlags[i] & 2 /* Optional */)); });
                         if (typeArguments.length > 0) {
                             var arity = getTypeReferenceArity(type);
                             var tupleConstituentNodes = mapToTypeNodes(typeArguments.slice(0, arity), context);
@@ -49148,12 +50238,12 @@
                                     }
                                 }
                                 var tupleTypeNode = ts.setEmitFlags(ts.factory.createTupleTypeNode(tupleConstituentNodes), 1 /* SingleLine */);
-                                return type.target.readonly ? ts.factory.createTypeOperatorNode(142 /* ReadonlyKeyword */, tupleTypeNode) : tupleTypeNode;
+                                return type.target.readonly ? ts.factory.createTypeOperatorNode(143 /* ReadonlyKeyword */, tupleTypeNode) : tupleTypeNode;
                             }
                         }
                         if (context.encounteredError || (context.flags & 524288 /* AllowEmptyTuple */)) {
                             var tupleTypeNode = ts.setEmitFlags(ts.factory.createTupleTypeNode([]), 1 /* SingleLine */);
-                            return type.target.readonly ? ts.factory.createTypeOperatorNode(142 /* ReadonlyKeyword */, tupleTypeNode) : tupleTypeNode;
+                            return type.target.readonly ? ts.factory.createTypeOperatorNode(143 /* ReadonlyKeyword */, tupleTypeNode) : tupleTypeNode;
                         }
                         context.encounteredError = true;
                         return undefined; // TODO: GH#18217
@@ -49260,34 +50350,25 @@
                     var typeElements = [];
                     for (var _i = 0, _a = resolvedType.callSignatures; _i < _a.length; _i++) {
                         var signature = _a[_i];
-                        typeElements.push(signatureToSignatureDeclarationHelper(signature, 170 /* CallSignature */, context));
+                        typeElements.push(signatureToSignatureDeclarationHelper(signature, 172 /* CallSignature */, context));
                     }
                     for (var _b = 0, _c = resolvedType.constructSignatures; _b < _c.length; _b++) {
                         var signature = _c[_b];
                         if (signature.flags & 4 /* Abstract */)
                             continue;
-                        typeElements.push(signatureToSignatureDeclarationHelper(signature, 171 /* ConstructSignature */, context));
+                        typeElements.push(signatureToSignatureDeclarationHelper(signature, 173 /* ConstructSignature */, context));
                     }
-                    if (resolvedType.stringIndexInfo) {
-                        var indexSignature = void 0;
-                        if (resolvedType.objectFlags & 1024 /* ReverseMapped */) {
-                            indexSignature = indexInfoToIndexSignatureDeclarationHelper(createIndexInfo(anyType, resolvedType.stringIndexInfo.isReadonly, resolvedType.stringIndexInfo.declaration), 0 /* String */, context, createElidedInformationPlaceholder(context));
-                        }
-                        else {
-                            indexSignature = indexInfoToIndexSignatureDeclarationHelper(resolvedType.stringIndexInfo, 0 /* String */, context, /*typeNode*/ undefined);
-                        }
-                        typeElements.push(indexSignature);
-                    }
-                    if (resolvedType.numberIndexInfo) {
-                        typeElements.push(indexInfoToIndexSignatureDeclarationHelper(resolvedType.numberIndexInfo, 1 /* Number */, context, /*typeNode*/ undefined));
+                    for (var _d = 0, _e = resolvedType.indexInfos; _d < _e.length; _d++) {
+                        var info = _e[_d];
+                        typeElements.push(indexInfoToIndexSignatureDeclarationHelper(info, context, resolvedType.objectFlags & 1024 /* ReverseMapped */ ? createElidedInformationPlaceholder(context) : undefined));
                     }
                     var properties = resolvedType.properties;
                     if (!properties) {
                         return typeElements;
                     }
                     var i = 0;
-                    for (var _d = 0, properties_1 = properties; _d < properties_1.length; _d++) {
-                        var propertySymbol = properties_1[_d];
+                    for (var _f = 0, properties_1 = properties; _f < properties_1.length; _f++) {
+                        var propertySymbol = properties_1[_f];
                         i++;
                         if (context.flags & 2048 /* WriteClassExpressionAsTypeLiteral */) {
                             if (propertySymbol.flags & 4194304 /* Prototype */) {
@@ -49312,7 +50393,7 @@
                 if (!(context.flags & 1 /* NoTruncation */)) {
                     return ts.factory.createTypeReferenceNode(ts.factory.createIdentifier("..."), /*typeArguments*/ undefined);
                 }
-                return ts.factory.createKeywordTypeNode(128 /* AnyKeyword */);
+                return ts.factory.createKeywordTypeNode(129 /* AnyKeyword */);
             }
             function shouldUsePlaceholderForProperty(propertySymbol, context) {
                 var _a;
@@ -49328,27 +50409,32 @@
                             && !(ts.getObjectFlags(ts.last(context.reverseMappedStack).propertyType) & 16 /* Anonymous */)));
             }
             function addPropertyToElementList(propertySymbol, context, typeElements) {
-                var _a;
+                var _a, _b;
                 var propertyIsReverseMapped = !!(ts.getCheckFlags(propertySymbol) & 8192 /* ReverseMapped */);
                 var propertyType = shouldUsePlaceholderForProperty(propertySymbol, context) ?
-                    anyType : getTypeOfSymbol(propertySymbol);
+                    anyType : getNonMissingTypeOfSymbol(propertySymbol);
                 var saveEnclosingDeclaration = context.enclosingDeclaration;
                 context.enclosingDeclaration = undefined;
                 if (context.tracker.trackSymbol && ts.getCheckFlags(propertySymbol) & 4096 /* Late */ && isLateBoundName(propertySymbol.escapedName)) {
-                    var decl = ts.first(propertySymbol.declarations);
-                    if (propertySymbol.declarations && hasLateBindableName(decl)) {
-                        if (ts.isBinaryExpression(decl)) {
-                            var name = ts.getNameOfDeclaration(decl);
-                            if (name && ts.isElementAccessExpression(name) && ts.isPropertyAccessEntityNameExpression(name.argumentExpression)) {
-                                trackComputedName(name.argumentExpression, saveEnclosingDeclaration, context);
+                    if (propertySymbol.declarations) {
+                        var decl = ts.first(propertySymbol.declarations);
+                        if (hasLateBindableName(decl)) {
+                            if (ts.isBinaryExpression(decl)) {
+                                var name = ts.getNameOfDeclaration(decl);
+                                if (name && ts.isElementAccessExpression(name) && ts.isPropertyAccessEntityNameExpression(name.argumentExpression)) {
+                                    trackComputedName(name.argumentExpression, saveEnclosingDeclaration, context);
+                                }
+                            }
+                            else {
+                                trackComputedName(decl.name.expression, saveEnclosingDeclaration, context);
                             }
                         }
-                        else {
-                            trackComputedName(decl.name.expression, saveEnclosingDeclaration, context);
-                        }
+                    }
+                    else if ((_a = context.tracker) === null || _a === void 0 ? void 0 : _a.reportNonSerializableProperty) {
+                        context.tracker.reportNonSerializableProperty(symbolToString(propertySymbol));
                     }
                 }
-                context.enclosingDeclaration = propertySymbol.valueDeclaration || ((_a = propertySymbol.declarations) === null || _a === void 0 ? void 0 : _a[0]) || saveEnclosingDeclaration;
+                context.enclosingDeclaration = propertySymbol.valueDeclaration || ((_b = propertySymbol.declarations) === null || _b === void 0 ? void 0 : _b[0]) || saveEnclosingDeclaration;
                 var propertyName = getPropertyNameNodeForSymbol(propertySymbol, context);
                 context.enclosingDeclaration = saveEnclosingDeclaration;
                 context.approximateLength += (ts.symbolName(propertySymbol).length + 1);
@@ -49357,7 +50443,7 @@
                     var signatures = getSignaturesOfType(filterType(propertyType, function (t) { return !(t.flags & 32768 /* Undefined */); }), 0 /* Call */);
                     for (var _i = 0, signatures_1 = signatures; _i < signatures_1.length; _i++) {
                         var signature = signatures_1[_i];
-                        var methodDeclaration = signatureToSignatureDeclarationHelper(signature, 165 /* MethodSignature */, context, { name: propertyName, questionToken: optionalToken });
+                        var methodDeclaration = signatureToSignatureDeclarationHelper(signature, 166 /* MethodSignature */, context, { name: propertyName, questionToken: optionalToken });
                         typeElements.push(preserveCommentsOn(methodDeclaration));
                     }
                 }
@@ -49371,12 +50457,12 @@
                             context.reverseMappedStack || (context.reverseMappedStack = []);
                             context.reverseMappedStack.push(propertySymbol);
                         }
-                        propertyTypeNode = propertyType ? serializeTypeForDeclaration(context, propertyType, propertySymbol, saveEnclosingDeclaration) : ts.factory.createKeywordTypeNode(128 /* AnyKeyword */);
+                        propertyTypeNode = propertyType ? serializeTypeForDeclaration(context, propertyType, propertySymbol, saveEnclosingDeclaration) : ts.factory.createKeywordTypeNode(129 /* AnyKeyword */);
                         if (propertyIsReverseMapped) {
                             context.reverseMappedStack.pop();
                         }
                     }
-                    var modifiers = isReadonlySymbol(propertySymbol) ? [ts.factory.createToken(142 /* ReadonlyKeyword */)] : undefined;
+                    var modifiers = isReadonlySymbol(propertySymbol) ? [ts.factory.createToken(143 /* ReadonlyKeyword */)] : undefined;
                     if (modifiers) {
                         context.approximateLength += 9;
                     }
@@ -49385,8 +50471,8 @@
                 }
                 function preserveCommentsOn(node) {
                     var _a;
-                    if (ts.some(propertySymbol.declarations, function (d) { return d.kind === 337 /* JSDocPropertyTag */; })) {
-                        var d = (_a = propertySymbol.declarations) === null || _a === void 0 ? void 0 : _a.find(function (d) { return d.kind === 337 /* JSDocPropertyTag */; });
+                    if (ts.some(propertySymbol.declarations, function (d) { return d.kind === 342 /* JSDocPropertyTag */; })) {
+                        var d = (_a = propertySymbol.declarations) === null || _a === void 0 ? void 0 : _a.find(function (d) { return d.kind === 342 /* JSDocPropertyTag */; });
                         var commentText = ts.getTextOfJSDocComment(d.comment);
                         if (commentText) {
                             ts.setSyntheticLeadingComments(node, [{ kind: 3 /* MultiLineCommentTrivia */, text: "*\n * " + commentText.replace(/\n/g, "\n * ") + "\n ", pos: -1, end: -1, hasTrailingNewLine: true }]);
@@ -49470,9 +50556,9 @@
                     || !!a.symbol && a.symbol === b.symbol
                     || !!a.aliasSymbol && a.aliasSymbol === b.aliasSymbol;
             }
-            function indexInfoToIndexSignatureDeclarationHelper(indexInfo, kind, context, typeNode) {
+            function indexInfoToIndexSignatureDeclarationHelper(indexInfo, context, typeNode) {
                 var name = ts.getNameFromIndexInfo(indexInfo) || "x";
-                var indexerTypeNode = ts.factory.createKeywordTypeNode(kind === 0 /* String */ ? 147 /* StringKeyword */ : 144 /* NumberKeyword */);
+                var indexerTypeNode = typeToTypeNodeHelper(indexInfo.keyType, context);
                 var indexingParameter = ts.factory.createParameterDeclaration(
                 /*decorators*/ undefined, 
                 /*modifiers*/ undefined, 
@@ -49487,13 +50573,14 @@
                 }
                 context.approximateLength += (name.length + 4);
                 return ts.factory.createIndexSignature(
-                /*decorators*/ undefined, indexInfo.isReadonly ? [ts.factory.createToken(142 /* ReadonlyKeyword */)] : undefined, [indexingParameter], typeNode);
+                /*decorators*/ undefined, indexInfo.isReadonly ? [ts.factory.createToken(143 /* ReadonlyKeyword */)] : undefined, [indexingParameter], typeNode);
             }
             function signatureToSignatureDeclarationHelper(signature, kind, context, options) {
                 var _a, _b, _c, _d;
                 var suppressAny = context.flags & 256 /* SuppressAnyReturnType */;
                 if (suppressAny)
                     context.flags &= ~256 /* SuppressAnyReturnType */; // suppress only toplevel `any`s
+                context.approximateLength += 3; // Usually a signature contributes a few more characters than this, but 3 is the minimum
                 var typeParameters;
                 var typeArguments;
                 if (context.flags & 32 /* WriteTypeArgumentsOfSignature */ && signature.target && signature.mapper && signature.target.typeParameters) {
@@ -49504,7 +50591,7 @@
                 }
                 var expandedParams = getExpandedParameters(signature, /*skipUnionExpanding*/ true)[0];
                 // If the expanded parameter list had a variadic in a non-trailing position, don't expand it
-                var parameters = (ts.some(expandedParams, function (p) { return p !== expandedParams[expandedParams.length - 1] && !!(ts.getCheckFlags(p) & 32768 /* RestParameter */); }) ? signature.parameters : expandedParams).map(function (parameter) { return symbolToParameterDeclaration(parameter, context, kind === 167 /* Constructor */, options === null || options === void 0 ? void 0 : options.privateSymbolVisitor, options === null || options === void 0 ? void 0 : options.bundledImports); });
+                var parameters = (ts.some(expandedParams, function (p) { return p !== expandedParams[expandedParams.length - 1] && !!(ts.getCheckFlags(p) & 32768 /* RestParameter */); }) ? signature.parameters : expandedParams).map(function (parameter) { return symbolToParameterDeclaration(parameter, context, kind === 169 /* Constructor */, options === null || options === void 0 ? void 0 : options.privateSymbolVisitor, options === null || options === void 0 ? void 0 : options.bundledImports); });
                 if (signature.thisParameter) {
                     var thisParameter = symbolToParameterDeclaration(signature.thisParameter, context);
                     parameters.unshift(thisParameter);
@@ -49513,7 +50600,7 @@
                 var typePredicate = getTypePredicateOfSignature(signature);
                 if (typePredicate) {
                     var assertsModifier = typePredicate.kind === 2 /* AssertsThis */ || typePredicate.kind === 3 /* AssertsIdentifier */ ?
-                        ts.factory.createToken(127 /* AssertsKeyword */) :
+                        ts.factory.createToken(128 /* AssertsKeyword */) :
                         undefined;
                     var parameterName = typePredicate.kind === 1 /* Identifier */ || typePredicate.kind === 3 /* AssertsIdentifier */ ?
                         ts.setEmitFlags(ts.factory.createIdentifier(typePredicate.parameterName), 16777216 /* NoAsciiEscaping */) :
@@ -49527,29 +50614,28 @@
                         returnTypeNode = serializeReturnTypeForSignature(context, returnType, signature, options === null || options === void 0 ? void 0 : options.privateSymbolVisitor, options === null || options === void 0 ? void 0 : options.bundledImports);
                     }
                     else if (!suppressAny) {
-                        returnTypeNode = ts.factory.createKeywordTypeNode(128 /* AnyKeyword */);
+                        returnTypeNode = ts.factory.createKeywordTypeNode(129 /* AnyKeyword */);
                     }
                 }
                 var modifiers = options === null || options === void 0 ? void 0 : options.modifiers;
-                if ((kind === 176 /* ConstructorType */) && signature.flags & 4 /* Abstract */) {
+                if ((kind === 178 /* ConstructorType */) && signature.flags & 4 /* Abstract */) {
                     var flags = ts.modifiersToFlags(modifiers);
                     modifiers = ts.factory.createModifiersFromModifierFlags(flags | 128 /* Abstract */);
                 }
-                context.approximateLength += 3; // Usually a signature contributes a few more characters than this, but 3 is the minimum
-                var node = kind === 170 /* CallSignature */ ? ts.factory.createCallSignature(typeParameters, parameters, returnTypeNode) :
-                    kind === 171 /* ConstructSignature */ ? ts.factory.createConstructSignature(typeParameters, parameters, returnTypeNode) :
-                        kind === 165 /* MethodSignature */ ? ts.factory.createMethodSignature(modifiers, (_a = options === null || options === void 0 ? void 0 : options.name) !== null && _a !== void 0 ? _a : ts.factory.createIdentifier(""), options === null || options === void 0 ? void 0 : options.questionToken, typeParameters, parameters, returnTypeNode) :
-                            kind === 166 /* MethodDeclaration */ ? ts.factory.createMethodDeclaration(/*decorators*/ undefined, modifiers, /*asteriskToken*/ undefined, (_b = options === null || options === void 0 ? void 0 : options.name) !== null && _b !== void 0 ? _b : ts.factory.createIdentifier(""), /*questionToken*/ undefined, typeParameters, parameters, returnTypeNode, /*body*/ undefined) :
-                                kind === 167 /* Constructor */ ? ts.factory.createConstructorDeclaration(/*decorators*/ undefined, modifiers, parameters, /*body*/ undefined) :
-                                    kind === 168 /* GetAccessor */ ? ts.factory.createGetAccessorDeclaration(/*decorators*/ undefined, modifiers, (_c = options === null || options === void 0 ? void 0 : options.name) !== null && _c !== void 0 ? _c : ts.factory.createIdentifier(""), parameters, returnTypeNode, /*body*/ undefined) :
-                                        kind === 169 /* SetAccessor */ ? ts.factory.createSetAccessorDeclaration(/*decorators*/ undefined, modifiers, (_d = options === null || options === void 0 ? void 0 : options.name) !== null && _d !== void 0 ? _d : ts.factory.createIdentifier(""), parameters, /*body*/ undefined) :
-                                            kind === 172 /* IndexSignature */ ? ts.factory.createIndexSignature(/*decorators*/ undefined, modifiers, parameters, returnTypeNode) :
-                                                kind === 309 /* JSDocFunctionType */ ? ts.factory.createJSDocFunctionType(parameters, returnTypeNode) :
-                                                    kind === 175 /* FunctionType */ ? ts.factory.createFunctionTypeNode(typeParameters, parameters, returnTypeNode !== null && returnTypeNode !== void 0 ? returnTypeNode : ts.factory.createTypeReferenceNode(ts.factory.createIdentifier(""))) :
-                                                        kind === 176 /* ConstructorType */ ? ts.factory.createConstructorTypeNode(modifiers, typeParameters, parameters, returnTypeNode !== null && returnTypeNode !== void 0 ? returnTypeNode : ts.factory.createTypeReferenceNode(ts.factory.createIdentifier(""))) :
-                                                            kind === 252 /* FunctionDeclaration */ ? ts.factory.createFunctionDeclaration(/*decorators*/ undefined, modifiers, /*asteriskToken*/ undefined, (options === null || options === void 0 ? void 0 : options.name) ? ts.cast(options.name, ts.isIdentifier) : ts.factory.createIdentifier(""), typeParameters, parameters, returnTypeNode, /*body*/ undefined) :
-                                                                kind === 209 /* FunctionExpression */ ? ts.factory.createFunctionExpression(modifiers, /*asteriskToken*/ undefined, (options === null || options === void 0 ? void 0 : options.name) ? ts.cast(options.name, ts.isIdentifier) : ts.factory.createIdentifier(""), typeParameters, parameters, returnTypeNode, ts.factory.createBlock([])) :
-                                                                    kind === 210 /* ArrowFunction */ ? ts.factory.createArrowFunction(modifiers, typeParameters, parameters, returnTypeNode, /*equalsGreaterThanToken*/ undefined, ts.factory.createBlock([])) :
+                var node = kind === 172 /* CallSignature */ ? ts.factory.createCallSignature(typeParameters, parameters, returnTypeNode) :
+                    kind === 173 /* ConstructSignature */ ? ts.factory.createConstructSignature(typeParameters, parameters, returnTypeNode) :
+                        kind === 166 /* MethodSignature */ ? ts.factory.createMethodSignature(modifiers, (_a = options === null || options === void 0 ? void 0 : options.name) !== null && _a !== void 0 ? _a : ts.factory.createIdentifier(""), options === null || options === void 0 ? void 0 : options.questionToken, typeParameters, parameters, returnTypeNode) :
+                            kind === 167 /* MethodDeclaration */ ? ts.factory.createMethodDeclaration(/*decorators*/ undefined, modifiers, /*asteriskToken*/ undefined, (_b = options === null || options === void 0 ? void 0 : options.name) !== null && _b !== void 0 ? _b : ts.factory.createIdentifier(""), /*questionToken*/ undefined, typeParameters, parameters, returnTypeNode, /*body*/ undefined) :
+                                kind === 169 /* Constructor */ ? ts.factory.createConstructorDeclaration(/*decorators*/ undefined, modifiers, parameters, /*body*/ undefined) :
+                                    kind === 170 /* GetAccessor */ ? ts.factory.createGetAccessorDeclaration(/*decorators*/ undefined, modifiers, (_c = options === null || options === void 0 ? void 0 : options.name) !== null && _c !== void 0 ? _c : ts.factory.createIdentifier(""), parameters, returnTypeNode, /*body*/ undefined) :
+                                        kind === 171 /* SetAccessor */ ? ts.factory.createSetAccessorDeclaration(/*decorators*/ undefined, modifiers, (_d = options === null || options === void 0 ? void 0 : options.name) !== null && _d !== void 0 ? _d : ts.factory.createIdentifier(""), parameters, /*body*/ undefined) :
+                                            kind === 174 /* IndexSignature */ ? ts.factory.createIndexSignature(/*decorators*/ undefined, modifiers, parameters, returnTypeNode) :
+                                                kind === 312 /* JSDocFunctionType */ ? ts.factory.createJSDocFunctionType(parameters, returnTypeNode) :
+                                                    kind === 177 /* FunctionType */ ? ts.factory.createFunctionTypeNode(typeParameters, parameters, returnTypeNode !== null && returnTypeNode !== void 0 ? returnTypeNode : ts.factory.createTypeReferenceNode(ts.factory.createIdentifier(""))) :
+                                                        kind === 178 /* ConstructorType */ ? ts.factory.createConstructorTypeNode(modifiers, typeParameters, parameters, returnTypeNode !== null && returnTypeNode !== void 0 ? returnTypeNode : ts.factory.createTypeReferenceNode(ts.factory.createIdentifier(""))) :
+                                                            kind === 254 /* FunctionDeclaration */ ? ts.factory.createFunctionDeclaration(/*decorators*/ undefined, modifiers, /*asteriskToken*/ undefined, (options === null || options === void 0 ? void 0 : options.name) ? ts.cast(options.name, ts.isIdentifier) : ts.factory.createIdentifier(""), typeParameters, parameters, returnTypeNode, /*body*/ undefined) :
+                                                                kind === 211 /* FunctionExpression */ ? ts.factory.createFunctionExpression(modifiers, /*asteriskToken*/ undefined, (options === null || options === void 0 ? void 0 : options.name) ? ts.cast(options.name, ts.isIdentifier) : ts.factory.createIdentifier(""), typeParameters, parameters, returnTypeNode, ts.factory.createBlock([])) :
+                                                                    kind === 212 /* ArrowFunction */ ? ts.factory.createArrowFunction(modifiers, typeParameters, parameters, returnTypeNode, /*equalsGreaterThanToken*/ undefined, ts.factory.createBlock([])) :
                                                                         ts.Debug.assertNever(kind);
                 if (typeArguments) {
                     node.typeArguments = ts.factory.createNodeArray(typeArguments);
@@ -49571,9 +50657,9 @@
                 return typeParameterToDeclarationWithConstraint(type, context, constraintNode);
             }
             function symbolToParameterDeclaration(parameterSymbol, context, preserveModifierFlags, privateSymbolVisitor, bundledImports) {
-                var parameterDeclaration = ts.getDeclarationOfKind(parameterSymbol, 161 /* Parameter */);
+                var parameterDeclaration = ts.getDeclarationOfKind(parameterSymbol, 162 /* Parameter */);
                 if (!parameterDeclaration && !ts.isTransientSymbol(parameterSymbol)) {
-                    parameterDeclaration = ts.getDeclarationOfKind(parameterSymbol, 330 /* JSDocParameterTag */);
+                    parameterDeclaration = ts.getDeclarationOfKind(parameterSymbol, 335 /* JSDocParameterTag */);
                 }
                 var parameterType = getTypeOfSymbol(parameterSymbol);
                 if (parameterDeclaration && isRequiredInitializedParameter(parameterDeclaration)) {
@@ -49587,8 +50673,8 @@
                 var isRest = parameterDeclaration && ts.isRestParameter(parameterDeclaration) || ts.getCheckFlags(parameterSymbol) & 32768 /* RestParameter */;
                 var dotDotDotToken = isRest ? ts.factory.createToken(25 /* DotDotDotToken */) : undefined;
                 var name = parameterDeclaration ? parameterDeclaration.name ?
-                    parameterDeclaration.name.kind === 78 /* Identifier */ ? ts.setEmitFlags(ts.factory.cloneNode(parameterDeclaration.name), 16777216 /* NoAsciiEscaping */) :
-                        parameterDeclaration.name.kind === 158 /* QualifiedName */ ? ts.setEmitFlags(ts.factory.cloneNode(parameterDeclaration.name.right), 16777216 /* NoAsciiEscaping */) :
+                    parameterDeclaration.name.kind === 79 /* Identifier */ ? ts.setEmitFlags(ts.factory.cloneNode(parameterDeclaration.name), 16777216 /* NoAsciiEscaping */) :
+                        parameterDeclaration.name.kind === 159 /* QualifiedName */ ? ts.setEmitFlags(ts.factory.cloneNode(parameterDeclaration.name.right), 16777216 /* NoAsciiEscaping */) :
                             cloneBindingName(parameterDeclaration.name) :
                     ts.symbolName(parameterSymbol) :
                     ts.symbolName(parameterSymbol);
@@ -49753,11 +50839,11 @@
             }
             function getSpecifierForModuleSymbol(symbol, context) {
                 var _a;
-                var file = ts.getDeclarationOfKind(symbol, 298 /* SourceFile */);
+                var file = ts.getDeclarationOfKind(symbol, 300 /* SourceFile */);
                 if (!file) {
                     var equivalentFileSymbol = ts.firstDefined(symbol.declarations, function (d) { return getFileSymbolIfFileSymbolExportEqualsContainer(d, symbol); });
                     if (equivalentFileSymbol) {
-                        file = ts.getDeclarationOfKind(equivalentFileSymbol, 298 /* SourceFile */);
+                        file = ts.getDeclarationOfKind(equivalentFileSymbol, 300 /* SourceFile */);
                     }
                 }
                 if (file && file.moduleName !== undefined) {
@@ -49909,7 +50995,7 @@
                 return false;
             }
             function typeParameterToName(type, context) {
-                var _a;
+                var _a, _b;
                 if (context.flags & 4 /* GenerateNamesForShadowedTypeParams */ && context.typeParameterNames) {
                     var cached = context.typeParameterNames.get(getTypeId(type));
                     if (cached) {
@@ -49917,22 +51003,25 @@
                     }
                 }
                 var result = symbolToName(type.symbol, context, 788968 /* Type */, /*expectsIdentifier*/ true);
-                if (!(result.kind & 78 /* Identifier */)) {
+                if (!(result.kind & 79 /* Identifier */)) {
                     return ts.factory.createIdentifier("(Missing type parameter)");
                 }
                 if (context.flags & 4 /* GenerateNamesForShadowedTypeParams */) {
                     var rawtext = result.escapedText;
-                    var i = 0;
+                    var i = ((_a = context.typeParameterNamesByTextNextNameCount) === null || _a === void 0 ? void 0 : _a.get(rawtext)) || 0;
                     var text = rawtext;
-                    while (((_a = context.typeParameterNamesByText) === null || _a === void 0 ? void 0 : _a.has(text)) || typeParameterShadowsNameInScope(text, context, type)) {
+                    while (((_b = context.typeParameterNamesByText) === null || _b === void 0 ? void 0 : _b.has(text)) || typeParameterShadowsNameInScope(text, context, type)) {
                         i++;
                         text = rawtext + "_" + i;
                     }
                     if (text !== rawtext) {
                         result = ts.factory.createIdentifier(text, result.typeArguments);
                     }
+                    // avoiding iterations of the above loop turns out to be worth it when `i` starts to get large, so we cache the max
+                    // `i` we've used thus far, to save work later
+                    (context.typeParameterNamesByTextNextNameCount || (context.typeParameterNamesByTextNextNameCount = new ts.Map())).set(rawtext, i);
                     (context.typeParameterNames || (context.typeParameterNames = new ts.Map())).set(getTypeId(type), result);
-                    (context.typeParameterNamesByText || (context.typeParameterNamesByText = new ts.Set())).add(result.escapedText);
+                    (context.typeParameterNamesByText || (context.typeParameterNamesByText = new ts.Set())).add(rawtext);
                 }
                 return result;
             }
@@ -50071,6 +51160,7 @@
                 if (initial.typeParameterSymbolList) {
                     initial.typeParameterSymbolList = new ts.Set(initial.typeParameterSymbolList);
                 }
+                initial.tracker = wrapSymbolTrackerToReportForContext(initial, initial.tracker);
                 return initial;
             }
             function getDeclarationWithTypeAnnotation(symbol, enclosingDeclaration) {
@@ -50160,17 +51250,17 @@
                 return transformed === existing ? ts.setTextRange(ts.factory.cloneNode(existing), existing) : transformed;
                 function visitExistingNodeTreeSymbols(node) {
                     // We don't _actually_ support jsdoc namepath types, emit `any` instead
-                    if (ts.isJSDocAllType(node) || node.kind === 311 /* JSDocNamepathType */) {
-                        return ts.factory.createKeywordTypeNode(128 /* AnyKeyword */);
+                    if (ts.isJSDocAllType(node) || node.kind === 314 /* JSDocNamepathType */) {
+                        return ts.factory.createKeywordTypeNode(129 /* AnyKeyword */);
                     }
                     if (ts.isJSDocUnknownType(node)) {
-                        return ts.factory.createKeywordTypeNode(152 /* UnknownKeyword */);
+                        return ts.factory.createKeywordTypeNode(153 /* UnknownKeyword */);
                     }
                     if (ts.isJSDocNullableType(node)) {
                         return ts.factory.createUnionTypeNode([ts.visitNode(node.type, visitExistingNodeTreeSymbols), ts.factory.createLiteralTypeNode(ts.factory.createNull())]);
                     }
                     if (ts.isJSDocOptionalType(node)) {
-                        return ts.factory.createUnionTypeNode([ts.visitNode(node.type, visitExistingNodeTreeSymbols), ts.factory.createKeywordTypeNode(150 /* UndefinedKeyword */)]);
+                        return ts.factory.createUnionTypeNode([ts.visitNode(node.type, visitExistingNodeTreeSymbols), ts.factory.createKeywordTypeNode(151 /* UndefinedKeyword */)]);
                     }
                     if (ts.isJSDocNonNullableType(node)) {
                         return ts.visitNode(node.type, visitExistingNodeTreeSymbols);
@@ -50184,11 +51274,11 @@
                             var typeViaParent = getTypeOfPropertyOfType(getTypeFromTypeNode(node), name.escapedText);
                             var overrideTypeNode = typeViaParent && t.typeExpression && getTypeFromTypeNode(t.typeExpression.type) !== typeViaParent ? typeToTypeNodeHelper(typeViaParent, context) : undefined;
                             return ts.factory.createPropertySignature(
-                            /*modifiers*/ undefined, name, t.isBracketed || t.typeExpression && ts.isJSDocOptionalType(t.typeExpression.type) ? ts.factory.createToken(57 /* QuestionToken */) : undefined, overrideTypeNode || (t.typeExpression && ts.visitNode(t.typeExpression.type, visitExistingNodeTreeSymbols)) || ts.factory.createKeywordTypeNode(128 /* AnyKeyword */));
+                            /*modifiers*/ undefined, name, t.isBracketed || t.typeExpression && ts.isJSDocOptionalType(t.typeExpression.type) ? ts.factory.createToken(57 /* QuestionToken */) : undefined, overrideTypeNode || (t.typeExpression && ts.visitNode(t.typeExpression.type, visitExistingNodeTreeSymbols)) || ts.factory.createKeywordTypeNode(129 /* AnyKeyword */));
                         }));
                     }
                     if (ts.isTypeReferenceNode(node) && ts.isIdentifier(node.typeName) && node.typeName.escapedText === "") {
-                        return ts.setOriginalNode(ts.factory.createKeywordTypeNode(128 /* AnyKeyword */), node);
+                        return ts.setOriginalNode(ts.factory.createKeywordTypeNode(129 /* AnyKeyword */), node);
                     }
                     if ((ts.isExpressionWithTypeArguments(node) || ts.isTypeReferenceNode(node)) && ts.isJSDocIndexSignature(node)) {
                         return ts.factory.createTypeLiteralNode([ts.factory.createIndexSignature(
@@ -50205,13 +51295,13 @@
                             return ts.factory.createConstructorTypeNode(node.modifiers, ts.visitNodes(node.typeParameters, visitExistingNodeTreeSymbols), ts.mapDefined(node.parameters, function (p, i) { return p.name && ts.isIdentifier(p.name) && p.name.escapedText === "new" ? (newTypeNode_1 = p.type, undefined) : ts.factory.createParameterDeclaration(
                             /*decorators*/ undefined, 
                             /*modifiers*/ undefined, getEffectiveDotDotDotForParameter(p), getNameForJSDocFunctionParameter(p, i), p.questionToken, ts.visitNode(p.type, visitExistingNodeTreeSymbols), 
-                            /*initializer*/ undefined); }), ts.visitNode(newTypeNode_1 || node.type, visitExistingNodeTreeSymbols) || ts.factory.createKeywordTypeNode(128 /* AnyKeyword */));
+                            /*initializer*/ undefined); }), ts.visitNode(newTypeNode_1 || node.type, visitExistingNodeTreeSymbols) || ts.factory.createKeywordTypeNode(129 /* AnyKeyword */));
                         }
                         else {
                             return ts.factory.createFunctionTypeNode(ts.visitNodes(node.typeParameters, visitExistingNodeTreeSymbols), ts.map(node.parameters, function (p, i) { return ts.factory.createParameterDeclaration(
                             /*decorators*/ undefined, 
                             /*modifiers*/ undefined, getEffectiveDotDotDotForParameter(p), getNameForJSDocFunctionParameter(p, i), p.questionToken, ts.visitNode(p.type, visitExistingNodeTreeSymbols), 
-                            /*initializer*/ undefined); }), ts.visitNode(node.type, visitExistingNodeTreeSymbols) || ts.factory.createKeywordTypeNode(128 /* AnyKeyword */));
+                            /*initializer*/ undefined); }), ts.visitNode(node.type, visitExistingNodeTreeSymbols) || ts.factory.createKeywordTypeNode(129 /* AnyKeyword */));
                         }
                     }
                     if (ts.isTypeReferenceNode(node) && ts.isInJSDoc(node) && (!existingTypeNodeIsNotReferenceOrIsReferenceWithCompatibleTypeArgumentCount(node, getTypeFromTypeNode(node)) || getIntendedTypeFromJSDocTypeReference(node) || unknownSymbol === resolveTypeReferenceName(getTypeReferenceName(node), 788968 /* Type */, /*ignoreErrors*/ true))) {
@@ -50279,8 +51369,8 @@
                 }
             }
             function symbolTableToDeclarationStatements(symbolTable, context, bundled) {
-                var serializePropertySymbolForClass = makeSerializePropertySymbol(ts.factory.createPropertyDeclaration, 166 /* MethodDeclaration */, /*useAcessors*/ true);
-                var serializePropertySymbolForInterfaceWorker = makeSerializePropertySymbol(function (_decorators, mods, name, question, type) { return ts.factory.createPropertySignature(mods, name, question, type); }, 165 /* MethodSignature */, /*useAcessors*/ false);
+                var serializePropertySymbolForClass = makeSerializePropertySymbol(ts.factory.createPropertyDeclaration, 167 /* MethodDeclaration */, /*useAcessors*/ true);
+                var serializePropertySymbolForInterfaceWorker = makeSerializePropertySymbol(function (_decorators, mods, name, question, type) { return ts.factory.createPropertySignature(mods, name, question, type); }, 166 /* MethodSignature */, /*useAcessors*/ false);
                 // TODO: Use `setOriginalNode` on original declaration names where possible so these declarations see some kind of
                 // declaration mapping
                 // We save the enclosing declaration off here so it's not adjusted by well-meaning declaration
@@ -50301,9 +51391,11 @@
                                 }
                             }
                             else if (oldcontext.tracker && oldcontext.tracker.trackSymbol) {
-                                oldcontext.tracker.trackSymbol(sym, decl, meaning);
+                                return oldcontext.tracker.trackSymbol(sym, decl, meaning);
                             }
+                            return false;
                         } }) });
+                context.tracker = wrapSymbolTrackerToReportForContext(context, context.tracker);
                 ts.forEachEntry(symbolTable, function (symbol, name) {
                     var baseName = ts.unescapeLeadingUnderscores(name);
                     void getInternalSymbolName(symbol, baseName); // Called to cache values into `usedSymbolNames` and `remappedSymbolNames`
@@ -50318,7 +51410,7 @@
                 visitSymbolTable(symbolTable);
                 return mergeRedundantStatements(results);
                 function isIdentifierAndNotUndefined(node) {
-                    return !!node && node.kind === 78 /* Identifier */;
+                    return !!node && node.kind === 79 /* Identifier */;
                 }
                 function getNamesOfDeclaration(statement) {
                     if (ts.isVariableStatement(statement)) {
@@ -50339,12 +51431,12 @@
                         var name_2 = ns.name;
                         var body = ns.body;
                         if (ts.length(excessExports)) {
-                            ns = ts.factory.updateModuleDeclaration(ns, ns.decorators, ns.modifiers, ns.name, body = ts.factory.updateModuleBlock(body, ts.factory.createNodeArray(__spreadArray(__spreadArray([], ns.body.statements), [ts.factory.createExportDeclaration(
+                            ns = ts.factory.updateModuleDeclaration(ns, ns.decorators, ns.modifiers, ns.name, body = ts.factory.updateModuleBlock(body, ts.factory.createNodeArray(__spreadArray(__spreadArray([], ns.body.statements, true), [ts.factory.createExportDeclaration(
                                 /*decorators*/ undefined, 
                                 /*modifiers*/ undefined, 
                                 /*isTypeOnly*/ false, ts.factory.createNamedExports(ts.map(ts.flatMap(excessExports, function (e) { return getNamesOfDeclaration(e); }), function (id) { return ts.factory.createExportSpecifier(/*alias*/ undefined, id); })), 
-                                /*moduleSpecifier*/ undefined)]))));
-                            statements = __spreadArray(__spreadArray(__spreadArray([], statements.slice(0, nsIndex)), [ns]), statements.slice(nsIndex + 1));
+                                /*moduleSpecifier*/ undefined)], false))));
+                            statements = __spreadArray(__spreadArray(__spreadArray([], statements.slice(0, nsIndex), true), [ns], false), statements.slice(nsIndex + 1), true);
                         }
                         // Pass 1: Flatten `export namespace _exports {} export = _exports;` so long as the `export=` only points at a single namespace declaration
                         if (!ts.find(statements, function (s) { return s !== ns && ts.nodeHasName(s, name_2); })) {
@@ -50355,7 +51447,7 @@
                             ts.forEach(body.statements, function (s) {
                                 addResult(s, mixinExportFlag_1 ? 1 /* Export */ : 0 /* None */); // Recalculates the ambient (and export, if applicable from above) flag
                             });
-                            statements = __spreadArray(__spreadArray([], ts.filter(statements, function (s) { return s !== ns && s !== exportAssignment; })), results);
+                            statements = __spreadArray(__spreadArray([], ts.filter(statements, function (s) { return s !== ns && s !== exportAssignment; }), true), results, true);
                         }
                     }
                     return statements;
@@ -50365,11 +51457,11 @@
                     var exports = ts.filter(statements, function (d) { return ts.isExportDeclaration(d) && !d.moduleSpecifier && !!d.exportClause && ts.isNamedExports(d.exportClause); });
                     if (ts.length(exports) > 1) {
                         var nonExports = ts.filter(statements, function (d) { return !ts.isExportDeclaration(d) || !!d.moduleSpecifier || !d.exportClause; });
-                        statements = __spreadArray(__spreadArray([], nonExports), [ts.factory.createExportDeclaration(
+                        statements = __spreadArray(__spreadArray([], nonExports, true), [ts.factory.createExportDeclaration(
                             /*decorators*/ undefined, 
                             /*modifiers*/ undefined, 
                             /*isTypeOnly*/ false, ts.factory.createNamedExports(ts.flatMap(exports, function (e) { return ts.cast(e.exportClause, ts.isNamedExports).elements; })), 
-                            /*moduleSpecifier*/ undefined)]);
+                            /*moduleSpecifier*/ undefined)], false);
                     }
                     // Pass 2b: Also combine all `export {} from "..."` declarations as needed
                     var reexports = ts.filter(statements, function (d) { return ts.isExportDeclaration(d) && !!d.moduleSpecifier && !!d.exportClause && ts.isNamedExports(d.exportClause); });
@@ -50379,12 +51471,12 @@
                             var _loop_9 = function (group_1) {
                                 if (group_1.length > 1) {
                                     // remove group members from statements and then merge group members and add back to statements
-                                    statements = __spreadArray(__spreadArray([], ts.filter(statements, function (s) { return group_1.indexOf(s) === -1; })), [
+                                    statements = __spreadArray(__spreadArray([], ts.filter(statements, function (s) { return group_1.indexOf(s) === -1; }), true), [
                                         ts.factory.createExportDeclaration(
                                         /*decorators*/ undefined, 
                                         /*modifiers*/ undefined, 
                                         /*isTypeOnly*/ false, ts.factory.createNamedExports(ts.flatMap(group_1, function (e) { return ts.cast(e.exportClause, ts.isNamedExports).elements; })), group_1[0].moduleSpecifier)
-                                    ]);
+                                    ], false);
                                 }
                             };
                             for (var _i = 0, groups_1 = groups; _i < groups_1.length; _i++) {
@@ -50487,6 +51579,9 @@
                         var oldContext = context;
                         context = cloneNodeBuilderContext(context);
                         var result = serializeSymbolWorker(symbol, isPrivate, propertyAsAlias);
+                        if (context.reportedDiagnostic) {
+                            oldcontext.reportedDiagnostic = context.reportedDiagnostic; // hoist diagnostic result into outer context
+                        }
                         context = oldContext;
                         return result;
                     }
@@ -50735,13 +51830,13 @@
                     var baseTypes = getBaseTypes(interfaceType);
                     var baseType = ts.length(baseTypes) ? getIntersectionType(baseTypes) : undefined;
                     var members = ts.flatMap(getPropertiesOfType(interfaceType), function (p) { return serializePropertySymbolForInterface(p, baseType); });
-                    var callSignatures = serializeSignatures(0 /* Call */, interfaceType, baseType, 170 /* CallSignature */);
-                    var constructSignatures = serializeSignatures(1 /* Construct */, interfaceType, baseType, 171 /* ConstructSignature */);
+                    var callSignatures = serializeSignatures(0 /* Call */, interfaceType, baseType, 172 /* CallSignature */);
+                    var constructSignatures = serializeSignatures(1 /* Construct */, interfaceType, baseType, 173 /* ConstructSignature */);
                     var indexSignatures = serializeIndexSignatures(interfaceType, baseType);
-                    var heritageClauses = !ts.length(baseTypes) ? undefined : [ts.factory.createHeritageClause(93 /* ExtendsKeyword */, ts.mapDefined(baseTypes, function (b) { return trySerializeAsTypeReference(b, 111551 /* Value */); }))];
+                    var heritageClauses = !ts.length(baseTypes) ? undefined : [ts.factory.createHeritageClause(94 /* ExtendsKeyword */, ts.mapDefined(baseTypes, function (b) { return trySerializeAsTypeReference(b, 111551 /* Value */); }))];
                     addResult(ts.factory.createInterfaceDeclaration(
                     /*decorators*/ undefined, 
-                    /*modifiers*/ undefined, getInternalSymbolName(symbol, symbolName), typeParamDecls, heritageClauses, __spreadArray(__spreadArray(__spreadArray(__spreadArray([], indexSignatures), constructSignatures), callSignatures), members)), modifierFlags);
+                    /*modifiers*/ undefined, getInternalSymbolName(symbol, symbolName), typeParamDecls, heritageClauses, __spreadArray(__spreadArray(__spreadArray(__spreadArray([], indexSignatures, true), constructSignatures, true), callSignatures, true), members, true)), modifierFlags);
                 }
                 function getNamespaceMembersForSerialization(symbol) {
                     return !symbol.exports ? [] : ts.filter(ts.arrayFrom(symbol.exports.values()), isNamespaceMember);
@@ -50805,7 +51900,7 @@
                     for (var _i = 0, signatures_2 = signatures; _i < signatures_2.length; _i++) {
                         var sig = signatures_2[_i];
                         // Each overload becomes a separate function declaration, in order
-                        var decl = signatureToSignatureDeclarationHelper(sig, 252 /* FunctionDeclaration */, context, { name: ts.factory.createIdentifier(localName), privateSymbolVisitor: includePrivateSymbol, bundledImports: bundled });
+                        var decl = signatureToSignatureDeclarationHelper(sig, 254 /* FunctionDeclaration */, context, { name: ts.factory.createIdentifier(localName), privateSymbolVisitor: includePrivateSymbol, bundledImports: bundled });
                         addResult(ts.setTextRange(decl, getSignatureTextRangeLocation(sig)), modifierFlags);
                     }
                     // Module symbol emit will take care of module-y members, provided it has exports
@@ -50879,7 +51974,7 @@
                 }
                 function isNamespaceMember(p) {
                     return !!(p.flags & (788968 /* Type */ | 1920 /* Namespace */ | 2097152 /* Alias */)) ||
-                        !(p.flags & 4194304 /* Prototype */ || p.escapedName === "prototype" || p.valueDeclaration && ts.getEffectiveModifierFlags(p.valueDeclaration) & 32 /* Static */ && ts.isClassLike(p.valueDeclaration.parent));
+                        !(p.flags & 4194304 /* Prototype */ || p.escapedName === "prototype" || p.valueDeclaration && ts.isStatic(p.valueDeclaration) && ts.isClassLike(p.valueDeclaration.parent));
                 }
                 function sanitizeJSDocImplements(clauses) {
                     var result = ts.mapDefined(clauses, function (e) {
@@ -50928,7 +52023,7 @@
                     var staticBaseType = isClass
                         ? getBaseConstructorTypeOfClass(staticType)
                         : anyType;
-                    var heritageClauses = __spreadArray(__spreadArray([], !ts.length(baseTypes) ? [] : [ts.factory.createHeritageClause(93 /* ExtendsKeyword */, ts.map(baseTypes, function (b) { return serializeBaseType(b, staticBaseType, localName); }))]), !ts.length(implementsExpressions) ? [] : [ts.factory.createHeritageClause(116 /* ImplementsKeyword */, implementsExpressions)]);
+                    var heritageClauses = __spreadArray(__spreadArray([], !ts.length(baseTypes) ? [] : [ts.factory.createHeritageClause(94 /* ExtendsKeyword */, ts.map(baseTypes, function (b) { return serializeBaseType(b, staticBaseType, localName); }))], true), !ts.length(implementsExpressions) ? [] : [ts.factory.createHeritageClause(117 /* ImplementsKeyword */, implementsExpressions)], true);
                     var symbolProps = getNonInterhitedProperties(classType, baseTypes, getPropertiesOfType(classType));
                     var publicSymbolProps = ts.filter(symbolProps, function (s) {
                         // `valueDeclaration` could be undefined if inherited from
@@ -50965,12 +52060,12 @@
                         !ts.some(getSignaturesOfType(staticType, 1 /* Construct */));
                     var constructors = isNonConstructableClassLikeInJsFile ?
                         [ts.factory.createConstructorDeclaration(/*decorators*/ undefined, ts.factory.createModifiersFromModifierFlags(8 /* Private */), [], /*body*/ undefined)] :
-                        serializeSignatures(1 /* Construct */, staticType, staticBaseType, 167 /* Constructor */);
+                        serializeSignatures(1 /* Construct */, staticType, staticBaseType, 169 /* Constructor */);
                     var indexSignatures = serializeIndexSignatures(classType, baseTypes[0]);
                     context.enclosingDeclaration = oldEnclosing;
                     addResult(ts.setTextRange(ts.factory.createClassDeclaration(
                     /*decorators*/ undefined, 
-                    /*modifiers*/ undefined, localName, typeParamDecls, heritageClauses, __spreadArray(__spreadArray(__spreadArray(__spreadArray(__spreadArray([], indexSignatures), staticMembers), constructors), publicProperties), privateProperties)), symbol.declarations && ts.filter(symbol.declarations, function (d) { return ts.isClassDeclaration(d) || ts.isClassExpression(d); })[0]), modifierFlags);
+                    /*modifiers*/ undefined, localName, typeParamDecls, heritageClauses, __spreadArray(__spreadArray(__spreadArray(__spreadArray(__spreadArray([], indexSignatures, true), staticMembers, true), constructors, true), publicProperties, true), privateProperties, true)), symbol.declarations && ts.filter(symbol.declarations, function (d) { return ts.isClassDeclaration(d) || ts.isClassExpression(d); })[0]), modifierFlags);
                 }
                 function serializeAsAlias(symbol, localName, modifierFlags) {
                     var _a, _b, _c, _d, _e;
@@ -50992,8 +52087,8 @@
                     var targetName = getInternalSymbolName(target, verbatimTargetName);
                     includePrivateSymbol(target); // the target may be within the same scope - attempt to serialize it first
                     switch (node.kind) {
-                        case 199 /* BindingElement */:
-                            if (((_b = (_a = node.parent) === null || _a === void 0 ? void 0 : _a.parent) === null || _b === void 0 ? void 0 : _b.kind) === 250 /* VariableDeclaration */) {
+                        case 201 /* BindingElement */:
+                            if (((_b = (_a = node.parent) === null || _a === void 0 ? void 0 : _a.parent) === null || _b === void 0 ? void 0 : _b.kind) === 252 /* VariableDeclaration */) {
                                 // const { SomeClass } = require('./lib');
                                 var specifier_1 = getSpecifierForModuleSymbol(target.parent || target, context); // './lib'
                                 var propertyName = node.propertyName;
@@ -51005,13 +52100,13 @@
                             // We don't know how to serialize this (nested?) binding element
                             ts.Debug.failBadSyntaxKind(((_c = node.parent) === null || _c === void 0 ? void 0 : _c.parent) || node, "Unhandled binding element grandparent kind in declaration serialization");
                             break;
-                        case 290 /* ShorthandPropertyAssignment */:
-                            if (((_e = (_d = node.parent) === null || _d === void 0 ? void 0 : _d.parent) === null || _e === void 0 ? void 0 : _e.kind) === 217 /* BinaryExpression */) {
+                        case 292 /* ShorthandPropertyAssignment */:
+                            if (((_e = (_d = node.parent) === null || _d === void 0 ? void 0 : _d.parent) === null || _e === void 0 ? void 0 : _e.kind) === 219 /* BinaryExpression */) {
                                 // module.exports = { SomeClass }
                                 serializeExportSpecifier(ts.unescapeLeadingUnderscores(symbol.escapedName), targetName);
                             }
                             break;
-                        case 250 /* VariableDeclaration */:
+                        case 252 /* VariableDeclaration */:
                             // commonjs require: const x = require('y')
                             if (ts.isPropertyAccessExpression(node.initializer)) {
                                 // const x = require('y').z
@@ -51031,7 +52126,7 @@
                                 break;
                             }
                         // else fall through and treat commonjs require just like import=
-                        case 261 /* ImportEqualsDeclaration */:
+                        case 263 /* ImportEqualsDeclaration */:
                             // This _specifically_ only exists to handle json declarations - where we make aliases, but since
                             // we emit no declarations for the json document, must not refer to it in the declarations
                             if (target.escapedName === "export=" /* ExportEquals */ && ts.some(target.declarations, ts.isJsonSourceFile)) {
@@ -51048,13 +52143,13 @@
                                 ? symbolToName(target, context, 67108863 /* All */, /*expectsIdentifier*/ false)
                                 : ts.factory.createExternalModuleReference(ts.factory.createStringLiteral(getSpecifierForModuleSymbol(target, context)))), isLocalImport ? modifierFlags : 0 /* None */);
                             break;
-                        case 260 /* NamespaceExportDeclaration */:
+                        case 262 /* NamespaceExportDeclaration */:
                             // export as namespace foo
                             // TODO: Not part of a file's local or export symbol tables
                             // Is bound into file.symbol.globalExports instead, which we don't currently traverse
                             addResult(ts.factory.createNamespaceExportDeclaration(ts.idText(node.name)), 0 /* None */);
                             break;
-                        case 263 /* ImportClause */:
+                        case 265 /* ImportClause */:
                             addResult(ts.factory.createImportDeclaration(
                             /*decorators*/ undefined, 
                             /*modifiers*/ undefined, ts.factory.createImportClause(/*isTypeOnly*/ false, ts.factory.createIdentifier(localName), /*namedBindings*/ undefined), 
@@ -51063,18 +52158,18 @@
                             // In such cases, the `target` refers to the module itself already
                             ts.factory.createStringLiteral(getSpecifierForModuleSymbol(target.parent || target, context))), 0 /* None */);
                             break;
-                        case 264 /* NamespaceImport */:
+                        case 266 /* NamespaceImport */:
                             addResult(ts.factory.createImportDeclaration(
                             /*decorators*/ undefined, 
                             /*modifiers*/ undefined, ts.factory.createImportClause(/*isTypeOnly*/ false, /*importClause*/ undefined, ts.factory.createNamespaceImport(ts.factory.createIdentifier(localName))), ts.factory.createStringLiteral(getSpecifierForModuleSymbol(target, context))), 0 /* None */);
                             break;
-                        case 270 /* NamespaceExport */:
+                        case 272 /* NamespaceExport */:
                             addResult(ts.factory.createExportDeclaration(
                             /*decorators*/ undefined, 
                             /*modifiers*/ undefined, 
                             /*isTypeOnly*/ false, ts.factory.createNamespaceExport(ts.factory.createIdentifier(localName)), ts.factory.createStringLiteral(getSpecifierForModuleSymbol(target, context))), 0 /* None */);
                             break;
-                        case 266 /* ImportSpecifier */:
+                        case 268 /* ImportSpecifier */:
                             addResult(ts.factory.createImportDeclaration(
                             /*decorators*/ undefined, 
                             /*modifiers*/ undefined, ts.factory.createImportClause(
@@ -51083,7 +52178,7 @@
                                 ts.factory.createImportSpecifier(localName !== verbatimTargetName ? ts.factory.createIdentifier(verbatimTargetName) : undefined, ts.factory.createIdentifier(localName))
                             ])), ts.factory.createStringLiteral(getSpecifierForModuleSymbol(target.parent || target, context))), 0 /* None */);
                             break;
-                        case 271 /* ExportSpecifier */:
+                        case 273 /* ExportSpecifier */:
                             // does not use localName because the symbol name in this case refers to the name in the exports table,
                             // which we must exactly preserve
                             var specifier = node.parent.parent.moduleSpecifier;
@@ -51091,12 +52186,12 @@
                             // another file
                             serializeExportSpecifier(ts.unescapeLeadingUnderscores(symbol.escapedName), specifier ? verbatimTargetName : targetName, specifier && ts.isStringLiteralLike(specifier) ? ts.factory.createStringLiteral(specifier.text) : undefined);
                             break;
-                        case 267 /* ExportAssignment */:
+                        case 269 /* ExportAssignment */:
                             serializeMaybeAliasAssignment(symbol);
                             break;
-                        case 217 /* BinaryExpression */:
-                        case 202 /* PropertyAccessExpression */:
-                        case 203 /* ElementAccessExpression */:
+                        case 219 /* BinaryExpression */:
+                        case 204 /* PropertyAccessExpression */:
+                        case 205 /* ElementAccessExpression */:
                             // Could be best encoded as though an export specifier or as though an export assignment
                             // If name is default or export=, do an export assignment
                             // Otherwise do an export specifier
@@ -51151,7 +52246,7 @@
                         // a visibility error here (as they're not visible within any scope), but we want to hoist them
                         // into the containing scope anyway, so we want to skip the visibility checks.
                         var oldTrack = context.tracker.trackSymbol;
-                        context.tracker.trackSymbol = ts.noop;
+                        context.tracker.trackSymbol = function () { return false; };
                         if (isExportAssignmentCompatibleSymbolName) {
                             results.push(ts.factory.createExportAssignment(
                             /*decorators*/ undefined, 
@@ -51217,8 +52312,7 @@
                     // whose input is not type annotated (if the input symbol has an annotation we can reuse, we should prefer it)
                     var ctxSrc = ts.getSourceFileOfNode(context.enclosingDeclaration);
                     return ts.getObjectFlags(typeToSerialize) & (16 /* Anonymous */ | 32 /* Mapped */) &&
-                        !getIndexInfoOfType(typeToSerialize, 0 /* String */) &&
-                        !getIndexInfoOfType(typeToSerialize, 1 /* Number */) &&
+                        !ts.length(getIndexInfosOfType(typeToSerialize)) &&
                         !isClassInstanceSide(typeToSerialize) && // While a class instance is potentially representable as a NS, prefer printing a reference to the instance type and serializing the class
                         !!(ts.length(ts.filter(getPropertiesOfType(typeToSerialize), isNamespaceMember)) || ts.length(getSignaturesOfType(typeToSerialize, 0 /* Call */))) &&
                         !ts.length(getSignaturesOfType(typeToSerialize, 1 /* Construct */)) && // TODO: could probably serialize as function + ns + class, now that that's OK
@@ -51356,20 +52450,17 @@
                 }
                 function serializeIndexSignatures(input, baseType) {
                     var results = [];
-                    for (var _i = 0, _a = [0 /* String */, 1 /* Number */]; _i < _a.length; _i++) {
-                        var type = _a[_i];
-                        var info = getIndexInfoOfType(input, type);
-                        if (info) {
-                            if (baseType) {
-                                var baseInfo = getIndexInfoOfType(baseType, type);
-                                if (baseInfo) {
-                                    if (isTypeIdenticalTo(info.type, baseInfo.type)) {
-                                        continue; // elide identical index signatures
-                                    }
+                    for (var _i = 0, _a = getIndexInfosOfType(input); _i < _a.length; _i++) {
+                        var info = _a[_i];
+                        if (baseType) {
+                            var baseInfo = getIndexInfoOfType(baseType, info.keyType);
+                            if (baseInfo) {
+                                if (isTypeIdenticalTo(info.type, baseInfo.type)) {
+                                    continue; // elide identical index signatures
                                 }
                             }
-                            results.push(indexInfoToIndexSignatureDeclarationHelper(info, type, context, /*typeNode*/ undefined));
                         }
+                        results.push(indexInfoToIndexSignatureDeclarationHelper(info, context, /*typeNode*/ undefined));
                     }
                     return results;
                 }
@@ -51466,7 +52557,7 @@
             if (flags === void 0) { flags = 16384 /* UseAliasDefinedOutsideCurrentScope */; }
             return writer ? typePredicateToStringWorker(writer).getText() : ts.usingSingleLineStringWriter(typePredicateToStringWorker);
             function typePredicateToStringWorker(writer) {
-                var predicate = ts.factory.createTypePredicateNode(typePredicate.kind === 2 /* AssertsThis */ || typePredicate.kind === 3 /* AssertsIdentifier */ ? ts.factory.createToken(127 /* AssertsKeyword */) : undefined, typePredicate.kind === 1 /* Identifier */ || typePredicate.kind === 3 /* AssertsIdentifier */ ? ts.factory.createIdentifier(typePredicate.parameterName) : ts.factory.createThisTypeNode(), typePredicate.type && nodeBuilder.typeToTypeNode(typePredicate.type, enclosingDeclaration, toNodeBuilderFlags(flags) | 70221824 /* IgnoreErrors */ | 512 /* WriteTypeParametersInQualifiedName */) // TODO: GH#18217
+                var predicate = ts.factory.createTypePredicateNode(typePredicate.kind === 2 /* AssertsThis */ || typePredicate.kind === 3 /* AssertsIdentifier */ ? ts.factory.createToken(128 /* AssertsKeyword */) : undefined, typePredicate.kind === 1 /* Identifier */ || typePredicate.kind === 3 /* AssertsIdentifier */ ? ts.factory.createIdentifier(typePredicate.parameterName) : ts.factory.createThisTypeNode(), typePredicate.type && nodeBuilder.typeToTypeNode(typePredicate.type, enclosingDeclaration, toNodeBuilderFlags(flags) | 70221824 /* IgnoreErrors */ | 512 /* WriteTypeParametersInQualifiedName */) // TODO: GH#18217
                 );
                 var printer = ts.createPrinter({ removeComments: true });
                 var sourceFile = enclosingDeclaration && ts.getSourceFileOfNode(enclosingDeclaration);
@@ -51513,7 +52604,7 @@
         function getTypeAliasForTypeLiteral(type) {
             if (type.symbol && type.symbol.flags & 2048 /* TypeLiteral */ && type.symbol.declarations) {
                 var node = ts.walkUpParenthesizedTypes(type.symbol.declarations[0].parent);
-                if (node.kind === 255 /* TypeAliasDeclaration */) {
+                if (node.kind === 257 /* TypeAliasDeclaration */) {
                     return getSymbolOfNode(node);
                 }
             }
@@ -51521,11 +52612,11 @@
         }
         function isTopLevelInExternalModuleAugmentation(node) {
             return node && node.parent &&
-                node.parent.kind === 258 /* ModuleBlock */ &&
+                node.parent.kind === 260 /* ModuleBlock */ &&
                 ts.isExternalModuleAugmentation(node.parent.parent);
         }
         function isDefaultBindingContext(location) {
-            return location.kind === 298 /* SourceFile */ || ts.isAmbientModule(location);
+            return location.kind === 300 /* SourceFile */ || ts.isAmbientModule(location);
         }
         function getNameOfSymbolFromNameType(symbol, context) {
             var nameType = getSymbolLinks(symbol).nameType;
@@ -51584,17 +52675,17 @@
                 if (!declaration) {
                     declaration = symbol.declarations[0]; // Declaration may be nameless, but we'll try anyway
                 }
-                if (declaration.parent && declaration.parent.kind === 250 /* VariableDeclaration */) {
+                if (declaration.parent && declaration.parent.kind === 252 /* VariableDeclaration */) {
                     return ts.declarationNameToString(declaration.parent.name);
                 }
                 switch (declaration.kind) {
-                    case 222 /* ClassExpression */:
-                    case 209 /* FunctionExpression */:
-                    case 210 /* ArrowFunction */:
+                    case 224 /* ClassExpression */:
+                    case 211 /* FunctionExpression */:
+                    case 212 /* ArrowFunction */:
                         if (context && !context.encounteredError && !(context.flags & 131072 /* AllowAnonymousIdentifier */)) {
                             context.encounteredError = true;
                         }
-                        return declaration.kind === 222 /* ClassExpression */ ? "(Anonymous class)" : "(Anonymous function)";
+                        return declaration.kind === 224 /* ClassExpression */ ? "(Anonymous class)" : "(Anonymous function)";
                 }
             }
             var name = getNameOfSymbolFromNameType(symbol, context);
@@ -51611,28 +52702,28 @@
             return false;
             function determineIfDeclarationIsVisible() {
                 switch (node.kind) {
-                    case 328 /* JSDocCallbackTag */:
-                    case 335 /* JSDocTypedefTag */:
-                    case 329 /* JSDocEnumTag */:
+                    case 333 /* JSDocCallbackTag */:
+                    case 340 /* JSDocTypedefTag */:
+                    case 334 /* JSDocEnumTag */:
                         // Top-level jsdoc type aliases are considered exported
                         // First parent is comment node, second is hosting declaration or token; we only care about those tokens or declarations whose parent is a source file
                         return !!(node.parent && node.parent.parent && node.parent.parent.parent && ts.isSourceFile(node.parent.parent.parent));
-                    case 199 /* BindingElement */:
+                    case 201 /* BindingElement */:
                         return isDeclarationVisible(node.parent.parent);
-                    case 250 /* VariableDeclaration */:
+                    case 252 /* VariableDeclaration */:
                         if (ts.isBindingPattern(node.name) &&
                             !node.name.elements.length) {
                             // If the binding pattern is empty, this variable declaration is not visible
                             return false;
                         }
                     // falls through
-                    case 257 /* ModuleDeclaration */:
-                    case 253 /* ClassDeclaration */:
-                    case 254 /* InterfaceDeclaration */:
-                    case 255 /* TypeAliasDeclaration */:
-                    case 252 /* FunctionDeclaration */:
-                    case 256 /* EnumDeclaration */:
-                    case 261 /* ImportEqualsDeclaration */:
+                    case 259 /* ModuleDeclaration */:
+                    case 255 /* ClassDeclaration */:
+                    case 256 /* InterfaceDeclaration */:
+                    case 257 /* TypeAliasDeclaration */:
+                    case 254 /* FunctionDeclaration */:
+                    case 258 /* EnumDeclaration */:
+                    case 263 /* ImportEqualsDeclaration */:
                         // external module augmentation is always visible
                         if (ts.isExternalModuleAugmentation(node)) {
                             return true;
@@ -51640,55 +52731,55 @@
                         var parent = getDeclarationContainer(node);
                         // If the node is not exported or it is not ambient module element (except import declaration)
                         if (!(ts.getCombinedModifierFlags(node) & 1 /* Export */) &&
-                            !(node.kind !== 261 /* ImportEqualsDeclaration */ && parent.kind !== 298 /* SourceFile */ && parent.flags & 8388608 /* Ambient */)) {
+                            !(node.kind !== 263 /* ImportEqualsDeclaration */ && parent.kind !== 300 /* SourceFile */ && parent.flags & 8388608 /* Ambient */)) {
                             return isGlobalSourceFile(parent);
                         }
                         // Exported members/ambient module elements (exception import declaration) are visible if parent is visible
                         return isDeclarationVisible(parent);
-                    case 164 /* PropertyDeclaration */:
-                    case 163 /* PropertySignature */:
-                    case 168 /* GetAccessor */:
-                    case 169 /* SetAccessor */:
-                    case 166 /* MethodDeclaration */:
-                    case 165 /* MethodSignature */:
+                    case 165 /* PropertyDeclaration */:
+                    case 164 /* PropertySignature */:
+                    case 170 /* GetAccessor */:
+                    case 171 /* SetAccessor */:
+                    case 167 /* MethodDeclaration */:
+                    case 166 /* MethodSignature */:
                         if (ts.hasEffectiveModifier(node, 8 /* Private */ | 16 /* Protected */)) {
                             // Private/protected properties/methods are not visible
                             return false;
                         }
                     // Public properties/methods are visible if its parents are visible, so:
                     // falls through
-                    case 167 /* Constructor */:
-                    case 171 /* ConstructSignature */:
-                    case 170 /* CallSignature */:
-                    case 172 /* IndexSignature */:
-                    case 161 /* Parameter */:
-                    case 258 /* ModuleBlock */:
-                    case 175 /* FunctionType */:
-                    case 176 /* ConstructorType */:
-                    case 178 /* TypeLiteral */:
-                    case 174 /* TypeReference */:
-                    case 179 /* ArrayType */:
-                    case 180 /* TupleType */:
-                    case 183 /* UnionType */:
-                    case 184 /* IntersectionType */:
-                    case 187 /* ParenthesizedType */:
-                    case 193 /* NamedTupleMember */:
+                    case 169 /* Constructor */:
+                    case 173 /* ConstructSignature */:
+                    case 172 /* CallSignature */:
+                    case 174 /* IndexSignature */:
+                    case 162 /* Parameter */:
+                    case 260 /* ModuleBlock */:
+                    case 177 /* FunctionType */:
+                    case 178 /* ConstructorType */:
+                    case 180 /* TypeLiteral */:
+                    case 176 /* TypeReference */:
+                    case 181 /* ArrayType */:
+                    case 182 /* TupleType */:
+                    case 185 /* UnionType */:
+                    case 186 /* IntersectionType */:
+                    case 189 /* ParenthesizedType */:
+                    case 195 /* NamedTupleMember */:
                         return isDeclarationVisible(node.parent);
                     // Default binding, import specifier and namespace import is visible
                     // only on demand so by default it is not visible
-                    case 263 /* ImportClause */:
-                    case 264 /* NamespaceImport */:
-                    case 266 /* ImportSpecifier */:
+                    case 265 /* ImportClause */:
+                    case 266 /* NamespaceImport */:
+                    case 268 /* ImportSpecifier */:
                         return false;
                     // Type parameters are always visible
-                    case 160 /* TypeParameter */:
+                    case 161 /* TypeParameter */:
                     // Source file and namespace export are always visible
                     // falls through
-                    case 298 /* SourceFile */:
-                    case 260 /* NamespaceExportDeclaration */:
+                    case 300 /* SourceFile */:
+                    case 262 /* NamespaceExportDeclaration */:
                         return true;
                     // Export assignments do not create name bindings outside the module
-                    case 267 /* ExportAssignment */:
+                    case 269 /* ExportAssignment */:
                         return false;
                     default:
                         return false;
@@ -51697,10 +52788,10 @@
         }
         function collectLinkedAliases(node, setVisibility) {
             var exportSymbol;
-            if (node.parent && node.parent.kind === 267 /* ExportAssignment */) {
+            if (node.parent && node.parent.kind === 269 /* ExportAssignment */) {
                 exportSymbol = resolveName(node, node.escapedText, 111551 /* Value */ | 788968 /* Type */ | 1920 /* Namespace */ | 2097152 /* Alias */, /*nameNotFoundMessage*/ undefined, node, /*isUse*/ false);
             }
-            else if (node.parent.kind === 271 /* ExportSpecifier */) {
+            else if (node.parent.kind === 273 /* ExportSpecifier */) {
                 exportSymbol = getTargetOfExportSpecifier(node.parent, 111551 /* Value */ | 788968 /* Type */ | 1920 /* Namespace */ | 2097152 /* Alias */);
             }
             var result;
@@ -51805,12 +52896,12 @@
         function getDeclarationContainer(node) {
             return ts.findAncestor(ts.getRootDeclaration(node), function (node) {
                 switch (node.kind) {
-                    case 250 /* VariableDeclaration */:
-                    case 251 /* VariableDeclarationList */:
-                    case 266 /* ImportSpecifier */:
-                    case 265 /* NamedImports */:
-                    case 264 /* NamespaceImport */:
-                    case 263 /* ImportClause */:
+                    case 252 /* VariableDeclaration */:
+                    case 253 /* VariableDeclarationList */:
+                    case 268 /* ImportSpecifier */:
+                    case 267 /* NamedImports */:
+                    case 266 /* NamespaceImport */:
+                    case 265 /* ImportClause */:
                         return false;
                     default:
                         return true;
@@ -51831,7 +52922,8 @@
             return prop ? getTypeOfSymbol(prop) : undefined;
         }
         function getTypeOfPropertyOrIndexSignature(type, name) {
-            return getTypeOfPropertyOfType(type, name) || isNumericLiteralName(name) && getIndexTypeOfType(type, 1 /* Number */) || getIndexTypeOfType(type, 0 /* String */) || unknownType;
+            var _a;
+            return getTypeOfPropertyOfType(type, name) || ((_a = getApplicableIndexInfoForName(type, name)) === null || _a === void 0 ? void 0 : _a.type) || unknownType;
         }
         function isTypeAny(type) {
             return type && (type.flags & 1 /* Any */) !== 0;
@@ -51870,9 +52962,7 @@
                     members.set(prop.escapedName, getSpreadSymbol(prop, /*readonly*/ false));
                 }
             }
-            var stringIndexInfo = getIndexInfoOfType(source, 0 /* String */);
-            var numberIndexInfo = getIndexInfoOfType(source, 1 /* Number */);
-            var result = createAnonymousType(symbol, members, ts.emptyArray, ts.emptyArray, stringIndexInfo, numberIndexInfo);
+            var result = createAnonymousType(symbol, members, ts.emptyArray, ts.emptyArray, getIndexInfosOfType(source));
             result.objectFlags |= 8388608 /* ObjectRestType */;
             return result;
         }
@@ -51917,23 +53007,23 @@
         function getParentElementAccess(node) {
             var ancestor = node.parent.parent;
             switch (ancestor.kind) {
-                case 199 /* BindingElement */:
-                case 289 /* PropertyAssignment */:
+                case 201 /* BindingElement */:
+                case 291 /* PropertyAssignment */:
                     return getSyntheticElementAccess(ancestor);
-                case 200 /* ArrayLiteralExpression */:
+                case 202 /* ArrayLiteralExpression */:
                     return getSyntheticElementAccess(node.parent);
-                case 250 /* VariableDeclaration */:
+                case 252 /* VariableDeclaration */:
                     return ancestor.initializer;
-                case 217 /* BinaryExpression */:
+                case 219 /* BinaryExpression */:
                     return ancestor.right;
             }
         }
         function getDestructuringPropertyName(node) {
             var parent = node.parent;
-            if (node.kind === 199 /* BindingElement */ && parent.kind === 197 /* ObjectBindingPattern */) {
+            if (node.kind === 201 /* BindingElement */ && parent.kind === 199 /* ObjectBindingPattern */) {
                 return getLiteralPropertyNameText(node.propertyName || node.name);
             }
-            if (node.kind === 289 /* PropertyAssignment */ || node.kind === 290 /* ShorthandPropertyAssignment */) {
+            if (node.kind === 291 /* PropertyAssignment */ || node.kind === 292 /* ShorthandPropertyAssignment */) {
                 return getLiteralPropertyNameText(node.name);
             }
             return "" + parent.elements.indexOf(node);
@@ -51959,7 +53049,7 @@
                 parentType = getTypeWithFacts(parentType, 524288 /* NEUndefined */);
             }
             var type;
-            if (pattern.kind === 197 /* ObjectBindingPattern */) {
+            if (pattern.kind === 199 /* ObjectBindingPattern */) {
                 if (declaration.dotDotDotToken) {
                     parentType = getReducedType(parentType);
                     if (parentType.flags & 2 /* Unknown */ || !isValidSpreadType(parentType)) {
@@ -51979,7 +53069,7 @@
                     // Use explicitly specified property name ({ p: xxx } form), or otherwise the implied name ({ p } form)
                     var name = declaration.propertyName || declaration.name;
                     var indexType = getLiteralTypeFromPropertyName(name);
-                    var declaredType = getIndexedAccessType(parentType, indexType, /*noUncheckedIndexedAccessCandidate*/ undefined, name, /*aliasSymbol*/ undefined, /*aliasTypeArguments*/ undefined, 16 /* ExpressionPosition */);
+                    var declaredType = getIndexedAccessType(parentType, indexType, 32 /* ExpressionPosition */, name);
                     type = getFlowTypeOfDestructuring(declaration, declaredType);
                 }
             }
@@ -51998,9 +53088,9 @@
                         createArrayType(elementType);
                 }
                 else if (isArrayLikeType(parentType)) {
-                    var indexType = getLiteralType(index_2);
-                    var accessFlags = hasDefaultValue(declaration) ? 8 /* NoTupleBoundsCheck */ : 0;
-                    var declaredType = getIndexedAccessTypeOrUndefined(parentType, indexType, /*noUncheckedIndexedAccessCandidate*/ undefined, declaration.name, accessFlags | 16 /* ExpressionPosition */) || errorType;
+                    var indexType = getNumberLiteralType(index_2);
+                    var accessFlags = 32 /* ExpressionPosition */ | (hasDefaultValue(declaration) ? 16 /* NoTupleBoundsCheck */ : 0);
+                    var declaredType = getIndexedAccessTypeOrUndefined(parentType, indexType, accessFlags, declaration.name) || errorType;
                     type = getFlowTypeOfDestructuring(declaration, declaredType);
                 }
                 else {
@@ -52026,25 +53116,26 @@
         }
         function isNullOrUndefined(node) {
             var expr = ts.skipParentheses(node);
-            return expr.kind === 103 /* NullKeyword */ || expr.kind === 78 /* Identifier */ && getResolvedSymbol(expr) === undefinedSymbol;
+            return expr.kind === 104 /* NullKeyword */ || expr.kind === 79 /* Identifier */ && getResolvedSymbol(expr) === undefinedSymbol;
         }
         function isEmptyArrayLiteral(node) {
             var expr = ts.skipParentheses(node);
-            return expr.kind === 200 /* ArrayLiteralExpression */ && expr.elements.length === 0;
+            return expr.kind === 202 /* ArrayLiteralExpression */ && expr.elements.length === 0;
         }
-        function addOptionality(type, optional) {
-            if (optional === void 0) { optional = true; }
-            return strictNullChecks && optional ? getOptionalType(type) : type;
+        function addOptionality(type, isProperty, isOptional) {
+            if (isProperty === void 0) { isProperty = false; }
+            if (isOptional === void 0) { isOptional = true; }
+            return strictNullChecks && isOptional ? getOptionalType(type, isProperty) : type;
         }
         // Return the inferred type for a variable, parameter, or property declaration
         function getTypeForVariableLikeDeclaration(declaration, includeOptionality) {
             // A variable declared in a for..in statement is of type string, or of type keyof T when the
             // right hand expression is of a type parameter type.
-            if (ts.isVariableDeclaration(declaration) && declaration.parent.parent.kind === 239 /* ForInStatement */) {
+            if (ts.isVariableDeclaration(declaration) && declaration.parent.parent.kind === 241 /* ForInStatement */) {
                 var indexType = getIndexType(getNonNullableTypeIfNeeded(checkExpression(declaration.parent.parent.expression)));
                 return indexType.flags & (262144 /* TypeParameter */ | 4194304 /* Index */) ? getExtractStringType(indexType) : stringType;
             }
-            if (ts.isVariableDeclaration(declaration) && declaration.parent.parent.kind === 240 /* ForOfStatement */) {
+            if (ts.isVariableDeclaration(declaration) && declaration.parent.parent.kind === 242 /* ForOfStatement */) {
                 // checkRightHandSideOfForOf will return undefined if the for-of expression type was
                 // missing properties/signatures required to get its iteratedType (like
                 // [Symbol.iterator] or next). This may be because we accessed properties from anyType,
@@ -52055,13 +53146,14 @@
             if (ts.isBindingPattern(declaration.parent)) {
                 return getTypeForBindingElement(declaration);
             }
-            var isOptional = includeOptionality && (ts.isParameter(declaration) && isJSDocOptionalParameter(declaration)
-                || isOptionalJSDocPropertyLikeTag(declaration)
-                || !ts.isBindingElement(declaration) && !ts.isVariableDeclaration(declaration) && !!declaration.questionToken);
+            var isProperty = ts.isPropertyDeclaration(declaration) || ts.isPropertySignature(declaration);
+            var isOptional = includeOptionality && (isProperty && !!declaration.questionToken ||
+                ts.isParameter(declaration) && (!!declaration.questionToken || isJSDocOptionalParameter(declaration)) ||
+                isOptionalJSDocPropertyLikeTag(declaration));
             // Use type from type annotation if one is present
             var declaredType = tryGetTypeFromEffectiveTypeNode(declaration);
             if (declaredType) {
-                return addOptionality(declaredType, isOptional);
+                return addOptionality(declaredType, isProperty, isOptional);
             }
             if ((noImplicitAny || ts.isInJSFile(declaration)) &&
                 ts.isVariableDeclaration(declaration) && !ts.isBindingPattern(declaration.name) &&
@@ -52081,8 +53173,8 @@
             if (ts.isParameter(declaration)) {
                 var func = declaration.parent;
                 // For a parameter of a set accessor, use the type of the get accessor if one is present
-                if (func.kind === 169 /* SetAccessor */ && hasBindableName(func)) {
-                    var getter = ts.getDeclarationOfKind(getSymbolOfNode(declaration.parent), 168 /* GetAccessor */);
+                if (func.kind === 171 /* SetAccessor */ && hasBindableName(func)) {
+                    var getter = ts.getDeclarationOfKind(getSymbolOfNode(declaration.parent), 170 /* GetAccessor */);
                     if (getter) {
                         var getterSignature = getSignatureFromDeclaration(getter);
                         var thisParameter = getAccessorThisParameter(func);
@@ -52105,7 +53197,7 @@
                 // Use contextual parameter type if one is available
                 var type = declaration.symbol.escapedName === "this" /* This */ ? getContextualThisParameterType(func) : getContextuallyTypedParameterType(declaration);
                 if (type) {
-                    return addOptionality(type, isOptional);
+                    return addOptionality(type, /*isProperty*/ false, isOptional);
                 }
             }
             // Use the type of the initializer expression if one is present and the declaration is
@@ -52118,16 +53210,25 @@
                     }
                 }
                 var type = widenTypeInferredFromInitializer(declaration, checkDeclarationInitializer(declaration));
-                return addOptionality(type, isOptional);
+                return addOptionality(type, isProperty, isOptional);
             }
-            if (ts.isPropertyDeclaration(declaration) && !ts.hasStaticModifier(declaration) && (noImplicitAny || ts.isInJSFile(declaration))) {
+            if (ts.isPropertyDeclaration(declaration) && (noImplicitAny || ts.isInJSFile(declaration))) {
                 // We have a property declaration with no type annotation or initializer, in noImplicitAny mode or a .js file.
-                // Use control flow analysis of this.xxx assignments in the constructor to determine the type of the property.
-                var constructor = findConstructorDeclaration(declaration.parent);
-                var type = constructor ? getFlowTypeInConstructor(declaration.symbol, constructor) :
-                    ts.getEffectiveModifierFlags(declaration) & 2 /* Ambient */ ? getTypeOfPropertyInBaseClass(declaration.symbol) :
-                        undefined;
-                return type && addOptionality(type, isOptional);
+                // Use control flow analysis of this.xxx assignments in the constructor or static block to determine the type of the property.
+                if (!ts.hasStaticModifier(declaration)) {
+                    var constructor = findConstructorDeclaration(declaration.parent);
+                    var type = constructor ? getFlowTypeInConstructor(declaration.symbol, constructor) :
+                        ts.getEffectiveModifierFlags(declaration) & 2 /* Ambient */ ? getTypeOfPropertyInBaseClass(declaration.symbol) :
+                            undefined;
+                    return type && addOptionality(type, /*isProperty*/ true, isOptional);
+                }
+                else {
+                    var staticBlocks = ts.filter(declaration.parent.members, ts.isClassStaticBlockDeclaration);
+                    var type = staticBlocks.length ? getFlowTypeInStaticBlocks(declaration.symbol, staticBlocks) :
+                        ts.getEffectiveModifierFlags(declaration) & 2 /* Ambient */ ? getTypeOfPropertyInBaseClass(declaration.symbol) :
+                            undefined;
+                    return type && addOptionality(type, /*isProperty*/ true, isOptional);
+                }
             }
             if (ts.isJsxAttribute(declaration)) {
                 // if JSX attribute doesn't have initializer, by default the attribute will have boolean value of true.
@@ -52153,7 +53254,7 @@
                     links.isConstructorDeclaredProperty = !!getDeclaringConstructor(symbol) && ts.every(symbol.declarations, function (declaration) {
                         return ts.isBinaryExpression(declaration) &&
                             isPossiblyAliasedThisProperty(declaration) &&
-                            (declaration.left.kind !== 203 /* ElementAccessExpression */ || ts.isStringOrNumericLiteralLike(declaration.left.argumentExpression)) &&
+                            (declaration.left.kind !== 205 /* ElementAccessExpression */ || ts.isStringOrNumericLiteralLike(declaration.left.argumentExpression)) &&
                             !getAnnotatedTypeForAssignmentDeclaration(/*declaredType*/ undefined, declaration, symbol, declaration);
                     });
                 }
@@ -52175,7 +53276,7 @@
             for (var _i = 0, _a = symbol.declarations; _i < _a.length; _i++) {
                 var declaration = _a[_i];
                 var container = ts.getThisContainer(declaration, /*includeArrowFunctions*/ false);
-                if (container && (container.kind === 167 /* Constructor */ || isJSConstructor(container))) {
+                if (container && (container.kind === 169 /* Constructor */ || isJSConstructor(container))) {
                     return container;
                 }
             }
@@ -52197,6 +53298,27 @@
             reference.flowNode = file.endFlowNode;
             return getFlowTypeOfReference(reference, autoType, undefinedType);
         }
+        function getFlowTypeInStaticBlocks(symbol, staticBlocks) {
+            var accessName = ts.startsWith(symbol.escapedName, "__#")
+                ? ts.factory.createPrivateIdentifier(symbol.escapedName.split("@")[1])
+                : ts.unescapeLeadingUnderscores(symbol.escapedName);
+            for (var _i = 0, staticBlocks_1 = staticBlocks; _i < staticBlocks_1.length; _i++) {
+                var staticBlock = staticBlocks_1[_i];
+                var reference = ts.factory.createPropertyAccessExpression(ts.factory.createThis(), accessName);
+                ts.setParent(reference.expression, reference);
+                ts.setParent(reference, staticBlock);
+                reference.flowNode = staticBlock.returnFlowNode;
+                var flowType = getFlowTypeOfProperty(reference, symbol);
+                if (noImplicitAny && (flowType === autoType || flowType === autoArrayType)) {
+                    error(symbol.valueDeclaration, ts.Diagnostics.Member_0_implicitly_has_an_1_type, symbolToString(symbol), typeToString(flowType));
+                }
+                // We don't infer a type if assignments are only null or undefined.
+                if (everyType(flowType, isNullableType)) {
+                    continue;
+                }
+                return convertAutoToAny(flowType);
+            }
+        }
         function getFlowTypeInConstructor(symbol, constructor) {
             var accessName = ts.startsWith(symbol.escapedName, "__#")
                 ? ts.factory.createPrivateIdentifier(symbol.escapedName.split("@")[1])
@@ -52287,7 +53409,7 @@
                     type = getUnionType(sourceTypes, 2 /* Subtype */);
                 }
             }
-            var widened = getWidenedType(addOptionality(type, definedInMethod && !definedInConstructor));
+            var widened = getWidenedType(addOptionality(type, /*isProperty*/ false, definedInMethod && !definedInConstructor));
             if (symbol.valueDeclaration && filterType(widened, function (t) { return !!(t.flags & ~98304 /* Nullable */); }) === neverType) {
                 reportImplicitAny(symbol.valueDeclaration, anyType);
                 return anyType;
@@ -52311,7 +53433,7 @@
             if ((_b = s === null || s === void 0 ? void 0 : s.exports) === null || _b === void 0 ? void 0 : _b.size) {
                 mergeSymbolTable(exports, s.exports);
             }
-            var type = createAnonymousType(symbol, exports, ts.emptyArray, ts.emptyArray, undefined, undefined);
+            var type = createAnonymousType(symbol, exports, ts.emptyArray, ts.emptyArray, ts.emptyArray);
             type.objectFlags |= 8192 /* JSLiteral */;
             return type;
         }
@@ -52330,7 +53452,10 @@
             if ((_a = symbol.parent) === null || _a === void 0 ? void 0 : _a.valueDeclaration) {
                 var typeNode_2 = ts.getEffectiveTypeAnnotationNode(symbol.parent.valueDeclaration);
                 if (typeNode_2) {
-                    return getTypeOfPropertyOfType(getTypeFromTypeNode(typeNode_2), symbol.escapedName);
+                    var annotationSymbol = getPropertyOfType(getTypeFromTypeNode(typeNode_2), symbol.escapedName);
+                    if (annotationSymbol) {
+                        return getNonMissingTypeOfSymbol(annotationSymbol);
+                    }
                 }
             }
             return declaredType;
@@ -52412,7 +53537,7 @@
                     }
                 });
                 var result = createAnonymousType(initialSize !== members_4.size ? undefined : exportedType.symbol, // Only set the type's symbol if it looks to be the same as the original type
-                members_4, exportedType.callSignatures, exportedType.constructSignatures, exportedType.stringIndexInfo, exportedType.numberIndexInfo);
+                members_4, exportedType.callSignatures, exportedType.constructSignatures, exportedType.indexInfos);
                 result.objectFlags |= (ts.getObjectFlags(type) & 8192 /* JSLiteral */); // Propagate JSLiteral flag
                 if (result.symbol && result.symbol.flags & 32 /* Class */ && type === getDeclaredTypeOfClassOrInterface(result.symbol)) {
                     result.objectFlags |= 16777216 /* IsClassInstanceClone */; // Propagate the knowledge that this type is equivalent to the symbol's class instance type
@@ -52427,16 +53552,16 @@
         }
         function containsSameNamedThisProperty(thisProperty, expression) {
             return ts.isPropertyAccessExpression(thisProperty)
-                && thisProperty.expression.kind === 107 /* ThisKeyword */
+                && thisProperty.expression.kind === 108 /* ThisKeyword */
                 && ts.forEachChildRecursively(expression, function (n) { return isMatchingReference(thisProperty, n); });
         }
         function isDeclarationInConstructor(expression) {
             var thisContainer = ts.getThisContainer(expression, /*includeArrowFunctions*/ false);
             // Properties defined in a constructor (or base constructor, or javascript constructor function) don't get undefined added.
             // Function expressions that are assigned to the prototype count as methods.
-            return thisContainer.kind === 167 /* Constructor */ ||
-                thisContainer.kind === 252 /* FunctionDeclaration */ ||
-                (thisContainer.kind === 209 /* FunctionExpression */ && !ts.isPrototypePropertyAssignment(thisContainer.parent));
+            return thisContainer.kind === 169 /* Constructor */ ||
+                thisContainer.kind === 254 /* FunctionDeclaration */ ||
+                (thisContainer.kind === 211 /* FunctionExpression */ && !ts.isPrototypePropertyAssignment(thisContainer.parent));
         }
         function getConstructorDefinedThisAssignmentTypes(types, declarations) {
             ts.Debug.assert(types.length === declarations.length);
@@ -52478,7 +53603,7 @@
             ts.forEach(pattern.elements, function (e) {
                 var name = e.propertyName || e.name;
                 if (e.dotDotDotToken) {
-                    stringIndexInfo = createIndexInfo(anyType, /*isReadonly*/ false);
+                    stringIndexInfo = createIndexInfo(stringType, anyType, /*isReadonly*/ false);
                     return;
                 }
                 var exprType = getLiteralTypeFromPropertyName(name);
@@ -52494,7 +53619,7 @@
                 symbol.bindingElement = e;
                 members.set(symbol.escapedName, symbol);
             });
-            var result = createAnonymousType(undefined, members, ts.emptyArray, ts.emptyArray, stringIndexInfo, undefined);
+            var result = createAnonymousType(undefined, members, ts.emptyArray, ts.emptyArray, stringIndexInfo ? [stringIndexInfo] : ts.emptyArray);
             result.objectFlags |= objectFlags;
             if (includePatternInType) {
                 result.pattern = pattern;
@@ -52506,7 +53631,7 @@
         function getTypeFromArrayBindingPattern(pattern, includePatternInType, reportErrors) {
             var elements = pattern.elements;
             var lastElement = ts.lastOrUndefined(elements);
-            var restElement = lastElement && lastElement.kind === 199 /* BindingElement */ && lastElement.dotDotDotToken ? lastElement : undefined;
+            var restElement = lastElement && lastElement.kind === 201 /* BindingElement */ && lastElement.dotDotDotToken ? lastElement : undefined;
             if (elements.length === 0 || elements.length === 1 && restElement) {
                 return languageVersion >= 2 /* ES2015 */ ? createIterableType(anyType) : anyArrayType;
             }
@@ -52531,7 +53656,7 @@
         function getTypeFromBindingPattern(pattern, includePatternInType, reportErrors) {
             if (includePatternInType === void 0) { includePatternInType = false; }
             if (reportErrors === void 0) { reportErrors = false; }
-            return pattern.kind === 197 /* ObjectBindingPattern */
+            return pattern.kind === 199 /* ObjectBindingPattern */
                 ? getTypeFromObjectBindingPattern(pattern, includePatternInType, reportErrors)
                 : getTypeFromArrayBindingPattern(pattern, includePatternInType, reportErrors);
         }
@@ -52579,7 +53704,7 @@
         }
         function declarationBelongsToPrivateAmbientMember(declaration) {
             var root = ts.getRootDeclaration(declaration);
-            var memberDeclaration = root.kind === 161 /* Parameter */ ? root.parent : root;
+            var memberDeclaration = root.kind === 162 /* Parameter */ ? root.parent : root;
             return isPrivateWithinAmbient(memberDeclaration);
         }
         function tryGetTypeFromEffectiveTypeNode(declaration) {
@@ -52624,7 +53749,7 @@
                     result.exports = new ts.Map(fileSymbol.exports);
                 var members = ts.createSymbolTable();
                 members.set("exports", result);
-                return createAnonymousType(symbol, members, ts.emptyArray, ts.emptyArray, undefined, undefined);
+                return createAnonymousType(symbol, members, ts.emptyArray, ts.emptyArray, ts.emptyArray);
             }
             // Handle catch clause variables
             ts.Debug.assertIsDefined(symbol.valueDeclaration);
@@ -52632,7 +53757,7 @@
             if (ts.isCatchClauseVariableDeclarationOrBindingElement(declaration)) {
                 var typeNode = ts.getEffectiveTypeAnnotationNode(declaration);
                 if (typeNode === undefined) {
-                    return anyType;
+                    return useUnknownInCatchVariables ? unknownType : anyType;
                 }
                 var type_1 = getTypeOfNode(typeNode);
                 // an errorType will make `checkTryStatement` issue an error
@@ -52654,7 +53779,7 @@
                 return reportCircularityError(symbol);
             }
             var type;
-            if (declaration.kind === 267 /* ExportAssignment */) {
+            if (declaration.kind === 269 /* ExportAssignment */) {
                 type = widenTypeForVariableLikeDeclaration(checkExpressionCached(declaration.expression), declaration);
             }
             else if (ts.isBinaryExpression(declaration) ||
@@ -52725,7 +53850,7 @@
         }
         function getAnnotatedAccessorTypeNode(accessor) {
             if (accessor) {
-                if (accessor.kind === 168 /* GetAccessor */) {
+                if (accessor.kind === 170 /* GetAccessor */) {
                     var getterTypeAnnotation = ts.getEffectiveReturnTypeNode(accessor);
                     return getterTypeAnnotation;
                 }
@@ -52764,7 +53889,7 @@
             if (!popTypeResolution()) {
                 type = anyType;
                 if (noImplicitAny) {
-                    var getter = ts.getDeclarationOfKind(symbol, 168 /* GetAccessor */);
+                    var getter = ts.getDeclarationOfKind(symbol, 170 /* GetAccessor */);
                     error(getter, ts.Diagnostics._0_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_referenced_directly_or_indirectly_in_one_of_its_return_expressions, symbolToString(symbol));
                 }
             }
@@ -52772,8 +53897,8 @@
         }
         function resolveTypeOfAccessors(symbol, writing) {
             if (writing === void 0) { writing = false; }
-            var getter = ts.getDeclarationOfKind(symbol, 168 /* GetAccessor */);
-            var setter = ts.getDeclarationOfKind(symbol, 169 /* SetAccessor */);
+            var getter = ts.getDeclarationOfKind(symbol, 170 /* GetAccessor */);
+            var setter = ts.getDeclarationOfKind(symbol, 171 /* SetAccessor */);
             var setterType = getAnnotatedAccessorType(setter);
             // For write operations, prioritize type annotations on the setter
             if (writing && setterType) {
@@ -52850,9 +53975,9 @@
             if (symbol.flags & 1536 /* Module */ && ts.isShorthandAmbientModuleSymbol(symbol)) {
                 return anyType;
             }
-            else if (declaration && (declaration.kind === 217 /* BinaryExpression */ ||
+            else if (declaration && (declaration.kind === 219 /* BinaryExpression */ ||
                 ts.isAccessExpression(declaration) &&
-                    declaration.parent.kind === 217 /* BinaryExpression */)) {
+                    declaration.parent.kind === 219 /* BinaryExpression */)) {
                 return getWidenedTypeForAssignmentDeclaration(symbol);
             }
             else if (symbol.flags & 512 /* ValueModule */ && declaration && ts.isSourceFile(declaration) && declaration.commonJsModuleIndicator) {
@@ -52921,7 +54046,7 @@
                 return errorType;
             }
             // Check if variable has initializer that circularly references the variable itself
-            if (noImplicitAny && (declaration.kind !== 161 /* Parameter */ || declaration.initializer)) {
+            if (noImplicitAny && (declaration.kind !== 162 /* Parameter */ || declaration.initializer)) {
                 error(symbol.valueDeclaration, ts.Diagnostics._0_implicitly_has_type_any_because_it_does_not_have_a_type_annotation_and_is_referenced_directly_or_indirectly_in_its_own_initializer, symbolToString(symbol));
             }
             // Circularities could also result from parameters in function expressions that end up
@@ -52978,6 +54103,9 @@
             }
             return errorType;
         }
+        function getNonMissingTypeOfSymbol(symbol) {
+            return removeMissingType(getTypeOfSymbol(symbol), !!(symbol.flags & 16777216 /* Optional */));
+        }
         function isReferenceToType(type, target) {
             return type !== undefined
                 && target !== undefined
@@ -53029,46 +54157,46 @@
                     return undefined;
                 }
                 switch (node.kind) {
-                    case 253 /* ClassDeclaration */:
-                    case 222 /* ClassExpression */:
-                    case 254 /* InterfaceDeclaration */:
-                    case 170 /* CallSignature */:
-                    case 171 /* ConstructSignature */:
-                    case 165 /* MethodSignature */:
-                    case 175 /* FunctionType */:
-                    case 176 /* ConstructorType */:
-                    case 309 /* JSDocFunctionType */:
-                    case 252 /* FunctionDeclaration */:
-                    case 166 /* MethodDeclaration */:
-                    case 209 /* FunctionExpression */:
-                    case 210 /* ArrowFunction */:
-                    case 255 /* TypeAliasDeclaration */:
-                    case 334 /* JSDocTemplateTag */:
-                    case 335 /* JSDocTypedefTag */:
-                    case 329 /* JSDocEnumTag */:
-                    case 328 /* JSDocCallbackTag */:
-                    case 191 /* MappedType */:
-                    case 185 /* ConditionalType */: {
+                    case 255 /* ClassDeclaration */:
+                    case 224 /* ClassExpression */:
+                    case 256 /* InterfaceDeclaration */:
+                    case 172 /* CallSignature */:
+                    case 173 /* ConstructSignature */:
+                    case 166 /* MethodSignature */:
+                    case 177 /* FunctionType */:
+                    case 178 /* ConstructorType */:
+                    case 312 /* JSDocFunctionType */:
+                    case 254 /* FunctionDeclaration */:
+                    case 167 /* MethodDeclaration */:
+                    case 211 /* FunctionExpression */:
+                    case 212 /* ArrowFunction */:
+                    case 257 /* TypeAliasDeclaration */:
+                    case 339 /* JSDocTemplateTag */:
+                    case 340 /* JSDocTypedefTag */:
+                    case 334 /* JSDocEnumTag */:
+                    case 333 /* JSDocCallbackTag */:
+                    case 193 /* MappedType */:
+                    case 187 /* ConditionalType */: {
                         var outerTypeParameters = getOuterTypeParameters(node, includeThisTypes);
-                        if (node.kind === 191 /* MappedType */) {
+                        if (node.kind === 193 /* MappedType */) {
                             return ts.append(outerTypeParameters, getDeclaredTypeOfTypeParameter(getSymbolOfNode(node.typeParameter)));
                         }
-                        else if (node.kind === 185 /* ConditionalType */) {
+                        else if (node.kind === 187 /* ConditionalType */) {
                             return ts.concatenate(outerTypeParameters, getInferTypeParameters(node));
                         }
                         var outerAndOwnTypeParameters = appendTypeParameters(outerTypeParameters, ts.getEffectiveTypeParameterDeclarations(node));
                         var thisType = includeThisTypes &&
-                            (node.kind === 253 /* ClassDeclaration */ || node.kind === 222 /* ClassExpression */ || node.kind === 254 /* InterfaceDeclaration */ || isJSConstructor(node)) &&
+                            (node.kind === 255 /* ClassDeclaration */ || node.kind === 224 /* ClassExpression */ || node.kind === 256 /* InterfaceDeclaration */ || isJSConstructor(node)) &&
                             getDeclaredTypeOfClassOrInterface(getSymbolOfNode(node)).thisType;
                         return thisType ? ts.append(outerAndOwnTypeParameters, thisType) : outerAndOwnTypeParameters;
                     }
-                    case 330 /* JSDocParameterTag */:
+                    case 335 /* JSDocParameterTag */:
                         var paramSymbol = ts.getParameterSymbolFromJSDoc(node);
                         if (paramSymbol) {
                             node = paramSymbol.valueDeclaration;
                         }
                         break;
-                    case 312 /* JSDocComment */: {
+                    case 315 /* JSDocComment */: {
                         var outerTypeParameters = getOuterTypeParameters(node, includeThisTypes);
                         return node.tags
                             ? appendTypeParameters(outerTypeParameters, ts.flatMap(node.tags, function (t) { return ts.isJSDocTemplateTag(t) ? t.typeParameters : undefined; }))
@@ -53079,7 +54207,7 @@
         }
         // The outer type parameters are those defined by enclosing generic classes, methods, or functions.
         function getOuterTypeParametersOfClassOrInterface(symbol) {
-            var declaration = symbol.flags & 32 /* Class */ ? symbol.valueDeclaration : ts.getDeclarationOfKind(symbol, 254 /* InterfaceDeclaration */);
+            var declaration = symbol.flags & 32 /* Class */ ? symbol.valueDeclaration : ts.getDeclarationOfKind(symbol, 256 /* InterfaceDeclaration */);
             ts.Debug.assert(!!declaration, "Class was missing valueDeclaration -OR- non-class had no interface declarations");
             return getOuterTypeParameters(declaration);
         }
@@ -53092,9 +54220,9 @@
             var result;
             for (var _i = 0, _a = symbol.declarations; _i < _a.length; _i++) {
                 var node = _a[_i];
-                if (node.kind === 254 /* InterfaceDeclaration */ ||
-                    node.kind === 253 /* ClassDeclaration */ ||
-                    node.kind === 222 /* ClassExpression */ ||
+                if (node.kind === 256 /* InterfaceDeclaration */ ||
+                    node.kind === 255 /* ClassDeclaration */ ||
+                    node.kind === 224 /* ClassExpression */ ||
                     isJSConstructor(node) ||
                     ts.isTypeAlias(node)) {
                     var declaration = node;
@@ -53245,7 +54373,7 @@
                     if (!popTypeResolution() && type.symbol.declarations) {
                         for (var _i = 0, _a = type.symbol.declarations; _i < _a.length; _i++) {
                             var declaration = _a[_i];
-                            if (declaration.kind === 253 /* ClassDeclaration */ || declaration.kind === 254 /* InterfaceDeclaration */) {
+                            if (declaration.kind === 255 /* ClassDeclaration */ || declaration.kind === 256 /* InterfaceDeclaration */) {
                                 reportCircularBaseType(declaration, type);
                             }
                         }
@@ -53341,7 +54469,7 @@
             if (type.symbol.declarations) {
                 for (var _i = 0, _a = type.symbol.declarations; _i < _a.length; _i++) {
                     var declaration = _a[_i];
-                    if (declaration.kind === 254 /* InterfaceDeclaration */ && ts.getInterfaceBaseTypeNodes(declaration)) {
+                    if (declaration.kind === 256 /* InterfaceDeclaration */ && ts.getInterfaceBaseTypeNodes(declaration)) {
                         for (var _b = 0, _c = ts.getInterfaceBaseTypeNodes(declaration); _b < _c.length; _b++) {
                             var node = _c[_b];
                             var baseType = getReducedType(getTypeFromTypeNode(node));
@@ -53381,7 +54509,7 @@
             }
             for (var _i = 0, _a = symbol.declarations; _i < _a.length; _i++) {
                 var declaration = _a[_i];
-                if (declaration.kind === 254 /* InterfaceDeclaration */) {
+                if (declaration.kind === 256 /* InterfaceDeclaration */) {
                     if (declaration.flags & 128 /* ContainsThis */) {
                         return false;
                     }
@@ -53460,7 +54588,12 @@
                 }
                 else {
                     type = errorType;
-                    error(ts.isNamedDeclaration(declaration) ? declaration.name : declaration || declaration, ts.Diagnostics.Type_alias_0_circularly_references_itself, symbolToString(symbol));
+                    if (declaration.kind === 334 /* JSDocEnumTag */) {
+                        error(declaration.typeExpression.type, ts.Diagnostics.Type_alias_0_circularly_references_itself, symbolToString(symbol));
+                    }
+                    else {
+                        error(ts.isNamedDeclaration(declaration) ? declaration.name : declaration || declaration, ts.Diagnostics.Type_alias_0_circularly_references_itself, symbolToString(symbol));
+                    }
                 }
                 links.declaredType = type;
             }
@@ -53470,7 +54603,7 @@
             if (ts.isStringLiteralLike(expr)) {
                 return true;
             }
-            else if (expr.kind === 217 /* BinaryExpression */) {
+            else if (expr.kind === 219 /* BinaryExpression */) {
                 return isStringConcatExpression(expr.left) && isStringConcatExpression(expr.right);
             }
             return false;
@@ -53485,12 +54618,12 @@
                 case 8 /* NumericLiteral */:
                 case 14 /* NoSubstitutionTemplateLiteral */:
                     return true;
-                case 215 /* PrefixUnaryExpression */:
+                case 217 /* PrefixUnaryExpression */:
                     return expr.operator === 40 /* MinusToken */ &&
                         expr.operand.kind === 8 /* NumericLiteral */;
-                case 78 /* Identifier */:
+                case 79 /* Identifier */:
                     return ts.nodeIsMissing(expr) || !!getSymbolOfNode(member.parent).exports.get(expr.escapedText);
-                case 217 /* BinaryExpression */:
+                case 219 /* BinaryExpression */:
                     return isStringConcatExpression(expr);
                 default:
                     return false;
@@ -53505,7 +54638,7 @@
             if (symbol.declarations) {
                 for (var _i = 0, _a = symbol.declarations; _i < _a.length; _i++) {
                     var declaration = _a[_i];
-                    if (declaration.kind === 256 /* EnumDeclaration */) {
+                    if (declaration.kind === 258 /* EnumDeclaration */) {
                         for (var _b = 0, _c = declaration.members; _b < _c.length; _b++) {
                             var member = _c[_b];
                             if (member.initializer && ts.isStringLiteralLike(member.initializer)) {
@@ -53534,11 +54667,11 @@
                 if (symbol.declarations) {
                     for (var _i = 0, _a = symbol.declarations; _i < _a.length; _i++) {
                         var declaration = _a[_i];
-                        if (declaration.kind === 256 /* EnumDeclaration */) {
+                        if (declaration.kind === 258 /* EnumDeclaration */) {
                             for (var _b = 0, _c = declaration.members; _b < _c.length; _b++) {
                                 var member = _c[_b];
                                 var value = getEnumMemberValue(member);
-                                var memberType = getFreshTypeOfLiteralType(getLiteralType(value !== undefined ? value : 0, enumCount, getSymbolOfNode(member)));
+                                var memberType = getFreshTypeOfLiteralType(getEnumLiteralType(value !== undefined ? value : 0, enumCount, getSymbolOfNode(member)));
                                 getSymbolLinks(getSymbolOfNode(member)).declaredType = memberType;
                                 memberTypeList.push(getRegularTypeOfLiteralType(memberType));
                             }
@@ -53607,22 +54740,22 @@
          */
         function isThislessType(node) {
             switch (node.kind) {
-                case 128 /* AnyKeyword */:
-                case 152 /* UnknownKeyword */:
-                case 147 /* StringKeyword */:
-                case 144 /* NumberKeyword */:
-                case 155 /* BigIntKeyword */:
-                case 131 /* BooleanKeyword */:
-                case 148 /* SymbolKeyword */:
-                case 145 /* ObjectKeyword */:
-                case 113 /* VoidKeyword */:
-                case 150 /* UndefinedKeyword */:
-                case 141 /* NeverKeyword */:
-                case 192 /* LiteralType */:
+                case 129 /* AnyKeyword */:
+                case 153 /* UnknownKeyword */:
+                case 148 /* StringKeyword */:
+                case 145 /* NumberKeyword */:
+                case 156 /* BigIntKeyword */:
+                case 132 /* BooleanKeyword */:
+                case 149 /* SymbolKeyword */:
+                case 146 /* ObjectKeyword */:
+                case 114 /* VoidKeyword */:
+                case 151 /* UndefinedKeyword */:
+                case 142 /* NeverKeyword */:
+                case 194 /* LiteralType */:
                     return true;
-                case 179 /* ArrayType */:
+                case 181 /* ArrayType */:
                     return isThislessType(node.elementType);
-                case 174 /* TypeReference */:
+                case 176 /* TypeReference */:
                     return !node.typeArguments || node.typeArguments.every(isThislessType);
             }
             return false;
@@ -53648,7 +54781,7 @@
         function isThislessFunctionLikeDeclaration(node) {
             var returnType = ts.getEffectiveReturnTypeNode(node);
             var typeParameters = ts.getEffectiveTypeParameterDeclarations(node);
-            return (node.kind === 167 /* Constructor */ || (!!returnType && isThislessType(returnType))) &&
+            return (node.kind === 169 /* Constructor */ || (!!returnType && isThislessType(returnType))) &&
                 node.parameters.every(isThislessVariableLikeDeclaration) &&
                 typeParameters.every(isThislessTypeParameter);
         }
@@ -53664,14 +54797,14 @@
                 var declaration = symbol.declarations[0];
                 if (declaration) {
                     switch (declaration.kind) {
-                        case 164 /* PropertyDeclaration */:
-                        case 163 /* PropertySignature */:
+                        case 165 /* PropertyDeclaration */:
+                        case 164 /* PropertySignature */:
                             return isThislessVariableLikeDeclaration(declaration);
-                        case 166 /* MethodDeclaration */:
-                        case 165 /* MethodSignature */:
-                        case 167 /* Constructor */:
-                        case 168 /* GetAccessor */:
-                        case 169 /* SetAccessor */:
+                        case 167 /* MethodDeclaration */:
+                        case 166 /* MethodSignature */:
+                        case 169 /* Constructor */:
+                        case 170 /* GetAccessor */:
+                        case 171 /* SetAccessor */:
                             return isThislessFunctionLikeDeclaration(declaration);
                     }
                 }
@@ -53697,7 +54830,7 @@
             }
         }
         function isStaticPrivateIdentifierProperty(s) {
-            return !!s.valueDeclaration && ts.isPrivateIdentifierClassElementDeclaration(s.valueDeclaration) && ts.hasSyntacticModifier(s.valueDeclaration, 32 /* Static */);
+            return !!s.valueDeclaration && ts.isPrivateIdentifierClassElementDeclaration(s.valueDeclaration) && ts.isStatic(s.valueDeclaration);
         }
         function resolveDeclaredMembers(type) {
             if (!type.declaredProperties) {
@@ -53707,10 +54840,10 @@
                 // Start with signatures at empty array in case of recursive types
                 type.declaredCallSignatures = ts.emptyArray;
                 type.declaredConstructSignatures = ts.emptyArray;
+                type.declaredIndexInfos = ts.emptyArray;
                 type.declaredCallSignatures = getSignaturesOfSymbol(members.get("__call" /* Call */));
                 type.declaredConstructSignatures = getSignaturesOfSymbol(members.get("__new" /* New */));
-                type.declaredStringIndexInfo = getIndexInfoOfSymbol(symbol, 0 /* String */);
-                type.declaredNumberIndexInfo = getIndexInfoOfSymbol(symbol, 1 /* Number */);
+                type.declaredIndexInfos = getIndexInfosOfSymbol(symbol);
             }
             return type;
         }
@@ -53784,7 +54917,7 @@
             if (!symbol.declarations) {
                 symbol.declarations = [member];
             }
-            else {
+            else if (!member.symbol.isReplaceableByMethod) {
                 symbol.declarations.push(member);
             }
             if (symbolFlags & 111551 /* Value */) {
@@ -53866,8 +54999,8 @@
         function getResolvedMembersOrExportsOfSymbol(symbol, resolutionKind) {
             var links = getSymbolLinks(symbol);
             if (!links[resolutionKind]) {
-                var isStatic = resolutionKind === "resolvedExports" /* resolvedExports */;
-                var earlySymbols = !isStatic ? symbol.members :
+                var isStatic_1 = resolutionKind === "resolvedExports" /* resolvedExports */;
+                var earlySymbols = !isStatic_1 ? symbol.members :
                     symbol.flags & 1536 /* Module */ ? getExportsOfModuleWorker(symbol) :
                         symbol.exports;
                 // In the event we recursively resolve the members/exports of the symbol, we
@@ -53882,7 +55015,7 @@
                     if (members) {
                         for (var _b = 0, members_5 = members; _b < members_5.length; _b++) {
                             var member = members_5[_b];
-                            if (isStatic === ts.hasStaticModifier(member) && hasLateBindableName(member)) {
+                            if (isStatic_1 === ts.hasStaticModifier(member) && hasLateBindableName(member)) {
                                 lateBindMember(symbol, earlySymbols, lateSymbols, member);
                             }
                         }
@@ -53898,7 +55031,7 @@
                             || ts.isBinaryExpression(member) && isPossiblyAliasedThisProperty(member, assignmentKind)
                             || assignmentKind === 9 /* ObjectDefinePrototypeProperty */
                             || assignmentKind === 6 /* Prototype */; // A straight `Prototype` assignment probably can never have a computed name
-                        if (isStatic === !isInstanceMember && hasLateBindableName(member)) {
+                        if (isStatic_1 === !isInstanceMember && hasLateBindableName(member)) {
                             lateBindMember(symbol, earlySymbols, lateSymbols, member);
                         }
                     }
@@ -53960,29 +55093,26 @@
             var members;
             var callSignatures;
             var constructSignatures;
-            var stringIndexInfo;
-            var numberIndexInfo;
+            var indexInfos;
             if (ts.rangeEquals(typeParameters, typeArguments, 0, typeParameters.length)) {
                 members = source.symbol ? getMembersOfSymbol(source.symbol) : ts.createSymbolTable(source.declaredProperties);
                 callSignatures = source.declaredCallSignatures;
                 constructSignatures = source.declaredConstructSignatures;
-                stringIndexInfo = source.declaredStringIndexInfo;
-                numberIndexInfo = source.declaredNumberIndexInfo;
+                indexInfos = source.declaredIndexInfos;
             }
             else {
                 mapper = createTypeMapper(typeParameters, typeArguments);
                 members = createInstantiatedSymbolTable(source.declaredProperties, mapper, /*mappingThisOnly*/ typeParameters.length === 1);
                 callSignatures = instantiateSignatures(source.declaredCallSignatures, mapper);
                 constructSignatures = instantiateSignatures(source.declaredConstructSignatures, mapper);
-                stringIndexInfo = instantiateIndexInfo(source.declaredStringIndexInfo, mapper);
-                numberIndexInfo = instantiateIndexInfo(source.declaredNumberIndexInfo, mapper);
+                indexInfos = instantiateIndexInfos(source.declaredIndexInfos, mapper);
             }
             var baseTypes = getBaseTypes(source);
             if (baseTypes.length) {
                 if (source.symbol && members === getMembersOfSymbol(source.symbol)) {
                     members = ts.createSymbolTable(source.declaredProperties);
                 }
-                setStructuredTypeMembers(type, members, callSignatures, constructSignatures, stringIndexInfo, numberIndexInfo);
+                setStructuredTypeMembers(type, members, callSignatures, constructSignatures, indexInfos);
                 var thisArgument = ts.lastOrUndefined(typeArguments);
                 for (var _i = 0, baseTypes_1 = baseTypes; _i < baseTypes_1.length; _i++) {
                     var baseType = baseTypes_1[_i];
@@ -53990,15 +55120,11 @@
                     addInheritedMembers(members, getPropertiesOfType(instantiatedBaseType));
                     callSignatures = ts.concatenate(callSignatures, getSignaturesOfType(instantiatedBaseType, 0 /* Call */));
                     constructSignatures = ts.concatenate(constructSignatures, getSignaturesOfType(instantiatedBaseType, 1 /* Construct */));
-                    if (!stringIndexInfo) {
-                        stringIndexInfo = instantiatedBaseType === anyType ?
-                            createIndexInfo(anyType, /*isReadonly*/ false) :
-                            getIndexInfoOfType(instantiatedBaseType, 0 /* String */);
-                    }
-                    numberIndexInfo = numberIndexInfo || getIndexInfoOfType(instantiatedBaseType, 1 /* Number */);
+                    var inheritedIndexInfos = instantiatedBaseType !== anyType ? getIndexInfosOfType(instantiatedBaseType) : [createIndexInfo(stringType, anyType, /*isReadonly*/ false)];
+                    indexInfos = ts.concatenate(indexInfos, ts.filter(inheritedIndexInfos, function (info) { return !findIndexInfo(indexInfos, info.keyType); }));
                 }
             }
-            setStructuredTypeMembers(type, members, callSignatures, constructSignatures, stringIndexInfo, numberIndexInfo);
+            setStructuredTypeMembers(type, members, callSignatures, constructSignatures, indexInfos);
         }
         function resolveClassOrInterfaceMembers(type) {
             resolveObjectTypeMembers(type, resolveDeclaredMembers(type), ts.emptyArray, ts.emptyArray);
@@ -54308,38 +55434,35 @@
             }
             return result;
         }
-        function getUnionIndexInfo(types, kind) {
-            var indexTypes = [];
-            var isAnyReadonly = false;
-            for (var _i = 0, types_4 = types; _i < types_4.length; _i++) {
-                var type = types_4[_i];
-                var indexInfo = getIndexInfoOfType(getApparentType(type), kind);
-                if (!indexInfo) {
-                    return undefined;
+        function getUnionIndexInfos(types) {
+            var sourceInfos = getIndexInfosOfType(types[0]);
+            if (sourceInfos) {
+                var result = [];
+                var _loop_11 = function (info) {
+                    var indexType = info.keyType;
+                    if (ts.every(types, function (t) { return !!getIndexInfoOfType(t, indexType); })) {
+                        result.push(createIndexInfo(indexType, getUnionType(ts.map(types, function (t) { return getIndexTypeOfType(t, indexType); })), ts.some(types, function (t) { return getIndexInfoOfType(t, indexType).isReadonly; })));
+                    }
+                };
+                for (var _i = 0, sourceInfos_1 = sourceInfos; _i < sourceInfos_1.length; _i++) {
+                    var info = sourceInfos_1[_i];
+                    _loop_11(info);
                 }
-                indexTypes.push(indexInfo.type);
-                isAnyReadonly = isAnyReadonly || indexInfo.isReadonly;
+                return result;
             }
-            return createIndexInfo(getUnionType(indexTypes, 2 /* Subtype */), isAnyReadonly);
+            return ts.emptyArray;
         }
         function resolveUnionTypeMembers(type) {
             // The members and properties collections are empty for union types. To get all properties of a union
             // type use getPropertiesOfType (only the language service uses this).
             var callSignatures = getUnionSignatures(ts.map(type.types, function (t) { return t === globalFunctionType ? [unknownSignature] : getSignaturesOfType(t, 0 /* Call */); }));
             var constructSignatures = getUnionSignatures(ts.map(type.types, function (t) { return getSignaturesOfType(t, 1 /* Construct */); }));
-            var stringIndexInfo = getUnionIndexInfo(type.types, 0 /* String */);
-            var numberIndexInfo = getUnionIndexInfo(type.types, 1 /* Number */);
-            setStructuredTypeMembers(type, emptySymbols, callSignatures, constructSignatures, stringIndexInfo, numberIndexInfo);
+            var indexInfos = getUnionIndexInfos(type.types);
+            setStructuredTypeMembers(type, emptySymbols, callSignatures, constructSignatures, indexInfos);
         }
         function intersectTypes(type1, type2) {
             return !type1 ? type2 : !type2 ? type1 : getIntersectionType([type1, type2]);
         }
-        function intersectIndexInfos(info1, info2) {
-            return !info1 ? info2 : !info2 ? info1 : createIndexInfo(getIntersectionType([info1.type, info2.type]), info1.isReadonly && info2.isReadonly);
-        }
-        function unionSpreadIndexInfos(info1, info2) {
-            return info1 && info2 && createIndexInfo(getUnionType([info1.type, info2.type]), info1.isReadonly || info2.isReadonly);
-        }
         function findMixins(types) {
             var constructorTypeCount = ts.countWhere(types, function (t) { return getSignaturesOfType(t, 1 /* Construct */).length > 0; });
             var mixinFlags = ts.map(types, isMixinConstructorType);
@@ -54366,12 +55489,11 @@
             // intersection type use getPropertiesOfType (only the language service uses this).
             var callSignatures;
             var constructSignatures;
-            var stringIndexInfo;
-            var numberIndexInfo;
+            var indexInfos;
             var types = type.types;
             var mixinFlags = findMixins(types);
             var mixinCount = ts.countWhere(mixinFlags, function (b) { return b; });
-            var _loop_11 = function (i) {
+            var _loop_12 = function (i) {
                 var t = type.types[i];
                 // When an intersection type contains mixin constructor types, the construct signatures from
                 // those types are discarded and their return types are mixed into the return types of all
@@ -54390,54 +55512,62 @@
                     constructSignatures = appendSignatures(constructSignatures, signatures);
                 }
                 callSignatures = appendSignatures(callSignatures, getSignaturesOfType(t, 0 /* Call */));
-                stringIndexInfo = intersectIndexInfos(stringIndexInfo, getIndexInfoOfType(t, 0 /* String */));
-                numberIndexInfo = intersectIndexInfos(numberIndexInfo, getIndexInfoOfType(t, 1 /* Number */));
+                indexInfos = ts.reduceLeft(getIndexInfosOfType(t), function (infos, newInfo) { return appendIndexInfo(infos, newInfo, /*union*/ false); }, indexInfos);
             };
             for (var i = 0; i < types.length; i++) {
-                _loop_11(i);
+                _loop_12(i);
             }
-            setStructuredTypeMembers(type, emptySymbols, callSignatures || ts.emptyArray, constructSignatures || ts.emptyArray, stringIndexInfo, numberIndexInfo);
+            setStructuredTypeMembers(type, emptySymbols, callSignatures || ts.emptyArray, constructSignatures || ts.emptyArray, indexInfos || ts.emptyArray);
         }
         function appendSignatures(signatures, newSignatures) {
-            var _loop_12 = function (sig) {
+            var _loop_13 = function (sig) {
                 if (!signatures || ts.every(signatures, function (s) { return !compareSignaturesIdentical(s, sig, /*partialMatch*/ false, /*ignoreThisTypes*/ false, /*ignoreReturnTypes*/ false, compareTypesIdentical); })) {
                     signatures = ts.append(signatures, sig);
                 }
             };
             for (var _i = 0, newSignatures_1 = newSignatures; _i < newSignatures_1.length; _i++) {
                 var sig = newSignatures_1[_i];
-                _loop_12(sig);
+                _loop_13(sig);
             }
             return signatures;
         }
+        function appendIndexInfo(indexInfos, newInfo, union) {
+            if (indexInfos) {
+                for (var i = 0; i < indexInfos.length; i++) {
+                    var info = indexInfos[i];
+                    if (info.keyType === newInfo.keyType) {
+                        indexInfos[i] = createIndexInfo(info.keyType, union ? getUnionType([info.type, newInfo.type]) : getIntersectionType([info.type, newInfo.type]), union ? info.isReadonly || newInfo.isReadonly : info.isReadonly && newInfo.isReadonly);
+                        return indexInfos;
+                    }
+                }
+            }
+            return ts.append(indexInfos, newInfo);
+        }
         /**
          * Converts an AnonymousType to a ResolvedType.
          */
         function resolveAnonymousTypeMembers(type) {
             var symbol = getMergedSymbol(type.symbol);
             if (type.target) {
-                setStructuredTypeMembers(type, emptySymbols, ts.emptyArray, ts.emptyArray, undefined, undefined);
+                setStructuredTypeMembers(type, emptySymbols, ts.emptyArray, ts.emptyArray, ts.emptyArray);
                 var members = createInstantiatedSymbolTable(getPropertiesOfObjectType(type.target), type.mapper, /*mappingThisOnly*/ false);
                 var callSignatures = instantiateSignatures(getSignaturesOfType(type.target, 0 /* Call */), type.mapper);
                 var constructSignatures = instantiateSignatures(getSignaturesOfType(type.target, 1 /* Construct */), type.mapper);
-                var stringIndexInfo = instantiateIndexInfo(getIndexInfoOfType(type.target, 0 /* String */), type.mapper);
-                var numberIndexInfo = instantiateIndexInfo(getIndexInfoOfType(type.target, 1 /* Number */), type.mapper);
-                setStructuredTypeMembers(type, members, callSignatures, constructSignatures, stringIndexInfo, numberIndexInfo);
+                var indexInfos = instantiateIndexInfos(getIndexInfosOfType(type.target), type.mapper);
+                setStructuredTypeMembers(type, members, callSignatures, constructSignatures, indexInfos);
             }
             else if (symbol.flags & 2048 /* TypeLiteral */) {
-                setStructuredTypeMembers(type, emptySymbols, ts.emptyArray, ts.emptyArray, undefined, undefined);
+                setStructuredTypeMembers(type, emptySymbols, ts.emptyArray, ts.emptyArray, ts.emptyArray);
                 var members = getMembersOfSymbol(symbol);
                 var callSignatures = getSignaturesOfSymbol(members.get("__call" /* Call */));
                 var constructSignatures = getSignaturesOfSymbol(members.get("__new" /* New */));
-                var stringIndexInfo = getIndexInfoOfSymbol(symbol, 0 /* String */);
-                var numberIndexInfo = getIndexInfoOfSymbol(symbol, 1 /* Number */);
-                setStructuredTypeMembers(type, members, callSignatures, constructSignatures, stringIndexInfo, numberIndexInfo);
+                var indexInfos = getIndexInfosOfSymbol(symbol);
+                setStructuredTypeMembers(type, members, callSignatures, constructSignatures, indexInfos);
             }
             else {
                 // Combinations of function, class, enum and module
                 var members = emptySymbols;
-                var stringIndexInfo = void 0;
-                var numberIndexInfo = void 0;
+                var indexInfos = void 0;
                 if (symbol.exports) {
                     members = getExportsOfSymbol(symbol);
                     if (symbol === globalThisSymbol) {
@@ -54451,7 +55581,7 @@
                     }
                 }
                 var baseConstructorIndexInfo = void 0;
-                setStructuredTypeMembers(type, members, ts.emptyArray, ts.emptyArray, undefined, undefined);
+                setStructuredTypeMembers(type, members, ts.emptyArray, ts.emptyArray, ts.emptyArray);
                 if (symbol.flags & 32 /* Class */) {
                     var classType = getDeclaredTypeOfClassOrInterface(symbol);
                     var baseConstructorType = getBaseConstructorTypeOfClass(classType);
@@ -54460,22 +55590,23 @@
                         addInheritedMembers(members, getPropertiesOfType(baseConstructorType));
                     }
                     else if (baseConstructorType === anyType) {
-                        baseConstructorIndexInfo = createIndexInfo(anyType, /*isReadonly*/ false);
+                        baseConstructorIndexInfo = createIndexInfo(stringType, anyType, /*isReadonly*/ false);
                     }
                 }
                 var indexSymbol = getIndexSymbolFromSymbolTable(members);
                 if (indexSymbol) {
-                    stringIndexInfo = getIndexInfoOfIndexSymbol(indexSymbol, 0 /* String */);
-                    numberIndexInfo = getIndexInfoOfIndexSymbol(indexSymbol, 1 /* Number */);
+                    indexInfos = getIndexInfosOfIndexSymbol(indexSymbol);
                 }
                 else {
-                    stringIndexInfo = baseConstructorIndexInfo;
+                    if (baseConstructorIndexInfo) {
+                        indexInfos = ts.append(indexInfos, baseConstructorIndexInfo);
+                    }
                     if (symbol.flags & 384 /* Enum */ && (getDeclaredTypeOfSymbol(symbol).flags & 32 /* Enum */ ||
                         ts.some(type.properties, function (prop) { return !!(getTypeOfSymbol(prop).flags & 296 /* NumberLike */); }))) {
-                        numberIndexInfo = enumNumberIndexInfo;
+                        indexInfos = ts.append(indexInfos, enumNumberIndexInfo);
                     }
                 }
-                setStructuredTypeMembers(type, members, ts.emptyArray, ts.emptyArray, stringIndexInfo, numberIndexInfo);
+                setStructuredTypeMembers(type, members, ts.emptyArray, ts.emptyArray, indexInfos || ts.emptyArray);
                 // We resolve the members before computing the signatures because a signature may use
                 // typeof with a qualified name expression that circularly references the type we are
                 // in the process of resolving (see issue #6072). The temporarily empty signature list
@@ -54503,20 +55634,14 @@
             // map type.indexType to 0
             // map type.objectType to `[TReplacement]`
             // thus making the indexed access `[TReplacement][0]` or `TReplacement`
-            return instantiateType(instantiable, createTypeMapper([type.indexType, type.objectType], [getLiteralType(0), createTupleType([replacement])]));
-        }
-        function getIndexInfoOfIndexSymbol(indexSymbol, indexKind) {
-            var declaration = getIndexDeclarationOfIndexSymbol(indexSymbol, indexKind);
-            if (!declaration)
-                return undefined;
-            return createIndexInfo(declaration.type ? getTypeFromTypeNode(declaration.type) : anyType, ts.hasEffectiveModifier(declaration, 64 /* Readonly */), declaration);
+            return instantiateType(instantiable, createTypeMapper([type.indexType, type.objectType], [getNumberLiteralType(0), createTupleType([replacement])]));
         }
         function resolveReverseMappedTypeMembers(type) {
-            var indexInfo = getIndexInfoOfType(type.source, 0 /* String */);
+            var indexInfo = getIndexInfoOfType(type.source, stringType);
             var modifiers = getMappedTypeModifiers(type.mappedType);
             var readonlyMask = modifiers & 1 /* IncludeReadonly */ ? false : true;
             var optionalMask = modifiers & 4 /* IncludeOptional */ ? 0 : 16777216 /* Optional */;
-            var stringIndexInfo = indexInfo && createIndexInfo(inferReverseMappedType(indexInfo.type, type.mappedType, type.constraintType), readonlyMask && indexInfo.isReadonly);
+            var indexInfos = indexInfo ? [createIndexInfo(stringType, inferReverseMappedType(indexInfo.type, type.mappedType, type.constraintType), readonlyMask && indexInfo.isReadonly)] : ts.emptyArray;
             var members = ts.createSymbolTable();
             for (var _i = 0, _a = getPropertiesOfType(type.source); _i < _a.length; _i++) {
                 var prop = _a[_i];
@@ -54542,7 +55667,7 @@
                 }
                 members.set(prop.escapedName, inferredProp);
             }
-            setStructuredTypeMembers(type, members, ts.emptyArray, ts.emptyArray, stringIndexInfo, undefined);
+            setStructuredTypeMembers(type, members, ts.emptyArray, ts.emptyArray, indexInfos);
         }
         // Return the lower bound of the key type in a mapped type. Intuitively, the lower
         // bound includes those keys that are known to always be present, for example because
@@ -54576,10 +55701,9 @@
         /** Resolve the members of a mapped type { [P in K]: T } */
         function resolveMappedTypeMembers(type) {
             var members = ts.createSymbolTable();
-            var stringIndexInfo;
-            var numberIndexInfo;
+            var indexInfos;
             // Resolve upfront such that recursive references see an empty object type.
-            setStructuredTypeMembers(type, emptySymbols, ts.emptyArray, ts.emptyArray, undefined, undefined);
+            setStructuredTypeMembers(type, emptySymbols, ts.emptyArray, ts.emptyArray, ts.emptyArray);
             // In { [P in K]: T }, we refer to P as the type parameter type, K as the constraint type,
             // and T as the template type.
             var typeParameter = getTypeParameterFromMappedType(type);
@@ -54595,17 +55719,22 @@
                     var prop = _a[_i];
                     addMemberForKeyType(getLiteralTypeFromProperty(prop, include));
                 }
-                if (modifiersType.flags & 1 /* Any */ || getIndexInfoOfType(modifiersType, 0 /* String */)) {
+                if (modifiersType.flags & 1 /* Any */) {
                     addMemberForKeyType(stringType);
                 }
-                if (!keyofStringsOnly && getIndexInfoOfType(modifiersType, 1 /* Number */)) {
-                    addMemberForKeyType(numberType);
+                else {
+                    for (var _b = 0, _c = getIndexInfosOfType(modifiersType); _b < _c.length; _b++) {
+                        var info = _c[_b];
+                        if (!keyofStringsOnly || info.keyType.flags & (4 /* String */ | 134217728 /* TemplateLiteral */)) {
+                            addMemberForKeyType(info.keyType);
+                        }
+                    }
                 }
             }
             else {
                 forEachType(getLowerBoundOfKeyType(constraintType), addMemberForKeyType);
             }
-            setStructuredTypeMembers(type, members, ts.emptyArray, ts.emptyArray, stringIndexInfo, numberIndexInfo);
+            setStructuredTypeMembers(type, members, ts.emptyArray, ts.emptyArray, indexInfos || ts.emptyArray);
             function addMemberForKeyType(keyType) {
                 var propNameType = nameType ? instantiateType(nameType, appendTypeMapping(type.mapper, typeParameter, keyType)) : keyType;
                 forEachType(propNameType, function (t) { return addMemberForKeyTypeWorker(keyType, t); });
@@ -54637,19 +55766,20 @@
                         prop.keyType = keyType;
                         if (modifiersProp) {
                             prop.syntheticOrigin = modifiersProp;
-                            prop.declarations = modifiersProp.declarations;
+                            // If the mapped type has an `as XXX` clause, the property name likely won't match the declaration name and
+                            // multiple properties may map to the same name. Thus, we attach no declarations to the symbol.
+                            prop.declarations = nameType ? undefined : modifiersProp.declarations;
                         }
                         members.set(propName, prop);
                     }
                 }
-                else if (propNameType.flags & (1 /* Any */ | 4 /* String */ | 8 /* Number */ | 32 /* Enum */)) {
+                else if (isValidIndexKeyType(propNameType) || propNameType.flags & (1 /* Any */ | 32 /* Enum */)) {
+                    var indexKeyType = propNameType.flags & (1 /* Any */ | 4 /* String */) ? stringType :
+                        propNameType.flags & (8 /* Number */ | 32 /* Enum */) ? numberType :
+                            propNameType;
                     var propType = instantiateType(templateType, appendTypeMapping(type.mapper, typeParameter, keyType));
-                    if (propNameType.flags & (1 /* Any */ | 4 /* String */)) {
-                        stringIndexInfo = createIndexInfo(stringIndexInfo ? getUnionType([stringIndexInfo.type, propType]) : propType, !!(templateModifiers & 1 /* IncludeReadonly */));
-                    }
-                    else {
-                        numberIndexInfo = createIndexInfo(numberIndexInfo ? getUnionType([numberIndexInfo.type, propType]) : propType, !!(templateModifiers & 1 /* IncludeReadonly */));
-                    }
+                    var indexInfo = createIndexInfo(indexKeyType, propType, !!(templateModifiers & 1 /* IncludeReadonly */));
+                    indexInfos = appendIndexInfo(indexInfos, indexInfo, /*union*/ true);
                 }
             }
         }
@@ -54666,8 +55796,8 @@
                 // When creating an optional property in strictNullChecks mode, if 'undefined' isn't assignable to the
                 // type, we include 'undefined' in the type. Similarly, when creating a non-optional property in strictNullChecks
                 // mode, if the underlying property is optional we remove 'undefined' from the type.
-                var type = strictNullChecks && symbol.flags & 16777216 /* Optional */ && !maybeTypeOfKind(propType, 32768 /* Undefined */ | 16384 /* Void */) ? getOptionalType(propType) :
-                    symbol.checkFlags & 524288 /* StripOptional */ ? getTypeWithFacts(propType, 524288 /* NEUndefined */) :
+                var type = strictNullChecks && symbol.flags & 16777216 /* Optional */ && !maybeTypeOfKind(propType, 32768 /* Undefined */ | 16384 /* Void */) ? getOptionalType(propType, /*isProperty*/ true) :
+                    symbol.checkFlags & 524288 /* StripOptional */ ? removeMissingOrUndefinedType(propType) :
                         propType;
                 if (!popTypeResolution()) {
                     error(currentNode, ts.Diagnostics.Type_of_property_0_circularly_references_itself_in_mapped_type_1, symbolToString(symbol), typeToString(mappedType));
@@ -54693,7 +55823,7 @@
         function getTemplateTypeFromMappedType(type) {
             return type.templateType ||
                 (type.templateType = type.declaration.type ?
-                    instantiateType(addOptionality(getTypeFromTypeNode(type.declaration.type), !!(getMappedTypeModifiers(type) & 4 /* IncludeOptional */)), type.mapper) :
+                    instantiateType(addOptionality(getTypeFromTypeNode(type.declaration.type), /*isProperty*/ true, !!(getMappedTypeModifiers(type) & 4 /* IncludeOptional */)), type.mapper) :
                     errorType);
         }
         function getConstraintDeclarationForMappedType(type) {
@@ -54701,8 +55831,8 @@
         }
         function isMappedTypeWithKeyofConstraintDeclaration(type) {
             var constraintDeclaration = getConstraintDeclarationForMappedType(type); // TODO: GH#18217
-            return constraintDeclaration.kind === 189 /* TypeOperator */ &&
-                constraintDeclaration.operator === 138 /* KeyOfKeyword */;
+            return constraintDeclaration.kind === 191 /* TypeOperator */ &&
+                constraintDeclaration.operator === 139 /* KeyOfKeyword */;
         }
         function getModifiersTypeFromMappedType(type) {
             if (!type.modifiersType) {
@@ -54807,7 +55937,7 @@
                     }
                     // The properties of a union type are those that are present in all constituent types, so
                     // we only need to check the properties of the first type without index signature
-                    if (type.flags & 1048576 /* Union */ && !getIndexInfoOfType(current, 0 /* String */) && !getIndexInfoOfType(current, 1 /* Number */)) {
+                    if (type.flags & 1048576 /* Union */ && getIndexInfosOfType(current).length === 0) {
                         break;
                     }
                 }
@@ -54836,8 +55966,8 @@
                 return getAugmentedPropertiesOfType(unionType);
             }
             var props = ts.createSymbolTable();
-            for (var _i = 0, types_5 = types; _i < types_5.length; _i++) {
-                var memberType = types_5[_i];
+            for (var _i = 0, types_4 = types; _i < types_4.length; _i++) {
+                var memberType = types_4[_i];
                 for (var _a = 0, _b = getAugmentedPropertiesOfType(memberType); _a < _b.length; _a++) {
                     var escapedName = _b[_a].escapedName;
                     if (!props.has(escapedName)) {
@@ -54869,14 +55999,14 @@
         function getConstraintFromIndexedAccess(type) {
             var indexConstraint = getSimplifiedTypeOrConstraint(type.indexType);
             if (indexConstraint && indexConstraint !== type.indexType) {
-                var indexedAccess = getIndexedAccessTypeOrUndefined(type.objectType, indexConstraint, type.noUncheckedIndexedAccessCandidate);
+                var indexedAccess = getIndexedAccessTypeOrUndefined(type.objectType, indexConstraint, type.accessFlags);
                 if (indexedAccess) {
                     return indexedAccess;
                 }
             }
             var objectConstraint = getSimplifiedTypeOrConstraint(type.objectType);
             if (objectConstraint && objectConstraint !== type.objectType) {
-                return getIndexedAccessTypeOrUndefined(objectConstraint, type.indexType, type.noUncheckedIndexedAccessCandidate);
+                return getIndexedAccessTypeOrUndefined(objectConstraint, type.indexType, type.accessFlags);
             }
             return undefined;
         }
@@ -54925,8 +56055,8 @@
         function getEffectiveConstraintOfIntersection(types, targetIsUnion) {
             var constraints;
             var hasDisjointDomainType = false;
-            for (var _i = 0, types_6 = types; _i < types_6.length; _i++) {
-                var t = types_6[_i];
+            for (var _i = 0, types_5 = types; _i < types_5.length; _i++) {
+                var t = types_5[_i];
                 if (t.flags & 465829888 /* Instantiable */) {
                     // We keep following constraints as long as we have an instantiable type that is known
                     // not to be circular or infinite (hence we stop on index access types).
@@ -54951,8 +56081,8 @@
                 if (hasDisjointDomainType) {
                     // We add any types belong to one of the disjoint domains because they might cause the final
                     // intersection operation to reduce the union constraints.
-                    for (var _a = 0, types_7 = types; _a < types_7.length; _a++) {
-                        var t = types_7[_a];
+                    for (var _a = 0, types_6 = types; _a < types_6.length; _a++) {
+                        var t = types_6[_a];
                         if (t.flags & 469892092 /* DisjointDomains */) {
                             constraints = ts.append(constraints, t);
                         }
@@ -55038,8 +56168,8 @@
                     var types = t.types;
                     var baseTypes = [];
                     var different = false;
-                    for (var _i = 0, types_8 = types; _i < types_8.length; _i++) {
-                        var type_3 = types_8[_i];
+                    for (var _i = 0, types_7 = types; _i < types_7.length; _i++) {
+                        var type_3 = types_7[_i];
                         var baseType = getBaseConstraint(type_3);
                         if (baseType) {
                             if (baseType !== type_3) {
@@ -55073,7 +56203,7 @@
                 if (t.flags & 8388608 /* IndexedAccess */) {
                     var baseObjectType = getBaseConstraint(t.objectType);
                     var baseIndexType = getBaseConstraint(t.indexType);
-                    var baseIndexedAccess = baseObjectType && baseIndexType && getIndexedAccessTypeOrUndefined(baseObjectType, baseIndexType, t.noUncheckedIndexedAccessCandidate);
+                    var baseIndexedAccess = baseObjectType && baseIndexType && getIndexedAccessTypeOrUndefined(baseObjectType, baseIndexType, t.accessFlags);
                     return baseIndexedAccess && getBaseConstraint(baseIndexedAccess);
                 }
                 if (t.flags & 16777216 /* Conditional */) {
@@ -55230,7 +56360,7 @@
                         }
                     }
                     else if (isUnion) {
-                        var indexInfo = !isLateBoundName(name) && (isNumericLiteralName(name) && getIndexInfoOfType(type, 1 /* Number */) || getIndexInfoOfType(type, 0 /* String */));
+                        var indexInfo = !isLateBoundName(name) && getApplicableIndexInfoForName(type, name);
                         if (indexInfo) {
                             checkFlags |= 32 /* WritePartial */ | (indexInfo.isReadonly ? 8 /* Readonly */ : 0);
                             indexTypes = ts.append(indexTypes, isTupleType(type) ? getRestTypeOfTupleType(type) || undefinedType : indexInfo.type);
@@ -55350,15 +56480,15 @@
          * no constituent property has type 'never', but the intersection of the constituent property types is 'never'.
          */
         function getReducedType(type) {
-            if (type.flags & 1048576 /* Union */ && type.objectFlags & 67108864 /* ContainsIntersections */) {
+            if (type.flags & 1048576 /* Union */ && type.objectFlags & 33554432 /* ContainsIntersections */) {
                 return type.resolvedReducedType || (type.resolvedReducedType = getReducedUnionType(type));
             }
             else if (type.flags & 2097152 /* Intersection */) {
-                if (!(type.objectFlags & 67108864 /* IsNeverIntersectionComputed */)) {
-                    type.objectFlags |= 67108864 /* IsNeverIntersectionComputed */ |
-                        (ts.some(getPropertiesOfUnionOrIntersectionType(type), isNeverReducedProperty) ? 134217728 /* IsNeverIntersection */ : 0);
+                if (!(type.objectFlags & 33554432 /* IsNeverIntersectionComputed */)) {
+                    type.objectFlags |= 33554432 /* IsNeverIntersectionComputed */ |
+                        (ts.some(getPropertiesOfUnionOrIntersectionType(type), isNeverReducedProperty) ? 67108864 /* IsNeverIntersection */ : 0);
                 }
-                return type.objectFlags & 134217728 /* IsNeverIntersection */ ? neverType : type;
+                return type.objectFlags & 67108864 /* IsNeverIntersection */ ? neverType : type;
             }
             return type;
         }
@@ -55388,7 +56518,7 @@
             return !prop.valueDeclaration && !!(ts.getCheckFlags(prop) & 1024 /* ContainsPrivate */);
         }
         function elaborateNeverIntersection(errorInfo, type) {
-            if (type.flags & 2097152 /* Intersection */ && ts.getObjectFlags(type) & 134217728 /* IsNeverIntersection */) {
+            if (type.flags & 2097152 /* Intersection */ && ts.getObjectFlags(type) & 67108864 /* IsNeverIntersection */) {
                 var neverProp = ts.find(getPropertiesOfUnionOrIntersectionType(type), isDiscriminantWithNeverType);
                 if (neverProp) {
                     return ts.chainDiagnosticMessages(errorInfo, ts.Diagnostics.The_intersection_0_was_reduced_to_never_because_property_1_has_conflicting_types_in_some_constituents, typeToString(type, /*enclosingDeclaration*/ undefined, 536870912 /* NoTypeReduction */), symbolToString(neverProp));
@@ -55449,44 +56579,72 @@
         function getSignaturesOfType(type, kind) {
             return getSignaturesOfStructuredType(getReducedApparentType(type), kind);
         }
-        function getIndexInfoOfStructuredType(type, kind) {
+        function findIndexInfo(indexInfos, keyType) {
+            return ts.find(indexInfos, function (info) { return info.keyType === keyType; });
+        }
+        function findApplicableIndexInfo(indexInfos, keyType) {
+            // Index signatures for type 'string' are considered only when no other index signatures apply.
+            var stringIndexInfo;
+            var applicableInfo;
+            var applicableInfos;
+            for (var _i = 0, indexInfos_1 = indexInfos; _i < indexInfos_1.length; _i++) {
+                var info = indexInfos_1[_i];
+                if (info.keyType === stringType) {
+                    stringIndexInfo = info;
+                }
+                else if (isApplicableIndexType(keyType, info.keyType)) {
+                    if (!applicableInfo) {
+                        applicableInfo = info;
+                    }
+                    else {
+                        (applicableInfos || (applicableInfos = [applicableInfo])).push(info);
+                    }
+                }
+            }
+            // When more than one index signature is applicable we create a synthetic IndexInfo. Instead of computing
+            // the intersected key type, we just use unknownType for the key type as nothing actually depends on the
+            // keyType property of the returned IndexInfo.
+            return applicableInfos ? createIndexInfo(unknownType, getIntersectionType(ts.map(applicableInfos, function (info) { return info.type; })), ts.reduceLeft(applicableInfos, function (isReadonly, info) { return isReadonly && info.isReadonly; }, /*initial*/ true)) :
+                applicableInfo ? applicableInfo :
+                    stringIndexInfo && isApplicableIndexType(keyType, stringType) ? stringIndexInfo :
+                        undefined;
+        }
+        function isApplicableIndexType(source, target) {
+            // A 'string' index signature applies to types assignable to 'string' or 'number', and a 'number' index
+            // signature applies to types assignable to 'number' and numeric string literal types.
+            return isTypeAssignableTo(source, target) ||
+                target === stringType && isTypeAssignableTo(source, numberType) ||
+                target === numberType && !!(source.flags & 128 /* StringLiteral */) && isNumericLiteralName(source.value);
+        }
+        function getIndexInfosOfStructuredType(type) {
             if (type.flags & 3670016 /* StructuredType */) {
                 var resolved = resolveStructuredTypeMembers(type);
-                return kind === 0 /* String */ ? resolved.stringIndexInfo : resolved.numberIndexInfo;
+                return resolved.indexInfos;
             }
+            return ts.emptyArray;
         }
-        function getIndexTypeOfStructuredType(type, kind) {
-            var info = getIndexInfoOfStructuredType(type, kind);
-            return info && info.type;
+        function getIndexInfosOfType(type) {
+            return getIndexInfosOfStructuredType(getReducedApparentType(type));
         }
         // Return the indexing info of the given kind in the given type. Creates synthetic union index types when necessary and
         // maps primitive types and type parameters are to their apparent types.
-        function getIndexInfoOfType(type, kind) {
-            return getIndexInfoOfStructuredType(getReducedApparentType(type), kind);
+        function getIndexInfoOfType(type, keyType) {
+            return findIndexInfo(getIndexInfosOfType(type), keyType);
         }
         // Return the index type of the given kind in the given type. Creates synthetic union index types when necessary and
         // maps primitive types and type parameters are to their apparent types.
-        function getIndexTypeOfType(type, kind) {
-            return getIndexTypeOfStructuredType(getReducedApparentType(type), kind);
+        function getIndexTypeOfType(type, keyType) {
+            var _a;
+            return (_a = getIndexInfoOfType(type, keyType)) === null || _a === void 0 ? void 0 : _a.type;
         }
-        function getImplicitIndexTypeOfType(type, kind) {
-            if (isObjectTypeWithInferableIndex(type)) {
-                var propTypes = [];
-                for (var _i = 0, _a = getPropertiesOfType(type); _i < _a.length; _i++) {
-                    var prop = _a[_i];
-                    if (kind === 0 /* String */ || isNumericLiteralName(prop.escapedName)) {
-                        var propType = getTypeOfSymbol(prop);
-                        propTypes.push(prop.flags & 16777216 /* Optional */ ? getTypeWithFacts(propType, 524288 /* NEUndefined */) : propType);
-                    }
-                }
-                if (kind === 0 /* String */) {
-                    ts.append(propTypes, getIndexTypeOfType(type, 1 /* Number */));
-                }
-                if (propTypes.length) {
-                    return getUnionType(propTypes);
-                }
-            }
-            return undefined;
+        function getApplicableIndexInfos(type, keyType) {
+            return getIndexInfosOfType(type).filter(function (info) { return isApplicableIndexType(keyType, info.keyType); });
+        }
+        function getApplicableIndexInfo(type, keyType) {
+            return findApplicableIndexInfo(getIndexInfosOfType(type), keyType);
+        }
+        function getApplicableIndexInfoForName(type, name) {
+            return getApplicableIndexInfo(type, isLateBoundName(name) ? esSymbolType : getStringLiteralType(ts.unescapeLeadingUnderscores(name)));
         }
         // Return list of type parameters with duplicates removed (duplicate identifier errors are generated in the actual
         // type checking functions).
@@ -55510,10 +56668,10 @@
         function isJSDocOptionalParameter(node) {
             return ts.isInJSFile(node) && (
             // node.type should only be a JSDocOptionalType when node is a parameter of a JSDocFunctionType
-            node.type && node.type.kind === 308 /* JSDocOptionalType */
+            node.type && node.type.kind === 311 /* JSDocOptionalType */
                 || ts.getJSDocParameterTags(node).some(function (_a) {
                     var isBracketed = _a.isBracketed, typeExpression = _a.typeExpression;
-                    return isBracketed || !!typeExpression && typeExpression.type.kind === 308 /* JSDocOptionalType */;
+                    return isBracketed || !!typeExpression && typeExpression.type.kind === 311 /* JSDocOptionalType */;
                 }));
         }
         function tryFindAmbientModule(moduleName, withAugmentations) {
@@ -55553,7 +56711,7 @@
                 return false;
             }
             var isBracketed = node.isBracketed, typeExpression = node.typeExpression;
-            return isBracketed || !!typeExpression && typeExpression.type.kind === 308 /* JSDocOptionalType */;
+            return isBracketed || !!typeExpression && typeExpression.type.kind === 311 /* JSDocOptionalType */;
         }
         function createTypePredicate(kind, parameterName, parameterIndex, type) {
             return { kind: kind, parameterName: parameterName, parameterIndex: parameterIndex, type: type };
@@ -55635,12 +56793,12 @@
                     else {
                         parameters.push(paramSymbol);
                     }
-                    if (type && type.kind === 192 /* LiteralType */) {
+                    if (type && type.kind === 194 /* LiteralType */) {
                         flags |= 2 /* HasLiteralTypes */;
                     }
                     // Record a new minimum argument count if this is not an optional parameter
                     var isOptionalParameter_1 = isOptionalJSDocPropertyLikeTag(param) ||
-                        param.initializer || param.questionToken || param.dotDotDotToken ||
+                        param.initializer || param.questionToken || ts.isRestParameter(param) ||
                         iife && parameters.length > iife.arguments.length && !type ||
                         isJSDocOptionalParameter(param);
                     if (!isOptionalParameter_1) {
@@ -55648,16 +56806,16 @@
                     }
                 }
                 // If only one accessor includes a this-type annotation, the other behaves as if it had the same type annotation
-                if ((declaration.kind === 168 /* GetAccessor */ || declaration.kind === 169 /* SetAccessor */) &&
+                if ((declaration.kind === 170 /* GetAccessor */ || declaration.kind === 171 /* SetAccessor */) &&
                     hasBindableName(declaration) &&
                     (!hasThisParameter || !thisParameter)) {
-                    var otherKind = declaration.kind === 168 /* GetAccessor */ ? 169 /* SetAccessor */ : 168 /* GetAccessor */;
+                    var otherKind = declaration.kind === 170 /* GetAccessor */ ? 171 /* SetAccessor */ : 170 /* GetAccessor */;
                     var other = ts.getDeclarationOfKind(getSymbolOfNode(declaration), otherKind);
                     if (other) {
                         thisParameter = getAnnotatedAccessorThisParameter(other);
                     }
                 }
-                var classType = declaration.kind === 167 /* Constructor */ ?
+                var classType = declaration.kind === 169 /* Constructor */ ?
                     getDeclaredTypeOfClassOrInterface(getMergedSymbol(declaration.parent.symbol))
                     : undefined;
                 var typeParameters = classType ? classType.localTypeParameters : getTypeParametersFromDeclaration(declaration);
@@ -55723,16 +56881,16 @@
                 if (!node)
                     return false;
                 switch (node.kind) {
-                    case 78 /* Identifier */:
+                    case 79 /* Identifier */:
                         return node.escapedText === argumentsSymbol.escapedName && getResolvedSymbol(node) === argumentsSymbol;
-                    case 164 /* PropertyDeclaration */:
-                    case 166 /* MethodDeclaration */:
-                    case 168 /* GetAccessor */:
-                    case 169 /* SetAccessor */:
-                        return node.name.kind === 159 /* ComputedPropertyName */
+                    case 165 /* PropertyDeclaration */:
+                    case 167 /* MethodDeclaration */:
+                    case 170 /* GetAccessor */:
+                    case 171 /* SetAccessor */:
+                        return node.name.kind === 160 /* ComputedPropertyName */
                             && traverse(node.name);
-                    case 202 /* PropertyAccessExpression */:
-                    case 203 /* ElementAccessExpression */:
+                    case 204 /* PropertyAccessExpression */:
+                    case 205 /* ElementAccessExpression */:
                         return traverse(node.expression);
                     default:
                         return !ts.nodeStartsNewLexicalEnvironment(node) && !ts.isPartOfTypeNode(node) && !!ts.forEachChild(node, traverse);
@@ -55804,7 +56962,7 @@
         function createTypePredicateFromTypePredicateNode(node, signature) {
             var parameterName = node.parameterName;
             var type = node.type && getTypeFromTypeNode(node.type);
-            return parameterName.kind === 188 /* ThisType */ ?
+            return parameterName.kind === 190 /* ThisType */ ?
                 createTypePredicate(node.assertsModifier ? 2 /* AssertsThis */ : 0 /* This */, /*parameterName*/ undefined, /*parameterIndex*/ undefined, type) :
                 createTypePredicate(node.assertsModifier ? 3 /* AssertsIdentifier */ : 1 /* Identifier */, parameterName.escapedText, ts.findIndex(signature.parameters, function (p) { return p.escapedName === parameterName.escapedText; }), type);
         }
@@ -55850,7 +57008,7 @@
             return signature.resolvedReturnType;
         }
         function getReturnTypeFromAnnotation(declaration) {
-            if (declaration.kind === 167 /* Constructor */) {
+            if (declaration.kind === 169 /* Constructor */) {
                 return getDeclaredTypeOfClassOrInterface(getMergedSymbol(declaration.parent.symbol));
             }
             if (ts.isJSDocConstructSignature(declaration)) {
@@ -55860,12 +57018,12 @@
             if (typeNode) {
                 return getTypeFromTypeNode(typeNode);
             }
-            if (declaration.kind === 168 /* GetAccessor */ && hasBindableName(declaration)) {
+            if (declaration.kind === 170 /* GetAccessor */ && hasBindableName(declaration)) {
                 var jsDocType = ts.isInJSFile(declaration) && getTypeForDeclarationFromJSDocComment(declaration);
                 if (jsDocType) {
                     return jsDocType;
                 }
-                var setter = ts.getDeclarationOfKind(getSymbolOfNode(declaration), 169 /* SetAccessor */);
+                var setter = ts.getDeclarationOfKind(getSymbolOfNode(declaration), 171 /* SetAccessor */);
                 var setterType = getAnnotatedAccessorType(setter);
                 if (setterType) {
                     return setterType;
@@ -55883,7 +57041,7 @@
             if (signatureHasRestParameter(signature)) {
                 var sigRestType = getTypeOfSymbol(signature.parameters[signature.parameters.length - 1]);
                 var restType = isTupleType(sigRestType) ? getRestTypeOfTupleType(sigRestType) : sigRestType;
-                return restType && getIndexTypeOfType(restType, 1 /* Number */);
+                return restType && getIndexTypeOfType(restType, numberType);
             }
             return undefined;
         }
@@ -55966,12 +57124,13 @@
             // will result in a different declaration kind.
             if (!signature.isolatedSignatureType) {
                 var kind = signature.declaration ? signature.declaration.kind : 0 /* Unknown */;
-                var isConstructor = kind === 167 /* Constructor */ || kind === 171 /* ConstructSignature */ || kind === 176 /* ConstructorType */;
+                var isConstructor = kind === 169 /* Constructor */ || kind === 173 /* ConstructSignature */ || kind === 178 /* ConstructorType */;
                 var type = createObjectType(16 /* Anonymous */);
                 type.members = emptySymbols;
                 type.properties = ts.emptyArray;
                 type.callSignatures = !isConstructor ? [signature] : ts.emptyArray;
                 type.constructSignatures = isConstructor ? [signature] : ts.emptyArray;
+                type.indexInfos = ts.emptyArray;
                 signature.isolatedSignatureType = type;
             }
             return signature.isolatedSignatureType;
@@ -55982,39 +57141,39 @@
         function getIndexSymbolFromSymbolTable(symbolTable) {
             return symbolTable.get("__index" /* Index */);
         }
-        function getIndexDeclarationOfSymbol(symbol, kind) {
-            var indexSymbol = symbol && getIndexSymbol(symbol);
-            return indexSymbol && getIndexDeclarationOfIndexSymbol(indexSymbol, kind);
+        function createIndexInfo(keyType, type, isReadonly, declaration) {
+            return { keyType: keyType, type: type, isReadonly: isReadonly, declaration: declaration };
         }
-        function getIndexDeclarationOfSymbolTable(symbolTable, kind) {
-            var indexSymbol = symbolTable && getIndexSymbolFromSymbolTable(symbolTable);
-            return indexSymbol && getIndexDeclarationOfIndexSymbol(indexSymbol, kind);
+        function getIndexInfosOfSymbol(symbol) {
+            var indexSymbol = getIndexSymbol(symbol);
+            return indexSymbol ? getIndexInfosOfIndexSymbol(indexSymbol) : ts.emptyArray;
         }
-        function getIndexDeclarationOfIndexSymbol(indexSymbol, kind) {
-            var syntaxKind = kind === 1 /* Number */ ? 144 /* NumberKeyword */ : 147 /* StringKeyword */;
-            if (indexSymbol === null || indexSymbol === void 0 ? void 0 : indexSymbol.declarations) {
-                for (var _i = 0, _a = indexSymbol.declarations; _i < _a.length; _i++) {
-                    var decl = _a[_i];
-                    var node = ts.cast(decl, ts.isIndexSignatureDeclaration);
-                    if (node.parameters.length === 1) {
-                        var parameter = node.parameters[0];
-                        if (parameter.type && parameter.type.kind === syntaxKind) {
-                            return node;
+        function getIndexInfosOfIndexSymbol(indexSymbol) {
+            if (indexSymbol.declarations) {
+                var indexInfos_2 = [];
+                var _loop_14 = function (declaration) {
+                    if (declaration.parameters.length === 1) {
+                        var parameter = declaration.parameters[0];
+                        if (parameter.type) {
+                            forEachType(getTypeFromTypeNode(parameter.type), function (keyType) {
+                                if (isValidIndexKeyType(keyType) && !findIndexInfo(indexInfos_2, keyType)) {
+                                    indexInfos_2.push(createIndexInfo(keyType, declaration.type ? getTypeFromTypeNode(declaration.type) : anyType, ts.hasEffectiveModifier(declaration, 64 /* Readonly */), declaration));
+                                }
+                            });
                         }
                     }
+                };
+                for (var _i = 0, _a = indexSymbol.declarations; _i < _a.length; _i++) {
+                    var declaration = _a[_i];
+                    _loop_14(declaration);
                 }
+                return indexInfos_2;
             }
-            return undefined;
+            return ts.emptyArray;
         }
-        function createIndexInfo(type, isReadonly, declaration) {
-            return { type: type, isReadonly: isReadonly, declaration: declaration };
-        }
-        function getIndexInfoOfSymbol(symbol, kind) {
-            var declaration = getIndexDeclarationOfSymbol(symbol, kind);
-            if (declaration) {
-                return createIndexInfo(declaration.type ? getTypeFromTypeNode(declaration.type) : anyType, ts.hasEffectiveModifier(declaration, 64 /* Readonly */), declaration);
-            }
-            return undefined;
+        function isValidIndexKeyType(type) {
+            return !!(type.flags & (4 /* String */ | 8 /* Number */ | 4096 /* ESSymbol */)) || isPatternLiteralType(type) ||
+                !!(type.flags & 2097152 /* Intersection */) && !isGenericIndexType(type) && !isGenericObjectType(type) && ts.some(type.types, isValidIndexKeyType);
         }
         function getConstraintDeclaration(type) {
             return ts.mapDefined(ts.filter(type.symbol && type.symbol.declarations, ts.isTypeParameterDeclaration), ts.getEffectiveConstraintOfTypeParameter)[0];
@@ -56025,13 +57184,13 @@
             if ((_a = typeParameter.symbol) === null || _a === void 0 ? void 0 : _a.declarations) {
                 for (var _i = 0, _b = typeParameter.symbol.declarations; _i < _b.length; _i++) {
                     var declaration = _b[_i];
-                    if (declaration.parent.kind === 186 /* InferType */) {
+                    if (declaration.parent.kind === 188 /* InferType */) {
                         // When an 'infer T' declaration is immediately contained in a type reference node
                         // (such as 'Foo<infer T>'), T's constraint is inferred from the constraint of the
                         // corresponding type parameter in 'Foo'. When multiple 'infer T' declarations are
                         // present, we form an intersection of the inferred constraint types.
                         var _c = ts.walkUpParenthesizedTypesAndGetParentAndChild(declaration.parent.parent), _d = _c[0], childTypeParameter = _d === void 0 ? declaration.parent : _d, grandParent = _c[1];
-                        if (grandParent.kind === 174 /* TypeReference */) {
+                        if (grandParent.kind === 176 /* TypeReference */) {
                             var typeReference = grandParent;
                             var typeParameters = getTypeParametersForTypeReference(typeReference);
                             if (typeParameters) {
@@ -56056,27 +57215,27 @@
                         }
                         // When an 'infer T' declaration is immediately contained in a rest parameter declaration, a rest type
                         // or a named rest tuple element, we infer an 'unknown[]' constraint.
-                        else if (grandParent.kind === 161 /* Parameter */ && grandParent.dotDotDotToken ||
-                            grandParent.kind === 182 /* RestType */ ||
-                            grandParent.kind === 193 /* NamedTupleMember */ && grandParent.dotDotDotToken) {
+                        else if (grandParent.kind === 162 /* Parameter */ && grandParent.dotDotDotToken ||
+                            grandParent.kind === 184 /* RestType */ ||
+                            grandParent.kind === 195 /* NamedTupleMember */ && grandParent.dotDotDotToken) {
                             inferences = ts.append(inferences, createArrayType(unknownType));
                         }
                         // When an 'infer T' declaration is immediately contained in a string template type, we infer a 'string'
                         // constraint.
-                        else if (grandParent.kind === 195 /* TemplateLiteralTypeSpan */) {
+                        else if (grandParent.kind === 197 /* TemplateLiteralTypeSpan */) {
                             inferences = ts.append(inferences, stringType);
                         }
                         // When an 'infer T' declaration is in the constraint position of a mapped type, we infer a 'keyof any'
                         // constraint.
-                        else if (grandParent.kind === 160 /* TypeParameter */ && grandParent.parent.kind === 191 /* MappedType */) {
+                        else if (grandParent.kind === 161 /* TypeParameter */ && grandParent.parent.kind === 193 /* MappedType */) {
                             inferences = ts.append(inferences, keyofConstraintType);
                         }
                         // When an 'infer T' declaration is the template of a mapped type, and that mapped type is the extends
                         // clause of a conditional whose check type is also a mapped type, give it a constraint equal to the template
                         // of the check type's mapped type
-                        else if (grandParent.kind === 191 /* MappedType */ && grandParent.type &&
-                            ts.skipParentheses(grandParent.type) === declaration.parent && grandParent.parent.kind === 185 /* ConditionalType */ &&
-                            grandParent.parent.extendsType === grandParent && grandParent.parent.checkType.kind === 191 /* MappedType */ &&
+                        else if (grandParent.kind === 193 /* MappedType */ && grandParent.type &&
+                            ts.skipParentheses(grandParent.type) === declaration.parent && grandParent.parent.kind === 187 /* ConditionalType */ &&
+                            grandParent.parent.extendsType === grandParent && grandParent.parent.checkType.kind === 193 /* MappedType */ &&
                             grandParent.parent.checkType.type) {
                             var checkMappedType_1 = grandParent.parent.checkType;
                             var nodeType = getTypeFromTypeNode(checkMappedType_1.type);
@@ -56104,7 +57263,7 @@
                         if (type.flags & 1 /* Any */ && type !== errorType) { // Allow errorType to propegate to keep downstream errors suppressed
                             // use keyofConstraintType as the base constraint for mapped type key constraints (unknown isn;t assignable to that, but `any` was),
                             // use unknown otherwise
-                            type = constraintDeclaration.parent.parent.kind === 191 /* MappedType */ ? keyofConstraintType : unknownType;
+                            type = constraintDeclaration.parent.parent.kind === 193 /* MappedType */ ? keyofConstraintType : unknownType;
                         }
                         typeParameter.constraint = type;
                     }
@@ -56113,7 +57272,7 @@
             return typeParameter.constraint === noConstraintType ? undefined : typeParameter.constraint;
         }
         function getParentSymbolOfTypeParameter(typeParameter) {
-            var tp = ts.getDeclarationOfKind(typeParameter.symbol, 160 /* TypeParameter */);
+            var tp = ts.getDeclarationOfKind(typeParameter.symbol, 161 /* TypeParameter */);
             var host = ts.isJSDocTemplateTag(tp.parent) ? ts.getHostSignatureFromJSDoc(tp.parent) : tp.parent;
             return host && getSymbolOfNode(host);
         }
@@ -56149,8 +57308,8 @@
         // that care about the presence of such types at arbitrary depth in a containing type.
         function getPropagatingFlagsOfTypes(types, excludeKinds) {
             var result = 0;
-            for (var _i = 0, types_9 = types; _i < types_9.length; _i++) {
-                var type = types_9[_i];
+            for (var _i = 0, types_8 = types; _i < types_8.length; _i++) {
+                var type = types_8[_i];
                 if (!(type.flags & excludeKinds)) {
                     result |= ts.getObjectFlags(type);
                 }
@@ -56199,8 +57358,8 @@
                 }
                 var node = type.node;
                 var typeArguments = !node ? ts.emptyArray :
-                    node.kind === 174 /* TypeReference */ ? ts.concatenate(type.target.outerTypeParameters, getEffectiveTypeArguments(node, type.target.localTypeParameters)) :
-                        node.kind === 179 /* ArrayType */ ? [getTypeFromTypeNode(node.elementType)] :
+                    node.kind === 176 /* TypeReference */ ? ts.concatenate(type.target.outerTypeParameters, getEffectiveTypeArguments(node, type.target.localTypeParameters)) :
+                        node.kind === 181 /* ArrayType */ ? [getTypeFromTypeNode(node.elementType)] :
                             ts.map(node.elements, getTypeFromTypeNode);
                 if (popTypeResolution()) {
                     type.resolvedTypeArguments = type.mapper ? instantiateTypes(typeArguments, type.mapper) : typeArguments;
@@ -56242,7 +57401,7 @@
                         return errorType;
                     }
                 }
-                if (node.kind === 174 /* TypeReference */ && isDeferredTypeReferenceNode(node, ts.length(node.typeArguments) !== typeParameters.length)) {
+                if (node.kind === 176 /* TypeReference */ && isDeferredTypeReferenceNode(node, ts.length(node.typeArguments) !== typeParameters.length)) {
                     return createDeferredTypeReference(type, node, /*mapper*/ undefined);
                 }
                 // In a type reference, the outer type parameters of the referenced class or interface are automatically
@@ -56301,9 +57460,9 @@
         }
         function getTypeReferenceName(node) {
             switch (node.kind) {
-                case 174 /* TypeReference */:
+                case 176 /* TypeReference */:
                     return node.typeName;
-                case 224 /* ExpressionWithTypeArguments */:
+                case 226 /* ExpressionWithTypeArguments */:
                     // We only support expressions that are simple qualified names. For other
                     // expressions this produces undefined.
                     var expr = node.expression;
@@ -56359,7 +57518,7 @@
                 var valueType = getTypeOfSymbol(symbol);
                 var typeType = valueType;
                 if (symbol.valueDeclaration) {
-                    var isImportTypeWithQualifier = node.kind === 196 /* ImportType */ && node.qualifier;
+                    var isImportTypeWithQualifier = node.kind === 198 /* ImportType */ && node.qualifier;
                     // valueType might not have a symbol, eg, {import('./b').STRING_LITERAL}
                     if (valueType.symbol && valueType.symbol !== symbol && isImportTypeWithQualifier) {
                         typeType = getTypeReferenceType(node, valueType.symbol);
@@ -56385,7 +57544,7 @@
             return result;
         }
         function isUnaryTupleTypeNode(node) {
-            return node.kind === 180 /* TupleType */ && node.elements.length === 1;
+            return node.kind === 182 /* TupleType */ && node.elements.length === 1;
         }
         function getImpliedConstraint(type, checkNode, extendsNode) {
             return isUnaryTupleTypeNode(checkNode) && isUnaryTupleTypeNode(extendsNode) ? getImpliedConstraint(type, checkNode.elements[0], extendsNode.elements[0]) :
@@ -56395,16 +57554,16 @@
         function getConditionalFlowTypeOfType(type, node) {
             var constraints;
             var covariant = true;
-            while (node && !ts.isStatement(node) && node.kind !== 312 /* JSDocComment */) {
+            while (node && !ts.isStatement(node) && node.kind !== 315 /* JSDocComment */) {
                 var parent = node.parent;
                 // only consider variance flipped by parameter locations - `keyof` types would usually be considered variance inverting, but
                 // often get used in indexed accesses where they behave sortof invariantly, but our checking is lax
-                if (parent.kind === 161 /* Parameter */) {
+                if (parent.kind === 162 /* Parameter */) {
                     covariant = !covariant;
                 }
                 // Always substitute on type parameters, regardless of variance, since even
                 // in contravariant positions, they may rely on substituted constraints to be valid
-                if ((covariant || type.flags & 8650752 /* TypeVariable */) && parent.kind === 185 /* ConditionalType */ && node === parent.trueType) {
+                if ((covariant || type.flags & 8650752 /* TypeVariable */) && parent.kind === 187 /* ConditionalType */ && node === parent.trueType) {
                     var constraint = getImpliedConstraint(type, parent.checkType, parent.extendsType);
                     if (constraint) {
                         constraints = ts.append(constraints, constraint);
@@ -56415,7 +57574,7 @@
             return constraints ? getSubstitutionType(type, getIntersectionType(ts.append(constraints, type))) : type;
         }
         function isJSDocTypeReference(node) {
-            return !!(node.flags & 4194304 /* JSDoc */) && (node.kind === 174 /* TypeReference */ || node.kind === 196 /* ImportType */);
+            return !!(node.flags & 4194304 /* JSDoc */) && (node.kind === 176 /* TypeReference */ || node.kind === 198 /* ImportType */);
         }
         function checkNoTypeArguments(node, symbol) {
             if (node.typeArguments) {
@@ -56459,8 +57618,8 @@
                             if (ts.isJSDocIndexSignature(node)) {
                                 var indexed = getTypeFromTypeNode(typeArgs[0]);
                                 var target = getTypeFromTypeNode(typeArgs[1]);
-                                var index = createIndexInfo(target, /*isReadonly*/ false);
-                                return createAnonymousType(undefined, emptySymbols, ts.emptyArray, ts.emptyArray, indexed === stringType ? index : undefined, indexed === numberType ? index : undefined);
+                                var indexInfo = indexed === stringType || indexed === numberType ? [createIndexInfo(indexed, target, /*isReadonly*/ false)] : ts.emptyArray;
+                                return createAnonymousType(undefined, emptySymbols, ts.emptyArray, ts.emptyArray, indexInfo);
                             }
                             return anyType;
                         }
@@ -56518,7 +57677,8 @@
                 // The expression is processed as an identifier expression (section 4.3)
                 // or property access expression(section 4.10),
                 // the widened type(section 3.9) of which becomes the result.
-                links.resolvedType = getRegularTypeOfLiteralType(getWidenedType(checkExpression(node.exprName)));
+                var type = ts.isThisIdentifier(node.exprName) ? checkThisExpression(node.exprName) : checkExpression(node.exprName);
+                links.resolvedType = getRegularTypeOfLiteralType(getWidenedType(type));
             }
             return links.resolvedType;
         }
@@ -56529,9 +57689,9 @@
                     for (var _i = 0, declarations_3 = declarations; _i < declarations_3.length; _i++) {
                         var declaration = declarations_3[_i];
                         switch (declaration.kind) {
-                            case 253 /* ClassDeclaration */:
-                            case 254 /* InterfaceDeclaration */:
-                            case 256 /* EnumDeclaration */:
+                            case 255 /* ClassDeclaration */:
+                            case 256 /* InterfaceDeclaration */:
+                            case 258 /* EnumDeclaration */:
                                 return declaration;
                         }
                     }
@@ -56574,6 +57734,20 @@
         function getGlobalImportMetaType() {
             return deferredGlobalImportMetaType || (deferredGlobalImportMetaType = getGlobalType("ImportMeta", /*arity*/ 0, /*reportErrors*/ true)) || emptyObjectType;
         }
+        function getGlobalImportMetaExpressionType() {
+            if (!deferredGlobalImportMetaExpressionType) {
+                // Create a synthetic type `ImportMetaExpression { meta: MetaProperty }`
+                var symbol = createSymbol(0 /* None */, "ImportMetaExpression");
+                var importMetaType = getGlobalImportMetaType();
+                var metaPropertySymbol = createSymbol(4 /* Property */, "meta", 8 /* Readonly */);
+                metaPropertySymbol.parent = symbol;
+                metaPropertySymbol.type = importMetaType;
+                var members = ts.createSymbolTable([metaPropertySymbol]);
+                symbol.members = members;
+                deferredGlobalImportMetaExpressionType = createAnonymousType(symbol, members, ts.emptyArray, ts.emptyArray, ts.emptyArray);
+            }
+            return deferredGlobalImportMetaExpressionType;
+        }
         function getGlobalESSymbolConstructorSymbol(reportErrors) {
             return deferredGlobalESSymbolConstructorSymbol || (deferredGlobalESSymbolConstructorSymbol = getGlobalValueSymbol("Symbol", reportErrors));
         }
@@ -56656,11 +57830,11 @@
         }
         function getTupleElementFlags(node) {
             switch (node.kind) {
-                case 181 /* OptionalType */:
+                case 183 /* OptionalType */:
                     return 2 /* Optional */;
-                case 182 /* RestType */:
+                case 184 /* RestType */:
                     return getRestTypeElementFlags(node);
-                case 193 /* NamedTupleMember */:
+                case 195 /* NamedTupleMember */:
                     return node.questionToken ? 2 /* Optional */ :
                         node.dotDotDotToken ? getRestTypeElementFlags(node) :
                             1 /* Required */;
@@ -56678,14 +57852,14 @@
                 return readonly ? globalReadonlyArrayType : globalArrayType;
             }
             var elementFlags = ts.map(node.elements, getTupleElementFlags);
-            var missingName = ts.some(node.elements, function (e) { return e.kind !== 193 /* NamedTupleMember */; });
+            var missingName = ts.some(node.elements, function (e) { return e.kind !== 195 /* NamedTupleMember */; });
             return getTupleTargetType(elementFlags, readonly, /*associatedNames*/ missingName ? undefined : node.elements);
         }
         // Return true if the given type reference node is directly aliased or if it needs to be deferred
         // because it is possibly contained in a circular chain of eagerly resolved types.
         function isDeferredTypeReferenceNode(node, hasDefaultTypeArguments) {
-            return !!getAliasSymbolForTypeNode(node) || isResolvedByTypeAlias(node) && (node.kind === 179 /* ArrayType */ ? mayResolveTypeAlias(node.elementType) :
-                node.kind === 180 /* TupleType */ ? ts.some(node.elements, mayResolveTypeAlias) :
+            return !!getAliasSymbolForTypeNode(node) || isResolvedByTypeAlias(node) && (node.kind === 181 /* ArrayType */ ? mayResolveTypeAlias(node.elementType) :
+                node.kind === 182 /* TupleType */ ? ts.some(node.elements, mayResolveTypeAlias) :
                     hasDefaultTypeArguments || ts.some(node.typeArguments, mayResolveTypeAlias));
         }
         // Return true when the given node is transitively contained in type constructs that eagerly
@@ -56694,18 +57868,18 @@
         function isResolvedByTypeAlias(node) {
             var parent = node.parent;
             switch (parent.kind) {
-                case 187 /* ParenthesizedType */:
-                case 193 /* NamedTupleMember */:
-                case 174 /* TypeReference */:
-                case 183 /* UnionType */:
-                case 184 /* IntersectionType */:
-                case 190 /* IndexedAccessType */:
-                case 185 /* ConditionalType */:
-                case 189 /* TypeOperator */:
-                case 179 /* ArrayType */:
-                case 180 /* TupleType */:
+                case 189 /* ParenthesizedType */:
+                case 195 /* NamedTupleMember */:
+                case 176 /* TypeReference */:
+                case 185 /* UnionType */:
+                case 186 /* IntersectionType */:
+                case 192 /* IndexedAccessType */:
+                case 187 /* ConditionalType */:
+                case 191 /* TypeOperator */:
+                case 181 /* ArrayType */:
+                case 182 /* TupleType */:
                     return isResolvedByTypeAlias(parent);
-                case 255 /* TypeAliasDeclaration */:
+                case 257 /* TypeAliasDeclaration */:
                     return true;
             }
             return false;
@@ -56714,28 +57888,28 @@
         // of a type alias.
         function mayResolveTypeAlias(node) {
             switch (node.kind) {
-                case 174 /* TypeReference */:
+                case 176 /* TypeReference */:
                     return isJSDocTypeReference(node) || !!(resolveTypeReferenceName(node.typeName, 788968 /* Type */).flags & 524288 /* TypeAlias */);
-                case 177 /* TypeQuery */:
+                case 179 /* TypeQuery */:
                     return true;
-                case 189 /* TypeOperator */:
-                    return node.operator !== 151 /* UniqueKeyword */ && mayResolveTypeAlias(node.type);
-                case 187 /* ParenthesizedType */:
-                case 181 /* OptionalType */:
-                case 193 /* NamedTupleMember */:
-                case 308 /* JSDocOptionalType */:
-                case 306 /* JSDocNullableType */:
-                case 307 /* JSDocNonNullableType */:
-                case 302 /* JSDocTypeExpression */:
+                case 191 /* TypeOperator */:
+                    return node.operator !== 152 /* UniqueKeyword */ && mayResolveTypeAlias(node.type);
+                case 189 /* ParenthesizedType */:
+                case 183 /* OptionalType */:
+                case 195 /* NamedTupleMember */:
+                case 311 /* JSDocOptionalType */:
+                case 309 /* JSDocNullableType */:
+                case 310 /* JSDocNonNullableType */:
+                case 304 /* JSDocTypeExpression */:
                     return mayResolveTypeAlias(node.type);
-                case 182 /* RestType */:
-                    return node.type.kind !== 179 /* ArrayType */ || mayResolveTypeAlias(node.type.elementType);
-                case 183 /* UnionType */:
-                case 184 /* IntersectionType */:
+                case 184 /* RestType */:
+                    return node.type.kind !== 181 /* ArrayType */ || mayResolveTypeAlias(node.type.elementType);
+                case 185 /* UnionType */:
+                case 186 /* IntersectionType */:
                     return ts.some(node.types, mayResolveTypeAlias);
-                case 190 /* IndexedAccessType */:
+                case 192 /* IndexedAccessType */:
                     return mayResolveTypeAlias(node.objectType) || mayResolveTypeAlias(node.indexType);
-                case 185 /* ConditionalType */:
+                case 187 /* ConditionalType */:
                     return mayResolveTypeAlias(node.checkType) || mayResolveTypeAlias(node.extendsType) ||
                         mayResolveTypeAlias(node.trueType) || mayResolveTypeAlias(node.falseType);
             }
@@ -56748,19 +57922,19 @@
                 if (target === emptyGenericType) {
                     links.resolvedType = emptyObjectType;
                 }
-                else if (!(node.kind === 180 /* TupleType */ && ts.some(node.elements, function (e) { return !!(getTupleElementFlags(e) & 8 /* Variadic */); })) && isDeferredTypeReferenceNode(node)) {
-                    links.resolvedType = node.kind === 180 /* TupleType */ && node.elements.length === 0 ? target :
+                else if (!(node.kind === 182 /* TupleType */ && ts.some(node.elements, function (e) { return !!(getTupleElementFlags(e) & 8 /* Variadic */); })) && isDeferredTypeReferenceNode(node)) {
+                    links.resolvedType = node.kind === 182 /* TupleType */ && node.elements.length === 0 ? target :
                         createDeferredTypeReference(target, node, /*mapper*/ undefined);
                 }
                 else {
-                    var elementTypes = node.kind === 179 /* ArrayType */ ? [getTypeFromTypeNode(node.elementType)] : ts.map(node.elements, getTypeFromTypeNode);
+                    var elementTypes = node.kind === 181 /* ArrayType */ ? [getTypeFromTypeNode(node.elementType)] : ts.map(node.elements, getTypeFromTypeNode);
                     links.resolvedType = createNormalizedTypeReference(target, elementTypes);
                 }
             }
             return links.resolvedType;
         }
         function isReadonlyTypeOperator(node) {
-            return ts.isTypeOperatorNode(node) && node.operator === 142 /* ReadonlyKeyword */;
+            return ts.isTypeOperatorNode(node) && node.operator === 143 /* ReadonlyKeyword */;
         }
         function createTupleType(elementTypes, elementFlags, readonly, namedMemberDeclarations) {
             if (readonly === void 0) { readonly = false; }
@@ -56816,10 +57990,10 @@
                 lengthSymbol.type = numberType;
             }
             else {
-                var literalTypes_1 = [];
+                var literalTypes = [];
                 for (var i = minLength; i <= arity; i++)
-                    literalTypes_1.push(getLiteralType(i));
-                lengthSymbol.type = getUnionType(literalTypes_1);
+                    literalTypes.push(getNumberLiteralType(i));
+                lengthSymbol.type = getUnionType(literalTypes);
             }
             properties.push(lengthSymbol);
             var type = createObjectType(8 /* Tuple */ | 4 /* Reference */);
@@ -56836,8 +58010,7 @@
             type.declaredProperties = properties;
             type.declaredCallSignatures = ts.emptyArray;
             type.declaredConstructSignatures = ts.emptyArray;
-            type.declaredStringIndexInfo = undefined;
-            type.declaredNumberIndexInfo = undefined;
+            type.declaredIndexInfos = ts.emptyArray;
             type.elementFlags = elementFlags;
             type.minLength = minLength;
             type.fixedLength = fixedLength;
@@ -56876,7 +58049,7 @@
             var lastRequiredIndex = -1;
             var firstRestIndex = -1;
             var lastOptionalOrRestIndex = -1;
-            var _loop_13 = function (i) {
+            var _loop_15 = function (i) {
                 var type = elementTypes[i];
                 var flags = target.elementFlags[i];
                 if (flags & 8 /* Variadic */) {
@@ -56897,7 +58070,7 @@
                     }
                     else {
                         // Treat everything else as an array type and create a rest element.
-                        addElement(isArrayLikeType(type) && getIndexTypeOfType(type, 1 /* Number */) || errorType, 4 /* Rest */, (_b = target.labeledElementDeclarations) === null || _b === void 0 ? void 0 : _b[i]);
+                        addElement(isArrayLikeType(type) && getIndexTypeOfType(type, numberType) || errorType, 4 /* Rest */, (_b = target.labeledElementDeclarations) === null || _b === void 0 ? void 0 : _b[i]);
                     }
                 }
                 else {
@@ -56906,7 +58079,7 @@
                 }
             };
             for (var i = 0; i < elementTypes.length; i++) {
-                var state_4 = _loop_13(i);
+                var state_4 = _loop_15(i);
                 if (typeof state_4 === "object")
                     return state_4.value;
             }
@@ -56955,7 +58128,7 @@
                 /*readonly*/ false, target.labeledElementDeclarations && target.labeledElementDeclarations.slice(index, endIndex));
         }
         function getKnownKeysOfTupleType(type) {
-            return getUnionType(ts.append(ts.arrayOf(type.target.fixedLength, function (i) { return getLiteralType("" + i); }), getIndexType(type.target.readonly ? globalReadonlyArrayType : globalArrayType)));
+            return getUnionType(ts.append(ts.arrayOf(type.target.fixedLength, function (i) { return getStringLiteralType("" + i); }), getIndexType(type.target.readonly ? globalReadonlyArrayType : globalArrayType)));
         }
         // Return count of starting consecutive tuple elements of the given kind(s)
         function getStartElementCount(type, flags) {
@@ -56967,8 +58140,7 @@
             return type.elementFlags.length - ts.findLastIndex(type.elementFlags, function (f) { return !(f & flags); }) - 1;
         }
         function getTypeFromOptionalTypeNode(node) {
-            var type = getTypeFromTypeNode(node.type);
-            return strictNullChecks ? getOptionalType(type) : type;
+            return addOptionality(getTypeFromTypeNode(node.type), /*isProperty*/ true);
         }
         function getTypeId(type) {
             return type.id;
@@ -57013,8 +58185,8 @@
         // Add the given types to the given type set. Order is preserved, duplicates are removed,
         // and nested types of the given kind are flattened into the set.
         function addTypesToUnion(typeSet, includes, types) {
-            for (var _i = 0, types_10 = types; _i < types_10.length; _i++) {
-                var type = types_10[_i];
+            for (var _i = 0, types_9 = types; _i < types_9.length; _i++) {
+                var type = types_9[_i];
                 includes = addTypeToUnion(typeSet, includes, type);
             }
             return includes;
@@ -57043,8 +58215,8 @@
                         ts.find(getPropertiesOfType(source), function (p) { return isUnitType(getTypeOfSymbol(p)); }) :
                         undefined;
                     var keyPropertyType = keyProperty && getRegularTypeOfLiteralType(getTypeOfSymbol(keyProperty));
-                    for (var _i = 0, types_11 = types; _i < types_11.length; _i++) {
-                        var target = types_11[_i];
+                    for (var _i = 0, types_10 = types; _i < types_10.length; _i++) {
+                        var target = types_10[_i];
                         if (source !== target) {
                             if (count === 100000) {
                                 // After 100000 subtype checks we estimate the remaining amount of work by assuming the
@@ -57084,7 +58256,7 @@
                 i--;
                 var t = types[i];
                 var flags = t.flags;
-                var remove = flags & 128 /* StringLiteral */ && includes & 4 /* String */ ||
+                var remove = flags & (128 /* StringLiteral */ | 134217728 /* TemplateLiteral */ | 268435456 /* StringMapping */) && includes & 4 /* String */ ||
                     flags & 256 /* NumberLiteral */ && includes & 8 /* Number */ ||
                     flags & 2048 /* BigIntLiteral */ && includes & 64 /* BigInt */ ||
                     flags & 8192 /* UniqueESSymbol */ && includes & 4096 /* ESSymbol */ ||
@@ -57099,7 +58271,7 @@
             var templates = ts.filter(types, isPatternLiteralType);
             if (templates.length) {
                 var i = types.length;
-                var _loop_14 = function () {
+                var _loop_16 = function () {
                     i--;
                     var t = types[i];
                     if (t.flags & 128 /* StringLiteral */ && ts.some(templates, function (template) { return isTypeSubtypeOf(t, template); })) {
@@ -57107,7 +58279,7 @@
                     }
                 };
                 while (i > 0) {
-                    _loop_14();
+                    _loop_16();
                 }
             }
         }
@@ -57115,8 +58287,8 @@
             return !!(type.flags & 1048576 /* Union */ && (type.aliasSymbol || type.origin));
         }
         function addNamedUnions(namedUnions, types) {
-            for (var _i = 0, types_12 = types; _i < types_12.length; _i++) {
-                var t = types_12[_i];
+            for (var _i = 0, types_11 = types; _i < types_11.length; _i++) {
+                var t = types_11[_i];
                 if (t.flags & 1048576 /* Union */) {
                     var origin = t.origin;
                     if (t.aliasSymbol || origin && !(origin.flags & 1048576 /* Union */)) {
@@ -57154,7 +58326,13 @@
                 if (includes & 3 /* AnyOrUnknown */) {
                     return includes & 1 /* Any */ ? includes & 8388608 /* IncludesWildcard */ ? wildcardType : anyType : unknownType;
                 }
-                if (includes & (2944 /* Literal */ | 8192 /* UniqueESSymbol */) || includes & 16384 /* Void */ && includes & 32768 /* Undefined */) {
+                if (exactOptionalPropertyTypes && includes & 32768 /* Undefined */) {
+                    var missingIndex = ts.binarySearch(typeSet, missingType, getTypeId, ts.compareValues);
+                    if (missingIndex >= 0 && containsType(typeSet, undefinedType)) {
+                        ts.orderedRemoveItemAt(typeSet, missingIndex);
+                    }
+                }
+                if (includes & (2944 /* Literal */ | 8192 /* UniqueESSymbol */ | 134217728 /* TemplateLiteral */ | 268435456 /* StringMapping */) || includes & 16384 /* Void */ && includes & 32768 /* Undefined */) {
                     removeRedundantLiteralTypes(typeSet, includes, !!(unionReduction & 2 /* Subtype */));
                 }
                 if (includes & 128 /* StringLiteral */ && includes & 134217728 /* TemplateLiteral */) {
@@ -57176,14 +58354,14 @@
                 var namedUnions = [];
                 addNamedUnions(namedUnions, types);
                 var reducedTypes = [];
-                var _loop_15 = function (t) {
+                var _loop_17 = function (t) {
                     if (!ts.some(namedUnions, function (union) { return containsType(union.types, t); })) {
                         reducedTypes.push(t);
                     }
                 };
                 for (var _i = 0, typeSet_1 = typeSet; _i < typeSet_1.length; _i++) {
                     var t = typeSet_1[_i];
-                    _loop_15(t);
+                    _loop_17(t);
                 }
                 if (!aliasSymbol && namedUnions.length === 1 && reducedTypes.length === 0) {
                     return namedUnions[0];
@@ -57200,7 +58378,7 @@
                 }
             }
             var objectFlags = (includes & 468598819 /* NotPrimitiveUnion */ ? 0 : 65536 /* PrimitiveUnion */) |
-                (includes & 2097152 /* Intersection */ ? 67108864 /* ContainsIntersections */ : 0);
+                (includes & 2097152 /* Intersection */ ? 33554432 /* ContainsIntersections */ : 0);
             return getUnionTypeFromSortedList(typeSet, objectFlags, aliasSymbol, aliasTypeArguments, origin);
         }
         function getUnionOrIntersectionTypePredicate(signatures, kind) {
@@ -57238,15 +58416,6 @@
         function typePredicateKindsMatch(a, b) {
             return a.kind === b.kind && a.parameterIndex === b.parameterIndex;
         }
-        function createUnionType(types, aliasSymbol, aliasTypeArguments, origin) {
-            var result = createType(1048576 /* Union */);
-            result.objectFlags = getPropagatingFlagsOfTypes(types, /*excludeKinds*/ 98304 /* Nullable */);
-            result.types = types;
-            result.origin = origin;
-            result.aliasSymbol = aliasSymbol;
-            result.aliasTypeArguments = aliasTypeArguments;
-            return result;
-        }
         // This function assumes the constituent type list is sorted and deduplicated.
         function getUnionTypeFromSortedList(types, objectFlags, aliasSymbol, aliasTypeArguments, origin) {
             if (types.length === 0) {
@@ -57262,8 +58431,16 @@
             var id = typeKey + getAliasId(aliasSymbol, aliasTypeArguments);
             var type = unionTypes.get(id);
             if (!type) {
-                type = createUnionType(types, aliasSymbol, aliasTypeArguments, origin);
-                type.objectFlags |= objectFlags;
+                type = createType(1048576 /* Union */);
+                type.objectFlags = objectFlags | getPropagatingFlagsOfTypes(types, /*excludeKinds*/ 98304 /* Nullable */);
+                type.types = types;
+                type.origin = origin;
+                type.aliasSymbol = aliasSymbol;
+                type.aliasTypeArguments = aliasTypeArguments;
+                if (types.length === 2 && types[0].flags & 512 /* BooleanLiteral */ && types[1].flags & 512 /* BooleanLiteral */) {
+                    type.flags |= 16 /* Boolean */;
+                    type.intrinsicName = "boolean";
+                }
                 unionTypes.set(id, type);
             }
             return type;
@@ -57307,8 +58484,8 @@
         // Add the given types to the given type set. Order is preserved, freshness is removed from literal
         // types, duplicates are removed, and nested types of the given kind are flattened into the set.
         function addTypesToIntersection(typeSet, includes, types) {
-            for (var _i = 0, types_13 = types; _i < types_13.length; _i++) {
-                var type = types_13[_i];
+            for (var _i = 0, types_12 = types; _i < types_12.length; _i++) {
+                var type = types_12[_i];
                 includes = addTypeToIntersection(typeSet, includes, getRegularTypeOfLiteralType(type));
             }
             return includes;
@@ -57457,8 +58634,10 @@
             // a symbol-like type and a type known to be non-symbol-like, or
             // a void-like type and a type known to be non-void-like, or
             // a non-primitive type and a type known to be primitive.
-            if (includes & 131072 /* Never */ ||
-                strictNullChecks && includes & 98304 /* Nullable */ && includes & (524288 /* Object */ | 67108864 /* NonPrimitive */ | 16777216 /* IncludesEmptyObject */) ||
+            if (includes & 131072 /* Never */) {
+                return ts.contains(typeSet, silentNeverType) ? silentNeverType : neverType;
+            }
+            if (strictNullChecks && includes & 98304 /* Nullable */ && includes & (524288 /* Object */ | 67108864 /* NonPrimitive */ | 16777216 /* IncludesEmptyObject */) ||
                 includes & 67108864 /* NonPrimitive */ && includes & (469892092 /* DisjointDomains */ & ~67108864 /* NonPrimitive */) ||
                 includes & 402653316 /* StringLike */ && includes & (469892092 /* DisjointDomains */ & ~402653316 /* StringLike */) ||
                 includes & 296 /* NumberLike */ && includes & (469892092 /* DisjointDomains */ & ~296 /* NumberLike */) ||
@@ -57598,40 +58777,37 @@
                 constraint;
         }
         // Ordinarily we reduce a keyof M, where M is a mapped type { [P in K as N<P>]: X }, to simply N<K>. This however presumes
-        // that N distributes over union types, i.e. that N<A | B | C> is equivalent to N<A> | N<B> | N<C>. That presumption may not
-        // be true when N is a non-distributive conditional type or an instantiable type with a non-distributive conditional type as
-        // a constituent. In those cases, we cannot reduce keyof M and need to preserve it as is.
-        function maybeNonDistributiveNameType(type) {
-            return !!(type && (type.flags & 16777216 /* Conditional */ && (!type.root.isDistributive || maybeNonDistributiveNameType(type.checkType)) ||
-                type.flags & (3145728 /* UnionOrIntersection */ | 134217728 /* TemplateLiteral */) && ts.some(type.types, maybeNonDistributiveNameType) ||
-                type.flags & (4194304 /* Index */ | 268435456 /* StringMapping */) && maybeNonDistributiveNameType(type.type) ||
-                type.flags & 8388608 /* IndexedAccess */ && maybeNonDistributiveNameType(type.indexType) ||
-                type.flags & 33554432 /* Substitution */ && maybeNonDistributiveNameType(type.substitute)));
+        // that N distributes over union types, i.e. that N<A | B | C> is equivalent to N<A> | N<B> | N<C>. Specifically, we only
+        // want to perform the reduction when the name type of a mapped type is distributive with respect to the type variable
+        // introduced by the 'in' clause of the mapped type. Note that non-generic types are considered to be distributive because
+        // they're the same type regardless of what's being distributed over.
+        function hasDistributiveNameType(mappedType) {
+            var typeVariable = getTypeParameterFromMappedType(mappedType);
+            return isDistributive(getNameTypeFromMappedType(mappedType) || typeVariable);
+            function isDistributive(type) {
+                return type.flags & (3 /* AnyOrUnknown */ | 131068 /* Primitive */ | 131072 /* Never */ | 262144 /* TypeParameter */ | 524288 /* Object */ | 67108864 /* NonPrimitive */) ? true :
+                    type.flags & 16777216 /* Conditional */ ? type.root.isDistributive && type.checkType === typeVariable :
+                        type.flags & (3145728 /* UnionOrIntersection */ | 134217728 /* TemplateLiteral */) ? ts.every(type.types, isDistributive) :
+                            type.flags & 8388608 /* IndexedAccess */ ? isDistributive(type.objectType) && isDistributive(type.indexType) :
+                                type.flags & 33554432 /* Substitution */ ? isDistributive(type.substitute) :
+                                    type.flags & 268435456 /* StringMapping */ ? isDistributive(type.type) :
+                                        false;
+            }
         }
         function getLiteralTypeFromPropertyName(name) {
             if (ts.isPrivateIdentifier(name)) {
                 return neverType;
             }
-            return ts.isIdentifier(name) ? getLiteralType(ts.unescapeLeadingUnderscores(name.escapedText)) :
+            return ts.isIdentifier(name) ? getStringLiteralType(ts.unescapeLeadingUnderscores(name.escapedText)) :
                 getRegularTypeOfLiteralType(ts.isComputedPropertyName(name) ? checkComputedPropertyName(name) : checkExpression(name));
         }
-        function getBigIntLiteralType(node) {
-            return getLiteralType({
-                negative: false,
-                base10Value: ts.parsePseudoBigInt(node.text)
-            });
-        }
-        function getLiteralTypeFromProperty(prop, include) {
-            if (!(ts.getDeclarationModifierFlagsFromSymbol(prop) & 24 /* NonPublicAccessibilityModifier */)) {
+        function getLiteralTypeFromProperty(prop, include, includeNonPublic) {
+            if (includeNonPublic || !(ts.getDeclarationModifierFlagsFromSymbol(prop) & 24 /* NonPublicAccessibilityModifier */)) {
                 var type = getSymbolLinks(getLateBoundSymbol(prop)).nameType;
                 if (!type) {
-                    if (prop.escapedName === "default" /* Default */) {
-                        type = getLiteralType("default");
-                    }
-                    else {
-                        var name = prop.valueDeclaration && ts.getNameOfDeclaration(prop.valueDeclaration);
-                        type = name && getLiteralTypeFromPropertyName(name) || (!ts.isKnownSymbol(prop) ? getLiteralType(ts.symbolName(prop)) : undefined);
-                    }
+                    var name = ts.getNameOfDeclaration(prop.valueDeclaration);
+                    type = prop.escapedName === "default" /* Default */ ? getStringLiteralType("default") :
+                        name && getLiteralTypeFromPropertyName(name) || (!ts.isKnownSymbol(prop) ? getStringLiteralType(ts.symbolName(prop)) : undefined);
                 }
                 if (type && type.flags & include) {
                     return type;
@@ -57641,28 +58817,23 @@
         }
         function getLiteralTypeFromProperties(type, include, includeOrigin) {
             var origin = includeOrigin && (ts.getObjectFlags(type) & (3 /* ClassOrInterface */ | 4 /* Reference */) || type.aliasSymbol) ? createOriginIndexType(type) : undefined;
-            return getUnionType(ts.map(getPropertiesOfType(type), function (p) { return getLiteralTypeFromProperty(p, include); }), 1 /* Literal */, 
+            var propertyTypes = ts.map(getPropertiesOfType(type), function (prop) { return getLiteralTypeFromProperty(prop, include); });
+            var indexKeyTypes = ts.map(getIndexInfosOfType(type), function (info) { return info !== enumNumberIndexInfo && info.keyType.flags & include ?
+                info.keyType === stringType && include & 8 /* Number */ ? stringOrNumberType : info.keyType : neverType; });
+            return getUnionType(ts.concatenate(propertyTypes, indexKeyTypes), 1 /* Literal */, 
             /*aliasSymbol*/ undefined, /*aliasTypeArguments*/ undefined, origin);
         }
-        function getNonEnumNumberIndexInfo(type) {
-            var numberIndexInfo = getIndexInfoOfType(type, 1 /* Number */);
-            return numberIndexInfo !== enumNumberIndexInfo ? numberIndexInfo : undefined;
-        }
         function getIndexType(type, stringsOnly, noIndexSignatures) {
             if (stringsOnly === void 0) { stringsOnly = keyofStringsOnly; }
-            var includeOrigin = stringsOnly === keyofStringsOnly && !noIndexSignatures;
             type = getReducedType(type);
             return type.flags & 1048576 /* Union */ ? getIntersectionType(ts.map(type.types, function (t) { return getIndexType(t, stringsOnly, noIndexSignatures); })) :
                 type.flags & 2097152 /* Intersection */ ? getUnionType(ts.map(type.types, function (t) { return getIndexType(t, stringsOnly, noIndexSignatures); })) :
-                    type.flags & 58982400 /* InstantiableNonPrimitive */ || isGenericTupleType(type) || isGenericMappedType(type) && maybeNonDistributiveNameType(getNameTypeFromMappedType(type)) ? getIndexTypeForGenericType(type, stringsOnly) :
+                    type.flags & 58982400 /* InstantiableNonPrimitive */ || isGenericTupleType(type) || isGenericMappedType(type) && !hasDistributiveNameType(type) ? getIndexTypeForGenericType(type, stringsOnly) :
                         ts.getObjectFlags(type) & 32 /* Mapped */ ? getIndexTypeForMappedType(type, noIndexSignatures) :
                             type === wildcardType ? wildcardType :
                                 type.flags & 2 /* Unknown */ ? neverType :
                                     type.flags & (1 /* Any */ | 131072 /* Never */) ? keyofConstraintType :
-                                        stringsOnly ? !noIndexSignatures && getIndexInfoOfType(type, 0 /* String */) ? stringType : getLiteralTypeFromProperties(type, 128 /* StringLiteral */, includeOrigin) :
-                                            !noIndexSignatures && getIndexInfoOfType(type, 0 /* String */) ? getUnionType([stringType, numberType, getLiteralTypeFromProperties(type, 8192 /* UniqueESSymbol */, includeOrigin)]) :
-                                                getNonEnumNumberIndexInfo(type) ? getUnionType([numberType, getLiteralTypeFromProperties(type, 128 /* StringLiteral */ | 8192 /* UniqueESSymbol */, includeOrigin)]) :
-                                                    getLiteralTypeFromProperties(type, 8576 /* StringOrNumberLiteralOrUnique */, includeOrigin);
+                                        getLiteralTypeFromProperties(type, (noIndexSignatures ? 128 /* StringLiteral */ : 402653316 /* StringLike */) | (stringsOnly ? 0 : 296 /* NumberLike */ | 12288 /* ESSymbolLike */), stringsOnly === keyofStringsOnly && !noIndexSignatures);
         }
         function getExtractStringType(type) {
             if (keyofStringsOnly) {
@@ -57679,15 +58850,15 @@
             var links = getNodeLinks(node);
             if (!links.resolvedType) {
                 switch (node.operator) {
-                    case 138 /* KeyOfKeyword */:
+                    case 139 /* KeyOfKeyword */:
                         links.resolvedType = getIndexType(getTypeFromTypeNode(node.type));
                         break;
-                    case 151 /* UniqueKeyword */:
-                        links.resolvedType = node.type.kind === 148 /* SymbolKeyword */
+                    case 152 /* UniqueKeyword */:
+                        links.resolvedType = node.type.kind === 149 /* SymbolKeyword */
                             ? getESSymbolLikeTypeForNode(ts.walkUpParenthesizedTypes(node.parent))
                             : errorType;
                         break;
-                    case 142 /* ReadonlyKeyword */:
+                    case 143 /* ReadonlyKeyword */:
                         links.resolvedType = getTypeFromTypeNode(node.type);
                         break;
                     default:
@@ -57699,7 +58870,7 @@
         function getTypeFromTemplateTypeNode(node) {
             var links = getNodeLinks(node);
             if (!links.resolvedType) {
-                links.resolvedType = getTemplateLiteralType(__spreadArray([node.head.text], ts.map(node.templateSpans, function (span) { return span.literal.text; })), ts.map(node.templateSpans, function (span) { return getTypeFromTypeNode(span.type); }));
+                links.resolvedType = getTemplateLiteralType(__spreadArray([node.head.text], ts.map(node.templateSpans, function (span) { return span.literal.text; }), true), ts.map(node.templateSpans, function (span) { return getTypeFromTypeNode(span.type); }));
             }
             return links.resolvedType;
         }
@@ -57720,7 +58891,7 @@
                 return stringType;
             }
             if (newTypes.length === 0) {
-                return getLiteralType(text);
+                return getStringLiteralType(text);
             }
             newTexts.push(text);
             if (ts.every(newTexts, function (t) { return t === ""; }) && ts.every(newTypes, function (t) { return !!(t.flags & 4 /* String */); })) {
@@ -57773,7 +58944,7 @@
         function getStringMappingType(symbol, type) {
             return type.flags & (1048576 /* Union */ | 131072 /* Never */) ? mapType(type, function (t) { return getStringMappingType(symbol, t); }) :
                 isGenericIndexType(type) ? getStringMappingTypeForGenericType(symbol, type) :
-                    type.flags & 128 /* StringLiteral */ ? getLiteralType(applyStringMapping(symbol, type.value)) :
+                    type.flags & 128 /* StringLiteral */ ? getStringLiteralType(applyStringMapping(symbol, type.value)) :
                         type;
         }
         function applyStringMapping(symbol, str) {
@@ -57799,13 +58970,13 @@
             result.type = type;
             return result;
         }
-        function createIndexedAccessType(objectType, indexType, aliasSymbol, aliasTypeArguments, shouldIncludeUndefined) {
+        function createIndexedAccessType(objectType, indexType, accessFlags, aliasSymbol, aliasTypeArguments) {
             var type = createType(8388608 /* IndexedAccess */);
             type.objectType = objectType;
             type.indexType = indexType;
+            type.accessFlags = accessFlags;
             type.aliasSymbol = aliasSymbol;
             type.aliasTypeArguments = aliasTypeArguments;
-            type.noUncheckedIndexedAccessCandidate = shouldIncludeUndefined;
             return type;
         }
         /**
@@ -57854,14 +59025,17 @@
             }
             return true;
         }
-        function getPropertyTypeForIndexType(originalObjectType, objectType, indexType, fullIndexType, suppressNoImplicitAnyError, accessNode, accessFlags, noUncheckedIndexedAccessCandidate, reportDeprecated) {
+        function getPropertyTypeForIndexType(originalObjectType, objectType, indexType, fullIndexType, accessNode, accessFlags) {
             var _a;
-            var accessExpression = accessNode && accessNode.kind === 203 /* ElementAccessExpression */ ? accessNode : undefined;
+            var accessExpression = accessNode && accessNode.kind === 205 /* ElementAccessExpression */ ? accessNode : undefined;
             var propName = accessNode && ts.isPrivateIdentifier(accessNode) ? undefined : getPropertyNameFromIndex(indexType, accessNode);
             if (propName !== undefined) {
+                if (accessFlags & 256 /* Contextual */) {
+                    return getTypeOfPropertyOfContextualType(objectType, propName) || anyType;
+                }
                 var prop = getPropertyOfType(objectType, propName);
                 if (prop) {
-                    if (reportDeprecated && accessNode && prop.declarations && getDeclarationNodeFlagsFromSymbol(prop) & 134217728 /* Deprecated */ && isUncalledFunctionReference(accessNode, prop)) {
+                    if (accessFlags & 64 /* ReportDeprecated */ && accessNode && prop.declarations && getDeclarationNodeFlagsFromSymbol(prop) & 134217728 /* Deprecated */ && isUncalledFunctionReference(accessNode, prop)) {
                         var deprecatedNode = (_a = accessExpression === null || accessExpression === void 0 ? void 0 : accessExpression.argumentExpression) !== null && _a !== void 0 ? _a : (ts.isIndexedAccessTypeNode(accessNode) ? accessNode.indexType : accessNode);
                         addDeprecatedSuggestion(deprecatedNode, prop.declarations, propName);
                     }
@@ -57871,7 +59045,7 @@
                             error(accessExpression.argumentExpression, ts.Diagnostics.Cannot_assign_to_0_because_it_is_a_read_only_property, symbolToString(prop));
                             return undefined;
                         }
-                        if (accessFlags & 4 /* CacheSymbol */) {
+                        if (accessFlags & 8 /* CacheSymbol */) {
                             getNodeLinks(accessNode).resolvedSymbol = prop;
                         }
                         if (isThisPropertyAccessInConstructor(accessExpression, prop)) {
@@ -57884,7 +59058,7 @@
                         propType;
                 }
                 if (everyType(objectType, isTupleType) && isNumericLiteralName(propName) && +propName >= 0) {
-                    if (accessNode && everyType(objectType, function (t) { return !t.target.hasRestElement; }) && !(accessFlags & 8 /* NoTupleBoundsCheck */)) {
+                    if (accessNode && everyType(objectType, function (t) { return !t.target.hasRestElement; }) && !(accessFlags & 16 /* NoTupleBoundsCheck */)) {
                         var indexNode = getIndexNodeForAccessExpression(accessNode);
                         if (isTupleType(objectType)) {
                             error(indexNode, ts.Diagnostics.Tuple_type_0_of_length_1_has_no_element_at_index_2, typeToString(objectType), getTypeReferenceArity(objectType), ts.unescapeLeadingUnderscores(propName));
@@ -57893,10 +59067,10 @@
                             error(indexNode, ts.Diagnostics.Property_0_does_not_exist_on_type_1, ts.unescapeLeadingUnderscores(propName), typeToString(objectType));
                         }
                     }
-                    errorIfWritingToReadonlyIndex(getIndexInfoOfType(objectType, 1 /* Number */));
+                    errorIfWritingToReadonlyIndex(getIndexInfoOfType(objectType, numberType));
                     return mapType(objectType, function (t) {
                         var restType = getRestTypeOfTupleType(t) || undefinedType;
-                        return noUncheckedIndexedAccessCandidate ? getUnionType([restType, undefinedType]) : restType;
+                        return accessFlags & 1 /* IncludeUndefined */ ? getUnionType([restType, undefinedType]) : restType;
                     });
                 }
             }
@@ -57904,22 +59078,23 @@
                 if (objectType.flags & (1 /* Any */ | 131072 /* Never */)) {
                     return objectType;
                 }
-                var stringIndexInfo = getIndexInfoOfType(objectType, 0 /* String */);
-                var indexInfo = isTypeAssignableToKind(indexType, 296 /* NumberLike */) && getIndexInfoOfType(objectType, 1 /* Number */) || stringIndexInfo;
+                // If no index signature is applicable, we default to the string index signature. In effect, this means the string
+                // index signature applies even when accessing with a symbol-like type.
+                var indexInfo = getApplicableIndexInfo(objectType, indexType) || getIndexInfoOfType(objectType, stringType);
                 if (indexInfo) {
-                    if (accessFlags & 1 /* NoIndexSignatures */ && indexInfo === stringIndexInfo) {
+                    if (accessFlags & 2 /* NoIndexSignatures */ && indexInfo.keyType !== numberType) {
                         if (accessExpression) {
                             error(accessExpression, ts.Diagnostics.Type_0_cannot_be_used_to_index_type_1, typeToString(indexType), typeToString(originalObjectType));
                         }
                         return undefined;
                     }
-                    if (accessNode && !isTypeAssignableToKind(indexType, 4 /* String */ | 8 /* Number */)) {
+                    if (accessNode && indexInfo.keyType === stringType && !isTypeAssignableToKind(indexType, 4 /* String */ | 8 /* Number */)) {
                         var indexNode = getIndexNodeForAccessExpression(accessNode);
                         error(indexNode, ts.Diagnostics.Type_0_cannot_be_used_as_an_index_type, typeToString(indexType));
-                        return noUncheckedIndexedAccessCandidate ? getUnionType([indexInfo.type, undefinedType]) : indexInfo.type;
+                        return accessFlags & 1 /* IncludeUndefined */ ? getUnionType([indexInfo.type, undefinedType]) : indexInfo.type;
                     }
                     errorIfWritingToReadonlyIndex(indexInfo);
-                    return noUncheckedIndexedAccessCandidate ? getUnionType([indexInfo.type, undefinedType]) : indexInfo.type;
+                    return accessFlags & 1 /* IncludeUndefined */ ? getUnionType([indexInfo.type, undefinedType]) : indexInfo.type;
                 }
                 if (indexType.flags & 131072 /* Never */) {
                     return neverType;
@@ -57943,12 +59118,12 @@
                     if (objectType.symbol === globalThisSymbol && propName !== undefined && globalThisSymbol.exports.has(propName) && (globalThisSymbol.exports.get(propName).flags & 418 /* BlockScoped */)) {
                         error(accessExpression, ts.Diagnostics.Property_0_does_not_exist_on_type_1, ts.unescapeLeadingUnderscores(propName), typeToString(objectType));
                     }
-                    else if (noImplicitAny && !compilerOptions.suppressImplicitAnyIndexErrors && !suppressNoImplicitAnyError) {
+                    else if (noImplicitAny && !compilerOptions.suppressImplicitAnyIndexErrors && !(accessFlags & 128 /* SuppressNoImplicitAnyError */)) {
                         if (propName !== undefined && typeHasStaticProperty(propName, objectType)) {
                             var typeName = typeToString(objectType);
                             error(accessExpression, ts.Diagnostics.Property_0_does_not_exist_on_type_1_Did_you_mean_to_access_the_static_member_2_instead, propName, typeName, typeName + "[" + ts.getTextOfNode(accessExpression.argumentExpression) + "]");
                         }
-                        else if (getIndexTypeOfType(objectType, 1 /* Number */)) {
+                        else if (getIndexTypeOfType(objectType, numberType)) {
                             error(accessExpression.argumentExpression, ts.Diagnostics.Element_implicitly_has_an_any_type_because_index_expression_is_not_of_type_number);
                         }
                         else {
@@ -58016,9 +59191,9 @@
             }
         }
         function getIndexNodeForAccessExpression(accessNode) {
-            return accessNode.kind === 203 /* ElementAccessExpression */ ? accessNode.argumentExpression :
-                accessNode.kind === 190 /* IndexedAccessType */ ? accessNode.indexType :
-                    accessNode.kind === 159 /* ComputedPropertyName */ ? accessNode.expression :
+            return accessNode.kind === 205 /* ElementAccessExpression */ ? accessNode.argumentExpression :
+                accessNode.kind === 192 /* IndexedAccessType */ ? accessNode.indexType :
+                    accessNode.kind === 160 /* ComputedPropertyName */ ? accessNode.expression :
                         accessNode;
         }
         function isPatternLiteralPlaceholderType(type) {
@@ -58027,39 +59202,32 @@
         function isPatternLiteralType(type) {
             return !!(type.flags & 134217728 /* TemplateLiteral */) && ts.every(type.types, isPatternLiteralPlaceholderType);
         }
+        function isGenericType(type) {
+            return !!getGenericObjectFlags(type);
+        }
         function isGenericObjectType(type) {
-            if (type.flags & 3145728 /* UnionOrIntersection */) {
-                if (!(type.objectFlags & 4194304 /* IsGenericObjectTypeComputed */)) {
-                    type.objectFlags |= 4194304 /* IsGenericObjectTypeComputed */ |
-                        (ts.some(type.types, isGenericObjectType) ? 8388608 /* IsGenericObjectType */ : 0);
-                }
-                return !!(type.objectFlags & 8388608 /* IsGenericObjectType */);
-            }
-            if (type.flags & 33554432 /* Substitution */) {
-                if (!(type.objectFlags & 4194304 /* IsGenericObjectTypeComputed */)) {
-                    type.objectFlags |= 4194304 /* IsGenericObjectTypeComputed */ |
-                        (isGenericObjectType(type.substitute) || isGenericObjectType(type.baseType) ? 8388608 /* IsGenericObjectType */ : 0);
-                }
-                return !!(type.objectFlags & 8388608 /* IsGenericObjectType */);
-            }
-            return !!(type.flags & 58982400 /* InstantiableNonPrimitive */) || isGenericMappedType(type) || isGenericTupleType(type);
+            return !!(getGenericObjectFlags(type) & 8388608 /* IsGenericObjectType */);
         }
         function isGenericIndexType(type) {
+            return !!(getGenericObjectFlags(type) & 16777216 /* IsGenericIndexType */);
+        }
+        function getGenericObjectFlags(type) {
             if (type.flags & 3145728 /* UnionOrIntersection */) {
-                if (!(type.objectFlags & 16777216 /* IsGenericIndexTypeComputed */)) {
-                    type.objectFlags |= 16777216 /* IsGenericIndexTypeComputed */ |
-                        (ts.some(type.types, isGenericIndexType) ? 33554432 /* IsGenericIndexType */ : 0);
+                if (!(type.objectFlags & 4194304 /* IsGenericTypeComputed */)) {
+                    type.objectFlags |= 4194304 /* IsGenericTypeComputed */ |
+                        ts.reduceLeft(type.types, function (flags, t) { return flags | getGenericObjectFlags(t); }, 0);
                 }
-                return !!(type.objectFlags & 33554432 /* IsGenericIndexType */);
+                return type.objectFlags & 25165824 /* IsGenericType */;
             }
             if (type.flags & 33554432 /* Substitution */) {
-                if (!(type.objectFlags & 16777216 /* IsGenericIndexTypeComputed */)) {
-                    type.objectFlags |= 16777216 /* IsGenericIndexTypeComputed */ |
-                        (isGenericIndexType(type.substitute) || isGenericIndexType(type.baseType) ? 33554432 /* IsGenericIndexType */ : 0);
+                if (!(type.objectFlags & 4194304 /* IsGenericTypeComputed */)) {
+                    type.objectFlags |= 4194304 /* IsGenericTypeComputed */ |
+                        getGenericObjectFlags(type.substitute) | getGenericObjectFlags(type.baseType);
                 }
-                return !!(type.objectFlags & 33554432 /* IsGenericIndexType */);
+                return type.objectFlags & 25165824 /* IsGenericType */;
             }
-            return !!(type.flags & (58982400 /* InstantiableNonPrimitive */ | 4194304 /* Index */ | 134217728 /* TemplateLiteral */ | 268435456 /* StringMapping */)) && !isPatternLiteralType(type);
+            return (type.flags & 58982400 /* InstantiableNonPrimitive */ || isGenericMappedType(type) || isGenericTupleType(type) ? 8388608 /* IsGenericObjectType */ : 0) |
+                (type.flags & (58982400 /* InstantiableNonPrimitive */ | 4194304 /* Index */ | 134217728 /* TemplateLiteral */ | 268435456 /* StringMapping */) && !isPatternLiteralType(type) ? 16777216 /* IsGenericIndexType */ : 0);
         }
         function isThisTypeParameter(type) {
             return !!(type.flags & 262144 /* TypeParameter */ && type.isThisType);
@@ -58175,9 +59343,9 @@
             var templateMapper = combineTypeMappers(objectType.mapper, mapper);
             return instantiateType(getTemplateTypeFromMappedType(objectType), templateMapper);
         }
-        function getIndexedAccessType(objectType, indexType, noUncheckedIndexedAccessCandidate, accessNode, aliasSymbol, aliasTypeArguments, accessFlags) {
+        function getIndexedAccessType(objectType, indexType, accessFlags, accessNode, aliasSymbol, aliasTypeArguments) {
             if (accessFlags === void 0) { accessFlags = 0 /* None */; }
-            return getIndexedAccessTypeOrUndefined(objectType, indexType, noUncheckedIndexedAccessCandidate, accessNode, accessFlags, aliasSymbol, aliasTypeArguments) || (accessNode ? errorType : unknownType);
+            return getIndexedAccessTypeOrUndefined(objectType, indexType, accessFlags, accessNode, aliasSymbol, aliasTypeArguments) || (accessNode ? errorType : unknownType);
         }
         function indexTypeLessThan(indexType, limit) {
             return everyType(indexType, function (t) {
@@ -58191,36 +59359,38 @@
                 return false;
             });
         }
-        function getIndexedAccessTypeOrUndefined(objectType, indexType, noUncheckedIndexedAccessCandidate, accessNode, accessFlags, aliasSymbol, aliasTypeArguments) {
+        function getIndexedAccessTypeOrUndefined(objectType, indexType, accessFlags, accessNode, aliasSymbol, aliasTypeArguments) {
             if (accessFlags === void 0) { accessFlags = 0 /* None */; }
             if (objectType === wildcardType || indexType === wildcardType) {
                 return wildcardType;
             }
-            var shouldIncludeUndefined = noUncheckedIndexedAccessCandidate ||
-                (!!compilerOptions.noUncheckedIndexedAccess &&
-                    (accessFlags & (2 /* Writing */ | 16 /* ExpressionPosition */)) === 16 /* ExpressionPosition */);
             // If the object type has a string index signature and no other members we know that the result will
             // always be the type of that index signature and we can simplify accordingly.
             if (isStringIndexSignatureOnlyType(objectType) && !(indexType.flags & 98304 /* Nullable */) && isTypeAssignableToKind(indexType, 4 /* String */ | 8 /* Number */)) {
                 indexType = stringType;
             }
+            // In noUncheckedIndexedAccess mode, indexed access operations that occur in an expression in a read position and resolve to
+            // an index signature have 'undefined' included in their type.
+            if (compilerOptions.noUncheckedIndexedAccess && accessFlags & 32 /* ExpressionPosition */)
+                accessFlags |= 1 /* IncludeUndefined */;
             // If the index type is generic, or if the object type is generic and doesn't originate in an expression and
             // the operation isn't exclusively indexing the fixed (non-variadic) portion of a tuple type, we are performing
             // a higher-order index access where we cannot meaningfully access the properties of the object type. Note that
             // for a generic T and a non-generic K, we eagerly resolve T[K] if it originates in an expression. This is to
             // preserve backwards compatibility. For example, an element access 'this["foo"]' has always been resolved
             // eagerly using the constraint type of 'this' at the given location.
-            if (isGenericIndexType(indexType) || (accessNode && accessNode.kind !== 190 /* IndexedAccessType */ ?
+            if (isGenericIndexType(indexType) || (accessNode && accessNode.kind !== 192 /* IndexedAccessType */ ?
                 isGenericTupleType(objectType) && !indexTypeLessThan(indexType, objectType.target.fixedLength) :
                 isGenericObjectType(objectType) && !(isTupleType(objectType) && indexTypeLessThan(indexType, objectType.target.fixedLength)))) {
                 if (objectType.flags & 3 /* AnyOrUnknown */) {
                     return objectType;
                 }
                 // Defer the operation by creating an indexed access type.
-                var id = objectType.id + "," + indexType.id + (shouldIncludeUndefined ? "?" : "") + getAliasId(aliasSymbol, aliasTypeArguments);
+                var persistentAccessFlags = accessFlags & 1 /* Persistent */;
+                var id = objectType.id + "," + indexType.id + "," + persistentAccessFlags + getAliasId(aliasSymbol, aliasTypeArguments);
                 var type = indexedAccessTypes.get(id);
                 if (!type) {
-                    indexedAccessTypes.set(id, type = createIndexedAccessType(objectType, indexType, aliasSymbol, aliasTypeArguments, shouldIncludeUndefined));
+                    indexedAccessTypes.set(id, type = createIndexedAccessType(objectType, indexType, persistentAccessFlags, aliasSymbol, aliasTypeArguments));
                 }
                 return type;
             }
@@ -58233,7 +59403,7 @@
                 var wasMissingProp = false;
                 for (var _i = 0, _a = indexType.types; _i < _a.length; _i++) {
                     var t = _a[_i];
-                    var propType = getPropertyTypeForIndexType(objectType, apparentObjectType, t, indexType, wasMissingProp, accessNode, accessFlags, shouldIncludeUndefined);
+                    var propType = getPropertyTypeForIndexType(objectType, apparentObjectType, t, indexType, accessNode, accessFlags | (wasMissingProp ? 128 /* SuppressNoImplicitAnyError */ : 0));
                     if (propType) {
                         propTypes.push(propType);
                     }
@@ -58249,11 +59419,11 @@
                 if (wasMissingProp) {
                     return undefined;
                 }
-                return accessFlags & 2 /* Writing */
+                return accessFlags & 4 /* Writing */
                     ? getIntersectionType(propTypes, aliasSymbol, aliasTypeArguments)
                     : getUnionType(propTypes, 1 /* Literal */, aliasSymbol, aliasTypeArguments);
             }
-            return getPropertyTypeForIndexType(objectType, apparentObjectType, indexType, indexType, /* supressNoImplicitAnyError */ false, accessNode, accessFlags | 4 /* CacheSymbol */, shouldIncludeUndefined, /* reportDeprecated */ true);
+            return getPropertyTypeForIndexType(objectType, apparentObjectType, indexType, indexType, accessNode, accessFlags | 8 /* CacheSymbol */ | 64 /* ReportDeprecated */);
         }
         function getTypeFromIndexedAccessTypeNode(node) {
             var links = getNodeLinks(node);
@@ -58261,7 +59431,7 @@
                 var objectType = getTypeFromTypeNode(node.objectType);
                 var indexType = getTypeFromTypeNode(node.indexType);
                 var potentialAlias = getAliasSymbolForTypeNode(node);
-                var resolved = getIndexedAccessType(objectType, indexType, /*noUncheckedIndexedAccessCandidate*/ undefined, node, potentialAlias, getTypeArgumentsForAliasSymbol(potentialAlias));
+                var resolved = getIndexedAccessType(objectType, indexType, 0 /* None */, node, potentialAlias, getTypeArgumentsForAliasSymbol(potentialAlias));
                 links.resolvedType = resolved.flags & 8388608 /* IndexedAccess */ &&
                     resolved.objectType === objectType &&
                     resolved.indexType === indexType ?
@@ -58294,11 +59464,10 @@
             return type;
         }
         function isTypicalNondistributiveConditional(root) {
-            return !root.isDistributive
-                && root.node.checkType.kind === 180 /* TupleType */
-                && ts.length(root.node.checkType.elements) === 1
-                && root.node.extendsType.kind === 180 /* TupleType */
-                && ts.length(root.node.extendsType.elements) === 1;
+            return !root.isDistributive && isSingletonTupleType(root.node.checkType) && isSingletonTupleType(root.node.extendsType);
+        }
+        function isSingletonTupleType(node) {
+            return ts.isTupleTypeNode(node) && ts.length(node.elements) === 1 && !ts.isOptionalTypeNode(node.elements[0]) && !ts.isRestTypeNode(node.elements[0]);
         }
         /**
          * We syntactually check for common nondistributive conditional shapes and unwrap them into
@@ -58313,11 +59482,11 @@
             var extraTypes;
             // We loop here for an immediately nested conditional type in the false position, effectively treating
             // types of the form 'A extends B ? X : C extends D ? Y : E extends F ? Z : ...' as a single construct for
-            // purposes of resolution. This means such types aren't subject to the instatiation depth limiter.
+            // purposes of resolution. This means such types aren't subject to the instantiation depth limiter.
             while (true) {
                 var isUnwrapped = isTypicalNondistributiveConditional(root);
                 var checkType = instantiateType(unwrapNondistributiveConditionalTuple(root, getActualTypeVariable(root.checkType)), mapper);
-                var checkTypeInstantiable = isGenericObjectType(checkType) || isGenericIndexType(checkType);
+                var checkTypeInstantiable = isGenericType(checkType);
                 var extendsType = instantiateType(unwrapNondistributiveConditionalTuple(root, root.extendsType), mapper);
                 if (checkType === wildcardType || extendsType === wildcardType) {
                     return wildcardType;
@@ -58339,7 +59508,7 @@
                 // Instantiate the extends type including inferences for 'infer T' type parameters
                 var inferredExtendsType = combinedMapper ? instantiateType(unwrapNondistributiveConditionalTuple(root, root.extendsType), combinedMapper) : extendsType;
                 // We attempt to resolve the conditional type only when the check and extends types are non-generic
-                if (!checkTypeInstantiable && !isGenericObjectType(inferredExtendsType) && !isGenericIndexType(inferredExtendsType)) {
+                if (!checkTypeInstantiable && !isGenericType(inferredExtendsType)) {
                     // Return falseType for a definitely false extends check. We check an instantiations of the two
                     // types with type parameters mapped to the wildcard type, the most permissive instantiations
                     // possible (the wildcard type is assignable to and from all types). If those are not related,
@@ -58539,7 +59708,7 @@
         }
         function getAliasSymbolForTypeNode(node) {
             var host = node.parent;
-            while (ts.isParenthesizedTypeNode(host) || ts.isJSDocTypeExpression(host) || ts.isTypeOperatorNode(host) && host.operator === 142 /* ReadonlyKeyword */) {
+            while (ts.isParenthesizedTypeNode(host) || ts.isJSDocTypeExpression(host) || ts.isTypeOperatorNode(host) && host.operator === 143 /* ReadonlyKeyword */) {
                 host = host.parent;
             }
             return ts.isTypeAlias(host) ? getSymbolOfNode(host) : undefined;
@@ -58554,16 +59723,19 @@
             return isEmptyObjectType(type) || !!(type.flags & (65536 /* Null */ | 32768 /* Undefined */ | 528 /* BooleanLike */ | 296 /* NumberLike */ | 2112 /* BigIntLike */ | 402653316 /* StringLike */ | 1056 /* EnumLike */ | 67108864 /* NonPrimitive */ | 4194304 /* Index */));
         }
         function tryMergeUnionOfObjectTypeAndEmptyObject(type, readonly) {
+            if (!(type.flags & 1048576 /* Union */)) {
+                return type;
+            }
             if (ts.every(type.types, isEmptyObjectTypeOrSpreadsIntoEmptyObject)) {
                 return ts.find(type.types, isEmptyObjectType) || emptyObjectType;
             }
             var firstType = ts.find(type.types, function (t) { return !isEmptyObjectTypeOrSpreadsIntoEmptyObject(t); });
             if (!firstType) {
-                return undefined;
+                return type;
             }
-            var secondType = firstType && ts.find(type.types, function (t) { return t !== firstType && !isEmptyObjectTypeOrSpreadsIntoEmptyObject(t); });
+            var secondType = ts.find(type.types, function (t) { return t !== firstType && !isEmptyObjectTypeOrSpreadsIntoEmptyObject(t); });
             if (secondType) {
-                return undefined;
+                return type;
             }
             return getAnonymousPartialType(firstType);
             function getAnonymousPartialType(type) {
@@ -58578,14 +59750,14 @@
                         var isSetonlyAccessor = prop.flags & 65536 /* SetAccessor */ && !(prop.flags & 32768 /* GetAccessor */);
                         var flags = 4 /* Property */ | 16777216 /* Optional */;
                         var result = createSymbol(flags, prop.escapedName, getIsLateCheckFlag(prop) | (readonly ? 8 /* Readonly */ : 0));
-                        result.type = isSetonlyAccessor ? undefinedType : getUnionType([getTypeOfSymbol(prop), undefinedType]);
+                        result.type = isSetonlyAccessor ? undefinedType : addOptionality(getTypeOfSymbol(prop), /*isProperty*/ true);
                         result.declarations = prop.declarations;
                         result.nameType = getSymbolLinks(prop).nameType;
                         result.syntheticOrigin = prop;
                         members.set(prop.escapedName, result);
                     }
                 }
-                var spread = createAnonymousType(type.symbol, members, ts.emptyArray, ts.emptyArray, getIndexInfoOfType(type, 0 /* String */), getIndexInfoOfType(type, 1 /* Number */));
+                var spread = createAnonymousType(type.symbol, members, ts.emptyArray, ts.emptyArray, getIndexInfosOfType(type));
                 spread.objectFlags |= 128 /* ObjectLiteral */ | 262144 /* ContainsObjectOrArrayLiteral */;
                 return spread;
             }
@@ -58608,20 +59780,14 @@
             if (right.flags & 131072 /* Never */) {
                 return left;
             }
+            left = tryMergeUnionOfObjectTypeAndEmptyObject(left, readonly);
             if (left.flags & 1048576 /* Union */) {
-                var merged = tryMergeUnionOfObjectTypeAndEmptyObject(left, readonly);
-                if (merged) {
-                    return getSpreadType(merged, right, symbol, objectFlags, readonly);
-                }
                 return checkCrossProductUnion([left, right])
                     ? mapType(left, function (t) { return getSpreadType(t, right, symbol, objectFlags, readonly); })
                     : errorType;
             }
+            right = tryMergeUnionOfObjectTypeAndEmptyObject(right, readonly);
             if (right.flags & 1048576 /* Union */) {
-                var merged = tryMergeUnionOfObjectTypeAndEmptyObject(right, readonly);
-                if (merged) {
-                    return getSpreadType(left, merged, symbol, objectFlags, readonly);
-                }
                 return checkCrossProductUnion([left, right])
                     ? mapType(right, function (t) { return getSpreadType(left, t, symbol, objectFlags, readonly); })
                     : errorType;
@@ -58647,17 +59813,7 @@
             }
             var members = ts.createSymbolTable();
             var skippedPrivateMembers = new ts.Set();
-            var stringIndexInfo;
-            var numberIndexInfo;
-            if (left === emptyObjectType) {
-                // for the first spread element, left === emptyObjectType, so take the right's string indexer
-                stringIndexInfo = getIndexInfoOfType(right, 0 /* String */);
-                numberIndexInfo = getIndexInfoOfType(right, 1 /* Number */);
-            }
-            else {
-                stringIndexInfo = unionSpreadIndexInfos(getIndexInfoOfType(left, 0 /* String */), getIndexInfoOfType(right, 0 /* String */));
-                numberIndexInfo = unionSpreadIndexInfos(getIndexInfoOfType(left, 1 /* Number */), getIndexInfoOfType(right, 1 /* Number */));
-            }
+            var indexInfos = left === emptyObjectType ? getIndexInfosOfType(right) : getUnionIndexInfos([left, right]);
             for (var _i = 0, _a = getPropertiesOfType(right); _i < _a.length; _i++) {
                 var rightProp = _a[_i];
                 if (ts.getDeclarationModifierFlagsFromSymbol(rightProp) & (8 /* Private */ | 16 /* Protected */)) {
@@ -58679,7 +59835,7 @@
                         var declarations = ts.concatenate(leftProp.declarations, rightProp.declarations);
                         var flags = 4 /* Property */ | (leftProp.flags & 16777216 /* Optional */);
                         var result = createSymbol(flags, leftProp.escapedName);
-                        result.type = getUnionType([getTypeOfSymbol(leftProp), getTypeWithFacts(rightType, 524288 /* NEUndefined */)]);
+                        result.type = getUnionType([getTypeOfSymbol(leftProp), removeMissingOrUndefinedType(rightType)]);
                         result.leftSpread = leftProp;
                         result.rightSpread = rightProp;
                         result.declarations = declarations;
@@ -58691,7 +59847,7 @@
                     members.set(leftProp.escapedName, getSpreadSymbol(leftProp, readonly));
                 }
             }
-            var spread = createAnonymousType(symbol, members, ts.emptyArray, ts.emptyArray, getIndexInfoWithReadonly(stringIndexInfo, readonly), getIndexInfoWithReadonly(numberIndexInfo, readonly));
+            var spread = createAnonymousType(symbol, members, ts.emptyArray, ts.emptyArray, ts.sameMap(indexInfos, function (info) { return getIndexInfoWithReadonly(info, readonly); }));
             spread.objectFlags |= 128 /* ObjectLiteral */ | 262144 /* ContainsObjectOrArrayLiteral */ | 4194304 /* ContainsSpread */ | objectFlags;
             return spread;
         }
@@ -58716,19 +59872,19 @@
             return result;
         }
         function getIndexInfoWithReadonly(info, readonly) {
-            return info && info.isReadonly !== readonly ? createIndexInfo(info.type, readonly, info.declaration) : info;
+            return info.isReadonly !== readonly ? createIndexInfo(info.keyType, info.type, readonly, info.declaration) : info;
         }
-        function createLiteralType(flags, value, symbol) {
+        function createLiteralType(flags, value, symbol, regularType) {
             var type = createType(flags);
             type.symbol = symbol;
             type.value = value;
+            type.regularType = regularType || type;
             return type;
         }
         function getFreshTypeOfLiteralType(type) {
             if (type.flags & 2944 /* Literal */) {
                 if (!type.freshType) {
-                    var freshType = createLiteralType(type.flags, type.value, type.symbol);
-                    freshType.regularType = type;
+                    var freshType = createLiteralType(type.flags, type.value, type.symbol, type);
                     freshType.freshType = freshType;
                     type.freshType = freshType;
                 }
@@ -58744,25 +59900,32 @@
         function isFreshLiteralType(type) {
             return !!(type.flags & 2944 /* Literal */) && type.freshType === type;
         }
-        function getLiteralType(value, enumId, symbol) {
-            // We store all literal types in a single map with keys of the form '#NNN' and '@SSS',
-            // where NNN is the text representation of a numeric literal and SSS are the characters
-            // of a string literal. For literal enum members we use 'EEE#NNN' and 'EEE@SSS', where
-            // EEE is a unique id for the containing enum type.
-            var qualifier = typeof value === "number" ? "#" : typeof value === "string" ? "@" : "n";
-            var key = (enumId ? enumId : "") + qualifier + (typeof value === "object" ? ts.pseudoBigIntToString(value) : value);
-            var type = literalTypes.get(key);
-            if (!type) {
-                var flags = (typeof value === "number" ? 256 /* NumberLiteral */ :
-                    typeof value === "string" ? 128 /* StringLiteral */ : 2048 /* BigIntLiteral */) |
-                    (enumId ? 1024 /* EnumLiteral */ : 0);
-                literalTypes.set(key, type = createLiteralType(flags, value, symbol));
-                type.regularType = type;
-            }
-            return type;
+        function getStringLiteralType(value) {
+            var type;
+            return stringLiteralTypes.get(value) ||
+                (stringLiteralTypes.set(value, type = createLiteralType(128 /* StringLiteral */, value)), type);
+        }
+        function getNumberLiteralType(value) {
+            var type;
+            return numberLiteralTypes.get(value) ||
+                (numberLiteralTypes.set(value, type = createLiteralType(256 /* NumberLiteral */, value)), type);
+        }
+        function getBigIntLiteralType(value) {
+            var type;
+            var key = ts.pseudoBigIntToString(value);
+            return bigIntLiteralTypes.get(key) ||
+                (bigIntLiteralTypes.set(key, type = createLiteralType(2048 /* BigIntLiteral */, value)), type);
+        }
+        function getEnumLiteralType(value, enumId, symbol) {
+            var type;
+            var qualifier = typeof value === "string" ? "@" : "#";
+            var key = enumId + qualifier + value;
+            var flags = 1024 /* EnumLiteral */ | (typeof value === "string" ? 128 /* StringLiteral */ : 256 /* NumberLiteral */);
+            return enumLiteralTypes.get(key) ||
+                (enumLiteralTypes.set(key, type = createLiteralType(flags, value, symbol)), type);
         }
         function getTypeFromLiteralTypeNode(node) {
-            if (node.literal.kind === 103 /* NullKeyword */) {
+            if (node.literal.kind === 104 /* NullKeyword */) {
                 return nullType;
             }
             var links = getNodeLinks(node);
@@ -58788,8 +59951,8 @@
         function getThisType(node) {
             var container = ts.getThisContainer(node, /*includeArrowFunctions*/ false);
             var parent = container && container.parent;
-            if (parent && (ts.isClassLike(parent) || parent.kind === 254 /* InterfaceDeclaration */)) {
-                if (!ts.hasSyntacticModifier(container, 32 /* Static */) &&
+            if (parent && (ts.isClassLike(parent) || parent.kind === 256 /* InterfaceDeclaration */)) {
+                if (!ts.isStatic(container) &&
                     (!ts.isConstructorDeclaration(container) || ts.isNodeDescendantOf(node, container.body))) {
                     return getDeclaredTypeOfClassOrInterface(getSymbolOfNode(parent)).thisType;
                 }
@@ -58823,17 +59986,17 @@
         }
         function getArrayElementTypeNode(node) {
             switch (node.kind) {
-                case 187 /* ParenthesizedType */:
+                case 189 /* ParenthesizedType */:
                     return getArrayElementTypeNode(node.type);
-                case 180 /* TupleType */:
+                case 182 /* TupleType */:
                     if (node.elements.length === 1) {
                         node = node.elements[0];
-                        if (node.kind === 182 /* RestType */ || node.kind === 193 /* NamedTupleMember */ && node.dotDotDotToken) {
+                        if (node.kind === 184 /* RestType */ || node.kind === 195 /* NamedTupleMember */ && node.dotDotDotToken) {
                             return getArrayElementTypeNode(node.type);
                         }
                     }
                     break;
-                case 179 /* ArrayType */:
+                case 181 /* ArrayType */:
                     return node.elementType;
             }
             return undefined;
@@ -58842,107 +60005,106 @@
             var links = getNodeLinks(node);
             return links.resolvedType || (links.resolvedType =
                 node.dotDotDotToken ? getTypeFromRestTypeNode(node) :
-                    node.questionToken && strictNullChecks ? getOptionalType(getTypeFromTypeNode(node.type)) :
-                        getTypeFromTypeNode(node.type));
+                    addOptionality(getTypeFromTypeNode(node.type), /*isProperty*/ true, !!node.questionToken));
         }
         function getTypeFromTypeNode(node) {
             return getConditionalFlowTypeOfType(getTypeFromTypeNodeWorker(node), node);
         }
         function getTypeFromTypeNodeWorker(node) {
             switch (node.kind) {
-                case 128 /* AnyKeyword */:
-                case 304 /* JSDocAllType */:
-                case 305 /* JSDocUnknownType */:
+                case 129 /* AnyKeyword */:
+                case 307 /* JSDocAllType */:
+                case 308 /* JSDocUnknownType */:
                     return anyType;
-                case 152 /* UnknownKeyword */:
+                case 153 /* UnknownKeyword */:
                     return unknownType;
-                case 147 /* StringKeyword */:
+                case 148 /* StringKeyword */:
                     return stringType;
-                case 144 /* NumberKeyword */:
+                case 145 /* NumberKeyword */:
                     return numberType;
-                case 155 /* BigIntKeyword */:
+                case 156 /* BigIntKeyword */:
                     return bigintType;
-                case 131 /* BooleanKeyword */:
+                case 132 /* BooleanKeyword */:
                     return booleanType;
-                case 148 /* SymbolKeyword */:
+                case 149 /* SymbolKeyword */:
                     return esSymbolType;
-                case 113 /* VoidKeyword */:
+                case 114 /* VoidKeyword */:
                     return voidType;
-                case 150 /* UndefinedKeyword */:
+                case 151 /* UndefinedKeyword */:
                     return undefinedType;
-                case 103 /* NullKeyword */:
+                case 104 /* NullKeyword */:
                     // TODO(rbuckton): `NullKeyword` is no longer a `TypeNode`, but we defensively allow it here because of incorrect casts in the Language Service.
                     return nullType;
-                case 141 /* NeverKeyword */:
+                case 142 /* NeverKeyword */:
                     return neverType;
-                case 145 /* ObjectKeyword */:
+                case 146 /* ObjectKeyword */:
                     return node.flags & 131072 /* JavaScriptFile */ && !noImplicitAny ? anyType : nonPrimitiveType;
-                case 136 /* IntrinsicKeyword */:
+                case 137 /* IntrinsicKeyword */:
                     return intrinsicMarkerType;
-                case 188 /* ThisType */:
-                case 107 /* ThisKeyword */:
+                case 190 /* ThisType */:
+                case 108 /* ThisKeyword */:
                     // TODO(rbuckton): `ThisKeyword` is no longer a `TypeNode`, but we defensively allow it here because of incorrect casts in the Language Service and because of `isPartOfTypeNode`.
                     return getTypeFromThisTypeNode(node);
-                case 192 /* LiteralType */:
+                case 194 /* LiteralType */:
                     return getTypeFromLiteralTypeNode(node);
-                case 174 /* TypeReference */:
+                case 176 /* TypeReference */:
                     return getTypeFromTypeReference(node);
-                case 173 /* TypePredicate */:
+                case 175 /* TypePredicate */:
                     return node.assertsModifier ? voidType : booleanType;
-                case 224 /* ExpressionWithTypeArguments */:
+                case 226 /* ExpressionWithTypeArguments */:
                     return getTypeFromTypeReference(node);
-                case 177 /* TypeQuery */:
+                case 179 /* TypeQuery */:
                     return getTypeFromTypeQueryNode(node);
-                case 179 /* ArrayType */:
-                case 180 /* TupleType */:
+                case 181 /* ArrayType */:
+                case 182 /* TupleType */:
                     return getTypeFromArrayOrTupleTypeNode(node);
-                case 181 /* OptionalType */:
+                case 183 /* OptionalType */:
                     return getTypeFromOptionalTypeNode(node);
-                case 183 /* UnionType */:
+                case 185 /* UnionType */:
                     return getTypeFromUnionTypeNode(node);
-                case 184 /* IntersectionType */:
+                case 186 /* IntersectionType */:
                     return getTypeFromIntersectionTypeNode(node);
-                case 306 /* JSDocNullableType */:
+                case 309 /* JSDocNullableType */:
                     return getTypeFromJSDocNullableTypeNode(node);
-                case 308 /* JSDocOptionalType */:
+                case 311 /* JSDocOptionalType */:
                     return addOptionality(getTypeFromTypeNode(node.type));
-                case 193 /* NamedTupleMember */:
+                case 195 /* NamedTupleMember */:
                     return getTypeFromNamedTupleTypeNode(node);
-                case 187 /* ParenthesizedType */:
-                case 307 /* JSDocNonNullableType */:
-                case 302 /* JSDocTypeExpression */:
+                case 189 /* ParenthesizedType */:
+                case 310 /* JSDocNonNullableType */:
+                case 304 /* JSDocTypeExpression */:
                     return getTypeFromTypeNode(node.type);
-                case 182 /* RestType */:
+                case 184 /* RestType */:
                     return getTypeFromRestTypeNode(node);
-                case 310 /* JSDocVariadicType */:
+                case 313 /* JSDocVariadicType */:
                     return getTypeFromJSDocVariadicType(node);
-                case 175 /* FunctionType */:
-                case 176 /* ConstructorType */:
-                case 178 /* TypeLiteral */:
-                case 314 /* JSDocTypeLiteral */:
-                case 309 /* JSDocFunctionType */:
-                case 315 /* JSDocSignature */:
+                case 177 /* FunctionType */:
+                case 178 /* ConstructorType */:
+                case 180 /* TypeLiteral */:
+                case 317 /* JSDocTypeLiteral */:
+                case 312 /* JSDocFunctionType */:
+                case 318 /* JSDocSignature */:
                     return getTypeFromTypeLiteralOrFunctionOrConstructorTypeNode(node);
-                case 189 /* TypeOperator */:
+                case 191 /* TypeOperator */:
                     return getTypeFromTypeOperatorNode(node);
-                case 190 /* IndexedAccessType */:
+                case 192 /* IndexedAccessType */:
                     return getTypeFromIndexedAccessTypeNode(node);
-                case 191 /* MappedType */:
+                case 193 /* MappedType */:
                     return getTypeFromMappedTypeNode(node);
-                case 185 /* ConditionalType */:
+                case 187 /* ConditionalType */:
                     return getTypeFromConditionalTypeNode(node);
-                case 186 /* InferType */:
+                case 188 /* InferType */:
                     return getTypeFromInferTypeNode(node);
-                case 194 /* TemplateLiteralType */:
+                case 196 /* TemplateLiteralType */:
                     return getTypeFromTemplateTypeNode(node);
-                case 196 /* ImportType */:
+                case 198 /* ImportType */:
                     return getTypeFromImportTypeNode(node);
                 // This function assumes that an identifier, qualified name, or property access expression is a type expression
                 // Callers should first ensure this by calling `isPartOfTypeNode`
                 // TODO(rbuckton): These aren't valid TypeNodes, but we treat them as such because of `isPartOfTypeNode`, which returns `true` for things that aren't `TypeNode`s.
-                case 78 /* Identifier */:
-                case 158 /* QualifiedName */:
-                case 202 /* PropertyAccessExpression */:
+                case 79 /* Identifier */:
+                case 159 /* QualifiedName */:
+                case 204 /* PropertyAccessExpression */:
                     var symbol = getSymbolAtLocation(node);
                     return symbol ? getDeclaredTypeOfSymbol(symbol) : errorType;
                 default:
@@ -58972,6 +60134,9 @@
         function instantiateSignatures(signatures, mapper) {
             return instantiateList(signatures, mapper, instantiateSignature);
         }
+        function instantiateIndexInfos(indexInfos, mapper) {
+            return instantiateList(indexInfos, mapper, instantiateIndexInfo);
+        }
         function createTypeMapper(sources, targets) {
             return sources.length === 1 ? makeUnaryTypeMapper(sources[0], targets ? targets[0] : anyType) : makeArrayTypeMapper(sources, targets);
         }
@@ -59144,8 +60309,8 @@
             return type;
         }
         function maybeTypeParameterReference(node) {
-            return !(node.parent.kind === 174 /* TypeReference */ && node.parent.typeArguments && node === node.parent.typeName ||
-                node.parent.kind === 196 /* ImportType */ && node.parent.typeArguments && node === node.parent.qualifier);
+            return !(node.parent.kind === 176 /* TypeReference */ && node.parent.typeArguments && node === node.parent.typeName ||
+                node.parent.kind === 198 /* ImportType */ && node.parent.typeArguments && node === node.parent.qualifier);
         }
         function isTypeParameterPossiblyReferenced(tp, node) {
             // If the type parameter doesn't have exactly one declaration, if there are invening statement blocks
@@ -59154,7 +60319,7 @@
             if (tp.symbol && tp.symbol.declarations && tp.symbol.declarations.length === 1) {
                 var container = tp.symbol.declarations[0].parent;
                 for (var n = node; n !== container; n = n.parent) {
-                    if (!n || n.kind === 231 /* Block */ || n.kind === 185 /* ConditionalType */ && ts.forEachChild(n.extendsType, containsReference)) {
+                    if (!n || n.kind === 233 /* Block */ || n.kind === 187 /* ConditionalType */ && ts.forEachChild(n.extendsType, containsReference)) {
                         return true;
                     }
                 }
@@ -59163,15 +60328,15 @@
             return true;
             function containsReference(node) {
                 switch (node.kind) {
-                    case 188 /* ThisType */:
+                    case 190 /* ThisType */:
                         return !!tp.isThisType;
-                    case 78 /* Identifier */:
+                    case 79 /* Identifier */:
                         return !tp.isThisType && ts.isPartOfTypeNode(node) && maybeTypeParameterReference(node) &&
                             getTypeFromTypeNodeWorker(node) === tp; // use worker because we're looking for === equality
-                    case 177 /* TypeQuery */:
+                    case 179 /* TypeQuery */:
                         return true;
-                    case 166 /* MethodDeclaration */:
-                    case 165 /* MethodSignature */:
+                    case 167 /* MethodDeclaration */:
+                    case 166 /* MethodSignature */:
                         return !node.type && !!node.body ||
                             ts.some(node.typeParameters, containsReference) ||
                             ts.some(node.parameters, containsReference) ||
@@ -59254,7 +60419,7 @@
         function instantiateMappedTupleType(tupleType, mappedType, mapper) {
             var elementFlags = tupleType.target.elementFlags;
             var elementTypes = ts.map(getTypeArguments(tupleType), function (_, i) {
-                return instantiateMappedTypeTemplate(mappedType, getLiteralType("" + i), !!(elementFlags[i] & 2 /* Optional */), mapper);
+                return instantiateMappedTypeTemplate(mappedType, getStringLiteralType("" + i), !!(elementFlags[i] & 2 /* Optional */), mapper);
             });
             var modifiers = getMappedTypeModifiers(mappedType);
             var newTupleModifiers = modifiers & 4 /* IncludeOptional */ ? ts.map(elementFlags, function (f) { return f & 1 /* Required */ ? 2 /* Optional */ : f; }) :
@@ -59268,7 +60433,7 @@
             var templateMapper = appendTypeMapping(mapper, getTypeParameterFromMappedType(type), key);
             var propType = instantiateType(getTemplateTypeFromMappedType(type.target || type), templateMapper);
             var modifiers = getMappedTypeModifiers(type);
-            return strictNullChecks && modifiers & 4 /* IncludeOptional */ && !maybeTypeOfKind(propType, 32768 /* Undefined */ | 16384 /* Void */) ? getOptionalType(propType) :
+            return strictNullChecks && modifiers & 4 /* IncludeOptional */ && !maybeTypeOfKind(propType, 32768 /* Undefined */ | 16384 /* Void */) ? getOptionalType(propType, /*isProperty*/ true) :
                 strictNullChecks && modifiers & 8 /* ExcludeOptional */ && isOptional ? getTypeWithFacts(propType, 524288 /* NEUndefined */) :
                     propType;
         }
@@ -59387,7 +60552,7 @@
             if (flags & 8388608 /* IndexedAccess */) {
                 var newAliasSymbol = aliasSymbol || type.aliasSymbol;
                 var newAliasTypeArguments = aliasSymbol ? aliasTypeArguments : instantiateTypes(type.aliasTypeArguments, mapper);
-                return getIndexedAccessType(instantiateType(type.objectType, mapper), instantiateType(type.indexType, mapper), type.noUncheckedIndexedAccessCandidate, /*accessNode*/ undefined, newAliasSymbol, newAliasTypeArguments);
+                return getIndexedAccessType(instantiateType(type.objectType, mapper), instantiateType(type.indexType, mapper), type.accessFlags, /*accessNode*/ undefined, newAliasSymbol, newAliasTypeArguments);
             }
             if (flags & 16777216 /* Conditional */) {
                 return getConditionalTypeInstantiation(type, combineTypeMappers(type.mapper, mapper), aliasSymbol, aliasTypeArguments);
@@ -59443,40 +60608,40 @@
             return type.restrictiveInstantiation;
         }
         function instantiateIndexInfo(info, mapper) {
-            return info && createIndexInfo(instantiateType(info.type, mapper), info.isReadonly, info.declaration);
+            return createIndexInfo(info.keyType, instantiateType(info.type, mapper), info.isReadonly, info.declaration);
         }
         // Returns true if the given expression contains (at any level of nesting) a function or arrow expression
         // that is subject to contextual typing.
         function isContextSensitive(node) {
-            ts.Debug.assert(node.kind !== 166 /* MethodDeclaration */ || ts.isObjectLiteralMethod(node));
+            ts.Debug.assert(node.kind !== 167 /* MethodDeclaration */ || ts.isObjectLiteralMethod(node));
             switch (node.kind) {
-                case 209 /* FunctionExpression */:
-                case 210 /* ArrowFunction */:
-                case 166 /* MethodDeclaration */:
-                case 252 /* FunctionDeclaration */: // Function declarations can have context when annotated with a jsdoc @type
+                case 211 /* FunctionExpression */:
+                case 212 /* ArrowFunction */:
+                case 167 /* MethodDeclaration */:
+                case 254 /* FunctionDeclaration */: // Function declarations can have context when annotated with a jsdoc @type
                     return isContextSensitiveFunctionLikeDeclaration(node);
-                case 201 /* ObjectLiteralExpression */:
+                case 203 /* ObjectLiteralExpression */:
                     return ts.some(node.properties, isContextSensitive);
-                case 200 /* ArrayLiteralExpression */:
+                case 202 /* ArrayLiteralExpression */:
                     return ts.some(node.elements, isContextSensitive);
-                case 218 /* ConditionalExpression */:
+                case 220 /* ConditionalExpression */:
                     return isContextSensitive(node.whenTrue) ||
                         isContextSensitive(node.whenFalse);
-                case 217 /* BinaryExpression */:
+                case 219 /* BinaryExpression */:
                     return (node.operatorToken.kind === 56 /* BarBarToken */ || node.operatorToken.kind === 60 /* QuestionQuestionToken */) &&
                         (isContextSensitive(node.left) || isContextSensitive(node.right));
-                case 289 /* PropertyAssignment */:
+                case 291 /* PropertyAssignment */:
                     return isContextSensitive(node.initializer);
-                case 208 /* ParenthesizedExpression */:
+                case 210 /* ParenthesizedExpression */:
                     return isContextSensitive(node.expression);
-                case 282 /* JsxAttributes */:
+                case 284 /* JsxAttributes */:
                     return ts.some(node.properties, isContextSensitive) || ts.isJsxOpeningElement(node.parent) && ts.some(node.parent.parent.children, isContextSensitive);
-                case 281 /* JsxAttribute */: {
+                case 283 /* JsxAttribute */: {
                     // If there is no initializer, JSX attribute has a boolean value of true which is not context sensitive.
                     var initializer = node.initializer;
                     return !!initializer && isContextSensitive(initializer);
                 }
-                case 284 /* JsxExpression */: {
+                case 286 /* JsxExpression */: {
                     // It is possible to that node.expression is undefined (e.g <div x={} />)
                     var expression = node.expression;
                     return !!expression && isContextSensitive(expression);
@@ -59486,29 +60651,11 @@
         }
         function isContextSensitiveFunctionLikeDeclaration(node) {
             return (!ts.isFunctionDeclaration(node) || ts.isInJSFile(node) && !!getTypeForDeclarationFromJSDocComment(node)) &&
-                (hasContextSensitiveParameters(node) || hasContextSensitiveReturnExpression(node));
-        }
-        function hasContextSensitiveParameters(node) {
-            // Functions with type parameters are not context sensitive.
-            if (!node.typeParameters) {
-                // Functions with any parameters that lack type annotations are context sensitive.
-                if (ts.some(node.parameters, function (p) { return !ts.getEffectiveTypeAnnotationNode(p); })) {
-                    return true;
-                }
-                if (node.kind !== 210 /* ArrowFunction */) {
-                    // If the first parameter is not an explicit 'this' parameter, then the function has
-                    // an implicit 'this' parameter which is subject to contextual typing.
-                    var parameter = ts.firstOrUndefined(node.parameters);
-                    if (!(parameter && ts.parameterIsThisKeyword(parameter))) {
-                        return true;
-                    }
-                }
-            }
-            return false;
+                (ts.hasContextSensitiveParameters(node) || hasContextSensitiveReturnExpression(node));
         }
         function hasContextSensitiveReturnExpression(node) {
             // TODO(anhans): A block should be context-sensitive if it has a context-sensitive return value.
-            return !node.typeParameters && !ts.getEffectiveReturnTypeNode(node) && !!node.body && node.body.kind !== 231 /* Block */ && isContextSensitive(node.body);
+            return !node.typeParameters && !ts.getEffectiveReturnTypeNode(node) && !!node.body && node.body.kind !== 233 /* Block */ && isContextSensitive(node.body);
         }
         function isContextSensitiveFunctionOrObjectLiteralMethod(func) {
             return (ts.isInJSFile(func) && ts.isFunctionDeclaration(func) || isFunctionExpressionOrArrowFunction(func) || ts.isObjectLiteralMethod(func)) &&
@@ -59523,6 +60670,7 @@
                     result.properties = resolved.properties;
                     result.callSignatures = ts.emptyArray;
                     result.constructSignatures = ts.emptyArray;
+                    result.indexInfos = ts.emptyArray;
                     return result;
                 }
             }
@@ -59611,23 +60759,23 @@
                 return true;
             }
             switch (node.kind) {
-                case 284 /* JsxExpression */:
-                case 208 /* ParenthesizedExpression */:
+                case 286 /* JsxExpression */:
+                case 210 /* ParenthesizedExpression */:
                     return elaborateError(node.expression, source, target, relation, headMessage, containingMessageChain, errorOutputContainer);
-                case 217 /* BinaryExpression */:
+                case 219 /* BinaryExpression */:
                     switch (node.operatorToken.kind) {
-                        case 62 /* EqualsToken */:
+                        case 63 /* EqualsToken */:
                         case 27 /* CommaToken */:
                             return elaborateError(node.right, source, target, relation, headMessage, containingMessageChain, errorOutputContainer);
                     }
                     break;
-                case 201 /* ObjectLiteralExpression */:
+                case 203 /* ObjectLiteralExpression */:
                     return elaborateObjectLiteral(node, source, target, relation, containingMessageChain, errorOutputContainer);
-                case 200 /* ArrayLiteralExpression */:
+                case 202 /* ArrayLiteralExpression */:
                     return elaborateArrayLiteral(node, source, target, relation, containingMessageChain, errorOutputContainer);
-                case 282 /* JsxAttributes */:
+                case 284 /* JsxAttributes */:
                     return elaborateJsxComponents(node, source, target, relation, containingMessageChain, errorOutputContainer);
-                case 210 /* ArrowFunction */:
+                case 212 /* ArrowFunction */:
                     return elaborateArrowFunction(node, source, target, relation, containingMessageChain, errorOutputContainer);
             }
             return false;
@@ -59728,7 +60876,14 @@
                 if (!targetPropType || targetPropType.flags & 8388608 /* IndexedAccess */)
                     continue; // Don't elaborate on indexes on generic variables
                 var sourcePropType = getIndexedAccessTypeOrUndefined(source, nameType);
-                if (sourcePropType && !checkTypeRelatedTo(sourcePropType, targetPropType, relation, /*errorNode*/ undefined)) {
+                if (!sourcePropType)
+                    continue;
+                var propName = getPropertyNameFromIndex(nameType, /*accessNode*/ undefined);
+                var targetIsOptional = !!(propName && (getPropertyOfType(target, propName) || unknownSymbol).flags & 16777216 /* Optional */);
+                var sourceIsOptional = !!(propName && (getPropertyOfType(source, propName) || unknownSymbol).flags & 16777216 /* Optional */);
+                targetPropType = removeMissingType(targetPropType, targetIsOptional);
+                sourcePropType = removeMissingType(sourcePropType, targetIsOptional && sourceIsOptional);
+                if (!checkTypeRelatedTo(sourcePropType, targetPropType, relation, /*errorNode*/ undefined)) {
                     var elaborated = next && elaborateError(next, sourcePropType, targetPropType, relation, /*headMessage*/ undefined, containingMessageChain, errorOutputContainer);
                     if (elaborated) {
                         reportedError = true;
@@ -59749,9 +60904,7 @@
                             var targetProp = propertyName !== undefined ? getPropertyOfType(target, propertyName) : undefined;
                             var issuedElaboration = false;
                             if (!targetProp) {
-                                var indexInfo = isTypeAssignableToKind(nameType, 296 /* NumberLike */) && getIndexInfoOfType(target, 1 /* Number */) ||
-                                    getIndexInfoOfType(target, 0 /* String */) ||
-                                    undefined;
+                                var indexInfo = getApplicableIndexInfo(target, nameType);
                                 if (indexInfo && indexInfo.declaration && !ts.getSourceFileOfNode(indexInfo.declaration).hasNoDefaultLib) {
                                     issuedElaboration = true;
                                     ts.addRelatedInfo(reportedDiag, ts.createDiagnosticForNode(indexInfo.declaration, ts.Diagnostics.The_expected_type_comes_from_this_index_signature));
@@ -59782,9 +60935,9 @@
                     case 1:
                         if (!(_i < _a.length)) return [3 /*break*/, 4];
                         prop = _a[_i];
-                        if (ts.isJsxSpreadAttribute(prop))
+                        if (ts.isJsxSpreadAttribute(prop) || isHyphenatedJsxName(ts.idText(prop.name)))
                             return [3 /*break*/, 3];
-                        return [4 /*yield*/, { errorNode: prop.name, innerExpression: prop.initializer, nameType: getLiteralType(ts.idText(prop.name)) }];
+                        return [4 /*yield*/, { errorNode: prop.name, innerExpression: prop.initializer, nameType: getStringLiteralType(ts.idText(prop.name)) }];
                     case 2:
                         _b.sent();
                         _b.label = 3;
@@ -59808,7 +60961,7 @@
                     case 1:
                         if (!(i < node.children.length)) return [3 /*break*/, 5];
                         child = node.children[i];
-                        nameType = getLiteralType(i - memberOffset);
+                        nameType = getNumberLiteralType(i - memberOffset);
                         elem = getElaborationElementForJsxChild(child, nameType, getInvalidTextDiagnostic);
                         if (!elem) return [3 /*break*/, 3];
                         return [4 /*yield*/, elem];
@@ -59827,7 +60980,7 @@
         }
         function getElaborationElementForJsxChild(child, nameType, getInvalidTextDiagnostic) {
             switch (child.kind) {
-                case 284 /* JsxExpression */:
+                case 286 /* JsxExpression */:
                     // child is of the type of the expression
                     return { errorNode: child, innerExpression: child.expression, nameType: nameType };
                 case 11 /* JsxText */:
@@ -59836,9 +60989,9 @@
                     }
                     // child is a string
                     return { errorNode: child, innerExpression: undefined, nameType: nameType, errorMessage: getInvalidTextDiagnostic() };
-                case 274 /* JsxElement */:
-                case 275 /* JsxSelfClosingElement */:
-                case 278 /* JsxFragment */:
+                case 276 /* JsxElement */:
+                case 277 /* JsxSelfClosingElement */:
+                case 280 /* JsxFragment */:
                     // child is of type JSX.Element
                     return { errorNode: child, innerExpression: child, nameType: nameType };
                 default:
@@ -59852,7 +61005,7 @@
                 var containingElement = node.parent.parent;
                 var childPropName = getJsxElementChildrenPropertyName(getJsxNamespaceAt(node));
                 var childrenPropName = childPropName === undefined ? "children" : ts.unescapeLeadingUnderscores(childPropName);
-                var childrenNameType = getLiteralType(childrenPropName);
+                var childrenNameType = getStringLiteralType(childrenPropName);
                 var childrenTargetType = getIndexedAccessType(target, childrenNameType);
                 var validChildren = ts.getSemanticJsxChildren(containingElement.children);
                 if (!ts.length(validChildren)) {
@@ -59907,7 +61060,7 @@
                     var tagNameText = ts.getTextOfNode(node.parent.tagName);
                     var childPropName = getJsxElementChildrenPropertyName(getJsxNamespaceAt(node));
                     var childrenPropName = childPropName === undefined ? "children" : ts.unescapeLeadingUnderscores(childPropName);
-                    var childrenTargetType = getIndexedAccessType(target, getLiteralType(childrenPropName));
+                    var childrenTargetType = getIndexedAccessType(target, getStringLiteralType(childrenPropName));
                     var diagnostic = ts.Diagnostics._0_components_don_t_accept_text_as_child_elements_Text_in_JSX_has_the_type_string_but_the_expected_type_of_1_is_2;
                     invalidTextDiagnostic = __assign(__assign({}, diagnostic), { key: "!!ALREADY FORMATTED!!", message: ts.formatMessage(/*_dummy*/ undefined, diagnostic, tagNameText, childrenPropName, typeToString(childrenTargetType)) });
                 }
@@ -59932,7 +61085,7 @@
                         elem = node.elements[i];
                         if (ts.isOmittedExpression(elem))
                             return [3 /*break*/, 3];
-                        nameType = getLiteralType(i);
+                        nameType = getNumberLiteralType(i);
                         return [4 /*yield*/, { errorNode: elem, innerExpression: elem, nameType: nameType }];
                     case 2:
                         _a.sent();
@@ -59986,11 +61139,11 @@
                         }
                         _b = prop.kind;
                         switch (_b) {
-                            case 169 /* SetAccessor */: return [3 /*break*/, 2];
-                            case 168 /* GetAccessor */: return [3 /*break*/, 2];
-                            case 166 /* MethodDeclaration */: return [3 /*break*/, 2];
-                            case 290 /* ShorthandPropertyAssignment */: return [3 /*break*/, 2];
-                            case 289 /* PropertyAssignment */: return [3 /*break*/, 4];
+                            case 171 /* SetAccessor */: return [3 /*break*/, 2];
+                            case 170 /* GetAccessor */: return [3 /*break*/, 2];
+                            case 167 /* MethodDeclaration */: return [3 /*break*/, 2];
+                            case 292 /* ShorthandPropertyAssignment */: return [3 /*break*/, 2];
+                            case 291 /* PropertyAssignment */: return [3 /*break*/, 4];
                         }
                         return [3 /*break*/, 6];
                     case 2: return [4 /*yield*/, { errorNode: prop.name, innerExpression: undefined, nameType: type }];
@@ -60067,8 +61220,8 @@
                 return 0 /* False */;
             }
             var kind = target.declaration ? target.declaration.kind : 0 /* Unknown */;
-            var strictVariance = !(checkMode & 3 /* Callback */) && strictFunctionTypes && kind !== 166 /* MethodDeclaration */ &&
-                kind !== 165 /* MethodSignature */ && kind !== 167 /* Constructor */;
+            var strictVariance = !(checkMode & 3 /* Callback */) && strictFunctionTypes && kind !== 167 /* MethodDeclaration */ &&
+                kind !== 166 /* MethodSignature */ && kind !== 169 /* Constructor */;
             var result = -1 /* True */;
             var sourceThisType = getThisTypeOfSignature(source);
             if (sourceThisType && sourceThisType !== voidType) {
@@ -60202,8 +61355,7 @@
                 t.properties.length === 0 &&
                 t.callSignatures.length === 0 &&
                 t.constructSignatures.length === 0 &&
-                !t.stringIndexInfo &&
-                !t.numberIndexInfo;
+                t.indexInfos.length === 0;
         }
         function isEmptyObjectType(type) {
             return type.flags & 524288 /* Object */ ? !isGenericMappedType(type) && isEmptyResolvedType(resolveStructuredTypeMembers(type)) :
@@ -60217,7 +61369,7 @@
                 type.symbol && type.symbol.flags & 2048 /* TypeLiteral */ && getMembersOfSymbol(type.symbol).size === 0));
         }
         function isStringIndexSignatureOnlyType(type) {
-            return type.flags & 524288 /* Object */ && !isGenericMappedType(type) && getPropertiesOfType(type).length === 0 && getIndexInfoOfType(type, 0 /* String */) && !getIndexInfoOfType(type, 1 /* Number */) ||
+            return type.flags & 524288 /* Object */ && !isGenericMappedType(type) && getPropertiesOfType(type).length === 0 && getIndexInfosOfType(type).length === 1 && !!getIndexInfoOfType(type, stringType) ||
                 type.flags & 3145728 /* UnionOrIntersection */ && ts.every(type.types, isStringIndexSignatureOnlyType) ||
                 false;
         }
@@ -60322,9 +61474,10 @@
                 }
             }
             else {
-                if (!(source.flags & 3145728 /* UnionOrIntersection */) && !(target.flags & 3145728 /* UnionOrIntersection */) &&
-                    source.flags !== target.flags && !(source.flags & 469237760 /* Substructure */))
+                if (source.flags !== target.flags)
                     return false;
+                if (source.flags & 67358815 /* Singleton */)
+                    return true;
             }
             if (source.flags & 524288 /* Object */ && target.flags & 524288 /* Object */) {
                 var related = relation.get(getRelationKey(source, target, 0 /* None */, relation));
@@ -60338,7 +61491,7 @@
             return false;
         }
         function isIgnoredJsxProperty(source, sourceProp) {
-            return ts.getObjectFlags(source) & 2048 /* JsxAttributes */ && !isUnhyphenatedJsxName(sourceProp.escapedName);
+            return ts.getObjectFlags(source) & 2048 /* JsxAttributes */ && isHyphenatedJsxName(sourceProp.escapedName);
         }
         function getNormalizedType(type, writing) {
             while (true) {
@@ -60415,7 +61568,7 @@
                 }
                 var diag = ts.createDiagnosticForNodeFromMessageChain(errorNode, errorInfo, relatedInformation);
                 if (relatedInfo) {
-                    ts.addRelatedInfo.apply(void 0, __spreadArray([diag], relatedInfo));
+                    ts.addRelatedInfo.apply(void 0, __spreadArray([diag], relatedInfo, false));
                 }
                 if (errorOutputContainer) {
                     (errorOutputContainer.errors || (errorOutputContainer.errors = [])).push(diag);
@@ -60458,7 +61611,7 @@
                     reportError.apply(void 0, stack[0]);
                     if (info) {
                         // Actually do the last relation error
-                        reportRelationError.apply(void 0, __spreadArray([/*headMessage*/ undefined], info));
+                        reportRelationError.apply(void 0, __spreadArray([/*headMessage*/ undefined], info, false));
                     }
                     return;
                 }
@@ -60547,12 +61700,12 @@
                     var _b = secondaryRootErrors_1[_i], msg = _b[0], args = _b.slice(1);
                     var originalValue = msg.elidedInCompatabilityPyramid;
                     msg.elidedInCompatabilityPyramid = false; // Temporarily override elision to ensure error is reported
-                    reportError.apply(void 0, __spreadArray([msg], args));
+                    reportError.apply(void 0, __spreadArray([msg], args, false));
                     msg.elidedInCompatabilityPyramid = originalValue;
                 }
                 if (info) {
                     // Actually do the last relation error
-                    reportRelationError.apply(void 0, __spreadArray([/*headMessage*/ undefined], info));
+                    reportRelationError.apply(void 0, __spreadArray([/*headMessage*/ undefined], info, false));
                 }
             }
             function reportError(message, arg0, arg1, arg2, arg3) {
@@ -60873,12 +62026,12 @@
                 }
             }
             function isIdenticalTo(source, target) {
-                var flags = source.flags & target.flags;
-                if (!(flags & 469237760 /* Substructure */)) {
+                if (source.flags !== target.flags)
                     return 0 /* False */;
-                }
+                if (source.flags & 67358815 /* Singleton */)
+                    return -1 /* True */;
                 traceUnionsOrIntersectionsTooLarge(source, target);
-                if (flags & 3145728 /* UnionOrIntersection */) {
+                if (source.flags & 3145728 /* UnionOrIntersection */) {
                     var result_7 = eachTypeRelatedToSomeType(source, target);
                     if (result_7) {
                         result_7 &= eachTypeRelatedToSomeType(target, source);
@@ -60889,9 +62042,10 @@
             }
             function getTypeOfPropertyInTypes(types, name) {
                 var appendPropType = function (propTypes, type) {
+                    var _a;
                     type = getApparentType(type);
                     var prop = type.flags & 3145728 /* UnionOrIntersection */ ? getPropertyOfUnionOrIntersectionType(type, name) : getPropertyOfObjectType(type, name);
-                    var propType = prop && getTypeOfSymbol(prop) || isNumericLiteralName(name) && getIndexTypeOfType(type, 1 /* Number */) || getIndexTypeOfType(type, 0 /* String */) || undefinedType;
+                    var propType = prop && getTypeOfSymbol(prop) || ((_a = getApplicableIndexInfoForName(type, name)) === null || _a === void 0 ? void 0 : _a.type) || undefinedType;
                     return ts.append(propTypes, propType);
                 };
                 return getUnionType(ts.reduceLeft(types, appendPropType, /*initial*/ undefined) || ts.emptyArray);
@@ -60912,7 +62066,7 @@
                     reducedTarget = findMatchingDiscriminantType(source, target, isRelatedTo) || filterPrimitivesIfContainsNonPrimitive(target);
                     checkTypes = reducedTarget.flags & 1048576 /* Union */ ? reducedTarget.types : [reducedTarget];
                 }
-                var _loop_16 = function (prop) {
+                var _loop_18 = function (prop) {
                     if (shouldCheckAsExcessProperty(prop, source.symbol) && !isIgnoredJsxProperty(source, prop)) {
                         if (!isKnownProperty(reducedTarget, prop.escapedName, isComparingJsxAttributes)) {
                             if (reportErrors) {
@@ -60975,7 +62129,7 @@
                 };
                 for (var _i = 0, _b = getPropertiesOfType(source); _i < _b.length; _i++) {
                     var prop = _b[_i];
-                    var state_5 = _loop_16(prop);
+                    var state_5 = _loop_18(prop);
                     if (typeof state_5 === "object")
                         return state_5.value;
                 }
@@ -61287,7 +62441,7 @@
                     // parameter 'T extends 1 | 2', the intersection 'T & 1' should be reduced to '1' such that it doesn't
                     // appear to be comparable to '2'.
                     if (relation === comparableRelation && target.flags & 131068 /* Primitive */) {
-                        var constraints = ts.sameMap(source.types, function (t) { return t.flags & 131068 /* Primitive */ ? t : getBaseConstraintOfType(t) || unknownType; });
+                        var constraints = ts.sameMap(source.types, getBaseConstraintOrType);
                         if (constraints !== source.types) {
                             source = getIntersectionType(constraints);
                             if (!(source.flags & 2097152 /* Intersection */)) {
@@ -61431,8 +62585,8 @@
                         var baseObjectType = getBaseConstraintOfType(objectType) || objectType;
                         var baseIndexType = getBaseConstraintOfType(indexType) || indexType;
                         if (!isGenericObjectType(baseObjectType) && !isGenericIndexType(baseIndexType)) {
-                            var accessFlags = 2 /* Writing */ | (baseObjectType !== objectType ? 1 /* NoIndexSignatures */ : 0);
-                            var constraint = getIndexedAccessTypeOrUndefined(baseObjectType, baseIndexType, target.noUncheckedIndexedAccessCandidate, /*accessNode*/ undefined, accessFlags);
+                            var accessFlags = 4 /* Writing */ | (baseObjectType !== objectType ? 2 /* NoIndexSignatures */ : 0);
+                            var constraint = getIndexedAccessTypeOrUndefined(baseObjectType, baseIndexType, accessFlags);
                             if (constraint) {
                                 if (reportErrors && originalErrorInfo) {
                                     // create a new chain for the constraint error
@@ -61656,7 +62810,7 @@
                         return 0 /* False */;
                     }
                     if (ts.getObjectFlags(source) & 4 /* Reference */ && ts.getObjectFlags(target) & 4 /* Reference */ && source.target === target.target &&
-                        !(ts.getObjectFlags(source) & 4096 /* MarkerType */ || ts.getObjectFlags(target) & 4096 /* MarkerType */)) {
+                        !isTupleType(source) && !(ts.getObjectFlags(source) & 4096 /* MarkerType */ || ts.getObjectFlags(target) & 4096 /* MarkerType */)) {
                         // We have type references to the same generic type, and the type references are not marker
                         // type references (which are intended by be compared structurally). Obtain the variance
                         // information for the type parameters and relate the type arguments accordingly.
@@ -61674,7 +62828,7 @@
                     }
                     else if (isReadonlyArrayType(target) ? isArrayType(source) || isTupleType(source) : isArrayType(target) && isTupleType(source) && !source.target.readonly) {
                         if (relation !== identityRelation) {
-                            return isRelatedTo(getIndexTypeOfType(source, 1 /* Number */) || anyType, getIndexTypeOfType(target, 1 /* Number */) || anyType, reportErrors);
+                            return isRelatedTo(getIndexTypeOfType(source, numberType) || anyType, getIndexTypeOfType(target, numberType) || anyType, reportErrors);
                         }
                         else {
                             // By flags alone, we know that the `target` is a readonly array while the source is a normal array or tuple
@@ -61701,10 +62855,7 @@
                             if (result) {
                                 result &= signaturesRelatedTo(source, target, 1 /* Construct */, reportStructuralErrors);
                                 if (result) {
-                                    result &= indexTypesRelatedTo(source, target, 0 /* String */, sourceIsPrimitive, reportStructuralErrors, intersectionState);
-                                    if (result) {
-                                        result &= indexTypesRelatedTo(source, target, 1 /* Number */, sourceIsPrimitive, reportStructuralErrors, intersectionState);
-                                    }
+                                    result &= indexSignaturesRelatedTo(source, target, sourceIsPrimitive, reportStructuralErrors, intersectionState);
                                 }
                             }
                         }
@@ -61830,7 +62981,7 @@
                 var numCombinations = 1;
                 for (var _i = 0, sourcePropertiesFiltered_1 = sourcePropertiesFiltered; _i < sourcePropertiesFiltered_1.length; _i++) {
                     var sourceProperty = sourcePropertiesFiltered_1[_i];
-                    numCombinations *= countTypes(getTypeOfSymbol(sourceProperty));
+                    numCombinations *= countTypes(getNonMissingTypeOfSymbol(sourceProperty));
                     if (numCombinations > 25) {
                         // We've reached the complexity limit.
                         ts.tracing === null || ts.tracing === void 0 ? void 0 : ts.tracing.instant("checkTypes" /* CheckTypes */, "typeRelatedToDiscriminatedType_DepthLimit", { sourceId: source.id, targetId: target.id, numCombinations: numCombinations });
@@ -61842,7 +62993,7 @@
                 var excludedProperties = new ts.Set();
                 for (var i = 0; i < sourcePropertiesFiltered.length; i++) {
                     var sourceProperty = sourcePropertiesFiltered[i];
-                    var sourcePropertyType = getTypeOfSymbol(sourceProperty);
+                    var sourcePropertyType = getNonMissingTypeOfSymbol(sourceProperty);
                     sourceDiscriminantTypes[i] = sourcePropertyType.flags & 1048576 /* Union */
                         ? sourcePropertyType.types
                         : [sourcePropertyType];
@@ -61852,11 +63003,11 @@
                 // constituents of 'target'. If any combination does not have a match then 'source' is not relatable.
                 var discriminantCombinations = ts.cartesianProduct(sourceDiscriminantTypes);
                 var matchingTypes = [];
-                var _loop_17 = function (combination) {
+                var _loop_19 = function (combination) {
                     var hasMatch = false;
                     outer: for (var _c = 0, _d = target.types; _c < _d.length; _c++) {
                         var type = _d[_c];
-                        var _loop_18 = function (i) {
+                        var _loop_20 = function (i) {
                             var sourceProperty = sourcePropertiesFiltered[i];
                             var targetProperty = getPropertyOfType(type, sourceProperty.escapedName);
                             if (!targetProperty)
@@ -61872,7 +63023,7 @@
                             }
                         };
                         for (var i = 0; i < sourcePropertiesFiltered.length; i++) {
-                            var state_7 = _loop_18(i);
+                            var state_7 = _loop_20(i);
                             switch (state_7) {
                                 case "continue-outer": continue outer;
                             }
@@ -61886,7 +63037,7 @@
                 };
                 for (var _a = 0, discriminantCombinations_1 = discriminantCombinations; _a < discriminantCombinations_1.length; _a++) {
                     var combination = discriminantCombinations_1[_a];
-                    var state_6 = _loop_17(combination);
+                    var state_6 = _loop_19(combination);
                     if (typeof state_6 === "object")
                         return state_6.value;
                 }
@@ -61899,15 +63050,12 @@
                         result &= signaturesRelatedTo(source, type, 0 /* Call */, /*reportStructuralErrors*/ false);
                         if (result) {
                             result &= signaturesRelatedTo(source, type, 1 /* Construct */, /*reportStructuralErrors*/ false);
-                            if (result) {
-                                result &= indexTypesRelatedTo(source, type, 0 /* String */, /*sourceIsPrimitive*/ false, /*reportStructuralErrors*/ false, 0 /* None */);
+                            if (result && !(isTupleType(source) && isTupleType(type))) {
                                 // Comparing numeric index types when both `source` and `type` are tuples is unnecessary as the
                                 // element types should be sufficiently covered by `propertiesRelatedTo`. It also causes problems
                                 // with index type assignability as the types for the excluded discriminants are still included
                                 // in the index type.
-                                if (result && !(isTupleType(source) && isTupleType(type))) {
-                                    result &= indexTypesRelatedTo(source, type, 1 /* Number */, /*sourceIsPrimitive*/ false, /*reportStructuralErrors*/ false, 0 /* None */);
-                                }
+                                result &= indexSignaturesRelatedTo(source, type, /*sourceIsPrimitive*/ false, /*reportStructuralErrors*/ false, 0 /* None */);
                             }
                         }
                     }
@@ -61935,46 +63083,9 @@
             }
             function isPropertySymbolTypeRelated(sourceProp, targetProp, getTypeOfSourceProperty, reportErrors, intersectionState) {
                 var targetIsOptional = strictNullChecks && !!(ts.getCheckFlags(targetProp) & 48 /* Partial */);
-                var source = getTypeOfSourceProperty(sourceProp);
-                if (ts.getCheckFlags(targetProp) & 65536 /* DeferredType */ && !getSymbolLinks(targetProp).type) {
-                    // Rather than resolving (and normalizing) the type, relate constituent-by-constituent without performing normalization or seconadary passes
-                    var links = getSymbolLinks(targetProp);
-                    ts.Debug.assertIsDefined(links.deferralParent);
-                    ts.Debug.assertIsDefined(links.deferralConstituents);
-                    var unionParent = !!(links.deferralParent.flags & 1048576 /* Union */);
-                    var result_12 = unionParent ? 0 /* False */ : -1 /* True */;
-                    var targetTypes = links.deferralConstituents;
-                    for (var _i = 0, targetTypes_3 = targetTypes; _i < targetTypes_3.length; _i++) {
-                        var targetType = targetTypes_3[_i];
-                        var related = isRelatedTo(source, targetType, /*reportErrors*/ false, /*headMessage*/ undefined, unionParent ? 0 : 2 /* Target */);
-                        if (!unionParent) {
-                            if (!related) {
-                                // Can't assign to a target individually - have to fallback to assigning to the _whole_ intersection (which forces normalization)
-                                return isRelatedTo(source, addOptionality(getTypeOfSymbol(targetProp), targetIsOptional), reportErrors);
-                            }
-                            result_12 &= related;
-                        }
-                        else {
-                            if (related) {
-                                return related;
-                            }
-                        }
-                    }
-                    if (unionParent && !result_12 && targetIsOptional) {
-                        result_12 = isRelatedTo(source, undefinedType);
-                    }
-                    if (unionParent && !result_12 && reportErrors) {
-                        // The easiest way to get the right errors here is to un-defer (which may be costly)
-                        // If it turns out this is too costly too often, we can replicate the error handling logic within
-                        // typeRelatedToSomeType without the discriminatable type branch (as that requires a manifest union
-                        // type on which to hand discriminable properties, which we are expressly trying to avoid here)
-                        return isRelatedTo(source, addOptionality(getTypeOfSymbol(targetProp), targetIsOptional), reportErrors);
-                    }
-                    return result_12;
-                }
-                else {
-                    return isRelatedTo(source, addOptionality(getTypeOfSymbol(targetProp), targetIsOptional), reportErrors, /*headMessage*/ undefined, intersectionState);
-                }
+                var effectiveTarget = addOptionality(getNonMissingTypeOfSymbol(targetProp), /*isProperty*/ false, targetIsOptional);
+                var effectiveSource = getTypeOfSourceProperty(sourceProp);
+                return isRelatedTo(effectiveSource, effectiveTarget, reportErrors, /*headMessage*/ undefined, intersectionState);
             }
             function propertyRelatedTo(source, target, sourceProp, targetProp, getTypeOfSourceProperty, reportErrors, intersectionState, skipOptional) {
                 var sourcePropFlags = ts.getDeclarationModifierFlagsFromSymbol(sourceProp);
@@ -62054,7 +63165,7 @@
                 }
                 if (props.length === 1) {
                     var propName = symbolToString(unmatchedProperty);
-                    reportError.apply(void 0, __spreadArray([ts.Diagnostics.Property_0_is_missing_in_type_1_but_required_in_type_2, propName], getTypeNamesForErrorDisplay(source, target)));
+                    reportError.apply(void 0, __spreadArray([ts.Diagnostics.Property_0_is_missing_in_type_1_but_required_in_type_2, propName], getTypeNamesForErrorDisplay(source, target), false));
                     if (ts.length(unmatchedProperty.declarations)) {
                         associateRelatedInfo(ts.createDiagnosticForNode(unmatchedProperty.declarations[0], ts.Diagnostics._0_is_declared_here, propName));
                     }
@@ -62103,7 +63214,7 @@
                             }
                             return 0 /* False */;
                         }
-                        if (!targetRestFlag && sourceRestFlag) {
+                        if (!targetRestFlag && (sourceRestFlag || targetArity < sourceArity)) {
                             if (reportErrors) {
                                 if (sourceMinLength < targetMinLength) {
                                     reportError(ts.Diagnostics.Target_requires_0_element_s_but_source_may_have_fewer, targetMinLength);
@@ -62151,13 +63262,14 @@
                                 }
                             }
                             var sourceType = !isTupleType(source) ? sourceTypeArguments[0] :
-                                i < startCount || i >= targetArity - endCount ? sourceTypeArguments[sourceIndex] :
+                                i < startCount || i >= targetArity - endCount ? removeMissingType(sourceTypeArguments[sourceIndex], !!(sourceFlags & targetFlags & 2 /* Optional */)) :
                                     getElementTypeOfSliceOfTupleType(source, startCount, endCount) || neverType;
                             var targetType = targetTypeArguments[i];
-                            var targetCheckType = sourceFlags & 8 /* Variadic */ && targetFlags & 4 /* Rest */ ? createArrayType(targetType) : targetType;
+                            var targetCheckType = sourceFlags & 8 /* Variadic */ && targetFlags & 4 /* Rest */ ? createArrayType(targetType) :
+                                removeMissingType(targetType, !!(targetFlags & 2 /* Optional */));
                             var related = isRelatedTo(sourceType, targetCheckType, reportErrors, /*headMessage*/ undefined, intersectionState);
                             if (!related) {
-                                if (reportErrors) {
+                                if (reportErrors && (targetArity > 1 || sourceArity > 1)) {
                                     if (i < startCount || i >= targetArity - endCount || sourceArity - startCount - endCount === 1) {
                                         reportIncompatibleError(ts.Diagnostics.Type_at_position_0_in_source_is_not_compatible_with_type_at_position_1_in_target, sourceIndex, i);
                                     }
@@ -62188,7 +63300,7 @@
                         var sourceProp = _a[_i];
                         if (!getPropertyOfObjectType(target, sourceProp.escapedName)) {
                             var sourceType = getTypeOfSymbol(sourceProp);
-                            if (!(sourceType === undefinedType || sourceType === undefinedWideningType || sourceType === optionalType)) {
+                            if (!(sourceType.flags & 32768 /* Undefined */)) {
                                 if (reportErrors) {
                                     reportError(ts.Diagnostics.Property_0_does_not_exist_on_type_1, symbolToString(sourceProp), typeToString(target));
                                 }
@@ -62207,7 +63319,7 @@
                     if (!(targetProp.flags & 4194304 /* Prototype */) && (!numericNamesOnly || isNumericLiteralName(name) || name === "length")) {
                         var sourceProp = getPropertyOfType(source, name);
                         if (sourceProp && sourceProp !== targetProp) {
-                            var related = propertyRelatedTo(source, target, sourceProp, targetProp, getTypeOfSymbol, reportErrors, intersectionState, relation === comparableRelation);
+                            var related = propertyRelatedTo(source, target, sourceProp, targetProp, getNonMissingTypeOfSymbol, reportErrors, intersectionState, relation === comparableRelation);
                             if (!related) {
                                 return 0 /* False */;
                             }
@@ -62301,7 +63413,7 @@
                     var targetSignature = ts.first(targetSignatures);
                     result = signatureRelatedTo(sourceSignature, targetSignature, eraseGenerics, reportErrors, incompatibleReporter(sourceSignature, targetSignature));
                     if (!result && reportErrors && kind === 1 /* Construct */ && (sourceObjectFlags & targetObjectFlags) &&
-                        (((_a = targetSignature.declaration) === null || _a === void 0 ? void 0 : _a.kind) === 167 /* Constructor */ || ((_b = sourceSignature.declaration) === null || _b === void 0 ? void 0 : _b.kind) === 167 /* Constructor */)) {
+                        (((_a = targetSignature.declaration) === null || _a === void 0 ? void 0 : _a.kind) === 169 /* Constructor */ || ((_b = sourceSignature.declaration) === null || _b === void 0 ? void 0 : _b.kind) === 169 /* Constructor */)) {
                         var constructSignatureToString = function (signature) {
                             return signatureToString(signature, /*enclosingDeclaration*/ undefined, 262144 /* WriteArrowStyleSignature */, kind);
                         };
@@ -62367,8 +63479,9 @@
                 }
                 return result;
             }
-            function eachPropertyRelatedTo(source, target, kind, reportErrors) {
+            function membersRelatedToIndexInfo(source, targetInfo, reportErrors) {
                 var result = -1 /* True */;
+                var keyType = targetInfo.keyType;
                 var props = source.flags & 2097152 /* Intersection */ ? getPropertiesOfUnionOrIntersectionType(source) : getPropertiesOfObjectType(source);
                 for (var _i = 0, props_2 = props; _i < props_2.length; _i++) {
                     var prop = props_2[_i];
@@ -62376,16 +63489,12 @@
                     if (isIgnoredJsxProperty(source, prop)) {
                         continue;
                     }
-                    var nameType = getSymbolLinks(prop).nameType;
-                    if (nameType && nameType.flags & 8192 /* UniqueESSymbol */) {
-                        continue;
-                    }
-                    if (kind === 0 /* String */ || isNumericLiteralName(prop.escapedName)) {
-                        var propType = getTypeOfSymbol(prop);
-                        var type = propType.flags & 32768 /* Undefined */ || !(kind === 0 /* String */ && prop.flags & 16777216 /* Optional */)
+                    if (isApplicableIndexType(getLiteralTypeFromProperty(prop, 8576 /* StringOrNumberLiteralOrUnique */), keyType)) {
+                        var propType = getNonMissingTypeOfSymbol(prop);
+                        var type = exactOptionalPropertyTypes || propType.flags & 32768 /* Undefined */ || keyType === numberType || !(prop.flags & 16777216 /* Optional */)
                             ? propType
                             : getTypeWithFacts(propType, 524288 /* NEUndefined */);
-                        var related = isRelatedTo(type, target, reportErrors);
+                        var related = isRelatedTo(type, targetInfo.type, reportErrors);
                         if (!related) {
                             if (reportErrors) {
                                 reportError(ts.Diagnostics.Property_0_is_incompatible_with_index_signature, symbolToString(prop));
@@ -62395,67 +63504,77 @@
                         result &= related;
                     }
                 }
+                for (var _a = 0, _b = getIndexInfosOfType(source); _a < _b.length; _a++) {
+                    var info = _b[_a];
+                    if (isApplicableIndexType(info.keyType, keyType)) {
+                        var related = indexInfoRelatedTo(info, targetInfo, reportErrors);
+                        if (!related) {
+                            return 0 /* False */;
+                        }
+                        result &= related;
+                    }
+                }
                 return result;
             }
-            function indexTypeRelatedTo(sourceType, targetType, reportErrors) {
-                var related = isRelatedTo(sourceType, targetType, reportErrors);
+            function indexInfoRelatedTo(sourceInfo, targetInfo, reportErrors) {
+                var related = isRelatedTo(sourceInfo.type, targetInfo.type, reportErrors);
                 if (!related && reportErrors) {
-                    reportError(ts.Diagnostics.Index_signatures_are_incompatible);
+                    if (sourceInfo.keyType === targetInfo.keyType) {
+                        reportError(ts.Diagnostics._0_index_signatures_are_incompatible, typeToString(sourceInfo.keyType));
+                    }
+                    else {
+                        reportError(ts.Diagnostics._0_and_1_index_signatures_are_incompatible, typeToString(sourceInfo.keyType), typeToString(targetInfo.keyType));
+                    }
                 }
                 return related;
             }
-            function indexTypesRelatedTo(source, target, kind, sourceIsPrimitive, reportErrors, intersectionState) {
+            function indexSignaturesRelatedTo(source, target, sourceIsPrimitive, reportErrors, intersectionState) {
                 if (relation === identityRelation) {
-                    return indexTypesIdenticalTo(source, target, kind);
+                    return indexSignaturesIdenticalTo(source, target);
                 }
-                var targetType = getIndexTypeOfType(target, kind);
-                if (!targetType) {
-                    return -1 /* True */;
-                }
-                if (targetType.flags & 1 /* Any */ && !sourceIsPrimitive) {
-                    // An index signature of type `any` permits assignment from everything but primitives,
-                    // provided that there is also a `string` index signature of type `any`.
-                    var stringIndexType = kind === 0 /* String */ ? targetType : getIndexTypeOfType(target, 0 /* String */);
-                    if (stringIndexType && stringIndexType.flags & 1 /* Any */) {
-                        return -1 /* True */;
+                var indexInfos = getIndexInfosOfType(target);
+                var targetHasStringIndex = ts.some(indexInfos, function (info) { return info.keyType === stringType; });
+                var result = -1 /* True */;
+                for (var _i = 0, indexInfos_3 = indexInfos; _i < indexInfos_3.length; _i++) {
+                    var targetInfo = indexInfos_3[_i];
+                    var related = !sourceIsPrimitive && targetHasStringIndex && targetInfo.type.flags & 1 /* Any */ ? -1 /* True */ :
+                        isGenericMappedType(source) && targetHasStringIndex ? isRelatedTo(getTemplateTypeFromMappedType(source), targetInfo.type, reportErrors) :
+                            typeRelatedToIndexInfo(source, targetInfo, reportErrors, intersectionState);
+                    if (!related) {
+                        return 0 /* False */;
                     }
+                    result &= related;
                 }
-                if (isGenericMappedType(source)) {
-                    // A generic mapped type { [P in K]: T } is related to a type with an index signature
-                    // { [x: string]: U }, and optionally with an index signature { [x: number]: V },
-                    // if T is related to U and V.
-                    return getIndexTypeOfType(target, 0 /* String */) ? isRelatedTo(getTemplateTypeFromMappedType(source), targetType, reportErrors) : 0 /* False */;
-                }
-                var indexType = getIndexTypeOfType(source, kind) || kind === 1 /* Number */ && getIndexTypeOfType(source, 0 /* String */);
-                if (indexType) {
-                    return indexTypeRelatedTo(indexType, targetType, reportErrors);
+                return result;
+            }
+            function typeRelatedToIndexInfo(source, targetInfo, reportErrors, intersectionState) {
+                var sourceInfo = getApplicableIndexInfo(source, targetInfo.keyType);
+                if (sourceInfo) {
+                    return indexInfoRelatedTo(sourceInfo, targetInfo, reportErrors);
                 }
                 if (!(intersectionState & 1 /* Source */) && isObjectTypeWithInferableIndex(source)) {
                     // Intersection constituents are never considered to have an inferred index signature
-                    var related = eachPropertyRelatedTo(source, targetType, kind, reportErrors);
-                    if (related && kind === 0 /* String */) {
-                        var numberIndexType = getIndexTypeOfType(source, 1 /* Number */);
-                        if (numberIndexType) {
-                            related &= indexTypeRelatedTo(numberIndexType, targetType, reportErrors);
-                        }
-                    }
-                    return related;
+                    return membersRelatedToIndexInfo(source, targetInfo, reportErrors);
                 }
                 if (reportErrors) {
-                    reportError(ts.Diagnostics.Index_signature_is_missing_in_type_0, typeToString(source));
+                    reportError(ts.Diagnostics.Index_signature_for_type_0_is_missing_in_type_1, typeToString(targetInfo.keyType), typeToString(source));
                 }
                 return 0 /* False */;
             }
-            function indexTypesIdenticalTo(source, target, indexKind) {
-                var targetInfo = getIndexInfoOfType(target, indexKind);
-                var sourceInfo = getIndexInfoOfType(source, indexKind);
-                if (!sourceInfo && !targetInfo) {
-                    return -1 /* True */;
+            function indexSignaturesIdenticalTo(source, target) {
+                var sourceInfos = getIndexInfosOfType(source);
+                var targetInfos = getIndexInfosOfType(target);
+                if (sourceInfos.length !== targetInfos.length) {
+                    return 0 /* False */;
                 }
-                if (sourceInfo && targetInfo && sourceInfo.isReadonly === targetInfo.isReadonly) {
-                    return isRelatedTo(sourceInfo.type, targetInfo.type);
+                for (var _i = 0, targetInfos_1 = targetInfos; _i < targetInfos_1.length; _i++) {
+                    var targetInfo = targetInfos_1[_i];
+                    var sourceInfo = getIndexInfoOfType(source, targetInfo.keyType);
+                    if (!(sourceInfo && isRelatedTo(sourceInfo.type, targetInfo.type) && sourceInfo.isReadonly === targetInfo.isReadonly)) {
+                        return 0 /* False */;
+                    }
                 }
-                return 0 /* False */;
+                return -1 /* True */;
             }
             function constructorVisibilitiesAreCompatible(sourceSignature, targetSignature, reportErrors) {
                 if (!sourceSignature.declaration || !targetSignature.declaration) {
@@ -62551,10 +63670,8 @@
         function isWeakType(type) {
             if (type.flags & 524288 /* Object */) {
                 var resolved = resolveStructuredTypeMembers(type);
-                return resolved.callSignatures.length === 0 && resolved.constructSignatures.length === 0 &&
-                    !resolved.stringIndexInfo && !resolved.numberIndexInfo &&
-                    resolved.properties.length > 0 &&
-                    ts.every(resolved.properties, function (p) { return !!(p.flags & 16777216 /* Optional */); });
+                return resolved.callSignatures.length === 0 && resolved.constructSignatures.length === 0 && resolved.indexInfos.length === 0 &&
+                    resolved.properties.length > 0 && ts.every(resolved.properties, function (p) { return !!(p.flags & 16777216 /* Optional */); });
             }
             if (type.flags & 2097152 /* Intersection */) {
                 return ts.every(type.types, isWeakType);
@@ -62599,7 +63716,7 @@
                 // The emptyArray singleton is used to signal a recursive invocation.
                 cache.variances = ts.emptyArray;
                 variances = [];
-                var _loop_19 = function (tp) {
+                var _loop_21 = function (tp) {
                     var unmeasurable = false;
                     var unreliable = false;
                     var oldHandler = outofbandVarianceMarkerHandler;
@@ -62631,7 +63748,7 @@
                 };
                 for (var _i = 0, typeParameters_1 = typeParameters; _i < typeParameters_1.length; _i++) {
                     var tp = typeParameters_1[_i];
-                    _loop_19(tp);
+                    _loop_21(tp);
                 }
                 cache.variances = variances;
                 ts.tracing === null || ts.tracing === void 0 ? void 0 : ts.tracing.pop();
@@ -62941,8 +64058,8 @@
         }
         function literalTypesWithSameBaseType(types) {
             var commonBaseType;
-            for (var _i = 0, types_14 = types; _i < types_14.length; _i++) {
-                var t = types_14[_i];
+            for (var _i = 0, types_13 = types; _i < types_13.length; _i++) {
+                var t = types_13[_i];
                 var baseType = getBaseTypeOfLiteralType(t);
                 if (!commonBaseType) {
                     commonBaseType = baseType;
@@ -63003,6 +64120,14 @@
             }
             type.objectFlags |= 33554432 /* IdenticalBaseTypeCalculated */;
             var target = type.target;
+            if (ts.getObjectFlags(target) & 1 /* Class */) {
+                var baseTypeNode = getBaseTypeNodeOfClass(target);
+                // A base type expression may circularly reference the class itself (e.g. as an argument to function call), so we only
+                // check for base types specified as simple qualified names.
+                if (baseTypeNode && baseTypeNode.expression.kind !== 79 /* Identifier */ && baseTypeNode.expression.kind !== 204 /* PropertyAccessExpression */) {
+                    return undefined;
+                }
+            }
             var bases = getBaseTypes(target);
             if (bases.length !== 1) {
                 return undefined;
@@ -63017,9 +64142,12 @@
             type.objectFlags |= 67108864 /* IdenticalBaseTypeExists */;
             return type.cachedEquivalentBaseType = instantiatedBase;
         }
+        function isEmptyLiteralType(type) {
+            return strictNullChecks ? type === implicitNeverType : type === undefinedWideningType;
+        }
         function isEmptyArrayLiteralType(type) {
             var elementType = getElementTypeOfArrayType(type);
-            return strictNullChecks ? elementType === implicitNeverType : elementType === undefinedWideningType;
+            return !!elementType && isEmptyLiteralType(elementType);
         }
         function isTupleLikeType(type) {
             return isTupleType(type) || !!getPropertyOfType(type, "0");
@@ -63146,8 +64274,8 @@
         }
         function getFalsyFlagsOfTypes(types) {
             var result = 0;
-            for (var _i = 0, types_15 = types; _i < types_15.length; _i++) {
-                var t = types_15[_i];
+            for (var _i = 0, types_14 = types; _i < types_14.length; _i++) {
+                var t = types_14[_i];
                 result |= getFalsyFlags(t);
             }
             return result;
@@ -63195,9 +64323,10 @@
                     missing === 65536 /* Null */ ? getUnionType([type, nullType]) :
                         getUnionType([type, undefinedType, nullType]);
         }
-        function getOptionalType(type) {
+        function getOptionalType(type, isProperty) {
+            if (isProperty === void 0) { isProperty = false; }
             ts.Debug.assert(strictNullChecks);
-            return type.flags & 32768 /* Undefined */ ? type : getUnionType([type, undefinedType]);
+            return type.flags & 32768 /* Undefined */ ? type : getUnionType([type, isProperty ? missingType : undefinedType]);
         }
         function getGlobalNonNullableTypeInstantiation(type) {
             // First reduce away any constituents that are assignable to 'undefined' or 'null'. This not only eliminates
@@ -63218,11 +64347,8 @@
         function addOptionalTypeMarker(type) {
             return strictNullChecks ? getUnionType([type, optionalType]) : type;
         }
-        function isNotOptionalTypeMarker(type) {
-            return type !== optionalType;
-        }
         function removeOptionalTypeMarker(type) {
-            return strictNullChecks ? filterType(type, isNotOptionalTypeMarker) : type;
+            return strictNullChecks ? removeType(type, optionalType) : type;
         }
         function propagateOptionalTypeMarker(type, node, wasOptional) {
             return wasOptional ? ts.isOutermostOptionalChain(node) ? getOptionalType(type) : addOptionalTypeMarker(type) : type;
@@ -63232,6 +64358,15 @@
                 ts.isOptionalChain(expression) ? removeOptionalTypeMarker(exprType) :
                     exprType;
         }
+        function removeMissingType(type, isOptional) {
+            return exactOptionalPropertyTypes && isOptional ? removeType(type, missingType) : type;
+        }
+        function containsMissingType(type) {
+            return exactOptionalPropertyTypes && (type === missingType || type.flags & 1048576 /* Union */ && containsType(type.types, missingType));
+        }
+        function removeMissingOrUndefinedType(type) {
+            return exactOptionalPropertyTypes ? removeType(type, missingType) : getTypeWithFacts(type, 524288 /* NEUndefined */);
+        }
         /**
          * Is source potentially coercible to target type under `==`.
          * Assumes that `source` is a constituent of a union, hence
@@ -63305,7 +64440,7 @@
             }
             var resolved = type;
             var members = transformTypeOfMembers(type, getRegularTypeOfObjectLiteral);
-            var regularNew = createAnonymousType(resolved.symbol, members, resolved.callSignatures, resolved.constructSignatures, resolved.stringIndexInfo, resolved.numberIndexInfo);
+            var regularNew = createAnonymousType(resolved.symbol, members, resolved.callSignatures, resolved.constructSignatures, resolved.indexInfos);
             regularNew.flags = resolved.flags;
             regularNew.objectFlags |= resolved.objectFlags & ~16384 /* FreshLiteral */;
             type.regularType = regularNew;
@@ -63364,7 +64499,7 @@
             if (cached) {
                 return cached;
             }
-            var result = createSymbolWithType(prop, undefinedType);
+            var result = createSymbolWithType(prop, missingType);
             result.flags |= 16777216 /* Optional */;
             undefinedProperties.set(prop.escapedName, result);
             return result;
@@ -63383,9 +64518,7 @@
                     }
                 }
             }
-            var stringIndexInfo = getIndexInfoOfType(type, 0 /* String */);
-            var numberIndexInfo = getIndexInfoOfType(type, 1 /* Number */);
-            var result = createAnonymousType(type.symbol, members, ts.emptyArray, ts.emptyArray, stringIndexInfo && createIndexInfo(getWidenedType(stringIndexInfo.type), stringIndexInfo.isReadonly), numberIndexInfo && createIndexInfo(getWidenedType(numberIndexInfo.type), numberIndexInfo.isReadonly));
+            var result = createAnonymousType(type.symbol, members, ts.emptyArray, ts.emptyArray, ts.sameMap(getIndexInfosOfType(type), function (info) { return createIndexInfo(info.keyType, getWidenedType(info.type), info.isReadonly); }));
             result.objectFlags |= (ts.getObjectFlags(type) & (8192 /* JSLiteral */ | 524288 /* NonInferrableType */)); // Retain js literal flag through widening
             return result;
         }
@@ -63483,12 +64616,12 @@
             }
             var diagnostic;
             switch (declaration.kind) {
-                case 217 /* BinaryExpression */:
-                case 164 /* PropertyDeclaration */:
-                case 163 /* PropertySignature */:
+                case 219 /* BinaryExpression */:
+                case 165 /* PropertyDeclaration */:
+                case 164 /* PropertySignature */:
                     diagnostic = noImplicitAny ? ts.Diagnostics.Member_0_implicitly_has_an_1_type : ts.Diagnostics.Member_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage;
                     break;
-                case 161 /* Parameter */:
+                case 162 /* Parameter */:
                     var param = declaration;
                     if (ts.isIdentifier(param.name) &&
                         (ts.isCallSignatureDeclaration(param.parent) || ts.isMethodSignature(param.parent) || ts.isFunctionTypeNode(param.parent)) &&
@@ -63503,23 +64636,23 @@
                         noImplicitAny ? ts.Diagnostics.Rest_parameter_0_implicitly_has_an_any_type : ts.Diagnostics.Rest_parameter_0_implicitly_has_an_any_type_but_a_better_type_may_be_inferred_from_usage :
                         noImplicitAny ? ts.Diagnostics.Parameter_0_implicitly_has_an_1_type : ts.Diagnostics.Parameter_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage;
                     break;
-                case 199 /* BindingElement */:
+                case 201 /* BindingElement */:
                     diagnostic = ts.Diagnostics.Binding_element_0_implicitly_has_an_1_type;
                     if (!noImplicitAny) {
                         // Don't issue a suggestion for binding elements since the codefix doesn't yet support them.
                         return;
                     }
                     break;
-                case 309 /* JSDocFunctionType */:
+                case 312 /* JSDocFunctionType */:
                     error(declaration, ts.Diagnostics.Function_type_which_lacks_return_type_annotation_implicitly_has_an_0_return_type, typeAsString);
                     return;
-                case 252 /* FunctionDeclaration */:
-                case 166 /* MethodDeclaration */:
-                case 165 /* MethodSignature */:
-                case 168 /* GetAccessor */:
-                case 169 /* SetAccessor */:
-                case 209 /* FunctionExpression */:
-                case 210 /* ArrowFunction */:
+                case 254 /* FunctionDeclaration */:
+                case 167 /* MethodDeclaration */:
+                case 166 /* MethodSignature */:
+                case 170 /* GetAccessor */:
+                case 171 /* SetAccessor */:
+                case 211 /* FunctionExpression */:
+                case 212 /* ArrowFunction */:
                     if (noImplicitAny && !declaration.name) {
                         if (wideningKind === 3 /* GeneratorYield */) {
                             error(declaration, ts.Diagnostics.Generator_implicitly_has_yield_type_0_because_it_does_not_yield_any_values_Consider_supplying_a_return_type_annotation, typeAsString);
@@ -63533,7 +64666,7 @@
                         wideningKind === 3 /* GeneratorYield */ ? ts.Diagnostics._0_which_lacks_return_type_annotation_implicitly_has_an_1_yield_type :
                             ts.Diagnostics._0_which_lacks_return_type_annotation_implicitly_has_an_1_return_type;
                     break;
-                case 191 /* MappedType */:
+                case 193 /* MappedType */:
                     if (noImplicitAny) {
                         error(declaration, ts.Diagnostics.Mapped_object_type_implicitly_has_an_any_template_type);
                     }
@@ -63675,8 +64808,8 @@
         }
         function isNonGenericTopLevelType(type) {
             if (type.aliasSymbol && !type.aliasTypeArguments) {
-                var declaration = ts.getDeclarationOfKind(type.aliasSymbol, 255 /* TypeAliasDeclaration */);
-                return !!(declaration && ts.findAncestor(declaration.parent, function (n) { return n.kind === 298 /* SourceFile */ ? true : n.kind === 257 /* ModuleDeclaration */ ? false : "quit"; }));
+                var declaration = ts.getDeclarationOfKind(type.aliasSymbol, 257 /* TypeAliasDeclaration */);
+                return !!(declaration && ts.findAncestor(declaration.parent, function (n) { return n.kind === 300 /* SourceFile */ ? true : n.kind === 259 /* ModuleDeclaration */ ? false : "quit"; }));
             }
             return false;
         }
@@ -63701,8 +64834,8 @@
                 }
                 members.set(name, literalProp);
             });
-            var indexInfo = type.flags & 4 /* String */ ? createIndexInfo(emptyObjectType, /*isReadonly*/ false) : undefined;
-            return createAnonymousType(undefined, members, ts.emptyArray, ts.emptyArray, indexInfo, undefined);
+            var indexInfos = type.flags & 4 /* String */ ? [createIndexInfo(stringType, emptyObjectType, /*isReadonly*/ false)] : ts.emptyArray;
+            return createAnonymousType(undefined, members, ts.emptyArray, ts.emptyArray, indexInfos);
         }
         /**
          * Infer a suitable input type for a homomorphic mapped type { [P in keyof T]: X }. We construct
@@ -63736,7 +64869,7 @@
         function createReverseMappedType(source, target, constraint) {
             // We consider a source type reverse mappable if it has a string index signature or if
             // it has one or more properties and is of a partially inferable type.
-            if (!(getIndexInfoOfType(source, 0 /* String */) || getPropertiesOfType(source).length !== 0 && isPartiallyInferableType(source))) {
+            if (!(getIndexInfoOfType(source, stringType) || getPropertiesOfType(source).length !== 0 && isPartiallyInferableType(source))) {
                 return undefined;
             }
             // For arrays and tuples we infer new arrays and tuples where the reverse mapping has been
@@ -63950,8 +65083,8 @@
             }
             function addMatch(s, p) {
                 var matchType = s === seg ?
-                    getLiteralType(getSourceText(s).slice(pos, p)) :
-                    getTemplateLiteralType(__spreadArray(__spreadArray([sourceTexts[seg].slice(pos)], sourceTexts.slice(seg + 1, s)), [getSourceText(s).slice(0, p)]), sourceTypes.slice(seg, s));
+                    getStringLiteralType(getSourceText(s).slice(pos, p)) :
+                    getTemplateLiteralType(__spreadArray(__spreadArray([sourceTexts[seg].slice(pos)], sourceTexts.slice(seg + 1, s), true), [getSourceText(s).slice(0, p)], false), sourceTypes.slice(seg, s));
                 matches.push(matchType);
                 seg = s;
                 pos = p;
@@ -64270,8 +65403,8 @@
             }
             function getSingleTypeVariableFromIntersectionTypes(types) {
                 var typeVariable;
-                for (var _i = 0, types_16 = types; _i < types_16.length; _i++) {
-                    var type = types_16[_i];
+                for (var _i = 0, types_15 = types; _i < types_15.length; _i++) {
+                    var type = types_15[_i];
                     var t = type.flags & 2097152 /* Intersection */ && ts.find(type.types, function (t) { return !!getInferenceInfoForType(t); });
                     if (!t || typeVariable && t !== typeVariable) {
                         return undefined;
@@ -64401,10 +65534,8 @@
                     // If no inferences can be made to K's constraint, infer from a union of the property types
                     // in the source to the template type X.
                     var propTypes = ts.map(getPropertiesOfType(source), getTypeOfSymbol);
-                    var stringIndexType = getIndexTypeOfType(source, 0 /* String */);
-                    var numberIndexInfo = getNonEnumNumberIndexInfo(source);
-                    var numberIndexType = numberIndexInfo && numberIndexInfo.type;
-                    inferFromTypes(getUnionType(ts.append(ts.append(propTypes, stringIndexType), numberIndexType)), getTemplateTypeFromMappedType(target));
+                    var indexTypes = ts.map(getIndexInfosOfType(source), function (info) { return info !== enumNumberIndexInfo ? info.type : neverType; });
+                    inferFromTypes(getUnionType(ts.concatenate(propTypes, indexTypes)), getTemplateTypeFromMappedType(target));
                     return true;
                 }
                 return false;
@@ -64551,7 +65682,7 @@
                     var saveBivariant = bivariant;
                     var kind = target.declaration ? target.declaration.kind : 0 /* Unknown */;
                     // Once we descend into a bivariant signature we remain bivariant for all nested inferences
-                    bivariant = bivariant || kind === 166 /* MethodDeclaration */ || kind === 165 /* MethodSignature */ || kind === 167 /* Constructor */;
+                    bivariant = bivariant || kind === 167 /* MethodDeclaration */ || kind === 166 /* MethodSignature */ || kind === 169 /* Constructor */;
                     applyToParameterTypes(source, target, inferFromContravariantTypes);
                     bivariant = saveBivariant;
                 }
@@ -64560,27 +65691,41 @@
             function inferFromIndexTypes(source, target) {
                 // Inferences across mapped type index signatures are pretty much the same a inferences to homomorphic variables
                 var priority = (ts.getObjectFlags(source) & ts.getObjectFlags(target) & 32 /* Mapped */) ? 8 /* HomomorphicMappedType */ : 0;
-                var targetStringIndexType = getIndexTypeOfType(target, 0 /* String */);
-                if (targetStringIndexType) {
-                    var sourceIndexType = getIndexTypeOfType(source, 0 /* String */) ||
-                        getImplicitIndexTypeOfType(source, 0 /* String */);
-                    if (sourceIndexType) {
-                        inferWithPriority(sourceIndexType, targetStringIndexType, priority);
+                var indexInfos = getIndexInfosOfType(target);
+                if (isObjectTypeWithInferableIndex(source)) {
+                    for (var _i = 0, indexInfos_4 = indexInfos; _i < indexInfos_4.length; _i++) {
+                        var targetInfo = indexInfos_4[_i];
+                        var propTypes = [];
+                        for (var _a = 0, _b = getPropertiesOfType(source); _a < _b.length; _a++) {
+                            var prop = _b[_a];
+                            if (isApplicableIndexType(getLiteralTypeFromProperty(prop, 8576 /* StringOrNumberLiteralOrUnique */), targetInfo.keyType)) {
+                                var propType = getTypeOfSymbol(prop);
+                                propTypes.push(prop.flags & 16777216 /* Optional */ ? removeMissingOrUndefinedType(propType) : propType);
+                            }
+                        }
+                        for (var _c = 0, _d = getIndexInfosOfType(source); _c < _d.length; _c++) {
+                            var info = _d[_c];
+                            if (isApplicableIndexType(info.keyType, targetInfo.keyType)) {
+                                propTypes.push(info.type);
+                            }
+                        }
+                        if (propTypes.length) {
+                            inferWithPriority(getUnionType(propTypes), targetInfo.type, priority);
+                        }
                     }
                 }
-                var targetNumberIndexType = getIndexTypeOfType(target, 1 /* Number */);
-                if (targetNumberIndexType) {
-                    var sourceIndexType = getIndexTypeOfType(source, 1 /* Number */) ||
-                        getIndexTypeOfType(source, 0 /* String */) ||
-                        getImplicitIndexTypeOfType(source, 1 /* Number */);
-                    if (sourceIndexType) {
-                        inferWithPriority(sourceIndexType, targetNumberIndexType, priority);
+                for (var _e = 0, indexInfos_5 = indexInfos; _e < indexInfos_5.length; _e++) {
+                    var targetInfo = indexInfos_5[_e];
+                    var sourceInfo = getApplicableIndexInfo(source, targetInfo.keyType);
+                    if (sourceInfo) {
+                        inferWithPriority(sourceInfo.type, targetInfo.type, priority);
                     }
                 }
             }
         }
         function isTypeOrBaseIdenticalTo(s, t) {
-            return isTypeIdenticalTo(s, t) || !!(t.flags & 4 /* String */ && s.flags & 128 /* StringLiteral */ || t.flags & 8 /* Number */ && s.flags & 256 /* NumberLiteral */);
+            return exactOptionalPropertyTypes && t === missingType ? s === t :
+                (isTypeIdenticalTo(s, t) || !!(t.flags & 4 /* String */ && s.flags & 128 /* StringLiteral */ || t.flags & 8 /* Number */ && s.flags & 256 /* NumberLiteral */));
         }
         function isTypeCloselyMatchedBy(s, t) {
             return !!(s.flags & 524288 /* Object */ && t.flags & 524288 /* Object */ && s.symbol && s.symbol === t.symbol ||
@@ -64733,7 +65878,7 @@
                 case "BigUint64Array":
                     return ts.Diagnostics.Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_1_or_later;
                 default:
-                    if (node.parent.kind === 290 /* ShorthandPropertyAssignment */) {
+                    if (node.parent.kind === 292 /* ShorthandPropertyAssignment */) {
                         return ts.Diagnostics.No_value_exists_in_scope_for_the_shorthand_property_0_Either_declare_one_or_provide_an_initializer;
                     }
                     else {
@@ -64746,7 +65891,8 @@
             if (!links.resolvedSymbol) {
                 links.resolvedSymbol = !ts.nodeIsMissing(node) &&
                     resolveName(node, node.escapedText, 111551 /* Value */ | 1048576 /* ExportValue */, getCannotFindNameDiagnosticForName(node), node, !ts.isWriteOnlyAccess(node), 
-                    /*excludeGlobals*/ false, ts.Diagnostics.Cannot_find_name_0_Did_you_mean_1) || unknownSymbol;
+                    /*excludeGlobals*/ false, 
+                    /*issueSuggestions*/ true) || unknownSymbol;
             }
             return links.resolvedSymbol;
         }
@@ -64754,7 +65900,7 @@
             // TypeScript 1.0 spec (April 2014): 3.6.3
             // A type query consists of the keyword typeof followed by an expression.
             // The expression is restricted to a single identifier or a sequence of identifiers separated by periods
-            return !!ts.findAncestor(node, function (n) { return n.kind === 177 /* TypeQuery */ ? true : n.kind === 78 /* Identifier */ || n.kind === 158 /* QualifiedName */ ? false : "quit"; });
+            return !!ts.findAncestor(node, function (n) { return n.kind === 179 /* TypeQuery */ ? true : n.kind === 79 /* Identifier */ || n.kind === 159 /* QualifiedName */ ? false : "quit"; });
         }
         // Return the flow cache key for a "dotted name" (i.e. a sequence of identifiers
         // separated by dots). The key consists of the id of the symbol referenced by the
@@ -64762,16 +65908,19 @@
         // The result is undefined if the reference isn't a dotted name.
         function getFlowCacheKey(node, declaredType, initialType, flowContainer) {
             switch (node.kind) {
-                case 78 /* Identifier */:
+                case 79 /* Identifier */:
                     var symbol = getResolvedSymbol(node);
                     return symbol !== unknownSymbol ? (flowContainer ? getNodeId(flowContainer) : "-1") + "|" + getTypeId(declaredType) + "|" + getTypeId(initialType) + "|" + getSymbolId(symbol) : undefined;
-                case 107 /* ThisKeyword */:
+                case 108 /* ThisKeyword */:
                     return "0|" + (flowContainer ? getNodeId(flowContainer) : "-1") + "|" + getTypeId(declaredType) + "|" + getTypeId(initialType);
-                case 226 /* NonNullExpression */:
-                case 208 /* ParenthesizedExpression */:
+                case 228 /* NonNullExpression */:
+                case 210 /* ParenthesizedExpression */:
                     return getFlowCacheKey(node.expression, declaredType, initialType, flowContainer);
-                case 202 /* PropertyAccessExpression */:
-                case 203 /* ElementAccessExpression */:
+                case 159 /* QualifiedName */:
+                    var left = getFlowCacheKey(node.left, declaredType, initialType, flowContainer);
+                    return left && left + "." + node.right.escapedText;
+                case 204 /* PropertyAccessExpression */:
+                case 205 /* ElementAccessExpression */:
                     var propName = getAccessedPropertyName(node);
                     if (propName !== undefined) {
                         var key = getFlowCacheKey(node.expression, declaredType, initialType, flowContainer);
@@ -64782,40 +65931,42 @@
         }
         function isMatchingReference(source, target) {
             switch (target.kind) {
-                case 208 /* ParenthesizedExpression */:
-                case 226 /* NonNullExpression */:
+                case 210 /* ParenthesizedExpression */:
+                case 228 /* NonNullExpression */:
                     return isMatchingReference(source, target.expression);
-                case 217 /* BinaryExpression */:
+                case 219 /* BinaryExpression */:
                     return (ts.isAssignmentExpression(target) && isMatchingReference(source, target.left)) ||
                         (ts.isBinaryExpression(target) && target.operatorToken.kind === 27 /* CommaToken */ && isMatchingReference(source, target.right));
             }
             switch (source.kind) {
-                case 227 /* MetaProperty */:
-                    return target.kind === 227 /* MetaProperty */
+                case 229 /* MetaProperty */:
+                    return target.kind === 229 /* MetaProperty */
                         && source.keywordToken === target.keywordToken
                         && source.name.escapedText === target.name.escapedText;
-                case 78 /* Identifier */:
-                case 79 /* PrivateIdentifier */:
-                    return target.kind === 78 /* Identifier */ && getResolvedSymbol(source) === getResolvedSymbol(target) ||
-                        (target.kind === 250 /* VariableDeclaration */ || target.kind === 199 /* BindingElement */) &&
-                            getExportSymbolOfValueSymbolIfExported(getResolvedSymbol(source)) === getSymbolOfNode(target);
-                case 107 /* ThisKeyword */:
-                    return target.kind === 107 /* ThisKeyword */;
-                case 105 /* SuperKeyword */:
-                    return target.kind === 105 /* SuperKeyword */;
-                case 226 /* NonNullExpression */:
-                case 208 /* ParenthesizedExpression */:
+                case 79 /* Identifier */:
+                case 80 /* PrivateIdentifier */:
+                    return ts.isThisInTypeQuery(source) ?
+                        target.kind === 108 /* ThisKeyword */ :
+                        target.kind === 79 /* Identifier */ && getResolvedSymbol(source) === getResolvedSymbol(target) ||
+                            (target.kind === 252 /* VariableDeclaration */ || target.kind === 201 /* BindingElement */) &&
+                                getExportSymbolOfValueSymbolIfExported(getResolvedSymbol(source)) === getSymbolOfNode(target);
+                case 108 /* ThisKeyword */:
+                    return target.kind === 108 /* ThisKeyword */;
+                case 106 /* SuperKeyword */:
+                    return target.kind === 106 /* SuperKeyword */;
+                case 228 /* NonNullExpression */:
+                case 210 /* ParenthesizedExpression */:
                     return isMatchingReference(source.expression, target);
-                case 202 /* PropertyAccessExpression */:
-                case 203 /* ElementAccessExpression */:
+                case 204 /* PropertyAccessExpression */:
+                case 205 /* ElementAccessExpression */:
                     return ts.isAccessExpression(target) &&
                         getAccessedPropertyName(source) === getAccessedPropertyName(target) &&
                         isMatchingReference(source.expression, target.expression);
-                case 158 /* QualifiedName */:
+                case 159 /* QualifiedName */:
                     return ts.isAccessExpression(target) &&
                         source.right.escapedText === getAccessedPropertyName(target) &&
                         isMatchingReference(source.left, target.expression);
-                case 217 /* BinaryExpression */:
+                case 219 /* BinaryExpression */:
                     return (ts.isBinaryExpression(source) && source.operatorToken.kind === 27 /* CommaToken */ && isMatchingReference(source.right, target));
             }
             return false;
@@ -64823,13 +65974,38 @@
         // Given a source x, check if target matches x or is an && operation with an operand that matches x.
         function containsTruthyCheck(source, target) {
             return isMatchingReference(source, target) ||
-                (target.kind === 217 /* BinaryExpression */ && target.operatorToken.kind === 55 /* AmpersandAmpersandToken */ &&
+                (target.kind === 219 /* BinaryExpression */ && target.operatorToken.kind === 55 /* AmpersandAmpersandToken */ &&
                     (containsTruthyCheck(source, target.left) || containsTruthyCheck(source, target.right)));
         }
+        function getPropertyAccess(expr) {
+            if (ts.isAccessExpression(expr)) {
+                return expr;
+            }
+            if (ts.isIdentifier(expr)) {
+                var symbol = getResolvedSymbol(expr);
+                if (isConstVariable(symbol)) {
+                    var declaration = symbol.valueDeclaration;
+                    // Given 'const x = obj.kind', allow 'x' as an alias for 'obj.kind'
+                    if (ts.isVariableDeclaration(declaration) && !declaration.type && declaration.initializer && ts.isAccessExpression(declaration.initializer)) {
+                        return declaration.initializer;
+                    }
+                    // Given 'const { kind: x } = obj', allow 'x' as an alias for 'obj.kind'
+                    if (ts.isBindingElement(declaration) && !declaration.initializer) {
+                        var parent = declaration.parent.parent;
+                        if (ts.isVariableDeclaration(parent) && !parent.type && parent.initializer && (ts.isIdentifier(parent.initializer) || ts.isAccessExpression(parent.initializer))) {
+                            return declaration;
+                        }
+                    }
+                }
+            }
+            return undefined;
+        }
         function getAccessedPropertyName(access) {
-            return access.kind === 202 /* PropertyAccessExpression */ ? access.name.escapedText :
-                ts.isStringOrNumericLiteralLike(access.argumentExpression) ? ts.escapeLeadingUnderscores(access.argumentExpression.text) :
-                    undefined;
+            var propertyName;
+            return access.kind === 204 /* PropertyAccessExpression */ ? access.name.escapedText :
+                access.kind === 205 /* ElementAccessExpression */ && ts.isStringOrNumericLiteralLike(access.argumentExpression) ? ts.escapeLeadingUnderscores(access.argumentExpression.text) :
+                    access.kind === 201 /* BindingElement */ && (propertyName = getDestructuringPropertyName(access)) ? ts.escapeLeadingUnderscores(propertyName) :
+                        undefined;
         }
         function containsMatchingReference(source, target) {
             while (ts.isAccessExpression(source)) {
@@ -64856,7 +66032,7 @@
                     if (prop.isDiscriminantProperty === undefined) {
                         prop.isDiscriminantProperty =
                             (prop.checkFlags & 192 /* Discriminant */) === 192 /* Discriminant */ &&
-                                !maybeTypeOfKind(getTypeOfSymbol(prop), 465829888 /* Instantiable */);
+                                !maybeTypeOfKind(getTypeOfSymbol(prop), 465829888 /* Instantiable */ & ~134217728 /* TemplateLiteral */);
                     }
                     return !!prop.isDiscriminantProperty;
                 }
@@ -64884,7 +66060,7 @@
         function mapTypesByKeyProperty(types, name) {
             var map = new ts.Map();
             var count = 0;
-            var _loop_20 = function (type) {
+            var _loop_22 = function (type) {
                 if (type.flags & (524288 /* Object */ | 2097152 /* Intersection */ | 58982400 /* InstantiableNonPrimitive */)) {
                     var discriminant = getTypeOfPropertyOfType(type, name);
                     if (discriminant) {
@@ -64908,9 +66084,9 @@
                     }
                 }
             };
-            for (var _i = 0, types_17 = types; _i < types_17.length; _i++) {
-                var type = types_17[_i];
-                var state_8 = _loop_20(type);
+            for (var _i = 0, types_16 = types; _i < types_16.length; _i++) {
+                var type = types_16[_i];
+                var state_8 = _loop_22(type);
                 if (typeof state_8 === "object")
                     return state_8.value;
             }
@@ -64952,7 +66128,7 @@
         }
         function getMatchingUnionConstituentForObjectLiteral(unionType, node) {
             var keyPropertyName = getKeyPropertyName(unionType);
-            var propNode = keyPropertyName && ts.find(node.properties, function (p) { return p.symbol && p.kind === 289 /* PropertyAssignment */ &&
+            var propNode = keyPropertyName && ts.find(node.properties, function (p) { return p.symbol && p.kind === 291 /* PropertyAssignment */ &&
                 p.symbol.escapedName === keyPropertyName && isPossiblyDiscriminantValue(p.initializer); });
             var propType = propNode && getTypeOfExpression(propNode.initializer);
             return propType && getConstituentTypeForKeyType(unionType, propType);
@@ -64969,7 +66145,7 @@
                     }
                 }
             }
-            if (expression.expression.kind === 202 /* PropertyAccessExpression */ &&
+            if (expression.expression.kind === 204 /* PropertyAccessExpression */ &&
                 isOrContainsMatchingReference(reference, expression.expression.expression)) {
                 return true;
             }
@@ -65107,14 +66283,12 @@
                 type;
         }
         function getTypeOfDestructuredProperty(type, name) {
+            var _a;
             var nameType = getLiteralTypeFromPropertyName(name);
             if (!isTypeUsableAsPropertyName(nameType))
                 return errorType;
             var text = getPropertyNameFromType(nameType);
-            return getTypeOfPropertyOfType(type, text) ||
-                isNumericLiteralName(text) && includeUndefinedInIndexSignature(getIndexTypeOfType(type, 1 /* Number */)) ||
-                includeUndefinedInIndexSignature(getIndexTypeOfType(type, 0 /* String */)) ||
-                errorType;
+            return getTypeOfPropertyOfType(type, text) || includeUndefinedInIndexSignature((_a = getApplicableIndexInfoForName(type, text)) === null || _a === void 0 ? void 0 : _a.type) || errorType;
         }
         function getTypeOfDestructuredArrayElement(type, index) {
             return everyType(type, isTupleLikeType) && getTupleElementType(type, index) ||
@@ -65132,15 +66306,15 @@
             return createArrayType(checkIteratedTypeOrElementType(65 /* Destructuring */, type, undefinedType, /*errorNode*/ undefined) || errorType);
         }
         function getAssignedTypeOfBinaryExpression(node) {
-            var isDestructuringDefaultAssignment = node.parent.kind === 200 /* ArrayLiteralExpression */ && isDestructuringAssignmentTarget(node.parent) ||
-                node.parent.kind === 289 /* PropertyAssignment */ && isDestructuringAssignmentTarget(node.parent.parent);
+            var isDestructuringDefaultAssignment = node.parent.kind === 202 /* ArrayLiteralExpression */ && isDestructuringAssignmentTarget(node.parent) ||
+                node.parent.kind === 291 /* PropertyAssignment */ && isDestructuringAssignmentTarget(node.parent.parent);
             return isDestructuringDefaultAssignment ?
                 getTypeWithDefault(getAssignedType(node), node.right) :
                 getTypeOfExpression(node.right);
         }
         function isDestructuringAssignmentTarget(parent) {
-            return parent.parent.kind === 217 /* BinaryExpression */ && parent.parent.left === parent ||
-                parent.parent.kind === 240 /* ForOfStatement */ && parent.parent.initializer === parent;
+            return parent.parent.kind === 219 /* BinaryExpression */ && parent.parent.left === parent ||
+                parent.parent.kind === 242 /* ForOfStatement */ && parent.parent.initializer === parent;
         }
         function getAssignedTypeOfArrayLiteralElement(node, element) {
             return getTypeOfDestructuredArrayElement(getAssignedType(node), node.elements.indexOf(element));
@@ -65157,21 +66331,21 @@
         function getAssignedType(node) {
             var parent = node.parent;
             switch (parent.kind) {
-                case 239 /* ForInStatement */:
+                case 241 /* ForInStatement */:
                     return stringType;
-                case 240 /* ForOfStatement */:
+                case 242 /* ForOfStatement */:
                     return checkRightHandSideOfForOf(parent) || errorType;
-                case 217 /* BinaryExpression */:
+                case 219 /* BinaryExpression */:
                     return getAssignedTypeOfBinaryExpression(parent);
-                case 211 /* DeleteExpression */:
+                case 213 /* DeleteExpression */:
                     return undefinedType;
-                case 200 /* ArrayLiteralExpression */:
+                case 202 /* ArrayLiteralExpression */:
                     return getAssignedTypeOfArrayLiteralElement(parent, node);
-                case 221 /* SpreadElement */:
+                case 223 /* SpreadElement */:
                     return getAssignedTypeOfSpreadExpression(parent);
-                case 289 /* PropertyAssignment */:
+                case 291 /* PropertyAssignment */:
                     return getAssignedTypeOfPropertyAssignment(parent);
-                case 290 /* ShorthandPropertyAssignment */:
+                case 292 /* ShorthandPropertyAssignment */:
                     return getAssignedTypeOfShorthandPropertyAssignment(parent);
             }
             return errorType;
@@ -65179,7 +66353,7 @@
         function getInitialTypeOfBindingElement(node) {
             var pattern = node.parent;
             var parentType = getInitialType(pattern.parent);
-            var type = pattern.kind === 197 /* ObjectBindingPattern */ ?
+            var type = pattern.kind === 199 /* ObjectBindingPattern */ ?
                 getTypeOfDestructuredProperty(parentType, node.propertyName || node.name) :
                 !node.dotDotDotToken ?
                     getTypeOfDestructuredArrayElement(parentType, pattern.elements.indexOf(node)) :
@@ -65197,35 +66371,35 @@
             if (node.initializer) {
                 return getTypeOfInitializer(node.initializer);
             }
-            if (node.parent.parent.kind === 239 /* ForInStatement */) {
+            if (node.parent.parent.kind === 241 /* ForInStatement */) {
                 return stringType;
             }
-            if (node.parent.parent.kind === 240 /* ForOfStatement */) {
+            if (node.parent.parent.kind === 242 /* ForOfStatement */) {
                 return checkRightHandSideOfForOf(node.parent.parent) || errorType;
             }
             return errorType;
         }
         function getInitialType(node) {
-            return node.kind === 250 /* VariableDeclaration */ ?
+            return node.kind === 252 /* VariableDeclaration */ ?
                 getInitialTypeOfVariableDeclaration(node) :
                 getInitialTypeOfBindingElement(node);
         }
         function isEmptyArrayAssignment(node) {
-            return node.kind === 250 /* VariableDeclaration */ && node.initializer &&
+            return node.kind === 252 /* VariableDeclaration */ && node.initializer &&
                 isEmptyArrayLiteral(node.initializer) ||
-                node.kind !== 199 /* BindingElement */ && node.parent.kind === 217 /* BinaryExpression */ &&
+                node.kind !== 201 /* BindingElement */ && node.parent.kind === 219 /* BinaryExpression */ &&
                     isEmptyArrayLiteral(node.parent.right);
         }
         function getReferenceCandidate(node) {
             switch (node.kind) {
-                case 208 /* ParenthesizedExpression */:
+                case 210 /* ParenthesizedExpression */:
                     return getReferenceCandidate(node.expression);
-                case 217 /* BinaryExpression */:
+                case 219 /* BinaryExpression */:
                     switch (node.operatorToken.kind) {
-                        case 62 /* EqualsToken */:
-                        case 74 /* BarBarEqualsToken */:
-                        case 75 /* AmpersandAmpersandEqualsToken */:
-                        case 76 /* QuestionQuestionEqualsToken */:
+                        case 63 /* EqualsToken */:
+                        case 75 /* BarBarEqualsToken */:
+                        case 76 /* AmpersandAmpersandEqualsToken */:
+                        case 77 /* QuestionQuestionEqualsToken */:
                             return getReferenceCandidate(node.left);
                         case 27 /* CommaToken */:
                             return getReferenceCandidate(node.right);
@@ -65235,13 +66409,13 @@
         }
         function getReferenceRoot(node) {
             var parent = node.parent;
-            return parent.kind === 208 /* ParenthesizedExpression */ ||
-                parent.kind === 217 /* BinaryExpression */ && parent.operatorToken.kind === 62 /* EqualsToken */ && parent.left === node ||
-                parent.kind === 217 /* BinaryExpression */ && parent.operatorToken.kind === 27 /* CommaToken */ && parent.right === node ?
+            return parent.kind === 210 /* ParenthesizedExpression */ ||
+                parent.kind === 219 /* BinaryExpression */ && parent.operatorToken.kind === 63 /* EqualsToken */ && parent.left === node ||
+                parent.kind === 219 /* BinaryExpression */ && parent.operatorToken.kind === 27 /* CommaToken */ && parent.right === node ?
                 getReferenceRoot(parent) : node;
         }
         function getTypeOfSwitchClause(clause) {
-            if (clause.kind === 285 /* CaseClause */) {
+            if (clause.kind === 287 /* CaseClause */) {
                 return getRegularTypeOfLiteralType(getTypeOfExpression(clause.expression));
             }
             return neverType;
@@ -65261,7 +66435,7 @@
             var witnesses = [];
             for (var _i = 0, _a = switchStatement.caseBlock.clauses; _i < _a.length; _i++) {
                 var clause = _a[_i];
-                if (clause.kind === 285 /* CaseClause */) {
+                if (clause.kind === 287 /* CaseClause */) {
                     if (ts.isStringLiteralLike(clause.expression)) {
                         witnesses.push(clause.expression.text);
                         continue;
@@ -65334,6 +66508,9 @@
             }
             return type.flags & 131072 /* Never */ || f(type) ? type : neverType;
         }
+        function removeType(type, targetType) {
+            return filterType(type, function (t) { return t !== targetType; });
+        }
         function countTypes(type) {
             return type.flags & 1048576 /* Union */ ? type.types.length : 1;
         }
@@ -65348,8 +66525,8 @@
             var types = origin && origin.flags & 1048576 /* Union */ ? origin.types : type.types;
             var mappedTypes;
             var changed = false;
-            for (var _i = 0, types_18 = types; _i < types_18.length; _i++) {
-                var t = types_18[_i];
+            for (var _i = 0, types_17 = types; _i < types_17.length; _i++) {
+                var t = types_17[_i];
                 var mapped = t.flags & 1048576 /* Union */ ? mapType(t, mapper, noReductions) : mapper(t);
                 changed || (changed = t !== mapped);
                 if (mapped) {
@@ -65436,8 +66613,8 @@
         }
         function isEvolvingArrayTypeList(types) {
             var hasEvolvingArrayType = false;
-            for (var _i = 0, types_19 = types; _i < types_19.length; _i++) {
-                var t = types_19[_i];
+            for (var _i = 0, types_18 = types; _i < types_18.length; _i++) {
+                var t = types_18[_i];
                 if (!(t.flags & 131072 /* Never */)) {
                     if (!(ts.getObjectFlags(t) & 256 /* EvolvingArray */)) {
                         return false;
@@ -65453,21 +66630,21 @@
             var root = getReferenceRoot(node);
             var parent = root.parent;
             var isLengthPushOrUnshift = ts.isPropertyAccessExpression(parent) && (parent.name.escapedText === "length" ||
-                parent.parent.kind === 204 /* CallExpression */
+                parent.parent.kind === 206 /* CallExpression */
                     && ts.isIdentifier(parent.name)
                     && ts.isPushOrUnshiftIdentifier(parent.name));
-            var isElementAssignment = parent.kind === 203 /* ElementAccessExpression */ &&
+            var isElementAssignment = parent.kind === 205 /* ElementAccessExpression */ &&
                 parent.expression === root &&
-                parent.parent.kind === 217 /* BinaryExpression */ &&
-                parent.parent.operatorToken.kind === 62 /* EqualsToken */ &&
+                parent.parent.kind === 219 /* BinaryExpression */ &&
+                parent.parent.operatorToken.kind === 63 /* EqualsToken */ &&
                 parent.parent.left === parent &&
                 !ts.isAssignmentTarget(parent.parent) &&
                 isTypeAssignableToKind(getTypeOfExpression(parent.argumentExpression), 296 /* NumberLike */);
             return isLengthPushOrUnshift || isElementAssignment;
         }
         function isDeclarationWithExplicitTypeAnnotation(declaration) {
-            return (declaration.kind === 250 /* VariableDeclaration */ || declaration.kind === 161 /* Parameter */ ||
-                declaration.kind === 164 /* PropertyDeclaration */ || declaration.kind === 163 /* PropertySignature */) &&
+            return (declaration.kind === 252 /* VariableDeclaration */ || declaration.kind === 162 /* Parameter */ ||
+                declaration.kind === 165 /* PropertyDeclaration */ || declaration.kind === 164 /* PropertySignature */) &&
                 !!ts.getEffectiveTypeAnnotationNode(declaration);
         }
         function getExplicitTypeOfSymbol(symbol, diagnostic) {
@@ -65486,7 +66663,7 @@
                     if (isDeclarationWithExplicitTypeAnnotation(declaration)) {
                         return getTypeOfSymbol(symbol);
                     }
-                    if (ts.isVariableDeclaration(declaration) && declaration.parent.parent.kind === 240 /* ForOfStatement */) {
+                    if (ts.isVariableDeclaration(declaration) && declaration.parent.parent.kind === 242 /* ForOfStatement */) {
                         var statement = declaration.parent.parent;
                         var expressionType = getTypeOfDottedName(statement.expression, /*diagnostic*/ undefined);
                         if (expressionType) {
@@ -65507,14 +66684,14 @@
         function getTypeOfDottedName(node, diagnostic) {
             if (!(node.flags & 16777216 /* InWithStatement */)) {
                 switch (node.kind) {
-                    case 78 /* Identifier */:
+                    case 79 /* Identifier */:
                         var symbol = getExportSymbolOfValueSymbolIfExported(getResolvedSymbol(node));
                         return getExplicitTypeOfSymbol(symbol.flags & 2097152 /* Alias */ ? resolveAlias(symbol) : symbol, diagnostic);
-                    case 107 /* ThisKeyword */:
+                    case 108 /* ThisKeyword */:
                         return getExplicitThisType(node);
-                    case 105 /* SuperKeyword */:
+                    case 106 /* SuperKeyword */:
                         return checkSuperExpression(node);
-                    case 202 /* PropertyAccessExpression */: {
+                    case 204 /* PropertyAccessExpression */: {
                         var type = getTypeOfDottedName(node.expression, diagnostic);
                         if (type) {
                             var name = node.name;
@@ -65532,7 +66709,7 @@
                         }
                         return undefined;
                     }
-                    case 208 /* ParenthesizedExpression */:
+                    case 210 /* ParenthesizedExpression */:
                         return getTypeOfDottedName(node.expression, diagnostic);
                 }
             }
@@ -65546,10 +66723,10 @@
                 // circularities in control flow analysis, we use getTypeOfDottedName when resolving the call
                 // target expression of an assertion.
                 var funcType = void 0;
-                if (node.parent.kind === 234 /* ExpressionStatement */) {
+                if (node.parent.kind === 236 /* ExpressionStatement */) {
                     funcType = getTypeOfDottedName(node.expression, /*diagnostic*/ undefined);
                 }
-                else if (node.expression.kind !== 105 /* SuperKeyword */) {
+                else if (node.expression.kind !== 106 /* SuperKeyword */) {
                     if (ts.isOptionalChain(node)) {
                         funcType = checkNonNullType(getOptionalExpressionType(checkExpression(node.expression), node.expression), node.expression);
                     }
@@ -65590,7 +66767,7 @@
         }
         function isFalseExpression(expr) {
             var node = ts.skipParentheses(expr);
-            return node.kind === 94 /* FalseKeyword */ || node.kind === 217 /* BinaryExpression */ && (node.operatorToken.kind === 55 /* AmpersandAmpersandToken */ && (isFalseExpression(node.left) || isFalseExpression(node.right)) ||
+            return node.kind === 95 /* FalseKeyword */ || node.kind === 219 /* BinaryExpression */ && (node.operatorToken.kind === 55 /* AmpersandAmpersandToken */ && (isFalseExpression(node.left) || isFalseExpression(node.right)) ||
                 node.operatorToken.kind === 56 /* BarBarToken */ && isFalseExpression(node.left) && isFalseExpression(node.right));
         }
         function isReachableFlowNodeWorker(flow, noCacheCheck) {
@@ -65678,7 +66855,7 @@
                     flow = flow.antecedent;
                 }
                 else if (flags & 512 /* Call */) {
-                    if (flow.node.expression.kind === 105 /* SuperKeyword */) {
+                    if (flow.node.expression.kind === 106 /* SuperKeyword */) {
                         return true;
                     }
                     flow = flow.antecedent;
@@ -65705,15 +66882,28 @@
                 }
             }
         }
-        function getFlowTypeOfReference(reference, declaredType, initialType, flowContainer, couldBeUninitialized) {
+        function isConstantReference(node) {
+            switch (node.kind) {
+                case 79 /* Identifier */:
+                    var symbol = getResolvedSymbol(node);
+                    return isConstVariable(symbol) || !!symbol.valueDeclaration && ts.getRootDeclaration(symbol.valueDeclaration).kind === 162 /* Parameter */ && !isParameterAssigned(symbol);
+                case 204 /* PropertyAccessExpression */:
+                case 205 /* ElementAccessExpression */:
+                    // The resolvedSymbol property is initialized by checkPropertyAccess or checkElementAccess before we get here.
+                    return isConstantReference(node.expression) && isReadonlySymbol(getNodeLinks(node).resolvedSymbol || unknownSymbol);
+            }
+            return false;
+        }
+        function getFlowTypeOfReference(reference, declaredType, initialType, flowContainer) {
             if (initialType === void 0) { initialType = declaredType; }
             var key;
             var isKeySet = false;
             var flowDepth = 0;
+            var inlineLevel = 0;
             if (flowAnalysisDisabled) {
                 return errorType;
             }
-            if (!reference.flowNode || !couldBeUninitialized && !(declaredType.flags & 536624127 /* Narrowable */)) {
+            if (!reference.flowNode) {
                 return declaredType;
             }
             flowInvocationCount++;
@@ -65725,7 +66915,7 @@
             // on empty arrays are possible without implicit any errors and new element types can be inferred without
             // type mismatch errors.
             var resultType = ts.getObjectFlags(evolvedType) & 256 /* EvolvingArray */ && isEvolvingArrayOperationTarget(reference) ? autoArrayType : finalizeEvolvingArrayType(evolvedType);
-            if (resultType === unreachableNeverType || reference.parent && reference.parent.kind === 226 /* NonNullExpression */ && !(resultType.flags & 131072 /* Never */) && getTypeWithFacts(resultType, 2097152 /* NEUndefinedOrNull */).flags & 131072 /* Never */) {
+            if (resultType === unreachableNeverType || reference.parent && reference.parent.kind === 228 /* NonNullExpression */ && !(resultType.flags & 131072 /* Never */) && getTypeWithFacts(resultType, 2097152 /* NEUndefinedOrNull */).flags & 131072 /* Never */) {
                 return declaredType;
             }
             return resultType;
@@ -65809,9 +66999,9 @@
                         // Check if we should continue with the control flow of the containing function.
                         var container = flow.node;
                         if (container && container !== flowContainer &&
-                            reference.kind !== 202 /* PropertyAccessExpression */ &&
-                            reference.kind !== 203 /* ElementAccessExpression */ &&
-                            reference.kind !== 107 /* ThisKeyword */) {
+                            reference.kind !== 204 /* PropertyAccessExpression */ &&
+                            reference.kind !== 205 /* ElementAccessExpression */ &&
+                            reference.kind !== 108 /* ThisKeyword */) {
                             flow = container.flowNode;
                             continue;
                         }
@@ -65835,7 +67025,7 @@
             }
             function getInitialOrAssignedType(flow) {
                 var node = flow.node;
-                return getNarrowableTypeForReference(node.kind === 250 /* VariableDeclaration */ || node.kind === 199 /* BindingElement */ ?
+                return getNarrowableTypeForReference(node.kind === 252 /* VariableDeclaration */ || node.kind === 201 /* BindingElement */ ?
                     getInitialType(node) :
                     getAssignedType(node), reference);
             }
@@ -65875,14 +67065,14 @@
                     // in which case we continue control flow analysis back to the function's declaration
                     if (ts.isVariableDeclaration(node) && (ts.isInJSFile(node) || ts.isVarConst(node))) {
                         var init = ts.getDeclaredExpandoInitializer(node);
-                        if (init && (init.kind === 209 /* FunctionExpression */ || init.kind === 210 /* ArrowFunction */)) {
+                        if (init && (init.kind === 211 /* FunctionExpression */ || init.kind === 212 /* ArrowFunction */)) {
                             return getTypeAtFlowNode(flow.antecedent);
                         }
                     }
                     return declaredType;
                 }
                 // for (const _ in ref) acts as a nonnull on ref
-                if (ts.isVariableDeclaration(node) && node.parent.parent.kind === 239 /* ForInStatement */ && isMatchingReference(reference, node.parent.parent.expression)) {
+                if (ts.isVariableDeclaration(node) && node.parent.parent.kind === 241 /* ForInStatement */ && isMatchingReference(reference, node.parent.parent.expression)) {
                     return getNonNullableTypeIfNeeded(getTypeFromFlowType(getTypeAtFlowNode(flow.antecedent)));
                 }
                 // Assignment doesn't affect reference
@@ -65890,10 +67080,10 @@
             }
             function narrowTypeByAssertion(type, expr) {
                 var node = ts.skipParentheses(expr);
-                if (node.kind === 94 /* FalseKeyword */) {
+                if (node.kind === 95 /* FalseKeyword */) {
                     return unreachableNeverType;
                 }
-                if (node.kind === 217 /* BinaryExpression */) {
+                if (node.kind === 219 /* BinaryExpression */) {
                     if (node.operatorToken.kind === 55 /* AmpersandAmpersandToken */) {
                         return narrowTypeByAssertion(narrowTypeByAssertion(type, node.left), node.right);
                     }
@@ -65924,7 +67114,7 @@
             function getTypeAtFlowArrayMutation(flow) {
                 if (declaredType === autoType || declaredType === autoArrayType) {
                     var node = flow.node;
-                    var expr = node.kind === 204 /* CallExpression */ ?
+                    var expr = node.kind === 206 /* CallExpression */ ?
                         node.expression.expression :
                         node.left.expression;
                     if (isMatchingReference(reference, getReferenceCandidate(expr))) {
@@ -65932,7 +67122,7 @@
                         var type = getTypeFromFlowType(flowType);
                         if (ts.getObjectFlags(type) & 256 /* EvolvingArray */) {
                             var evolvedType_1 = type;
-                            if (node.kind === 204 /* CallExpression */) {
+                            if (node.kind === 206 /* CallExpression */) {
                                 for (var _i = 0, _a = node.arguments; _i < _a.length; _i++) {
                                     var arg = _a[_i];
                                     evolvedType_1 = addEvolvingArrayElementType(evolvedType_1, arg);
@@ -65980,7 +67170,7 @@
                 if (isMatchingReference(reference, expr)) {
                     type = narrowTypeBySwitchOnDiscriminant(type, flow.switchStatement, flow.clauseStart, flow.clauseEnd);
                 }
-                else if (expr.kind === 212 /* TypeOfExpression */ && isMatchingReference(reference, expr.expression)) {
+                else if (expr.kind === 214 /* TypeOfExpression */ && isMatchingReference(reference, expr.expression)) {
                     type = narrowBySwitchOnTypeOf(type, flow.switchStatement, flow.clauseStart, flow.clauseEnd);
                 }
                 else {
@@ -65988,12 +67178,13 @@
                         if (optionalChainContainsReference(expr, reference)) {
                             type = narrowTypeBySwitchOptionalChainContainment(type, flow.switchStatement, flow.clauseStart, flow.clauseEnd, function (t) { return !(t.flags & (32768 /* Undefined */ | 131072 /* Never */)); });
                         }
-                        else if (expr.kind === 212 /* TypeOfExpression */ && optionalChainContainsReference(expr.expression, reference)) {
+                        else if (expr.kind === 214 /* TypeOfExpression */ && optionalChainContainsReference(expr.expression, reference)) {
                             type = narrowTypeBySwitchOptionalChainContainment(type, flow.switchStatement, flow.clauseStart, flow.clauseEnd, function (t) { return !(t.flags & 131072 /* Never */ || t.flags & 128 /* StringLiteral */ && t.value === "undefined"); });
                         }
                     }
-                    if (isMatchingReferenceDiscriminant(expr, type)) {
-                        type = narrowTypeBySwitchOnDiscriminantProperty(type, expr, flow.switchStatement, flow.clauseStart, flow.clauseEnd);
+                    var access = getDiscriminantPropertyAccess(expr, type);
+                    if (access) {
+                        type = narrowTypeBySwitchOnDiscriminantProperty(type, access, flow.switchStatement, flow.clauseStart, flow.clauseEnd);
                     }
                 }
                 return createFlowType(type, isIncomplete(flowType));
@@ -66148,16 +67339,13 @@
                 }
                 return result;
             }
-            function isMatchingReferenceDiscriminant(expr, computedType) {
+            function getDiscriminantPropertyAccess(expr, computedType) {
+                var access, name;
                 var type = declaredType.flags & 1048576 /* Union */ ? declaredType : computedType;
-                if (!(type.flags & 1048576 /* Union */) || !ts.isAccessExpression(expr)) {
-                    return false;
-                }
-                var name = getAccessedPropertyName(expr);
-                if (name === undefined) {
-                    return false;
-                }
-                return isMatchingReference(reference, expr.expression) && isDiscriminantProperty(type, name);
+                return type.flags & 1048576 /* Union */ && (access = getPropertyAccess(expr)) && (name = getAccessedPropertyName(access)) &&
+                    isMatchingReference(reference, ts.isAccessExpression(access) ? access.expression : access.parent.parent.initializer) &&
+                    isDiscriminantProperty(type, name) ?
+                    access : undefined;
             }
             function narrowTypeByDiscriminant(type, access, narrowType) {
                 var propName = getAccessedPropertyName(access);
@@ -66180,10 +67368,10 @@
                 if ((operator === 36 /* EqualsEqualsEqualsToken */ || operator === 37 /* ExclamationEqualsEqualsToken */) && type.flags & 1048576 /* Union */) {
                     var keyPropertyName = getKeyPropertyName(type);
                     if (keyPropertyName && keyPropertyName === getAccessedPropertyName(access)) {
-                        var candidate_2 = getConstituentTypeForKeyType(type, getTypeOfExpression(value));
-                        if (candidate_2) {
-                            return operator === (assumeTrue ? 36 /* EqualsEqualsEqualsToken */ : 37 /* ExclamationEqualsEqualsToken */) ? candidate_2 :
-                                isUnitType(getTypeOfPropertyOfType(candidate_2, keyPropertyName) || unknownType) ? filterType(type, function (t) { return t !== candidate_2; }) :
+                        var candidate = getConstituentTypeForKeyType(type, getTypeOfExpression(value));
+                        if (candidate) {
+                            return operator === (assumeTrue ? 36 /* EqualsEqualsEqualsToken */ : 37 /* ExclamationEqualsEqualsToken */) ? candidate :
+                                isUnitType(getTypeOfPropertyOfType(candidate, keyPropertyName) || unknownType) ? removeType(type, candidate) :
                                     type;
                         }
                     }
@@ -66207,37 +67395,34 @@
                 if (strictNullChecks && assumeTrue && optionalChainContainsReference(expr, reference)) {
                     type = getTypeWithFacts(type, 2097152 /* NEUndefinedOrNull */);
                 }
-                if (isMatchingReferenceDiscriminant(expr, type)) {
-                    return narrowTypeByDiscriminant(type, expr, function (t) { return getTypeWithFacts(t, assumeTrue ? 4194304 /* Truthy */ : 8388608 /* Falsy */); });
+                var access = getDiscriminantPropertyAccess(expr, type);
+                if (access) {
+                    return narrowTypeByDiscriminant(type, access, function (t) { return getTypeWithFacts(t, assumeTrue ? 4194304 /* Truthy */ : 8388608 /* Falsy */); });
                 }
                 return type;
             }
             function isTypePresencePossible(type, propName, assumeTrue) {
-                if (getIndexInfoOfType(type, 0 /* String */)) {
-                    return true;
-                }
                 var prop = getPropertyOfType(type, propName);
                 if (prop) {
                     return prop.flags & 16777216 /* Optional */ ? true : assumeTrue;
                 }
-                return !assumeTrue;
+                return getApplicableIndexInfoForName(type, propName) ? true : !assumeTrue;
             }
-            function narrowByInKeyword(type, literal, assumeTrue) {
+            function narrowByInKeyword(type, name, assumeTrue) {
                 if (type.flags & 1048576 /* Union */
                     || type.flags & 524288 /* Object */ && declaredType !== type
                     || isThisTypeParameter(type)
                     || type.flags & 2097152 /* Intersection */ && ts.every(type.types, function (t) { return t.symbol !== globalThisSymbol; })) {
-                    var propName_1 = ts.escapeLeadingUnderscores(literal.text);
-                    return filterType(type, function (t) { return isTypePresencePossible(t, propName_1, assumeTrue); });
+                    return filterType(type, function (t) { return isTypePresencePossible(t, name, assumeTrue); });
                 }
                 return type;
             }
             function narrowTypeByBinaryExpression(type, expr, assumeTrue) {
                 switch (expr.operatorToken.kind) {
-                    case 62 /* EqualsToken */:
-                    case 74 /* BarBarEqualsToken */:
-                    case 75 /* AmpersandAmpersandEqualsToken */:
-                    case 76 /* QuestionQuestionEqualsToken */:
+                    case 63 /* EqualsToken */:
+                    case 75 /* BarBarEqualsToken */:
+                    case 76 /* AmpersandAmpersandEqualsToken */:
+                    case 77 /* QuestionQuestionEqualsToken */:
                         return narrowTypeByTruthiness(narrowType(type, expr.right, assumeTrue), expr.left, assumeTrue);
                     case 34 /* EqualsEqualsToken */:
                     case 35 /* ExclamationEqualsToken */:
@@ -66246,10 +67431,10 @@
                         var operator = expr.operatorToken.kind;
                         var left = getReferenceCandidate(expr.left);
                         var right = getReferenceCandidate(expr.right);
-                        if (left.kind === 212 /* TypeOfExpression */ && ts.isStringLiteralLike(right)) {
+                        if (left.kind === 214 /* TypeOfExpression */ && ts.isStringLiteralLike(right)) {
                             return narrowTypeByTypeof(type, left, operator, right, assumeTrue);
                         }
-                        if (right.kind === 212 /* TypeOfExpression */ && ts.isStringLiteralLike(left)) {
+                        if (right.kind === 214 /* TypeOfExpression */ && ts.isStringLiteralLike(left)) {
                             return narrowTypeByTypeof(type, right, operator, left, assumeTrue);
                         }
                         if (isMatchingReference(reference, left)) {
@@ -66266,11 +67451,13 @@
                                 type = narrowTypeByOptionalChainContainment(type, operator, left, assumeTrue);
                             }
                         }
-                        if (isMatchingReferenceDiscriminant(left, type)) {
-                            return narrowTypeByDiscriminantProperty(type, left, operator, right, assumeTrue);
+                        var leftAccess = getDiscriminantPropertyAccess(left, type);
+                        if (leftAccess) {
+                            return narrowTypeByDiscriminantProperty(type, leftAccess, operator, right, assumeTrue);
                         }
-                        if (isMatchingReferenceDiscriminant(right, type)) {
-                            return narrowTypeByDiscriminantProperty(type, right, operator, left, assumeTrue);
+                        var rightAccess = getDiscriminantPropertyAccess(right, type);
+                        if (rightAccess) {
+                            return narrowTypeByDiscriminantProperty(type, rightAccess, operator, left, assumeTrue);
                         }
                         if (isMatchingConstructorReference(left)) {
                             return narrowTypeByConstructor(type, operator, right, assumeTrue);
@@ -66279,16 +67466,35 @@
                             return narrowTypeByConstructor(type, operator, left, assumeTrue);
                         }
                         break;
-                    case 101 /* InstanceOfKeyword */:
+                    case 102 /* InstanceOfKeyword */:
                         return narrowTypeByInstanceof(type, expr, assumeTrue);
-                    case 100 /* InKeyword */:
+                    case 101 /* InKeyword */:
                         var target = getReferenceCandidate(expr.right);
-                        if (ts.isStringLiteralLike(expr.left) && isMatchingReference(reference, target)) {
-                            return narrowByInKeyword(type, expr.left, assumeTrue);
+                        var leftType = getTypeOfNode(expr.left);
+                        if (leftType.flags & 128 /* StringLiteral */) {
+                            var name = ts.escapeLeadingUnderscores(leftType.value);
+                            if (containsMissingType(type) && ts.isAccessExpression(reference) && isMatchingReference(reference.expression, target) &&
+                                getAccessedPropertyName(reference) === name) {
+                                return getTypeWithFacts(type, assumeTrue ? 524288 /* NEUndefined */ : 65536 /* EQUndefined */);
+                            }
+                            if (isMatchingReference(reference, target)) {
+                                return narrowByInKeyword(type, name, assumeTrue);
+                            }
                         }
                         break;
                     case 27 /* CommaToken */:
                         return narrowType(type, expr.right, assumeTrue);
+                    // Ordinarily we won't see && and || expressions in control flow analysis because the Binder breaks those
+                    // expressions down to individual conditional control flows. However, we may encounter them when analyzing
+                    // aliased conditional expressions.
+                    case 55 /* AmpersandAmpersandToken */:
+                        return assumeTrue ?
+                            narrowType(narrowType(type, expr.left, /*assumeTrue*/ true), expr.right, /*assumeTrue*/ true) :
+                            getUnionType([narrowType(type, expr.left, /*assumeTrue*/ false), narrowType(type, expr.right, /*assumeTrue*/ false)]);
+                    case 56 /* BarBarToken */:
+                        return assumeTrue ?
+                            getUnionType([narrowType(type, expr.left, /*assumeTrue*/ true), narrowType(type, expr.right, /*assumeTrue*/ true)]) :
+                            narrowType(narrowType(type, expr.left, /*assumeTrue*/ false), expr.right, /*assumeTrue*/ false);
                 }
                 return type;
             }
@@ -66368,7 +67574,7 @@
                 if (assumeTrue && type.flags & 2 /* Unknown */ && literal.text === "object") {
                     // The pattern x && typeof x === 'object', where x is of type unknown, narrows x to type object. We don't
                     // need to check for the reverse typeof x === 'object' && x since that already narrows correctly.
-                    if (typeOfExpr.parent.parent.kind === 217 /* BinaryExpression */) {
+                    if (typeOfExpr.parent.parent.kind === 219 /* BinaryExpression */) {
                         var expr = typeOfExpr.parent.parent;
                         if (expr.operatorToken.kind === 55 /* AmpersandAmpersandToken */ && expr.right === typeOfExpr.parent && containsTruthyCheck(reference, expr.left)) {
                             return nonPrimitiveType;
@@ -66643,6 +67849,16 @@
                         return narrowTypeByTypePredicate(type, predicate, callExpression, assumeTrue);
                     }
                 }
+                if (containsMissingType(type) && ts.isAccessExpression(reference) && ts.isPropertyAccessExpression(callExpression.expression)) {
+                    var callAccess = callExpression.expression;
+                    if (isMatchingReference(reference.expression, getReferenceCandidate(callAccess.expression)) &&
+                        ts.isIdentifier(callAccess.name) && callAccess.name.escapedText === "hasOwnProperty" && callExpression.arguments.length === 1) {
+                        var argument = callExpression.arguments[0];
+                        if (ts.isStringLiteralLike(argument) && getAccessedPropertyName(reference) === ts.escapeLeadingUnderscores(argument.text)) {
+                            return getTypeWithFacts(type, assumeTrue ? 524288 /* NEUndefined */ : 65536 /* EQUndefined */);
+                        }
+                    }
+                }
                 return type;
             }
             function narrowTypeByTypePredicate(type, predicate, callExpression, assumeTrue) {
@@ -66657,8 +67873,9 @@
                             !(getTypeFacts(predicate.type) & 65536 /* EQUndefined */)) {
                             type = getTypeWithFacts(type, 2097152 /* NEUndefinedOrNull */);
                         }
-                        if (isMatchingReferenceDiscriminant(predicateArgument, type)) {
-                            return narrowTypeByDiscriminant(type, predicateArgument, function (t) { return getNarrowedType(t, predicate.type, assumeTrue, isTypeSubtypeOf); });
+                        var access = getDiscriminantPropertyAccess(predicateArgument, type);
+                        if (access) {
+                            return narrowTypeByDiscriminant(type, access, function (t) { return getNarrowedType(t, predicate.type, assumeTrue, isTypeSubtypeOf); });
                         }
                     }
                 }
@@ -66673,20 +67890,35 @@
                     return narrowTypeByOptionality(type, expr, assumeTrue);
                 }
                 switch (expr.kind) {
-                    case 78 /* Identifier */:
-                    case 107 /* ThisKeyword */:
-                    case 105 /* SuperKeyword */:
-                    case 202 /* PropertyAccessExpression */:
-                    case 203 /* ElementAccessExpression */:
+                    case 79 /* Identifier */:
+                        // When narrowing a reference to a const variable, non-assigned parameter, or readonly property, we inline
+                        // up to five levels of aliased conditional expressions that are themselves declared as const variables.
+                        if (!isMatchingReference(reference, expr) && inlineLevel < 5) {
+                            var symbol = getResolvedSymbol(expr);
+                            if (isConstVariable(symbol)) {
+                                var declaration = symbol.valueDeclaration;
+                                if (declaration && ts.isVariableDeclaration(declaration) && !declaration.type && declaration.initializer && isConstantReference(reference)) {
+                                    inlineLevel++;
+                                    var result = narrowType(type, declaration.initializer, assumeTrue);
+                                    inlineLevel--;
+                                    return result;
+                                }
+                            }
+                        }
+                    // falls through
+                    case 108 /* ThisKeyword */:
+                    case 106 /* SuperKeyword */:
+                    case 204 /* PropertyAccessExpression */:
+                    case 205 /* ElementAccessExpression */:
                         return narrowTypeByTruthiness(type, expr, assumeTrue);
-                    case 204 /* CallExpression */:
+                    case 206 /* CallExpression */:
                         return narrowTypeByCallExpression(type, expr, assumeTrue);
-                    case 208 /* ParenthesizedExpression */:
-                    case 226 /* NonNullExpression */:
+                    case 210 /* ParenthesizedExpression */:
+                    case 228 /* NonNullExpression */:
                         return narrowType(type, expr.expression, assumeTrue);
-                    case 217 /* BinaryExpression */:
+                    case 219 /* BinaryExpression */:
                         return narrowTypeByBinaryExpression(type, expr, assumeTrue);
-                    case 215 /* PrefixUnaryExpression */:
+                    case 217 /* PrefixUnaryExpression */:
                         if (expr.operator === 53 /* ExclamationToken */) {
                             return narrowType(type, expr.operand, !assumeTrue);
                         }
@@ -66698,8 +67930,9 @@
                 if (isMatchingReference(reference, expr)) {
                     return getTypeWithFacts(type, assumePresent ? 2097152 /* NEUndefinedOrNull */ : 262144 /* EQUndefinedOrNull */);
                 }
-                if (isMatchingReferenceDiscriminant(expr, type)) {
-                    return narrowTypeByDiscriminant(type, expr, function (t) { return getTypeWithFacts(t, assumePresent ? 2097152 /* NEUndefinedOrNull */ : 262144 /* EQUndefinedOrNull */); });
+                var access = getDiscriminantPropertyAccess(expr, type);
+                if (access) {
+                    return narrowTypeByDiscriminant(type, access, function (t) { return getTypeWithFacts(t, assumePresent ? 2097152 /* NEUndefinedOrNull */ : 262144 /* EQUndefinedOrNull */); });
                 }
                 return type;
             }
@@ -66710,7 +67943,7 @@
             // an dotted name expression, and if the location is not an assignment target, obtain the type
             // of the expression (which will reflect control flow analysis). If the expression indeed
             // resolved to the given symbol, return the narrowed type.
-            if (location.kind === 78 /* Identifier */ || location.kind === 79 /* PrivateIdentifier */) {
+            if (location.kind === 79 /* Identifier */ || location.kind === 80 /* PrivateIdentifier */) {
                 if (ts.isRightSideOfQualifiedNameOrPropertyAccess(location)) {
                     location = location.parent;
                 }
@@ -66729,14 +67962,14 @@
             // to it at the given location. Since we have no control flow information for the
             // hypothetical reference (control flow information is created and attached by the
             // binder), we simply return the declared type of the symbol.
-            return getTypeOfSymbol(symbol);
+            return getNonMissingTypeOfSymbol(symbol);
         }
         function getControlFlowContainer(node) {
             return ts.findAncestor(node.parent, function (node) {
                 return ts.isFunctionLike(node) && !ts.getImmediatelyInvokedFunctionExpression(node) ||
-                    node.kind === 258 /* ModuleBlock */ ||
-                    node.kind === 298 /* SourceFile */ ||
-                    node.kind === 164 /* PropertyDeclaration */;
+                    node.kind === 260 /* ModuleBlock */ ||
+                    node.kind === 300 /* SourceFile */ ||
+                    node.kind === 165 /* PropertyDeclaration */;
             });
         }
         // Check if a parameter is assigned anywhere within its declaring function.
@@ -66758,10 +67991,10 @@
             return !!ts.findAncestor(node.parent, function (node) { return ts.isFunctionLike(node) && !!(getNodeLinks(node).flags & 8388608 /* AssignmentsMarked */); });
         }
         function markParameterAssignments(node) {
-            if (node.kind === 78 /* Identifier */) {
+            if (node.kind === 79 /* Identifier */) {
                 if (ts.isAssignmentTarget(node)) {
                     var symbol = getResolvedSymbol(node);
-                    if (symbol.valueDeclaration && ts.getRootDeclaration(symbol.valueDeclaration).kind === 161 /* Parameter */) {
+                    if (symbol.valueDeclaration && ts.getRootDeclaration(symbol.valueDeclaration).kind === 162 /* Parameter */) {
                         symbol.isAssigned = true;
                     }
                 }
@@ -66771,13 +68004,13 @@
             }
         }
         function isConstVariable(symbol) {
-            return symbol.flags & 3 /* Variable */ && (getDeclarationNodeFlagsFromSymbol(symbol) & 2 /* Const */) !== 0 && getTypeOfSymbol(symbol) !== autoArrayType;
+            return symbol.flags & 3 /* Variable */ && (getDeclarationNodeFlagsFromSymbol(symbol) & 2 /* Const */) !== 0;
         }
         /** remove undefined from the annotated type of a parameter when there is an initializer (that doesn't include undefined) */
         function removeOptionalityFromDeclaredType(declaredType, declaration) {
             if (pushTypeResolution(declaration.symbol, 2 /* DeclaredType */)) {
                 var annotationIncludesUndefined = strictNullChecks &&
-                    declaration.kind === 161 /* Parameter */ &&
+                    declaration.kind === 162 /* Parameter */ &&
                     declaration.initializer &&
                     getFalsyFlags(declaredType) & 32768 /* Undefined */ &&
                     !(getFalsyFlags(checkExpression(declaration.initializer)) & 32768 /* Undefined */);
@@ -66789,29 +68022,29 @@
                 return declaredType;
             }
         }
-        function isConstraintPosition(node) {
+        function isConstraintPosition(type, node) {
             var parent = node.parent;
-            // In an element access obj[x], we consider obj to be in a constraint position only when x is not
-            // of a generic type. This is because when both obj and x are of generic types T and K, we want
-            // the resulting type to be T[K].
-            return parent.kind === 202 /* PropertyAccessExpression */ ||
-                parent.kind === 204 /* CallExpression */ && parent.expression === node ||
-                parent.kind === 203 /* ElementAccessExpression */ && parent.expression === node &&
-                    !isGenericIndexType(getTypeOfExpression(parent.argumentExpression));
+            // In an element access obj[x], we consider obj to be in a constraint position, except when obj is of
+            // a generic type without a nullable constraint and x is a generic type. This is because when both obj
+            // and x are of generic types T and K, we want the resulting type to be T[K].
+            return parent.kind === 204 /* PropertyAccessExpression */ ||
+                parent.kind === 206 /* CallExpression */ && parent.expression === node ||
+                parent.kind === 205 /* ElementAccessExpression */ && parent.expression === node &&
+                    !(isGenericTypeWithoutNullableConstraint(type) && isGenericIndexType(getTypeOfExpression(parent.argumentExpression)));
         }
         function isGenericTypeWithUnionConstraint(type) {
             return !!(type.flags & 465829888 /* Instantiable */ && getBaseConstraintOrType(type).flags & (98304 /* Nullable */ | 1048576 /* Union */));
         }
-        function containsGenericType(type) {
-            return !!(type.flags & 465829888 /* Instantiable */ || type.flags & 3145728 /* UnionOrIntersection */ && ts.some(type.types, containsGenericType));
+        function isGenericTypeWithoutNullableConstraint(type) {
+            return !!(type.flags & 465829888 /* Instantiable */ && !maybeTypeOfKind(getBaseConstraintOrType(type), 98304 /* Nullable */));
         }
-        function hasContextualTypeWithNoGenericTypes(node) {
+        function hasNonBindingPatternContextualTypeWithNoGenericTypes(node) {
             // Computing the contextual type for a child of a JSX element involves resolving the type of the
             // element's tag name, so we exclude that here to avoid circularities.
             var contextualType = (ts.isIdentifier(node) || ts.isPropertyAccessExpression(node) || ts.isElementAccessExpression(node)) &&
                 !((ts.isJsxOpeningElement(node.parent) || ts.isJsxSelfClosingElement(node.parent)) && node.parent.tagName === node) &&
-                getContextualType(node);
-            return contextualType && !someType(contextualType, containsGenericType);
+                getContextualType(node, 8 /* SkipBindingPatterns */);
+            return contextualType && !isGenericType(contextualType);
         }
         function getNarrowableTypeForReference(type, reference, checkMode) {
             // When the type of a reference is or contains an instantiable type with a union type constraint, and
@@ -66823,7 +68056,7 @@
             // 'string | undefined' to give control flow analysis the opportunity to narrow to type 'string'.
             var substituteConstraints = !(checkMode && checkMode & 2 /* Inferential */) &&
                 someType(type, isGenericTypeWithUnionConstraint) &&
-                (isConstraintPosition(reference) || hasContextualTypeWithNoGenericTypes(reference));
+                (isConstraintPosition(type, reference) || hasNonBindingPatternContextualTypeWithNoGenericTypes(reference));
             return substituteConstraints ? mapType(type, function (t) { return t.flags & 465829888 /* Instantiable */ ? getBaseConstraintOrType(t) : t; }) : type;
         }
         function isExportOrExportExpression(location) {
@@ -66859,9 +68092,13 @@
             // To avoid that we will give an error to users if they use arguments objects in arrow function so that they
             // can explicitly bound arguments objects
             if (symbol === argumentsSymbol) {
+                if (isInPropertyInitializerOrClassStaticBlock(node)) {
+                    error(node, ts.Diagnostics.arguments_cannot_be_referenced_in_property_initializers);
+                    return errorType;
+                }
                 var container = ts.getContainingFunction(node);
                 if (languageVersion < 2 /* ES2015 */) {
-                    if (container.kind === 210 /* ArrowFunction */) {
+                    if (container.kind === 212 /* ArrowFunction */) {
                         error(node, ts.Diagnostics.The_arguments_object_cannot_be_referenced_in_an_arrow_function_in_ES3_and_ES5_Consider_using_a_standard_function_expression);
                     }
                     else if (ts.hasSyntacticModifier(container, 256 /* Async */)) {
@@ -66886,7 +68123,7 @@
                 // Due to the emit for class decorators, any reference to the class from inside of the class body
                 // must instead be rewritten to point to a temporary variable to avoid issues with the double-bind
                 // behavior of class names in ES6.
-                if (declaration.kind === 253 /* ClassDeclaration */
+                if (declaration.kind === 255 /* ClassDeclaration */
                     && ts.nodeIsDecorated(declaration)) {
                     var container = ts.getContainingClass(node);
                     while (container !== undefined) {
@@ -66898,14 +68135,14 @@
                         container = ts.getContainingClass(container);
                     }
                 }
-                else if (declaration.kind === 222 /* ClassExpression */) {
+                else if (declaration.kind === 224 /* ClassExpression */) {
                     // When we emit a class expression with static members that contain a reference
                     // to the constructor in the initializer, we will need to substitute that
                     // binding with an alias as the class name is not in scope.
                     var container = ts.getThisContainer(node, /*includeArrowFunctions*/ false);
-                    while (container.kind !== 298 /* SourceFile */) {
+                    while (container.kind !== 300 /* SourceFile */) {
                         if (container.parent === declaration) {
-                            if (container.kind === 164 /* PropertyDeclaration */ && ts.hasSyntacticModifier(container, 32 /* Static */)) {
+                            if (ts.isPropertyDeclaration(container) && ts.isStatic(container) || ts.isClassStaticBlockDeclaration(container)) {
                                 getNodeLinks(declaration).flags |= 16777216 /* ClassWithConstructorReference */;
                                 getNodeLinks(node).flags |= 33554432 /* ConstructorReferenceInClass */;
                             }
@@ -66961,7 +68198,7 @@
             // The declaration container is the innermost function that encloses the declaration of the variable
             // or parameter. The flow container is the innermost function starting with which we analyze the control
             // flow graph to determine the control flow based type.
-            var isParameter = ts.getRootDeclaration(declaration).kind === 161 /* Parameter */;
+            var isParameter = ts.getRootDeclaration(declaration).kind === 162 /* Parameter */;
             var declarationContainer = getControlFlowContainer(declaration);
             var flowContainer = getControlFlowContainer(node);
             var isOuterVariable = flowContainer !== declarationContainer;
@@ -66970,9 +68207,9 @@
             // When the control flow originates in a function expression or arrow function and we are referencing
             // a const variable or parameter from an outer function, we extend the origin of the control flow
             // analysis to include the immediately enclosing function.
-            while (flowContainer !== declarationContainer && (flowContainer.kind === 209 /* FunctionExpression */ ||
-                flowContainer.kind === 210 /* ArrowFunction */ || ts.isObjectLiteralOrClassExpressionMethod(flowContainer)) &&
-                (isConstVariable(localOrExportSymbol) || isParameter && !isParameterAssigned(localOrExportSymbol))) {
+            while (flowContainer !== declarationContainer && (flowContainer.kind === 211 /* FunctionExpression */ ||
+                flowContainer.kind === 212 /* ArrowFunction */ || ts.isObjectLiteralOrClassExpressionMethod(flowContainer)) &&
+                (isConstVariable(localOrExportSymbol) && type !== autoArrayType || isParameter && !isParameterAssigned(localOrExportSymbol))) {
                 flowContainer = getControlFlowContainer(flowContainer);
             }
             // We only look for uninitialized variables in strict null checking mode, and only when we can analyze
@@ -66980,14 +68217,14 @@
             // declaration container are the same).
             var assumeInitialized = isParameter || isAlias || isOuterVariable || isSpreadDestructuringAssignmentTarget || isModuleExports || ts.isBindingElement(declaration) ||
                 type !== autoType && type !== autoArrayType && (!strictNullChecks || (type.flags & (3 /* AnyOrUnknown */ | 16384 /* Void */)) !== 0 ||
-                    isInTypeQuery(node) || node.parent.kind === 271 /* ExportSpecifier */) ||
-                node.parent.kind === 226 /* NonNullExpression */ ||
-                declaration.kind === 250 /* VariableDeclaration */ && declaration.exclamationToken ||
+                    isInTypeQuery(node) || node.parent.kind === 273 /* ExportSpecifier */) ||
+                node.parent.kind === 228 /* NonNullExpression */ ||
+                declaration.kind === 252 /* VariableDeclaration */ && declaration.exclamationToken ||
                 declaration.flags & 8388608 /* Ambient */;
             var initialType = assumeInitialized ? (isParameter ? removeOptionalityFromDeclaredType(type, declaration) : type) :
                 type === autoType || type === autoArrayType ? undefinedType :
                     getOptionalType(type);
-            var flowType = getFlowTypeOfReference(node, type, initialType, flowContainer, !assumeInitialized);
+            var flowType = getFlowTypeOfReference(node, type, initialType, flowContainer);
             // A variable is considered uninitialized when it is possible to analyze the entire control flow graph
             // from declaration to use, and when the variable's declared type doesn't include undefined but the
             // control flow based type does include undefined.
@@ -67021,7 +68258,7 @@
                 (symbol.flags & (2 /* BlockScopedVariable */ | 32 /* Class */)) === 0 ||
                 !symbol.valueDeclaration ||
                 ts.isSourceFile(symbol.valueDeclaration) ||
-                symbol.valueDeclaration.parent.kind === 288 /* CatchClause */) {
+                symbol.valueDeclaration.parent.kind === 290 /* CatchClause */) {
                 return;
             }
             // 1. walk from the use site up to the declaration and check
@@ -67036,7 +68273,7 @@
                     // mark iteration statement as containing block-scoped binding captured in some function
                     var capturesBlockScopeBindingInLoopBody = true;
                     if (ts.isForStatement(container)) {
-                        var varDeclList = ts.getAncestor(symbol.valueDeclaration, 251 /* VariableDeclarationList */);
+                        var varDeclList = ts.getAncestor(symbol.valueDeclaration, 253 /* VariableDeclarationList */);
                         if (varDeclList && varDeclList.parent === container) {
                             var part = getPartOfForStatementContainingNode(node.parent, container);
                             if (part) {
@@ -67057,7 +68294,7 @@
                 // mark variables that are declared in loop initializer and reassigned inside the body of ForStatement.
                 // if body of ForStatement will be converted to function then we'll need a extra machinery to propagate reassigned values back.
                 if (ts.isForStatement(container)) {
-                    var varDeclList = ts.getAncestor(symbol.valueDeclaration, 251 /* VariableDeclarationList */);
+                    var varDeclList = ts.getAncestor(symbol.valueDeclaration, 253 /* VariableDeclarationList */);
                     if (varDeclList && varDeclList.parent === container && isAssignedInBodyOfForStatement(node, container)) {
                         getNodeLinks(symbol.valueDeclaration).flags |= 4194304 /* NeedsLoopOutParameter */;
                     }
@@ -67076,7 +68313,7 @@
         function isAssignedInBodyOfForStatement(node, container) {
             // skip parenthesized nodes
             var current = node;
-            while (current.parent.kind === 208 /* ParenthesizedExpression */) {
+            while (current.parent.kind === 210 /* ParenthesizedExpression */) {
                 current = current.parent;
             }
             // check if node is used as LHS in some assignment expression
@@ -67084,7 +68321,7 @@
             if (ts.isAssignmentTarget(current)) {
                 isAssigned = true;
             }
-            else if ((current.parent.kind === 215 /* PrefixUnaryExpression */ || current.parent.kind === 216 /* PostfixUnaryExpression */)) {
+            else if ((current.parent.kind === 217 /* PrefixUnaryExpression */ || current.parent.kind === 218 /* PostfixUnaryExpression */)) {
                 var expr = current.parent;
                 isAssigned = expr.operator === 45 /* PlusPlusToken */ || expr.operator === 46 /* MinusMinusToken */;
             }
@@ -67097,7 +68334,7 @@
         }
         function captureLexicalThis(node, container) {
             getNodeLinks(node).flags |= 2 /* LexicalThis */;
-            if (container.kind === 164 /* PropertyDeclaration */ || container.kind === 167 /* Constructor */) {
+            if (container.kind === 165 /* PropertyDeclaration */ || container.kind === 169 /* Constructor */) {
                 var classNode = container.parent;
                 getNodeLinks(classNode).flags |= 4 /* CaptureThis */;
             }
@@ -67132,47 +68369,48 @@
                 }
             }
         }
+        function checkThisInStaticClassFieldInitializerInDecoratedClass(thisExpression, container) {
+            if (ts.isPropertyDeclaration(container) && ts.hasStaticModifier(container) &&
+                container.initializer && ts.textRangeContainsPositionInclusive(container.initializer, thisExpression.pos) && ts.length(container.parent.decorators)) {
+                error(thisExpression, ts.Diagnostics.Cannot_use_this_in_a_static_property_initializer_of_a_decorated_class);
+            }
+        }
         function checkThisExpression(node) {
+            var isNodeInTypeQuery = isInTypeQuery(node);
             // Stop at the first arrow function so that we can
             // tell whether 'this' needs to be captured.
             var container = ts.getThisContainer(node, /* includeArrowFunctions */ true);
             var capturedByArrowFunction = false;
-            if (container.kind === 167 /* Constructor */) {
+            if (container.kind === 169 /* Constructor */) {
                 checkThisBeforeSuper(node, container, ts.Diagnostics.super_must_be_called_before_accessing_this_in_the_constructor_of_a_derived_class);
             }
             // Now skip arrow functions to get the "real" owner of 'this'.
-            if (container.kind === 210 /* ArrowFunction */) {
+            if (container.kind === 212 /* ArrowFunction */) {
                 container = ts.getThisContainer(container, /* includeArrowFunctions */ false);
                 capturedByArrowFunction = true;
             }
+            checkThisInStaticClassFieldInitializerInDecoratedClass(node, container);
             switch (container.kind) {
-                case 257 /* ModuleDeclaration */:
+                case 259 /* ModuleDeclaration */:
                     error(node, ts.Diagnostics.this_cannot_be_referenced_in_a_module_or_namespace_body);
                     // do not return here so in case if lexical this is captured - it will be reflected in flags on NodeLinks
                     break;
-                case 256 /* EnumDeclaration */:
+                case 258 /* EnumDeclaration */:
                     error(node, ts.Diagnostics.this_cannot_be_referenced_in_current_location);
                     // do not return here so in case if lexical this is captured - it will be reflected in flags on NodeLinks
                     break;
-                case 167 /* Constructor */:
+                case 169 /* Constructor */:
                     if (isInConstructorArgumentInitializer(node, container)) {
                         error(node, ts.Diagnostics.this_cannot_be_referenced_in_constructor_arguments);
                         // do not return here so in case if lexical this is captured - it will be reflected in flags on NodeLinks
                     }
                     break;
-                case 164 /* PropertyDeclaration */:
-                case 163 /* PropertySignature */:
-                    if (ts.hasSyntacticModifier(container, 32 /* Static */) && !(compilerOptions.target === 99 /* ESNext */ && useDefineForClassFields)) {
-                        error(node, ts.Diagnostics.this_cannot_be_referenced_in_a_static_property_initializer);
-                        // do not return here so in case if lexical this is captured - it will be reflected in flags on NodeLinks
-                    }
-                    break;
-                case 159 /* ComputedPropertyName */:
+                case 160 /* ComputedPropertyName */:
                     error(node, ts.Diagnostics.this_cannot_be_referenced_in_a_computed_property_name);
                     break;
             }
             // When targeting es6, mark that we'll need to capture `this` in its lexically bound scope.
-            if (capturedByArrowFunction && languageVersion < 2 /* ES2015 */) {
+            if (!isNodeInTypeQuery && capturedByArrowFunction && languageVersion < 2 /* ES2015 */) {
                 captureLexicalThis(node, container);
             }
             var type = tryGetThisTypeAt(node, /*includeGlobalThis*/ true, container);
@@ -67222,7 +68460,7 @@
             }
             if (ts.isClassLike(container.parent)) {
                 var symbol = getSymbolOfNode(container.parent);
-                var type = ts.hasSyntacticModifier(container, 32 /* Static */) ? getTypeOfSymbol(symbol) : getDeclaredTypeOfSymbol(symbol).thisType;
+                var type = ts.isStatic(container) ? getTypeOfSymbol(symbol) : getDeclaredTypeOfSymbol(symbol).thisType;
                 return getFlowTypeOfReference(node, type);
             }
             if (ts.isSourceFile(container)) {
@@ -67250,12 +68488,12 @@
             }
             if (ts.isClassLike(container.parent)) {
                 var symbol = getSymbolOfNode(container.parent);
-                return ts.hasSyntacticModifier(container, 32 /* Static */) ? getTypeOfSymbol(symbol) : getDeclaredTypeOfSymbol(symbol).thisType;
+                return ts.isStatic(container) ? getTypeOfSymbol(symbol) : getDeclaredTypeOfSymbol(symbol).thisType;
             }
         }
         function getClassNameFromPrototypeMethod(container) {
             // Check if it's the RHS of a x.prototype.y = function [name]() { .... }
-            if (container.kind === 209 /* FunctionExpression */ &&
+            if (container.kind === 211 /* FunctionExpression */ &&
                 ts.isBinaryExpression(container.parent) &&
                 ts.getAssignmentDeclarationKind(container.parent) === 3 /* PrototypeProperty */) {
                 // Get the 'x' of 'x.prototype.y = container'
@@ -67265,16 +68503,16 @@
                     .expression; // x
             }
             // x.prototype = { method() { } }
-            else if (container.kind === 166 /* MethodDeclaration */ &&
-                container.parent.kind === 201 /* ObjectLiteralExpression */ &&
+            else if (container.kind === 167 /* MethodDeclaration */ &&
+                container.parent.kind === 203 /* ObjectLiteralExpression */ &&
                 ts.isBinaryExpression(container.parent.parent) &&
                 ts.getAssignmentDeclarationKind(container.parent.parent) === 6 /* Prototype */) {
                 return container.parent.parent.left.expression;
             }
             // x.prototype = { method: function() { } }
-            else if (container.kind === 209 /* FunctionExpression */ &&
-                container.parent.kind === 289 /* PropertyAssignment */ &&
-                container.parent.parent.kind === 201 /* ObjectLiteralExpression */ &&
+            else if (container.kind === 211 /* FunctionExpression */ &&
+                container.parent.kind === 291 /* PropertyAssignment */ &&
+                container.parent.parent.kind === 203 /* ObjectLiteralExpression */ &&
                 ts.isBinaryExpression(container.parent.parent.parent) &&
                 ts.getAssignmentDeclarationKind(container.parent.parent.parent) === 6 /* Prototype */) {
                 return container.parent.parent.parent.left.expression;
@@ -67282,7 +68520,7 @@
             // Object.defineProperty(x, "method", { value: function() { } });
             // Object.defineProperty(x, "method", { set: (x: () => void) => void });
             // Object.defineProperty(x, "method", { get: () => function() { }) });
-            else if (container.kind === 209 /* FunctionExpression */ &&
+            else if (container.kind === 211 /* FunctionExpression */ &&
                 ts.isPropertyAssignment(container.parent) &&
                 ts.isIdentifier(container.parent.name) &&
                 (container.parent.name.escapedText === "value" || container.parent.name.escapedText === "get" || container.parent.name.escapedText === "set") &&
@@ -67307,7 +68545,7 @@
         }
         function getTypeForThisExpressionFromJSDoc(node) {
             var jsdocType = ts.getJSDocType(node);
-            if (jsdocType && jsdocType.kind === 309 /* JSDocFunctionType */) {
+            if (jsdocType && jsdocType.kind === 312 /* JSDocFunctionType */) {
                 var jsDocFunctionType = jsdocType;
                 if (jsDocFunctionType.parameters.length > 0 &&
                     jsDocFunctionType.parameters[0].name &&
@@ -67321,16 +68559,16 @@
             }
         }
         function isInConstructorArgumentInitializer(node, constructorDecl) {
-            return !!ts.findAncestor(node, function (n) { return ts.isFunctionLikeDeclaration(n) ? "quit" : n.kind === 161 /* Parameter */ && n.parent === constructorDecl; });
+            return !!ts.findAncestor(node, function (n) { return ts.isFunctionLikeDeclaration(n) ? "quit" : n.kind === 162 /* Parameter */ && n.parent === constructorDecl; });
         }
         function checkSuperExpression(node) {
-            var isCallExpression = node.parent.kind === 204 /* CallExpression */ && node.parent.expression === node;
+            var isCallExpression = node.parent.kind === 206 /* CallExpression */ && node.parent.expression === node;
             var immediateContainer = ts.getSuperContainer(node, /*stopOnFunctions*/ true);
             var container = immediateContainer;
             var needToCaptureLexicalThis = false;
             // adjust the container reference in case if super is used inside arrow functions with arbitrarily deep nesting
             if (!isCallExpression) {
-                while (container && container.kind === 210 /* ArrowFunction */) {
+                while (container && container.kind === 212 /* ArrowFunction */) {
                     container = ts.getSuperContainer(container, /*stopOnFunctions*/ true);
                     needToCaptureLexicalThis = languageVersion < 2 /* ES2015 */;
                 }
@@ -67343,14 +68581,14 @@
                 // class B {
                 //     [super.foo()]() {}
                 // }
-                var current = ts.findAncestor(node, function (n) { return n === container ? "quit" : n.kind === 159 /* ComputedPropertyName */; });
-                if (current && current.kind === 159 /* ComputedPropertyName */) {
+                var current = ts.findAncestor(node, function (n) { return n === container ? "quit" : n.kind === 160 /* ComputedPropertyName */; });
+                if (current && current.kind === 160 /* ComputedPropertyName */) {
                     error(node, ts.Diagnostics.super_cannot_be_referenced_in_a_computed_property_name);
                 }
                 else if (isCallExpression) {
                     error(node, ts.Diagnostics.Super_calls_are_not_permitted_outside_constructors_or_in_nested_functions_inside_constructors);
                 }
-                else if (!container || !container.parent || !(ts.isClassLike(container.parent) || container.parent.kind === 201 /* ObjectLiteralExpression */)) {
+                else if (!container || !container.parent || !(ts.isClassLike(container.parent) || container.parent.kind === 203 /* ObjectLiteralExpression */)) {
                     error(node, ts.Diagnostics.super_can_only_be_referenced_in_members_of_derived_classes_or_object_literal_expressions);
                 }
                 else {
@@ -67358,11 +68596,23 @@
                 }
                 return errorType;
             }
-            if (!isCallExpression && immediateContainer.kind === 167 /* Constructor */) {
+            if (!isCallExpression && immediateContainer.kind === 169 /* Constructor */) {
                 checkThisBeforeSuper(node, container, ts.Diagnostics.super_must_be_called_before_accessing_a_property_of_super_in_the_constructor_of_a_derived_class);
             }
-            if (ts.hasSyntacticModifier(container, 32 /* Static */) || isCallExpression) {
+            if (ts.isStatic(container) || isCallExpression) {
                 nodeCheckFlag = 512 /* SuperStatic */;
+                if (!isCallExpression &&
+                    languageVersion >= 2 /* ES2015 */ && languageVersion <= 8 /* ES2021 */ &&
+                    (ts.isPropertyDeclaration(container) || ts.isClassStaticBlockDeclaration(container))) {
+                    // for `super.x` or `super[x]` in a static initializer, mark all enclosing
+                    // block scope containers so that we can report potential collisions with
+                    // `Reflect`.
+                    ts.forEachEnclosingBlockScopeContainer(node.parent, function (current) {
+                        if (!ts.isSourceFile(current) || ts.isExternalOrCommonJsModule(current)) {
+                            getNodeLinks(current).flags |= 134217728 /* ContainsSuperPropertyInStaticInitializer */;
+                        }
+                    });
+                }
             }
             else {
                 nodeCheckFlag = 256 /* SuperInstance */;
@@ -67427,7 +68677,7 @@
             // as a call expression cannot be used as the target of a destructuring assignment while a property access can.
             //
             // For element access expressions (`super[x]`), we emit a generic helper that forwards the element access in both situations.
-            if (container.kind === 166 /* MethodDeclaration */ && ts.hasSyntacticModifier(container, 256 /* Async */)) {
+            if (container.kind === 167 /* MethodDeclaration */ && ts.hasSyntacticModifier(container, 256 /* Async */)) {
                 if (ts.isSuperProperty(node.parent) && ts.isAssignmentTarget(node.parent)) {
                     getNodeLinks(container).flags |= 4096 /* AsyncMethodWithSuperBinding */;
                 }
@@ -67441,7 +68691,7 @@
                 // in this case they should also use correct lexical this
                 captureLexicalThis(node.parent, container);
             }
-            if (container.parent.kind === 201 /* ObjectLiteralExpression */) {
+            if (container.parent.kind === 203 /* ObjectLiteralExpression */) {
                 if (languageVersion < 2 /* ES2015 */) {
                     error(node, ts.Diagnostics.super_is_only_allowed_in_members_of_object_literal_expressions_when_option_target_is_ES2015_or_higher);
                     return errorType;
@@ -67462,7 +68712,7 @@
             if (!baseClassType) {
                 return errorType;
             }
-            if (container.kind === 167 /* Constructor */ && isInConstructorArgumentInitializer(node, container)) {
+            if (container.kind === 169 /* Constructor */ && isInConstructorArgumentInitializer(node, container)) {
                 // issue custom error message for super property access in constructor arguments (to be aligned with old compiler)
                 error(node, ts.Diagnostics.super_cannot_be_referenced_in_constructor_arguments);
                 return errorType;
@@ -67477,7 +68727,7 @@
                 if (isCallExpression) {
                     // TS 1.0 SPEC (April 2014): 4.8.1
                     // Super calls are only permitted in constructors of derived classes
-                    return container.kind === 167 /* Constructor */;
+                    return container.kind === 169 /* Constructor */;
                 }
                 else {
                     // TS 1.0 SPEC (April 2014)
@@ -67485,21 +68735,23 @@
                     // - In a constructor, instance member function, instance member accessor, or instance member variable initializer where this references a derived class instance
                     // - In a static member function or static member accessor
                     // topmost container must be something that is directly nested in the class declaration\object literal expression
-                    if (ts.isClassLike(container.parent) || container.parent.kind === 201 /* ObjectLiteralExpression */) {
-                        if (ts.hasSyntacticModifier(container, 32 /* Static */)) {
-                            return container.kind === 166 /* MethodDeclaration */ ||
-                                container.kind === 165 /* MethodSignature */ ||
-                                container.kind === 168 /* GetAccessor */ ||
-                                container.kind === 169 /* SetAccessor */;
+                    if (ts.isClassLike(container.parent) || container.parent.kind === 203 /* ObjectLiteralExpression */) {
+                        if (ts.isStatic(container)) {
+                            return container.kind === 167 /* MethodDeclaration */ ||
+                                container.kind === 166 /* MethodSignature */ ||
+                                container.kind === 170 /* GetAccessor */ ||
+                                container.kind === 171 /* SetAccessor */ ||
+                                container.kind === 165 /* PropertyDeclaration */ ||
+                                container.kind === 168 /* ClassStaticBlockDeclaration */;
                         }
                         else {
-                            return container.kind === 166 /* MethodDeclaration */ ||
-                                container.kind === 165 /* MethodSignature */ ||
-                                container.kind === 168 /* GetAccessor */ ||
-                                container.kind === 169 /* SetAccessor */ ||
-                                container.kind === 164 /* PropertyDeclaration */ ||
-                                container.kind === 163 /* PropertySignature */ ||
-                                container.kind === 167 /* Constructor */;
+                            return container.kind === 167 /* MethodDeclaration */ ||
+                                container.kind === 166 /* MethodSignature */ ||
+                                container.kind === 170 /* GetAccessor */ ||
+                                container.kind === 171 /* SetAccessor */ ||
+                                container.kind === 165 /* PropertyDeclaration */ ||
+                                container.kind === 164 /* PropertySignature */ ||
+                                container.kind === 169 /* Constructor */;
                         }
                     }
                 }
@@ -67507,10 +68759,10 @@
             }
         }
         function getContainingObjectLiteral(func) {
-            return (func.kind === 166 /* MethodDeclaration */ ||
-                func.kind === 168 /* GetAccessor */ ||
-                func.kind === 169 /* SetAccessor */) && func.parent.kind === 201 /* ObjectLiteralExpression */ ? func.parent :
-                func.kind === 209 /* FunctionExpression */ && func.parent.kind === 289 /* PropertyAssignment */ ? func.parent.parent :
+            return (func.kind === 167 /* MethodDeclaration */ ||
+                func.kind === 170 /* GetAccessor */ ||
+                func.kind === 171 /* SetAccessor */) && func.parent.kind === 203 /* ObjectLiteralExpression */ ? func.parent :
+                func.kind === 211 /* FunctionExpression */ && func.parent.kind === 291 /* PropertyAssignment */ ? func.parent.parent :
                     undefined;
         }
         function getThisTypeArgument(type) {
@@ -67522,7 +68774,7 @@
             });
         }
         function getContextualThisParameterType(func) {
-            if (func.kind === 210 /* ArrowFunction */) {
+            if (func.kind === 212 /* ArrowFunction */) {
                 return undefined;
             }
             if (isContextSensitiveFunctionOrObjectLiteralMethod(func)) {
@@ -67549,7 +68801,7 @@
                         if (thisType) {
                             return instantiateType(thisType, getMapperFromContext(getInferenceContext(containingLiteral)));
                         }
-                        if (literal.parent.kind !== 289 /* PropertyAssignment */) {
+                        if (literal.parent.kind !== 291 /* PropertyAssignment */) {
                             break;
                         }
                         literal = literal.parent.parent;
@@ -67563,7 +68815,7 @@
                 // In an assignment of the form 'obj.xxx = function(...)' or 'obj[xxx] = function(...)', the
                 // contextual type for 'this' is 'obj'.
                 var parent = ts.walkUpParenthesizedExpressions(func.parent);
-                if (parent.kind === 217 /* BinaryExpression */ && parent.operatorToken.kind === 62 /* EqualsToken */) {
+                if (parent.kind === 219 /* BinaryExpression */ && parent.operatorToken.kind === 63 /* EqualsToken */) {
                     var target = parent.left;
                     if (ts.isAccessExpression(target)) {
                         var expression = target.expression;
@@ -67616,12 +68868,12 @@
                 return getTypeFromTypeNode(typeNode);
             }
             switch (declaration.kind) {
-                case 161 /* Parameter */:
+                case 162 /* Parameter */:
                     return getContextuallyTypedParameterType(declaration);
-                case 199 /* BindingElement */:
+                case 201 /* BindingElement */:
                     return getContextualTypeForBindingElement(declaration);
-                case 164 /* PropertyDeclaration */:
-                    if (ts.hasSyntacticModifier(declaration, 32 /* Static */)) {
+                case 165 /* PropertyDeclaration */:
+                    if (ts.isStatic(declaration)) {
                         return getContextualTypeForStaticPropertyDeclaration(declaration);
                     }
                 // By default, do nothing and return undefined - only the above cases have context implied by a parent
@@ -67631,10 +68883,10 @@
             var parent = declaration.parent.parent;
             var name = declaration.propertyName || declaration.name;
             var parentType = getContextualTypeForVariableLikeDeclaration(parent) ||
-                parent.kind !== 199 /* BindingElement */ && parent.initializer && checkDeclarationInitializer(parent);
+                parent.kind !== 201 /* BindingElement */ && parent.initializer && checkDeclarationInitializer(parent);
             if (!parentType || ts.isBindingPattern(name) || ts.isComputedNonLiteralName(name))
                 return undefined;
-            if (parent.name.kind === 198 /* ArrayBindingPattern */) {
+            if (parent.name.kind === 200 /* ArrayBindingPattern */) {
                 var index = ts.indexOfNode(declaration.parent.elements, declaration);
                 if (index < 0)
                     return undefined;
@@ -67768,10 +69020,13 @@
             if (ts.isJsxOpeningLikeElement(callTarget) && argIndex === 0) {
                 return getEffectiveFirstArgumentForJsxSignature(signature, callTarget);
             }
-            return getTypeAtPosition(signature, argIndex);
+            var restIndex = signature.parameters.length - 1;
+            return signatureHasRestParameter(signature) && argIndex >= restIndex ?
+                getIndexedAccessType(getTypeOfSymbol(signature.parameters[restIndex]), getNumberLiteralType(argIndex - restIndex), 256 /* Contextual */) :
+                getTypeAtPosition(signature, argIndex);
         }
         function getContextualTypeForSubstitutionExpression(template, substitutionExpression) {
-            if (template.parent.kind === 206 /* TaggedTemplateExpression */) {
+            if (template.parent.kind === 208 /* TaggedTemplateExpression */) {
                 return getContextualTypeForArgument(template.parent, substitutionExpression);
             }
             return undefined;
@@ -67780,10 +69035,10 @@
             var binaryExpression = node.parent;
             var left = binaryExpression.left, operatorToken = binaryExpression.operatorToken, right = binaryExpression.right;
             switch (operatorToken.kind) {
-                case 62 /* EqualsToken */:
-                case 75 /* AmpersandAmpersandEqualsToken */:
-                case 74 /* BarBarEqualsToken */:
-                case 76 /* QuestionQuestionEqualsToken */:
+                case 63 /* EqualsToken */:
+                case 76 /* AmpersandAmpersandEqualsToken */:
+                case 75 /* BarBarEqualsToken */:
+                case 77 /* QuestionQuestionEqualsToken */:
                     return node === right ? getContextualTypeForAssignmentDeclaration(binaryExpression) : undefined;
                 case 56 /* BarBarToken */:
                 case 60 /* QuestionQuestionToken */:
@@ -67802,6 +69057,27 @@
                     return undefined;
             }
         }
+        /**
+         * Try to find a resolved symbol for an expression without also resolving its type, as
+         * getSymbolAtLocation would (as that could be reentrant into contextual typing)
+         */
+        function getSymbolForExpression(e) {
+            if (e.symbol) {
+                return e.symbol;
+            }
+            if (ts.isIdentifier(e)) {
+                return getResolvedSymbol(e);
+            }
+            if (ts.isPropertyAccessExpression(e)) {
+                var lhsType = getTypeOfExpression(e.expression);
+                return ts.isPrivateIdentifier(e.name) ? tryGetPrivateIdentifierPropertyOfType(lhsType, e.name) : getPropertyOfType(lhsType, e.name.escapedText);
+            }
+            return undefined;
+            function tryGetPrivateIdentifierPropertyOfType(type, id) {
+                var lexicallyScopedSymbol = lookupSymbolForPrivateIdentifierDeclaration(id.escapedText, id);
+                return lexicallyScopedSymbol && getPrivateIdentifierPropertyOfType(type, lexicallyScopedSymbol);
+            }
+        }
         // In an assignment expression, the right operand is contextually typed by the type of the left operand.
         // Don't do this for assignment declarations unless there is a type tag on the assignment, to avoid circularity from checking the right operand.
         function getContextualTypeForAssignmentDeclaration(binaryExpression) {
@@ -67809,8 +69085,19 @@
             var kind = ts.getAssignmentDeclarationKind(binaryExpression);
             switch (kind) {
                 case 0 /* None */:
-                    return getTypeOfExpression(binaryExpression.left);
                 case 4 /* ThisProperty */:
+                    var lhsSymbol = getSymbolForExpression(binaryExpression.left);
+                    var decl = lhsSymbol && lhsSymbol.valueDeclaration;
+                    // Unannotated, uninitialized property declarations have a type implied by their usage in the constructor.
+                    // We avoid calling back into `getTypeOfExpression` and reentering contextual typing to avoid a bogus circularity error in that case.
+                    if (decl && (ts.isPropertyDeclaration(decl) || ts.isPropertySignature(decl))) {
+                        var overallAnnotation = ts.getEffectiveTypeAnnotationNode(decl);
+                        return (overallAnnotation && instantiateType(getTypeFromTypeNode(overallAnnotation), getSymbolLinks(lhsSymbol).mapper)) ||
+                            (decl.initializer && getTypeOfExpression(binaryExpression.left));
+                    }
+                    if (kind === 0 /* None */) {
+                        return getTypeOfExpression(binaryExpression.left);
+                    }
                     return getContextualTypeForThisPropertyAssignment(binaryExpression);
                 case 5 /* Property */:
                     if (isPossiblyAliasedThisProperty(binaryExpression, kind)) {
@@ -67822,12 +69109,12 @@
                         return getTypeOfExpression(binaryExpression.left);
                     }
                     else {
-                        var decl = binaryExpression.left.symbol.valueDeclaration;
-                        if (!decl) {
+                        var decl_1 = binaryExpression.left.symbol.valueDeclaration;
+                        if (!decl_1) {
                             return undefined;
                         }
                         var lhs = ts.cast(binaryExpression.left, ts.isAccessExpression);
-                        var overallAnnotation = ts.getEffectiveTypeAnnotationNode(decl);
+                        var overallAnnotation = ts.getEffectiveTypeAnnotationNode(decl_1);
                         if (overallAnnotation) {
                             return getTypeFromTypeNode(overallAnnotation);
                         }
@@ -67845,7 +69132,7 @@
                                 return undefined;
                             }
                         }
-                        return ts.isInJSFile(decl) ? undefined : getTypeOfExpression(binaryExpression.left);
+                        return ts.isInJSFile(decl_1) ? undefined : getTypeOfExpression(binaryExpression.left);
                     }
                 case 1 /* ExportsProperty */:
                 case 6 /* Prototype */:
@@ -67901,10 +69188,11 @@
         }
         function getTypeOfPropertyOfContextualType(type, name) {
             return mapType(type, function (t) {
+                var _a;
                 if (isGenericMappedType(t)) {
                     var constraint = getConstraintTypeFromMappedType(t);
                     var constraintOfConstraint = getBaseConstraintOfType(constraint) || constraint;
-                    var propertyNameType = getLiteralType(ts.unescapeLeadingUnderscores(name));
+                    var propertyNameType = getStringLiteralType(ts.unescapeLeadingUnderscores(name));
                     if (isTypeAssignableTo(propertyNameType, constraintOfConstraint)) {
                         return substituteIndexedMappedType(t, propertyNameType);
                     }
@@ -67920,15 +69208,11 @@
                             return restType;
                         }
                     }
-                    return isNumericLiteralName(name) && getIndexTypeOfContextualType(t, 1 /* Number */) ||
-                        getIndexTypeOfContextualType(t, 0 /* String */);
+                    return (_a = findApplicableIndexInfo(getIndexInfosOfStructuredType(t), getStringLiteralType(ts.unescapeLeadingUnderscores(name)))) === null || _a === void 0 ? void 0 : _a.type;
                 }
                 return undefined;
             }, /*noReductions*/ true);
         }
-        function getIndexTypeOfContextualType(type, kind) {
-            return mapType(type, function (t) { return getIndexTypeOfStructuredType(t, kind); }, /*noReductions*/ true);
-        }
         // In an object literal contextually typed by a type T, the contextual type of a property assignment is the type of
         // the matching property in T, if one exists. Otherwise, it is the type of the numeric index signature in T, if one
         // exists. Otherwise, it is the type of the string index signature in T, if one exists.
@@ -67952,14 +69236,13 @@
                     // For a (non-symbol) computed property, there is no reason to look up the name
                     // in the type. It will just be "__computed", which does not appear in any
                     // SymbolTable.
-                    var symbolName_3 = getSymbolOfNode(element).escapedName;
-                    var propertyType = getTypeOfPropertyOfContextualType(type, symbolName_3);
-                    if (propertyType) {
-                        return propertyType;
-                    }
+                    return getTypeOfPropertyOfContextualType(type, getSymbolOfNode(element).escapedName);
                 }
-                return isNumericName(element.name) && getIndexTypeOfContextualType(type, 1 /* Number */) ||
-                    getIndexTypeOfContextualType(type, 0 /* String */);
+                if (element.name) {
+                    var nameType_1 = getLiteralTypeFromPropertyName(element.name);
+                    // We avoid calling getApplicableIndexInfo here because it performs potentially expensive intersection reduction.
+                    return mapType(type, function (t) { var _a; return (_a = findApplicableIndexInfo(getIndexInfosOfStructuredType(t), nameType_1)) === null || _a === void 0 ? void 0 : _a.type; }, /*noReductions*/ true);
+                }
             }
             return undefined;
         }
@@ -67989,7 +69272,7 @@
             var childFieldType = getTypeOfPropertyOfContextualType(attributesType, jsxChildrenPropertyName);
             return childFieldType && (realChildren.length === 1 ? childFieldType : mapType(childFieldType, function (t) {
                 if (isArrayLikeType(t)) {
-                    return getIndexedAccessType(t, getLiteralType(childIndex));
+                    return getIndexedAccessType(t, getNumberLiteralType(childIndex));
                 }
                 else {
                     return t;
@@ -68028,25 +69311,25 @@
                 case 8 /* NumericLiteral */:
                 case 9 /* BigIntLiteral */:
                 case 14 /* NoSubstitutionTemplateLiteral */:
-                case 109 /* TrueKeyword */:
-                case 94 /* FalseKeyword */:
-                case 103 /* NullKeyword */:
-                case 78 /* Identifier */:
-                case 150 /* UndefinedKeyword */:
+                case 110 /* TrueKeyword */:
+                case 95 /* FalseKeyword */:
+                case 104 /* NullKeyword */:
+                case 79 /* Identifier */:
+                case 151 /* UndefinedKeyword */:
                     return true;
-                case 202 /* PropertyAccessExpression */:
-                case 208 /* ParenthesizedExpression */:
+                case 204 /* PropertyAccessExpression */:
+                case 210 /* ParenthesizedExpression */:
                     return isPossiblyDiscriminantValue(node.expression);
-                case 284 /* JsxExpression */:
+                case 286 /* JsxExpression */:
                     return !node.expression || isPossiblyDiscriminantValue(node.expression);
             }
             return false;
         }
         function discriminateContextualTypeByObjectMembers(node, contextualType) {
-            return getMatchingUnionConstituentForObjectLiteral(contextualType, node) || discriminateTypeByDiscriminableItems(contextualType, ts.concatenate(ts.map(ts.filter(node.properties, function (p) { return !!p.symbol && p.kind === 289 /* PropertyAssignment */ && isPossiblyDiscriminantValue(p.initializer) && isDiscriminantProperty(contextualType, p.symbol.escapedName); }), function (prop) { return [function () { return getContextFreeTypeOfExpression(prop.initializer); }, prop.symbol.escapedName]; }), ts.map(ts.filter(getPropertiesOfType(contextualType), function (s) { var _a; return !!(s.flags & 16777216 /* Optional */) && !!((_a = node === null || node === void 0 ? void 0 : node.symbol) === null || _a === void 0 ? void 0 : _a.members) && !node.symbol.members.has(s.escapedName) && isDiscriminantProperty(contextualType, s.escapedName); }), function (s) { return [function () { return undefinedType; }, s.escapedName]; })), isTypeAssignableTo, contextualType);
+            return getMatchingUnionConstituentForObjectLiteral(contextualType, node) || discriminateTypeByDiscriminableItems(contextualType, ts.concatenate(ts.map(ts.filter(node.properties, function (p) { return !!p.symbol && p.kind === 291 /* PropertyAssignment */ && isPossiblyDiscriminantValue(p.initializer) && isDiscriminantProperty(contextualType, p.symbol.escapedName); }), function (prop) { return [function () { return getContextFreeTypeOfExpression(prop.initializer); }, prop.symbol.escapedName]; }), ts.map(ts.filter(getPropertiesOfType(contextualType), function (s) { var _a; return !!(s.flags & 16777216 /* Optional */) && !!((_a = node === null || node === void 0 ? void 0 : node.symbol) === null || _a === void 0 ? void 0 : _a.members) && !node.symbol.members.has(s.escapedName) && isDiscriminantProperty(contextualType, s.escapedName); }), function (s) { return [function () { return undefinedType; }, s.escapedName]; })), isTypeAssignableTo, contextualType);
         }
         function discriminateContextualTypeByJSXAttributes(node, contextualType) {
-            return discriminateTypeByDiscriminableItems(contextualType, ts.concatenate(ts.map(ts.filter(node.properties, function (p) { return !!p.symbol && p.kind === 281 /* JsxAttribute */ && isDiscriminantProperty(contextualType, p.symbol.escapedName) && (!p.initializer || isPossiblyDiscriminantValue(p.initializer)); }), function (prop) { return [!prop.initializer ? (function () { return trueType; }) : (function () { return checkExpression(prop.initializer); }), prop.symbol.escapedName]; }), ts.map(ts.filter(getPropertiesOfType(contextualType), function (s) { var _a; return !!(s.flags & 16777216 /* Optional */) && !!((_a = node === null || node === void 0 ? void 0 : node.symbol) === null || _a === void 0 ? void 0 : _a.members) && !node.symbol.members.has(s.escapedName) && isDiscriminantProperty(contextualType, s.escapedName); }), function (s) { return [function () { return undefinedType; }, s.escapedName]; })), isTypeAssignableTo, contextualType);
+            return discriminateTypeByDiscriminableItems(contextualType, ts.concatenate(ts.map(ts.filter(node.properties, function (p) { return !!p.symbol && p.kind === 283 /* JsxAttribute */ && isDiscriminantProperty(contextualType, p.symbol.escapedName) && (!p.initializer || isPossiblyDiscriminantValue(p.initializer)); }), function (prop) { return [!prop.initializer ? (function () { return trueType; }) : (function () { return checkExpression(prop.initializer); }), prop.symbol.escapedName]; }), ts.map(ts.filter(getPropertiesOfType(contextualType), function (s) { var _a; return !!(s.flags & 16777216 /* Optional */) && !!((_a = node === null || node === void 0 ? void 0 : node.symbol) === null || _a === void 0 ? void 0 : _a.members) && !node.symbol.members.has(s.escapedName) && isDiscriminantProperty(contextualType, s.escapedName); }), function (s) { return [function () { return undefinedType; }, s.escapedName]; })), isTypeAssignableTo, contextualType);
         }
         // Return the contextual type for a given expression node. During overload resolution, a contextual type may temporarily
         // be "pushed" onto a node using the contextualType property.
@@ -68126,60 +69409,60 @@
             }
             var parent = node.parent;
             switch (parent.kind) {
-                case 250 /* VariableDeclaration */:
-                case 161 /* Parameter */:
-                case 164 /* PropertyDeclaration */:
-                case 163 /* PropertySignature */:
-                case 199 /* BindingElement */:
+                case 252 /* VariableDeclaration */:
+                case 162 /* Parameter */:
+                case 165 /* PropertyDeclaration */:
+                case 164 /* PropertySignature */:
+                case 201 /* BindingElement */:
                     return getContextualTypeForInitializerExpression(node, contextFlags);
-                case 210 /* ArrowFunction */:
-                case 243 /* ReturnStatement */:
+                case 212 /* ArrowFunction */:
+                case 245 /* ReturnStatement */:
                     return getContextualTypeForReturnExpression(node);
-                case 220 /* YieldExpression */:
+                case 222 /* YieldExpression */:
                     return getContextualTypeForYieldOperand(parent);
-                case 214 /* AwaitExpression */:
+                case 216 /* AwaitExpression */:
                     return getContextualTypeForAwaitOperand(parent, contextFlags);
-                case 204 /* CallExpression */:
-                    if (parent.expression.kind === 99 /* ImportKeyword */) {
+                case 206 /* CallExpression */:
+                    if (parent.expression.kind === 100 /* ImportKeyword */) {
                         return stringType;
                     }
                 /* falls through */
-                case 205 /* NewExpression */:
+                case 207 /* NewExpression */:
                     return getContextualTypeForArgument(parent, node);
-                case 207 /* TypeAssertionExpression */:
-                case 225 /* AsExpression */:
+                case 209 /* TypeAssertionExpression */:
+                case 227 /* AsExpression */:
                     return ts.isConstTypeReference(parent.type) ? tryFindWhenConstTypeReference(parent) : getTypeFromTypeNode(parent.type);
-                case 217 /* BinaryExpression */:
+                case 219 /* BinaryExpression */:
                     return getContextualTypeForBinaryOperand(node, contextFlags);
-                case 289 /* PropertyAssignment */:
-                case 290 /* ShorthandPropertyAssignment */:
+                case 291 /* PropertyAssignment */:
+                case 292 /* ShorthandPropertyAssignment */:
                     return getContextualTypeForObjectLiteralElement(parent, contextFlags);
-                case 291 /* SpreadAssignment */:
+                case 293 /* SpreadAssignment */:
                     return getContextualType(parent.parent, contextFlags);
-                case 200 /* ArrayLiteralExpression */: {
+                case 202 /* ArrayLiteralExpression */: {
                     var arrayLiteral = parent;
                     var type = getApparentTypeOfContextualType(arrayLiteral, contextFlags);
                     return getContextualTypeForElementExpression(type, ts.indexOfNode(arrayLiteral.elements, node));
                 }
-                case 218 /* ConditionalExpression */:
+                case 220 /* ConditionalExpression */:
                     return getContextualTypeForConditionalOperand(node, contextFlags);
-                case 229 /* TemplateSpan */:
-                    ts.Debug.assert(parent.parent.kind === 219 /* TemplateExpression */);
+                case 231 /* TemplateSpan */:
+                    ts.Debug.assert(parent.parent.kind === 221 /* TemplateExpression */);
                     return getContextualTypeForSubstitutionExpression(parent.parent, node);
-                case 208 /* ParenthesizedExpression */: {
+                case 210 /* ParenthesizedExpression */: {
                     // Like in `checkParenthesizedExpression`, an `/** @type {xyz} */` comment before a parenthesized expression acts as a type cast.
                     var tag = ts.isInJSFile(parent) ? ts.getJSDocTypeTag(parent) : undefined;
                     return tag ? getTypeFromTypeNode(tag.typeExpression.type) : getContextualType(parent, contextFlags);
                 }
-                case 226 /* NonNullExpression */:
+                case 228 /* NonNullExpression */:
                     return getContextualType(parent, contextFlags);
-                case 284 /* JsxExpression */:
+                case 286 /* JsxExpression */:
                     return getContextualTypeForJsxExpression(parent);
-                case 281 /* JsxAttribute */:
-                case 283 /* JsxSpreadAttribute */:
+                case 283 /* JsxAttribute */:
+                case 285 /* JsxSpreadAttribute */:
                     return getContextualTypeForJsxAttribute(parent);
-                case 276 /* JsxOpeningElement */:
-                case 275 /* JsxSelfClosingElement */:
+                case 278 /* JsxOpeningElement */:
+                case 277 /* JsxSelfClosingElement */:
                     return getContextualJsxElementAttributesType(parent, contextFlags);
             }
             return undefined;
@@ -68419,7 +69702,7 @@
             return !hasEffectiveRestParameter(signature) && getParameterCount(signature) < targetParameterCount;
         }
         function isFunctionExpressionOrArrowFunction(node) {
-            return node.kind === 209 /* FunctionExpression */ || node.kind === 210 /* ArrowFunction */;
+            return node.kind === 211 /* FunctionExpression */ || node.kind === 212 /* ArrowFunction */;
         }
         function getContextualSignatureForFunctionLikeDeclaration(node) {
             // Only function expressions, arrow functions, and object literal methods are contextually typed.
@@ -68433,7 +69716,7 @@
         // all identical ignoring their return type, the result is same signature but with return type as
         // union type of return types from these signatures
         function getContextualSignature(node) {
-            ts.Debug.assert(node.kind !== 166 /* MethodDeclaration */ || ts.isObjectLiteralMethod(node));
+            ts.Debug.assert(node.kind !== 167 /* MethodDeclaration */ || ts.isObjectLiteralMethod(node));
             var typeTagSignature = getSignatureOfTypeTag(node);
             if (typeTagSignature) {
                 return typeTagSignature;
@@ -68447,8 +69730,8 @@
             }
             var signatureList;
             var types = type.types;
-            for (var _i = 0, types_20 = types; _i < types_20.length; _i++) {
-                var current = types_20[_i];
+            for (var _i = 0, types_19 = types; _i < types_19.length; _i++) {
+                var current = types_19[_i];
                 var signature = getContextualCallSignature(current, node);
                 if (signature) {
                     if (!signatureList) {
@@ -68481,8 +69764,8 @@
             return node.isSpread ? getIndexedAccessType(node.type, numberType) : node.type;
         }
         function hasDefaultValue(node) {
-            return (node.kind === 199 /* BindingElement */ && !!node.initializer) ||
-                (node.kind === 217 /* BinaryExpression */ && node.operatorToken.kind === 62 /* EqualsToken */);
+            return (node.kind === 201 /* BindingElement */ && !!node.initializer) ||
+                (node.kind === 219 /* BinaryExpression */ && node.operatorToken.kind === 63 /* EqualsToken */);
         }
         function checkArrayLiteral(node, checkMode, forceTuple) {
             var elements = node.elements;
@@ -68492,9 +69775,10 @@
             var contextualType = getApparentTypeOfContextualType(node);
             var inDestructuringPattern = ts.isAssignmentTarget(node);
             var inConstContext = isConstContext(node);
+            var hasOmittedExpression = false;
             for (var i = 0; i < elementCount; i++) {
                 var e = elements[i];
-                if (e.kind === 221 /* SpreadElement */) {
+                if (e.kind === 223 /* SpreadElement */) {
                     if (languageVersion < 2 /* ES2015 */) {
                         checkExternalEmitHelpers(e, compilerOptions.downlevelIteration ? 1536 /* SpreadIncludes */ : 1024 /* SpreadArray */);
                     }
@@ -68516,7 +69800,7 @@
                         // get the contextual element type from it. So we do something similar to
                         // getContextualTypeForElementExpression, which will crucially not error
                         // if there is no index type / iterated type.
-                        var restElementType = getIndexTypeOfType(spreadType, 1 /* Number */) ||
+                        var restElementType = getIndexTypeOfType(spreadType, numberType) ||
                             getIteratedTypeOrElementType(65 /* Destructuring */, spreadType, undefinedType, /*errorNode*/ undefined, /*checkAssignability*/ false) ||
                             unknownType;
                         elementTypes.push(restElementType);
@@ -68527,11 +69811,16 @@
                         elementFlags.push(4 /* Rest */);
                     }
                 }
+                else if (exactOptionalPropertyTypes && e.kind === 225 /* OmittedExpression */) {
+                    hasOmittedExpression = true;
+                    elementTypes.push(missingType);
+                    elementFlags.push(2 /* Optional */);
+                }
                 else {
                     var elementContextualType = getContextualTypeForElementExpression(contextualType, elementTypes.length);
                     var type = checkExpressionForMutableLocation(e, checkMode, elementContextualType, forceTuple);
-                    elementTypes.push(type);
-                    elementFlags.push(1 /* Required */);
+                    elementTypes.push(addOptionality(type, /*isProperty*/ true, hasOmittedExpression));
+                    elementFlags.push(hasOmittedExpression ? 2 /* Optional */ : 1 /* Required */);
                 }
             }
             if (inDestructuringPattern) {
@@ -68557,9 +69846,9 @@
         }
         function isNumericName(name) {
             switch (name.kind) {
-                case 159 /* ComputedPropertyName */:
+                case 160 /* ComputedPropertyName */:
                     return isNumericComputedName(name);
-                case 78 /* Identifier */:
+                case 79 /* Identifier */:
                     return isNumericLiteralName(name.escapedText);
                 case 8 /* NumericLiteral */:
                 case 10 /* StringLiteral */:
@@ -68573,9 +69862,6 @@
             // but this behavior is consistent with checkIndexedAccess
             return isTypeAssignableToKind(checkComputedPropertyName(name), 296 /* NumberLike */);
         }
-        function isInfinityOrNaNString(name) {
-            return name === "Infinity" || name === "-Infinity" || name === "NaN";
-        }
         function isNumericLiteralName(name) {
             // The intent of numeric names is that
             //     - they are names with text in a numeric form, and that
@@ -68633,15 +69919,24 @@
             var firstDecl = (_a = symbol.declarations) === null || _a === void 0 ? void 0 : _a[0];
             return isNumericLiteralName(symbol.escapedName) || (firstDecl && ts.isNamedDeclaration(firstDecl) && isNumericName(firstDecl.name));
         }
-        function getObjectLiteralIndexInfo(node, offset, properties, kind) {
+        function isSymbolWithSymbolName(symbol) {
+            var _a;
+            var firstDecl = (_a = symbol.declarations) === null || _a === void 0 ? void 0 : _a[0];
+            return ts.isKnownSymbol(symbol) || (firstDecl && ts.isNamedDeclaration(firstDecl) && ts.isComputedPropertyName(firstDecl.name) &&
+                isTypeAssignableToKind(checkComputedPropertyName(firstDecl.name), 4096 /* ESSymbol */));
+        }
+        function getObjectLiteralIndexInfo(node, offset, properties, keyType) {
             var propTypes = [];
             for (var i = offset; i < properties.length; i++) {
-                if (kind === 0 /* String */ || isSymbolWithNumericName(properties[i])) {
+                var prop = properties[i];
+                if (keyType === stringType && !isSymbolWithSymbolName(prop) ||
+                    keyType === numberType && isSymbolWithNumericName(prop) ||
+                    keyType === esSymbolType && isSymbolWithSymbolName(prop)) {
                     propTypes.push(getTypeOfSymbol(properties[i]));
                 }
             }
             var unionType = propTypes.length ? getUnionType(propTypes, 2 /* Subtype */) : undefinedType;
-            return createIndexInfo(unionType, isConstContext(node));
+            return createIndexInfo(keyType, unionType, isConstContext(node));
         }
         function getImmediateAliasedSymbol(symbol) {
             ts.Debug.assert((symbol.flags & 2097152 /* Alias */) !== 0, "Should only get Alias here.");
@@ -68664,7 +69959,7 @@
             var spread = emptyObjectType;
             var contextualType = getApparentTypeOfContextualType(node);
             var contextualTypeHasPattern = contextualType && contextualType.pattern &&
-                (contextualType.pattern.kind === 197 /* ObjectBindingPattern */ || contextualType.pattern.kind === 201 /* ObjectLiteralExpression */);
+                (contextualType.pattern.kind === 199 /* ObjectBindingPattern */ || contextualType.pattern.kind === 203 /* ObjectLiteralExpression */);
             var inConstContext = isConstContext(node);
             var checkFlags = inConstContext ? 8 /* Readonly */ : 0;
             var isInJavascript = ts.isInJSFile(node) && !ts.isInJsonFile(node);
@@ -68674,6 +69969,7 @@
             var patternWithComputedProperties = false;
             var hasComputedStringProperty = false;
             var hasComputedNumberProperty = false;
+            var hasComputedSymbolProperty = false;
             // Spreads may cause an early bail; ensure computed names are always checked (this is cached)
             // As otherwise they may not be checked until exports for the type at this position are retrieved,
             // which may never occur.
@@ -68687,16 +69983,16 @@
             for (var _b = 0, _c = node.properties; _b < _c.length; _b++) {
                 var memberDecl = _c[_b];
                 var member = getSymbolOfNode(memberDecl);
-                var computedNameType = memberDecl.name && memberDecl.name.kind === 159 /* ComputedPropertyName */ ?
+                var computedNameType = memberDecl.name && memberDecl.name.kind === 160 /* ComputedPropertyName */ ?
                     checkComputedPropertyName(memberDecl.name) : undefined;
-                if (memberDecl.kind === 289 /* PropertyAssignment */ ||
-                    memberDecl.kind === 290 /* ShorthandPropertyAssignment */ ||
+                if (memberDecl.kind === 291 /* PropertyAssignment */ ||
+                    memberDecl.kind === 292 /* ShorthandPropertyAssignment */ ||
                     ts.isObjectLiteralMethod(memberDecl)) {
-                    var type = memberDecl.kind === 289 /* PropertyAssignment */ ? checkPropertyAssignment(memberDecl, checkMode) :
+                    var type = memberDecl.kind === 291 /* PropertyAssignment */ ? checkPropertyAssignment(memberDecl, checkMode) :
                         // avoid resolving the left side of the ShorthandPropertyAssignment outside of the destructuring
                         // for error recovery purposes. For example, if a user wrote `{ a = 100 }` instead of `{ a: 100 }`.
                         // we don't want to say "could not find 'a'".
-                        memberDecl.kind === 290 /* ShorthandPropertyAssignment */ ? checkExpressionForMutableLocation(!inDestructuringPattern && memberDecl.objectAssignmentInitializer ? memberDecl.objectAssignmentInitializer : memberDecl.name, checkMode) :
+                        memberDecl.kind === 292 /* ShorthandPropertyAssignment */ ? checkExpressionForMutableLocation(!inDestructuringPattern && memberDecl.objectAssignmentInitializer ? memberDecl.objectAssignmentInitializer : memberDecl.name, checkMode) :
                             checkObjectLiteralMethod(memberDecl, checkMode);
                     if (isInJavascript) {
                         var jsDocType = getTypeForDeclarationFromJSDocComment(memberDecl);
@@ -68719,8 +70015,8 @@
                     if (inDestructuringPattern) {
                         // If object literal is an assignment pattern and if the assignment pattern specifies a default value
                         // for the property, make the property optional.
-                        var isOptional = (memberDecl.kind === 289 /* PropertyAssignment */ && hasDefaultValue(memberDecl.initializer)) ||
-                            (memberDecl.kind === 290 /* ShorthandPropertyAssignment */ && memberDecl.objectAssignmentInitializer);
+                        var isOptional = (memberDecl.kind === 291 /* PropertyAssignment */ && hasDefaultValue(memberDecl.initializer)) ||
+                            (memberDecl.kind === 292 /* ShorthandPropertyAssignment */ && memberDecl.objectAssignmentInitializer);
                         if (isOptional) {
                             prop.flags |= 16777216 /* Optional */;
                         }
@@ -68732,7 +70028,7 @@
                         if (impliedProp) {
                             prop.flags |= impliedProp.flags & 16777216 /* Optional */;
                         }
-                        else if (!compilerOptions.suppressExcessPropertyErrors && !getIndexInfoOfType(contextualType, 0 /* String */)) {
+                        else if (!compilerOptions.suppressExcessPropertyErrors && !getIndexInfoOfType(contextualType, stringType)) {
                             error(memberDecl.name, ts.Diagnostics.Object_literal_may_only_specify_known_properties_and_0_does_not_exist_in_type_1, symbolToString(member), typeToString(contextualType));
                         }
                     }
@@ -68746,7 +70042,7 @@
                     member = prop;
                     allPropertiesTable === null || allPropertiesTable === void 0 ? void 0 : allPropertiesTable.set(prop.escapedName, prop);
                 }
-                else if (memberDecl.kind === 291 /* SpreadAssignment */) {
+                else if (memberDecl.kind === 293 /* SpreadAssignment */) {
                     if (languageVersion < 2 /* ES2015 */) {
                         checkExternalEmitHelpers(memberDecl, 2 /* Assign */);
                     }
@@ -68756,17 +70052,19 @@
                         propertiesTable = ts.createSymbolTable();
                         hasComputedStringProperty = false;
                         hasComputedNumberProperty = false;
+                        hasComputedSymbolProperty = false;
                     }
                     var type = getReducedType(checkExpression(memberDecl.expression));
                     if (isValidSpreadType(type)) {
+                        var mergedType = tryMergeUnionOfObjectTypeAndEmptyObject(type, inConstContext);
                         if (allPropertiesTable) {
-                            checkSpreadPropOverrides(type, allPropertiesTable, memberDecl);
+                            checkSpreadPropOverrides(mergedType, allPropertiesTable, memberDecl);
                         }
                         offset = propertiesArray.length;
                         if (spread === errorType) {
                             continue;
                         }
-                        spread = getSpreadType(spread, type, node.symbol, objectFlags, inConstContext);
+                        spread = getSpreadType(spread, mergedType, node.symbol, objectFlags, inConstContext);
                     }
                     else {
                         error(memberDecl, ts.Diagnostics.Spread_types_may_only_be_created_from_object_types);
@@ -68780,7 +70078,7 @@
                     // an ordinary function declaration(section 6.1) with no parameters.
                     // A set accessor declaration is processed in the same manner
                     // as an ordinary function declaration with a single parameter and a Void return type.
-                    ts.Debug.assert(memberDecl.kind === 168 /* GetAccessor */ || memberDecl.kind === 169 /* SetAccessor */);
+                    ts.Debug.assert(memberDecl.kind === 170 /* GetAccessor */ || memberDecl.kind === 171 /* SetAccessor */);
                     checkNodeDeferred(memberDecl);
                 }
                 if (computedNameType && !(computedNameType.flags & 8576 /* StringOrNumberLiteralOrUnique */)) {
@@ -68788,6 +70086,9 @@
                         if (isTypeAssignableTo(computedNameType, numberType)) {
                             hasComputedNumberProperty = true;
                         }
+                        else if (isTypeAssignableTo(computedNameType, esSymbolType)) {
+                            hasComputedSymbolProperty = true;
+                        }
                         else {
                             hasComputedStringProperty = true;
                         }
@@ -68805,7 +70106,7 @@
             // type with those properties for which the binding pattern specifies a default value.
             // If the object literal is spread into another object literal, skip this step and let the top-level object
             // literal handle it instead.
-            if (contextualTypeHasPattern && node.parent.kind !== 291 /* SpreadAssignment */) {
+            if (contextualTypeHasPattern && node.parent.kind !== 293 /* SpreadAssignment */) {
                 for (var _d = 0, _e = getPropertiesOfType(contextualType); _d < _e.length; _d++) {
                     var prop = _e[_d];
                     if (!propertiesTable.get(prop.escapedName) && !getPropertyOfType(spread, prop.escapedName)) {
@@ -68833,9 +70134,14 @@
             }
             return createObjectLiteralType();
             function createObjectLiteralType() {
-                var stringIndexInfo = hasComputedStringProperty ? getObjectLiteralIndexInfo(node, offset, propertiesArray, 0 /* String */) : undefined;
-                var numberIndexInfo = hasComputedNumberProperty ? getObjectLiteralIndexInfo(node, offset, propertiesArray, 1 /* Number */) : undefined;
-                var result = createAnonymousType(node.symbol, propertiesTable, ts.emptyArray, ts.emptyArray, stringIndexInfo, numberIndexInfo);
+                var indexInfos = [];
+                if (hasComputedStringProperty)
+                    indexInfos.push(getObjectLiteralIndexInfo(node, offset, propertiesArray, stringType));
+                if (hasComputedNumberProperty)
+                    indexInfos.push(getObjectLiteralIndexInfo(node, offset, propertiesArray, numberType));
+                if (hasComputedSymbolProperty)
+                    indexInfos.push(getObjectLiteralIndexInfo(node, offset, propertiesArray, esSymbolType));
+                var result = createAnonymousType(node.symbol, propertiesTable, ts.emptyArray, ts.emptyArray, indexInfos);
                 result.objectFlags |= objectFlags | 128 /* ObjectLiteral */ | 262144 /* ContainsObjectOrArrayLiteral */;
                 if (isJSObjectLiteral) {
                     result.objectFlags |= 8192 /* JSLiteral */;
@@ -68897,14 +70203,14 @@
             checkJsxChildren(node);
             return getJsxElementTypeAt(node) || anyType;
         }
-        function isUnhyphenatedJsxName(name) {
-            return !ts.stringContains(name, "-");
+        function isHyphenatedJsxName(name) {
+            return ts.stringContains(name, "-");
         }
         /**
          * Returns true iff React would emit this tag name as a string rather than an identifier or qualified name
          */
         function isJsxIntrinsicIdentifier(tagName) {
-            return tagName.kind === 78 /* Identifier */ && ts.isIntrinsicJsxName(tagName.escapedText);
+            return tagName.kind === 79 /* Identifier */ && ts.isIntrinsicJsxName(tagName.escapedText);
         }
         function checkJsxAttribute(node, checkMode) {
             return node.initializer
@@ -68951,7 +70257,7 @@
                     }
                 }
                 else {
-                    ts.Debug.assert(attributeDecl.kind === 283 /* JsxSpreadAttribute */);
+                    ts.Debug.assert(attributeDecl.kind === 285 /* JsxSpreadAttribute */);
                     if (attributesTable.size > 0) {
                         spread = getSpreadType(spread, createJsxAttributesType(), attributes.symbol, objectFlags, /*readonly*/ false);
                         attributesTable = ts.createSymbolTable();
@@ -68977,7 +70283,7 @@
                 }
             }
             // Handle children attribute
-            var parent = openingLikeElement.parent.kind === 274 /* JsxElement */ ? openingLikeElement.parent : undefined;
+            var parent = openingLikeElement.parent.kind === 276 /* JsxElement */ ? openingLikeElement.parent : undefined;
             // We have to check that openingElement of the parent is the one we are visiting as this may not be true for selfClosingElement
             if (parent && parent.openingElement === openingLikeElement && parent.children.length > 0) {
                 var childrenTypes = checkJsxChildren(parent, checkMode);
@@ -69001,7 +70307,7 @@
                     childrenPropSymbol.valueDeclaration.symbol = childrenPropSymbol;
                     var childPropMap = ts.createSymbolTable();
                     childPropMap.set(jsxChildrenPropertyName, childrenPropSymbol);
-                    spread = getSpreadType(spread, createAnonymousType(attributes.symbol, childPropMap, ts.emptyArray, ts.emptyArray, /*stringIndexInfo*/ undefined, /*numberIndexInfo*/ undefined), attributes.symbol, objectFlags, /*readonly*/ false);
+                    spread = getSpreadType(spread, createAnonymousType(attributes.symbol, childPropMap, ts.emptyArray, ts.emptyArray, ts.emptyArray), attributes.symbol, objectFlags, /*readonly*/ false);
                 }
             }
             if (hasSpreadAnyType) {
@@ -69018,7 +70324,7 @@
              */
             function createJsxAttributesType() {
                 objectFlags |= freshObjectLiteralFlag;
-                var result = createAnonymousType(attributes.symbol, attributesTable, ts.emptyArray, ts.emptyArray, /*stringIndexInfo*/ undefined, /*numberIndexInfo*/ undefined);
+                var result = createAnonymousType(attributes.symbol, attributesTable, ts.emptyArray, ts.emptyArray, ts.emptyArray);
                 result.objectFlags |= objectFlags | 128 /* ObjectLiteral */ | 262144 /* ContainsObjectOrArrayLiteral */;
                 return result;
             }
@@ -69034,7 +70340,7 @@
                         childrenTypes.push(stringType);
                     }
                 }
-                else if (child.kind === 284 /* JsxExpression */ && !child.expression) {
+                else if (child.kind === 286 /* JsxExpression */ && !child.expression) {
                     continue; // empty jsx expressions don't *really* count as present children
                 }
                 else {
@@ -69046,11 +70352,12 @@
         function checkSpreadPropOverrides(type, props, spread) {
             for (var _i = 0, _a = getPropertiesOfType(type); _i < _a.length; _i++) {
                 var right = _a[_i];
-                var left = props.get(right.escapedName);
-                var rightType = getTypeOfSymbol(right);
-                if (left && !maybeTypeOfKind(rightType, 98304 /* Nullable */) && !(maybeTypeOfKind(rightType, 3 /* AnyOrUnknown */) && right.flags & 16777216 /* Optional */)) {
-                    var diagnostic = error(left.valueDeclaration, ts.Diagnostics._0_is_specified_more_than_once_so_this_usage_will_be_overwritten, ts.unescapeLeadingUnderscores(left.escapedName));
-                    ts.addRelatedInfo(diagnostic, ts.createDiagnosticForNode(spread, ts.Diagnostics.This_spread_always_overwrites_this_property));
+                if (!(right.flags & 16777216 /* Optional */)) {
+                    var left = props.get(right.escapedName);
+                    if (left) {
+                        var diagnostic = error(left.valueDeclaration, ts.Diagnostics._0_is_specified_more_than_once_so_this_usage_will_be_overwritten, ts.unescapeLeadingUnderscores(left.escapedName));
+                        ts.addRelatedInfo(diagnostic, ts.createDiagnosticForNode(spread, ts.Diagnostics.This_spread_always_overwrites_this_property));
+                    }
                 }
             }
         }
@@ -69088,7 +70395,7 @@
                         return links.resolvedSymbol = intrinsicProp;
                     }
                     // Intrinsic string indexer case
-                    var indexSignatureType = getIndexTypeOfType(intrinsicElementsType, 0 /* String */);
+                    var indexSignatureType = getIndexTypeOfType(intrinsicElementsType, stringType);
                     if (indexSignatureType) {
                         links.jsxFlags |= 2 /* IntrinsicIndexedElement */;
                         return links.resolvedSymbol = intrinsicElementsType.symbol;
@@ -69247,7 +70554,7 @@
                 if (intrinsicProp) {
                     return getTypeOfSymbol(intrinsicProp);
                 }
-                var indexSignatureType = getIndexTypeOfType(intrinsicElementsType, 0 /* String */);
+                var indexSignatureType = getIndexTypeOfType(intrinsicElementsType, stringType);
                 if (indexSignatureType) {
                     return indexSignatureType;
                 }
@@ -69299,7 +70606,7 @@
                 }
                 else if (links.jsxFlags & 2 /* IntrinsicIndexedElement */) {
                     return links.resolvedJsxElementAttributesType =
-                        getIndexTypeOfType(getJsxType(JsxNames.IntrinsicElements, node), 0 /* String */) || errorType;
+                        getIndexTypeOfType(getJsxType(JsxNames.IntrinsicElements, node), stringType) || errorType;
                 }
                 else {
                     return links.resolvedJsxElementAttributesType = errorType;
@@ -69389,11 +70696,13 @@
          */
         function isKnownProperty(targetType, name, isComparingJsxAttributes) {
             if (targetType.flags & 524288 /* Object */) {
-                var resolved = resolveStructuredTypeMembers(targetType);
-                if (resolved.stringIndexInfo ||
-                    resolved.numberIndexInfo && isNumericLiteralName(name) ||
-                    getPropertyOfObjectType(targetType, name) ||
-                    isComparingJsxAttributes && !isUnhyphenatedJsxName(name)) {
+                // For backwards compatibility a symbol-named property is satisfied by a string index signature. This
+                // is incorrect and inconsistent with element access expressions, where it is an error, so eventually
+                // we should remove this exception.
+                if (getPropertyOfObjectType(targetType, name) ||
+                    getApplicableIndexInfoForName(targetType, name) ||
+                    isLateBoundName(name) && getIndexInfoOfType(targetType, stringType) ||
+                    isComparingJsxAttributes && isHyphenatedJsxName(name)) {
                     // For JSXAttributes, if the attribute has a hyphenated name, consider that the attribute to be known.
                     return true;
                 }
@@ -69455,9 +70764,9 @@
         function checkPropertyAccessibility(node, isSuper, writing, type, prop, reportError) {
             if (reportError === void 0) { reportError = true; }
             var flags = ts.getDeclarationModifierFlagsFromSymbol(prop, writing);
-            var errorNode = node.kind === 158 /* QualifiedName */ ? node.right :
-                node.kind === 196 /* ImportType */ ? node :
-                    node.kind === 199 /* BindingElement */ && node.propertyName ? node.propertyName : node.name;
+            var errorNode = node.kind === 159 /* QualifiedName */ ? node.right :
+                node.kind === 198 /* ImportType */ ? node :
+                    node.kind === 201 /* BindingElement */ && node.propertyName ? node.propertyName : node.name;
             if (isSuper) {
                 // TS 1.0 spec (April 2014): 4.8.2
                 // - In a constructor, instance member function, instance member accessor, or
@@ -69614,10 +70923,11 @@
             return propagateOptionalTypeMarker(checkPropertyAccessExpressionOrQualifiedName(node, node.expression, checkNonNullType(nonOptionalType, node.expression), node.name, checkMode), node, nonOptionalType !== leftType);
         }
         function checkQualifiedName(node, checkMode) {
-            return checkPropertyAccessExpressionOrQualifiedName(node, node.left, checkNonNullExpression(node.left), node.right, checkMode);
+            var leftType = ts.isPartOfTypeQuery(node) && ts.isThisIdentifier(node.left) ? checkNonNullType(checkThisExpression(node.left), node.left) : checkNonNullExpression(node.left);
+            return checkPropertyAccessExpressionOrQualifiedName(node, node.left, leftType, node.right, checkMode);
         }
         function isMethodAccessForCall(node) {
-            while (node.parent.kind === 208 /* ParenthesizedExpression */) {
+            while (node.parent.kind === 210 /* ParenthesizedExpression */) {
                 node = node.parent;
             }
             return ts.isCallOrNewExpression(node.parent) && node.parent.expression === node;
@@ -69752,9 +71062,11 @@
             }
             var propType;
             if (!prop) {
-                var indexInfo = !ts.isPrivateIdentifier(right) && (assignmentKind === 0 /* None */ || !isGenericObjectType(leftType) || isThisTypeParameter(leftType)) ? getIndexInfoOfType(apparentType, 0 /* String */) : undefined;
+                var indexInfo = !ts.isPrivateIdentifier(right) && (assignmentKind === 0 /* None */ || !isGenericObjectType(leftType) || isThisTypeParameter(leftType)) ?
+                    getApplicableIndexInfoForName(apparentType, right.escapedText) : undefined;
                 if (!(indexInfo && indexInfo.type)) {
-                    if (isJSLiteralType(leftType)) {
+                    var isUncheckedJS = isUncheckedJSSuggestion(node, leftType.symbol, /*excludeClasses*/ true);
+                    if (!isUncheckedJS && isJSLiteralType(leftType)) {
                         return anyType;
                     }
                     if (leftType.symbol === globalThisSymbol) {
@@ -69767,7 +71079,7 @@
                         return anyType;
                     }
                     if (right.escapedText && !checkAndReportErrorForExtendingInterface(node)) {
-                        reportNonexistentProperty(right, isThisTypeParameter(leftType) ? apparentType : leftType);
+                        reportNonexistentProperty(right, isThisTypeParameter(leftType) ? apparentType : leftType, isUncheckedJS);
                     }
                     return errorType;
                 }
@@ -69787,7 +71099,7 @@
                 markPropertyAsReferenced(prop, node, isSelfTypeAccess(left, parentSymbol));
                 getNodeLinks(node).resolvedSymbol = prop;
                 var writing = ts.isWriteAccess(node);
-                checkPropertyAccessibility(node, left.kind === 105 /* SuperKeyword */, writing, apparentType, prop);
+                checkPropertyAccessibility(node, left.kind === 106 /* SuperKeyword */, writing, apparentType, prop);
                 if (isAssignmentToReadonlyEntity(node, prop, assignmentKind)) {
                     error(right, ts.Diagnostics.Cannot_assign_to_0_because_it_is_a_read_only_property, ts.idText(right));
                     return errorType;
@@ -69796,16 +71108,37 @@
             }
             return getFlowTypeOfAccessExpression(node, prop, propType, right, checkMode);
         }
+        /**
+         * Determines whether a did-you-mean error should be a suggestion in an unchecked JS file.
+         * Only applies to unchecked JS files without checkJS, // @ts-check or // @ts-nocheck
+         * It does not suggest when the suggestion:
+         * - Is from a global file that is different from the reference file, or
+         * - (optionally) Is a class, or is a this.x property access expression
+         */
+        function isUncheckedJSSuggestion(node, suggestion, excludeClasses) {
+            var file = ts.getSourceFileOfNode(node);
+            if (file) {
+                if (compilerOptions.checkJs === undefined && file.checkJsDirective === undefined && (file.scriptKind === 1 /* JS */ || file.scriptKind === 2 /* JSX */)) {
+                    var declarationFile = ts.forEach(suggestion === null || suggestion === void 0 ? void 0 : suggestion.declarations, ts.getSourceFileOfNode);
+                    return !(file !== declarationFile && !!declarationFile && isGlobalSourceFile(declarationFile))
+                        && !(excludeClasses && suggestion && suggestion.flags & 32 /* Class */)
+                        && !(!!node && excludeClasses && ts.isPropertyAccessExpression(node) && node.expression.kind === 108 /* ThisKeyword */);
+                }
+            }
+            return false;
+        }
         function getFlowTypeOfAccessExpression(node, prop, propType, errorNode, checkMode) {
             // Only compute control flow type if this is a property access expression that isn't an
             // assignment target, and the referenced property was declared as a variable, property,
             // accessor, or optional method.
             var assignmentKind = ts.getAssignmentTargetKind(node);
-            if (assignmentKind === 1 /* Definite */ ||
-                prop &&
-                    !(prop.flags & (3 /* Variable */ | 4 /* Property */ | 98304 /* Accessor */))
-                    && !(prop.flags & 8192 /* Method */ && propType.flags & 1048576 /* Union */)
-                    && !isDuplicatedCommonJSExport(prop.declarations)) {
+            if (assignmentKind === 1 /* Definite */) {
+                return removeMissingType(propType, !!(prop && prop.flags & 16777216 /* Optional */));
+            }
+            if (prop &&
+                !(prop.flags & (3 /* Variable */ | 4 /* Property */ | 98304 /* Accessor */))
+                && !(prop.flags & 8192 /* Method */ && propType.flags & 1048576 /* Union */)
+                && !isDuplicatedCommonJSExport(prop.declarations)) {
                 return propType;
             }
             if (propType === autoType) {
@@ -69817,12 +71150,14 @@
             // and if we are in a constructor of the same class as the property declaration, assume that
             // the property is uninitialized at the top of the control flow.
             var assumeUninitialized = false;
-            if (strictNullChecks && strictPropertyInitialization && ts.isAccessExpression(node) && node.expression.kind === 107 /* ThisKeyword */) {
+            if (strictNullChecks && strictPropertyInitialization && ts.isAccessExpression(node) && node.expression.kind === 108 /* ThisKeyword */) {
                 var declaration = prop && prop.valueDeclaration;
-                if (declaration && isInstancePropertyWithoutInitializer(declaration)) {
-                    var flowContainer = getControlFlowContainer(node);
-                    if (flowContainer.kind === 167 /* Constructor */ && flowContainer.parent === declaration.parent && !(declaration.flags & 8388608 /* Ambient */)) {
-                        assumeUninitialized = true;
+                if (declaration && isPropertyWithoutInitializer(declaration)) {
+                    if (!ts.isStatic(declaration)) {
+                        var flowContainer = getControlFlowContainer(node);
+                        if (flowContainer.kind === 169 /* Constructor */ && flowContainer.parent === declaration.parent && !(declaration.flags & 8388608 /* Ambient */)) {
+                            assumeUninitialized = true;
+                        }
                     }
                 }
             }
@@ -69847,15 +71182,15 @@
             }
             var diagnosticMessage;
             var declarationName = ts.idText(right);
-            if (isInPropertyInitializer(node)
+            if (isInPropertyInitializerOrClassStaticBlock(node)
                 && !isOptionalPropertyDeclaration(valueDeclaration)
                 && !(ts.isAccessExpression(node) && ts.isAccessExpression(node.expression))
                 && !isBlockScopedNameDeclaredBeforeUse(valueDeclaration, right)
                 && (compilerOptions.useDefineForClassFields || !isPropertyDeclaredInAncestorClass(prop))) {
                 diagnosticMessage = error(right, ts.Diagnostics.Property_0_is_used_before_its_initialization, declarationName);
             }
-            else if (valueDeclaration.kind === 253 /* ClassDeclaration */ &&
-                node.parent.kind !== 174 /* TypeReference */ &&
+            else if (valueDeclaration.kind === 255 /* ClassDeclaration */ &&
+                node.parent.kind !== 176 /* TypeReference */ &&
                 !(valueDeclaration.flags & 8388608 /* Ambient */) &&
                 !isBlockScopedNameDeclaredBeforeUse(valueDeclaration, right)) {
                 diagnosticMessage = error(right, ts.Diagnostics.Class_0_used_before_its_declaration, declarationName);
@@ -69864,26 +71199,29 @@
                 ts.addRelatedInfo(diagnosticMessage, ts.createDiagnosticForNode(valueDeclaration, ts.Diagnostics._0_is_declared_here, declarationName));
             }
         }
-        function isInPropertyInitializer(node) {
+        function isInPropertyInitializerOrClassStaticBlock(node) {
             return !!ts.findAncestor(node, function (node) {
                 switch (node.kind) {
-                    case 164 /* PropertyDeclaration */:
+                    case 165 /* PropertyDeclaration */:
                         return true;
-                    case 289 /* PropertyAssignment */:
-                    case 166 /* MethodDeclaration */:
-                    case 168 /* GetAccessor */:
-                    case 169 /* SetAccessor */:
-                    case 291 /* SpreadAssignment */:
-                    case 159 /* ComputedPropertyName */:
-                    case 229 /* TemplateSpan */:
-                    case 284 /* JsxExpression */:
-                    case 281 /* JsxAttribute */:
-                    case 282 /* JsxAttributes */:
-                    case 283 /* JsxSpreadAttribute */:
-                    case 276 /* JsxOpeningElement */:
-                    case 224 /* ExpressionWithTypeArguments */:
-                    case 287 /* HeritageClause */:
+                    case 291 /* PropertyAssignment */:
+                    case 167 /* MethodDeclaration */:
+                    case 170 /* GetAccessor */:
+                    case 171 /* SetAccessor */:
+                    case 293 /* SpreadAssignment */:
+                    case 160 /* ComputedPropertyName */:
+                    case 231 /* TemplateSpan */:
+                    case 286 /* JsxExpression */:
+                    case 283 /* JsxAttribute */:
+                    case 284 /* JsxAttributes */:
+                    case 285 /* JsxSpreadAttribute */:
+                    case 278 /* JsxOpeningElement */:
+                    case 226 /* ExpressionWithTypeArguments */:
+                    case 289 /* HeritageClause */:
                         return false;
+                    case 212 /* ArrowFunction */:
+                    case 236 /* ExpressionStatement */:
+                        return ts.isBlock(node.parent) && ts.isClassStaticBlockDeclaration(node.parent.parent) ? true : "quit";
                     default:
                         return ts.isExpressionNode(node) ? false : "quit";
                 }
@@ -69916,13 +71254,13 @@
             }
             return getIntersectionType(x);
         }
-        function reportNonexistentProperty(propNode, containingType) {
+        function reportNonexistentProperty(propNode, containingType, isUncheckedJS) {
             var errorInfo;
             var relatedInfo;
             if (!ts.isPrivateIdentifier(propNode) && containingType.flags & 1048576 /* Union */ && !(containingType.flags & 131068 /* Primitive */)) {
                 for (var _i = 0, _a = containingType.types; _i < _a.length; _i++) {
                     var subtype = _a[_i];
-                    if (!getPropertyOfType(subtype, propNode.escapedText) && !getIndexInfoOfType(subtype, 0 /* String */)) {
+                    if (!getPropertyOfType(subtype, propNode.escapedText) && !getApplicableIndexInfoForName(subtype, propNode.escapedText)) {
                         errorInfo = ts.chainDiagnosticMessages(errorInfo, ts.Diagnostics.Property_0_does_not_exist_on_type_1, ts.declarationNameToString(propNode), typeToString(subtype));
                         break;
                     }
@@ -69950,7 +71288,8 @@
                         var suggestion = getSuggestedSymbolForNonexistentProperty(propNode, containingType);
                         if (suggestion !== undefined) {
                             var suggestedName = ts.symbolName(suggestion);
-                            errorInfo = ts.chainDiagnosticMessages(errorInfo, ts.Diagnostics.Property_0_does_not_exist_on_type_1_Did_you_mean_2, missingProperty, container, suggestedName);
+                            var message = isUncheckedJS ? ts.Diagnostics.Property_0_may_not_exist_on_type_1_Did_you_mean_2 : ts.Diagnostics.Property_0_does_not_exist_on_type_1_Did_you_mean_2;
+                            errorInfo = ts.chainDiagnosticMessages(errorInfo, message, missingProperty, container, suggestedName);
                             relatedInfo = suggestion.valueDeclaration && ts.createDiagnosticForNode(suggestion.valueDeclaration, ts.Diagnostics._0_is_declared_here, suggestedName);
                         }
                         else {
@@ -69966,7 +71305,7 @@
             if (relatedInfo) {
                 ts.addRelatedInfo(resultDiagnostic, relatedInfo);
             }
-            diagnostics.add(resultDiagnostic);
+            addErrorOrSuggestion(!isUncheckedJS, resultDiagnostic);
         }
         function containerSeemsToBeEmptyDomElement(containingType) {
             return (compilerOptions.lib && !compilerOptions.lib.includes("dom")) &&
@@ -69975,7 +71314,7 @@
         }
         function typeHasStaticProperty(propName, containingType) {
             var prop = containingType.symbol && getPropertyOfType(getTypeOfSymbol(containingType.symbol), propName);
-            return prop !== undefined && !!prop.valueDeclaration && ts.hasSyntacticModifier(prop.valueDeclaration, 32 /* Static */);
+            return prop !== undefined && !!prop.valueDeclaration && ts.isStatic(prop.valueDeclaration);
         }
         function getSuggestedLibForNonExistentName(name) {
             var missingName = diagnosticName(name);
@@ -70005,6 +71344,9 @@
                 }
             }
         }
+        function getSuggestedSymbolForNonexistentClassMember(name, baseType) {
+            return getSpellingSuggestionForName(name, getPropertiesOfType(baseType), 106500 /* ClassMember */);
+        }
         function getSuggestedSymbolForNonexistentProperty(name, containingType) {
             var props = getPropertiesOfType(containingType);
             if (typeof name !== "string") {
@@ -70132,21 +71474,21 @@
             (ts.getCheckFlags(prop) & 1 /* Instantiated */ ? getSymbolLinks(prop).target : prop).isReferenced = 67108863 /* All */;
         }
         function isSelfTypeAccess(name, parent) {
-            return name.kind === 107 /* ThisKeyword */
+            return name.kind === 108 /* ThisKeyword */
                 || !!parent && ts.isEntityNameExpression(name) && parent === getResolvedSymbol(ts.getFirstIdentifier(name));
         }
         function isValidPropertyAccess(node, propertyName) {
             switch (node.kind) {
-                case 202 /* PropertyAccessExpression */:
-                    return isValidPropertyAccessWithType(node, node.expression.kind === 105 /* SuperKeyword */, propertyName, getWidenedType(checkExpression(node.expression)));
-                case 158 /* QualifiedName */:
+                case 204 /* PropertyAccessExpression */:
+                    return isValidPropertyAccessWithType(node, node.expression.kind === 106 /* SuperKeyword */, propertyName, getWidenedType(checkExpression(node.expression)));
+                case 159 /* QualifiedName */:
                     return isValidPropertyAccessWithType(node, /*isSuper*/ false, propertyName, getWidenedType(checkExpression(node.left)));
-                case 196 /* ImportType */:
+                case 198 /* ImportType */:
                     return isValidPropertyAccessWithType(node, /*isSuper*/ false, propertyName, getTypeFromTypeNode(node));
             }
         }
         function isValidPropertyAccessForCompletions(node, type, property) {
-            return isValidPropertyAccessWithType(node, node.kind === 202 /* PropertyAccessExpression */ && node.expression.kind === 105 /* SuperKeyword */, property.escapedName, type);
+            return isValidPropertyAccessWithType(node, node.kind === 204 /* PropertyAccessExpression */ && node.expression.kind === 106 /* SuperKeyword */, property.escapedName, type);
             // Previously we validated the 'this' type of methods but this adversely affected performance. See #31377 for more context.
         }
         function isValidPropertyAccessWithType(node, isSuper, propertyName, type) {
@@ -70169,13 +71511,13 @@
          */
         function getForInVariableSymbol(node) {
             var initializer = node.initializer;
-            if (initializer.kind === 251 /* VariableDeclarationList */) {
+            if (initializer.kind === 253 /* VariableDeclarationList */) {
                 var variable = initializer.declarations[0];
                 if (variable && !ts.isBindingPattern(variable.name)) {
                     return getSymbolOfNode(variable);
                 }
             }
-            else if (initializer.kind === 78 /* Identifier */) {
+            else if (initializer.kind === 79 /* Identifier */) {
                 return getResolvedSymbol(initializer);
             }
             return undefined;
@@ -70184,7 +71526,7 @@
          * Return true if the given type is considered to have numeric property names.
          */
         function hasNumericPropertyNames(type) {
-            return getIndexTypeOfType(type, 1 /* Number */) && !getIndexTypeOfType(type, 0 /* String */);
+            return getIndexInfosOfType(type).length === 1 && !!getIndexInfoOfType(type, numberType);
         }
         /**
          * Return true if given node is an expression consisting of an identifier (possibly parenthesized)
@@ -70192,13 +71534,13 @@
          */
         function isForInVariableForNumericPropertyNames(expr) {
             var e = ts.skipParentheses(expr);
-            if (e.kind === 78 /* Identifier */) {
+            if (e.kind === 79 /* Identifier */) {
                 var symbol = getResolvedSymbol(e);
                 if (symbol.flags & 3 /* Variable */) {
                     var child = expr;
                     var node = expr.parent;
                     while (node) {
-                        if (node.kind === 239 /* ForInStatement */ &&
+                        if (node.kind === 241 /* ForInStatement */ &&
                             child === node.statement &&
                             getForInVariableSymbol(node) === symbol &&
                             hasNumericPropertyNames(getTypeOfExpression(node.expression))) {
@@ -70233,9 +71575,9 @@
             }
             var effectiveIndexType = isForInVariableForNumericPropertyNames(indexExpression) ? numberType : indexType;
             var accessFlags = ts.isAssignmentTarget(node) ?
-                2 /* Writing */ | (isGenericObjectType(objectType) && !isThisTypeParameter(objectType) ? 1 /* NoIndexSignatures */ : 0) :
-                0 /* None */;
-            var indexedAccessType = getIndexedAccessTypeOrUndefined(objectType, effectiveIndexType, /*noUncheckedIndexedAccessCandidate*/ undefined, node, accessFlags | 16 /* ExpressionPosition */) || errorType;
+                4 /* Writing */ | (isGenericObjectType(objectType) && !isThisTypeParameter(objectType) ? 2 /* NoIndexSignatures */ : 0) :
+                32 /* ExpressionPosition */;
+            var indexedAccessType = getIndexedAccessTypeOrUndefined(objectType, effectiveIndexType, accessFlags, node) || errorType;
             return checkIndexedAccessIndexType(getFlowTypeOfAccessExpression(node, getNodeLinks(node).resolvedSymbol, indexedAccessType, indexExpression, checkMode), node);
         }
         function callLikeExpressionMayHaveTypeArguments(node) {
@@ -70247,13 +71589,13 @@
                 // This gets us diagnostics for the type arguments and marks them as referenced.
                 ts.forEach(node.typeArguments, checkSourceElement);
             }
-            if (node.kind === 206 /* TaggedTemplateExpression */) {
+            if (node.kind === 208 /* TaggedTemplateExpression */) {
                 checkExpression(node.template);
             }
             else if (ts.isJsxOpeningLikeElement(node)) {
                 checkExpression(node.attributes);
             }
-            else if (node.kind !== 162 /* Decorator */) {
+            else if (node.kind !== 163 /* Decorator */) {
                 ts.forEach(node.arguments, function (argument) {
                     checkExpression(argument);
                 });
@@ -70317,7 +71659,7 @@
             }
         }
         function isSpreadArgument(arg) {
-            return !!arg && (arg.kind === 221 /* SpreadElement */ || arg.kind === 228 /* SyntheticExpression */ && arg.isSpread);
+            return !!arg && (arg.kind === 223 /* SpreadElement */ || arg.kind === 230 /* SyntheticExpression */ && arg.isSpread);
         }
         function getSpreadArgumentIndex(args) {
             return ts.findIndex(args, isSpreadArgument);
@@ -70334,9 +71676,9 @@
             var callIsIncomplete = false; // In incomplete call we want to be lenient when we have too few arguments
             var effectiveParameterCount = getParameterCount(signature);
             var effectiveMinimumArguments = getMinArgumentCount(signature);
-            if (node.kind === 206 /* TaggedTemplateExpression */) {
+            if (node.kind === 208 /* TaggedTemplateExpression */) {
                 argCount = args.length;
-                if (node.template.kind === 219 /* TemplateExpression */) {
+                if (node.template.kind === 221 /* TemplateExpression */) {
                     // If a tagged template expression lacks a tail literal, the call is incomplete.
                     // Specifically, a template only can end in a TemplateTail or a Missing literal.
                     var lastSpan = ts.last(node.template.templateSpans); // we should always have at least one span.
@@ -70351,7 +71693,7 @@
                     callIsIncomplete = !!templateLiteral.isUnterminated;
                 }
             }
-            else if (node.kind === 162 /* Decorator */) {
+            else if (node.kind === 163 /* Decorator */) {
                 argCount = getDecoratorArgumentCount(node, signature);
             }
             else if (ts.isJsxOpeningLikeElement(node)) {
@@ -70365,7 +71707,7 @@
             }
             else if (!node.arguments) {
                 // This only happens when we have something of the form: 'new C'
-                ts.Debug.assert(node.kind === 205 /* NewExpression */);
+                ts.Debug.assert(node.kind === 207 /* NewExpression */);
                 return getMinArgumentCount(signature) === 0;
             }
             else {
@@ -70414,7 +71756,7 @@
         function getSingleSignature(type, kind, allowMembers) {
             if (type.flags & 524288 /* Object */) {
                 var resolved = resolveStructuredTypeMembers(type);
-                if (allowMembers || resolved.properties.length === 0 && !resolved.stringIndexInfo && !resolved.numberIndexInfo) {
+                if (allowMembers || resolved.properties.length === 0 && resolved.indexInfos.length === 0) {
                     if (kind === 0 /* Call */ && resolved.callSignatures.length === 1 && resolved.constructSignatures.length === 0) {
                         return resolved.callSignatures[0];
                     }
@@ -70468,7 +71810,7 @@
             // example, given a 'function wrap<T, U>(cb: (x: T) => U): (x: T) => U' and a call expression
             // 'let f: (x: string) => number = wrap(s => s.length)', we infer from the declared type of 'f' to the
             // return type of 'wrap'.
-            if (node.kind !== 162 /* Decorator */) {
+            if (node.kind !== 163 /* Decorator */) {
                 var contextualType = getContextualType(node, ts.every(signature.typeParameters, function (p) { return !!getDefaultFromTypeParameter(p); }) ? 8 /* SkipBindingPatterns */ : 0 /* None */);
                 if (contextualType) {
                     // We clone the inference context to avoid disturbing a resolution in progress for an
@@ -70516,7 +71858,7 @@
             }
             for (var i = 0; i < argCount; i++) {
                 var arg = args[i];
-                if (arg.kind !== 223 /* OmittedExpression */) {
+                if (arg.kind !== 225 /* OmittedExpression */) {
                     var paramType = getTypeAtPosition(signature, i);
                     var argType = checkExpressionWithContextualType(arg, paramType, context, checkMode);
                     inferTypes(context.inferences, argType, paramType);
@@ -70540,7 +71882,7 @@
                 if (isSpreadArgument(arg)) {
                     // We are inferring from a spread expression in the last argument position, i.e. both the parameter
                     // and the argument are ...x forms.
-                    return getMutableArrayOrTupleType(arg.kind === 228 /* SyntheticExpression */ ? arg.type :
+                    return getMutableArrayOrTupleType(arg.kind === 230 /* SyntheticExpression */ ? arg.type :
                         checkExpressionWithContextualType(arg.expression, restType, context, checkMode));
                 }
             }
@@ -70550,24 +71892,24 @@
             for (var i = index; i < argCount; i++) {
                 var arg = args[i];
                 if (isSpreadArgument(arg)) {
-                    var spreadType = arg.kind === 228 /* SyntheticExpression */ ? arg.type : checkExpression(arg.expression);
+                    var spreadType = arg.kind === 230 /* SyntheticExpression */ ? arg.type : checkExpression(arg.expression);
                     if (isArrayLikeType(spreadType)) {
                         types.push(spreadType);
                         flags.push(8 /* Variadic */);
                     }
                     else {
-                        types.push(checkIteratedTypeOrElementType(33 /* Spread */, spreadType, undefinedType, arg.kind === 221 /* SpreadElement */ ? arg.expression : arg));
+                        types.push(checkIteratedTypeOrElementType(33 /* Spread */, spreadType, undefinedType, arg.kind === 223 /* SpreadElement */ ? arg.expression : arg));
                         flags.push(4 /* Rest */);
                     }
                 }
                 else {
-                    var contextualType = getIndexedAccessType(restType, getLiteralType(i - index));
+                    var contextualType = getIndexedAccessType(restType, getNumberLiteralType(i - index), 256 /* Contextual */);
                     var argType = checkExpressionWithContextualType(arg, contextualType, context, checkMode);
                     var hasPrimitiveContextualType = maybeTypeOfKind(contextualType, 131068 /* Primitive */ | 4194304 /* Index */ | 134217728 /* TemplateLiteral */ | 268435456 /* StringMapping */);
                     types.push(hasPrimitiveContextualType ? getRegularTypeOfLiteralType(argType) : getWidenedLiteralType(argType));
                     flags.push(1 /* Required */);
                 }
-                if (arg.kind === 228 /* SyntheticExpression */ && arg.tupleNameSource) {
+                if (arg.kind === 230 /* SyntheticExpression */ && arg.tupleNameSource) {
                     names.push(arg.tupleNameSource);
                 }
             }
@@ -70711,7 +72053,7 @@
                 return undefined;
             }
             var thisType = getThisTypeOfSignature(signature);
-            if (thisType && thisType !== voidType && node.kind !== 205 /* NewExpression */) {
+            if (thisType && thisType !== voidType && node.kind !== 207 /* NewExpression */) {
                 // If the called expression is not of the form `x.f` or `x["f"]`, then sourceType = voidType
                 // If the signature's 'this' type is voidType, then the check is skipped -- anything is compatible.
                 // If the expression is a new expression, then the check is skipped.
@@ -70729,7 +72071,7 @@
             var argCount = restType ? Math.min(getParameterCount(signature) - 1, args.length) : args.length;
             for (var i = 0; i < argCount; i++) {
                 var arg = args[i];
-                if (arg.kind !== 223 /* OmittedExpression */) {
+                if (arg.kind !== 225 /* OmittedExpression */) {
                     var paramType = getTypeAtPosition(signature, i);
                     var argType = checkExpressionWithContextualType(arg, paramType, /*inferenceContext*/ undefined, checkMode);
                     // If one or more arguments are still excluded (as indicated by CheckMode.SkipContextSensitive),
@@ -70774,8 +72116,10 @@
          * Returns the this argument in calls like x.f(...) and x[f](...). Undefined otherwise.
          */
         function getThisArgumentOfCall(node) {
-            if (node.kind === 204 /* CallExpression */) {
-                var callee = ts.skipOuterExpressions(node.expression);
+            var expression = node.kind === 206 /* CallExpression */ ? node.expression :
+                node.kind === 208 /* TaggedTemplateExpression */ ? node.tag : undefined;
+            if (expression) {
+                var callee = ts.skipOuterExpressions(expression);
                 if (ts.isAccessExpression(callee)) {
                     return callee.expression;
                 }
@@ -70791,17 +72135,17 @@
          * Returns the effective arguments for an expression that works like a function invocation.
          */
         function getEffectiveCallArguments(node) {
-            if (node.kind === 206 /* TaggedTemplateExpression */) {
+            if (node.kind === 208 /* TaggedTemplateExpression */) {
                 var template = node.template;
                 var args_3 = [createSyntheticExpression(template, getGlobalTemplateStringsArrayType())];
-                if (template.kind === 219 /* TemplateExpression */) {
+                if (template.kind === 221 /* TemplateExpression */) {
                     ts.forEach(template.templateSpans, function (span) {
                         args_3.push(span.expression);
                     });
                 }
                 return args_3;
             }
-            if (node.kind === 162 /* Decorator */) {
+            if (node.kind === 163 /* Decorator */) {
                 return getEffectiveDecoratorArguments(node);
             }
             if (ts.isJsxOpeningLikeElement(node)) {
@@ -70812,10 +72156,10 @@
             if (spreadIndex >= 0) {
                 // Create synthetic arguments from spreads of tuple types.
                 var effectiveArgs_1 = args.slice(0, spreadIndex);
-                var _loop_21 = function (i) {
+                var _loop_23 = function (i) {
                     var arg = args[i];
                     // We can call checkExpressionCached because spread expressions never have a contextual type.
-                    var spreadType = arg.kind === 221 /* SpreadElement */ && (flowLoopCount ? checkExpression(arg.expression) : checkExpressionCached(arg.expression));
+                    var spreadType = arg.kind === 223 /* SpreadElement */ && (flowLoopCount ? checkExpression(arg.expression) : checkExpressionCached(arg.expression));
                     if (spreadType && isTupleType(spreadType)) {
                         ts.forEach(getTypeArguments(spreadType), function (t, i) {
                             var _a;
@@ -70829,7 +72173,7 @@
                     }
                 };
                 for (var i = spreadIndex; i < args.length; i++) {
-                    _loop_21(i);
+                    _loop_23(i);
                 }
                 return effectiveArgs_1;
             }
@@ -70842,30 +72186,30 @@
             var parent = node.parent;
             var expr = node.expression;
             switch (parent.kind) {
-                case 253 /* ClassDeclaration */:
-                case 222 /* ClassExpression */:
+                case 255 /* ClassDeclaration */:
+                case 224 /* ClassExpression */:
                     // For a class decorator, the `target` is the type of the class (e.g. the
                     // "static" or "constructor" side of the class).
                     return [
                         createSyntheticExpression(expr, getTypeOfSymbol(getSymbolOfNode(parent)))
                     ];
-                case 161 /* Parameter */:
+                case 162 /* Parameter */:
                     // A parameter declaration decorator will have three arguments (see
                     // `ParameterDecorator` in core.d.ts).
                     var func = parent.parent;
                     return [
-                        createSyntheticExpression(expr, parent.parent.kind === 167 /* Constructor */ ? getTypeOfSymbol(getSymbolOfNode(func)) : errorType),
+                        createSyntheticExpression(expr, parent.parent.kind === 169 /* Constructor */ ? getTypeOfSymbol(getSymbolOfNode(func)) : errorType),
                         createSyntheticExpression(expr, anyType),
                         createSyntheticExpression(expr, numberType)
                     ];
-                case 164 /* PropertyDeclaration */:
-                case 166 /* MethodDeclaration */:
-                case 168 /* GetAccessor */:
-                case 169 /* SetAccessor */:
+                case 165 /* PropertyDeclaration */:
+                case 167 /* MethodDeclaration */:
+                case 170 /* GetAccessor */:
+                case 171 /* SetAccessor */:
                     // A method or accessor declaration decorator will have two or three arguments (see
                     // `PropertyDecorator` and `MethodDecorator` in core.d.ts). If we are emitting decorators
                     // for ES3, we will only pass two arguments.
-                    var hasPropDesc = parent.kind !== 164 /* PropertyDeclaration */ && languageVersion !== 0 /* ES3 */;
+                    var hasPropDesc = parent.kind !== 165 /* PropertyDeclaration */ && languageVersion !== 0 /* ES3 */;
                     return [
                         createSyntheticExpression(expr, getParentTypeOfClassElement(parent)),
                         createSyntheticExpression(expr, getClassElementPropertyKeyType(parent)),
@@ -70879,17 +72223,17 @@
          */
         function getDecoratorArgumentCount(node, signature) {
             switch (node.parent.kind) {
-                case 253 /* ClassDeclaration */:
-                case 222 /* ClassExpression */:
+                case 255 /* ClassDeclaration */:
+                case 224 /* ClassExpression */:
                     return 1;
-                case 164 /* PropertyDeclaration */:
+                case 165 /* PropertyDeclaration */:
                     return 2;
-                case 166 /* MethodDeclaration */:
-                case 168 /* GetAccessor */:
-                case 169 /* SetAccessor */:
+                case 167 /* MethodDeclaration */:
+                case 170 /* GetAccessor */:
+                case 171 /* SetAccessor */:
                     // For ES3 or decorators with only two parameters we supply only two arguments
                     return languageVersion === 0 /* ES3 */ || signature.parameters.length <= 2 ? 2 : 3;
-                case 161 /* Parameter */:
+                case 162 /* Parameter */:
                     return 3;
                 default:
                     return ts.Debug.fail();
@@ -71025,15 +72369,15 @@
             return ts.createDiagnosticForNodeArray(ts.getSourceFileOfNode(node), typeArguments, ts.Diagnostics.Expected_0_type_arguments_but_got_1, belowArgCount === -Infinity ? aboveArgCount : belowArgCount, argCount);
         }
         function resolveCall(node, signatures, candidatesOutArray, checkMode, callChainFlags, fallbackError) {
-            var isTaggedTemplate = node.kind === 206 /* TaggedTemplateExpression */;
-            var isDecorator = node.kind === 162 /* Decorator */;
+            var isTaggedTemplate = node.kind === 208 /* TaggedTemplateExpression */;
+            var isDecorator = node.kind === 163 /* Decorator */;
             var isJsxOpeningOrSelfClosingElement = ts.isJsxOpeningLikeElement(node);
             var reportErrors = !candidatesOutArray && produceDiagnostics;
             var typeArguments;
             if (!isDecorator) {
                 typeArguments = node.typeArguments;
                 // We already perform checking on the type arguments on the class declaration itself.
-                if (isTaggedTemplate || isJsxOpeningOrSelfClosingElement || node.expression.kind !== 105 /* SuperKeyword */) {
+                if (isTaggedTemplate || isJsxOpeningOrSelfClosingElement || node.expression.kind !== 106 /* SuperKeyword */) {
                     ts.forEach(typeArguments, checkSourceElement);
                 }
             }
@@ -71088,7 +72432,7 @@
             var result;
             // If we are in signature help, a trailing comma indicates that we intend to provide another argument,
             // so we will only accept overloads with arity at least 1 higher than the current number of provided arguments.
-            var signatureHelpTrailingComma = !!(checkMode & 16 /* IsForSignatureHelp */) && node.kind === 204 /* CallExpression */ && node.arguments.hasTrailingComma;
+            var signatureHelpTrailingComma = !!(checkMode & 16 /* IsForSignatureHelp */) && node.kind === 206 /* CallExpression */ && node.arguments.hasTrailingComma;
             // Section 4.12.1:
             // if the candidate list contains one or more signatures for which the type of each argument
             // expression is a subtype of each corresponding parameter type, the return type of the first
@@ -71142,7 +72486,7 @@
                         var min_3 = Number.MAX_VALUE;
                         var minIndex = 0;
                         var i_1 = 0;
-                        var _loop_22 = function (c) {
+                        var _loop_24 = function (c) {
                             var chain_2 = function () { return ts.chainDiagnosticMessages(/*details*/ undefined, ts.Diagnostics.Overload_0_of_1_2_gave_the_following_error, i_1 + 1, candidates.length, signatureToString(c)); };
                             var diags_2 = getSignatureApplicabilityError(node, args, c, assignableRelation, 0 /* Normal */, /*reportErrors*/ true, chain_2);
                             if (diags_2) {
@@ -71160,14 +72504,14 @@
                         };
                         for (var _a = 0, candidatesForArgumentError_1 = candidatesForArgumentError; _a < candidatesForArgumentError_1.length; _a++) {
                             var c = candidatesForArgumentError_1[_a];
-                            _loop_22(c);
+                            _loop_24(c);
                         }
                         var diags_3 = max > 1 ? allDiagnostics[minIndex] : ts.flatten(allDiagnostics);
                         ts.Debug.assert(diags_3.length > 0, "No errors reported for 3 or fewer overload signatures");
                         var chain = ts.chainDiagnosticMessages(ts.map(diags_3, function (d) { return typeof d.messageText === "string" ? d : d.messageText; }), ts.Diagnostics.No_overload_matches_this_call);
                         // The below is a spread to guarantee we get a new (mutable) array - our `flatMap` helper tries to do "smart" optimizations where it reuses input
                         // arrays and the emptyArray singleton where possible, which is decidedly not what we want while we're still constructing this diagnostic
-                        var related = __spreadArray([], ts.flatMap(diags_3, function (d) { return d.relatedInformation; }));
+                        var related = __spreadArray([], ts.flatMap(diags_3, function (d) { return d.relatedInformation; }), true);
                         var diag = void 0;
                         if (ts.every(diags_3, function (d) { return d.start === diags_3[0].start && d.length === diags_3[0].length && d.file === diags_3[0].file; })) {
                             var _b = diags_3[0], file = _b.file, start = _b.start, length_7 = _b.length;
@@ -71318,7 +72662,7 @@
             }
             var _a = ts.minAndMax(candidates, getNumNonRestParameters), minArgumentCount = _a.min, maxNonRestParam = _a.max;
             var parameters = [];
-            var _loop_23 = function (i) {
+            var _loop_25 = function (i) {
                 var symbols = ts.mapDefined(candidates, function (s) { return signatureHasRestParameter(s) ?
                     i < s.parameters.length - 1 ? s.parameters[i] : ts.last(s.parameters) :
                     i < s.parameters.length ? s.parameters[i] : undefined; });
@@ -71326,7 +72670,7 @@
                 parameters.push(createCombinedSymbolFromTypes(symbols, ts.mapDefined(candidates, function (candidate) { return tryGetTypeAtPosition(candidate, i); })));
             };
             for (var i = 0; i < maxNonRestParam; i++) {
-                _loop_23(i);
+                _loop_25(i);
             }
             var restParameterSymbols = ts.mapDefined(candidates, function (c) { return signatureHasRestParameter(c) ? ts.last(c.parameters) : undefined; });
             var flags = 0 /* None */;
@@ -71407,7 +72751,7 @@
             return maxParamsIndex;
         }
         function resolveCallExpression(node, candidatesOutArray, checkMode) {
-            if (node.expression.kind === 105 /* SuperKeyword */) {
+            if (node.expression.kind === 106 /* SuperKeyword */) {
                 var superType = checkSuperExpression(node.expression);
                 if (isTypeAny(superType)) {
                     for (var _i = 0, _a = node.arguments; _i < _a.length; _i++) {
@@ -71633,7 +72977,7 @@
             var declaration = signature.declaration;
             var modifiers = ts.getSelectedEffectiveModifierFlags(declaration, 24 /* NonPublicAccessibilityModifier */);
             // (1) Public constructors and (2) constructor functions are always accessible.
-            if (!modifiers || declaration.kind !== 167 /* Constructor */) {
+            if (!modifiers || declaration.kind !== 169 /* Constructor */) {
                 return true;
             }
             var declaringClassDeclaration = ts.getClassLikeDeclarationOfSymbol(declaration.parent.symbol);
@@ -71665,8 +73009,8 @@
             if (apparentType.flags & 1048576 /* Union */) {
                 var types = apparentType.types;
                 var hasSignatures = false;
-                for (var _i = 0, types_21 = types; _i < types_21.length; _i++) {
-                    var constituent = types_21[_i];
+                for (var _i = 0, types_20 = types; _i < types_20.length; _i++) {
+                    var constituent = types_20[_i];
                     var signatures = getSignaturesOfType(constituent, kind);
                     if (signatures.length !== 0) {
                         hasSignatures = true;
@@ -71777,16 +73121,16 @@
          */
         function getDiagnosticHeadMessageForDecoratorResolution(node) {
             switch (node.parent.kind) {
-                case 253 /* ClassDeclaration */:
-                case 222 /* ClassExpression */:
+                case 255 /* ClassDeclaration */:
+                case 224 /* ClassExpression */:
                     return ts.Diagnostics.Unable_to_resolve_signature_of_class_decorator_when_called_as_an_expression;
-                case 161 /* Parameter */:
+                case 162 /* Parameter */:
                     return ts.Diagnostics.Unable_to_resolve_signature_of_parameter_decorator_when_called_as_an_expression;
-                case 164 /* PropertyDeclaration */:
+                case 165 /* PropertyDeclaration */:
                     return ts.Diagnostics.Unable_to_resolve_signature_of_property_decorator_when_called_as_an_expression;
-                case 166 /* MethodDeclaration */:
-                case 168 /* GetAccessor */:
-                case 169 /* SetAccessor */:
+                case 167 /* MethodDeclaration */:
+                case 170 /* GetAccessor */:
+                case 171 /* SetAccessor */:
                     return ts.Diagnostics.Unable_to_resolve_signature_of_method_decorator_when_called_as_an_expression;
                 default:
                     return ts.Debug.fail();
@@ -71832,7 +73176,7 @@
             // file would probably be preferable.
             var typeSymbol = exports && getSymbol(exports, JsxNames.Element, 788968 /* Type */);
             var returnNode = typeSymbol && nodeBuilder.symbolToEntityName(typeSymbol, 788968 /* Type */, node);
-            var declaration = ts.factory.createFunctionTypeNode(/*typeParameters*/ undefined, [ts.factory.createParameterDeclaration(/*decorators*/ undefined, /*modifiers*/ undefined, /*dotdotdot*/ undefined, "props", /*questionMark*/ undefined, nodeBuilder.typeToTypeNode(result, node))], returnNode ? ts.factory.createTypeReferenceNode(returnNode, /*typeArguments*/ undefined) : ts.factory.createKeywordTypeNode(128 /* AnyKeyword */));
+            var declaration = ts.factory.createFunctionTypeNode(/*typeParameters*/ undefined, [ts.factory.createParameterDeclaration(/*decorators*/ undefined, /*modifiers*/ undefined, /*dotdotdot*/ undefined, "props", /*questionMark*/ undefined, nodeBuilder.typeToTypeNode(result, node))], returnNode ? ts.factory.createTypeReferenceNode(returnNode, /*typeArguments*/ undefined) : ts.factory.createKeywordTypeNode(129 /* AnyKeyword */));
             var parameterSymbol = createSymbol(1 /* FunctionScopedVariable */, "props");
             parameterSymbol.type = result;
             return createSignature(declaration, 
@@ -71881,16 +73225,16 @@
         }
         function resolveSignature(node, candidatesOutArray, checkMode) {
             switch (node.kind) {
-                case 204 /* CallExpression */:
+                case 206 /* CallExpression */:
                     return resolveCallExpression(node, candidatesOutArray, checkMode);
-                case 205 /* NewExpression */:
+                case 207 /* NewExpression */:
                     return resolveNewExpression(node, candidatesOutArray, checkMode);
-                case 206 /* TaggedTemplateExpression */:
+                case 208 /* TaggedTemplateExpression */:
                     return resolveTaggedTemplateExpression(node, candidatesOutArray, checkMode);
-                case 162 /* Decorator */:
+                case 163 /* Decorator */:
                     return resolveDecorator(node, candidatesOutArray, checkMode);
-                case 276 /* JsxOpeningElement */:
-                case 275 /* JsxSelfClosingElement */:
+                case 278 /* JsxOpeningElement */:
+                case 277 /* JsxSelfClosingElement */:
                     return resolveJsxOpeningLikeElement(node, candidatesOutArray, checkMode);
             }
             throw ts.Debug.assertNever(node, "Branch in 'resolveSignature' should be unreachable.");
@@ -71990,7 +73334,7 @@
             else if (ts.isBinaryExpression(node.parent)) {
                 var parentNode = node.parent;
                 var parentNodeOperator = node.parent.operatorToken.kind;
-                if (parentNodeOperator === 62 /* EqualsToken */ && (allowDeclaration || parentNode.right === node)) {
+                if (parentNodeOperator === 63 /* EqualsToken */ && (allowDeclaration || parentNode.right === node)) {
                     name = parentNode.left;
                     decl = name;
                 }
@@ -71999,7 +73343,7 @@
                         name = parentNode.parent.name;
                         decl = parentNode.parent;
                     }
-                    else if (ts.isBinaryExpression(parentNode.parent) && parentNode.parent.operatorToken.kind === 62 /* EqualsToken */ && (allowDeclaration || parentNode.parent.right === parentNode)) {
+                    else if (ts.isBinaryExpression(parentNode.parent) && parentNode.parent.operatorToken.kind === 63 /* EqualsToken */ && (allowDeclaration || parentNode.parent.right === parentNode)) {
                         name = parentNode.parent.left;
                         decl = name;
                     }
@@ -72022,10 +73366,10 @@
                 return false;
             }
             var parent = node.parent;
-            while (parent && parent.kind === 202 /* PropertyAccessExpression */) {
+            while (parent && parent.kind === 204 /* PropertyAccessExpression */) {
                 parent = parent.parent;
             }
-            if (parent && ts.isBinaryExpression(parent) && ts.isPrototypeAccess(parent.left) && parent.operatorToken.kind === 62 /* EqualsToken */) {
+            if (parent && ts.isBinaryExpression(parent) && ts.isPrototypeAccess(parent.left) && parent.operatorToken.kind === 63 /* EqualsToken */) {
                 var right = ts.getInitializerOfBinaryExpression(parent);
                 return ts.isObjectLiteralExpression(right) && right;
             }
@@ -72046,15 +73390,15 @@
                 return nonInferrableType;
             }
             checkDeprecatedSignature(signature, node);
-            if (node.expression.kind === 105 /* SuperKeyword */) {
+            if (node.expression.kind === 106 /* SuperKeyword */) {
                 return voidType;
             }
-            if (node.kind === 205 /* NewExpression */) {
+            if (node.kind === 207 /* NewExpression */) {
                 var declaration = signature.declaration;
                 if (declaration &&
-                    declaration.kind !== 167 /* Constructor */ &&
-                    declaration.kind !== 171 /* ConstructSignature */ &&
-                    declaration.kind !== 176 /* ConstructorType */ &&
+                    declaration.kind !== 169 /* Constructor */ &&
+                    declaration.kind !== 173 /* ConstructSignature */ &&
+                    declaration.kind !== 178 /* ConstructorType */ &&
                     !ts.isJSDocConstructSignature(declaration) &&
                     !isJSConstructor(declaration)) {
                     // When resolved signature is a call signature (and not a construct signature) the result type is any
@@ -72074,7 +73418,7 @@
             if (returnType.flags & 12288 /* ESSymbolLike */ && isSymbolOrSymbolForCall(node)) {
                 return getESSymbolLikeTypeForNode(ts.walkUpParenthesizedExpressions(node.parent));
             }
-            if (node.kind === 204 /* CallExpression */ && !node.questionDotToken && node.parent.kind === 234 /* ExpressionStatement */ &&
+            if (node.kind === 206 /* CallExpression */ && !node.questionDotToken && node.parent.kind === 236 /* ExpressionStatement */ &&
                 returnType.flags & 16384 /* Void */ && getTypePredicateOfSignature(signature)) {
                 if (!ts.isDottedName(node.expression)) {
                     error(node.expression, ts.Diagnostics.Assertions_require_the_call_target_to_be_an_identifier_or_qualified_name);
@@ -72087,7 +73431,7 @@
             if (ts.isInJSFile(node)) {
                 var jsSymbol = getSymbolOfExpando(node, /*allowDeclaration*/ false);
                 if ((_a = jsSymbol === null || jsSymbol === void 0 ? void 0 : jsSymbol.exports) === null || _a === void 0 ? void 0 : _a.size) {
-                    var jsAssignmentType = createAnonymousType(jsSymbol, jsSymbol.exports, ts.emptyArray, ts.emptyArray, undefined, undefined);
+                    var jsAssignmentType = createAnonymousType(jsSymbol, jsSymbol.exports, ts.emptyArray, ts.emptyArray, ts.emptyArray);
                     jsAssignmentType.objectFlags |= 8192 /* JSLiteral */;
                     return getIntersectionType([returnType, jsAssignmentType]);
                 }
@@ -72104,20 +73448,20 @@
         function getDeprecatedSuggestionNode(node) {
             node = ts.skipParentheses(node);
             switch (node.kind) {
-                case 204 /* CallExpression */:
-                case 162 /* Decorator */:
-                case 205 /* NewExpression */:
+                case 206 /* CallExpression */:
+                case 163 /* Decorator */:
+                case 207 /* NewExpression */:
                     return getDeprecatedSuggestionNode(node.expression);
-                case 206 /* TaggedTemplateExpression */:
+                case 208 /* TaggedTemplateExpression */:
                     return getDeprecatedSuggestionNode(node.tag);
-                case 276 /* JsxOpeningElement */:
-                case 275 /* JsxSelfClosingElement */:
+                case 278 /* JsxOpeningElement */:
+                case 277 /* JsxSelfClosingElement */:
                     return getDeprecatedSuggestionNode(node.tagName);
-                case 203 /* ElementAccessExpression */:
+                case 205 /* ElementAccessExpression */:
                     return node.argumentExpression;
-                case 202 /* PropertyAccessExpression */:
+                case 204 /* PropertyAccessExpression */:
                     return node.name;
-                case 174 /* TypeReference */:
+                case 176 /* TypeReference */:
                     var typeReference = node;
                     return ts.isQualifiedName(typeReference.typeName) ? typeReference.typeName.right : typeReference;
                 default:
@@ -72178,11 +73522,11 @@
                         var memberTable = ts.createSymbolTable();
                         var newSymbol = createSymbol(2097152 /* Alias */, "default" /* Default */);
                         newSymbol.parent = originalSymbol;
-                        newSymbol.nameType = getLiteralType("default");
+                        newSymbol.nameType = getStringLiteralType("default");
                         newSymbol.target = resolveSymbol(symbol);
                         memberTable.set("default" /* Default */, newSymbol);
                         var anonymousSymbol = createSymbol(2048 /* TypeLiteral */, "__type" /* Type */);
-                        var defaultContainingObject = createAnonymousType(anonymousSymbol, memberTable, ts.emptyArray, ts.emptyArray, /*stringIndexInfo*/ undefined, /*numberIndexInfo*/ undefined);
+                        var defaultContainingObject = createAnonymousType(anonymousSymbol, memberTable, ts.emptyArray, ts.emptyArray, ts.emptyArray);
                         anonymousSymbol.type = defaultContainingObject;
                         synthType.syntheticType = isValidSpreadType(type) ? getSpreadType(type, defaultContainingObject, anonymousSymbol, /*objectFlags*/ 0, /*readonly*/ false) : defaultContainingObject;
                     }
@@ -72210,9 +73554,9 @@
                 return false;
             }
             var targetDeclarationKind = resolvedRequire.flags & 16 /* Function */
-                ? 252 /* FunctionDeclaration */
+                ? 254 /* FunctionDeclaration */
                 : resolvedRequire.flags & 3 /* Variable */
-                    ? 250 /* VariableDeclaration */
+                    ? 252 /* VariableDeclaration */
                     : 0 /* Unknown */;
             if (targetDeclarationKind !== 0 /* Unknown */) {
                 var decl = ts.getDeclarationOfKind(resolvedRequire, targetDeclarationKind);
@@ -72240,21 +73584,21 @@
                 case 14 /* NoSubstitutionTemplateLiteral */:
                 case 8 /* NumericLiteral */:
                 case 9 /* BigIntLiteral */:
-                case 109 /* TrueKeyword */:
-                case 94 /* FalseKeyword */:
-                case 200 /* ArrayLiteralExpression */:
-                case 201 /* ObjectLiteralExpression */:
-                case 219 /* TemplateExpression */:
+                case 110 /* TrueKeyword */:
+                case 95 /* FalseKeyword */:
+                case 202 /* ArrayLiteralExpression */:
+                case 203 /* ObjectLiteralExpression */:
+                case 221 /* TemplateExpression */:
                     return true;
-                case 208 /* ParenthesizedExpression */:
+                case 210 /* ParenthesizedExpression */:
                     return isValidConstAssertionArgument(node.expression);
-                case 215 /* PrefixUnaryExpression */:
+                case 217 /* PrefixUnaryExpression */:
                     var op = node.operator;
                     var arg = node.operand;
                     return op === 40 /* MinusToken */ && (arg.kind === 8 /* NumericLiteral */ || arg.kind === 9 /* BigIntLiteral */) ||
                         op === 39 /* PlusToken */ && arg.kind === 8 /* NumericLiteral */;
-                case 202 /* PropertyAccessExpression */:
-                case 203 /* ElementAccessExpression */:
+                case 204 /* PropertyAccessExpression */:
+                case 205 /* ElementAccessExpression */:
                     var expr = node.expression;
                     if (ts.isIdentifier(expr)) {
                         var symbol = getSymbolAtLocation(expr);
@@ -72296,21 +73640,32 @@
         }
         function checkMetaProperty(node) {
             checkGrammarMetaProperty(node);
-            if (node.keywordToken === 102 /* NewKeyword */) {
+            if (node.keywordToken === 103 /* NewKeyword */) {
                 return checkNewTargetMetaProperty(node);
             }
-            if (node.keywordToken === 99 /* ImportKeyword */) {
+            if (node.keywordToken === 100 /* ImportKeyword */) {
                 return checkImportMetaProperty(node);
             }
             return ts.Debug.assertNever(node.keywordToken);
         }
+        function checkMetaPropertyKeyword(node) {
+            switch (node.keywordToken) {
+                case 100 /* ImportKeyword */:
+                    return getGlobalImportMetaExpressionType();
+                case 103 /* NewKeyword */:
+                    var type = checkNewTargetMetaProperty(node);
+                    return type === errorType ? errorType : createNewTargetExpressionType(type);
+                default:
+                    ts.Debug.assertNever(node.keywordToken);
+            }
+        }
         function checkNewTargetMetaProperty(node) {
             var container = ts.getNewTargetContainer(node);
             if (!container) {
                 error(node, ts.Diagnostics.Meta_property_0_is_only_allowed_in_the_body_of_a_function_declaration_function_expression_or_constructor, "new.target");
                 return errorType;
             }
-            else if (container.kind === 167 /* Constructor */) {
+            else if (container.kind === 169 /* Constructor */) {
                 var symbol = getSymbolOfNode(container.parent);
                 return getTypeOfSymbol(symbol);
             }
@@ -72325,7 +73680,6 @@
             }
             var file = ts.getSourceFileOfNode(node);
             ts.Debug.assert(!!(file.flags & 2097152 /* PossiblyContainsImportMeta */), "Containing file is missing import meta node flag.");
-            ts.Debug.assert(!!file.externalModuleIndicator, "Containing file should be a module.");
             return node.name.escapedText === "meta" ? getGlobalImportMetaType() : errorType;
         }
         function getTypeOfParameter(symbol) {
@@ -72356,8 +73710,37 @@
             }
             return restParameter.escapedName;
         }
+        function getParameterIdentifierNameAtPosition(signature, pos) {
+            var paramCount = signature.parameters.length - (signatureHasRestParameter(signature) ? 1 : 0);
+            if (pos < paramCount) {
+                var param = signature.parameters[pos];
+                return isParameterDeclarationWithIdentifierName(param) ? [param.escapedName, false] : undefined;
+            }
+            var restParameter = signature.parameters[paramCount] || unknownSymbol;
+            if (!isParameterDeclarationWithIdentifierName(restParameter)) {
+                return undefined;
+            }
+            var restType = getTypeOfSymbol(restParameter);
+            if (isTupleType(restType)) {
+                var associatedNames = restType.target.labeledElementDeclarations;
+                var index = pos - paramCount;
+                var associatedName = associatedNames === null || associatedNames === void 0 ? void 0 : associatedNames[index];
+                var isRestTupleElement = !!(associatedName === null || associatedName === void 0 ? void 0 : associatedName.dotDotDotToken);
+                return associatedName ? [
+                    getTupleElementLabel(associatedName),
+                    isRestTupleElement
+                ] : undefined;
+            }
+            if (pos === paramCount) {
+                return [restParameter.escapedName, true];
+            }
+            return undefined;
+        }
+        function isParameterDeclarationWithIdentifierName(symbol) {
+            return symbol.valueDeclaration && ts.isParameter(symbol.valueDeclaration) && ts.isIdentifier(symbol.valueDeclaration.name);
+        }
         function isValidDeclarationForTupleLabel(d) {
-            return d.kind === 193 /* NamedTupleMember */ || (ts.isParameter(d) && d.name && ts.isIdentifier(d.name));
+            return d.kind === 195 /* NamedTupleMember */ || (ts.isParameter(d) && d.name && ts.isIdentifier(d.name));
         }
         function getNameableDeclarationAtPosition(signature, pos) {
             var paramCount = signature.parameters.length - (signatureHasRestParameter(signature) ? 1 : 0);
@@ -72389,7 +73772,7 @@
                 var restType = getTypeOfSymbol(signature.parameters[paramCount]);
                 var index = pos - paramCount;
                 if (!isTupleType(restType) || restType.target.hasRestElement || index < restType.target.fixedLength) {
-                    return getIndexedAccessType(restType, getLiteralType(index));
+                    return getIndexedAccessType(restType, getNumberLiteralType(index));
                 }
             }
             return undefined;
@@ -72570,7 +73953,7 @@
             if (!links.type) {
                 var declaration = parameter.valueDeclaration;
                 links.type = type || getWidenedTypeForVariableLikeDeclaration(declaration, /*includeOptionality*/ true);
-                if (declaration.name.kind !== 78 /* Identifier */) {
+                if (declaration.name.kind !== 79 /* Identifier */) {
                     // if inference didn't come up with anything but unknown, fall back to the binding pattern if present.
                     if (links.type === unknownType) {
                         links.type = getTypeFromBindingPattern(declaration.name);
@@ -72585,7 +73968,7 @@
             for (var _i = 0, _a = pattern.elements; _i < _a.length; _i++) {
                 var element = _a[_i];
                 if (!ts.isOmittedExpression(element)) {
-                    if (element.name.kind === 78 /* Identifier */) {
+                    if (element.name.kind === 79 /* Identifier */) {
                         getSymbolLinks(getSymbolOfNode(element)).type = getTypeForBindingElement(element);
                     }
                     else {
@@ -72629,6 +74012,16 @@
             }
             return promiseType;
         }
+        function createNewTargetExpressionType(targetType) {
+            // Create a synthetic type `NewTargetExpression { target: TargetType; }`
+            var symbol = createSymbol(0 /* None */, "NewTargetExpression");
+            var targetPropertySymbol = createSymbol(4 /* Property */, "target", 8 /* Readonly */);
+            targetPropertySymbol.parent = symbol;
+            targetPropertySymbol.type = targetType;
+            var members = ts.createSymbolTable([targetPropertySymbol]);
+            symbol.members = members;
+            return createAnonymousType(symbol, members, ts.emptyArray, ts.emptyArray, ts.emptyArray);
+        }
         function getReturnTypeFromBody(func, checkMode) {
             if (!func.body) {
                 return errorType;
@@ -72640,7 +74033,7 @@
             var yieldType;
             var nextType;
             var fallbackReturnType = voidType;
-            if (func.body.kind !== 231 /* Block */) { // Async or normal arrow function
+            if (func.body.kind !== 233 /* Block */) { // Async or normal arrow function
                 returnType = checkExpressionCached(func.body, checkMode && checkMode & ~8 /* SkipGenericFunctions */);
                 if (isAsync) {
                     // From within an async function you can return either a non-promise value or a promise. Any
@@ -72825,7 +74218,7 @@
             return links.isExhaustive !== undefined ? links.isExhaustive : (links.isExhaustive = computeExhaustiveSwitchStatement(node));
         }
         function computeExhaustiveSwitchStatement(node) {
-            if (node.expression.kind === 212 /* TypeOfExpression */) {
+            if (node.expression.kind === 214 /* TypeOfExpression */) {
                 var operandType = getTypeOfExpression(node.expression.expression);
                 var witnesses = getSwitchClauseTypeOfWitnesses(node, /*retainDefault*/ false);
                 // notEqualFacts states that the type of the switched value is not equal to every type in the switch.
@@ -72888,11 +74281,11 @@
         }
         function mayReturnNever(func) {
             switch (func.kind) {
-                case 209 /* FunctionExpression */:
-                case 210 /* ArrowFunction */:
+                case 211 /* FunctionExpression */:
+                case 212 /* ArrowFunction */:
                     return true;
-                case 166 /* MethodDeclaration */:
-                    return func.parent.kind === 201 /* ObjectLiteralExpression */;
+                case 167 /* MethodDeclaration */:
+                    return func.parent.kind === 203 /* ObjectLiteralExpression */;
                 default:
                     return false;
             }
@@ -72918,7 +74311,7 @@
             }
             // If all we have is a function signature, or an arrow function with an expression body, then there is nothing to check.
             // also if HasImplicitReturn flag is not set this means that all codepaths in function body end with return or throw
-            if (func.kind === 165 /* MethodSignature */ || ts.nodeIsMissing(func.body) || func.body.kind !== 231 /* Block */ || !functionHasImplicitReturn(func)) {
+            if (func.kind === 166 /* MethodSignature */ || ts.nodeIsMissing(func.body) || func.body.kind !== 233 /* Block */ || !functionHasImplicitReturn(func)) {
                 return;
             }
             var hasExplicitReturn = func.flags & 512 /* HasExplicitReturn */;
@@ -72951,12 +74344,15 @@
             }
         }
         function checkFunctionExpressionOrObjectLiteralMethod(node, checkMode) {
-            ts.Debug.assert(node.kind !== 166 /* MethodDeclaration */ || ts.isObjectLiteralMethod(node));
+            ts.Debug.assert(node.kind !== 167 /* MethodDeclaration */ || ts.isObjectLiteralMethod(node));
             checkNodeDeferred(node);
+            if (ts.isFunctionExpression(node)) {
+                checkCollisionsForDeclarationName(node, node.name);
+            }
             // The identityMapper object is used to indicate that function expressions are wildcards
             if (checkMode && checkMode & 4 /* SkipContextSensitive */ && isContextSensitive(node)) {
                 // Skip parameters, return signature with return type that retains noncontextual parts so inferences can still be drawn in an early stage
-                if (!ts.getEffectiveReturnTypeNode(node) && !hasContextSensitiveParameters(node)) {
+                if (!ts.getEffectiveReturnTypeNode(node) && !ts.hasContextSensitiveParameters(node)) {
                     // Return plain anyFunctionType if there is no possibility we'll make inferences from the return type
                     var contextualSignature = getContextualSignature(node);
                     if (contextualSignature && couldContainTypeVariables(getReturnTypeOfSignature(contextualSignature))) {
@@ -72966,7 +74362,7 @@
                         }
                         var returnType = getReturnTypeFromBody(node, checkMode);
                         var returnOnlySignature = createSignature(undefined, undefined, undefined, ts.emptyArray, returnType, /*resolvedTypePredicate*/ undefined, 0, 0 /* None */);
-                        var returnOnlyType = createAnonymousType(node.symbol, emptySymbols, [returnOnlySignature], ts.emptyArray, undefined, undefined);
+                        var returnOnlyType = createAnonymousType(node.symbol, emptySymbols, [returnOnlySignature], ts.emptyArray, ts.emptyArray);
                         returnOnlyType.objectFlags |= 524288 /* NonInferrableType */;
                         return links.contextFreeType = returnOnlyType;
                     }
@@ -72975,7 +74371,7 @@
             }
             // Grammar checking
             var hasGrammarError = checkGrammarFunctionLikeDeclaration(node);
-            if (!hasGrammarError && node.kind === 209 /* FunctionExpression */) {
+            if (!hasGrammarError && node.kind === 211 /* FunctionExpression */) {
                 checkGrammarForGenerator(node);
             }
             contextuallyCheckFunctionExpressionOrObjectLiteralMethod(node, checkMode);
@@ -73021,7 +74417,7 @@
             }
         }
         function checkFunctionExpressionOrObjectLiteralMethodDeferred(node) {
-            ts.Debug.assert(node.kind !== 166 /* MethodDeclaration */ || ts.isObjectLiteralMethod(node));
+            ts.Debug.assert(node.kind !== 167 /* MethodDeclaration */ || ts.isObjectLiteralMethod(node));
             var functionFlags = ts.getFunctionFlags(node);
             var returnType = getReturnTypeFromAnnotation(node);
             checkAllCodePathsInNonVoidFunctionReturnOrThrow(node, returnType);
@@ -73034,7 +74430,7 @@
                     // checkFunctionExpressionBodies). So it must be done now.
                     getReturnTypeOfSignature(getSignatureFromDeclaration(node));
                 }
-                if (node.body.kind === 231 /* Block */) {
+                if (node.body.kind === 233 /* Block */) {
                     checkSourceElement(node.body);
                 }
                 else {
@@ -73121,10 +74517,10 @@
                 // Allow assignments to readonly properties within constructors of the same class declaration.
                 if (symbol.flags & 4 /* Property */ &&
                     ts.isAccessExpression(expr) &&
-                    expr.expression.kind === 107 /* ThisKeyword */) {
+                    expr.expression.kind === 108 /* ThisKeyword */) {
                     // Look for if this is the constructor for the class that `symbol` is a property of.
                     var ctor = ts.getContainingFunction(expr);
-                    if (!(ctor && (ctor.kind === 167 /* Constructor */ || isJSConstructor(ctor)))) {
+                    if (!(ctor && (ctor.kind === 169 /* Constructor */ || isJSConstructor(ctor)))) {
                         return true;
                     }
                     if (symbol.valueDeclaration) {
@@ -73145,11 +74541,11 @@
             if (ts.isAccessExpression(expr)) {
                 // references through namespace import should be readonly
                 var node = ts.skipParentheses(expr.expression);
-                if (node.kind === 78 /* Identifier */) {
+                if (node.kind === 79 /* Identifier */) {
                     var symbol_2 = getNodeLinks(node).resolvedSymbol;
                     if (symbol_2.flags & 2097152 /* Alias */) {
                         var declaration = getDeclarationOfAliasSymbol(symbol_2);
-                        return !!declaration && declaration.kind === 264 /* NamespaceImport */;
+                        return !!declaration && declaration.kind === 266 /* NamespaceImport */;
                     }
                 }
             }
@@ -73158,7 +74554,7 @@
         function checkReferenceExpression(expr, invalidReferenceMessage, invalidOptionalChainMessage) {
             // References are combinations of identifiers, parentheses, and property accesses.
             var node = ts.skipOuterExpressions(expr, 6 /* Assertions */ | 1 /* Parentheses */);
-            if (node.kind !== 78 /* Identifier */ && !ts.isAccessExpression(node)) {
+            if (node.kind !== 79 /* Identifier */ && !ts.isAccessExpression(node)) {
                 error(expr, invalidReferenceMessage);
                 return false;
             }
@@ -73184,13 +74580,15 @@
                 if (isReadonlySymbol(symbol)) {
                     error(expr, ts.Diagnostics.The_operand_of_a_delete_operator_cannot_be_a_read_only_property);
                 }
-                checkDeleteExpressionMustBeOptional(expr, getTypeOfSymbol(symbol));
+                checkDeleteExpressionMustBeOptional(expr, symbol);
             }
             return booleanType;
         }
-        function checkDeleteExpressionMustBeOptional(expr, type) {
-            var AnyOrUnknownOrNeverFlags = 3 /* AnyOrUnknown */ | 131072 /* Never */;
-            if (strictNullChecks && !(type.flags & AnyOrUnknownOrNeverFlags) && !(getFalsyFlags(type) & 32768 /* Undefined */)) {
+        function checkDeleteExpressionMustBeOptional(expr, symbol) {
+            var type = getTypeOfSymbol(symbol);
+            if (strictNullChecks &&
+                !(type.flags & (3 /* AnyOrUnknown */ | 131072 /* Never */)) &&
+                !(exactOptionalPropertyTypes ? symbol.flags & 16777216 /* Optional */ : getFalsyFlags(type) & 32768 /* Undefined */)) {
                 error(expr, ts.Diagnostics.The_operand_of_a_delete_operator_must_be_optional);
             }
         }
@@ -73205,7 +74603,11 @@
         function checkAwaitExpression(node) {
             // Grammar checking
             if (produceDiagnostics) {
-                if (!(node.flags & 32768 /* AwaitContext */)) {
+                var container = ts.getContainingFunctionOrClassStaticBlock(node);
+                if (container && ts.isClassStaticBlockDeclaration(container)) {
+                    error(node, ts.Diagnostics.Await_expression_cannot_be_used_inside_a_class_static_block);
+                }
+                else if (!(node.flags & 32768 /* AwaitContext */)) {
                     if (ts.isInTopLevelContext(node)) {
                         var sourceFile = ts.getSourceFileOfNode(node);
                         if (!hasParseDiagnostics(sourceFile)) {
@@ -73229,9 +74631,8 @@
                         if (!hasParseDiagnostics(sourceFile)) {
                             var span = ts.getSpanOfTokenAtPosition(sourceFile, node.pos);
                             var diagnostic = ts.createFileDiagnostic(sourceFile, span.start, span.length, ts.Diagnostics.await_expressions_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules);
-                            var func = ts.getContainingFunction(node);
-                            if (func && func.kind !== 167 /* Constructor */ && (ts.getFunctionFlags(func) & 2 /* Async */) === 0) {
-                                var relatedInfo = ts.createDiagnosticForNode(func, ts.Diagnostics.Did_you_mean_to_mark_this_function_as_async);
+                            if (container && container.kind !== 169 /* Constructor */ && (ts.getFunctionFlags(container) & 2 /* Async */) === 0) {
+                                var relatedInfo = ts.createDiagnosticForNode(container, ts.Diagnostics.Did_you_mean_to_mark_this_function_as_async);
                                 ts.addRelatedInfo(diagnostic, relatedInfo);
                             }
                             diagnostics.add(diagnostic);
@@ -73258,14 +74659,14 @@
                 case 8 /* NumericLiteral */:
                     switch (node.operator) {
                         case 40 /* MinusToken */:
-                            return getFreshTypeOfLiteralType(getLiteralType(-node.operand.text));
+                            return getFreshTypeOfLiteralType(getNumberLiteralType(-node.operand.text));
                         case 39 /* PlusToken */:
-                            return getFreshTypeOfLiteralType(getLiteralType(+node.operand.text));
+                            return getFreshTypeOfLiteralType(getNumberLiteralType(+node.operand.text));
                     }
                     break;
                 case 9 /* BigIntLiteral */:
                     if (node.operator === 40 /* MinusToken */) {
-                        return getFreshTypeOfLiteralType(getLiteralType({
+                        return getFreshTypeOfLiteralType(getBigIntLiteralType({
                             negative: true,
                             base10Value: ts.parsePseudoBigInt(node.operand.text)
                         }));
@@ -73332,8 +74733,8 @@
             }
             if (type.flags & 3145728 /* UnionOrIntersection */) {
                 var types = type.types;
-                for (var _i = 0, types_22 = types; _i < types_22.length; _i++) {
-                    var t = types_22[_i];
+                for (var _i = 0, types_21 = types; _i < types_21.length; _i++) {
+                    var t = types_21[_i];
                     if (maybeTypeOfKind(t, kind)) {
                         return true;
                     }
@@ -73442,7 +74843,7 @@
             if (rightIsThis === void 0) { rightIsThis = false; }
             var properties = node.properties;
             var property = properties[propertyIndex];
-            if (property.kind === 289 /* PropertyAssignment */ || property.kind === 290 /* ShorthandPropertyAssignment */) {
+            if (property.kind === 291 /* PropertyAssignment */ || property.kind === 292 /* ShorthandPropertyAssignment */) {
                 var name = property.name;
                 var exprType = getLiteralTypeFromPropertyName(name);
                 if (isTypeUsableAsPropertyName(exprType)) {
@@ -73453,11 +74854,11 @@
                         checkPropertyAccessibility(property, /*isSuper*/ false, /*writing*/ true, objectLiteralType, prop);
                     }
                 }
-                var elementType = getIndexedAccessType(objectLiteralType, exprType, /*noUncheckedIndexedAccessCandidate*/ undefined, name, /*aliasSymbol*/ undefined, /*aliasTypeArguments*/ undefined, 16 /* ExpressionPosition */);
+                var elementType = getIndexedAccessType(objectLiteralType, exprType, 32 /* ExpressionPosition */, name);
                 var type = getFlowTypeOfDestructuring(property, elementType);
-                return checkDestructuringAssignment(property.kind === 290 /* ShorthandPropertyAssignment */ ? property : property.initializer, type);
+                return checkDestructuringAssignment(property.kind === 292 /* ShorthandPropertyAssignment */ ? property : property.initializer, type);
             }
-            else if (property.kind === 291 /* SpreadAssignment */) {
+            else if (property.kind === 293 /* SpreadAssignment */) {
                 if (propertyIndex < properties.length - 1) {
                     error(property, ts.Diagnostics.A_rest_element_must_be_last_in_a_destructuring_pattern);
                 }
@@ -73495,7 +74896,7 @@
             var inBoundsType = compilerOptions.noUncheckedIndexedAccess ? undefined : possiblyOutOfBoundsType;
             for (var i = 0; i < elements.length; i++) {
                 var type = possiblyOutOfBoundsType;
-                if (node.elements[i].kind === 221 /* SpreadElement */) {
+                if (node.elements[i].kind === 223 /* SpreadElement */) {
                     type = inBoundsType = inBoundsType !== null && inBoundsType !== void 0 ? inBoundsType : (checkIteratedTypeOrElementType(65 /* Destructuring */, sourceType, undefinedType, node) || errorType);
                 }
                 checkArrayLiteralDestructuringElementAssignment(node, sourceType, i, type, checkMode);
@@ -73505,14 +74906,14 @@
         function checkArrayLiteralDestructuringElementAssignment(node, sourceType, elementIndex, elementType, checkMode) {
             var elements = node.elements;
             var element = elements[elementIndex];
-            if (element.kind !== 223 /* OmittedExpression */) {
-                if (element.kind !== 221 /* SpreadElement */) {
-                    var indexType = getLiteralType(elementIndex);
+            if (element.kind !== 225 /* OmittedExpression */) {
+                if (element.kind !== 223 /* SpreadElement */) {
+                    var indexType = getNumberLiteralType(elementIndex);
                     if (isArrayLikeType(sourceType)) {
                         // We create a synthetic expression so that getIndexedAccessType doesn't get confused
                         // when the element is a SyntaxKind.ElementAccessExpression.
-                        var accessFlags = 16 /* ExpressionPosition */ | (hasDefaultValue(element) ? 8 /* NoTupleBoundsCheck */ : 0);
-                        var elementType_2 = getIndexedAccessTypeOrUndefined(sourceType, indexType, /*noUncheckedIndexedAccessCandidate*/ undefined, createSyntheticExpression(element, indexType), accessFlags) || errorType;
+                        var accessFlags = 32 /* ExpressionPosition */ | (hasDefaultValue(element) ? 16 /* NoTupleBoundsCheck */ : 0);
+                        var elementType_2 = getIndexedAccessTypeOrUndefined(sourceType, indexType, accessFlags, createSyntheticExpression(element, indexType)) || errorType;
                         var assignedType = hasDefaultValue(element) ? getTypeWithFacts(elementType_2, 524288 /* NEUndefined */) : elementType_2;
                         var type = getFlowTypeOfDestructuring(element, assignedType);
                         return checkDestructuringAssignment(element, type, checkMode);
@@ -73524,7 +74925,7 @@
                 }
                 else {
                     var restExpression = element.expression;
-                    if (restExpression.kind === 217 /* BinaryExpression */ && restExpression.operatorToken.kind === 62 /* EqualsToken */) {
+                    if (restExpression.kind === 219 /* BinaryExpression */ && restExpression.operatorToken.kind === 63 /* EqualsToken */) {
                         error(restExpression.operatorToken, ts.Diagnostics.A_rest_element_cannot_have_an_initializer);
                     }
                     else {
@@ -73540,7 +74941,7 @@
         }
         function checkDestructuringAssignment(exprOrAssignment, sourceType, checkMode, rightIsThis) {
             var target;
-            if (exprOrAssignment.kind === 290 /* ShorthandPropertyAssignment */) {
+            if (exprOrAssignment.kind === 292 /* ShorthandPropertyAssignment */) {
                 var prop = exprOrAssignment;
                 if (prop.objectAssignmentInitializer) {
                     // In strict null checking mode, if a default value of a non-undefined type is specified, remove
@@ -73556,24 +74957,24 @@
             else {
                 target = exprOrAssignment;
             }
-            if (target.kind === 217 /* BinaryExpression */ && target.operatorToken.kind === 62 /* EqualsToken */) {
+            if (target.kind === 219 /* BinaryExpression */ && target.operatorToken.kind === 63 /* EqualsToken */) {
                 checkBinaryExpression(target, checkMode);
                 target = target.left;
             }
-            if (target.kind === 201 /* ObjectLiteralExpression */) {
+            if (target.kind === 203 /* ObjectLiteralExpression */) {
                 return checkObjectLiteralAssignment(target, sourceType, rightIsThis);
             }
-            if (target.kind === 200 /* ArrayLiteralExpression */) {
+            if (target.kind === 202 /* ArrayLiteralExpression */) {
                 return checkArrayLiteralAssignment(target, sourceType, checkMode);
             }
             return checkReferenceAssignment(target, sourceType, checkMode);
         }
         function checkReferenceAssignment(target, sourceType, checkMode) {
             var targetType = checkExpression(target, checkMode);
-            var error = target.parent.kind === 291 /* SpreadAssignment */ ?
+            var error = target.parent.kind === 293 /* SpreadAssignment */ ?
                 ts.Diagnostics.The_target_of_an_object_rest_assignment_must_be_a_variable_or_a_property_access :
                 ts.Diagnostics.The_left_hand_side_of_an_assignment_expression_must_be_a_variable_or_a_property_access;
-            var optionalError = target.parent.kind === 291 /* SpreadAssignment */ ?
+            var optionalError = target.parent.kind === 293 /* SpreadAssignment */ ?
                 ts.Diagnostics.The_target_of_an_object_rest_assignment_may_not_be_an_optional_property_access :
                 ts.Diagnostics.The_left_hand_side_of_an_assignment_expression_may_not_be_an_optional_property_access;
             if (checkReferenceExpression(target, error, optionalError)) {
@@ -73595,39 +74996,39 @@
         function isSideEffectFree(node) {
             node = ts.skipParentheses(node);
             switch (node.kind) {
-                case 78 /* Identifier */:
+                case 79 /* Identifier */:
                 case 10 /* StringLiteral */:
                 case 13 /* RegularExpressionLiteral */:
-                case 206 /* TaggedTemplateExpression */:
-                case 219 /* TemplateExpression */:
+                case 208 /* TaggedTemplateExpression */:
+                case 221 /* TemplateExpression */:
                 case 14 /* NoSubstitutionTemplateLiteral */:
                 case 8 /* NumericLiteral */:
                 case 9 /* BigIntLiteral */:
-                case 109 /* TrueKeyword */:
-                case 94 /* FalseKeyword */:
-                case 103 /* NullKeyword */:
-                case 150 /* UndefinedKeyword */:
-                case 209 /* FunctionExpression */:
-                case 222 /* ClassExpression */:
-                case 210 /* ArrowFunction */:
-                case 200 /* ArrayLiteralExpression */:
-                case 201 /* ObjectLiteralExpression */:
-                case 212 /* TypeOfExpression */:
-                case 226 /* NonNullExpression */:
-                case 275 /* JsxSelfClosingElement */:
-                case 274 /* JsxElement */:
+                case 110 /* TrueKeyword */:
+                case 95 /* FalseKeyword */:
+                case 104 /* NullKeyword */:
+                case 151 /* UndefinedKeyword */:
+                case 211 /* FunctionExpression */:
+                case 224 /* ClassExpression */:
+                case 212 /* ArrowFunction */:
+                case 202 /* ArrayLiteralExpression */:
+                case 203 /* ObjectLiteralExpression */:
+                case 214 /* TypeOfExpression */:
+                case 228 /* NonNullExpression */:
+                case 277 /* JsxSelfClosingElement */:
+                case 276 /* JsxElement */:
                     return true;
-                case 218 /* ConditionalExpression */:
+                case 220 /* ConditionalExpression */:
                     return isSideEffectFree(node.whenTrue) &&
                         isSideEffectFree(node.whenFalse);
-                case 217 /* BinaryExpression */:
+                case 219 /* BinaryExpression */:
                     if (ts.isAssignmentOperator(node.operatorToken.kind)) {
                         return false;
                     }
                     return isSideEffectFree(node.left) &&
                         isSideEffectFree(node.right);
-                case 215 /* PrefixUnaryExpression */:
-                case 216 /* PostfixUnaryExpression */:
+                case 217 /* PrefixUnaryExpression */:
+                case 218 /* PostfixUnaryExpression */:
                     // Unary operators ~, !, +, and - have no side effects.
                     // The rest do.
                     switch (node.operator) {
@@ -73639,9 +75040,9 @@
                     }
                     return false;
                 // Some forms listed here for clarity
-                case 213 /* VoidExpression */: // Explicit opt-out
-                case 207 /* TypeAssertionExpression */: // Not SEF, but can produce useful type warnings
-                case 225 /* AsExpression */: // Not SEF, but can produce useful type warnings
+                case 215 /* VoidExpression */: // Explicit opt-out
+                case 209 /* TypeAssertionExpression */: // Not SEF, but can produce useful type warnings
+                case 227 /* AsExpression */: // Not SEF, but can produce useful type warnings
                 default:
                     return false;
             }
@@ -73678,9 +75079,9 @@
                 }
                 checkGrammarNullishCoalesceWithLogicalExpression(node);
                 var operator = node.operatorToken.kind;
-                if (operator === 62 /* EqualsToken */ && (node.left.kind === 201 /* ObjectLiteralExpression */ || node.left.kind === 200 /* ArrayLiteralExpression */)) {
+                if (operator === 63 /* EqualsToken */ && (node.left.kind === 203 /* ObjectLiteralExpression */ || node.left.kind === 202 /* ArrayLiteralExpression */)) {
                     state.skip = true;
-                    setLastResult(state, checkDestructuringAssignment(node.left, checkExpression(node.right, checkMode), checkMode, node.right.kind === 107 /* ThisKeyword */));
+                    setLastResult(state, checkDestructuringAssignment(node.left, checkExpression(node.right, checkMode), checkMode, node.right.kind === 108 /* ThisKeyword */));
                     return state;
                 }
                 return state;
@@ -73771,8 +75172,8 @@
         // expression-wide checks and does not use a work stack to fold nested binary expressions into the same callstack frame
         function checkBinaryLikeExpression(left, operatorToken, right, checkMode, errorNode) {
             var operator = operatorToken.kind;
-            if (operator === 62 /* EqualsToken */ && (left.kind === 201 /* ObjectLiteralExpression */ || left.kind === 200 /* ArrayLiteralExpression */)) {
-                return checkDestructuringAssignment(left, checkExpression(right, checkMode), checkMode, right.kind === 107 /* ThisKeyword */);
+            if (operator === 63 /* EqualsToken */ && (left.kind === 203 /* ObjectLiteralExpression */ || left.kind === 202 /* ArrayLiteralExpression */)) {
+                return checkDestructuringAssignment(left, checkExpression(right, checkMode), checkMode, right.kind === 108 /* ThisKeyword */);
             }
             var leftType;
             if (operator === 55 /* AmpersandAmpersandToken */ || operator === 56 /* BarBarToken */ || operator === 60 /* QuestionQuestionToken */) {
@@ -73789,26 +75190,26 @@
             switch (operator) {
                 case 41 /* AsteriskToken */:
                 case 42 /* AsteriskAsteriskToken */:
-                case 65 /* AsteriskEqualsToken */:
-                case 66 /* AsteriskAsteriskEqualsToken */:
+                case 66 /* AsteriskEqualsToken */:
+                case 67 /* AsteriskAsteriskEqualsToken */:
                 case 43 /* SlashToken */:
-                case 67 /* SlashEqualsToken */:
+                case 68 /* SlashEqualsToken */:
                 case 44 /* PercentToken */:
-                case 68 /* PercentEqualsToken */:
+                case 69 /* PercentEqualsToken */:
                 case 40 /* MinusToken */:
-                case 64 /* MinusEqualsToken */:
+                case 65 /* MinusEqualsToken */:
                 case 47 /* LessThanLessThanToken */:
-                case 69 /* LessThanLessThanEqualsToken */:
+                case 70 /* LessThanLessThanEqualsToken */:
                 case 48 /* GreaterThanGreaterThanToken */:
-                case 70 /* GreaterThanGreaterThanEqualsToken */:
+                case 71 /* GreaterThanGreaterThanEqualsToken */:
                 case 49 /* GreaterThanGreaterThanGreaterThanToken */:
-                case 71 /* GreaterThanGreaterThanGreaterThanEqualsToken */:
+                case 72 /* GreaterThanGreaterThanGreaterThanEqualsToken */:
                 case 51 /* BarToken */:
-                case 73 /* BarEqualsToken */:
+                case 74 /* BarEqualsToken */:
                 case 52 /* CaretToken */:
-                case 77 /* CaretEqualsToken */:
+                case 78 /* CaretEqualsToken */:
                 case 50 /* AmpersandToken */:
-                case 72 /* AmpersandEqualsToken */:
+                case 73 /* AmpersandEqualsToken */:
                     if (leftType === silentNeverType || rightType === silentNeverType) {
                         return silentNeverType;
                     }
@@ -73838,11 +75239,11 @@
                         else if (bothAreBigIntLike(leftType, rightType)) {
                             switch (operator) {
                                 case 49 /* GreaterThanGreaterThanGreaterThanToken */:
-                                case 71 /* GreaterThanGreaterThanGreaterThanEqualsToken */:
+                                case 72 /* GreaterThanGreaterThanGreaterThanEqualsToken */:
                                     reportOperatorError();
                                     break;
                                 case 42 /* AsteriskAsteriskToken */:
-                                case 66 /* AsteriskAsteriskEqualsToken */:
+                                case 67 /* AsteriskAsteriskEqualsToken */:
                                     if (languageVersion < 3 /* ES2016 */) {
                                         error(errorNode, ts.Diagnostics.Exponentiation_cannot_be_performed_on_bigint_values_unless_the_target_option_is_set_to_es2016_or_later);
                                     }
@@ -73860,7 +75261,7 @@
                         return resultType_1;
                     }
                 case 39 /* PlusToken */:
-                case 63 /* PlusEqualsToken */:
+                case 64 /* PlusEqualsToken */:
                     if (leftType === silentNeverType || rightType === silentNeverType) {
                         return silentNeverType;
                     }
@@ -73903,7 +75304,7 @@
                         });
                         return anyType;
                     }
-                    if (operator === 63 /* PlusEqualsToken */) {
+                    if (operator === 64 /* PlusEqualsToken */) {
                         checkAssignmentOperator(resultType);
                     }
                     return resultType;
@@ -73925,41 +75326,41 @@
                 case 37 /* ExclamationEqualsEqualsToken */:
                     reportOperatorErrorUnless(function (left, right) { return isTypeEqualityComparableTo(left, right) || isTypeEqualityComparableTo(right, left); });
                     return booleanType;
-                case 101 /* InstanceOfKeyword */:
+                case 102 /* InstanceOfKeyword */:
                     return checkInstanceOfExpression(left, right, leftType, rightType);
-                case 100 /* InKeyword */:
+                case 101 /* InKeyword */:
                     return checkInExpression(left, right, leftType, rightType);
                 case 55 /* AmpersandAmpersandToken */:
-                case 75 /* AmpersandAmpersandEqualsToken */: {
+                case 76 /* AmpersandAmpersandEqualsToken */: {
                     var resultType_2 = getTypeFacts(leftType) & 4194304 /* Truthy */ ?
                         getUnionType([extractDefinitelyFalsyTypes(strictNullChecks ? leftType : getBaseTypeOfLiteralType(rightType)), rightType]) :
                         leftType;
-                    if (operator === 75 /* AmpersandAmpersandEqualsToken */) {
+                    if (operator === 76 /* AmpersandAmpersandEqualsToken */) {
                         checkAssignmentOperator(rightType);
                     }
                     return resultType_2;
                 }
                 case 56 /* BarBarToken */:
-                case 74 /* BarBarEqualsToken */: {
+                case 75 /* BarBarEqualsToken */: {
                     var resultType_3 = getTypeFacts(leftType) & 8388608 /* Falsy */ ?
                         getUnionType([removeDefinitelyFalsyTypes(leftType), rightType], 2 /* Subtype */) :
                         leftType;
-                    if (operator === 74 /* BarBarEqualsToken */) {
+                    if (operator === 75 /* BarBarEqualsToken */) {
                         checkAssignmentOperator(rightType);
                     }
                     return resultType_3;
                 }
                 case 60 /* QuestionQuestionToken */:
-                case 76 /* QuestionQuestionEqualsToken */: {
+                case 77 /* QuestionQuestionEqualsToken */: {
                     var resultType_4 = getTypeFacts(leftType) & 262144 /* EQUndefinedOrNull */ ?
                         getUnionType([getNonNullableType(leftType), rightType], 2 /* Subtype */) :
                         leftType;
-                    if (operator === 76 /* QuestionQuestionEqualsToken */) {
+                    if (operator === 77 /* QuestionQuestionEqualsToken */) {
                         checkAssignmentOperator(rightType);
                     }
                     return resultType_4;
                 }
-                case 62 /* EqualsToken */:
+                case 63 /* EqualsToken */:
                     var declKind = ts.isBinaryExpression(left.parent) ? ts.getAssignmentDeclarationKind(left.parent) : 0 /* None */;
                     checkAssignmentDeclaration(declKind, rightType);
                     if (isAssignmentDeclaration(declKind)) {
@@ -74015,7 +75416,7 @@
                 }
             }
             function isEvalNode(node) {
-                return node.kind === 78 /* Identifier */ && node.escapedText === "eval";
+                return node.kind === 79 /* Identifier */ && node.escapedText === "eval";
             }
             // Return true if there was no error, false if there was an error.
             function checkForDisallowedESSymbolOperand(operator) {
@@ -74031,13 +75432,13 @@
             function getSuggestedBooleanOperator(operator) {
                 switch (operator) {
                     case 51 /* BarToken */:
-                    case 73 /* BarEqualsToken */:
+                    case 74 /* BarEqualsToken */:
                         return 56 /* BarBarToken */;
                     case 52 /* CaretToken */:
-                    case 77 /* CaretEqualsToken */:
+                    case 78 /* CaretEqualsToken */:
                         return 37 /* ExclamationEqualsEqualsToken */;
                     case 50 /* AmpersandToken */:
-                    case 72 /* AmpersandEqualsToken */:
+                    case 73 /* AmpersandEqualsToken */:
                         return 55 /* AmpersandAmpersandToken */;
                     default:
                         return undefined;
@@ -74206,6 +75607,11 @@
             var type2 = checkExpression(node.whenFalse, checkMode);
             return getUnionType([type1, type2], 2 /* Subtype */);
         }
+        function isTemplateLiteralContext(node) {
+            var parent = node.parent;
+            return ts.isParenthesizedExpression(parent) && isTemplateLiteralContext(parent) ||
+                ts.isElementAccessExpression(parent) && parent.argumentExpression === node;
+        }
         function checkTemplateExpression(node) {
             var texts = [node.head.text];
             var types = [];
@@ -74218,14 +75624,14 @@
                 texts.push(span.literal.text);
                 types.push(isTypeAssignableTo(type, templateConstraintType) ? type : stringType);
             }
-            return isConstContext(node) || someType(getContextualType(node) || unknownType, isTemplateLiteralContextualType) ? getTemplateLiteralType(texts, types) : stringType;
+            return isConstContext(node) || isTemplateLiteralContext(node) || someType(getContextualType(node) || unknownType, isTemplateLiteralContextualType) ? getTemplateLiteralType(texts, types) : stringType;
         }
         function isTemplateLiteralContextualType(type) {
             return !!(type.flags & (128 /* StringLiteral */ | 134217728 /* TemplateLiteral */) ||
                 type.flags & 58982400 /* InstantiableNonPrimitive */ && maybeTypeOfKind(getBaseConstraintOfType(type) || unknownType, 402653316 /* StringLike */));
         }
         function getContextNode(node) {
-            if (node.kind === 282 /* JsxAttributes */ && !ts.isJsxSelfClosingElement(node.parent)) {
+            if (node.kind === 284 /* JsxAttributes */ && !ts.isJsxSelfClosingElement(node.parent)) {
                 return node.parent.parent; // Needs to be the root JsxElement, so it encompasses the attributes _and_ the children (which are essentially part of the attributes)
             }
             return node;
@@ -74274,13 +75680,13 @@
         }
         function isTypeAssertion(node) {
             node = ts.skipParentheses(node);
-            return node.kind === 207 /* TypeAssertionExpression */ || node.kind === 225 /* AsExpression */;
+            return node.kind === 209 /* TypeAssertionExpression */ || node.kind === 227 /* AsExpression */;
         }
         function checkDeclarationInitializer(declaration, contextualType) {
             var initializer = ts.getEffectiveInitializer(declaration);
             var type = getQuickTypeOfExpression(initializer) ||
                 (contextualType ? checkExpressionWithContextualType(initializer, contextualType, /*inferenceContext*/ undefined, 0 /* Normal */) : checkExpressionCached(initializer));
-            return ts.isParameter(declaration) && declaration.name.kind === 198 /* ArrayBindingPattern */ &&
+            return ts.isParameter(declaration) && declaration.name.kind === 200 /* ArrayBindingPattern */ &&
                 isTupleType(type) && !type.target.hasRestElement && getTypeReferenceArity(type) < declaration.name.elements.length ?
                 padTupleType(type, declaration.name) : type;
         }
@@ -74290,7 +75696,7 @@
             var elementFlags = type.target.elementFlags.slice();
             for (var i = getTypeReferenceArity(type); i < patternElements.length; i++) {
                 var e = patternElements[i];
-                if (i < patternElements.length - 1 || !(e.kind === 199 /* BindingElement */ && e.dotDotDotToken)) {
+                if (i < patternElements.length - 1 || !(e.kind === 201 /* BindingElement */ && e.dotDotDotToken)) {
                     elementTypes.push(!ts.isOmittedExpression(e) && hasDefaultValue(e) ? getTypeFromBindingElement(e, /*includePatternInType*/ false, /*reportErrors*/ false) : anyType);
                     elementFlags.push(2 /* Optional */);
                     if (!ts.isOmittedExpression(e) && !hasDefaultValue(e)) {
@@ -74303,7 +75709,7 @@
         function widenTypeInferredFromInitializer(declaration, type) {
             var widened = ts.getCombinedNodeFlags(declaration) & 2 /* Const */ || ts.isDeclarationReadonly(declaration) ? type : getWidenedLiteralType(type);
             if (ts.isInJSFile(declaration)) {
-                if (widened.flags & 98304 /* Nullable */) {
+                if (isEmptyLiteralType(widened)) {
                     reportImplicitAny(declaration, anyType);
                     return anyType;
                 }
@@ -74357,7 +75763,7 @@
             // Do not use hasDynamicName here, because that returns false for well known symbols.
             // We want to perform checkComputedPropertyName for all computed properties, including
             // well known symbols.
-            if (node.name.kind === 159 /* ComputedPropertyName */) {
+            if (node.name.kind === 160 /* ComputedPropertyName */) {
                 checkComputedPropertyName(node.name);
             }
             return checkExpressionForMutableLocation(node.initializer, checkMode);
@@ -74368,7 +75774,7 @@
             // Do not use hasDynamicName here, because that returns false for well known symbols.
             // We want to perform checkComputedPropertyName for all computed properties, including
             // well known symbols.
-            if (node.name.kind === 159 /* ComputedPropertyName */) {
+            if (node.name.kind === 160 /* ComputedPropertyName */) {
                 checkComputedPropertyName(node.name);
             }
             var uninstantiatedType = checkFunctionExpressionOrObjectLiteralMethod(node, checkMode);
@@ -74495,7 +75901,7 @@
                 len--;
             var s = baseName.slice(0, len);
             for (var index = 1; true; index++) {
-                var augmentedName = (s + index);
+                var augmentedName = s + index;
                 if (!hasTypeParameterByName(typeParameters, augmentedName)) {
                     return augmentedName;
                 }
@@ -74544,7 +75950,7 @@
             var expr = ts.skipParentheses(node);
             // Optimize for the common case of a call to a function with a single non-generic call
             // signature where we can just fetch the return type without checking the arguments.
-            if (ts.isCallExpression(expr) && expr.expression.kind !== 105 /* SuperKeyword */ && !ts.isRequireCall(expr, /*checkArgumentIsStringLiteralLike*/ true) && !isSymbolOrSymbolForCall(expr)) {
+            if (ts.isCallExpression(expr) && expr.expression.kind !== 106 /* SuperKeyword */ && !ts.isRequireCall(expr, /*checkArgumentIsStringLiteralLike*/ true) && !isSymbolOrSymbolForCall(expr)) {
                 var type = ts.isCallChain(expr) ? getReturnTypeOfSingleNonGenericSignatureOfCallChain(expr) :
                     getReturnTypeOfSingleNonGenericCallSignature(checkNonNullExpression(expr.expression));
                 if (type) {
@@ -74555,7 +75961,7 @@
                 return getTypeFromTypeNode(expr.type);
             }
             else if (node.kind === 8 /* NumericLiteral */ || node.kind === 10 /* StringLiteral */ ||
-                node.kind === 109 /* TrueKeyword */ || node.kind === 94 /* FalseKeyword */) {
+                node.kind === 110 /* TrueKeyword */ || node.kind === 95 /* FalseKeyword */) {
                 return checkExpression(node);
             }
             return undefined;
@@ -74604,11 +76010,11 @@
             // - 'left' in property access
             // - 'object' in indexed access
             // - target in rhs of import statement
-            var ok = (node.parent.kind === 202 /* PropertyAccessExpression */ && node.parent.expression === node) ||
-                (node.parent.kind === 203 /* ElementAccessExpression */ && node.parent.expression === node) ||
-                ((node.kind === 78 /* Identifier */ || node.kind === 158 /* QualifiedName */) && isInRightSideOfImportOrExportAssignment(node) ||
-                    (node.parent.kind === 177 /* TypeQuery */ && node.parent.exprName === node)) ||
-                (node.parent.kind === 271 /* ExportSpecifier */); // We allow reexporting const enums
+            var ok = (node.parent.kind === 204 /* PropertyAccessExpression */ && node.parent.expression === node) ||
+                (node.parent.kind === 205 /* ElementAccessExpression */ && node.parent.expression === node) ||
+                ((node.kind === 79 /* Identifier */ || node.kind === 159 /* QualifiedName */) && isInRightSideOfImportOrExportAssignment(node) ||
+                    (node.parent.kind === 179 /* TypeQuery */ && node.parent.exprName === node)) ||
+                (node.parent.kind === 273 /* ExportSpecifier */); // We allow reexporting const enums
             if (!ok) {
                 error(node, ts.Diagnostics.const_enums_can_only_be_used_in_property_or_index_access_expressions_or_the_right_hand_side_of_an_import_declaration_or_export_assignment_or_type_query);
             }
@@ -74623,7 +76029,7 @@
         function checkParenthesizedExpression(node, checkMode) {
             var tag = ts.isInJSFile(node) ? ts.getJSDocTypeTag(node) : undefined;
             if (tag) {
-                return checkAssertionWorker(tag, tag.typeExpression.type, node.expression, checkMode);
+                return checkAssertionWorker(tag.typeExpression.type, tag.typeExpression.type, node.expression, checkMode);
             }
             return checkExpression(node.expression, checkMode);
         }
@@ -74633,106 +76039,109 @@
                 // Only bother checking on a few construct kinds.  We don't want to be excessively
                 // hitting the cancellation token on every node we check.
                 switch (kind) {
-                    case 222 /* ClassExpression */:
-                    case 209 /* FunctionExpression */:
-                    case 210 /* ArrowFunction */:
+                    case 224 /* ClassExpression */:
+                    case 211 /* FunctionExpression */:
+                    case 212 /* ArrowFunction */:
                         cancellationToken.throwIfCancellationRequested();
                 }
             }
             switch (kind) {
-                case 78 /* Identifier */:
+                case 79 /* Identifier */:
                     return checkIdentifier(node, checkMode);
-                case 107 /* ThisKeyword */:
+                case 108 /* ThisKeyword */:
                     return checkThisExpression(node);
-                case 105 /* SuperKeyword */:
+                case 106 /* SuperKeyword */:
                     return checkSuperExpression(node);
-                case 103 /* NullKeyword */:
+                case 104 /* NullKeyword */:
                     return nullWideningType;
                 case 14 /* NoSubstitutionTemplateLiteral */:
                 case 10 /* StringLiteral */:
-                    return getFreshTypeOfLiteralType(getLiteralType(node.text));
+                    return getFreshTypeOfLiteralType(getStringLiteralType(node.text));
                 case 8 /* NumericLiteral */:
                     checkGrammarNumericLiteral(node);
-                    return getFreshTypeOfLiteralType(getLiteralType(+node.text));
+                    return getFreshTypeOfLiteralType(getNumberLiteralType(+node.text));
                 case 9 /* BigIntLiteral */:
                     checkGrammarBigIntLiteral(node);
-                    return getFreshTypeOfLiteralType(getBigIntLiteralType(node));
-                case 109 /* TrueKeyword */:
+                    return getFreshTypeOfLiteralType(getBigIntLiteralType({
+                        negative: false,
+                        base10Value: ts.parsePseudoBigInt(node.text)
+                    }));
+                case 110 /* TrueKeyword */:
                     return trueType;
-                case 94 /* FalseKeyword */:
+                case 95 /* FalseKeyword */:
                     return falseType;
-                case 219 /* TemplateExpression */:
+                case 221 /* TemplateExpression */:
                     return checkTemplateExpression(node);
                 case 13 /* RegularExpressionLiteral */:
                     return globalRegExpType;
-                case 200 /* ArrayLiteralExpression */:
+                case 202 /* ArrayLiteralExpression */:
                     return checkArrayLiteral(node, checkMode, forceTuple);
-                case 201 /* ObjectLiteralExpression */:
+                case 203 /* ObjectLiteralExpression */:
                     return checkObjectLiteral(node, checkMode);
-                case 202 /* PropertyAccessExpression */:
+                case 204 /* PropertyAccessExpression */:
                     return checkPropertyAccessExpression(node, checkMode);
-                case 158 /* QualifiedName */:
+                case 159 /* QualifiedName */:
                     return checkQualifiedName(node, checkMode);
-                case 203 /* ElementAccessExpression */:
+                case 205 /* ElementAccessExpression */:
                     return checkIndexedAccess(node, checkMode);
-                case 204 /* CallExpression */:
-                    if (node.expression.kind === 99 /* ImportKeyword */) {
+                case 206 /* CallExpression */:
+                    if (node.expression.kind === 100 /* ImportKeyword */) {
                         return checkImportCallExpression(node);
                     }
                 // falls through
-                case 205 /* NewExpression */:
+                case 207 /* NewExpression */:
                     return checkCallExpression(node, checkMode);
-                case 206 /* TaggedTemplateExpression */:
+                case 208 /* TaggedTemplateExpression */:
                     return checkTaggedTemplateExpression(node);
-                case 208 /* ParenthesizedExpression */:
+                case 210 /* ParenthesizedExpression */:
                     return checkParenthesizedExpression(node, checkMode);
-                case 222 /* ClassExpression */:
+                case 224 /* ClassExpression */:
                     return checkClassExpression(node);
-                case 209 /* FunctionExpression */:
-                case 210 /* ArrowFunction */:
+                case 211 /* FunctionExpression */:
+                case 212 /* ArrowFunction */:
                     return checkFunctionExpressionOrObjectLiteralMethod(node, checkMode);
-                case 212 /* TypeOfExpression */:
+                case 214 /* TypeOfExpression */:
                     return checkTypeOfExpression(node);
-                case 207 /* TypeAssertionExpression */:
-                case 225 /* AsExpression */:
+                case 209 /* TypeAssertionExpression */:
+                case 227 /* AsExpression */:
                     return checkAssertion(node);
-                case 226 /* NonNullExpression */:
+                case 228 /* NonNullExpression */:
                     return checkNonNullAssertion(node);
-                case 227 /* MetaProperty */:
+                case 229 /* MetaProperty */:
                     return checkMetaProperty(node);
-                case 211 /* DeleteExpression */:
+                case 213 /* DeleteExpression */:
                     return checkDeleteExpression(node);
-                case 213 /* VoidExpression */:
+                case 215 /* VoidExpression */:
                     return checkVoidExpression(node);
-                case 214 /* AwaitExpression */:
+                case 216 /* AwaitExpression */:
                     return checkAwaitExpression(node);
-                case 215 /* PrefixUnaryExpression */:
+                case 217 /* PrefixUnaryExpression */:
                     return checkPrefixUnaryExpression(node);
-                case 216 /* PostfixUnaryExpression */:
+                case 218 /* PostfixUnaryExpression */:
                     return checkPostfixUnaryExpression(node);
-                case 217 /* BinaryExpression */:
+                case 219 /* BinaryExpression */:
                     return checkBinaryExpression(node, checkMode);
-                case 218 /* ConditionalExpression */:
+                case 220 /* ConditionalExpression */:
                     return checkConditionalExpression(node, checkMode);
-                case 221 /* SpreadElement */:
+                case 223 /* SpreadElement */:
                     return checkSpreadExpression(node, checkMode);
-                case 223 /* OmittedExpression */:
+                case 225 /* OmittedExpression */:
                     return undefinedWideningType;
-                case 220 /* YieldExpression */:
+                case 222 /* YieldExpression */:
                     return checkYieldExpression(node);
-                case 228 /* SyntheticExpression */:
+                case 230 /* SyntheticExpression */:
                     return checkSyntheticExpression(node);
-                case 284 /* JsxExpression */:
+                case 286 /* JsxExpression */:
                     return checkJsxExpression(node, checkMode);
-                case 274 /* JsxElement */:
+                case 276 /* JsxElement */:
                     return checkJsxElement(node, checkMode);
-                case 275 /* JsxSelfClosingElement */:
+                case 277 /* JsxSelfClosingElement */:
                     return checkJsxSelfClosingElement(node, checkMode);
-                case 278 /* JsxFragment */:
+                case 280 /* JsxFragment */:
                     return checkJsxFragment(node);
-                case 282 /* JsxAttributes */:
+                case 284 /* JsxAttributes */:
                     return checkJsxAttributes(node, checkMode);
-                case 276 /* JsxOpeningElement */:
+                case 278 /* JsxOpeningElement */:
                     ts.Debug.fail("Shouldn't ever directly check a JsxOpeningElement");
             }
             return errorType;
@@ -74769,10 +76178,10 @@
             checkVariableLikeDeclaration(node);
             var func = ts.getContainingFunction(node);
             if (ts.hasSyntacticModifier(node, 16476 /* ParameterPropertyModifier */)) {
-                if (!(func.kind === 167 /* Constructor */ && ts.nodeIsPresent(func.body))) {
+                if (!(func.kind === 169 /* Constructor */ && ts.nodeIsPresent(func.body))) {
                     error(node, ts.Diagnostics.A_parameter_property_is_only_allowed_in_a_constructor_implementation);
                 }
-                if (func.kind === 167 /* Constructor */ && ts.isIdentifier(node.name) && node.name.escapedText === "constructor") {
+                if (func.kind === 169 /* Constructor */ && ts.isIdentifier(node.name) && node.name.escapedText === "constructor") {
                     error(node.name, ts.Diagnostics.constructor_cannot_be_used_as_a_parameter_property_name);
                 }
             }
@@ -74783,13 +76192,13 @@
                 if (func.parameters.indexOf(node) !== 0) {
                     error(node, ts.Diagnostics.A_0_parameter_must_be_the_first_parameter, node.name.escapedText);
                 }
-                if (func.kind === 167 /* Constructor */ || func.kind === 171 /* ConstructSignature */ || func.kind === 176 /* ConstructorType */) {
+                if (func.kind === 169 /* Constructor */ || func.kind === 173 /* ConstructSignature */ || func.kind === 178 /* ConstructorType */) {
                     error(node, ts.Diagnostics.A_constructor_cannot_have_a_this_parameter);
                 }
-                if (func.kind === 210 /* ArrowFunction */) {
+                if (func.kind === 212 /* ArrowFunction */) {
                     error(node, ts.Diagnostics.An_arrow_function_cannot_have_a_this_parameter);
                 }
-                if (func.kind === 168 /* GetAccessor */ || func.kind === 169 /* SetAccessor */) {
+                if (func.kind === 170 /* GetAccessor */ || func.kind === 171 /* SetAccessor */) {
                     error(node, ts.Diagnostics.get_and_set_accessors_cannot_declare_this_parameters);
                 }
             }
@@ -74847,13 +76256,13 @@
         }
         function getTypePredicateParent(node) {
             switch (node.parent.kind) {
-                case 210 /* ArrowFunction */:
-                case 170 /* CallSignature */:
-                case 252 /* FunctionDeclaration */:
-                case 209 /* FunctionExpression */:
-                case 175 /* FunctionType */:
-                case 166 /* MethodDeclaration */:
-                case 165 /* MethodSignature */:
+                case 212 /* ArrowFunction */:
+                case 172 /* CallSignature */:
+                case 254 /* FunctionDeclaration */:
+                case 211 /* FunctionExpression */:
+                case 177 /* FunctionType */:
+                case 167 /* MethodDeclaration */:
+                case 166 /* MethodSignature */:
                     var parent = node.parent;
                     if (node === parent.type) {
                         return parent;
@@ -74867,11 +76276,11 @@
                     continue;
                 }
                 var name = element.name;
-                if (name.kind === 78 /* Identifier */ && name.escapedText === predicateVariableName) {
+                if (name.kind === 79 /* Identifier */ && name.escapedText === predicateVariableName) {
                     error(predicateVariableNode, ts.Diagnostics.A_type_predicate_cannot_reference_element_0_in_a_binding_pattern, predicateVariableName);
                     return true;
                 }
-                else if (name.kind === 198 /* ArrayBindingPattern */ || name.kind === 197 /* ObjectBindingPattern */) {
+                else if (name.kind === 200 /* ArrayBindingPattern */ || name.kind === 199 /* ObjectBindingPattern */) {
                     if (checkIfTypePredicateVariableIsDeclaredInBindingPattern(name, predicateVariableNode, predicateVariableName)) {
                         return true;
                     }
@@ -74880,13 +76289,13 @@
         }
         function checkSignatureDeclaration(node) {
             // Grammar checking
-            if (node.kind === 172 /* IndexSignature */) {
+            if (node.kind === 174 /* IndexSignature */) {
                 checkGrammarIndexSignature(node);
             }
             // TODO (yuisu): Remove this check in else-if when SyntaxKind.Construct is moved and ambient context is handled
-            else if (node.kind === 175 /* FunctionType */ || node.kind === 252 /* FunctionDeclaration */ || node.kind === 176 /* ConstructorType */ ||
-                node.kind === 170 /* CallSignature */ || node.kind === 167 /* Constructor */ ||
-                node.kind === 171 /* ConstructSignature */) {
+            else if (node.kind === 177 /* FunctionType */ || node.kind === 254 /* FunctionDeclaration */ || node.kind === 178 /* ConstructorType */ ||
+                node.kind === 172 /* CallSignature */ || node.kind === 169 /* Constructor */ ||
+                node.kind === 173 /* ConstructSignature */) {
                 checkGrammarFunctionLikeDeclaration(node);
             }
             var functionFlags = ts.getFunctionFlags(node);
@@ -74916,10 +76325,10 @@
                 var returnTypeNode = ts.getEffectiveReturnTypeNode(node);
                 if (noImplicitAny && !returnTypeNode) {
                     switch (node.kind) {
-                        case 171 /* ConstructSignature */:
+                        case 173 /* ConstructSignature */:
                             error(node, ts.Diagnostics.Construct_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type);
                             break;
-                        case 170 /* CallSignature */:
+                        case 172 /* CallSignature */:
                             error(node, ts.Diagnostics.Call_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type);
                             break;
                     }
@@ -74949,7 +76358,7 @@
                         checkAsyncFunctionReturnType(node, returnTypeNode);
                     }
                 }
-                if (node.kind !== 172 /* IndexSignature */ && node.kind !== 309 /* JSDocFunctionType */) {
+                if (node.kind !== 174 /* IndexSignature */ && node.kind !== 312 /* JSDocFunctionType */) {
                     registerForUnusedIdentifiersCheck(node);
                 }
             }
@@ -74961,7 +76370,7 @@
             var privateIdentifiers = new ts.Map();
             for (var _i = 0, _a = node.members; _i < _a.length; _i++) {
                 var member = _a[_i];
-                if (member.kind === 167 /* Constructor */) {
+                if (member.kind === 169 /* Constructor */) {
                     for (var _b = 0, _c = member.parameters; _b < _c.length; _b++) {
                         var param = _c[_b];
                         if (ts.isParameterPropertyDeclaration(param, member) && !ts.isBindingPattern(param.name)) {
@@ -74970,29 +76379,29 @@
                     }
                 }
                 else {
-                    var isStatic = ts.hasSyntacticModifier(member, 32 /* Static */);
+                    var isStaticMember = ts.isStatic(member);
                     var name = member.name;
                     if (!name) {
                         continue;
                     }
                     var isPrivate = ts.isPrivateIdentifier(name);
-                    var privateStaticFlags = isPrivate && isStatic ? 16 /* PrivateStatic */ : 0;
+                    var privateStaticFlags = isPrivate && isStaticMember ? 16 /* PrivateStatic */ : 0;
                     var names = isPrivate ? privateIdentifiers :
-                        isStatic ? staticNames :
+                        isStaticMember ? staticNames :
                             instanceNames;
                     var memberName = name && ts.getPropertyNameForPropertyNameNode(name);
                     if (memberName) {
                         switch (member.kind) {
-                            case 168 /* GetAccessor */:
+                            case 170 /* GetAccessor */:
                                 addName(names, name, memberName, 1 /* GetAccessor */ | privateStaticFlags);
                                 break;
-                            case 169 /* SetAccessor */:
+                            case 171 /* SetAccessor */:
                                 addName(names, name, memberName, 2 /* SetAccessor */ | privateStaticFlags);
                                 break;
-                            case 164 /* PropertyDeclaration */:
+                            case 165 /* PropertyDeclaration */:
                                 addName(names, name, memberName, 3 /* GetOrSetAccessor */ | privateStaticFlags);
                                 break;
-                            case 166 /* MethodDeclaration */:
+                            case 167 /* MethodDeclaration */:
                                 addName(names, name, memberName, 8 /* Method */ | privateStaticFlags);
                                 break;
                         }
@@ -75043,8 +76452,8 @@
             for (var _i = 0, _a = node.members; _i < _a.length; _i++) {
                 var member = _a[_i];
                 var memberNameNode = member.name;
-                var isStatic = ts.hasSyntacticModifier(member, 32 /* Static */);
-                if (isStatic && memberNameNode) {
+                var isStaticMember = ts.isStatic(member);
+                if (isStaticMember && memberNameNode) {
                     var memberName = ts.getPropertyNameForPropertyNameNode(memberNameNode);
                     switch (memberName) {
                         case "name":
@@ -75064,7 +76473,7 @@
             var names = new ts.Map();
             for (var _i = 0, _a = node.members; _i < _a.length; _i++) {
                 var member = _a[_i];
-                if (member.kind === 163 /* PropertySignature */) {
+                if (member.kind === 164 /* PropertySignature */) {
                     var memberName = void 0;
                     var name = member.name;
                     switch (name.kind) {
@@ -75072,7 +76481,7 @@
                         case 8 /* NumericLiteral */:
                             memberName = name.text;
                             break;
-                        case 78 /* Identifier */:
+                        case 79 /* Identifier */:
                             memberName = ts.idText(name);
                             break;
                         default:
@@ -75089,7 +76498,7 @@
             }
         }
         function checkTypeForDuplicateIndexSignatures(node) {
-            if (node.kind === 254 /* InterfaceDeclaration */) {
+            if (node.kind === 256 /* InterfaceDeclaration */) {
                 var nodeSymbol = getSymbolOfNode(node);
                 // in case of merging interface declaration it is possible that we'll enter this check procedure several times for every declaration
                 // to prevent this run check only for the first declaration of a given kind
@@ -75102,32 +76511,32 @@
             // 8.5: A class declaration can have at most one string index member declaration and one numeric index member declaration
             var indexSymbol = getIndexSymbol(getSymbolOfNode(node));
             if (indexSymbol === null || indexSymbol === void 0 ? void 0 : indexSymbol.declarations) {
-                var seenNumericIndexer = false;
-                var seenStringIndexer = false;
-                for (var _i = 0, _a = indexSymbol.declarations; _i < _a.length; _i++) {
-                    var decl = _a[_i];
-                    var declaration = decl;
+                var indexSignatureMap_1 = new ts.Map();
+                var _loop_26 = function (declaration) {
                     if (declaration.parameters.length === 1 && declaration.parameters[0].type) {
-                        switch (declaration.parameters[0].type.kind) {
-                            case 147 /* StringKeyword */:
-                                if (!seenStringIndexer) {
-                                    seenStringIndexer = true;
-                                }
-                                else {
-                                    error(declaration, ts.Diagnostics.Duplicate_string_index_signature);
-                                }
-                                break;
-                            case 144 /* NumberKeyword */:
-                                if (!seenNumericIndexer) {
-                                    seenNumericIndexer = true;
-                                }
-                                else {
-                                    error(declaration, ts.Diagnostics.Duplicate_number_index_signature);
-                                }
-                                break;
+                        forEachType(getTypeFromTypeNode(declaration.parameters[0].type), function (type) {
+                            var entry = indexSignatureMap_1.get(getTypeId(type));
+                            if (entry) {
+                                entry.declarations.push(declaration);
+                            }
+                            else {
+                                indexSignatureMap_1.set(getTypeId(type), { type: type, declarations: [declaration] });
+                            }
+                        });
+                    }
+                };
+                for (var _i = 0, _a = indexSymbol.declarations; _i < _a.length; _i++) {
+                    var declaration = _a[_i];
+                    _loop_26(declaration);
+                }
+                indexSignatureMap_1.forEach(function (entry) {
+                    if (entry.declarations.length > 1) {
+                        for (var _i = 0, _a = entry.declarations; _i < _a.length; _i++) {
+                            var declaration = _a[_i];
+                            error(declaration, ts.Diagnostics.Duplicate_index_signature_for_type_0, typeToString(entry.type));
                         }
                     }
-                }
+                });
             }
         }
         function checkPropertyDeclaration(node) {
@@ -75139,6 +76548,10 @@
             if (ts.isPrivateIdentifier(node.name) && ts.hasStaticModifier(node) && node.initializer && languageVersion === 99 /* ESNext */ && !compilerOptions.useDefineForClassFields) {
                 error(node.initializer, ts.Diagnostics.Static_fields_with_private_names_can_t_have_initializers_when_the_useDefineForClassFields_flag_is_not_specified_with_a_target_of_esnext_Consider_adding_the_useDefineForClassFields_flag);
             }
+            // property signatures already report "initializer not allowed in ambient context" elsewhere
+            if (ts.hasSyntacticModifier(node, 128 /* Abstract */) && node.kind === 165 /* PropertyDeclaration */ && node.initializer) {
+                error(node, ts.Diagnostics.Property_0_cannot_have_an_initializer_because_it_is_marked_abstract, ts.declarationNameToString(node.name));
+            }
         }
         function checkPropertySignature(node) {
             if (ts.isPrivateIdentifier(node.name)) {
@@ -75152,9 +76565,8 @@
                 checkGrammarComputedPropertyName(node.name);
             // Grammar checking for modifiers is done inside the function checkGrammarFunctionLikeDeclaration
             checkFunctionOrMethodDeclaration(node);
-            // Abstract methods cannot have an implementation.
-            // Extra checks are to avoid reporting multiple errors relating to the "abstractness" of the node.
-            if (ts.hasSyntacticModifier(node, 128 /* Abstract */) && node.kind === 166 /* MethodDeclaration */ && node.body) {
+            // method signatures already report "implementation not allowed in ambient context" elsewhere
+            if (ts.hasSyntacticModifier(node, 128 /* Abstract */) && node.kind === 167 /* MethodDeclaration */ && node.body) {
                 error(node, ts.Diagnostics.Method_0_cannot_have_an_implementation_because_it_is_marked_abstract, ts.declarationNameToString(node.name));
             }
             // Private named methods are only allowed in class declarations
@@ -75180,6 +76592,10 @@
                 }
             }
         }
+        function checkClassStaticBlockDeclaration(node) {
+            checkGrammarDecoratorsAndModifiers(node);
+            ts.forEachChild(node, checkSourceElement);
+        }
         function checkConstructorDeclaration(node) {
             // Grammar check on signature of constructor and modifier of the constructor is done in checkSignatureDeclaration function.
             checkSignatureDeclaration(node);
@@ -75204,8 +76620,8 @@
                 if (ts.isPrivateIdentifierClassElementDeclaration(n)) {
                     return true;
                 }
-                return n.kind === 164 /* PropertyDeclaration */ &&
-                    !ts.hasSyntacticModifier(n, 32 /* Static */) &&
+                return n.kind === 165 /* PropertyDeclaration */ &&
+                    !ts.isStatic(n) &&
                     !!n.initializer;
             }
             // TS 1.0 spec (April 2014): 8.3.2
@@ -75235,7 +76651,7 @@
                         var superCallStatement = void 0;
                         for (var _i = 0, statements_4 = statements; _i < statements_4.length; _i++) {
                             var statement = statements_4[_i];
-                            if (statement.kind === 234 /* ExpressionStatement */ && ts.isSuperCall(statement.expression)) {
+                            if (statement.kind === 236 /* ExpressionStatement */ && ts.isSuperCall(statement.expression)) {
                                 superCallStatement = statement;
                                 break;
                             }
@@ -75260,7 +76676,7 @@
                     checkGrammarComputedPropertyName(node.name);
                 checkDecorators(node);
                 checkSignatureDeclaration(node);
-                if (node.kind === 168 /* GetAccessor */) {
+                if (node.kind === 170 /* GetAccessor */) {
                     if (!(node.flags & 8388608 /* Ambient */) && ts.nodeIsPresent(node.body) && (node.flags & 256 /* HasImplicitReturn */)) {
                         if (!(node.flags & 512 /* HasExplicitReturn */)) {
                             error(node.name, ts.Diagnostics.A_get_accessor_must_return_a_value);
@@ -75270,15 +76686,15 @@
                 // Do not use hasDynamicName here, because that returns false for well known symbols.
                 // We want to perform checkComputedPropertyName for all computed properties, including
                 // well known symbols.
-                if (node.name.kind === 159 /* ComputedPropertyName */) {
+                if (node.name.kind === 160 /* ComputedPropertyName */) {
                     checkComputedPropertyName(node.name);
                 }
                 if (hasBindableName(node)) {
                     // TypeScript 1.0 spec (April 2014): 8.4.3
                     // Accessors for the same member name must specify the same accessibility.
                     var symbol = getSymbolOfNode(node);
-                    var getter = ts.getDeclarationOfKind(symbol, 168 /* GetAccessor */);
-                    var setter = ts.getDeclarationOfKind(symbol, 169 /* SetAccessor */);
+                    var getter = ts.getDeclarationOfKind(symbol, 170 /* GetAccessor */);
+                    var setter = ts.getDeclarationOfKind(symbol, 171 /* SetAccessor */);
                     if (getter && setter && !(getNodeCheckFlags(getter) & 1 /* TypeChecked */)) {
                         getNodeLinks(getter).flags |= 1 /* TypeChecked */;
                         var getterFlags = ts.getEffectiveModifierFlags(getter);
@@ -75300,7 +76716,7 @@
                     }
                 }
                 var returnType = getTypeOfAccessors(getSymbolOfNode(node));
-                if (node.kind === 168 /* GetAccessor */) {
+                if (node.kind === 170 /* GetAccessor */) {
                     checkAllCodePathsInNonVoidFunctionReturnOrThrow(node, returnType);
                 }
             }
@@ -75342,7 +76758,7 @@
         }
         function checkTypeReferenceNode(node) {
             checkGrammarTypeArguments(node, node.typeArguments);
-            if (node.kind === 174 /* TypeReference */ && node.typeName.jsdocDotPos !== undefined && !ts.isInJSFile(node) && !ts.isInJSDoc(node)) {
+            if (node.kind === 176 /* TypeReference */ && node.typeName.jsdocDotPos !== undefined && !ts.isInJSFile(node) && !ts.isInJSDoc(node)) {
                 grammarErrorAtPos(node, node.typeName.jsdocDotPos, 1, ts.Diagnostics.JSDoc_types_can_only_be_used_inside_documentation_comments);
             }
             ts.forEach(node.typeArguments, checkSourceElement);
@@ -75395,7 +76811,7 @@
             var hasNamedElement = ts.some(elementTypes, ts.isNamedTupleMember);
             for (var _i = 0, elementTypes_1 = elementTypes; _i < elementTypes_1.length; _i++) {
                 var e = elementTypes_1[_i];
-                if (e.kind !== 193 /* NamedTupleMember */ && hasNamedElement) {
+                if (e.kind !== 195 /* NamedTupleMember */ && hasNamedElement) {
                     grammarErrorOnNode(e, ts.Diagnostics.Tuple_members_must_all_have_names_or_all_not_have_names);
                     break;
                 }
@@ -75444,7 +76860,7 @@
             var objectType = type.objectType;
             var indexType = type.indexType;
             if (isTypeAssignableTo(indexType, getIndexType(objectType, /*stringsOnly*/ false))) {
-                if (accessNode.kind === 203 /* ElementAccessExpression */ && ts.isAssignmentTarget(accessNode) &&
+                if (accessNode.kind === 205 /* ElementAccessExpression */ && ts.isAssignmentTarget(accessNode) &&
                     ts.getObjectFlags(objectType) & 32 /* Mapped */ && getMappedTypeModifiers(objectType) & 1 /* IncludeReadonly */) {
                     error(accessNode, ts.Diagnostics.Index_signature_in_type_0_only_permits_reading, typeToString(objectType));
                 }
@@ -75453,7 +76869,7 @@
             // Check if we're indexing with a numeric type and if either object or index types
             // is a generic type with a constraint that has a numeric index signature.
             var apparentObjectType = getApparentType(objectType);
-            if (getIndexInfoOfType(apparentObjectType, 1 /* Number */) && isTypeAssignableToKind(indexType, 296 /* NumberLike */)) {
+            if (getIndexInfoOfType(apparentObjectType, numberType) && isTypeAssignableToKind(indexType, 296 /* NumberLike */)) {
                 return type;
             }
             if (isGenericObjectType(objectType)) {
@@ -75502,7 +76918,7 @@
             ts.forEachChild(node, checkSourceElement);
         }
         function checkInferType(node) {
-            if (!ts.findAncestor(node, function (n) { return n.parent && n.parent.kind === 185 /* ConditionalType */ && n.parent.extendsType === n; })) {
+            if (!ts.findAncestor(node, function (n) { return n.parent && n.parent.kind === 187 /* ConditionalType */ && n.parent.extendsType === n; })) {
                 grammarErrorOnNode(node, ts.Diagnostics.infer_declarations_are_only_permitted_in_the_extends_clause_of_a_conditional_type);
             }
             checkSourceElement(node.typeParameter);
@@ -75525,10 +76941,10 @@
             if (node.dotDotDotToken && node.questionToken) {
                 grammarErrorOnNode(node, ts.Diagnostics.A_tuple_member_cannot_be_both_optional_and_rest);
             }
-            if (node.type.kind === 181 /* OptionalType */) {
+            if (node.type.kind === 183 /* OptionalType */) {
                 grammarErrorOnNode(node.type, ts.Diagnostics.A_labeled_tuple_element_is_declared_as_optional_with_a_question_mark_after_the_name_and_before_the_colon_rather_than_after_the_type);
             }
-            if (node.type.kind === 182 /* RestType */) {
+            if (node.type.kind === 184 /* RestType */) {
                 grammarErrorOnNode(node.type, ts.Diagnostics.A_labeled_tuple_element_is_declared_as_rest_with_a_before_the_name_rather_than_before_the_type);
             }
             checkSourceElement(node.type);
@@ -75541,9 +76957,9 @@
             var flags = ts.getCombinedModifierFlags(n);
             // children of classes (even ambient classes) should not be marked as ambient or export
             // because those flags have no useful semantics there.
-            if (n.parent.kind !== 254 /* InterfaceDeclaration */ &&
-                n.parent.kind !== 253 /* ClassDeclaration */ &&
-                n.parent.kind !== 222 /* ClassExpression */ &&
+            if (n.parent.kind !== 256 /* InterfaceDeclaration */ &&
+                n.parent.kind !== 255 /* ClassDeclaration */ &&
+                n.parent.kind !== 224 /* ClassExpression */ &&
                 n.flags & 8388608 /* Ambient */) {
                 if (!(flags & 2 /* Ambient */) && !(ts.isModuleBlock(n.parent) && ts.isModuleDeclaration(n.parent.parent) && ts.isGlobalScopeAugmentation(n.parent.parent))) {
                     // It is nested in an ambient context, which means it is automatically exported
@@ -75639,14 +77055,14 @@
                             // Both are literal property names that are the same.
                             ts.isPropertyNameLiteral(node.name) && ts.isPropertyNameLiteral(subsequentName) &&
                                 ts.getEscapedTextOfIdentifierOrLiteral(node.name) === ts.getEscapedTextOfIdentifierOrLiteral(subsequentName))) {
-                            var reportError = (node.kind === 166 /* MethodDeclaration */ || node.kind === 165 /* MethodSignature */) &&
-                                ts.hasSyntacticModifier(node, 32 /* Static */) !== ts.hasSyntacticModifier(subsequentNode, 32 /* Static */);
+                            var reportError = (node.kind === 167 /* MethodDeclaration */ || node.kind === 166 /* MethodSignature */) &&
+                                ts.isStatic(node) !== ts.isStatic(subsequentNode);
                             // we can get here in two cases
                             // 1. mixed static and instance class members
                             // 2. something with the same name was defined before the set of overloads that prevents them from merging
                             // here we'll report error only for the first case since for second we should already report error in binder
                             if (reportError) {
-                                var diagnostic = ts.hasSyntacticModifier(node, 32 /* Static */) ? ts.Diagnostics.Function_overload_must_be_static : ts.Diagnostics.Function_overload_must_not_be_static;
+                                var diagnostic = ts.isStatic(node) ? ts.Diagnostics.Function_overload_must_be_static : ts.Diagnostics.Function_overload_must_not_be_static;
                                 error(errorNode_1, diagnostic);
                             }
                             return;
@@ -75681,7 +77097,7 @@
                     var current = declarations_4[_i];
                     var node = current;
                     var inAmbientContext = node.flags & 8388608 /* Ambient */;
-                    var inAmbientContextOrInterface = node.parent && (node.parent.kind === 254 /* InterfaceDeclaration */ || node.parent.kind === 178 /* TypeLiteral */) || inAmbientContext;
+                    var inAmbientContextOrInterface = node.parent && (node.parent.kind === 256 /* InterfaceDeclaration */ || node.parent.kind === 180 /* TypeLiteral */) || inAmbientContext;
                     if (inAmbientContextOrInterface) {
                         // check if declarations are consecutive only if they are non-ambient
                         // 1. ambient declarations can be interleaved
@@ -75692,10 +77108,10 @@
                         // 2. mixing ambient and non-ambient declarations is a separate error that will be reported - do not want to report an extra one
                         previousDeclaration = undefined;
                     }
-                    if ((node.kind === 253 /* ClassDeclaration */ || node.kind === 222 /* ClassExpression */) && !inAmbientContext) {
+                    if ((node.kind === 255 /* ClassDeclaration */ || node.kind === 224 /* ClassExpression */) && !inAmbientContext) {
                         hasNonAmbientClass = true;
                     }
-                    if (node.kind === 252 /* FunctionDeclaration */ || node.kind === 166 /* MethodDeclaration */ || node.kind === 165 /* MethodSignature */ || node.kind === 167 /* Constructor */) {
+                    if (node.kind === 254 /* FunctionDeclaration */ || node.kind === 167 /* MethodDeclaration */ || node.kind === 166 /* MethodSignature */ || node.kind === 169 /* Constructor */) {
                         functionDeclarations.push(node);
                         var currentNodeFlags = getEffectiveDeclarationFlags(node, flagsToCheck);
                         someNodeFlags |= currentNodeFlags;
@@ -75739,13 +77155,18 @@
                     error(ts.getNameOfDeclaration(declaration) || declaration, ts.Diagnostics.Duplicate_function_implementation);
                 });
             }
-            if (hasNonAmbientClass && !isConstructor && symbol.flags & 16 /* Function */) {
-                // A non-ambient class cannot be an implementation for a non-constructor function/class merge
-                // TODO: The below just replicates our older error from when classes and functions were
-                // entirely unable to merge - a more helpful message like "Class declaration cannot implement overload list"
-                // might be warranted. :shrug:
+            if (hasNonAmbientClass && !isConstructor && symbol.flags & 16 /* Function */ && declarations) {
+                var relatedDiagnostics_1 = ts.filter(declarations, function (d) { return d.kind === 255 /* ClassDeclaration */; })
+                    .map(function (d) { return ts.createDiagnosticForNode(d, ts.Diagnostics.Consider_adding_a_declare_modifier_to_this_class); });
                 ts.forEach(declarations, function (declaration) {
-                    addDuplicateDeclarationError(declaration, ts.Diagnostics.Duplicate_identifier_0, ts.symbolName(symbol), declarations);
+                    var diagnostic = declaration.kind === 255 /* ClassDeclaration */
+                        ? ts.Diagnostics.Class_declaration_cannot_implement_overload_list_for_0
+                        : declaration.kind === 254 /* FunctionDeclaration */
+                            ? ts.Diagnostics.Function_with_bodies_can_only_merge_with_classes_that_are_ambient
+                            : undefined;
+                    if (diagnostic) {
+                        ts.addRelatedInfo.apply(void 0, __spreadArray([error(ts.getNameOfDeclaration(declaration) || declaration, diagnostic, ts.symbolName(symbol))], relatedDiagnostics_1, false));
+                    }
                 });
             }
             // Abstract methods can't have an implementation -- in particular, they don't need one.
@@ -75831,26 +77252,26 @@
             function getDeclarationSpaces(decl) {
                 var d = decl;
                 switch (d.kind) {
-                    case 254 /* InterfaceDeclaration */:
-                    case 255 /* TypeAliasDeclaration */:
+                    case 256 /* InterfaceDeclaration */:
+                    case 257 /* TypeAliasDeclaration */:
                     // A jsdoc typedef and callback are, by definition, type aliases.
                     // falls through
-                    case 335 /* JSDocTypedefTag */:
-                    case 328 /* JSDocCallbackTag */:
-                    case 329 /* JSDocEnumTag */:
+                    case 340 /* JSDocTypedefTag */:
+                    case 333 /* JSDocCallbackTag */:
+                    case 334 /* JSDocEnumTag */:
                         return 2 /* ExportType */;
-                    case 257 /* ModuleDeclaration */:
+                    case 259 /* ModuleDeclaration */:
                         return ts.isAmbientModule(d) || ts.getModuleInstanceState(d) !== 0 /* NonInstantiated */
                             ? 4 /* ExportNamespace */ | 1 /* ExportValue */
                             : 4 /* ExportNamespace */;
-                    case 253 /* ClassDeclaration */:
-                    case 256 /* EnumDeclaration */:
-                    case 292 /* EnumMember */:
+                    case 255 /* ClassDeclaration */:
+                    case 258 /* EnumDeclaration */:
+                    case 294 /* EnumMember */:
                         return 2 /* ExportType */ | 1 /* ExportValue */;
-                    case 298 /* SourceFile */:
+                    case 300 /* SourceFile */:
                         return 2 /* ExportType */ | 1 /* ExportValue */ | 4 /* ExportNamespace */;
-                    case 267 /* ExportAssignment */:
-                    case 217 /* BinaryExpression */:
+                    case 269 /* ExportAssignment */:
+                    case 219 /* BinaryExpression */:
                         var node_2 = d;
                         var expression = ts.isExportAssignment(node_2) ? node_2.expression : node_2.right;
                         // Export assigned entity name expressions act as aliases and should fall through, otherwise they export values
@@ -75860,18 +77281,18 @@
                         d = expression;
                     // The below options all declare an Alias, which is allowed to merge with other values within the importing module.
                     // falls through
-                    case 261 /* ImportEqualsDeclaration */:
-                    case 264 /* NamespaceImport */:
-                    case 263 /* ImportClause */:
-                        var result_13 = 0 /* None */;
+                    case 263 /* ImportEqualsDeclaration */:
+                    case 266 /* NamespaceImport */:
+                    case 265 /* ImportClause */:
+                        var result_12 = 0 /* None */;
                         var target = resolveAlias(getSymbolOfNode(d));
-                        ts.forEach(target.declarations, function (d) { result_13 |= getDeclarationSpaces(d); });
-                        return result_13;
-                    case 250 /* VariableDeclaration */:
-                    case 199 /* BindingElement */:
-                    case 252 /* FunctionDeclaration */:
-                    case 266 /* ImportSpecifier */: // https://github.com/Microsoft/TypeScript/pull/7591
-                    case 78 /* Identifier */: // https://github.com/microsoft/TypeScript/issues/36098
+                        ts.forEach(target.declarations, function (d) { result_12 |= getDeclarationSpaces(d); });
+                        return result_12;
+                    case 252 /* VariableDeclaration */:
+                    case 201 /* BindingElement */:
+                    case 254 /* FunctionDeclaration */:
+                    case 268 /* ImportSpecifier */: // https://github.com/Microsoft/TypeScript/pull/7591
+                    case 79 /* Identifier */: // https://github.com/microsoft/TypeScript/issues/36098
                         // Identifiers are used as declarations of assignment declarations whose parents may be
                         // SyntaxKind.CallExpression - `Object.defineProperty(thing, "aField", {value: 42});`
                         // SyntaxKind.ElementAccessExpression - `thing["aField"] = 42;` or `thing["aField"];` (with a doc comment on it)
@@ -76123,7 +77544,7 @@
                 var promiseConstructorSymbol = resolveEntityName(promiseConstructorName, 111551 /* Value */, /*ignoreErrors*/ true);
                 var promiseConstructorType = promiseConstructorSymbol ? getTypeOfSymbol(promiseConstructorSymbol) : errorType;
                 if (promiseConstructorType === errorType) {
-                    if (promiseConstructorName.kind === 78 /* Identifier */ && promiseConstructorName.escapedText === "Promise" && getTargetType(returnType) === getGlobalPromiseType(/*reportErrors*/ false)) {
+                    if (promiseConstructorName.kind === 79 /* Identifier */ && promiseConstructorName.escapedText === "Promise" && getTargetType(returnType) === getGlobalPromiseType(/*reportErrors*/ false)) {
                         error(returnTypeNode, ts.Diagnostics.An_async_function_or_method_in_ES5_SlashES3_requires_the_Promise_constructor_Make_sure_you_have_a_declaration_for_the_Promise_constructor_or_include_ES2015_in_your_lib_option);
                     }
                     else {
@@ -76163,24 +77584,24 @@
             var headMessage = getDiagnosticHeadMessageForDecoratorResolution(node);
             var errorInfo;
             switch (node.parent.kind) {
-                case 253 /* ClassDeclaration */:
+                case 255 /* ClassDeclaration */:
                     var classSymbol = getSymbolOfNode(node.parent);
                     var classConstructorType = getTypeOfSymbol(classSymbol);
                     expectedReturnType = getUnionType([classConstructorType, voidType]);
                     break;
-                case 161 /* Parameter */:
+                case 162 /* Parameter */:
                     expectedReturnType = voidType;
                     errorInfo = ts.chainDiagnosticMessages(
                     /*details*/ undefined, ts.Diagnostics.The_return_type_of_a_parameter_decorator_function_must_be_either_void_or_any);
                     break;
-                case 164 /* PropertyDeclaration */:
+                case 165 /* PropertyDeclaration */:
                     expectedReturnType = voidType;
                     errorInfo = ts.chainDiagnosticMessages(
                     /*details*/ undefined, ts.Diagnostics.The_return_type_of_a_property_decorator_function_must_be_either_void_or_any);
                     break;
-                case 166 /* MethodDeclaration */:
-                case 168 /* GetAccessor */:
-                case 169 /* SetAccessor */:
+                case 167 /* MethodDeclaration */:
+                case 170 /* GetAccessor */:
+                case 171 /* SetAccessor */:
                     var methodType = getTypeOfNode(node.parent);
                     var descriptorType = createTypedPropertyDescriptorType(methodType);
                     expectedReturnType = getUnionType([descriptorType, voidType]);
@@ -76201,8 +77622,8 @@
             if (!typeName)
                 return;
             var rootName = ts.getFirstIdentifier(typeName);
-            var meaning = (typeName.kind === 78 /* Identifier */ ? 788968 /* Type */ : 1920 /* Namespace */) | 2097152 /* Alias */;
-            var rootSymbol = resolveName(rootName, rootName.escapedText, meaning, /*nameNotFoundMessage*/ undefined, /*nameArg*/ undefined, /*isRefernce*/ true);
+            var meaning = (typeName.kind === 79 /* Identifier */ ? 788968 /* Type */ : 1920 /* Namespace */) | 2097152 /* Alias */;
+            var rootSymbol = resolveName(rootName, rootName.escapedText, meaning, /*nameNotFoundMessage*/ undefined, /*nameArg*/ undefined, /*isReference*/ true);
             if (rootSymbol
                 && rootSymbol.flags & 2097152 /* Alias */
                 && symbolIsValue(rootSymbol)
@@ -76227,30 +77648,30 @@
         function getEntityNameForDecoratorMetadata(node) {
             if (node) {
                 switch (node.kind) {
-                    case 184 /* IntersectionType */:
-                    case 183 /* UnionType */:
+                    case 186 /* IntersectionType */:
+                    case 185 /* UnionType */:
                         return getEntityNameForDecoratorMetadataFromTypeList(node.types);
-                    case 185 /* ConditionalType */:
+                    case 187 /* ConditionalType */:
                         return getEntityNameForDecoratorMetadataFromTypeList([node.trueType, node.falseType]);
-                    case 187 /* ParenthesizedType */:
-                    case 193 /* NamedTupleMember */:
+                    case 189 /* ParenthesizedType */:
+                    case 195 /* NamedTupleMember */:
                         return getEntityNameForDecoratorMetadata(node.type);
-                    case 174 /* TypeReference */:
+                    case 176 /* TypeReference */:
                         return node.typeName;
                 }
             }
         }
         function getEntityNameForDecoratorMetadataFromTypeList(types) {
             var commonEntityName;
-            for (var _i = 0, types_23 = types; _i < types_23.length; _i++) {
-                var typeNode = types_23[_i];
-                while (typeNode.kind === 187 /* ParenthesizedType */ || typeNode.kind === 193 /* NamedTupleMember */) {
+            for (var _i = 0, types_22 = types; _i < types_22.length; _i++) {
+                var typeNode = types_22[_i];
+                while (typeNode.kind === 189 /* ParenthesizedType */ || typeNode.kind === 195 /* NamedTupleMember */) {
                     typeNode = typeNode.type; // Skip parens if need be
                 }
-                if (typeNode.kind === 141 /* NeverKeyword */) {
+                if (typeNode.kind === 142 /* NeverKeyword */) {
                     continue; // Always elide `never` from the union/intersection if possible
                 }
-                if (!strictNullChecks && (typeNode.kind === 192 /* LiteralType */ && typeNode.literal.kind === 103 /* NullKeyword */ || typeNode.kind === 150 /* UndefinedKeyword */)) {
+                if (!strictNullChecks && (typeNode.kind === 194 /* LiteralType */ && typeNode.literal.kind === 104 /* NullKeyword */ || typeNode.kind === 151 /* UndefinedKeyword */)) {
                     continue; // Elide null and undefined from unions for metadata, just like what we did prior to the implementation of strict null checks
                 }
                 var individualEntityName = getEntityNameForDecoratorMetadata(typeNode);
@@ -76296,14 +77717,14 @@
             }
             var firstDecorator = node.decorators[0];
             checkExternalEmitHelpers(firstDecorator, 8 /* Decorate */);
-            if (node.kind === 161 /* Parameter */) {
+            if (node.kind === 162 /* Parameter */) {
                 checkExternalEmitHelpers(firstDecorator, 32 /* Param */);
             }
             if (compilerOptions.emitDecoratorMetadata) {
                 checkExternalEmitHelpers(firstDecorator, 16 /* Metadata */);
                 // we only need to perform these checks if we are emitting serialized type metadata for the target of a decorator.
                 switch (node.kind) {
-                    case 253 /* ClassDeclaration */:
+                    case 255 /* ClassDeclaration */:
                         var constructor = ts.getFirstConstructorWithBody(node);
                         if (constructor) {
                             for (var _i = 0, _a = constructor.parameters; _i < _a.length; _i++) {
@@ -76312,23 +77733,23 @@
                             }
                         }
                         break;
-                    case 168 /* GetAccessor */:
-                    case 169 /* SetAccessor */:
-                        var otherKind = node.kind === 168 /* GetAccessor */ ? 169 /* SetAccessor */ : 168 /* GetAccessor */;
+                    case 170 /* GetAccessor */:
+                    case 171 /* SetAccessor */:
+                        var otherKind = node.kind === 170 /* GetAccessor */ ? 171 /* SetAccessor */ : 170 /* GetAccessor */;
                         var otherAccessor = ts.getDeclarationOfKind(getSymbolOfNode(node), otherKind);
                         markDecoratorMedataDataTypeNodeAsReferenced(getAnnotatedAccessorTypeNode(node) || otherAccessor && getAnnotatedAccessorTypeNode(otherAccessor));
                         break;
-                    case 166 /* MethodDeclaration */:
+                    case 167 /* MethodDeclaration */:
                         for (var _b = 0, _c = node.parameters; _b < _c.length; _b++) {
                             var parameter = _c[_b];
                             markDecoratorMedataDataTypeNodeAsReferenced(getParameterTypeNodeForDecoratorCheck(parameter));
                         }
                         markDecoratorMedataDataTypeNodeAsReferenced(ts.getEffectiveReturnTypeNode(node));
                         break;
-                    case 164 /* PropertyDeclaration */:
+                    case 165 /* PropertyDeclaration */:
                         markDecoratorMedataDataTypeNodeAsReferenced(ts.getEffectiveTypeAnnotationNode(node));
                         break;
-                    case 161 /* Parameter */:
+                    case 162 /* Parameter */:
                         markDecoratorMedataDataTypeNodeAsReferenced(getParameterTypeNodeForDecoratorCheck(node));
                         var containingSignature = node.parent;
                         for (var _d = 0, _e = containingSignature.parameters; _d < _e.length; _d++) {
@@ -76344,8 +77765,7 @@
             if (produceDiagnostics) {
                 checkFunctionOrMethodDeclaration(node);
                 checkGrammarForGenerator(node);
-                checkCollisionWithRequireExportsInGeneratedCode(node, node.name);
-                checkCollisionWithGlobalPromiseInGeneratedCode(node, node.name);
+                checkCollisionsForDeclarationName(node, node.name);
             }
         }
         function checkJSDocTypeAliasTag(node) {
@@ -76391,7 +77811,7 @@
                     else if (ts.findLast(ts.getJSDocTags(decl), ts.isJSDocParameterTag) === node &&
                         node.typeExpression && node.typeExpression.type &&
                         !isArrayType(getTypeFromTypeNode(node.typeExpression.type))) {
-                        error(node.name, ts.Diagnostics.JSDoc_param_tag_has_name_0_but_there_is_no_parameter_with_that_name_It_would_match_arguments_if_it_had_an_array_type, ts.idText(node.name.kind === 158 /* QualifiedName */ ? node.name.right : node.name));
+                        error(node.name, ts.Diagnostics.JSDoc_param_tag_has_name_0_but_there_is_no_parameter_with_that_name_It_would_match_arguments_if_it_had_an_array_type, ts.idText(node.name.kind === 159 /* QualifiedName */ ? node.name.right : node.name));
                     }
                 }
             }
@@ -76433,9 +77853,9 @@
         }
         function getIdentifierFromEntityNameExpression(node) {
             switch (node.kind) {
-                case 78 /* Identifier */:
+                case 79 /* Identifier */:
                     return node;
-                case 202 /* PropertyAccessExpression */:
+                case 204 /* PropertyAccessExpression */:
                     return node.name;
                 default:
                     return undefined;
@@ -76449,7 +77869,7 @@
             // Do not use hasDynamicName here, because that returns false for well known symbols.
             // We want to perform checkComputedPropertyName for all computed properties, including
             // well known symbols.
-            if (node.name && node.name.kind === 159 /* ComputedPropertyName */) {
+            if (node.name && node.name.kind === 160 /* ComputedPropertyName */) {
                 // This check will account for methods in class/interface declarations,
                 // as well as accessors in classes/object literals
                 checkComputedPropertyName(node.name);
@@ -76475,7 +77895,7 @@
                     checkFunctionOrConstructorSymbol(symbol);
                 }
             }
-            var body = node.kind === 165 /* MethodSignature */ ? undefined : node.body;
+            var body = node.kind === 166 /* MethodSignature */ ? undefined : node.body;
             checkSourceElement(body);
             checkAllCodePathsInNonVoidFunctionReturnOrThrow(node, getReturnTypeFromAnnotation(node));
             if (produceDiagnostics && !ts.getEffectiveReturnTypeNode(node)) {
@@ -76517,42 +77937,42 @@
             for (var _i = 0, potentiallyUnusedIdentifiers_1 = potentiallyUnusedIdentifiers; _i < potentiallyUnusedIdentifiers_1.length; _i++) {
                 var node = potentiallyUnusedIdentifiers_1[_i];
                 switch (node.kind) {
-                    case 253 /* ClassDeclaration */:
-                    case 222 /* ClassExpression */:
+                    case 255 /* ClassDeclaration */:
+                    case 224 /* ClassExpression */:
                         checkUnusedClassMembers(node, addDiagnostic);
                         checkUnusedTypeParameters(node, addDiagnostic);
                         break;
-                    case 298 /* SourceFile */:
-                    case 257 /* ModuleDeclaration */:
-                    case 231 /* Block */:
-                    case 259 /* CaseBlock */:
-                    case 238 /* ForStatement */:
-                    case 239 /* ForInStatement */:
-                    case 240 /* ForOfStatement */:
+                    case 300 /* SourceFile */:
+                    case 259 /* ModuleDeclaration */:
+                    case 233 /* Block */:
+                    case 261 /* CaseBlock */:
+                    case 240 /* ForStatement */:
+                    case 241 /* ForInStatement */:
+                    case 242 /* ForOfStatement */:
                         checkUnusedLocalsAndParameters(node, addDiagnostic);
                         break;
-                    case 167 /* Constructor */:
-                    case 209 /* FunctionExpression */:
-                    case 252 /* FunctionDeclaration */:
-                    case 210 /* ArrowFunction */:
-                    case 166 /* MethodDeclaration */:
-                    case 168 /* GetAccessor */:
-                    case 169 /* SetAccessor */:
+                    case 169 /* Constructor */:
+                    case 211 /* FunctionExpression */:
+                    case 254 /* FunctionDeclaration */:
+                    case 212 /* ArrowFunction */:
+                    case 167 /* MethodDeclaration */:
+                    case 170 /* GetAccessor */:
+                    case 171 /* SetAccessor */:
                         if (node.body) { // Don't report unused parameters in overloads
                             checkUnusedLocalsAndParameters(node, addDiagnostic);
                         }
                         checkUnusedTypeParameters(node, addDiagnostic);
                         break;
-                    case 165 /* MethodSignature */:
-                    case 170 /* CallSignature */:
-                    case 171 /* ConstructSignature */:
-                    case 175 /* FunctionType */:
-                    case 176 /* ConstructorType */:
-                    case 255 /* TypeAliasDeclaration */:
-                    case 254 /* InterfaceDeclaration */:
+                    case 166 /* MethodSignature */:
+                    case 172 /* CallSignature */:
+                    case 173 /* ConstructSignature */:
+                    case 177 /* FunctionType */:
+                    case 178 /* ConstructorType */:
+                    case 257 /* TypeAliasDeclaration */:
+                    case 256 /* InterfaceDeclaration */:
                         checkUnusedTypeParameters(node, addDiagnostic);
                         break;
-                    case 186 /* InferType */:
+                    case 188 /* InferType */:
                         checkUnusedInferTypeParameter(node, addDiagnostic);
                         break;
                     default:
@@ -76572,11 +77992,11 @@
             for (var _i = 0, _a = node.members; _i < _a.length; _i++) {
                 var member = _a[_i];
                 switch (member.kind) {
-                    case 166 /* MethodDeclaration */:
-                    case 164 /* PropertyDeclaration */:
-                    case 168 /* GetAccessor */:
-                    case 169 /* SetAccessor */:
-                        if (member.kind === 169 /* SetAccessor */ && member.symbol.flags & 32768 /* GetAccessor */) {
+                    case 167 /* MethodDeclaration */:
+                    case 165 /* PropertyDeclaration */:
+                    case 170 /* GetAccessor */:
+                    case 171 /* SetAccessor */:
+                        if (member.kind === 171 /* SetAccessor */ && member.symbol.flags & 32768 /* GetAccessor */) {
                             // Already would have reported an error on the getter.
                             break;
                         }
@@ -76587,7 +78007,7 @@
                             addDiagnostic(member, 0 /* Local */, ts.createDiagnosticForNode(member.name, ts.Diagnostics._0_is_declared_but_its_value_is_never_read, symbolToString(symbol)));
                         }
                         break;
-                    case 167 /* Constructor */:
+                    case 169 /* Constructor */:
                         for (var _b = 0, _c = member.parameters; _b < _c.length; _b++) {
                             var parameter = _c[_b];
                             if (!parameter.symbol.isReferenced && ts.hasSyntacticModifier(parameter, 8 /* Private */)) {
@@ -76595,12 +78015,13 @@
                             }
                         }
                         break;
-                    case 172 /* IndexSignature */:
-                    case 230 /* SemicolonClassElement */:
+                    case 174 /* IndexSignature */:
+                    case 232 /* SemicolonClassElement */:
+                    case 168 /* ClassStaticBlockDeclaration */:
                         // Can't be private
                         break;
                     default:
-                        ts.Debug.fail();
+                        ts.Debug.fail("Unexpected class member");
                 }
             }
         }
@@ -76624,7 +78045,7 @@
                     continue;
                 var name = ts.idText(typeParameter.name);
                 var parent = typeParameter.parent;
-                if (parent.kind !== 186 /* InferType */ && parent.typeParameters.every(isTypeParameterUnused)) {
+                if (parent.kind !== 188 /* InferType */ && parent.typeParameters.every(isTypeParameterUnused)) {
                     if (ts.tryAddToSet(seenParentsWithEveryUnused, parent)) {
                         var sourceFile = ts.getSourceFileOfNode(parent);
                         var range = ts.isJSDocTemplateTag(parent)
@@ -76633,12 +78054,14 @@
                             // Include the `<>` in the error message
                             : ts.rangeOfTypeParameters(sourceFile, parent.typeParameters);
                         var only = parent.typeParameters.length === 1;
+                        //TODO: following line is possible reason for bug #41974, unusedTypeParameters_TemplateTag
                         var message = only ? ts.Diagnostics._0_is_declared_but_its_value_is_never_read : ts.Diagnostics.All_type_parameters_are_unused;
                         var arg0 = only ? name : undefined;
                         addDiagnostic(typeParameter, 1 /* Parameter */, ts.createFileDiagnostic(sourceFile, range.pos, range.end - range.pos, message, arg0));
                     }
                 }
                 else {
+                    //TODO: following line is possible reason for bug #41974, unusedTypeParameters_TemplateTag
                     addDiagnostic(typeParameter, 1 /* Parameter */, ts.createDiagnosticForNode(typeParameter, ts.Diagnostics._0_is_declared_but_its_value_is_never_read, name));
                 }
             }
@@ -76728,7 +78151,7 @@
                 var importDecl = importClause.parent;
                 var nDeclarations = (importClause.name ? 1 : 0) +
                     (importClause.namedBindings ?
-                        (importClause.namedBindings.kind === 264 /* NamespaceImport */ ? 1 : importClause.namedBindings.elements.length)
+                        (importClause.namedBindings.kind === 266 /* NamespaceImport */ ? 1 : importClause.namedBindings.elements.length)
                         : 0);
                 if (nDeclarations === unuseds.length) {
                     addDiagnostic(importDecl, 0 /* Local */, unuseds.length === 1
@@ -76746,7 +78169,7 @@
                 var bindingPattern = _a[0], bindingElements = _a[1];
                 var kind = tryGetRootParameterDeclaration(bindingPattern.parent) ? 1 /* Parameter */ : 0 /* Local */;
                 if (bindingPattern.elements.length === bindingElements.length) {
-                    if (bindingElements.length === 1 && bindingPattern.parent.kind === 250 /* VariableDeclaration */ && bindingPattern.parent.parent.kind === 251 /* VariableDeclarationList */) {
+                    if (bindingElements.length === 1 && bindingPattern.parent.kind === 252 /* VariableDeclaration */ && bindingPattern.parent.parent.kind === 253 /* VariableDeclarationList */) {
                         addToGroup(unusedVariables, bindingPattern.parent.parent, bindingPattern.parent, getNodeId);
                     }
                     else {
@@ -76767,7 +78190,7 @@
                 if (declarationList.declarations.length === declarations.length) {
                     addDiagnostic(declarationList, 0 /* Local */, declarations.length === 1
                         ? ts.createDiagnosticForNode(ts.first(declarations).name, ts.Diagnostics._0_is_declared_but_its_value_is_never_read, bindingNameText(ts.first(declarations).name))
-                        : ts.createDiagnosticForNode(declarationList.parent.kind === 233 /* VariableStatement */ ? declarationList.parent : declarationList, ts.Diagnostics.All_variables_are_unused));
+                        : ts.createDiagnosticForNode(declarationList.parent.kind === 235 /* VariableStatement */ ? declarationList.parent : declarationList, ts.Diagnostics.All_variables_are_unused));
                 }
                 else {
                     for (var _i = 0, declarations_5 = declarations; _i < declarations_5.length; _i++) {
@@ -76779,24 +78202,24 @@
         }
         function bindingNameText(name) {
             switch (name.kind) {
-                case 78 /* Identifier */:
+                case 79 /* Identifier */:
                     return ts.idText(name);
-                case 198 /* ArrayBindingPattern */:
-                case 197 /* ObjectBindingPattern */:
+                case 200 /* ArrayBindingPattern */:
+                case 199 /* ObjectBindingPattern */:
                     return bindingNameText(ts.cast(ts.first(name.elements), ts.isBindingElement).name);
                 default:
                     return ts.Debug.assertNever(name);
             }
         }
         function isImportedDeclaration(node) {
-            return node.kind === 263 /* ImportClause */ || node.kind === 266 /* ImportSpecifier */ || node.kind === 264 /* NamespaceImport */;
+            return node.kind === 265 /* ImportClause */ || node.kind === 268 /* ImportSpecifier */ || node.kind === 266 /* NamespaceImport */;
         }
         function importClauseFromImported(decl) {
-            return decl.kind === 263 /* ImportClause */ ? decl : decl.kind === 264 /* NamespaceImport */ ? decl.parent : decl.parent.parent;
+            return decl.kind === 265 /* ImportClause */ ? decl : decl.kind === 266 /* NamespaceImport */ ? decl.parent : decl.parent.parent;
         }
         function checkBlock(node) {
             // Grammar checking for SyntaxKind.Block
-            if (node.kind === 231 /* Block */) {
+            if (node.kind === 233 /* Block */) {
                 checkGrammarStatementInAmbientContext(node);
             }
             if (ts.isFunctionOrModuleBlock(node)) {
@@ -76822,25 +78245,37 @@
                 }
             });
         }
+        /**
+         * Checks whether an {@link Identifier}, in the context of another {@link Node}, would collide with a runtime value
+         * of {@link name} in an outer scope. This is used to check for collisions for downlevel transformations that
+         * require names like `Object`, `Promise`, `Reflect`, `require`, `exports`, etc.
+         */
         function needCollisionCheckForIdentifier(node, identifier, name) {
-            if (!(identifier && identifier.escapedText === name)) {
+            if ((identifier === null || identifier === void 0 ? void 0 : identifier.escapedText) !== name) {
                 return false;
             }
-            if (node.kind === 164 /* PropertyDeclaration */ ||
-                node.kind === 163 /* PropertySignature */ ||
-                node.kind === 166 /* MethodDeclaration */ ||
-                node.kind === 165 /* MethodSignature */ ||
-                node.kind === 168 /* GetAccessor */ ||
-                node.kind === 169 /* SetAccessor */) {
-                // it is ok to have member named '_super' or '_this' - member access is always qualified
+            if (node.kind === 165 /* PropertyDeclaration */ ||
+                node.kind === 164 /* PropertySignature */ ||
+                node.kind === 167 /* MethodDeclaration */ ||
+                node.kind === 166 /* MethodSignature */ ||
+                node.kind === 170 /* GetAccessor */ ||
+                node.kind === 171 /* SetAccessor */ ||
+                node.kind === 291 /* PropertyAssignment */) {
+                // it is ok to have member named '_super', '_this', `Promise`, etc. - member access is always qualified
                 return false;
             }
             if (node.flags & 8388608 /* Ambient */) {
                 // ambient context - no codegen impact
                 return false;
             }
+            if (ts.isImportClause(node) || ts.isImportEqualsDeclaration(node) || ts.isImportSpecifier(node)) {
+                // type-only imports do not require collision checks against runtime values.
+                if (ts.isTypeOnlyImportOrExportDeclaration(node)) {
+                    return false;
+                }
+            }
             var root = ts.getRootDeclaration(node);
-            if (root.kind === 161 /* Parameter */ && ts.nodeIsMissing(root.parent.body)) {
+            if (ts.isParameter(root) && ts.nodeIsMissing(root.parent.body)) {
                 // just an overload - no codegen impact
                 return false;
             }
@@ -76850,7 +78285,7 @@
         function checkIfThisIsCapturedInEnclosingScope(node) {
             ts.findAncestor(node, function (current) {
                 if (getNodeCheckFlags(current) & 4 /* CaptureThis */) {
-                    var isDeclaration_1 = node.kind !== 78 /* Identifier */;
+                    var isDeclaration_1 = node.kind !== 79 /* Identifier */;
                     if (isDeclaration_1) {
                         error(ts.getNameOfDeclaration(node), ts.Diagnostics.Duplicate_identifier_this_Compiler_uses_variable_declaration_this_to_capture_this_reference);
                     }
@@ -76865,7 +78300,7 @@
         function checkIfNewTargetIsCapturedInEnclosingScope(node) {
             ts.findAncestor(node, function (current) {
                 if (getNodeCheckFlags(current) & 8 /* CaptureNewTarget */) {
-                    var isDeclaration_2 = node.kind !== 78 /* Identifier */;
+                    var isDeclaration_2 = node.kind !== 79 /* Identifier */;
                     if (isDeclaration_2) {
                         error(ts.getNameOfDeclaration(node), ts.Diagnostics.Duplicate_identifier_newTarget_Compiler_uses_variable_declaration_newTarget_to_capture_new_target_meta_property_reference);
                     }
@@ -76877,6 +78312,46 @@
                 return false;
             });
         }
+        function checkCollisionWithRequireExportsInGeneratedCode(node, name) {
+            // No need to check for require or exports for ES6 modules and later
+            if (moduleKind >= ts.ModuleKind.ES2015) {
+                return;
+            }
+            if (!name || !needCollisionCheckForIdentifier(node, name, "require") && !needCollisionCheckForIdentifier(node, name, "exports")) {
+                return;
+            }
+            // Uninstantiated modules shouldnt do this check
+            if (ts.isModuleDeclaration(node) && ts.getModuleInstanceState(node) !== 1 /* Instantiated */) {
+                return;
+            }
+            // In case of variable declaration, node.parent is variable statement so look at the variable statement's parent
+            var parent = getDeclarationContainer(node);
+            if (parent.kind === 300 /* SourceFile */ && ts.isExternalOrCommonJsModule(parent)) {
+                // If the declaration happens to be in external module, report error that require and exports are reserved keywords
+                errorSkippedOn("noEmit", name, ts.Diagnostics.Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module, ts.declarationNameToString(name), ts.declarationNameToString(name));
+            }
+        }
+        function checkCollisionWithGlobalPromiseInGeneratedCode(node, name) {
+            if (!name || languageVersion >= 4 /* ES2017 */ || !needCollisionCheckForIdentifier(node, name, "Promise")) {
+                return;
+            }
+            // Uninstantiated modules shouldnt do this check
+            if (ts.isModuleDeclaration(node) && ts.getModuleInstanceState(node) !== 1 /* Instantiated */) {
+                return;
+            }
+            // In case of variable declaration, node.parent is variable statement so look at the variable statement's parent
+            var parent = getDeclarationContainer(node);
+            if (parent.kind === 300 /* SourceFile */ && ts.isExternalOrCommonJsModule(parent) && parent.flags & 2048 /* HasAsyncFunctions */) {
+                // If the declaration happens to be in external module, report error that Promise is a reserved identifier.
+                errorSkippedOn("noEmit", name, ts.Diagnostics.Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module_containing_async_functions, ts.declarationNameToString(name), ts.declarationNameToString(name));
+            }
+        }
+        function recordPotentialCollisionWithWeakMapSetInGeneratedCode(node, name) {
+            if (languageVersion <= 8 /* ES2021 */
+                && (needCollisionCheckForIdentifier(node, name, "WeakMap") || needCollisionCheckForIdentifier(node, name, "WeakSet"))) {
+                potentialWeakMapSetCollisions.push(node);
+            }
+        }
         function checkWeakMapSetCollision(node) {
             var enclosingBlockScope = ts.getEnclosingBlockScopeContainer(node);
             if (getNodeCheckFlags(enclosingBlockScope) & 67108864 /* ContainsClassWithPrivateIdentifiers */) {
@@ -76884,38 +78359,56 @@
                 errorSkippedOn("noEmit", node, ts.Diagnostics.Compiler_reserves_name_0_when_emitting_private_identifier_downlevel, node.name.escapedText);
             }
         }
-        function checkCollisionWithRequireExportsInGeneratedCode(node, name) {
-            // No need to check for require or exports for ES6 modules and later
-            if (moduleKind >= ts.ModuleKind.ES2015) {
-                return;
-            }
-            if (!needCollisionCheckForIdentifier(node, name, "require") && !needCollisionCheckForIdentifier(node, name, "exports")) {
-                return;
-            }
-            // Uninstantiated modules shouldnt do this check
-            if (ts.isModuleDeclaration(node) && ts.getModuleInstanceState(node) !== 1 /* Instantiated */) {
-                return;
-            }
-            // In case of variable declaration, node.parent is variable statement so look at the variable statement's parent
-            var parent = getDeclarationContainer(node);
-            if (parent.kind === 298 /* SourceFile */ && ts.isExternalOrCommonJsModule(parent)) {
-                // If the declaration happens to be in external module, report error that require and exports are reserved keywords
-                errorSkippedOn("noEmit", name, ts.Diagnostics.Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module, ts.declarationNameToString(name), ts.declarationNameToString(name));
+        function recordPotentialCollisionWithReflectInGeneratedCode(node, name) {
+            if (name && languageVersion >= 2 /* ES2015 */ && languageVersion <= 8 /* ES2021 */
+                && needCollisionCheckForIdentifier(node, name, "Reflect")) {
+                potentialReflectCollisions.push(node);
             }
         }
-        function checkCollisionWithGlobalPromiseInGeneratedCode(node, name) {
-            if (languageVersion >= 4 /* ES2017 */ || !needCollisionCheckForIdentifier(node, name, "Promise")) {
-                return;
+        function checkReflectCollision(node) {
+            var hasCollision = false;
+            if (ts.isClassExpression(node)) {
+                // ClassExpression names don't contribute to their containers, but do matter for any of their block-scoped members.
+                for (var _i = 0, _a = node.members; _i < _a.length; _i++) {
+                    var member = _a[_i];
+                    if (getNodeCheckFlags(member) & 134217728 /* ContainsSuperPropertyInStaticInitializer */) {
+                        hasCollision = true;
+                        break;
+                    }
+                }
             }
-            // Uninstantiated modules shouldnt do this check
-            if (ts.isModuleDeclaration(node) && ts.getModuleInstanceState(node) !== 1 /* Instantiated */) {
-                return;
+            else if (ts.isFunctionExpression(node)) {
+                // FunctionExpression names don't contribute to their containers, but do matter for their contents
+                if (getNodeCheckFlags(node) & 134217728 /* ContainsSuperPropertyInStaticInitializer */) {
+                    hasCollision = true;
+                }
             }
-            // In case of variable declaration, node.parent is variable statement so look at the variable statement's parent
-            var parent = getDeclarationContainer(node);
-            if (parent.kind === 298 /* SourceFile */ && ts.isExternalOrCommonJsModule(parent) && parent.flags & 2048 /* HasAsyncFunctions */) {
-                // If the declaration happens to be in external module, report error that Promise is a reserved identifier.
-                errorSkippedOn("noEmit", name, ts.Diagnostics.Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module_containing_async_functions, ts.declarationNameToString(name), ts.declarationNameToString(name));
+            else {
+                var container = ts.getEnclosingBlockScopeContainer(node);
+                if (container && getNodeCheckFlags(container) & 134217728 /* ContainsSuperPropertyInStaticInitializer */) {
+                    hasCollision = true;
+                }
+            }
+            if (hasCollision) {
+                ts.Debug.assert(ts.isNamedDeclaration(node) && ts.isIdentifier(node.name), "The target of a Reflect collision check should be an identifier");
+                errorSkippedOn("noEmit", node, ts.Diagnostics.Duplicate_identifier_0_Compiler_reserves_name_1_when_emitting_super_references_in_static_initializers, ts.declarationNameToString(node.name), "Reflect");
+            }
+        }
+        function checkCollisionsForDeclarationName(node, name) {
+            if (!name)
+                return;
+            checkCollisionWithRequireExportsInGeneratedCode(node, name);
+            checkCollisionWithGlobalPromiseInGeneratedCode(node, name);
+            recordPotentialCollisionWithWeakMapSetInGeneratedCode(node, name);
+            recordPotentialCollisionWithReflectInGeneratedCode(node, name);
+            if (ts.isClassLike(node)) {
+                checkTypeNameIsReserved(name, ts.Diagnostics.Class_name_cannot_be_0);
+                if (!(node.flags & 8388608 /* Ambient */)) {
+                    checkClassNameCollisionWithObject(name);
+                }
+            }
+            else if (ts.isEnumDeclaration(node)) {
+                checkTypeNameIsReserved(name, ts.Diagnostics.Enum_name_cannot_be_0);
             }
         }
         function checkVarDeclaredNamesNotShadowed(node) {
@@ -76948,7 +78441,7 @@
             // skip variable declarations that don't have initializers
             // NOTE: in ES6 spec initializer is required in variable declarations where name is binding pattern
             // so we'll always treat binding elements as initialized
-            if (node.kind === 250 /* VariableDeclaration */ && !node.initializer) {
+            if (node.kind === 252 /* VariableDeclaration */ && !node.initializer) {
                 return;
             }
             var symbol = getSymbolOfNode(node);
@@ -76960,17 +78453,17 @@
                     localDeclarationSymbol !== symbol &&
                     localDeclarationSymbol.flags & 2 /* BlockScopedVariable */) {
                     if (getDeclarationNodeFlagsFromSymbol(localDeclarationSymbol) & 3 /* BlockScoped */) {
-                        var varDeclList = ts.getAncestor(localDeclarationSymbol.valueDeclaration, 251 /* VariableDeclarationList */);
-                        var container = varDeclList.parent.kind === 233 /* VariableStatement */ && varDeclList.parent.parent
+                        var varDeclList = ts.getAncestor(localDeclarationSymbol.valueDeclaration, 253 /* VariableDeclarationList */);
+                        var container = varDeclList.parent.kind === 235 /* VariableStatement */ && varDeclList.parent.parent
                             ? varDeclList.parent.parent
                             : undefined;
                         // names of block-scoped and function scoped variables can collide only
                         // if block scoped variable is defined in the function\module\source file scope (because of variable hoisting)
                         var namesShareScope = container &&
-                            (container.kind === 231 /* Block */ && ts.isFunctionLike(container.parent) ||
-                                container.kind === 258 /* ModuleBlock */ ||
-                                container.kind === 257 /* ModuleDeclaration */ ||
-                                container.kind === 298 /* SourceFile */);
+                            (container.kind === 233 /* Block */ && ts.isFunctionLike(container.parent) ||
+                                container.kind === 260 /* ModuleBlock */ ||
+                                container.kind === 259 /* ModuleDeclaration */ ||
+                                container.kind === 300 /* SourceFile */);
                         // here we know that function scoped variable is shadowed by block scoped one
                         // if they are defined in the same scope - binder has already reported redeclaration error
                         // otherwise if variable has an initializer - show error that initialization will fail
@@ -77001,7 +78494,7 @@
             // Do not use hasDynamicName here, because that returns false for well known symbols.
             // We want to perform checkComputedPropertyName for all computed properties, including
             // well known symbols.
-            if (node.name.kind === 159 /* ComputedPropertyName */) {
+            if (node.name.kind === 160 /* ComputedPropertyName */) {
                 checkComputedPropertyName(node.name);
                 if (node.initializer) {
                     checkExpressionCached(node.initializer);
@@ -77012,7 +78505,7 @@
                     checkExternalEmitHelpers(node, 4 /* Rest */);
                 }
                 // check computed properties inside property names of binding elements
-                if (node.propertyName && node.propertyName.kind === 159 /* ComputedPropertyName */) {
+                if (node.propertyName && node.propertyName.kind === 160 /* ComputedPropertyName */) {
                     checkComputedPropertyName(node.propertyName);
                 }
                 // check private/protected variable access
@@ -77026,14 +78519,14 @@
                         var property = getPropertyOfType(parentType, nameText);
                         if (property) {
                             markPropertyAsReferenced(property, /*nodeForCheckWriteOnly*/ undefined, /*isSelfTypeAccess*/ false); // A destructuring is never a write-only reference.
-                            checkPropertyAccessibility(node, !!parent.initializer && parent.initializer.kind === 105 /* SuperKeyword */, /*writing*/ false, parentType, property);
+                            checkPropertyAccessibility(node, !!parent.initializer && parent.initializer.kind === 106 /* SuperKeyword */, /*writing*/ false, parentType, property);
                         }
                     }
                 }
             }
             // For a binding pattern, check contained binding elements
             if (ts.isBindingPattern(node.name)) {
-                if (node.name.kind === 198 /* ArrayBindingPattern */ && languageVersion < 2 /* ES2015 */ && compilerOptions.downlevelIteration) {
+                if (node.name.kind === 200 /* ArrayBindingPattern */ && languageVersion < 2 /* ES2015 */ && compilerOptions.downlevelIteration) {
                     checkExternalEmitHelpers(node, 512 /* Read */);
                 }
                 ts.forEach(node.name.elements, checkSourceElement);
@@ -77045,7 +78538,7 @@
             }
             // For a binding pattern, validate the initializer and exit
             if (ts.isBindingPattern(node.name)) {
-                var needCheckInitializer = node.initializer && node.parent.parent.kind !== 239 /* ForInStatement */;
+                var needCheckInitializer = node.initializer && node.parent.parent.kind !== 241 /* ForInStatement */;
                 var needCheckWidenedType = node.name.elements.length === 0;
                 if (needCheckInitializer || needCheckWidenedType) {
                     // Don't validate for-in initializer as it is already an error
@@ -77087,7 +78580,7 @@
                         ts.isObjectLiteralExpression(initializer) &&
                         (initializer.properties.length === 0 || ts.isPrototypeAccess(node.name)) &&
                         !!((_a = symbol.exports) === null || _a === void 0 ? void 0 : _a.size);
-                    if (!isJSObjectLiteralInitializer && node.parent.parent.kind !== 239 /* ForInStatement */) {
+                    if (!isJSObjectLiteralInitializer && node.parent.parent.kind !== 241 /* ForInStatement */) {
                         checkTypeAssignableToAndOptionallyElaborate(checkExpressionCached(initializer), type, node, initializer, /*headMessage*/ undefined);
                     }
                 }
@@ -77113,23 +78606,18 @@
                     error(node.name, ts.Diagnostics.All_declarations_of_0_must_have_identical_modifiers, ts.declarationNameToString(node.name));
                 }
             }
-            if (node.kind !== 164 /* PropertyDeclaration */ && node.kind !== 163 /* PropertySignature */) {
+            if (node.kind !== 165 /* PropertyDeclaration */ && node.kind !== 164 /* PropertySignature */) {
                 // We know we don't have a binding pattern or computed name here
                 checkExportsOnMergedDeclarations(node);
-                if (node.kind === 250 /* VariableDeclaration */ || node.kind === 199 /* BindingElement */) {
+                if (node.kind === 252 /* VariableDeclaration */ || node.kind === 201 /* BindingElement */) {
                     checkVarDeclaredNamesNotShadowed(node);
                 }
-                checkCollisionWithRequireExportsInGeneratedCode(node, node.name);
-                checkCollisionWithGlobalPromiseInGeneratedCode(node, node.name);
-                if (languageVersion < 99 /* ESNext */
-                    && (needCollisionCheckForIdentifier(node, node.name, "WeakMap") || needCollisionCheckForIdentifier(node, node.name, "WeakSet"))) {
-                    potentialWeakMapSetCollisions.push(node);
-                }
+                checkCollisionsForDeclarationName(node, node.name);
             }
         }
         function errorNextVariableOrPropertyDeclarationMustHaveSameType(firstDeclaration, firstType, nextDeclaration, nextType) {
             var nextDeclarationName = ts.getNameOfDeclaration(nextDeclaration);
-            var message = nextDeclaration.kind === 164 /* PropertyDeclaration */ || nextDeclaration.kind === 163 /* PropertySignature */
+            var message = nextDeclaration.kind === 165 /* PropertyDeclaration */ || nextDeclaration.kind === 164 /* PropertySignature */
                 ? ts.Diagnostics.Subsequent_property_declarations_must_have_the_same_type_Property_0_must_be_of_type_1_but_here_has_type_2
                 : ts.Diagnostics.Subsequent_variable_declarations_must_have_the_same_type_Variable_0_must_be_of_type_1_but_here_has_type_2;
             var declName = ts.declarationNameToString(nextDeclarationName);
@@ -77139,8 +78627,8 @@
             }
         }
         function areDeclarationFlagsIdentical(left, right) {
-            if ((left.kind === 161 /* Parameter */ && right.kind === 250 /* VariableDeclaration */) ||
-                (left.kind === 250 /* VariableDeclaration */ && right.kind === 161 /* Parameter */)) {
+            if ((left.kind === 162 /* Parameter */ && right.kind === 252 /* VariableDeclaration */) ||
+                (left.kind === 252 /* VariableDeclaration */ && right.kind === 162 /* Parameter */)) {
                 // Differences in optionality between parameters and variables are allowed.
                 return true;
             }
@@ -77182,7 +78670,7 @@
             var type = checkTruthinessExpression(node.expression);
             checkTestingKnownTruthyCallableOrAwaitableType(node.expression, type, node.thenStatement);
             checkSourceElement(node.thenStatement);
-            if (node.thenStatement.kind === 232 /* EmptyStatement */) {
+            if (node.thenStatement.kind === 234 /* EmptyStatement */) {
                 error(node.thenStatement, ts.Diagnostics.The_body_of_an_if_statement_cannot_be_the_empty_statement);
             }
             checkSourceElement(node.elseStatement);
@@ -77193,15 +78681,13 @@
             if (getFalsyFlags(type))
                 return;
             var location = ts.isBinaryExpression(condExpr) ? condExpr.right : condExpr;
+            if (ts.isPropertyAccessExpression(location) && ts.isAssertionExpression(ts.skipParentheses(location.expression))) {
+                return;
+            }
             var testedNode = ts.isIdentifier(location) ? location
                 : ts.isPropertyAccessExpression(location) ? location.name
                     : ts.isBinaryExpression(location) && ts.isIdentifier(location.right) ? location.right
                         : undefined;
-            var isPropertyExpressionCast = ts.isPropertyAccessExpression(location)
-                && ts.isAssertionExpression(ts.skipParentheses(location.expression));
-            if (!testedNode || isPropertyExpressionCast) {
-                return;
-            }
             // While it technically should be invalid for any known-truthy value
             // to be tested, we de-scope to functions and Promises unreferenced in
             // the block as a heuristic to identify the most common bugs. There
@@ -77212,12 +78698,12 @@
             if (callSignatures.length === 0 && !isPromise) {
                 return;
             }
-            var testedSymbol = getSymbolAtLocation(testedNode);
-            if (!testedSymbol) {
+            var testedSymbol = testedNode && getSymbolAtLocation(testedNode);
+            if (!testedSymbol && !isPromise) {
                 return;
             }
-            var isUsed = ts.isBinaryExpression(condExpr.parent) && isSymbolUsedInBinaryExpressionChain(condExpr.parent, testedSymbol)
-                || body && isSymbolUsedInConditionBody(condExpr, body, testedNode, testedSymbol);
+            var isUsed = testedSymbol && ts.isBinaryExpression(condExpr.parent) && isSymbolUsedInBinaryExpressionChain(condExpr.parent, testedSymbol)
+                || testedSymbol && body && isSymbolUsedInConditionBody(condExpr, body, testedNode, testedSymbol);
             if (!isUsed) {
                 if (isPromise) {
                     errorAndMaybeSuggestAwait(location, 
@@ -77242,7 +78728,7 @@
                         var childExpression = childNode.parent;
                         while (testedExpression && childExpression) {
                             if (ts.isIdentifier(testedExpression) && ts.isIdentifier(childExpression) ||
-                                testedExpression.kind === 107 /* ThisKeyword */ && childExpression.kind === 107 /* ThisKeyword */) {
+                                testedExpression.kind === 108 /* ThisKeyword */ && childExpression.kind === 108 /* ThisKeyword */) {
                                 return getSymbolAtLocation(testedExpression) === getSymbolAtLocation(childExpression);
                             }
                             else if (ts.isPropertyAccessExpression(testedExpression) && ts.isPropertyAccessExpression(childExpression)) {
@@ -77307,12 +78793,12 @@
         function checkForStatement(node) {
             // Grammar checking
             if (!checkGrammarStatementInAmbientContext(node)) {
-                if (node.initializer && node.initializer.kind === 251 /* VariableDeclarationList */) {
+                if (node.initializer && node.initializer.kind === 253 /* VariableDeclarationList */) {
                     checkGrammarVariableDeclarationList(node.initializer);
                 }
             }
             if (node.initializer) {
-                if (node.initializer.kind === 251 /* VariableDeclarationList */) {
+                if (node.initializer.kind === 253 /* VariableDeclarationList */) {
                     ts.forEach(node.initializer.declarations, checkVariableDeclaration);
                 }
                 else {
@@ -77330,11 +78816,17 @@
         }
         function checkForOfStatement(node) {
             checkGrammarForInOrForOfStatement(node);
+            var container = ts.getContainingFunctionOrClassStaticBlock(node);
             if (node.awaitModifier) {
-                var functionFlags = ts.getFunctionFlags(ts.getContainingFunction(node));
-                if ((functionFlags & (4 /* Invalid */ | 2 /* Async */)) === 2 /* Async */ && languageVersion < 99 /* ESNext */) {
-                    // for..await..of in an async function or async generator function prior to ESNext requires the __asyncValues helper
-                    checkExternalEmitHelpers(node, 16384 /* ForAwaitOfIncludes */);
+                if (container && ts.isClassStaticBlockDeclaration(container)) {
+                    grammarErrorOnNode(node.awaitModifier, ts.Diagnostics.For_await_loops_cannot_be_used_inside_a_class_static_block);
+                }
+                else {
+                    var functionFlags = ts.getFunctionFlags(container);
+                    if ((functionFlags & (4 /* Invalid */ | 2 /* Async */)) === 2 /* Async */ && languageVersion < 99 /* ESNext */) {
+                        // for..await..of in an async function or async generator function prior to ESNext requires the __asyncValues helper
+                        checkExternalEmitHelpers(node, 16384 /* ForAwaitOfIncludes */);
+                    }
                 }
             }
             else if (compilerOptions.downlevelIteration && languageVersion < 2 /* ES2015 */) {
@@ -77346,14 +78838,14 @@
             // via checkRightHandSideOfForOf.
             // If the LHS is an expression, check the LHS, as a destructuring assignment or as a reference.
             // Then check that the RHS is assignable to it.
-            if (node.initializer.kind === 251 /* VariableDeclarationList */) {
+            if (node.initializer.kind === 253 /* VariableDeclarationList */) {
                 checkForInOrForOfVariableDeclaration(node);
             }
             else {
                 var varExpr = node.initializer;
                 var iteratedType = checkRightHandSideOfForOf(node);
                 // There may be a destructuring assignment on the left side
-                if (varExpr.kind === 200 /* ArrayLiteralExpression */ || varExpr.kind === 201 /* ObjectLiteralExpression */) {
+                if (varExpr.kind === 202 /* ArrayLiteralExpression */ || varExpr.kind === 203 /* ObjectLiteralExpression */) {
                     // iteratedType may be undefined. In this case, we still want to check the structure of
                     // varExpr, in particular making sure it's a valid LeftHandSideExpression. But we'd like
                     // to short circuit the type relation checking as much as possible, so we pass the unknownType.
@@ -77385,7 +78877,7 @@
             // for (let VarDecl in Expr) Statement
             //   VarDecl must be a variable declaration without a type annotation that declares a variable of type Any,
             //   and Expr must be an expression of type Any, an object type, or a type parameter type.
-            if (node.initializer.kind === 251 /* VariableDeclarationList */) {
+            if (node.initializer.kind === 253 /* VariableDeclarationList */) {
                 var variable = node.initializer.declarations[0];
                 if (variable && ts.isBindingPattern(variable.name)) {
                     error(variable.name, ts.Diagnostics.The_left_hand_side_of_a_for_in_statement_cannot_be_a_destructuring_pattern);
@@ -77399,7 +78891,7 @@
                 //   and Expr must be an expression of type Any, an object type, or a type parameter type.
                 var varExpr = node.initializer;
                 var leftType = checkExpression(varExpr);
-                if (varExpr.kind === 200 /* ArrayLiteralExpression */ || varExpr.kind === 201 /* ObjectLiteralExpression */) {
+                if (varExpr.kind === 202 /* ArrayLiteralExpression */ || varExpr.kind === 203 /* ObjectLiteralExpression */) {
                     error(varExpr, ts.Diagnostics.The_left_hand_side_of_a_for_in_statement_cannot_be_a_destructuring_pattern);
                 }
                 else if (!isTypeAssignableTo(getIndexTypeOrString(rightType), leftType)) {
@@ -77521,7 +79013,7 @@
                 }
                 return hasStringConstituent ? possibleOutOfBounds ? includeUndefinedInIndexSignature(stringType) : stringType : undefined;
             }
-            var arrayElementType = getIndexTypeOfType(arrayType, 1 /* Number */);
+            var arrayElementType = getIndexTypeOfType(arrayType, numberType);
             if (hasStringConstituent && arrayElementType) {
                 // This is just an optimization for the case where arrayOrStringType is string | string[]
                 if (arrayElementType.flags & 402653316 /* StringLike */ && !compilerOptions.noUncheckedIndexedAccess) {
@@ -77610,8 +79102,8 @@
             var yieldTypes;
             var returnTypes;
             var nextTypes;
-            for (var _i = 0, array_10 = array; _i < array_10.length; _i++) {
-                var iterationTypes = array_10[_i];
+            for (var _i = 0, array_11 = array; _i < array_11.length; _i++) {
+                var iterationTypes = array_11[_i];
                 if (iterationTypes === undefined || iterationTypes === noIterationTypes) {
                     continue;
                 }
@@ -78113,27 +79605,31 @@
             if (checkGrammarStatementInAmbientContext(node)) {
                 return;
             }
-            var func = ts.getContainingFunction(node);
-            if (!func) {
+            var container = ts.getContainingFunctionOrClassStaticBlock(node);
+            if (container && ts.isClassStaticBlockDeclaration(container)) {
+                grammarErrorOnFirstToken(node, ts.Diagnostics.A_return_statement_cannot_be_used_inside_a_class_static_block);
+                return;
+            }
+            if (!container) {
                 grammarErrorOnFirstToken(node, ts.Diagnostics.A_return_statement_can_only_be_used_within_a_function_body);
                 return;
             }
-            var signature = getSignatureFromDeclaration(func);
+            var signature = getSignatureFromDeclaration(container);
             var returnType = getReturnTypeOfSignature(signature);
-            var functionFlags = ts.getFunctionFlags(func);
+            var functionFlags = ts.getFunctionFlags(container);
             if (strictNullChecks || node.expression || returnType.flags & 131072 /* Never */) {
                 var exprType = node.expression ? checkExpressionCached(node.expression) : undefinedType;
-                if (func.kind === 169 /* SetAccessor */) {
+                if (container.kind === 171 /* SetAccessor */) {
                     if (node.expression) {
                         error(node, ts.Diagnostics.Setters_cannot_return_a_value);
                     }
                 }
-                else if (func.kind === 167 /* Constructor */) {
+                else if (container.kind === 169 /* Constructor */) {
                     if (node.expression && !checkTypeAssignableToAndOptionallyElaborate(exprType, returnType, node, node.expression)) {
                         error(node, ts.Diagnostics.Return_type_of_constructor_signature_must_be_assignable_to_the_instance_type_of_the_class);
                     }
                 }
-                else if (getReturnTypeFromAnnotation(func)) {
+                else if (getReturnTypeFromAnnotation(container)) {
                     var unwrappedReturnType = (_a = unwrapReturnType(returnType, functionFlags)) !== null && _a !== void 0 ? _a : returnType;
                     var unwrappedExprType = functionFlags & 2 /* Async */
                         ? checkAwaitedType(exprType, node, ts.Diagnostics.The_return_type_of_an_async_function_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member)
@@ -78146,7 +79642,7 @@
                     }
                 }
             }
-            else if (func.kind !== 167 /* Constructor */ && compilerOptions.noImplicitReturns && !isUnwrappedReturnTypeVoidOrAny(func, returnType)) {
+            else if (container.kind !== 169 /* Constructor */ && compilerOptions.noImplicitReturns && !isUnwrappedReturnTypeVoidOrAny(container, returnType)) {
                 // The function has a return type, but the return statement doesn't have an expression.
                 error(node, ts.Diagnostics.Not_all_code_paths_return_a_value);
             }
@@ -78175,7 +79671,7 @@
             var expressionIsLiteral = isLiteralType(expressionType);
             ts.forEach(node.caseBlock.clauses, function (clause) {
                 // Grammar check for duplicate default clauses, skip if we already report duplicate default clause
-                if (clause.kind === 286 /* DefaultClause */ && !hasDuplicateDefaultClause) {
+                if (clause.kind === 288 /* DefaultClause */ && !hasDuplicateDefaultClause) {
                     if (firstDefaultClause === undefined) {
                         firstDefaultClause = clause;
                     }
@@ -78184,7 +79680,7 @@
                         hasDuplicateDefaultClause = true;
                     }
                 }
-                if (produceDiagnostics && clause.kind === 285 /* CaseClause */) {
+                if (produceDiagnostics && clause.kind === 287 /* CaseClause */) {
                     // TypeScript 1.0 spec (April 2014): 5.9
                     // In a 'switch' statement, each 'case' expression must be of a type that is comparable
                     // to or from the type of the 'switch' expression.
@@ -78216,7 +79712,7 @@
                     if (ts.isFunctionLike(current)) {
                         return "quit";
                     }
-                    if (current.kind === 246 /* LabeledStatement */ && current.label.escapedText === node.label.escapedText) {
+                    if (current.kind === 248 /* LabeledStatement */ && current.label.escapedText === node.label.escapedText) {
                         grammarErrorOnNode(node.label, ts.Diagnostics.Duplicate_label_0, ts.getTextOfNode(node.label));
                         return true;
                     }
@@ -78274,87 +79770,83 @@
                 checkBlock(node.finallyBlock);
             }
         }
-        function checkIndexConstraints(type, isStatic) {
-            var _a, _b, _c, _d;
-            var declaredNumberIndexer = getIndexDeclarationOfSymbolTable(isStatic ? (_a = type.symbol) === null || _a === void 0 ? void 0 : _a.exports : (_b = type.symbol) === null || _b === void 0 ? void 0 : _b.members, 1 /* Number */);
-            var declaredStringIndexer = getIndexDeclarationOfSymbolTable(isStatic ? (_c = type.symbol) === null || _c === void 0 ? void 0 : _c.exports : (_d = type.symbol) === null || _d === void 0 ? void 0 : _d.members, 0 /* String */);
-            var stringIndexType = getIndexTypeOfType(type, 0 /* String */);
-            var numberIndexType = getIndexTypeOfType(type, 1 /* Number */);
-            if (stringIndexType || numberIndexType) {
-                ts.forEach(getPropertiesOfObjectType(type), function (prop) {
-                    if (isStatic && prop.flags & 4194304 /* Prototype */)
-                        return;
-                    var propType = getTypeOfSymbol(prop);
-                    checkIndexConstraintForProperty(prop, propType, type, declaredStringIndexer, stringIndexType, 0 /* String */);
-                    checkIndexConstraintForProperty(prop, propType, type, declaredNumberIndexer, numberIndexType, 1 /* Number */);
-                });
-                var classDeclaration = type.symbol.valueDeclaration;
-                if (ts.getObjectFlags(type) & 1 /* Class */ && classDeclaration && ts.isClassLike(classDeclaration)) {
-                    for (var _i = 0, _e = classDeclaration.members; _i < _e.length; _i++) {
-                        var member = _e[_i];
-                        // Only process instance properties with computed names here.
-                        // Static properties cannot be in conflict with indexers,
-                        // and properties with literal names were already checked.
-                        if (!ts.hasSyntacticModifier(member, 32 /* Static */) && !hasBindableName(member)) {
-                            var symbol = getSymbolOfNode(member);
-                            var propType = getTypeOfSymbol(symbol);
-                            checkIndexConstraintForProperty(symbol, propType, type, declaredStringIndexer, stringIndexType, 0 /* String */);
-                            checkIndexConstraintForProperty(symbol, propType, type, declaredNumberIndexer, numberIndexType, 1 /* Number */);
-                        }
+        function checkIndexConstraints(type, isStaticIndex) {
+            var indexInfos = getIndexInfosOfType(type);
+            if (indexInfos.length === 0) {
+                return;
+            }
+            for (var _i = 0, _a = getPropertiesOfObjectType(type); _i < _a.length; _i++) {
+                var prop = _a[_i];
+                if (!(isStaticIndex && prop.flags & 4194304 /* Prototype */)) {
+                    checkIndexConstraintForProperty(type, prop, getLiteralTypeFromProperty(prop, 8576 /* StringOrNumberLiteralOrUnique */, /*includeNonPublic*/ true), getNonMissingTypeOfSymbol(prop));
+                }
+            }
+            var typeDeclaration = type.symbol.valueDeclaration;
+            if (typeDeclaration && ts.isClassLike(typeDeclaration)) {
+                for (var _b = 0, _c = typeDeclaration.members; _b < _c.length; _b++) {
+                    var member = _c[_b];
+                    // Only process instance properties with computed names here. Static properties cannot be in conflict with indexers,
+                    // and properties with literal names were already checked.
+                    if (!ts.isStatic(member) && !hasBindableName(member)) {
+                        var symbol = getSymbolOfNode(member);
+                        checkIndexConstraintForProperty(type, symbol, getTypeOfExpression(member.name.expression), getNonMissingTypeOfSymbol(symbol));
                     }
                 }
             }
-            var errorNode;
-            if (stringIndexType && numberIndexType) {
-                errorNode = declaredNumberIndexer || declaredStringIndexer;
-                // condition 'errorNode === undefined' may appear if types does not declare nor string neither number indexer
-                if (!errorNode && (ts.getObjectFlags(type) & 2 /* Interface */)) {
-                    var someBaseTypeHasBothIndexers = ts.forEach(getBaseTypes(type), function (base) { return getIndexTypeOfType(base, 0 /* String */) && getIndexTypeOfType(base, 1 /* Number */); });
-                    errorNode = someBaseTypeHasBothIndexers || !type.symbol.declarations ? undefined : type.symbol.declarations[0];
+            if (indexInfos.length > 1) {
+                for (var _d = 0, indexInfos_6 = indexInfos; _d < indexInfos_6.length; _d++) {
+                    var info = indexInfos_6[_d];
+                    checkIndexConstraintForIndexSignature(type, info);
                 }
             }
-            if (errorNode && !isTypeAssignableTo(numberIndexType, stringIndexType)) { // TODO: GH#18217
-                error(errorNode, ts.Diagnostics.Numeric_index_type_0_is_not_assignable_to_string_index_type_1, typeToString(numberIndexType), typeToString(stringIndexType));
+        }
+        function checkIndexConstraintForProperty(type, prop, propNameType, propType) {
+            var declaration = prop.valueDeclaration;
+            var name = ts.getNameOfDeclaration(declaration);
+            if (name && ts.isPrivateIdentifier(name)) {
+                return;
             }
-            function checkIndexConstraintForProperty(prop, propertyType, containingType, indexDeclaration, indexType, indexKind) {
-                // ESSymbol properties apply to neither string nor numeric indexers.
-                if (!indexType || ts.isKnownSymbol(prop)) {
-                    return;
+            var indexInfos = getApplicableIndexInfos(type, propNameType);
+            var interfaceDeclaration = ts.getObjectFlags(type) & 2 /* Interface */ ? ts.getDeclarationOfKind(type.symbol, 256 /* InterfaceDeclaration */) : undefined;
+            var localPropDeclaration = declaration && declaration.kind === 219 /* BinaryExpression */ ||
+                name && name.kind === 160 /* ComputedPropertyName */ || getParentOfSymbol(prop) === type.symbol ? declaration : undefined;
+            var _loop_27 = function (info) {
+                var localIndexDeclaration = info.declaration && getParentOfSymbol(getSymbolOfNode(info.declaration)) === type.symbol ? info.declaration : undefined;
+                // We check only when (a) the property is declared in the containing type, or (b) the applicable index signature is declared
+                // in the containing type, or (c) the containing type is an interface and no base interface contains both the property and
+                // the index signature (i.e. property and index signature are declared in separate inherited interfaces).
+                var errorNode = localPropDeclaration || localIndexDeclaration ||
+                    (interfaceDeclaration && !ts.some(getBaseTypes(type), function (base) { return !!getPropertyOfObjectType(base, prop.escapedName) && !!getIndexTypeOfType(base, info.keyType); }) ? interfaceDeclaration : undefined);
+                if (errorNode && !isTypeAssignableTo(propType, info.type)) {
+                    error(errorNode, ts.Diagnostics.Property_0_of_type_1_is_not_assignable_to_2_index_type_3, symbolToString(prop), typeToString(propType), typeToString(info.keyType), typeToString(info.type));
                 }
-                var propDeclaration = prop.valueDeclaration;
-                var name = propDeclaration && ts.getNameOfDeclaration(propDeclaration);
-                if (name && ts.isPrivateIdentifier(name)) {
-                    return;
+            };
+            for (var _i = 0, indexInfos_7 = indexInfos; _i < indexInfos_7.length; _i++) {
+                var info = indexInfos_7[_i];
+                _loop_27(info);
+            }
+        }
+        function checkIndexConstraintForIndexSignature(type, checkInfo) {
+            var declaration = checkInfo.declaration;
+            var indexInfos = getApplicableIndexInfos(type, checkInfo.keyType);
+            var interfaceDeclaration = ts.getObjectFlags(type) & 2 /* Interface */ ? ts.getDeclarationOfKind(type.symbol, 256 /* InterfaceDeclaration */) : undefined;
+            var localCheckDeclaration = declaration && getParentOfSymbol(getSymbolOfNode(declaration)) === type.symbol ? declaration : undefined;
+            var _loop_28 = function (info) {
+                if (info === checkInfo)
+                    return "continue";
+                var localIndexDeclaration = info.declaration && getParentOfSymbol(getSymbolOfNode(info.declaration)) === type.symbol ? info.declaration : undefined;
+                // We check only when (a) the check index signature is declared in the containing type, or (b) the applicable index
+                // signature is declared in the containing type, or (c) the containing type is an interface and no base interface contains
+                // both index signatures (i.e. the index signatures are declared in separate inherited interfaces).
+                var errorNode = localCheckDeclaration || localIndexDeclaration ||
+                    (interfaceDeclaration && !ts.some(getBaseTypes(type), function (base) { return !!getIndexInfoOfType(base, checkInfo.keyType) && !!getIndexTypeOfType(base, info.keyType); }) ? interfaceDeclaration : undefined);
+                if (errorNode && !isTypeAssignableTo(checkInfo.type, info.type)) {
+                    error(errorNode, ts.Diagnostics._0_index_type_1_is_not_assignable_to_2_index_type_3, typeToString(checkInfo.keyType), typeToString(checkInfo.type), typeToString(info.keyType), typeToString(info.type));
                 }
-                // index is numeric and property name is not valid numeric literal
-                if (indexKind === 1 /* Number */ && !(name ? isNumericName(name) : isNumericLiteralName(prop.escapedName))) {
-                    return;
-                }
-                // perform property check if property or indexer is declared in 'type'
-                // this allows us to rule out cases when both property and indexer are inherited from the base class
-                var errorNode;
-                if (propDeclaration && name &&
-                    (propDeclaration.kind === 217 /* BinaryExpression */ ||
-                        name.kind === 159 /* ComputedPropertyName */ ||
-                        prop.parent === containingType.symbol)) {
-                    errorNode = propDeclaration;
-                }
-                else if (indexDeclaration) {
-                    errorNode = indexDeclaration;
-                }
-                else if (ts.getObjectFlags(containingType) & 2 /* Interface */) {
-                    // for interfaces property and indexer might be inherited from different bases
-                    // check if any base class already has both property and indexer.
-                    // check should be performed only if 'type' is the first type that brings property\indexer together
-                    var someBaseClassHasBothPropertyAndIndexer = ts.forEach(getBaseTypes(containingType), function (base) { return getPropertyOfObjectType(base, prop.escapedName) && getIndexTypeOfType(base, indexKind); });
-                    errorNode = someBaseClassHasBothPropertyAndIndexer || !containingType.symbol.declarations ? undefined : containingType.symbol.declarations[0];
-                }
-                if (errorNode && !isTypeAssignableTo(propertyType, indexType)) {
-                    var errorMessage = indexKind === 0 /* String */
-                        ? ts.Diagnostics.Property_0_of_type_1_is_not_assignable_to_string_index_type_2
-                        : ts.Diagnostics.Property_0_of_type_1_is_not_assignable_to_numeric_index_type_2;
-                    error(errorNode, errorMessage, symbolToString(prop), typeToString(propertyType), typeToString(indexType));
-                }
+            };
+            for (var _i = 0, indexInfos_8 = indexInfos; _i < indexInfos_8.length; _i++) {
+                var info = indexInfos_8[_i];
+                _loop_28(info);
             }
         }
         function checkTypeNameIsReserved(name, message) {
@@ -78413,7 +79905,7 @@
         function checkTypeParametersNotReferenced(root, typeParameters, index) {
             visit(root);
             function visit(node) {
-                if (node.kind === 174 /* TypeReference */) {
+                if (node.kind === 176 /* TypeReference */) {
                     var type = getTypeFromTypeReference(node);
                     if (type.flags & 262144 /* TypeParameter */) {
                         for (var i = index; i < typeParameters.length; i++) {
@@ -78512,14 +80004,7 @@
         function checkClassLikeDeclaration(node) {
             checkGrammarClassLikeDeclaration(node);
             checkDecorators(node);
-            if (node.name) {
-                checkTypeNameIsReserved(node.name, ts.Diagnostics.Class_name_cannot_be_0);
-                checkCollisionWithRequireExportsInGeneratedCode(node, node.name);
-                checkCollisionWithGlobalPromiseInGeneratedCode(node, node.name);
-                if (!(node.flags & 8388608 /* Ambient */)) {
-                    checkClassNameCollisionWithObject(node.name);
-                }
-            }
+            checkCollisionsForDeclarationName(node, node.name);
             checkTypeParameters(ts.getEffectiveTypeParameterDeclarations(node));
             checkExportsOnMergedDeclarations(node);
             var symbol = getSymbolOfNode(node);
@@ -78621,7 +80106,7 @@
             }
             if (produceDiagnostics) {
                 checkIndexConstraints(type);
-                checkIndexConstraints(staticType, /*isStatic*/ true);
+                checkIndexConstraints(staticType, /*isStaticIndex*/ true);
                 checkTypeForDuplicateIndexSignatures(node);
                 checkPropertyInitialization(node);
             }
@@ -78632,7 +80117,7 @@
             var baseTypes = baseTypeNode && getBaseTypes(type);
             var baseWithThis = (baseTypes === null || baseTypes === void 0 ? void 0 : baseTypes.length) ? getTypeWithThisArgument(ts.first(baseTypes), type.thisType) : undefined;
             var baseStaticType = getBaseConstructorTypeOfClass(type);
-            var _loop_24 = function (member) {
+            var _loop_29 = function (member) {
                 if (ts.hasAmbientModifier(member)) {
                     return "continue";
                 }
@@ -78647,11 +80132,11 @@
             };
             for (var _i = 0, _a = node.members; _i < _a.length; _i++) {
                 var member = _a[_i];
-                _loop_24(member);
+                _loop_29(member);
             }
             function checkClassMember(member, memberIsParameterProperty) {
                 var hasOverride = ts.hasOverrideModifier(member);
-                var hasStatic = ts.hasStaticModifier(member);
+                var hasStatic = ts.isStatic(member);
                 if (baseWithThis && (hasOverride || compilerOptions.noImplicitOverride)) {
                     var declaredProp = member.name && getSymbolAtLocation(member.name) || getSymbolAtLocation(member);
                     if (!declaredProp) {
@@ -78663,10 +80148,13 @@
                     var baseProp = getPropertyOfType(baseType, declaredProp.escapedName);
                     var baseClassName = typeToString(baseWithThis);
                     if (prop && !baseProp && hasOverride) {
-                        error(member, ts.Diagnostics.This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0, baseClassName);
+                        var suggestion = getSuggestedSymbolForNonexistentClassMember(ts.symbolName(declaredProp), baseType);
+                        suggestion ?
+                            error(member, ts.Diagnostics.This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0_Did_you_mean_1, baseClassName, symbolToString(suggestion)) :
+                            error(member, ts.Diagnostics.This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0, baseClassName);
                     }
-                    else if (prop && (baseProp === null || baseProp === void 0 ? void 0 : baseProp.valueDeclaration) && compilerOptions.noImplicitOverride && !nodeInAmbientContext) {
-                        var baseHasAbstract = ts.hasAbstractModifier(baseProp.valueDeclaration);
+                    else if (prop && (baseProp === null || baseProp === void 0 ? void 0 : baseProp.declarations) && compilerOptions.noImplicitOverride && !nodeInAmbientContext) {
+                        var baseHasAbstract = ts.some(baseProp.declarations, function (d) { return ts.hasAbstractModifier(d); });
                         if (hasOverride) {
                             return;
                         }
@@ -78690,8 +80178,8 @@
         function issueMemberSpecificError(node, typeWithThis, baseWithThis, broadDiag) {
             // iterate over all implemented properties and issue errors on each one which isn't compatible, rather than the class as a whole, if possible
             var issuedMemberError = false;
-            var _loop_25 = function (member) {
-                if (ts.hasStaticModifier(member)) {
+            var _loop_30 = function (member) {
+                if (ts.isStatic(member)) {
                     return "continue";
                 }
                 var declaredProp = member.name && getSymbolAtLocation(member.name) || getSymbolAtLocation(member);
@@ -78709,7 +80197,7 @@
             };
             for (var _i = 0, _a = node.members; _i < _a.length; _i++) {
                 var member = _a[_i];
-                _loop_25(member);
+                _loop_30(member);
             }
             if (!issuedMemberError) {
                 // check again with diagnostics to generate a less-specific error
@@ -78735,7 +80223,7 @@
         }
         function getClassOrInterfaceDeclarationsOfSymbol(symbol) {
             return ts.filter(symbol.declarations, function (d) {
-                return d.kind === 253 /* ClassDeclaration */ || d.kind === 254 /* InterfaceDeclaration */;
+                return d.kind === 255 /* ClassDeclaration */ || d.kind === 256 /* InterfaceDeclaration */;
             });
         }
         function checkKindsOfPropertyMemberOverrides(type, baseType) {
@@ -78791,7 +80279,7 @@
                                 continue basePropertyCheck;
                             }
                         }
-                        if (derivedClassDecl.kind === 222 /* ClassExpression */) {
+                        if (derivedClassDecl.kind === 224 /* ClassExpression */) {
                             error(derivedClassDecl, ts.Diagnostics.Non_abstract_class_expression_does_not_implement_inherited_abstract_member_0_from_class_1, symbolToString(baseProperty), typeToString(baseType));
                         }
                         else {
@@ -78812,7 +80300,7 @@
                     if (basePropertyFlags && derivedPropertyFlags) {
                         // property/accessor is overridden with property/accessor
                         if (baseDeclarationFlags & 128 /* Abstract */ && !(base.valueDeclaration && ts.isPropertyDeclaration(base.valueDeclaration) && base.valueDeclaration.initializer)
-                            || base.valueDeclaration && base.valueDeclaration.parent.kind === 254 /* InterfaceDeclaration */
+                            || base.valueDeclaration && base.valueDeclaration.parent.kind === 256 /* InterfaceDeclaration */
                             || derived.valueDeclaration && ts.isBinaryExpression(derived.valueDeclaration)) {
                             // when the base property is abstract or from an interface, base/derived flags don't need to match
                             // same when the derived property is from an assignment
@@ -78827,7 +80315,7 @@
                             error(ts.getNameOfDeclaration(derived.valueDeclaration) || derived.valueDeclaration, errorMessage_1, symbolToString(base), typeToString(baseType), typeToString(type));
                         }
                         else if (useDefineForClassFields) {
-                            var uninitialized = (_a = derived.declarations) === null || _a === void 0 ? void 0 : _a.find(function (d) { return d.kind === 164 /* PropertyDeclaration */ && !d.initializer; });
+                            var uninitialized = (_a = derived.declarations) === null || _a === void 0 ? void 0 : _a.find(function (d) { return d.kind === 165 /* PropertyDeclaration */ && !d.initializer; });
                             if (uninitialized
                                 && !(derived.flags & 33554432 /* Transient */)
                                 && !(baseDeclarationFlags & 128 /* Abstract */)
@@ -78929,7 +80417,7 @@
                 if (ts.getEffectiveModifierFlags(member) & 2 /* Ambient */) {
                     continue;
                 }
-                if (isInstancePropertyWithoutInitializer(member)) {
+                if (!ts.isStatic(member) && isPropertyWithoutInitializer(member)) {
                     var propName = member.name;
                     if (ts.isIdentifier(propName) || ts.isPrivateIdentifier(propName)) {
                         var type = getTypeOfSymbol(getSymbolOfNode(member));
@@ -78942,12 +80430,29 @@
                 }
             }
         }
-        function isInstancePropertyWithoutInitializer(node) {
-            return node.kind === 164 /* PropertyDeclaration */ &&
-                !ts.hasSyntacticModifier(node, 32 /* Static */ | 128 /* Abstract */) &&
+        function isPropertyWithoutInitializer(node) {
+            return node.kind === 165 /* PropertyDeclaration */ &&
+                !ts.hasAbstractModifier(node) &&
                 !node.exclamationToken &&
                 !node.initializer;
         }
+        function isPropertyInitializedInStaticBlocks(propName, propType, staticBlocks, startPos, endPos) {
+            for (var _i = 0, staticBlocks_2 = staticBlocks; _i < staticBlocks_2.length; _i++) {
+                var staticBlock = staticBlocks_2[_i];
+                // static block must be within the provided range as they are evaluated in document order (unlike constructors)
+                if (staticBlock.pos >= startPos && staticBlock.pos <= endPos) {
+                    var reference = ts.factory.createPropertyAccessExpression(ts.factory.createThis(), propName);
+                    ts.setParent(reference.expression, reference);
+                    ts.setParent(reference, staticBlock);
+                    reference.flowNode = staticBlock.returnFlowNode;
+                    var flowType = getFlowTypeOfReference(reference, propType, getOptionalType(propType));
+                    if (!(getFalsyFlags(flowType) & 32768 /* Undefined */)) {
+                        return true;
+                    }
+                }
+            }
+            return false;
+        }
         function isPropertyInitializedInConstructor(propName, propType, constructor) {
             var reference = ts.factory.createPropertyAccessExpression(ts.factory.createThis(), propName);
             ts.setParent(reference.expression, reference);
@@ -78967,7 +80472,7 @@
                 var symbol = getSymbolOfNode(node);
                 checkTypeParameterListsIdentical(symbol);
                 // Only check this symbol once
-                var firstInterfaceDecl = ts.getDeclarationOfKind(symbol, 254 /* InterfaceDeclaration */);
+                var firstInterfaceDecl = ts.getDeclarationOfKind(symbol, 256 /* InterfaceDeclaration */);
                 if (node === firstInterfaceDecl) {
                     var type = getDeclaredTypeOfSymbol(symbol);
                     var typeWithThis = getTypeWithThisArgument(type);
@@ -79000,7 +80505,7 @@
             checkTypeNameIsReserved(node.name, ts.Diagnostics.Type_alias_name_cannot_be_0);
             checkExportsOnMergedDeclarations(node);
             checkTypeParameters(node.typeParameters);
-            if (node.type.kind === 136 /* IntrinsicKeyword */) {
+            if (node.type.kind === 137 /* IntrinsicKeyword */) {
                 if (!intrinsicTypeKinds.has(node.name.escapedText) || ts.length(node.typeParameters) !== 1) {
                     error(node.type, ts.Diagnostics.The_intrinsic_keyword_can_only_be_used_to_declare_compiler_provided_intrinsic_types);
                 }
@@ -79029,7 +80534,7 @@
             }
             else {
                 var text = ts.getTextOfPropertyName(member.name);
-                if (isNumericLiteralName(text) && !isInfinityOrNaNString(text)) {
+                if (isNumericLiteralName(text) && !ts.isInfinityOrNaNString(text)) {
                     error(member.name, ts.Diagnostics.An_enum_member_cannot_have_a_numeric_name);
                 }
             }
@@ -79086,7 +80591,7 @@
             return value;
             function evaluate(expr) {
                 switch (expr.kind) {
-                    case 215 /* PrefixUnaryExpression */:
+                    case 217 /* PrefixUnaryExpression */:
                         var value_2 = evaluate(expr.operand);
                         if (typeof value_2 === "number") {
                             switch (expr.operator) {
@@ -79096,7 +80601,7 @@
                             }
                         }
                         break;
-                    case 217 /* BinaryExpression */:
+                    case 219 /* BinaryExpression */:
                         var left = evaluate(expr.left);
                         var right = evaluate(expr.right);
                         if (typeof left === "number" && typeof right === "number") {
@@ -79125,22 +80630,22 @@
                     case 8 /* NumericLiteral */:
                         checkGrammarNumericLiteral(expr);
                         return +expr.text;
-                    case 208 /* ParenthesizedExpression */:
+                    case 210 /* ParenthesizedExpression */:
                         return evaluate(expr.expression);
-                    case 78 /* Identifier */:
+                    case 79 /* Identifier */:
                         var identifier = expr;
-                        if (isInfinityOrNaNString(identifier.escapedText)) {
+                        if (ts.isInfinityOrNaNString(identifier.escapedText)) {
                             return +(identifier.escapedText);
                         }
                         return ts.nodeIsMissing(expr) ? 0 : evaluateEnumMember(expr, getSymbolOfNode(member.parent), identifier.escapedText);
-                    case 203 /* ElementAccessExpression */:
-                    case 202 /* PropertyAccessExpression */:
+                    case 205 /* ElementAccessExpression */:
+                    case 204 /* PropertyAccessExpression */:
                         var ex = expr;
                         if (isConstantMemberAccess(ex)) {
                             var type = getTypeOfExpression(ex.expression);
                             if (type.symbol && type.symbol.flags & 384 /* Enum */) {
                                 var name = void 0;
-                                if (ex.kind === 202 /* PropertyAccessExpression */) {
+                                if (ex.kind === 204 /* PropertyAccessExpression */) {
                                     name = ex.name.escapedText;
                                 }
                                 else {
@@ -79172,9 +80677,9 @@
             }
         }
         function isConstantMemberAccess(node) {
-            return node.kind === 78 /* Identifier */ ||
-                node.kind === 202 /* PropertyAccessExpression */ && isConstantMemberAccess(node.expression) ||
-                node.kind === 203 /* ElementAccessExpression */ && isConstantMemberAccess(node.expression) &&
+            return node.kind === 79 /* Identifier */ ||
+                node.kind === 204 /* PropertyAccessExpression */ && isConstantMemberAccess(node.expression) ||
+                node.kind === 205 /* ElementAccessExpression */ && isConstantMemberAccess(node.expression) &&
                     ts.isStringLiteralLike(node.argumentExpression);
         }
         function checkEnumDeclaration(node) {
@@ -79183,9 +80688,7 @@
             }
             // Grammar checking
             checkGrammarDecoratorsAndModifiers(node);
-            checkTypeNameIsReserved(node.name, ts.Diagnostics.Enum_name_cannot_be_0);
-            checkCollisionWithRequireExportsInGeneratedCode(node, node.name);
-            checkCollisionWithGlobalPromiseInGeneratedCode(node, node.name);
+            checkCollisionsForDeclarationName(node, node.name);
             checkExportsOnMergedDeclarations(node);
             node.members.forEach(checkEnumMember);
             computeEnumMemberValues(node);
@@ -79210,7 +80713,7 @@
                 var seenEnumMissingInitialInitializer_1 = false;
                 ts.forEach(enumSymbol.declarations, function (declaration) {
                     // return true if we hit a violation of the rule, false otherwise
-                    if (declaration.kind !== 256 /* EnumDeclaration */) {
+                    if (declaration.kind !== 258 /* EnumDeclaration */) {
                         return false;
                     }
                     var enumDeclaration = declaration;
@@ -79239,8 +80742,8 @@
             if (declarations) {
                 for (var _i = 0, declarations_8 = declarations; _i < declarations_8.length; _i++) {
                     var declaration = declarations_8[_i];
-                    if ((declaration.kind === 253 /* ClassDeclaration */ ||
-                        (declaration.kind === 252 /* FunctionDeclaration */ && ts.nodeIsPresent(declaration.body))) &&
+                    if ((declaration.kind === 255 /* ClassDeclaration */ ||
+                        (declaration.kind === 254 /* FunctionDeclaration */ && ts.nodeIsPresent(declaration.body))) &&
                         !(declaration.flags & 8388608 /* Ambient */)) {
                         return declaration;
                     }
@@ -79283,8 +80786,7 @@
                     }
                 }
                 if (ts.isIdentifier(node.name)) {
-                    checkCollisionWithRequireExportsInGeneratedCode(node, node.name);
-                    checkCollisionWithGlobalPromiseInGeneratedCode(node, node.name);
+                    checkCollisionsForDeclarationName(node, node.name);
                 }
                 checkExportsOnMergedDeclarations(node);
                 var symbol = getSymbolOfNode(node);
@@ -79305,7 +80807,7 @@
                     }
                     // if the module merges with a class declaration in the same lexical scope,
                     // we need to track this to ensure the correct emit.
-                    var mergedClass = ts.getDeclarationOfKind(symbol, 253 /* ClassDeclaration */);
+                    var mergedClass = ts.getDeclarationOfKind(symbol, 255 /* ClassDeclaration */);
                     if (mergedClass &&
                         inSameLexicalScope(node, mergedClass)) {
                         getNodeLinks(node).flags |= 32768 /* LexicalModuleMergesWithClass */;
@@ -79356,23 +80858,23 @@
         function checkModuleAugmentationElement(node, isGlobalAugmentation) {
             var _a;
             switch (node.kind) {
-                case 233 /* VariableStatement */:
+                case 235 /* VariableStatement */:
                     // error each individual name in variable statement instead of marking the entire variable statement
                     for (var _i = 0, _b = node.declarationList.declarations; _i < _b.length; _i++) {
                         var decl = _b[_i];
                         checkModuleAugmentationElement(decl, isGlobalAugmentation);
                     }
                     break;
-                case 267 /* ExportAssignment */:
-                case 268 /* ExportDeclaration */:
+                case 269 /* ExportAssignment */:
+                case 270 /* ExportDeclaration */:
                     grammarErrorOnFirstToken(node, ts.Diagnostics.Exports_and_export_assignments_are_not_permitted_in_module_augmentations);
                     break;
-                case 261 /* ImportEqualsDeclaration */:
-                case 262 /* ImportDeclaration */:
+                case 263 /* ImportEqualsDeclaration */:
+                case 264 /* ImportDeclaration */:
                     grammarErrorOnFirstToken(node, ts.Diagnostics.Imports_are_not_permitted_in_module_augmentations_Consider_moving_them_to_the_enclosing_external_module);
                     break;
-                case 199 /* BindingElement */:
-                case 250 /* VariableDeclaration */:
+                case 201 /* BindingElement */:
+                case 252 /* VariableDeclaration */:
                     var name = node.name;
                     if (ts.isBindingPattern(name)) {
                         for (var _c = 0, _d = name.elements; _c < _d.length; _c++) {
@@ -79383,12 +80885,12 @@
                         break;
                     }
                 // falls through
-                case 253 /* ClassDeclaration */:
-                case 256 /* EnumDeclaration */:
-                case 252 /* FunctionDeclaration */:
-                case 254 /* InterfaceDeclaration */:
-                case 257 /* ModuleDeclaration */:
-                case 255 /* TypeAliasDeclaration */:
+                case 255 /* ClassDeclaration */:
+                case 258 /* EnumDeclaration */:
+                case 254 /* FunctionDeclaration */:
+                case 256 /* InterfaceDeclaration */:
+                case 259 /* ModuleDeclaration */:
+                case 257 /* TypeAliasDeclaration */:
                     if (isGlobalAugmentation) {
                         return;
                     }
@@ -79409,20 +80911,20 @@
         }
         function getFirstNonModuleExportsIdentifier(node) {
             switch (node.kind) {
-                case 78 /* Identifier */:
+                case 79 /* Identifier */:
                     return node;
-                case 158 /* QualifiedName */:
+                case 159 /* QualifiedName */:
                     do {
                         node = node.left;
-                    } while (node.kind !== 78 /* Identifier */);
+                    } while (node.kind !== 79 /* Identifier */);
                     return node;
-                case 202 /* PropertyAccessExpression */:
+                case 204 /* PropertyAccessExpression */:
                     do {
                         if (ts.isModuleExportsAccessExpression(node.expression) && !ts.isPrivateIdentifier(node.name)) {
                             return node.name;
                         }
                         node = node.expression;
-                    } while (node.kind !== 78 /* Identifier */);
+                    } while (node.kind !== 79 /* Identifier */);
                     return node;
             }
         }
@@ -79436,9 +80938,9 @@
                 error(moduleName, ts.Diagnostics.String_literal_expected);
                 return false;
             }
-            var inAmbientExternalModule = node.parent.kind === 258 /* ModuleBlock */ && ts.isAmbientModule(node.parent.parent);
-            if (node.parent.kind !== 298 /* SourceFile */ && !inAmbientExternalModule) {
-                error(moduleName, node.kind === 268 /* ExportDeclaration */ ?
+            var inAmbientExternalModule = node.parent.kind === 260 /* ModuleBlock */ && ts.isAmbientModule(node.parent.parent);
+            if (node.parent.kind !== 300 /* SourceFile */ && !inAmbientExternalModule) {
+                error(moduleName, node.kind === 270 /* ExportDeclaration */ ?
                     ts.Diagnostics.Export_declarations_are_not_permitted_in_a_namespace :
                     ts.Diagnostics.Import_declarations_in_a_namespace_cannot_reference_a_module);
                 return false;
@@ -79473,14 +80975,14 @@
                     (symbol.flags & 788968 /* Type */ ? 788968 /* Type */ : 0) |
                     (symbol.flags & 1920 /* Namespace */ ? 1920 /* Namespace */ : 0);
                 if (target.flags & excludedMeanings) {
-                    var message = node.kind === 271 /* ExportSpecifier */ ?
+                    var message = node.kind === 273 /* ExportSpecifier */ ?
                         ts.Diagnostics.Export_declaration_conflicts_with_exported_declaration_of_0 :
                         ts.Diagnostics.Import_declaration_conflicts_with_local_declaration_of_0;
                     error(node, message, symbolToString(symbol));
                 }
                 // Don't allow to re-export something with no value side when `--isolatedModules` is set.
                 if (compilerOptions.isolatedModules
-                    && node.kind === 271 /* ExportSpecifier */
+                    && node.kind === 273 /* ExportSpecifier */
                     && !node.parent.parent.isTypeOnly
                     && !(target.flags & 111551 /* Value */)
                     && !(node.flags & 8388608 /* Ambient */)) {
@@ -79492,10 +80994,9 @@
             }
         }
         function checkImportBinding(node) {
-            checkCollisionWithRequireExportsInGeneratedCode(node, node.name);
-            checkCollisionWithGlobalPromiseInGeneratedCode(node, node.name);
+            checkCollisionsForDeclarationName(node, node.name);
             checkAliasSymbol(node);
-            if (node.kind === 266 /* ImportSpecifier */ &&
+            if (node.kind === 268 /* ImportSpecifier */ &&
                 ts.idText(node.propertyName || node.name) === "default" &&
                 compilerOptions.esModuleInterop &&
                 moduleKind !== ts.ModuleKind.System && moduleKind < ts.ModuleKind.ES2015) {
@@ -79517,7 +81018,7 @@
                         checkImportBinding(importClause);
                     }
                     if (importClause.namedBindings) {
-                        if (importClause.namedBindings.kind === 264 /* NamespaceImport */) {
+                        if (importClause.namedBindings.kind === 266 /* NamespaceImport */) {
                             checkImportBinding(importClause.namedBindings);
                             if (moduleKind !== ts.ModuleKind.System && moduleKind < ts.ModuleKind.ES2015 && compilerOptions.esModuleInterop) {
                                 // import * as ns from "foo";
@@ -79545,7 +81046,7 @@
                 if (ts.hasSyntacticModifier(node, 1 /* Export */)) {
                     markExportAsReferenced(node);
                 }
-                if (node.moduleReference.kind !== 273 /* ExternalModuleReference */) {
+                if (node.moduleReference.kind !== 275 /* ExternalModuleReference */) {
                     var target = resolveAlias(getSymbolOfNode(node));
                     if (target !== unknownSymbol) {
                         if (target.flags & 111551 /* Value */) {
@@ -79588,10 +81089,10 @@
                     // export { x, y }
                     // export { x, y } from "foo"
                     ts.forEach(node.exportClause.elements, checkExportSpecifier);
-                    var inAmbientExternalModule = node.parent.kind === 258 /* ModuleBlock */ && ts.isAmbientModule(node.parent.parent);
-                    var inAmbientNamespaceDeclaration = !inAmbientExternalModule && node.parent.kind === 258 /* ModuleBlock */ &&
+                    var inAmbientExternalModule = node.parent.kind === 260 /* ModuleBlock */ && ts.isAmbientModule(node.parent.parent);
+                    var inAmbientNamespaceDeclaration = !inAmbientExternalModule && node.parent.kind === 260 /* ModuleBlock */ &&
                         !node.moduleSpecifier && node.flags & 8388608 /* Ambient */;
-                    if (node.parent.kind !== 298 /* SourceFile */ && !inAmbientExternalModule && !inAmbientNamespaceDeclaration) {
+                    if (node.parent.kind !== 300 /* SourceFile */ && !inAmbientExternalModule && !inAmbientNamespaceDeclaration) {
                         error(node, ts.Diagnostics.Export_declarations_are_not_permitted_in_a_namespace);
                     }
                 }
@@ -79624,14 +81125,14 @@
         }
         function checkGrammarExportDeclaration(node) {
             var _a;
-            var isTypeOnlyExportStar = node.isTypeOnly && ((_a = node.exportClause) === null || _a === void 0 ? void 0 : _a.kind) !== 269 /* NamedExports */;
+            var isTypeOnlyExportStar = node.isTypeOnly && ((_a = node.exportClause) === null || _a === void 0 ? void 0 : _a.kind) !== 271 /* NamedExports */;
             if (isTypeOnlyExportStar) {
                 grammarErrorOnNode(node, ts.Diagnostics.Only_named_exports_may_use_export_type);
             }
             return !isTypeOnlyExportStar;
         }
         function checkGrammarModuleElementContext(node, errorMessage) {
-            var isInAppropriateContext = node.parent.kind === 298 /* SourceFile */ || node.parent.kind === 258 /* ModuleBlock */ || node.parent.kind === 257 /* ModuleDeclaration */;
+            var isInAppropriateContext = node.parent.kind === 300 /* SourceFile */ || node.parent.kind === 260 /* ModuleBlock */ || node.parent.kind === 259 /* ModuleDeclaration */;
             if (!isInAppropriateContext) {
                 grammarErrorOnFirstToken(node, errorMessage);
             }
@@ -79709,8 +81210,8 @@
                 // If we hit an export assignment in an illegal context, just bail out to avoid cascading errors.
                 return;
             }
-            var container = node.parent.kind === 298 /* SourceFile */ ? node.parent : node.parent.parent;
-            if (container.kind === 257 /* ModuleDeclaration */ && !ts.isAmbientModule(container)) {
+            var container = node.parent.kind === 300 /* SourceFile */ ? node.parent : node.parent.parent;
+            if (container.kind === 259 /* ModuleDeclaration */ && !ts.isAmbientModule(container)) {
                 if (node.isExportEquals) {
                     error(node, ts.Diagnostics.An_export_assignment_cannot_be_used_in_a_namespace);
                 }
@@ -79723,7 +81224,7 @@
             if (!checkGrammarDecoratorsAndModifiers(node) && ts.hasEffectiveModifiers(node)) {
                 grammarErrorOnFirstToken(node, ts.Diagnostics.An_export_assignment_cannot_have_modifiers);
             }
-            if (node.expression.kind === 78 /* Identifier */) {
+            if (node.expression.kind === 79 /* Identifier */) {
                 var id = node.expression;
                 var sym = resolveEntityName(id, 67108863 /* All */, /*ignoreErrors*/ true, /*dontResolveAlias*/ true, node);
                 if (sym) {
@@ -79834,171 +81335,173 @@
                 // Only bother checking on a few construct kinds.  We don't want to be excessively
                 // hitting the cancellation token on every node we check.
                 switch (kind) {
-                    case 257 /* ModuleDeclaration */:
-                    case 253 /* ClassDeclaration */:
-                    case 254 /* InterfaceDeclaration */:
-                    case 252 /* FunctionDeclaration */:
+                    case 259 /* ModuleDeclaration */:
+                    case 255 /* ClassDeclaration */:
+                    case 256 /* InterfaceDeclaration */:
+                    case 254 /* FunctionDeclaration */:
                         cancellationToken.throwIfCancellationRequested();
                 }
             }
-            if (kind >= 233 /* FirstStatement */ && kind <= 249 /* LastStatement */ && node.flowNode && !isReachableFlowNode(node.flowNode)) {
+            if (kind >= 235 /* FirstStatement */ && kind <= 251 /* LastStatement */ && node.flowNode && !isReachableFlowNode(node.flowNode)) {
                 errorOrSuggestion(compilerOptions.allowUnreachableCode === false, node, ts.Diagnostics.Unreachable_code_detected);
             }
             switch (kind) {
-                case 160 /* TypeParameter */:
+                case 161 /* TypeParameter */:
                     return checkTypeParameter(node);
-                case 161 /* Parameter */:
+                case 162 /* Parameter */:
                     return checkParameter(node);
-                case 164 /* PropertyDeclaration */:
+                case 165 /* PropertyDeclaration */:
                     return checkPropertyDeclaration(node);
-                case 163 /* PropertySignature */:
+                case 164 /* PropertySignature */:
                     return checkPropertySignature(node);
-                case 176 /* ConstructorType */:
-                case 175 /* FunctionType */:
-                case 170 /* CallSignature */:
-                case 171 /* ConstructSignature */:
-                case 172 /* IndexSignature */:
+                case 178 /* ConstructorType */:
+                case 177 /* FunctionType */:
+                case 172 /* CallSignature */:
+                case 173 /* ConstructSignature */:
+                case 174 /* IndexSignature */:
                     return checkSignatureDeclaration(node);
-                case 166 /* MethodDeclaration */:
-                case 165 /* MethodSignature */:
+                case 167 /* MethodDeclaration */:
+                case 166 /* MethodSignature */:
                     return checkMethodDeclaration(node);
-                case 167 /* Constructor */:
+                case 168 /* ClassStaticBlockDeclaration */:
+                    return checkClassStaticBlockDeclaration(node);
+                case 169 /* Constructor */:
                     return checkConstructorDeclaration(node);
-                case 168 /* GetAccessor */:
-                case 169 /* SetAccessor */:
+                case 170 /* GetAccessor */:
+                case 171 /* SetAccessor */:
                     return checkAccessorDeclaration(node);
-                case 174 /* TypeReference */:
+                case 176 /* TypeReference */:
                     return checkTypeReferenceNode(node);
-                case 173 /* TypePredicate */:
+                case 175 /* TypePredicate */:
                     return checkTypePredicate(node);
-                case 177 /* TypeQuery */:
+                case 179 /* TypeQuery */:
                     return checkTypeQuery(node);
-                case 178 /* TypeLiteral */:
+                case 180 /* TypeLiteral */:
                     return checkTypeLiteral(node);
-                case 179 /* ArrayType */:
+                case 181 /* ArrayType */:
                     return checkArrayType(node);
-                case 180 /* TupleType */:
+                case 182 /* TupleType */:
                     return checkTupleType(node);
-                case 183 /* UnionType */:
-                case 184 /* IntersectionType */:
+                case 185 /* UnionType */:
+                case 186 /* IntersectionType */:
                     return checkUnionOrIntersectionType(node);
-                case 187 /* ParenthesizedType */:
-                case 181 /* OptionalType */:
-                case 182 /* RestType */:
+                case 189 /* ParenthesizedType */:
+                case 183 /* OptionalType */:
+                case 184 /* RestType */:
                     return checkSourceElement(node.type);
-                case 188 /* ThisType */:
+                case 190 /* ThisType */:
                     return checkThisType(node);
-                case 189 /* TypeOperator */:
+                case 191 /* TypeOperator */:
                     return checkTypeOperator(node);
-                case 185 /* ConditionalType */:
+                case 187 /* ConditionalType */:
                     return checkConditionalType(node);
-                case 186 /* InferType */:
+                case 188 /* InferType */:
                     return checkInferType(node);
-                case 194 /* TemplateLiteralType */:
+                case 196 /* TemplateLiteralType */:
                     return checkTemplateLiteralType(node);
-                case 196 /* ImportType */:
+                case 198 /* ImportType */:
                     return checkImportType(node);
-                case 193 /* NamedTupleMember */:
+                case 195 /* NamedTupleMember */:
                     return checkNamedTupleMember(node);
-                case 318 /* JSDocAugmentsTag */:
+                case 323 /* JSDocAugmentsTag */:
                     return checkJSDocAugmentsTag(node);
-                case 319 /* JSDocImplementsTag */:
+                case 324 /* JSDocImplementsTag */:
                     return checkJSDocImplementsTag(node);
-                case 335 /* JSDocTypedefTag */:
-                case 328 /* JSDocCallbackTag */:
-                case 329 /* JSDocEnumTag */:
+                case 340 /* JSDocTypedefTag */:
+                case 333 /* JSDocCallbackTag */:
+                case 334 /* JSDocEnumTag */:
                     return checkJSDocTypeAliasTag(node);
-                case 334 /* JSDocTemplateTag */:
+                case 339 /* JSDocTemplateTag */:
                     return checkJSDocTemplateTag(node);
-                case 333 /* JSDocTypeTag */:
+                case 338 /* JSDocTypeTag */:
                     return checkJSDocTypeTag(node);
-                case 330 /* JSDocParameterTag */:
+                case 335 /* JSDocParameterTag */:
                     return checkJSDocParameterTag(node);
-                case 337 /* JSDocPropertyTag */:
+                case 342 /* JSDocPropertyTag */:
                     return checkJSDocPropertyTag(node);
-                case 309 /* JSDocFunctionType */:
+                case 312 /* JSDocFunctionType */:
                     checkJSDocFunctionType(node);
                 // falls through
-                case 307 /* JSDocNonNullableType */:
-                case 306 /* JSDocNullableType */:
-                case 304 /* JSDocAllType */:
-                case 305 /* JSDocUnknownType */:
-                case 314 /* JSDocTypeLiteral */:
+                case 310 /* JSDocNonNullableType */:
+                case 309 /* JSDocNullableType */:
+                case 307 /* JSDocAllType */:
+                case 308 /* JSDocUnknownType */:
+                case 317 /* JSDocTypeLiteral */:
                     checkJSDocTypeIsInJsFile(node);
                     ts.forEachChild(node, checkSourceElement);
                     return;
-                case 310 /* JSDocVariadicType */:
+                case 313 /* JSDocVariadicType */:
                     checkJSDocVariadicType(node);
                     return;
-                case 302 /* JSDocTypeExpression */:
+                case 304 /* JSDocTypeExpression */:
                     return checkSourceElement(node.type);
-                case 190 /* IndexedAccessType */:
+                case 192 /* IndexedAccessType */:
                     return checkIndexedAccessType(node);
-                case 191 /* MappedType */:
+                case 193 /* MappedType */:
                     return checkMappedType(node);
-                case 252 /* FunctionDeclaration */:
+                case 254 /* FunctionDeclaration */:
                     return checkFunctionDeclaration(node);
-                case 231 /* Block */:
-                case 258 /* ModuleBlock */:
+                case 233 /* Block */:
+                case 260 /* ModuleBlock */:
                     return checkBlock(node);
-                case 233 /* VariableStatement */:
+                case 235 /* VariableStatement */:
                     return checkVariableStatement(node);
-                case 234 /* ExpressionStatement */:
+                case 236 /* ExpressionStatement */:
                     return checkExpressionStatement(node);
-                case 235 /* IfStatement */:
+                case 237 /* IfStatement */:
                     return checkIfStatement(node);
-                case 236 /* DoStatement */:
+                case 238 /* DoStatement */:
                     return checkDoStatement(node);
-                case 237 /* WhileStatement */:
+                case 239 /* WhileStatement */:
                     return checkWhileStatement(node);
-                case 238 /* ForStatement */:
+                case 240 /* ForStatement */:
                     return checkForStatement(node);
-                case 239 /* ForInStatement */:
+                case 241 /* ForInStatement */:
                     return checkForInStatement(node);
-                case 240 /* ForOfStatement */:
+                case 242 /* ForOfStatement */:
                     return checkForOfStatement(node);
-                case 241 /* ContinueStatement */:
-                case 242 /* BreakStatement */:
+                case 243 /* ContinueStatement */:
+                case 244 /* BreakStatement */:
                     return checkBreakOrContinueStatement(node);
-                case 243 /* ReturnStatement */:
+                case 245 /* ReturnStatement */:
                     return checkReturnStatement(node);
-                case 244 /* WithStatement */:
+                case 246 /* WithStatement */:
                     return checkWithStatement(node);
-                case 245 /* SwitchStatement */:
+                case 247 /* SwitchStatement */:
                     return checkSwitchStatement(node);
-                case 246 /* LabeledStatement */:
+                case 248 /* LabeledStatement */:
                     return checkLabeledStatement(node);
-                case 247 /* ThrowStatement */:
+                case 249 /* ThrowStatement */:
                     return checkThrowStatement(node);
-                case 248 /* TryStatement */:
+                case 250 /* TryStatement */:
                     return checkTryStatement(node);
-                case 250 /* VariableDeclaration */:
+                case 252 /* VariableDeclaration */:
                     return checkVariableDeclaration(node);
-                case 199 /* BindingElement */:
+                case 201 /* BindingElement */:
                     return checkBindingElement(node);
-                case 253 /* ClassDeclaration */:
+                case 255 /* ClassDeclaration */:
                     return checkClassDeclaration(node);
-                case 254 /* InterfaceDeclaration */:
+                case 256 /* InterfaceDeclaration */:
                     return checkInterfaceDeclaration(node);
-                case 255 /* TypeAliasDeclaration */:
+                case 257 /* TypeAliasDeclaration */:
                     return checkTypeAliasDeclaration(node);
-                case 256 /* EnumDeclaration */:
+                case 258 /* EnumDeclaration */:
                     return checkEnumDeclaration(node);
-                case 257 /* ModuleDeclaration */:
+                case 259 /* ModuleDeclaration */:
                     return checkModuleDeclaration(node);
-                case 262 /* ImportDeclaration */:
+                case 264 /* ImportDeclaration */:
                     return checkImportDeclaration(node);
-                case 261 /* ImportEqualsDeclaration */:
+                case 263 /* ImportEqualsDeclaration */:
                     return checkImportEqualsDeclaration(node);
-                case 268 /* ExportDeclaration */:
+                case 270 /* ExportDeclaration */:
                     return checkExportDeclaration(node);
-                case 267 /* ExportAssignment */:
+                case 269 /* ExportAssignment */:
                     return checkExportAssignment(node);
-                case 232 /* EmptyStatement */:
-                case 249 /* DebuggerStatement */:
+                case 234 /* EmptyStatement */:
+                case 251 /* DebuggerStatement */:
                     checkGrammarStatementInAmbientContext(node);
                     return;
-                case 272 /* MissingDeclaration */:
+                case 274 /* MissingDeclaration */:
                     return checkMissingDeclaration(node);
             }
         }
@@ -80097,33 +81600,33 @@
             currentNode = node;
             instantiationCount = 0;
             switch (node.kind) {
-                case 204 /* CallExpression */:
-                case 205 /* NewExpression */:
-                case 206 /* TaggedTemplateExpression */:
-                case 162 /* Decorator */:
-                case 276 /* JsxOpeningElement */:
+                case 206 /* CallExpression */:
+                case 207 /* NewExpression */:
+                case 208 /* TaggedTemplateExpression */:
+                case 163 /* Decorator */:
+                case 278 /* JsxOpeningElement */:
                     // These node kinds are deferred checked when overload resolution fails
                     // To save on work, we ensure the arguments are checked just once, in
                     // a deferred way
                     resolveUntypedCall(node);
                     break;
-                case 209 /* FunctionExpression */:
-                case 210 /* ArrowFunction */:
-                case 166 /* MethodDeclaration */:
-                case 165 /* MethodSignature */:
+                case 211 /* FunctionExpression */:
+                case 212 /* ArrowFunction */:
+                case 167 /* MethodDeclaration */:
+                case 166 /* MethodSignature */:
                     checkFunctionExpressionOrObjectLiteralMethodDeferred(node);
                     break;
-                case 168 /* GetAccessor */:
-                case 169 /* SetAccessor */:
+                case 170 /* GetAccessor */:
+                case 171 /* SetAccessor */:
                     checkAccessorDeclaration(node);
                     break;
-                case 222 /* ClassExpression */:
+                case 224 /* ClassExpression */:
                     checkClassExpressionDeferred(node);
                     break;
-                case 275 /* JsxSelfClosingElement */:
+                case 277 /* JsxSelfClosingElement */:
                     checkJsxSelfClosingElementDeferred(node);
                     break;
-                case 274 /* JsxElement */:
+                case 276 /* JsxElement */:
                     checkJsxElementDeferred(node);
                     break;
             }
@@ -80166,6 +81669,7 @@
                 ts.clear(potentialThisCollisions);
                 ts.clear(potentialNewTargetCollisions);
                 ts.clear(potentialWeakMapSetCollisions);
+                ts.clear(potentialReflectCollisions);
                 ts.forEach(node.statements, checkSourceElement);
                 checkSourceElement(node.endOfFileToken);
                 checkDeferredNodes(node);
@@ -80199,6 +81703,10 @@
                     ts.forEach(potentialWeakMapSetCollisions, checkWeakMapSetCollision);
                     ts.clear(potentialWeakMapSetCollisions);
                 }
+                if (potentialReflectCollisions.length) {
+                    ts.forEach(potentialReflectCollisions, checkReflectCollision);
+                    ts.clear(potentialReflectCollisions);
+                }
                 links.flags |= 1 /* TypeChecked */;
             }
         }
@@ -80259,7 +81767,7 @@
                 return [];
             }
             var symbols = ts.createSymbolTable();
-            var isStatic = false;
+            var isStaticSymbol = false;
             populateSymbols();
             symbols.delete("this" /* This */); // Not a symbol, a keyword
             return symbolsToArray(symbols);
@@ -80269,17 +81777,17 @@
                         copySymbols(location.locals, meaning);
                     }
                     switch (location.kind) {
-                        case 298 /* SourceFile */:
+                        case 300 /* SourceFile */:
                             if (!ts.isExternalModule(location))
                                 break;
                         // falls through
-                        case 257 /* ModuleDeclaration */:
+                        case 259 /* ModuleDeclaration */:
                             copyLocallyVisibleExportSymbols(getSymbolOfNode(location).exports, meaning & 2623475 /* ModuleMember */);
                             break;
-                        case 256 /* EnumDeclaration */:
+                        case 258 /* EnumDeclaration */:
                             copySymbols(getSymbolOfNode(location).exports, meaning & 8 /* EnumMember */);
                             break;
-                        case 222 /* ClassExpression */:
+                        case 224 /* ClassExpression */:
                             var className = location.name;
                             if (className) {
                                 copySymbol(location.symbol, meaning);
@@ -80287,17 +81795,17 @@
                         // this fall-through is necessary because we would like to handle
                         // type parameter inside class expression similar to how we handle it in classDeclaration and interface Declaration.
                         // falls through
-                        case 253 /* ClassDeclaration */:
-                        case 254 /* InterfaceDeclaration */:
+                        case 255 /* ClassDeclaration */:
+                        case 256 /* InterfaceDeclaration */:
                             // If we didn't come from static member of class or interface,
                             // add the type parameters into the symbol table
                             // (type parameters of classDeclaration/classExpression and interface are in member property of the symbol.
                             // Note: that the memberFlags come from previous iteration.
-                            if (!isStatic) {
+                            if (!isStaticSymbol) {
                                 copySymbols(getMembersOfSymbol(getSymbolOfNode(location)), meaning & 788968 /* Type */);
                             }
                             break;
-                        case 209 /* FunctionExpression */:
+                        case 211 /* FunctionExpression */:
                             var funcName = location.name;
                             if (funcName) {
                                 copySymbol(location.symbol, meaning);
@@ -80307,7 +81815,7 @@
                     if (ts.introducesArgumentsExoticObject(location)) {
                         copySymbol(argumentsSymbol, meaning);
                     }
-                    isStatic = ts.hasSyntacticModifier(location, 32 /* Static */);
+                    isStaticSymbol = ts.isStatic(location);
                     location = location.parent;
                 }
                 copySymbols(globals, meaning);
@@ -80341,7 +81849,7 @@
                 if (meaning) {
                     source.forEach(function (symbol) {
                         // Similar condition as in `resolveNameHelper`
-                        if (!ts.getDeclarationOfKind(symbol, 271 /* ExportSpecifier */) && !ts.getDeclarationOfKind(symbol, 270 /* NamespaceExport */)) {
+                        if (!ts.getDeclarationOfKind(symbol, 273 /* ExportSpecifier */) && !ts.getDeclarationOfKind(symbol, 272 /* NamespaceExport */)) {
                             copySymbol(symbol, meaning);
                         }
                     });
@@ -80349,25 +81857,25 @@
             }
         }
         function isTypeDeclarationName(name) {
-            return name.kind === 78 /* Identifier */ &&
+            return name.kind === 79 /* Identifier */ &&
                 isTypeDeclaration(name.parent) &&
                 ts.getNameOfDeclaration(name.parent) === name;
         }
         function isTypeDeclaration(node) {
             switch (node.kind) {
-                case 160 /* TypeParameter */:
-                case 253 /* ClassDeclaration */:
-                case 254 /* InterfaceDeclaration */:
-                case 255 /* TypeAliasDeclaration */:
-                case 256 /* EnumDeclaration */:
-                case 335 /* JSDocTypedefTag */:
-                case 328 /* JSDocCallbackTag */:
-                case 329 /* JSDocEnumTag */:
+                case 161 /* TypeParameter */:
+                case 255 /* ClassDeclaration */:
+                case 256 /* InterfaceDeclaration */:
+                case 257 /* TypeAliasDeclaration */:
+                case 258 /* EnumDeclaration */:
+                case 340 /* JSDocTypedefTag */:
+                case 333 /* JSDocCallbackTag */:
+                case 334 /* JSDocEnumTag */:
                     return true;
-                case 263 /* ImportClause */:
+                case 265 /* ImportClause */:
                     return node.isTypeOnly;
-                case 266 /* ImportSpecifier */:
-                case 271 /* ExportSpecifier */:
+                case 268 /* ImportSpecifier */:
+                case 273 /* ExportSpecifier */:
                     return node.parent.parent.isTypeOnly;
                 default:
                     return false;
@@ -80375,25 +81883,16 @@
         }
         // True if the given identifier is part of a type reference
         function isTypeReferenceIdentifier(node) {
-            while (node.parent.kind === 158 /* QualifiedName */) {
+            while (node.parent.kind === 159 /* QualifiedName */) {
                 node = node.parent;
             }
-            return node.parent.kind === 174 /* TypeReference */;
+            return node.parent.kind === 176 /* TypeReference */;
         }
         function isHeritageClauseElementIdentifier(node) {
-            while (node.parent.kind === 202 /* PropertyAccessExpression */) {
+            while (node.parent.kind === 204 /* PropertyAccessExpression */) {
                 node = node.parent;
             }
-            return node.parent.kind === 224 /* ExpressionWithTypeArguments */;
-        }
-        function getJSDocEntryNameReference(node) {
-            while (node.parent.kind === 158 /* QualifiedName */) {
-                node = node.parent;
-            }
-            while (node.parent.kind === 202 /* PropertyAccessExpression */) {
-                node = node.parent;
-            }
-            return ts.isJSDocNameReference(node.parent) ? node.parent : undefined;
+            return node.parent.kind === 226 /* ExpressionWithTypeArguments */;
         }
         function forEachEnclosingClass(node, callback) {
             var result;
@@ -80421,13 +81920,13 @@
             return !!forEachEnclosingClass(node, function (n) { return n === classDeclaration; });
         }
         function getLeftSideOfImportEqualsOrExportAssignment(nodeOnRightSide) {
-            while (nodeOnRightSide.parent.kind === 158 /* QualifiedName */) {
+            while (nodeOnRightSide.parent.kind === 159 /* QualifiedName */) {
                 nodeOnRightSide = nodeOnRightSide.parent;
             }
-            if (nodeOnRightSide.parent.kind === 261 /* ImportEqualsDeclaration */) {
+            if (nodeOnRightSide.parent.kind === 263 /* ImportEqualsDeclaration */) {
                 return nodeOnRightSide.parent.moduleReference === nodeOnRightSide ? nodeOnRightSide.parent : undefined;
             }
-            if (nodeOnRightSide.parent.kind === 267 /* ExportAssignment */) {
+            if (nodeOnRightSide.parent.kind === 269 /* ExportAssignment */) {
                 return nodeOnRightSide.parent.expression === nodeOnRightSide ? nodeOnRightSide.parent : undefined;
             }
             return undefined;
@@ -80453,7 +81952,7 @@
                 node = parent;
                 parent = parent.parent;
             }
-            if (parent && parent.kind === 196 /* ImportType */ && parent.qualifier === node) {
+            if (parent && parent.kind === 198 /* ImportType */ && parent.qualifier === node) {
                 return parent;
             }
             return undefined;
@@ -80463,17 +81962,17 @@
                 return getSymbolOfNode(name.parent);
             }
             if (ts.isInJSFile(name) &&
-                name.parent.kind === 202 /* PropertyAccessExpression */ &&
+                name.parent.kind === 204 /* PropertyAccessExpression */ &&
                 name.parent === name.parent.parent.left) {
                 // Check if this is a special property assignment
-                if (!ts.isPrivateIdentifier(name)) {
+                if (!ts.isPrivateIdentifier(name) && !ts.isJSDocMemberName(name)) {
                     var specialPropertyAssignmentSymbol = getSpecialPropertyAssignmentSymbolFromEntityName(name);
                     if (specialPropertyAssignmentSymbol) {
                         return specialPropertyAssignmentSymbol;
                     }
                 }
             }
-            if (name.parent.kind === 267 /* ExportAssignment */ && ts.isEntityNameExpression(name)) {
+            if (name.parent.kind === 269 /* ExportAssignment */ && ts.isEntityNameExpression(name)) {
                 // Even an entity name expression that doesn't resolve as an entityname may still typecheck as a property access expression
                 var success = resolveEntityName(name, 
                 /*all meanings*/ 111551 /* Value */ | 788968 /* Type */ | 1920 /* Namespace */ | 2097152 /* Alias */, /*ignoreErrors*/ true);
@@ -80481,13 +81980,13 @@
                     return success;
                 }
             }
-            else if (!ts.isPropertyAccessExpression(name) && !ts.isPrivateIdentifier(name) && isInRightSideOfImportOrExportAssignment(name)) {
+            else if (ts.isEntityName(name) && isInRightSideOfImportOrExportAssignment(name)) {
                 // Since we already checked for ExportAssignment, this really could only be an Import
-                var importEqualsDeclaration = ts.getAncestor(name, 261 /* ImportEqualsDeclaration */);
+                var importEqualsDeclaration = ts.getAncestor(name, 263 /* ImportEqualsDeclaration */);
                 ts.Debug.assert(importEqualsDeclaration !== undefined);
                 return getSymbolOfPartOfRightHandSideOfImportEquals(name, /*dontResolveAlias*/ true);
             }
-            if (!ts.isPropertyAccessExpression(name) && !ts.isPrivateIdentifier(name)) {
+            if (ts.isEntityName(name)) {
                 var possibleImportNode = isImportTypeQualifierPart(name);
                 if (possibleImportNode) {
                     getTypeFromTypeNode(possibleImportNode);
@@ -80495,13 +81994,13 @@
                     return sym === unknownSymbol ? undefined : sym;
                 }
             }
-            while (ts.isRightSideOfQualifiedNameOrPropertyAccess(name)) {
+            while (ts.isRightSideOfQualifiedNameOrPropertyAccessOrJSDocMemberName(name)) {
                 name = name.parent;
             }
             if (isHeritageClauseElementIdentifier(name)) {
                 var meaning = 0 /* None */;
                 // In an interface or class, we're definitely interested in a type.
-                if (name.parent.kind === 224 /* ExpressionWithTypeArguments */) {
+                if (name.parent.kind === 226 /* ExpressionWithTypeArguments */) {
                     meaning = 788968 /* Type */;
                     // In a class 'extends' clause we are also looking for a value.
                     if (ts.isExpressionWithTypeArgumentsInClassExtendsClause(name.parent)) {
@@ -80517,10 +82016,10 @@
                     return entityNameSymbol;
                 }
             }
-            if (name.parent.kind === 330 /* JSDocParameterTag */) {
+            if (name.parent.kind === 335 /* JSDocParameterTag */) {
                 return ts.getParameterSymbolFromJSDoc(name.parent);
             }
-            if (name.parent.kind === 160 /* TypeParameter */ && name.parent.parent.kind === 334 /* JSDocTemplateTag */) {
+            if (name.parent.kind === 161 /* TypeParameter */ && name.parent.parent.kind === 339 /* JSDocTemplateTag */) {
                 ts.Debug.assert(!ts.isInJSFile(name)); // Otherwise `isDeclarationName` would have been true.
                 var typeParameter = ts.getTypeParameterFromJsDoc(name.parent);
                 return typeParameter && typeParameter.symbol;
@@ -80530,63 +82029,81 @@
                     // Missing entity name.
                     return undefined;
                 }
-                if (name.kind === 78 /* Identifier */) {
+                var isJSDoc_1 = ts.findAncestor(name, ts.or(ts.isJSDocLinkLike, ts.isJSDocNameReference, ts.isJSDocMemberName));
+                var meaning = isJSDoc_1 ? 788968 /* Type */ | 1920 /* Namespace */ | 111551 /* Value */ : 111551 /* Value */;
+                if (name.kind === 79 /* Identifier */) {
                     if (ts.isJSXTagName(name) && isJsxIntrinsicIdentifier(name)) {
                         var symbol = getIntrinsicTagSymbol(name.parent);
                         return symbol === unknownSymbol ? undefined : symbol;
                     }
-                    return resolveEntityName(name, 111551 /* Value */, /*ignoreErrors*/ false, /*dontResolveAlias*/ true);
+                    var result = resolveEntityName(name, meaning, /*ignoreErrors*/ false, /*dontResolveAlias*/ !isJSDoc_1, ts.getHostSignatureFromJSDoc(name));
+                    if (!result && isJSDoc_1) {
+                        var container = ts.findAncestor(name, ts.or(ts.isClassLike, ts.isInterfaceDeclaration));
+                        if (container) {
+                            return resolveJSDocMemberName(name, getSymbolOfNode(container));
+                        }
+                    }
+                    return result;
                 }
-                else if (name.kind === 202 /* PropertyAccessExpression */ || name.kind === 158 /* QualifiedName */) {
+                else if (name.kind === 204 /* PropertyAccessExpression */ || name.kind === 159 /* QualifiedName */) {
                     var links = getNodeLinks(name);
                     if (links.resolvedSymbol) {
                         return links.resolvedSymbol;
                     }
-                    if (name.kind === 202 /* PropertyAccessExpression */) {
+                    if (name.kind === 204 /* PropertyAccessExpression */) {
                         checkPropertyAccessExpression(name, 0 /* Normal */);
                     }
                     else {
                         checkQualifiedName(name, 0 /* Normal */);
                     }
+                    if (!links.resolvedSymbol && isJSDoc_1 && ts.isQualifiedName(name)) {
+                        return resolveJSDocMemberName(name);
+                    }
                     return links.resolvedSymbol;
                 }
+                else if (ts.isJSDocMemberName(name)) {
+                    return resolveJSDocMemberName(name);
+                }
             }
             else if (isTypeReferenceIdentifier(name)) {
-                var meaning = name.parent.kind === 174 /* TypeReference */ ? 788968 /* Type */ : 1920 /* Namespace */;
+                var meaning = name.parent.kind === 176 /* TypeReference */ ? 788968 /* Type */ : 1920 /* Namespace */;
                 return resolveEntityName(name, meaning, /*ignoreErrors*/ false, /*dontResolveAlias*/ true);
             }
-            var jsdocReference = getJSDocEntryNameReference(name);
-            if (jsdocReference || ts.isJSDocLink(name.parent)) {
-                var meaning = 788968 /* Type */ | 1920 /* Namespace */ | 111551 /* Value */;
-                var symbol = resolveEntityName(name, meaning, /*ignoreErrors*/ false, /*dontResolveAlias*/ false, ts.getHostSignatureFromJSDoc(name));
-                if (symbol) {
-                    return symbol;
-                }
-                else if (ts.isQualifiedName(name) && ts.isIdentifier(name.left)) {
-                    // resolve C.m as a static member first
-                    var links = getNodeLinks(name);
-                    if (links.resolvedSymbol) {
-                        return links.resolvedSymbol;
-                    }
-                    checkQualifiedName(name, 0 /* Normal */);
-                    if (links.resolvedSymbol) {
-                        return links.resolvedSymbol;
-                    }
-                    // then resolve it as an instance member
-                    var s = resolveEntityName(name.left, meaning, /*ignoreErrors*/ false);
-                    if (s) {
-                        var t = getDeclaredTypeOfSymbol(s);
-                        return getPropertyOfType(t, name.right.escapedText);
-                    }
-                }
-            }
-            if (name.parent.kind === 173 /* TypePredicate */) {
+            if (name.parent.kind === 175 /* TypePredicate */) {
                 return resolveEntityName(name, /*meaning*/ 1 /* FunctionScopedVariable */);
             }
             return undefined;
         }
+        /**
+         * Recursively resolve entity names and jsdoc instance references:
+         * 1. K#m as K.prototype.m for a class (or other value) K
+         * 2. K.m as K.prototype.m
+         * 3. I.m as I.m for a type I, or any other I.m that fails to resolve in (1) or (2)
+         *
+         * For unqualified names, a container K may be provided as a second argument.
+         */
+        function resolveJSDocMemberName(name, container) {
+            if (ts.isEntityName(name)) {
+                // resolve static values first
+                var meaning = 788968 /* Type */ | 1920 /* Namespace */ | 111551 /* Value */;
+                var symbol = resolveEntityName(name, meaning, /*ignoreErrors*/ false, /*dontResolveAlias*/ true, ts.getHostSignatureFromJSDoc(name));
+                if (!symbol && ts.isIdentifier(name) && container) {
+                    symbol = getMergedSymbol(getSymbol(getExportsOfSymbol(container), name.escapedText, meaning));
+                }
+                if (symbol) {
+                    return symbol;
+                }
+            }
+            var left = ts.isIdentifier(name) ? container : resolveJSDocMemberName(name.left);
+            var right = ts.isIdentifier(name) ? name.escapedText : name.right.escapedText;
+            if (left) {
+                var proto = left.flags & 111551 /* Value */ && getPropertyOfType(getTypeOfSymbol(left), "prototype");
+                var t = proto ? getTypeOfSymbol(proto) : getDeclaredTypeOfSymbol(left);
+                return getPropertyOfType(t, right);
+            }
+        }
         function getSymbolAtLocation(node, ignoreErrors) {
-            if (node.kind === 298 /* SourceFile */) {
+            if (node.kind === 300 /* SourceFile */) {
                 return ts.isExternalModule(node) ? getMergedSymbol(node.symbol) : undefined;
             }
             var parent = node.parent;
@@ -80605,12 +82122,12 @@
             else if (ts.isLiteralComputedPropertyDeclarationName(node)) {
                 return getSymbolOfNode(parent.parent);
             }
-            if (node.kind === 78 /* Identifier */) {
+            if (node.kind === 79 /* Identifier */) {
                 if (isInRightSideOfImportOrExportAssignment(node)) {
                     return getSymbolOfNameOrPropertyAccessExpression(node);
                 }
-                else if (parent.kind === 199 /* BindingElement */ &&
-                    grandParent.kind === 197 /* ObjectBindingPattern */ &&
+                else if (parent.kind === 201 /* BindingElement */ &&
+                    grandParent.kind === 199 /* ObjectBindingPattern */ &&
                     node === parent.propertyName) {
                     var typeOfPattern = getTypeOfNode(grandParent);
                     var propertyDeclaration = getPropertyOfType(typeOfPattern, node.escapedText);
@@ -80618,14 +82135,24 @@
                         return propertyDeclaration;
                     }
                 }
+                else if (ts.isMetaProperty(parent)) {
+                    var parentType = getTypeOfNode(parent);
+                    var propertyDeclaration = getPropertyOfType(parentType, node.escapedText);
+                    if (propertyDeclaration) {
+                        return propertyDeclaration;
+                    }
+                    if (parent.keywordToken === 103 /* NewKeyword */) {
+                        return checkNewTargetMetaProperty(parent).symbol;
+                    }
+                }
             }
             switch (node.kind) {
-                case 78 /* Identifier */:
-                case 79 /* PrivateIdentifier */:
-                case 202 /* PropertyAccessExpression */:
-                case 158 /* QualifiedName */:
+                case 79 /* Identifier */:
+                case 80 /* PrivateIdentifier */:
+                case 204 /* PropertyAccessExpression */:
+                case 159 /* QualifiedName */:
                     return getSymbolOfNameOrPropertyAccessExpression(node);
-                case 107 /* ThisKeyword */:
+                case 108 /* ThisKeyword */:
                     var container = ts.getThisContainer(node, /*includeArrowFunctions*/ false);
                     if (ts.isFunctionLike(container)) {
                         var sig = getSignatureFromDeclaration(container);
@@ -80637,14 +82164,14 @@
                         return checkExpression(node).symbol;
                     }
                 // falls through
-                case 188 /* ThisType */:
+                case 190 /* ThisType */:
                     return getTypeFromThisTypeNode(node).symbol;
-                case 105 /* SuperKeyword */:
+                case 106 /* SuperKeyword */:
                     return checkExpression(node).symbol;
-                case 132 /* ConstructorKeyword */:
+                case 133 /* ConstructorKeyword */:
                     // constructor keyword for an overload, should take us to the definition if it exist
                     var constructorDeclaration = node.parent;
-                    if (constructorDeclaration && constructorDeclaration.kind === 167 /* Constructor */) {
+                    if (constructorDeclaration && constructorDeclaration.kind === 169 /* Constructor */) {
                         return constructorDeclaration.parent.symbol;
                     }
                     return undefined;
@@ -80655,7 +82182,7 @@
                     // 3). Dynamic import call or require in javascript
                     // 4). type A = import("./f/*gotToDefinitionHere*/oo")
                     if ((ts.isExternalModuleImportEqualsDeclaration(node.parent.parent) && ts.getExternalModuleImportEqualsDeclarationExpression(node.parent.parent) === node) ||
-                        ((node.parent.kind === 262 /* ImportDeclaration */ || node.parent.kind === 268 /* ExportDeclaration */) && node.parent.moduleSpecifier === node) ||
+                        ((node.parent.kind === 264 /* ImportDeclaration */ || node.parent.kind === 270 /* ExportDeclaration */) && node.parent.moduleSpecifier === node) ||
                         ((ts.isInJSFile(node) && ts.isRequireCall(node.parent, /*checkArgumentIsStringLiteralLike*/ false)) || ts.isImportCall(node.parent)) ||
                         (ts.isLiteralTypeNode(node.parent) && ts.isLiteralImportTypeNode(node.parent.parent) && node.parent.parent.argument === node.parent)) {
                         return resolveExternalModuleName(node, node, ignoreErrors);
@@ -80672,21 +82199,35 @@
                             ? getTypeFromTypeNode(grandParent.objectType)
                             : undefined;
                     return objectType && getPropertyOfType(objectType, ts.escapeLeadingUnderscores(node.text));
-                case 87 /* DefaultKeyword */:
-                case 97 /* FunctionKeyword */:
+                case 88 /* DefaultKeyword */:
+                case 98 /* FunctionKeyword */:
                 case 38 /* EqualsGreaterThanToken */:
-                case 83 /* ClassKeyword */:
+                case 84 /* ClassKeyword */:
                     return getSymbolOfNode(node.parent);
-                case 196 /* ImportType */:
+                case 198 /* ImportType */:
                     return ts.isLiteralImportTypeNode(node) ? getSymbolAtLocation(node.argument.literal, ignoreErrors) : undefined;
-                case 92 /* ExportKeyword */:
+                case 93 /* ExportKeyword */:
                     return ts.isExportAssignment(node.parent) ? ts.Debug.checkDefined(node.parent.symbol) : undefined;
+                case 100 /* ImportKeyword */:
+                case 103 /* NewKeyword */:
+                    return ts.isMetaProperty(node.parent) ? checkMetaPropertyKeyword(node.parent).symbol : undefined;
+                case 229 /* MetaProperty */:
+                    return checkExpression(node).symbol;
                 default:
                     return undefined;
             }
         }
+        function getIndexInfosAtLocation(node) {
+            if (ts.isIdentifier(node) && ts.isPropertyAccessExpression(node.parent) && node.parent.name === node) {
+                var keyType_1 = getLiteralTypeFromPropertyName(node);
+                var objectType = getTypeOfExpression(node.parent.expression);
+                var objectTypes = objectType.flags & 1048576 /* Union */ ? objectType.types : [objectType];
+                return ts.flatMap(objectTypes, function (t) { return ts.filter(getIndexInfosOfType(t), function (info) { return isApplicableIndexType(keyType_1, info.keyType); }); });
+            }
+            return undefined;
+        }
         function getShorthandAssignmentValueSymbol(location) {
-            if (location && location.kind === 290 /* ShorthandPropertyAssignment */) {
+            if (location && location.kind === 292 /* ShorthandPropertyAssignment */) {
                 return resolveEntityName(location.name, 111551 /* Value */ | 2097152 /* Alias */);
             }
             return undefined;
@@ -80756,6 +82297,9 @@
                     return declaredType !== errorType ? declaredType : getTypeOfSymbol(symbol);
                 }
             }
+            if (ts.isMetaProperty(node.parent) && node.parent.keywordToken === node.kind) {
+                return checkMetaPropertyKeyword(node.parent);
+            }
             return errorType;
         }
         // Gets the type of object literal or array literal of destructuring assignment.
@@ -80765,23 +82309,23 @@
         // [ a ] from
         //     [a] = [ some array ...]
         function getTypeOfAssignmentPattern(expr) {
-            ts.Debug.assert(expr.kind === 201 /* ObjectLiteralExpression */ || expr.kind === 200 /* ArrayLiteralExpression */);
+            ts.Debug.assert(expr.kind === 203 /* ObjectLiteralExpression */ || expr.kind === 202 /* ArrayLiteralExpression */);
             // If this is from "for of"
             //     for ( { a } of elems) {
             //     }
-            if (expr.parent.kind === 240 /* ForOfStatement */) {
+            if (expr.parent.kind === 242 /* ForOfStatement */) {
                 var iteratedType = checkRightHandSideOfForOf(expr.parent);
                 return checkDestructuringAssignment(expr, iteratedType || errorType);
             }
             // If this is from "for" initializer
             //     for ({a } = elems[0];.....) { }
-            if (expr.parent.kind === 217 /* BinaryExpression */) {
+            if (expr.parent.kind === 219 /* BinaryExpression */) {
                 var iteratedType = getTypeOfExpression(expr.parent.right);
                 return checkDestructuringAssignment(expr, iteratedType || errorType);
             }
             // If this is from nested object binding pattern
             //     for ({ skills: { primary, secondary } } = multiRobot, i = 0; i < 1; i++) {
-            if (expr.parent.kind === 289 /* PropertyAssignment */) {
+            if (expr.parent.kind === 291 /* PropertyAssignment */) {
                 var node_3 = ts.cast(expr.parent.parent, ts.isObjectLiteralExpression);
                 var typeOfParentObjectLiteral = getTypeOfAssignmentPattern(node_3) || errorType;
                 var propertyIndex = ts.indexOfNode(node_3.properties, expr.parent);
@@ -80817,19 +82361,19 @@
          */
         function getParentTypeOfClassElement(node) {
             var classSymbol = getSymbolOfNode(node.parent);
-            return ts.hasSyntacticModifier(node, 32 /* Static */)
+            return ts.isStatic(node)
                 ? getTypeOfSymbol(classSymbol)
                 : getDeclaredTypeOfSymbol(classSymbol);
         }
         function getClassElementPropertyKeyType(element) {
             var name = element.name;
             switch (name.kind) {
-                case 78 /* Identifier */:
-                    return getLiteralType(ts.idText(name));
+                case 79 /* Identifier */:
+                    return getStringLiteralType(ts.idText(name));
                 case 8 /* NumericLiteral */:
                 case 10 /* StringLiteral */:
-                    return getLiteralType(name.text);
-                case 159 /* ComputedPropertyName */:
+                    return getStringLiteralType(name.text);
+                case 160 /* ComputedPropertyName */:
                     var nameType = checkComputedPropertyName(name);
                     return isTypeAssignableToKind(nameType, 12288 /* ESSymbolLike */) ? nameType : stringType;
                 default:
@@ -80947,7 +82491,7 @@
                     }
                     var parentSymbol_1 = getParentOfSymbol(symbol);
                     if (parentSymbol_1) {
-                        if (parentSymbol_1.flags & 512 /* ValueModule */ && ((_a = parentSymbol_1.valueDeclaration) === null || _a === void 0 ? void 0 : _a.kind) === 298 /* SourceFile */) {
+                        if (parentSymbol_1.flags & 512 /* ValueModule */ && ((_a = parentSymbol_1.valueDeclaration) === null || _a === void 0 ? void 0 : _a.kind) === 300 /* SourceFile */) {
                             var symbolFile = parentSymbol_1.valueDeclaration;
                             var referenceFile = ts.getSourceFileOfNode(node);
                             // If `node` accesses an export and that export isn't in the same file, then symbol is a namespace export, so return undefined.
@@ -80979,7 +82523,7 @@
         function isSymbolOfDestructuredElementOfCatchBinding(symbol) {
             return symbol.valueDeclaration
                 && ts.isBindingElement(symbol.valueDeclaration)
-                && ts.walkUpBindingElementsAndPatterns(symbol.valueDeclaration).parent.kind === 288 /* CatchClause */;
+                && ts.walkUpBindingElementsAndPatterns(symbol.valueDeclaration).parent.kind === 290 /* CatchClause */;
         }
         function isSymbolOfDeclarationWithCollidingName(symbol) {
             if (symbol.flags & 418 /* BlockScoped */ && symbol.valueDeclaration && !ts.isSourceFile(symbol.valueDeclaration)) {
@@ -81010,7 +82554,7 @@
                             //       they will not collide with anything
                             var isDeclaredInLoop = nodeLinks_1.flags & 524288 /* BlockScopedBindingInLoop */;
                             var inLoopInitializer = ts.isIterationStatement(container, /*lookInLabeledStatements*/ false);
-                            var inLoopBodyBlock = container.kind === 231 /* Block */ && ts.isIterationStatement(container.parent, /*lookInLabeledStatements*/ false);
+                            var inLoopBodyBlock = container.kind === 233 /* Block */ && ts.isIterationStatement(container.parent, /*lookInLabeledStatements*/ false);
                             links.isDeclarationWithCollidingName = !ts.isBlockScopedContainerTopLevel(container) && (!isDeclaredInLoop || (!inLoopInitializer && !inLoopBodyBlock));
                         }
                         else {
@@ -81051,20 +82595,20 @@
         }
         function isValueAliasDeclaration(node) {
             switch (node.kind) {
-                case 261 /* ImportEqualsDeclaration */:
+                case 263 /* ImportEqualsDeclaration */:
                     return isAliasResolvedToValue(getSymbolOfNode(node) || unknownSymbol);
-                case 263 /* ImportClause */:
-                case 264 /* NamespaceImport */:
-                case 266 /* ImportSpecifier */:
-                case 271 /* ExportSpecifier */:
+                case 265 /* ImportClause */:
+                case 266 /* NamespaceImport */:
+                case 268 /* ImportSpecifier */:
+                case 273 /* ExportSpecifier */:
                     var symbol = getSymbolOfNode(node) || unknownSymbol;
                     return isAliasResolvedToValue(symbol) && !getTypeOnlyAliasDeclaration(symbol);
-                case 268 /* ExportDeclaration */:
+                case 270 /* ExportDeclaration */:
                     var exportClause = node.exportClause;
                     return !!exportClause && (ts.isNamespaceExport(exportClause) ||
                         ts.some(exportClause.elements, isValueAliasDeclaration));
-                case 267 /* ExportAssignment */:
-                    return node.expression && node.expression.kind === 78 /* Identifier */ ?
+                case 269 /* ExportAssignment */:
+                    return node.expression && node.expression.kind === 79 /* Identifier */ ?
                         isAliasResolvedToValue(getSymbolOfNode(node) || unknownSymbol) :
                         true;
             }
@@ -81072,7 +82616,7 @@
         }
         function isTopLevelValueImportEqualsWithEntityName(nodeIn) {
             var node = ts.getParseTreeNode(nodeIn, ts.isImportEqualsDeclaration);
-            if (node === undefined || node.parent.kind !== 298 /* SourceFile */ || !ts.isInternalModuleImportEqualsDeclaration(node)) {
+            if (node === undefined || node.parent.kind !== 300 /* SourceFile */ || !ts.isInternalModuleImportEqualsDeclaration(node)) {
                 // parent is not source file or it is not reference to internal module
                 return false;
             }
@@ -81172,7 +82716,11 @@
             return symbol && getPropertiesOfType(getTypeOfSymbol(symbol)) || ts.emptyArray;
         }
         function getNodeCheckFlags(node) {
-            return getNodeLinks(node).flags || 0;
+            var _a;
+            var nodeId = node.id || 0;
+            if (nodeId < 0 || nodeId >= nodeLinks.length)
+                return 0;
+            return ((_a = nodeLinks[nodeId]) === null || _a === void 0 ? void 0 : _a.flags) || 0;
         }
         function getEnumMemberValue(node) {
             computeEnumMemberValues(node.parent);
@@ -81180,15 +82728,15 @@
         }
         function canHaveConstantValue(node) {
             switch (node.kind) {
-                case 292 /* EnumMember */:
-                case 202 /* PropertyAccessExpression */:
-                case 203 /* ElementAccessExpression */:
+                case 294 /* EnumMember */:
+                case 204 /* PropertyAccessExpression */:
+                case 205 /* ElementAccessExpression */:
                     return true;
             }
             return false;
         }
         function getConstantValue(node) {
-            if (node.kind === 292 /* EnumMember */) {
+            if (node.kind === 294 /* EnumMember */) {
                 return getEnumMemberValue(node);
             }
             var symbol = getNodeLinks(node).resolvedSymbol;
@@ -81205,7 +82753,7 @@
             return !!(type.flags & 524288 /* Object */) && getSignaturesOfType(type, 0 /* Call */).length > 0;
         }
         function getTypeReferenceSerializationKind(typeNameIn, location) {
-            var _a;
+            var _a, _b;
             // ensure both `typeName` and `location` are parse tree nodes.
             var typeName = ts.getParseTreeNode(typeNameIn, ts.isEntityName);
             if (!typeName)
@@ -81216,9 +82764,14 @@
                     return ts.TypeReferenceSerializationKind.Unknown;
             }
             // Resolve the symbol as a value to ensure the type can be reached at runtime during emit.
+            var isTypeOnly = false;
+            if (ts.isQualifiedName(typeName)) {
+                var rootValueSymbol = resolveEntityName(ts.getFirstIdentifier(typeName), 111551 /* Value */, /*ignoreErrors*/ true, /*dontResolveAlias*/ true, location);
+                isTypeOnly = !!((_a = rootValueSymbol === null || rootValueSymbol === void 0 ? void 0 : rootValueSymbol.declarations) === null || _a === void 0 ? void 0 : _a.every(ts.isTypeOnlyImportOrExportDeclaration));
+            }
             var valueSymbol = resolveEntityName(typeName, 111551 /* Value */, /*ignoreErrors*/ true, /*dontResolveAlias*/ true, location);
-            var isTypeOnly = ((_a = valueSymbol === null || valueSymbol === void 0 ? void 0 : valueSymbol.declarations) === null || _a === void 0 ? void 0 : _a.every(ts.isTypeOnlyImportOrExportDeclaration)) || false;
             var resolvedSymbol = valueSymbol && valueSymbol.flags & 2097152 /* Alias */ ? resolveAlias(valueSymbol) : valueSymbol;
+            isTypeOnly || (isTypeOnly = !!((_b = valueSymbol === null || valueSymbol === void 0 ? void 0 : valueSymbol.declarations) === null || _b === void 0 ? void 0 : _b.every(ts.isTypeOnlyImportOrExportDeclaration)));
             // Resolve the symbol as a type so that we can provide a more useful hint for the type serializer.
             var typeSymbol = resolveEntityName(typeName, 788968 /* Type */, /*ignoreErrors*/ true, /*dontResolveAlias*/ false, location);
             if (resolvedSymbol && resolvedSymbol === typeSymbol) {
@@ -81276,7 +82829,7 @@
         function createTypeOfDeclaration(declarationIn, enclosingDeclaration, flags, tracker, addUndefined) {
             var declaration = ts.getParseTreeNode(declarationIn, ts.isVariableLikeOrAccessor);
             if (!declaration) {
-                return ts.factory.createToken(128 /* AnyKeyword */);
+                return ts.factory.createToken(129 /* AnyKeyword */);
             }
             // Get type of the symbol if this is the valid symbol otherwise get type at location
             var symbol = getSymbolOfNode(declaration);
@@ -81295,7 +82848,7 @@
         function createReturnTypeOfSignatureDeclaration(signatureDeclarationIn, enclosingDeclaration, flags, tracker) {
             var signatureDeclaration = ts.getParseTreeNode(signatureDeclarationIn, ts.isFunctionLike);
             if (!signatureDeclaration) {
-                return ts.factory.createToken(128 /* AnyKeyword */);
+                return ts.factory.createToken(129 /* AnyKeyword */);
             }
             var signature = getSignatureFromDeclaration(signatureDeclaration);
             return nodeBuilder.typeToTypeNode(getReturnTypeOfSignature(signature), enclosingDeclaration, flags | 1024 /* MultilineObjectLiterals */, tracker);
@@ -81303,7 +82856,7 @@
         function createTypeOfExpression(exprIn, enclosingDeclaration, flags, tracker) {
             var expr = ts.getParseTreeNode(exprIn, ts.isExpression);
             if (!expr) {
-                return ts.factory.createToken(128 /* AnyKeyword */);
+                return ts.factory.createToken(129 /* AnyKeyword */);
             }
             var type = getWidenedType(getRegularTypeOfExpression(expr));
             return nodeBuilder.typeToTypeNode(type, enclosingDeclaration, flags | 1024 /* MultilineObjectLiterals */, tracker);
@@ -81460,12 +83013,12 @@
                 getJsxFragmentFactoryEntity: getJsxFragmentFactoryEntity,
                 getAllAccessorDeclarations: function (accessor) {
                     accessor = ts.getParseTreeNode(accessor, ts.isGetOrSetAccessorDeclaration); // TODO: GH#18217
-                    var otherKind = accessor.kind === 169 /* SetAccessor */ ? 168 /* GetAccessor */ : 169 /* SetAccessor */;
+                    var otherKind = accessor.kind === 171 /* SetAccessor */ ? 170 /* GetAccessor */ : 171 /* SetAccessor */;
                     var otherAccessor = ts.getDeclarationOfKind(getSymbolOfNode(accessor), otherKind);
                     var firstAccessor = otherAccessor && (otherAccessor.pos < accessor.pos) ? otherAccessor : accessor;
                     var secondAccessor = otherAccessor && (otherAccessor.pos < accessor.pos) ? accessor : otherAccessor;
-                    var setAccessor = accessor.kind === 169 /* SetAccessor */ ? accessor : otherAccessor;
-                    var getAccessor = accessor.kind === 168 /* GetAccessor */ ? accessor : otherAccessor;
+                    var setAccessor = accessor.kind === 171 /* SetAccessor */ ? accessor : otherAccessor;
+                    var getAccessor = accessor.kind === 170 /* GetAccessor */ ? accessor : otherAccessor;
                     return {
                         firstAccessor: firstAccessor,
                         secondAccessor: secondAccessor,
@@ -81481,7 +83034,7 @@
                 },
                 getDeclarationStatementsForSourceFile: function (node, flags, tracker, bundled) {
                     var n = ts.getParseTreeNode(node);
-                    ts.Debug.assert(n && n.kind === 298 /* SourceFile */, "Non-sourcefile node passed into getDeclarationsForSourceFile");
+                    ts.Debug.assert(n && n.kind === 300 /* SourceFile */, "Non-sourcefile node passed into getDeclarationsForSourceFile");
                     var sym = getSymbolOfNode(node);
                     if (!sym) {
                         return !node.locals ? [] : nodeBuilder.symbolTableToDeclarationStatements(node.locals, node, flags, tracker, bundled);
@@ -81518,7 +83071,7 @@
                 return false;
             }
             function isInHeritageClause(node) {
-                return node.parent && node.parent.kind === 224 /* ExpressionWithTypeArguments */ && node.parent.parent && node.parent.parent.kind === 287 /* HeritageClause */;
+                return node.parent && node.parent.kind === 226 /* ExpressionWithTypeArguments */ && node.parent.parent && node.parent.parent.kind === 289 /* HeritageClause */;
             }
             // defined here to avoid outer scope pollution
             function getTypeReferenceDirectivesForEntityName(node) {
@@ -81530,7 +83083,7 @@
                 // qualified names can only be used as types\namespaces
                 // identifiers are treated as values only if they appear in type queries
                 var meaning = 788968 /* Type */ | 1920 /* Namespace */;
-                if ((node.kind === 78 /* Identifier */ && isInTypeQuery(node)) || (node.kind === 202 /* PropertyAccessExpression */ && !isInHeritageClause(node))) {
+                if ((node.kind === 79 /* Identifier */ && isInTypeQuery(node)) || (node.kind === 204 /* PropertyAccessExpression */ && !isInHeritageClause(node))) {
                     meaning = 111551 /* Value */ | 1048576 /* ExportValue */;
                 }
                 var symbol = resolveEntityName(node, meaning, /*ignoreErrors*/ true);
@@ -81578,7 +83131,7 @@
                         break;
                     }
                 }
-                if (current.valueDeclaration && current.valueDeclaration.kind === 298 /* SourceFile */ && current.flags & 512 /* ValueModule */) {
+                if (current.valueDeclaration && current.valueDeclaration.kind === 300 /* SourceFile */ && current.flags & 512 /* ValueModule */) {
                     return false;
                 }
                 // check that at least one declaration of top level symbol originates from type declaration file
@@ -81606,12 +83159,12 @@
             }
         }
         function getExternalModuleFileFromDeclaration(declaration) {
-            var specifier = declaration.kind === 257 /* ModuleDeclaration */ ? ts.tryCast(declaration.name, ts.isStringLiteral) : ts.getExternalModuleName(declaration);
+            var specifier = declaration.kind === 259 /* ModuleDeclaration */ ? ts.tryCast(declaration.name, ts.isStringLiteral) : ts.getExternalModuleName(declaration);
             var moduleSymbol = resolveExternalModuleNameWorker(specifier, specifier, /*moduleNotFoundError*/ undefined); // TODO: GH#18217
             if (!moduleSymbol) {
                 return undefined;
             }
-            return ts.getDeclarationOfKind(moduleSymbol, 298 /* SourceFile */);
+            return ts.getDeclarationOfKind(moduleSymbol, 300 /* SourceFile */);
         }
         function initializeTypeChecker() {
             // Bind all source files and propagate errors
@@ -81697,7 +83250,7 @@
             autoArrayType = createArrayType(autoType);
             if (autoArrayType === emptyObjectType) {
                 // autoArrayType is used as a marker, so even if global Array type is not defined, it needs to be a unique type
-                autoArrayType = createAnonymousType(undefined, emptySymbols, ts.emptyArray, ts.emptyArray, undefined, undefined);
+                autoArrayType = createAnonymousType(undefined, emptySymbols, ts.emptyArray, ts.emptyArray, ts.emptyArray);
             }
             globalReadonlyArrayType = getGlobalTypeOrUndefined("ReadonlyArray", /*arity*/ 1) || globalArrayType;
             anyReadonlyArrayType = globalReadonlyArrayType ? createTypeFromGenericGlobalType(globalReadonlyArrayType, [anyType]) : anyArrayType;
@@ -81765,6 +83318,11 @@
                                         error(location, ts.Diagnostics.This_syntax_requires_an_imported_helper_named_1_with_2_parameters_which_is_not_compatible_with_the_one_in_0_Consider_upgrading_your_version_of_0, ts.externalHelpersModuleNameText, name, 5);
                                     }
                                 }
+                                else if (helper & 1024 /* SpreadArray */) {
+                                    if (!ts.some(getSignaturesOfSymbol(symbol), function (signature) { return getParameterCount(signature) > 2; })) {
+                                        error(location, ts.Diagnostics.This_syntax_requires_an_imported_helper_named_1_with_2_parameters_which_is_not_compatible_with_the_one_in_0_Consider_upgrading_your_version_of_0, ts.externalHelpersModuleNameText, name, 3);
+                                    }
+                                }
                             }
                         }
                     }
@@ -81814,14 +83372,14 @@
                 return false;
             }
             if (!ts.nodeCanBeDecorated(node, node.parent, node.parent.parent)) {
-                if (node.kind === 166 /* MethodDeclaration */ && !ts.nodeIsPresent(node.body)) {
+                if (node.kind === 167 /* MethodDeclaration */ && !ts.nodeIsPresent(node.body)) {
                     return grammarErrorOnFirstToken(node, ts.Diagnostics.A_decorator_can_only_decorate_a_method_implementation_not_an_overload);
                 }
                 else {
                     return grammarErrorOnFirstToken(node, ts.Diagnostics.Decorators_are_not_valid_here);
                 }
             }
-            else if (node.kind === 168 /* GetAccessor */ || node.kind === 169 /* SetAccessor */) {
+            else if (node.kind === 170 /* GetAccessor */ || node.kind === 171 /* SetAccessor */) {
                 var accessors = ts.getAllAccessorDeclarations(node.parent.members, node);
                 if (accessors.firstAccessor.decorators && node === accessors.secondAccessor) {
                     return grammarErrorOnFirstToken(node, ts.Diagnostics.Decorators_cannot_be_applied_to_multiple_get_Slashset_accessors_of_the_same_name);
@@ -81838,21 +83396,21 @@
             var flags = 0 /* None */;
             for (var _i = 0, _a = node.modifiers; _i < _a.length; _i++) {
                 var modifier = _a[_i];
-                if (modifier.kind !== 142 /* ReadonlyKeyword */) {
-                    if (node.kind === 163 /* PropertySignature */ || node.kind === 165 /* MethodSignature */) {
+                if (modifier.kind !== 143 /* ReadonlyKeyword */) {
+                    if (node.kind === 164 /* PropertySignature */ || node.kind === 166 /* MethodSignature */) {
                         return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_type_member, ts.tokenToString(modifier.kind));
                     }
-                    if (node.kind === 172 /* IndexSignature */ && (modifier.kind !== 123 /* StaticKeyword */ || !ts.isClassLike(node.parent))) {
+                    if (node.kind === 174 /* IndexSignature */ && (modifier.kind !== 124 /* StaticKeyword */ || !ts.isClassLike(node.parent))) {
                         return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_an_index_signature, ts.tokenToString(modifier.kind));
                     }
                 }
                 switch (modifier.kind) {
-                    case 84 /* ConstKeyword */:
-                        if (node.kind !== 256 /* EnumDeclaration */) {
-                            return grammarErrorOnNode(node, ts.Diagnostics.A_class_member_cannot_have_the_0_keyword, ts.tokenToString(84 /* ConstKeyword */));
+                    case 85 /* ConstKeyword */:
+                        if (node.kind !== 258 /* EnumDeclaration */) {
+                            return grammarErrorOnNode(node, ts.Diagnostics.A_class_member_cannot_have_the_0_keyword, ts.tokenToString(85 /* ConstKeyword */));
                         }
                         break;
-                    case 156 /* OverrideKeyword */:
+                    case 157 /* OverrideKeyword */:
                         // If node.kind === SyntaxKind.Parameter, checkParameter reports an error if it's not a parameter property.
                         if (flags & 16384 /* Override */) {
                             return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_already_seen, "override");
@@ -81869,9 +83427,9 @@
                         flags |= 16384 /* Override */;
                         lastOverride = modifier;
                         break;
-                    case 122 /* PublicKeyword */:
-                    case 121 /* ProtectedKeyword */:
-                    case 120 /* PrivateKeyword */:
+                    case 123 /* PublicKeyword */:
+                    case 122 /* ProtectedKeyword */:
+                    case 121 /* PrivateKeyword */:
                         var text = visibilityToString(ts.modifierToFlag(modifier.kind));
                         if (flags & 28 /* AccessibilityModifier */) {
                             return grammarErrorOnNode(modifier, ts.Diagnostics.Accessibility_modifier_already_seen);
@@ -81888,11 +83446,11 @@
                         else if (flags & 256 /* Async */) {
                             return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_must_precede_1_modifier, text, "async");
                         }
-                        else if (node.parent.kind === 258 /* ModuleBlock */ || node.parent.kind === 298 /* SourceFile */) {
+                        else if (node.parent.kind === 260 /* ModuleBlock */ || node.parent.kind === 300 /* SourceFile */) {
                             return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_module_or_namespace_element, text);
                         }
                         else if (flags & 128 /* Abstract */) {
-                            if (modifier.kind === 120 /* PrivateKeyword */) {
+                            if (modifier.kind === 121 /* PrivateKeyword */) {
                                 return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_be_used_with_1_modifier, text, "abstract");
                             }
                             else {
@@ -81904,7 +83462,7 @@
                         }
                         flags |= ts.modifierToFlag(modifier.kind);
                         break;
-                    case 123 /* StaticKeyword */:
+                    case 124 /* StaticKeyword */:
                         if (flags & 32 /* Static */) {
                             return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_already_seen, "static");
                         }
@@ -81914,10 +83472,10 @@
                         else if (flags & 256 /* Async */) {
                             return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_must_precede_1_modifier, "static", "async");
                         }
-                        else if (node.parent.kind === 258 /* ModuleBlock */ || node.parent.kind === 298 /* SourceFile */) {
+                        else if (node.parent.kind === 260 /* ModuleBlock */ || node.parent.kind === 300 /* SourceFile */) {
                             return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_module_or_namespace_element, "static");
                         }
-                        else if (node.kind === 161 /* Parameter */) {
+                        else if (node.kind === 162 /* Parameter */) {
                             return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_parameter, "static");
                         }
                         else if (flags & 128 /* Abstract */) {
@@ -81929,18 +83487,18 @@
                         flags |= 32 /* Static */;
                         lastStatic = modifier;
                         break;
-                    case 142 /* ReadonlyKeyword */:
+                    case 143 /* ReadonlyKeyword */:
                         if (flags & 64 /* Readonly */) {
                             return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_already_seen, "readonly");
                         }
-                        else if (node.kind !== 164 /* PropertyDeclaration */ && node.kind !== 163 /* PropertySignature */ && node.kind !== 172 /* IndexSignature */ && node.kind !== 161 /* Parameter */) {
+                        else if (node.kind !== 165 /* PropertyDeclaration */ && node.kind !== 164 /* PropertySignature */ && node.kind !== 174 /* IndexSignature */ && node.kind !== 162 /* Parameter */) {
                             // If node.kind === SyntaxKind.Parameter, checkParameter reports an error if it's not a parameter property.
                             return grammarErrorOnNode(modifier, ts.Diagnostics.readonly_modifier_can_only_appear_on_a_property_declaration_or_index_signature);
                         }
                         flags |= 64 /* Readonly */;
                         lastReadonly = modifier;
                         break;
-                    case 92 /* ExportKeyword */:
+                    case 93 /* ExportKeyword */:
                         if (flags & 1 /* Export */) {
                             return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_already_seen, "export");
                         }
@@ -81956,19 +83514,22 @@
                         else if (ts.isClassLike(node.parent)) {
                             return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_class_elements_of_this_kind, "export");
                         }
-                        else if (node.kind === 161 /* Parameter */) {
+                        else if (node.kind === 162 /* Parameter */) {
                             return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_parameter, "export");
                         }
                         flags |= 1 /* Export */;
                         break;
-                    case 87 /* DefaultKeyword */:
-                        var container = node.parent.kind === 298 /* SourceFile */ ? node.parent : node.parent.parent;
-                        if (container.kind === 257 /* ModuleDeclaration */ && !ts.isAmbientModule(container)) {
+                    case 88 /* DefaultKeyword */:
+                        var container = node.parent.kind === 300 /* SourceFile */ ? node.parent : node.parent.parent;
+                        if (container.kind === 259 /* ModuleDeclaration */ && !ts.isAmbientModule(container)) {
                             return grammarErrorOnNode(modifier, ts.Diagnostics.A_default_export_can_only_be_used_in_an_ECMAScript_style_module);
                         }
+                        else if (!(flags & 1 /* Export */)) {
+                            return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_must_precede_1_modifier, "export", "default");
+                        }
                         flags |= 512 /* Default */;
                         break;
-                    case 133 /* DeclareKeyword */:
+                    case 134 /* DeclareKeyword */:
                         if (flags & 2 /* Ambient */) {
                             return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_already_seen, "declare");
                         }
@@ -81981,10 +83542,10 @@
                         else if (ts.isClassLike(node.parent) && !ts.isPropertyDeclaration(node)) {
                             return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_class_elements_of_this_kind, "declare");
                         }
-                        else if (node.kind === 161 /* Parameter */) {
+                        else if (node.kind === 162 /* Parameter */) {
                             return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_parameter, "declare");
                         }
-                        else if ((node.parent.flags & 8388608 /* Ambient */) && node.parent.kind === 258 /* ModuleBlock */) {
+                        else if ((node.parent.flags & 8388608 /* Ambient */) && node.parent.kind === 260 /* ModuleBlock */) {
                             return grammarErrorOnNode(modifier, ts.Diagnostics.A_declare_modifier_cannot_be_used_in_an_already_ambient_context);
                         }
                         else if (ts.isPrivateIdentifierClassElementDeclaration(node)) {
@@ -81993,19 +83554,19 @@
                         flags |= 2 /* Ambient */;
                         lastDeclare = modifier;
                         break;
-                    case 125 /* AbstractKeyword */:
+                    case 126 /* AbstractKeyword */:
                         if (flags & 128 /* Abstract */) {
                             return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_already_seen, "abstract");
                         }
-                        if (node.kind !== 253 /* ClassDeclaration */ &&
-                            node.kind !== 176 /* ConstructorType */) {
-                            if (node.kind !== 166 /* MethodDeclaration */ &&
-                                node.kind !== 164 /* PropertyDeclaration */ &&
-                                node.kind !== 168 /* GetAccessor */ &&
-                                node.kind !== 169 /* SetAccessor */) {
+                        if (node.kind !== 255 /* ClassDeclaration */ &&
+                            node.kind !== 178 /* ConstructorType */) {
+                            if (node.kind !== 167 /* MethodDeclaration */ &&
+                                node.kind !== 165 /* PropertyDeclaration */ &&
+                                node.kind !== 170 /* GetAccessor */ &&
+                                node.kind !== 171 /* SetAccessor */) {
                                 return grammarErrorOnNode(modifier, ts.Diagnostics.abstract_modifier_can_only_appear_on_a_class_method_or_property_declaration);
                             }
-                            if (!(node.parent.kind === 253 /* ClassDeclaration */ && ts.hasSyntacticModifier(node.parent, 128 /* Abstract */))) {
+                            if (!(node.parent.kind === 255 /* ClassDeclaration */ && ts.hasSyntacticModifier(node.parent, 128 /* Abstract */))) {
                                 return grammarErrorOnNode(modifier, ts.Diagnostics.Abstract_methods_can_only_appear_within_an_abstract_class);
                             }
                             if (flags & 32 /* Static */) {
@@ -82021,19 +83582,19 @@
                                 return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_must_precede_1_modifier, "abstract", "override");
                             }
                         }
-                        if (ts.isNamedDeclaration(node) && node.name.kind === 79 /* PrivateIdentifier */) {
+                        if (ts.isNamedDeclaration(node) && node.name.kind === 80 /* PrivateIdentifier */) {
                             return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_be_used_with_a_private_identifier, "abstract");
                         }
                         flags |= 128 /* Abstract */;
                         break;
-                    case 129 /* AsyncKeyword */:
+                    case 130 /* AsyncKeyword */:
                         if (flags & 256 /* Async */) {
                             return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_already_seen, "async");
                         }
                         else if (flags & 2 /* Ambient */ || node.parent.flags & 8388608 /* Ambient */) {
                             return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_be_used_in_an_ambient_context, "async");
                         }
-                        else if (node.kind === 161 /* Parameter */) {
+                        else if (node.kind === 162 /* Parameter */) {
                             return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_parameter, "async");
                         }
                         if (flags & 128 /* Abstract */) {
@@ -82044,7 +83605,7 @@
                         break;
                 }
             }
-            if (node.kind === 167 /* Constructor */) {
+            if (node.kind === 169 /* Constructor */) {
                 if (flags & 32 /* Static */) {
                     return grammarErrorOnNode(lastStatic, ts.Diagnostics._0_modifier_cannot_appear_on_a_constructor_declaration, "static");
                 }
@@ -82062,13 +83623,13 @@
                 }
                 return false;
             }
-            else if ((node.kind === 262 /* ImportDeclaration */ || node.kind === 261 /* ImportEqualsDeclaration */) && flags & 2 /* Ambient */) {
+            else if ((node.kind === 264 /* ImportDeclaration */ || node.kind === 263 /* ImportEqualsDeclaration */) && flags & 2 /* Ambient */) {
                 return grammarErrorOnNode(lastDeclare, ts.Diagnostics.A_0_modifier_cannot_be_used_with_an_import_declaration, "declare");
             }
-            else if (node.kind === 161 /* Parameter */ && (flags & 16476 /* ParameterPropertyModifier */) && ts.isBindingPattern(node.name)) {
+            else if (node.kind === 162 /* Parameter */ && (flags & 16476 /* ParameterPropertyModifier */) && ts.isBindingPattern(node.name)) {
                 return grammarErrorOnNode(node, ts.Diagnostics.A_parameter_property_may_not_be_declared_using_a_binding_pattern);
             }
-            else if (node.kind === 161 /* Parameter */ && (flags & 16476 /* ParameterPropertyModifier */) && node.dotDotDotToken) {
+            else if (node.kind === 162 /* Parameter */ && (flags & 16476 /* ParameterPropertyModifier */) && node.dotDotDotToken) {
                 return grammarErrorOnNode(node, ts.Diagnostics.A_parameter_property_cannot_be_declared_using_a_rest_parameter);
             }
             if (flags & 256 /* Async */) {
@@ -82089,39 +83650,40 @@
         }
         function shouldReportBadModifier(node) {
             switch (node.kind) {
-                case 168 /* GetAccessor */:
-                case 169 /* SetAccessor */:
-                case 167 /* Constructor */:
-                case 164 /* PropertyDeclaration */:
-                case 163 /* PropertySignature */:
-                case 166 /* MethodDeclaration */:
-                case 165 /* MethodSignature */:
-                case 172 /* IndexSignature */:
-                case 257 /* ModuleDeclaration */:
-                case 262 /* ImportDeclaration */:
-                case 261 /* ImportEqualsDeclaration */:
-                case 268 /* ExportDeclaration */:
-                case 267 /* ExportAssignment */:
-                case 209 /* FunctionExpression */:
-                case 210 /* ArrowFunction */:
-                case 161 /* Parameter */:
+                case 170 /* GetAccessor */:
+                case 171 /* SetAccessor */:
+                case 169 /* Constructor */:
+                case 165 /* PropertyDeclaration */:
+                case 164 /* PropertySignature */:
+                case 167 /* MethodDeclaration */:
+                case 166 /* MethodSignature */:
+                case 174 /* IndexSignature */:
+                case 259 /* ModuleDeclaration */:
+                case 264 /* ImportDeclaration */:
+                case 263 /* ImportEqualsDeclaration */:
+                case 270 /* ExportDeclaration */:
+                case 269 /* ExportAssignment */:
+                case 211 /* FunctionExpression */:
+                case 212 /* ArrowFunction */:
+                case 162 /* Parameter */:
                     return false;
                 default:
-                    if (node.parent.kind === 258 /* ModuleBlock */ || node.parent.kind === 298 /* SourceFile */) {
+                    if (node.parent.kind === 260 /* ModuleBlock */ || node.parent.kind === 300 /* SourceFile */) {
                         return false;
                     }
                     switch (node.kind) {
-                        case 252 /* FunctionDeclaration */:
-                            return nodeHasAnyModifiersExcept(node, 129 /* AsyncKeyword */);
-                        case 253 /* ClassDeclaration */:
-                        case 176 /* ConstructorType */:
-                            return nodeHasAnyModifiersExcept(node, 125 /* AbstractKeyword */);
-                        case 254 /* InterfaceDeclaration */:
-                        case 233 /* VariableStatement */:
-                        case 255 /* TypeAliasDeclaration */:
+                        case 254 /* FunctionDeclaration */:
+                            return nodeHasAnyModifiersExcept(node, 130 /* AsyncKeyword */);
+                        case 255 /* ClassDeclaration */:
+                        case 178 /* ConstructorType */:
+                            return nodeHasAnyModifiersExcept(node, 126 /* AbstractKeyword */);
+                        case 256 /* InterfaceDeclaration */:
+                        case 235 /* VariableStatement */:
+                        case 257 /* TypeAliasDeclaration */:
+                        case 168 /* ClassStaticBlockDeclaration */:
                             return true;
-                        case 256 /* EnumDeclaration */:
-                            return nodeHasAnyModifiersExcept(node, 84 /* ConstKeyword */);
+                        case 258 /* EnumDeclaration */:
+                            return nodeHasAnyModifiersExcept(node, 85 /* ConstKeyword */);
                         default:
                             ts.Debug.fail();
                     }
@@ -82132,10 +83694,10 @@
         }
         function checkGrammarAsyncModifier(node, asyncModifier) {
             switch (node.kind) {
-                case 166 /* MethodDeclaration */:
-                case 252 /* FunctionDeclaration */:
-                case 209 /* FunctionExpression */:
-                case 210 /* ArrowFunction */:
+                case 167 /* MethodDeclaration */:
+                case 254 /* FunctionDeclaration */:
+                case 211 /* FunctionExpression */:
+                case 212 /* ArrowFunction */:
                     return false;
             }
             return grammarErrorOnNode(asyncModifier, ts.Diagnostics._0_modifier_cannot_be_used_here, "async");
@@ -82198,7 +83760,7 @@
                             ts.addRelatedInfo(error(parameter, ts.Diagnostics.This_parameter_is_not_allowed_with_use_strict_directive), ts.createDiagnosticForNode(useStrictDirective_1, ts.Diagnostics.use_strict_directive_used_here));
                         });
                         var diagnostics_2 = nonSimpleParameters.map(function (parameter, index) { return (index === 0 ? ts.createDiagnosticForNode(parameter, ts.Diagnostics.Non_simple_parameter_declared_here) : ts.createDiagnosticForNode(parameter, ts.Diagnostics.and_here)); });
-                        ts.addRelatedInfo.apply(void 0, __spreadArray([error(useStrictDirective_1, ts.Diagnostics.use_strict_directive_cannot_be_used_with_non_simple_parameter_list)], diagnostics_2));
+                        ts.addRelatedInfo.apply(void 0, __spreadArray([error(useStrictDirective_1, ts.Diagnostics.use_strict_directive_cannot_be_used_with_non_simple_parameter_list)], diagnostics_2, false));
                         return true;
                     }
                 }
@@ -82254,15 +83816,12 @@
             if (!parameter.type) {
                 return grammarErrorOnNode(parameter.name, ts.Diagnostics.An_index_signature_parameter_must_have_a_type_annotation);
             }
-            if (parameter.type.kind !== 147 /* StringKeyword */ && parameter.type.kind !== 144 /* NumberKeyword */) {
-                var type = getTypeFromTypeNode(parameter.type);
-                if (type.flags & 4 /* String */ || type.flags & 8 /* Number */) {
-                    return grammarErrorOnNode(parameter.name, ts.Diagnostics.An_index_signature_parameter_type_cannot_be_a_type_alias_Consider_writing_0_Colon_1_Colon_2_instead, ts.getTextOfNode(parameter.name), typeToString(type), typeToString(node.type ? getTypeFromTypeNode(node.type) : anyType));
-                }
-                if (type.flags & 1048576 /* Union */ && allTypesAssignableToKind(type, 384 /* StringOrNumberLiteral */, /*strict*/ true)) {
-                    return grammarErrorOnNode(parameter.name, ts.Diagnostics.An_index_signature_parameter_type_cannot_be_a_union_type_Consider_using_a_mapped_object_type_instead);
-                }
-                return grammarErrorOnNode(parameter.name, ts.Diagnostics.An_index_signature_parameter_type_must_be_either_string_or_number);
+            var type = getTypeFromTypeNode(parameter.type);
+            if (someType(type, function (t) { return !!(t.flags & 8576 /* StringOrNumberLiteralOrUnique */); }) || isGenericType(type)) {
+                return grammarErrorOnNode(parameter.name, ts.Diagnostics.An_index_signature_parameter_type_cannot_be_a_literal_type_or_generic_type_Consider_using_a_mapped_object_type_instead);
+            }
+            if (!everyType(type, isValidIndexKeyType)) {
+                return grammarErrorOnNode(parameter.name, ts.Diagnostics.An_index_signature_parameter_type_must_be_string_number_symbol_or_a_template_literal_type);
             }
             if (!node.type) {
                 return grammarErrorOnNode(node, ts.Diagnostics.An_index_signature_must_have_a_type_annotation);
@@ -82296,7 +83855,7 @@
             if (args) {
                 for (var _i = 0, args_4 = args; _i < args_4.length; _i++) {
                     var arg = args_4[_i];
-                    if (arg.kind === 223 /* OmittedExpression */) {
+                    if (arg.kind === 225 /* OmittedExpression */) {
                         return grammarErrorAtPos(arg, arg.pos, 0, ts.Diagnostics.Argument_expression_expected);
                     }
                 }
@@ -82326,7 +83885,7 @@
             if (!checkGrammarDecoratorsAndModifiers(node) && node.heritageClauses) {
                 for (var _i = 0, _a = node.heritageClauses; _i < _a.length; _i++) {
                     var heritageClause = _a[_i];
-                    if (heritageClause.token === 93 /* ExtendsKeyword */) {
+                    if (heritageClause.token === 94 /* ExtendsKeyword */) {
                         if (seenExtendsClause) {
                             return grammarErrorOnFirstToken(heritageClause, ts.Diagnostics.extends_clause_already_seen);
                         }
@@ -82339,7 +83898,7 @@
                         seenExtendsClause = true;
                     }
                     else {
-                        ts.Debug.assert(heritageClause.token === 116 /* ImplementsKeyword */);
+                        ts.Debug.assert(heritageClause.token === 117 /* ImplementsKeyword */);
                         if (seenImplementsClause) {
                             return grammarErrorOnFirstToken(heritageClause, ts.Diagnostics.implements_clause_already_seen);
                         }
@@ -82355,14 +83914,14 @@
             if (node.heritageClauses) {
                 for (var _i = 0, _a = node.heritageClauses; _i < _a.length; _i++) {
                     var heritageClause = _a[_i];
-                    if (heritageClause.token === 93 /* ExtendsKeyword */) {
+                    if (heritageClause.token === 94 /* ExtendsKeyword */) {
                         if (seenExtendsClause) {
                             return grammarErrorOnFirstToken(heritageClause, ts.Diagnostics.extends_clause_already_seen);
                         }
                         seenExtendsClause = true;
                     }
                     else {
-                        ts.Debug.assert(heritageClause.token === 116 /* ImplementsKeyword */);
+                        ts.Debug.assert(heritageClause.token === 117 /* ImplementsKeyword */);
                         return grammarErrorOnFirstToken(heritageClause, ts.Diagnostics.Interface_declaration_cannot_have_implements_clause);
                     }
                     // Grammar checking heritageClause inside class declaration
@@ -82373,20 +83932,20 @@
         }
         function checkGrammarComputedPropertyName(node) {
             // If node is not a computedPropertyName, just skip the grammar checking
-            if (node.kind !== 159 /* ComputedPropertyName */) {
+            if (node.kind !== 160 /* ComputedPropertyName */) {
                 return false;
             }
             var computedPropertyName = node;
-            if (computedPropertyName.expression.kind === 217 /* BinaryExpression */ && computedPropertyName.expression.operatorToken.kind === 27 /* CommaToken */) {
+            if (computedPropertyName.expression.kind === 219 /* BinaryExpression */ && computedPropertyName.expression.operatorToken.kind === 27 /* CommaToken */) {
                 return grammarErrorOnNode(computedPropertyName.expression, ts.Diagnostics.A_comma_expression_is_not_allowed_in_a_computed_property_name);
             }
             return false;
         }
         function checkGrammarForGenerator(node) {
             if (node.asteriskToken) {
-                ts.Debug.assert(node.kind === 252 /* FunctionDeclaration */ ||
-                    node.kind === 209 /* FunctionExpression */ ||
-                    node.kind === 166 /* MethodDeclaration */);
+                ts.Debug.assert(node.kind === 254 /* FunctionDeclaration */ ||
+                    node.kind === 211 /* FunctionExpression */ ||
+                    node.kind === 167 /* MethodDeclaration */);
                 if (node.flags & 8388608 /* Ambient */) {
                     return grammarErrorOnNode(node.asteriskToken, ts.Diagnostics.Generators_are_not_allowed_in_an_ambient_context);
                 }
@@ -82405,7 +83964,7 @@
             var seen = new ts.Map();
             for (var _i = 0, _a = node.properties; _i < _a.length; _i++) {
                 var prop = _a[_i];
-                if (prop.kind === 291 /* SpreadAssignment */) {
+                if (prop.kind === 293 /* SpreadAssignment */) {
                     if (inDestructuring) {
                         // a rest property cannot be destructured any further
                         var expression = ts.skipParentheses(prop.expression);
@@ -82416,16 +83975,16 @@
                     continue;
                 }
                 var name = prop.name;
-                if (name.kind === 159 /* ComputedPropertyName */) {
+                if (name.kind === 160 /* ComputedPropertyName */) {
                     // If the name is not a ComputedPropertyName, the grammar checking will skip it
                     checkGrammarComputedPropertyName(name);
                 }
-                if (prop.kind === 290 /* ShorthandPropertyAssignment */ && !inDestructuring && prop.objectAssignmentInitializer) {
+                if (prop.kind === 292 /* ShorthandPropertyAssignment */ && !inDestructuring && prop.objectAssignmentInitializer) {
                     // having objectAssignmentInitializer is only valid in ObjectAssignmentPattern
                     // outside of destructuring it is a syntax error
                     return grammarErrorOnNode(prop.equalsToken, ts.Diagnostics.Did_you_mean_to_use_a_Colon_An_can_only_follow_a_property_name_when_the_containing_object_literal_is_part_of_a_destructuring_pattern);
                 }
-                if (name.kind === 79 /* PrivateIdentifier */) {
+                if (name.kind === 80 /* PrivateIdentifier */) {
                     grammarErrorOnNode(name, ts.Diagnostics.Private_identifiers_are_not_allowed_outside_class_bodies);
                 }
                 // Modifiers are never allowed on properties except for 'async' on a method declaration
@@ -82433,7 +83992,7 @@
                     // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion
                     for (var _b = 0, _c = prop.modifiers; _b < _c.length; _b++) { // TODO: GH#19955
                         var mod = _c[_b];
-                        if (mod.kind !== 129 /* AsyncKeyword */ || prop.kind !== 166 /* MethodDeclaration */) {
+                        if (mod.kind !== 130 /* AsyncKeyword */ || prop.kind !== 167 /* MethodDeclaration */) {
                             grammarErrorOnNode(mod, ts.Diagnostics._0_modifier_cannot_be_used_here, ts.getTextOfNode(mod));
                         }
                     }
@@ -82448,10 +84007,10 @@
                 // and either both previous and propId.descriptor have[[Get]] fields or both previous and propId.descriptor have[[Set]] fields
                 var currentKind = void 0;
                 switch (prop.kind) {
-                    case 290 /* ShorthandPropertyAssignment */:
+                    case 292 /* ShorthandPropertyAssignment */:
                         checkGrammarForInvalidExclamationToken(prop.exclamationToken, ts.Diagnostics.A_definite_assignment_assertion_is_not_permitted_in_this_context);
                     // falls through
-                    case 289 /* PropertyAssignment */:
+                    case 291 /* PropertyAssignment */:
                         // Grammar checking for computedPropertyName and shorthandPropertyAssignment
                         checkGrammarForInvalidQuestionMark(prop.questionToken, ts.Diagnostics.An_object_member_cannot_be_declared_optional);
                         if (name.kind === 8 /* NumericLiteral */) {
@@ -82459,13 +84018,13 @@
                         }
                         currentKind = 4 /* PropertyAssignment */;
                         break;
-                    case 166 /* MethodDeclaration */:
+                    case 167 /* MethodDeclaration */:
                         currentKind = 8 /* Method */;
                         break;
-                    case 168 /* GetAccessor */:
+                    case 170 /* GetAccessor */:
                         currentKind = 1 /* GetAccessor */;
                         break;
-                    case 169 /* SetAccessor */:
+                    case 171 /* SetAccessor */:
                         currentKind = 2 /* SetAccessor */;
                         break;
                     default:
@@ -82505,7 +84064,7 @@
             var seen = new ts.Map();
             for (var _i = 0, _a = node.attributes.properties; _i < _a.length; _i++) {
                 var attr = _a[_i];
-                if (attr.kind === 283 /* JsxSpreadAttribute */) {
+                if (attr.kind === 285 /* JsxSpreadAttribute */) {
                     continue;
                 }
                 var name = attr.name, initializer = attr.initializer;
@@ -82515,7 +84074,7 @@
                 else {
                     return grammarErrorOnNode(name, ts.Diagnostics.JSX_elements_cannot_have_multiple_attributes_with_the_same_name);
                 }
-                if (initializer && initializer.kind === 284 /* JsxExpression */ && !initializer.expression) {
+                if (initializer && initializer.kind === 286 /* JsxExpression */ && !initializer.expression) {
                     return grammarErrorOnNode(initializer, ts.Diagnostics.JSX_attributes_must_only_be_assigned_a_non_empty_expression);
                 }
             }
@@ -82550,7 +84109,7 @@
             if (checkGrammarStatementInAmbientContext(forInOrOfStatement)) {
                 return true;
             }
-            if (forInOrOfStatement.kind === 240 /* ForOfStatement */ && forInOrOfStatement.awaitModifier) {
+            if (forInOrOfStatement.kind === 242 /* ForOfStatement */ && forInOrOfStatement.awaitModifier) {
                 if (!(forInOrOfStatement.flags & 32768 /* AwaitContext */)) {
                     var sourceFile = ts.getSourceFileOfNode(forInOrOfStatement);
                     if (ts.isInTopLevelContext(forInOrOfStatement)) {
@@ -82568,7 +84127,7 @@
                         if (!hasParseDiagnostics(sourceFile)) {
                             var diagnostic = ts.createDiagnosticForNode(forInOrOfStatement.awaitModifier, ts.Diagnostics.for_await_loops_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules);
                             var func = ts.getContainingFunction(forInOrOfStatement);
-                            if (func && func.kind !== 167 /* Constructor */) {
+                            if (func && func.kind !== 169 /* Constructor */) {
                                 ts.Debug.assert((ts.getFunctionFlags(func) & 2 /* Async */) === 0, "Enclosing function should never be an async function.");
                                 var relatedInfo = ts.createDiagnosticForNode(func, ts.Diagnostics.Did_you_mean_to_mark_this_function_as_async);
                                 ts.addRelatedInfo(diagnostic, relatedInfo);
@@ -82580,7 +84139,12 @@
                     return false;
                 }
             }
-            if (forInOrOfStatement.initializer.kind === 251 /* VariableDeclarationList */) {
+            if (ts.isForOfStatement(forInOrOfStatement) && !(forInOrOfStatement.flags & 32768 /* AwaitContext */) &&
+                ts.isIdentifier(forInOrOfStatement.initializer) && forInOrOfStatement.initializer.escapedText === "async") {
+                grammarErrorOnNode(forInOrOfStatement.initializer, ts.Diagnostics.The_left_hand_side_of_a_for_of_statement_may_not_be_async);
+                return false;
+            }
+            if (forInOrOfStatement.initializer.kind === 253 /* VariableDeclarationList */) {
                 var variableList = forInOrOfStatement.initializer;
                 if (!checkGrammarVariableDeclarationList(variableList)) {
                     var declarations = variableList.declarations;
@@ -82595,20 +84159,20 @@
                         return false;
                     }
                     if (declarations.length > 1) {
-                        var diagnostic = forInOrOfStatement.kind === 239 /* ForInStatement */
+                        var diagnostic = forInOrOfStatement.kind === 241 /* ForInStatement */
                             ? ts.Diagnostics.Only_a_single_variable_declaration_is_allowed_in_a_for_in_statement
                             : ts.Diagnostics.Only_a_single_variable_declaration_is_allowed_in_a_for_of_statement;
                         return grammarErrorOnFirstToken(variableList.declarations[1], diagnostic);
                     }
                     var firstDeclaration = declarations[0];
                     if (firstDeclaration.initializer) {
-                        var diagnostic = forInOrOfStatement.kind === 239 /* ForInStatement */
+                        var diagnostic = forInOrOfStatement.kind === 241 /* ForInStatement */
                             ? ts.Diagnostics.The_variable_declaration_of_a_for_in_statement_cannot_have_an_initializer
                             : ts.Diagnostics.The_variable_declaration_of_a_for_of_statement_cannot_have_an_initializer;
                         return grammarErrorOnNode(firstDeclaration.name, diagnostic);
                     }
                     if (firstDeclaration.type) {
-                        var diagnostic = forInOrOfStatement.kind === 239 /* ForInStatement */
+                        var diagnostic = forInOrOfStatement.kind === 241 /* ForInStatement */
                             ? ts.Diagnostics.The_left_hand_side_of_a_for_in_statement_cannot_use_a_type_annotation
                             : ts.Diagnostics.The_left_hand_side_of_a_for_of_statement_cannot_use_a_type_annotation;
                         return grammarErrorOnNode(firstDeclaration, diagnostic);
@@ -82618,7 +84182,7 @@
             return false;
         }
         function checkGrammarAccessor(accessor) {
-            if (!(accessor.flags & 8388608 /* Ambient */) && (accessor.parent.kind !== 178 /* TypeLiteral */) && (accessor.parent.kind !== 254 /* InterfaceDeclaration */)) {
+            if (!(accessor.flags & 8388608 /* Ambient */) && (accessor.parent.kind !== 180 /* TypeLiteral */) && (accessor.parent.kind !== 256 /* InterfaceDeclaration */)) {
                 if (languageVersion < 1 /* ES5 */) {
                     return grammarErrorOnNode(accessor.name, ts.Diagnostics.Accessors_are_only_available_when_targeting_ECMAScript_5_and_higher);
                 }
@@ -82633,7 +84197,7 @@
                 if (ts.hasSyntacticModifier(accessor, 128 /* Abstract */)) {
                     return grammarErrorOnNode(accessor, ts.Diagnostics.An_abstract_accessor_cannot_have_an_implementation);
                 }
-                if (accessor.parent.kind === 178 /* TypeLiteral */ || accessor.parent.kind === 254 /* InterfaceDeclaration */) {
+                if (accessor.parent.kind === 180 /* TypeLiteral */ || accessor.parent.kind === 256 /* InterfaceDeclaration */) {
                     return grammarErrorOnNode(accessor.body, ts.Diagnostics.An_implementation_cannot_be_declared_in_ambient_contexts);
                 }
             }
@@ -82641,11 +84205,11 @@
                 return grammarErrorOnNode(accessor.name, ts.Diagnostics.An_accessor_cannot_have_type_parameters);
             }
             if (!doesAccessorHaveCorrectParameterCount(accessor)) {
-                return grammarErrorOnNode(accessor.name, accessor.kind === 168 /* GetAccessor */ ?
+                return grammarErrorOnNode(accessor.name, accessor.kind === 170 /* GetAccessor */ ?
                     ts.Diagnostics.A_get_accessor_cannot_have_parameters :
                     ts.Diagnostics.A_set_accessor_must_have_exactly_one_parameter);
             }
-            if (accessor.kind === 169 /* SetAccessor */) {
+            if (accessor.kind === 171 /* SetAccessor */) {
                 if (accessor.type) {
                     return grammarErrorOnNode(accessor.name, ts.Diagnostics.A_set_accessor_cannot_have_a_return_type_annotation);
                 }
@@ -82667,17 +84231,17 @@
          * A set accessor has one parameter or a `this` parameter and one more parameter.
          */
         function doesAccessorHaveCorrectParameterCount(accessor) {
-            return getAccessorThisParameter(accessor) || accessor.parameters.length === (accessor.kind === 168 /* GetAccessor */ ? 0 : 1);
+            return getAccessorThisParameter(accessor) || accessor.parameters.length === (accessor.kind === 170 /* GetAccessor */ ? 0 : 1);
         }
         function getAccessorThisParameter(accessor) {
-            if (accessor.parameters.length === (accessor.kind === 168 /* GetAccessor */ ? 1 : 2)) {
+            if (accessor.parameters.length === (accessor.kind === 170 /* GetAccessor */ ? 1 : 2)) {
                 return ts.getThisParameter(accessor);
             }
         }
         function checkGrammarTypeOperatorNode(node) {
-            if (node.operator === 151 /* UniqueKeyword */) {
-                if (node.type.kind !== 148 /* SymbolKeyword */) {
-                    return grammarErrorOnNode(node.type, ts.Diagnostics._0_expected, ts.tokenToString(148 /* SymbolKeyword */));
+            if (node.operator === 152 /* UniqueKeyword */) {
+                if (node.type.kind !== 149 /* SymbolKeyword */) {
+                    return grammarErrorOnNode(node.type, ts.Diagnostics._0_expected, ts.tokenToString(149 /* SymbolKeyword */));
                 }
                 var parent = ts.walkUpParenthesizedTypes(node.parent);
                 if (ts.isInJSFile(parent) && ts.isJSDocTypeExpression(parent)) {
@@ -82688,9 +84252,9 @@
                     }
                 }
                 switch (parent.kind) {
-                    case 250 /* VariableDeclaration */:
+                    case 252 /* VariableDeclaration */:
                         var decl = parent;
-                        if (decl.name.kind !== 78 /* Identifier */) {
+                        if (decl.name.kind !== 79 /* Identifier */) {
                             return grammarErrorOnNode(node, ts.Diagnostics.unique_symbol_types_may_not_be_used_on_a_variable_declaration_with_a_binding_name);
                         }
                         if (!ts.isVariableDeclarationInVariableStatement(decl)) {
@@ -82700,13 +84264,13 @@
                             return grammarErrorOnNode(parent.name, ts.Diagnostics.A_variable_whose_type_is_a_unique_symbol_type_must_be_const);
                         }
                         break;
-                    case 164 /* PropertyDeclaration */:
-                        if (!ts.hasSyntacticModifier(parent, 32 /* Static */) ||
-                            !ts.hasEffectiveModifier(parent, 64 /* Readonly */)) {
+                    case 165 /* PropertyDeclaration */:
+                        if (!ts.isStatic(parent) ||
+                            !ts.hasEffectiveReadonlyModifier(parent)) {
                             return grammarErrorOnNode(parent.name, ts.Diagnostics.A_property_of_a_class_whose_type_is_a_unique_symbol_type_must_be_both_static_and_readonly);
                         }
                         break;
-                    case 163 /* PropertySignature */:
+                    case 164 /* PropertySignature */:
                         if (!ts.hasSyntacticModifier(parent, 64 /* Readonly */)) {
                             return grammarErrorOnNode(parent.name, ts.Diagnostics.A_property_of_an_interface_or_type_literal_whose_type_is_a_unique_symbol_type_must_be_readonly);
                         }
@@ -82715,9 +84279,9 @@
                         return grammarErrorOnNode(node, ts.Diagnostics.unique_symbol_types_are_not_allowed_here);
                 }
             }
-            else if (node.operator === 142 /* ReadonlyKeyword */) {
-                if (node.type.kind !== 179 /* ArrayType */ && node.type.kind !== 180 /* TupleType */) {
-                    return grammarErrorOnFirstToken(node, ts.Diagnostics.readonly_type_modifier_is_only_permitted_on_array_and_tuple_literal_types, ts.tokenToString(148 /* SymbolKeyword */));
+            else if (node.operator === 143 /* ReadonlyKeyword */) {
+                if (node.type.kind !== 181 /* ArrayType */ && node.type.kind !== 182 /* TupleType */) {
+                    return grammarErrorOnFirstToken(node, ts.Diagnostics.readonly_type_modifier_is_only_permitted_on_array_and_tuple_literal_types, ts.tokenToString(149 /* SymbolKeyword */));
                 }
             }
         }
@@ -82730,10 +84294,10 @@
             if (checkGrammarFunctionLikeDeclaration(node)) {
                 return true;
             }
-            if (node.kind === 166 /* MethodDeclaration */) {
-                if (node.parent.kind === 201 /* ObjectLiteralExpression */) {
+            if (node.kind === 167 /* MethodDeclaration */) {
+                if (node.parent.kind === 203 /* ObjectLiteralExpression */) {
                     // We only disallow modifier on a method declaration if it is a property of object-literal-expression
-                    if (node.modifiers && !(node.modifiers.length === 1 && ts.first(node.modifiers).kind === 129 /* AsyncKeyword */)) {
+                    if (node.modifiers && !(node.modifiers.length === 1 && ts.first(node.modifiers).kind === 130 /* AsyncKeyword */)) {
                         return grammarErrorOnFirstToken(node, ts.Diagnostics.Modifiers_cannot_appear_here);
                     }
                     else if (checkGrammarForInvalidQuestionMark(node.questionToken, ts.Diagnostics.An_object_member_cannot_be_declared_optional)) {
@@ -82762,29 +84326,29 @@
                 if (node.flags & 8388608 /* Ambient */) {
                     return checkGrammarForInvalidDynamicName(node.name, ts.Diagnostics.A_computed_property_name_in_an_ambient_context_must_refer_to_an_expression_whose_type_is_a_literal_type_or_a_unique_symbol_type);
                 }
-                else if (node.kind === 166 /* MethodDeclaration */ && !node.body) {
+                else if (node.kind === 167 /* MethodDeclaration */ && !node.body) {
                     return checkGrammarForInvalidDynamicName(node.name, ts.Diagnostics.A_computed_property_name_in_a_method_overload_must_refer_to_an_expression_whose_type_is_a_literal_type_or_a_unique_symbol_type);
                 }
             }
-            else if (node.parent.kind === 254 /* InterfaceDeclaration */) {
+            else if (node.parent.kind === 256 /* InterfaceDeclaration */) {
                 return checkGrammarForInvalidDynamicName(node.name, ts.Diagnostics.A_computed_property_name_in_an_interface_must_refer_to_an_expression_whose_type_is_a_literal_type_or_a_unique_symbol_type);
             }
-            else if (node.parent.kind === 178 /* TypeLiteral */) {
+            else if (node.parent.kind === 180 /* TypeLiteral */) {
                 return checkGrammarForInvalidDynamicName(node.name, ts.Diagnostics.A_computed_property_name_in_a_type_literal_must_refer_to_an_expression_whose_type_is_a_literal_type_or_a_unique_symbol_type);
             }
         }
         function checkGrammarBreakOrContinueStatement(node) {
             var current = node;
             while (current) {
-                if (ts.isFunctionLike(current)) {
+                if (ts.isFunctionLikeOrClassStaticBlockDeclaration(current)) {
                     return grammarErrorOnNode(node, ts.Diagnostics.Jump_target_cannot_cross_function_boundary);
                 }
                 switch (current.kind) {
-                    case 246 /* LabeledStatement */:
+                    case 248 /* LabeledStatement */:
                         if (node.label && current.label.escapedText === node.label.escapedText) {
                             // found matching label - verify that label usage is correct
                             // continue can only target labels that are on iteration statements
-                            var isMisplacedContinueLabel = node.kind === 241 /* ContinueStatement */
+                            var isMisplacedContinueLabel = node.kind === 243 /* ContinueStatement */
                                 && !ts.isIterationStatement(current.statement, /*lookInLabeledStatement*/ true);
                             if (isMisplacedContinueLabel) {
                                 return grammarErrorOnNode(node, ts.Diagnostics.A_continue_statement_can_only_jump_to_a_label_of_an_enclosing_iteration_statement);
@@ -82792,8 +84356,8 @@
                             return false;
                         }
                         break;
-                    case 245 /* SwitchStatement */:
-                        if (node.kind === 242 /* BreakStatement */ && !node.label) {
+                    case 247 /* SwitchStatement */:
+                        if (node.kind === 244 /* BreakStatement */ && !node.label) {
                             // unlabeled break within switch statement - ok
                             return false;
                         }
@@ -82808,13 +84372,13 @@
                 current = current.parent;
             }
             if (node.label) {
-                var message = node.kind === 242 /* BreakStatement */
+                var message = node.kind === 244 /* BreakStatement */
                     ? ts.Diagnostics.A_break_statement_can_only_jump_to_a_label_of_an_enclosing_statement
                     : ts.Diagnostics.A_continue_statement_can_only_jump_to_a_label_of_an_enclosing_iteration_statement;
                 return grammarErrorOnNode(node, message);
             }
             else {
-                var message = node.kind === 242 /* BreakStatement */
+                var message = node.kind === 244 /* BreakStatement */
                     ? ts.Diagnostics.A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement
                     : ts.Diagnostics.A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement;
                 return grammarErrorOnNode(node, message);
@@ -82838,12 +84402,12 @@
         }
         function isStringOrNumberLiteralExpression(expr) {
             return ts.isStringOrNumericLiteralLike(expr) ||
-                expr.kind === 215 /* PrefixUnaryExpression */ && expr.operator === 40 /* MinusToken */ &&
+                expr.kind === 217 /* PrefixUnaryExpression */ && expr.operator === 40 /* MinusToken */ &&
                     expr.operand.kind === 8 /* NumericLiteral */;
         }
         function isBigIntLiteralExpression(expr) {
             return expr.kind === 9 /* BigIntLiteral */ ||
-                expr.kind === 215 /* PrefixUnaryExpression */ && expr.operator === 40 /* MinusToken */ &&
+                expr.kind === 217 /* PrefixUnaryExpression */ && expr.operator === 40 /* MinusToken */ &&
                     expr.operand.kind === 9 /* BigIntLiteral */;
         }
         function isSimpleLiteralEnumReference(expr) {
@@ -82857,7 +84421,7 @@
             if (initializer) {
                 var isInvalidInitializer = !(isStringOrNumberLiteralExpression(initializer) ||
                     isSimpleLiteralEnumReference(initializer) ||
-                    initializer.kind === 109 /* TrueKeyword */ || initializer.kind === 94 /* FalseKeyword */ ||
+                    initializer.kind === 110 /* TrueKeyword */ || initializer.kind === 95 /* FalseKeyword */ ||
                     isBigIntLiteralExpression(initializer));
                 var isConstOrReadonly = ts.isDeclarationReadonly(node) || ts.isVariableDeclaration(node) && ts.isVarConst(node);
                 if (isConstOrReadonly && !node.type) {
@@ -82874,7 +84438,7 @@
             }
         }
         function checkGrammarVariableDeclaration(node) {
-            if (node.parent.parent.kind !== 239 /* ForInStatement */ && node.parent.parent.kind !== 240 /* ForOfStatement */) {
+            if (node.parent.parent.kind !== 241 /* ForInStatement */ && node.parent.parent.kind !== 242 /* ForOfStatement */) {
                 if (node.flags & 8388608 /* Ambient */) {
                     checkAmbientInitializer(node);
                 }
@@ -82887,7 +84451,7 @@
                     }
                 }
             }
-            if (node.exclamationToken && (node.parent.parent.kind !== 233 /* VariableStatement */ || !node.type || node.initializer || node.flags & 8388608 /* Ambient */)) {
+            if (node.exclamationToken && (node.parent.parent.kind !== 235 /* VariableStatement */ || !node.type || node.initializer || node.flags & 8388608 /* Ambient */)) {
                 var message = node.initializer
                     ? ts.Diagnostics.Declarations_with_initializers_cannot_also_have_definite_assignment_assertions
                     : !node.type
@@ -82910,7 +84474,7 @@
             return checkLetConstNames && checkGrammarNameInLetOrConstDeclarations(node.name);
         }
         function checkESModuleMarker(name) {
-            if (name.kind === 78 /* Identifier */) {
+            if (name.kind === 79 /* Identifier */) {
                 if (ts.idText(name) === "__esModule") {
                     return grammarErrorOnNodeSkippedOn("noEmit", name, ts.Diagnostics.Identifier_expected_esModule_is_reserved_as_an_exported_marker_when_transforming_ECMAScript_modules);
                 }
@@ -82927,8 +84491,8 @@
             return false;
         }
         function checkGrammarNameInLetOrConstDeclarations(name) {
-            if (name.kind === 78 /* Identifier */) {
-                if (name.originalKeywordKind === 118 /* LetKeyword */) {
+            if (name.kind === 79 /* Identifier */) {
+                if (name.originalKeywordKind === 119 /* LetKeyword */) {
                     return grammarErrorOnNode(name, ts.Diagnostics.let_is_not_allowed_to_be_used_as_a_name_in_let_or_const_declarations);
                 }
             }
@@ -82955,15 +84519,15 @@
         }
         function allowLetAndConstDeclarations(parent) {
             switch (parent.kind) {
-                case 235 /* IfStatement */:
-                case 236 /* DoStatement */:
-                case 237 /* WhileStatement */:
-                case 244 /* WithStatement */:
-                case 238 /* ForStatement */:
-                case 239 /* ForInStatement */:
-                case 240 /* ForOfStatement */:
+                case 237 /* IfStatement */:
+                case 238 /* DoStatement */:
+                case 239 /* WhileStatement */:
+                case 246 /* WithStatement */:
+                case 240 /* ForStatement */:
+                case 241 /* ForInStatement */:
+                case 242 /* ForOfStatement */:
                     return false;
-                case 246 /* LabeledStatement */:
+                case 248 /* LabeledStatement */:
                     return allowLetAndConstDeclarations(parent.parent);
             }
             return true;
@@ -82981,12 +84545,12 @@
         function checkGrammarMetaProperty(node) {
             var escapedText = node.name.escapedText;
             switch (node.keywordToken) {
-                case 102 /* NewKeyword */:
+                case 103 /* NewKeyword */:
                     if (escapedText !== "target") {
                         return grammarErrorOnNode(node.name, ts.Diagnostics._0_is_not_a_valid_meta_property_for_keyword_1_Did_you_mean_2, node.name.escapedText, ts.tokenToString(node.keywordToken), "target");
                     }
                     break;
-                case 99 /* ImportKeyword */:
+                case 100 /* ImportKeyword */:
                     if (escapedText !== "meta") {
                         return grammarErrorOnNode(node.name, ts.Diagnostics._0_is_not_a_valid_meta_property_for_keyword_1_Did_you_mean_2, node.name.escapedText, ts.tokenToString(node.keywordToken), "meta");
                     }
@@ -83055,7 +84619,7 @@
                     return grammarErrorOnNode(node.name, ts.Diagnostics.Private_identifiers_are_only_available_when_targeting_ECMAScript_2015_and_higher);
                 }
             }
-            else if (node.parent.kind === 254 /* InterfaceDeclaration */) {
+            else if (node.parent.kind === 256 /* InterfaceDeclaration */) {
                 if (checkGrammarForInvalidDynamicName(node.name, ts.Diagnostics.A_computed_property_name_in_an_interface_must_refer_to_an_expression_whose_type_is_a_literal_type_or_a_unique_symbol_type)) {
                     return true;
                 }
@@ -83063,7 +84627,7 @@
                     return grammarErrorOnNode(node.initializer, ts.Diagnostics.An_interface_property_cannot_have_an_initializer);
                 }
             }
-            else if (node.parent.kind === 178 /* TypeLiteral */) {
+            else if (node.parent.kind === 180 /* TypeLiteral */) {
                 if (checkGrammarForInvalidDynamicName(node.name, ts.Diagnostics.A_computed_property_name_in_a_type_literal_must_refer_to_an_expression_whose_type_is_a_literal_type_or_a_unique_symbol_type)) {
                     return true;
                 }
@@ -83075,7 +84639,7 @@
                 checkAmbientInitializer(node);
             }
             if (ts.isPropertyDeclaration(node) && node.exclamationToken && (!ts.isClassLike(node.parent) || !node.type || node.initializer ||
-                node.flags & 8388608 /* Ambient */ || ts.hasSyntacticModifier(node, 32 /* Static */ | 128 /* Abstract */))) {
+                node.flags & 8388608 /* Ambient */ || ts.isStatic(node) || ts.hasAbstractModifier(node))) {
                 var message = node.initializer
                     ? ts.Diagnostics.Declarations_with_initializers_cannot_also_have_definite_assignment_assertions
                     : !node.type
@@ -83097,13 +84661,13 @@
             //     export_opt   AmbientDeclaration
             //
             // TODO: The spec needs to be amended to reflect this grammar.
-            if (node.kind === 254 /* InterfaceDeclaration */ ||
-                node.kind === 255 /* TypeAliasDeclaration */ ||
-                node.kind === 262 /* ImportDeclaration */ ||
-                node.kind === 261 /* ImportEqualsDeclaration */ ||
-                node.kind === 268 /* ExportDeclaration */ ||
-                node.kind === 267 /* ExportAssignment */ ||
-                node.kind === 260 /* NamespaceExportDeclaration */ ||
+            if (node.kind === 256 /* InterfaceDeclaration */ ||
+                node.kind === 257 /* TypeAliasDeclaration */ ||
+                node.kind === 264 /* ImportDeclaration */ ||
+                node.kind === 263 /* ImportEqualsDeclaration */ ||
+                node.kind === 270 /* ExportDeclaration */ ||
+                node.kind === 269 /* ExportAssignment */ ||
+                node.kind === 262 /* NamespaceExportDeclaration */ ||
                 ts.hasSyntacticModifier(node, 2 /* Ambient */ | 1 /* Export */ | 512 /* Default */)) {
                 return false;
             }
@@ -83112,7 +84676,7 @@
         function checkGrammarTopLevelElementsForRequiredDeclareModifier(file) {
             for (var _i = 0, _a = file.statements; _i < _a.length; _i++) {
                 var decl = _a[_i];
-                if (ts.isDeclaration(decl) || decl.kind === 233 /* VariableStatement */) {
+                if (ts.isDeclaration(decl) || decl.kind === 235 /* VariableStatement */) {
                     if (checkGrammarTopLevelElementForRequiredDeclareModifier(decl)) {
                         return true;
                     }
@@ -83135,7 +84699,7 @@
                 // to prevent noisiness.  So use a bit on the block to indicate if
                 // this has already been reported, and don't report if it has.
                 //
-                if (node.parent.kind === 231 /* Block */ || node.parent.kind === 258 /* ModuleBlock */ || node.parent.kind === 298 /* SourceFile */) {
+                if (node.parent.kind === 233 /* Block */ || node.parent.kind === 260 /* ModuleBlock */ || node.parent.kind === 300 /* SourceFile */) {
                     var links_2 = getNodeLinks(node.parent);
                     // Check if the containing block ever report this error
                     if (!links_2.hasReportedStatementInAmbientContext) {
@@ -83157,10 +84721,10 @@
                 if (languageVersion >= 1 /* ES5 */) {
                     diagnosticMessage = ts.Diagnostics.Octal_literals_are_not_available_when_targeting_ECMAScript_5_and_higher_Use_the_syntax_0;
                 }
-                else if (ts.isChildOfNodeWithKind(node, 192 /* LiteralType */)) {
+                else if (ts.isChildOfNodeWithKind(node, 194 /* LiteralType */)) {
                     diagnosticMessage = ts.Diagnostics.Octal_literal_types_must_use_ES2015_syntax_Use_the_syntax_0;
                 }
-                else if (ts.isChildOfNodeWithKind(node, 292 /* EnumMember */)) {
+                else if (ts.isChildOfNodeWithKind(node, 294 /* EnumMember */)) {
                     diagnosticMessage = ts.Diagnostics.Octal_literals_are_not_allowed_in_enums_members_initializer_Use_the_syntax_0;
                 }
                 if (diagnosticMessage) {
@@ -83339,14 +84903,14 @@
         return !ts.isAccessor(declaration);
     }
     function isNotOverload(declaration) {
-        return (declaration.kind !== 252 /* FunctionDeclaration */ && declaration.kind !== 166 /* MethodDeclaration */) ||
+        return (declaration.kind !== 254 /* FunctionDeclaration */ && declaration.kind !== 167 /* MethodDeclaration */) ||
             !!declaration.body;
     }
     /** Like 'isDeclarationName', but returns true for LHS of `import { x as y }` or `export { x as y }`. */
     function isDeclarationNameOrImportPropertyName(name) {
         switch (name.parent.kind) {
-            case 266 /* ImportSpecifier */:
-            case 271 /* ExportSpecifier */:
+            case 268 /* ImportSpecifier */:
+            case 273 /* ExportSpecifier */:
                 return ts.isIdentifier(name);
             default:
                 return ts.isDeclarationName(name);
@@ -83596,432 +85160,437 @@
         }
         var kind = node.kind;
         // No need to visit nodes with no children.
-        if ((kind > 0 /* FirstToken */ && kind <= 157 /* LastToken */) || kind === 188 /* ThisType */) {
+        if ((kind > 0 /* FirstToken */ && kind <= 158 /* LastToken */) || kind === 190 /* ThisType */) {
             return node;
         }
         var factory = context.factory;
         switch (kind) {
             // Names
-            case 78 /* Identifier */:
+            case 79 /* Identifier */:
                 ts.Debug.type(node);
                 return factory.updateIdentifier(node, nodesVisitor(node.typeArguments, visitor, ts.isTypeNodeOrTypeParameterDeclaration));
-            case 158 /* QualifiedName */:
+            case 159 /* QualifiedName */:
                 ts.Debug.type(node);
                 return factory.updateQualifiedName(node, nodeVisitor(node.left, visitor, ts.isEntityName), nodeVisitor(node.right, visitor, ts.isIdentifier));
-            case 159 /* ComputedPropertyName */:
+            case 160 /* ComputedPropertyName */:
                 ts.Debug.type(node);
                 return factory.updateComputedPropertyName(node, nodeVisitor(node.expression, visitor, ts.isExpression));
             // Signature elements
-            case 160 /* TypeParameter */:
+            case 161 /* TypeParameter */:
                 ts.Debug.type(node);
                 return factory.updateTypeParameterDeclaration(node, nodeVisitor(node.name, visitor, ts.isIdentifier), nodeVisitor(node.constraint, visitor, ts.isTypeNode), nodeVisitor(node.default, visitor, ts.isTypeNode));
-            case 161 /* Parameter */:
+            case 162 /* Parameter */:
                 ts.Debug.type(node);
                 return factory.updateParameterDeclaration(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), nodeVisitor(node.dotDotDotToken, tokenVisitor, ts.isDotDotDotToken), nodeVisitor(node.name, visitor, ts.isBindingName), nodeVisitor(node.questionToken, tokenVisitor, ts.isQuestionToken), nodeVisitor(node.type, visitor, ts.isTypeNode), nodeVisitor(node.initializer, visitor, ts.isExpression));
-            case 162 /* Decorator */:
+            case 163 /* Decorator */:
                 ts.Debug.type(node);
                 return factory.updateDecorator(node, nodeVisitor(node.expression, visitor, ts.isExpression));
             // Type elements
-            case 163 /* PropertySignature */:
+            case 164 /* PropertySignature */:
                 ts.Debug.type(node);
                 return factory.updatePropertySignature(node, nodesVisitor(node.modifiers, visitor, ts.isModifier), nodeVisitor(node.name, visitor, ts.isPropertyName), nodeVisitor(node.questionToken, tokenVisitor, ts.isToken), nodeVisitor(node.type, visitor, ts.isTypeNode));
-            case 164 /* PropertyDeclaration */:
+            case 165 /* PropertyDeclaration */:
                 ts.Debug.type(node);
                 return factory.updatePropertyDeclaration(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), nodeVisitor(node.name, visitor, ts.isPropertyName), 
                 // QuestionToken and ExclamationToken is uniqued in Property Declaration and the signature of 'updateProperty' is that too
                 nodeVisitor(node.questionToken || node.exclamationToken, tokenVisitor, ts.isQuestionOrExclamationToken), nodeVisitor(node.type, visitor, ts.isTypeNode), nodeVisitor(node.initializer, visitor, ts.isExpression));
-            case 165 /* MethodSignature */:
+            case 166 /* MethodSignature */:
                 ts.Debug.type(node);
                 return factory.updateMethodSignature(node, nodesVisitor(node.modifiers, visitor, ts.isModifier), nodeVisitor(node.name, visitor, ts.isPropertyName), nodeVisitor(node.questionToken, tokenVisitor, ts.isQuestionToken), nodesVisitor(node.typeParameters, visitor, ts.isTypeParameterDeclaration), nodesVisitor(node.parameters, visitor, ts.isParameterDeclaration), nodeVisitor(node.type, visitor, ts.isTypeNode));
-            case 166 /* MethodDeclaration */:
+            case 167 /* MethodDeclaration */:
                 ts.Debug.type(node);
                 return factory.updateMethodDeclaration(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), nodeVisitor(node.asteriskToken, tokenVisitor, ts.isAsteriskToken), nodeVisitor(node.name, visitor, ts.isPropertyName), nodeVisitor(node.questionToken, tokenVisitor, ts.isQuestionToken), nodesVisitor(node.typeParameters, visitor, ts.isTypeParameterDeclaration), visitParameterList(node.parameters, visitor, context, nodesVisitor), nodeVisitor(node.type, visitor, ts.isTypeNode), visitFunctionBody(node.body, visitor, context, nodeVisitor));
-            case 167 /* Constructor */:
+            case 169 /* Constructor */:
                 ts.Debug.type(node);
                 return factory.updateConstructorDeclaration(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), visitParameterList(node.parameters, visitor, context, nodesVisitor), visitFunctionBody(node.body, visitor, context, nodeVisitor));
-            case 168 /* GetAccessor */:
+            case 170 /* GetAccessor */:
                 ts.Debug.type(node);
                 return factory.updateGetAccessorDeclaration(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), nodeVisitor(node.name, visitor, ts.isPropertyName), visitParameterList(node.parameters, visitor, context, nodesVisitor), nodeVisitor(node.type, visitor, ts.isTypeNode), visitFunctionBody(node.body, visitor, context, nodeVisitor));
-            case 169 /* SetAccessor */:
+            case 171 /* SetAccessor */:
                 ts.Debug.type(node);
                 return factory.updateSetAccessorDeclaration(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), nodeVisitor(node.name, visitor, ts.isPropertyName), visitParameterList(node.parameters, visitor, context, nodesVisitor), visitFunctionBody(node.body, visitor, context, nodeVisitor));
-            case 170 /* CallSignature */:
+            case 168 /* ClassStaticBlockDeclaration */:
+                ts.Debug.type(node);
+                context.startLexicalEnvironment();
+                context.suspendLexicalEnvironment();
+                return factory.updateClassStaticBlockDeclaration(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), visitFunctionBody(node.body, visitor, context, nodeVisitor));
+            case 172 /* CallSignature */:
                 ts.Debug.type(node);
                 return factory.updateCallSignature(node, nodesVisitor(node.typeParameters, visitor, ts.isTypeParameterDeclaration), nodesVisitor(node.parameters, visitor, ts.isParameterDeclaration), nodeVisitor(node.type, visitor, ts.isTypeNode));
-            case 171 /* ConstructSignature */:
+            case 173 /* ConstructSignature */:
                 ts.Debug.type(node);
                 return factory.updateConstructSignature(node, nodesVisitor(node.typeParameters, visitor, ts.isTypeParameterDeclaration), nodesVisitor(node.parameters, visitor, ts.isParameterDeclaration), nodeVisitor(node.type, visitor, ts.isTypeNode));
-            case 172 /* IndexSignature */:
+            case 174 /* IndexSignature */:
                 ts.Debug.type(node);
                 return factory.updateIndexSignature(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), nodesVisitor(node.parameters, visitor, ts.isParameterDeclaration), nodeVisitor(node.type, visitor, ts.isTypeNode));
             // Types
-            case 173 /* TypePredicate */:
+            case 175 /* TypePredicate */:
                 ts.Debug.type(node);
                 return factory.updateTypePredicateNode(node, nodeVisitor(node.assertsModifier, visitor, ts.isAssertsKeyword), nodeVisitor(node.parameterName, visitor, ts.isIdentifierOrThisTypeNode), nodeVisitor(node.type, visitor, ts.isTypeNode));
-            case 174 /* TypeReference */:
+            case 176 /* TypeReference */:
                 ts.Debug.type(node);
                 return factory.updateTypeReferenceNode(node, nodeVisitor(node.typeName, visitor, ts.isEntityName), nodesVisitor(node.typeArguments, visitor, ts.isTypeNode));
-            case 175 /* FunctionType */:
+            case 177 /* FunctionType */:
                 ts.Debug.type(node);
                 return factory.updateFunctionTypeNode(node, nodesVisitor(node.typeParameters, visitor, ts.isTypeParameterDeclaration), nodesVisitor(node.parameters, visitor, ts.isParameterDeclaration), nodeVisitor(node.type, visitor, ts.isTypeNode));
-            case 176 /* ConstructorType */:
+            case 178 /* ConstructorType */:
                 ts.Debug.type(node);
                 return factory.updateConstructorTypeNode(node, nodesVisitor(node.modifiers, visitor, ts.isModifier), nodesVisitor(node.typeParameters, visitor, ts.isTypeParameterDeclaration), nodesVisitor(node.parameters, visitor, ts.isParameterDeclaration), nodeVisitor(node.type, visitor, ts.isTypeNode));
-            case 177 /* TypeQuery */:
+            case 179 /* TypeQuery */:
                 ts.Debug.type(node);
                 return factory.updateTypeQueryNode(node, nodeVisitor(node.exprName, visitor, ts.isEntityName));
-            case 178 /* TypeLiteral */:
+            case 180 /* TypeLiteral */:
                 ts.Debug.type(node);
                 return factory.updateTypeLiteralNode(node, nodesVisitor(node.members, visitor, ts.isTypeElement));
-            case 179 /* ArrayType */:
+            case 181 /* ArrayType */:
                 ts.Debug.type(node);
                 return factory.updateArrayTypeNode(node, nodeVisitor(node.elementType, visitor, ts.isTypeNode));
-            case 180 /* TupleType */:
+            case 182 /* TupleType */:
                 ts.Debug.type(node);
                 return factory.updateTupleTypeNode(node, nodesVisitor(node.elements, visitor, ts.isTypeNode));
-            case 181 /* OptionalType */:
+            case 183 /* OptionalType */:
                 ts.Debug.type(node);
                 return factory.updateOptionalTypeNode(node, nodeVisitor(node.type, visitor, ts.isTypeNode));
-            case 182 /* RestType */:
+            case 184 /* RestType */:
                 ts.Debug.type(node);
                 return factory.updateRestTypeNode(node, nodeVisitor(node.type, visitor, ts.isTypeNode));
-            case 183 /* UnionType */:
+            case 185 /* UnionType */:
                 ts.Debug.type(node);
                 return factory.updateUnionTypeNode(node, nodesVisitor(node.types, visitor, ts.isTypeNode));
-            case 184 /* IntersectionType */:
+            case 186 /* IntersectionType */:
                 ts.Debug.type(node);
                 return factory.updateIntersectionTypeNode(node, nodesVisitor(node.types, visitor, ts.isTypeNode));
-            case 185 /* ConditionalType */:
+            case 187 /* ConditionalType */:
                 ts.Debug.type(node);
                 return factory.updateConditionalTypeNode(node, nodeVisitor(node.checkType, visitor, ts.isTypeNode), nodeVisitor(node.extendsType, visitor, ts.isTypeNode), nodeVisitor(node.trueType, visitor, ts.isTypeNode), nodeVisitor(node.falseType, visitor, ts.isTypeNode));
-            case 186 /* InferType */:
+            case 188 /* InferType */:
                 ts.Debug.type(node);
                 return factory.updateInferTypeNode(node, nodeVisitor(node.typeParameter, visitor, ts.isTypeParameterDeclaration));
-            case 196 /* ImportType */:
+            case 198 /* ImportType */:
                 ts.Debug.type(node);
                 return factory.updateImportTypeNode(node, nodeVisitor(node.argument, visitor, ts.isTypeNode), nodeVisitor(node.qualifier, visitor, ts.isEntityName), visitNodes(node.typeArguments, visitor, ts.isTypeNode), node.isTypeOf);
-            case 193 /* NamedTupleMember */:
+            case 195 /* NamedTupleMember */:
                 ts.Debug.type(node);
                 return factory.updateNamedTupleMember(node, visitNode(node.dotDotDotToken, visitor, ts.isDotDotDotToken), visitNode(node.name, visitor, ts.isIdentifier), visitNode(node.questionToken, visitor, ts.isQuestionToken), visitNode(node.type, visitor, ts.isTypeNode));
-            case 187 /* ParenthesizedType */:
+            case 189 /* ParenthesizedType */:
                 ts.Debug.type(node);
                 return factory.updateParenthesizedType(node, nodeVisitor(node.type, visitor, ts.isTypeNode));
-            case 189 /* TypeOperator */:
+            case 191 /* TypeOperator */:
                 ts.Debug.type(node);
                 return factory.updateTypeOperatorNode(node, nodeVisitor(node.type, visitor, ts.isTypeNode));
-            case 190 /* IndexedAccessType */:
+            case 192 /* IndexedAccessType */:
                 ts.Debug.type(node);
                 return factory.updateIndexedAccessTypeNode(node, nodeVisitor(node.objectType, visitor, ts.isTypeNode), nodeVisitor(node.indexType, visitor, ts.isTypeNode));
-            case 191 /* MappedType */:
+            case 193 /* MappedType */:
                 ts.Debug.type(node);
                 return factory.updateMappedTypeNode(node, nodeVisitor(node.readonlyToken, tokenVisitor, ts.isReadonlyKeywordOrPlusOrMinusToken), nodeVisitor(node.typeParameter, visitor, ts.isTypeParameterDeclaration), nodeVisitor(node.nameType, visitor, ts.isTypeNode), nodeVisitor(node.questionToken, tokenVisitor, ts.isQuestionOrPlusOrMinusToken), nodeVisitor(node.type, visitor, ts.isTypeNode));
-            case 192 /* LiteralType */:
+            case 194 /* LiteralType */:
                 ts.Debug.type(node);
                 return factory.updateLiteralTypeNode(node, nodeVisitor(node.literal, visitor, ts.isExpression));
-            case 194 /* TemplateLiteralType */:
+            case 196 /* TemplateLiteralType */:
                 ts.Debug.type(node);
                 return factory.updateTemplateLiteralType(node, nodeVisitor(node.head, visitor, ts.isTemplateHead), nodesVisitor(node.templateSpans, visitor, ts.isTemplateLiteralTypeSpan));
-            case 195 /* TemplateLiteralTypeSpan */:
+            case 197 /* TemplateLiteralTypeSpan */:
                 ts.Debug.type(node);
                 return factory.updateTemplateLiteralTypeSpan(node, nodeVisitor(node.type, visitor, ts.isTypeNode), nodeVisitor(node.literal, visitor, ts.isTemplateMiddleOrTemplateTail));
             // Binding patterns
-            case 197 /* ObjectBindingPattern */:
+            case 199 /* ObjectBindingPattern */:
                 ts.Debug.type(node);
                 return factory.updateObjectBindingPattern(node, nodesVisitor(node.elements, visitor, ts.isBindingElement));
-            case 198 /* ArrayBindingPattern */:
+            case 200 /* ArrayBindingPattern */:
                 ts.Debug.type(node);
                 return factory.updateArrayBindingPattern(node, nodesVisitor(node.elements, visitor, ts.isArrayBindingElement));
-            case 199 /* BindingElement */:
+            case 201 /* BindingElement */:
                 ts.Debug.type(node);
                 return factory.updateBindingElement(node, nodeVisitor(node.dotDotDotToken, tokenVisitor, ts.isDotDotDotToken), nodeVisitor(node.propertyName, visitor, ts.isPropertyName), nodeVisitor(node.name, visitor, ts.isBindingName), nodeVisitor(node.initializer, visitor, ts.isExpression));
             // Expression
-            case 200 /* ArrayLiteralExpression */:
+            case 202 /* ArrayLiteralExpression */:
                 ts.Debug.type(node);
                 return factory.updateArrayLiteralExpression(node, nodesVisitor(node.elements, visitor, ts.isExpression));
-            case 201 /* ObjectLiteralExpression */:
+            case 203 /* ObjectLiteralExpression */:
                 ts.Debug.type(node);
                 return factory.updateObjectLiteralExpression(node, nodesVisitor(node.properties, visitor, ts.isObjectLiteralElementLike));
-            case 202 /* PropertyAccessExpression */:
+            case 204 /* PropertyAccessExpression */:
                 if (node.flags & 32 /* OptionalChain */) {
                     ts.Debug.type(node);
                     return factory.updatePropertyAccessChain(node, nodeVisitor(node.expression, visitor, ts.isExpression), nodeVisitor(node.questionDotToken, tokenVisitor, ts.isQuestionDotToken), nodeVisitor(node.name, visitor, ts.isMemberName));
                 }
                 ts.Debug.type(node);
                 return factory.updatePropertyAccessExpression(node, nodeVisitor(node.expression, visitor, ts.isExpression), nodeVisitor(node.name, visitor, ts.isMemberName));
-            case 203 /* ElementAccessExpression */:
+            case 205 /* ElementAccessExpression */:
                 if (node.flags & 32 /* OptionalChain */) {
                     ts.Debug.type(node);
                     return factory.updateElementAccessChain(node, nodeVisitor(node.expression, visitor, ts.isExpression), nodeVisitor(node.questionDotToken, tokenVisitor, ts.isQuestionDotToken), nodeVisitor(node.argumentExpression, visitor, ts.isExpression));
                 }
                 ts.Debug.type(node);
                 return factory.updateElementAccessExpression(node, nodeVisitor(node.expression, visitor, ts.isExpression), nodeVisitor(node.argumentExpression, visitor, ts.isExpression));
-            case 204 /* CallExpression */:
+            case 206 /* CallExpression */:
                 if (node.flags & 32 /* OptionalChain */) {
                     ts.Debug.type(node);
                     return factory.updateCallChain(node, nodeVisitor(node.expression, visitor, ts.isExpression), nodeVisitor(node.questionDotToken, tokenVisitor, ts.isQuestionDotToken), nodesVisitor(node.typeArguments, visitor, ts.isTypeNode), nodesVisitor(node.arguments, visitor, ts.isExpression));
                 }
                 ts.Debug.type(node);
                 return factory.updateCallExpression(node, nodeVisitor(node.expression, visitor, ts.isExpression), nodesVisitor(node.typeArguments, visitor, ts.isTypeNode), nodesVisitor(node.arguments, visitor, ts.isExpression));
-            case 205 /* NewExpression */:
+            case 207 /* NewExpression */:
                 ts.Debug.type(node);
                 return factory.updateNewExpression(node, nodeVisitor(node.expression, visitor, ts.isExpression), nodesVisitor(node.typeArguments, visitor, ts.isTypeNode), nodesVisitor(node.arguments, visitor, ts.isExpression));
-            case 206 /* TaggedTemplateExpression */:
+            case 208 /* TaggedTemplateExpression */:
                 ts.Debug.type(node);
                 return factory.updateTaggedTemplateExpression(node, nodeVisitor(node.tag, visitor, ts.isExpression), visitNodes(node.typeArguments, visitor, ts.isTypeNode), nodeVisitor(node.template, visitor, ts.isTemplateLiteral));
-            case 207 /* TypeAssertionExpression */:
+            case 209 /* TypeAssertionExpression */:
                 ts.Debug.type(node);
                 return factory.updateTypeAssertion(node, nodeVisitor(node.type, visitor, ts.isTypeNode), nodeVisitor(node.expression, visitor, ts.isExpression));
-            case 208 /* ParenthesizedExpression */:
+            case 210 /* ParenthesizedExpression */:
                 ts.Debug.type(node);
                 return factory.updateParenthesizedExpression(node, nodeVisitor(node.expression, visitor, ts.isExpression));
-            case 209 /* FunctionExpression */:
+            case 211 /* FunctionExpression */:
                 ts.Debug.type(node);
                 return factory.updateFunctionExpression(node, nodesVisitor(node.modifiers, visitor, ts.isModifier), nodeVisitor(node.asteriskToken, tokenVisitor, ts.isAsteriskToken), nodeVisitor(node.name, visitor, ts.isIdentifier), nodesVisitor(node.typeParameters, visitor, ts.isTypeParameterDeclaration), visitParameterList(node.parameters, visitor, context, nodesVisitor), nodeVisitor(node.type, visitor, ts.isTypeNode), visitFunctionBody(node.body, visitor, context, nodeVisitor));
-            case 210 /* ArrowFunction */:
+            case 212 /* ArrowFunction */:
                 ts.Debug.type(node);
                 return factory.updateArrowFunction(node, nodesVisitor(node.modifiers, visitor, ts.isModifier), nodesVisitor(node.typeParameters, visitor, ts.isTypeParameterDeclaration), visitParameterList(node.parameters, visitor, context, nodesVisitor), nodeVisitor(node.type, visitor, ts.isTypeNode), nodeVisitor(node.equalsGreaterThanToken, tokenVisitor, ts.isEqualsGreaterThanToken), visitFunctionBody(node.body, visitor, context, nodeVisitor));
-            case 211 /* DeleteExpression */:
+            case 213 /* DeleteExpression */:
                 ts.Debug.type(node);
                 return factory.updateDeleteExpression(node, nodeVisitor(node.expression, visitor, ts.isExpression));
-            case 212 /* TypeOfExpression */:
+            case 214 /* TypeOfExpression */:
                 ts.Debug.type(node);
                 return factory.updateTypeOfExpression(node, nodeVisitor(node.expression, visitor, ts.isExpression));
-            case 213 /* VoidExpression */:
+            case 215 /* VoidExpression */:
                 ts.Debug.type(node);
                 return factory.updateVoidExpression(node, nodeVisitor(node.expression, visitor, ts.isExpression));
-            case 214 /* AwaitExpression */:
+            case 216 /* AwaitExpression */:
                 ts.Debug.type(node);
                 return factory.updateAwaitExpression(node, nodeVisitor(node.expression, visitor, ts.isExpression));
-            case 215 /* PrefixUnaryExpression */:
+            case 217 /* PrefixUnaryExpression */:
                 ts.Debug.type(node);
                 return factory.updatePrefixUnaryExpression(node, nodeVisitor(node.operand, visitor, ts.isExpression));
-            case 216 /* PostfixUnaryExpression */:
+            case 218 /* PostfixUnaryExpression */:
                 ts.Debug.type(node);
                 return factory.updatePostfixUnaryExpression(node, nodeVisitor(node.operand, visitor, ts.isExpression));
-            case 217 /* BinaryExpression */:
+            case 219 /* BinaryExpression */:
                 ts.Debug.type(node);
                 return factory.updateBinaryExpression(node, nodeVisitor(node.left, visitor, ts.isExpression), nodeVisitor(node.operatorToken, tokenVisitor, ts.isBinaryOperatorToken), nodeVisitor(node.right, visitor, ts.isExpression));
-            case 218 /* ConditionalExpression */:
+            case 220 /* ConditionalExpression */:
                 ts.Debug.type(node);
                 return factory.updateConditionalExpression(node, nodeVisitor(node.condition, visitor, ts.isExpression), nodeVisitor(node.questionToken, tokenVisitor, ts.isQuestionToken), nodeVisitor(node.whenTrue, visitor, ts.isExpression), nodeVisitor(node.colonToken, tokenVisitor, ts.isColonToken), nodeVisitor(node.whenFalse, visitor, ts.isExpression));
-            case 219 /* TemplateExpression */:
+            case 221 /* TemplateExpression */:
                 ts.Debug.type(node);
                 return factory.updateTemplateExpression(node, nodeVisitor(node.head, visitor, ts.isTemplateHead), nodesVisitor(node.templateSpans, visitor, ts.isTemplateSpan));
-            case 220 /* YieldExpression */:
+            case 222 /* YieldExpression */:
                 ts.Debug.type(node);
                 return factory.updateYieldExpression(node, nodeVisitor(node.asteriskToken, tokenVisitor, ts.isAsteriskToken), nodeVisitor(node.expression, visitor, ts.isExpression));
-            case 221 /* SpreadElement */:
+            case 223 /* SpreadElement */:
                 ts.Debug.type(node);
                 return factory.updateSpreadElement(node, nodeVisitor(node.expression, visitor, ts.isExpression));
-            case 222 /* ClassExpression */:
+            case 224 /* ClassExpression */:
                 ts.Debug.type(node);
                 return factory.updateClassExpression(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), nodeVisitor(node.name, visitor, ts.isIdentifier), nodesVisitor(node.typeParameters, visitor, ts.isTypeParameterDeclaration), nodesVisitor(node.heritageClauses, visitor, ts.isHeritageClause), nodesVisitor(node.members, visitor, ts.isClassElement));
-            case 224 /* ExpressionWithTypeArguments */:
+            case 226 /* ExpressionWithTypeArguments */:
                 ts.Debug.type(node);
                 return factory.updateExpressionWithTypeArguments(node, nodeVisitor(node.expression, visitor, ts.isExpression), nodesVisitor(node.typeArguments, visitor, ts.isTypeNode));
-            case 225 /* AsExpression */:
+            case 227 /* AsExpression */:
                 ts.Debug.type(node);
                 return factory.updateAsExpression(node, nodeVisitor(node.expression, visitor, ts.isExpression), nodeVisitor(node.type, visitor, ts.isTypeNode));
-            case 226 /* NonNullExpression */:
+            case 228 /* NonNullExpression */:
                 if (node.flags & 32 /* OptionalChain */) {
                     ts.Debug.type(node);
                     return factory.updateNonNullChain(node, nodeVisitor(node.expression, visitor, ts.isExpression));
                 }
                 ts.Debug.type(node);
                 return factory.updateNonNullExpression(node, nodeVisitor(node.expression, visitor, ts.isExpression));
-            case 227 /* MetaProperty */:
+            case 229 /* MetaProperty */:
                 ts.Debug.type(node);
                 return factory.updateMetaProperty(node, nodeVisitor(node.name, visitor, ts.isIdentifier));
             // Misc
-            case 229 /* TemplateSpan */:
+            case 231 /* TemplateSpan */:
                 ts.Debug.type(node);
                 return factory.updateTemplateSpan(node, nodeVisitor(node.expression, visitor, ts.isExpression), nodeVisitor(node.literal, visitor, ts.isTemplateMiddleOrTemplateTail));
             // Element
-            case 231 /* Block */:
+            case 233 /* Block */:
                 ts.Debug.type(node);
                 return factory.updateBlock(node, nodesVisitor(node.statements, visitor, ts.isStatement));
-            case 233 /* VariableStatement */:
+            case 235 /* VariableStatement */:
                 ts.Debug.type(node);
                 return factory.updateVariableStatement(node, nodesVisitor(node.modifiers, visitor, ts.isModifier), nodeVisitor(node.declarationList, visitor, ts.isVariableDeclarationList));
-            case 234 /* ExpressionStatement */:
+            case 236 /* ExpressionStatement */:
                 ts.Debug.type(node);
                 return factory.updateExpressionStatement(node, nodeVisitor(node.expression, visitor, ts.isExpression));
-            case 235 /* IfStatement */:
+            case 237 /* IfStatement */:
                 ts.Debug.type(node);
                 return factory.updateIfStatement(node, nodeVisitor(node.expression, visitor, ts.isExpression), nodeVisitor(node.thenStatement, visitor, ts.isStatement, factory.liftToBlock), nodeVisitor(node.elseStatement, visitor, ts.isStatement, factory.liftToBlock));
-            case 236 /* DoStatement */:
+            case 238 /* DoStatement */:
                 ts.Debug.type(node);
                 return factory.updateDoStatement(node, visitIterationBody(node.statement, visitor, context), nodeVisitor(node.expression, visitor, ts.isExpression));
-            case 237 /* WhileStatement */:
+            case 239 /* WhileStatement */:
                 ts.Debug.type(node);
                 return factory.updateWhileStatement(node, nodeVisitor(node.expression, visitor, ts.isExpression), visitIterationBody(node.statement, visitor, context));
-            case 238 /* ForStatement */:
+            case 240 /* ForStatement */:
                 ts.Debug.type(node);
                 return factory.updateForStatement(node, nodeVisitor(node.initializer, visitor, ts.isForInitializer), nodeVisitor(node.condition, visitor, ts.isExpression), nodeVisitor(node.incrementor, visitor, ts.isExpression), visitIterationBody(node.statement, visitor, context));
-            case 239 /* ForInStatement */:
+            case 241 /* ForInStatement */:
                 ts.Debug.type(node);
                 return factory.updateForInStatement(node, nodeVisitor(node.initializer, visitor, ts.isForInitializer), nodeVisitor(node.expression, visitor, ts.isExpression), visitIterationBody(node.statement, visitor, context));
-            case 240 /* ForOfStatement */:
+            case 242 /* ForOfStatement */:
                 ts.Debug.type(node);
                 return factory.updateForOfStatement(node, nodeVisitor(node.awaitModifier, tokenVisitor, ts.isAwaitKeyword), nodeVisitor(node.initializer, visitor, ts.isForInitializer), nodeVisitor(node.expression, visitor, ts.isExpression), visitIterationBody(node.statement, visitor, context));
-            case 241 /* ContinueStatement */:
+            case 243 /* ContinueStatement */:
                 ts.Debug.type(node);
                 return factory.updateContinueStatement(node, nodeVisitor(node.label, visitor, ts.isIdentifier));
-            case 242 /* BreakStatement */:
+            case 244 /* BreakStatement */:
                 ts.Debug.type(node);
                 return factory.updateBreakStatement(node, nodeVisitor(node.label, visitor, ts.isIdentifier));
-            case 243 /* ReturnStatement */:
+            case 245 /* ReturnStatement */:
                 ts.Debug.type(node);
                 return factory.updateReturnStatement(node, nodeVisitor(node.expression, visitor, ts.isExpression));
-            case 244 /* WithStatement */:
+            case 246 /* WithStatement */:
                 ts.Debug.type(node);
                 return factory.updateWithStatement(node, nodeVisitor(node.expression, visitor, ts.isExpression), nodeVisitor(node.statement, visitor, ts.isStatement, factory.liftToBlock));
-            case 245 /* SwitchStatement */:
+            case 247 /* SwitchStatement */:
                 ts.Debug.type(node);
                 return factory.updateSwitchStatement(node, nodeVisitor(node.expression, visitor, ts.isExpression), nodeVisitor(node.caseBlock, visitor, ts.isCaseBlock));
-            case 246 /* LabeledStatement */:
+            case 248 /* LabeledStatement */:
                 ts.Debug.type(node);
                 return factory.updateLabeledStatement(node, nodeVisitor(node.label, visitor, ts.isIdentifier), nodeVisitor(node.statement, visitor, ts.isStatement, factory.liftToBlock));
-            case 247 /* ThrowStatement */:
+            case 249 /* ThrowStatement */:
                 ts.Debug.type(node);
                 return factory.updateThrowStatement(node, nodeVisitor(node.expression, visitor, ts.isExpression));
-            case 248 /* TryStatement */:
+            case 250 /* TryStatement */:
                 ts.Debug.type(node);
                 return factory.updateTryStatement(node, nodeVisitor(node.tryBlock, visitor, ts.isBlock), nodeVisitor(node.catchClause, visitor, ts.isCatchClause), nodeVisitor(node.finallyBlock, visitor, ts.isBlock));
-            case 250 /* VariableDeclaration */:
+            case 252 /* VariableDeclaration */:
                 ts.Debug.type(node);
                 return factory.updateVariableDeclaration(node, nodeVisitor(node.name, visitor, ts.isBindingName), nodeVisitor(node.exclamationToken, tokenVisitor, ts.isExclamationToken), nodeVisitor(node.type, visitor, ts.isTypeNode), nodeVisitor(node.initializer, visitor, ts.isExpression));
-            case 251 /* VariableDeclarationList */:
+            case 253 /* VariableDeclarationList */:
                 ts.Debug.type(node);
                 return factory.updateVariableDeclarationList(node, nodesVisitor(node.declarations, visitor, ts.isVariableDeclaration));
-            case 252 /* FunctionDeclaration */:
+            case 254 /* FunctionDeclaration */:
                 ts.Debug.type(node);
                 return factory.updateFunctionDeclaration(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), nodeVisitor(node.asteriskToken, tokenVisitor, ts.isAsteriskToken), nodeVisitor(node.name, visitor, ts.isIdentifier), nodesVisitor(node.typeParameters, visitor, ts.isTypeParameterDeclaration), visitParameterList(node.parameters, visitor, context, nodesVisitor), nodeVisitor(node.type, visitor, ts.isTypeNode), visitFunctionBody(node.body, visitor, context, nodeVisitor));
-            case 253 /* ClassDeclaration */:
+            case 255 /* ClassDeclaration */:
                 ts.Debug.type(node);
                 return factory.updateClassDeclaration(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), nodeVisitor(node.name, visitor, ts.isIdentifier), nodesVisitor(node.typeParameters, visitor, ts.isTypeParameterDeclaration), nodesVisitor(node.heritageClauses, visitor, ts.isHeritageClause), nodesVisitor(node.members, visitor, ts.isClassElement));
-            case 254 /* InterfaceDeclaration */:
+            case 256 /* InterfaceDeclaration */:
                 ts.Debug.type(node);
                 return factory.updateInterfaceDeclaration(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), nodeVisitor(node.name, visitor, ts.isIdentifier), nodesVisitor(node.typeParameters, visitor, ts.isTypeParameterDeclaration), nodesVisitor(node.heritageClauses, visitor, ts.isHeritageClause), nodesVisitor(node.members, visitor, ts.isTypeElement));
-            case 255 /* TypeAliasDeclaration */:
+            case 257 /* TypeAliasDeclaration */:
                 ts.Debug.type(node);
                 return factory.updateTypeAliasDeclaration(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), nodeVisitor(node.name, visitor, ts.isIdentifier), nodesVisitor(node.typeParameters, visitor, ts.isTypeParameterDeclaration), nodeVisitor(node.type, visitor, ts.isTypeNode));
-            case 256 /* EnumDeclaration */:
+            case 258 /* EnumDeclaration */:
                 ts.Debug.type(node);
                 return factory.updateEnumDeclaration(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), nodeVisitor(node.name, visitor, ts.isIdentifier), nodesVisitor(node.members, visitor, ts.isEnumMember));
-            case 257 /* ModuleDeclaration */:
+            case 259 /* ModuleDeclaration */:
                 ts.Debug.type(node);
                 return factory.updateModuleDeclaration(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), nodeVisitor(node.name, visitor, ts.isModuleName), nodeVisitor(node.body, visitor, ts.isModuleBody));
-            case 258 /* ModuleBlock */:
+            case 260 /* ModuleBlock */:
                 ts.Debug.type(node);
                 return factory.updateModuleBlock(node, nodesVisitor(node.statements, visitor, ts.isStatement));
-            case 259 /* CaseBlock */:
+            case 261 /* CaseBlock */:
                 ts.Debug.type(node);
                 return factory.updateCaseBlock(node, nodesVisitor(node.clauses, visitor, ts.isCaseOrDefaultClause));
-            case 260 /* NamespaceExportDeclaration */:
+            case 262 /* NamespaceExportDeclaration */:
                 ts.Debug.type(node);
                 return factory.updateNamespaceExportDeclaration(node, nodeVisitor(node.name, visitor, ts.isIdentifier));
-            case 261 /* ImportEqualsDeclaration */:
+            case 263 /* ImportEqualsDeclaration */:
                 ts.Debug.type(node);
                 return factory.updateImportEqualsDeclaration(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), node.isTypeOnly, nodeVisitor(node.name, visitor, ts.isIdentifier), nodeVisitor(node.moduleReference, visitor, ts.isModuleReference));
-            case 262 /* ImportDeclaration */:
+            case 264 /* ImportDeclaration */:
                 ts.Debug.type(node);
                 return factory.updateImportDeclaration(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), nodeVisitor(node.importClause, visitor, ts.isImportClause), nodeVisitor(node.moduleSpecifier, visitor, ts.isExpression));
-            case 263 /* ImportClause */:
+            case 265 /* ImportClause */:
                 ts.Debug.type(node);
                 return factory.updateImportClause(node, node.isTypeOnly, nodeVisitor(node.name, visitor, ts.isIdentifier), nodeVisitor(node.namedBindings, visitor, ts.isNamedImportBindings));
-            case 264 /* NamespaceImport */:
+            case 266 /* NamespaceImport */:
                 ts.Debug.type(node);
                 return factory.updateNamespaceImport(node, nodeVisitor(node.name, visitor, ts.isIdentifier));
-            case 270 /* NamespaceExport */:
+            case 272 /* NamespaceExport */:
                 ts.Debug.type(node);
                 return factory.updateNamespaceExport(node, nodeVisitor(node.name, visitor, ts.isIdentifier));
-            case 265 /* NamedImports */:
+            case 267 /* NamedImports */:
                 ts.Debug.type(node);
                 return factory.updateNamedImports(node, nodesVisitor(node.elements, visitor, ts.isImportSpecifier));
-            case 266 /* ImportSpecifier */:
+            case 268 /* ImportSpecifier */:
                 ts.Debug.type(node);
                 return factory.updateImportSpecifier(node, nodeVisitor(node.propertyName, visitor, ts.isIdentifier), nodeVisitor(node.name, visitor, ts.isIdentifier));
-            case 267 /* ExportAssignment */:
+            case 269 /* ExportAssignment */:
                 ts.Debug.type(node);
                 return factory.updateExportAssignment(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), nodeVisitor(node.expression, visitor, ts.isExpression));
-            case 268 /* ExportDeclaration */:
+            case 270 /* ExportDeclaration */:
                 ts.Debug.type(node);
                 return factory.updateExportDeclaration(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), node.isTypeOnly, nodeVisitor(node.exportClause, visitor, ts.isNamedExportBindings), nodeVisitor(node.moduleSpecifier, visitor, ts.isExpression));
-            case 269 /* NamedExports */:
+            case 271 /* NamedExports */:
                 ts.Debug.type(node);
                 return factory.updateNamedExports(node, nodesVisitor(node.elements, visitor, ts.isExportSpecifier));
-            case 271 /* ExportSpecifier */:
+            case 273 /* ExportSpecifier */:
                 ts.Debug.type(node);
                 return factory.updateExportSpecifier(node, nodeVisitor(node.propertyName, visitor, ts.isIdentifier), nodeVisitor(node.name, visitor, ts.isIdentifier));
             // Module references
-            case 273 /* ExternalModuleReference */:
+            case 275 /* ExternalModuleReference */:
                 ts.Debug.type(node);
                 return factory.updateExternalModuleReference(node, nodeVisitor(node.expression, visitor, ts.isExpression));
             // JSX
-            case 274 /* JsxElement */:
+            case 276 /* JsxElement */:
                 ts.Debug.type(node);
                 return factory.updateJsxElement(node, nodeVisitor(node.openingElement, visitor, ts.isJsxOpeningElement), nodesVisitor(node.children, visitor, ts.isJsxChild), nodeVisitor(node.closingElement, visitor, ts.isJsxClosingElement));
-            case 275 /* JsxSelfClosingElement */:
+            case 277 /* JsxSelfClosingElement */:
                 ts.Debug.type(node);
                 return factory.updateJsxSelfClosingElement(node, nodeVisitor(node.tagName, visitor, ts.isJsxTagNameExpression), nodesVisitor(node.typeArguments, visitor, ts.isTypeNode), nodeVisitor(node.attributes, visitor, ts.isJsxAttributes));
-            case 276 /* JsxOpeningElement */:
+            case 278 /* JsxOpeningElement */:
                 ts.Debug.type(node);
                 return factory.updateJsxOpeningElement(node, nodeVisitor(node.tagName, visitor, ts.isJsxTagNameExpression), nodesVisitor(node.typeArguments, visitor, ts.isTypeNode), nodeVisitor(node.attributes, visitor, ts.isJsxAttributes));
-            case 277 /* JsxClosingElement */:
+            case 279 /* JsxClosingElement */:
                 ts.Debug.type(node);
                 return factory.updateJsxClosingElement(node, nodeVisitor(node.tagName, visitor, ts.isJsxTagNameExpression));
-            case 278 /* JsxFragment */:
+            case 280 /* JsxFragment */:
                 ts.Debug.type(node);
                 return factory.updateJsxFragment(node, nodeVisitor(node.openingFragment, visitor, ts.isJsxOpeningFragment), nodesVisitor(node.children, visitor, ts.isJsxChild), nodeVisitor(node.closingFragment, visitor, ts.isJsxClosingFragment));
-            case 281 /* JsxAttribute */:
+            case 283 /* JsxAttribute */:
                 ts.Debug.type(node);
                 return factory.updateJsxAttribute(node, nodeVisitor(node.name, visitor, ts.isIdentifier), nodeVisitor(node.initializer, visitor, ts.isStringLiteralOrJsxExpression));
-            case 282 /* JsxAttributes */:
+            case 284 /* JsxAttributes */:
                 ts.Debug.type(node);
                 return factory.updateJsxAttributes(node, nodesVisitor(node.properties, visitor, ts.isJsxAttributeLike));
-            case 283 /* JsxSpreadAttribute */:
+            case 285 /* JsxSpreadAttribute */:
                 ts.Debug.type(node);
                 return factory.updateJsxSpreadAttribute(node, nodeVisitor(node.expression, visitor, ts.isExpression));
-            case 284 /* JsxExpression */:
+            case 286 /* JsxExpression */:
                 ts.Debug.type(node);
                 return factory.updateJsxExpression(node, nodeVisitor(node.expression, visitor, ts.isExpression));
             // Clauses
-            case 285 /* CaseClause */:
+            case 287 /* CaseClause */:
                 ts.Debug.type(node);
                 return factory.updateCaseClause(node, nodeVisitor(node.expression, visitor, ts.isExpression), nodesVisitor(node.statements, visitor, ts.isStatement));
-            case 286 /* DefaultClause */:
+            case 288 /* DefaultClause */:
                 ts.Debug.type(node);
                 return factory.updateDefaultClause(node, nodesVisitor(node.statements, visitor, ts.isStatement));
-            case 287 /* HeritageClause */:
+            case 289 /* HeritageClause */:
                 ts.Debug.type(node);
                 return factory.updateHeritageClause(node, nodesVisitor(node.types, visitor, ts.isExpressionWithTypeArguments));
-            case 288 /* CatchClause */:
+            case 290 /* CatchClause */:
                 ts.Debug.type(node);
                 return factory.updateCatchClause(node, nodeVisitor(node.variableDeclaration, visitor, ts.isVariableDeclaration), nodeVisitor(node.block, visitor, ts.isBlock));
             // Property assignments
-            case 289 /* PropertyAssignment */:
+            case 291 /* PropertyAssignment */:
                 ts.Debug.type(node);
                 return factory.updatePropertyAssignment(node, nodeVisitor(node.name, visitor, ts.isPropertyName), nodeVisitor(node.initializer, visitor, ts.isExpression));
-            case 290 /* ShorthandPropertyAssignment */:
+            case 292 /* ShorthandPropertyAssignment */:
                 ts.Debug.type(node);
                 return factory.updateShorthandPropertyAssignment(node, nodeVisitor(node.name, visitor, ts.isIdentifier), nodeVisitor(node.objectAssignmentInitializer, visitor, ts.isExpression));
-            case 291 /* SpreadAssignment */:
+            case 293 /* SpreadAssignment */:
                 ts.Debug.type(node);
                 return factory.updateSpreadAssignment(node, nodeVisitor(node.expression, visitor, ts.isExpression));
             // Enum
-            case 292 /* EnumMember */:
+            case 294 /* EnumMember */:
                 ts.Debug.type(node);
                 return factory.updateEnumMember(node, nodeVisitor(node.name, visitor, ts.isPropertyName), nodeVisitor(node.initializer, visitor, ts.isExpression));
             // Top-level nodes
-            case 298 /* SourceFile */:
+            case 300 /* SourceFile */:
                 ts.Debug.type(node);
                 return factory.updateSourceFile(node, visitLexicalEnvironment(node.statements, visitor, context));
             // Transformation nodes
-            case 340 /* PartiallyEmittedExpression */:
+            case 345 /* PartiallyEmittedExpression */:
                 ts.Debug.type(node);
                 return factory.updatePartiallyEmittedExpression(node, nodeVisitor(node.expression, visitor, ts.isExpression));
-            case 341 /* CommaListExpression */:
+            case 346 /* CommaListExpression */:
                 ts.Debug.type(node);
                 return factory.updateCommaListExpression(node, nodesVisitor(node.elements, visitor, ts.isExpression));
             default:
@@ -84054,6 +85623,7 @@
         var sourcesContent;
         var names = [];
         var nameToNameIndexMap;
+        var mappingCharCodes = [];
         var mappings = "";
         // Last recorded and encoded mappings
         var lastGeneratedLine = 0;
@@ -84228,6 +85798,14 @@
                 || lastSourceCharacter !== pendingSourceCharacter
                 || lastNameIndex !== pendingNameIndex;
         }
+        function appendMappingCharCode(charCode) {
+            mappingCharCodes.push(charCode);
+            // String.fromCharCode accepts its arguments on the stack, so we have to chunk the input,
+            // otherwise we can get stack overflows for large source maps
+            if (mappingCharCodes.length >= 1024) {
+                flushMappingBuffer();
+            }
+        }
         function commitPendingMapping() {
             if (!hasPending || !shouldCommitMapping()) {
                 return;
@@ -84237,42 +85815,50 @@
             if (lastGeneratedLine < pendingGeneratedLine) {
                 // Emit line delimiters
                 do {
-                    mappings += ";";
+                    appendMappingCharCode(59 /* semicolon */);
                     lastGeneratedLine++;
-                    lastGeneratedCharacter = 0;
                 } while (lastGeneratedLine < pendingGeneratedLine);
+                // Only need to set this once
+                lastGeneratedCharacter = 0;
             }
             else {
                 ts.Debug.assertEqual(lastGeneratedLine, pendingGeneratedLine, "generatedLine cannot backtrack");
                 // Emit comma to separate the entry
                 if (hasLast) {
-                    mappings += ",";
+                    appendMappingCharCode(44 /* comma */);
                 }
             }
             // 1. Relative generated character
-            mappings += base64VLQFormatEncode(pendingGeneratedCharacter - lastGeneratedCharacter);
+            appendBase64VLQ(pendingGeneratedCharacter - lastGeneratedCharacter);
             lastGeneratedCharacter = pendingGeneratedCharacter;
             if (hasPendingSource) {
                 // 2. Relative sourceIndex
-                mappings += base64VLQFormatEncode(pendingSourceIndex - lastSourceIndex);
+                appendBase64VLQ(pendingSourceIndex - lastSourceIndex);
                 lastSourceIndex = pendingSourceIndex;
                 // 3. Relative source line
-                mappings += base64VLQFormatEncode(pendingSourceLine - lastSourceLine);
+                appendBase64VLQ(pendingSourceLine - lastSourceLine);
                 lastSourceLine = pendingSourceLine;
                 // 4. Relative source character
-                mappings += base64VLQFormatEncode(pendingSourceCharacter - lastSourceCharacter);
+                appendBase64VLQ(pendingSourceCharacter - lastSourceCharacter);
                 lastSourceCharacter = pendingSourceCharacter;
                 if (hasPendingName) {
                     // 5. Relative nameIndex
-                    mappings += base64VLQFormatEncode(pendingNameIndex - lastNameIndex);
+                    appendBase64VLQ(pendingNameIndex - lastNameIndex);
                     lastNameIndex = pendingNameIndex;
                 }
             }
             hasLast = true;
             exit();
         }
+        function flushMappingBuffer() {
+            if (mappingCharCodes.length > 0) {
+                mappings += String.fromCharCode.apply(undefined, mappingCharCodes);
+                mappingCharCodes.length = 0;
+            }
+        }
         function toJSON() {
             commitPendingMapping();
+            flushMappingBuffer();
             return {
                 version: 3,
                 file: file,
@@ -84283,10 +85869,33 @@
                 sourcesContent: sourcesContent,
             };
         }
+        function appendBase64VLQ(inValue) {
+            // Add a new least significant bit that has the sign of the value.
+            // if negative number the least significant bit that gets added to the number has value 1
+            // else least significant bit value that gets added is 0
+            // eg. -1 changes to binary : 01 [1] => 3
+            //     +1 changes to binary : 01 [0] => 2
+            if (inValue < 0) {
+                inValue = ((-inValue) << 1) + 1;
+            }
+            else {
+                inValue = inValue << 1;
+            }
+            // Encode 5 bits at a time starting from least significant bits
+            do {
+                var currentDigit = inValue & 31; // 11111
+                inValue = inValue >> 5;
+                if (inValue > 0) {
+                    // There are still more digits to decode, set the msb (6th bit)
+                    currentDigit = currentDigit | 32;
+                }
+                appendMappingCharCode(base64FormatEncode(currentDigit));
+            } while (inValue > 0);
+        }
     }
     ts.createSourceMapGenerator = createSourceMapGenerator;
     // Sometimes tools can see the following line as a source mapping url comment, so we mangle it a bit (the [M])
-    var sourceMapCommentRegExp = /^\/\/[@#] source[M]appingURL=(.+)\s*$/;
+    var sourceMapCommentRegExp = /^\/\/[@#] source[M]appingURL=(.+)$/;
     var whitespaceOrMapCommentRegExp = /^\s*(\/\/[@#] .*)?$/;
     function getLineInfo(text, lineStarts) {
         return {
@@ -84303,7 +85912,7 @@
             var line = lineInfo.getLineText(index);
             var comment = sourceMapCommentRegExp.exec(line);
             if (comment) {
-                return comment[1];
+                return ts.trimStringEnd(comment[1]);
             }
             // If we see a non-whitespace/map comment-like line, break, to avoid scanning up the entire file
             else if (!line.match(whitespaceOrMapCommentRegExp)) {
@@ -84509,31 +86118,6 @@
                         ch === 47 /* slash */ ? 63 :
                             -1;
     }
-    function base64VLQFormatEncode(inValue) {
-        // Add a new least significant bit that has the sign of the value.
-        // if negative number the least significant bit that gets added to the number has value 1
-        // else least significant bit value that gets added is 0
-        // eg. -1 changes to binary : 01 [1] => 3
-        //     +1 changes to binary : 01 [0] => 2
-        if (inValue < 0) {
-            inValue = ((-inValue) << 1) + 1;
-        }
-        else {
-            inValue = inValue << 1;
-        }
-        // Encode 5 bits at a time starting from least significant bits
-        var encodedStr = "";
-        do {
-            var currentDigit = inValue & 31; // 11111
-            inValue = inValue >> 5;
-            if (inValue > 0) {
-                // There are still more digits to decode, set the msb (6th bit)
-                currentDigit = currentDigit | 32;
-            }
-            encodedStr = encodedStr + String.fromCharCode(base64FormatEncode(currentDigit));
-        } while (inValue > 0);
-        return encodedStr;
-    }
     function isSourceMappedPosition(value) {
         return value.sourceIndex !== undefined
             && value.sourcePosition !== undefined;
@@ -84697,7 +86281,7 @@
     function chainBundle(context, transformSourceFile) {
         return transformSourceFileOrBundle;
         function transformSourceFileOrBundle(node) {
-            return node.kind === 298 /* SourceFile */ ? transformSourceFile(node) : transformBundle(node);
+            return node.kind === 300 /* SourceFile */ ? transformSourceFile(node) : transformBundle(node);
         }
         function transformBundle(node) {
             return context.factory.createBundle(ts.map(node.sourceFiles, transformSourceFile), node.prepends);
@@ -84748,7 +86332,7 @@
         for (var _i = 0, _a = sourceFile.statements; _i < _a.length; _i++) {
             var node = _a[_i];
             switch (node.kind) {
-                case 262 /* ImportDeclaration */:
+                case 264 /* ImportDeclaration */:
                     // import "mod"
                     // import x from "mod"
                     // import * as x from "mod"
@@ -84761,13 +86345,13 @@
                         hasImportDefault = true;
                     }
                     break;
-                case 261 /* ImportEqualsDeclaration */:
-                    if (node.moduleReference.kind === 273 /* ExternalModuleReference */) {
+                case 263 /* ImportEqualsDeclaration */:
+                    if (node.moduleReference.kind === 275 /* ExternalModuleReference */) {
                         // import x = require("mod")
                         externalImports.push(node);
                     }
                     break;
-                case 268 /* ExportDeclaration */:
+                case 270 /* ExportDeclaration */:
                     if (node.moduleSpecifier) {
                         if (!node.exportClause) {
                             // export * from "mod"
@@ -84798,13 +86382,13 @@
                         addExportedNamesForExportDeclaration(node);
                     }
                     break;
-                case 267 /* ExportAssignment */:
+                case 269 /* ExportAssignment */:
                     if (node.isExportEquals && !exportEquals) {
                         // export = x
                         exportEquals = node;
                     }
                     break;
-                case 233 /* VariableStatement */:
+                case 235 /* VariableStatement */:
                     if (ts.hasSyntacticModifier(node, 1 /* Export */)) {
                         for (var _b = 0, _c = node.declarationList.declarations; _b < _c.length; _b++) {
                             var decl = _c[_b];
@@ -84812,7 +86396,7 @@
                         }
                     }
                     break;
-                case 252 /* FunctionDeclaration */:
+                case 254 /* FunctionDeclaration */:
                     if (ts.hasSyntacticModifier(node, 1 /* Export */)) {
                         if (ts.hasSyntacticModifier(node, 512 /* Default */)) {
                             // export default function() { }
@@ -84832,7 +86416,7 @@
                         }
                     }
                     break;
-                case 253 /* ClassDeclaration */:
+                case 255 /* ClassDeclaration */:
                     if (ts.hasSyntacticModifier(node, 1 /* Export */)) {
                         if (ts.hasSyntacticModifier(node, 512 /* Default */)) {
                             // export default class { }
@@ -84930,27 +86514,27 @@
     }
     ts.isSimpleInlineableExpression = isSimpleInlineableExpression;
     function isCompoundAssignment(kind) {
-        return kind >= 63 /* FirstCompoundAssignment */
-            && kind <= 77 /* LastCompoundAssignment */;
+        return kind >= 64 /* FirstCompoundAssignment */
+            && kind <= 78 /* LastCompoundAssignment */;
     }
     ts.isCompoundAssignment = isCompoundAssignment;
     function getNonAssignmentOperatorForCompoundAssignment(kind) {
         switch (kind) {
-            case 63 /* PlusEqualsToken */: return 39 /* PlusToken */;
-            case 64 /* MinusEqualsToken */: return 40 /* MinusToken */;
-            case 65 /* AsteriskEqualsToken */: return 41 /* AsteriskToken */;
-            case 66 /* AsteriskAsteriskEqualsToken */: return 42 /* AsteriskAsteriskToken */;
-            case 67 /* SlashEqualsToken */: return 43 /* SlashToken */;
-            case 68 /* PercentEqualsToken */: return 44 /* PercentToken */;
-            case 69 /* LessThanLessThanEqualsToken */: return 47 /* LessThanLessThanToken */;
-            case 70 /* GreaterThanGreaterThanEqualsToken */: return 48 /* GreaterThanGreaterThanToken */;
-            case 71 /* GreaterThanGreaterThanGreaterThanEqualsToken */: return 49 /* GreaterThanGreaterThanGreaterThanToken */;
-            case 72 /* AmpersandEqualsToken */: return 50 /* AmpersandToken */;
-            case 73 /* BarEqualsToken */: return 51 /* BarToken */;
-            case 77 /* CaretEqualsToken */: return 52 /* CaretToken */;
-            case 74 /* BarBarEqualsToken */: return 56 /* BarBarToken */;
-            case 75 /* AmpersandAmpersandEqualsToken */: return 55 /* AmpersandAmpersandToken */;
-            case 76 /* QuestionQuestionEqualsToken */: return 60 /* QuestionQuestionToken */;
+            case 64 /* PlusEqualsToken */: return 39 /* PlusToken */;
+            case 65 /* MinusEqualsToken */: return 40 /* MinusToken */;
+            case 66 /* AsteriskEqualsToken */: return 41 /* AsteriskToken */;
+            case 67 /* AsteriskAsteriskEqualsToken */: return 42 /* AsteriskAsteriskToken */;
+            case 68 /* SlashEqualsToken */: return 43 /* SlashToken */;
+            case 69 /* PercentEqualsToken */: return 44 /* PercentToken */;
+            case 70 /* LessThanLessThanEqualsToken */: return 47 /* LessThanLessThanToken */;
+            case 71 /* GreaterThanGreaterThanEqualsToken */: return 48 /* GreaterThanGreaterThanToken */;
+            case 72 /* GreaterThanGreaterThanGreaterThanEqualsToken */: return 49 /* GreaterThanGreaterThanGreaterThanToken */;
+            case 73 /* AmpersandEqualsToken */: return 50 /* AmpersandToken */;
+            case 74 /* BarEqualsToken */: return 51 /* BarToken */;
+            case 78 /* CaretEqualsToken */: return 52 /* CaretToken */;
+            case 75 /* BarBarEqualsToken */: return 56 /* BarBarToken */;
+            case 76 /* AmpersandAmpersandEqualsToken */: return 55 /* AmpersandAmpersandToken */;
+            case 77 /* QuestionQuestionEqualsToken */: return 60 /* QuestionQuestionToken */;
         }
     }
     ts.getNonAssignmentOperatorForCompoundAssignment = getNonAssignmentOperatorForCompoundAssignment;
@@ -84987,6 +86571,13 @@
         return ts.filter(node.members, function (m) { return isInitializedOrStaticProperty(m, requireInitializer, isStatic); });
     }
     ts.getProperties = getProperties;
+    function isStaticPropertyDeclarationOrClassStaticBlockDeclaration(element) {
+        return isStaticPropertyDeclaration(element) || ts.isClassStaticBlockDeclaration(element);
+    }
+    function getStaticPropertiesAndClassStaticBlock(node) {
+        return ts.filter(node.members, isStaticPropertyDeclarationOrClassStaticBlockDeclaration);
+    }
+    ts.getStaticPropertiesAndClassStaticBlock = getStaticPropertiesAndClassStaticBlock;
     /**
      * Is a class element either a static or an instance property declaration with an initializer?
      *
@@ -84998,6 +86589,9 @@
             && (!!member.initializer || !requireInitializer)
             && ts.hasStaticModifier(member) === isStatic;
     }
+    function isStaticPropertyDeclaration(member) {
+        return ts.isPropertyDeclaration(member) && ts.hasStaticModifier(member);
+    }
     /**
      * Gets a value indicating whether a class element is either a static or an instance property declaration with an initializer.
      *
@@ -85005,7 +86599,7 @@
      * @param isStatic A value indicating whether the member should be a static or instance member.
      */
     function isInitializedProperty(member) {
-        return member.kind === 164 /* PropertyDeclaration */
+        return member.kind === 165 /* PropertyDeclaration */
             && member.initializer !== undefined;
     }
     ts.isInitializedProperty = isInitializedProperty;
@@ -85015,7 +86609,7 @@
      * @param member The class element node.
      */
     function isNonStaticMethodOrAccessorWithPrivateName(member) {
-        return !ts.hasStaticModifier(member) && ts.isMethodOrAccessor(member) && ts.isPrivateIdentifier(member.name);
+        return !ts.isStatic(member) && ts.isMethodOrAccessor(member) && ts.isPrivateIdentifier(member.name);
     }
     ts.isNonStaticMethodOrAccessorWithPrivateName = isNonStaticMethodOrAccessorWithPrivateName;
 })(ts || (ts = {}));
@@ -85555,6 +87149,7 @@
         // Examples: `\n` is converted to "\\n", a template string with a newline to "\n".
         var text = node.rawText;
         if (text === undefined) {
+            ts.Debug.assertIsDefined(currentSourceFile, "Template literal node is missing 'rawText' and does not have a source file. Possibly bad transform.");
             text = ts.getSourceTextOfNodeFromSourceFile(currentSourceFile, node);
             // text contains the original source, it will also contain quotes ("`"), dolar signs and braces ("${" and "}"),
             // thus we need to remove those characters.
@@ -85616,8 +87211,8 @@
         context.onEmitNode = onEmitNode;
         context.onSubstituteNode = onSubstituteNode;
         // Enable substitution for property/element access to emit const enum values.
-        context.enableSubstitution(202 /* PropertyAccessExpression */);
-        context.enableSubstitution(203 /* ElementAccessExpression */);
+        context.enableSubstitution(204 /* PropertyAccessExpression */);
+        context.enableSubstitution(205 /* ElementAccessExpression */);
         // These variables contain state that changes as we descend into the tree.
         var currentSourceFile;
         var currentNamespace;
@@ -85643,14 +87238,14 @@
         var applicableSubstitutions;
         return transformSourceFileOrBundle;
         function transformSourceFileOrBundle(node) {
-            if (node.kind === 299 /* Bundle */) {
+            if (node.kind === 301 /* Bundle */) {
                 return transformBundle(node);
             }
             return transformSourceFile(node);
         }
         function transformBundle(node) {
             return factory.createBundle(node.sourceFiles.map(transformSourceFile), ts.mapDefined(node.prepends, function (prepend) {
-                if (prepend.kind === 301 /* InputFiles */) {
+                if (prepend.kind === 303 /* InputFiles */) {
                     return ts.createUnparsedSourceFile(prepend, "js");
                 }
                 return prepend;
@@ -85701,16 +87296,16 @@
          */
         function onBeforeVisitNode(node) {
             switch (node.kind) {
-                case 298 /* SourceFile */:
-                case 259 /* CaseBlock */:
-                case 258 /* ModuleBlock */:
-                case 231 /* Block */:
+                case 300 /* SourceFile */:
+                case 261 /* CaseBlock */:
+                case 260 /* ModuleBlock */:
+                case 233 /* Block */:
                     currentLexicalScope = node;
                     currentNameScope = undefined;
                     currentScopeFirstDeclarationsOfName = undefined;
                     break;
-                case 253 /* ClassDeclaration */:
-                case 252 /* FunctionDeclaration */:
+                case 255 /* ClassDeclaration */:
+                case 254 /* FunctionDeclaration */:
                     if (ts.hasSyntacticModifier(node, 2 /* Ambient */)) {
                         break;
                     }
@@ -85722,7 +87317,7 @@
                         // These nodes should always have names unless they are default-exports;
                         // however, class declaration parsing allows for undefined names, so syntactically invalid
                         // programs may also have an undefined name.
-                        ts.Debug.assert(node.kind === 253 /* ClassDeclaration */ || ts.hasSyntacticModifier(node, 512 /* Default */));
+                        ts.Debug.assert(node.kind === 255 /* ClassDeclaration */ || ts.hasSyntacticModifier(node, 512 /* Default */));
                     }
                     if (ts.isClassDeclaration(node)) {
                         // XXX: should probably also cover interfaces and type aliases that can have type variables?
@@ -85765,10 +87360,10 @@
          */
         function sourceElementVisitorWorker(node) {
             switch (node.kind) {
-                case 262 /* ImportDeclaration */:
-                case 261 /* ImportEqualsDeclaration */:
-                case 267 /* ExportAssignment */:
-                case 268 /* ExportDeclaration */:
+                case 264 /* ImportDeclaration */:
+                case 263 /* ImportEqualsDeclaration */:
+                case 269 /* ExportAssignment */:
+                case 270 /* ExportDeclaration */:
                     return visitElidableStatement(node);
                 default:
                     return visitorWorker(node);
@@ -85789,13 +87384,13 @@
                 return node;
             }
             switch (node.kind) {
-                case 262 /* ImportDeclaration */:
+                case 264 /* ImportDeclaration */:
                     return visitImportDeclaration(node);
-                case 261 /* ImportEqualsDeclaration */:
+                case 263 /* ImportEqualsDeclaration */:
                     return visitImportEqualsDeclaration(node);
-                case 267 /* ExportAssignment */:
+                case 269 /* ExportAssignment */:
                     return visitExportAssignment(node);
-                case 268 /* ExportDeclaration */:
+                case 270 /* ExportDeclaration */:
                     return visitExportDeclaration(node);
                 default:
                     ts.Debug.fail("Unhandled ellided statement");
@@ -85815,11 +87410,11 @@
          * @param node The node to visit.
          */
         function namespaceElementVisitorWorker(node) {
-            if (node.kind === 268 /* ExportDeclaration */ ||
-                node.kind === 262 /* ImportDeclaration */ ||
-                node.kind === 263 /* ImportClause */ ||
-                (node.kind === 261 /* ImportEqualsDeclaration */ &&
-                    node.moduleReference.kind === 273 /* ExternalModuleReference */)) {
+            if (node.kind === 270 /* ExportDeclaration */ ||
+                node.kind === 264 /* ImportDeclaration */ ||
+                node.kind === 265 /* ImportClause */ ||
+                (node.kind === 263 /* ImportEqualsDeclaration */ &&
+                    node.moduleReference.kind === 275 /* ExternalModuleReference */)) {
                 // do not emit ES6 imports and exports since they are illegal inside a namespace
                 return undefined;
             }
@@ -85843,19 +87438,20 @@
          */
         function classElementVisitorWorker(node) {
             switch (node.kind) {
-                case 167 /* Constructor */:
+                case 169 /* Constructor */:
                     return visitConstructor(node);
-                case 164 /* PropertyDeclaration */:
+                case 165 /* PropertyDeclaration */:
                     // Property declarations are not TypeScript syntax, but they must be visited
                     // for the decorator transformation.
                     return visitPropertyDeclaration(node);
-                case 172 /* IndexSignature */:
-                case 168 /* GetAccessor */:
-                case 169 /* SetAccessor */:
-                case 166 /* MethodDeclaration */:
+                case 174 /* IndexSignature */:
+                case 170 /* GetAccessor */:
+                case 171 /* SetAccessor */:
+                case 167 /* MethodDeclaration */:
+                case 168 /* ClassStaticBlockDeclaration */:
                     // Fallback to the default visit behavior.
                     return visitorWorker(node);
-                case 230 /* SemicolonClassElement */:
+                case 232 /* SemicolonClassElement */:
                     return node;
                 default:
                     return ts.Debug.failBadSyntaxKind(node);
@@ -85865,7 +87461,7 @@
             if (ts.modifierToFlag(node.kind) & 18654 /* TypeScriptModifier */) {
                 return undefined;
             }
-            else if (currentNamespace && node.kind === 92 /* ExportKeyword */) {
+            else if (currentNamespace && node.kind === 93 /* ExportKeyword */) {
                 return undefined;
             }
             return node;
@@ -85882,72 +87478,72 @@
                 return factory.createNotEmittedStatement(node);
             }
             switch (node.kind) {
-                case 92 /* ExportKeyword */:
-                case 87 /* DefaultKeyword */:
+                case 93 /* ExportKeyword */:
+                case 88 /* DefaultKeyword */:
                     // ES6 export and default modifiers are elided when inside a namespace.
                     return currentNamespace ? undefined : node;
-                case 122 /* PublicKeyword */:
-                case 120 /* PrivateKeyword */:
-                case 121 /* ProtectedKeyword */:
-                case 125 /* AbstractKeyword */:
-                case 156 /* OverrideKeyword */:
-                case 84 /* ConstKeyword */:
-                case 133 /* DeclareKeyword */:
-                case 142 /* ReadonlyKeyword */:
+                case 123 /* PublicKeyword */:
+                case 121 /* PrivateKeyword */:
+                case 122 /* ProtectedKeyword */:
+                case 126 /* AbstractKeyword */:
+                case 157 /* OverrideKeyword */:
+                case 85 /* ConstKeyword */:
+                case 134 /* DeclareKeyword */:
+                case 143 /* ReadonlyKeyword */:
                 // TypeScript accessibility and readonly modifiers are elided
                 // falls through
-                case 179 /* ArrayType */:
-                case 180 /* TupleType */:
-                case 181 /* OptionalType */:
-                case 182 /* RestType */:
-                case 178 /* TypeLiteral */:
-                case 173 /* TypePredicate */:
-                case 160 /* TypeParameter */:
-                case 128 /* AnyKeyword */:
-                case 152 /* UnknownKeyword */:
-                case 131 /* BooleanKeyword */:
-                case 147 /* StringKeyword */:
-                case 144 /* NumberKeyword */:
-                case 141 /* NeverKeyword */:
-                case 113 /* VoidKeyword */:
-                case 148 /* SymbolKeyword */:
-                case 176 /* ConstructorType */:
-                case 175 /* FunctionType */:
-                case 177 /* TypeQuery */:
-                case 174 /* TypeReference */:
-                case 183 /* UnionType */:
-                case 184 /* IntersectionType */:
-                case 185 /* ConditionalType */:
-                case 187 /* ParenthesizedType */:
-                case 188 /* ThisType */:
-                case 189 /* TypeOperator */:
-                case 190 /* IndexedAccessType */:
-                case 191 /* MappedType */:
-                case 192 /* LiteralType */:
+                case 181 /* ArrayType */:
+                case 182 /* TupleType */:
+                case 183 /* OptionalType */:
+                case 184 /* RestType */:
+                case 180 /* TypeLiteral */:
+                case 175 /* TypePredicate */:
+                case 161 /* TypeParameter */:
+                case 129 /* AnyKeyword */:
+                case 153 /* UnknownKeyword */:
+                case 132 /* BooleanKeyword */:
+                case 148 /* StringKeyword */:
+                case 145 /* NumberKeyword */:
+                case 142 /* NeverKeyword */:
+                case 114 /* VoidKeyword */:
+                case 149 /* SymbolKeyword */:
+                case 178 /* ConstructorType */:
+                case 177 /* FunctionType */:
+                case 179 /* TypeQuery */:
+                case 176 /* TypeReference */:
+                case 185 /* UnionType */:
+                case 186 /* IntersectionType */:
+                case 187 /* ConditionalType */:
+                case 189 /* ParenthesizedType */:
+                case 190 /* ThisType */:
+                case 191 /* TypeOperator */:
+                case 192 /* IndexedAccessType */:
+                case 193 /* MappedType */:
+                case 194 /* LiteralType */:
                 // TypeScript type nodes are elided.
                 // falls through
-                case 172 /* IndexSignature */:
+                case 174 /* IndexSignature */:
                 // TypeScript index signatures are elided.
                 // falls through
-                case 162 /* Decorator */:
-                // TypeScript decorators are elided. They will be emitted as part of visitClassDeclaration.
-                // falls through
-                case 255 /* TypeAliasDeclaration */:
-                    // TypeScript type-only declarations are elided.
+                case 163 /* Decorator */:
+                    // TypeScript decorators are elided. They will be emitted as part of visitClassDeclaration.
                     return undefined;
-                case 164 /* PropertyDeclaration */:
+                case 257 /* TypeAliasDeclaration */:
+                    // TypeScript type-only declarations are elided.
+                    return factory.createNotEmittedStatement(node);
+                case 165 /* PropertyDeclaration */:
                     // TypeScript property declarations are elided. However their names are still visited, and can potentially be retained if they could have sideeffects
                     return visitPropertyDeclaration(node);
-                case 260 /* NamespaceExportDeclaration */:
+                case 262 /* NamespaceExportDeclaration */:
                     // TypeScript namespace export declarations are elided.
                     return undefined;
-                case 167 /* Constructor */:
+                case 169 /* Constructor */:
                     return visitConstructor(node);
-                case 254 /* InterfaceDeclaration */:
+                case 256 /* InterfaceDeclaration */:
                     // TypeScript interfaces are elided, but some comments may be preserved.
                     // See the implementation of `getLeadingComments` in comments.ts for more details.
                     return factory.createNotEmittedStatement(node);
-                case 253 /* ClassDeclaration */:
+                case 255 /* ClassDeclaration */:
                     // This may be a class declaration with TypeScript syntax extensions.
                     //
                     // TypeScript class syntax extensions include:
@@ -85957,7 +87553,7 @@
                     // - index signatures
                     // - method overload signatures
                     return visitClassDeclaration(node);
-                case 222 /* ClassExpression */:
+                case 224 /* ClassExpression */:
                     // This may be a class expression with TypeScript syntax extensions.
                     //
                     // TypeScript class syntax extensions include:
@@ -85967,35 +87563,35 @@
                     // - index signatures
                     // - method overload signatures
                     return visitClassExpression(node);
-                case 287 /* HeritageClause */:
+                case 289 /* HeritageClause */:
                     // This may be a heritage clause with TypeScript syntax extensions.
                     //
                     // TypeScript heritage clause extensions include:
                     // - `implements` clause
                     return visitHeritageClause(node);
-                case 224 /* ExpressionWithTypeArguments */:
+                case 226 /* ExpressionWithTypeArguments */:
                     // TypeScript supports type arguments on an expression in an `extends` heritage clause.
                     return visitExpressionWithTypeArguments(node);
-                case 166 /* MethodDeclaration */:
+                case 167 /* MethodDeclaration */:
                     // TypeScript method declarations may have decorators, modifiers
                     // or type annotations.
                     return visitMethodDeclaration(node);
-                case 168 /* GetAccessor */:
+                case 170 /* GetAccessor */:
                     // Get Accessors can have TypeScript modifiers, decorators, and type annotations.
                     return visitGetAccessor(node);
-                case 169 /* SetAccessor */:
+                case 171 /* SetAccessor */:
                     // Set Accessors can have TypeScript modifiers and type annotations.
                     return visitSetAccessor(node);
-                case 252 /* FunctionDeclaration */:
+                case 254 /* FunctionDeclaration */:
                     // Typescript function declarations can have modifiers, decorators, and type annotations.
                     return visitFunctionDeclaration(node);
-                case 209 /* FunctionExpression */:
+                case 211 /* FunctionExpression */:
                     // TypeScript function expressions can have modifiers and type annotations.
                     return visitFunctionExpression(node);
-                case 210 /* ArrowFunction */:
+                case 212 /* ArrowFunction */:
                     // TypeScript arrow functions can have modifiers and type annotations.
                     return visitArrowFunction(node);
-                case 161 /* Parameter */:
+                case 162 /* Parameter */:
                     // This may be a parameter declaration with TypeScript syntax extensions.
                     //
                     // TypeScript parameter declaration syntax extensions include:
@@ -86005,40 +87601,40 @@
                     // - type annotations
                     // - this parameters
                     return visitParameter(node);
-                case 208 /* ParenthesizedExpression */:
+                case 210 /* ParenthesizedExpression */:
                     // ParenthesizedExpressions are TypeScript if their expression is a
                     // TypeAssertion or AsExpression
                     return visitParenthesizedExpression(node);
-                case 207 /* TypeAssertionExpression */:
-                case 225 /* AsExpression */:
+                case 209 /* TypeAssertionExpression */:
+                case 227 /* AsExpression */:
                     // TypeScript type assertions are removed, but their subtrees are preserved.
                     return visitAssertionExpression(node);
-                case 204 /* CallExpression */:
+                case 206 /* CallExpression */:
                     return visitCallExpression(node);
-                case 205 /* NewExpression */:
+                case 207 /* NewExpression */:
                     return visitNewExpression(node);
-                case 206 /* TaggedTemplateExpression */:
+                case 208 /* TaggedTemplateExpression */:
                     return visitTaggedTemplateExpression(node);
-                case 226 /* NonNullExpression */:
+                case 228 /* NonNullExpression */:
                     // TypeScript non-null expressions are removed, but their subtrees are preserved.
                     return visitNonNullExpression(node);
-                case 256 /* EnumDeclaration */:
+                case 258 /* EnumDeclaration */:
                     // TypeScript enum declarations do not exist in ES6 and must be rewritten.
                     return visitEnumDeclaration(node);
-                case 233 /* VariableStatement */:
+                case 235 /* VariableStatement */:
                     // TypeScript namespace exports for variable statements must be transformed.
                     return visitVariableStatement(node);
-                case 250 /* VariableDeclaration */:
+                case 252 /* VariableDeclaration */:
                     return visitVariableDeclaration(node);
-                case 257 /* ModuleDeclaration */:
+                case 259 /* ModuleDeclaration */:
                     // TypeScript namespace declarations must be transformed.
                     return visitModuleDeclaration(node);
-                case 261 /* ImportEqualsDeclaration */:
+                case 263 /* ImportEqualsDeclaration */:
                     // TypeScript namespace or external module import.
                     return visitImportEqualsDeclaration(node);
-                case 275 /* JsxSelfClosingElement */:
+                case 277 /* JsxSelfClosingElement */:
                     return visitJsxSelfClosingElement(node);
-                case 276 /* JsxOpeningElement */:
+                case 278 /* JsxOpeningElement */:
                     return visitJsxJsxOpeningElement(node);
                 default:
                     // node contains some other TypeScript syntax
@@ -86051,33 +87647,14 @@
                 !ts.isJsonSourceFile(node);
             return factory.updateSourceFile(node, ts.visitLexicalEnvironment(node.statements, sourceElementVisitor, context, /*start*/ 0, alwaysStrict));
         }
-        /**
-         * Tests whether we should emit a __decorate call for a class declaration.
-         */
-        function shouldEmitDecorateCallForClass(node) {
-            if (node.decorators && node.decorators.length > 0) {
-                return true;
-            }
-            var constructor = ts.getFirstConstructorWithBody(node);
-            if (constructor) {
-                return ts.forEach(constructor.parameters, shouldEmitDecorateCallForParameter);
-            }
-            return false;
-        }
-        /**
-         * Tests whether we should emit a __decorate call for a parameter declaration.
-         */
-        function shouldEmitDecorateCallForParameter(parameter) {
-            return parameter.decorators !== undefined && parameter.decorators.length > 0;
-        }
         function getClassFacts(node, staticProperties) {
             var facts = 0 /* None */;
             if (ts.some(staticProperties))
                 facts |= 1 /* HasStaticInitializedProperties */;
             var extendsClauseElement = ts.getEffectiveBaseTypeNode(node);
-            if (extendsClauseElement && ts.skipOuterExpressions(extendsClauseElement.expression).kind !== 103 /* NullKeyword */)
+            if (extendsClauseElement && ts.skipOuterExpressions(extendsClauseElement.expression).kind !== 104 /* NullKeyword */)
                 facts |= 64 /* IsDerivedClass */;
-            if (shouldEmitDecorateCallForClass(node))
+            if (ts.classOrConstructorParameterIsDecorated(node))
                 facts |= 2 /* HasConstructorDecorators */;
             if (ts.childIsDecorated(node))
                 facts |= 4 /* HasMemberDecorators */;
@@ -86298,7 +87875,11 @@
             //
             var location = ts.moveRangePastDecorators(node);
             var classAlias = getClassAliasIfNeeded(node);
-            var declName = factory.getLocalName(node, /*allowComments*/ false, /*allowSourceMaps*/ true);
+            // When we transform to ES5/3 this will be moved inside an IIFE and should reference the name
+            // without any block-scoped variable collision handling
+            var declName = languageVersion <= 2 /* ES2015 */ ?
+                factory.getInternalName(node, /*allowComments*/ false, /*allowSourceMaps*/ true) :
+                factory.getLocalName(node, /*allowComments*/ false, /*allowSourceMaps*/ true);
             //  ... = class ${name} ${heritageClauses} {
             //      ${members}
             //  }
@@ -86376,7 +87957,7 @@
          * @param member The class member.
          */
         function isStaticDecoratedClassElement(member, parent) {
-            return isDecoratedClassElement(member, /*isStatic*/ true, parent);
+            return isDecoratedClassElement(member, /*isStaticElement*/ true, parent);
         }
         /**
          * Determines whether a class member is an instance member of a class that is decorated,
@@ -86385,7 +87966,7 @@
          * @param member The class member.
          */
         function isInstanceDecoratedClassElement(member, parent) {
-            return isDecoratedClassElement(member, /*isStatic*/ false, parent);
+            return isDecoratedClassElement(member, /*isStaticElement*/ false, parent);
         }
         /**
          * Determines whether a class member is either a static or an instance member of a class
@@ -86393,9 +87974,9 @@
          *
          * @param member The class member.
          */
-        function isDecoratedClassElement(member, isStatic, parent) {
+        function isDecoratedClassElement(member, isStaticElement, parent) {
             return ts.nodeOrChildIsDecorated(member, parent)
-                && isStatic === ts.hasSyntacticModifier(member, 32 /* Static */);
+                && isStaticElement === ts.isStatic(member);
         }
         /**
          * Gets an array of arrays of decorators for the parameters of a function-like node.
@@ -86447,12 +88028,12 @@
          */
         function getAllDecoratorsOfClassElement(node, member) {
             switch (member.kind) {
-                case 168 /* GetAccessor */:
-                case 169 /* SetAccessor */:
+                case 170 /* GetAccessor */:
+                case 171 /* SetAccessor */:
                     return getAllDecoratorsOfAccessors(node, member);
-                case 166 /* MethodDeclaration */:
+                case 167 /* MethodDeclaration */:
                     return getAllDecoratorsOfMethod(member);
-                case 164 /* PropertyDeclaration */:
+                case 165 /* PropertyDeclaration */:
                     return getAllDecoratorsOfProperty(member);
                 default:
                     return undefined;
@@ -86605,7 +88186,7 @@
             var prefix = getClassMemberPrefix(node, member);
             var memberName = getExpressionForPropertyName(member, /*generateNameForComputedPropertyName*/ true);
             var descriptor = languageVersion > 0 /* ES3 */
-                ? member.kind === 164 /* PropertyDeclaration */
+                ? member.kind === 165 /* PropertyDeclaration */
                     // We emit `void 0` here to indicate to `__decorate` that it can invoke `Object.defineProperty` directly, but that it
                     // should not invoke `Object.getOwnPropertyDescriptor`.
                     ? factory.createVoidZero()
@@ -86641,7 +88222,11 @@
                 return undefined;
             }
             var classAlias = classAliases && classAliases[ts.getOriginalNodeId(node)];
-            var localName = factory.getLocalName(node, /*allowComments*/ false, /*allowSourceMaps*/ true);
+            // When we transform to ES5/3 this will be moved inside an IIFE and should reference the name
+            // without any block-scoped variable collision handling
+            var localName = languageVersion <= 2 /* ES2015 */ ?
+                factory.getInternalName(node, /*allowComments*/ false, /*allowSourceMaps*/ true) :
+                factory.getLocalName(node, /*allowComments*/ false, /*allowSourceMaps*/ true);
             var decorate = emitHelpers().createDecorateHelper(decoratorExpressions, localName);
             var expression = factory.createAssignment(localName, classAlias ? factory.createAssignment(classAlias, decorate) : decorate);
             ts.setEmitFlags(expression, 1536 /* NoComments */);
@@ -86729,10 +88314,10 @@
          */
         function shouldAddTypeMetadata(node) {
             var kind = node.kind;
-            return kind === 166 /* MethodDeclaration */
-                || kind === 168 /* GetAccessor */
-                || kind === 169 /* SetAccessor */
-                || kind === 164 /* PropertyDeclaration */;
+            return kind === 167 /* MethodDeclaration */
+                || kind === 170 /* GetAccessor */
+                || kind === 171 /* SetAccessor */
+                || kind === 165 /* PropertyDeclaration */;
         }
         /**
          * Determines whether to emit the "design:returntype" metadata based on the node's kind.
@@ -86742,7 +88327,7 @@
          * @param node The node to test.
          */
         function shouldAddReturnTypeMetadata(node) {
-            return node.kind === 166 /* MethodDeclaration */;
+            return node.kind === 167 /* MethodDeclaration */;
         }
         /**
          * Determines whether to emit the "design:paramtypes" metadata based on the node's kind.
@@ -86753,12 +88338,12 @@
          */
         function shouldAddParamTypesMetadata(node) {
             switch (node.kind) {
-                case 253 /* ClassDeclaration */:
-                case 222 /* ClassExpression */:
+                case 255 /* ClassDeclaration */:
+                case 224 /* ClassExpression */:
                     return ts.getFirstConstructorWithBody(node) !== undefined;
-                case 166 /* MethodDeclaration */:
-                case 168 /* GetAccessor */:
-                case 169 /* SetAccessor */:
+                case 167 /* MethodDeclaration */:
+                case 170 /* GetAccessor */:
+                case 171 /* SetAccessor */:
                     return true;
             }
             return false;
@@ -86775,15 +88360,15 @@
          */
         function serializeTypeOfNode(node) {
             switch (node.kind) {
-                case 164 /* PropertyDeclaration */:
-                case 161 /* Parameter */:
+                case 165 /* PropertyDeclaration */:
+                case 162 /* Parameter */:
                     return serializeTypeNode(node.type);
-                case 169 /* SetAccessor */:
-                case 168 /* GetAccessor */:
+                case 171 /* SetAccessor */:
+                case 170 /* GetAccessor */:
                     return serializeTypeNode(getAccessorTypeNode(node));
-                case 253 /* ClassDeclaration */:
-                case 222 /* ClassExpression */:
-                case 166 /* MethodDeclaration */:
+                case 255 /* ClassDeclaration */:
+                case 224 /* ClassExpression */:
+                case 167 /* MethodDeclaration */:
                     return factory.createIdentifier("Function");
                 default:
                     return factory.createVoidZero();
@@ -86820,7 +88405,7 @@
             return factory.createArrayLiteralExpression(expressions);
         }
         function getParametersOfDecoratedDeclaration(node, container) {
-            if (container && node.kind === 168 /* GetAccessor */) {
+            if (container && node.kind === 170 /* GetAccessor */) {
                 var setAccessor = ts.getAllAccessorDeclarations(container.members, node).setAccessor;
                 if (setAccessor) {
                     return setAccessor.parameters;
@@ -86865,82 +88450,82 @@
                 return factory.createIdentifier("Object");
             }
             switch (node.kind) {
-                case 113 /* VoidKeyword */:
-                case 150 /* UndefinedKeyword */:
-                case 141 /* NeverKeyword */:
+                case 114 /* VoidKeyword */:
+                case 151 /* UndefinedKeyword */:
+                case 142 /* NeverKeyword */:
                     return factory.createVoidZero();
-                case 187 /* ParenthesizedType */:
+                case 189 /* ParenthesizedType */:
                     return serializeTypeNode(node.type);
-                case 175 /* FunctionType */:
-                case 176 /* ConstructorType */:
+                case 177 /* FunctionType */:
+                case 178 /* ConstructorType */:
                     return factory.createIdentifier("Function");
-                case 179 /* ArrayType */:
-                case 180 /* TupleType */:
+                case 181 /* ArrayType */:
+                case 182 /* TupleType */:
                     return factory.createIdentifier("Array");
-                case 173 /* TypePredicate */:
-                case 131 /* BooleanKeyword */:
+                case 175 /* TypePredicate */:
+                case 132 /* BooleanKeyword */:
                     return factory.createIdentifier("Boolean");
-                case 147 /* StringKeyword */:
+                case 148 /* StringKeyword */:
                     return factory.createIdentifier("String");
-                case 145 /* ObjectKeyword */:
+                case 146 /* ObjectKeyword */:
                     return factory.createIdentifier("Object");
-                case 192 /* LiteralType */:
+                case 194 /* LiteralType */:
                     switch (node.literal.kind) {
                         case 10 /* StringLiteral */:
                         case 14 /* NoSubstitutionTemplateLiteral */:
                             return factory.createIdentifier("String");
-                        case 215 /* PrefixUnaryExpression */:
+                        case 217 /* PrefixUnaryExpression */:
                         case 8 /* NumericLiteral */:
                             return factory.createIdentifier("Number");
                         case 9 /* BigIntLiteral */:
                             return getGlobalBigIntNameWithFallback();
-                        case 109 /* TrueKeyword */:
-                        case 94 /* FalseKeyword */:
+                        case 110 /* TrueKeyword */:
+                        case 95 /* FalseKeyword */:
                             return factory.createIdentifier("Boolean");
-                        case 103 /* NullKeyword */:
+                        case 104 /* NullKeyword */:
                             return factory.createVoidZero();
                         default:
                             return ts.Debug.failBadSyntaxKind(node.literal);
                     }
-                case 144 /* NumberKeyword */:
+                case 145 /* NumberKeyword */:
                     return factory.createIdentifier("Number");
-                case 155 /* BigIntKeyword */:
+                case 156 /* BigIntKeyword */:
                     return getGlobalBigIntNameWithFallback();
-                case 148 /* SymbolKeyword */:
+                case 149 /* SymbolKeyword */:
                     return languageVersion < 2 /* ES2015 */
                         ? getGlobalSymbolNameWithFallback()
                         : factory.createIdentifier("Symbol");
-                case 174 /* TypeReference */:
+                case 176 /* TypeReference */:
                     return serializeTypeReferenceNode(node);
-                case 184 /* IntersectionType */:
-                case 183 /* UnionType */:
+                case 186 /* IntersectionType */:
+                case 185 /* UnionType */:
                     return serializeTypeList(node.types);
-                case 185 /* ConditionalType */:
+                case 187 /* ConditionalType */:
                     return serializeTypeList([node.trueType, node.falseType]);
-                case 189 /* TypeOperator */:
-                    if (node.operator === 142 /* ReadonlyKeyword */) {
+                case 191 /* TypeOperator */:
+                    if (node.operator === 143 /* ReadonlyKeyword */) {
                         return serializeTypeNode(node.type);
                     }
                     break;
-                case 177 /* TypeQuery */:
-                case 190 /* IndexedAccessType */:
-                case 191 /* MappedType */:
-                case 178 /* TypeLiteral */:
-                case 128 /* AnyKeyword */:
-                case 152 /* UnknownKeyword */:
-                case 188 /* ThisType */:
-                case 196 /* ImportType */:
+                case 179 /* TypeQuery */:
+                case 192 /* IndexedAccessType */:
+                case 193 /* MappedType */:
+                case 180 /* TypeLiteral */:
+                case 129 /* AnyKeyword */:
+                case 153 /* UnknownKeyword */:
+                case 190 /* ThisType */:
+                case 198 /* ImportType */:
                     break;
                 // handle JSDoc types from an invalid parse
-                case 304 /* JSDocAllType */:
-                case 305 /* JSDocUnknownType */:
-                case 309 /* JSDocFunctionType */:
-                case 310 /* JSDocVariadicType */:
-                case 311 /* JSDocNamepathType */:
+                case 307 /* JSDocAllType */:
+                case 308 /* JSDocUnknownType */:
+                case 312 /* JSDocFunctionType */:
+                case 313 /* JSDocVariadicType */:
+                case 314 /* JSDocNamepathType */:
                     break;
-                case 306 /* JSDocNullableType */:
-                case 307 /* JSDocNonNullableType */:
-                case 308 /* JSDocOptionalType */:
+                case 309 /* JSDocNullableType */:
+                case 310 /* JSDocNonNullableType */:
+                case 311 /* JSDocOptionalType */:
                     return serializeTypeNode(node.type);
                 default:
                     return ts.Debug.failBadSyntaxKind(node);
@@ -86951,15 +88536,15 @@
             // Note when updating logic here also update getEntityNameForDecoratorMetadata
             // so that aliases can be marked as referenced
             var serializedUnion;
-            for (var _i = 0, types_24 = types; _i < types_24.length; _i++) {
-                var typeNode = types_24[_i];
-                while (typeNode.kind === 187 /* ParenthesizedType */) {
+            for (var _i = 0, types_23 = types; _i < types_23.length; _i++) {
+                var typeNode = types_23[_i];
+                while (typeNode.kind === 189 /* ParenthesizedType */) {
                     typeNode = typeNode.type; // Skip parens if need be
                 }
-                if (typeNode.kind === 141 /* NeverKeyword */) {
+                if (typeNode.kind === 142 /* NeverKeyword */) {
                     continue; // Always elide `never` from the union/intersection if possible
                 }
-                if (!strictNullChecks && (typeNode.kind === 192 /* LiteralType */ && typeNode.literal.kind === 103 /* NullKeyword */ || typeNode.kind === 150 /* UndefinedKeyword */)) {
+                if (!strictNullChecks && (typeNode.kind === 194 /* LiteralType */ && typeNode.literal.kind === 104 /* NullKeyword */ || typeNode.kind === 151 /* UndefinedKeyword */)) {
                     continue; // Elide null and undefined from unions for metadata, just like what we did prior to the implementation of strict null checks
                 }
                 var serializedIndividual = serializeTypeNode(typeNode);
@@ -87041,12 +88626,12 @@
          * @param node The entity name to serialize.
          */
         function serializeEntityNameAsExpressionFallback(node) {
-            if (node.kind === 78 /* Identifier */) {
+            if (node.kind === 79 /* Identifier */) {
                 // A -> typeof A !== undefined && A
                 var copied = serializeEntityNameAsExpression(node);
                 return createCheckedValue(copied, copied);
             }
-            if (node.left.kind === 78 /* Identifier */) {
+            if (node.left.kind === 79 /* Identifier */) {
                 // A.B -> typeof A !== undefined && A.B
                 return createCheckedValue(serializeEntityNameAsExpression(node.left), serializeEntityNameAsExpression(node));
             }
@@ -87062,14 +88647,14 @@
          */
         function serializeEntityNameAsExpression(node) {
             switch (node.kind) {
-                case 78 /* Identifier */:
+                case 79 /* Identifier */:
                     // Create a clone of the name with a new parent, and treat it as if it were
                     // a source tree node for the purposes of the checker.
                     var name = ts.setParent(ts.setTextRange(ts.parseNodeFactory.cloneNode(node), node), node.parent);
                     name.original = undefined;
                     ts.setParent(name, ts.getParseTreeNode(currentLexicalScope)); // ensure the parent is set to a parse tree node.
                     return name;
-                case 158 /* QualifiedName */:
+                case 159 /* QualifiedName */:
                     return serializeQualifiedNameAsExpression(node);
             }
         }
@@ -87160,7 +88745,7 @@
          * @param node The HeritageClause to transform.
          */
         function visitHeritageClause(node) {
-            if (node.token === 116 /* ImplementsKeyword */) {
+            if (node.token === 117 /* ImplementsKeyword */) {
                 // implements clauses are elided
                 return undefined;
             }
@@ -87642,12 +89227,12 @@
             // enums in any other scope are emitted as a `let` declaration.
             var statement = factory.createVariableStatement(ts.visitNodes(node.modifiers, modifierVisitor, ts.isModifier), factory.createVariableDeclarationList([
                 factory.createVariableDeclaration(factory.getLocalName(node, /*allowComments*/ false, /*allowSourceMaps*/ true))
-            ], currentLexicalScope.kind === 298 /* SourceFile */ ? 0 /* None */ : 1 /* Let */));
+            ], currentLexicalScope.kind === 300 /* SourceFile */ ? 0 /* None */ : 1 /* Let */));
             ts.setOriginalNode(statement, node);
             recordEmittedDeclarationInScope(node);
             if (isFirstEmittedDeclarationInScope(node)) {
                 // Adjust the source map emit to match the old emitter.
-                if (node.kind === 256 /* EnumDeclaration */) {
+                if (node.kind === 258 /* EnumDeclaration */) {
                     ts.setSourceMapRange(statement.declarationList, node);
                 }
                 else {
@@ -87772,7 +89357,7 @@
             var statementsLocation;
             var blockLocation;
             if (node.body) {
-                if (node.body.kind === 258 /* ModuleBlock */) {
+                if (node.body.kind === 260 /* ModuleBlock */) {
                     saveStateAndInvoke(node.body, function (body) { return ts.addRange(statements, ts.visitNodes(body.statements, namespaceElementVisitor, ts.isStatement)); });
                     statementsLocation = node.body.statements;
                     blockLocation = node.body;
@@ -87819,13 +89404,13 @@
             //     })(hi = hello.hi || (hello.hi = {}));
             // })(hello || (hello = {}));
             // We only want to emit comment on the namespace which contains block body itself, not the containing namespaces.
-            if (!node.body || node.body.kind !== 258 /* ModuleBlock */) {
+            if (!node.body || node.body.kind !== 260 /* ModuleBlock */) {
                 ts.setEmitFlags(block, ts.getEmitFlags(block) | 1536 /* NoComments */);
             }
             return block;
         }
         function getInnerMostModuleDeclarationFromDottedModule(moduleDeclaration) {
-            if (moduleDeclaration.body.kind === 257 /* ModuleDeclaration */) {
+            if (moduleDeclaration.body.kind === 259 /* ModuleDeclaration */) {
                 var recursiveInnerModule = getInnerMostModuleDeclarationFromDottedModule(moduleDeclaration.body);
                 return recursiveInnerModule || moduleDeclaration.body;
             }
@@ -87875,7 +89460,7 @@
          * @param node The named import bindings node.
          */
         function visitNamedImportBindings(node) {
-            if (node.kind === 264 /* NamespaceImport */) {
+            if (node.kind === 266 /* NamespaceImport */) {
                 // Elide a namespace import if it is not referenced.
                 return resolver.isReferencedAliasDeclaration(node) ? node : undefined;
             }
@@ -88102,14 +89687,14 @@
             return factory.createPropertyAccessExpression(factory.getDeclarationName(node), "prototype");
         }
         function getClassMemberPrefix(node, member) {
-            return ts.hasSyntacticModifier(member, 32 /* Static */)
+            return ts.isStatic(member)
                 ? factory.getDeclarationName(node)
                 : getClassPrototype(node);
         }
         function enableSubstitutionForNonQualifiedEnumMembers() {
             if ((enabledSubstitutions & 8 /* NonQualifiedEnumMembers */) === 0) {
                 enabledSubstitutions |= 8 /* NonQualifiedEnumMembers */;
-                context.enableSubstitution(78 /* Identifier */);
+                context.enableSubstitution(79 /* Identifier */);
             }
         }
         function enableSubstitutionForClassAliases() {
@@ -88117,7 +89702,7 @@
                 enabledSubstitutions |= 1 /* ClassAliases */;
                 // We need to enable substitutions for identifiers. This allows us to
                 // substitute class names inside of a class declaration.
-                context.enableSubstitution(78 /* Identifier */);
+                context.enableSubstitution(79 /* Identifier */);
                 // Keep track of class aliases.
                 classAliases = [];
             }
@@ -88127,17 +89712,17 @@
                 enabledSubstitutions |= 2 /* NamespaceExports */;
                 // We need to enable substitutions for identifiers and shorthand property assignments. This allows us to
                 // substitute the names of exported members of a namespace.
-                context.enableSubstitution(78 /* Identifier */);
-                context.enableSubstitution(290 /* ShorthandPropertyAssignment */);
+                context.enableSubstitution(79 /* Identifier */);
+                context.enableSubstitution(292 /* ShorthandPropertyAssignment */);
                 // We need to be notified when entering and exiting namespaces.
-                context.enableEmitNotification(257 /* ModuleDeclaration */);
+                context.enableEmitNotification(259 /* ModuleDeclaration */);
             }
         }
         function isTransformedModuleDeclaration(node) {
-            return ts.getOriginalNode(node).kind === 257 /* ModuleDeclaration */;
+            return ts.getOriginalNode(node).kind === 259 /* ModuleDeclaration */;
         }
         function isTransformedEnumDeclaration(node) {
-            return ts.getOriginalNode(node).kind === 256 /* EnumDeclaration */;
+            return ts.getOriginalNode(node).kind === 258 /* EnumDeclaration */;
         }
         /**
          * Hook for node emit.
@@ -88196,11 +89781,11 @@
         }
         function substituteExpression(node) {
             switch (node.kind) {
-                case 78 /* Identifier */:
+                case 79 /* Identifier */:
                     return substituteExpressionIdentifier(node);
-                case 202 /* PropertyAccessExpression */:
+                case 204 /* PropertyAccessExpression */:
                     return substitutePropertyAccessExpression(node);
-                case 203 /* ElementAccessExpression */:
+                case 205 /* ElementAccessExpression */:
                     return substituteElementAccessExpression(node);
             }
             return node;
@@ -88238,9 +89823,9 @@
                 // If we are nested within a namespace declaration, we may need to qualifiy
                 // an identifier that is exported from a merged namespace.
                 var container = resolver.getReferencedExportContainer(node, /*prefixLocals*/ false);
-                if (container && container.kind !== 298 /* SourceFile */) {
-                    var substitute = (applicableSubstitutions & 2 /* NamespaceExports */ && container.kind === 257 /* ModuleDeclaration */) ||
-                        (applicableSubstitutions & 8 /* NonQualifiedEnumMembers */ && container.kind === 256 /* EnumDeclaration */);
+                if (container && container.kind !== 300 /* SourceFile */) {
+                    var substitute = (applicableSubstitutions & 2 /* NamespaceExports */ && container.kind === 259 /* ModuleDeclaration */) ||
+                        (applicableSubstitutions & 8 /* NonQualifiedEnumMembers */ && container.kind === 258 /* EnumDeclaration */);
                     if (substitute) {
                         return ts.setTextRange(factory.createPropertyAccessExpression(factory.getGeneratedNameForNode(container), node), 
                         /*location*/ node);
@@ -88291,6 +89876,11 @@
          * which have initializers that reference the class name.
          */
         ClassPropertySubstitutionFlags[ClassPropertySubstitutionFlags["ClassAliases"] = 1] = "ClassAliases";
+        /**
+         * Enables substitutions for class expressions with static fields
+         * which have initializers that reference the 'this' or 'super'.
+         */
+        ClassPropertySubstitutionFlags[ClassPropertySubstitutionFlags["ClassStaticThisOrSuperReference"] = 2] = "ClassStaticThisOrSuperReference";
     })(ClassPropertySubstitutionFlags || (ClassPropertySubstitutionFlags = {}));
     var PrivateIdentifierKind;
     (function (PrivateIdentifierKind) {
@@ -88298,6 +89888,14 @@
         PrivateIdentifierKind["Method"] = "m";
         PrivateIdentifierKind["Accessor"] = "a";
     })(PrivateIdentifierKind = ts.PrivateIdentifierKind || (ts.PrivateIdentifierKind = {}));
+    var ClassFacts;
+    (function (ClassFacts) {
+        ClassFacts[ClassFacts["None"] = 0] = "None";
+        ClassFacts[ClassFacts["ClassWasDecorated"] = 1] = "ClassWasDecorated";
+        ClassFacts[ClassFacts["NeedsClassConstructorReference"] = 2] = "NeedsClassConstructorReference";
+        ClassFacts[ClassFacts["NeedsClassSuperReference"] = 4] = "NeedsClassSuperReference";
+        ClassFacts[ClassFacts["NeedsSubstitutionForThisInClassStaticField"] = 8] = "NeedsSubstitutionForThisInClassStaticField";
+    })(ClassFacts || (ClassFacts = {}));
     /**
      * Transforms ECMAScript Class Syntax.
      * TypeScript parameter property syntax is transformed in the TypeScript transformer.
@@ -88306,14 +89904,20 @@
      * When --useDefineForClassFields is on, this transforms to ECMAScript semantics, with Object.defineProperty.
      */
     function transformClassFields(context) {
-        var factory = context.factory, hoistVariableDeclaration = context.hoistVariableDeclaration, endLexicalEnvironment = context.endLexicalEnvironment, resumeLexicalEnvironment = context.resumeLexicalEnvironment, addBlockScopedVariable = context.addBlockScopedVariable;
+        var factory = context.factory, hoistVariableDeclaration = context.hoistVariableDeclaration, endLexicalEnvironment = context.endLexicalEnvironment, startLexicalEnvironment = context.startLexicalEnvironment, resumeLexicalEnvironment = context.resumeLexicalEnvironment, addBlockScopedVariable = context.addBlockScopedVariable;
         var resolver = context.getEmitResolver();
         var compilerOptions = context.getCompilerOptions();
         var languageVersion = ts.getEmitScriptTarget(compilerOptions);
         var useDefineForClassFields = ts.getUseDefineForClassFields(compilerOptions);
-        var shouldTransformPrivateElements = languageVersion < 99 /* ESNext */;
+        var shouldTransformPrivateElementsOrClassStaticBlocks = languageVersion < 99 /* ESNext */;
+        // We don't need to transform `super` property access when targeting ES5, ES3 because
+        // the es2015 transformation handles those.
+        var shouldTransformSuperInStaticInitializers = (languageVersion <= 8 /* ES2021 */ || !useDefineForClassFields) && languageVersion >= 2 /* ES2015 */;
+        var shouldTransformThisInStaticInitializers = languageVersion <= 8 /* ES2021 */ || !useDefineForClassFields;
         var previousOnSubstituteNode = context.onSubstituteNode;
         context.onSubstituteNode = onSubstituteNode;
+        var previousOnEmitNode = context.onEmitNode;
+        context.onEmitNode = onEmitNode;
         var enabledSubstitutions;
         var classAliases;
         /**
@@ -88326,8 +89930,11 @@
          * emitted at the next execution site, in document order (for decorated classes).
          */
         var pendingStatements;
-        var privateIdentifierEnvironmentStack = [];
-        var currentPrivateIdentifierEnvironment;
+        var classLexicalEnvironmentStack = [];
+        var classLexicalEnvironmentMap = new ts.Map();
+        var currentClassLexicalEnvironment;
+        var currentComputedPropertyNameClassLexicalEnvironment;
+        var currentStaticPropertyDeclarationOrStaticBlock;
         return ts.chainBundle(context, transformSourceFile);
         function transformSourceFile(node) {
             var options = context.getCompilerOptions();
@@ -88339,42 +89946,80 @@
             ts.addEmitHelpers(visited, context.readEmitHelpers());
             return visited;
         }
-        function visitor(node) {
-            if (!(node.transformFlags & 8388608 /* ContainsClassFields */))
-                return node;
-            switch (node.kind) {
-                case 222 /* ClassExpression */:
-                case 253 /* ClassDeclaration */:
-                    return visitClassLike(node);
-                case 164 /* PropertyDeclaration */:
-                    return visitPropertyDeclaration(node);
-                case 233 /* VariableStatement */:
-                    return visitVariableStatement(node);
-                case 202 /* PropertyAccessExpression */:
-                    return visitPropertyAccessExpression(node);
-                case 215 /* PrefixUnaryExpression */:
-                    return visitPrefixUnaryExpression(node);
-                case 216 /* PostfixUnaryExpression */:
-                    return visitPostfixUnaryExpression(node, /*valueIsDiscarded*/ false);
-                case 204 /* CallExpression */:
-                    return visitCallExpression(node);
-                case 217 /* BinaryExpression */:
-                    return visitBinaryExpression(node);
-                case 79 /* PrivateIdentifier */:
-                    return visitPrivateIdentifier(node);
-                case 234 /* ExpressionStatement */:
-                    return visitExpressionStatement(node);
-                case 238 /* ForStatement */:
-                    return visitForStatement(node);
-                case 206 /* TaggedTemplateExpression */:
-                    return visitTaggedTemplateExpression(node);
+        function visitorWorker(node, valueIsDiscarded) {
+            if (node.transformFlags & 8388608 /* ContainsClassFields */) {
+                switch (node.kind) {
+                    case 224 /* ClassExpression */:
+                    case 255 /* ClassDeclaration */:
+                        return visitClassLike(node);
+                    case 165 /* PropertyDeclaration */:
+                        return visitPropertyDeclaration(node);
+                    case 235 /* VariableStatement */:
+                        return visitVariableStatement(node);
+                    case 80 /* PrivateIdentifier */:
+                        return visitPrivateIdentifier(node);
+                    case 168 /* ClassStaticBlockDeclaration */:
+                        return visitClassStaticBlockDeclaration(node);
+                }
+            }
+            if (node.transformFlags & 8388608 /* ContainsClassFields */ ||
+                node.transformFlags & 33554432 /* ContainsLexicalSuper */ &&
+                    shouldTransformSuperInStaticInitializers &&
+                    currentStaticPropertyDeclarationOrStaticBlock &&
+                    currentClassLexicalEnvironment) {
+                switch (node.kind) {
+                    case 217 /* PrefixUnaryExpression */:
+                    case 218 /* PostfixUnaryExpression */:
+                        return visitPreOrPostfixUnaryExpression(node, valueIsDiscarded);
+                    case 219 /* BinaryExpression */:
+                        return visitBinaryExpression(node, valueIsDiscarded);
+                    case 206 /* CallExpression */:
+                        return visitCallExpression(node);
+                    case 208 /* TaggedTemplateExpression */:
+                        return visitTaggedTemplateExpression(node);
+                    case 204 /* PropertyAccessExpression */:
+                        return visitPropertyAccessExpression(node);
+                    case 205 /* ElementAccessExpression */:
+                        return visitElementAccessExpression(node);
+                    case 236 /* ExpressionStatement */:
+                        return visitExpressionStatement(node);
+                    case 240 /* ForStatement */:
+                        return visitForStatement(node);
+                    case 254 /* FunctionDeclaration */:
+                    case 211 /* FunctionExpression */:
+                    case 169 /* Constructor */:
+                    case 167 /* MethodDeclaration */:
+                    case 170 /* GetAccessor */:
+                    case 171 /* SetAccessor */: {
+                        var savedCurrentStaticPropertyDeclarationOrStaticBlock = currentStaticPropertyDeclarationOrStaticBlock;
+                        currentStaticPropertyDeclarationOrStaticBlock = undefined;
+                        var result = ts.visitEachChild(node, visitor, context);
+                        currentStaticPropertyDeclarationOrStaticBlock = savedCurrentStaticPropertyDeclarationOrStaticBlock;
+                        return result;
+                    }
+                }
             }
             return ts.visitEachChild(node, visitor, context);
         }
+        function discardedValueVisitor(node) {
+            return visitorWorker(node, /*valueIsDiscarded*/ true);
+        }
+        function visitor(node) {
+            return visitorWorker(node, /*valueIsDiscarded*/ false);
+        }
+        function heritageClauseVisitor(node) {
+            switch (node.kind) {
+                case 289 /* HeritageClause */:
+                    return ts.visitEachChild(node, heritageClauseVisitor, context);
+                case 226 /* ExpressionWithTypeArguments */:
+                    return visitExpressionWithTypeArguments(node);
+            }
+            return visitor(node);
+        }
         function visitorDestructuringTarget(node) {
             switch (node.kind) {
-                case 201 /* ObjectLiteralExpression */:
-                case 200 /* ArrayLiteralExpression */:
+                case 203 /* ObjectLiteralExpression */:
+                case 202 /* ArrayLiteralExpression */:
                     return visitAssignmentPattern(node);
                 default:
                     return visitor(node);
@@ -88385,7 +90030,7 @@
          * Replace it with an empty identifier to indicate a problem with the code.
          */
         function visitPrivateIdentifier(node) {
-            if (!shouldTransformPrivateElements) {
+            if (!shouldTransformPrivateElementsOrClassStaticBlocks) {
                 return node;
             }
             return ts.setOriginalNode(factory.createIdentifier(""), node);
@@ -88397,19 +90042,19 @@
          */
         function classElementVisitor(node) {
             switch (node.kind) {
-                case 167 /* Constructor */:
+                case 169 /* Constructor */:
                     // Constructors for classes using class fields are transformed in
                     // `visitClassDeclaration` or `visitClassExpression`.
                     return undefined;
-                case 168 /* GetAccessor */:
-                case 169 /* SetAccessor */:
-                case 166 /* MethodDeclaration */:
+                case 170 /* GetAccessor */:
+                case 171 /* SetAccessor */:
+                case 167 /* MethodDeclaration */:
                     return visitMethodOrAccessorDeclaration(node);
-                case 164 /* PropertyDeclaration */:
+                case 165 /* PropertyDeclaration */:
                     return visitPropertyDeclaration(node);
-                case 159 /* ComputedPropertyName */:
+                case 160 /* ComputedPropertyName */:
                     return visitComputedPropertyName(node);
-                case 230 /* SemicolonClassElement */:
+                case 232 /* SemicolonClassElement */:
                     return node;
                 default:
                     return visitor(node);
@@ -88419,7 +90064,7 @@
             var savedPendingStatements = pendingStatements;
             pendingStatements = [];
             var visitedNode = ts.visitEachChild(node, visitor, context);
-            var statement = ts.some(pendingStatements) ? __spreadArray([visitedNode], pendingStatements) :
+            var statement = ts.some(pendingStatements) ? __spreadArray([visitedNode], pendingStatements, true) :
                 visitedNode;
             pendingStatements = savedPendingStatements;
             return statement;
@@ -88436,7 +90081,7 @@
         }
         function visitMethodOrAccessorDeclaration(node) {
             ts.Debug.assert(!ts.some(node.decorators));
-            if (!shouldTransformPrivateElements || !ts.isPrivateIdentifier(node.name)) {
+            if (!shouldTransformPrivateElementsOrClassStaticBlocks || !ts.isPrivateIdentifier(node.name)) {
                 return ts.visitEachChild(node, classElementVisitor, context);
             }
             // leave invalid code untransformed
@@ -88473,7 +90118,7 @@
         function visitPropertyDeclaration(node) {
             ts.Debug.assert(!ts.some(node.decorators));
             if (ts.isPrivateIdentifier(node.name)) {
-                if (!shouldTransformPrivateElements) {
+                if (!shouldTransformPrivateElementsOrClassStaticBlocks) {
                     // Initializer is elided as the field is initialized in transformConstructor.
                     return factory.updatePropertyDeclaration(node, 
                     /*decorators*/ undefined, ts.visitNodes(node.modifiers, visitor, ts.isModifier), node.name, 
@@ -88514,60 +90159,130 @@
             }
         }
         function visitPropertyAccessExpression(node) {
-            if (shouldTransformPrivateElements && ts.isPrivateIdentifier(node.name)) {
+            if (shouldTransformPrivateElementsOrClassStaticBlocks && ts.isPrivateIdentifier(node.name)) {
                 var privateIdentifierInfo = accessPrivateIdentifier(node.name);
                 if (privateIdentifierInfo) {
                     return ts.setTextRange(ts.setOriginalNode(createPrivateIdentifierAccess(privateIdentifierInfo, node.expression), node), node);
                 }
             }
-            return ts.visitEachChild(node, visitor, context);
-        }
-        function visitPrefixUnaryExpression(node) {
-            if (shouldTransformPrivateElements && ts.isPrivateIdentifierPropertyAccessExpression(node.operand)) {
-                var operator = node.operator === 45 /* PlusPlusToken */ ?
-                    39 /* PlusToken */ : node.operator === 46 /* MinusMinusToken */ ?
-                    40 /* MinusToken */ : undefined;
-                var info = void 0;
-                if (operator && (info = accessPrivateIdentifier(node.operand.name))) {
-                    var receiver = ts.visitNode(node.operand.expression, visitor, ts.isExpression);
-                    var _a = createCopiableReceiverExpr(receiver), readExpression = _a.readExpression, initializeExpression = _a.initializeExpression;
-                    var existingValue = factory.createPrefixUnaryExpression(39 /* PlusToken */, createPrivateIdentifierAccess(info, readExpression));
-                    return ts.setOriginalNode(createPrivateIdentifierAssignment(info, initializeExpression || readExpression, factory.createBinaryExpression(existingValue, operator, factory.createNumericLiteral(1)), 62 /* EqualsToken */), node);
+            if (shouldTransformSuperInStaticInitializers &&
+                ts.isSuperProperty(node) &&
+                ts.isIdentifier(node.name) &&
+                currentStaticPropertyDeclarationOrStaticBlock &&
+                currentClassLexicalEnvironment) {
+                var classConstructor = currentClassLexicalEnvironment.classConstructor, superClassReference = currentClassLexicalEnvironment.superClassReference, facts = currentClassLexicalEnvironment.facts;
+                if (facts & 1 /* ClassWasDecorated */) {
+                    return visitInvalidSuperProperty(node);
+                }
+                if (classConstructor && superClassReference) {
+                    // converts `super.x` into `Reflect.get(_baseTemp, "x", _classTemp)`
+                    var superProperty = factory.createReflectGetCall(superClassReference, factory.createStringLiteralFromNode(node.name), classConstructor);
+                    ts.setOriginalNode(superProperty, node.expression);
+                    ts.setTextRange(superProperty, node.expression);
+                    return superProperty;
                 }
             }
             return ts.visitEachChild(node, visitor, context);
         }
-        function visitPostfixUnaryExpression(node, valueIsDiscarded) {
-            if (shouldTransformPrivateElements && ts.isPrivateIdentifierPropertyAccessExpression(node.operand)) {
-                var operator = node.operator === 45 /* PlusPlusToken */ ?
-                    39 /* PlusToken */ : node.operator === 46 /* MinusMinusToken */ ?
-                    40 /* MinusToken */ : undefined;
-                var info = void 0;
-                if (operator && (info = accessPrivateIdentifier(node.operand.name))) {
-                    var receiver = ts.visitNode(node.operand.expression, visitor, ts.isExpression);
-                    var _a = createCopiableReceiverExpr(receiver), readExpression = _a.readExpression, initializeExpression = _a.initializeExpression;
-                    var existingValue = factory.createPrefixUnaryExpression(39 /* PlusToken */, createPrivateIdentifierAccess(info, readExpression));
-                    // Create a temporary variable to store the value returned by the expression.
-                    var returnValue = valueIsDiscarded ? undefined : factory.createTempVariable(hoistVariableDeclaration);
-                    return ts.setOriginalNode(factory.inlineExpressions(ts.compact([
-                        createPrivateIdentifierAssignment(info, initializeExpression || readExpression, factory.createBinaryExpression(returnValue ? factory.createAssignment(returnValue, existingValue) : existingValue, operator, factory.createNumericLiteral(1)), 62 /* EqualsToken */),
-                        returnValue
-                    ])), node);
+        function visitElementAccessExpression(node) {
+            if (shouldTransformSuperInStaticInitializers &&
+                ts.isSuperProperty(node) &&
+                currentStaticPropertyDeclarationOrStaticBlock &&
+                currentClassLexicalEnvironment) {
+                var classConstructor = currentClassLexicalEnvironment.classConstructor, superClassReference = currentClassLexicalEnvironment.superClassReference, facts = currentClassLexicalEnvironment.facts;
+                if (facts & 1 /* ClassWasDecorated */) {
+                    return visitInvalidSuperProperty(node);
+                }
+                if (classConstructor && superClassReference) {
+                    // converts `super[x]` into `Reflect.get(_baseTemp, x, _classTemp)`
+                    var superProperty = factory.createReflectGetCall(superClassReference, ts.visitNode(node.argumentExpression, visitor, ts.isExpression), classConstructor);
+                    ts.setOriginalNode(superProperty, node.expression);
+                    ts.setTextRange(superProperty, node.expression);
+                    return superProperty;
+                }
+            }
+            return ts.visitEachChild(node, visitor, context);
+        }
+        function visitPreOrPostfixUnaryExpression(node, valueIsDiscarded) {
+            if (node.operator === 45 /* PlusPlusToken */ || node.operator === 46 /* MinusMinusToken */) {
+                if (shouldTransformPrivateElementsOrClassStaticBlocks && ts.isPrivateIdentifierPropertyAccessExpression(node.operand)) {
+                    var info = void 0;
+                    if (info = accessPrivateIdentifier(node.operand.name)) {
+                        var receiver = ts.visitNode(node.operand.expression, visitor, ts.isExpression);
+                        var _a = createCopiableReceiverExpr(receiver), readExpression = _a.readExpression, initializeExpression = _a.initializeExpression;
+                        var expression = createPrivateIdentifierAccess(info, readExpression);
+                        var temp = ts.isPrefixUnaryExpression(node) || valueIsDiscarded ? undefined : factory.createTempVariable(hoistVariableDeclaration);
+                        expression = ts.expandPreOrPostfixIncrementOrDecrementExpression(factory, node, expression, hoistVariableDeclaration, temp);
+                        expression = createPrivateIdentifierAssignment(info, initializeExpression || readExpression, expression, 63 /* EqualsToken */);
+                        ts.setOriginalNode(expression, node);
+                        ts.setTextRange(expression, node);
+                        if (temp) {
+                            expression = factory.createComma(expression, temp);
+                            ts.setTextRange(expression, node);
+                        }
+                        return expression;
+                    }
+                }
+                else if (shouldTransformSuperInStaticInitializers &&
+                    ts.isSuperProperty(node.operand) &&
+                    currentStaticPropertyDeclarationOrStaticBlock &&
+                    currentClassLexicalEnvironment) {
+                    // converts `++super.a` into `(Reflect.set(_baseTemp, "a", (_a = Reflect.get(_baseTemp, "a", _classTemp), _b = ++_a), _classTemp), _b)`
+                    // converts `++super[f()]` into `(Reflect.set(_baseTemp, _a = f(), (_b = Reflect.get(_baseTemp, _a, _classTemp), _c = ++_b), _classTemp), _c)`
+                    // converts `--super.a` into `(Reflect.set(_baseTemp, "a", (_a = Reflect.get(_baseTemp, "a", _classTemp), _b = --_a), _classTemp), _b)`
+                    // converts `--super[f()]` into `(Reflect.set(_baseTemp, _a = f(), (_b = Reflect.get(_baseTemp, _a, _classTemp), _c = --_b), _classTemp), _c)`
+                    // converts `super.a++` into `(Reflect.set(_baseTemp, "a", (_a = Reflect.get(_baseTemp, "a", _classTemp), _b = _a++), _classTemp), _b)`
+                    // converts `super[f()]++` into `(Reflect.set(_baseTemp, _a = f(), (_b = Reflect.get(_baseTemp, _a, _classTemp), _c = _b++), _classTemp), _c)`
+                    // converts `super.a--` into `(Reflect.set(_baseTemp, "a", (_a = Reflect.get(_baseTemp, "a", _classTemp), _b = _a--), _classTemp), _b)`
+                    // converts `super[f()]--` into `(Reflect.set(_baseTemp, _a = f(), (_b = Reflect.get(_baseTemp, _a, _classTemp), _c = _b--), _classTemp), _c)`
+                    var classConstructor = currentClassLexicalEnvironment.classConstructor, superClassReference = currentClassLexicalEnvironment.superClassReference, facts = currentClassLexicalEnvironment.facts;
+                    if (facts & 1 /* ClassWasDecorated */) {
+                        var operand = visitInvalidSuperProperty(node.operand);
+                        return ts.isPrefixUnaryExpression(node) ?
+                            factory.updatePrefixUnaryExpression(node, operand) :
+                            factory.updatePostfixUnaryExpression(node, operand);
+                    }
+                    if (classConstructor && superClassReference) {
+                        var setterName = void 0;
+                        var getterName = void 0;
+                        if (ts.isPropertyAccessExpression(node.operand)) {
+                            if (ts.isIdentifier(node.operand.name)) {
+                                getterName = setterName = factory.createStringLiteralFromNode(node.operand.name);
+                            }
+                        }
+                        else {
+                            if (ts.isSimpleInlineableExpression(node.operand.argumentExpression)) {
+                                getterName = setterName = node.operand.argumentExpression;
+                            }
+                            else {
+                                getterName = factory.createTempVariable(hoistVariableDeclaration);
+                                setterName = factory.createAssignment(getterName, ts.visitNode(node.operand.argumentExpression, visitor, ts.isExpression));
+                            }
+                        }
+                        if (setterName && getterName) {
+                            var expression = factory.createReflectGetCall(superClassReference, getterName, classConstructor);
+                            ts.setTextRange(expression, node.operand);
+                            var temp = valueIsDiscarded ? undefined : factory.createTempVariable(hoistVariableDeclaration);
+                            expression = ts.expandPreOrPostfixIncrementOrDecrementExpression(factory, node, expression, hoistVariableDeclaration, temp);
+                            expression = factory.createReflectSetCall(superClassReference, setterName, expression, classConstructor);
+                            ts.setOriginalNode(expression, node);
+                            ts.setTextRange(expression, node);
+                            if (temp) {
+                                expression = factory.createComma(expression, temp);
+                                ts.setTextRange(expression, node);
+                            }
+                            return expression;
+                        }
+                    }
                 }
             }
             return ts.visitEachChild(node, visitor, context);
         }
         function visitForStatement(node) {
-            if (node.incrementor && ts.isPostfixUnaryExpression(node.incrementor)) {
-                return factory.updateForStatement(node, ts.visitNode(node.initializer, visitor, ts.isForInitializer), ts.visitNode(node.condition, visitor, ts.isExpression), visitPostfixUnaryExpression(node.incrementor, /*valueIsDiscarded*/ true), ts.visitIterationBody(node.statement, visitor, context));
-            }
-            return ts.visitEachChild(node, visitor, context);
+            return factory.updateForStatement(node, ts.visitNode(node.initializer, discardedValueVisitor, ts.isForInitializer), ts.visitNode(node.condition, visitor, ts.isExpression), ts.visitNode(node.incrementor, discardedValueVisitor, ts.isExpression), ts.visitIterationBody(node.statement, visitor, context));
         }
         function visitExpressionStatement(node) {
-            if (ts.isPostfixUnaryExpression(node.expression)) {
-                return factory.updateExpressionStatement(node, visitPostfixUnaryExpression(node.expression, /*valueIsDiscarded*/ true));
-            }
-            return ts.visitEachChild(node, visitor, context);
+            return factory.updateExpressionStatement(node, ts.visitNode(node.expression, discardedValueVisitor, ts.isExpression));
         }
         function createCopiableReceiverExpr(receiver) {
             var clone = ts.nodeIsSynthesized(receiver) ? receiver : factory.cloneNode(receiver);
@@ -88579,47 +90294,132 @@
             return { readExpression: readExpression, initializeExpression: initializeExpression };
         }
         function visitCallExpression(node) {
-            if (shouldTransformPrivateElements && ts.isPrivateIdentifierPropertyAccessExpression(node.expression)) {
+            if (shouldTransformPrivateElementsOrClassStaticBlocks && ts.isPrivateIdentifierPropertyAccessExpression(node.expression)) {
                 // Transform call expressions of private names to properly bind the `this` parameter.
                 var _a = factory.createCallBinding(node.expression, hoistVariableDeclaration, languageVersion), thisArg = _a.thisArg, target = _a.target;
                 if (ts.isCallChain(node)) {
                     return factory.updateCallChain(node, factory.createPropertyAccessChain(ts.visitNode(target, visitor), node.questionDotToken, "call"), 
                     /*questionDotToken*/ undefined, 
-                    /*typeArguments*/ undefined, __spreadArray([ts.visitNode(thisArg, visitor, ts.isExpression)], ts.visitNodes(node.arguments, visitor, ts.isExpression)));
+                    /*typeArguments*/ undefined, __spreadArray([ts.visitNode(thisArg, visitor, ts.isExpression)], ts.visitNodes(node.arguments, visitor, ts.isExpression), true));
                 }
                 return factory.updateCallExpression(node, factory.createPropertyAccessExpression(ts.visitNode(target, visitor), "call"), 
-                /*typeArguments*/ undefined, __spreadArray([ts.visitNode(thisArg, visitor, ts.isExpression)], ts.visitNodes(node.arguments, visitor, ts.isExpression)));
+                /*typeArguments*/ undefined, __spreadArray([ts.visitNode(thisArg, visitor, ts.isExpression)], ts.visitNodes(node.arguments, visitor, ts.isExpression), true));
+            }
+            if (shouldTransformSuperInStaticInitializers &&
+                ts.isSuperProperty(node.expression) &&
+                currentStaticPropertyDeclarationOrStaticBlock &&
+                (currentClassLexicalEnvironment === null || currentClassLexicalEnvironment === void 0 ? void 0 : currentClassLexicalEnvironment.classConstructor)) {
+                // converts `super.f(...)` into `Reflect.get(_baseTemp, "f", _classTemp).call(_classTemp, ...)`
+                var invocation = factory.createFunctionCallCall(ts.visitNode(node.expression, visitor, ts.isExpression), currentClassLexicalEnvironment.classConstructor, ts.visitNodes(node.arguments, visitor, ts.isExpression));
+                ts.setOriginalNode(invocation, node);
+                ts.setTextRange(invocation, node);
+                return invocation;
             }
             return ts.visitEachChild(node, visitor, context);
         }
         function visitTaggedTemplateExpression(node) {
-            if (shouldTransformPrivateElements && ts.isPrivateIdentifierPropertyAccessExpression(node.tag)) {
+            if (shouldTransformPrivateElementsOrClassStaticBlocks && ts.isPrivateIdentifierPropertyAccessExpression(node.tag)) {
                 // Bind the `this` correctly for tagged template literals when the tag is a private identifier property access.
                 var _a = factory.createCallBinding(node.tag, hoistVariableDeclaration, languageVersion), thisArg = _a.thisArg, target = _a.target;
                 return factory.updateTaggedTemplateExpression(node, factory.createCallExpression(factory.createPropertyAccessExpression(ts.visitNode(target, visitor), "bind"), 
                 /*typeArguments*/ undefined, [ts.visitNode(thisArg, visitor, ts.isExpression)]), 
                 /*typeArguments*/ undefined, ts.visitNode(node.template, visitor, ts.isTemplateLiteral));
             }
+            if (shouldTransformSuperInStaticInitializers &&
+                ts.isSuperProperty(node.tag) &&
+                currentStaticPropertyDeclarationOrStaticBlock &&
+                (currentClassLexicalEnvironment === null || currentClassLexicalEnvironment === void 0 ? void 0 : currentClassLexicalEnvironment.classConstructor)) {
+                // converts `` super.f`x` `` into `` Reflect.get(_baseTemp, "f", _classTemp).bind(_classTemp)`x` ``
+                var invocation = factory.createFunctionBindCall(ts.visitNode(node.tag, visitor, ts.isExpression), currentClassLexicalEnvironment.classConstructor, []);
+                ts.setOriginalNode(invocation, node);
+                ts.setTextRange(invocation, node);
+                return factory.updateTaggedTemplateExpression(node, invocation, 
+                /*typeArguments*/ undefined, ts.visitNode(node.template, visitor, ts.isTemplateLiteral));
+            }
             return ts.visitEachChild(node, visitor, context);
         }
-        function visitBinaryExpression(node) {
-            if (shouldTransformPrivateElements) {
-                if (ts.isDestructuringAssignment(node)) {
-                    var savedPendingExpressions = pendingExpressions;
-                    pendingExpressions = undefined;
-                    node = factory.updateBinaryExpression(node, ts.visitNode(node.left, visitorDestructuringTarget), node.operatorToken, ts.visitNode(node.right, visitor));
-                    var expr = ts.some(pendingExpressions) ?
-                        factory.inlineExpressions(ts.compact(__spreadArray(__spreadArray([], pendingExpressions), [node]))) :
-                        node;
-                    pendingExpressions = savedPendingExpressions;
-                    return expr;
+        function transformClassStaticBlockDeclaration(node) {
+            if (shouldTransformPrivateElementsOrClassStaticBlocks) {
+                if (currentClassLexicalEnvironment) {
+                    classLexicalEnvironmentMap.set(ts.getOriginalNodeId(node), currentClassLexicalEnvironment);
                 }
-                if (ts.isAssignmentExpression(node) && ts.isPrivateIdentifierPropertyAccessExpression(node.left)) {
+                startLexicalEnvironment();
+                var savedCurrentStaticPropertyDeclarationOrStaticBlock = currentStaticPropertyDeclarationOrStaticBlock;
+                currentStaticPropertyDeclarationOrStaticBlock = node;
+                var statements = ts.visitNodes(node.body.statements, visitor, ts.isStatement);
+                statements = factory.mergeLexicalEnvironment(statements, endLexicalEnvironment());
+                currentStaticPropertyDeclarationOrStaticBlock = savedCurrentStaticPropertyDeclarationOrStaticBlock;
+                var iife = factory.createImmediatelyInvokedArrowFunction(statements);
+                ts.setOriginalNode(iife, node);
+                ts.setTextRange(iife, node);
+                ts.addEmitFlags(iife, 2 /* AdviseOnEmitNode */);
+                return iife;
+            }
+        }
+        function visitBinaryExpression(node, valueIsDiscarded) {
+            if (ts.isDestructuringAssignment(node)) {
+                var savedPendingExpressions = pendingExpressions;
+                pendingExpressions = undefined;
+                node = factory.updateBinaryExpression(node, ts.visitNode(node.left, visitorDestructuringTarget), node.operatorToken, ts.visitNode(node.right, visitor));
+                var expr = ts.some(pendingExpressions) ?
+                    factory.inlineExpressions(ts.compact(__spreadArray(__spreadArray([], pendingExpressions, true), [node], false))) :
+                    node;
+                pendingExpressions = savedPendingExpressions;
+                return expr;
+            }
+            if (ts.isAssignmentExpression(node)) {
+                if (shouldTransformPrivateElementsOrClassStaticBlocks && ts.isPrivateIdentifierPropertyAccessExpression(node.left)) {
                     var info = accessPrivateIdentifier(node.left.name);
                     if (info) {
                         return ts.setTextRange(ts.setOriginalNode(createPrivateIdentifierAssignment(info, node.left.expression, node.right, node.operatorToken.kind), node), node);
                     }
                 }
+                else if (shouldTransformSuperInStaticInitializers &&
+                    ts.isSuperProperty(node.left) &&
+                    currentStaticPropertyDeclarationOrStaticBlock &&
+                    currentClassLexicalEnvironment) {
+                    var classConstructor = currentClassLexicalEnvironment.classConstructor, superClassReference = currentClassLexicalEnvironment.superClassReference, facts = currentClassLexicalEnvironment.facts;
+                    if (facts & 1 /* ClassWasDecorated */) {
+                        return factory.updateBinaryExpression(node, visitInvalidSuperProperty(node.left), node.operatorToken, ts.visitNode(node.right, visitor, ts.isExpression));
+                    }
+                    if (classConstructor && superClassReference) {
+                        var setterName = ts.isElementAccessExpression(node.left) ? ts.visitNode(node.left.argumentExpression, visitor, ts.isExpression) :
+                            ts.isIdentifier(node.left.name) ? factory.createStringLiteralFromNode(node.left.name) :
+                                undefined;
+                        if (setterName) {
+                            // converts `super.x = 1` into `(Reflect.set(_baseTemp, "x", _a = 1, _classTemp), _a)`
+                            // converts `super[f()] = 1` into `(Reflect.set(_baseTemp, f(), _a = 1, _classTemp), _a)`
+                            // converts `super.x += 1` into `(Reflect.set(_baseTemp, "x", _a = Reflect.get(_baseTemp, "x", _classtemp) + 1, _classTemp), _a)`
+                            // converts `super[f()] += 1` into `(Reflect.set(_baseTemp, _a = f(), _b = Reflect.get(_baseTemp, _a, _classtemp) + 1, _classTemp), _b)`
+                            var expression = ts.visitNode(node.right, visitor, ts.isExpression);
+                            if (ts.isCompoundAssignment(node.operatorToken.kind)) {
+                                var getterName = setterName;
+                                if (!ts.isSimpleInlineableExpression(setterName)) {
+                                    getterName = factory.createTempVariable(hoistVariableDeclaration);
+                                    setterName = factory.createAssignment(getterName, setterName);
+                                }
+                                var superPropertyGet = factory.createReflectGetCall(superClassReference, getterName, classConstructor);
+                                ts.setOriginalNode(superPropertyGet, node.left);
+                                ts.setTextRange(superPropertyGet, node.left);
+                                expression = factory.createBinaryExpression(superPropertyGet, ts.getNonAssignmentOperatorForCompoundAssignment(node.operatorToken.kind), expression);
+                                ts.setTextRange(expression, node);
+                            }
+                            var temp = valueIsDiscarded ? undefined : factory.createTempVariable(hoistVariableDeclaration);
+                            if (temp) {
+                                expression = factory.createAssignment(temp, expression);
+                                ts.setTextRange(temp, node);
+                            }
+                            expression = factory.createReflectSetCall(superClassReference, setterName, expression, classConstructor);
+                            ts.setOriginalNode(expression, node);
+                            ts.setTextRange(expression, node);
+                            if (temp) {
+                                expression = factory.createComma(expression, temp);
+                                ts.setTextRange(expression, node);
+                            }
+                            return expression;
+                        }
+                    }
+                }
             }
             return ts.visitEachChild(node, visitor, context);
         }
@@ -88648,10 +90448,13 @@
          * Set up the environment for a class.
          */
         function visitClassLike(node) {
+            if (!ts.forEach(node.members, doesClassElementNeedTransform)) {
+                return ts.visitEachChild(node, visitor, context);
+            }
             var savedPendingExpressions = pendingExpressions;
             pendingExpressions = undefined;
-            if (shouldTransformPrivateElements) {
-                startPrivateIdentifierEnvironment();
+            startClassLexicalEnvironment();
+            if (shouldTransformPrivateElementsOrClassStaticBlocks) {
                 var name = ts.getNameOfDeclaration(node);
                 if (name && ts.isIdentifier(name)) {
                     getPrivateIdentifierEnvironment().className = ts.idText(name);
@@ -88664,38 +90467,81 @@
             var result = ts.isClassDeclaration(node) ?
                 visitClassDeclaration(node) :
                 visitClassExpression(node);
-            if (shouldTransformPrivateElements) {
-                endPrivateIdentifierEnvironment();
-            }
+            endClassLexicalEnvironment();
             pendingExpressions = savedPendingExpressions;
             return result;
         }
         function doesClassElementNeedTransform(node) {
-            return ts.isPropertyDeclaration(node) || (shouldTransformPrivateElements && node.name && ts.isPrivateIdentifier(node.name));
+            return ts.isPropertyDeclaration(node) || ts.isClassStaticBlockDeclaration(node) || (shouldTransformPrivateElementsOrClassStaticBlocks && node.name && ts.isPrivateIdentifier(node.name));
         }
         function getPrivateInstanceMethodsAndAccessors(node) {
             return ts.filter(node.members, ts.isNonStaticMethodOrAccessorWithPrivateName);
         }
-        function visitClassDeclaration(node) {
-            if (!ts.forEach(node.members, doesClassElementNeedTransform)) {
-                return ts.visitEachChild(node, visitor, context);
+        function getClassFacts(node) {
+            var facts = 0 /* None */;
+            var original = ts.getOriginalNode(node);
+            if (ts.isClassDeclaration(original) && ts.classOrConstructorParameterIsDecorated(original)) {
+                facts |= 1 /* ClassWasDecorated */;
             }
-            var staticProperties = ts.getProperties(node, /*requireInitializer*/ false, /*isStatic*/ true);
-            var pendingPrivateStateAssignment;
-            if (shouldTransformPrivateElements && ts.some(node.members, function (m) { return ts.hasStaticModifier(m) && !!m.name && ts.isPrivateIdentifier(m.name); })) {
-                var temp = factory.createTempVariable(hoistVariableDeclaration, /* reservedInNestedScopes */ true);
-                getPrivateIdentifierEnvironment().classConstructor = factory.cloneNode(temp);
-                pendingPrivateStateAssignment = factory.createAssignment(temp, factory.getInternalName(node));
+            for (var _i = 0, _a = node.members; _i < _a.length; _i++) {
+                var member = _a[_i];
+                if (!ts.isStatic(member))
+                    continue;
+                if (member.name && ts.isPrivateIdentifier(member.name) && shouldTransformPrivateElementsOrClassStaticBlocks) {
+                    facts |= 2 /* NeedsClassConstructorReference */;
+                }
+                if (ts.isPropertyDeclaration(member) || ts.isClassStaticBlockDeclaration(member)) {
+                    if (shouldTransformThisInStaticInitializers && member.transformFlags & 8192 /* ContainsLexicalThis */) {
+                        facts |= 8 /* NeedsSubstitutionForThisInClassStaticField */;
+                        if (!(facts & 1 /* ClassWasDecorated */)) {
+                            facts |= 2 /* NeedsClassConstructorReference */;
+                        }
+                    }
+                    if (shouldTransformSuperInStaticInitializers && member.transformFlags & 33554432 /* ContainsLexicalSuper */) {
+                        if (!(facts & 1 /* ClassWasDecorated */)) {
+                            facts |= 2 /* NeedsClassConstructorReference */ | 4 /* NeedsClassSuperReference */;
+                        }
+                    }
+                }
+            }
+            return facts;
+        }
+        function visitExpressionWithTypeArguments(node) {
+            var facts = (currentClassLexicalEnvironment === null || currentClassLexicalEnvironment === void 0 ? void 0 : currentClassLexicalEnvironment.facts) || 0 /* None */;
+            if (facts & 4 /* NeedsClassSuperReference */) {
+                var temp = factory.createTempVariable(hoistVariableDeclaration, /*reserveInNestedScopes*/ true);
+                getClassLexicalEnvironment().superClassReference = temp;
+                return factory.updateExpressionWithTypeArguments(node, factory.createAssignment(temp, ts.visitNode(node.expression, visitor, ts.isExpression)), 
+                /*typeArguments*/ undefined);
+            }
+            return ts.visitEachChild(node, visitor, context);
+        }
+        function visitClassDeclaration(node) {
+            var facts = getClassFacts(node);
+            if (facts) {
+                getClassLexicalEnvironment().facts = facts;
+            }
+            if (facts & 8 /* NeedsSubstitutionForThisInClassStaticField */) {
+                enableSubstitutionForClassStaticThisOrSuperReference();
+            }
+            var staticProperties = ts.getStaticPropertiesAndClassStaticBlock(node);
+            // If a class has private static fields, or a static field has a `this` or `super` reference,
+            // then we need to allocate a temp variable to hold on to that reference.
+            var pendingClassReferenceAssignment;
+            if (facts & 2 /* NeedsClassConstructorReference */) {
+                var temp = factory.createTempVariable(hoistVariableDeclaration, /*reservedInNestedScopes*/ true);
+                getClassLexicalEnvironment().classConstructor = factory.cloneNode(temp);
+                pendingClassReferenceAssignment = factory.createAssignment(temp, factory.getInternalName(node));
             }
             var extendsClauseElement = ts.getEffectiveBaseTypeNode(node);
-            var isDerivedClass = !!(extendsClauseElement && ts.skipOuterExpressions(extendsClauseElement.expression).kind !== 103 /* NullKeyword */);
+            var isDerivedClass = !!(extendsClauseElement && ts.skipOuterExpressions(extendsClauseElement.expression).kind !== 104 /* NullKeyword */);
             var statements = [
                 factory.updateClassDeclaration(node, 
                 /*decorators*/ undefined, node.modifiers, node.name, 
-                /*typeParameters*/ undefined, ts.visitNodes(node.heritageClauses, visitor, ts.isHeritageClause), transformClassMembers(node, isDerivedClass))
+                /*typeParameters*/ undefined, ts.visitNodes(node.heritageClauses, heritageClauseVisitor, ts.isHeritageClause), transformClassMembers(node, isDerivedClass))
             ];
-            if (pendingPrivateStateAssignment) {
-                getPendingExpressions().unshift(pendingPrivateStateAssignment);
+            if (pendingClassReferenceAssignment) {
+                getPendingExpressions().unshift(pendingClassReferenceAssignment);
             }
             // Write any pending expressions from elided or moved computed property names
             if (ts.some(pendingExpressions)) {
@@ -88707,13 +90553,17 @@
             //      HasLexicalDeclaration (N) : Determines if the argument identifier has a binding in this environment record that was created using
             //                                  a lexical declaration such as a LexicalDeclaration or a ClassDeclaration.
             if (ts.some(staticProperties)) {
-                addPropertyStatements(statements, staticProperties, factory.getInternalName(node));
+                addPropertyOrClassStaticBlockStatements(statements, staticProperties, factory.getInternalName(node));
             }
             return statements;
         }
         function visitClassExpression(node) {
-            if (!ts.forEach(node.members, doesClassElementNeedTransform)) {
-                return ts.visitEachChild(node, visitor, context);
+            var facts = getClassFacts(node);
+            if (facts) {
+                getClassLexicalEnvironment().facts = facts;
+            }
+            if (facts & 8 /* NeedsSubstitutionForThisInClassStaticField */) {
+                enableSubstitutionForClassStaticThisOrSuperReference();
             }
             // If this class expression is a transformation of a decorated class declaration,
             // then we want to output the pendingExpressions as statements, not as inlined
@@ -88722,10 +90572,10 @@
             // In this case, we use pendingStatements to produce the same output as the
             // class declaration transformation. The VariableStatement visitor will insert
             // these statements after the class expression variable statement.
-            var isDecoratedClassDeclaration = ts.isClassDeclaration(ts.getOriginalNode(node));
-            var staticProperties = ts.getProperties(node, /*requireInitializer*/ false, /*isStatic*/ true);
+            var isDecoratedClassDeclaration = !!(facts & 1 /* ClassWasDecorated */);
+            var staticPropertiesOrClassStaticBlocks = ts.getStaticPropertiesAndClassStaticBlock(node);
             var extendsClauseElement = ts.getEffectiveBaseTypeNode(node);
-            var isDerivedClass = !!(extendsClauseElement && ts.skipOuterExpressions(extendsClauseElement.expression).kind !== 103 /* NullKeyword */);
+            var isDerivedClass = !!(extendsClauseElement && ts.skipOuterExpressions(extendsClauseElement.expression).kind !== 104 /* NullKeyword */);
             var isClassWithConstructorReference = resolver.getNodeCheckFlags(node) & 16777216 /* ClassWithConstructorReference */;
             var temp;
             function createClassTempVar() {
@@ -88734,13 +90584,13 @@
                 var requiresBlockScopedVar = classCheckFlags & 524288 /* BlockScopedBindingInLoop */;
                 return factory.createTempVariable(requiresBlockScopedVar ? addBlockScopedVariable : hoistVariableDeclaration, !!isClassWithConstructorReference);
             }
-            if (shouldTransformPrivateElements && ts.some(node.members, function (m) { return ts.hasStaticModifier(m) && !!m.name && ts.isPrivateIdentifier(m.name); })) {
+            if (facts & 2 /* NeedsClassConstructorReference */) {
                 temp = createClassTempVar();
-                getPrivateIdentifierEnvironment().classConstructor = factory.cloneNode(temp);
+                getClassLexicalEnvironment().classConstructor = factory.cloneNode(temp);
             }
             var classExpression = factory.updateClassExpression(node, ts.visitNodes(node.decorators, visitor, ts.isDecorator), node.modifiers, node.name, 
-            /*typeParameters*/ undefined, ts.visitNodes(node.heritageClauses, visitor, ts.isHeritageClause), transformClassMembers(node, isDerivedClass));
-            var hasTransformableStatics = ts.some(staticProperties, function (p) { return !!p.initializer || (shouldTransformPrivateElements && ts.isPrivateIdentifier(p.name)); });
+            /*typeParameters*/ undefined, ts.visitNodes(node.heritageClauses, heritageClauseVisitor, ts.isHeritageClause), transformClassMembers(node, isDerivedClass));
+            var hasTransformableStatics = ts.some(staticPropertiesOrClassStaticBlocks, function (p) { return ts.isClassStaticBlockDeclaration(p) || !!p.initializer || (shouldTransformPrivateElementsOrClassStaticBlocks && ts.isPrivateIdentifier(p.name)); });
             if (hasTransformableStatics || ts.some(pendingExpressions)) {
                 if (isDecoratedClassDeclaration) {
                     ts.Debug.assertIsDefined(pendingStatements, "Decorated classes transformed by TypeScript are expected to be within a variable declaration.");
@@ -88748,8 +90598,8 @@
                     if (pendingStatements && pendingExpressions && ts.some(pendingExpressions)) {
                         pendingStatements.push(factory.createExpressionStatement(factory.inlineExpressions(pendingExpressions)));
                     }
-                    if (pendingStatements && ts.some(staticProperties)) {
-                        addPropertyStatements(pendingStatements, staticProperties, factory.getInternalName(node));
+                    if (pendingStatements && ts.some(staticPropertiesOrClassStaticBlocks)) {
+                        addPropertyOrClassStaticBlockStatements(pendingStatements, staticPropertiesOrClassStaticBlocks, factory.getInternalName(node));
                     }
                     if (temp) {
                         return factory.inlineExpressions([factory.createAssignment(temp, classExpression), temp]);
@@ -88772,15 +90622,22 @@
                     expressions.push(ts.startOnNewLine(factory.createAssignment(temp, classExpression)));
                     // Add any pending expressions leftover from elided or relocated computed property names
                     ts.addRange(expressions, ts.map(pendingExpressions, ts.startOnNewLine));
-                    ts.addRange(expressions, generateInitializedPropertyExpressions(staticProperties, temp));
+                    ts.addRange(expressions, generateInitializedPropertyExpressionsOrClassStaticBlock(staticPropertiesOrClassStaticBlocks, temp));
                     expressions.push(ts.startOnNewLine(temp));
                     return factory.inlineExpressions(expressions);
                 }
             }
             return classExpression;
         }
+        function visitClassStaticBlockDeclaration(node) {
+            if (!shouldTransformPrivateElementsOrClassStaticBlocks) {
+                return ts.visitEachChild(node, classElementVisitor, context);
+            }
+            // ClassStaticBlockDeclaration for classes are transformed in `visitClassDeclaration` or `visitClassExpression`.
+            return undefined;
+        }
         function transformClassMembers(node, isDerivedClass) {
-            if (shouldTransformPrivateElements) {
+            if (shouldTransformPrivateElementsOrClassStaticBlocks) {
                 // Declare private names.
                 for (var _i = 0, _a = node.members; _i < _a.length; _i++) {
                     var member = _a[_i];
@@ -88807,7 +90664,7 @@
             /*typeArguments*/ undefined, [])));
         }
         function isClassElementThatRequiresConstructorStatement(member) {
-            if (ts.hasStaticModifier(member) || ts.hasSyntacticModifier(ts.getOriginalNode(member), 128 /* Abstract */)) {
+            if (ts.isStatic(member) || ts.hasSyntacticModifier(ts.getOriginalNode(member), 128 /* Abstract */)) {
                 return false;
             }
             if (useDefineForClassFields) {
@@ -88815,7 +90672,7 @@
                 // then we don't need to transform any class properties.
                 return languageVersion < 99 /* ESNext */;
             }
-            return ts.isInitializedProperty(member) || shouldTransformPrivateElements && ts.isPrivateIdentifierClassElementDeclaration(member);
+            return ts.isInitializedProperty(member) || shouldTransformPrivateElementsOrClassStaticBlocks && ts.isPrivateIdentifierClassElementDeclaration(member);
         }
         function transformConstructor(node, isDerivedClass) {
             var constructor = ts.visitNode(ts.getFirstConstructorWithBody(node), visitor, ts.isConstructorDeclaration);
@@ -88882,7 +90739,7 @@
             var receiver = factory.createThis();
             // private methods can be called in property initializers, they should execute first.
             addMethodStatements(statements, privateMethodsAndAccessors, receiver);
-            addPropertyStatements(statements, properties, receiver);
+            addPropertyOrClassStaticBlockStatements(statements, properties, receiver);
             // Add existing statements, skipping the initial super call.
             if (constructor) {
                 ts.addRange(statements, ts.visitNodes(constructor.body.statements, visitor, ts.isStatement, indexOfFirstStatement));
@@ -88899,10 +90756,12 @@
          * @param properties An array of property declarations to transform.
          * @param receiver The receiver on which each property should be assigned.
          */
-        function addPropertyStatements(statements, properties, receiver) {
+        function addPropertyOrClassStaticBlockStatements(statements, properties, receiver) {
             for (var _i = 0, properties_7 = properties; _i < properties_7.length; _i++) {
                 var property = properties_7[_i];
-                var expression = transformProperty(property, receiver);
+                var expression = ts.isClassStaticBlockDeclaration(property) ?
+                    transformClassStaticBlockDeclaration(property) :
+                    transformProperty(property, receiver);
                 if (!expression) {
                     continue;
                 }
@@ -88916,14 +90775,14 @@
         /**
          * Generates assignment expressions for property initializers.
          *
-         * @param properties An array of property declarations to transform.
+         * @param propertiesOrClassStaticBlocks An array of property declarations to transform.
          * @param receiver The receiver on which each property should be assigned.
          */
-        function generateInitializedPropertyExpressions(properties, receiver) {
+        function generateInitializedPropertyExpressionsOrClassStaticBlock(propertiesOrClassStaticBlocks, receiver) {
             var expressions = [];
-            for (var _i = 0, properties_8 = properties; _i < properties_8.length; _i++) {
-                var property = properties_8[_i];
-                var expression = transformProperty(property, receiver);
+            for (var _i = 0, propertiesOrClassStaticBlocks_1 = propertiesOrClassStaticBlocks; _i < propertiesOrClassStaticBlocks_1.length; _i++) {
+                var property = propertiesOrClassStaticBlocks_1[_i];
+                var expression = ts.isClassStaticBlockDeclaration(property) ? transformClassStaticBlockDeclaration(property) : transformProperty(property, receiver);
                 if (!expression) {
                     continue;
                 }
@@ -88942,13 +90801,28 @@
          * @param receiver The object receiving the property assignment.
          */
         function transformProperty(property, receiver) {
+            var savedCurrentStaticPropertyDeclarationOrStaticBlock = currentStaticPropertyDeclarationOrStaticBlock;
+            var transformed = transformPropertyWorker(property, receiver);
+            if (transformed && ts.hasStaticModifier(property) && (currentClassLexicalEnvironment === null || currentClassLexicalEnvironment === void 0 ? void 0 : currentClassLexicalEnvironment.facts)) {
+                // capture the lexical environment for the member
+                ts.setOriginalNode(transformed, property);
+                ts.addEmitFlags(transformed, 2 /* AdviseOnEmitNode */);
+                classLexicalEnvironmentMap.set(ts.getOriginalNodeId(transformed), currentClassLexicalEnvironment);
+            }
+            currentStaticPropertyDeclarationOrStaticBlock = savedCurrentStaticPropertyDeclarationOrStaticBlock;
+            return transformed;
+        }
+        function transformPropertyWorker(property, receiver) {
             var _a;
             // We generate a name here in order to reuse the value cached by the relocated computed name expression (which uses the same generated name)
             var emitAssignment = !useDefineForClassFields;
             var propertyName = ts.isComputedPropertyName(property.name) && !ts.isSimpleInlineableExpression(property.name.expression)
                 ? factory.updateComputedPropertyName(property.name, factory.getGeneratedNameForNode(property.name))
                 : property.name;
-            if (shouldTransformPrivateElements && ts.isPrivateIdentifier(propertyName)) {
+            if (ts.hasStaticModifier(property)) {
+                currentStaticPropertyDeclarationOrStaticBlock = property;
+            }
+            if (shouldTransformPrivateElementsOrClassStaticBlocks && ts.isPrivateIdentifier(propertyName)) {
                 var privateIdentifierInfo = accessPrivateIdentifier(propertyName);
                 if (privateIdentifierInfo) {
                     if (privateIdentifierInfo.kind === "f" /* Field */) {
@@ -88994,11 +90868,30 @@
                 enabledSubstitutions |= 1 /* ClassAliases */;
                 // We need to enable substitutions for identifiers. This allows us to
                 // substitute class names inside of a class declaration.
-                context.enableSubstitution(78 /* Identifier */);
+                context.enableSubstitution(79 /* Identifier */);
                 // Keep track of class aliases.
                 classAliases = [];
             }
         }
+        function enableSubstitutionForClassStaticThisOrSuperReference() {
+            if ((enabledSubstitutions & 2 /* ClassStaticThisOrSuperReference */) === 0) {
+                enabledSubstitutions |= 2 /* ClassStaticThisOrSuperReference */;
+                // substitute `this` in a static field initializer
+                context.enableSubstitution(108 /* ThisKeyword */);
+                // these push a new lexical environment that is not the class lexical environment
+                context.enableEmitNotification(254 /* FunctionDeclaration */);
+                context.enableEmitNotification(211 /* FunctionExpression */);
+                context.enableEmitNotification(169 /* Constructor */);
+                // these push a new lexical environment that is not the class lexical environment, except
+                // when they have a computed property name
+                context.enableEmitNotification(170 /* GetAccessor */);
+                context.enableEmitNotification(171 /* SetAccessor */);
+                context.enableEmitNotification(167 /* MethodDeclaration */);
+                context.enableEmitNotification(165 /* PropertyDeclaration */);
+                // class lexical environments are restored when entering a computed property name
+                context.enableEmitNotification(160 /* ComputedPropertyName */);
+            }
+        }
         /**
          * Generates brand-check initializer for private methods.
          *
@@ -89007,13 +90900,76 @@
          * @param receiver The receiver on which each method should be assigned.
          */
         function addMethodStatements(statements, methods, receiver) {
-            if (!shouldTransformPrivateElements || !ts.some(methods)) {
+            if (!shouldTransformPrivateElementsOrClassStaticBlocks || !ts.some(methods)) {
                 return;
             }
             var weakSetName = getPrivateIdentifierEnvironment().weakSetName;
             ts.Debug.assert(weakSetName, "weakSetName should be set in private identifier environment");
             statements.push(factory.createExpressionStatement(createPrivateInstanceMethodInitializer(receiver, weakSetName)));
         }
+        function visitInvalidSuperProperty(node) {
+            return ts.isPropertyAccessExpression(node) ?
+                factory.updatePropertyAccessExpression(node, factory.createVoidZero(), node.name) :
+                factory.updateElementAccessExpression(node, factory.createVoidZero(), ts.visitNode(node.argumentExpression, visitor, ts.isExpression));
+        }
+        function onEmitNode(hint, node, emitCallback) {
+            var original = ts.getOriginalNode(node);
+            if (original.id) {
+                var classLexicalEnvironment = classLexicalEnvironmentMap.get(original.id);
+                if (classLexicalEnvironment) {
+                    var savedClassLexicalEnvironment = currentClassLexicalEnvironment;
+                    var savedCurrentComputedPropertyNameClassLexicalEnvironment = currentComputedPropertyNameClassLexicalEnvironment;
+                    currentClassLexicalEnvironment = classLexicalEnvironment;
+                    currentComputedPropertyNameClassLexicalEnvironment = classLexicalEnvironment;
+                    previousOnEmitNode(hint, node, emitCallback);
+                    currentClassLexicalEnvironment = savedClassLexicalEnvironment;
+                    currentComputedPropertyNameClassLexicalEnvironment = savedCurrentComputedPropertyNameClassLexicalEnvironment;
+                    return;
+                }
+            }
+            switch (node.kind) {
+                case 211 /* FunctionExpression */:
+                    if (ts.isArrowFunction(original) || ts.getEmitFlags(node) & 262144 /* AsyncFunctionBody */) {
+                        break;
+                    }
+                // falls through
+                case 254 /* FunctionDeclaration */:
+                case 169 /* Constructor */: {
+                    var savedClassLexicalEnvironment = currentClassLexicalEnvironment;
+                    var savedCurrentComputedPropertyNameClassLexicalEnvironment = currentComputedPropertyNameClassLexicalEnvironment;
+                    currentClassLexicalEnvironment = undefined;
+                    currentComputedPropertyNameClassLexicalEnvironment = undefined;
+                    previousOnEmitNode(hint, node, emitCallback);
+                    currentClassLexicalEnvironment = savedClassLexicalEnvironment;
+                    currentComputedPropertyNameClassLexicalEnvironment = savedCurrentComputedPropertyNameClassLexicalEnvironment;
+                    return;
+                }
+                case 170 /* GetAccessor */:
+                case 171 /* SetAccessor */:
+                case 167 /* MethodDeclaration */:
+                case 165 /* PropertyDeclaration */: {
+                    var savedClassLexicalEnvironment = currentClassLexicalEnvironment;
+                    var savedCurrentComputedPropertyNameClassLexicalEnvironment = currentComputedPropertyNameClassLexicalEnvironment;
+                    currentComputedPropertyNameClassLexicalEnvironment = currentClassLexicalEnvironment;
+                    currentClassLexicalEnvironment = undefined;
+                    previousOnEmitNode(hint, node, emitCallback);
+                    currentClassLexicalEnvironment = savedClassLexicalEnvironment;
+                    currentComputedPropertyNameClassLexicalEnvironment = savedCurrentComputedPropertyNameClassLexicalEnvironment;
+                    return;
+                }
+                case 160 /* ComputedPropertyName */: {
+                    var savedClassLexicalEnvironment = currentClassLexicalEnvironment;
+                    var savedCurrentComputedPropertyNameClassLexicalEnvironment = currentComputedPropertyNameClassLexicalEnvironment;
+                    currentClassLexicalEnvironment = currentComputedPropertyNameClassLexicalEnvironment;
+                    currentComputedPropertyNameClassLexicalEnvironment = undefined;
+                    previousOnEmitNode(hint, node, emitCallback);
+                    currentClassLexicalEnvironment = savedClassLexicalEnvironment;
+                    currentComputedPropertyNameClassLexicalEnvironment = savedCurrentComputedPropertyNameClassLexicalEnvironment;
+                    return;
+                }
+            }
+            previousOnEmitNode(hint, node, emitCallback);
+        }
         /**
          * Hooks node substitutions.
          *
@@ -89029,8 +90985,22 @@
         }
         function substituteExpression(node) {
             switch (node.kind) {
-                case 78 /* Identifier */:
+                case 79 /* Identifier */:
                     return substituteExpressionIdentifier(node);
+                case 108 /* ThisKeyword */:
+                    return substituteThisExpression(node);
+            }
+            return node;
+        }
+        function substituteThisExpression(node) {
+            if (enabledSubstitutions & 2 /* ClassStaticThisOrSuperReference */ && currentClassLexicalEnvironment) {
+                var facts = currentClassLexicalEnvironment.facts, classConstructor = currentClassLexicalEnvironment.classConstructor;
+                if (facts & 1 /* ClassWasDecorated */) {
+                    return factory.createParenthesizedExpression(factory.createVoidZero());
+                }
+                if (classConstructor) {
+                    return ts.setTextRange(ts.setOriginalNode(factory.cloneNode(classConstructor), node), node);
+                }
             }
             return node;
         }
@@ -89083,21 +91053,28 @@
                 return (inlinable || ts.isIdentifier(innerExpression)) ? undefined : expression;
             }
         }
-        function startPrivateIdentifierEnvironment() {
-            privateIdentifierEnvironmentStack.push(currentPrivateIdentifierEnvironment);
-            currentPrivateIdentifierEnvironment = undefined;
+        function startClassLexicalEnvironment() {
+            classLexicalEnvironmentStack.push(currentClassLexicalEnvironment);
+            currentClassLexicalEnvironment = undefined;
         }
-        function endPrivateIdentifierEnvironment() {
-            currentPrivateIdentifierEnvironment = privateIdentifierEnvironmentStack.pop();
+        function endClassLexicalEnvironment() {
+            currentClassLexicalEnvironment = classLexicalEnvironmentStack.pop();
+        }
+        function getClassLexicalEnvironment() {
+            return currentClassLexicalEnvironment || (currentClassLexicalEnvironment = {
+                facts: 0 /* None */,
+                classConstructor: undefined,
+                superClassReference: undefined,
+                privateIdentifierEnvironment: undefined,
+            });
         }
         function getPrivateIdentifierEnvironment() {
-            if (!currentPrivateIdentifierEnvironment) {
-                currentPrivateIdentifierEnvironment = {
-                    className: "",
-                    identifiers: new ts.Map()
-                };
-            }
-            return currentPrivateIdentifierEnvironment;
+            var lex = getClassLexicalEnvironment();
+            lex.privateIdentifierEnvironment || (lex.privateIdentifierEnvironment = {
+                className: "",
+                identifiers: new ts.Map()
+            });
+            return lex.privateIdentifierEnvironment;
         }
         function getPendingExpressions() {
             return pendingExpressions || (pendingExpressions = []);
@@ -89105,17 +91082,19 @@
         function addPrivateIdentifierToEnvironment(node) {
             var _a;
             var text = ts.getTextOfPropertyName(node.name);
-            var env = getPrivateIdentifierEnvironment();
-            var weakSetName = env.weakSetName, classConstructor = env.classConstructor;
+            var lex = getClassLexicalEnvironment();
+            var classConstructor = lex.classConstructor;
+            var privateEnv = getPrivateIdentifierEnvironment();
+            var weakSetName = privateEnv.weakSetName;
             var assignmentExpressions = [];
             var privateName = node.name.escapedText;
-            var previousInfo = env.identifiers.get(privateName);
+            var previousInfo = privateEnv.identifiers.get(privateName);
             var isValid = !isReservedPrivateName(node.name) && previousInfo === undefined;
             if (ts.hasStaticModifier(node)) {
                 ts.Debug.assert(classConstructor, "weakSetName should be set in private identifier environment");
                 if (ts.isPropertyDeclaration(node)) {
                     var variableName = createHoistedVariableForPrivateName(text, node);
-                    env.identifiers.set(privateName, {
+                    privateEnv.identifiers.set(privateName, {
                         kind: "f" /* Field */,
                         variableName: variableName,
                         brandCheckIdentifier: classConstructor,
@@ -89125,7 +91104,7 @@
                 }
                 else if (ts.isMethodDeclaration(node)) {
                     var functionName = createHoistedVariableForPrivateName(text, node);
-                    env.identifiers.set(privateName, {
+                    privateEnv.identifiers.set(privateName, {
                         kind: "m" /* Method */,
                         methodName: functionName,
                         brandCheckIdentifier: classConstructor,
@@ -89139,7 +91118,7 @@
                         previousInfo.getterName = getterName;
                     }
                     else {
-                        env.identifiers.set(privateName, {
+                        privateEnv.identifiers.set(privateName, {
                             kind: "a" /* Accessor */,
                             getterName: getterName,
                             setterName: undefined,
@@ -89155,7 +91134,7 @@
                         previousInfo.setterName = setterName;
                     }
                     else {
-                        env.identifiers.set(privateName, {
+                        privateEnv.identifiers.set(privateName, {
                             kind: "a" /* Accessor */,
                             getterName: undefined,
                             setterName: setterName,
@@ -89171,7 +91150,7 @@
             }
             else if (ts.isPropertyDeclaration(node)) {
                 var weakMapName = createHoistedVariableForPrivateName(text, node);
-                env.identifiers.set(privateName, {
+                privateEnv.identifiers.set(privateName, {
                     kind: "f" /* Field */,
                     brandCheckIdentifier: weakMapName,
                     isStatic: false,
@@ -89183,7 +91162,7 @@
             }
             else if (ts.isMethodDeclaration(node)) {
                 ts.Debug.assert(weakSetName, "weakSetName should be set in private identifier environment");
-                env.identifiers.set(privateName, {
+                privateEnv.identifiers.set(privateName, {
                     kind: "m" /* Method */,
                     methodName: createHoistedVariableForPrivateName(text, node),
                     brandCheckIdentifier: weakSetName,
@@ -89199,7 +91178,7 @@
                         previousInfo.getterName = getterName;
                     }
                     else {
-                        env.identifiers.set(privateName, {
+                        privateEnv.identifiers.set(privateName, {
                             kind: "a" /* Accessor */,
                             getterName: getterName,
                             setterName: undefined,
@@ -89215,7 +91194,7 @@
                         previousInfo.setterName = setterName;
                     }
                     else {
-                        env.identifiers.set(privateName, {
+                        privateEnv.identifiers.set(privateName, {
                             kind: "a" /* Accessor */,
                             getterName: undefined,
                             setterName: setterName,
@@ -89247,18 +91226,19 @@
             return createHoistedVariableForClass(privateName.substring(1), node.name);
         }
         function accessPrivateIdentifier(name) {
-            if (currentPrivateIdentifierEnvironment) {
-                var info = currentPrivateIdentifierEnvironment.identifiers.get(name.escapedText);
+            var _a;
+            if (currentClassLexicalEnvironment === null || currentClassLexicalEnvironment === void 0 ? void 0 : currentClassLexicalEnvironment.privateIdentifierEnvironment) {
+                var info = currentClassLexicalEnvironment.privateIdentifierEnvironment.identifiers.get(name.escapedText);
                 if (info) {
                     return info;
                 }
             }
-            for (var i = privateIdentifierEnvironmentStack.length - 1; i >= 0; --i) {
-                var env = privateIdentifierEnvironmentStack[i];
+            for (var i = classLexicalEnvironmentStack.length - 1; i >= 0; --i) {
+                var env = classLexicalEnvironmentStack[i];
                 if (!env) {
                     continue;
                 }
-                var info = env.identifiers.get(name.escapedText);
+                var info = (_a = env.privateIdentifierEnvironment) === null || _a === void 0 ? void 0 : _a.identifiers.get(name.escapedText);
                 if (info) {
                     return info;
                 }
@@ -89276,53 +91256,93 @@
             // differently inside the function.
             if (ts.isThisProperty(node) || ts.isSuperProperty(node) || !ts.isSimpleCopiableExpression(node.expression)) {
                 receiver = factory.createTempVariable(hoistVariableDeclaration, /*reservedInNestedScopes*/ true);
-                getPendingExpressions().push(factory.createBinaryExpression(receiver, 62 /* EqualsToken */, node.expression));
+                getPendingExpressions().push(factory.createBinaryExpression(receiver, 63 /* EqualsToken */, ts.visitNode(node.expression, visitor, ts.isExpression)));
             }
-            return factory.createPropertyAccessExpression(
-            // Explicit parens required because of v8 regression (https://bugs.chromium.org/p/v8/issues/detail?id=9560)
-            factory.createParenthesizedExpression(factory.createObjectLiteralExpression([
-                factory.createSetAccessorDeclaration(
-                /*decorators*/ undefined, 
-                /*modifiers*/ undefined, "value", [factory.createParameterDeclaration(
-                    /*decorators*/ undefined, 
-                    /*modifiers*/ undefined, 
-                    /*dotDotDotToken*/ undefined, parameter, 
-                    /*questionToken*/ undefined, 
-                    /*type*/ undefined, 
-                    /*initializer*/ undefined)], factory.createBlock([factory.createExpressionStatement(createPrivateIdentifierAssignment(info, receiver, parameter, 62 /* EqualsToken */))]))
-            ])), "value");
+            return factory.createAssignmentTargetWrapper(parameter, createPrivateIdentifierAssignment(info, receiver, parameter, 63 /* EqualsToken */));
         }
         function visitArrayAssignmentTarget(node) {
             var target = ts.getTargetOfBindingOrAssignmentElement(node);
-            if (target && ts.isPrivateIdentifierPropertyAccessExpression(target)) {
-                var wrapped = wrapPrivateIdentifierForDestructuringTarget(target);
-                if (ts.isAssignmentExpression(node)) {
-                    return factory.updateBinaryExpression(node, wrapped, node.operatorToken, ts.visitNode(node.right, visitor, ts.isExpression));
+            if (target) {
+                var wrapped = void 0;
+                if (ts.isPrivateIdentifierPropertyAccessExpression(target)) {
+                    wrapped = wrapPrivateIdentifierForDestructuringTarget(target);
                 }
-                else if (ts.isSpreadElement(node)) {
-                    return factory.updateSpreadElement(node, wrapped);
+                else if (shouldTransformSuperInStaticInitializers &&
+                    ts.isSuperProperty(target) &&
+                    currentStaticPropertyDeclarationOrStaticBlock &&
+                    currentClassLexicalEnvironment) {
+                    var classConstructor = currentClassLexicalEnvironment.classConstructor, superClassReference = currentClassLexicalEnvironment.superClassReference, facts = currentClassLexicalEnvironment.facts;
+                    if (facts & 1 /* ClassWasDecorated */) {
+                        wrapped = visitInvalidSuperProperty(target);
+                    }
+                    else if (classConstructor && superClassReference) {
+                        var name = ts.isElementAccessExpression(target) ? ts.visitNode(target.argumentExpression, visitor, ts.isExpression) :
+                            ts.isIdentifier(target.name) ? factory.createStringLiteralFromNode(target.name) :
+                                undefined;
+                        if (name) {
+                            var temp = factory.createTempVariable(/*recordTempVariable*/ undefined);
+                            wrapped = factory.createAssignmentTargetWrapper(temp, factory.createReflectSetCall(superClassReference, name, temp, classConstructor));
+                        }
+                    }
                 }
-                else {
-                    return wrapped;
+                if (wrapped) {
+                    if (ts.isAssignmentExpression(node)) {
+                        return factory.updateBinaryExpression(node, wrapped, node.operatorToken, ts.visitNode(node.right, visitor, ts.isExpression));
+                    }
+                    else if (ts.isSpreadElement(node)) {
+                        return factory.updateSpreadElement(node, wrapped);
+                    }
+                    else {
+                        return wrapped;
+                    }
                 }
             }
             return ts.visitNode(node, visitorDestructuringTarget);
         }
         function visitObjectAssignmentTarget(node) {
-            if (ts.isPropertyAssignment(node)) {
+            if (ts.isObjectBindingOrAssignmentElement(node) && !ts.isShorthandPropertyAssignment(node)) {
                 var target = ts.getTargetOfBindingOrAssignmentElement(node);
-                if (target && ts.isPrivateIdentifierPropertyAccessExpression(target)) {
-                    var initializer = ts.getInitializerOfBindingOrAssignmentElement(node);
-                    var wrapped = wrapPrivateIdentifierForDestructuringTarget(target);
-                    return factory.updatePropertyAssignment(node, ts.visitNode(node.name, visitor), initializer ? factory.createAssignment(wrapped, ts.visitNode(initializer, visitor)) : wrapped);
+                var wrapped = void 0;
+                if (target) {
+                    if (ts.isPrivateIdentifierPropertyAccessExpression(target)) {
+                        wrapped = wrapPrivateIdentifierForDestructuringTarget(target);
+                    }
+                    else if (shouldTransformSuperInStaticInitializers &&
+                        ts.isSuperProperty(target) &&
+                        currentStaticPropertyDeclarationOrStaticBlock &&
+                        currentClassLexicalEnvironment) {
+                        var classConstructor = currentClassLexicalEnvironment.classConstructor, superClassReference = currentClassLexicalEnvironment.superClassReference, facts = currentClassLexicalEnvironment.facts;
+                        if (facts & 1 /* ClassWasDecorated */) {
+                            wrapped = visitInvalidSuperProperty(target);
+                        }
+                        else if (classConstructor && superClassReference) {
+                            var name = ts.isElementAccessExpression(target) ? ts.visitNode(target.argumentExpression, visitor, ts.isExpression) :
+                                ts.isIdentifier(target.name) ? factory.createStringLiteralFromNode(target.name) :
+                                    undefined;
+                            if (name) {
+                                var temp = factory.createTempVariable(/*recordTempVariable*/ undefined);
+                                wrapped = factory.createAssignmentTargetWrapper(temp, factory.createReflectSetCall(superClassReference, name, temp, classConstructor));
+                            }
+                        }
+                    }
                 }
-                return factory.updatePropertyAssignment(node, ts.visitNode(node.name, visitor), ts.visitNode(node.initializer, visitorDestructuringTarget));
+                if (ts.isPropertyAssignment(node)) {
+                    var initializer = ts.getInitializerOfBindingOrAssignmentElement(node);
+                    return factory.updatePropertyAssignment(node, ts.visitNode(node.name, visitor, ts.isPropertyName), wrapped ?
+                        initializer ? factory.createAssignment(wrapped, ts.visitNode(initializer, visitor)) : wrapped :
+                        ts.visitNode(node.initializer, visitorDestructuringTarget, ts.isExpression));
+                }
+                if (ts.isSpreadAssignment(node)) {
+                    return factory.updateSpreadAssignment(node, wrapped || ts.visitNode(node.expression, visitorDestructuringTarget, ts.isExpression));
+                }
+                ts.Debug.assert(wrapped === undefined, "Should not have generated a wrapped target");
             }
             return ts.visitNode(node, visitor);
         }
         function visitAssignmentPattern(node) {
             if (ts.isArrayLiteralExpression(node)) {
                 // Transforms private names in destructuring assignment array bindings.
+                // Transforms SuperProperty assignments in destructuring assignment array bindings in static initializers.
                 //
                 // Source:
                 // ([ this.#myProp ] = [ "hello" ]);
@@ -89333,6 +91353,7 @@
             }
             else {
                 // Transforms private names in destructuring assignment object bindings.
+                // Transforms SuperProperty assignments in destructuring assignment object bindings in static initializers.
                 //
                 // Source:
                 // ({ stringProperty: this.#myProp } = { stringProperty: "hello" });
@@ -89446,34 +91467,34 @@
                 return node;
             }
             switch (node.kind) {
-                case 129 /* AsyncKeyword */:
+                case 130 /* AsyncKeyword */:
                     // ES2017 async modifier should be elided for targets < ES2017
                     return undefined;
-                case 214 /* AwaitExpression */:
+                case 216 /* AwaitExpression */:
                     return visitAwaitExpression(node);
-                case 166 /* MethodDeclaration */:
+                case 167 /* MethodDeclaration */:
                     return doWithContext(1 /* NonTopLevel */ | 2 /* HasLexicalThis */, visitMethodDeclaration, node);
-                case 252 /* FunctionDeclaration */:
+                case 254 /* FunctionDeclaration */:
                     return doWithContext(1 /* NonTopLevel */ | 2 /* HasLexicalThis */, visitFunctionDeclaration, node);
-                case 209 /* FunctionExpression */:
+                case 211 /* FunctionExpression */:
                     return doWithContext(1 /* NonTopLevel */ | 2 /* HasLexicalThis */, visitFunctionExpression, node);
-                case 210 /* ArrowFunction */:
+                case 212 /* ArrowFunction */:
                     return doWithContext(1 /* NonTopLevel */, visitArrowFunction, node);
-                case 202 /* PropertyAccessExpression */:
-                    if (capturedSuperProperties && ts.isPropertyAccessExpression(node) && node.expression.kind === 105 /* SuperKeyword */) {
+                case 204 /* PropertyAccessExpression */:
+                    if (capturedSuperProperties && ts.isPropertyAccessExpression(node) && node.expression.kind === 106 /* SuperKeyword */) {
                         capturedSuperProperties.add(node.name.escapedText);
                     }
                     return ts.visitEachChild(node, visitor, context);
-                case 203 /* ElementAccessExpression */:
-                    if (capturedSuperProperties && node.expression.kind === 105 /* SuperKeyword */) {
+                case 205 /* ElementAccessExpression */:
+                    if (capturedSuperProperties && node.expression.kind === 106 /* SuperKeyword */) {
                         hasSuperElementAccess = true;
                     }
                     return ts.visitEachChild(node, visitor, context);
-                case 168 /* GetAccessor */:
-                case 169 /* SetAccessor */:
-                case 167 /* Constructor */:
-                case 253 /* ClassDeclaration */:
-                case 222 /* ClassExpression */:
+                case 170 /* GetAccessor */:
+                case 171 /* SetAccessor */:
+                case 169 /* Constructor */:
+                case 255 /* ClassDeclaration */:
+                case 224 /* ClassExpression */:
                     return doWithContext(1 /* NonTopLevel */ | 2 /* HasLexicalThis */, visitDefault, node);
                 default:
                     return ts.visitEachChild(node, visitor, context);
@@ -89482,27 +91503,27 @@
         function asyncBodyVisitor(node) {
             if (ts.isNodeWithPossibleHoistedDeclaration(node)) {
                 switch (node.kind) {
-                    case 233 /* VariableStatement */:
+                    case 235 /* VariableStatement */:
                         return visitVariableStatementInAsyncBody(node);
-                    case 238 /* ForStatement */:
+                    case 240 /* ForStatement */:
                         return visitForStatementInAsyncBody(node);
-                    case 239 /* ForInStatement */:
+                    case 241 /* ForInStatement */:
                         return visitForInStatementInAsyncBody(node);
-                    case 240 /* ForOfStatement */:
+                    case 242 /* ForOfStatement */:
                         return visitForOfStatementInAsyncBody(node);
-                    case 288 /* CatchClause */:
+                    case 290 /* CatchClause */:
                         return visitCatchClauseInAsyncBody(node);
-                    case 231 /* Block */:
-                    case 245 /* SwitchStatement */:
-                    case 259 /* CaseBlock */:
-                    case 285 /* CaseClause */:
-                    case 286 /* DefaultClause */:
-                    case 248 /* TryStatement */:
-                    case 236 /* DoStatement */:
-                    case 237 /* WhileStatement */:
-                    case 235 /* IfStatement */:
-                    case 244 /* WithStatement */:
-                    case 246 /* LabeledStatement */:
+                    case 233 /* Block */:
+                    case 247 /* SwitchStatement */:
+                    case 261 /* CaseBlock */:
+                    case 287 /* CaseClause */:
+                    case 288 /* DefaultClause */:
+                    case 250 /* TryStatement */:
+                    case 238 /* DoStatement */:
+                    case 239 /* WhileStatement */:
+                    case 237 /* IfStatement */:
+                    case 246 /* WithStatement */:
+                    case 248 /* LabeledStatement */:
                         return ts.visitEachChild(node, asyncBodyVisitor, context);
                     default:
                         return ts.Debug.assertNever(node, "Unhandled node.");
@@ -89707,7 +91728,7 @@
             var original = ts.getOriginalNode(node, ts.isFunctionLike);
             var nodeType = original.type;
             var promiseConstructor = languageVersion < 2 /* ES2015 */ ? getPromiseConstructor(nodeType) : undefined;
-            var isArrowFunction = node.kind === 210 /* ArrowFunction */;
+            var isArrowFunction = node.kind === 212 /* ArrowFunction */;
             var hasLexicalArguments = (resolver.getNodeCheckFlags(node) & 8192 /* CaptureArguments */) !== 0;
             // An async function is emit as an outer function that calls an inner
             // generator function. To preserve lexical bindings, we pass the current
@@ -89798,17 +91819,17 @@
                 enabledSubstitutions |= 1 /* AsyncMethodsWithSuper */;
                 // We need to enable substitutions for call, property access, and element access
                 // if we need to rewrite super calls.
-                context.enableSubstitution(204 /* CallExpression */);
-                context.enableSubstitution(202 /* PropertyAccessExpression */);
-                context.enableSubstitution(203 /* ElementAccessExpression */);
+                context.enableSubstitution(206 /* CallExpression */);
+                context.enableSubstitution(204 /* PropertyAccessExpression */);
+                context.enableSubstitution(205 /* ElementAccessExpression */);
                 // We need to be notified when entering and exiting declarations that bind super.
-                context.enableEmitNotification(253 /* ClassDeclaration */);
-                context.enableEmitNotification(166 /* MethodDeclaration */);
-                context.enableEmitNotification(168 /* GetAccessor */);
-                context.enableEmitNotification(169 /* SetAccessor */);
-                context.enableEmitNotification(167 /* Constructor */);
+                context.enableEmitNotification(255 /* ClassDeclaration */);
+                context.enableEmitNotification(167 /* MethodDeclaration */);
+                context.enableEmitNotification(170 /* GetAccessor */);
+                context.enableEmitNotification(171 /* SetAccessor */);
+                context.enableEmitNotification(169 /* Constructor */);
                 // We need to be notified when entering the generated accessor arrow functions.
-                context.enableEmitNotification(233 /* VariableStatement */);
+                context.enableEmitNotification(235 /* VariableStatement */);
             }
         }
         /**
@@ -89856,23 +91877,23 @@
         }
         function substituteExpression(node) {
             switch (node.kind) {
-                case 202 /* PropertyAccessExpression */:
+                case 204 /* PropertyAccessExpression */:
                     return substitutePropertyAccessExpression(node);
-                case 203 /* ElementAccessExpression */:
+                case 205 /* ElementAccessExpression */:
                     return substituteElementAccessExpression(node);
-                case 204 /* CallExpression */:
+                case 206 /* CallExpression */:
                     return substituteCallExpression(node);
             }
             return node;
         }
         function substitutePropertyAccessExpression(node) {
-            if (node.expression.kind === 105 /* SuperKeyword */) {
+            if (node.expression.kind === 106 /* SuperKeyword */) {
                 return ts.setTextRange(factory.createPropertyAccessExpression(factory.createUniqueName("_super", 16 /* Optimistic */ | 32 /* FileLevel */), node.name), node);
             }
             return node;
         }
         function substituteElementAccessExpression(node) {
-            if (node.expression.kind === 105 /* SuperKeyword */) {
+            if (node.expression.kind === 106 /* SuperKeyword */) {
                 return createSuperElementAccessInAsyncMethod(node.argumentExpression, node);
             }
             return node;
@@ -89886,17 +91907,17 @@
                 return factory.createCallExpression(factory.createPropertyAccessExpression(argumentExpression, "call"), 
                 /*typeArguments*/ undefined, __spreadArray([
                     factory.createThis()
-                ], node.arguments));
+                ], node.arguments, true));
             }
             return node;
         }
         function isSuperContainer(node) {
             var kind = node.kind;
-            return kind === 253 /* ClassDeclaration */
-                || kind === 167 /* Constructor */
-                || kind === 166 /* MethodDeclaration */
-                || kind === 168 /* GetAccessor */
-                || kind === 169 /* SetAccessor */;
+            return kind === 255 /* ClassDeclaration */
+                || kind === 169 /* Constructor */
+                || kind === 167 /* MethodDeclaration */
+                || kind === 170 /* GetAccessor */
+                || kind === 171 /* SetAccessor */;
         }
         function createSuperElementAccessInAsyncMethod(argumentExpression, location) {
             if (enclosingSuperContainerFlags & 4096 /* AsyncMethodWithSuperBinding */) {
@@ -90053,7 +92074,7 @@
             return visitorWorker(node, /*expressionResultIsUnused*/ true);
         }
         function visitorNoAsyncModifier(node) {
-            if (node.kind === 129 /* AsyncKeyword */) {
+            if (node.kind === 130 /* AsyncKeyword */) {
                 return undefined;
             }
             return node;
@@ -90079,70 +92100,70 @@
                 return node;
             }
             switch (node.kind) {
-                case 214 /* AwaitExpression */:
+                case 216 /* AwaitExpression */:
                     return visitAwaitExpression(node);
-                case 220 /* YieldExpression */:
+                case 222 /* YieldExpression */:
                     return visitYieldExpression(node);
-                case 243 /* ReturnStatement */:
+                case 245 /* ReturnStatement */:
                     return visitReturnStatement(node);
-                case 246 /* LabeledStatement */:
+                case 248 /* LabeledStatement */:
                     return visitLabeledStatement(node);
-                case 201 /* ObjectLiteralExpression */:
+                case 203 /* ObjectLiteralExpression */:
                     return visitObjectLiteralExpression(node);
-                case 217 /* BinaryExpression */:
+                case 219 /* BinaryExpression */:
                     return visitBinaryExpression(node, expressionResultIsUnused);
-                case 341 /* CommaListExpression */:
+                case 346 /* CommaListExpression */:
                     return visitCommaListExpression(node, expressionResultIsUnused);
-                case 288 /* CatchClause */:
+                case 290 /* CatchClause */:
                     return visitCatchClause(node);
-                case 233 /* VariableStatement */:
+                case 235 /* VariableStatement */:
                     return visitVariableStatement(node);
-                case 250 /* VariableDeclaration */:
+                case 252 /* VariableDeclaration */:
                     return visitVariableDeclaration(node);
-                case 236 /* DoStatement */:
-                case 237 /* WhileStatement */:
-                case 239 /* ForInStatement */:
+                case 238 /* DoStatement */:
+                case 239 /* WhileStatement */:
+                case 241 /* ForInStatement */:
                     return doWithHierarchyFacts(visitDefault, node, 0 /* IterationStatementExcludes */, 2 /* IterationStatementIncludes */);
-                case 240 /* ForOfStatement */:
+                case 242 /* ForOfStatement */:
                     return visitForOfStatement(node, /*outermostLabeledStatement*/ undefined);
-                case 238 /* ForStatement */:
+                case 240 /* ForStatement */:
                     return doWithHierarchyFacts(visitForStatement, node, 0 /* IterationStatementExcludes */, 2 /* IterationStatementIncludes */);
-                case 213 /* VoidExpression */:
+                case 215 /* VoidExpression */:
                     return visitVoidExpression(node);
-                case 167 /* Constructor */:
+                case 169 /* Constructor */:
                     return doWithHierarchyFacts(visitConstructorDeclaration, node, 2 /* ClassOrFunctionExcludes */, 1 /* ClassOrFunctionIncludes */);
-                case 166 /* MethodDeclaration */:
+                case 167 /* MethodDeclaration */:
                     return doWithHierarchyFacts(visitMethodDeclaration, node, 2 /* ClassOrFunctionExcludes */, 1 /* ClassOrFunctionIncludes */);
-                case 168 /* GetAccessor */:
+                case 170 /* GetAccessor */:
                     return doWithHierarchyFacts(visitGetAccessorDeclaration, node, 2 /* ClassOrFunctionExcludes */, 1 /* ClassOrFunctionIncludes */);
-                case 169 /* SetAccessor */:
+                case 171 /* SetAccessor */:
                     return doWithHierarchyFacts(visitSetAccessorDeclaration, node, 2 /* ClassOrFunctionExcludes */, 1 /* ClassOrFunctionIncludes */);
-                case 252 /* FunctionDeclaration */:
+                case 254 /* FunctionDeclaration */:
                     return doWithHierarchyFacts(visitFunctionDeclaration, node, 2 /* ClassOrFunctionExcludes */, 1 /* ClassOrFunctionIncludes */);
-                case 209 /* FunctionExpression */:
+                case 211 /* FunctionExpression */:
                     return doWithHierarchyFacts(visitFunctionExpression, node, 2 /* ClassOrFunctionExcludes */, 1 /* ClassOrFunctionIncludes */);
-                case 210 /* ArrowFunction */:
+                case 212 /* ArrowFunction */:
                     return doWithHierarchyFacts(visitArrowFunction, node, 2 /* ArrowFunctionExcludes */, 0 /* ArrowFunctionIncludes */);
-                case 161 /* Parameter */:
+                case 162 /* Parameter */:
                     return visitParameter(node);
-                case 234 /* ExpressionStatement */:
+                case 236 /* ExpressionStatement */:
                     return visitExpressionStatement(node);
-                case 208 /* ParenthesizedExpression */:
+                case 210 /* ParenthesizedExpression */:
                     return visitParenthesizedExpression(node, expressionResultIsUnused);
-                case 206 /* TaggedTemplateExpression */:
+                case 208 /* TaggedTemplateExpression */:
                     return visitTaggedTemplateExpression(node);
-                case 202 /* PropertyAccessExpression */:
-                    if (capturedSuperProperties && ts.isPropertyAccessExpression(node) && node.expression.kind === 105 /* SuperKeyword */) {
+                case 204 /* PropertyAccessExpression */:
+                    if (capturedSuperProperties && ts.isPropertyAccessExpression(node) && node.expression.kind === 106 /* SuperKeyword */) {
                         capturedSuperProperties.add(node.name.escapedText);
                     }
                     return ts.visitEachChild(node, visitor, context);
-                case 203 /* ElementAccessExpression */:
-                    if (capturedSuperProperties && node.expression.kind === 105 /* SuperKeyword */) {
+                case 205 /* ElementAccessExpression */:
+                    if (capturedSuperProperties && node.expression.kind === 106 /* SuperKeyword */) {
                         hasSuperElementAccess = true;
                     }
                     return ts.visitEachChild(node, visitor, context);
-                case 253 /* ClassDeclaration */:
-                case 222 /* ClassExpression */:
+                case 255 /* ClassDeclaration */:
+                case 224 /* ClassExpression */:
                     return doWithHierarchyFacts(visitDefault, node, 2 /* ClassOrFunctionExcludes */, 1 /* ClassOrFunctionIncludes */);
                 default:
                     return ts.visitEachChild(node, visitor, context);
@@ -90178,7 +92199,7 @@
         function visitLabeledStatement(node) {
             if (enclosingFunctionFlags & 2 /* Async */) {
                 var statement = ts.unwrapInnermostStatementOfLabel(node);
-                if (statement.kind === 240 /* ForOfStatement */ && statement.awaitModifier) {
+                if (statement.kind === 242 /* ForOfStatement */ && statement.awaitModifier) {
                     return visitForOfStatement(statement, node);
                 }
                 return factory.restoreEnclosingLabel(ts.visitNode(statement, visitor, ts.isStatement, factory.liftToBlock), node);
@@ -90190,7 +92211,7 @@
             var objects = [];
             for (var _i = 0, elements_4 = elements; _i < elements_4.length; _i++) {
                 var e = elements_4[_i];
-                if (e.kind === 291 /* SpreadAssignment */) {
+                if (e.kind === 293 /* SpreadAssignment */) {
                     if (chunkObject) {
                         objects.push(factory.createObjectLiteralExpression(chunkObject));
                         chunkObject = undefined;
@@ -90199,7 +92220,7 @@
                     objects.push(ts.visitNode(target, visitor, ts.isExpression));
                 }
                 else {
-                    chunkObject = ts.append(chunkObject, e.kind === 289 /* PropertyAssignment */
+                    chunkObject = ts.append(chunkObject, e.kind === 291 /* PropertyAssignment */
                         ? factory.createPropertyAssignment(e.name, ts.visitNode(e.initializer, visitor, ts.isExpression))
                         : ts.visitNode(e, visitor, ts.isObjectLiteralElementLike));
                 }
@@ -90233,7 +92254,7 @@
                 // If we translate the above to `__assign({}, k, l)`, the `l` will evaluate before `k` is spread and we
                 // end up with `{ a: 1, b: 2, c: 3 }`
                 var objects = chunkObjectLiteralElements(node.properties);
-                if (objects.length && objects[0].kind !== 201 /* ObjectLiteralExpression */) {
+                if (objects.length && objects[0].kind !== 203 /* ObjectLiteralExpression */) {
                     objects.unshift(factory.createObjectLiteralExpression());
                 }
                 var expression = objects[0];
@@ -90322,7 +92343,7 @@
                 if (ts.some(visitedBindings)) {
                     block = factory.updateBlock(block, __spreadArray([
                         factory.createVariableStatement(/*modifiers*/ undefined, visitedBindings)
-                    ], block.statements));
+                    ], block.statements, true));
                 }
                 return factory.updateCatchClause(node, factory.updateVariableDeclaration(node.variableDeclaration, name, /*exclamationToken*/ undefined, /*type*/ undefined, /*initializer*/ undefined), block);
             }
@@ -90646,17 +92667,17 @@
                 enabledSubstitutions |= 1 /* AsyncMethodsWithSuper */;
                 // We need to enable substitutions for call, property access, and element access
                 // if we need to rewrite super calls.
-                context.enableSubstitution(204 /* CallExpression */);
-                context.enableSubstitution(202 /* PropertyAccessExpression */);
-                context.enableSubstitution(203 /* ElementAccessExpression */);
+                context.enableSubstitution(206 /* CallExpression */);
+                context.enableSubstitution(204 /* PropertyAccessExpression */);
+                context.enableSubstitution(205 /* ElementAccessExpression */);
                 // We need to be notified when entering and exiting declarations that bind super.
-                context.enableEmitNotification(253 /* ClassDeclaration */);
-                context.enableEmitNotification(166 /* MethodDeclaration */);
-                context.enableEmitNotification(168 /* GetAccessor */);
-                context.enableEmitNotification(169 /* SetAccessor */);
-                context.enableEmitNotification(167 /* Constructor */);
+                context.enableEmitNotification(255 /* ClassDeclaration */);
+                context.enableEmitNotification(167 /* MethodDeclaration */);
+                context.enableEmitNotification(170 /* GetAccessor */);
+                context.enableEmitNotification(171 /* SetAccessor */);
+                context.enableEmitNotification(169 /* Constructor */);
                 // We need to be notified when entering the generated accessor arrow functions.
-                context.enableEmitNotification(233 /* VariableStatement */);
+                context.enableEmitNotification(235 /* VariableStatement */);
             }
         }
         /**
@@ -90704,23 +92725,23 @@
         }
         function substituteExpression(node) {
             switch (node.kind) {
-                case 202 /* PropertyAccessExpression */:
+                case 204 /* PropertyAccessExpression */:
                     return substitutePropertyAccessExpression(node);
-                case 203 /* ElementAccessExpression */:
+                case 205 /* ElementAccessExpression */:
                     return substituteElementAccessExpression(node);
-                case 204 /* CallExpression */:
+                case 206 /* CallExpression */:
                     return substituteCallExpression(node);
             }
             return node;
         }
         function substitutePropertyAccessExpression(node) {
-            if (node.expression.kind === 105 /* SuperKeyword */) {
+            if (node.expression.kind === 106 /* SuperKeyword */) {
                 return ts.setTextRange(factory.createPropertyAccessExpression(factory.createUniqueName("_super", 16 /* Optimistic */ | 32 /* FileLevel */), node.name), node);
             }
             return node;
         }
         function substituteElementAccessExpression(node) {
-            if (node.expression.kind === 105 /* SuperKeyword */) {
+            if (node.expression.kind === 106 /* SuperKeyword */) {
                 return createSuperElementAccessInAsyncMethod(node.argumentExpression, node);
             }
             return node;
@@ -90734,17 +92755,17 @@
                 return factory.createCallExpression(factory.createPropertyAccessExpression(argumentExpression, "call"), 
                 /*typeArguments*/ undefined, __spreadArray([
                     factory.createThis()
-                ], node.arguments));
+                ], node.arguments, true));
             }
             return node;
         }
         function isSuperContainer(node) {
             var kind = node.kind;
-            return kind === 253 /* ClassDeclaration */
-                || kind === 167 /* Constructor */
-                || kind === 166 /* MethodDeclaration */
-                || kind === 168 /* GetAccessor */
-                || kind === 169 /* SetAccessor */;
+            return kind === 255 /* ClassDeclaration */
+                || kind === 169 /* Constructor */
+                || kind === 167 /* MethodDeclaration */
+                || kind === 170 /* GetAccessor */
+                || kind === 171 /* SetAccessor */;
         }
         function createSuperElementAccessInAsyncMethod(argumentExpression, location) {
             if (enclosingSuperContainerFlags & 4096 /* AsyncMethodWithSuperBinding */) {
@@ -90776,7 +92797,7 @@
                 return node;
             }
             switch (node.kind) {
-                case 288 /* CatchClause */:
+                case 290 /* CatchClause */:
                     return visitCatchClause(node);
                 default:
                     return ts.visitEachChild(node, visitor, context);
@@ -90808,25 +92829,25 @@
                 return node;
             }
             switch (node.kind) {
-                case 204 /* CallExpression */: {
+                case 206 /* CallExpression */: {
                     var updated = visitNonOptionalCallExpression(node, /*captureThisArg*/ false);
                     ts.Debug.assertNotNode(updated, ts.isSyntheticReference);
                     return updated;
                 }
-                case 202 /* PropertyAccessExpression */:
-                case 203 /* ElementAccessExpression */:
+                case 204 /* PropertyAccessExpression */:
+                case 205 /* ElementAccessExpression */:
                     if (ts.isOptionalChain(node)) {
                         var updated = visitOptionalExpression(node, /*captureThisArg*/ false, /*isDelete*/ false);
                         ts.Debug.assertNotNode(updated, ts.isSyntheticReference);
                         return updated;
                     }
                     return ts.visitEachChild(node, visitor, context);
-                case 217 /* BinaryExpression */:
+                case 219 /* BinaryExpression */:
                     if (node.operatorToken.kind === 60 /* QuestionQuestionToken */) {
                         return transformNullishCoalescingExpression(node);
                     }
                     return ts.visitEachChild(node, visitor, context);
-                case 211 /* DeleteExpression */:
+                case 213 /* DeleteExpression */:
                     return visitDeleteExpression(node);
                 default:
                     return ts.visitEachChild(node, visitor, context);
@@ -90868,7 +92889,7 @@
                     thisArg = expression;
                 }
             }
-            expression = node.kind === 202 /* PropertyAccessExpression */
+            expression = node.kind === 204 /* PropertyAccessExpression */
                 ? factory.updatePropertyAccessExpression(node, expression, ts.visitNode(node.name, visitor, ts.isIdentifier))
                 : factory.updateElementAccessExpression(node, expression, ts.visitNode(node.argumentExpression, visitor, ts.isExpression));
             return thisArg ? factory.createSyntheticReferenceExpression(expression, thisArg) : expression;
@@ -90891,10 +92912,10 @@
         }
         function visitNonOptionalExpression(node, captureThisArg, isDelete) {
             switch (node.kind) {
-                case 208 /* ParenthesizedExpression */: return visitNonOptionalParenthesizedExpression(node, captureThisArg, isDelete);
-                case 202 /* PropertyAccessExpression */:
-                case 203 /* ElementAccessExpression */: return visitNonOptionalPropertyOrElementAccessExpression(node, captureThisArg, isDelete);
-                case 204 /* CallExpression */: return visitNonOptionalCallExpression(node, captureThisArg);
+                case 210 /* ParenthesizedExpression */: return visitNonOptionalParenthesizedExpression(node, captureThisArg, isDelete);
+                case 204 /* PropertyAccessExpression */:
+                case 205 /* ElementAccessExpression */: return visitNonOptionalPropertyOrElementAccessExpression(node, captureThisArg, isDelete);
+                case 206 /* CallExpression */: return visitNonOptionalCallExpression(node, captureThisArg);
                 default: return ts.visitNode(node, visitor, ts.isExpression);
             }
         }
@@ -90913,8 +92934,8 @@
             for (var i = 0; i < chain.length; i++) {
                 var segment = chain[i];
                 switch (segment.kind) {
-                    case 202 /* PropertyAccessExpression */:
-                    case 203 /* ElementAccessExpression */:
+                    case 204 /* PropertyAccessExpression */:
+                    case 205 /* ElementAccessExpression */:
                         if (i === chain.length - 1 && captureThisArg) {
                             if (!ts.isSimpleCopiableExpression(rightExpression)) {
                                 thisArg = factory.createTempVariable(hoistVariableDeclaration);
@@ -90924,13 +92945,13 @@
                                 thisArg = rightExpression;
                             }
                         }
-                        rightExpression = segment.kind === 202 /* PropertyAccessExpression */
+                        rightExpression = segment.kind === 204 /* PropertyAccessExpression */
                             ? factory.createPropertyAccessExpression(rightExpression, ts.visitNode(segment.name, visitor, ts.isIdentifier))
                             : factory.createElementAccessExpression(rightExpression, ts.visitNode(segment.argumentExpression, visitor, ts.isExpression));
                         break;
-                    case 204 /* CallExpression */:
+                    case 206 /* CallExpression */:
                         if (i === 0 && leftThisArg) {
-                            rightExpression = factory.createFunctionCallCall(rightExpression, leftThisArg.kind === 105 /* SuperKeyword */ ? factory.createThis() : leftThisArg, ts.visitNodes(segment.arguments, visitor, ts.isExpression));
+                            rightExpression = factory.createFunctionCallCall(rightExpression, leftThisArg.kind === 106 /* SuperKeyword */ ? factory.createThis() : leftThisArg, ts.visitNodes(segment.arguments, visitor, ts.isExpression));
                         }
                         else {
                             rightExpression = factory.createCallExpression(rightExpression, 
@@ -90985,7 +93006,7 @@
                 return node;
             }
             switch (node.kind) {
-                case 217 /* BinaryExpression */:
+                case 219 /* BinaryExpression */:
                     var binaryExpression = node;
                     if (ts.isLogicalOrCoalescingAssignmentExpression(binaryExpression)) {
                         return transformLogicalAssignment(binaryExpression);
@@ -91154,13 +93175,13 @@
         }
         function visitorWorker(node) {
             switch (node.kind) {
-                case 274 /* JsxElement */:
+                case 276 /* JsxElement */:
                     return visitJsxElement(node, /*isChild*/ false);
-                case 275 /* JsxSelfClosingElement */:
+                case 277 /* JsxSelfClosingElement */:
                     return visitJsxSelfClosingElement(node, /*isChild*/ false);
-                case 278 /* JsxFragment */:
+                case 280 /* JsxFragment */:
                     return visitJsxFragment(node, /*isChild*/ false);
-                case 284 /* JsxExpression */:
+                case 286 /* JsxExpression */:
                     return visitJsxExpression(node);
                 default:
                     return ts.visitEachChild(node, visitor, context);
@@ -91170,13 +93191,13 @@
             switch (node.kind) {
                 case 11 /* JsxText */:
                     return visitJsxText(node);
-                case 284 /* JsxExpression */:
+                case 286 /* JsxExpression */:
                     return visitJsxExpression(node);
-                case 274 /* JsxElement */:
+                case 276 /* JsxElement */:
                     return visitJsxElement(node, /*isChild*/ true);
-                case 275 /* JsxSelfClosingElement */:
+                case 277 /* JsxSelfClosingElement */:
                     return visitJsxSelfClosingElement(node, /*isChild*/ true);
-                case 278 /* JsxFragment */:
+                case 280 /* JsxFragment */:
                     return visitJsxFragment(node, /*isChild*/ true);
                 default:
                     return ts.Debug.failBadSyntaxKind(node);
@@ -91216,9 +93237,9 @@
         function convertJsxChildrenToChildrenPropObject(children) {
             var nonWhitespaceChildren = ts.getSemanticJsxChildren(children);
             if (ts.length(nonWhitespaceChildren) === 1) {
-                var result_14 = transformJsxChildToExpression(nonWhitespaceChildren[0]);
-                return result_14 && factory.createObjectLiteralExpression([
-                    factory.createPropertyAssignment("children", result_14)
+                var result_13 = transformJsxChildToExpression(nonWhitespaceChildren[0]);
+                return result_13 && factory.createObjectLiteralExpression([
+                    factory.createPropertyAssignment("children", result_13)
                 ]);
             }
             var result = ts.mapDefined(children, transformJsxChildToExpression);
@@ -91370,7 +93391,7 @@
                 var literal = factory.createStringLiteral(tryDecodeEntities(node.text) || node.text, singleQuote);
                 return ts.setTextRange(literal, node);
             }
-            else if (node.kind === 284 /* JsxExpression */) {
+            else if (node.kind === 286 /* JsxExpression */) {
                 if (node.expression === undefined) {
                     return factory.createTrue();
                 }
@@ -91464,7 +93485,7 @@
             return decoded === text ? undefined : decoded;
         }
         function getTagName(node) {
-            if (node.kind === 274 /* JsxElement */) {
+            if (node.kind === 276 /* JsxElement */) {
                 return getTagName(node.openingElement);
             }
             else {
@@ -91770,7 +93791,7 @@
                 return node;
             }
             switch (node.kind) {
-                case 217 /* BinaryExpression */:
+                case 219 /* BinaryExpression */:
                     return visitBinaryExpression(node);
                 default:
                     return ts.visitEachChild(node, visitor, context);
@@ -91778,7 +93799,7 @@
         }
         function visitBinaryExpression(node) {
             switch (node.operatorToken.kind) {
-                case 66 /* AsteriskAsteriskEqualsToken */:
+                case 67 /* AsteriskAsteriskEqualsToken */:
                     return visitExponentiationAssignmentExpression(node);
                 case 42 /* AsteriskAsteriskToken */:
                     return visitExponentiationExpression(node);
@@ -91867,12 +93888,13 @@
         HierarchyFacts[HierarchyFacts["ForStatement"] = 2048] = "ForStatement";
         HierarchyFacts[HierarchyFacts["ForInOrForOfStatement"] = 4096] = "ForInOrForOfStatement";
         HierarchyFacts[HierarchyFacts["ConstructorWithCapturedSuper"] = 8192] = "ConstructorWithCapturedSuper";
+        HierarchyFacts[HierarchyFacts["StaticInitializer"] = 16384] = "StaticInitializer";
         // NOTE: do not add more ancestor flags without also updating AncestorFactsMask below.
         // NOTE: when adding a new ancestor flag, be sure to update the subtree flags below.
         //
         // Ancestor masks
         //
-        HierarchyFacts[HierarchyFacts["AncestorFactsMask"] = 16383] = "AncestorFactsMask";
+        HierarchyFacts[HierarchyFacts["AncestorFactsMask"] = 32767] = "AncestorFactsMask";
         // We are always in *some* kind of block scope, but only specific block-scope containers are
         // top-level or Blocks.
         HierarchyFacts[HierarchyFacts["BlockScopeIncludes"] = 0] = "BlockScopeIncludes";
@@ -91882,16 +93904,16 @@
         HierarchyFacts[HierarchyFacts["SourceFileExcludes"] = 8064] = "SourceFileExcludes";
         // Functions, methods, and accessors are both new lexical scopes and new block scopes.
         HierarchyFacts[HierarchyFacts["FunctionIncludes"] = 65] = "FunctionIncludes";
-        HierarchyFacts[HierarchyFacts["FunctionExcludes"] = 16286] = "FunctionExcludes";
+        HierarchyFacts[HierarchyFacts["FunctionExcludes"] = 32670] = "FunctionExcludes";
         HierarchyFacts[HierarchyFacts["AsyncFunctionBodyIncludes"] = 69] = "AsyncFunctionBodyIncludes";
-        HierarchyFacts[HierarchyFacts["AsyncFunctionBodyExcludes"] = 16278] = "AsyncFunctionBodyExcludes";
+        HierarchyFacts[HierarchyFacts["AsyncFunctionBodyExcludes"] = 32662] = "AsyncFunctionBodyExcludes";
         // Arrow functions are lexically scoped to their container, but are new block scopes.
         HierarchyFacts[HierarchyFacts["ArrowFunctionIncludes"] = 66] = "ArrowFunctionIncludes";
         HierarchyFacts[HierarchyFacts["ArrowFunctionExcludes"] = 15232] = "ArrowFunctionExcludes";
         // Constructors are both new lexical scopes and new block scopes. Constructors are also
         // always considered non-static members of a class.
         HierarchyFacts[HierarchyFacts["ConstructorIncludes"] = 73] = "ConstructorIncludes";
-        HierarchyFacts[HierarchyFacts["ConstructorExcludes"] = 16278] = "ConstructorExcludes";
+        HierarchyFacts[HierarchyFacts["ConstructorExcludes"] = 32662] = "ConstructorExcludes";
         // 'do' and 'while' statements are not block scopes. We track that the subtree is contained
         // within an IterationStatement to indicate whether the embedded statement is an
         // IterationStatementBlock.
@@ -91909,18 +93931,29 @@
         HierarchyFacts[HierarchyFacts["BlockExcludes"] = 6976] = "BlockExcludes";
         HierarchyFacts[HierarchyFacts["IterationStatementBlockIncludes"] = 512] = "IterationStatementBlockIncludes";
         HierarchyFacts[HierarchyFacts["IterationStatementBlockExcludes"] = 7104] = "IterationStatementBlockExcludes";
+        HierarchyFacts[HierarchyFacts["StaticInitializerIncludes"] = 16449] = "StaticInitializerIncludes";
+        HierarchyFacts[HierarchyFacts["StaticInitializerExcludes"] = 32670] = "StaticInitializerExcludes";
         //
         // Subtree facts
         //
-        HierarchyFacts[HierarchyFacts["NewTarget"] = 16384] = "NewTarget";
-        HierarchyFacts[HierarchyFacts["CapturedLexicalThis"] = 32768] = "CapturedLexicalThis";
+        HierarchyFacts[HierarchyFacts["NewTarget"] = 32768] = "NewTarget";
+        HierarchyFacts[HierarchyFacts["CapturedLexicalThis"] = 65536] = "CapturedLexicalThis";
         //
         // Subtree masks
         //
-        HierarchyFacts[HierarchyFacts["SubtreeFactsMask"] = -16384] = "SubtreeFactsMask";
+        HierarchyFacts[HierarchyFacts["SubtreeFactsMask"] = -32768] = "SubtreeFactsMask";
         HierarchyFacts[HierarchyFacts["ArrowFunctionSubtreeExcludes"] = 0] = "ArrowFunctionSubtreeExcludes";
-        HierarchyFacts[HierarchyFacts["FunctionSubtreeExcludes"] = 49152] = "FunctionSubtreeExcludes";
+        HierarchyFacts[HierarchyFacts["FunctionSubtreeExcludes"] = 98304] = "FunctionSubtreeExcludes";
     })(HierarchyFacts || (HierarchyFacts = {}));
+    var SpreadSegmentKind;
+    (function (SpreadSegmentKind) {
+        SpreadSegmentKind[SpreadSegmentKind["None"] = 0] = "None";
+        SpreadSegmentKind[SpreadSegmentKind["UnpackedSpread"] = 1] = "UnpackedSpread";
+        SpreadSegmentKind[SpreadSegmentKind["PackedSpread"] = 2] = "PackedSpread";
+    })(SpreadSegmentKind || (SpreadSegmentKind = {}));
+    function createSpreadSegment(kind, expression) {
+        return { kind: kind, expression: expression };
+    }
     function transformES2015(context) {
         var factory = context.factory, emitHelpers = context.getEmitHelperFactory, startLexicalEnvironment = context.startLexicalEnvironment, resumeLexicalEnvironment = context.resumeLexicalEnvironment, endLexicalEnvironment = context.endLexicalEnvironment, hoistVariableDeclaration = context.hoistVariableDeclaration;
         var compilerOptions = context.getCompilerOptions();
@@ -91968,7 +94001,7 @@
          */
         function enterSubtree(excludeFacts, includeFacts) {
             var ancestorFacts = hierarchyFacts;
-            hierarchyFacts = (hierarchyFacts & ~excludeFacts | includeFacts) & 16383 /* AncestorFactsMask */;
+            hierarchyFacts = (hierarchyFacts & ~excludeFacts | includeFacts) & 32767 /* AncestorFactsMask */;
             return ancestorFacts;
         }
         /**
@@ -91979,11 +94012,11 @@
          * @param includeFacts The new `HierarchyFacts` of the subtree that should be propagated.
          */
         function exitSubtree(ancestorFacts, excludeFacts, includeFacts) {
-            hierarchyFacts = (hierarchyFacts & ~excludeFacts | includeFacts) & -16384 /* SubtreeFactsMask */ | ancestorFacts;
+            hierarchyFacts = (hierarchyFacts & ~excludeFacts | includeFacts) & -32768 /* SubtreeFactsMask */ | ancestorFacts;
         }
         function isReturnVoidStatementInConstructorWithCapturedSuper(node) {
             return (hierarchyFacts & 8192 /* ConstructorWithCapturedSuper */) !== 0
-                && node.kind === 243 /* ReturnStatement */
+                && node.kind === 245 /* ReturnStatement */
                 && !node.expression;
         }
         function isOrMayContainReturnCompletion(node) {
@@ -92014,75 +94047,88 @@
         function visitorWithUnusedExpressionResult(node) {
             return shouldVisitNode(node) ? visitorWorker(node, /*expressionResultIsUnused*/ true) : node;
         }
+        function classWrapperStatementVisitor(node) {
+            if (shouldVisitNode(node)) {
+                var original = ts.getOriginalNode(node);
+                if (ts.isPropertyDeclaration(original) && ts.hasStaticModifier(original)) {
+                    var ancestorFacts = enterSubtree(32670 /* StaticInitializerExcludes */, 16449 /* StaticInitializerIncludes */);
+                    var result = visitorWorker(node, /*expressionResultIsUnused*/ false);
+                    exitSubtree(ancestorFacts, 98304 /* FunctionSubtreeExcludes */, 0 /* None */);
+                    return result;
+                }
+                return visitorWorker(node, /*expressionResultIsUnused*/ false);
+            }
+            return node;
+        }
         function callExpressionVisitor(node) {
-            if (node.kind === 105 /* SuperKeyword */) {
+            if (node.kind === 106 /* SuperKeyword */) {
                 return visitSuperKeyword(/*isExpressionOfCall*/ true);
             }
             return visitor(node);
         }
         function visitorWorker(node, expressionResultIsUnused) {
             switch (node.kind) {
-                case 123 /* StaticKeyword */:
+                case 124 /* StaticKeyword */:
                     return undefined; // elide static keyword
-                case 253 /* ClassDeclaration */:
+                case 255 /* ClassDeclaration */:
                     return visitClassDeclaration(node);
-                case 222 /* ClassExpression */:
+                case 224 /* ClassExpression */:
                     return visitClassExpression(node);
-                case 161 /* Parameter */:
+                case 162 /* Parameter */:
                     return visitParameter(node);
-                case 252 /* FunctionDeclaration */:
+                case 254 /* FunctionDeclaration */:
                     return visitFunctionDeclaration(node);
-                case 210 /* ArrowFunction */:
+                case 212 /* ArrowFunction */:
                     return visitArrowFunction(node);
-                case 209 /* FunctionExpression */:
+                case 211 /* FunctionExpression */:
                     return visitFunctionExpression(node);
-                case 250 /* VariableDeclaration */:
+                case 252 /* VariableDeclaration */:
                     return visitVariableDeclaration(node);
-                case 78 /* Identifier */:
+                case 79 /* Identifier */:
                     return visitIdentifier(node);
-                case 251 /* VariableDeclarationList */:
+                case 253 /* VariableDeclarationList */:
                     return visitVariableDeclarationList(node);
-                case 245 /* SwitchStatement */:
+                case 247 /* SwitchStatement */:
                     return visitSwitchStatement(node);
-                case 259 /* CaseBlock */:
+                case 261 /* CaseBlock */:
                     return visitCaseBlock(node);
-                case 231 /* Block */:
+                case 233 /* Block */:
                     return visitBlock(node, /*isFunctionBody*/ false);
-                case 242 /* BreakStatement */:
-                case 241 /* ContinueStatement */:
+                case 244 /* BreakStatement */:
+                case 243 /* ContinueStatement */:
                     return visitBreakOrContinueStatement(node);
-                case 246 /* LabeledStatement */:
+                case 248 /* LabeledStatement */:
                     return visitLabeledStatement(node);
-                case 236 /* DoStatement */:
-                case 237 /* WhileStatement */:
+                case 238 /* DoStatement */:
+                case 239 /* WhileStatement */:
                     return visitDoOrWhileStatement(node, /*outermostLabeledStatement*/ undefined);
-                case 238 /* ForStatement */:
+                case 240 /* ForStatement */:
                     return visitForStatement(node, /*outermostLabeledStatement*/ undefined);
-                case 239 /* ForInStatement */:
+                case 241 /* ForInStatement */:
                     return visitForInStatement(node, /*outermostLabeledStatement*/ undefined);
-                case 240 /* ForOfStatement */:
+                case 242 /* ForOfStatement */:
                     return visitForOfStatement(node, /*outermostLabeledStatement*/ undefined);
-                case 234 /* ExpressionStatement */:
+                case 236 /* ExpressionStatement */:
                     return visitExpressionStatement(node);
-                case 201 /* ObjectLiteralExpression */:
+                case 203 /* ObjectLiteralExpression */:
                     return visitObjectLiteralExpression(node);
-                case 288 /* CatchClause */:
+                case 290 /* CatchClause */:
                     return visitCatchClause(node);
-                case 290 /* ShorthandPropertyAssignment */:
+                case 292 /* ShorthandPropertyAssignment */:
                     return visitShorthandPropertyAssignment(node);
-                case 159 /* ComputedPropertyName */:
+                case 160 /* ComputedPropertyName */:
                     return visitComputedPropertyName(node);
-                case 200 /* ArrayLiteralExpression */:
+                case 202 /* ArrayLiteralExpression */:
                     return visitArrayLiteralExpression(node);
-                case 204 /* CallExpression */:
+                case 206 /* CallExpression */:
                     return visitCallExpression(node);
-                case 205 /* NewExpression */:
+                case 207 /* NewExpression */:
                     return visitNewExpression(node);
-                case 208 /* ParenthesizedExpression */:
+                case 210 /* ParenthesizedExpression */:
                     return visitParenthesizedExpression(node, expressionResultIsUnused);
-                case 217 /* BinaryExpression */:
+                case 219 /* BinaryExpression */:
                     return visitBinaryExpression(node, expressionResultIsUnused);
-                case 341 /* CommaListExpression */:
+                case 346 /* CommaListExpression */:
                     return visitCommaListExpression(node, expressionResultIsUnused);
                 case 14 /* NoSubstitutionTemplateLiteral */:
                 case 15 /* TemplateHead */:
@@ -92093,30 +94139,30 @@
                     return visitStringLiteral(node);
                 case 8 /* NumericLiteral */:
                     return visitNumericLiteral(node);
-                case 206 /* TaggedTemplateExpression */:
+                case 208 /* TaggedTemplateExpression */:
                     return visitTaggedTemplateExpression(node);
-                case 219 /* TemplateExpression */:
+                case 221 /* TemplateExpression */:
                     return visitTemplateExpression(node);
-                case 220 /* YieldExpression */:
+                case 222 /* YieldExpression */:
                     return visitYieldExpression(node);
-                case 221 /* SpreadElement */:
+                case 223 /* SpreadElement */:
                     return visitSpreadElement(node);
-                case 105 /* SuperKeyword */:
+                case 106 /* SuperKeyword */:
                     return visitSuperKeyword(/*isExpressionOfCall*/ false);
-                case 107 /* ThisKeyword */:
+                case 108 /* ThisKeyword */:
                     return visitThisKeyword(node);
-                case 227 /* MetaProperty */:
+                case 229 /* MetaProperty */:
                     return visitMetaProperty(node);
-                case 166 /* MethodDeclaration */:
+                case 167 /* MethodDeclaration */:
                     return visitMethodDeclaration(node);
-                case 168 /* GetAccessor */:
-                case 169 /* SetAccessor */:
+                case 170 /* GetAccessor */:
+                case 171 /* SetAccessor */:
                     return visitAccessorDeclaration(node);
-                case 233 /* VariableStatement */:
+                case 235 /* VariableStatement */:
                     return visitVariableStatement(node);
-                case 243 /* ReturnStatement */:
+                case 245 /* ReturnStatement */:
                     return visitReturnStatement(node);
-                case 213 /* VoidExpression */:
+                case 215 /* VoidExpression */:
                     return visitVoidExpression(node);
                 default:
                     return ts.visitEachChild(node, visitor, context);
@@ -92175,8 +94221,8 @@
             return ts.visitEachChild(node, visitor, context);
         }
         function visitThisKeyword(node) {
-            if (hierarchyFacts & 2 /* ArrowFunction */) {
-                hierarchyFacts |= 32768 /* CapturedLexicalThis */;
+            if (hierarchyFacts & 2 /* ArrowFunction */ && !(hierarchyFacts & 16384 /* StaticInitializer */)) {
+                hierarchyFacts |= 65536 /* CapturedLexicalThis */;
             }
             if (convertedLoopState) {
                 if (hierarchyFacts & 2 /* ArrowFunction */) {
@@ -92206,14 +94252,14 @@
                 // it is possible if either
                 //   - break/continue is labeled and label is located inside the converted loop
                 //   - break/continue is non-labeled and located in non-converted loop/switch statement
-                var jump = node.kind === 242 /* BreakStatement */ ? 2 /* Break */ : 4 /* Continue */;
+                var jump = node.kind === 244 /* BreakStatement */ ? 2 /* Break */ : 4 /* Continue */;
                 var canUseBreakOrContinue = (node.label && convertedLoopState.labels && convertedLoopState.labels.get(ts.idText(node.label))) ||
                     (!node.label && (convertedLoopState.allowedNonLabeledJumps & jump));
                 if (!canUseBreakOrContinue) {
                     var labelMarker = void 0;
                     var label = node.label;
                     if (!label) {
-                        if (node.kind === 242 /* BreakStatement */) {
+                        if (node.kind === 244 /* BreakStatement */) {
                             convertedLoopState.nonLocalJumps |= 2 /* Break */;
                             labelMarker = "break";
                         }
@@ -92224,7 +94270,7 @@
                         }
                     }
                     else {
-                        if (node.kind === 242 /* BreakStatement */) {
+                        if (node.kind === 244 /* BreakStatement */) {
                             labelMarker = "break-" + label.escapedText;
                             setLabeledJump(convertedLoopState, /*isBreak*/ true, ts.idText(label), labelMarker);
                         }
@@ -92421,7 +94467,7 @@
         function addConstructor(statements, node, name, extendsClauseElement) {
             var savedConvertedLoopState = convertedLoopState;
             convertedLoopState = undefined;
-            var ancestorFacts = enterSubtree(16278 /* ConstructorExcludes */, 73 /* ConstructorIncludes */);
+            var ancestorFacts = enterSubtree(32662 /* ConstructorExcludes */, 73 /* ConstructorIncludes */);
             var constructor = ts.getFirstConstructorWithBody(node);
             var hasSynthesizedSuper = hasSynthesizedDefaultSuperCall(constructor, extendsClauseElement !== undefined);
             var constructorFunction = factory.createFunctionDeclaration(
@@ -92435,7 +94481,7 @@
                 ts.setEmitFlags(constructorFunction, 8 /* CapturesThis */);
             }
             statements.push(constructorFunction);
-            exitSubtree(ancestorFacts, 49152 /* FunctionSubtreeExcludes */, 0 /* None */);
+            exitSubtree(ancestorFacts, 98304 /* FunctionSubtreeExcludes */, 0 /* None */);
             convertedLoopState = savedConvertedLoopState;
         }
         /**
@@ -92484,7 +94530,7 @@
         function transformConstructorBody(constructor, node, extendsClauseElement, hasSynthesizedSuper) {
             // determine whether the class is known syntactically to be a derived class (e.g. a
             // class that extends a value that is not syntactically known to be `null`).
-            var isDerivedClass = !!extendsClauseElement && ts.skipOuterExpressions(extendsClauseElement.expression).kind !== 103 /* NullKeyword */;
+            var isDerivedClass = !!extendsClauseElement && ts.skipOuterExpressions(extendsClauseElement.expression).kind !== 104 /* NullKeyword */;
             // When the subclass does not have a constructor, we synthesize a *default* constructor using the following
             // representation:
             //
@@ -92622,11 +94668,11 @@
          */
         function isSufficientlyCoveredByReturnStatements(statement) {
             // A return statement is considered covered.
-            if (statement.kind === 243 /* ReturnStatement */) {
+            if (statement.kind === 245 /* ReturnStatement */) {
                 return true;
             }
             // An if-statement with two covered branches is covered.
-            else if (statement.kind === 235 /* IfStatement */) {
+            else if (statement.kind === 237 /* IfStatement */) {
                 var ifStatement = statement;
                 if (ifStatement.elseStatement) {
                     return isSufficientlyCoveredByReturnStatements(ifStatement.thenStatement) &&
@@ -92634,7 +94680,7 @@
                 }
             }
             // A block is covered if it has a last statement which is covered.
-            else if (statement.kind === 231 /* Block */) {
+            else if (statement.kind === 233 /* Block */) {
                 var lastStatement = ts.lastOrUndefined(statement.statements);
                 if (lastStatement && isSufficientlyCoveredByReturnStatements(lastStatement)) {
                     return true;
@@ -92792,10 +94838,10 @@
             }
             // `declarationName` is the name of the local declaration for the parameter.
             // TODO(rbuckton): Does this need to be parented?
-            var declarationName = parameter.name.kind === 78 /* Identifier */ ? ts.setParent(ts.setTextRange(factory.cloneNode(parameter.name), parameter.name), parameter.name.parent) : factory.createTempVariable(/*recordTempVariable*/ undefined);
+            var declarationName = parameter.name.kind === 79 /* Identifier */ ? ts.setParent(ts.setTextRange(factory.cloneNode(parameter.name), parameter.name), parameter.name.parent) : factory.createTempVariable(/*recordTempVariable*/ undefined);
             ts.setEmitFlags(declarationName, 48 /* NoSourceMap */);
             // `expressionName` is the name of the parameter used in expressions.
-            var expressionName = parameter.name.kind === 78 /* Identifier */ ? factory.cloneNode(parameter.name) : declarationName;
+            var expressionName = parameter.name.kind === 79 /* Identifier */ ? factory.cloneNode(parameter.name) : declarationName;
             var restIndex = node.parameters.length - 1;
             var temp = factory.createLoopVariable();
             // var param = [];
@@ -92820,7 +94866,7 @@
             ts.setEmitFlags(forStatement, 1048576 /* CustomPrologue */);
             ts.startOnNewLine(forStatement);
             prologueStatements.push(forStatement);
-            if (parameter.name.kind !== 78 /* Identifier */) {
+            if (parameter.name.kind !== 79 /* Identifier */) {
                 // do the actual destructuring of the rest parameter if necessary
                 prologueStatements.push(ts.setEmitFlags(ts.setTextRange(factory.createVariableStatement(
                 /*modifiers*/ undefined, factory.createVariableDeclarationList(ts.flattenDestructuringBinding(parameter, visitor, context, 0 /* All */, expressionName))), parameter), 1048576 /* CustomPrologue */));
@@ -92836,7 +94882,7 @@
          * @param node A node.
          */
         function insertCaptureThisForNodeIfNeeded(statements, node) {
-            if (hierarchyFacts & 32768 /* CapturedLexicalThis */ && node.kind !== 210 /* ArrowFunction */) {
+            if (hierarchyFacts & 65536 /* CapturedLexicalThis */ && node.kind !== 212 /* ArrowFunction */) {
                 insertCaptureThisForNode(statements, node, factory.createThis());
                 return true;
             }
@@ -92855,28 +94901,28 @@
             ts.insertStatementAfterCustomPrologue(statements, captureThisStatement);
         }
         function insertCaptureNewTargetIfNeeded(statements, node, copyOnWrite) {
-            if (hierarchyFacts & 16384 /* NewTarget */) {
+            if (hierarchyFacts & 32768 /* NewTarget */) {
                 var newTarget = void 0;
                 switch (node.kind) {
-                    case 210 /* ArrowFunction */:
+                    case 212 /* ArrowFunction */:
                         return statements;
-                    case 166 /* MethodDeclaration */:
-                    case 168 /* GetAccessor */:
-                    case 169 /* SetAccessor */:
+                    case 167 /* MethodDeclaration */:
+                    case 170 /* GetAccessor */:
+                    case 171 /* SetAccessor */:
                         // Methods and accessors cannot be constructors, so 'new.target' will
                         // always return 'undefined'.
                         newTarget = factory.createVoidZero();
                         break;
-                    case 167 /* Constructor */:
+                    case 169 /* Constructor */:
                         // Class constructors can only be called with `new`, so `this.constructor`
                         // should be relatively safe to use.
                         newTarget = factory.createPropertyAccessExpression(ts.setEmitFlags(factory.createThis(), 4 /* NoSubstitution */), "constructor");
                         break;
-                    case 252 /* FunctionDeclaration */:
-                    case 209 /* FunctionExpression */:
+                    case 254 /* FunctionDeclaration */:
+                    case 211 /* FunctionExpression */:
                         // Functions can be called or constructed, and may have a `this` due to
                         // being a member or when calling an imported function via `other_1.f()`.
-                        newTarget = factory.createConditionalExpression(factory.createLogicalAnd(ts.setEmitFlags(factory.createThis(), 4 /* NoSubstitution */), factory.createBinaryExpression(ts.setEmitFlags(factory.createThis(), 4 /* NoSubstitution */), 101 /* InstanceOfKeyword */, factory.getLocalName(node))), 
+                        newTarget = factory.createConditionalExpression(factory.createLogicalAnd(ts.setEmitFlags(factory.createThis(), 4 /* NoSubstitution */), factory.createBinaryExpression(ts.setEmitFlags(factory.createThis(), 4 /* NoSubstitution */), 102 /* InstanceOfKeyword */, factory.getLocalName(node))), 
                         /*questionToken*/ undefined, factory.createPropertyAccessExpression(ts.setEmitFlags(factory.createThis(), 4 /* NoSubstitution */), "constructor"), 
                         /*colonToken*/ undefined, factory.createVoidZero());
                         break;
@@ -92908,20 +94954,21 @@
             for (var _i = 0, _a = node.members; _i < _a.length; _i++) {
                 var member = _a[_i];
                 switch (member.kind) {
-                    case 230 /* SemicolonClassElement */:
+                    case 232 /* SemicolonClassElement */:
                         statements.push(transformSemicolonClassElementToStatement(member));
                         break;
-                    case 166 /* MethodDeclaration */:
+                    case 167 /* MethodDeclaration */:
                         statements.push(transformClassMethodDeclarationToStatement(getClassMemberPrefix(node, member), member, node));
                         break;
-                    case 168 /* GetAccessor */:
-                    case 169 /* SetAccessor */:
+                    case 170 /* GetAccessor */:
+                    case 171 /* SetAccessor */:
                         var accessors = ts.getAllAccessorDeclarations(node.members, member);
                         if (member === accessors.firstAccessor) {
                             statements.push(transformAccessorsToStatement(getClassMemberPrefix(node, member), accessors, node));
                         }
                         break;
-                    case 167 /* Constructor */:
+                    case 169 /* Constructor */:
+                    case 168 /* ClassStaticBlockDeclaration */:
                         // Constructors are handled in visitClassExpression/visitClassDeclaration
                         break;
                     default:
@@ -93042,8 +95089,8 @@
          * @param node An ArrowFunction node.
          */
         function visitArrowFunction(node) {
-            if (node.transformFlags & 8192 /* ContainsLexicalThis */) {
-                hierarchyFacts |= 32768 /* CapturedLexicalThis */;
+            if (node.transformFlags & 8192 /* ContainsLexicalThis */ && !(hierarchyFacts & 16384 /* StaticInitializer */)) {
+                hierarchyFacts |= 65536 /* CapturedLexicalThis */;
             }
             var savedConvertedLoopState = convertedLoopState;
             convertedLoopState = undefined;
@@ -93057,9 +95104,6 @@
             ts.setTextRange(func, node);
             ts.setOriginalNode(func, node);
             ts.setEmitFlags(func, 8 /* CapturesThis */);
-            if (hierarchyFacts & 32768 /* CapturedLexicalThis */) {
-                enableSubstitutionsForCapturedThis();
-            }
             // If an arrow function contains
             exitSubtree(ancestorFacts, 0 /* ArrowFunctionSubtreeExcludes */, 0 /* None */);
             convertedLoopState = savedConvertedLoopState;
@@ -93072,16 +95116,16 @@
          */
         function visitFunctionExpression(node) {
             var ancestorFacts = ts.getEmitFlags(node) & 262144 /* AsyncFunctionBody */
-                ? enterSubtree(16278 /* AsyncFunctionBodyExcludes */, 69 /* AsyncFunctionBodyIncludes */)
-                : enterSubtree(16286 /* FunctionExcludes */, 65 /* FunctionIncludes */);
+                ? enterSubtree(32662 /* AsyncFunctionBodyExcludes */, 69 /* AsyncFunctionBodyIncludes */)
+                : enterSubtree(32670 /* FunctionExcludes */, 65 /* FunctionIncludes */);
             var savedConvertedLoopState = convertedLoopState;
             convertedLoopState = undefined;
             var parameters = ts.visitParameterList(node.parameters, visitor, context);
             var body = transformFunctionBody(node);
-            var name = hierarchyFacts & 16384 /* NewTarget */
+            var name = hierarchyFacts & 32768 /* NewTarget */
                 ? factory.getLocalName(node)
                 : node.name;
-            exitSubtree(ancestorFacts, 49152 /* FunctionSubtreeExcludes */, 0 /* None */);
+            exitSubtree(ancestorFacts, 98304 /* FunctionSubtreeExcludes */, 0 /* None */);
             convertedLoopState = savedConvertedLoopState;
             return factory.updateFunctionExpression(node, 
             /*modifiers*/ undefined, node.asteriskToken, name, 
@@ -93096,13 +95140,13 @@
         function visitFunctionDeclaration(node) {
             var savedConvertedLoopState = convertedLoopState;
             convertedLoopState = undefined;
-            var ancestorFacts = enterSubtree(16286 /* FunctionExcludes */, 65 /* FunctionIncludes */);
+            var ancestorFacts = enterSubtree(32670 /* FunctionExcludes */, 65 /* FunctionIncludes */);
             var parameters = ts.visitParameterList(node.parameters, visitor, context);
             var body = transformFunctionBody(node);
-            var name = hierarchyFacts & 16384 /* NewTarget */
+            var name = hierarchyFacts & 32768 /* NewTarget */
                 ? factory.getLocalName(node)
                 : node.name;
-            exitSubtree(ancestorFacts, 49152 /* FunctionSubtreeExcludes */, 0 /* None */);
+            exitSubtree(ancestorFacts, 98304 /* FunctionSubtreeExcludes */, 0 /* None */);
             convertedLoopState = savedConvertedLoopState;
             return factory.updateFunctionDeclaration(node, 
             /*decorators*/ undefined, ts.visitNodes(node.modifiers, visitor, ts.isModifier), node.asteriskToken, name, 
@@ -93119,15 +95163,15 @@
         function transformFunctionLikeToExpression(node, location, name, container) {
             var savedConvertedLoopState = convertedLoopState;
             convertedLoopState = undefined;
-            var ancestorFacts = container && ts.isClassLike(container) && !ts.hasSyntacticModifier(node, 32 /* Static */)
-                ? enterSubtree(16286 /* FunctionExcludes */, 65 /* FunctionIncludes */ | 8 /* NonStaticClassElement */)
-                : enterSubtree(16286 /* FunctionExcludes */, 65 /* FunctionIncludes */);
+            var ancestorFacts = container && ts.isClassLike(container) && !ts.isStatic(node)
+                ? enterSubtree(32670 /* FunctionExcludes */, 65 /* FunctionIncludes */ | 8 /* NonStaticClassElement */)
+                : enterSubtree(32670 /* FunctionExcludes */, 65 /* FunctionIncludes */);
             var parameters = ts.visitParameterList(node.parameters, visitor, context);
             var body = transformFunctionBody(node);
-            if (hierarchyFacts & 16384 /* NewTarget */ && !name && (node.kind === 252 /* FunctionDeclaration */ || node.kind === 209 /* FunctionExpression */)) {
+            if (hierarchyFacts & 32768 /* NewTarget */ && !name && (node.kind === 254 /* FunctionDeclaration */ || node.kind === 211 /* FunctionExpression */)) {
                 name = factory.getGeneratedNameForNode(node);
             }
-            exitSubtree(ancestorFacts, 49152 /* FunctionSubtreeExcludes */, 0 /* None */);
+            exitSubtree(ancestorFacts, 98304 /* FunctionSubtreeExcludes */, 0 /* None */);
             convertedLoopState = savedConvertedLoopState;
             return ts.setOriginalNode(ts.setTextRange(factory.createFunctionExpression(
             /*modifiers*/ undefined, node.asteriskToken, name, 
@@ -93170,7 +95214,7 @@
                 }
             }
             else {
-                ts.Debug.assert(node.kind === 210 /* ArrowFunction */);
+                ts.Debug.assert(node.kind === 212 /* ArrowFunction */);
                 // To align with the old emitter, we use a synthetic end position on the location
                 // for the statement list we synthesize when we down-level an arrow function with
                 // an expression function body. This prevents both comments and source maps from
@@ -93305,7 +95349,7 @@
                             assignment = ts.flattenDestructuringAssignment(decl, visitor, context, 0 /* All */);
                         }
                         else {
-                            assignment = factory.createBinaryExpression(decl.name, 62 /* EqualsToken */, ts.visitNode(decl.initializer, visitor, ts.isExpression));
+                            assignment = factory.createBinaryExpression(decl.name, 63 /* EqualsToken */, ts.visitNode(decl.initializer, visitor, ts.isExpression));
                             ts.setTextRange(assignment, decl);
                         }
                         assignments = ts.append(assignments, assignment);
@@ -93477,14 +95521,14 @@
         }
         function visitIterationStatement(node, outermostLabeledStatement) {
             switch (node.kind) {
-                case 236 /* DoStatement */:
-                case 237 /* WhileStatement */:
+                case 238 /* DoStatement */:
+                case 239 /* WhileStatement */:
                     return visitDoOrWhileStatement(node, outermostLabeledStatement);
-                case 238 /* ForStatement */:
+                case 240 /* ForStatement */:
                     return visitForStatement(node, outermostLabeledStatement);
-                case 239 /* ForInStatement */:
+                case 241 /* ForInStatement */:
                     return visitForInStatement(node, outermostLabeledStatement);
-                case 240 /* ForOfStatement */:
+                case 242 /* ForOfStatement */:
                     return visitForOfStatement(node, outermostLabeledStatement);
             }
         }
@@ -93670,7 +95714,7 @@
                 var property = properties[i];
                 if ((property.transformFlags & 524288 /* ContainsYield */ &&
                     hierarchyFacts & 4 /* AsyncFunctionBody */)
-                    || (hasComputed = ts.Debug.checkDefined(property.name).kind === 159 /* ComputedPropertyName */)) {
+                    || (hasComputed = ts.Debug.checkDefined(property.name).kind === 160 /* ComputedPropertyName */)) {
                     numInitialProperties = i;
                     break;
                 }
@@ -93722,7 +95766,7 @@
             }
             visit(node.name);
             function visit(node) {
-                if (node.kind === 78 /* Identifier */) {
+                if (node.kind === 79 /* Identifier */) {
                     state.hoistedLocalVariables.push(node);
                 }
                 else {
@@ -93786,11 +95830,11 @@
         }
         function convertIterationStatementCore(node, initializerFunction, convertedLoopBody) {
             switch (node.kind) {
-                case 238 /* ForStatement */: return convertForStatement(node, initializerFunction, convertedLoopBody);
-                case 239 /* ForInStatement */: return convertForInStatement(node, convertedLoopBody);
-                case 240 /* ForOfStatement */: return convertForOfStatement(node, convertedLoopBody);
-                case 236 /* DoStatement */: return convertDoStatement(node, convertedLoopBody);
-                case 237 /* WhileStatement */: return convertWhileStatement(node, convertedLoopBody);
+                case 240 /* ForStatement */: return convertForStatement(node, initializerFunction, convertedLoopBody);
+                case 241 /* ForInStatement */: return convertForInStatement(node, convertedLoopBody);
+                case 242 /* ForOfStatement */: return convertForOfStatement(node, convertedLoopBody);
+                case 238 /* DoStatement */: return convertDoStatement(node, convertedLoopBody);
+                case 239 /* WhileStatement */: return convertWhileStatement(node, convertedLoopBody);
                 default: return ts.Debug.failBadSyntaxKind(node, "IterationStatement expected");
             }
         }
@@ -93815,11 +95859,11 @@
         function createConvertedLoopState(node) {
             var loopInitializer;
             switch (node.kind) {
-                case 238 /* ForStatement */:
-                case 239 /* ForInStatement */:
-                case 240 /* ForOfStatement */:
+                case 240 /* ForStatement */:
+                case 241 /* ForInStatement */:
+                case 242 /* ForOfStatement */:
                     var initializer = node.initializer;
-                    if (initializer && initializer.kind === 251 /* VariableDeclarationList */) {
+                    if (initializer && initializer.kind === 253 /* VariableDeclarationList */) {
                         loopInitializer = initializer;
                     }
                     break;
@@ -94090,7 +96134,7 @@
         function copyOutParameter(outParam, copyDirection) {
             var source = copyDirection === 0 /* ToOriginal */ ? outParam.outParamName : outParam.originalName;
             var target = copyDirection === 0 /* ToOriginal */ ? outParam.originalName : outParam.outParamName;
-            return factory.createBinaryExpression(target, 62 /* EqualsToken */, source);
+            return factory.createBinaryExpression(target, 63 /* EqualsToken */, source);
         }
         function copyOutParameters(outParams, partFlags, copyDirection, statements) {
             for (var _i = 0, outParams_1 = outParams; _i < outParams_1.length; _i++) {
@@ -94227,20 +96271,20 @@
             for (var i = start; i < numProperties; i++) {
                 var property = properties[i];
                 switch (property.kind) {
-                    case 168 /* GetAccessor */:
-                    case 169 /* SetAccessor */:
+                    case 170 /* GetAccessor */:
+                    case 171 /* SetAccessor */:
                         var accessors = ts.getAllAccessorDeclarations(node.properties, property);
                         if (property === accessors.firstAccessor) {
                             expressions.push(transformAccessorsToExpression(receiver, accessors, node, !!node.multiLine));
                         }
                         break;
-                    case 166 /* MethodDeclaration */:
+                    case 167 /* MethodDeclaration */:
                         expressions.push(transformObjectLiteralMethodDeclarationToExpression(property, receiver, node, node.multiLine));
                         break;
-                    case 289 /* PropertyAssignment */:
+                    case 291 /* PropertyAssignment */:
                         expressions.push(transformPropertyAssignmentToExpression(property, receiver, node.multiLine));
                         break;
-                    case 290 /* ShorthandPropertyAssignment */:
+                    case 292 /* ShorthandPropertyAssignment */:
                         expressions.push(transformShorthandPropertyAssignmentToExpression(property, receiver, node.multiLine));
                         break;
                     default:
@@ -94316,7 +96360,7 @@
         }
         function addStatementToStartOfBlock(block, statement) {
             var transformedStatements = ts.visitNodes(block.statements, visitor, ts.isStatement);
-            return factory.updateBlock(block, __spreadArray([statement], transformedStatements));
+            return factory.updateBlock(block, __spreadArray([statement], transformedStatements, true));
         }
         /**
          * Visits a MethodDeclaration of an ObjectLiteralExpression and transforms it into a
@@ -94343,17 +96387,17 @@
             ts.Debug.assert(!ts.isComputedPropertyName(node.name));
             var savedConvertedLoopState = convertedLoopState;
             convertedLoopState = undefined;
-            var ancestorFacts = enterSubtree(16286 /* FunctionExcludes */, 65 /* FunctionIncludes */);
+            var ancestorFacts = enterSubtree(32670 /* FunctionExcludes */, 65 /* FunctionIncludes */);
             var updated;
             var parameters = ts.visitParameterList(node.parameters, visitor, context);
             var body = transformFunctionBody(node);
-            if (node.kind === 168 /* GetAccessor */) {
+            if (node.kind === 170 /* GetAccessor */) {
                 updated = factory.updateGetAccessorDeclaration(node, node.decorators, node.modifiers, node.name, parameters, node.type, body);
             }
             else {
                 updated = factory.updateSetAccessorDeclaration(node, node.decorators, node.modifiers, node.name, parameters, body);
             }
-            exitSubtree(ancestorFacts, 49152 /* FunctionSubtreeExcludes */, 0 /* None */);
+            exitSubtree(ancestorFacts, 98304 /* FunctionSubtreeExcludes */, 0 /* None */);
             convertedLoopState = savedConvertedLoopState;
             return updated;
         }
@@ -94386,7 +96430,7 @@
         function visitArrayLiteralExpression(node) {
             if (ts.some(node.elements, ts.isSpreadElement)) {
                 // We are here because we contain a SpreadElementExpression.
-                return transformAndSpreadElements(node.elements, /*needsUniqueCopy*/ true, !!node.multiLine, /*hasTrailingComma*/ !!node.elements.hasTrailingComma);
+                return transformAndSpreadElements(node.elements, /*isArgumentList*/ false, !!node.multiLine, /*hasTrailingComma*/ !!node.elements.hasTrailingComma);
             }
             return ts.visitEachChild(node, visitor, context);
         }
@@ -94400,7 +96444,7 @@
                 return visitTypeScriptClassWrapper(node);
             }
             var expression = ts.skipOuterExpressions(node.expression);
-            if (expression.kind === 105 /* SuperKeyword */ ||
+            if (expression.kind === 106 /* SuperKeyword */ ||
                 ts.isSuperProperty(expression) ||
                 ts.some(node.arguments, ts.isSpreadElement)) {
                 return visitCallExpressionWithPotentialCapturedThisAssignment(node, /*assignToCapturedThis*/ true);
@@ -94448,7 +96492,7 @@
             // visit the class body statements outside of any converted loop body.
             var savedConvertedLoopState = convertedLoopState;
             convertedLoopState = undefined;
-            var bodyStatements = ts.visitNodes(body.statements, visitor, ts.isStatement);
+            var bodyStatements = ts.visitNodes(body.statements, classWrapperStatementVisitor, ts.isStatement);
             convertedLoopState = savedConvertedLoopState;
             var classStatements = ts.filter(bodyStatements, isVariableStatementWithInitializer);
             var remainingStatements = ts.filter(bodyStatements, function (stmt) { return !isVariableStatementWithInitializer(stmt); });
@@ -94473,6 +96517,9 @@
             //  }())
             //
             var aliasAssignment = ts.tryCast(initializer, ts.isAssignmentExpression);
+            if (!aliasAssignment && ts.isBinaryExpression(initializer) && initializer.operatorToken.kind === 27 /* CommaToken */) {
+                aliasAssignment = ts.tryCast(initializer.left, ts.isAssignmentExpression);
+            }
             // The underlying call (3) is another IIFE that may contain a '_super' argument.
             var call = ts.cast(aliasAssignment ? ts.skipOuterExpressions(aliasAssignment.right) : initializer, ts.isCallExpression);
             var func = ts.cast(ts.skipOuterExpressions(call.expression), ts.isFunctionExpression);
@@ -94528,10 +96575,10 @@
             // We are here either because SuperKeyword was used somewhere in the expression, or
             // because we contain a SpreadElementExpression.
             if (node.transformFlags & 16384 /* ContainsRestOrSpread */ ||
-                node.expression.kind === 105 /* SuperKeyword */ ||
+                node.expression.kind === 106 /* SuperKeyword */ ||
                 ts.isSuperProperty(ts.skipOuterExpressions(node.expression))) {
                 var _a = factory.createCallBinding(node.expression, hoistVariableDeclaration), target = _a.target, thisArg = _a.thisArg;
-                if (node.expression.kind === 105 /* SuperKeyword */) {
+                if (node.expression.kind === 106 /* SuperKeyword */) {
                     ts.setEmitFlags(thisArg, 4 /* NoSubstitution */);
                 }
                 var resultingCall = void 0;
@@ -94549,7 +96596,7 @@
                     //      _super.apply(this, a.concat([b]))
                     //      _super.m.apply(this, a.concat([b]))
                     //      _super.prototype.m.apply(this, a.concat([b]))
-                    resultingCall = factory.createFunctionApplyCall(ts.visitNode(target, callExpressionVisitor, ts.isExpression), node.expression.kind === 105 /* SuperKeyword */ ? thisArg : ts.visitNode(thisArg, visitor, ts.isExpression), transformAndSpreadElements(node.arguments, /*needsUniqueCopy*/ false, /*multiLine*/ false, /*hasTrailingComma*/ false));
+                    resultingCall = factory.createFunctionApplyCall(ts.visitNode(target, callExpressionVisitor, ts.isExpression), node.expression.kind === 106 /* SuperKeyword */ ? thisArg : ts.visitNode(thisArg, visitor, ts.isExpression), transformAndSpreadElements(node.arguments, /*isArgumentList*/ true, /*multiLine*/ false, /*hasTrailingComma*/ false));
                 }
                 else {
                     // [source]
@@ -94561,9 +96608,9 @@
                     //      _super.call(this, a)
                     //      _super.m.call(this, a)
                     //      _super.prototype.m.call(this, a)
-                    resultingCall = ts.setTextRange(factory.createFunctionCallCall(ts.visitNode(target, callExpressionVisitor, ts.isExpression), node.expression.kind === 105 /* SuperKeyword */ ? thisArg : ts.visitNode(thisArg, visitor, ts.isExpression), ts.visitNodes(node.arguments, visitor, ts.isExpression)), node);
+                    resultingCall = ts.setTextRange(factory.createFunctionCallCall(ts.visitNode(target, callExpressionVisitor, ts.isExpression), node.expression.kind === 106 /* SuperKeyword */ ? thisArg : ts.visitNode(thisArg, visitor, ts.isExpression), ts.visitNodes(node.arguments, visitor, ts.isExpression)), node);
                 }
-                if (node.expression.kind === 105 /* SuperKeyword */) {
+                if (node.expression.kind === 106 /* SuperKeyword */) {
                     var initializer = factory.createLogicalOr(resultingCall, createActualThis());
                     resultingCall = assignToCapturedThis
                         ? factory.createAssignment(factory.createUniqueName("_this", 16 /* Optimistic */ | 32 /* FileLevel */), initializer)
@@ -94587,7 +96634,7 @@
                 // [output]
                 //      new ((_a = C).bind.apply(_a, [void 0].concat(a)))()
                 var _a = factory.createCallBinding(factory.createPropertyAccessExpression(node.expression, "bind"), hoistVariableDeclaration), target = _a.target, thisArg = _a.thisArg;
-                return factory.createNewExpression(factory.createFunctionApplyCall(ts.visitNode(target, visitor, ts.isExpression), thisArg, transformAndSpreadElements(factory.createNodeArray(__spreadArray([factory.createVoidZero()], node.arguments)), /*needsUniqueCopy*/ false, /*multiLine*/ false, /*hasTrailingComma*/ false)), 
+                return factory.createNewExpression(factory.createFunctionApplyCall(ts.visitNode(target, visitor, ts.isExpression), thisArg, transformAndSpreadElements(factory.createNodeArray(__spreadArray([factory.createVoidZero()], node.arguments, true)), /*isArgumentList*/ true, /*multiLine*/ false, /*hasTrailingComma*/ false)), 
                 /*typeArguments*/ undefined, []);
             }
             return ts.visitEachChild(node, visitor, context);
@@ -94596,12 +96643,12 @@
          * Transforms an array of Expression nodes that contains a SpreadExpression.
          *
          * @param elements The array of Expression nodes.
-         * @param needsUniqueCopy A value indicating whether to ensure that the result is a fresh array.
-         * This should be `true` when spreading into an `ArrayLiteral`, and `false` when spreading into an
+         * @param isArgumentList A value indicating whether to ensure that the result is a fresh array.
+         * This should be `false` when spreading into an `ArrayLiteral`, and `true` when spreading into an
          * argument list.
          * @param multiLine A value indicating whether the result should be emitted on multiple lines.
          */
-        function transformAndSpreadElements(elements, needsUniqueCopy, multiLine, hasTrailingComma) {
+        function transformAndSpreadElements(elements, isArgumentList, multiLine, hasTrailingComma) {
             // When there is no leading SpreadElement:
             //
             // [source]
@@ -94635,7 +96682,11 @@
             // Map spans of spread expressions into their expressions and spans of other
             // expressions into an array literal.
             var numElements = elements.length;
-            var segments = ts.flatten(ts.spanMap(elements, partitionSpread, function (partition, visitPartition, _start, end) {
+            var segments = ts.flatten(
+            // As we visit each element, we return one of two functions to use as the "key":
+            // - `visitSpanOfSpreads` for one or more contiguous `...` spread expressions, i.e. `...a, ...b` in `[1, 2, ...a, ...b]`
+            // - `visitSpanOfNonSpreads` for one or more contiguous non-spread elements, i.e. `1, 2`, in `[1, 2, ...a, ...b]`
+            ts.spanMap(elements, partitionSpread, function (partition, visitPartition, _start, end) {
                 return visitPartition(partition, multiLine, hasTrailingComma && end === numElements);
             }));
             if (segments.length === 1) {
@@ -94644,20 +96695,20 @@
                 // a CallExpression or NewExpression. When using `--downlevelIteration`, we need
                 // to coerce this into an array for use with `apply`, so we will use the code path
                 // that follows instead.
-                if (!needsUniqueCopy && !compilerOptions.downlevelIteration
-                    || ts.isPackedArrayLiteral(firstSegment) // see NOTE (above)
-                    || ts.isCallToHelper(firstSegment, "___spreadArray")) {
-                    return segments[0];
+                if (isArgumentList && !compilerOptions.downlevelIteration
+                    || ts.isPackedArrayLiteral(firstSegment.expression) // see NOTE (above)
+                    || ts.isCallToHelper(firstSegment.expression, "___spreadArray")) {
+                    return firstSegment.expression;
                 }
             }
             var helpers = emitHelpers();
-            var startsWithSpread = ts.isSpreadElement(elements[0]);
+            var startsWithSpread = segments[0].kind !== 0 /* None */;
             var expression = startsWithSpread ? factory.createArrayLiteralExpression() :
-                segments[0];
+                segments[0].expression;
             for (var i = startsWithSpread ? 0 : 1; i < segments.length; i++) {
-                expression = helpers.createSpreadArrayHelper(expression, compilerOptions.downlevelIteration && !ts.isPackedArrayLiteral(segments[i]) ? // see NOTE (above)
-                    helpers.createReadHelper(segments[i], /*count*/ undefined) :
-                    segments[i]);
+                var segment = segments[i];
+                // If this is for an argument list, it doesn't matter if the array is packed or sparse
+                expression = helpers.createSpreadArrayHelper(expression, segment.expression, segment.kind === 1 /* UnpackedSpread */ && !isArgumentList);
             }
             return expression;
         }
@@ -94669,21 +96720,29 @@
         function visitSpanOfSpreads(chunk) {
             return ts.map(chunk, visitExpressionOfSpread);
         }
+        function visitExpressionOfSpread(node) {
+            var expression = ts.visitNode(node.expression, visitor, ts.isExpression);
+            // We don't need to pack already packed array literals, or existing calls to the `__read` helper.
+            var isCallToReadHelper = ts.isCallToHelper(expression, "___read");
+            var kind = isCallToReadHelper || ts.isPackedArrayLiteral(expression) ? 2 /* PackedSpread */ : 1 /* UnpackedSpread */;
+            // We don't need the `__read` helper for array literals. Array packing will be performed by `__spreadArray`.
+            if (compilerOptions.downlevelIteration && kind === 1 /* UnpackedSpread */ && !ts.isArrayLiteralExpression(expression) && !isCallToReadHelper) {
+                expression = emitHelpers().createReadHelper(expression, /*count*/ undefined);
+                // the `__read` helper returns a packed array, so we don't need to ensure a packed array
+                kind = 2 /* PackedSpread */;
+            }
+            return createSpreadSegment(kind, expression);
+        }
         function visitSpanOfNonSpreads(chunk, multiLine, hasTrailingComma) {
-            return factory.createArrayLiteralExpression(ts.visitNodes(factory.createNodeArray(chunk, hasTrailingComma), visitor, ts.isExpression), multiLine);
+            var expression = factory.createArrayLiteralExpression(ts.visitNodes(factory.createNodeArray(chunk, hasTrailingComma), visitor, ts.isExpression), multiLine);
+            // We do not pack non-spread segments, this is so that `[1, , ...[2, , 3], , 4]` is properly downleveled to
+            // `[1, , 2, undefined, 3, , 4]`. See the NOTE in `transformAndSpreadElements`
+            return createSpreadSegment(0 /* None */, expression);
         }
         function visitSpreadElement(node) {
             return ts.visitNode(node.expression, visitor, ts.isExpression);
         }
         /**
-         * Transforms the expression of a SpreadExpression node.
-         *
-         * @param node A SpreadExpression node.
-         */
-        function visitExpressionOfSpread(node) {
-            return ts.visitNode(node.expression, visitor, ts.isExpression);
-        }
-        /**
          * Visits a template literal.
          *
          * @param node A template literal.
@@ -94810,8 +96869,8 @@
                 : factory.createUniqueName("_super", 16 /* Optimistic */ | 32 /* FileLevel */);
         }
         function visitMetaProperty(node) {
-            if (node.keywordToken === 102 /* NewKeyword */ && node.name.escapedText === "target") {
-                hierarchyFacts |= 16384 /* NewTarget */;
+            if (node.keywordToken === 103 /* NewKeyword */ && node.name.escapedText === "target") {
+                hierarchyFacts |= 32768 /* NewTarget */;
                 return factory.createUniqueName("_newTarget", 16 /* Optimistic */ | 32 /* FileLevel */);
             }
             return node;
@@ -94826,7 +96885,7 @@
         function onEmitNode(hint, node, emitCallback) {
             if (enabledSubstitutions & 1 /* CapturedThis */ && ts.isFunctionLike(node)) {
                 // If we are tracking a captured `this`, keep track of the enclosing function.
-                var ancestorFacts = enterSubtree(16286 /* FunctionExcludes */, ts.getEmitFlags(node) & 8 /* CapturesThis */
+                var ancestorFacts = enterSubtree(32670 /* FunctionExcludes */, ts.getEmitFlags(node) & 8 /* CapturesThis */
                     ? 65 /* FunctionIncludes */ | 16 /* CapturesThis */
                     : 65 /* FunctionIncludes */);
                 previousOnEmitNode(hint, node, emitCallback);
@@ -94842,7 +96901,7 @@
         function enableSubstitutionsForBlockScopedBindings() {
             if ((enabledSubstitutions & 2 /* BlockScopedBindings */) === 0) {
                 enabledSubstitutions |= 2 /* BlockScopedBindings */;
-                context.enableSubstitution(78 /* Identifier */);
+                context.enableSubstitution(79 /* Identifier */);
             }
         }
         /**
@@ -94852,14 +96911,14 @@
         function enableSubstitutionsForCapturedThis() {
             if ((enabledSubstitutions & 1 /* CapturedThis */) === 0) {
                 enabledSubstitutions |= 1 /* CapturedThis */;
-                context.enableSubstitution(107 /* ThisKeyword */);
-                context.enableEmitNotification(167 /* Constructor */);
-                context.enableEmitNotification(166 /* MethodDeclaration */);
-                context.enableEmitNotification(168 /* GetAccessor */);
-                context.enableEmitNotification(169 /* SetAccessor */);
-                context.enableEmitNotification(210 /* ArrowFunction */);
-                context.enableEmitNotification(209 /* FunctionExpression */);
-                context.enableEmitNotification(252 /* FunctionDeclaration */);
+                context.enableSubstitution(108 /* ThisKeyword */);
+                context.enableEmitNotification(169 /* Constructor */);
+                context.enableEmitNotification(167 /* MethodDeclaration */);
+                context.enableEmitNotification(170 /* GetAccessor */);
+                context.enableEmitNotification(171 /* SetAccessor */);
+                context.enableEmitNotification(212 /* ArrowFunction */);
+                context.enableEmitNotification(211 /* FunctionExpression */);
+                context.enableEmitNotification(254 /* FunctionDeclaration */);
             }
         }
         /**
@@ -94900,10 +96959,10 @@
          */
         function isNameOfDeclarationWithCollidingName(node) {
             switch (node.parent.kind) {
-                case 199 /* BindingElement */:
-                case 253 /* ClassDeclaration */:
-                case 256 /* EnumDeclaration */:
-                case 250 /* VariableDeclaration */:
+                case 201 /* BindingElement */:
+                case 255 /* ClassDeclaration */:
+                case 258 /* EnumDeclaration */:
+                case 252 /* VariableDeclaration */:
                     return node.parent.name === node
                         && resolver.isDeclarationWithCollidingName(node.parent);
             }
@@ -94916,9 +96975,9 @@
          */
         function substituteExpression(node) {
             switch (node.kind) {
-                case 78 /* Identifier */:
+                case 79 /* Identifier */:
                     return substituteExpressionIdentifier(node);
-                case 107 /* ThisKeyword */:
+                case 108 /* ThisKeyword */:
                     return substituteThisKeyword(node);
             }
             return node;
@@ -94973,7 +97032,7 @@
             return node;
         }
         function getClassMemberPrefix(node, member) {
-            return ts.hasSyntacticModifier(member, 32 /* Static */)
+            return ts.isStatic(member)
                 ? factory.getInternalName(node)
                 : factory.createPropertyAccessExpression(factory.getInternalName(node), "prototype");
         }
@@ -94985,19 +97044,19 @@
                 return false;
             }
             var statement = ts.firstOrUndefined(constructor.body.statements);
-            if (!statement || !ts.nodeIsSynthesized(statement) || statement.kind !== 234 /* ExpressionStatement */) {
+            if (!statement || !ts.nodeIsSynthesized(statement) || statement.kind !== 236 /* ExpressionStatement */) {
                 return false;
             }
             var statementExpression = statement.expression;
-            if (!ts.nodeIsSynthesized(statementExpression) || statementExpression.kind !== 204 /* CallExpression */) {
+            if (!ts.nodeIsSynthesized(statementExpression) || statementExpression.kind !== 206 /* CallExpression */) {
                 return false;
             }
             var callTarget = statementExpression.expression;
-            if (!ts.nodeIsSynthesized(callTarget) || callTarget.kind !== 105 /* SuperKeyword */) {
+            if (!ts.nodeIsSynthesized(callTarget) || callTarget.kind !== 106 /* SuperKeyword */) {
                 return false;
             }
             var callArgument = ts.singleOrUndefined(statementExpression.arguments);
-            if (!callArgument || !ts.nodeIsSynthesized(callArgument) || callArgument.kind !== 221 /* SpreadElement */) {
+            if (!callArgument || !ts.nodeIsSynthesized(callArgument) || callArgument.kind !== 223 /* SpreadElement */) {
                 return false;
             }
             var expression = callArgument.expression;
@@ -95023,15 +97082,15 @@
         if (compilerOptions.jsx === 1 /* Preserve */ || compilerOptions.jsx === 3 /* ReactNative */) {
             previousOnEmitNode = context.onEmitNode;
             context.onEmitNode = onEmitNode;
-            context.enableEmitNotification(276 /* JsxOpeningElement */);
-            context.enableEmitNotification(277 /* JsxClosingElement */);
-            context.enableEmitNotification(275 /* JsxSelfClosingElement */);
+            context.enableEmitNotification(278 /* JsxOpeningElement */);
+            context.enableEmitNotification(279 /* JsxClosingElement */);
+            context.enableEmitNotification(277 /* JsxSelfClosingElement */);
             noSubstitution = [];
         }
         var previousOnSubstituteNode = context.onSubstituteNode;
         context.onSubstituteNode = onSubstituteNode;
-        context.enableSubstitution(202 /* PropertyAccessExpression */);
-        context.enableSubstitution(289 /* PropertyAssignment */);
+        context.enableSubstitution(204 /* PropertyAccessExpression */);
+        context.enableSubstitution(291 /* PropertyAssignment */);
         return ts.chainBundle(context, transformSourceFile);
         /**
          * Transforms an ES5 source file to ES3.
@@ -95050,9 +97109,9 @@
          */
         function onEmitNode(hint, node, emitCallback) {
             switch (node.kind) {
-                case 276 /* JsxOpeningElement */:
-                case 277 /* JsxClosingElement */:
-                case 275 /* JsxSelfClosingElement */:
+                case 278 /* JsxOpeningElement */:
+                case 279 /* JsxClosingElement */:
+                case 277 /* JsxSelfClosingElement */:
                     var tagName = node.tagName;
                     noSubstitution[ts.getOriginalNodeId(tagName)] = true;
                     break;
@@ -95112,7 +97171,7 @@
          */
         function trySubstituteReservedName(name) {
             var token = name.originalKeywordKind || (ts.nodeIsSynthesized(name) ? ts.stringToToken(ts.idText(name)) : undefined);
-            if (token !== undefined && token >= 80 /* FirstReservedWord */ && token <= 115 /* LastReservedWord */) {
+            if (token !== undefined && token >= 81 /* FirstReservedWord */ && token <= 116 /* LastReservedWord */) {
                 return ts.setTextRange(factory.createStringLiteralFromNode(name), name);
             }
             return undefined;
@@ -95387,13 +97446,13 @@
          */
         function visitJavaScriptInStatementContainingYield(node) {
             switch (node.kind) {
-                case 236 /* DoStatement */:
+                case 238 /* DoStatement */:
                     return visitDoStatement(node);
-                case 237 /* WhileStatement */:
+                case 239 /* WhileStatement */:
                     return visitWhileStatement(node);
-                case 245 /* SwitchStatement */:
+                case 247 /* SwitchStatement */:
                     return visitSwitchStatement(node);
-                case 246 /* LabeledStatement */:
+                case 248 /* LabeledStatement */:
                     return visitLabeledStatement(node);
                 default:
                     return visitJavaScriptInGeneratorFunctionBody(node);
@@ -95406,24 +97465,24 @@
          */
         function visitJavaScriptInGeneratorFunctionBody(node) {
             switch (node.kind) {
-                case 252 /* FunctionDeclaration */:
+                case 254 /* FunctionDeclaration */:
                     return visitFunctionDeclaration(node);
-                case 209 /* FunctionExpression */:
+                case 211 /* FunctionExpression */:
                     return visitFunctionExpression(node);
-                case 168 /* GetAccessor */:
-                case 169 /* SetAccessor */:
+                case 170 /* GetAccessor */:
+                case 171 /* SetAccessor */:
                     return visitAccessorDeclaration(node);
-                case 233 /* VariableStatement */:
+                case 235 /* VariableStatement */:
                     return visitVariableStatement(node);
-                case 238 /* ForStatement */:
+                case 240 /* ForStatement */:
                     return visitForStatement(node);
-                case 239 /* ForInStatement */:
+                case 241 /* ForInStatement */:
                     return visitForInStatement(node);
-                case 242 /* BreakStatement */:
+                case 244 /* BreakStatement */:
                     return visitBreakStatement(node);
-                case 241 /* ContinueStatement */:
+                case 243 /* ContinueStatement */:
                     return visitContinueStatement(node);
-                case 243 /* ReturnStatement */:
+                case 245 /* ReturnStatement */:
                     return visitReturnStatement(node);
                 default:
                     if (node.transformFlags & 524288 /* ContainsYield */) {
@@ -95444,23 +97503,23 @@
          */
         function visitJavaScriptContainingYield(node) {
             switch (node.kind) {
-                case 217 /* BinaryExpression */:
+                case 219 /* BinaryExpression */:
                     return visitBinaryExpression(node);
-                case 341 /* CommaListExpression */:
+                case 346 /* CommaListExpression */:
                     return visitCommaListExpression(node);
-                case 218 /* ConditionalExpression */:
+                case 220 /* ConditionalExpression */:
                     return visitConditionalExpression(node);
-                case 220 /* YieldExpression */:
+                case 222 /* YieldExpression */:
                     return visitYieldExpression(node);
-                case 200 /* ArrayLiteralExpression */:
+                case 202 /* ArrayLiteralExpression */:
                     return visitArrayLiteralExpression(node);
-                case 201 /* ObjectLiteralExpression */:
+                case 203 /* ObjectLiteralExpression */:
                     return visitObjectLiteralExpression(node);
-                case 203 /* ElementAccessExpression */:
+                case 205 /* ElementAccessExpression */:
                     return visitElementAccessExpression(node);
-                case 204 /* CallExpression */:
+                case 206 /* CallExpression */:
                     return visitCallExpression(node);
-                case 205 /* NewExpression */:
+                case 207 /* NewExpression */:
                     return visitNewExpression(node);
                 default:
                     return ts.visitEachChild(node, visitor, context);
@@ -95473,9 +97532,9 @@
          */
         function visitGenerator(node) {
             switch (node.kind) {
-                case 252 /* FunctionDeclaration */:
+                case 254 /* FunctionDeclaration */:
                     return visitFunctionDeclaration(node);
-                case 209 /* FunctionExpression */:
+                case 211 /* FunctionExpression */:
                     return visitFunctionExpression(node);
                 default:
                     return ts.Debug.failBadSyntaxKind(node);
@@ -95683,7 +97742,7 @@
             if (containsYield(right)) {
                 var target = void 0;
                 switch (left.kind) {
-                    case 202 /* PropertyAccessExpression */:
+                    case 204 /* PropertyAccessExpression */:
                         // [source]
                         //      a.b = yield;
                         //
@@ -95695,7 +97754,7 @@
                         //      _a.b = %sent%;
                         target = factory.updatePropertyAccessExpression(left, cacheExpression(ts.visitNode(left.expression, visitor, ts.isLeftHandSideExpression)), left.name);
                         break;
-                    case 203 /* ElementAccessExpression */:
+                    case 205 /* ElementAccessExpression */:
                         // [source]
                         //      a[b] = yield;
                         //
@@ -95942,13 +98001,13 @@
                 temp = declareLocal();
                 var initialElements = ts.visitNodes(elements, visitor, ts.isExpression, 0, numInitialElements);
                 emitAssignment(temp, factory.createArrayLiteralExpression(leadingElement
-                    ? __spreadArray([leadingElement], initialElements) : initialElements));
+                    ? __spreadArray([leadingElement], initialElements, true) : initialElements));
                 leadingElement = undefined;
             }
             var expressions = ts.reduceLeft(elements, reduceElement, [], numInitialElements);
             return temp
                 ? factory.createArrayConcatCall(temp, [factory.createArrayLiteralExpression(expressions, multiLine)])
-                : ts.setTextRange(factory.createArrayLiteralExpression(leadingElement ? __spreadArray([leadingElement], expressions) : expressions, multiLine), location);
+                : ts.setTextRange(factory.createArrayLiteralExpression(leadingElement ? __spreadArray([leadingElement], expressions, true) : expressions, multiLine), location);
             function reduceElement(expressions, element) {
                 if (containsYield(element) && expressions.length > 0) {
                     var hasAssignedTemp = temp !== undefined;
@@ -95957,7 +98016,7 @@
                     }
                     emitAssignment(temp, hasAssignedTemp
                         ? factory.createArrayConcatCall(temp, [factory.createArrayLiteralExpression(expressions, multiLine)])
-                        : factory.createArrayLiteralExpression(leadingElement ? __spreadArray([leadingElement], expressions) : expressions, multiLine));
+                        : factory.createArrayLiteralExpression(leadingElement ? __spreadArray([leadingElement], expressions, true) : expressions, multiLine));
                     leadingElement = undefined;
                     expressions = [];
                 }
@@ -96089,35 +98148,35 @@
         }
         function transformAndEmitStatementWorker(node) {
             switch (node.kind) {
-                case 231 /* Block */:
+                case 233 /* Block */:
                     return transformAndEmitBlock(node);
-                case 234 /* ExpressionStatement */:
+                case 236 /* ExpressionStatement */:
                     return transformAndEmitExpressionStatement(node);
-                case 235 /* IfStatement */:
+                case 237 /* IfStatement */:
                     return transformAndEmitIfStatement(node);
-                case 236 /* DoStatement */:
+                case 238 /* DoStatement */:
                     return transformAndEmitDoStatement(node);
-                case 237 /* WhileStatement */:
+                case 239 /* WhileStatement */:
                     return transformAndEmitWhileStatement(node);
-                case 238 /* ForStatement */:
+                case 240 /* ForStatement */:
                     return transformAndEmitForStatement(node);
-                case 239 /* ForInStatement */:
+                case 241 /* ForInStatement */:
                     return transformAndEmitForInStatement(node);
-                case 241 /* ContinueStatement */:
+                case 243 /* ContinueStatement */:
                     return transformAndEmitContinueStatement(node);
-                case 242 /* BreakStatement */:
+                case 244 /* BreakStatement */:
                     return transformAndEmitBreakStatement(node);
-                case 243 /* ReturnStatement */:
+                case 245 /* ReturnStatement */:
                     return transformAndEmitReturnStatement(node);
-                case 244 /* WithStatement */:
+                case 246 /* WithStatement */:
                     return transformAndEmitWithStatement(node);
-                case 245 /* SwitchStatement */:
+                case 247 /* SwitchStatement */:
                     return transformAndEmitSwitchStatement(node);
-                case 246 /* LabeledStatement */:
+                case 248 /* LabeledStatement */:
                     return transformAndEmitLabeledStatement(node);
-                case 247 /* ThrowStatement */:
+                case 249 /* ThrowStatement */:
                     return transformAndEmitThrowStatement(node);
-                case 248 /* TryStatement */:
+                case 250 /* TryStatement */:
                     return transformAndEmitTryStatement(node);
                 default:
                     return emitStatement(ts.visitNode(node, visitor, ts.isStatement));
@@ -96547,7 +98606,7 @@
                 for (var i = 0; i < numClauses; i++) {
                     var clause = caseBlock.clauses[i];
                     clauseLabels.push(defineLabel());
-                    if (clause.kind === 286 /* DefaultClause */ && defaultClauseIndex === -1) {
+                    if (clause.kind === 288 /* DefaultClause */ && defaultClauseIndex === -1) {
                         defaultClauseIndex = i;
                     }
                 }
@@ -96560,7 +98619,7 @@
                     var defaultClausesSkipped = 0;
                     for (var i = clausesWritten; i < numClauses; i++) {
                         var clause = caseBlock.clauses[i];
-                        if (clause.kind === 285 /* CaseClause */) {
+                        if (clause.kind === 287 /* CaseClause */) {
                             if (containsYield(clause.expression) && pendingClauses.length > 0) {
                                 break;
                             }
@@ -96874,7 +98933,7 @@
                 if (!renamedCatchVariables) {
                     renamedCatchVariables = new ts.Map();
                     renamedCatchVariableDeclarations = [];
-                    context.enableSubstitution(78 /* Identifier */);
+                    context.enableSubstitution(79 /* Identifier */);
                 }
                 renamedCatchVariables.set(text, true);
                 renamedCatchVariableDeclarations[ts.getOriginalNodeId(variable)] = name;
@@ -97720,17 +99779,17 @@
         var previousOnEmitNode = context.onEmitNode;
         context.onSubstituteNode = onSubstituteNode;
         context.onEmitNode = onEmitNode;
-        context.enableSubstitution(78 /* Identifier */); // Substitutes expression identifiers with imported/exported symbols.
-        context.enableSubstitution(217 /* BinaryExpression */); // Substitutes assignments to exported symbols.
-        context.enableSubstitution(215 /* PrefixUnaryExpression */); // Substitutes updates to exported symbols.
-        context.enableSubstitution(216 /* PostfixUnaryExpression */); // Substitutes updates to exported symbols.
-        context.enableSubstitution(290 /* ShorthandPropertyAssignment */); // Substitutes shorthand property assignments for imported/exported symbols.
-        context.enableEmitNotification(298 /* SourceFile */); // Restore state when substituting nodes in a file.
+        context.enableSubstitution(206 /* CallExpression */); // Substitute calls to imported/exported symbols to avoid incorrect `this`.
+        context.enableSubstitution(208 /* TaggedTemplateExpression */); // Substitute calls to imported/exported symbols to avoid incorrect `this`.
+        context.enableSubstitution(79 /* Identifier */); // Substitutes expression identifiers with imported/exported symbols.
+        context.enableSubstitution(219 /* BinaryExpression */); // Substitutes assignments to exported symbols.
+        context.enableSubstitution(292 /* ShorthandPropertyAssignment */); // Substitutes shorthand property assignments for imported/exported symbols.
+        context.enableEmitNotification(300 /* SourceFile */); // Restore state when substituting nodes in a file.
         var moduleInfoMap = []; // The ExternalModuleInfo for each file.
         var deferredExports = []; // Exports to defer until an EndOfDeclarationMarker is found.
         var currentSourceFile; // The current file.
         var currentModuleInfo; // The ExternalModuleInfo for the current file.
-        var noSubstitution; // Set of nodes for which substitution rules should be ignored.
+        var noSubstitution = []; // Set of nodes for which substitution rules should be ignored.
         var needUMDDynamicImportHelper;
         return ts.chainBundle(context, transformSourceFile);
         /**
@@ -97771,7 +99830,7 @@
             startLexicalEnvironment();
             var statements = [];
             var ensureUseStrict = ts.getStrictOptionValue(compilerOptions, "alwaysStrict") || (!compilerOptions.noImplicitUseStrict && ts.isExternalModule(currentSourceFile));
-            var statementOffset = factory.copyPrologue(node.statements, statements, ensureUseStrict && !ts.isJsonSourceFile(node), sourceElementVisitor);
+            var statementOffset = factory.copyPrologue(node.statements, statements, ensureUseStrict && !ts.isJsonSourceFile(node), topLevelVisitor);
             if (shouldEmitUnderscoreUnderscoreESModule()) {
                 ts.append(statements, createUnderscoreUnderscoreESModule());
             }
@@ -97781,8 +99840,8 @@
                     ts.append(statements, factory.createExpressionStatement(ts.reduceLeft(currentModuleInfo.exportedNames.slice(i, i + chunkSize), function (prev, nextId) { return factory.createAssignment(factory.createPropertyAccessExpression(factory.createIdentifier("exports"), factory.createIdentifier(ts.idText(nextId))), prev); }, factory.createVoidZero())));
                 }
             }
-            ts.append(statements, ts.visitNode(currentModuleInfo.externalHelpersImportDeclaration, sourceElementVisitor, ts.isStatement));
-            ts.addRange(statements, ts.visitNodes(node.statements, sourceElementVisitor, ts.isStatement, statementOffset));
+            ts.append(statements, ts.visitNode(currentModuleInfo.externalHelpersImportDeclaration, topLevelVisitor, ts.isStatement));
+            ts.addRange(statements, ts.visitNodes(node.statements, topLevelVisitor, ts.isStatement, statementOffset));
             addExportEqualsIfNeeded(statements, /*emitAsReturn*/ false);
             ts.insertStatementsAfterStandardPrologue(statements, endLexicalEnvironment());
             var updated = factory.updateSourceFile(node, ts.setTextRange(factory.createNodeArray(statements), node.statements));
@@ -97824,14 +99883,14 @@
             //     define(mofactory.updateSourceFile", "module2"], function ...
             var updated = factory.updateSourceFile(node, ts.setTextRange(factory.createNodeArray([
                 factory.createExpressionStatement(factory.createCallExpression(define, 
-                /*typeArguments*/ undefined, __spreadArray(__spreadArray([], (moduleName ? [moduleName] : [])), [
+                /*typeArguments*/ undefined, __spreadArray(__spreadArray([], (moduleName ? [moduleName] : []), true), [
                     // Add the dependency array argument:
                     //
                     //     ["require", "exports", module1", "module2", ...]
                     factory.createArrayLiteralExpression(jsonSourceFile ? ts.emptyArray : __spreadArray(__spreadArray([
                         factory.createStringLiteral("require"),
                         factory.createStringLiteral("exports")
-                    ], aliasedModuleNames), unaliasedModuleNames)),
+                    ], aliasedModuleNames, true), unaliasedModuleNames, true)),
                     // Add the module body function argument:
                     //
                     //     function (require, exports, module1, module2) ...
@@ -97844,9 +99903,9 @@
                         /*typeParameters*/ undefined, __spreadArray([
                             factory.createParameterDeclaration(/*decorators*/ undefined, /*modifiers*/ undefined, /*dotDotDotToken*/ undefined, "require"),
                             factory.createParameterDeclaration(/*decorators*/ undefined, /*modifiers*/ undefined, /*dotDotDotToken*/ undefined, "exports")
-                        ], importAliasNames), 
+                        ], importAliasNames, true), 
                         /*type*/ undefined, transformAsynchronousModuleBody(node))
-                ])))
+                ], false)))
             ]), 
             /*location*/ node.statements));
             ts.addEmitHelpers(updated, context.readEmitHelpers());
@@ -97880,13 +99939,13 @@
                     ts.setEmitFlags(factory.createIfStatement(factory.createStrictInequality(factory.createIdentifier("v"), factory.createIdentifier("undefined")), factory.createExpressionStatement(factory.createAssignment(factory.createPropertyAccessExpression(factory.createIdentifier("module"), "exports"), factory.createIdentifier("v")))), 1 /* SingleLine */)
                 ]), factory.createIfStatement(factory.createLogicalAnd(factory.createTypeCheck(factory.createIdentifier("define"), "function"), factory.createPropertyAccessExpression(factory.createIdentifier("define"), "amd")), factory.createBlock([
                     factory.createExpressionStatement(factory.createCallExpression(factory.createIdentifier("define"), 
-                    /*typeArguments*/ undefined, __spreadArray(__spreadArray([], (moduleName ? [moduleName] : [])), [
+                    /*typeArguments*/ undefined, __spreadArray(__spreadArray([], (moduleName ? [moduleName] : []), true), [
                         factory.createArrayLiteralExpression(__spreadArray(__spreadArray([
                             factory.createStringLiteral("require"),
                             factory.createStringLiteral("exports")
-                        ], aliasedModuleNames), unaliasedModuleNames)),
+                        ], aliasedModuleNames, true), unaliasedModuleNames, true)),
                         factory.createIdentifier("factory")
-                    ])))
+                    ], false)))
                 ])))
             ], 
             /*multiLine*/ true), 
@@ -97915,7 +99974,7 @@
                     /*typeParameters*/ undefined, __spreadArray([
                         factory.createParameterDeclaration(/*decorators*/ undefined, /*modifiers*/ undefined, /*dotDotDotToken*/ undefined, "require"),
                         factory.createParameterDeclaration(/*decorators*/ undefined, /*modifiers*/ undefined, /*dotDotDotToken*/ undefined, "exports")
-                    ], importAliasNames), 
+                    ], importAliasNames, true), 
                     /*type*/ undefined, transformAsynchronousModuleBody(node))
                 ]))
             ]), 
@@ -97992,7 +100051,7 @@
         function transformAsynchronousModuleBody(node) {
             startLexicalEnvironment();
             var statements = [];
-            var statementOffset = factory.copyPrologue(node.statements, statements, /*ensureUseStrict*/ !compilerOptions.noImplicitUseStrict, sourceElementVisitor);
+            var statementOffset = factory.copyPrologue(node.statements, statements, /*ensureUseStrict*/ !compilerOptions.noImplicitUseStrict, topLevelVisitor);
             if (shouldEmitUnderscoreUnderscoreESModule()) {
                 ts.append(statements, createUnderscoreUnderscoreESModule());
             }
@@ -98000,11 +100059,11 @@
                 ts.append(statements, factory.createExpressionStatement(ts.reduceLeft(currentModuleInfo.exportedNames, function (prev, nextId) { return factory.createAssignment(factory.createPropertyAccessExpression(factory.createIdentifier("exports"), factory.createIdentifier(ts.idText(nextId))), prev); }, factory.createVoidZero())));
             }
             // Visit each statement of the module body.
-            ts.append(statements, ts.visitNode(currentModuleInfo.externalHelpersImportDeclaration, sourceElementVisitor, ts.isStatement));
+            ts.append(statements, ts.visitNode(currentModuleInfo.externalHelpersImportDeclaration, topLevelVisitor, ts.isStatement));
             if (moduleKind === ts.ModuleKind.AMD) {
                 ts.addRange(statements, ts.mapDefined(currentModuleInfo.externalImports, getAMDImportExpressionForImport));
             }
-            ts.addRange(statements, ts.visitNodes(node.statements, sourceElementVisitor, ts.isStatement, statementOffset));
+            ts.addRange(statements, ts.visitNodes(node.statements, topLevelVisitor, ts.isStatement, statementOffset));
             // Append the 'export =' statement if provided.
             addExportEqualsIfNeeded(statements, /*emitAsReturn*/ true);
             // End the lexical environment for the module body
@@ -98026,7 +100085,7 @@
          */
         function addExportEqualsIfNeeded(statements, emitAsReturn) {
             if (currentModuleInfo.exportEquals) {
-                var expressionResult = ts.visitNode(currentModuleInfo.exportEquals.expression, moduleExpressionElementVisitor);
+                var expressionResult = ts.visitNode(currentModuleInfo.exportEquals.expression, visitor);
                 if (expressionResult) {
                     if (emitAsReturn) {
                         var statement = factory.createReturnStatement(expressionResult);
@@ -98051,69 +100110,90 @@
          *
          * @param node The node to visit.
          */
-        function sourceElementVisitor(node) {
+        function topLevelVisitor(node) {
             switch (node.kind) {
-                case 262 /* ImportDeclaration */:
+                case 264 /* ImportDeclaration */:
                     return visitImportDeclaration(node);
-                case 261 /* ImportEqualsDeclaration */:
+                case 263 /* ImportEqualsDeclaration */:
                     return visitImportEqualsDeclaration(node);
-                case 268 /* ExportDeclaration */:
+                case 270 /* ExportDeclaration */:
                     return visitExportDeclaration(node);
-                case 267 /* ExportAssignment */:
+                case 269 /* ExportAssignment */:
                     return visitExportAssignment(node);
-                case 233 /* VariableStatement */:
+                case 235 /* VariableStatement */:
                     return visitVariableStatement(node);
-                case 252 /* FunctionDeclaration */:
+                case 254 /* FunctionDeclaration */:
                     return visitFunctionDeclaration(node);
-                case 253 /* ClassDeclaration */:
+                case 255 /* ClassDeclaration */:
                     return visitClassDeclaration(node);
-                case 342 /* MergeDeclarationMarker */:
+                case 347 /* MergeDeclarationMarker */:
                     return visitMergeDeclarationMarker(node);
-                case 343 /* EndOfDeclarationMarker */:
+                case 348 /* EndOfDeclarationMarker */:
                     return visitEndOfDeclarationMarker(node);
                 default:
-                    return ts.visitEachChild(node, moduleExpressionElementVisitor, context);
+                    return visitor(node);
             }
         }
-        function moduleExpressionElementVisitor(node) {
-            // This visitor does not need to descend into the tree if there is no dynamic import or destructuring assignment,
+        function visitorWorker(node, valueIsDiscarded) {
+            // This visitor does not need to descend into the tree if there is no dynamic import, destructuring assignment, or update expression
             // as export/import statements are only transformed at the top level of a file.
-            if (!(node.transformFlags & 4194304 /* ContainsDynamicImport */) && !(node.transformFlags & 2048 /* ContainsDestructuringAssignment */)) {
+            if (!(node.transformFlags & (4194304 /* ContainsDynamicImport */ | 2048 /* ContainsDestructuringAssignment */ | 67108864 /* ContainsUpdateExpressionForIdentifier */))) {
                 return node;
             }
-            if (ts.isImportCall(node)) {
-                return visitImportCallExpression(node);
+            switch (node.kind) {
+                case 240 /* ForStatement */:
+                    return visitForStatement(node);
+                case 236 /* ExpressionStatement */:
+                    return visitExpressionStatement(node);
+                case 210 /* ParenthesizedExpression */:
+                    return visitParenthesizedExpression(node, valueIsDiscarded);
+                case 345 /* PartiallyEmittedExpression */:
+                    return visitPartiallyEmittedExpression(node, valueIsDiscarded);
+                case 206 /* CallExpression */:
+                    if (ts.isImportCall(node)) {
+                        return visitImportCallExpression(node);
+                    }
+                    break;
+                case 219 /* BinaryExpression */:
+                    if (ts.isDestructuringAssignment(node)) {
+                        return visitDestructuringAssignment(node, valueIsDiscarded);
+                    }
+                    break;
+                case 217 /* PrefixUnaryExpression */:
+                case 218 /* PostfixUnaryExpression */:
+                    return visitPreOrPostfixUnaryExpression(node, valueIsDiscarded);
             }
-            else if (ts.isDestructuringAssignment(node)) {
-                return visitDestructuringAssignment(node);
-            }
-            else {
-                return ts.visitEachChild(node, moduleExpressionElementVisitor, context);
-            }
+            return ts.visitEachChild(node, visitor, context);
+        }
+        function visitor(node) {
+            return visitorWorker(node, /*valueIsDiscarded*/ false);
+        }
+        function discardedValueVisitor(node) {
+            return visitorWorker(node, /*valueIsDiscarded*/ true);
         }
         function destructuringNeedsFlattening(node) {
             if (ts.isObjectLiteralExpression(node)) {
                 for (var _i = 0, _a = node.properties; _i < _a.length; _i++) {
                     var elem = _a[_i];
                     switch (elem.kind) {
-                        case 289 /* PropertyAssignment */:
+                        case 291 /* PropertyAssignment */:
                             if (destructuringNeedsFlattening(elem.initializer)) {
                                 return true;
                             }
                             break;
-                        case 290 /* ShorthandPropertyAssignment */:
+                        case 292 /* ShorthandPropertyAssignment */:
                             if (destructuringNeedsFlattening(elem.name)) {
                                 return true;
                             }
                             break;
-                        case 291 /* SpreadAssignment */:
+                        case 293 /* SpreadAssignment */:
                             if (destructuringNeedsFlattening(elem.expression)) {
                                 return true;
                             }
                             break;
-                        case 166 /* MethodDeclaration */:
-                        case 168 /* GetAccessor */:
-                        case 169 /* SetAccessor */:
+                        case 167 /* MethodDeclaration */:
+                        case 170 /* GetAccessor */:
+                        case 171 /* SetAccessor */:
                             return false;
                         default: ts.Debug.assertNever(elem, "Unhandled object member kind");
                     }
@@ -98137,15 +100217,75 @@
             }
             return false;
         }
-        function visitDestructuringAssignment(node) {
+        function visitDestructuringAssignment(node, valueIsDiscarded) {
             if (destructuringNeedsFlattening(node.left)) {
-                return ts.flattenDestructuringAssignment(node, moduleExpressionElementVisitor, context, 0 /* All */, /*needsValue*/ false, createAllExportExpressions);
+                return ts.flattenDestructuringAssignment(node, visitor, context, 0 /* All */, !valueIsDiscarded, createAllExportExpressions);
             }
-            return ts.visitEachChild(node, moduleExpressionElementVisitor, context);
+            return ts.visitEachChild(node, visitor, context);
+        }
+        function visitForStatement(node) {
+            return factory.updateForStatement(node, ts.visitNode(node.initializer, discardedValueVisitor, ts.isForInitializer), ts.visitNode(node.condition, visitor, ts.isExpression), ts.visitNode(node.incrementor, discardedValueVisitor, ts.isExpression), ts.visitIterationBody(node.statement, visitor, context));
+        }
+        function visitExpressionStatement(node) {
+            return factory.updateExpressionStatement(node, ts.visitNode(node.expression, discardedValueVisitor, ts.isExpression));
+        }
+        function visitParenthesizedExpression(node, valueIsDiscarded) {
+            return factory.updateParenthesizedExpression(node, ts.visitNode(node.expression, valueIsDiscarded ? discardedValueVisitor : visitor, ts.isExpression));
+        }
+        function visitPartiallyEmittedExpression(node, valueIsDiscarded) {
+            return factory.updatePartiallyEmittedExpression(node, ts.visitNode(node.expression, valueIsDiscarded ? discardedValueVisitor : visitor, ts.isExpression));
+        }
+        function visitPreOrPostfixUnaryExpression(node, valueIsDiscarded) {
+            // When we see a prefix or postfix increment expression whose operand is an exported
+            // symbol, we should ensure all exports of that symbol are updated with the correct
+            // value.
+            //
+            // - We do not transform generated identifiers for any reason.
+            // - We do not transform identifiers tagged with the LocalName flag.
+            // - We do not transform identifiers that were originally the name of an enum or
+            //   namespace due to how they are transformed in TypeScript.
+            // - We only transform identifiers that are exported at the top level.
+            if ((node.operator === 45 /* PlusPlusToken */ || node.operator === 46 /* MinusMinusToken */)
+                && ts.isIdentifier(node.operand)
+                && !ts.isGeneratedIdentifier(node.operand)
+                && !ts.isLocalName(node.operand)
+                && !ts.isDeclarationNameOfEnumOrNamespace(node.operand)) {
+                var exportedNames = getExports(node.operand);
+                if (exportedNames) {
+                    var temp = void 0;
+                    var expression = ts.visitNode(node.operand, visitor, ts.isExpression);
+                    if (ts.isPrefixUnaryExpression(node)) {
+                        expression = factory.updatePrefixUnaryExpression(node, expression);
+                    }
+                    else {
+                        expression = factory.updatePostfixUnaryExpression(node, expression);
+                        if (!valueIsDiscarded) {
+                            temp = factory.createTempVariable(hoistVariableDeclaration);
+                            expression = factory.createAssignment(temp, expression);
+                            ts.setTextRange(expression, node);
+                        }
+                        expression = factory.createComma(expression, factory.cloneNode(node.operand));
+                        ts.setTextRange(expression, node);
+                    }
+                    for (var _i = 0, exportedNames_1 = exportedNames; _i < exportedNames_1.length; _i++) {
+                        var exportName = exportedNames_1[_i];
+                        noSubstitution[ts.getNodeId(expression)] = true;
+                        expression = createExportExpression(exportName, expression);
+                        ts.setTextRange(expression, node);
+                    }
+                    if (temp) {
+                        noSubstitution[ts.getNodeId(expression)] = true;
+                        expression = factory.createComma(expression, temp);
+                        ts.setTextRange(expression, node);
+                    }
+                    return expression;
+                }
+            }
+            return ts.visitEachChild(node, visitor, context);
         }
         function visitImportCallExpression(node) {
             var externalModuleName = ts.getExternalModuleNameLiteral(factory, node, currentSourceFile, host, resolver, compilerOptions);
-            var firstArgument = ts.visitNode(ts.firstOrUndefined(node.arguments), moduleExpressionElementVisitor);
+            var firstArgument = ts.visitNode(ts.firstOrUndefined(node.arguments), visitor);
             // Only use the external module name if it differs from the first argument. This allows us to preserve the quote style of the argument on output.
             var argument = externalModuleName && (!firstArgument || !ts.isStringLiteral(firstArgument) || firstArgument.text !== externalModuleName.text) ? externalModuleName : firstArgument;
             var containsLexicalThis = !!(node.transformFlags & 8192 /* ContainsLexicalThis */);
@@ -98477,10 +100617,10 @@
             if (original && hasAssociatedEndOfDeclarationMarker(original)) {
                 // Defer exports until we encounter an EndOfDeclarationMarker node
                 var id = ts.getOriginalNodeId(node);
-                deferredExports[id] = appendExportStatement(deferredExports[id], factory.createIdentifier("default"), ts.visitNode(node.expression, moduleExpressionElementVisitor), /*location*/ node, /*allowComments*/ true);
+                deferredExports[id] = appendExportStatement(deferredExports[id], factory.createIdentifier("default"), ts.visitNode(node.expression, visitor), /*location*/ node, /*allowComments*/ true);
             }
             else {
-                statements = appendExportStatement(statements, factory.createIdentifier("default"), ts.visitNode(node.expression, moduleExpressionElementVisitor), /*location*/ node, /*allowComments*/ true);
+                statements = appendExportStatement(statements, factory.createIdentifier("default"), ts.visitNode(node.expression, visitor), /*location*/ node, /*allowComments*/ true);
             }
             return ts.singleOrMany(statements);
         }
@@ -98494,13 +100634,13 @@
             if (ts.hasSyntacticModifier(node, 1 /* Export */)) {
                 statements = ts.append(statements, ts.setOriginalNode(ts.setTextRange(factory.createFunctionDeclaration(
                 /*decorators*/ undefined, ts.visitNodes(node.modifiers, modifierVisitor, ts.isModifier), node.asteriskToken, factory.getDeclarationName(node, /*allowComments*/ true, /*allowSourceMaps*/ true), 
-                /*typeParameters*/ undefined, ts.visitNodes(node.parameters, moduleExpressionElementVisitor), 
-                /*type*/ undefined, ts.visitEachChild(node.body, moduleExpressionElementVisitor, context)), 
+                /*typeParameters*/ undefined, ts.visitNodes(node.parameters, visitor), 
+                /*type*/ undefined, ts.visitEachChild(node.body, visitor, context)), 
                 /*location*/ node), 
                 /*original*/ node));
             }
             else {
-                statements = ts.append(statements, ts.visitEachChild(node, moduleExpressionElementVisitor, context));
+                statements = ts.append(statements, ts.visitEachChild(node, visitor, context));
             }
             if (hasAssociatedEndOfDeclarationMarker(node)) {
                 // Defer exports until we encounter an EndOfDeclarationMarker node
@@ -98522,10 +100662,10 @@
             if (ts.hasSyntacticModifier(node, 1 /* Export */)) {
                 statements = ts.append(statements, ts.setOriginalNode(ts.setTextRange(factory.createClassDeclaration(
                 /*decorators*/ undefined, ts.visitNodes(node.modifiers, modifierVisitor, ts.isModifier), factory.getDeclarationName(node, /*allowComments*/ true, /*allowSourceMaps*/ true), 
-                /*typeParameters*/ undefined, ts.visitNodes(node.heritageClauses, moduleExpressionElementVisitor), ts.visitNodes(node.members, moduleExpressionElementVisitor)), node), node));
+                /*typeParameters*/ undefined, ts.visitNodes(node.heritageClauses, visitor), ts.visitNodes(node.members, visitor)), node), node));
             }
             else {
-                statements = ts.append(statements, ts.visitEachChild(node, moduleExpressionElementVisitor, context));
+                statements = ts.append(statements, ts.visitEachChild(node, visitor, context));
             }
             if (hasAssociatedEndOfDeclarationMarker(node)) {
                 // Defer exports until we encounter an EndOfDeclarationMarker node
@@ -98562,7 +100702,7 @@
                         if (!ts.isBindingPattern(variable.name) && (ts.isArrowFunction(variable.initializer) || ts.isFunctionExpression(variable.initializer) || ts.isClassExpression(variable.initializer))) {
                             var expression = factory.createAssignment(ts.setTextRange(factory.createPropertyAccessExpression(factory.createIdentifier("exports"), variable.name), 
                             /*location*/ variable.name), factory.createIdentifier(ts.getTextOfIdentifierOrLiteral(variable.name)));
-                            var updatedVariable = factory.createVariableDeclaration(variable.name, variable.exclamationToken, variable.type, ts.visitNode(variable.initializer, moduleExpressionElementVisitor));
+                            var updatedVariable = factory.createVariableDeclaration(variable.name, variable.exclamationToken, variable.type, ts.visitNode(variable.initializer, visitor));
                             variables = ts.append(variables, updatedVariable);
                             expressions = ts.append(expressions, expression);
                             removeCommentsOnExpressions = true;
@@ -98584,7 +100724,7 @@
                 }
             }
             else {
-                statements = ts.append(statements, ts.visitEachChild(node, moduleExpressionElementVisitor, context));
+                statements = ts.append(statements, ts.visitEachChild(node, visitor, context));
             }
             if (hasAssociatedEndOfDeclarationMarker(node)) {
                 // Defer exports until we encounter an EndOfDeclarationMarker node
@@ -98601,8 +100741,8 @@
             if (exportedNames) {
                 // For each additional export of the declaration, apply an export assignment.
                 var expression = ts.isExportName(name) ? value : factory.createAssignment(name, value);
-                for (var _i = 0, exportedNames_1 = exportedNames; _i < exportedNames_1.length; _i++) {
-                    var exportName = exportedNames_1[_i];
+                for (var _i = 0, exportedNames_2 = exportedNames; _i < exportedNames_2.length; _i++) {
+                    var exportName = exportedNames_2[_i];
                     // Mark the node to prevent triggering substitution.
                     ts.setEmitFlags(expression, 4 /* NoSubstitution */);
                     expression = createExportExpression(exportName, expression, /*location*/ location);
@@ -98618,13 +100758,13 @@
          */
         function transformInitializedVariable(node) {
             if (ts.isBindingPattern(node.name)) {
-                return ts.flattenDestructuringAssignment(ts.visitNode(node, moduleExpressionElementVisitor), 
+                return ts.flattenDestructuringAssignment(ts.visitNode(node, visitor), 
                 /*visitor*/ undefined, context, 0 /* All */, 
                 /*needsValue*/ false, createAllExportExpressions);
             }
             else {
                 return factory.createAssignment(ts.setTextRange(factory.createPropertyAccessExpression(factory.createIdentifier("exports"), node.name), 
-                /*location*/ node.name), node.initializer ? ts.visitNode(node.initializer, moduleExpressionElementVisitor) : factory.createVoidZero());
+                /*location*/ node.name), node.initializer ? ts.visitNode(node.initializer, visitor) : factory.createVoidZero());
             }
         }
         /**
@@ -98641,7 +100781,7 @@
             //
             // To balance the declaration, add the exports of the elided variable
             // statement.
-            if (hasAssociatedEndOfDeclarationMarker(node) && node.original.kind === 233 /* VariableStatement */) {
+            if (hasAssociatedEndOfDeclarationMarker(node) && node.original.kind === 235 /* VariableStatement */) {
                 var id = ts.getOriginalNodeId(node);
                 deferredExports[id] = appendExportsOfVariableStatement(deferredExports[id], node.original);
             }
@@ -98696,10 +100836,10 @@
             var namedBindings = importClause.namedBindings;
             if (namedBindings) {
                 switch (namedBindings.kind) {
-                    case 264 /* NamespaceImport */:
+                    case 266 /* NamespaceImport */:
                         statements = appendExportsOfDeclaration(statements, namedBindings);
                         break;
-                    case 265 /* NamedImports */:
+                    case 267 /* NamedImports */:
                         for (var _i = 0, _a = namedBindings.elements; _i < _a.length; _i++) {
                             var importBinding = _a[_i];
                             statements = appendExportsOfDeclaration(statements, importBinding, /* liveBinding */ true);
@@ -98895,8 +101035,8 @@
         function modifierVisitor(node) {
             // Elide module-specific modifiers.
             switch (node.kind) {
-                case 92 /* ExportKeyword */:
-                case 87 /* DefaultKeyword */:
+                case 93 /* ExportKeyword */:
+                case 88 /* DefaultKeyword */:
                     return undefined;
             }
             return node;
@@ -98912,14 +101052,12 @@
          * @param emit A callback used to emit the node in the printer.
          */
         function onEmitNode(hint, node, emitCallback) {
-            if (node.kind === 298 /* SourceFile */) {
+            if (node.kind === 300 /* SourceFile */) {
                 currentSourceFile = node;
                 currentModuleInfo = moduleInfoMap[ts.getOriginalNodeId(currentSourceFile)];
-                noSubstitution = [];
                 previousOnEmitNode(hint, node, emitCallback);
                 currentSourceFile = undefined;
                 currentModuleInfo = undefined;
-                noSubstitution = undefined;
             }
             else {
                 previousOnEmitNode(hint, node, emitCallback);
@@ -98974,13 +101112,36 @@
          */
         function substituteExpression(node) {
             switch (node.kind) {
-                case 78 /* Identifier */:
+                case 79 /* Identifier */:
                     return substituteExpressionIdentifier(node);
-                case 217 /* BinaryExpression */:
+                case 206 /* CallExpression */:
+                    return substituteCallExpression(node);
+                case 208 /* TaggedTemplateExpression */:
+                    return substituteTaggedTemplateExpression(node);
+                case 219 /* BinaryExpression */:
                     return substituteBinaryExpression(node);
-                case 216 /* PostfixUnaryExpression */:
-                case 215 /* PrefixUnaryExpression */:
-                    return substituteUnaryExpression(node);
+            }
+            return node;
+        }
+        function substituteCallExpression(node) {
+            if (ts.isIdentifier(node.expression)) {
+                var expression = substituteExpressionIdentifier(node.expression);
+                noSubstitution[ts.getNodeId(expression)] = true;
+                if (!ts.isIdentifier(expression)) {
+                    return ts.addEmitFlags(factory.updateCallExpression(node, expression, 
+                    /*typeArguments*/ undefined, node.arguments), 536870912 /* IndirectCall */);
+                }
+            }
+            return node;
+        }
+        function substituteTaggedTemplateExpression(node) {
+            if (ts.isIdentifier(node.tag)) {
+                var tag = substituteExpressionIdentifier(node.tag);
+                noSubstitution[ts.getNodeId(tag)] = true;
+                if (!ts.isIdentifier(tag)) {
+                    return ts.addEmitFlags(factory.updateTaggedTemplateExpression(node, tag, 
+                    /*typeArguments*/ undefined, node.template), 536870912 /* IndirectCall */);
+                }
             }
             return node;
         }
@@ -99001,7 +101162,7 @@
             }
             else if (!(ts.isGeneratedIdentifier(node) && !(node.autoGenerateFlags & 64 /* AllowNameSubstitution */)) && !ts.isLocalName(node)) {
                 var exportContainer = resolver.getReferencedExportContainer(node, ts.isExportName(node));
-                if (exportContainer && exportContainer.kind === 298 /* SourceFile */) {
+                if (exportContainer && exportContainer.kind === 300 /* SourceFile */) {
                     return ts.setTextRange(factory.createPropertyAccessExpression(factory.createIdentifier("exports"), factory.cloneNode(node)), 
                     /*location*/ node);
                 }
@@ -99043,54 +101204,11 @@
                 if (exportedNames) {
                     // For each additional export of the declaration, apply an export assignment.
                     var expression = node;
-                    for (var _i = 0, exportedNames_2 = exportedNames; _i < exportedNames_2.length; _i++) {
-                        var exportName = exportedNames_2[_i];
-                        // Mark the node to prevent triggering this rule again.
-                        noSubstitution[ts.getNodeId(expression)] = true;
-                        expression = createExportExpression(exportName, expression, /*location*/ node);
-                    }
-                    return expression;
-                }
-            }
-            return node;
-        }
-        /**
-         * Substitution for a UnaryExpression that may contain an imported or exported symbol.
-         *
-         * @param node The node to substitute.
-         */
-        function substituteUnaryExpression(node) {
-            // When we see a prefix or postfix increment expression whose operand is an exported
-            // symbol, we should ensure all exports of that symbol are updated with the correct
-            // value.
-            //
-            // - We do not substitute generated identifiers for any reason.
-            // - We do not substitute identifiers tagged with the LocalName flag.
-            // - We do not substitute identifiers that were originally the name of an enum or
-            //   namespace due to how they are transformed in TypeScript.
-            // - We only substitute identifiers that are exported at the top level.
-            if ((node.operator === 45 /* PlusPlusToken */ || node.operator === 46 /* MinusMinusToken */)
-                && ts.isIdentifier(node.operand)
-                && !ts.isGeneratedIdentifier(node.operand)
-                && !ts.isLocalName(node.operand)
-                && !ts.isDeclarationNameOfEnumOrNamespace(node.operand)) {
-                var exportedNames = getExports(node.operand);
-                if (exportedNames) {
-                    var expression = node.kind === 216 /* PostfixUnaryExpression */
-                        ? ts.setTextRange(factory.createPrefixUnaryExpression(node.operator, node.operand), 
-                        /*location*/ node)
-                        : node;
                     for (var _i = 0, exportedNames_3 = exportedNames; _i < exportedNames_3.length; _i++) {
                         var exportName = exportedNames_3[_i];
                         // Mark the node to prevent triggering this rule again.
                         noSubstitution[ts.getNodeId(expression)] = true;
-                        expression = createExportExpression(exportName, expression);
-                    }
-                    if (node.kind === 216 /* PostfixUnaryExpression */) {
-                        noSubstitution[ts.getNodeId(expression)] = true;
-                        expression = node.operator === 45 /* PlusPlusToken */
-                            ? factory.createSubtract(expression, factory.createNumericLiteral(1))
-                            : factory.createAdd(expression, factory.createNumericLiteral(1));
+                        expression = createExportExpression(exportName, expression, /*location*/ node);
                     }
                     return expression;
                 }
@@ -99133,13 +101251,11 @@
         var previousOnEmitNode = context.onEmitNode;
         context.onSubstituteNode = onSubstituteNode;
         context.onEmitNode = onEmitNode;
-        context.enableSubstitution(78 /* Identifier */); // Substitutes expression identifiers for imported symbols.
-        context.enableSubstitution(290 /* ShorthandPropertyAssignment */); // Substitutes expression identifiers for imported symbols
-        context.enableSubstitution(217 /* BinaryExpression */); // Substitutes assignments to exported symbols.
-        context.enableSubstitution(215 /* PrefixUnaryExpression */); // Substitutes updates to exported symbols.
-        context.enableSubstitution(216 /* PostfixUnaryExpression */); // Substitutes updates to exported symbols.
-        context.enableSubstitution(227 /* MetaProperty */); // Substitutes 'import.meta'
-        context.enableEmitNotification(298 /* SourceFile */); // Restore state when substituting nodes in a file.
+        context.enableSubstitution(79 /* Identifier */); // Substitutes expression identifiers for imported symbols.
+        context.enableSubstitution(292 /* ShorthandPropertyAssignment */); // Substitutes expression identifiers for imported symbols
+        context.enableSubstitution(219 /* BinaryExpression */); // Substitutes assignments to exported symbols.
+        context.enableSubstitution(229 /* MetaProperty */); // Substitutes 'import.meta'
+        context.enableEmitNotification(300 /* SourceFile */); // Restore state when substituting nodes in a file.
         var moduleInfoMap = []; // The ExternalModuleInfo for each file.
         var deferredExports = []; // Exports to defer until an EndOfDeclarationMarker is found.
         var exportFunctionsMap = []; // The export function associated with a source file.
@@ -99305,7 +101421,7 @@
             startLexicalEnvironment();
             // Add any prologue directives.
             var ensureUseStrict = ts.getStrictOptionValue(compilerOptions, "alwaysStrict") || (!compilerOptions.noImplicitUseStrict && ts.isExternalModule(currentSourceFile));
-            var statementOffset = factory.copyPrologue(node.statements, statements, ensureUseStrict, sourceElementVisitor);
+            var statementOffset = factory.copyPrologue(node.statements, statements, ensureUseStrict, topLevelVisitor);
             // var __moduleName = context_1 && context_1.id;
             statements.push(factory.createVariableStatement(
             /*modifiers*/ undefined, factory.createVariableDeclarationList([
@@ -99314,13 +101430,13 @@
                 /*type*/ undefined, factory.createLogicalAnd(contextObject, factory.createPropertyAccessExpression(contextObject, "id")))
             ])));
             // Visit the synthetic external helpers import declaration if present
-            ts.visitNode(moduleInfo.externalHelpersImportDeclaration, sourceElementVisitor, ts.isStatement);
+            ts.visitNode(moduleInfo.externalHelpersImportDeclaration, topLevelVisitor, ts.isStatement);
             // Visit the statements of the source file, emitting any transformations into
             // the `executeStatements` array. We do this *before* we fill the `setters` array
             // as we both emit transformations as well as aggregate some data used when creating
             // setters. This allows us to reduce the number of times we need to loop through the
             // statements of the source file.
-            var executeStatements = ts.visitNodes(node.statements, sourceElementVisitor, ts.isStatement, statementOffset);
+            var executeStatements = ts.visitNodes(node.statements, topLevelVisitor, ts.isStatement, statementOffset);
             // Emit early exports for function declarations.
             ts.addRange(statements, hoistedStatements);
             // We emit hoisted variables early to align roughly with our previous emit output.
@@ -99363,7 +101479,7 @@
                 var hasExportDeclarationWithExportClause = false;
                 for (var _i = 0, _a = moduleInfo.externalImports; _i < _a.length; _i++) {
                     var externalImport = _a[_i];
-                    if (externalImport.kind === 268 /* ExportDeclaration */ && externalImport.exportClause) {
+                    if (externalImport.kind === 270 /* ExportDeclaration */ && externalImport.exportClause) {
                         hasExportDeclarationWithExportClause = true;
                         break;
                     }
@@ -99453,19 +101569,19 @@
                     var entry = _b[_a];
                     var importVariableName = ts.getLocalNameForExternalImport(factory, entry, currentSourceFile); // TODO: GH#18217
                     switch (entry.kind) {
-                        case 262 /* ImportDeclaration */:
+                        case 264 /* ImportDeclaration */:
                             if (!entry.importClause) {
                                 // 'import "..."' case
                                 // module is imported only for side-effects, no emit required
                                 break;
                             }
                         // falls through
-                        case 261 /* ImportEqualsDeclaration */:
+                        case 263 /* ImportEqualsDeclaration */:
                             ts.Debug.assert(importVariableName !== undefined);
                             // save import into the local
                             statements.push(factory.createExpressionStatement(factory.createAssignment(importVariableName, parameterName)));
                             break;
-                        case 268 /* ExportDeclaration */:
+                        case 270 /* ExportDeclaration */:
                             ts.Debug.assert(importVariableName !== undefined);
                             if (entry.exportClause) {
                                 if (ts.isNamedExports(entry.exportClause)) {
@@ -99522,18 +101638,18 @@
          *
          * @param node The node to visit.
          */
-        function sourceElementVisitor(node) {
+        function topLevelVisitor(node) {
             switch (node.kind) {
-                case 262 /* ImportDeclaration */:
+                case 264 /* ImportDeclaration */:
                     return visitImportDeclaration(node);
-                case 261 /* ImportEqualsDeclaration */:
+                case 263 /* ImportEqualsDeclaration */:
                     return visitImportEqualsDeclaration(node);
-                case 268 /* ExportDeclaration */:
+                case 270 /* ExportDeclaration */:
                     return visitExportDeclaration(node);
-                case 267 /* ExportAssignment */:
+                case 269 /* ExportAssignment */:
                     return visitExportAssignment(node);
                 default:
-                    return nestedElementVisitor(node);
+                    return topLevelNestedVisitor(node);
             }
         }
         /**
@@ -99589,7 +101705,7 @@
                 // Elide `export=` as it is illegal in a SystemJS module.
                 return undefined;
             }
-            var expression = ts.visitNode(node.expression, destructuringAndImportCallVisitor, ts.isExpression);
+            var expression = ts.visitNode(node.expression, visitor, ts.isExpression);
             var original = node.original;
             if (original && hasAssociatedEndOfDeclarationMarker(original)) {
                 // Defer exports until we encounter an EndOfDeclarationMarker node
@@ -99608,11 +101724,11 @@
         function visitFunctionDeclaration(node) {
             if (ts.hasSyntacticModifier(node, 1 /* Export */)) {
                 hoistedStatements = ts.append(hoistedStatements, factory.updateFunctionDeclaration(node, node.decorators, ts.visitNodes(node.modifiers, modifierVisitor, ts.isModifier), node.asteriskToken, factory.getDeclarationName(node, /*allowComments*/ true, /*allowSourceMaps*/ true), 
-                /*typeParameters*/ undefined, ts.visitNodes(node.parameters, destructuringAndImportCallVisitor, ts.isParameterDeclaration), 
-                /*type*/ undefined, ts.visitNode(node.body, destructuringAndImportCallVisitor, ts.isBlock)));
+                /*typeParameters*/ undefined, ts.visitNodes(node.parameters, visitor, ts.isParameterDeclaration), 
+                /*type*/ undefined, ts.visitNode(node.body, visitor, ts.isBlock)));
             }
             else {
-                hoistedStatements = ts.append(hoistedStatements, ts.visitEachChild(node, destructuringAndImportCallVisitor, context));
+                hoistedStatements = ts.append(hoistedStatements, ts.visitEachChild(node, visitor, context));
             }
             if (hasAssociatedEndOfDeclarationMarker(node)) {
                 // Defer exports until we encounter an EndOfDeclarationMarker node
@@ -99635,9 +101751,9 @@
             var name = factory.getLocalName(node);
             hoistVariableDeclaration(name);
             // Rewrite the class declaration into an assignment of a class expression.
-            statements = ts.append(statements, ts.setTextRange(factory.createExpressionStatement(factory.createAssignment(name, ts.setTextRange(factory.createClassExpression(ts.visitNodes(node.decorators, destructuringAndImportCallVisitor, ts.isDecorator), 
+            statements = ts.append(statements, ts.setTextRange(factory.createExpressionStatement(factory.createAssignment(name, ts.setTextRange(factory.createClassExpression(ts.visitNodes(node.decorators, visitor, ts.isDecorator), 
             /*modifiers*/ undefined, node.name, 
-            /*typeParameters*/ undefined, ts.visitNodes(node.heritageClauses, destructuringAndImportCallVisitor, ts.isHeritageClause), ts.visitNodes(node.members, destructuringAndImportCallVisitor, ts.isClassElement)), node))), node));
+            /*typeParameters*/ undefined, ts.visitNodes(node.heritageClauses, visitor, ts.isHeritageClause), ts.visitNodes(node.members, visitor, ts.isClassElement)), node))), node));
             if (hasAssociatedEndOfDeclarationMarker(node)) {
                 // Defer exports until we encounter an EndOfDeclarationMarker node
                 var id = ts.getOriginalNodeId(node);
@@ -99656,7 +101772,7 @@
          */
         function visitVariableStatement(node) {
             if (!shouldHoistVariableDeclarationList(node.declarationList)) {
-                return ts.visitNode(node, destructuringAndImportCallVisitor, ts.isStatement);
+                return ts.visitNode(node, visitor, ts.isStatement);
             }
             var expressions;
             var isExportedDeclaration = ts.hasSyntacticModifier(node, 1 /* Export */);
@@ -99710,7 +101826,7 @@
         function shouldHoistVariableDeclarationList(node) {
             // hoist only non-block scoped declarations or block scoped declarations parented by source file
             return (ts.getEmitFlags(node) & 2097152 /* NoHoisting */) === 0
-                && (enclosingBlockScopedContainer.kind === 298 /* SourceFile */
+                && (enclosingBlockScopedContainer.kind === 300 /* SourceFile */
                     || (ts.getOriginalNode(node).flags & 3 /* BlockScoped */) === 0);
         }
         /**
@@ -99722,9 +101838,9 @@
         function transformInitializedVariable(node, isExportedDeclaration) {
             var createAssignment = isExportedDeclaration ? createExportedVariableAssignment : createNonExportedVariableAssignment;
             return ts.isBindingPattern(node.name)
-                ? ts.flattenDestructuringAssignment(node, destructuringAndImportCallVisitor, context, 0 /* All */, 
+                ? ts.flattenDestructuringAssignment(node, visitor, context, 0 /* All */, 
                 /*needsValue*/ false, createAssignment)
-                : node.initializer ? createAssignment(node.name, ts.visitNode(node.initializer, destructuringAndImportCallVisitor, ts.isExpression)) : node.name;
+                : node.initializer ? createAssignment(node.name, ts.visitNode(node.initializer, visitor, ts.isExpression)) : node.name;
         }
         /**
          * Creates an assignment expression for an exported variable declaration.
@@ -99774,7 +101890,7 @@
             //
             // To balance the declaration, we defer the exports of the elided variable
             // statement until we visit this declaration's `EndOfDeclarationMarker`.
-            if (hasAssociatedEndOfDeclarationMarker(node) && node.original.kind === 233 /* VariableStatement */) {
+            if (hasAssociatedEndOfDeclarationMarker(node) && node.original.kind === 235 /* VariableStatement */) {
                 var id = ts.getOriginalNodeId(node);
                 var isExportedDeclaration = ts.hasSyntacticModifier(node.original, 1 /* Export */);
                 deferredExports[id] = appendExportsOfVariableStatement(deferredExports[id], node.original, isExportedDeclaration);
@@ -99836,10 +101952,10 @@
             var namedBindings = importClause.namedBindings;
             if (namedBindings) {
                 switch (namedBindings.kind) {
-                    case 264 /* NamespaceImport */:
+                    case 266 /* NamespaceImport */:
                         statements = appendExportsOfDeclaration(statements, namedBindings);
                         break;
-                    case 265 /* NamedImports */:
+                    case 267 /* NamedImports */:
                         for (var _i = 0, _a = namedBindings.elements; _i < _a.length; _i++) {
                             var importBinding = _a[_i];
                             statements = appendExportsOfDeclaration(statements, importBinding);
@@ -100017,48 +102133,48 @@
          *
          * @param node The node to visit.
          */
-        function nestedElementVisitor(node) {
+        function topLevelNestedVisitor(node) {
             switch (node.kind) {
-                case 233 /* VariableStatement */:
+                case 235 /* VariableStatement */:
                     return visitVariableStatement(node);
-                case 252 /* FunctionDeclaration */:
+                case 254 /* FunctionDeclaration */:
                     return visitFunctionDeclaration(node);
-                case 253 /* ClassDeclaration */:
+                case 255 /* ClassDeclaration */:
                     return visitClassDeclaration(node);
-                case 238 /* ForStatement */:
-                    return visitForStatement(node);
-                case 239 /* ForInStatement */:
+                case 240 /* ForStatement */:
+                    return visitForStatement(node, /*isTopLevel*/ true);
+                case 241 /* ForInStatement */:
                     return visitForInStatement(node);
-                case 240 /* ForOfStatement */:
+                case 242 /* ForOfStatement */:
                     return visitForOfStatement(node);
-                case 236 /* DoStatement */:
+                case 238 /* DoStatement */:
                     return visitDoStatement(node);
-                case 237 /* WhileStatement */:
+                case 239 /* WhileStatement */:
                     return visitWhileStatement(node);
-                case 246 /* LabeledStatement */:
+                case 248 /* LabeledStatement */:
                     return visitLabeledStatement(node);
-                case 244 /* WithStatement */:
+                case 246 /* WithStatement */:
                     return visitWithStatement(node);
-                case 245 /* SwitchStatement */:
+                case 247 /* SwitchStatement */:
                     return visitSwitchStatement(node);
-                case 259 /* CaseBlock */:
+                case 261 /* CaseBlock */:
                     return visitCaseBlock(node);
-                case 285 /* CaseClause */:
+                case 287 /* CaseClause */:
                     return visitCaseClause(node);
-                case 286 /* DefaultClause */:
+                case 288 /* DefaultClause */:
                     return visitDefaultClause(node);
-                case 248 /* TryStatement */:
+                case 250 /* TryStatement */:
                     return visitTryStatement(node);
-                case 288 /* CatchClause */:
+                case 290 /* CatchClause */:
                     return visitCatchClause(node);
-                case 231 /* Block */:
+                case 233 /* Block */:
                     return visitBlock(node);
-                case 342 /* MergeDeclarationMarker */:
+                case 347 /* MergeDeclarationMarker */:
                     return visitMergeDeclarationMarker(node);
-                case 343 /* EndOfDeclarationMarker */:
+                case 348 /* EndOfDeclarationMarker */:
                     return visitEndOfDeclarationMarker(node);
                 default:
-                    return destructuringAndImportCallVisitor(node);
+                    return visitor(node);
             }
         }
         /**
@@ -100066,10 +102182,10 @@
          *
          * @param node The node to visit.
          */
-        function visitForStatement(node) {
+        function visitForStatement(node, isTopLevel) {
             var savedEnclosingBlockScopedContainer = enclosingBlockScopedContainer;
             enclosingBlockScopedContainer = node;
-            node = factory.updateForStatement(node, node.initializer && visitForInitializer(node.initializer), ts.visitNode(node.condition, destructuringAndImportCallVisitor, ts.isExpression), ts.visitNode(node.incrementor, destructuringAndImportCallVisitor, ts.isExpression), ts.visitIterationBody(node.statement, nestedElementVisitor, context));
+            node = factory.updateForStatement(node, ts.visitNode(node.initializer, isTopLevel ? visitForInitializer : discardedValueVisitor, ts.isForInitializer), ts.visitNode(node.condition, visitor, ts.isExpression), ts.visitNode(node.incrementor, discardedValueVisitor, ts.isExpression), ts.visitIterationBody(node.statement, isTopLevel ? topLevelNestedVisitor : visitor, context));
             enclosingBlockScopedContainer = savedEnclosingBlockScopedContainer;
             return node;
         }
@@ -100081,7 +102197,7 @@
         function visitForInStatement(node) {
             var savedEnclosingBlockScopedContainer = enclosingBlockScopedContainer;
             enclosingBlockScopedContainer = node;
-            node = factory.updateForInStatement(node, visitForInitializer(node.initializer), ts.visitNode(node.expression, destructuringAndImportCallVisitor, ts.isExpression), ts.visitIterationBody(node.statement, nestedElementVisitor, context));
+            node = factory.updateForInStatement(node, visitForInitializer(node.initializer), ts.visitNode(node.expression, visitor, ts.isExpression), ts.visitIterationBody(node.statement, topLevelNestedVisitor, context));
             enclosingBlockScopedContainer = savedEnclosingBlockScopedContainer;
             return node;
         }
@@ -100093,7 +102209,7 @@
         function visitForOfStatement(node) {
             var savedEnclosingBlockScopedContainer = enclosingBlockScopedContainer;
             enclosingBlockScopedContainer = node;
-            node = factory.updateForOfStatement(node, node.awaitModifier, visitForInitializer(node.initializer), ts.visitNode(node.expression, destructuringAndImportCallVisitor, ts.isExpression), ts.visitIterationBody(node.statement, nestedElementVisitor, context));
+            node = factory.updateForOfStatement(node, node.awaitModifier, visitForInitializer(node.initializer), ts.visitNode(node.expression, visitor, ts.isExpression), ts.visitIterationBody(node.statement, topLevelNestedVisitor, context));
             enclosingBlockScopedContainer = savedEnclosingBlockScopedContainer;
             return node;
         }
@@ -100125,7 +102241,7 @@
                 return expressions ? factory.inlineExpressions(expressions) : factory.createOmittedExpression();
             }
             else {
-                return ts.visitEachChild(node, nestedElementVisitor, context);
+                return ts.visitNode(node, discardedValueVisitor, ts.isExpression);
             }
         }
         /**
@@ -100134,7 +102250,7 @@
          * @param node The node to visit.
          */
         function visitDoStatement(node) {
-            return factory.updateDoStatement(node, ts.visitIterationBody(node.statement, nestedElementVisitor, context), ts.visitNode(node.expression, destructuringAndImportCallVisitor, ts.isExpression));
+            return factory.updateDoStatement(node, ts.visitIterationBody(node.statement, topLevelNestedVisitor, context), ts.visitNode(node.expression, visitor, ts.isExpression));
         }
         /**
          * Visits the body of a WhileStatement to hoist declarations.
@@ -100142,7 +102258,7 @@
          * @param node The node to visit.
          */
         function visitWhileStatement(node) {
-            return factory.updateWhileStatement(node, ts.visitNode(node.expression, destructuringAndImportCallVisitor, ts.isExpression), ts.visitIterationBody(node.statement, nestedElementVisitor, context));
+            return factory.updateWhileStatement(node, ts.visitNode(node.expression, visitor, ts.isExpression), ts.visitIterationBody(node.statement, topLevelNestedVisitor, context));
         }
         /**
          * Visits the body of a LabeledStatement to hoist declarations.
@@ -100150,7 +102266,7 @@
          * @param node The node to visit.
          */
         function visitLabeledStatement(node) {
-            return factory.updateLabeledStatement(node, node.label, ts.visitNode(node.statement, nestedElementVisitor, ts.isStatement, factory.liftToBlock));
+            return factory.updateLabeledStatement(node, node.label, ts.visitNode(node.statement, topLevelNestedVisitor, ts.isStatement, factory.liftToBlock));
         }
         /**
          * Visits the body of a WithStatement to hoist declarations.
@@ -100158,7 +102274,7 @@
          * @param node The node to visit.
          */
         function visitWithStatement(node) {
-            return factory.updateWithStatement(node, ts.visitNode(node.expression, destructuringAndImportCallVisitor, ts.isExpression), ts.visitNode(node.statement, nestedElementVisitor, ts.isStatement, factory.liftToBlock));
+            return factory.updateWithStatement(node, ts.visitNode(node.expression, visitor, ts.isExpression), ts.visitNode(node.statement, topLevelNestedVisitor, ts.isStatement, factory.liftToBlock));
         }
         /**
          * Visits the body of a SwitchStatement to hoist declarations.
@@ -100166,7 +102282,7 @@
          * @param node The node to visit.
          */
         function visitSwitchStatement(node) {
-            return factory.updateSwitchStatement(node, ts.visitNode(node.expression, destructuringAndImportCallVisitor, ts.isExpression), ts.visitNode(node.caseBlock, nestedElementVisitor, ts.isCaseBlock));
+            return factory.updateSwitchStatement(node, ts.visitNode(node.expression, visitor, ts.isExpression), ts.visitNode(node.caseBlock, topLevelNestedVisitor, ts.isCaseBlock));
         }
         /**
          * Visits the body of a CaseBlock to hoist declarations.
@@ -100176,7 +102292,7 @@
         function visitCaseBlock(node) {
             var savedEnclosingBlockScopedContainer = enclosingBlockScopedContainer;
             enclosingBlockScopedContainer = node;
-            node = factory.updateCaseBlock(node, ts.visitNodes(node.clauses, nestedElementVisitor, ts.isCaseOrDefaultClause));
+            node = factory.updateCaseBlock(node, ts.visitNodes(node.clauses, topLevelNestedVisitor, ts.isCaseOrDefaultClause));
             enclosingBlockScopedContainer = savedEnclosingBlockScopedContainer;
             return node;
         }
@@ -100186,7 +102302,7 @@
          * @param node The node to visit.
          */
         function visitCaseClause(node) {
-            return factory.updateCaseClause(node, ts.visitNode(node.expression, destructuringAndImportCallVisitor, ts.isExpression), ts.visitNodes(node.statements, nestedElementVisitor, ts.isStatement));
+            return factory.updateCaseClause(node, ts.visitNode(node.expression, visitor, ts.isExpression), ts.visitNodes(node.statements, topLevelNestedVisitor, ts.isStatement));
         }
         /**
          * Visits the body of a DefaultClause to hoist declarations.
@@ -100194,7 +102310,7 @@
          * @param node The node to visit.
          */
         function visitDefaultClause(node) {
-            return ts.visitEachChild(node, nestedElementVisitor, context);
+            return ts.visitEachChild(node, topLevelNestedVisitor, context);
         }
         /**
          * Visits the body of a TryStatement to hoist declarations.
@@ -100202,7 +102318,7 @@
          * @param node The node to visit.
          */
         function visitTryStatement(node) {
-            return ts.visitEachChild(node, nestedElementVisitor, context);
+            return ts.visitEachChild(node, topLevelNestedVisitor, context);
         }
         /**
          * Visits the body of a CatchClause to hoist declarations.
@@ -100212,7 +102328,7 @@
         function visitCatchClause(node) {
             var savedEnclosingBlockScopedContainer = enclosingBlockScopedContainer;
             enclosingBlockScopedContainer = node;
-            node = factory.updateCatchClause(node, node.variableDeclaration, ts.visitNode(node.block, nestedElementVisitor, ts.isBlock));
+            node = factory.updateCatchClause(node, node.variableDeclaration, ts.visitNode(node.block, topLevelNestedVisitor, ts.isBlock));
             enclosingBlockScopedContainer = savedEnclosingBlockScopedContainer;
             return node;
         }
@@ -100224,7 +102340,7 @@
         function visitBlock(node) {
             var savedEnclosingBlockScopedContainer = enclosingBlockScopedContainer;
             enclosingBlockScopedContainer = node;
-            node = ts.visitEachChild(node, nestedElementVisitor, context);
+            node = ts.visitEachChild(node, topLevelNestedVisitor, context);
             enclosingBlockScopedContainer = savedEnclosingBlockScopedContainer;
             return node;
         }
@@ -100236,19 +102352,54 @@
          *
          * @param node The node to visit.
          */
-        function destructuringAndImportCallVisitor(node) {
-            if (ts.isDestructuringAssignment(node)) {
-                return visitDestructuringAssignment(node);
-            }
-            else if (ts.isImportCall(node)) {
-                return visitImportCallExpression(node);
-            }
-            else if ((node.transformFlags & 2048 /* ContainsDestructuringAssignment */) || (node.transformFlags & 4194304 /* ContainsDynamicImport */)) {
-                return ts.visitEachChild(node, destructuringAndImportCallVisitor, context);
-            }
-            else {
+        function visitorWorker(node, valueIsDiscarded) {
+            if (!(node.transformFlags & (2048 /* ContainsDestructuringAssignment */ | 4194304 /* ContainsDynamicImport */ | 67108864 /* ContainsUpdateExpressionForIdentifier */))) {
                 return node;
             }
+            switch (node.kind) {
+                case 240 /* ForStatement */:
+                    return visitForStatement(node, /*isTopLevel*/ false);
+                case 236 /* ExpressionStatement */:
+                    return visitExpressionStatement(node);
+                case 210 /* ParenthesizedExpression */:
+                    return visitParenthesizedExpression(node, valueIsDiscarded);
+                case 345 /* PartiallyEmittedExpression */:
+                    return visitPartiallyEmittedExpression(node, valueIsDiscarded);
+                case 219 /* BinaryExpression */:
+                    if (ts.isDestructuringAssignment(node)) {
+                        return visitDestructuringAssignment(node, valueIsDiscarded);
+                    }
+                    break;
+                case 206 /* CallExpression */:
+                    if (ts.isImportCall(node)) {
+                        return visitImportCallExpression(node);
+                    }
+                    break;
+                case 217 /* PrefixUnaryExpression */:
+                case 218 /* PostfixUnaryExpression */:
+                    return visitPrefixOrPostfixUnaryExpression(node, valueIsDiscarded);
+            }
+            return ts.visitEachChild(node, visitor, context);
+        }
+        /**
+         * Visit nodes to flatten destructuring assignments to exported symbols.
+         *
+         * @param node The node to visit.
+         */
+        function visitor(node) {
+            return visitorWorker(node, /*valueIsDiscarded*/ false);
+        }
+        function discardedValueVisitor(node) {
+            return visitorWorker(node, /*valueIsDiscarded*/ true);
+        }
+        function visitExpressionStatement(node) {
+            return factory.updateExpressionStatement(node, ts.visitNode(node.expression, discardedValueVisitor, ts.isExpression));
+        }
+        function visitParenthesizedExpression(node, valueIsDiscarded) {
+            return factory.updateParenthesizedExpression(node, ts.visitNode(node.expression, valueIsDiscarded ? discardedValueVisitor : visitor, ts.isExpression));
+        }
+        function visitPartiallyEmittedExpression(node, valueIsDiscarded) {
+            return factory.updatePartiallyEmittedExpression(node, ts.visitNode(node.expression, valueIsDiscarded ? discardedValueVisitor : visitor, ts.isExpression));
         }
         function visitImportCallExpression(node) {
             // import("./blah")
@@ -100262,7 +102413,7 @@
             //     };
             // });
             var externalModuleName = ts.getExternalModuleNameLiteral(factory, node, currentSourceFile, host, resolver, compilerOptions);
-            var firstArgument = ts.visitNode(ts.firstOrUndefined(node.arguments), destructuringAndImportCallVisitor);
+            var firstArgument = ts.visitNode(ts.firstOrUndefined(node.arguments), visitor);
             // Only use the external module name if it differs from the first argument. This allows us to preserve the quote style of the argument on output.
             var argument = externalModuleName && (!firstArgument || !ts.isStringLiteral(firstArgument) || firstArgument.text !== externalModuleName.text) ? externalModuleName : firstArgument;
             return factory.createCallExpression(factory.createPropertyAccessExpression(contextObject, factory.createIdentifier("import")), 
@@ -100273,12 +102424,11 @@
          *
          * @param node The node to visit.
          */
-        function visitDestructuringAssignment(node) {
+        function visitDestructuringAssignment(node, valueIsDiscarded) {
             if (hasExportedReferenceInDestructuringTarget(node.left)) {
-                return ts.flattenDestructuringAssignment(node, destructuringAndImportCallVisitor, context, 0 /* All */, 
-                /*needsValue*/ true);
+                return ts.flattenDestructuringAssignment(node, visitor, context, 0 /* All */, !valueIsDiscarded);
             }
-            return ts.visitEachChild(node, destructuringAndImportCallVisitor, context);
+            return ts.visitEachChild(node, visitor, context);
         }
         /**
          * Determines whether the target of a destructuring assignment refers to an exported symbol.
@@ -100306,12 +102456,57 @@
             }
             else if (ts.isIdentifier(node)) {
                 var container = resolver.getReferencedExportContainer(node);
-                return container !== undefined && container.kind === 298 /* SourceFile */;
+                return container !== undefined && container.kind === 300 /* SourceFile */;
             }
             else {
                 return false;
             }
         }
+        function visitPrefixOrPostfixUnaryExpression(node, valueIsDiscarded) {
+            // When we see a prefix or postfix increment expression whose operand is an exported
+            // symbol, we should ensure all exports of that symbol are updated with the correct
+            // value.
+            //
+            // - We do not transform generated identifiers for any reason.
+            // - We do not transform identifiers tagged with the LocalName flag.
+            // - We do not transform identifiers that were originally the name of an enum or
+            //   namespace due to how they are transformed in TypeScript.
+            // - We only transform identifiers that are exported at the top level.
+            if ((node.operator === 45 /* PlusPlusToken */ || node.operator === 46 /* MinusMinusToken */)
+                && ts.isIdentifier(node.operand)
+                && !ts.isGeneratedIdentifier(node.operand)
+                && !ts.isLocalName(node.operand)
+                && !ts.isDeclarationNameOfEnumOrNamespace(node.operand)) {
+                var exportedNames = getExports(node.operand);
+                if (exportedNames) {
+                    var temp = void 0;
+                    var expression = ts.visitNode(node.operand, visitor, ts.isExpression);
+                    if (ts.isPrefixUnaryExpression(node)) {
+                        expression = factory.updatePrefixUnaryExpression(node, expression);
+                    }
+                    else {
+                        expression = factory.updatePostfixUnaryExpression(node, expression);
+                        if (!valueIsDiscarded) {
+                            temp = factory.createTempVariable(hoistVariableDeclaration);
+                            expression = factory.createAssignment(temp, expression);
+                            ts.setTextRange(expression, node);
+                        }
+                        expression = factory.createComma(expression, factory.cloneNode(node.operand));
+                        ts.setTextRange(expression, node);
+                    }
+                    for (var _i = 0, exportedNames_4 = exportedNames; _i < exportedNames_4.length; _i++) {
+                        var exportName = exportedNames_4[_i];
+                        expression = createExportExpression(exportName, preventSubstitution(expression));
+                    }
+                    if (temp) {
+                        expression = factory.createComma(expression, temp);
+                        ts.setTextRange(expression, node);
+                    }
+                    return expression;
+                }
+            }
+            return ts.visitEachChild(node, visitor, context);
+        }
         //
         // Modifier Visitors
         //
@@ -100322,8 +102517,8 @@
          */
         function modifierVisitor(node) {
             switch (node.kind) {
-                case 92 /* ExportKeyword */:
-                case 87 /* DefaultKeyword */:
+                case 93 /* ExportKeyword */:
+                case 88 /* DefaultKeyword */:
                     return undefined;
             }
             return node;
@@ -100339,7 +102534,7 @@
          * @param emitCallback A callback used to emit the node in the printer.
          */
         function onEmitNode(hint, node, emitCallback) {
-            if (node.kind === 298 /* SourceFile */) {
+            if (node.kind === 300 /* SourceFile */) {
                 var id = ts.getOriginalNodeId(node);
                 currentSourceFile = node;
                 moduleInfo = moduleInfoMap[id];
@@ -100389,7 +102584,7 @@
          */
         function substituteUnspecified(node) {
             switch (node.kind) {
-                case 290 /* ShorthandPropertyAssignment */:
+                case 292 /* ShorthandPropertyAssignment */:
                     return substituteShorthandPropertyAssignment(node);
             }
             return node;
@@ -100424,14 +102619,11 @@
          */
         function substituteExpression(node) {
             switch (node.kind) {
-                case 78 /* Identifier */:
+                case 79 /* Identifier */:
                     return substituteExpressionIdentifier(node);
-                case 217 /* BinaryExpression */:
+                case 219 /* BinaryExpression */:
                     return substituteBinaryExpression(node);
-                case 215 /* PrefixUnaryExpression */:
-                case 216 /* PostfixUnaryExpression */:
-                    return substituteUnaryExpression(node);
-                case 227 /* MetaProperty */:
+                case 229 /* MetaProperty */:
                     return substituteMetaProperty(node);
             }
             return node;
@@ -100494,49 +102686,10 @@
                 if (exportedNames) {
                     // For each additional export of the declaration, apply an export assignment.
                     var expression = node;
-                    for (var _i = 0, exportedNames_4 = exportedNames; _i < exportedNames_4.length; _i++) {
-                        var exportName = exportedNames_4[_i];
-                        expression = createExportExpression(exportName, preventSubstitution(expression));
-                    }
-                    return expression;
-                }
-            }
-            return node;
-        }
-        /**
-         * Substitution for a UnaryExpression that may contain an imported or exported symbol.
-         *
-         * @param node The node to substitute.
-         */
-        function substituteUnaryExpression(node) {
-            // When we see a prefix or postfix increment expression whose operand is an exported
-            // symbol, we should ensure all exports of that symbol are updated with the correct
-            // value.
-            //
-            // - We do not substitute generated identifiers for any reason.
-            // - We do not substitute identifiers tagged with the LocalName flag.
-            // - We do not substitute identifiers that were originally the name of an enum or
-            //   namespace due to how they are transformed in TypeScript.
-            // - We only substitute identifiers that are exported at the top level.
-            if ((node.operator === 45 /* PlusPlusToken */ || node.operator === 46 /* MinusMinusToken */)
-                && ts.isIdentifier(node.operand)
-                && !ts.isGeneratedIdentifier(node.operand)
-                && !ts.isLocalName(node.operand)
-                && !ts.isDeclarationNameOfEnumOrNamespace(node.operand)) {
-                var exportedNames = getExports(node.operand);
-                if (exportedNames) {
-                    var expression = node.kind === 216 /* PostfixUnaryExpression */
-                        ? ts.setTextRange(factory.createPrefixUnaryExpression(node.operator, node.operand), node)
-                        : node;
                     for (var _i = 0, exportedNames_5 = exportedNames; _i < exportedNames_5.length; _i++) {
                         var exportName = exportedNames_5[_i];
                         expression = createExportExpression(exportName, preventSubstitution(expression));
                     }
-                    if (node.kind === 216 /* PostfixUnaryExpression */) {
-                        expression = node.operator === 45 /* PlusPlusToken */
-                            ? factory.createSubtract(preventSubstitution(expression), factory.createNumericLiteral(1))
-                            : factory.createAdd(preventSubstitution(expression), factory.createNumericLiteral(1));
-                    }
                     return expression;
                 }
             }
@@ -100560,7 +102713,7 @@
                     || resolver.getReferencedValueDeclaration(name);
                 if (valueDeclaration) {
                     var exportContainer = resolver.getReferencedExportContainer(name, /*prefixLocals*/ false);
-                    if (exportContainer && exportContainer.kind === 298 /* SourceFile */) {
+                    if (exportContainer && exportContainer.kind === 300 /* SourceFile */) {
                         exportedNames = ts.append(exportedNames, factory.getDeclarationName(valueDeclaration));
                     }
                     exportedNames = ts.addRange(exportedNames, moduleInfo && moduleInfo.exportedBindings[ts.getOriginalNodeId(valueDeclaration)]);
@@ -100600,8 +102753,8 @@
         var previousOnSubstituteNode = context.onSubstituteNode;
         context.onEmitNode = onEmitNode;
         context.onSubstituteNode = onSubstituteNode;
-        context.enableEmitNotification(298 /* SourceFile */);
-        context.enableSubstitution(78 /* Identifier */);
+        context.enableEmitNotification(300 /* SourceFile */);
+        context.enableSubstitution(79 /* Identifier */);
         var helperNameSubstitutions;
         return ts.chainBundle(context, transformSourceFile);
         function transformSourceFile(node) {
@@ -100613,7 +102766,7 @@
                 if (!ts.isExternalModule(node) || ts.some(result.statements, ts.isExternalModuleIndicator)) {
                     return result;
                 }
-                return factory.updateSourceFile(result, ts.setTextRange(factory.createNodeArray(__spreadArray(__spreadArray([], result.statements), [ts.createEmptyExports(factory)])), result.statements));
+                return factory.updateSourceFile(result, ts.setTextRange(factory.createNodeArray(__spreadArray(__spreadArray([], result.statements, true), [ts.createEmptyExports(factory)], false)), result.statements));
             }
             return node;
         }
@@ -100632,12 +102785,12 @@
         }
         function visitor(node) {
             switch (node.kind) {
-                case 261 /* ImportEqualsDeclaration */:
+                case 263 /* ImportEqualsDeclaration */:
                     // Elide `import=` as it is not legal with --module ES6
                     return undefined;
-                case 267 /* ExportAssignment */:
+                case 269 /* ExportAssignment */:
                     return visitExportAssignment(node);
-                case 268 /* ExportDeclaration */:
+                case 270 /* ExportDeclaration */:
                     var exportDecl = node;
                     return visitExportDeclaration(exportDecl);
             }
@@ -100765,14 +102918,14 @@
             } : undefined;
         }
         function getAccessorNameVisibilityDiagnosticMessage(symbolAccessibilityResult) {
-            if (ts.hasSyntacticModifier(node, 32 /* Static */)) {
+            if (ts.isStatic(node)) {
                 return symbolAccessibilityResult.errorModuleName ?
                     symbolAccessibilityResult.accessibility === 2 /* CannotBeNamed */ ?
                         ts.Diagnostics.Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named :
                         ts.Diagnostics.Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2 :
                     ts.Diagnostics.Public_static_property_0_of_exported_class_has_or_is_using_private_name_1;
             }
-            else if (node.parent.kind === 253 /* ClassDeclaration */) {
+            else if (node.parent.kind === 255 /* ClassDeclaration */) {
                 return symbolAccessibilityResult.errorModuleName ?
                     symbolAccessibilityResult.accessibility === 2 /* CannotBeNamed */ ?
                         ts.Diagnostics.Public_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named :
@@ -100794,14 +102947,14 @@
             } : undefined;
         }
         function getMethodNameVisibilityDiagnosticMessage(symbolAccessibilityResult) {
-            if (ts.hasSyntacticModifier(node, 32 /* Static */)) {
+            if (ts.isStatic(node)) {
                 return symbolAccessibilityResult.errorModuleName ?
                     symbolAccessibilityResult.accessibility === 2 /* CannotBeNamed */ ?
                         ts.Diagnostics.Public_static_method_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named :
                         ts.Diagnostics.Public_static_method_0_of_exported_class_has_or_is_using_name_1_from_private_module_2 :
                     ts.Diagnostics.Public_static_method_0_of_exported_class_has_or_is_using_private_name_1;
             }
-            else if (node.parent.kind === 253 /* ClassDeclaration */) {
+            else if (node.parent.kind === 255 /* ClassDeclaration */) {
                 return symbolAccessibilityResult.errorModuleName ?
                     symbolAccessibilityResult.accessibility === 2 /* CannotBeNamed */ ?
                         ts.Diagnostics.Public_method_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named :
@@ -100848,7 +103001,7 @@
             return ts.Debug.assertNever(node, "Attempted to set a declaration diagnostic context for unhandled node kind: " + ts.SyntaxKind[node.kind]);
         }
         function getVariableDeclarationTypeVisibilityDiagnosticMessage(symbolAccessibilityResult) {
-            if (node.kind === 250 /* VariableDeclaration */ || node.kind === 199 /* BindingElement */) {
+            if (node.kind === 252 /* VariableDeclaration */ || node.kind === 201 /* BindingElement */) {
                 return symbolAccessibilityResult.errorModuleName ?
                     symbolAccessibilityResult.accessibility === 2 /* CannotBeNamed */ ?
                         ts.Diagnostics.Exported_variable_0_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named :
@@ -100857,17 +103010,17 @@
             }
             // This check is to ensure we don't report error on constructor parameter property as that error would be reported during parameter emit
             // The only exception here is if the constructor was marked as private. we are not emitting the constructor parameters at all.
-            else if (node.kind === 164 /* PropertyDeclaration */ || node.kind === 202 /* PropertyAccessExpression */ || node.kind === 163 /* PropertySignature */ ||
-                (node.kind === 161 /* Parameter */ && ts.hasSyntacticModifier(node.parent, 8 /* Private */))) {
+            else if (node.kind === 165 /* PropertyDeclaration */ || node.kind === 204 /* PropertyAccessExpression */ || node.kind === 164 /* PropertySignature */ ||
+                (node.kind === 162 /* Parameter */ && ts.hasSyntacticModifier(node.parent, 8 /* Private */))) {
                 // TODO(jfreeman): Deal with computed properties in error reporting.
-                if (ts.hasSyntacticModifier(node, 32 /* Static */)) {
+                if (ts.isStatic(node)) {
                     return symbolAccessibilityResult.errorModuleName ?
                         symbolAccessibilityResult.accessibility === 2 /* CannotBeNamed */ ?
                             ts.Diagnostics.Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named :
                             ts.Diagnostics.Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2 :
                         ts.Diagnostics.Public_static_property_0_of_exported_class_has_or_is_using_private_name_1;
                 }
-                else if (node.parent.kind === 253 /* ClassDeclaration */ || node.kind === 161 /* Parameter */) {
+                else if (node.parent.kind === 255 /* ClassDeclaration */ || node.kind === 162 /* Parameter */) {
                     return symbolAccessibilityResult.errorModuleName ?
                         symbolAccessibilityResult.accessibility === 2 /* CannotBeNamed */ ?
                             ts.Diagnostics.Public_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named :
@@ -100892,10 +103045,10 @@
         }
         function getAccessorDeclarationTypeVisibilityError(symbolAccessibilityResult) {
             var diagnosticMessage;
-            if (node.kind === 169 /* SetAccessor */) {
+            if (node.kind === 171 /* SetAccessor */) {
                 // Getters can infer the return type from the returned expression, but setters cannot, so the
                 // "_from_external_module_1_but_cannot_be_named" case cannot occur.
-                if (ts.hasSyntacticModifier(node, 32 /* Static */)) {
+                if (ts.isStatic(node)) {
                     diagnosticMessage = symbolAccessibilityResult.errorModuleName ?
                         ts.Diagnostics.Parameter_type_of_public_static_setter_0_from_exported_class_has_or_is_using_name_1_from_private_module_2 :
                         ts.Diagnostics.Parameter_type_of_public_static_setter_0_from_exported_class_has_or_is_using_private_name_1;
@@ -100907,7 +103060,7 @@
                 }
             }
             else {
-                if (ts.hasSyntacticModifier(node, 32 /* Static */)) {
+                if (ts.isStatic(node)) {
                     diagnosticMessage = symbolAccessibilityResult.errorModuleName ?
                         symbolAccessibilityResult.accessibility === 2 /* CannotBeNamed */ ?
                             ts.Diagnostics.Return_type_of_public_static_getter_0_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named :
@@ -100931,34 +103084,34 @@
         function getReturnTypeVisibilityError(symbolAccessibilityResult) {
             var diagnosticMessage;
             switch (node.kind) {
-                case 171 /* ConstructSignature */:
+                case 173 /* ConstructSignature */:
                     // Interfaces cannot have return types that cannot be named
                     diagnosticMessage = symbolAccessibilityResult.errorModuleName ?
                         ts.Diagnostics.Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1 :
                         ts.Diagnostics.Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_0;
                     break;
-                case 170 /* CallSignature */:
+                case 172 /* CallSignature */:
                     // Interfaces cannot have return types that cannot be named
                     diagnosticMessage = symbolAccessibilityResult.errorModuleName ?
                         ts.Diagnostics.Return_type_of_call_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1 :
                         ts.Diagnostics.Return_type_of_call_signature_from_exported_interface_has_or_is_using_private_name_0;
                     break;
-                case 172 /* IndexSignature */:
+                case 174 /* IndexSignature */:
                     // Interfaces cannot have return types that cannot be named
                     diagnosticMessage = symbolAccessibilityResult.errorModuleName ?
                         ts.Diagnostics.Return_type_of_index_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1 :
                         ts.Diagnostics.Return_type_of_index_signature_from_exported_interface_has_or_is_using_private_name_0;
                     break;
-                case 166 /* MethodDeclaration */:
-                case 165 /* MethodSignature */:
-                    if (ts.hasSyntacticModifier(node, 32 /* Static */)) {
+                case 167 /* MethodDeclaration */:
+                case 166 /* MethodSignature */:
+                    if (ts.isStatic(node)) {
                         diagnosticMessage = symbolAccessibilityResult.errorModuleName ?
                             symbolAccessibilityResult.accessibility === 2 /* CannotBeNamed */ ?
                                 ts.Diagnostics.Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named :
                                 ts.Diagnostics.Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_private_module_1 :
                             ts.Diagnostics.Return_type_of_public_static_method_from_exported_class_has_or_is_using_private_name_0;
                     }
-                    else if (node.parent.kind === 253 /* ClassDeclaration */) {
+                    else if (node.parent.kind === 255 /* ClassDeclaration */) {
                         diagnosticMessage = symbolAccessibilityResult.errorModuleName ?
                             symbolAccessibilityResult.accessibility === 2 /* CannotBeNamed */ ?
                                 ts.Diagnostics.Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named :
@@ -100972,7 +103125,7 @@
                             ts.Diagnostics.Return_type_of_method_from_exported_interface_has_or_is_using_private_name_0;
                     }
                     break;
-                case 252 /* FunctionDeclaration */:
+                case 254 /* FunctionDeclaration */:
                     diagnosticMessage = symbolAccessibilityResult.errorModuleName ?
                         symbolAccessibilityResult.accessibility === 2 /* CannotBeNamed */ ?
                             ts.Diagnostics.Return_type_of_exported_function_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named :
@@ -100997,38 +103150,38 @@
         }
         function getParameterDeclarationTypeVisibilityDiagnosticMessage(symbolAccessibilityResult) {
             switch (node.parent.kind) {
-                case 167 /* Constructor */:
+                case 169 /* Constructor */:
                     return symbolAccessibilityResult.errorModuleName ?
                         symbolAccessibilityResult.accessibility === 2 /* CannotBeNamed */ ?
                             ts.Diagnostics.Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named :
                             ts.Diagnostics.Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_private_module_2 :
                         ts.Diagnostics.Parameter_0_of_constructor_from_exported_class_has_or_is_using_private_name_1;
-                case 171 /* ConstructSignature */:
-                case 176 /* ConstructorType */:
+                case 173 /* ConstructSignature */:
+                case 178 /* ConstructorType */:
                     // Interfaces cannot have parameter types that cannot be named
                     return symbolAccessibilityResult.errorModuleName ?
                         ts.Diagnostics.Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2 :
                         ts.Diagnostics.Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1;
-                case 170 /* CallSignature */:
+                case 172 /* CallSignature */:
                     // Interfaces cannot have parameter types that cannot be named
                     return symbolAccessibilityResult.errorModuleName ?
                         ts.Diagnostics.Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2 :
                         ts.Diagnostics.Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1;
-                case 172 /* IndexSignature */:
+                case 174 /* IndexSignature */:
                     // Interfaces cannot have parameter types that cannot be named
                     return symbolAccessibilityResult.errorModuleName ?
                         ts.Diagnostics.Parameter_0_of_index_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2 :
                         ts.Diagnostics.Parameter_0_of_index_signature_from_exported_interface_has_or_is_using_private_name_1;
-                case 166 /* MethodDeclaration */:
-                case 165 /* MethodSignature */:
-                    if (ts.hasSyntacticModifier(node.parent, 32 /* Static */)) {
+                case 167 /* MethodDeclaration */:
+                case 166 /* MethodSignature */:
+                    if (ts.isStatic(node.parent)) {
                         return symbolAccessibilityResult.errorModuleName ?
                             symbolAccessibilityResult.accessibility === 2 /* CannotBeNamed */ ?
                                 ts.Diagnostics.Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named :
                                 ts.Diagnostics.Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_private_module_2 :
                             ts.Diagnostics.Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1;
                     }
-                    else if (node.parent.parent.kind === 253 /* ClassDeclaration */) {
+                    else if (node.parent.parent.kind === 255 /* ClassDeclaration */) {
                         return symbolAccessibilityResult.errorModuleName ?
                             symbolAccessibilityResult.accessibility === 2 /* CannotBeNamed */ ?
                                 ts.Diagnostics.Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named :
@@ -101041,15 +103194,15 @@
                             ts.Diagnostics.Parameter_0_of_method_from_exported_interface_has_or_is_using_name_1_from_private_module_2 :
                             ts.Diagnostics.Parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1;
                     }
-                case 252 /* FunctionDeclaration */:
-                case 175 /* FunctionType */:
+                case 254 /* FunctionDeclaration */:
+                case 177 /* FunctionType */:
                     return symbolAccessibilityResult.errorModuleName ?
                         symbolAccessibilityResult.accessibility === 2 /* CannotBeNamed */ ?
                             ts.Diagnostics.Parameter_0_of_exported_function_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named :
                             ts.Diagnostics.Parameter_0_of_exported_function_has_or_is_using_name_1_from_private_module_2 :
                         ts.Diagnostics.Parameter_0_of_exported_function_has_or_is_using_private_name_1;
-                case 169 /* SetAccessor */:
-                case 168 /* GetAccessor */:
+                case 171 /* SetAccessor */:
+                case 170 /* GetAccessor */:
                     return symbolAccessibilityResult.errorModuleName ?
                         symbolAccessibilityResult.accessibility === 2 /* CannotBeNamed */ ?
                             ts.Diagnostics.Parameter_0_of_accessor_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named :
@@ -101063,39 +103216,39 @@
             // Type parameter constraints are named by user so we should always be able to name it
             var diagnosticMessage;
             switch (node.parent.kind) {
-                case 253 /* ClassDeclaration */:
+                case 255 /* ClassDeclaration */:
                     diagnosticMessage = ts.Diagnostics.Type_parameter_0_of_exported_class_has_or_is_using_private_name_1;
                     break;
-                case 254 /* InterfaceDeclaration */:
+                case 256 /* InterfaceDeclaration */:
                     diagnosticMessage = ts.Diagnostics.Type_parameter_0_of_exported_interface_has_or_is_using_private_name_1;
                     break;
-                case 191 /* MappedType */:
+                case 193 /* MappedType */:
                     diagnosticMessage = ts.Diagnostics.Type_parameter_0_of_exported_mapped_object_type_is_using_private_name_1;
                     break;
-                case 176 /* ConstructorType */:
-                case 171 /* ConstructSignature */:
+                case 178 /* ConstructorType */:
+                case 173 /* ConstructSignature */:
                     diagnosticMessage = ts.Diagnostics.Type_parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1;
                     break;
-                case 170 /* CallSignature */:
+                case 172 /* CallSignature */:
                     diagnosticMessage = ts.Diagnostics.Type_parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1;
                     break;
-                case 166 /* MethodDeclaration */:
-                case 165 /* MethodSignature */:
-                    if (ts.hasSyntacticModifier(node.parent, 32 /* Static */)) {
+                case 167 /* MethodDeclaration */:
+                case 166 /* MethodSignature */:
+                    if (ts.isStatic(node.parent)) {
                         diagnosticMessage = ts.Diagnostics.Type_parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1;
                     }
-                    else if (node.parent.parent.kind === 253 /* ClassDeclaration */) {
+                    else if (node.parent.parent.kind === 255 /* ClassDeclaration */) {
                         diagnosticMessage = ts.Diagnostics.Type_parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1;
                     }
                     else {
                         diagnosticMessage = ts.Diagnostics.Type_parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1;
                     }
                     break;
-                case 175 /* FunctionType */:
-                case 252 /* FunctionDeclaration */:
+                case 177 /* FunctionType */:
+                case 254 /* FunctionDeclaration */:
                     diagnosticMessage = ts.Diagnostics.Type_parameter_0_of_exported_function_has_or_is_using_private_name_1;
                     break;
-                case 255 /* TypeAliasDeclaration */:
+                case 257 /* TypeAliasDeclaration */:
                     diagnosticMessage = ts.Diagnostics.Type_parameter_0_of_exported_type_alias_has_or_is_using_private_name_1;
                     break;
                 default:
@@ -101112,7 +103265,7 @@
             // Heritage clause is written by user so it can always be named
             if (ts.isClassDeclaration(node.parent.parent)) {
                 // Class or Interface implemented/extended is inaccessible
-                diagnosticMessage = ts.isHeritageClause(node.parent) && node.parent.token === 116 /* ImplementsKeyword */ ?
+                diagnosticMessage = ts.isHeritageClause(node.parent) && node.parent.token === 117 /* ImplementsKeyword */ ?
                     ts.Diagnostics.Implements_clause_of_exported_class_0_has_or_is_using_private_name_1 :
                     node.parent.parent.name ? ts.Diagnostics.extends_clause_of_exported_class_0_has_or_is_using_private_name_1 :
                         ts.Diagnostics.extends_clause_of_exported_class_has_or_is_using_private_name_0;
@@ -101161,7 +103314,7 @@
     }
     function isInternalDeclaration(node, currentSourceFile) {
         var parseTreeNode = ts.getParseTreeNode(node);
-        if (parseTreeNode && parseTreeNode.kind === 161 /* Parameter */) {
+        if (parseTreeNode && parseTreeNode.kind === 162 /* Parameter */) {
             var paramIdx = parseTreeNode.parent.parameters.indexOf(parseTreeNode);
             var previousSibling = paramIdx > 0 ? parseTreeNode.parent.parameters[paramIdx - 1] : undefined;
             var text = currentSourceFile.text;
@@ -101220,7 +103373,8 @@
             moduleResolverHost: host,
             trackReferencedAmbientModule: trackReferencedAmbientModule,
             trackExternalModuleSymbolOfImportTypeNode: trackExternalModuleSymbolOfImportTypeNode,
-            reportNonlocalAugmentation: reportNonlocalAugmentation
+            reportNonlocalAugmentation: reportNonlocalAugmentation,
+            reportNonSerializableProperty: reportNonSerializableProperty
         };
         var errorNameNode;
         var errorFallbackNode;
@@ -101278,8 +103432,10 @@
                     else {
                         context.addDiagnostic(ts.createDiagnosticForNode(symbolAccessibilityResult.errorNode || errorInfo.errorNode, errorInfo.diagnosticMessage, symbolAccessibilityResult.errorSymbolName, symbolAccessibilityResult.errorModuleName));
                     }
+                    return true;
                 }
             }
+            return false;
         }
         function trackExternalModuleSymbolOfImportTypeNode(symbol) {
             if (!isBundledEmit) {
@@ -101288,33 +103444,40 @@
         }
         function trackSymbol(symbol, enclosingDeclaration, meaning) {
             if (symbol.flags & 262144 /* TypeParameter */)
-                return;
-            handleSymbolAccessibilityError(resolver.isSymbolAccessible(symbol, enclosingDeclaration, meaning, /*shouldComputeAliasesToMakeVisible*/ true));
+                return false;
+            var issuedDiagnostic = handleSymbolAccessibilityError(resolver.isSymbolAccessible(symbol, enclosingDeclaration, meaning, /*shouldComputeAliasesToMakeVisible*/ true));
             recordTypeReferenceDirectivesIfNecessary(resolver.getTypeReferenceDirectivesForSymbol(symbol, meaning));
+            return issuedDiagnostic;
         }
         function reportPrivateInBaseOfClassExpression(propertyName) {
             if (errorNameNode || errorFallbackNode) {
                 context.addDiagnostic(ts.createDiagnosticForNode((errorNameNode || errorFallbackNode), ts.Diagnostics.Property_0_of_exported_class_expression_may_not_be_private_or_protected, propertyName));
             }
         }
+        function errorDeclarationNameWithFallback() {
+            return errorNameNode ? ts.declarationNameToString(errorNameNode) :
+                errorFallbackNode && ts.getNameOfDeclaration(errorFallbackNode) ? ts.declarationNameToString(ts.getNameOfDeclaration(errorFallbackNode)) :
+                    errorFallbackNode && ts.isExportAssignment(errorFallbackNode) ? errorFallbackNode.isExportEquals ? "export=" : "default" :
+                        "(Missing)"; // same fallback declarationNameToString uses when node is zero-width (ie, nameless)
+        }
         function reportInaccessibleUniqueSymbolError() {
-            if (errorNameNode) {
-                context.addDiagnostic(ts.createDiagnosticForNode(errorNameNode, ts.Diagnostics.The_inferred_type_of_0_references_an_inaccessible_1_type_A_type_annotation_is_necessary, ts.declarationNameToString(errorNameNode), "unique symbol"));
+            if (errorNameNode || errorFallbackNode) {
+                context.addDiagnostic(ts.createDiagnosticForNode((errorNameNode || errorFallbackNode), ts.Diagnostics.The_inferred_type_of_0_references_an_inaccessible_1_type_A_type_annotation_is_necessary, errorDeclarationNameWithFallback(), "unique symbol"));
             }
         }
         function reportCyclicStructureError() {
-            if (errorNameNode) {
-                context.addDiagnostic(ts.createDiagnosticForNode(errorNameNode, ts.Diagnostics.The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialized_A_type_annotation_is_necessary, ts.declarationNameToString(errorNameNode)));
+            if (errorNameNode || errorFallbackNode) {
+                context.addDiagnostic(ts.createDiagnosticForNode((errorNameNode || errorFallbackNode), ts.Diagnostics.The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialized_A_type_annotation_is_necessary, errorDeclarationNameWithFallback()));
             }
         }
         function reportInaccessibleThisError() {
-            if (errorNameNode) {
-                context.addDiagnostic(ts.createDiagnosticForNode(errorNameNode, ts.Diagnostics.The_inferred_type_of_0_references_an_inaccessible_1_type_A_type_annotation_is_necessary, ts.declarationNameToString(errorNameNode), "this"));
+            if (errorNameNode || errorFallbackNode) {
+                context.addDiagnostic(ts.createDiagnosticForNode((errorNameNode || errorFallbackNode), ts.Diagnostics.The_inferred_type_of_0_references_an_inaccessible_1_type_A_type_annotation_is_necessary, errorDeclarationNameWithFallback(), "this"));
             }
         }
         function reportLikelyUnsafeImportRequiredError(specifier) {
-            if (errorNameNode) {
-                context.addDiagnostic(ts.createDiagnosticForNode(errorNameNode, ts.Diagnostics.The_inferred_type_of_0_cannot_be_named_without_a_reference_to_1_This_is_likely_not_portable_A_type_annotation_is_necessary, ts.declarationNameToString(errorNameNode), specifier));
+            if (errorNameNode || errorFallbackNode) {
+                context.addDiagnostic(ts.createDiagnosticForNode((errorNameNode || errorFallbackNode), ts.Diagnostics.The_inferred_type_of_0_cannot_be_named_without_a_reference_to_1_This_is_likely_not_portable_A_type_annotation_is_necessary, errorDeclarationNameWithFallback(), specifier));
             }
         }
         function reportTruncationError() {
@@ -101333,6 +103496,11 @@
                 }
             }
         }
+        function reportNonSerializableProperty(propertyName) {
+            if (errorNameNode || errorFallbackNode) {
+                context.addDiagnostic(ts.createDiagnosticForNode((errorNameNode || errorFallbackNode), ts.Diagnostics.The_type_of_this_node_cannot_be_serialized_because_its_property_0_cannot_be_serialized, propertyName));
+            }
+        }
         function transformDeclarationsForJS(sourceFile, bundled) {
             var oldDiag = getSymbolAccessibilityDiagnostic;
             getSymbolAccessibilityDiagnostic = function (s) { return (s.errorNode && ts.canProduceDiagnostics(s.errorNode) ? ts.createGetSymbolAccessibilityDiagnosticForNode(s.errorNode)(s) : ({
@@ -101346,10 +103514,10 @@
             return result;
         }
         function transformRoot(node) {
-            if (node.kind === 298 /* SourceFile */ && node.isDeclarationFile) {
+            if (node.kind === 300 /* SourceFile */ && node.isDeclarationFile) {
                 return node;
             }
-            if (node.kind === 299 /* Bundle */) {
+            if (node.kind === 301 /* Bundle */) {
                 isBundledEmit = true;
                 refs = new ts.Map();
                 libs = new ts.Map();
@@ -101372,14 +103540,14 @@
                         resultHasExternalModuleIndicator = false; // unused in external module bundle emit (all external modules are within module blocks, therefore are known to be modules)
                         needsDeclare = false;
                         var statements = ts.isSourceFileJS(sourceFile) ? factory.createNodeArray(transformDeclarationsForJS(sourceFile, /*bundled*/ true)) : ts.visitNodes(sourceFile.statements, visitDeclarationStatements);
-                        var newFile = factory.updateSourceFile(sourceFile, [factory.createModuleDeclaration([], [factory.createModifier(133 /* DeclareKeyword */)], factory.createStringLiteral(ts.getResolvedExternalModuleName(context.getEmitHost(), sourceFile)), factory.createModuleBlock(ts.setTextRange(factory.createNodeArray(transformAndReplaceLatePaintedStatements(statements)), sourceFile.statements)))], /*isDeclarationFile*/ true, /*referencedFiles*/ [], /*typeReferences*/ [], /*hasNoDefaultLib*/ false, /*libReferences*/ []);
+                        var newFile = factory.updateSourceFile(sourceFile, [factory.createModuleDeclaration([], [factory.createModifier(134 /* DeclareKeyword */)], factory.createStringLiteral(ts.getResolvedExternalModuleName(context.getEmitHost(), sourceFile)), factory.createModuleBlock(ts.setTextRange(factory.createNodeArray(transformAndReplaceLatePaintedStatements(statements)), sourceFile.statements)))], /*isDeclarationFile*/ true, /*referencedFiles*/ [], /*typeReferences*/ [], /*hasNoDefaultLib*/ false, /*libReferences*/ []);
                         return newFile;
                     }
                     needsDeclare = true;
                     var updated = ts.isSourceFileJS(sourceFile) ? factory.createNodeArray(transformDeclarationsForJS(sourceFile)) : ts.visitNodes(sourceFile.statements, visitDeclarationStatements);
                     return factory.updateSourceFile(sourceFile, transformAndReplaceLatePaintedStatements(updated), /*isDeclarationFile*/ true, /*referencedFiles*/ [], /*typeReferences*/ [], /*hasNoDefaultLib*/ false, /*libReferences*/ []);
                 }), ts.mapDefined(node.prepends, function (prepend) {
-                    if (prepend.kind === 301 /* InputFiles */) {
+                    if (prepend.kind === 303 /* InputFiles */) {
                         var sourceFile = ts.createUnparsedSourceFile(prepend, "dts", stripInternal);
                         hasNoDefaultLib_1 = hasNoDefaultLib_1 || !!sourceFile.hasNoDefaultLib;
                         collectReferences(sourceFile, refs);
@@ -101428,7 +103596,7 @@
                 refs.forEach(referenceVisitor);
                 emittedImports = ts.filter(combinedStatements, ts.isAnyImportSyntax);
                 if (ts.isExternalModule(node) && (!resultHasExternalModuleIndicator || (needsScopeFixMarker && !resultHasScopeMarker))) {
-                    combinedStatements = ts.setTextRange(factory.createNodeArray(__spreadArray(__spreadArray([], combinedStatements), [ts.createEmptyExports(factory)])), combinedStatements);
+                    combinedStatements = ts.setTextRange(factory.createNodeArray(__spreadArray(__spreadArray([], combinedStatements, true), [ts.createEmptyExports(factory)], false)), combinedStatements);
                 }
             }
             var updated = factory.updateSourceFile(node, combinedStatements, /*isDeclarationFile*/ true, references, getFileReferencesForUsedTypeReferences(), node.hasNoDefaultLib, getLibReferences());
@@ -101471,8 +103639,7 @@
                         declFileName = paths.declarationFilePath || paths.jsFilePath || file.fileName;
                     }
                     if (declFileName) {
-                        var specifier = ts.moduleSpecifiers.getModuleSpecifier(options, currentSourceFile, ts.toPath(outputFilePath, host.getCurrentDirectory(), host.getCanonicalFileName), ts.toPath(declFileName, host.getCurrentDirectory(), host.getCanonicalFileName), host, 
-                        /*preferences*/ undefined);
+                        var specifier = ts.moduleSpecifiers.getModuleSpecifier(options, currentSourceFile, ts.toPath(outputFilePath, host.getCurrentDirectory(), host.getCanonicalFileName), ts.toPath(declFileName, host.getCurrentDirectory(), host.getCanonicalFileName), host);
                         if (!ts.pathIsRelative(specifier)) {
                             // If some compiler option/symlink/whatever allows access to the file containing the ambient module declaration
                             // via a non-relative name, emit a type reference directive to that non-relative name, rather than
@@ -101516,11 +103683,11 @@
             return ret;
         }
         function filterBindingPatternInitializers(name) {
-            if (name.kind === 78 /* Identifier */) {
+            if (name.kind === 79 /* Identifier */) {
                 return name;
             }
             else {
-                if (name.kind === 198 /* ArrayBindingPattern */) {
+                if (name.kind === 200 /* ArrayBindingPattern */) {
                     return factory.updateArrayBindingPattern(name, ts.visitNodes(name.elements, visitBindingElement));
                 }
                 else {
@@ -101528,7 +103695,7 @@
                 }
             }
             function visitBindingElement(elem) {
-                if (elem.kind === 223 /* OmittedExpression */) {
+                if (elem.kind === 225 /* OmittedExpression */) {
                     return elem;
                 }
                 return factory.updateBindingElement(elem, elem.dotDotDotToken, elem.propertyName, filterBindingPatternInitializers(elem.name), shouldPrintWithInitializer(elem) ? elem.initializer : undefined);
@@ -101566,19 +103733,19 @@
                 // Literal const declarations will have an initializer ensured rather than a type
                 return;
             }
-            var shouldUseResolverType = node.kind === 161 /* Parameter */ &&
+            var shouldUseResolverType = node.kind === 162 /* Parameter */ &&
                 (resolver.isRequiredInitializedParameter(node) ||
                     resolver.isOptionalUninitializedParameterProperty(node));
             if (type && !shouldUseResolverType) {
                 return ts.visitNode(type, visitDeclarationSubtree);
             }
             if (!ts.getParseTreeNode(node)) {
-                return type ? ts.visitNode(type, visitDeclarationSubtree) : factory.createKeywordTypeNode(128 /* AnyKeyword */);
+                return type ? ts.visitNode(type, visitDeclarationSubtree) : factory.createKeywordTypeNode(129 /* AnyKeyword */);
             }
-            if (node.kind === 169 /* SetAccessor */) {
+            if (node.kind === 171 /* SetAccessor */) {
                 // Set accessors with no associated type node (from it's param or get accessor return) are `any` since they are never contextually typed right now
                 // (The inferred type here will be void, but the old declaration emitter printed `any`, so this replicates that)
-                return factory.createKeywordTypeNode(128 /* AnyKeyword */);
+                return factory.createKeywordTypeNode(129 /* AnyKeyword */);
             }
             errorNameNode = node.name;
             var oldDiag;
@@ -101586,12 +103753,12 @@
                 oldDiag = getSymbolAccessibilityDiagnostic;
                 getSymbolAccessibilityDiagnostic = ts.createGetSymbolAccessibilityDiagnosticForNode(node);
             }
-            if (node.kind === 250 /* VariableDeclaration */ || node.kind === 199 /* BindingElement */) {
+            if (node.kind === 252 /* VariableDeclaration */ || node.kind === 201 /* BindingElement */) {
                 return cleanup(resolver.createTypeOfDeclaration(node, enclosingDeclaration, declarationEmitNodeBuilderFlags, symbolTracker));
             }
-            if (node.kind === 161 /* Parameter */
-                || node.kind === 164 /* PropertyDeclaration */
-                || node.kind === 163 /* PropertySignature */) {
+            if (node.kind === 162 /* Parameter */
+                || node.kind === 165 /* PropertyDeclaration */
+                || node.kind === 164 /* PropertySignature */) {
                 if (!node.initializer)
                     return cleanup(resolver.createTypeOfDeclaration(node, enclosingDeclaration, declarationEmitNodeBuilderFlags, symbolTracker, shouldUseResolverType));
                 return cleanup(resolver.createTypeOfDeclaration(node, enclosingDeclaration, declarationEmitNodeBuilderFlags, symbolTracker, shouldUseResolverType) || resolver.createTypeOfExpression(node.initializer, enclosingDeclaration, declarationEmitNodeBuilderFlags, symbolTracker));
@@ -101602,30 +103769,41 @@
                 if (!suppressNewDiagnosticContexts) {
                     getSymbolAccessibilityDiagnostic = oldDiag;
                 }
-                return returnValue || factory.createKeywordTypeNode(128 /* AnyKeyword */);
+                return returnValue || factory.createKeywordTypeNode(129 /* AnyKeyword */);
             }
         }
         function isDeclarationAndNotVisible(node) {
             node = ts.getParseTreeNode(node);
             switch (node.kind) {
-                case 252 /* FunctionDeclaration */:
-                case 257 /* ModuleDeclaration */:
-                case 254 /* InterfaceDeclaration */:
-                case 253 /* ClassDeclaration */:
-                case 255 /* TypeAliasDeclaration */:
-                case 256 /* EnumDeclaration */:
+                case 254 /* FunctionDeclaration */:
+                case 259 /* ModuleDeclaration */:
+                case 256 /* InterfaceDeclaration */:
+                case 255 /* ClassDeclaration */:
+                case 257 /* TypeAliasDeclaration */:
+                case 258 /* EnumDeclaration */:
                     return !resolver.isDeclarationVisible(node);
                 // The following should be doing their own visibility checks based on filtering their members
-                case 250 /* VariableDeclaration */:
+                case 252 /* VariableDeclaration */:
                     return !getBindingNameVisible(node);
-                case 261 /* ImportEqualsDeclaration */:
-                case 262 /* ImportDeclaration */:
-                case 268 /* ExportDeclaration */:
-                case 267 /* ExportAssignment */:
+                case 263 /* ImportEqualsDeclaration */:
+                case 264 /* ImportDeclaration */:
+                case 270 /* ExportDeclaration */:
+                case 269 /* ExportAssignment */:
                     return false;
+                case 168 /* ClassStaticBlockDeclaration */:
+                    return true;
             }
             return false;
         }
+        // If the ExpandoFunctionDeclaration have multiple overloads, then we only need to emit properties for the last one.
+        function shouldEmitFunctionProperties(input) {
+            var _a;
+            if (input.body) {
+                return true;
+            }
+            var overloadSignatures = (_a = input.symbol.declarations) === null || _a === void 0 ? void 0 : _a.filter(function (decl) { return ts.isFunctionDeclaration(decl) && !decl.body; });
+            return !overloadSignatures || overloadSignatures.indexOf(input) === overloadSignatures.length - 1;
+        }
         function getBindingNameVisible(elem) {
             if (ts.isOmittedExpression(elem)) {
                 return false;
@@ -101702,7 +103880,7 @@
         function rewriteModuleSpecifier(parent, input) {
             if (!input)
                 return undefined; // TODO: GH#18217
-            resultHasExternalModuleIndicator = resultHasExternalModuleIndicator || (parent.kind !== 257 /* ModuleDeclaration */ && parent.kind !== 196 /* ImportType */);
+            resultHasExternalModuleIndicator = resultHasExternalModuleIndicator || (parent.kind !== 259 /* ModuleDeclaration */ && parent.kind !== 198 /* ImportType */);
             if (ts.isStringLiteralLike(input)) {
                 if (isBundledEmit) {
                     var newName = ts.getExternalModuleNameFromDeclaration(context.getEmitHost(), resolver, parent);
@@ -101722,7 +103900,7 @@
         function transformImportEqualsDeclaration(decl) {
             if (!resolver.isDeclarationVisible(decl))
                 return;
-            if (decl.moduleReference.kind === 273 /* ExternalModuleReference */) {
+            if (decl.moduleReference.kind === 275 /* ExternalModuleReference */) {
                 // Rewrite external module names if necessary
                 var specifier = ts.getExternalModuleImportEqualsDeclarationExpression(decl);
                 return factory.updateImportEqualsDeclaration(decl, 
@@ -101749,7 +103927,7 @@
                 return visibleDefaultBinding && factory.updateImportDeclaration(decl, /*decorators*/ undefined, decl.modifiers, factory.updateImportClause(decl.importClause, decl.importClause.isTypeOnly, visibleDefaultBinding, 
                 /*namedBindings*/ undefined), rewriteModuleSpecifier(decl, decl.moduleSpecifier));
             }
-            if (decl.importClause.namedBindings.kind === 264 /* NamespaceImport */) {
+            if (decl.importClause.namedBindings.kind === 266 /* NamespaceImport */) {
                 // Namespace import (optionally with visible default)
                 var namedBindings = resolver.isDeclarationVisible(decl.importClause.namedBindings) ? decl.importClause.namedBindings : /*namedBindings*/ undefined;
                 return visibleDefaultBinding || namedBindings ? factory.updateImportDeclaration(decl, /*decorators*/ undefined, decl.modifiers, factory.updateImportClause(decl.importClause, decl.importClause.isTypeOnly, visibleDefaultBinding, namedBindings), rewriteModuleSpecifier(decl, decl.moduleSpecifier)) : undefined;
@@ -101844,7 +104022,7 @@
             // We'd see a TDZ violation at runtime
             var canProduceDiagnostic = ts.canProduceDiagnostics(input);
             var oldWithinObjectLiteralType = suppressNewDiagnosticContexts;
-            var shouldEnterSuppressNewDiagnosticsContextContext = ((input.kind === 178 /* TypeLiteral */ || input.kind === 191 /* MappedType */) && input.parent.kind !== 255 /* TypeAliasDeclaration */);
+            var shouldEnterSuppressNewDiagnosticsContextContext = ((input.kind === 180 /* TypeLiteral */ || input.kind === 193 /* MappedType */) && input.parent.kind !== 257 /* TypeAliasDeclaration */);
             // Emit methods which are private as properties with no type information
             if (ts.isMethodDeclaration(input) || ts.isMethodSignature(input)) {
                 if (ts.hasEffectiveModifier(input, 8 /* Private */)) {
@@ -101865,21 +104043,21 @@
             }
             if (isProcessedComponent(input)) {
                 switch (input.kind) {
-                    case 224 /* ExpressionWithTypeArguments */: {
+                    case 226 /* ExpressionWithTypeArguments */: {
                         if ((ts.isEntityName(input.expression) || ts.isEntityNameExpression(input.expression))) {
                             checkEntityNameVisibility(input.expression, enclosingDeclaration);
                         }
                         var node = ts.visitEachChild(input, visitDeclarationSubtree, context);
                         return cleanup(factory.updateExpressionWithTypeArguments(node, node.expression, node.typeArguments));
                     }
-                    case 174 /* TypeReference */: {
+                    case 176 /* TypeReference */: {
                         checkEntityNameVisibility(input.typeName, enclosingDeclaration);
                         var node = ts.visitEachChild(input, visitDeclarationSubtree, context);
                         return cleanup(factory.updateTypeReferenceNode(node, node.typeName, node.typeArguments));
                     }
-                    case 171 /* ConstructSignature */:
+                    case 173 /* ConstructSignature */:
                         return cleanup(factory.updateConstructSignature(input, ensureTypeParams(input, input.typeParameters), updateParamsList(input, input.parameters), ensureType(input, input.type)));
-                    case 167 /* Constructor */: {
+                    case 169 /* Constructor */: {
                         // A constructor declaration may not have a type annotation
                         var ctor = factory.createConstructorDeclaration(
                         /*decorators*/ undefined, 
@@ -101887,7 +104065,7 @@
                         /*body*/ undefined);
                         return cleanup(ctor);
                     }
-                    case 166 /* MethodDeclaration */: {
+                    case 167 /* MethodDeclaration */: {
                         if (ts.isPrivateIdentifier(input.name)) {
                             return cleanup(/*returnValue*/ undefined);
                         }
@@ -101897,7 +104075,7 @@
                         /*body*/ undefined);
                         return cleanup(sig);
                     }
-                    case 168 /* GetAccessor */: {
+                    case 170 /* GetAccessor */: {
                         if (ts.isPrivateIdentifier(input.name)) {
                             return cleanup(/*returnValue*/ undefined);
                         }
@@ -101906,7 +104084,7 @@
                         /*decorators*/ undefined, ensureModifiers(input), input.name, updateAccessorParamsList(input, ts.hasEffectiveModifier(input, 8 /* Private */)), ensureType(input, accessorType), 
                         /*body*/ undefined));
                     }
-                    case 169 /* SetAccessor */: {
+                    case 171 /* SetAccessor */: {
                         if (ts.isPrivateIdentifier(input.name)) {
                             return cleanup(/*returnValue*/ undefined);
                         }
@@ -101914,31 +104092,31 @@
                         /*decorators*/ undefined, ensureModifiers(input), input.name, updateAccessorParamsList(input, ts.hasEffectiveModifier(input, 8 /* Private */)), 
                         /*body*/ undefined));
                     }
-                    case 164 /* PropertyDeclaration */:
+                    case 165 /* PropertyDeclaration */:
                         if (ts.isPrivateIdentifier(input.name)) {
                             return cleanup(/*returnValue*/ undefined);
                         }
                         return cleanup(factory.updatePropertyDeclaration(input, 
                         /*decorators*/ undefined, ensureModifiers(input), input.name, input.questionToken, ensureType(input, input.type), ensureNoInitializer(input)));
-                    case 163 /* PropertySignature */:
+                    case 164 /* PropertySignature */:
                         if (ts.isPrivateIdentifier(input.name)) {
                             return cleanup(/*returnValue*/ undefined);
                         }
                         return cleanup(factory.updatePropertySignature(input, ensureModifiers(input), input.name, input.questionToken, ensureType(input, input.type)));
-                    case 165 /* MethodSignature */: {
+                    case 166 /* MethodSignature */: {
                         if (ts.isPrivateIdentifier(input.name)) {
                             return cleanup(/*returnValue*/ undefined);
                         }
                         return cleanup(factory.updateMethodSignature(input, ensureModifiers(input), input.name, input.questionToken, ensureTypeParams(input, input.typeParameters), updateParamsList(input, input.parameters), ensureType(input, input.type)));
                     }
-                    case 170 /* CallSignature */: {
+                    case 172 /* CallSignature */: {
                         return cleanup(factory.updateCallSignature(input, ensureTypeParams(input, input.typeParameters), updateParamsList(input, input.parameters), ensureType(input, input.type)));
                     }
-                    case 172 /* IndexSignature */: {
+                    case 174 /* IndexSignature */: {
                         return cleanup(factory.updateIndexSignature(input, 
-                        /*decorators*/ undefined, ensureModifiers(input), updateParamsList(input, input.parameters), ts.visitNode(input.type, visitDeclarationSubtree) || factory.createKeywordTypeNode(128 /* AnyKeyword */)));
+                        /*decorators*/ undefined, ensureModifiers(input), updateParamsList(input, input.parameters), ts.visitNode(input.type, visitDeclarationSubtree) || factory.createKeywordTypeNode(129 /* AnyKeyword */)));
                     }
-                    case 250 /* VariableDeclaration */: {
+                    case 252 /* VariableDeclaration */: {
                         if (ts.isBindingPattern(input.name)) {
                             return recreateBindingPattern(input.name);
                         }
@@ -101946,13 +104124,13 @@
                         suppressNewDiagnosticContexts = true; // Variable declaration types also suppress new diagnostic contexts, provided the contexts wouldn't be made for binding pattern types
                         return cleanup(factory.updateVariableDeclaration(input, input.name, /*exclamationToken*/ undefined, ensureType(input, input.type), ensureNoInitializer(input)));
                     }
-                    case 160 /* TypeParameter */: {
+                    case 161 /* TypeParameter */: {
                         if (isPrivateMethodTypeParameter(input) && (input.default || input.constraint)) {
                             return cleanup(factory.updateTypeParameterDeclaration(input, input.name, /*constraint*/ undefined, /*defaultType*/ undefined));
                         }
                         return cleanup(ts.visitEachChild(input, visitDeclarationSubtree, context));
                     }
-                    case 185 /* ConditionalType */: {
+                    case 187 /* ConditionalType */: {
                         // We have to process conditional types in a special way because for visibility purposes we need to push a new enclosingDeclaration
                         // just for the `infer` types in the true branch. It's an implicit declaration scope that only applies to _part_ of the type.
                         var checkType = ts.visitNode(input.checkType, visitDeclarationSubtree);
@@ -101964,13 +104142,13 @@
                         var falseType = ts.visitNode(input.falseType, visitDeclarationSubtree);
                         return cleanup(factory.updateConditionalTypeNode(input, checkType, extendsType, trueType, falseType));
                     }
-                    case 175 /* FunctionType */: {
+                    case 177 /* FunctionType */: {
                         return cleanup(factory.updateFunctionTypeNode(input, ts.visitNodes(input.typeParameters, visitDeclarationSubtree), updateParamsList(input, input.parameters), ts.visitNode(input.type, visitDeclarationSubtree)));
                     }
-                    case 176 /* ConstructorType */: {
+                    case 178 /* ConstructorType */: {
                         return cleanup(factory.updateConstructorTypeNode(input, ensureModifiers(input), ts.visitNodes(input.typeParameters, visitDeclarationSubtree), updateParamsList(input, input.parameters), ts.visitNode(input.type, visitDeclarationSubtree)));
                     }
-                    case 196 /* ImportType */: {
+                    case 198 /* ImportType */: {
                         if (!ts.isLiteralImportTypeNode(input))
                             return cleanup(input);
                         return cleanup(factory.updateImportTypeNode(input, factory.updateLiteralTypeNode(input.argument, rewriteModuleSpecifier(input, input.argument.literal)), input.qualifier, ts.visitNodes(input.typeArguments, visitDeclarationSubtree, ts.isTypeNode), input.isTypeOf));
@@ -102002,7 +104180,7 @@
             }
         }
         function isPrivateMethodTypeParameter(node) {
-            return node.parent.kind === 166 /* MethodDeclaration */ && ts.hasEffectiveModifier(node.parent, 8 /* Private */);
+            return node.parent.kind === 167 /* MethodDeclaration */ && ts.hasEffectiveModifier(node.parent, 8 /* Private */);
         }
         function visitDeclarationStatements(input) {
             if (!isPreservedDeclarationStatement(input)) {
@@ -102012,7 +104190,7 @@
             if (shouldStripInternal(input))
                 return;
             switch (input.kind) {
-                case 268 /* ExportDeclaration */: {
+                case 270 /* ExportDeclaration */: {
                     if (ts.isSourceFile(input.parent)) {
                         resultHasExternalModuleIndicator = true;
                     }
@@ -102022,13 +104200,13 @@
                     return factory.updateExportDeclaration(input, 
                     /*decorators*/ undefined, input.modifiers, input.isTypeOnly, input.exportClause, rewriteModuleSpecifier(input, input.moduleSpecifier));
                 }
-                case 267 /* ExportAssignment */: {
+                case 269 /* ExportAssignment */: {
                     // Always visible if the parent node isn't dropped for being not visible
                     if (ts.isSourceFile(input.parent)) {
                         resultHasExternalModuleIndicator = true;
                     }
                     resultHasScopeMarker = true;
-                    if (input.expression.kind === 78 /* Identifier */) {
+                    if (input.expression.kind === 79 /* Identifier */) {
                         return input;
                     }
                     else {
@@ -102040,7 +104218,7 @@
                         errorFallbackNode = input;
                         var varDecl = factory.createVariableDeclaration(newId, /*exclamationToken*/ undefined, resolver.createTypeOfExpression(input.expression, input, declarationEmitNodeBuilderFlags, symbolTracker), /*initializer*/ undefined);
                         errorFallbackNode = undefined;
-                        var statement = factory.createVariableStatement(needsDeclare ? [factory.createModifier(133 /* DeclareKeyword */)] : [], factory.createVariableDeclarationList([varDecl], 2 /* Const */));
+                        var statement = factory.createVariableStatement(needsDeclare ? [factory.createModifier(134 /* DeclareKeyword */)] : [], factory.createVariableDeclarationList([varDecl], 2 /* Const */));
                         return [statement, factory.updateExportAssignment(input, input.decorators, input.modifiers, newId)];
                     }
                 }
@@ -102063,10 +104241,10 @@
             if (shouldStripInternal(input))
                 return;
             switch (input.kind) {
-                case 261 /* ImportEqualsDeclaration */: {
+                case 263 /* ImportEqualsDeclaration */: {
                     return transformImportEqualsDeclaration(input);
                 }
-                case 262 /* ImportDeclaration */: {
+                case 264 /* ImportDeclaration */: {
                     return transformImportDeclaration(input);
                 }
             }
@@ -102087,20 +104265,20 @@
             }
             var previousNeedsDeclare = needsDeclare;
             switch (input.kind) {
-                case 255 /* TypeAliasDeclaration */: // Type aliases get `declare`d if need be (for legacy support), but that's all
+                case 257 /* TypeAliasDeclaration */: // Type aliases get `declare`d if need be (for legacy support), but that's all
                     return cleanup(factory.updateTypeAliasDeclaration(input, 
                     /*decorators*/ undefined, ensureModifiers(input), input.name, ts.visitNodes(input.typeParameters, visitDeclarationSubtree, ts.isTypeParameterDeclaration), ts.visitNode(input.type, visitDeclarationSubtree, ts.isTypeNode)));
-                case 254 /* InterfaceDeclaration */: {
+                case 256 /* InterfaceDeclaration */: {
                     return cleanup(factory.updateInterfaceDeclaration(input, 
                     /*decorators*/ undefined, ensureModifiers(input), input.name, ensureTypeParams(input, input.typeParameters), transformHeritageClauses(input.heritageClauses), ts.visitNodes(input.members, visitDeclarationSubtree)));
                 }
-                case 252 /* FunctionDeclaration */: {
+                case 254 /* FunctionDeclaration */: {
                     // Generators lose their generator-ness, excepting their return type
                     var clean = cleanup(factory.updateFunctionDeclaration(input, 
                     /*decorators*/ undefined, ensureModifiers(input), 
                     /*asteriskToken*/ undefined, input.name, ensureTypeParams(input, input.typeParameters), updateParamsList(input, input.parameters), ensureType(input, input.type), 
                     /*body*/ undefined));
-                    if (clean && resolver.isExpandoFunctionDeclaration(input)) {
+                    if (clean && resolver.isExpandoFunctionDeclaration(input) && shouldEmitFunctionProperties(input)) {
                         var props = resolver.getPropertiesOfContainerFunction(input);
                         // Use parseNodeFactory so it is usable as an enclosing declaration
                         var fakespace_1 = ts.parseNodeFactory.createModuleDeclaration(/*decorators*/ undefined, /*modifiers*/ undefined, clean.name || factory.createIdentifier("_default"), factory.createModuleBlock([]), 16 /* Namespace */);
@@ -102122,7 +104300,7 @@
                                 exportMappings_1.push([name, nameStr]);
                             }
                             var varDecl = factory.createVariableDeclaration(name, /*exclamationToken*/ undefined, type, /*initializer*/ undefined);
-                            return factory.createVariableStatement(isNonContextualKeywordName ? undefined : [factory.createToken(92 /* ExportKeyword */)], factory.createVariableDeclarationList([varDecl]));
+                            return factory.createVariableStatement(isNonContextualKeywordName ? undefined : [factory.createToken(93 /* ExportKeyword */)], factory.createVariableDeclarationList([varDecl]));
                         });
                         if (!exportMappings_1.length) {
                             declarations = ts.mapDefined(declarations, function (declaration) { return factory.updateModifiers(declaration, 0 /* None */); });
@@ -102161,10 +104339,10 @@
                         return clean;
                     }
                 }
-                case 257 /* ModuleDeclaration */: {
+                case 259 /* ModuleDeclaration */: {
                     needsDeclare = false;
                     var inner = input.body;
-                    if (inner && inner.kind === 258 /* ModuleBlock */) {
+                    if (inner && inner.kind === 260 /* ModuleBlock */) {
                         var oldNeedsScopeFix = needsScopeFixMarker;
                         var oldHasScopeFix = resultHasScopeMarker;
                         resultHasScopeMarker = false;
@@ -102180,7 +104358,7 @@
                         // 3. Some things are exported, some are not, and there's no marker - add an empty marker
                         if (!ts.isGlobalScopeAugmentation(input) && !hasScopeMarker(lateStatements) && !resultHasScopeMarker) {
                             if (needsScopeFixMarker) {
-                                lateStatements = factory.createNodeArray(__spreadArray(__spreadArray([], lateStatements), [ts.createEmptyExports(factory)]));
+                                lateStatements = factory.createNodeArray(__spreadArray(__spreadArray([], lateStatements, true), [ts.createEmptyExports(factory)], false));
                             }
                             else {
                                 lateStatements = ts.visitNodes(lateStatements, stripExportModifiers);
@@ -102207,7 +104385,7 @@
                         /*decorators*/ undefined, mods, input.name, body));
                     }
                 }
-                case 253 /* ClassDeclaration */: {
+                case 255 /* ClassDeclaration */: {
                     errorNameNode = input.name;
                     errorFallbackNode = input;
                     var modifiers = factory.createNodeArray(ensureModifiers(input));
@@ -102220,7 +104398,7 @@
                             if (!ts.hasSyntacticModifier(param, 16476 /* ParameterPropertyModifier */) || shouldStripInternal(param))
                                 return;
                             getSymbolAccessibilityDiagnostic = ts.createGetSymbolAccessibilityDiagnosticForNode(param);
-                            if (param.name.kind === 78 /* Identifier */) {
+                            if (param.name.kind === 79 /* Identifier */) {
                                 return preserveJsDoc(factory.createPropertyDeclaration(
                                 /*decorators*/ undefined, ensureModifiers(param), param.name, param.questionToken, ensureType(param, param.type), ensureNoInitializer(param)), param);
                             }
@@ -102262,7 +104440,7 @@
                     var memberNodes = ts.concatenate(ts.concatenate(privateIdentifier, parameterProperties), ts.visitNodes(input.members, visitDeclarationSubtree));
                     var members = factory.createNodeArray(memberNodes);
                     var extendsClause_1 = ts.getEffectiveBaseTypeNode(input);
-                    if (extendsClause_1 && !ts.isEntityNameExpression(extendsClause_1.expression) && extendsClause_1.expression.kind !== 103 /* NullKeyword */) {
+                    if (extendsClause_1 && !ts.isEntityNameExpression(extendsClause_1.expression) && extendsClause_1.expression.kind !== 104 /* NullKeyword */) {
                         // We must add a temporary declaration for the extends clause expression
                         var oldId = input.name ? ts.unescapeLeadingUnderscores(input.name.escapedText) : "default";
                         var newId_1 = factory.createUniqueName(oldId + "_base", 16 /* Optimistic */);
@@ -102272,16 +104450,16 @@
                             typeName: input.name
                         }); };
                         var varDecl = factory.createVariableDeclaration(newId_1, /*exclamationToken*/ undefined, resolver.createTypeOfExpression(extendsClause_1.expression, input, declarationEmitNodeBuilderFlags, symbolTracker), /*initializer*/ undefined);
-                        var statement = factory.createVariableStatement(needsDeclare ? [factory.createModifier(133 /* DeclareKeyword */)] : [], factory.createVariableDeclarationList([varDecl], 2 /* Const */));
+                        var statement = factory.createVariableStatement(needsDeclare ? [factory.createModifier(134 /* DeclareKeyword */)] : [], factory.createVariableDeclarationList([varDecl], 2 /* Const */));
                         var heritageClauses = factory.createNodeArray(ts.map(input.heritageClauses, function (clause) {
-                            if (clause.token === 93 /* ExtendsKeyword */) {
+                            if (clause.token === 94 /* ExtendsKeyword */) {
                                 var oldDiag_2 = getSymbolAccessibilityDiagnostic;
                                 getSymbolAccessibilityDiagnostic = ts.createGetSymbolAccessibilityDiagnosticForNode(clause.types[0]);
                                 var newClause = factory.updateHeritageClause(clause, ts.map(clause.types, function (t) { return factory.updateExpressionWithTypeArguments(t, newId_1, ts.visitNodes(t.typeArguments, visitDeclarationSubtree)); }));
                                 getSymbolAccessibilityDiagnostic = oldDiag_2;
                                 return newClause;
                             }
-                            return factory.updateHeritageClause(clause, ts.visitNodes(factory.createNodeArray(ts.filter(clause.types, function (t) { return ts.isEntityNameExpression(t.expression) || t.expression.kind === 103 /* NullKeyword */; })), visitDeclarationSubtree));
+                            return factory.updateHeritageClause(clause, ts.visitNodes(factory.createNodeArray(ts.filter(clause.types, function (t) { return ts.isEntityNameExpression(t.expression) || t.expression.kind === 104 /* NullKeyword */; })), visitDeclarationSubtree));
                         }));
                         return [statement, cleanup(factory.updateClassDeclaration(input, 
                             /*decorators*/ undefined, modifiers, input.name, typeParameters, heritageClauses, members))]; // TODO: GH#18217
@@ -102292,10 +104470,10 @@
                         /*decorators*/ undefined, modifiers, input.name, typeParameters, heritageClauses, members));
                     }
                 }
-                case 233 /* VariableStatement */: {
+                case 235 /* VariableStatement */: {
                     return cleanup(transformVariableStatement(input));
                 }
-                case 256 /* EnumDeclaration */: {
+                case 258 /* EnumDeclaration */: {
                     return cleanup(factory.updateEnumDeclaration(input, /*decorators*/ undefined, factory.createNodeArray(ensureModifiers(input)), input.name, factory.createNodeArray(ts.mapDefined(input.members, function (m) {
                         if (shouldStripInternal(m))
                             return;
@@ -102314,7 +104492,7 @@
                 if (canProdiceDiagnostic) {
                     getSymbolAccessibilityDiagnostic = oldDiag;
                 }
-                if (input.kind === 257 /* ModuleDeclaration */) {
+                if (input.kind === 259 /* ModuleDeclaration */) {
                     needsDeclare = previousNeedsDeclare;
                 }
                 if (node === input) {
@@ -102337,7 +104515,7 @@
             return ts.flatten(ts.mapDefined(d.elements, function (e) { return recreateBindingElement(e); }));
         }
         function recreateBindingElement(e) {
-            if (e.kind === 223 /* OmittedExpression */) {
+            if (e.kind === 225 /* OmittedExpression */) {
                 return;
             }
             if (e.name) {
@@ -102387,7 +104565,7 @@
         function ensureModifierFlags(node) {
             var mask = 27647 /* All */ ^ (4 /* Public */ | 256 /* Async */ | 16384 /* Override */); // No async and override modifiers in declaration files
             var additions = (needsDeclare && !isAlwaysType(node)) ? 2 /* Ambient */ : 0 /* None */;
-            var parentIsFile = node.parent.kind === 298 /* SourceFile */;
+            var parentIsFile = node.parent.kind === 300 /* SourceFile */;
             if (!parentIsFile || (isBundledEmit && parentIsFile && ts.isExternalModule(node.parent))) {
                 mask ^= 2 /* Ambient */;
                 additions = 0 /* None */;
@@ -102410,13 +104588,13 @@
         }
         function transformHeritageClauses(nodes) {
             return factory.createNodeArray(ts.filter(ts.map(nodes, function (clause) { return factory.updateHeritageClause(clause, ts.visitNodes(factory.createNodeArray(ts.filter(clause.types, function (t) {
-                return ts.isEntityNameExpression(t.expression) || (clause.token === 93 /* ExtendsKeyword */ && t.expression.kind === 103 /* NullKeyword */);
+                return ts.isEntityNameExpression(t.expression) || (clause.token === 94 /* ExtendsKeyword */ && t.expression.kind === 104 /* NullKeyword */);
             })), visitDeclarationSubtree)); }), function (clause) { return clause.types && !!clause.types.length; }));
         }
     }
     ts.transformDeclarations = transformDeclarations;
     function isAlwaysType(node) {
-        if (node.kind === 254 /* InterfaceDeclaration */) {
+        if (node.kind === 256 /* InterfaceDeclaration */) {
             return true;
         }
         return false;
@@ -102441,7 +104619,7 @@
     }
     function getTypeAnnotationFromAccessor(accessor) {
         if (accessor) {
-            return accessor.kind === 168 /* GetAccessor */
+            return accessor.kind === 170 /* GetAccessor */
                 ? accessor.type // Getter - return type
                 : accessor.parameters.length > 0
                     ? accessor.parameters[0].type // Setter parameter type
@@ -102450,52 +104628,52 @@
     }
     function canHaveLiteralInitializer(node) {
         switch (node.kind) {
-            case 164 /* PropertyDeclaration */:
-            case 163 /* PropertySignature */:
+            case 165 /* PropertyDeclaration */:
+            case 164 /* PropertySignature */:
                 return !ts.hasEffectiveModifier(node, 8 /* Private */);
-            case 161 /* Parameter */:
-            case 250 /* VariableDeclaration */:
+            case 162 /* Parameter */:
+            case 252 /* VariableDeclaration */:
                 return true;
         }
         return false;
     }
     function isPreservedDeclarationStatement(node) {
         switch (node.kind) {
-            case 252 /* FunctionDeclaration */:
-            case 257 /* ModuleDeclaration */:
-            case 261 /* ImportEqualsDeclaration */:
-            case 254 /* InterfaceDeclaration */:
-            case 253 /* ClassDeclaration */:
-            case 255 /* TypeAliasDeclaration */:
-            case 256 /* EnumDeclaration */:
-            case 233 /* VariableStatement */:
-            case 262 /* ImportDeclaration */:
-            case 268 /* ExportDeclaration */:
-            case 267 /* ExportAssignment */:
+            case 254 /* FunctionDeclaration */:
+            case 259 /* ModuleDeclaration */:
+            case 263 /* ImportEqualsDeclaration */:
+            case 256 /* InterfaceDeclaration */:
+            case 255 /* ClassDeclaration */:
+            case 257 /* TypeAliasDeclaration */:
+            case 258 /* EnumDeclaration */:
+            case 235 /* VariableStatement */:
+            case 264 /* ImportDeclaration */:
+            case 270 /* ExportDeclaration */:
+            case 269 /* ExportAssignment */:
                 return true;
         }
         return false;
     }
     function isProcessedComponent(node) {
         switch (node.kind) {
-            case 171 /* ConstructSignature */:
-            case 167 /* Constructor */:
-            case 166 /* MethodDeclaration */:
-            case 168 /* GetAccessor */:
-            case 169 /* SetAccessor */:
-            case 164 /* PropertyDeclaration */:
-            case 163 /* PropertySignature */:
-            case 165 /* MethodSignature */:
-            case 170 /* CallSignature */:
-            case 172 /* IndexSignature */:
-            case 250 /* VariableDeclaration */:
-            case 160 /* TypeParameter */:
-            case 224 /* ExpressionWithTypeArguments */:
-            case 174 /* TypeReference */:
-            case 185 /* ConditionalType */:
-            case 175 /* FunctionType */:
-            case 176 /* ConstructorType */:
-            case 196 /* ImportType */:
+            case 173 /* ConstructSignature */:
+            case 169 /* Constructor */:
+            case 167 /* MethodDeclaration */:
+            case 170 /* GetAccessor */:
+            case 171 /* SetAccessor */:
+            case 165 /* PropertyDeclaration */:
+            case 164 /* PropertySignature */:
+            case 166 /* MethodSignature */:
+            case 172 /* CallSignature */:
+            case 174 /* IndexSignature */:
+            case 252 /* VariableDeclaration */:
+            case 161 /* TypeParameter */:
+            case 226 /* ExpressionWithTypeArguments */:
+            case 176 /* TypeReference */:
+            case 187 /* ConditionalType */:
+            case 177 /* FunctionType */:
+            case 178 /* ConstructorType */:
+            case 198 /* ImportType */:
                 return true;
         }
         return false;
@@ -102630,7 +104808,7 @@
      * @param allowDtsFiles A value indicating whether to allow the transformation of .d.ts files.
      */
     function transformNodes(resolver, host, factory, options, nodes, transformers, allowDtsFiles) {
-        var enabledSyntaxKindFeatures = new Array(345 /* Count */);
+        var enabledSyntaxKindFeatures = new Array(350 /* Count */);
         var lexicalEnvironmentVariableDeclarations;
         var lexicalEnvironmentFunctionDeclarations;
         var lexicalEnvironmentStatements;
@@ -102712,7 +104890,7 @@
         var transformed = [];
         for (var _a = 0, nodes_3 = nodes; _a < nodes_3.length; _a++) {
             var node = nodes_3[_a];
-            ts.tracing === null || ts.tracing === void 0 ? void 0 : ts.tracing.push("emit" /* Emit */, "transformNodes", node.kind === 298 /* SourceFile */ ? { path: node.path } : { kind: node.kind, pos: node.pos, end: node.end });
+            ts.tracing === null || ts.tracing === void 0 ? void 0 : ts.tracing.push("emit" /* Emit */, "transformNodes", node.kind === 300 /* SourceFile */ ? { path: node.path } : { kind: node.kind, pos: node.pos, end: node.end });
             transformed.push((allowDtsFiles ? transformation : transformRoot)(node));
             ts.tracing === null || ts.tracing === void 0 ? void 0 : ts.tracing.pop();
         }
@@ -102885,7 +105063,7 @@
                 lexicalEnvironmentFunctionDeclarations ||
                 lexicalEnvironmentStatements) {
                 if (lexicalEnvironmentFunctionDeclarations) {
-                    statements = __spreadArray([], lexicalEnvironmentFunctionDeclarations);
+                    statements = __spreadArray([], lexicalEnvironmentFunctionDeclarations, true);
                 }
                 if (lexicalEnvironmentVariableDeclarations) {
                     var statement = factory.createVariableStatement(
@@ -102900,10 +105078,10 @@
                 }
                 if (lexicalEnvironmentStatements) {
                     if (!statements) {
-                        statements = __spreadArray([], lexicalEnvironmentStatements);
+                        statements = __spreadArray([], lexicalEnvironmentStatements, true);
                     }
                     else {
-                        statements = __spreadArray(__spreadArray([], statements), lexicalEnvironmentStatements);
+                        statements = __spreadArray(__spreadArray([], statements, true), lexicalEnvironmentStatements, true);
                     }
                 }
             }
@@ -103118,7 +105296,7 @@
     /*@internal*/
     function getOutputPathsFor(sourceFile, host, forceDtsPaths) {
         var options = host.getCompilerOptions();
-        if (sourceFile.kind === 299 /* Bundle */) {
+        if (sourceFile.kind === 301 /* Bundle */) {
             return getOutputPathsForBundle(options, forceDtsPaths);
         }
         else {
@@ -103485,7 +105663,7 @@
                     extendedDiagnostics: compilerOptions.extendedDiagnostics,
                     // Explicitly do not passthru either `inline` option
                 });
-                if (forceDtsEmit && declarationTransform.transformed[0].kind === 298 /* SourceFile */) {
+                if (forceDtsEmit && declarationTransform.transformed[0].kind === 300 /* SourceFile */) {
                     var sourceFile = declarationTransform.transformed[0];
                     exportedModulesFromDeclarationEmit = sourceFile.exportedModulesFromDeclarationEmit;
                 }
@@ -103496,7 +105674,7 @@
         }
         function collectLinkedAliases(node) {
             if (ts.isExportAssignment(node)) {
-                if (node.expression.kind === 78 /* Identifier */) {
+                if (node.expression.kind === 79 /* Identifier */) {
                     resolver.collectLinkedAliases(node.expression, /*setVisibility*/ true);
                 }
                 return;
@@ -103508,8 +105686,8 @@
             ts.forEachChild(node, collectLinkedAliases);
         }
         function printSourceFileOrBundle(jsFilePath, sourceMapFilePath, sourceFileOrBundle, printer, mapOptions) {
-            var bundle = sourceFileOrBundle.kind === 299 /* Bundle */ ? sourceFileOrBundle : undefined;
-            var sourceFile = sourceFileOrBundle.kind === 298 /* SourceFile */ ? sourceFileOrBundle : undefined;
+            var bundle = sourceFileOrBundle.kind === 301 /* Bundle */ ? sourceFileOrBundle : undefined;
+            var sourceFile = sourceFileOrBundle.kind === 300 /* SourceFile */ ? sourceFileOrBundle : undefined;
             var sourceFiles = bundle ? bundle.sourceFiles : [sourceFile];
             var sourceMapGenerator;
             if (shouldEmitSourceMaps(mapOptions, sourceFileOrBundle)) {
@@ -103550,7 +105728,7 @@
         }
         function shouldEmitSourceMaps(mapOptions, sourceFileOrBundle) {
             return (mapOptions.sourceMap || mapOptions.inlineSourceMap)
-                && (sourceFileOrBundle.kind !== 298 /* SourceFile */ || !ts.fileExtensionIs(sourceFileOrBundle.fileName, ".json" /* Json */));
+                && (sourceFileOrBundle.kind !== 300 /* SourceFile */ || !ts.fileExtensionIs(sourceFileOrBundle.fileName, ".json" /* Json */));
         }
         function getSourceRoot(mapOptions) {
             // Normalize source root and make sure it has trailing "/" so that it can be used to combine paths with the
@@ -103716,7 +105894,7 @@
         var prependNodes = ts.createPrependNodes(config.projectReferences, getCommandLine, function (f) { return host.readFile(f); });
         var sourceFilesForJsEmit = createSourceFilesFromBundleBuildInfo(buildInfo.bundle, buildInfoDirectory, host);
         var emitHost = {
-            getPrependNodes: ts.memoize(function () { return __spreadArray(__spreadArray([], prependNodes), [ownPrependInput]); }),
+            getPrependNodes: ts.memoize(function () { return __spreadArray(__spreadArray([], prependNodes, true), [ownPrependInput], false); }),
             getCanonicalFileName: host.getCanonicalFileName,
             getCommonSourceDirectory: function () { return ts.getNormalizedAbsolutePath(buildInfo.bundle.commonSourceDirectory, buildInfoDirectory); },
             getCompilerOptions: function () { return config.options; },
@@ -103861,9 +106039,9 @@
                     break;
             }
             switch (node.kind) {
-                case 298 /* SourceFile */: return printFile(node);
-                case 299 /* Bundle */: return printBundle(node);
-                case 300 /* UnparsedSource */: return printUnparsedSource(node);
+                case 300 /* SourceFile */: return printFile(node);
+                case 301 /* Bundle */: return printBundle(node);
+                case 302 /* UnparsedSource */: return printUnparsedSource(node);
             }
             writeNode(hint, node, sourceFile, beginPrint());
             return endPrint();
@@ -104183,316 +106361,318 @@
                     case 17 /* TemplateTail */:
                         return emitLiteral(node, /*jsxAttributeEscape*/ false);
                     // Identifiers
-                    case 78 /* Identifier */:
+                    case 79 /* Identifier */:
                         return emitIdentifier(node);
                     // PrivateIdentifiers
-                    case 79 /* PrivateIdentifier */:
+                    case 80 /* PrivateIdentifier */:
                         return emitPrivateIdentifier(node);
                     // Parse tree nodes
                     // Names
-                    case 158 /* QualifiedName */:
+                    case 159 /* QualifiedName */:
                         return emitQualifiedName(node);
-                    case 159 /* ComputedPropertyName */:
+                    case 160 /* ComputedPropertyName */:
                         return emitComputedPropertyName(node);
                     // Signature elements
-                    case 160 /* TypeParameter */:
+                    case 161 /* TypeParameter */:
                         return emitTypeParameter(node);
-                    case 161 /* Parameter */:
+                    case 162 /* Parameter */:
                         return emitParameter(node);
-                    case 162 /* Decorator */:
+                    case 163 /* Decorator */:
                         return emitDecorator(node);
                     // Type members
-                    case 163 /* PropertySignature */:
+                    case 164 /* PropertySignature */:
                         return emitPropertySignature(node);
-                    case 164 /* PropertyDeclaration */:
+                    case 165 /* PropertyDeclaration */:
                         return emitPropertyDeclaration(node);
-                    case 165 /* MethodSignature */:
+                    case 166 /* MethodSignature */:
                         return emitMethodSignature(node);
-                    case 166 /* MethodDeclaration */:
+                    case 167 /* MethodDeclaration */:
                         return emitMethodDeclaration(node);
-                    case 167 /* Constructor */:
+                    case 168 /* ClassStaticBlockDeclaration */:
+                        return emitClassStaticBlockDeclaration(node);
+                    case 169 /* Constructor */:
                         return emitConstructor(node);
-                    case 168 /* GetAccessor */:
-                    case 169 /* SetAccessor */:
+                    case 170 /* GetAccessor */:
+                    case 171 /* SetAccessor */:
                         return emitAccessorDeclaration(node);
-                    case 170 /* CallSignature */:
+                    case 172 /* CallSignature */:
                         return emitCallSignature(node);
-                    case 171 /* ConstructSignature */:
+                    case 173 /* ConstructSignature */:
                         return emitConstructSignature(node);
-                    case 172 /* IndexSignature */:
+                    case 174 /* IndexSignature */:
                         return emitIndexSignature(node);
                     // Types
-                    case 173 /* TypePredicate */:
+                    case 175 /* TypePredicate */:
                         return emitTypePredicate(node);
-                    case 174 /* TypeReference */:
+                    case 176 /* TypeReference */:
                         return emitTypeReference(node);
-                    case 175 /* FunctionType */:
+                    case 177 /* FunctionType */:
                         return emitFunctionType(node);
-                    case 176 /* ConstructorType */:
+                    case 178 /* ConstructorType */:
                         return emitConstructorType(node);
-                    case 177 /* TypeQuery */:
+                    case 179 /* TypeQuery */:
                         return emitTypeQuery(node);
-                    case 178 /* TypeLiteral */:
+                    case 180 /* TypeLiteral */:
                         return emitTypeLiteral(node);
-                    case 179 /* ArrayType */:
+                    case 181 /* ArrayType */:
                         return emitArrayType(node);
-                    case 180 /* TupleType */:
+                    case 182 /* TupleType */:
                         return emitTupleType(node);
-                    case 181 /* OptionalType */:
+                    case 183 /* OptionalType */:
                         return emitOptionalType(node);
                     // SyntaxKind.RestType is handled below
-                    case 183 /* UnionType */:
+                    case 185 /* UnionType */:
                         return emitUnionType(node);
-                    case 184 /* IntersectionType */:
+                    case 186 /* IntersectionType */:
                         return emitIntersectionType(node);
-                    case 185 /* ConditionalType */:
+                    case 187 /* ConditionalType */:
                         return emitConditionalType(node);
-                    case 186 /* InferType */:
+                    case 188 /* InferType */:
                         return emitInferType(node);
-                    case 187 /* ParenthesizedType */:
+                    case 189 /* ParenthesizedType */:
                         return emitParenthesizedType(node);
-                    case 224 /* ExpressionWithTypeArguments */:
+                    case 226 /* ExpressionWithTypeArguments */:
                         return emitExpressionWithTypeArguments(node);
-                    case 188 /* ThisType */:
+                    case 190 /* ThisType */:
                         return emitThisType();
-                    case 189 /* TypeOperator */:
+                    case 191 /* TypeOperator */:
                         return emitTypeOperator(node);
-                    case 190 /* IndexedAccessType */:
+                    case 192 /* IndexedAccessType */:
                         return emitIndexedAccessType(node);
-                    case 191 /* MappedType */:
+                    case 193 /* MappedType */:
                         return emitMappedType(node);
-                    case 192 /* LiteralType */:
+                    case 194 /* LiteralType */:
                         return emitLiteralType(node);
-                    case 193 /* NamedTupleMember */:
+                    case 195 /* NamedTupleMember */:
                         return emitNamedTupleMember(node);
-                    case 194 /* TemplateLiteralType */:
+                    case 196 /* TemplateLiteralType */:
                         return emitTemplateType(node);
-                    case 195 /* TemplateLiteralTypeSpan */:
+                    case 197 /* TemplateLiteralTypeSpan */:
                         return emitTemplateTypeSpan(node);
-                    case 196 /* ImportType */:
+                    case 198 /* ImportType */:
                         return emitImportTypeNode(node);
                     // Binding patterns
-                    case 197 /* ObjectBindingPattern */:
+                    case 199 /* ObjectBindingPattern */:
                         return emitObjectBindingPattern(node);
-                    case 198 /* ArrayBindingPattern */:
+                    case 200 /* ArrayBindingPattern */:
                         return emitArrayBindingPattern(node);
-                    case 199 /* BindingElement */:
+                    case 201 /* BindingElement */:
                         return emitBindingElement(node);
                     // Misc
-                    case 229 /* TemplateSpan */:
+                    case 231 /* TemplateSpan */:
                         return emitTemplateSpan(node);
-                    case 230 /* SemicolonClassElement */:
+                    case 232 /* SemicolonClassElement */:
                         return emitSemicolonClassElement();
                     // Statements
-                    case 231 /* Block */:
+                    case 233 /* Block */:
                         return emitBlock(node);
-                    case 233 /* VariableStatement */:
+                    case 235 /* VariableStatement */:
                         return emitVariableStatement(node);
-                    case 232 /* EmptyStatement */:
+                    case 234 /* EmptyStatement */:
                         return emitEmptyStatement(/*isEmbeddedStatement*/ false);
-                    case 234 /* ExpressionStatement */:
+                    case 236 /* ExpressionStatement */:
                         return emitExpressionStatement(node);
-                    case 235 /* IfStatement */:
+                    case 237 /* IfStatement */:
                         return emitIfStatement(node);
-                    case 236 /* DoStatement */:
+                    case 238 /* DoStatement */:
                         return emitDoStatement(node);
-                    case 237 /* WhileStatement */:
+                    case 239 /* WhileStatement */:
                         return emitWhileStatement(node);
-                    case 238 /* ForStatement */:
+                    case 240 /* ForStatement */:
                         return emitForStatement(node);
-                    case 239 /* ForInStatement */:
+                    case 241 /* ForInStatement */:
                         return emitForInStatement(node);
-                    case 240 /* ForOfStatement */:
+                    case 242 /* ForOfStatement */:
                         return emitForOfStatement(node);
-                    case 241 /* ContinueStatement */:
+                    case 243 /* ContinueStatement */:
                         return emitContinueStatement(node);
-                    case 242 /* BreakStatement */:
+                    case 244 /* BreakStatement */:
                         return emitBreakStatement(node);
-                    case 243 /* ReturnStatement */:
+                    case 245 /* ReturnStatement */:
                         return emitReturnStatement(node);
-                    case 244 /* WithStatement */:
+                    case 246 /* WithStatement */:
                         return emitWithStatement(node);
-                    case 245 /* SwitchStatement */:
+                    case 247 /* SwitchStatement */:
                         return emitSwitchStatement(node);
-                    case 246 /* LabeledStatement */:
+                    case 248 /* LabeledStatement */:
                         return emitLabeledStatement(node);
-                    case 247 /* ThrowStatement */:
+                    case 249 /* ThrowStatement */:
                         return emitThrowStatement(node);
-                    case 248 /* TryStatement */:
+                    case 250 /* TryStatement */:
                         return emitTryStatement(node);
-                    case 249 /* DebuggerStatement */:
+                    case 251 /* DebuggerStatement */:
                         return emitDebuggerStatement(node);
                     // Declarations
-                    case 250 /* VariableDeclaration */:
+                    case 252 /* VariableDeclaration */:
                         return emitVariableDeclaration(node);
-                    case 251 /* VariableDeclarationList */:
+                    case 253 /* VariableDeclarationList */:
                         return emitVariableDeclarationList(node);
-                    case 252 /* FunctionDeclaration */:
+                    case 254 /* FunctionDeclaration */:
                         return emitFunctionDeclaration(node);
-                    case 253 /* ClassDeclaration */:
+                    case 255 /* ClassDeclaration */:
                         return emitClassDeclaration(node);
-                    case 254 /* InterfaceDeclaration */:
+                    case 256 /* InterfaceDeclaration */:
                         return emitInterfaceDeclaration(node);
-                    case 255 /* TypeAliasDeclaration */:
+                    case 257 /* TypeAliasDeclaration */:
                         return emitTypeAliasDeclaration(node);
-                    case 256 /* EnumDeclaration */:
+                    case 258 /* EnumDeclaration */:
                         return emitEnumDeclaration(node);
-                    case 257 /* ModuleDeclaration */:
+                    case 259 /* ModuleDeclaration */:
                         return emitModuleDeclaration(node);
-                    case 258 /* ModuleBlock */:
+                    case 260 /* ModuleBlock */:
                         return emitModuleBlock(node);
-                    case 259 /* CaseBlock */:
+                    case 261 /* CaseBlock */:
                         return emitCaseBlock(node);
-                    case 260 /* NamespaceExportDeclaration */:
+                    case 262 /* NamespaceExportDeclaration */:
                         return emitNamespaceExportDeclaration(node);
-                    case 261 /* ImportEqualsDeclaration */:
+                    case 263 /* ImportEqualsDeclaration */:
                         return emitImportEqualsDeclaration(node);
-                    case 262 /* ImportDeclaration */:
+                    case 264 /* ImportDeclaration */:
                         return emitImportDeclaration(node);
-                    case 263 /* ImportClause */:
+                    case 265 /* ImportClause */:
                         return emitImportClause(node);
-                    case 264 /* NamespaceImport */:
+                    case 266 /* NamespaceImport */:
                         return emitNamespaceImport(node);
-                    case 270 /* NamespaceExport */:
+                    case 272 /* NamespaceExport */:
                         return emitNamespaceExport(node);
-                    case 265 /* NamedImports */:
+                    case 267 /* NamedImports */:
                         return emitNamedImports(node);
-                    case 266 /* ImportSpecifier */:
+                    case 268 /* ImportSpecifier */:
                         return emitImportSpecifier(node);
-                    case 267 /* ExportAssignment */:
+                    case 269 /* ExportAssignment */:
                         return emitExportAssignment(node);
-                    case 268 /* ExportDeclaration */:
+                    case 270 /* ExportDeclaration */:
                         return emitExportDeclaration(node);
-                    case 269 /* NamedExports */:
+                    case 271 /* NamedExports */:
                         return emitNamedExports(node);
-                    case 271 /* ExportSpecifier */:
+                    case 273 /* ExportSpecifier */:
                         return emitExportSpecifier(node);
-                    case 272 /* MissingDeclaration */:
+                    case 274 /* MissingDeclaration */:
                         return;
                     // Module references
-                    case 273 /* ExternalModuleReference */:
+                    case 275 /* ExternalModuleReference */:
                         return emitExternalModuleReference(node);
                     // JSX (non-expression)
                     case 11 /* JsxText */:
                         return emitJsxText(node);
-                    case 276 /* JsxOpeningElement */:
-                    case 279 /* JsxOpeningFragment */:
+                    case 278 /* JsxOpeningElement */:
+                    case 281 /* JsxOpeningFragment */:
                         return emitJsxOpeningElementOrFragment(node);
-                    case 277 /* JsxClosingElement */:
-                    case 280 /* JsxClosingFragment */:
+                    case 279 /* JsxClosingElement */:
+                    case 282 /* JsxClosingFragment */:
                         return emitJsxClosingElementOrFragment(node);
-                    case 281 /* JsxAttribute */:
+                    case 283 /* JsxAttribute */:
                         return emitJsxAttribute(node);
-                    case 282 /* JsxAttributes */:
+                    case 284 /* JsxAttributes */:
                         return emitJsxAttributes(node);
-                    case 283 /* JsxSpreadAttribute */:
+                    case 285 /* JsxSpreadAttribute */:
                         return emitJsxSpreadAttribute(node);
-                    case 284 /* JsxExpression */:
+                    case 286 /* JsxExpression */:
                         return emitJsxExpression(node);
                     // Clauses
-                    case 285 /* CaseClause */:
+                    case 287 /* CaseClause */:
                         return emitCaseClause(node);
-                    case 286 /* DefaultClause */:
+                    case 288 /* DefaultClause */:
                         return emitDefaultClause(node);
-                    case 287 /* HeritageClause */:
+                    case 289 /* HeritageClause */:
                         return emitHeritageClause(node);
-                    case 288 /* CatchClause */:
+                    case 290 /* CatchClause */:
                         return emitCatchClause(node);
                     // Property assignments
-                    case 289 /* PropertyAssignment */:
+                    case 291 /* PropertyAssignment */:
                         return emitPropertyAssignment(node);
-                    case 290 /* ShorthandPropertyAssignment */:
+                    case 292 /* ShorthandPropertyAssignment */:
                         return emitShorthandPropertyAssignment(node);
-                    case 291 /* SpreadAssignment */:
+                    case 293 /* SpreadAssignment */:
                         return emitSpreadAssignment(node);
                     // Enum
-                    case 292 /* EnumMember */:
+                    case 294 /* EnumMember */:
                         return emitEnumMember(node);
                     // Unparsed
-                    case 293 /* UnparsedPrologue */:
+                    case 295 /* UnparsedPrologue */:
                         return writeUnparsedNode(node);
-                    case 300 /* UnparsedSource */:
-                    case 294 /* UnparsedPrepend */:
+                    case 302 /* UnparsedSource */:
+                    case 296 /* UnparsedPrepend */:
                         return emitUnparsedSourceOrPrepend(node);
-                    case 295 /* UnparsedText */:
-                    case 296 /* UnparsedInternalText */:
+                    case 297 /* UnparsedText */:
+                    case 298 /* UnparsedInternalText */:
                         return emitUnparsedTextLike(node);
-                    case 297 /* UnparsedSyntheticReference */:
+                    case 299 /* UnparsedSyntheticReference */:
                         return emitUnparsedSyntheticReference(node);
                     // Top-level nodes
-                    case 298 /* SourceFile */:
+                    case 300 /* SourceFile */:
                         return emitSourceFile(node);
-                    case 299 /* Bundle */:
+                    case 301 /* Bundle */:
                         return ts.Debug.fail("Bundles should be printed using printBundle");
                     // SyntaxKind.UnparsedSource (handled above)
-                    case 301 /* InputFiles */:
+                    case 303 /* InputFiles */:
                         return ts.Debug.fail("InputFiles should not be printed");
                     // JSDoc nodes (only used in codefixes currently)
-                    case 302 /* JSDocTypeExpression */:
+                    case 304 /* JSDocTypeExpression */:
                         return emitJSDocTypeExpression(node);
-                    case 303 /* JSDocNameReference */:
+                    case 305 /* JSDocNameReference */:
                         return emitJSDocNameReference(node);
-                    case 304 /* JSDocAllType */:
+                    case 307 /* JSDocAllType */:
                         return writePunctuation("*");
-                    case 305 /* JSDocUnknownType */:
+                    case 308 /* JSDocUnknownType */:
                         return writePunctuation("?");
-                    case 306 /* JSDocNullableType */:
+                    case 309 /* JSDocNullableType */:
                         return emitJSDocNullableType(node);
-                    case 307 /* JSDocNonNullableType */:
+                    case 310 /* JSDocNonNullableType */:
                         return emitJSDocNonNullableType(node);
-                    case 308 /* JSDocOptionalType */:
+                    case 311 /* JSDocOptionalType */:
                         return emitJSDocOptionalType(node);
-                    case 309 /* JSDocFunctionType */:
+                    case 312 /* JSDocFunctionType */:
                         return emitJSDocFunctionType(node);
-                    case 182 /* RestType */:
-                    case 310 /* JSDocVariadicType */:
+                    case 184 /* RestType */:
+                    case 313 /* JSDocVariadicType */:
                         return emitRestOrJSDocVariadicType(node);
-                    case 311 /* JSDocNamepathType */:
+                    case 314 /* JSDocNamepathType */:
                         return;
-                    case 312 /* JSDocComment */:
+                    case 315 /* JSDocComment */:
                         return emitJSDoc(node);
-                    case 314 /* JSDocTypeLiteral */:
+                    case 317 /* JSDocTypeLiteral */:
                         return emitJSDocTypeLiteral(node);
-                    case 315 /* JSDocSignature */:
+                    case 318 /* JSDocSignature */:
                         return emitJSDocSignature(node);
-                    case 317 /* JSDocTag */:
-                    case 322 /* JSDocClassTag */:
+                    case 322 /* JSDocTag */:
+                    case 327 /* JSDocClassTag */:
                         return emitJSDocSimpleTag(node);
-                    case 318 /* JSDocAugmentsTag */:
-                    case 319 /* JSDocImplementsTag */:
+                    case 323 /* JSDocAugmentsTag */:
+                    case 324 /* JSDocImplementsTag */:
                         return emitJSDocHeritageTag(node);
-                    case 320 /* JSDocAuthorTag */:
-                    case 321 /* JSDocDeprecatedTag */:
+                    case 325 /* JSDocAuthorTag */:
+                    case 326 /* JSDocDeprecatedTag */:
                         return;
                     // SyntaxKind.JSDocClassTag (see JSDocTag, above)
-                    case 323 /* JSDocPublicTag */:
-                    case 324 /* JSDocPrivateTag */:
-                    case 325 /* JSDocProtectedTag */:
-                    case 326 /* JSDocReadonlyTag */:
-                    case 327 /* JSDocOverrideTag */:
+                    case 328 /* JSDocPublicTag */:
+                    case 329 /* JSDocPrivateTag */:
+                    case 330 /* JSDocProtectedTag */:
+                    case 331 /* JSDocReadonlyTag */:
+                    case 332 /* JSDocOverrideTag */:
                         return;
-                    case 328 /* JSDocCallbackTag */:
+                    case 333 /* JSDocCallbackTag */:
                         return emitJSDocCallbackTag(node);
                     // SyntaxKind.JSDocEnumTag (see below)
-                    case 330 /* JSDocParameterTag */:
-                    case 337 /* JSDocPropertyTag */:
+                    case 335 /* JSDocParameterTag */:
+                    case 342 /* JSDocPropertyTag */:
                         return emitJSDocPropertyLikeTag(node);
-                    case 329 /* JSDocEnumTag */:
-                    case 331 /* JSDocReturnTag */:
-                    case 332 /* JSDocThisTag */:
-                    case 333 /* JSDocTypeTag */:
+                    case 334 /* JSDocEnumTag */:
+                    case 336 /* JSDocReturnTag */:
+                    case 337 /* JSDocThisTag */:
+                    case 338 /* JSDocTypeTag */:
                         return emitJSDocSimpleTypedTag(node);
-                    case 334 /* JSDocTemplateTag */:
+                    case 339 /* JSDocTemplateTag */:
                         return emitJSDocTemplateTag(node);
-                    case 335 /* JSDocTypedefTag */:
+                    case 340 /* JSDocTypedefTag */:
                         return emitJSDocTypedefTag(node);
-                    case 336 /* JSDocSeeTag */:
+                    case 341 /* JSDocSeeTag */:
                         return emitJSDocSeeTag(node);
                     // SyntaxKind.JSDocPropertyTag (see JSDocParameterTag, above)
                     // Transformation nodes
-                    case 339 /* NotEmittedStatement */:
-                    case 343 /* EndOfDeclarationMarker */:
-                    case 342 /* MergeDeclarationMarker */:
+                    case 344 /* NotEmittedStatement */:
+                    case 348 /* EndOfDeclarationMarker */:
+                    case 347 /* MergeDeclarationMarker */:
                         return;
                 }
                 if (ts.isExpression(node)) {
@@ -104519,86 +106699,86 @@
                     case 14 /* NoSubstitutionTemplateLiteral */:
                         return emitLiteral(node, /*jsxAttributeEscape*/ false);
                     // Identifiers
-                    case 78 /* Identifier */:
+                    case 79 /* Identifier */:
                         return emitIdentifier(node);
                     // Expressions
-                    case 200 /* ArrayLiteralExpression */:
+                    case 202 /* ArrayLiteralExpression */:
                         return emitArrayLiteralExpression(node);
-                    case 201 /* ObjectLiteralExpression */:
+                    case 203 /* ObjectLiteralExpression */:
                         return emitObjectLiteralExpression(node);
-                    case 202 /* PropertyAccessExpression */:
+                    case 204 /* PropertyAccessExpression */:
                         return emitPropertyAccessExpression(node);
-                    case 203 /* ElementAccessExpression */:
+                    case 205 /* ElementAccessExpression */:
                         return emitElementAccessExpression(node);
-                    case 204 /* CallExpression */:
+                    case 206 /* CallExpression */:
                         return emitCallExpression(node);
-                    case 205 /* NewExpression */:
+                    case 207 /* NewExpression */:
                         return emitNewExpression(node);
-                    case 206 /* TaggedTemplateExpression */:
+                    case 208 /* TaggedTemplateExpression */:
                         return emitTaggedTemplateExpression(node);
-                    case 207 /* TypeAssertionExpression */:
+                    case 209 /* TypeAssertionExpression */:
                         return emitTypeAssertionExpression(node);
-                    case 208 /* ParenthesizedExpression */:
+                    case 210 /* ParenthesizedExpression */:
                         return emitParenthesizedExpression(node);
-                    case 209 /* FunctionExpression */:
+                    case 211 /* FunctionExpression */:
                         return emitFunctionExpression(node);
-                    case 210 /* ArrowFunction */:
+                    case 212 /* ArrowFunction */:
                         return emitArrowFunction(node);
-                    case 211 /* DeleteExpression */:
+                    case 213 /* DeleteExpression */:
                         return emitDeleteExpression(node);
-                    case 212 /* TypeOfExpression */:
+                    case 214 /* TypeOfExpression */:
                         return emitTypeOfExpression(node);
-                    case 213 /* VoidExpression */:
+                    case 215 /* VoidExpression */:
                         return emitVoidExpression(node);
-                    case 214 /* AwaitExpression */:
+                    case 216 /* AwaitExpression */:
                         return emitAwaitExpression(node);
-                    case 215 /* PrefixUnaryExpression */:
+                    case 217 /* PrefixUnaryExpression */:
                         return emitPrefixUnaryExpression(node);
-                    case 216 /* PostfixUnaryExpression */:
+                    case 218 /* PostfixUnaryExpression */:
                         return emitPostfixUnaryExpression(node);
-                    case 217 /* BinaryExpression */:
+                    case 219 /* BinaryExpression */:
                         return emitBinaryExpression(node);
-                    case 218 /* ConditionalExpression */:
+                    case 220 /* ConditionalExpression */:
                         return emitConditionalExpression(node);
-                    case 219 /* TemplateExpression */:
+                    case 221 /* TemplateExpression */:
                         return emitTemplateExpression(node);
-                    case 220 /* YieldExpression */:
+                    case 222 /* YieldExpression */:
                         return emitYieldExpression(node);
-                    case 221 /* SpreadElement */:
+                    case 223 /* SpreadElement */:
                         return emitSpreadElement(node);
-                    case 222 /* ClassExpression */:
+                    case 224 /* ClassExpression */:
                         return emitClassExpression(node);
-                    case 223 /* OmittedExpression */:
+                    case 225 /* OmittedExpression */:
                         return;
-                    case 225 /* AsExpression */:
+                    case 227 /* AsExpression */:
                         return emitAsExpression(node);
-                    case 226 /* NonNullExpression */:
+                    case 228 /* NonNullExpression */:
                         return emitNonNullExpression(node);
-                    case 227 /* MetaProperty */:
+                    case 229 /* MetaProperty */:
                         return emitMetaProperty(node);
-                    case 228 /* SyntheticExpression */:
+                    case 230 /* SyntheticExpression */:
                         return ts.Debug.fail("SyntheticExpression should never be printed.");
                     // JSX
-                    case 274 /* JsxElement */:
+                    case 276 /* JsxElement */:
                         return emitJsxElement(node);
-                    case 275 /* JsxSelfClosingElement */:
+                    case 277 /* JsxSelfClosingElement */:
                         return emitJsxSelfClosingElement(node);
-                    case 278 /* JsxFragment */:
+                    case 280 /* JsxFragment */:
                         return emitJsxFragment(node);
                     // Synthesized list
-                    case 338 /* SyntaxList */:
+                    case 343 /* SyntaxList */:
                         return ts.Debug.fail("SyntaxList should not be printed");
                     // Transformation nodes
-                    case 339 /* NotEmittedStatement */:
+                    case 344 /* NotEmittedStatement */:
                         return;
-                    case 340 /* PartiallyEmittedExpression */:
+                    case 345 /* PartiallyEmittedExpression */:
                         return emitPartiallyEmittedExpression(node);
-                    case 341 /* CommaListExpression */:
+                    case 346 /* CommaListExpression */:
                         return emitCommaList(node);
-                    case 342 /* MergeDeclarationMarker */:
-                    case 343 /* EndOfDeclarationMarker */:
+                    case 347 /* MergeDeclarationMarker */:
+                    case 348 /* EndOfDeclarationMarker */:
                         return;
-                    case 344 /* SyntheticReferenceExpression */:
+                    case 349 /* SyntheticReferenceExpression */:
                         return ts.Debug.fail("SyntheticReferenceExpression should not be printed");
                 }
             }
@@ -104646,7 +106826,7 @@
         }
         function emitHelpers(node) {
             var helpersEmitted = false;
-            var bundle = node.kind === 299 /* Bundle */ ? node : undefined;
+            var bundle = node.kind === 301 /* Bundle */ ? node : undefined;
             if (bundle && moduleKind === ts.ModuleKind.None) {
                 return;
             }
@@ -104746,7 +106926,7 @@
             var pos = getTextPosWithWriteLine();
             writeUnparsedNode(unparsed);
             if (bundleFileInfo) {
-                updateOrPushBundleFileTextLike(pos, writer.getTextPos(), unparsed.kind === 295 /* UnparsedText */ ?
+                updateOrPushBundleFileTextLike(pos, writer.getTextPos(), unparsed.kind === 297 /* UnparsedText */ ?
                     "text" /* Text */ :
                     "internal" /* Internal */);
             }
@@ -104783,7 +106963,7 @@
             emit(node.right);
         }
         function emitEntityName(node) {
-            if (node.kind === 78 /* Identifier */) {
+            if (node.kind === 79 /* Identifier */) {
                 emitExpression(node);
             }
             else {
@@ -104819,7 +106999,7 @@
             emit(node.dotDotDotToken);
             emitNodeWithWriter(node.name, writeParameter);
             emit(node.questionToken);
-            if (node.parent && node.parent.kind === 309 /* JSDocFunctionType */ && !node.name) {
+            if (node.parent && node.parent.kind === 312 /* JSDocFunctionType */ && !node.name) {
                 emit(node.type);
             }
             else {
@@ -104873,6 +107053,12 @@
             emit(node.questionToken);
             emitSignatureAndBody(node, emitSignatureHead);
         }
+        function emitClassStaticBlockDeclaration(node) {
+            emitDecorators(node, node.decorators);
+            emitModifiers(node, node.modifiers);
+            writeKeyword("static");
+            emitBlockFunctionBody(node.body);
+        }
         function emitConstructor(node) {
             emitModifiers(node, node.modifiers);
             writeKeyword("constructor");
@@ -104881,7 +107067,7 @@
         function emitAccessorDeclaration(node) {
             emitDecorators(node, node.decorators);
             emitModifiers(node, node.modifiers);
-            writeKeyword(node.kind === 168 /* GetAccessor */ ? "get" : "set");
+            writeKeyword(node.kind === 170 /* GetAccessor */ ? "get" : "set");
             writeSpace();
             emit(node.name);
             emitSignatureAndBody(node, emitSignatureHead);
@@ -105078,7 +107264,7 @@
             }
             if (node.readonlyToken) {
                 emit(node.readonlyToken);
-                if (node.readonlyToken.kind !== 142 /* ReadonlyKeyword */) {
+                if (node.readonlyToken.kind !== 143 /* ReadonlyKeyword */) {
                     writeKeyword("readonly");
                 }
                 writeSpace();
@@ -105227,20 +107413,40 @@
             emitTokenWithComment(23 /* CloseBracketToken */, node.argumentExpression.end, writePunctuation, node);
         }
         function emitCallExpression(node) {
+            var indirectCall = ts.getEmitFlags(node) & 536870912 /* IndirectCall */;
+            if (indirectCall) {
+                writePunctuation("(");
+                writeLiteral("0");
+                writePunctuation(",");
+                writeSpace();
+            }
             emitExpression(node.expression, parenthesizer.parenthesizeLeftSideOfAccess);
+            if (indirectCall) {
+                writePunctuation(")");
+            }
             emit(node.questionDotToken);
             emitTypeArguments(node, node.typeArguments);
             emitExpressionList(node, node.arguments, 2576 /* CallExpressionArguments */, parenthesizer.parenthesizeExpressionForDisallowedComma);
         }
         function emitNewExpression(node) {
-            emitTokenWithComment(102 /* NewKeyword */, node.pos, writeKeyword, node);
+            emitTokenWithComment(103 /* NewKeyword */, node.pos, writeKeyword, node);
             writeSpace();
             emitExpression(node.expression, parenthesizer.parenthesizeExpressionOfNew);
             emitTypeArguments(node, node.typeArguments);
             emitExpressionList(node, node.arguments, 18960 /* NewExpressionArguments */, parenthesizer.parenthesizeExpressionForDisallowedComma);
         }
         function emitTaggedTemplateExpression(node) {
+            var indirectCall = ts.getEmitFlags(node) & 536870912 /* IndirectCall */;
+            if (indirectCall) {
+                writePunctuation("(");
+                writeLiteral("0");
+                writePunctuation(",");
+                writeSpace();
+            }
             emitExpression(node.tag, parenthesizer.parenthesizeLeftSideOfAccess);
+            if (indirectCall) {
+                writePunctuation(")");
+            }
             emitTypeArguments(node, node.typeArguments);
             writeSpace();
             emitExpression(node.template);
@@ -105276,22 +107482,22 @@
             emit(node.equalsGreaterThanToken);
         }
         function emitDeleteExpression(node) {
-            emitTokenWithComment(88 /* DeleteKeyword */, node.pos, writeKeyword, node);
+            emitTokenWithComment(89 /* DeleteKeyword */, node.pos, writeKeyword, node);
             writeSpace();
             emitExpression(node.expression, parenthesizer.parenthesizeOperandOfPrefixUnary);
         }
         function emitTypeOfExpression(node) {
-            emitTokenWithComment(111 /* TypeOfKeyword */, node.pos, writeKeyword, node);
+            emitTokenWithComment(112 /* TypeOfKeyword */, node.pos, writeKeyword, node);
             writeSpace();
             emitExpression(node.expression, parenthesizer.parenthesizeOperandOfPrefixUnary);
         }
         function emitVoidExpression(node) {
-            emitTokenWithComment(113 /* VoidKeyword */, node.pos, writeKeyword, node);
+            emitTokenWithComment(114 /* VoidKeyword */, node.pos, writeKeyword, node);
             writeSpace();
             emitExpression(node.expression, parenthesizer.parenthesizeOperandOfPrefixUnary);
         }
         function emitAwaitExpression(node) {
-            emitTokenWithComment(130 /* AwaitKeyword */, node.pos, writeKeyword, node);
+            emitTokenWithComment(131 /* AwaitKeyword */, node.pos, writeKeyword, node);
             writeSpace();
             emitExpression(node.expression, parenthesizer.parenthesizeOperandOfPrefixUnary);
         }
@@ -105316,7 +107522,7 @@
             // expression a prefix increment whose operand is a plus expression - (++(+x))
             // The same is true of minus of course.
             var operand = node.operand;
-            return operand.kind === 215 /* PrefixUnaryExpression */
+            return operand.kind === 217 /* PrefixUnaryExpression */
                 && ((node.operator === 39 /* PlusToken */ && (operand.operator === 39 /* PlusToken */ || operand.operator === 45 /* PlusPlusToken */))
                     || (node.operator === 40 /* MinusToken */ && (operand.operator === 40 /* MinusToken */ || operand.operator === 46 /* MinusMinusToken */)));
         }
@@ -105364,7 +107570,7 @@
                 var linesAfterOperator = getLinesBetweenNodes(node, operatorToken, node.right);
                 writeLinesAndIndent(linesBeforeOperator, isCommaOperator);
                 emitLeadingCommentsOfPosition(operatorToken.pos);
-                writeTokenNode(operatorToken, operatorToken.kind === 100 /* InKeyword */ ? writeKeyword : writeOperator);
+                writeTokenNode(operatorToken, operatorToken.kind === 101 /* InKeyword */ ? writeKeyword : writeOperator);
                 emitTrailingCommentsOfPosition(operatorToken.end, /*prefixSpace*/ true); // Binary operators should have a space before the comment starts
                 writeLinesAndIndent(linesAfterOperator, /*writeSpaceIfNotIndenting*/ true);
             }
@@ -105435,7 +107641,7 @@
             emitList(node, node.templateSpans, 262144 /* TemplateExpressionSpans */);
         }
         function emitYieldExpression(node) {
-            emitTokenWithComment(124 /* YieldKeyword */, node.pos, writeKeyword, node);
+            emitTokenWithComment(125 /* YieldKeyword */, node.pos, writeKeyword, node);
             emit(node.asteriskToken);
             emitExpressionWithLeadingSpace(node.expression, parenthesizer.parenthesizeExpressionForDisallowedComma);
         }
@@ -105512,7 +107718,7 @@
             }
         }
         function emitIfStatement(node) {
-            var openParenPos = emitTokenWithComment(98 /* IfKeyword */, node.pos, writeKeyword, node);
+            var openParenPos = emitTokenWithComment(99 /* IfKeyword */, node.pos, writeKeyword, node);
             writeSpace();
             emitTokenWithComment(20 /* OpenParenToken */, openParenPos, writePunctuation, node);
             emitExpression(node.expression);
@@ -105520,8 +107726,8 @@
             emitEmbeddedStatement(node, node.thenStatement);
             if (node.elseStatement) {
                 writeLineOrSpace(node, node.thenStatement, node.elseStatement);
-                emitTokenWithComment(90 /* ElseKeyword */, node.thenStatement.end, writeKeyword, node);
-                if (node.elseStatement.kind === 235 /* IfStatement */) {
+                emitTokenWithComment(91 /* ElseKeyword */, node.thenStatement.end, writeKeyword, node);
+                if (node.elseStatement.kind === 237 /* IfStatement */) {
                     writeSpace();
                     emit(node.elseStatement);
                 }
@@ -105531,14 +107737,14 @@
             }
         }
         function emitWhileClause(node, startPos) {
-            var openParenPos = emitTokenWithComment(114 /* WhileKeyword */, startPos, writeKeyword, node);
+            var openParenPos = emitTokenWithComment(115 /* WhileKeyword */, startPos, writeKeyword, node);
             writeSpace();
             emitTokenWithComment(20 /* OpenParenToken */, openParenPos, writePunctuation, node);
             emitExpression(node.expression);
             emitTokenWithComment(21 /* CloseParenToken */, node.expression.end, writePunctuation, node);
         }
         function emitDoStatement(node) {
-            emitTokenWithComment(89 /* DoKeyword */, node.pos, writeKeyword, node);
+            emitTokenWithComment(90 /* DoKeyword */, node.pos, writeKeyword, node);
             emitEmbeddedStatement(node, node.statement);
             if (ts.isBlock(node.statement) && !preserveSourceNewlines) {
                 writeSpace();
@@ -105554,7 +107760,7 @@
             emitEmbeddedStatement(node, node.statement);
         }
         function emitForStatement(node) {
-            var openParenPos = emitTokenWithComment(96 /* ForKeyword */, node.pos, writeKeyword, node);
+            var openParenPos = emitTokenWithComment(97 /* ForKeyword */, node.pos, writeKeyword, node);
             writeSpace();
             var pos = emitTokenWithComment(20 /* OpenParenToken */, openParenPos, writePunctuation, /*contextNode*/ node);
             emitForBinding(node.initializer);
@@ -105566,25 +107772,25 @@
             emitEmbeddedStatement(node, node.statement);
         }
         function emitForInStatement(node) {
-            var openParenPos = emitTokenWithComment(96 /* ForKeyword */, node.pos, writeKeyword, node);
+            var openParenPos = emitTokenWithComment(97 /* ForKeyword */, node.pos, writeKeyword, node);
             writeSpace();
             emitTokenWithComment(20 /* OpenParenToken */, openParenPos, writePunctuation, node);
             emitForBinding(node.initializer);
             writeSpace();
-            emitTokenWithComment(100 /* InKeyword */, node.initializer.end, writeKeyword, node);
+            emitTokenWithComment(101 /* InKeyword */, node.initializer.end, writeKeyword, node);
             writeSpace();
             emitExpression(node.expression);
             emitTokenWithComment(21 /* CloseParenToken */, node.expression.end, writePunctuation, node);
             emitEmbeddedStatement(node, node.statement);
         }
         function emitForOfStatement(node) {
-            var openParenPos = emitTokenWithComment(96 /* ForKeyword */, node.pos, writeKeyword, node);
+            var openParenPos = emitTokenWithComment(97 /* ForKeyword */, node.pos, writeKeyword, node);
             writeSpace();
             emitWithTrailingSpace(node.awaitModifier);
             emitTokenWithComment(20 /* OpenParenToken */, openParenPos, writePunctuation, node);
             emitForBinding(node.initializer);
             writeSpace();
-            emitTokenWithComment(157 /* OfKeyword */, node.initializer.end, writeKeyword, node);
+            emitTokenWithComment(158 /* OfKeyword */, node.initializer.end, writeKeyword, node);
             writeSpace();
             emitExpression(node.expression);
             emitTokenWithComment(21 /* CloseParenToken */, node.expression.end, writePunctuation, node);
@@ -105592,7 +107798,7 @@
         }
         function emitForBinding(node) {
             if (node !== undefined) {
-                if (node.kind === 251 /* VariableDeclarationList */) {
+                if (node.kind === 253 /* VariableDeclarationList */) {
                     emit(node);
                 }
                 else {
@@ -105601,12 +107807,12 @@
             }
         }
         function emitContinueStatement(node) {
-            emitTokenWithComment(85 /* ContinueKeyword */, node.pos, writeKeyword, node);
+            emitTokenWithComment(86 /* ContinueKeyword */, node.pos, writeKeyword, node);
             emitWithLeadingSpace(node.label);
             writeTrailingSemicolon();
         }
         function emitBreakStatement(node) {
-            emitTokenWithComment(80 /* BreakKeyword */, node.pos, writeKeyword, node);
+            emitTokenWithComment(81 /* BreakKeyword */, node.pos, writeKeyword, node);
             emitWithLeadingSpace(node.label);
             writeTrailingSemicolon();
         }
@@ -105629,18 +107835,18 @@
             }
             pos = writeTokenText(token, writer, pos);
             if (isSimilarNode && contextNode.end !== pos) {
-                var isJsxExprContext = contextNode.kind === 284 /* JsxExpression */;
+                var isJsxExprContext = contextNode.kind === 286 /* JsxExpression */;
                 emitTrailingCommentsOfPosition(pos, /*prefixSpace*/ !isJsxExprContext, /*forceNoNewline*/ isJsxExprContext);
             }
             return pos;
         }
         function emitReturnStatement(node) {
-            emitTokenWithComment(104 /* ReturnKeyword */, node.pos, writeKeyword, /*contextNode*/ node);
+            emitTokenWithComment(105 /* ReturnKeyword */, node.pos, writeKeyword, /*contextNode*/ node);
             emitExpressionWithLeadingSpace(node.expression);
             writeTrailingSemicolon();
         }
         function emitWithStatement(node) {
-            var openParenPos = emitTokenWithComment(115 /* WithKeyword */, node.pos, writeKeyword, node);
+            var openParenPos = emitTokenWithComment(116 /* WithKeyword */, node.pos, writeKeyword, node);
             writeSpace();
             emitTokenWithComment(20 /* OpenParenToken */, openParenPos, writePunctuation, node);
             emitExpression(node.expression);
@@ -105648,7 +107854,7 @@
             emitEmbeddedStatement(node, node.statement);
         }
         function emitSwitchStatement(node) {
-            var openParenPos = emitTokenWithComment(106 /* SwitchKeyword */, node.pos, writeKeyword, node);
+            var openParenPos = emitTokenWithComment(107 /* SwitchKeyword */, node.pos, writeKeyword, node);
             writeSpace();
             emitTokenWithComment(20 /* OpenParenToken */, openParenPos, writePunctuation, node);
             emitExpression(node.expression);
@@ -105663,12 +107869,12 @@
             emit(node.statement);
         }
         function emitThrowStatement(node) {
-            emitTokenWithComment(108 /* ThrowKeyword */, node.pos, writeKeyword, node);
+            emitTokenWithComment(109 /* ThrowKeyword */, node.pos, writeKeyword, node);
             emitExpressionWithLeadingSpace(node.expression);
             writeTrailingSemicolon();
         }
         function emitTryStatement(node) {
-            emitTokenWithComment(110 /* TryKeyword */, node.pos, writeKeyword, node);
+            emitTokenWithComment(111 /* TryKeyword */, node.pos, writeKeyword, node);
             writeSpace();
             emit(node.tryBlock);
             if (node.catchClause) {
@@ -105677,13 +107883,13 @@
             }
             if (node.finallyBlock) {
                 writeLineOrSpace(node, node.catchClause || node.tryBlock, node.finallyBlock);
-                emitTokenWithComment(95 /* FinallyKeyword */, (node.catchClause || node.tryBlock).end, writeKeyword, node);
+                emitTokenWithComment(96 /* FinallyKeyword */, (node.catchClause || node.tryBlock).end, writeKeyword, node);
                 writeSpace();
                 emit(node.finallyBlock);
             }
         }
         function emitDebuggerStatement(node) {
-            writeToken(86 /* DebuggerKeyword */, node.pos, writeKeyword);
+            writeToken(87 /* DebuggerKeyword */, node.pos, writeKeyword);
             writeTrailingSemicolon();
         }
         //
@@ -105904,21 +108110,21 @@
         }
         function emitImportEqualsDeclaration(node) {
             emitModifiers(node, node.modifiers);
-            emitTokenWithComment(99 /* ImportKeyword */, node.modifiers ? node.modifiers.end : node.pos, writeKeyword, node);
+            emitTokenWithComment(100 /* ImportKeyword */, node.modifiers ? node.modifiers.end : node.pos, writeKeyword, node);
             writeSpace();
             if (node.isTypeOnly) {
-                emitTokenWithComment(149 /* TypeKeyword */, node.pos, writeKeyword, node);
+                emitTokenWithComment(150 /* TypeKeyword */, node.pos, writeKeyword, node);
                 writeSpace();
             }
             emit(node.name);
             writeSpace();
-            emitTokenWithComment(62 /* EqualsToken */, node.name.end, writePunctuation, node);
+            emitTokenWithComment(63 /* EqualsToken */, node.name.end, writePunctuation, node);
             writeSpace();
             emitModuleReference(node.moduleReference);
             writeTrailingSemicolon();
         }
         function emitModuleReference(node) {
-            if (node.kind === 78 /* Identifier */) {
+            if (node.kind === 79 /* Identifier */) {
                 emitExpression(node);
             }
             else {
@@ -105927,12 +108133,12 @@
         }
         function emitImportDeclaration(node) {
             emitModifiers(node, node.modifiers);
-            emitTokenWithComment(99 /* ImportKeyword */, node.modifiers ? node.modifiers.end : node.pos, writeKeyword, node);
+            emitTokenWithComment(100 /* ImportKeyword */, node.modifiers ? node.modifiers.end : node.pos, writeKeyword, node);
             writeSpace();
             if (node.importClause) {
                 emit(node.importClause);
                 writeSpace();
-                emitTokenWithComment(153 /* FromKeyword */, node.importClause.end, writeKeyword, node);
+                emitTokenWithComment(154 /* FromKeyword */, node.importClause.end, writeKeyword, node);
                 writeSpace();
             }
             emitExpression(node.moduleSpecifier);
@@ -105940,7 +108146,7 @@
         }
         function emitImportClause(node) {
             if (node.isTypeOnly) {
-                emitTokenWithComment(149 /* TypeKeyword */, node.pos, writeKeyword, node);
+                emitTokenWithComment(150 /* TypeKeyword */, node.pos, writeKeyword, node);
                 writeSpace();
             }
             emit(node.name);
@@ -105953,7 +108159,7 @@
         function emitNamespaceImport(node) {
             var asPos = emitTokenWithComment(41 /* AsteriskToken */, node.pos, writePunctuation, node);
             writeSpace();
-            emitTokenWithComment(126 /* AsKeyword */, asPos, writeKeyword, node);
+            emitTokenWithComment(127 /* AsKeyword */, asPos, writeKeyword, node);
             writeSpace();
             emit(node.name);
         }
@@ -105964,25 +108170,25 @@
             emitImportOrExportSpecifier(node);
         }
         function emitExportAssignment(node) {
-            var nextPos = emitTokenWithComment(92 /* ExportKeyword */, node.pos, writeKeyword, node);
+            var nextPos = emitTokenWithComment(93 /* ExportKeyword */, node.pos, writeKeyword, node);
             writeSpace();
             if (node.isExportEquals) {
-                emitTokenWithComment(62 /* EqualsToken */, nextPos, writeOperator, node);
+                emitTokenWithComment(63 /* EqualsToken */, nextPos, writeOperator, node);
             }
             else {
-                emitTokenWithComment(87 /* DefaultKeyword */, nextPos, writeKeyword, node);
+                emitTokenWithComment(88 /* DefaultKeyword */, nextPos, writeKeyword, node);
             }
             writeSpace();
             emitExpression(node.expression, node.isExportEquals ?
-                parenthesizer.getParenthesizeRightSideOfBinaryForOperator(62 /* EqualsToken */) :
+                parenthesizer.getParenthesizeRightSideOfBinaryForOperator(63 /* EqualsToken */) :
                 parenthesizer.parenthesizeExpressionOfExportDefault);
             writeTrailingSemicolon();
         }
         function emitExportDeclaration(node) {
-            var nextPos = emitTokenWithComment(92 /* ExportKeyword */, node.pos, writeKeyword, node);
+            var nextPos = emitTokenWithComment(93 /* ExportKeyword */, node.pos, writeKeyword, node);
             writeSpace();
             if (node.isTypeOnly) {
-                nextPos = emitTokenWithComment(149 /* TypeKeyword */, nextPos, writeKeyword, node);
+                nextPos = emitTokenWithComment(150 /* TypeKeyword */, nextPos, writeKeyword, node);
                 writeSpace();
             }
             if (node.exportClause) {
@@ -105994,18 +108200,18 @@
             if (node.moduleSpecifier) {
                 writeSpace();
                 var fromPos = node.exportClause ? node.exportClause.end : nextPos;
-                emitTokenWithComment(153 /* FromKeyword */, fromPos, writeKeyword, node);
+                emitTokenWithComment(154 /* FromKeyword */, fromPos, writeKeyword, node);
                 writeSpace();
                 emitExpression(node.moduleSpecifier);
             }
             writeTrailingSemicolon();
         }
         function emitNamespaceExportDeclaration(node) {
-            var nextPos = emitTokenWithComment(92 /* ExportKeyword */, node.pos, writeKeyword, node);
+            var nextPos = emitTokenWithComment(93 /* ExportKeyword */, node.pos, writeKeyword, node);
             writeSpace();
-            nextPos = emitTokenWithComment(126 /* AsKeyword */, nextPos, writeKeyword, node);
+            nextPos = emitTokenWithComment(127 /* AsKeyword */, nextPos, writeKeyword, node);
             writeSpace();
-            nextPos = emitTokenWithComment(140 /* NamespaceKeyword */, nextPos, writeKeyword, node);
+            nextPos = emitTokenWithComment(141 /* NamespaceKeyword */, nextPos, writeKeyword, node);
             writeSpace();
             emit(node.name);
             writeTrailingSemicolon();
@@ -106013,7 +108219,7 @@
         function emitNamespaceExport(node) {
             var asPos = emitTokenWithComment(41 /* AsteriskToken */, node.pos, writePunctuation, node);
             writeSpace();
-            emitTokenWithComment(126 /* AsKeyword */, asPos, writeKeyword, node);
+            emitTokenWithComment(127 /* AsKeyword */, asPos, writeKeyword, node);
             writeSpace();
             emit(node.name);
         }
@@ -106032,7 +108238,7 @@
             if (node.propertyName) {
                 emit(node.propertyName);
                 writeSpace();
-                emitTokenWithComment(126 /* AsKeyword */, node.propertyName.end, writeKeyword, node);
+                emitTokenWithComment(127 /* AsKeyword */, node.propertyName.end, writeKeyword, node);
                 writeSpace();
             }
             emit(node.name);
@@ -106134,7 +108340,7 @@
             }
         }
         function emitJsxTagName(node) {
-            if (node.kind === 78 /* Identifier */) {
+            if (node.kind === 79 /* Identifier */) {
                 emitExpression(node);
             }
             else {
@@ -106145,13 +108351,13 @@
         // Clauses
         //
         function emitCaseClause(node) {
-            emitTokenWithComment(81 /* CaseKeyword */, node.pos, writeKeyword, node);
+            emitTokenWithComment(82 /* CaseKeyword */, node.pos, writeKeyword, node);
             writeSpace();
             emitExpression(node.expression, parenthesizer.parenthesizeExpressionForDisallowedComma);
             emitCaseOrDefaultClauseRest(node, node.statements, node.expression.end);
         }
         function emitDefaultClause(node) {
-            var pos = emitTokenWithComment(87 /* DefaultKeyword */, node.pos, writeKeyword, node);
+            var pos = emitTokenWithComment(88 /* DefaultKeyword */, node.pos, writeKeyword, node);
             emitCaseOrDefaultClauseRest(node, node.statements, pos);
         }
         function emitCaseOrDefaultClauseRest(parentNode, statements, colonPos) {
@@ -106179,7 +108385,7 @@
             emitList(node, node.types, 528 /* HeritageClauseTypes */);
         }
         function emitCatchClause(node) {
-            var openParenPos = emitTokenWithComment(82 /* CatchKeyword */, node.pos, writeKeyword, node);
+            var openParenPos = emitTokenWithComment(83 /* CatchKeyword */, node.pos, writeKeyword, node);
             writeSpace();
             if (node.variableDeclaration) {
                 emitTokenWithComment(20 /* OpenParenToken */, openParenPos, writePunctuation, node);
@@ -106252,7 +108458,7 @@
                 }
             }
             if (node.tags) {
-                if (node.tags.length === 1 && node.tags[0].kind === 333 /* JSDocTypeTag */ && !node.comment) {
+                if (node.tags.length === 1 && node.tags[0].kind === 338 /* JSDocTypeTag */ && !node.comment) {
                     writeSpace();
                     emit(node.tags[0]);
                 }
@@ -106297,7 +108503,7 @@
         function emitJSDocTypedefTag(tag) {
             emitJSDocTagName(tag.tagName);
             if (tag.typeExpression) {
-                if (tag.typeExpression.kind === 302 /* JSDocTypeExpression */) {
+                if (tag.typeExpression.kind === 304 /* JSDocTypeExpression */) {
                     emitJSDocTypeExpression(tag.typeExpression);
                 }
                 else {
@@ -106316,7 +108522,7 @@
                 emit(tag.fullName);
             }
             emitJSDocComment(tag.comment);
-            if (tag.typeExpression && tag.typeExpression.kind === 314 /* JSDocTypeLiteral */) {
+            if (tag.typeExpression && tag.typeExpression.kind === 317 /* JSDocTypeLiteral */) {
                 emitJSDocTypeLiteral(tag.typeExpression);
             }
         }
@@ -106443,16 +108649,16 @@
                     writeLine();
                 }
             }
-            for (var _c = 0, files_1 = files; _c < files_1.length; _c++) {
-                var directive = files_1[_c];
+            for (var _c = 0, files_2 = files; _c < files_2.length; _c++) {
+                var directive = files_2[_c];
                 var pos = writer.getTextPos();
                 writeComment("/// <reference path=\"" + directive.fileName + "\" />");
                 if (bundleFileInfo)
                     bundleFileInfo.sections.push({ pos: pos, end: writer.getTextPos(), kind: "reference" /* Reference */, data: directive.fileName });
                 writeLine();
             }
-            for (var _d = 0, types_25 = types; _d < types_25.length; _d++) {
-                var directive = types_25[_d];
+            for (var _d = 0, types_24 = types; _d < types_24.length; _d++) {
+                var directive = types_24[_d];
                 var pos = writer.getTextPos();
                 writeComment("/// <reference types=\"" + directive.fileName + "\" />");
                 if (bundleFileInfo)
@@ -106632,7 +108838,7 @@
         function emitInitializer(node, equalCommentStartPos, container, parenthesizerRule) {
             if (node) {
                 writeSpace();
-                emitTokenWithComment(62 /* EqualsToken */, equalCommentStartPos, writeOperator, container);
+                emitTokenWithComment(63 /* EqualsToken */, equalCommentStartPos, writeOperator, container);
                 writeSpace();
                 emitExpression(node, parenthesizerRule);
             }
@@ -107203,7 +109409,7 @@
                 && ts.rangeEndIsOnSameLineAsRangeStart(block, block, currentSourceFile);
         }
         function skipSynthesizedParentheses(node) {
-            while (node.kind === 208 /* ParenthesizedExpression */ && ts.nodeIsSynthesized(node)) {
+            while (node.kind === 210 /* ParenthesizedExpression */ && ts.nodeIsSynthesized(node)) {
                 node = node.expression;
             }
             return node;
@@ -107273,84 +109479,84 @@
             if (!node)
                 return;
             switch (node.kind) {
-                case 231 /* Block */:
+                case 233 /* Block */:
                     ts.forEach(node.statements, generateNames);
                     break;
-                case 246 /* LabeledStatement */:
-                case 244 /* WithStatement */:
-                case 236 /* DoStatement */:
-                case 237 /* WhileStatement */:
+                case 248 /* LabeledStatement */:
+                case 246 /* WithStatement */:
+                case 238 /* DoStatement */:
+                case 239 /* WhileStatement */:
                     generateNames(node.statement);
                     break;
-                case 235 /* IfStatement */:
+                case 237 /* IfStatement */:
                     generateNames(node.thenStatement);
                     generateNames(node.elseStatement);
                     break;
-                case 238 /* ForStatement */:
-                case 240 /* ForOfStatement */:
-                case 239 /* ForInStatement */:
+                case 240 /* ForStatement */:
+                case 242 /* ForOfStatement */:
+                case 241 /* ForInStatement */:
                     generateNames(node.initializer);
                     generateNames(node.statement);
                     break;
-                case 245 /* SwitchStatement */:
+                case 247 /* SwitchStatement */:
                     generateNames(node.caseBlock);
                     break;
-                case 259 /* CaseBlock */:
+                case 261 /* CaseBlock */:
                     ts.forEach(node.clauses, generateNames);
                     break;
-                case 285 /* CaseClause */:
-                case 286 /* DefaultClause */:
+                case 287 /* CaseClause */:
+                case 288 /* DefaultClause */:
                     ts.forEach(node.statements, generateNames);
                     break;
-                case 248 /* TryStatement */:
+                case 250 /* TryStatement */:
                     generateNames(node.tryBlock);
                     generateNames(node.catchClause);
                     generateNames(node.finallyBlock);
                     break;
-                case 288 /* CatchClause */:
+                case 290 /* CatchClause */:
                     generateNames(node.variableDeclaration);
                     generateNames(node.block);
                     break;
-                case 233 /* VariableStatement */:
+                case 235 /* VariableStatement */:
                     generateNames(node.declarationList);
                     break;
-                case 251 /* VariableDeclarationList */:
+                case 253 /* VariableDeclarationList */:
                     ts.forEach(node.declarations, generateNames);
                     break;
-                case 250 /* VariableDeclaration */:
-                case 161 /* Parameter */:
-                case 199 /* BindingElement */:
-                case 253 /* ClassDeclaration */:
+                case 252 /* VariableDeclaration */:
+                case 162 /* Parameter */:
+                case 201 /* BindingElement */:
+                case 255 /* ClassDeclaration */:
                     generateNameIfNeeded(node.name);
                     break;
-                case 252 /* FunctionDeclaration */:
+                case 254 /* FunctionDeclaration */:
                     generateNameIfNeeded(node.name);
                     if (ts.getEmitFlags(node) & 524288 /* ReuseTempVariableScope */) {
                         ts.forEach(node.parameters, generateNames);
                         generateNames(node.body);
                     }
                     break;
-                case 197 /* ObjectBindingPattern */:
-                case 198 /* ArrayBindingPattern */:
+                case 199 /* ObjectBindingPattern */:
+                case 200 /* ArrayBindingPattern */:
                     ts.forEach(node.elements, generateNames);
                     break;
-                case 262 /* ImportDeclaration */:
+                case 264 /* ImportDeclaration */:
                     generateNames(node.importClause);
                     break;
-                case 263 /* ImportClause */:
+                case 265 /* ImportClause */:
                     generateNameIfNeeded(node.name);
                     generateNames(node.namedBindings);
                     break;
-                case 264 /* NamespaceImport */:
+                case 266 /* NamespaceImport */:
                     generateNameIfNeeded(node.name);
                     break;
-                case 270 /* NamespaceExport */:
+                case 272 /* NamespaceExport */:
                     generateNameIfNeeded(node.name);
                     break;
-                case 265 /* NamedImports */:
+                case 267 /* NamedImports */:
                     ts.forEach(node.elements, generateNames);
                     break;
-                case 266 /* ImportSpecifier */:
+                case 268 /* ImportSpecifier */:
                     generateNameIfNeeded(node.propertyName || node.name);
                     break;
             }
@@ -107359,12 +109565,12 @@
             if (!node)
                 return;
             switch (node.kind) {
-                case 289 /* PropertyAssignment */:
-                case 290 /* ShorthandPropertyAssignment */:
-                case 164 /* PropertyDeclaration */:
-                case 166 /* MethodDeclaration */:
-                case 168 /* GetAccessor */:
-                case 169 /* SetAccessor */:
+                case 291 /* PropertyAssignment */:
+                case 292 /* ShorthandPropertyAssignment */:
+                case 165 /* PropertyDeclaration */:
+                case 167 /* MethodDeclaration */:
+                case 170 /* GetAccessor */:
+                case 171 /* SetAccessor */:
                     generateNameIfNeeded(node.name);
                     break;
             }
@@ -107544,25 +109750,25 @@
          */
         function generateNameForNode(node, flags) {
             switch (node.kind) {
-                case 78 /* Identifier */:
+                case 79 /* Identifier */:
                     return makeUniqueName(getTextOfNode(node), isUniqueName, !!(flags & 16 /* Optimistic */), !!(flags & 8 /* ReservedInNestedScopes */));
-                case 257 /* ModuleDeclaration */:
-                case 256 /* EnumDeclaration */:
+                case 259 /* ModuleDeclaration */:
+                case 258 /* EnumDeclaration */:
                     return generateNameForModuleOrEnum(node);
-                case 262 /* ImportDeclaration */:
-                case 268 /* ExportDeclaration */:
+                case 264 /* ImportDeclaration */:
+                case 270 /* ExportDeclaration */:
                     return generateNameForImportOrExportDeclaration(node);
-                case 252 /* FunctionDeclaration */:
-                case 253 /* ClassDeclaration */:
-                case 267 /* ExportAssignment */:
+                case 254 /* FunctionDeclaration */:
+                case 255 /* ClassDeclaration */:
+                case 269 /* ExportAssignment */:
                     return generateNameForExportDefault();
-                case 222 /* ClassExpression */:
+                case 224 /* ClassExpression */:
                     return generateNameForClassExpression();
-                case 166 /* MethodDeclaration */:
-                case 168 /* GetAccessor */:
-                case 169 /* SetAccessor */:
+                case 167 /* MethodDeclaration */:
+                case 170 /* GetAccessor */:
+                case 171 /* SetAccessor */:
                     return generateNameForMethodOrAccessor(node);
-                case 159 /* ComputedPropertyName */:
+                case 160 /* ComputedPropertyName */:
                     return makeTempVariableName(0 /* Auto */, /*reserveInNestedScopes*/ true);
                 default:
                     return makeTempVariableName(0 /* Auto */);
@@ -107643,7 +109849,7 @@
                 // Emit leading comments if the position is not synthesized and the node
                 // has not opted out from emitting leading comments.
                 if (!skipLeadingComments) {
-                    emitLeadingComments(pos, /*isEmittedNode*/ node.kind !== 339 /* NotEmittedStatement */);
+                    emitLeadingComments(pos, /*isEmittedNode*/ node.kind !== 344 /* NotEmittedStatement */);
                 }
                 if (!skipLeadingComments || (pos >= 0 && (emitFlags & 512 /* NoLeadingComments */) !== 0)) {
                     // Advance the container position if comments get emitted or if they've been disabled explicitly using NoLeadingComments.
@@ -107654,7 +109860,7 @@
                     containerEnd = end;
                     // To avoid invalid comment emit in a down-level binding pattern, we
                     // keep track of the last declaration list container's end
-                    if (node.kind === 251 /* VariableDeclarationList */) {
+                    if (node.kind === 253 /* VariableDeclarationList */) {
                         declarationListContainerEnd = end;
                     }
                 }
@@ -107673,7 +109879,7 @@
                 declarationListContainerEnd = savedDeclarationListContainerEnd;
                 // Emit trailing comments if the position is not synthesized and the node
                 // has not opted out from emitting leading comments and is an emitted node.
-                if (!skipTrailingComments && node.kind !== 339 /* NotEmittedStatement */) {
+                if (!skipTrailingComments && node.kind !== 344 /* NotEmittedStatement */) {
                     emitTrailingComments(end);
                 }
             }
@@ -107948,7 +110154,7 @@
             }
             else {
                 var source = sourceMapRange.source || sourceMapSource;
-                if (node.kind !== 339 /* NotEmittedStatement */
+                if (node.kind !== 344 /* NotEmittedStatement */
                     && (emitFlags & 16 /* NoLeadingSourceMap */) === 0
                     && sourceMapRange.pos >= 0) {
                     emitSourcePos(sourceMapRange.source || sourceMapSource, skipSourceTrivia(source, sourceMapRange.pos));
@@ -107966,7 +110172,7 @@
                 if (emitFlags & 64 /* NoNestedSourceMaps */) {
                     sourceMapsDisabled = false;
                 }
-                if (node.kind !== 339 /* NotEmittedStatement */
+                if (node.kind !== 344 /* NotEmittedStatement */
                     && (emitFlags & 32 /* NoTrailingSourceMap */) === 0
                     && sourceMapRange.end >= 0) {
                     emitSourcePos(sourceMapRange.source || sourceMapSource, sourceMapRange.end);
@@ -108216,7 +110422,7 @@
             var rootResult = tryReadDirectory(rootDir, rootDirPath);
             var rootSymLinkResult;
             if (rootResult !== undefined) {
-                return ts.matchFiles(rootDir, extensions, excludes, includes, useCaseSensitiveFileNames, currentDirectory, depth, getFileSystemEntries, realpath);
+                return ts.matchFiles(rootDir, extensions, excludes, includes, useCaseSensitiveFileNames, currentDirectory, depth, getFileSystemEntries, realpath, directoryExists);
             }
             return host.readDirectory(rootDir, extensions, excludes, includes, depth);
             function getFileSystemEntries(dir) {
@@ -108365,6 +110571,17 @@
     }
     ts.cleanExtendedConfigCache = cleanExtendedConfigCache;
     /**
+     * Updates watchers based on the package json files used in module resolution
+     */
+    function updatePackageJsonWatch(lookups, packageJsonWatches, createPackageJsonWatch) {
+        var newMap = new ts.Map(lookups);
+        ts.mutateMap(packageJsonWatches, newMap, {
+            createNewValue: createPackageJsonWatch,
+            onDeleteValue: ts.closeFileWatcher
+        });
+    }
+    ts.updatePackageJsonWatch = updatePackageJsonWatch;
+    /**
      * Updates the existing missing file watches with the new set of missing files after new program is created
      */
     function updateMissingFilePathsWatch(program, missingFileWatches, createMissingFileWatch) {
@@ -108438,7 +110655,7 @@
             return false;
         // We want to ignore emit file check if file is not going to be emitted next to source file
         // In that case we follow config file inclusion rules
-        if (options.outFile || options.outDir)
+        if (ts.outFile(options) || options.outDir)
             return false;
         // File if emitted next to input needs to be ignored
         if (ts.fileExtensionIs(fileOrDirectoryPath, ".d.ts" /* Dts */)) {
@@ -108565,7 +110782,7 @@
                 var triggerredInfo = (key === "watchFile" ? "FileWatcher" : "DirectoryWatcher") + ":: Triggered with " + args[0] + " " + (args[1] !== undefined ? args[1] : "") + ":: " + getWatchInfo(file, flags, options, detailInfo1, detailInfo2, getDetailWatchInfo);
                 log(triggerredInfo);
                 var start = ts.timestamp();
-                cb.call.apply(cb, __spreadArray([/*thisArg*/ undefined], args));
+                cb.call.apply(cb, __spreadArray([/*thisArg*/ undefined], args, false));
                 var elapsed = ts.timestamp() - start;
                 log("Elapsed:: " + elapsed + "ms " + triggerredInfo);
             }, flags, options, detailInfo1, detailInfo2); };
@@ -108937,7 +111154,7 @@
             var lineStart = ts.getPositionOfLineAndCharacter(file, i, 0);
             var lineEnd = i < lastLineInFile ? ts.getPositionOfLineAndCharacter(file, i + 1, 0) : file.text.length;
             var lineContent = file.text.slice(lineStart, lineEnd);
-            lineContent = lineContent.replace(/\s+$/g, ""); // trim from end
+            lineContent = ts.trimStringEnd(lineContent); // trim from end
             lineContent = lineContent.replace(/\t/g, " "); // convert tabs to single spaces
             // Output the gutter and the actual contents of the line.
             context += indent + formatColorAndReset(ts.padLeft(i + 1 + "", gutterWidth), gutterStyleSequence) + gutterSeparator;
@@ -109211,7 +111428,7 @@
     }
     ts.isProgramUptoDate = isProgramUptoDate;
     function getConfigFileParsingDiagnostics(configFileParseResult) {
-        return configFileParseResult.options.configFile ? __spreadArray(__spreadArray([], configFileParseResult.options.configFile.parseDiagnostics), configFileParseResult.errors) :
+        return configFileParseResult.options.configFile ? __spreadArray(__spreadArray([], configFileParseResult.options.configFile.parseDiagnostics, true), configFileParseResult.errors, true) :
             configFileParseResult.errors;
     }
     ts.getConfigFileParsingDiagnostics = getConfigFileParsingDiagnostics;
@@ -109223,10 +111440,7 @@
             return false;
         // If any compiler options change, we can't reuse old source file even if version match
         // The change in options like these could result in change in syntax tree or `sourceFile.bindDiagnostics`.
-        var oldOptions = program.getCompilerOptions();
-        return !!ts.sourceFileAffectingCompilerOptions.some(function (option) {
-            return !ts.isJsonEqual(ts.getCompilerOptionValue(oldOptions, option), ts.getCompilerOptionValue(newOptions, option));
-        });
+        return ts.optionsHaveChanges(program.getCompilerOptions(), newOptions, ts.sourceFileAffectingCompilerOptions);
     }
     function createCreateProgramOptions(rootNames, options, host, oldProgram, configFileParsingDiagnostics) {
         return {
@@ -109321,6 +111535,7 @@
         var sourceFileToPackageName = new ts.Map();
         // Key is a file name. Value is the (non-empty, or undefined) list of files that redirect to it.
         var redirectTargetsMap = ts.createMultiMap();
+        var usesUriStyleNodeCoreModules = false;
         /**
          * map with
          * - SourceFile if present
@@ -109476,6 +111691,7 @@
             getSourceFileByPath: getSourceFileByPath,
             getSourceFiles: function () { return files; },
             getMissingFilePaths: function () { return missingFilePaths; },
+            getModuleResolutionCache: function () { return moduleResolutionCache; },
             getFilesByNameMap: function () { return filesByName; },
             getCompilerOptions: function () { return options; },
             getSyntacticDiagnostics: getSyntacticDiagnostics,
@@ -109508,6 +111724,7 @@
             getLibFileFromReference: getLibFileFromReference,
             sourceFileToPackageName: sourceFileToPackageName,
             redirectTargetsMap: redirectTargetsMap,
+            usesUriStyleNodeCoreModules: usesUriStyleNodeCoreModules,
             isEmittedFile: isEmittedFile,
             getConfigFileParsingDiagnostics: getConfigFileParsingDiagnostics,
             getResolvedModuleWithFailedLookupLocationsFromCache: getResolvedModuleWithFailedLookupLocationsFromCache,
@@ -109535,7 +111752,7 @@
                     return programDiagnostics.add(createDiagnosticExplainingFile(diagnostic.file && getSourceFileByPath(diagnostic.file), diagnostic.fileProcessingReason, diagnostic.diagnostic, diagnostic.args || ts.emptyArray));
                 case 0 /* FilePreprocessingReferencedDiagnostic */:
                     var _a = getReferencedFileLocation(getSourceFileByPath, diagnostic.reason), file = _a.file, pos = _a.pos, end = _a.end;
-                    return programDiagnostics.add(ts.createFileDiagnostic.apply(void 0, __spreadArray([file, ts.Debug.checkDefined(pos), ts.Debug.checkDefined(end) - pos, diagnostic.diagnostic], diagnostic.args || ts.emptyArray)));
+                    return programDiagnostics.add(ts.createFileDiagnostic.apply(void 0, __spreadArray([file, ts.Debug.checkDefined(pos), ts.Debug.checkDefined(end) - pos, diagnostic.diagnostic], diagnostic.args || ts.emptyArray, false)));
                 default:
                     ts.Debug.assertNever(diagnostic);
             }
@@ -109638,8 +111855,8 @@
                 // Initialize a checker so that all our files are bound.
                 getTypeChecker();
                 classifiableNames = new ts.Set();
-                for (var _i = 0, files_2 = files; _i < files_2.length; _i++) {
-                    var sourceFile = files_2[_i];
+                for (var _i = 0, files_3 = files; _i < files_3.length; _i++) {
+                    var sourceFile = files_3[_i];
                     (_a = sourceFile.classifiableNames) === null || _a === void 0 ? void 0 : _a.forEach(function (value) { return classifiableNames.add(value); });
                 }
             }
@@ -109661,13 +111878,13 @@
                 // which per above occurred during the current program creation.
                 // Since we assume the filesystem does not change during program creation,
                 // it is safe to reuse resolutions from the earlier call.
-                var result_15 = [];
+                var result_14 = [];
                 for (var _i = 0, moduleNames_1 = moduleNames; _i < moduleNames_1.length; _i++) {
                     var moduleName = moduleNames_1[_i];
                     var resolvedModule = file.resolvedModules.get(moduleName);
-                    result_15.push(resolvedModule);
+                    result_14.push(resolvedModule);
                 }
-                return result_15;
+                return result_14;
             }
             // At this point, we know at least one of the following hold:
             // - file has local declarations for ambient modules
@@ -109695,7 +111912,9 @@
                     var oldResolvedModule = ts.getResolvedModule(oldSourceFile, moduleName);
                     if (oldResolvedModule) {
                         if (ts.isTraceEnabled(options, host)) {
-                            ts.trace(host, ts.Diagnostics.Reusing_resolution_of_module_0_to_file_1_from_old_program, moduleName, ts.getNormalizedAbsolutePath(file.originalFileName, currentDirectory));
+                            ts.trace(host, oldResolvedModule.packageId ?
+                                ts.Diagnostics.Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2_with_Package_ID_3 :
+                                ts.Diagnostics.Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2, moduleName, ts.getNormalizedAbsolutePath(file.originalFileName, currentDirectory), oldResolvedModule.resolvedFileName, oldResolvedModule.packageId && ts.packageIdToString(oldResolvedModule.packageId));
                         }
                         (result || (result = new Array(moduleNames.length)))[i] = oldResolvedModule;
                         (reusedNames || (reusedNames = [])).push(moduleName);
@@ -109808,9 +112027,6 @@
             if (!ts.arrayIsEqualTo(oldRootNames, rootNames)) {
                 return 0 /* Not */;
             }
-            if (!ts.arrayIsEqualTo(options.types, oldOptions.types)) {
-                return 0 /* Not */;
-            }
             // Check if any referenced project tsconfig files are different
             if (!canReuseProjectReferences()) {
                 return 0 /* Not */;
@@ -109885,7 +112101,7 @@
                     // The `newSourceFile` object was created for the new program.
                     if (!ts.arrayIsEqualTo(oldSourceFile.libReferenceDirectives, newSourceFile.libReferenceDirectives, fileReferenceIsEqualTo)) {
                         // 'lib' references has changed. Matches behavior in changesAffectModuleResolution
-                        return 0 /* Not */;
+                        structureIsReused = 1 /* SafeModules */;
                     }
                     if (oldSourceFile.hasNoDefaultLib !== newSourceFile.hasNoDefaultLib) {
                         // value of no-default-lib has changed
@@ -109970,7 +112186,7 @@
             if (structureIsReused !== 2 /* Completely */) {
                 return structureIsReused;
             }
-            if ((_a = host.hasChangedAutomaticTypeDirectiveNames) === null || _a === void 0 ? void 0 : _a.call(host)) {
+            if (ts.changesAffectingProgramStructure(oldOptions, options) || ((_a = host.hasChangedAutomaticTypeDirectiveNames) === null || _a === void 0 ? void 0 : _a.call(host))) {
                 return 1 /* SafeModules */;
             }
             missingFilePaths = oldProgram.getMissingFilePaths();
@@ -110001,6 +112217,7 @@
             resolvedTypeReferenceDirectives = oldProgram.getResolvedTypeReferenceDirectives();
             sourceFileToPackageName = oldProgram.sourceFileToPackageName;
             redirectTargetsMap = oldProgram.redirectTargetsMap;
+            usesUriStyleNodeCoreModules = oldProgram.usesUriStyleNodeCoreModules;
             return 2 /* Completely */;
         }
         function getEmitHost(writeFileCallback) {
@@ -110213,7 +112430,7 @@
             }
         }
         function getSemanticDiagnosticsForFile(sourceFile, cancellationToken) {
-            return ts.concatenate(filterSemanticDiagnotics(getBindAndCheckDiagnosticsForFile(sourceFile, cancellationToken), options), getProgramDiagnostics(sourceFile));
+            return ts.concatenate(filterSemanticDiagnostics(getBindAndCheckDiagnosticsForFile(sourceFile, cancellationToken), options), getProgramDiagnostics(sourceFile));
         }
         function getBindAndCheckDiagnosticsForFile(sourceFile, cancellationToken) {
             return getAndCacheDiagnostics(sourceFile, cancellationToken, cachedBindAndCheckDiagnosticsForFile, getBindAndCheckDiagnosticsForFileNoCache);
@@ -110228,8 +112445,8 @@
                 var isCheckJs = ts.isCheckJsEnabledForFile(sourceFile, options);
                 var isTsNoCheck = !!sourceFile.checkJsDirective && sourceFile.checkJsDirective.enabled === false;
                 // By default, only type-check .ts, .tsx, 'Deferred' and 'External' files (external files are added by plugins)
-                var includeBindAndCheckDiagnostics = !isTsNoCheck && (sourceFile.scriptKind === 3 /* TS */ || sourceFile.scriptKind === 4 /* TSX */ ||
-                    sourceFile.scriptKind === 5 /* External */ || isCheckJs || sourceFile.scriptKind === 7 /* Deferred */);
+                var includeBindAndCheckDiagnostics = !isTsNoCheck && (sourceFile.scriptKind === 3 /* TS */ || sourceFile.scriptKind === 4 /* TSX */
+                    || sourceFile.scriptKind === 5 /* External */ || isCheckJs || sourceFile.scriptKind === 7 /* Deferred */);
                 var bindDiagnostics = includeBindAndCheckDiagnostics ? sourceFile.bindDiagnostics : ts.emptyArray;
                 var checkDiagnostics = includeBindAndCheckDiagnostics ? typeChecker.getDiagnostics(sourceFile, cancellationToken) : ts.emptyArray;
                 return getMergedBindAndCheckDiagnostics(sourceFile, includeBindAndCheckDiagnostics, bindDiagnostics, checkDiagnostics, isCheckJs ? sourceFile.jsDocDiagnostics : undefined);
@@ -110303,22 +112520,22 @@
                     // Return directly from the case if the given node doesnt want to visit each child
                     // Otherwise break to visit each child
                     switch (parent.kind) {
-                        case 161 /* Parameter */:
-                        case 164 /* PropertyDeclaration */:
-                        case 166 /* MethodDeclaration */:
+                        case 162 /* Parameter */:
+                        case 165 /* PropertyDeclaration */:
+                        case 167 /* MethodDeclaration */:
                             if (parent.questionToken === node) {
                                 diagnostics.push(createDiagnosticForNode(node, ts.Diagnostics.The_0_modifier_can_only_be_used_in_TypeScript_files, "?"));
                                 return "skip";
                             }
                         // falls through
-                        case 165 /* MethodSignature */:
-                        case 167 /* Constructor */:
-                        case 168 /* GetAccessor */:
-                        case 169 /* SetAccessor */:
-                        case 209 /* FunctionExpression */:
-                        case 252 /* FunctionDeclaration */:
-                        case 210 /* ArrowFunction */:
-                        case 250 /* VariableDeclaration */:
+                        case 166 /* MethodSignature */:
+                        case 169 /* Constructor */:
+                        case 170 /* GetAccessor */:
+                        case 171 /* SetAccessor */:
+                        case 211 /* FunctionExpression */:
+                        case 254 /* FunctionDeclaration */:
+                        case 212 /* ArrowFunction */:
+                        case 252 /* VariableDeclaration */:
                             // type annotation
                             if (parent.type === node) {
                                 diagnostics.push(createDiagnosticForNode(node, ts.Diagnostics.Type_annotations_can_only_be_used_in_TypeScript_files));
@@ -110326,58 +112543,58 @@
                             }
                     }
                     switch (node.kind) {
-                        case 263 /* ImportClause */:
+                        case 265 /* ImportClause */:
                             if (node.isTypeOnly) {
                                 diagnostics.push(createDiagnosticForNode(parent, ts.Diagnostics._0_declarations_can_only_be_used_in_TypeScript_files, "import type"));
                                 return "skip";
                             }
                             break;
-                        case 268 /* ExportDeclaration */:
+                        case 270 /* ExportDeclaration */:
                             if (node.isTypeOnly) {
                                 diagnostics.push(createDiagnosticForNode(node, ts.Diagnostics._0_declarations_can_only_be_used_in_TypeScript_files, "export type"));
                                 return "skip";
                             }
                             break;
-                        case 261 /* ImportEqualsDeclaration */:
+                        case 263 /* ImportEqualsDeclaration */:
                             diagnostics.push(createDiagnosticForNode(node, ts.Diagnostics.import_can_only_be_used_in_TypeScript_files));
                             return "skip";
-                        case 267 /* ExportAssignment */:
+                        case 269 /* ExportAssignment */:
                             if (node.isExportEquals) {
                                 diagnostics.push(createDiagnosticForNode(node, ts.Diagnostics.export_can_only_be_used_in_TypeScript_files));
                                 return "skip";
                             }
                             break;
-                        case 287 /* HeritageClause */:
+                        case 289 /* HeritageClause */:
                             var heritageClause = node;
-                            if (heritageClause.token === 116 /* ImplementsKeyword */) {
+                            if (heritageClause.token === 117 /* ImplementsKeyword */) {
                                 diagnostics.push(createDiagnosticForNode(node, ts.Diagnostics.implements_clauses_can_only_be_used_in_TypeScript_files));
                                 return "skip";
                             }
                             break;
-                        case 254 /* InterfaceDeclaration */:
-                            var interfaceKeyword = ts.tokenToString(117 /* InterfaceKeyword */);
+                        case 256 /* InterfaceDeclaration */:
+                            var interfaceKeyword = ts.tokenToString(118 /* InterfaceKeyword */);
                             ts.Debug.assertIsDefined(interfaceKeyword);
                             diagnostics.push(createDiagnosticForNode(node, ts.Diagnostics._0_declarations_can_only_be_used_in_TypeScript_files, interfaceKeyword));
                             return "skip";
-                        case 257 /* ModuleDeclaration */:
-                            var moduleKeyword = node.flags & 16 /* Namespace */ ? ts.tokenToString(140 /* NamespaceKeyword */) : ts.tokenToString(139 /* ModuleKeyword */);
+                        case 259 /* ModuleDeclaration */:
+                            var moduleKeyword = node.flags & 16 /* Namespace */ ? ts.tokenToString(141 /* NamespaceKeyword */) : ts.tokenToString(140 /* ModuleKeyword */);
                             ts.Debug.assertIsDefined(moduleKeyword);
                             diagnostics.push(createDiagnosticForNode(node, ts.Diagnostics._0_declarations_can_only_be_used_in_TypeScript_files, moduleKeyword));
                             return "skip";
-                        case 255 /* TypeAliasDeclaration */:
+                        case 257 /* TypeAliasDeclaration */:
                             diagnostics.push(createDiagnosticForNode(node, ts.Diagnostics.Type_aliases_can_only_be_used_in_TypeScript_files));
                             return "skip";
-                        case 256 /* EnumDeclaration */:
-                            var enumKeyword = ts.Debug.checkDefined(ts.tokenToString(91 /* EnumKeyword */));
+                        case 258 /* EnumDeclaration */:
+                            var enumKeyword = ts.Debug.checkDefined(ts.tokenToString(92 /* EnumKeyword */));
                             diagnostics.push(createDiagnosticForNode(node, ts.Diagnostics._0_declarations_can_only_be_used_in_TypeScript_files, enumKeyword));
                             return "skip";
-                        case 226 /* NonNullExpression */:
+                        case 228 /* NonNullExpression */:
                             diagnostics.push(createDiagnosticForNode(node, ts.Diagnostics.Non_null_assertions_can_only_be_used_in_TypeScript_files));
                             return "skip";
-                        case 225 /* AsExpression */:
+                        case 227 /* AsExpression */:
                             diagnostics.push(createDiagnosticForNode(node.type, ts.Diagnostics.Type_assertion_expressions_can_only_be_used_in_TypeScript_files));
                             return "skip";
-                        case 207 /* TypeAssertionExpression */:
+                        case 209 /* TypeAssertionExpression */:
                             ts.Debug.fail(); // Won't parse these in a JS file anyway, as they are interpreted as JSX.
                     }
                 }
@@ -110386,53 +112603,53 @@
                         diagnostics.push(createDiagnosticForNode(parent, ts.Diagnostics.Experimental_support_for_decorators_is_a_feature_that_is_subject_to_change_in_a_future_release_Set_the_experimentalDecorators_option_in_your_tsconfig_or_jsconfig_to_remove_this_warning));
                     }
                     switch (parent.kind) {
-                        case 253 /* ClassDeclaration */:
-                        case 222 /* ClassExpression */:
-                        case 166 /* MethodDeclaration */:
-                        case 167 /* Constructor */:
-                        case 168 /* GetAccessor */:
-                        case 169 /* SetAccessor */:
-                        case 209 /* FunctionExpression */:
-                        case 252 /* FunctionDeclaration */:
-                        case 210 /* ArrowFunction */:
+                        case 255 /* ClassDeclaration */:
+                        case 224 /* ClassExpression */:
+                        case 167 /* MethodDeclaration */:
+                        case 169 /* Constructor */:
+                        case 170 /* GetAccessor */:
+                        case 171 /* SetAccessor */:
+                        case 211 /* FunctionExpression */:
+                        case 254 /* FunctionDeclaration */:
+                        case 212 /* ArrowFunction */:
                             // Check type parameters
                             if (nodes === parent.typeParameters) {
                                 diagnostics.push(createDiagnosticForNodeArray(nodes, ts.Diagnostics.Type_parameter_declarations_can_only_be_used_in_TypeScript_files));
                                 return "skip";
                             }
                         // falls through
-                        case 233 /* VariableStatement */:
+                        case 235 /* VariableStatement */:
                             // Check modifiers
                             if (nodes === parent.modifiers) {
-                                checkModifiers(parent.modifiers, parent.kind === 233 /* VariableStatement */);
+                                checkModifiers(parent.modifiers, parent.kind === 235 /* VariableStatement */);
                                 return "skip";
                             }
                             break;
-                        case 164 /* PropertyDeclaration */:
+                        case 165 /* PropertyDeclaration */:
                             // Check modifiers of property declaration
                             if (nodes === parent.modifiers) {
                                 for (var _i = 0, _a = nodes; _i < _a.length; _i++) {
                                     var modifier = _a[_i];
-                                    if (modifier.kind !== 123 /* StaticKeyword */) {
+                                    if (modifier.kind !== 124 /* StaticKeyword */) {
                                         diagnostics.push(createDiagnosticForNode(modifier, ts.Diagnostics.The_0_modifier_can_only_be_used_in_TypeScript_files, ts.tokenToString(modifier.kind)));
                                     }
                                 }
                                 return "skip";
                             }
                             break;
-                        case 161 /* Parameter */:
+                        case 162 /* Parameter */:
                             // Check modifiers of parameter declaration
                             if (nodes === parent.modifiers) {
                                 diagnostics.push(createDiagnosticForNodeArray(nodes, ts.Diagnostics.Parameter_modifiers_can_only_be_used_in_TypeScript_files));
                                 return "skip";
                             }
                             break;
-                        case 204 /* CallExpression */:
-                        case 205 /* NewExpression */:
-                        case 224 /* ExpressionWithTypeArguments */:
-                        case 275 /* JsxSelfClosingElement */:
-                        case 276 /* JsxOpeningElement */:
-                        case 206 /* TaggedTemplateExpression */:
+                        case 206 /* CallExpression */:
+                        case 207 /* NewExpression */:
+                        case 226 /* ExpressionWithTypeArguments */:
+                        case 277 /* JsxSelfClosingElement */:
+                        case 278 /* JsxOpeningElement */:
+                        case 208 /* TaggedTemplateExpression */:
                             // Check type arguments
                             if (nodes === parent.typeArguments) {
                                 diagnostics.push(createDiagnosticForNodeArray(nodes, ts.Diagnostics.Type_arguments_can_only_be_used_in_TypeScript_files));
@@ -110445,25 +112662,25 @@
                     for (var _i = 0, modifiers_2 = modifiers; _i < modifiers_2.length; _i++) {
                         var modifier = modifiers_2[_i];
                         switch (modifier.kind) {
-                            case 84 /* ConstKeyword */:
+                            case 85 /* ConstKeyword */:
                                 if (isConstValid) {
                                     continue;
                                 }
                             // to report error,
                             // falls through
-                            case 122 /* PublicKeyword */:
-                            case 120 /* PrivateKeyword */:
-                            case 121 /* ProtectedKeyword */:
-                            case 142 /* ReadonlyKeyword */:
-                            case 133 /* DeclareKeyword */:
-                            case 125 /* AbstractKeyword */:
-                            case 156 /* OverrideKeyword */:
+                            case 123 /* PublicKeyword */:
+                            case 121 /* PrivateKeyword */:
+                            case 122 /* ProtectedKeyword */:
+                            case 143 /* ReadonlyKeyword */:
+                            case 134 /* DeclareKeyword */:
+                            case 126 /* AbstractKeyword */:
+                            case 157 /* OverrideKeyword */:
                                 diagnostics.push(createDiagnosticForNode(modifier, ts.Diagnostics.The_0_modifier_can_only_be_used_in_TypeScript_files, ts.tokenToString(modifier.kind)));
                                 break;
                             // These are all legal modifiers.
-                            case 123 /* StaticKeyword */:
-                            case 92 /* ExportKeyword */:
-                            case 87 /* DefaultKeyword */:
+                            case 124 /* StaticKeyword */:
+                            case 93 /* ExportKeyword */:
+                            case 88 /* DefaultKeyword */:
                         }
                     }
                 }
@@ -110534,8 +112751,8 @@
             return a.fileName === b.fileName;
         }
         function moduleNameIsEqualTo(a, b) {
-            return a.kind === 78 /* Identifier */
-                ? b.kind === 78 /* Identifier */ && a.escapedText === b.escapedText
+            return a.kind === 79 /* Identifier */
+                ? b.kind === 79 /* Identifier */ && a.escapedText === b.escapedText
                 : b.kind === 10 /* StringLiteral */ && a.text === b.text;
         }
         function createSyntheticImport(text, file) {
@@ -110593,6 +112810,9 @@
                     // only through top - level external module names. Relative external module names are not permitted.
                     if (moduleNameExpr && ts.isStringLiteral(moduleNameExpr) && moduleNameExpr.text && (!inAmbientModule || !ts.isExternalModuleNameRelative(moduleNameExpr.text))) {
                         imports = ts.append(imports, moduleNameExpr);
+                        if (!usesUriStyleNodeCoreModules && currentNodeModulesDepth === 0 && !file.isDeclarationFile) {
+                            usesUriStyleNodeCoreModules = ts.startsWith(moduleNameExpr.text, "node:");
+                        }
                     }
                 }
                 else if (ts.isModuleDeclaration(node)) {
@@ -111219,6 +113439,9 @@
             if (options.strictPropertyInitialization && !ts.getStrictOptionValue(options, "strictNullChecks")) {
                 createDiagnosticForOptionName(ts.Diagnostics.Option_0_cannot_be_specified_without_specifying_option_1, "strictPropertyInitialization", "strictNullChecks");
             }
+            if (options.exactOptionalPropertyTypes && !ts.getStrictOptionValue(options, "strictNullChecks")) {
+                createDiagnosticForOptionName(ts.Diagnostics.Option_0_cannot_be_specified_without_specifying_option_1, "exactOptionalPropertyTypes", "strictNullChecks");
+            }
             if (options.isolatedModules) {
                 if (options.out) {
                     createDiagnosticForOptionName(ts.Diagnostics.Option_0_cannot_be_specified_with_option_1, "out", "isolatedModules");
@@ -111256,8 +113479,8 @@
             // List of collected files is complete; validate exhautiveness if this is a project with a file list
             if (options.composite) {
                 var rootPaths = new ts.Set(rootNames.map(toPath));
-                for (var _i = 0, files_3 = files; _i < files_3.length; _i++) {
-                    var file = files_3[_i];
+                for (var _i = 0, files_4 = files; _i < files_4.length; _i++) {
+                    var file = files_4[_i];
                     // Ignore file that is not emitted
                     if (ts.sourceFileMayBeEmitted(file, program) && !rootPaths.has(file.path)) {
                         addProgramDiagnosticExplainingFile(file, ts.Diagnostics.File_0_is_not_listed_within_the_file_list_of_project_1_Projects_must_list_all_files_or_use_an_include_pattern, [file.fileName, options.configFilePath || ""]);
@@ -111487,7 +113710,7 @@
             var location = locationReason && getReferencedFileLocation(getSourceFileByPath, locationReason);
             var fileIncludeReasonDetails = fileIncludeReasons && ts.chainDiagnosticMessages(fileIncludeReasons, ts.Diagnostics.The_file_is_in_the_program_because_Colon);
             var redirectInfo = file && ts.explainIfFileIsRedirect(file);
-            var chain = ts.chainDiagnosticMessages.apply(void 0, __spreadArray([redirectInfo ? fileIncludeReasonDetails ? __spreadArray([fileIncludeReasonDetails], redirectInfo) : redirectInfo : fileIncludeReasonDetails, diagnostic], args || ts.emptyArray));
+            var chain = ts.chainDiagnosticMessages.apply(void 0, __spreadArray([redirectInfo ? fileIncludeReasonDetails ? __spreadArray([fileIncludeReasonDetails], redirectInfo, true) : redirectInfo : fileIncludeReasonDetails, diagnostic], args || ts.emptyArray, false));
             return location && isReferenceFileLocation(location) ?
                 ts.createFileDiagnosticFromMessageChain(location.file, location.pos, location.end - location.pos, chain, relatedInfo) :
                 ts.createCompilerDiagnosticFromMessageChain(chain, relatedInfo);
@@ -111771,7 +113994,13 @@
             if (host.getSymlinkCache) {
                 return host.getSymlinkCache();
             }
-            return symlinks || (symlinks = ts.discoverProbableSymlinks(files, getCanonicalFileName, host.getCurrentDirectory()));
+            if (!symlinks) {
+                symlinks = ts.createSymlinkCache(currentDirectory, getCanonicalFileName);
+            }
+            if (files && resolvedTypeReferenceDirectives && !symlinks.hasProcessedResolutions()) {
+                symlinks.setSymlinksFromResolutions(files, resolvedTypeReferenceDirectives);
+            }
+            return symlinks;
         }
     }
     ts.createProgram = createProgram;
@@ -111941,7 +114170,7 @@
         // get any preEmit diagnostics, not just the ones
         if (!options.noEmitOnError)
             return undefined;
-        var diagnostics = __spreadArray(__spreadArray(__spreadArray(__spreadArray([], program.getOptionsDiagnostics(cancellationToken)), program.getSyntacticDiagnostics(sourceFile, cancellationToken)), program.getGlobalDiagnostics(cancellationToken)), program.getSemanticDiagnostics(sourceFile, cancellationToken));
+        var diagnostics = __spreadArray(__spreadArray(__spreadArray(__spreadArray([], program.getOptionsDiagnostics(cancellationToken), true), program.getSyntacticDiagnostics(sourceFile, cancellationToken), true), program.getGlobalDiagnostics(cancellationToken), true), program.getSemanticDiagnostics(sourceFile, cancellationToken), true);
         if (diagnostics.length === 0 && ts.getEmitDeclarations(program.getCompilerOptions())) {
             diagnostics = program.getDeclarationDiagnostics(/*sourceFile*/ undefined, cancellationToken);
         }
@@ -111951,17 +114180,17 @@
         if (!sourceFile && !ts.outFile(options)) {
             var emitResult = program.emitBuildInfo(writeFile, cancellationToken);
             if (emitResult.diagnostics)
-                diagnostics = __spreadArray(__spreadArray([], diagnostics), emitResult.diagnostics);
+                diagnostics = __spreadArray(__spreadArray([], diagnostics, true), emitResult.diagnostics, true);
             emittedFiles = emitResult.emittedFiles;
         }
         return { diagnostics: diagnostics, sourceMaps: undefined, emittedFiles: emittedFiles, emitSkipped: true };
     }
     ts.handleNoEmitOptions = handleNoEmitOptions;
     /*@internal*/
-    function filterSemanticDiagnotics(diagnostic, option) {
+    function filterSemanticDiagnostics(diagnostic, option) {
         return ts.filter(diagnostic, function (d) { return !d.skippedOn || !option[d.skippedOn]; });
     }
-    ts.filterSemanticDiagnotics = filterSemanticDiagnotics;
+    ts.filterSemanticDiagnostics = filterSemanticDiagnostics;
     /* @internal */
     function parseConfigHostFromCompilerHostLike(host, directoryStructureHost) {
         if (directoryStructureHost === void 0) { directoryStructureHost = host; }
@@ -112083,21 +114312,86 @@
     ts.getFileEmitOutput = getFileEmitOutput;
     var BuilderState;
     (function (BuilderState) {
-        /**
-         * Get the referencedFile from the imported module symbol
-         */
-        function getReferencedFileFromImportedModuleSymbol(symbol) {
-            if (symbol.declarations && symbol.declarations[0]) {
-                var declarationSourceFile = ts.getSourceFileOfNode(symbol.declarations[0]);
-                return declarationSourceFile && declarationSourceFile.resolvedPath;
+        var manyToManyPathMapCount = 0;
+        function createManyToManyPathMap() {
+            function create(forward, reverse, deleted) {
+                var version = 0;
+                var map = {
+                    id: manyToManyPathMapCount++,
+                    version: function () { return version; },
+                    clone: function () { return create(new ts.Map(forward), new ts.Map(reverse), deleted && new ts.Set(deleted)); },
+                    forEach: function (fn) { return forward.forEach(fn); },
+                    getKeys: function (v) { return reverse.get(v); },
+                    getValues: function (k) { return forward.get(k); },
+                    hasKey: function (k) { return forward.has(k); },
+                    keys: function () { return forward.keys(); },
+                    deletedKeys: function () { return deleted; },
+                    deleteKey: function (k) {
+                        (deleted || (deleted = new ts.Set())).add(k);
+                        var set = forward.get(k);
+                        if (!set) {
+                            return false;
+                        }
+                        set.forEach(function (v) { return deleteFromMultimap(reverse, v, k); });
+                        forward.delete(k);
+                        version++;
+                        return true;
+                    },
+                    set: function (k, vSet) {
+                        var changed = !!(deleted === null || deleted === void 0 ? void 0 : deleted.delete(k));
+                        var existingVSet = forward.get(k);
+                        forward.set(k, vSet);
+                        existingVSet === null || existingVSet === void 0 ? void 0 : existingVSet.forEach(function (v) {
+                            if (!vSet.has(v)) {
+                                changed = true;
+                                deleteFromMultimap(reverse, v, k);
+                            }
+                        });
+                        vSet.forEach(function (v) {
+                            if (!(existingVSet === null || existingVSet === void 0 ? void 0 : existingVSet.has(v))) {
+                                changed = true;
+                                addToMultimap(reverse, v, k);
+                            }
+                        });
+                        if (changed) {
+                            version++;
+                        }
+                        return map;
+                    },
+                };
+                return map;
             }
+            return create(new ts.Map(), new ts.Map(), /*deleted*/ undefined);
+        }
+        BuilderState.createManyToManyPathMap = createManyToManyPathMap;
+        function addToMultimap(map, k, v) {
+            var set = map.get(k);
+            if (!set) {
+                set = new ts.Set();
+                map.set(k, set);
+            }
+            set.add(v);
+        }
+        function deleteFromMultimap(map, k, v, removeEmpty) {
+            if (removeEmpty === void 0) { removeEmpty = true; }
+            var set = map.get(k);
+            if (set === null || set === void 0 ? void 0 : set.delete(v)) {
+                if (removeEmpty && !set.size) {
+                    map.delete(k);
+                }
+                return true;
+            }
+            return false;
+        }
+        function getReferencedFilesFromImportedModuleSymbol(symbol) {
+            return ts.mapDefined(symbol.declarations, function (declaration) { var _a; return (_a = ts.getSourceFileOfNode(declaration)) === null || _a === void 0 ? void 0 : _a.resolvedPath; });
         }
         /**
-         * Get the referencedFile from the import name node from file
+         * Get the module source file and all augmenting files from the import name node from file
          */
-        function getReferencedFileFromImportLiteral(checker, importName) {
+        function getReferencedFilesFromImportLiteral(checker, importName) {
             var symbol = checker.getSymbolAtLocation(importName);
-            return symbol && getReferencedFileFromImportedModuleSymbol(symbol);
+            return symbol && getReferencedFilesFromImportedModuleSymbol(symbol);
         }
         /**
          * Gets the path to reference file from file name, it could be resolvedPath if present otherwise path
@@ -112117,10 +114411,8 @@
                 var checker = program.getTypeChecker();
                 for (var _i = 0, _a = sourceFile.imports; _i < _a.length; _i++) {
                     var importName = _a[_i];
-                    var declarationSourceFilePath = getReferencedFileFromImportLiteral(checker, importName);
-                    if (declarationSourceFilePath) {
-                        addReferencedFile(declarationSourceFilePath);
-                    }
+                    var declarationSourceFilePaths = getReferencedFilesFromImportLiteral(checker, importName);
+                    declarationSourceFilePaths === null || declarationSourceFilePaths === void 0 ? void 0 : declarationSourceFilePaths.forEach(addReferencedFile);
                 }
             }
             var sourceFileDirectory = ts.getDirectoryPath(sourceFile.resolvedPath);
@@ -112197,8 +114489,8 @@
          */
         function create(newProgram, getCanonicalFileName, oldState, disableUseFileVersionAsSignature) {
             var fileInfos = new ts.Map();
-            var referencedMap = newProgram.getCompilerOptions().module !== ts.ModuleKind.None ? new ts.Map() : undefined;
-            var exportedModulesMap = referencedMap ? new ts.Map() : undefined;
+            var referencedMap = newProgram.getCompilerOptions().module !== ts.ModuleKind.None ? createManyToManyPathMap() : undefined;
+            var exportedModulesMap = referencedMap ? createManyToManyPathMap() : undefined;
             var hasCalledUpdateShapeSignature = new ts.Set();
             var useOldState = canReuseOldState(referencedMap, oldState);
             // Ensure source files have parent pointers set
@@ -112215,7 +114507,7 @@
                     }
                     // Copy old visible to outside files map
                     if (useOldState) {
-                        var exportedModules = oldState.exportedModulesMap.get(sourceFile.resolvedPath);
+                        var exportedModules = oldState.exportedModulesMap.getValues(sourceFile.resolvedPath);
                         if (exportedModules) {
                             exportedModulesMap.set(sourceFile.resolvedPath, exportedModules);
                         }
@@ -112244,11 +114536,12 @@
          * Creates a clone of the state
          */
         function clone(state) {
+            var _a, _b;
             // Dont need to backup allFiles info since its cache anyway
             return {
                 fileInfos: new ts.Map(state.fileInfos),
-                referencedMap: state.referencedMap && new ts.Map(state.referencedMap),
-                exportedModulesMap: state.exportedModulesMap && new ts.Map(state.exportedModulesMap),
+                referencedMap: (_a = state.referencedMap) === null || _a === void 0 ? void 0 : _a.clone(),
+                exportedModulesMap: (_b = state.exportedModulesMap) === null || _b === void 0 ? void 0 : _b.clone(),
                 hasCalledUpdateShapeSignature: new ts.Set(state.hasCalledUpdateShapeSignature),
                 useFileVersionAsSignature: state.useFileVersionAsSignature,
             };
@@ -112294,7 +114587,8 @@
         /**
          * Returns if the shape of the signature has changed since last emit
          */
-        function updateShapeSignature(state, programOfThisState, sourceFile, cacheToUpdateSignature, cancellationToken, computeHash, exportedModulesMapCache) {
+        function updateShapeSignature(state, programOfThisState, sourceFile, cacheToUpdateSignature, cancellationToken, computeHash, exportedModulesMapCache, useFileVersionAsSignature) {
+            if (useFileVersionAsSignature === void 0) { useFileVersionAsSignature = state.useFileVersionAsSignature; }
             ts.Debug.assert(!!sourceFile);
             ts.Debug.assert(!exportedModulesMapCache || !!state.exportedModulesMap, "Compute visible to outside map only if visibleToOutsideReferencedMap present in the state");
             // If we have cached the result for this file, that means hence forth we should assume file shape is uptodate
@@ -112306,7 +114600,7 @@
                 return ts.Debug.fail();
             var prevSignature = info.signature;
             var latestSignature;
-            if (!sourceFile.isDeclarationFile && !state.useFileVersionAsSignature) {
+            if (!sourceFile.isDeclarationFile && !useFileVersionAsSignature) {
                 var emitOutput_1 = getFileEmitOutput(programOfThisState, sourceFile, 
                 /*emitOnlyDtsFiles*/ true, cancellationToken, 
                 /*customTransformers*/ undefined, 
@@ -112325,8 +114619,13 @@
                 latestSignature = sourceFile.version;
                 if (exportedModulesMapCache && latestSignature !== prevSignature) {
                     // All the references in this file are exported
-                    var references = state.referencedMap ? state.referencedMap.get(sourceFile.resolvedPath) : undefined;
-                    exportedModulesMapCache.set(sourceFile.resolvedPath, references || false);
+                    var references = state.referencedMap ? state.referencedMap.getValues(sourceFile.resolvedPath) : undefined;
+                    if (references) {
+                        exportedModulesMapCache.set(sourceFile.resolvedPath, references);
+                    }
+                    else {
+                        exportedModulesMapCache.deleteKey(sourceFile.resolvedPath);
+                    }
                 }
             }
             cacheToUpdateSignature.set(sourceFile.resolvedPath, latestSignature);
@@ -112338,18 +114637,23 @@
          */
         function updateExportedModules(sourceFile, exportedModulesFromDeclarationEmit, exportedModulesMapCache) {
             if (!exportedModulesFromDeclarationEmit) {
-                exportedModulesMapCache.set(sourceFile.resolvedPath, false);
+                exportedModulesMapCache.deleteKey(sourceFile.resolvedPath);
                 return;
             }
             var exportedModules;
-            exportedModulesFromDeclarationEmit.forEach(function (symbol) { return addExportedModule(getReferencedFileFromImportedModuleSymbol(symbol)); });
-            exportedModulesMapCache.set(sourceFile.resolvedPath, exportedModules || false);
-            function addExportedModule(exportedModulePath) {
-                if (exportedModulePath) {
+            exportedModulesFromDeclarationEmit.forEach(function (symbol) { return addExportedModule(getReferencedFilesFromImportedModuleSymbol(symbol)); });
+            if (exportedModules) {
+                exportedModulesMapCache.set(sourceFile.resolvedPath, exportedModules);
+            }
+            else {
+                exportedModulesMapCache.deleteKey(sourceFile.resolvedPath);
+            }
+            function addExportedModule(exportedModulePaths) {
+                if (exportedModulePaths === null || exportedModulePaths === void 0 ? void 0 : exportedModulePaths.length) {
                     if (!exportedModules) {
                         exportedModules = new ts.Set();
                     }
-                    exportedModules.add(exportedModulePath);
+                    exportedModulePaths.forEach(function (path) { return exportedModules.add(path); });
                 }
             }
         }
@@ -112358,16 +114662,25 @@
          * This should be called whenever it is safe to commit the state of the builder
          */
         function updateExportedFilesMapFromCache(state, exportedModulesMapCache) {
+            var _a;
             if (exportedModulesMapCache) {
                 ts.Debug.assert(!!state.exportedModulesMap);
-                exportedModulesMapCache.forEach(function (exportedModules, path) {
-                    if (exportedModules) {
-                        state.exportedModulesMap.set(path, exportedModules);
+                var cacheId = exportedModulesMapCache.id;
+                var cacheVersion = exportedModulesMapCache.version();
+                if (state.previousCache) {
+                    if (state.previousCache.id === cacheId && state.previousCache.version === cacheVersion) {
+                        // If this is the same cache at the same version as last time this BuilderState
+                        // was updated, there's no need to update again
+                        return;
                     }
-                    else {
-                        state.exportedModulesMap.delete(path);
-                    }
-                });
+                    state.previousCache.id = cacheId;
+                    state.previousCache.version = cacheVersion;
+                }
+                else {
+                    state.previousCache = { id: cacheId, version: cacheVersion };
+                }
+                (_a = exportedModulesMapCache.deletedKeys()) === null || _a === void 0 ? void 0 : _a.forEach(function (path) { return state.exportedModulesMap.deleteKey(path); });
+                exportedModulesMapCache.forEach(function (exportedModules, path) { return state.exportedModulesMap.set(path, exportedModules); });
             }
         }
         BuilderState.updateExportedFilesMapFromCache = updateExportedFilesMapFromCache;
@@ -112391,7 +114704,7 @@
                 var path = queue.pop();
                 if (!seenMap.has(path)) {
                     seenMap.add(path);
-                    var references = state.referencedMap.get(path);
+                    var references = state.referencedMap.getValues(path);
                     if (references) {
                         var iterator = references.keys();
                         for (var iterResult = iterator.next(); !iterResult.done; iterResult = iterator.next()) {
@@ -112417,10 +114730,8 @@
          * Gets the files referenced by the the file path
          */
         function getReferencedByPaths(state, referencedFilePath) {
-            return ts.arrayFrom(ts.mapDefinedIterator(state.referencedMap.entries(), function (_a) {
-                var filePath = _a[0], referencesInFile = _a[1];
-                return referencesInFile.has(referencedFilePath) ? filePath : undefined;
-            }));
+            var keys = state.referencedMap.getKeys(referencedFilePath);
+            return keys ? ts.arrayFrom(keys.keys()) : [];
         }
         BuilderState.getReferencedByPaths = getReferencedByPaths;
         /**
@@ -112450,7 +114761,7 @@
          */
         function isFileAffectingGlobalScope(sourceFile) {
             return containsGlobalScopeAugmentation(sourceFile) ||
-                !ts.isExternalOrCommonJsModule(sourceFile) && !containsOnlyAmbientModules(sourceFile);
+                !ts.isExternalOrCommonJsModule(sourceFile) && !ts.isJsonSourceFile(sourceFile) && !containsOnlyAmbientModules(sourceFile);
         }
         /**
          * Gets all files of the program excluding the default library file
@@ -112586,7 +114897,7 @@
                 // versions dont match
                 oldInfo.version !== info.version ||
                 // Referenced files changed
-                !hasSameKeys(newReferences = referencedMap && referencedMap.get(sourceFilePath), oldReferencedMap && oldReferencedMap.get(sourceFilePath)) ||
+                !hasSameKeys(newReferences = referencedMap && referencedMap.getValues(sourceFilePath), oldReferencedMap && oldReferencedMap.getValues(sourceFilePath)) ||
                 // Referenced file was deleted in the new program
                 newReferences && ts.forEachKey(newReferences, function (path) { return !state.fileInfos.has(path) && oldState.fileInfos.has(path); })) {
                 // Register file as changed file and do not copy semantic diagnostics, since all changed files need to be re-evaluated
@@ -112662,6 +114973,7 @@
      * Creates a clone of the state
      */
     function cloneBuilderProgramState(state) {
+        var _a;
         var newState = ts.BuilderState.clone(state);
         newState.semanticDiagnosticsPerFile = state.semanticDiagnosticsPerFile && new ts.Map(state.semanticDiagnosticsPerFile);
         newState.changedFilesSet = new ts.Set(state.changedFilesSet);
@@ -112669,7 +114981,7 @@
         newState.affectedFilesIndex = state.affectedFilesIndex;
         newState.currentChangedFilePath = state.currentChangedFilePath;
         newState.currentAffectedFilesSignatures = state.currentAffectedFilesSignatures && new ts.Map(state.currentAffectedFilesSignatures);
-        newState.currentAffectedFilesExportedModulesMap = state.currentAffectedFilesExportedModulesMap && new ts.Map(state.currentAffectedFilesExportedModulesMap);
+        newState.currentAffectedFilesExportedModulesMap = (_a = state.currentAffectedFilesExportedModulesMap) === null || _a === void 0 ? void 0 : _a.clone();
         newState.seenAffectedFiles = state.seenAffectedFiles && new ts.Set(state.seenAffectedFiles);
         newState.cleanedDiagnosticsOfLibFiles = state.cleanedDiagnosticsOfLibFiles;
         newState.semanticDiagnosticsFromOldState = state.semanticDiagnosticsFromOldState && new ts.Set(state.semanticDiagnosticsFromOldState);
@@ -112737,8 +115049,7 @@
             if (!state.currentAffectedFilesSignatures)
                 state.currentAffectedFilesSignatures = new ts.Map();
             if (state.exportedModulesMap) {
-                if (!state.currentAffectedFilesExportedModulesMap)
-                    state.currentAffectedFilesExportedModulesMap = new ts.Map();
+                state.currentAffectedFilesExportedModulesMap || (state.currentAffectedFilesExportedModulesMap = ts.BuilderState.createManyToManyPathMap());
             }
             state.affectedFiles = ts.BuilderState.getFilesAffectedBy(state, program, nextKey.value, cancellationToken, computeHash, state.currentAffectedFilesSignatures, state.currentAffectedFilesExportedModulesMap);
             state.currentChangedFilePath = nextKey.value;
@@ -112818,14 +115129,15 @@
                 // we need to update the signature to reflect correctness of the signature(which is output d.ts emit) of this file
                 // This ensures that we dont later during incremental builds considering wrong signature.
                 // Eg where this also is needed to ensure that .tsbuildinfo generated by incremental build should be same as if it was first fresh build
-                ts.BuilderState.updateShapeSignature(state, program, sourceFile, ts.Debug.checkDefined(state.currentAffectedFilesSignatures), cancellationToken, computeHash, state.currentAffectedFilesExportedModulesMap);
+                // But we avoid expensive full shape computation, as using file version as shape is enough for correctness.
+                ts.BuilderState.updateShapeSignature(state, program, sourceFile, ts.Debug.checkDefined(state.currentAffectedFilesSignatures), cancellationToken, computeHash, state.currentAffectedFilesExportedModulesMap, 
+                /* useFileVersionAsSignature */ true);
                 // If not dts emit, nothing more to do
                 if (ts.getEmitDeclarations(state.compilerOptions)) {
                     addToAffectedFilesPendingEmit(state, path, 0 /* DtsOnly */);
                 }
             }
         }
-        return false;
     }
     /**
      * Removes semantic diagnostics for path and
@@ -112848,6 +115160,7 @@
      * Iterate on referencing modules that export entities from affected file
      */
     function forEachReferencingModulesOfExportOfAffectedFile(state, affectedFile, fn) {
+        var _a, _b;
         // If there was change in signature (dts output) for the changed file,
         // then only we need to handle pending file emit
         if (!state.exportedModulesMap || !state.changedFilesSet.has(affectedFile.resolvedPath)) {
@@ -112865,8 +115178,8 @@
                 var currentPath = queue.pop();
                 if (!seenFileNamesMap.has(currentPath)) {
                     seenFileNamesMap.set(currentPath, true);
-                    var result = fn(state, currentPath);
-                    if (result && isChangedSignature(state, currentPath)) {
+                    fn(state, currentPath);
+                    if (isChangedSignature(state, currentPath)) {
                         var currentSourceFile = ts.Debug.checkDefined(state.program).getSourceFileByPath(currentPath);
                         queue.push.apply(queue, ts.BuilderState.getReferencedByPaths(state, currentSourceFile.resolvedPath));
                     }
@@ -112877,17 +115190,15 @@
         var seenFileAndExportsOfFile = new ts.Set();
         // Go through exported modules from cache first
         // If exported modules has path, all files referencing file exported from are affected
-        if (ts.forEachEntry(state.currentAffectedFilesExportedModulesMap, function (exportedModules, exportedFromPath) {
-            return exportedModules &&
-                exportedModules.has(affectedFile.resolvedPath) &&
-                forEachFilesReferencingPath(state, exportedFromPath, seenFileAndExportsOfFile, fn);
-        })) {
-            return;
-        }
+        (_a = state.currentAffectedFilesExportedModulesMap.getKeys(affectedFile.resolvedPath)) === null || _a === void 0 ? void 0 : _a.forEach(function (exportedFromPath) {
+            return forEachFilesReferencingPath(state, exportedFromPath, seenFileAndExportsOfFile, fn);
+        });
         // If exported from path is not from cache and exported modules has path, all files referencing file exported from are affected
-        ts.forEachEntry(state.exportedModulesMap, function (exportedModules, exportedFromPath) {
-            return !state.currentAffectedFilesExportedModulesMap.has(exportedFromPath) && // If we already iterated this through cache, ignore it
-                exportedModules.has(affectedFile.resolvedPath) &&
+        (_b = state.exportedModulesMap.getKeys(affectedFile.resolvedPath)) === null || _b === void 0 ? void 0 : _b.forEach(function (exportedFromPath) {
+            var _a;
+            // If the cache had an updated value, skip
+            return !state.currentAffectedFilesExportedModulesMap.hasKey(exportedFromPath) &&
+                !((_a = state.currentAffectedFilesExportedModulesMap.deletedKeys()) === null || _a === void 0 ? void 0 : _a.has(exportedFromPath)) &&
                 forEachFilesReferencingPath(state, exportedFromPath, seenFileAndExportsOfFile, fn);
         });
     }
@@ -112895,43 +115206,37 @@
      * Iterate on files referencing referencedPath
      */
     function forEachFilesReferencingPath(state, referencedPath, seenFileAndExportsOfFile, fn) {
-        return ts.forEachEntry(state.referencedMap, function (referencesInFile, filePath) {
-            return referencesInFile.has(referencedPath) && forEachFileAndExportsOfFile(state, filePath, seenFileAndExportsOfFile, fn);
+        var _a;
+        (_a = state.referencedMap.getKeys(referencedPath)) === null || _a === void 0 ? void 0 : _a.forEach(function (filePath) {
+            return forEachFileAndExportsOfFile(state, filePath, seenFileAndExportsOfFile, fn);
         });
     }
     /**
      * fn on file and iterate on anything that exports this file
      */
     function forEachFileAndExportsOfFile(state, filePath, seenFileAndExportsOfFile, fn) {
+        var _a, _b, _c;
         if (!ts.tryAddToSet(seenFileAndExportsOfFile, filePath)) {
-            return false;
+            return;
         }
-        if (fn(state, filePath)) {
-            // If there are no more diagnostics from old cache, done
-            return true;
-        }
+        fn(state, filePath);
         ts.Debug.assert(!!state.currentAffectedFilesExportedModulesMap);
         // Go through exported modules from cache first
         // If exported modules has path, all files referencing file exported from are affected
-        if (ts.forEachEntry(state.currentAffectedFilesExportedModulesMap, function (exportedModules, exportedFromPath) {
-            return exportedModules &&
-                exportedModules.has(filePath) &&
-                forEachFileAndExportsOfFile(state, exportedFromPath, seenFileAndExportsOfFile, fn);
-        })) {
-            return true;
-        }
+        (_a = state.currentAffectedFilesExportedModulesMap.getKeys(filePath)) === null || _a === void 0 ? void 0 : _a.forEach(function (exportedFromPath) {
+            return forEachFileAndExportsOfFile(state, exportedFromPath, seenFileAndExportsOfFile, fn);
+        });
         // If exported from path is not from cache and exported modules has path, all files referencing file exported from are affected
-        if (ts.forEachEntry(state.exportedModulesMap, function (exportedModules, exportedFromPath) {
-            return !state.currentAffectedFilesExportedModulesMap.has(exportedFromPath) && // If we already iterated this through cache, ignore it
-                exportedModules.has(filePath) &&
+        (_b = state.exportedModulesMap.getKeys(filePath)) === null || _b === void 0 ? void 0 : _b.forEach(function (exportedFromPath) {
+            var _a;
+            // If the cache had an updated value, skip
+            return !state.currentAffectedFilesExportedModulesMap.hasKey(exportedFromPath) &&
+                !((_a = state.currentAffectedFilesExportedModulesMap.deletedKeys()) === null || _a === void 0 ? void 0 : _a.has(exportedFromPath)) &&
                 forEachFileAndExportsOfFile(state, exportedFromPath, seenFileAndExportsOfFile, fn);
-        })) {
-            return true;
-        }
+        });
         // Remove diagnostics of files that import this file (without going to exports of referencing files)
-        return !!ts.forEachEntry(state.referencedMap, function (referencesInFile, referencingFilePath) {
-            return referencesInFile.has(filePath) &&
-                !seenFileAndExportsOfFile.has(referencingFilePath) && // Not already removed diagnostic file
+        (_c = state.referencedMap.getKeys(filePath)) === null || _c === void 0 ? void 0 : _c.forEach(function (referencingFilePath) {
+            return !seenFileAndExportsOfFile.has(referencingFilePath) && // Not already removed diagnostic file
                 fn(state, referencingFilePath);
         } // Dont add to seen since this is not yet done with the export removal
         );
@@ -112993,7 +115298,7 @@
             var cachedDiagnostics = state.semanticDiagnosticsPerFile.get(path);
             // Report the bind and check diagnostics from the cache if we already have those diagnostics present
             if (cachedDiagnostics) {
-                return ts.filterSemanticDiagnotics(cachedDiagnostics, state.compilerOptions);
+                return ts.filterSemanticDiagnostics(cachedDiagnostics, state.compilerOptions);
             }
         }
         // Diagnostics werent cached, get them from program, and cache the result
@@ -113001,7 +115306,7 @@
         if (state.semanticDiagnosticsPerFile) {
             state.semanticDiagnosticsPerFile.set(path, diagnostics);
         }
-        return ts.filterSemanticDiagnotics(diagnostics, state.compilerOptions);
+        return ts.filterSemanticDiagnostics(diagnostics, state.compilerOptions);
     }
     /**
      * Gets the program information to be emitted in buildInfo so that we can use it to create new program
@@ -113036,19 +115341,24 @@
         if (state.referencedMap) {
             referencedMap = ts.arrayFrom(state.referencedMap.keys()).sort(ts.compareStringsCaseSensitive).map(function (key) { return [
                 toFileId(key),
-                toFileIdListId(state.referencedMap.get(key))
+                toFileIdListId(state.referencedMap.getValues(key))
             ]; });
         }
         var exportedModulesMap;
         if (state.exportedModulesMap) {
             exportedModulesMap = ts.mapDefined(ts.arrayFrom(state.exportedModulesMap.keys()).sort(ts.compareStringsCaseSensitive), function (key) {
-                var newValue = state.currentAffectedFilesExportedModulesMap && state.currentAffectedFilesExportedModulesMap.get(key);
+                var _a;
+                if (state.currentAffectedFilesExportedModulesMap) {
+                    if ((_a = state.currentAffectedFilesExportedModulesMap.deletedKeys()) === null || _a === void 0 ? void 0 : _a.has(key)) {
+                        return undefined;
+                    }
+                    var newValue = state.currentAffectedFilesExportedModulesMap.getValues(key);
+                    if (newValue) {
+                        return [toFileId(key), toFileIdListId(newValue)];
+                    }
+                }
                 // Not in temporary cache, use existing value
-                if (newValue === undefined)
-                    return [toFileId(key), toFileIdListId(state.exportedModulesMap.get(key))];
-                // Value in cache and has updated value map, use that
-                else if (newValue)
-                    return [toFileId(key), toFileIdListId(newValue)];
+                return [toFileId(key), toFileIdListId(state.exportedModulesMap.getValues(key))];
             });
         }
         var semanticDiagnosticsPerFile;
@@ -113225,8 +115535,9 @@
         newProgram = undefined; // TODO: GH#18217
         oldProgram = undefined;
         oldState = undefined;
-        var builderProgram = createRedirectedBuilderProgram(state, configFileParsingDiagnostics);
-        builderProgram.getState = function () { return state; };
+        var getState = function () { return state; };
+        var builderProgram = createRedirectedBuilderProgram(getState, configFileParsingDiagnostics);
+        builderProgram.getState = getState;
         builderProgram.backupState = function () {
             ts.Debug.assert(backupState === undefined);
             backupState = cloneBuilderProgramState(state);
@@ -113461,8 +115772,8 @@
         var state = {
             fileInfos: fileInfos,
             compilerOptions: program.options ? ts.convertToOptionsWithAbsolutePaths(program.options, toAbsolutePath) : {},
-            referencedMap: toMapOfReferencedSet(program.referencedMap),
-            exportedModulesMap: toMapOfReferencedSet(program.exportedModulesMap),
+            referencedMap: toManyToManyPathMap(program.referencedMap),
+            exportedModulesMap: toManyToManyPathMap(program.exportedModulesMap),
             semanticDiagnosticsPerFile: program.semanticDiagnosticsPerFile && ts.arrayToMap(program.semanticDiagnosticsPerFile, function (value) { return toFilePath(ts.isNumber(value) ? value : value[0]); }, function (value) { return ts.isNumber(value) ? ts.emptyArray : value[1]; }),
             hasReusableDiagnostic: true,
             affectedFilesPendingEmit: ts.map(program.affectedFilesPendingEmit, function (value) { return toFilePath(value[0]); }),
@@ -113505,20 +115816,28 @@
         function toFilePathsSet(fileIdsListId) {
             return filePathsSetList[fileIdsListId - 1];
         }
-        function toMapOfReferencedSet(referenceMap) {
-            return referenceMap && ts.arrayToMap(referenceMap, function (value) { return toFilePath(value[0]); }, function (value) { return toFilePathsSet(value[1]); });
+        function toManyToManyPathMap(referenceMap) {
+            if (!referenceMap) {
+                return undefined;
+            }
+            var map = ts.BuilderState.createManyToManyPathMap();
+            referenceMap.forEach(function (_a) {
+                var fileId = _a[0], fileIdListId = _a[1];
+                return map.set(toFilePath(fileId), toFilePathsSet(fileIdListId));
+            });
+            return map;
         }
     }
     ts.createBuildProgramUsingProgramBuildInfo = createBuildProgramUsingProgramBuildInfo;
-    function createRedirectedBuilderProgram(state, configFileParsingDiagnostics) {
+    function createRedirectedBuilderProgram(getState, configFileParsingDiagnostics) {
         return {
             getState: ts.notImplemented,
             backupState: ts.noop,
             restoreState: ts.noop,
             getProgram: getProgram,
-            getProgramOrUndefined: function () { return state.program; },
-            releaseProgram: function () { return state.program = undefined; },
-            getCompilerOptions: function () { return state.compilerOptions; },
+            getProgramOrUndefined: function () { return getState().program; },
+            releaseProgram: function () { return getState().program = undefined; },
+            getCompilerOptions: function () { return getState().compilerOptions; },
             getSourceFile: function (fileName) { return getProgram().getSourceFile(fileName); },
             getSourceFiles: function () { return getProgram().getSourceFiles(); },
             getOptionsDiagnostics: function (cancellationToken) { return getProgram().getOptionsDiagnostics(cancellationToken); },
@@ -113534,7 +115853,7 @@
             close: ts.noop,
         };
         function getProgram() {
-            return ts.Debug.checkDefined(state.program);
+            return ts.Debug.checkDefined(getState().program);
         }
     }
     ts.createRedirectedBuilderProgram = createRedirectedBuilderProgram;
@@ -113551,7 +115870,7 @@
     ts.createEmitAndSemanticDiagnosticsBuilderProgram = createEmitAndSemanticDiagnosticsBuilderProgram;
     function createAbstractBuilder(newProgramOrRootNames, hostOrOptions, oldProgramOrHost, configFileParsingDiagnosticsOrOldProgram, configFileParsingDiagnostics, projectReferences) {
         var _a = ts.getBuilderCreationParameters(newProgramOrRootNames, hostOrOptions, oldProgramOrHost, configFileParsingDiagnosticsOrOldProgram, configFileParsingDiagnostics, projectReferences), newProgram = _a.newProgram, newConfigFileParsingDiagnostics = _a.configFileParsingDiagnostics;
-        return ts.createRedirectedBuilderProgram({ program: newProgram, compilerOptions: newProgram.getCompilerOptions() }, newConfigFileParsingDiagnostics);
+        return ts.createRedirectedBuilderProgram(function () { return ({ program: newProgram, compilerOptions: newProgram.getCompilerOptions() }); }, newConfigFileParsingDiagnostics);
     }
     ts.createAbstractBuilder = createAbstractBuilder;
 })(ts || (ts = {}));
@@ -113652,6 +115971,7 @@
         // TypeRoot watches for the types that get added as part of getAutomaticTypeDirectiveNames
         var typeRootsWatches = new ts.Map();
         return {
+            getModuleResolutionCache: function () { return moduleResolutionCache; },
             startRecordingFilesWithChangedResolutions: startRecordingFilesWithChangedResolutions,
             finishRecordingFilesWithChangedResolutions: finishRecordingFilesWithChangedResolutions,
             // perDirectoryResolvedModuleNames and perDirectoryResolvedTypeReferenceDirectives could be non empty if there was exception during program update
@@ -113775,7 +116095,7 @@
             return ts.resolveTypeReferenceDirective(typeReferenceDirectiveName, containingFile, options, host, redirectedReference, typeReferenceDirectiveResolutionCache);
         }
         function resolveNamesWithLocalCache(_a) {
-            var _b;
+            var _b, _c, _d;
             var names = _a.names, containingFile = _a.containingFile, redirectedReference = _a.redirectedReference, cache = _a.cache, perDirectoryCacheWithRedirects = _a.perDirectoryCacheWithRedirects, loader = _a.loader, getResolutionWithResolvedFileName = _a.getResolutionWithResolvedFileName, shouldRetryResolution = _a.shouldRetryResolution, reusedNames = _a.reusedNames, logChanges = _a.logChanges;
             var path = resolutionHost.toPath(containingFile);
             var resolutionsInFile = cache.get(path) || cache.set(path, new ts.Map()).get(path);
@@ -113808,9 +116128,24 @@
                     var resolutionInDirectory = perDirectoryResolution.get(name);
                     if (resolutionInDirectory) {
                         resolution = resolutionInDirectory;
+                        var host = ((_b = resolutionHost.getCompilerHost) === null || _b === void 0 ? void 0 : _b.call(resolutionHost)) || resolutionHost;
+                        if (ts.isTraceEnabled(compilerOptions, host)) {
+                            var resolved = getResolutionWithResolvedFileName(resolution);
+                            ts.trace(host, loader === resolveModuleName ?
+                                (resolved === null || resolved === void 0 ? void 0 : resolved.resolvedFileName) ?
+                                    resolved.packagetId ?
+                                        ts.Diagnostics.Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_3_with_Package_ID_4 :
+                                        ts.Diagnostics.Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_3 :
+                                    ts.Diagnostics.Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_not_resolved :
+                                (resolved === null || resolved === void 0 ? void 0 : resolved.resolvedFileName) ?
+                                    resolved.packagetId ?
+                                        ts.Diagnostics.Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_3_with_Package_ID_4 :
+                                        ts.Diagnostics.Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_3 :
+                                    ts.Diagnostics.Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_not_resolved, name, containingFile, ts.getDirectoryPath(containingFile), resolved === null || resolved === void 0 ? void 0 : resolved.resolvedFileName, (resolved === null || resolved === void 0 ? void 0 : resolved.packagetId) && ts.packageIdToString(resolved.packagetId));
+                        }
                     }
                     else {
-                        resolution = loader(name, containingFile, compilerOptions, ((_b = resolutionHost.getCompilerHost) === null || _b === void 0 ? void 0 : _b.call(resolutionHost)) || resolutionHost, redirectedReference);
+                        resolution = loader(name, containingFile, compilerOptions, ((_c = resolutionHost.getCompilerHost) === null || _c === void 0 ? void 0 : _c.call(resolutionHost)) || resolutionHost, redirectedReference);
                         perDirectoryResolution.set(name, resolution);
                     }
                     resolutionsInFile.set(name, resolution);
@@ -113824,6 +116159,23 @@
                         logChanges = false;
                     }
                 }
+                else {
+                    var host = ((_d = resolutionHost.getCompilerHost) === null || _d === void 0 ? void 0 : _d.call(resolutionHost)) || resolutionHost;
+                    if (ts.isTraceEnabled(compilerOptions, host) && !seenNamesInFile.has(name)) {
+                        var resolved = getResolutionWithResolvedFileName(resolution);
+                        ts.trace(host, loader === resolveModuleName ?
+                            (resolved === null || resolved === void 0 ? void 0 : resolved.resolvedFileName) ?
+                                resolved.packagetId ?
+                                    ts.Diagnostics.Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2_with_Package_ID_3 :
+                                    ts.Diagnostics.Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2 :
+                                ts.Diagnostics.Reusing_resolution_of_module_0_from_1_of_old_program_it_was_not_resolved :
+                            (resolved === null || resolved === void 0 ? void 0 : resolved.resolvedFileName) ?
+                                resolved.packagetId ?
+                                    ts.Diagnostics.Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved_to_2_with_Package_ID_3 :
+                                    ts.Diagnostics.Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved_to_2 :
+                                ts.Diagnostics.Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_not_resolved, name, containingFile, resolved === null || resolved === void 0 ? void 0 : resolved.resolvedFileName, (resolved === null || resolved === void 0 ? void 0 : resolved.packagetId) && ts.packageIdToString(resolved.packagetId));
+                    }
+                }
                 ts.Debug.assert(resolution !== undefined && !resolution.isInvalidated);
                 seenNamesInFile.set(name, true);
                 resolvedModules.push(getResolutionWithResolvedFileName(resolution));
@@ -114269,7 +116621,7 @@
 var ts;
 (function (ts) {
     var moduleSpecifiers;
-    (function (moduleSpecifiers) {
+    (function (moduleSpecifiers_1) {
         var RelativePreference;
         (function (RelativePreference) {
             RelativePreference[RelativePreference["Relative"] = 0] = "Relative";
@@ -114312,41 +116664,68 @@
             };
         }
         function updateModuleSpecifier(compilerOptions, importingSourceFileName, toFileName, host, oldImportSpecifier) {
-            var res = getModuleSpecifierWorker(compilerOptions, importingSourceFileName, toFileName, host, getPreferencesForUpdate(compilerOptions, oldImportSpecifier));
+            var res = getModuleSpecifierWorker(compilerOptions, importingSourceFileName, toFileName, host, getPreferencesForUpdate(compilerOptions, oldImportSpecifier), {});
             if (res === oldImportSpecifier)
                 return undefined;
             return res;
         }
-        moduleSpecifiers.updateModuleSpecifier = updateModuleSpecifier;
+        moduleSpecifiers_1.updateModuleSpecifier = updateModuleSpecifier;
         // Note: importingSourceFile is just for usesJsExtensionOnImports
-        function getModuleSpecifier(compilerOptions, importingSourceFile, importingSourceFileName, toFileName, host, preferences) {
-            if (preferences === void 0) { preferences = {}; }
-            return getModuleSpecifierWorker(compilerOptions, importingSourceFileName, toFileName, host, getPreferences(preferences, compilerOptions, importingSourceFile));
+        function getModuleSpecifier(compilerOptions, importingSourceFile, importingSourceFileName, toFileName, host) {
+            return getModuleSpecifierWorker(compilerOptions, importingSourceFileName, toFileName, host, getPreferences({}, compilerOptions, importingSourceFile), {});
         }
-        moduleSpecifiers.getModuleSpecifier = getModuleSpecifier;
-        function getNodeModulesPackageName(compilerOptions, importingSourceFileName, nodeModulesFileName, host) {
+        moduleSpecifiers_1.getModuleSpecifier = getModuleSpecifier;
+        function getNodeModulesPackageName(compilerOptions, importingSourceFileName, nodeModulesFileName, host, preferences) {
             var info = getInfo(importingSourceFileName, host);
-            var modulePaths = getAllModulePaths(importingSourceFileName, nodeModulesFileName, host);
+            var modulePaths = getAllModulePaths(importingSourceFileName, nodeModulesFileName, host, preferences);
             return ts.firstDefined(modulePaths, function (modulePath) { return tryGetModuleNameAsNodeModule(modulePath, info, host, compilerOptions, /*packageNameOnly*/ true); });
         }
-        moduleSpecifiers.getNodeModulesPackageName = getNodeModulesPackageName;
-        function getModuleSpecifierWorker(compilerOptions, importingSourceFileName, toFileName, host, preferences) {
+        moduleSpecifiers_1.getNodeModulesPackageName = getNodeModulesPackageName;
+        function getModuleSpecifierWorker(compilerOptions, importingSourceFileName, toFileName, host, preferences, userPreferences) {
             var info = getInfo(importingSourceFileName, host);
-            var modulePaths = getAllModulePaths(importingSourceFileName, toFileName, host);
+            var modulePaths = getAllModulePaths(importingSourceFileName, toFileName, host, userPreferences);
             return ts.firstDefined(modulePaths, function (modulePath) { return tryGetModuleNameAsNodeModule(modulePath, info, host, compilerOptions); }) ||
                 getLocalModuleSpecifier(toFileName, info, compilerOptions, host, preferences);
         }
+        function tryGetModuleSpecifiersFromCache(moduleSymbol, importingSourceFile, host, userPreferences) {
+            return tryGetModuleSpecifiersFromCacheWorker(moduleSymbol, importingSourceFile, host, userPreferences)[0];
+        }
+        moduleSpecifiers_1.tryGetModuleSpecifiersFromCache = tryGetModuleSpecifiersFromCache;
+        function tryGetModuleSpecifiersFromCacheWorker(moduleSymbol, importingSourceFile, host, userPreferences) {
+            var _a;
+            var moduleSourceFile = ts.getSourceFileOfModule(moduleSymbol);
+            if (!moduleSourceFile) {
+                return ts.emptyArray;
+            }
+            var cache = (_a = host.getModuleSpecifierCache) === null || _a === void 0 ? void 0 : _a.call(host);
+            var cached = cache === null || cache === void 0 ? void 0 : cache.get(importingSourceFile.path, moduleSourceFile.path, userPreferences);
+            return [cached === null || cached === void 0 ? void 0 : cached.moduleSpecifiers, moduleSourceFile, cached === null || cached === void 0 ? void 0 : cached.modulePaths, cache];
+        }
         /** Returns an import for each symlink and for the realpath. */
         function getModuleSpecifiers(moduleSymbol, checker, compilerOptions, importingSourceFile, host, userPreferences) {
+            return getModuleSpecifiersWithCacheInfo(moduleSymbol, checker, compilerOptions, importingSourceFile, host, userPreferences).moduleSpecifiers;
+        }
+        moduleSpecifiers_1.getModuleSpecifiers = getModuleSpecifiers;
+        function getModuleSpecifiersWithCacheInfo(moduleSymbol, checker, compilerOptions, importingSourceFile, host, userPreferences) {
+            var computedWithoutCache = false;
             var ambient = tryGetModuleNameFromAmbientModule(moduleSymbol, checker);
             if (ambient)
-                return [ambient];
+                return { moduleSpecifiers: [ambient], computedWithoutCache: computedWithoutCache };
+            // eslint-disable-next-line prefer-const
+            var _a = tryGetModuleSpecifiersFromCacheWorker(moduleSymbol, importingSourceFile, host, userPreferences), specifiers = _a[0], moduleSourceFile = _a[1], modulePaths = _a[2], cache = _a[3];
+            if (specifiers)
+                return { moduleSpecifiers: specifiers, computedWithoutCache: computedWithoutCache };
+            if (!moduleSourceFile)
+                return { moduleSpecifiers: ts.emptyArray, computedWithoutCache: computedWithoutCache };
+            computedWithoutCache = true;
+            modulePaths || (modulePaths = getAllModulePathsWorker(importingSourceFile.path, moduleSourceFile.originalFileName, host));
+            var result = computeModuleSpecifiers(modulePaths, compilerOptions, importingSourceFile, host, userPreferences);
+            cache === null || cache === void 0 ? void 0 : cache.set(importingSourceFile.path, moduleSourceFile.path, userPreferences, modulePaths, result);
+            return { moduleSpecifiers: result, computedWithoutCache: computedWithoutCache };
+        }
+        moduleSpecifiers_1.getModuleSpecifiersWithCacheInfo = getModuleSpecifiersWithCacheInfo;
+        function computeModuleSpecifiers(modulePaths, compilerOptions, importingSourceFile, host, userPreferences) {
             var info = getInfo(importingSourceFile.path, host);
-            var moduleSourceFile = ts.getSourceFileOfNode(moduleSymbol.valueDeclaration || ts.getNonAugmentationDeclaration(moduleSymbol));
-            if (!moduleSourceFile) {
-                return [];
-            }
-            var modulePaths = getAllModulePaths(importingSourceFile.path, moduleSourceFile.originalFileName, host);
             var preferences = getPreferences(userPreferences, compilerOptions, importingSourceFile);
             var existingSpecifier = ts.forEach(modulePaths, function (modulePath) { return ts.forEach(host.getFileIncludeReasons().get(ts.toPath(modulePath.path, host.getCurrentDirectory(), info.getCanonicalFileName)), function (reason) {
                 if (reason.kind !== ts.FileIncludeKind.Import || reason.file !== importingSourceFile.path)
@@ -114357,8 +116736,10 @@
                     specifier :
                     undefined;
             }); });
-            if (existingSpecifier)
-                return [existingSpecifier];
+            if (existingSpecifier) {
+                var moduleSpecifiers_2 = [existingSpecifier];
+                return moduleSpecifiers_2;
+            }
             var importedFileIsInNodeModules = ts.some(modulePaths, function (p) { return p.isInNodeModules; });
             // Module specifier priority:
             //   1. "Bare package specifiers" (e.g. "@foo/bar") resulting from a path through node_modules to a package.json's "types" entry
@@ -114400,7 +116781,6 @@
                 (nodeModulesSpecifiers === null || nodeModulesSpecifiers === void 0 ? void 0 : nodeModulesSpecifiers.length) ? nodeModulesSpecifiers :
                     ts.Debug.checkDefined(relativeSpecifiers);
         }
-        moduleSpecifiers.getModuleSpecifiers = getModuleSpecifiers;
         // importingSourceFileName is separate because getEditsForFileRename may need to specify an updated path
         function getInfo(importingSourceFileName, host) {
             var getCanonicalFileName = ts.createGetCanonicalFileName(host.useCaseSensitiveFileNames ? host.useCaseSensitiveFileNames() : true);
@@ -114477,7 +116857,7 @@
             }
             return count;
         }
-        moduleSpecifiers.countPathComponents = countPathComponents;
+        moduleSpecifiers_1.countPathComponents = countPathComponents;
         function usesJsExtensionOnImports(_a) {
             var imports = _a.imports;
             return ts.firstDefined(imports, function (_a) {
@@ -114497,25 +116877,23 @@
             });
         }
         function forEachFileNameOfModule(importingFileName, importedFileName, host, preferSymlinks, cb) {
+            var _a;
             var getCanonicalFileName = ts.hostGetCanonicalFileName(host);
             var cwd = host.getCurrentDirectory();
             var referenceRedirect = host.isSourceOfProjectReferenceRedirect(importedFileName) ? host.getProjectReferenceRedirect(importedFileName) : undefined;
             var importedPath = ts.toPath(importedFileName, cwd, getCanonicalFileName);
             var redirects = host.redirectTargetsMap.get(importedPath) || ts.emptyArray;
-            var importedFileNames = __spreadArray(__spreadArray(__spreadArray([], (referenceRedirect ? [referenceRedirect] : ts.emptyArray)), [importedFileName]), redirects);
+            var importedFileNames = __spreadArray(__spreadArray(__spreadArray([], (referenceRedirect ? [referenceRedirect] : ts.emptyArray), true), [importedFileName], false), redirects, true);
             var targets = importedFileNames.map(function (f) { return ts.getNormalizedAbsolutePath(f, cwd); });
             var shouldFilterIgnoredPaths = !ts.every(targets, ts.containsIgnoredPath);
             if (!preferSymlinks) {
                 // Symlinks inside ignored paths are already filtered out of the symlink cache,
                 // so we only need to remove them from the realpath filenames.
-                var result_16 = ts.forEach(targets, function (p) { return !(shouldFilterIgnoredPaths && ts.containsIgnoredPath(p)) && cb(p, referenceRedirect === p); });
-                if (result_16)
-                    return result_16;
+                var result_15 = ts.forEach(targets, function (p) { return !(shouldFilterIgnoredPaths && ts.containsIgnoredPath(p)) && cb(p, referenceRedirect === p); });
+                if (result_15)
+                    return result_15;
             }
-            var links = host.getSymlinkCache
-                ? host.getSymlinkCache()
-                : ts.discoverProbableSymlinks(host.getSourceFiles(), getCanonicalFileName, cwd);
-            var symlinkedDirectories = links.getSymlinkedDirectoriesByRealpath();
+            var symlinkedDirectories = (_a = host.getSymlinkCache) === null || _a === void 0 ? void 0 : _a.call(host).getSymlinkedDirectoriesByRealpath();
             var fullImportedFileName = ts.getNormalizedAbsolutePath(importedFileName, cwd);
             var result = symlinkedDirectories && ts.forEachAncestorDirectory(ts.getDirectoryPath(fullImportedFileName), function (realPathDirectory) {
                 var symlinkDirectories = symlinkedDirectories.get(ts.ensureTrailingDirectorySeparator(ts.toPath(realPathDirectory, cwd, getCanonicalFileName)));
@@ -114533,10 +116911,10 @@
                     for (var _i = 0, symlinkDirectories_1 = symlinkDirectories; _i < symlinkDirectories_1.length; _i++) {
                         var symlinkDirectory = symlinkDirectories_1[_i];
                         var option = ts.resolvePath(symlinkDirectory, relative);
-                        var result_17 = cb(option, target === referenceRedirect);
+                        var result_16 = cb(option, target === referenceRedirect);
                         shouldFilterIgnoredPaths = true; // We found a non-ignored path in symlinks, so we can reject ignored-path realpaths
-                        if (result_17)
-                            return result_17;
+                        if (result_16)
+                            return result_16;
                     }
                 });
             });
@@ -114544,20 +116922,28 @@
                 ? ts.forEach(targets, function (p) { return shouldFilterIgnoredPaths && ts.containsIgnoredPath(p) ? undefined : cb(p, p === referenceRedirect); })
                 : undefined);
         }
-        moduleSpecifiers.forEachFileNameOfModule = forEachFileNameOfModule;
+        moduleSpecifiers_1.forEachFileNameOfModule = forEachFileNameOfModule;
         /**
          * Looks for existing imports that use symlinks to this module.
          * Symlinks will be returned first so they are preferred over the real path.
          */
-        function getAllModulePaths(importingFileName, importedFileName, host) {
+        function getAllModulePaths(importingFilePath, importedFileName, host, preferences, importedFilePath) {
             var _a;
+            if (importedFilePath === void 0) { importedFilePath = ts.toPath(importedFileName, host.getCurrentDirectory(), ts.hostGetCanonicalFileName(host)); }
             var cache = (_a = host.getModuleSpecifierCache) === null || _a === void 0 ? void 0 : _a.call(host);
-            var getCanonicalFileName = ts.hostGetCanonicalFileName(host);
             if (cache) {
-                var cached = cache.get(importingFileName, ts.toPath(importedFileName, host.getCurrentDirectory(), getCanonicalFileName));
-                if (typeof cached === "object")
-                    return cached;
+                var cached = cache.get(importingFilePath, importedFilePath, preferences);
+                if (cached === null || cached === void 0 ? void 0 : cached.modulePaths)
+                    return cached.modulePaths;
             }
+            var modulePaths = getAllModulePathsWorker(importingFilePath, importedFileName, host);
+            if (cache) {
+                cache.setModulePaths(importingFilePath, importedFilePath, preferences, modulePaths);
+            }
+            return modulePaths;
+        }
+        function getAllModulePathsWorker(importingFileName, importedFileName, host) {
+            var getCanonicalFileName = ts.hostGetCanonicalFileName(host);
             var allFileNames = new ts.Map();
             var importedFileFromNodeModules = false;
             forEachFileNameOfModule(importingFileName, importedFileName, host, 
@@ -114569,7 +116955,7 @@
             });
             // Sort by paths closest to importing file Name directory
             var sortedPaths = [];
-            var _loop_26 = function (directory) {
+            var _loop_31 = function (directory) {
                 var directoryStart = ts.ensureTrailingDirectorySeparator(directory);
                 var pathsInDirectory;
                 allFileNames.forEach(function (_a, fileName) {
@@ -114593,7 +116979,7 @@
             };
             var out_directory_1;
             for (var directory = ts.getDirectoryPath(importingFileName); allFileNames.size !== 0;) {
-                var state_9 = _loop_26(directory);
+                var state_9 = _loop_31(directory);
                 directory = out_directory_1;
                 if (state_9 === "break")
                     break;
@@ -114604,9 +116990,6 @@
                     remainingPaths.sort(comparePathsByRedirectAndNumberOfDirectorySeparators);
                 sortedPaths.push.apply(sortedPaths, remainingPaths);
             }
-            if (cache) {
-                cache.set(importingFileName, ts.toPath(importedFileName, host.getCurrentDirectory(), getCanonicalFileName), sortedPaths);
-            }
             return sortedPaths;
         }
         function tryGetModuleNameFromAmbientModule(moduleSymbol, checker) {
@@ -114862,7 +117245,11 @@
             }
         }
         function getJSExtensionForFile(fileName, options) {
-            var ext = ts.extensionFromPath(fileName);
+            var _a;
+            return (_a = tryGetJSExtensionForFile(fileName, options)) !== null && _a !== void 0 ? _a : ts.Debug.fail("Extension " + ts.extensionFromPath(fileName) + " is unsupported:: FileName:: " + fileName);
+        }
+        function tryGetJSExtensionForFile(fileName, options) {
+            var ext = ts.tryGetExtensionFromPath(fileName);
             switch (ext) {
                 case ".ts" /* Ts */:
                 case ".d.ts" /* Dts */:
@@ -114873,12 +117260,11 @@
                 case ".jsx" /* Jsx */:
                 case ".json" /* Json */:
                     return ext;
-                case ".tsbuildinfo" /* TsBuildInfo */:
-                    return ts.Debug.fail("Extension " + ".tsbuildinfo" /* TsBuildInfo */ + " is unsupported:: FileName:: " + fileName);
                 default:
-                    return ts.Debug.assertNever(ext);
+                    return undefined;
             }
         }
+        moduleSpecifiers_1.tryGetJSExtensionForFile = tryGetJSExtensionForFile;
         function getRelativePathIfInDirectory(path, directoryPath, getCanonicalFileName) {
             var relativePath = ts.getRelativePathToDirectoryOrUrl(directoryPath, path, directoryPath, getCanonicalFileName, /*isAbsolutePathAnUrl*/ false);
             return ts.isRootedDiskPath(relativePath) ? undefined : relativePath;
@@ -114895,12 +117281,12 @@
         getCurrentDirectory: function () { return ts.sys.getCurrentDirectory(); },
         getNewLine: function () { return ts.sys.newLine; },
         getCanonicalFileName: ts.createGetCanonicalFileName(ts.sys.useCaseSensitiveFileNames)
-    } : undefined; // TODO: GH#18217
+    } : undefined;
     /**
      * Create a function that reports error by writing to the system and handles the formating of the diagnostic
      */
     function createDiagnosticReporter(system, pretty) {
-        var host = system === ts.sys ? sysFormatDiagnosticsHost : {
+        var host = system === ts.sys && sysFormatDiagnosticsHost ? sysFormatDiagnosticsHost : {
             getCurrentDirectory: function () { return system.getCurrentDirectory(); },
             getNewLine: function () { return system.newLine; },
             getCanonicalFileName: ts.createGetCanonicalFileName(system.useCaseSensitiveFileNames),
@@ -115246,6 +117632,7 @@
         ConfigFileOfReferencedProject: "Config file of referened project",
         ExtendedConfigOfReferencedProject: "Extended config file of referenced project",
         WildcardDirectoryOfReferencedProject: "Wild card directory of referenced project",
+        PackageJson: "package.json file",
     };
     function createWatchFactory(host, options) {
         var watchLogLevel = host.trace ? options.extendedDiagnostics ? ts.WatchLogLevel.Verbose : options.diagnostics ? ts.WatchLogLevel.TriggerOnly : ts.WatchLogLevel.None : ts.WatchLogLevel.None;
@@ -115320,7 +117707,7 @@
             for (var _i = 0; _i < arguments.length; _i++) {
                 args[_i] = arguments[_i];
             }
-            var result = originalGetSourceFile.call.apply(originalGetSourceFile, __spreadArray([compilerHost], args));
+            var result = originalGetSourceFile.call.apply(originalGetSourceFile, __spreadArray([compilerHost], args, false));
             if (result) {
                 result.version = computeHash(result.text);
             }
@@ -115484,12 +117871,14 @@
         var builderProgram;
         var reloadLevel; // level to indicate if the program needs to be reloaded from config file/just filenames etc
         var missingFilesMap; // Map of file watchers for the missing files
+        var packageJsonMap; // map of watchers for package json files used in module resolution
         var watchedWildcardDirectories; // map of watchers for the wild card directories in the config file
         var timerToUpdateProgram; // timer callback to recompile the program
         var timerToInvalidateFailedLookupResolutions; // timer callback to invalidate resolutions for changes in failed lookup locations
         var parsedConfigs; // Parsed commandline and watching cached for referenced projects
         var sharedExtendedConfigFileWatchers; // Map of file watchers for extended files, shared between different referenced projects
         var extendedConfigCache = host.extendedConfigCache; // Cache for extended config evaluation
+        var changesAffectResolution = false; // Flag for indicating non-config changes affect module resolution
         var sourceFilesCache = new ts.Map(); // Cache that stores the source file and version info
         var missingFilePathsRequestedForRelease; // These paths are held temporarily so that we can remove the entry from source file cache if the file is not tracked by missing files
         var hasChangedCompilerOptions = false; // True if the compiler options have changed between compilations
@@ -115533,7 +117922,7 @@
             for (var _i = 1; _i < arguments.length; _i++) {
                 args[_i - 1] = arguments[_i];
             }
-            return getVersionedSourceFileByPath.apply(void 0, __spreadArray([fileName, toPath(fileName)], args));
+            return getVersionedSourceFileByPath.apply(void 0, __spreadArray([fileName, toPath(fileName)], args, false));
         };
         compilerHost.getSourceFileByPath = getVersionedSourceFileByPath;
         compilerHost.getNewLine = function () { return newLine; };
@@ -115640,12 +118029,12 @@
             var program = getCurrentBuilderProgram();
             if (hasChangedCompilerOptions) {
                 newLine = updateNewLine();
-                if (program && ts.changesAffectModuleResolution(program.getCompilerOptions(), compilerOptions)) {
+                if (program && (changesAffectResolution || ts.changesAffectModuleResolution(program.getCompilerOptions(), compilerOptions))) {
                     resolutionCache.clear();
                 }
             }
             // All resolutions are invalid if user provided resolutions
-            var hasInvalidatedResolution = resolutionCache.createHasInvalidatedResolution(userProvidedResolution);
+            var hasInvalidatedResolution = resolutionCache.createHasInvalidatedResolution(userProvidedResolution || changesAffectResolution);
             if (ts.isProgramUptoDate(getCurrentProgram(), rootFileNames, compilerOptions, getSourceVersion, fileExists, hasInvalidatedResolution, hasChangedAutomaticTypeDirectiveNames, getParsedCommandLine, projectReferences)) {
                 if (hasChangedConfigFileParsingErrors) {
                     builderProgram = createProgram(/*rootNames*/ undefined, /*options*/ undefined, compilerHost, builderProgram, configFileParsingDiagnostics, projectReferences);
@@ -115655,6 +118044,7 @@
             else {
                 createNewProgram(hasInvalidatedResolution);
             }
+            changesAffectResolution = false; // reset for next sync
             if (host.afterProgramCreate && program !== builderProgram) {
                 host.afterProgramCreate(builderProgram);
             }
@@ -115674,9 +118064,15 @@
             compilerHost.hasInvalidatedResolution = hasInvalidatedResolution;
             compilerHost.hasChangedAutomaticTypeDirectiveNames = hasChangedAutomaticTypeDirectiveNames;
             builderProgram = createProgram(rootFileNames, compilerOptions, compilerHost, builderProgram, configFileParsingDiagnostics, projectReferences);
+            // map package json cache entries to their realpaths so we don't try to watch across symlinks
+            var packageCacheEntries = ts.map(resolutionCache.getModuleResolutionCache().getPackageJsonInfoCache().entries(), function (_a) {
+                var path = _a[0], data = _a[1];
+                return [compilerHost.realpath ? toPath(compilerHost.realpath(path)) : path, data];
+            });
             resolutionCache.finishCachingPerDirectoryResolution();
             // Update watches
             ts.updateMissingFilePathsWatch(builderProgram.getProgram(), missingFilesMap || (missingFilesMap = new ts.Map()), watchMissingFilePath);
+            ts.updatePackageJsonWatch(packageCacheEntries, packageJsonMap || (packageJsonMap = new ts.Map()), watchPackageJsonLookupPath);
             if (needsUpdateInTypeRootWatch) {
                 resolutionCache.updateTypeRootsWatch();
             }
@@ -115978,6 +118374,21 @@
                 ts.noopFileWatcher :
                 watchFilePath(missingFilePath, missingFilePath, onMissingFileChange, ts.PollingInterval.Medium, watchOptions, ts.WatchType.MissingFile);
         }
+        function watchPackageJsonLookupPath(packageJsonPath) {
+            // If the package.json is pulled into the compilation itself (eg, via json imports), don't add a second watcher here
+            return sourceFilesCache.has(packageJsonPath) ?
+                ts.noopFileWatcher :
+                watchFilePath(packageJsonPath, packageJsonPath, onPackageJsonChange, ts.PollingInterval.High, watchOptions, ts.WatchType.PackageJson);
+        }
+        function onPackageJsonChange(fileName, eventKind, path) {
+            updateCachedSystemWithFile(fileName, path, eventKind);
+            // package.json changes invalidate module resolution and can change the set of loaded files
+            // so if we witness a change to one, we have to do a full reload
+            reloadLevel = ts.ConfigFileProgramReloadLevel.Full;
+            changesAffectResolution = true;
+            // Update the program
+            scheduleProgramUpdate();
+        }
         function onMissingFileChange(fileName, eventKind, missingFilePath) {
             updateCachedSystemWithFile(fileName, missingFilePath, eventKind);
             if (eventKind === ts.FileWatcherEventKind.Created && missingFilesMap.has(missingFilePath)) {
@@ -116321,6 +118732,8 @@
             allWatchedInputFiles: new ts.Map(),
             allWatchedConfigFiles: new ts.Map(),
             allWatchedExtendedConfigFiles: new ts.Map(),
+            allWatchedPackageJsonFiles: new ts.Map(),
+            lastCachedPackageJsonLookups: new ts.Map(),
             timerToBuildInvalidatedProject: undefined,
             reportFileChangeDetected: false,
             watchFile: watchFile,
@@ -116444,6 +118857,7 @@
             });
             ts.mutateMapSkippingNewValues(state.allWatchedWildcardDirectories, currentProjects, { onDeleteValue: function (existingMap) { return existingMap.forEach(ts.closeFileWatcherOf); } });
             ts.mutateMapSkippingNewValues(state.allWatchedInputFiles, currentProjects, { onDeleteValue: function (existingMap) { return existingMap.forEach(ts.closeFileWatcher); } });
+            ts.mutateMapSkippingNewValues(state.allWatchedPackageJsonFiles, currentProjects, { onDeleteValue: function (existingMap) { return existingMap.forEach(ts.closeFileWatcher); } });
         }
         return state.buildOrder = buildOrder;
     }
@@ -116476,7 +118890,7 @@
             for (var _i = 0; _i < arguments.length; _i++) {
                 args[_i] = arguments[_i];
             }
-            return originalGetSourceFile.call.apply(originalGetSourceFile, __spreadArray([compilerHost], args));
+            return originalGetSourceFile.call.apply(originalGetSourceFile, __spreadArray([compilerHost], args, false));
         }), originalReadFile = _a.originalReadFile, originalFileExists = _a.originalFileExists, originalDirectoryExists = _a.originalDirectoryExists, originalCreateDirectory = _a.originalCreateDirectory, originalWriteFile = _a.originalWriteFile, getSourceFileWithCache = _a.getSourceFileWithCache, readFileWithCache = _a.readFileWithCache;
         state.readFileWithCache = readFileWithCache;
         compilerHost.getSourceFile = getSourceFileWithCache;
@@ -116694,6 +119108,10 @@
             (_b = state.typeReferenceDirectiveResolutionCache) === null || _b === void 0 ? void 0 : _b.update(config.options);
             // Create program
             program = host.createProgram(config.fileNames, config.options, compilerHost, getOldProgram(state, projectPath, config), ts.getConfigFileParsingDiagnostics(config), config.projectReferences);
+            state.lastCachedPackageJsonLookups.set(projectPath, state.moduleResolutionCache && ts.map(state.moduleResolutionCache.getPackageJsonInfoCache().entries(), function (_a) {
+                var path = _a[0], data = _a[1];
+                return [state.host.realpath ? toPath(state, state.host.realpath(path)) : path, data];
+            }));
             if (state.watch) {
                 state.builderPrograms.set(projectPath, program);
             }
@@ -116710,7 +119128,7 @@
         }
         function getSyntaxDiagnostics(cancellationToken) {
             ts.Debug.assertIsDefined(program);
-            handleDiagnostics(__spreadArray(__spreadArray(__spreadArray(__spreadArray([], program.getConfigFileParsingDiagnostics()), program.getOptionsDiagnostics(cancellationToken)), program.getGlobalDiagnostics(cancellationToken)), program.getSyntacticDiagnostics(/*sourceFile*/ undefined, cancellationToken)), BuildResultFlags.SyntaxErrors, "Syntactic");
+            handleDiagnostics(__spreadArray(__spreadArray(__spreadArray(__spreadArray([], program.getConfigFileParsingDiagnostics(), true), program.getOptionsDiagnostics(cancellationToken), true), program.getGlobalDiagnostics(cancellationToken), true), program.getSyntacticDiagnostics(/*sourceFile*/ undefined, cancellationToken), true), BuildResultFlags.SyntaxErrors, "Syntactic");
         }
         function getSemanticDiagnostics(cancellationToken) {
             handleDiagnostics(ts.Debug.checkDefined(program).getSemanticDiagnostics(/*sourceFile*/ undefined, cancellationToken), BuildResultFlags.TypeErrors, "Semantic");
@@ -116774,7 +119192,7 @@
             var emitResult = program.emitBuildInfo(writeFileCallback, cancellationToken);
             if (emitResult.diagnostics.length) {
                 reportErrors(state, emitResult.diagnostics);
-                state.diagnostics.set(projectPath, __spreadArray(__spreadArray([], state.diagnostics.get(projectPath)), emitResult.diagnostics));
+                state.diagnostics.set(projectPath, __spreadArray(__spreadArray([], state.diagnostics.get(projectPath), true), emitResult.diagnostics, true));
                 buildResult = BuildResultFlags.EmitErrors & buildResult;
             }
             if (emitResult.emittedFiles && state.write) {
@@ -116925,12 +119343,14 @@
                 watchExtendedConfigFiles(state, projectPath, config);
                 watchWildCardDirectories(state, project, projectPath, config);
                 watchInputFiles(state, project, projectPath, config);
+                watchPackageJsonFiles(state, project, projectPath, config);
             }
             else if (reloadLevel === ts.ConfigFileProgramReloadLevel.Partial) {
                 // Update file names
                 config.fileNames = ts.getFileNamesFromConfigSpecs(config.options.configFile.configFileSpecs, ts.getDirectoryPath(project), config.options, state.parseConfigFileHost);
                 ts.updateErrorForNoInputFiles(config.fileNames, project, config.options.configFile.configFileSpecs, config.errors, ts.canJsonReportNoInputFiles(config.raw));
                 watchInputFiles(state, project, projectPath, config);
+                watchPackageJsonFiles(state, project, projectPath, config);
             }
             var status = getUpToDateStatus(state, config, projectPath);
             verboseReportProjectStatus(state, project, status);
@@ -117173,6 +119593,13 @@
             var extendedConfigStatus = ts.forEach(project.options.configFile.extendedSourceFiles || ts.emptyArray, function (configFile) { return checkConfigFileUpToDateStatus(state, configFile, oldestOutputFileTime, oldestOutputFileName); });
             if (extendedConfigStatus)
                 return extendedConfigStatus;
+            // Check package file time
+            var dependentPackageFileStatus = ts.forEach(state.lastCachedPackageJsonLookups.get(resolvedPath) || ts.emptyArray, function (_a) {
+                var path = _a[0];
+                return checkConfigFileUpToDateStatus(state, path, oldestOutputFileTime, oldestOutputFileName);
+            });
+            if (dependentPackageFileStatus)
+                return dependentPackageFileStatus;
         }
         if (!force && !state.buildInfoChecked.has(resolvedPath)) {
             state.buildInfoChecked.set(resolvedPath, true);
@@ -117219,6 +119646,8 @@
         return actual;
     }
     function updateOutputTimestampsWorker(state, proj, priorNewestUpdateTime, verboseMessage, skipOutputs) {
+        if (proj.options.noEmit)
+            return priorNewestUpdateTime;
         var host = state.host;
         var outputs = ts.getAllProjectOutputs(proj, !host.useCaseSensitiveFileNames());
         if (!skipOutputs || outputs.length !== skipOutputs.size) {
@@ -117482,6 +119911,14 @@
             onDeleteValue: ts.closeFileWatcher,
         });
     }
+    function watchPackageJsonFiles(state, resolved, resolvedPath, parsed) {
+        if (!state.watch || !state.lastCachedPackageJsonLookups)
+            return;
+        ts.mutateMap(getOrCreateValueMapFromConfigFileMap(state.allWatchedPackageJsonFiles, resolvedPath), new ts.Map(state.lastCachedPackageJsonLookups.get(resolvedPath)), {
+            createNewValue: function (path, _input) { return state.watchFile(path, function () { return invalidateProjectAndScheduleBuilds(state, resolvedPath, ts.ConfigFileProgramReloadLevel.Full); }, ts.PollingInterval.High, parsed === null || parsed === void 0 ? void 0 : parsed.watchOptions, ts.WatchType.PackageJson, resolved); },
+            onDeleteValue: ts.closeFileWatcher,
+        });
+    }
     function startWatching(state, buildOrder) {
         if (!state.watchAllProjectsPending)
             return;
@@ -117498,6 +119935,8 @@
                 watchWildCardDirectories(state, resolved, resolvedPath, cfg);
                 // Watch input files
                 watchInputFiles(state, resolved, resolvedPath, cfg);
+                // Watch package json files
+                watchPackageJsonFiles(state, resolved, resolvedPath, cfg);
             }
         }
     }
@@ -117506,6 +119945,7 @@
         ts.clearMap(state.allWatchedExtendedConfigFiles, ts.closeFileWatcherOf);
         ts.clearMap(state.allWatchedWildcardDirectories, function (watchedWildcardDirectories) { return ts.clearMap(watchedWildcardDirectories, ts.closeFileWatcherOf); });
         ts.clearMap(state.allWatchedInputFiles, function (watchedWildcardDirectories) { return ts.clearMap(watchedWildcardDirectories, ts.closeFileWatcher); });
+        ts.clearMap(state.allWatchedPackageJsonFiles, function (watchedPacageJsonFiles) { return ts.clearMap(watchedPacageJsonFiles, ts.closeFileWatcher); });
     }
     function createSolutionBuilderWorker(watch, hostOrHostWithWatch, rootNames, options, baseWatchOptions) {
         var state = createSolutionBuilderState(watch, hostOrHostWithWatch, rootNames, options, baseWatchOptions);
@@ -117538,7 +119978,7 @@
         for (var _i = 2; _i < arguments.length; _i++) {
             args[_i - 2] = arguments[_i];
         }
-        state.host.reportSolutionBuilderStatus(ts.createCompilerDiagnostic.apply(void 0, __spreadArray([message], args)));
+        state.host.reportSolutionBuilderStatus(ts.createCompilerDiagnostic.apply(void 0, __spreadArray([message], args, false)));
     }
     function reportWatchStatus(state, message) {
         var _a, _b;
@@ -117546,7 +119986,7 @@
         for (var _i = 2; _i < arguments.length; _i++) {
             args[_i - 2] = arguments[_i];
         }
-        (_b = (_a = state.hostWithWatch).onWatchStatusChange) === null || _b === void 0 ? void 0 : _b.call(_a, ts.createCompilerDiagnostic.apply(void 0, __spreadArray([message], args)), state.host.getNewLine(), state.baseCompilerOptions);
+        (_b = (_a = state.hostWithWatch).onWatchStatusChange) === null || _b === void 0 ? void 0 : _b.call(_a, ts.createCompilerDiagnostic.apply(void 0, __spreadArray([message], args, false)), state.host.getNewLine(), state.baseCompilerOptions);
     }
     function reportErrors(_a, errors) {
         var host = _a.host;
@@ -117720,8 +120160,9 @@
             return availableVersion.compareTo(cachedTyping.version) <= 0;
         }
         JsTyping.isTypingUpToDate = isTypingUpToDate;
-        JsTyping.nodeCoreModuleList = [
+        var unprefixedNodeCoreModuleList = [
             "assert",
+            "assert/strict",
             "async_hooks",
             "buffer",
             "child_process",
@@ -117730,14 +120171,18 @@
             "constants",
             "crypto",
             "dgram",
+            "diagnostics_channel",
             "dns",
+            "dns/promises",
             "domain",
             "events",
             "fs",
+            "fs/promises",
             "http",
             "https",
             "http2",
             "inspector",
+            "module",
             "net",
             "os",
             "path",
@@ -117748,16 +120193,24 @@
             "readline",
             "repl",
             "stream",
+            "stream/promises",
             "string_decoder",
             "timers",
+            "timers/promises",
             "tls",
+            "trace_events",
             "tty",
             "url",
             "util",
+            "util/types",
             "v8",
             "vm",
+            "wasi",
+            "worker_threads",
             "zlib"
         ];
+        JsTyping.prefixedNodeCoreModuleList = unprefixedNodeCoreModuleList.map(function (name) { return "node:" + name; });
+        JsTyping.nodeCoreModuleList = __spreadArray(__spreadArray([], unprefixedNodeCoreModuleList, true), JsTyping.prefixedNodeCoreModuleList, true);
         JsTyping.nodeCoreModules = new ts.Set(JsTyping.nodeCoreModuleList);
         function nonRelativeModuleNameForTypingCache(moduleName) {
             return JsTyping.nodeCoreModules.has(moduleName) ? "node" : moduleName;
diff --git a/node_modules/typescript/lib/zh-cn/diagnosticMessages.generated.json b/node_modules/typescript/lib/zh-cn/diagnosticMessages.generated.json
index 1fd2fa8..b37af3d 100644
--- a/node_modules/typescript/lib/zh-cn/diagnosticMessages.generated.json
+++ b/node_modules/typescript/lib/zh-cn/diagnosticMessages.generated.json
@@ -1,4 +1,5 @@
 {
+  "ALL_COMPILER_OPTIONS_6917": "所有编译器选项",
   "A_0_modifier_cannot_be_used_with_an_import_declaration_1079": "“{0}”修饰符不能与导入声明一起使用。",
   "A_0_modifier_cannot_be_used_with_an_interface_declaration_1045": "“{0}”修饰符不能与接口声明一起使用。",
   "A_0_parameter_must_be_the_first_parameter_2680": "“{0}”参数必须是第一个参数。",
@@ -15,7 +16,7 @@
   "A_class_member_cannot_have_the_0_keyword_1248": "类成员不可具有“{0}”关键字。",
   "A_comma_expression_is_not_allowed_in_a_computed_property_name_1171": "计算属性名中不允许逗号表达式。",
   "A_computed_property_name_cannot_reference_a_type_parameter_from_its_containing_type_2467": "计算属性名无法从其包含的类型引用类型参数。",
-  "A_computed_property_name_in_a_class_property_declaration_must_refer_to_an_expression_whose_type_is_a_1166": "类属性声明中的计算属性名称必须引用类型为文本类型或 \"unique symbol\" 类型的表达式。",
+  "A_computed_property_name_in_a_class_property_declaration_must_have_a_simple_literal_type_or_a_unique_1166": "类属性声明中的计算属性名称必须具有简单文本类型或“唯一符号”类型。",
   "A_computed_property_name_in_a_method_overload_must_refer_to_an_expression_whose_type_is_a_literal_ty_1168": "方法重载中的计算属性名称必须引用文本类型或 \"unique symbol\" 类型的表达式。",
   "A_computed_property_name_in_a_type_literal_must_refer_to_an_expression_whose_type_is_a_literal_type__1170": "类型文本中的计算属性名称必须引用类型为文本类型或 \"unique symbol\" 类型的表达式。",
   "A_computed_property_name_in_an_ambient_context_must_refer_to_an_expression_whose_type_is_a_literal_t_1165": "环境上下文中的计算属性名称必须引用类型为文本类型或 \"unique symbol\" 类型的表达式。",
@@ -33,24 +34,25 @@
   "A_decorator_can_only_decorate_a_method_implementation_not_an_overload_1249": "修饰器仅可修饰方法实现,而不可修饰重载。",
   "A_default_clause_cannot_appear_more_than_once_in_a_switch_statement_1113": "\"default\" 子句在 \"switch\" 语句中只能出现一次。",
   "A_default_export_can_only_be_used_in_an_ECMAScript_style_module_1319": "默认导出只能在 ECMAScript-style 模块中使用。",
+  "A_default_export_must_be_at_the_top_level_of_a_file_or_module_declaration_1258": "默认导出必须位于文件或模块声明的顶层。",
   "A_definite_assignment_assertion_is_not_permitted_in_this_context_1255": "此上下文中不允许明确的赋值断言 \"!\"。",
   "A_destructuring_declaration_must_have_an_initializer_1182": "析构声明必须具有初始化表达式。",
-  "A_dynamic_import_call_in_ES5_SlashES3_requires_the_Promise_constructor_Make_sure_you_have_a_declarat_2712": "ES5/ES3 中的动态导入调用需要 \"Promise\" 构造函数。确保对 \"Promise\" 构造函数进行了声明或在 \"--lib\" 选项中包含了 \"ES2015\"。",
-  "A_dynamic_import_call_returns_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_include_ES20_2711": "动态导入调用返回 \"Promise\"。请确保具有对 \"Promise\" 的声明或在 `--lib` 选项中包括 \"ES2015\"。",
+  "A_dynamic_import_call_in_ES5_SlashES3_requires_the_Promise_constructor_Make_sure_you_have_a_declarat_2712": "ES5/ES3 中的动态导入调用需要 “Promise” 构造函数。请确保对 “Promise” 构造函数进行了声明或在 “--lib” 选项中包含了 “ES2015”。",
+  "A_dynamic_import_call_returns_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_include_ES20_2711": "动态导入调用返回 “Promise”。请确保具有对 “Promise” 的声明或在 “--lib” 选项中包含了 “ES2015”。",
   "A_file_cannot_have_a_reference_to_itself_1006": "文件不能引用自身。",
-  "A_for_await_of_statement_is_only_allowed_within_an_async_function_or_async_generator_1103": "仅异步函数或异步生成器中允许 \"for-await-of\" 语句。",
   "A_function_returning_never_cannot_have_a_reachable_end_point_2534": "返回“从不”的函数不能具有可访问的终结点。",
   "A_function_that_is_called_with_the_new_keyword_cannot_have_a_this_type_that_is_void_2679": "使用 \"new\" 关键字调用的函数不可具有“失效”的 \"this\" 类型。",
   "A_function_whose_declared_type_is_neither_void_nor_any_must_return_a_value_2355": "其声明类型不为 \"void\" 或 \"any\" 的函数必须返回值。",
   "A_generator_cannot_have_a_void_type_annotation_2505": "生成器不能具有 \"void\" 类型批注。",
   "A_get_accessor_cannot_have_parameters_1054": "\"get\" 访问器不能具有参数。",
+  "A_get_accessor_must_be_at_least_as_accessible_as_the_setter_2808": "Get 访问器必须至少具有与 Setter 相同的可访问性",
   "A_get_accessor_must_return_a_value_2378": "\"get\" 访问器必须返回值。",
   "A_label_is_not_allowed_here_1344": "此处不允许使用 'A 标签。",
   "A_labeled_tuple_element_is_declared_as_optional_with_a_question_mark_after_the_name_and_before_the_c_5086": "标记的元组元素被声明为可选,并且问号位于名称之后、冒号之前,而不是位于类型之后。",
-  "A_labeled_tuple_element_is_declared_as_rest_with_a_before_the_name_rather_than_before_the_type_5087": "标记的元组元素在名称之前(而不是类型之前)以 \"…\" 声明为 rest。",
+  "A_labeled_tuple_element_is_declared_as_rest_with_a_before_the_name_rather_than_before_the_type_5087": "标记的元组元素通过在名称之前(而不是类型之前)的 “...” 声明为 rest。",
   "A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_memb_2651": "枚举声明中的成员初始化表达式不能引用在其后声明的成员(包括在其他枚举中定义的成员)。",
-  "A_method_cannot_be_named_with_a_private_identifier_18022": "不能用专用标识符命名方法。",
   "A_mixin_class_must_have_a_constructor_with_a_single_rest_parameter_of_type_any_2545": "mixin 类必须具有单个 rest 参数为类型 \"any[]\" 的构造函数。",
+  "A_mixin_class_that_extends_from_a_type_variable_containing_an_abstract_construct_signature_must_also_2797": "从包含抽象构造签名的类型变量扩展的 mixin 类也必须声明为 \"abstract\"。",
   "A_module_cannot_have_multiple_default_exports_2528": "一个模块不能具有多个默认导出。",
   "A_namespace_declaration_cannot_be_in_a_different_file_from_a_class_or_function_with_which_it_is_merg_2433": "命名空间声明必须位于与之合并的类或函数所在的相同文件内。",
   "A_namespace_declaration_cannot_be_located_prior_to_a_class_or_function_with_which_it_is_merged_2434": "命名空间声明不能位于与之合并的类或函数前",
@@ -71,10 +73,10 @@
   "A_required_element_cannot_follow_an_optional_element_1257": "必选元素不能位于可选元素后。",
   "A_required_parameter_cannot_follow_an_optional_parameter_1016": "必选参数不能位于可选参数后。",
   "A_rest_element_cannot_contain_a_binding_pattern_2501": "rest 元素不能包含绑定模式。",
+  "A_rest_element_cannot_follow_another_rest_element_1265": "rest 元素不能跟在另一个 rest 元素之后。",
   "A_rest_element_cannot_have_a_property_name_2566": "其余元素不能具有属性名。",
   "A_rest_element_cannot_have_an_initializer_1186": "rest 元素不能具有初始化表达式。",
   "A_rest_element_must_be_last_in_a_destructuring_pattern_2462": "rest 元素必须在析构模式中位于最末。",
-  "A_rest_element_must_be_last_in_a_tuple_type_1256": "rest 元素必须在元组类型中位于最末。",
   "A_rest_element_type_must_be_an_array_type_2574": "rest 元素类型必须是数组类型。",
   "A_rest_parameter_cannot_be_optional_1047": "rest 参数不能为可选参数。",
   "A_rest_parameter_cannot_have_an_initializer_1048": "rest 参数不能具有初始化表达式。",
@@ -82,6 +84,7 @@
   "A_rest_parameter_must_be_of_an_array_type_2370": "rest 参数必须是数组类型。",
   "A_rest_parameter_or_binding_pattern_may_not_have_a_trailing_comma_1013": "Rest 参数或绑定模式不可带尾随逗号。",
   "A_return_statement_can_only_be_used_within_a_function_body_1108": "\"return\" 语句只能在函数体中使用。",
+  "A_return_statement_cannot_be_used_inside_a_class_static_block_18041": "不能在类静态块内使用 “return” 语句。",
   "A_series_of_entries_which_re_map_imports_to_lookup_locations_relative_to_the_baseUrl_6167": "一系列条目,这些条目将重新映射导入内容,以查找与 \"baseUrl\" 有关的位置。",
   "A_set_accessor_cannot_have_a_return_type_annotation_1095": "\"set\" 访问器不能具有返回类型批注。",
   "A_set_accessor_cannot_have_an_optional_parameter_1051": "\"set\" 访问器不能具有可选参数。",
@@ -89,6 +92,7 @@
   "A_set_accessor_must_have_exactly_one_parameter_1049": "\"set\" 访问器必须正好具有一个参数。",
   "A_set_accessor_parameter_cannot_have_an_initializer_1052": "\"set\" 访问器参数不能包含初始化表达式。",
   "A_signature_with_an_implementation_cannot_use_a_string_literal_type_2381": "具有实现的签名不能使用字符串文本类型。",
+  "A_spread_argument_must_either_have_a_tuple_type_or_be_passed_to_a_rest_parameter_2556": "扩张参数必须具有元组类型或传递给 rest 参数。",
   "A_super_call_must_be_the_first_statement_in_the_constructor_when_a_class_contains_initialized_proper_2376": "当类包含初始化的属性、参数属性或专用标识符时,\"super\" 调用必须是构造函数中的第一个语句。",
   "A_this_based_type_guard_is_not_compatible_with_a_parameter_based_type_guard_2518": "基于 \"this\" 的类型防护与基于参数的类型防护不兼容。",
   "A_this_type_is_available_only_in_a_non_static_member_of_a_class_or_interface_2526": "\"this\" 类型仅在类或接口的非静态成员中可用。",
@@ -114,8 +118,11 @@
   "Add_a_return_statement_95111": "添加 return 语句",
   "Add_all_missing_async_modifiers_95041": "添加所有缺失的 \"async\" 修饰符",
   "Add_all_missing_call_parentheses_95068": "添加所有缺失的调用括号",
+  "Add_all_missing_function_declarations_95157": "添加缺少的所有函数声明",
   "Add_all_missing_imports_95064": "添加所有缺少的导入",
   "Add_all_missing_members_95022": "添加所有缺少的成员",
+  "Add_all_missing_override_modifiers_95162": "添加所有缺失的 \"override\" 修饰符",
+  "Add_all_missing_properties_95166": "添加所有缺少的属性",
   "Add_all_missing_return_statement_95114": "添加所有缺少的 return 语句",
   "Add_all_missing_super_calls_95039": "添加所有缺失的超级调用",
   "Add_async_modifier_to_containing_function_90029": "将异步修饰符添加到包含函数",
@@ -135,18 +142,22 @@
   "Add_initializers_to_all_uninitialized_properties_95027": "将初始化表达式添加到未初始化的所有属性",
   "Add_missing_call_parentheses_95067": "添加缺失的调用括号",
   "Add_missing_enum_member_0_95063": "添加缺少的枚举成员 \"{0}\"",
+  "Add_missing_function_declaration_0_95156": "添加缺少的函数声明 \"{0}\"",
   "Add_missing_new_operator_to_all_calls_95072": "将缺少的 \"new\" 运算符添加到所有调用",
   "Add_missing_new_operator_to_call_95071": "将缺少的 \"new\" 运算符添加到调用",
+  "Add_missing_properties_95165": "添加缺少的属性",
   "Add_missing_super_call_90001": "添加缺失的 \"super()\" 调用",
   "Add_missing_typeof_95052": "添加缺少的 \"typeof\"",
   "Add_names_to_all_parameters_without_names_95073": "为没有名称的所有参数添加名称",
   "Add_or_remove_braces_in_an_arrow_function_95058": "添加或删除箭头函数中的大括号",
+  "Add_override_modifier_95160": "添加 \"override\" 修饰符",
   "Add_parameter_name_90034": "添加参数名称",
   "Add_qualifier_to_all_unresolved_variables_matching_a_member_name_95037": "将限定符添加到匹配成员名称的所有未解析变量",
   "Add_this_parameter_95104": "添加“此”参数。",
   "Add_this_tag_95103": "添加“@此”标记",
   "Add_to_all_uncalled_decorators_95044": "将 \"()\" 添加到所有未调用的修饰器",
   "Add_ts_ignore_to_all_error_messages_95042": "将 \"@ts-ignore\" 添加到所有错误消息",
+  "Add_undefined_to_a_type_when_accessed_using_an_index_6674": "使用索引访问时,将 “undefined” 添加到类型。",
   "Add_undefined_type_to_all_uninitialized_properties_95029": "将未定义的类型添加到未初始化的所有属性",
   "Add_undefined_type_to_property_0_95018": "向属性“{0}”添加“未定义”类型",
   "Add_unknown_conversion_for_non_overlapping_types_95069": "为非重叠类型添加 \"unknown\" 转换",
@@ -154,8 +165,6 @@
   "Add_void_to_Promise_resolved_without_a_value_95143": "将 \"void\" 添加到已解析但没有值的承诺",
   "Add_void_to_all_Promises_resolved_without_a_value_95144": "将 \"void\" 添加到所有已解析但没有值的承诺",
   "Adding_a_tsconfig_json_file_will_help_organize_projects_that_contain_both_TypeScript_and_JavaScript__5068": "添加 tsconfig.json 文件有助于组织包含 TypeScript 和 JavaScript 文件的项目。有关详细信息,请访问 https://aka.ms/tsconfig。",
-  "Additional_Checks_6176": "其他检查",
-  "Advanced_Options_6178": "高级选项",
   "All_declarations_of_0_must_have_identical_modifiers_2687": "“{0}”的所有声明必须具有相同的修饰符。",
   "All_declarations_of_0_must_have_identical_type_parameters_2428": "“{0}”的所有声明都必须具有相同的类型参数。",
   "All_declarations_of_an_abstract_method_must_be_consecutive_2516": "抽象方法的所有声明必须是连续的。",
@@ -163,34 +172,38 @@
   "All_imports_in_import_declaration_are_unused_6192": "未使用导入声明中的所有导入。",
   "All_type_parameters_are_unused_6205": "未使用任何类型参数。",
   "All_variables_are_unused_6199": "所有变量均未使用。",
-  "Allow_accessing_UMD_globals_from_modules_95076": "允许从模块访问 UMD 变量全局。",
+  "Allow_JavaScript_files_to_be_a_part_of_your_program_Use_the_checkJS_option_to_get_errors_from_these__6600": "允许 JavaScript 文件成为程序的一部分。使用 “checkJS” 选项从这些文件中获取错误。",
+  "Allow_accessing_UMD_globals_from_modules_6602": "允许从模块访问 UMD 变量全局。",
   "Allow_default_imports_from_modules_with_no_default_export_This_does_not_affect_code_emit_just_typech_6011": "允许从不带默认输出的模块中默认输入。这不会影响代码发出,只是类型检查。",
+  "Allow_import_x_from_y_when_a_module_doesn_t_have_a_default_export_6601": "当模块没有默认导出时,允许“从 y 导入 x”。",
+  "Allow_importing_helper_functions_from_tslib_once_per_project_instead_of_including_them_per_file_6639": "允许每个项目从 tslib 导入帮助程序函数一次,而不是将它们包含在每个文件中。",
   "Allow_javascript_files_to_be_compiled_6102": "允许编译 JavaScript 文件。",
+  "Allow_multiple_folders_to_be_treated_as_one_when_resolving_modules_6691": "允许在解析模块时将多个文件夹视为一个文件夹。",
   "Already_included_file_name_0_differs_from_file_name_1_only_in_casing_1261": "已包含的文件名 \"{0}\" 仅大小写与文件名 \"{1}\" 不同。",
   "Ambient_module_declaration_cannot_specify_relative_module_name_2436": "环境模块声明无法指定相对模块名。",
   "Ambient_modules_cannot_be_nested_in_other_modules_or_namespaces_2435": "环境模块不能嵌套在其他模块或命名空间中。",
   "An_AMD_module_cannot_have_multiple_name_assignments_2458": "AMD 模块无法拥有多个名称分配。",
   "An_abstract_accessor_cannot_have_an_implementation_1318": "抽象访问器不能有实现。",
   "An_accessibility_modifier_cannot_be_used_with_a_private_identifier_18010": "可访问性修饰符不能与专用标识符一起使用。",
-  "An_accessor_cannot_be_named_with_a_private_identifier_18023": "不能用专用标识符命名访问器。",
   "An_accessor_cannot_have_type_parameters_1094": "访问器不能具有类型参数。",
   "An_ambient_module_declaration_is_only_allowed_at_the_top_level_in_a_file_1234": "只允许在文件的顶层中使用环境模块声明。",
   "An_argument_for_0_was_not_provided_6210": "未提供 \"{0}\" 的自变量。",
   "An_argument_matching_this_binding_pattern_was_not_provided_6211": "未提供与此绑定模式匹配的自变量。",
   "An_arithmetic_operand_must_be_of_type_any_number_bigint_or_an_enum_type_2356": "算术操作数必须为类型 \"any\"、\"number\"、\"bigint\" 或枚举类型。",
   "An_arrow_function_cannot_have_a_this_parameter_2730": "箭头函数不能包含 \"this\" 参数。",
-  "An_async_function_or_method_in_ES5_SlashES3_requires_the_Promise_constructor_Make_sure_you_have_a_de_2705": "ES5/ES3 中的异步函数或方法需要 \"Promise\" 构造函数。确保对 \"Promise\" 构造函数进行了声明或在 \"--lib\" 选项中包含了 \"ES2015\"。",
+  "An_async_function_or_method_in_ES5_SlashES3_requires_the_Promise_constructor_Make_sure_you_have_a_de_2705": "ES5/ES3 中的异步函数或方法需要 “Promise” 构造函数。请确保具有一个 “Promise” 构造函数的声明,或在 “--lib” 选项中包含了 “ES2015”。",
   "An_async_function_or_method_must_have_a_valid_awaitable_return_type_1057": "异步函数或方法必须具有有效的可等待返回类型。",
-  "An_async_function_or_method_must_return_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_in_2697": "异步函数或方法必须返回 \"Promise\"。请确保具有对 \"Promise\" 的声明或在 `--lib` 选项中包括 \"ES2015\"。",
+  "An_async_function_or_method_must_return_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_in_2697": "异步函数或方法必须返回 “Promise”。请确保具有对 “Promise” 的声明或在 “--lib” 选项中包含了 “ES2015”。",
   "An_async_iterator_must_have_a_next_method_2519": "异步迭代器必须具有 \"next()\" 方法。",
   "An_element_access_expression_should_take_an_argument_1011": "元素访问表达式应采用参数。",
   "An_enum_member_cannot_be_named_with_a_private_identifier_18024": "不能用专用标识符命名枚举成员。",
   "An_enum_member_cannot_have_a_numeric_name_2452": "枚举成员不能具有数值名。",
   "An_enum_member_name_must_be_followed_by_a_or_1357": "枚举成员名称的后面必须跟有 \",\"、\"=\" 或 \"}\"。",
-  "An_export_assignment_can_only_be_used_in_a_module_1231": "导出分配只能在模块中使用。",
+  "An_expanded_version_of_this_information_showing_all_possible_compiler_options_6928": "此信息的扩展版本,显示所有可能的编译器选项",
   "An_export_assignment_cannot_be_used_in_a_module_with_other_exported_elements_2309": "不能在具有其他导出元素的模块中使用导出分配。",
   "An_export_assignment_cannot_be_used_in_a_namespace_1063": "不能在命名空间中使用导出分配。",
   "An_export_assignment_cannot_have_modifiers_1120": "导出分配不能具有修饰符。",
+  "An_export_assignment_must_be_at_the_top_level_of_a_file_or_module_declaration_1231": "导出分配必须位于文件或模块声明的顶层。",
   "An_export_declaration_can_only_be_used_in_a_module_1233": "导出声明只能在模块中使用。",
   "An_export_declaration_cannot_have_modifiers_1193": "导出声明不能有修饰符。",
   "An_expression_of_type_void_cannot_be_tested_for_truthiness_1345": "无法测试 \"void\" 类型的表达式的真实性。",
@@ -212,9 +225,8 @@
   "An_index_signature_parameter_cannot_have_an_accessibility_modifier_1018": "索引签名参数不能具有可访问性修饰符。",
   "An_index_signature_parameter_cannot_have_an_initializer_1020": "索引签名参数不能具有初始化表达式。",
   "An_index_signature_parameter_must_have_a_type_annotation_1022": "索引签名参数必须具有类型批注。",
-  "An_index_signature_parameter_type_cannot_be_a_type_alias_Consider_writing_0_Colon_1_Colon_2_instead_1336": "索引签名参数类型不能为类型别名。请考虑改为编写“[{0}: {1}]:{2}”。",
-  "An_index_signature_parameter_type_cannot_be_a_union_type_Consider_using_a_mapped_object_type_instead_1337": "索引签名参数类型不能为联合类型。请考虑改用映射的对象类型。",
-  "An_index_signature_parameter_type_must_be_either_string_or_number_1023": "索引签名参数类型必须为 \"string\" 或 \"number\"。",
+  "An_index_signature_parameter_type_cannot_be_a_literal_type_or_generic_type_Consider_using_a_mapped_o_1337": "索引签名参数类型不能为文本类型或泛型类型。请考虑改用映射的对象类型。",
+  "An_index_signature_parameter_type_must_be_string_number_symbol_or_a_template_literal_type_1268": "索引签名参数类型必须是 “string”、“number”、“symbol”或模板文本类型。",
   "An_interface_can_only_extend_an_identifier_Slashqualified_name_with_optional_type_arguments_2499": "接口只能扩展具有可选类型参数的标识符/限定名称。",
   "An_interface_can_only_extend_an_object_type_or_intersection_of_object_types_with_statically_known_me_2312": "接口只能扩展使用静态已知成员的对象类型或对象类型的交集。",
   "An_interface_property_cannot_have_an_initializer_1246": "接口函数不能具有初始化表达式。",
@@ -225,6 +237,7 @@
   "An_object_literal_cannot_have_property_and_accessor_with_the_same_name_1119": "对象文字不能包含具有相同名称的属性和访问器。",
   "An_object_member_cannot_be_declared_optional_1162": "对象成员无法声明为可选。",
   "An_optional_chain_cannot_contain_private_identifiers_18030": "可选链不能包含专用标识符。",
+  "An_optional_element_cannot_follow_a_rest_element_1266": "可选元素不能跟在 rest 元素之后。",
   "An_outer_value_of_this_is_shadowed_by_this_container_2738": "此容器隐藏了 \"this\" 的外部值。",
   "An_overload_signature_cannot_be_declared_as_a_generator_1222": "重载签名无法声明为生成器。",
   "An_unary_expression_with_the_0_operator_is_not_allowed_in_the_left_hand_side_of_an_exponentiation_ex_17006": "乘方表达式的左侧不允许存在具有“{0}”运算符的一元表达式。请考虑用括号将表达式括起。",
@@ -244,33 +257,47 @@
   "Augmentations_for_the_global_scope_can_only_be_directly_nested_in_external_modules_or_ambient_module_2669": "全局范围的扩大仅可直接嵌套在外部模块中或环境模块声明中。",
   "Augmentations_for_the_global_scope_should_have_declare_modifier_unless_they_appear_in_already_ambien_2670": "全局范围的扩大应具有 \"declare\" 修饰符,除非它们显示在已有的环境上下文中。",
   "Auto_discovery_for_typings_is_enabled_in_project_0_Running_extra_resolution_pass_for_module_1_using__6140": "项目“{0}”中启用了键入内容的自动发现。使用缓存位置“{2}”运行模块“{1}”的额外解决传递。",
+  "Await_expression_cannot_be_used_inside_a_class_static_block_18037": "无法在类静态块内使用 Await 表达式。",
+  "BUILD_OPTIONS_6919": "生成选项",
+  "Backwards_Compatibility_6253": "后向兼容性",
   "Base_class_expressions_cannot_reference_class_type_parameters_2562": "基类表达式无法引用类类型参数。",
   "Base_constructor_return_type_0_is_not_an_object_type_or_intersection_of_object_types_with_statically_2509": "基构造函数返回类型 \"{0}\" 不是具有静态已知成员的对象类型或对象类型的交集。",
   "Base_constructors_must_all_have_the_same_return_type_2510": "所有的基构造函数必须具有相同的返回类型。",
   "Base_directory_to_resolve_non_absolute_module_names_6083": "用于解析非绝对模块名的基目录。",
-  "Basic_Options_6172": "基本选项",
   "BigInt_literals_are_not_available_when_targeting_lower_than_ES2020_2737": "目标低于 ES2020 时,bigInt 文本不可用。",
   "Binary_digit_expected_1177": "需要二进制数字。",
   "Binding_element_0_implicitly_has_an_1_type_7031": "绑定元素“{0}”隐式具有“{1}”类型。",
   "Block_scoped_variable_0_used_before_its_declaration_2448": "声明之前已使用的块范围变量“{0}”。",
-  "Build_all_projects_including_those_that_appear_to_be_up_to_date_6368": "生成所有项目,包括那些似乎已是最新的项目",
+  "Build_a_composite_project_in_the_working_directory_6925": "在工作目录中生成复合项目。",
+  "Build_all_projects_including_those_that_appear_to_be_up_to_date_6636": "生成所有项目,包括那些似乎已是最新的项目",
   "Build_one_or_more_projects_and_their_dependencies_if_out_of_date_6364": "生成一个或多个项目及其依赖项(如果已过期)",
   "Build_option_0_requires_a_value_of_type_1_5073": "生成选项 \"{0}\" 需要类型 {1} 的值。",
   "Building_project_0_6358": "正在生成项目“{0}”...",
+  "COMMAND_LINE_FLAGS_6921": "命令行标记",
+  "COMMON_COMMANDS_6916": "常见命令",
+  "COMMON_COMPILER_OPTIONS_6920": "常见编译器选项",
   "Call_decorator_expression_90028": "调用修饰器表达式",
   "Call_signature_return_types_0_and_1_are_incompatible_2202": "调用签名返回类型 \"{0}\" 和 \"{1}\" 不兼容。",
   "Call_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type_7020": "缺少返回类型批注的调用签名隐式具有返回类型 \"any\"。",
   "Call_signatures_with_no_arguments_have_incompatible_return_types_0_and_1_2204": "没有参数的调用签名具有不兼容的返回类型 \"{0}\" 和 \"{1}\"。",
   "Call_target_does_not_contain_any_signatures_2346": "调用目标不包含任何签名。",
   "Can_only_convert_logical_AND_access_chains_95142": "仅可转换逻辑 AND 访问链",
+  "Can_only_convert_named_export_95164": "只能转换已命名的导出",
   "Can_only_convert_property_with_modifier_95137": "只能转换带修饰符的属性",
+  "Can_only_convert_string_concatenation_95154": "只能转换字符串串联",
   "Cannot_access_0_1_because_0_is_a_type_but_not_a_namespace_Did_you_mean_to_retrieve_the_type_of_the_p_2713": "无法访问“{0}.{1}”,因为“{0}”是类型,不是命名空间。是否要使用“{0}[\"{1}\"]”检索“{0}”中“{1}”属性的类型?",
   "Cannot_access_ambient_const_enums_when_the_isolatedModules_flag_is_provided_2748": "提供 \"--isolatedModules\" 标志时,无法访问环境常量枚举。",
   "Cannot_assign_a_0_constructor_type_to_a_1_constructor_type_2672": "不可将“{0}”构造函数类型分配给“{1}”构造函数类型。",
   "Cannot_assign_an_abstract_constructor_type_to_a_non_abstract_constructor_type_2517": "无法将抽象构造函数类型分配给非抽象构造函数类型。",
+  "Cannot_assign_to_0_because_it_is_a_class_2629": "无法为“{0}”赋值,因为它是类。",
   "Cannot_assign_to_0_because_it_is_a_constant_2588": "无法分配到 \"{0}\" ,因为它是常数。",
+  "Cannot_assign_to_0_because_it_is_a_function_2630": "无法为“{0}”赋值,因为它是函数。",
+  "Cannot_assign_to_0_because_it_is_a_namespace_2631": "无法为“{0}”赋值,因为它是命名空间。",
   "Cannot_assign_to_0_because_it_is_a_read_only_property_2540": "无法分配到 \"{0}\" ,因为它是只读属性。",
+  "Cannot_assign_to_0_because_it_is_an_enum_2628": "无法为“{0}”赋值,因为它是枚举。",
+  "Cannot_assign_to_0_because_it_is_an_import_2632": "无法为“{0}”赋值,因为它是导入。",
   "Cannot_assign_to_0_because_it_is_not_a_variable_2539": "无法分配到“{0}”,因为它不是变量。",
+  "Cannot_assign_to_private_method_0_Private_methods_are_not_writable_2803": "无法分配给专用方法 \"{0}\"。专用方法不可写。",
   "Cannot_augment_module_0_because_it_resolves_to_a_non_module_entity_2671": "无法扩大模块“{0}”,因为它解析为非模块实体。",
   "Cannot_augment_module_0_with_value_exports_because_it_resolves_to_a_non_module_entity_2649": "无法扩充具有值导出的模块“{0}”,因为它解析为一个非模块的实体。",
   "Cannot_compile_modules_using_option_0_unless_the_module_flag_is_amd_or_system_6131": "无法使用选项“{0}”来编译模块,除非 \"--module\" 标记为 \"amd\" 或 \"system\"。",
@@ -292,14 +319,14 @@
   "Cannot_find_name_0_Did_you_mean_1_2552": "找不到名称“{0}”。你是否指的是“{1}”?",
   "Cannot_find_name_0_Did_you_mean_the_instance_member_this_0_2663": "找不到名称“{0}”。你的意思是实例成员“this.{0}”?",
   "Cannot_find_name_0_Did_you_mean_the_static_member_1_0_2662": "找不到名称“{0}”。你的意思是静态成员“{1}.{0}”?",
-  "Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_2583": "找不到名称“{0}”。是否需要更改目标库? 请尝试将 `lib` 编译器选项更改为 {1} 或更高版本。",
-  "Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_2584": "找不到名称 \"{0}\"。是否需要更改目标库? 请尝试将 `lib` 编译器选项更改为包含 \"dom\"。",
+  "Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_2583": "找不到名称“{0}”。是否需要更改目标库? 请尝试将 “lib” 编译器选项更改为“{1}”或更高版本。",
+  "Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_2584": "找不到名称“{0}”。是否需要更改目标库? 请尝试更改 “lib” 编译器选项以包括 “dom”。",
   "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_a_test_runner_Try_npm_i_save_dev_type_2582": "找不到名称 \"{0}\"。是否需要安装测试运行器的类型定义? 请尝试使用 `npm i --save-dev @types/jest` 或 `npm i --save-dev @types/mocha`。",
-  "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_a_test_runner_Try_npm_i_save_dev_type_2593": "找不到名称 \"{0}\"。是否需要安装测试运行器的类型定义? 请尝试使用 `npm i --save-dev @types/jest` 或 `npm i --save-dev @types/mocha`,然后在 tsconfig 的 types 字段中添加 `jest` 或 `mocha`。",
+  "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_a_test_runner_Try_npm_i_save_dev_type_2593": "找不到名称“{0}”。是否需要安装测试运行器的类型定义? 请尝试使用 `npm i --save-dev @types/jest` 或 `npm i --save-dev @types/mocha`,然后将 “jest” 或 “mocha” 添加到 tsconfig 中的类型字段。。",
   "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_jQuery_Try_npm_i_save_dev_types_Slash_2581": "找不到名称 \"{0}\"。是否需要安装 jQuery 的类型定义? 请尝试使用 `npm i --save-dev @types/jquery`。",
-  "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_jQuery_Try_npm_i_save_dev_types_Slash_2592": "找不到名称 \"{0}\"。是否需要安装 jQuery 的类型定义? 请尝试使用 `npm i --save-dev @types/jquery`,然后在 tsconfig 中将 `jquery` 添加到 types 字段。",
+  "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_jQuery_Try_npm_i_save_dev_types_Slash_2592": "找不到名称“{0}”。是否需要安装 jQuery 的类型定义? 请尝试使用 `npm i --save-dev @types/jquery`,然后将 “jquery” 添加到 teconfig 中的类型字段。",
   "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_node_Try_npm_i_save_dev_types_Slashno_2580": "找不到名称 \"{0}\"。是否需要为节点安装类型定义? 请尝试使用 `npm i --save-dev @types/node`。",
-  "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_node_Try_npm_i_save_dev_types_Slashno_2591": "找不到名称 \"{0}\"。是否需要为节点安装类型定义? 请尝试使用 `npm i --save-dev @types/node`,然后在 tsconfig 中将 `node` 添加到 types 字段。",
+  "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_node_Try_npm_i_save_dev_types_Slashno_2591": "找不到名称“{0}”。是否需要为节点安装类型定义? 请尝试使用 `npm i --save-dev @types/node`,然后将 “node” 添加到类型字段。",
   "Cannot_find_namespace_0_2503": "找不到命名空间“{0}”。",
   "Cannot_find_parameter_0_1225": "找不到参数“{0}”。",
   "Cannot_find_the_common_subdirectory_path_for_the_input_files_5009": "找不到输入文件的公共子目录路径。",
@@ -318,11 +345,13 @@
   "Cannot_redeclare_block_scoped_variable_0_2451": "无法重新声明块范围变量“{0}”。",
   "Cannot_redeclare_exported_variable_0_2323": "无法重新声明导出的变量“{0}”。",
   "Cannot_redeclare_identifier_0_in_catch_clause_2492": "无法在 catch 子句中重新声明标识符“{0}”。",
+  "Cannot_start_a_function_call_in_a_type_annotation_1441": "无法在类型注释中启动函数调用。",
   "Cannot_update_output_of_project_0_because_there_was_error_reading_file_1_6376": "无法更新项目 \"{0}\" 的输出,因为读取文件 \"{1}\" 时出错",
   "Cannot_use_JSX_unless_the_jsx_flag_is_provided_17004": "无法使用 JSX,除非提供了 \"--jsx\" 标志。",
   "Cannot_use_imports_exports_or_module_augmentations_when_module_is_none_1148": "当 \"--module\" 为 \"none\" 时无法使用导入、导出或模块扩大。",
   "Cannot_use_namespace_0_as_a_type_2709": "不能将命名空间“{0}”用作类型。",
   "Cannot_use_namespace_0_as_a_value_2708": "不能将命名空间“{0}”用作值。",
+  "Cannot_use_this_in_a_static_property_initializer_of_a_decorated_class_2816": "无法在修饰类静态属性初始化表达式中使用 “this”。",
   "Cannot_write_file_0_because_it_will_overwrite_tsbuildinfo_file_generated_by_referenced_project_1_6377": "无法写入文件 \"{0}\",因为它将覆盖由引用的项目 \"{1}\" 生成的 \".tsbuildinfo\" 文件",
   "Cannot_write_file_0_because_it_would_be_overwritten_by_multiple_input_files_5056": "无法写入文件“{0}”,因为它会被多个输入文件覆盖。",
   "Cannot_write_file_0_because_it_would_overwrite_input_file_5055": "无法写入文件“{0}”,因为它会覆盖输入文件。",
@@ -334,6 +363,8 @@
   "Change_all_jsdoc_style_types_to_TypeScript_and_add_undefined_to_nullable_types_95031": "将所有 jsdoc 样式类型都更改为 TypeScript (并将 \"| undefined\" 添加到可以为 null 的类型)",
   "Change_extends_to_implements_90003": "将 \"extends\" 改为 \"implements\"",
   "Change_spelling_to_0_90022": "将拼写更改为“{0}”",
+  "Check_for_class_properties_that_are_declared_but_not_set_in_the_constructor_6700": "检查是否有已声明但未在构造函数中设置的类属性。",
+  "Check_that_the_arguments_for_bind_call_and_apply_methods_match_the_original_function_6697": "检查 “bind”、“call” 和 “apply” 方法的参数是否与原始函数匹配。",
   "Checking_if_0_is_the_longest_matching_prefix_for_1_2_6104": "检查“{0}”是否是“{1}”-“{2}”的最长匹配前缀。",
   "Circular_definition_of_import_alias_0_2303": "导入别名“{0}”的循环定义。",
   "Circularity_detected_while_resolving_configuration_Colon_0_18000": "解析配置时检测到循环: {0}",
@@ -345,7 +376,9 @@
   "Class_0_incorrectly_implements_class_1_Did_you_mean_to_extend_1_and_inherit_its_members_as_a_subclas_2720": "类“{0}”错误实现类“{1}”。你是想扩展“{1}”并将其成员作为子类继承吗?",
   "Class_0_incorrectly_implements_interface_1_2420": "类“{0}”错误实现接口“{1}”。",
   "Class_0_used_before_its_declaration_2449": "类“{0}”用于其声明前。",
-  "Class_declarations_cannot_have_more_than_one_augments_or_extends_tag_8025": "类声明不能有多个 \"@augments\" 或 \"@extends\" 标记。",
+  "Class_declaration_cannot_implement_overload_list_for_0_2813": "类声明无法实现“{0}”的重载列表。",
+  "Class_declarations_cannot_have_more_than_one_augments_or_extends_tag_8025": "类声明不能有多个 “@augments” 或 “@extends” 标记。",
+  "Class_decorators_can_t_be_used_with_static_private_identifier_Consider_removing_the_experimental_dec_18036": "类修饰器不能与静态专用标识符一起使用。请考虑删除实验性修饰器。",
   "Class_name_cannot_be_0_2414": "类名不能为“{0}”。",
   "Class_name_cannot_be_Object_when_targeting_ES5_with_module_0_2725": "使用模块 {0} 将目标设置为 ES5 时,类名称不能为 \"Object\"。",
   "Class_static_side_0_incorrectly_extends_base_class_static_side_1_2417": "类静态侧“{0}”错误扩展基类静态侧“{1}”。",
@@ -354,16 +387,25 @@
   "Classes_may_not_have_a_field_named_constructor_18006": "类不能具有名为 \"constructor\" 的字段。",
   "Command_line_Options_6171": "命令行选项",
   "Compile_the_project_given_the_path_to_its_configuration_file_or_to_a_folder_with_a_tsconfig_json_6020": "编译给定了其配置文件路径或带 \"tsconfig.json\" 的文件夹路径的项目。",
+  "Compiler_Diagnostics_6251": "编译器诊断",
   "Compiler_option_0_expects_an_argument_6044": "编译器选项“{0}”需要参数。",
+  "Compiler_option_0_may_not_be_used_with_build_5094": "编译器选项“--{0}”不能与 “--build” 一起使用。",
+  "Compiler_option_0_may_only_be_used_with_build_5093": "编译器选项“--{0}”只能与 “--build” 一起使用。",
   "Compiler_option_0_requires_a_value_of_type_1_5024": "编译器选项“{0}”需要类型 {1} 的值。",
   "Compiler_reserves_name_0_when_emitting_private_identifier_downlevel_18027": "当发出专用标识符下层时,编译器会预留名称“{0}”。",
+  "Compiles_the_TypeScript_project_located_at_the_specified_path_6927": "编译位于指定路径的 TypeScript 项目",
+  "Compiles_the_current_project_tsconfig_json_in_the_working_directory_6923": "编译当前项目(工作目录中的 tsconfig.json。)",
+  "Compiles_the_current_project_with_additional_settings_6929": "使用其他设置编译当前项目",
+  "Completeness_6257": "完成度",
   "Composite_projects_may_not_disable_declaration_emit_6304": "复合项目可能不会禁用声明发出。",
   "Composite_projects_may_not_disable_incremental_compilation_6379": "复合项目不能禁用增量编译。",
+  "Computed_from_the_list_of_input_files_6911": "从输入文件列表计算",
   "Computed_property_names_are_not_allowed_in_enums_1164": "枚举中不允许计算属性名。",
   "Computed_values_are_not_permitted_in_an_enum_with_string_valued_members_2553": "含字符串值成员的枚举中不允许使用计算值。",
   "Concatenate_and_emit_output_to_single_file_6001": "连接输出并将其发出到单个文件。",
   "Conflicting_definitions_for_0_found_at_1_and_2_Consider_installing_a_specific_version_of_this_librar_4090": "“{1}”和“{2}”处找到的“{0}”的定义具有冲突。考虑安装此库的特定版本以解决冲突。",
   "Conflicts_are_in_this_file_6201": "此文件中存在冲突。",
+  "Consider_adding_a_declare_modifier_to_this_class_6506": "请考虑向此类添加 “declare” 修饰符。",
   "Construct_signature_return_types_0_and_1_are_incompatible_2203": "构造签名返回类型 \"{0}\" 和 \"{1}\" 不兼容。",
   "Construct_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type_7013": "缺少返回类型批注的构造签名隐式具有返回类型 \"any\"。",
   "Construct_signatures_with_no_arguments_have_incompatible_return_types_0_and_1_2205": "不带参数的构造签名具有不兼容的返回类型 \"{0}\" 和 \"{1}\"。",
@@ -413,16 +455,24 @@
   "Convert_to_type_only_export_1364": "转换为仅类型导出",
   "Convert_to_type_only_import_1373": "转换为仅类型导入",
   "Corrupted_locale_file_0_6051": "区域设置文件 {0} 已损坏。",
+  "Could_not_convert_to_anonymous_function_95153": "无法转换为匿名函数",
+  "Could_not_convert_to_arrow_function_95151": "无法转换为箭头函数",
+  "Could_not_convert_to_named_function_95152": "无法转换为命名函数",
+  "Could_not_determine_function_return_type_95150": "无法确定函数返回类型",
   "Could_not_find_a_containing_arrow_function_95127": "找不到包含箭头函数",
   "Could_not_find_a_declaration_file_for_module_0_1_implicitly_has_an_any_type_7016": "无法找到模块“{0}”的声明文件。“{1}”隐式拥有 \"any\" 类型。",
   "Could_not_find_convertible_access_expression_95140": "找不到可转换的访问表达式",
   "Could_not_find_export_statement_95129": "找不到 export 语句",
   "Could_not_find_import_clause_95131": "找不到 import 子句",
   "Could_not_find_matching_access_expressions_95141": "找不到匹配的访问表达式",
+  "Could_not_find_name_0_Did_you_mean_1_2570": "找不到名称“{0}”。你是否是指“{1}”?",
   "Could_not_find_namespace_import_or_named_imports_95132": "找不到命名空间导入或已命名的导入",
   "Could_not_find_property_for_which_to_generate_accessor_95135": "找不到要为其生成访问器的属性",
   "Could_not_resolve_the_path_0_with_the_extensions_Colon_1_6231": "无法解析具有表达式的路径“{0}”: {1}。",
   "Could_not_write_file_0_Colon_1_5033": "无法写入文件“{0}”: {1}。",
+  "Create_source_map_files_for_emitted_JavaScript_files_6694": "为发出的 JavaScript 文件创建源映射文件。",
+  "Create_sourcemaps_for_d_ts_files_6614": "为 d.ts 文件创建源映射。",
+  "Creates_a_tsconfig_json_with_the_recommended_settings_in_the_working_directory_6926": "使用工作目录中的建议设置创建 tsconfig.json。",
   "DIRECTORY_6038": "目录",
   "Declaration_augments_declaration_in_another_file_This_cannot_be_serialized_6232": "该声明扩充了另一文件中的声明。这无法被序列化。",
   "Declaration_emit_for_this_file_requires_using_private_name_0_An_explicit_type_annotation_may_unblock_9005": "此文件的声明发出要求使用专用名称 \"{0}\"。显式类型注释可能取消阻止声明发出。",
@@ -430,6 +480,7 @@
   "Declaration_expected_1146": "应为声明。",
   "Declaration_name_conflicts_with_built_in_global_identifier_0_2397": "声明名称与内置全局标识符“{0}”冲突。",
   "Declaration_or_statement_expected_1128": "应为声明或语句。",
+  "Declaration_or_statement_expected_This_follows_a_block_of_statements_so_if_you_intended_to_write_a_d_2809": "应为声明或语句。此 \"=\" 遵循语句块,因此如果打算编写重构赋值,则可能需要用括号将整个赋值括起来。",
   "Declarations_with_definite_assignment_assertions_must_also_have_type_annotations_1264": "具有明确赋值断言的声明也必须具有类型批注。",
   "Declarations_with_initializers_cannot_also_have_definite_assignment_assertions_1263": "具有初始值设定项的声明不能同时具有明确赋值断言。",
   "Declare_a_private_field_named_0_90053": "声明名为 \"{0}\" 的专用字段。",
@@ -441,7 +492,11 @@
   "Declare_static_property_0_90027": "声明静态属性“{0}”",
   "Decorators_are_not_valid_here_1206": "修饰器在此处无效。",
   "Decorators_cannot_be_applied_to_multiple_get_Slashset_accessors_of_the_same_name_1207": "不能向多个同名的 get/set 访问器应用修饰器。",
+  "Decorators_may_not_be_applied_to_this_parameters_1433": "修饰器不能应用于 “this” 参数。",
+  "Decorators_must_precede_the_name_and_all_keywords_of_property_declarations_1436": "修饰器必须位于属性声明的名称和所有关键字之前。",
   "Default_export_of_the_module_has_or_is_using_private_name_0_4082": "模块的默认导出具有或正在使用专用名称“{0}”。",
+  "Default_library_1424": "默认库",
+  "Default_library_for_target_0_1425": "目标 \"{0}\" 的默认库",
   "Definitions_of_the_following_identifiers_conflict_with_those_in_another_file_Colon_0_6200": "以下标识符的定义与另一个文件中的定义冲突: {0}",
   "Delete_all_unused_declarations_95024": "删除未使用的所有声明",
   "Delete_all_unused_imports_95147": "删除所有未使用的导入",
@@ -449,6 +504,7 @@
   "Deprecated_Use_jsxFactory_instead_Specify_the_object_invoked_for_createElement_when_targeting_react__6084": "[已弃用] 请改用 \"--jsxFactory\"。已 \"react\" JSX 发出设为目标时,请指定要为 createElement 调用的对象",
   "Deprecated_Use_outFile_instead_Concatenate_and_emit_output_to_single_file_6170": "[已弃用] 请改用 \"--outFile\"。连接并发出到单个文件的输出",
   "Deprecated_Use_skipLibCheck_instead_Skip_type_checking_of_default_library_declaration_files_6160": "[已弃用] 请改用 \"--skipLibCheck\"。请跳过默认库声明文件的类型检查。",
+  "Deprecated_setting_Use_outFile_instead_6677": "弃用的设置。请改用 “outFile”。",
   "Did_you_forget_to_use_await_2773": "是否忘记使用 \"await\"?",
   "Did_you_mean_0_1369": "你是想使用 \"{0}\" 吗?",
   "Did_you_mean_for_0_to_be_constrained_to_type_new_args_Colon_any_1_2735": "你是想将 \"{0}\" 限制为类型 \"new (...args: any[]) => {1}\" 吗?",
@@ -459,12 +515,30 @@
   "Did_you_mean_to_use_new_with_this_expression_6213": "你是想将 \"new\" 用于此表达式吗?",
   "Digit_expected_1124": "应为数字。",
   "Directory_0_does_not_exist_skipping_all_lookups_in_it_6148": "目录“{0}”不存在,正在跳过该目录中的所有查找。",
+  "Disable_adding_use_strict_directives_in_emitted_JavaScript_files_6669": "禁止在发出的 JavaScript 文件中添加 “use strict” 指令。",
   "Disable_checking_for_this_file_90018": "禁用检查此文件",
+  "Disable_emitting_comments_6688": "禁用发出注释。",
+  "Disable_emitting_declarations_that_have_internal_in_their_JSDoc_comments_6701": "禁用在其 JSDoc 注释中包含 “@internal” 的声明。",
+  "Disable_emitting_file_from_a_compilation_6660": "禁用从编译发出文件。",
+  "Disable_emitting_files_if_any_type_checking_errors_are_reported_6662": "禁用在报告了任何类型检查错误时发出文件。",
+  "Disable_erasing_const_enum_declarations_in_generated_code_6682": "在生成的代码中禁用擦除 “const enum” 声明。",
+  "Disable_error_reporting_for_unreachable_code_6603": "对无法访问的代码禁用错误报告。",
+  "Disable_error_reporting_for_unused_labels_6604": "对未使用的标签禁用错误报告。",
+  "Disable_generating_custom_helper_functions_like_extends_in_compiled_output_6661": "在已编译输出中禁用生成自定义帮助程序函数(如 “__extends”)。",
+  "Disable_including_any_library_files_including_the_default_lib_d_ts_6670": "禁用包括任何库文件(包括默认的 lib.d.ts)。",
   "Disable_loading_referenced_projects_6235": "禁止加载引用的项目。",
+  "Disable_preferring_source_files_instead_of_declaration_files_when_referencing_composite_projects_6620": "在引用复合项目时禁用首选源文件而不是声明文件",
+  "Disable_reporting_of_excess_property_errors_during_the_creation_of_object_literals_6702": "禁用在创建对象文字期间报告多余属性错误。",
+  "Disable_resolving_symlinks_to_their_realpath_This_correlates_to_the_same_flag_in_node_6683": "禁用将符号链接解析为其实际路径。这会关联到节点中的同一标志。",
   "Disable_size_limitations_on_JavaScript_projects_6162": "禁用对 JavaScript 项目的大小限制。",
   "Disable_solution_searching_for_this_project_6224": "对此项目禁用解决方案搜索。",
-  "Disable_strict_checking_of_generic_signatures_in_function_types_6185": "禁止严格检查函数类型中的通用签名。",
+  "Disable_strict_checking_of_generic_signatures_in_function_types_6673": "禁止严格检查函数类型中的通用签名。",
+  "Disable_the_type_acquisition_for_JavaScript_projects_6625": "禁用针对 JavaScript 项目的类型获取",
+  "Disable_truncating_types_in_error_messages_6663": "在错误消息中禁用截断类型。",
   "Disable_use_of_source_files_instead_of_declaration_files_from_referenced_projects_6221": "禁止使用源文件而不是引用项目中的声明文件。",
+  "Disable_wiping_the_console_in_watch_mode_6684": "禁用在监视模式下擦除控制台",
+  "Disables_inference_for_type_acquisition_by_looking_at_filenames_in_a_project_6616": "禁用通过查看项目中的文件名进行类型获取推理。",
+  "Disallow_import_s_require_s_or_reference_s_from_expanding_the_number_of_files_TypeScript_should_add__6672": "禁止 “import”、“require” 或 “<引用>” 扩展 TypeScript 应添加到项目的文件数。",
   "Disallow_inconsistently_cased_references_to_the_same_file_6078": "不允许对同一文件采用大小不一致的引用。",
   "Do_not_add_triple_slash_references_or_imported_modules_to_the_list_of_compiled_files_6159": "请勿将三斜杠引用或导入的模块添加到已编译文件列表中。",
   "Do_not_emit_comments_to_output_6009": "请勿将注释发出到输出。",
@@ -483,31 +557,48 @@
   "Duplicate_identifier_0_2300": "标识符“{0}”重复。",
   "Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module_2441": "标识符“{0}”重复。编译器在模块的顶层范围中保留名称“{1}”。",
   "Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module_containing_async_func_2529": "标识符“{0}”重复。编译器在包含异步函数的模块的顶层范围中保留名称“{1}”。",
+  "Duplicate_identifier_0_Compiler_reserves_name_1_when_emitting_super_references_in_static_initializer_2818": "标识符“{0}”重复。在静态初始化表达式中中发出 “super” 引用时,编译器保留名称“{1}”。",
   "Duplicate_identifier_0_Compiler_uses_declaration_1_to_support_async_functions_2520": "标识符“{0}”重复。编译器使用“{1}”声明来支持异步函数。",
+  "Duplicate_identifier_0_Static_and_instance_elements_cannot_share_the_same_private_name_2804": "标识符 \"{0}\" 重复。静态元素和实例元素不能共享相同的专用名称。",
   "Duplicate_identifier_arguments_Compiler_uses_arguments_to_initialize_rest_parameters_2396": "标识符 \"arguments\" 重复。编译器使用 \"arguments\" 初始化 rest 参数。",
   "Duplicate_identifier_newTarget_Compiler_uses_variable_declaration_newTarget_to_capture_new_target_me_2543": "标识符 \"_newTarget\" 重复。编译器使用变量声明 \"_newTarget\" 来捕获 \"new.target\" 元属性引用。",
   "Duplicate_identifier_super_Compiler_uses_super_to_capture_base_class_reference_2401": "标识符 \"_super\" 重复。编译器使用 \"_super\" 获取基类引用。",
   "Duplicate_identifier_this_Compiler_uses_variable_declaration_this_to_capture_this_reference_2399": "标识符 \"_this\" 重复。编译器使用变量声明 \"_this\" 来捕获 \"this\" 引用。",
+  "Duplicate_index_signature_for_type_0_2374": "类型“{0}”的索引签名重复。",
   "Duplicate_label_0_1114": "标签“{0}”重复。",
-  "Duplicate_number_index_signature_2375": "数字索引签名重复。",
   "Duplicate_property_0_2718": "重复的属性 \"{0}\"。",
-  "Duplicate_string_index_signature_2374": "字符串索引签名重复。",
   "Dynamic_import_cannot_have_type_arguments_1326": "动态导入不能含有类型参数。",
   "Dynamic_import_must_have_one_specifier_as_an_argument_1324": "动态导入必须具有一个说明符作为参数。",
   "Dynamic_import_s_specifier_must_be_of_type_string_but_here_has_type_0_7036": "动态导入的说明符类型必须是 \"string\",但此处类型是 \"{0}\"。",
   "Dynamic_imports_are_only_supported_when_the_module_flag_is_set_to_es2020_esnext_commonjs_amd_system__1323": "仅当 \"--module\" 标志设置为 \"es2020\"、\"esnext\"、\"commonjs\"、\"amd\"、\"system\" 或 \"umd\" 时,才支持动态导入。",
   "Each_member_of_the_union_type_0_has_construct_signatures_but_none_of_those_signatures_are_compatible_2762": "联合类型 \"{0}\" 的每个成员都有构造签名,但这些签名都不能互相兼容。",
   "Each_member_of_the_union_type_0_has_signatures_but_none_of_those_signatures_are_compatible_with_each_2758": "联合类型 \"{0}\" 的每个成员都有签名,但这些签名都不能互相兼容。",
-  "Element_at_index_0_is_variadic_in_one_type_but_not_in_the_other_2622": "索引 {0} 处的元素在其中一个类型中是可变元素,在另一个类型中却不是。",
+  "Editor_Support_6249": "编辑器支持",
   "Element_implicitly_has_an_any_type_because_expression_of_type_0_can_t_be_used_to_index_type_1_7053": "元素隐式具有 \"any\" 类型,因为类型为 \"{0}\" 的表达式不能用于索引类型 \"{1}\"。",
   "Element_implicitly_has_an_any_type_because_index_expression_is_not_of_type_number_7015": "元素隐式具有 \"any\" 类型,因为索引表达式的类型不为 \"number\"。",
   "Element_implicitly_has_an_any_type_because_type_0_has_no_index_signature_7017": "元素隐式具有 \"any\" 类型,因为类型“{0}”没有索引签名。",
   "Element_implicitly_has_an_any_type_because_type_0_has_no_index_signature_Did_you_mean_to_call_1_7052": "元素隐式具有 \"any\" 类型,因为类型 \"{0}\" 没有索引签名。你是想调用 \"{1}\" 吗?",
-  "Emit_a_UTF_8_Byte_Order_Mark_BOM_in_the_beginning_of_output_files_6164": "在输出文件的开头发出一个 UTF-8 字节顺序标记(BOM)。",
+  "Emit_6246": "发出",
+  "Emit_ECMAScript_standard_compliant_class_fields_6712": "发出符合 ECMAScript 标准的类字段。",
+  "Emit_a_UTF_8_Byte_Order_Mark_BOM_in_the_beginning_of_output_files_6622": "在输出文件的开头发出一个 UTF-8 字节顺序标记(BOM)。",
   "Emit_a_single_file_with_source_maps_instead_of_having_a_separate_file_6151": "发出包含源映射而非包含单独文件的单个文件。",
+  "Emit_a_v8_CPU_profile_of_the_compiler_run_for_debugging_6638": "发出用于调试的编译器运行的 v8 CPU 配置文件。",
+  "Emit_additional_JavaScript_to_ease_support_for_importing_CommonJS_modules_This_enables_allowSyntheti_6626": "发出其他 JavaScript 以便支持导入 CommonJS 模块。这将启用 “allowSyntheticDefaultImports” 以实现类型兼容性。",
   "Emit_class_fields_with_Define_instead_of_Set_6222": "使用 Define 而不是 Set 发出类字段。",
+  "Emit_design_type_metadata_for_decorated_declarations_in_source_files_6624": "为源文件中的修饰声明发出设计类型元数据。",
+  "Emit_more_compliant_but_verbose_and_less_performant_JavaScript_for_iteration_6621": "发出更合规但更详细且性能较低的 JavaScript 进行迭代。",
   "Emit_the_source_alongside_the_sourcemaps_within_a_single_file_requires_inlineSourceMap_or_sourceMap__6152": "在单个文件内发出源以及源映射;需要设置 \"--inlineSourceMap\" 或 \"--sourceMap\"。",
   "Enable_all_strict_type_checking_options_6180": "启用所有严格类型检查选项。",
+  "Enable_color_and_formatting_in_output_to_make_compiler_errors_easier_to_read_6685": "在输出中启用颜色和格式设置,使编译器错误更易于阅读",
+  "Enable_constraints_that_allow_a_TypeScript_project_to_be_used_with_project_references_6611": "启用允许将 TypeScript 项目与项目引用一起使用的约束。",
+  "Enable_error_reporting_for_codepaths_that_do_not_explicitly_return_in_a_function_6667": "为未在函数中显式返回的代码路径启用错误报告。",
+  "Enable_error_reporting_for_expressions_and_declarations_with_an_implied_any_type_6665": "对具有隐式 “any” 类型的表达式和声明启用错误报告。",
+  "Enable_error_reporting_for_fallthrough_cases_in_switch_statements_6664": "为 switch 语句中的故障案例启用错误报告。",
+  "Enable_error_reporting_in_type_checked_JavaScript_files_6609": "在已检查类型的 JavaScript 文件中启用错误报告。",
+  "Enable_error_reporting_when_a_local_variables_aren_t_read_6675": "启用在未读取局部变量时报告错误。",
+  "Enable_error_reporting_when_this_is_given_the_type_any_6668": "启用在 “this” 为 “any” 类型时进行错误报告。",
+  "Enable_experimental_support_for_TC39_stage_2_draft_decorators_6630": "为 TC39 暂存 2 草稿修饰器启用实验性支持。",
+  "Enable_importing_json_files_6689": "启用导入 .json 文件",
   "Enable_incremental_compilation_6378": "启用增量编译",
   "Enable_project_compilation_6302": "启用项目编译",
   "Enable_strict_bind_call_and_apply_methods_on_functions_6214": "对函数启用严格的 \"bind\"、\"call\" 和 \"apply\" 方法。",
@@ -517,11 +608,20 @@
   "Enable_the_experimentalDecorators_option_in_your_configuration_file_95074": "在配置文件中启用 \"experimentalDecorators\" 选项",
   "Enable_the_jsx_flag_in_your_configuration_file_95088": "在配置文件中启用 \"--jsx\" 标志",
   "Enable_tracing_of_the_name_resolution_process_6085": "启用名称解析过程的跟踪。",
-  "Enable_verbose_logging_6366": "启用详细日志记录",
+  "Enable_verbose_logging_6713": "启用详细日志记录",
   "Enables_emit_interoperability_between_CommonJS_and_ES_Modules_via_creation_of_namespace_objects_for__7037": "通过为所有导入创建命名空间对象来启用 CommonJS 和 ES 模块之间的发出互操作性。表示 \"allowSyntheticDefaultImports\"。",
   "Enables_experimental_support_for_ES7_async_functions_6068": "对 ES7 异步函数启用实验支持。",
   "Enables_experimental_support_for_ES7_decorators_6065": "对 ES7 修饰器启用实验支持。",
   "Enables_experimental_support_for_emitting_type_metadata_for_decorators_6066": "对发出修饰器的类型元数据启用实验支持。",
+  "Enforces_using_indexed_accessors_for_keys_declared_using_an_indexed_type_6671": "对使用索引类型声明的键强制使用索引访问器",
+  "Ensure_overriding_members_in_derived_classes_are_marked_with_an_override_modifier_6666": "确保使用替代修饰符标记派生类中的替代成员。",
+  "Ensure_that_casing_is_correct_in_imports_6637": "确保导入中的大小写正确。",
+  "Ensure_that_each_file_can_be_safely_transpiled_without_relying_on_other_imports_6645": "确保可以安全地转译每个文件,而无需依赖其他导入。",
+  "Ensure_use_strict_is_always_emitted_6605": "请确保始终发出 “se strict”。",
+  "Entry_point_for_implicit_type_library_0_1420": "隐式类型库 \"{0}\" 的入口点",
+  "Entry_point_for_implicit_type_library_0_with_packageId_1_1421": "隐式类型库 \"{0}\" 的入口点,具有 packageId \"{1}\"",
+  "Entry_point_of_type_library_0_specified_in_compilerOptions_1417": "在 compilerOptions 中指定的类型库 \"{0}\" 的入口点",
+  "Entry_point_of_type_library_0_specified_in_compilerOptions_with_packageId_1_1418": "在 compilerOptions 中指定的类型库 \"{0}\" 的入口点,具有 packageId \"{1}\"",
   "Enum_0_used_before_its_declaration_2450": "枚举“{0}”用于其声明前。",
   "Enum_declarations_can_only_merge_with_namespace_or_other_enum_declarations_2567": "枚举声明只能与命名空间或其他枚举声明合并。",
   "Enum_declarations_must_all_be_const_or_non_const_2473": "枚举声明必须全为常数或非常数。",
@@ -535,15 +635,13 @@
   "Expected_0_1_type_arguments_provide_these_with_an_extends_tag_8027": "应为 {0}-{1} 类型参数;请为这些参数添加 \"@extends\" 标记。",
   "Expected_0_arguments_but_got_1_2554": "应有 {0} 个参数,但获得 {1} 个。",
   "Expected_0_arguments_but_got_1_Did_you_forget_to_include_void_in_your_type_argument_to_Promise_2794": "应为 {0} 个参数,但得到的却是 {1} 个。你是否忘了将类型参数中的 \"void\" 包含到 \"Promise\"?",
-  "Expected_0_arguments_but_got_1_or_more_2556": "应有 {0} 个参数,但获得的数量大于等于 {1}。",
   "Expected_0_type_arguments_but_got_1_2558": "应有 {0} 个类型参数,但获得 {1} 个。",
   "Expected_0_type_arguments_provide_these_with_an_extends_tag_8026": "应为 {0} 类型参数;请为这些参数添加 \"@extends\" 标记。",
   "Expected_at_least_0_arguments_but_got_1_2555": "应有至少 {0} 个参数,但获得 {1} 个。",
-  "Expected_at_least_0_arguments_but_got_1_or_more_2557": "应有至少 {0} 个参数,但获得的数量大于等于 {1}。",
   "Expected_corresponding_JSX_closing_tag_for_0_17002": "“{0}”预期的相应 JSX 结束标记。",
   "Expected_corresponding_closing_tag_for_JSX_fragment_17015": "预期的 JSX 片段的相应结束标记。",
+  "Expected_for_property_initializer_1442": "属性初始化表达式应有 \"=\"。",
   "Expected_type_of_0_field_in_package_json_to_be_1_got_2_6105": "\"package.json\" 中 \"{0}\" 字段的类型应为 \"{1}\",但实际为 \"{2}\" 。",
-  "Experimental_Options_6177": "实验性选项",
   "Experimental_support_for_decorators_is_a_feature_that_is_subject_to_change_in_a_future_release_Set_t_1219": "对修饰器的实验支持功能在将来的版本中可能更改。在 \"tsconfig\" 或 \"jsconfig\" 中设置 \"experimentalDecorators\" 选项以删除此警告。",
   "Explicitly_specified_module_resolution_kind_Colon_0_6087": "显示指定了模块解析类型:“{0}”。",
   "Exponentiation_cannot_be_performed_on_bigint_values_unless_the_target_option_is_set_to_es2016_or_lat_2791": "除非 \"target\" 选项设置为 \"es2016\" 或更高版本,否则不能对 \"bigint\" 值执行求幂运算。",
@@ -554,12 +652,14 @@
   "Exported_external_package_typings_file_0_is_not_a_module_Please_contact_the_package_author_to_update_2656": "导出的外部包键入文件“{0}”不是一个模块。请与包作者联系或更新包定义。",
   "Exported_external_package_typings_file_cannot_contain_tripleslash_references_Please_contact_the_pack_2654": "导出的外部包键入文件不能包含三斜线引用。请与包作者联系或更新包定义。",
   "Exported_type_alias_0_has_or_is_using_private_name_1_4081": "导出的类型别名“{0}”已经或正在使用专用名称“{1}”。",
+  "Exported_type_alias_0_has_or_is_using_private_name_1_from_module_2_4084": "导出的类型别名“{0}”具有或正在使用模块“{2}”中的专用名称“{1}”。",
   "Exported_variable_0_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4023": "导出的变量“{0}”具有或正在使用外部模块“{2}”中的名称“{1}”,但不能为其命名。",
   "Exported_variable_0_has_or_is_using_name_1_from_private_module_2_4024": "导出的变量“{0}”具有或正在使用私有模块“{2}”中的名称“{1}”。",
   "Exported_variable_0_has_or_is_using_private_name_1_4025": "导出的变量“{0}”具有或正在使用专用名称“{1}”。",
   "Exports_and_export_assignments_are_not_permitted_in_module_augmentations_2666": "模块扩大中不允许导出和导出分配。",
   "Expression_expected_1109": "应为表达式。",
   "Expression_or_comma_expected_1137": "应为表达式或逗号。",
+  "Expression_produces_a_tuple_type_that_is_too_large_to_represent_2800": "表达式生成的元组类型太大,无法表示。",
   "Expression_produces_a_union_type_that_is_too_complex_to_represent_2590": "表达式生成的联合类型过于复杂,无法表示。",
   "Expression_resolves_to_super_that_compiler_uses_to_capture_base_class_reference_2402": "表达式解析为 \"_super\",编译器使用 \"_super\" 获取基类引用。",
   "Expression_resolves_to_variable_declaration_0_that_compiler_uses_to_support_async_functions_2521": "表达式解析为编译器用于支持异步函数的变量声明“{0}”。",
@@ -579,7 +679,9 @@
   "Failed_to_parse_file_0_Colon_1_5014": "未能分析文件“{0}”: {1}。",
   "Fallthrough_case_in_switch_7029": "switch 语句中的 Fallthrough 情况。",
   "File_0_does_not_exist_6096": "文件“{0}”不存在。",
+  "File_0_does_not_exist_according_to_earlier_cached_lookups_6240": "根据前面缓存的查找,文件“{0}”不存在。",
   "File_0_exist_use_it_as_a_name_resolution_result_6097": "文件“{0}”存在 - 将其用作名称解析结果。",
+  "File_0_exists_according_to_earlier_cached_lookups_6239": "根据前面缓存的查找,文件“{0}”存在。",
   "File_0_has_an_unsupported_extension_The_only_supported_extensions_are_1_6054": "文件“{0}”具有不受支持的扩展名。仅支持 {1} 扩展名。",
   "File_0_has_an_unsupported_extension_so_skipping_it_6081": "文件“{0}”的扩展名不受支持,正在跳过。",
   "File_0_is_a_JavaScript_file_Did_you_mean_to_enable_the_allowJs_option_6504": "文件 \"{0}\" 是 JavaScript 文件。你是想启用 \"allowJs\" 选项吗?",
@@ -587,16 +689,32 @@
   "File_0_is_not_listed_within_the_file_list_of_project_1_Projects_must_list_all_files_or_use_an_includ_6307": "文件 \"{0}\" 不在项目 \"{1}\" 的文件列表中。项目必须列出所有文件,或使用 \"include\" 模式。",
   "File_0_is_not_under_rootDir_1_rootDir_is_expected_to_contain_all_source_files_6059": "文件“{0}”不在 \"rootDir\"“{1}”下。\"rootDir\" 应包含所有源文件。",
   "File_0_not_found_6053": "找不到文件“{0}”。",
+  "File_Management_6245": "文件管理",
   "File_change_detected_Starting_incremental_compilation_6032": "检测到文件更改。正在启动增量编译...",
   "File_is_a_CommonJS_module_it_may_be_converted_to_an_ES6_module_80001": "文件是 CommonJS 模块;它可能会转换为 ES6 模块。",
+  "File_is_default_library_for_target_specified_here_1426": "文件是此处指定的目标的默认库。",
+  "File_is_entry_point_of_type_library_specified_here_1419": "文件是此处指定的类型库的入口点。",
+  "File_is_included_via_import_here_1399": "在此处通过导入包含了文件。",
+  "File_is_included_via_library_reference_here_1406": "在此处通过库引用包含了文件。",
+  "File_is_included_via_reference_here_1401": "在此处通过引用包含了文件。",
+  "File_is_included_via_type_library_reference_here_1404": "在此处通过类型库引用包含了文件。",
+  "File_is_library_specified_here_1423": "文件是此处指定的库。",
+  "File_is_matched_by_files_list_specified_here_1410": "通过此处指定的“文件”列表匹配了文件。",
+  "File_is_matched_by_include_pattern_specified_here_1408": "通过在此处指定包含模式匹配了文件。",
+  "File_is_output_from_referenced_project_specified_here_1413": "从此处指定的引用项目输出文件。",
+  "File_is_output_of_project_reference_source_0_1428": "文件是项目引用源 \"{0}\" 的输出",
+  "File_is_source_from_referenced_project_specified_here_1416": "文件源自此处指定的引用项目。",
   "File_name_0_differs_from_already_included_file_name_1_only_in_casing_1149": "文件名“{0}”仅在大小写方面与包含的文件名“{1}”不同。",
   "File_name_0_has_a_1_extension_stripping_it_6132": "文件名“{0}”的扩展名为“{1}”,请去除它。",
+  "File_redirects_to_file_0_1429": "文件重定向到文件 \"{0}\"",
   "File_specification_cannot_contain_a_parent_directory_that_appears_after_a_recursive_directory_wildca_5065": "文件规范不能包含出现在递归目录通配符(\"*\"): “{0}”后的父目录(\"..\")。",
   "File_specification_cannot_end_in_a_recursive_directory_wildcard_Asterisk_Asterisk_Colon_0_5010": "文件规范不能以递归目录通配符结尾(\"**\"):“{0}”。",
+  "Filters_results_from_the_include_option_6627": "从 “include” 选项筛选结果。",
   "Fix_all_detected_spelling_errors_95026": "修复检测到的所有拼写错误",
   "Fix_all_expressions_possibly_missing_await_95085": "修复可能缺少 \"await\" 的所有表达式",
   "Fix_all_implicit_this_errors_95107": "修复所有 implicit-'this' 错误",
   "Fix_all_incorrect_return_type_of_an_async_functions_90037": "修复所有错误的异步函数返回类型",
+  "For_await_loops_cannot_be_used_inside_a_class_static_block_18038": "无法在类静态块内使用 “For await 循环。",
   "Found_0_errors_6217": "找到 {0} 个错误。",
   "Found_0_errors_Watching_for_file_changes_6194": "找到 {0} 个错误。注意文件更改。",
   "Found_1_error_6216": "找到 1 个错误。",
@@ -610,11 +728,14 @@
   "Function_implementation_name_must_be_0_2389": "函数实现名称必须为“{0}”。",
   "Function_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_ref_7024": "由于函数不具有返回类型批注并且在它的一个返回表达式中得到直接或间接引用,因此它隐式具有返回类型 \"any\"。",
   "Function_lacks_ending_return_statement_and_return_type_does_not_include_undefined_2366": "函数缺少结束 return 语句,返回类型不包括 \"undefined\"。",
+  "Function_not_implemented_95159": "未实现函数。",
   "Function_overload_must_be_static_2387": "函数重载必须为静态。",
   "Function_overload_must_not_be_static_2388": "函数重载不能为静态。",
   "Function_type_notation_must_be_parenthesized_when_used_in_a_union_type_1385": "在联合类型中使用时,函数类型标记必须用括号括起来。",
   "Function_type_notation_must_be_parenthesized_when_used_in_an_intersection_type_1387": "在相交类型中使用时,函数类型标记必须用括号括起来。",
   "Function_type_which_lacks_return_type_annotation_implicitly_has_an_0_return_type_7014": "缺少返回类型注释的函数类型隐式具有 \"{0}\" 返回类型。",
+  "Function_with_bodies_can_only_merge_with_classes_that_are_ambient_2814": "具有正文的函数只能与环境类合并。",
+  "Generate_d_ts_files_from_TypeScript_and_JavaScript_files_in_your_project_6612": "从项目的 TypeScript 和 JavaScript 文件生成 .d.ts 文件。",
   "Generate_get_and_set_accessors_95046": "生成 \"get\" 和 \"set\" 访问器",
   "Generate_get_and_set_accessors_for_all_overriding_properties_95119": "为所有重写属性生成 \"get\" 和 \"set\" 访问器",
   "Generates_a_CPU_profile_6223": "生成 CPU 配置文件。",
@@ -627,13 +748,13 @@
   "Generators_are_only_available_when_targeting_ECMAScript_2015_or_higher_1220": "仅当面向 ECMAScript 2015 或更高版本时,生成器才可用。",
   "Generic_type_0_requires_1_type_argument_s_2314": "泛型类型“{0}”需要 {1} 个类型参数。",
   "Generic_type_0_requires_between_1_and_2_type_arguments_2707": "泛型类型“{0}”需要介于 {1} 和 {2} 类型参数之间。",
-  "Getter_and_setter_accessors_do_not_agree_in_visibility_2379": "Getter 和 Setter 访问器在可见性上不一致。",
   "Global_module_exports_may_only_appear_at_top_level_1316": "全局模块导出仅可出现在顶层级别中。",
   "Global_module_exports_may_only_appear_in_declaration_files_1315": "全局模块导出仅可出现声明文件中。",
   "Global_module_exports_may_only_appear_in_module_files_1314": "全局模块导出仅可出现模块文件中。",
   "Global_type_0_must_be_a_class_or_interface_type_2316": "全局类型“{0}”必须为类或接口类型。",
   "Global_type_0_must_have_1_type_parameter_s_2317": "全局类型“{0}”必须具有 {1} 个类型参数。",
   "Have_recompiles_in_incremental_and_watch_assume_that_changes_within_a_file_will_only_affect_files_di_6384": "在 \"--incremental\" 和 \"--watch\" 中有重新编译,假定文件中的更改只会影响直接依赖它的文件。",
+  "Have_recompiles_in_projects_that_use_incremental_and_watch_mode_assume_that_changes_within_a_file_wi_6606": "在使用 “incremental” 和 “watch” 模式的项目中重新编译假定文件中的更改将直接影响影响依赖于它的文件。",
   "Hexadecimal_digit_expected_1125": "应为十六进制数字。",
   "Identifier_expected_0_is_a_reserved_word_at_the_top_level_of_a_module_1262": "应为标识符。“{0}”是模块顶层的预留字。",
   "Identifier_expected_0_is_a_reserved_word_in_strict_mode_1212": "应为标识符。“{0}”在严格模式下是保留字。",
@@ -642,8 +763,9 @@
   "Identifier_expected_0_is_a_reserved_word_that_cannot_be_used_here_1359": "应为标识符。\"{0}\" 是保留字,不能在此处使用。",
   "Identifier_expected_1003": "应为标识符。",
   "Identifier_expected_esModule_is_reserved_as_an_exported_marker_when_transforming_ECMAScript_modules_1216": "应为标识符。转换 ECMAScript 模块时,\"__esModule\" 保留为导出标记。",
-  "If_the_0_package_actually_exposes_this_module_consider_sending_a_pull_request_to_amend_https_Colon_S_7040": "如果 \"{0}\" 包实际上公开此模块,请考虑发送拉取请求来修正 \"https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/{1}\"",
+  "If_the_0_package_actually_exposes_this_module_consider_sending_a_pull_request_to_amend_https_Colon_S_7040": "如果“{0}”包实际上公开此模块,请考虑发送拉取请求以修正“https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/{1}”",
   "Ignore_this_error_message_90019": "忽略此错误信息",
+  "Ignoring_tsconfig_json_compiles_the_specified_files_with_default_compiler_options_6924": "忽略 tsconfig.json,使用默认编译器选项编译指定的文件",
   "Implement_all_inherited_abstract_classes_95040": "实现继承的所有抽象类",
   "Implement_all_unimplemented_interfaces_95032": "实现未实现的所有接口",
   "Implement_inherited_abstract_class_90007": "实现已继承的抽象类",
@@ -660,14 +782,23 @@
   "Import_may_be_converted_to_a_default_import_80003": "导入可能会转换为默认导入。",
   "Import_name_cannot_be_0_2438": "导入名称不能为“{0}”。",
   "Import_or_export_declaration_in_an_ambient_module_declaration_cannot_reference_module_through_relati_2439": "环境模块声明中的导入或导出声明不能通过相对模块名引用模块。",
+  "Imported_via_0_from_file_1_1393": "通过 {0} 从文件 \"{1}\" 导入",
+  "Imported_via_0_from_file_1_to_import_importHelpers_as_specified_in_compilerOptions_1395": "通过 {0} 从文件 \"{1}\" 导入,以按照 compilerOptions 中指定的配置导入 \"importHelpers\"",
+  "Imported_via_0_from_file_1_to_import_jsx_and_jsxs_factory_functions_1397": "通过 {0} 从文件 \"{1}\" 导入,以导入 \"jsx\" 和 \"jsxs\" 工厂函数",
+  "Imported_via_0_from_file_1_with_packageId_2_1394": "通过 {0} 从具有 packageId \"{2}\" 的文件 \"{1}\" 导入",
+  "Imported_via_0_from_file_1_with_packageId_2_to_import_importHelpers_as_specified_in_compilerOptions_1396": "通过 {0} 从具有 packageId \"{2}\" 的文件 \"{1}\" 导入,以按照 compilerOptions 中指定的方式导入 \"importHelpers\"",
+  "Imported_via_0_from_file_1_with_packageId_2_to_import_jsx_and_jsxs_factory_functions_1398": "通过 {0} 从具有 packageId \"{2}\" 的文件 \"{1}\" 导入,以导入 \"jsx\" 和 \"jsxs\" 工厂函数",
   "Imports_are_not_permitted_in_module_augmentations_Consider_moving_them_to_the_enclosing_external_mod_2667": "模块扩大中不允许导入。请考虑将它们移动到封闭的外部模块。",
   "In_ambient_enum_declarations_member_initializer_must_be_constant_expression_1066": "在环境枚举声明中,成员初始化表达式必须是常数表达式。",
   "In_an_enum_with_multiple_declarations_only_one_declaration_can_omit_an_initializer_for_its_first_enu_2432": "在包含多个声明的枚举中,只有一个声明可以省略其第一个枚举元素的初始化表达式。",
+  "Include_a_list_of_files_This_does_not_support_glob_patterns_as_opposed_to_include_6635": "包含文件列表。这不支持 glob 模式,与 “include” 不同。",
   "Include_modules_imported_with_json_extension_6197": "包括通过 \".json\" 扩展导入的模块",
-  "Include_undefined_in_index_signature_results_6800": "在索引签名结果中包含“未定义”",
+  "Include_source_code_in_the_sourcemaps_inside_the_emitted_JavaScript_6644": "在发出的 JavaScript 内的源映射中包含源代码。",
+  "Include_sourcemap_files_inside_the_emitted_JavaScript_6643": "在发出的 JavaScript 中包括源映射文件。",
+  "Include_undefined_in_index_signature_results_6716": "在索引签名结果中包含“未定义”",
+  "Including_watch_w_will_start_watching_the_current_project_for_the_file_changes_Once_set_you_can_conf_6914": "包括 --watch,-w 将开始监视当前项目的文件更改。设置后,可以使用以下内容配置监视模式:",
+  "Index_signature_for_type_0_is_missing_in_type_1_2329": "类型“{1}”中缺少类型“{0}”的索引签名。",
   "Index_signature_in_type_0_only_permits_reading_2542": "类型“{0}”中的索引签名仅允许读取。",
-  "Index_signature_is_missing_in_type_0_2329": "类型“{0}”中缺少索引签名。",
-  "Index_signatures_are_incompatible_2330": "索引签名不兼容。",
   "Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local_2395": "合并声明“{0}”中的单独声明必须全为导出或全为局部声明。",
   "Infer_all_types_from_usage_95023": "从使用情况推导所有类型",
   "Infer_function_return_type_95148": "推断函数返回类型",
@@ -676,6 +807,7 @@
   "Infer_type_of_0_from_usage_95011": "根据使用情况推断“{0}”的类型",
   "Initialize_property_0_in_the_constructor_90020": "初始化构造函数中的属性“{0}”",
   "Initialize_static_property_0_90021": "初始化静态属性“{0}”",
+  "Initializer_for_property_0_2811": "属性“{0}”的初始化表达式",
   "Initializer_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor_2301": "实例成员变量“{0}”的初始化表达式不能引用构造函数中声明的标识符“{1}”。",
   "Initializer_provides_no_value_for_this_binding_element_and_the_binding_element_has_no_default_value_2525": "初始化表达式没有为此绑定元素提供此任何值,且该绑定元素没有默认值。",
   "Initializers_are_not_allowed_in_ambient_contexts_1039": "不允许在环境上下文中使用初始化表达式。",
@@ -686,12 +818,16 @@
   "Interface_0_cannot_simultaneously_extend_types_1_and_2_2320": "接口“{0}”不能同时扩展类型“{1}”和“{2}”。",
   "Interface_0_incorrectly_extends_interface_1_2430": "接口“{0}”错误扩展接口“{1}”。",
   "Interface_declaration_cannot_have_implements_clause_1176": "接口声明不能有 \"implements\" 子句。",
+  "Interface_must_be_given_a_name_1438": "必须为接口指定名称。",
   "Interface_name_cannot_be_0_2427": "接口名称不能为“{0}”。",
+  "Interop_Constraints_6252": "互操作约束",
+  "Interpret_optional_property_types_as_written_rather_than_adding_undefined_6243": "将可选属性类型解释为已写,而不是添加 \"undefined\"。",
   "Invalid_character_1127": "无效的字符。",
   "Invalid_module_name_in_augmentation_Module_0_resolves_to_an_untyped_module_at_1_which_cannot_be_augm_2665": "扩大中的模块名称无效。模块“{0}”解析到位于“{1}”处的非类型化模块,其无法扩大。",
   "Invalid_module_name_in_augmentation_module_0_cannot_be_found_2664": "扩大中的模块名无效,找不到模块“{0}”。",
   "Invalid_reference_directive_syntax_1084": "\"reference\" 指令语法无效。",
   "Invalid_use_of_0_Class_definitions_are_automatically_in_strict_mode_1210": "“{0}”的使用无效。类定义自动处于严格模式。",
+  "Invalid_use_of_0_It_cannot_be_used_inside_a_class_static_block_18039": "“{0}”的使用无效。它不能在类静态块内使用。",
   "Invalid_use_of_0_Modules_are_automatically_in_strict_mode_1215": "“{0}”的使用无效。模块自动处于严格模式。",
   "Invalid_use_of_0_in_strict_mode_1100": "严格模式下“{0}”的使用无效。",
   "Invalid_value_for_jsxFactory_0_is_not_a_valid_identifier_or_qualified_name_5067": "\"jsxFactory\" 的值无效。“{0}”不是有效的标识符或限定名称。",
@@ -723,13 +859,18 @@
   "JSX_expressions_may_not_use_the_comma_operator_Did_you_mean_to_write_an_array_18007": "JSX 表达式不能使用逗号运算符。你是想写入数组吗?",
   "JSX_expressions_must_have_one_parent_element_2657": "JSX 表达式必须具有一个父元素。",
   "JSX_fragment_has_no_corresponding_closing_tag_17014": "JSX 片段没有相应的结束标记。",
+  "JSX_property_access_expressions_cannot_include_JSX_namespace_names_2633": "JSX 属性访问表达式不能包含 JSX 命名空间名称",
   "JSX_spread_child_must_be_an_array_type_2609": "JSX 扩展子属性必须为数组类型。",
+  "JavaScript_Support_6247": "JavaScript 支持",
   "Jump_target_cannot_cross_function_boundary_1107": "跳转目标不能跨越函数边界。",
   "KIND_6034": "种类",
   "Keywords_cannot_contain_escape_characters_1260": "关键字不能包含转义字符。",
   "LOCATION_6037": "位置",
+  "Language_and_Environment_6254": "语言和环境",
   "Language_service_is_disabled_9004": "语言服务已禁用。",
   "Left_side_of_comma_operator_is_unused_and_has_no_side_effects_2695": "逗号运算符的左侧未使用,没有任何副作用。",
+  "Library_0_specified_in_compilerOptions_1422": "CompilerOptions 中指定了库 \"{0}\"",
+  "Library_referenced_via_0_from_file_1_1405": "通过 \"{0}\" 从文件 \"{1}\" 引用了库",
   "Line_break_not_permitted_here_1142": "不允许在此处换行。",
   "Line_terminator_not_permitted_before_arrow_1200": "箭头前不允许有行终止符。",
   "List_of_folders_to_include_type_definitions_from_6161": "包含类型定义来源的文件夹列表。",
@@ -739,11 +880,14 @@
   "Loading_module_0_from_node_modules_folder_target_file_type_1_6098": "正在从 \"node_modules\" 文件夹加载模块“{0}”,目标文件类型“{1}”。",
   "Loading_module_as_file_Slash_folder_candidate_module_location_0_target_file_type_1_6095": "正在将模块作为文件/文件夹进行加载,候选模块位置“{0}”,目标文件类型“{1}”。",
   "Locale_must_be_of_the_form_language_or_language_territory_For_example_0_or_1_6048": "区域设置必须采用 <语言> 或 <语言>-<区域> 形式。例如“{0}”或“{1}”。",
+  "Log_paths_used_during_the_moduleResolution_process_6706": "在 “moduleResolution” 进程期间使用的日志路径。",
   "Longest_matching_prefix_for_0_is_1_6108": "“{0}”的最长匹配前缀为“{1}”。",
   "Looking_up_in_node_modules_folder_initial_location_0_6125": "正在 \"node_modules\" 文件夹中查找,初始位置为“{0}”。",
   "Make_all_super_calls_the_first_statement_in_their_constructor_95036": "让所有 \"super()\" 调用成为构造函数中的第一个语句",
+  "Make_keyof_only_return_strings_instead_of_string_numbers_or_symbols_Legacy_option_6650": "使 keyof 仅返回字符串,而不是字符串、数字或符号。旧版选项。",
   "Make_super_call_the_first_statement_in_the_constructor_90002": "在构造函数中,使 \"super()\" 调用第一个语句",
   "Mapped_object_type_implicitly_has_an_any_template_type_7039": "映射的对象类型隐式地含有 \"any\" 模板类型。",
+  "Matched_by_include_pattern_0_in_1_1407": "通过在 \"{1}\" 中的包含模式 \"{0}\" 匹配",
   "Member_0_implicitly_has_an_1_type_7008": "成员“{0}”隐式包含类型“{1}”。",
   "Member_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage_7045": "成员 \"{0}\" 隐式具有 \"{1}\" 类型,但可以从用法中推断出更好的类型。",
   "Merge_conflict_marker_encountered_1185": "遇到合并冲突标记。",
@@ -752,6 +896,7 @@
   "Method_0_cannot_have_an_implementation_because_it_is_marked_abstract_1245": "方法“{0}”不能具有实现,因为它标记为抽象。",
   "Method_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2_4101": "导出接口的方法“{0}”具有或正在使用私有模块“{2}”中的名称“{1}”。",
   "Method_0_of_exported_interface_has_or_is_using_private_name_1_4102": "导出接口的方法“{0}”具有或正在使用专用名称“{1}”。",
+  "Method_not_implemented_95158": "方法未实现。",
   "Modifiers_cannot_appear_here_1184": "修饰符不能出现在此处。",
   "Module_0_can_only_be_default_imported_using_the_1_flag_1259": "模块 \"{0}\" 只能在使用 \"{1}\" 标志时进行默认导入",
   "Module_0_declares_1_locally_but_it_is_exported_as_2_2460": "模块 \"{0}\" 在本地声明 \"{1}\",但它被导出为 \"{2}\"。",
@@ -769,13 +914,14 @@
   "Module_0_was_resolved_as_locally_declared_ambient_module_in_file_1_6144": "模块“{0}”解析为文件“{1}”中本地声明的环境模块。",
   "Module_0_was_resolved_to_1_but_jsx_is_not_set_6142": "模块“{0}”已解析为“{1}”,但尚未设置 \"--jsx\"。",
   "Module_0_was_resolved_to_1_but_resolveJsonModule_is_not_used_7042": "模块 \"{0}\" 已解析为 \"{1}\",但未使用 \"--resolveJsonModule\"。",
-  "Module_Resolution_Options_6174": "模块分辨率选项",
+  "Module_declaration_names_may_only_use_or_quoted_strings_1443": "模块声明名称只能使用 ' 或 \" 引用字符串。",
   "Module_name_0_matched_pattern_1_6092": "模块名“{0}”,匹配的模式“{1}”。",
   "Module_name_0_was_not_resolved_6090": "======== 未解析模块名“{0}”。========",
   "Module_name_0_was_successfully_resolved_to_1_6089": "======== 模块名“{0}”已成功解析为“{1}”。========",
   "Module_name_0_was_successfully_resolved_to_1_with_Package_ID_2_6218": "======== 模块名 \"{0}\" 已成功解析为 \"{1}\",包 ID 为 \"{2}\"。========",
   "Module_resolution_kind_is_not_specified_using_0_6088": "未指定模块解析类型,正在使用“{0}”。",
   "Module_resolution_using_rootDirs_has_failed_6111": "使用 \"rootDirs\" 的模块解析失败。",
+  "Modules_6244": "模块",
   "Move_labeled_tuple_element_modifiers_to_labels_95117": "将已标记的元组元素修饰符移至标签",
   "Move_to_a_new_file_95049": "移动到新的文件",
   "Multiple_consecutive_numeric_separators_are_not_permitted_6189": "不允许使用多个连续的数字分隔符。",
@@ -784,11 +930,14 @@
   "Name_is_not_valid_95136": "名称无效",
   "Named_property_0_of_types_1_and_2_are_not_identical_2319": "“{1}”和“{2}”类型的命名属性“{0}”不完全相同。",
   "Namespace_0_has_no_exported_member_1_2694": "命名空间“{0}”没有已导出的成员“{1}”。",
+  "Namespace_must_be_given_a_name_1437": "必须为命名空间指定名称。",
+  "Namespace_name_cannot_be_0_2819": "命名空间名称不能为“{0}”。",
   "No_base_constructor_has_the_specified_number_of_type_arguments_2508": "没有任何基构造函数具有指定数量的类型参数。",
   "No_constituent_of_type_0_is_callable_2755": "不可调用 \"{0}\" 类型的任何组成部分。",
   "No_constituent_of_type_0_is_constructable_2759": "不可构造 \"{0}\" 类型的任何组成部分。",
   "No_index_signature_with_a_parameter_of_type_0_was_found_on_type_1_7054": "在类型 \"{1}\" 上找不到具有类型为 \"{0}\" 的参数的索引签名。",
   "No_inputs_were_found_in_config_file_0_Specified_include_paths_were_1_and_exclude_paths_were_2_18003": "在配置文件“{0}”中找不到任何输入。指定的 \"include\" 路径为“{1}”,\"exclude\" 路径为“{2}”。",
+  "No_longer_supported_In_early_versions_manually_set_the_text_encoding_for_reading_files_6608": "不再受支持。在早期版本中,手动设置用于读取文件的文本编码。",
   "No_overload_expects_0_arguments_but_overloads_do_exist_that_expect_either_1_or_2_arguments_2575": "没有需要 {0} 参数的重载,但存在需要 {1} 或 {2} 参数的重载。",
   "No_overload_expects_0_type_arguments_but_overloads_do_exist_that_expect_either_1_or_2_type_arguments_2743": "没有需要 {0} 类型参数的重载,但存在需要 {1} 或 {2} 类型参数的重载。",
   "No_overload_matches_this_call_2769": "没有与此调用匹配的重载。",
@@ -802,7 +951,6 @@
   "Not_all_code_paths_return_a_value_7030": "并非所有代码路径都返回值。",
   "Not_all_constituents_of_type_0_are_callable_2756": "\"{0}\" 类型的部分要素不可调用。",
   "Not_all_constituents_of_type_0_are_constructable_2760": "\"{0}\" 类型的部分要素不可构造。",
-  "Numeric_index_type_0_is_not_assignable_to_string_index_type_1_2413": "数字索引类型“{0}”不能赋给字符串索引类型“{1}”。",
   "Numeric_literals_with_absolute_values_equal_to_2_53_or_greater_are_too_large_to_be_represented_accur_80008": "绝对值大于或等于 2^53 的数值文本过大,无法用整数准确表示。",
   "Numeric_separators_are_not_allowed_here_6188": "此处不允许使用数字分隔符。",
   "Object_is_of_type_unknown_2571": "对象的类型为 \"unknown\"。",
@@ -826,9 +974,11 @@
   "Only_identifiers_Slashqualified_names_with_optional_type_arguments_are_currently_supported_in_a_clas_9002": "类 \"extends\" 子句当前仅支持具有可选类型参数的标识符/限定名称。",
   "Only_named_exports_may_use_export_type_1383": "只有已命名的导出可使用“导出类型”。",
   "Only_numeric_enums_can_have_computed_members_but_this_expression_has_type_0_If_you_do_not_need_exhau_18033": "只有数字枚举可具有计算成员,但此表达式的类型为“{0}”。如果不需要全面性检查,请考虑改用对象文本。",
+  "Only_output_d_ts_files_and_not_JavaScript_files_6623": "仅输出 d.ts 文件,而不输出 JavaScript 文件。",
   "Only_public_and_protected_methods_of_the_base_class_are_accessible_via_the_super_keyword_2340": "通过 \"super\" 关键字只能访问基类的公共方法和受保护方法。",
   "Operator_0_cannot_be_applied_to_type_1_2736": "运算符 \"{0}\" 不能应用于类型 \"{1}\"。",
   "Operator_0_cannot_be_applied_to_types_1_and_2_2365": "运算符“{0}”不能应用于类型“{1}”和“{2}”。",
+  "Opt_a_project_out_of_multi_project_reference_checking_when_editing_6619": "在编辑时选择项目退出多项目引用检查。",
   "Option_0_can_only_be_specified_in_tsconfig_json_file_or_set_to_false_or_null_on_command_line_6230": "选项“{0}”只能在 \"tsconfig.json\" 文件中指定,或者在命令行上设置为 \"false\" 或 \"null\"。",
   "Option_0_can_only_be_specified_in_tsconfig_json_file_or_set_to_null_on_command_line_6064": "选项“{0}”只能在 \"tsconfig.json\" 文件中指定或在命令行上设置为 \"null\"。",
   "Option_0_can_only_be_used_when_either_option_inlineSourceMap_or_option_sourceMap_is_provided_5051": "仅当提供了选项 \"--inlineSourceMap\" 或选项 \"--sourceMap\" 时,才能使用选项“{0}”。",
@@ -839,16 +989,22 @@
   "Option_0_cannot_be_specified_without_specifying_option_1_or_option_2_5069": "无法在不指定选项 {1} 或选项 {2} 的情况下指定选项 {0}。",
   "Option_0_should_have_array_of_strings_as_a_value_6103": "选项“{0}”应将字符串数组作为一个值。",
   "Option_build_must_be_the_first_command_line_argument_6369": "选项 '--build' 必须是第一个命令行参数。",
-  "Option_incremental_can_only_be_specified_using_tsconfig_emitting_to_single_file_or_when_option_tsBui_5074": "选项 \"--incremental\" 只能使用 tsconfig 指定,在发出到单个文件时指定,或在指定了选项 \"--tsBuildInfoFile\" 时指定。",
+  "Option_incremental_can_only_be_specified_using_tsconfig_emitting_to_single_file_or_when_option_tsBui_5074": "选项 “--incremental” 只能使用 tsconfig 指定,在发出到单个文件时指定,或在指定了选项 “--tsBuildInfoFile” 时指定。",
   "Option_isolatedModules_can_only_be_used_when_either_option_module_is_provided_or_option_target_is_ES_5047": "选项 \"isolatedModules\" 只可在提供了选项 \"--module\" 或者选项 \"target\" 是 \"ES2015\" 或更高版本时使用。",
+  "Option_preserveConstEnums_cannot_be_disabled_when_isolatedModules_is_enabled_5091": "启用 \"isolatedModules\" 时,无法禁用选项 \"preserveConstEnums\"。",
   "Option_project_cannot_be_mixed_with_source_files_on_a_command_line_5042": "选项 \"project\" 在命令行上不能与源文件混合使用。",
   "Option_resolveJsonModule_can_only_be_specified_when_module_code_generation_is_commonjs_amd_es2015_or_5071": "仅当模块代码生成为 \"commonjs\"、\"amd\"、\"es2015\" 或 \"esNext\" 时,才能指定选项 \"--resolveJsonModule\"。",
   "Option_resolveJsonModule_cannot_be_specified_without_node_module_resolution_strategy_5070": "在没有 \"node\" 模块解析策略的情况下,无法指定选项 \"-resolveJsonModule\"。",
   "Options_0_and_1_cannot_be_combined_6370": "选项“{0}”与“{1}”不能组合在一起。",
   "Options_Colon_6027": "选项:",
+  "Output_Formatting_6256": "输出格式设置",
+  "Output_compiler_performance_information_after_building_6615": "生成后输出编译器性能信息。",
   "Output_directory_for_generated_declaration_files_6166": "已生成声明文件的输出目录。",
   "Output_file_0_from_project_1_does_not_exist_6309": "来自项目“{1}”的输出文件“{0}”不存在",
   "Output_file_0_has_not_been_built_from_source_file_1_6305": "未从源文件“{1}”生成输出文件“{0}”。",
+  "Output_from_referenced_project_0_included_because_1_specified_1411": "由于指定了 \"{1}\",因此包含了引用的项目 \"{0}\" 的输出",
+  "Output_from_referenced_project_0_included_because_module_is_specified_as_none_1412": "由于已将 \"--module\" 指定为 \"none\",因此包含了引用的项目 \"{0}\" 的输出",
+  "Output_more_detailed_compiler_performance_information_after_building_6632": "生成后输出更详细的编译器性能信息。",
   "Overload_0_of_1_2_gave_the_following_error_2772": "第 {0} 个重载(共 {1} 个),“{2}”,出现以下错误。",
   "Overload_signatures_must_all_be_abstract_or_non_abstract_2512": "重载签名必须都是抽象的或都是非抽象的。",
   "Overload_signatures_must_all_be_ambient_or_non_ambient_2384": "重载签名必须全部为环境签名或非环境签名。",
@@ -892,18 +1048,25 @@
   "Parameter_type_of_public_static_setter_0_from_exported_class_has_or_is_using_name_1_from_private_mod_4034": "导出类中的公共静态 setter“{0}”的参数类型具有或正在使用私有模块“{2}”中的名称“{1}”。",
   "Parameter_type_of_public_static_setter_0_from_exported_class_has_or_is_using_private_name_1_4035": "导出类中的公共静态 setter“{0}”的参数类型具有或正在使用专用名称“{1}”。",
   "Parse_in_strict_mode_and_emit_use_strict_for_each_source_file_6141": "以严格模式进行分析,并为每个源文件发出 \"use strict\" 指令。",
+  "Part_of_files_list_in_tsconfig_json_1409": "tsconfig.js 中 \"files\" 列表的一部分",
   "Pattern_0_can_have_at_most_one_Asterisk_character_5061": "模式“{0}”最多只可具有一个 \"*\" 字符。",
   "Performance_timings_for_diagnostics_or_extendedDiagnostics_are_not_available_in_this_session_A_nativ_6386": "\"--diagnostics\" 或 \"--extendedDiagnostics\" 的性能计时在此会话中不可用。未能找到 Web 性能 API 的本机实现。",
+  "Platform_specific_6912": "平台特定",
   "Prefix_0_with_an_underscore_90025": "带下划线的前缀“{0}”",
   "Prefix_all_incorrect_property_declarations_with_declare_95095": "使用 \"declare\" 作为所有错误的属性声明的前缀",
   "Prefix_all_unused_declarations_with_where_possible_95025": "尽可能在所有未使用的声明前添加前缀 \"_\"",
   "Prefix_with_declare_95094": "使用 \"declare\" 前缀",
+  "Print_all_of_the_files_read_during_the_compilation_6653": "打印在编译过程中读取的所有文件。",
+  "Print_files_read_during_the_compilation_including_why_it_was_included_6631": "打印在编译过程中读取的文件,包括包含它的原因。",
+  "Print_names_of_files_and_the_reason_they_are_part_of_the_compilation_6505": "打印文件的名称及编译包含这些文件的原因。",
   "Print_names_of_files_part_of_the_compilation_6155": "属于编译一部分的文件的打印名称。",
   "Print_names_of_files_that_are_part_of_the_compilation_and_then_stop_processing_6503": "打印编译包含的文件的名称,然后停止处理。",
   "Print_names_of_generated_files_part_of_the_compilation_6154": "属于编译一部分的已生成文件的打印名称。",
   "Print_the_compiler_s_version_6019": "打印编译器的版本。",
   "Print_the_final_configuration_instead_of_building_1350": "打印最终配置而不是生成。",
+  "Print_the_names_of_emitted_files_after_a_compilation_6652": "编译后打印已发出文件的名称。",
   "Print_this_message_6017": "打印此消息。",
+  "Private_accessor_was_defined_without_a_getter_2806": "定义了专用访问器,但没有 Getter。",
   "Private_identifiers_are_not_allowed_in_variable_declarations_18029": "不允许在变量声明中使用专用标识符。",
   "Private_identifiers_are_not_allowed_outside_class_bodies_18016": "不允许在类主体之外使用专用标识符。",
   "Private_identifiers_are_only_available_when_targeting_ECMAScript_2015_and_higher_18028": "专用标识符仅在面向 ECMAScript 2015 和更高版本时可用。",
@@ -911,6 +1074,7 @@
   "Private_or_protected_member_0_cannot_be_accessed_on_a_type_parameter_4105": "不能在类型参数上访问专用或受保护的成员 \"{0}\"。",
   "Project_0_can_t_be_built_because_its_dependency_1_has_errors_6363": "无法生成项目“{0}”,因为其依赖项“{1}”有错误",
   "Project_0_can_t_be_built_because_its_dependency_1_was_not_built_6383": "无法生成项目 \"{0}\" ,因为未生成其依赖项 \"{1}\"",
+  "Project_0_is_being_forcibly_rebuilt_6388": "正在强制重新生成项目“{0}”",
   "Project_0_is_out_of_date_because_its_dependency_1_is_out_of_date_6353": "项目“{0}”已过期,因为其依赖项“{1}”已过期",
   "Project_0_is_out_of_date_because_oldest_output_1_is_older_than_newest_input_2_6350": "项目“{0}”已过期,因为最早的输出“{1}”早于最新的输入“{2}”",
   "Project_0_is_out_of_date_because_output_file_1_does_not_exist_6352": "项目“{0}”已过期,因为输出文件“{1}”不存在",
@@ -920,14 +1084,18 @@
   "Project_0_is_up_to_date_because_newest_input_1_is_older_than_oldest_output_2_6351": "项目“{0}”已是最新,因为最新的输入“{1}”早于最早的输出“{2}”",
   "Project_0_is_up_to_date_with_d_ts_files_from_its_dependencies_6354": "项目“{0}”已是最新,拥有来自其依赖项的 .d.ts 文件",
   "Project_references_may_not_form_a_circular_graph_Cycle_detected_Colon_0_6202": "项目引用不能形成环形图。检测到循环: {0}",
+  "Projects_6255": "项目",
   "Projects_in_this_build_Colon_0_6355": "此生成中的项目: {0}",
   "Projects_to_reference_6300": "要引用的项目",
+  "Property_0_cannot_have_an_initializer_because_it_is_marked_abstract_1267": "属性“{0}”不能具有初始化表杰式,因为它标记为摘要。",
   "Property_0_comes_from_an_index_signature_so_it_must_be_accessed_with_0_4111": "属性“{0}”来自索引签名,因此必须使用[“{0}”]访问它。",
   "Property_0_does_not_exist_on_const_enum_1_2479": "\"const\" 枚举“{1}”上不存在属性“{0}”。",
   "Property_0_does_not_exist_on_type_1_2339": "类型“{1}”上不存在属性“{0}”。",
   "Property_0_does_not_exist_on_type_1_Did_you_mean_2_2551": "属性“{0}”在类型“{1}”上不存在。你是否指的是“{2}”?",
   "Property_0_does_not_exist_on_type_1_Did_you_mean_to_access_the_static_member_2_instead_2576": "属性“{0}”在类型“{1}”上不存在。你的意思是改为访问静态成员“{2}”吗?",
-  "Property_0_does_not_exist_on_type_1_Do_you_need_to_change_your_target_library_Try_changing_the_lib_c_2550": "在“{1}”上没有“{0}”属性。是否需要更改目标库? 请尝试将 `lib` 编译器选项更改为 {2} 或更高版本。",
+  "Property_0_does_not_exist_on_type_1_Do_you_need_to_change_your_target_library_Try_changing_the_lib_c_2550": "属性“{0}”在类型“{1}”上不存在。是否需要更改目标库? 请尝试将 “lib” 编译器选项更改为“{2}”或更高版本。",
+  "Property_0_does_not_exist_on_type_1_Try_changing_the_lib_compiler_option_to_include_dom_2812": "属性“{0}”在类型 “{1}” 上不存在。请尝试将 “lib” 编译器选项更改为包含 “dom”。",
+  "Property_0_has_no_initializer_and_is_not_definitely_assigned_in_a_class_static_block_2817": "属性“{0}”没有初始化表达式,并且未在类静态块中明确分配。",
   "Property_0_has_no_initializer_and_is_not_definitely_assigned_in_the_constructor_2564": "属性“{0}”没有初始化表达式,且未在构造函数中明确赋值。",
   "Property_0_implicitly_has_type_any_because_its_get_accessor_lacks_a_return_type_annotation_7033": "属性“{0}”隐式具有类型 \"any\",因为其 get 访问器缺少返回类型批注。",
   "Property_0_implicitly_has_type_any_because_its_set_accessor_lacks_a_parameter_type_annotation_7032": "属性“{0}”隐式具有类型 \"any\",因为其 set 访问器缺少参数类型批注。",
@@ -945,18 +1113,19 @@
   "Property_0_is_optional_in_type_1_but_required_in_type_2_2327": "属性“{0}”在类型“{1}”中为可选,但在类型“{2}”中为必选。",
   "Property_0_is_private_and_only_accessible_within_class_1_2341": "属性“{0}”为私有属性,只能在类“{1}”中访问。",
   "Property_0_is_private_in_type_1_but_not_in_type_2_2325": "属性“{0}”在类型“{1}”中是私有属性,但在类型“{2}”中不是。",
-  "Property_0_is_protected_and_only_accessible_through_an_instance_of_class_1_2446": "属性“{0}”受保护,只能通过类“{1}”的实例访问。",
+  "Property_0_is_protected_and_only_accessible_through_an_instance_of_class_1_This_is_an_instance_of_cl_2446": "属性“{0}”受保护,只能通过类“{1}”的实例进行访问。这是类“{2}”的实例。",
   "Property_0_is_protected_and_only_accessible_within_class_1_and_its_subclasses_2445": "属性“{0}”受保护,只能在类“{1}”及其子类中访问。",
   "Property_0_is_protected_but_type_1_is_not_a_class_derived_from_2_2443": "属性“{0}”受保护,但类型“{1}”并不是从“{2}”派生的类。",
   "Property_0_is_protected_in_type_1_but_public_in_type_2_2444": "属性“{0}”在类型“{1}”中受保护,但在类型“{2}”中为公共属性。",
   "Property_0_is_used_before_being_assigned_2565": "在赋值前使用了属性“{0}”。",
   "Property_0_is_used_before_its_initialization_2729": "属性 \"{0}\" 在其初始化前已被使用。",
+  "Property_0_may_not_be_used_in_a_static_property_s_initializer_in_the_same_class_when_target_is_esnex_2810": "当 “target” 为 “esnext” 且 “useDefineForClassFields” 为 ”false” 时,属性“{0}”不能用在同一类静态属性的初始化表达式中。",
+  "Property_0_may_not_exist_on_type_1_Did_you_mean_2_2568": "类型“{1}”上不存在属性“{0}”。你是否是指“{2}”?",
   "Property_0_of_JSX_spread_attribute_is_not_assignable_to_target_property_2606": "JSX 展开特性的“{0}”属性不能分配给目标属性。",
   "Property_0_of_exported_class_expression_may_not_be_private_or_protected_4094": "导出类表达式的属性“{0}”可能不是私密或受保护的属性。",
   "Property_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2_4032": "导出接口的属性“{0}”具有或正在使用私有模块“{2}”中的名称“{1}”。",
   "Property_0_of_exported_interface_has_or_is_using_private_name_1_4033": "导出接口的属性“{0}”具有或正在使用专用名称“{1}”。",
-  "Property_0_of_type_1_is_not_assignable_to_numeric_index_type_2_2412": "类型“{1}”的属性“{0}”不能赋给数值索引类型“{2}”。",
-  "Property_0_of_type_1_is_not_assignable_to_string_index_type_2_2411": "类型“{1}”的属性“{0}”不能赋给字符串索引类型“{2}”。",
+  "Property_0_of_type_1_is_not_assignable_to_2_index_type_3_2411": "类型“{1}”的属性“{0}”不能赋给“{2}”索引类型“{3}”。",
   "Property_0_was_also_declared_here_2733": "属性 \"{0}\" 也在此处声明。",
   "Property_0_will_overwrite_the_base_property_in_1_If_this_is_intentional_add_an_initializer_Otherwise_2612": "属性 \"{0}\" 将覆盖 \"{1}\" 中的基属性。如果是有意的,请添加初始值设定项。否则,请添加 \"declare\" 修饰符或删除多余的声明。",
   "Property_assignment_expected_1136": "应为属性分配。",
@@ -978,12 +1147,18 @@
   "Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4027": "导出类的公共静态属性“{0}”具有或正在使用外部模块“{2}”中的名称“{1}”。",
   "Public_static_property_0_of_exported_class_has_or_is_using_private_name_1_4028": "导出类的公共静态属性“{0}”具有或正在使用专用名称“{1}”。",
   "Qualified_name_0_is_not_allowed_without_a_leading_param_object_1_8032": "不允许使用限定名 \"{0}\",因为没有前导 \"@param {object} {1}\"。",
+  "Raise_an_error_when_a_function_parameter_isn_t_read_6676": "在未读取函数参数时引发错误",
   "Raise_error_on_expressions_and_declarations_with_an_implied_any_type_6052": "对具有隐式 \"any\" 类型的表达式和声明引发错误。",
   "Raise_error_on_this_expressions_with_an_implied_any_type_6115": "在带隐式“any\" 类型的 \"this\" 表达式上引发错误。",
   "Re_exporting_a_type_when_the_isolatedModules_flag_is_provided_requires_using_export_type_1205": "提供 \"--isolatedModules\" 标志时,需要使用 \"export type\" 才能重新导出类型。",
   "Redirect_output_structure_to_the_directory_6006": "将输出结构重定向到目录。",
+  "Reduce_the_number_of_projects_loaded_automatically_by_TypeScript_6617": "减少 TypeScript 自动加载的项目数。",
   "Referenced_project_0_may_not_disable_emit_6310": "引用的项目“{0}”可能不会禁用发出。",
   "Referenced_project_0_must_have_setting_composite_Colon_true_6306": "引用的项目“{0}”必须拥有设置 \"composite\": true。",
+  "Referenced_via_0_from_file_1_1400": "通过 \"{0}\" 从文件 \"{1}\" 引用",
+  "Remove_a_list_of_directories_from_the_watch_process_6628": "从监视进程中删除目录列表。",
+  "Remove_a_list_of_files_from_the_watch_mode_s_processing_6629": "从监视模式的处理中删除文件列表。",
+  "Remove_all_unnecessary_override_modifiers_95163": "删除所有不必要的 \"override\" 修饰符",
   "Remove_all_unnecessary_uses_of_await_95087": "删除 \"await\" 的所有不必要的使用",
   "Remove_all_unreachable_code_95051": "删除所有无法访问的代码",
   "Remove_all_unused_labels_95054": "删除所有未使用的标签",
@@ -991,8 +1166,10 @@
   "Remove_braces_from_arrow_function_95060": "从箭头函数中删除大括号",
   "Remove_braces_from_arrow_function_body_95112": "从箭头函数主体中删除大括号",
   "Remove_import_from_0_90005": "从“{0}”删除导入",
+  "Remove_override_modifier_95161": "删除 \"override\" 修饰符",
   "Remove_parentheses_95126": "删除括号",
   "Remove_template_tag_90011": "删除模板标记",
+  "Remove_the_20mb_cap_on_total_source_code_size_for_JavaScript_files_in_the_TypeScript_language_server_6618": "删除 TypeScript 语言服务器中 JavaScript 文件总源代码大小 20mb 的上限。",
   "Remove_type_parameters_90012": "删除类型参数",
   "Remove_unnecessary_await_95086": "删除不必要的 \"await\"",
   "Remove_unreachable_code_95050": "删除无法访问的代码",
@@ -1010,14 +1187,16 @@
   "Report_errors_in_js_files_8019": ".js 文件中的报表出错。",
   "Report_errors_on_unused_locals_6134": "报告未使用的局部变量上的错误。",
   "Report_errors_on_unused_parameters_6135": "报告未使用的参数上的错误。",
-  "Require_undeclared_properties_from_index_signatures_to_use_element_accesses_6803": "要求索引签名中有未声明的属性以使用元素访问。",
+  "Require_undeclared_properties_from_index_signatures_to_use_element_accesses_6717": "要求索引签名中有未声明的属性以使用元素访问。",
   "Required_type_parameters_may_not_follow_optional_type_parameters_2706": "所需的类型参数可能不遵循可选类型参数。",
   "Resolution_for_module_0_was_found_in_cache_from_location_1_6147": "在位置“{1}”的缓存中找到模块“{0}”的解析。",
+  "Resolution_for_type_reference_directive_0_was_found_in_cache_from_location_1_6241": "在位置“{1}”的缓存中找到类型引用指令“{0}”的解析。",
   "Resolve_keyof_to_string_valued_property_names_only_no_numbers_or_symbols_6195": "只将 \"keyof\" 解析为字符串值的属性名称(不含数字或符号)。",
   "Resolving_from_node_modules_folder_6118": "正在从 node_modules 文件夹解析...",
   "Resolving_module_0_from_1_6086": "======== 正在从“{1}”解析模块“{0}”。========",
   "Resolving_module_name_0_relative_to_base_url_1_2_6094": "正在相对于基 URL“{1}”-“{2}”解析模块名“{0}”。",
   "Resolving_real_path_for_0_result_1_6130": "正在解析“{0}”的真实路径,结果为“{1}”。",
+  "Resolving_type_reference_directive_0_containing_file_1_6242": "======== 正在解析类型引用指令“{0}”,包含文件“{1}”。========",
   "Resolving_type_reference_directive_0_containing_file_1_root_directory_2_6116": "======== 正在解析类型引用指令“{0}”,包含文件“{1}”,根目录“{2}”。========",
   "Resolving_type_reference_directive_0_containing_file_1_root_directory_not_set_6123": "======== 正在解析类型引用指令“{0}”,包含文件“{1}”,未设置根目录。========",
   "Resolving_type_reference_directive_0_containing_file_not_set_root_directory_1_6127": "======== 正在解析类型引用指令“{0}”,未设置包含文件,根目录“{1}”。========",
@@ -1029,6 +1208,7 @@
   "Rest_signatures_are_incompatible_2572": "Rest 签名不兼容。",
   "Rest_types_may_only_be_created_from_object_types_2700": "rest 类型只能从对象类型创建。",
   "Return_type_annotation_circularly_references_itself_2577": "返回类型注释循环引用自身。",
+  "Return_type_must_be_inferred_from_a_function_95149": "必须从函数中推断返回类型",
   "Return_type_of_call_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1_4046": "导出接口中的调用签名的返回类型具有或正在使用私有模块“{1}”中的名称“{0}”。",
   "Return_type_of_call_signature_from_exported_interface_has_or_is_using_private_name_0_4047": "导出接口中的调用签名的返回类型具有或正在使用专用名称“{0}”。",
   "Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_name_0_from_private_mod_4044": "导出接口中的构造函数签名的返回类型具有或正在使用私有模块“{1}”中的名称“{0}”。",
@@ -1053,15 +1233,31 @@
   "Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_external_module__4050": "导出类中的公共静态方法的返回类型具有或正在使用外部模块“{1}”中的名称“{0}”,但不能为其命名。",
   "Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_private_module_1_4051": "导出类中的公共静态方法的返回类型具有或正在使用私有模块“{1}”中的名称“{0}”。",
   "Return_type_of_public_static_method_from_exported_class_has_or_is_using_private_name_0_4052": "导出类中的公共静态方法的返回类型具有或正在使用专用名称“{0}”。",
-  "Reusing_module_resolutions_originating_in_0_since_resolutions_are_unchanged_from_old_program_6184": "重用源自“{0}”的模块解析,因为解析在旧程序中未更改。",
-  "Reusing_resolution_of_module_0_to_file_1_from_old_program_6183": "对文件“{1}”重用旧程序中模块 “{0}”的解析。",
+  "Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_not_resolved_6395": "正在重用从位置“{2}”缓存中找到的“{1}”中模块“{0}”的解析,但其未解析。",
+  "Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_6393": "正在重用从位置“{2}”缓存中找到的“{1}”中模块“{0}”的解析,已成功将其解析为“{3}”。",
+  "Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_6394": "正在重用从位置“{2}”缓存中找到的“{1}”中模块“{0}”的解析,已成功将其解析为包 ID 为“{4}”的“{3}”。",
+  "Reusing_resolution_of_module_0_from_1_of_old_program_it_was_not_resolved_6389": "正在重用旧程序“{1}”中模块“{0}”的解析,但其未解析。",
+  "Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2_6183": "正在重用旧程序“{1}”中模块“{0}”的解析,已成功将其解析为“{2}”。",
+  "Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2_with_Package__6184": "正在重用旧程序“{1}”中模块“{0}”的解析,已成功将其解析为包 ID 为“{3}”的“{2}”。",
+  "Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_not_re_6398": "正在重用从位置“{2}”缓存中找到的“{1}”中类型引用指令“{0}”的解析,但其未解析。",
+  "Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_succes_6396": "正在重用从位置“{2}”缓存中找到的“{1}”中类型引用指令“{0}”的解析,已成功将其解析为“{3}”。",
+  "Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_succes_6397": "正在重用从位置“{2}”缓存中找到的“{1}”中类型引用指令“{0}”的解析,已成功将其解析为包 ID 为“{4}”的“{3}”。",
+  "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_not_resolved_6392": "正在重用旧程序“{1}”中类型引用指令“{0}”的解析,但其未解析。",
+  "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved__6390": "正在重用旧程序“{1}”中类型引用指令“{0}”的解析,已成功将其解析为“{2}”。",
+  "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved__6391": "正在重用旧程序“{1}”中类型引用指令“{0}”的解析,已成功将其解析为包 ID 为“{3}”的“{2}”。",
   "Rewrite_all_as_indexed_access_types_95034": "全部重写为索引访问类型",
   "Rewrite_as_the_indexed_access_type_0_90026": "重写为索引访问类型“{0}”",
   "Root_directory_cannot_be_determined_skipping_primary_search_paths_6122": "无法确定根目录,正在跳过主搜索路径。",
+  "Root_file_specified_for_compilation_1427": "为编译指定的根文件",
   "STRATEGY_6039": "策略",
+  "Save_tsbuildinfo_files_to_allow_for_incremental_compilation_of_projects_6642": "保存 .tsbuildinfo 文件以允许项目增量编译。",
   "Scoped_package_detected_looking_in_0_6182": "检测到范围包,请在“{0}”中查看",
+  "Selection_is_not_a_valid_statement_or_statements_95155": "所选内容不是有效的语句",
   "Selection_is_not_a_valid_type_node_95133": "所选内容不是有效的类型节点",
+  "Set_the_JavaScript_language_version_for_emitted_JavaScript_and_include_compatible_library_declaratio_6705": "为发出的 JavaScript 设置 JavaScript 语言版本并包含兼容的库声明。",
+  "Set_the_language_of_the_messaging_from_TypeScript_This_does_not_affect_emit_6654": "设置来自 TypeScript 的消息传递的语言。这不会影响发出。",
   "Set_the_module_option_in_your_configuration_file_to_0_95099": "将配置文件中的 \"module\" 选项设置为 \"{0}\"",
+  "Set_the_newline_character_for_emitting_files_6659": "设置发出文件的换行符。",
   "Set_the_target_option_in_your_configuration_file_to_0_95098": "将配置文件中的 \"target\" 选项设置为 \"{0}\"",
   "Setters_cannot_return_a_value_2408": "Setter 不能返回值。",
   "Show_all_compiler_options_6169": "显示所有编译器选项。",
@@ -1069,31 +1265,63 @@
   "Show_verbose_diagnostic_information_6150": "显示详细的诊断信息。",
   "Show_what_would_be_built_or_deleted_if_specified_with_clean_6367": "显示将生成(如果指定有 '--clean',则删除)什么",
   "Signature_0_must_be_a_type_predicate_1224": "签名“{0}”必须为类型谓词。",
+  "Skip_type_checking_all_d_ts_files_6693": "跳过对所有 .d.ts 文件的类型检查。",
+  "Skip_type_checking_d_ts_files_that_are_included_with_TypeScript_6692": "跳过 TypeScript 附带的类型检查 .d.ts 文件。",
   "Skip_type_checking_of_declaration_files_6012": "跳过声明文件的类型检查。",
   "Skipping_build_of_project_0_because_its_dependency_1_has_errors_6362": "正在跳过项目“{0}”的生成,因为其依赖项“{1}”有错误",
   "Skipping_build_of_project_0_because_its_dependency_1_was_not_built_6382": "即将跳过项目 \"{0}\" 的生成,因为未生成其依赖项 \"{1}\"",
-  "Source_Map_Options_6175": "源映射选项",
+  "Source_from_referenced_project_0_included_because_1_specified_1414": "由于指定了 \"{1}\",因此包含了引用的项目 \"{0}\" 的源",
+  "Source_from_referenced_project_0_included_because_module_is_specified_as_none_1415": "由于已将 \"--module\" 指定为 \"none\",因此包含了引用的项目 \"{0}\" 的源",
   "Source_has_0_element_s_but_target_allows_only_1_2619": "源具有 {0} 个元素,但目标仅允许 {1} 个。",
   "Source_has_0_element_s_but_target_requires_1_2618": "源具有 {0} 个元素,但目标需要 {1} 个。",
+  "Source_provides_no_match_for_required_element_at_position_0_in_target_2623": "源不提供目标中位置 {0} 处所需元素的匹配项。",
+  "Source_provides_no_match_for_variadic_element_at_position_0_in_target_2624": "源不提供目标中位置 {0} 处可变元素的匹配项。",
   "Specialized_overload_signature_is_not_assignable_to_any_non_specialized_signature_2382": "指定的重载签名不可分配给任何非专用化签名。",
   "Specifier_of_dynamic_import_cannot_be_spread_element_1325": "动态导入的说明符不能是扩散元素。",
-  "Specify_ECMAScript_target_version_Colon_ES3_default_ES5_ES2015_ES2016_ES2017_ES2018_ES2019_ES2020_or_6015": "指定 ECMAScript 目标版本: \"ES3\" (默认)、\"ES5\"、\"ES2015\"、\"ES2016\"、\"ES2017\"、\"ES2018\"、\"ES2019\"、\"ES2020\" 或 \"ESNEXT\"",
-  "Specify_JSX_code_generation_Colon_preserve_react_native_or_react_6080": "指定 JSX 代码生成: \"preserve\"、\"react-native\" 或 \"react\"。",
-  "Specify_emit_Slashchecking_behavior_for_imports_that_are_only_used_for_types_1368": "指定仅用于类型的导入的发出/检查行为",
+  "Specify_ECMAScript_target_version_6015": "指定 ECMAScript 目标版本。",
+  "Specify_JSX_code_generation_6080": "指定 JSX 代码生成。",
+  "Specify_a_file_that_bundles_all_outputs_into_one_JavaScript_file_If_declaration_is_true_also_designa_6679": "指定将所有输出捆绑到一个 JavaScript 文件中的文件。如果 “declaration” 为 true,还要指定一个捆绑所有 .d.ts 输出的文件。",
+  "Specify_a_list_of_glob_patterns_that_match_files_to_be_included_in_compilation_6641": "指定与要包含在编译中的文件匹配的 glob 模式列表。",
+  "Specify_a_list_of_language_service_plugins_to_include_6681": "指定要包括的语言服务插件列表。",
+  "Specify_a_set_of_bundled_library_declaration_files_that_describe_the_target_runtime_environment_6651": "指定一组描述目标运行时环境的捆绑库声明文件。",
+  "Specify_a_set_of_entries_that_re_map_imports_to_additional_lookup_locations_6680": "指定一组将导入重新映射到其他查找位置的条目。",
+  "Specify_an_array_of_objects_that_specify_paths_for_projects_Used_in_project_references_6687": "指定为项目指定路径的对象数组。在项目引用中使用。",
+  "Specify_an_output_folder_for_all_emitted_files_6678": "为所有已发出的文件指定输出文件夹。",
+  "Specify_emit_Slashchecking_behavior_for_imports_that_are_only_used_for_types_6718": "指定仅用于类型的导入的发出/检查行为",
   "Specify_file_to_store_incremental_compilation_information_6380": "指定用于存储增量编译信息的文件",
+  "Specify_how_TypeScript_looks_up_a_file_from_a_given_module_specifier_6658": "指定 TypeScript 如何从给定的模块说明符查找文件。",
+  "Specify_how_directories_are_watched_on_systems_that_lack_recursive_file_watching_functionality_6714": "指定在缺少递归文件监视功能的系统上监视目录的方式。",
+  "Specify_how_the_TypeScript_watch_mode_works_6715": "指定 TypeScript 监视模式的工作方式。",
   "Specify_library_files_to_be_included_in_the_compilation_6079": "指定要在编译中包括的库文件。",
-  "Specify_module_code_generation_Colon_none_commonjs_amd_system_umd_es2015_es2020_or_ESNext_6016": "指定模块代码生成: \"none\"、\"commonjs\"、\"amd\"、\"system\"、\"umd\"、\"es2015\"、\"es2020\" 或 \"ESNext\"。",
+  "Specify_module_code_generation_6016": "指定模块代码生成。",
   "Specify_module_resolution_strategy_Colon_node_Node_js_or_classic_TypeScript_pre_1_6_6069": "指定模块解析策略: \"node\" (Node.js)或 \"classic\" (TypeScript pre-1.6)。",
-  "Specify_strategy_for_creating_a_polling_watch_when_it_fails_to_create_using_file_system_events_Colon_6227": "指定在使用文件系统事件创建轮询监视失败时创建轮询监视的策略: \"FixedInterval\" (默认)、\"PriorityInterval\"、\"DynamicPriority\"。",
-  "Specify_strategy_for_watching_directory_on_platforms_that_don_t_support_recursive_watching_natively__6226": "指定在不支持本机递归监视的平台上监视目录的策略: \"UseFsEvents\" (默认)、\"FixedPollingInterval\"、\"DynamicPriorityPolling\"。",
-  "Specify_strategy_for_watching_file_Colon_FixedPollingInterval_default_PriorityPollingInterval_Dynami_6225": "指定监视文件的策略: \"FixedPollingInterval\" (默认)、\"PriorityPollingInterval\"、\"DynamicPriorityPolling\"、\"UseFsEvents\"、\"UseFsEventsOnParentDirectory\"。",
+  "Specify_module_specifier_used_to_import_the_JSX_factory_functions_when_using_jsx_Colon_react_jsx_Ast_6649": "指定使用 “jsx: react-jsx*” 时用于导入 JSX 中心函数的模块说明符。",
+  "Specify_multiple_folders_that_act_like_Slashnode_modules_Slash_types_6710": "指定多个行为类似 “./node_modules/@types” 的文件夹。",
+  "Specify_one_or_more_path_or_node_module_references_to_base_configuration_files_from_which_settings_a_6633": "指定对从中继承设置的基本配置文件的一个或多个路径或节点模块引用。",
+  "Specify_options_for_automatic_acquisition_of_declaration_files_6709": "指定用于自动获取声明文件的选项。",
+  "Specify_strategy_for_creating_a_polling_watch_when_it_fails_to_create_using_file_system_events_Colon_6227": "指定在使用文件系统事件创建轮询监视失败时创建轮询监视的策略: \"FixedInterval\" (默认)、\"PriorityInterval\"、\"DynamicPriority\"、\"FixedChunkSize\"。",
+  "Specify_strategy_for_watching_directory_on_platforms_that_don_t_support_recursive_watching_natively__6226": "指定在不支持本机递归监视的平台上监视目录的策略: \"UseFsEvents\" (默认)、\"FixedPollingInterval\"、\"DynamicPriorityPolling\"、\"FixedChunkSizePolling\"。",
+  "Specify_strategy_for_watching_file_Colon_FixedPollingInterval_default_PriorityPollingInterval_Dynami_6225": "指定监视文件的策略: \"FixedPollingInterval\" (默认)、\"PriorityPollingInterval\"、\"DynamicPriorityPolling\"、\"FixedChunkSizePolling\"、\"UseFsEvents\"、\"UseFsEventsOnParentDirectory\"。",
+  "Specify_the_JSX_Fragment_reference_used_for_fragments_when_targeting_React_JSX_emit_e_g_React_Fragme_6648": "指定在将 React JSX 发出设定为目标时用于片段的 JSX 片段引用,例如 “React.Fragment” 或 “Fragment”。",
   "Specify_the_JSX_factory_function_to_use_when_targeting_react_JSX_emit_e_g_React_createElement_or_h_6146": "指定在设定 \"react\" JSX 发出目标时要使用的 JSX 工厂函数,例如 \"react.createElement\" 或 \"h\"。",
+  "Specify_the_JSX_factory_function_used_when_targeting_React_JSX_emit_e_g_React_createElement_or_h_6647": "指定在将 React JSX 发出设定为目标时要使用的 JSX 中心函数,例如 “react.createElement” 或 “h”",
   "Specify_the_JSX_fragment_factory_function_to_use_when_targeting_react_JSX_emit_with_jsxFactory_compi_18034": "当指定使用 \"jsxFactory\" 编译器选项面向 \"react\" JSX 发出时,指定要使用的 JSX 片段工厂函数,例如 \"Fragment\"。",
+  "Specify_the_base_directory_to_resolve_non_relative_module_names_6607": "指定基目录以解析非相关模块名称。",
   "Specify_the_end_of_line_sequence_to_be_used_when_emitting_files_Colon_CRLF_dos_or_LF_unix_6060": "指定发出文件时要使用的行序列结尾: \"CRLF\" (dos)或 \"LF\" (unix)。",
+  "Specify_the_folder_for_tsbuildinfo_incremental_compilation_files_6707": "指定 .tsbuildinfo 增量编译文件的文件夹。",
   "Specify_the_location_where_debugger_should_locate_TypeScript_files_instead_of_source_locations_6004": "指定调试调试程序应将 TypeScript 文件放置到的位置而不是源位置。",
-  "Specify_the_location_where_debugger_should_locate_map_files_instead_of_generated_locations_6003": "指定调试程序应将映射文件放置到的位置而不是生成的位置。",
-  "Specify_the_module_specifier_to_be_used_to_import_the_jsx_and_jsxs_factory_functions_from_eg_react_6238": "指定要用于从 react 等内容中导入 \"jsx\" 和 \"jsxs\" 工厂函数的模块说明符",
+  "Specify_the_location_where_debugger_should_locate_map_files_instead_of_generated_locations_6655": "指定调试程序应将映射文件放置到的位置而不是生成的位置。",
+  "Specify_the_maximum_folder_depth_used_for_checking_JavaScript_files_from_node_modules_Only_applicabl_6656": "指定用于从 “node_modules” 检查 JavaScript 文件的最大文件夹深度。仅适用于 “allowJs”。",
+  "Specify_the_module_specifier_to_be_used_to_import_the_jsx_and_jsxs_factory_functions_from_eg_react_6238": "指定要用于从 eg,react 中导入 “jsx” 和 “jsxs” 工厂函数的模块说明符",
+  "Specify_the_object_invoked_for_createElement_This_only_applies_when_targeting_react_JSX_emit_6686": "指定为 “createElement” 调用的对象。这仅在将 “react” JSX 发出设定为目标时使用。",
+  "Specify_the_output_directory_for_generated_declaration_files_6613": "指定已生成声明文件的输出目录。",
   "Specify_the_root_directory_of_input_files_Use_to_control_the_output_directory_structure_with_outDir_6058": "指定输入文件的根目录。与 --outDir 一起用于控制输出目录结构。",
+  "Specify_the_root_folder_within_your_source_files_6690": "指定源文件中的根文件夹。",
+  "Specify_the_root_path_for_debuggers_to_find_the_reference_source_code_6695": "指定调试程序的根路径以查找引用源代码。",
+  "Specify_type_package_names_to_be_included_without_being_referenced_in_a_source_file_6711": "指定要包含的类型包名称,而无需在源文件中引用。",
+  "Specify_what_JSX_code_is_generated_6646": "指定生成的 JSX 代码。",
+  "Specify_what_approach_the_watcher_should_use_if_the_system_runs_out_of_native_file_watchers_6634": "指定当系统耗尽本机文件观察程序时,观察程序应使用的方法。",
+  "Specify_what_module_code_is_generated_6657": "指定生成的模块代码。",
   "Split_all_invalid_type_only_imports_1367": "拆分所有无效的仅类型导入",
   "Split_into_two_separate_import_declarations_1366": "拆分为两个单独的导入声明",
   "Spread_operator_in_new_expressions_is_only_available_when_targeting_ECMAScript_5_and_higher_2472": "仅当面向 ECMAScript 5 和更高版本时,\"new\" 表达式中的展开运算符才可用。",
@@ -1101,9 +1329,9 @@
   "Starting_compilation_in_watch_mode_6031": "在监视模式下开始编译...",
   "Statement_expected_1129": "应为语句。",
   "Statements_are_not_allowed_in_ambient_contexts_1036": "不允许在环境上下文中使用语句。",
+  "Static_fields_with_private_names_can_t_have_initializers_when_the_useDefineForClassFields_flag_is_no_2805": "若未使用 \"esnext\" 的 \"--target\" 指定 \"--useDefineForClassFields\" 标志,则具有专用名称的静态字段不能有初始值设定项。请考虑添加 \"--useDefineForClassFields\" 标志。",
   "Static_members_cannot_reference_class_type_parameters_2302": "静态成员不能引用类类型参数。",
   "Static_property_0_conflicts_with_built_in_property_Function_0_of_constructor_function_1_2699": "静态属性“{0}”与构造函数“{1}”的内置属性函数“{0}”冲突。",
-  "Strict_Type_Checking_Options_6173": "严格类型检查选项",
   "String_literal_expected_1141": "应为字符串文本。",
   "String_literal_with_double_quotes_expected_1327": "应为带双引号的字符串文字。",
   "Stylize_errors_and_messages_using_color_and_context_experimental_6073": "使用颜色和上下文风格化错误和消息(实验)。",
@@ -1117,9 +1345,10 @@
   "Super_calls_are_not_permitted_outside_constructors_or_in_nested_functions_inside_constructors_2337": "不允许在构造函数外部或在构造函数内的嵌套函数中进行 Super 调用。",
   "Suppress_excess_property_checks_for_object_literals_6072": "取消对象文字的多余属性检查。",
   "Suppress_noImplicitAny_errors_for_indexing_objects_lacking_index_signatures_6055": "抑制缺少索引签名的索引对象的 noImplicitAny 错误。",
+  "Suppress_noImplicitAny_errors_when_indexing_objects_that_lack_index_signatures_6703": "在对缺少索引签名的对象编制索引时,禁止显示 “noImplicitAny” 错误。",
   "Switch_each_misused_0_to_1_95138": "将每个误用的“{0}”切换到“{1}”",
   "Symbol_reference_does_not_refer_to_the_global_Symbol_constructor_object_2470": "\"Symbol\" 引用不是指全局符号构造函数对象。",
-  "Synchronously_call_callbacks_and_update_the_state_of_directory_watchers_on_platforms_that_don_t_supp_6228": "在不支持本机递归监视的平台上同步调用回调并更新目录观察程序的状态。",
+  "Synchronously_call_callbacks_and_update_the_state_of_directory_watchers_on_platforms_that_don_t_supp_6704": "在不支持本机递归监视的平台上同步调用回调并更新目录观察程序的状态。",
   "Syntax_Colon_0_6023": "语法: {0}",
   "Tag_0_expects_at_least_1_arguments_but_the_JSX_factory_2_provides_at_most_3_6229": "标记“{0}”至少需要“{1}”个参数,但 JSX 工厂“{2}”最多可提供“{3}”个。",
   "Tagged_template_expressions_are_not_permitted_in_an_optional_chain_1358": "可选链中不允许使用带有标记的模板表达式。",
@@ -1134,17 +1363,19 @@
   "The_arguments_object_cannot_be_referenced_in_an_arrow_function_in_ES3_and_ES5_Consider_using_a_stand_2496": "ES3 和 ES5 中的箭头函数不能引用 \"arguments\" 对象。请考虑使用标准函数表达式。",
   "The_arguments_object_cannot_be_referenced_in_an_async_function_or_method_in_ES3_and_ES5_Consider_usi_2522": "ES3 和 ES5 中的异步函数或方法不能引用“参数”对象。请考虑使用标准函数或方法。",
   "The_body_of_an_if_statement_cannot_be_the_empty_statement_1313": "\"if\" 语句的正文不能为空语句。",
-  "The_bundledPackageName_option_must_be_provided_when_using_outFile_and_node_module_resolution_with_de_1391": "在将 outFile 和节点模块解析与声明发出一起使用时,必须提供 \"bundledPackageName\" 选项。",
+  "The_bundledPackageName_option_must_be_provided_when_using_outFile_and_node_module_resolution_with_de_1391": "当使用带有声明发出的 outFile 和节点模块解析时,必须提供 “bundledPackageName” 选项。",
   "The_call_would_have_succeeded_against_this_implementation_but_implementation_signatures_of_overloads_2793": "针对此实现的调用已成功,但重载的实现签名在外部不可见。",
   "The_character_set_of_the_input_files_6163": "输入文件的字符集。",
   "The_containing_arrow_function_captures_the_global_value_of_this_7041": "包含箭头函数捕获 \"this\" 的全局值。",
   "The_containing_function_or_module_body_is_too_large_for_control_flow_analysis_2563": "包含函数或模块体对于控制流分析而言太大。",
   "The_current_host_does_not_support_the_0_option_5001": "当前主机不支持“{0}”选项。",
   "The_declaration_of_0_that_you_probably_intended_to_use_is_defined_here_18018": "你可能打算使用的 \"{0}\" 的声明在此处定义",
+  "The_declaration_was_marked_as_deprecated_here_2798": "该声明曾在此处标记为已弃用。",
   "The_expected_type_comes_from_property_0_which_is_declared_here_on_type_1_6500": "所需类型来自属性 \"{0}\",在此处的 \"{1}\" 类型上声明该属性",
   "The_expected_type_comes_from_the_return_type_of_this_signature_6502": "所需类型来自此签名的返回类型。",
   "The_expected_type_comes_from_this_index_signature_6501": "所需类型来自此索引签名。",
   "The_expression_of_an_export_assignment_must_be_an_identifier_or_qualified_name_in_an_ambient_context_2714": "导出分配的表达式必须是环境上下文中的标识符或限定的名称。",
+  "The_file_is_in_the_program_because_Colon_1430": "程序包含该文件是因为:",
   "The_files_list_in_config_file_0_is_empty_18002": "配置文件“{0}”中的 \"files\" 列表为空。",
   "The_first_export_default_is_here_2752": "在此处显示第一个导出默认值。",
   "The_first_parameter_of_the_then_method_of_a_promise_must_be_a_callback_1060": "承诺的 \"then\" 方法的第一个参数必须是回调。",
@@ -1168,6 +1399,7 @@
   "The_left_hand_side_of_a_for_in_statement_must_be_of_type_string_or_any_2405": "\"for...in\" 语句的左侧必须是 \"string\" 或 \"any\" 类型。",
   "The_left_hand_side_of_a_for_of_statement_cannot_use_a_type_annotation_2483": "\"for...of\" 语句的左侧不能使用类型批注。",
   "The_left_hand_side_of_a_for_of_statement_may_not_be_an_optional_property_access_2781": "\"for…of\" 语句的左侧不能是可选属性访问。",
+  "The_left_hand_side_of_a_for_of_statement_may_not_be_async_1106": "“for...of” 语句的左侧可能不是 “async”。",
   "The_left_hand_side_of_a_for_of_statement_must_be_a_variable_or_a_property_access_2487": "\"for...of\" 语句的左侧必须是变量或属性访问。",
   "The_left_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type_2362": "算术运算左侧必须是 \"any\"、\"number\"、\"bigint\" 或枚举类型。",
   "The_left_hand_side_of_an_assignment_expression_may_not_be_an_optional_property_access_2779": "赋值表达式的左侧不能是可选属性访问。",
@@ -1185,15 +1417,18 @@
   "The_parser_expected_to_find_a_to_match_the_token_here_1007": "分析器预期在这里找到与 \"{\" 标记匹配的 \"}\"。",
   "The_property_0_cannot_be_accessed_on_type_1_within_this_class_because_it_is_shadowed_by_another_priv_18014": "无法在此类中的类型 \"{1}\" 上访问属性 \"{0}\",因为具有相同拼写的另一个专用标识符隐藏了它。",
   "The_return_type_of_a_JSX_element_constructor_must_return_an_object_type_2601": "JSX 元素构造函数的返回类型必须返回对象类型。",
+  "The_return_type_of_a_get_accessor_must_be_assignable_to_its_set_accessor_type_2380": "\"Get\" 访问器的返回类型必须可分配给其 \"Set\" 访问器类型",
   "The_return_type_of_a_parameter_decorator_function_must_be_either_void_or_any_1237": "参数修饰器函数的返回类型必须为 \"void\" 或 \"any\"。",
   "The_return_type_of_a_property_decorator_function_must_be_either_void_or_any_1236": "属性修饰器函数的返回类型必须为 \"void\" 或 \"any\"。",
   "The_return_type_of_an_async_function_must_either_be_a_valid_promise_or_must_not_contain_a_callable_t_1058": "异步函数的返回类型必须是有效承诺,或不得包含可调用的 \"then\" 成员。 ",
   "The_return_type_of_an_async_function_or_method_must_be_the_global_Promise_T_type_Did_you_mean_to_wri_1064": "异步函数或方法的返回类型必须为全局 Promise<T> 类型。你是否是指写入 \"Promise<{0}>\"?",
   "The_right_hand_side_of_a_for_in_statement_must_be_of_type_any_an_object_type_or_a_type_parameter_but_2407": "\"for...in\" 语句右侧必须是 \"any\" 类型、对象类型或类型参数,但此处的类型为“{0}”。",
   "The_right_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type_2363": "算术运算右侧必须是 \"any\"、\"number\"、\"bigint\" 或枚举类型。",
-  "The_right_hand_side_of_an_in_expression_must_be_of_type_any_an_object_type_or_a_type_parameter_2361": "\"in\" 表达式的右侧必须是 \"any\" 类型、对象类型或类型参数。",
+  "The_right_hand_side_of_an_in_expression_must_not_be_a_primitive_2361": "\"in\" 表达式的右侧不得是基元。",
   "The_right_hand_side_of_an_instanceof_expression_must_be_of_type_any_or_of_a_type_assignable_to_the_F_2359": "\"instanceof\" 表达式的右侧必须属于类型 \"any\",或属于可分配给 \"Function\" 接口类型的类型。",
+  "The_root_value_of_a_0_file_must_be_an_object_5092": "“{0}”文件的根值必须是一个对象。",
   "The_shadowing_declaration_of_0_is_defined_here_18017": "在此处定义了“{0}”的阴影声明",
+  "The_signature_0_of_1_is_deprecated_6387": "“{1}”的签名“{0}”已弃用。",
   "The_specified_path_does_not_exist_Colon_0_5058": "指定的路径不存在:“{0}”。",
   "The_tag_was_first_specified_here_8034": "第一次在此处指定了标记。",
   "The_target_of_an_assignment_must_be_a_variable_or_a_property_access_2541": "赋值的目标必须是变量或属性访问。",
@@ -1204,6 +1439,7 @@
   "The_type_0_is_readonly_and_cannot_be_assigned_to_the_mutable_type_1_4104": "类型 \"{0}\" 为 \"readonly\",不能分配给可变类型 \"{1}\"。",
   "The_type_argument_for_type_parameter_0_cannot_be_inferred_from_the_usage_Consider_specifying_the_typ_2453": "无法从用法推断类型形参“{0}”的类型实参。可以考虑显式指定类型实参。",
   "The_type_of_a_function_declaration_must_match_the_function_s_signature_8030": "函数声明的类型必须与函数的签名匹配。",
+  "The_type_of_this_node_cannot_be_serialized_because_its_property_0_cannot_be_serialized_4118": "无法序列化此节点的类型,因为无法序列化其属性“{0}”。",
   "The_type_returned_by_the_0_method_of_an_async_iterator_must_be_a_promise_for_a_type_with_a_value_pro_2547": "异步迭代器的 \"{0}()\" 方法返回的类型必须是具有 \"value\" 属性的类型的承诺。",
   "The_type_returned_by_the_0_method_of_an_iterator_must_have_a_value_property_2490": "迭代器的 \"{0}()\" 方法返回的类型必须具有 \"value\" 属性。",
   "The_types_of_0_are_incompatible_between_these_types_2200": "在这些类型中,\"{0}\" 的类型不兼容。",
@@ -1214,7 +1450,8 @@
   "This_JSX_tag_s_0_prop_expects_a_single_child_of_type_1_but_multiple_children_were_provided_2746": "此 JSX 标记的 \"{0}\" 属性需要 \"{1}\" 类型的子级,但提供了多个子级。",
   "This_JSX_tag_s_0_prop_expects_type_1_which_requires_multiple_children_but_only_a_single_child_was_pr_2745": "此 JSX 标记的 \"{0}\" 属性需要类型 \"{1}\",该类型需要多个子级,但仅提供了一个子级。",
   "This_condition_will_always_return_0_since_the_types_1_and_2_have_no_overlap_2367": "此条件将始终返回 \"{0}\",因为类型 \"{1}\" 和 \"{2}\" 没有重叠。",
-  "This_condition_will_always_return_true_since_the_function_is_always_defined_Did_you_mean_to_call_it__2774": "此条件将始终返回 true,因为始终定义了函数。你是想改为调用它吗?",
+  "This_condition_will_always_return_true_since_this_0_is_always_defined_2801": "此条件将始终返回 true,因为此“{0}”已始终定义。",
+  "This_condition_will_always_return_true_since_this_function_is_always_defined_Did_you_mean_to_call_it_2774": "此条件将始终返回 true,因为始终定义了函数。你是想改为调用它吗?",
   "This_constructor_function_may_be_converted_to_a_class_declaration_80002": "此构造函数可能会转换为类声明。",
   "This_expression_is_not_callable_2349": "此表达式不可调用。",
   "This_expression_is_not_callable_because_it_is_a_get_accessor_Did_you_mean_to_use_it_without_6234": "此表达式是 \"get\" 访问器,因此不可调用。你想在不使用 \"()\" 的情况下使用它吗?",
@@ -1223,15 +1460,23 @@
   "This_import_is_never_used_as_a_value_and_must_use_import_type_because_importsNotUsedAsValues_is_set__1371": "此导入从不用作值,必须使用 \"import type\" ,因为 \"importsNotUsedAsValues\" 设置为 \"error\"。",
   "This_is_the_declaration_being_augmented_Consider_moving_the_augmenting_declaration_into_the_same_fil_6233": "这是正在扩充的声明。请考虑将扩充声明移到同一个文件中。",
   "This_may_be_converted_to_an_async_function_80006": "可将此转换为异步函数。",
+  "This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0_4113": "此成员不能有 \"override\" 修饰符,因为它未在基类 \"{0}\" 中声明。",
+  "This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0_Did_you__4117": "此成员不能有 “override” 修饰符,因为它未在基类“{0}”中声明。你是否指的是“{1}”?",
+  "This_member_cannot_have_an_override_modifier_because_its_containing_class_0_does_not_extend_another__4112": "此成员不能有 \"override\" 修饰符,因为它的包含类 \"{0}\" 不扩展其他类。",
+  "This_member_must_have_an_override_modifier_because_it_overrides_a_member_in_the_base_class_0_4114": "此成员必须有 \"override\" 修饰符,因为它替代基类 \"{0}\" 中的一个成员。",
+  "This_member_must_have_an_override_modifier_because_it_overrides_an_abstract_method_that_is_declared__4116": "此成员必须有 \"override\" 修饰符,因为它替代基类 \"{0}\" 中声明的一个抽象方法。",
   "This_module_can_only_be_referenced_with_ECMAScript_imports_Slashexports_by_turning_on_the_0_flag_and_2497": "只能通过启用 \"{0}\" 标志并引用其默认导出,使用 ECMAScript 导入/导出来引用此模块。",
   "This_module_is_declared_with_using_export_and_can_only_be_used_with_a_default_import_when_using_the__2594": "此模块是使用 \"export =\" 声明的,只能在使用 \"{0}\" 标志时进行默认导入。",
   "This_overload_signature_is_not_compatible_with_its_implementation_signature_2394": "此重载签名与其实现签名不兼容。",
   "This_parameter_is_not_allowed_with_use_strict_directive_1346": "此参数不允许与 \"use strict\" 指令一起使用。",
+  "This_parameter_property_must_have_an_override_modifier_because_it_overrides_a_member_in_base_class_0_4115": "此参数属性必须具有 “override” 修饰符,因为它会替代基类“{0}”中的成员。",
   "This_spread_always_overwrites_this_property_2785": "此扩张将始终覆盖此属性。",
   "This_syntax_requires_an_imported_helper_but_module_0_cannot_be_found_2354": "此语法需要一个导入的帮助程序,但找不到模块“{0}”。",
   "This_syntax_requires_an_imported_helper_named_1_which_does_not_exist_in_0_Consider_upgrading_your_ve_2343": "此语法需要名为 \"{1}\" 的导入帮助器,\"{0}\" 中不存在该帮助器。请考虑升级 \"{0}\" 的版本。",
+  "This_syntax_requires_an_imported_helper_named_1_with_2_parameters_which_is_not_compatible_with_the_o_2807": "此语法需要一个名为 \"{1}\" 且包含 {2} 参数的导入帮助程序,该帮助程序与 \"{0}\" 中的相应帮助程序不兼容。请考虑升级 \"{0}\" 的版本。",
   "Top_level_await_expressions_are_only_allowed_when_the_module_option_is_set_to_esnext_or_system_and_t_1378": "仅当 \"module\" 选项设置为 \"esnext\" 或 \"system\",并且 \"target\" 选项设置为 \"es2017\" 或更高版本时,才允许使用顶级 \"await\" 表达式。",
   "Top_level_declarations_in_d_ts_files_must_start_with_either_a_declare_or_export_modifier_1046": ".d.ts 文件中的顶级声明必须以 \"declare\" 或 \"export\" 修饰符开头。",
+  "Top_level_for_await_loops_are_only_allowed_when_the_module_option_is_set_to_esnext_or_system_and_the_1432": "仅当“模块”选项设置为“esnext”或“system”,并且“目标”选项设置为“es2017”或更高时,才允许使用顶层“for await”循环。",
   "Trailing_comma_not_allowed_1009": "不允许使用尾随逗号。",
   "Transpile_each_file_as_a_separate_module_similar_to_ts_transpileModule_6153": "将每个文件转换为单独的模块(类似 \"ts.transpileModule\")。",
   "Try_npm_i_save_dev_types_Slash_1_if_it_exists_or_add_a_new_declaration_d_ts_file_containing_declare__7035": "尝试使用 `npm i --save-dev @types/{1}` (如果存在),或者添加一个包含 `declare module '{0}';` 的新声明(.d.ts)文件",
@@ -1240,6 +1485,7 @@
   "Tuple_members_must_all_have_names_or_all_not_have_names_5084": "元组成员必须全部具有或全部不具有名称。",
   "Tuple_type_0_of_length_1_has_no_element_at_index_2_2493": "长度为 \"{1}\" 的元组类型 \"{0}\" 在索引 \"{2}\" 处没有元素。",
   "Tuple_type_arguments_circularly_reference_themselves_4110": "元组类型参数循环引用自身。",
+  "Type_0_can_only_be_iterated_through_when_using_the_downlevelIteration_flag_or_with_a_target_of_es201_2802": "只有在使用 \"--downlevelIteration\" 标志或 \"--target\" 为 \"es2015\" 或更高版本时,才能循环访问类型“{0}”。",
   "Type_0_cannot_be_used_as_an_index_type_2538": "类型“{0}”不能作为索引类型使用。",
   "Type_0_cannot_be_used_to_index_type_1_2536": "类型“{0}”无法用于索引类型“{1}”。",
   "Type_0_does_not_satisfy_the_constraint_1_2344": "类型“{0}”不满足约束“{1}”。",
@@ -1264,7 +1510,9 @@
   "Type_0_must_have_a_Symbol_iterator_method_that_returns_an_iterator_2488": "类型“{0}”必须具有返回迭代器的 \"[Symbol.iterator]()\" 方法。",
   "Type_0_provides_no_match_for_the_signature_1_2658": "类型“{0}”提供的内容与签名“{1}”不匹配。",
   "Type_0_recursively_references_itself_as_a_base_type_2310": "类型“{0}”以递归方式将自身引用为基类。",
+  "Type_Checking_6248": "类型检查",
   "Type_alias_0_circularly_references_itself_2456": "类型别名“{0}”循环引用自身。",
+  "Type_alias_must_be_given_a_name_1439": "必须为类型别名指定名称。",
   "Type_alias_name_cannot_be_0_2457": "类型别名不能为“{0}”。",
   "Type_aliases_can_only_be_used_in_TypeScript_files_8008": "类型别名只能在 TypeScript 文件中使用。",
   "Type_annotation_cannot_appear_on_a_constructor_declaration_1093": "类型批注不能出现在构造函数声明中。",
@@ -1276,10 +1524,15 @@
   "Type_arguments_cannot_be_used_here_1342": "无法在此处使用类型参数。",
   "Type_arguments_for_0_circularly_reference_themselves_4109": "\"{0}\" 的类型参数循环引用自身。",
   "Type_assertion_expressions_can_only_be_used_in_TypeScript_files_8016": "类型断言表达式只能在 TypeScript 文件中使用。",
+  "Type_at_position_0_in_source_is_not_compatible_with_type_at_position_1_in_target_2626": "源中位置 {0} 的类型与目标中位置 {1} 的类型不兼容。",
+  "Type_at_positions_0_through_1_in_source_is_not_compatible_with_type_at_position_2_in_target_2627": "源中位置 {0} 到 {1} 的类型与目标中位置 {2} 的类型不兼容。",
+  "Type_catch_clause_variables_as_unknown_instead_of_any_6803": "将 catch 子句变量键入为 “unknown” 而不是 “any”。",
   "Type_declaration_files_to_be_included_in_compilation_6124": "要包含在编译中类型声明文件。",
   "Type_expected_1110": "应为类型。",
   "Type_instantiation_is_excessively_deep_and_possibly_infinite_2589": "类型实例化过深,且可能无限。",
   "Type_is_referenced_directly_or_indirectly_in_the_fulfillment_callback_of_its_own_then_method_1062": "类型在其自身的 \"then\" 方法的 fulfillment 回调中被直接或间接引用。",
+  "Type_library_referenced_via_0_from_file_1_1402": "通过 \"{0}\" 从文件 \"{1}\" 引用了库类型",
+  "Type_library_referenced_via_0_from_file_1_with_packageId_2_1403": "通过 \"{0}\" 从具有 packageId \"{2}\" 的文件 \"{1}\" 引用了库类型",
   "Type_of_await_operand_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member_1320": "\"await\" 操作数的类型必须是有效承诺,或不得包含可调用的 \"then\" 成员。",
   "Type_of_computed_property_s_value_is_0_which_is_not_assignable_to_type_1_2418": "计算属性类型的值为 \"{0}\",该值不能赋给 \"{1}\" 类型。",
   "Type_of_iterated_elements_of_a_yield_Asterisk_operand_must_either_be_a_valid_promise_or_must_not_con_1322": "\"yield*\" 操作数的迭代元素的类型必须是有效承诺,或不得包含可调用的 \"then\" 成员。",
@@ -1305,6 +1558,7 @@
   "Type_parameter_name_cannot_be_0_2368": "类型参数名称不能为“{0}”。",
   "Type_parameters_cannot_appear_on_a_constructor_declaration_1092": "类型参数不能出现在构造函数声明中。",
   "Type_predicate_0_is_not_assignable_to_1_1226": "类型谓词“{0}”不可分配给“{1}”。",
+  "Type_produces_a_tuple_type_that_is_too_large_to_represent_2799": "类型生成的元组类型太大,无法表示。",
   "Type_reference_directive_0_was_not_resolved_6120": "======== 未解析类型引用指令“{0}”。========",
   "Type_reference_directive_0_was_successfully_resolved_to_1_primary_Colon_2_6119": "======== 类型引用指令“{0}”已成功解析为“{1}”,主要: {2}。========",
   "Type_reference_directive_0_was_successfully_resolved_to_1_with_Package_ID_2_primary_Colon_3_6219": "======== 类型引用指令 \"{0}\" 已成功解析为 \"{1}\" ,包 ID 为 \"{2}\",主要: {3}。========",
@@ -1318,6 +1572,7 @@
   "Unable_to_resolve_signature_of_parameter_decorator_when_called_as_an_expression_1239": "作为表达式调用时,无法解析参数修饰器的签名。",
   "Unable_to_resolve_signature_of_property_decorator_when_called_as_an_expression_1240": "作为表达式调用时,无法解析属性修饰器的签名。",
   "Unexpected_end_of_text_1126": "文本意外结束。",
+  "Unexpected_keyword_or_identifier_1434": "意外的关键字或标识符。",
   "Unexpected_token_1012": "意外的标记。",
   "Unexpected_token_A_constructor_method_accessor_or_property_was_expected_1068": "意外的标记。应为构造函数、方法、访问器或属性。",
   "Unexpected_token_A_type_parameter_name_was_expected_without_curly_braces_1069": "意外的标记。类型参数名不应包含大括号。",
@@ -1328,6 +1583,7 @@
   "Unknown_build_option_0_Did_you_mean_1_5077": "未知的生成选项 \"{0}\"。你是想使用 \"{1}\" 吗?",
   "Unknown_compiler_option_0_5023": "未知的编译器选项“{0}”。",
   "Unknown_compiler_option_0_Did_you_mean_1_5025": "未知的编译器选项 \"{0}\"。你是想使用 \"{1}\" 吗?",
+  "Unknown_keyword_or_identifier_Did_you_mean_0_1435": "未知的关键字或标识符。你是不是指“{0}”?",
   "Unknown_option_excludes_Did_you_mean_exclude_6114": "未知的 \"excludes\" 选项。你的意思是 \"exclude\"?",
   "Unknown_type_acquisition_option_0_17010": "未知类型获取选项“{0}”。",
   "Unknown_type_acquisition_option_0_Did_you_mean_1_17018": "未知的类型获取选项 \"{0}\"。你是想使用 \"{1}\" 吗?",
@@ -1350,6 +1606,7 @@
   "Use_element_access_for_all_undeclared_properties_95146": "对所有未声明的属性使用元素访问。",
   "Use_synthetic_default_member_95016": "使用综合的“默认”成员。",
   "Using_a_string_in_a_for_of_statement_is_only_supported_in_ECMAScript_5_and_higher_2494": "仅 ECMAScript 5 和更高版本支持在 \"for...of\" 语句中使用字符串。",
+  "Using_build_b_will_make_tsc_behave_more_like_a_build_orchestrator_than_a_compiler_This_is_used_to_tr_6915": "使用 --build,-b 将使 tsc 的行为更像生成业务流程协调程序,而非编译器。这可用于触发生成复合项目,你可以在 {0} 详细了解这些项目",
   "Using_compiler_options_of_project_reference_redirect_0_6215": "使用项目引用重定向“{0}”的编译器选项。",
   "VERSION_6036": "版本",
   "Value_of_type_0_has_no_properties_in_common_with_type_1_Did_you_mean_to_call_it_2560": "类型“{0}”的值没有与类型“{1}”相同的属性。你是想调用它吗?",
@@ -1361,10 +1618,16 @@
   "Variable_0_is_used_before_being_assigned_2454": "在赋值前使用了变量“{0}”。",
   "Variable_declaration_expected_1134": "应为变量声明。",
   "Variable_declaration_list_cannot_be_empty_1123": "变量声明列表不能为空。",
+  "Variable_declaration_not_allowed_at_this_location_1440": "此位置不允许使用变量声明。",
+  "Variadic_element_at_position_0_in_source_does_not_match_element_at_position_1_in_target_2625": "源中位置 {0} 的可变元素与目标中位置 {1} 的元素不匹配。",
   "Version_0_6029": "版本 {0}",
   "Visit_https_Colon_Slash_Slashaka_ms_Slashtsconfig_json_to_read_more_about_this_file_95110": "请访问 https://aka.ms/tsconfig.json,了解有关此文件的详细信息",
+  "WATCH_OPTIONS_6918": "监视选项",
+  "Watch_and_Build_Modes_6250": "观看和生成模式",
   "Watch_input_files_6005": "监视输入文件。",
   "Watch_option_0_requires_a_value_of_type_1_5080": "观察选项 \"{0}\" 需要 {1} 类型的值。",
+  "When_assigning_functions_check_to_ensure_parameters_and_the_return_values_are_subtype_compatible_6698": "分配函数时,请检查以确保参数和返回值与子类型兼容。",
+  "When_type_checking_take_into_account_null_and_undefined_6699": "进行类型检查时,请考虑 “null” 和 “undefined”。",
   "Whether_to_keep_outdated_console_output_in_watch_mode_instead_of_clearing_the_screen_6191": "是否在监视模式下保留过时的控制台输出,而不是清除屏幕。",
   "Wrap_all_invalid_characters_in_an_expression_container_95109": "包装表达式容器中的所有无效字符",
   "Wrap_all_object_literal_with_parentheses_95116": "用括号将所有对象文字括起来",
@@ -1372,10 +1635,12 @@
   "Wrap_in_JSX_fragment_95120": "包装在 JSX 片段中",
   "Wrap_invalid_character_in_an_expression_container_95108": "包装表达式容器中的无效字符",
   "Wrap_the_following_body_with_parentheses_which_should_be_an_object_literal_95113": "用括号将以下应为对象文字的正文括起来",
+  "You_can_learn_about_all_of_the_compiler_options_at_0_6913": "你可以在 {0} 了解编译器选项的所有内容",
   "You_cannot_rename_a_module_via_a_global_import_8031": "不能通过全局导入对模块进行重命名。",
   "You_cannot_rename_elements_that_are_defined_in_the_standard_TypeScript_library_8001": "不能重命名标准 TypeScript 库中定义的元素。",
   "You_cannot_rename_this_element_8000": "无法重命名此元素。",
   "_0_accepts_too_few_arguments_to_be_used_as_a_decorator_here_Did_you_mean_to_call_it_first_and_write__1329": "“{0}”收到的参数过少,无法在此处充当修饰器。你是要先调用它,然后再写入 \"@{0}()\" 吗?",
+  "_0_and_1_index_signatures_are_incompatible_2330": "“{0}”和“{1}”索引签名不兼容。",
   "_0_and_1_operations_cannot_be_mixed_without_parentheses_5076": "不能在不使用括号的情况下混用 \"{0}\" 和 \"{1}\" 操作。",
   "_0_are_specified_twice_The_attribute_named_0_will_be_overwritten_2710": "“{0}”被指定了两次。将覆盖名为“{0}”的特性。",
   "_0_can_only_be_imported_by_turning_on_the_esModuleInterop_flag_and_using_a_default_import_2596": "只能通过启用 \"esModuleInterop\" 标志并使用默认导入来导入“{0}”。",
@@ -1396,6 +1661,8 @@
   "_0_implicitly_has_an_1_return_type_but_a_better_type_may_be_inferred_from_usage_7050": "\"{0}\" 隐式具有 \"{1}\" 返回类型,但可以从用法中推断出更好的类型。",
   "_0_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_reference_7023": "由于“{0}'”不具有返回类型批注并且在它的一个返回表达式中得到直接或间接引用,因此它隐式具有返回类型 \"any\"。",
   "_0_implicitly_has_type_any_because_it_does_not_have_a_type_annotation_and_is_referenced_directly_or__7022": "“{0}”隐式具有类型 \"any\",因为它不具有类型批注,且在其自身的初始化表达式中得到直接或间接引用。",
+  "_0_index_signatures_are_incompatible_2634": "“{0}”索引签名不兼容。",
+  "_0_index_type_1_is_not_assignable_to_2_index_type_3_2413": "“{0}”索引类型“{1}”不能分配给“{2}”索引类型“{3}”。",
   "_0_is_a_primitive_but_1_is_a_wrapper_object_Prefer_using_0_when_possible_2692": "“{0}”是基元,但“{1}”是包装器对象。如可能首选使用“{0}”。",
   "_0_is_assignable_to_the_constraint_of_type_1_but_1_could_be_instantiated_with_a_different_subtype_of_5075": "\"{0}\" 可赋给 \"{1}\" 类型的约束,但可以使用约束 \"{2}\" 的其他子类型实例化 \"{1}\"。",
   "_0_is_declared_but_its_value_is_never_read_6133": "已声明“{0}”,但从未读取其值。",
@@ -1403,7 +1670,7 @@
   "_0_is_declared_here_2728": "在此处声明了 \"{0}\"。",
   "_0_is_defined_as_a_property_in_class_1_but_is_overridden_here_in_2_as_an_accessor_2611": "\"{0}\" 在类 \"{1}\" 中定义为属性,但这里在 \"{2}\" 中重写为访问器。",
   "_0_is_defined_as_an_accessor_in_class_1_but_is_overridden_here_in_2_as_an_instance_property_2610": "\"{0}\" 在类 \"{1}\" 中定义为访问器,但这里在 \"{2}\" 中重写为实例属性。",
-  "_0_is_deprecated_6385": "“{0}”已被弃用",
+  "_0_is_deprecated_6385": "“{0}”已弃用。",
   "_0_is_not_a_valid_meta_property_for_keyword_1_Did_you_mean_2_17012": "“{0}”不是关键字“{1}”的有效元属性。是否是指“{2}”?",
   "_0_is_not_allowed_as_a_variable_declaration_name_1389": "“{0}”不得用作变量声明名称。",
   "_0_is_referenced_directly_or_indirectly_in_its_own_base_expression_2506": "“{0}”在其自身的基表达式中得到直接或间接引用。",
@@ -1428,7 +1695,7 @@
   "_0_only_refers_to_a_type_but_is_being_used_as_a_namespace_here_2702": "“{0}”仅指类型,但在此用作命名空间。",
   "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_2693": "“{0}”仅表示类型,但在此处却作为值使用。",
   "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_Did_you_mean_to_use_1_in_0_2690": "“{0}”仅引用一个类型,但在此处用作一个值。你是否想要使用“{0} 中的 {1}”?",
-  "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_Do_you_need_to_change_your_target_library_2585": "\"{0}\" 仅指类型,但在此处用作值。是否需要更改目标库?请尝试将 `lib` 编译器选项更改为 es2015 或更高版本。",
+  "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_Do_you_need_to_change_your_target_library_2585": "“{0}” 仅指类型,但在此处用作值。是否需要更改目标库? 请尝试将 “lib” 编译器选项更改为 es2015 或更高版本。",
   "_0_refers_to_a_UMD_global_but_the_current_file_is_a_module_Consider_adding_an_import_instead_2686": "“{0}”指 UMD 全局,但当前文件是模块。请考虑改为添加导入。",
   "_0_refers_to_a_value_but_is_being_used_as_a_type_here_Did_you_mean_typeof_0_2749": "“{0}”表示值,但在此处用作类型。是否指“类型 {0}”?",
   "_0_tag_already_specified_1223": "已指定“{0}”标记。",
@@ -1440,6 +1707,7 @@
   "_0_which_lacks_return_type_annotation_implicitly_has_an_1_yield_type_7055": "缺少返回类型批注的 \"{0}\" 隐式具有 \"{1}\" 产出类型。",
   "abstract_modifier_can_only_appear_on_a_class_method_or_property_declaration_1242": "\"abstract\" 修饰符仅可出现在类、方法或属性声明中。",
   "and_here_6204": "并在这里。",
+  "arguments_cannot_be_referenced_in_property_initializers_2815": "无法在属性初始化表达式中引用 \"arguments\"。",
   "await_expressions_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_fi_1375": "仅当文件是模块时,才允许在该文件的顶层使用 \"await\" 表达式,但此文件没有导入或导出。请考虑添加空的 \"export {}\" 以将此文件变为模块。",
   "await_expressions_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_1308": "仅允许在异步函数和模块顶级使用 \"await\" 表达式。",
   "await_expressions_cannot_be_used_in_a_parameter_initializer_2524": "不能在参数初始化表达式中使用 \"await\" 表达式。",
@@ -1456,6 +1724,7 @@
   "const_enums_can_only_be_used_in_property_or_index_access_expressions_or_the_right_hand_side_of_an_im_2475": "\"const\" 枚举仅可在属性、索引访问表达式、导入声明的右侧、导出分配或类型查询中使用。",
   "constructor_cannot_be_used_as_a_parameter_property_name_2398": "“构造函数”不能用作参数属性名称。",
   "constructor_is_a_reserved_word_18012": "\"#constructor\" 是保留字。",
+  "default_Colon_6903": "默认值:",
   "delete_cannot_be_called_on_an_identifier_in_strict_mode_1102": "在严格模式下,无法对标识符调用 \"delete\"。",
   "delete_this_Project_0_is_up_to_date_because_it_was_previously_built_6360": "删除此 - 项目“{0}”已是最新,因为它是以前生成的",
   "export_Asterisk_does_not_re_export_a_default_1195": "\"export *\" 不会重新导出默认值。",
@@ -1466,17 +1735,26 @@
   "extends_clause_of_exported_class_0_has_or_is_using_private_name_1_4020": "导出的类“{0}”的 \"extends\" 子句具有或正在使用专用名称“{1}”。",
   "extends_clause_of_exported_class_has_or_is_using_private_name_0_4021": "导出的类的 \"extends\" 子句具有或正在使用专用名称“{0}”。",
   "extends_clause_of_exported_interface_0_has_or_is_using_private_name_1_4022": "导出接口“{0}”的 \"extends\" 子句具有或正在使用专用名称“{1}”。",
+  "false_unless_composite_is_set_6906": "\"false\",除非设置了 \"composite\"",
+  "false_unless_strict_is_set_6905": "\"false\",除非设置了 \"strict\"",
   "file_6025": "文件",
+  "for_await_loops_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_file_1431": "仅当文件是模块且没有导入或导出项时,才允许在该文件的顶层使用“for await”循环。可考虑添加空的“export {}”将此文件变为模块。",
+  "for_await_loops_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_1103": "仅允许在异步函数和模块顶层使用“for await”循环。",
   "get_and_set_accessor_must_have_the_same_this_type_2682": "\"get\" 和 \"set\" 访问器必须拥有相同的 \"this\" 类型。",
-  "get_and_set_accessor_must_have_the_same_type_2380": "\"get\" 和 \"set\" 访问器必须属于同一类型。",
   "get_and_set_accessors_cannot_declare_this_parameters_2784": "\"get\" 和 \"set\" 访问器无法声明 \"this\" 参数。",
+  "if_files_is_specified_otherwise_Asterisk_Asterisk_Slash_Asterisk_6908": "如果指定了 \"files\",则为 \"[]\",否则为\"[\"**/*\"]5D;\"",
   "implements_clause_already_seen_1175": "已看到 \"implements\" 子句。",
   "implements_clauses_can_only_be_used_in_TypeScript_files_8005": "\"implements\" 子句只能在 TypeScript 文件中使用。",
   "import_can_only_be_used_in_TypeScript_files_8002": "\"import ... =\" 只能在 TypeScript 文件中使用。",
   "infer_declarations_are_only_permitted_in_the_extends_clause_of_a_conditional_type_1338": "仅条件类型的 \"extends\" 子句中才允许 \"infer\" 声明。",
   "let_declarations_can_only_be_declared_inside_a_block_1157": "\"let\" 声明只能在块的内部声明。",
   "let_is_not_allowed_to_be_used_as_a_name_in_let_or_const_declarations_2480": "\"let\" 不能用作 \"let\" 或 \"const\" 声明中的名称。",
+  "module_AMD_or_UMD_or_System_or_ES6_then_Classic_Otherwise_Node_69010": "module === 'AMD' 或 'UMD' 或 'System' 或 'ES6',然后 'Classic', 否则为 'Node'",
+  "module_system_or_esModuleInterop_6904": "module === \"system\" 或 esModuleInterop",
   "new_expression_whose_target_lacks_a_construct_signature_implicitly_has_an_any_type_7009": "其目标缺少构造签名的 \"new\" 表达式隐式具有 \"any\" 类型。",
+  "node_modules_bower_components_jspm_packages_plus_the_value_of_outDir_if_one_is_specified_6907": "`[\"node_modules\"、\"bower_components\"、\"jspm_packages\"]`,以及 \"outDir\" 的值(如果指定)。",
+  "one_of_Colon_6900": "以下其中一个:",
+  "one_or_more_Colon_6901": "一个或更多:",
   "options_6024": "选项",
   "or_expected_1144": "应为 \"{\" 或 \";\"。",
   "package_json_does_not_have_a_0_field_6100": "\"package.json\" 没有“{0}”字段。",
@@ -1507,6 +1785,9 @@
   "this_cannot_be_referenced_in_constructor_arguments_2333": "不能在构造函数参数中引用 \"this\"。",
   "this_cannot_be_referenced_in_current_location_2332": "不能在当前位置引用 \"this\"。",
   "this_implicitly_has_type_any_because_it_does_not_have_a_type_annotation_2683": "\"this\" 隐式具有类型 \"any\",因为它没有类型注释。",
+  "true_if_composite_false_otherwise_6909": "如果为 \"composite\",则为 \"true\",否则为 \"false\"",
+  "tsc_Colon_The_TypeScript_Compiler_6922": "tsc: TypeScript 编译器",
+  "type_Colon_6902": "类型:",
   "unique_symbol_types_are_not_allowed_here_1335": "此处不允许使用 \"unique symbol\" 类型。",
   "unique_symbol_types_are_only_allowed_on_variables_in_a_variable_statement_1334": "\"unique symbol\" 类型仅可用于变量语句中的变量。",
   "unique_symbol_types_may_not_be_used_on_a_variable_declaration_with_a_binding_name_1333": "不可在具有绑定名称的变量声明中使用 \"unique symbol\" 类型。",
@@ -1514,5 +1795,6 @@
   "use_strict_directive_used_here_1349": "此处使用了 \"use strict\" 指令。",
   "with_statements_are_not_allowed_in_an_async_function_block_1300": "不允许在异步函数块中使用 \"with\" 语句。",
   "with_statements_are_not_allowed_in_strict_mode_1101": "严格模式下不允许使用 \"with\" 语句。",
+  "yield_expression_implicitly_results_in_an_any_type_because_its_containing_generator_lacks_a_return_t_7057": "\"yield\" 表达式隐式导致 \"any\" 类型,因为它的包含生成器缺少返回类型批注。",
   "yield_expressions_cannot_be_used_in_a_parameter_initializer_2523": "不能在参数初始化表达式中使用 \"yield\" 表达式。"
 }
\ No newline at end of file
diff --git a/node_modules/typescript/lib/zh-tw/diagnosticMessages.generated.json b/node_modules/typescript/lib/zh-tw/diagnosticMessages.generated.json
index 0b22d6a..0f55ba6 100644
--- a/node_modules/typescript/lib/zh-tw/diagnosticMessages.generated.json
+++ b/node_modules/typescript/lib/zh-tw/diagnosticMessages.generated.json
@@ -1,4 +1,5 @@
 {
+  "ALL_COMPILER_OPTIONS_6917": "所有編譯器選項",
   "A_0_modifier_cannot_be_used_with_an_import_declaration_1079": "'{0}' 修飾元無法與匯入宣告並用。",
   "A_0_modifier_cannot_be_used_with_an_interface_declaration_1045": "'{0}' 修飾元無法與介面宣告並用。",
   "A_0_parameter_must_be_the_first_parameter_2680": "'{0}' 參數必須為第一個參數。",
@@ -15,7 +16,7 @@
   "A_class_member_cannot_have_the_0_keyword_1248": "類別成員不能含有 '{0}' 關鍵字。",
   "A_comma_expression_is_not_allowed_in_a_computed_property_name_1171": "計算的屬性名稱中不可有逗點運算式。",
   "A_computed_property_name_cannot_reference_a_type_parameter_from_its_containing_type_2467": "計算的屬性名稱不得參考其包含類型中的型別參數。",
-  "A_computed_property_name_in_a_class_property_declaration_must_refer_to_an_expression_whose_type_is_a_1166": "類別屬性宣告中的計算屬性名稱,必須參考類型為常值型別或 'unique symbol' 類型的運算式。",
+  "A_computed_property_name_in_a_class_property_declaration_must_have_a_simple_literal_type_or_a_unique_1166": "類別屬性宣告中的已計算屬性名稱必須具有簡單常值型別或 'unique symbol' 型別。",
   "A_computed_property_name_in_a_method_overload_must_refer_to_an_expression_whose_type_is_a_literal_ty_1168": "方法多載中的計算屬性名稱必須參考型別為常值型別或 'unique symbol' 型別的運算式。",
   "A_computed_property_name_in_a_type_literal_must_refer_to_an_expression_whose_type_is_a_literal_type__1170": "常值型別中的計算屬性名稱,必須參考類型為常值型別或 'unique symbol' 類型的運算式。",
   "A_computed_property_name_in_an_ambient_context_must_refer_to_an_expression_whose_type_is_a_literal_t_1165": "環境內容中的計算屬性名稱必須參考型別為常值型別或 'unique symbol' 型別的運算式。",
@@ -33,24 +34,25 @@
   "A_decorator_can_only_decorate_a_method_implementation_not_an_overload_1249": "一個裝飾項目只能裝飾一項方法實作,而不能多載。",
   "A_default_clause_cannot_appear_more_than_once_in_a_switch_statement_1113": "'default' 子句在 'switch' 陳述式中不得出現一次以上。",
   "A_default_export_can_only_be_used_in_an_ECMAScript_style_module_1319": "預設匯出只能在 ECMAScript 樣式的模組中使用。",
+  "A_default_export_must_be_at_the_top_level_of_a_file_or_module_declaration_1258": "預設匯出必須位於檔案或模組宣告的最上層。",
   "A_definite_assignment_assertion_is_not_permitted_in_this_context_1255": "此內容不允許明確的指派判斷提示 '!'。",
   "A_destructuring_declaration_must_have_an_initializer_1182": "解構宣告中必須包含初始設定式。",
-  "A_dynamic_import_call_in_ES5_SlashES3_requires_the_Promise_constructor_Make_sure_you_have_a_declarat_2712": "ES5/ES3 中的動態匯入呼叫需要 'Promise' 建構函式。請確認您有 'Promise' 建構函式的宣告,或在 `--lib` 選項中納入 'ES2015'。",
-  "A_dynamic_import_call_returns_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_include_ES20_2711": "動態匯入呼叫傳回 'Promise'。請確認您有 'Promise' 的宣告,或在 `--lib` 選項中納入 'ES2015'。",
+  "A_dynamic_import_call_in_ES5_SlashES3_requires_the_Promise_constructor_Make_sure_you_have_a_declarat_2712": "ES5/ES3 中的動態匯入呼叫需要 'Promise' 建構函式。請確認您有 'Promise' 建構函式的宣告,或在 '--lib' 選項中包括 'ES2015'。",
+  "A_dynamic_import_call_returns_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_include_ES20_2711": "動態匯入呼叫傳回 'Promise'。請確認您有 'Promise' 的宣告,或在 '--lib' 選項中包括 'ES2015'。",
   "A_file_cannot_have_a_reference_to_itself_1006": "檔案不得參考自己。",
-  "A_for_await_of_statement_is_only_allowed_within_an_async_function_or_async_generator_1103": "只在非同步函式或非同步產生器中才允許 'for-await-of' 陳述式。",
   "A_function_returning_never_cannot_have_a_reachable_end_point_2534": "會傳回 'never' 的功能不得具有可聯繫的端點。",
   "A_function_that_is_called_with_the_new_keyword_cannot_have_a_this_type_that_is_void_2679": "透過 'new' 關鍵字呼叫的函式不能含有為 'viod' 的 'this' 類型。",
   "A_function_whose_declared_type_is_neither_void_nor_any_must_return_a_value_2355": "若函式的宣告類型既不是 'void' 也不是 'any',則必須傳回值。",
   "A_generator_cannot_have_a_void_type_annotation_2505": "產生器不得有 'void' 類型註釋。",
   "A_get_accessor_cannot_have_parameters_1054": "'get' 存取子不得有參數。",
+  "A_get_accessor_must_be_at_least_as_accessible_as_the_setter_2808": "get 存取子必須至少要跟 setter 一樣可供存取",
   "A_get_accessor_must_return_a_value_2378": "'get' 存取子必須傳回值。",
   "A_label_is_not_allowed_here_1344": "此處不允許標籤。",
   "A_labeled_tuple_element_is_declared_as_optional_with_a_question_mark_after_the_name_and_before_the_c_5086": "標記的元組元素已宣告為選用,並在名稱之後、冒號之前加上問號,而非加在類型之後。",
-  "A_labeled_tuple_element_is_declared_as_rest_with_a_before_the_name_rather_than_before_the_type_5087": "標記的元組元素已宣告為待用,並在名稱之前加上「…」,而非加在類型之前。",
+  "A_labeled_tuple_element_is_declared_as_rest_with_a_before_the_name_rather_than_before_the_type_5087": "標記的元組元素已宣告為待用,並在名稱之前加上「...」,而非加在類型之前。",
   "A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_memb_2651": "列舉宣告中的成員初始設定式,不得參考在它之後宣告的成員,包括在其他列舉中所定義的成員。",
-  "A_method_cannot_be_named_with_a_private_identifier_18022": "無法以私人識別碼命名方法。",
   "A_mixin_class_must_have_a_constructor_with_a_single_rest_parameter_of_type_any_2545": "mixin 類別必須具備建構函式,且該建構函式必須指定一個類型為 'any[]' 的 rest 參數。",
+  "A_mixin_class_that_extends_from_a_type_variable_containing_an_abstract_construct_signature_must_also_2797": "從包含抽象建構簽章之類型變數所延伸的 mixin 類別也必須宣告為 'abstract'。",
   "A_module_cannot_have_multiple_default_exports_2528": "一個模組不得有多個預設匯出。",
   "A_namespace_declaration_cannot_be_in_a_different_file_from_a_class_or_function_with_which_it_is_merg_2433": "命名空間宣告的所在檔案位置,不得與其要合併的類別或函式不同。",
   "A_namespace_declaration_cannot_be_located_prior_to_a_class_or_function_with_which_it_is_merged_2434": "命名空間宣告的位置不得先於其要合併的類別或函式。",
@@ -71,10 +73,10 @@
   "A_required_element_cannot_follow_an_optional_element_1257": "必要項目不可接在選擇性項目後面。",
   "A_required_parameter_cannot_follow_an_optional_parameter_1016": "必要參數不得接在選擇性參數之後。",
   "A_rest_element_cannot_contain_a_binding_pattern_2501": "剩餘項目不得包含繫結模式。",
+  "A_rest_element_cannot_follow_another_rest_element_1265": "REST 元素不能跟在另一個 REST 元素之後。",
   "A_rest_element_cannot_have_a_property_name_2566": "REST 元素不得有屬性名稱。",
   "A_rest_element_cannot_have_an_initializer_1186": "剩餘項目不得有初始設定式。",
   "A_rest_element_must_be_last_in_a_destructuring_pattern_2462": "Rest 項目必須保持在解構模式。",
-  "A_rest_element_must_be_last_in_a_tuple_type_1256": "其餘項目必須是元組類型中的最後一項。",
   "A_rest_element_type_must_be_an_array_type_2574": "其餘項目類型必須為陣列類型。",
   "A_rest_parameter_cannot_be_optional_1047": "剩餘參數不得為選擇性參數。",
   "A_rest_parameter_cannot_have_an_initializer_1048": "剩餘參數不得有初始設定式。",
@@ -82,6 +84,7 @@
   "A_rest_parameter_must_be_of_an_array_type_2370": "剩餘參數必須為陣列類型。",
   "A_rest_parameter_or_binding_pattern_may_not_have_a_trailing_comma_1013": "REST 參數或繫結模式的結尾不得為逗點。",
   "A_return_statement_can_only_be_used_within_a_function_body_1108": "'return' 陳述式只可在函式主體內使用。",
+  "A_return_statement_cannot_be_used_inside_a_class_static_block_18041": "'return' 陳述式無法在類別靜態區塊內使用。",
   "A_series_of_entries_which_re_map_imports_to_lookup_locations_relative_to_the_baseUrl_6167": "一系列由重新對應匯入到 'baseUrl' 之相對查詢位置的項目。",
   "A_set_accessor_cannot_have_a_return_type_annotation_1095": "'set' 存取子不得有傳回型別註解。",
   "A_set_accessor_cannot_have_an_optional_parameter_1051": "'set' 存取子不得有選擇性參數。",
@@ -89,6 +92,7 @@
   "A_set_accessor_must_have_exactly_one_parameter_1049": "'set' 存取子只可有一個參數。",
   "A_set_accessor_parameter_cannot_have_an_initializer_1052": "'set' 存取子參數不得有初始設定式。",
   "A_signature_with_an_implementation_cannot_use_a_string_literal_type_2381": "包含實作的簽章不得使用字串常值類型。",
+  "A_spread_argument_must_either_have_a_tuple_type_or_be_passed_to_a_rest_parameter_2556": "擴張引數必須具有元組類型或傳遞給 REST 參數。",
   "A_super_call_must_be_the_first_statement_in_the_constructor_when_a_class_contains_initialized_proper_2376": "當類別包含已初始化的屬性、參數屬性或私人識別碼時,'super' 呼叫必須為建構函式中的第一個陳述式。",
   "A_this_based_type_guard_is_not_compatible_with_a_parameter_based_type_guard_2518": "以 'this' 為基礎的類型成立條件,和以參數為基礎的類型成立條件不相容。",
   "A_this_type_is_available_only_in_a_non_static_member_of_a_class_or_interface_2526": "'this' 類型只適用於類別或介面的非靜態成員。",
@@ -114,8 +118,11 @@
   "Add_a_return_statement_95111": "新增 return 陳述式",
   "Add_all_missing_async_modifiers_95041": "新增缺少的所有 'async' 修飾元",
   "Add_all_missing_call_parentheses_95068": "新增所有缺少的呼叫括號",
+  "Add_all_missing_function_declarations_95157": "新增所有缺少的函式宣告",
   "Add_all_missing_imports_95064": "新增所有缺少的匯入",
   "Add_all_missing_members_95022": "新增遺漏的所有成員",
+  "Add_all_missing_override_modifiers_95162": "新增所有缺少的 'override' 修飾元",
+  "Add_all_missing_properties_95166": "新增所有遺失的屬性",
   "Add_all_missing_return_statement_95114": "新增所有遺漏的 return 陳述式",
   "Add_all_missing_super_calls_95039": "新增缺少的所有 super 呼叫",
   "Add_async_modifier_to_containing_function_90029": "將 async 修飾元新增至包含的函式",
@@ -135,18 +142,22 @@
   "Add_initializers_to_all_uninitialized_properties_95027": "為所有未初始化的屬性新增初始設定式",
   "Add_missing_call_parentheses_95067": "新增缺少的呼叫括號",
   "Add_missing_enum_member_0_95063": "新增缺少的列舉成員 '{0}'",
+  "Add_missing_function_declaration_0_95156": "新增缺少的函式宣告 '{0}'",
   "Add_missing_new_operator_to_all_calls_95072": "將缺少的 'new' 運算子新增至所有呼叫",
   "Add_missing_new_operator_to_call_95071": "缺少的 'new' 運算子新增至呼叫",
+  "Add_missing_properties_95165": "新增遺失的屬性",
   "Add_missing_super_call_90001": "新增遺漏的 'super()' 呼叫",
   "Add_missing_typeof_95052": "新增遺漏的 'typeof'",
   "Add_names_to_all_parameters_without_names_95073": "將名稱新增至所有沒有名稱的參數",
   "Add_or_remove_braces_in_an_arrow_function_95058": "在箭號函式中新增或移除大括號",
+  "Add_override_modifier_95160": "新增 'override' 修飾元",
   "Add_parameter_name_90034": "新增參數名稱",
   "Add_qualifier_to_all_unresolved_variables_matching_a_member_name_95037": "對所有比對成員名稱的未解析變數新增限定詞",
   "Add_this_parameter_95104": "新增 'this' 參數。",
   "Add_this_tag_95103": "新增 '@this' 標籤",
   "Add_to_all_uncalled_decorators_95044": "為所有未呼叫的裝飾項目新增 '()'",
   "Add_ts_ignore_to_all_error_messages_95042": "為所有錯誤訊息新增 '@ts-ignore'",
+  "Add_undefined_to_a_type_when_accessed_using_an_index_6674": "使用索引進行存取時,將 `undefined` 新增至類型。",
   "Add_undefined_type_to_all_uninitialized_properties_95029": "為所有未初始化的屬性新增未定義的類型",
   "Add_undefined_type_to_property_0_95018": "將 'undefined' 類型新增至屬性 '{0}'",
   "Add_unknown_conversion_for_non_overlapping_types_95069": "新增非重疊類型的 'unknown' 轉換",
@@ -154,8 +165,6 @@
   "Add_void_to_Promise_resolved_without_a_value_95143": "為已經解析但不具值的 Promise 新增 'void'",
   "Add_void_to_all_Promises_resolved_without_a_value_95144": "為已經解析但不具值的所有 Promise 新增 'void'",
   "Adding_a_tsconfig_json_file_will_help_organize_projects_that_contain_both_TypeScript_and_JavaScript__5068": "新增 tsconfig.json 檔案有助於組織同時包含 TypeScript 及 JavaScript 檔案的專案。若要深入了解,請前往 https://aka.ms/tsconfig。",
-  "Additional_Checks_6176": "其他檢查",
-  "Advanced_Options_6178": "進階選項",
   "All_declarations_of_0_must_have_identical_modifiers_2687": "'{0}' 的所有宣告都必須有相同修飾元。",
   "All_declarations_of_0_must_have_identical_type_parameters_2428": "'{0}' 的所有宣告都必須具有相同的類型參數。",
   "All_declarations_of_an_abstract_method_must_be_consecutive_2516": "抽象方法的所有宣告必須連續。",
@@ -163,34 +172,38 @@
   "All_imports_in_import_declaration_are_unused_6192": "匯入宣告中的所有匯入皆未使用。",
   "All_type_parameters_are_unused_6205": "未使用任何型別參數。",
   "All_variables_are_unused_6199": "所有變數都未使用。",
-  "Allow_accessing_UMD_globals_from_modules_95076": "允許從模組存取 UMD 全域。",
+  "Allow_JavaScript_files_to_be_a_part_of_your_program_Use_the_checkJS_option_to_get_errors_from_these__6600": "允許 JavaScript 檔案成為您程式的一部分。使用 `checkJS` 選項可從這些檔案取得錯誤。",
+  "Allow_accessing_UMD_globals_from_modules_6602": "允許從模組存取 UMD 全域。",
   "Allow_default_imports_from_modules_with_no_default_export_This_does_not_affect_code_emit_just_typech_6011": "允許從沒有預設匯出的模組進行預設匯入。這不會影響程式碼發出,僅為類型檢查。",
+  "Allow_import_x_from_y_when_a_module_doesn_t_have_a_default_export_6601": "當模組沒有預設匯出時,允許 'import x from y'。",
+  "Allow_importing_helper_functions_from_tslib_once_per_project_instead_of_including_them_per_file_6639": "允許每個專案只從 tslib 匯入協助程式函式,而不是每個檔案都包含這些函式。",
   "Allow_javascript_files_to_be_compiled_6102": "允許編譯 JavaScript 檔案。",
+  "Allow_multiple_folders_to_be_treated_as_one_when_resolving_modules_6691": "在解析模組時,允許將多個資料夾視為一個資料夾。",
   "Already_included_file_name_0_differs_from_file_name_1_only_in_casing_1261": "已包含的檔案名稱 '{0}' 與檔案名稱 '{1}' 僅大小寫不同。",
   "Ambient_module_declaration_cannot_specify_relative_module_name_2436": "環境模組宣告不可指定相對模組名稱。",
   "Ambient_modules_cannot_be_nested_in_other_modules_or_namespaces_2435": "環境模組不得以巢狀方式置於其他模組或命名空間中。",
   "An_AMD_module_cannot_have_multiple_name_assignments_2458": "AMD 模組不能有多個名稱指派。",
   "An_abstract_accessor_cannot_have_an_implementation_1318": "抽象存取子無法實作。",
   "An_accessibility_modifier_cannot_be_used_with_a_private_identifier_18010": "協助工具修飾元不可搭配私人識別碼使用。",
-  "An_accessor_cannot_be_named_with_a_private_identifier_18023": "存取子不可以私人識別碼命名。",
   "An_accessor_cannot_have_type_parameters_1094": "存取子不得有類型參數。",
   "An_ambient_module_declaration_is_only_allowed_at_the_top_level_in_a_file_1234": "環境模組宣告只可出現在檔案的最上層。",
   "An_argument_for_0_was_not_provided_6210": "未提供 '{0}' 的引數。",
   "An_argument_matching_this_binding_pattern_was_not_provided_6211": "未提供符合此繫結模式的引數。",
   "An_arithmetic_operand_must_be_of_type_any_number_bigint_or_an_enum_type_2356": "算術運算元必須屬於 'any'、'number'、'bigint' 或列舉類型。",
   "An_arrow_function_cannot_have_a_this_parameter_2730": "箭號函式不可具有 'this' 參數。",
-  "An_async_function_or_method_in_ES5_SlashES3_requires_the_Promise_constructor_Make_sure_you_have_a_de_2705": "ES5/ES3 中的非同步函式或方法需要 'Promise' 建構函式。請確認您有 'Promise' 建構函式的宣告,或在 `--lib` 選項中納入 'ES2015'。",
+  "An_async_function_or_method_in_ES5_SlashES3_requires_the_Promise_constructor_Make_sure_you_have_a_de_2705": "ES5/ES3 中的非同步函式或方法需要 'Promise' 建構函式。請確認您有 'Promise' 建構函式的宣告,或在 '--lib' 選項中包括 'ES2015'。",
   "An_async_function_or_method_must_have_a_valid_awaitable_return_type_1057": "非同步函式或方法必須包含有效可等候的傳回型別。",
-  "An_async_function_or_method_must_return_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_in_2697": "非同步函式或方法必須傳回 'Promise'。請確定您有 'Promise' 的宣告或將 'ES2015' 納入您的 '-lib' 選項。",
+  "An_async_function_or_method_must_return_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_in_2697": "非同步函式或方法必須傳回 'Promise'。請確定您有 'Promise' 的宣告或在 '--lib' 選項中包括 'ES2015'。",
   "An_async_iterator_must_have_a_next_method_2519": "非同步迭代器必須有 'next()' 方法。",
   "An_element_access_expression_should_take_an_argument_1011": "項目存取運算式應接受一個引數。",
   "An_enum_member_cannot_be_named_with_a_private_identifier_18024": "列舉成員不能以私人識別碼命名。",
   "An_enum_member_cannot_have_a_numeric_name_2452": "列舉成員不得有數值名稱。",
   "An_enum_member_name_must_be_followed_by_a_or_1357": "列舉成員名稱必須尾隨 ','、'=' 或 '}'。",
-  "An_export_assignment_can_only_be_used_in_a_module_1231": "匯出指派只可用於模組中。",
+  "An_expanded_version_of_this_information_showing_all_possible_compiler_options_6928": "此資訊展開的版本,顯示所有可能的編譯器選項",
   "An_export_assignment_cannot_be_used_in_a_module_with_other_exported_elements_2309": "匯出指派不得用於具有其他匯出項目的模組中。",
   "An_export_assignment_cannot_be_used_in_a_namespace_1063": "命名空間中不可使用匯出指派。",
   "An_export_assignment_cannot_have_modifiers_1120": "匯出指派不得有修飾元。",
+  "An_export_assignment_must_be_at_the_top_level_of_a_file_or_module_declaration_1231": "匯出指派必須位於檔案或模組宣告的最上層。",
   "An_export_declaration_can_only_be_used_in_a_module_1233": "匯出宣告只可用於模組中。",
   "An_export_declaration_cannot_have_modifiers_1193": "匯出宣告不得有修飾元。",
   "An_expression_of_type_void_cannot_be_tested_for_truthiness_1345": "無法對 'void' 類型的運算式測試真實性。",
@@ -212,9 +225,8 @@
   "An_index_signature_parameter_cannot_have_an_accessibility_modifier_1018": "索引簽章參數不得有存取範圍修飾元。",
   "An_index_signature_parameter_cannot_have_an_initializer_1020": "索引簽章參數不得有初始設定式。",
   "An_index_signature_parameter_must_have_a_type_annotation_1022": "索引簽章參數必須有類型註釋。",
-  "An_index_signature_parameter_type_cannot_be_a_type_alias_Consider_writing_0_Colon_1_Colon_2_instead_1336": "索引簽章參數類型不能是類型別名。請考慮改為撰寫 '[{0}: {1}]: {2}'。",
-  "An_index_signature_parameter_type_cannot_be_a_union_type_Consider_using_a_mapped_object_type_instead_1337": "索引簽章參數類型不能是等位型別。請考慮改用對應的物件類型。",
-  "An_index_signature_parameter_type_must_be_either_string_or_number_1023": "索引簽章參數類型必須為 'string' 或 'number'。",
+  "An_index_signature_parameter_type_cannot_be_a_literal_type_or_generic_type_Consider_using_a_mapped_o_1337": "索引簽章參數類型不能是常值型別或泛型型別。請考慮改用對應的物件類型。",
+  "An_index_signature_parameter_type_must_be_string_number_symbol_or_a_template_literal_type_1268": "索引簽章參數類型必須是 'string'、'number'、'symbol' 或範本文字類型。",
   "An_interface_can_only_extend_an_identifier_Slashqualified_name_with_optional_type_arguments_2499": "介面只能擴充具有選擇性型別引數的識別碼/限定名稱。",
   "An_interface_can_only_extend_an_object_type_or_intersection_of_object_types_with_statically_known_me_2312": "介面只能延伸物件類型或具有靜態已知成員的物件類型交集。",
   "An_interface_property_cannot_have_an_initializer_1246": "介面屬性不得有初始設定式。",
@@ -225,6 +237,7 @@
   "An_object_literal_cannot_have_property_and_accessor_with_the_same_name_1119": "物件常值不得有同名的屬性與存取子。",
   "An_object_member_cannot_be_declared_optional_1162": "不得將物件成員宣告為選擇性。",
   "An_optional_chain_cannot_contain_private_identifiers_18030": "選擇性鏈結不能包含私人識別碼。",
+  "An_optional_element_cannot_follow_a_rest_element_1266": "選擇性元素不能跟在 REST 元素之後。",
   "An_outer_value_of_this_is_shadowed_by_this_container_2738": "此容器已陰影 'this' 的外部值。",
   "An_overload_signature_cannot_be_declared_as_a_generator_1222": "不可將多載簽章宣告為產生器。",
   "An_unary_expression_with_the_0_operator_is_not_allowed_in_the_left_hand_side_of_an_exponentiation_ex_17006": "乘冪運算式左邊不允許具 '{0}' 運算子的一元運算式。請考慮以括弧括住運算式。",
@@ -244,33 +257,47 @@
   "Augmentations_for_the_global_scope_can_only_be_directly_nested_in_external_modules_or_ambient_module_2669": "全域範圍的增強指定只能在外部模組宣告或環境模組宣告直接巢狀。",
   "Augmentations_for_the_global_scope_should_have_declare_modifier_unless_they_appear_in_already_ambien_2670": "除非全域範圍的增強指定已顯示在環境內容中,否則應含有 'declare' 修飾元。",
   "Auto_discovery_for_typings_is_enabled_in_project_0_Running_extra_resolution_pass_for_module_1_using__6140": "專案 '{0}' 中已啟用鍵入的自動探索。正在使用快取位置 '{2}' 執行模組 '{1}' 的額外解析傳遞。",
+  "Await_expression_cannot_be_used_inside_a_class_static_block_18037": "Await 運算式無法在類別靜態區塊內使用。",
+  "BUILD_OPTIONS_6919": "建置選項",
+  "Backwards_Compatibility_6253": "回溯相容性",
   "Base_class_expressions_cannot_reference_class_type_parameters_2562": "基底類別運算式無法參考類別型別參數。",
   "Base_constructor_return_type_0_is_not_an_object_type_or_intersection_of_object_types_with_statically_2509": "基底建構函式傳回型別 '{0}' 不是物件類型或具有靜態已知成員的物件類型交集。",
   "Base_constructors_must_all_have_the_same_return_type_2510": "基底建構函式的傳回型別必須全部相同。",
   "Base_directory_to_resolve_non_absolute_module_names_6083": "要解析非絕對模組名稱的基底目錄。",
-  "Basic_Options_6172": "基本選項",
   "BigInt_literals_are_not_available_when_targeting_lower_than_ES2020_2737": "當目標低於 ES2020 時,無法使用 BigInt 常值。",
   "Binary_digit_expected_1177": "必須是二進位數字。",
   "Binding_element_0_implicitly_has_an_1_type_7031": "繫結元素 '{0}' 隱含擁有 '{1}' 類型。",
   "Block_scoped_variable_0_used_before_its_declaration_2448": "已在其宣告之前使用區塊範圍變數 '{0}'。",
-  "Build_all_projects_including_those_that_appear_to_be_up_to_date_6368": "建置包括似乎已是最新狀態的所有專案",
+  "Build_a_composite_project_in_the_working_directory_6925": "在工作目錄中建置複合專案。",
+  "Build_all_projects_including_those_that_appear_to_be_up_to_date_6636": "建置包括似乎已是最新狀態的所有專案",
   "Build_one_or_more_projects_and_their_dependencies_if_out_of_date_6364": "若已過期,則建置一或多個專案及其相依性",
   "Build_option_0_requires_a_value_of_type_1_5073": "組建選項 '{0}' 需要 {1} 類型的值。",
   "Building_project_0_6358": "正在建置專案 '{0}'...",
+  "COMMAND_LINE_FLAGS_6921": "命令列旗標",
+  "COMMON_COMMANDS_6916": "一般命令",
+  "COMMON_COMPILER_OPTIONS_6920": "一般編譯器選項",
   "Call_decorator_expression_90028": "呼叫裝飾項目運算式",
   "Call_signature_return_types_0_and_1_are_incompatible_2202": "呼叫簽章傳回型別 '{0}' 與 '{1}' 不相容。",
   "Call_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type_7020": "缺少傳回型別註解的呼叫簽章隱含了 'any' 傳回型別。",
   "Call_signatures_with_no_arguments_have_incompatible_return_types_0_and_1_2204": "無引數呼叫簽章的傳回型別 '{0}' 與 '{1}' 不相容。",
   "Call_target_does_not_contain_any_signatures_2346": "呼叫目標未包含任何特徵標記。",
   "Can_only_convert_logical_AND_access_chains_95142": "只可轉換邏輯 AND 存取鏈結",
+  "Can_only_convert_named_export_95164": "只能轉換具名匯出",
   "Can_only_convert_property_with_modifier_95137": "只能轉換具有修飾元的屬性",
+  "Can_only_convert_string_concatenation_95154": "只能轉換字串串連",
   "Cannot_access_0_1_because_0_is_a_type_but_not_a_namespace_Did_you_mean_to_retrieve_the_type_of_the_p_2713": "因為 '{0}' 是類型而非命名空間,所以無法存取 '{0}.{1}'。您要在 '{0}' 中使用 '{0}[\"{1}\"]' 擷取屬性 '{1}' 的類型嗎?",
   "Cannot_access_ambient_const_enums_when_the_isolatedModules_flag_is_provided_2748": "當提供 '--isolatedModules' 旗標時,則無法存取環境常數列舉。",
   "Cannot_assign_a_0_constructor_type_to_a_1_constructor_type_2672": "無法將 '{0}' 建構函式類型指派至 '{1}' 建構函式類型。",
   "Cannot_assign_an_abstract_constructor_type_to_a_non_abstract_constructor_type_2517": "無法將抽象建構函式類型指派給非抽象建構函式類型。",
+  "Cannot_assign_to_0_because_it_is_a_class_2629": "無法指派至 '{0}',因為其為類別。",
   "Cannot_assign_to_0_because_it_is_a_constant_2588": "因為 '{0}' 為常數,所以無法指派至 '{0}'。",
+  "Cannot_assign_to_0_because_it_is_a_function_2630": "無法指派至 '{0}',因為其為函式。",
+  "Cannot_assign_to_0_because_it_is_a_namespace_2631": "無法指派至 '{0}',因為其為命名空間。",
   "Cannot_assign_to_0_because_it_is_a_read_only_property_2540": "因為 '{0}' 為唯讀屬性,所以無法指派至 '{0}'。",
+  "Cannot_assign_to_0_because_it_is_an_enum_2628": "無法指派至 '{0}',因為其為列舉。",
+  "Cannot_assign_to_0_because_it_is_an_import_2632": "無法指派至 '{0}',因為其為匯入。",
   "Cannot_assign_to_0_because_it_is_not_a_variable_2539": "無法指派至 '{0}',因為它不是變數。",
+  "Cannot_assign_to_private_method_0_Private_methods_are_not_writable_2803": "無法指派給私人方法 '{0}'。私人方法無法寫入。",
   "Cannot_augment_module_0_because_it_resolves_to_a_non_module_entity_2671": "因為模組 '{0}' 會解析為非模組實體,所以無法加以增強。",
   "Cannot_augment_module_0_with_value_exports_because_it_resolves_to_a_non_module_entity_2649": "無法使用值匯出擴充模組 '{0}',因為其會解析為非模組實體。",
   "Cannot_compile_modules_using_option_0_unless_the_module_flag_is_amd_or_system_6131": "除非 '--module' 旗標為 'amd' 或 'system',否則無法使用選項 '{0}' 編譯模組。",
@@ -292,14 +319,14 @@
   "Cannot_find_name_0_Did_you_mean_1_2552": "找不到名稱 '{0}'。您指的是 '{1}' 嗎?",
   "Cannot_find_name_0_Did_you_mean_the_instance_member_this_0_2663": "找不到名稱 '{0}'。您要找的是此執行個體成員 'this.{0}' 嗎?",
   "Cannot_find_name_0_Did_you_mean_the_static_member_1_0_2662": "找不到名稱 '{0}'。您要找的是此靜態成員 '{1}.{0}' 嗎?",
-  "Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_2583": "找不到名稱 '{0}'。要變更您的目標程式庫嗎? 請嘗試將 'lib' 編譯器選項變更為 '{1}' 或更新版本。",
-  "Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_2584": "找不到名稱 '{0}'。需要變更您的目標程式庫嗎? 請嘗試將 `lib` 編譯器選項變更為包含 'dom'。",
+  "Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_2583": "找不到名稱「{0}」。要變更您的目標程式庫嗎? 請嘗試將 'lib' 編譯器選項變更為「{1}」或更新版本。",
+  "Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_2584": "找不到名稱「{0}」。要變更您的目標程式庫嗎? 請嘗試將 'lib' 編譯器選項變更為包含 'dom'。",
   "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_a_test_runner_Try_npm_i_save_dev_type_2582": "找不到名稱 '{0}'。需要安裝測試執行器的型別定義嗎? 請嘗試 `npm i --save-dev @types/jest` 或 `npm i --save-dev @types/mocha`。",
-  "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_a_test_runner_Try_npm_i_save_dev_type_2593": "找不到名稱 '{0}'。需要安裝測試執行器的型別定義嗎? 請嘗試 `npm i --save-dev @types/jest` 或 `npm i --save-dev @types/mocha`,然後將 `jest` 或 `mocha` 新增至 tsconfig 中的型別欄位。",
+  "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_a_test_runner_Try_npm_i_save_dev_type_2593": "找不到名稱「{0}」。需要為測試執行器安裝類型定義嗎? 請嘗試 `npm i --save-dev @types/jest` 或 `npm i --save-dev @types/mocha`,然後將 `jest` 或 `mocha` 新增至 tsconfig 中的類型欄位。",
   "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_jQuery_Try_npm_i_save_dev_types_Slash_2581": "找不到名稱 '{0}'。需要安裝 jQuery 的型別定義嗎? 請嘗試 `npm i --save-dev @types/jquery`。",
-  "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_jQuery_Try_npm_i_save_dev_types_Slash_2592": "找不到名稱 '{0}'。需要安裝 jQuery 的型別定義嗎? 請嘗試 `npm i --save-dev @types/jquery`,然後將 `jquery` 新增至 tsconfig 中的型別欄位。",
+  "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_jQuery_Try_npm_i_save_dev_types_Slash_2592": "找不到名稱「{0}」。需要為 jQuery 安裝類型定義嗎? 請嘗試 `npm i --save-dev @types/jquery`,然後將 `jquery` 新增至 tsconfig 中的類型欄位。",
   "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_node_Try_npm_i_save_dev_types_Slashno_2580": "找不到名稱 '{0}'。需要安裝節點的型別定義嗎? 請嘗試 `npm i --save-dev @types/node`。",
-  "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_node_Try_npm_i_save_dev_types_Slashno_2591": "找不到名稱 '{0}'。需要安裝節點的型別定義嗎? 請嘗試 `npm i --save-dev @types/node`,然後將 `node` 新增至 tsconfig 中的型別欄位。",
+  "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_node_Try_npm_i_save_dev_types_Slashno_2591": "找不到名稱「{0}」。需要為節點安裝類型定義嗎? 請嘗試 `npm i --save-dev @types/node`,然後將 `node` 新增至 tsconfig 中的類型欄位。",
   "Cannot_find_namespace_0_2503": "找不到命名空間 '{0}'。",
   "Cannot_find_parameter_0_1225": "找不到參數 '{0}'。",
   "Cannot_find_the_common_subdirectory_path_for_the_input_files_5009": "找不到輸入檔的一般子目錄路徑。",
@@ -318,11 +345,13 @@
   "Cannot_redeclare_block_scoped_variable_0_2451": "無法重新宣告區塊範圍變數 '{0}'。",
   "Cannot_redeclare_exported_variable_0_2323": "無法重新宣告匯出的變數 '{0}'。",
   "Cannot_redeclare_identifier_0_in_catch_clause_2492": "無法在 Catch 子句中重新宣告識別碼 '{0}'。",
+  "Cannot_start_a_function_call_in_a_type_annotation_1441": "無法在類型註釋中啟動函式呼叫。",
   "Cannot_update_output_of_project_0_because_there_was_error_reading_file_1_6376": "因為讀取檔案 '{1}' 時發生錯誤,所以無法更新專案 '{0}' 的輸出",
   "Cannot_use_JSX_unless_the_jsx_flag_is_provided_17004": "除非有提供 '--jsx' 旗標,否則無法使用 JSX。",
   "Cannot_use_imports_exports_or_module_augmentations_when_module_is_none_1148": "當 '--module' 為 'none' 時,無法使用匯入、匯出或模組增強指定。",
   "Cannot_use_namespace_0_as_a_type_2709": "不得使用命名空間 '{0}' 作為類型。",
   "Cannot_use_namespace_0_as_a_value_2708": "不得使用命名空間 '{0}' 作為值。",
+  "Cannot_use_this_in_a_static_property_initializer_of_a_decorated_class_2816": "在修飾類別的靜態屬性初始化運算式中,不能使用 'this'。",
   "Cannot_write_file_0_because_it_will_overwrite_tsbuildinfo_file_generated_by_referenced_project_1_6377": "因為檔案 '{0}' 會覆寫所參考專案 '{1}' 產生的 '.tsbuildinfo' 檔案,所以無法寫入該檔案",
   "Cannot_write_file_0_because_it_would_be_overwritten_by_multiple_input_files_5056": "無法寫入檔案 '{0}',原因是其會由多個輸入檔覆寫。",
   "Cannot_write_file_0_because_it_would_overwrite_input_file_5055": "無法寫入檔案 '{0}',原因是其會覆寫輸入檔。",
@@ -334,6 +363,8 @@
   "Change_all_jsdoc_style_types_to_TypeScript_and_add_undefined_to_nullable_types_95031": "將所有 jsdoc 樣式的類型變更為 TypeScript (並為 null 類型新增 '| undefined')",
   "Change_extends_to_implements_90003": "將 [延伸] 變更至 [實作]5D;",
   "Change_spelling_to_0_90022": "將拼字變更為 '{0}'",
+  "Check_for_class_properties_that_are_declared_but_not_set_in_the_constructor_6700": "檢查是否已宣告但未在建構函式中設定的類別屬性。",
+  "Check_that_the_arguments_for_bind_call_and_apply_methods_match_the_original_function_6697": "檢查 `bind`、`call` 和 `apply` 方法的引數是否與原始函式相符。",
   "Checking_if_0_is_the_longest_matching_prefix_for_1_2_6104": "檢查 '{0}' 是否為 '{1}' - '{2}' 的最長相符前置詞。",
   "Circular_definition_of_import_alias_0_2303": "匯入別名 '{0}' 的循環定義。",
   "Circularity_detected_while_resolving_configuration_Colon_0_18000": "解析組態時偵測到循環性: {0}",
@@ -345,7 +376,9 @@
   "Class_0_incorrectly_implements_class_1_Did_you_mean_to_extend_1_and_inherit_its_members_as_a_subclas_2720": "類別 '{0}' 不當實作類別 '{1}'。您是否要擴充 '{1}',並繼承其成員以成為子類別?",
   "Class_0_incorrectly_implements_interface_1_2420": "類別 '{0}' 不正確地實作介面 '{1}'。",
   "Class_0_used_before_its_declaration_2449": "類別 '{0}' 的位置在其宣告之前。",
-  "Class_declarations_cannot_have_more_than_one_augments_or_extends_tag_8025": "類別宣告只可有一個 '@augments' 或 '@extends' 標記。",
+  "Class_declaration_cannot_implement_overload_list_for_0_2813": "類別宣告無法為 '{0}' 實作多載清單。",
+  "Class_declarations_cannot_have_more_than_one_augments_or_extends_tag_8025": "類別宣告不能有一個以上的 `@augments` 或 `@extends` 標籤。",
+  "Class_decorators_can_t_be_used_with_static_private_identifier_Consider_removing_the_experimental_dec_18036": "類別裝飾項目無法與靜態私人識別碼一起使用。請考慮移除實驗性裝飾項目。",
   "Class_name_cannot_be_0_2414": "類別名稱不得為 '{0}'。",
   "Class_name_cannot_be_Object_when_targeting_ES5_with_module_0_2725": "當目標為具有模組 {0} 的 ES5 時,類別名稱不可為 'Object'。",
   "Class_static_side_0_incorrectly_extends_base_class_static_side_1_2417": "類別靜態端 '{0}' 不正確地擴充基底類別靜態端 '{1}'。",
@@ -354,16 +387,25 @@
   "Classes_may_not_have_a_field_named_constructor_18006": "類別不能具有名為 'constructor' 的欄位。",
   "Command_line_Options_6171": "命令列選項",
   "Compile_the_project_given_the_path_to_its_configuration_file_or_to_a_folder_with_a_tsconfig_json_6020": "當路徑為專案組態檔或為 'tsconfig.json' 所在的資料夾時編譯專案。",
+  "Compiler_Diagnostics_6251": "編譯器診斷",
   "Compiler_option_0_expects_an_argument_6044": "編譯器選項 '{0}' 必須要有一個引數。",
+  "Compiler_option_0_may_not_be_used_with_build_5094": "編譯器選項 '--{0}' 不能與 '--build' 一起使用。",
+  "Compiler_option_0_may_only_be_used_with_build_5093": "編譯器選項 '--{0}' 只能與 '--build' 一起使用。",
   "Compiler_option_0_requires_a_value_of_type_1_5024": "編譯器選項 '{0}' 需要類型 {1} 的值。",
   "Compiler_reserves_name_0_when_emitting_private_identifier_downlevel_18027": "降級發出私人識別碼時,編譯器會保留名稱 '{0}'。",
+  "Compiles_the_TypeScript_project_located_at_the_specified_path_6927": "編譯位於指定路徑的 TypeScript 專案",
+  "Compiles_the_current_project_tsconfig_json_in_the_working_directory_6923": "編譯目前的專案 (工作目錄中的 tsconfig.json)。",
+  "Compiles_the_current_project_with_additional_settings_6929": "使用其他設定編譯目前的專案",
+  "Completeness_6257": "完整性",
   "Composite_projects_may_not_disable_declaration_emit_6304": "複合式專案可能未停用宣告發出。",
   "Composite_projects_may_not_disable_incremental_compilation_6379": "複合專案可能不會停用累加編譯。",
+  "Computed_from_the_list_of_input_files_6911": "從輸入檔案清單計算",
   "Computed_property_names_are_not_allowed_in_enums_1164": "列舉中不能有計算的屬性名稱。",
   "Computed_values_are_not_permitted_in_an_enum_with_string_valued_members_2553": "具有字串值成員的列舉中不允許計算值。",
   "Concatenate_and_emit_output_to_single_file_6001": "串連並發出輸出至單一檔案。",
   "Conflicting_definitions_for_0_found_at_1_and_2_Consider_installing_a_specific_version_of_this_librar_4090": "在 '{1}' 和 '{2}' 找到衝突的 '{0}' 定義。請考慮安裝此程式庫的特定版本以解決衝突。",
   "Conflicts_are_in_this_file_6201": "此檔案中有衝突。",
+  "Consider_adding_a_declare_modifier_to_this_class_6506": "請考慮將 'declare' 修飾元加入此類別。",
   "Construct_signature_return_types_0_and_1_are_incompatible_2203": "建構簽章傳回型別 '{0}' 與 '{1}' 不相容。",
   "Construct_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type_7013": "缺少傳回型別註解的建構簽章,隱含有 'any' 傳回型別。",
   "Construct_signatures_with_no_arguments_have_incompatible_return_types_0_and_1_2205": "無引數建構簽章的傳回型別 '{0}' 與 '{1}' 不相容。",
@@ -413,16 +455,24 @@
   "Convert_to_type_only_export_1364": "轉換為僅限類型的匯出",
   "Convert_to_type_only_import_1373": "轉換為僅限類型的匯入",
   "Corrupted_locale_file_0_6051": "地區設定檔 {0} 已損毀。",
+  "Could_not_convert_to_anonymous_function_95153": "無法轉換成匿名函式",
+  "Could_not_convert_to_arrow_function_95151": "無法轉換成箭頭函式",
+  "Could_not_convert_to_named_function_95152": "無法轉換成具名函式",
+  "Could_not_determine_function_return_type_95150": "無法判斷函式傳回型別",
   "Could_not_find_a_containing_arrow_function_95127": "找不到內含箭頭函式",
   "Could_not_find_a_declaration_file_for_module_0_1_implicitly_has_an_any_type_7016": "找不到模組 '{0}' 的宣告檔案。'{1}' 隱含具有 'any' 類型。",
   "Could_not_find_convertible_access_expression_95140": "找不到可轉換的存取運算式",
   "Could_not_find_export_statement_95129": "找不到匯出陳述式",
   "Could_not_find_import_clause_95131": "找不到匯入子句",
   "Could_not_find_matching_access_expressions_95141": "找不到相符的存取運算式",
+  "Could_not_find_name_0_Did_you_mean_1_2570": "找不到名稱 '{0}'。您是不是指 '{1}'?",
   "Could_not_find_namespace_import_or_named_imports_95132": "找不到命名空間匯入或具名匯入",
   "Could_not_find_property_for_which_to_generate_accessor_95135": "找不到要為其產生存取子的屬性",
   "Could_not_resolve_the_path_0_with_the_extensions_Colon_1_6231": "無法解析具有下列延伸模組的路徑 '{0}': {1}。",
   "Could_not_write_file_0_Colon_1_5033": "無法編寫檔案 '{0}': {1}。",
+  "Create_source_map_files_for_emitted_JavaScript_files_6694": "建立發出 JavaScript 檔案的來源對應檔。",
+  "Create_sourcemaps_for_d_ts_files_6614": "為 d.ts 檔案建立 sourcemap。",
+  "Creates_a_tsconfig_json_with_the_recommended_settings_in_the_working_directory_6926": "使用建議設定在工作目錄中建立 tsconfig.json。",
   "DIRECTORY_6038": "目錄",
   "Declaration_augments_declaration_in_another_file_This_cannot_be_serialized_6232": "宣告會讓另一個檔案中的宣告增加。這無法序列化。",
   "Declaration_emit_for_this_file_requires_using_private_name_0_An_explicit_type_annotation_may_unblock_9005": "此檔案的宣告發出必須使用私人名稱 '{0}'。明確的型別註解可能會解除封鎖宣告發出。",
@@ -430,6 +480,7 @@
   "Declaration_expected_1146": "必須是宣告。",
   "Declaration_name_conflicts_with_built_in_global_identifier_0_2397": "宣告名稱與內建全域識別碼 '{0}' 衝突。",
   "Declaration_or_statement_expected_1128": "必須是宣告或陳述式。",
+  "Declaration_or_statement_expected_This_follows_a_block_of_statements_so_if_you_intended_to_write_a_d_2809": "必須是宣告或陳述式。這個 '=' 會跟著陳述式區塊,因此如果您想要撰寫解構指派,就可能需要在整個指派的前後加上括弧。",
   "Declarations_with_definite_assignment_assertions_must_also_have_type_annotations_1264": "包含明確指派判斷提示的宣告也必須包含類型註釋。",
   "Declarations_with_initializers_cannot_also_have_definite_assignment_assertions_1263": "包含初始設定式的宣告不得同時包含明確指派判斷提示。",
   "Declare_a_private_field_named_0_90053": "宣告名為 '{0}' 的私人欄位。",
@@ -441,7 +492,11 @@
   "Declare_static_property_0_90027": "宣告靜態屬性 '{0}'",
   "Decorators_are_not_valid_here_1206": "裝飾項目在此處無效。",
   "Decorators_cannot_be_applied_to_multiple_get_Slashset_accessors_of_the_same_name_1207": "無法將裝飾項目套用至多個同名的 get/set 存取子。",
+  "Decorators_may_not_be_applied_to_this_parameters_1433": "裝飾項目無法套用至 'this' 參數。",
+  "Decorators_must_precede_the_name_and_all_keywords_of_property_declarations_1436": "裝飾項目必須在屬性宣告的名稱和所有關鍵詞之前。",
   "Default_export_of_the_module_has_or_is_using_private_name_0_4082": "模組的預設匯出具有或正在使用私用名稱 '{0}'。",
+  "Default_library_1424": "預設程式庫",
+  "Default_library_for_target_0_1425": "目標 '{0}' 的預設程式庫",
   "Definitions_of_the_following_identifiers_conflict_with_those_in_another_file_Colon_0_6200": "下列識別碼的定義與其他檔案中的定義衝突: {0}",
   "Delete_all_unused_declarations_95024": "刪除所有未使用的宣告",
   "Delete_all_unused_imports_95147": "刪除所有未使用的匯入",
@@ -449,6 +504,7 @@
   "Deprecated_Use_jsxFactory_instead_Specify_the_object_invoked_for_createElement_when_targeting_react__6084": "[即將淘汰] 請改用 '--jsxFactory'。當目標為 'react' JSX 發出時,為 createElement 指定所叫用的物件",
   "Deprecated_Use_outFile_instead_Concatenate_and_emit_output_to_single_file_6170": "[即將淘汰] 請改用 '--outFile'。 串連輸出並將其發出到單一檔案",
   "Deprecated_Use_skipLibCheck_instead_Skip_type_checking_of_default_library_declaration_files_6160": "[即將淘汰] 請改用 '--skipLibCheck'。跳過預設程式庫宣告檔案的類型檢查。",
+  "Deprecated_setting_Use_outFile_instead_6677": "已淘汰的設定值。請改用 `outFile`。",
   "Did_you_forget_to_use_await_2773": "忘了要使用 'await' 嗎?",
   "Did_you_mean_0_1369": "您指 '{0}' 嗎?",
   "Did_you_mean_for_0_to_be_constrained_to_type_new_args_Colon_any_1_2735": "您是要將 '{0}' 限制為類型 'new (...args: any[]) => {1}' 嗎?",
@@ -459,12 +515,30 @@
   "Did_you_mean_to_use_new_with_this_expression_6213": "您是要對此運算式使用 'new' 嗎?",
   "Digit_expected_1124": "必須是數字。",
   "Directory_0_does_not_exist_skipping_all_lookups_in_it_6148": "目錄 '{0}' 不存在,將會跳過其中所有查閱。",
+  "Disable_adding_use_strict_directives_in_emitted_JavaScript_files_6669": "停用在發出的 JavaScript 檔案中新增 'use strict' 指示詞。",
   "Disable_checking_for_this_file_90018": "停用此檔案的檢查",
+  "Disable_emitting_comments_6688": "停用發出註解。",
+  "Disable_emitting_declarations_that_have_internal_in_their_JSDoc_comments_6701": "停用其 JSDoc 註解中具有 `@internal` 的發出宣告。",
+  "Disable_emitting_file_from_a_compilation_6660": "停用從編譯發出檔案。",
+  "Disable_emitting_files_if_any_type_checking_errors_are_reported_6662": "如果報告任何型別檢查錯誤,則停用發出的檔案。",
+  "Disable_erasing_const_enum_declarations_in_generated_code_6682": "停用在產生的程式碼中抹除 `const enum` 宣告。",
+  "Disable_error_reporting_for_unreachable_code_6603": "停用無法執行到的程式碼錯誤報告。",
+  "Disable_error_reporting_for_unused_labels_6604": "停用未使用標籤的錯誤報表。",
+  "Disable_generating_custom_helper_functions_like_extends_in_compiled_output_6661": "停用在編譯輸出中產生自訂的協助程式函式,例如 `__extends`。",
+  "Disable_including_any_library_files_including_the_default_lib_d_ts_6670": "停用包括任何程式庫檔案,包括預設的 lib.d.ts。",
   "Disable_loading_referenced_projects_6235": "停用載入參考的專案。",
+  "Disable_preferring_source_files_instead_of_declaration_files_when_referencing_composite_projects_6620": "參考複合專案時,停用偏好的來源檔案而不是宣告檔案",
+  "Disable_reporting_of_excess_property_errors_during_the_creation_of_object_literals_6702": "在建立物件常值期間停用多餘屬性錯誤報告。",
+  "Disable_resolving_symlinks_to_their_realpath_This_correlates_to_the_same_flag_in_node_6683": "停用將 symlinks 解析為其 realpath。這與節點中的相同旗標有關。",
   "Disable_size_limitations_on_JavaScript_projects_6162": "停用 JavaScript 專案的大小限制。",
   "Disable_solution_searching_for_this_project_6224": "停用此專案的解決方案搜尋。",
-  "Disable_strict_checking_of_generic_signatures_in_function_types_6185": "停用函式類型中一般簽章的 Strict 檢查。",
+  "Disable_strict_checking_of_generic_signatures_in_function_types_6673": "停用函式類型中一般簽章的 Strict 檢查。",
+  "Disable_the_type_acquisition_for_JavaScript_projects_6625": "停用 JavaScript 專案的類型取得",
+  "Disable_truncating_types_in_error_messages_6663": "停用錯誤訊息中的截斷類型。",
   "Disable_use_of_source_files_instead_of_declaration_files_from_referenced_projects_6221": "停用來源檔案,而非所參考專案中的宣告檔案。",
+  "Disable_wiping_the_console_in_watch_mode_6684": "停用在監看模式中抹除主控台",
+  "Disables_inference_for_type_acquisition_by_looking_at_filenames_in_a_project_6616": "透過查看專案中的檔案名,停用型別推斷的取得。",
+  "Disallow_import_s_require_s_or_reference_s_from_expanding_the_number_of_files_TypeScript_should_add__6672": "不允許 `import`、`require` 或 `<reference>` 擴充 TypeScript 應該加入專案的檔案數目。",
   "Disallow_inconsistently_cased_references_to_the_same_file_6078": "不允許相同檔案大小寫不一致的參考。",
   "Do_not_add_triple_slash_references_or_imported_modules_to_the_list_of_compiled_files_6159": "不要在編譯後的檔案清單中新增三道斜線的參考或匯入的模組。",
   "Do_not_emit_comments_to_output_6009": "請勿將註解發出到輸出。",
@@ -483,31 +557,48 @@
   "Duplicate_identifier_0_2300": "識別碼 '{0}' 重複。",
   "Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module_2441": "識別碼 '{0}' 重複。編譯器會將名稱 '{1}' 保留在模組的最上層範圍中。",
   "Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module_containing_async_func_2529": "識別碼 '{0}' 重複。編譯器會將名稱 '{1}' 保留在含有非同步函式模組的最上層範圍中。",
+  "Duplicate_identifier_0_Compiler_reserves_name_1_when_emitting_super_references_in_static_initializer_2818": "識別碼 '{0}' 重複。在靜態初始設定式中發出 'super' 參考時,編譯器會保留名稱 '{1}'。",
   "Duplicate_identifier_0_Compiler_uses_declaration_1_to_support_async_functions_2520": "識別碼 '{0}' 重複。編譯器會使用宣告 '{1}' 支援非同步函式。",
+  "Duplicate_identifier_0_Static_and_instance_elements_cannot_share_the_same_private_name_2804": "重複的識別碼 '{0}'。靜態與執行個體元素不得共用相同的私人名稱。",
   "Duplicate_identifier_arguments_Compiler_uses_arguments_to_initialize_rest_parameters_2396": "識別碼 'arguments'' 重複。編譯器會使用 'arguments' 來初始化剩餘參數。",
   "Duplicate_identifier_newTarget_Compiler_uses_variable_declaration_newTarget_to_capture_new_target_me_2543": "識別碼 '_newTarget' 重複。編譯器使用變數宣告 '_newTarget' 擷取 'new.target' 中繼屬性參考。",
   "Duplicate_identifier_super_Compiler_uses_super_to_capture_base_class_reference_2401": "識別碼 '_super' 重複。編譯器會使用 '_super' 來擷取基底類別參考。",
   "Duplicate_identifier_this_Compiler_uses_variable_declaration_this_to_capture_this_reference_2399": "識別碼 '_this' 重複。編譯器會使用變數宣告 '_this' 來擷取 'this' 參考。",
+  "Duplicate_index_signature_for_type_0_2374": "類型 '{0}' 的索引簽章重複。",
   "Duplicate_label_0_1114": "標籤 '{0}' 重複。",
-  "Duplicate_number_index_signature_2375": "數字索引簽章重複。",
   "Duplicate_property_0_2718": "屬性 '{0}' 重複。",
-  "Duplicate_string_index_signature_2374": "字串索引簽章重複。",
   "Dynamic_import_cannot_have_type_arguments_1326": "動態匯入不可有型別引數。",
   "Dynamic_import_must_have_one_specifier_as_an_argument_1324": "動態匯入必須有一個指定名稱作為引數。",
   "Dynamic_import_s_specifier_must_be_of_type_string_but_here_has_type_0_7036": "動態匯入的指定名稱必須屬於類型 'string',但這裡的類型為 '{0}'。",
   "Dynamic_imports_are_only_supported_when_the_module_flag_is_set_to_es2020_esnext_commonjs_amd_system__1323": "只有在 '--module' 旗標設定為 'es2020'、'esnext'、'commonjs'、'amd'、'system' 或 'umd' 時,才支援動態匯入。",
   "Each_member_of_the_union_type_0_has_construct_signatures_but_none_of_those_signatures_are_compatible_2762": "等位型別 '{0}' 的每個成員都有建構簽章,但這些簽章都互不相容。",
   "Each_member_of_the_union_type_0_has_signatures_but_none_of_those_signatures_are_compatible_with_each_2758": "等位型別 '{0}' 的每個成員都有簽章,但這些簽章都互不相容。",
-  "Element_at_index_0_is_variadic_in_one_type_but_not_in_the_other_2622": "位於索引 {0} 的元素在一個類型中是可變參數,但在另一個類型中不是。",
+  "Editor_Support_6249": "編輯器支援",
   "Element_implicitly_has_an_any_type_because_expression_of_type_0_can_t_be_used_to_index_type_1_7053": "因為 '{0}' 類型的運算式無法用於索引類型 '{1}',所以項目隱含 'any' 類型。",
   "Element_implicitly_has_an_any_type_because_index_expression_is_not_of_type_number_7015": "因為索引運算式不屬於類型 'number',所以元素具有隱含 'any' 類型。",
   "Element_implicitly_has_an_any_type_because_type_0_has_no_index_signature_7017": "元素隱含地擁有 'any' 類型,因為類型 '{0}' 不具索引簽章。",
   "Element_implicitly_has_an_any_type_because_type_0_has_no_index_signature_Did_you_mean_to_call_1_7052": "因為類型 '{0}' 沒有索引簽章,所以項目隱含 'any' 類型。您是要呼叫 '{1}' 嗎?",
-  "Emit_a_UTF_8_Byte_Order_Mark_BOM_in_the_beginning_of_output_files_6164": "在輸出檔的開頭發出 UTF-8 位元組順序標記 (BOM)。",
+  "Emit_6246": "發出",
+  "Emit_ECMAScript_standard_compliant_class_fields_6712": "發出 ECMAScript 標準相容類別欄位。",
+  "Emit_a_UTF_8_Byte_Order_Mark_BOM_in_the_beginning_of_output_files_6622": "在輸出檔的開頭發出 UTF-8 位元組順序標記 (BOM)。",
   "Emit_a_single_file_with_source_maps_instead_of_having_a_separate_file_6151": "發出單一檔案包含來源對應,而不要使用個別的檔案。",
+  "Emit_a_v8_CPU_profile_of_the_compiler_run_for_debugging_6638": "發出用於偵錯的編譯器執行 v8 CPU 設定檔。",
+  "Emit_additional_JavaScript_to_ease_support_for_importing_CommonJS_modules_This_enables_allowSyntheti_6626": "發出其他 JavaScript,以輕鬆支援匯入 CommonJS 模組。這會啟用 `allowSyntheticDefaultImports` 進行類型相容性。",
   "Emit_class_fields_with_Define_instead_of_Set_6222": "使用 Define 而非 Set 發出類別欄位。",
+  "Emit_design_type_metadata_for_decorated_declarations_in_source_files_6624": "發出來源檔案中修飾式宣告的設計型別中繼資料。",
+  "Emit_more_compliant_but_verbose_and_less_performant_JavaScript_for_iteration_6621": "針對反覆項目發出更符合規範,但具詳細資訊及較低效能 JavaScript。",
   "Emit_the_source_alongside_the_sourcemaps_within_a_single_file_requires_inlineSourceMap_or_sourceMap__6152": "使用單一檔案發出來源與來源對應。必須設定 '--inlineSourceMap' 或 '--sourceMap'。",
   "Enable_all_strict_type_checking_options_6180": "啟用所有 Strict 類型檢查選項。",
+  "Enable_color_and_formatting_in_output_to_make_compiler_errors_easier_to_read_6685": "在輸出中啟用色彩及格式化,讓編譯器錯誤更容易閱讀",
+  "Enable_constraints_that_allow_a_TypeScript_project_to_be_used_with_project_references_6611": "啟用允許 TypeScript 專案搭配專案參考使用的條件約束。",
+  "Enable_error_reporting_for_codepaths_that_do_not_explicitly_return_in_a_function_6667": "啟用未在函式中明確傳回之 codepaths 的錯誤報吿。",
+  "Enable_error_reporting_for_expressions_and_declarations_with_an_implied_any_type_6665": "啟用具有隱含 `any` 類型的運算式及宣告之錯誤報告。",
+  "Enable_error_reporting_for_fallthrough_cases_in_switch_statements_6664": "啟用 switch 陳述式中 fallthrough 案例的錯誤報表。",
+  "Enable_error_reporting_in_type_checked_JavaScript_files_6609": "在已完成型別檢查的 JavaScript 檔案中啟用錯誤報表。",
+  "Enable_error_reporting_when_a_local_variables_aren_t_read_6675": "當未讀取區域變數時,啟用錯誤報吿。",
+  "Enable_error_reporting_when_this_is_given_the_type_any_6668": "為 `this` 指定類型 `any` 時,啟用錯誤報表。",
+  "Enable_experimental_support_for_TC39_stage_2_draft_decorators_6630": "啟用 TC39 第 2 階段草稿裝飾項目的實驗性支援。",
+  "Enable_importing_json_files_6689": "啟用匯入 json 檔案",
   "Enable_incremental_compilation_6378": "啟用累加編譯",
   "Enable_project_compilation_6302": "啟用專案編譯",
   "Enable_strict_bind_call_and_apply_methods_on_functions_6214": "對函式啟用嚴格的 'bind'、'call' 及 'apply' 方法。",
@@ -517,11 +608,20 @@
   "Enable_the_experimentalDecorators_option_in_your_configuration_file_95074": "在您的組態檔中啟用 'experimentalDecorators' 選項",
   "Enable_the_jsx_flag_in_your_configuration_file_95088": "在您的組態檔中啟用 '--jsx' 旗標",
   "Enable_tracing_of_the_name_resolution_process_6085": "啟用名稱解析流程的追蹤。",
-  "Enable_verbose_logging_6366": "啟用詳細資訊記錄",
+  "Enable_verbose_logging_6713": "啟用詳細資訊記錄",
   "Enables_emit_interoperability_between_CommonJS_and_ES_Modules_via_creation_of_namespace_objects_for__7037": "透過為所有匯入建立命名空間物件,讓 CommonJS 和 ES 模組之間的產出有互通性。意指 'allowSyntheticDefaultImports'。",
   "Enables_experimental_support_for_ES7_async_functions_6068": "啟用 ES7 非同步函式的實驗支援。",
   "Enables_experimental_support_for_ES7_decorators_6065": "啟用 ES7 裝飾項目的實驗支援。",
   "Enables_experimental_support_for_emitting_type_metadata_for_decorators_6066": "啟用實驗支援以發出裝飾項目類型的中繼資料。",
+  "Enforces_using_indexed_accessors_for_keys_declared_using_an_indexed_type_6671": "對使用索引型別宣告的索引鍵強制使用索引存取子",
+  "Ensure_overriding_members_in_derived_classes_are_marked_with_an_override_modifier_6666": "請確認衍生類別中的覆寫成員已標上 override 修飾元。",
+  "Ensure_that_casing_is_correct_in_imports_6637": "請確認 Imports 中的大小寫正確。",
+  "Ensure_that_each_file_can_be_safely_transpiled_without_relying_on_other_imports_6645": "確保每個檔案都可安全地轉譯,而不依賴其他匯入。",
+  "Ensure_use_strict_is_always_emitted_6605": "確保永遠發出 'use strict'。",
+  "Entry_point_for_implicit_type_library_0_1420": "隱含型別程式庫 '{0}' 的進入點",
+  "Entry_point_for_implicit_type_library_0_with_packageId_1_1421": "具有 packageId '{1}' 的隱含型別程式庫 '{0}' 進入點",
+  "Entry_point_of_type_library_0_specified_in_compilerOptions_1417": "在 CompilerOptions 中指定的型別程式庫 '{0}' 進入點",
+  "Entry_point_of_type_library_0_specified_in_compilerOptions_with_packageId_1_1418": "具有 packageId '{1}' 且在 CompilerOptions 中指定的型別程式庫 '{0}' 進入點",
   "Enum_0_used_before_its_declaration_2450": "列舉 '{0}' 的位置在其宣告之前。",
   "Enum_declarations_can_only_merge_with_namespace_or_other_enum_declarations_2567": "列舉宣告只能與命名空間或其他列舉宣告合併。",
   "Enum_declarations_must_all_be_const_or_non_const_2473": "列舉宣告必須都是 const 或非 const。",
@@ -535,15 +635,13 @@
   "Expected_0_1_type_arguments_provide_these_with_an_extends_tag_8027": "必須是 {0}-{1} 型別引數; 請提供有 '@ extends' 標記的這類型引數。",
   "Expected_0_arguments_but_got_1_2554": "應有 {0} 個引數,但得到 {1} 個。",
   "Expected_0_arguments_but_got_1_Did_you_forget_to_include_void_in_your_type_argument_to_Promise_2794": "應為 {0} 個引數,但現有 {1} 個。是否忘記將型別引數中的 'void' 納入 'Promise' 中?",
-  "Expected_0_arguments_but_got_1_or_more_2556": "應有 {0} 個引數,但得到 {1} 個或更多。",
   "Expected_0_type_arguments_but_got_1_2558": "應有 {0} 個型別引數,但得到 {1} 個。",
   "Expected_0_type_arguments_provide_these_with_an_extends_tag_8026": "必須是 {0} 型別引數; 請提供有 '@ extends' 標記的這類引數。",
   "Expected_at_least_0_arguments_but_got_1_2555": "至少應有 {0} 個引數,但得到 {1} 個。",
-  "Expected_at_least_0_arguments_but_got_1_or_more_2557": "應有至少 {0} 個引數,但得到 {1} 個或更多。",
   "Expected_corresponding_JSX_closing_tag_for_0_17002": "'{0}' 需要對應的 JSX 結尾標記。",
   "Expected_corresponding_closing_tag_for_JSX_fragment_17015": "JSX 片段必須有對應的結尾標記。",
+  "Expected_for_property_initializer_1442": "屬性初始設定式必須是 '='。",
   "Expected_type_of_0_field_in_package_json_to_be_1_got_2_6105": "在 'package.json' 中 '{0}' 欄位的類型必須為 '{1}',但取得 '{2}'。",
-  "Experimental_Options_6177": "實驗性選項",
   "Experimental_support_for_decorators_is_a_feature_that_is_subject_to_change_in_a_future_release_Set_t_1219": "裝飾項目的實驗性支援是未來版本中可能會變更的功能。在 'tsconfig' 或 'jsconfig' 中設定 'experimentalDecorators' 選項可移除此警告。",
   "Explicitly_specified_module_resolution_kind_Colon_0_6087": "明確指定的模組解析種類: '{0}'。",
   "Exponentiation_cannot_be_performed_on_bigint_values_unless_the_target_option_is_set_to_es2016_or_lat_2791": "'target' 選項必須設定為 'es2016' 或更新版本,才可以對 'bigint' 值執行乘冪運算。",
@@ -554,12 +652,14 @@
   "Exported_external_package_typings_file_0_is_not_a_module_Please_contact_the_package_author_to_update_2656": "匯出的外部封裝類型檔案 '{0}' 不是模組。請連絡封裝作者以更新封裝定義。",
   "Exported_external_package_typings_file_cannot_contain_tripleslash_references_Please_contact_the_pack_2654": "匯出的外部封裝類型檔案不得包含三斜線的參考。請連絡封裝作者以更新封裝定義。",
   "Exported_type_alias_0_has_or_is_using_private_name_1_4081": "匯出的類型別名 '{0}' 具有或使用私用名稱 '{1}'。",
+  "Exported_type_alias_0_has_or_is_using_private_name_1_from_module_2_4084": "匯出的類型別名 '{0}' 具有或使用模組 {2} 中的私人名稱 '{1}'。",
   "Exported_variable_0_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4023": "匯出的變數 '{0}' 具有或使用外部模組 {2} 中的名稱 '{1}',但無法命名。",
   "Exported_variable_0_has_or_is_using_name_1_from_private_module_2_4024": "匯出的變數 '{0}' 具有或使用私用模組 {2} 中的名稱 '{1}'。",
   "Exported_variable_0_has_or_is_using_private_name_1_4025": "匯出的變數 '{0}' 具有或使用私用名稱 '{1}'。",
   "Exports_and_export_assignments_are_not_permitted_in_module_augmentations_2666": "模組增強指定中不允許匯出及匯出指派。",
   "Expression_expected_1109": "必須是運算式。",
   "Expression_or_comma_expected_1137": "必須是運算式或逗號。",
+  "Expression_produces_a_tuple_type_that_is_too_large_to_represent_2800": "運算式產生的元組類型太大而無法表示。",
   "Expression_produces_a_union_type_that_is_too_complex_to_represent_2590": "運算式產生的等位型別過於複雜而無法表示。",
   "Expression_resolves_to_super_that_compiler_uses_to_capture_base_class_reference_2402": "運算式會解析成 '_super',而編譯器會使用其來擷取基底類別參考。",
   "Expression_resolves_to_variable_declaration_0_that_compiler_uses_to_support_async_functions_2521": "運算式會解析成變數宣告 '{0}',而編譯器會使用此宣告支援非同步函式。",
@@ -579,7 +679,9 @@
   "Failed_to_parse_file_0_Colon_1_5014": "無法剖析檔案 '{0}': {1}。",
   "Fallthrough_case_in_switch_7029": "參數中的 fallthrough 案例。",
   "File_0_does_not_exist_6096": "檔案 '{0}' 不存在。",
+  "File_0_does_not_exist_according_to_earlier_cached_lookups_6240": "根據之前快取的查閱,檔案 '{0}' 不存在。",
   "File_0_exist_use_it_as_a_name_resolution_result_6097": "檔案 '{0}' 存在 - 將其作為名稱解析結果使用。",
+  "File_0_exists_according_to_earlier_cached_lookups_6239": "根據之前快取的查閱,檔案 '{0}' 存在。",
   "File_0_has_an_unsupported_extension_The_only_supported_extensions_are_1_6054": "不支援檔案 '{0}' 的副檔名。支援的副檔名只有 {1}。",
   "File_0_has_an_unsupported_extension_so_skipping_it_6081": "因為不支援檔案 '{0}' 的副檔名,所以將其跳過。",
   "File_0_is_a_JavaScript_file_Did_you_mean_to_enable_the_allowJs_option_6504": "檔案 '{0}' 為 JavaScript 檔案。您是要啟用 'allowJs' 選項嗎?",
@@ -587,16 +689,32 @@
   "File_0_is_not_listed_within_the_file_list_of_project_1_Projects_must_list_all_files_or_use_an_includ_6307": "檔案 '{0}' 未列於專案 '{1}' 的檔案清單內。專案必須列出所有檔案,或使用 'include' 模式。",
   "File_0_is_not_under_rootDir_1_rootDir_is_expected_to_contain_all_source_files_6059": "檔案 '{0}' 不在 'rootDir' '{1}' 之下。'rootDir' 必須包含所有原始程式檔。",
   "File_0_not_found_6053": "找不到檔案 '{0}'。",
+  "File_Management_6245": "檔案管理",
   "File_change_detected_Starting_incremental_compilation_6032": "偵測到檔案變更。正在啟動累加編譯...",
   "File_is_a_CommonJS_module_it_may_be_converted_to_an_ES6_module_80001": "檔案為 CommonJS 模組; 其可轉換為 ES6 模組。",
+  "File_is_default_library_for_target_specified_here_1426": "檔案是此處指定目標的預設程式庫。",
+  "File_is_entry_point_of_type_library_specified_here_1419": "檔案是此處指定型別程式庫的進入點。",
+  "File_is_included_via_import_here_1399": "檔案透過匯入加入此處。",
+  "File_is_included_via_library_reference_here_1406": "檔案透過程式庫參考加入此處。",
+  "File_is_included_via_reference_here_1401": "檔案透過參考加入此處。",
+  "File_is_included_via_type_library_reference_here_1404": "檔案透過型別程式庫參考加入此處。",
+  "File_is_library_specified_here_1423": "檔案是此處指定的程式庫。",
+  "File_is_matched_by_files_list_specified_here_1410": "檔案會依此處指定的 'files' 清單比對。",
+  "File_is_matched_by_include_pattern_specified_here_1408": "檔案會依此處指定的包含模式比對。",
+  "File_is_output_from_referenced_project_specified_here_1413": "檔案是此處指定的參考專案輸出。",
+  "File_is_output_of_project_reference_source_0_1428": "檔案是專案參考來源 '{0}' 的輸出",
+  "File_is_source_from_referenced_project_specified_here_1416": "檔案是此處指定參考專案的來源。",
   "File_name_0_differs_from_already_included_file_name_1_only_in_casing_1149": "檔案名稱 '{0}' 與包含的檔案名稱 '{1}' 只差在大小寫。",
   "File_name_0_has_a_1_extension_stripping_it_6132": "檔案名稱 '{0}' 的副檔名為 '{1}'。正予以移除。",
+  "File_redirects_to_file_0_1429": "檔案會重新導向檔案 '{0}'",
   "File_specification_cannot_contain_a_parent_directory_that_appears_after_a_recursive_directory_wildca_5065": "檔案規格不得包含出現在遞迴目錄萬用字元 ('**') 之後的父目錄 ('..'): '{0}'。",
   "File_specification_cannot_end_in_a_recursive_directory_wildcard_Asterisk_Asterisk_Colon_0_5010": "檔案規格不能以遞迴目錄萬用字元 ('**') 結尾: '{0}'。",
+  "Filters_results_from_the_include_option_6627": "從 `include` 選項篩選結果。",
   "Fix_all_detected_spelling_errors_95026": "修正偵測到的所有拼字錯誤",
   "Fix_all_expressions_possibly_missing_await_95085": "修正所有可能缺少 'await' 的運算式",
   "Fix_all_implicit_this_errors_95107": "修正所有隱含 'this' 的錯誤",
   "Fix_all_incorrect_return_type_of_an_async_functions_90037": "修正非同步函式所有不正確的傳回型別",
+  "For_await_loops_cannot_be_used_inside_a_class_static_block_18038": "'for await' 迴圈無法在類別靜態區塊內使用。",
   "Found_0_errors_6217": "找到 {0} 個錯誤。",
   "Found_0_errors_Watching_for_file_changes_6194": "找到 {0} 個錯誤。正在監看檔案變更。",
   "Found_1_error_6216": "找到 1 個錯誤。",
@@ -610,11 +728,14 @@
   "Function_implementation_name_must_be_0_2389": "函式實作名稱必須是 '{0}'。",
   "Function_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_ref_7024": "函式因為沒有傳回型別註解,並在其中一個傳回運算式中直接或間接參考了自己,所以隱含了傳回型別 'any'。",
   "Function_lacks_ending_return_statement_and_return_type_does_not_include_undefined_2366": "函式缺少結束 return 陳述式,且傳回類型不包括 'undefined'。",
+  "Function_not_implemented_95159": "未實作函式。",
   "Function_overload_must_be_static_2387": "函式多載必須為靜態。",
   "Function_overload_must_not_be_static_2388": "函式多載不可為靜態。",
   "Function_type_notation_must_be_parenthesized_when_used_in_a_union_type_1385": "在等位型別中使用函式類型標記法時,必須括以括弧。",
   "Function_type_notation_must_be_parenthesized_when_used_in_an_intersection_type_1387": "在交集型別中使用函式類型標記法時,必須括以括弧。",
   "Function_type_which_lacks_return_type_annotation_implicitly_has_an_0_return_type_7014": "缺少傳回型別註解的函式類型隱含 '{0}' 傳回型別。",
+  "Function_with_bodies_can_only_merge_with_classes_that_are_ambient_2814": "包含主體的函式只能與屬於環境的類別合併。",
+  "Generate_d_ts_files_from_TypeScript_and_JavaScript_files_in_your_project_6612": "從專案中的 TypeScript 和 JavaScript 檔案產生 .d.ts 檔案。",
   "Generate_get_and_set_accessors_95046": "產生 'get' 與 'set' 存取子",
   "Generate_get_and_set_accessors_for_all_overriding_properties_95119": "為所有覆寫屬性產生 'get' 和 'set' 存取子",
   "Generates_a_CPU_profile_6223": "產生 CPU 設定檔。",
@@ -627,13 +748,13 @@
   "Generators_are_only_available_when_targeting_ECMAScript_2015_or_higher_1220": "只有在目標為 ECMAScript 2015 或更高版本時,才可使用產生器。",
   "Generic_type_0_requires_1_type_argument_s_2314": "泛型類型 '{0}' 需要 {1} 個型別引數。",
   "Generic_type_0_requires_between_1_and_2_type_arguments_2707": "泛型型別 '{0}' 需要介於 {1} 和 {2} 之間的型別引數。",
-  "Getter_and_setter_accessors_do_not_agree_in_visibility_2379": "getter 和 setter 存取子的可見度不符。",
   "Global_module_exports_may_only_appear_at_top_level_1316": "全域模組匯出只能顯示在最上層。",
   "Global_module_exports_may_only_appear_in_declaration_files_1315": "全域模組匯出只能顯示在宣告檔案中。",
   "Global_module_exports_may_only_appear_in_module_files_1314": "全域模組匯出只能顯示在模組檔案中。",
   "Global_type_0_must_be_a_class_or_interface_type_2316": "全域類型 '{0}' 必須是類別或介面類型。",
   "Global_type_0_must_have_1_type_parameter_s_2317": "全域類型 '{0}' 必須要有 {1} 個型別參數。",
   "Have_recompiles_in_incremental_and_watch_assume_that_changes_within_a_file_will_only_affect_files_di_6384": "於 '--incremental' 與 '--watch' 中重新編譯時,會假設檔案中的變更只會影響直接相依於重新編譯的檔案。",
+  "Have_recompiles_in_projects_that_use_incremental_and_watch_mode_assume_that_changes_within_a_file_wi_6606": "在使用 `incremental` 與 `watch` 模式的專案中重新編譯,會假設檔案中的變更只會影響直接相依於重新編譯的檔案。",
   "Hexadecimal_digit_expected_1125": "必須適十六進位數字。",
   "Identifier_expected_0_is_a_reserved_word_at_the_top_level_of_a_module_1262": "需要識別碼。'{0}' 是模組的頂層保留字。",
   "Identifier_expected_0_is_a_reserved_word_in_strict_mode_1212": "必須是識別碼。'{0}' 在 strict 模式中為保留字。",
@@ -642,8 +763,9 @@
   "Identifier_expected_0_is_a_reserved_word_that_cannot_be_used_here_1359": "必須為識別碼。'{0}' 為保留字,此處不可使用。",
   "Identifier_expected_1003": "必須是識別碼。",
   "Identifier_expected_esModule_is_reserved_as_an_exported_marker_when_transforming_ECMAScript_modules_1216": "必須有識別碼。'__esModule' 已保留為轉換 ECMAScript 模組時匯出的標記。",
-  "If_the_0_package_actually_exposes_this_module_consider_sending_a_pull_request_to_amend_https_Colon_S_7040": "如果 '{0}' 套件的確公開了此模組,請考慮傳送提取要求以修改 'https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/{1}`",
+  "If_the_0_package_actually_exposes_this_module_consider_sending_a_pull_request_to_amend_https_Colon_S_7040": "如果「{0}」套件實際上公開了此模組,請考慮傳送提取要求以修改 「https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/{1}」",
   "Ignore_this_error_message_90019": "略過此錯誤訊息",
+  "Ignoring_tsconfig_json_compiles_the_specified_files_with_default_compiler_options_6924": "忽略 tsconfig.json,使用預設編譯器選項編譯指定的檔案",
   "Implement_all_inherited_abstract_classes_95040": "實作所有繼承的抽象類別",
   "Implement_all_unimplemented_interfaces_95032": "實作所有未實作的介面",
   "Implement_inherited_abstract_class_90007": "實作已繼承的抽象類別",
@@ -660,14 +782,23 @@
   "Import_may_be_converted_to_a_default_import_80003": "匯入可轉換成預設匯入。",
   "Import_name_cannot_be_0_2438": "匯入名稱不得為 '{0}'。",
   "Import_or_export_declaration_in_an_ambient_module_declaration_cannot_reference_module_through_relati_2439": "環境模組宣告中的匯入或匯出宣告,不得透過相對模組名稱參考模組。",
+  "Imported_via_0_from_file_1_1393": "透過 {0} 從檔案 '{1}' 匯入",
+  "Imported_via_0_from_file_1_to_import_importHelpers_as_specified_in_compilerOptions_1395": "透過 {0} 從檔案 '{1}' 匯入,以 CompilerOptions 指定的方式匯入 'ImportHelpers'",
+  "Imported_via_0_from_file_1_to_import_jsx_and_jsxs_factory_functions_1397": "透過 {0} 從檔案 '{1}' 匯入,匯入 'jsx' 和 'jsxs' 處理站函式",
+  "Imported_via_0_from_file_1_with_packageId_2_1394": "透過 {0} 從檔案 '{1}' (packageId 為 '{2}') 匯入",
+  "Imported_via_0_from_file_1_with_packageId_2_to_import_importHelpers_as_specified_in_compilerOptions_1396": "透過 {0} 從檔案 '{1}' (packageId 為 '{2}') 匯入,以 CompilerOptions 指定的方式匯入 'ImportHelpers'",
+  "Imported_via_0_from_file_1_with_packageId_2_to_import_jsx_and_jsxs_factory_functions_1398": "透過 {0} 從檔案 '{1}' (packageId 為 '{2}') 匯入,匯入 'jsx' 和 'jsxs' 處理站函式",
   "Imports_are_not_permitted_in_module_augmentations_Consider_moving_them_to_the_enclosing_external_mod_2667": "模組增強指定中不允許匯入。請考慮將其移至封入外部模組。",
   "In_ambient_enum_declarations_member_initializer_must_be_constant_expression_1066": "在環境列舉宣告中,成員初始設定式必須是常數運算式。",
   "In_an_enum_with_multiple_declarations_only_one_declaration_can_omit_an_initializer_for_its_first_enu_2432": "在具有多個宣告的列舉中,只有一個宣告可以在其第一個列舉項目中省略初始設定式。",
+  "Include_a_list_of_files_This_does_not_support_glob_patterns_as_opposed_to_include_6635": "包含檔案的清單。這不支援 Glob 模式,與 `include` 相反。",
   "Include_modules_imported_with_json_extension_6197": "包含匯入有 '.json' 延伸模組的模組",
-  "Include_undefined_in_index_signature_results_6800": "在索引簽章結果中包含 'undefined'",
+  "Include_source_code_in_the_sourcemaps_inside_the_emitted_JavaScript_6644": "在發出 JavaScript 內的 sourcemap 中包含原始程式碼。",
+  "Include_sourcemap_files_inside_the_emitted_JavaScript_6643": "在發出的 JavaScript 中包含 sourcemap 檔案。",
+  "Include_undefined_in_index_signature_results_6716": "在索引簽章結果中包含 'undefined'",
+  "Including_watch_w_will_start_watching_the_current_project_for_the_file_changes_Once_set_you_can_conf_6914": "包括 --watch、-w 會開始監看目前專案是否有檔案變更。設定之後,您便可以使用以下來設定監看式模式:",
+  "Index_signature_for_type_0_is_missing_in_type_1_2329": "類型 '{0}' 的索引簽章在類型 '{1}' 中遺失。",
   "Index_signature_in_type_0_only_permits_reading_2542": "類型 '{0}' 中的索引簽章只允許讀取。",
-  "Index_signature_is_missing_in_type_0_2329": "類型 '{0}' 中遺漏索引簽章。",
-  "Index_signatures_are_incompatible_2330": "索引簽章不相容。",
   "Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local_2395": "合併宣告 '{0}' 中的個別宣告必須全部匯出或全在本機上。",
   "Infer_all_types_from_usage_95023": "從用法推斷所有類型",
   "Infer_function_return_type_95148": "推斷函式傳回型別",
@@ -676,6 +807,7 @@
   "Infer_type_of_0_from_usage_95011": "從使用方式推斷 '{0}' 的類型",
   "Initialize_property_0_in_the_constructor_90020": "將建構函式中的屬性 '{0}' 初始化",
   "Initialize_static_property_0_90021": "將靜態屬性 '{0}' 初始化",
+  "Initializer_for_property_0_2811": "屬性 '{0}' 的初始設定式",
   "Initializer_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor_2301": "執行個體成員變數 '{0}' 的初始設定式不得參考建構函式中所宣告的識別碼 '{1}'。",
   "Initializer_provides_no_value_for_this_binding_element_and_the_binding_element_has_no_default_value_2525": "初始設定式未提供任何值給這個繫結項目,且該繫結項目沒有預設值。",
   "Initializers_are_not_allowed_in_ambient_contexts_1039": "環境內容中不得有初始設定式。",
@@ -686,12 +818,16 @@
   "Interface_0_cannot_simultaneously_extend_types_1_and_2_2320": "介面 '{0}' 不能同時擴充類型 '{1}' 和 '{2}'。",
   "Interface_0_incorrectly_extends_interface_1_2430": "介面 '{0}' 不正確地擴充介面 '{1}'。",
   "Interface_declaration_cannot_have_implements_clause_1176": "介面宣告不能有 'implements' 子句。",
+  "Interface_must_be_given_a_name_1438": "必須為介面指定名稱。",
   "Interface_name_cannot_be_0_2427": "介面名稱不得為 '{0}'。",
+  "Interop_Constraints_6252": "Interop 條件約束",
+  "Interpret_optional_property_types_as_written_rather_than_adding_undefined_6243": "將選用屬性類型解譯為寫入,而非新增 'undefined'。",
   "Invalid_character_1127": "無效的字元。",
   "Invalid_module_name_in_augmentation_Module_0_resolves_to_an_untyped_module_at_1_which_cannot_be_augm_2665": "增強中的模組名稱無效。模組 '{0}' 於 '{1}' 解析至不具類型的模組,其無法擴增。",
   "Invalid_module_name_in_augmentation_module_0_cannot_be_found_2664": "增強指定中的模組名稱無效,找不到模組 '{0}'。",
   "Invalid_reference_directive_syntax_1084": "無效的 'reference' 指示詞語法。",
   "Invalid_use_of_0_Class_definitions_are_automatically_in_strict_mode_1210": "不當使用 '{0}'。類別定義會自動採用 strict 模式。",
+  "Invalid_use_of_0_It_cannot_be_used_inside_a_class_static_block_18039": "'{0}' 的使用無效。不能在類別靜態區塊內使用。",
   "Invalid_use_of_0_Modules_are_automatically_in_strict_mode_1215": "'{0}' 的用法無效。模組會自動採用 strict 模式。",
   "Invalid_use_of_0_in_strict_mode_1100": "在 strict 模式中使用 '{0}' 無效。",
   "Invalid_value_for_jsxFactory_0_is_not_a_valid_identifier_or_qualified_name_5067": "'jsxFactory' 的值無效。'{0}' 不是有效的識別碼或限定名稱。",
@@ -723,13 +859,18 @@
   "JSX_expressions_may_not_use_the_comma_operator_Did_you_mean_to_write_an_array_18007": "JSX 運算式不可使用逗號運算子。您是要寫入陣列嗎?",
   "JSX_expressions_must_have_one_parent_element_2657": "JSX 運算式必須具有一個父元素。",
   "JSX_fragment_has_no_corresponding_closing_tag_17014": "JSX 片段沒有對應的結尾標記。",
+  "JSX_property_access_expressions_cannot_include_JSX_namespace_names_2633": "JSX 屬性存取運算式不能包含 JSX 命名空間名稱",
   "JSX_spread_child_must_be_an_array_type_2609": "JSX 擴張子系必須為陣列類型。",
+  "JavaScript_Support_6247": "JavaScript 支援",
   "Jump_target_cannot_cross_function_boundary_1107": "跳躍目標不得跨越函式界限。",
   "KIND_6034": "類型",
   "Keywords_cannot_contain_escape_characters_1260": "關鍵字不可包含逸出字元。",
   "LOCATION_6037": "位置",
+  "Language_and_Environment_6254": "語言及環境",
   "Language_service_is_disabled_9004": "已停用語言服務。",
   "Left_side_of_comma_operator_is_unused_and_has_no_side_effects_2695": "逗號運算子左側未使用,而且沒有任何不良影響。",
+  "Library_0_specified_in_compilerOptions_1422": "CompilerOptions 中指定的程式庫 '{0}'",
+  "Library_referenced_via_0_from_file_1_1405": "透過 '{0}' 從檔案 '{1}' 參考的程式庫",
   "Line_break_not_permitted_here_1142": "這裡不可使用分行符號。",
   "Line_terminator_not_permitted_before_arrow_1200": "箭號前不得有行結束字元。",
   "List_of_folders_to_include_type_definitions_from_6161": "要包含之類型定義所屬資料夾的清單。",
@@ -739,11 +880,14 @@
   "Loading_module_0_from_node_modules_folder_target_file_type_1_6098": "正在從 'node_modules' 資料夾載入模組 '{0}',目標檔案類型 '{1}'。",
   "Loading_module_as_file_Slash_folder_candidate_module_location_0_target_file_type_1_6095": "正在將模組載入為檔案/資料夾,候選模組位置 '{0}',目標檔案類型 '{1}'。",
   "Locale_must_be_of_the_form_language_or_language_territory_For_example_0_or_1_6048": "地區設定的格式必須是 <語言> 或 <語言>-<國家/地區>。例如 '{0}' 或 '{1}'。",
+  "Log_paths_used_during_the_moduleResolution_process_6706": "在 `moduleResolution` 處理序期間使用的記錄檔路徑。",
   "Longest_matching_prefix_for_0_is_1_6108": "符合 '{0}' 的前置詞最長為 '{1}'。",
   "Looking_up_in_node_modules_folder_initial_location_0_6125": "目前正在 'node_modules' 資料夾中查詢,初始位置為 '{0}'。",
   "Make_all_super_calls_the_first_statement_in_their_constructor_95036": "在其建構函式的第一個陳述式中呼叫所有的 'super()'",
+  "Make_keyof_only_return_strings_instead_of_string_numbers_or_symbols_Legacy_option_6650": "僅讓 keyof 傳回字串,而不是單一字串、數字或符號。舊版選項。",
   "Make_super_call_the_first_statement_in_the_constructor_90002": "使 'super()' 呼叫成為建構函式中的第一個陳述式",
   "Mapped_object_type_implicitly_has_an_any_template_type_7039": "對應的物件類型隱含具有 'any' 範本類型。",
+  "Matched_by_include_pattern_0_in_1_1407": "依 '{1}' 中的包含模式 '{0}' 比對",
   "Member_0_implicitly_has_an_1_type_7008": "成員 '{0}' 隱含了 '{1}' 類型。",
   "Member_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage_7045": "成員 '{0}' 隱含 '{1}' 類型,但可從使用方式推斷更適合的類型。",
   "Merge_conflict_marker_encountered_1185": "偵測到合併衝突標記。",
@@ -752,6 +896,7 @@
   "Method_0_cannot_have_an_implementation_because_it_is_marked_abstract_1245": "因為方法 '{0}' 已標記為抽象,所以不可具有實作。",
   "Method_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2_4101": "匯出介面的方法 '{0}' 具有或使用私用模組 '{2}' 的名稱 '{1}'。",
   "Method_0_of_exported_interface_has_or_is_using_private_name_1_4102": "匯出介面的方法 '{0}' 具有或使用私用名稱 '{1}'。",
+  "Method_not_implemented_95158": "未實作方法。",
   "Modifiers_cannot_appear_here_1184": "此處不得出現修飾元。",
   "Module_0_can_only_be_default_imported_using_the_1_flag_1259": "模組 '{0}' 只能依預設使用 '{1}' 旗標匯入",
   "Module_0_declares_1_locally_but_it_is_exported_as_2_2460": "模組 '{0}' 區域性地宣告 '{1}',但卻將該模組匯出為 '{2}'。",
@@ -769,13 +914,14 @@
   "Module_0_was_resolved_as_locally_declared_ambient_module_in_file_1_6144": "模組 '{0}' 在檔案 '{1}' 中已解析為本機宣告的環境模組。",
   "Module_0_was_resolved_to_1_but_jsx_is_not_set_6142": "模組 '{0}' 已解析為 '{1}',但未設定 '--jsx'。",
   "Module_0_was_resolved_to_1_but_resolveJsonModule_is_not_used_7042": "模組 '{0}' 已解析為 '{1}',但未使用 '--resolveJsonModule'。",
-  "Module_Resolution_Options_6174": "模組解析選項",
+  "Module_declaration_names_may_only_use_or_quoted_strings_1443": "模組宣告名稱只能使用 ' 或 \" 引用的字串。",
   "Module_name_0_matched_pattern_1_6092": "模組名稱 '{0}',符合的模式 '{1}'。",
   "Module_name_0_was_not_resolved_6090": "======== 模組名稱 '{0}' 未解析。========",
   "Module_name_0_was_successfully_resolved_to_1_6089": "======== 模組名稱 '{0}' 已成功解析為 '{1}'。========",
   "Module_name_0_was_successfully_resolved_to_1_with_Package_ID_2_6218": "======== 模組名稱 '{0}' 已成功解析為 '{1}',套件識別碼為 '{2}'。========",
   "Module_resolution_kind_is_not_specified_using_0_6088": "未指定模組解析種類,將使用 '{0}'。",
   "Module_resolution_using_rootDirs_has_failed_6111": "使用 'rootDirs' 解析模組失敗。",
+  "Modules_6244": "模組",
   "Move_labeled_tuple_element_modifiers_to_labels_95117": "將標記的元組元素修飾元移至標籤",
   "Move_to_a_new_file_95049": "移至新檔",
   "Multiple_consecutive_numeric_separators_are_not_permitted_6189": "不允許多個連續的數字分隔符號。",
@@ -784,11 +930,14 @@
   "Name_is_not_valid_95136": "名稱無效",
   "Named_property_0_of_types_1_and_2_are_not_identical_2319": "類型 '{1}' 及 '{2}' 的具名屬性 '{0}' 不一致。",
   "Namespace_0_has_no_exported_member_1_2694": "命名空間 '{0}' 沒有匯出的成員 '{1}'。",
+  "Namespace_must_be_given_a_name_1437": "必須為命名空間指定名稱。",
+  "Namespace_name_cannot_be_0_2819": "命名空間名稱不得為 '{0}'。",
   "No_base_constructor_has_the_specified_number_of_type_arguments_2508": "沒有任何基底建構函式具有指定的類型引數數量。",
   "No_constituent_of_type_0_is_callable_2755": "無法呼叫 '{0}' 類型的任何構件。",
   "No_constituent_of_type_0_is_constructable_2759": "無法建構 '{0}' 類型的任何構件。",
   "No_index_signature_with_a_parameter_of_type_0_was_found_on_type_1_7054": "在類型 '{1}' 中找不到任何具有 '{0}' 類型之參數的索引簽章。",
   "No_inputs_were_found_in_config_file_0_Specified_include_paths_were_1_and_exclude_paths_were_2_18003": "在設定檔 '{0}' 中找不到任何輸入。指定的 'include' 路徑為 '{1}','exclude' 路徑為 '{2}'。",
+  "No_longer_supported_In_early_versions_manually_set_the_text_encoding_for_reading_files_6608": "不再支援。在早期版本中,手動設定讀取檔案的文字編碼方式。",
   "No_overload_expects_0_arguments_but_overloads_do_exist_that_expect_either_1_or_2_arguments_2575": "沒有任何多載需要 {0} 引數,但有多載需要 {1} 或 {2} 引數。",
   "No_overload_expects_0_type_arguments_but_overloads_do_exist_that_expect_either_1_or_2_type_arguments_2743": "沒有任何多載需要 {0} 類型引數,但有多載需要 {1} 或 {2} 類型引數。",
   "No_overload_matches_this_call_2769": "沒有任何多載符合此呼叫。",
@@ -802,7 +951,6 @@
   "Not_all_code_paths_return_a_value_7030": "部分程式碼路徑並未傳回值。",
   "Not_all_constituents_of_type_0_are_callable_2756": "'{0}' 類型的構件並非都可呼叫。",
   "Not_all_constituents_of_type_0_are_constructable_2760": "'{0}' 類型的構件並非都可構建。",
-  "Numeric_index_type_0_is_not_assignable_to_string_index_type_1_2413": "數值索引類型 '{0}' 不可指派給字串索引類型 '{1}'。",
   "Numeric_literals_with_absolute_values_equal_to_2_53_or_greater_are_too_large_to_be_represented_accur_80008": "絕對值等於或大於 2^53 的數字常值過大,無法準確地表示為整數。",
   "Numeric_separators_are_not_allowed_here_6188": "這裡不允許數字分隔符號。",
   "Object_is_of_type_unknown_2571": "物件的類型為 '未知'。",
@@ -826,9 +974,11 @@
   "Only_identifiers_Slashqualified_names_with_optional_type_arguments_are_currently_supported_in_a_clas_9002": "類別 'extends' 子句中,目前只支援具有選擇性型別引數的識別碼/限定名稱。",
   "Only_named_exports_may_use_export_type_1383": "只有具名的匯出可以使用 'export type'。",
   "Only_numeric_enums_can_have_computed_members_but_this_expression_has_type_0_If_you_do_not_need_exhau_18033": "只有數值列舉才可以有計算成員,但此運算式的類型為 '{0}'。若您不需要詳細檢查,請考慮改用物件常值。",
+  "Only_output_d_ts_files_and_not_JavaScript_files_6623": "只輸出 d.ts 檔案,而不是 JavaScript 檔案。",
   "Only_public_and_protected_methods_of_the_base_class_are_accessible_via_the_super_keyword_2340": "只有基底類別之公開且受保護的方法,才可透過 'super' 關鍵字存取。",
   "Operator_0_cannot_be_applied_to_type_1_2736": "無法將運算子 '{0}' 套用至類型 '{1}'。",
   "Operator_0_cannot_be_applied_to_types_1_and_2_2365": "無法將運算子 '{0}' 套用至類型 '{1}' 和 '{2}'。",
+  "Opt_a_project_out_of_multi_project_reference_checking_when_editing_6619": "在編輯時從多專案參考檢查選擇一個專案。",
   "Option_0_can_only_be_specified_in_tsconfig_json_file_or_set_to_false_or_null_on_command_line_6230": "只能在 'tsconfig.json' 檔案中指定 '{0}' 選項,或在命令列上將其設定為 'false' 或 'null'。",
   "Option_0_can_only_be_specified_in_tsconfig_json_file_or_set_to_null_on_command_line_6064": "只能在 'tsconfig.json' 檔案中指定 '{0}' 選項,或在命令列上將其設定為 'null'。",
   "Option_0_can_only_be_used_when_either_option_inlineSourceMap_or_option_sourceMap_is_provided_5051": "只有在已提供選項 '--inlineSourceMap' 或選項 '--sourceMap' 時,才可使用選項 '{0}'。",
@@ -839,16 +989,22 @@
   "Option_0_cannot_be_specified_without_specifying_option_1_or_option_2_5069": "指定選項 '{0}' 時,必須指定選項 '{1}' 或選項 '{2}'。",
   "Option_0_should_have_array_of_strings_as_a_value_6103": "選項 '{0}' 應以字串陣列作為值。",
   "Option_build_must_be_the_first_command_line_argument_6369": "選項 '--build' 必須是第一個命令列引數。",
-  "Option_incremental_can_only_be_specified_using_tsconfig_emitting_to_single_file_or_when_option_tsBui_5074": "只有在使用 tsconfig、發出至單一檔案,或指定選項 `--tsBuildInfoFile` 時,才可指定選項 '--incremental'。",
+  "Option_incremental_can_only_be_specified_using_tsconfig_emitting_to_single_file_or_when_option_tsBui_5074": "只有在使用 tsconfig、發出至單一檔案,或指定 '--tsBuildInfoFile' 選項時,才可指定 '--incremental'選項。",
   "Option_isolatedModules_can_only_be_used_when_either_option_module_is_provided_or_option_target_is_ES_5047": "只有在提供選項 '--module' 或是 'target' 為 'ES2015' 或更高項目時,才可使用選項 'isolatedModules'。",
+  "Option_preserveConstEnums_cannot_be_disabled_when_isolatedModules_is_enabled_5091": "啟用 'isolatedModules' 時,無法停用選項 'preserveConstEnums'。",
   "Option_project_cannot_be_mixed_with_source_files_on_a_command_line_5042": "在命令列上,'project' 選項不得與原始程式檔並用。",
   "Option_resolveJsonModule_can_only_be_specified_when_module_code_generation_is_commonjs_amd_es2015_or_5071": "只有在模組程式碼產生為 'commonjs'、'amd'、'es2015' 或 'esNext' 時,才可指定選項 '--resolveJsonModule'。",
   "Option_resolveJsonModule_cannot_be_specified_without_node_module_resolution_strategy_5070": "指定選項 '-resolveJsonModule' 時,不可沒有 'node' 模組解析策略。",
   "Options_0_and_1_cannot_be_combined_6370": "無法合併選項 '{0}' 與 '{1}'。",
   "Options_Colon_6027": "選項:",
+  "Output_Formatting_6256": "輸出格式",
+  "Output_compiler_performance_information_after_building_6615": "在組建後輸出編譯器效能資訊。",
   "Output_directory_for_generated_declaration_files_6166": "所產生之宣告檔案的輸出目錄。",
   "Output_file_0_from_project_1_does_not_exist_6309": "沒有來自專案 '{1}' 的輸出檔 '{0}'",
   "Output_file_0_has_not_been_built_from_source_file_1_6305": "輸出檔 '{0}' 並非從原始程式檔 '{1}' 建置。",
+  "Output_from_referenced_project_0_included_because_1_specified_1411": "因為指定了 '{1}',所以包含參考的專案 '{0}' 輸出",
+  "Output_from_referenced_project_0_included_because_module_is_specified_as_none_1412": "因為 '--module' 指定為 'none',所以包含參考的專案 '{0}' 輸出",
+  "Output_more_detailed_compiler_performance_information_after_building_6632": "在組建後輸出更詳細的編譯器效能資訊。",
   "Overload_0_of_1_2_gave_the_following_error_2772": "多載 {0} (共 {1}),'{2}',發生下列錯誤。",
   "Overload_signatures_must_all_be_abstract_or_non_abstract_2512": "多載簽章必須全為抽象或非抽象。",
   "Overload_signatures_must_all_be_ambient_or_non_ambient_2384": "多載簽章都必須是環境或非環境簽章。",
@@ -892,18 +1048,25 @@
   "Parameter_type_of_public_static_setter_0_from_exported_class_has_or_is_using_name_1_from_private_mod_4034": "匯出類別中公用靜態 setter '{0}' 的參數類型具有或正在使用私用模組 '{2}' 中的名稱 '{1}'。",
   "Parameter_type_of_public_static_setter_0_from_exported_class_has_or_is_using_private_name_1_4035": "匯出類別中公用靜態 setter '{0}' 的參數類型具有或正在使用私用名稱 '{1}'。",
   "Parse_in_strict_mode_and_emit_use_strict_for_each_source_file_6141": "在 strict 模式中進行剖析,並為每個來源檔案發出 \"use strict\"。",
+  "Part_of_files_list_in_tsconfig_json_1409": "tsconfig.json 中的部分 'files' 清單",
   "Pattern_0_can_have_at_most_one_Asterisk_character_5061": "模式 '{0}' 最多只可有一個 '*' 字元。",
   "Performance_timings_for_diagnostics_or_extendedDiagnostics_are_not_available_in_this_session_A_nativ_6386": "在此工作階段中無法使用 '--diagnostics ' 或 '--extendedDiagnostics ' 的效能計時。找不到 Web 效能 API 的原生實作。",
+  "Platform_specific_6912": "平台特定",
   "Prefix_0_with_an_underscore_90025": "具有底線的前置詞 '{0}'",
   "Prefix_all_incorrect_property_declarations_with_declare_95095": "在所有不正確屬性宣告的開頭放置 'declare'",
   "Prefix_all_unused_declarations_with_where_possible_95025": "若可行,為所有未使用的宣告加上前置詞 '_'",
   "Prefix_with_declare_95094": "以 'declare' 開頭",
+  "Print_all_of_the_files_read_during_the_compilation_6653": "列印在編譯期間讀取的所有檔案。",
+  "Print_files_read_during_the_compilation_including_why_it_was_included_6631": "列印在編譯期間讀取的檔案,包括其包含的原因。",
+  "Print_names_of_files_and_the_reason_they_are_part_of_the_compilation_6505": "列印檔案名稱,以及檔案屬於編譯的原因。",
   "Print_names_of_files_part_of_the_compilation_6155": "列印編譯時檔案部分的名稱。",
   "Print_names_of_files_that_are_part_of_the_compilation_and_then_stop_processing_6503": "列印屬於編譯一部分的檔案名稱,然後停止處理。",
   "Print_names_of_generated_files_part_of_the_compilation_6154": "列印編譯時所產生之檔案部分的名稱。",
   "Print_the_compiler_s_version_6019": "列印編譯器的版本。",
   "Print_the_final_configuration_instead_of_building_1350": "列印而非建置最終組態。",
+  "Print_the_names_of_emitted_files_after_a_compilation_6652": "在編譯後列印已發出檔案的名稱。",
   "Print_this_message_6017": "列印這則訊息。",
+  "Private_accessor_was_defined_without_a_getter_2806": "私人存取子已在不使用 getter 的情況下定義。",
   "Private_identifiers_are_not_allowed_in_variable_declarations_18029": "變數宣告中不允許私人識別碼。",
   "Private_identifiers_are_not_allowed_outside_class_bodies_18016": "不允許私人識別碼位於類別主體外。",
   "Private_identifiers_are_only_available_when_targeting_ECMAScript_2015_and_higher_18028": "只有當目標為 ECMAScript 2015 及更新版本時,才可使用私人識別碼。",
@@ -911,6 +1074,7 @@
   "Private_or_protected_member_0_cannot_be_accessed_on_a_type_parameter_4105": "無法在型別參數上存取私人或受保護的成員 '{0}'。",
   "Project_0_can_t_be_built_because_its_dependency_1_has_errors_6363": "因為專案 '{0}' 的相依性 '{1}' 發生錯誤,所以無法建置該專案",
   "Project_0_can_t_be_built_because_its_dependency_1_was_not_built_6383": "因為未建置專案 '{0}' 的相依性 '{1}',所以無法建置該專案",
+  "Project_0_is_being_forcibly_rebuilt_6388": "正在強制重建專案 '{0}'",
   "Project_0_is_out_of_date_because_its_dependency_1_is_out_of_date_6353": "因為專案 '{0}' 的相依性 '{1}' 已過期,所以該專案已過期",
   "Project_0_is_out_of_date_because_oldest_output_1_is_older_than_newest_input_2_6350": "因為最舊的輸出 '{1}' 早於最新的輸入 '{2}',所以專案 '{0}' 已過期",
   "Project_0_is_out_of_date_because_output_file_1_does_not_exist_6352": "因為輸出檔案 '{1}' 不存在,所以專案 '{0}' 已過期",
@@ -920,14 +1084,18 @@
   "Project_0_is_up_to_date_because_newest_input_1_is_older_than_oldest_output_2_6351": "因為最新的輸入 '{1}' 早於最舊的輸出 '{2}',所以專案 '{0}' 為最新狀態",
   "Project_0_is_up_to_date_with_d_ts_files_from_its_dependencies_6354": "專案 '{0}' 為最新狀態,且有來自其相依性的 .d.ts 檔案",
   "Project_references_may_not_form_a_circular_graph_Cycle_detected_Colon_0_6202": "專案參考不會形成循環圖。但偵測到循環: {0}",
+  "Projects_6255": "專案",
   "Projects_in_this_build_Colon_0_6355": "此組建中的專案: {0}",
   "Projects_to_reference_6300": "專案至參考",
+  "Property_0_cannot_have_an_initializer_because_it_is_marked_abstract_1267": "屬性 '{0}' 已標記為抽象,因此不得有初始設定式。",
   "Property_0_comes_from_an_index_signature_so_it_must_be_accessed_with_0_4111": "屬性 '{0}' 來自索引簽章,因此必須使用 ['{0}'] 存取。",
   "Property_0_does_not_exist_on_const_enum_1_2479": "'const' 列舉 '{1}' 上並沒有屬性 '{0}'。",
   "Property_0_does_not_exist_on_type_1_2339": "類型 '{1}' 沒有屬性 '{0}'。",
   "Property_0_does_not_exist_on_type_1_Did_you_mean_2_2551": "類型 '{1}' 沒有屬性 '{0}'。您指的是 '{2}' 嗎?",
   "Property_0_does_not_exist_on_type_1_Did_you_mean_to_access_the_static_member_2_instead_2576": "屬性 '{0}' 不存在於類型 '{1}' 上。您要存取的是靜態成員 '{2}' 嗎?",
   "Property_0_does_not_exist_on_type_1_Do_you_need_to_change_your_target_library_Try_changing_the_lib_c_2550": "類型 '{1}' 沒有屬性 '{0}'。要變更您的目標程式庫嗎? 請嘗試將 'lib' 編譯器選項變更為 '{2}' 或更新版本。",
+  "Property_0_does_not_exist_on_type_1_Try_changing_the_lib_compiler_option_to_include_dom_2812": "屬性 '{0}' 不存在於類型 '{1}' 上。嘗試將 'lib' 編譯器選項變更為包含 'dom'。",
+  "Property_0_has_no_initializer_and_is_not_definitely_assigned_in_a_class_static_block_2817": "屬性 '{0}' 沒有初始設定式,且未在類別靜態區塊中明確指派。",
   "Property_0_has_no_initializer_and_is_not_definitely_assigned_in_the_constructor_2564": "屬性 '{0}' 沒有初始設定式,且未在建構函式中明確指派。",
   "Property_0_implicitly_has_type_any_because_its_get_accessor_lacks_a_return_type_annotation_7033": "因為屬性 '{0}' 的 get 存取子沒有傳回類型註釋,致使該屬性意味著類型 'any'。",
   "Property_0_implicitly_has_type_any_because_its_set_accessor_lacks_a_parameter_type_annotation_7032": "因為屬性 '{0}' 的 set 存取子沒有參數類型註釋,致使該屬性意味著類型 'any'。",
@@ -945,18 +1113,19 @@
   "Property_0_is_optional_in_type_1_but_required_in_type_2_2327": "在類型 '{1}' 中,'{0}' 是選擇性屬性,但在類型 '{2}' 中則為必要屬性。",
   "Property_0_is_private_and_only_accessible_within_class_1_2341": "'{0}' 是私用屬性,只可從類別 '{1}' 中存取。",
   "Property_0_is_private_in_type_1_but_not_in_type_2_2325": "在類型 '{1}' 中,'{0}' 是私用屬性,但在類型 '{2}' 中不是。",
-  "Property_0_is_protected_and_only_accessible_through_an_instance_of_class_1_2446": "'{0}' 是受保護屬性,只能透過類別 '{1}' 的執行個體進行存取。",
+  "Property_0_is_protected_and_only_accessible_through_an_instance_of_class_1_This_is_an_instance_of_cl_2446": "屬性 '{0}' 已受到保護,只能透過類別 '{1}' 的執行個體加以存取。這是類別 '{2}' 的執行個體。",
   "Property_0_is_protected_and_only_accessible_within_class_1_and_its_subclasses_2445": "'{0}' 是受保護屬性,只可從類別 '{1}' 及其子類別中存取。",
   "Property_0_is_protected_but_type_1_is_not_a_class_derived_from_2_2443": "'{0}' 是受保護屬性,但類型 '{1}' 不是衍生自 '{2}' 的類別。",
   "Property_0_is_protected_in_type_1_but_public_in_type_2_2444": "在類型 '{1}' 中,'{0}' 是受保護屬性,但在類型 '{2}' 中是公用屬性。",
   "Property_0_is_used_before_being_assigned_2565": "屬性 '{0}' 已在指派之前使用。",
   "Property_0_is_used_before_its_initialization_2729": "將屬性 '{0}' 初始化前已使用該屬性。",
+  "Property_0_may_not_be_used_in_a_static_property_s_initializer_in_the_same_class_when_target_is_esnex_2810": "當 'target' 為 'esnext' 且 'useDefineForClassFields' 為 'false' 時,不能在同一個類別的靜態屬性初始設定式中使用屬性 '{0}'。",
+  "Property_0_may_not_exist_on_type_1_Did_you_mean_2_2568": "類型 '{1}' 可能不存在屬性 '{0}'。您指的是 '{2}' 嗎?",
   "Property_0_of_JSX_spread_attribute_is_not_assignable_to_target_property_2606": "JSX 擴張屬性 (Attribute) 的屬性 (Property) '{0}' 不可指派給目標屬性 (Property)。",
   "Property_0_of_exported_class_expression_may_not_be_private_or_protected_4094": "匯出之類別運算式的屬性 '{0}' 可能為私人或受保護。",
   "Property_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2_4032": "匯出介面的屬性 '{0}' 具有或使用私用模組 '{2}' 中的名稱 '{1}'。",
   "Property_0_of_exported_interface_has_or_is_using_private_name_1_4033": "匯出介面的屬性 '{0}' 具有或使用私用名稱 '{1}'。",
-  "Property_0_of_type_1_is_not_assignable_to_numeric_index_type_2_2412": "類型 '{1}' 的屬性 '{0}' 不可指派給數值索引類型 '{2}'。",
-  "Property_0_of_type_1_is_not_assignable_to_string_index_type_2_2411": "類型 '{1}' 的屬性 '{0}' 不可指派給字串索引類型 '{2}'。",
+  "Property_0_of_type_1_is_not_assignable_to_2_index_type_3_2411": "類型 '{1}' 的屬性 '{0}' 不可指派給 '{2}' 索引類型 '{3}'。",
   "Property_0_was_also_declared_here_2733": "屬性 '{0}' 也已定義於此處。",
   "Property_0_will_overwrite_the_base_property_in_1_If_this_is_intentional_add_an_initializer_Otherwise_2612": "屬性 '{0}' 將會覆寫 '{1}' 中的基底屬性。如果是故意覆寫的,請新增初始設定式。否則,請新增 'declare' 修飾元或移除多餘的宣告。",
   "Property_assignment_expected_1136": "必須是屬性指派。",
@@ -978,12 +1147,18 @@
   "Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4027": "匯出類別的公用靜態屬性 '{0}' 具有或使用私用模組 '{2}' 中的名稱 '{1}'。",
   "Public_static_property_0_of_exported_class_has_or_is_using_private_name_1_4028": "匯出類別的公用靜態屬性 '{0}' 具有或使用私用名稱 '{1}'。",
   "Qualified_name_0_is_not_allowed_without_a_leading_param_object_1_8032": "限定名稱 '{0}' 必須以 '@param {object} {1}' 開頭。",
+  "Raise_an_error_when_a_function_parameter_isn_t_read_6676": "當函式參數未讀取時引發錯誤",
   "Raise_error_on_expressions_and_declarations_with_an_implied_any_type_6052": "當運算式及宣告包含隱含的 'any' 類型時顯示錯誤。",
   "Raise_error_on_this_expressions_with_an_implied_any_type_6115": "對具有隱含 'any' 類型的 'this' 運算式引發錯誤。",
   "Re_exporting_a_type_when_the_isolatedModules_flag_is_provided_requires_using_export_type_1205": "提供 '--isolatedModules' 旗標時,必須使用 'export type' 重新匯出類型。",
   "Redirect_output_structure_to_the_directory_6006": "將輸出結構重新導向至目錄。",
+  "Reduce_the_number_of_projects_loaded_automatically_by_TypeScript_6617": "減少 TypeScript 自動載入的專案數目。",
   "Referenced_project_0_may_not_disable_emit_6310": "參考的專案 '{0}' 不得停用發出。",
   "Referenced_project_0_must_have_setting_composite_Colon_true_6306": "參考的專案 '{0}' 之設定 \"composite\" 必須為 true。",
+  "Referenced_via_0_from_file_1_1400": "透過 '{0}' 從檔案 '{1}' 參考",
+  "Remove_a_list_of_directories_from_the_watch_process_6628": "從監看處理序移除目錄清單。",
+  "Remove_a_list_of_files_from_the_watch_mode_s_processing_6629": "從監視模式的處理移除檔案清單。",
+  "Remove_all_unnecessary_override_modifiers_95163": "移除所有不必要的 'override' 修飾元",
   "Remove_all_unnecessary_uses_of_await_95087": "移除所有不必要的 'await' 使用方式",
   "Remove_all_unreachable_code_95051": "移除所有無法連線的程式碼",
   "Remove_all_unused_labels_95054": "移除所有未使用的標籤",
@@ -991,8 +1166,10 @@
   "Remove_braces_from_arrow_function_95060": "從箭號函式移除大括號",
   "Remove_braces_from_arrow_function_body_95112": "從箭號函式主體中移除大括號",
   "Remove_import_from_0_90005": "從 '{0}' 移除匯入",
+  "Remove_override_modifier_95161": "移除 'override' 修飾元",
   "Remove_parentheses_95126": "移除括弧",
   "Remove_template_tag_90011": "移除範本標籤",
+  "Remove_the_20mb_cap_on_total_source_code_size_for_JavaScript_files_in_the_TypeScript_language_server_6618": "移除 TypeScript 語言伺服器中 JavaScript 檔案的總原始程式碼大小 20mb 上限。",
   "Remove_type_parameters_90012": "移除型別參數",
   "Remove_unnecessary_await_95086": "移除不必要的 'await'",
   "Remove_unreachable_code_95050": "移除無法連線的程式碼",
@@ -1010,14 +1187,16 @@
   "Report_errors_in_js_files_8019": "報告 .js 檔案中的錯誤。",
   "Report_errors_on_unused_locals_6134": "回報未使用之區域變數的錯誤。",
   "Report_errors_on_unused_parameters_6135": "回報未使用之參數的錯誤。",
-  "Require_undeclared_properties_from_index_signatures_to_use_element_accesses_6803": "需要來自索引簽章的未宣告屬性,才能使用元素存取。",
+  "Require_undeclared_properties_from_index_signatures_to_use_element_accesses_6717": "需要來自索引簽章的未宣告屬性,才能使用元素存取。",
   "Required_type_parameters_may_not_follow_optional_type_parameters_2706": "必要型別參數可能未遵循選擇性型別參數。",
   "Resolution_for_module_0_was_found_in_cache_from_location_1_6147": "從位置 '{1}' 的快取中找到模組 '{0}' 的解析。",
+  "Resolution_for_type_reference_directive_0_was_found_in_cache_from_location_1_6241": "從位置 '{0}' 的快取記憶體找到類型參照指示詞 '{1}'。",
   "Resolve_keyof_to_string_valued_property_names_only_no_numbers_or_symbols_6195": "只將 'keyof' 解析為字串值的屬性名稱 (無任何數字或符號)。",
   "Resolving_from_node_modules_folder_6118": "正在從 node_modules 資料夾解析...",
   "Resolving_module_0_from_1_6086": "======== 正在從 '{1}' 解析模組 '{0}'。========",
   "Resolving_module_name_0_relative_to_base_url_1_2_6094": "正在解析與基底 URL '{1}' 相對的模組名稱 '{0}' - '{2}'。",
   "Resolving_real_path_for_0_result_1_6130": "正在解析 '{0}' 的真實路徑,結果 '{1}'。",
+  "Resolving_type_reference_directive_0_containing_file_1_6242": "======== 正在解析類型參考指示詞 '{0}',包含檔案 '{1}'。========",
   "Resolving_type_reference_directive_0_containing_file_1_root_directory_2_6116": "======== 正在解析類型參考指示詞 '{0}',包含檔案 '{1}',根目錄 '{2}'。========",
   "Resolving_type_reference_directive_0_containing_file_1_root_directory_not_set_6123": "======== 正在解析類型參考指示詞 '{0}',包含檔案 '{1}',未設定根目錄。========",
   "Resolving_type_reference_directive_0_containing_file_not_set_root_directory_1_6127": "======== 正在解析類型參考指示詞 '{0}',未設定包含檔案,根目錄 '{1}'。========",
@@ -1029,6 +1208,7 @@
   "Rest_signatures_are_incompatible_2572": "其餘簽章不相容。",
   "Rest_types_may_only_be_created_from_object_types_2700": "Rest 類型只能從物件類型建立。",
   "Return_type_annotation_circularly_references_itself_2577": "傳回型別註解會循環參考自身。",
+  "Return_type_must_be_inferred_from_a_function_95149": "必須從函式推斷傳回型別",
   "Return_type_of_call_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1_4046": "匯出介面中呼叫簽章的傳回型別具有或使用私用模組 '{1}' 中的名稱 '{0}'。",
   "Return_type_of_call_signature_from_exported_interface_has_or_is_using_private_name_0_4047": "匯出介面中呼叫簽章的傳回型別具有或使用私用名稱 '{0}'。",
   "Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_name_0_from_private_mod_4044": "匯出介面中建構函式簽章的傳回型別具有或使用私用模組 '{1}' 中的名稱 '{0}'。",
@@ -1053,15 +1233,31 @@
   "Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_external_module__4050": "匯出類別中公用靜態方法的傳回型別具有或使用外部模組 {1} 中的名稱 '{0}',但無法命名。",
   "Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_private_module_1_4051": "匯出類別中公用靜態方法的傳回型別具有或使用私用模組 '{1}' 中的名稱 '{0}'。",
   "Return_type_of_public_static_method_from_exported_class_has_or_is_using_private_name_0_4052": "匯出類別中公用靜態方法的傳回型別具有或使用私用名稱 '{0}'。",
-  "Reusing_module_resolutions_originating_in_0_since_resolutions_are_unchanged_from_old_program_6184": "因為舊程式中的解決方案並無任何變更,所以會重複使用 '{0}' 中的模組解決方案。",
-  "Reusing_resolution_of_module_0_to_file_1_from_old_program_6183": "對檔案 '{1}' 重複用舊程式中模組 '{0}' 的解決方案。",
+  "Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_not_resolved_6395": "在位置 '{2}' 的快取中找到的 '{1}' 中重複使用模組 '{0}' 的解析,它尚未加以解析。",
+  "Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_6393": "在位置 '{2}' 的快取中找到的 '{1}' 中重複使用模組 '{0}' 的解析,已成功將其解析為 '{3}'。",
+  "Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_6394": "在位置 '{2}' 的快取中找到的 '{1}' 中重複使用模組 '{0}' 的解析,已成功將其解析為套件識別碼為 '{4}' 的 '{3}'。",
+  "Reusing_resolution_of_module_0_from_1_of_old_program_it_was_not_resolved_6389": "在舊程式的 '{1}' 中重複使用模組 '{0}' 的解析,它尚未加以解析。",
+  "Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2_6183": "在舊程式的 '{1}' 中重複使用模組 '{0}' 的解析,已成功將其解析為 '{2}'。",
+  "Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2_with_Package__6184": "在舊程式的 '{1}' 中重複使用模組 '{0}' 的解析,已成功將其解析為套件識別碼為 '{3}' 的 '{2}'。",
+  "Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_not_re_6398": "在位置 '{2}' 的快取中找到的 '{1}' 中重複使用類型參考指示詞 '{0}' 的解析,它尚未加以解析。",
+  "Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_succes_6396": "在位置 '{2}' 的快取中找到的 '{1}' 中重複使用類型參考指示詞 '{0}' 的解析,已成功將其解析為 '{3}'。",
+  "Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_succes_6397": "在位置 '{2}' 的快取中找到的 '{1}' 中重複使用類型參考指示詞 '{0}' 的解析,已成功將其解析為套件識別碼為 '{4}' 的 '{3}'。",
+  "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_not_resolved_6392": "在舊程式的 '{1}' 中重複使用類型參考指示詞 '{0}' 的解析,它尚未加以解析。",
+  "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved__6390": "在舊程式的 '{1}' 中重複使用類型參考指示詞 '{0}' 的解析,已成功將其解析為 '{2}'。",
+  "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved__6391": "在舊程式的 '{1}' 中重複使用類型參考指示詞 '{0}' 的解析,已成功將其解析為套件識別碼為 '{3}' 的 '{2}'。",
   "Rewrite_all_as_indexed_access_types_95034": "將全部重寫為經過編製索引的存取類型",
   "Rewrite_as_the_indexed_access_type_0_90026": "重寫為索引存取類型 '{0}'",
   "Root_directory_cannot_be_determined_skipping_primary_search_paths_6122": "無法判斷根目錄,將略過主要搜尋路徑。",
+  "Root_file_specified_for_compilation_1427": "為編譯指定的根檔案",
   "STRATEGY_6039": "策略",
+  "Save_tsbuildinfo_files_to_allow_for_incremental_compilation_of_projects_6642": "儲存 .tsbuildinfo 檔案,以允許對專案進行累加編譯。",
   "Scoped_package_detected_looking_in_0_6182": "偵測到範圍套件,正於 '{0}' 尋找",
+  "Selection_is_not_a_valid_statement_or_statements_95155": "選取項目非有效的一或多個陳述式",
   "Selection_is_not_a_valid_type_node_95133": "選取範圍不是有效的類型節點",
+  "Set_the_JavaScript_language_version_for_emitted_JavaScript_and_include_compatible_library_declaratio_6705": "為發出的 JavaScript 設定 JavaScript 語言版本,並包含相容的程式庫宣告。",
+  "Set_the_language_of_the_messaging_from_TypeScript_This_does_not_affect_emit_6654": "設定來自 TypeScript 的訊息語言。這不會影響發出。",
   "Set_the_module_option_in_your_configuration_file_to_0_95099": "將組態檔中的 'module' 選項設定為 '{0}'",
+  "Set_the_newline_character_for_emitting_files_6659": "設定發出檔案的新行字元。",
   "Set_the_target_option_in_your_configuration_file_to_0_95098": "將組態檔中的 'target' 選項設定為 '{0}'",
   "Setters_cannot_return_a_value_2408": "setter 無法傳回值。",
   "Show_all_compiler_options_6169": "顯示所有的編譯器選項。",
@@ -1069,31 +1265,63 @@
   "Show_verbose_diagnostic_information_6150": "顯示詳細診斷資訊。",
   "Show_what_would_be_built_or_deleted_if_specified_with_clean_6367": "顯示將會建置 (或刪除 - 若是指定有 '--clean') 的內容",
   "Signature_0_must_be_a_type_predicate_1224": "簽章 '{0}' 必須是型別述詞。",
+  "Skip_type_checking_all_d_ts_files_6693": "略過所有 .d.ts 檔案的型別檢查。",
+  "Skip_type_checking_d_ts_files_that_are_included_with_TypeScript_6692": "略過 TypeScript 中包含 .d.ts 檔案的型別檢查。",
   "Skip_type_checking_of_declaration_files_6012": "跳過宣告檔案的類型檢查。",
   "Skipping_build_of_project_0_because_its_dependency_1_has_errors_6362": "因為專案 '{0}' 的相依性 '{1}' 發生錯誤,所以跳過建置該專案",
   "Skipping_build_of_project_0_because_its_dependency_1_was_not_built_6382": "因為未建置專案 '{0}' 的相依性 '{1}',所以正在跳過該專案的組建",
-  "Source_Map_Options_6175": "來源對應選項",
+  "Source_from_referenced_project_0_included_because_1_specified_1414": "因為指定了 '{1}',所以包含參考的專案 '{0}' 來源",
+  "Source_from_referenced_project_0_included_because_module_is_specified_as_none_1415": "因為 '--module' 指定為 'none',所以包含參考的專案 '{0}' 來源",
   "Source_has_0_element_s_but_target_allows_only_1_2619": "來源具有 {0} 個元素,但目標只允許 {1} 個。",
   "Source_has_0_element_s_but_target_requires_1_2618": "來源有 {0} 個元素,但目標需要 {1} 個。",
+  "Source_provides_no_match_for_required_element_at_position_0_in_target_2623": "來源未針對目標中位於 {0} 的必要元素提供相符項目。",
+  "Source_provides_no_match_for_variadic_element_at_position_0_in_target_2624": "來源未針對目標中位於 {0} 的可變元素提供相符項目。",
   "Specialized_overload_signature_is_not_assignable_to_any_non_specialized_signature_2382": "特製化的多載簽章不可指派給任何非特製化的簽章。",
   "Specifier_of_dynamic_import_cannot_be_spread_element_1325": "動態匯入的指定名稱不能是展開元素。",
-  "Specify_ECMAScript_target_version_Colon_ES3_default_ES5_ES2015_ES2016_ES2017_ES2018_ES2019_ES2020_or_6015": "指定 ECMAScript 目標版本: 'ES3' (預設)、'ES5'、'ES2015'、'ES2016'、'ES2017'、'ES2018'、'ES2019'、'ES2020' 或 'ESNEXT'。",
-  "Specify_JSX_code_generation_Colon_preserve_react_native_or_react_6080": "指定 JSX 程式碼產生: 'preserve'、'react-native' 或 'react'。",
-  "Specify_emit_Slashchecking_behavior_for_imports_that_are_only_used_for_types_1368": "指定僅用於類型之匯入的發出/檢查行為",
+  "Specify_ECMAScript_target_version_6015": "指定 ECMAScript 目標版本。",
+  "Specify_JSX_code_generation_6080": "指定 JSX 程式碼產生。",
+  "Specify_a_file_that_bundles_all_outputs_into_one_JavaScript_file_If_declaration_is_true_also_designa_6679": "指定將所有輸出組合成一個 JavaScript 檔案的檔案。如果 `declaration` 為 True,則也會指定組合所有 .d.ts 輸出的檔案。",
+  "Specify_a_list_of_glob_patterns_that_match_files_to_be_included_in_compilation_6641": "指定符合編譯中要包含之檔案的 glob 模式清單。",
+  "Specify_a_list_of_language_service_plugins_to_include_6681": "指定要包含的語言服務外掛程式清單。",
+  "Specify_a_set_of_bundled_library_declaration_files_that_describe_the_target_runtime_environment_6651": "指定一組描述目標執行階段環境的配套程式庫宣告檔案。",
+  "Specify_a_set_of_entries_that_re_map_imports_to_additional_lookup_locations_6680": "指定一組將匯入重新對應至其他查閱位置的項目。",
+  "Specify_an_array_of_objects_that_specify_paths_for_projects_Used_in_project_references_6687": "指定為專案指定路徑的物件陣列。用於專案參考。",
+  "Specify_an_output_folder_for_all_emitted_files_6678": "指定所有發出檔案的輸出檔案夾。",
+  "Specify_emit_Slashchecking_behavior_for_imports_that_are_only_used_for_types_6718": "指定僅用於類型之匯入的發出/檢查行為",
   "Specify_file_to_store_incremental_compilation_information_6380": "指定要儲存累加編譯資訊的檔案",
+  "Specify_how_TypeScript_looks_up_a_file_from_a_given_module_specifier_6658": "指定 TypeScript 從指定的模組指定名稱查詢檔案的方式。",
+  "Specify_how_directories_are_watched_on_systems_that_lack_recursive_file_watching_functionality_6714": "指定在缺少遞迴檔案監視功能之系統上如何監視目錄。",
+  "Specify_how_the_TypeScript_watch_mode_works_6715": "指定 TypeScript 監看式模式的運作方式。",
   "Specify_library_files_to_be_included_in_the_compilation_6079": "請指定要併入編譯中的程式庫檔案。",
-  "Specify_module_code_generation_Colon_none_commonjs_amd_system_umd_es2015_es2020_or_ESNext_6016": "指定模組程式碼產生: 'none'、'commonjs'、'amd'、'system'、'umd'、'es2015'、'es2020' 或 'ESNext'。",
+  "Specify_module_code_generation_6016": "指定模組程式碼產生。",
   "Specify_module_resolution_strategy_Colon_node_Node_js_or_classic_TypeScript_pre_1_6_6069": "指定模組解決方案策略: 'node' (Node.js) 或 'classic' (TypeScript 1.6 前)。",
-  "Specify_strategy_for_creating_a_polling_watch_when_it_fails_to_create_using_file_system_events_Colon_6227": "指定當無法使用下列檔案系統事件建立時,建立輪詢監看的策略: 'FixedInterval' (預設)、'PriorityInterval'、'DynamicPriority'。",
-  "Specify_strategy_for_watching_directory_on_platforms_that_don_t_support_recursive_watching_natively__6226": "指定在不支援原生遞迴監看的平台上,監看目錄的策略: 'UseFsEvents' (預設)、'FixedPollingInterval'、'DynamicPriorityPolling'。",
-  "Specify_strategy_for_watching_file_Colon_FixedPollingInterval_default_PriorityPollingInterval_Dynami_6225": "指定監看檔案的策略: 'FixedPollingInterval' (預設)、'PriorityPollingInterval'、'DynamicPriorityPolling'、'UseFsEvents'、'UseFsEventsOnParentDirectory'。",
+  "Specify_module_specifier_used_to_import_the_JSX_factory_functions_when_using_jsx_Colon_react_jsx_Ast_6649": "指定使用 `jsx: react-jsx*` 時,用來匯入 JSX Factory 函式的模組指定名稱。",
+  "Specify_multiple_folders_that_act_like_Slashnode_modules_Slash_types_6710": "指定多個資料夾,其作用類似 `./node_modules/@types`。",
+  "Specify_one_or_more_path_or_node_module_references_to_base_configuration_files_from_which_settings_a_6633": "指定一或多個路徑或節點模組參考至繼承設定的基礎設定檔。",
+  "Specify_options_for_automatic_acquisition_of_declaration_files_6709": "指定用於自動擷取宣告檔案的選項。",
+  "Specify_strategy_for_creating_a_polling_watch_when_it_fails_to_create_using_file_system_events_Colon_6227": "指定當輪詢監看無法使用下列檔案系統事件建立時,加以建立的策略: 'FixedInterval' (預設)、'PriorityInterval'、'DynamicPriority'、'FixedChunkSize'。",
+  "Specify_strategy_for_watching_directory_on_platforms_that_don_t_support_recursive_watching_natively__6226": "指定在未原生支援遞迴監看的平台上,監看目錄的策略: 'UseFsEvents' (預設)、'FixedPollingInterval'、'DynamicPriorityPolling'、'FixedChunkSizePolling'。",
+  "Specify_strategy_for_watching_file_Colon_FixedPollingInterval_default_PriorityPollingInterval_Dynami_6225": "指定監看檔案的策略: 'FixedPollingInterval' (預設)、'PriorityPollingInterval'、'DynamicPriorityPolling'、'FixedChunkSizePolling'、'UseFsEvents'、'UseFsEventsOnParentDirectory'。",
+  "Specify_the_JSX_Fragment_reference_used_for_fragments_when_targeting_React_JSX_emit_e_g_React_Fragme_6648": "指定要在以 React JSX 發出為目標時使用於片段的 JSX 片段參考,例如 'React.Fragment' 或 'Fragment'。",
   "Specify_the_JSX_factory_function_to_use_when_targeting_react_JSX_emit_e_g_React_createElement_or_h_6146": "請指定要在以 'react' JSX 發出為目標時使用的 JSX factory 函式。例如 'React.createElement' 或 'h'。",
+  "Specify_the_JSX_factory_function_used_when_targeting_React_JSX_emit_e_g_React_createElement_or_h_6647": "指定要在以 React JSX 發出為目標時使用的 JSX factory 函式,例如 'React.createElement' 或 'h'",
   "Specify_the_JSX_fragment_factory_function_to_use_when_targeting_react_JSX_emit_with_jsxFactory_compi_18034": "當指定以 'jsxFactory' 編譯器選項設定 'react' JSX 輸出的目標時,請指定要使用的 JSX 片段處理站函式,例如 'Fragment'。",
+  "Specify_the_base_directory_to_resolve_non_relative_module_names_6607": "指定基礎目錄來解析非相對的模組名稱。",
   "Specify_the_end_of_line_sequence_to_be_used_when_emitting_files_Colon_CRLF_dos_or_LF_unix_6060": "指定發出檔案時要用的行尾順序: 'CRLF' (DOS) 或 'LF' (UNIX)。",
+  "Specify_the_folder_for_tsbuildinfo_incremental_compilation_files_6707": "指定 .tsbuildinfo 累加編譯檔案的資料夾。",
   "Specify_the_location_where_debugger_should_locate_TypeScript_files_instead_of_source_locations_6004": "指定偵錯工具尋找 TypeScript 檔案的位置,而非原始檔位置。",
-  "Specify_the_location_where_debugger_should_locate_map_files_instead_of_generated_locations_6003": "指定偵錯工具尋找對應檔的位置,而非產生的位置。",
-  "Specify_the_module_specifier_to_be_used_to_import_the_jsx_and_jsxs_factory_functions_from_eg_react_6238": "指定用於匯入 `jsx` 與 `jsxs` Factory 函式的模組指定名稱。例如,傳送表情符號",
+  "Specify_the_location_where_debugger_should_locate_map_files_instead_of_generated_locations_6655": "指定偵錯工具尋找對應檔的位置,而非產生的位置。",
+  "Specify_the_maximum_folder_depth_used_for_checking_JavaScript_files_from_node_modules_Only_applicabl_6656": "指定用於檢查來自 `node_modules` 的 JavaScript 檔案的資料夾深度上限。僅適用於 `allowJs`。",
+  "Specify_the_module_specifier_to_be_used_to_import_the_jsx_and_jsxs_factory_functions_from_eg_react_6238": "指定用於匯入 `jsx` 與 `jsxs` 工廠函式的模組指定名稱。例如,傳送表情符號",
+  "Specify_the_object_invoked_for_createElement_This_only_applies_when_targeting_react_JSX_emit_6686": "指定要針對 `createElement` 叫用的物件。這僅適用於以 `react` JSX 發出為目標時。",
+  "Specify_the_output_directory_for_generated_declaration_files_6613": "指定產生的宣告檔案的輸出目錄。",
   "Specify_the_root_directory_of_input_files_Use_to_control_the_output_directory_structure_with_outDir_6058": "指定輸入檔的根目錄。用以控制具有 --outDir 的輸出目錄結構。",
+  "Specify_the_root_folder_within_your_source_files_6690": "指定來源檔案內的根資料夾。",
+  "Specify_the_root_path_for_debuggers_to_find_the_reference_source_code_6695": "指定偵錯工具尋找參考原始程式碼的根路徑。",
+  "Specify_type_package_names_to_be_included_without_being_referenced_in_a_source_file_6711": "指定要包含的類型封裝名稱,而不在來源檔案中參考。",
+  "Specify_what_JSX_code_is_generated_6646": "指定要產生的 JSX 程式碼。",
+  "Specify_what_approach_the_watcher_should_use_if_the_system_runs_out_of_native_file_watchers_6634": "指定當系統用盡原生檔案監控程式時,監控程式應使用的方法。",
+  "Specify_what_module_code_is_generated_6657": "指定要產生的模組程式碼。",
   "Split_all_invalid_type_only_imports_1367": "分割所有無效的僅限類型匯入",
   "Split_into_two_separate_import_declarations_1366": "分割為兩個獨立的匯入宣告",
   "Spread_operator_in_new_expressions_is_only_available_when_targeting_ECMAScript_5_and_higher_2472": "只有當目標為 ECMAScript 5 及更高版本時,才可使用 'new' 運算式中的擴張運算子。",
@@ -1101,9 +1329,9 @@
   "Starting_compilation_in_watch_mode_6031": "在監看模式中開始編譯...",
   "Statement_expected_1129": "必須是陳述式。",
   "Statements_are_not_allowed_in_ambient_contexts_1036": "環境內容中不得有陳述式。",
+  "Static_fields_with_private_names_can_t_have_initializers_when_the_useDefineForClassFields_flag_is_no_2805": "當 '--useDefineForClassFields' 旗標未以 'esnext' 的 '--target' 指定時,具有私人名稱的靜態欄位不得有初始設定式。請考慮新增 '--useDefineForClassFields' 旗標。",
   "Static_members_cannot_reference_class_type_parameters_2302": "靜態成員不得參考類別類型參數。",
   "Static_property_0_conflicts_with_built_in_property_Function_0_of_constructor_function_1_2699": "靜態屬性 '{0}' 與建構函式 '{1}' 的內建屬性 'Function.{0}' 相衝突。",
-  "Strict_Type_Checking_Options_6173": "Strict 類型檢查選項",
   "String_literal_expected_1141": "必須是字串常值。",
   "String_literal_with_double_quotes_expected_1327": "應有具雙引號的字串常值。",
   "Stylize_errors_and_messages_using_color_and_context_experimental_6073": "使用色彩及內容來設計錯誤與訊息的風格 (實驗)。",
@@ -1117,9 +1345,10 @@
   "Super_calls_are_not_permitted_outside_constructors_or_in_nested_functions_inside_constructors_2337": "建構函式外部或建構函式內的巢狀函式中不允許 super 呼叫。",
   "Suppress_excess_property_checks_for_object_literals_6072": "不對物件常值進行多餘的屬性檢查。",
   "Suppress_noImplicitAny_errors_for_indexing_objects_lacking_index_signatures_6055": "針對缺少索引簽章的索引物件隱藏 noImplicitAny 錯誤。",
+  "Suppress_noImplicitAny_errors_when_indexing_objects_that_lack_index_signatures_6703": "針對缺少索引簽章的物件編製索引時,隱藏 `noImplicitAny` 錯誤。",
   "Switch_each_misused_0_to_1_95138": "將每個誤用的 '{0}' 切換成 '{1}'",
   "Symbol_reference_does_not_refer_to_the_global_Symbol_constructor_object_2470": "'Symbol' 參考不是參考全域 Symbol 建構函式物件。",
-  "Synchronously_call_callbacks_and_update_the_state_of_directory_watchers_on_platforms_that_don_t_supp_6228": "呼叫回呼,並更新不支援原生遞迴監看之平台上的目錄監控程式狀態。",
+  "Synchronously_call_callbacks_and_update_the_state_of_directory_watchers_on_platforms_that_don_t_supp_6704": "在不支援原生遞迴監視之平台上,同步呼叫回呼並更新目錄監控程式的狀態。",
   "Syntax_Colon_0_6023": "語法: {0}",
   "Tag_0_expects_at_least_1_arguments_but_the_JSX_factory_2_provides_at_most_3_6229": "標籤 '{0}' 至少需要 '{1}' 個引數,但 JSX factory '{2}' 最多只提供 '{3}' 個。",
   "Tagged_template_expressions_are_not_permitted_in_an_optional_chain_1358": "選擇性鏈結中不允許已標記的範本運算式。",
@@ -1141,10 +1370,12 @@
   "The_containing_function_or_module_body_is_too_large_for_control_flow_analysis_2563": "內含的函式或模組主體對控制流程分析而言過大。",
   "The_current_host_does_not_support_the_0_option_5001": "目前的主機不支援 '{0}' 選項。",
   "The_declaration_of_0_that_you_probably_intended_to_use_is_defined_here_18018": "您可能要使用的 '{0}' 宣告定義於此處",
+  "The_declaration_was_marked_as_deprecated_here_2798": "該宣告在這裡標示為已淘汰。",
   "The_expected_type_comes_from_property_0_which_is_declared_here_on_type_1_6500": "所需類型來自屬性 '{0}',該屬性宣告於此處的類型 '{1}' 上",
   "The_expected_type_comes_from_the_return_type_of_this_signature_6502": "所需類型來自此簽章的傳回型別。",
   "The_expected_type_comes_from_this_index_signature_6501": "所需類型來自此索引簽章。",
   "The_expression_of_an_export_assignment_must_be_an_identifier_or_qualified_name_in_an_ambient_context_2714": "匯出指派的運算式必須是環境內容中的識別碼或完整名稱。",
+  "The_file_is_in_the_program_because_Colon_1430": "檔案在程式中,因為:",
   "The_files_list_in_config_file_0_is_empty_18002": "設定檔 '{0}' 中的 'files' 清單是空的。",
   "The_first_export_default_is_here_2752": "第一個匯出預設位於此處。",
   "The_first_parameter_of_the_then_method_of_a_promise_must_be_a_callback_1060": "Promise 的 'then' 方法第一個參數必須為回撥。",
@@ -1168,6 +1399,7 @@
   "The_left_hand_side_of_a_for_in_statement_must_be_of_type_string_or_any_2405": "'for...in' 陳述式的左側必須是類型 'string' 或 'any'。",
   "The_left_hand_side_of_a_for_of_statement_cannot_use_a_type_annotation_2483": "'for...of' 陳述式的左側不得使用類型註釋。",
   "The_left_hand_side_of_a_for_of_statement_may_not_be_an_optional_property_access_2781": "'for...of' 陳述式的左側不可為選擇性屬性存取。",
+  "The_left_hand_side_of_a_for_of_statement_may_not_be_async_1106": "'for...of' 陳述式的左側不可為 'async'。",
   "The_left_hand_side_of_a_for_of_statement_must_be_a_variable_or_a_property_access_2487": "'for...of' 陳述式的左邊必須是變數或屬性存取。",
   "The_left_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type_2362": "算術運算的左側內容必須屬於 'any'、'number'、'bigint' 或列舉類型。",
   "The_left_hand_side_of_an_assignment_expression_may_not_be_an_optional_property_access_2779": "指派運算式的左側不可為選擇性屬性存取。",
@@ -1185,15 +1417,18 @@
   "The_parser_expected_to_find_a_to_match_the_token_here_1007": "剖析器需找到可與此處 '{' 語彙基元搭配的 '}'。",
   "The_property_0_cannot_be_accessed_on_type_1_within_this_class_because_it_is_shadowed_by_another_priv_18014": "無法在此類別內的類型 '{1}' 上存取屬性 '{0}',原因是另一個拼字相同的私人識別碼已將其陰影。",
   "The_return_type_of_a_JSX_element_constructor_must_return_an_object_type_2601": "JSX 項目建構函式的傳回型別必須傳回物件類型。",
+  "The_return_type_of_a_get_accessor_must_be_assignable_to_its_set_accessor_type_2380": "'get' 存取子的傳回型別必須可指派給其 'set' 存取子類型",
   "The_return_type_of_a_parameter_decorator_function_must_be_either_void_or_any_1237": "參數裝飾項目函式的傳回型別必須是 'void' 或 'any'。",
   "The_return_type_of_a_property_decorator_function_must_be_either_void_or_any_1236": "屬性裝飾項目函式的傳回型別必須是 'void' 或 'any'。",
   "The_return_type_of_an_async_function_must_either_be_a_valid_promise_or_must_not_contain_a_callable_t_1058": "非同步函式的傳回型別必須是有效的 Promise,或不得包含可呼叫的 'then' 成員。",
   "The_return_type_of_an_async_function_or_method_must_be_the_global_Promise_T_type_Did_you_mean_to_wri_1064": "非同步函式或方法的傳回型別,必須為全域 Promise<T> 類型。是否要寫入 'Promise<{0}>'?",
   "The_right_hand_side_of_a_for_in_statement_must_be_of_type_any_an_object_type_or_a_type_parameter_but_2407": "'for...in' 陳述式的右方必須是類型 'any'、物件類型或型別參數,但此處為類型 '{0}'。",
   "The_right_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type_2363": "算術運算的右側內容必須屬於 'any'、'number'、'bigint' 或列舉類型。",
-  "The_right_hand_side_of_an_in_expression_must_be_of_type_any_an_object_type_or_a_type_parameter_2361": "'in' 運算式的右側必須是類型 'any'、物件類型或型別參數。",
+  "The_right_hand_side_of_an_in_expression_must_not_be_a_primitive_2361": "'In' 運算式的右側不得為基元。",
   "The_right_hand_side_of_an_instanceof_expression_must_be_of_type_any_or_of_a_type_assignable_to_the_F_2359": "'instanceof' 運算式的右側必須是 'any' 類型,或是可指派給 'Function' 介面類型的類型。",
+  "The_root_value_of_a_0_file_must_be_an_object_5092": "'{0}' 檔案的根值必須是物件。",
   "The_shadowing_declaration_of_0_is_defined_here_18017": "'{0}' 的隱蔽宣告定義於此處",
+  "The_signature_0_of_1_is_deprecated_6387": "'{1}' 的特徵標記 '{0}' 已淘汰。",
   "The_specified_path_does_not_exist_Colon_0_5058": "指定的路徑不存在: '{0}'。",
   "The_tag_was_first_specified_here_8034": "此標籤第一次指定於此處。",
   "The_target_of_an_assignment_must_be_a_variable_or_a_property_access_2541": "指派的目標必須是變數或屬性存取。",
@@ -1204,6 +1439,7 @@
   "The_type_0_is_readonly_and_cannot_be_assigned_to_the_mutable_type_1_4104": "類型 '{0}' 為 'readonly',因此無法指派給可變動的類型 '{1}'。",
   "The_type_argument_for_type_parameter_0_cannot_be_inferred_from_the_usage_Consider_specifying_the_typ_2453": "無法從使用方式推斷型別參數 '{0}' 的型別引數。請考慮明確地指定型別引數。",
   "The_type_of_a_function_declaration_must_match_the_function_s_signature_8030": "函式宣告的類型必須與函式的簽章相符。",
+  "The_type_of_this_node_cannot_be_serialized_because_its_property_0_cannot_be_serialized_4118": "無法將此節點的類型序列化,因為無法將其屬性 '{0}' 序列化。",
   "The_type_returned_by_the_0_method_of_an_async_iterator_must_be_a_promise_for_a_type_with_a_value_pro_2547": "非同步迭代器 '{0}()' 方法所傳回的類型,對具有 'value' 屬性的類型必須為 Promise。",
   "The_type_returned_by_the_0_method_of_an_iterator_must_have_a_value_property_2490": "迭代器 '{0}()' 方法所傳回的類型必須具有 'value' 屬性。",
   "The_types_of_0_are_incompatible_between_these_types_2200": "'{0}' 的類型在這些類型之間不相容。",
@@ -1214,7 +1450,8 @@
   "This_JSX_tag_s_0_prop_expects_a_single_child_of_type_1_but_multiple_children_were_provided_2746": "此 JSX 標籤的 '{0}' 屬性只能有一個 '{1}' 類型的子系,但提供的子系卻有多個。",
   "This_JSX_tag_s_0_prop_expects_type_1_which_requires_multiple_children_but_only_a_single_child_was_pr_2745": "此 JSX 標籤的 '{0}' 屬性需要必須有多個子系的類型 '{1}',但僅提供的子系只有一個。",
   "This_condition_will_always_return_0_since_the_types_1_and_2_have_no_overlap_2367": "因為類型 '{1}' 與 '{2}' 未重疊,所以此條件永遠會傳回 '{0}'。",
-  "This_condition_will_always_return_true_since_the_function_is_always_defined_Did_you_mean_to_call_it__2774": "因為永遠會定義函式,所以此條件永遠會傳回 true。您是要改為呼叫該條件嗎?",
+  "This_condition_will_always_return_true_since_this_0_is_always_defined_2801": "因為此 '{0}' 一律會被定義,所以此條件一律傳回 True。",
+  "This_condition_will_always_return_true_since_this_function_is_always_defined_Did_you_mean_to_call_it_2774": "因為永遠會定義此函式,所以此條件永遠會傳回 true。您是要改為呼叫該條件嗎?",
   "This_constructor_function_may_be_converted_to_a_class_declaration_80002": "此建構函式可轉換為類別宣告。",
   "This_expression_is_not_callable_2349": "無法呼叫此運算式。",
   "This_expression_is_not_callable_because_it_is_a_get_accessor_Did_you_mean_to_use_it_without_6234": "因為此運算式為 'get' 存取子,所以無法呼叫。要在沒有 '()' 的情況下,使用該運算式嗎?",
@@ -1223,15 +1460,23 @@
   "This_import_is_never_used_as_a_value_and_must_use_import_type_because_importsNotUsedAsValues_is_set__1371": "因為 'importsNotUsedAsValues' 設為 'error',所以永遠不會使用此匯入作為值,且必須使用 'import type'。",
   "This_is_the_declaration_being_augmented_Consider_moving_the_augmenting_declaration_into_the_same_fil_6233": "此宣告正在增加中。請考慮將正在增加的宣告移至相同的檔案中。",
   "This_may_be_converted_to_an_async_function_80006": "這可以轉換為非同步函式。",
+  "This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0_4113": "因為此成員並未在基底類別 '{0}' 中宣告,所以其不得具有 'override' 修飾元。",
+  "This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0_Did_you__4117": "此成員不能具有 'override' 修飾元,因為並未在基底類別 '{0}' 中宣告此成員。您指的是 '{1}' 嗎?",
+  "This_member_cannot_have_an_override_modifier_because_its_containing_class_0_does_not_extend_another__4112": "因為此成員包含的類別 '{0}' 並未延伸其他類別,所以其不得具有 'override' 修飾元。",
+  "This_member_must_have_an_override_modifier_because_it_overrides_a_member_in_the_base_class_0_4114": "因為此成員會覆寫基底類別 '{0}' 中的成員,所以其必須具有 'override' 修飾元。",
+  "This_member_must_have_an_override_modifier_because_it_overrides_an_abstract_method_that_is_declared__4116": "因為此成員會覆寫基底類別 '{0}' 中宣告的抽象方法,所以其必須具有 'override' 修飾元。",
   "This_module_can_only_be_referenced_with_ECMAScript_imports_Slashexports_by_turning_on_the_0_flag_and_2497": "只能以 ECMAScript 匯入/匯出來參考此模組,方法為開啟 '{0}' 旗標並參考其預設匯出。",
   "This_module_is_declared_with_using_export_and_can_only_be_used_with_a_default_import_when_using_the__2594": "此模組使用 'export =' 宣告,只能在使用 '{0}' 旗標時搭配預設匯入使用。",
   "This_overload_signature_is_not_compatible_with_its_implementation_signature_2394": "此多載簽章與其實作簽章不相容。",
   "This_parameter_is_not_allowed_with_use_strict_directive_1346": "不允許此參數搭配 'use strict' 指示詞使用。",
+  "This_parameter_property_must_have_an_override_modifier_because_it_overrides_a_member_in_base_class_0_4115": "因為此參數屬性會覆寫基底類別 '{0}' 中的成員,所以其必須具有 'override' 修飾元。",
   "This_spread_always_overwrites_this_property_2785": "此展開會永遠覆寫此屬性。",
   "This_syntax_requires_an_imported_helper_but_module_0_cannot_be_found_2354": "此語法需要已匯入的協助程式,但找不到模組 '{0}'。",
   "This_syntax_requires_an_imported_helper_named_1_which_does_not_exist_in_0_Consider_upgrading_your_ve_2343": "此語法需要名為 '{1}' 的已匯入協助程式,但其不存在於 '{0}' 中。請考慮升級您的 '{0}' 版本。",
+  "This_syntax_requires_an_imported_helper_named_1_with_2_parameters_which_is_not_compatible_with_the_o_2807": "此語法需要名為 '{1}' 且具有 {2} 參數的匯入協助程式,其與 '{0}' 中的參數不相容。請考慮升級 '{0}' 的版本。",
   "Top_level_await_expressions_are_only_allowed_when_the_module_option_is_set_to_esnext_or_system_and_t_1378": "只有在 'module' 選項設定為 'esnext' 或 'system',而且 'target' 選項設定為 'es2017' 或更高版本時,才允許最上層的 'await' 運算式。",
   "Top_level_declarations_in_d_ts_files_must_start_with_either_a_declare_or_export_modifier_1046": ".d.ts 檔案中的最上層宣告必須以 'declare' 或 'export' 修飾元開頭。",
+  "Top_level_for_await_loops_are_only_allowed_when_the_module_option_is_set_to_esnext_or_system_and_the_1432": "只有在 'module' 選項設為 'esnext' 或 'system',而且 'target' 選項設為 'es2017' 或更高版本時,才允許最上層的 'for await' 迴圈。",
   "Trailing_comma_not_allowed_1009": "尾端不得為逗號。",
   "Transpile_each_file_as_a_separate_module_similar_to_ts_transpileModule_6153": "以個別模組的形式轉換每個檔案的語言 (類似於 'ts.transpileModule')。",
   "Try_npm_i_save_dev_types_Slash_1_if_it_exists_or_add_a_new_declaration_d_ts_file_containing_declare__7035": "如有 `npm i --save-dev @types/{1}`,請嘗試使用,或新增包含 `declare module '{0}';` 的宣告 (.d.ts) 檔案",
@@ -1240,6 +1485,7 @@
   "Tuple_members_must_all_have_names_or_all_not_have_names_5084": "元組成員必須全數有名稱或都沒有名稱。",
   "Tuple_type_0_of_length_1_has_no_element_at_index_2_2493": "長度為 '{1}' 的元組類型 '{0}' 在索引 '{2}' 沒有項目。",
   "Tuple_type_arguments_circularly_reference_themselves_4110": "元組類型引數會循環參考自身。",
+  "Type_0_can_only_be_iterated_through_when_using_the_downlevelIteration_flag_or_with_a_target_of_es201_2802": "只有使用 '--downlevelIteration' 旗標或 'es2015' 或更新版本的 '--target' 時,才能逐一查看類型 '{0}'。",
   "Type_0_cannot_be_used_as_an_index_type_2538": "類型 '{0}' 無法作為索引類型。",
   "Type_0_cannot_be_used_to_index_type_1_2536": "類型 '{0}' 無法用來為類型 '{1}' 編制索引。",
   "Type_0_does_not_satisfy_the_constraint_1_2344": "類型 '{0}' 不符合條件約束 '{1}'。",
@@ -1264,7 +1510,9 @@
   "Type_0_must_have_a_Symbol_iterator_method_that_returns_an_iterator_2488": "類型 '{0}' 必須具備會傳回迭代器的 '[Symbol.iterator]()' 方法。",
   "Type_0_provides_no_match_for_the_signature_1_2658": "類型 '{0}' 沒有符合特徵標記 '{1}' 的項目。",
   "Type_0_recursively_references_itself_as_a_base_type_2310": "類型 '{0}' 將自己當做基底類型遞迴參考。",
+  "Type_Checking_6248": "類型檢查",
   "Type_alias_0_circularly_references_itself_2456": "類型別名 '{0}' 會循環參考自己。",
+  "Type_alias_must_be_given_a_name_1439": "必須為類型別名指定名稱。",
   "Type_alias_name_cannot_be_0_2457": "類型別名不得為 '{0}'。",
   "Type_aliases_can_only_be_used_in_TypeScript_files_8008": "類型別名只可用於 TypeScript 檔案中。",
   "Type_annotation_cannot_appear_on_a_constructor_declaration_1093": "建構函式宣告不得有類型註釋。",
@@ -1276,10 +1524,15 @@
   "Type_arguments_cannot_be_used_here_1342": "此處不得使用型別引數。",
   "Type_arguments_for_0_circularly_reference_themselves_4109": "'{0}' 的類型引數會循環參考自身。",
   "Type_assertion_expressions_can_only_be_used_in_TypeScript_files_8016": "類型判斷提示運算式只可用於 TypeScript 檔案中。",
+  "Type_at_position_0_in_source_is_not_compatible_with_type_at_position_1_in_target_2626": "來源中位於 {0} 的類型與目標中位於 {1} 的類型不相容。",
+  "Type_at_positions_0_through_1_in_source_is_not_compatible_with_type_at_position_2_in_target_2627": "來源中位於 {0} 到 {1} 的類型與目標中位於 {2} 的類型不相容。",
+  "Type_catch_clause_variables_as_unknown_instead_of_any_6803": "將 catch 子句變數輸入為 'unknown' 而非 'any'。",
   "Type_declaration_files_to_be_included_in_compilation_6124": "要包含在編譯內的類型宣告檔案。",
   "Type_expected_1110": "必須是類型。",
   "Type_instantiation_is_excessively_deep_and_possibly_infinite_2589": "類型具現化過深,可能會有無限深度。",
   "Type_is_referenced_directly_or_indirectly_in_the_fulfillment_callback_of_its_own_then_method_1062": "類型在其本身 'then' 方法的完成回撥中直接或間接受到參考。",
+  "Type_library_referenced_via_0_from_file_1_1402": "透過 '{0}' 從檔案 '{1}' 參考的型別程式庫",
+  "Type_library_referenced_via_0_from_file_1_with_packageId_2_1403": "透過 '{0}' 從檔案 '{1}' (packageId 為 '{2}') 參考的型別程式庫",
   "Type_of_await_operand_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member_1320": "'await' 運算元類型必須是有效的 Promise,或不得包含可呼叫的 'then' 成員。",
   "Type_of_computed_property_s_value_is_0_which_is_not_assignable_to_type_1_2418": "已計算屬性值的類型為 '{0}',其無法指派給類型 '{1}'。",
   "Type_of_iterated_elements_of_a_yield_Asterisk_operand_must_either_be_a_valid_promise_or_must_not_con_1322": "'yield*' 運算元的反覆項目類型必須是有效的 Promise,或不得包含可呼叫的 'then' 成員。",
@@ -1305,6 +1558,7 @@
   "Type_parameter_name_cannot_be_0_2368": "型別參數名稱不得為 '{0}'。",
   "Type_parameters_cannot_appear_on_a_constructor_declaration_1092": "建構函式宣告不得有類型參數。",
   "Type_predicate_0_is_not_assignable_to_1_1226": "型別述詞 '{0}' 不可指派給 '{1}'。",
+  "Type_produces_a_tuple_type_that_is_too_large_to_represent_2799": "類型產生的元組類型太大而無法表示。",
   "Type_reference_directive_0_was_not_resolved_6120": "======== 類型參考指示詞 '{0}' 未解析。========",
   "Type_reference_directive_0_was_successfully_resolved_to_1_primary_Colon_2_6119": "======== 類型參考指示詞 '{0}' 已成功解析為 '{1}',主要: {2}。========",
   "Type_reference_directive_0_was_successfully_resolved_to_1_with_Package_ID_2_primary_Colon_3_6219": "======== 類型參考指示詞 '{0}' 已成功解析為 '{1}',套件識別碼為 '{2}',主要: {3}。========",
@@ -1318,6 +1572,7 @@
   "Unable_to_resolve_signature_of_parameter_decorator_when_called_as_an_expression_1239": "無法解析以運算式形式呼叫之參數裝飾項目的簽章。",
   "Unable_to_resolve_signature_of_property_decorator_when_called_as_an_expression_1240": "無法解析以運算式形式呼叫之屬性裝飾項目的簽章。",
   "Unexpected_end_of_text_1126": "未預期的文字結尾。",
+  "Unexpected_keyword_or_identifier_1434": "未預期的關鍵字或識別碼。",
   "Unexpected_token_1012": "未預期的語彙基元。",
   "Unexpected_token_A_constructor_method_accessor_or_property_was_expected_1068": "未預期的語彙基元。必須是建構函式、方法、存取子或屬性。",
   "Unexpected_token_A_type_parameter_name_was_expected_without_curly_braces_1069": "權杖錯誤。類型參數名稱不應有大括號。",
@@ -1328,6 +1583,7 @@
   "Unknown_build_option_0_Did_you_mean_1_5077": "未知的組建選項 '{0}'。您是指 '{1}' 嗎?",
   "Unknown_compiler_option_0_5023": "不明的編譯器選項 '{0}'。",
   "Unknown_compiler_option_0_Did_you_mean_1_5025": "未知的編譯器選項 '{0}'。您是指 '{1}' 嗎?",
+  "Unknown_keyword_or_identifier_Did_you_mean_0_1435": "未知的關鍵字或識別碼。您是不是指 '{0}'?",
   "Unknown_option_excludes_Did_you_mean_exclude_6114": "選項 'excludes' 未知。您是指 'exclude' 嗎?",
   "Unknown_type_acquisition_option_0_17010": "未知的類型取得選項 '{0}'。",
   "Unknown_type_acquisition_option_0_Did_you_mean_1_17018": "未知的類型擷取選項 '{0}'。您是指 '{1}' 嗎?",
@@ -1350,6 +1606,7 @@
   "Use_element_access_for_all_undeclared_properties_95146": "對所有未宣告的屬性使用元素存取。",
   "Use_synthetic_default_member_95016": "使用綜合 'default' 成員。",
   "Using_a_string_in_a_for_of_statement_is_only_supported_in_ECMAScript_5_and_higher_2494": "只有在 ECMAScript 5 及更高版本中,才可在 'for...of' 陳述式中使用字串。",
+  "Using_build_b_will_make_tsc_behave_more_like_a_build_orchestrator_than_a_compiler_This_is_used_to_tr_6915": "使用 --build、-b 會讓 tsc 的行為較編譯器更像是建置協調器。這可用於觸發建置複合專案,您可以在以下位置深入了解: {0}",
   "Using_compiler_options_of_project_reference_redirect_0_6215": "正在使用專案參考重新導向 '{0}' 的編譯器選項。",
   "VERSION_6036": "版本",
   "Value_of_type_0_has_no_properties_in_common_with_type_1_Did_you_mean_to_call_it_2560": "類型為 '{0}' 的值與類型 '{1}' 沒有任何共通的屬性。確定要呼叫嗎?",
@@ -1361,10 +1618,16 @@
   "Variable_0_is_used_before_being_assigned_2454": "變數 '{0}' 已在指派之前使用。",
   "Variable_declaration_expected_1134": "必須是變數宣告。",
   "Variable_declaration_list_cannot_be_empty_1123": "變數宣告清單不得為空白。",
+  "Variable_declaration_not_allowed_at_this_location_1440": "此位置不允許變數宣告。",
+  "Variadic_element_at_position_0_in_source_does_not_match_element_at_position_1_in_target_2625": "來源中位於 {0} 的可變元素與目標中位於 {1} 的元素不相符。",
   "Version_0_6029": "版本 {0}",
   "Visit_https_Colon_Slash_Slashaka_ms_Slashtsconfig_json_to_read_more_about_this_file_95110": "瀏覽 https://aka.ms/tsconfig.json 以閱讀此檔案的詳細資訊",
+  "WATCH_OPTIONS_6918": "監看式選項",
+  "Watch_and_Build_Modes_6250": "觀看及建置模式",
   "Watch_input_files_6005": "監看輸入檔。",
   "Watch_option_0_requires_a_value_of_type_1_5080": "監看選項 '{0}' 需要 {1} 類型的值。",
+  "When_assigning_functions_check_to_ensure_parameters_and_the_return_values_are_subtype_compatible_6698": "指派函式時,請檢查以確認參數,而且傳回值是子類型相容的。",
+  "When_type_checking_take_into_account_null_and_undefined_6699": "當型別檢查時,請將 `null` 和 `undefined` 納入考慮。",
   "Whether_to_keep_outdated_console_output_in_watch_mode_instead_of_clearing_the_screen_6191": "是否要將已過期的主控台輸出,維持在監看模式下,而非清除螢幕。",
   "Wrap_all_invalid_characters_in_an_expression_container_95109": "將所有無效字元包裝在運算式容器中",
   "Wrap_all_object_literal_with_parentheses_95116": "使用括弧括住所有物件常值",
@@ -1372,10 +1635,12 @@
   "Wrap_in_JSX_fragment_95120": "包裝至 JSX 片段中",
   "Wrap_invalid_character_in_an_expression_container_95108": "包裝在運算式容器中的字元無效",
   "Wrap_the_following_body_with_parentheses_which_should_be_an_object_literal_95113": "使用括弧括住下列必須是物件常值的主體",
+  "You_can_learn_about_all_of_the_compiler_options_at_0_6913": "您可以在以下位置了解所有編譯器選項: {0}",
   "You_cannot_rename_a_module_via_a_global_import_8031": "您無法透過全域匯入重新命名模組。",
   "You_cannot_rename_elements_that_are_defined_in_the_standard_TypeScript_library_8001": "您無法重新命名標準 TypeScript 程式庫中所定義的項目。",
   "You_cannot_rename_this_element_8000": "您無法重新命名這個項目。",
   "_0_accepts_too_few_arguments_to_be_used_as_a_decorator_here_Did_you_mean_to_call_it_first_and_write__1329": "'{0}' 在此只接受極少數的引數用為裝飾項目。要先呼叫此項目,然後再寫入 '@{0}()' 嗎?",
+  "_0_and_1_index_signatures_are_incompatible_2330": "'{0}' 和 '{1}' 索引簽章不相容。",
   "_0_and_1_operations_cannot_be_mixed_without_parentheses_5076": "'{0}' 與 '{1}' 作業無法在沒有括號的情況下同時使用。",
   "_0_are_specified_twice_The_attribute_named_0_will_be_overwritten_2710": "'{0}' 指定了兩次。將會覆寫名為 '{0}' 的屬性。",
   "_0_can_only_be_imported_by_turning_on_the_esModuleInterop_flag_and_using_a_default_import_2596": "只能透過開啟 'esModuleInterop' 旗標並使用預設匯入來匯入 '{0}'。",
@@ -1396,6 +1661,8 @@
   "_0_implicitly_has_an_1_return_type_but_a_better_type_may_be_inferred_from_usage_7050": "'{0}' 隱含 '{1}' 傳回型別,但可從使用方式推斷更適合的類型。",
   "_0_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_reference_7023": "'{0}' 因為沒有傳回型別註解,且在其中一個傳回運算式中直接或間接參考了自己,所以隱含了傳回型別 'any'。",
   "_0_implicitly_has_type_any_because_it_does_not_have_a_type_annotation_and_is_referenced_directly_or__7022": "'{0}' 因為沒有類型註釋,且在其本身的初始設定式中直接或間接參考了自己,所以隱含有類型 'any'。",
+  "_0_index_signatures_are_incompatible_2634": "'{0}' 索引簽章不相容。",
+  "_0_index_type_1_is_not_assignable_to_2_index_type_3_2413": "'{0}' 索引類型 '{1}' 無法指派給 '{2}' 索引類型 '{3}'。",
   "_0_is_a_primitive_but_1_is_a_wrapper_object_Prefer_using_0_when_possible_2692": "'{0}' 為基元,但 '{1}' 為包裝函式物件。建議盡可能使用 '{0}'。",
   "_0_is_assignable_to_the_constraint_of_type_1_but_1_could_be_instantiated_with_a_different_subtype_of_5075": "'{0}' 可指派給 '{1}' 類型的條件約束,但可能會將 '{1}' 以不同的條件約束 '{2}' 子類型來具現化。",
   "_0_is_declared_but_its_value_is_never_read_6133": "'{0}' 已宣告但從未讀取其值。",
@@ -1403,7 +1670,7 @@
   "_0_is_declared_here_2728": "'{0}' 宣告於此處。",
   "_0_is_defined_as_a_property_in_class_1_but_is_overridden_here_in_2_as_an_accessor_2611": "'{0}' 在類別 '{1}' 中定義為屬性,但在此處的 '{2}' 中卻覆寫為存取子。",
   "_0_is_defined_as_an_accessor_in_class_1_but_is_overridden_here_in_2_as_an_instance_property_2610": "'{0}' 在類別 '{1}' 中定義為存取子,但在此處的 '{2}' 中卻覆寫為執行個體屬性。",
-  "_0_is_deprecated_6385": "'{0}' 已淘汰",
+  "_0_is_deprecated_6385": "'{0}' 已淘汰。",
   "_0_is_not_a_valid_meta_property_for_keyword_1_Did_you_mean_2_17012": "'{0}' 對關鍵字 '{1}' 而言不是有效的中繼屬性。您是指 '{2}' 嗎?",
   "_0_is_not_allowed_as_a_variable_declaration_name_1389": "'{0}' 不能是變數宣告名稱。",
   "_0_is_referenced_directly_or_indirectly_in_its_own_base_expression_2506": "'{0}' 在其本身的基底運算式中直接或間接受到參考。",
@@ -1428,7 +1695,7 @@
   "_0_only_refers_to_a_type_but_is_being_used_as_a_namespace_here_2702": "'{0}' 只參考類型,但在這裡用作命名空間。",
   "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_2693": "'{0}' 只會參考類型,但此處將其用為值。",
   "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_Did_you_mean_to_use_1_in_0_2690": "'{0}' 僅限於類型,但此處用為值。您要使用 '{1} in {0}' 嗎?",
-  "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_Do_you_need_to_change_your_target_library_2585": "'{0}' 只是類型,但在此處卻作為值使用。需要變更您的目標程式庫嗎? 請嘗試將 `lib` 編譯器選項變更為 es2015 或更新版本。",
+  "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_Do_you_need_to_change_your_target_library_2585": "「{0}」僅指一種類型,但在此卻作為值使用。要變更您的目標程式庫嗎? 請嘗試將 `lib` 編譯器選項變更為 es2015 或更新版本。",
   "_0_refers_to_a_UMD_global_but_the_current_file_is_a_module_Consider_adding_an_import_instead_2686": "'{0}' 指的是全域的 UMD,但目前的檔案為模組。請考慮改為新增匯入。",
   "_0_refers_to_a_value_but_is_being_used_as_a_type_here_Did_you_mean_typeof_0_2749": "'{0}' 為值,但在此處卻作為類型使用。您是否是指 'typeof {0}'?",
   "_0_tag_already_specified_1223": "已指定 '{0}' 標記。",
@@ -1440,6 +1707,7 @@
   "_0_which_lacks_return_type_annotation_implicitly_has_an_1_yield_type_7055": "缺少傳回型別註解的 '{0}' 隱含 '{1}' 產生類型。",
   "abstract_modifier_can_only_appear_on_a_class_method_or_property_declaration_1242": "'abstract' 修飾元只能出現在類別宣告、方法宣告或屬性宣告。",
   "and_here_6204": "及此處。",
+  "arguments_cannot_be_referenced_in_property_initializers_2815": "屬性初始設定式中不得參考 'arguments'。",
   "await_expressions_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_fi_1375": "當檔案為模組時,只允許 'await' 運算式位於檔案的最上層,但是此檔案沒有匯入或匯出。請考慮新增空白的 'export {}',使這個檔案成為模組。",
   "await_expressions_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_1308": "只允許在非同步函式中與模組的最上層使用 'await' 運算式。",
   "await_expressions_cannot_be_used_in_a_parameter_initializer_2524": "'await' 運算式不得用於參數初始設定式。",
@@ -1456,6 +1724,7 @@
   "const_enums_can_only_be_used_in_property_or_index_access_expressions_or_the_right_hand_side_of_an_im_2475": "'const' 列舉只可用於屬性或索引存取運算式中,或用於匯入宣告、匯出指派或類型查詢的右側。",
   "constructor_cannot_be_used_as_a_parameter_property_name_2398": "'constructor' 不能作為參數屬性名稱使用。",
   "constructor_is_a_reserved_word_18012": "'#constructor' 為保留字。",
+  "default_Colon_6903": "預設:",
   "delete_cannot_be_called_on_an_identifier_in_strict_mode_1102": "不得在 strict 模式中對識別碼呼叫 'delete'。",
   "delete_this_Project_0_is_up_to_date_because_it_was_previously_built_6360": "刪除此項目 - 因為先前已建置專案 '{0}',所以其為最新狀態",
   "export_Asterisk_does_not_re_export_a_default_1195": "'export *' 不會重新匯出預設匯出。",
@@ -1466,17 +1735,26 @@
   "extends_clause_of_exported_class_0_has_or_is_using_private_name_1_4020": "匯出類別 '{0}' 的 'extends' 子句具有或使用私用名稱 '{1}'。",
   "extends_clause_of_exported_class_has_or_is_using_private_name_0_4021": "匯出類別的 'extends' 子句包含或使用了私人名稱 '{0}'。",
   "extends_clause_of_exported_interface_0_has_or_is_using_private_name_1_4022": "匯出介面 '{0}' 的 'extends' 子句具有或使用私用名稱 '{1}'。",
+  "false_unless_composite_is_set_6906": "`false`,除非已設定 `composite`",
+  "false_unless_strict_is_set_6905": "`false`,除非已設定 `strict`",
   "file_6025": "檔案",
+  "for_await_loops_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_file_1431": "當檔案為模組時,只允許 'for await' 迴圈位於檔案的最上層,但是此檔案沒有匯入或匯出。請考慮新增空白的 'export {}',使這個檔案成為模組。",
+  "for_await_loops_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_1103": "只允許在非同步函式中與模組的最上層使用 'for await' 迴圈。",
   "get_and_set_accessor_must_have_the_same_this_type_2682": "'get' 和 'set' 存取子必須有相同的 'this' 類型。",
-  "get_and_set_accessor_must_have_the_same_type_2380": "get' 和 'set' 存取子的類型必須相同。",
   "get_and_set_accessors_cannot_declare_this_parameters_2784": "'get' 和 'set' 存取子不可宣告 'this' 參數。",
+  "if_files_is_specified_otherwise_Asterisk_Asterisk_Slash_Asterisk_6908": "如果指定 `files`,則為 `[]`,否則為 `[\"**/*\"]5D;`",
   "implements_clause_already_seen_1175": "已經有 'implements' 子句。",
   "implements_clauses_can_only_be_used_in_TypeScript_files_8005": "'implements' 子句只可用於 TypeScript 檔案中。",
   "import_can_only_be_used_in_TypeScript_files_8002": "'import ... =' 只可用於 TypeScript 檔案中。",
   "infer_declarations_are_only_permitted_in_the_extends_clause_of_a_conditional_type_1338": "只允許在條件式類型的 'extends' 子句中使用 'infer' 宣告。",
   "let_declarations_can_only_be_declared_inside_a_block_1157": "只能在區塊內宣告 'let' 宣告。",
   "let_is_not_allowed_to_be_used_as_a_name_in_let_or_const_declarations_2480": "'let' 或 'const' 宣告中不得使用 'let' 作為名稱。",
+  "module_AMD_or_UMD_or_System_or_ES6_then_Classic_Otherwise_Node_69010": "模組 === `AMD` 或 `UMD` 或 `System` 或 `ES6`,則為 `Classic`,否則為 `Node`",
+  "module_system_or_esModuleInterop_6904": "模組 === \"system\" 或 esModuleInterop",
   "new_expression_whose_target_lacks_a_construct_signature_implicitly_has_an_any_type_7009": "目標缺少建構簽章的 'new' 運算式隱含了 'any' 類型。",
+  "node_modules_bower_components_jspm_packages_plus_the_value_of_outDir_if_one_is_specified_6907": "`[\"node_modules\", \"bower_components\", \"jspm_packages\"]`,加上 `outDir` 的值 (如果有指定)。",
+  "one_of_Colon_6900": "以下其中一個:",
+  "one_or_more_Colon_6901": "以下一或多個:",
   "options_6024": "選項",
   "or_expected_1144": "必須是 '{' 或 ';'。",
   "package_json_does_not_have_a_0_field_6100": "'package.json' 沒有 '{0}' 欄位。",
@@ -1507,6 +1785,9 @@
   "this_cannot_be_referenced_in_constructor_arguments_2333": "建構函式引數中不得參考 'this'。",
   "this_cannot_be_referenced_in_current_location_2332": "目前的位置中不得參考 'this'。",
   "this_implicitly_has_type_any_because_it_does_not_have_a_type_annotation_2683": "因為 'this' 沒有型別註解,所以隱含具有類型 'any'。",
+  "true_if_composite_false_otherwise_6909": "如果為 `composite`,則為 `true`,否則為 `false`",
+  "tsc_Colon_The_TypeScript_Compiler_6922": "tsc: TypeScript 編譯器",
+  "type_Colon_6902": "輸入:",
   "unique_symbol_types_are_not_allowed_here_1335": "這裡不允許 'unique symbol' 型別。",
   "unique_symbol_types_are_only_allowed_on_variables_in_a_variable_statement_1334": "只有變數陳述式中的變數允許 'unique symbol' 型別。",
   "unique_symbol_types_may_not_be_used_on_a_variable_declaration_with_a_binding_name_1333": "'unique symbol' 型別無法用在具有繫結名稱的變數宣告上。",
@@ -1514,5 +1795,6 @@
   "use_strict_directive_used_here_1349": "'use strict' 指示詞已用於此處。",
   "with_statements_are_not_allowed_in_an_async_function_block_1300": "非同步函式區塊中不允許 'with' 陳述式。",
   "with_statements_are_not_allowed_in_strict_mode_1101": "不得在 strict 模式中使用 'with' 陳述式。",
+  "yield_expression_implicitly_results_in_an_any_type_because_its_containing_generator_lacks_a_return_t_7057": "因為 'yield' 運算式包含的產生器缺少傳回型別註解,所以其隱含導致 'any' 類型。",
   "yield_expressions_cannot_be_used_in_a_parameter_initializer_2523": "'yield' 運算式不得用於參數初始設定式。"
 }
\ No newline at end of file
diff --git a/node_modules/typescript/package.json b/node_modules/typescript/package.json
index 2c1d8ca..00e9a90 100644
--- a/node_modules/typescript/package.json
+++ b/node_modules/typescript/package.json
@@ -2,7 +2,7 @@
   "name": "typescript",
   "author": "Microsoft Corp.",
   "homepage": "https://www.typescriptlang.org/",
-  "version": "4.3.5",
+  "version": "4.4.2",
   "license": "Apache-2.0",
   "description": "TypeScript is a language for application scale JavaScript development",
   "keywords": [
@@ -53,9 +53,9 @@
     "@types/source-map-support": "latest",
     "@types/through2": "latest",
     "@types/xml2js": "^0.4.0",
-    "@typescript-eslint/eslint-plugin": "^4.19.0",
-    "@typescript-eslint/experimental-utils": "^4.19.0",
-    "@typescript-eslint/parser": "^4.19.0",
+    "@typescript-eslint/eslint-plugin": "^4.28.0",
+    "@typescript-eslint/experimental-utils": "^4.28.0",
+    "@typescript-eslint/parser": "^4.28.0",
     "async": "latest",
     "azure-devops-node-api": "^10.1.0",
     "browser-resolve": "^1.11.2",
diff --git a/package-lock.json b/package-lock.json
index e810403..f2cc930 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -62,7 +62,7 @@
         "stylelint-config-standard": "21.0.0",
         "svgo": "2.3.1",
         "terser": "5.6.1",
-        "typescript": "^4.3.5",
+        "typescript": "^4.4.2",
         "ws": "7.5.3",
         "yargs": "16.2.0"
       }
@@ -335,9 +335,9 @@
       }
     },
     "node_modules/@eslint/eslintrc/node_modules/globals": {
-      "version": "13.10.0",
-      "resolved": "https://registry.npmjs.org/globals/-/globals-13.10.0.tgz",
-      "integrity": "sha512-piHC3blgLGFjvOuMmWZX60f+na1lXFDhQXBf1UYp2fXPXqvEUbOhNwi6BsQ0bQishwedgnjkwv1d9zKf+MWw3g==",
+      "version": "13.11.0",
+      "resolved": "https://registry.npmjs.org/globals/-/globals-13.11.0.tgz",
+      "integrity": "sha512-08/xrJ7wQjK9kkkRoI3OFUBbLx4f+6x3SGwcPvQ0QH6goFDrOU2oyAWrmh3dJezu65buo+HBMzAMQy6rovVC3g==",
       "dev": true,
       "dependencies": {
         "type-fest": "^0.20.2"
@@ -1262,9 +1262,9 @@
       }
     },
     "node_modules/ast-types/node_modules/tslib": {
-      "version": "2.3.0",
-      "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.0.tgz",
-      "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==",
+      "version": "2.3.1",
+      "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz",
+      "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==",
       "dev": true
     },
     "node_modules/astral-regex": {
@@ -1908,9 +1908,9 @@
       ]
     },
     "node_modules/css-select/node_modules/domhandler": {
-      "version": "4.2.0",
-      "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.0.tgz",
-      "integrity": "sha512-zk7sgt970kzPks2Bf+dwT/PLzghLnsivb9CcxkvR8Mzr66Olr0Ofd8neSbglHJHaHa2MadfoSdNlKYAaafmWfA==",
+      "version": "4.2.2",
+      "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.2.tgz",
+      "integrity": "sha512-PzE9aBMsdZO8TK4BnuJwH0QT41wgMbRzuZrHUcpYncEjmQazq8QEaBWgLG7ZyC/DAZKEgglpIA6j4Qn/HmxS3w==",
       "dev": true,
       "dependencies": {
         "domelementtype": "^2.2.0"
@@ -1923,9 +1923,9 @@
       }
     },
     "node_modules/css-select/node_modules/domutils": {
-      "version": "2.7.0",
-      "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.7.0.tgz",
-      "integrity": "sha512-8eaHa17IwJUPAiB+SoTYBo5mCdeMgdcAoXJ59m6DT1vw+5iLS3gNoqYaRowaBKtGVrOF1Jz4yDTgYKLK2kvfJg==",
+      "version": "2.8.0",
+      "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz",
+      "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==",
       "dev": true,
       "dependencies": {
         "dom-serializer": "^1.0.1",
@@ -2864,9 +2864,9 @@
       }
     },
     "node_modules/eslint/node_modules/chalk": {
-      "version": "4.1.1",
-      "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz",
-      "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==",
+      "version": "4.1.2",
+      "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+      "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
       "dev": true,
       "dependencies": {
         "ansi-styles": "^4.1.0",
@@ -2919,9 +2919,9 @@
       }
     },
     "node_modules/eslint/node_modules/globals": {
-      "version": "13.10.0",
-      "resolved": "https://registry.npmjs.org/globals/-/globals-13.10.0.tgz",
-      "integrity": "sha512-piHC3blgLGFjvOuMmWZX60f+na1lXFDhQXBf1UYp2fXPXqvEUbOhNwi6BsQ0bQishwedgnjkwv1d9zKf+MWw3g==",
+      "version": "13.11.0",
+      "resolved": "https://registry.npmjs.org/globals/-/globals-13.11.0.tgz",
+      "integrity": "sha512-08/xrJ7wQjK9kkkRoI3OFUBbLx4f+6x3SGwcPvQ0QH6goFDrOU2oyAWrmh3dJezu65buo+HBMzAMQy6rovVC3g==",
       "dev": true,
       "dependencies": {
         "type-fest": "^0.20.2"
@@ -4662,9 +4662,9 @@
       }
     },
     "node_modules/log-symbols/node_modules/chalk": {
-      "version": "4.1.1",
-      "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz",
-      "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==",
+      "version": "4.1.2",
+      "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+      "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
       "dev": true,
       "dependencies": {
         "ansi-styles": "^4.1.0",
@@ -4888,13 +4888,13 @@
       }
     },
     "node_modules/meow/node_modules/normalize-package-data": {
-      "version": "3.0.2",
-      "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.2.tgz",
-      "integrity": "sha512-6CdZocmfGaKnIHPVFhJJZ3GuR8SsLKvDANFp47Jmy51aKIr8akjAWTSxtpI+MBgBFdSMRyo4hMpDlT6dTffgZg==",
+      "version": "3.0.3",
+      "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz",
+      "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==",
       "dev": true,
       "dependencies": {
         "hosted-git-info": "^4.0.1",
-        "resolve": "^1.20.0",
+        "is-core-module": "^2.5.0",
         "semver": "^7.3.4",
         "validate-npm-package-license": "^3.0.1"
       },
@@ -6304,9 +6304,9 @@
       }
     },
     "node_modules/recast/node_modules/tslib": {
-      "version": "2.3.0",
-      "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.0.tgz",
-      "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==",
+      "version": "2.3.1",
+      "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz",
+      "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==",
       "dev": true
     },
     "node_modules/redent": {
@@ -6733,9 +6733,9 @@
       }
     },
     "node_modules/socket.io/node_modules/@types/node": {
-      "version": "14.17.6",
-      "resolved": "https://registry.npmjs.org/@types/node/-/node-14.17.6.tgz",
-      "integrity": "sha512-iBxsxU7eswQDGhlr3AiamBxOssaYxbM+NKXVil8jg9yFXvrfEFbDumLD/2dMTB+zYyg7w+Xjt8yuxfdbUHAtcQ==",
+      "version": "14.17.15",
+      "resolved": "https://registry.npmjs.org/@types/node/-/node-14.17.15.tgz",
+      "integrity": "sha512-D1sdW0EcSCmNdLKBGMYb38YsHUS6JcM7yQ6sLQ9KuZ35ck7LYCKE7kYFHOO59ayFOY3zobWVZxf4KXhYHcHYFA==",
       "dev": true
     },
     "node_modules/source-map": {
@@ -7087,9 +7087,9 @@
       "dev": true
     },
     "node_modules/stylelint/node_modules/chalk": {
-      "version": "4.1.1",
-      "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz",
-      "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==",
+      "version": "4.1.2",
+      "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+      "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
       "dev": true,
       "dependencies": {
         "ansi-styles": "^4.1.0",
@@ -7258,9 +7258,9 @@
       }
     },
     "node_modules/svgo/node_modules/chalk": {
-      "version": "4.1.1",
-      "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz",
-      "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==",
+      "version": "4.1.2",
+      "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+      "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
       "dev": true,
       "dependencies": {
         "ansi-styles": "^4.1.0",
@@ -7634,9 +7634,9 @@
       }
     },
     "node_modules/typescript": {
-      "version": "4.3.5",
-      "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.3.5.tgz",
-      "integrity": "sha512-DqQgihaQ9cUrskJo9kIyW/+g0Vxsk8cDtZ52a3NGh0YNTfpUSArXSohyUGnvbPazEPLu398C0UxmKSOrPumUzA==",
+      "version": "4.4.2",
+      "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.4.2.tgz",
+      "integrity": "sha512-gzP+t5W4hdy4c+68bfcv0t400HVJMMd2+H9B7gae1nQlBzCqvrXX+6GL/b3GAgyTH966pzrZ70/fRjwAtZksSQ==",
       "dev": true,
       "bin": {
         "tsc": "bin/tsc",
@@ -8350,9 +8350,9 @@
       },
       "dependencies": {
         "globals": {
-          "version": "13.10.0",
-          "resolved": "https://registry.npmjs.org/globals/-/globals-13.10.0.tgz",
-          "integrity": "sha512-piHC3blgLGFjvOuMmWZX60f+na1lXFDhQXBf1UYp2fXPXqvEUbOhNwi6BsQ0bQishwedgnjkwv1d9zKf+MWw3g==",
+          "version": "13.11.0",
+          "resolved": "https://registry.npmjs.org/globals/-/globals-13.11.0.tgz",
+          "integrity": "sha512-08/xrJ7wQjK9kkkRoI3OFUBbLx4f+6x3SGwcPvQ0QH6goFDrOU2oyAWrmh3dJezu65buo+HBMzAMQy6rovVC3g==",
           "dev": true,
           "requires": {
             "type-fest": "^0.20.2"
@@ -9089,9 +9089,9 @@
       },
       "dependencies": {
         "tslib": {
-          "version": "2.3.0",
-          "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.0.tgz",
-          "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==",
+          "version": "2.3.1",
+          "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz",
+          "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==",
           "dev": true
         }
       }
@@ -9624,18 +9624,18 @@
           "dev": true
         },
         "domhandler": {
-          "version": "4.2.0",
-          "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.0.tgz",
-          "integrity": "sha512-zk7sgt970kzPks2Bf+dwT/PLzghLnsivb9CcxkvR8Mzr66Olr0Ofd8neSbglHJHaHa2MadfoSdNlKYAaafmWfA==",
+          "version": "4.2.2",
+          "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.2.tgz",
+          "integrity": "sha512-PzE9aBMsdZO8TK4BnuJwH0QT41wgMbRzuZrHUcpYncEjmQazq8QEaBWgLG7ZyC/DAZKEgglpIA6j4Qn/HmxS3w==",
           "dev": true,
           "requires": {
             "domelementtype": "^2.2.0"
           }
         },
         "domutils": {
-          "version": "2.7.0",
-          "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.7.0.tgz",
-          "integrity": "sha512-8eaHa17IwJUPAiB+SoTYBo5mCdeMgdcAoXJ59m6DT1vw+5iLS3gNoqYaRowaBKtGVrOF1Jz4yDTgYKLK2kvfJg==",
+          "version": "2.8.0",
+          "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz",
+          "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==",
           "dev": true,
           "requires": {
             "dom-serializer": "^1.0.1",
@@ -10123,9 +10123,9 @@
           }
         },
         "chalk": {
-          "version": "4.1.1",
-          "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz",
-          "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==",
+          "version": "4.1.2",
+          "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+          "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
           "dev": true,
           "requires": {
             "ansi-styles": "^4.1.0",
@@ -10160,9 +10160,9 @@
           "dev": true
         },
         "globals": {
-          "version": "13.10.0",
-          "resolved": "https://registry.npmjs.org/globals/-/globals-13.10.0.tgz",
-          "integrity": "sha512-piHC3blgLGFjvOuMmWZX60f+na1lXFDhQXBf1UYp2fXPXqvEUbOhNwi6BsQ0bQishwedgnjkwv1d9zKf+MWw3g==",
+          "version": "13.11.0",
+          "resolved": "https://registry.npmjs.org/globals/-/globals-13.11.0.tgz",
+          "integrity": "sha512-08/xrJ7wQjK9kkkRoI3OFUBbLx4f+6x3SGwcPvQ0QH6goFDrOU2oyAWrmh3dJezu65buo+HBMzAMQy6rovVC3g==",
           "dev": true,
           "requires": {
             "type-fest": "^0.20.2"
@@ -11778,9 +11778,9 @@
           }
         },
         "chalk": {
-          "version": "4.1.1",
-          "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz",
-          "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==",
+          "version": "4.1.2",
+          "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+          "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
           "dev": true,
           "requires": {
             "ansi-styles": "^4.1.0",
@@ -11966,13 +11966,13 @@
           }
         },
         "normalize-package-data": {
-          "version": "3.0.2",
-          "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.2.tgz",
-          "integrity": "sha512-6CdZocmfGaKnIHPVFhJJZ3GuR8SsLKvDANFp47Jmy51aKIr8akjAWTSxtpI+MBgBFdSMRyo4hMpDlT6dTffgZg==",
+          "version": "3.0.3",
+          "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz",
+          "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==",
           "dev": true,
           "requires": {
             "hosted-git-info": "^4.0.1",
-            "resolve": "^1.20.0",
+            "is-core-module": "^2.5.0",
             "semver": "^7.3.4",
             "validate-npm-package-license": "^3.0.1"
           }
@@ -13090,9 +13090,9 @@
       },
       "dependencies": {
         "tslib": {
-          "version": "2.3.0",
-          "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.0.tgz",
-          "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==",
+          "version": "2.3.1",
+          "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz",
+          "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==",
           "dev": true
         }
       }
@@ -13422,9 +13422,9 @@
       },
       "dependencies": {
         "@types/node": {
-          "version": "14.17.6",
-          "resolved": "https://registry.npmjs.org/@types/node/-/node-14.17.6.tgz",
-          "integrity": "sha512-iBxsxU7eswQDGhlr3AiamBxOssaYxbM+NKXVil8jg9yFXvrfEFbDumLD/2dMTB+zYyg7w+Xjt8yuxfdbUHAtcQ==",
+          "version": "14.17.15",
+          "resolved": "https://registry.npmjs.org/@types/node/-/node-14.17.15.tgz",
+          "integrity": "sha512-D1sdW0EcSCmNdLKBGMYb38YsHUS6JcM7yQ6sLQ9KuZ35ck7LYCKE7kYFHOO59ayFOY3zobWVZxf4KXhYHcHYFA==",
           "dev": true
         }
       }
@@ -13724,9 +13724,9 @@
           "dev": true
         },
         "chalk": {
-          "version": "4.1.1",
-          "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz",
-          "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==",
+          "version": "4.1.2",
+          "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+          "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
           "dev": true,
           "requires": {
             "ansi-styles": "^4.1.0",
@@ -13868,9 +13868,9 @@
           }
         },
         "chalk": {
-          "version": "4.1.1",
-          "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz",
-          "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==",
+          "version": "4.1.2",
+          "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+          "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
           "dev": true,
           "requires": {
             "ansi-styles": "^4.1.0",
@@ -14164,9 +14164,9 @@
       }
     },
     "typescript": {
-      "version": "4.3.5",
-      "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.3.5.tgz",
-      "integrity": "sha512-DqQgihaQ9cUrskJo9kIyW/+g0Vxsk8cDtZ52a3NGh0YNTfpUSArXSohyUGnvbPazEPLu398C0UxmKSOrPumUzA==",
+      "version": "4.4.2",
+      "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.4.2.tgz",
+      "integrity": "sha512-gzP+t5W4hdy4c+68bfcv0t400HVJMMd2+H9B7gae1nQlBzCqvrXX+6GL/b3GAgyTH966pzrZ70/fRjwAtZksSQ==",
       "dev": true
     },
     "ua-parser-js": {
diff --git a/scripts/deps/manage_node_deps.py b/scripts/deps/manage_node_deps.py
index 38a0a0d..e44f783 100755
--- a/scripts/deps/manage_node_deps.py
+++ b/scripts/deps/manage_node_deps.py
@@ -95,7 +95,7 @@
     "stylelint-config-standard": "21.0.0",
     "svgo": "2.3.1",
     "terser": "5.6.1",
-    "typescript": "4.3.5",
+    "typescript": "4.4.2",
     "ws": "7.5.3",
     "yargs": "16.2.0",
 }
diff --git a/test/unittests/front_end/panels/issues/IssueAggregator_test.ts b/test/unittests/front_end/panels/issues/IssueAggregator_test.ts
index d96466b..f87a65f 100644
--- a/test/unittests/front_end/panels/issues/IssueAggregator_test.ts
+++ b/test/unittests/front_end/panels/issues/IssueAggregator_test.ts
@@ -15,7 +15,7 @@
 import {createFakeSetting, enableFeatureForTest} from '../../helpers/EnvironmentHelpers.js';
 
 describe('AggregatedIssue', async () => {
-  const aggregationKey = 'key' as Issues.IssueAggregator.AggregationKey;
+  const aggregationKey = 'key' as unknown as Issues.IssueAggregator.AggregationKey;
   it('deduplicates network requests across issues', () => {
     const issue1 = StubIssue.createFromRequestIds(['id1', 'id2']);
     const issue2 = StubIssue.createFromRequestIds(['id1']);